%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_libs('; put 'TX_FROM num ¬null format=datetime19.3,'; put 'TX_TO num ¬null format=datetime19.3,'; put 'libref char(8) label=''Library Ref'','; put 'engine char(32) label=''Library Engine'','; put 'libname char(256) format=$256. label=''Library Name'','; put 'paths char(8192) label=''Library Paths'','; put 'perms char(500) label=''Library Permissions (if BASE)'','; put 'owners char(500) label=''Library Owners (if BASE)'','; put 'schemas char(500) label=''Library Schemas (if DB)'','; put 'libid char(17) label=''LibraryId'''; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_datacatalog_libs;'; put 'index create'; put 'pk_mpe_datacatalog_libs=(libref tx_to)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_datacatalog_TABS('; put 'TX_FROM num ¬null format=datetime19.3,'; put 'TX_TO num ¬null format=datetime19.3,'; put 'libref char(8) label=''Library Name'','; put 'dsn char(64) label=''Member Name'','; put 'memtype char(8) label=''Member Type'','; put 'dbms_memtype char(32) label=''DBMS Member Type'','; put 'memlabel char(512) label=''Data Set Label'','; put 'typemem char(8) label=''Data Set Type'','; put 'nvar num label=''Number of Variables'','; put 'compress char(8) label=''Compression Routine'','; put 'pk_fields char(512)'; put 'label=''Primary Key Fields (identified by being in a constraint that is both Unique and Not Null)'''; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_datacatalog_TABS;'; put 'index create'; put 'pk_mpe_datacatalog_TABS=(libref dsn tx_to)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_datacatalog_vars('; put 'TX_FROM num ¬null format=datetime19.3,'; put 'TX_TO num ¬null format=datetime19.3,'; put 'libref char(8) label=''Library Name'','; put 'dsn char(64) label=''Table Name'','; put 'name char(64) label=''Column Name'','; put 'memtype char(8) label=''Member Type'','; put 'type char(16) label=''Column Type'','; put 'length num label=''Column Length'','; put 'varnum num label=''Column Number in Table'','; put 'label char(512) label=''Column Label'','; put 'format char(49) label=''Column Format'','; put 'idxusage char(9) label=''Column Index Type'','; put 'notnull char(3) label=''Not NULL?'','; put 'pk_ind num label=''Primary Key Indicator (1=Primary Key field)'''; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_datacatalog_vars;'; put 'index create'; put 'pk_mpe_datacatalog_vars=(libref dsn name tx_to)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_datastatus_libs('; put 'TX_FROM num ¬null format=datetime19.3,'; put 'TX_TO num ¬null format=datetime19.3,'; put 'libref char(8) label=''Library Name'','; put 'libsize num format=SIZEKMG. label=''Size of library'','; put 'table_cnt num label=''Number of Tables'''; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_datastatus_libs;'; put 'index create'; put 'pk_mpe_datastatus_libs=(libref tx_to)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_datastatus_tabs('; put 'TX_FROM num ¬null format=datetime19.3,'; put 'TX_TO num ¬null format=datetime19.3,'; put 'libref char(8) label=''Library Name'','; put 'dsn char(64) label=''Member Name'','; put 'filesize num format=SIZEKMG. label=''Size of file'','; put 'crdate num format=DATETIME. informat=DATETIME. label=''Date Created'','; put 'modate num format=DATETIME. informat=DATETIME. label=''Date Modified'','; put 'nobs num label=''Number of Physical (Actual, inc. deleted) Observations'''; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_datastatus_tabs;'; put 'index create'; put 'pk_mpe_datastatus_tabs=(libref dsn tx_to)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_datadictionary'; put '('; put 'TX_FROM num ¬null format=datetime19.3,'; put 'TX_TO num ¬null format=datetime19.3,'; put 'DD_TYPE char(16),'; put 'DD_SOURCE char(1024),'; put 'DD_SHORTDESC char(256),'; put 'DD_LONGDESC char(32767),'; put 'DD_OWNER char(128),'; put 'DD_RESPONSIBLE char(128),'; put 'DD_SENSITIVITY char(64)'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_datadictionary;'; put 'index create'; put 'pk_mpe_datadictionary=(tx_to dd_type dd_source)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_dataloads('; put 'libref varchar(8) ¬null,'; put 'dsn varchar(32) ¬null,'; put 'etlsource varchar(100) ¬null,'; put 'loadtype varchar(20) ¬null,'; put 'changed_records int,'; put 'new_records int,'; put 'deleted_records int,'; put 'duration num,'; put 'user_nm varchar(50) ¬null,'; put 'processed_dttm num format=datetime19.3,'; put 'mac_ver varchar(5)'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_dataloads;'; put 'index create'; put 'pk_mpe_dataloads=(processed_dttm libref dsn etlsource)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_emails('; put 'tx_from num ¬null format=datetime19.3,'; put 'tx_to num ¬null format=datetime19.3,'; put 'user_name char(50) ¬null,'; put 'user_displayname char(100),'; put 'user_email char(100) ¬null'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_emails;'; put 'index create'; put 'pk_mpe_emails=(tx_to user_name)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_excel_config('; put 'tx_from num ¬null format=datetime19.3,'; put 'tx_to num ¬null format=datetime19.3,'; put 'xl_libref char(8),'; put 'xl_table char(32),'; put 'xl_column char(32),'; put 'xl_rule char(32),'; put 'xl_active num'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_excel_config;'; put 'index create'; put 'pk_mpe_excel_config=(tx_to xl_libref xl_table xl_column)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..MPE_XLMAP_DATA('; put 'LOAD_REF char(32) ¬null,'; put 'XLMAP_ID char(32) ¬null,'; put 'XLMAP_RANGE_ID char(32) ¬null,'; put 'ROW_NO num ¬null,'; put 'COL_NO num ¬null,'; put 'VALUE_TXT char(4000)'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify MPE_XLMAP_DATA;'; put 'index create'; put 'pk_MPE_XLMAP_DATA=(load_ref xlmap_id xlmap_range_id row_no col_no)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_xlmap_info('; put 'tx_from num ¬null,'; put 'tx_to num ¬null,'; put 'XLMAP_ID char(32) ¬null,'; put 'XLMAP_DESCRIPTION char(1000) ¬null,'; put 'XLMAP_TARGETLIBDS char(41) ¬null'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_xlmap_info;'; put 'index create'; put 'pk_mpe_xlmap_info=(tx_to xlmap_id)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_xlmap_rules('; put 'tx_from num ¬null,'; put 'tx_to num ¬null,'; put 'XLMAP_ID char(32) ¬null,'; put 'XLMAP_RANGE_ID char(32) ¬null,'; put 'XLMAP_SHEET char(32) ¬null,'; put 'XLMAP_START char(1000) ¬null,'; put 'XLMAP_FINISH char(1000)'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_xlmap_rules;'; put 'index create'; put 'pk_mpe_xlmap_rules=(tx_to xlmap_id xlmap_range_id)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_filteranytable('; put 'filter_rk num ¬null,'; put 'filter_hash char(32) ¬null,'; put 'filter_table char(41) ¬null,'; put 'processed_dttm num ¬null format=datetime19.'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_filteranytable;'; put 'index create filter_rk /nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_filtersource('; put 'filter_hash char(32) ¬null,'; put 'filter_line num ¬null,'; put 'group_logic char(3) ¬null,'; put 'subgroup_logic char(3) ¬null,'; put 'subgroup_id num ¬null,'; put 'variable_nm varchar(32) ¬null,'; put 'operator_nm varchar(12) ¬null,'; put 'raw_value varchar(4000) ¬null,'; put 'processed_dttm num ¬null format=datetime19.'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_filtersource;'; put 'index create'; put 'pk_mpe_filtersource=(filter_hash filter_line)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_groups('; put 'tx_from num ¬null format=datetime19.3,'; put 'tx_to num ¬null format=datetime19.3,'; put 'group_name char(100) ¬null,'; put 'user_name char(50) ¬null,'; put 'group_desc char(256)'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_groups;'; put 'index create'; put 'pk_mpe_groups=(tx_to group_name user_name)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_lineage_cols'; put '('; put 'col_id char(32),'; put 'direction char(1),'; put 'sourcecoluri char(256),'; put 'map_type char(256),'; put 'map_transform char(256),'; put 'jobname char(256),'; put 'sourcetablename char(256),'; put 'sourcecolname char(256),'; put 'targettablename char(256),'; put 'targetcolname char(256),'; put 'targetcoluri char(256),'; put 'Derived_Rule char(500),'; put 'level int,'; put 'modified_dttm num format=datetime19.3,'; put 'modified_by char(64)'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_lineage_cols;'; put 'index create'; put 'pk_mpe_lineage_cols=(col_id direction sourcecoluri targetcoluri map_type map_transform)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..MPE_LINEAGE_TABS'; put '('; put 'tx_from num ¬null format=datetime19.3,'; put 'jobid char(17),'; put 'srctableid char(17),'; put 'tgttableid char(17),'; put 'jobname char(128),'; put 'srctabletype char(16),'; put 'srctablename char(64),'; put 'srclibref char(8),'; put 'tgttabletype char(16),'; put 'tgttablename char(64),'; put 'tgtlibref char(8),'; put 'tx_to num ¬null format=datetime19.3'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_lineage_tabs;'; put 'index create'; put 'pk_mpe_lineage_tabs=(tx_to jobid srctableid tgttableid)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_loads('; put 'csv_dir char(255),'; put 'user_nm char(50) ,'; put 'status char(15) ,'; put 'duration num ,'; put 'processed_dttm num format=datetime19.3,'; put 'reason_txt char(2048) ,'; put 'approvals char(64)'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_loads;'; put 'index create csv_dir /nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_lockanytable('; put 'lock_lib varchar(8) ¬null ,'; put 'lock_ds varchar(32) ¬null,'; put 'lock_status_cd varchar(10) ¬null,'; put 'lock_user_nm varchar(100) ¬null ,'; put 'lock_ref varchar(200),'; put 'lock_pid varchar(10),'; put 'lock_start_dttm num format=E8601DT26.6,'; put 'lock_end_dttm num format=E8601DT26.6'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_lockanytable;'; put 'index create'; put 'pk_mpe_lockanytable=(lock_lib lock_ds)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_maxkeyvalues('; put 'keytable varchar(41) label=''Base table in libref.dataset format'','; put 'keycolumn char(32) format=$32.'; put 'label=''The Surrogate / Retained key field containing the key values.'','; put 'max_key num label='; put '''Integer value representing current max RK or SK value in the KEYTABLE'','; put 'processed_dttm num format=E8601DT26.6'; put 'label=''Datetime this value was last updated'''; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_maxkeyvalues;'; put 'index create keytable /nomiss unique;'; put 'quit;'; put '/* no PK defined as it is a transaction table */'; put 'proc sql;'; put 'create table &lib..mpe_requests('; put 'request_dttm num ¬null format=datetime19.,'; put 'request_user char(64) ¬null,'; put 'request_service char(64) ¬null,'; put 'request_params char(128)'; put ');'; put 'proc sql;'; put 'create table &lib..mpe_review('; put 'table_id varchar(32) ¬null,'; put 'reviewed_by_nm varchar(100) ¬null,'; put 'base_table varchar(41) ¬null,'; put 'review_status_id varchar(10) ¬null,'; put 'reviewed_on_dttm num ¬null format=datetime19.3,'; put 'review_reason_txt varchar(400)'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_review;'; put 'index create'; put 'pk_mpe_review=(table_id reviewed_by_nm)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_row_level_security('; put 'tx_from num ¬null format=datetime19.3,'; put 'tx_to num ¬null format=datetime19.3,'; put 'RLS_RK num ¬null,'; put 'RLS_SCOPE char(8) ¬null,'; put 'RLS_GROUP char(128) ¬null,'; put 'RLS_LIBREF char(8) ¬null,'; put 'RLS_TABLE char(32) ¬null,'; put 'RLS_GROUP_LOGIC char(3) ¬null,'; put 'RLS_SUBGROUP_LOGIC char(3) ¬null,'; put 'RLS_SUBGROUP_ID num ¬null,'; put 'RLS_VARIABLE_NM varchar(32) ¬null,'; put 'RLS_OPERATOR_NM varchar(12) ¬null,'; put 'RLS_RAW_VALUE varchar(4000) ¬null,'; put 'RLS_ACTIVE num ¬null'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_row_level_security;'; put 'index create'; put 'pk_mpe_row_level_security=(tx_to RLS_RK)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_security('; put 'tx_from num ¬null format=datetime19.3,'; put 'tx_to num ¬null format=datetime19.3,'; put 'libref char(8) ¬null,'; put 'dsn char(32) ¬null,'; put 'access_level char(10) ¬null,'; put 'sas_group char(100) ¬null'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_security;'; put 'index create'; put 'pk_mpe_security=(tx_to libref dsn access_level sas_group)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_selectbox('; put 'ver_from_dttm num ¬null format=datetime19.3,/* timestamp for versioning*/'; put 'ver_to_dttm num ¬null format=datetime19.3, /* timestamp for versioning */'; put 'selectbox_rk num ¬null, /* surrogate key */'; put 'select_lib varchar(17) ¬null, /* libref (big enough for uri)*/'; put 'select_ds varchar(32) ¬null,'; put 'base_column varchar(36) ¬null, /* variable name against which to apply selectbox */'; put 'selectbox_value varchar(500) ¬null, /* selectbox value */'; put 'selectbox_order num , /* optional ordering (1 comes before 2) */'; put 'selectbox_type varchar(32) /* column type (blank for default, else'; put 'sas or js to indicate relevant system functions)*/'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_selectbox;'; put 'index create'; put 'pk_mpe_selectbox=(ver_to_dttm selectbox_rk)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_signoffs('; put 'tech_from_dttm num ¬null format=datetime19.3,'; put 'tech_to_dttm num ¬null format=datetime19.3,'; put 'signoff_table varchar(50) ¬null,'; put 'signoff_section_rk num ¬null,'; put 'signoff_version_rk num ¬null,'; put 'signoff_name varchar(100) ¬null'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_signoffs;'; put 'index create'; put 'pk_mpe_signoffs=(tech_to_dttm signoff_table signoff_section_rk)'; put '/nomiss unique;'; put 'quit;'; put '/* mpe_submit */'; put 'proc sql;'; put 'create table &lib..mpe_submit('; put 'table_id varchar(32) ¬null,'; put 'submit_status_cd varchar(10) ¬null,'; put 'base_lib char(8) ¬null,'; put 'base_ds char(32) ¬null,'; put 'submitted_by_nm varchar(100) ¬null,'; put 'submitted_on_dttm num ¬null format=datetime19.3,'; put 'submitted_reason_txt varchar(400),'; put 'input_obs num,'; put 'input_vars num,'; put 'num_of_approvals_required num ¬null ,'; put 'num_of_approvals_remaining num ¬null ,'; put 'reviewed_by_nm char(100),'; put 'reviewed_on_dttm num'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_submit;'; put 'index create table_id /nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_tables('; put 'tx_from num ¬null format=datetime19.3,'; put 'tx_to num ¬null format=datetime19.3,'; put 'libref char(8) ¬null,'; put 'dsn char(32) ¬null,'; put 'num_of_approvals_required int,'; put 'loadtype char(12) ,'; put 'buskey char(1000) ,'; put 'var_txfrom char(32) ,'; put 'var_txto char(32) ,'; put 'var_busfrom char(32) ,'; put 'var_busto char(32) ,'; put 'var_processed char(32) ,'; put 'close_vars varchar(500),'; put 'pre_edit_hook char(200),'; put 'post_edit_hook char(200),'; put 'pre_approve_hook char(200) ,'; put 'post_approve_hook char(200) ,'; put 'signoff_cols varchar(500),'; put 'signoff_hook varchar(200),'; put 'notes char(1000) ,'; put 'rk_underlying char(1000) ,'; put 'audit_libds char(41)'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_tables;'; put 'index create'; put 'pk_mpe_tables=(tx_to libref dsn)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_users('; put 'user_id char(50) ¬null,'; put 'last_seen_dt num ¬null format=date9.,'; put 'registered_dt num ¬null format=date9.'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_users;'; put 'index create user_id /nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..MPE_VALIDATIONS'; put '('; put 'TX_FROM num ¬null format=datetime19.3,'; put 'BASE_LIB varchar(8),'; put 'BASE_DS varchar(32),'; put 'BASE_COL varchar(32),'; put 'RULE_TYPE varchar(32),'; put 'RULE_VALUE varchar(128),'; put 'RULE_ACTIVE num ,'; put 'TX_TO num ¬null format=datetime19.3'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_validations;'; put 'index create'; put 'pk_mpe_validations=(tx_from base_lib base_ds base_col rule_type)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_x_test('; put 'primary_key_field num ¬null,'; put 'some_char char(32767) ,'; put 'some_dropdown char(128),'; put 'some_num num ,'; put 'some_date num format=date9.,'; put 'some_datetime num format=datetime19. informat=ANYDTDTM19.,'; put 'some_time num format=time8.,'; put 'some_shortnum num length=4,'; put 'some_bestnum num format=best.'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_x_test;'; put 'index create primary_key_field /nomiss unique;'; put 'quit;'; put '%mend mpe_makedatamodel;'; put '%macro 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 '/** @cond */'; put '%macro mf_existfeature(feature'; put ')/*/STORE SOURCE*/;'; put '%let feature=%upcase(&feature);'; put '%local platform;'; put '%let platform=%mf_getplatform();'; put '%if &feature= %then %do;'; put '%put No feature was requested for detection;'; put '%end;'; put '%else %if &feature=COLCONSTRAINTS %then %do;'; put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 0;'; put '%else 1;'; put '%end;'; put '%else %if &feature=PROCLUA %then %do;'; put '/* https://blogs.sas.com/content/sasdummy/2015/08/03/using-lua-within-your-sas-programs */'; put '%if &platform=SASVIYA %then 1;'; put '%else %if "&sysver"="9.2" or "&sysver"="9.3" %then 0;'; put '%else %if "&SYSVLONG" < "9.04.01M3" %then 0;'; put '%else 1;'; put '%end;'; put '%else %if &feature=DBMS_MEMTYPE %then %do;'; put '/* does dbms_memtype exist in dictionary.tables? */'; put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 0;'; put '%else 1;'; put '%end;'; put '%else %if &feature=EXPORTXLS %then %do;'; put '/* is it possible to PROC EXPORT an excel file? */'; put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 1;'; put '%else %if %sysfunc(sysprod(SAS/ACCESS Interface to PC Files)) = 1 %then 1;'; put '%else 0;'; put '%end;'; put '%else %do;'; put '-1'; put '%put &sysmacroname: &feature not found;'; put '%end;'; put '%mend mf_existfeature;'; put '/** @endcond */'; put '%macro mp_getconstraints(lib=WORK'; put ',ds='; put ',outds=mp_getconstraints'; put ',mdebug=0'; put ')/*/STORE SOURCE*/;'; put '%let lib=%upcase(&lib);'; put '%let ds=%upcase(&ds);'; put '/**'; put '* Cater for environments where sashelp.vcncolu is not available'; put '*/'; put '%if %sysfunc(exist(sashelp.vcncolu,view))=0 %then %do;'; put 'proc sql;'; put 'create table &outds('; put 'libref char(8)'; put ',TABLE_NAME char(32)'; put ',constraint_type char(8) label=''Constraint Type'''; put ',constraint_name char(32) label=''Constraint Name'''; put ',column_name char(32) label=''Column'''; put ',constraint_order num'; put ');'; put '%return;'; put '%end;'; put '/**'; put '* Neither dictionary tables nor sashelp provides a constraint order column,'; put '* however they DO arrive in the correct order. So, create the col.'; put '**/'; put '%local vw;'; put '%let vw=%mf_getuniquename(prefix=mp_getconstraints_vw_);'; put 'data &vw /view=&vw;'; put 'set sashelp.vcncolu;'; put 'where table_catalog="&lib";'; put '/* use retain approach to reset the constraint order with each constraint */'; put 'length tmp $1000;'; put 'retain tmp;'; put 'drop tmp;'; put 'if tmp ne catx(''|'',table_catalog,table_name,constraint_name) then do;'; put 'constraint_order=1;'; put 'end;'; put 'else constraint_order+1;'; put 'tmp=catx(''|'',table_catalog, table_name,constraint_name);'; put 'run;'; put '/* must use SQL as proc datasets does not support length changes */'; put 'proc sql noprint;'; put 'create table &outds as'; put 'select upcase(a.TABLE_CATALOG) as libref'; put ',upcase(a.TABLE_NAME) as TABLE_NAME'; put ',a.constraint_type'; put ',a.constraint_name'; put ',b.column_name'; put ',b.constraint_order'; put 'from dictionary.TABLE_CONSTRAINTS a'; put 'left join &vw b'; put 'on upcase(a.TABLE_CATALOG)=upcase(b.TABLE_CATALOG)'; put 'and upcase(a.TABLE_NAME)=upcase(b.TABLE_NAME)'; put 'and a.constraint_name=b.constraint_name'; put '/**'; put '* We cannot apply this clause to the underlying dictionary table. See:'; put '* https://communities.sas.com/t5/SAS-Programming/Unexpected-Where-Clause-behaviour-in-dictionary-TABLE/m-p/771554#M244867'; put '* cannot use`where calculated libref="&lib"` either as it will STILL execute'; put '* all the underlying constraint queries, causing exception errors in some'; put '* cases: https://github.com/sasjs/core/issues/283'; put '*/'; put 'where a.TABLE_CATALOG="&lib"'; put '%if "&ds" ne "" %then %do;'; put 'and upcase(a.TABLE_NAME)="&ds"'; put 'and upcase(b.TABLE_NAME)="&ds"'; put '%end;'; put 'order by libref, table_name, constraint_name, constraint_order'; put ';'; put '/* tidy up */'; put '%mp_dropmembers('; put '&vw,'; put 'iftrue=(&mdebug=0)'; put ')'; put '%mend mp_getconstraints;'; put '%macro mpe_refreshtables(lib,ds=#all);'; put '%let lib=%upcase(&lib);'; put '%let ds=%upcase(&ds);'; put '%local engine; %let engine=%mf_getengine(&lib);'; put '%local schema; %let schema=%mf_getschema(&lib);'; put '%put running &sysmacroname &lib(&engine &schema) for &ds;'; put 'proc sql;'; put 'create table cols as'; put 'select libname as libref'; put ',upcase(memname) as dsn'; put ',memtype'; put ',upcase(name) as name'; put ',type'; put ',length'; put ',varnum'; put ',label'; put ',format'; put ',idxusage'; put ',notnull'; put 'from dictionary.columns'; put 'where upcase(libname)="&lib"'; put '%if &ds ne #ALL %then %do;'; put 'and upcase(memname)="&ds"'; put '%end;'; put ';'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc afer &lib cols extraction)'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc afer &lib indexes extraction)'; put ')'; put '%if &engine=SQLSVR %then %do;'; put 'proc sql;'; put 'connect using &lib;'; put 'create table work.indexes as'; put 'select * from connection to &lib('; put 'select'; put 's.name as SchemaName,'; put 't.name as memname,'; put 'tc.name as name,'; put 'ic.key_ordinal as KeyOrderNr'; put 'from'; put 'sys.schemas s'; put 'inner join sys.tables t on s.schema_id=t.schema_id'; put 'inner join sys.indexes i on t.object_id=i.object_id'; put 'inner join sys.index_columns ic on i.object_id=ic.object_id'; put 'and i.index_id=ic.index_id'; put 'inner join sys.columns tc on ic.object_id=tc.object_id'; put 'and ic.column_id=tc.column_id'; put 'where i.is_primary_key=1'; put 'and s.name=%str(%'')&schema%str(%'')'; put 'order by t.name, ic.key_ordinal ;'; put ');disconnect from &lib;'; put 'create table finalcols as'; put 'select a.*'; put ',case when b.name is not null then 1 else 0 end as pk_ind'; put 'from work.cols a'; put 'left join work.indexes b'; put 'on a.dsn=b.memname'; put 'and upcase(a.name)=upcase(b.name)'; put 'order by libref,dsn;'; put '%end;'; put '%else %do;'; put '%local dsn;'; put '%if &ds = #ALL %then %let dsn=;'; put '%mp_getconstraints(lib=&lib.,ds=&dsn,outds=work.constraints)'; put '/* extract cols that are clearly primary keys */'; put 'proc sql;'; put 'create table work.pk4sure as'; put 'select libref'; put ',table_name'; put ',constraint_name'; put ',constraint_order'; put ',column_name as name'; put 'from work.constraints'; put 'where constraint_type=''PRIMARY'''; put 'order by 1,2,3,4;'; put '/* extract unique constraints where every col is also NOT NULL */'; put 'proc sql;'; put 'create table work.sum as'; put 'select a.libref'; put ',a.table_name'; put ',a.constraint_name'; put ',count(a.column_name) as unq_cnt'; put ',count(b.column_name) as nul_cnt'; put 'from work.constraints(where=(constraint_type =''UNIQUE'')) a'; put 'left join work.constraints(where=(constraint_type =''NOT NULL'')) b'; put 'on a.libref=b.libref'; put 'and a.table_name=b.table_name'; put 'and a.column_name=b.column_name'; put 'group by 1,2,3'; put 'having unq_cnt=nul_cnt;'; put '/* extract cols from the relevant unique constraints */'; put 'create table work.pkdefault as'; put 'select a.libref'; put ',a.table_name'; put ',a.constraint_name'; put ',b.constraint_order'; put ',b.column_name as name'; put 'from work.sum a'; put 'left join work.constraints(where=(constraint_type =''UNIQUE'')) b'; put 'on a.libref=b.libref'; put 'and a.table_name=b.table_name'; put 'and a.constraint_name=b.constraint_name'; put 'order by 1,2,3,4;'; put '/* extract cols from the relevant unique INDEXES */'; put 'create table work.pkfromindex as'; put 'select libname as libref'; put ',memname as table_name'; put ',indxname as constraint_name'; put ',indxpos as constraint_order'; put ',name'; put 'from dictionary.indexes'; put 'where nomiss=''yes'' and unique=''yes'' and upcase(libname)="&lib"'; put '%if &ds ne #ALL %then %do;'; put 'and upcase(memname)="&ds"'; put '%end;'; put 'order by 1,2,3,4;'; put '/* create one table */'; put 'data work.finalpks;'; put 'set pkdefault pk4sure pkfromindex;'; put 'pk_ind=1;'; put '/* if there are multiple unique constraints, take the first */'; put 'by libref table_name constraint_name;'; put 'retain keepme;'; put 'if first.table_name then keepme=1;'; put 'if first.constraint_name and not first.table_name then keepme=0;'; put 'if keepme=1;'; put 'run;'; put '/* join back to starting table */'; put 'proc sql;'; put 'create table finalcols as'; put 'select a.*'; put ',b.constraint_order'; put ',case when b.pk_ind=1 then 1 else 0 end as pk_ind'; put 'from work.cols a'; put 'left join work.finalpks b'; put 'on a.libref=b.libref'; put 'and a.dsn=b.table_name'; put 'and upcase(a.name)=upcase(b.name)'; put 'order by libref,dsn,constraint_order;'; put '%end;'; put '/* load columns */'; put '%bitemporal_dataloader(base_lib=&mpelib'; put ',base_dsn=mpe_datacatalog_vars'; put ',append_dsn=finalcols'; put ',PK=LIBREF DSN NAME'; put ',etlsource=&sysmacroname'; put ',loadtype=TXTEMPORAL'; put ',tech_from=TX_FROM'; put ',tech_to=TX_TO'; put '%if &ds ne #ALL %then %do;'; put ',close_vars=LIBREF DSN'; put '%end;'; put ',dclib=&mpelib'; put ')'; put '/* prepare tables */'; put 'proc sql;'; put 'create table work.tabs as select'; put 'libname as libref'; put ',upcase(memname) as dsn'; put ',memtype'; put '%if %mf_existfeature(DBMS_MEMTYPE)=1 %then %do;'; put ',dbms_memtype'; put '%end;'; put '%else %do;'; put ',''n/a'' as dbms_memtype format=$32.'; put '%end;'; put ',typemem'; put ',memlabel'; put ',nvar'; put ',compress'; put 'from dictionary.tables'; put 'where upcase(libname)="&lib"'; put '%if &ds ne #ALL %then %do;'; put 'and upcase(memname)="&ds"'; put '%end;'; put ';'; put 'data tabs2;'; put 'set finalcols;'; put 'length pk_fields $512;'; put 'retain pk_fields;'; put 'by libref dsn;'; put 'if first.dsn then pk_fields='''';'; put 'if pk_ind=1 then pk_fields=catx('' '',pk_fields,name);'; put 'if last.dsn then output;'; put 'run;'; put 'proc sql;'; put 'create table work.finaltabs as'; put 'select a.libref'; put ',a.dsn'; put ',a.memtype'; put ',a.dbms_memtype'; put ',a.typemem'; put ',a.memlabel'; put ',a.nvar'; put ',a.compress'; put ',b.pk_fields'; put 'from work.tabs a'; put 'left join work.tabs2 b'; put 'on a.libref=b.libref'; put 'and a.dsn=b.dsn;'; put '%bitemporal_dataloader(base_lib=&mpelib'; put ',base_dsn=mpe_datacatalog_tabs'; put ',append_dsn=finaltabs'; put ',PK=LIBREF DSN'; put ',etlsource=&sysmacroname'; put ',loadtype=TXTEMPORAL'; put ',tech_from=TX_FROM'; put ',tech_to=TX_TO'; put ',dclib=&mpelib'; put '%if &ds ne #ALL %then %do;'; put ',close_vars=LIBREF'; put '%end;'; put ')'; put '/* prepare table frequently changing attributes */'; put 'proc sql;'; put '%if &engine=SQLSVR %then %do;'; put 'connect using &lib;'; put 'create table work.attrs as select * from connection to &lib('; put 'SELECT SCHEMA_NAME(schema_id) as ''schema'', name, create_date, modify_date'; put 'FROM sys.tables ;'; put ');'; put 'create table work.nobs as select * from connection to &lib('; put 'SELECT SCHEMA_NAME(A.schema_id) AS ''schema'''; put ',A.Name, AVG(B.rows) AS ''RowCount'''; put 'FROM sys.objects A'; put 'INNER JOIN sys.partitions B ON A.object_id = B.object_id'; put 'WHERE A.type = ''U'''; put 'GROUP BY A.schema_id, A.Name'; put ');'; put 'disconnect from &lib;'; put 'create table statustabs as select'; put 'a.libref'; put ',a.dsn'; put ',b.create_date as crdate'; put ',b.modify_date as modate'; put ',. as filesize'; put ',c.RowCount as nobs'; put 'from work.tabs a'; put 'left join work.attrs(where=(schema="&schema")) b'; put 'on upcase(a.dsn)=upcase(b.name)'; put 'left join work.nobs(where=(schema="&schema")) c'; put 'on upcase(a.dsn)=upcase(c.name);'; put '%end;'; put '%else %do;'; put 'create table statustabs as select'; put 'libname as libref'; put ',upcase(memname) as dsn'; put ',crdate'; put ',modate'; put ',filesize'; put ',nobs'; put 'from dictionary.tables'; put 'where upcase(libname)="&lib"'; put '%if &ds ne #ALL %then %do;'; put 'and upcase(memname)="&ds"'; put '%end;'; put ';'; put '%end;'; put '%bitemporal_dataloader(base_lib=&mpelib'; put ',base_dsn=mpe_datastatus_tabs'; put ',append_dsn=statustabs'; put ',PK=LIBREF DSN'; put ',etlsource=&sysmacroname'; put ',loadtype=TXTEMPORAL'; put ',tech_from=TX_FROM'; put ',tech_to=TX_TO'; put ',dclib=&mpelib'; put '%if &ds ne #ALL %then %do;'; put ',close_vars=LIBREF'; put '%end;'; put ')'; put '%if &ds = #ALL %then %do;'; put 'proc sql;'; put 'create table statuslibs as select'; put 'libref'; put ',sum(filesize) as libsize'; put ',count(*) as table_cnt'; put 'from statustabs'; put 'group by 1;'; put '%bitemporal_dataloader(base_lib=&mpelib'; put ',base_dsn=mpe_datastatus_libs'; put ',append_dsn=statuslibs'; put ',PK=LIBREF'; put ',etlsource=&sysmacroname'; put ',loadtype=TXTEMPORAL'; put ',tech_from=TX_FROM'; put ',tech_to=TX_TO'; put ',dclib=&mpelib'; put ')'; put '%end;'; put '%mend mpe_refreshtables;'; put '%macro dc_refreshcatalog(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 '%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 '%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;'; put '%let lenstmt=length ods_table $18 name $100 value $1000;'; put '%let libds=%upcase(&libds);'; put '%mp_dsmeta(&libds, outds=&outds)'; put 'data _null_;'; put 'set &mpelib..mpe_datadictionary;'; put 'where &dc_dttmtfmt < tx_to & dd_source=%upcase("&libds") & dd_type=''TABLE'';'; put 'call symputx(''ddsd'',dd_shortdesc,''l'');'; put 'call symputx(''ddld'',dd_longdesc,''l'');'; put 'run;'; put 'data &outds;'; put '&lenstmt;'; put 'if last then do;'; put 'ODS_TABLE=''MPE_DATADICTIONARY'';'; put 'NAME=''DD_SHORTDESC'';'; put 'VALUE="&ddsd";'; put 'output;'; put 'NAME=''DD_LONGDESC'';'; put 'VALUE="&ddld";'; put 'output;'; put 'end;'; put 'set &outds end=last;'; put 'output;'; put 'run;'; put 'data _data_;'; put 'set &mpelib..mpe_tables;'; put 'where libref="%scan(&libds,1,.)"'; put '& dsn="%scan(&libds,2,.)"'; put '& &dc_dttmtfmt 0 then put ''AND '' filter_text;'; put 'else put filter_text;'; put 'run;'; put '%end;'; put '%end;'; put '/**'; put '* Now do Row Level Security based on the MPE_ROW_LEVEL_SECURITY table'; put '*/'; put '/* first determine users group membership */'; put '%mpe_getgroups(user=%mf_getuser(),outds=work.groups)'; put '%local admin_check;'; put 'proc sql;'; put 'select count(*) into: admin_check'; put 'from work.groups'; put 'where groupname="&mpeadmins";'; put '%put &sysmacroname: &=admin_check &=mpeadmins;'; put '%if &admin_check=0 %then %do;'; put '%local scopeval;'; put '%if &mode=DLOAD %then %let scopeval=VIEW;'; put '%if &mode=ULOAD %then %let scopeval=EDIT;'; put '%else %let scopeval=&mode;'; put '/* extract relevant rows */'; put '%local rlsds;'; put '%let rlsds=%mf_getuniquename();'; put 'proc sql;'; put 'create table work.&rlsds as'; put 'select rls_group,'; put 'rls_group_logic as group_logic,'; put 'rls_subgroup_logic as subgroup_logic,'; put 'rls_subgroup_id as subgroup_id,'; put 'rls_variable_nm as variable_nm,'; put 'rls_operator_nm as operator_nm,'; put 'rls_raw_value as raw_value'; put 'from &mpelib..mpe_row_level_security'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and rls_scope in ("&scopeval",''ALL'')'; put 'and upcase(rls_group) in (select upcase(groupname) from work.groups)'; put 'and rls_libref="%scan(&libds,1,.)"'; put 'and rls_table="%scan(&libds,2,.)"'; put 'and rls_active=1'; put 'order by rls_group,rls_subgroup_id;'; put '%if &sqlobs>0 %then %do;'; put '/* check if we currently have filter or not */'; put 'data ;'; put 'infile &outref end=eof;'; put 'input;'; put 'if _n_=1 and eof and cats(_infile_)='''' then newfilter=1;'; put 'output;'; put 'stop;'; put 'run;'; put 'data _null_;'; put 'set &syslast;'; put 'file &outref mod;'; put 'if newfilter=1 then put ''('';'; put 'else put ''AND ('';'; put 'run;'; put '/* loop through and apply filters for each group membership */'; put '%local fref ds;'; put '%let fref=%mf_getuniquefileref();'; put '%let ds=%mf_getuniquename();'; put 'proc sql noprint;'; put 'select distinct rls_group into : group1 -'; put 'from work.&rlsds;'; put '%do i=1 %to &sqlobs;'; put 'data work.&ds;'; put 'set work.&rlsds;'; put 'where rls_group="&&group&i";'; put 'drop rls_group;'; put 'run;'; put '%mp_filtergenerate(&ds,outref=&fref)'; put 'data _null_;'; put 'infile &fref;'; put 'file &outref mod;'; put 'input;'; put 'if &i>1 and _n_=1 then put '' OR '';'; put 'put _infile_;'; put 'run;'; put '%end;'; put 'data _null_;'; put 'file &outref mod;'; put 'put '')'';'; put 'run;'; put '%end; /* &sqlobs>0 */'; put '%else %do;'; put '%put &sysmacroname: no matching groups;'; put 'data _null_;'; put 'set work.groups;'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put '%mp_abort(iftrue= (&syscc>0)'; put ',mac=&sysmacroname'; put ',msg=%str(Row Level Security Generation Error)'; put ')'; put '%end; /* &admin_check=0 */'; put '%put leaving &sysmacroname with the following query:;'; put '%local empty;'; put '%let empty=0;'; put 'data _null_;'; put 'infile &outref end=eof;'; put 'input;'; put 'putlog _infile_;'; put 'if _n_=1 and eof and cats(_infile_)='''' then do;'; put 'put ''1=1'';'; put 'call symputx(''empty'',1,''l'');'; put 'end;'; put 'run;'; put '%if &empty=1 %then %do;'; put 'data _null_;'; put 'file &outref;'; put 'put ''1=1'';'; put 'run;'; put '%end;'; put '%mend mpe_filtermaster;'; put '%macro 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(&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 '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 '/** @cond */'; put '%macro mf_existfeature(feature'; put ')/*/STORE SOURCE*/;'; put '%let feature=%upcase(&feature);'; put '%local platform;'; put '%let platform=%mf_getplatform();'; put '%if &feature= %then %do;'; put '%put No feature was requested for detection;'; put '%end;'; put '%else %if &feature=COLCONSTRAINTS %then %do;'; put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 0;'; put '%else 1;'; put '%end;'; put '%else %if &feature=PROCLUA %then %do;'; put '/* https://blogs.sas.com/content/sasdummy/2015/08/03/using-lua-within-your-sas-programs */'; put '%if &platform=SASVIYA %then 1;'; put '%else %if "&sysver"="9.2" or "&sysver"="9.3" %then 0;'; put '%else %if "&SYSVLONG" < "9.04.01M3" %then 0;'; put '%else 1;'; put '%end;'; put '%else %if &feature=DBMS_MEMTYPE %then %do;'; put '/* does dbms_memtype exist in dictionary.tables? */'; put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 0;'; put '%else 1;'; put '%end;'; put '%else %if &feature=EXPORTXLS %then %do;'; put '/* is it possible to PROC EXPORT an excel file? */'; put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 1;'; put '%else %if %sysfunc(sysprod(SAS/ACCESS Interface to PC Files)) = 1 %then 1;'; put '%else 0;'; put '%end;'; put '%else %do;'; put '-1'; put '%put &sysmacroname: &feature not found;'; put '%end;'; put '%mend mf_existfeature;'; put '/** @endcond */'; put '%macro mp_getconstraints(lib=WORK'; put ',ds='; put ',outds=mp_getconstraints'; put ',mdebug=0'; put ')/*/STORE SOURCE*/;'; put '%let lib=%upcase(&lib);'; put '%let ds=%upcase(&ds);'; put '/**'; put '* Cater for environments where sashelp.vcncolu is not available'; put '*/'; put '%if %sysfunc(exist(sashelp.vcncolu,view))=0 %then %do;'; put 'proc sql;'; put 'create table &outds('; put 'libref char(8)'; put ',TABLE_NAME char(32)'; put ',constraint_type char(8) label=''Constraint Type'''; put ',constraint_name char(32) label=''Constraint Name'''; put ',column_name char(32) label=''Column'''; put ',constraint_order num'; put ');'; put '%return;'; put '%end;'; put '/**'; put '* Neither dictionary tables nor sashelp provides a constraint order column,'; put '* however they DO arrive in the correct order. So, create the col.'; put '**/'; put '%local vw;'; put '%let vw=%mf_getuniquename(prefix=mp_getconstraints_vw_);'; put 'data &vw /view=&vw;'; put 'set sashelp.vcncolu;'; put 'where table_catalog="&lib";'; put '/* use retain approach to reset the constraint order with each constraint */'; put 'length tmp $1000;'; put 'retain tmp;'; put 'drop tmp;'; put 'if tmp ne catx(''|'',table_catalog,table_name,constraint_name) then do;'; put 'constraint_order=1;'; put 'end;'; put 'else constraint_order+1;'; put 'tmp=catx(''|'',table_catalog, table_name,constraint_name);'; put 'run;'; put '/* must use SQL as proc datasets does not support length changes */'; put 'proc sql noprint;'; put 'create table &outds as'; put 'select upcase(a.TABLE_CATALOG) as libref'; put ',upcase(a.TABLE_NAME) as TABLE_NAME'; put ',a.constraint_type'; put ',a.constraint_name'; put ',b.column_name'; put ',b.constraint_order'; put 'from dictionary.TABLE_CONSTRAINTS a'; put 'left join &vw b'; put 'on upcase(a.TABLE_CATALOG)=upcase(b.TABLE_CATALOG)'; put 'and upcase(a.TABLE_NAME)=upcase(b.TABLE_NAME)'; put 'and a.constraint_name=b.constraint_name'; put '/**'; put '* We cannot apply this clause to the underlying dictionary table. See:'; put '* https://communities.sas.com/t5/SAS-Programming/Unexpected-Where-Clause-behaviour-in-dictionary-TABLE/m-p/771554#M244867'; put '* cannot use`where calculated libref="&lib"` either as it will STILL execute'; put '* all the underlying constraint queries, causing exception errors in some'; put '* cases: https://github.com/sasjs/core/issues/283'; put '*/'; put 'where a.TABLE_CATALOG="&lib"'; put '%if "&ds" ne "" %then %do;'; put 'and upcase(a.TABLE_NAME)="&ds"'; put 'and upcase(b.TABLE_NAME)="&ds"'; put '%end;'; put 'order by libref, table_name, constraint_name, constraint_order'; put ';'; put '/* tidy up */'; put '%mp_dropmembers('; put '&vw,'; put 'iftrue=(&mdebug=0)'; put ')'; put '%mend mp_getconstraints;'; put '%macro mpe_refreshtables(lib,ds=#all);'; put '%let lib=%upcase(&lib);'; put '%let ds=%upcase(&ds);'; put '%local engine; %let engine=%mf_getengine(&lib);'; put '%local schema; %let schema=%mf_getschema(&lib);'; put '%put running &sysmacroname &lib(&engine &schema) for &ds;'; put 'proc sql;'; put 'create table cols as'; put 'select libname as libref'; put ',upcase(memname) as dsn'; put ',memtype'; put ',upcase(name) as name'; put ',type'; put ',length'; put ',varnum'; put ',label'; put ',format'; put ',idxusage'; put ',notnull'; put 'from dictionary.columns'; put 'where upcase(libname)="&lib"'; put '%if &ds ne #ALL %then %do;'; put 'and upcase(memname)="&ds"'; put '%end;'; put ';'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc afer &lib cols extraction)'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc afer &lib indexes extraction)'; put ')'; put '%if &engine=SQLSVR %then %do;'; put 'proc sql;'; put 'connect using &lib;'; put 'create table work.indexes as'; put 'select * from connection to &lib('; put 'select'; put 's.name as SchemaName,'; put 't.name as memname,'; put 'tc.name as name,'; put 'ic.key_ordinal as KeyOrderNr'; put 'from'; put 'sys.schemas s'; put 'inner join sys.tables t on s.schema_id=t.schema_id'; put 'inner join sys.indexes i on t.object_id=i.object_id'; put 'inner join sys.index_columns ic on i.object_id=ic.object_id'; put 'and i.index_id=ic.index_id'; put 'inner join sys.columns tc on ic.object_id=tc.object_id'; put 'and ic.column_id=tc.column_id'; put 'where i.is_primary_key=1'; put 'and s.name=%str(%'')&schema%str(%'')'; put 'order by t.name, ic.key_ordinal ;'; put ');disconnect from &lib;'; put 'create table finalcols as'; put 'select a.*'; put ',case when b.name is not null then 1 else 0 end as pk_ind'; put 'from work.cols a'; put 'left join work.indexes b'; put 'on a.dsn=b.memname'; put 'and upcase(a.name)=upcase(b.name)'; put 'order by libref,dsn;'; put '%end;'; put '%else %do;'; put '%local dsn;'; put '%if &ds = #ALL %then %let dsn=;'; put '%mp_getconstraints(lib=&lib.,ds=&dsn,outds=work.constraints)'; put '/* extract cols that are clearly primary keys */'; put 'proc sql;'; put 'create table work.pk4sure as'; put 'select libref'; put ',table_name'; put ',constraint_name'; put ',constraint_order'; put ',column_name as name'; put 'from work.constraints'; put 'where constraint_type=''PRIMARY'''; put 'order by 1,2,3,4;'; put '/* extract unique constraints where every col is also NOT NULL */'; put 'proc sql;'; put 'create table work.sum as'; put 'select a.libref'; put ',a.table_name'; put ',a.constraint_name'; put ',count(a.column_name) as unq_cnt'; put ',count(b.column_name) as nul_cnt'; put 'from work.constraints(where=(constraint_type =''UNIQUE'')) a'; put 'left join work.constraints(where=(constraint_type =''NOT NULL'')) b'; put 'on a.libref=b.libref'; put 'and a.table_name=b.table_name'; put 'and a.column_name=b.column_name'; put 'group by 1,2,3'; put 'having unq_cnt=nul_cnt;'; put '/* extract cols from the relevant unique constraints */'; put 'create table work.pkdefault as'; put 'select a.libref'; put ',a.table_name'; put ',a.constraint_name'; put ',b.constraint_order'; put ',b.column_name as name'; put 'from work.sum a'; put 'left join work.constraints(where=(constraint_type =''UNIQUE'')) b'; put 'on a.libref=b.libref'; put 'and a.table_name=b.table_name'; put 'and a.constraint_name=b.constraint_name'; put 'order by 1,2,3,4;'; put '/* extract cols from the relevant unique INDEXES */'; put 'create table work.pkfromindex as'; put 'select libname as libref'; put ',memname as table_name'; put ',indxname as constraint_name'; put ',indxpos as constraint_order'; put ',name'; put 'from dictionary.indexes'; put 'where nomiss=''yes'' and unique=''yes'' and upcase(libname)="&lib"'; put '%if &ds ne #ALL %then %do;'; put 'and upcase(memname)="&ds"'; put '%end;'; put 'order by 1,2,3,4;'; put '/* create one table */'; put 'data work.finalpks;'; put 'set pkdefault pk4sure pkfromindex;'; put 'pk_ind=1;'; put '/* if there are multiple unique constraints, take the first */'; put 'by libref table_name constraint_name;'; put 'retain keepme;'; put 'if first.table_name then keepme=1;'; put 'if first.constraint_name and not first.table_name then keepme=0;'; put 'if keepme=1;'; put 'run;'; put '/* join back to starting table */'; put 'proc sql;'; put 'create table finalcols as'; put 'select a.*'; put ',b.constraint_order'; put ',case when b.pk_ind=1 then 1 else 0 end as pk_ind'; put 'from work.cols a'; put 'left join work.finalpks b'; put 'on a.libref=b.libref'; put 'and a.dsn=b.table_name'; put 'and upcase(a.name)=upcase(b.name)'; put 'order by libref,dsn,constraint_order;'; put '%end;'; put '/* load columns */'; put '%bitemporal_dataloader(base_lib=&mpelib'; put ',base_dsn=mpe_datacatalog_vars'; put ',append_dsn=finalcols'; put ',PK=LIBREF DSN NAME'; put ',etlsource=&sysmacroname'; put ',loadtype=TXTEMPORAL'; put ',tech_from=TX_FROM'; put ',tech_to=TX_TO'; put '%if &ds ne #ALL %then %do;'; put ',close_vars=LIBREF DSN'; put '%end;'; put ',dclib=&mpelib'; put ')'; put '/* prepare tables */'; put 'proc sql;'; put 'create table work.tabs as select'; put 'libname as libref'; put ',upcase(memname) as dsn'; put ',memtype'; put '%if %mf_existfeature(DBMS_MEMTYPE)=1 %then %do;'; put ',dbms_memtype'; put '%end;'; put '%else %do;'; put ',''n/a'' as dbms_memtype format=$32.'; put '%end;'; put ',typemem'; put ',memlabel'; put ',nvar'; put ',compress'; put 'from dictionary.tables'; put 'where upcase(libname)="&lib"'; put '%if &ds ne #ALL %then %do;'; put 'and upcase(memname)="&ds"'; put '%end;'; put ';'; put 'data tabs2;'; put 'set finalcols;'; put 'length pk_fields $512;'; put 'retain pk_fields;'; put 'by libref dsn;'; put 'if first.dsn then pk_fields='''';'; put 'if pk_ind=1 then pk_fields=catx('' '',pk_fields,name);'; put 'if last.dsn then output;'; put 'run;'; put 'proc sql;'; put 'create table work.finaltabs as'; put 'select a.libref'; put ',a.dsn'; put ',a.memtype'; put ',a.dbms_memtype'; put ',a.typemem'; put ',a.memlabel'; put ',a.nvar'; put ',a.compress'; put ',b.pk_fields'; put 'from work.tabs a'; put 'left join work.tabs2 b'; put 'on a.libref=b.libref'; put 'and a.dsn=b.dsn;'; put '%bitemporal_dataloader(base_lib=&mpelib'; put ',base_dsn=mpe_datacatalog_tabs'; put ',append_dsn=finaltabs'; put ',PK=LIBREF DSN'; put ',etlsource=&sysmacroname'; put ',loadtype=TXTEMPORAL'; put ',tech_from=TX_FROM'; put ',tech_to=TX_TO'; put ',dclib=&mpelib'; put '%if &ds ne #ALL %then %do;'; put ',close_vars=LIBREF'; put '%end;'; put ')'; put '/* prepare table frequently changing attributes */'; put 'proc sql;'; put '%if &engine=SQLSVR %then %do;'; put 'connect using &lib;'; put 'create table work.attrs as select * from connection to &lib('; put 'SELECT SCHEMA_NAME(schema_id) as ''schema'', name, create_date, modify_date'; put 'FROM sys.tables ;'; put ');'; put 'create table work.nobs as select * from connection to &lib('; put 'SELECT SCHEMA_NAME(A.schema_id) AS ''schema'''; put ',A.Name, AVG(B.rows) AS ''RowCount'''; put 'FROM sys.objects A'; put 'INNER JOIN sys.partitions B ON A.object_id = B.object_id'; put 'WHERE A.type = ''U'''; put 'GROUP BY A.schema_id, A.Name'; put ');'; put 'disconnect from &lib;'; put 'create table statustabs as select'; put 'a.libref'; put ',a.dsn'; put ',b.create_date as crdate'; put ',b.modify_date as modate'; put ',. as filesize'; put ',c.RowCount as nobs'; put 'from work.tabs a'; put 'left join work.attrs(where=(schema="&schema")) b'; put 'on upcase(a.dsn)=upcase(b.name)'; put 'left join work.nobs(where=(schema="&schema")) c'; put 'on upcase(a.dsn)=upcase(c.name);'; put '%end;'; put '%else %do;'; put 'create table statustabs as select'; put 'libname as libref'; put ',upcase(memname) as dsn'; put ',crdate'; put ',modate'; put ',filesize'; put ',nobs'; put 'from dictionary.tables'; put 'where upcase(libname)="&lib"'; put '%if &ds ne #ALL %then %do;'; put 'and upcase(memname)="&ds"'; put '%end;'; put ';'; put '%end;'; put '%bitemporal_dataloader(base_lib=&mpelib'; put ',base_dsn=mpe_datastatus_tabs'; put ',append_dsn=statustabs'; put ',PK=LIBREF DSN'; put ',etlsource=&sysmacroname'; put ',loadtype=TXTEMPORAL'; put ',tech_from=TX_FROM'; put ',tech_to=TX_TO'; put ',dclib=&mpelib'; put '%if &ds ne #ALL %then %do;'; put ',close_vars=LIBREF'; put '%end;'; put ')'; put '%if &ds = #ALL %then %do;'; put 'proc sql;'; put 'create table statuslibs as select'; put 'libref'; put ',sum(filesize) as libsize'; put ',count(*) as table_cnt'; put 'from statustabs'; put 'group by 1;'; put '%bitemporal_dataloader(base_lib=&mpelib'; put ',base_dsn=mpe_datastatus_libs'; put ',append_dsn=statuslibs'; put ',PK=LIBREF'; put ',etlsource=&sysmacroname'; put ',loadtype=TXTEMPORAL'; put ',tech_from=TX_FROM'; put ',tech_to=TX_TO'; put ',dclib=&mpelib'; put ')'; put '%end;'; put '%mend mpe_refreshtables;'; put '%macro dc_refreshcatalog(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 '%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 '%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 '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;'; put '%let lenstmt=length ods_table $18 name $100 value $1000;'; put '%let libds=%upcase(&libds);'; put '%mp_dsmeta(&libds, outds=&outds)'; put 'data _null_;'; put 'set &mpelib..mpe_datadictionary;'; put 'where &dc_dttmtfmt < tx_to & dd_source=%upcase("&libds") & dd_type=''TABLE'';'; put 'call symputx(''ddsd'',dd_shortdesc,''l'');'; put 'call symputx(''ddld'',dd_longdesc,''l'');'; put 'run;'; put 'data &outds;'; put '&lenstmt;'; put 'if last then do;'; put 'ODS_TABLE=''MPE_DATADICTIONARY'';'; put 'NAME=''DD_SHORTDESC'';'; put 'VALUE="&ddsd";'; put 'output;'; put 'NAME=''DD_LONGDESC'';'; put 'VALUE="&ddld";'; put 'output;'; put 'end;'; put 'set &outds end=last;'; put 'output;'; put 'run;'; put 'data _data_;'; put 'set &mpelib..mpe_tables;'; put 'where libref="%scan(&libds,1,.)"'; put '& dsn="%scan(&libds,2,.)"'; put '& &dc_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(&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 '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+PHNjcmlwdCBzcmM9Im1haW4uODRmYWEzZWFiY2Y2ZTkzYS5qcyIgdHlwZT0ibW9kdWxlIj48L3NjcmlwdD48L2JvZHk+Cjwv''@;'; put 'put ''aHRtbD4K'';'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=main.84faa3eabcf6e93a-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 ''biBoayh0aGlzLl90Tm9kZSx0aGlzLl9sVmlldyxsLG81KGQpLGEpfX1mdW5jdGlvbiBRMCgpe3JldHVybiBuZXcgQnUodWwoKSxkaSgpKX1mdW5jdGlvbiBXcyhjKXtyZXR1cm4gTnMoKCk9Pntjb25zdCBsPWMucHJvdG90eXBlLmNvbnN0cnVjdG9yLGE9bFtqaV18fERmKGwpLGQ9T2JqZWN0''@;'; 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+KGYyKCEwKSxmdW5jdGlvbiBqNChjLGwpe3JldHVybiBjLmNyZWF0ZVRleHQobCl9KGxbYm9dLGQpKTtmdW5jdGlvbiB3cihjKXtyZXR1cm4gSXIoIiIsYywi''@;'; put 'put ''Iiksd3J9ZnVuY3Rpb24gSXIoYyxsLGEpe2NvbnN0IGQ9ZGkoKSxoPVlsKGQsYyxsLGEpO3JldHVybiBoIT09Um8mJnYyKGQsVnUoKSxoKSxJcn1mdW5jdGlvbiBVdShjLGwsYSxkLGgpe2NvbnN0IGY9ZGkoKSx2PWZ1bmN0aW9uIEdsKGMsbCxhLGQsaCxmKXtjb25zdCBNPXJwKGMsVGYoKSxh''@;'; 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+bC5nZXQocXZlKS5nZXRPckNyZWF0ZVN0YW5kYWxvbmVJbmplY3RvcihjKX1mdW5jdGlvbiBZcyhjLGwsYSl7Y29uc3QgZD1PMCgpK2MsaD1kaSgpO3JldHVybiBoW2RdPT09Um8/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 ''YXx8KGE9V3MoYykpKShofHxjKX19KSgpfXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCksYWNlPSgoKT0+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 ''YT1XcyhjKSkpKGh8fGMpfX0pKCl9c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9fXJldHVybiBjfSkoKTt2YXIgbng9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5DT01QTEVURT0wXT0iQ09NUExFVEUiLGNb''@;'; 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 ''e3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoeHIoU1cpLHhyKFE4KSl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCksR3M9KCgpPT57Y2xhc3Mg''@;'; 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 ''LmVycm9yKHYpLGguc2hvdWxkTG9naW4ubmV4dCghMCksITEpKS5jYXRjaCh2PT4oNDAzPT09diYmY29uc29sZS5lcnJvcigiSW52YWxpZCBob3N0IiksITEpKX0pKCl9Z2V0TGljZW5zZVNpdGVJZCgpe3JldHVybiB0aGlzLmxpY2Vuc2Vfc2l0ZV9pZC52YWx1ZXx8W119c2V0TGljZW5zZVNp''@;'; put 'put ''dGVJZChhKXt0aGlzLmxpY2Vuc2Vfc2l0ZV9pZC5uZXh0KCJvYmplY3QiPT10eXBlb2YgYT9hOlthXSl9Y2hlY2tTYXNqc0RlcGxveSgpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2NvbnN0IGg9YCR7YS5nZXRTYXNqc0NvbmZpZygpLmFwcExvY30vc2VydmljZXMvYWRtaW5g''@;'; put 'put ''O2Euc2FzanNTZXJ2aWNlLmdldEZvbGRlckNvbnRlbnRzRnJvbURyaXZlKGgpLnN1YnNjcmliZShmPT57Zi5maWxlcy5pbmNsdWRlcygibWFrZWRhdGEuc2FzIik/KGEuZXZlbnRTZXJ2aWNlLnN0YXJ0dXBEYXRhTG9hZGVkKCksYS5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL2RlcGxveSIpKToo''@;'; put 'put ''YS5sb2FkU3RhcnR1cFNlcnZpY2VFbWl0dGVyLmVtaXQoKSxhLnJvdXRlci51cmwuaW5jbHVkZXMoImRlcGxveSIpJiZhLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvIikpfSxmPT57Zi5lcnJvci5pbmNsdWRlcygiVW5hdXRob3JpemVkIik/KGEuc2hvdWxkTG9naW4ubmV4dCghMCksYS5zaG91''@;'; put 'put ''bGRMb2dpbi5zdWJzY3JpYmUodj0+eyExPT09diYmbG9jYXRpb24ucmVsb2FkKCl9KSk6Zi5lcnJvci5pbmNsdWRlcygiRm9sZGVyIGRvZXNuJ3QgZXhpc3QuIikmJihjb25zb2xlLndhcm4oIlNBU2pzIFNBUyBzZXJ2aWNlcyBhcmUgbm90IHByZXNlbnQgb24gdGhlIGN1cnJlbnQgYXBwTG9j''@;'; put 'put ''LiIpLGEuZXZlbnRTZXJ2aWNlLnN0YXJ0dXBEYXRhTG9hZGVkKCksYS5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL2RlcGxveSIpKX0pfSkoKX1zYXNqc01ha2VkYXRhQ2hlY2tpbmcoKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24o''@;'; put 'put ''KXt2YXIgZD1lZShmdW5jdGlvbiooaCxmKXthLmNoZWNraW5nSW50ZXJ2YWw9c2V0SW50ZXJ2YWwoZWUoZnVuY3Rpb24qKCl7YS5zYXNqc01ha2VkYXRhU3VjY2Vzc2Z1bGwoKS50aGVuKHY9Pnt2JiYoY2xlYXJJbnRlcnZhbChhLmNoZWNraW5nSW50ZXJ2YWwpLGgodikpfSkuY2F0Y2godj0+''@;'; put 'put ''e2NsZWFySW50ZXJ2YWwoYS5jaGVja2luZ0ludGVydmFsKSxmKHYpfSl9KSwxZTMpfSk7cmV0dXJuIGZ1bmN0aW9uKGgsZil7cmV0dXJuIGQuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSl9KSgpfXNhc2pzTWFrZWRhdGFTdWNjZXNzZnVsbCgpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0''@;'; put 'put ''aW9uKigpe3JldHVybiBuZXcgUHJvbWlzZSgoZCxoKT0+e2NvbnN0IHY9YCR7YS5nZXRTYXNqc0NvbmZpZygpLmFwcExvY30vc2VydmljZXMvYWRtaW5gO2Euc2FzanNTZXJ2aWNlLmdldEZvbGRlckNvbnRlbnRzRnJvbURyaXZlKHYpLnN1YnNjcmliZShNPT57TS5maWxlcy5pbmNsdWRlcygi''@;'; put 'put ''bWFrZWRhdGEuc2FzIik/ZCghMSk6ZCghMCl9LE09PntNLmVycm9yLmluY2x1ZGVzKCJGb2xkZXIgZG9lc24ndCBleGlzdC4iKSYmaCgpfSl9KX0pKCl9Y2hlY2tWaXlhRGVwbG95KGEpe3ZhciBkPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2xldCB2LGY9ITE7aWYodHlwZW9mIGQuc2Fz''@;'; put 'put ''anNBZGFwdGVyLmdldEZvbGRlcjwidSIpe2NvbnN0IE09eWllbGQgZC5hcHBMb2NDaGVjayhhKTtmPU0uZm91bmQsdj1NLmVycm9yTWVzc2FnZX1lbHNlIGY9eWllbGQgZC5hcHBMb2NDaGVja1ByZUF4aW9zZEFkYXB0ZXIoYSk7Zj9kLnZpeWFNYWtlZGF0YVN1Y2Nlc3NmdWxsKCkudGhlbihN''@;'; put 'put ''PT57TT9kLmxvYWRTdGFydHVwU2VydmljZUVtaXR0ZXIuZW1pdCgpOihkLmV2ZW50U2VydmljZS5zdGFydHVwRGF0YUxvYWRlZCgpLGQucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9kZXBsb3kiKSl9LE09Pntjb25zb2xlLmVycm9yKCJFcnJvciB3aGlsZSBsb29raW5nIGZvciB0aGUgZmlsZTog''@;'; put 'put ''bWFrZWRhdGEuc2FzIixNKX0pOmQuZXZlbnRTZXJ2aWNlLnNob3dJbmZvTW9kYWwoIkVycm9yIiwodnx8IlZpeWEgc2VydmljZXMgYXJlIG5vdCBwcmVzZW50IG9uIHRoZSBjdXJyZW50IGFwcExvYywgb3IgQVBJIG5vdCByZWFjaGFibGUuIENoZWNrIHRoZSBBREFQVEVSIGNvbmZpZ3VyYXRp''@;'; put 'put ''b24uIikrYFxuQXBwTG9jOiAke2F9YCl9KSgpfXZpeWFNYWtlZGF0YVN1Y2Nlc3NmdWxsKCl7dmFyIGE9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7cmV0dXJuIG5ldyBQcm9taXNlKChkLGgpPT57Y29uc3QgZj1hLmdldFNhc2pzQ29uZmlnKCksdj1gJHtmLmFwcExvY30vc2VydmljZXMv''@;'; put 'put ''YWRtaW5gO2Euc2FzVml5YVNlcnZpY2UuZ2V0Rm9sZGVyQnlQYXRoKHYpLnN1YnNjcmliZShNPT57Y29uc3QgRD1NLmlkO0R8fChjb25zb2xlLmVycm9yKGBGb2xkZXIgSUQgaXMgbm90IHByZXNlbnQuICR7dn1gLGYpLGQoITEpKSxhLnNhc1ZpeWFTZXJ2aWNlLmdldEZvbGRlck1lbWJlcnMo''@;'; put 'put ''RCkuc3Vic2NyaWJlKFo9PntaLml0ZW1zLnNvbWUocmU9PiJtYWtlZGF0YSI9PT1yZS5uYW1lKT9kKCExKTpkKCEwKX0sWj0+e2NvbnNvbGUuZXJyb3IoIkVycm9yIGdldHRpbmcgZm9sZGVyIGNvbnRlbnRzIixaKSxoKCl9KX0sTT0+e2NvbnNvbGUud2FybigiRXJyb3IgZ2V0dGluZyBmb2xk''@;'; put 'put ''ZXIgaW5mbyIsTSksaChNKX0pfSl9KSgpfWFwcExvY0NoZWNrKGEpe3ZhciBkPXRoaXM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKCl7dmFyIGg9ZWUoZnVuY3Rpb24qKGYsdil7bGV0IEQsTT0iIjt0cnl7RD15aWVsZCBkLnNhc2pzQWRhcHRlci5nZXRGb2xkZXIoYSl9Y2F0Y2goWil7''@;'; put 'put ''IkxvZ2luUmVxdWlyZWRFcnJvciI9PT1aLm5hbWU/KGQuYXBwTG9jQ2hlY2tQZW5kaW5nPSEwLGQuc2hvdWxkTG9naW4ubmV4dCghMCksZih7Zm91bmQ6ITF9KSk6TT0iTm90Rm91bmRlRXJyb3IiPT09Wi5uYW1lP1oubWVzc2FnZToiVml5YSBzZXJ2aWNlcyBhcmUgbm90IHByZXNlbnQgb24g''@;'; put 'put ''dGhlIGN1cnJlbnQgYXBwTG9jLCBvciBBUEkgbm90IHJlYWNoYWJsZS4gQ2hlY2sgdGhlIEFEQVBURVIgY29uZmlndXJhdGlvbi4ifWlmKE0ubGVuZ3RoKXJldHVybiBjb25zb2xlLndhcm4oTSksZih7Zm91bmQ6ITEsZXJyb3JNZXNzYWdlOk19KTtmKHtmb3VuZDohMH0pfSk7cmV0dXJuIGZ1''@;'; put 'put ''bmN0aW9uKGYsdil7cmV0dXJuIGguYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSl9YXBwTG9jQ2hlY2tQcmVBeGlvc2RBZGFwdGVyKGEpe3JldHVybiBuZXcgUHJvbWlzZSgoZCxoKT0+e2xldCB2PSExO3JldHVybiBmZXRjaChgL2ZvbGRlcnMvZm9sZGVycy9AaXRlbT9wYXRoPSR7YX1gKS50''@;'; put 'put ''aGVuKE09Pig0MDQ9PT1NLnN0YXR1cyYmKHY9ITApLE0udGV4dCgpKSkudGhlbihNPT57aWYodGhpcy5pc0xvZ2luUmVxdWlyZWQoTSkpdGhpcy5hcHBMb2NDaGVja1BlbmRpbmc9ITAsdGhpcy5zaG91bGRMb2dpbi5uZXh0KCEwKTtlbHNle2lmKHYpcmV0dXJuIGNvbnNvbGUud2FybigiVml5''@;'; put 'put ''YSBzZXJ2aWNlcyBhcmUgbm90IHByZXNlbnQgb24gdGhlIGN1cnJlbnQgYXBwTG9jLiIpLHRoaXMuZXZlbnRTZXJ2aWNlLnN0YXJ0dXBEYXRhTG9hZGVkKCksdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL2RlcGxveSIpLGQoITEpO2xldCBEPW51bGw7dHJ5e0Q9SlNPTi5wYXJzZShNKX1j''@;'; put 'put ''YXRjaHt9aWYoRCYmRC5odHRwU3RhdHVzQ29kZSYmNDA0PT09RC5odHRwU3RhdHVzQ29kZSlyZXR1cm4gY29uc29sZS53YXJuKCJWaXlhIHNlcnZpY2VzIGFyZSBub3QgcHJlc2VudCBvbiB0aGUgY3VycmVudCBhcHBMb2MuIiksdGhpcy5ldmVudFNlcnZpY2Uuc3RhcnR1cERhdGFMb2FkZWQo''@;'; put 'put ''KSx0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvZGVwbG95IiksZCghMSk7ZCghMCl9fSkuY2F0Y2goTT0+e2QoITEpfSl9KX1pc0xvZ2luUmVxdWlyZWQoYSl7cmV0dXJuLzxmb3JtLithY3Rpb249IiguKkxvZ29uW14iXSopLio+L2dtLnRlc3QoYSl9bG9nb3V0KCl7dGhpcy5zYXNqc0Fk''@;'; put 'put ''YXB0ZXIubG9nT3V0KCkudGhlbigoKT0+e2xvY2F0aW9uLnJlbG9hZCgpfSl9Z2V0U2FzanNDb25maWcoKXtyZXR1cm4gdGhpcy5zYXNqc0FkYXB0ZXIuZ2V0U2FzanNDb25maWcoKX1nZXRTYXNSZXF1ZXN0cygpe3JldHVybiB0aGlzLnNhc2pzQWRhcHRlci5nZXRTYXNSZXF1ZXN0cygpfXNl''@;'; put 'put ''dERlYnVnU3RhdGUoYSl7dGhpcy5zYXNqc0FkYXB0ZXIuc2V0RGVidWdTdGF0ZShhKX1nZXRTYXNqc0luc3RhbmNlKCl7cmV0dXJuIHRoaXMuc2FzanNBZGFwdGVyfWdldFNlcnZlclR5cGUoKXtjb25zdCBhPXRoaXMuc2FzanNBZGFwdGVyLmdldFNhc2pzQ29uZmlnKCk7cmV0dXJuIGEuc2Vy''@;'; put 'put ''dmVyVHlwZT9hLnNlcnZlclR5cGU6IlNBU1ZJWUEifWdldEV4ZWN1dGlvblBhdGgoKXtjb25zdCBhPXRoaXMuc2FzanNBZGFwdGVyLmdldFNhc2pzQ29uZmlnKCk7c3dpdGNoKGEuc2VydmVyVHlwZSl7Y2FzZSBCMC5ZLlNhc1ZpeWE6cmV0dXJuIGEucGF0aFNBU1ZpeWE7Y2FzZSBCMC5ZLlNh''@;'; put 'put ''czk6cmV0dXJuIGEucGF0aFNBUzk7Y2FzZSBCMC5ZLlNhc2pzOnJldHVybiBhLnBhdGhTQVNKU319Z2V0RmlsZUNvbnRlbnQoYSxkKXtyZXR1cm4gdGhpcy5zYXNqc0FkYXB0ZXIuZ2V0RmlsZUNvbnRlbnQoYSxkKX11cGRhdGVGaWxlQ29udGVudChhLGQsaCl7cmV0dXJuIHRoaXMuc2FzanNB''@;'; put 'put ''ZGFwdGVyLnVwZGF0ZUZpbGVDb250ZW50KGEsZCxoKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKSh4cihROCkseHIoX1cpLHhyKHZjKSx4cihWY2UpLHhyKFRXKSx4cihTZCkseHIoTHMpKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9r''@;'; put 'put ''ZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9fXJldHVybiBjfSkoKSxTZD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuaW5qZWN0b3I9YX1sb2coYSxkKXt0aGlzLmluamVjdFNhc1NlcnZpY2UoKSx0aGlzLnNhc2pzQ29uZmlnPy5kZWJ1ZyYm''@;'; put 'put ''KGQ/Y29uc29sZS5sb2coYSxkKTpjb25zb2xlLmxvZyhhKSl9ZXJyb3IoYSxkKXtjb25zb2xlLmVycm9yKGEsZCl9bG9nUmVxdWVzdERhdGEoYSxkKXtpZih0aGlzLmxvZygiLS0tIEFkYXB0ZXIgUmVxdWVzdCBJbnB1dCAtLS0iKSx0aGlzLmxvZyhhKSxkKXtmb3IobGV0IGggb2YgT2JqZWN0''@;'; put 'put ''LmtleXMoZCkpdGhpcy5sb2coaCxkW2hdKTt0aGlzLmxvZygiLS0tLS0tIil9ZWxzZSB0aGlzLmxvZygibm8gZGF0YSBzZW50Iil9aW5qZWN0U2FzU2VydmljZSgpe2lmKCF0aGlzLnNhc2pzQ29uZmlnKXtjb25zdCBhPXRoaXMuaW5qZWN0b3IuZ2V0KEdzKTt0aGlzLnNhc2pzQ29uZmlnPWEu''@;'; put 'put ''Z2V0U2FzanNDb25maWcoKX19c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoeHIoRHMpKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9fXJldHVybiBjfSko''@;'; put 'put ''KTtjb25zdCBCY2U9ZnVuY3Rpb24gcEFlKGMsbCl7cmV0dXJuIGM9PT1sfHxjIT1jJiZsIT1sfSxlTD1mdW5jdGlvbiBnQWUoYyxsKXtmb3IodmFyIGE9Yy5sZW5ndGg7YS0tOylpZihCY2UoY1thXVswXSxsKSlyZXR1cm4gYTtyZXR1cm4tMX07dmFyIHZBZT1BcnJheS5wcm90b3R5cGUuc3Bs''@;'; put 'put ''aWNlO2Z1bmN0aW9uIHZ5KGMpe3ZhciBsPS0xLGE9bnVsbD09Yz8wOmMubGVuZ3RoO2Zvcih0aGlzLmNsZWFyKCk7KytsPGE7KXt2YXIgZD1jW2xdO3RoaXMuc2V0KGRbMF0sZFsxXSl9fXZ5LnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbiBoQWUoKXt0aGlzLl9fZGF0YV9fPVtdLHRoaXMuc2l6''@;'; put 'put ''ZT0wfSx2eS5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uIGJBZShjKXt2YXIgbD10aGlzLl9fZGF0YV9fLGE9ZUwobCxjKTtyZXR1cm4hKGE8MHx8KGE9PWwubGVuZ3RoLTE/bC5wb3AoKTp2QWUuY2FsbChsLGEsMSksLS10aGlzLnNpemUsMCkpfSx2eS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9u''@;'; put 'put ''IF9BZShjKXt2YXIgbD10aGlzLl9fZGF0YV9fLGE9ZUwobCxjKTtyZXR1cm4gYTwwP3ZvaWQgMDpsW2FdWzFdfSx2eS5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uIENBZShjKXtyZXR1cm4gZUwodGhpcy5fX2RhdGFfXyxjKT4tMX0sdnkucHJvdG90eXBlLnNldD1mdW5jdGlvbiBNQWUoYyxsKXt2''@;'; put 'put ''YXIgYT10aGlzLl9fZGF0YV9fLGQ9ZUwoYSxjKTtyZXR1cm4gZDwwPygrK3RoaXMuc2l6ZSxhLnB1c2goW2MsbF0pKTphW2RdWzFdPWwsdGhpc307Y29uc3QgdEw9dnksamNlPSJvYmplY3QiPT10eXBlb2YgZ2xvYmFsJiZnbG9iYWwmJmdsb2JhbC5PYmplY3Q9PT1PYmplY3QmJmdsb2JhbDt2''@;'; put 'put ''YXIgUEFlPSJvYmplY3QiPT10eXBlb2Ygc2VsZiYmc2VsZiYmc2VsZi5PYmplY3Q9PT1PYmplY3QmJnNlbGY7Y29uc3QgdnA9amNlfHxQQWV8fEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCksdW09dnAuU3ltYm9sO3ZhciB6Y2U9T2JqZWN0LnByb3RvdHlwZSxOQWU9emNlLmhhc093blByb3Bl''@;'; put 'put ''cnR5LFZBZT16Y2UudG9TdHJpbmcsb3g9dW0/dW0udG9TdHJpbmdUYWc6dm9pZCAwO3ZhciBVQWU9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZzt2YXIgVWNlPXVtP3VtLnRvU3RyaW5nVGFnOnZvaWQgMDtjb25zdCBieT1mdW5jdGlvbiAkQWUoYyl7cmV0dXJuIG51bGw9PWM/dm9pZCAwPT09''@;'; put 'put ''Yz8iW29iamVjdCBVbmRlZmluZWRdIjoiW29iamVjdCBOdWxsXSI6VWNlJiZVY2UgaW4gT2JqZWN0KGMpP2Z1bmN0aW9uIEJBZShjKXt2YXIgbD1OQWUuY2FsbChjLG94KSxhPWNbb3hdO3RyeXtjW294XT12b2lkIDA7dmFyIGQ9ITB9Y2F0Y2h7fXZhciBoPVZBZS5jYWxsKGMpO3JldHVybiBk''@;'; put 'put ''JiYobD9jW294XT1hOmRlbGV0ZSBjW294XSksaH0oYyk6ZnVuY3Rpb24gWkFlKGMpe3JldHVybiBVQWUuY2FsbChjKX0oYyl9LHN4PWZ1bmN0aW9uIEtBZShjKXt2YXIgbD10eXBlb2YgYztyZXR1cm4gbnVsbCE9YyYmKCJvYmplY3QiPT1sfHwiZnVuY3Rpb24iPT1sKX0sWmNlPWZ1bmN0aW9u''@;'; put 'put ''IGVrZShjKXtpZighc3goYykpcmV0dXJuITE7dmFyIGw9YnkoYyk7cmV0dXJuIltvYmplY3QgRnVuY3Rpb25dIj09bHx8IltvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dIj09bHx8IltvYmplY3QgQXN5bmNGdW5jdGlvbl0iPT1sfHwiW29iamVjdCBQcm94eV0iPT1sfSxBVz12cFsiX19jb3Jl''@;'; put 'put ''LWpzX3NoYXJlZF9fIl07dmFyIFdjZT1mdW5jdGlvbigpe3ZhciBjPS9bXi5dKyQvLmV4ZWMoQVcmJkFXLmtleXMmJkFXLmtleXMuSUVfUFJPVE98fCIiKTtyZXR1cm4gYz8iU3ltYm9sKHNyYylfMS4iK2M6IiJ9KCk7dmFyIGFrZT1GdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmc7Y29uc3Qg''@;'; put 'put ''bjc9ZnVuY3Rpb24gb2tlKGMpe2lmKG51bGwhPWMpe3RyeXtyZXR1cm4gYWtlLmNhbGwoYyl9Y2F0Y2h7fXRyeXtyZXR1cm4gYysiIn1jYXRjaHt9fXJldHVybiIifTt2YXIgbGtlPS9eXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXSQvLGZrZT1SZWdFeHAoIl4iK0Z1bmN0aW9uLnByb3RvdHlw''@;'; put 'put ''ZS50b1N0cmluZy5jYWxsKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkpLnJlcGxhY2UoL1tcXF4kLiorPygpW1xde318XS9nLCJcXCQmIikucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXCgpfCBmb3IgLis/KD89XFxcXSkvZywiJDEuKj8iKSsiJCIp''@;'; put 'put ''O2NvbnN0IGdrZT1mdW5jdGlvbiBwa2UoYyl7cmV0dXJuISghc3goYyl8fGZ1bmN0aW9uIG5rZShjKXtyZXR1cm4hIVdjZSYmV2NlIGluIGN9KGMpKSYmKFpjZShjKT9ma2U6bGtlKS50ZXN0KG43KGMpKX0scjc9ZnVuY3Rpb24gYmtlKGMsbCl7dmFyIGE9ZnVuY3Rpb24gbWtlKGMsbCl7cmV0''@;'; put 'put ''dXJuIGM/LltsXX0oYyxsKTtyZXR1cm4gZ2tlKGEpP2E6dm9pZCAwfSxseD1yNyh2cCwiTWFwIiksY3g9cjcoT2JqZWN0LCJjcmVhdGUiKTt2YXIgVGtlPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7dmFyIElrZT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O2Z1bmN0''@;'; put 'put ''aW9uIHl5KGMpe3ZhciBsPS0xLGE9bnVsbD09Yz8wOmMubGVuZ3RoO2Zvcih0aGlzLmNsZWFyKCk7KytsPGE7KXt2YXIgZD1jW2xdO3RoaXMuc2V0KGRbMF0sZFsxXSl9fXl5LnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbiB3a2UoKXt0aGlzLl9fZGF0YV9fPWN4P2N4KG51bGwpOnt9LHRoaXMu''@;'; put 'put ''c2l6ZT0wfSx5eS5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uIFNrZShjKXt2YXIgbD10aGlzLmhhcyhjKSYmZGVsZXRlIHRoaXMuX19kYXRhX19bY107cmV0dXJuIHRoaXMuc2l6ZS09bD8xOjAsbH0seXkucHJvdG90eXBlLmdldD1mdW5jdGlvbiBBa2UoYyl7dmFyIGw9dGhpcy5fX2RhdGFf''@;'; put 'put ''XztpZihjeCl7dmFyIGE9bFtjXTtyZXR1cm4iX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyI9PT1hP3ZvaWQgMDphfXJldHVybiBUa2UuY2FsbChsLGMpP2xbY106dm9pZCAwfSx5eS5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uIFJrZShjKXt2YXIgbD10aGlzLl9fZGF0YV9fO3JldHVybiBjeD92''@;'; put 'put ''b2lkIDAhPT1sW2NdOklrZS5jYWxsKGwsYyl9LHl5LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24gUGtlKGMsbCl7dmFyIGE9dGhpcy5fX2RhdGFfXztyZXR1cm4gdGhpcy5zaXplKz10aGlzLmhhcyhjKT8wOjEsYVtjXT1jeCYmdm9pZCAwPT09bD8iX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyI6''@;'; put 'put ''bCx0aGlzfTtjb25zdCBZY2U9eXksbkw9ZnVuY3Rpb24gamtlKGMsbCl7dmFyIGE9Yy5fX2RhdGFfXztyZXR1cm4gZnVuY3Rpb24gVmtlKGMpe3ZhciBsPXR5cGVvZiBjO3JldHVybiJzdHJpbmciPT1sfHwibnVtYmVyIj09bHx8InN5bWJvbCI9PWx8fCJib29sZWFuIj09bD8iX19wcm90b19f''@;'; put 'put ''IiE9PWM6bnVsbD09PWN9KGwpP2FbInN0cmluZyI9PXR5cGVvZiBsPyJzdHJpbmciOiJoYXNoIl06YS5tYXB9O2Z1bmN0aW9uIF95KGMpe3ZhciBsPS0xLGE9bnVsbD09Yz8wOmMubGVuZ3RoO2Zvcih0aGlzLmNsZWFyKCk7KytsPGE7KXt2YXIgZD1jW2xdO3RoaXMuc2V0KGRbMF0sZFsxXSl9''@;'; put 'put ''fV95LnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbiBIa2UoKXt0aGlzLnNpemU9MCx0aGlzLl9fZGF0YV9fPXtoYXNoOm5ldyBZY2UsbWFwOm5ldyhseHx8dEwpLHN0cmluZzpuZXcgWWNlfX0sX3kucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbiB6a2UoYyl7dmFyIGw9bkwodGhpcyxjKS5kZWxl''@;'; put 'put ''dGUoYyk7cmV0dXJuIHRoaXMuc2l6ZS09bD8xOjAsbH0sX3kucHJvdG90eXBlLmdldD1mdW5jdGlvbiBaa2UoYyl7cmV0dXJuIG5MKHRoaXMsYykuZ2V0KGMpfSxfeS5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uIFlrZShjKXtyZXR1cm4gbkwodGhpcyxjKS5oYXMoYyl9LF95LnByb3RvdHlwZS5z''@;'; put 'put ''ZXQ9ZnVuY3Rpb24gJGtlKGMsbCl7dmFyIGE9bkwodGhpcyxjKSxkPWEuc2l6ZTtyZXR1cm4gYS5zZXQoYyxsKSx0aGlzLnNpemUrPWEuc2l6ZT09ZD8wOjEsdGhpc307Y29uc3Qga1c9X3k7ZnVuY3Rpb24gd3koYyl7dmFyIGw9dGhpcy5fX2RhdGFfXz1uZXcgdEwoYyk7dGhpcy5zaXplPWwu''@;'; put 'put ''c2l6ZX13eS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24gRUFlKCl7dGhpcy5fX2RhdGFfXz1uZXcgdEwsdGhpcy5zaXplPTB9LHd5LnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24gQUFlKGMpe3ZhciBsPXRoaXMuX19kYXRhX18sYT1sLmRlbGV0ZShjKTtyZXR1cm4gdGhpcy5zaXplPWwuc2l6''@;'; put 'put ''ZSxhfSx3eS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uIERBZShjKXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5nZXQoYyl9LHd5LnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24gUkFlKGMpe3JldHVybiB0aGlzLl9fZGF0YV9fLmhhcyhjKX0sd3kucHJvdG90eXBlLnNldD1mdW5jdGlvbiBYa2UoYyxsKXt2''@;'; put 'put ''YXIgYT10aGlzLl9fZGF0YV9fO2lmKGEgaW5zdGFuY2VvZiB0TCl7dmFyIGQ9YS5fX2RhdGFfXztpZighbHh8fGQubGVuZ3RoPDE5OSlyZXR1cm4gZC5wdXNoKFtjLGxdKSx0aGlzLnNpemU9KythLnNpemUsdGhpczthPXRoaXMuX19kYXRhX189bmV3IGtXKGQpfXJldHVybiBhLnNldChjLGwp''@;'; put 'put ''LHRoaXMuc2l6ZT1hLnNpemUsdGhpc307Y29uc3QgUWtlPXd5O3ZhciBuRGU9ZnVuY3Rpb24oKXt0cnl7dmFyIGM9cjcoT2JqZWN0LCJkZWZpbmVQcm9wZXJ0eSIpO3JldHVybiBjKHt9LCIiLHt9KSxjfWNhdGNoe319KCk7Y29uc3QgR2NlPW5EZSwkY2U9ZnVuY3Rpb24gckRlKGMsbCxhKXsi''@;'; put 'put ''X19wcm90b19fIj09bCYmR2NlP0djZShjLGwse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOmEsd3JpdGFibGU6ITB9KTpjW2xdPWF9O3ZhciBhRGU9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtjb25zdCBLY2U9ZnVuY3Rpb24gb0RlKGMsbCxhKXt2YXIgZD1j''@;'; put 'put ''W2xdOyghYURlLmNhbGwoYyxsKXx8IUJjZShkLGEpfHx2b2lkIDA9PT1hJiYhKGwgaW4gYykpJiYkY2UoYyxsLGEpfSxyTD1mdW5jdGlvbiBzRGUoYyxsLGEsZCl7dmFyIGg9IWE7YXx8KGE9e30pO2Zvcih2YXIgZj0tMSx2PWwubGVuZ3RoOysrZjx2Oyl7dmFyIE09bFtmXSxEPWQ/ZChhW01d''@;'; put 'put ''LGNbTV0sTSxhLGMpOnZvaWQgMDt2b2lkIDA9PT1EJiYoRD1jW01dKSxoPyRjZShhLE0sRCk6S2NlKGEsTSxEKX1yZXR1cm4gYX0sQ3k9ZnVuY3Rpb24gdURlKGMpe3JldHVybiBudWxsIT1jJiYib2JqZWN0Ij09dHlwZW9mIGN9LHFjZT1mdW5jdGlvbiBoRGUoYyl7cmV0dXJuIEN5KGMpJiYi''@;'; put 'put ''W29iamVjdCBBcmd1bWVudHNdIj09YnkoYyl9O3ZhciBYY2U9T2JqZWN0LnByb3RvdHlwZSxmRGU9WGNlLmhhc093blByb3BlcnR5LHBEZT1YY2UucHJvcGVydHlJc0VudW1lcmFibGUsZ0RlPXFjZShmdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHN9KCkpP3FjZTpmdW5jdGlvbihjKXtyZXR1''@;'; put 'put ''cm4gQ3koYykmJmZEZS5jYWxsKGMsImNhbGxlZSIpJiYhcERlLmNhbGwoYywiY2FsbGVlIil9O2NvbnN0IG1EZT1nRGUsU3k9QXJyYXkuaXNBcnJheTt2YXIgSmNlPSJvYmplY3QiPT10eXBlb2YgZXhwb3J0cyYmZXhwb3J0cyYmIWV4cG9ydHMubm9kZVR5cGUmJmV4cG9ydHMsUWNlPUpjZSYm''@;'; put 'put ''Im9iamVjdCI9PXR5cGVvZiBtb2R1bGUmJm1vZHVsZSYmIW1vZHVsZS5ub2RlVHlwZSYmbW9kdWxlLGV1ZT1RY2UmJlFjZS5leHBvcnRzPT09SmNlP3ZwLkJ1ZmZlcjp2b2lkIDA7Y29uc3QgdHVlPShldWU/ZXVlLmlzQnVmZmVyOnZvaWQgMCl8fGZ1bmN0aW9uIGJEZSgpe3JldHVybiExfTt2''@;'; put 'put ''YXIgTURlPS9eKD86MHxbMS05XVxkKikkLztjb25zdCBFRGU9ZnVuY3Rpb24geERlKGMsbCl7dmFyIGE9dHlwZW9mIGM7cmV0dXJuISEobD1sPz85MDA3MTk5MjU0NzQwOTkxKSYmKCJudW1iZXIiPT1hfHwic3ltYm9sIiE9YSYmTURlLnRlc3QoYykpJiZjPi0xJiZjJTE9PTAmJmM8bH0sbnVl''@;'; put 'put ''PWZ1bmN0aW9uIEFEZShjKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGMmJmM+LTEmJmMlMT09MCYmYzw9OTAwNzE5OTI1NDc0MDk5MX07dmFyIGJjPXt9O2JjWyJbb2JqZWN0IEZsb2F0MzJBcnJheV0iXT1iY1siW29iamVjdCBGbG9hdDY0QXJyYXldIl09YmNbIltvYmplY3QgSW50OEFycmF5''@;'; put 'put ''XSJdPWJjWyJbb2JqZWN0IEludDE2QXJyYXldIl09YmNbIltvYmplY3QgSW50MzJBcnJheV0iXT1iY1siW29iamVjdCBVaW50OEFycmF5XSJdPWJjWyJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSJdPWJjWyJbb2JqZWN0IFVpbnQxNkFycmF5XSJdPWJjWyJbb2JqZWN0IFVpbnQzMkFycmF5''@;'; put 'put ''XSJdPSEwLGJjWyJbb2JqZWN0IEFyZ3VtZW50c10iXT1iY1siW29iamVjdCBBcnJheV0iXT1iY1siW29iamVjdCBBcnJheUJ1ZmZlcl0iXT1iY1siW29iamVjdCBCb29sZWFuXSJdPWJjWyJbb2JqZWN0IERhdGFWaWV3XSJdPWJjWyJbb2JqZWN0IERhdGVdIl09YmNbIltvYmplY3QgRXJyb3Jd''@;'; put 'put ''Il09YmNbIltvYmplY3QgRnVuY3Rpb25dIl09YmNbIltvYmplY3QgTWFwXSJdPWJjWyJbb2JqZWN0IE51bWJlcl0iXT1iY1siW29iamVjdCBPYmplY3RdIl09YmNbIltvYmplY3QgUmVnRXhwXSJdPWJjWyJbb2JqZWN0IFNldF0iXT1iY1siW29iamVjdCBTdHJpbmddIl09YmNbIltvYmplY3Qg''@;'; put 'put ''V2Vha01hcF0iXT0hMTtjb25zdCBEVz1mdW5jdGlvbiB0SWUoYyl7cmV0dXJuIGZ1bmN0aW9uKGwpe3JldHVybiBjKGwpfX07dmFyIHJ1ZT0ib2JqZWN0Ij09dHlwZW9mIGV4cG9ydHMmJmV4cG9ydHMmJiFleHBvcnRzLm5vZGVUeXBlJiZleHBvcnRzLHV4PXJ1ZSYmIm9iamVjdCI9PXR5cGVv''@;'; put 'put ''ZiBtb2R1bGUmJm1vZHVsZSYmIW1vZHVsZS5ub2RlVHlwZSYmbW9kdWxlLElXPXV4JiZ1eC5leHBvcnRzPT09cnVlJiZqY2UucHJvY2Vzcztjb25zdCBNeT1mdW5jdGlvbigpe3RyeXtyZXR1cm4gdXgmJnV4LnJlcXVpcmUmJnV4LnJlcXVpcmUoInV0aWwiKS50eXBlc3x8SVcmJklXLmJpbmRp''@;'; put 'put ''bmcmJklXLmJpbmRpbmcoInV0aWwiKX1jYXRjaHt9fSgpO3ZhciBpdWU9TXkmJk15LmlzVHlwZWRBcnJheTtjb25zdCBhSWU9aXVlP0RXKGl1ZSk6ZnVuY3Rpb24gUURlKGMpe3JldHVybiBDeShjKSYmbnVlKGMubGVuZ3RoKSYmISFiY1tieShjKV19O3ZhciBzSWU9T2JqZWN0LnByb3RvdHlw''@;'; put 'put ''ZS5oYXNPd25Qcm9wZXJ0eTtjb25zdCBhdWU9ZnVuY3Rpb24gbEllKGMsbCl7dmFyIGE9U3koYyksZD0hYSYmbURlKGMpLGg9IWEmJiFkJiZ0dWUoYyksZj0hYSYmIWQmJiFoJiZhSWUoYyksdj1hfHxkfHxofHxmLE09dj9mdW5jdGlvbiBsRGUoYyxsKXtmb3IodmFyIGE9LTEsZD1BcnJheShj''@;'; put 'put ''KTsrK2E8YzspZFthXT1sKGEpO3JldHVybiBkfShjLmxlbmd0aCxTdHJpbmcpOltdLEQ9TS5sZW5ndGg7Zm9yKHZhciBaIGluIGMpKGx8fHNJZS5jYWxsKGMsWikpJiYoIXZ8fCEoImxlbmd0aCI9PVp8fGgmJigib2Zmc2V0Ij09Wnx8InBhcmVudCI9PVopfHxmJiYoImJ1ZmZlciI9PVp8fCJi''@;'; put 'put ''eXRlTGVuZ3RoIj09Wnx8ImJ5dGVPZmZzZXQiPT1aKXx8RURlKFosRCkpKSYmTS5wdXNoKFopO3JldHVybiBNfTt2YXIgY0llPU9iamVjdC5wcm90b3R5cGU7Y29uc3QgUlc9ZnVuY3Rpb24gdUllKGMpe3ZhciBsPWMmJmMuY29uc3RydWN0b3I7cmV0dXJuIGM9PT0oImZ1bmN0aW9uIj09dHlw''@;'; put 'put ''ZW9mIGwmJmwucHJvdG90eXBlfHxjSWUpfSxvdWU9ZnVuY3Rpb24gZEllKGMsbCl7cmV0dXJuIGZ1bmN0aW9uKGEpe3JldHVybiBjKGwoYSkpfX0sZkllPW91ZShPYmplY3Qua2V5cyxPYmplY3QpO3ZhciBnSWU9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtjb25zdCBzdWU9ZnVu''@;'; put 'put ''Y3Rpb24gYkllKGMpe3JldHVybiBudWxsIT1jJiZudWUoYy5sZW5ndGgpJiYhWmNlKGMpfSxMVz1mdW5jdGlvbiB5SWUoYyl7cmV0dXJuIHN1ZShjKT9hdWUoYyk6ZnVuY3Rpb24gbUllKGMpe2lmKCFSVyhjKSlyZXR1cm4gZkllKGMpO3ZhciBsPVtdO2Zvcih2YXIgYSBpbiBPYmplY3QoYykp''@;'; put 'put ''Z0llLmNhbGwoYyxhKSYmImNvbnN0cnVjdG9yIiE9YSYmbC5wdXNoKGEpO3JldHVybiBsfShjKX07dmFyIHhJZT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O2NvbnN0IFRJZT1mdW5jdGlvbiBFSWUoYyl7aWYoIXN4KGMpKXJldHVybiBmdW5jdGlvbiBDSWUoYyl7dmFyIGw9W107''@;'; put 'put ''aWYobnVsbCE9Yylmb3IodmFyIGEgaW4gT2JqZWN0KGMpKWwucHVzaChhKTtyZXR1cm4gbH0oYyk7dmFyIGw9UlcoYyksYT1bXTtmb3IodmFyIGQgaW4gYykiY29uc3RydWN0b3IiPT1kJiYobHx8IXhJZS5jYWxsKGMsZCkpfHxhLnB1c2goZCk7cmV0dXJuIGF9LE9XPWZ1bmN0aW9uIEFJZShj''@;'; put 'put ''KXtyZXR1cm4gc3VlKGMpP2F1ZShjLCEwKTpUSWUoYyl9O3ZhciBsdWU9Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiZleHBvcnRzJiYhZXhwb3J0cy5ub2RlVHlwZSYmZXhwb3J0cyxjdWU9bHVlJiYib2JqZWN0Ij09dHlwZW9mIG1vZHVsZSYmbW9kdWxlJiYhbW9kdWxlLm5vZGVUeXBlJiZt''@;'; put 'put ''b2R1bGUsdXVlPWN1ZSYmY3VlLmV4cG9ydHM9PT1sdWU/dnAuQnVmZmVyOnZvaWQgMCxkdWU9dXVlP3V1ZS5hbGxvY1Vuc2FmZTp2b2lkIDA7Y29uc3QgaHVlPWZ1bmN0aW9uIE5JZSgpe3JldHVybltdfTt2YXIgQkllPU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUsZnVl''@;'; put 'put ''PU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMsakllPWZ1ZT9mdW5jdGlvbihjKXtyZXR1cm4gbnVsbD09Yz9bXTooYz1PYmplY3QoYyksZnVuY3Rpb24gRkllKGMsbCl7Zm9yKHZhciBhPS0xLGQ9bnVsbD09Yz8wOmMubGVuZ3RoLGg9MCxmPVtdOysrYTxkOyl7dmFyIHY9Y1thXTtsKHYs''@;'; put 'put ''YSxjKSYmKGZbaCsrXT12KX1yZXR1cm4gZn0oZnVlKGMpLGZ1bmN0aW9uKGwpe3JldHVybiBCSWUuY2FsbChjLGwpfSkpfTpodWU7Y29uc3QgUFc9akllLHB1ZT1mdW5jdGlvbiBaSWUoYyxsKXtmb3IodmFyIGE9LTEsZD1sLmxlbmd0aCxoPWMubGVuZ3RoOysrYTxkOyljW2grYV09bFthXTty''@;'; put 'put ''ZXR1cm4gY30sZ3VlPW91ZShPYmplY3QuZ2V0UHJvdG90eXBlT2YsT2JqZWN0KTt2YXIgR0llPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM/ZnVuY3Rpb24oYyl7Zm9yKHZhciBsPVtdO2M7KXB1ZShsLFBXKGMpKSxjPWd1ZShjKTtyZXR1cm4gbH06aHVlO2NvbnN0IG11ZT1HSWUsdnVl''@;'; put 'put ''PWZ1bmN0aW9uIHFJZShjLGwsYSl7dmFyIGQ9bChjKTtyZXR1cm4gU3koYyk/ZDpwdWUoZCxhKGMpKX0sSkllPWZ1bmN0aW9uIFhJZShjKXtyZXR1cm4gdnVlKGMsTFcsUFcpfSxlUmU9ZnVuY3Rpb24gUUllKGMpe3JldHVybiB2dWUoYyxPVyxtdWUpfSxGVz1yNyh2cCwiRGF0YVZpZXciKSxI''@;'; put 'put ''Vz1yNyh2cCwiUHJvbWlzZSIpLE5XPXI3KHZwLCJTZXQiKSxWVz1yNyh2cCwiV2Vha01hcCIpO3ZhciBidWU9IltvYmplY3QgTWFwXSIseXVlPSJbb2JqZWN0IFByb21pc2VdIixfdWU9IltvYmplY3QgU2V0XSIsd3VlPSJbb2JqZWN0IFdlYWtNYXBdIixDdWU9IltvYmplY3QgRGF0YVZpZXdd''@;'; put 'put ''IixvUmU9bjcoRlcpLHNSZT1uNyhseCksbFJlPW43KEhXKSxjUmU9bjcoTlcpLHVSZT1uNyhWVyksaTc9Ynk7KEZXJiZpNyhuZXcgRlcobmV3IEFycmF5QnVmZmVyKDEpKSkhPUN1ZXx8bHgmJmk3KG5ldyBseCkhPWJ1ZXx8SFcmJmk3KEhXLnJlc29sdmUoKSkhPXl1ZXx8TlcmJmk3KG5ldyBO''@;'; put 'put ''VykhPV91ZXx8VlcmJmk3KG5ldyBWVykhPXd1ZSkmJihpNz1mdW5jdGlvbihjKXt2YXIgbD1ieShjKSxhPSJbb2JqZWN0IE9iamVjdF0iPT1sP2MuY29uc3RydWN0b3I6dm9pZCAwLGQ9YT9uNyhhKToiIjtpZihkKXN3aXRjaChkKXtjYXNlIG9SZTpyZXR1cm4gQ3VlO2Nhc2Ugc1JlOnJldHVy''@;'; put 'put ''biBidWU7Y2FzZSBsUmU6cmV0dXJuIHl1ZTtjYXNlIGNSZTpyZXR1cm4gX3VlO2Nhc2UgdVJlOnJldHVybiB3dWV9cmV0dXJuIGx9KTtjb25zdCBCVz1pNzt2YXIgaFJlPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7Y29uc3QgU3VlPXZwLlVpbnQ4QXJyYXksalc9ZnVuY3Rpb24g''@;'; put 'put ''bVJlKGMpe3ZhciBsPW5ldyBjLmNvbnN0cnVjdG9yKGMuYnl0ZUxlbmd0aCk7cmV0dXJuIG5ldyBTdWUobCkuc2V0KG5ldyBTdWUoYykpLGx9O3ZhciB5UmU9L1x3KiQvO3ZhciBNdWU9dW0/dW0ucHJvdG90eXBlOnZvaWQgMCx4dWU9TXVlP011ZS52YWx1ZU9mOnZvaWQgMDtjb25zdCBZUmU9''@;'; put 'put ''ZnVuY3Rpb24gV1JlKGMsbCxhKXt2YXIgZD1jLmNvbnN0cnVjdG9yO3N3aXRjaChsKXtjYXNlIltvYmplY3QgQXJyYXlCdWZmZXJdIjpyZXR1cm4galcoYyk7Y2FzZSJbb2JqZWN0IEJvb2xlYW5dIjpjYXNlIltvYmplY3QgRGF0ZV0iOnJldHVybiBuZXcgZCgrYyk7Y2FzZSJbb2JqZWN0IERh''@;'; put 'put ''dGFWaWV3XSI6cmV0dXJuIGZ1bmN0aW9uIHZSZShjLGwpe3ZhciBhPWw/alcoYy5idWZmZXIpOmMuYnVmZmVyO3JldHVybiBuZXcgYy5jb25zdHJ1Y3RvcihhLGMuYnl0ZU9mZnNldCxjLmJ5dGVMZW5ndGgpfShjLGEpO2Nhc2UiW29iamVjdCBGbG9hdDMyQXJyYXldIjpjYXNlIltvYmplY3Qg''@;'; put 'put ''RmxvYXQ2NEFycmF5XSI6Y2FzZSJbb2JqZWN0IEludDhBcnJheV0iOmNhc2UiW29iamVjdCBJbnQxNkFycmF5XSI6Y2FzZSJbb2JqZWN0IEludDMyQXJyYXldIjpjYXNlIltvYmplY3QgVWludDhBcnJheV0iOmNhc2UiW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0iOmNhc2UiW29iamVjdCBV''@;'; put 'put ''aW50MTZBcnJheV0iOmNhc2UiW29iamVjdCBVaW50MzJBcnJheV0iOnJldHVybiBmdW5jdGlvbiBNUmUoYyxsKXt2YXIgYT1sP2pXKGMuYnVmZmVyKTpjLmJ1ZmZlcjtyZXR1cm4gbmV3IGMuY29uc3RydWN0b3IoYSxjLmJ5dGVPZmZzZXQsYy5sZW5ndGgpfShjLGEpO2Nhc2UiW29iamVjdCBN''@;'; put 'put ''YXBdIjpjYXNlIltvYmplY3QgU2V0XSI6cmV0dXJuIG5ldyBkO2Nhc2UiW29iamVjdCBOdW1iZXJdIjpjYXNlIltvYmplY3QgU3RyaW5nXSI6cmV0dXJuIG5ldyBkKGMpO2Nhc2UiW29iamVjdCBSZWdFeHBdIjpyZXR1cm4gZnVuY3Rpb24gX1JlKGMpe3ZhciBsPW5ldyBjLmNvbnN0cnVjdG9y''@;'; put 'put ''KGMuc291cmNlLHlSZS5leGVjKGMpKTtyZXR1cm4gbC5sYXN0SW5kZXg9Yy5sYXN0SW5kZXgsbH0oYyk7Y2FzZSJbb2JqZWN0IFN5bWJvbF0iOnJldHVybiBmdW5jdGlvbiBDUmUoYyl7cmV0dXJuIHh1ZT9PYmplY3QoeHVlLmNhbGwoYykpOnt9fShjKX19O3ZhciBFdWU9T2JqZWN0LmNyZWF0''@;'; put 'put ''ZSxHUmU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBjKCl7fXJldHVybiBmdW5jdGlvbihsKXtpZighc3gobCkpcmV0dXJue307aWYoRXVlKXJldHVybiBFdWUobCk7Yy5wcm90b3R5cGU9bDt2YXIgYT1uZXcgYztyZXR1cm4gYy5wcm90b3R5cGU9dm9pZCAwLGF9fSgpO2NvbnN0ICRSZT1HUmU7dmFy''@;'; put 'put ''IFR1ZT1NeSYmTXkuaXNNYXA7Y29uc3QgdExlPVR1ZT9EVyhUdWUpOmZ1bmN0aW9uIEpSZShjKXtyZXR1cm4gQ3koYykmJiJbb2JqZWN0IE1hcF0iPT1CVyhjKX07dmFyIEF1ZT1NeSYmTXkuaXNTZXQ7Y29uc3Qgb0xlPUF1ZT9EVyhBdWUpOmZ1bmN0aW9uIHJMZShjKXtyZXR1cm4gQ3koYykm''@;'; put 'put ''JiJbb2JqZWN0IFNldF0iPT1CVyhjKX07dmFyIGt1ZT0iW29iamVjdCBBcmd1bWVudHNdIixEdWU9IltvYmplY3QgRnVuY3Rpb25dIixJdWU9IltvYmplY3QgT2JqZWN0XSIsb2M9e307b2Nba3VlXT1vY1siW29iamVjdCBBcnJheV0iXT1vY1siW29iamVjdCBBcnJheUJ1ZmZlcl0iXT1vY1si''@;'; put 'put ''W29iamVjdCBEYXRhVmlld10iXT1vY1siW29iamVjdCBCb29sZWFuXSJdPW9jWyJbb2JqZWN0IERhdGVdIl09b2NbIltvYmplY3QgRmxvYXQzMkFycmF5XSJdPW9jWyJbb2JqZWN0IEZsb2F0NjRBcnJheV0iXT1vY1siW29iamVjdCBJbnQ4QXJyYXldIl09b2NbIltvYmplY3QgSW50MTZBcnJh''@;'; put 'put ''eV0iXT1vY1siW29iamVjdCBJbnQzMkFycmF5XSJdPW9jWyJbb2JqZWN0IE1hcF0iXT1vY1siW29iamVjdCBOdW1iZXJdIl09b2NbSXVlXT1vY1siW29iamVjdCBSZWdFeHBdIl09b2NbIltvYmplY3QgU2V0XSJdPW9jWyJbb2JqZWN0IFN0cmluZ10iXT1vY1siW29iamVjdCBTeW1ib2xdIl09''@;'; put 'put ''b2NbIltvYmplY3QgVWludDhBcnJheV0iXT1vY1siW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0iXT1vY1siW29iamVjdCBVaW50MTZBcnJheV0iXT1vY1siW29iamVjdCBVaW50MzJBcnJheV0iXT0hMCxvY1siW29iamVjdCBFcnJvcl0iXT1vY1tEdWVdPW9jWyJbb2JqZWN0IFdlYWtNYXBd''@;'; put 'put ''Il09ITE7Y29uc3QgTExlPWZ1bmN0aW9uIGlMKGMsbCxhLGQsaCxmKXt2YXIgdixNPTEmbCxEPTImbCxaPTQmbDtpZihhJiYodj1oP2EoYyxkLGgsZik6YShjKSksdm9pZCAwIT09dilyZXR1cm4gdjtpZighc3goYykpcmV0dXJuIGM7dmFyIHJlPVN5KGMpO2lmKHJlKXtpZih2PWZ1bmN0aW9u''@;'; put 'put ''IGZSZShjKXt2YXIgbD1jLmxlbmd0aCxhPW5ldyBjLmNvbnN0cnVjdG9yKGwpO3JldHVybiBsJiYic3RyaW5nIj09dHlwZW9mIGNbMF0mJmhSZS5jYWxsKGMsImluZGV4IikmJihhLmluZGV4PWMuaW5kZXgsYS5pbnB1dD1jLmlucHV0KSxhfShjKSwhTSlyZXR1cm4gZnVuY3Rpb24gT0llKGMs''@;'; put 'put ''bCl7dmFyIGE9LTEsZD1jLmxlbmd0aDtmb3IobHx8KGw9QXJyYXkoZCkpOysrYTxkOylsW2FdPWNbYV07cmV0dXJuIGx9KGMsdil9ZWxzZXt2YXIgY2U9QlcoYyksYmU9Y2U9PUR1ZXx8IltvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dIj09Y2U7aWYodHVlKGMpKXJldHVybiBmdW5jdGlvbiBS''@;'; put 'put ''SWUoYyxsKXtpZihsKXJldHVybiBjLnNsaWNlKCk7dmFyIGE9Yy5sZW5ndGgsZD1kdWU/ZHVlKGEpOm5ldyBjLmNvbnN0cnVjdG9yKGEpO3JldHVybiBjLmNvcHkoZCksZH0oYyxNKTtpZihjZT09SXVlfHxjZT09a3VlfHxiZSYmIWgpe2lmKHY9RHx8YmU/e306ZnVuY3Rpb24gS1JlKGMpe3Jl''@;'; put 'put ''dHVybiJmdW5jdGlvbiIhPXR5cGVvZiBjLmNvbnN0cnVjdG9yfHxSVyhjKT97fTokUmUoZ3VlKGMpKX0oYyksIU0pcmV0dXJuIEQ/ZnVuY3Rpb24gJEllKGMsbCl7cmV0dXJuIHJMKGMsbXVlKGMpLGwpfShjLGZ1bmN0aW9uIGtJZShjLGwpe3JldHVybiBjJiZyTChsLE9XKGwpLGMpfSh2LGMp''@;'; put 'put ''KTpmdW5jdGlvbiB6SWUoYyxsKXtyZXR1cm4gckwoYyxQVyhjKSxsKX0oYyxmdW5jdGlvbiBfSWUoYyxsKXtyZXR1cm4gYyYmckwobCxMVyhsKSxjKX0odixjKSl9ZWxzZXtpZighb2NbY2VdKXJldHVybiBoP2M6e307dj1ZUmUoYyxjZSxNKX19Znx8KGY9bmV3IFFrZSk7dmFyIEVlPWYuZ2V0''@;'; put 'put ''KGMpO2lmKEVlKXJldHVybiBFZTtmLnNldChjLHYpLG9MZShjKT9jLmZvckVhY2goZnVuY3Rpb24ocnQpe3YuYWRkKGlMKHJ0LGwsYSxydCxjLGYpKX0pOnRMZShjKSYmYy5mb3JFYWNoKGZ1bmN0aW9uKHJ0LHB0KXt2LnNldChwdCxpTChydCxsLGEscHQsYyxmKSl9KTt2YXIgcWU9cmU/dm9p''@;'; put 'put ''ZCAwOihaP0Q/ZVJlOkpJZTpEP09XOkxXKShjKTtyZXR1cm4gZnVuY3Rpb24gZURlKGMsbCl7Zm9yKHZhciBhPS0xLGQ9bnVsbD09Yz8wOmMubGVuZ3RoOysrYTxkJiYhMSE9PWwoY1thXSxhLGMpOyk7fShxZXx8YyxmdW5jdGlvbihydCxwdCl7cWUmJihydD1jW3B0PXJ0XSksS2NlKHYscHQs''@;'; put 'put ''aUwocnQsbCxhLHB0LGMsZikpfSksdn0sYUw9ZnVuY3Rpb24gRkxlKGMpe3JldHVybiBMTGUoYyw1KX07dmFyIEhMZT15KDc4ODU1KTtsZXQgU3U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLnNhc1NlcnZpY2U9YSx0aGlzLnNob3duTGlicmFyaWVzPTUwLHRoaXMubG9hZE1v''@;'; put 'put ''cmVDb3VudD01MCx0aGlzLmlzTWljcm9zb2Z0PSExLHRoaXMuaXNNaWNyb3NvZnQ9dGhpcy5pc0lFb3JFREdFKCksY29uc29sZS5sb2coIklzIElFIG9yIEVkZ2U/Iix0aGlzLmlzTWljcm9zb2Z0KX1jb252ZXJ0SnNEYXRlVG9TYXNEYXRlKGEsZD0iZGF5cyIpe2xldCBoLGY9MDtoPWEgaW5z''@;'; put 'put ''dGFuY2VvZiBEYXRlP2E6bmV3IERhdGUoYSksZj1uZXcgRGF0ZShEYXRlLlVUQyhoLmdldEZ1bGxZZWFyKCksaC5nZXRNb250aCgpLGguZ2V0RGF0ZSgpLGguZ2V0SG91cnMoKSxoLmdldE1pbnV0ZXMoKSxoLmdldFNlY29uZHMoKSkpLnZhbHVlT2YoKTtjb25zdCBEPWYrMzE1NjE5MmU1O3N3''@;'; put 'put ''aXRjaChkKXtjYXNlImRheXMiOntsZXQgWj1ELzg2NGU1O3JldHVybiBaPU1hdGguYWJzKFopLFo9TWF0aC5mbG9vcihaKSxafWNhc2Uic2Vjb25kcyI6cmV0dXJuIEQvMWUzfXJldHVybiAwfWNvbnZlcnRTYXNEYXlzVG9Kc0RhdGUoYSxkPSJkYXlzIil7aWYoIm51bWJlciIhPXR5cGVvZiBh''@;'; put 'put ''JiYoYT1wYXJzZUZsb2F0KGEpKSwic2Vjb25kcyI9PT1kKXtsZXQgTT0xZTMqYS0zMTU2MTkyZTU7cmV0dXJuIE0rPTYwKm5ldyBEYXRlKE0pLmdldFRpbWV6b25lT2Zmc2V0KCkqMWUzLG5ldyBEYXRlKE0pfXJldHVybiBuZXcgRGF0ZSg4NjRlNSphLTMxNTYxOTJlNSl9dHJlZU9uRmlsdGVy''@;'; put 'put ''KGEsZCl7bGV0IGg9YS5zZWFyY2hTdHJpbmc/YS5zZWFyY2hTdHJpbmc6IiIsZj1kLnNwbGl0KCIuIilbMF0sdj1kLnNwbGl0KCIuIilbMV0sTT1mKyJBbGwiO2FbZl0mJihhW01dfHwoYVtNXT10aGlzLmRlZXBDbG9uZShhW2ZdKSksYVtmXT10aGlzLmRlZXBDbG9uZShhW01dKSxoLmxlbmd0''@;'; put 'put ''aD4wJiYoYVtmXT1hW2ZdLmZpbHRlcih2P0Q9PkRbdl0udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhoLnRvTG93ZXJDYXNlKCkpOkQ9PkQudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhoLnRvTG93ZXJDYXNlKCkpKSkpfWxpYnJhcnlPbkZpbHRlcihhLGQsaCl7ZC5sZW5ndGg+MD9hLmZvckVhY2go''@;'; put 'put ''Zj0+e2ZbaF0udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhkLnRvTG93ZXJDYXNlKCkpPyhmLmhpZGRlbj0hMSxmLmluRm9yZWdyb3VuZD0hMCk6KGYuaGlkZGVuPSEwLGYuaW5Gb3JlZ3JvdW5kPSExKX0pOih0aGlzLnJlc2V0QXJyYXlGaWx0ZXIoYSksdGhpcy5kaXNwbGF5TGlicmFyaWVzKGEp''@;'; put 'put ''KX1kaXNwbGF5TGlicmFyaWVzKGEsZCl7ZD90aGlzLnNob3duTGlicmFyaWVzKz10aGlzLmxvYWRNb3JlQ291bnQ6KHRoaXMuc2hvd25MaWJyYXJpZXM9NTAsdGhpcy5yZXNldExpYnJhcnlGb3JlZ3JvdW5kKGEpKTtmb3IobGV0IGg9MDtoPGEubGVuZ3RoJiZoIT09dGhpcy5zaG93bkxpYnJh''@;'; put 'put ''cmllcztoKyspYVtoXS5pbkZvcmVncm91bmQ9ITB9cmVzZXRMaWJyYXJ5Rm9yZWdyb3VuZChhKXtmb3IobGV0IGQ9MDtkPGEubGVuZ3RoO2QrKylhW2RdLmluRm9yZWdyb3VuZD0hMX1tZXRhT2JqZWN0T25GaWx0ZXIoYSxkLGgpe2QubGVuZ3RoPjA/KHRoaXMucmVzZXRBcnJheUZpbHRlcihh''@;'; put 'put ''KSxhLmZvckVhY2goZj0+e2ZbaF0udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhkLnRvTG93ZXJDYXNlKCkpfHwoZi5oaWRkZW49ITApfSkpOnRoaXMucmVzZXRBcnJheUZpbHRlcihhKX1yZXNldEFycmF5RmlsdGVyKGEpe2EuZm9yRWFjaChkPT57ZC5oaWRkZW49ITEsZC5pbkZvcmVncm91bmQm''@;'; put 'put ''JmRlbGV0ZSBkLmluRm9yZWdyb3VuZH0pfWlzSUVvckVER0UoKXt2YXIgYT13aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudDtyZXR1cm4gYS5pbmRleE9mKCJNU0lFICIpPjB8fChhLmluZGV4T2YoIlRyaWRlbnQvIik+MD8oYS5pbmRleE9mKCJydjoiKSwhMCk6YS5pbmRleE9mKCJFZGdlLyIp''@;'; put 'put ''PjApfWNvbnZlcnRPYmplY3RzVG9BcnJheShhLGQ9ITEpe3JldHVybiBkJiYoYT10aGlzLmRlZXBDbG9uZShhKSksYS5tYXAoaD0+T2JqZWN0LmtleXMoaCkubWFwKGY9PmhbZl0pKX1hZGRMZWFkaW5nWmVybyhhKXtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIGEmJihhPWEudG9TdHJpbmcoKSks''@;'; put 'put ''YS5sZW5ndGg8Mj8iMCIrYTphfWRlbGV0ZUtleXNBbmRIYXNoKGEsZCxoPSEwKXtjb25zdCBmPWg/dGhpcy5kZWVwQ2xvbmUoYSk6YTtmb3IobGV0IHYgb2YgZClkZWxldGUgZlt2XTtyZXR1cm4gSExlKEpTT04uc3RyaW5naWZ5KGYpKS50b1N0cmluZygpfWRvd25sb2FkVGV4dEZpbGUoYSxk''@;'; put 'put ''KXtjb25zdCBoPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTtoLnNldEF0dHJpYnV0ZSgiaHJlZiIsImRhdGE6dGV4dC9wbGFpbjtjaGFyc2V0PXV0Zi04LCIrZW5jb2RlVVJJQ29tcG9uZW50KGQpKSxoLnNldEF0dHJpYnV0ZSgiZG93bmxvYWQiLGErIi50eHQiKSxoLnN0eWxlLmRpc3Bs''@;'; put 'put ''YXk9Im5vbmUiLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaCksaC5jbGljaygpLGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoaCl9Y29udmVydEFycmF5VmFsdWVzKGEsZCl7aWYoYS5sZW5ndGg8MSlyZXR1cm5bXTtzd2l0Y2goZCl7Y2FzZSJudW1iZXIiOnJldHVybiBhLm1hcChoPT4x''@;'; put 'put ''KmgpO2Nhc2Uic3RyaW5nIjpyZXR1cm4gYS50b1N0cmluZygpLnNwbGl0KCIsIil9fWlzU3RyZWFtaW5nVml5YSgpe3JldHVybiJTQVNWSVlBIj09PXRoaXMuc2FzU2VydmljZS5nZXRTZXJ2ZXJUeXBlKCkmJiEoIWxvY2F0aW9uLnNlYXJjaC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCI/X2Zp''@;'; put 'put ''bGU9Iil8fCFsb2NhdGlvbi5wYXRobmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCIvc2Fzam9iZXhlY3V0aW9uIikpfWRlYm91bmNlQ2FsbChhLGQpe2NsZWFyVGltZW91dCh0aGlzLmRlYm91bmNlVGltZW91dCksdGhpcy5kZWJvdW5jZVRpbWVvdXQ9c2V0VGltZW91dChkLGEpfWRlZXBD''@;'; put 'put ''bG9uZShhKXtyZXR1cm4gYUwoYSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoeHIoR3MpKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9fXJldHVybiBj''@;'; put 'put ''fSkoKSx1MT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNKXt0aGlzLmxvZ2dlclNlcnZpY2U9YSx0aGlzLmFwcFN0b3JlU2VydmljZT1kLHRoaXMuZXZlbnRTZXJ2aWNlPWgsdGhpcy5zYXNTZXJ2aWNlPWYsdGhpcy5oZWxwZXJTZXJ2aWNlPXYsdGhpcy5yb3V0ZXI9TSx0''@;'; put 'put ''aGlzLnVzZXJDb3VudExpbWl0YXRpb249ITEsdGhpcy5saWNlbnNlS2V5RGF0YT1udWxsLHRoaXMuX2xpY2VuY2VTdGF0ZT15Vyx0aGlzLmFsbEZlYXR1cmVzT249e3ZpZXdlcl9yb3dzX2FsbG93ZWQ6MS8wLGVkaXRvcl9yb3dzX2FsbG93ZWQ6MS8wLHN0YWdlX3Jvd3NfYWxsb3dlZDoxLzAs''@;'; put 'put ''aGlzdG9yeV9yb3dzX2FsbG93ZWQ6MS8wLHN1Ym1pdF9yb3dzX2xpbWl0OjEvMCx0YWJsZXNfaW5fbGlicmFyeV9saW1pdDoxLzAsdmlld2JveF9saW1pdDoxLzAsbGluZWFnZV9kYWlseV9saW1pdDoxLzAsdmlld2JveDohMCxmaWxlVXBsb2FkOiEwLGVkaXRSZWNvcmQ6ITAsYWRkUmVjb3Jk''@;'; put 'put ''OiEwfSx0aGlzLmZyZWVUaWVyTGljZW5jZURhdGE9e2RlbW86ITAsaG90X2xpY2Vuc2Vfa2V5OnRoaXMuYXBwU3RvcmVTZXJ2aWNlLmdldERjQWRhcHRlclNldHRpbmdzKCk/LmhvdExpY2VuY2VLZXksdXNlcnNfYWxsb3dlZDp0aGlzLl9saWNlbmNlU3RhdGUudXNlcnNfYWxsb3dlZHx8MSx2''@;'; put 'put ''YWxpZF91bnRpbDpPbygpLmFkZCgxLCJ5ZWFyIikuZm9ybWF0KCJZWVlZLU1NLUREIiksc2l0ZV9pZDoiIixzaXRlX2lkX211bHRpcGxlOltdfSx0aGlzLmlzQXBwQWN0aXZhdGVkPW5ldyBlaShudWxsKSx0aGlzLmlzQXBwT3ZlckNhcGFjaXR5PW5ldyBlaSghMSksdGhpcy5jdXJyZW50VXNl''@;'; put 'put ''ckNhblJlZ2lzdGVyPW5ldyBlaSghMSksdGhpcy5hcHBMb2NrZWQ9bmV3IGVpKCExKSx0aGlzLmxpY2Vuc2VFeHBpcmVzSW5EYXlzPW5ldyBlaShudWxsKSx0aGlzLmlzQXBwRnJlZVRpZXI9bmV3IGVpKCExKSx0aGlzLmxpY2VuY2VQcm9ibGVtPW5ldyBlaShudWxsKSx0aGlzLmhvdF9saWNl''@;'; put 'put ''bnNlX2tleT1uZXcgZWkodm9pZCAwKSx0aGlzLmxpY2VuY2VTdGF0ZT1uZXcgZWkodGhpcy5fbGljZW5jZVN0YXRlKSx0aGlzLnNhc1NlcnZpY2UuaW5jb3JyZWN0U2l0ZUlkRW1pdHRlci5zdWJzY3JpYmUoRD0+e2lmKG51bGwhPT10aGlzLmlzQXBwQWN0aXZhdGVkLnZhbHVlJiYhdGhpcy5p''@;'; put 'put ''c0FwcEZyZWVUaWVyLnZhbHVlKXtjb25zdCBaPWAvbGljZW5zaW5nL2tleT9lcnJvcj1taXNzbWF0Y2gmbWlzc21hdGNoSWQ9JHtEfSZmb3JjZT10cnVlYDt0aGlzLmxpY2VuY2VQcm9ibGVtLm5leHQoWiksdGhpcy5kZWFjdGl2YXRlQXBwKFopfX0pfWFjdGl2YXRpb24oYSl7dmFyIGQ9dGhp''@;'; put 'put ''cztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7ZC5mcmVlVGllckxpY2VuY2VEYXRhLmhvdF9saWNlbnNlX2tleT1kLmFwcFN0b3JlU2VydmljZS5nZXREY0FkYXB0ZXJTZXR0aW5ncygpPy5ob3RMaWNlbmNlS2V5LHlpZWxkIGQuc2V0U3RhcnR1cHNlcnZpY2VSdWxlcyhhKSx5aWVsZCBkLmxpY2Vu''@;'; put 'put ''c2luZyhhLmdsb2J2YXJzLGEuU1lTU0lURSl9KSgpfXNldFN0YXJ0dXBzZXJ2aWNlUnVsZXMoYSl7dGhpcy5fbGljZW5jZVN0YXRlLmVkaXRSZWNvcmQ9IllFUyIhPT1hLmdsb2J2YXJzWzBdLkRDX1JFU1RSSUNUX0VESVRSRUNPUkR9bGljZW5zaW5nKGEsZCl7dmFyIGg9dGhpcztyZXR1cm4g''@;'; put 'put ''ZWUoZnVuY3Rpb24qKCl7aWYoIWF8fCFhWzBdKXtjb25zdCB2PSdFcnJvciBnZXR0aW5nICJHbG9idmFycyIgZnJvbSBzdGFydHVwc2VydmljZSByZXNwb25zZS4nO3JldHVybiBjb25zb2xlLmVycm9yKHYpLGguaXNBcHBBY3RpdmF0ZWQubmV4dCghMSksdm9pZCBoLnJvdXRlci5uYXZpZ2F0''@;'; put 'put ''ZUJ5VXJsKGAvbGljZW5zaW5nL2tleT9lcnJvcj1pbnZhbGlkJmRldGFpbHM9JHtidG9hKHYpfWApfWxldCBmPWFbMF07cmV0dXJuIHZvaWQgMD09PWYuTElDRU5DRV9LRVl8fHZvaWQgMD09PWYuQUNUSVZBVElPTl9LRVl8fG51bGw9PWYuUkVHSVNURVJDT1VOVHx8bnVsbD09Zi5JU1JFR0lT''@;'; put 'put ''VEVSRUQ/KGNvbnNvbGUuZXJyb3IoIlNvbWUgb2YgZ2xvYnZhcnMgYXJlIG5vdCBwcmVzZW50IiksaC5pc0FwcEFjdGl2YXRlZC5uZXh0KCExKSx2b2lkIGguZXZlbnRTZXJ2aWNlLnNob3dJbmZvTW9kYWwoIkVycm9yIiwiU29tZSBvZiB0aGUgZ2xvYnZhcnMgYXJlIG5vdCBwcmVzZW50IGlu''@;'; put 'put ''IHRoZSBzdGFydHVwc2VydmljZSIpKTpmLkxJQ0VOQ0VfS0VZJiZmLkFDVElWQVRJT05fS0VZPyhoLmxpY2VuY2VLZXk9Zi5MSUNFTkNFX0tFWSxoLmFjdGl2YXRpb25LZXk9Zi5BQ1RJVkFUSU9OX0tFWSx2b2lkKHlpZWxkIGguZGVjcnlwdExpY2Vuc2VLZXkoZi5MSUNFTkNFX0tFWSxmLkFD''@;'; put 'put ''VElWQVRJT05fS0VZKS50aGVuKGZ1bmN0aW9uKCl7dmFyIHY9ZWUoZnVuY3Rpb24qKE0pe3lpZWxkIGguYXBwbGljYXRpb25BY3RpdmF0aW9uKE0sZixkKX0pO3JldHVybiBmdW5jdGlvbihNKXtyZXR1cm4gdi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpLGZ1bmN0aW9uKCl7dmFyIHY9ZWUo''@;'; put 'put ''ZnVuY3Rpb24qKE0pe2NvbnN0IEQ9YEVycm9yIGRlY3J5cHRpbmcgbGljZW5zZSBrZXkuICR7TX1gO2NvbnNvbGUuZXJyb3IoRCk7Y29uc3QgWj1gL2xpY2Vuc2luZy9rZXk/ZXJyb3I9aW52YWxpZCZkZXRhaWxzPSR7YnRvYShEKX0mZm9yY2U9dHJ1ZWA7aC5saWNlbmNlUHJvYmxlbS5uZXh0''@;'; put 'put ''KFopLGgucm91dGVyLm5hdmlnYXRlQnlVcmwoWiksc2V0VGltZW91dCgoKT0+aC5hcHBsaWNhdGlvbkFjdGl2YXRpb24oaC5mcmVlVGllckxpY2VuY2VEYXRhLGYsZCwhMCkpfSk7cmV0dXJuIGZ1bmN0aW9uKE0pe3JldHVybiB2LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkpKSk6eWllbGQg''@;'; put 'put ''aC5hcHBsaWNhdGlvbkFjdGl2YXRpb24oaC5mcmVlVGllckxpY2VuY2VEYXRhLGYsZCl9KSgpfWFwcGxpY2F0aW9uQWN0aXZhdGlvbihhLGQsaCxmKXtmfHwoZj0hMSksdGhpcy5zZXRTaXRlSWQoYSksIWEuZGVtbyYmZCYmaCYmdGhpcy5oYW5kbGVTaXRlSWRNaXNzbWF0Y2goYSxkLGgsZik7''@;'; put 'put ''bGV0IHY9dm9pZCAwIT09YS5ob3RfbGljZW5zZV9rZXk/YS5ob3RfbGljZW5zZV9rZXk6dGhpcy5ob3RfbGljZW5zZV9rZXkudmFsdWU7dnx8KHY9dGhpcy5hcHBTdG9yZVNlcnZpY2UuZ2V0RGNBZGFwdGVyU2V0dGluZ3MoKT8uaG90TGljZW5jZUtleSksdGhpcy5ob3RfbGljZW5zZV9rZXku''@;'; put 'put ''bmV4dCh2KSx0aGlzLnVzZXJDb3VudExpbWl0YXRpb24mJnRoaXMuaGFuZGxlVXNlcnNBbGxvd2VkKGEpLHRoaXMubGljZW5zZUtleURhdGE9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShhKSx3aW5kb3cuYXBwaW5mbygpO2NvbnN0e2V4cGlyeV9kYXRlOk0sZGF5c1RvRXhwaXJ5OkR9''@;'; put 'put ''PXRoaXMuY2FsY3VsYXRlRXhwaXJ5KGEpO2lmKHdpbmRvdy5saWNlbnNlRXhwaXJlc0luPUQsdGhpcy5saWNlbnNlRXhwaXJlc0luRGF5cy5uZXh0KEQpLEQ8PTApcmV0dXJuIGNvbnNvbGUuZXJyb3IoIkxpY2Vuc2Uga2V5IGhhcyBleHBpcmVkIiksdm9pZChkJiZoJiZ0aGlzLmhhbmRsZUV4''@;'; put 'put ''cGlyeShNLGQsaCxmKSk7dGhpcy5pc0FwcEZyZWVUaWVyLm5leHQoISFhLmRlbW8pLGQmJnRoaXMuaGFuZGxlVXNlclJlZ2lzdHJhdGlvbihhLGQsZiksdGhpcy5kZWNvZGVMaWNlbmNlRmVhdHVyZXMoYSksdGhpcy5saWNlbmNlU3RhdGUubmV4dCh0aGlzLl9saWNlbmNlU3RhdGUpfWRlY29k''@;'; put 'put ''ZUxpY2VuY2VGZWF0dXJlcyhhKXtpZighYS5mZWF0dXJlcyl7aWYoYS5kZW1vKXJldHVybjtyZXR1cm4gdm9pZCh0aGlzLl9saWNlbmNlU3RhdGU9dGhpcy5hbGxGZWF0dXJlc09uKX1jb25zdCBkPWEuZmVhdHVyZXMuc3BsaXQoIiwiKTt0aGlzLl9saWNlbmNlU3RhdGU9ey4uLnRoaXMuX2xp''@;'; put 'put ''Y2VuY2VTdGF0ZSx2aWV3ZXJfcm93c19hbGxvd2VkOnRoaXMucGFyc2VGZWF0dXJlVmFsdWUoZFtnaC52aWV3ZXJfcm93c19hbGxvd2VkXSksZWRpdG9yX3Jvd3NfYWxsb3dlZDp0aGlzLnBhcnNlRmVhdHVyZVZhbHVlKGRbZ2guZWRpdG9yX3Jvd3NfYWxsb3dlZF0pLHN0YWdlX3Jvd3NfYWxs''@;'; put 'put ''b3dlZDp0aGlzLnBhcnNlRmVhdHVyZVZhbHVlKGRbZ2guc3RhZ2Vfcm93c19hbGxvd2VkXSksaGlzdG9yeV9yb3dzX2FsbG93ZWQ6dGhpcy5wYXJzZUZlYXR1cmVWYWx1ZShkW2doLmhpc3Rvcnlfcm93c19hbGxvd2VkXSksc3VibWl0X3Jvd3NfbGltaXQ6dGhpcy5wYXJzZUZlYXR1cmVWYWx1''@;'; put 'put ''ZShkW2doLnN1Ym1pdF9yb3dzX2xpbWl0XSksdGFibGVzX2luX2xpYnJhcnlfbGltaXQ6dGhpcy5wYXJzZUZlYXR1cmVWYWx1ZShkW2doLnRhYmxlc19pbl9saWJyYXJ5X2xpbWl0XSksdmlld2JveF9saW1pdDp0aGlzLnBhcnNlRmVhdHVyZVZhbHVlKGRbZ2gudmlld2JveF9saW1pdF0pLGxp''@;'; put 'put ''bmVhZ2VfZGFpbHlfbGltaXQ6dGhpcy5wYXJzZUZlYXR1cmVWYWx1ZShkW2doLmxpbmVhZ2VfZGFpbHlfbGltaXRdKSx2aWV3Ym94OnRoaXMucGFyc2VGZWF0dXJlVG9nZ2xlKGRbZ2gudmlld2JveF0pLGZpbGVVcGxvYWQ6dGhpcy5wYXJzZUZlYXR1cmVUb2dnbGUoZFtnaC5maWxlVXBsb2Fk''@;'; put 'put ''XSksZWRpdFJlY29yZDp0aGlzLnBhcnNlRmVhdHVyZVRvZ2dsZShkW2doLmVkaXRSZWNvcmRdKSxhZGRSZWNvcmQ6dGhpcy5wYXJzZUZlYXR1cmVUb2dnbGUoZFtnaC5hZGRSZWNvcmRdKX0sdGhpcy5sb2dnZXJTZXJ2aWNlLmxvZygiTGljZW5jZSBzdGF0ZToiLHRoaXMuX2xpY2VuY2VTdGF0''@;'; put 'put ''ZSl9cGFyc2VGZWF0dXJlVmFsdWUoYSl7cmV0dXJuIi0iPT09YT8xLzA6cGFyc2VJbnQoYSl9cGFyc2VGZWF0dXJlVG9nZ2xlKGEpe3JldHVybiEhcGFyc2VJbnQoYSl9ZGVjcnlwdExpY2Vuc2VLZXkoYSxkKXt2YXIgaD10aGlzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbigpe3ZhciBm''@;'; put 'put ''PWVlKGZ1bmN0aW9uKih2LE0pe2lmKCF3aW5kb3cuY3J5cHRvfHwhd2luZG93LmNyeXB0by5zdWJ0bGUpdHJ5e2xldCBiZT1hdG9iKGEuc3BsaXQoIiIpLnJldmVyc2UoKS5qb2luKCIiKSk7dihKU09OLnBhcnNlKGJlKSl9Y2F0Y2goYmUpe00oIkVycm9yIHBhcnNpbmcgaHR0cCBsaWNlbnNl''@;'; put 'put ''IGtleSBkYXRhLiAiK2JlKX1sZXQgWixEPXlpZWxkIGguYmFzZTY0VG9BcnJheUJ1ZmZlcihhKS5jYXRjaChiZT0+e00oYmUpfSk7Y29uc3QgcmU9eWllbGQgaC5iYXNlNjRUb0FycmF5QnVmZmVyKGQpLmNhdGNoKGJlPT57TShiZSl9KTtpZighcmUpcmV0dXJuIHZvaWQgTSgiTWlzc2luZyBh''@;'; put 'put ''Y3RpdmF0aW9uIGtleSIpO2xldCBjZTtaPXJlO3RyeXtjZT15aWVsZCB3aW5kb3cuY3J5cHRvLnN1YnRsZS5pbXBvcnRLZXkoInBrY3M4IixaLHtuYW1lOiJSU0EtT0FFUCIsaGFzaDoiU0hBLTI1NiJ9LCEwLFsiZGVjcnlwdCJdKX1jYXRjaChiZSl7TSgiVW5hYmxlIHRvIGltcG9ydCBkZWNy''@;'; put 'put ''eXB0aW9uIGtleTogIitiZSl9aWYoY2UpaWYoRCl0cnl7d2luZG93LmNyeXB0by5zdWJ0bGUuZGVjcnlwdCh7bmFtZToiUlNBLU9BRVAiLGhhc2g6e25hbWU6IlNIQS0yNTYifX0sY2UsRCkudGhlbihiZT0+e2xldCBFZT0obmV3IFJUZS5UZXh0RGVjb2RlcikuZGVjb2RlKGJlKTt0cnl7dihK''@;'; put 'put ''U09OLnBhcnNlKEVlKSl9Y2F0Y2goQmUpe00oIkVycm9yIHBhcnNpbmcgbGljZW5zZSBrZXkgZGF0YS4gIitCZSl9fSxiZT0+e00oYmUpfSl9Y2F0Y2goYmUpe00oYmUpfWVsc2UgTSgiTGljZW5zZSBrZXkgYnl0ZXMgbWlzc2luZyIpO2Vsc2UgTSgiVW5hYmxlIHRvIGltcG9ydCBkZWNyeXB0''@;'; put 'put ''aW9uIGtleSIpfSk7cmV0dXJuIGZ1bmN0aW9uKHYsTSl7cmV0dXJuIGYuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSl9Z2V0SG90TGljZW5zZUtleSgpe3JldHVybiB0aGlzLmhvdF9saWNlbnNlX2tleS52YWx1ZX1nZXRMaWNlbnNlS2V5RGF0YSgpe3JldHVybiB0aGlzLmxpY2Vuc2VLZXlE''@;'; put 'put ''YXRhfWRlYWN0aXZhdGVBcHAoYSl7dGhpcy5fbGljZW5jZVN0YXRlPXlXLHRoaXMuYXBwbGljYXRpb25BY3RpdmF0aW9uKHRoaXMuZnJlZVRpZXJMaWNlbmNlRGF0YSksYSYmdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChhKX1jaGVja0xpbmVhZ2VMaW1pdChhKXtpZih0aGlzLmxpY2VuY2VT''@;'; put 'put ''dGF0ZS52YWx1ZS5saW5lYWdlX2RhaWx5X2xpbWl0PT09MS8wKXJldHVybiExO2NvbnN0IGQ9bG9jYWxTdG9yYWdlLmdldEl0ZW0oImxpbmVhZ2VfcmVuZGVycyIpLGg9T28oKS52YWx1ZU9mKCk7aWYoIWQpcmV0dXJuIGF8fHRoaXMuc2V0TGluZWFnZVJlbmRlcihoLDEpLCExO2NvbnN0IGY9''@;'; put 'put ''cGFyc2VJbnQoZC5zcGxpdCgiLCIpWzBdKSx2PXBhcnNlSW50KGQuc3BsaXQoIiwiKVsxXSk7cmV0dXJuIE9vKGYpLmlzU2FtZShPbygpLCJkYXkiKT92Pj10aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS5saW5lYWdlX2RhaWx5X2xpbWl0fHwoYXx8dGhpcy5zZXRMaW5lYWdlUmVuZGVyKGgsdisx''@;'; put 'put ''KSwhMSk6KGF8fHRoaXMuc2V0TGluZWFnZVJlbmRlcihoLDEpLCExKX1zZXRMaW5lYWdlUmVuZGVyKGEsZCl7bG9jYWxTdG9yYWdlLnNldEl0ZW0oImxpbmVhZ2VfcmVuZGVycyIsYCR7YX0sJHtkfWApfWJhc2U2NFRvQXJyYXlCdWZmZXIoYSl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9u''@;'; put 'put ''KCl7dmFyIGQ9ZWUoZnVuY3Rpb24qKGgsZil7aChnY2UuRChhKSl9KTtyZXR1cm4gZnVuY3Rpb24oaCxmKXtyZXR1cm4gZC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpKX1hcnJheUJ1ZmZlclRvQmFzZTY0KGEpe3JldHVybiBuZXcgUHJvbWlzZSgoZCxoKT0+e2QoZ2NlLmwoYSkpfSl9c2V0''@;'; put 'put ''U2l0ZUlkKGEpe2Euc2l0ZV9pZF9tdWx0aXBsZT90aGlzLnNhc1NlcnZpY2Uuc2V0TGljZW5zZVNpdGVJZChhLnNpdGVfaWRfbXVsdGlwbGUpOmEuc2l0ZV9pZCYmdGhpcy5zYXNTZXJ2aWNlLnNldExpY2Vuc2VTaXRlSWQoYS5zaXRlX2lkKX1oYW5kbGVTaXRlSWRNaXNzbWF0Y2goYSxkLGgs''@;'; put 'put ''Zil7bGV0IHY9ITEsTT0hMTtpZigoIWEuc2l0ZV9pZHx8YS5zaXRlX2lkIT09aCkmJih2PSEwKSwoIWEuc2l0ZV9pZF9tdWx0aXBsZXx8IWEuc2l0ZV9pZF9tdWx0aXBsZS5pbmNsdWRlcyhoKSkmJihNPSEwKSx2JiZNKXJldHVybiBjb25zb2xlLmVycm9yKCJUaGUga2V5IHByb3ZpZGVkIGlz''@;'; put 'put ''IGZvciBkaWZmZXJlbnQgb3JnYW5pemF0aW9uLiIpLHZvaWQgc2V0VGltZW91dCgoKT0+e2NvbnN0IEQ9Ii9saWNlbnNpbmcva2V5P2Vycm9yPW1pc3NtYXRjaCZmb3JjZT10cnVlIjt0aGlzLmxpY2VuY2VQcm9ibGVtLm5leHQoRCksdGhpcy5fbGljZW5jZVN0YXRlPXlXLHRoaXMuYXBwbGlj''@;'; put 'put ''YXRpb25BY3RpdmF0aW9uKHRoaXMuZnJlZVRpZXJMaWNlbmNlRGF0YSxkLGgsITApLGZ8fHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoRCl9KX1jYWxjdWxhdGVFeHBpcnkoYSl7bGV0IGQ9T28oYS52YWxpZF91bnRpbCwiWVlZWS1NTS1ERCIpLnN0YXJ0T2YoImRheSIpLGg9T28oKS5zdGFy''@;'; put 'put ''dE9mKCJkYXkiKSxmPWQuZGlmZihoLCJkYXlzIik7cmV0dXJue2V4cGlyeV9kYXRlOmQsZGF5c1RvRXhwaXJ5OmZ9fWhhbmRsZUV4cGlyeShhLGQsaCxmKXtzZXRUaW1lb3V0KCgpPT57Y29uc3Qgdj1gL2xpY2Vuc2luZy9rZXk/Zm9yY2U9dHJ1ZSZlcnJvcj1leHBpcmVkJmRldGFpbHM9JHti''@;'; put 'put ''dG9hKCJFeHBpcnkgZGF0ZTogIithLmZvcm1hdCgiREQvTU0vWVlZWSIpKX1gO3RoaXMubGljZW5jZVByb2JsZW0ubmV4dCh2KSx0aGlzLmFwcGxpY2F0aW9uQWN0aXZhdGlvbih0aGlzLmZyZWVUaWVyTGljZW5jZURhdGEsZCxoLCEwKSxmfHx0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHYp''@;'; put 'put ''fSl9aGFuZGxlVXNlcnNBbGxvd2VkKGEpe2EuZGVtbyYmdm9pZCAwIT09dGhpcy5fbGljZW5jZVN0YXRlLnVzZXJzX2FsbG93ZWQmJihhLnVzZXJzX2FsbG93ZWQ9YS51c2Vyc19hbGxvd2VkPjA/YS51c2Vyc19hbGxvd2VkOnRoaXMuX2xpY2VuY2VTdGF0ZS51c2Vyc19hbGxvd2VkKSx0aGlz''@;'; put 'put ''Ll9saWNlbmNlU3RhdGUudXNlcnNfYWxsb3dlZD1hLnVzZXJzX2FsbG93ZWR9aGFuZGxlVXNlclJlZ2lzdHJhdGlvbihhLGQsaCl7aWYodGhpcy51c2VyQ291bnRMaW1pdGF0aW9uJiYoZC5SRUdJU1RFUkNPVU5UPmEudXNlcnNfYWxsb3dlZD8oY29uc29sZS53YXJuKCJBcHAgaGFzIG1vcmUg''@;'; put 'put ''dXNlcnMgcmVnaXN0ZXJlZCB0aGVuIGxpY2Vuc2VkLiIpLHRoaXMuaXNBcHBPdmVyQ2FwYWNpdHkubmV4dCghMCkpOmQuUkVHSVNURVJDT1VOVD09PWEudXNlcnNfYWxsb3dlZCYmY29uc29sZS53YXJuKCJBcHAgaGFzIGhpdCBsaW1pdCBvZiB1c2VycyByZWdpc3RlcmVkLiIpKSwxIT09ZC5J''@;'; put 'put ''U1JFR0lTVEVSRUQpcmV0dXJuIGQuUkVHSVNURVJDT1VOVDxhLnVzZXJzX2FsbG93ZWR8fCF0aGlzLnVzZXJDb3VudExpbWl0YXRpb24/KGNvbnNvbGUubG9nKCJVc2VyIGNhbiByZWdpc3RlciIpLHRoaXMuY3VycmVudFVzZXJDYW5SZWdpc3Rlci5uZXh0KCEwKSx0aGlzLmlzQXBwQWN0aXZh''@;'; put 'put ''dGVkLm5leHQoITEpLHZvaWQoaHx8dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL2xpY2Vuc2luZy9yZWdpc3RlciIpKSk6KHRoaXMuY3VycmVudFVzZXJDYW5SZWdpc3Rlci5uZXh0KCExKSx0aGlzLmlzQXBwQWN0aXZhdGVkLm5leHQoITEpLHZvaWQoaHx8dGhpcy5yb3V0ZXIubmF2aWdh''@;'; put 'put ''dGVCeVVybCgiL2xpY2Vuc2luZy9saW1pdCIpKSk7dGhpcy5pc0FwcEFjdGl2YXRlZC5uZXh0KCEwKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKSh4cihTZCkseHIoUTgpLHhyKHZjKSx4cihHcykseHIoU3UpLHhyKExzKSl9fXN0YXRpY3t0aGlz''@;'; put 'put ''Llx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCksb0w9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSxEKXt0aGlzLmxpY2VuY2VTZXJ2aWNlPWEsdGhpcy5ldmVudFNlcnZpY2U9ZCx0''@;'; put 'put ''aGlzLnNhc1NlcnZpY2U9aCx0aGlzLmxvZ2dlclNlcnZpY2U9Zix0aGlzLmFwcFNldHRpbmdzU2VydmljZT12LHRoaXMucm91dGVyPU0sdGhpcy5hcHBTdG9yZVNlcnZpY2U9RCx0aGlzLnN5c3NpdGU9bmV3IGVpKG51bGwpLHRoaXMuZW52aXJvbm1lbnRJbmZvPXt9LHRoaXMuc3Vic2NyaWJl''@;'; put 'put ''KCksdGhpcy5yb3V0ZXIuZXZlbnRzLnN1YnNjcmliZShyZT0+e3JlIGluc3RhbmNlb2YgcHAmJiIvZGVwbG95Ij09PXJlLnVybCYmdGhpcy5ldmVudFNlcnZpY2Uuc3RhcnR1cERhdGFMb2FkZWQoKX0pO2NvbnN0IFo9dGhpcy5hcHBTZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3MudmFsdWU7Wi5w''@;'; put 'put ''ZXJzaXN0U2VsZWN0ZWRUaGVtZSYmdGhpcy5ldmVudFNlcnZpY2UudG9nZ2xlRGFya01vZGUoWi5zZWxlY3RlZFRoZW1lIT09Z3kubGlnaHQmJlouc2VsZWN0ZWRUaGVtZT09PWd5LmRhcmspfXNhc1NlcnZpY2VJbml0KCl7dGhpcy5zYXNTZXJ2aWNlLnNhc1NlcnZpY2VJbml0KCl9c3Vic2Ny''@;'; put 'put ''aWJlKCl7dGhpcy5zYXNTZXJ2aWNlLmxvYWRTdGFydHVwU2VydmljZUVtaXR0ZXIuc3Vic2NyaWJlKCgpPT57dGhpcy5zdGFydFVwRGF0YSgpfSksdGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3RTaXRlSWRFbWl0dGVyLnN1YnNjcmliZShhPT57dGhpcy5wYXRjaFN5c3NpdGUoYSl9KX1nZXRFbnZp''@;'; put 'put ''cm9ubWVudEluZm8oKXtyZXR1cm4gdGhpcy5lbnZpcm9ubWVudEluZm99cGF0Y2hTeXNzaXRlKGEpe2xldCBkPXRoaXMuc3lzc2l0ZS5nZXRWYWx1ZSgpO2QmJihkLmluY2x1ZGVzKGEpfHwoZC5wdXNoKGEpLHRoaXMuc3lzc2l0ZS5uZXh0KGQpKSl9c3RhcnRVcERhdGEoKXt2YXIgYT10aGlz''@;'; put 'put ''O3JldHVybiBlZShmdW5jdGlvbiooKXtsZXQgZD0hMTt5aWVsZCBhLnNhc1NlcnZpY2UucmVxdWVzdCgicHVibGljL3N0YXJ0dXBzZXJ2aWNlIixudWxsKS50aGVuKGZ1bmN0aW9uKCl7dmFyIGg9ZWUoZnVuY3Rpb24qKGYpe2Euc3lzc2l0ZS5uZXh0KFtmLmFkYXB0ZXJSZXNwb25zZS5TWVNT''@;'; put 'put ''SVRFXSk7bGV0IHY9W107aWYoKCFmLmFkYXB0ZXJSZXNwb25zZS5nbG9idmFyc3x8Zi5hZGFwdGVyUmVzcG9uc2UuZ2xvYnZhcnMmJiFmLmFkYXB0ZXJSZXNwb25zZS5nbG9idmFyc1swXSkmJnYucHVzaCgiR2xvYnZhcnMiKSxmLmFkYXB0ZXJSZXNwb25zZS5zYXNkYXRhc2V0c3x8di5wdXNo''@;'; put 'put ''KCJTYXNkYXRhc2V0cyIpLGYuYWRhcHRlclJlc3BvbnNlLnNhc2xpYnN8fHYucHVzaCgiU2FzbGlicyIpLGYuYWRhcHRlclJlc3BvbnNlLnhsbWFwc3x8di5wdXNoKCJYTE1hcHMiKSx2Lmxlbmd0aD4wKXJldHVybiBkPSEwLGEuZXZlbnRTZXJ2aWNlLnNob3dJbmZvTW9kYWwoIkVycm9yIixg''@;'; put 'put ''JHt2LmpvaW4oIiwgIil9IGFyZSBub3QgcHJlc2VudCBpbiB0aGUgc3RhcnR1cHNlcnZpY2VgKSx2b2lkIGEubGljZW5jZVNlcnZpY2UuaXNBcHBBY3RpdmF0ZWQubmV4dCghMSk7Y29uc3QgTT1hLmFwcFN0b3JlU2VydmljZS5nZXREY0FkYXB0ZXJTZXR0aW5ncygpO2EuZW52aXJvbm1lbnRJ''@;'; put 'put ''bmZvPXtTWVNTSVRFOmYuYWRhcHRlclJlc3BvbnNlLlNZU1NJVEUsU1lTU0NQTDpmLmFkYXB0ZXJSZXNwb25zZS5TWVNTQ1BMLFNZU1RDUElQSE9TVE5BTUU6Zi5hZGFwdGVyUmVzcG9uc2UuU1lTVENQSVBIT1NUTkFNRSxTWVNWTE9ORzpmLmFkYXB0ZXJSZXNwb25zZS5TWVNWTE9ORyxNRU1T''@;'; put 'put ''SVpFOmYuYWRhcHRlclJlc3BvbnNlLk1FTVNJWkUsU1lTUFJPQ0VTU01PREU6Zi5hZGFwdGVyUmVzcG9uc2UuU1lTUFJPQ0VTU01PREUsU1lTSE9TVE5BTUU6Zi5hZGFwdGVyUmVzcG9uc2UuU1lTSE9TVE5BTUUsU1lTVVNFUklEOmYuYWRhcHRlclJlc3BvbnNlLlNZU1VTRVJJRCxTWVNIT1NU''@;'; put 'put ''SU5GT0xPTkc6Zi5hZGFwdGVyUmVzcG9uc2UuU1lTSE9TVElORk9MT05HLFNZU0VOQ09ESU5HOmYuYWRhcHRlclJlc3BvbnNlLlNZU0VOQ09ESU5HLEFVVE9FWEVDOmYuYWRhcHRlclJlc3BvbnNlLkFVVE9FWEVDLElTQURNSU46Zi5hZGFwdGVyUmVzcG9uc2UuZ2xvYnZhcnNbMF0uSVNBRE1J''@;'; put 'put ''TixEQ19BRE1JTl9HUk9VUDpmLmFkYXB0ZXJSZXNwb25zZS5nbG9idmFyc1swXS5EQ19BRE1JTl9HUk9VUCxBUFBfTE9DOk0/LmFwcExvY307bGV0IHJlLGNlLEQ9Zi5hZGFwdGVyUmVzcG9uc2Uuc2FzZGF0YXNldHMsWj17fTtmb3IobGV0IHFlIG9mIEQpWltxZS5MSUJSRUZdfHwoWltxZS5M''@;'; put 'put ''SUJSRUZdPVtdKSxaW3FlLkxJQlJFRl0ucHVzaChxZS5EU04pO2xldCBiZT1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KFopKSxFZT1bXTtmb3IobGV0IHFlIG9mIE9iamVjdC5rZXlzKGJlKSlFZS5wdXNoKHtMSUJSQVJZUkVGOnFlLHRhYmxlczpiZVtxZV19KTtsZXQgQmU9RWU7cmU9Wixj''@;'; put 'put ''ZT1PYmplY3Qua2V5cyhaKSx2b2lkIDAhPT1yZSYmKEtuLmVkaXRvci5saWJzQW5kVGFibGVzPXJlKSxLbi54bG1hcHM9Zi5hZGFwdGVyUmVzcG9uc2UueGxtYXBzLm1hcChxZT0+KHtpZDpxZVswXSxkZXNjcmlwdGlvbjpxZVsxXSx0YXJnZXREUzpxZVsyXX0pKSxLbi5lZGl0b3IudHJlZU5v''@;'; put 'put ''ZGVMaWJyYXJpZXM9QmUsS24uZWRpdG9yLmxpYnJhcmllcz1jZSxLbi5lZGl0b3Iuc3RhcnR1cFNldD0hMCxLbi5kY0xpYj1mLmFkYXB0ZXJSZXNwb25zZS5nbG9idmFyc1swXS5EQ0xJQix5aWVsZCBhLmxpY2VuY2VTZXJ2aWNlLmFjdGl2YXRpb24oZi5hZGFwdGVyUmVzcG9uc2UpfSk7cmV0''@;'; put 'put ''dXJuIGZ1bmN0aW9uKGYpe3JldHVybiBoLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkpLmNhdGNoKGg9PntkPSEwLGEuZXZlbnRTZXJ2aWNlLnNob3dJbmZvTW9kYWwoIkVycm9yIiwiVGhlcmUgaXMgYW4gaXNzdWUgd2l0aCBzdGFydHVwc2VydmljZSByZXNwb25zZSIpLGEubGljZW5jZVNl''@;'; put 'put ''cnZpY2UuaXNBcHBBY3RpdmF0ZWQubmV4dCghMSl9KSxhLmxvZ2dlclNlcnZpY2UubG9nKCJBY3RpdmF0ZWQ6IixhLmxpY2VuY2VTZXJ2aWNlLmlzQXBwQWN0aXZhdGVkLnZhbHVlKSxkfHwoYS5ldmVudFNlcnZpY2Uuc3RhcnR1cERhdGFMb2FkZWQoKSxhLmxpY2VuY2VTZXJ2aWNlLmlzQXBw''@;'; put 'put ''QWN0aXZhdGVkLnZhbHVlP2Eucm91dGVyLnVybC5pbmNsdWRlcygibGljZW5zaW5nIikmJmEucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9ob21lIik6IWEucm91dGVyLnVybC5pbmNsdWRlcygiZGVwbG95IikmJiFhLnJvdXRlci51cmwuaW5jbHVkZXMoImxpY2Vuc2luZyIpJiZhLnJvdXRlci5u''@;'; put 'put ''YXZpZ2F0ZUJ5VXJsKCIvbGljZW5zaW5nL2tleT9lcnJvcj1taXNzaW5nJmZvcmNlPXRydWUiKSl9KSgpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHhyKHUxKSx4cih2YykseHIoR3MpLHhyKFNkKSx4cigkUikseHIoTHMpLHhyKFE4KSl9fXN0''@;'; put 'put ''YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pfX1yZXR1cm4gY30pKCksUnVlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLl9yZW5kZXJlcj1hLHRoaXMuX2VsZW1lbnRSZWY9ZCx0aGlzLm9uQ2hhbmdlPWg9Pnt9LHRoaXMu''@;'; put 'put ''b25Ub3VjaGVkPSgpPT57fX1zZXRQcm9wZXJ0eShhLGQpe3RoaXMuX3JlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxhLGQpfXJlZ2lzdGVyT25Ub3VjaGVkKGEpe3RoaXMub25Ub3VjaGVkPWF9cmVnaXN0ZXJPbkNoYW5nZShhKXt0aGlzLm9uQ2hh''@;'; put 'put ''bmdlPWF9c2V0RGlzYWJsZWRTdGF0ZShhKXt0aGlzLnNldFByb3BlcnR5KCJkaXNhYmxlZCIsYSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoRW8pLEdlKEppKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlwZTpjfSl9fXJldHVy''@;'; put 'put ''biBjfSkoKSxhNz0oKCk9PntjbGFzcyBjIGV4dGVuZHMgUnVle3N0YXRpY3t0aGlzLlx1MDI3NWZhYz0oKCk9PntsZXQgYTtyZXR1cm4gZnVuY3Rpb24oaCl7cmV0dXJuKGF8fChhPVdzKGMpKSkoaHx8Yyl9fSkoKX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxmZWF0dXJlczpb''@;'; put 'put ''d2FdfSl9fXJldHVybiBjfSkoKTtjb25zdCBicD1uZXcgU3QoIiIpLFZMZT17cHJvdmlkZTpicCx1c2VFeGlzdGluZzpDcygoKT0+TWQpLG11bHRpOiEwfTtsZXQgTWQ9KCgpPT57Y2xhc3MgYyBleHRlbmRzIGE3e3dyaXRlVmFsdWUoYSl7dGhpcy5zZXRQcm9wZXJ0eSgiY2hlY2tlZCIsYSl9''@;'; put 'put ''c3RhdGlje3RoaXMuXHUwMjc1ZmFjPSgoKT0+e2xldCBhO3JldHVybiBmdW5jdGlvbihoKXtyZXR1cm4oYXx8KGE9V3MoYykpKShofHxjKX19KSgpfXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyJpbnB1dCIsInR5cGUiLCJjaGVja2JveCIsImZvcm1Db250''@;'; put 'put ''cm9sTmFtZSIsIiJdLFsiaW5wdXQiLCJ0eXBlIiwiY2hlY2tib3giLCJmb3JtQ29udHJvbCIsIiJdLFsiaW5wdXQiLCJ0eXBlIiwiY2hlY2tib3giLCJuZ01vZGVsIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihkLGgpezEmZCYmRnQoImNoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIGgu''@;'; put 'put ''b25DaGFuZ2Uodi50YXJnZXQuY2hlY2tlZCl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gaC5vblRvdWNoZWQoKX0pfSxmZWF0dXJlczpbZGEoW1ZMZV0pLHdhXX0pfX1yZXR1cm4gY30pKCk7Y29uc3QgQkxlPXtwcm92aWRlOmJwLHVzZUV4aXN0aW5nOkNzKCgpPT5xbCksbXVsdGk6ITB9''@;'; put 'put ''LHpMZT1uZXcgU3QoIiIpO2xldCBxbD0oKCk9PntjbGFzcyBjIGV4dGVuZHMgUnVle2NvbnN0cnVjdG9yKGEsZCxoKXtzdXBlcihhLGQpLHRoaXMuX2NvbXBvc2l0aW9uTW9kZT1oLHRoaXMuX2NvbXBvc2luZz0hMSxudWxsPT10aGlzLl9jb21wb3NpdGlvbk1vZGUmJih0aGlzLl9jb21wb3Np''@;'; put 'put ''dGlvbk1vZGU9IWZ1bmN0aW9uIGpMZSgpe2NvbnN0IGM9dG0oKT90bSgpLmdldFVzZXJBZ2VudCgpOiIiO3JldHVybi9hbmRyb2lkIChcZCspLy50ZXN0KGMudG9Mb3dlckNhc2UoKSl9KCkpfXdyaXRlVmFsdWUoYSl7dGhpcy5zZXRQcm9wZXJ0eSgidmFsdWUiLGE/PyIiKX1faGFuZGxlSW5w''@;'; put 'put ''dXQoYSl7KCF0aGlzLl9jb21wb3NpdGlvbk1vZGV8fHRoaXMuX2NvbXBvc2l0aW9uTW9kZSYmIXRoaXMuX2NvbXBvc2luZykmJnRoaXMub25DaGFuZ2UoYSl9X2NvbXBvc2l0aW9uU3RhcnQoKXt0aGlzLl9jb21wb3Npbmc9ITB9X2NvbXBvc2l0aW9uRW5kKGEpe3RoaXMuX2NvbXBvc2luZz0h''@;'; put 'put ''MSx0aGlzLl9jb21wb3NpdGlvbk1vZGUmJnRoaXMub25DaGFuZ2UoYSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoRW8pLEdlKEppKSxHZSh6TGUsOCkpfX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1si''@;'; put 'put ''aW5wdXQiLCJmb3JtQ29udHJvbE5hbWUiLCIiLDMsInR5cGUiLCJjaGVja2JveCJdLFsidGV4dGFyZWEiLCJmb3JtQ29udHJvbE5hbWUiLCIiXSxbImlucHV0IiwiZm9ybUNvbnRyb2wiLCIiLDMsInR5cGUiLCJjaGVja2JveCJdLFsidGV4dGFyZWEiLCJmb3JtQ29udHJvbCIsIiJdLFsiaW5w''@;'; put 'put ''dXQiLCJuZ01vZGVsIiwiIiwzLCJ0eXBlIiwiY2hlY2tib3giXSxbInRleHRhcmVhIiwibmdNb2RlbCIsIiJdLFsiIiwibmdEZWZhdWx0Q29udHJvbCIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZCxoKXsxJmQmJkZ0KCJpbnB1dCIsZnVuY3Rpb24odil7cmV0dXJuIGguX2hhbmRsZUlu''@;'; put 'put ''cHV0KHYudGFyZ2V0LnZhbHVlKX0pKCJibHVyIixmdW5jdGlvbigpe3JldHVybiBoLm9uVG91Y2hlZCgpfSkoImNvbXBvc2l0aW9uc3RhcnQiLGZ1bmN0aW9uKCl7cmV0dXJuIGguX2NvbXBvc2l0aW9uU3RhcnQoKX0pKCJjb21wb3NpdGlvbmVuZCIsZnVuY3Rpb24odil7cmV0dXJuIGguX2Nv''@;'; put 'put ''bXBvc2l0aW9uRW5kKHYudGFyZ2V0LnZhbHVlKX0pfSxmZWF0dXJlczpbZGEoW0JMZV0pLHdhXX0pfX1yZXR1cm4gY30pKCk7Y29uc3QgaDA9bmV3IFN0KCIiKSxobT1uZXcgU3QoIiIpO2Z1bmN0aW9uIEZ1ZShjKXtyZXR1cm4gZnVuY3Rpb24gZG0oYyl7cmV0dXJuIG51bGw9PWN8fCgic3Ry''@;'; put 'put ''aW5nIj09dHlwZW9mIGN8fEFycmF5LmlzQXJyYXkoYykpJiYwPT09Yy5sZW5ndGh9KGMudmFsdWUpP3tyZXF1aXJlZDohMH06bnVsbH1mdW5jdGlvbiBIdWUoYyl7cmV0dXJuITA9PT1jLnZhbHVlP251bGw6e3JlcXVpcmVkOiEwfX1mdW5jdGlvbiBzTChjKXtyZXR1cm4gbnVsbH1mdW5jdGlv''@;'; put 'put ''biB6dWUoYyl7cmV0dXJuIG51bGwhPWN9ZnVuY3Rpb24gVXVlKGMpe3JldHVybiBfTShjKT9ZdShjKTpjfWZ1bmN0aW9uIFp1ZShjKXtsZXQgbD17fTtyZXR1cm4gYy5mb3JFYWNoKGE9PntsPW51bGwhPWE/ey4uLmwsLi4uYX06bH0pLDA9PT1PYmplY3Qua2V5cyhsKS5sZW5ndGg/bnVsbDps''@;'; put 'put ''fWZ1bmN0aW9uIFd1ZShjLGwpe3JldHVybiBsLm1hcChhPT5hKGMpKX1mdW5jdGlvbiBZdWUoYyl7cmV0dXJuIGMubWFwKGw9PmZ1bmN0aW9uIFpMZShjKXtyZXR1cm4hYy52YWxpZGF0ZX0obCk/bDphPT5sLnZhbGlkYXRlKGEpKX1mdW5jdGlvbiBVVyhjKXtyZXR1cm4gbnVsbCE9Yz9mdW5j''@;'; put 'put ''dGlvbiBHdWUoYyl7aWYoIWMpcmV0dXJuIG51bGw7Y29uc3QgbD1jLmZpbHRlcih6dWUpO3JldHVybiAwPT1sLmxlbmd0aD9udWxsOmZ1bmN0aW9uKGEpe3JldHVybiBadWUoV3VlKGEsbCkpfX0oWXVlKGMpKTpudWxsfWZ1bmN0aW9uIFpXKGMpe3JldHVybiBudWxsIT1jP2Z1bmN0aW9uICR1''@;'; put 'put ''ZShjKXtpZighYylyZXR1cm4gbnVsbDtjb25zdCBsPWMuZmlsdGVyKHp1ZSk7cmV0dXJuIDA9PWwubGVuZ3RoP251bGw6ZnVuY3Rpb24oYSl7cmV0dXJuIGZ1bmN0aW9uIE5MZSguLi5jKXtjb25zdCBsPXVsZShjKSx7YXJnczphLGtleXM6ZH09ZGxlKGMpLGg9bmV3IFh0KGY9Pntjb25zdHts''@;'; put 'put ''ZW5ndGg6dn09YTtpZighdilyZXR1cm4gdm9pZCBmLmNvbXBsZXRlKCk7Y29uc3QgTT1uZXcgQXJyYXkodik7bGV0IEQ9dixaPXY7Zm9yKGxldCByZT0wO3JlPHY7cmUrKyl7bGV0IGNlPSExO2wxKGFbcmVdKS5zdWJzY3JpYmUoTmkoZixiZT0+e2NlfHwoY2U9ITAsWi0tKSxNW3JlXT1iZX0s''@;'; put 'put ''KCk9PkQtLSx2b2lkIDAsKCk9PnsoIUR8fCFjZSkmJihafHxmLm5leHQoZD9obGUoZCxNKTpNKSxmLmNvbXBsZXRlKCkpfSkpfX0pO3JldHVybiBsP2gucGlwZSh6WihsKSk6aH0oV3VlKGEsbCkubWFwKFV1ZSkpLnBpcGUoTHIoWnVlKSl9fShZdWUoYykpOm51bGx9ZnVuY3Rpb24gS3VlKGMs''@;'; put 'put ''bCl7cmV0dXJuIG51bGw9PT1jP1tsXTpBcnJheS5pc0FycmF5KGMpP1suLi5jLGxdOltjLGxdfWZ1bmN0aW9uIFdXKGMpe3JldHVybiBjP0FycmF5LmlzQXJyYXkoYyk/YzpbY106W119ZnVuY3Rpb24gbEwoYyxsKXtyZXR1cm4gQXJyYXkuaXNBcnJheShjKT9jLmluY2x1ZGVzKGwpOmM9PT1s''@;'; put 'put ''fWZ1bmN0aW9uIEp1ZShjLGwpe2NvbnN0IGE9V1cobCk7cmV0dXJuIFdXKGMpLmZvckVhY2goaD0+e2xMKGEsaCl8fGEucHVzaChoKX0pLGF9ZnVuY3Rpb24gUXVlKGMsbCl7cmV0dXJuIFdXKGwpLmZpbHRlcihhPT4hbEwoYyxhKSl9Y2xhc3MgZTBle2NvbnN0cnVjdG9yKCl7dGhpcy5fcmF3''@;'; put 'put ''VmFsaWRhdG9ycz1bXSx0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnM9W10sdGhpcy5fb25EZXN0cm95Q2FsbGJhY2tzPVtdfWdldCB2YWx1ZSgpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnZhbHVlOm51bGx9Z2V0IHZhbGlkKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNv''@;'; put 'put ''bnRyb2wudmFsaWQ6bnVsbH1nZXQgaW52YWxpZCgpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLmludmFsaWQ6bnVsbH1nZXQgcGVuZGluZygpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnBlbmRpbmc6bnVsbH1nZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5j''@;'; put 'put ''b250cm9sP3RoaXMuY29udHJvbC5kaXNhYmxlZDpudWxsfWdldCBlbmFibGVkKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wuZW5hYmxlZDpudWxsfWdldCBlcnJvcnMoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5lcnJvcnM6bnVsbH1nZXQgcHJpc3RpbmUo''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5wcmlzdGluZTpudWxsfWdldCBkaXJ0eSgpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLmRpcnR5Om51bGx9Z2V0IHRvdWNoZWQoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC50b3VjaGVkOm51bGx9''@;'; put 'put ''Z2V0IHN0YXR1cygpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnN0YXR1czpudWxsfWdldCB1bnRvdWNoZWQoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC51bnRvdWNoZWQ6bnVsbH1nZXQgc3RhdHVzQ2hhbmdlcygpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhp''@;'; put 'put ''cy5jb250cm9sLnN0YXR1c0NoYW5nZXM6bnVsbH1nZXQgdmFsdWVDaGFuZ2VzKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wudmFsdWVDaGFuZ2VzOm51bGx9Z2V0IHBhdGgoKXtyZXR1cm4gbnVsbH1fc2V0VmFsaWRhdG9ycyhsKXt0aGlzLl9yYXdWYWxpZGF0b3JzPWx8fFtd''@;'; put 'put ''LHRoaXMuX2NvbXBvc2VkVmFsaWRhdG9yRm49VVcodGhpcy5fcmF3VmFsaWRhdG9ycyl9X3NldEFzeW5jVmFsaWRhdG9ycyhsKXt0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnM9bHx8W10sdGhpcy5fY29tcG9zZWRBc3luY1ZhbGlkYXRvckZuPVpXKHRoaXMuX3Jhd0FzeW5jVmFsaWRhdG9ycyl9''@;'; put 'put ''Z2V0IHZhbGlkYXRvcigpe3JldHVybiB0aGlzLl9jb21wb3NlZFZhbGlkYXRvckZufHxudWxsfWdldCBhc3luY1ZhbGlkYXRvcigpe3JldHVybiB0aGlzLl9jb21wb3NlZEFzeW5jVmFsaWRhdG9yRm58fG51bGx9X3JlZ2lzdGVyT25EZXN0cm95KGwpe3RoaXMuX29uRGVzdHJveUNhbGxiYWNr''@;'; put 'put ''cy5wdXNoKGwpfV9pbnZva2VPbkRlc3Ryb3lDYWxsYmFja3MoKXt0aGlzLl9vbkRlc3Ryb3lDYWxsYmFja3MuZm9yRWFjaChsPT5sKCkpLHRoaXMuX29uRGVzdHJveUNhbGxiYWNrcz1bXX1yZXNldChsPXZvaWQgMCl7dGhpcy5jb250cm9sJiZ0aGlzLmNvbnRyb2wucmVzZXQobCl9aGFzRXJy''@;'; put 'put ''b3IobCxhKXtyZXR1cm4hIXRoaXMuY29udHJvbCYmdGhpcy5jb250cm9sLmhhc0Vycm9yKGwsYSl9Z2V0RXJyb3IobCxhKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5nZXRFcnJvcihsLGEpOm51bGx9fWNsYXNzIEIxIGV4dGVuZHMgZTBle2dldCBmb3JtRGlyZWN0aXZlKCl7''@;'; put 'put ''cmV0dXJuIG51bGx9Z2V0IHBhdGgoKXtyZXR1cm4gbnVsbH19Y2xhc3MgZDEgZXh0ZW5kcyBlMGV7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3BhcmVudD1udWxsLHRoaXMubmFtZT1udWxsLHRoaXMudmFsdWVBY2Nlc3Nvcj1udWxsfX1jbGFzcyB0MGV7Y29uc3Ry''@;'; put 'put ''dWN0b3IobCl7dGhpcy5fY2Q9bH1nZXQgaXNUb3VjaGVkKCl7cmV0dXJuISF0aGlzLl9jZD8uY29udHJvbD8udG91Y2hlZH1nZXQgaXNVbnRvdWNoZWQoKXtyZXR1cm4hIXRoaXMuX2NkPy5jb250cm9sPy51bnRvdWNoZWR9Z2V0IGlzUHJpc3RpbmUoKXtyZXR1cm4hIXRoaXMuX2NkPy5jb250''@;'; put 'put ''cm9sPy5wcmlzdGluZX1nZXQgaXNEaXJ0eSgpe3JldHVybiEhdGhpcy5fY2Q/LmNvbnRyb2w/LmRpcnR5fWdldCBpc1ZhbGlkKCl7cmV0dXJuISF0aGlzLl9jZD8uY29udHJvbD8udmFsaWR9Z2V0IGlzSW52YWxpZCgpe3JldHVybiEhdGhpcy5fY2Q/LmNvbnRyb2w/LmludmFsaWR9Z2V0IGlz''@;'; put 'put ''UGVuZGluZygpe3JldHVybiEhdGhpcy5fY2Q/LmNvbnRyb2w/LnBlbmRpbmd9Z2V0IGlzU3VibWl0dGVkKCl7cmV0dXJuISF0aGlzLl9jZD8uc3VibWl0dGVkfX1sZXQgbmw9KCgpPT57Y2xhc3MgYyBleHRlbmRzIHQwZXtjb25zdHJ1Y3RvcihhKXtzdXBlcihhKX1zdGF0aWN7dGhpcy5cdTAy''@;'; put 'put ''NzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZShkMSwyKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJmb3JtQ29udHJvbE5hbWUiLCIiXSxbIiIsIm5nTW9kZWwiLCIiXSxbIiIsImZvcm1Db250cm9sIiwiIl1dLGhvc3RWYXJz''@;'; put 'put ''OjE0LGhvc3RCaW5kaW5nczpmdW5jdGlvbihkLGgpezImZCYmVHIoIm5nLXVudG91Y2hlZCIsaC5pc1VudG91Y2hlZCkoIm5nLXRvdWNoZWQiLGguaXNUb3VjaGVkKSgibmctcHJpc3RpbmUiLGguaXNQcmlzdGluZSkoIm5nLWRpcnR5IixoLmlzRGlydHkpKCJuZy12YWxpZCIsaC5pc1ZhbGlk''@;'; put 'put ''KSgibmctaW52YWxpZCIsaC5pc0ludmFsaWQpKCJuZy1wZW5kaW5nIixoLmlzUGVuZGluZyl9LGZlYXR1cmVzOlt3YV19KX19cmV0dXJuIGN9KSgpLG83PSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyB0MGV7Y29uc3RydWN0b3IoYSl7c3VwZXIoYSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0''@;'; put 'put ''aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoQjEsMTApKX19c3RhdGlje3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImZvcm1Hcm91cE5hbWUiLCIiXSxbIiIsImZvcm1BcnJheU5hbWUiLCIiXSxbIiIsIm5nTW9kZWxHcm91cCIsIiJdLFsiIiwiZm9ybUdyb3Vw''@;'; put 'put ''IiwiIl0sWyJmb3JtIiwzLCJuZ05vRm9ybSIsIiJdLFsiIiwibmdGb3JtIiwiIl1dLGhvc3RWYXJzOjE2LGhvc3RCaW5kaW5nczpmdW5jdGlvbihkLGgpezImZCYmVHIoIm5nLXVudG91Y2hlZCIsaC5pc1VudG91Y2hlZCkoIm5nLXRvdWNoZWQiLGguaXNUb3VjaGVkKSgibmctcHJpc3RpbmUi''@;'; put 'put ''LGguaXNQcmlzdGluZSkoIm5nLWRpcnR5IixoLmlzRGlydHkpKCJuZy12YWxpZCIsaC5pc1ZhbGlkKSgibmctaW52YWxpZCIsaC5pc0ludmFsaWQpKCJuZy1wZW5kaW5nIixoLmlzUGVuZGluZykoIm5nLXN1Ym1pdHRlZCIsaC5pc1N1Ym1pdHRlZCl9LGZlYXR1cmVzOlt3YV19KX19cmV0dXJu''@;'; put 'put ''IGN9KSgpO2NvbnN0IGR4PSJWQUxJRCIsdUw9IklOVkFMSUQiLHh5PSJQRU5ESU5HIixoeD0iRElTQUJMRUQiO2Z1bmN0aW9uICRXKGMpe3JldHVybihkTChjKT9jLnZhbGlkYXRvcnM6Yyl8fG51bGx9ZnVuY3Rpb24gS1coYyxsKXtyZXR1cm4oZEwobCk/bC5hc3luY1ZhbGlkYXRvcnM6Yyl8''@;'; put 'put ''fG51bGx9ZnVuY3Rpb24gZEwoYyl7cmV0dXJuIG51bGwhPWMmJiFBcnJheS5pc0FycmF5KGMpJiYib2JqZWN0Ij09dHlwZW9mIGN9Y2xhc3MgcVd7Y29uc3RydWN0b3IobCxhKXt0aGlzLl9wZW5kaW5nRGlydHk9ITEsdGhpcy5faGFzT3duUGVuZGluZ0FzeW5jVmFsaWRhdG9yPSExLHRoaXMu''@;'; put 'put ''X3BlbmRpbmdUb3VjaGVkPSExLHRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZT0oKT0+e30sdGhpcy5fcGFyZW50PW51bGwsdGhpcy5wcmlzdGluZT0hMCx0aGlzLnRvdWNoZWQ9ITEsdGhpcy5fb25EaXNhYmxlZENoYW5nZT1bXSx0aGlzLl9hc3NpZ25WYWxpZGF0b3JzKGwpLHRoaXMuX2Fzc2ln''@;'; put 'put ''bkFzeW5jVmFsaWRhdG9ycyhhKX1nZXQgdmFsaWRhdG9yKCl7cmV0dXJuIHRoaXMuX2NvbXBvc2VkVmFsaWRhdG9yRm59c2V0IHZhbGlkYXRvcihsKXt0aGlzLl9yYXdWYWxpZGF0b3JzPXRoaXMuX2NvbXBvc2VkVmFsaWRhdG9yRm49bH1nZXQgYXN5bmNWYWxpZGF0b3IoKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5fY29tcG9zZWRBc3luY1ZhbGlkYXRvckZufXNldCBhc3luY1ZhbGlkYXRvcihsKXt0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnM9dGhpcy5fY29tcG9zZWRBc3luY1ZhbGlkYXRvckZuPWx9Z2V0IHBhcmVudCgpe3JldHVybiB0aGlzLl9wYXJlbnR9Z2V0IHZhbGlkKCl7cmV0dXJuIHRoaXMu''@;'; put 'put ''c3RhdHVzPT09ZHh9Z2V0IGludmFsaWQoKXtyZXR1cm4gdGhpcy5zdGF0dXM9PT11TH1nZXQgcGVuZGluZygpe3JldHVybiB0aGlzLnN0YXR1cz09eHl9Z2V0IGRpc2FibGVkKCl7cmV0dXJuIHRoaXMuc3RhdHVzPT09aHh9Z2V0IGVuYWJsZWQoKXtyZXR1cm4gdGhpcy5zdGF0dXMhPT1oeH1n''@;'; put 'put ''ZXQgZGlydHkoKXtyZXR1cm4hdGhpcy5wcmlzdGluZX1nZXQgdW50b3VjaGVkKCl7cmV0dXJuIXRoaXMudG91Y2hlZH1nZXQgdXBkYXRlT24oKXtyZXR1cm4gdGhpcy5fdXBkYXRlT24/dGhpcy5fdXBkYXRlT246dGhpcy5wYXJlbnQ/dGhpcy5wYXJlbnQudXBkYXRlT246ImNoYW5nZSJ9c2V0''@;'; put 'put ''VmFsaWRhdG9ycyhsKXt0aGlzLl9hc3NpZ25WYWxpZGF0b3JzKGwpfXNldEFzeW5jVmFsaWRhdG9ycyhsKXt0aGlzLl9hc3NpZ25Bc3luY1ZhbGlkYXRvcnMobCl9YWRkVmFsaWRhdG9ycyhsKXt0aGlzLnNldFZhbGlkYXRvcnMoSnVlKGwsdGhpcy5fcmF3VmFsaWRhdG9ycykpfWFkZEFzeW5j''@;'; put 'put ''VmFsaWRhdG9ycyhsKXt0aGlzLnNldEFzeW5jVmFsaWRhdG9ycyhKdWUobCx0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnMpKX1yZW1vdmVWYWxpZGF0b3JzKGwpe3RoaXMuc2V0VmFsaWRhdG9ycyhRdWUobCx0aGlzLl9yYXdWYWxpZGF0b3JzKSl9cmVtb3ZlQXN5bmNWYWxpZGF0b3JzKGwpe3Ro''@;'; put 'put ''aXMuc2V0QXN5bmNWYWxpZGF0b3JzKFF1ZShsLHRoaXMuX3Jhd0FzeW5jVmFsaWRhdG9ycykpfWhhc1ZhbGlkYXRvcihsKXtyZXR1cm4gbEwodGhpcy5fcmF3VmFsaWRhdG9ycyxsKX1oYXNBc3luY1ZhbGlkYXRvcihsKXtyZXR1cm4gbEwodGhpcy5fcmF3QXN5bmNWYWxpZGF0b3JzLGwpfWNs''@;'; put 'put ''ZWFyVmFsaWRhdG9ycygpe3RoaXMudmFsaWRhdG9yPW51bGx9Y2xlYXJBc3luY1ZhbGlkYXRvcnMoKXt0aGlzLmFzeW5jVmFsaWRhdG9yPW51bGx9bWFya0FzVG91Y2hlZChsPXt9KXt0aGlzLnRvdWNoZWQ9ITAsdGhpcy5fcGFyZW50JiYhbC5vbmx5U2VsZiYmdGhpcy5fcGFyZW50Lm1hcmtB''@;'; put 'put ''c1RvdWNoZWQobCl9bWFya0FsbEFzVG91Y2hlZCgpe3RoaXMubWFya0FzVG91Y2hlZCh7b25seVNlbGY6ITB9KSx0aGlzLl9mb3JFYWNoQ2hpbGQobD0+bC5tYXJrQWxsQXNUb3VjaGVkKCkpfW1hcmtBc1VudG91Y2hlZChsPXt9KXt0aGlzLnRvdWNoZWQ9ITEsdGhpcy5fcGVuZGluZ1RvdWNo''@;'; put 'put ''ZWQ9ITEsdGhpcy5fZm9yRWFjaENoaWxkKGE9PnthLm1hcmtBc1VudG91Y2hlZCh7b25seVNlbGY6ITB9KX0pLHRoaXMuX3BhcmVudCYmIWwub25seVNlbGYmJnRoaXMuX3BhcmVudC5fdXBkYXRlVG91Y2hlZChsKX1tYXJrQXNEaXJ0eShsPXt9KXt0aGlzLnByaXN0aW5lPSExLHRoaXMuX3Bh''@;'; put 'put ''cmVudCYmIWwub25seVNlbGYmJnRoaXMuX3BhcmVudC5tYXJrQXNEaXJ0eShsKX1tYXJrQXNQcmlzdGluZShsPXt9KXt0aGlzLnByaXN0aW5lPSEwLHRoaXMuX3BlbmRpbmdEaXJ0eT0hMSx0aGlzLl9mb3JFYWNoQ2hpbGQoYT0+e2EubWFya0FzUHJpc3RpbmUoe29ubHlTZWxmOiEwfSl9KSx0''@;'; put 'put ''aGlzLl9wYXJlbnQmJiFsLm9ubHlTZWxmJiZ0aGlzLl9wYXJlbnQuX3VwZGF0ZVByaXN0aW5lKGwpfW1hcmtBc1BlbmRpbmcobD17fSl7dGhpcy5zdGF0dXM9eHksITEhPT1sLmVtaXRFdmVudCYmdGhpcy5zdGF0dXNDaGFuZ2VzLmVtaXQodGhpcy5zdGF0dXMpLHRoaXMuX3BhcmVudCYmIWwu''@;'; put 'put ''b25seVNlbGYmJnRoaXMuX3BhcmVudC5tYXJrQXNQZW5kaW5nKGwpfWRpc2FibGUobD17fSl7Y29uc3QgYT10aGlzLl9wYXJlbnRNYXJrZWREaXJ0eShsLm9ubHlTZWxmKTt0aGlzLnN0YXR1cz1oeCx0aGlzLmVycm9ycz1udWxsLHRoaXMuX2ZvckVhY2hDaGlsZChkPT57ZC5kaXNhYmxlKHsu''@;'; put 'put ''Li5sLG9ubHlTZWxmOiEwfSl9KSx0aGlzLl91cGRhdGVWYWx1ZSgpLCExIT09bC5lbWl0RXZlbnQmJih0aGlzLnZhbHVlQ2hhbmdlcy5lbWl0KHRoaXMudmFsdWUpLHRoaXMuc3RhdHVzQ2hhbmdlcy5lbWl0KHRoaXMuc3RhdHVzKSksdGhpcy5fdXBkYXRlQW5jZXN0b3JzKHsuLi5sLHNraXBQ''@;'; put 'put ''cmlzdGluZUNoZWNrOmF9KSx0aGlzLl9vbkRpc2FibGVkQ2hhbmdlLmZvckVhY2goZD0+ZCghMCkpfWVuYWJsZShsPXt9KXtjb25zdCBhPXRoaXMuX3BhcmVudE1hcmtlZERpcnR5KGwub25seVNlbGYpO3RoaXMuc3RhdHVzPWR4LHRoaXMuX2ZvckVhY2hDaGlsZChkPT57ZC5lbmFibGUoey4u''@;'; put 'put ''Lmwsb25seVNlbGY6ITB9KX0pLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7b25seVNlbGY6ITAsZW1pdEV2ZW50OmwuZW1pdEV2ZW50fSksdGhpcy5fdXBkYXRlQW5jZXN0b3JzKHsuLi5sLHNraXBQcmlzdGluZUNoZWNrOmF9KSx0aGlzLl9vbkRpc2FibGVkQ2hhbmdlLmZvckVhY2go''@;'; put 'put ''ZD0+ZCghMSkpfV91cGRhdGVBbmNlc3RvcnMobCl7dGhpcy5fcGFyZW50JiYhbC5vbmx5U2VsZiYmKHRoaXMuX3BhcmVudC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KGwpLGwuc2tpcFByaXN0aW5lQ2hlY2t8fHRoaXMuX3BhcmVudC5fdXBkYXRlUHJpc3RpbmUoKSx0aGlzLl9wYXJlbnQuX3Vw''@;'; put 'put ''ZGF0ZVRvdWNoZWQoKSl9c2V0UGFyZW50KGwpe3RoaXMuX3BhcmVudD1sfWdldFJhd1ZhbHVlKCl7cmV0dXJuIHRoaXMudmFsdWV9dXBkYXRlVmFsdWVBbmRWYWxpZGl0eShsPXt9KXt0aGlzLl9zZXRJbml0aWFsU3RhdHVzKCksdGhpcy5fdXBkYXRlVmFsdWUoKSx0aGlzLmVuYWJsZWQmJih0''@;'; put 'put ''aGlzLl9jYW5jZWxFeGlzdGluZ1N1YnNjcmlwdGlvbigpLHRoaXMuZXJyb3JzPXRoaXMuX3J1blZhbGlkYXRvcigpLHRoaXMuc3RhdHVzPXRoaXMuX2NhbGN1bGF0ZVN0YXR1cygpLCh0aGlzLnN0YXR1cz09PWR4fHx0aGlzLnN0YXR1cz09PXh5KSYmdGhpcy5fcnVuQXN5bmNWYWxpZGF0b3Io''@;'; put 'put ''bC5lbWl0RXZlbnQpKSwhMSE9PWwuZW1pdEV2ZW50JiYodGhpcy52YWx1ZUNoYW5nZXMuZW1pdCh0aGlzLnZhbHVlKSx0aGlzLnN0YXR1c0NoYW5nZXMuZW1pdCh0aGlzLnN0YXR1cykpLHRoaXMuX3BhcmVudCYmIWwub25seVNlbGYmJnRoaXMuX3BhcmVudC51cGRhdGVWYWx1ZUFuZFZhbGlk''@;'; put 'put ''aXR5KGwpfV91cGRhdGVUcmVlVmFsaWRpdHkobD17ZW1pdEV2ZW50OiEwfSl7dGhpcy5fZm9yRWFjaENoaWxkKGE9PmEuX3VwZGF0ZVRyZWVWYWxpZGl0eShsKSksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6bC5lbWl0RXZlbnR9KX1fc2V0SW5p''@;'; put 'put ''dGlhbFN0YXR1cygpe3RoaXMuc3RhdHVzPXRoaXMuX2FsbENvbnRyb2xzRGlzYWJsZWQoKT9oeDpkeH1fcnVuVmFsaWRhdG9yKCl7cmV0dXJuIHRoaXMudmFsaWRhdG9yP3RoaXMudmFsaWRhdG9yKHRoaXMpOm51bGx9X3J1bkFzeW5jVmFsaWRhdG9yKGwpe2lmKHRoaXMuYXN5bmNWYWxpZGF0''@;'; put 'put ''b3Ipe3RoaXMuc3RhdHVzPXh5LHRoaXMuX2hhc093blBlbmRpbmdBc3luY1ZhbGlkYXRvcj0hMDtjb25zdCBhPVV1ZSh0aGlzLmFzeW5jVmFsaWRhdG9yKHRoaXMpKTt0aGlzLl9hc3luY1ZhbGlkYXRpb25TdWJzY3JpcHRpb249YS5zdWJzY3JpYmUoZD0+e3RoaXMuX2hhc093blBlbmRpbmdB''@;'; put 'put ''c3luY1ZhbGlkYXRvcj0hMSx0aGlzLnNldEVycm9ycyhkLHtlbWl0RXZlbnQ6bH0pfSl9fV9jYW5jZWxFeGlzdGluZ1N1YnNjcmlwdGlvbigpe3RoaXMuX2FzeW5jVmFsaWRhdGlvblN1YnNjcmlwdGlvbiYmKHRoaXMuX2FzeW5jVmFsaWRhdGlvblN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgp''@;'; put 'put ''LHRoaXMuX2hhc093blBlbmRpbmdBc3luY1ZhbGlkYXRvcj0hMSl9c2V0RXJyb3JzKGwsYT17fSl7dGhpcy5lcnJvcnM9bCx0aGlzLl91cGRhdGVDb250cm9sc0Vycm9ycyghMSE9PWEuZW1pdEV2ZW50KX1nZXQobCl7bGV0IGE9bDtyZXR1cm4gbnVsbD09YXx8KEFycmF5LmlzQXJyYXkoYSl8''@;'; put 'put ''fChhPWEuc3BsaXQoIi4iKSksMD09PWEubGVuZ3RoKT9udWxsOmEucmVkdWNlKChkLGgpPT5kJiZkLl9maW5kKGgpLHRoaXMpfWdldEVycm9yKGwsYSl7Y29uc3QgZD1hP3RoaXMuZ2V0KGEpOnRoaXM7cmV0dXJuIGQmJmQuZXJyb3JzP2QuZXJyb3JzW2xdOm51bGx9aGFzRXJyb3IobCxhKXty''@;'; put 'put ''ZXR1cm4hIXRoaXMuZ2V0RXJyb3IobCxhKX1nZXQgcm9vdCgpe2xldCBsPXRoaXM7Zm9yKDtsLl9wYXJlbnQ7KWw9bC5fcGFyZW50O3JldHVybiBsfV91cGRhdGVDb250cm9sc0Vycm9ycyhsKXt0aGlzLnN0YXR1cz10aGlzLl9jYWxjdWxhdGVTdGF0dXMoKSxsJiZ0aGlzLnN0YXR1c0NoYW5n''@;'; put 'put ''ZXMuZW1pdCh0aGlzLnN0YXR1cyksdGhpcy5fcGFyZW50JiZ0aGlzLl9wYXJlbnQuX3VwZGF0ZUNvbnRyb2xzRXJyb3JzKGwpfV9pbml0T2JzZXJ2YWJsZXMoKXt0aGlzLnZhbHVlQ2hhbmdlcz1uZXcgS3IsdGhpcy5zdGF0dXNDaGFuZ2VzPW5ldyBLcn1fY2FsY3VsYXRlU3RhdHVzKCl7cmV0''@;'; put 'put ''dXJuIHRoaXMuX2FsbENvbnRyb2xzRGlzYWJsZWQoKT9oeDp0aGlzLmVycm9ycz91TDp0aGlzLl9oYXNPd25QZW5kaW5nQXN5bmNWYWxpZGF0b3J8fHRoaXMuX2FueUNvbnRyb2xzSGF2ZVN0YXR1cyh4eSk/eHk6dGhpcy5fYW55Q29udHJvbHNIYXZlU3RhdHVzKHVMKT91TDpkeH1fYW55Q29u''@;'; put 'put ''dHJvbHNIYXZlU3RhdHVzKGwpe3JldHVybiB0aGlzLl9hbnlDb250cm9scyhhPT5hLnN0YXR1cz09PWwpfV9hbnlDb250cm9sc0RpcnR5KCl7cmV0dXJuIHRoaXMuX2FueUNvbnRyb2xzKGw9PmwuZGlydHkpfV9hbnlDb250cm9sc1RvdWNoZWQoKXtyZXR1cm4gdGhpcy5fYW55Q29udHJvbHMo''@;'; put 'put ''bD0+bC50b3VjaGVkKX1fdXBkYXRlUHJpc3RpbmUobD17fSl7dGhpcy5wcmlzdGluZT0hdGhpcy5fYW55Q29udHJvbHNEaXJ0eSgpLHRoaXMuX3BhcmVudCYmIWwub25seVNlbGYmJnRoaXMuX3BhcmVudC5fdXBkYXRlUHJpc3RpbmUobCl9X3VwZGF0ZVRvdWNoZWQobD17fSl7dGhpcy50b3Vj''@;'; put 'put ''aGVkPXRoaXMuX2FueUNvbnRyb2xzVG91Y2hlZCgpLHRoaXMuX3BhcmVudCYmIWwub25seVNlbGYmJnRoaXMuX3BhcmVudC5fdXBkYXRlVG91Y2hlZChsKX1fcmVnaXN0ZXJPbkNvbGxlY3Rpb25DaGFuZ2UobCl7dGhpcy5fb25Db2xsZWN0aW9uQ2hhbmdlPWx9X3NldFVwZGF0ZVN0cmF0ZWd5''@;'; put 'put ''KGwpe2RMKGwpJiZudWxsIT1sLnVwZGF0ZU9uJiYodGhpcy5fdXBkYXRlT249bC51cGRhdGVPbil9X3BhcmVudE1hcmtlZERpcnR5KGwpe3JldHVybiFsJiYhKCF0aGlzLl9wYXJlbnR8fCF0aGlzLl9wYXJlbnQuZGlydHkpJiYhdGhpcy5fcGFyZW50Ll9hbnlDb250cm9sc0RpcnR5KCl9X2Zp''@;'; put 'put ''bmQobCl7cmV0dXJuIG51bGx9X2Fzc2lnblZhbGlkYXRvcnMobCl7dGhpcy5fcmF3VmFsaWRhdG9ycz1BcnJheS5pc0FycmF5KGwpP2wuc2xpY2UoKTpsLHRoaXMuX2NvbXBvc2VkVmFsaWRhdG9yRm49ZnVuY3Rpb24gJExlKGMpe3JldHVybiBBcnJheS5pc0FycmF5KGMpP1VXKGMpOmN8fG51''@;'; put 'put ''bGx9KHRoaXMuX3Jhd1ZhbGlkYXRvcnMpfV9hc3NpZ25Bc3luY1ZhbGlkYXRvcnMobCl7dGhpcy5fcmF3QXN5bmNWYWxpZGF0b3JzPUFycmF5LmlzQXJyYXkobCk/bC5zbGljZSgpOmwsdGhpcy5fY29tcG9zZWRBc3luY1ZhbGlkYXRvckZuPWZ1bmN0aW9uIEtMZShjKXtyZXR1cm4gQXJyYXku''@;'; put 'put ''aXNBcnJheShjKT9aVyhjKTpjfHxudWxsfSh0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnMpfX1jbGFzcyBoTCBleHRlbmRzIHFXe2NvbnN0cnVjdG9yKGwsYSxkKXtzdXBlcigkVyhhKSxLVyhkLGEpKSx0aGlzLmNvbnRyb2xzPWwsdGhpcy5faW5pdE9ic2VydmFibGVzKCksdGhpcy5fc2V0VXBk''@;'; put 'put ''YXRlU3RyYXRlZ3koYSksdGhpcy5fc2V0VXBDb250cm9scygpLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7b25seVNlbGY6ITAsZW1pdEV2ZW50OiEhdGhpcy5hc3luY1ZhbGlkYXRvcn0pfXJlZ2lzdGVyQ29udHJvbChsLGEpe3JldHVybiB0aGlzLmNvbnRyb2xzW2xdP3RoaXMuY29u''@;'; put 'put ''dHJvbHNbbF06KHRoaXMuY29udHJvbHNbbF09YSxhLnNldFBhcmVudCh0aGlzKSxhLl9yZWdpc3Rlck9uQ29sbGVjdGlvbkNoYW5nZSh0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2UpLGEpfWFkZENvbnRyb2wobCxhLGQ9e30pe3RoaXMucmVnaXN0ZXJDb250cm9sKGwsYSksdGhpcy51cGRhdGVW''@;'; put 'put ''YWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ZC5lbWl0RXZlbnR9KSx0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2UoKX1yZW1vdmVDb250cm9sKGwsYT17fSl7dGhpcy5jb250cm9sc1tsXSYmdGhpcy5jb250cm9sc1tsXS5fcmVnaXN0ZXJPbkNvbGxlY3Rpb25DaGFuZ2UoKCk9Pnt9KSxkZWxl''@;'; put 'put ''dGUgdGhpcy5jb250cm9sc1tsXSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDphLmVtaXRFdmVudH0pLHRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZSgpfXNldENvbnRyb2wobCxhLGQ9e30pe3RoaXMuY29udHJvbHNbbF0mJnRoaXMuY29udHJvbHNbbF0uX3JlZ2lzdGVy''@;'; put 'put ''T25Db2xsZWN0aW9uQ2hhbmdlKCgpPT57fSksZGVsZXRlIHRoaXMuY29udHJvbHNbbF0sYSYmdGhpcy5yZWdpc3RlckNvbnRyb2wobCxhKSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDpkLmVtaXRFdmVudH0pLHRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZSgpfWNvbnRh''@;'; put 'put ''aW5zKGwpe3JldHVybiB0aGlzLmNvbnRyb2xzLmhhc093blByb3BlcnR5KGwpJiZ0aGlzLmNvbnRyb2xzW2xdLmVuYWJsZWR9c2V0VmFsdWUobCxhPXt9KXsoZnVuY3Rpb24gaTBlKGMsbCxhKXtjLl9mb3JFYWNoQ2hpbGQoKGQsaCk9PntpZih2b2lkIDA9PT1hW2hdKXRocm93IG5ldyBRbigx''@;'; put 'put ''MDAyLCIiKX0pfSkodGhpcywwLGwpLE9iamVjdC5rZXlzKGwpLmZvckVhY2goZD0+eyhmdW5jdGlvbiByMGUoYyxsLGEpe2NvbnN0IGQ9Yy5jb250cm9scztpZighKGw/T2JqZWN0LmtleXMoZCk6ZCkubGVuZ3RoKXRocm93IG5ldyBRbigxZTMsIiIpO2lmKCFkW2FdKXRocm93IG5ldyBRbigx''@;'; put 'put ''MDAxLCIiKX0pKHRoaXMsITAsZCksdGhpcy5jb250cm9sc1tkXS5zZXRWYWx1ZShsW2RdLHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6YS5lbWl0RXZlbnR9KX0pLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eShhKX1wYXRjaFZhbHVlKGwsYT17fSl7bnVsbCE9bCYmKE9iamVjdC5rZXlzKGwp''@;'; put 'put ''LmZvckVhY2goZD0+e2NvbnN0IGg9dGhpcy5jb250cm9sc1tkXTtoJiZoLnBhdGNoVmFsdWUobFtkXSx7b25seVNlbGY6ITAsZW1pdEV2ZW50OmEuZW1pdEV2ZW50fSl9KSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoYSkpfXJlc2V0KGw9e30sYT17fSl7dGhpcy5fZm9yRWFjaENoaWxk''@;'; put 'put ''KChkLGgpPT57ZC5yZXNldChsP2xbaF06bnVsbCx7b25seVNlbGY6ITAsZW1pdEV2ZW50OmEuZW1pdEV2ZW50fSl9KSx0aGlzLl91cGRhdGVQcmlzdGluZShhKSx0aGlzLl91cGRhdGVUb3VjaGVkKGEpLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eShhKX1nZXRSYXdWYWx1ZSgpe3JldHVy''@;'; put 'put ''biB0aGlzLl9yZWR1Y2VDaGlsZHJlbih7fSwobCxhLGQpPT4obFtkXT1hLmdldFJhd1ZhbHVlKCksbCkpfV9zeW5jUGVuZGluZ0NvbnRyb2xzKCl7bGV0IGw9dGhpcy5fcmVkdWNlQ2hpbGRyZW4oITEsKGEsZCk9PiEhZC5fc3luY1BlbmRpbmdDb250cm9scygpfHxhKTtyZXR1cm4gbCYmdGhp''@;'; put 'put ''cy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtvbmx5U2VsZjohMH0pLGx9X2ZvckVhY2hDaGlsZChsKXtPYmplY3Qua2V5cyh0aGlzLmNvbnRyb2xzKS5mb3JFYWNoKGE9Pntjb25zdCBkPXRoaXMuY29udHJvbHNbYV07ZCYmbChkLGEpfSl9X3NldFVwQ29udHJvbHMoKXt0aGlzLl9mb3JFYWNo''@;'; put 'put ''Q2hpbGQobD0+e2wuc2V0UGFyZW50KHRoaXMpLGwuX3JlZ2lzdGVyT25Db2xsZWN0aW9uQ2hhbmdlKHRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZSl9KX1fdXBkYXRlVmFsdWUoKXt0aGlzLnZhbHVlPXRoaXMuX3JlZHVjZVZhbHVlKCl9X2FueUNvbnRyb2xzKGwpe2Zvcihjb25zdFthLGRdb2Yg''@;'; put 'put ''T2JqZWN0LmVudHJpZXModGhpcy5jb250cm9scykpaWYodGhpcy5jb250YWlucyhhKSYmbChkKSlyZXR1cm4hMDtyZXR1cm4hMX1fcmVkdWNlVmFsdWUoKXtyZXR1cm4gdGhpcy5fcmVkdWNlQ2hpbGRyZW4oe30sKGEsZCxoKT0+KChkLmVuYWJsZWR8fHRoaXMuZGlzYWJsZWQpJiYoYVtoXT1k''@;'; put 'put ''LnZhbHVlKSxhKSl9X3JlZHVjZUNoaWxkcmVuKGwsYSl7bGV0IGQ9bDtyZXR1cm4gdGhpcy5fZm9yRWFjaENoaWxkKChoLGYpPT57ZD1hKGQsaCxmKX0pLGR9X2FsbENvbnRyb2xzRGlzYWJsZWQoKXtmb3IoY29uc3QgbCBvZiBPYmplY3Qua2V5cyh0aGlzLmNvbnRyb2xzKSlpZih0aGlzLmNv''@;'; put 'put ''bnRyb2xzW2xdLmVuYWJsZWQpcmV0dXJuITE7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuY29udHJvbHMpLmxlbmd0aD4wfHx0aGlzLmRpc2FibGVkfV9maW5kKGwpe3JldHVybiB0aGlzLmNvbnRyb2xzLmhhc093blByb3BlcnR5KGwpP3RoaXMuY29udHJvbHNbbF06bnVsbH19Y29uc3Qgczc9''@;'; put 'put ''bmV3IFN0KCJDYWxsU2V0RGlzYWJsZWRTdGF0ZSIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9PmZ4fSksZng9ImFsd2F5cyI7ZnVuY3Rpb24gcHgoYyxsLGE9Zngpe1hXKGMsbCksbC52YWx1ZUFjY2Vzc29yLndyaXRlVmFsdWUoYy52YWx1ZSksKGMuZGlzYWJsZWR8fCJhbHdheXMi''@;'; put 'put ''PT09YSkmJmwudmFsdWVBY2Nlc3Nvci5zZXREaXNhYmxlZFN0YXRlPy4oYy5kaXNhYmxlZCksZnVuY3Rpb24gSkxlKGMsbCl7bC52YWx1ZUFjY2Vzc29yLnJlZ2lzdGVyT25DaGFuZ2UoYT0+e2MuX3BlbmRpbmdWYWx1ZT1hLGMuX3BlbmRpbmdDaGFuZ2U9ITAsYy5fcGVuZGluZ0RpcnR5PSEw''@;'; put 'put ''LCJjaGFuZ2UiPT09Yy51cGRhdGVPbiYmYTBlKGMsbCl9KX0oYyxsKSxmdW5jdGlvbiBlT2UoYyxsKXtjb25zdCBhPShkLGgpPT57bC52YWx1ZUFjY2Vzc29yLndyaXRlVmFsdWUoZCksaCYmbC52aWV3VG9Nb2RlbFVwZGF0ZShkKX07Yy5yZWdpc3Rlck9uQ2hhbmdlKGEpLGwuX3JlZ2lzdGVy''@;'; put 'put ''T25EZXN0cm95KCgpPT57Yy5fdW5yZWdpc3Rlck9uQ2hhbmdlKGEpfSl9KGMsbCksZnVuY3Rpb24gUUxlKGMsbCl7bC52YWx1ZUFjY2Vzc29yLnJlZ2lzdGVyT25Ub3VjaGVkKCgpPT57Yy5fcGVuZGluZ1RvdWNoZWQ9ITAsImJsdXIiPT09Yy51cGRhdGVPbiYmYy5fcGVuZGluZ0NoYW5nZSYm''@;'; put 'put ''YTBlKGMsbCksInN1Ym1pdCIhPT1jLnVwZGF0ZU9uJiZjLm1hcmtBc1RvdWNoZWQoKX0pfShjLGwpLGZ1bmN0aW9uIFhMZShjLGwpe2lmKGwudmFsdWVBY2Nlc3Nvci5zZXREaXNhYmxlZFN0YXRlKXtjb25zdCBhPWQ9PntsLnZhbHVlQWNjZXNzb3Iuc2V0RGlzYWJsZWRTdGF0ZShkKX07Yy5y''@;'; put 'put ''ZWdpc3Rlck9uRGlzYWJsZWRDaGFuZ2UoYSksbC5fcmVnaXN0ZXJPbkRlc3Ryb3koKCk9PntjLl91bnJlZ2lzdGVyT25EaXNhYmxlZENoYW5nZShhKX0pfX0oYyxsKX1mdW5jdGlvbiBnTChjLGwpe2MuZm9yRWFjaChhPT57YS5yZWdpc3Rlck9uVmFsaWRhdG9yQ2hhbmdlJiZhLnJlZ2lzdGVy''@;'; put 'put ''T25WYWxpZGF0b3JDaGFuZ2UobCl9KX1mdW5jdGlvbiBYVyhjLGwpe2NvbnN0IGE9ZnVuY3Rpb24gcXVlKGMpe3JldHVybiBjLl9yYXdWYWxpZGF0b3JzfShjKTtudWxsIT09bC52YWxpZGF0b3I/Yy5zZXRWYWxpZGF0b3JzKEt1ZShhLGwudmFsaWRhdG9yKSk6ImZ1bmN0aW9uIj09dHlwZW9m''@;'; put 'put ''IGEmJmMuc2V0VmFsaWRhdG9ycyhbYV0pO2NvbnN0IGQ9ZnVuY3Rpb24gWHVlKGMpe3JldHVybiBjLl9yYXdBc3luY1ZhbGlkYXRvcnN9KGMpO251bGwhPT1sLmFzeW5jVmFsaWRhdG9yP2Muc2V0QXN5bmNWYWxpZGF0b3JzKEt1ZShkLGwuYXN5bmNWYWxpZGF0b3IpKToiZnVuY3Rpb24iPT10''@;'; put 'put ''eXBlb2YgZCYmYy5zZXRBc3luY1ZhbGlkYXRvcnMoW2RdKTtjb25zdCBoPSgpPT5jLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtnTChsLl9yYXdWYWxpZGF0b3JzLGgpLGdMKGwuX3Jhd0FzeW5jVmFsaWRhdG9ycyxoKX1mdW5jdGlvbiBhMGUoYyxsKXtjLl9wZW5kaW5nRGlydHkmJmMubWFy''@;'; put 'put ''a0FzRGlydHkoKSxjLnNldFZhbHVlKGMuX3BlbmRpbmdWYWx1ZSx7ZW1pdE1vZGVsVG9WaWV3Q2hhbmdlOiExfSksbC52aWV3VG9Nb2RlbFVwZGF0ZShjLl9wZW5kaW5nVmFsdWUpLGMuX3BlbmRpbmdDaGFuZ2U9ITF9Y29uc3QgYU9lPXtwcm92aWRlOkIxLHVzZUV4aXN0aW5nOkNzKCgpPT55''@;'; put 'put ''cCl9LGd4PVByb21pc2UucmVzb2x2ZSgpO2xldCB5cD0oKCk9PntjbGFzcyBjIGV4dGVuZHMgQjF7Y29uc3RydWN0b3IoYSxkLGgpe3N1cGVyKCksdGhpcy5jYWxsU2V0RGlzYWJsZWRTdGF0ZT1oLHRoaXMuc3VibWl0dGVkPSExLHRoaXMuX2RpcmVjdGl2ZXM9bmV3IFNldCx0aGlzLm5nU3Vi''@;'; put 'put ''bWl0PW5ldyBLcix0aGlzLmZvcm09bmV3IGhMKHt9LFVXKGEpLFpXKGQpKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLl9zZXRVcGRhdGVTdHJhdGVneSgpfWdldCBmb3JtRGlyZWN0aXZlKCl7cmV0dXJuIHRoaXN9Z2V0IGNvbnRyb2woKXtyZXR1cm4gdGhpcy5mb3JtfWdldCBwYXRoKCl7cmV0''@;'; put 'put ''dXJuW119Z2V0IGNvbnRyb2xzKCl7cmV0dXJuIHRoaXMuZm9ybS5jb250cm9sc31hZGRDb250cm9sKGEpe2d4LnRoZW4oKCk9Pntjb25zdCBkPXRoaXMuX2ZpbmRDb250YWluZXIoYS5wYXRoKTthLmNvbnRyb2w9ZC5yZWdpc3RlckNvbnRyb2woYS5uYW1lLGEuY29udHJvbCkscHgoYS5jb250''@;'; put 'put ''cm9sLGEsdGhpcy5jYWxsU2V0RGlzYWJsZWRTdGF0ZSksYS5jb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohMX0pLHRoaXMuX2RpcmVjdGl2ZXMuYWRkKGEpfSl9Z2V0Q29udHJvbChhKXtyZXR1cm4gdGhpcy5mb3JtLmdldChhLnBhdGgpfXJlbW92ZUNvbnRyb2wo''@;'; put 'put ''YSl7Z3gudGhlbigoKT0+e2NvbnN0IGQ9dGhpcy5fZmluZENvbnRhaW5lcihhLnBhdGgpO2QmJmQucmVtb3ZlQ29udHJvbChhLm5hbWUpLHRoaXMuX2RpcmVjdGl2ZXMuZGVsZXRlKGEpfSl9YWRkRm9ybUdyb3VwKGEpe2d4LnRoZW4oKCk9Pntjb25zdCBkPXRoaXMuX2ZpbmRDb250YWluZXIo''@;'; put 'put ''YS5wYXRoKSxoPW5ldyBoTCh7fSk7KGZ1bmN0aW9uIG8wZShjLGwpe1hXKGMsbCl9KShoLGEpLGQucmVnaXN0ZXJDb250cm9sKGEubmFtZSxoKSxoLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohMX0pfSl9cmVtb3ZlRm9ybUdyb3VwKGEpe2d4LnRoZW4oKCk9Pntjb25zdCBk''@;'; put 'put ''PXRoaXMuX2ZpbmRDb250YWluZXIoYS5wYXRoKTtkJiZkLnJlbW92ZUNvbnRyb2woYS5uYW1lKX0pfWdldEZvcm1Hcm91cChhKXtyZXR1cm4gdGhpcy5mb3JtLmdldChhLnBhdGgpfXVwZGF0ZU1vZGVsKGEsZCl7Z3gudGhlbigoKT0+e3RoaXMuZm9ybS5nZXQoYS5wYXRoKS5zZXRWYWx1ZShk''@;'; put 'put ''KX0pfXNldFZhbHVlKGEpe3RoaXMuY29udHJvbC5zZXRWYWx1ZShhKX1vblN1Ym1pdChhKXtyZXR1cm4gdGhpcy5zdWJtaXR0ZWQ9ITAsZnVuY3Rpb24gczBlKGMsbCl7Yy5fc3luY1BlbmRpbmdDb250cm9scygpLGwuZm9yRWFjaChhPT57Y29uc3QgZD1hLmNvbnRyb2w7InN1Ym1pdCI9PT1k''@;'; put 'put ''LnVwZGF0ZU9uJiZkLl9wZW5kaW5nQ2hhbmdlJiYoYS52aWV3VG9Nb2RlbFVwZGF0ZShkLl9wZW5kaW5nVmFsdWUpLGQuX3BlbmRpbmdDaGFuZ2U9ITEpfSl9KHRoaXMuZm9ybSx0aGlzLl9kaXJlY3RpdmVzKSx0aGlzLm5nU3VibWl0LmVtaXQoYSksImRpYWxvZyI9PT1hPy50YXJnZXQ/Lm1l''@;'; put 'put ''dGhvZH1vblJlc2V0KCl7dGhpcy5yZXNldEZvcm0oKX1yZXNldEZvcm0oYT12b2lkIDApe3RoaXMuZm9ybS5yZXNldChhKSx0aGlzLnN1Ym1pdHRlZD0hMX1fc2V0VXBkYXRlU3RyYXRlZ3koKXt0aGlzLm9wdGlvbnMmJm51bGwhPXRoaXMub3B0aW9ucy51cGRhdGVPbiYmKHRoaXMuZm9ybS5f''@;'; put 'put ''dXBkYXRlT249dGhpcy5vcHRpb25zLnVwZGF0ZU9uKX1fZmluZENvbnRhaW5lcihhKXtyZXR1cm4gYS5wb3AoKSxhLmxlbmd0aD90aGlzLmZvcm0uZ2V0KGEpOnRoaXMuZm9ybX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZShoMCwxMCksR2Uo''@;'; put 'put ''aG0sMTApLEdlKHM3LDgpKX19c3RhdGlje3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbImZvcm0iLDMsIm5nTm9Gb3JtIiwiIiwzLCJmb3JtR3JvdXAiLCIiXSxbIm5nLWZvcm0iXSxbIiIsIm5nRm9ybSIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZCxoKXsxJmQm''@;'; put 'put ''JkZ0KCJzdWJtaXQiLGZ1bmN0aW9uKHYpe3JldHVybiBoLm9uU3VibWl0KHYpfSkoInJlc2V0IixmdW5jdGlvbigpe3JldHVybiBoLm9uUmVzZXQoKX0pfSxpbnB1dHM6e29wdGlvbnM6W05uLk5vbmUsIm5nRm9ybU9wdGlvbnMiLCJvcHRpb25zIl19LG91dHB1dHM6e25nU3VibWl0OiJuZ1N1''@;'; put 'put ''Ym1pdCJ9LGV4cG9ydEFzOlsibmdGb3JtIl0sZmVhdHVyZXM6W2RhKFthT2VdKSx3YV19KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIGwwZShjLGwpe2NvbnN0IGE9Yy5pbmRleE9mKGwpO2E+LTEmJmMuc3BsaWNlKGEsMSl9ZnVuY3Rpb24gYzBlKGMpe3JldHVybiJvYmplY3QiPT10eXBlb2Yg''@;'; put 'put ''YyYmbnVsbCE9PWMmJjI9PT1PYmplY3Qua2V5cyhjKS5sZW5ndGgmJiJ2YWx1ZSJpbiBjJiYiZGlzYWJsZWQiaW4gY31jb25zdCB0WT1jbGFzcyBleHRlbmRzIHFXe2NvbnN0cnVjdG9yKGw9bnVsbCxhLGQpe3N1cGVyKCRXKGEpLEtXKGQsYSkpLHRoaXMuZGVmYXVsdFZhbHVlPW51bGwsdGhp''@;'; put 'put ''cy5fb25DaGFuZ2U9W10sdGhpcy5fcGVuZGluZ0NoYW5nZT0hMSx0aGlzLl9hcHBseUZvcm1TdGF0ZShsKSx0aGlzLl9zZXRVcGRhdGVTdHJhdGVneShhKSx0aGlzLl9pbml0T2JzZXJ2YWJsZXMoKSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe29ubHlTZWxmOiEwLGVtaXRFdmVudDoh''@;'; put 'put ''IXRoaXMuYXN5bmNWYWxpZGF0b3J9KSxkTChhKSYmKGEubm9uTnVsbGFibGV8fGEuaW5pdGlhbFZhbHVlSXNEZWZhdWx0KSYmKHRoaXMuZGVmYXVsdFZhbHVlPWMwZShsKT9sLnZhbHVlOmwpfXNldFZhbHVlKGwsYT17fSl7dGhpcy52YWx1ZT10aGlzLl9wZW5kaW5nVmFsdWU9bCx0aGlzLl9v''@;'; put 'put ''bkNoYW5nZS5sZW5ndGgmJiExIT09YS5lbWl0TW9kZWxUb1ZpZXdDaGFuZ2UmJnRoaXMuX29uQ2hhbmdlLmZvckVhY2goZD0+ZCh0aGlzLnZhbHVlLCExIT09YS5lbWl0Vmlld1RvTW9kZWxDaGFuZ2UpKSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoYSl9cGF0Y2hWYWx1ZShsLGE9e30p''@;'; put 'put ''e3RoaXMuc2V0VmFsdWUobCxhKX1yZXNldChsPXRoaXMuZGVmYXVsdFZhbHVlLGE9e30pe3RoaXMuX2FwcGx5Rm9ybVN0YXRlKGwpLHRoaXMubWFya0FzUHJpc3RpbmUoYSksdGhpcy5tYXJrQXNVbnRvdWNoZWQoYSksdGhpcy5zZXRWYWx1ZSh0aGlzLnZhbHVlLGEpLHRoaXMuX3BlbmRpbmdD''@;'; put 'put ''aGFuZ2U9ITF9X3VwZGF0ZVZhbHVlKCl7fV9hbnlDb250cm9scyhsKXtyZXR1cm4hMX1fYWxsQ29udHJvbHNEaXNhYmxlZCgpe3JldHVybiB0aGlzLmRpc2FibGVkfXJlZ2lzdGVyT25DaGFuZ2UobCl7dGhpcy5fb25DaGFuZ2UucHVzaChsKX1fdW5yZWdpc3Rlck9uQ2hhbmdlKGwpe2wwZSh0''@;'; put 'put ''aGlzLl9vbkNoYW5nZSxsKX1yZWdpc3Rlck9uRGlzYWJsZWRDaGFuZ2UobCl7dGhpcy5fb25EaXNhYmxlZENoYW5nZS5wdXNoKGwpfV91bnJlZ2lzdGVyT25EaXNhYmxlZENoYW5nZShsKXtsMGUodGhpcy5fb25EaXNhYmxlZENoYW5nZSxsKX1fZm9yRWFjaENoaWxkKGwpe31fc3luY1BlbmRp''@;'; put 'put ''bmdDb250cm9scygpe3JldHVybiEoInN1Ym1pdCIhPT10aGlzLnVwZGF0ZU9ufHwodGhpcy5fcGVuZGluZ0RpcnR5JiZ0aGlzLm1hcmtBc0RpcnR5KCksdGhpcy5fcGVuZGluZ1RvdWNoZWQmJnRoaXMubWFya0FzVG91Y2hlZCgpLCF0aGlzLl9wZW5kaW5nQ2hhbmdlKXx8KHRoaXMuc2V0VmFs''@;'; put 'put ''dWUodGhpcy5fcGVuZGluZ1ZhbHVlLHtvbmx5U2VsZjohMCxlbWl0TW9kZWxUb1ZpZXdDaGFuZ2U6ITF9KSwwKSl9X2FwcGx5Rm9ybVN0YXRlKGwpe2MwZShsKT8odGhpcy52YWx1ZT10aGlzLl9wZW5kaW5nVmFsdWU9bC52YWx1ZSxsLmRpc2FibGVkP3RoaXMuZGlzYWJsZSh7b25seVNlbGY6''@;'; put 'put ''ITAsZW1pdEV2ZW50OiExfSk6dGhpcy5lbmFibGUoe29ubHlTZWxmOiEwLGVtaXRFdmVudDohMX0pKTp0aGlzLnZhbHVlPXRoaXMuX3BlbmRpbmdWYWx1ZT1sfX0sbE9lPXtwcm92aWRlOmQxLHVzZUV4aXN0aW5nOkNzKCgpPT4kcyl9LGQwZT1Qcm9taXNlLnJlc29sdmUoKTtsZXQgJHM9KCgp''@;'; put 'put ''PT57Y2xhc3MgYyBleHRlbmRzIGQxe2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNKXtzdXBlcigpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPXYsdGhpcy5jYWxsU2V0RGlzYWJsZWRTdGF0ZT1NLHRoaXMuY29udHJvbD1uZXcgdFksdGhpcy5fcmVnaXN0ZXJlZD0hMSx0aGlzLm5hbWU9IiIsdGhp''@;'; put 'put ''cy51cGRhdGU9bmV3IEtyLHRoaXMuX3BhcmVudD1hLHRoaXMuX3NldFZhbGlkYXRvcnMoZCksdGhpcy5fc2V0QXN5bmNWYWxpZGF0b3JzKGgpLHRoaXMudmFsdWVBY2Nlc3Nvcj1mdW5jdGlvbiBlWShjLGwpe2lmKCFsKXJldHVybiBudWxsO2xldCBhLGQsaDtyZXR1cm4gQXJyYXkuaXNBcnJh''@;'; put 'put ''eShsKSxsLmZvckVhY2goZj0+e2YuY29uc3RydWN0b3I9PT1xbD9hPWY6ZnVuY3Rpb24gck9lKGMpe3JldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoYy5jb25zdHJ1Y3Rvcik9PT1hN30oZik/ZD1mOmg9Zn0pLGh8fGR8fGF8fG51bGx9KDAsZil9bmdPbkNoYW5nZXMoYSl7aWYodGhpcy5f''@;'; put 'put ''Y2hlY2tGb3JFcnJvcnMoKSwhdGhpcy5fcmVnaXN0ZXJlZHx8Im5hbWUiaW4gYSl7aWYodGhpcy5fcmVnaXN0ZXJlZCYmKHRoaXMuX2NoZWNrTmFtZSgpLHRoaXMuZm9ybURpcmVjdGl2ZSkpe2NvbnN0IGQ9YS5uYW1lLnByZXZpb3VzVmFsdWU7dGhpcy5mb3JtRGlyZWN0aXZlLnJlbW92ZUNv''@;'; put 'put ''bnRyb2woe25hbWU6ZCxwYXRoOnRoaXMuX2dldFBhdGgoZCl9KX10aGlzLl9zZXRVcENvbnRyb2woKX0iaXNEaXNhYmxlZCJpbiBhJiZ0aGlzLl91cGRhdGVEaXNhYmxlZChhKSxmdW5jdGlvbiBRVyhjLGwpe2lmKCFjLmhhc093blByb3BlcnR5KCJtb2RlbCIpKXJldHVybiExO2NvbnN0IGE9''@;'; put 'put ''Yy5tb2RlbDtyZXR1cm4hIWEuaXNGaXJzdENoYW5nZSgpfHwhT2JqZWN0LmlzKGwsYS5jdXJyZW50VmFsdWUpfShhLHRoaXMudmlld01vZGVsKSYmKHRoaXMuX3VwZGF0ZVZhbHVlKHRoaXMubW9kZWwpLHRoaXMudmlld01vZGVsPXRoaXMubW9kZWwpfW5nT25EZXN0cm95KCl7dGhpcy5mb3Jt''@;'; put 'put ''RGlyZWN0aXZlJiZ0aGlzLmZvcm1EaXJlY3RpdmUucmVtb3ZlQ29udHJvbCh0aGlzKX1nZXQgcGF0aCgpe3JldHVybiB0aGlzLl9nZXRQYXRoKHRoaXMubmFtZSl9Z2V0IGZvcm1EaXJlY3RpdmUoKXtyZXR1cm4gdGhpcy5fcGFyZW50P3RoaXMuX3BhcmVudC5mb3JtRGlyZWN0aXZlOm51bGx9''@;'; put 'put ''dmlld1RvTW9kZWxVcGRhdGUoYSl7dGhpcy52aWV3TW9kZWw9YSx0aGlzLnVwZGF0ZS5lbWl0KGEpfV9zZXRVcENvbnRyb2woKXt0aGlzLl9zZXRVcGRhdGVTdHJhdGVneSgpLHRoaXMuX2lzU3RhbmRhbG9uZSgpP3RoaXMuX3NldFVwU3RhbmRhbG9uZSgpOnRoaXMuZm9ybURpcmVjdGl2ZS5h''@;'; put 'put ''ZGRDb250cm9sKHRoaXMpLHRoaXMuX3JlZ2lzdGVyZWQ9ITB9X3NldFVwZGF0ZVN0cmF0ZWd5KCl7dGhpcy5vcHRpb25zJiZudWxsIT10aGlzLm9wdGlvbnMudXBkYXRlT24mJih0aGlzLmNvbnRyb2wuX3VwZGF0ZU9uPXRoaXMub3B0aW9ucy51cGRhdGVPbil9X2lzU3RhbmRhbG9uZSgpe3Jl''@;'; put 'put ''dHVybiF0aGlzLl9wYXJlbnR8fCEoIXRoaXMub3B0aW9uc3x8IXRoaXMub3B0aW9ucy5zdGFuZGFsb25lKX1fc2V0VXBTdGFuZGFsb25lKCl7cHgodGhpcy5jb250cm9sLHRoaXMsdGhpcy5jYWxsU2V0RGlzYWJsZWRTdGF0ZSksdGhpcy5jb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHko''@;'; put 'put ''e2VtaXRFdmVudDohMX0pfV9jaGVja0ZvckVycm9ycygpe3RoaXMuX2lzU3RhbmRhbG9uZSgpfHx0aGlzLl9jaGVja1BhcmVudFR5cGUoKSx0aGlzLl9jaGVja05hbWUoKX1fY2hlY2tQYXJlbnRUeXBlKCl7fV9jaGVja05hbWUoKXt0aGlzLm9wdGlvbnMmJnRoaXMub3B0aW9ucy5uYW1lJiYo''@;'; put 'put ''dGhpcy5uYW1lPXRoaXMub3B0aW9ucy5uYW1lKSx0aGlzLl9pc1N0YW5kYWxvbmUoKX1fdXBkYXRlVmFsdWUoYSl7ZDBlLnRoZW4oKCk9Pnt0aGlzLmNvbnRyb2wuc2V0VmFsdWUoYSx7ZW1pdFZpZXdUb01vZGVsQ2hhbmdlOiExfSksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY/Lm1hcmtGb3JD''@;'; put 'put ''aGVjaygpfSl9X3VwZGF0ZURpc2FibGVkKGEpe2NvbnN0IGQ9YS5pc0Rpc2FibGVkLmN1cnJlbnRWYWx1ZSxoPTAhPT1kJiZzMShkKTtkMGUudGhlbigoKT0+e2gmJiF0aGlzLmNvbnRyb2wuZGlzYWJsZWQ/dGhpcy5jb250cm9sLmRpc2FibGUoKTohaCYmdGhpcy5jb250cm9sLmRpc2FibGVk''@;'; put 'put ''JiZ0aGlzLmNvbnRyb2wuZW5hYmxlKCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY/Lm1hcmtGb3JDaGVjaygpfSl9X2dldFBhdGgoYSl7cmV0dXJuIHRoaXMuX3BhcmVudD9mdW5jdGlvbiBmTChjLGwpe3JldHVyblsuLi5sLnBhdGgsY119KGEsdGhpcy5fcGFyZW50KTpbYV19c3RhdGlje3Ro''@;'; put 'put ''aXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoQjEsOSksR2UoaDAsMTApLEdlKGhtLDEwKSxHZShicCwxMCksR2UoRXMsOCksR2UoczcsOCkpfX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwibmdNb2RlbCIsIiIsMywi''@;'; put 'put ''Zm9ybUNvbnRyb2xOYW1lIiwiIiwzLCJmb3JtQ29udHJvbCIsIiJdXSxpbnB1dHM6e25hbWU6Im5hbWUiLGlzRGlzYWJsZWQ6W05uLk5vbmUsImRpc2FibGVkIiwiaXNEaXNhYmxlZCJdLG1vZGVsOltObi5Ob25lLCJuZ01vZGVsIiwibW9kZWwiXSxvcHRpb25zOltObi5Ob25lLCJuZ01vZGVs''@;'; put 'put ''T3B0aW9ucyIsIm9wdGlvbnMiXX0sb3V0cHV0czp7dXBkYXRlOiJuZ01vZGVsQ2hhbmdlIn0sZXhwb3J0QXM6WyJuZ01vZGVsIl0sZmVhdHVyZXM6W2RhKFtsT2VdKSx3YSx3bF19KX19cmV0dXJuIGN9KSgpLGw3PSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9u''@;'; put 'put ''KGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyJmb3JtIiwzLCJuZ05vRm9ybSIsIiIsMywibmdOYXRpdmVWYWxpZGF0ZSIsIiJdXSxob3N0QXR0cnM6WyJub3ZhbGlkYXRlIiwiIl19KX19cmV0dXJuIGN9KSgpO2NvbnN0''@;'; put 'put ''IGNPZT17cHJvdmlkZTpicCx1c2VFeGlzdGluZzpDcygoKT0+dkwpLG11bHRpOiEwfTtsZXQgdkw9KCgpPT57Y2xhc3MgYyBleHRlbmRzIGE3e3dyaXRlVmFsdWUoYSl7dGhpcy5zZXRQcm9wZXJ0eSgidmFsdWUiLGE/PyIiKX1yZWdpc3Rlck9uQ2hhbmdlKGEpe3RoaXMub25DaGFuZ2U9ZD0+''@;'; put 'put ''e2EoIiI9PWQ/bnVsbDpwYXJzZUZsb2F0KGQpKX19c3RhdGlje3RoaXMuXHUwMjc1ZmFjPSgoKT0+e2xldCBhO3JldHVybiBmdW5jdGlvbihoKXtyZXR1cm4oYXx8KGE9V3MoYykpKShofHxjKX19KSgpfXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyJpbnB1''@;'; put 'put ''dCIsInR5cGUiLCJudW1iZXIiLCJmb3JtQ29udHJvbE5hbWUiLCIiXSxbImlucHV0IiwidHlwZSIsIm51bWJlciIsImZvcm1Db250cm9sIiwiIl0sWyJpbnB1dCIsInR5cGUiLCJudW1iZXIiLCJuZ01vZGVsIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihkLGgpezEmZCYmRnQoImlucHV0''@;'; put 'put ''IixmdW5jdGlvbih2KXtyZXR1cm4gaC5vbkNoYW5nZSh2LnRhcmdldC52YWx1ZSl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gaC5vblRvdWNoZWQoKX0pfSxmZWF0dXJlczpbZGEoW2NPZV0pLHdhXX0pfX1yZXR1cm4gY30pKCk7Y29uc3QgdU9lPXtwcm92aWRlOmJwLHVzZUV4aXN0aW5n''@;'; put 'put ''OkNzKCgpPT5iTCksbXVsdGk6ITB9O2xldCBkT2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2FjY2Vzc29ycz1bXX1hZGQoYSxkKXt0aGlzLl9hY2Nlc3NvcnMucHVzaChbYSxkXSl9cmVtb3ZlKGEpe2ZvcihsZXQgZD10aGlzLl9hY2Nlc3NvcnMubGVuZ3RoLTE7ZD49MDst''@;'; put 'put ''LWQpaWYodGhpcy5fYWNjZXNzb3JzW2RdWzFdPT09YSlyZXR1cm4gdm9pZCB0aGlzLl9hY2Nlc3NvcnMuc3BsaWNlKGQsMSl9c2VsZWN0KGEpe3RoaXMuX2FjY2Vzc29ycy5mb3JFYWNoKGQ9Pnt0aGlzLl9pc1NhbWVHcm91cChkLGEpJiZkWzFdIT09YSYmZFsxXS5maXJlVW5jaGVjayhhLnZh''@;'; put 'put ''bHVlKX0pfV9pc1NhbWVHcm91cChhLGQpe3JldHVybiEhYVswXS5jb250cm9sJiZhWzBdLl9wYXJlbnQ9PT1kLl9jb250cm9sLl9wYXJlbnQmJmFbMV0ubmFtZT09PWQubmFtZX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMu''@;'; put 'put ''XHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9fXJldHVybiBjfSkoKSxiTD0oKCk9PntjbGFzcyBjIGV4dGVuZHMgYTd7Y29uc3RydWN0b3IoYSxkLGgsZil7c3VwZXIoYSxkKSx0aGlzLl9yZWdpc3RyeT1oLHRoaXMuX2luamVj''@;'; put 'put ''dG9yPWYsdGhpcy5zZXREaXNhYmxlZFN0YXRlRmlyZWQ9ITEsdGhpcy5vbkNoYW5nZT0oKT0+e30sdGhpcy5jYWxsU2V0RGlzYWJsZWRTdGF0ZT1maShzNyx7b3B0aW9uYWw6ITB9KT8/Znh9bmdPbkluaXQoKXt0aGlzLl9jb250cm9sPXRoaXMuX2luamVjdG9yLmdldChkMSksdGhpcy5fY2hl''@;'; put 'put ''Y2tOYW1lKCksdGhpcy5fcmVnaXN0cnkuYWRkKHRoaXMuX2NvbnRyb2wsdGhpcyl9bmdPbkRlc3Ryb3koKXt0aGlzLl9yZWdpc3RyeS5yZW1vdmUodGhpcyl9d3JpdGVWYWx1ZShhKXt0aGlzLl9zdGF0ZT1hPT09dGhpcy52YWx1ZSx0aGlzLnNldFByb3BlcnR5KCJjaGVja2VkIix0aGlzLl9z''@;'; put 'put ''dGF0ZSl9cmVnaXN0ZXJPbkNoYW5nZShhKXt0aGlzLl9mbj1hLHRoaXMub25DaGFuZ2U9KCk9PnthKHRoaXMudmFsdWUpLHRoaXMuX3JlZ2lzdHJ5LnNlbGVjdCh0aGlzKX19c2V0RGlzYWJsZWRTdGF0ZShhKXsodGhpcy5zZXREaXNhYmxlZFN0YXRlRmlyZWR8fGF8fCJ3aGVuRGlzYWJsZWRG''@;'; put 'put ''b3JMZWdhY3lDb2RlIj09PXRoaXMuY2FsbFNldERpc2FibGVkU3RhdGUpJiZ0aGlzLnNldFByb3BlcnR5KCJkaXNhYmxlZCIsYSksdGhpcy5zZXREaXNhYmxlZFN0YXRlRmlyZWQ9ITB9ZmlyZVVuY2hlY2soYSl7dGhpcy53cml0ZVZhbHVlKGEpfV9jaGVja05hbWUoKXshdGhpcy5uYW1lJiZ0''@;'; put 'put ''aGlzLmZvcm1Db250cm9sTmFtZSYmKHRoaXMubmFtZT10aGlzLmZvcm1Db250cm9sTmFtZSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoRW8pLEdlKEppKSxHZShkT2UpLEdlKERzKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlw''@;'; put 'put ''ZTpjLHNlbGVjdG9yczpbWyJpbnB1dCIsInR5cGUiLCJyYWRpbyIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiaW5wdXQiLCJ0eXBlIiwicmFkaW8iLCJmb3JtQ29udHJvbCIsIiJdLFsiaW5wdXQiLCJ0eXBlIiwicmFkaW8iLCJuZ01vZGVsIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihk''@;'; put 'put ''LGgpezEmZCYmRnQoImNoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gaC5vbkNoYW5nZSgpfSkoImJsdXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGgub25Ub3VjaGVkKCl9KX0saW5wdXRzOntuYW1lOiJuYW1lIixmb3JtQ29udHJvbE5hbWU6ImZvcm1Db250cm9sTmFtZSIsdmFsdWU6InZhbHVlIn0s''@;'; put 'put ''ZmVhdHVyZXM6W2RhKFt1T2VdKSx3YV19KX19cmV0dXJuIGN9KSgpO2NvbnN0IHJZPW5ldyBTdCgiIiksYk9lPXtwcm92aWRlOmJwLHVzZUV4aXN0aW5nOkNzKCgpPT5UMiksbXVsdGk6ITB9O2Z1bmN0aW9uIG0wZShjLGwpe3JldHVybiBudWxsPT1jP2Ake2x9YDoobCYmIm9iamVjdCI9PXR5''@;'; put 'put ''cGVvZiBsJiYobD0iT2JqZWN0IiksYCR7Y306ICR7bH1gLnNsaWNlKDAsNTApKX1sZXQgVDI9KCgpPT57Y2xhc3MgYyBleHRlbmRzIGE3e2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9vcHRpb25NYXA9bmV3IE1hcCx0aGlzLl9pZENvdW50ZXI9MCx0aGlzLl9jb21w''@;'; put 'put ''YXJlV2l0aD1PYmplY3QuaXN9c2V0IGNvbXBhcmVXaXRoKGEpe3RoaXMuX2NvbXBhcmVXaXRoPWF9d3JpdGVWYWx1ZShhKXt0aGlzLnZhbHVlPWE7Y29uc3QgaD1tMGUodGhpcy5fZ2V0T3B0aW9uSWQoYSksYSk7dGhpcy5zZXRQcm9wZXJ0eSgidmFsdWUiLGgpfXJlZ2lzdGVyT25DaGFuZ2Uo''@;'; put 'put ''YSl7dGhpcy5vbkNoYW5nZT1kPT57dGhpcy52YWx1ZT10aGlzLl9nZXRPcHRpb25WYWx1ZShkKSxhKHRoaXMudmFsdWUpfX1fcmVnaXN0ZXJPcHRpb24oKXtyZXR1cm4odGhpcy5faWRDb3VudGVyKyspLnRvU3RyaW5nKCl9X2dldE9wdGlvbklkKGEpe2Zvcihjb25zdCBkIG9mIHRoaXMuX29w''@;'; put 'put ''dGlvbk1hcC5rZXlzKCkpaWYodGhpcy5fY29tcGFyZVdpdGgodGhpcy5fb3B0aW9uTWFwLmdldChkKSxhKSlyZXR1cm4gZDtyZXR1cm4gbnVsbH1fZ2V0T3B0aW9uVmFsdWUoYSl7Y29uc3QgZD1mdW5jdGlvbiB5T2UoYyl7cmV0dXJuIGMuc3BsaXQoIjoiKVswXX0oYSk7cmV0dXJuIHRoaXMu''@;'; put 'put ''X29wdGlvbk1hcC5oYXMoZCk/dGhpcy5fb3B0aW9uTWFwLmdldChkKTphfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz0oKCk9PntsZXQgYTtyZXR1cm4gZnVuY3Rpb24oaCl7cmV0dXJuKGF8fChhPVdzKGMpKSkoaHx8Yyl9fSkoKX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxl''@;'; put 'put ''Y3RvcnM6W1sic2VsZWN0IiwiZm9ybUNvbnRyb2xOYW1lIiwiIiwzLCJtdWx0aXBsZSIsIiJdLFsic2VsZWN0IiwiZm9ybUNvbnRyb2wiLCIiLDMsIm11bHRpcGxlIiwiIl0sWyJzZWxlY3QiLCJuZ01vZGVsIiwiIiwzLCJtdWx0aXBsZSIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZCxo''@;'; put 'put ''KXsxJmQmJkZ0KCJjaGFuZ2UiLGZ1bmN0aW9uKHYpe3JldHVybiBoLm9uQ2hhbmdlKHYudGFyZ2V0LnZhbHVlKX0pKCJibHVyIixmdW5jdGlvbigpe3JldHVybiBoLm9uVG91Y2hlZCgpfSl9LGlucHV0czp7Y29tcGFyZVdpdGg6ImNvbXBhcmVXaXRoIn0sZmVhdHVyZXM6W2RhKFtiT2VdKSx3''@;'; put 'put ''YV19KX19cmV0dXJuIGN9KSgpLEEyPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuX2VsZW1lbnQ9YSx0aGlzLl9yZW5kZXJlcj1kLHRoaXMuX3NlbGVjdD1oLHRoaXMuX3NlbGVjdCYmKHRoaXMuaWQ9dGhpcy5fc2VsZWN0Ll9yZWdpc3Rlck9wdGlvbigpKX1zZXQgbmdW''@;'; put 'put ''YWx1ZShhKXtudWxsIT10aGlzLl9zZWxlY3QmJih0aGlzLl9zZWxlY3QuX29wdGlvbk1hcC5zZXQodGhpcy5pZCxhKSx0aGlzLl9zZXRFbGVtZW50VmFsdWUobTBlKHRoaXMuaWQsYSkpLHRoaXMuX3NlbGVjdC53cml0ZVZhbHVlKHRoaXMuX3NlbGVjdC52YWx1ZSkpfXNldCB2YWx1ZShhKXt0''@;'; put 'put ''aGlzLl9zZXRFbGVtZW50VmFsdWUoYSksdGhpcy5fc2VsZWN0JiZ0aGlzLl9zZWxlY3Qud3JpdGVWYWx1ZSh0aGlzLl9zZWxlY3QudmFsdWUpfV9zZXRFbGVtZW50VmFsdWUoYSl7dGhpcy5fcmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LCJ2YWx1ZSIs''@;'; put 'put ''YSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9zZWxlY3QmJih0aGlzLl9zZWxlY3QuX29wdGlvbk1hcC5kZWxldGUodGhpcy5pZCksdGhpcy5fc2VsZWN0LndyaXRlVmFsdWUodGhpcy5fc2VsZWN0LnZhbHVlKSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8''@;'; put 'put ''YykoR2UoSmkpLEdlKEVvKSxHZShUMiw5KSl9fXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyJvcHRpb24iXV0saW5wdXRzOntuZ1ZhbHVlOiJuZ1ZhbHVlIix2YWx1ZToidmFsdWUifX0pfX1yZXR1cm4gY30pKCk7Y29uc3QgX09lPXtwcm92aWRlOmJwLHVz''@;'; put 'put ''ZUV4aXN0aW5nOkNzKCgpPT5teCksbXVsdGk6ITB9O2Z1bmN0aW9uIHYwZShjLGwpe3JldHVybiBudWxsPT1jP2Ake2x9YDooInN0cmluZyI9PXR5cGVvZiBsJiYobD1gJyR7bH0nYCksbCYmIm9iamVjdCI9PXR5cGVvZiBsJiYobD0iT2JqZWN0IiksYCR7Y306ICR7bH1gLnNsaWNlKDAsNTAp''@;'; put 'put ''KX1sZXQgbXg9KCgpPT57Y2xhc3MgYyBleHRlbmRzIGE3e2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9vcHRpb25NYXA9bmV3IE1hcCx0aGlzLl9pZENvdW50ZXI9MCx0aGlzLl9jb21wYXJlV2l0aD1PYmplY3QuaXN9c2V0IGNvbXBhcmVXaXRoKGEpe3RoaXMuX2Nv''@;'; put 'put ''bXBhcmVXaXRoPWF9d3JpdGVWYWx1ZShhKXtsZXQgZDtpZih0aGlzLnZhbHVlPWEsQXJyYXkuaXNBcnJheShhKSl7Y29uc3QgaD1hLm1hcChmPT50aGlzLl9nZXRPcHRpb25JZChmKSk7ZD0oZix2KT0+e2YuX3NldFNlbGVjdGVkKGguaW5kZXhPZih2LnRvU3RyaW5nKCkpPi0xKX19ZWxzZSBk''@;'; put 'put ''PShoLGYpPT57aC5fc2V0U2VsZWN0ZWQoITEpfTt0aGlzLl9vcHRpb25NYXAuZm9yRWFjaChkKX1yZWdpc3Rlck9uQ2hhbmdlKGEpe3RoaXMub25DaGFuZ2U9ZD0+e2NvbnN0IGg9W10sZj1kLnNlbGVjdGVkT3B0aW9ucztpZih2b2lkIDAhPT1mKXtjb25zdCB2PWY7Zm9yKGxldCBNPTA7TTx2''@;'; put 'put ''Lmxlbmd0aDtNKyspe2NvbnN0IFo9dGhpcy5fZ2V0T3B0aW9uVmFsdWUodltNXS52YWx1ZSk7aC5wdXNoKFopfX1lbHNle2NvbnN0IHY9ZC5vcHRpb25zO2ZvcihsZXQgTT0wO008di5sZW5ndGg7TSsrKXtjb25zdCBEPXZbTV07aWYoRC5zZWxlY3RlZCl7Y29uc3QgWj10aGlzLl9nZXRPcHRp''@;'; put 'put ''b25WYWx1ZShELnZhbHVlKTtoLnB1c2goWil9fX10aGlzLnZhbHVlPWgsYShoKX19X3JlZ2lzdGVyT3B0aW9uKGEpe2NvbnN0IGQ9KHRoaXMuX2lkQ291bnRlcisrKS50b1N0cmluZygpO3JldHVybiB0aGlzLl9vcHRpb25NYXAuc2V0KGQsYSksZH1fZ2V0T3B0aW9uSWQoYSl7Zm9yKGNvbnN0''@;'; put 'put ''IGQgb2YgdGhpcy5fb3B0aW9uTWFwLmtleXMoKSlpZih0aGlzLl9jb21wYXJlV2l0aCh0aGlzLl9vcHRpb25NYXAuZ2V0KGQpLl92YWx1ZSxhKSlyZXR1cm4gZDtyZXR1cm4gbnVsbH1fZ2V0T3B0aW9uVmFsdWUoYSl7Y29uc3QgZD1mdW5jdGlvbiB3T2UoYyl7cmV0dXJuIGMuc3BsaXQoIjoi''@;'; put 'put ''KVswXX0oYSk7cmV0dXJuIHRoaXMuX29wdGlvbk1hcC5oYXMoZCk/dGhpcy5fb3B0aW9uTWFwLmdldChkKS5fdmFsdWU6YX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9KCgpPT57bGV0IGE7cmV0dXJuIGZ1bmN0aW9uKGgpe3JldHVybihhfHwoYT1XcyhjKSkpKGh8fGMpfX0pKCl9c3RhdGlje3Ro''@;'; put 'put ''aXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbInNlbGVjdCIsIm11bHRpcGxlIiwiIiwiZm9ybUNvbnRyb2xOYW1lIiwiIl0sWyJzZWxlY3QiLCJtdWx0aXBsZSIsIiIsImZvcm1Db250cm9sIiwiIl0sWyJzZWxlY3QiLCJtdWx0aXBsZSIsIiIsIm5nTW9kZWwiLCIiXV0saG9z''@;'; put 'put ''dEJpbmRpbmdzOmZ1bmN0aW9uKGQsaCl7MSZkJiZGdCgiY2hhbmdlIixmdW5jdGlvbih2KXtyZXR1cm4gaC5vbkNoYW5nZSh2LnRhcmdldCl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gaC5vblRvdWNoZWQoKX0pfSxpbnB1dHM6e2NvbXBhcmVXaXRoOiJjb21wYXJlV2l0aCJ9LGZlYXR1''@;'; put 'put ''cmVzOltkYShbX09lXSksd2FdfSl9fXJldHVybiBjfSkoKSxrMj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLl9lbGVtZW50PWEsdGhpcy5fcmVuZGVyZXI9ZCx0aGlzLl9zZWxlY3Q9aCx0aGlzLl9zZWxlY3QmJih0aGlzLmlkPXRoaXMuX3NlbGVjdC5fcmVnaXN0ZXJP''@;'; put 'put ''cHRpb24odGhpcykpfXNldCBuZ1ZhbHVlKGEpe251bGwhPXRoaXMuX3NlbGVjdCYmKHRoaXMuX3ZhbHVlPWEsdGhpcy5fc2V0RWxlbWVudFZhbHVlKHYwZSh0aGlzLmlkLGEpKSx0aGlzLl9zZWxlY3Qud3JpdGVWYWx1ZSh0aGlzLl9zZWxlY3QudmFsdWUpKX1zZXQgdmFsdWUoYSl7dGhpcy5f''@;'; put 'put ''c2VsZWN0Pyh0aGlzLl92YWx1ZT1hLHRoaXMuX3NldEVsZW1lbnRWYWx1ZSh2MGUodGhpcy5pZCxhKSksdGhpcy5fc2VsZWN0LndyaXRlVmFsdWUodGhpcy5fc2VsZWN0LnZhbHVlKSk6dGhpcy5fc2V0RWxlbWVudFZhbHVlKGEpfV9zZXRFbGVtZW50VmFsdWUoYSl7dGhpcy5fcmVuZGVyZXIu''@;'; put 'put ''c2V0UHJvcGVydHkodGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LCJ2YWx1ZSIsYSl9X3NldFNlbGVjdGVkKGEpe3RoaXMuX3JlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudCwic2VsZWN0ZWQiLGEpfW5nT25EZXN0cm95KCl7dGhpcy5fc2VsZWN0JiYo''@;'; put 'put ''dGhpcy5fc2VsZWN0Ll9vcHRpb25NYXAuZGVsZXRlKHRoaXMuaWQpLHRoaXMuX3NlbGVjdC53cml0ZVZhbHVlKHRoaXMuX3NlbGVjdC52YWx1ZSkpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKEppKSxHZShFbyksR2UobXgsOSkpfX1zdGF0''@;'; put 'put ''aWN7dGhpcy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1sib3B0aW9uIl1dLGlucHV0czp7bmdWYWx1ZToibmdWYWx1ZSIsdmFsdWU6InZhbHVlIn19KX19cmV0dXJuIGN9KSgpLGM3PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl92YWxpZGF0b3I9c0x9bmdPbkNo''@;'; put 'put ''YW5nZXMoYSl7aWYodGhpcy5pbnB1dE5hbWUgaW4gYSl7Y29uc3QgZD10aGlzLm5vcm1hbGl6ZUlucHV0KGFbdGhpcy5pbnB1dE5hbWVdLmN1cnJlbnRWYWx1ZSk7dGhpcy5fZW5hYmxlZD10aGlzLmVuYWJsZWQoZCksdGhpcy5fdmFsaWRhdG9yPXRoaXMuX2VuYWJsZWQ/dGhpcy5jcmVhdGVW''@;'; put 'put ''YWxpZGF0b3IoZCk6c0wsdGhpcy5fb25DaGFuZ2UmJnRoaXMuX29uQ2hhbmdlKCl9fXZhbGlkYXRlKGEpe3JldHVybiB0aGlzLl92YWxpZGF0b3IoYSl9cmVnaXN0ZXJPblZhbGlkYXRvckNoYW5nZShhKXt0aGlzLl9vbkNoYW5nZT1hfWVuYWJsZWQoYSl7cmV0dXJuIG51bGwhPWF9c3RhdGlj''@;'; put 'put ''e3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlwZTpjLGZlYXR1cmVzOlt3bF19KX19cmV0dXJuIGN9KSgpO2NvbnN0IE1PZT17cHJvdmlkZTpoMCx1c2VFeGlzdGluZzpDcygoKT0+YVkpLG11bHRpOiEwfSx4''@;'; put 'put ''T2U9e3Byb3ZpZGU6aDAsdXNlRXhpc3Rpbmc6Q3MoKCk9Pm9ZKSxtdWx0aTohMH07bGV0IGFZPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBjN3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5pbnB1dE5hbWU9InJlcXVpcmVkIix0aGlzLm5vcm1hbGl6ZUlucHV0PXMxLHRo''@;'; put 'put ''aXMuY3JlYXRlVmFsaWRhdG9yPWE9PkZ1ZX1lbmFibGVkKGEpe3JldHVybiBhfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz0oKCk9PntsZXQgYTtyZXR1cm4gZnVuY3Rpb24oaCl7cmV0dXJuKGF8fChhPVdzKGMpKSkoaHx8Yyl9fSkoKX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9RXIoe3R5cGU6Yyxz''@;'; put 'put ''ZWxlY3RvcnM6W1siIiwicmVxdWlyZWQiLCIiLCJmb3JtQ29udHJvbE5hbWUiLCIiLDMsInR5cGUiLCJjaGVja2JveCJdLFsiIiwicmVxdWlyZWQiLCIiLCJmb3JtQ29udHJvbCIsIiIsMywidHlwZSIsImNoZWNrYm94Il0sWyIiLCJyZXF1aXJlZCIsIiIsIm5nTW9kZWwiLCIiLDMsInR5cGUi''@;'; put 'put ''LCJjaGVja2JveCJdXSxob3N0VmFyczoxLGhvc3RCaW5kaW5nczpmdW5jdGlvbihkLGgpezImZCYmaHIoInJlcXVpcmVkIixoLl9lbmFibGVkPyIiOm51bGwpfSxpbnB1dHM6e3JlcXVpcmVkOiJyZXF1aXJlZCJ9LGZlYXR1cmVzOltkYShbTU9lXSksd2FdfSl9fXJldHVybiBjfSkoKSxvWT0o''@;'; put 'put ''KCk9PntjbGFzcyBjIGV4dGVuZHMgYVl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuY3JlYXRlVmFsaWRhdG9yPWE9Pkh1ZX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9KCgpPT57bGV0IGE7cmV0dXJuIGZ1bmN0aW9uKGgpe3JldHVybihhfHwoYT1XcyhjKSkpKGh8fGMp''@;'; put 'put ''fX0pKCl9c3RhdGlje3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbImlucHV0IiwidHlwZSIsImNoZWNrYm94IiwicmVxdWlyZWQiLCIiLCJmb3JtQ29udHJvbE5hbWUiLCIiXSxbImlucHV0IiwidHlwZSIsImNoZWNrYm94IiwicmVxdWlyZWQiLCIiLCJmb3JtQ29udHJv''@;'; put 'put ''bCIsIiJdLFsiaW5wdXQiLCJ0eXBlIiwiY2hlY2tib3giLCJyZXF1aXJlZCIsIiIsIm5nTW9kZWwiLCIiXV0saG9zdFZhcnM6MSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZCxoKXsyJmQmJmhyKCJyZXF1aXJlZCIsaC5fZW5hYmxlZD8iIjpudWxsKX0sZmVhdHVyZXM6W2RhKFt4T2VdKSx3YV19''@;'; put 'put ''KX19cmV0dXJuIGN9KSgpLEUwZT0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1Bcih7fSl9fXJldHVybiBjfSkoKSxS''@;'; put 'put ''Yz0oKCk9PntjbGFzcyBje3N0YXRpYyB3aXRoQ29uZmlnKGEpe3JldHVybntuZ01vZHVsZTpjLHByb3ZpZGVyczpbe3Byb3ZpZGU6czcsdXNlVmFsdWU6YS5jYWxsU2V0RGlzYWJsZWRTdGF0ZT8/Znh9XX19c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8''@;'; put 'put ''Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1raSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltFMGVdfSl9fXJldHVybiBjfSkoKSxJT2U9KCgpPT57Y2xhc3MgY3tzdGF0aWMgd2l0aENvbmZpZyhhKXtyZXR1cm57bmdNb2R1bGU6Yyxwcm92aWRlcnM6W3tw''@;'; put 'put ''cm92aWRlOnJZLHVzZVZhbHVlOmEud2Fybk9uTmdNb2RlbFdpdGhGb3JtQ29udHJvbD8/ImFsd2F5cyJ9LHtwcm92aWRlOnM3LHVzZVZhbHVlOmEuY2FsbFNldERpc2FibGVkU3RhdGU/P2Z4fV19fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1z''@;'; put 'put ''dGF0aWN7dGhpcy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbRTBlXX0pfX1yZXR1cm4gY30pKCk7Y29uc3QgRXk9WyJhbmdsZSIse291dGxpbmU6JzxwYXRoIGQ9Ik0yOS41MiwyMi41MiwxOCwxMC42LDYuNDgsMjIuNTJhMS43LDEu''@;'; put 'put ''NywwLDAsMCwyLjQ1LDIuMzZMMTgsMTUuNDlsOS4wOCw5LjM5YTEuNywxLjcsMCwwLDAsMi40NS0yLjM2WiIvPid9XSx2aD1bImV4Y2xhbWF0aW9uLWNpcmNsZSIse291dGxpbmU6JzxwYXRoIGQ9Ik0xOCAxOS44QzE4LjU1IDE5LjggMTkgMTkuMzUgMTkgMTguOFYxM0MxOSAxMi40NSAxOC41''@;'; put 'put ''NSAxMiAxOCAxMkMxNy40NSAxMiAxNyAxMi40NSAxNyAxM1YxOC44QzE3IDE5LjM1IDE3LjQ1IDE5LjggMTggMTkuOFpNMTguODUgMjEuOTVDMTguNzMgMjEuODQgMTguNiAyMS43NSAxOC40NiAyMS42OUMxOC4xNyAyMS41NyAxNy44MyAyMS41NyAxNy41NCAyMS42OUMxNy40IDIxLjc1IDE3''@;'; put 'put ''LjI3IDIxLjg0IDE3LjE1IDIxLjk1QzE2LjkzIDIyLjE4IDE2LjggMjIuNDggMTYuOCAyMi44QzE2LjggMjMuMTIgMTYuOTMgMjMuNDIgMTcuMTUgMjMuNjVDMTcuMjcgMjMuNzYgMTcuNCAyMy44NSAxNy41NCAyMy45MUMxNy42OSAyMy45NyAxNy44NCAyNCAxOCAyNEMxOC4xNiAyNCAxOC4z''@;'; put 'put ''MSAyMy45NyAxOC40NiAyMy45MUMxOC42IDIzLjg1IDE4LjczIDIzLjc2IDE4Ljg1IDIzLjY1QzE5LjA3IDIzLjQyIDE5LjIgMjMuMTIgMTkuMiAyMi44QzE5LjIgMjIuNjQgMTkuMTcgMjIuNDkgMTkuMTEgMjIuMzRDMTkuMDUgMjIuMiAxOC45NiAyMi4wNiAxOC44NSAyMS45NVpNMTggNkMx''@;'; put 'put ''MS4zOCA2IDYgMTEuMzggNiAxOEM2IDI0LjYyIDExLjM4IDMwIDE4IDMwQzI0LjYyIDMwIDMwIDI0LjYyIDMwIDE4QzMwIDExLjM4IDI0LjYyIDYgMTggNlpNMTggMjhDMTIuNDkgMjggOCAyMy41MSA4IDE4QzggMTIuNDkgMTIuNDkgOCAxOCA4QzIzLjUxIDggMjggMTIuNDkgMjggMThDMjgg''@;'; put 'put ''MjMuNTEgMjMuNTEgMjggMTggMjhaIi8+Jyxzb2xpZDonPHBhdGggZD0iTTE4IDZDMTEuMzggNiA2IDExLjM4IDYgMThDNiAyNC42MiAxMS4zOCAzMCAxOCAzMEMyNC42MiAzMCAzMCAyNC42MiAzMCAxOEMzMCAxMS4zOCAyNC42MiA2IDE4IDZaTTE2LjggMTIuNjVDMTYuOCAxMS45OSAxNy4z''@;'; put 'put ''NCAxMS40NSAxOCAxMS40NUMxOC42NiAxMS40NSAxOS4yIDExLjk5IDE5LjIgMTIuNjVWMTguNDVDMTkuMiAxOS4xMSAxOC42NiAxOS42NSAxOCAxOS42NUMxNy4zNCAxOS42NSAxNi44IDE5LjExIDE2LjggMTguNDVWMTIuNjVaTTE4Ljk4IDI0LjE1QzE4Ljg0IDI0LjI4IDE4LjY5IDI0LjM4''@;'; put 'put ''IDE4LjUzIDI0LjQ1QzE4LjM1IDI0LjUyIDE4LjE4IDI0LjU2IDE4IDI0LjU2QzE3LjgyIDI0LjU2IDE3LjY0IDI0LjUzIDE3LjQ2IDI0LjQ1QzE3LjMxIDI0LjM4IDE3LjE2IDI0LjI5IDE3IDI0LjE0QzE2Ljc0IDIzLjg3IDE2LjU5IDIzLjUyIDE2LjU5IDIzLjE1QzE2LjU5IDIyLjc4IDE2''@;'; put 'put ''LjczIDIyLjQ0IDE3IDIyLjE1QzE3LjE0IDIyLjAyIDE3LjI5IDIxLjkyIDE3LjQ1IDIxLjg1QzE3LjYyIDIxLjc4IDE3LjggMjEuNzQgMTcuOTkgMjEuNzRDMTguMTggMjEuNzQgMTguMzYgMjEuNzggMTguNTMgMjEuODVDMTguNjggMjEuOTIgMTguODMgMjIuMDIgMTguOTggMjIuMTVDMTku''@;'; put 'put ''MSAyMi4yNyAxOS4yMSAyMi40MyAxOS4yOCAyMi42MUMxOS4zNSAyMi43OSAxOS4zOSAyMi45NiAxOS4zOSAyMy4xNEMxOS4zOSAyMy41IDE5LjI1IDIzLjg1IDE4Ljk3IDI0LjE0TDE4Ljk4IDI0LjE1WiIvPid9XSxiaD1bImNoZWNrLWNpcmNsZSIse291dGxpbmU6JzxwYXRoIGQ9Ik0yMi42''@;'; put 'put ''MSAxNC4yMkwxNi4yNSAyMC41OEwxMi43MSAxNy4wNEMxMi4zMiAxNi42NSAxMS42OSAxNi42NSAxMS4zIDE3LjA0QzEwLjkxIDE3LjQzIDEwLjkxIDE4LjA2IDExLjMgMTguNDVMMTYuMjUgMjMuNEwyNC4wMyAxNS42MkMyNC40MiAxNS4yMyAyNC40MiAxNC42IDI0LjAzIDE0LjIxQzIzLjY0''@;'; put 'put ''IDEzLjgyIDIzLjAxIDEzLjgyIDIyLjYyIDE0LjIxTDIyLjYxIDE0LjIyWk0xOCA2QzExLjM4IDYgNiAxMS4zOCA2IDE4QzYgMjQuNjIgMTEuMzggMzAgMTggMzBDMjQuNjIgMzAgMzAgMjQuNjIgMzAgMThDMzAgMTEuMzggMjQuNjIgNiAxOCA2Wk0xOCAyOEMxMi40OSAyOCA4IDIzLjUxIDgg''@;'; put 'put ''MThDOCAxMi40OSAxMi40OSA4IDE4IDhDMjMuNTEgOCAyOCAxMi40OSAyOCAxOEMyOCAyMy41MSAyMy41MSAyOCAxOCAyOFoiLz4nLHNvbGlkOic8cGF0aCBkPSJNMTggNkMxMS4zOCA2IDYgMTEuMzggNiAxOEM2IDI0LjYyIDExLjM4IDMwIDE4IDMwQzI0LjYyIDMwIDMwIDI0LjYyIDMwIDE4''@;'; put 'put ''QzMwIDExLjM4IDI0LjYyIDYgMTggNlpNMjQuMTYgMTUuNzhMMTYuMjQgMjMuN0wxMS4xNSAxOC42MUMxMC42OCAxOC4xNCAxMC42OCAxNy4zOCAxMS4xNSAxNi45MUMxMS42MiAxNi40NCAxMi4zOCAxNi40NCAxMi44NSAxNi45MUwxNi4yNCAyMC4zTDIyLjQ2IDE0LjA4QzIyLjkzIDEzLjYx''@;'; put 'put ''IDIzLjY5IDEzLjYxIDI0LjE2IDE0LjA4QzI0LjYzIDE0LjU1IDI0LjYzIDE1LjMxIDI0LjE2IDE1Ljc4WiIvPid9XSxUMGU9WyJlbGxpcHNpcy1ob3Jpem9udGFsIix7b3V0bGluZTonPHBhdGggZD0iTTcuOCAxOC4xQzcuOCAxOS43NTY4IDYuNTAxNjMgMjEuMSA0LjkgMjEuMUMzLjI5ODM3''@;'; put 'put ''IDIxLjEgMiAxOS43NTY4IDIgMTguMUMyIDE2LjQ0MzEgMy4yOTgzNyAxNS4xIDQuOSAxNS4xQzYuNTAxNjMgMTUuMSA3LjggMTYuNDQzMSA3LjggMTguMVoiLz48cGF0aCBkPSJNMTggMjEuMUMxOS42MDE2IDIxLjEgMjAuOSAxOS43NTY4IDIwLjkgMTguMUMyMC45IDE2LjQ0MzEgMTkuNjAx''@;'; put 'put ''NiAxNS4xIDE4IDE1LjFDMTYuMzk4NCAxNS4xIDE1LjEgMTYuNDQzMSAxNS4xIDE4LjFDMTUuMSAxOS43NTY4IDE2LjM5ODQgMjEuMSAxOCAyMS4xWiIvPjxwYXRoIGQ9Ik0zMS4xIDIxLjFDMzIuNzAxNiAyMS4xIDM0IDE5Ljc1NjggMzQgMTguMUMzNCAxNi40NDMxIDMyLjcwMTYgMTUuMSAz''@;'; put 'put ''MS4xIDE1LjFDMjkuNDk4NCAxNS4xIDI4LjIgMTYuNDQzMSAyOC4yIDE4LjFDMjguMiAxOS43NTY4IDI5LjQ5ODQgMjEuMSAzMS4xIDIxLjFaIi8+JyxvdXRsaW5lQmFkZ2VkOic8cGF0aCBkPSJNNC45IDIxLjFDNi41MDE2MyAyMS4xIDcuOCAxOS43NTY4IDcuOCAxOC4xQzcuOCAxNi40NDMx''@;'; put 'put ''IDYuNTAxNjMgMTUuMSA0LjkgMTUuMUMzLjI5ODM3IDE1LjEgMiAxNi40NDMxIDIgMTguMUMyIDE5Ljc1NjggMy4yOTgzNyAyMS4xIDQuOSAyMS4xWiIvPjxwYXRoIGQ9Ik0xOCAyMS4xQzE5LjYwMTYgMjEuMSAyMC45IDE5Ljc1NjggMjAuOSAxOC4xQzIwLjkgMTYuNDQzMSAxOS42MDE2IDE1''@;'; put 'put ''LjEgMTggMTUuMUMxNi4zOTg0IDE1LjEgMTUuMSAxNi40NDMxIDE1LjEgMTguMUMxNS4xIDE5Ljc1NjggMTYuMzk4NCAyMS4xIDE4IDIxLjFaIi8+PHBhdGggZD0iTTM0IDE4LjFDMzQgMTkuNzU2OCAzMi43MDE2IDIxLjEgMzEuMSAyMS4xQzI5LjQ5ODQgMjEuMSAyOC4yIDE5Ljc1NjggMjgu''@;'; put 'put ''MiAxOC4xQzI4LjIgMTYuNDQzMSAyOS40OTg0IDE1LjEgMzEuMSAxNS4xQzMyLjcwMTYgMTUuMSAzNCAxNi40NDMxIDM0IDE4LjFaIi8+PHBhdGggZD0iTTMwIDExQzMyLjc2MTQgMTEgMzUgOC43NjE0MiAzNSA2QzM1IDMuMjM4NTggMzIuNzYxNCAxIDMwIDFDMjcuMjM4NiAxIDI1IDMuMjM4''@;'; put 'put ''NTggMjUgNkMyNSA4Ljc2MTQyIDI3LjIzODYgMTEgMzAgMTFaIi8+J31dLHZ4PVsid2luZG93LWNsb3NlIix7b3V0bGluZTonPHBhdGggZD0iTTE5LjQxIDE4LjAwMDNMMjYuNyAxMC43MTAzQzI3LjAzOTggMTAuMzEzNSAyNy4wMTY5IDkuNzIyMDcgMjYuNjQ3NiA5LjM1MjdDMjYuMjc4MiA4''@;'; put 'put ''Ljk4MzMzIDI1LjY4NjggOC45NjA0OSAyNS4yOSA5LjMwMDI2TDE4IDE2LjU5MDNMMTAuNzEgOS4yOTAyNkMxMC4zMTMyIDguOTUwNDkgOS43MjE4MSA4Ljk3MzMzIDkuMzUyNDQgOS4zNDI3QzguOTgzMDcgOS43MTIwNyA4Ljk2MDIzIDEwLjMwMzUgOS4zMDAwMSAxMC43MDAzTDE2LjU5IDE4''@;'; put 'put ''LjAwMDNMOS4yOTAwMSAyNS4yOTAzQzkuMDA0NjMgMjUuNTM0NyA4Ljg4MDMyIDI1LjkxODQgOC45NjgxOSAyNi4yODM3QzkuMDU2MDcgMjYuNjQ5IDkuMzQxMjkgMjYuOTM0MiA5LjcwNjU5IDI3LjAyMjFDMTAuMDcxOSAyNy4xMDk5IDEwLjQ1NTYgMjYuOTg1NiAxMC43IDI2LjcwMDNMMTgg''@;'; put 'put ''MTkuNDEwM0wyNS4yOSAyNi43MDAzQzI1LjY4NjggMjcuMDQgMjYuMjc4MiAyNy4wMTcyIDI2LjY0NzYgMjYuNjQ3OEMyNy4wMTY5IDI2LjI3ODUgMjcuMDM5OCAyNS42ODcgMjYuNyAyNS4yOTAzTDE5LjQxIDE4LjAwMDNaIi8+J31dLFJPZT1bImluZm8tY2lyY2xlIix7b3V0bGluZTonPHBh''@;'; put 'put ''dGggZD0iTTIxIDIzSDE5VjE1SDE2QzE1LjQ1IDE1IDE1IDE1LjQ1IDE1IDE2QzE1IDE2LjU1IDE1LjQ1IDE3IDE2IDE3SDE3VjIzSDE1QzE0LjQ1IDIzIDE0IDIzLjQ1IDE0IDI0QzE0IDI0LjU1IDE0LjQ1IDI1IDE1IDI1SDIxQzIxLjU1IDI1IDIyIDI0LjU1IDIyIDI0QzIyIDIzLjQ1IDIx''@;'; put 'put ''LjU1IDIzIDIxIDIzWk0xNy45MyAxMy4zQzE4LjcgMTMuMyAxOS4zMyAxMi42NyAxOS4zMyAxMS45QzE5LjMzIDExLjEzIDE4LjcgMTAuNSAxNy45MyAxMC41QzE3LjE2IDEwLjUgMTYuNTMgMTEuMTMgMTYuNTMgMTEuOUMxNi41MyAxMi42NyAxNy4xNiAxMy4zIDE3LjkzIDEzLjNaTTE4IDZD''@;'; put 'put ''MTEuMzggNiA2IDExLjM4IDYgMThDNiAyNC42MiAxMS4zOCAzMCAxOCAzMEMyNC42MiAzMCAzMCAyNC42MiAzMCAxOEMzMCAxMS4zOCAyNC42MiA2IDE4IDZaTTE4IDI4QzEyLjQ5IDI4IDggMjMuNTEgOCAxOEM4IDEyLjQ5IDEyLjQ5IDggMTggOEMyMy41MSA4IDI4IDEyLjQ5IDI4IDE4QzI4''@;'; put 'put ''IDIzLjUxIDIzLjUxIDI4IDE4IDI4WiIvPicsc29saWQ6JzxwYXRoIGQ9Ik0xOCA2QzExLjM4IDYgNiAxMS4zOCA2IDE4QzYgMjQuNjIgMTEuMzggMzAgMTggMzBDMjQuNjIgMzAgMzAgMjQuNjIgMzAgMThDMzAgMTEuMzggMjQuNjIgNiAxOCA2Wk0xNy45MyAxMC4zQzE4LjgxIDEwLjMgMTku''@;'; put 'put ''NTMgMTEuMDIgMTkuNTMgMTEuOUMxOS41MyAxMi43OCAxOC44MSAxMy41IDE3LjkzIDEzLjVDMTcuMDUgMTMuNSAxNi4zMyAxMi43OCAxNi4zMyAxMS45QzE2LjMzIDExLjAyIDE3LjA1IDEwLjMgMTcuOTMgMTAuM1pNMjEgMjUuMkgxNUMxNC4zNCAyNS4yIDEzLjggMjQuNjYgMTMuOCAyNEMx''@;'; put 'put ''My44IDIzLjM0IDE0LjM0IDIyLjggMTUgMjIuOEgxNi44VjE3LjJIMTZDMTUuMzQgMTcuMiAxNC44IDE2LjY2IDE0LjggMTZDMTQuOCAxNS4zNCAxNS4zNCAxNC44IDE2IDE0LjhIMTkuMlYyMi44SDIxQzIxLjY2IDIyLjggMjIuMiAyMy4zNCAyMi4yIDI0QzIyLjIgMjQuNjYgMjEuNjYgMjUu''@;'; put 'put ''MiAyMSAyNS4yWiIvPid9XSxBMGU9WyJ0aW1lcyIse291dGxpbmU6JzxwYXRoIGQ9Ik0xOS40Njk2IDE3Ljk3MzJMMjcuNzU5NiA5LjcwNTQyQzI4LjA5OTQgOS4zMDk3MiAyOC4wNzY1IDguNzE5ODcgMjcuNzA3MSA4LjM1MTQ4QzI3LjMzNzggNy45ODMxIDI2Ljc0NjMgNy45NjAzMiAyNi4z''@;'; put 'put ''NDk2IDguMjk5MTlMMTguMDU5NiAxNi41NjdMOS43Njk1OCA4LjI4OTIyQzkuMzc3NDUgNy44OTgxNCA4Ljc0MTcgNy44OTgxNCA4LjM0OTU4IDguMjg5MjJDNy45NTc0NSA4LjY4MDI5IDcuOTU3NDUgOS4zMTQzNCA4LjM0OTU4IDkuNzA1NDJMMTYuNjQ5NiAxNy45NzMyTDguMzQ5NTggMjYu''@;'; put 'put ''MjQxQzguMDY0MiAyNi40ODQ4IDcuOTM5ODkgMjYuODY3NSA4LjAyNzc3IDI3LjIzMThDOC4xMTU2NCAyNy41OTYxIDguNDAwODYgMjcuODgwNiA4Ljc2NjE2IDI3Ljk2ODJDOS4xMzE0NiAyOC4wNTU5IDkuNTE1MTkgMjcuOTMxOSA5Ljc1OTU4IDI3LjY0NzNMMTguMDU5NiAxOS4zNzk1TDI2''@;'; put 'put ''LjM0OTYgMjcuNjQ3M0MyNi43NDYzIDI3Ljk4NjEgMjcuMzM3OCAyNy45NjM0IDI3LjcwNzEgMjcuNTk1QzI4LjA3NjUgMjcuMjI2NiAyOC4wOTk0IDI2LjYzNjcgMjcuNzU5NiAyNi4yNDFMMTkuNDY5NiAxNy45NzMyWiIvPid9XSxrMGU9WyJhbmdsZS1kb3VibGUiLHtvdXRsaW5lOic8cGF0''@;'; put 'put ''aCBkPSJNMjguMzQ5MSAxNy44OTk2QzI4LjUzODQgMTguMDgzNyAyOC43OTQ1IDE4LjE4NjMgMjkuMDYxIDE4LjE4NDhDMjkuNDY0IDE4LjE4MzEgMjkuODI2OCAxNy45NDUxIDI5Ljk4MjEgMTcuNTgwNUMzMC4xMzc0IDE3LjIxNTggMzAuMDU1IDE2Ljc5NTUgMjkuNzcyOSAxNi41MTMzTDE4''@;'; put 'put ''LjAzMTggNUw2LjMwMDY3IDE2LjUxMzNDNS45NTk5OSAxNi45MDM0IDUuOTgyODkgMTcuNDg0OSA2LjM1MzI1IDE3Ljg0ODFDNi43MjM2IDE4LjIxMTIgNy4zMTY2IDE4LjIzMzcgNy43MTQ0MiAxNy44OTk2TDE4LjAzMTggNy43ODI0NkwyOC4zNDkxIDE3Ljg5OTZaIi8+PHBhdGggZD0iTTI4''@;'; put 'put ''LjM0OTEgMjguNzE0OUMyOC41Mzg0IDI4Ljg5ODkgMjguNzk0NSAyOS4wMDE1IDI5LjA2MSAyOUMyOS40NjQgMjguOTk4NCAyOS44MjY4IDI4Ljc2MDMgMjkuOTgyMSAyOC4zOTU3QzMwLjEzNzQgMjguMDMxMSAzMC4wNTUgMjcuNjEwNyAyOS43NzI5IDI3LjMyODVMMTguMDMxOCAxNS44MTUy''@;'; put 'put ''TDYuMzAwNjcgMjcuMzI4NUM1Ljk1OTk5IDI3LjcxODYgNS45ODI4OSAyOC4zMDAxIDYuMzUzMjUgMjguNjYzM0M2LjcyMzYgMjkuMDI2NSA3LjMxNjYgMjkuMDQ4OSA3LjcxNDQyIDI4LjcxNDlMMTguMDMxOCAxOC41OTc3TDI4LjM0OTEgMjguNzE0OVoiLz4nfV0sTE9lPVsiZXZlbnQiLHtv''@;'; put 'put ''dXRsaW5lOic8cGF0aCBkPSJNMTYuMTcgMjUuODZMMTAuODEgMjAuNUMxMC42NDYyIDIwLjMwODcgMTAuNTYwNiAyMC4wNjI2IDEwLjU3MDMgMTkuODEwOUMxMC41OCAxOS41NTkzIDEwLjY4NDQgMTkuMzIwNSAxMC44NjI0IDE5LjE0MjRDMTEuMDQwNSAxOC45NjQzIDExLjI3OTMgMTguODYg''@;'; put 'put ''MTEuNTMxIDE4Ljg1MDNDMTEuNzgyNiAxOC44NDA2IDEyLjAyODcgMTguOTI2MiAxMi4yMiAxOS4wOUwxNi4xNyAyM0wyNC44MSAxNC4zNkMyNS4wMDEzIDE0LjE5NjIgMjUuMjQ3NCAxNC4xMTA2IDI1LjQ5OTEgMTQuMTIwM0MyNS43NTA3IDE0LjEzIDI1Ljk4OTUgMTQuMjM0MyAyNi4xNjc2''@;'; put 'put ''IDE0LjQxMjRDMjYuMzQ1NyAxNC41OTA1IDI2LjQ1IDE0LjgyOTMgMjYuNDU5NyAxNS4wODA5QzI2LjQ2OTQgMTUuMzMyNiAyNi4zODM4IDE1LjU3ODcgMjYuMjIgMTUuNzdMMTYuMTcgMjUuODZaIi8+PHBhdGggZD0iTTMyLjI1IDZIMjlWOEgzMlYzMEg0LjAwMDAxVjhINy4wMDAwMVY2SDMu''@;'; put 'put ''NzUwMDFDMy41MTYyNSA2LjAwMzkxIDMuMjg1NTUgNi4wNTM4MyAzLjA3MTA4IDYuMTQ2OTFDMi44NTY2MSA2LjIzOTk5IDIuNjYyNTggNi4zNzQ0MSAyLjUwMDA3IDYuNTQyNDlDMi4zMzc1NyA2LjcxMDU3IDIuMjA5NzYgNi45MDkwMiAyLjEyMzk2IDcuMTI2NUMyLjAzODE2IDcuMzQzOTgg''@;'; put 'put ''MS45OTYwNCA3LjU3NjI0IDIuMDAwMDEgNy44MVYzMC4xOUMxLjk5NjA0IDMwLjQyMzggMi4wMzgxNiAzMC42NTYgMi4xMjM5NiAzMC44NzM1QzIuMjA5NzYgMzEuMDkxIDIuMzM3NTcgMzEuMjg5NCAyLjUwMDA3IDMxLjQ1NzVDMi42NjI1OCAzMS42MjU2IDIuODU2NjEgMzEuNzYgMy4wNzEw''@;'; put 'put ''OCAzMS44NTMxQzMuMjg1NTUgMzEuOTQ2MiAzLjUxNjI1IDMxLjk5NjEgMy43NTAwMSAzMkgzMi4yNUMzMi40ODM4IDMxLjk5NjEgMzIuNzE0NSAzMS45NDYyIDMyLjkyODkgMzEuODUzMUMzMy4xNDM0IDMxLjc2IDMzLjMzNzQgMzEuNjI1NiAzMy41IDMxLjQ1NzVDMzMuNjYyNSAzMS4yODk0''@;'; put 'put ''IDMzLjc5MDMgMzEuMDkxIDMzLjg3NjEgMzAuODczNUMzMy45NjE5IDMwLjY1NiAzNC4wMDQgMzAuNDIzOCAzNCAzMC4xOVY3LjgxQzM0LjAwNCA3LjU3NjI0IDMzLjk2MTkgNy4zNDM5OCAzMy44NzYxIDcuMTI2NUMzMy43OTAzIDYuOTA5MDIgMzMuNjYyNSA2LjcxMDU3IDMzLjUgNi41NDI0''@;'; put 'put ''OUMzMy4zMzc0IDYuMzc0NDEgMzMuMTQzNCA2LjIzOTk5IDMyLjkyODkgNi4xNDY5MUMzMi43MTQ1IDYuMDUzODMgMzIuNDgzOCA2LjAwMzkxIDMyLjI1IDZaIi8+PHBhdGggZD0iTTEwIDEwQzEwLjI2NTIgMTAgMTAuNTE5NiA5Ljg5NDY0IDEwLjcwNzEgOS43MDcxMUMxMC44OTQ3IDkuNTE5''@;'; put 'put ''NTcgMTEgOS4yNjUyMiAxMSA5VjNDMTEgMi43MzQ3OCAxMC44OTQ3IDIuNDgwNDMgMTAuNzA3MSAyLjI5Mjg5QzEwLjUxOTYgMi4xMDUzNiAxMC4yNjUyIDIgMTAgMkM5LjczNDggMiA5LjQ4MDQ0IDIuMTA1MzYgOS4yOTI5MSAyLjI5Mjg5QzkuMTA1MzcgMi40ODA0MyA5LjAwMDAxIDIuNzM0''@;'; put 'put ''NzggOS4wMDAwMSAzVjlDOS4wMDAwMSA5LjI2NTIyIDkuMTA1MzcgOS41MTk1NyA5LjI5MjkxIDkuNzA3MTFDOS40ODA0NCA5Ljg5NDY0IDkuNzM0OCAxMCAxMCAxMFoiLz48cGF0aCBkPSJNMjYgMTBDMjYuMjY1MiAxMCAyNi41MTk2IDkuODk0NjQgMjYuNzA3MSA5LjcwNzExQzI2Ljg5NDcg''@;'; put 'put ''OS41MTk1NyAyNyA5LjI2NTIyIDI3IDlWM0MyNyAyLjczNDc4IDI2Ljg5NDcgMi40ODA0MyAyNi43MDcxIDIuMjkyODlDMjYuNTE5NiAyLjEwNTM2IDI2LjI2NTIgMiAyNiAyQzI1LjczNDggMiAyNS40ODA0IDIuMTA1MzYgMjUuMjkyOSAyLjI5Mjg5QzI1LjEwNTQgMi40ODA0MyAyNSAyLjcz''@;'; put 'put ''NDc4IDI1IDNWOUMyNSA5LjI2NTIyIDI1LjEwNTQgOS41MTk1NyAyNS4yOTI5IDkuNzA3MTFDMjUuNDgwNCA5Ljg5NDY0IDI1LjczNDggMTAgMjYgMTBaIi8+PHBhdGggZD0iTTIzIDZIMTNWOEgyM1Y2WiIvPicsb3V0bGluZUFsZXJ0ZWQ6JzxwYXRoIGQ9Ik0yNi45MDM5IDEuNjQ2MjFMMjEu''@;'; put 'put ''MjIyMiAxMS4xMTU5QzIwLjk1MjYgMTEuNDk4NCAyMC45MjgxIDExLjk5NDkgMjEuMTU4OCAxMi40MDA1QzIxLjM4OTYgMTIuODA2IDIxLjgzNjMgMTMuMDUxOSAyMi4zMTQ4IDEzLjAzNjdIMzMuNjg4MUMzNC4xNjY2IDEzLjA1MTkgMzQuNjEzNCAxMi44MDYgMzQuODQ0MSAxMi40MDA1QzM1''@;'; put 'put ''LjA3NDggMTEuOTk0OSAzNS4wNTAzIDExLjQ5ODQgMzQuNzgwOCAxMS4xMTU5TDI5LjA5OTEgMS42NDYyMUMyOC44NzExIDEuMjY5MTMgMjguNDUzMiAxLjAzNzM1IDI4LjAwMTUgMS4wMzczNUMyNy41NDk3IDEuMDM3MzUgMjcuMTMxOSAxLjI2OTEzIDI2LjkwMzkgMS42NDYyMVoiLz48cGF0''@;'; put 'put ''aCBkPSJNMzIgMTUuMDM2N0gzMy42NjM3QzMzLjc3NjQgMTUuMDM4OSAzMy44ODg2IDE1LjAzNTQgMzQgMTUuMDI2M1YzMC4xOUMzNC4wMDQgMzAuNDIzOCAzMy45NjE5IDMwLjY1NiAzMy44NzYxIDMwLjg3MzVDMzMuNzkwMyAzMS4wOTEgMzMuNjYyNSAzMS4yODk0IDMzLjUgMzEuNDU3NUMz''@;'; put 'put ''My4zMzc0IDMxLjYyNTYgMzMuMTQzNCAzMS43NiAzMi45Mjg5IDMxLjg1MzFDMzIuNzE0NSAzMS45NDYyIDMyLjQ4MzggMzEuOTk2MSAzMi4yNSAzMkgzLjc1MDAxQzMuNTE2MjUgMzEuOTk2MSAzLjI4NTU1IDMxLjk0NjIgMy4wNzEwOCAzMS44NTMxQzIuODU2NjEgMzEuNzYgMi42NjI1OCAz''@;'; put 'put ''MS42MjU2IDIuNTAwMDcgMzEuNDU3NUMyLjMzNzU3IDMxLjI4OTQgMi4yMDk3NiAzMS4wOTEgMi4xMjM5NiAzMC44NzM1QzIuMDM4MTYgMzAuNjU2IDEuOTk2MDQgMzAuNDIzOCAyLjAwMDAxIDMwLjE5VjcuODFDMS45OTYwNCA3LjU3NjI0IDIuMDM4MTYgNy4zNDM5OCAyLjEyMzk2IDcuMTI2''@;'; put 'put ''NUMyLjIwOTc2IDYuOTA5MDIgMi4zMzc1NyA2LjcxMDU3IDIuNTAwMDcgNi41NDI0OUMyLjY2MjU4IDYuMzc0NDEgMi44NTY2MSA2LjIzOTk5IDMuMDcxMDggNi4xNDY5MUMzLjI4NTU1IDYuMDUzODMgMy41MTYyNSA2LjAwMzkxIDMuNzUwMDEgNkg3LjAwMDAxVjhINC4wMDAwMVYzMEgzMlYx''@;'; put 'put ''NS4wMzY3WiIvPjxwYXRoIGQ9Ik0yNC4xMzMzIDE1LjAzNjdIMjYuNDU3QzI2LjQ1ODMgMTUuMDUxNCAyNi40NTkyIDE1LjA2NjEgMjYuNDU5NyAxNS4wODA5QzI2LjQ2OTQgMTUuMzMyNiAyNi4zODM4IDE1LjU3ODcgMjYuMjIgMTUuNzdMMTYuMTcgMjUuODZMMTAuODEgMjAuNUMxMC42NDYy''@;'; put 'put ''IDIwLjMwODcgMTAuNTYwNiAyMC4wNjI2IDEwLjU3MDMgMTkuODEwOUMxMC41OCAxOS41NTkzIDEwLjY4NDQgMTkuMzIwNSAxMC44NjI0IDE5LjE0MjRDMTEuMDQwNSAxOC45NjQzIDExLjI3OTMgMTguODYgMTEuNTMxIDE4Ljg1MDNDMTEuNzgyNiAxOC44NDA2IDEyLjAyODcgMTguOTI2MiAx''@;'; put 'put ''Mi4yMiAxOS4wOUwxNi4xNyAyM0wyNC4xMzMzIDE1LjAzNjdaIi8+PHBhdGggZD0iTTIxLjk1OTQgNkwyMC43NTk0IDhIMTNWNkgyMS45NTk0WiIvPjxwYXRoIGQ9Ik0xMC43MDcxIDkuNzA3MTFDMTAuNTE5NiA5Ljg5NDY0IDEwLjI2NTIgMTAgMTAgMTBDOS43MzQ4IDEwIDkuNDgwNDQgOS44''@;'; put 'put ''OTQ2NCA5LjI5MjkxIDkuNzA3MTFDOS4xMDUzNyA5LjUxOTU3IDkuMDAwMDEgOS4yNjUyMiA5LjAwMDAxIDlWM0M5LjAwMDAxIDIuNzM0NzggOS4xMDUzNyAyLjQ4MDQzIDkuMjkyOTEgMi4yOTI4OUM5LjQ4MDQ0IDIuMTA1MzYgOS43MzQ4IDIgMTAgMkMxMC4yNjUyIDIgMTAuNTE5NiAyLjEw''@;'; put 'put ''NTM2IDEwLjcwNzEgMi4yOTI4OUMxMC44OTQ3IDIuNDgwNDMgMTEgMi43MzQ3OCAxMSAzVjlDMTEgOS4yNjUyMiAxMC44OTQ3IDkuNTE5NTcgMTAuNzA3MSA5LjcwNzExWiIvPicsb3V0bGluZUJhZGdlZDonPHBhdGggZD0iTTEwLjgxIDIwLjVMMTYuMTcgMjUuODZMMjYuMjIgMTUuODFDMjYu''@;'; put 'put ''MzgzOCAxNS42MTg3IDI2LjQ2OTQgMTUuMzcyNiAyNi40NTk3IDE1LjEyMDlDMjYuNDUgMTQuODY5MyAyNi4zNDU3IDE0LjYzMDUgMjYuMTY3NiAxNC40NTI0QzI1Ljk4OTUgMTQuMjc0MyAyNS43NTA3IDE0LjE3IDI1LjQ5OTEgMTQuMTYwM0MyNS4yNDc0IDE0LjE1MDYgMjUuMDAxMyAxNC4y''@;'; put 'put ''MzYyIDI0LjgxIDE0LjRMMTYuMTcgMjNMMTIuMjMgMTkuMDZDMTIuMDM4NyAxOC44OTYyIDExLjc5MjYgMTguODEwNiAxMS41NDEgMTguODIwM0MxMS4yODkzIDE4LjgzIDExLjA1MDUgMTguOTM0MyAxMC44NzI0IDE5LjExMjRDMTAuNjk0NCAxOS4yOTA1IDEwLjU5IDE5LjUyOTMgMTAuNTgw''@;'; put 'put ''MyAxOS43ODA5QzEwLjU3MDYgMjAuMDMyNiAxMC42NTYyIDIwLjI3ODcgMTAuODIgMjAuNDdMMTAuODEgMjAuNVoiLz48cGF0aCBkPSJNMTAgMTBDMTAuMjY1MiAxMCAxMC41MTk2IDkuODk0NjQgMTAuNzA3MSA5LjcwNzExQzEwLjg5NDcgOS41MTk1NyAxMSA5LjI2NTIyIDExIDlWM0MxMSAy''@;'; put 'put ''LjczNDc4IDEwLjg5NDcgMi40ODA0MyAxMC43MDcxIDIuMjkyODlDMTAuNTE5NiAyLjEwNTM2IDEwLjI2NTIgMiAxMCAyQzkuNzM0OCAyIDkuNDgwNDQgMi4xMDUzNiA5LjI5MjkxIDIuMjkyODlDOS4xMDUzNyAyLjQ4MDQzIDkuMDAwMDEgMi43MzQ3OCA5LjAwMDAxIDNWOUM5LjAwMDAxIDku''@;'; put 'put ''MjY1MjIgOS4xMDUzNyA5LjUxOTU3IDkuMjkyOTEgOS43MDcxMUM5LjQ4MDQ0IDkuODk0NjQgOS43MzQ4IDEwIDEwIDEwWiIvPjxwYXRoIGQ9Ik0zMiAxMy4yMlYzMEg0LjAwMDAxVjhINy4wMDAwMVY2SDMuNzUwMDFDMy41MTYyNSA2LjAwMzkxIDMuMjg1NTUgNi4wNTM4MyAzLjA3MTA4IDYu''@;'; put 'put ''MTQ2OTFDMi44NTY2MSA2LjIzOTk5IDIuNjYyNTggNi4zNzQ0MSAyLjUwMDA3IDYuNTQyNDlDMi4zMzc1NyA2LjcxMDU3IDIuMjA5NzYgNi45MDkwMiAyLjEyMzk2IDcuMTI2NUMyLjAzODE2IDcuMzQzOTggMS45OTYwNCA3LjU3NjI0IDIuMDAwMDEgNy44MVYzMC4xOUMxLjk5NjA0IDMwLjQy''@;'; put 'put ''MzggMi4wMzgxNiAzMC42NTYgMi4xMjM5NiAzMC44NzM1QzIuMjA5NzYgMzEuMDkxIDIuMzM3NTcgMzEuMjg5NCAyLjUwMDA3IDMxLjQ1NzVDMi42NjI1OCAzMS42MjU2IDIuODU2NjEgMzEuNzYgMy4wNzEwOCAzMS44NTMxQzMuMjg1NTUgMzEuOTQ2MiAzLjUxNjI1IDMxLjk5NjEgMy43NTAw''@;'; put 'put ''MSAzMkgzMi4yNUMzMi40ODM4IDMxLjk5NjEgMzIuNzE0NSAzMS45NDYyIDMyLjkyODkgMzEuODUzMUMzMy4xNDM0IDMxLjc2IDMzLjMzNzQgMzEuNjI1NiAzMy41IDMxLjQ1NzVDMzMuNjYyNSAzMS4yODk0IDMzLjc5MDMgMzEuMDkxIDMzLjg3NjEgMzAuODczNUMzMy45NjE5IDMwLjY1NiAz''@;'; put 'put ''NC4wMDQgMzAuNDIzOCAzNCAzMC4xOVYxMi4zNEMzMy4zODAyIDEyLjczIDMyLjcwNjMgMTMuMDI2NiAzMiAxMy4yMloiLz48cGF0aCBkPSJNMjIuNSA2SDEzVjhIMjIuNzhDMjIuNTk2OCA3LjM0OTAzIDIyLjUwMjYgNi42NzYyNSAyMi41IDZaIi8+PHBhdGggZD0iTTMwIDExQzMyLjc2MTQg''@;'; put 'put ''MTEgMzUgOC43NjE0MiAzNSA2QzM1IDMuMjM4NTggMzIuNzYxNCAxIDMwIDFDMjcuMjM4NiAxIDI1IDMuMjM4NTggMjUgNkMyNSA4Ljc2MTQyIDI3LjIzODYgMTEgMzAgMTFaIi8+Jyxzb2xpZDonPHBhdGggZD0iTTEwIDEwQzEwLjI2NTIgMTAgMTAuNTE5NiA5Ljg5NDY0IDEwLjcwNzEgOS43''@;'; put 'put ''MDcxMUMxMC44OTQ3IDkuNTE5NTcgMTEgOS4yNjUyMiAxMSA5VjNDMTEgMi43MzQ3OCAxMC44OTQ3IDIuNDgwNDMgMTAuNzA3MSAyLjI5Mjg5QzEwLjUxOTYgMi4xMDUzNiAxMC4yNjUyIDIgMTAgMkM5LjczNDggMiA5LjQ4MDQ0IDIuMTA1MzYgOS4yOTI5MSAyLjI5Mjg5QzkuMTA1MzcgMi40''@;'; put 'put ''ODA0MyA5LjAwMDAxIDIuNzM0NzggOS4wMDAwMSAzVjlDOS4wMDAwMSA5LjI2NTIyIDkuMTA1MzcgOS41MTk1NyA5LjI5MjkxIDkuNzA3MTFDOS40ODA0NCA5Ljg5NDY0IDkuNzM0OCAxMCAxMCAxMFoiLz48cGF0aCBkPSJNMjYgMTBDMjYuMjY1MiAxMCAyNi41MTk2IDkuODk0NjQgMjYuNzA3''@;'; put 'put ''MSA5LjcwNzExQzI2Ljg5NDcgOS41MTk1NyAyNyA5LjI2NTIyIDI3IDlWM0MyNyAyLjczNDc4IDI2Ljg5NDcgMi40ODA0MyAyNi43MDcxIDIuMjkyODlDMjYuNTE5NiAyLjEwNTM2IDI2LjI2NTIgMiAyNiAyQzI1LjczNDggMiAyNS40ODA0IDIuMTA1MzYgMjUuMjkyOSAyLjI5Mjg5QzI1LjEw''@;'; put 'put ''NTQgMi40ODA0MyAyNSAyLjczNDc4IDI1IDNWOUMyNSA5LjI2NTIyIDI1LjEwNTQgOS41MTk1NyAyNS4yOTI5IDkuNzA3MTFDMjUuNDgwNCA5Ljg5NDY0IDI1LjczNDggMTAgMjYgMTBaIi8+PHBhdGggZD0iTTMyLjI1IDZIMjguMjVWOUMyOC4yNSA5LjU4MzQ4IDI4LjAxODIgMTAuMTQzMSAy''@;'; put 'put ''Ny42MDU2IDEwLjU1NTZDMjcuMTkzMSAxMC45NjgyIDI2LjYzMzUgMTEuMiAyNi4wNSAxMS4yQzI1LjQ2NjUgMTEuMiAyNC45MDcgMTAuOTY4MiAyNC40OTQ0IDEwLjU1NTZDMjQuMDgxOCAxMC4xNDMxIDIzLjg1IDkuNTgzNDggMjMuODUgOVY2SDEyLjJWOUMxMi4yIDkuNTgzNDggMTEuOTY4''@;'; put 'put ''MiAxMC4xNDMxIDExLjU1NTYgMTAuNTU1NkMxMS4xNDMxIDEwLjk2ODIgMTAuNTgzNSAxMS4yIDEwIDExLjJDOS40MTY1NCAxMS4yIDguODU2OTYgMTAuOTY4MiA4LjQ0NDM4IDEwLjU1NTZDOC4wMzE4IDEwLjE0MzEgNy44MDAwMSA5LjU4MzQ4IDcuODAwMDEgOVY2SDMuODAwMDFDMy41NjIw''@;'; put 'put ''NCA1Ljk5NzI5IDMuMzI1OTMgNi4wNDIzMyAzLjEwNTY3IDYuMTMyNDZDMi44ODU0IDYuMjIyNTkgMi42ODU0NSA2LjM1NTk3IDIuNTE3NjMgNi41MjQ3M0MyLjM0OTgxIDYuNjkzNDggMi4yMTc1MyA2Ljg5NDE3IDIuMTI4NjMgNy4xMTQ5M0MyLjAzOTcyIDcuMzM1NjkgMS45OTU5OSA3LjU3''@;'; put 'put ''MjA0IDIuMDAwMDEgNy44MVYzMC4xOUMxLjk5NjA0IDMwLjQyMzggMi4wMzgxNiAzMC42NTYgMi4xMjM5NiAzMC44NzM1QzIuMjA5NzYgMzEuMDkxIDIuMzM3NTcgMzEuMjg5NCAyLjUwMDA3IDMxLjQ1NzVDMi42NjI1OCAzMS42MjU2IDIuODU2NjEgMzEuNzYgMy4wNzEwOCAzMS44NTMxQzMu''@;'; put 'put ''Mjg1NTUgMzEuOTQ2MiAzLjUxNjI1IDMxLjk5NjEgMy43NTAwMSAzMkgzMi4yNUMzMi40ODM4IDMxLjk5NjEgMzIuNzE0NSAzMS45NDYyIDMyLjkyODkgMzEuODUzMUMzMy4xNDM0IDMxLjc2IDMzLjMzNzQgMzEuNjI1NiAzMy41IDMxLjQ1NzVDMzMuNjYyNSAzMS4yODk0IDMzLjc5MDMgMzEu''@;'; put 'put ''MDkxIDMzLjg3NjEgMzAuODczNUMzMy45NjE5IDMwLjY1NiAzNC4wMDQgMzAuNDIzOCAzNCAzMC4xOVY3LjgxQzM0LjAwNCA3LjU3NjI0IDMzLjk2MTkgNy4zNDM5OCAzMy44NzYxIDcuMTI2NUMzMy43OTAzIDYuOTA5MDIgMzMuNjYyNSA2LjcxMDU3IDMzLjUgNi41NDI0OUMzMy4zMzc0IDYu''@;'; put 'put ''Mzc0NDEgMzMuMTQzNCA2LjIzOTk5IDMyLjkyODkgNi4xNDY5MUMzMi43MTQ1IDYuMDUzODMgMzIuNDgzOCA2LjAwMzkxIDMyLjI1IDZaTTI1Ljk0IDE2LjU4TDE2LjI3IDI2LjI1TDExIDIwLjk0QzEwLjc2NjUgMjAuNjgzMiAxMC42NDAxIDIwLjM0NjkgMTAuNjQ2NSAxOS45OTk5QzEwLjY1''@;'; put 'put ''MjkgMTkuNjUyOSAxMC43OTE4IDE5LjMyMTUgMTEuMDM0NiAxOS4wNzM1QzExLjI3NzUgMTguODI1NSAxMS42MDU5IDE4LjY3OTggMTEuOTUyNyAxOC42NjYxQzEyLjI5OTUgMTguNjUyNSAxMi42Mzg0IDE4Ljc3MTkgMTIuOSAxOUwxNi4yOCAyMi4zOEwyNCAxNC42NkMyNC4xMjY3IDE0LjUz''@;'; put 'put ''MzMgMjQuMjc3MiAxNC40MzI3IDI0LjQ0MjggMTQuMzY0MkMyNC42MDgzIDE0LjI5NTYgMjQuNzg1OCAxNC4yNjAzIDI0Ljk2NSAxNC4yNjAzQzI1LjE0NDIgMTQuMjYwMyAyNS4zMjE3IDE0LjI5NTYgMjUuNDg3MyAxNC4zNjQyQzI1LjY1MjggMTQuNDMyNyAyNS44MDMzIDE0LjUzMzMgMjUu''@;'; put 'put ''OTMgMTQuNjZDMjYuMDU2NyAxNC43ODY3IDI2LjE1NzMgMTQuOTM3MiAyNi4yMjU4IDE1LjEwMjdDMjYuMjk0NCAxNS4yNjgzIDI2LjMyOTcgMTUuNDQ1OCAyNi4zMjk3IDE1LjYyNUMyNi4zMjk3IDE1LjgwNDIgMjYuMjk0NCAxNS45ODE3IDI2LjIyNTggMTYuMTQ3M0MyNi4xNTczIDE2LjMx''@;'; put 'put ''MjggMjYuMDU2NyAxNi40NjMzIDI1LjkzIDE2LjU5TDI1Ljk0IDE2LjU4WiIvPicsc29saWRBbGVydGVkOic8cGF0aCBkPSJNMjYuOTAzOSAxLjY0NjIxTDIxLjIyMjIgMTEuMTE1OUMyMC45NTI2IDExLjQ5ODQgMjAuOTI4MSAxMS45OTQ5IDIxLjE1ODggMTIuNDAwNUMyMS4zODk2IDEyLjgw''@;'; put 'put ''NiAyMS44MzYzIDEzLjA1MTkgMjIuMzE0OCAxMy4wMzY3SDMzLjY4ODFDMzQuMTY2NiAxMy4wNTE5IDM0LjYxMzQgMTIuODA2IDM0Ljg0NDEgMTIuNDAwNUMzNS4wNzQ4IDExLjk5NDkgMzUuMDUwMyAxMS40OTg0IDM0Ljc4MDggMTEuMTE1OUwyOS4wOTkxIDEuNjQ2MjFDMjguODcxMSAxLjI2''@;'; put 'put ''OTEzIDI4LjQ1MzIgMS4wMzczNSAyOC4wMDE1IDEuMDM3MzVDMjcuNTQ5NyAxLjAzNzM1IDI3LjEzMTkgMS4yNjkxMyAyNi45MDM5IDEuNjQ2MjFaIi8+PHBhdGggZD0iTTIxLjk1OTQgNkgxMi4yVjlDMTIuMiA5LjU4MzQ4IDExLjk2ODIgMTAuMTQzMSAxMS41NTU2IDEwLjU1NTZDMTEuMTQz''@;'; put 'put ''MSAxMC45NjgyIDEwLjU4MzUgMTEuMiAxMCAxMS4yQzkuNDE2NTQgMTEuMiA4Ljg1Njk2IDEwLjk2ODIgOC40NDQzOCAxMC41NTU2QzguMDMxOCAxMC4xNDMxIDcuODAwMDEgOS41ODM0OCA3LjgwMDAxIDlWNkgzLjgwMDAxQzMuNTYyMDQgNS45OTcyOSAzLjMyNTkzIDYuMDQyMzMgMy4xMDU2''@;'; put 'put ''NyA2LjEzMjQ2QzIuODg1NCA2LjIyMjU5IDIuNjg1NDUgNi4zNTU5NyAyLjUxNzYzIDYuNTI0NzNDMi4zNDk4MSA2LjY5MzQ4IDIuMjE3NTMgNi44OTQxNyAyLjEyODYzIDcuMTE0OTNDMi4wMzk3MiA3LjMzNTY5IDEuOTk1OTkgNy41NzIwNCAyLjAwMDAxIDcuODFWMzAuMTlDMS45OTYwNCAz''@;'; put 'put ''MC40MjM4IDIuMDM4MTYgMzAuNjU2IDIuMTIzOTYgMzAuODczNUMyLjIwOTc2IDMxLjA5MSAyLjMzNzU3IDMxLjI4OTQgMi41MDAwNyAzMS40NTc1QzIuNjYyNTggMzEuNjI1NiAyLjg1NjYxIDMxLjc2IDMuMDcxMDggMzEuODUzMUMzLjI4NTU1IDMxLjk0NjIgMy41MTYyNSAzMS45OTYxIDMu''@;'; put 'put ''NzUwMDEgMzJIMzIuMjVDMzIuNDgzOCAzMS45OTYxIDMyLjcxNDUgMzEuOTQ2MiAzMi45Mjg5IDMxLjg1MzFDMzMuMTQzNCAzMS43NiAzMy4zMzc0IDMxLjYyNTYgMzMuNSAzMS40NTc1QzMzLjY2MjUgMzEuMjg5NCAzMy43OTAzIDMxLjA5MSAzMy44NzYxIDMwLjg3MzVDMzMuOTYxOSAzMC42''@;'; put 'put ''NTYgMzQuMDA0IDMwLjQyMzggMzQgMzAuMTlWMTUuMDI2M0MzMy44ODg2IDE1LjAzNTQgMzMuNzc2NCAxNS4wMzg5IDMzLjY2MzcgMTUuMDM2N0gyNi4xOTY0QzI2LjIwNjggMTUuMDU4NCAyNi4yMTY2IDE1LjA4MDQgMjYuMjI1OCAxNS4xMDI3QzI2LjI5NDQgMTUuMjY4MyAyNi4zMjk3IDE1''@;'; put 'put ''LjQ0NTggMjYuMzI5NyAxNS42MjVDMjYuMzI5NyAxNS44MDQyIDI2LjI5NDQgMTUuOTgxNyAyNi4yMjU4IDE2LjE0NzNDMjYuMTU3MyAxNi4zMTI4IDI2LjA1NjcgMTYuNDYzMyAyNS45MyAxNi41OUwxNi4yNyAyNi4yNUwxMSAyMC45NEMxMC43NjY1IDIwLjY4MzIgMTAuNjQwMSAyMC4zNDY5''@;'; put 'put ''IDEwLjY0NjUgMTkuOTk5OUMxMC42NTI5IDE5LjY1MjkgMTAuNzkxOCAxOS4zMjE1IDExLjAzNDYgMTkuMDczNUMxMS4yNzc1IDE4LjgyNTUgMTEuNjA1OSAxOC42Nzk4IDExLjk1MjcgMTguNjY2MUMxMi4yOTk1IDE4LjY1MjUgMTIuNjM4NCAxOC43NzE5IDEyLjkgMTlMMTYuMjggMjIuMzhM''@;'; put 'put ''MjMuNjIzMyAxNS4wMzY3SDIyLjMzOTVDMjEuMTU3NyAxNS4wNjA0IDIwLjAyMzMgMTQuNDQ4OSAxOS40MjA2IDEzLjM4OTNDMTguODIwNCAxMi4zMzQyIDE4Ljg3MDMgMTEuMDQyMyAxOS41MzYyIDEwLjAzODdMMjEuOTU5NCA2WiIvPjxwYXRoIGQ9Ik0xMCAxMEMxMC4yNjUyIDEwIDEwLjUx''@;'; put 'put ''OTYgOS44OTQ2NCAxMC43MDcxIDkuNzA3MTFDMTAuODk0NyA5LjUxOTU3IDExIDkuMjY1MjIgMTEgOVYzQzExIDIuNzM0NzggMTAuODk0NyAyLjQ4MDQzIDEwLjcwNzEgMi4yOTI4OUMxMC41MTk2IDIuMTA1MzYgMTAuMjY1MiAyIDEwIDJDOS43MzQ4IDIgOS40ODA0NCAyLjEwNTM2IDkuMjky''@;'; put 'put ''OTEgMi4yOTI4OUM5LjEwNTM3IDIuNDgwNDMgOS4wMDAwMSAyLjczNDc4IDkuMDAwMDEgM1Y5QzkuMDAwMDEgOS4yNjUyMiA5LjEwNTM3IDkuNTE5NTcgOS4yOTI5MSA5LjcwNzExQzkuNDgwNDQgOS44OTQ2NCA5LjczNDggMTAgMTAgMTBaIi8+Jyxzb2xpZEJhZGdlZDonPHBhdGggZD0iTTEw''@;'; put 'put ''IDEwQzEwLjI2NTIgMTAgMTAuNTE5NiA5Ljg5NDY0IDEwLjcwNzEgOS43MDcxMUMxMC44OTQ3IDkuNTE5NTcgMTEgOS4yNjUyMiAxMSA5VjNDMTEgMi43MzQ3OCAxMC44OTQ3IDIuNDgwNDMgMTAuNzA3MSAyLjI5Mjg5QzEwLjUxOTYgMi4xMDUzNiAxMC4yNjUyIDIgMTAgMkM5LjczNDggMiA5''@;'; put 'put ''LjQ4MDQ0IDIuMTA1MzYgOS4yOTI5MSAyLjI5Mjg5QzkuMTA1MzcgMi40ODA0MyA5LjAwMDAxIDIuNzM0NzggOS4wMDAwMSAzVjlDOS4wMDAwMSA5LjI2NTIyIDkuMTA1MzcgOS41MTk1NyA5LjI5MjkxIDkuNzA3MTFDOS40ODA0NCA5Ljg5NDY0IDkuNzM0OCAxMCAxMCAxMFoiLz48cGF0aCBk''@;'; put 'put ''PSJNMzAgMTMuNUMyOC4wMTA5IDEzLjUgMjYuMTAzMiAxMi43MDk4IDI0LjY5NjcgMTEuMzAzM0MyMy4yOTAyIDkuODk2NzggMjIuNSA3Ljk4OTEyIDIyLjUgNkgxMi4yVjlDMTIuMiA5LjU4MzQ4IDExLjk2ODIgMTAuMTQzMSAxMS41NTU2IDEwLjU1NTZDMTEuMTQzMSAxMC45NjgyIDEwLjU4''@;'; put 'put ''MzUgMTEuMiAxMCAxMS4yQzkuNDE2NTQgMTEuMiA4Ljg1Njk2IDEwLjk2ODIgOC40NDQzOCAxMC41NTU2QzguMDMxOCAxMC4xNDMxIDcuODAwMDEgOS41ODM0OCA3LjgwMDAxIDlWNkgzLjgwMDAxQzMuNTYyMDQgNS45OTcyOSAzLjMyNTkzIDYuMDQyMzMgMy4xMDU2NyA2LjEzMjQ2QzIuODg1''@;'; put 'put ''NCA2LjIyMjU5IDIuNjg1NDUgNi4zNTU5NyAyLjUxNzYzIDYuNTI0NzNDMi4zNDk4MSA2LjY5MzQ4IDIuMjE3NTMgNi44OTQxNyAyLjEyODYzIDcuMTE0OTNDMi4wMzk3MiA3LjMzNTY5IDEuOTk1OTkgNy41NzIwNCAyLjAwMDAxIDcuODFWMzAuMTlDMS45OTYwNCAzMC40MjM4IDIuMDM4MTYg''@;'; put 'put ''MzAuNjU2IDIuMTIzOTYgMzAuODczNUMyLjIwOTc2IDMxLjA5MSAyLjMzNzU3IDMxLjI4OTQgMi41MDAwNyAzMS40NTc1QzIuNjYyNTggMzEuNjI1NiAyLjg1NjYxIDMxLjc2IDMuMDcxMDggMzEuODUzMUMzLjI4NTU1IDMxLjk0NjIgMy41MTYyNSAzMS45OTYxIDMuNzUwMDEgMzJIMzIuMjVD''@;'; put 'put ''MzIuNDgzOCAzMS45OTYxIDMyLjcxNDUgMzEuOTQ2MiAzMi45Mjg5IDMxLjg1MzFDMzMuMTQzNCAzMS43NiAzMy4zMzc0IDMxLjYyNTYgMzMuNSAzMS40NTc1QzMzLjY2MjUgMzEuMjg5NCAzMy43OTAzIDMxLjA5MSAzMy44NzYxIDMwLjg3MzVDMzMuOTYxOSAzMC42NTYgMzQuMDA0IDMwLjQy''@;'; put 'put ''MzggMzQgMzAuMTlWMTIuMzRDMzIuODA0MSAxMy4wOTkxIDMxLjQxNjUgMTMuNTAxNSAzMCAxMy41Wk0yNS45NCAxNi41OEwxNi4yNyAyNi4yNUwxMSAyMC45NEMxMC43NjY1IDIwLjY4MzIgMTAuNjQwMSAyMC4zNDY5IDEwLjY0NjUgMTkuOTk5OUMxMC42NTI5IDE5LjY1MjkgMTAuNzkxOCAx''@;'; put 'put ''OS4zMjE1IDExLjAzNDYgMTkuMDczNUMxMS4yNzc1IDE4LjgyNTUgMTEuNjA1OSAxOC42Nzk4IDExLjk1MjcgMTguNjY2MUMxMi4yOTk1IDE4LjY1MjUgMTIuNjM4NCAxOC43NzE5IDEyLjkgMTlMMTYuMjggMjIuMzhMMjQgMTQuNjZDMjQuMTI2NyAxNC41MzMzIDI0LjI3NzIgMTQuNDMyNyAy''@;'; put 'put ''NC40NDI4IDE0LjM2NDJDMjQuNjA4MyAxNC4yOTU2IDI0Ljc4NTggMTQuMjYwMyAyNC45NjUgMTQuMjYwM0MyNS4xNDQyIDE0LjI2MDMgMjUuMzIxNyAxNC4yOTU2IDI1LjQ4NzMgMTQuMzY0MkMyNS42NTI4IDE0LjQzMjcgMjUuODAzMyAxNC41MzMzIDI1LjkzIDE0LjY2QzI2LjA1NjcgMTQu''@;'; put 'put ''Nzg2NyAyNi4xNTczIDE0LjkzNzIgMjYuMjI1OCAxNS4xMDI3QzI2LjI5NDQgMTUuMjY4MyAyNi4zMjk3IDE1LjQ0NTggMjYuMzI5NyAxNS42MjVDMjYuMzI5NyAxNS44MDQyIDI2LjI5NDQgMTUuOTgxNyAyNi4yMjU4IDE2LjE0NzNDMjYuMTU3MyAxNi4zMTI4IDI2LjA1NjcgMTYuNDYzMyAy''@;'; put 'put ''NS45MyAxNi41OUwyNS45NCAxNi41OFoiLz48cGF0aCBkPSJNMzAgMTFDMzIuNzYxNCAxMSAzNSA4Ljc2MTQyIDM1IDZDMzUgMy4yMzg1OCAzMi43NjE0IDEgMzAgMUMyNy4yMzg2IDEgMjUgMy4yMzg1OCAyNSA2QzI1IDguNzYxNDIgMjcuMjM4NiAxMSAzMCAxMVoiLz4nfV0sT09lPVsiY2Fs''@;'; put 'put ''ZW5kYXIiLHtvdXRsaW5lOic8cGF0aCBkPSJNMjIgMjBIMjBWMjJIMjJWMjBaTTIwIDI2SDIyVjI0SDIwVjI2Wk0yOCAyNEgyNlYyNkgyOFYyNFpNMjggMjBIMjZWMjJIMjhWMjBaTTI3IDEyQzI3LjU1IDEyIDI4IDExLjU1IDI4IDExVjVDMjggNC40NSAyNy41NSA0IDI3IDRDMjYuNDUgNCAy''@;'; put 'put ''NiA0LjQ1IDI2IDVWMTFDMjYgMTEuNTUgMjYuNDUgMTIgMjcgMTJaTTIyIDE2SDIwVjE4SDIyVjE2Wk0yOCAxNkgyNlYxOEgyOFYxNlpNMjQgOEgxMlYxMEgyNFY4Wk0xMCAxNkg4VjE4SDEwVjE2Wk0xMCAyMEg4VjIySDEwVjIwWk0xMCAyNEg4VjI2SDEwVjI0Wk0zMy41IDguNTRDMzMuMTcg''@;'; put 'put ''OC4yIDMyLjcyIDguMDEgMzIuMjUgOEgzMFYxMEgzMlYzMEg0VjEwSDZWOEgzLjc1QzMuMjggOCAyLjgzIDguMiAyLjUgOC41NEMyLjE3IDguODggMiA5LjM0IDIgOS44MVYzMC4xOUMyIDMwLjY2IDIuMTcgMzEuMTIgMi41IDMxLjQ2QzIuODMgMzEuOCAzLjI4IDMxLjk5IDMuNzUgMzJIMzIu''@;'; put 'put ''MjVDMzIuNzIgMzIgMzMuMTcgMzEuOCAzMy41IDMxLjQ2QzMzLjgzIDMxLjEyIDM0LjAxIDMwLjY2IDM0IDMwLjE5VjkuODFDMzQgOS4zNCAzMy44MyA4Ljg4IDMzLjUgOC41NFpNMTQgMjZIMTZWMjRIMTRWMjZaTTE2IDIwSDE0VjIySDE2VjIwWk0xNiAxNkgxNFYxOEgxNlYxNlpNOSAxMkM5''@;'; put 'put ''LjU1IDEyIDEwIDExLjU1IDEwIDExVjVDMTAgNC40NSA5LjU1IDQgOSA0QzguNDUgNCA4IDQuNDUgOCA1VjExQzggMTEuNTUgOC40NSAxMiA5IDEyWiIvPicsb3V0bGluZUFsZXJ0ZWQ6JzxwYXRoIGQ9Ik0yNi45MDM5IDEuNjQ2MjFMMjEuMjIyMiAxMS4xMTU5QzIwLjk1MjYgMTEuNDk4NCAy''@;'; put 'put ''MC45MjgxIDExLjk5NDkgMjEuMTU4OCAxMi40MDA1QzIxLjM4OTYgMTIuODA2IDIxLjgzNjMgMTMuMDUxOSAyMi4zMTQ4IDEzLjAzNjdIMzMuNjg4MUMzNC4xNjY2IDEzLjA1MTkgMzQuNjEzNCAxMi44MDYgMzQuODQ0MSAxMi40MDA1QzM1LjA3NDggMTEuOTk0OSAzNS4wNTAzIDExLjQ5ODQg''@;'; put 'put ''MzQuNzgwOCAxMS4xMTU5TDI5LjA5OTEgMS42NDYyMUMyOC44NzExIDEuMjY5MTMgMjguNDUzMiAxLjAzNzM1IDI4LjAwMTUgMS4wMzczNUMyNy41NDk3IDEuMDM3MzUgMjcuMTMxOSAxLjI2OTEzIDI2LjkwMzkgMS42NDYyMVoiLz48cGF0aCBkPSJNMzIgMTUuMDM2N0gzMy42NjM3QzMzLjc3''@;'; put 'put ''NjMgMTUuMDM4OSAzMy44ODg2IDE1LjAzNTQgMzQgMTUuMDI2M1YzMC4xOUMzNC4wMSAzMC42NiAzMy44MyAzMS4xMiAzMy41IDMxLjQ2QzMzLjE3IDMxLjggMzIuNzIgMzIgMzIuMjUgMzJIMy43NUMzLjI4IDMxLjk5IDIuODMgMzEuOCAyLjUgMzEuNDZDMi4xNyAzMS4xMiAyIDMwLjY2IDIg''@;'; put 'put ''MzAuMTlWOS44MUMyIDkuMzQgMi4xNyA4Ljg4IDIuNSA4LjU0QzIuODMgOC4yIDMuMjggOCAzLjc1IDhINlYxMEg0VjMwSDMyVjE1LjAzNjdaIi8+PHBhdGggZD0iTTIwLjc1OTQgOEwxOS41NTk0IDEwSDEyVjhIMjAuNzU5NFoiLz48cGF0aCBkPSJNMjAgMjBIMjJWMjJIMjBWMjBaIi8+PHBh''@;'; put 'put ''dGggZD0iTTIyIDI2SDIwVjI0SDIyVjI2WiIvPjxwYXRoIGQ9Ik0yNiAyNlYyNEgyOFYyNkgyNloiLz48cGF0aCBkPSJNMjYgMjJWMjBIMjhWMjJIMjZaIi8+PHBhdGggZD0iTTIwIDE2SDIyVjE4SDIwVjE2WiIvPjxwYXRoIGQ9Ik0yNiAxOFYxNkgyOFYxOEgyNloiLz48cGF0aCBkPSJNOCAx''@;'; put 'put ''NkgxMFYxOEg4VjE2WiIvPjxwYXRoIGQ9Ik04IDIwSDEwVjIySDhWMjBaIi8+PHBhdGggZD0iTTggMjRIMTBWMjZIOFYyNFoiLz48cGF0aCBkPSJNMTYgMjZIMTRWMjRIMTZWMjZaIi8+PHBhdGggZD0iTTE0IDIwSDE2VjIySDE0VjIwWiIvPjxwYXRoIGQ9Ik0xNCAxNkgxNlYxOEgxNFYxNloi''@;'; put 'put ''Lz48cGF0aCBkPSJNMTAgMTFDMTAgMTEuNTUgOS41NSAxMiA5IDEyQzguNDUgMTIgOCAxMS41NSA4IDExVjVDOCA0LjQ1IDguNDUgNCA5IDRDOS41NSA0IDEwIDQuNDUgMTAgNVYxMVoiLz4nLG91dGxpbmVCYWRnZWQ6JzxwYXRoIGQ9Ik0zMCAxMUMzMi43NjE0IDExIDM1IDguNzYxNDIgMzUg''@;'; put 'put ''NkMzNSAzLjIzODU4IDMyLjc2MTQgMSAzMCAxQzI3LjIzODYgMSAyNSAzLjIzODU4IDI1IDZDMjUgOC43NjE0MiAyNy4yMzg2IDExIDMwIDExWiIvPjxwYXRoIGQ9Ik0yMy4yODk5IDhDMjMuNDU5NCA4LjU2OTYzIDIzLjY5OTUgOS4xMDg4NyAyNCA5LjYwNzU5VjEwSDEyVjhIMjMuMjg5OVoi''@;'; put 'put ''Lz48cGF0aCBkPSJNMzQgMTEuNzQ1M0MzMy4zOTYgMTIuMTY2NiAzMi43MjI0IDEyLjQ5NTEgMzIgMTIuNzEwMVYzMEg0VjEwSDZWOEgzLjc1QzMuMjggOCAyLjgzIDguMiAyLjUgOC41NEMyLjE3IDguODggMiA5LjM0IDIgOS44MVYzMC4xOUMyIDMwLjY2IDIuMTcgMzEuMTIgMi41IDMxLjQ2''@;'; put 'put ''QzIuODMgMzEuOCAzLjI4IDMxLjk5IDMuNzUgMzJIMzIuMjVDMzIuNzIgMzIgMzMuMTcgMzEuOCAzMy41IDMxLjQ2QzMzLjgzIDMxLjEyIDM0LjAxIDMwLjY2IDM0IDMwLjE5VjExLjc0NTNaIi8+PHBhdGggZD0iTTIwIDIwSDIyVjIySDIwVjIwWiIvPjxwYXRoIGQ9Ik0yMiAyNkgyMFYyNEgy''@;'; put 'put ''MlYyNloiLz48cGF0aCBkPSJNMjYgMjZWMjRIMjhWMjZIMjZaIi8+PHBhdGggZD0iTTI2IDIyVjIwSDI4VjIySDI2WiIvPjxwYXRoIGQ9Ik0yMCAxNkgyMlYxOEgyMFYxNloiLz48cGF0aCBkPSJNMjYgMThWMTZIMjhWMThIMjZaIi8+PHBhdGggZD0iTTggMTZIMTBWMThIOFYxNloiLz48cGF0''@;'; put 'put ''aCBkPSJNOCAyMEgxMFYyMkg4VjIwWiIvPjxwYXRoIGQ9Ik04IDI0SDEwVjI2SDhWMjRaIi8+PHBhdGggZD0iTTE2IDI2SDE0VjI0SDE2VjI2WiIvPjxwYXRoIGQ9Ik0xNCAyMEgxNlYyMkgxNFYyMFoiLz48cGF0aCBkPSJNMTQgMTZIMTZWMThIMTRWMTZaIi8+PHBhdGggZD0iTTEwIDExQzEw''@;'; put 'put ''IDExLjU1IDkuNTUgMTIgOSAxMkM4LjQ1IDEyIDggMTEuNTUgOCAxMVY1QzggNC40NSA4LjQ1IDQgOSA0QzkuNTUgNCAxMCA0LjQ1IDEwIDVWMTFaIi8+Jyxzb2xpZDonPHBhdGggZD0iTTI3IDEyQzI3LjU1IDEyIDI4IDExLjU1IDI4IDExVjVDMjggNC40NSAyNy41NSA0IDI3IDRDMjYuNDUg''@;'; put 'put ''NCAyNiA0LjQ1IDI2IDVWMTFDMjYgMTEuNTUgMjYuNDUgMTIgMjcgMTJaTTMzLjUgOC41NEMzMy4xNyA4LjIgMzIuNzIgOC4wMSAzMi4yNSA4SDI5LjJWMTFDMjkuMiAxMi4yMSAyOC4yMSAxMy4yIDI3IDEzLjJDMjUuNzkgMTMuMiAyNC44IDEyLjIxIDI0LjggMTFWOEgxMS4yVjExQzExLjIg''@;'; put 'put ''MTIuMjEgMTAuMjEgMTMuMiA5IDEzLjJDNy43OSAxMy4yIDYuOCAxMi4yMSA2LjggMTFWOEgzLjc1QzMuMjggOCAyLjgzIDguMiAyLjUgOC41NEMyLjE3IDguODggMiA5LjM0IDIgOS44MVYzMC4xOUMyIDMwLjY2IDIuMTcgMzEuMTIgMi41IDMxLjQ2QzIuODMgMzEuOCAzLjI4IDMxLjk5IDMu''@;'; put 'put ''NzUgMzJIMzIuMjVDMzIuNzIgMzIgMzMuMTcgMzEuOCAzMy41IDMxLjQ2QzMzLjgzIDMxLjEyIDM0LjAxIDMwLjY2IDM0IDMwLjE5VjkuODFDMzQgOS4zNCAzMy44MyA4Ljg4IDMzLjUgOC41NFpNMTAuMSAyNi4xSDcuOVYyMy45SDEwLjFWMjYuMVpNMTAuMSAyMi4xSDcuOVYxOS45SDEwLjFW''@;'; put 'put ''MjIuMVpNMTAuMSAxOC4xSDcuOVYxNS45SDEwLjFWMTguMVpNMTYuMSAyNi4xSDEzLjlWMjMuOUgxNi4xVjI2LjFaTTE2LjEgMjIuMUgxMy45VjE5LjlIMTYuMVYyMi4xWk0xNi4xIDE4LjFIMTMuOVYxNS45SDE2LjFWMTguMVpNMjIuMSAyNi4xSDE5LjlWMjMuOUgyMi4xVjI2LjFaTTIyLjEg''@;'; put 'put ''MjIuMUgxOS45VjE5LjlIMjIuMVYyMi4xWk0yMi4xIDE4LjFIMTkuOVYxNS45SDIyLjFWMTguMVpNMjguMSAyNi4xSDI1LjlWMjMuOUgyOC4xVjI2LjFaTTI4LjEgMjIuMUgyNS45VjE5LjlIMjguMVYyMi4xWk0yOC4xIDE4LjFIMjUuOVYxNS45SDI4LjFWMTguMVpNOSAxMkM5LjU1IDEyIDEw''@;'; put 'put ''IDExLjU1IDEwIDExVjVDMTAgNC40NSA5LjU1IDQgOSA0QzguNDUgNCA4IDQuNDUgOCA1VjExQzggMTEuNTUgOC40NSAxMiA5IDEyWiIvPicsc29saWRBbGVydGVkOic8cGF0aCBkPSJNMjYuOTAzOSAxLjY0NjIxTDIxLjIyMjIgMTEuMTE1OUMyMC45NTI2IDExLjQ5ODQgMjAuOTI4MSAxMS45''@;'; put 'put ''OTQ5IDIxLjE1ODggMTIuNDAwNUMyMS4zODk2IDEyLjgwNiAyMS44MzYzIDEzLjA1MTkgMjIuMzE0OCAxMy4wMzY3SDMzLjY4ODFDMzQuMTY2NiAxMy4wNTE5IDM0LjYxMzQgMTIuODA2IDM0Ljg0NDEgMTIuNDAwNUMzNS4wNzQ4IDExLjk5NDkgMzUuMDUwMyAxMS40OTg0IDM0Ljc4MDggMTEu''@;'; put 'put ''MTE1OUwyOS4wOTkxIDEuNjQ2MjFDMjguODcxMSAxLjI2OTEzIDI4LjQ1MzIgMS4wMzczNSAyOC4wMDE1IDEuMDM3MzVDMjcuNTQ5NyAxLjAzNzM1IDI3LjEzMTkgMS4yNjkxMyAyNi45MDM5IDEuNjQ2MjFaIi8+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQi''@;'; put 'put ''IGQ9Ik0yMC43NTk0IDhMMTkuNTM2MiAxMC4wMzg3QzE4Ljg3MDMgMTEuMDQyMyAxOC44MjA0IDEyLjMzNDIgMTkuNDIwNiAxMy4zODkzQzIwLjAyMzMgMTQuNDQ4OSAyMS4xNTc3IDE1LjA2MDQgMjIuMzM5NSAxNS4wMzY3SDMzLjY2MzdDMzMuNzc2MyAxNS4wMzg5IDMzLjg4ODYgMTUuMDM1''@;'; put 'put ''NCAzNCAxNS4wMjYzVjMwLjE5QzM0LjAxIDMwLjY2IDMzLjgzIDMxLjEyIDMzLjUgMzEuNDZDMzMuMTcgMzEuOCAzMi43MiAzMiAzMi4yNSAzMkgzLjc1QzMuMjggMzEuOTkgMi44MyAzMS44IDIuNSAzMS40NkMyLjE3IDMxLjEyIDIgMzAuNjYgMiAzMC4xOVY5LjgxQzIgOS4zNCAyLjE3IDgu''@;'; put 'put ''ODggMi41IDguNTRDMi44MyA4LjIgMy4yOCA4IDMuNzUgOEg2LjhWMTFDNi44IDEyLjIxIDcuNzkgMTMuMiA5IDEzLjJDMTAuMjEgMTMuMiAxMS4yIDEyLjIxIDExLjIgMTFWOEgyMC43NTk0Wk03LjkgMjMuOVYyNi4xSDEwLjFWMjMuOUg3LjlaTTcuOSAxOS45VjIyLjFIMTAuMVYxOS45SDcu''@;'; put 'put ''OVpNNy45IDE1LjlWMTguMUgxMC4xVjE1LjlINy45Wk0xMy45IDI2LjFIMTYuMVYyMy45SDEzLjlWMjYuMVpNMTMuOSAyMi4xSDE2LjFWMTkuOUgxMy45VjIyLjFaTTEzLjkgMTguMUgxNi4xVjE1LjlIMTMuOVYxOC4xWk0xOS45IDI2LjFIMjIuMVYyMy45SDE5LjlWMjYuMVpNMTkuOSAyMi4x''@;'; put 'put ''SDIyLjFWMTkuOUgxOS45VjIyLjFaTTE5LjkgMTguMUgyMi4xVjE1LjlIMTkuOVYxOC4xWk0yNS45IDIzLjlWMjYuMUgyOC4xVjIzLjlIMjUuOVpNMjUuOSAxOS45VjIyLjFIMjguMVYxOS45SDI1LjlaTTI1LjkgMTUuOVYxOC4xSDI4LjFWMTUuOUgyNS45WiIvPjxwYXRoIGQ9Ik0xMCAxMUMx''@;'; put 'put ''MCAxMS41NSA5LjU1IDEyIDkgMTJDOC40NSAxMiA4IDExLjU1IDggMTFWNUM4IDQuNDUgOC40NSA0IDkgNEM5LjU1IDQgMTAgNC40NSAxMCA1VjExWiIvPicsc29saWRCYWRnZWQ6JzxwYXRoIGQ9Ik0zMCAxMUMzMi43NjE0IDExIDM1IDguNzYxNDIgMzUgNkMzNSAzLjIzODU4IDMyLjc2MTQg''@;'; put 'put ''MSAzMCAxQzI3LjIzODYgMSAyNSAzLjIzODU4IDI1IDZDMjUgOC43NjE0MiAyNy4yMzg2IDExIDMwIDExWiIvPjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMzQgMTEuNzQ1M0MzMi44NjYyIDEyLjUzNjIgMzEuNDg3MiAxMyAzMCAxM0MyOS40MDYz''@;'; put 'put ''IDEzIDI4LjgyOTkgMTIuOTI2MSAyOC4yNzk0IDEyLjc4N0MyNy45MTgzIDEzLjA0NjcgMjcuNDc2MiAxMy4yIDI3IDEzLjJDMjUuNzkgMTMuMiAyNC44IDEyLjIxIDI0LjggMTFWMTAuNjg2MkMyNC4xMTI2IDkuOTIzOTMgMjMuNTkwNCA5LjAwOTcgMjMuMjg5OSA4SDExLjJWMTFDMTEuMiAx''@;'; put 'put ''Mi4yMSAxMC4yMSAxMy4yIDkgMTMuMkM3Ljc5IDEzLjIgNi44IDEyLjIxIDYuOCAxMVY4SDMuNzVDMy4yOCA4IDIuODMgOC4yIDIuNSA4LjU0QzIuMTcgOC44OCAyIDkuMzQgMiA5LjgxVjMwLjE5QzIgMzAuNjYgMi4xNyAzMS4xMiAyLjUgMzEuNDZDMi44MyAzMS44IDMuMjggMzEuOTkgMy43''@;'; put 'put ''NSAzMkgzMi4yNUMzMi43MiAzMiAzMy4xNyAzMS44IDMzLjUgMzEuNDZDMzMuODMgMzEuMTIgMzQuMDEgMzAuNjYgMzQgMzAuMTlWMTEuNzQ1M1pNNy45IDIzLjlWMjYuMUgxMC4xVjIzLjlINy45Wk03LjkgMTkuOVYyMi4xSDEwLjFWMTkuOUg3LjlaTTcuOSAxNS45VjE4LjFIMTAuMVYxNS45''@;'; put 'put ''SDcuOVpNMTMuOSAyNi4xSDE2LjFWMjMuOUgxMy45VjI2LjFaTTEzLjkgMjIuMUgxNi4xVjE5LjlIMTMuOVYyMi4xWk0xMy45IDE4LjFIMTYuMVYxNS45SDEzLjlWMTguMVpNMTkuOSAyNi4xSDIyLjFWMjMuOUgxOS45VjI2LjFaTTE5LjkgMjIuMUgyMi4xVjE5LjlIMTkuOVYyMi4xWk0xOS45''@;'; put 'put ''IDE4LjFIMjIuMVYxNS45SDE5LjlWMTguMVpNMjUuOSAyMy45VjI2LjFIMjguMVYyMy45SDI1LjlaTTI1LjkgMTkuOVYyMi4xSDI4LjFWMTkuOUgyNS45Wk0yNS45IDE1LjlWMTguMUgyOC4xVjE1LjlIMjUuOVoiLz48cGF0aCBkPSJNMTAgMTFDMTAgMTEuNTUgOS41NSAxMiA5IDEyQzguNDUg''@;'; put 'put ''MTIgOCAxMS41NSA4IDExVjVDOCA0LjQ1IDguNDUgNCA5IDRDOS41NSA0IDEwIDQuNDUgMTAgNVYxMVoiLz4nfV0sUE9lPVsiZm9sZGVyLW9wZW4iLHtvdXRsaW5lOic8cGF0aCBkPSJNMzMuMjYgMTNDMzMuODQgMTIuOTkgMzQuMzggMTMuMjYgMzQuNzEgMTMuNzRDMzUgMTQuMTYgMzUuMDgg''@;'; put 'put ''MTQuNjkgMzQuOTIgMTUuMThMMzAuNzMgMzAuMjhDMzAuNiAzMC43MiAzMC4xOSAzMS4wMiAyOS43MyAzMUg0LjQxQzMuNjYgMzEuMDIgMy4wMyAzMC40NCAzIDI5LjY5VjdDMyA1LjkgMy45IDUgNSA1SDExLjQ5QzEyLjEzIDUgMTIuNzMgNS4zIDEzLjExIDUuODJMMTUuNDIgOUgyOS4zOUMz''@;'; put 'put ''MC40OSA5IDMxLjM5IDkuOSAzMS4zOSAxMUgxNC45MUMxNC41OSAxMSAxNC4yOSAxMC44NSAxNC4xIDEwLjU5TDExLjQ5IDdINVYyNUw3LjkyIDE0LjY2QzcuOTIgMTQuNjYgNy45MiAxNC41NyA3LjkyIDE0LjUyQzguMzIgMTMuNjMgOS4xOSAxMy4wNCAxMC4xNyAxM0gzMy4yNlpNNS45IDI5''@;'; put 'put ''SDI4Ljk0TDMyLjg4IDE0Ljk1SDEwLjE2QzEwLjAxIDE0Ljk4IDkuODcgMTUuMDcgOS43OCAxNS4xOUw1LjkgMjlaIi8+JyxvdXRsaW5lQWxlcnRlZDonPHBhdGggZD0iTTI3LjkwNDEgMS42NDYyMUwyMi4yMjI0IDExLjExNTlDMjEuOTUyOSAxMS40OTg0IDIxLjkyODQgMTEuOTk0OSAyMi4x''@;'; put 'put ''NTkxIDEyLjQwMDVDMjIuMzg5OCAxMi44MDYgMjIuODM2NiAxMy4wNTE5IDIzLjMxNSAxMy4wMzY3SDM0LjY4ODRDMzUuMTY2OSAxMy4wNTE5IDM1LjYxMzYgMTIuODA2IDM1Ljg0NDMgMTIuNDAwNUMzNi4wNzUgMTEuOTk0OSAzNi4wNTA2IDExLjQ5ODQgMzUuNzgxIDExLjExNTlMMzAuMDk5''@;'; put 'put ''MyAxLjY0NjIxQzI5Ljg3MTMgMS4yNjkxMyAyOS40NTM1IDEuMDM3MzUgMjkuMDAxNyAxLjAzNzM1QzI4LjU1IDEuMDM3MzUgMjguMTMyMSAxLjI2OTEzIDI3LjkwNDEgMS42NDYyMVoiLz48cGF0aCBkPSJNMjAuMTA1OCAxMUgxNC45MTAyQzE0LjU5MDIgMTEgMTQuMjkwMiAxMC44NSAxNC4x''@;'; put 'put ''MDAyIDEwLjU5TDExLjQ5MDIgN0g1LjAwMDI0VjI1TDcuOTIwMjQgMTQuNjZWMTQuNTJDOC4zMjAyNCAxMy42MyA5LjE5MDI0IDEzLjA0IDEwLjE3MDIgMTNIMjAuMjMyN0MyMC4yODYxIDEzLjEzMjYgMjAuMzQ4OCAxMy4yNjI3IDIwLjQyMDggMTMuMzg5M0MyMC44ODE1IDE0LjE5OTEgMjEu''@;'; put 'put ''NjUyNyAxNC43NDcyIDIyLjUxODMgMTQuOTVIMTAuMTYwMkMxMC4wMTAyIDE0Ljk4IDkuODcwMjQgMTUuMDcgOS43ODAyNCAxNS4xOUw1LjkwMDI0IDI5SDI4Ljk0MDJMMzIuODU1OSAxNS4wMzY3SDM0LjY2MzlDMzQuNzYzNiAxNS4wMzg3IDM0Ljg2MyAxNS4wMzYyIDM0Ljk2MTcgMTUuMDI5''@;'; put 'put ''MkMzNC45NTAzIDE1LjA3OTggMzQuOTM2NSAxNS4xMzAxIDM0LjkyMDIgMTUuMThMMzAuNzMwMiAzMC4yOEMzMC42MDAyIDMwLjcyIDMwLjE5MDIgMzEuMDIgMjkuNzMwMiAzMUg0LjQxMDI0QzMuNjYwMjQgMzEuMDIgMy4wMzAyNCAzMC40NCAzLjAwMDI0IDI5LjY5VjdDMy4wMDAyNCA1Ljkg''@;'; put 'put ''My45MDAyNCA1IDUuMDAwMjQgNUgxMS40OTAyQzEyLjEzMDIgNSAxMi43MzAyIDUuMyAxMy4xMTAyIDUuODJMMTUuNDIwMiA5SDIxLjE1OTdMMjAuNTM2NCAxMC4wMzg3QzIwLjMzNzggMTAuMzM4MSAyMC4xOTM5IDEwLjY2MzIgMjAuMTA1OCAxMVoiLz4nLG91dGxpbmVCYWRnZWQ6JzxwYXRo''@;'; put 'put ''IGQ9Ik0zMSAxMUMzMy43NjE0IDExIDM2IDguNzYxNDIgMzYgNkMzNiAzLjIzODU4IDMzLjc2MTQgMSAzMSAxQzI4LjIzODYgMSAyNiAzLjIzODU4IDI2IDZDMjYgOC43NjE0MiAyOC4yMzg2IDExIDMxIDExWiIvPjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2Rk''@;'; put 'put ''IiBkPSJNMjYuMTAxIDExSDE0LjkxQzE0LjU5IDExIDE0LjI5IDEwLjg1IDE0LjEgMTAuNTlMMTEuNDkgN0g1VjI1TDcuOTIgMTQuNjZWMTQuNTJDOC4zMiAxMy42MyA5LjE5IDEzLjA0IDEwLjE3IDEzSDMzLjI2QzMzLjg0IDEyLjk5IDM0LjM4IDEzLjI2IDM0LjcxIDEzLjc0QzM1IDE0LjE2''@;'; put 'put ''IDM1LjA4IDE0LjY5IDM0LjkyIDE1LjE4TDMwLjczIDMwLjI4QzMwLjYgMzAuNzIgMzAuMTkgMzEuMDIgMjkuNzMgMzFINC40MUMzLjY2IDMxLjAyIDMuMDMgMzAuNDQgMyAyOS42OVY3QzMgNS45IDMuOSA1IDUgNUgxMS40OUMxMi4xMyA1IDEyLjczIDUuMyAxMy4xMSA1LjgyTDE1LjQyIDlI''@;'; put 'put ''MjQuNjczNkMyNS4wMjk3IDkuNzQ5NiAyNS41MTUxIDEwLjQyNTkgMjYuMTAxIDExWk0yOC45NCAyOUg1LjlMOS43OCAxNS4xOUM5Ljg3IDE1LjA3IDEwLjAxIDE0Ljk4IDEwLjE2IDE0Ljk1SDMyLjg4TDI4Ljk0IDI5WiIvPicsc29saWQ6JzxwYXRoIGQ9Ik0zNC43MDU4IDEzLjc0QzM0LjM3''@;'; put 'put ''NDQgMTMuMjY0MyAzMy44MjIzIDEyLjk4NiAzMy4yMzc5IDEzSDEwLjI1ODNDOS4yNjk1MiAxMy4wNDE0IDguMzg4NTggMTMuNjI5MyA3Ljk4MDYgMTQuNTJDNy45NzcyOSAxNC41NjY2IDcuOTc3MjkgMTQuNjEzNCA3Ljk4MDYgMTQuNjZMNS4wMjQ2MyAyNVY3LjAwMDAxSDExLjU5NDZMMTQu''@;'; put 'put ''MjM2NyAxMC41OUMxNC40Mjc5IDEwLjg0ODQgMTQuNzMyNyAxMS4wMDA4IDE1LjA1NjcgMTFIMzEuMzQ0OUMzMS4zNDQ5IDkuODk1NDQgMzAuNDM4NCA5LjAwMDAxIDI5LjMyMDMgOS4wMDAwMUgxNS41NzNMMTMuMjM0NSA1LjgyMDAxQzEyLjg1MjIgNS4zMDMxOCAxMi4yNDI2IDQuOTk4MzUg''@;'; put 'put ''MTEuNTk0NiA1LjAwMDAxSDUuMDI0NjNDMy45MDY0NiA1LjAwMDAxIDMgNS44OTU0NCAzIDcuMDAwMDFWMjkuNjlDMy4wMzI4OSAzMC40Mzg5IDMuNjY4OTEgMzEuMDIyNiA0LjQyNzM3IDMxSDI5LjY2NDRDMzAuMTI5MyAzMS4wMTgzIDMwLjU0NjkgMzAuNzIxMyAzMC42NzY4IDMwLjI4TDM0''@;'; put 'put ''LjkxODQgMTUuMThDMzUuMDc4OCAxNC42OTM1IDM1LjAwMDEgMTQuMTYxIDM0LjcwNTggMTMuNzRaIi8+Jyxzb2xpZEFsZXJ0ZWQ6JzxwYXRoIGQ9Ik0yNy45MDQxIDEuNjQ2MjFMMjIuMjIyNCAxMS4xMTU5QzIxLjk1MjkgMTEuNDk4NCAyMS45Mjg0IDExLjk5NDkgMjIuMTU5MSAxMi40MDA1''@;'; put 'put ''QzIyLjM4OTggMTIuODA2IDIyLjgzNjYgMTMuMDUxOSAyMy4zMTUgMTMuMDM2N0gzNC42ODg0QzM1LjE2NjkgMTMuMDUxOSAzNS42MTM2IDEyLjgwNiAzNS44NDQzIDEyLjQwMDVDMzYuMDc1IDExLjk5NDkgMzYuMDUwNiAxMS40OTg0IDM1Ljc4MSAxMS4xMTU5TDMwLjA5OTMgMS42NDYyMUMy''@;'; put 'put ''OS44NzEzIDEuMjY5MTMgMjkuNDUzNSAxLjAzNzM1IDI5LjAwMTcgMS4wMzczNUMyOC41NSAxLjAzNzM1IDI4LjEzMjEgMS4yNjkxMyAyNy45MDQxIDEuNjQ2MjFaIi8+PHBhdGggZD0iTTIwLjIzMjUgMTNDMjAuMjg1OCAxMy4xMzI2IDIwLjM0ODUgMTMuMjYyNyAyMC40MjA2IDEzLjM4OTND''@;'; put 'put ''MjEuMDIzMyAxNC40NDg5IDIyLjE1NzcgMTUuMDYwNCAyMy4zMzk1IDE1LjAzNjdIMzQuNjYzN0MzNC43NjI5IDE1LjAzODcgMzQuODYxOCAxNS4wMzYyIDM0Ljk2MDEgMTUuMDI5M0MzNC45NDg3IDE1LjA3OTkgMzQuOTM0OCAxNS4xMzAyIDM0LjkxODQgMTUuMThMMzAuNjc2OCAzMC4yOEMz''@;'; put 'put ''MC41NDY5IDMwLjcyMTMgMzAuMTI5MyAzMS4wMTgzIDI5LjY2NDQgMzFINC40MjczN0MzLjY2ODkxIDMxLjAyMjYgMy4wMzI4OSAzMC40Mzg5IDMgMjkuNjlWNy4wMDAwMUMzIDUuODk1NDQgMy45MDY0NiA1LjAwMDAxIDUuMDI0NjMgNS4wMDAwMUgxMS41OTQ2QzEyLjI0MjYgNC45OTgzNSAx''@;'; put 'put ''Mi44NTIyIDUuMzAzMTggMTMuMjM0NSA1LjgyMDAxTDE1LjU3MyA5LjAwMDAxSDIxLjE1OTRMMjAuNTM2MiAxMC4wMzg3QzIwLjMzNzUgMTAuMzM4MSAyMC4xOTM3IDEwLjY2MzIgMjAuMTA1NiAxMUgxNS4wNTY3QzE0LjczMjcgMTEuMDAwOCAxNC40Mjc5IDEwLjg0ODQgMTQuMjM2NyAxMC41''@;'; put 'put ''OUwxMS41OTQ2IDcuMDAwMDFINS4wMjQ2M1YyNUw3Ljk4MDYgMTQuNjZDNy45NzcyOSAxNC42MTM0IDcuOTc3MjkgMTQuNTY2NiA3Ljk4MDYgMTQuNTJDOC4zODg1OCAxMy42MjkzIDkuMjY5NTIgMTMuMDQxNCAxMC4yNTgzIDEzSDIwLjIzMjVaIi8+Jyxzb2xpZEJhZGdlZDonPHBhdGggZD0i''@;'; put 'put ''TTMxIDExQzMzLjc2MTQgMTEgMzYgOC43NjE0MiAzNiA2QzM2IDMuMjM4NTggMzMuNzYxNCAxIDMxIDFDMjguMjM4NiAxIDI2IDMuMjM4NTggMjYgNkMyNiA4Ljc2MTQyIDI4LjIzODYgMTEgMzEgMTFaIi8+PHBhdGggZD0iTTI0LjY3MzYgOS4wMDAwMUMyNS4wMjk3IDkuNzQ5NjEgMjUuNTE1''@;'; put 'put ''MSAxMC40MjU5IDI2LjEwMSAxMUgxNS4wNTY3QzE0LjczMjcgMTEuMDAwOCAxNC40Mjc5IDEwLjg0ODQgMTQuMjM2NyAxMC41OUwxMS41OTQ2IDcuMDAwMDFINS4wMjQ2M1YyNUw3Ljk4MDYgMTQuNjZDNy45NzcyOSAxNC42MTM0IDcuOTc3MjkgMTQuNTY2NiA3Ljk4MDYgMTQuNTJDOC4zODg1''@;'; put 'put ''OCAxMy42MjkzIDkuMjY5NTIgMTMuMDQxNCAxMC4yNTgzIDEzSDMzLjIzNzlDMzMuODIyMyAxMi45ODYgMzQuMzc0NCAxMy4yNjQzIDM0LjcwNTggMTMuNzRDMzUuMDAwMSAxNC4xNjEgMzUuMDc4OCAxNC42OTM1IDM0LjkxODQgMTUuMThMMzAuNjc2OCAzMC4yOEMzMC41NDY5IDMwLjcyMTMg''@;'; put 'put ''MzAuMTI5MyAzMS4wMTgzIDI5LjY2NDQgMzFINC40MjczN0MzLjY2ODkxIDMxLjAyMjYgMy4wMzI4OSAzMC40Mzg5IDMgMjkuNjlWNy4wMDAwMUMzIDUuODk1NDQgMy45MDY0NiA1LjAwMDAxIDUuMDI0NjMgNS4wMDAwMUgxMS41OTQ2QzEyLjI0MjYgNC45OTgzNSAxMi44NTIyIDUuMzAzMTgg''@;'; put 'put ''MTMuMjM0NSA1LjgyMDAxTDE1LjU3MyA5LjAwMDAxSDI0LjY3MzZaIi8+J31dLEZPZT1bIm1pbnVzIix7b3V0bGluZTonPHBhdGggZD0iTTI2IDE3SDEwQzkuNDQ3NzIgMTcgOSAxNy40NDc3IDkgMThDOSAxOC41NTIzIDkuNDQ3NzIgMTkgMTAgMTlIMjZDMjYuNTUyMyAxOSAyNyAxOC41NTIz''@;'; put 'put ''IDI3IDE4QzI3IDE3LjQ0NzcgMjYuNTUyMyAxNyAyNiAxN1oiLz4nfV0sSE9lPVsicGx1cyIse291dGxpbmU6JzxwYXRoIGQ9Ik0yOS45OTk5IDE3SDE4Ljk5OTlWNkMxOC45OTk5IDUuNDQ3NzIgMTguNTUyMiA1IDE3Ljk5OTkgNUMxNy40NDc2IDUgMTYuOTk5OSA1LjQ0NzcyIDE2Ljk5OTkg''@;'; put 'put ''NlYxN0g1Ljk5OTkyQzUuNDQ3NjQgMTcgNC45OTk5MiAxNy40NDc3IDQuOTk5OTIgMThDNC45ODk5NCAxOC4yNjMgNS4wOTQyNyAxOC41MTc0IDUuMjg2IDE4LjY5NzZDNS40Nzc3MyAxOC44Nzc4IDUuNzM4MDkgMTguOTY2MiA1Ljk5OTkyIDE4Ljk0SDE2Ljk5OTlWMzBDMTYuOTk5OSAzMC41''@;'; put 'put ''NTIzIDE3LjQ0NzYgMzEgMTcuOTk5OSAzMUMxOC41NTIyIDMxIDE4Ljk5OTkgMzAuNTUyMyAxOC45OTk5IDMwVjE5SDI5Ljk5OTlDMzAuNTUyMiAxOSAzMC45OTk5IDE4LjU1MjMgMzAuOTk5OSAxOEMzMC45OTk5IDE3LjQ0NzcgMzAuNTUyMiAxNyAyOS45OTk5IDE3WiIvPid9XSxOT2U9WyJl''@;'; put 'put ''eWUtaGlkZSIse291dGxpbmU6JzxwYXRoIGQ9Ik0yNC41NDk1IDIwLjQzMDFDMjQuODI5NCAxOS42NzAxIDI0Ljk4OTMgMTguODYwMSAyNC45ODkzIDE4LjAwMDFDMjQuOTg5MyAxNC4xNDAxIDIxLjg1MDggMTEuMDAwMSAxNy45OTI2IDExLjAwMDFDMTcuMTMzIDExLjAwMDEgMTYuMzIzMyAx''@;'; put 'put ''MS4xNjAxIDE1LjU2MzcgMTEuNDQwMUwxNy4yMDI5IDEzLjA4MDFDMTcuNDYyOCAxMy4wNDAxIDE3LjcyMjcgMTMuMDAwMSAxNy45OTI2IDEzLjAwMDFDMjAuNzUxMyAxMy4wMDAxIDIyLjk5MDIgMTUuMjQwMSAyMi45OTAyIDE4LjAwMDFDMjIuOTkwMiAxOC4yNzAxIDIyLjk1MDIgMTguNTMw''@;'; put 'put ''MSAyMi45MTAzIDE4Ljc5MDFMMjQuNTQ5NSAyMC40MzAxWk0xNy45OTI2IDkuMDAwMDZDMjMuOTg5OCA5LjAwMDA2IDI5LjM5NzIgMTIuNTIwMSAzMS44OTYgMTguMDAwMUMzMC44OTY1IDIwLjE5MDEgMjkuNDI3MiAyMi4wNjAxIDI3LjY0OCAyMy41MzAxTDI5LjA2NzQgMjQuOTUwMUMzMS4x''@;'; put 'put ''MjY0IDIzLjIyMDEgMzIuODA1NiAyMC45OTAxIDMzLjkxNTEgMTguMzkwMUMzNC4wMjUgMTguMTQwMSAzNC4wMjUgMTcuODYwMSAzMy45MTUxIDE3LjYxMDFDMzEuMTg2NCAxMS4xNjAxIDI0LjkzOTMgNy4wMDAwNiAxOC4wMDI2IDcuMDAwMDZDMTUuOTczNSA3LjAwMDA2IDE0LjAwNDQgNy4z''@;'; put 'put ''NzAwNiAxMi4xNjUzIDguMDMwMDZMMTMuNzQ0NiA5LjYxMDA2QzE1LjEwMzkgOS4yMTAwNiAxNi41MzMyIDkuMDAwMDYgMTguMDAyNiA5LjAwMDA2SDE3Ljk5MjZaTTMuNzA5MjYgMi4yOTAwNkMzLjMxOTQ0IDEuOTAwMDYgMi42Nzk3NCAxLjkwMDA2IDIuMjg5OTIgMi4yOTAwNkMxLjkwMDEg''@;'; put 'put ''Mi42ODAwNiAxLjkwMDEgMy4zMjAwNiAyLjI4OTkyIDMuNzEwMDZMOC40NzcwMiA5LjkwMDA2QzUuNzA4MzIgMTEuNzQwMSAzLjQ0OTM4IDE0LjM4MDEgMi4wODAwMiAxNy42MTAxQzEuOTcwMDcgMTcuODYwMSAxLjk3MDA3IDE4LjE0MDEgMi4wODAwMiAxOC4zOTAxQzQuODA4NzQgMjQuODQw''@;'; put 'put ''MSAxMS4wNTU4IDI5LjAwMDEgMTcuOTkyNiAyOS4wMDAxQzIwLjc0MTMgMjkuMDAwMSAyMy4zNyAyOC4zNDAxIDI1LjcxODkgMjcuMTUwMUwzMi4yNzU5IDMzLjcxMDFDMzIuNDc1OCAzMy45MTAxIDMyLjcyNTcgMzQuMDAwMSAzMi45ODU1IDM0LjAwMDFDMzMuMjQ1NCAzNC4wMDAxIDMzLjQ5''@;'; put 'put ''NTMgMzMuOTAwMSAzMy42OTUyIDMzLjcxMDFDMzQuMDg1IDMzLjMyMDEgMzQuMDg1IDMyLjY5MDEgMzMuNjk1MiAzMi4zMDAxTDMuNzA5MjYgMi4yOTAwNlpNMTMuODM0NSAxNS4yNTAxTDIwLjc0MTMgMjIuMTYwMUMxOS45NTE2IDIyLjY4MDEgMTkuMDEyMSAyMy4wMDAxIDE3Ljk5MjYgMjMu''@;'; put 'put ''MDAwMUMxNS4yMzM5IDIzLjAwMDEgMTIuOTk0OSAyMC43NjAxIDEyLjk5NDkgMTguMDAwMUMxMi45OTQ5IDE2Ljk4MDEgMTMuMzA0OCAxNi4wNDAxIDEzLjgzNDUgMTUuMjUwMVpNMTcuOTkyNiAyNy4wMDAxQzExLjk5NTQgMjcuMDAwMSA2LjU4NzkxIDIzLjQ4MDEgNC4wODkwOCAxOC4wMDAx''@;'; put 'put ''QzUuMzY4NDggMTUuMTkwMSA3LjQyNzUxIDEyLjkxMDEgOS45MjYzNCAxMS4zNDAxTDEyLjQwNTIgMTMuODIwMUMxMS41MjU2IDE0Ljk5MDEgMTAuOTk1OCAxNi40MzAxIDEwLjk5NTggMTguMDAwMUMxMC45OTU4IDIxLjg2MDEgMTQuMTM0NCAyNS4wMDAxIDE3Ljk5MjYgMjUuMDAwMUMxOS41''@;'; put 'put ''NjE4IDI1LjAwMDEgMjEuMDAxMiAyNC40NzAxIDIyLjE3MDYgMjMuNTkwMUwyNC4yMjk2IDI1LjY1MDFDMjIuMzEwNSAyNi41MjAxIDIwLjE5MTUgMjcuMDAwMSAxNy45OTI2IDI3LjAwMDFaIi8+Jyxzb2xpZDonPHBhdGggZD0iTTE3Ljk5MjYgOS4wMDAwNkMyMy45ODk4IDkuMDAwMDYgMjku''@;'; put 'put ''Mzk3MiAxMi41MjAxIDMxLjg5NiAxOC4wMDAxQzMwLjg5NjUgMjAuMTkwMSAyOS40MjcyIDIyLjA2MDEgMjcuNjQ4IDIzLjUzMDFMMjkuMDY3NCAyNC45NTAxQzMxLjEyNjQgMjMuMjIwMSAzMi44MDU2IDIwLjk5MDEgMzMuOTE1MSAxOC4zOTAxQzM0LjAyNSAxOC4xNDAxIDM0LjAyNSAxNy44''@;'; put 'put ''NjAxIDMzLjkxNTEgMTcuNjEwMUMzMS4xODY0IDExLjE2MDEgMjQuOTM5MyA3LjAwMDA2IDE4LjAwMjYgNy4wMDAwNkMxNS45NzM1IDcuMDAwMDYgMTQuMDA0NCA3LjM3MDA2IDEyLjE2NTMgOC4wMzAwNkwxMy43NDQ2IDkuNjEwMDZDMTUuMTAzOSA5LjIxMDA2IDE2LjUzMzIgOS4wMDAwNiAx''@;'; put 'put ''OC4wMDI2IDkuMDAwMDZIMTcuOTkyNlpNMy43MDkyNiAyLjI5MDA2QzMuMzE5NDQgMS45MDAwNiAyLjY3OTc0IDEuOTAwMDYgMi4yODk5MiAyLjI5MDA2QzEuOTAwMSAyLjY4MDA2IDEuOTAwMSAzLjMyMDA2IDIuMjg5OTIgMy43MTAwNkw4LjQ3NzAyIDkuOTAwMDZDNS43MDgzMiAxMS43NDAx''@;'; put 'put ''IDMuNDQ5MzggMTQuMzgwMSAyLjA4MDAyIDE3LjYxMDFDMS45NzAwNyAxNy44NjAxIDEuOTcwMDcgMTguMTQwMSAyLjA4MDAyIDE4LjM5MDFDNC44MDg3NCAyNC44NDAxIDExLjA1NTggMjkuMDAwMSAxNy45OTI2IDI5LjAwMDFDMjAuNzQxMyAyOS4wMDAxIDIzLjM3IDI4LjM0MDEgMjUuNzE4''@;'; put 'put ''OSAyNy4xNTAxTDMyLjI3NTkgMzMuNzEwMUMzMi40NzU4IDMzLjkxMDEgMzIuNzI1NyAzNC4wMDAxIDMyLjk4NTUgMzQuMDAwMUMzMy4yNDU0IDM0LjAwMDEgMzMuNDk1MyAzMy45MDAxIDMzLjY5NTIgMzMuNzEwMUMzNC4wODUgMzMuMzIwMSAzNC4wODUgMzIuNjkwMSAzMy42OTUyIDMyLjMw''@;'; put 'put ''MDFMMy43MDkyNiAyLjI5MDA2Wk0xNy45OTI2IDI3LjAwMDFDMTEuOTk1NCAyNy4wMDAxIDYuNTg3OTEgMjMuNDgwMSA0LjA4OTA4IDE4LjAwMDFDNS4zNjg0OCAxNS4xOTAxIDcuNDI3NTEgMTIuOTEwMSA5LjkyNjM0IDExLjM0MDFMMTIuNDA1MiAxMy44MjAxQzExLjUyNTYgMTQuOTkwMSAx''@;'; put 'put ''MC45OTU4IDE2LjQzMDEgMTAuOTk1OCAxOC4wMDAxQzEwLjk5NTggMjEuODYwMSAxNC4xMzQ0IDI1LjAwMDEgMTcuOTkyNiAyNS4wMDAxQzE5LjU2MTggMjUuMDAwMSAyMS4wMDEyIDI0LjQ3MDEgMjIuMTcwNiAyMy41OTAxTDI0LjIyOTYgMjUuNjUwMUMyMi4zMTA1IDI2LjUyMDEgMjAuMTkx''@;'; put 'put ''NSAyNy4wMDAxIDE3Ljk5MjYgMjcuMDAwMVpNMTUuNTYzNyAxMS40NDAxTDI0LjU0OTUgMjAuNDMwMUMyNC44Mjk0IDE5LjY3MDEgMjQuOTg5MyAxOC44NjAxIDI0Ljk4OTMgMTguMDAwMUMyNC45ODkzIDE0LjE0MDEgMjEuODUwOCAxMS4wMDAxIDE3Ljk5MjYgMTEuMDAwMUMxNy4xMzMgMTEu''@;'; put 'put ''MDAwMSAxNi4zMjMzIDExLjE2MDEgMTUuNTYzNyAxMS40NDAxWiIvPid9XSxWT2U9WyJleWUiLHtvdXRsaW5lOic8cGF0aCBkPSJNMTcuOTk3NiAxMUMxNC4xMzgyIDExIDEwLjk5ODcgMTQuMTQgMTAuOTk4NyAxOEMxMC45OTg3IDIxLjg2IDE0LjEzODIgMjUgMTcuOTk3NiAyNUMyMS44NTcg''@;'; put 'put ''MjUgMjQuOTk2NSAyMS44NiAyNC45OTY1IDE4QzI0Ljk5NjUgMTQuMTQgMjEuODU3IDExIDE3Ljk5NzYgMTFaTTE3Ljk5NzYgMjNDMTUuMjM4IDIzIDEyLjk5ODMgMjAuNzYgMTIuOTk4MyAxOEMxMi45OTgzIDE1LjI0IDE1LjIzOCAxMyAxNy45OTc2IDEzQzIwLjc1NzEgMTMgMjIuOTk2OCAx''@;'; put 'put ''NS4yNCAyMi45OTY4IDE4QzIyLjk5NjggMjAuNzYgMjAuNzU3MSAyMyAxNy45OTc2IDIzWk0zMy45MTUxIDE3LjYxQzMxLjE4NTUgMTEuMTcgMjQuOTM2NSA3IDE3Ljk5NzYgN0MxMS4wNTg2IDcgNC44MDk2MiAxMS4xNyAyLjA4MDA1IDE3LjYxQzEuOTcwMDYgMTcuODYgMS45NzAwNiAxOC4x''@;'; put 'put ''NCAyLjA4MDA1IDE4LjM5QzQuODA5NjIgMjQuODQgMTEuMDU4NiAyOSAxNy45OTc2IDI5QzI0LjkzNjUgMjkgMzEuMTg1NSAyNC44MyAzMy45MTUxIDE4LjM5QzM0LjAyNTEgMTguMTQgMzQuMDI1MSAxNy44NiAzMy45MTUxIDE3LjYxWk0xNy45OTc2IDI3QzExLjk5ODUgMjcgNi41ODkzNCAy''@;'; put 'put ''My40OCA0LjA4OTczIDE4QzYuNTg5MzQgMTIuNTIgMTEuOTk4NSA5IDE3Ljk5NzYgOUMyMy45OTY2IDkgMjkuNDA1OCAxMi41MiAzMS45MDU0IDE4QzI5LjQwNTggMjMuNDggMjMuOTk2NiAyNyAxNy45OTc2IDI3WiIvPicsc29saWQ6JzxwYXRoIGQ9Ik0xNy45OTc2IDExQzE0LjEzODIgMTEg''@;'; put 'put ''MTAuOTk4NyAxNC4xNCAxMC45OTg3IDE4QzEwLjk5ODcgMjEuODYgMTQuMTM4MiAyNSAxNy45OTc2IDI1QzIxLjg1NyAyNSAyNC45OTY1IDIxLjg2IDI0Ljk5NjUgMThDMjQuOTk2NSAxNC4xNCAyMS44NTcgMTEgMTcuOTk3NiAxMVpNMzMuOTE1MSAxNy42MUMzMS4xODU1IDExLjE3IDI0Ljkz''@;'; put 'put ''NjUgNyAxNy45OTc2IDdDMTEuMDU4NiA3IDQuODA5NjIgMTEuMTcgMi4wODAwNSAxNy42MUMxLjk3MDA2IDE3Ljg2IDEuOTcwMDYgMTguMTQgMi4wODAwNSAxOC4zOUM0LjgwOTYyIDI0Ljg0IDExLjA1ODYgMjkgMTcuOTk3NiAyOUMyNC45MzY1IDI5IDMxLjE4NTUgMjQuODMgMzMuOTE1MSAx''@;'; put 'put ''OC4zOUMzNC4wMjUxIDE4LjE0IDM0LjAyNTEgMTcuODYgMzMuOTE1MSAxNy42MVpNMTcuOTk3NiAyN0MxMS45OTg1IDI3IDYuNTg5MzQgMjMuNDggNC4wODk3MyAxOEM2LjU4OTM0IDEyLjUyIDExLjk5ODUgOSAxNy45OTc2IDlDMjMuOTk2NiA5IDI5LjQwNTggMTIuNTIgMzEuOTA1NCAxOEMy''@;'; put 'put ''OS40MDU4IDIzLjQ4IDIzLjk5NjYgMjcgMTcuOTk3NiAyN1oiLz4nfV0sQk9lPVsiZWxsaXBzaXMtdmVydGljYWwiLHtvdXRsaW5lOic8cGF0aCBkPSJNMjEuMTAwMSA0LjlDMjEuMTAwMSA2LjUwMTYzIDE5Ljc1NyA3LjggMTguMTAwMSA3LjhDMTYuNDQzMiA3LjggMTUuMTAwMSA2LjUwMTYz''@;'; put 'put ''IDE1LjEwMDEgNC45QzE1LjEwMDEgMy4yOTgzNyAxNi40NDMyIDIgMTguMTAwMSAyQzE5Ljc1NyAyIDIxLjEwMDEgMy4yOTgzNyAyMS4xMDAxIDQuOVoiLz48cGF0aCBkPSJNMTguMTAwMSAyMC45QzE5Ljc1NyAyMC45IDIxLjEwMDEgMTkuNjAxNiAyMS4xMDAxIDE4QzIxLjEwMDEgMTYuMzk4''@;'; put 'put ''NCAxOS43NTcgMTUuMSAxOC4xMDAxIDE1LjFDMTYuNDQzMiAxNS4xIDE1LjEwMDEgMTYuMzk4NCAxNS4xMDAxIDE4QzE1LjEwMDEgMTkuNjAxNiAxNi40NDMyIDIwLjkgMTguMTAwMSAyMC45WiIvPjxwYXRoIGQ9Ik0xOC4xMDAxIDM0QzE5Ljc1NyAzNCAyMS4xMDAxIDMyLjcwMTYgMjEuMTAw''@;'; put 'put ''MSAzMS4xQzIxLjEwMDEgMjkuNDk4NCAxOS43NTcgMjguMiAxOC4xMDAxIDI4LjJDMTYuNDQzMiAyOC4yIDE1LjEwMDEgMjkuNDk4NCAxNS4xMDAxIDMxLjFDMTUuMTAwMSAzMi43MDE2IDE2LjQ0MzIgMzQgMTguMTAwMSAzNFoiLz4nLG91dGxpbmVCYWRnZWQ6JzxwYXRoIGQ9Ik0yMS4xMDAx''@;'; put 'put ''IDQuOUMyMS4xMDAxIDYuNTAxNjMgMTkuNzU3IDcuOCAxOC4xMDAxIDcuOEMxNi40NDMyIDcuOCAxNS4xMDAxIDYuNTAxNjMgMTUuMTAwMSA0LjlDMTUuMTAwMSAzLjI5ODM3IDE2LjQ0MzIgMiAxOC4xMDAxIDJDMTkuNzU3IDIgMjEuMTAwMSAzLjI5ODM3IDIxLjEwMDEgNC45WiIvPjxwYXRo''@;'; put 'put ''IGQ9Ik0xOC4xMDAxIDIwLjlDMTkuNzU3IDIwLjkgMjEuMTAwMSAxOS42MDE2IDIxLjEwMDEgMThDMjEuMTAwMSAxNi4zOTg0IDE5Ljc1NyAxNS4xIDE4LjEwMDEgMTUuMUMxNi40NDMyIDE1LjEgMTUuMTAwMSAxNi4zOTg0IDE1LjEwMDEgMThDMTUuMTAwMSAxOS42MDE2IDE2LjQ0MzIgMjAu''@;'; put 'put ''OSAxOC4xMDAxIDIwLjlaIi8+PHBhdGggZD0iTTE4LjEwMDEgMzRDMTkuNzU3IDM0IDIxLjEwMDEgMzIuNzAxNiAyMS4xMDAxIDMxLjFDMjEuMTAwMSAyOS40OTg0IDE5Ljc1NyAyOC4yIDE4LjEwMDEgMjguMkMxNi40NDMyIDI4LjIgMTUuMTAwMSAyOS40OTg0IDE1LjEwMDEgMzEuMUMxNS4x''@;'; put 'put ''MDAxIDMyLjcwMTYgMTYuNDQzMiAzNCAxOC4xMDAxIDM0WiIvPjxwYXRoIGQ9Ik0zMCAxMUMzMi43NjE0IDExIDM1IDguNzYxNDIgMzUgNkMzNSAzLjIzODU4IDMyLjc2MTQgMSAzMCAxQzI3LjIzODYgMSAyNSAzLjIzODU4IDI1IDZDMjUgOC43NjE0MiAyNy4yMzg2IDExIDMwIDExWiIvPid9''@;'; put 'put ''XSxqT2U9WyJ2aWV3LWNvbHVtbnMiLHtvdXRsaW5lOic8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTMxIDVINUMzLjg5NTQzIDUgMyA1Ljg5NTQzIDMgN1YyOUMzIDMwLjEwNDYgMy44OTU0MyAzMSA1IDMxSDMxQzMyLjEwNDYgMzEgMzMgMzAuMTA0''@;'; put 'put ''NiAzMyAyOVY3QzMzIDUuODk1NDMgMzIuMTA0NiA1IDMxIDVaTTEzIDI5SDVWN0gxM1YyOVpNMTUgMjlIMjNWN0gxNVYyOVoiLz4nfV0sek9lPVsiYXJyb3ciLHtvdXRsaW5lOic8cGF0aCBkPSJNMjcuNjUwNCAxNS42MzQxTDE3Ljk5NTEgNkw4LjMzOTgxIDE1LjYzNDFDOC4wMjg2OSAxNS44''@;'; put 'put ''NzE3IDcuODg0MzIgMTYuMjY5NSA3Ljk3MDMgMTYuNjUyMUM4LjA1NjI5IDE3LjAzNDcgOC4zNTY4NSAxNy4zMzE5IDguNzM5NTIgMTcuNDEyN0M5LjEyMjE5IDE3LjQ5MzUgOS41MTY2NyAxNy4zNDMgOS43NDkxMiAxNy4wMjc2TDE2Ljk5NTYgOS44MTk1NVYyOC45OTc1QzE2Ljk5NTYgMjku''@;'; put 'put ''NTUxMiAxNy40NDMxIDMwIDE3Ljk5NTEgMzBDMTguNTQ3MSAzMCAxOC45OTQ2IDI5LjU1MTIgMTguOTk0NiAyOC45OTc1VjkuODE5NTVMMjYuMjQxMSAxNy4wMjc2QzI2LjYzMyAxNy40MTc5IDI3LjI2NjIgMTcuNDE1NyAyNy42NTU0IDE3LjAyMjZDMjguMDQ0NSAxNi42Mjk1IDI4LjA0MjMg''@;'; put 'put ''MTUuOTk0MyAyNy42NTA0IDE1LjYwNFYxNS42MzQxWiIvPid9XSxVT2U9WyJzdGVwLWZvcndhcmQtMiIse291dGxpbmU6JzxwYXRoIGQ9Ik03LjA4ODkzIDYuNTIwMDNDNi45MjY0MyA2LjY3NjQ1IDYuNzk3MzQgNi44NjMxNSA2LjcwOTIxIDcuMDY5MjFDNi42MjEwOCA3LjI3NTI2IDYuNTc1''@;'; put 'put ''NjggNy40OTY1MiA2LjU3NTY4IDcuNzIwMDNDNi41NzU2OCA3Ljk0MzUzIDYuNjIxMDggOC4xNjQ3OSA2LjcwOTIxIDguMzcwODVDNi43OTczNCA4LjU3NjkgNi45MjY0MyA4Ljc2MzYxIDcuMDg4OTMgOC45MjAwM0wxNi42ODcyIDE4TDcuMTI5NjQgMjcuMDhDNi44Mjk3NyAyNy4zOTkxIDYu''@;'; put 'put ''NjY1NTQgMjcuODE4OCA2LjY3MDY1IDI4LjI1M0M2LjY3NTc2IDI4LjY4NzIgNi44NDk4MiAyOS4xMDMxIDcuMTU3MTIgMjkuNDE1MkM3LjQ2NDQyIDI5LjcyNzQgNy44ODE2NiAyOS45MTIxIDguMzIzMjMgMjkuOTMxNkM4Ljc2NDggMjkuOTUxMSA5LjE5NzIxIDI5LjgwMzggOS41MzE3NiAy''@;'; put 'put ''OS41MkwyMS42NjQ1IDE4TDkuNTMxNzYgNi40NzAwM0M5LjM2ODUxIDYuMzE0ODIgOS4xNzU1OSA2LjE5MjkzIDguOTY0MTMgNi4xMTEzN0M4Ljc1MjY3IDYuMDI5ODIgOC41MjY4NiA1Ljk5MDIyIDguMjk5NzQgNS45OTQ4N0M4LjA3MjYyIDUuOTk5NTIgNy44NDg2OSA2LjA0ODMyIDcuNjQw''@;'; put 'put ''ODcgNi4xMzg0NkM3LjQzMzA1IDYuMjI4NTkgNy4yNDU0NiA2LjM1ODI4IDcuMDg4OTMgNi41MjAwM1oiLz48cGF0aCBkPSJNMjYuODQ1MyA1QzI2LjM4NjQgNSAyNS45NDYzIDUuMTc5MTEgMjUuNjIxOCA1LjQ5NzkyQzI1LjI5NzMgNS44MTY3MyAyNS4xMTUgNi4yNDkxMyAyNS4xMTUgNi43''@;'; put 'put ''VjI5LjNDMjUuMTE1IDI5Ljc1MDkgMjUuMjk3MyAzMC4xODMzIDI1LjYyMTggMzAuNTAyMUMyNS45NDYzIDMwLjgyMDkgMjYuMzg2NCAzMSAyNi44NDUzIDMxQzI3LjMwNDMgMzEgMjcuNzQ0NCAzMC44MjA5IDI4LjA2ODkgMzAuNTAyMUMyOC4zOTM0IDMwLjE4MzMgMjguNTc1NyAyOS43NTA5''@;'; put 'put ''IDI4LjU3NTcgMjkuM1Y2LjdDMjguNTc1NyA2LjI0OTEzIDI4LjM5MzQgNS44MTY3MyAyOC4wNjg5IDUuNDk3OTJDMjcuNzQ0NCA1LjE3OTExIDI3LjMwNDMgNSAyNi44NDUzIDVaIi8+J31dLFpPZT1bImZpbHRlci1ncmlkLWNpcmNsZSIse291dGxpbmU6JzxwYXRoIGZpbGwtcnVsZT0iZXZl''@;'; put 'put ''bm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMTggMkM5LjE2MzQ0IDIgMiA5LjE2MzQ0IDIgMThDMiAyNi44MzY2IDkuMTYzNDQgMzQgMTggMzRDMjYuODM2NiAzNCAzNCAyNi44MzY2IDM0IDE4QzM0IDEzLjc1NjUgMzIuMzE0MyA5LjY4Njg3IDI5LjMxMzcgNi42ODYyOUMyNi4zMTMx''@;'; put 'put ''IDMuNjg1NzEgMjIuMjQzNSAyIDE4IDJaTTE4IDMyQzEwLjI2OCAzMiA0IDI1LjczMiA0IDE4QzQgMTAuMjY4IDEwLjI2OCA0IDE4IDRDMjUuNzMyIDQgMzIgMTAuMjY4IDMyIDE4QzMyIDIxLjcxMyAzMC41MjUgMjUuMjc0IDI3Ljg5OTUgMjcuODk5NUMyNS4yNzQgMzAuNTI1IDIxLjcxMyAz''@;'; put 'put ''MiAxOCAzMlpNMTcgMjYuODZMMTUgMjUuODZWMjAuNjhMOC40MiAxNEM4LjE1Njc5IDEzLjczMyA4LjAwNjQgMTMuMzc0OSA4IDEzVjEyQzggMTEuNDQ3NyA4LjQ0NzcyIDExIDkgMTFIMjdDMjcuNTUyMyAxMSAyOCAxMS40NDc3IDI4IDEyVjEzQzI3Ljk5MzYgMTMuMzc0OSAyNy44NDMyIDEz''@;'; put 'put ''LjczMyAyNy41OCAxNEwyMSAyMC42OFYyOUwxOSAyOEwxOS4wMyAyMC4yN0MxOS4wMzExIDIwLjAwNzcgMTkuMTM1MyAxOS43NTYzIDE5LjMyIDE5LjU3TDI1Ljc5IDEzSDEwLjIzTDE2LjcxIDE5LjU3QzE2Ljg5NDcgMTkuNzU2MyAxNi45OTg5IDIwLjAwNzcgMTcgMjAuMjdWMjYuODZaIi8+''@;'; put 'put ''Jyxzb2xpZDonPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xOCAyQzkuMTYzNDQgMiAyIDkuMTYzNDQgMiAxOEMyIDI2LjgzNjYgOS4xNjM0NCAzNCAxOCAzNEMyNi44MzY2IDM0IDM0IDI2LjgzNjYgMzQgMThDMzQgMTMuNzU2NSAzMi4zMTQzIDku''@;'; put 'put ''Njg2ODcgMjkuMzEzNyA2LjY4NjI5QzI2LjMxMzEgMy42ODU3MSAyMi4yNDM1IDIgMTggMlpNMTggMzJDMTAuMjY4IDMyIDQgMjUuNzMyIDQgMThDNCAxMC4yNjggMTAuMjY4IDQgMTggNEMyNS43MzIgNCAzMiAxMC4yNjggMzIgMThDMzIgMjEuNzEzIDMwLjUyNSAyNS4yNzQgMjcuODk5NSAy''@;'; put 'put ''Ny44OTk1QzI1LjI3NCAzMC41MjUgMjEuNzEzIDMyIDE4IDMyWk04IDEyLjEyVjExSDI3Ljk4VjEyLjE0QzI3Ljk3ODEgMTIuMjcxOSAyNy45MjQyIDEyLjM5NzcgMjcuODMgMTIuNDlMMjAuNzEgMTkuNzRDMjAuNjA4MSAxOS44Mjk5IDIwLjU0MzggMTkuOTU0OCAyMC41MyAyMC4wOVYyOC40''@;'; put 'put ''OEMyMC41MzAzIDI4LjY1MjggMjAuNDQxNSAyOC44MTM0IDIwLjI5NSAyOC45MDVDMjAuMTQ4NSAyOC45OTY2IDE5Ljk2NTEgMjkuMDA2IDE5LjgxIDI4LjkzTDE1Ljg2IDI3LjUyQzE1LjY4ODMgMjcuNDM1OSAxNS41Nzk2IDI3LjI2MTIgMTUuNTggMjcuMDdWMjAuMThDMTUuNTc4MSAyMC4w''@;'; put 'put ''NDgxIDE1LjUyNDIgMTkuOTIyMyAxNS40MyAxOS44M0w4LjE1IDEyLjQ3QzguMDU1NzkgMTIuMzc3NyA4LjAwMTg4IDEyLjI1MTkgOCAxMi4xMloiLz4nfV0sV09lPVsiZmlsdGVyLWdyaWQiLHtvdXRsaW5lOic8cGF0aCBkPSJNMTUgMjMuODZMMTcgMjQuODZWMTguMjdDMTYuOTk4OSAxOC4w''@;'; put 'put ''MDc3IDE2Ljg5NDcgMTcuNzU2MyAxNi43MSAxNy41N0wxMC4yMyAxMUgyNS43OUwxOS4zMiAxNy41N0MxOS4xMzUzIDE3Ljc1NjMgMTkuMDMxMSAxOC4wMDc3IDE5LjAzIDE4LjI3TDE5IDI2TDIxIDI3VjE4LjY4TDI3LjU4IDEyQzI3Ljg0MzIgMTEuNzMzIDI3Ljk5MzYgMTEuMzc0OSAyOCAx''@;'; put 'put ''MVYxMEMyOCA5LjQ0NzcyIDI3LjU1MjMgOSAyNyA5SDlDOC40NDc3MiA5IDggOS40NDc3MiA4IDEwVjExQzguMDA2NCAxMS4zNzQ5IDguMTU2NzkgMTEuNzMzIDguNDIgMTJMMTUgMTguNjhWMjMuODZaIi8+Jyxzb2xpZDonPHBhdGggZD0iTTggOVYxMC4xMjEyQzguMDAxODggMTAuMjUzMiA4''@;'; put 'put ''LjA1NTg1IDEwLjM3OTEgOC4xNTAxNSAxMC40NzE2TDE1LjQzNzQgMTcuODM5M0MxNS41MzE3IDE3LjkzMTcgMTUuNTg1NyAxOC4wNTc3IDE1LjU4NzYgMTguMTg5N1YyNS4wODdDMTUuNTg3MiAyNS4yNzg0IDE1LjY5NiAyNS40NTMyIDE1Ljg2NzkgMjUuNTM3NUwxOS44MjE4IDI2Ljk0ODlD''@;'; put 'put ''MTkuOTc3MSAyNy4wMjUgMjAuMTYwNyAyNy4wMTU2IDIwLjMwNzMgMjYuOTIzOUMyMC40NTM5IDI2LjgzMjMgMjAuNTQyOSAyNi42NzE0IDIwLjU0MjUgMjYuNDk4NVYxOC4wOTk2QzIwLjU1NjQgMTcuOTY0MyAyMC42MjA3IDE3LjgzOTIgMjAuNzIyNyAxNy43NDkyTDI3Ljg0OTggMTAuNDkx''@;'; put 'put ''NkMyNy45NDQyIDEwLjM5OTIgMjcuOTk4MSAxMC4yNzMyIDI4IDEwLjE0MTJWOUg4WiIvPid9XSxzWT1bImVycm9yLXN0YW5kYXJkIix7b3V0bGluZTonPHBhdGggZD0iTTE4IDIyLjYxQzE3LjQ0NzcgMjIuNjEgMTcgMjIuMTYyMyAxNyAyMS42MVY5LjYxQzE3IDkuMDU3NzIgMTcuNDQ3NyA4''@;'; put 'put ''LjYxIDE4IDguNjFDMTguNTUyMyA4LjYxIDE5IDkuMDU3NzIgMTkgOS42MVYyMS42MUMxOSAyMi4xNjIzIDE4LjU1MjMgMjIuNjEgMTggMjIuNjFaIi8+PHBhdGggZD0iTTE5LjMzIDI2LjA2QzE5LjMzIDI2Ljc5NDUgMTguNzM0NSAyNy4zOSAxOCAyNy4zOUMxNy4yNjU1IDI3LjM5IDE2LjY3''@;'; put 'put ''IDI2Ljc5NDUgMTYuNjcgMjYuMDZDMTYuNjcgMjUuMzI1NSAxNy4yNjU1IDI0LjczIDE4IDI0LjczQzE4LjczNDUgMjQuNzMgMTkuMzMgMjUuMzI1NSAxOS4zMyAyNi4wNloiLz48cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTIgMThDMiAyNi44MzY2''@;'; put 'put ''IDkuMTYzNDQgMzQgMTggMzRDMjIuMjQzNSAzNCAyNi4zMTMxIDMyLjMxNDMgMjkuMzEzNyAyOS4zMTM3QzMyLjMxNDMgMjYuMzEzMSAzNCAyMi4yNDM1IDM0IDE4QzM0IDkuMTYzNDQgMjYuODM2NiAyIDE4IDJDOS4xNjM0NCAyIDIgOS4xNjM0NCAyIDE4Wk00IDE4QzQgMTAuMjY4IDEwLjI2''@;'; put 'put ''OCA0IDE4IDRDMjUuNzMyIDQgMzIgMTAuMjY4IDMyIDE4QzMyIDI1LjczMiAyNS43MzIgMzIgMTggMzJDMTAuMjY4IDMyIDQgMjUuNzMyIDQgMThaIi8+Jyxzb2xpZDonPHBhdGggZD0iTTE4IDJDOS4xNiAyIDIgOS4xNiAyIDE4QzIgMjYuODQgOS4xNiAzNCAxOCAzNEMyMi4yNCAzNCAyNi4z''@;'; put 'put ''MSAzMi4zMSAyOS4zMSAyOS4zMUMzMi4zMSAyNi4zMSAzNCAyMi4yNCAzNCAxOEMzNCA5LjE2IDI2Ljg0IDIgMTggMlpNMTcgOS42MUMxNyA5LjA2IDE3LjQ1IDguNjEgMTggOC42MUMxOC41NSA4LjYxIDE5IDkuMDYgMTkgOS42MVYyMS42MUMxOSAyMi4xNiAxOC41NSAyMi42MSAxOCAyMi42''@;'; put 'put ''MUMxNy40NSAyMi42MSAxNyAyMi4xNiAxNyAyMS42MVY5LjYxWk0xOCAyNy4yNkMxNy4zNCAyNy4yNiAxNi44IDI2LjcyIDE2LjggMjYuMDZDMTYuOCAyNS40IDE3LjM0IDI0Ljg2IDE4IDI0Ljg2QzE4LjY2IDI0Ljg2IDE5LjIgMjUuNCAxOS4yIDI2LjA2QzE5LjIgMjYuNzIgMTguNjYgMjcu''@;'; put 'put ''MjYgMTggMjcuMjZaIi8+J31dLFlPZT1bImhlbHAiLHtvdXRsaW5lOic8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTIgMThDMiA5LjE2MzQ0IDkuMTYzNDQgMiAxOCAyQzIyLjI0MzUgMiAyNi4zMTMxIDMuNjg1NzEgMjkuMzEzNyA2LjY4NjI5QzMy''@;'; put 'put ''LjMxNDMgOS42ODY4NyAzNCAxMy43NTY1IDM0IDE4QzM0IDI2LjgzNjYgMjYuODM2NiAzNCAxOCAzNEM5LjE2MzQ0IDM0IDIgMjYuODM2NiAyIDE4Wk00IDE4QzQgMjUuNzMyIDEwLjI2OCAzMiAxOCAzMkMyMS43MTMgMzIgMjUuMjc0IDMwLjUyNSAyNy44OTk1IDI3Ljg5OTVDMzAuNTI1IDI1''@;'; put 'put ''LjI3NCAzMiAyMS43MTMgMzIgMThDMzIgMTAuMjY4IDI1LjczMiA0IDE4IDRDMTAuMjY4IDQgNCAxMC4yNjggNCAxOFpNMTguMjkgOC45MkMxNi4wOTYxIDguODgzNzQgMTMuOTk5OCA5LjgyNTYgMTIuNTcgMTEuNDlDMTIuMzcxOCAxMS42NzM3IDEyLjI1NjMgMTEuOTI5OCAxMi4yNSAxMi4y''@;'; put 'put ''QzEyLjI0OTkgMTIuNDQ5MyAxMi4zNTA5IDEyLjY4OCAxMi41MyAxMi44NjE0QzEyLjcwOTEgMTMuMDM0OCAxMi45NTA4IDEzLjEyODEgMTMuMiAxMy4xMkMxMy40NjQyIDEzLjExMzUgMTMuNzE2OCAxMy4wMTAzIDEzLjkxIDEyLjgzQzE0Ljk5MTYgMTEuNTYyNSAxNi41NzM3IDEwLjgzMTcg''@;'; put 'put ''MTguMjQgMTAuODNDMjAuNiAxMC44MyAyMi4wNyAxMi4zNSAyMi4wNyAxNC4yNFYxNC4yOUMyMi4wNyAxNi41IDIwLjMxIDE3LjczIDE3LjUzIDE3Ljk0QzE3LjMwMjMgMTcuOTQ4OCAxNy4wODkyIDE4LjA1NDIgMTYuOTQ0MSAxOC4yMjk5QzE2Ljc5OSAxOC40MDU2IDE2LjczNTcgMTguNjM0''@;'; put 'put ''OCAxNi43NyAxOC44NlYyMS42MUMxNi44MjE1IDIyLjEyMjkgMTcuMjU0NSAyMi41MTI2IDE3Ljc3IDIyLjUxSDE3Ljg4QzE4LjM5MjkgMjIuNDU4NSAxOC43ODI2IDIyLjAyNTUgMTguNzggMjEuNTFWMTkuNDVDMjEuNzggMTkuMDMgMjQuMjEgMTcuNDUgMjQuMjEgMTQuMTdWMTQuMTJDMjQu''@;'; put 'put ''MTggMTEuMTIgMjEuODQgOC45MiAxOC4yOSA4LjkyWk0xOS4wMyAyNi4yQzE5LjAzIDI2Ljg5MDQgMTguNDcwNCAyNy40NSAxNy43OCAyNy40NUMxNy4wODk2IDI3LjQ1IDE2LjUzIDI2Ljg5MDQgMTYuNTMgMjYuMkMxNi41MyAyNS41MDk2IDE3LjA4OTYgMjQuOTUgMTcuNzggMjQuOTVDMTgu''@;'; put 'put ''NDcwNCAyNC45NSAxOS4wMyAyNS41MDk2IDE5LjAzIDI2LjJaIi8+JyxvdXRsaW5lQmFkZ2VkOic8cGF0aCBkPSJNMzMuMDAxMyAxMi43Njg5QzMyLjM5NTkgMTMuMDQ2MiAzMS43NTU5IDEzLjI0MDYgMzEuMDk4NiAxMy4zNDY3QzMzLjI2MzYgMTkuNTEwOCAzMC44NzYzIDI2LjM1MjggMjUu''@;'; put 'put ''MzQ2NSAyOS44MzJDMTkuODE2NyAzMy4zMTEyIDEyLjYxNTQgMzIuNTAyIDcuOTk1NjkgMjcuODgyMkMzLjM3NTk3IDIzLjI2MjUgMi41NjY3NCAxNi4wNjEzIDYuMDQ1OTIgMTAuNTMxNUM5LjUyNTA5IDUuMDAxNjIgMTYuMzY3MSAyLjYxNDI5IDIyLjUzMTIgNC43NzkzOEMyMi42Mzc1IDQu''@;'; put 'put ''MTIyMDUgMjIuODMxOCAzLjQ4MjA0IDIzLjEwOSAyLjg3NjYzQzE2LjA2NDkgMC40NDA5NDYgOC4yNzE5OSAzLjE5MjA1IDQuMzE4MjMgOS41MTAyOUMwLjM2NDQ3NiAxNS44Mjg1IDEuMjk3MzYgMjQuMDM5OSA2LjU2NzY3IDI5LjMxMDNDMTEuODM4IDM0LjU4MDYgMjAuMDQ5NCAzNS41MTM1''@;'; put 'put ''IDI2LjM2NzYgMzEuNTU5N0MzMi42ODU5IDI3LjYwNTkgMzUuNDM3IDE5LjgxMzEgMzMuMDAxMyAxMi43Njg5WiIvPjxwYXRoIGQ9Ik0xNy43MTk2IDI3LjM1MzNDMTguNDA3MyAyNy4zNTMzIDE4Ljk2NDggMjYuNzk1OCAxOC45NjQ4IDI2LjEwODFDMTguOTY0OCAyNS40MjAzIDE4LjQwNzMg''@;'; put 'put ''MjQuODYyOCAxNy43MTk2IDI0Ljg2MjhDMTcuMDMxOCAyNC44NjI4IDE2LjQ3NDMgMjUuNDIwMyAxNi40NzQzIDI2LjEwODFDMTYuNDc0MyAyNi43OTU4IDE3LjAzMTggMjcuMzUzMyAxNy43MTk2IDI3LjM1MzNaIi8+PHBhdGggZD0iTTI0LjA5NTMgMTQuMDczOVYxNC4xMjM4QzI0LjA5NTMg''@;'; put 'put ''MTcuMzkxMyAyMS42NzQ1IDE4LjkzNTQgMTguNzI1NyAxOS4zODM3VjIxLjQzNTlDMTguNzI4MyAyMS45NDk0IDE4LjM0MDEgMjIuMzgwNyAxNy44MjkxIDIyLjQzMjFIMTcuNzE5NkMxNy4yMDYgMjIuNDM0NyAxNi43NzQ3IDIyLjA0NjUgMTYuNzIzMyAyMS41MzU1VjE4Ljc5NTlDMTYuNjg5''@;'; put 'put ''MSAxOC41NzE2IDE2Ljc1MjIgMTguMzQzMiAxNi44OTY4IDE4LjE2ODJDMTcuMDQxMyAxNy45OTMyIDE3LjI1MzcgMTcuODg4MiAxNy40ODA1IDE3Ljg3OTRDMjAuMjQ5OSAxNy42NzAyIDIyLjAwMzIgMTYuNDQ0OSAyMi4wMDMyIDE0LjI0MzNWMTQuMTkzNUMyMi4wMDMyIDEyLjMxMDcgMjAu''@;'; put 'put ''NTM4OCAxMC43OTY0IDE4LjE4NzggMTAuNzk2NEMxNi41Mjc4IDEwLjc5ODIgMTQuOTUxNyAxMS41MjYxIDEzLjg3NDIgMTIuNzg4OEMxMy42ODE3IDEyLjk2ODQgMTMuNDMwMSAxMy4wNzEyIDEzLjE2NjkgMTMuMDc3N0MxMi45MTg3IDEzLjA4NTggMTIuNjc3OCAxMi45OTI5IDEyLjQ5OTQg''@;'; put 'put ''MTIuODIwMUMxMi4zMjEgMTIuNjQ3MyAxMi4yMjA0IDEyLjQwOTYgMTIuMjIwNSAxMi4xNjEyQzEyLjIyNjggMTEuODkyMSAxMi4zNDE4IDExLjYzNjkgMTIuNTM5MyAxMS40NTM5QzEzLjk2MzcgOS43OTU4NSAxNi4wNTIgOC44NTc1NyAxOC4yMzc2IDguODkzNjlDMjEuNzY0MSA4Ljg5MzY5''@;'; put 'put ''IDI0LjA5NTMgMTEuMDg1MyAyNC4wOTUzIDE0LjA3MzlaIi8+PHBhdGggZD0iTTMwIDExQzMyLjc2MTQgMTEgMzUgOC43NjE0MiAzNSA2QzM1IDMuMjM4NTggMzIuNzYxNCAxIDMwIDFDMjcuMjM4NiAxIDI1IDMuMjM4NTggMjUgNkMyNSA4Ljc2MTQyIDI3LjIzODYgMTEgMzAgMTFaIi8+Jyxz''@;'; put 'put ''b2xpZDonPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xOCAyQzkuMTYzNDQgMiAyIDkuMTYzNDQgMiAxOEMyIDI2LjgzNjYgOS4xNjM0NCAzNCAxOCAzNEMyNi44MzY2IDM0IDM0IDI2LjgzNjYgMzQgMThDMzQgMTMuNzU2NSAzMi4zMTQzIDkuNjg2''@;'; put 'put ''ODcgMjkuMzEzNyA2LjY4NjI5QzI2LjMxMzEgMy42ODU3MSAyMi4yNDM1IDIgMTggMlpNMTcuNzggMjcuODVDMTcuMTEyNiAyNy44NSAxNi41MTEgMjcuNDQ4IDE2LjI1NTYgMjYuODMxNEMxNi4wMDAyIDI2LjIxNDkgMTYuMTQxNCAyNS41MDUyIDE2LjYxMzMgMjUuMDMzM0MxNy4wODUyIDI0''@;'; put 'put ''LjU2MTQgMTcuNzk0OSAyNC40MjAyIDE4LjQxMTQgMjQuNjc1NkMxOS4wMjggMjQuOTMxIDE5LjQzIDI1LjUzMjYgMTkuNDMgMjYuMkMxOS40MyAyNy4xMTEzIDE4LjY5MTMgMjcuODUgMTcuNzggMjcuODVaTTE5LjE1IDIxLjUxVjE5Ljc5QzIyLjYxIDE5LjIgMjQuNTggMTcuMTYgMjQuNTgg''@;'; put 'put ''MTQuMTFDMjQuNTggMTAuODEgMjIgOC41MSAxOC4zIDguNTFDMTYuMDAwNSA4LjQ3NDUyIDEzLjgwMzMgOS40NTk1NiAxMi4zIDExLjJDMTIuMDMwNCAxMS40NjM2IDExLjg3NTkgMTEuODIzIDExLjg3IDEyLjJDMTEuODgzIDEyLjc1MTYgMTIuMjI4IDEzLjI0MDYgMTIuNzQzMiAxMy40MzhD''@;'; put 'put ''MTMuMjU4NSAxMy42MzUzIDEzLjg0MTkgMTMuNTAxOCAxNC4yMiAxMy4xQzE1LjIwOTIgMTEuOTA2OSAxNi42NzA0IDExLjIwNTYgMTguMjIgMTEuMThDMjAuMjQgMTEuMTggMjEuNjUgMTIuNDIgMjEuNjUgMTQuMjVDMjEuNjUgMTYuOCAxOS4wNCAxNy4zOCAxNy40NyAxNy41QzE3LjE0NDgg''@;'; put 'put ''MTcuNTE3NSAxNi44NDA5IDE3LjY2NzQgMTYuNjI5MyAxNy45MTVDMTYuNDE3NiAxOC4xNjI1IDE2LjMxNjcgMTguNDg2IDE2LjM1IDE4LjgxVjIxLjU3QzE2LjM2MDQgMjEuOTI3MiAxNi41MTMxIDIyLjI2NTUgMTYuNzc0MSAyMi41MDk2QzE3LjAzNTEgMjIuNzUzNyAxNy4zODI5IDIyLjg4''@;'; put 'put ''MzUgMTcuNzQgMjIuODdIMTcuODVDMTguNTc1MyAyMi44MzI5IDE5LjE0NTYgMjIuMjM2MiAxOS4xNSAyMS41MVoiLz4nLHNvbGlkQmFkZ2VkOic8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTMzLjAwMTMgMTIuNzY4OUMzMC4xNjU5IDE0LjA2ODgg''@;'; put 'put ''MjYuODIxMiAxMy40Njc5IDI0LjYxNTYgMTEuMjYyM0MyMi40MTAxIDkuMDU2NzQgMjEuODA5MSA1LjcxMiAyMy4xMDkgMi44NzY2M0MxNi4wNjQ5IDAuNDQwOTQ2IDguMjcxOTkgMy4xOTIwNSA0LjMxODIzIDkuNTEwMjlDMC4zNjQ0NzYgMTUuODI4NSAxLjI5NzM2IDI0LjAzOTkgNi41Njc2''@;'; put 'put ''NyAyOS4zMTAzQzExLjgzOCAzNC41ODA2IDIwLjA0OTQgMzUuNTEzNSAyNi4zNjc2IDMxLjU1OTdDMzIuNjg1OSAyNy42MDU5IDM1LjQzNyAxOS44MTMxIDMzLjAwMTMgMTIuNzY4OVpNMTcuNzE5NiAyNy43MTJDMTcuMDU0NyAyNy43MTIgMTYuNDU1NCAyNy4zMTE1IDE2LjIwMDkgMjYuNjk3''@;'; put 'put ''M0MxNS45NDY1IDI2LjA4MyAxNi4wODcyIDI1LjM3NiAxNi41NTczIDI0LjkwNTlDMTcuMDI3NCAyNC40MzU4IDE3LjczNDQgMjQuMjk1MiAxOC4zNDg2IDI0LjU0OTZDMTguOTYyOCAyNC44MDQgMTkuMzYzMyAyNS40MDM0IDE5LjM2MzMgMjYuMDY4MkMxOS4zNzQgMjYuNTExIDE5LjIwNTYg''@;'; put 'put ''MjYuOTM5NCAxOC44OTYyIDI3LjI1NjRDMTguNTg2NyAyNy41NzMzIDE4LjE2MjUgMjcuNzUxOSAxNy43MTk2IDI3Ljc1MThWMjcuNzEyWk0xOS4wODQ0IDIxLjM5NlYxOS43MjI0QzIyLjUzMTIgMTkuMTM0NyAyNC40OTM3IDE3LjEwMjQgMjQuNDkzNyAxNC4wMjQxQzI0LjQ5MzcgMTAuNzM2''@;'; put 'put ''NyAyMS45MjM1IDguNDQ1NCAxOC4yMzc2IDguNDQ1NEMxNS45NDY4IDguNDEwMDYgMTMuNzU4IDkuMzkxMzYgMTIuMjYwNCAxMS4xMjUyQzExLjk5MTggMTEuMzg3OCAxMS44Mzc5IDExLjc0NTggMTEuODMyIDEyLjEyMTRDMTEuODQ1IDEyLjY3MDkgMTIuMTg4NiAxMy4xNTgxIDEyLjcwMTkg''@;'; put 'put ''MTMuMzU0N0MxMy4yMTUyIDEzLjU1MTIgMTMuNzk2NCAxMy40MTgyIDE0LjE3MzEgMTMuMDE4QzE1LjE1ODYgMTEuODI5NCAxNi42MTQxIDExLjEzMDcgMTguMTU3OSAxMS4xMDUzQzIwLjE3MDIgMTEuMTA1MyAyMS41NzQ5IDEyLjM0MDYgMjEuNTc0OSAxNC4xNjM2QzIxLjU3NDkgMTYuNzAz''@;'; put 'put ''OSAxOC45NzQ4IDE3LjI4MTcgMTcuNDEwNyAxNy40MDEzQzE3LjA4NjcgMTcuNDE4NiAxNi43ODQgMTcuNTY4MSAxNi41NzMyIDE3LjgxNDdDMTYuMzYyMyAxOC4wNjEzIDE2LjI2MTggMTguMzgzNSAxNi4yOTUgMTguNzA2M1YyMS40NTU4QzE2LjMwNTQgMjEuODExNyAxNi40NTc1IDIyLjE0''@;'; put 'put ''ODcgMTYuNzE3NSAyMi4zOTE5QzE2Ljk3NzUgMjIuNjM1MSAxNy4zMjM5IDIyLjc2NDMgMTcuNjc5NyAyMi43NTA5SDE3Ljc4OTNDMTguNTExOCAyMi43MTM5IDE5LjA4IDIyLjExOTUgMTkuMDg0NCAyMS4zOTZaIi8+PHBhdGggZD0iTTMwIDExQzMyLjc2MTQgMTEgMzUgOC43NjE0MiAzNSA2''@;'; put 'put ''QzM1IDMuMjM4NTggMzIuNzYxNCAxIDMwIDFDMjcuMjM4NiAxIDI1IDMuMjM4NTggMjUgNkMyNSA4Ljc2MTQyIDI3LjIzODYgMTEgMzAgMTFaIi8+J31dLEdPZT1bImluZm8tc3RhbmRhcmQiLHtvdXRsaW5lOic8cGF0aCBkPSJNMiAxOEMyIDI2Ljg0IDkuMTYgMzQgMTggMzRDMjIuMjQgMzQg''@;'; put 'put ''MjYuMzEgMzIuMzEgMjkuMzEgMjkuMzFDMzIuMzEgMjYuMzEgMzQgMjIuMjQgMzQgMThDMzQgOS4xNiAyNi44NCAyIDE4IDJDOS4xNiAyIDIgOS4xNiAyIDE4Wk00IDE4QzQgMTAuMjcgMTAuMjcgNCAxOCA0QzI1LjczIDQgMzIgMTAuMjcgMzIgMThDMzIgMjUuNzMgMjUuNzMgMzIgMTggMzJD''@;'; put 'put ''MTAuMjcgMzIgNCAyNS43MyA0IDE4Wk0yMSAyNUgxOVYxNEgxNkMxNS40NSAxNCAxNSAxNC40NSAxNSAxNUMxNSAxNS41NSAxNS40NSAxNiAxNiAxNkgxN1YyNUgxNUMxNC40NSAyNSAxNCAyNS40NSAxNCAyNkMxNCAyNi41NSAxNC40NSAyNyAxNSAyN0gyMUMyMS41NSAyNyAyMiAyNi41NSAy''@;'; put 'put ''MiAyNkMyMiAyNS40NSAyMS41NSAyNSAyMSAyNVpNMTkuMzcgMTAuNDVDMTkuMzcgMTEuMjIgMTguNzQgMTEuODUgMTcuOTcgMTEuODVDMTcuMiAxMS44NSAxNi41NyAxMS4yMiAxNi41NyAxMC40NUMxNi41NyA5LjY4IDE3LjIgOS4wNSAxNy45NyA5LjA1QzE4Ljc0IDkuMDUgMTkuMzcgOS42''@;'; put 'put ''OCAxOS4zNyAxMC40NVoiLz4nLHNvbGlkOic8cGF0aCBkPSJNMTggMkM5LjE2IDIgMiA5LjE2IDIgMThDMiAyNi44NCA5LjE2IDM0IDE4IDM0QzIyLjI0IDM0IDI2LjMxIDMyLjMxIDI5LjMxIDI5LjMxQzMyLjMxIDI2LjMxIDM0IDIyLjI0IDM0IDE4QzM0IDkuMTYgMjYuODQgMiAxOCAyWk0x''@;'; put 'put ''Ny45NyA4Ljg1QzE4Ljg1IDguODUgMTkuNTcgOS41NyAxOS41NyAxMC40NUMxOS41NyAxMS4zMyAxOC44NSAxMi4wNSAxNy45NyAxMi4wNUMxNy4wOSAxMi4wNSAxNi4zNyAxMS4zMyAxNi4zNyAxMC40NUMxNi4zNyA5LjU3IDE3LjA5IDguODUgMTcuOTcgOC44NVpNMjEgMjcuMkgxNUMxNC4z''@;'; put 'put ''NCAyNy4yIDEzLjggMjYuNjYgMTMuOCAyNkMxMy44IDI1LjM0IDE0LjM0IDI0LjggMTUgMjQuOEgxNi44VjE2LjJIMTZDMTUuMzQgMTYuMiAxNC44IDE1LjY2IDE0LjggMTVDMTQuOCAxNC4zNCAxNS4zNCAxMy44IDE2IDEzLjhIMTkuMlYyNC44SDIxQzIxLjY2IDI0LjggMjIuMiAyNS4zNCAy''@;'; put 'put ''Mi4yIDI2QzIyLjIgMjYuNjYgMjEuNjYgMjcuMiAyMSAyNy4yWiIvPid9XSwkT2U9WyJub3RlIix7b3V0bGluZTonPHBhdGggZD0iTTI4LDMwSDZWOEgxOS4yMmwyLTJINkEyLDIsMCwwLDAsNCw4VjMwYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlYxNWwtMiwyWiIvPjxwYXRoIGQ9''@;'; put 'put ''Ik0zMy41Myw1Ljg0LDMwLjE2LDIuNDdhMS42MSwxLjYxLDAsMCwwLTIuMjgsMEwxNC4xNywxNi4yNmwtMS4xMSw0LjgxQTEuNjEsMS42MSwwLDAsMCwxNC42MywyMywxLjY5LDEuNjksMCwwLDAsMTUsMjNsNC44NS0xLjA3TDMzLjUzLDguMTJBMS42MSwxLjYxLDAsMCwwLDMzLjUzLDUuODRa''@;'; put 'put ''TTE4LjgxLDIwLjA4bC0zLjY2LjgxTDE2LDE3LjI2LDI2LjMyLDYuODdsMi44MiwyLjgyWk0zMC4yNyw4LjU2LDI3LjQ1LDUuNzQsMjksNC4xNiwzMS44NCw3WiIvPicsc29saWQ6JzxwYXRoIGQ9Ik0zMyw2LjQsMjkuMywyLjdhMS43MSwxLjcxLDAsMCwwLTIuMzYsMEwyMy42NSw2SDZBMiwy''@;'; put 'put ''LDAsMCwwLDQsOFYzMGEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWMTEuNzZsMy0zQTEuNjcsMS42NywwLDAsMCwzMyw2LjRaTTE4LjgzLDIwLjEzbC00LjE5LjkzLDEtNC4xNSw5LjU1LTkuNTcsMy4yMywzLjIzWk0yOS41LDkuNDMsMjYuMjcsNi4ybDEuODUtMS44NSwzLjIzLDMu''@;'; put 'put ''MjNaIi8+J31dLGxZPVsic3VjY2Vzcy1zdGFuZGFyZCIse291dGxpbmU6JzxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMTggMkM5LjE2MzQ0IDIgMiA5LjE2MzQ0IDIgMThDMiAyNi44MzY2IDkuMTYzNDQgMzQgMTggMzRDMjYuODM2NiAzNCAzNCAy''@;'; put 'put ''Ni44MzY2IDM0IDE4QzM0IDEzLjc1NjUgMzIuMzE0MyA5LjY4Njg3IDI5LjMxMzcgNi42ODYyOUMyNi4zMTMxIDMuNjg1NzEgMjIuMjQzNSAyIDE4IDJaTTE4IDMyQzEwLjI2OCAzMiA0IDI1LjczMiA0IDE4QzQgMTAuMjY4IDEwLjI2OCA0IDE4IDRDMjUuNzMyIDQgMzIgMTAuMjY4IDMyIDE4''@;'; put 'put ''QzMyIDIxLjcxMyAzMC41MjUgMjUuMjc0IDI3Ljg5OTUgMjcuODk5NUMyNS4yNzQgMzAuNTI1IDIxLjcxMyAzMiAxOCAzMlpNMjYuNTkgMTIuMUMyNi45OCAxMS43MTIzIDI3LjYxIDExLjcxMjMgMjggMTIuMUMyOC4xODkzIDEyLjI4NzggMjguMjk1OCAxMi41NDM0IDI4LjI5NTggMTIuODFD''@;'; put 'put ''MjguMjk1OCAxMy4wNzY2IDI4LjE4OTMgMTMuMzMyMiAyOCAxMy41MkwxNS40OSAyNkw4IDE4LjUzQzcuNjE4OTIgMTguMTE4NSA3LjY0MzU1IDE3LjQ3NjEgOC4wNTUgMTcuMDk1QzguNDY2NDUgMTYuNzEzOSA5LjEwODkyIDE2LjczODUgOS40OSAxNy4xNUwxNS40OSAyMy4xNUwyNi41OSAx''@;'; put 'put ''Mi4xWiIvPicsc29saWQ6JzxwYXRoIGQ9Ik0yOS4zMSA2LjY5QzI2LjMxIDMuNjkgMjIuMjQgMiAxOCAyQzkuMTYgMiAyIDkuMTYgMiAxOEMyIDI2Ljg0IDkuMTYgMzQgMTggMzRDMjYuODQgMzQgMzQgMjYuODQgMzQgMThDMzQgMTMuNzYgMzIuMzEgOS42OSAyOS4zMSA2LjY5Wk0yOC4xNCAx''@;'; put 'put ''My42NEwxNS42MyAyNi4xMkwxNS40OSAyNi4yNkwxNS4zNSAyNi4xMkw3Ljg1IDE4LjY0QzcuMzkgMTguMTUgNy40MiAxNy4zOCA3LjkyIDE2LjkyQzguMTUgMTYuNzEgOC40NCAxNi42IDguNzUgMTYuNkM5LjA5IDE2LjYgOS40MSAxNi43NCA5LjY0IDE2Ljk4TDE1LjUgMjIuODRMMjYuNDYg''@;'; put 'put ''MTEuOTNDMjYuNjkgMTEuNyAyNi45OSAxMS41OCAyNy4zMSAxMS41OEMyNy42MyAxMS41OCAyNy45MyAxMS43IDI4LjE2IDExLjkzQzI4LjM5IDEyLjE1IDI4LjUxIDEyLjQ2IDI4LjUxIDEyLjc4QzI4LjUxIDEzLjEgMjguMzggMTMuNDEgMjguMTYgMTMuNjNMMjguMTQgMTMuNjRaIi8+J31d''@;'; put 'put ''LEtPZT1bIndhcm5pbmctc3RhbmRhcmQiLHtvdXRsaW5lOic8cGF0aCBkPSJNMTguMDAwMSAyMi45OTMyQzE4LjU1MDEgMjIuOTkzMiAxOS4wMDAxIDIyLjU0MzQgMTkuMDAwMSAyMS45OTM2VjEwLjk5NzVDMTkuMDAwMSAxMC40NDc3IDE4LjU1MDEgOS45OTc4NiAxOC4wMDAxIDkuOTk3ODZD''@;'; put 'put ''MTcuNDUwMSA5Ljk5Nzg2IDE3LjAwMDEgMTAuNDQ3NyAxNy4wMDAxIDEwLjk5NzVWMjEuOTkzNkMxNy4wMDAxIDIyLjU0MzQgMTcuNDUwMSAyMi45OTMyIDE4LjAwMDEgMjIuOTkzMlpNMzMuNTYwMSAyNy4yMTE3TDIwLjc4MDEgNS41Nzk0NEMyMC4yMDAxIDQuNTg5NzkgMTkuMTYwMSA0IDE4''@;'; put 'put ''LjAwMDEgNEMxNi44NDAxIDQgMTUuODAwMSA0LjU4OTc5IDE1LjIyMDEgNS41Nzk0NEwyLjQ0MDEgMjcuMjExN0MxLjg1MDEgMjguMjExNCAxLjg1MDEgMjkuNDAwOSAyLjQzMDEgMzAuNDAwNkMzLjAxMDEgMzEuNDAwMiA0LjA2MDEgMzIgNS4yMjAxIDMySDMwLjc3MDFDMzEuOTQwMSAzMiAz''@;'; put 'put ''Mi45ODAxIDMxLjQwMDIgMzMuNTYwMSAzMC40MDA2QzM0LjE0MDEgMjkuNDAwOSAzNC4xNDAxIDI4LjIxMTQgMzMuNTUwMSAyNy4yMTE3SDMzLjU2MDFaTTMxLjgxMDEgMjkuNDAwOUMzMS43MTAxIDI5LjU4MDkgMzEuNDAwMSAyOS45OTA3IDMwLjc4MDEgMjkuOTkwN0g1LjIzMDFDNC42MTAx''@;'; put 'put ''IDI5Ljk5MDcgNC4zMDAxIDI5LjU4MDkgNC4yMDAxIDI5LjQwMDlDNC4xMDAxIDI5LjIyMSAzLjg5MDEgMjguNzUxMiA0LjIwMDEgMjguMjMxM0wxNi45ODAxIDYuNTg5MDhDMTcuMjkwMSA2LjA2OTI2IDE3LjgwMDEgNi4wMDkyOCAxOC4wMDAxIDYuMDA5MjhDMTguMjAwMSA2LjAwOTI4IDE4''@;'; put 'put ''LjcxMDEgNi4wNjkyNiAxOS4wMjAxIDYuNTg5MDhMMzEuNzkwMSAyOC4yMjEzQzMyLjEwMDEgMjguNzUxMiAzMS45MDAxIDI5LjIyMSAzMS43OTAxIDI5LjM5MDlMMzEuODEwMSAyOS40MDA5Wk0xOC4wMTAxIDI1LjAwMjVDMTcuMjgwMSAyNS4wMDI1IDE2LjY4MDEgMjUuNjAyMyAxNi42ODAx''@;'; put 'put ''IDI2LjMzMkMxNi42ODAxIDI3LjA2MTggMTcuMjgwMSAyNy42NjE1IDE4LjAxMDEgMjcuNjYxNUMxOC43NDAxIDI3LjY2MTUgMTkuMzQwMSAyNy4wNjE4IDE5LjM0MDEgMjYuMzMyQzE5LjM0MDEgMjUuNjAyMyAxOC43NDAxIDI1LjAwMjUgMTguMDEwMSAyNS4wMDI1WiIvPicsc29saWQ6Jzxw''@;'; put 'put ''YXRoIGQ9Ik0zMy41NjAxIDI3LjIyTDIwLjc4MDEgNS41OEMyMC4yMDAxIDQuNTkgMTkuMTYwMSA0IDE4LjAwMDEgNEMxNi44NDAxIDQgMTUuODAwMSA0LjU5IDE1LjIyMDEgNS41OEwyLjQ0MDA2IDI3LjIyQzEuODUwMDYgMjguMjIgMS44NTAwNiAyOS40MSAyLjQ0MDA2IDMwLjQxQzMuMDIw''@;'; put 'put ''MDYgMzEuNDEgNC4wNzAwNiAzMi4wMSA1LjIzMDA2IDMyLjAxSDMwLjc4MDFDMzEuOTUwMSAzMi4wMSAzMi45OTAxIDMxLjQxIDMzLjU3MDEgMzAuNDFDMzQuMTUwMSAyOS40MSAzNC4xNTAxIDI4LjIyIDMzLjU2MDEgMjcuMjJaTTE2LjkwMDEgMTFDMTYuOTAwMSAxMC4zOSAxNy4zOTAxIDku''@;'; put 'put ''OSAxOC4wMDAxIDkuOUMxOC42MTAxIDkuOSAxOS4xMDAxIDEwLjM5IDE5LjEwMDEgMTFWMjJDMTkuMTAwMSAyMi42MSAxOC42MTAxIDIzLjEgMTguMDAwMSAyMy4xQzE3LjM5MDEgMjMuMSAxNi45MDAxIDIyLjYxIDE2LjkwMDEgMjJWMTFaTTE4LjAwMDEgMjcuNzZDMTcuMjEwMSAyNy43NiAx''@;'; put 'put ''Ni41NzAxIDI3LjEyIDE2LjU3MDEgMjYuMzNDMTYuNTcwMSAyNS41NCAxNy4yMTAxIDI0LjkgMTguMDAwMSAyNC45QzE4Ljc5MDEgMjQuOSAxOS40MzAxIDI1LjU0IDE5LjQzMDEgMjYuMzNDMTkuNDMwMSAyNy4xMiAxOC43OTAxIDI3Ljc2IDE4LjAwMDEgMjcuNzZaIi8+J31dLHFPZT1bImNp''@;'; put 'put ''cmNsZSIse291dGxpbmU6JzxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNNCAxOEM0IDEwLjI2OCAxMC4yNjggNCAxOCA0QzI1LjczMiA0IDMyIDEwLjI2OCAzMiAxOEMzMiAyNS43MzIgMjUuNzMyIDMyIDE4IDMyQzEwLjI2OCAzMiA0IDI1LjczMiA0''@;'; put 'put ''IDE4Wk02IDE4QzYgMjQuNjI3NCAxMS4zNzI2IDMwIDE4IDMwQzIxLjE4MjYgMzAgMjQuMjM0OCAyOC43MzU3IDI2LjQ4NTMgMjYuNDg1M0MyOC43MzU3IDI0LjIzNDggMzAgMjEuMTgyNiAzMCAxOEMzMCAxMS4zNzI2IDI0LjYyNzQgNiAxOCA2QzExLjM3MjYgNiA2IDExLjM3MjYgNiAxOFoi''@;'; put 'put ''Lz4nLHNvbGlkOic8cGF0aCBkPSJNMTggNEMxMC4yNjggNCA0IDEwLjI2OCA0IDE4QzQgMjUuNzMyIDEwLjI2OCAzMiAxOCAzMkMyNS43MzIgMzIgMzIgMjUuNzMyIDMyIDE4QzMyIDEwLjI2OCAyNS43MzIgNCAxOCA0WiIvPid9XSxYT2U9WyJkb3QtY2lyY2xlIix7b3V0bGluZTonPHBhdGgg''@;'; put 'put ''ZD0iTTE4IDExQzE5LjM4NDUgMTEgMjAuNzM3OSAxMS40MTA1IDIxLjg4OSAxMi4xNzk3QzIzLjA0MDEgMTIuOTQ4OSAyMy45Mzc0IDE0LjA0MjEgMjQuNDY3MiAxNS4zMjEyQzI0Ljk5NyAxNi42MDAzIDI1LjEzNTYgMTguMDA3OCAyNC44NjU1IDE5LjM2NTZDMjQuNTk1NCAyMC43MjM1IDIz''@;'; put 'put ''LjkyODcgMjEuOTcwOCAyMi45NDk4IDIyLjk0OThDMjEuOTcwOCAyMy45Mjg3IDIwLjcyMzUgMjQuNTk1NCAxOS4zNjU2IDI0Ljg2NTVDMTguMDA3OCAyNS4xMzU2IDE2LjYwMDMgMjQuOTk3IDE1LjMyMTIgMjQuNDY3MkMxNC4wNDIxIDIzLjkzNzQgMTIuOTQ4OSAyMy4wNDAxIDEyLjE3OTcg''@;'; put 'put ''MjEuODg5QzExLjQxMDUgMjAuNzM3OSAxMSAxOS4zODQ1IDExIDE4QzExIDE2LjE0MzUgMTEuNzM3NSAxNC4zNjMgMTMuMDUwMyAxMy4wNTAzQzE0LjM2MyAxMS43Mzc1IDE2LjE0MzUgMTEgMTggMTFaIi8+PHBhdGggZD0iTTE4IDM0QzE0LjgzNTUgMzQgMTEuNzQyMSAzMy4wNjE2IDkuMTEw''@;'; put 'put ''ODggMzEuMzAzNUM2LjQ3OTcgMjkuNTQ1NCA0LjQyODk0IDI3LjA0NjYgMy4yMTc5MyAyNC4xMjI5QzIuMDA2OTMgMjEuMTk5MyAxLjY5MDA4IDE3Ljk4MjMgMi4zMDc0NCAxNC44Nzg2QzIuOTI0ODEgMTEuNzc0OSA0LjQ0ODY2IDguOTIzOTQgNi42ODYzIDYuNjg2M0M4LjkyMzk0IDQuNDQ4''@;'; put 'put ''NjYgMTEuNzc0OSAyLjkyNDgxIDE0Ljg3ODYgMi4zMDc0NEMxNy45ODIzIDEuNjkwMDggMjEuMTk5MyAyLjAwNjkzIDI0LjEyMjkgMy4yMTc5M0MyNy4wNDY2IDQuNDI4OTQgMjkuNTQ1NCA2LjQ3OTcgMzEuMzAzNSA5LjExMDg4QzMzLjA2MTYgMTEuNzQyMSAzNCAxNC44MzU1IDM0IDE4QzM0''@;'; put 'put ''IDIyLjI0MzUgMzIuMzE0MyAyNi4zMTMxIDI5LjMxMzcgMjkuMzEzN0MyNi4zMTMxIDMyLjMxNDMgMjIuMjQzNSAzNCAxOCAzNFpNMTggNC4wMDAwMUMxNS4yMzExIDQuMDAwMDEgMTIuNTI0MyA0LjgyMTA5IDEwLjIyMiA2LjM1OTQzQzcuOTE5NzQgNy44OTc3NyA2LjEyNTMyIDEwLjA4NDMg''@;'; put 'put ''NS4wNjU2OSAxMi42NDI0QzQuMDA2MDcgMTUuMjAwNiAzLjcyODgyIDE4LjAxNTUgNC4yNjkwMSAyMC43MzEzQzQuODA5MjEgMjMuNDQ3IDYuMTQyNTggMjUuOTQxNiA4LjEwMDUxIDI3Ljg5OTVDMTAuMDU4NCAyOS44NTc0IDEyLjU1MyAzMS4xOTA4IDE1LjI2ODcgMzEuNzMxQzE3Ljk4NDUg''@;'; put 'put ''MzIuMjcxMiAyMC43OTk0IDMxLjk5MzkgMjMuMzU3NiAzMC45MzQzQzI1LjkxNTcgMjkuODc0NyAyOC4xMDIyIDI4LjA4MDMgMjkuNjQwNiAyNS43NzhDMzEuMTc4OSAyMy40NzU3IDMyIDIwLjc2ODkgMzIgMThDMzIgMTQuMjg3IDMwLjUyNSAxMC43MjYgMjcuODk5NSA4LjEwMDUxQzI1LjI3''@;'; put 'put ''NCA1LjQ3NSAyMS43MTMgNC4wMDAwMSAxOCA0LjAwMDAxWiIvPid9XTtmdW5jdGlvbiBKT2UoYyxsKXtyZXR1cm4gYz09PWx9Y2xhc3MgZVBlIGV4dGVuZHMgcXR7Y29uc3RydWN0b3IobCxhKXtzdXBlcigpfXNjaGVkdWxlKGwsYT0wKXtyZXR1cm4gdGhpc319Y29uc3Qgd0w9e3NldEludGVy''@;'; put 'put ''dmFsKGMsbCwuLi5hKXtjb25zdHtkZWxlZ2F0ZTpkfT13TDtyZXR1cm4gZD8uc2V0SW50ZXJ2YWw/ZC5zZXRJbnRlcnZhbChjLGwsLi4uYSk6c2V0SW50ZXJ2YWwoYyxsLC4uLmEpfSxjbGVhckludGVydmFsKGMpe2NvbnN0e2RlbGVnYXRlOmx9PXdMO3JldHVybihsPy5jbGVhckludGVydmFs''@;'; put 'put ''fHxjbGVhckludGVydmFsKShjKX0sZGVsZWdhdGU6dm9pZCAwfTtjbGFzcyB1WSBleHRlbmRzIGVQZXtjb25zdHJ1Y3RvcihsLGEpe3N1cGVyKGwsYSksdGhpcy5zY2hlZHVsZXI9bCx0aGlzLndvcms9YSx0aGlzLnBlbmRpbmc9ITF9c2NoZWR1bGUobCxhPTApe3ZhciBkO2lmKHRoaXMuY2xv''@;'; put 'put ''c2VkKXJldHVybiB0aGlzO3RoaXMuc3RhdGU9bDtjb25zdCBoPXRoaXMuaWQsZj10aGlzLnNjaGVkdWxlcjtyZXR1cm4gbnVsbCE9aCYmKHRoaXMuaWQ9dGhpcy5yZWN5Y2xlQXN5bmNJZChmLGgsYSkpLHRoaXMucGVuZGluZz0hMCx0aGlzLmRlbGF5PWEsdGhpcy5pZD1udWxsIT09KGQ9dGhp''@;'; put 'put ''cy5pZCkmJnZvaWQgMCE9PWQ/ZDp0aGlzLnJlcXVlc3RBc3luY0lkKGYsdGhpcy5pZCxhKSx0aGlzfXJlcXVlc3RBc3luY0lkKGwsYSxkPTApe3JldHVybiB3TC5zZXRJbnRlcnZhbChsLmZsdXNoLmJpbmQobCx0aGlzKSxkKX1yZWN5Y2xlQXN5bmNJZChsLGEsZD0wKXtpZihudWxsIT1kJiZ0''@;'; put 'put ''aGlzLmRlbGF5PT09ZCYmITE9PT10aGlzLnBlbmRpbmcpcmV0dXJuIGE7bnVsbCE9YSYmd0wuY2xlYXJJbnRlcnZhbChhKX1leGVjdXRlKGwsYSl7aWYodGhpcy5jbG9zZWQpcmV0dXJuIG5ldyBFcnJvcigiZXhlY3V0aW5nIGEgY2FuY2VsbGVkIGFjdGlvbiIpO3RoaXMucGVuZGluZz0hMTtj''@;'; put 'put ''b25zdCBkPXRoaXMuX2V4ZWN1dGUobCxhKTtpZihkKXJldHVybiBkOyExPT09dGhpcy5wZW5kaW5nJiZudWxsIT10aGlzLmlkJiYodGhpcy5pZD10aGlzLnJlY3ljbGVBc3luY0lkKHRoaXMuc2NoZWR1bGVyLHRoaXMuaWQsbnVsbCkpfV9leGVjdXRlKGwsYSl7bGV0IGgsZD0hMTt0cnl7dGhp''@;'; put 'put ''cy53b3JrKGwpfWNhdGNoKGYpe2Q9ITAsaD1mfHxuZXcgRXJyb3IoIlNjaGVkdWxlZCBhY3Rpb24gdGhyZXcgZmFsc3kgZXJyb3IiKX1pZihkKXJldHVybiB0aGlzLnVuc3Vic2NyaWJlKCksaH11bnN1YnNjcmliZSgpe2lmKCF0aGlzLmNsb3NlZCl7Y29uc3R7aWQ6bCxzY2hlZHVsZXI6YX09''@;'; put 'put ''dGhpcyx7YWN0aW9uczpkfT1hO3RoaXMud29yaz10aGlzLnN0YXRlPXRoaXMuc2NoZWR1bGVyPW51bGwsdGhpcy5wZW5kaW5nPSExLHV0KGQsdGhpcyksbnVsbCE9bCYmKHRoaXMuaWQ9dGhpcy5yZWN5Y2xlQXN5bmNJZChhLGwsbnVsbCkpLHRoaXMuZGVsYXk9bnVsbCxzdXBlci51bnN1YnNj''@;'; put 'put ''cmliZSgpfX19Y29uc3QgZFk9e25vdzooKT0+KGRZLmRlbGVnYXRlfHxEYXRlKS5ub3coKSxkZWxlZ2F0ZTp2b2lkIDB9O2NsYXNzIGJ4e2NvbnN0cnVjdG9yKGwsYT1ieC5ub3cpe3RoaXMuc2NoZWR1bGVyQWN0aW9uQ3Rvcj1sLHRoaXMubm93PWF9c2NoZWR1bGUobCxhPTAsZCl7cmV0dXJu''@;'; put 'put ''IG5ldyB0aGlzLnNjaGVkdWxlckFjdGlvbkN0b3IodGhpcyxsKS5zY2hlZHVsZShkLGEpfX1ieC5ub3c9ZFkubm93O2NsYXNzIGhZIGV4dGVuZHMgYnh7Y29uc3RydWN0b3IobCxhPWJ4Lm5vdyl7c3VwZXIobCxhKSx0aGlzLmFjdGlvbnM9W10sdGhpcy5fYWN0aXZlPSExfWZsdXNoKGwpe2Nv''@;'; put 'put ''bnN0e2FjdGlvbnM6YX09dGhpcztpZih0aGlzLl9hY3RpdmUpcmV0dXJuIHZvaWQgYS5wdXNoKGwpO2xldCBkO3RoaXMuX2FjdGl2ZT0hMDtkb3tpZihkPWwuZXhlY3V0ZShsLnN0YXRlLGwuZGVsYXkpKWJyZWFrfXdoaWxlKGw9YS5zaGlmdCgpKTtpZih0aGlzLl9hY3RpdmU9ITEsZCl7Zm9y''@;'; put 'put ''KDtsPWEuc2hpZnQoKTspbC51bnN1YnNjcmliZSgpO3Rocm93IGR9fX1jb25zdCBDTD1uZXcgaFkodVkpLHRQZT1DTDtmdW5jdGlvbiBmbShjLGw9Q0wpe3JldHVybiBWaSgoYSxkKT0+e2xldCBoPW51bGwsZj1udWxsLHY9bnVsbDtjb25zdCBNPSgpPT57aWYoaCl7aC51bnN1YnNjcmliZSgp''@;'; put 'put ''LGg9bnVsbDtjb25zdCBaPWY7Zj1udWxsLGQubmV4dChaKX19O2Z1bmN0aW9uIEQoKXtjb25zdCBaPXYrYyxyZT1sLm5vdygpO2lmKHJlPFopcmV0dXJuIGg9dGhpcy5zY2hlZHVsZSh2b2lkIDAsWi1yZSksdm9pZCBkLmFkZChoKTtNKCl9YS5zdWJzY3JpYmUoTmkoZCxaPT57Zj1aLHY9bC5u''@;'; put 'put ''b3coKSxofHwoaD1sLnNjaGVkdWxlKEQsYyksZC5hZGQoaCkpfSwoKT0+e00oKSxkLmNvbXBsZXRlKCl9LHZvaWQgMCwoKT0+e2Y9aD1udWxsfSkpfSl9Y29uc3QgblBlPVsiYWRkTGlzdGVuZXIiLCJyZW1vdmVMaXN0ZW5lciJdLHJQZT1bImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmVFdmVu''@;'; put 'put ''dExpc3RlbmVyIl0saVBlPVsib24iLCJvZmYiXTtmdW5jdGlvbiB4ZChjLGwsYSxkKXtpZigkZShhKSYmKGQ9YSxhPXZvaWQgMCksZClyZXR1cm4geGQoYyxsLGEpLnBpcGUoelooZCkpO2NvbnN0W2gsZl09ZnVuY3Rpb24gc1BlKGMpe3JldHVybiAkZShjLmFkZEV2ZW50TGlzdGVuZXIpJiYk''@;'; put 'put ''ZShjLnJlbW92ZUV2ZW50TGlzdGVuZXIpfShjKT9yUGUubWFwKHY9Pk09PmNbdl0obCxNLGEpKTpmdW5jdGlvbiBhUGUoYyl7cmV0dXJuICRlKGMuYWRkTGlzdGVuZXIpJiYkZShjLnJlbW92ZUxpc3RlbmVyKX0oYyk/blBlLm1hcChEMGUoYyxsKSk6ZnVuY3Rpb24gb1BlKGMpe3JldHVybiAk''@;'; put 'put ''ZShjLm9uKSYmJGUoYy5vZmYpfShjKT9pUGUubWFwKEQwZShjLGwpKTpbXTtpZighaCYmQlooYykpcmV0dXJuIE4wKHY9PnhkKHYsbCxhKSkobDEoYykpO2lmKCFoKXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgZXZlbnQgdGFyZ2V0Iik7cmV0dXJuIG5ldyBYdCh2PT57Y29uc3QgTT0o''@;'; put 'put ''Li4uRCk9PnYubmV4dCgxPEQubGVuZ3RoP0Q6RFswXSk7cmV0dXJuIGgoTSksKCk9PmYoTSl9KX1mdW5jdGlvbiBEMGUoYyxsKXtyZXR1cm4gYT0+ZD0+Y1thXShsLGQpfWNsYXNzIHl4IGV4dGVuZHMgV257Y29uc3RydWN0b3IobD0xLzAsYT0xLzAsZD1kWSl7c3VwZXIoKSx0aGlzLl9idWZm''@;'; put 'put ''ZXJTaXplPWwsdGhpcy5fd2luZG93VGltZT1hLHRoaXMuX3RpbWVzdGFtcFByb3ZpZGVyPWQsdGhpcy5fYnVmZmVyPVtdLHRoaXMuX2luZmluaXRlVGltZVdpbmRvdz0hMCx0aGlzLl9pbmZpbml0ZVRpbWVXaW5kb3c9YT09PTEvMCx0aGlzLl9idWZmZXJTaXplPU1hdGgubWF4KDEsbCksdGhp''@;'; put 'put ''cy5fd2luZG93VGltZT1NYXRoLm1heCgxLGEpfW5leHQobCl7Y29uc3R7aXNTdG9wcGVkOmEsX2J1ZmZlcjpkLF9pbmZpbml0ZVRpbWVXaW5kb3c6aCxfdGltZXN0YW1wUHJvdmlkZXI6Zixfd2luZG93VGltZTp2fT10aGlzO2F8fChkLnB1c2gobCksIWgmJmQucHVzaChmLm5vdygpK3YpKSx0''@;'; put 'put ''aGlzLl90cmltQnVmZmVyKCksc3VwZXIubmV4dChsKX1fc3Vic2NyaWJlKGwpe3RoaXMuX3Rocm93SWZDbG9zZWQoKSx0aGlzLl90cmltQnVmZmVyKCk7Y29uc3QgYT10aGlzLl9pbm5lclN1YnNjcmliZShsKSx7X2luZmluaXRlVGltZVdpbmRvdzpkLF9idWZmZXI6aH09dGhpcyxmPWguc2xp''@;'; put 'put ''Y2UoKTtmb3IobGV0IHY9MDt2PGYubGVuZ3RoJiYhbC5jbG9zZWQ7dis9ZD8xOjIpbC5uZXh0KGZbdl0pO3JldHVybiB0aGlzLl9jaGVja0ZpbmFsaXplZFN0YXR1c2VzKGwpLGF9X3RyaW1CdWZmZXIoKXtjb25zdHtfYnVmZmVyU2l6ZTpsLF90aW1lc3RhbXBQcm92aWRlcjphLF9idWZmZXI6''@;'; put 'put ''ZCxfaW5maW5pdGVUaW1lV2luZG93Omh9PXRoaXMsZj0oaD8xOjIpKmw7aWYobDwxLzAmJmY8ZC5sZW5ndGgmJmQuc3BsaWNlKDAsZC5sZW5ndGgtZiksIWgpe2NvbnN0IHY9YS5ub3coKTtsZXQgTT0wO2ZvcihsZXQgRD0xO0Q8ZC5sZW5ndGgmJmRbRF08PXY7RCs9MilNPUQ7TSYmZC5zcGxp''@;'; put 'put ''Y2UoMCxNKzEpfX19ZnVuY3Rpb24gZlkoYyxsLC4uLmEpe2lmKCEwPT09bClyZXR1cm4gdm9pZCBjKCk7aWYoITE9PT1sKXJldHVybjtjb25zdCBkPW5ldyBodCh7bmV4dDooKT0+e2QudW5zdWJzY3JpYmUoKSxjKCl9fSk7cmV0dXJuIGwxKGwoLi4uYSkpLnN1YnNjcmliZShkKX1mdW5jdGlv''@;'; put 'put ''biBJMGUoYyxsLGEpe2xldCBkLGg9ITE7cmV0dXJuIGMmJiJvYmplY3QiPT10eXBlb2YgYz8oe2J1ZmZlclNpemU6ZD0xLzAsd2luZG93VGltZTpsPTEvMCxyZWZDb3VudDpoPSExLHNjaGVkdWxlcjphfT1jKTpkPWM/PzEvMCxmdW5jdGlvbiBsUGUoYz17fSl7Y29uc3R7Y29ubmVjdG9yOmw9''@;'; put 'put ''KCgpPT5uZXcgV24pLHJlc2V0T25FcnJvcjphPSEwLHJlc2V0T25Db21wbGV0ZTpkPSEwLHJlc2V0T25SZWZDb3VudFplcm86aD0hMH09YztyZXR1cm4gZj0+e2xldCB2LE0sRCxaPTAscmU9ITEsY2U9ITE7Y29uc3QgYmU9KCk9PntNPy51bnN1YnNjcmliZSgpLE09dm9pZCAwfSxFZT0oKT0+''@;'; put 'put ''e2JlKCksdj1EPXZvaWQgMCxyZT1jZT0hMX0sQmU9KCk9Pntjb25zdCBxZT12O0VlKCkscWU/LnVuc3Vic2NyaWJlKCl9O3JldHVybiBWaSgocWUscnQpPT57WisrLCFjZSYmIXJlJiZiZSgpO2NvbnN0IHB0PUQ9RD8/bCgpO3J0LmFkZCgoKT0+e1otLSwwPT09WiYmIWNlJiYhcmUmJihNPWZZ''@;'; put 'put ''KEJlLGgpKX0pLHB0LnN1YnNjcmliZShydCksIXYmJlo+MCYmKHY9bmV3IGh0KHtuZXh0OmR0PT5wdC5uZXh0KGR0KSxlcnJvcjpkdD0+e2NlPSEwLGJlKCksTT1mWShFZSxhLGR0KSxwdC5lcnJvcihkdCl9LGNvbXBsZXRlOigpPT57cmU9ITAsYmUoKSxNPWZZKEVlLGQpLHB0LmNvbXBsZXRl''@;'; put 'put ''KCl9fSksbDEocWUpLnN1YnNjcmliZSh2KSl9KShmKX19KHtjb25uZWN0b3I6KCk9Pm5ldyB5eChkLGwsYSkscmVzZXRPbkVycm9yOiEwLHJlc2V0T25Db21wbGV0ZTohMSxyZXNldE9uUmVmQ291bnRaZXJvOmh9KX1mdW5jdGlvbiBfeCguLi5jKXtjb25zdCBsPWpNKGMpLGE9ZnVuY3Rpb24g''@;'; put 'put ''WE1lKGMsbCl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBqWihjKT9jLnBvcCgpOmx9KGMsMS8wKSxkPWM7cmV0dXJuIGQubGVuZ3RoPzE9PT1kLmxlbmd0aD9sMShkWzBdKTpleShhKShZdShkLGwpKTpNMn12YXIgQW89ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5TdGF0ZT0wXT0iU3RhdGUiLGNb''@;'; put 'put ''Yy5UcmFuc2l0aW9uPTFdPSJUcmFuc2l0aW9uIixjW2MuU2VxdWVuY2U9Ml09IlNlcXVlbmNlIixjW2MuR3JvdXA9M109Ikdyb3VwIixjW2MuQW5pbWF0ZT00XT0iQW5pbWF0ZSIsY1tjLktleWZyYW1lcz01XT0iS2V5ZnJhbWVzIixjW2MuU3R5bGU9Nl09IlN0eWxlIixjW2MuVHJpZ2dlcj03''@;'; put 'put ''XT0iVHJpZ2dlciIsY1tjLlJlZmVyZW5jZT04XT0iUmVmZXJlbmNlIixjW2MuQW5pbWF0ZUNoaWxkPTldPSJBbmltYXRlQ2hpbGQiLGNbYy5BbmltYXRlUmVmPTEwXT0iQW5pbWF0ZVJlZiIsY1tjLlF1ZXJ5PTExXT0iUXVlcnkiLGNbYy5TdGFnZ2VyPTEyXT0iU3RhZ2dlciIsY30oQW98fHt9''@;'; put 'put ''KTtjb25zdCBpZz0iKiI7ZnVuY3Rpb24geWgoYyxsKXtyZXR1cm57dHlwZTpBby5UcmlnZ2VyLG5hbWU6YyxkZWZpbml0aW9uczpsLG9wdGlvbnM6e319fWZ1bmN0aW9uIE0wKGMsbD1udWxsKXtyZXR1cm57dHlwZTpBby5BbmltYXRlLHN0eWxlczpsLHRpbWluZ3M6Y319ZnVuY3Rpb24gdXMo''@;'; put 'put ''Yyl7cmV0dXJue3R5cGU6QW8uU3R5bGUsc3R5bGVzOmMsb2Zmc2V0Om51bGx9fWZ1bmN0aW9uIFNMKGMsbCxhKXtyZXR1cm57dHlwZTpBby5TdGF0ZSxuYW1lOmMsc3R5bGVzOmwsb3B0aW9uczphfX1mdW5jdGlvbiB1UGUoYyl7cmV0dXJue3R5cGU6QW8uS2V5ZnJhbWVzLHN0ZXBzOmN9fWZ1''@;'; put 'put ''bmN0aW9uIGl1KGMsbCxhPW51bGwpe3JldHVybnt0eXBlOkFvLlRyYW5zaXRpb24sZXhwcjpjLGFuaW1hdGlvbjpsLG9wdGlvbnM6YX19Y2xhc3Mgd3h7Y29uc3RydWN0b3IobD0wLGE9MCl7dGhpcy5fb25Eb25lRm5zPVtdLHRoaXMuX29uU3RhcnRGbnM9W10sdGhpcy5fb25EZXN0cm95Rm5z''@;'; put 'put ''PVtdLHRoaXMuX29yaWdpbmFsT25Eb25lRm5zPVtdLHRoaXMuX29yaWdpbmFsT25TdGFydEZucz1bXSx0aGlzLl9zdGFydGVkPSExLHRoaXMuX2Rlc3Ryb3llZD0hMSx0aGlzLl9maW5pc2hlZD0hMSx0aGlzLl9wb3NpdGlvbj0wLHRoaXMucGFyZW50UGxheWVyPW51bGwsdGhpcy50b3RhbFRp''@;'; put 'put ''bWU9bCthfV9vbkZpbmlzaCgpe3RoaXMuX2ZpbmlzaGVkfHwodGhpcy5fZmluaXNoZWQ9ITAsdGhpcy5fb25Eb25lRm5zLmZvckVhY2gobD0+bCgpKSx0aGlzLl9vbkRvbmVGbnM9W10pfW9uU3RhcnQobCl7dGhpcy5fb3JpZ2luYWxPblN0YXJ0Rm5zLnB1c2gobCksdGhpcy5fb25TdGFydEZu''@;'; put 'put ''cy5wdXNoKGwpfW9uRG9uZShsKXt0aGlzLl9vcmlnaW5hbE9uRG9uZUZucy5wdXNoKGwpLHRoaXMuX29uRG9uZUZucy5wdXNoKGwpfW9uRGVzdHJveShsKXt0aGlzLl9vbkRlc3Ryb3lGbnMucHVzaChsKX1oYXNTdGFydGVkKCl7cmV0dXJuIHRoaXMuX3N0YXJ0ZWR9aW5pdCgpe31wbGF5KCl7''@;'; put 'put ''dGhpcy5oYXNTdGFydGVkKCl8fCh0aGlzLl9vblN0YXJ0KCksdGhpcy50cmlnZ2VyTWljcm90YXNrKCkpLHRoaXMuX3N0YXJ0ZWQ9ITB9dHJpZ2dlck1pY3JvdGFzaygpe3F1ZXVlTWljcm90YXNrKCgpPT50aGlzLl9vbkZpbmlzaCgpKX1fb25TdGFydCgpe3RoaXMuX29uU3RhcnRGbnMuZm9y''@;'; put 'put ''RWFjaChsPT5sKCkpLHRoaXMuX29uU3RhcnRGbnM9W119cGF1c2UoKXt9cmVzdGFydCgpe31maW5pc2goKXt0aGlzLl9vbkZpbmlzaCgpfWRlc3Ryb3koKXt0aGlzLl9kZXN0cm95ZWR8fCh0aGlzLl9kZXN0cm95ZWQ9ITAsdGhpcy5oYXNTdGFydGVkKCl8fHRoaXMuX29uU3RhcnQoKSx0aGlz''@;'; put 'put ''LmZpbmlzaCgpLHRoaXMuX29uRGVzdHJveUZucy5mb3JFYWNoKGw9PmwoKSksdGhpcy5fb25EZXN0cm95Rm5zPVtdKX1yZXNldCgpe3RoaXMuX3N0YXJ0ZWQ9ITEsdGhpcy5fZmluaXNoZWQ9ITEsdGhpcy5fb25TdGFydEZucz10aGlzLl9vcmlnaW5hbE9uU3RhcnRGbnMsdGhpcy5fb25Eb25l''@;'; put 'put ''Rm5zPXRoaXMuX29yaWdpbmFsT25Eb25lRm5zfXNldFBvc2l0aW9uKGwpe3RoaXMuX3Bvc2l0aW9uPXRoaXMudG90YWxUaW1lP2wqdGhpcy50b3RhbFRpbWU6MX1nZXRQb3NpdGlvbigpe3JldHVybiB0aGlzLnRvdGFsVGltZT90aGlzLl9wb3NpdGlvbi90aGlzLnRvdGFsVGltZToxfXRyaWdn''@;'; put 'put ''ZXJDYWxsYmFjayhsKXtjb25zdCBhPSJzdGFydCI9PWw/dGhpcy5fb25TdGFydEZuczp0aGlzLl9vbkRvbmVGbnM7YS5mb3JFYWNoKGQ9PmQoKSksYS5sZW5ndGg9MH19Y2xhc3MgUjBle2NvbnN0cnVjdG9yKGwpe3RoaXMuX29uRG9uZUZucz1bXSx0aGlzLl9vblN0YXJ0Rm5zPVtdLHRoaXMu''@;'; put 'put ''X2ZpbmlzaGVkPSExLHRoaXMuX3N0YXJ0ZWQ9ITEsdGhpcy5fZGVzdHJveWVkPSExLHRoaXMuX29uRGVzdHJveUZucz1bXSx0aGlzLnBhcmVudFBsYXllcj1udWxsLHRoaXMudG90YWxUaW1lPTAsdGhpcy5wbGF5ZXJzPWw7bGV0IGE9MCxkPTAsaD0wO2NvbnN0IGY9dGhpcy5wbGF5ZXJzLmxl''@;'; put 'put ''bmd0aDswPT1mP3F1ZXVlTWljcm90YXNrKCgpPT50aGlzLl9vbkZpbmlzaCgpKTp0aGlzLnBsYXllcnMuZm9yRWFjaCh2PT57di5vbkRvbmUoKCk9PnsrK2E9PWYmJnRoaXMuX29uRmluaXNoKCl9KSx2Lm9uRGVzdHJveSgoKT0+eysrZD09ZiYmdGhpcy5fb25EZXN0cm95KCl9KSx2Lm9uU3Rh''@;'; put 'put ''cnQoKCk9PnsrK2g9PWYmJnRoaXMuX29uU3RhcnQoKX0pfSksdGhpcy50b3RhbFRpbWU9dGhpcy5wbGF5ZXJzLnJlZHVjZSgodixNKT0+TWF0aC5tYXgodixNLnRvdGFsVGltZSksMCl9X29uRmluaXNoKCl7dGhpcy5fZmluaXNoZWR8fCh0aGlzLl9maW5pc2hlZD0hMCx0aGlzLl9vbkRvbmVG''@;'; put 'put ''bnMuZm9yRWFjaChsPT5sKCkpLHRoaXMuX29uRG9uZUZucz1bXSl9aW5pdCgpe3RoaXMucGxheWVycy5mb3JFYWNoKGw9PmwuaW5pdCgpKX1vblN0YXJ0KGwpe3RoaXMuX29uU3RhcnRGbnMucHVzaChsKX1fb25TdGFydCgpe3RoaXMuaGFzU3RhcnRlZCgpfHwodGhpcy5fc3RhcnRlZD0hMCx0''@;'; put 'put ''aGlzLl9vblN0YXJ0Rm5zLmZvckVhY2gobD0+bCgpKSx0aGlzLl9vblN0YXJ0Rm5zPVtdKX1vbkRvbmUobCl7dGhpcy5fb25Eb25lRm5zLnB1c2gobCl9b25EZXN0cm95KGwpe3RoaXMuX29uRGVzdHJveUZucy5wdXNoKGwpfWhhc1N0YXJ0ZWQoKXtyZXR1cm4gdGhpcy5fc3RhcnRlZH1wbGF5''@;'; put 'put ''KCl7dGhpcy5wYXJlbnRQbGF5ZXJ8fHRoaXMuaW5pdCgpLHRoaXMuX29uU3RhcnQoKSx0aGlzLnBsYXllcnMuZm9yRWFjaChsPT5sLnBsYXkoKSl9cGF1c2UoKXt0aGlzLnBsYXllcnMuZm9yRWFjaChsPT5sLnBhdXNlKCkpfXJlc3RhcnQoKXt0aGlzLnBsYXllcnMuZm9yRWFjaChsPT5sLnJl''@;'; put 'put ''c3RhcnQoKSl9ZmluaXNoKCl7dGhpcy5fb25GaW5pc2goKSx0aGlzLnBsYXllcnMuZm9yRWFjaChsPT5sLmZpbmlzaCgpKX1kZXN0cm95KCl7dGhpcy5fb25EZXN0cm95KCl9X29uRGVzdHJveSgpe3RoaXMuX2Rlc3Ryb3llZHx8KHRoaXMuX2Rlc3Ryb3llZD0hMCx0aGlzLl9vbkZpbmlzaCgp''@;'; put 'put ''LHRoaXMucGxheWVycy5mb3JFYWNoKGw9PmwuZGVzdHJveSgpKSx0aGlzLl9vbkRlc3Ryb3lGbnMuZm9yRWFjaChsPT5sKCkpLHRoaXMuX29uRGVzdHJveUZucz1bXSl9cmVzZXQoKXt0aGlzLnBsYXllcnMuZm9yRWFjaChsPT5sLnJlc2V0KCkpLHRoaXMuX2Rlc3Ryb3llZD0hMSx0aGlzLl9m''@;'; put 'put ''aW5pc2hlZD0hMSx0aGlzLl9zdGFydGVkPSExfXNldFBvc2l0aW9uKGwpe2NvbnN0IGE9bCp0aGlzLnRvdGFsVGltZTt0aGlzLnBsYXllcnMuZm9yRWFjaChkPT57Y29uc3QgaD1kLnRvdGFsVGltZT9NYXRoLm1pbigxLGEvZC50b3RhbFRpbWUpOjE7ZC5zZXRQb3NpdGlvbihoKX0pfWdldFBv''@;'; put 'put ''c2l0aW9uKCl7Y29uc3QgbD10aGlzLnBsYXllcnMucmVkdWNlKChhLGQpPT5udWxsPT09YXx8ZC50b3RhbFRpbWU+YS50b3RhbFRpbWU/ZDphLG51bGwpO3JldHVybiBudWxsIT1sP2wuZ2V0UG9zaXRpb24oKTowfWJlZm9yZURlc3Ryb3koKXt0aGlzLnBsYXllcnMuZm9yRWFjaChsPT57bC5i''@;'; put 'put ''ZWZvcmVEZXN0cm95JiZsLmJlZm9yZURlc3Ryb3koKX0pfXRyaWdnZXJDYWxsYmFjayhsKXtjb25zdCBhPSJzdGFydCI9PWw/dGhpcy5fb25TdGFydEZuczp0aGlzLl9vbkRvbmVGbnM7YS5mb3JFYWNoKGQ9PmQoKSksYS5sZW5ndGg9MH19bGV0IGdZO3RyeXtnWT10eXBlb2YgSW50bDwidSIm''@;'; put 'put ''JkludGwudjhCcmVha0l0ZXJhdG9yfWNhdGNoe2dZPSExfWxldCBTeCxDeD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuX3BsYXRmb3JtSWQ9YSx0aGlzLmlzQnJvd3Nlcj10aGlzLl9wbGF0Zm9ybUlkP3RsKHRoaXMuX3BsYXRmb3JtSWQpOiJvYmplY3QiPT10eXBlb2YgZG9j''@;'; put 'put ''dW1lbnQmJiEhZG9jdW1lbnQsdGhpcy5FREdFPXRoaXMuaXNCcm93c2VyJiYvKGVkZ2UpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSx0aGlzLlRSSURFTlQ9dGhpcy5pc0Jyb3dzZXImJi8obXNpZXx0cmlkZW50KS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksdGhpcy5CTElOSz10''@;'; put 'put ''aGlzLmlzQnJvd3NlciYmISghd2luZG93LmNocm9tZSYmIWdZKSYmdHlwZW9mIENTUzwidSImJiF0aGlzLkVER0UmJiF0aGlzLlRSSURFTlQsdGhpcy5XRUJLSVQ9dGhpcy5pc0Jyb3dzZXImJi9BcHBsZVdlYktpdC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJiF0aGlzLkJMSU5LJiYh''@;'; put 'put ''dGhpcy5FREdFJiYhdGhpcy5UUklERU5ULHRoaXMuSU9TPXRoaXMuaXNCcm93c2VyJiYvaVBhZHxpUGhvbmV8aVBvZC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSYmISgiTVNTdHJlYW0iaW4gd2luZG93KSx0aGlzLkZJUkVGT1g9dGhpcy5pc0Jyb3dzZXImJi8oZmlyZWZveHxtaW5lZmll''@;'; put 'put ''bGQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSx0aGlzLkFORFJPSUQ9dGhpcy5pc0Jyb3dzZXImJi9hbmRyb2lkL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSYmIXRoaXMuVFJJREVOVCx0aGlzLlNBRkFSST10aGlzLmlzQnJvd3NlciYmL3NhZmFyaS9pLnRlc3QobmF2aWdhdG9y''@;'; put 'put ''LnVzZXJBZ2VudCkmJnRoaXMuV0VCS0lUfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHhyKGlvKSl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1''@;'; put 'put ''cm4gY30pKCk7ZnVuY3Rpb24gQXkoYyl7cmV0dXJuIGZ1bmN0aW9uIGdQZSgpe2lmKG51bGw9PVN4JiZ0eXBlb2Ygd2luZG93PCJ1Iil0cnl7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInRlc3QiLG51bGwsT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCJwYXNzaXZlIix7Z2V0OigpPT5TeD0h''@;'; put 'put ''MH0pKX1maW5hbGx5e1N4PVN4fHwhMX1yZXR1cm4gU3h9KCk/YzohIWMuY2FwdHVyZX12YXIgX3A9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5OT1JNQUw9MF09Ik5PUk1BTCIsY1tjLk5FR0FURUQ9MV09Ik5FR0FURUQiLGNbYy5JTlZFUlRFRD0yXT0iSU5WRVJURUQiLGN9KF9wfHx7fSk7bGV0''@;'; put 'put ''IE1MLHU3LG1ZO2Z1bmN0aW9uIE14KCl7aWYoIm9iamVjdCIhPXR5cGVvZiBkb2N1bWVudHx8IWRvY3VtZW50KXJldHVybiBfcC5OT1JNQUw7aWYobnVsbD09TUwpe2NvbnN0IGM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksbD1jLnN0eWxlO2MuZGlyPSJydGwiLGwud2lkdGg9IjFw''@;'; put 'put ''eCIsbC5vdmVyZmxvdz0iYXV0byIsbC52aXNpYmlsaXR5PSJoaWRkZW4iLGwucG9pbnRlckV2ZW50cz0ibm9uZSIsbC5wb3NpdGlvbj0iYWJzb2x1dGUiO2NvbnN0IGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksZD1hLnN0eWxlO2Qud2lkdGg9IjJweCIsZC5oZWlnaHQ9IjFweCIs''@;'; put 'put ''Yy5hcHBlbmRDaGlsZChhKSxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGMpLE1MPV9wLk5PUk1BTCwwPT09Yy5zY3JvbGxMZWZ0JiYoYy5zY3JvbGxMZWZ0PTEsTUw9MD09PWMuc2Nyb2xsTGVmdD9fcC5ORUdBVEVEOl9wLklOVkVSVEVEKSxjLnJlbW92ZSgpfXJldHVybiBNTH1mdW5jdGlv''@;'; put 'put ''biBPMGUoYyl7aWYoZnVuY3Rpb24gdlBlKCl7aWYobnVsbD09bVkpe2NvbnN0IGM9dHlwZW9mIGRvY3VtZW50PCJ1Ij9kb2N1bWVudC5oZWFkOm51bGw7bVk9ISghY3x8IWMuY3JlYXRlU2hhZG93Um9vdCYmIWMuYXR0YWNoU2hhZG93KX1yZXR1cm4gbVl9KCkpe2NvbnN0IGw9Yy5nZXRSb290''@;'; put 'put ''Tm9kZT9jLmdldFJvb3ROb2RlKCk6bnVsbDtpZih0eXBlb2YgU2hhZG93Um9vdDwidSImJlNoYWRvd1Jvb3QmJmwgaW5zdGFuY2VvZiBTaGFkb3dSb290KXJldHVybiBsfXJldHVybiBudWxsfWZ1bmN0aW9uIHhMKGMpe3JldHVybiBjLmNvbXBvc2VkUGF0aD9jLmNvbXBvc2VkUGF0aCgpWzBd''@;'; put 'put ''OmMudGFyZ2V0fWxldCBqUGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLl9wbGF0Zm9ybT1hfWlzRGlzYWJsZWQoYSl7cmV0dXJuIGEuaGFzQXR0cmlidXRlKCJkaXNhYmxlZCIpfWlzVmlzaWJsZShhKXtyZXR1cm4gZnVuY3Rpb24gVVBlKGMpe3JldHVybiEhKGMub2Zmc2V0''@;'; put 'put ''V2lkdGh8fGMub2Zmc2V0SGVpZ2h0fHwiZnVuY3Rpb24iPT10eXBlb2YgYy5nZXRDbGllbnRSZWN0cyYmYy5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCl9KGEpJiYidmlzaWJsZSI9PT1nZXRDb21wdXRlZFN0eWxlKGEpLnZpc2liaWxpdHl9aXNUYWJiYWJsZShhKXtpZighdGhpcy5fcGxhdGZv''@;'; put 'put ''cm0uaXNCcm93c2VyKXJldHVybiExO2NvbnN0IGQ9ZnVuY3Rpb24gelBlKGMpe3RyeXtyZXR1cm4gYy5mcmFtZUVsZW1lbnR9Y2F0Y2h7cmV0dXJuIG51bGx9fShmdW5jdGlvbiBYUGUoYyl7cmV0dXJuIGMub3duZXJEb2N1bWVudCYmYy5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fHx3aW5k''@;'; put 'put ''b3d9KGEpKTtpZihkJiYoLTE9PT1OMGUoZCl8fCF0aGlzLmlzVmlzaWJsZShkKSkpcmV0dXJuITE7bGV0IGg9YS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLGY9TjBlKGEpO3JldHVybiBhLmhhc0F0dHJpYnV0ZSgiY29udGVudGVkaXRhYmxlIik/LTEhPT1mOiEoImlmcmFtZSI9PT1ofHwib2Jq''@;'; put 'put ''ZWN0Ij09PWh8fHRoaXMuX3BsYXRmb3JtLldFQktJVCYmdGhpcy5fcGxhdGZvcm0uSU9TJiYhZnVuY3Rpb24gS1BlKGMpe2xldCBsPWMubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxhPSJpbnB1dCI9PT1sJiZjLnR5cGU7cmV0dXJuInRleHQiPT09YXx8InBhc3N3b3JkIj09PWF8fCJzZWxlY3Qi''@;'; put 'put ''PT09bHx8InRleHRhcmVhIj09PWx9KGEpKSYmKCJhdWRpbyI9PT1oPyEhYS5oYXNBdHRyaWJ1dGUoImNvbnRyb2xzIikmJi0xIT09ZjoidmlkZW8iPT09aD8tMSE9PWYmJihudWxsIT09Znx8dGhpcy5fcGxhdGZvcm0uRklSRUZPWHx8YS5oYXNBdHRyaWJ1dGUoImNvbnRyb2xzIikpOmEudGFi''@;'; put 'put ''SW5kZXg+PTApfWlzRm9jdXNhYmxlKGEsZCl7cmV0dXJuIGZ1bmN0aW9uIHFQZShjKXtyZXR1cm4hZnVuY3Rpb24gV1BlKGMpe3JldHVybiBmdW5jdGlvbiBHUGUoYyl7cmV0dXJuImlucHV0Ij09Yy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpfShjKSYmImhpZGRlbiI9PWMudHlwZX0oYykmJihm''@;'; put 'put ''dW5jdGlvbiBaUGUoYyl7bGV0IGw9Yy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybiJpbnB1dCI9PT1sfHwic2VsZWN0Ij09PWx8fCJidXR0b24iPT09bHx8InRleHRhcmVhIj09PWx9KGMpfHxmdW5jdGlvbiBZUGUoYyl7cmV0dXJuIGZ1bmN0aW9uICRQZShjKXtyZXR1cm4iYSI9PWMu''@;'; put 'put ''bm9kZU5hbWUudG9Mb3dlckNhc2UoKX0oYykmJmMuaGFzQXR0cmlidXRlKCJocmVmIil9KGMpfHxjLmhhc0F0dHJpYnV0ZSgiY29udGVudGVkaXRhYmxlIil8fEgwZShjKSl9KGEpJiYhdGhpcy5pc0Rpc2FibGVkKGEpJiYoZD8uaWdub3JlVmlzaWJpbGl0eXx8dGhpcy5pc1Zpc2libGUoYSkp''@;'; put 'put ''fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHhyKEN4KSl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gSDBlKGMp''@;'; put 'put ''e2lmKCFjLmhhc0F0dHJpYnV0ZSgidGFiaW5kZXgiKXx8dm9pZCAwPT09Yy50YWJJbmRleClyZXR1cm4hMTtsZXQgbD1jLmdldEF0dHJpYnV0ZSgidGFiaW5kZXgiKTtyZXR1cm4hKCFsfHxpc05hTihwYXJzZUludChsLDEwKSkpfWZ1bmN0aW9uIE4wZShjKXtpZighSDBlKGMpKXJldHVybiBu''@;'; put 'put ''dWxsO2NvbnN0IGw9cGFyc2VJbnQoYy5nZXRBdHRyaWJ1dGUoInRhYmluZGV4Iil8fCIiLDEwKTtyZXR1cm4gaXNOYU4obCk/LTE6bH1jbGFzcyBWMGV7Z2V0IGVuYWJsZWQoKXtyZXR1cm4gdGhpcy5fZW5hYmxlZH1zZXQgZW5hYmxlZChsKXt0aGlzLl9lbmFibGVkPWwsdGhpcy5fc3RhcnRB''@;'; put 'put ''bmNob3ImJnRoaXMuX2VuZEFuY2hvciYmKHRoaXMuX3RvZ2dsZUFuY2hvclRhYkluZGV4KGwsdGhpcy5fc3RhcnRBbmNob3IpLHRoaXMuX3RvZ2dsZUFuY2hvclRhYkluZGV4KGwsdGhpcy5fZW5kQW5jaG9yKSl9Y29uc3RydWN0b3IobCxhLGQsaCxmPSExKXt0aGlzLl9lbGVtZW50PWwsdGhp''@;'; put 'put ''cy5fY2hlY2tlcj1hLHRoaXMuX25nWm9uZT1kLHRoaXMuX2RvY3VtZW50PWgsdGhpcy5faGFzQXR0YWNoZWQ9ITEsdGhpcy5zdGFydEFuY2hvckxpc3RlbmVyPSgpPT50aGlzLmZvY3VzTGFzdFRhYmJhYmxlRWxlbWVudCgpLHRoaXMuZW5kQW5jaG9yTGlzdGVuZXI9KCk9PnRoaXMuZm9jdXNG''@;'; put 'put ''aXJzdFRhYmJhYmxlRWxlbWVudCgpLHRoaXMuX2VuYWJsZWQ9ITAsZnx8dGhpcy5hdHRhY2hBbmNob3JzKCl9ZGVzdHJveSgpe2NvbnN0IGw9dGhpcy5fc3RhcnRBbmNob3IsYT10aGlzLl9lbmRBbmNob3I7bCYmKGwucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZm9jdXMiLHRoaXMuc3RhcnRBbmNo''@;'; put 'put ''b3JMaXN0ZW5lciksbC5yZW1vdmUoKSksYSYmKGEucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZm9jdXMiLHRoaXMuZW5kQW5jaG9yTGlzdGVuZXIpLGEucmVtb3ZlKCkpLHRoaXMuX3N0YXJ0QW5jaG9yPXRoaXMuX2VuZEFuY2hvcj1udWxsLHRoaXMuX2hhc0F0dGFjaGVkPSExfWF0dGFjaEFuY2hv''@;'; put 'put ''cnMoKXtyZXR1cm4hIXRoaXMuX2hhc0F0dGFjaGVkfHwodGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5fc3RhcnRBbmNob3J8fCh0aGlzLl9zdGFydEFuY2hvcj10aGlzLl9jcmVhdGVBbmNob3IoKSx0aGlzLl9zdGFydEFuY2hvci5hZGRFdmVudExpc3RlbmVyKCJm''@;'; put 'put ''b2N1cyIsdGhpcy5zdGFydEFuY2hvckxpc3RlbmVyKSksdGhpcy5fZW5kQW5jaG9yfHwodGhpcy5fZW5kQW5jaG9yPXRoaXMuX2NyZWF0ZUFuY2hvcigpLHRoaXMuX2VuZEFuY2hvci5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsdGhpcy5lbmRBbmNob3JMaXN0ZW5lcikpfSksdGhpcy5fZWxl''@;'; put 'put ''bWVudC5wYXJlbnROb2RlJiYodGhpcy5fZWxlbWVudC5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLl9zdGFydEFuY2hvcix0aGlzLl9lbGVtZW50KSx0aGlzLl9lbGVtZW50LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMuX2VuZEFuY2hvcix0aGlzLl9lbGVtZW50Lm5leHRTaWJs''@;'; put 'put ''aW5nKSx0aGlzLl9oYXNBdHRhY2hlZD0hMCksdGhpcy5faGFzQXR0YWNoZWQpfWZvY3VzSW5pdGlhbEVsZW1lbnRXaGVuUmVhZHkobCl7cmV0dXJuIG5ldyBQcm9taXNlKGE9Pnt0aGlzLl9leGVjdXRlT25TdGFibGUoKCk9PmEodGhpcy5mb2N1c0luaXRpYWxFbGVtZW50KGwpKSl9KX1mb2N1''@;'; put 'put ''c0ZpcnN0VGFiYmFibGVFbGVtZW50V2hlblJlYWR5KGwpe3JldHVybiBuZXcgUHJvbWlzZShhPT57dGhpcy5fZXhlY3V0ZU9uU3RhYmxlKCgpPT5hKHRoaXMuZm9jdXNGaXJzdFRhYmJhYmxlRWxlbWVudChsKSkpfSl9Zm9jdXNMYXN0VGFiYmFibGVFbGVtZW50V2hlblJlYWR5KGwpe3JldHVy''@;'; put 'put ''biBuZXcgUHJvbWlzZShhPT57dGhpcy5fZXhlY3V0ZU9uU3RhYmxlKCgpPT5hKHRoaXMuZm9jdXNMYXN0VGFiYmFibGVFbGVtZW50KGwpKSl9KX1fZ2V0UmVnaW9uQm91bmRhcnkobCl7Y29uc3QgYT10aGlzLl9lbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYFtjZGstZm9jdXMtcmVnaW9uLSR7''@;'; put 'put ''bH1dLCBbY2RrRm9jdXNSZWdpb24ke2x9XSwgW2Nkay1mb2N1cy0ke2x9XWApO3JldHVybiJzdGFydCI9PWw/YS5sZW5ndGg/YVswXTp0aGlzLl9nZXRGaXJzdFRhYmJhYmxlRWxlbWVudCh0aGlzLl9lbGVtZW50KTphLmxlbmd0aD9hW2EubGVuZ3RoLTFdOnRoaXMuX2dldExhc3RUYWJiYWJs''@;'; put 'put ''ZUVsZW1lbnQodGhpcy5fZWxlbWVudCl9Zm9jdXNJbml0aWFsRWxlbWVudChsKXtjb25zdCBhPXRoaXMuX2VsZW1lbnQucXVlcnlTZWxlY3RvcigiW2Nkay1mb2N1cy1pbml0aWFsXSwgW2Nka0ZvY3VzSW5pdGlhbF0iKTtpZihhKXtpZighdGhpcy5fY2hlY2tlci5pc0ZvY3VzYWJsZShhKSl7''@;'; put 'put ''Y29uc3QgZD10aGlzLl9nZXRGaXJzdFRhYmJhYmxlRWxlbWVudChhKTtyZXR1cm4gZD8uZm9jdXMobCksISFkfXJldHVybiBhLmZvY3VzKGwpLCEwfXJldHVybiB0aGlzLmZvY3VzRmlyc3RUYWJiYWJsZUVsZW1lbnQobCl9Zm9jdXNGaXJzdFRhYmJhYmxlRWxlbWVudChsKXtjb25zdCBhPXRo''@;'; put 'put ''aXMuX2dldFJlZ2lvbkJvdW5kYXJ5KCJzdGFydCIpO3JldHVybiBhJiZhLmZvY3VzKGwpLCEhYX1mb2N1c0xhc3RUYWJiYWJsZUVsZW1lbnQobCl7Y29uc3QgYT10aGlzLl9nZXRSZWdpb25Cb3VuZGFyeSgiZW5kIik7cmV0dXJuIGEmJmEuZm9jdXMobCksISFhfWhhc0F0dGFjaGVkKCl7cmV0''@;'; put 'put ''dXJuIHRoaXMuX2hhc0F0dGFjaGVkfV9nZXRGaXJzdFRhYmJhYmxlRWxlbWVudChsKXtpZih0aGlzLl9jaGVja2VyLmlzRm9jdXNhYmxlKGwpJiZ0aGlzLl9jaGVja2VyLmlzVGFiYmFibGUobCkpcmV0dXJuIGw7Y29uc3QgYT1sLmNoaWxkcmVuO2ZvcihsZXQgZD0wO2Q8YS5sZW5ndGg7ZCsr''@;'; put 'put ''KXtjb25zdCBoPWFbZF0ubm9kZVR5cGU9PT10aGlzLl9kb2N1bWVudC5FTEVNRU5UX05PREU/dGhpcy5fZ2V0Rmlyc3RUYWJiYWJsZUVsZW1lbnQoYVtkXSk6bnVsbDtpZihoKXJldHVybiBofXJldHVybiBudWxsfV9nZXRMYXN0VGFiYmFibGVFbGVtZW50KGwpe2lmKHRoaXMuX2NoZWNrZXIu''@;'; put 'put ''aXNGb2N1c2FibGUobCkmJnRoaXMuX2NoZWNrZXIuaXNUYWJiYWJsZShsKSlyZXR1cm4gbDtjb25zdCBhPWwuY2hpbGRyZW47Zm9yKGxldCBkPWEubGVuZ3RoLTE7ZD49MDtkLS0pe2NvbnN0IGg9YVtkXS5ub2RlVHlwZT09PXRoaXMuX2RvY3VtZW50LkVMRU1FTlRfTk9ERT90aGlzLl9nZXRM''@;'; put 'put ''YXN0VGFiYmFibGVFbGVtZW50KGFbZF0pOm51bGw7aWYoaClyZXR1cm4gaH1yZXR1cm4gbnVsbH1fY3JlYXRlQW5jaG9yKCl7Y29uc3QgbD10aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZXR1cm4gdGhpcy5fdG9nZ2xlQW5jaG9yVGFiSW5kZXgodGhpcy5fZW5hYmxlZCxs''@;'; put 'put ''KSxsLmNsYXNzTGlzdC5hZGQoImNkay12aXN1YWxseS1oaWRkZW4iKSxsLmNsYXNzTGlzdC5hZGQoImNkay1mb2N1cy10cmFwLWFuY2hvciIpLGwuc2V0QXR0cmlidXRlKCJhcmlhLWhpZGRlbiIsInRydWUiKSxsfV90b2dnbGVBbmNob3JUYWJJbmRleChsLGEpe2w/YS5zZXRBdHRyaWJ1dGUo''@;'; put 'put ''InRhYmluZGV4IiwiMCIpOmEucmVtb3ZlQXR0cmlidXRlKCJ0YWJpbmRleCIpfXRvZ2dsZUFuY2hvcnMobCl7dGhpcy5fc3RhcnRBbmNob3ImJnRoaXMuX2VuZEFuY2hvciYmKHRoaXMuX3RvZ2dsZUFuY2hvclRhYkluZGV4KGwsdGhpcy5fc3RhcnRBbmNob3IpLHRoaXMuX3RvZ2dsZUFuY2hv''@;'; put 'put ''clRhYkluZGV4KGwsdGhpcy5fZW5kQW5jaG9yKSl9X2V4ZWN1dGVPblN0YWJsZShsKXt0aGlzLl9uZ1pvbmUuaXNTdGFibGU/bCgpOnRoaXMuX25nWm9uZS5vblN0YWJsZS5waXBlKFlmKDEpKS5zdWJzY3JpYmUobCl9fWxldCB2WT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0''@;'; put 'put ''aGlzLl9jaGVja2VyPWEsdGhpcy5fbmdab25lPWQsdGhpcy5fZG9jdW1lbnQ9aH1jcmVhdGUoYSxkPSExKXtyZXR1cm4gbmV3IFYwZShhLHRoaXMuX2NoZWNrZXIsdGhpcy5fbmdab25lLHRoaXMuX2RvY3VtZW50LGQpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4g''@;'; put 'put ''bmV3KGR8fGMpKHhyKGpQZSkseHIoV2EpLHhyKHZzKSl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCksQjBlPSgoKT0+e2NsYXNzIGN7Z2V0IGVuYWJsZWQoKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5mb2N1c1RyYXA/LmVuYWJsZWR8fCExfXNldCBlbmFibGVkKGEpe3RoaXMuZm9jdXNUcmFwJiYodGhpcy5mb2N1c1RyYXAuZW5hYmxlZD1hKX1jb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5fZWxlbWVudFJlZj1hLHRoaXMuX2ZvY3VzVHJhcEZhY3Rvcnk9ZCx0aGlzLl9wcmV2aW91c2x5Rm9j''@;'; put 'put ''dXNlZEVsZW1lbnQ9bnVsbCxmaShDeCkuaXNCcm93c2VyJiYodGhpcy5mb2N1c1RyYXA9dGhpcy5fZm9jdXNUcmFwRmFjdG9yeS5jcmVhdGUodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCEwKSl9bmdPbkRlc3Ryb3koKXt0aGlzLmZvY3VzVHJhcD8uZGVzdHJveSgpLHRoaXMuX3By''@;'; put 'put ''ZXZpb3VzbHlGb2N1c2VkRWxlbWVudCYmKHRoaXMuX3ByZXZpb3VzbHlGb2N1c2VkRWxlbWVudC5mb2N1cygpLHRoaXMuX3ByZXZpb3VzbHlGb2N1c2VkRWxlbWVudD1udWxsKX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLmZvY3VzVHJhcD8uYXR0YWNoQW5jaG9ycygpLHRoaXMuYXV0b0Nh''@;'; put 'put ''cHR1cmUmJnRoaXMuX2NhcHR1cmVGb2N1cygpfW5nRG9DaGVjaygpe3RoaXMuZm9jdXNUcmFwJiYhdGhpcy5mb2N1c1RyYXAuaGFzQXR0YWNoZWQoKSYmdGhpcy5mb2N1c1RyYXAuYXR0YWNoQW5jaG9ycygpfW5nT25DaGFuZ2VzKGEpe2NvbnN0IGQ9YS5hdXRvQ2FwdHVyZTtkJiYhZC5maXJz''@;'; put 'put ''dENoYW5nZSYmdGhpcy5hdXRvQ2FwdHVyZSYmdGhpcy5mb2N1c1RyYXA/Lmhhc0F0dGFjaGVkKCkmJnRoaXMuX2NhcHR1cmVGb2N1cygpfV9jYXB0dXJlRm9jdXMoKXt0aGlzLl9wcmV2aW91c2x5Rm9jdXNlZEVsZW1lbnQ9ZnVuY3Rpb24gYlBlKCl7bGV0IGM9dHlwZW9mIGRvY3VtZW50PCJ1''@;'; put 'put ''IiYmZG9jdW1lbnQ/ZG9jdW1lbnQuYWN0aXZlRWxlbWVudDpudWxsO2Zvcig7YyYmYy5zaGFkb3dSb290Oyl7Y29uc3QgbD1jLnNoYWRvd1Jvb3QuYWN0aXZlRWxlbWVudDtpZihsPT09YylicmVhaztjPWx9cmV0dXJuIGN9KCksdGhpcy5mb2N1c1RyYXA/LmZvY3VzSW5pdGlhbEVsZW1lbnRX''@;'; put 'put ''aGVuUmVhZHkoKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZShKaSksR2UodlkpLEdlKHZzKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjZGtUcmFwRm9jdXMiLCIiXV0saW5wdXRzOntlbmFi''@;'; put 'put ''bGVkOltObi5IYXNEZWNvcmF0b3JJbnB1dFRyYW5zZm9ybSwiY2RrVHJhcEZvY3VzIiwiZW5hYmxlZCIsczFdLGF1dG9DYXB0dXJlOltObi5IYXNEZWNvcmF0b3JJbnB1dFRyYW5zZm9ybSwiY2RrVHJhcEZvY3VzQXV0b0NhcHR1cmUiLCJhdXRvQ2FwdHVyZSIsczFdfSxleHBvcnRBczpbImNk''@;'; put 'put ''a1RyYXBGb2N1cyJdLHN0YW5kYWxvbmU6ITAsZmVhdHVyZXM6W1dsLHdsXX0pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gZDcoYyxsPTApe3JldHVybiBmdW5jdGlvbiByRmUoYyl7cmV0dXJuIWlzTmFOKHBhcnNlRmxvYXQoYykpJiYhaXNOYU4oTnVtYmVyKGMpKX0oYyk/TnVtYmVyKGMpOmx9''@;'; put 'put ''ZnVuY3Rpb24gRWQoYyl7cmV0dXJuIGMgaW5zdGFuY2VvZiBKaT9jLm5hdGl2ZUVsZW1lbnQ6Y31jb25zdCB4eD17c2NoZWR1bGUoYyl7bGV0IGw9cmVxdWVzdEFuaW1hdGlvbkZyYW1lLGE9Y2FuY2VsQW5pbWF0aW9uRnJhbWU7Y29uc3R7ZGVsZWdhdGU6ZH09eHg7ZCYmKGw9ZC5yZXF1ZXN0''@;'; put 'put ''QW5pbWF0aW9uRnJhbWUsYT1kLmNhbmNlbEFuaW1hdGlvbkZyYW1lKTtjb25zdCBoPWwoZj0+e2E9dm9pZCAwLGMoZil9KTtyZXR1cm4gbmV3IHF0KCgpPT5hPy4oaCkpfSxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoLi4uYyl7Y29uc3R7ZGVsZWdhdGU6bH09eHg7cmV0dXJuKGw/LnJlcXVlc3RB''@;'; put 'put ''bmltYXRpb25GcmFtZXx8cmVxdWVzdEFuaW1hdGlvbkZyYW1lKSguLi5jKX0sY2FuY2VsQW5pbWF0aW9uRnJhbWUoLi4uYyl7Y29uc3R7ZGVsZWdhdGU6bH09eHg7cmV0dXJuKGw/LmNhbmNlbEFuaW1hdGlvbkZyYW1lfHxjYW5jZWxBbmltYXRpb25GcmFtZSkoLi4uYyl9LGRlbGVnYXRlOnZv''@;'; put 'put ''aWQgMH0sajBlPW5ldyBjbGFzcyBvRmUgZXh0ZW5kcyBoWXtmbHVzaChsKXtsZXQgYTt0aGlzLl9hY3RpdmU9ITAsbD9hPWwuaWQ6KGE9dGhpcy5fc2NoZWR1bGVkLHRoaXMuX3NjaGVkdWxlZD12b2lkIDApO2NvbnN0e2FjdGlvbnM6ZH09dGhpcztsZXQgaDtsPWx8fGQuc2hpZnQoKTtkb3tp''@;'; put 'put ''ZihoPWwuZXhlY3V0ZShsLnN0YXRlLGwuZGVsYXkpKWJyZWFrfXdoaWxlKChsPWRbMF0pJiZsLmlkPT09YSYmZC5zaGlmdCgpKTtpZih0aGlzLl9hY3RpdmU9ITEsaCl7Zm9yKDsobD1kWzBdKSYmbC5pZD09PWEmJmQuc2hpZnQoKTspbC51bnN1YnNjcmliZSgpO3Rocm93IGh9fX0oY2xhc3Mg''@;'; put 'put ''YUZlIGV4dGVuZHMgdVl7Y29uc3RydWN0b3IobCxhKXtzdXBlcihsLGEpLHRoaXMuc2NoZWR1bGVyPWwsdGhpcy53b3JrPWF9cmVxdWVzdEFzeW5jSWQobCxhLGQ9MCl7cmV0dXJuIG51bGwhPT1kJiZkPjA/c3VwZXIucmVxdWVzdEFzeW5jSWQobCxhLGQpOihsLmFjdGlvbnMucHVzaCh0aGlz''@;'; put 'put ''KSxsLl9zY2hlZHVsZWR8fChsLl9zY2hlZHVsZWQ9eHgucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT5sLmZsdXNoKHZvaWQgMCkpKSl9cmVjeWNsZUFzeW5jSWQobCxhLGQ9MCl7dmFyIGg7aWYobnVsbCE9ZD9kPjA6dGhpcy5kZWxheT4wKXJldHVybiBzdXBlci5yZWN5Y2xlQXN5bmNJZChs''@;'; put 'put ''LGEsZCk7Y29uc3R7YWN0aW9uczpmfT1sO251bGwhPWEmJmE9PT1sLl9zY2hlZHVsZWQmJihudWxsPT09KGg9ZltmLmxlbmd0aC0xXSl8fHZvaWQgMD09PWg/dm9pZCAwOmguaWQpIT09YSYmKHh4LmNhbmNlbEFuaW1hdGlvbkZyYW1lKGEpLGwuX3NjaGVkdWxlZD12b2lkIDApfX0pO2xldCBi''@;'; put 'put ''WSxzRmU9MTtjb25zdCBFTD17fTtmdW5jdGlvbiB6MGUoYyl7cmV0dXJuIGMgaW4gRUwmJihkZWxldGUgRUxbY10sITApfWNvbnN0IGxGZT17c2V0SW1tZWRpYXRlKGMpe2NvbnN0IGw9c0ZlKys7cmV0dXJuIEVMW2xdPSEwLGJZfHwoYlk9UHJvbWlzZS5yZXNvbHZlKCkpLGJZLnRoZW4oKCk9''@;'; put 'put ''PnowZShsKSYmYygpKSxsfSxjbGVhckltbWVkaWF0ZShjKXt6MGUoYyl9fSx7c2V0SW1tZWRpYXRlOmNGZSxjbGVhckltbWVkaWF0ZTp1RmV9PWxGZSxUTD17c2V0SW1tZWRpYXRlKC4uLmMpe2NvbnN0e2RlbGVnYXRlOmx9PVRMO3JldHVybihsPy5zZXRJbW1lZGlhdGV8fGNGZSkoLi4uYyl9''@;'; put 'put ''LGNsZWFySW1tZWRpYXRlKGMpe2NvbnN0e2RlbGVnYXRlOmx9PVRMO3JldHVybihsPy5jbGVhckltbWVkaWF0ZXx8dUZlKShjKX0sZGVsZWdhdGU6dm9pZCAwfSxmRmU9bmV3IGNsYXNzIGhGZSBleHRlbmRzIGhZe2ZsdXNoKGwpe3RoaXMuX2FjdGl2ZT0hMDtjb25zdCBhPXRoaXMuX3NjaGVk''@;'; put 'put ''dWxlZDt0aGlzLl9zY2hlZHVsZWQ9dm9pZCAwO2NvbnN0e2FjdGlvbnM6ZH09dGhpcztsZXQgaDtsPWx8fGQuc2hpZnQoKTtkb3tpZihoPWwuZXhlY3V0ZShsLnN0YXRlLGwuZGVsYXkpKWJyZWFrfXdoaWxlKChsPWRbMF0pJiZsLmlkPT09YSYmZC5zaGlmdCgpKTtpZih0aGlzLl9hY3RpdmU9''@;'; put 'put ''ITEsaCl7Zm9yKDsobD1kWzBdKSYmbC5pZD09PWEmJmQuc2hpZnQoKTspbC51bnN1YnNjcmliZSgpO3Rocm93IGh9fX0oY2xhc3MgZEZlIGV4dGVuZHMgdVl7Y29uc3RydWN0b3IobCxhKXtzdXBlcihsLGEpLHRoaXMuc2NoZWR1bGVyPWwsdGhpcy53b3JrPWF9cmVxdWVzdEFzeW5jSWQobCxh''@;'; put 'put ''LGQ9MCl7cmV0dXJuIG51bGwhPT1kJiZkPjA/c3VwZXIucmVxdWVzdEFzeW5jSWQobCxhLGQpOihsLmFjdGlvbnMucHVzaCh0aGlzKSxsLl9zY2hlZHVsZWR8fChsLl9zY2hlZHVsZWQ9VEwuc2V0SW1tZWRpYXRlKGwuZmx1c2guYmluZChsLHZvaWQgMCkpKSl9cmVjeWNsZUFzeW5jSWQobCxh''@;'; put 'put ''LGQ9MCl7dmFyIGg7aWYobnVsbCE9ZD9kPjA6dGhpcy5kZWxheT4wKXJldHVybiBzdXBlci5yZWN5Y2xlQXN5bmNJZChsLGEsZCk7Y29uc3R7YWN0aW9uczpmfT1sO251bGwhPWEmJihudWxsPT09KGg9ZltmLmxlbmd0aC0xXSl8fHZvaWQgMD09PWg/dm9pZCAwOmguaWQpIT09YSYmKFRMLmNs''@;'; put 'put ''ZWFySW1tZWRpYXRlKGEpLGwuX3NjaGVkdWxlZD09PWEmJihsLl9zY2hlZHVsZWQ9dm9pZCAwKSl9fSk7ZnVuY3Rpb24gVTBlKGM9MCxsLGE9dFBlKXtsZXQgZD0tMTtyZXR1cm4gbnVsbCE9bCYmKGNsZShsKT9hPWw6ZD1sKSxuZXcgWHQoaD0+e2xldCBmPWZ1bmN0aW9uIGdGZShjKXtyZXR1''@;'; put 'put ''cm4gYyBpbnN0YW5jZW9mIERhdGUmJiFpc05hTihjKX0oYyk/K2MtYS5ub3coKTpjO2Y8MCYmKGY9MCk7bGV0IHY9MDtyZXR1cm4gYS5zY2hlZHVsZShmdW5jdGlvbigpe2guY2xvc2VkfHwoaC5uZXh0KHYrKyksMDw9ZD90aGlzLnNjaGVkdWxlKHZvaWQgMCxkKTpoLmNvbXBsZXRlKCkpfSxm''@;'; put 'put ''KX0pfWZ1bmN0aW9uIHlZKGMsbD1DTCl7cmV0dXJuIGZ1bmN0aW9uIHBGZShjKXtyZXR1cm4gVmkoKGwsYSk9PntsZXQgZD0hMSxoPW51bGwsZj1udWxsLHY9ITE7Y29uc3QgTT0oKT0+e2lmKGY/LnVuc3Vic2NyaWJlKCksZj1udWxsLGQpe2Q9ITE7Y29uc3QgWj1oO2g9bnVsbCxhLm5leHQo''@;'; put 'put ''Wil9diYmYS5jb21wbGV0ZSgpfSxEPSgpPT57Zj1udWxsLHYmJmEuY29tcGxldGUoKX07bC5zdWJzY3JpYmUoTmkoYSxaPT57ZD0hMCxoPVosZnx8bDEoYyhaKSkuc3Vic2NyaWJlKGY9TmkoYSxNLEQpKX0sKCk9Pnt2PSEwLCghZHx8IWZ8fGYuY2xvc2VkKSYmYS5jb21wbGV0ZSgpfSkpfSl9''@;'; put 'put ''KCgpPT5VMGUoYyxsKSl9Y29uc3QgdkZlPW5ldyBTdCgiY2RrLWRpci1kb2MiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uIGJGZSgpe3JldHVybiBmaSh2cyl9fSkseUZlPS9eKGFyfGNrYnxkdnxoZXxpd3xmYXxucW98cHN8c2R8dWd8dXJ8eWl8LipbLV9dKEFkbG18QXJh''@;'; put 'put ''YnxIZWJyfE5rb298Um9oZ3xUaGFhKSkoPyEuKlstX10oTGF0bnxDeXJsKSgkfC18XykpKCR8LXxfKS9pO2xldCBwbT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMudmFsdWU9Imx0ciIsdGhpcy5jaGFuZ2U9bmV3IEtyLGEmJih0aGlzLnZhbHVlPWZ1bmN0aW9uIF9GZShjKXtj''@;'; put 'put ''b25zdCBsPWM/LnRvTG93ZXJDYXNlKCl8fCIiO3JldHVybiJhdXRvIj09PWwmJnR5cGVvZiBuYXZpZ2F0b3I8InUiJiZuYXZpZ2F0b3I/Lmxhbmd1YWdlP3lGZS50ZXN0KG5hdmlnYXRvci5sYW5ndWFnZSk/InJ0bCI6Imx0ciI6InJ0bCI9PT1sPyJydGwiOiJsdHIifSgoYS5ib2R5P2EuYm9k''@;'; put 'put ''eS5kaXI6bnVsbCl8fChhLmRvY3VtZW50RWxlbWVudD9hLmRvY3VtZW50RWxlbWVudC5kaXI6bnVsbCl8fCJsdHIiKSl9bmdPbkRlc3Ryb3koKXt0aGlzLmNoYW5nZS5jb21wbGV0ZSgpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHhyKHZGZSw4''@;'; put 'put ''KSl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCk7Y2xhc3Mgd0Zle31jbGFzcyBTRmUgZXh0ZW5kcyB3RmV7Y29uc3RydWN0b3IobCl7c3VwZXIoKSx0aGlzLl9kYXRhPWx9Y29u''@;'; put 'put ''bmVjdCgpe3JldHVybiBCTSh0aGlzLl9kYXRhKT90aGlzLl9kYXRhOmZvKHRoaXMuX2RhdGEpfWRpc2Nvbm5lY3QoKXt9fXZhciBnbT1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLlJFUExBQ0VEPTBdPSJSRVBMQUNFRCIsY1tjLklOU0VSVEVEPTFdPSJJTlNFUlRFRCIsY1tjLk1PVkVEPTJdPSJN''@;'; put 'put ''T1ZFRCIsY1tjLlJFTU9WRUQ9M109IlJFTU9WRUQiLGN9KGdtfHx7fSk7Y29uc3QgX1k9bmV3IFN0KCJfVmlld1JlcGVhdGVyIik7Y2xhc3MgWjBle2NvbnN0cnVjdG9yKCl7dGhpcy52aWV3Q2FjaGVTaXplPTIwLHRoaXMuX3ZpZXdDYWNoZT1bXX1hcHBseUNoYW5nZXMobCxhLGQsaCxmKXts''@;'; put 'put ''LmZvckVhY2hPcGVyYXRpb24oKHYsTSxEKT0+e2xldCBaLHJlO251bGw9PXYucHJldmlvdXNJbmRleD8oWj10aGlzLl9pbnNlcnRWaWV3KCgpPT5kKHYsTSxEKSxELGEsaCh2KSkscmU9Wj9nbS5JTlNFUlRFRDpnbS5SRVBMQUNFRCk6bnVsbD09RD8odGhpcy5fZGV0YWNoQW5kQ2FjaGVWaWV3''@;'; put 'put ''KE0sYSkscmU9Z20uUkVNT1ZFRCk6KFo9dGhpcy5fbW92ZVZpZXcoTSxELGEsaCh2KSkscmU9Z20uTU9WRUQpLGYmJmYoe2NvbnRleHQ6Wj8uY29udGV4dCxvcGVyYXRpb246cmUscmVjb3JkOnZ9KX0pfWRldGFjaCgpe2Zvcihjb25zdCBsIG9mIHRoaXMuX3ZpZXdDYWNoZSlsLmRlc3Ryb3ko''@;'; put 'put ''KTt0aGlzLl92aWV3Q2FjaGU9W119X2luc2VydFZpZXcobCxhLGQsaCl7Y29uc3QgZj10aGlzLl9pbnNlcnRWaWV3RnJvbUNhY2hlKGEsZCk7aWYoZilyZXR1cm4gdm9pZChmLmNvbnRleHQuJGltcGxpY2l0PWgpO2NvbnN0IHY9bCgpO3JldHVybiBkLmNyZWF0ZUVtYmVkZGVkVmlldyh2LnRl''@;'; put 'put ''bXBsYXRlUmVmLHYuY29udGV4dCx2LmluZGV4KX1fZGV0YWNoQW5kQ2FjaGVWaWV3KGwsYSl7Y29uc3QgZD1hLmRldGFjaChsKTt0aGlzLl9tYXliZUNhY2hlVmlldyhkLGEpfV9tb3ZlVmlldyhsLGEsZCxoKXtjb25zdCBmPWQuZ2V0KGwpO3JldHVybiBkLm1vdmUoZixhKSxmLmNvbnRleHQu''@;'; put 'put ''JGltcGxpY2l0PWgsZn1fbWF5YmVDYWNoZVZpZXcobCxhKXtpZih0aGlzLl92aWV3Q2FjaGUubGVuZ3RoPHRoaXMudmlld0NhY2hlU2l6ZSl0aGlzLl92aWV3Q2FjaGUucHVzaChsKTtlbHNle2NvbnN0IGQ9YS5pbmRleE9mKGwpOy0xPT09ZD9sLmRlc3Ryb3koKTphLnJlbW92ZShkKX19X2lu''@;'; put 'put ''c2VydFZpZXdGcm9tQ2FjaGUobCxhKXtjb25zdCBkPXRoaXMuX3ZpZXdDYWNoZS5wb3AoKTtyZXR1cm4gZCYmYS5pbnNlcnQoZCxsKSxkfHxudWxsfX1jb25zdCBNRmU9WyJjb250ZW50V3JhcHBlciJdLHhGZT1bIioiXSxXMGU9bmV3IFN0KCJWSVJUVUFMX1NDUk9MTF9TVFJBVEVHWSIpO2Ns''@;'; put 'put ''YXNzIEVGZXtjb25zdHJ1Y3RvcihsLGEsZCl7dGhpcy5fc2Nyb2xsZWRJbmRleENoYW5nZT1uZXcgV24sdGhpcy5zY3JvbGxlZEluZGV4Q2hhbmdlPXRoaXMuX3Njcm9sbGVkSW5kZXhDaGFuZ2UucGlwZShmdW5jdGlvbiBjWShjLGw9Y24pe3JldHVybiBjPWM/P0pPZSxWaSgoYSxkKT0+e2xl''@;'; put 'put ''dCBoLGY9ITA7YS5zdWJzY3JpYmUoTmkoZCx2PT57Y29uc3QgTT1sKHYpOyhmfHwhYyhoLE0pKSYmKGY9ITEsaD1NLGQubmV4dCh2KSl9KSl9KX0oKSksdGhpcy5fdmlld3BvcnQ9bnVsbCx0aGlzLl9pdGVtU2l6ZT1sLHRoaXMuX21pbkJ1ZmZlclB4PWEsdGhpcy5fbWF4QnVmZmVyUHg9ZH1h''@;'; put 'put ''dHRhY2gobCl7dGhpcy5fdmlld3BvcnQ9bCx0aGlzLl91cGRhdGVUb3RhbENvbnRlbnRTaXplKCksdGhpcy5fdXBkYXRlUmVuZGVyZWRSYW5nZSgpfWRldGFjaCgpe3RoaXMuX3Njcm9sbGVkSW5kZXhDaGFuZ2UuY29tcGxldGUoKSx0aGlzLl92aWV3cG9ydD1udWxsfXVwZGF0ZUl0ZW1BbmRC''@;'; put 'put ''dWZmZXJTaXplKGwsYSxkKXt0aGlzLl9pdGVtU2l6ZT1sLHRoaXMuX21pbkJ1ZmZlclB4PWEsdGhpcy5fbWF4QnVmZmVyUHg9ZCx0aGlzLl91cGRhdGVUb3RhbENvbnRlbnRTaXplKCksdGhpcy5fdXBkYXRlUmVuZGVyZWRSYW5nZSgpfW9uQ29udGVudFNjcm9sbGVkKCl7dGhpcy5fdXBkYXRl''@;'; put 'put ''UmVuZGVyZWRSYW5nZSgpfW9uRGF0YUxlbmd0aENoYW5nZWQoKXt0aGlzLl91cGRhdGVUb3RhbENvbnRlbnRTaXplKCksdGhpcy5fdXBkYXRlUmVuZGVyZWRSYW5nZSgpfW9uQ29udGVudFJlbmRlcmVkKCl7fW9uUmVuZGVyZWRPZmZzZXRDaGFuZ2VkKCl7fXNjcm9sbFRvSW5kZXgobCxhKXt0''@;'; put 'put ''aGlzLl92aWV3cG9ydCYmdGhpcy5fdmlld3BvcnQuc2Nyb2xsVG9PZmZzZXQobCp0aGlzLl9pdGVtU2l6ZSxhKX1fdXBkYXRlVG90YWxDb250ZW50U2l6ZSgpe3RoaXMuX3ZpZXdwb3J0JiZ0aGlzLl92aWV3cG9ydC5zZXRUb3RhbENvbnRlbnRTaXplKHRoaXMuX3ZpZXdwb3J0LmdldERhdGFM''@;'; put 'put ''ZW5ndGgoKSp0aGlzLl9pdGVtU2l6ZSl9X3VwZGF0ZVJlbmRlcmVkUmFuZ2UoKXtpZighdGhpcy5fdmlld3BvcnQpcmV0dXJuO2NvbnN0IGw9dGhpcy5fdmlld3BvcnQuZ2V0UmVuZGVyZWRSYW5nZSgpLGE9e3N0YXJ0Omwuc3RhcnQsZW5kOmwuZW5kfSxkPXRoaXMuX3ZpZXdwb3J0LmdldFZp''@;'; put 'put ''ZXdwb3J0U2l6ZSgpLGg9dGhpcy5fdmlld3BvcnQuZ2V0RGF0YUxlbmd0aCgpO2xldCBmPXRoaXMuX3ZpZXdwb3J0Lm1lYXN1cmVTY3JvbGxPZmZzZXQoKSx2PXRoaXMuX2l0ZW1TaXplPjA/Zi90aGlzLl9pdGVtU2l6ZTowO2lmKGEuZW5kPmgpe2NvbnN0IEQ9TWF0aC5jZWlsKGQvdGhpcy5f''@;'; put 'put ''aXRlbVNpemUpLFo9TWF0aC5tYXgoMCxNYXRoLm1pbih2LGgtRCkpO3YhPVomJih2PVosZj1aKnRoaXMuX2l0ZW1TaXplLGEuc3RhcnQ9TWF0aC5mbG9vcih2KSksYS5lbmQ9TWF0aC5tYXgoMCxNYXRoLm1pbihoLGEuc3RhcnQrRCkpfWNvbnN0IE09Zi1hLnN0YXJ0KnRoaXMuX2l0ZW1TaXpl''@;'; put 'put ''O2lmKE08dGhpcy5fbWluQnVmZmVyUHgmJjAhPWEuc3RhcnQpe2NvbnN0IEQ9TWF0aC5jZWlsKCh0aGlzLl9tYXhCdWZmZXJQeC1NKS90aGlzLl9pdGVtU2l6ZSk7YS5zdGFydD1NYXRoLm1heCgwLGEuc3RhcnQtRCksYS5lbmQ9TWF0aC5taW4oaCxNYXRoLmNlaWwodisoZCt0aGlzLl9taW5C''@;'; put 'put ''dWZmZXJQeCkvdGhpcy5faXRlbVNpemUpKX1lbHNle2NvbnN0IEQ9YS5lbmQqdGhpcy5faXRlbVNpemUtKGYrZCk7aWYoRDx0aGlzLl9taW5CdWZmZXJQeCYmYS5lbmQhPWgpe2NvbnN0IFo9TWF0aC5jZWlsKCh0aGlzLl9tYXhCdWZmZXJQeC1EKS90aGlzLl9pdGVtU2l6ZSk7Wj4wJiYoYS5l''@;'; put 'put ''bmQ9TWF0aC5taW4oaCxhLmVuZCtaKSxhLnN0YXJ0PU1hdGgubWF4KDAsTWF0aC5mbG9vcih2LXRoaXMuX21pbkJ1ZmZlclB4L3RoaXMuX2l0ZW1TaXplKSkpfX10aGlzLl92aWV3cG9ydC5zZXRSZW5kZXJlZFJhbmdlKGEpLHRoaXMuX3ZpZXdwb3J0LnNldFJlbmRlcmVkQ29udGVudE9mZnNl''@;'; put 'put ''dCh0aGlzLl9pdGVtU2l6ZSphLnN0YXJ0KSx0aGlzLl9zY3JvbGxlZEluZGV4Q2hhbmdlLm5leHQoTWF0aC5mbG9vcih2KSl9fWxldCBreT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLl9uZ1pvbmU9YSx0aGlzLl9wbGF0Zm9ybT1kLHRoaXMuX3Njcm9sbGVkPW5ldyBX''@;'; put 'put ''bix0aGlzLl9nbG9iYWxTdWJzY3JpcHRpb249bnVsbCx0aGlzLl9zY3JvbGxlZENvdW50PTAsdGhpcy5zY3JvbGxDb250YWluZXJzPW5ldyBNYXAsdGhpcy5fZG9jdW1lbnQ9aH1yZWdpc3RlcihhKXt0aGlzLnNjcm9sbENvbnRhaW5lcnMuaGFzKGEpfHx0aGlzLnNjcm9sbENvbnRhaW5lcnMu''@;'; put 'put ''c2V0KGEsYS5lbGVtZW50U2Nyb2xsZWQoKS5zdWJzY3JpYmUoKCk9PnRoaXMuX3Njcm9sbGVkLm5leHQoYSkpKX1kZXJlZ2lzdGVyKGEpe2NvbnN0IGQ9dGhpcy5zY3JvbGxDb250YWluZXJzLmdldChhKTtkJiYoZC51bnN1YnNjcmliZSgpLHRoaXMuc2Nyb2xsQ29udGFpbmVycy5kZWxldGUo''@;'; put 'put ''YSkpfXNjcm9sbGVkKGE9MjApe3JldHVybiB0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXI/bmV3IFh0KGQ9Pnt0aGlzLl9nbG9iYWxTdWJzY3JpcHRpb258fHRoaXMuX2FkZEdsb2JhbExpc3RlbmVyKCk7Y29uc3QgaD1hPjA/dGhpcy5fc2Nyb2xsZWQucGlwZSh5WShhKSkuc3Vic2NyaWJlKGQp''@;'; put 'put ''OnRoaXMuX3Njcm9sbGVkLnN1YnNjcmliZShkKTtyZXR1cm4gdGhpcy5fc2Nyb2xsZWRDb3VudCsrLCgpPT57aC51bnN1YnNjcmliZSgpLHRoaXMuX3Njcm9sbGVkQ291bnQtLSx0aGlzLl9zY3JvbGxlZENvdW50fHx0aGlzLl9yZW1vdmVHbG9iYWxMaXN0ZW5lcigpfX0pOmZvKCl9bmdPbkRl''@;'; put 'put ''c3Ryb3koKXt0aGlzLl9yZW1vdmVHbG9iYWxMaXN0ZW5lcigpLHRoaXMuc2Nyb2xsQ29udGFpbmVycy5mb3JFYWNoKChhLGQpPT50aGlzLmRlcmVnaXN0ZXIoZCkpLHRoaXMuX3Njcm9sbGVkLmNvbXBsZXRlKCl9YW5jZXN0b3JTY3JvbGxlZChhLGQpe2NvbnN0IGg9dGhpcy5nZXRBbmNlc3Rv''@;'; put 'put ''clNjcm9sbENvbnRhaW5lcnMoYSk7cmV0dXJuIHRoaXMuc2Nyb2xsZWQoZCkucGlwZSgkbChmPT4hZnx8aC5pbmRleE9mKGYpPi0xKSl9Z2V0QW5jZXN0b3JTY3JvbGxDb250YWluZXJzKGEpe2NvbnN0IGQ9W107cmV0dXJuIHRoaXMuc2Nyb2xsQ29udGFpbmVycy5mb3JFYWNoKChoLGYpPT57''@;'; put 'put ''dGhpcy5fc2Nyb2xsYWJsZUNvbnRhaW5zRWxlbWVudChmLGEpJiZkLnB1c2goZil9KSxkfV9nZXRXaW5kb3coKXtyZXR1cm4gdGhpcy5fZG9jdW1lbnQuZGVmYXVsdFZpZXd8fHdpbmRvd31fc2Nyb2xsYWJsZUNvbnRhaW5zRWxlbWVudChhLGQpe2xldCBoPUVkKGQpLGY9YS5nZXRFbGVtZW50''@;'; put 'put ''UmVmKCkubmF0aXZlRWxlbWVudDtkb3tpZihoPT1mKXJldHVybiEwfXdoaWxlKGg9aC5wYXJlbnRFbGVtZW50KTtyZXR1cm4hMX1fYWRkR2xvYmFsTGlzdGVuZXIoKXt0aGlzLl9nbG9iYWxTdWJzY3JpcHRpb249dGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT54ZCh0aGlzLl9n''@;'; put 'put ''ZXRXaW5kb3coKS5kb2N1bWVudCwic2Nyb2xsIikuc3Vic2NyaWJlKCgpPT50aGlzLl9zY3JvbGxlZC5uZXh0KCkpKX1fcmVtb3ZlR2xvYmFsTGlzdGVuZXIoKXt0aGlzLl9nbG9iYWxTdWJzY3JpcHRpb24mJih0aGlzLl9nbG9iYWxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9n''@;'; put 'put ''bG9iYWxTdWJzY3JpcHRpb249bnVsbCl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoeHIoV2EpLHhyKEN4KSx4cih2cyw4KSl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZElu''@;'; put 'put ''OiJyb290In0pfX1yZXR1cm4gY30pKCksWTBlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy5lbGVtZW50UmVmPWEsdGhpcy5zY3JvbGxEaXNwYXRjaGVyPWQsdGhpcy5uZ1pvbmU9aCx0aGlzLmRpcj1mLHRoaXMuX2Rlc3Ryb3llZD1uZXcgV24sdGhpcy5fZWxlbWVu''@;'; put 'put ''dFNjcm9sbGVkPW5ldyBYdCh2PT50aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+eGQodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsInNjcm9sbCIpLnBpcGUoVjAodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKHYpKSl9bmdPbkluaXQoKXt0aGlzLnNjcm9sbERpc3Bh''@;'; put 'put ''dGNoZXIucmVnaXN0ZXIodGhpcyl9bmdPbkRlc3Ryb3koKXt0aGlzLnNjcm9sbERpc3BhdGNoZXIuZGVyZWdpc3Rlcih0aGlzKSx0aGlzLl9kZXN0cm95ZWQubmV4dCgpLHRoaXMuX2Rlc3Ryb3llZC5jb21wbGV0ZSgpfWVsZW1lbnRTY3JvbGxlZCgpe3JldHVybiB0aGlzLl9lbGVtZW50U2Ny''@;'; put 'put ''b2xsZWR9Z2V0RWxlbWVudFJlZigpe3JldHVybiB0aGlzLmVsZW1lbnRSZWZ9c2Nyb2xsVG8oYSl7Y29uc3QgZD10aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxoPXRoaXMuZGlyJiYicnRsIj09dGhpcy5kaXIudmFsdWU7bnVsbD09YS5sZWZ0JiYoYS5sZWZ0PWg/YS5lbmQ6YS5zdGFy''@;'; put 'put ''dCksbnVsbD09YS5yaWdodCYmKGEucmlnaHQ9aD9hLnN0YXJ0OmEuZW5kKSxudWxsIT1hLmJvdHRvbSYmKGEudG9wPWQuc2Nyb2xsSGVpZ2h0LWQuY2xpZW50SGVpZ2h0LWEuYm90dG9tKSxoJiZNeCgpIT1fcC5OT1JNQUw/KG51bGwhPWEubGVmdCYmKGEucmlnaHQ9ZC5zY3JvbGxXaWR0aC1k''@;'; put 'put ''LmNsaWVudFdpZHRoLWEubGVmdCksTXgoKT09X3AuSU5WRVJURUQ/YS5sZWZ0PWEucmlnaHQ6TXgoKT09X3AuTkVHQVRFRCYmKGEubGVmdD1hLnJpZ2h0Py1hLnJpZ2h0OmEucmlnaHQpKTpudWxsIT1hLnJpZ2h0JiYoYS5sZWZ0PWQuc2Nyb2xsV2lkdGgtZC5jbGllbnRXaWR0aC1hLnJpZ2h0''@;'; put 'put ''KSx0aGlzLl9hcHBseVNjcm9sbFRvT3B0aW9ucyhhKX1fYXBwbHlTY3JvbGxUb09wdGlvbnMoYSl7Y29uc3QgZD10aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDshZnVuY3Rpb24gbVBlKCl7aWYobnVsbD09dTcpe2lmKCJvYmplY3QiIT10eXBlb2YgZG9jdW1lbnR8fCFkb2N1bWVudHx8''@;'; put 'put ''ImZ1bmN0aW9uIiE9dHlwZW9mIEVsZW1lbnR8fCFFbGVtZW50KXJldHVybiB1Nz0hMSx1NztpZigic2Nyb2xsQmVoYXZpb3IiaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlKXU3PSEwO2Vsc2V7Y29uc3QgYz1FbGVtZW50LnByb3RvdHlwZS5zY3JvbGxUbzt1Nz0hIWMmJiEvXHtc''@;'; put 'put ''cypcW25hdGl2ZSBjb2RlXF1ccypcfS8udGVzdChjLnRvU3RyaW5nKCkpfX1yZXR1cm4gdTd9KCk/KG51bGwhPWEudG9wJiYoZC5zY3JvbGxUb3A9YS50b3ApLG51bGwhPWEubGVmdCYmKGQuc2Nyb2xsTGVmdD1hLmxlZnQpKTpkLnNjcm9sbFRvKGEpfW1lYXN1cmVTY3JvbGxPZmZzZXQoYSl7''@;'; put 'put ''Y29uc3QgZD0ibGVmdCIsaD0icmlnaHQiLGY9dGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7aWYoInRvcCI9PWEpcmV0dXJuIGYuc2Nyb2xsVG9wO2lmKCJib3R0b20iPT1hKXJldHVybiBmLnNjcm9sbEhlaWdodC1mLmNsaWVudEhlaWdodC1mLnNjcm9sbFRvcDtjb25zdCB2PXRoaXMu''@;'; put 'put ''ZGlyJiYicnRsIj09dGhpcy5kaXIudmFsdWU7cmV0dXJuInN0YXJ0Ij09YT9hPXY/aDpkOiJlbmQiPT1hJiYoYT12P2Q6aCksdiYmTXgoKT09X3AuSU5WRVJURUQ/YT09ZD9mLnNjcm9sbFdpZHRoLWYuY2xpZW50V2lkdGgtZi5zY3JvbGxMZWZ0OmYuc2Nyb2xsTGVmdDp2JiZNeCgpPT1fcC5O''@;'; put 'put ''RUdBVEVEP2E9PWQ/Zi5zY3JvbGxMZWZ0K2Yuc2Nyb2xsV2lkdGgtZi5jbGllbnRXaWR0aDotZi5zY3JvbGxMZWZ0OmE9PWQ/Zi5zY3JvbGxMZWZ0OmYuc2Nyb2xsV2lkdGgtZi5jbGllbnRXaWR0aC1mLnNjcm9sbExlZnR9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVy''@;'; put 'put ''biBuZXcoZHx8YykoR2UoSmkpLEdlKGt5KSxHZShXYSksR2UocG0sOCkpfX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2RrLXNjcm9sbGFibGUiLCIiXSxbIiIsImNka1Njcm9sbGFibGUiLCIiXV0sc3RhbmRhbG9uZTohMH0pfX1yZXR1cm4gY30p''@;'; put 'put ''KCksQUw9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5fcGxhdGZvcm09YSx0aGlzLl9jaGFuZ2U9bmV3IFduLHRoaXMuX2NoYW5nZUxpc3RlbmVyPWY9Pnt0aGlzLl9jaGFuZ2UubmV4dChmKX0sdGhpcy5fZG9jdW1lbnQ9aCxkLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57''@;'; put 'put ''aWYoYS5pc0Jyb3dzZXIpe2NvbnN0IGY9dGhpcy5fZ2V0V2luZG93KCk7Zi5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLHRoaXMuX2NoYW5nZUxpc3RlbmVyKSxmLmFkZEV2ZW50TGlzdGVuZXIoIm9yaWVudGF0aW9uY2hhbmdlIix0aGlzLl9jaGFuZ2VMaXN0ZW5lcil9dGhpcy5jaGFuZ2Uo''@;'; put 'put ''KS5zdWJzY3JpYmUoKCk9PnRoaXMuX3ZpZXdwb3J0U2l6ZT1udWxsKX0pfW5nT25EZXN0cm95KCl7aWYodGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyKXtjb25zdCBhPXRoaXMuX2dldFdpbmRvdygpO2EucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVzaXplIix0aGlzLl9jaGFuZ2VMaXN0ZW5lciks''@;'; put 'put ''YS5yZW1vdmVFdmVudExpc3RlbmVyKCJvcmllbnRhdGlvbmNoYW5nZSIsdGhpcy5fY2hhbmdlTGlzdGVuZXIpfXRoaXMuX2NoYW5nZS5jb21wbGV0ZSgpfWdldFZpZXdwb3J0U2l6ZSgpe3RoaXMuX3ZpZXdwb3J0U2l6ZXx8dGhpcy5fdXBkYXRlVmlld3BvcnRTaXplKCk7Y29uc3QgYT17d2lk''@;'; put 'put ''dGg6dGhpcy5fdmlld3BvcnRTaXplLndpZHRoLGhlaWdodDp0aGlzLl92aWV3cG9ydFNpemUuaGVpZ2h0fTtyZXR1cm4gdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyfHwodGhpcy5fdmlld3BvcnRTaXplPW51bGwpLGF9Z2V0Vmlld3BvcnRSZWN0KCl7Y29uc3QgYT10aGlzLmdldFZpZXdwb3J0''@;'; put 'put ''U2Nyb2xsUG9zaXRpb24oKSx7d2lkdGg6ZCxoZWlnaHQ6aH09dGhpcy5nZXRWaWV3cG9ydFNpemUoKTtyZXR1cm57dG9wOmEudG9wLGxlZnQ6YS5sZWZ0LGJvdHRvbTphLnRvcCtoLHJpZ2h0OmEubGVmdCtkLGhlaWdodDpoLHdpZHRoOmR9fWdldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKXtp''@;'; put 'put ''ZighdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyKXJldHVybnt0b3A6MCxsZWZ0OjB9O2NvbnN0IGE9dGhpcy5fZG9jdW1lbnQsZD10aGlzLl9nZXRXaW5kb3coKSxoPWEuZG9jdW1lbnRFbGVtZW50LGY9aC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm57dG9wOi1mLnRvcHx8YS5ib2R5''@;'; put 'put ''LnNjcm9sbFRvcHx8ZC5zY3JvbGxZfHxoLnNjcm9sbFRvcHx8MCxsZWZ0Oi1mLmxlZnR8fGEuYm9keS5zY3JvbGxMZWZ0fHxkLnNjcm9sbFh8fGguc2Nyb2xsTGVmdHx8MH19Y2hhbmdlKGE9MjApe3JldHVybiBhPjA/dGhpcy5fY2hhbmdlLnBpcGUoeVkoYSkpOnRoaXMuX2NoYW5nZX1fZ2V0''@;'; put 'put ''V2luZG93KCl7cmV0dXJuIHRoaXMuX2RvY3VtZW50LmRlZmF1bHRWaWV3fHx3aW5kb3d9X3VwZGF0ZVZpZXdwb3J0U2l6ZSgpe2NvbnN0IGE9dGhpcy5fZ2V0V2luZG93KCk7dGhpcy5fdmlld3BvcnRTaXplPXRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcj97d2lkdGg6YS5pbm5lcldpZHRoLGhl''@;'; put 'put ''aWdodDphLmlubmVySGVpZ2h0fTp7d2lkdGg6MCxoZWlnaHQ6MH19c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoeHIoQ3gpLHhyKFdhKSx4cih2cyw4KSl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3''@;'; put 'put ''NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCk7Y29uc3QgRzBlPW5ldyBTdCgiVklSVFVBTF9TQ1JPTExBQkxFIik7bGV0ICQwZT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgWTBle2NvbnN0cnVjdG9yKGEsZCxoLGYpe3N1cGVyKGEsZCxoLGYpfW1lYXN1cmVWaWV3cG9ydFNp''@;'; put 'put ''emUoYSl7Y29uc3QgZD10aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtyZXR1cm4iaG9yaXpvbnRhbCI9PT1hP2QuY2xpZW50V2lkdGg6ZC5jbGllbnRIZWlnaHR9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoSmkpLEdlKGt5KSxHZShX''@;'; put 'put ''YSksR2UocG0sOCkpfX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxmZWF0dXJlczpbd2FdfSl9fXJldHVybiBjfSkoKTtjb25zdCBERmU9dHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZTwidSI/ajBlOmZGZTtsZXQgRHk9KCgpPT57Y2xhc3MgYyBleHRlbmRzICQwZXtnZXQg''@;'; put 'put ''b3JpZW50YXRpb24oKXtyZXR1cm4gdGhpcy5fb3JpZW50YXRpb259c2V0IG9yaWVudGF0aW9uKGEpe3RoaXMuX29yaWVudGF0aW9uIT09YSYmKHRoaXMuX29yaWVudGF0aW9uPWEsdGhpcy5fY2FsY3VsYXRlU3BhY2VyU2l6ZSgpKX1jb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSxELFope3N1cGVy''@;'; put 'put ''KGEsTSxoLHYpLHRoaXMuZWxlbWVudFJlZj1hLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPWQsdGhpcy5fc2Nyb2xsU3RyYXRlZ3k9Zix0aGlzLnNjcm9sbGFibGU9Wix0aGlzLl9wbGF0Zm9ybT1maShDeCksdGhpcy5fZGV0YWNoZWRTdWJqZWN0PW5ldyBXbix0aGlzLl9yZW5kZXJlZFJhbmdl''@;'; put 'put ''U3ViamVjdD1uZXcgV24sdGhpcy5fb3JpZW50YXRpb249InZlcnRpY2FsIix0aGlzLmFwcGVuZE9ubHk9ITEsdGhpcy5zY3JvbGxlZEluZGV4Q2hhbmdlPW5ldyBYdChyZT0+dGhpcy5fc2Nyb2xsU3RyYXRlZ3kuc2Nyb2xsZWRJbmRleENoYW5nZS5zdWJzY3JpYmUoY2U9PlByb21pc2UucmVz''@;'; put 'put ''b2x2ZSgpLnRoZW4oKCk9PnRoaXMubmdab25lLnJ1bigoKT0+cmUubmV4dChjZSkpKSkpLHRoaXMucmVuZGVyZWRSYW5nZVN0cmVhbT10aGlzLl9yZW5kZXJlZFJhbmdlU3ViamVjdCx0aGlzLl90b3RhbENvbnRlbnRTaXplPTAsdGhpcy5fdG90YWxDb250ZW50V2lkdGg9IiIsdGhpcy5fdG90''@;'; put 'put ''YWxDb250ZW50SGVpZ2h0PSIiLHRoaXMuX3JlbmRlcmVkUmFuZ2U9e3N0YXJ0OjAsZW5kOjB9LHRoaXMuX2RhdGFMZW5ndGg9MCx0aGlzLl92aWV3cG9ydFNpemU9MCx0aGlzLl9yZW5kZXJlZENvbnRlbnRPZmZzZXQ9MCx0aGlzLl9yZW5kZXJlZENvbnRlbnRPZmZzZXROZWVkc1Jld3JpdGU9''@;'; put 'put ''ITEsdGhpcy5faXNDaGFuZ2VEZXRlY3Rpb25QZW5kaW5nPSExLHRoaXMuX3J1bkFmdGVyQ2hhbmdlRGV0ZWN0aW9uPVtdLHRoaXMuX3ZpZXdwb3J0Q2hhbmdlcz1xdC5FTVBUWSx0aGlzLl92aWV3cG9ydENoYW5nZXM9RC5jaGFuZ2UoKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLmNoZWNrVmlld3Bv''@;'; put 'put ''cnRTaXplKCl9KSx0aGlzLnNjcm9sbGFibGV8fCh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKCJjZGstdmlydHVhbC1zY3JvbGxhYmxlIiksdGhpcy5zY3JvbGxhYmxlPXRoaXMpfW5nT25Jbml0KCl7dGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyJiYodGhpcy5z''@;'; put 'put ''Y3JvbGxhYmxlPT09dGhpcyYmc3VwZXIubmdPbkluaXQoKSx0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+e3RoaXMuX21lYXN1cmVWaWV3cG9ydFNpemUoKSx0aGlzLl9zY3JvbGxTdHJhdGVneS5hdHRhY2godGhpcyksdGhpcy5z''@;'; put 'put ''Y3JvbGxhYmxlLmVsZW1lbnRTY3JvbGxlZCgpLnBpcGUoeDIobnVsbCkseVkoMCxERmUpLFYwKHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSgoKT0+dGhpcy5fc2Nyb2xsU3RyYXRlZ3kub25Db250ZW50U2Nyb2xsZWQoKSksdGhpcy5fbWFya0NoYW5nZURldGVjdGlvbk5lZWRlZCgpfSkp''@;'; put 'put ''KX1uZ09uRGVzdHJveSgpe3RoaXMuZGV0YWNoKCksdGhpcy5fc2Nyb2xsU3RyYXRlZ3kuZGV0YWNoKCksdGhpcy5fcmVuZGVyZWRSYW5nZVN1YmplY3QuY29tcGxldGUoKSx0aGlzLl9kZXRhY2hlZFN1YmplY3QuY29tcGxldGUoKSx0aGlzLl92aWV3cG9ydENoYW5nZXMudW5zdWJzY3JpYmUo''@;'; put 'put ''KSxzdXBlci5uZ09uRGVzdHJveSgpfWF0dGFjaChhKXt0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuX2Zvck9mPWEsdGhpcy5fZm9yT2YuZGF0YVN0cmVhbS5waXBlKFYwKHRoaXMuX2RldGFjaGVkU3ViamVjdCkpLnN1YnNjcmliZShkPT57Y29uc3QgaD1kLmxlbmd0''@;'; put 'put ''aDtoIT09dGhpcy5fZGF0YUxlbmd0aCYmKHRoaXMuX2RhdGFMZW5ndGg9aCx0aGlzLl9zY3JvbGxTdHJhdGVneS5vbkRhdGFMZW5ndGhDaGFuZ2VkKCkpLHRoaXMuX2RvQ2hhbmdlRGV0ZWN0aW9uKCl9KX0pfWRldGFjaCgpe3RoaXMuX2Zvck9mPW51bGwsdGhpcy5fZGV0YWNoZWRTdWJqZWN0''@;'; put 'put ''Lm5leHQoKX1nZXREYXRhTGVuZ3RoKCl7cmV0dXJuIHRoaXMuX2RhdGFMZW5ndGh9Z2V0Vmlld3BvcnRTaXplKCl7cmV0dXJuIHRoaXMuX3ZpZXdwb3J0U2l6ZX1nZXRSZW5kZXJlZFJhbmdlKCl7cmV0dXJuIHRoaXMuX3JlbmRlcmVkUmFuZ2V9bWVhc3VyZUJvdW5kaW5nQ2xpZW50UmVjdFdp''@;'; put 'put ''dGhTY3JvbGxPZmZzZXQoYSl7cmV0dXJuIHRoaXMuZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClbYV19c2V0VG90YWxDb250ZW50U2l6ZShhKXt0aGlzLl90b3RhbENvbnRlbnRTaXplIT09YSYmKHRoaXMuX3RvdGFsQ29udGVudFNpemU9YSx0''@;'; put 'put ''aGlzLl9jYWxjdWxhdGVTcGFjZXJTaXplKCksdGhpcy5fbWFya0NoYW5nZURldGVjdGlvbk5lZWRlZCgpKX1zZXRSZW5kZXJlZFJhbmdlKGEpeyhmdW5jdGlvbiBrRmUoYyxsKXtyZXR1cm4gYy5zdGFydD09bC5zdGFydCYmYy5lbmQ9PWwuZW5kfSkodGhpcy5fcmVuZGVyZWRSYW5nZSxhKXx8''@;'; put 'put ''KHRoaXMuYXBwZW5kT25seSYmKGE9e3N0YXJ0OjAsZW5kOk1hdGgubWF4KHRoaXMuX3JlbmRlcmVkUmFuZ2UuZW5kLGEuZW5kKX0pLHRoaXMuX3JlbmRlcmVkUmFuZ2VTdWJqZWN0Lm5leHQodGhpcy5fcmVuZGVyZWRSYW5nZT1hKSx0aGlzLl9tYXJrQ2hhbmdlRGV0ZWN0aW9uTmVlZGVkKCgp''@;'; put 'put ''PT50aGlzLl9zY3JvbGxTdHJhdGVneS5vbkNvbnRlbnRSZW5kZXJlZCgpKSl9Z2V0T2Zmc2V0VG9SZW5kZXJlZENvbnRlbnRTdGFydCgpe3JldHVybiB0aGlzLl9yZW5kZXJlZENvbnRlbnRPZmZzZXROZWVkc1Jld3JpdGU/bnVsbDp0aGlzLl9yZW5kZXJlZENvbnRlbnRPZmZzZXR9c2V0UmVu''@;'; put 'put ''ZGVyZWRDb250ZW50T2Zmc2V0KGEsZD0idG8tc3RhcnQiKXthPXRoaXMuYXBwZW5kT25seSYmInRvLXN0YXJ0Ij09PWQ/MDphO2NvbnN0IGY9Imhvcml6b250YWwiPT10aGlzLm9yaWVudGF0aW9uLHY9Zj8iWCI6IlkiO2xldCBEPWB0cmFuc2xhdGUke3Z9KCR7TnVtYmVyKChmJiZ0aGlzLmRp''@;'; put 'put ''ciYmInJ0bCI9PXRoaXMuZGlyLnZhbHVlPy0xOjEpKmEpfXB4KWA7dGhpcy5fcmVuZGVyZWRDb250ZW50T2Zmc2V0PWEsInRvLWVuZCI9PT1kJiYoRCs9YCB0cmFuc2xhdGUke3Z9KC0xMDAlKWAsdGhpcy5fcmVuZGVyZWRDb250ZW50T2Zmc2V0TmVlZHNSZXdyaXRlPSEwKSx0aGlzLl9yZW5k''@;'; put 'put ''ZXJlZENvbnRlbnRUcmFuc2Zvcm0hPUQmJih0aGlzLl9yZW5kZXJlZENvbnRlbnRUcmFuc2Zvcm09RCx0aGlzLl9tYXJrQ2hhbmdlRGV0ZWN0aW9uTmVlZGVkKCgpPT57dGhpcy5fcmVuZGVyZWRDb250ZW50T2Zmc2V0TmVlZHNSZXdyaXRlPyh0aGlzLl9yZW5kZXJlZENvbnRlbnRPZmZzZXQt''@;'; put 'put ''PXRoaXMubWVhc3VyZVJlbmRlcmVkQ29udGVudFNpemUoKSx0aGlzLl9yZW5kZXJlZENvbnRlbnRPZmZzZXROZWVkc1Jld3JpdGU9ITEsdGhpcy5zZXRSZW5kZXJlZENvbnRlbnRPZmZzZXQodGhpcy5fcmVuZGVyZWRDb250ZW50T2Zmc2V0KSk6dGhpcy5fc2Nyb2xsU3RyYXRlZ3kub25SZW5k''@;'; put 'put ''ZXJlZE9mZnNldENoYW5nZWQoKX0pKX1zY3JvbGxUb09mZnNldChhLGQ9ImF1dG8iKXtjb25zdCBoPXtiZWhhdmlvcjpkfTsiaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uP2guc3RhcnQ9YTpoLnRvcD1hLHRoaXMuc2Nyb2xsYWJsZS5zY3JvbGxUbyhoKX1zY3JvbGxUb0luZGV4KGEs''@;'; put 'put ''ZD0iYXV0byIpe3RoaXMuX3Njcm9sbFN0cmF0ZWd5LnNjcm9sbFRvSW5kZXgoYSxkKX1tZWFzdXJlU2Nyb2xsT2Zmc2V0KGEpe2xldCBkO3JldHVybiBkPXRoaXMuc2Nyb2xsYWJsZT09dGhpcz9oPT5zdXBlci5tZWFzdXJlU2Nyb2xsT2Zmc2V0KGgpOmg9PnRoaXMuc2Nyb2xsYWJsZS5tZWFz''@;'; put 'put ''dXJlU2Nyb2xsT2Zmc2V0KGgpLE1hdGgubWF4KDAsZChhPz8oImhvcml6b250YWwiPT09dGhpcy5vcmllbnRhdGlvbj8ic3RhcnQiOiJ0b3AiKSktdGhpcy5tZWFzdXJlVmlld3BvcnRPZmZzZXQoKSl9bWVhc3VyZVZpZXdwb3J0T2Zmc2V0KGEpe2xldCBkO2NvbnN0IGg9ImxlZnQiLGY9InJp''@;'; put 'put ''Z2h0Iix2PSJydGwiPT10aGlzLmRpcj8udmFsdWU7ZD0ic3RhcnQiPT1hP3Y/ZjpoOiJlbmQiPT1hP3Y/aDpmOmF8fCgiaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uPyJsZWZ0IjoidG9wIik7Y29uc3QgTT10aGlzLnNjcm9sbGFibGUubWVhc3VyZUJvdW5kaW5nQ2xpZW50UmVjdFdp''@;'; put 'put ''dGhTY3JvbGxPZmZzZXQoZCk7cmV0dXJuIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpW2RdLU19bWVhc3VyZVJlbmRlcmVkQ29udGVudFNpemUoKXtjb25zdCBhPXRoaXMuX2NvbnRlbnRXcmFwcGVyLm5hdGl2ZUVsZW1lbnQ7cmV0dXJuImhv''@;'; put 'put ''cml6b250YWwiPT09dGhpcy5vcmllbnRhdGlvbj9hLm9mZnNldFdpZHRoOmEub2Zmc2V0SGVpZ2h0fW1lYXN1cmVSYW5nZVNpemUoYSl7cmV0dXJuIHRoaXMuX2Zvck9mP3RoaXMuX2Zvck9mLm1lYXN1cmVSYW5nZVNpemUoYSx0aGlzLm9yaWVudGF0aW9uKTowfWNoZWNrVmlld3BvcnRTaXpl''@;'; put 'put ''KCl7dGhpcy5fbWVhc3VyZVZpZXdwb3J0U2l6ZSgpLHRoaXMuX3Njcm9sbFN0cmF0ZWd5Lm9uRGF0YUxlbmd0aENoYW5nZWQoKX1fbWVhc3VyZVZpZXdwb3J0U2l6ZSgpe3RoaXMuX3ZpZXdwb3J0U2l6ZT10aGlzLnNjcm9sbGFibGUubWVhc3VyZVZpZXdwb3J0U2l6ZSh0aGlzLm9yaWVudGF0''@;'; put 'put ''aW9uKX1fbWFya0NoYW5nZURldGVjdGlvbk5lZWRlZChhKXthJiZ0aGlzLl9ydW5BZnRlckNoYW5nZURldGVjdGlvbi5wdXNoKGEpLHRoaXMuX2lzQ2hhbmdlRGV0ZWN0aW9uUGVuZGluZ3x8KHRoaXMuX2lzQ2hhbmdlRGV0ZWN0aW9uUGVuZGluZz0hMCx0aGlzLm5nWm9uZS5ydW5PdXRzaWRl''@;'; put 'put ''QW5ndWxhcigoKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+e3RoaXMuX2RvQ2hhbmdlRGV0ZWN0aW9uKCl9KSkpfV9kb0NoYW5nZURldGVjdGlvbigpe3RoaXMuX2lzQ2hhbmdlRGV0ZWN0aW9uUGVuZGluZz0hMSx0aGlzLl9jb250ZW50V3JhcHBlci5uYXRpdmVFbGVtZW50LnN0eWxl''@;'; put 'put ''LnRyYW5zZm9ybT10aGlzLl9yZW5kZXJlZENvbnRlbnRUcmFuc2Zvcm0sdGhpcy5uZ1pvbmUucnVuKCgpPT50aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSk7Y29uc3QgYT10aGlzLl9ydW5BZnRlckNoYW5nZURldGVjdGlvbjt0aGlzLl9ydW5BZnRlckNoYW5nZURldGVj''@;'; put 'put ''dGlvbj1bXTtmb3IoY29uc3QgZCBvZiBhKWQoKX1fY2FsY3VsYXRlU3BhY2VyU2l6ZSgpe3RoaXMuX3RvdGFsQ29udGVudEhlaWdodD0iaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uPyIiOmAke3RoaXMuX3RvdGFsQ29udGVudFNpemV9cHhgLHRoaXMuX3RvdGFsQ29udGVudFdpZHRo''@;'; put 'put ''PSJob3Jpem9udGFsIj09PXRoaXMub3JpZW50YXRpb24/YCR7dGhpcy5fdG90YWxDb250ZW50U2l6ZX1weGA6IiJ9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoSmkpLEdlKEVzKSxHZShXYSksR2UoVzBlLDgpLEdlKHBtLDgpLEdlKGt5KSxH''@;'; put 'put ''ZShBTCksR2UoRzBlLDgpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZCxoKXtpZigxJmQmJnFhKE1GZSw3KSwyJmQpe2xldCBmO0NpKGY9U2koKSkmJihoLl9j''@;'; put 'put ''b250ZW50V3JhcHBlcj1mLmZpcnN0KX19LGhvc3RBdHRyczpbMSwiY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0Il0saG9zdFZhcnM6NCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZCxoKXsyJmQmJlRyKCJjZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24taG9yaXpvbnRhbCIsImhvcml6''@;'; put 'put ''b250YWwiPT09aC5vcmllbnRhdGlvbikoImNkay12aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi12ZXJ0aWNhbCIsImhvcml6b250YWwiIT09aC5vcmllbnRhdGlvbil9LGlucHV0czp7b3JpZW50YXRpb246Im9yaWVudGF0aW9uIixhcHBlbmRPbmx5OltObi5IYXNEZWNvcmF0b3JJbnB1dFRy''@;'; put 'put ''YW5zZm9ybSwiYXBwZW5kT25seSIsImFwcGVuZE9ubHkiLHMxXX0sb3V0cHV0czp7c2Nyb2xsZWRJbmRleENoYW5nZToic2Nyb2xsZWRJbmRleENoYW5nZSJ9LHN0YW5kYWxvbmU6ITAsZmVhdHVyZXM6W2RhKFt7cHJvdmlkZTpZMGUsdXNlRmFjdG9yeTooYSxkKT0+YXx8ZCxkZXBzOltbbmV3''@;'; put 'put ''IEkxLG5ldyBjNShHMGUpXSxjXX1dKSxXbCx3YSxxSV0sbmdDb250ZW50U2VsZWN0b3JzOnhGZSxkZWNsczo0LHZhcnM6NCxjb25zdHM6W1siY29udGVudFdyYXBwZXIiLCIiXSxbMSwiY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlciJdLFsxLCJjZGstdmlydHVhbC1zY3JvbGwt''@;'; put 'put ''c3BhY2VyIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYoc2EoKSxkZSgwLCJkaXYiLDEsMCksWXIoMiksaGUoKSxHdCgzLCJkaXYiLDIpKSwyJmQmJihmZSgzKSxfZCgid2lkdGgiLGguX3RvdGFsQ29udGVudFdpZHRoKSgiaGVpZ2h0IixoLl90b3RhbENvbnRlbnRIZWlnaHQpKX0s''@;'; put 'put ''c3R5bGVzOlsiY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0e2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246cmVsYXRpdmU7dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCl9LmNkay12aXJ0dWFsLXNjcm9sbGFibGV7b3ZlcmZsb3c6YXV0bzt3aWxsLWNoYW5nZTpzY3JvbGwtcG9zaXRpb247Y29udGFp''@;'; put 'put ''bjpzdHJpY3Q7LXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6dG91Y2h9LmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXJ7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO2NvbnRhaW46Y29udGVudH1bZGlyPXJ0bF0gLmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdy''@;'; put 'put ''YXBwZXJ7cmlnaHQ6MDtsZWZ0OmF1dG99LmNkay12aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi1ob3Jpem9udGFsIC5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVye21pbi1oZWlnaHQ6MTAwJX0uY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLWhvcml6b250YWwgLmNk''@;'; put 'put ''ay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXI+ZGw6bm90KFtjZGtWaXJ0dWFsRm9yXSksLmNkay12aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi1ob3Jpem9udGFsIC5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVyPm9sOm5vdChbY2RrVmlydHVhbEZvcl0pLC5jZGst''@;'; put 'put ''dmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24taG9yaXpvbnRhbCAuY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcj50YWJsZTpub3QoW2Nka1ZpcnR1YWxGb3JdKSwuY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLWhvcml6b250YWwgLmNkay12aXJ0dWFsLXNjcm9sbC1j''@;'; put 'put ''b250ZW50LXdyYXBwZXI+dWw6bm90KFtjZGtWaXJ0dWFsRm9yXSl7cGFkZGluZy1sZWZ0OjA7cGFkZGluZy1yaWdodDowO21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjA7Ym9yZGVyLWxlZnQtd2lkdGg6MDtib3JkZXItcmlnaHQtd2lkdGg6MDtvdXRsaW5lOm5vbmV9LmNkay12aXJ0dWFs''@;'; put 'put ''LXNjcm9sbC1vcmllbnRhdGlvbi12ZXJ0aWNhbCAuY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcnttaW4td2lkdGg6MTAwJX0uY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLXZlcnRpY2FsIC5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVyPmRsOm5vdChb''@;'; put 'put ''Y2RrVmlydHVhbEZvcl0pLC5jZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24tdmVydGljYWwgLmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXI+b2w6bm90KFtjZGtWaXJ0dWFsRm9yXSksLmNkay12aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi12ZXJ0aWNhbCAuY2RrLXZp''@;'; put 'put ''cnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcj50YWJsZTpub3QoW2Nka1ZpcnR1YWxGb3JdKSwuY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLXZlcnRpY2FsIC5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVyPnVsOm5vdChbY2RrVmlydHVhbEZvcl0pe3BhZGRpbmct''@;'; put 'put ''dG9wOjA7cGFkZGluZy1ib3R0b206MDttYXJnaW4tdG9wOjA7bWFyZ2luLWJvdHRvbTowO2JvcmRlci10b3Atd2lkdGg6MDtib3JkZXItYm90dG9tLXdpZHRoOjA7b3V0bGluZTpub25lfS5jZGstdmlydHVhbC1zY3JvbGwtc3BhY2Vye2hlaWdodDoxcHg7dHJhbnNmb3JtLW9yaWdpbjowIDA7''@;'; put 'put ''ZmxleDowIDAgYXV0b31bZGlyPXJ0bF0gLmNkay12aXJ0dWFsLXNjcm9sbC1zcGFjZXJ7dHJhbnNmb3JtLW9yaWdpbjoxMDAlIDB9Il0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiBLMGUoYyxsLGEpe2lmKCFhLmdldEJvdW5kaW5n''@;'; put 'put ''Q2xpZW50UmVjdClyZXR1cm4gMDtjb25zdCBoPWEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuImhvcml6b250YWwiPT09Yz8ic3RhcnQiPT09bD9oLmxlZnQ6aC5yaWdodDoic3RhcnQiPT09bD9oLnRvcDpoLmJvdHRvbX1sZXQga0w9KCgpPT57Y2xhc3MgY3tnZXQgY2RrVmlydHVh''@;'; put 'put ''bEZvck9mKCl7cmV0dXJuIHRoaXMuX2Nka1ZpcnR1YWxGb3JPZn1zZXQgY2RrVmlydHVhbEZvck9mKGEpe3RoaXMuX2Nka1ZpcnR1YWxGb3JPZj1hLGZ1bmN0aW9uIENGZShjKXtyZXR1cm4gYyYmImZ1bmN0aW9uIj09dHlwZW9mIGMuY29ubmVjdCYmIShjIGluc3RhbmNlb2YgV1opfShhKT90''@;'; put 'put ''aGlzLl9kYXRhU291cmNlQ2hhbmdlcy5uZXh0KGEpOnRoaXMuX2RhdGFTb3VyY2VDaGFuZ2VzLm5leHQobmV3IFNGZShCTShhKT9hOkFycmF5LmZyb20oYXx8W10pKSl9Z2V0IGNka1ZpcnR1YWxGb3JUcmFja0J5KCl7cmV0dXJuIHRoaXMuX2Nka1ZpcnR1YWxGb3JUcmFja0J5fXNldCBjZGtW''@;'; put 'put ''aXJ0dWFsRm9yVHJhY2tCeShhKXt0aGlzLl9uZWVkc1VwZGF0ZT0hMCx0aGlzLl9jZGtWaXJ0dWFsRm9yVHJhY2tCeT1hPyhkLGgpPT5hKGQrKHRoaXMuX3JlbmRlcmVkUmFuZ2U/dGhpcy5fcmVuZGVyZWRSYW5nZS5zdGFydDowKSxoKTp2b2lkIDB9c2V0IGNka1ZpcnR1YWxGb3JUZW1wbGF0''@;'; put 'put ''ZShhKXthJiYodGhpcy5fbmVlZHNVcGRhdGU9ITAsdGhpcy5fdGVtcGxhdGU9YSl9Z2V0IGNka1ZpcnR1YWxGb3JUZW1wbGF0ZUNhY2hlU2l6ZSgpe3JldHVybiB0aGlzLl92aWV3UmVwZWF0ZXIudmlld0NhY2hlU2l6ZX1zZXQgY2RrVmlydHVhbEZvclRlbXBsYXRlQ2FjaGVTaXplKGEpe3Ro''@;'; put 'put ''aXMuX3ZpZXdSZXBlYXRlci52aWV3Q2FjaGVTaXplPWQ3KGEpfWNvbnN0cnVjdG9yKGEsZCxoLGYsdixNKXt0aGlzLl92aWV3Q29udGFpbmVyUmVmPWEsdGhpcy5fdGVtcGxhdGU9ZCx0aGlzLl9kaWZmZXJzPWgsdGhpcy5fdmlld1JlcGVhdGVyPWYsdGhpcy5fdmlld3BvcnQ9dix0aGlzLnZp''@;'; put 'put ''ZXdDaGFuZ2U9bmV3IFduLHRoaXMuX2RhdGFTb3VyY2VDaGFuZ2VzPW5ldyBXbix0aGlzLmRhdGFTdHJlYW09dGhpcy5fZGF0YVNvdXJjZUNoYW5nZXMucGlwZSh4MihudWxsKSxmdW5jdGlvbiBtRmUoKXtyZXR1cm4gVmkoKGMsbCk9PntsZXQgYSxkPSExO2Muc3Vic2NyaWJlKE5pKGwsaD0+''@;'; put 'put ''e2NvbnN0IGY9YTthPWgsZCYmbC5uZXh0KFtmLGhdKSxkPSEwfSkpfSl9KCksVjEoKFtELFpdKT0+dGhpcy5fY2hhbmdlRGF0YVNvdXJjZShELFopKSxJMGUoMSkpLHRoaXMuX2RpZmZlcj1udWxsLHRoaXMuX25lZWRzVXBkYXRlPSExLHRoaXMuX2Rlc3Ryb3llZD1uZXcgV24sdGhpcy5kYXRh''@;'; put 'put ''U3RyZWFtLnN1YnNjcmliZShEPT57dGhpcy5fZGF0YT1ELHRoaXMuX29uUmVuZGVyZWREYXRhQ2hhbmdlKCl9KSx0aGlzLl92aWV3cG9ydC5yZW5kZXJlZFJhbmdlU3RyZWFtLnBpcGUoVjAodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKEQ9Pnt0aGlzLl9yZW5kZXJlZFJhbmdlPUQsdGhp''@;'; put 'put ''cy52aWV3Q2hhbmdlLm9ic2VydmVycy5sZW5ndGgmJk0ucnVuKCgpPT50aGlzLnZpZXdDaGFuZ2UubmV4dCh0aGlzLl9yZW5kZXJlZFJhbmdlKSksdGhpcy5fb25SZW5kZXJlZERhdGFDaGFuZ2UoKX0pLHRoaXMuX3ZpZXdwb3J0LmF0dGFjaCh0aGlzKX1tZWFzdXJlUmFuZ2VTaXplKGEsZCl7''@;'; put 'put ''aWYoYS5zdGFydD49YS5lbmQpcmV0dXJuIDA7Y29uc3QgaD1hLnN0YXJ0LXRoaXMuX3JlbmRlcmVkUmFuZ2Uuc3RhcnQsZj1hLmVuZC1hLnN0YXJ0O2xldCB2LE07Zm9yKGxldCBEPTA7RDxmO0QrKyl7Y29uc3QgWj10aGlzLl92aWV3Q29udGFpbmVyUmVmLmdldChEK2gpO2lmKFomJloucm9v''@;'; put 'put ''dE5vZGVzLmxlbmd0aCl7dj1NPVoucm9vdE5vZGVzWzBdO2JyZWFrfX1mb3IobGV0IEQ9Zi0xO0Q+LTE7RC0tKXtjb25zdCBaPXRoaXMuX3ZpZXdDb250YWluZXJSZWYuZ2V0KEQraCk7aWYoWiYmWi5yb290Tm9kZXMubGVuZ3RoKXtNPVoucm9vdE5vZGVzW1oucm9vdE5vZGVzLmxlbmd0aC0x''@;'; put 'put ''XTticmVha319cmV0dXJuIHYmJk0/SzBlKGQsImVuZCIsTSktSzBlKGQsInN0YXJ0Iix2KTowfW5nRG9DaGVjaygpe2lmKHRoaXMuX2RpZmZlciYmdGhpcy5fbmVlZHNVcGRhdGUpe2NvbnN0IGE9dGhpcy5fZGlmZmVyLmRpZmYodGhpcy5fcmVuZGVyZWRJdGVtcyk7YT90aGlzLl9hcHBseUNo''@;'; put 'put ''YW5nZXMoYSk6dGhpcy5fdXBkYXRlQ29udGV4dCgpLHRoaXMuX25lZWRzVXBkYXRlPSExfX1uZ09uRGVzdHJveSgpe3RoaXMuX3ZpZXdwb3J0LmRldGFjaCgpLHRoaXMuX2RhdGFTb3VyY2VDaGFuZ2VzLm5leHQodm9pZCAwKSx0aGlzLl9kYXRhU291cmNlQ2hhbmdlcy5jb21wbGV0ZSgpLHRo''@;'; put 'put ''aXMudmlld0NoYW5nZS5jb21wbGV0ZSgpLHRoaXMuX2Rlc3Ryb3llZC5uZXh0KCksdGhpcy5fZGVzdHJveWVkLmNvbXBsZXRlKCksdGhpcy5fdmlld1JlcGVhdGVyLmRldGFjaCgpfV9vblJlbmRlcmVkRGF0YUNoYW5nZSgpe3RoaXMuX3JlbmRlcmVkUmFuZ2UmJih0aGlzLl9yZW5kZXJlZEl0''@;'; put 'put ''ZW1zPXRoaXMuX2RhdGEuc2xpY2UodGhpcy5fcmVuZGVyZWRSYW5nZS5zdGFydCx0aGlzLl9yZW5kZXJlZFJhbmdlLmVuZCksdGhpcy5fZGlmZmVyfHwodGhpcy5fZGlmZmVyPXRoaXMuX2RpZmZlcnMuZmluZCh0aGlzLl9yZW5kZXJlZEl0ZW1zKS5jcmVhdGUoKGEsZCk9PnRoaXMuY2RrVmly''@;'; put 'put ''dHVhbEZvclRyYWNrQnk/dGhpcy5jZGtWaXJ0dWFsRm9yVHJhY2tCeShhLGQpOmQpKSx0aGlzLl9uZWVkc1VwZGF0ZT0hMCl9X2NoYW5nZURhdGFTb3VyY2UoYSxkKXtyZXR1cm4gYSYmYS5kaXNjb25uZWN0KHRoaXMpLHRoaXMuX25lZWRzVXBkYXRlPSEwLGQ/ZC5jb25uZWN0KHRoaXMpOmZv''@;'; put 'put ''KCl9X3VwZGF0ZUNvbnRleHQoKXtjb25zdCBhPXRoaXMuX2RhdGEubGVuZ3RoO2xldCBkPXRoaXMuX3ZpZXdDb250YWluZXJSZWYubGVuZ3RoO2Zvcig7ZC0tOyl7Y29uc3QgaD10aGlzLl92aWV3Q29udGFpbmVyUmVmLmdldChkKTtoLmNvbnRleHQuaW5kZXg9dGhpcy5fcmVuZGVyZWRSYW5n''@;'; put 'put ''ZS5zdGFydCtkLGguY29udGV4dC5jb3VudD1hLHRoaXMuX3VwZGF0ZUNvbXB1dGVkQ29udGV4dFByb3BlcnRpZXMoaC5jb250ZXh0KSxoLmRldGVjdENoYW5nZXMoKX19X2FwcGx5Q2hhbmdlcyhhKXt0aGlzLl92aWV3UmVwZWF0ZXIuYXBwbHlDaGFuZ2VzKGEsdGhpcy5fdmlld0NvbnRhaW5l''@;'; put 'put ''clJlZiwoZix2LE0pPT50aGlzLl9nZXRFbWJlZGRlZFZpZXdBcmdzKGYsTSksZj0+Zi5pdGVtKSxhLmZvckVhY2hJZGVudGl0eUNoYW5nZShmPT57dGhpcy5fdmlld0NvbnRhaW5lclJlZi5nZXQoZi5jdXJyZW50SW5kZXgpLmNvbnRleHQuJGltcGxpY2l0PWYuaXRlbX0pO2NvbnN0IGQ9dGhp''@;'; put 'put ''cy5fZGF0YS5sZW5ndGg7bGV0IGg9dGhpcy5fdmlld0NvbnRhaW5lclJlZi5sZW5ndGg7Zm9yKDtoLS07KXtjb25zdCBmPXRoaXMuX3ZpZXdDb250YWluZXJSZWYuZ2V0KGgpO2YuY29udGV4dC5pbmRleD10aGlzLl9yZW5kZXJlZFJhbmdlLnN0YXJ0K2gsZi5jb250ZXh0LmNvdW50PWQsdGhp''@;'; put 'put ''cy5fdXBkYXRlQ29tcHV0ZWRDb250ZXh0UHJvcGVydGllcyhmLmNvbnRleHQpfX1fdXBkYXRlQ29tcHV0ZWRDb250ZXh0UHJvcGVydGllcyhhKXthLmZpcnN0PTA9PT1hLmluZGV4LGEubGFzdD1hLmluZGV4PT09YS5jb3VudC0xLGEuZXZlbj1hLmluZGV4JTI9PTAsYS5vZGQ9IWEuZXZlbn1f''@;'; put 'put ''Z2V0RW1iZWRkZWRWaWV3QXJncyhhLGQpe3JldHVybnt0ZW1wbGF0ZVJlZjp0aGlzLl90ZW1wbGF0ZSxjb250ZXh0OnskaW1wbGljaXQ6YS5pdGVtLGNka1ZpcnR1YWxGb3JPZjp0aGlzLl9jZGtWaXJ0dWFsRm9yT2YsaW5kZXg6LTEsY291bnQ6LTEsZmlyc3Q6ITEsbGFzdDohMSxvZGQ6ITEs''@;'; put 'put ''ZXZlbjohMX0saW5kZXg6ZH19c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoRG8pLEdlKFNsKSxHZShlbSksR2UoX1kpLEdlKER5LDQpLEdlKFdhKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJj''@;'; put 'put ''ZGtWaXJ0dWFsRm9yIiwiIiwiY2RrVmlydHVhbEZvck9mIiwiIl1dLGlucHV0czp7Y2RrVmlydHVhbEZvck9mOiJjZGtWaXJ0dWFsRm9yT2YiLGNka1ZpcnR1YWxGb3JUcmFja0J5OiJjZGtWaXJ0dWFsRm9yVHJhY2tCeSIsY2RrVmlydHVhbEZvclRlbXBsYXRlOiJjZGtWaXJ0dWFsRm9yVGVt''@;'; put 'put ''cGxhdGUiLGNka1ZpcnR1YWxGb3JUZW1wbGF0ZUNhY2hlU2l6ZToiY2RrVmlydHVhbEZvclRlbXBsYXRlQ2FjaGVTaXplIn0sc3RhbmRhbG9uZTohMCxmZWF0dXJlczpbZGEoW3twcm92aWRlOl9ZLHVzZUNsYXNzOlowZX1dKV19KX19cmV0dXJuIGN9KSgpLElGZT0oKCk9PntjbGFzcyBje3N0''@;'; put 'put ''YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1Bcih7fSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiB3WShjLGwsYSl7Zm9yKGxldCBkIGluIGwpaWYo''@;'; put 'put ''bC5oYXNPd25Qcm9wZXJ0eShkKSl7Y29uc3QgaD1sW2RdO2g/Yy5zZXRQcm9wZXJ0eShkLGgsYT8uaGFzKGQpPyJpbXBvcnRhbnQiOiIiKTpjLnJlbW92ZVByb3BlcnR5KGQpfXJldHVybiBjfWZ1bmN0aW9uIEl5KGMsbCl7Y29uc3QgYT1sPyIiOiJub25lIjt3WShjLnN0eWxlLHsidG91Y2gt''@;'; put 'put ''YWN0aW9uIjpsPyIiOiJub25lIiwiLXdlYmtpdC11c2VyLWRyYWciOmw/IiI6Im5vbmUiLCItd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3IiOmw/IiI6InRyYW5zcGFyZW50IiwidXNlci1zZWxlY3QiOmEsIi1tcy11c2VyLXNlbGVjdCI6YSwiLXdlYmtpdC11c2VyLXNlbGVjdCI6YSwiLW1v''@;'; put 'put ''ei11c2VyLXNlbGVjdCI6YX0pfWZ1bmN0aW9uIHEwZShjLGwsYSl7d1koYy5zdHlsZSx7cG9zaXRpb246bD8iIjoiZml4ZWQiLHRvcDpsPyIiOiIwIixvcGFjaXR5Omw/IiI6IjAiLGxlZnQ6bD8iIjoiLTk5OWVtIn0sYSl9ZnVuY3Rpb24gREwoYyxsKXtyZXR1cm4gbCYmIm5vbmUiIT1sP2Mr''@;'; put 'put ''IiAiK2w6Y31mdW5jdGlvbiBYMGUoYyxsKXtjLnN0eWxlLndpZHRoPWAke2wud2lkdGh9cHhgLGMuc3R5bGUuaGVpZ2h0PWAke2wuaGVpZ2h0fXB4YCxjLnN0eWxlLnRyYW5zZm9ybT1JTChsLmxlZnQsbC50b3ApfWZ1bmN0aW9uIElMKGMsbCl7cmV0dXJuYHRyYW5zbGF0ZTNkKCR7TWF0aC5y''@;'; put 'put ''b3VuZChjKX1weCwgJHtNYXRoLnJvdW5kKGwpfXB4LCAwKWB9ZnVuY3Rpb24gQ1koYyl7Y29uc3QgbD1jLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybnt0b3A6bC50b3AscmlnaHQ6bC5yaWdodCxib3R0b206bC5ib3R0b20sbGVmdDpsLmxlZnQsd2lkdGg6bC53aWR0aCxoZWlnaHQ6''@;'; put 'put ''bC5oZWlnaHQseDpsLngseTpsLnl9fWZ1bmN0aW9uIFNZKGMsbCxhKXtjb25zdHt0b3A6ZCxib3R0b206aCxsZWZ0OmYscmlnaHQ6dn09YztyZXR1cm4gYT49ZCYmYTw9aCYmbD49ZiYmbDw9dn1mdW5jdGlvbiBFeChjLGwsYSl7Yy50b3ArPWwsYy5ib3R0b209Yy50b3ArYy5oZWlnaHQsYy5s''@;'; put 'put ''ZWZ0Kz1hLGMucmlnaHQ9Yy5sZWZ0K2Mud2lkdGh9ZnVuY3Rpb24gSjBlKGMsbCxhLGQpe2NvbnN0e3RvcDpoLHJpZ2h0OmYsYm90dG9tOnYsbGVmdDpNLHdpZHRoOkQsaGVpZ2h0Olp9PWMscmU9RCpsLGNlPVoqbDtyZXR1cm4gZD5oLWNlJiZkPHYrY2UmJmE+TS1yZSYmYTxmK3JlfWNsYXNz''@;'; put 'put ''IFEwZXtjb25zdHJ1Y3RvcihsKXt0aGlzLl9kb2N1bWVudD1sLHRoaXMucG9zaXRpb25zPW5ldyBNYXB9Y2xlYXIoKXt0aGlzLnBvc2l0aW9ucy5jbGVhcigpfWNhY2hlKGwpe3RoaXMuY2xlYXIoKSx0aGlzLnBvc2l0aW9ucy5zZXQodGhpcy5fZG9jdW1lbnQse3Njcm9sbFBvc2l0aW9uOnRo''@;'; put 'put ''aXMuZ2V0Vmlld3BvcnRTY3JvbGxQb3NpdGlvbigpfSksbC5mb3JFYWNoKGE9Pnt0aGlzLnBvc2l0aW9ucy5zZXQoYSx7c2Nyb2xsUG9zaXRpb246e3RvcDphLnNjcm9sbFRvcCxsZWZ0OmEuc2Nyb2xsTGVmdH0sY2xpZW50UmVjdDpDWShhKX0pfSl9aGFuZGxlU2Nyb2xsKGwpe2NvbnN0IGE9''@;'; put 'put ''eEwobCksZD10aGlzLnBvc2l0aW9ucy5nZXQoYSk7aWYoIWQpcmV0dXJuIG51bGw7Y29uc3QgaD1kLnNjcm9sbFBvc2l0aW9uO2xldCBmLHY7aWYoYT09PXRoaXMuX2RvY3VtZW50KXtjb25zdCBaPXRoaXMuZ2V0Vmlld3BvcnRTY3JvbGxQb3NpdGlvbigpO2Y9Wi50b3Asdj1aLmxlZnR9ZWxz''@;'; put 'put ''ZSBmPWEuc2Nyb2xsVG9wLHY9YS5zY3JvbGxMZWZ0O2NvbnN0IE09aC50b3AtZixEPWgubGVmdC12O3JldHVybiB0aGlzLnBvc2l0aW9ucy5mb3JFYWNoKChaLHJlKT0+e1ouY2xpZW50UmVjdCYmYSE9PXJlJiZhLmNvbnRhaW5zKHJlKSYmRXgoWi5jbGllbnRSZWN0LE0sRCl9KSxoLnRvcD1m''@;'; put 'put ''LGgubGVmdD12LHt0b3A6TSxsZWZ0OkR9fWdldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKXtyZXR1cm57dG9wOndpbmRvdy5zY3JvbGxZLGxlZnQ6d2luZG93LnNjcm9sbFh9fX1mdW5jdGlvbiBlMWUoYyl7Y29uc3QgbD1jLmNsb25lTm9kZSghMCksYT1sLnF1ZXJ5U2VsZWN0b3JBbGwoIltp''@;'; put 'put ''ZF0iKSxkPWMubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtsLnJlbW92ZUF0dHJpYnV0ZSgiaWQiKTtmb3IobGV0IGg9MDtoPGEubGVuZ3RoO2grKylhW2hdLnJlbW92ZUF0dHJpYnV0ZSgiaWQiKTtyZXR1cm4iY2FudmFzIj09PWQ/cjFlKGMsbCk6KCJpbnB1dCI9PT1kfHwic2VsZWN0Ij09PWR8''@;'; put 'put ''fCJ0ZXh0YXJlYSI9PT1kKSYmbjFlKGMsbCksdDFlKCJjYW52YXMiLGMsbCxyMWUpLHQxZSgiaW5wdXQsIHRleHRhcmVhLCBzZWxlY3QiLGMsbCxuMWUpLGx9ZnVuY3Rpb24gdDFlKGMsbCxhLGQpe2NvbnN0IGg9bC5xdWVyeVNlbGVjdG9yQWxsKGMpO2lmKGgubGVuZ3RoKXtjb25zdCBmPWEu''@;'; put 'put ''cXVlcnlTZWxlY3RvckFsbChjKTtmb3IobGV0IHY9MDt2PGgubGVuZ3RoO3YrKylkKGhbdl0sZlt2XSl9fWxldCBMRmU9MDtmdW5jdGlvbiBuMWUoYyxsKXsiZmlsZSIhPT1sLnR5cGUmJihsLnZhbHVlPWMudmFsdWUpLCJyYWRpbyI9PT1sLnR5cGUmJmwubmFtZSYmKGwubmFtZT1gbWF0LWNs''@;'; put 'put ''b25lLSR7bC5uYW1lfS0ke0xGZSsrfWApfWZ1bmN0aW9uIHIxZShjLGwpe2NvbnN0IGE9bC5nZXRDb250ZXh0KCIyZCIpO2lmKGEpdHJ5e2EuZHJhd0ltYWdlKGMsMCwwKX1jYXRjaHt9fWZ1bmN0aW9uIGkxZShjLGwpe2NvbnN0IGE9Yy5yb290Tm9kZXM7aWYoMT09PWEubGVuZ3RoJiZhWzBd''@;'; put 'put ''Lm5vZGVUeXBlPT09bC5FTEVNRU5UX05PREUpcmV0dXJuIGFbMF07Y29uc3QgZD1sLmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiBhLmZvckVhY2goaD0+ZC5hcHBlbmRDaGlsZChoKSksZH1mdW5jdGlvbiBhMWUoYyl7Y29uc3QgbD1jLnRvTG93ZXJDYXNlKCkuaW5kZXhPZigibXMiKT4t''@;'; put 'put ''MT8xOjFlMztyZXR1cm4gcGFyc2VGbG9hdChjKSpsfWZ1bmN0aW9uIE1ZKGMsbCl7cmV0dXJuIGMuZ2V0UHJvcGVydHlWYWx1ZShsKS5zcGxpdCgiLCIpLm1hcChkPT5kLnRyaW0oKSl9Y29uc3QgUEZlPW5ldyBTZXQoWyJwb3NpdGlvbiJdKTtjbGFzcyBGRmV7Y29uc3RydWN0b3IobCxhLGQs''@;'; put 'put ''aCxmLHYsTSxELFope3RoaXMuX2RvY3VtZW50PWwsdGhpcy5fcm9vdEVsZW1lbnQ9YSx0aGlzLl9kaXJlY3Rpb249ZCx0aGlzLl9pbml0aWFsRG9tUmVjdD1oLHRoaXMuX3ByZXZpZXdUZW1wbGF0ZT1mLHRoaXMuX3ByZXZpZXdDbGFzcz12LHRoaXMuX3BpY2t1cFBvc2l0aW9uT25QYWdlPU0s''@;'; put 'put ''dGhpcy5faW5pdGlhbFRyYW5zZm9ybT1ELHRoaXMuX3pJbmRleD1afWF0dGFjaChsKXt0aGlzLl9wcmV2aWV3PXRoaXMuX2NyZWF0ZVByZXZpZXcoKSxsLmFwcGVuZENoaWxkKHRoaXMuX3ByZXZpZXcpLCJzaG93UG9wb3ZlciJpbiB0aGlzLl9wcmV2aWV3JiZ0aGlzLl9wcmV2aWV3LnNob3dQ''@;'; put 'put ''b3BvdmVyKCl9ZGVzdHJveSgpe3RoaXMuX3ByZXZpZXcucmVtb3ZlKCksdGhpcy5fcHJldmlld0VtYmVkZGVkVmlldz8uZGVzdHJveSgpLHRoaXMuX3ByZXZpZXc9dGhpcy5fcHJldmlld0VtYmVkZGVkVmlldz1udWxsfXNldFRyYW5zZm9ybShsKXt0aGlzLl9wcmV2aWV3LnN0eWxlLnRyYW5z''@;'; put 'put ''Zm9ybT1sfWdldEJvdW5kaW5nQ2xpZW50UmVjdCgpe3JldHVybiB0aGlzLl9wcmV2aWV3LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpfWFkZENsYXNzKGwpe3RoaXMuX3ByZXZpZXcuY2xhc3NMaXN0LmFkZChsKX1nZXRUcmFuc2l0aW9uRHVyYXRpb24oKXtyZXR1cm4gZnVuY3Rpb24gT0ZlKGMp''@;'; put 'put ''e2NvbnN0IGw9Z2V0Q29tcHV0ZWRTdHlsZShjKSxhPU1ZKGwsInRyYW5zaXRpb24tcHJvcGVydHkiKSxkPWEuZmluZChNPT4idHJhbnNmb3JtIj09PU18fCJhbGwiPT09TSk7aWYoIWQpcmV0dXJuIDA7Y29uc3QgaD1hLmluZGV4T2YoZCksZj1NWShsLCJ0cmFuc2l0aW9uLWR1cmF0aW9uIiks''@;'; put 'put ''dj1NWShsLCJ0cmFuc2l0aW9uLWRlbGF5Iik7cmV0dXJuIGExZShmW2hdKSthMWUodltoXSl9KHRoaXMuX3ByZXZpZXcpfWFkZEV2ZW50TGlzdGVuZXIobCxhKXt0aGlzLl9wcmV2aWV3LmFkZEV2ZW50TGlzdGVuZXIobCxhKX1yZW1vdmVFdmVudExpc3RlbmVyKGwsYSl7dGhpcy5fcHJldmll''@;'; put 'put ''dy5yZW1vdmVFdmVudExpc3RlbmVyKGwsYSl9X2NyZWF0ZVByZXZpZXcoKXtjb25zdCBsPXRoaXMuX3ByZXZpZXdUZW1wbGF0ZSxhPXRoaXMuX3ByZXZpZXdDbGFzcyxkPWw/bC50ZW1wbGF0ZTpudWxsO2xldCBoO2lmKGQmJmwpe2NvbnN0IGY9bC5tYXRjaFNpemU/dGhpcy5faW5pdGlhbERv''@;'; put 'put ''bVJlY3Q6bnVsbCx2PWwudmlld0NvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcoZCxsLmNvbnRleHQpO3YuZGV0ZWN0Q2hhbmdlcygpLGg9aTFlKHYsdGhpcy5fZG9jdW1lbnQpLHRoaXMuX3ByZXZpZXdFbWJlZGRlZFZpZXc9dixsLm1hdGNoU2l6ZT9YMGUoaCxmKTpoLnN0eWxlLnRyYW5z''@;'; put 'put ''Zm9ybT1JTCh0aGlzLl9waWNrdXBQb3NpdGlvbk9uUGFnZS54LHRoaXMuX3BpY2t1cFBvc2l0aW9uT25QYWdlLnkpfWVsc2UgaD1lMWUodGhpcy5fcm9vdEVsZW1lbnQpLFgwZShoLHRoaXMuX2luaXRpYWxEb21SZWN0KSx0aGlzLl9pbml0aWFsVHJhbnNmb3JtJiYoaC5zdHlsZS50cmFuc2Zv''@;'; put 'put ''cm09dGhpcy5faW5pdGlhbFRyYW5zZm9ybSk7cmV0dXJuIHdZKGguc3R5bGUseyJwb2ludGVyLWV2ZW50cyI6Im5vbmUiLG1hcmdpbjoiMCIscG9zaXRpb246ImZpeGVkIix0b3A6IjAiLGxlZnQ6IjAiLCJ6LWluZGV4Ijp0aGlzLl96SW5kZXgrIiJ9LFBGZSksSXkoaCwhMSksaC5jbGFzc0xp''@;'; put 'put ''c3QuYWRkKCJjZGstZHJhZy1wcmV2aWV3IiksaC5zZXRBdHRyaWJ1dGUoInBvcG92ZXIiLCJtYW51YWwiKSxoLnNldEF0dHJpYnV0ZSgiZGlyIix0aGlzLl9kaXJlY3Rpb24pLGEmJihBcnJheS5pc0FycmF5KGEpP2EuZm9yRWFjaChmPT5oLmNsYXNzTGlzdC5hZGQoZikpOmguY2xhc3NMaXN0''@;'; put 'put ''LmFkZChhKSksaH19Y29uc3QgbzFlPUF5KHtwYXNzaXZlOiEwfSksUkw9QXkoe3Bhc3NpdmU6ITF9KSxzMWU9QXkoe3Bhc3NpdmU6ITEsY2FwdHVyZTohMH0pLGwxZT1uZXcgU2V0KFsicG9zaXRpb24iXSk7Y2xhc3MgTkZle2dldCBkaXNhYmxlZCgpe3JldHVybiB0aGlzLl9kaXNhYmxlZHx8''@;'; put 'put ''ISghdGhpcy5fZHJvcENvbnRhaW5lcnx8IXRoaXMuX2Ryb3BDb250YWluZXIuZGlzYWJsZWQpfXNldCBkaXNhYmxlZChsKXtsIT09dGhpcy5fZGlzYWJsZWQmJih0aGlzLl9kaXNhYmxlZD1sLHRoaXMuX3RvZ2dsZU5hdGl2ZURyYWdJbnRlcmFjdGlvbnMoKSx0aGlzLl9oYW5kbGVzLmZvckVh''@;'; put 'put ''Y2goYT0+SXkoYSxsKSkpfWNvbnN0cnVjdG9yKGwsYSxkLGgsZix2KXt0aGlzLl9jb25maWc9YSx0aGlzLl9kb2N1bWVudD1kLHRoaXMuX25nWm9uZT1oLHRoaXMuX3ZpZXdwb3J0UnVsZXI9Zix0aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5PXYsdGhpcy5fcGFzc2l2ZVRyYW5zZm9ybT17eDowLHk6''@;'; put 'put ''MH0sdGhpcy5fYWN0aXZlVHJhbnNmb3JtPXt4OjAseTowfSx0aGlzLl9oYXNTdGFydGVkRHJhZ2dpbmc9ITEsdGhpcy5fbW92ZUV2ZW50cz1uZXcgV24sdGhpcy5fcG9pbnRlck1vdmVTdWJzY3JpcHRpb249cXQuRU1QVFksdGhpcy5fcG9pbnRlclVwU3Vic2NyaXB0aW9uPXF0LkVNUFRZLHRo''@;'; put 'put ''aXMuX3Njcm9sbFN1YnNjcmlwdGlvbj1xdC5FTVBUWSx0aGlzLl9yZXNpemVTdWJzY3JpcHRpb249cXQuRU1QVFksdGhpcy5fYm91bmRhcnlFbGVtZW50PW51bGwsdGhpcy5fbmF0aXZlSW50ZXJhY3Rpb25zRW5hYmxlZD0hMCx0aGlzLl9oYW5kbGVzPVtdLHRoaXMuX2Rpc2FibGVkSGFuZGxl''@;'; put 'put ''cz1uZXcgU2V0LHRoaXMuX2RpcmVjdGlvbj0ibHRyIix0aGlzLmRyYWdTdGFydERlbGF5PTAsdGhpcy5fZGlzYWJsZWQ9ITEsdGhpcy5iZWZvcmVTdGFydGVkPW5ldyBXbix0aGlzLnN0YXJ0ZWQ9bmV3IFduLHRoaXMucmVsZWFzZWQ9bmV3IFduLHRoaXMuZW5kZWQ9bmV3IFduLHRoaXMuZW50''@;'; put 'put ''ZXJlZD1uZXcgV24sdGhpcy5leGl0ZWQ9bmV3IFduLHRoaXMuZHJvcHBlZD1uZXcgV24sdGhpcy5tb3ZlZD10aGlzLl9tb3ZlRXZlbnRzLHRoaXMuX3BvaW50ZXJEb3duPU09PntpZih0aGlzLmJlZm9yZVN0YXJ0ZWQubmV4dCgpLHRoaXMuX2hhbmRsZXMubGVuZ3RoKXtjb25zdCBEPXRoaXMu''@;'; put 'put ''X2dldFRhcmdldEhhbmRsZShNKTtEJiYhdGhpcy5fZGlzYWJsZWRIYW5kbGVzLmhhcyhEKSYmIXRoaXMuZGlzYWJsZWQmJnRoaXMuX2luaXRpYWxpemVEcmFnU2VxdWVuY2UoRCxNKX1lbHNlIHRoaXMuZGlzYWJsZWR8fHRoaXMuX2luaXRpYWxpemVEcmFnU2VxdWVuY2UodGhpcy5fcm9vdEVs''@;'; put 'put ''ZW1lbnQsTSl9LHRoaXMuX3BvaW50ZXJNb3ZlPU09Pntjb25zdCBEPXRoaXMuX2dldFBvaW50ZXJQb3NpdGlvbk9uUGFnZShNKTtpZighdGhpcy5faGFzU3RhcnRlZERyYWdnaW5nKXtpZihNYXRoLmFicyhELngtdGhpcy5fcGlja3VwUG9zaXRpb25PblBhZ2UueCkrTWF0aC5hYnMoRC55LXRo''@;'; put 'put ''aXMuX3BpY2t1cFBvc2l0aW9uT25QYWdlLnkpPj10aGlzLl9jb25maWcuZHJhZ1N0YXJ0VGhyZXNob2xkKXtjb25zdCBFZT1EYXRlLm5vdygpPj10aGlzLl9kcmFnU3RhcnRUaW1lK3RoaXMuX2dldERyYWdTdGFydERlbGF5KE0pLEJlPXRoaXMuX2Ryb3BDb250YWluZXI7aWYoIUVlKXJldHVy''@;'; put 'put ''biB2b2lkIHRoaXMuX2VuZERyYWdTZXF1ZW5jZShNKTsoIUJlfHwhQmUuaXNEcmFnZ2luZygpJiYhQmUuaXNSZWNlaXZpbmcoKSkmJihNLmNhbmNlbGFibGUmJk0ucHJldmVudERlZmF1bHQoKSx0aGlzLl9oYXNTdGFydGVkRHJhZ2dpbmc9ITAsdGhpcy5fbmdab25lLnJ1bigoKT0+dGhpcy5f''@;'; put 'put ''c3RhcnREcmFnU2VxdWVuY2UoTSkpKX1yZXR1cm59TS5jYW5jZWxhYmxlJiZNLnByZXZlbnREZWZhdWx0KCk7Y29uc3QgWj10aGlzLl9nZXRDb25zdHJhaW5lZFBvaW50ZXJQb3NpdGlvbihEKTtpZih0aGlzLl9oYXNNb3ZlZD0hMCx0aGlzLl9sYXN0S25vd25Qb2ludGVyUG9zaXRpb249RCx0''@;'; put 'put ''aGlzLl91cGRhdGVQb2ludGVyRGlyZWN0aW9uRGVsdGEoWiksdGhpcy5fZHJvcENvbnRhaW5lcil0aGlzLl91cGRhdGVBY3RpdmVEcm9wQ29udGFpbmVyKFosRCk7ZWxzZXtjb25zdCByZT10aGlzLmNvbnN0cmFpblBvc2l0aW9uP3RoaXMuX2luaXRpYWxEb21SZWN0OnRoaXMuX3BpY2t1cFBv''@;'; put 'put ''c2l0aW9uT25QYWdlLGNlPXRoaXMuX2FjdGl2ZVRyYW5zZm9ybTtjZS54PVoueC1yZS54K3RoaXMuX3Bhc3NpdmVUcmFuc2Zvcm0ueCxjZS55PVoueS1yZS55K3RoaXMuX3Bhc3NpdmVUcmFuc2Zvcm0ueSx0aGlzLl9hcHBseVJvb3RFbGVtZW50VHJhbnNmb3JtKGNlLngsY2UueSl9dGhpcy5f''@;'; put 'put ''bW92ZUV2ZW50cy5vYnNlcnZlcnMubGVuZ3RoJiZ0aGlzLl9uZ1pvbmUucnVuKCgpPT57dGhpcy5fbW92ZUV2ZW50cy5uZXh0KHtzb3VyY2U6dGhpcyxwb2ludGVyUG9zaXRpb246WixldmVudDpNLGRpc3RhbmNlOnRoaXMuX2dldERyYWdEaXN0YW5jZShaKSxkZWx0YTp0aGlzLl9wb2ludGVy''@;'; put 'put ''RGlyZWN0aW9uRGVsdGF9KX0pfSx0aGlzLl9wb2ludGVyVXA9TT0+e3RoaXMuX2VuZERyYWdTZXF1ZW5jZShNKX0sdGhpcy5fbmF0aXZlRHJhZ1N0YXJ0PU09PntpZih0aGlzLl9oYW5kbGVzLmxlbmd0aCl7Y29uc3QgRD10aGlzLl9nZXRUYXJnZXRIYW5kbGUoTSk7RCYmIXRoaXMuX2Rpc2Fi''@;'; put 'put ''bGVkSGFuZGxlcy5oYXMoRCkmJiF0aGlzLmRpc2FibGVkJiZNLnByZXZlbnREZWZhdWx0KCl9ZWxzZSB0aGlzLmRpc2FibGVkfHxNLnByZXZlbnREZWZhdWx0KCl9LHRoaXMud2l0aFJvb3RFbGVtZW50KGwpLndpdGhQYXJlbnQoYS5wYXJlbnREcmFnUmVmfHxudWxsKSx0aGlzLl9wYXJlbnRQ''@;'; put 'put ''b3NpdGlvbnM9bmV3IFEwZShkKSx2LnJlZ2lzdGVyRHJhZ0l0ZW0odGhpcyl9Z2V0UGxhY2Vob2xkZXJFbGVtZW50KCl7cmV0dXJuIHRoaXMuX3BsYWNlaG9sZGVyfWdldFJvb3RFbGVtZW50KCl7cmV0dXJuIHRoaXMuX3Jvb3RFbGVtZW50fWdldFZpc2libGVFbGVtZW50KCl7cmV0dXJuIHRo''@;'; put 'put ''aXMuaXNEcmFnZ2luZygpP3RoaXMuZ2V0UGxhY2Vob2xkZXJFbGVtZW50KCk6dGhpcy5nZXRSb290RWxlbWVudCgpfXdpdGhIYW5kbGVzKGwpe3RoaXMuX2hhbmRsZXM9bC5tYXAoZD0+RWQoZCkpLHRoaXMuX2hhbmRsZXMuZm9yRWFjaChkPT5JeShkLHRoaXMuZGlzYWJsZWQpKSx0aGlzLl90''@;'; put 'put ''b2dnbGVOYXRpdmVEcmFnSW50ZXJhY3Rpb25zKCk7Y29uc3QgYT1uZXcgU2V0O3JldHVybiB0aGlzLl9kaXNhYmxlZEhhbmRsZXMuZm9yRWFjaChkPT57dGhpcy5faGFuZGxlcy5pbmRleE9mKGQpPi0xJiZhLmFkZChkKX0pLHRoaXMuX2Rpc2FibGVkSGFuZGxlcz1hLHRoaXN9d2l0aFByZXZp''@;'; put 'put ''ZXdUZW1wbGF0ZShsKXtyZXR1cm4gdGhpcy5fcHJldmlld1RlbXBsYXRlPWwsdGhpc313aXRoUGxhY2Vob2xkZXJUZW1wbGF0ZShsKXtyZXR1cm4gdGhpcy5fcGxhY2Vob2xkZXJUZW1wbGF0ZT1sLHRoaXN9d2l0aFJvb3RFbGVtZW50KGwpe2NvbnN0IGE9RWQobCk7cmV0dXJuIGEhPT10aGlz''@;'; put 'put ''Ll9yb290RWxlbWVudCYmKHRoaXMuX3Jvb3RFbGVtZW50JiZ0aGlzLl9yZW1vdmVSb290RWxlbWVudExpc3RlbmVycyh0aGlzLl9yb290RWxlbWVudCksdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57YS5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLHRoaXMuX3BvaW50''@;'; put 'put ''ZXJEb3duLFJMKSxhLmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLHRoaXMuX3BvaW50ZXJEb3duLG8xZSksYS5hZGRFdmVudExpc3RlbmVyKCJkcmFnc3RhcnQiLHRoaXMuX25hdGl2ZURyYWdTdGFydCxSTCl9KSx0aGlzLl9pbml0aWFsVHJhbnNmb3JtPXZvaWQgMCx0aGlzLl9yb290''@;'; put 'put ''RWxlbWVudD1hKSx0eXBlb2YgU1ZHRWxlbWVudDwidSImJnRoaXMuX3Jvb3RFbGVtZW50IGluc3RhbmNlb2YgU1ZHRWxlbWVudCYmKHRoaXMuX293bmVyU1ZHRWxlbWVudD10aGlzLl9yb290RWxlbWVudC5vd25lclNWR0VsZW1lbnQpLHRoaXN9d2l0aEJvdW5kYXJ5RWxlbWVudChsKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5fYm91bmRhcnlFbGVtZW50PWw/RWQobCk6bnVsbCx0aGlzLl9yZXNpemVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSxsJiYodGhpcy5fcmVzaXplU3Vic2NyaXB0aW9uPXRoaXMuX3ZpZXdwb3J0UnVsZXIuY2hhbmdlKDEwKS5zdWJzY3JpYmUoKCk9PnRoaXMuX2NvbnRhaW5J''@;'; put 'put ''bnNpZGVCb3VuZGFyeU9uUmVzaXplKCkpKSx0aGlzfXdpdGhQYXJlbnQobCl7cmV0dXJuIHRoaXMuX3BhcmVudERyYWdSZWY9bCx0aGlzfWRpc3Bvc2UoKXt0aGlzLl9yZW1vdmVSb290RWxlbWVudExpc3RlbmVycyh0aGlzLl9yb290RWxlbWVudCksdGhpcy5pc0RyYWdnaW5nKCkmJnRoaXMu''@;'; put 'put ''X3Jvb3RFbGVtZW50Py5yZW1vdmUoKSx0aGlzLl9hbmNob3I/LnJlbW92ZSgpLHRoaXMuX2Rlc3Ryb3lQcmV2aWV3KCksdGhpcy5fZGVzdHJveVBsYWNlaG9sZGVyKCksdGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeS5yZW1vdmVEcmFnSXRlbSh0aGlzKSx0aGlzLl9yZW1vdmVMaXN0ZW5lcnMoKSx0''@;'; put 'put ''aGlzLmJlZm9yZVN0YXJ0ZWQuY29tcGxldGUoKSx0aGlzLnN0YXJ0ZWQuY29tcGxldGUoKSx0aGlzLnJlbGVhc2VkLmNvbXBsZXRlKCksdGhpcy5lbmRlZC5jb21wbGV0ZSgpLHRoaXMuZW50ZXJlZC5jb21wbGV0ZSgpLHRoaXMuZXhpdGVkLmNvbXBsZXRlKCksdGhpcy5kcm9wcGVkLmNvbXBs''@;'; put 'put ''ZXRlKCksdGhpcy5fbW92ZUV2ZW50cy5jb21wbGV0ZSgpLHRoaXMuX2hhbmRsZXM9W10sdGhpcy5fZGlzYWJsZWRIYW5kbGVzLmNsZWFyKCksdGhpcy5fZHJvcENvbnRhaW5lcj12b2lkIDAsdGhpcy5fcmVzaXplU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fcGFyZW50UG9zaXRp''@;'; put 'put ''b25zLmNsZWFyKCksdGhpcy5fYm91bmRhcnlFbGVtZW50PXRoaXMuX3Jvb3RFbGVtZW50PXRoaXMuX293bmVyU1ZHRWxlbWVudD10aGlzLl9wbGFjZWhvbGRlclRlbXBsYXRlPXRoaXMuX3ByZXZpZXdUZW1wbGF0ZT10aGlzLl9hbmNob3I9dGhpcy5fcGFyZW50RHJhZ1JlZj1udWxsfWlzRHJh''@;'; put 'put ''Z2dpbmcoKXtyZXR1cm4gdGhpcy5faGFzU3RhcnRlZERyYWdnaW5nJiZ0aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5LmlzRHJhZ2dpbmcodGhpcyl9cmVzZXQoKXt0aGlzLl9yb290RWxlbWVudC5zdHlsZS50cmFuc2Zvcm09dGhpcy5faW5pdGlhbFRyYW5zZm9ybXx8IiIsdGhpcy5fYWN0aXZlVHJh''@;'; put 'put ''bnNmb3JtPXt4OjAseTowfSx0aGlzLl9wYXNzaXZlVHJhbnNmb3JtPXt4OjAseTowfX1kaXNhYmxlSGFuZGxlKGwpeyF0aGlzLl9kaXNhYmxlZEhhbmRsZXMuaGFzKGwpJiZ0aGlzLl9oYW5kbGVzLmluZGV4T2YobCk+LTEmJih0aGlzLl9kaXNhYmxlZEhhbmRsZXMuYWRkKGwpLEl5KGwsITAp''@;'; put 'put ''KX1lbmFibGVIYW5kbGUobCl7dGhpcy5fZGlzYWJsZWRIYW5kbGVzLmhhcyhsKSYmKHRoaXMuX2Rpc2FibGVkSGFuZGxlcy5kZWxldGUobCksSXkobCx0aGlzLmRpc2FibGVkKSl9d2l0aERpcmVjdGlvbihsKXtyZXR1cm4gdGhpcy5fZGlyZWN0aW9uPWwsdGhpc31fd2l0aERyb3BDb250YWlu''@;'; put 'put ''ZXIobCl7dGhpcy5fZHJvcENvbnRhaW5lcj1sfWdldEZyZWVEcmFnUG9zaXRpb24oKXtjb25zdCBsPXRoaXMuaXNEcmFnZ2luZygpP3RoaXMuX2FjdGl2ZVRyYW5zZm9ybTp0aGlzLl9wYXNzaXZlVHJhbnNmb3JtO3JldHVybnt4OmwueCx5OmwueX19c2V0RnJlZURyYWdQb3NpdGlvbihsKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5fYWN0aXZlVHJhbnNmb3JtPXt4OjAseTowfSx0aGlzLl9wYXNzaXZlVHJhbnNmb3JtLng9bC54LHRoaXMuX3Bhc3NpdmVUcmFuc2Zvcm0ueT1sLnksdGhpcy5fZHJvcENvbnRhaW5lcnx8dGhpcy5fYXBwbHlSb290RWxlbWVudFRyYW5zZm9ybShsLngsbC55KSx0aGlzfXdp''@;'; put 'put ''dGhQcmV2aWV3Q29udGFpbmVyKGwpe3JldHVybiB0aGlzLl9wcmV2aWV3Q29udGFpbmVyPWwsdGhpc31fc29ydEZyb21MYXN0UG9pbnRlclBvc2l0aW9uKCl7Y29uc3QgbD10aGlzLl9sYXN0S25vd25Qb2ludGVyUG9zaXRpb247bCYmdGhpcy5fZHJvcENvbnRhaW5lciYmdGhpcy5fdXBkYXRl''@;'; put 'put ''QWN0aXZlRHJvcENvbnRhaW5lcih0aGlzLl9nZXRDb25zdHJhaW5lZFBvaW50ZXJQb3NpdGlvbihsKSxsKX1fcmVtb3ZlTGlzdGVuZXJzKCl7dGhpcy5fcG9pbnRlck1vdmVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9wb2ludGVyVXBTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUo''@;'; put 'put ''KSx0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9nZXRTaGFkb3dSb290KCk/LnJlbW92ZUV2ZW50TGlzdGVuZXIoInNlbGVjdHN0YXJ0Iix1MWUsczFlKX1fZGVzdHJveVByZXZpZXcoKXt0aGlzLl9wcmV2aWV3Py5kZXN0cm95KCksdGhpcy5fcHJldmlldz1u''@;'; put 'put ''dWxsfV9kZXN0cm95UGxhY2Vob2xkZXIoKXt0aGlzLl9wbGFjZWhvbGRlcj8ucmVtb3ZlKCksdGhpcy5fcGxhY2Vob2xkZXJSZWY/LmRlc3Ryb3koKSx0aGlzLl9wbGFjZWhvbGRlcj10aGlzLl9wbGFjZWhvbGRlclJlZj1udWxsfV9lbmREcmFnU2VxdWVuY2UobCl7aWYodGhpcy5fZHJhZ0Ry''@;'; put 'put ''b3BSZWdpc3RyeS5pc0RyYWdnaW5nKHRoaXMpJiYodGhpcy5fcmVtb3ZlTGlzdGVuZXJzKCksdGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeS5zdG9wRHJhZ2dpbmcodGhpcyksdGhpcy5fdG9nZ2xlTmF0aXZlRHJhZ0ludGVyYWN0aW9ucygpLHRoaXMuX2hhbmRsZXMmJih0aGlzLl9yb290RWxlbWVu''@;'; put 'put ''dC5zdHlsZS53ZWJraXRUYXBIaWdobGlnaHRDb2xvcj10aGlzLl9yb290RWxlbWVudFRhcEhpZ2hsaWdodCksdGhpcy5faGFzU3RhcnRlZERyYWdnaW5nKSlpZih0aGlzLnJlbGVhc2VkLm5leHQoe3NvdXJjZTp0aGlzLGV2ZW50Omx9KSx0aGlzLl9kcm9wQ29udGFpbmVyKXRoaXMuX2Ryb3BD''@;'; put 'put ''b250YWluZXIuX3N0b3BTY3JvbGxpbmcoKSx0aGlzLl9hbmltYXRlUHJldmlld1RvUGxhY2Vob2xkZXIoKS50aGVuKCgpPT57dGhpcy5fY2xlYW51cERyYWdBcnRpZmFjdHMobCksdGhpcy5fY2xlYW51cENhY2hlZERpbWVuc2lvbnMoKSx0aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5LnN0b3BEcmFn''@;'; put 'put ''Z2luZyh0aGlzKX0pO2Vsc2V7dGhpcy5fcGFzc2l2ZVRyYW5zZm9ybS54PXRoaXMuX2FjdGl2ZVRyYW5zZm9ybS54O2NvbnN0IGE9dGhpcy5fZ2V0UG9pbnRlclBvc2l0aW9uT25QYWdlKGwpO3RoaXMuX3Bhc3NpdmVUcmFuc2Zvcm0ueT10aGlzLl9hY3RpdmVUcmFuc2Zvcm0ueSx0aGlzLl9u''@;'; put 'put ''Z1pvbmUucnVuKCgpPT57dGhpcy5lbmRlZC5uZXh0KHtzb3VyY2U6dGhpcyxkaXN0YW5jZTp0aGlzLl9nZXREcmFnRGlzdGFuY2UoYSksZHJvcFBvaW50OmEsZXZlbnQ6bH0pfSksdGhpcy5fY2xlYW51cENhY2hlZERpbWVuc2lvbnMoKSx0aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5LnN0b3BEcmFn''@;'; put 'put ''Z2luZyh0aGlzKX19X3N0YXJ0RHJhZ1NlcXVlbmNlKGwpe1R4KGwpJiYodGhpcy5fbGFzdFRvdWNoRXZlbnRUaW1lPURhdGUubm93KCkpLHRoaXMuX3RvZ2dsZU5hdGl2ZURyYWdJbnRlcmFjdGlvbnMoKTtjb25zdCBhPXRoaXMuX2dldFNoYWRvd1Jvb3QoKSxkPXRoaXMuX2Ryb3BDb250YWlu''@;'; put 'put ''ZXI7aWYoYSYmdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57YS5hZGRFdmVudExpc3RlbmVyKCJzZWxlY3RzdGFydCIsdTFlLHMxZSl9KSxkKXtjb25zdCBoPXRoaXMuX3Jvb3RFbGVtZW50LGY9aC5wYXJlbnROb2RlLHY9dGhpcy5fcGxhY2Vob2xkZXI9dGhpcy5fY3JlYXRl''@;'; put 'put ''UGxhY2Vob2xkZXJFbGVtZW50KCksTT10aGlzLl9hbmNob3I9dGhpcy5fYW5jaG9yfHx0aGlzLl9kb2N1bWVudC5jcmVhdGVDb21tZW50KCIiKTtmLmluc2VydEJlZm9yZShNLGgpLHRoaXMuX2luaXRpYWxUcmFuc2Zvcm09aC5zdHlsZS50cmFuc2Zvcm18fCIiLHRoaXMuX3ByZXZpZXc9bmV3''@;'; put 'put ''IEZGZSh0aGlzLl9kb2N1bWVudCx0aGlzLl9yb290RWxlbWVudCx0aGlzLl9kaXJlY3Rpb24sdGhpcy5faW5pdGlhbERvbVJlY3QsdGhpcy5fcHJldmlld1RlbXBsYXRlfHxudWxsLHRoaXMucHJldmlld0NsYXNzfHxudWxsLHRoaXMuX3BpY2t1cFBvc2l0aW9uT25QYWdlLHRoaXMuX2luaXRp''@;'; put 'put ''YWxUcmFuc2Zvcm0sdGhpcy5fY29uZmlnLnpJbmRleHx8MWUzKSx0aGlzLl9wcmV2aWV3LmF0dGFjaCh0aGlzLl9nZXRQcmV2aWV3SW5zZXJ0aW9uUG9pbnQoZixhKSkscTBlKGgsITEsbDFlKSx0aGlzLl9kb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGYucmVwbGFjZUNoaWxkKHYsaCkpLHRo''@;'; put 'put ''aXMuc3RhcnRlZC5uZXh0KHtzb3VyY2U6dGhpcyxldmVudDpsfSksZC5zdGFydCgpLHRoaXMuX2luaXRpYWxDb250YWluZXI9ZCx0aGlzLl9pbml0aWFsSW5kZXg9ZC5nZXRJdGVtSW5kZXgodGhpcyl9ZWxzZSB0aGlzLnN0YXJ0ZWQubmV4dCh7c291cmNlOnRoaXMsZXZlbnQ6bH0pLHRoaXMu''@;'; put 'put ''X2luaXRpYWxDb250YWluZXI9dGhpcy5faW5pdGlhbEluZGV4PXZvaWQgMDt0aGlzLl9wYXJlbnRQb3NpdGlvbnMuY2FjaGUoZD9kLmdldFNjcm9sbGFibGVQYXJlbnRzKCk6W10pfV9pbml0aWFsaXplRHJhZ1NlcXVlbmNlKGwsYSl7dGhpcy5fcGFyZW50RHJhZ1JlZiYmYS5zdG9wUHJvcGFn''@;'; put 'put ''YXRpb24oKTtjb25zdCBkPXRoaXMuaXNEcmFnZ2luZygpLGg9VHgoYSksZj0haCYmMCE9PWEuYnV0dG9uLHY9dGhpcy5fcm9vdEVsZW1lbnQsTT14TChhKSxEPSFoJiZ0aGlzLl9sYXN0VG91Y2hFdmVudFRpbWUmJnRoaXMuX2xhc3RUb3VjaEV2ZW50VGltZSs4MDA+RGF0ZS5ub3coKSxaPWg/''@;'; put 'put ''ZnVuY3Rpb24gUVBlKGMpe2NvbnN0IGw9Yy50b3VjaGVzJiZjLnRvdWNoZXNbMF18fGMuY2hhbmdlZFRvdWNoZXMmJmMuY2hhbmdlZFRvdWNoZXNbMF07cmV0dXJuISghbHx8LTEhPT1sLmlkZW50aWZpZXJ8fG51bGwhPWwucmFkaXVzWCYmMSE9PWwucmFkaXVzWHx8bnVsbCE9bC5yYWRpdXNZ''@;'; put 'put ''JiYxIT09bC5yYWRpdXNZKX0oYSk6ZnVuY3Rpb24gSlBlKGMpe3JldHVybiAwPT09Yy5idXR0b25zfHwwPT09Yy5kZXRhaWx9KGEpO2lmKE0mJk0uZHJhZ2dhYmxlJiYibW91c2Vkb3duIj09PWEudHlwZSYmYS5wcmV2ZW50RGVmYXVsdCgpLGR8fGZ8fER8fFopcmV0dXJuO2lmKHRoaXMuX2hh''@;'; put 'put ''bmRsZXMubGVuZ3RoKXtjb25zdCBiZT12LnN0eWxlO3RoaXMuX3Jvb3RFbGVtZW50VGFwSGlnaGxpZ2h0PWJlLndlYmtpdFRhcEhpZ2hsaWdodENvbG9yfHwiIixiZS53ZWJraXRUYXBIaWdobGlnaHRDb2xvcj0idHJhbnNwYXJlbnQifXRoaXMuX2hhc1N0YXJ0ZWREcmFnZ2luZz10aGlzLl9o''@;'; put 'put ''YXNNb3ZlZD0hMSx0aGlzLl9yZW1vdmVMaXN0ZW5lcnMoKSx0aGlzLl9pbml0aWFsRG9tUmVjdD10aGlzLl9yb290RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx0aGlzLl9wb2ludGVyTW92ZVN1YnNjcmlwdGlvbj10aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5LnBvaW50ZXJNb3ZlLnN1''@;'; put 'put ''YnNjcmliZSh0aGlzLl9wb2ludGVyTW92ZSksdGhpcy5fcG9pbnRlclVwU3Vic2NyaXB0aW9uPXRoaXMuX2RyYWdEcm9wUmVnaXN0cnkucG9pbnRlclVwLnN1YnNjcmliZSh0aGlzLl9wb2ludGVyVXApLHRoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbj10aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5LnNj''@;'; put 'put ''cm9sbGVkKHRoaXMuX2dldFNoYWRvd1Jvb3QoKSkuc3Vic2NyaWJlKGJlPT50aGlzLl91cGRhdGVPblNjcm9sbChiZSkpLHRoaXMuX2JvdW5kYXJ5RWxlbWVudCYmKHRoaXMuX2JvdW5kYXJ5UmVjdD1DWSh0aGlzLl9ib3VuZGFyeUVsZW1lbnQpKTtjb25zdCByZT10aGlzLl9wcmV2aWV3VGVt''@;'; put 'put ''cGxhdGU7dGhpcy5fcGlja3VwUG9zaXRpb25JbkVsZW1lbnQ9cmUmJnJlLnRlbXBsYXRlJiYhcmUubWF0Y2hTaXplP3t4OjAseTowfTp0aGlzLl9nZXRQb2ludGVyUG9zaXRpb25JbkVsZW1lbnQodGhpcy5faW5pdGlhbERvbVJlY3QsbCxhKTtjb25zdCBjZT10aGlzLl9waWNrdXBQb3NpdGlv''@;'; put 'put ''bk9uUGFnZT10aGlzLl9sYXN0S25vd25Qb2ludGVyUG9zaXRpb249dGhpcy5fZ2V0UG9pbnRlclBvc2l0aW9uT25QYWdlKGEpO3RoaXMuX3BvaW50ZXJEaXJlY3Rpb25EZWx0YT17eDowLHk6MH0sdGhpcy5fcG9pbnRlclBvc2l0aW9uQXRMYXN0RGlyZWN0aW9uQ2hhbmdlPXt4OmNlLngseTpj''@;'; put 'put ''ZS55fSx0aGlzLl9kcmFnU3RhcnRUaW1lPURhdGUubm93KCksdGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeS5zdGFydERyYWdnaW5nKHRoaXMsYSl9X2NsZWFudXBEcmFnQXJ0aWZhY3RzKGwpe3EwZSh0aGlzLl9yb290RWxlbWVudCwhMCxsMWUpLHRoaXMuX2FuY2hvci5wYXJlbnROb2RlLnJlcGxh''@;'; put 'put ''Y2VDaGlsZCh0aGlzLl9yb290RWxlbWVudCx0aGlzLl9hbmNob3IpLHRoaXMuX2Rlc3Ryb3lQcmV2aWV3KCksdGhpcy5fZGVzdHJveVBsYWNlaG9sZGVyKCksdGhpcy5faW5pdGlhbERvbVJlY3Q9dGhpcy5fYm91bmRhcnlSZWN0PXRoaXMuX3ByZXZpZXdSZWN0PXRoaXMuX2luaXRpYWxUcmFu''@;'; put 'put ''c2Zvcm09dm9pZCAwLHRoaXMuX25nWm9uZS5ydW4oKCk9Pntjb25zdCBhPXRoaXMuX2Ryb3BDb250YWluZXIsZD1hLmdldEl0ZW1JbmRleCh0aGlzKSxoPXRoaXMuX2dldFBvaW50ZXJQb3NpdGlvbk9uUGFnZShsKSxmPXRoaXMuX2dldERyYWdEaXN0YW5jZShoKSx2PWEuX2lzT3ZlckNvbnRh''@;'; put 'put ''aW5lcihoLngsaC55KTt0aGlzLmVuZGVkLm5leHQoe3NvdXJjZTp0aGlzLGRpc3RhbmNlOmYsZHJvcFBvaW50OmgsZXZlbnQ6bH0pLHRoaXMuZHJvcHBlZC5uZXh0KHtpdGVtOnRoaXMsY3VycmVudEluZGV4OmQscHJldmlvdXNJbmRleDp0aGlzLl9pbml0aWFsSW5kZXgsY29udGFpbmVyOmEs''@;'; put 'put ''cHJldmlvdXNDb250YWluZXI6dGhpcy5faW5pdGlhbENvbnRhaW5lcixpc1BvaW50ZXJPdmVyQ29udGFpbmVyOnYsZGlzdGFuY2U6Zixkcm9wUG9pbnQ6aCxldmVudDpsfSksYS5kcm9wKHRoaXMsZCx0aGlzLl9pbml0aWFsSW5kZXgsdGhpcy5faW5pdGlhbENvbnRhaW5lcix2LGYsaCxsKSx0''@;'; put 'put ''aGlzLl9kcm9wQ29udGFpbmVyPXRoaXMuX2luaXRpYWxDb250YWluZXJ9KX1fdXBkYXRlQWN0aXZlRHJvcENvbnRhaW5lcih7eDpsLHk6YX0se3g6ZCx5Omh9KXtsZXQgZj10aGlzLl9pbml0aWFsQ29udGFpbmVyLl9nZXRTaWJsaW5nQ29udGFpbmVyRnJvbVBvc2l0aW9uKHRoaXMsbCxhKTsh''@;'; put 'put ''ZiYmdGhpcy5fZHJvcENvbnRhaW5lciE9PXRoaXMuX2luaXRpYWxDb250YWluZXImJnRoaXMuX2luaXRpYWxDb250YWluZXIuX2lzT3ZlckNvbnRhaW5lcihsLGEpJiYoZj10aGlzLl9pbml0aWFsQ29udGFpbmVyKSxmJiZmIT09dGhpcy5fZHJvcENvbnRhaW5lciYmdGhpcy5fbmdab25lLnJ1''@;'; put 'put ''bigoKT0+e3RoaXMuZXhpdGVkLm5leHQoe2l0ZW06dGhpcyxjb250YWluZXI6dGhpcy5fZHJvcENvbnRhaW5lcn0pLHRoaXMuX2Ryb3BDb250YWluZXIuZXhpdCh0aGlzKSx0aGlzLl9kcm9wQ29udGFpbmVyPWYsdGhpcy5fZHJvcENvbnRhaW5lci5lbnRlcih0aGlzLGwsYSxmPT09dGhpcy5f''@;'; put 'put ''aW5pdGlhbENvbnRhaW5lciYmZi5zb3J0aW5nRGlzYWJsZWQ/dGhpcy5faW5pdGlhbEluZGV4OnZvaWQgMCksdGhpcy5lbnRlcmVkLm5leHQoe2l0ZW06dGhpcyxjb250YWluZXI6ZixjdXJyZW50SW5kZXg6Zi5nZXRJdGVtSW5kZXgodGhpcyl9KX0pLHRoaXMuaXNEcmFnZ2luZygpJiYodGhp''@;'; put 'put ''cy5fZHJvcENvbnRhaW5lci5fc3RhcnRTY3JvbGxpbmdJZk5lY2Vzc2FyeShkLGgpLHRoaXMuX2Ryb3BDb250YWluZXIuX3NvcnRJdGVtKHRoaXMsbCxhLHRoaXMuX3BvaW50ZXJEaXJlY3Rpb25EZWx0YSksdGhpcy5jb25zdHJhaW5Qb3NpdGlvbj90aGlzLl9hcHBseVByZXZpZXdUcmFuc2Zv''@;'; put 'put ''cm0obCxhKTp0aGlzLl9hcHBseVByZXZpZXdUcmFuc2Zvcm0obC10aGlzLl9waWNrdXBQb3NpdGlvbkluRWxlbWVudC54LGEtdGhpcy5fcGlja3VwUG9zaXRpb25JbkVsZW1lbnQueSkpfV9hbmltYXRlUHJldmlld1RvUGxhY2Vob2xkZXIoKXtpZighdGhpcy5faGFzTW92ZWQpcmV0dXJuIFBy''@;'; put 'put ''b21pc2UucmVzb2x2ZSgpO2NvbnN0IGw9dGhpcy5fcGxhY2Vob2xkZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dGhpcy5fcHJldmlldy5hZGRDbGFzcygiY2RrLWRyYWctYW5pbWF0aW5nIiksdGhpcy5fYXBwbHlQcmV2aWV3VHJhbnNmb3JtKGwubGVmdCxsLnRvcCk7Y29uc3QgYT10aGlz''@;'; put 'put ''Ll9wcmV2aWV3LmdldFRyYW5zaXRpb25EdXJhdGlvbigpO3JldHVybiAwPT09YT9Qcm9taXNlLnJlc29sdmUoKTp0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pm5ldyBQcm9taXNlKGQ9Pntjb25zdCBoPXY9PnsoIXZ8fHhMKHYpPT09dGhpcy5fcHJldmlldyYmInRyYW5zZm9y''@;'; put 'put ''bSI9PT12LnByb3BlcnR5TmFtZSkmJih0aGlzLl9wcmV2aWV3Py5yZW1vdmVFdmVudExpc3RlbmVyKCJ0cmFuc2l0aW9uZW5kIixoKSxkKCksY2xlYXJUaW1lb3V0KGYpKX0sZj1zZXRUaW1lb3V0KGgsMS41KmEpO3RoaXMuX3ByZXZpZXcuYWRkRXZlbnRMaXN0ZW5lcigidHJhbnNpdGlvbmVu''@;'; put 'put ''ZCIsaCl9KSl9X2NyZWF0ZVBsYWNlaG9sZGVyRWxlbWVudCgpe2NvbnN0IGw9dGhpcy5fcGxhY2Vob2xkZXJUZW1wbGF0ZSxhPWw/bC50ZW1wbGF0ZTpudWxsO2xldCBkO3JldHVybiBhPyh0aGlzLl9wbGFjZWhvbGRlclJlZj1sLnZpZXdDb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KGEs''@;'; put 'put ''bC5jb250ZXh0KSx0aGlzLl9wbGFjZWhvbGRlclJlZi5kZXRlY3RDaGFuZ2VzKCksZD1pMWUodGhpcy5fcGxhY2Vob2xkZXJSZWYsdGhpcy5fZG9jdW1lbnQpKTpkPWUxZSh0aGlzLl9yb290RWxlbWVudCksZC5zdHlsZS5wb2ludGVyRXZlbnRzPSJub25lIixkLmNsYXNzTGlzdC5hZGQoImNk''@;'; put 'put ''ay1kcmFnLXBsYWNlaG9sZGVyIiksZH1fZ2V0UG9pbnRlclBvc2l0aW9uSW5FbGVtZW50KGwsYSxkKXtjb25zdCBoPWE9PT10aGlzLl9yb290RWxlbWVudD9udWxsOmEsZj1oP2guZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk6bCx2PVR4KGQpP2QudGFyZ2V0VG91Y2hlc1swXTpkLE09dGhpcy5f''@;'; put 'put ''Z2V0Vmlld3BvcnRTY3JvbGxQb3NpdGlvbigpO3JldHVybnt4OmYubGVmdC1sLmxlZnQrKHYucGFnZVgtZi5sZWZ0LU0ubGVmdCkseTpmLnRvcC1sLnRvcCsodi5wYWdlWS1mLnRvcC1NLnRvcCl9fV9nZXRQb2ludGVyUG9zaXRpb25PblBhZ2UobCl7Y29uc3QgYT10aGlzLl9nZXRWaWV3cG9y''@;'; put 'put ''dFNjcm9sbFBvc2l0aW9uKCksZD1UeChsKT9sLnRvdWNoZXNbMF18fGwuY2hhbmdlZFRvdWNoZXNbMF18fHtwYWdlWDowLHBhZ2VZOjB9OmwsaD1kLnBhZ2VYLWEubGVmdCxmPWQucGFnZVktYS50b3A7aWYodGhpcy5fb3duZXJTVkdFbGVtZW50KXtjb25zdCB2PXRoaXMuX293bmVyU1ZHRWxl''@;'; put 'put ''bWVudC5nZXRTY3JlZW5DVE0oKTtpZih2KXtjb25zdCBNPXRoaXMuX293bmVyU1ZHRWxlbWVudC5jcmVhdGVTVkdQb2ludCgpO3JldHVybiBNLng9aCxNLnk9ZixNLm1hdHJpeFRyYW5zZm9ybSh2LmludmVyc2UoKSl9fXJldHVybnt4OmgseTpmfX1fZ2V0Q29uc3RyYWluZWRQb2ludGVyUG9z''@;'; put 'put ''aXRpb24obCl7Y29uc3QgYT10aGlzLl9kcm9wQ29udGFpbmVyP3RoaXMuX2Ryb3BDb250YWluZXIubG9ja0F4aXM6bnVsbDtsZXR7eDpkLHk6aH09dGhpcy5jb25zdHJhaW5Qb3NpdGlvbj90aGlzLmNvbnN0cmFpblBvc2l0aW9uKGwsdGhpcyx0aGlzLl9pbml0aWFsRG9tUmVjdCx0aGlzLl9w''@;'; put 'put ''aWNrdXBQb3NpdGlvbkluRWxlbWVudCk6bDtpZigieCI9PT10aGlzLmxvY2tBeGlzfHwieCI9PT1hP2g9dGhpcy5fcGlja3VwUG9zaXRpb25PblBhZ2UueS0odGhpcy5jb25zdHJhaW5Qb3NpdGlvbj90aGlzLl9waWNrdXBQb3NpdGlvbkluRWxlbWVudC55OjApOigieSI9PT10aGlzLmxvY2tB''@;'; put 'put ''eGlzfHwieSI9PT1hKSYmKGQ9dGhpcy5fcGlja3VwUG9zaXRpb25PblBhZ2UueC0odGhpcy5jb25zdHJhaW5Qb3NpdGlvbj90aGlzLl9waWNrdXBQb3NpdGlvbkluRWxlbWVudC54OjApKSx0aGlzLl9ib3VuZGFyeVJlY3Qpe2NvbnN0e3g6Zix5OnZ9PXRoaXMuY29uc3RyYWluUG9zaXRpb24/''@;'; put 'put ''e3g6MCx5OjB9OnRoaXMuX3BpY2t1cFBvc2l0aW9uSW5FbGVtZW50LE09dGhpcy5fYm91bmRhcnlSZWN0LHt3aWR0aDpELGhlaWdodDpafT10aGlzLl9nZXRQcmV2aWV3UmVjdCgpLHJlPU0udG9wK3YsY2U9TS5ib3R0b20tKFotdik7ZD1jMWUoZCxNLmxlZnQrZixNLnJpZ2h0LShELWYpKSxo''@;'; put 'put ''PWMxZShoLHJlLGNlKX1yZXR1cm57eDpkLHk6aH19X3VwZGF0ZVBvaW50ZXJEaXJlY3Rpb25EZWx0YShsKXtjb25zdHt4OmEseTpkfT1sLGg9dGhpcy5fcG9pbnRlckRpcmVjdGlvbkRlbHRhLGY9dGhpcy5fcG9pbnRlclBvc2l0aW9uQXRMYXN0RGlyZWN0aW9uQ2hhbmdlLHY9TWF0aC5hYnMo''@;'; put 'put ''YS1mLngpLE09TWF0aC5hYnMoZC1mLnkpO3JldHVybiB2PnRoaXMuX2NvbmZpZy5wb2ludGVyRGlyZWN0aW9uQ2hhbmdlVGhyZXNob2xkJiYoaC54PWE+Zi54PzE6LTEsZi54PWEpLE0+dGhpcy5fY29uZmlnLnBvaW50ZXJEaXJlY3Rpb25DaGFuZ2VUaHJlc2hvbGQmJihoLnk9ZD5mLnk/MTot''@;'; put 'put ''MSxmLnk9ZCksaH1fdG9nZ2xlTmF0aXZlRHJhZ0ludGVyYWN0aW9ucygpe2lmKCF0aGlzLl9yb290RWxlbWVudHx8IXRoaXMuX2hhbmRsZXMpcmV0dXJuO2NvbnN0IGw9dGhpcy5faGFuZGxlcy5sZW5ndGg+MHx8IXRoaXMuaXNEcmFnZ2luZygpO2whPT10aGlzLl9uYXRpdmVJbnRlcmFjdGlv''@;'; put 'put ''bnNFbmFibGVkJiYodGhpcy5fbmF0aXZlSW50ZXJhY3Rpb25zRW5hYmxlZD1sLEl5KHRoaXMuX3Jvb3RFbGVtZW50LGwpKX1fcmVtb3ZlUm9vdEVsZW1lbnRMaXN0ZW5lcnMobCl7bC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLHRoaXMuX3BvaW50ZXJEb3duLFJMKSxsLnJlbW92''@;'; put 'put ''ZUV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLHRoaXMuX3BvaW50ZXJEb3duLG8xZSksbC5yZW1vdmVFdmVudExpc3RlbmVyKCJkcmFnc3RhcnQiLHRoaXMuX25hdGl2ZURyYWdTdGFydCxSTCl9X2FwcGx5Um9vdEVsZW1lbnRUcmFuc2Zvcm0obCxhKXtjb25zdCBkPUlMKGwsYSksaD10aGlz''@;'; put 'put ''Ll9yb290RWxlbWVudC5zdHlsZTtudWxsPT10aGlzLl9pbml0aWFsVHJhbnNmb3JtJiYodGhpcy5faW5pdGlhbFRyYW5zZm9ybT1oLnRyYW5zZm9ybSYmIm5vbmUiIT1oLnRyYW5zZm9ybT9oLnRyYW5zZm9ybToiIiksaC50cmFuc2Zvcm09REwoZCx0aGlzLl9pbml0aWFsVHJhbnNmb3JtKX1f''@;'; put 'put ''YXBwbHlQcmV2aWV3VHJhbnNmb3JtKGwsYSl7Y29uc3QgZD10aGlzLl9wcmV2aWV3VGVtcGxhdGU/LnRlbXBsYXRlP3ZvaWQgMDp0aGlzLl9pbml0aWFsVHJhbnNmb3JtLGg9SUwobCxhKTt0aGlzLl9wcmV2aWV3LnNldFRyYW5zZm9ybShETChoLGQpKX1fZ2V0RHJhZ0Rpc3RhbmNlKGwpe2Nv''@;'; put 'put ''bnN0IGE9dGhpcy5fcGlja3VwUG9zaXRpb25PblBhZ2U7cmV0dXJuIGE/e3g6bC54LWEueCx5OmwueS1hLnl9Ont4OjAseTowfX1fY2xlYW51cENhY2hlZERpbWVuc2lvbnMoKXt0aGlzLl9ib3VuZGFyeVJlY3Q9dGhpcy5fcHJldmlld1JlY3Q9dm9pZCAwLHRoaXMuX3BhcmVudFBvc2l0aW9u''@;'; put 'put ''cy5jbGVhcigpfV9jb250YWluSW5zaWRlQm91bmRhcnlPblJlc2l6ZSgpe2xldHt4OmwseTphfT10aGlzLl9wYXNzaXZlVHJhbnNmb3JtO2lmKDA9PT1sJiYwPT09YXx8dGhpcy5pc0RyYWdnaW5nKCl8fCF0aGlzLl9ib3VuZGFyeUVsZW1lbnQpcmV0dXJuO2NvbnN0IGQ9dGhpcy5fcm9vdEVs''@;'; put 'put ''ZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksaD10aGlzLl9ib3VuZGFyeUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7aWYoMD09PWgud2lkdGgmJjA9PT1oLmhlaWdodHx8MD09PWQud2lkdGgmJjA9PT1kLmhlaWdodClyZXR1cm47Y29uc3QgZj1oLmxlZnQtZC5sZWZ0LHY9''@;'; put 'put ''ZC5yaWdodC1oLnJpZ2h0LE09aC50b3AtZC50b3AsRD1kLmJvdHRvbS1oLmJvdHRvbTtoLndpZHRoPmQud2lkdGg/KGY+MCYmKGwrPWYpLHY+MCYmKGwtPXYpKTpsPTAsaC5oZWlnaHQ+ZC5oZWlnaHQ/KE0+MCYmKGErPU0pLEQ+MCYmKGEtPUQpKTphPTAsKGwhPT10aGlzLl9wYXNzaXZlVHJh''@;'; put 'put ''bnNmb3JtLnh8fGEhPT10aGlzLl9wYXNzaXZlVHJhbnNmb3JtLnkpJiZ0aGlzLnNldEZyZWVEcmFnUG9zaXRpb24oe3k6YSx4Omx9KX1fZ2V0RHJhZ1N0YXJ0RGVsYXkobCl7Y29uc3QgYT10aGlzLmRyYWdTdGFydERlbGF5O3JldHVybiJudW1iZXIiPT10eXBlb2YgYT9hOlR4KGwpP2EudG91''@;'; put 'put ''Y2g6YT9hLm1vdXNlOjB9X3VwZGF0ZU9uU2Nyb2xsKGwpe2NvbnN0IGE9dGhpcy5fcGFyZW50UG9zaXRpb25zLmhhbmRsZVNjcm9sbChsKTtpZihhKXtjb25zdCBkPXhMKGwpO3RoaXMuX2JvdW5kYXJ5UmVjdCYmZCE9PXRoaXMuX2JvdW5kYXJ5RWxlbWVudCYmZC5jb250YWlucyh0aGlzLl9i''@;'; put 'put ''b3VuZGFyeUVsZW1lbnQpJiZFeCh0aGlzLl9ib3VuZGFyeVJlY3QsYS50b3AsYS5sZWZ0KSx0aGlzLl9waWNrdXBQb3NpdGlvbk9uUGFnZS54Kz1hLmxlZnQsdGhpcy5fcGlja3VwUG9zaXRpb25PblBhZ2UueSs9YS50b3AsdGhpcy5fZHJvcENvbnRhaW5lcnx8KHRoaXMuX2FjdGl2ZVRyYW5z''@;'; put 'put ''Zm9ybS54LT1hLmxlZnQsdGhpcy5fYWN0aXZlVHJhbnNmb3JtLnktPWEudG9wLHRoaXMuX2FwcGx5Um9vdEVsZW1lbnRUcmFuc2Zvcm0odGhpcy5fYWN0aXZlVHJhbnNmb3JtLngsdGhpcy5fYWN0aXZlVHJhbnNmb3JtLnkpKX19X2dldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5fcGFyZW50UG9zaXRpb25zLnBvc2l0aW9ucy5nZXQodGhpcy5fZG9jdW1lbnQpPy5zY3JvbGxQb3NpdGlvbnx8dGhpcy5fcGFyZW50UG9zaXRpb25zLmdldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKX1fZ2V0U2hhZG93Um9vdCgpe3JldHVybiB2b2lkIDA9PT10aGlzLl9jYWNoZWRT''@;'; put 'put ''aGFkb3dSb290JiYodGhpcy5fY2FjaGVkU2hhZG93Um9vdD1PMGUodGhpcy5fcm9vdEVsZW1lbnQpKSx0aGlzLl9jYWNoZWRTaGFkb3dSb290fV9nZXRQcmV2aWV3SW5zZXJ0aW9uUG9pbnQobCxhKXtjb25zdCBkPXRoaXMuX3ByZXZpZXdDb250YWluZXJ8fCJnbG9iYWwiO2lmKCJwYXJlbnQi''@;'; put 'put ''PT09ZClyZXR1cm4gbDtpZigiZ2xvYmFsIj09PWQpe2NvbnN0IGg9dGhpcy5fZG9jdW1lbnQ7cmV0dXJuIGF8fGguZnVsbHNjcmVlbkVsZW1lbnR8fGgud2Via2l0RnVsbHNjcmVlbkVsZW1lbnR8fGgubW96RnVsbFNjcmVlbkVsZW1lbnR8fGgubXNGdWxsc2NyZWVuRWxlbWVudHx8aC5ib2R5''@;'; put 'put ''fXJldHVybiBFZChkKX1fZ2V0UHJldmlld1JlY3QoKXtyZXR1cm4oIXRoaXMuX3ByZXZpZXdSZWN0fHwhdGhpcy5fcHJldmlld1JlY3Qud2lkdGgmJiF0aGlzLl9wcmV2aWV3UmVjdC5oZWlnaHQpJiYodGhpcy5fcHJldmlld1JlY3Q9dGhpcy5fcHJldmlldz90aGlzLl9wcmV2aWV3LmdldEJv''@;'; put 'put ''dW5kaW5nQ2xpZW50UmVjdCgpOnRoaXMuX2luaXRpYWxEb21SZWN0KSx0aGlzLl9wcmV2aWV3UmVjdH1fZ2V0VGFyZ2V0SGFuZGxlKGwpe3JldHVybiB0aGlzLl9oYW5kbGVzLmZpbmQoYT0+bC50YXJnZXQmJihsLnRhcmdldD09PWF8fGEuY29udGFpbnMobC50YXJnZXQpKSl9fWZ1bmN0aW9u''@;'; put 'put ''IGMxZShjLGwsYSl7cmV0dXJuIE1hdGgubWF4KGwsTWF0aC5taW4oYSxjKSl9ZnVuY3Rpb24gVHgoYyl7cmV0dXJuInQiPT09Yy50eXBlWzBdfWZ1bmN0aW9uIHUxZShjKXtjLnByZXZlbnREZWZhdWx0KCl9ZnVuY3Rpb24gZDFlKGMsbCxhKXtjb25zdCBkPUF4KGwsYy5sZW5ndGgtMSksaD1B''@;'; put 'put ''eChhLGMubGVuZ3RoLTEpO2lmKGQ9PT1oKXJldHVybjtjb25zdCBmPWNbZF0sdj1oPGQ/LTE6MTtmb3IobGV0IE09ZDtNIT09aDtNKz12KWNbTV09Y1tNK3ZdO2NbaF09Zn1mdW5jdGlvbiBBeChjLGwpe3JldHVybiBNYXRoLm1heCgwLE1hdGgubWluKGwsYykpfWNsYXNzIEJGZXtjb25zdHJ1''@;'; put 'put ''Y3RvcihsLGEpe3RoaXMuX2VsZW1lbnQ9bCx0aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5PWEsdGhpcy5faXRlbVBvc2l0aW9ucz1bXSx0aGlzLm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIsdGhpcy5fcHJldmlvdXNTd2FwPXtkcmFnOm51bGwsZGVsdGE6MCxvdmVybGFwczohMX19c3RhcnQobCl7dGhp''@;'; put 'put ''cy53aXRoSXRlbXMobCl9c29ydChsLGEsZCxoKXtjb25zdCBmPXRoaXMuX2l0ZW1Qb3NpdGlvbnMsdj10aGlzLl9nZXRJdGVtSW5kZXhGcm9tUG9pbnRlclBvc2l0aW9uKGwsYSxkLGgpO2lmKC0xPT09diYmZi5sZW5ndGg+MClyZXR1cm4gbnVsbDtjb25zdCBNPSJob3Jpem9udGFsIj09PXRo''@;'; put 'put ''aXMub3JpZW50YXRpb24sRD1mLmZpbmRJbmRleChydD0+cnQuZHJhZz09PWwpLFo9Zlt2XSxjZT1aLmNsaWVudFJlY3QsYmU9RD52PzE6LTEsRWU9dGhpcy5fZ2V0SXRlbU9mZnNldFB4KGZbRF0uY2xpZW50UmVjdCxjZSxiZSksQmU9dGhpcy5fZ2V0U2libGluZ09mZnNldFB4KEQsZixiZSks''@;'; put 'put ''cWU9Zi5zbGljZSgpO3JldHVybiBkMWUoZixELHYpLGYuZm9yRWFjaCgocnQscHQpPT57aWYocWVbcHRdPT09cnQpcmV0dXJuO2NvbnN0IGR0PXJ0LmRyYWc9PT1sLEp0PWR0P0VlOkJlLHZuPWR0P2wuZ2V0UGxhY2Vob2xkZXJFbGVtZW50KCk6cnQuZHJhZy5nZXRSb290RWxlbWVudCgpO3J0''@;'; put 'put ''Lm9mZnNldCs9SnQsTT8odm4uc3R5bGUudHJhbnNmb3JtPURMKGB0cmFuc2xhdGUzZCgke01hdGgucm91bmQocnQub2Zmc2V0KX1weCwgMCwgMClgLHJ0LmluaXRpYWxUcmFuc2Zvcm0pLEV4KHJ0LmNsaWVudFJlY3QsMCxKdCkpOih2bi5zdHlsZS50cmFuc2Zvcm09REwoYHRyYW5zbGF0ZTNk''@;'; put 'put ''KDAsICR7TWF0aC5yb3VuZChydC5vZmZzZXQpfXB4LCAwKWAscnQuaW5pdGlhbFRyYW5zZm9ybSksRXgocnQuY2xpZW50UmVjdCxKdCwwKSl9KSx0aGlzLl9wcmV2aW91c1N3YXAub3ZlcmxhcHM9U1koY2UsYSxkKSx0aGlzLl9wcmV2aW91c1N3YXAuZHJhZz1aLmRyYWcsdGhpcy5fcHJldmlv''@;'; put 'put ''dXNTd2FwLmRlbHRhPU0/aC54OmgueSx7cHJldmlvdXNJbmRleDpELGN1cnJlbnRJbmRleDp2fX1lbnRlcihsLGEsZCxoKXtjb25zdCBmPW51bGw9PWh8fGg8MD90aGlzLl9nZXRJdGVtSW5kZXhGcm9tUG9pbnRlclBvc2l0aW9uKGwsYSxkKTpoLHY9dGhpcy5fYWN0aXZlRHJhZ2dhYmxlcyxN''@;'; put 'put ''PXYuaW5kZXhPZihsKSxEPWwuZ2V0UGxhY2Vob2xkZXJFbGVtZW50KCk7bGV0IFo9dltmXTtpZihaPT09bCYmKFo9dltmKzFdKSwhWiYmKG51bGw9PWZ8fC0xPT09Znx8Zjx2Lmxlbmd0aC0xKSYmdGhpcy5fc2hvdWxkRW50ZXJBc0ZpcnN0Q2hpbGQoYSxkKSYmKFo9dlswXSksTT4tMSYmdi5z''@;'; put 'put ''cGxpY2UoTSwxKSxaJiYhdGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeS5pc0RyYWdnaW5nKFopKXtjb25zdCByZT1aLmdldFJvb3RFbGVtZW50KCk7cmUucGFyZW50RWxlbWVudC5pbnNlcnRCZWZvcmUoRCxyZSksdi5zcGxpY2UoZiwwLGwpfWVsc2UgRWQodGhpcy5fZWxlbWVudCkuYXBwZW5kQ2hp''@;'; put 'put ''bGQoRCksdi5wdXNoKGwpO0Quc3R5bGUudHJhbnNmb3JtPSIiLHRoaXMuX2NhY2hlSXRlbVBvc2l0aW9ucygpfXdpdGhJdGVtcyhsKXt0aGlzLl9hY3RpdmVEcmFnZ2FibGVzPWwuc2xpY2UoKSx0aGlzLl9jYWNoZUl0ZW1Qb3NpdGlvbnMoKX13aXRoU29ydFByZWRpY2F0ZShsKXt0aGlzLl9z''@;'; put 'put ''b3J0UHJlZGljYXRlPWx9cmVzZXQoKXt0aGlzLl9hY3RpdmVEcmFnZ2FibGVzLmZvckVhY2gobD0+e2NvbnN0IGE9bC5nZXRSb290RWxlbWVudCgpO2lmKGEpe2NvbnN0IGQ9dGhpcy5faXRlbVBvc2l0aW9ucy5maW5kKGg9PmguZHJhZz09PWwpPy5pbml0aWFsVHJhbnNmb3JtO2Euc3R5bGUu''@;'; put 'put ''dHJhbnNmb3JtPWR8fCIifX0pLHRoaXMuX2l0ZW1Qb3NpdGlvbnM9W10sdGhpcy5fYWN0aXZlRHJhZ2dhYmxlcz1bXSx0aGlzLl9wcmV2aW91c1N3YXAuZHJhZz1udWxsLHRoaXMuX3ByZXZpb3VzU3dhcC5kZWx0YT0wLHRoaXMuX3ByZXZpb3VzU3dhcC5vdmVybGFwcz0hMX1nZXRBY3RpdmVJ''@;'; put 'put ''dGVtc1NuYXBzaG90KCl7cmV0dXJuIHRoaXMuX2FjdGl2ZURyYWdnYWJsZXN9Z2V0SXRlbUluZGV4KGwpe3JldHVybigiaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uJiYicnRsIj09PXRoaXMuZGlyZWN0aW9uP3RoaXMuX2l0ZW1Qb3NpdGlvbnMuc2xpY2UoKS5yZXZlcnNlKCk6dGhp''@;'; put 'put ''cy5faXRlbVBvc2l0aW9ucykuZmluZEluZGV4KGQ9PmQuZHJhZz09PWwpfXVwZGF0ZU9uU2Nyb2xsKGwsYSl7dGhpcy5faXRlbVBvc2l0aW9ucy5mb3JFYWNoKCh7Y2xpZW50UmVjdDpkfSk9PntFeChkLGwsYSl9KSx0aGlzLl9pdGVtUG9zaXRpb25zLmZvckVhY2goKHtkcmFnOmR9KT0+e3Ro''@;'; put 'put ''aXMuX2RyYWdEcm9wUmVnaXN0cnkuaXNEcmFnZ2luZyhkKSYmZC5fc29ydEZyb21MYXN0UG9pbnRlclBvc2l0aW9uKCl9KX1fY2FjaGVJdGVtUG9zaXRpb25zKCl7Y29uc3QgbD0iaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uO3RoaXMuX2l0ZW1Qb3NpdGlvbnM9dGhpcy5fYWN0aXZl''@;'; put 'put ''RHJhZ2dhYmxlcy5tYXAoYT0+e2NvbnN0IGQ9YS5nZXRWaXNpYmxlRWxlbWVudCgpO3JldHVybntkcmFnOmEsb2Zmc2V0OjAsaW5pdGlhbFRyYW5zZm9ybTpkLnN0eWxlLnRyYW5zZm9ybXx8IiIsY2xpZW50UmVjdDpDWShkKX19KS5zb3J0KChhLGQpPT5sP2EuY2xpZW50UmVjdC5sZWZ0LWQu''@;'; put 'put ''Y2xpZW50UmVjdC5sZWZ0OmEuY2xpZW50UmVjdC50b3AtZC5jbGllbnRSZWN0LnRvcCl9X2dldEl0ZW1PZmZzZXRQeChsLGEsZCl7Y29uc3QgaD0iaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uO2xldCBmPWg/YS5sZWZ0LWwubGVmdDphLnRvcC1sLnRvcDtyZXR1cm4tMT09PWQmJihm''@;'; put 'put ''Kz1oP2Eud2lkdGgtbC53aWR0aDphLmhlaWdodC1sLmhlaWdodCksZn1fZ2V0U2libGluZ09mZnNldFB4KGwsYSxkKXtjb25zdCBoPSJob3Jpem9udGFsIj09PXRoaXMub3JpZW50YXRpb24sZj1hW2xdLmNsaWVudFJlY3Qsdj1hW2wrLTEqZF07bGV0IE09ZltoPyJ3aWR0aCI6ImhlaWdodCJd''@;'; put 'put ''KmQ7aWYodil7Y29uc3QgRD1oPyJsZWZ0IjoidG9wIixaPWg/InJpZ2h0IjoiYm90dG9tIjstMT09PWQ/TS09di5jbGllbnRSZWN0W0RdLWZbWl06TSs9ZltEXS12LmNsaWVudFJlY3RbWl19cmV0dXJuIE19X3Nob3VsZEVudGVyQXNGaXJzdENoaWxkKGwsYSl7aWYoIXRoaXMuX2FjdGl2ZURy''@;'; put 'put ''YWdnYWJsZXMubGVuZ3RoKXJldHVybiExO2NvbnN0IGQ9dGhpcy5faXRlbVBvc2l0aW9ucyxoPSJob3Jpem9udGFsIj09PXRoaXMub3JpZW50YXRpb247aWYoZFswXS5kcmFnIT09dGhpcy5fYWN0aXZlRHJhZ2dhYmxlc1swXSl7Y29uc3Qgdj1kW2QubGVuZ3RoLTFdLmNsaWVudFJlY3Q7cmV0''@;'; put 'put ''dXJuIGg/bD49di5yaWdodDphPj12LmJvdHRvbX17Y29uc3Qgdj1kWzBdLmNsaWVudFJlY3Q7cmV0dXJuIGg/bDw9di5sZWZ0OmE8PXYudG9wfX1fZ2V0SXRlbUluZGV4RnJvbVBvaW50ZXJQb3NpdGlvbihsLGEsZCxoKXtjb25zdCBmPSJob3Jpem9udGFsIj09PXRoaXMub3JpZW50YXRpb24s''@;'; put 'put ''dj10aGlzLl9pdGVtUG9zaXRpb25zLmZpbmRJbmRleCgoe2RyYWc6TSxjbGllbnRSZWN0OkR9KT0+TSE9PWwmJigoIWh8fE0hPT10aGlzLl9wcmV2aW91c1N3YXAuZHJhZ3x8IXRoaXMuX3ByZXZpb3VzU3dhcC5vdmVybGFwc3x8KGY/aC54OmgueSkhPT10aGlzLl9wcmV2aW91c1N3YXAuZGVs''@;'; put 'put ''dGEpJiYoZj9hPj1NYXRoLmZsb29yKEQubGVmdCkmJmE8TWF0aC5mbG9vcihELnJpZ2h0KTpkPj1NYXRoLmZsb29yKEQudG9wKSYmZDxNYXRoLmZsb29yKEQuYm90dG9tKSkpKTtyZXR1cm4tMSE9PXYmJnRoaXMuX3NvcnRQcmVkaWNhdGUodixsKT92Oi0xfX12YXIgRDI9ZnVuY3Rpb24oYyl7''@;'; put 'put ''cmV0dXJuIGNbYy5OT05FPTBdPSJOT05FIixjW2MuVVA9MV09IlVQIixjW2MuRE9XTj0yXT0iRE9XTiIsY30oRDJ8fHt9KSxqMT1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLk5PTkU9MF09Ik5PTkUiLGNbYy5MRUZUPTFdPSJMRUZUIixjW2MuUklHSFQ9Ml09IlJJR0hUIixjfShqMXx8e30pO2Ns''@;'; put 'put ''YXNzIGpGZXtjb25zdHJ1Y3RvcihsLGEsZCxoLGYpe3RoaXMuX2RyYWdEcm9wUmVnaXN0cnk9YSx0aGlzLl9uZ1pvbmU9aCx0aGlzLl92aWV3cG9ydFJ1bGVyPWYsdGhpcy5kaXNhYmxlZD0hMSx0aGlzLnNvcnRpbmdEaXNhYmxlZD0hMSx0aGlzLmF1dG9TY3JvbGxEaXNhYmxlZD0hMSx0aGlz''@;'; put 'put ''LmF1dG9TY3JvbGxTdGVwPTIsdGhpcy5lbnRlclByZWRpY2F0ZT0oKT0+ITAsdGhpcy5zb3J0UHJlZGljYXRlPSgpPT4hMCx0aGlzLmJlZm9yZVN0YXJ0ZWQ9bmV3IFduLHRoaXMuZW50ZXJlZD1uZXcgV24sdGhpcy5leGl0ZWQ9bmV3IFduLHRoaXMuZHJvcHBlZD1uZXcgV24sdGhpcy5zb3J0''@;'; put 'put ''ZWQ9bmV3IFduLHRoaXMucmVjZWl2aW5nU3RhcnRlZD1uZXcgV24sdGhpcy5yZWNlaXZpbmdTdG9wcGVkPW5ldyBXbix0aGlzLl9pc0RyYWdnaW5nPSExLHRoaXMuX2RyYWdnYWJsZXM9W10sdGhpcy5fc2libGluZ3M9W10sdGhpcy5fYWN0aXZlU2libGluZ3M9bmV3IFNldCx0aGlzLl92aWV3''@;'; put 'put ''cG9ydFNjcm9sbFN1YnNjcmlwdGlvbj1xdC5FTVBUWSx0aGlzLl92ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbj1EMi5OT05FLHRoaXMuX2hvcml6b250YWxTY3JvbGxEaXJlY3Rpb249ajEuTk9ORSx0aGlzLl9zdG9wU2Nyb2xsVGltZXJzPW5ldyBXbix0aGlzLl9jYWNoZWRTaGFkb3dSb290PW51''@;'; put 'put ''bGwsdGhpcy5fc3RhcnRTY3JvbGxJbnRlcnZhbD0oKT0+e3RoaXMuX3N0b3BTY3JvbGxpbmcoKSxmdW5jdGlvbiBSRmUoYz0wLGw9Q0wpe3JldHVybiBjPDAmJihjPTApLFUwZShjLGMsbCl9KDAsajBlKS5waXBlKFYwKHRoaXMuX3N0b3BTY3JvbGxUaW1lcnMpKS5zdWJzY3JpYmUoKCk9Pntj''@;'; put 'put ''b25zdCB2PXRoaXMuX3Njcm9sbE5vZGUsTT10aGlzLmF1dG9TY3JvbGxTdGVwO3RoaXMuX3ZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uPT09RDIuVVA/di5zY3JvbGxCeSgwLC1NKTp0aGlzLl92ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbj09PUQyLkRPV04mJnYuc2Nyb2xsQnkoMCxNKSx0aGlzLl9o''@;'; put 'put ''b3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uPT09ajEuTEVGVD92LnNjcm9sbEJ5KC1NLDApOnRoaXMuX2hvcml6b250YWxTY3JvbGxEaXJlY3Rpb249PT1qMS5SSUdIVCYmdi5zY3JvbGxCeShNLDApfSl9LHRoaXMuZWxlbWVudD1FZChsKSx0aGlzLl9kb2N1bWVudD1kLHRoaXMud2l0aFNjcm9s''@;'; put 'put ''bGFibGVQYXJlbnRzKFt0aGlzLmVsZW1lbnRdKSxhLnJlZ2lzdGVyRHJvcENvbnRhaW5lcih0aGlzKSx0aGlzLl9wYXJlbnRQb3NpdGlvbnM9bmV3IFEwZShkKSx0aGlzLl9zb3J0U3RyYXRlZ3k9bmV3IEJGZSh0aGlzLmVsZW1lbnQsYSksdGhpcy5fc29ydFN0cmF0ZWd5LndpdGhTb3J0UHJl''@;'; put 'put ''ZGljYXRlKCh2LE0pPT50aGlzLnNvcnRQcmVkaWNhdGUodixNLHRoaXMpKX1kaXNwb3NlKCl7dGhpcy5fc3RvcFNjcm9sbGluZygpLHRoaXMuX3N0b3BTY3JvbGxUaW1lcnMuY29tcGxldGUoKSx0aGlzLl92aWV3cG9ydFNjcm9sbFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuYmVm''@;'; put 'put ''b3JlU3RhcnRlZC5jb21wbGV0ZSgpLHRoaXMuZW50ZXJlZC5jb21wbGV0ZSgpLHRoaXMuZXhpdGVkLmNvbXBsZXRlKCksdGhpcy5kcm9wcGVkLmNvbXBsZXRlKCksdGhpcy5zb3J0ZWQuY29tcGxldGUoKSx0aGlzLnJlY2VpdmluZ1N0YXJ0ZWQuY29tcGxldGUoKSx0aGlzLnJlY2VpdmluZ1N0''@;'; put 'put ''b3BwZWQuY29tcGxldGUoKSx0aGlzLl9hY3RpdmVTaWJsaW5ncy5jbGVhcigpLHRoaXMuX3Njcm9sbE5vZGU9bnVsbCx0aGlzLl9wYXJlbnRQb3NpdGlvbnMuY2xlYXIoKSx0aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5LnJlbW92ZURyb3BDb250YWluZXIodGhpcyl9aXNEcmFnZ2luZygpe3JldHVy''@;'; put 'put ''biB0aGlzLl9pc0RyYWdnaW5nfXN0YXJ0KCl7dGhpcy5fZHJhZ2dpbmdTdGFydGVkKCksdGhpcy5fbm90aWZ5UmVjZWl2aW5nU2libGluZ3MoKX1lbnRlcihsLGEsZCxoKXt0aGlzLl9kcmFnZ2luZ1N0YXJ0ZWQoKSxudWxsPT1oJiZ0aGlzLnNvcnRpbmdEaXNhYmxlZCYmKGg9dGhpcy5fZHJh''@;'; put 'put ''Z2dhYmxlcy5pbmRleE9mKGwpKSx0aGlzLl9zb3J0U3RyYXRlZ3kuZW50ZXIobCxhLGQsaCksdGhpcy5fY2FjaGVQYXJlbnRQb3NpdGlvbnMoKSx0aGlzLl9ub3RpZnlSZWNlaXZpbmdTaWJsaW5ncygpLHRoaXMuZW50ZXJlZC5uZXh0KHtpdGVtOmwsY29udGFpbmVyOnRoaXMsY3VycmVudElu''@;'; put 'put ''ZGV4OnRoaXMuZ2V0SXRlbUluZGV4KGwpfSl9ZXhpdChsKXt0aGlzLl9yZXNldCgpLHRoaXMuZXhpdGVkLm5leHQoe2l0ZW06bCxjb250YWluZXI6dGhpc30pfWRyb3AobCxhLGQsaCxmLHYsTSxEPXt9KXt0aGlzLl9yZXNldCgpLHRoaXMuZHJvcHBlZC5uZXh0KHtpdGVtOmwsY3VycmVudElu''@;'; put 'put ''ZGV4OmEscHJldmlvdXNJbmRleDpkLGNvbnRhaW5lcjp0aGlzLHByZXZpb3VzQ29udGFpbmVyOmgsaXNQb2ludGVyT3ZlckNvbnRhaW5lcjpmLGRpc3RhbmNlOnYsZHJvcFBvaW50Ok0sZXZlbnQ6RH0pfXdpdGhJdGVtcyhsKXtjb25zdCBhPXRoaXMuX2RyYWdnYWJsZXM7cmV0dXJuIHRoaXMu''@;'; put 'put ''X2RyYWdnYWJsZXM9bCxsLmZvckVhY2goZD0+ZC5fd2l0aERyb3BDb250YWluZXIodGhpcykpLHRoaXMuaXNEcmFnZ2luZygpJiYoYS5maWx0ZXIoaD0+aC5pc0RyYWdnaW5nKCkpLmV2ZXJ5KGg9Pi0xPT09bC5pbmRleE9mKGgpKT90aGlzLl9yZXNldCgpOnRoaXMuX3NvcnRTdHJhdGVneS53''@;'; put 'put ''aXRoSXRlbXModGhpcy5fZHJhZ2dhYmxlcykpLHRoaXN9d2l0aERpcmVjdGlvbihsKXtyZXR1cm4gdGhpcy5fc29ydFN0cmF0ZWd5LmRpcmVjdGlvbj1sLHRoaXN9Y29ubmVjdGVkVG8obCl7cmV0dXJuIHRoaXMuX3NpYmxpbmdzPWwuc2xpY2UoKSx0aGlzfXdpdGhPcmllbnRhdGlvbihsKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5fc29ydFN0cmF0ZWd5Lm9yaWVudGF0aW9uPWwsdGhpc313aXRoU2Nyb2xsYWJsZVBhcmVudHMobCl7Y29uc3QgYT1FZCh0aGlzLmVsZW1lbnQpO3JldHVybiB0aGlzLl9zY3JvbGxhYmxlRWxlbWVudHM9LTE9PT1sLmluZGV4T2YoYSk/W2EsLi4ubF06bC5zbGljZSgpLHRo''@;'; put 'put ''aXN9Z2V0U2Nyb2xsYWJsZVBhcmVudHMoKXtyZXR1cm4gdGhpcy5fc2Nyb2xsYWJsZUVsZW1lbnRzfWdldEl0ZW1JbmRleChsKXtyZXR1cm4gdGhpcy5faXNEcmFnZ2luZz90aGlzLl9zb3J0U3RyYXRlZ3kuZ2V0SXRlbUluZGV4KGwpOnRoaXMuX2RyYWdnYWJsZXMuaW5kZXhPZihsKX1pc1Jl''@;'; put 'put ''Y2VpdmluZygpe3JldHVybiB0aGlzLl9hY3RpdmVTaWJsaW5ncy5zaXplPjB9X3NvcnRJdGVtKGwsYSxkLGgpe2lmKHRoaXMuc29ydGluZ0Rpc2FibGVkfHwhdGhpcy5fZG9tUmVjdHx8IUowZSh0aGlzLl9kb21SZWN0LC4wNSxhLGQpKXJldHVybjtjb25zdCBmPXRoaXMuX3NvcnRTdHJhdGVn''@;'; put 'put ''eS5zb3J0KGwsYSxkLGgpO2YmJnRoaXMuc29ydGVkLm5leHQoe3ByZXZpb3VzSW5kZXg6Zi5wcmV2aW91c0luZGV4LGN1cnJlbnRJbmRleDpmLmN1cnJlbnRJbmRleCxjb250YWluZXI6dGhpcyxpdGVtOmx9KX1fc3RhcnRTY3JvbGxpbmdJZk5lY2Vzc2FyeShsLGEpe2lmKHRoaXMuYXV0b1Nj''@;'; put 'put ''cm9sbERpc2FibGVkKXJldHVybjtsZXQgZCxoPUQyLk5PTkUsZj1qMS5OT05FO2lmKHRoaXMuX3BhcmVudFBvc2l0aW9ucy5wb3NpdGlvbnMuZm9yRWFjaCgodixNKT0+e009PT10aGlzLl9kb2N1bWVudHx8IXYuY2xpZW50UmVjdHx8ZHx8SjBlKHYuY2xpZW50UmVjdCwuMDUsbCxhKSYmKFto''@;'; put 'put ''LGZdPWZ1bmN0aW9uIHpGZShjLGwsYSxkLGgpe2NvbnN0IGY9cDFlKGwsaCksdj1nMWUobCxkKTtsZXQgTT1EMi5OT05FLEQ9ajEuTk9ORTtpZihmKXtjb25zdCBaPWMuc2Nyb2xsVG9wO2Y9PT1EMi5VUD9aPjAmJihNPUQyLlVQKTpjLnNjcm9sbEhlaWdodC1aPmMuY2xpZW50SGVpZ2h0JiYo''@;'; put 'put ''TT1EMi5ET1dOKX1pZih2KXtjb25zdCBaPWMuc2Nyb2xsTGVmdDsicnRsIj09PWE/dj09PWoxLlJJR0hUP1o8MCYmKEQ9ajEuUklHSFQpOmMuc2Nyb2xsV2lkdGgrWj5jLmNsaWVudFdpZHRoJiYoRD1qMS5MRUZUKTp2PT09ajEuTEVGVD9aPjAmJihEPWoxLkxFRlQpOmMuc2Nyb2xsV2lkdGgt''@;'; put 'put ''Wj5jLmNsaWVudFdpZHRoJiYoRD1qMS5SSUdIVCl9cmV0dXJuW00sRF19KE0sdi5jbGllbnRSZWN0LHRoaXMuX3NvcnRTdHJhdGVneS5kaXJlY3Rpb24sbCxhKSwoaHx8ZikmJihkPU0pKX0pLCFoJiYhZil7Y29uc3R7d2lkdGg6dixoZWlnaHQ6TX09dGhpcy5fdmlld3BvcnRSdWxlci5nZXRW''@;'; put 'put ''aWV3cG9ydFNpemUoKSxEPXt3aWR0aDp2LGhlaWdodDpNLHRvcDowLHJpZ2h0OnYsYm90dG9tOk0sbGVmdDowfTtoPXAxZShELGEpLGY9ZzFlKEQsbCksZD13aW5kb3d9ZCYmKGghPT10aGlzLl92ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbnx8ZiE9PXRoaXMuX2hvcml6b250YWxTY3JvbGxEaXJl''@;'; put 'put ''Y3Rpb258fGQhPT10aGlzLl9zY3JvbGxOb2RlKSYmKHRoaXMuX3ZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uPWgsdGhpcy5faG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbj1mLHRoaXMuX3Njcm9sbE5vZGU9ZCwoaHx8ZikmJmQ/dGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKHRoaXMuX3N0''@;'; put 'put ''YXJ0U2Nyb2xsSW50ZXJ2YWwpOnRoaXMuX3N0b3BTY3JvbGxpbmcoKSl9X3N0b3BTY3JvbGxpbmcoKXt0aGlzLl9zdG9wU2Nyb2xsVGltZXJzLm5leHQoKX1fZHJhZ2dpbmdTdGFydGVkKCl7Y29uc3QgbD1FZCh0aGlzLmVsZW1lbnQpLnN0eWxlO3RoaXMuYmVmb3JlU3RhcnRlZC5uZXh0KCks''@;'; put 'put ''dGhpcy5faXNEcmFnZ2luZz0hMCx0aGlzLl9pbml0aWFsU2Nyb2xsU25hcD1sLm1zU2Nyb2xsU25hcFR5cGV8fGwuc2Nyb2xsU25hcFR5cGV8fCIiLGwuc2Nyb2xsU25hcFR5cGU9bC5tc1Njcm9sbFNuYXBUeXBlPSJub25lIix0aGlzLl9zb3J0U3RyYXRlZ3kuc3RhcnQodGhpcy5fZHJhZ2dh''@;'; put 'put ''YmxlcyksdGhpcy5fY2FjaGVQYXJlbnRQb3NpdGlvbnMoKSx0aGlzLl92aWV3cG9ydFNjcm9sbFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX2xpc3RlblRvU2Nyb2xsRXZlbnRzKCl9X2NhY2hlUGFyZW50UG9zaXRpb25zKCl7Y29uc3QgbD1FZCh0aGlzLmVsZW1lbnQpO3RoaXMu''@;'; put 'put ''X3BhcmVudFBvc2l0aW9ucy5jYWNoZSh0aGlzLl9zY3JvbGxhYmxlRWxlbWVudHMpLHRoaXMuX2RvbVJlY3Q9dGhpcy5fcGFyZW50UG9zaXRpb25zLnBvc2l0aW9ucy5nZXQobCkuY2xpZW50UmVjdH1fcmVzZXQoKXt0aGlzLl9pc0RyYWdnaW5nPSExO2NvbnN0IGw9RWQodGhpcy5lbGVtZW50''@;'; put 'put ''KS5zdHlsZTtsLnNjcm9sbFNuYXBUeXBlPWwubXNTY3JvbGxTbmFwVHlwZT10aGlzLl9pbml0aWFsU2Nyb2xsU25hcCx0aGlzLl9zaWJsaW5ncy5mb3JFYWNoKGE9PmEuX3N0b3BSZWNlaXZpbmcodGhpcykpLHRoaXMuX3NvcnRTdHJhdGVneS5yZXNldCgpLHRoaXMuX3N0b3BTY3JvbGxpbmco''@;'; put 'put ''KSx0aGlzLl92aWV3cG9ydFNjcm9sbFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX3BhcmVudFBvc2l0aW9ucy5jbGVhcigpfV9pc092ZXJDb250YWluZXIobCxhKXtyZXR1cm4gbnVsbCE9dGhpcy5fZG9tUmVjdCYmU1kodGhpcy5fZG9tUmVjdCxsLGEpfV9nZXRTaWJsaW5nQ29u''@;'; put 'put ''dGFpbmVyRnJvbVBvc2l0aW9uKGwsYSxkKXtyZXR1cm4gdGhpcy5fc2libGluZ3MuZmluZChoPT5oLl9jYW5SZWNlaXZlKGwsYSxkKSl9X2NhblJlY2VpdmUobCxhLGQpe2lmKCF0aGlzLl9kb21SZWN0fHwhU1kodGhpcy5fZG9tUmVjdCxhLGQpfHwhdGhpcy5lbnRlclByZWRpY2F0ZShsLHRo''@;'; put 'put ''aXMpKXJldHVybiExO2NvbnN0IGg9dGhpcy5fZ2V0U2hhZG93Um9vdCgpLmVsZW1lbnRGcm9tUG9pbnQoYSxkKTtpZighaClyZXR1cm4hMTtjb25zdCBmPUVkKHRoaXMuZWxlbWVudCk7cmV0dXJuIGg9PT1mfHxmLmNvbnRhaW5zKGgpfV9zdGFydFJlY2VpdmluZyhsLGEpe2NvbnN0IGQ9dGhp''@;'; put 'put ''cy5fYWN0aXZlU2libGluZ3M7IWQuaGFzKGwpJiZhLmV2ZXJ5KGg9PnRoaXMuZW50ZXJQcmVkaWNhdGUoaCx0aGlzKXx8dGhpcy5fZHJhZ2dhYmxlcy5pbmRleE9mKGgpPi0xKSYmKGQuYWRkKGwpLHRoaXMuX2NhY2hlUGFyZW50UG9zaXRpb25zKCksdGhpcy5fbGlzdGVuVG9TY3JvbGxFdmVu''@;'; put 'put ''dHMoKSx0aGlzLnJlY2VpdmluZ1N0YXJ0ZWQubmV4dCh7aW5pdGlhdG9yOmwscmVjZWl2ZXI6dGhpcyxpdGVtczphfSkpfV9zdG9wUmVjZWl2aW5nKGwpe3RoaXMuX2FjdGl2ZVNpYmxpbmdzLmRlbGV0ZShsKSx0aGlzLl92aWV3cG9ydFNjcm9sbFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgp''@;'; put 'put ''LHRoaXMucmVjZWl2aW5nU3RvcHBlZC5uZXh0KHtpbml0aWF0b3I6bCxyZWNlaXZlcjp0aGlzfSl9X2xpc3RlblRvU2Nyb2xsRXZlbnRzKCl7dGhpcy5fdmlld3BvcnRTY3JvbGxTdWJzY3JpcHRpb249dGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeS5zY3JvbGxlZCh0aGlzLl9nZXRTaGFkb3dSb290''@;'; put 'put ''KCkpLnN1YnNjcmliZShsPT57aWYodGhpcy5pc0RyYWdnaW5nKCkpe2NvbnN0IGE9dGhpcy5fcGFyZW50UG9zaXRpb25zLmhhbmRsZVNjcm9sbChsKTthJiZ0aGlzLl9zb3J0U3RyYXRlZ3kudXBkYXRlT25TY3JvbGwoYS50b3AsYS5sZWZ0KX1lbHNlIHRoaXMuaXNSZWNlaXZpbmcoKSYmdGhp''@;'; put 'put ''cy5fY2FjaGVQYXJlbnRQb3NpdGlvbnMoKX0pfV9nZXRTaGFkb3dSb290KCl7aWYoIXRoaXMuX2NhY2hlZFNoYWRvd1Jvb3Qpe2NvbnN0IGw9TzBlKEVkKHRoaXMuZWxlbWVudCkpO3RoaXMuX2NhY2hlZFNoYWRvd1Jvb3Q9bHx8dGhpcy5fZG9jdW1lbnR9cmV0dXJuIHRoaXMuX2NhY2hlZFNo''@;'; put 'put ''YWRvd1Jvb3R9X25vdGlmeVJlY2VpdmluZ1NpYmxpbmdzKCl7Y29uc3QgbD10aGlzLl9zb3J0U3RyYXRlZ3kuZ2V0QWN0aXZlSXRlbXNTbmFwc2hvdCgpLmZpbHRlcihhPT5hLmlzRHJhZ2dpbmcoKSk7dGhpcy5fc2libGluZ3MuZm9yRWFjaChhPT5hLl9zdGFydFJlY2VpdmluZyh0aGlzLGwp''@;'; put 'put ''KX19ZnVuY3Rpb24gcDFlKGMsbCl7Y29uc3R7dG9wOmEsYm90dG9tOmQsaGVpZ2h0Omh9PWMsZj0uMDUqaDtyZXR1cm4gbD49YS1mJiZsPD1hK2Y/RDIuVVA6bD49ZC1mJiZsPD1kK2Y/RDIuRE9XTjpEMi5OT05FfWZ1bmN0aW9uIGcxZShjLGwpe2NvbnN0e2xlZnQ6YSxyaWdodDpkLHdpZHRo''@;'; put 'put ''Omh9PWMsZj0uMDUqaDtyZXR1cm4gbD49YS1mJiZsPD1hK2Y/ajEuTEVGVDpsPj1kLWYmJmw8PWQrZj9qMS5SSUdIVDpqMS5OT05FfWNvbnN0IExMPUF5KHtwYXNzaXZlOiExLGNhcHR1cmU6ITB9KSxPTD1uZXcgU2V0O2xldCBVRmU9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVm''@;'; put 'put ''YWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbIm5nLWNvbXBvbmVudCJdXSxob3N0QXR0cnM6WyJjZGstZHJhZy1yZXNldHMtY29udGFpbmVyIiwiIl0sc3RhbmRhbG9uZTohMCxmZWF0dXJlczpbcUld''@;'; put 'put ''LGRlY2xzOjAsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7fSxzdHlsZXM6WyJAbGF5ZXIgY2RrLXJlc2V0c3suY2RrLWRyYWctcHJldmlld3tiYWNrZ3JvdW5kOm5vbmU7Ym9yZGVyOm5vbmU7cGFkZGluZzowO2NvbG9yOmluaGVyaXR9fSJdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VE''@;'; put 'put ''ZXRlY3Rpb246MH0pfX1yZXR1cm4gY30pKCksWkZlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLl9uZ1pvbmU9YSx0aGlzLl9hcHBSZWY9ZmkocTQpLHRoaXMuX2Vudmlyb25tZW50SW5qZWN0b3I9ZmkoaGMpLHRoaXMuX2Ryb3BJbnN0YW5jZXM9bmV3IFNldCx0aGlzLl9k''@;'; put 'put ''cmFnSW5zdGFuY2VzPW5ldyBTZXQsdGhpcy5fYWN0aXZlRHJhZ0luc3RhbmNlcz1bXSx0aGlzLl9nbG9iYWxMaXN0ZW5lcnM9bmV3IE1hcCx0aGlzLl9kcmFnZ2luZ1ByZWRpY2F0ZT1oPT5oLmlzRHJhZ2dpbmcoKSx0aGlzLnBvaW50ZXJNb3ZlPW5ldyBXbix0aGlzLnBvaW50ZXJVcD1uZXcg''@;'; put 'put ''V24sdGhpcy5zY3JvbGw9bmV3IFduLHRoaXMuX3ByZXZlbnREZWZhdWx0V2hpbGVEcmFnZ2luZz1oPT57dGhpcy5fYWN0aXZlRHJhZ0luc3RhbmNlcy5sZW5ndGg+MCYmaC5wcmV2ZW50RGVmYXVsdCgpfSx0aGlzLl9wZXJzaXN0ZW50VG91Y2htb3ZlTGlzdGVuZXI9aD0+e3RoaXMuX2FjdGl2''@;'; put 'put ''ZURyYWdJbnN0YW5jZXMubGVuZ3RoPjAmJih0aGlzLl9hY3RpdmVEcmFnSW5zdGFuY2VzLnNvbWUodGhpcy5fZHJhZ2dpbmdQcmVkaWNhdGUpJiZoLnByZXZlbnREZWZhdWx0KCksdGhpcy5wb2ludGVyTW92ZS5uZXh0KGgpKX0sdGhpcy5fZG9jdW1lbnQ9ZH1yZWdpc3RlckRyb3BDb250YWlu''@;'; put 'put ''ZXIoYSl7dGhpcy5fZHJvcEluc3RhbmNlcy5oYXMoYSl8fHRoaXMuX2Ryb3BJbnN0YW5jZXMuYWRkKGEpfXJlZ2lzdGVyRHJhZ0l0ZW0oYSl7dGhpcy5fZHJhZ0luc3RhbmNlcy5hZGQoYSksMT09PXRoaXMuX2RyYWdJbnN0YW5jZXMuc2l6ZSYmdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1''@;'; put 'put ''bGFyKCgpPT57dGhpcy5fZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIix0aGlzLl9wZXJzaXN0ZW50VG91Y2htb3ZlTGlzdGVuZXIsTEwpfSl9cmVtb3ZlRHJvcENvbnRhaW5lcihhKXt0aGlzLl9kcm9wSW5zdGFuY2VzLmRlbGV0ZShhKX1yZW1vdmVEcmFnSXRlbShhKXt0''@;'; put 'put ''aGlzLl9kcmFnSW5zdGFuY2VzLmRlbGV0ZShhKSx0aGlzLnN0b3BEcmFnZ2luZyhhKSwwPT09dGhpcy5fZHJhZ0luc3RhbmNlcy5zaXplJiZ0aGlzLl9kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaG1vdmUiLHRoaXMuX3BlcnNpc3RlbnRUb3VjaG1vdmVMaXN0ZW5lcixMTCl9''@;'; put 'put ''c3RhcnREcmFnZ2luZyhhLGQpe2lmKCEodGhpcy5fYWN0aXZlRHJhZ0luc3RhbmNlcy5pbmRleE9mKGEpPi0xKSYmKHRoaXMuX2xvYWRSZXNldHMoKSx0aGlzLl9hY3RpdmVEcmFnSW5zdGFuY2VzLnB1c2goYSksMT09PXRoaXMuX2FjdGl2ZURyYWdJbnN0YW5jZXMubGVuZ3RoKSl7Y29uc3Qg''@;'; put 'put ''aD1kLnR5cGUuc3RhcnRzV2l0aCgidG91Y2giKTt0aGlzLl9nbG9iYWxMaXN0ZW5lcnMuc2V0KGg/InRvdWNoZW5kIjoibW91c2V1cCIse2hhbmRsZXI6Zj0+dGhpcy5wb2ludGVyVXAubmV4dChmKSxvcHRpb25zOiEwfSkuc2V0KCJzY3JvbGwiLHtoYW5kbGVyOmY9PnRoaXMuc2Nyb2xsLm5l''@;'; put 'put ''eHQoZiksb3B0aW9uczohMH0pLnNldCgic2VsZWN0c3RhcnQiLHtoYW5kbGVyOnRoaXMuX3ByZXZlbnREZWZhdWx0V2hpbGVEcmFnZ2luZyxvcHRpb25zOkxMfSksaHx8dGhpcy5fZ2xvYmFsTGlzdGVuZXJzLnNldCgibW91c2Vtb3ZlIix7aGFuZGxlcjpmPT50aGlzLnBvaW50ZXJNb3ZlLm5l''@;'; put 'put ''eHQoZiksb3B0aW9uczpMTH0pLHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuX2dsb2JhbExpc3RlbmVycy5mb3JFYWNoKChmLHYpPT57dGhpcy5fZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcih2LGYuaGFuZGxlcixmLm9wdGlvbnMpfSl9KX19c3RvcERyYWdnaW5n''@;'; put 'put ''KGEpe2NvbnN0IGQ9dGhpcy5fYWN0aXZlRHJhZ0luc3RhbmNlcy5pbmRleE9mKGEpO2Q+LTEmJih0aGlzLl9hY3RpdmVEcmFnSW5zdGFuY2VzLnNwbGljZShkLDEpLDA9PT10aGlzLl9hY3RpdmVEcmFnSW5zdGFuY2VzLmxlbmd0aCYmdGhpcy5fY2xlYXJHbG9iYWxMaXN0ZW5lcnMoKSl9aXNE''@;'; put 'put ''cmFnZ2luZyhhKXtyZXR1cm4gdGhpcy5fYWN0aXZlRHJhZ0luc3RhbmNlcy5pbmRleE9mKGEpPi0xfXNjcm9sbGVkKGEpe2NvbnN0IGQ9W3RoaXMuc2Nyb2xsXTtyZXR1cm4gYSYmYSE9PXRoaXMuX2RvY3VtZW50JiZkLnB1c2gobmV3IFh0KGg9PnRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5n''@;'; put 'put ''dWxhcigoKT0+e2NvbnN0IHY9TT0+e3RoaXMuX2FjdGl2ZURyYWdJbnN0YW5jZXMubGVuZ3RoJiZoLm5leHQoTSl9O3JldHVybiBhLmFkZEV2ZW50TGlzdGVuZXIoInNjcm9sbCIsdiwhMCksKCk9PnthLnJlbW92ZUV2ZW50TGlzdGVuZXIoInNjcm9sbCIsdiwhMCl9fSkpKSxfeCguLi5kKX1u''@;'; put 'put ''Z09uRGVzdHJveSgpe3RoaXMuX2RyYWdJbnN0YW5jZXMuZm9yRWFjaChhPT50aGlzLnJlbW92ZURyYWdJdGVtKGEpKSx0aGlzLl9kcm9wSW5zdGFuY2VzLmZvckVhY2goYT0+dGhpcy5yZW1vdmVEcm9wQ29udGFpbmVyKGEpKSx0aGlzLl9jbGVhckdsb2JhbExpc3RlbmVycygpLHRoaXMucG9p''@;'; put 'put ''bnRlck1vdmUuY29tcGxldGUoKSx0aGlzLnBvaW50ZXJVcC5jb21wbGV0ZSgpfV9jbGVhckdsb2JhbExpc3RlbmVycygpe3RoaXMuX2dsb2JhbExpc3RlbmVycy5mb3JFYWNoKChhLGQpPT57dGhpcy5fZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihkLGEuaGFuZGxlcixhLm9wdGlvbnMp''@;'; put 'put ''fSksdGhpcy5fZ2xvYmFsTGlzdGVuZXJzLmNsZWFyKCl9X2xvYWRSZXNldHMoKXtpZighT0wuaGFzKHRoaXMuX2FwcFJlZikpe09MLmFkZCh0aGlzLl9hcHBSZWYpO2NvbnN0IGE9ZnVuY3Rpb24gZF9lKGMsbCl7Y29uc3QgYT1WbyhjKSxkPWwuZWxlbWVudEluamVjdG9yfHxIMygpO3JldHVy''@;'; put 'put ''biBuZXcgazgoYSkuY3JlYXRlKGQsbC5wcm9qZWN0YWJsZU5vZGVzLGwuaG9zdEVsZW1lbnQsbC5lbnZpcm9ubWVudEluamVjdG9yKX0oVUZlLHtlbnZpcm9ubWVudEluamVjdG9yOnRoaXMuX2Vudmlyb25tZW50SW5qZWN0b3J9KTt0aGlzLl9hcHBSZWYub25EZXN0cm95KCgpPT57T0wuZGVs''@;'; put 'put ''ZXRlKHRoaXMuX2FwcFJlZiksMD09PU9MLnNpemUmJmEuZGVzdHJveSgpfSl9fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHhyKFdhKSx4cih2cykpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVm''@;'; put 'put ''YWMscHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0dXJuIGN9KSgpO2NvbnN0IFdGZT17ZHJhZ1N0YXJ0VGhyZXNob2xkOjUscG9pbnRlckRpcmVjdGlvbkNoYW5nZVRocmVzaG9sZDo1fTtsZXQgUEw9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLl9kb2N1bWVudD1hLHRo''@;'; put 'put ''aXMuX25nWm9uZT1kLHRoaXMuX3ZpZXdwb3J0UnVsZXI9aCx0aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5PWZ9Y3JlYXRlRHJhZyhhLGQ9V0ZlKXtyZXR1cm4gbmV3IE5GZShhLGQsdGhpcy5fZG9jdW1lbnQsdGhpcy5fbmdab25lLHRoaXMuX3ZpZXdwb3J0UnVsZXIsdGhpcy5fZHJhZ0Ryb3BSZWdp''@;'; put 'put ''c3RyeSl9Y3JlYXRlRHJvcExpc3QoYSl7cmV0dXJuIG5ldyBqRmUoYSx0aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5LHRoaXMuX2RvY3VtZW50LHRoaXMuX25nWm9uZSx0aGlzLl92aWV3cG9ydFJ1bGVyKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKSh4''@;'; put 'put ''cih2cykseHIoV2EpLHhyKEFMKSx4cihaRmUpKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9fXJldHVybiBjfSkoKTtjb25zdCBreD1uZXcgU3QoIkNES19EUkFHX1BBUkVOVCIpLG0xZT1uZXcgU3Qo''@;'; put 'put ''IkNka0RyYWdIYW5kbGUiKTtsZXQgdjFlPSgoKT0+e2NsYXNzIGN7Z2V0IGRpc2FibGVkKCl7cmV0dXJuIHRoaXMuX2Rpc2FibGVkfXNldCBkaXNhYmxlZChhKXt0aGlzLl9kaXNhYmxlZD1hLHRoaXMuX3N0YXRlQ2hhbmdlcy5uZXh0KHRoaXMpfWNvbnN0cnVjdG9yKGEsZCl7dGhpcy5lbGVt''@;'; put 'put ''ZW50PWEsdGhpcy5fcGFyZW50RHJhZz1kLHRoaXMuX3N0YXRlQ2hhbmdlcz1uZXcgV24sdGhpcy5fZGlzYWJsZWQ9ITEsZD8uX2FkZEhhbmRsZSh0aGlzKX1uZ09uRGVzdHJveSgpe3RoaXMuX3BhcmVudERyYWc/Ll9yZW1vdmVIYW5kbGUodGhpcyksdGhpcy5fc3RhdGVDaGFuZ2VzLmNvbXBs''@;'; put 'put ''ZXRlKCl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoSmkpLEdlKGt4LDEyKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjZGtEcmFnSGFuZGxlIiwiIl1dLGhvc3RBdHRyczpbMSwiY2RrLWRy''@;'; put 'put ''YWctaGFuZGxlIl0saW5wdXRzOntkaXNhYmxlZDpbTm4uSGFzRGVjb3JhdG9ySW5wdXRUcmFuc2Zvcm0sImNka0RyYWdIYW5kbGVEaXNhYmxlZCIsImRpc2FibGVkIixzMV19LHN0YW5kYWxvbmU6ITAsZmVhdHVyZXM6W2RhKFt7cHJvdmlkZTptMWUsdXNlRXhpc3Rpbmc6Y31dKSxXbF19KX19''@;'; put 'put ''cmV0dXJuIGN9KSgpO2NvbnN0IHhZPW5ldyBTdCgiQ0RLX0RSQUdfQ09ORklHIiksRVk9bmV3IFN0KCJDZGtEcm9wTGlzdCIpO2xldCBUWT0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLl9kcmFnSW5zdGFuY2VzPVtdfWdldCBkaXNhYmxlZCgpe3JldHVybiB0aGlzLl9kaXNhYmxlZHx8dGhp''@;'; put 'put ''cy5kcm9wQ29udGFpbmVyJiZ0aGlzLmRyb3BDb250YWluZXIuZGlzYWJsZWR9c2V0IGRpc2FibGVkKGEpe3RoaXMuX2Rpc2FibGVkPWEsdGhpcy5fZHJhZ1JlZi5kaXNhYmxlZD10aGlzLl9kaXNhYmxlZH1jb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSxELFoscmUsY2UsYmUpe3RoaXMuZWxlbWVu''@;'; put 'put ''dD1hLHRoaXMuZHJvcENvbnRhaW5lcj1kLHRoaXMuX25nWm9uZT1mLHRoaXMuX3ZpZXdDb250YWluZXJSZWY9dix0aGlzLl9kaXI9RCx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1yZSx0aGlzLl9zZWxmSGFuZGxlPWNlLHRoaXMuX3BhcmVudERyYWc9YmUsdGhpcy5fZGVzdHJveWVkPW5ldyBX''@;'; put 'put ''bix0aGlzLl9oYW5kbGVzPW5ldyBlaShbXSksdGhpcy5zdGFydGVkPW5ldyBLcix0aGlzLnJlbGVhc2VkPW5ldyBLcix0aGlzLmVuZGVkPW5ldyBLcix0aGlzLmVudGVyZWQ9bmV3IEtyLHRoaXMuZXhpdGVkPW5ldyBLcix0aGlzLmRyb3BwZWQ9bmV3IEtyLHRoaXMubW92ZWQ9bmV3IFh0KEVl''@;'; put 'put ''PT57Y29uc3QgQmU9dGhpcy5fZHJhZ1JlZi5tb3ZlZC5waXBlKExyKHFlPT4oe3NvdXJjZTp0aGlzLHBvaW50ZXJQb3NpdGlvbjpxZS5wb2ludGVyUG9zaXRpb24sZXZlbnQ6cWUuZXZlbnQsZGVsdGE6cWUuZGVsdGEsZGlzdGFuY2U6cWUuZGlzdGFuY2V9KSkpLnN1YnNjcmliZShFZSk7cmV0''@;'; put 'put ''dXJuKCk9PntCZS51bnN1YnNjcmliZSgpfX0pLHRoaXMuX2RyYWdSZWY9Wi5jcmVhdGVEcmFnKGEse2RyYWdTdGFydFRocmVzaG9sZDpNJiZudWxsIT1NLmRyYWdTdGFydFRocmVzaG9sZD9NLmRyYWdTdGFydFRocmVzaG9sZDo1LHBvaW50ZXJEaXJlY3Rpb25DaGFuZ2VUaHJlc2hvbGQ6TSYm''@;'; put 'put ''bnVsbCE9TS5wb2ludGVyRGlyZWN0aW9uQ2hhbmdlVGhyZXNob2xkP00ucG9pbnRlckRpcmVjdGlvbkNoYW5nZVRocmVzaG9sZDo1LHpJbmRleDpNPy56SW5kZXh9KSx0aGlzLl9kcmFnUmVmLmRhdGE9dGhpcyxjLl9kcmFnSW5zdGFuY2VzLnB1c2godGhpcyksTSYmdGhpcy5fYXNzaWduRGVm''@;'; put 'put ''YXVsdHMoTSksZCYmKHRoaXMuX2RyYWdSZWYuX3dpdGhEcm9wQ29udGFpbmVyKGQuX2Ryb3BMaXN0UmVmKSxkLmFkZEl0ZW0odGhpcykpLHRoaXMuX3N5bmNJbnB1dHModGhpcy5fZHJhZ1JlZiksdGhpcy5faGFuZGxlRXZlbnRzKHRoaXMuX2RyYWdSZWYpfWdldFBsYWNlaG9sZGVyRWxlbWVu''@;'; put 'put ''dCgpe3JldHVybiB0aGlzLl9kcmFnUmVmLmdldFBsYWNlaG9sZGVyRWxlbWVudCgpfWdldFJvb3RFbGVtZW50KCl7cmV0dXJuIHRoaXMuX2RyYWdSZWYuZ2V0Um9vdEVsZW1lbnQoKX1yZXNldCgpe3RoaXMuX2RyYWdSZWYucmVzZXQoKX1nZXRGcmVlRHJhZ1Bvc2l0aW9uKCl7cmV0dXJuIHRo''@;'; put 'put ''aXMuX2RyYWdSZWYuZ2V0RnJlZURyYWdQb3NpdGlvbigpfXNldEZyZWVEcmFnUG9zaXRpb24oYSl7dGhpcy5fZHJhZ1JlZi5zZXRGcmVlRHJhZ1Bvc2l0aW9uKGEpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuX25nWm9uZS5vblN0''@;'; put 'put ''YWJsZS5waXBlKFlmKDEpLFYwKHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSgoKT0+e3RoaXMuX3VwZGF0ZVJvb3RFbGVtZW50KCksdGhpcy5fc2V0dXBIYW5kbGVzTGlzdGVuZXIoKSx0aGlzLmZyZWVEcmFnUG9zaXRpb24mJnRoaXMuX2RyYWdSZWYuc2V0RnJlZURyYWdQb3NpdGlvbih0''@;'; put 'put ''aGlzLmZyZWVEcmFnUG9zaXRpb24pfSl9KX1uZ09uQ2hhbmdlcyhhKXtjb25zdCBkPWEucm9vdEVsZW1lbnRTZWxlY3RvcixoPWEuZnJlZURyYWdQb3NpdGlvbjtkJiYhZC5maXJzdENoYW5nZSYmdGhpcy5fdXBkYXRlUm9vdEVsZW1lbnQoKSxoJiYhaC5maXJzdENoYW5nZSYmdGhpcy5mcmVl''@;'; put 'put ''RHJhZ1Bvc2l0aW9uJiZ0aGlzLl9kcmFnUmVmLnNldEZyZWVEcmFnUG9zaXRpb24odGhpcy5mcmVlRHJhZ1Bvc2l0aW9uKX1uZ09uRGVzdHJveSgpe3RoaXMuZHJvcENvbnRhaW5lciYmdGhpcy5kcm9wQ29udGFpbmVyLnJlbW92ZUl0ZW0odGhpcyk7Y29uc3QgYT1jLl9kcmFnSW5zdGFuY2Vz''@;'; put 'put ''LmluZGV4T2YodGhpcyk7YT4tMSYmYy5fZHJhZ0luc3RhbmNlcy5zcGxpY2UoYSwxKSx0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLl9oYW5kbGVzLmNvbXBsZXRlKCksdGhpcy5fZGVzdHJveWVkLm5leHQoKSx0aGlzLl9kZXN0cm95ZWQuY29tcGxldGUoKSx0aGlz''@;'; put 'put ''Ll9kcmFnUmVmLmRpc3Bvc2UoKX0pfV9hZGRIYW5kbGUoYSl7Y29uc3QgZD10aGlzLl9oYW5kbGVzLmdldFZhbHVlKCk7ZC5wdXNoKGEpLHRoaXMuX2hhbmRsZXMubmV4dChkKX1fcmVtb3ZlSGFuZGxlKGEpe2NvbnN0IGQ9dGhpcy5faGFuZGxlcy5nZXRWYWx1ZSgpLGg9ZC5pbmRleE9mKGEp''@;'; put 'put ''O2g+LTEmJihkLnNwbGljZShoLDEpLHRoaXMuX2hhbmRsZXMubmV4dChkKSl9X3NldFByZXZpZXdUZW1wbGF0ZShhKXt0aGlzLl9wcmV2aWV3VGVtcGxhdGU9YX1fcmVzZXRQcmV2aWV3VGVtcGxhdGUoYSl7YT09PXRoaXMuX3ByZXZpZXdUZW1wbGF0ZSYmKHRoaXMuX3ByZXZpZXdUZW1wbGF0''@;'; put 'put ''ZT1udWxsKX1fc2V0UGxhY2Vob2xkZXJUZW1wbGF0ZShhKXt0aGlzLl9wbGFjZWhvbGRlclRlbXBsYXRlPWF9X3Jlc2V0UGxhY2Vob2xkZXJUZW1wbGF0ZShhKXthPT09dGhpcy5fcGxhY2Vob2xkZXJUZW1wbGF0ZSYmKHRoaXMuX3BsYWNlaG9sZGVyVGVtcGxhdGU9bnVsbCl9X3VwZGF0ZVJv''@;'; put 'put ''b3RFbGVtZW50KCl7Y29uc3QgYT10aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudDtsZXQgZD1hO3RoaXMucm9vdEVsZW1lbnRTZWxlY3RvciYmKGQ9dm9pZCAwIT09YS5jbG9zZXN0P2EuY2xvc2VzdCh0aGlzLnJvb3RFbGVtZW50U2VsZWN0b3IpOmEucGFyZW50RWxlbWVudD8uY2xvc2VzdCh0''@;'; put 'put ''aGlzLnJvb3RFbGVtZW50U2VsZWN0b3IpKSx0aGlzLl9kcmFnUmVmLndpdGhSb290RWxlbWVudChkfHxhKX1fZ2V0Qm91bmRhcnlFbGVtZW50KCl7Y29uc3QgYT10aGlzLmJvdW5kYXJ5RWxlbWVudDtyZXR1cm4gYT8ic3RyaW5nIj09dHlwZW9mIGE/dGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1l''@;'; put 'put ''bnQuY2xvc2VzdChhKTpFZChhKTpudWxsfV9zeW5jSW5wdXRzKGEpe2EuYmVmb3JlU3RhcnRlZC5zdWJzY3JpYmUoKCk9PntpZighYS5pc0RyYWdnaW5nKCkpe2NvbnN0IGQ9dGhpcy5fZGlyLGg9dGhpcy5kcmFnU3RhcnREZWxheSxmPXRoaXMuX3BsYWNlaG9sZGVyVGVtcGxhdGU/e3RlbXBs''@;'; put 'put ''YXRlOnRoaXMuX3BsYWNlaG9sZGVyVGVtcGxhdGUudGVtcGxhdGVSZWYsY29udGV4dDp0aGlzLl9wbGFjZWhvbGRlclRlbXBsYXRlLmRhdGEsdmlld0NvbnRhaW5lcjp0aGlzLl92aWV3Q29udGFpbmVyUmVmfTpudWxsLHY9dGhpcy5fcHJldmlld1RlbXBsYXRlP3t0ZW1wbGF0ZTp0aGlzLl9w''@;'; put 'put ''cmV2aWV3VGVtcGxhdGUudGVtcGxhdGVSZWYsY29udGV4dDp0aGlzLl9wcmV2aWV3VGVtcGxhdGUuZGF0YSxtYXRjaFNpemU6dGhpcy5fcHJldmlld1RlbXBsYXRlLm1hdGNoU2l6ZSx2aWV3Q29udGFpbmVyOnRoaXMuX3ZpZXdDb250YWluZXJSZWZ9Om51bGw7YS5kaXNhYmxlZD10aGlzLmRp''@;'; put 'put ''c2FibGVkLGEubG9ja0F4aXM9dGhpcy5sb2NrQXhpcyxhLmRyYWdTdGFydERlbGF5PSJvYmplY3QiPT10eXBlb2YgaCYmaD9oOmQ3KGgpLGEuY29uc3RyYWluUG9zaXRpb249dGhpcy5jb25zdHJhaW5Qb3NpdGlvbixhLnByZXZpZXdDbGFzcz10aGlzLnByZXZpZXdDbGFzcyxhLndpdGhCb3Vu''@;'; put 'put ''ZGFyeUVsZW1lbnQodGhpcy5fZ2V0Qm91bmRhcnlFbGVtZW50KCkpLndpdGhQbGFjZWhvbGRlclRlbXBsYXRlKGYpLndpdGhQcmV2aWV3VGVtcGxhdGUodikud2l0aFByZXZpZXdDb250YWluZXIodGhpcy5wcmV2aWV3Q29udGFpbmVyfHwiZ2xvYmFsIiksZCYmYS53aXRoRGlyZWN0aW9uKGQu''@;'; put 'put ''dmFsdWUpfX0pLGEuYmVmb3JlU3RhcnRlZC5waXBlKFlmKDEpKS5zdWJzY3JpYmUoKCk9PntpZih0aGlzLl9wYXJlbnREcmFnKXJldHVybiB2b2lkIGEud2l0aFBhcmVudCh0aGlzLl9wYXJlbnREcmFnLl9kcmFnUmVmKTtsZXQgZD10aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5wYXJlbnRF''@;'; put 'put ''bGVtZW50O2Zvcig7ZDspe2lmKGQuY2xhc3NMaXN0LmNvbnRhaW5zKCJjZGstZHJhZyIpKXthLndpdGhQYXJlbnQoYy5fZHJhZ0luc3RhbmNlcy5maW5kKGg9PmguZWxlbWVudC5uYXRpdmVFbGVtZW50PT09ZCk/Ll9kcmFnUmVmfHxudWxsKTticmVha31kPWQucGFyZW50RWxlbWVudH19KX1f''@;'; put 'put ''aGFuZGxlRXZlbnRzKGEpe2Euc3RhcnRlZC5zdWJzY3JpYmUoZD0+e3RoaXMuc3RhcnRlZC5lbWl0KHtzb3VyY2U6dGhpcyxldmVudDpkLmV2ZW50fSksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9KSxhLnJlbGVhc2VkLnN1YnNjcmliZShkPT57dGhpcy5yZWxlYXNl''@;'; put 'put ''ZC5lbWl0KHtzb3VyY2U6dGhpcyxldmVudDpkLmV2ZW50fSl9KSxhLmVuZGVkLnN1YnNjcmliZShkPT57dGhpcy5lbmRlZC5lbWl0KHtzb3VyY2U6dGhpcyxkaXN0YW5jZTpkLmRpc3RhbmNlLGRyb3BQb2ludDpkLmRyb3BQb2ludCxldmVudDpkLmV2ZW50fSksdGhpcy5fY2hhbmdlRGV0ZWN0''@;'; put 'put ''b3JSZWYubWFya0ZvckNoZWNrKCl9KSxhLmVudGVyZWQuc3Vic2NyaWJlKGQ9Pnt0aGlzLmVudGVyZWQuZW1pdCh7Y29udGFpbmVyOmQuY29udGFpbmVyLmRhdGEsaXRlbTp0aGlzLGN1cnJlbnRJbmRleDpkLmN1cnJlbnRJbmRleH0pfSksYS5leGl0ZWQuc3Vic2NyaWJlKGQ9Pnt0aGlzLmV4''@;'; put 'put ''aXRlZC5lbWl0KHtjb250YWluZXI6ZC5jb250YWluZXIuZGF0YSxpdGVtOnRoaXN9KX0pLGEuZHJvcHBlZC5zdWJzY3JpYmUoZD0+e3RoaXMuZHJvcHBlZC5lbWl0KHtwcmV2aW91c0luZGV4OmQucHJldmlvdXNJbmRleCxjdXJyZW50SW5kZXg6ZC5jdXJyZW50SW5kZXgscHJldmlvdXNDb250''@;'; put 'put ''YWluZXI6ZC5wcmV2aW91c0NvbnRhaW5lci5kYXRhLGNvbnRhaW5lcjpkLmNvbnRhaW5lci5kYXRhLGlzUG9pbnRlck92ZXJDb250YWluZXI6ZC5pc1BvaW50ZXJPdmVyQ29udGFpbmVyLGl0ZW06dGhpcyxkaXN0YW5jZTpkLmRpc3RhbmNlLGRyb3BQb2ludDpkLmRyb3BQb2ludCxldmVudDpk''@;'; put 'put ''LmV2ZW50fSl9KX1fYXNzaWduRGVmYXVsdHMoYSl7Y29uc3R7bG9ja0F4aXM6ZCxkcmFnU3RhcnREZWxheTpoLGNvbnN0cmFpblBvc2l0aW9uOmYscHJldmlld0NsYXNzOnYsYm91bmRhcnlFbGVtZW50Ok0sZHJhZ2dpbmdEaXNhYmxlZDpELHJvb3RFbGVtZW50U2VsZWN0b3I6WixwcmV2aWV3''@;'; put 'put ''Q29udGFpbmVyOnJlfT1hO3RoaXMuZGlzYWJsZWQ9RD8/ITEsdGhpcy5kcmFnU3RhcnREZWxheT1ofHwwLGQmJih0aGlzLmxvY2tBeGlzPWQpLGYmJih0aGlzLmNvbnN0cmFpblBvc2l0aW9uPWYpLHYmJih0aGlzLnByZXZpZXdDbGFzcz12KSxNJiYodGhpcy5ib3VuZGFyeUVsZW1lbnQ9TSks''@;'; put 'put ''WiYmKHRoaXMucm9vdEVsZW1lbnRTZWxlY3Rvcj1aKSxyZSYmKHRoaXMucHJldmlld0NvbnRhaW5lcj1yZSl9X3NldHVwSGFuZGxlc0xpc3RlbmVyKCl7dGhpcy5faGFuZGxlcy5waXBlKEd1KGE9Pntjb25zdCBkPWEubWFwKGg9PmguZWxlbWVudCk7dGhpcy5fc2VsZkhhbmRsZSYmdGhpcy5y''@;'; put 'put ''b290RWxlbWVudFNlbGVjdG9yJiZkLnB1c2godGhpcy5lbGVtZW50KSx0aGlzLl9kcmFnUmVmLndpdGhIYW5kbGVzKGQpfSksVjEoYT0+X3goLi4uYS5tYXAoZD0+ZC5fc3RhdGVDaGFuZ2VzLnBpcGUoeDIoZCkpKSkpLFYwKHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZShhPT57Y29uc3Qg''@;'; put 'put ''ZD10aGlzLl9kcmFnUmVmLGg9YS5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7YS5kaXNhYmxlZD9kLmRpc2FibGVIYW5kbGUoaCk6ZC5lbmFibGVIYW5kbGUoaCl9KX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZShKaSksR2UoRVksMTIpLEdlKHZz''@;'; put 'put ''KSxHZShXYSksR2UoRG8pLEdlKHhZLDgpLEdlKHBtLDgpLEdlKFBMKSxHZShFcyksR2UobTFlLDEwKSxHZShreCwxMikpfX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2RrRHJhZyIsIiJdXSxob3N0QXR0cnM6WzEsImNkay1kcmFnIl0saG9zdFZh''@;'; put 'put ''cnM6NCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZCxoKXsyJmQmJlRyKCJjZGstZHJhZy1kaXNhYmxlZCIsaC5kaXNhYmxlZCkoImNkay1kcmFnLWRyYWdnaW5nIixoLl9kcmFnUmVmLmlzRHJhZ2dpbmcoKSl9LGlucHV0czp7ZGF0YTpbTm4uTm9uZSwiY2RrRHJhZ0RhdGEiLCJkYXRhIl0sbG9j''@;'; put 'put ''a0F4aXM6W05uLk5vbmUsImNka0RyYWdMb2NrQXhpcyIsImxvY2tBeGlzIl0scm9vdEVsZW1lbnRTZWxlY3RvcjpbTm4uTm9uZSwiY2RrRHJhZ1Jvb3RFbGVtZW50Iiwicm9vdEVsZW1lbnRTZWxlY3RvciJdLGJvdW5kYXJ5RWxlbWVudDpbTm4uTm9uZSwiY2RrRHJhZ0JvdW5kYXJ5IiwiYm91''@;'; put 'put ''bmRhcnlFbGVtZW50Il0sZHJhZ1N0YXJ0RGVsYXk6W05uLk5vbmUsImNka0RyYWdTdGFydERlbGF5IiwiZHJhZ1N0YXJ0RGVsYXkiXSxmcmVlRHJhZ1Bvc2l0aW9uOltObi5Ob25lLCJjZGtEcmFnRnJlZURyYWdQb3NpdGlvbiIsImZyZWVEcmFnUG9zaXRpb24iXSxkaXNhYmxlZDpbTm4uSGFz''@;'; put 'put ''RGVjb3JhdG9ySW5wdXRUcmFuc2Zvcm0sImNka0RyYWdEaXNhYmxlZCIsImRpc2FibGVkIixzMV0sY29uc3RyYWluUG9zaXRpb246W05uLk5vbmUsImNka0RyYWdDb25zdHJhaW5Qb3NpdGlvbiIsImNvbnN0cmFpblBvc2l0aW9uIl0scHJldmlld0NsYXNzOltObi5Ob25lLCJjZGtEcmFnUHJl''@;'; put 'put ''dmlld0NsYXNzIiwicHJldmlld0NsYXNzIl0scHJldmlld0NvbnRhaW5lcjpbTm4uTm9uZSwiY2RrRHJhZ1ByZXZpZXdDb250YWluZXIiLCJwcmV2aWV3Q29udGFpbmVyIl19LG91dHB1dHM6e3N0YXJ0ZWQ6ImNka0RyYWdTdGFydGVkIixyZWxlYXNlZDoiY2RrRHJhZ1JlbGVhc2VkIixlbmRl''@;'; put 'put ''ZDoiY2RrRHJhZ0VuZGVkIixlbnRlcmVkOiJjZGtEcmFnRW50ZXJlZCIsZXhpdGVkOiJjZGtEcmFnRXhpdGVkIixkcm9wcGVkOiJjZGtEcmFnRHJvcHBlZCIsbW92ZWQ6ImNka0RyYWdNb3ZlZCJ9LGV4cG9ydEFzOlsiY2RrRHJhZyJdLHN0YW5kYWxvbmU6ITAsZmVhdHVyZXM6W2RhKFt7cHJv''@;'; put 'put ''dmlkZTpreCx1c2VFeGlzdGluZzpjfV0pLFdsLHdsXX0pfX1yZXR1cm4gY30pKCk7Y29uc3QgQVk9bmV3IFN0KCJDZGtEcm9wTGlzdEdyb3VwIik7bGV0IGIxZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5faXRlbXM9bmV3IFNldCx0aGlzLmRpc2FibGVkPSExfW5nT25EZXN0''@;'; put 'put ''cm95KCl7dGhpcy5faXRlbXMuY2xlYXIoKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNka0Ryb3BMaXN0R3JvdXAiLCIiXV0saW5wdXRzOntkaXNhYmxl''@;'; put 'put ''ZDpbTm4uSGFzRGVjb3JhdG9ySW5wdXRUcmFuc2Zvcm0sImNka0Ryb3BMaXN0R3JvdXBEaXNhYmxlZCIsImRpc2FibGVkIixzMV19LGV4cG9ydEFzOlsiY2RrRHJvcExpc3RHcm91cCJdLHN0YW5kYWxvbmU6ITAsZmVhdHVyZXM6W2RhKFt7cHJvdmlkZTpBWSx1c2VFeGlzdGluZzpjfV0pLFds''@;'; put 'put ''XX0pfX1yZXR1cm4gY30pKCksR0ZlPTAseTFlPSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuX2Ryb3BMaXN0cz1bXX1nZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5fZGlzYWJsZWR8fCEhdGhpcy5fZ3JvdXAmJnRoaXMuX2dyb3VwLmRpc2FibGVkfXNldCBkaXNhYmxlZChhKXt0aGlzLl9k''@;'; put 'put ''cm9wTGlzdFJlZi5kaXNhYmxlZD10aGlzLl9kaXNhYmxlZD1hfWNvbnN0cnVjdG9yKGEsZCxoLGYsdixNLEQpe3RoaXMuZWxlbWVudD1hLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPWgsdGhpcy5fc2Nyb2xsRGlzcGF0Y2hlcj1mLHRoaXMuX2Rpcj12LHRoaXMuX2dyb3VwPU0sdGhpcy5fZGVz''@;'; put 'put ''dHJveWVkPW5ldyBXbix0aGlzLmNvbm5lY3RlZFRvPVtdLHRoaXMuaWQ9ImNkay1kcm9wLWxpc3QtIitHRmUrKyx0aGlzLmVudGVyUHJlZGljYXRlPSgpPT4hMCx0aGlzLnNvcnRQcmVkaWNhdGU9KCk9PiEwLHRoaXMuZHJvcHBlZD1uZXcgS3IsdGhpcy5lbnRlcmVkPW5ldyBLcix0aGlzLmV4''@;'; put 'put ''aXRlZD1uZXcgS3IsdGhpcy5zb3J0ZWQ9bmV3IEtyLHRoaXMuX3Vuc29ydGVkSXRlbXM9bmV3IFNldCx0aGlzLl9kcm9wTGlzdFJlZj1kLmNyZWF0ZURyb3BMaXN0KGEpLHRoaXMuX2Ryb3BMaXN0UmVmLmRhdGE9dGhpcyxEJiZ0aGlzLl9hc3NpZ25EZWZhdWx0cyhEKSx0aGlzLl9kcm9wTGlz''@;'; put 'put ''dFJlZi5lbnRlclByZWRpY2F0ZT0oWixyZSk9PnRoaXMuZW50ZXJQcmVkaWNhdGUoWi5kYXRhLHJlLmRhdGEpLHRoaXMuX2Ryb3BMaXN0UmVmLnNvcnRQcmVkaWNhdGU9KFoscmUsY2UpPT50aGlzLnNvcnRQcmVkaWNhdGUoWixyZS5kYXRhLGNlLmRhdGEpLHRoaXMuX3NldHVwSW5wdXRTeW5j''@;'; put 'put ''U3Vic2NyaXB0aW9uKHRoaXMuX2Ryb3BMaXN0UmVmKSx0aGlzLl9oYW5kbGVFdmVudHModGhpcy5fZHJvcExpc3RSZWYpLGMuX2Ryb3BMaXN0cy5wdXNoKHRoaXMpLE0mJk0uX2l0ZW1zLmFkZCh0aGlzKX1hZGRJdGVtKGEpe3RoaXMuX3Vuc29ydGVkSXRlbXMuYWRkKGEpLHRoaXMuX2Ryb3BM''@;'; put 'put ''aXN0UmVmLmlzRHJhZ2dpbmcoKSYmdGhpcy5fc3luY0l0ZW1zV2l0aFJlZigpfXJlbW92ZUl0ZW0oYSl7dGhpcy5fdW5zb3J0ZWRJdGVtcy5kZWxldGUoYSksdGhpcy5fZHJvcExpc3RSZWYuaXNEcmFnZ2luZygpJiZ0aGlzLl9zeW5jSXRlbXNXaXRoUmVmKCl9Z2V0U29ydGVkSXRlbXMoKXty''@;'; put 'put ''ZXR1cm4gQXJyYXkuZnJvbSh0aGlzLl91bnNvcnRlZEl0ZW1zKS5zb3J0KChhLGQpPT5hLl9kcmFnUmVmLmdldFZpc2libGVFbGVtZW50KCkuY29tcGFyZURvY3VtZW50UG9zaXRpb24oZC5fZHJhZ1JlZi5nZXRWaXNpYmxlRWxlbWVudCgpKSZOb2RlLkRPQ1VNRU5UX1BPU0lUSU9OX0ZPTExP''@;'; put 'put ''V0lORz8tMToxKX1uZ09uRGVzdHJveSgpe2NvbnN0IGE9Yy5fZHJvcExpc3RzLmluZGV4T2YodGhpcyk7YT4tMSYmYy5fZHJvcExpc3RzLnNwbGljZShhLDEpLHRoaXMuX2dyb3VwJiZ0aGlzLl9ncm91cC5faXRlbXMuZGVsZXRlKHRoaXMpLHRoaXMuX3Vuc29ydGVkSXRlbXMuY2xlYXIoKSx0''@;'; put 'put ''aGlzLl9kcm9wTGlzdFJlZi5kaXNwb3NlKCksdGhpcy5fZGVzdHJveWVkLm5leHQoKSx0aGlzLl9kZXN0cm95ZWQuY29tcGxldGUoKX1fc2V0dXBJbnB1dFN5bmNTdWJzY3JpcHRpb24oYSl7dGhpcy5fZGlyJiZ0aGlzLl9kaXIuY2hhbmdlLnBpcGUoeDIodGhpcy5fZGlyLnZhbHVlKSxWMCh0''@;'; put 'put ''aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoZD0+YS53aXRoRGlyZWN0aW9uKGQpKSxhLmJlZm9yZVN0YXJ0ZWQuc3Vic2NyaWJlKCgpPT57Y29uc3QgZD1mdW5jdGlvbiBpRmUoYyl7cmV0dXJuIEFycmF5LmlzQXJyYXkoYyk/YzpbY119KHRoaXMuY29ubmVjdGVkVG8pLm1hcChoPT4ic3Ry''@;'; put 'put ''aW5nIj09dHlwZW9mIGg/Yy5fZHJvcExpc3RzLmZpbmQodj0+di5pZD09PWgpOmgpO2lmKHRoaXMuX2dyb3VwJiZ0aGlzLl9ncm91cC5faXRlbXMuZm9yRWFjaChoPT57LTE9PT1kLmluZGV4T2YoaCkmJmQucHVzaChoKX0pLCF0aGlzLl9zY3JvbGxhYmxlUGFyZW50c1Jlc29sdmVkKXtjb25z''@;'; put 'put ''dCBoPXRoaXMuX3Njcm9sbERpc3BhdGNoZXIuZ2V0QW5jZXN0b3JTY3JvbGxDb250YWluZXJzKHRoaXMuZWxlbWVudCkubWFwKGY9PmYuZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQpO3RoaXMuX2Ryb3BMaXN0UmVmLndpdGhTY3JvbGxhYmxlUGFyZW50cyhoKSx0aGlzLl9zY3JvbGxh''@;'; put 'put ''YmxlUGFyZW50c1Jlc29sdmVkPSEwfWEuZGlzYWJsZWQ9dGhpcy5kaXNhYmxlZCxhLmxvY2tBeGlzPXRoaXMubG9ja0F4aXMsYS5zb3J0aW5nRGlzYWJsZWQ9dGhpcy5zb3J0aW5nRGlzYWJsZWQsYS5hdXRvU2Nyb2xsRGlzYWJsZWQ9dGhpcy5hdXRvU2Nyb2xsRGlzYWJsZWQsYS5hdXRvU2Ny''@;'; put 'put ''b2xsU3RlcD1kNyh0aGlzLmF1dG9TY3JvbGxTdGVwLDIpLGEuY29ubmVjdGVkVG8oZC5maWx0ZXIoaD0+aCYmaCE9PXRoaXMpLm1hcChoPT5oLl9kcm9wTGlzdFJlZikpLndpdGhPcmllbnRhdGlvbih0aGlzLm9yaWVudGF0aW9uKX0pfV9oYW5kbGVFdmVudHMoYSl7YS5iZWZvcmVTdGFydGVk''@;'; put 'put ''LnN1YnNjcmliZSgoKT0+e3RoaXMuX3N5bmNJdGVtc1dpdGhSZWYoKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0pLGEuZW50ZXJlZC5zdWJzY3JpYmUoZD0+e3RoaXMuZW50ZXJlZC5lbWl0KHtjb250YWluZXI6dGhpcyxpdGVtOmQuaXRlbS5kYXRhLGN1cnJlbnRJ''@;'; put 'put ''bmRleDpkLmN1cnJlbnRJbmRleH0pfSksYS5leGl0ZWQuc3Vic2NyaWJlKGQ9Pnt0aGlzLmV4aXRlZC5lbWl0KHtjb250YWluZXI6dGhpcyxpdGVtOmQuaXRlbS5kYXRhfSksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9KSxhLnNvcnRlZC5zdWJzY3JpYmUoZD0+e3Ro''@;'; put 'put ''aXMuc29ydGVkLmVtaXQoe3ByZXZpb3VzSW5kZXg6ZC5wcmV2aW91c0luZGV4LGN1cnJlbnRJbmRleDpkLmN1cnJlbnRJbmRleCxjb250YWluZXI6dGhpcyxpdGVtOmQuaXRlbS5kYXRhfSl9KSxhLmRyb3BwZWQuc3Vic2NyaWJlKGQ9Pnt0aGlzLmRyb3BwZWQuZW1pdCh7cHJldmlvdXNJbmRl''@;'; put 'put ''eDpkLnByZXZpb3VzSW5kZXgsY3VycmVudEluZGV4OmQuY3VycmVudEluZGV4LHByZXZpb3VzQ29udGFpbmVyOmQucHJldmlvdXNDb250YWluZXIuZGF0YSxjb250YWluZXI6ZC5jb250YWluZXIuZGF0YSxpdGVtOmQuaXRlbS5kYXRhLGlzUG9pbnRlck92ZXJDb250YWluZXI6ZC5pc1BvaW50''@;'; put 'put ''ZXJPdmVyQ29udGFpbmVyLGRpc3RhbmNlOmQuZGlzdGFuY2UsZHJvcFBvaW50OmQuZHJvcFBvaW50LGV2ZW50OmQuZXZlbnR9KSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0pLF94KGEucmVjZWl2aW5nU3RhcnRlZCxhLnJlY2VpdmluZ1N0b3BwZWQpLnN1YnNjcmli''@;'; put 'put ''ZSgoKT0+dGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpfV9hc3NpZ25EZWZhdWx0cyhhKXtjb25zdHtsb2NrQXhpczpkLGRyYWdnaW5nRGlzYWJsZWQ6aCxzb3J0aW5nRGlzYWJsZWQ6ZixsaXN0QXV0b1Njcm9sbERpc2FibGVkOnYsbGlzdE9yaWVudGF0aW9uOk19PWE7''@;'; put 'put ''dGhpcy5kaXNhYmxlZD1oPz8hMSx0aGlzLnNvcnRpbmdEaXNhYmxlZD1mPz8hMSx0aGlzLmF1dG9TY3JvbGxEaXNhYmxlZD12Pz8hMSx0aGlzLm9yaWVudGF0aW9uPU18fCJ2ZXJ0aWNhbCIsZCYmKHRoaXMubG9ja0F4aXM9ZCl9X3N5bmNJdGVtc1dpdGhSZWYoKXt0aGlzLl9kcm9wTGlzdFJl''@;'; put 'put ''Zi53aXRoSXRlbXModGhpcy5nZXRTb3J0ZWRJdGVtcygpLm1hcChhPT5hLl9kcmFnUmVmKSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoSmkpLEdlKFBMKSxHZShFcyksR2Uoa3kpLEdlKHBtLDgpLEdlKEFZLDEyKSxHZSh4WSw4KSl9fXN0''@;'; put 'put ''YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjZGtEcm9wTGlzdCIsIiJdLFsiY2RrLWRyb3AtbGlzdCJdXSxob3N0QXR0cnM6WzEsImNkay1kcm9wLWxpc3QiXSxob3N0VmFyczo3LGhvc3RCaW5kaW5nczpmdW5jdGlvbihkLGgpezImZCYmKGhyKCJpZCIs''@;'; put 'put ''aC5pZCksVHIoImNkay1kcm9wLWxpc3QtZGlzYWJsZWQiLGguZGlzYWJsZWQpKCJjZGstZHJvcC1saXN0LWRyYWdnaW5nIixoLl9kcm9wTGlzdFJlZi5pc0RyYWdnaW5nKCkpKCJjZGstZHJvcC1saXN0LXJlY2VpdmluZyIsaC5fZHJvcExpc3RSZWYuaXNSZWNlaXZpbmcoKSkpfSxpbnB1dHM6''@;'; put 'put ''e2Nvbm5lY3RlZFRvOltObi5Ob25lLCJjZGtEcm9wTGlzdENvbm5lY3RlZFRvIiwiY29ubmVjdGVkVG8iXSxkYXRhOltObi5Ob25lLCJjZGtEcm9wTGlzdERhdGEiLCJkYXRhIl0sb3JpZW50YXRpb246W05uLk5vbmUsImNka0Ryb3BMaXN0T3JpZW50YXRpb24iLCJvcmllbnRhdGlvbiJdLGlk''@;'; put 'put ''OiJpZCIsbG9ja0F4aXM6W05uLk5vbmUsImNka0Ryb3BMaXN0TG9ja0F4aXMiLCJsb2NrQXhpcyJdLGRpc2FibGVkOltObi5IYXNEZWNvcmF0b3JJbnB1dFRyYW5zZm9ybSwiY2RrRHJvcExpc3REaXNhYmxlZCIsImRpc2FibGVkIixzMV0sc29ydGluZ0Rpc2FibGVkOltObi5IYXNEZWNvcmF0''@;'; put 'put ''b3JJbnB1dFRyYW5zZm9ybSwiY2RrRHJvcExpc3RTb3J0aW5nRGlzYWJsZWQiLCJzb3J0aW5nRGlzYWJsZWQiLHMxXSxlbnRlclByZWRpY2F0ZTpbTm4uTm9uZSwiY2RrRHJvcExpc3RFbnRlclByZWRpY2F0ZSIsImVudGVyUHJlZGljYXRlIl0sc29ydFByZWRpY2F0ZTpbTm4uTm9uZSwiY2Rr''@;'; put 'put ''RHJvcExpc3RTb3J0UHJlZGljYXRlIiwic29ydFByZWRpY2F0ZSJdLGF1dG9TY3JvbGxEaXNhYmxlZDpbTm4uSGFzRGVjb3JhdG9ySW5wdXRUcmFuc2Zvcm0sImNka0Ryb3BMaXN0QXV0b1Njcm9sbERpc2FibGVkIiwiYXV0b1Njcm9sbERpc2FibGVkIixzMV0sYXV0b1Njcm9sbFN0ZXA6W05u''@;'; put 'put ''Lk5vbmUsImNka0Ryb3BMaXN0QXV0b1Njcm9sbFN0ZXAiLCJhdXRvU2Nyb2xsU3RlcCJdfSxvdXRwdXRzOntkcm9wcGVkOiJjZGtEcm9wTGlzdERyb3BwZWQiLGVudGVyZWQ6ImNka0Ryb3BMaXN0RW50ZXJlZCIsZXhpdGVkOiJjZGtEcm9wTGlzdEV4aXRlZCIsc29ydGVkOiJjZGtEcm9wTGlz''@;'; put 'put ''dFNvcnRlZCJ9LGV4cG9ydEFzOlsiY2RrRHJvcExpc3QiXSxzdGFuZGFsb25lOiEwLGZlYXR1cmVzOltkYShbe3Byb3ZpZGU6QVksdXNlVmFsdWU6dm9pZCAwfSx7cHJvdmlkZTpFWSx1c2VFeGlzdGluZzpjfV0pLFdsXX0pfX1yZXR1cm4gY30pKCksXzFlPSgoKT0+e2NsYXNzIGN7c3RhdGlj''@;'; put 'put ''e3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1raSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPUFyKHtwcm92aWRlcnM6W1BMXSxpbXBvcnRzOltJRmVdfSl9fXJldHVybiBjfSkoKTtjb25zdCB5bz1bIioi''@;'; put 'put ''XSxYRmU9W1tbImNsci1hY2NvcmRpb24tdGl0bGUiXSxbImNsci1zdGVwLXRpdGxlIl1dLFtbImNsci1hY2NvcmRpb24tZGVzY3JpcHRpb24iXSxbImNsci1zdGVwLWRlc2NyaXB0aW9uIl1dLCIqIl0sSkZlPVsiY2xyLWFjY29yZGlvbi10aXRsZSwgY2xyLXN0ZXAtdGl0bGUiLCJjbHItYWNj''@;'; put 'put ''b3JkaW9uLWRlc2NyaXB0aW9uLCBjbHItc3RlcC1kZXNjcmlwdGlvbiIsIioiXTtmdW5jdGlvbiBRRmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiLDkpLEZ0KCJAdG9nZ2xlLmRvbmUiLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSgpLiRpbXBsaWNpdDtyZXR1cm4g''@;'; put 'put ''Q3QoUmUoKS5jb2xsYXBzZVBhbmVsT25BbmltYXRpb25Eb25lKGgpKX0pLGRlKDEsImRpdiIsMTApLFlyKDIsMiksaGUoKSgpfTImYyYmTWUoIkB0b2dnbGUiLHZvaWQgMCl9ZnVuY3Rpb24gZUhlKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7c2koMCksZGUoMSwiZGl2IiwyKSgyLCJkaXYi''@;'; put 'put ''LDMpKDMsImJ1dHRvbiIsNCwwKSxlbCg1LCJhc3luYyIpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS50b2dnbGVQYW5lbCgpKX0pLGRlKDYsInNwYW4iLDUpLEd0KDcsImNkcy1pY29uIiw2KSxoZSgpLFlyKDgpLFlyKDksMSksaGUoKSgpLGRlKDEwLCJkaXYi''@;'; put 'put ''LDcpLGd0KDExLFFGZSwzLDEsImRpdiIsOCksaGUoKSgpLGxpKCl9aWYoMiZjKXtsZXQgYTtjb25zdCBkPWwuJGltcGxpY2l0LGg9UmUoKTtmZSgpLE1lKCJuZ0NsYXNzIixoLmdldFBhbmVsU3RhdGVDbGFzc2VzKGQpKSxmZSgpLGhyKCJyb2xlIixoLmhlYWRpbmdFbmFibGVkfHxoLmV4cGxp''@;'; put 'put ''Y2l0SGVhZGluZ0xldmVsPyJoZWFkaW5nIjpudWxsKSgiYXJpYS1sZXZlbCIsaC5oZWFkaW5nRW5hYmxlZHx8aC5leHBsaWNpdEhlYWRpbmdMZXZlbD9oLmhlYWRpbmdMZXZlbDpudWxsKSxmZSgpLFRyKCJjbHItYWNjb3JkaW9uLWhlYWRlci1oYXMtZGVzY3JpcHRpb24iLChudWxsPT0oYT1E''@;'; put 'put ''Yyg1LDE0LGguYWNjb3JkaW9uRGVzY3JpcHRpb24uY2hhbmdlcykpP251bGw6YS5sZW5ndGgpfHxoLmFjY29yZGlvbkRlc2NyaXB0aW9uLmxlbmd0aCksTWUoImlkIixoLmdldEFjY29yZGlvbkhlYWRlcklkKGQudGVtcGxhdGVJZCkpKCJkaXNhYmxlZCIsZC5kaXNhYmxlZCksaHIoImFyaWEt''@;'; put 'put ''Y29udHJvbHMiLCFkLmRpc2FibGVkJiZkLm9wZW4/aC5nZXRBY2NvcmRpb25Db250ZW50SWQoZC50ZW1wbGF0ZUlkKTpudWxsKSgiYXJpYS1leHBhbmRlZCIsZC5vcGVuKSxmZSg3KSxNZSgiQHNraXBJbml0aWFsUmVuZGVyIix2b2lkIDApKCJpZCIsaC5nZXRBY2NvcmRpb25Db250ZW50SWQo''@;'; put 'put ''ZC50ZW1wbGF0ZUlkKSksaHIoImFyaWEtaGlkZGVuIiwhZC5vcGVuKSgiYXJpYS1sYWJlbGxlZGJ5IixoLmdldEFjY29yZGlvbkhlYWRlcklkKGQudGVtcGxhdGVJZCkpLGZlKCksTWUoIm5nSWYiLGQub3Blbil9fWNvbnN0IENIZT1bImNsckxvYWRpbmciLCIiXTtmdW5jdGlvbiBTSGUoYyxs''@;'; put 'put ''KXsxJmMmJihzaSgwKSxHdCgxLCJzcGFuIiwzKSxsaSgpKSwyJmMmJihmZSgpLE1lKCJAc3Bpbm5lciIsdm9pZCAwKSl9ZnVuY3Rpb24gTUhlKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7c2koMCksZGUoMSwic3BhbiIsNCksRnQoIkB2YWxpZGF0ZWQuZG9uZSIsZnVuY3Rpb24oKXt3dChh''@;'; put 'put ''KTtjb25zdCBoPVJlKCk7cmV0dXJuIEN0KGgubG9hZGluZ1N0YXRlQ2hhbmdlKGguYnV0dG9uU3RhdGUuREVGQVVMVCkpfSksaGUoKSxsaSgpfTImYyYmKGZlKCksTWUoIkB2YWxpZGF0ZWQiLHZvaWQgMCkpfWZ1bmN0aW9uIHhIZShjLGwpezEmYyYmKGRlKDAsInNwYW4iLDUpLFlyKDEpLGhl''@;'; put 'put ''KCkpLDImYyYmTWUoIkBkZWZhdWx0QnV0dG9uIix2b2lkIDApfWZ1bmN0aW9uIEVIZShjLGwpe2lmKDEmYyYmKHNpKDApLGRlKDEsImJ1dHRvbiIsMSksR3QoMiwiY2RzLWljb24iLDIpLGhlKCksbGkoKSksMiZjKXtjb25zdCBhPVJlKCk7ZmUoKSxocigiYXJpYS1sYWJlbCIsYS5zaWducG9z''@;'; put 'put ''dFRyaWdnZXJBcmlhTGFiZWx8fGEuY29tbW9uU3RyaW5ncy5rZXlzLnNpZ25wb3N0VG9nZ2xlKSxmZSgpLGhyKCJ0aXRsZSIsYS5jb21tb25TdHJpbmdzLmtleXMuaW5mbyl9fWNvbnN0IFRIZT1bW1siY2xyLXNpZ25wb3N0LXRpdGxlIl1dLCIqIl0sQUhlPVsiY2xyLXNpZ25wb3N0LXRpdGxl''@;'; put 'put ''IiwiKiJdLGtIZT1bW1siIiwiY2xyQ2hlY2tib3giLCIiXSxbIiIsImNsclRvZ2dsZSIsIiJdXSxbWyJsYWJlbCJdXV0sREhlPVsiW2NsckNoZWNrYm94XSxbY2xyVG9nZ2xlXSIsImxhYmVsIl07ZnVuY3Rpb24gSUhlKGMsbCl7MSZjJiZHdCgwLCJsYWJlbCIpfWNvbnN0IFJIZT1bW1sibGFi''@;'; put 'put ''ZWwiXV0sW1siY2xyLWNoZWNrYm94LXdyYXBwZXIiXSxbImNsci10b2dnbGUtd3JhcHBlciJdXSxbWyJjbHItY29udHJvbC1oZWxwZXIiXV0sW1siY2xyLWNvbnRyb2wtZXJyb3IiXV0sW1siY2xyLWNvbnRyb2wtc3VjY2VzcyJdXV0sTEhlPVsibGFiZWwiLCJjbHItY2hlY2tib3gtd3JhcHBl''@;'; put 'put ''cixjbHItdG9nZ2xlLXdyYXBwZXIiLCJjbHItY29udHJvbC1oZWxwZXIiLCJjbHItY29udHJvbC1lcnJvciIsImNsci1jb250cm9sLXN1Y2Nlc3MiXTtmdW5jdGlvbiBPSGUoYyxsKXsxJmMmJkd0KDAsImxhYmVsIil9ZnVuY3Rpb24gUEhlKGMsbCl7MSZjJiYoZGUoMCwiZGl2IiwzKSxZcigx''@;'; put 'put ''LDIpLGhlKCkpfWZ1bmN0aW9uIEZIZShjLGwpezEmYyYmR3QoMCwiY2RzLWljb24iLDYpfWZ1bmN0aW9uIEhIZShjLGwpezEmYyYmR3QoMCwiY2RzLWljb24iLDcpfWZ1bmN0aW9uIE5IZShjLGwpezEmYyYmWXIoMCwzLFsiKm5nSWYiLCJzaG93SW52YWxpZCJdKX1mdW5jdGlvbiBWSGUoYyxs''@;'; put 'put ''KXsxJmMmJllyKDAsNCxbIipuZ0lmIiwic2hvd1ZhbGlkIl0pfWZ1bmN0aW9uIEJIZShjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMyksZ3QoMSxGSGUsMSwwLCJjZHMtaWNvbiIsNCkoMixISGUsMSwwLCJjZHMtaWNvbiIsNSkoMyxOSGUsMSwwLCJuZy1jb250ZW50IiwwKSg0LFZIZSwxLDAs''@;'; put 'put ''Im5nLWNvbnRlbnQiLDApLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgpO2ZlKCksTWUoIm5nSWYiLGEuc2hvd0ludmFsaWQpLGZlKCksTWUoIm5nSWYiLGEuc2hvd1ZhbGlkKSxmZSgpLE1lKCJuZ0lmIixhLnNob3dJbnZhbGlkKSxmZSgpLE1lKCJuZ0lmIixhLnNob3dWYWxpZCl9fWNvbnN0IGpI''@;'; put 'put ''ZT1bImNscktleUZvY3VzIiwiIl0sWUhlPVtbWyJsYWJlbCJdXSxbWyIiLCJjbHJJbnB1dFByZWZpeCIsIiJdXSxbWyIiLCJjbHJJbnB1dCIsIiJdXSxbWyIiLCJjbHJJbnB1dFN1ZmZpeCIsIiJdXSxbWyJjbHItY29udHJvbC1oZWxwZXIiXV0sW1siY2xyLWNvbnRyb2wtZXJyb3IiXV0sW1si''@;'; put 'put ''Y2xyLWNvbnRyb2wtc3VjY2VzcyJdXV0sR0hlPVsibGFiZWwiLCJbY2xySW5wdXRQcmVmaXhdIiwiW2NscklucHV0XSIsIltjbHJJbnB1dFN1ZmZpeF0iLCJjbHItY29udHJvbC1oZWxwZXIiLCJjbHItY29udHJvbC1lcnJvciIsImNsci1jb250cm9sLXN1Y2Nlc3MiXTtmdW5jdGlvbiAkSGUo''@;'; put 'put ''YyxsKXsxJmMmJkd0KDAsImxhYmVsIil9ZnVuY3Rpb24gS0hlKGMsbCl7MSZjJiZHdCgwLCJjZHMtaWNvbiIsNil9ZnVuY3Rpb24gcUhlKGMsbCl7MSZjJiZHdCgwLCJjZHMtaWNvbiIsNyl9ZnVuY3Rpb24gWEhlKGMsbCl7MSZjJiZZcigwLDQsWyIqbmdJZiIsInNob3dIZWxwZXIiXSl9ZnVu''@;'; put 'put ''Y3Rpb24gSkhlKGMsbCl7MSZjJiZZcigwLDUsWyIqbmdJZiIsInNob3dJbnZhbGlkIl0pfWZ1bmN0aW9uIFFIZShjLGwpezEmYyYmWXIoMCw2LFsiKm5nSWYiLCJzaG93VmFsaWQiXSl9ZnVuY3Rpb24gbE5lKGMsbCl7MSZjJiZZcigwKX1jb25zdCBjTmU9WyJ0YWJDb250ZW50UHJvamVjdGVk''@;'; put 'put ''UmVmIl07ZnVuY3Rpb24gdU5lKGMsbCl7aWYoMSZjJiYoZGUoMCwic2VjdGlvbiIsMSksWXIoMSksaGUoKSksMiZjKXtjb25zdCBhPVJlKCk7VHIoImFjdGl2ZSIsYS5hY3RpdmUpLE1lKCJpZCIsYS50YWJDb250ZW50SWQpKCJoaWRkZW4iLCFhLmFjdGl2ZSksaHIoImFyaWEtbGFiZWxsZWRi''@;'; put 'put ''eSIsYS5hcmlhTGFiZWxsZWRCeSkoImFyaWEtaGlkZGVuIiwhYS5hY3RpdmUpfX1jb25zdCBkTmU9WyJ0YWJDb250ZW50Vmlld0NvbnRhaW5lciJdLGhOZT1bW1siY2xyLXRhYnMtYWN0aW9ucyJdXV0sZk5lPVsiY2xyLXRhYnMtYWN0aW9ucyJdO2Z1bmN0aW9uIHBOZShjLGwpe2lmKDEmYyYm''@;'; put 'put ''KHNpKDApLGRlKDEsImxpIiw1KSxGbCgyLDYpLGhlKCksbGkoKSksMiZjKXtjb25zdCBhPVJlKCkuJGltcGxpY2l0O2ZlKDIpLE1lKCJuZ1RlbXBsYXRlT3V0bGV0IixhLnRlbXBsYXRlUmVmQ29udGFpbmVyLnRlbXBsYXRlKX19ZnVuY3Rpb24gZ05lKGMsbCl7aWYoMSZjJiYoc2koMCksZ3Qo''@;'; put 'put ''MSxwTmUsMywxLCJuZy1jb250YWluZXIiLDQpLGxpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPVJlKCk7ZmUoKSxNZSgibmdJZiIsYS50YWJzSWQ9PT1kLnRhYnNJZCYmIWEuaW5PdmVyZmxvdyl9fWZ1bmN0aW9uIG1OZShjLGwpezEmYyYmRmwoMCw2KSwyJmMmJk1lKCJuZ1RlbXBs''@;'; put 'put ''YXRlT3V0bGV0IixSZSgpLiRpbXBsaWNpdC50ZW1wbGF0ZVJlZkNvbnRhaW5lci50ZW1wbGF0ZSl9ZnVuY3Rpb24gdk5lKGMsbCl7aWYoMSZjJiYoc2koMCksZ3QoMSxtTmUsMSwxLCJuZy1jb250YWluZXIiLDEzKSxsaSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1SZSgzKTtmZSgp''@;'; put 'put ''LE1lKCJuZ0lmIixhLnRhYnNJZD09PWQudGFic0lkJiZhLmluT3ZlcmZsb3cpfX1mdW5jdGlvbiBiTmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItdGFiLW92ZXJmbG93LWNvbnRlbnQiLDEyKSxGdCgia2V5ZG93bi5lc2NhcGUiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEp''@;'; put 'put ''LEN0KFJlKDIpLmNsb3NlT25Fc2NhcGVLZXkoKSl9LDAsJDMpKCJjbGljayIsZnVuY3Rpb24oaCl7d3QoYSksUmUoKTtjb25zdCBmPWhhKDQpO3JldHVybiBDdChSZSgpLmNsb3NlT25PdXRzaWRlQ2xpY2soaCxmKSl9LCExLCQzKSgiZm9jdXNvdXQiLGZ1bmN0aW9uKGgpe3JldHVybiB3dChh''@;'; put 'put ''KSxDdChSZSgyKS5jbG9zZU9uRm9jdXNPdXQoaCkpfSksZ3QoMSx2TmUsMiwxLCJuZy1jb250YWluZXIiLDMpLGhlKCl9aWYoMiZjKXtjb25zdCBhPVJlKDIpO2ZlKCksTWUoIm5nRm9yT2YiLGEudGFiTGlua0RpcmVjdGl2ZXMpfX1mdW5jdGlvbiB5TmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9''@;'; put 'put ''TG4oKTtzaSgwKSxkZSgxLCJkaXYiLDcpKDIsImxpIiw4KSgzLCJidXR0b24iLDksMSksRnQoIm1vdXNlZG93biIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS5fbW91c2Vkb3duPSEwKX0pKCJmb2N1cyIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS5vcGVuT3ZlcmZs''@;'; put 'put ''b3dPbkZvY3VzKCkpfSkoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgpLnRvZ2dsZU92ZXJmbG93T25DbGljaygpKX0pLEd0KDUsImNkcy1pY29uIiwxMCksaGUoKSgpLGd0KDYsYk5lLDIsMSwiY2xyLXRhYi1vdmVyZmxvdy1jb250ZW50IiwxMSksaGUoKSxsaSgpfWlm''@;'; put 'put ''KDImYyl7Y29uc3QgYT1SZSgpO2ZlKCksVHIoIm9wZW4iLGEudG9nZ2xlU2VydmljZS5vcGVuKSxmZSgyKSxUcigiYWN0aXZlIixhLmFjdGl2ZVRhYkluT3ZlcmZsb3cpKCJvcGVuIixhLnRvZ2dsZVNlcnZpY2Uub3BlbiksaHIoInRhYmluZGV4IixhLmFjdGl2ZVRhYkluT3ZlcmZsb3cmJiFh''@;'; put 'put ''LnRvZ2dsZVNlcnZpY2Uub3Blbj8wOi0xKSgidGl0bGUiLGEuY29tbW9uU3RyaW5ncy5rZXlzLm1vcmUpLGZlKDIpLGhyKCJzdGF0dXMiLGEudG9nZ2xlU2VydmljZS5vcGVuPyJpbmZvIjpudWxsKSgidGl0bGUiLGEuY29tbW9uU3RyaW5ncy5rZXlzLm1vcmUpLGZlKCksTWUoIm5nSWYiLGEu''@;'; put 'put ''dG9nZ2xlU2VydmljZS5vcGVuKX19ZnVuY3Rpb24gX05lKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiYnV0dG9uIiwzKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkudG9nZ2xlQnlCdXR0b24oKSl9KSxHdCgxLCJjZHMtaWNvbiIsNCksaGUoKX1p''@;'; put 'put ''ZigyJmMpe2NvbnN0IGE9UmUoKTtUcigib24tY29sbGFwc2UiLGEuY29sbGFwc2VkKSxocigiYXJpYS1jb250cm9scyIsYS5jb250ZW50SWQpKCJhcmlhLWV4cGFuZGVkIixhLmFyaWFFeHBhbmRlZCkoImFyaWEtbGFiZWwiLGEudG9nZ2xlTGFiZWx8fGEuY29tbW9uU3RyaW5ncy5rZXlzLnZl''@;'; put 'put ''cnRpY2FsTmF2VG9nZ2xlKSxmZSgpLGhyKCJkaXJlY3Rpb24iLGEuY29sbGFwc2VkPyJyaWdodCI6ImxlZnQiKX19ZnVuY3Rpb24gd05lKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiYnV0dG9uIiw1KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKCku''@;'; put 'put ''Y29sbGFwc2VkPSExKX0pLGhlKCl9aWYoMiZjKXtjb25zdCBhPVJlKCk7aHIoImFyaWEtY29udHJvbHMiLGEuY29udGVudElkKSgiYXJpYS1sYWJlbCIsYS50b2dnbGVMYWJlbHx8YS5jb21tb25TdHJpbmdzLmtleXMudmVydGljYWxOYXZUb2dnbGUpfX1jb25zdCBNTmU9WyJjbHJWZXJ0aWNh''@;'; put 'put ''bE5hdkxpbmsiLCIiXSx4TmU9W1tbIiIsImNsclZlcnRpY2FsTmF2SWNvbiIsIiJdXSwiKiJdLEVOZT1bIltjbHJWZXJ0aWNhbE5hdkljb25dIiwiKiJdO2Z1bmN0aW9uIFROZShjLGwpe2lmKDEmYyYmKGRlKDAsInRoIiw0KSgxLCJzcGFuIiksTGUoMiksaGUoKSgpKSwyJmMpe2NvbnN0IGE9''@;'; put 'put ''bC4kaW1wbGljaXQ7ZmUoKSxocigiYXJpYS1sYWJlbCIsYS5kYXkpLGZlKCksd3IoYS5uYXJyb3cpfX1mdW5jdGlvbiBBTmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJ0ZCIsNykoMSwiY2xyLWRheSIsOCksRnQoInNlbGVjdERheSIsZnVuY3Rpb24oaCl7cmV0dXJuIHd0KGEp''@;'; put 'put ''LEN0KFJlKDIpLnNldFNlbGVjdGVkRGF5KGgpKX0pLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoKSxNZSgiY2xyRGF5VmlldyIsYSl9fWZ1bmN0aW9uIGtOZShjLGwpe2lmKDEmYyYmKGRlKDAsInRyIiw1KSxndCgxLEFOZSwyLDEsInRkIiw2KSxoZSgpKSwyJmMpe2Nv''@;'; put 'put ''bnN0IGE9bC4kaW1wbGljaXQ7ZmUoKSxNZSgibmdGb3JPZiIsYSl9fWZ1bmN0aW9uIEROZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImJ1dHRvbiIsMTApLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLmluZGV4O3JldHVybiBDdChSZSgpLmNoYW5nZU1vbnRo''@;'; put 'put ''KGgpKX0pKCJtb3VzZWVudGVyIixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSkuaW5kZXg7cmV0dXJuIEN0KFJlKCkub25Ib3ZlcihoKSl9KSxMZSgxKSxoZSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPWwuaW5kZXgsaD1SZSgpO1RyKCJpcy1zZWxlY3RlZCIsaC5pc1NlbGVjdGVk''@;'; put 'put ''KGQpKSgiaXMtc3RhcnQtcmFuZ2UiLGguZ2V0SXNSYW5nZVN0YXJ0TW9udGgoZCkpKCJpcy1lbmQtcmFuZ2UiLGguZ2V0SXNSYW5nZUVuZE1vbnRoKGQpKSgiaW4tcmFuZ2UiLGguaXNJblJhbmdlKGQpKSgiaXMtdG9kYXkiLGguY2FsZW5kYXJZZWFyPT09aC5jdXJyZW50Q2FsZW5kYXJZZWFy''@;'; put 'put ''JiZkPT09aC5jdXJyZW50Q2FsZW5kYXJNb250aCksaHIoInRhYmluZGV4IixoLmdldFRhYkluZGV4KGQpKSxmZSgpLElyKCIgIixhLCIgIil9fWZ1bmN0aW9uIElOZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImJ1dHRvbiIsMTApLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtjb25z''@;'; put 'put ''dCBoPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoUmUoKS5jaGFuZ2VZZWFyKGgpKX0pKCJtb3VzZWVudGVyIixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSkuJGltcGxpY2l0O3JldHVybiBDdChSZSgpLm9uSG92ZXIoaCkpfSksTGUoMSksaGUoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGlj''@;'; put 'put ''aXQsZD1SZSgpO1RyKCJpcy1zZWxlY3RlZCIsYT09PWQuc2VsZWN0ZWRTdGFydFllYXJ8fGE9PT1kLnNlbGVjdGVkRW5kWWVhcikoImlzLXN0YXJ0LXJhbmdlIixkLmdldElzUmFuZ2VTdGFydFllYXIoYSkpKCJpcy1lbmQtcmFuZ2UiLGQuZ2V0SXNSYW5nZUVuZFllYXIoYSkpKCJpbi1yYW5n''@;'; put 'put ''ZSIsZC5pc0luUmFuZ2UoYSkpKCJpcy10b2RheSIsZC5pc0N1cnJlbnRDYWxlbmRhclllYXIoYSkpLGhyKCJ0YWJpbmRleCIsZC5nZXRUYWJJbmRleChhKSksZmUoKSxJcigiICIsYSwiICIpfX1mdW5jdGlvbiBSTmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtzaSgwKSxkZSgxLCJhIiw2''@;'; put 'put ''KSxGdCgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKS4kaW1wbGljaXQ7cmV0dXJuIEN0KFJlKDIpLm9uUmFuZ2VPcHRpb25TZWxlY3QoaCkpfSkoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSkuJGltcGxpY2l0O3JldHVybiBDdChSZSgyKS5vblJhbmdlT3B0''@;'; put 'put ''aW9uU2VsZWN0KGgpKX0pLExlKDIpLGhlKCksbGkoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoKSxocigiYXJpYS1sYWJlbCIsbnVsbD09YT9udWxsOmEubGFiZWwpLGZlKCksSXIoIiAiLGEubGFiZWwsIiAiKX19ZnVuY3Rpb24gTE5lKGMsbCl7MSZjJiZGbCgwKX1mdW5jdGlv''@;'; put 'put ''biBPTmUoYyxsKXtpZigxJmMmJihzaSgwKSxkZSgxLCJjbHItdmVydGljYWwtbmF2IiwyKSxndCgyLFJOZSwzLDIsIm5nLWNvbnRhaW5lciIsMyksaGUoKSxkZSgzLCJkaXYiLDQpLGd0KDQsTE5lLDEsMCwibmctY29udGFpbmVyIiw1KSxoZSgpLGxpKCkpLDImYyl7Y29uc3QgYT1SZSgpLGQ9''@;'; put 'put ''aGEoMik7ZmUoMiksTWUoIm5nRm9yT2YiLGEuZGF0ZVJhbmdlT3B0aW9ucyksZmUoMiksTWUoIm5nVGVtcGxhdGVPdXRsZXQiLGQpfX1mdW5jdGlvbiBQTmUoYyxsKXsxJmMmJkd0KDAsImNsci1tb250aHBpY2tlciIpfWZ1bmN0aW9uIEZOZShjLGwpezEmYyYmR3QoMCwiY2xyLXllYXJwaWNr''@;'; put 'put ''ZXIiKX1mdW5jdGlvbiBITmUoYyxsKXsxJmMmJkd0KDAsImNsci1kYXlwaWNrZXIiKX1mdW5jdGlvbiBOTmUoYyxsKXsxJmMmJkd0KDAsImNsci1kYXRlcGlja2VyLWFjdGlvbnMiKX1mdW5jdGlvbiBWTmUoYyxsKXtpZigxJmMmJmd0KDAsUE5lLDEsMCwiY2xyLW1vbnRocGlja2VyIiw3KSgx''@;'; put 'put ''LEZOZSwxLDAsImNsci15ZWFycGlja2VyIiw3KSgyLEhOZSwxLDAsImNsci1kYXlwaWNrZXIiLDcpKDMsTk5lLDEsMCwiY2xyLWRhdGVwaWNrZXItYWN0aW9ucyIsNyksMiZjKXtjb25zdCBhPVJlKCk7TWUoIm5nSWYiLGEuaXNNb250aFZpZXcpLGZlKCksTWUoIm5nSWYiLGEuaXNZZWFyVmll''@;'; put 'put ''dyksZmUoKSxNZSgibmdJZiIsYS5pc0RheVZpZXcpLGZlKCksTWUoIm5nSWYiLGEuaGFzQWN0aW9uQnV0dG9ucyl9fWNvbnN0IEJOZT1bImFjdGlvbkJ1dHRvbiJdLGpOZT1bW1sibGFiZWwiXV0sW1siIiwiY2xyRGF0ZSIsIiJdXSxbWyIiLCJjbHJTdGFydERhdGUiLCIiXV0sW1siIiwiY2xy''@;'; put 'put ''RW5kRGF0ZSIsIiJdXSxbWyJjbHItY29udHJvbC1oZWxwZXIiXV0sW1siY2xyLWNvbnRyb2wtZXJyb3IiXV0sW1siY2xyLWNvbnRyb2wtc3VjY2VzcyJdXV0sek5lPVsibGFiZWwiLCJbY2xyRGF0ZV0iLCJbY2xyU3RhcnREYXRlXSIsIltjbHJFbmREYXRlXSIsImNsci1jb250cm9sLWhlbHBl''@;'; put 'put ''ciIsImNsci1jb250cm9sLWVycm9yIiwiY2xyLWNvbnRyb2wtc3VjY2VzcyJdO2Z1bmN0aW9uIFVOZShjLGwpezEmYyYmR3QoMCwibGFiZWwiKX1mdW5jdGlvbiBaTmUoYyxsKXsxJmMmJihzaSgwKSxZcigxLDIpLGRlKDIsInNwYW4iLDkpLExlKDMsIi0iKSxoZSgpLFlyKDQsMyksbGkoKSl9''@;'; put 'put ''ZnVuY3Rpb24gV05lKGMsbCl7MSZjJiYoZGUoMCwiYnV0dG9uIiwxMCwwKSxHdCgyLCJjZHMtaWNvbiIsMTEpLGhlKCkpLDImYyYmTWUoImRpc2FibGVkIixSZSgpLmlzSW5wdXREYXRlRGlzYWJsZWQpfWZ1bmN0aW9uIFlOZShjLGwpezEmYyYmR3QoMCwiY2xyLWRhdGVwaWNrZXItdmlldy1t''@;'; put 'put ''YW5hZ2VyIiwxMil9ZnVuY3Rpb24gR05lKGMsbCl7MSZjJiZHdCgwLCJjZHMtaWNvbiIsMTMpfWZ1bmN0aW9uICROZShjLGwpezEmYyYmR3QoMCwiY2RzLWljb24iLDE0KX1mdW5jdGlvbiBLTmUoYyxsKXsxJmMmJllyKDAsNCxbIipuZ0lmIiwic2hvd0hlbHBlciJdKX1mdW5jdGlvbiBxTmUo''@;'; put 'put ''YyxsKXsxJmMmJllyKDAsNSxbIipuZ0lmIiwic2hvd0ludmFsaWQiXSl9ZnVuY3Rpb24gWE5lKGMsbCl7MSZjJiZZcigwLDYsWyIqbmdJZiIsInNob3dWYWxpZCJdKX1jb25zdCB0VmU9W1tbImxhYmVsIl1dLFtbIiIsImNsck51bWJlcklucHV0IiwiIl1dLFtbImNsci1jb250cm9sLWhlbHBl''@;'; put 'put ''ciJdXSxbWyJjbHItY29udHJvbC1lcnJvciJdXSxbWyJjbHItY29udHJvbC1zdWNjZXNzIl1dXSxuVmU9WyJsYWJlbCIsIltjbHJOdW1iZXJJbnB1dF0iLCJjbHItY29udHJvbC1oZWxwZXIiLCJjbHItY29udHJvbC1lcnJvciIsImNsci1jb250cm9sLXN1Y2Nlc3MiXTtmdW5jdGlvbiByVmUo''@;'; put 'put ''YyxsKXsxJmMmJkd0KDAsImxhYmVsIil9ZnVuY3Rpb24gaVZlKGMsbCl7MSZjJiZHdCgwLCJjZHMtaWNvbiIsMTEpfWZ1bmN0aW9uIGFWZShjLGwpezEmYyYmR3QoMCwiY2RzLWljb24iLDEyKX1mdW5jdGlvbiBvVmUoYyxsKXsxJmMmJllyKDAsMixbIipuZ0lmIiwic2hvd0hlbHBlciJdKX1m''@;'; put 'put ''dW5jdGlvbiBzVmUoYyxsKXsxJmMmJllyKDAsMyxbIipuZ0lmIiwic2hvd0ludmFsaWQiXSl9ZnVuY3Rpb24gbFZlKGMsbCl7MSZjJiZZcigwLDQsWyIqbmdJZiIsInNob3dWYWxpZCJdKX1jb25zdCBjVmU9W1tbIiIsImNsclJhZGlvIiwiIl1dLFtbImxhYmVsIl1dXSx1VmU9WyJbY2xyUmFk''@;'; put 'put ''aW9dIiwibGFiZWwiXTtmdW5jdGlvbiBkVmUoYyxsKXsxJmMmJkd0KDAsImxhYmVsIil9Y29uc3QgaFZlPVtbWyJsYWJlbCJdXSxbWyJjbHItcmFkaW8td3JhcHBlciJdXSxbWyJjbHItY29udHJvbC1oZWxwZXIiXV0sW1siY2xyLWNvbnRyb2wtZXJyb3IiXV0sW1siY2xyLWNvbnRyb2wtc3Vj''@;'; put 'put ''Y2VzcyJdXV0sZlZlPVsibGFiZWwiLCJjbHItcmFkaW8td3JhcHBlciIsImNsci1jb250cm9sLWhlbHBlciIsImNsci1jb250cm9sLWVycm9yIiwiY2xyLWNvbnRyb2wtc3VjY2VzcyJdO2Z1bmN0aW9uIHBWZShjLGwpezEmYyYmR3QoMCwibGFiZWwiKX1mdW5jdGlvbiBnVmUoYyxsKXsxJmMm''@;'; put 'put ''JihkZSgwLCJkaXYiLDMpLFlyKDEsMiksaGUoKSl9ZnVuY3Rpb24gbVZlKGMsbCl7MSZjJiZHdCgwLCJjZHMtaWNvbiIsNil9ZnVuY3Rpb24gdlZlKGMsbCl7MSZjJiZHdCgwLCJjZHMtaWNvbiIsNyl9ZnVuY3Rpb24gYlZlKGMsbCl7MSZjJiZZcigwLDMsWyIqbmdJZiIsInNob3dJbnZhbGlk''@;'; put 'put ''Il0pfWZ1bmN0aW9uIHlWZShjLGwpezEmYyYmWXIoMCw0LFsiKm5nSWYiLCJzaG93VmFsaWQiXSl9ZnVuY3Rpb24gX1ZlKGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwzKSxndCgxLG1WZSwxLDAsImNkcy1pY29uIiw0KSgyLHZWZSwxLDAsImNkcy1pY29uIiw1KSgzLGJWZSwxLDAsIm5nLWNv''@;'; put 'put ''bnRlbnQiLDApKDQseVZlLDEsMCwibmctY29udGVudCIsMCksaGUoKSksMiZjKXtjb25zdCBhPVJlKCk7ZmUoKSxNZSgibmdJZiIsYS5zaG93SW52YWxpZCksZmUoKSxNZSgibmdJZiIsYS5zaG93VmFsaWQpLGZlKCksTWUoIm5nSWYiLGEuc2hvd0ludmFsaWQpLGZlKCksTWUoIm5nSWYiLGEu''@;'; put 'put ''c2hvd1ZhbGlkKX19Y29uc3Qgd1ZlPVtbWyJsYWJlbCJdXSxbWyIiLCJjbHJTZWxlY3QiLCIiXV0sW1siY2xyLWNvbnRyb2wtaGVscGVyIl1dLFtbImNsci1jb250cm9sLWVycm9yIl1dLFtbImNsci1jb250cm9sLXN1Y2Nlc3MiXV1dLENWZT1bImxhYmVsIiwiW2NsclNlbGVjdF0iLCJjbHIt''@;'; put 'put ''Y29udHJvbC1oZWxwZXIiLCJjbHItY29udHJvbC1lcnJvciIsImNsci1jb250cm9sLXN1Y2Nlc3MiXTtmdW5jdGlvbiBTVmUoYyxsKXsxJmMmJkd0KDAsImxhYmVsIil9ZnVuY3Rpb24gTVZlKGMsbCl7MSZjJiZHdCgwLCJjZHMtaWNvbiIsNSl9ZnVuY3Rpb24geFZlKGMsbCl7MSZjJiZHdCgw''@;'; put 'put ''LCJjZHMtaWNvbiIsNil9ZnVuY3Rpb24gRVZlKGMsbCl7MSZjJiZZcigwLDIsWyIqbmdJZiIsInNob3dIZWxwZXIiXSl9ZnVuY3Rpb24gVFZlKGMsbCl7MSZjJiZZcigwLDMsWyIqbmdJZiIsInNob3dJbnZhbGlkIl0pfWZ1bmN0aW9uIEFWZShjLGwpezEmYyYmWXIoMCw0LFsiKm5nSWYiLCJz''@;'; put 'put ''aG93VmFsaWQiXSl9Y29uc3Qga1ZlPVtbWyJsYWJlbCJdXSxbWyIiLCJjbHJUZXh0YXJlYSIsIiJdXSxbWyJjbHItY29udHJvbC1oZWxwZXIiXV0sW1siY2xyLWNvbnRyb2wtZXJyb3IiXV0sW1siY2xyLWNvbnRyb2wtc3VjY2VzcyJdXV0sRFZlPVsibGFiZWwiLCJbY2xyVGV4dGFyZWFdIiwi''@;'; put 'put ''Y2xyLWNvbnRyb2wtaGVscGVyIiwiY2xyLWNvbnRyb2wtZXJyb3IiLCJjbHItY29udHJvbC1zdWNjZXNzIl07ZnVuY3Rpb24gSVZlKGMsbCl7MSZjJiZHdCgwLCJsYWJlbCIpfWZ1bmN0aW9uIFJWZShjLGwpezEmYyYmR3QoMCwiY2RzLWljb24iLDUpfWZ1bmN0aW9uIExWZShjLGwpezEmYyYm''@;'; put 'put ''R3QoMCwiY2RzLWljb24iLDYpfWZ1bmN0aW9uIE9WZShjLGwpezEmYyYmWXIoMCwyLFsiKm5nSWYiLCJzaG93SGVscGVyIl0pfWZ1bmN0aW9uIFBWZShjLGwpezEmYyYmWXIoMCwzLFsiKm5nSWYiLCJzaG93SW52YWxpZCJdKX1mdW5jdGlvbiBGVmUoYyxsKXsxJmMmJllyKDAsNCxbIipuZ0lm''@;'; put 'put ''Iiwic2hvd1ZhbGlkIl0pfWNvbnN0IEhWZT1bImFuY2hvciJdO2Z1bmN0aW9uIE5WZShjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsNCkoMSwiZGl2Iiw1KSgyLCJidXR0b24iLDYpLEd0KDMsImNkcy1pY29uIiw3KSxoZSgpKCksWXIoNCksaGUoKSksMiZjKXtjb25zdCBhPVJlKCk7TWUoImlk''@;'; put 'put ''IixhLnBvcG92ZXJJZCksaHIoImFyaWEtbGFiZWwiLGEuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGFncmlkRmlsdGVyRGlhbG9nQXJpYUxhYmVsKSxmZSgzKSxocigidGl0bGUiLGEuY29tbW9uU3RyaW5ncy5rZXlzLmNsb3NlKX19Y29uc3QgVlZlPVsiaW5wdXRfbG93Il0sQlZlPVsiaW5wdXQi''@;'; put 'put ''XSxqVmU9WyJjb2x1bW5Qb3J0YWwiXTtmdW5jdGlvbiB6VmUoYyxsKXsxJmMmJllyKDApfWNvbnN0IFVWZT1bInJlc2l6ZVRyYWNrZXIiXSxaVmU9WyJjb2x1bW5IYW5kbGUiXSxXVmU9W1tbImNsci1kZy1maWx0ZXIiXSxbImNsci1kZy1zdHJpbmctZmlsdGVyIl0sWyJjbHItZGctbnVtZXJp''@;'; put 'put ''Yy1maWx0ZXIiXV0sIioiXSxZVmU9WyJjbHItZGctZmlsdGVyLCBjbHItZGctc3RyaW5nLWZpbHRlciwgY2xyLWRnLW51bWVyaWMtZmlsdGVyIiwiKiJdO2Z1bmN0aW9uIEdWZShjLGwpezEmYyYmRmwoMCl9ZnVuY3Rpb24gJFZlKGMsbCl7MSZjJiZHdCgwLCJjZHMtaWNvbiIsMTApLDImYyYm''@;'; put 'put ''aHIoImRpcmVjdGlvbiIsUmUoMikuc29ydERpcmVjdGlvbil9ZnVuY3Rpb24gS1ZlKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiYnV0dG9uIiw3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkuc29ydCgpKX0pLGd0KDEsR1ZlLDEsMCwibmctY29u''@;'; put 'put ''dGFpbmVyIiw4KSgyLCRWZSwxLDEsImNkcy1pY29uIiw5KSxoZSgpfWlmKDImYyl7Y29uc3QgYT1SZSgpLGQ9aGEoNik7ZmUoKSxNZSgibmdUZW1wbGF0ZU91dGxldCIsZCksZmUoKSxNZSgibmdJZiIsYS5zb3J0RGlyZWN0aW9uKX19ZnVuY3Rpb24gcVZlKGMsbCl7aWYoMSZjKXtjb25zdCBh''@;'; put 'put ''PUxuKCk7ZGUoMCwiY2xyLWRnLXN0cmluZy1maWx0ZXIiLDExKSxnaSgiY2xyRmlsdGVyVmFsdWVDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9UmUoKTtyZXR1cm4gbWkoZi5maWx0ZXJWYWx1ZSxoKXx8KGYuZmlsdGVyVmFsdWU9aCksQ3QoaCl9KSxoZSgpfWlmKDImYyl7Y29u''@;'; put 'put ''c3QgYT1SZSgpO01lKCJjbHJGaWx0ZXJQbGFjZWhvbGRlciIsYS5maWx0ZXJTdHJpbmdQbGFjZWhvbGRlcikoImNsckRnU3RyaW5nRmlsdGVyIixhLnJlZ2lzdGVyZWQpLHBpKCJjbHJGaWx0ZXJWYWx1ZSIsYS5maWx0ZXJWYWx1ZSl9fWZ1bmN0aW9uIFhWZShjLGwpe2lmKDEmYyl7Y29uc3Qg''@;'; put 'put ''YT1MbigpO2RlKDAsImNsci1kZy1udW1lcmljLWZpbHRlciIsMTIpLGdpKCJjbHJGaWx0ZXJWYWx1ZUNoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1SZSgpO3JldHVybiBtaShmLmZpbHRlclZhbHVlLGgpfHwoZi5maWx0ZXJWYWx1ZT1oKSxDdChoKX0pLGhlKCl9aWYoMiZjKXtj''@;'; put 'put ''b25zdCBhPVJlKCk7TWUoImNsckZpbHRlck1heFBsYWNlaG9sZGVyIixhLmZpbHRlck51bWJlck1heFBsYWNlaG9sZGVyKSgiY2xyRmlsdGVyTWluUGxhY2Vob2xkZXIiLGEuZmlsdGVyTnVtYmVyTWluUGxhY2Vob2xkZXIpKCJjbHJEZ051bWVyaWNGaWx0ZXIiLGEucmVnaXN0ZXJlZCkscGko''@;'; put 'put ''ImNsckZpbHRlclZhbHVlIixhLmZpbHRlclZhbHVlKX19ZnVuY3Rpb24gSlZlKGMsbCl7MSZjJiZZcigwLDEpfWZ1bmN0aW9uIFFWZShjLGwpezEmYyYmRmwoMCl9ZnVuY3Rpb24gZUJlKGMsbCl7aWYoMSZjJiYoZGUoMCwic3BhbiIsMTMpLGd0KDEsUVZlLDEsMCwibmctY29udGFpbmVyIiw4''@;'; put 'put ''KSxoZSgpKSwyJmMpe1JlKCk7Y29uc3QgYT1oYSg2KTtmZSgpLE1lKCJuZ1RlbXBsYXRlT3V0bGV0IixhKX19ZnVuY3Rpb24gdEJlKGMsbCl7MSZjJiZHdCgwLCJjbHItZGctY29sdW1uLXNlcGFyYXRvciIpfWZ1bmN0aW9uIG5CZShjLGwpezEmYyYmR3QoMCwiZGl2Iiw0KX1mdW5jdGlvbiBy''@;'; put 'put ''QmUoYyxsKXsxJmMmJllyKDAsMCxbIipuZ0lmIiwiZW1wdHlEYXRhZ3JpZCJdKX1jb25zdCBpQmU9WyJjZWxsUG9ydGFsIl07ZnVuY3Rpb24gYUJlKGMsbCl7MSZjJiZZcigwKX1jb25zdCBvQmU9WyJyb3dQb3J0YWwiXTtmdW5jdGlvbiBzQmUoYyxsKXsxJmMmJllyKDApfWNvbnN0IGxCZT1b''@;'; put 'put ''ImRldGFpbEJ1dHRvbiJdLGNCZT1bInN0aWNreUNlbGxzIl0sdUJlPVsic2Nyb2xsYWJsZUNlbGxzIl0sZEJlPVsiY2FsY3VsYXRlZENlbGxzIl0saEJlPVtbWyJjbHItZGctcm93LWRldGFpbCJdXSxbWyJjbHItZGctY2VsbCJdXSxbWyJjbHItZGctYWN0aW9uLW92ZXJmbG93Il1dXSxmQmU9''@;'; put 'put ''WyJjbHItZGctcm93LWRldGFpbCIsImNsci1kZy1jZWxsIiwiY2xyLWRnLWFjdGlvbi1vdmVyZmxvdyJdLHBCZT1jPT4oeyJpcy1yZXBsYWNlZCI6Y30pLHcxZT1jPT4oeyJjbHItZm9ybS1jb250cm9sLWRpc2FibGVkIjpjfSk7ZnVuY3Rpb24gZ0JlKGMsbCl7fWZ1bmN0aW9uIG1CZShjLGwp''@;'; put 'put ''e2lmKDEmYyYmKGRlKDAsImNsci1leHBhbmRhYmxlLWFuaW1hdGlvbiIsMTApLGd0KDEsZ0JlLDAsMCwibmctdGVtcGxhdGUiLDExKSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoMiksZD1oYSg2KTtNZSgiY2xyRXhwYW5kVHJpZ2dlciIsYS5leHBhbmRBbmltYXRpb25UcmlnZ2VyKSxmZSgpLE1l''@;'; put 'put ''KCJuZ1RlbXBsYXRlT3V0bGV0IixkKX19ZnVuY3Rpb24gdkJlKGMsbCl7fWZ1bmN0aW9uIGJCZShjLGwpezEmYyYmZ3QoMCx2QmUsMCwwLCJuZy10ZW1wbGF0ZSIsMTEpLDImYyYmKFJlKDIpLE1lKCJuZ1RlbXBsYXRlT3V0bGV0IixoYSg2KSkpfWZ1bmN0aW9uIHlCZShjLGwpe2lmKDEmYyl7''@;'; put 'put ''Y29uc3QgYT1MbigpO2RlKDAsImRpdiIsOSksRnQoIm1vdXNlZG93biIsZnVuY3Rpb24oaCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkuY2xlYXJSYW5nZXMoaCkpfSkoImNsaWNrIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPVJlKCk7cmV0dXJuIEN0KGYuc2VsZWN0Um93KCFmLnNlbGVjdGVk''@;'; put 'put ''LGgpKX0pLGd0KDEsbUJlLDIsMiwiY2xyLWV4cGFuZGFibGUtYW5pbWF0aW9uIiw3KSgyLGJCZSwxLDEsbnVsbCw4KSxoZSgpfWlmKDImYyl7Y29uc3QgYT1SZSgpO2ZlKCksTWUoIm5nSWYiLGEuZXhwYW5kLmV4cGFuZGFibGUpLGZlKCksTWUoIm5nSWYiLCFhLmV4cGFuZC5leHBhbmRhYmxl''@;'; put 'put ''KX19ZnVuY3Rpb24gX0JlKGMsbCl7fWZ1bmN0aW9uIHdCZShjLGwpe2lmKDEmYyYmKGRlKDAsImNsci1leHBhbmRhYmxlLWFuaW1hdGlvbiIsMTApLGd0KDEsX0JlLDAsMCwibmctdGVtcGxhdGUiLDExKSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoKSxkPWhhKDYpO01lKCJjbHJFeHBhbmRUcmln''@;'; put 'put ''Z2VyIixhLmV4cGFuZEFuaW1hdGlvblRyaWdnZXIpLGZlKCksTWUoIm5nVGVtcGxhdGVPdXRsZXQiLGQpfX1mdW5jdGlvbiBDQmUoYyxsKXt9ZnVuY3Rpb24gU0JlKGMsbCl7MSZjJiZndCgwLENCZSwwLDAsIm5nLXRlbXBsYXRlIiwxMSksMiZjJiYoUmUoKSxNZSgibmdUZW1wbGF0ZU91dGxl''@;'; put 'put ''dCIsaGEoNikpKX1mdW5jdGlvbiBNQmUoYyxsKXsxJmMmJllyKDApfWZ1bmN0aW9uIHhCZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIsMjEpKDEsImRpdiIsMjIpKDIsImlucHV0IiwyMyksRnQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxD''@;'; put 'put ''dChSZSgyKS50b2dnbGUoaCkpfSksaGUoKSxkZSgzLCJsYWJlbCIsMjQpLEZ0KCJjbGljayIsZnVuY3Rpb24oaCl7cmV0dXJuIHd0KGEpLEN0KFJlKDIpLmNsZWFyUmFuZ2VzKGgpKX0pLGRlKDQsInNwYW4iLDI1KSxMZSg1KSxoZSgpKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1SZSgyKTtNZSgi''@;'; put 'put ''bmdDbGFzcyIsc3AoNyx3MWUsIWEuY2xyRGdTZWxlY3RhYmxlKSksZmUoMiksTWUoIm5nTW9kZWwiLGEuc2VsZWN0ZWQpKCJpZCIsYS5jaGVja2JveElkKSgiZGlzYWJsZWQiLCFhLmNsckRnU2VsZWN0YWJsZXx8bnVsbCksaHIoImFyaWEtZGlzYWJsZWQiLCFhLmNsckRnU2VsZWN0YWJsZXx8''@;'; put 'put ''bnVsbCksZmUoKSxNZSgiZm9yIixhLmNoZWNrYm94SWQpLGZlKDIpLHdyKGEuY2xyRGdSb3dTZWxlY3Rpb25MYWJlbHx8YS5jb21tb25TdHJpbmdzLmtleXMuc2VsZWN0KX19ZnVuY3Rpb24gRUJlKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2IiwyMSkoMSwiY2xyLXJhZGlv''@;'; put 'put ''LXdyYXBwZXIiKSgyLCJpbnB1dCIsMjYpLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPVJlKDIpO3JldHVybiBtaShmLnNlbGVjdGlvbi5jdXJyZW50U2luZ2xlLGgpfHwoZi5zZWxlY3Rpb24uY3VycmVudFNpbmdsZT1oKSxDdChoKX0pLGhlKCksZGUoMywi''@;'; put 'put ''bGFiZWwiLDI3KSg0LCJzcGFuIiwyNSksTGUoNSksaGUoKSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9UmUoMik7TWUoIm5nQ2xhc3MiLHNwKDEwLHcxZSwhYS5jbHJEZ1NlbGVjdGFibGUpKSxmZSgyKSxNZSgiaWQiLGEucmFkaW9JZCkoIm5hbWUiLGEuc2VsZWN0aW9uLmlkKyItcmFkaW8iKSgi''@;'; put 'put ''dmFsdWUiLGEuaXRlbSkscGkoIm5nTW9kZWwiLGEuc2VsZWN0aW9uLmN1cnJlbnRTaW5nbGUpLE1lKCJjaGVja2VkIixhLnNlbGVjdGlvbi5jdXJyZW50U2luZ2xlPT09YS5pdGVtKSgiZGlzYWJsZWQiLCFhLmNsckRnU2VsZWN0YWJsZXx8bnVsbCksaHIoImFyaWEtZGlzYWJsZWQiLCFhLmNs''@;'; put 'put ''ckRnU2VsZWN0YWJsZXx8bnVsbCksZmUoKSxNZSgiZm9yIixhLnJhZGlvSWQpLGZlKDIpLHdyKGEuY2xyRGdSb3dTZWxlY3Rpb25MYWJlbHx8YS5jb21tb25TdHJpbmdzLmtleXMuc2VsZWN0KX19ZnVuY3Rpb24gVEJlKGMsbCl7MSZjJiYoZGUoMCwiZGl2IiwyOCksWXIoMSwyKSxoZSgpKX1m''@;'; put 'put ''dW5jdGlvbiBBQmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJidXR0b24iLDMyKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKDQpLnRvZ2dsZUV4cGFuZCgpKX0pLEd0KDEsImNkcy1pY29uIiwzMyksaGUoKX1pZigyJmMpe2NvbnN0IGE9UmUoNCk7''@;'; put 'put ''aHIoImFyaWEtZXhwYW5kZWQiLGEuZXhwYW5kLmV4cGFuZGVkKSgiYXJpYS1sYWJlbCIsYS5leHBhbmQuZXhwYW5kZWQ/YS5jbHJEZ0RldGFpbENsb3NlTGFiZWw6YS5jbHJEZ0RldGFpbE9wZW5MYWJlbCkoImFyaWEtY29udHJvbHMiLGEuZXhwYW5kLmhhc0V4cGFuZFRlbXBsYXRlJiYhYS5l''@;'; put 'put ''eHBhbmQuZXhwYW5kZWQ/bnVsbDphLmV4cGFuZGFibGVJZCksZmUoKSxocigiZGlyZWN0aW9uIixhLmV4cGFuZC5leHBhbmRlZD8iZG93biI6InJpZ2h0IikoInRpdGxlIixhLmV4cGFuZC5leHBhbmRlZD9hLmNvbW1vblN0cmluZ3Mua2V5cy5jb2xsYXBzZTphLmNvbW1vblN0cmluZ3Mua2V5''@;'; put 'put ''cy5leHBhbmQpfX1mdW5jdGlvbiBrQmUoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItc3Bpbm5lciIsMzQpLExlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSg0KTtmZSgpLHdyKGEuY29tbW9uU3RyaW5ncy5rZXlzLmxvYWRpbmcpfX1mdW5jdGlvbiBEQmUoYyxsKXtpZigxJmMmJihzaSgwKSxn''@;'; put 'put ''dCgxLEFCZSwyLDUsImJ1dHRvbiIsMzApKDIsa0JlLDIsMSwiY2xyLXNwaW5uZXIiLDMxKSxsaSgpKSwyJmMpe2NvbnN0IGE9UmUoMyk7ZmUoKSxNZSgibmdJZiIsIWEuZXhwYW5kLmxvYWRpbmcpLGZlKCksTWUoIm5nSWYiLGEuZXhwYW5kLmxvYWRpbmcpfX1mdW5jdGlvbiBJQmUoYyxsKXtp''@;'; put 'put ''ZigxJmMmJihkZSgwLCJkaXYiLDI5KSxndCgxLERCZSwzLDIsIm5nLWNvbnRhaW5lciIsOCksaGUoKSksMiZjKXtjb25zdCBhPVJlKDIpO2ZlKCksTWUoIm5nSWYiLGEuZXhwYW5kLmV4cGFuZGFibGUpfX1mdW5jdGlvbiBSQmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJidXR0''@;'; put 'put ''b24iLDM3LDUpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPWhhKDEpLGY9UmUoMyk7cmV0dXJuIEN0KGYuZGV0YWlsU2VydmljZS50b2dnbGUoZi5pdGVtLGgpKX0pLEd0KDIsImNkcy1pY29uIiwzOCksaGUoKX1pZigyJmMpe2NvbnN0IGE9UmUoMyk7VHIoImlzLW9wZW4i''@;'; put 'put ''LGEuZGV0YWlsU2VydmljZS5pc1Jvd09wZW4oYS5pdGVtKSksTWUoImRpc2FibGVkIixhLmRldGFpbERpc2FibGVkKSxocigiYXJpYS1sYWJlbCIsYS5kZXRhaWxTZXJ2aWNlLmlzUm93T3BlbihhLml0ZW0pP2EuY2xyRGdEZXRhaWxDbG9zZUxhYmVsOmEuY2xyRGdEZXRhaWxPcGVuTGFiZWwp''@;'; put 'put ''KCJhcmlhLWV4cGFuZGVkIixhLmRldGFpbFNlcnZpY2UuaXNSb3dPcGVuKGEuaXRlbSkpKCJhcmlhLWNvbnRyb2xzIixhLmRldGFpbFNlcnZpY2UuaWQpLGZlKDIpLGhyKCJkaXJlY3Rpb24iLGEuZGV0YWlsU2VydmljZS5pc1Jvd09wZW4oYS5pdGVtKT8ibGVmdCI6InJpZ2h0IikoInRpdGxl''@;'; put 'put ''IixhLmRldGFpbFNlcnZpY2UuaXNSb3dPcGVuKGEuaXRlbSk/YS5jb21tb25TdHJpbmdzLmtleXMuY2xvc2U6YS5jb21tb25TdHJpbmdzLmtleXMub3Blbil9fWZ1bmN0aW9uIExCZShjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMzUpLGd0KDEsUkJlLDMsOCwiYnV0dG9uIiwzNiksaGUoKSks''@;'; put 'put ''MiZjKXtjb25zdCBhPVJlKDIpO2ZlKCksTWUoIm5nSWYiLCFhLmRldGFpbEhpZGRlbil9fWZ1bmN0aW9uIE9CZShjLGwpe31mdW5jdGlvbiBQQmUoYyxsKXsxJmMmJmd0KDAsT0JlLDAsMCwibmctdGVtcGxhdGUiLDExKSwyJmMmJihSZSgyKSxNZSgibmdUZW1wbGF0ZU91dGxldCIsaGEoNCkp''@;'; put 'put ''KX1mdW5jdGlvbiBGQmUoYyxsKXt9ZnVuY3Rpb24gSEJlKGMsbCl7MSZjJiZndCgwLEZCZSwwLDAsIm5nLXRlbXBsYXRlIiwxMSksMiZjJiYoUmUoMiksTWUoIm5nVGVtcGxhdGVPdXRsZXQiLGhhKDQpKSl9ZnVuY3Rpb24gTkJlKGMsbCl7MSZjJiZHdCgwLCJjbHItZGctY2VsbCIsMzkpfWZ1''@;'; put 'put ''bmN0aW9uIFZCZShjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMTIpKDEsImRpdiIsMTMpLHNpKDIsbnVsbCwzKSxndCg0LHhCZSw2LDksImRpdiIsMTQpKDUsRUJlLDYsMTIsImRpdiIsMTQpKDYsVEJlLDIsMCwiZGl2IiwxNSkoNyxJQmUsMiwxLCJkaXYiLDE2KSg4LExCZSwyLDEsImRpdiIs''@;'; put 'put ''MTcpLGxpKCksaGUoKSxkZSg5LCJkaXYiLDE4KSgxMCwiZGl2IiwxOSksWXIoMTEsMSksRmwoMTIsbnVsbCw0KSxoZSgpLGd0KDE0LFBCZSwxLDEsbnVsbCw4KSgxNSxIQmUsMSwxLG51bGwsOCksaGUoKSxndCgxNixOQmUsMSwwLCJjbHItZGctY2VsbCIsMjApLGhlKCkpLDImYyl7Y29uc3Qg''@;'; put 'put ''YT1SZSgpO1RyKCJkYXRhZ3JpZC1yb3ctZGV0YWlsLW9wZW4iLGEuZGV0YWlsU2VydmljZS5pc1Jvd09wZW4oYS5pdGVtKSksTWUoImlkIixhLmlkKSxmZSg0KSxNZSgibmdJZiIsYS5zZWxlY3Rpb24uc2VsZWN0aW9uVHlwZT09PWEuU0VMRUNUSU9OX1RZUEUuTXVsdGkpLGZlKCksTWUoIm5n''@;'; put 'put ''SWYiLGEuc2VsZWN0aW9uLnNlbGVjdGlvblR5cGU9PT1hLlNFTEVDVElPTl9UWVBFLlNpbmdsZSksZmUoKSxNZSgibmdJZiIsYS5yb3dBY3Rpb25TZXJ2aWNlLmhhc0FjdGlvbmFibGVSb3cpLGZlKCksTWUoIm5nSWYiLGEuZ2xvYmFsRXhwYW5kYWJsZS5oYXNFeHBhbmRhYmxlUm93KSxmZSgp''@;'; put 'put ''LE1lKCJuZ0lmIixhLmRldGFpbFNlcnZpY2UuZW5hYmxlZCksZmUoKSxNZSgibmdDbGFzcyIsc3AoMTIscEJlLGEucmVwbGFjZWQmJmEuZXhwYW5kZWQpKSxmZSg1KSxNZSgibmdJZiIsYS5yZXBsYWNlZCYmIWEuZXhwYW5kLmxvYWRpbmcpLGZlKCksTWUoIm5nSWYiLCFhLnJlcGxhY2VkJiYh''@;'; put 'put ''YS5leHBhbmQubG9hZGluZyksZmUoKSxNZSgibmdJZiIsYS5za2VsZXRvbkxvYWRpbmcpfX1jb25zdCBCQmU9WyJkYXRhZ3JpZCJdLGpCZT1bImRhdGFncmlkVGFibGUiXSx6QmU9WyJzY3JvbGxhYmxlQ29sdW1ucyJdLFVCZT1bInByb2plY3RlZERpc3BsYXlDb2x1bW5zIl0sWkJlPVsicHJv''@;'; put 'put ''amVjdGVkQ2FsY3VsYXRpb25Db2x1bW5zIl0sV0JlPVsiZGlzcGxheWVkUm93cyJdLFlCZT1bImNhbGN1bGF0aW9uUm93cyJdLEdCZT1bInNlbGVjdEFsbENoZWNrYm94Il0sJEJlPVtbWyJjbHItZGctYWN0aW9uLWJhciJdXSxbWyJjbHItZGctcGxhY2Vob2xkZXIiXV0sW1siY2xyLWRnLWZv''@;'; put 'put ''b3RlciJdXSxbWyIiLCJjbHJJZkRldGFpbCIsIiJdLFsiY2xyLWRnLWRldGFpbCJdXV0sS0JlPVsiY2xyLWRnLWFjdGlvbi1iYXIiLCJjbHItZGctcGxhY2Vob2xkZXIiLCJjbHItZGctZm9vdGVyIiwiW2NscklmRGV0YWlsXSxjbHItZGctZGV0YWlsIl07ZnVuY3Rpb24gcUJlKGMsbCl7aWYo''@;'; put 'put ''MSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2IiwzMCkoMSwiaW5wdXQiLDMxLDYpLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPVJlKDIpO3JldHVybiBtaShmLmFsbFNlbGVjdGVkLGgpfHwoZi5hbGxTZWxlY3RlZD1oKSxDdChoKX0pLGhlKCksZGUoMywi''@;'; put 'put ''bGFiZWwiLDMyKSg0LCJzcGFuIiwzMyksTGUoNSksaGUoKSgpKCl9aWYoMiZjKXtjb25zdCBhPVJlKDIpO2ZlKCksTWUoImlkIixhLnNlbGVjdEFsbElkKSxwaSgibmdNb2RlbCIsYS5hbGxTZWxlY3RlZCksaHIoImFyaWEtbGFiZWwiLGEuY29tbW9uU3RyaW5ncy5rZXlzLnNlbGVjdEFsbCks''@;'; put 'put ''ZmUoMiksTWUoImZvciIsYS5zZWxlY3RBbGxJZCksZmUoMiksd3IoYS5jb21tb25TdHJpbmdzLmtleXMuc2VsZWN0QWxsKX19ZnVuY3Rpb24gWEJlKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2IiwyNyksRnQoImtleWRvd24uc3BhY2UiLGZ1bmN0aW9uKGgpe3JldHVybiB3''@;'; put 'put ''dChhKSxDdChSZSgpLnRvZ2dsZUFsbFNlbGVjdGVkKGgpKX0pLGd0KDEscUJlLDYsNSwiZGl2IiwyOCksR3QoMiwiZGl2IiwyOSksaGUoKX1pZigyJmMpe2NvbnN0IGE9UmUoKTtmZSgpLE1lKCJuZ0lmIiwhYS52aXJ0dWFsU2Nyb2xsfHxhLmN1c3RvbVNlbGVjdEFsbEVuYWJsZWQpfX1mdW5j''@;'; put 'put ''dGlvbiBKQmUoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDM0KSgxLCJkaXYiLDMzKSxMZSgyKSxoZSgpLEd0KDMsImRpdiIsMjkpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgpO2ZlKDIpLHdyKGEuY2xyRGdTaW5nbGVTZWxlY3Rpb25BcmlhTGFiZWwpfX1mdW5jdGlvbiBRQmUoYyxsKXtpZigx''@;'; put 'put ''JmMmJihkZSgwLCJkaXYiLDM1KSgxLCJkaXYiLDMzKSxMZSgyKSxoZSgpLEd0KDMsImRpdiIsMjkpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgpO2ZlKDIpLHdyKGEuY2xyRGdTaW5nbGVBY3Rpb25hYmxlQXJpYUxhYmVsKX19ZnVuY3Rpb24gZWplKGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiwz''@;'; put 'put ''NikoMSwiZGl2IiwzMyksTGUoMiksaGUoKSxHdCgzLCJkaXYiLDI5KSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoKTtmZSgyKSx3cihhLmNsckRldGFpbEV4cGFuZGFibGVBcmlhTGFiZWwpfX1mdW5jdGlvbiB0amUoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItZGctcm93IiwzNykoMSwiY2xyLWRn''@;'; put 'put ''LWNlbGwiKSxHdCgyLCJjbHItc3Bpbm5lciIsMzgpLGRlKDMsInNwYW4iKSxMZSg0KSxoZSgpKCkoKSksMiZjKXtjb25zdCBhPVJlKCk7ZmUoNCksd3IoYS5jb21tb25TdHJpbmdzLmtleXMubG9hZGluZyl9fWZ1bmN0aW9uIG5qZShjLGwpe2lmKDEmYyYmKGRlKDAsImNsci1kZy1yb3ciLDM3''@;'; put 'put ''KSgxLCJjbHItZGctY2VsbCIpLEd0KDIsImNsci1zcGlubmVyIiwzOCksZGUoMywic3BhbiIpLExlKDQpLGhlKCkoKSgpKSwyJmMpe2NvbnN0IGE9UmUoKTtmZSg0KSx3cihhLmNvbW1vblN0cmluZ3Mua2V5cy5sb2FkaW5nKX19ZnVuY3Rpb24gcmplKGMsbCl7MSZjJiZHdCgwLCJjbHItZGct''@;'; put 'put ''cGxhY2Vob2xkZXIiKX1mdW5jdGlvbiBpamUoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDM5KSgxLCJjbHItc3Bpbm5lciIsMzgpLExlKDIsIkxvYWRpbmciKSxoZSgpKCkpfWNvbnN0IG9qZT1bImFsbFNlbGVjdGVkIl07ZnVuY3Rpb24gc2plKGMsbCl7fWZ1bmN0aW9uIGxqZShjLGwpe2lmKDEm''@;'; put 'put ''Yyl7Y29uc3QgYT1MbigpO2RlKDAsImxpIikoMSwiY2xyLWNoZWNrYm94LXdyYXBwZXIiKSgyLCJpbnB1dCIsMTMpLEZ0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtjb25zdCBmPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoUmUoMikudG9nZ2xlQ29sdW1uU3RhdGUoZiwhaCkpfSks''@;'; put 'put ''aGUoKSxkZSgzLCJsYWJlbCIpLGd0KDQsc2plLDAsMCwibmctdGVtcGxhdGUiLDE0KSxoZSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1SZSgyKTtmZSgyKSxNZSgiZGlzYWJsZWQiLGQuaGFzT25seU9uZVZpc2libGVDb2x1bW4mJiFhLmhpZGRlbikoIm5nTW9kZWwiLCFh''@;'; put 'put ''LmhpZGRlbiksZmUoMiksTWUoIm5nVGVtcGxhdGVPdXRsZXQiLGEudGl0bGVUZW1wbGF0ZVJlZil9fWZ1bmN0aW9uIGNqZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIsMykoMSwiZGl2Iiw0KSgyLCJkaXYiLDUsMCksTGUoNCksaGUoKSxkZSg1LCJoMiIpLExlKDYpLGhl''@;'; put 'put ''KCksZGUoNywiYnV0dG9uIiw2KSxHdCg4LCJjZHMtaWNvbiIsNyksZGUoOSwic3BhbiIsOCksTGUoMTApLGhlKCkoKSgpLGRlKDExLCJ1bCIsOSksZ3QoMTIsbGplLDUsMywibGkiLDEwKSxoZSgpLGRlKDEzLCJkaXYiLDExKSgxNCwiY2xyLWRnLWNvbHVtbi10b2dnbGUtYnV0dG9uIiwxMiks''@;'; put 'put ''RnQoImNsckFsbFNlbGVjdGVkIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgpLmFsbENvbHVtbnNTZWxlY3RlZCgpKX0pLGhlKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1SZSgpO01lKCJpZCIsYS5wb3BvdmVySWQpLGhyKCJhcmlhLWxhYmVsIixhLmNvbW1vblN0cmluZ3Mua2V5cy5z''@;'; put 'put ''aG93Q29sdW1uc01lbnVEZXNjcmlwdGlvbiksZmUoNCksd3IoYS5jb21tb25TdHJpbmdzLmtleXMuYWxsQ29sdW1uc1NlbGVjdGVkKSxmZSgyKSx3cihhLmNvbW1vblN0cmluZ3Mua2V5cy5zaG93Q29sdW1ucyksZmUoKSxocigiYXJpYS1sYWJlbCIsYS5jb21tb25TdHJpbmdzLmtleXMuY2xv''@;'; put 'put ''c2UpLGZlKCksaHIoInRpdGxlIixhLmNvbW1vblN0cmluZ3Mua2V5cy5jbG9zZSksZmUoMiksd3IoYS5jb21tb25TdHJpbmdzLmtleXMuY2xvc2UpLGZlKDIpLE1lKCJuZ0Zvck9mIixhLmhpZGVhYmxlQ29sdW1uU3RhdGVzKSgibmdGb3JUcmFja0J5IixhLnRyYWNrQnlGbil9fWNvbnN0IEMx''@;'; put 'put ''ZT1bInRpdGxlIl0sZGplPVtbWyJjbHItZGctcGFnaW5hdGlvbiJdXSwiKiJdLGhqZT1bImNsci1kZy1wYWdpbmF0aW9uIiwiKiJdO2Z1bmN0aW9uIGZqZShjLGwpe2lmKDEmYyYmKHNpKDApLGRlKDEsImRpdiIsMSkoMiwiY2xyLWNoZWNrYm94LXdyYXBwZXIiLDIpLEd0KDMsImlucHV0Iiwz''@;'; put 'put ''KSxkZSg0LCJsYWJlbCIpLExlKDUpLGhlKCksZGUoNiwic3BhbiIsNCksTGUoNyksaGUoKSgpKCksbGkoKSksMiZjKXtjb25zdCBhPVJlKCk7ZmUoNSksd3IoYS5zZWxlY3Rpb24uY3VycmVudC5sZW5ndGgpLGZlKDIpLHdyKGEuY29tbW9uU3RyaW5ncy5rZXlzLnNlbGVjdGVkUm93cyl9fWZ1''@;'; put 'put ''bmN0aW9uIHBqZShjLGwpezEmYyYmR3QoMCwiY2xyLWRnLWNvbHVtbi10b2dnbGUiKX1mdW5jdGlvbiBnamUoYyxsKXtpZigxJmMmJihzaSgwKSxndCgxLHBqZSwxLDAsImNsci1kZy1jb2x1bW4tdG9nZ2xlIiwwKSxkZSgyLCJkaXYiLDUpLFlyKDMsMSksaGUoKSxsaSgpKSwyJmMpe2NvbnN0''@;'; put 'put ''IGE9UmUoKTtmZSgpLE1lKCJuZ0lmIixhLmhhc0hpZGVhYmxlQ29sdW1ucyl9fWZ1bmN0aW9uIG1qZShjLGwpe2lmKDEmYyYmKGRlKDAsIm9wdGlvbiIsNCksTGUoMSksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O01lKCJuZ1ZhbHVlIixhKSxmZSgpLHdyKGEpfX1jb25zdCB2amU9''@;'; put 'put ''WyJjdXJyZW50UGFnZUlucHV0Il0sYmplPVsiKiIsW1siY2xyLWRnLXBhZ2Utc2l6ZSJdXV0seWplPVsiKiIsImNsci1kZy1wYWdlLXNpemUiXTtmdW5jdGlvbiBfamUoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDYpLFlyKDEsMSksaGUoKSl9ZnVuY3Rpb24gd2plKGMsbCl7aWYoMSZjKXtjb25z''@;'; put 'put ''dCBhPUxuKCk7ZGUoMCwiaW5wdXQiLDE4LDEpLEZ0KCJrZXlkb3duLmVudGVyIixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoUmUoMykudXBkYXRlQ3VycmVudFBhZ2UoaCkpfSkoImJsdXIiLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChSZSgzKS52ZXJpZnlDdXJyZW50UGFnZSho''@;'; put 'put ''KSl9KSxoZSgpfWlmKDImYyl7Y29uc3QgYT1SZSgzKTtNZSgic2l6ZSIsYS5wYWdlLmxhc3QudG9TdHJpbmcoKS5sZW5ndGgpKCJ2YWx1ZSIsYS5wYWdlLmN1cnJlbnQpLGhyKCJhcmlhLWxhYmVsIixhLmNvbW1vblN0cmluZ3Mua2V5cy5jdXJyZW50UGFnZSl9fWZ1bmN0aW9uIENqZShjLGwp''@;'; put 'put ''e2lmKDEmYyYmKGRlKDAsInNwYW4iKSxMZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoMyk7ZmUoKSx3cihhLnBhZ2UuY3VycmVudCl9fWZ1bmN0aW9uIFNqZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIsNykoMSwiYnV0dG9uIiw4KSxGdCgiY2xpY2siLGZ1bmN0aW9u''@;'; put 'put ''KCl7cmV0dXJuIHd0KGEpLEN0KFJlKDIpLnBhZ2UuY3VycmVudD0xKX0pLGRlKDIsInNwYW4iLDkpLExlKDMpLGhlKCksR3QoNCwiY2RzLWljb24iLDEwKSxoZSgpLGRlKDUsImJ1dHRvbiIsMTEpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPVJlKDIpO3JldHVybiBDdCho''@;'; put 'put ''LnBhZ2UuY3VycmVudD1oLnBhZ2UuY3VycmVudC0xKX0pLGRlKDYsInNwYW4iLDkpLExlKDcpLGhlKCksR3QoOCwiY2RzLWljb24iLDEyKSxoZSgpLGd0KDksd2plLDIsMywiaW5wdXQiLDEzKSgxMCxDamUsMiwxLCJuZy10ZW1wbGF0ZSIsbnVsbCwwLEljKSxMZSgxMiwiIFx4YTAvXHhhMCIp''@;'; put 'put ''LGRlKDEzLCJzcGFuIiksTGUoMTQpLGhlKCksZGUoMTUsImJ1dHRvbiIsMTQpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPVJlKDIpO3JldHVybiBDdChoLnBhZ2UuY3VycmVudD1oLnBhZ2UuY3VycmVudCsxKX0pLGRlKDE2LCJzcGFuIiw5KSxMZSgxNyksaGUoKSxHdCgx''@;'; put 'put ''OCwiY2RzLWljb24iLDE1KSxoZSgpLGRlKDE5LCJidXR0b24iLDE2KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSgyKTtyZXR1cm4gQ3QoaC5wYWdlLmN1cnJlbnQ9aC5wYWdlLmxhc3QpfSksZGUoMjAsInNwYW4iLDkpLExlKDIxKSxoZSgpLEd0KDIyLCJjZHMtaWNv''@;'; put 'put ''biIsMTcpLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9aGEoMTEpLGQ9UmUoMik7ZmUoKSxNZSgiZGlzYWJsZWQiLGQucGFnZS5jdXJyZW50PD0xKSxocigiYXJpYS1sYWJlbCIsZC5jb21tb25TdHJpbmdzLmtleXMuZmlyc3RQYWdlKSxmZSgyKSx3cihkLmNvbW1vblN0cmluZ3Mua2V5cy5maXJz''@;'; put 'put ''dFBhZ2UpLGZlKDIpLE1lKCJkaXNhYmxlZCIsZC5wYWdlLmN1cnJlbnQ8PTEpLGhyKCJhcmlhLWxhYmVsIixkLmNvbW1vblN0cmluZ3Mua2V5cy5wcmV2aW91c1BhZ2UpLGZlKDIpLHdyKGQuY29tbW9uU3RyaW5ncy5rZXlzLnByZXZpb3VzUGFnZSksZmUoMiksTWUoIm5nSWYiLCFkLmRpc2Fi''@;'; put 'put ''bGVDdXJyZW50UGFnZUlucHV0KSgibmdJZkVsc2UiLGEpLGZlKDQpLGhyKCJhcmlhLWxhYmVsIixkLmNvbW1vblN0cmluZ3Mua2V5cy50b3RhbFBhZ2VzKSxmZSgpLHdyKGQucGFnZS5sYXN0KSxmZSgpLE1lKCJkaXNhYmxlZCIsZC5wYWdlLmN1cnJlbnQ+PWQucGFnZS5sYXN0KSxocigiYXJp''@;'; put 'put ''YS1sYWJlbCIsZC5jb21tb25TdHJpbmdzLmtleXMubmV4dFBhZ2UpLGZlKDIpLHdyKGQuY29tbW9uU3RyaW5ncy5rZXlzLm5leHRQYWdlKSxmZSgyKSxNZSgiZGlzYWJsZWQiLGQucGFnZS5jdXJyZW50Pj1kLnBhZ2UubGFzdCksaHIoImFyaWEtbGFiZWwiLGQuY29tbW9uU3RyaW5ncy5rZXlz''@;'; put 'put ''Lmxhc3RQYWdlKSxmZSgyKSx3cihkLmNvbW1vblN0cmluZ3Mua2V5cy5sYXN0UGFnZSl9fWZ1bmN0aW9uIE1qZShjLGwpe2lmKDEmYyYmKHNpKDApLGd0KDEsX2plLDIsMCwiZGl2IiwzKSxkZSgyLCJkaXYiLDQpLFlyKDMpLGhlKCksZ3QoNCxTamUsMjMsMTYsImRpdiIsNSksbGkoKSksMiZj''@;'; put 'put ''KXtjb25zdCBhPVJlKCk7ZmUoKSxNZSgibmdJZiIsYS5fcGFnZVNpemVDb21wb25lbnQpLGZlKDMpLE1lKCJuZ0lmIixhLnBhZ2UubGFzdD4xKX19ZnVuY3Rpb24geGplKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7c2koMCksZGUoMSwiZGl2IiwxOSksTGUoMiksaGUoKSxkZSgzLCJkaXYi''@;'; put 'put ''LDcpKDQsImJ1dHRvbiIsMTEpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPVJlKCk7cmV0dXJuIEN0KGgucGFnZS5jdXJyZW50PWgucGFnZS5jdXJyZW50LTEpfSksZGUoNSwic3BhbiIsOSksTGUoNiksaGUoKSxHdCg3LCJjZHMtaWNvbiIsMTIpLGhlKCksZGUoOCwic3Bh''@;'; put 'put ''biIpLExlKDkpLGhlKCksZGUoMTAsImJ1dHRvbiIsMTQpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPVJlKCk7cmV0dXJuIEN0KGgucGFnZS5jdXJyZW50PWgucGFnZS5jdXJyZW50KzEpfSksZGUoMTEsInNwYW4iLDkpLExlKDEyKSxoZSgpLEd0KDEzLCJjZHMtaWNvbiIs''@;'; put 'put ''MTUpLGhlKCkoKSxsaSgpfWlmKDImYyl7Y29uc3QgYT1SZSgpO2ZlKDIpLFZmKCIgIixhLnBhZ2UuZmlyc3RJdGVtKzEsIi0iLGEucGFnZS5sYXN0SXRlbSsxLCIgLyAiLGEucGFnZS50b3RhbEl0ZW1zLCIgIiksZmUoMiksTWUoImRpc2FibGVkIixhLnBhZ2UuY3VycmVudDw9MSksaHIoImFy''@;'; put 'put ''aWEtbGFiZWwiLGEuY29tbW9uU3RyaW5ncy5rZXlzLnByZXZpb3VzUGFnZSksZmUoMiksd3IoYS5jb21tb25TdHJpbmdzLmtleXMucHJldmlvdXNQYWdlKSxmZSgzKSx3cihhLnBhZ2UuY3VycmVudCksZmUoKSxNZSgiZGlzYWJsZWQiLGEucGFnZS5jdXJyZW50Pj1hLnBhZ2UubGFzdCksaHIo''@;'; put 'put ''ImFyaWEtbGFiZWwiLGEuY29tbW9uU3RyaW5ncy5rZXlzLm5leHRQYWdlKSxmZSgyKSx3cihhLmNvbW1vblN0cmluZ3Mua2V5cy5uZXh0UGFnZSl9fWNvbnN0IGtqZT1bW1siY2xyLXN0YWNrLWxhYmVsIl1dLCIqIixbWyJjbHItc3RhY2stYmxvY2siXV1dLERqZT1bImNsci1zdGFjay1sYWJl''@;'; put 'put ''bCIsIioiLCJjbHItc3RhY2stYmxvY2siXTtmdW5jdGlvbiBJamUoYyxsKXsxJmMmJkd0KDAsImNkcy1pY29uIiw3KSwyJmMmJmhyKCJkaXJlY3Rpb24iLFJlKCkuY2FyZXREaXJlY3Rpb24pfWZ1bmN0aW9uIFJqZShjLGwpe2lmKDEmYyYmKGRlKDAsInNwYW4iLDgpLExlKDEpLGhlKCkpLDIm''@;'; put 'put ''Yyl7Y29uc3QgYT1SZSgpO2ZlKCksd3IoYS5jb21tb25TdHJpbmdzLmtleXMuc3RhY2tWaWV3Q2hhbmdlZCl9fWZ1bmN0aW9uIExqZShjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsOSksWXIoMSwyKSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoKTtfZCgiaGVpZ2h0IixhLmV4cGFuZGVkPyJhdXRv''@;'; put 'put ''IjowKSxocigiaWQiLGEuZ2V0U3RhY2tDaGlsZHJlbklkKCkpKCJhcmlhLWxhYmVsbGVkYnkiLGEubGFiZWxsZWRCeUlkKX19Y29uc3QgT2plPVtbWyJjbHItc3RhY2staGVhZGVyIl1dLCIqIl0sUGplPVsiY2xyLXN0YWNrLWhlYWRlciIsIioiXTtmdW5jdGlvbiBOamUoYyxsKXsxJmMmJkZs''@;'; put 'put ''KDApfWZ1bmN0aW9uIFZqZShjLGwpe2lmKDEmYyYmKHNpKDApLGd0KDEsTmplLDEsMCwibmctY29udGFpbmVyIiwyKSxsaSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1SZSgyKTtmZSgpLE1lKCJuZ1RlbXBsYXRlT3V0bGV0IixkLmZlYXR1cmVzU2VydmljZS5yZWN1cnNpb24udGVt''@;'; put 'put ''cGxhdGUpKCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsZC5nZXRDb250ZXh0KGEpKX19ZnVuY3Rpb24gQmplKGMsbCl7aWYoMSZjJiYoc2koMCksZ3QoMSxWamUsMiwyLCJuZy1jb250YWluZXIiLDEpLGxpKCkpLDImYyl7Y29uc3QgYT1SZSgpO2ZlKCksTWUoIm5nRm9yT2YiLChudWxsPT1h''@;'; put 'put ''LnBhcmVudD9udWxsOmEucGFyZW50LmNoaWxkcmVuKXx8YS5jaGlsZHJlbil9fWNvbnN0IGpqZT1bImNvbnRlbnRDb250YWluZXIiXSx6amU9W1tbImNsci10cmVlLW5vZGUiXV0sW1siIiwiY2xySWZFeHBhbmRlZCIsIiJdXSwiKiJdLFVqZT1bImNsci10cmVlLW5vZGUiLCJbY2xySWZFeHBh''@;'; put 'put ''bmRlZF0iLCIqIl07ZnVuY3Rpb24gWmplKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiYnV0dG9uIiw5KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkuZXhwYW5kU2VydmljZS50b2dnbGUoKSl9KSgiZm9jdXMiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0''@;'; put 'put ''KGEpLEN0KFJlKCkuZm9jdXNUcmVlTm9kZSgpKX0pLEd0KDEsImNkcy1pY29uIiwxMCksaGUoKX1pZigyJmMpe2NvbnN0IGE9UmUoKTtNZSgiZGlzYWJsZWQiLGEuZGlzYWJsZWQpLGZlKCksaHIoImRpcmVjdGlvbiIsYS5leHBhbmRTZXJ2aWNlLmV4cGFuZGVkPyJkb3duIjoicmlnaHQiKX19''@;'; put 'put ''ZnVuY3Rpb24gV2plKGMsbCl7MSZjJiYoZGUoMCwiZGl2IiwxMSksR3QoMSwic3BhbiIsMTIpLGhlKCkpfWZ1bmN0aW9uIFlqZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIsMTMpKDEsImlucHV0IiwxNCksRnQoImNoYW5nZSIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBo''@;'; put 'put ''PVJlKCk7cmV0dXJuIEN0KGguX21vZGVsLnRvZ2dsZVNlbGVjdGlvbihoLmZlYXR1cmVzU2VydmljZS5lYWdlcikpfSkoImZvY3VzIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgpLmZvY3VzVHJlZU5vZGUoKSl9KSxoZSgpLGRlKDIsImxhYmVsIiwxNSksRmwoMywxNiksaGUoKSgp''@;'; put 'put ''fWlmKDImYyl7Y29uc3QgYT1SZSgpLGQ9aGEoNyk7ZmUoKSxNZSgiaWQiLGEubm9kZUlkKyItY2hlY2siKSgiZGlzYWJsZWQiLGEuZGlzYWJsZWQpKCJjaGVja2VkIixhLl9tb2RlbC5zZWxlY3RlZC52YWx1ZT09PWEuU1RBVEVTLlNFTEVDVEVEKSgiaW5kZXRlcm1pbmF0ZSIsYS5fbW9kZWwu''@;'; put 'put ''c2VsZWN0ZWQudmFsdWU9PT1hLlNUQVRFUy5JTkRFVEVSTUlOQVRFKSxmZSgpLE1lKCJmb3IiLGEubm9kZUlkKyItY2hlY2siKSxmZSgpLE1lKCJuZ1RlbXBsYXRlT3V0bGV0IixkKX19ZnVuY3Rpb24gR2plKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2IiwxNyksRnQoIm1v''@;'; put 'put ''dXNldXAiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkuZm9jdXNUcmVlTm9kZSgpKX0pLEZsKDEsMTYpLGhlKCl9aWYoMiZjKXtSZSgpO2NvbnN0IGE9aGEoNyk7ZmUoKSxNZSgibmdUZW1wbGF0ZU91dGxldCIsYSl9fWZ1bmN0aW9uICRqZShjLGwpe2lmKDEmYyYmKGRlKDAsImRp''@;'; put 'put ''diIsMTkpKDEsInNwYW4iKSxMZSgyKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1SZSgyKTtmZSgyKSxJcigiICIsYS5hcmlhU2VsZWN0ZWQ/YS5jb21tb25TdHJpbmdzLmtleXMuc2VsZWN0ZWRUcmVlTm9kZTphLmNvbW1vblN0cmluZ3Mua2V5cy51bnNlbGVjdGVkVHJlZU5vZGUsIiIpfX1mdW5j''@;'; put 'put ''dGlvbiBLamUoYyxsKXtpZigxJmMmJihZcigwLDIpLGd0KDEsJGplLDMsMSwiZGl2IiwxOCkpLDImYyl7Y29uc3QgYT1SZSgpO2ZlKCksTWUoIm5nSWYiLGEuZmVhdHVyZXNTZXJ2aWNlLnNlbGVjdGFibGV8fGEuYXJpYVNlbGVjdGVkKX19ZnVuY3Rpb24gcWplKGMsbCl7MSZjJiZHdCgwLCJj''@;'; put 'put ''bHItcmVjdXJzaXZlLWNoaWxkcmVuIiwxKSwyJmMmJk1lKCJjaGlsZHJlbiIsUmUoKS5mZWF0dXJlc1NlcnZpY2UucmVjdXJzaW9uLnJvb3QpfWZ1bmN0aW9uIFhqZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImJ1dHRvbiIsNCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVy''@;'; put 'put ''biB3dChhKSxDdChSZSgyKS5jbG9zZSgpKX0pLEd0KDEsImNkcy1pY29uIiw1KSxoZSgpfTImYyYmaHIoImFyaWEtbGFiZWwiLFJlKDIpLmNsckNsb3NlQnV0dG9uQXJpYUxhYmVsKX1mdW5jdGlvbiBKamUoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDEpKDEsImRpdiIsMiksWXIoMiksaGUo''@;'; put 'put ''KSxndCgzLFhqZSwyLDEsImJ1dHRvbiIsMyksaGUoKSksMiZjKXtjb25zdCBhPVJlKCk7VHIoImFsZXJ0LXNtIixhLmlzU21hbGwpKCJhbGVydC1saWdodHdlaWdodCIsYS5pc0xpZ2h0d2VpZ2h0KSgiYWxlcnQtYXBwLWxldmVsIixhLmlzQXBwTGV2ZWwpLE1lKCJuZ0NsYXNzIixhLmFsZXJ0''@;'; put 'put ''Q2xhc3MpLGZlKDMpLE1lKCJuZ0lmIixhLmNsb3NhYmxlKX19ZnVuY3Rpb24gUWplKGMsbCl7MSZjJiZHdCgwLCJjbHItc3Bpbm5lciIsMyl9ZnVuY3Rpb24gZXplKGMsbCl7aWYoMSZjJiZHdCgwLCJjZHMtaWNvbiIsNCksMiZjKXtjb25zdCBhPVJlKCk7aHIoInNoYXBlIixhLmljb25TZXJ2''@;'; put 'put ''aWNlLmFsZXJ0SWNvblNoYXBlKSgiYXJpYS1sYWJlbCIsYS5pY29uU2VydmljZS5hbGVydEljb25UaXRsZSl9fWNvbnN0IHR6ZT1bW1siY2xyLWFsZXJ0Il1dXSxuemU9WyJjbHItYWxlcnQiXTtmdW5jdGlvbiByemUoYyxsKXsxJmMmJkd0KDAsImNsci1hbGVydHMtcGFnZXIiLDIpLDImYyYm''@;'; put 'put ''TWUoImNsckN1cnJlbnRBbGVydEluZGV4IixSZSgpLmN1cnJlbnRBbGVydEluZGV4KX1jb25zdCBpemU9WyJjbHJJbnRlcm5hbE1vZGFsQ29udGVudFRlbXBsYXRlIl0sUzFlPVsiYm9keSJdLGF6ZT1bW1siIiw4LCJsZWFkaW5nLWJ1dHRvbiJdXSxbWyIiLDgsIm1vZGFsLXRpdGxlIl1dLFtb''@;'; put 'put ''IiIsOCwibW9kYWwtYm9keSJdXSxbWyIiLDgsIm1vZGFsLWZvb3RlciJdXV0sb3plPVsiLmxlYWRpbmctYnV0dG9uIiwiLm1vZGFsLXRpdGxlIiwiLm1vZGFsLWJvZHkiLCIubW9kYWwtZm9vdGVyIl07ZnVuY3Rpb24gc3plKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiYnV0dG9u''@;'; put 'put ''IiwxNCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgzKS5jbG9zZSgpKX0pLEd0KDEsImNkcy1pY29uIiwxNSksaGUoKX1pZigyJmMpe2NvbnN0IGE9UmUoMyk7aHIoImFyaWEtbGFiZWwiLGEuY2xvc2VCdXR0b25BcmlhTGFiZWx8fGEuY29tbW9uU3RyaW5ncy5r''@;'; put 'put ''ZXlzLmNsb3NlKX19ZnVuY3Rpb24gbHplKGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiw4KSgxLCJkaXYiLDkpKDIsImRpdiIsMTApLFlyKDMpLGRlKDQsImRpdiIsMTEsMCksWXIoNiwxKSxoZSgpLGd0KDcsc3plLDIsMSwiYnV0dG9uIiwxMiksaGUoKSxkZSg4LCJkaXYiLDEzLDEpLFlyKDEw''@;'; put 'put ''LDIpLGhlKCksWXIoMTEsMyksaGUoKSgpKSwyJmMpe2NvbnN0IGE9UmUoMik7ZmUoNCksTWUoImlkIixhLm1vZGFsSWQpLGZlKDMpLE1lKCJuZ0lmIixhLmNsb3NhYmxlKX19ZnVuY3Rpb24gY3plKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2Iiw0KSgxLCJkaXYiLDUpLEZ0''@;'; put 'put ''KCJAZmFkZU1vdmUuZG9uZSIsZnVuY3Rpb24oaCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkuZmFkZURvbmUoaCkpfSksZGUoMiwiZGl2Iiw2KSxMZSgzKSxoZSgpLGd0KDQsbHplLDEyLDIsImRpdiIsNyksZGUoNSwiZGl2Iiw2KSxMZSg2KSxoZSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9UmUoKTtU''@;'; put 'put ''cigibW9kYWwtZnVsbC1zY3JlZW4iLCJmdWxsLXNjcmVlbiI9PWEuc2l6ZSksZmUoKSxUcigibW9kYWwtc20iLCJzbSI9PWEuc2l6ZSkoIm1vZGFsLWxnIiwibGciPT1hLnNpemUpKCJtb2RhbC14bCIsInhsIj09YS5zaXplKSxNZSgiY2RrVHJhcEZvY3VzQXV0b0NhcHR1cmUiLCEwKSgiQGZh''@;'; put 'put ''ZGVNb3ZlIixhLmZhZGVNb3ZlKSxocigiYXJpYS1oaWRkZW4iLCFhLl9vcGVuKSgiYXJpYS1sYWJlbGxlZGJ5IixhLmxhYmVsbGVkQnl8fGEubW9kYWxJZCksZmUoMiksd3IoYS5jb21tb25TdHJpbmdzLmtleXMubW9kYWxDb250ZW50U3RhcnQpLGZlKCksTWUoIm5nSWYiLCFhLm1vZGFsQ29u''@;'; put 'put ''dGVudFRlbXBsYXRlKSgibmdJZkVsc2UiLGEubW9kYWxDb250ZW50VGVtcGxhdGUpLGZlKDIpLHdyKGEuY29tbW9uU3RyaW5ncy5rZXlzLm1vZGFsQ29udGVudEVuZCl9fWZ1bmN0aW9uIHV6ZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIsMTYpLEZ0KCJjbGljayIsZnVu''@;'; put 'put ''Y3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS5iYWNrZHJvcENsaWNrKCkpfSksaGUoKX0yJmMmJk1lKCJAZmFkZSIsdm9pZCAwKX1sZXQgSGw9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1ZGlyPUVyKHt0''@;'; put 'put ''eXBlOmMsc2VsZWN0b3JzOltbImNsci1pY29uIl1dfSksY30pKCkscnM9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNkcy1pY29uIl1dfSksY30pKCksQXM9''@;'; put 'put ''KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbUmFdfSksY30pKCk7Y2xhc3MgRHh7fXZhciB6MT1mdW5jdGlvbihjKXtyZXR1cm4gY1tj''@;'; put 'put ''LkRFRkFVTFQ9MF09IkRFRkFVTFQiLGNbYy5MT0FESU5HPTFdPSJMT0FESU5HIixjW2MuU1VDQ0VTUz0yXT0iU1VDQ0VTUyIsY1tjLkVSUk9SPTNdPSJFUlJPUiIsY30oejF8fHt9KTtsZXQgajA9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmxpc3RlbmVyPWEsdGhpcy5fbG9h''@;'; put 'put ''ZGluZ1N0YXRlPXoxLkRFRkFVTFR9Z2V0IGxvYWRpbmdTdGF0ZSgpe3JldHVybiB0aGlzLl9sb2FkaW5nU3RhdGV9c2V0IGxvYWRpbmdTdGF0ZShhKXshMD09PWE/YT16MS5MT0FESU5HOmF8fChhPXoxLkRFRkFVTFQpLGEhPT10aGlzLl9sb2FkaW5nU3RhdGUmJih0aGlzLl9sb2FkaW5nU3Rh''@;'; put 'put ''dGU9YSx0aGlzLmxpc3RlbmVyJiZ0aGlzLmxpc3RlbmVyLmxvYWRpbmdTdGF0ZUNoYW5nZShhKSl9bmdPbkRlc3Ryb3koKXt0aGlzLmxvYWRpbmdTdGF0ZT16MS5ERUZBVUxUfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShEeCw4KSl9LGMuXHUw''@;'; put 'put ''Mjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsckxvYWRpbmciLCIiXV0saW5wdXRzOntsb2FkaW5nU3RhdGU6W05uLk5vbmUsImNsckxvYWRpbmciLCJsb2FkaW5nU3RhdGUiXX19KSxjfSkoKSxVMT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5leHBhbmRhYmxl''@;'; put 'put ''PTAsdGhpcy5oYXNFeHBhbmRUZW1wbGF0ZT0hMSx0aGlzLl9sb2FkaW5nPSExLHRoaXMuX2V4cGFuZGVkPSExLHRoaXMuX2V4cGFuZENoYW5nZT1uZXcgV259Z2V0IGxvYWRpbmcoKXtyZXR1cm4gdGhpcy5fbG9hZGluZ31zZXQgbG9hZGluZyhhKXsoYT0hIWEpIT09dGhpcy5fbG9hZGluZyYm''@;'; put 'put ''KHRoaXMuX2xvYWRpbmc9YSl9Z2V0IGV4cGFuZGVkKCl7cmV0dXJuIHRoaXMuX2V4cGFuZGVkfXNldCBleHBhbmRlZChhKXsoYT0hIWEpIT09dGhpcy5fZXhwYW5kZWQmJih0aGlzLl9leHBhbmRlZD1hLHRoaXMuX2V4cGFuZENoYW5nZS5uZXh0KGEpKX1nZXQgZXhwYW5kQ2hhbmdlKCl7cmV0''@;'; put 'put ''dXJuIHRoaXMuX2V4cGFuZENoYW5nZS5hc09ic2VydmFibGUoKX10b2dnbGUoKXt0aGlzLmV4cGFuZGVkPSF0aGlzLl9leHBhbmRlZH1sb2FkaW5nU3RhdGVDaGFuZ2UoYSl7dGhpcy5sb2FkaW5nPWE9PT16MS5MT0FESU5HfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJu''@;'; put 'put ''IG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxCemU9MDtmdW5jdGlvbiBNdSgpe3JldHVybiJjbHItaWQtIitCemUrK31sZXQgTTFlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1''@;'; put 'put ''cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItYWNjb3JkaW9uLWRlc2NyaXB0aW9uIl0sWyJjbHItc3RlcC1kZXNjcmlwdGlvbiJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmVHIoImNsci1hY2NvcmRpb24t''@;'; put 'put ''ZGVzY3JpcHRpb24iLCEwKX0sbmdDb250ZW50U2VsZWN0b3JzOnlvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoKSxZcigwKSl9LGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLGN9KSgpO2NvbnN0ICRmPSIwLjJzIGVhc2UtaW4tb3V0''@;'; put 'put ''IixqemU9W3loKCJza2lwSW5pdGlhbFJlbmRlciIsW2l1KCI6ZW50ZXIiLFtdKV0pLHloKCJ0b2dnbGUiLFtpdSgidm9pZCA9PiAqIixbdXMoe2Rpc3BsYXk6ImJsb2NrIixoZWlnaHQ6MH0pLE0wKCRmLHVzKHtoZWlnaHQ6IioifSkpXSldKV0sa1k9KHloKCJza2lwSW5pdGlhbFJlbmRlciIs''@;'; put 'put ''W2l1KCI6ZW50ZXIiLFtdKV0pLHloKCJ0b2dnbGUiLFtpdSgidm9pZCA9PiAqIixbdXMoe2Rpc3BsYXk6ImJsb2NrIixoZWlnaHQ6MH0pLE0wKCRmLHVzKHtoZWlnaHQ6IioifSkpXSksaXUoIiogPT4gdm9pZCIsW3VzKHtkaXNwbGF5OiJibG9jayJ9KSxNMCgkZix1cyh7aGVpZ2h0OjAsZGlz''@;'; put 'put ''cGxheToibm9uZSJ9KSldKV0pLHtvcGVuOiJPcGVuIixjbG9zZToiQ2xvc2UiLHNob3c6IlNob3ciLGhpZGU6IkhpZGUiLGFwcGx5OiJBcHBseSIsY2FuY2VsOiJDYW5jZWwiLGV4cGFuZDoiRXhwYW5kIixjb2xsYXBzZToiQ29sbGFwc2UiLG1vcmU6Ik1vcmUiLHNlbGVjdDoiU2VsZWN0Iixz''@;'; put 'put ''ZWxlY3RBbGw6IlNlbGVjdCBBbGwiLHByZXZpb3VzOiJQcmV2aW91cyIsbmV4dDoiTmV4dCIsY3VycmVudDoiSnVtcCB0byBjdXJyZW50IixpbmZvOiJJbmZvIixzdWNjZXNzOiJTdWNjZXNzIix3YXJuaW5nOiJXYXJuaW5nIixkYW5nZXI6IkVycm9yIixuZXV0cmFsOiJOZXV0cmFsIix1bmtu''@;'; put 'put ''b3duOiJVbmtub3duIixyb3dBY3Rpb25zOiJBdmFpbGFibGUgYWN0aW9ucyIscGlja0NvbHVtbnM6Ik1hbmFnZSBDb2x1bW5zIixzaG93Q29sdW1uczoiU2hvdyBDb2x1bW5zIixzb3J0Q29sdW1uOiJTb3J0IENvbHVtbiIsZmlyc3RQYWdlOiJGaXJzdCBQYWdlIixsYXN0UGFnZToiTGFzdCBQ''@;'; put 'put ''YWdlIixuZXh0UGFnZToiTmV4dCBQYWdlIixwcmV2aW91c1BhZ2U6IlByZXZpb3VzIFBhZ2UiLGN1cnJlbnRQYWdlOiJDdXJyZW50IFBhZ2UiLHRvdGFsUGFnZXM6IlRvdGFsIFBhZ2VzIixmaWx0ZXJJdGVtczoiRmlsdGVyIGl0ZW1zIixtaW5WYWx1ZToiTWluIHZhbHVlIixtYXhWYWx1ZToi''@;'; put 'put ''TWF4IHZhbHVlIixtb2RhbENvbnRlbnRTdGFydDoiQmVnaW5uaW5nIG9mIE1vZGFsIENvbnRlbnQiLG1vZGFsQ29udGVudEVuZDoiRW5kIG9mIE1vZGFsIENvbnRlbnQiLHNpZGVQYW5lbFBpbjoiUGluIFNpZGUgUGFuZWwiLHNob3dDb2x1bW5zTWVudURlc2NyaXB0aW9uOiJTaG93IG9yIGhp''@;'; put 'put ''ZGUgY29sdW1ucyBtZW51IixhbGxDb2x1bW5zU2VsZWN0ZWQ6IkFsbCBjb2x1bW5zIHNlbGVjdGVkIixzaWducG9zdFRvZ2dsZToiU2lnbnBvc3QgVG9nZ2xlIixzaWducG9zdENsb3NlOiJDbG9zZSIsbG9hZGluZzoiTG9hZGluZyIsZGV0YWlsUGFuZVN0YXJ0OiJTdGFydCBvZiByb3cgZGV0''@;'; put 'put ''YWlscyIsZGV0YWlsUGFuZUVuZDoiRW5kIG9mIHJvdyBkZXRhaWxzIixzaW5nbGVTZWxlY3Rpb25BcmlhTGFiZWw6IlNpbmdsZSBzZWxlY3Rpb24gaGVhZGVyIixzaW5nbGVBY3Rpb25hYmxlQXJpYUxhYmVsOiJTaW5nbGUgYWN0aW9uYWJsZSBoZWFkZXIiLGRldGFpbEV4cGFuZGFibGVBcmlh''@;'; put 'put ''TGFiZWw6IlRvZ2dsZSBtb3JlIHJvdyBjb250ZW50IixkYXRhZ3JpZEZpbHRlckFyaWFMYWJlbDoie0NPTFVNTn0gZmlsdGVyIixkYXRhZ3JpZEZpbHRlckxhYmVsOiJ7Q09MVU1OfSBmaWx0ZXIiLGRhdGFncmlkRmlsdGVyRGlhbG9nQXJpYUxhYmVsOiJGaWx0ZXIgZGlhbG9nIixjb2x1bW5T''@;'; put 'put ''ZXBhcmF0b3JBcmlhTGFiZWw6IkNvbHVtbiByZXNpemUgaGFuZGxlIixjb2x1bW5TZXBhcmF0b3JEZXNjcmlwdGlvbjoiVXNlIGxlZnQgb3IgcmlnaHQga2V5IHRvIHJlc2l6ZSB0aGUgY29sdW1uIixmcm9tTGFiZWw6IkZyb20iLHRvTGFiZWw6IlRvIixhbGVydENsb3NlQnV0dG9uQXJpYUxh''@;'; put 'put ''YmVsOiJDbG9zZSBhbGVydCIsYWxlcnROZXh0QWxlcnRBcmlhTGFiZWw6Ik5leHQgYWxlcnQgbWVzc2FnZSwge0NVUlJFTlR9IG9mIHtDT1VOVH0iLGFsZXJ0UHJldmlvdXNBbGVydEFyaWFMYWJlbDoiUHJldmlvdXMgYWxlcnQgbWVzc2FnZSwge0NVUlJFTlR9IG9mIHtDT1VOVH0iLGRhdGVw''@;'; put 'put ''aWNrZXJEaWFsb2dMYWJlbDoiQ2hvb3NlIGRhdGUiLGRhdGVwaWNrZXJUb2dnbGVDaG9vc2VEYXRlTGFiZWw6IkNob29zZSBkYXRlIixkYXRlcGlja2VyVG9nZ2xlQ2hhbmdlRGF0ZUxhYmVsOiJDaGFuZ2UgZGF0ZSwge1NFTEVDVEVEX0RBVEV9IixkYXRlcGlja2VyUHJldmlvdXNNb250aDoi''@;'; put 'put ''UHJldmlvdXMgbW9udGgiLGRhdGVwaWNrZXJDdXJyZW50TW9udGg6IkN1cnJlbnQgbW9udGgiLGRhdGVwaWNrZXJOZXh0TW9udGg6Ik5leHQgbW9udGgiLGRhdGVwaWNrZXJQcmV2aW91c0RlY2FkZToiUHJldmlvdXMgZGVjYWRlIixkYXRlcGlja2VyTmV4dERlY2FkZToiTmV4dCBkZWNhZGUi''@;'; put 'put ''LGRhdGVwaWNrZXJDdXJyZW50RGVjYWRlOiJDdXJyZW50IGRlY2FkZSIsZGF0ZXBpY2tlclNlbGVjdE1vbnRoVGV4dDoiU2VsZWN0IG1vbnRoLCB0aGUgY3VycmVudCBtb250aCBpcyB7Q0FMRU5EQVJfTU9OVEh9IixkYXRlcGlja2VyU2VsZWN0WWVhclRleHQ6IlNlbGVjdCB5ZWFyLCB0aGUg''@;'; put 'put ''Y3VycmVudCB5ZWFyIGlzIHtDQUxFTkRBUl9ZRUFSfSIsZGF0ZXBpY2tlclNlbGVjdGVkTGFiZWw6IntGVUxMX0RBVEV9IC0gU2VsZWN0ZWQiLHN0YWNrVmlld0NoYW5nZWQ6IlZhbHVlIGNoYW5nZWQuIixyZXNwb25zaXZlTmF2VG9nZ2xlT3BlbjoiT3BlbiBuYXZpZ2F0aW9uIG1lbnUiLHJl''@;'; put 'put ''c3BvbnNpdmVOYXZUb2dnbGVDbG9zZToiQ2xvc2UgbmF2aWdhdGlvbiBtZW51IixyZXNwb25zaXZlTmF2T3ZlcmZsb3dPcGVuOiJPcGVuIG5hdmlnYXRpb24gb3ZlcmZsb3cgbWVudSIscmVzcG9uc2l2ZU5hdk92ZXJmbG93Q2xvc2U6IkNsb3NlIG5hdmlnYXRpb24gb3ZlcmZsb3cgbWVudSIs''@;'; put 'put ''dmVydGljYWxOYXZUb2dnbGU6IlRvZ2dsZSB2ZXJ0aWNhbCBuYXZpZ2F0aW9uIix0aW1lbGluZVN0ZXBOb3RTdGFydGVkOiJOb3Qgc3RhcnRlZCIsdGltZWxpbmVTdGVwQ3VycmVudDoiQ3VycmVudCIsdGltZWxpbmVTdGVwU3VjY2VzczoiQ29tcGxldGVkIix0aW1lbGluZVN0ZXBFcnJvcjoi''@;'; put 'put ''RXJyb3IiLHRpbWVsaW5lU3RlcFByb2Nlc3Npbmc6IkluIHByb2dyZXNzIixjb21ib2JveERlbGV0ZToiRGVsZXRlIHNlbGVjdGVkIG9wdGlvbiIsY29tYm9ib3hTZWFyY2hpbmc6J1NlYXJjaGluZyBmb3IgbWF0Y2hlcyBmb3IgIntJTlBVVH0iJyxjb21ib2JveFNlbGVjdGlvbjoiU2VsZWN0''@;'; put 'put ''aW9uIixjb21ib2JveFNlbGVjdGVkOiJTZWxlY3RlZCIsY29tYm9ib3hOb1Jlc3VsdHM6Ik5vIHJlc3VsdHMiLGNvbWJvYm94T3BlbjoiU2hvdyBvcHRpb25zIixkYXRhZ3JpZEV4cGFuZGFibGVCZWdpbm5pbmdPZjoiQmVnaW5uaW5nIG9mIixkYXRhZ3JpZEV4cGFuZGFibGVFbmRPZjoiRW5k''@;'; put 'put ''IG9mIixkYXRhZ3JpZEV4cGFuZGFibGVSb3dDb250ZW50OiJFeHBhbmRhYmxlIHJvdyBjb250ZW50IixkYXRhZ3JpZEV4cGFuZGFibGVSb3dzSGVscGVyVGV4dDoiU2NyZWVuIHJlYWRlciB0YWJsZSBjb21tYW5kcyBtYXkgbm90IHdvcmsgZm9yIHZpZXdpbmcgZXhwYW5kZWQgY29udGVudCwg''@;'; put 'put ''cGxlYXNlIHVzZSB5b3VyIHNjcmVlbiByZWFkZXIncyBicm93c2UgbW9kZSB0byByZWFkIHRoZSBjb250ZW50IGV4cG9zZWQgYnkgdGhpcyBidXR0b24iLHdpemFyZFN0ZXA6IlN0ZXAiLHdpemFyZFN0ZXBTdWNjZXNzOiJDb21wbGV0ZWQiLHdpemFyZFN0ZXBFcnJvcjoiRXJyb3IiLHdpemFy''@;'; put 'put ''ZFN0ZXBuYXZBcmlhTGFiZWw6IldpemFyZCBzdGVwcyIscGFzc3dvcmRIaWRlOiJIaWRlIHBhc3N3b3JkIGZvciB7TEFCRUx9IixwYXNzd29yZFNob3c6IlNob3cgcGFzc3dvcmQgZm9yIHtMQUJFTH0iLHNlbGVjdGVkUm93czoiU2VsZWN0ZWQgcm93cyIsc3RlcENvbXBsZXRlOiJTdGVwIHtT''@;'; put 'put ''VEVQfSBjb21wbGV0ZSIsc3RlcEVycm9yOiJFcnJvciBpbiBzdGVwIHtTVEVQfSIsYnJvd3NlOiJCcm93c2UiLGZpbGVDb3VudDoie0NPVU5UfSBmaWxlcyIsY2xlYXJGaWxlOiJDbGVhciB7RklMRX0iLGNsZWFyRmlsZXM6IkNsZWFyIHtDT1VOVH0gZmlsZXMiLHNlbGVjdGVkVHJlZU5vZGU6''@;'; put 'put ''InNlbGVjdGVkIix1bnNlbGVjdGVkVHJlZU5vZGU6InVuc2VsZWN0ZWQiLGJyZWFkY3J1bWJzTGFiZWw6ImJyZWFkY3J1bWJzIixleHBhbmRCcmVhZGNydW1ic0xhYmVsOiJFeHBhbmQgYnJlYWRjcnVtYnMifSk7bGV0IGlzPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9zdHJp''@;'; put 'put ''bmdzPWtZfWdldCBrZXlzKCl7cmV0dXJuIHRoaXMuX3N0cmluZ3N9bG9jYWxpemUoYSl7dGhpcy5fc3RyaW5ncz17Li4udGhpcy5fc3RyaW5ncywuLi5hfX1wYXJzZShhLGQ9e30pe2NvbnN0IGg9T2JqZWN0LmtleXMoZCk7bGV0IGY9YTtyZXR1cm4gaC5sZW5ndGgmJmguZm9yRWFjaCh2PT57''@;'; put 'put ''Zj1mLnJlcGxhY2UoYHske3Z9fWAsZFt2XSl9KSxmfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxjfSkoKTt2YXIgS2Y9ZnVuY3Rp''@;'; put 'put ''b24oYyl7cmV0dXJuIGMuSW5hY3RpdmU9ImluYWN0aXZlIixjLkVycm9yPSJlcnJvciIsYy5Db21wbGV0ZT0iY29tcGxldGUiLGN9KEtmfHx7fSksSXg9ZnVuY3Rpb24oYyl7cmV0dXJuIGMuRGVmYXVsdD0iZGVmYXVsdCIsYy5NdWx0aT0ibXVsdGkiLGN9KEl4fHx7fSk7bGV0IFV6ZT0wO2Ns''@;'; put 'put ''YXNzIFp6ZXtjb25zdHJ1Y3RvcihsLGEpe3RoaXMuaWQ9bCx0aGlzLmFjY29yZGlvbklkPWEsdGhpcy5zdGF0dXM9S2YuSW5hY3RpdmUsdGhpcy5pbmRleD1udWxsLHRoaXMuZGlzYWJsZWQ9ITEsdGhpcy5vcGVuPSExLHRoaXMudGVtcGxhdGVJZD1gJHt0aGlzLmlkfS0ke3RoaXMuYWNjb3Jk''@;'; put 'put ''aW9uSWR9YH19Y2xhc3MgeDFle2NvbnN0cnVjdG9yKCl7dGhpcy5zdHJhdGVneT1JeC5EZWZhdWx0LHRoaXMuYWNjb3JkaW9uQ291bnQ9VXplKyssdGhpcy5fcGFuZWxzPXt9fWdldCBwYW5lbHMoKXtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5fcGFuZWxzKS5tYXAobD0+dGhpcy5fcGFuZWxz''@;'; put 'put ''W2xdKX1zZXRTdHJhdGVneShsKXt0aGlzLnN0cmF0ZWd5PWx9dXBkYXRlUGFuZWxPcmRlcihsKXtsLmZvckVhY2goKGEsZCk9PnRoaXMuX3BhbmVsc1thXS5pbmRleD1kKSx0aGlzLnJlbW92ZU9sZFBhbmVscyhsKX1hZGRQYW5lbChsLGE9ITEpe3RoaXMuX3BhbmVsc1tsXT1uZXcgWnplKGws''@;'; put 'put ''dGhpcy5hY2NvcmRpb25Db3VudCksdGhpcy5fcGFuZWxzW2xdLm9wZW49YX10b2dnbGVQYW5lbChsLGEpe2NvbnN0IGg9dm9pZCAwIT09YT9hOiF0aGlzLl9wYW5lbHNbbF0ub3BlbjtoJiZ0aGlzLnN0cmF0ZWd5PT09SXguRGVmYXVsdCYmdGhpcy5jbG9zZUFsbFBhbmVscygpLHRoaXMuX3Bh''@;'; put 'put ''bmVsc1tsXS5vcGVuPWh9ZGlzYWJsZVBhbmVsKGwsYSl7dGhpcy5fcGFuZWxzW2xdLmRpc2FibGVkPWF9Y2xvc2VBbGxQYW5lbHMoKXt0aGlzLnBhbmVscy5mb3JFYWNoKGw9PnRoaXMuX3BhbmVsc1tsLmlkXS5vcGVuPSExKX1yZW1vdmVPbGRQYW5lbHMobCl7dGhpcy5wYW5lbHMuZmlsdGVy''@;'; put 'put ''KGE9PnZvaWQgMD09PWwuZmluZChkPT5kPT09YS5pZCkpLmZvckVhY2goYT0+ZGVsZXRlIHRoaXMuX3BhbmVsc1thLmlkXSl9fWxldCBSeD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5hY2NvcmRpb249bmV3IHgxZSx0aGlzLl9wYW5lbHNDaGFuZ2VzPW5ldyBlaSh0aGlzLmFj''@;'; put 'put ''Y29yZGlvbi5wYW5lbHMpfWdldFBhbmVsQ2hhbmdlcyhhKXtyZXR1cm4gdGhpcy5fcGFuZWxzQ2hhbmdlcy5waXBlKExyKGQ9PmQuZmluZChoPT5oLmlkPT09YSkpKX1zZXRTdHJhdGVneShhKXt0aGlzLmFjY29yZGlvbi5zZXRTdHJhdGVneShhKX1hZGRQYW5lbChhLGQ9ITEpe3RoaXMuYWNj''@;'; put 'put ''b3JkaW9uLmFkZFBhbmVsKGEsZCksdGhpcy5lbWl0VXBkYXRlZFBhbmVscygpfXRvZ2dsZVBhbmVsKGEsZCl7dGhpcy5hY2NvcmRpb24udG9nZ2xlUGFuZWwoYSxkKSx0aGlzLmVtaXRVcGRhdGVkUGFuZWxzKCl9ZGlzYWJsZVBhbmVsKGEsZCl7dGhpcy5hY2NvcmRpb24uZGlzYWJsZVBhbmVs''@;'; put 'put ''KGEsZCksdGhpcy5lbWl0VXBkYXRlZFBhbmVscygpfXVwZGF0ZVBhbmVsT3JkZXIoYSl7dGhpcy5hY2NvcmRpb24udXBkYXRlUGFuZWxPcmRlcihhKSx0aGlzLmVtaXRVcGRhdGVkUGFuZWxzKCl9ZW1pdFVwZGF0ZWRQYW5lbHMoKXt0aGlzLl9wYW5lbHNDaGFuZ2VzLm5leHQodGhpcy5hY2Nv''@;'; put 'put ''cmRpb24ucGFuZWxzKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksRkw9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYpe3RoaXMucGFy''@;'; put 'put ''ZW50PWEsdGhpcy5jb21tb25TdHJpbmdzPWQsdGhpcy5hY2NvcmRpb25TZXJ2aWNlPWgsdGhpcy5pZkV4cGFuZFNlcnZpY2U9Zix0aGlzLmNkcj12LHRoaXMuZGlzYWJsZWQ9ITEsdGhpcy5wYW5lbE9wZW49ITEsdGhpcy5oZWFkaW5nRW5hYmxlZD0hMSx0aGlzLnBhbmVsT3BlbkNoYW5nZT1u''@;'; put 'put ''ZXcgS3IsdGhpcy5faWQ9TXUoKX1nZXQgaWQoKXtyZXR1cm4gdGhpcy5faWR9c2V0IGlkKGEpe3RoaXMuX2lkPWF9Z2V0IHBhbmVsTnVtYmVyKCl7cmV0dXJuIHRoaXMuX3BhbmVsSW5kZXgrMX1nZXQgaGVhZGluZ0xldmVsKCl7cmV0dXJuIHRoaXMuZXhwbGljaXRIZWFkaW5nTGV2ZWw/dGhp''@;'; put 'put ''cy5leHBsaWNpdEhlYWRpbmdMZXZlbDp0aGlzLnBhcmVudD80OjN9bmdPbkluaXQoKXt0aGlzLnBhbmVsPXRoaXMuYWNjb3JkaW9uU2VydmljZS5nZXRQYW5lbENoYW5nZXModGhpcy5pZCkucGlwZShHdShhPT50aGlzLmVtaXRQYW5lbENoYW5nZShhKSkpLHRoaXMuYWNjb3JkaW9uU2Vydmlj''@;'; put 'put ''ZS5hZGRQYW5lbCh0aGlzLmlkLHRoaXMucGFuZWxPcGVuKSx0aGlzLmFjY29yZGlvblNlcnZpY2UudG9nZ2xlUGFuZWwodGhpcy5pZCx0aGlzLnBhbmVsT3BlbiksdGhpcy5hY2NvcmRpb25TZXJ2aWNlLmRpc2FibGVQYW5lbCh0aGlzLmlkLHRoaXMuZGlzYWJsZWQpfW5nT25DaGFuZ2VzKGEp''@;'; put 'put ''e3RoaXMucGFuZWwmJmEucGFuZWxPcGVuJiZhLnBhbmVsT3Blbi5jdXJyZW50VmFsdWUhPT1hLnBhbmVsT3Blbi5wcmV2aW91c1ZhbHVlJiZ0aGlzLmFjY29yZGlvblNlcnZpY2UudG9nZ2xlUGFuZWwodGhpcy5pZCxhLnBhbmVsT3Blbi5jdXJyZW50VmFsdWUpLHRoaXMucGFuZWwmJmEuZGlz''@;'; put 'put ''YWJsZWQmJmEuZGlzYWJsZWQuY3VycmVudFZhbHVlIT09YS5kaXNhYmxlZC5wcmV2aW91c1ZhbHVlJiZ0aGlzLmFjY29yZGlvblNlcnZpY2UuZGlzYWJsZVBhbmVsKHRoaXMuaWQsYS5kaXNhYmxlZC5jdXJyZW50VmFsdWUpfXRvZ2dsZVBhbmVsKCl7dGhpcy5hY2NvcmRpb25TZXJ2aWNlLnRv''@;'; put 'put ''Z2dsZVBhbmVsKHRoaXMuaWQpfWNvbGxhcHNlUGFuZWxPbkFuaW1hdGlvbkRvbmUoYSl7YS5vcGVufHwodGhpcy5pZkV4cGFuZFNlcnZpY2UuZXhwYW5kZWQ9ITEpfWdldFBhbmVsU3RhdGVDbGFzc2VzKGEpe3JldHVybmBjbHItYWNjb3JkaW9uLXBhbmVsLSR7YS5zdGF0dXN9ICR7YS5vcGVu''@;'; put 'put ''PyJjbHItYWNjb3JkaW9uLXBhbmVsLW9wZW4iOiIifWB9Z2V0QWNjb3JkaW9uQ29udGVudElkKGEpe3JldHVybmBjbHItYWNjb3JkaW9uLWNvbnRlbnQtJHthfSdgfWdldEFjY29yZGlvbkhlYWRlcklkKGEpe3JldHVybmBjbHItYWNjb3JkaW9uLWhlYWRlci0ke2F9YH1zdGVwQ29tcGxldGVU''@;'; put 'put ''ZXh0KGEpe3JldHVybiB0aGlzLmNvbW1vblN0cmluZ3MucGFyc2UodGhpcy5jb21tb25TdHJpbmdzLmtleXMuc3RlcENvbXBsZXRlLHtTVEVQOmEudG9TdHJpbmcoKX0pfXN0ZXBFcnJvclRleHQoYSl7cmV0dXJuIHRoaXMuY29tbW9uU3RyaW5ncy5wYXJzZSh0aGlzLmNvbW1vblN0cmluZ3Mu''@;'; put 'put ''a2V5cy5zdGVwRXJyb3Ise1NURVA6YS50b1N0cmluZygpfSl9ZW1pdFBhbmVsQ2hhbmdlKGEpe2EuaW5kZXghPT10aGlzLl9wYW5lbEluZGV4JiYodGhpcy5fcGFuZWxJbmRleD1hLmluZGV4LHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKSksYS5vcGVuIT09dGhpcy5wYW5lbE9wZW4mJih0aGlz''@;'; put 'put ''LnBhbmVsT3BlbkNoYW5nZS5lbWl0KGEub3BlbiksdGhpcy5wYW5lbE9wZW49YS5vcGVuKSxhLm9wZW4mJih0aGlzLmlmRXhwYW5kU2VydmljZS5leHBhbmRlZD0hMCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKGMsMTIpLEdlKGlzKSxHZShS''@;'; put 'put ''eCksR2UoVTEpLEdlKEVzKSl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1hY2NvcmRpb24tcGFuZWwiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmYW8oaCxNMWUsNCksMiZhKXtsZXQgZjtDaShmPVNpKCkpJiYoZC5hY2NvcmRpb25E''@;'; put 'put ''ZXNjcmlwdGlvbj1mKX19LGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZUcigiY2xyLWFjY29yZGlvbi1wYW5lbCIsITApKCJjbHItYWNjb3JkaW9uLXBhbmVsLWRpc2FibGVkIixkLmRpc2FibGVkKX0saW5wdXRzOntkaXNhYmxlZDpbTm4uTm9uZSwiY2xyQWNj''@;'; put 'put ''b3JkaW9uUGFuZWxEaXNhYmxlZCIsImRpc2FibGVkIl0scGFuZWxPcGVuOltObi5Ob25lLCJjbHJBY2NvcmRpb25QYW5lbE9wZW4iLCJwYW5lbE9wZW4iXSxoZWFkaW5nRW5hYmxlZDpbTm4uTm9uZSwiY2xyQWNjb3JkaW9uUGFuZWxIZWFkaW5nRW5hYmxlZCIsImhlYWRpbmdFbmFibGVkIl0s''@;'; put 'put ''ZXhwbGljaXRIZWFkaW5nTGV2ZWw6W05uLk5vbmUsImNsckFjY29yZGlvblBhbmVsSGVhZGluZ0xldmVsIiwiZXhwbGljaXRIZWFkaW5nTGV2ZWwiXX0sb3V0cHV0czp7cGFuZWxPcGVuQ2hhbmdlOiJjbHJBY2NvcmRpb25QYW5lbE9wZW5DaGFuZ2UifSxmZWF0dXJlczpbZGEoW1UxXSksd2xd''@;'; put 'put ''LG5nQ29udGVudFNlbGVjdG9yczpKRmUsZGVjbHM6Mix2YXJzOjMsY29uc3RzOltbImhlYWRlckJ1dHRvbiIsIiJdLFs0LCJuZ0lmIl0sWzMsIm5nQ2xhc3MiXSxbMSwiY2xyLWFjY29yZGlvbi1oZWFkZXIiXSxbInR5cGUiLCJidXR0b24iLDEsImNsci1hY2NvcmRpb24taGVhZGVyLWJ1dHRv''@;'; put 'put ''biIsMywiY2xpY2siLCJpZCIsImRpc2FibGVkIl0sWzEsImNsci1hY2NvcmRpb24tc3RhdHVzIl0sWyJzaGFwZSIsImFuZ2xlIiwiZGlyZWN0aW9uIiwicmlnaHQiLDEsImNsci1hY2NvcmRpb24tYW5nbGUiXSxbInJvbGUiLCJyZWdpb24iLDEsImNsci1hY2NvcmRpb24tY29udGVudC1yZWdp''@;'; put 'put ''b24iLDMsImlkIl0sWyJjbGFzcyIsImNsci1hY2NvcmRpb24tY29udGVudCIsNCwibmdJZiJdLFsxLCJjbHItYWNjb3JkaW9uLWNvbnRlbnQiXSxbMSwiY2xyLWFjY29yZGlvbi1pbm5lci1jb250ZW50Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoWEZlKSxndCgwLGVIZSwx''@;'; put 'put ''MiwxNiwibmctY29udGFpbmVyIiwxKSxlbCgxLCJhc3luYyIpKSwyJmEmJk1lKCJuZ0lmIixEYygxLDEsZC5wYW5lbCkpfSxkZXBlbmRlbmNpZXM6W3d1LGJhLHJzLEVNXSxlbmNhcHN1bGF0aW9uOjIsZGF0YTp7YW5pbWF0aW9uOmp6ZX0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxjfSkoKSxFMWU9''@;'; put 'put ''KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmFjY29yZGlvblNlcnZpY2U9YSx0aGlzLm11bHRpUGFuZWw9ITEsdGhpcy5zdWJzY3JpcHRpb25zPVtdfW5nT25Jbml0KCl7dGhpcy5zZXRBY2NvcmRpb25TdHJhdGVneSgpfW5nT25DaGFuZ2VzKGEpe2EubXVsdGlQYW5lbC5jdXJy''@;'; put 'put ''ZW50VmFsdWUhPT1hLm11bHRpUGFuZWwucHJldmlvdXNWYWx1ZSYmdGhpcy5zZXRBY2NvcmRpb25TdHJhdGVneSgpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubGlzdGVuRm9yRE9NQ2hhbmdlcygpKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0''@;'; put 'put ''aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9c2V0QWNjb3JkaW9uU3RyYXRlZ3koKXt0aGlzLmFjY29yZGlvblNlcnZpY2Uuc2V0U3RyYXRlZ3kodGhpcy5tdWx0aVBhbmVsP0l4Lk11bHRpOkl4LkRlZmF1bHQpfWxpc3RlbkZvckRPTUNoYW5nZXMoKXtyZXR1cm4gdGhpcy5wYW5l''@;'; put 'put ''bHMuY2hhbmdlcy5waXBlKHgyKHRoaXMucGFuZWxzKSkuc3Vic2NyaWJlKGE9PnRoaXMuYWNjb3JkaW9uU2VydmljZS51cGRhdGVQYW5lbE9yZGVyKGEudG9BcnJheSgpLm1hcChkPT5kLmlkKSkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShS''@;'; put 'put ''eCkpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItYWNjb3JkaW9uIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJmFvKGgsRkwsNCksMiZhKXtsZXQgZjtDaShmPVNpKCkpJiYoZC5wYW5lbHM9Zil9fSxob3N0VmFyczoyLGhvc3RCaW5k''@;'; put 'put ''aW5nczpmdW5jdGlvbihhLGQpezImYSYmVHIoImNsci1hY2NvcmRpb24iLCEwKX0saW5wdXRzOnttdWx0aVBhbmVsOltObi5Ob25lLCJjbHJBY2NvcmRpb25NdWx0aVBhbmVsIiwibXVsdGlQYW5lbCJdfSxmZWF0dXJlczpbZGEoW1J4XSksd2xdLG5nQ29udGVudFNlbGVjdG9yczp5byxkZWNs''@;'; put 'put ''czoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKCksWXIoMCkpfSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxjfSkoKSxUMWU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMu''@;'; put 'put ''XHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1hY2NvcmRpb24tY29udGVudCJdLFsiY2xyLXN0ZXAtY29udGVudCJdXSxuZ0NvbnRlbnRTZWxlY3RvcnM6eW8sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYSgpLFlyKDApKX0sZW5jYXBz''@;'; put 'put ''dWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksY30pKCksQTFlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItYWNjb3JkaW9uLXRpdGxlIl0sWyJj''@;'; put 'put ''bHItc3RlcC10aXRsZSJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmVHIoImNsci1hY2NvcmRpb24tdGl0bGUiLCEwKX0sbmdDb250ZW50U2VsZWN0b3JzOnlvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoKSxZcigw''@;'; put 'put ''KSl9LGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLGN9KSgpLFJ5PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLmRpc2FibGVDaG9jb2xhdGVDaGVjaz0hMSx0aGlzLl9jaG9jb2xhdGU9bmV3IFdufWdldCBjaG9jb2xhdGUoKXtyZXR1cm4gdGhpcy5fY2hvY29s''@;'; put 'put ''YXRlLmFzT2JzZXJ2YWJsZSgpfW5nQWZ0ZXJWaWV3Q2hlY2tlZCgpe3RoaXMuZGlzYWJsZUNob2NvbGF0ZUNoZWNrfHx0aGlzLl9jaG9jb2xhdGUubmV4dCgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6Y30p''@;'; put 'put ''LGN9KSgpLEx5PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLnN1YnNjcmlwdGlvbj1kLmNob2NvbGF0ZS5zdWJzY3JpYmUoKCk9Pnt0aGlzLmxhdGVzdEZsYXZvciE9PXRoaXMuZmxhdm9yJiYoZC5kaXNhYmxlQ2hvY29sYXRlQ2hlY2s9ITAsYS5kZXRlY3RDaGFuZ2VzKCks''@;'; put 'put ''ZC5kaXNhYmxlQ2hvY29sYXRlQ2hlY2s9ITEpfSl9bmdBZnRlckNvbnRlbnRDaGVja2VkKCl7dGhpcy5sYXRlc3RGbGF2b3I9dGhpcy5mbGF2b3J9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0''@;'; put 'put ''dXJuIG5ldyhhfHxjKShHZShFcyksR2UoUnkpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6Y30pLGN9KSgpLERZPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBSeXt9cmV0dXJuIGMuXHUwMjc1ZmFjPSgoKT0+e2xldCBsO3JldHVybiBmdW5jdGlvbihkKXtyZXR1cm4obHx8KGw9V3MoYykpKShkfHxj''@;'; put 'put ''KX19KSgpLGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1hY2NvcmRpb24iXV0sZmVhdHVyZXM6W3dhXX0pLGN9KSgpLGsxZT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgTHl7Y29uc3RydWN0b3IoYSxkLGgpe2lmKCFkKXRocm93IG5ldyBFcnJvcigiY2xyLWFjY29yZGlv''@;'; put 'put ''bi1wYW5lbCBzaG91bGQgb25seSBiZSB1c2VkIGluc2lkZSBvZiBjbHItYWNjb3JkaW9uIik7c3VwZXIoYSxkKSx0aGlzLmV4cGFuZD1ofWdldCBmbGF2b3IoKXtyZXR1cm4gdGhpcy5leHBhbmQuZXhwYW5kZWR9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8''@;'; put 'put ''fGMpKEdlKEVzKSxHZShEWSw4KSxHZShVMSkpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItYWNjb3JkaW9uLXBhbmVsIl1dLGZlYXR1cmVzOlt3YV19KSxjfSkoKSxEMWU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe1RzLmFkZEljb25zKEV5LHZoLGJoKX19''@;'; put 'put ''cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbUmEsQXNdfSksY30pKCksS3plPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXty''@;'; put 'put ''ZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1JhLEFzLEQxZSxEMWVdfSksY30pKCk7dmFyIGdhPWZ1bmN0aW9uKGMpe3JldHVybiBjLkFycm93TGVmdD0iQXJyb3dMZWZ0IixjLkFycm93VXA9IkFycm93VXAiLGMuQXJy''@;'; put 'put ''b3dSaWdodD0iQXJyb3dSaWdodCIsYy5BcnJvd0Rvd249IkFycm93RG93biIsYy5CYWNrc3BhY2U9IkJhY2tzcGFjZSIsYy5UYWI9IlRhYiIsYy5FbnRlcj0iRW50ZXIiLGMuRXNjYXBlPSJFc2NhcGUiLGMuU3BhY2U9IlNwYWNlIixjLlNwYWNlYmFyPSIgIixjLkhvbWU9IkhvbWUiLGMuRW5k''@;'; put 'put ''PSJFbmQiLGMuUGFnZURvd249IlBhZ2VEb3duIixjLlBhZ2VVcD0iUGFnZVVwIixjfShnYXx8e30pLGg3PWZ1bmN0aW9uKGMpe3JldHVybiBjLkFycm93VXA9IlVwIixjLkFycm93RG93bj0iRG93biIsYy5BcnJvd1JpZ2h0PSJSaWdodCIsYy5BcnJvd0xlZnQ9IkxlZnQiLGMuU3BhY2U9IlNw''@;'; put 'put ''YWNlYmFyIixjLkVzY2FwZT0iRXNjIixjfShoN3x8e30pO2Z1bmN0aW9uIEkyKGMpe3JldHVybiBjPT09Z2EuQXJyb3dVcHx8Yz09PWg3LkFycm93VXA/Z2EuQXJyb3dVcDpjPT09Z2EuQXJyb3dEb3dufHxjPT09aDcuQXJyb3dEb3duP2dhLkFycm93RG93bjpjPT09Z2EuQXJyb3dSaWdodHx8''@;'; put 'put ''Yz09PWg3LkFycm93UmlnaHQ/Z2EuQXJyb3dSaWdodDpjPT09Z2EuQXJyb3dMZWZ0fHxjPT09aDcuQXJyb3dMZWZ0P2dhLkFycm93TGVmdDpjPT09Z2EuU3BhY2V8fGM9PT1oNy5TcGFjZT9nYS5TcGFjZTpjPT09Z2EuRXNjYXBlfHxjPT09aDcuRXNjYXBlP2dhLkVzY2FwZTpjfWZ1bmN0aW9u''@;'; put 'put ''IFJZKGMpe2NvbnN0IGw9STIoYy5rZXkpOyhsPT09Z2EuQXJyb3dVcHx8bD09PWdhLkFycm93RG93bnx8bD09PWdhLkFycm93TGVmdHx8bD09PWdhLkFycm93UmlnaHQpJiZjLnByZXZlbnREZWZhdWx0KCl9bGV0IHNjPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9vcGVuPSEx''@;'; put 'put ''LHRoaXMuX29wZW5DaGFuZ2U9bmV3IFduLHRoaXMuX29wZW5FdmVudENoYW5nZT1uZXcgV24sdGhpcy5fcG9wb3ZlckFsaWduZWQ9bmV3IFduLHRoaXMuX3BvcG92ZXJWaXNpYmxlPW5ldyBXbn1nZXQgb3BlbkNoYW5nZSgpe3JldHVybiB0aGlzLl9vcGVuQ2hhbmdlLmFzT2JzZXJ2YWJsZSgp''@;'; put 'put ''fWdldCBwb3BvdmVyVmlzaWJsZSgpe3JldHVybiB0aGlzLl9wb3BvdmVyVmlzaWJsZS5hc09ic2VydmFibGUoKX1nZXQgb3BlbkV2ZW50KCl7cmV0dXJuIHRoaXMuX29wZW5FdmVudH1zZXQgb3BlbkV2ZW50KGEpe3RoaXMuX29wZW5FdmVudD1hLHRoaXMuX29wZW5FdmVudENoYW5nZS5uZXh0''@;'; put 'put ''KGEpfWdldCBvcGVuKCl7cmV0dXJuIHRoaXMuX29wZW59c2V0IG9wZW4oYSl7dGhpcy5fb3BlbiE9PShhPSEhYSkmJih0aGlzLl9vcGVuPWEsdGhpcy5fb3BlbkNoYW5nZS5uZXh0KGEpKX1nZXQgb3JpZ2luYWxFdmVudCgpe3JldHVybiB0aGlzLl9vcGVuRXZlbnR9Z2V0IHBvcG92ZXJBbGln''@;'; put 'put ''bmVkKCl7cmV0dXJuIHRoaXMuX3BvcG92ZXJBbGlnbmVkLmFzT2JzZXJ2YWJsZSgpfWdldEV2ZW50Q2hhbmdlKCl7cmV0dXJuIHRoaXMuX29wZW5FdmVudENoYW5nZS5hc09ic2VydmFibGUoKX10b2dnbGVXaXRoRXZlbnQoYSl7UlkoYSksdGhpcy5vcGVuRXZlbnQ9YSx0aGlzLm9wZW49IXRo''@;'; put 'put ''aXMub3Blbn1wb3BvdmVyVmlzaWJsZUVtaXQoYSl7dGhpcy5fcG9wb3ZlclZpc2libGUubmV4dChhKX1wb3BvdmVyQWxpZ25lZEVtaXQoYSl7dGhpcy5fcG9wb3ZlckFsaWduZWQubmV4dChhKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUw''@;'; put 'put ''Mjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksT3g9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5yZW5kZXJlcj1hLHRoaXMuc21hcnRPcGVuU2VydmljZT1kLHRoaXMuZG9jdW1lbnQ9aCx0aGlzLm91dHNpZGVDbGlja0Nsb3NlPSEw''@;'; put 'put ''LHRoaXMuc2Nyb2xsVG9DbG9zZT0hMCx0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goZC5vcGVuQ2hhbmdlLnN1YnNjcmliZShmPT57Zj8odGhpcy5hZGRFc2NhcGVMaXN0ZW5lcigpLHRoaXMuYWRkQ2xpY2tMaXN0ZW5lcigpLHRoaXMuYWRkU2Nyb2xsTGlz''@;'; put 'put ''dGVuZXIoKSk6dGhpcy5yZW1vdmVBbGxFdmVudExpc3RlbmVycygpfSksZC5nZXRFdmVudENoYW5nZSgpLnN1YnNjcmliZShmPT57dGhpcy5pZ25vcmVkRXZlbnQ9Zn0pKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSksdGhpcy5y''@;'; put 'put ''ZW1vdmVBbGxFdmVudExpc3RlbmVycygpfWFkZFNjcm9sbExpc3RlbmVyKCl7dGhpcy5zY3JvbGxUb0Nsb3NlJiYodGhpcy5kb2N1bWVudFNjcm9sbGVyPXhkKHRoaXMuZG9jdW1lbnQsInNjcm9sbCIse2NhcHR1cmU6ITB9KSx0aGlzLnNjcm9sbFN1YnNjcmlwdGlvbj10aGlzLmRvY3VtZW50''@;'; put 'put ''U2Nyb2xsZXIucGlwZSgkbCh0aGlzLnRlc3RGb3JTbWFydFBvcG92ZXJDb250ZW50Q29udGFpbmVyKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5zbWFydE9wZW5TZXJ2aWNlLm9wZW49ITEsdGhpcy5zZXRBbmNob3JGb2N1cygpfSkpfXJlbW92ZVNjcm9sbExpc3RlbmVyKCl7dGhpcy5kb2N1bWVu''@;'; put 'put ''dFNjcm9sbGVyJiYodGhpcy5zY3JvbGxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSxkZWxldGUgdGhpcy5kb2N1bWVudFNjcm9sbGVyKX1hZGRDbGlja0xpc3RlbmVyKCl7dGhpcy5vdXRzaWRlQ2xpY2tDbG9zZSYmKHRoaXMuZG9jdW1lbnRDbGlja0xpc3RlbmVyPXRoaXMucmVuZGVyZXIu''@;'; put 'put ''bGlzdGVuKHRoaXMuZG9jdW1lbnQsImNsaWNrIixhPT57YT09PXRoaXMuaWdub3JlZEV2ZW50P2RlbGV0ZSB0aGlzLmlnbm9yZWRFdmVudDoodGhpcy5zbWFydE9wZW5TZXJ2aWNlLm9wZW49ITEsYS50YXJnZXQuZm9jdXMoKSl9KSl9cmVtb3ZlQ2xpY2tMaXN0ZW5lcigpe3RoaXMub3V0c2lk''@;'; put 'put ''ZUNsaWNrQ2xvc2UmJihkZWxldGUgdGhpcy5pZ25vcmVkRXZlbnQsdGhpcy5kb2N1bWVudENsaWNrTGlzdGVuZXImJih0aGlzLmRvY3VtZW50Q2xpY2tMaXN0ZW5lcigpLGRlbGV0ZSB0aGlzLmRvY3VtZW50Q2xpY2tMaXN0ZW5lcikpfWFkZEVzY2FwZUxpc3RlbmVyKCl7dGhpcy5lc2NhcGVM''@;'; put 'put ''aXN0ZW5lcj10aGlzLnJlbmRlcmVyLmxpc3Rlbih0aGlzLmRvY3VtZW50LCJrZXlkb3duLmVzY2FwZSIsKCk9Pnt0aGlzLnNtYXJ0T3BlblNlcnZpY2Uub3Blbj0hMSx0aGlzLnNldEFuY2hvckZvY3VzKCl9KX1yZW1vdmVFc2NhcGVMaXN0ZW5lcigpe3RoaXMuZXNjYXBlTGlzdGVuZXImJih0''@;'; put 'put ''aGlzLmVzY2FwZUxpc3RlbmVyKCksZGVsZXRlIHRoaXMuZXNjYXBlTGlzdGVuZXIpfXNldENsb3NlRm9jdXMoKXt0aGlzLmNsb3NlQnV0dG9uUmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKX1zZXRBbmNob3JGb2N1cygpe3RoaXMuYW5jaG9yQnV0dG9uUmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMo''@;'; put 'put ''KX10ZXN0Rm9yU21hcnRQb3BvdmVyQ29udGVudENvbnRhaW5lcihhKXtsZXQgZD1hLnRhcmdldDtmb3IoO2QuY2xhc3NMaXN0JiYiYm9keSIhPT1kLnBhcmVudEVsZW1lbnQubG9jYWxOYW1lOylkPWQucGFyZW50RWxlbWVudDtyZXR1cm4hIWQuY2xhc3NMaXN0JiYhZC5jbGFzc0xpc3QuY29u''@;'; put 'put ''dGFpbnMoImNsci1wb3BvdmVyLWNvbnRlbnQiKX1yZW1vdmVBbGxFdmVudExpc3RlbmVycygpe3RoaXMucmVtb3ZlU2Nyb2xsTGlzdGVuZXIoKSx0aGlzLnJlbW92ZUNsaWNrTGlzdGVuZXIoKSx0aGlzLnJlbW92ZUVzY2FwZUxpc3RlbmVyKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlv''@;'; put 'put ''bihhKXtyZXR1cm4gbmV3KGF8fGMpKHhyKEVvKSx4cihzYykseHIodnMpKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxQeD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7YS5hbmNob3JCdXR0b25SZWY9ZH19cmV0dXJuIGMuXHUw''@;'; put 'put ''Mjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoT3gpLEdlKEppKSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsclBvcG92ZXJBbmNob3IiLCIiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJlRyKCJjbHIt''@;'; put 'put ''YW5jaG9yIiwhMCl9fSksY30pKCksTDFlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuZWxlbWVudFJlZj1hLHRoaXMuc21hcnRFdmVudHNTZXJ2aWNlPWQsdGhpcy5zbWFydE9wZW5TZXJ2aWNlPWgsdGhpcy5jbG9zZUNoYW5nZT1uZXcgS3IsdGhpcy5zdWJzY3JpcHRp''@;'; put 'put ''b25zPVtdLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGgub3BlbkNoYW5nZS5waXBlKCRsKGY9PiFmKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5jbG9zZUNoYW5nZS5uZXh0KCl9KSl9aGFuZGxlQ2xpY2soYSl7dGhpcy5zbWFydE9wZW5TZXJ2aWNlLnRvZ2dsZVdpdGhFdmVudChhKSx0aGlzLnNt''@;'; put 'put ''YXJ0RXZlbnRzU2VydmljZS5zZXRBbmNob3JGb2N1cygpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuc21hcnRFdmVudHNTZXJ2aWNlLmNsb3NlQnV0dG9uUmVmPXRoaXMuZWxlbWVudFJlZix0aGlzLnNtYXJ0RXZlbnRzU2VydmljZS5zZXRDbG9zZUZvY3VzKCl9bmdPbkRlc3Ryb3koKXt0aGlz''@;'; put 'put ''LnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShKaSksR2UoT3gpLEdlKHNjKSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsclBvcG92ZXJD''@;'; put 'put ''bG9zZUJ1dHRvbiIsIiJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmRnQoImNsaWNrIixmdW5jdGlvbihmKXtyZXR1cm4gZC5oYW5kbGVDbGljayhmKX0pLDImYSYmVHIoImNsci1zbWFydC1jbG9zZS1idXR0b24iLCEwKX0sb3V0cHV0czp7Y2xvc2VDaGFu''@;'; put 'put ''Z2U6ImNsclBvcG92ZXJPbkNsb3NlQ2hhbmdlIn19KSxjfSkoKTt2YXIgaDE9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5WRVJUSUNBTD0wXT0iVkVSVElDQUwiLGNbYy5IT1JJWk9OVEFMPTFdPSJIT1JJWk9OVEFMIixjfShoMXx8e30pLE9zPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuU1RBUlQ9''@;'; put 'put ''MF09IlNUQVJUIixjW2MuQ0VOVEVSPS41XT0iQ0VOVEVSIixjW2MuRU5EPTFdPSJFTkQiLGN9KE9zfHx7fSksRng9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5CT1RUT009MF09IkJPVFRPTSIsY1tjLkxFRlQ9MV09IkxFRlQiLGNbYy5SSUdIVD0yXT0iUklHSFQiLGNbYy5UT1A9M109IlRPUCIs''@;'; put 'put ''Y30oRnh8fHt9KTtjb25zdCBtbT1jPT4oey4uLmMsc2lkZTotMSpjLnNpZGV9KSxhZz0oYyxsKT0+e2NvbnN0IGE9Yy5jb250ZW50KyhsPy41Oi0uNSk7cmV0dXJuIGE8MHx8YT4xP2M6ey4uLmMsY29udGVudDphfX07ZnVuY3Rpb24gT3koYyxsLGEpe3JldHVybiBkPT5sKGMoZCksYSl9ZnVu''@;'; put 'put ''Y3Rpb24gX2goYyxsLGEpe2xldCBkPWwubGVmdCxoPWwudG9wO3N3aXRjaChjLmF4aXMrYy5zaWRlKXtjYXNlLTE6ZCs9TzFlKGMsbCxhKSxoLT1hLmhlaWdodDticmVhaztjYXNlIDE6ZCs9TzFlKGMsbCxhKSxoKz1sLmhlaWdodDticmVhaztjYXNlIDA6ZC09YS53aWR0aCxoKz1QMWUoYyxs''@;'; put 'put ''LGEpO2JyZWFrO2Nhc2UgMjpkKz1sLndpZHRoLGgrPVAxZShjLGwsYSl9cmV0dXJue3hPZmZzZXQ6ZCx5T2Zmc2V0Omh9fWZ1bmN0aW9uIE8xZShjLGwsYSl7bGV0IGQ9MDtzd2l0Y2goYy5hbmNob3Ipe2Nhc2UgT3MuU1RBUlQ6YnJlYWs7Y2FzZSBPcy5DRU5URVI6ZCs9bC53aWR0aC8yO2Jy''@;'; put 'put ''ZWFrO2Nhc2UgT3MuRU5EOmQrPWwud2lkdGh9c3dpdGNoKGMuY29udGVudCl7Y2FzZSBPcy5TVEFSVDpicmVhaztjYXNlIE9zLkNFTlRFUjpkLT1hLndpZHRoLzI7YnJlYWs7Y2FzZSBPcy5FTkQ6ZC09YS53aWR0aH1yZXR1cm4gZH1mdW5jdGlvbiBQMWUoYyxsLGEpe2xldCBkPTA7c3dpdGNo''@;'; put 'put ''KGMuYW5jaG9yKXtjYXNlIE9zLlNUQVJUOmJyZWFrO2Nhc2UgT3MuQ0VOVEVSOmQrPWwuaGVpZ2h0LzI7YnJlYWs7Y2FzZSBPcy5FTkQ6ZCs9bC5oZWlnaHR9c3dpdGNoKGMuY29udGVudCl7Y2FzZSBPcy5TVEFSVDpicmVhaztjYXNlIE9zLkNFTlRFUjpkLT1hLmhlaWdodC8yO2JyZWFrO2Nh''@;'; put 'put ''c2UgT3MuRU5EOmQtPWEuaGVpZ2h0fXJldHVybiBkfWxldCBGMWU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMuZXZlbnRTZXJ2aWNlPWEsdGhpcy5wbGF0Zm9ybUlkPWQsdGhpcy5fc2hvdWxkUmVhbGlnbj1uZXcgV24sdGhpcy5zaG91bGRSZWFsaWduPXRoaXMuX3Nob3Vs''@;'; put 'put ''ZFJlYWxpZ24uYXNPYnNlcnZhYmxlKCl9cmVhbGlnbigpe3RoaXMuX3Nob3VsZFJlYWxpZ24ubmV4dCgpfWFsaWduQ29udGVudChhKXtpZighdGwodGhpcy5wbGF0Zm9ybUlkKSlyZXR1cm57eE9mZnNldDowLHlPZmZzZXQ6MH07dGhpcy5jdXJyZW50QW5jaG9yQ29vcmRzPXRoaXMuZXZlbnRT''@;'; put 'put ''ZXJ2aWNlLmFuY2hvckJ1dHRvblJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHRoaXMuY3VycmVudENvbnRlbnRDb29yZHM9YS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx0aGlzLmNvbnRlbnRPZmZzZXRzPV9oKHRoaXMucG9zaXRpb24sdGhpcy5jdXJyZW50QW5j''@;'; put 'put ''aG9yQ29vcmRzLHRoaXMuY3VycmVudENvbnRlbnRDb29yZHMpO2NvbnN0IGQ9ZnVuY3Rpb24gWHplKGMsbCl7Y29uc3QgYT1bXSxkX2JvdHRvbT1jLnlPZmZzZXQrbC5oZWlnaHQsZF9sZWZ0PWMueE9mZnNldCxkX3JpZ2h0PWMueE9mZnNldCtsLndpZHRoO3JldHVybiBjLnlPZmZzZXQ+PTB8''@;'; put 'put ''fGEucHVzaChGeC5UT1ApLGRfbGVmdD49MHx8YS5wdXNoKEZ4LkxFRlQpLGRfYm90dG9tPD0od2luZG93LmlubmVySGVpZ2h0fHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0KXx8YS5wdXNoKEZ4LkJPVFRPTSksZF9yaWdodDw9KHdpbmRvdy5pbm5lcldpZHRofHxkb2N1''@;'; put 'put ''bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgpfHxhLnB1c2goRnguUklHSFQpLGF9KHRoaXMuY29udGVudE9mZnNldHMsdGhpcy5jdXJyZW50Q29udGVudENvb3JkcyksaD1kLnJlZHVjZSgoZix2KT0+Zit2LDApO3JldHVybiAxPT09ZC5sZW5ndGgmJnRoaXMucG9zaXRpb24uYXhp''@;'; put 'put ''cz09PWgxLlZFUlRJQ0FMP3RoaXMuaGFuZGxlVmVydGljYWxBeGlzT25lVmlvbGF0aW9uKGgpOjE9PT1kLmxlbmd0aCYmdGhpcy5wb3NpdGlvbi5heGlzPT09aDEuSE9SSVpPTlRBTD90aGlzLmhhbmRsZUhvcml6b250YWxBeGlzT25lVmlvbGF0aW9uKGgpOjI9PT1kLmxlbmd0aCYmdGhpcy5w''@;'; put 'put ''b3NpdGlvbi5heGlzPT09aDEuVkVSVElDQUw/dGhpcy5oYW5kbGVWZXJ0aWNhbEF4aXNUd29WaW9sYXRpb25zKGgpOjI9PT1kLmxlbmd0aCYmdGhpcy5wb3NpdGlvbi5heGlzPT09aDEuSE9SSVpPTlRBTCYmdGhpcy5oYW5kbGVIb3Jpem9udGFsQXhpc1R3b1Zpb2xhdGlvbnMoaCksdGhpcy5j''@;'; put 'put ''dXJyZW50Q29udGVudENvb3Jkcy50b3A8MCYmKHRoaXMuY29udGVudE9mZnNldHMueU9mZnNldCs9TWF0aC5hYnModGhpcy5jdXJyZW50Q29udGVudENvb3Jkcy50b3ApKSx0aGlzLmNvbnRlbnRPZmZzZXRzLnlPZmZzZXQrdGhpcy5jdXJyZW50QW5jaG9yQ29vcmRzLnk8MCYmKHRoaXMuY29u''@;'; put 'put ''dGVudE9mZnNldHMueU9mZnNldD0wLXRoaXMuY3VycmVudENvbnRlbnRDb29yZHMudG9wKSx0aGlzLmNvbnRlbnRPZmZzZXRzfWhhbmRsZVZlcnRpY2FsQXhpc09uZVZpb2xhdGlvbihhKXtzd2l0Y2goYSl7Y2FzZSAwOmNhc2UgMzp0aGlzLmNvbnRlbnRPZmZzZXRzPV9oKG1tKHRoaXMucG9z''@;'; put 'put ''aXRpb24pLHRoaXMuY3VycmVudEFuY2hvckNvb3Jkcyx0aGlzLmN1cnJlbnRDb250ZW50Q29vcmRzKTticmVhaztjYXNlIDE6dGhpcy5jb250ZW50T2Zmc2V0cz1faCh0aGlzLnBvc2l0aW9uLHRoaXMuY3VycmVudEFuY2hvckNvb3Jkcyx0aGlzLmN1cnJlbnRDb250ZW50Q29vcmRzKSx0aGlz''@;'; put 'put ''LmNvbnRlbnRPZmZzZXRzLnhPZmZzZXQ8MCYmKHRoaXMuY29udGVudE9mZnNldHMueE9mZnNldD0xMCk7YnJlYWs7Y2FzZSAyOnRoaXMuY29udGVudE9mZnNldHM9X2goYWcodGhpcy5wb3NpdGlvbiwhMCksdGhpcy5jdXJyZW50QW5jaG9yQ29vcmRzLHRoaXMuY3VycmVudENvbnRlbnRDb29y''@;'; put 'put ''ZHMpfX1oYW5kbGVWZXJ0aWNhbEF4aXNUd29WaW9sYXRpb25zKGEpe3N3aXRjaChhKXtjYXNlIDU6e2NvbnN0IGQ9T3kobW0sYWcsITApO3RoaXMuY29udGVudE9mZnNldHM9X2goZCh0aGlzLnBvc2l0aW9uKSx0aGlzLmN1cnJlbnRBbmNob3JDb29yZHMsdGhpcy5jdXJyZW50Q29udGVudENv''@;'; put 'put ''b3Jkcyk7YnJlYWt9Y2FzZSA0Ontjb25zdCBkPU95KG1tLGFnLCExKTt0aGlzLmNvbnRlbnRPZmZzZXRzPV9oKGQodGhpcy5wb3NpdGlvbiksdGhpcy5jdXJyZW50QW5jaG9yQ29vcmRzLHRoaXMuY3VycmVudENvbnRlbnRDb29yZHMpO2JyZWFrfWNhc2UgMzpkZWZhdWx0OmJyZWFrO2Nhc2Ug''@;'; put 'put ''Mjp7Y29uc3QgZD1PeShtbSxhZywhMCk7dGhpcy5jb250ZW50T2Zmc2V0cz1faChkKHRoaXMucG9zaXRpb24pLHRoaXMuY3VycmVudEFuY2hvckNvb3Jkcyx0aGlzLmN1cnJlbnRDb250ZW50Q29vcmRzKTticmVha31jYXNlIDE6e2NvbnN0IGQ9T3kobW0sYWcsITEpO3RoaXMuY29udGVudE9m''@;'; put 'put ''ZnNldHM9X2goZCh0aGlzLnBvc2l0aW9uKSx0aGlzLmN1cnJlbnRBbmNob3JDb29yZHMsdGhpcy5jdXJyZW50Q29udGVudENvb3Jkcyk7YnJlYWt9fX1oYW5kbGVIb3Jpem9udGFsQXhpc09uZVZpb2xhdGlvbihhKXtzd2l0Y2goYSl7Y2FzZSAxOmNhc2UgMjp0aGlzLmNvbnRlbnRPZmZzZXRz''@;'; put 'put ''PV9oKG1tKHRoaXMucG9zaXRpb24pLHRoaXMuY3VycmVudEFuY2hvckNvb3Jkcyx0aGlzLmN1cnJlbnRDb250ZW50Q29vcmRzKTticmVhaztjYXNlIDA6dGhpcy5jb250ZW50T2Zmc2V0cz1faChhZyh0aGlzLnBvc2l0aW9uLCEwKSx0aGlzLmN1cnJlbnRBbmNob3JDb29yZHMsdGhpcy5jdXJy''@;'; put 'put ''ZW50Q29udGVudENvb3Jkcyk7YnJlYWs7Y2FzZSAzOnRoaXMuY29udGVudE9mZnNldHM9X2goYWcodGhpcy5wb3NpdGlvbiksdGhpcy5jdXJyZW50QW5jaG9yQ29vcmRzLHRoaXMuY3VycmVudENvbnRlbnRDb29yZHMpfX1oYW5kbGVIb3Jpem9udGFsQXhpc1R3b1Zpb2xhdGlvbnMoYSl7c3dp''@;'; put 'put ''dGNoKGEpe2Nhc2UgNTpjYXNlIDQ6e2NvbnN0IGQ9T3kobW0sYWcsITEpO3RoaXMuY29udGVudE9mZnNldHM9X2goZCh0aGlzLnBvc2l0aW9uKSx0aGlzLmN1cnJlbnRBbmNob3JDb29yZHMsdGhpcy5jdXJyZW50Q29udGVudENvb3Jkcyk7YnJlYWt9Y2FzZSAzOmRlZmF1bHQ6YnJlYWs7Y2Fz''@;'; put 'put ''ZSAyOmNhc2UgMTp7Y29uc3QgZD1PeShtbSxhZywhMCk7dGhpcy5jb250ZW50T2Zmc2V0cz1faChkKHRoaXMucG9zaXRpb24pLHRoaXMuY3VycmVudEFuY2hvckNvb3Jkcyx0aGlzLmN1cnJlbnRDb250ZW50Q29vcmRzKTticmVha319fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7''@;'; put 'put ''cmV0dXJuIG5ldyhhfHxjKSh4cihPeCkseHIoaW8pKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxIeD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNLEQpe3RoaXMuZG9jdW1lbnQ9YSx0aGlzLmNvbnRhaW5lcj1kLHRo''@;'; put 'put ''aXMudGVtcGxhdGU9aCx0aGlzLnJlbmRlcmVyPWYsdGhpcy5zbWFydFBvc2l0aW9uU2VydmljZT12LHRoaXMuc21hcnRFdmVudHNTZXJ2aWNlPU0sdGhpcy5zbWFydE9wZW5TZXJ2aWNlPUQsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMucmVtb3ZlQ2xpY2tMaXN0ZW5lckZuPW51bGwsdGhp''@;'; put 'put ''cy5zaG91bGRSZWFsaWduPSExLHRoaXMucHJldmlvdXNDb250ZW50SGVpZ2h0PW51bGwsdGhpcy5jaGVja0NvbGxlY3Rvcj1uZXcgS3J9c2V0IG9wZW4oYSl7dGhpcy5zbWFydE9wZW5TZXJ2aWNlLm9wZW49ISFhfXNldCBjb250ZW50QXQoYSl7dGhpcy5zbWFydFBvc2l0aW9uU2VydmljZS5w''@;'; put 'put ''b3NpdGlvbj1hfXNldCBvdXRzaWRlQ2xpY2tDbG9zZShhKXt0aGlzLnNtYXJ0RXZlbnRzU2VydmljZS5vdXRzaWRlQ2xpY2tDbG9zZT0hIWF9c2V0IHNjcm9sbFRvQ2xvc2UoYSl7dGhpcy5zbWFydEV2ZW50c1NlcnZpY2Uuc2Nyb2xsVG9DbG9zZT0hIWF9bmdBZnRlckNvbnRlbnRDaGVja2Vk''@;'; put 'put ''KCl7aWYodGhpcy5zbWFydE9wZW5TZXJ2aWNlLm9wZW4mJnRoaXMudmlldyl7Y29uc3QgYT10aGlzLnZpZXcucm9vdE5vZGVzWzBdLm9mZnNldEhlaWdodDsodGhpcy5zaG91bGRSZWFsaWdufHxudWxsIT09dGhpcy5wcmV2aW91c0NvbnRlbnRIZWlnaHQmJnRoaXMucHJldmlvdXNDb250ZW50''@;'; put 'put ''SGVpZ2h0IT09YSkmJih0aGlzLnByZXZpb3VzQ29udGVudEhlaWdodD1hLHRoaXMuY2hlY2tDb2xsZWN0b3IuZW1pdCgpKX19bmdBZnRlclZpZXdJbml0KCl7dGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5zbWFydE9wZW5TZXJ2aWNlLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKGE9PnthP3Ro''@;'; put 'put ''aXMuYWRkQ29udGVudCgpOnRoaXMucmVtb3ZlQ29udGVudCgpfSksdGhpcy5zbWFydFBvc2l0aW9uU2VydmljZS5zaG91bGRSZWFsaWduLnN1YnNjcmliZSgoKT0+e3RoaXMuc2hvdWxkUmVhbGlnbj0hMH0pLHRoaXMuY2hlY2tDb2xsZWN0b3IucGlwZShmbSgwKSkuc3Vic2NyaWJlKCgpPT57''@;'; put 'put ''dGhpcy5hbGlnbkNvbnRlbnQoKSx0aGlzLnNob3VsZFJlYWxpZ249ITEsdGhpcy52aWV3JiYodGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnZpZXcucm9vdE5vZGVzWzBdLCJvcGFjaXR5IiwiMSIpLHRoaXMuc21hcnRPcGVuU2VydmljZS5wb3BvdmVyVmlzaWJsZUVtaXQoITApKX0pKX1u''@;'; put 'put ''Z09uRGVzdHJveSgpe3RoaXMucmVtb3ZlQ29udGVudCgpLHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9YWRkQ29udGVudCgpe3RoaXMudmlldz10aGlzLmNvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy50ZW1wbGF0ZSk7Y29uc3RbYV09dGhp''@;'; put 'put ''cy52aWV3LnJvb3ROb2Rlczt0aGlzLnNtYXJ0RXZlbnRzU2VydmljZS5jb250ZW50UmVmPWEsdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhhLCJjbHItcG9wb3Zlci1jb250ZW50IiksdGhpcy5yZW5kZXJlci5zZXRTdHlsZShhLCJ0b3AiLCIwcHgiKSx0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGEs''@;'; put 'put ''ImxlZnQiLCIwcHgiKSx0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGEsIm9wYWNpdHkiLCIwIiksdGhpcy5yZW1vdmVDbGlja0xpc3RlbmVyRm49dGhpcy5yZW5kZXJlci5saXN0ZW4oYSwiY2xpY2siLGQ9Pnt0aGlzLnNtYXJ0T3BlblNlcnZpY2Uub3BlbkV2ZW50PWR9KSx0aGlzLnZpZXcucm9v''@;'; put 'put ''dE5vZGVzLmZvckVhY2goZD0+e3RoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQodGhpcy5kb2N1bWVudC5ib2R5LGQpfSksdGhpcy5zaG91bGRSZWFsaWduPSEwfXJlbW92ZUNvbnRlbnQoKXt0aGlzLnZpZXcmJih0aGlzLnJlbW92ZUNsaWNrTGlzdGVuZXJGbiYmKHRoaXMucmVtb3ZlQ2xpY2tM''@;'; put 'put ''aXN0ZW5lckZuKCksdGhpcy5yZW1vdmVDbGlja0xpc3RlbmVyRm49bnVsbCksdGhpcy52aWV3LnJvb3ROb2Rlcy5mb3JFYWNoKGE9PnRoaXMucmVuZGVyZXIucmVtb3ZlQ2hpbGQodGhpcy5kb2N1bWVudC5ib2R5LGEpKSx0aGlzLmNvbnRhaW5lci5jbGVhcigpLGRlbGV0ZSB0aGlzLnZpZXcs''@;'; put 'put ''dGhpcy5zbWFydE9wZW5TZXJ2aWNlLnBvcG92ZXJWaXNpYmxlRW1pdCghMSkpfWFsaWduQ29udGVudCgpe2lmKCF0aGlzLnZpZXcpcmV0dXJuO2NvbnN0IGE9dGhpcy5zbWFydFBvc2l0aW9uU2VydmljZS5hbGlnbkNvbnRlbnQodGhpcy52aWV3LnJvb3ROb2Rlc1swXSk7dGhpcy5yZW5kZXJl''@;'; put 'put ''ci5zZXRTdHlsZSh0aGlzLnZpZXcucm9vdE5vZGVzWzBdLCJ0b3AiLGAke2EueU9mZnNldH1weGApLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy52aWV3LnJvb3ROb2Rlc1swXSwibGVmdCIsYCR7YS54T2Zmc2V0fXB4YCksdGhpcy5zbWFydE9wZW5TZXJ2aWNlLnBvcG92ZXJBbGlnbmVk''@;'; put 'put ''RW1pdCh0aGlzLnZpZXcucm9vdE5vZGVzWzBdKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UodnMpLEdlKERvKSxHZShTbCksR2UoRW8pLEdlKEYxZSksR2UoT3gpLEdlKHNjKSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltb''@;'; put 'put ''IiIsImNsclBvcG92ZXJDb250ZW50IiwiIl1dLGlucHV0czp7b3BlbjpbTm4uTm9uZSwiY2xyUG9wb3ZlckNvbnRlbnQiLCJvcGVuIl0sY29udGVudEF0OltObi5Ob25lLCJjbHJQb3BvdmVyQ29udGVudEF0IiwiY29udGVudEF0Il0sb3V0c2lkZUNsaWNrQ2xvc2U6W05uLk5vbmUsImNsclBv''@;'; put 'put ''cG92ZXJDb250ZW50T3V0c2lkZUNsaWNrVG9DbG9zZSIsIm91dHNpZGVDbGlja0Nsb3NlIl0sc2Nyb2xsVG9DbG9zZTpbTm4uTm9uZSwiY2xyUG9wb3ZlckNvbnRlbnRTY3JvbGxUb0Nsb3NlIiwic2Nyb2xsVG9DbG9zZSJdfX0pLGN9KSgpLE54PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3Io''@;'; put 'put ''YSl7dGhpcy5zbWFydE9wZW5TZXJ2aWNlPWEsdGhpcy5vcGVuQ2xvc2VDaGFuZ2U9bmV3IEtyLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChhLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKGQ9Pnt0aGlzLm9wZW5DbG9zZUNoYW5nZS5uZXh0KGQpfSkpfWhhbmRs''@;'; put 'put ''ZUNsaWNrKGEpe3RoaXMuc21hcnRPcGVuU2VydmljZS50b2dnbGVXaXRoRXZlbnQoYSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShz''@;'; put 'put ''YykpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJQb3BvdmVyT3BlbkNsb3NlQnV0dG9uIiwiIl1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZhJiZGdCgiY2xpY2siLGZ1bmN0aW9uKGYpe3JldHVybiBkLmhhbmRsZUNsaWNrKGYp''@;'; put 'put ''fSksMiZhJiZUcigiY2xyLXNtYXJ0LW9wZW4tY2xvc2UiLCEwKX0sb3V0cHV0czp7b3BlbkNsb3NlQ2hhbmdlOiJjbHJQb3BvdmVyT3BlbkNsb3NlQ2hhbmdlIn19KSxjfSkoKSxWeD0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxj''@;'; put 'put ''KX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHt9KSxjfSkoKTt2YXIgd2g9ZnVuY3Rpb24oYyl7cmV0dXJuIGMuVVA9InVwIixjLkRPV049ImRvd24iLGMuTEVGVD0ibGVmdCIsYy5SSUdIVD0icmlnaHQiLGN9KHdofHx7fSk7bGV0IHdwPWNsYXNze2NvbnN0cnVj''@;'; put 'put ''dG9yKGwpe3RoaXMucmVuZGVyZXI9bCx0aGlzLl91bmxpc3RlbkZ1bmNzPVtdfWdldCBjdXJyZW50KCl7cmV0dXJuIHRoaXMuX2N1cnJlbnR9cmVzZXQobCl7dGhpcy5fY3VycmVudD1sfWxpc3RlblRvQXJyb3dLZXlzKGwpe3RoaXMuX3VubGlzdGVuRnVuY3MucHVzaCh0aGlzLnJlbmRlcmVy''@;'; put 'put ''Lmxpc3RlbihsLCJrZXlkb3duLmFycm93dXAiLCgpPT4hdGhpcy5tb3ZlKHdoLlVQKSkpLHRoaXMuX3VubGlzdGVuRnVuY3MucHVzaCh0aGlzLnJlbmRlcmVyLmxpc3RlbihsLCJrZXlkb3duLmFycm93ZG93biIsKCk9PiF0aGlzLm1vdmUod2guRE9XTikpKSx0aGlzLl91bmxpc3RlbkZ1bmNz''@;'; put 'put ''LnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4obCwia2V5ZG93bi5hcnJvd2xlZnQiLCgpPT4hdGhpcy5tb3ZlKHdoLkxFRlQpKSksdGhpcy5fdW5saXN0ZW5GdW5jcy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKGwsImtleWRvd24uYXJyb3dyaWdodCIsKCk9PiF0aGlzLm1vdmUod2guUklH''@;'; put 'put ''SFQpKSl9cmVnaXN0ZXJDb250YWluZXIobCxhPSIwIil7dGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUobCwidGFiaW5kZXgiLGEpLHRoaXMubGlzdGVuVG9BcnJvd0tleXMobCksdGhpcy5fdW5saXN0ZW5GdW5jcy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKGwsImtleWRvd24uc3BhY2Ui''@;'; put 'put ''LCgpPT4hdGhpcy5hY3RpdmF0ZUN1cnJlbnQoKSkpLHRoaXMuX3VubGlzdGVuRnVuY3MucHVzaCh0aGlzLnJlbmRlcmVyLmxpc3RlbihsLCJrZXlkb3duLmVudGVyIiwoKT0+IXRoaXMuYWN0aXZhdGVDdXJyZW50KCkpKX1tb3ZlVG8obCl7dm9pZCAwIT09bCYmKHRoaXMuY3VycmVudCYmdGhp''@;'; put 'put ''cy5jdXJyZW50LmJsdXIoKSxsLmZvY3VzKCksdGhpcy5fY3VycmVudD1sKX1tb3ZlKGwpe2xldCBhPSExO2lmKHRoaXMuY3VycmVudCl7Y29uc3QgZD10aGlzLmN1cnJlbnRbbF07ZCYmKEJNKGQpP2Q6Zm8oZCkpLnN1YnNjcmliZShmPT57ZiYmKHRoaXMubW92ZVRvKGYpLGE9ITApfSl9cmV0''@;'; put 'put ''dXJuIGF9YWN0aXZhdGVDdXJyZW50KCl7cmV0dXJuISghdGhpcy5jdXJyZW50fHwhdGhpcy5jdXJyZW50LmFjdGl2YXRlfHwodGhpcy5jdXJyZW50LmFjdGl2YXRlKCksMCkpfWRldGFjaExpc3RlbmVycygpe3RoaXMuX3VubGlzdGVuRnVuY3MuZm9yRWFjaChsPT5sKCkpfX07d3AuXHUwMjc1''@;'; put 'put ''ZmFjPWZ1bmN0aW9uKGwpe3JldHVybiBuZXcobHx8d3ApKHhyKEVvKSl9LHdwLlx1MDI3NXByb3Y9YW4oe3Rva2VuOndwLGZhY3Rvcnk6d3AuXHUwMjc1ZmFjfSk7Y29uc3QgVjFlPXtwcm92aWRlOndwLHVzZUZhY3Rvcnk6ZnVuY3Rpb24gSnplKGMsbCl7cmV0dXJuIGN8fG5ldyB3cChsKX0s''@;'; put 'put ''ZGVwczpbW25ldyBJMSxuZXcgbGQsd3BdLEVvXX07dmFyIFIyPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuQkVGT1JFPS0xXT0iQkVGT1JFIixjW2MuQUZURVI9MV09IkFGVEVSIixjfShSMnx8e30pO2NsYXNzIFRke31UZFsidG9wLXJpZ2h0Il09e2F4aXM6aDEuVkVSVElDQUwsc2lkZTpSMi5C''@;'; put 'put ''RUZPUkUsYW5jaG9yOk9zLkVORCxjb250ZW50Ok9zLkVORH0sVGRbInRvcC1sZWZ0Il09e2F4aXM6aDEuVkVSVElDQUwsc2lkZTpSMi5CRUZPUkUsYW5jaG9yOk9zLlNUQVJULGNvbnRlbnQ6T3MuU1RBUlR9LFRkWyJib3R0b20tcmlnaHQiXT17YXhpczpoMS5WRVJUSUNBTCxzaWRlOlIyLkFG''@;'; put 'put ''VEVSLGFuY2hvcjpPcy5FTkQsY29udGVudDpPcy5FTkR9LFRkWyJib3R0b20tbGVmdCJdPXtheGlzOmgxLlZFUlRJQ0FMLHNpZGU6UjIuQUZURVIsYW5jaG9yOk9zLlNUQVJULGNvbnRlbnQ6T3MuU1RBUlR9LFRkWyJyaWdodC10b3AiXT17YXhpczpoMS5IT1JJWk9OVEFMLHNpZGU6UjIuQUZU''@;'; put 'put ''RVIsYW5jaG9yOk9zLkNFTlRFUixjb250ZW50Ok9zLkVORH0sVGRbInJpZ2h0LWJvdHRvbSJdPXtheGlzOmgxLkhPUklaT05UQUwsc2lkZTpSMi5BRlRFUixhbmNob3I6T3MuU1RBUlQsY29udGVudDpPcy5TVEFSVH0sVGRbImxlZnQtdG9wIl09e2F4aXM6aDEuSE9SSVpPTlRBTCxzaWRlOlIy''@;'; put 'put ''LkJFRk9SRSxhbmNob3I6T3MuQ0VOVEVSLGNvbnRlbnQ6T3MuRU5EfSxUZFsibGVmdC1ib3R0b20iXT17YXhpczpoMS5IT1JJWk9OVEFMLHNpZGU6UjIuQkVGT1JFLGFuY2hvcjpPcy5TVEFSVCxjb250ZW50Ok9zLlNUQVJUfTtjb25zdCBOTD1uZXcgU3QoIlBPUE9WRVJfSE9TVF9BTkNIT1Ii''@;'; put 'put ''KTtsZXQgUXplPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy50b2dnbGVTZXJ2aWNlPWEsdGhpcy5sYXN0T3BlbkNoYW5nZT1udWxsfW5nT25Jbml0KCl7dGhpcy5zdWJzY3JpcHRpb249dGhpcy50b2dnbGVTZXJ2aWNlLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKGE9Pnt0aGlzLmxh''@;'; put 'put ''c3RPcGVuQ2hhbmdlPWF9KX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpfW9uRXNjYXBlS2V5KGEpe251bGwhPT10aGlzLmxhc3RPcGVuQ2hhbmdlJiYoITE9PT10aGlzLmxhc3RPcGVuQ2hhbmdlJiZhLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMubGFzdE9w''@;'; put 'put ''ZW5DaGFuZ2U9bnVsbCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKHNjKSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZhJiZGdCgia2V5dXAuZXNjYXBlIixmdW5jdGlvbihmKXtyZXR1cm4g''@;'; put 'put ''ZC5vbkVzY2FwZUtleShmKX0pfSxzdGFuZGFsb25lOiEwfSksY30pKCksb2c9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc3RhbmRhbG9uZTohMCxmZWF0dXJlczpbZGEoW3NjLE94''@;'; put 'put ''LEYxZSx7cHJvdmlkZTpOTCx1c2VFeGlzdGluZzpKaX1dKSx2ZChbUXplXSldfSksY30pKCk7Y2xhc3MgT1l7c3RhdGljIGxpbmtQYXJlbnQobCxhLGQpe2wuZm9yRWFjaChoPT5oW2RdPWEpfXN0YXRpYyBsaW5rVmVydGljYWwobCxhPSEwKXtsLmZvckVhY2goKGQsaCk9PntoPjAmJihkLnVw''@;'; put 'put ''PWxbaC0xXSksaDxsLmxlbmd0aC0xJiYoZC5kb3duPWxbaCsxXSl9KSxhJiZsLmxlbmd0aD4xJiYobFswXS51cD1sW2wubGVuZ3RoLTFdLGxbbC5sZW5ndGgtMV0uZG93bj1sWzBdKX19bGV0IHZtPSgoKT0+e2NsYXNzIGN7dXNlckRlZmluZWRXaWR0aChhKXtjb25zdCBkPWEuY2xvbmVOb2Rl''@;'; put 'put ''KCEwKTtkLmlkJiYoZC5pZD1kLmlkKyItY2xvbmUiKSxkLmNsYXNzTGlzdC5hZGQoImRhdGFncmlkLWNlbGwtd2lkdGgtemVybyIpLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZCk7Y29uc3QgaD10aGlzLmNsaWVudFJlY3QoZCkud2lkdGg7cmV0dXJuIGQucmVtb3ZlKCksaH1zY3JvbGxC''@;'; put 'put ''YXJXaWR0aChhKXtyZXR1cm4gYS5vZmZzZXRXaWR0aC1hLmNsaWVudFdpZHRofXNjcm9sbFdpZHRoKGEpe3JldHVybiBhLnNjcm9sbFdpZHRofHwwfWNvbXB1dGVkSGVpZ2h0KGEpe3JldHVybiBwYXJzZUludChnZXRDb21wdXRlZFN0eWxlKGEpLmdldFByb3BlcnR5VmFsdWUoImhlaWdodCIp''@;'; put 'put ''LDEwKX1jbGllbnRSZWN0KGEpe2NvbnN0IGQ9YS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm57dG9wOnBhcnNlSW50KGQudG9wLDEwKSxib3R0b206cGFyc2VJbnQoZC5ib3R0b20sMTApLGxlZnQ6cGFyc2VJbnQoZC5sZWZ0LDEwKSxyaWdodDpwYXJzZUludChkLnJpZ2h0LDEwKSx3''@;'; put 'put ''aWR0aDpwYXJzZUludChkLndpZHRoLDEwKSxoZWlnaHQ6cGFyc2VJbnQoZC5oZWlnaHQsMTApfX1taW5XaWR0aChhKXtyZXR1cm4gcGFyc2VJbnQoZ2V0Q29tcHV0ZWRTdHlsZShhKS5nZXRQcm9wZXJ0eVZhbHVlKCJtaW4td2lkdGgiKSwxMCl9Zm9jdXMoYSl7YS5mb2N1cygpfX1yZXR1cm4g''@;'; put 'put ''Yy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxWTD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLmVsZW1lbnQ9YSx0aGlzLmRvbUFkYXB0ZXI9ZCx0''@;'; put 'put ''aGlzLnJlbmRlcmVyPWgsdGhpcy5jbHJFeHBhbmRUcmlnZ2VyPSExLHRoaXMuc3RhcnRIZWlnaHQ9MH1nZXQgZXhwYW5kQW5pbWF0aW9uKCl7cmV0dXJue3ZhbHVlOnRoaXMuY2xyRXhwYW5kVHJpZ2dlcixwYXJhbXM6e3N0YXJ0SGVpZ2h0OnRoaXMuc3RhcnRIZWlnaHR9fX1hbmltYXRpb25T''@;'; put 'put ''dGFydChhKXsidm9pZCIhPT1hLmZyb21TdGF0ZSYmdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCwib3ZlcmZsb3ciLCJoaWRkZW4iKX1hbmltYXRpb25Eb25lKGEpeyJ2b2lkIiE9PWEuZnJvbVN0YXRlJiYodGhpcy5yZW5kZXJlci5yZW1vdmVTdHls''@;'; put 'put ''ZSh0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCwib3ZlcmZsb3ciKSx0aGlzLnVwZGF0ZVN0YXJ0SGVpZ2h0KCkpfXVwZGF0ZVN0YXJ0SGVpZ2h0KCl7dGhpcy5zdGFydEhlaWdodD10aGlzLmRvbUFkYXB0ZXIuY29tcHV0ZWRIZWlnaHQodGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQpfHww''@;'; put 'put ''fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShKaSksR2Uodm0pLEdlKEVvKSl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1leHBhbmRhYmxlLWFuaW1hdGlvbiJdXSxob3N0VmFyczoxLGhvc3RCaW5kaW5nczpmdW5j''@;'; put 'put ''dGlvbihhLGQpezEmYSYmZFUoIkBleHBhbmRBbmltYXRpb24uc3RhcnQiLGZ1bmN0aW9uKGYpe3JldHVybiBkLmFuaW1hdGlvblN0YXJ0KGYpfSkoIkBleHBhbmRBbmltYXRpb24uZG9uZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQuYW5pbWF0aW9uRG9uZShmKX0pLDImYSYmbFUoIkBleHBhbmRB''@;'; put 'put ''bmltYXRpb24iLGQuZXhwYW5kQW5pbWF0aW9uKX0saW5wdXRzOntjbHJFeHBhbmRUcmlnZ2VyOiJjbHJFeHBhbmRUcmlnZ2VyIn0sZmVhdHVyZXM6W2RhKFt2bV0pXSxuZ0NvbnRlbnRTZWxlY3RvcnM6eW8sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYSgp''@;'; put 'put ''LFlyKDApKX0sZW5jYXBzdWxhdGlvbjoyLGRhdGE6e2FuaW1hdGlvbjpbeWgoImV4cGFuZEFuaW1hdGlvbiIsW2l1KCJ0cnVlIDw9PiBmYWxzZSIsW3VzKHtoZWlnaHQ6Int7c3RhcnRIZWlnaHR9fXB4In0pLE0wKCIwLjJzIGVhc2UtaW4tb3V0Iix1cyh7aGVpZ2h0OiIqIn0pKV0pXSldfX0p''@;'; put 'put ''LGN9KSgpLFBZPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1JhXX0pLGN9KSgpLGVVZT0wO2NvbnN0IEZ5PW5ldyBTdCgiSUZfQUNU''@;'; put 'put ''SVZFX0lEIiksblVlPXtwcm92aWRlOkZ5LHVzZUZhY3Rvcnk6ZnVuY3Rpb24gdFVlKCl7cmV0dXJuKytlVWV9fTtsZXQgZjc9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2N1cnJlbnRDaGFuZ2U9bmV3IFdufWdldCBjdXJyZW50Q2hhbmdlKCl7cmV0dXJuIHRoaXMuX2N1cnJl''@;'; put 'put ''bnRDaGFuZ2UuYXNPYnNlcnZhYmxlKCl9Z2V0IGN1cnJlbnQoKXtyZXR1cm4gdGhpcy5fY3VycmVudH1zZXQgY3VycmVudChhKXt0aGlzLl9jdXJyZW50IT09YSYmKHRoaXMuX2N1cnJlbnQ9YSx0aGlzLl9jdXJyZW50Q2hhbmdlLm5leHQoYSkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rp''@;'; put 'put ''b24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxIeT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMuaWZBY3RpdmVTZXJ2aWNlPWEsdGhpcy5pZD1kLHRoaXMudGVtcGxhdGU9aCx0''@;'; put 'put ''aGlzLmNvbnRhaW5lcj1mLHRoaXMuYWN0aXZlQ2hhbmdlPW5ldyBLcighMSksdGhpcy53YXNBY3RpdmU9ITEsdGhpcy5jaGVja0FuZFVwZGF0ZVZpZXcoYS5jdXJyZW50KSx0aGlzLnN1YnNjcmlwdGlvbj1hLmN1cnJlbnRDaGFuZ2Uuc3Vic2NyaWJlKHY9Pnt0aGlzLmNoZWNrQW5kVXBkYXRl''@;'; put 'put ''Vmlldyh2KX0pfWdldCBhY3RpdmUoKXtyZXR1cm4gdGhpcy5pZkFjdGl2ZVNlcnZpY2UuY3VycmVudD09PXRoaXMuaWR9c2V0IGFjdGl2ZShhKXthJiYodGhpcy5pZkFjdGl2ZVNlcnZpY2UuY3VycmVudD10aGlzLmlkKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2Ny''@;'; put 'put ''aWJlKCl9dXBkYXRlVmlldyhhKXthP3RoaXMuY29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLnRlbXBsYXRlKTp0aGlzLmNvbnRhaW5lci5jbGVhcigpfWNoZWNrQW5kVXBkYXRlVmlldyhhKXtjb25zdCBkPWE9PT10aGlzLmlkO2QhPT10aGlzLndhc0FjdGl2ZSYmKHRoaXMudXBk''@;'; put 'put ''YXRlVmlldyhkKSx0aGlzLmFjdGl2ZUNoYW5nZS5lbWl0KGQpLHRoaXMud2FzQWN0aXZlPWQpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShmNyksR2UoRnkpLEdlKFNsKSxHZShEbykpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9y''@;'; put 'put ''czpbWyIiLCJjbHJJZkFjdGl2ZSIsIiJdXSxpbnB1dHM6e2FjdGl2ZTpbTm4uTm9uZSwiY2xySWZBY3RpdmUiLCJhY3RpdmUiXX0sb3V0cHV0czp7YWN0aXZlQ2hhbmdlOiJjbHJJZkFjdGl2ZUNoYW5nZSJ9fSksY30pKCksTDI9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhp''@;'; put 'put ''cy50b2dnbGVTZXJ2aWNlPWEsdGhpcy50ZW1wbGF0ZT1kLHRoaXMuY29udGFpbmVyPWgsdGhpcy5vcGVuQ2hhbmdlPW5ldyBLcighMSksdGhpcy5zdWJzY3JpcHRpb249YS5vcGVuQ2hhbmdlLnN1YnNjcmliZShmPT57dGhpcy51cGRhdGVWaWV3KGYpLHRoaXMub3BlbkNoYW5nZS5lbWl0KGYp''@;'; put 'put ''fSl9Z2V0IG9wZW4oKXtyZXR1cm4gdGhpcy50b2dnbGVTZXJ2aWNlLm9wZW59c2V0IG9wZW4oYSl7dGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49YX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9dXBkYXRlVmlldyhhKXthP3RoaXMuY29udGFpbmVyLmNyZWF0''@;'; put 'put ''ZUVtYmVkZGVkVmlldyh0aGlzLnRlbXBsYXRlKTp0aGlzLmNvbnRhaW5lci5jbGVhcigpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShzYyksR2UoU2wpLEdlKERvKSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNs''@;'; put 'put ''cklmT3BlbiIsIiJdXSxpbnB1dHM6e29wZW46W05uLk5vbmUsImNscklmT3BlbiIsIm9wZW4iXX0sb3V0cHV0czp7b3BlbkNoYW5nZToiY2xySWZPcGVuQ2hhbmdlIn19KSxjfSkoKSxCMWU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYpe3RoaXMudGVtcGxhdGU9YSx0aGlz''@;'; put 'put ''LmNvbnRhaW5lcj1kLHRoaXMuZWw9aCx0aGlzLnJlbmRlcmVyPWYsdGhpcy5leHBhbmQ9dix0aGlzLmV4cGFuZGVkQ2hhbmdlPW5ldyBLcighMCksdGhpcy5fZXhwYW5kZWQ9ITEsdGhpcy5fc3Vic2NyaXB0aW9ucz1bXSx0aGlzLl9zdWJzY3JpcHRpb25zLnB1c2godi5leHBhbmRDaGFuZ2Uu''@;'; put 'put ''c3Vic2NyaWJlKCgpPT57dGhpcy51cGRhdGVWaWV3KCksdGhpcy5leHBhbmRlZENoYW5nZS5lbWl0KHYuZXhwYW5kZWQpfSkpLHYuaGFzRXhwYW5kVGVtcGxhdGU9ISFhfWdldCBleHBhbmRlZCgpe3JldHVybiB0aGlzLl9leHBhbmRlZH1zZXQgZXhwYW5kZWQoYSl7ImJvb2xlYW4iPT10eXBl''@;'; put 'put ''b2YgYSYmKHRoaXMuZXhwYW5kLmV4cGFuZGVkPWEsdGhpcy5fZXhwYW5kZWQ9YSl9bmdPbkluaXQoKXt0aGlzLmV4cGFuZC5leHBhbmRhYmxlKyssdGhpcy51cGRhdGVWaWV3KCl9bmdPbkRlc3Ryb3koKXt0aGlzLmV4cGFuZC5leHBhbmRhYmxlLS0sdGhpcy5fc3Vic2NyaXB0aW9ucy5mb3JF''@;'; put 'put ''YWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9dXBkYXRlVmlldygpe2lmKCF0aGlzLmV4cGFuZC5leHBhbmRlZHx8MD09PXRoaXMuY29udGFpbmVyLmxlbmd0aClpZih0aGlzLnRlbXBsYXRlKXRoaXMuZXhwYW5kLmV4cGFuZGVkP3RoaXMuY29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlz''@;'; put 'put ''LnRlbXBsYXRlKTp0aGlzLmNvbnRhaW5lci5jbGVhcigpO2Vsc2UgdHJ5e3RoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJkaXNwbGF5Iix0aGlzLmV4cGFuZC5leHBhbmRlZD9udWxsOiJub25lIil9Y2F0Y2h7fX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0''@;'; put 'put ''aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoU2wsOCksR2UoRG8pLEdlKEppKSxHZShFbyksR2UoVTEpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xySWZFeHBhbmRlZCIsIiJdXSxpbnB1dHM6e2V4cGFuZGVkOltObi5Ob25lLCJjbHJJZkV4cGFuZGVkIiwi''@;'; put 'put ''ZXhwYW5kZWQiXX0sb3V0cHV0czp7ZXhwYW5kZWRDaGFuZ2U6ImNscklmRXhwYW5kZWRDaGFuZ2UifX0pLGN9KSgpLE8yPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAy''@;'; put 'put ''NzVpbmo9QXIoe2ltcG9ydHM6W1JhXX0pLGN9KSgpO2NvbnN0IHJVZT17cHJvdmlkZTpuZXcgU3QoIkZPQ1VTX09OX1ZJRVdfSU5JVCIpLHVzZVZhbHVlOiEwfTtsZXQgQkw9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMu''@;'; put 'put ''XHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7cHJvdmlkZXJzOltyVWVdLGltcG9ydHM6W1JhXX0pLGN9KSgpLGFVZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6''@;'; put 'put ''Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltSYSxBcyxWeF19KSxjfSkoKSxQMj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5lbD1hLHRoaXMucmVuZGVyZXI9ZCx0aGlzLmNsckxvYWRpbmdDaGFuZ2U9bmV3IEtyKCExKSx0aGlzLmJ1dHRvblN0YXRlPXoxLHRoaXMu''@;'; put 'put ''c3RhdGU9ejEuREVGQVVMVH1sb2FkaW5nU3RhdGVDaGFuZ2UoYSl7aWYoYSE9PXRoaXMuc3RhdGUpe3N3aXRjaCh0aGlzLnN0YXRlPWEsYSl7Y2FzZSB6MS5ERUZBVUxUOnRoaXMucmVuZGVyZXIucmVtb3ZlU3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJ3aWR0aCIpLHRoaXMucmVuZGVy''@;'; put 'put ''ZXIucmVtb3ZlU3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJ0cmFuc2Zvcm0iKSx0aGlzLmRpc2FibGVkfHx0aGlzLnJlbmRlcmVyLnJlbW92ZUF0dHJpYnV0ZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsImRpc2FibGVkIik7YnJlYWs7Y2FzZSB6MS5MT0FESU5HOnRoaXMuc2V0RXhwbGlj''@;'; put 'put ''aXRCdXR0b25XaWR0aCgpLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGV6KDApIiksdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJkaXNhYmxlZCIsIiIpO2JyZWFrO2Nhc2Ug''@;'; put 'put ''ejEuU1VDQ0VTUzp0aGlzLnNldEV4cGxpY2l0QnV0dG9uV2lkdGgoKTticmVhaztjYXNlIHoxLkVSUk9SOnRoaXMubG9hZGluZ1N0YXRlQ2hhbmdlKHoxLkRFRkFVTFQpfXRoaXMuY2xyTG9hZGluZ0NoYW5nZS5lbWl0KGEpfX1zZXRFeHBsaWNpdEJ1dHRvbldpZHRoKCl7aWYodGhpcy5lbC5u''@;'; put 'put ''YXRpdmVFbGVtZW50JiZ0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KXtjb25zdCBhPXRoaXMuZWwubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxkPU1hdGgubWF4KDQyLGEud2lkdGgpO3RoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5l''@;'; put 'put ''bC5uYXRpdmVFbGVtZW50LCJ3aWR0aCIsYCR7ZH1weGApfX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoSmkpLEdlKEVvKSl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImJ1dHRvbiIsImNsckxvYWRpbmciLCIiXV0saG9z''@;'; put 'put ''dFZhcnM6MSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJmhyKCJkaXNhYmxlZCIsZC5kaXNhYmxlZD8iIjpudWxsKX0saW5wdXRzOntkaXNhYmxlZDoiZGlzYWJsZWQifSxvdXRwdXRzOntjbHJMb2FkaW5nQ2hhbmdlOiJjbHJMb2FkaW5nQ2hhbmdlIn0sZmVhdHVyZXM6W2RhKFt7''@;'; put 'put ''cHJvdmlkZTpEeCx1c2VFeGlzdGluZzpjfV0pXSxhdHRyczpDSGUsbmdDb250ZW50U2VsZWN0b3JzOnlvLGRlY2xzOjQsdmFyczo1LGNvbnN0czpbWzMsIm5nU3dpdGNoIl0sWzQsIm5nU3dpdGNoQ2FzZSJdLFsiY2xhc3MiLCJjbHItbG9hZGluZy1idG4tY29udGVudCIsNCwibmdTd2l0Y2hD''@;'; put 'put ''YXNlIl0sWzEsInNwaW5uZXIiLCJzcGlubmVyLWlubGluZSJdLFsxLCJzcGlubmVyIiwic3Bpbm5lci1pbmxpbmUiLCJzcGlubmVyLWNoZWNrIl0sWzEsImNsci1sb2FkaW5nLWJ0bi1jb250ZW50Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoKSxkZSgwLCJzcGFuIiwwKSxn''@;'; put 'put ''dCgxLFNIZSwyLDEsIm5nLWNvbnRhaW5lciIsMSkoMixNSGUsMiwxLCJuZy1jb250YWluZXIiLDEpKDMseEhlLDIsMSwic3BhbiIsMiksaGUoKSksMiZhJiYoTWUoIkBwYXJlbnQiLHZvaWQgMCkoIm5nU3dpdGNoIixkLnN0YXRlKSxmZSgpLE1lKCJuZ1N3aXRjaENhc2UiLGQuYnV0dG9uU3Rh''@;'; put 'put ''dGUuTE9BRElORyksZmUoKSxNZSgibmdTd2l0Y2hDYXNlIixkLmJ1dHRvblN0YXRlLlNVQ0NFU1MpLGZlKCksTWUoIm5nU3dpdGNoQ2FzZSIsZC5idXR0b25TdGF0ZS5ERUZBVUxUKSl9LGRlcGVuZGVuY2llczpbUzIsY3BdLGVuY2Fwc3VsYXRpb246MixkYXRhOnthbmltYXRpb246W3loKCJw''@;'; put 'put ''YXJlbnQiLFtpdSgiOmVudGVyIixbXSldKSx5aCgiZGVmYXVsdEJ1dHRvbiIsW2l1KCI6ZW50ZXIiLFt1cyh7b3BhY2l0eTowfSksTTAoIjIwMG1zIDEwMG1zIGVhc2UtaW4iLHVzKHtvcGFjaXR5OjF9KSldKSxpdSgiOmxlYXZlIixbdXMoe29wYWNpdHk6MH0pXSldKSx5aCgic3Bpbm5lciIs''@;'; put 'put ''W2l1KCI6ZW50ZXIiLFt1cyh7b3BhY2l0eTowfSksTTAoIjIwMG1zIDEwMG1zIGVhc2UtaW4iLHVzKHtvcGFjaXR5OjF9KSldKSxpdSgiOmxlYXZlIixbdXMoe29wYWNpdHk6MX0pLE0wKCIxMDBtcyBlYXNlLW91dCIsdXMoe29wYWNpdHk6MH0pKV0pXSkseWgoInZhbGlkYXRlZCIsW2l1KCI6''@;'; put 'put ''ZW50ZXIiLFtNMCgiNjAwbXMiLHVQZShbdXMoe3RyYW5zZm9ybToic2NhbGUoMCwwKSIsb2Zmc2V0OjB9KSx1cyh7b3BhY2l0eToxLG9mZnNldDouMn0pLHVzKHt0cmFuc2Zvcm06InNjYWxlKDEuMiwxLjIpIixvZmZzZXQ6LjR9KSx1cyh7dHJhbnNmb3JtOiJzY2FsZSguOSwuOSkiLG9mZnNl''@;'; put 'put ''dDouNn0pLHVzKHt0cmFuc2Zvcm06InNjYWxlKDEsMSkiLG9mZnNldDoxfSldKSldKSxpdSgiOmxlYXZlIixbdXMoe29wYWNpdHk6MX0pLE0wKCIxMDBtcyBlYXNlLW91dCIsdXMoe29wYWNpdHk6MH0pKV0pXSldfX0pLGN9KSgpLHNVZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVm''@;'; put 'put ''YWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltSYV19KSxjfSkoKSxsVWU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe1RzLmFkZEljb25zKFQwZSl9fXJldHVybiBjLlx1MDI3NWZhYz1m''@;'; put 'put ''dW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W3NVZSxhVWVdfSksY30pKCksY1VlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxj''@;'; put 'put ''Llx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJuZy1jb21wb25lbnQiXV0sZGVjbHM6MCx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXt9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLEJ4PSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXty''@;'; put 'put ''ZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe30pLGN9KSgpLHVVZT0wLENoPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9pZD0iY2xyLWZvcm0tY29udHJvbC0iKyArK3VVZSx0aGlzLl9pZENoYW5nZT1uZXcgZWkodGhp''@;'; put 'put ''cy5faWQpfWdldCBpZCgpe3JldHVybiB0aGlzLl9pZH1zZXQgaWQoYSl7dGhpcy5faWQ9YSx0aGlzLl9pZENoYW5nZS5uZXh0KGEpfWdldCBpZENoYW5nZSgpe3JldHVybiB0aGlzLl9pZENoYW5nZS5hc09ic2VydmFibGUoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVy''@;'; put 'put ''biBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksZFVlPTAscDc9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2lkPSJjbHItZm9ybS1jb250YWluZXItIisgKytkVWUsdGhpcy5faWRDaGFuZ2U9bmV3IGVpKHRo''@;'; put 'put ''aXMuX2lkKX1nZXQgaWQoKXtyZXR1cm4gdGhpcy5faWR9c2V0IGlkKGEpe3RoaXMuX2lkPWEsdGhpcy5faWRDaGFuZ2UubmV4dChhKX1nZXQgaWRDaGFuZ2UoKXtyZXR1cm4gdGhpcy5faWRDaGFuZ2UuYXNPYnNlcnZhYmxlKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1''@;'; put 'put ''cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpO2xldCBGWT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5jb250cm9sSWRTZXJ2aWNlPWEsdGhpcy5jb250YWluZXJJZFNlcnZpY2U9ZCx0aGlzLmNvbnRy''@;'; put 'put ''b2xJZFN1ZmZpeD0iYWJzdHJhY3QifWdldCBpZCgpe3JldHVybiB0aGlzLmNvbnRhaW5lcklkU2VydmljZT9gJHt0aGlzLmNvbnRhaW5lcklkU2VydmljZS5pZH0tJHt0aGlzLmNvbnRyb2xJZFN1ZmZpeH1gOnRoaXMuY29udHJvbElkU2VydmljZT9gJHt0aGlzLmNvbnRyb2xJZFNlcnZpY2Uu''@;'; put 'put ''aWR9LSR7dGhpcy5jb250cm9sSWRTdWZmaXh9YDpudWxsfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShDaCw4KSxHZShwNyw4KSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmN9KSxjfSkoKSxoVWU9KCgpPT57Y2xhc3MgYyBleHRlbmRzIEZZe2Nv''@;'; put 'put ''bnN0cnVjdG9yKGEsZCl7c3VwZXIoYSxkKSx0aGlzLmNvbnRyb2xJZFNlcnZpY2U9YSx0aGlzLmNvbnRhaW5lcklkU2VydmljZT1kLHRoaXMuY29udHJvbElkU3VmZml4PSJlcnJvciJ9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKENoLDgpLEdl''@;'; put 'put ''KHA3LDgpKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWNvbnRyb2wtZXJyb3IiXV0saG9zdFZhcnM6NSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJihocigiaWQiLGQuaWQpLFRyKCJjbHItc3VidGV4dCIsITApKCJlcnJvciIsITApKX0sZmVhdHVy''@;'; put 'put ''ZXM6W3dhXSxuZ0NvbnRlbnRTZWxlY3RvcnM6eW8sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYSgpLFlyKDApKX0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksakw9KCgpPT57Y2xhc3MgYyBleHRlbmRzIEZZe2NvbnN0cnVjdG9yKGEsZCl7c3VwZXIoYSxk''@;'; put 'put ''KSx0aGlzLmNvbnRyb2xJZFNlcnZpY2U9YSx0aGlzLmNvbnRhaW5lcklkU2VydmljZT1kLHRoaXMuY29udHJvbElkU3VmZml4PSJoZWxwZXIifX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShDaCw4KSxHZShwNyw4KSl9LGMuXHUwMjc1Y21wPVZy''@;'; put 'put ''KHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1jb250cm9sLWhlbHBlciJdXSxob3N0VmFyczozLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmKGhyKCJpZCIsZC5pZCksVHIoImNsci1zdWJ0ZXh0IiwhMCkpfSxmZWF0dXJlczpbd2FdLG5nQ29udGVudFNlbGVjdG9yczp5byxkZWNs''@;'; put 'put ''czoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKCksWXIoMCkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxmMT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5fYWRkaXRpb25hbENvbnRyb2xzPVtdLHRoaXMuX2NvbnRyb2xDaGFuZ2VzPW5ldyBXbix0''@;'; put 'put ''aGlzLl9hZGRpdGlvbmFsQ29udHJvbHNDaGFuZ2VzPW5ldyBXbix0aGlzLl9oZWxwZXJzPW5ldyBXbn1nZXQgY29udHJvbCgpe3JldHVybiB0aGlzLl9jb250cm9sfWdldCBjb250cm9sQ2hhbmdlcygpe3JldHVybiB0aGlzLl9jb250cm9sQ2hhbmdlcy5hc09ic2VydmFibGUoKX1nZXQgYWRk''@;'; put 'put ''aXRpb25hbENvbnRyb2xzKCl7cmV0dXJuIHRoaXMuX2FkZGl0aW9uYWxDb250cm9sc31nZXQgYWRkaXRpb25hbENvbnRyb2xzQ2hhbmdlcygpe3JldHVybiB0aGlzLl9hZGRpdGlvbmFsQ29udHJvbHNDaGFuZ2VzLmFzT2JzZXJ2YWJsZSgpfWdldCBoYXNBZGRpdGlvbmFsQ29udHJvbHMoKXty''@;'; put 'put ''ZXR1cm4hIXRoaXMuX2FkZGl0aW9uYWxDb250cm9scz8ubGVuZ3RofWdldCBoZWxwZXJzQ2hhbmdlKCl7cmV0dXJuIHRoaXMuX2hlbHBlcnMuYXNPYnNlcnZhYmxlKCl9c2V0Q29udHJvbChhKXt0aGlzLl9jb250cm9sPWEsdGhpcy5fY29udHJvbENoYW5nZXMubmV4dChhKX1hZGRBZGRpdGlv''@;'; put 'put ''bmFsQ29udHJvbChhKXt0aGlzLl9hZGRpdGlvbmFsQ29udHJvbHMucHVzaChhKSx0aGlzLl9hZGRpdGlvbmFsQ29udHJvbHNDaGFuZ2VzLm5leHQodGhpcy5fYWRkaXRpb25hbENvbnRyb2xzKX1zZXRIZWxwZXJzKGEpe3RoaXMuX2hlbHBlcnMubmV4dChhKX19cmV0dXJuIGMuXHUwMjc1ZmFj''@;'; put 'put ''PWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7dmFyIEFkPWZ1bmN0aW9uKGMpe3JldHVybiBjLk5PTkU9Ik5PTkUiLGMuVkFMSUQ9IlZBTElEIixjLklOVkFMSUQ9IklOVkFMSUQiLGN9KEFk''@;'; put 'put ''fHx7fSk7bGV0IGtkPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy50cmlnZ2VyU3RhdHVzQ2hhbmdlU3ViamVjdD1uZXcgV24sdGhpcy5zdGF0dXNDaGFuZ2VzPXRoaXMuZ2V0U3RhdHVzQ2hhbmdlcyhhKS5waXBlKEkwZSgxKSl9dHJpZ2dlclN0YXR1c0NoYW5nZSgpe3RoaXMu''@;'; put 'put ''dHJpZ2dlclN0YXR1c0NoYW5nZVN1YmplY3QubmV4dCgpfWdldFN0YXR1c0NoYW5nZXMoYSl7cmV0dXJuIHE4KFthLmNvbnRyb2xDaGFuZ2VzLGEuYWRkaXRpb25hbENvbnRyb2xzQ2hhbmdlcy5waXBlKHgyKFtdKSldKS5waXBlKFYxKChbZCxoXSk9PntpZihkKXtjb25zdCBmPVtkLC4uLmhd''@;'; put 'put ''O3JldHVybiBfeChxOChmLm1hcCh2PT52LnN0YXR1c0NoYW5nZXMpKSx0aGlzLnRyaWdnZXJTdGF0dXNDaGFuZ2VTdWJqZWN0LnBpcGUoTHIoKCk9PmYubWFwKHY9PnYuc3RhdHVzKSkpKX1yZXR1cm4gTTJ9KSxMcihkPT5kLmluY2x1ZGVzKEFkLklOVkFMSUQpP0FkLklOVkFMSUQ6ZC5pbmNs''@;'; put 'put ''dWRlcyhBZC5WQUxJRCk/QWQuVkFMSUQ6QWQuTk9ORSkseDIoQWQuTk9ORSkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh4cihmMSkpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpO2NsYXNzIHpM''@;'; put 'put ''e31mdW5jdGlvbiBaMWUoYyl7cmV0dXJuW2Mse3Byb3ZpZGU6ekwsdXNlRXhpc3Rpbmc6Y31dfWZ1bmN0aW9uIFcxZShjLGwsYSl7cmV0dXJuIFh0LmNyZWF0ZShkPT57bChkKTtjb25zdCBoPWMuc3Vic2NyaWJlKGQpO3JldHVybigpPT57aC51bnN1YnNjcmliZSgpLGEmJmEoZCl9fSl9bGV0''@;'; put 'put ''IFVMPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2KXt0aGlzLnJlbmRlcmVyPWEsdGhpcy5wYXJlbnQ9ZCx0aGlzLnRvZ2dsZVNlcnZpY2U9aCx0aGlzLmZvY3VzU2VydmljZT1mLHRoaXMucGxhdGZvcm1JZD12LHRoaXMuaWQ9TXUoKSx0aGlzLmZvY3VzQmFja09uVHJpZ2dl''@;'; put 'put ''cldoZW5DbG9zZWQ9ITEsdGhpcy5fdW5saXN0ZW5GdW5jcz1bXSx0aGlzLnJlc2V0Q2hpbGRyZW4oKSx0aGlzLm1vdmVUb0ZpcnN0SXRlbVdoZW5PcGVuKCksZHx8dGhpcy5oYW5kbGVSb290Rm9jdXMoKX1nZXQgdHJpZ2dlcigpe3JldHVybiB0aGlzLl90cmlnZ2VyfXNldCB0cmlnZ2VyKGEp''@;'; put 'put ''e3RoaXMuX3RyaWdnZXI9YSx0aGlzLnBhcmVudD90aGlzLl91bmxpc3RlbkZ1bmNzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4oYSwia2V5ZG93bi5hcnJvd3JpZ2h0IixkPT50aGlzLnRvZ2dsZVNlcnZpY2UudG9nZ2xlV2l0aEV2ZW50KGQpKSk6KHRoaXMuX3VubGlzdGVuRnVuY3MucHVz''@;'; put 'put ''aCh0aGlzLnJlbmRlcmVyLmxpc3RlbihhLCJrZXlkb3duLmFycm93dXAiLGQ9PnRoaXMudG9nZ2xlU2VydmljZS50b2dnbGVXaXRoRXZlbnQoZCkpKSx0aGlzLl91bmxpc3RlbkZ1bmNzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4oYSwia2V5ZG93bi5hcnJvd2Rvd24iLGQ9PnRoaXMudG9n''@;'; put 'put ''Z2xlU2VydmljZS50b2dnbGVXaXRoRXZlbnQoZCkpKSx0aGlzLmZvY3VzU2VydmljZS5saXN0ZW5Ub0Fycm93S2V5cyhhKSl9Z2V0IGNvbnRhaW5lcigpe3JldHVybiB0aGlzLl9jb250YWluZXJ9c2V0IGNvbnRhaW5lcihhKXt0aGlzLl9jb250YWluZXI9YSx0aGlzLl91bmxpc3RlbkZ1bmNz''@;'; put 'put ''LnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4oYSwia2V5ZG93bi50YWIiLGQ9PnRoaXMudG9nZ2xlU2VydmljZS50b2dnbGVXaXRoRXZlbnQoZCkpKSx0aGlzLnBhcmVudD90aGlzLl91bmxpc3RlbkZ1bmNzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4oYSwia2V5ZG93bi5lc2NhcGUiLGQ9''@;'; put 'put ''Pnt0aGlzLmZvY3VzU2VydmljZS5tb3ZlKHdoLkxFRlQpLGQuc3RvcFByb3BhZ2F0aW9uKCl9KSk6KHRoaXMuZm9jdXNTZXJ2aWNlLnJlZ2lzdGVyQ29udGFpbmVyKGEpLHRoaXMuX3VubGlzdGVuRnVuY3MucHVzaCh0aGlzLnJlbmRlcmVyLmxpc3RlbihhLCJrZXlkb3duLmVzY2FwZSIsZD0+''@;'; put 'put ''dGhpcy50b2dnbGVTZXJ2aWNlLnRvZ2dsZVdpdGhFdmVudChkKSkpLHRoaXMuX3VubGlzdGVuRnVuY3MucHVzaCh0aGlzLnJlbmRlcmVyLmxpc3RlbihhLCJibHVyIixkPT57dGhpcy5jaGlsZHJlbi5waXBlKFlmKDEpKS5zdWJzY3JpYmUoZj0+Zi5mb3JFYWNoKHY9PnYuYmx1cigpKSk7Y29u''@;'; put 'put ''c3QgaD1kLnJlbGF0ZWRUYXJnZXR8fGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7aCYmdGwodGhpcy5wbGF0Zm9ybUlkKSYmKGEuY29udGFpbnMoaCl8fGg9PT10aGlzLnRyaWdnZXIpfHwodGhpcy5mb2N1c0JhY2tPblRyaWdnZXJXaGVuQ2xvc2VkPSExLHRoaXMudG9nZ2xlU2VydmljZS5vcGVu''@;'; put 'put ''PSExKX0pKSl9bmdPbkRlc3Ryb3koKXt0aGlzLl91bmxpc3RlbkZ1bmNzLmZvckVhY2goYT0+YSgpKSx0aGlzLmZvY3VzU2VydmljZS5kZXRhY2hMaXN0ZW5lcnMoKX1tb3ZlVG9GaXJzdEl0ZW1XaGVuT3Blbigpe2NvbnN0IGE9dGhpcy50b2dnbGVTZXJ2aWNlLm9wZW5DaGFuZ2Uuc3Vic2Ny''@;'; put 'put ''aWJlKGQ9PntkJiZ0aGlzLnRvZ2dsZVNlcnZpY2Uub3JpZ2luYWxFdmVudCYmc2V0VGltZW91dCgoKT0+e3RoaXMuZm9jdXNTZXJ2aWNlLm1vdmVUbyh0aGlzKSx0aGlzLmZvY3VzU2VydmljZS5tb3ZlKHRoaXMucGFyZW50P3doLlJJR0hUOndoLkRPV04pfSl9KTt0aGlzLl91bmxpc3RlbkZ1''@;'; put 'put ''bmNzLnB1c2goKCk9PmEudW5zdWJzY3JpYmUoKSl9aGFuZGxlUm9vdEZvY3VzKCl7Y29uc3QgYT10aGlzLnRvZ2dsZVNlcnZpY2Uub3BlbkNoYW5nZS5zdWJzY3JpYmUoZD0+e2R8fCh0aGlzLmZvY3VzU2VydmljZS5yZXNldCh0aGlzKSx0aGlzLmZvY3VzQmFja09uVHJpZ2dlcldoZW5DbG9z''@;'; put 'put ''ZWQmJnRoaXMuZm9jdXMoKSksdGhpcy5mb2N1c0JhY2tPblRyaWdnZXJXaGVuQ2xvc2VkPWR9KTt0aGlzLl91bmxpc3RlbkZ1bmNzLnB1c2goKCk9PmEudW5zdWJzY3JpYmUoKSl9Zm9jdXMoKXt0aGlzLnRyaWdnZXImJnRsKHRoaXMucGxhdGZvcm1JZCkmJnRoaXMudHJpZ2dlci5mb2N1cygp''@;'; put 'put ''fWJsdXIoKXt0aGlzLnRyaWdnZXImJnRsKHRoaXMucGxhdGZvcm1JZCkmJnRoaXMudHJpZ2dlci5ibHVyKCl9YWN0aXZhdGUoKXt0bCh0aGlzLnBsYXRmb3JtSWQpJiZ0aGlzLnRyaWdnZXIuY2xpY2soKX1yZXNldENoaWxkcmVuKCl7dGhpcy5jaGlsZHJlbj1uZXcgeXgoMSksdGhpcy5wYXJl''@;'; put 'put ''bnQ/dGhpcy5yaWdodD10aGlzLm9wZW5BbmRHZXRDaGlsZHJlbigpLnBpcGUoTHIoYT0+YVswXSkpOih0aGlzLmRvd249dGhpcy5vcGVuQW5kR2V0Q2hpbGRyZW4oKS5waXBlKExyKGE9PmFbMF0pKSx0aGlzLnVwPXRoaXMub3BlbkFuZEdldENoaWxkcmVuKCkucGlwZShMcihhPT5hW2EubGVu''@;'; put 'put ''Z3RoLTFdKSkpfWFkZENoaWxkcmVuKGEpe09ZLmxpbmtWZXJ0aWNhbChhKSx0aGlzLnBhcmVudCYmT1kubGlua1BhcmVudChhLHRoaXMuY2xvc2VBbmRHZXRUaGlzKCksd2guTEVGVCksdGhpcy5jaGlsZHJlbi5uZXh0KGEpfW9wZW5BbmRHZXRDaGlsZHJlbigpe3JldHVybiBXMWUodGhpcy5j''@;'; put 'put ''aGlsZHJlbiwoKT0+dGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49ITApfWNsb3NlQW5kR2V0VGhpcygpe3JldHVybiBXMWUoZm8odGhpcyksKCk9PnRoaXMudG9nZ2xlU2VydmljZS5vcGVuPSExKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoeHIoRW8p''@;'; put 'put ''LHhyKGMsMTIpLHhyKHNjKSx4cih3cCkseHIoaW8pKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKTtjb25zdCBmVWU9WjFlKFVMKTtsZXQgang9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2NoYW5nZXM9bmV3IFdufWdldCBj''@;'; put 'put ''aGFuZ2VzKCl7cmV0dXJuIHRoaXMuX2NoYW5nZXMuYXNPYnNlcnZhYmxlKCl9Y2xvc2VNZW51cygpe3RoaXMuX2NoYW5nZXMubmV4dCghMSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpj''@;'; put 'put ''Llx1MDI3NWZhY30pLGN9KSgpO2NvbnN0IGdVZT17cHJvdmlkZTpqeCx1c2VGYWN0b3J5OmZ1bmN0aW9uIHBVZShjKXtyZXR1cm4gY3x8bmV3IGp4fSxkZXBzOltbbmV3IEkxLG5ldyBsZCxqeF1dfTtsZXQgc2c9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYpe3RoaXMucGFy''@;'; put 'put ''ZW50PWEsdGhpcy50b2dnbGVTZXJ2aWNlPWQsdGhpcy5mb2N1c0hhbmRsZXI9aCx0aGlzLmlzTWVudUNsb3NhYmxlPSEwLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh2LmNoYW5nZXMuc3Vic2NyaWJlKE09PmQub3Blbj1NKSksdGhpcy5zdWJzY3JpcHRp''@;'; put 'put ''b25zLnB1c2goZC5vcGVuQ2hhbmdlLnN1YnNjcmliZSgoKT0+Zi5tYXJrRm9yQ2hlY2soKSkpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyko''@;'; put 'put ''R2UoYywxMiksR2Uoc2MpLEdlKFVMKSxHZShFcyksR2UoangpKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRyb3Bkb3duIl1dLGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZUcigiZHJvcGRvd24iLCEwKSgib3BlbiIsZC50b2dn''@;'; put 'put ''bGVTZXJ2aWNlLm9wZW4pfSxpbnB1dHM6e2lzTWVudUNsb3NhYmxlOltObi5Ob25lLCJjbHJDbG9zZU1lbnVPbkl0ZW1DbGljayIsImlzTWVudUNsb3NhYmxlIl19LGZlYXR1cmVzOltkYShbZ1VlLFYxZSxmVWVdKSx2ZChbb2ddKV0sbmdDb250ZW50U2VsZWN0b3JzOnlvLGRlY2xzOjEsdmFy''@;'; put 'put ''czowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoKSxZcigwKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpO3ZhciBBaT1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLlJJR0hUX0NFTlRFUj0wXT0iUklHSFRfQ0VOVEVSIixjW2MuUklHSFRfVE9QPTFdPSJSSUdIVF9UT1AiLGNbYy5S''@;'; put 'put ''SUdIVF9CT1RUT009Ml09IlJJR0hUX0JPVFRPTSIsY1tjLlRPUF9DRU5URVI9M109IlRPUF9DRU5URVIiLGNbYy5UT1BfUklHSFQ9NF09IlRPUF9SSUdIVCIsY1tjLlRPUF9MRUZUPTVdPSJUT1BfTEVGVCIsY1tjLkJPVFRPTV9DRU5URVI9Nl09IkJPVFRPTV9DRU5URVIiLGNbYy5CT1RUT01f''@;'; put 'put ''UklHSFQ9N109IkJPVFRPTV9SSUdIVCIsY1tjLkJPVFRPTV9MRUZUPThdPSJCT1RUT01fTEVGVCIsY1tjLkxFRlRfQ0VOVEVSPTldPSJMRUZUX0NFTlRFUiIsY1tjLkxFRlRfVE9QPTEwXT0iTEVGVF9UT1AiLGNbYy5MRUZUX0JPVFRPTT0xMV09IkxFRlRfQk9UVE9NIixjfShBaXx8e30pO2Ns''@;'; put 'put ''YXNzIGJVZXtjb25zdHJ1Y3RvcihsKXt0aGlzLmVsZW1lbnQ9bCx0aGlzLmJvdW5kT25TY3JvbGxMaXN0ZW5lcj10aGlzLmVtaXRTY3JvbGxFdmVudC5iaW5kKHRoaXMpLHRoaXMuc2Nyb2xsYWJsZUVsZW1lbnRzPVtdLGwuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixsLnN0eWxlLnRvcD0w''@;'; put 'put ''LGwuc3R5bGUuYm90dG9tPSJhdXRvIixsLnN0eWxlLmxlZnQ9MCxsLnN0eWxlLnJpZ2h0PSJhdXRvIn1hbmNob3IobCxhLGQse29mZnNldFg6aD0wLG9mZnNldFk6Zj0wLHVzZUFuY2hvclBhcmVudDp2PSExfT17fSl7dGhpcy5hZGRTY3JvbGxFdmVudExpc3RlbmVycyhsKSx2JiYobD1sLnBh''@;'; put 'put ''cmVudE5vZGUpLGwuc3R5bGUucG9zaXRpb249InN0YXRpYyI7Y29uc3QgTT1sLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLEQ9dGhpcy5lbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2xldCBaPU0ubGVmdC1ELmxlZnQraCxyZT1NLnRvcC1ELnRvcCtmO3N3aXRjaChhKXtjYXNlIEFp''@;'; put 'put ''LkxFRlRfVE9QOmNhc2UgQWkuVE9QX0xFRlQ6YnJlYWs7Y2FzZSBBaS5UT1BfQ0VOVEVSOlorPU0ud2lkdGgvMjticmVhaztjYXNlIEFpLlRPUF9SSUdIVDpjYXNlIEFpLlJJR0hUX1RPUDpaKz1NLndpZHRoO2JyZWFrO2Nhc2UgQWkuTEVGVF9CT1RUT006Y2FzZSBBaS5CT1RUT01fTEVGVDpy''@;'; put 'put ''ZSs9TS5oZWlnaHQ7YnJlYWs7Y2FzZSBBaS5CT1RUT01fQ0VOVEVSOnJlKz1NLmhlaWdodCxaKz1NLndpZHRoLzI7YnJlYWs7Y2FzZSBBaS5CT1RUT01fUklHSFQ6Y2FzZSBBaS5SSUdIVF9CT1RUT006cmUrPU0uaGVpZ2h0LForPU0ud2lkdGg7YnJlYWs7Y2FzZSBBaS5MRUZUX0NFTlRFUjpy''@;'; put 'put ''ZSs9TS5oZWlnaHQvMjticmVhaztjYXNlIEFpLlJJR0hUX0NFTlRFUjpyZSs9TS5oZWlnaHQvMixaKz1NLndpZHRofXN3aXRjaChkKXtjYXNlIEFpLkxFRlRfVE9QOmNhc2UgQWkuVE9QX0xFRlQ6YnJlYWs7Y2FzZSBBaS5UT1BfQ0VOVEVSOlotPUQud2lkdGgvMjticmVhaztjYXNlIEFpLlRP''@;'; put 'put ''UF9SSUdIVDpjYXNlIEFpLlJJR0hUX1RPUDpaLT1ELndpZHRoO2JyZWFrO2Nhc2UgQWkuTEVGVF9CT1RUT006Y2FzZSBBaS5CT1RUT01fTEVGVDpyZS09RC5oZWlnaHQ7YnJlYWs7Y2FzZSBBaS5CT1RUT01fQ0VOVEVSOnJlLT1ELmhlaWdodCxaLT1ELndpZHRoLzI7YnJlYWs7Y2FzZSBBaS5C''@;'; put 'put ''T1RUT01fUklHSFQ6Y2FzZSBBaS5SSUdIVF9CT1RUT006cmUtPUQuaGVpZ2h0LFotPUQud2lkdGg7YnJlYWs7Y2FzZSBBaS5MRUZUX0NFTlRFUjpyZS09RC5oZWlnaHQvMjticmVhaztjYXNlIEFpLlJJR0hUX0NFTlRFUjpyZS09RC5oZWlnaHQvMixaLT1ELndpZHRofWNvbnN0IGNlPWdldENv''@;'; put 'put ''bXB1dGVkU3R5bGUodGhpcy5lbGVtZW50KSxiZT1wYXJzZUludChjZS5tYXJnaW5MZWZ0LDEwKSxFZT1wYXJzZUludChjZS5tYXJnaW5SaWdodCwxMCksQmU9cGFyc2VJbnQoY2UubWFyZ2luVG9wLDEwKSxxZT1wYXJzZUludChjZS5tYXJnaW5Cb3R0b20sMTApO3N3aXRjaChhKXtjYXNlIEFp''@;'; put 'put ''LkxFRlRfVE9QOmNhc2UgQWkuVE9QX0xFRlQ6Y2FzZSBBaS5UT1BfUklHSFQ6Y2FzZSBBaS5SSUdIVF9UT1A6KGQ9PT1BaS5CT1RUT01fUklHSFR8fGQ9PT1BaS5SSUdIVF9CT1RUT00pJiYocmUtPXFlLFotPUVlKSwoZD09PUFpLkJPVFRPTV9MRUZUfHxkPT09QWkuTEVGVF9CT1RUT00pJiYo''@;'; put 'put ''cmUtPUJlLForPWJlKSwoZD09PUFpLlRPUF9MRUZUfHxkPT09QWkuTEVGVF9UT1ApJiYocmUrPUJlLForPWJlKSwoZD09PUFpLlRPUF9SSUdIVHx8ZD09PUFpLlJJR0hUX1RPUCkmJihyZSs9QmUsWi09RWUpO2JyZWFrO2Nhc2UgQWkuTEVGVF9CT1RUT006Y2FzZSBBaS5CT1RUT01fTEVGVDpj''@;'; put 'put ''YXNlIEFpLkJPVFRPTV9SSUdIVDpjYXNlIEFpLlJJR0hUX0JPVFRPTTooZD09PUFpLkJPVFRPTV9MRUZUfHxkPT09QWkuTEVGVF9CT1RUT00pJiYocmUtPXFlLForPWJlKSwoZD09PUFpLkJPVFRPTV9SSUdIVHx8ZD09PUFpLlJJR0hUX0JPVFRPTSkmJihyZS09cWUsWi09RWUpLChkPT09QWku''@;'; put 'put ''VE9QX0xFRlR8fGQ9PT1BaS5MRUZUX1RPUCkmJihyZSs9QmUsWis9YmUpLChkPT09QWkuVE9QX1JJR0hUfHxkPT09QWkuUklHSFRfVE9QKSYmKHJlKz1CZSxaLT1FZSk7YnJlYWs7Y2FzZSBBaS5UT1BfQ0VOVEVSOnJlLT1xZSxaKz1iZSxaLT1FZTticmVhaztjYXNlIEFpLkJPVFRPTV9DRU5U''@;'; put 'put ''RVI6cmUrPUJlLForPWJlLFotPUVlO2JyZWFrO2Nhc2UgQWkuTEVGVF9DRU5URVI6cmUrPUJlLHJlLT1xZSxaLT1FZTticmVhaztjYXNlIEFpLlJJR0hUX0NFTlRFUjpyZSs9QmUscmUtPXFlLForPWJlfXJldHVybiB0aGlzLmVsZW1lbnQuc3R5bGUudHJhbnNmb3JtPWB0cmFuc2xhdGVYKCR7''@;'; put 'put ''TWF0aC5yb3VuZChaKX1weCkgdHJhbnNsYXRlWSgke01hdGgucm91bmQocmUpfXB4KWAsdGhpcy5fc2Nyb2xsLmFzT2JzZXJ2YWJsZSgpfXJlbGVhc2UoKXt0aGlzLmVsZW1lbnQuc3R5bGUudHJhbnNmb3JtPSIiLHRoaXMucmVtb3ZlU2Nyb2xsRXZlbnRMaXN0ZW5lcnMoKX1pc1Bvc2l0aW9u''@;'; put 'put ''ZWQobCl7Y29uc3QgYT1nZXRDb21wdXRlZFN0eWxlKGwpLnBvc2l0aW9uO3JldHVybiJyZWxhdGl2ZSI9PT1hfHwiYWJzb2x1dGUiPT09YXx8ImZpeGVkIj09PWF9ZW1pdFNjcm9sbEV2ZW50KCl7dGhpcy5fc2Nyb2xsLm5leHQoKX1hZGRTY3JvbGxFdmVudExpc3RlbmVycyhsKXt0aGlzLl9z''@;'; put 'put ''Y3JvbGw9bmV3IFduO2NvbnN0IGE9bDtsZXQgZD1sO2Zvcig7ZCYmZCE9PWRvY3VtZW50JiYodGhpcy5zY3JvbGxzKGQpJiYoZC5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGwiLHRoaXMuYm91bmRPblNjcm9sbExpc3RlbmVyKSx0aGlzLnNjcm9sbGFibGVFbGVtZW50cy5wdXNoKGQpKSxkPT09''@;'; put 'put ''YXx8IXRoaXMuaXNQb3NpdGlvbmVkKGQpKTspZD1kLnBhcmVudE5vZGV9cmVtb3ZlU2Nyb2xsRXZlbnRMaXN0ZW5lcnMoKXtmb3IoY29uc3QgbCBvZiB0aGlzLnNjcm9sbGFibGVFbGVtZW50cylsLnJlbW92ZUV2ZW50TGlzdGVuZXIoInNjcm9sbCIsdGhpcy5ib3VuZE9uU2Nyb2xsTGlzdGVu''@;'; put 'put ''ZXIpO3RoaXMuc2Nyb2xsYWJsZUVsZW1lbnRzLmxlbmd0aD0wLHRoaXMuX3Njcm9sbCYmKHRoaXMuX3Njcm9sbC5jb21wbGV0ZSgpLGRlbGV0ZSB0aGlzLl9zY3JvbGwpfXNjcm9sbHMobCl7Y29uc3QgYT1nZXRDb21wdXRlZFN0eWxlKGwpO3JldHVybiJzY3JvbGwiPT09YS5vdmVyZmxvd1h8''@;'; put 'put ''fCJhdXRvIj09PWEub3ZlcmZsb3dYfHwic2Nyb2xsIj09PWEub3ZlcmZsb3dZfHwiYXV0byI9PT1hLm92ZXJmbG93WX19Y29uc3QgSzFlPSJpcy1vZmYtc2NyZWVuIjtsZXQgSFk9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMucGFyZW50SG9zdD1kLHRoaXMuY2xvc2VPbk91''@;'; put 'put ''dHNpZGVDbGljaz0hMSx0aGlzLnBvcG92ZXJPcHRpb25zPXt9LHRoaXMudXBkYXRlQW5jaG9yPSExLHRoaXMuZG9jdW1lbnRFU0NMaXN0ZW5lcj1udWxsLHRoaXMuY2xvc2VPbk91dHNpZGVDbGlja0NhbGxiYWNrPWg9Pnt0aGlzLmFuY2hvckVsZW0uY29udGFpbnMoaC50YXJnZXQpfHwodGhp''@;'; put 'put ''cy50b2dnbGVTZXJ2aWNlLm9wZW49ITEpfSx0aGlzLmVsPWEuZ2V0KEppKSx0aGlzLnRvZ2dsZVNlcnZpY2U9YS5nZXQoc2MpLHRoaXMucmVuZGVyZXI9YS5nZXQoRW8pLHRoaXMubmdab25lPWEuZ2V0KFdhKSx0aGlzLnJlZj1hLmdldChFcyksdGhpcy5hbmNob3JFbGVtPWQubmF0aXZlRWxl''@;'; put 'put ''bWVudCx0aGlzLnBvcG92ZXJJbnN0YW5jZT1uZXcgYlVlKHRoaXMuZWwubmF0aXZlRWxlbWVudCksdGhpcy5zdWJzY3JpcHRpb249dGhpcy50b2dnbGVTZXJ2aWNlLm9wZW5DaGFuZ2UucGlwZSh4Mih0aGlzLnRvZ2dsZVNlcnZpY2Uub3BlbikpLnN1YnNjcmliZShoPT57aD8odGhpcy5hbmNo''@;'; put 'put ''b3IoKSx0aGlzLmF0dGFjaEVTQ0xpc3RlbmVyKCksdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsSzFlKSk6KHRoaXMucmVsZWFzZSgpLHRoaXMuZGV0YWNoRVNDTGlzdGVuZXIoKSx0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWwubmF0aXZlRWxl''@;'; put 'put ''bWVudCxLMWUpKX0pLHRoaXMudG9nZ2xlU2VydmljZS5vcGVuJiYodGhpcy5hbmNob3IoKSx0aGlzLmF0dGFjaEVTQ0xpc3RlbmVyKCkpfW5nQWZ0ZXJWaWV3Q2hlY2tlZCgpe3RoaXMudXBkYXRlQW5jaG9yJiYodGhpcy51cGRhdGVBbmNob3I9ITEsdGhpcy5wb3BvdmVySW5zdGFuY2UuYW5j''@;'; put 'put ''aG9yKHRoaXMuYW5jaG9yRWxlbSx0aGlzLmFuY2hvclBvaW50LHRoaXMucG9wb3ZlclBvaW50LHRoaXMucG9wb3Zlck9wdGlvbnMpLnN1YnNjcmliZSgoKT0+e3RoaXMudG9nZ2xlU2VydmljZS5vcGVuPSExfSksdGhpcy5hdHRhY2hPdXRzaWRlQ2xpY2tMaXN0ZW5lcigpKX1uZ09uRGVzdHJv''@;'; put 'put ''eSgpe3RoaXMucmVsZWFzZSgpLHRoaXMuZGV0YWNoRVNDTGlzdGVuZXIoKSx0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfWFuY2hvcigpe3RoaXMudXBkYXRlQW5jaG9yPSEwfXJlbGVhc2UoKXt0aGlzLmRldGFjaE91dHNpZGVDbGlja0xpc3RlbmVyKCksdGhpcy5wb3BvdmVySW5z''@;'; put 'put ''dGFuY2UucmVsZWFzZSgpfWF0dGFjaEVTQ0xpc3RlbmVyKCl7dGhpcy5wb3BvdmVyT3B0aW9ucy5pZ25vcmVHbG9iYWxFU0NMaXN0ZW5lcnx8dGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLmRvY3VtZW50RVNDTGlzdGVuZXI9dGhpcy5yZW5kZXJlci5saXN0ZW4oImRv''@;'; put 'put ''Y3VtZW50Iiwia2V5ZG93biIsYT0+e2EmJmEua2V5JiZJMihhLmtleSk9PT1nYS5Fc2NhcGUmJnRoaXMubmdab25lLnJ1bigoKT0+e3RoaXMudG9nZ2xlU2VydmljZS5vcGVuPSExLHRoaXMucmVmLm1hcmtGb3JDaGVjaygpfSl9KX0pfWRldGFjaEVTQ0xpc3RlbmVyKCl7dGhpcy5kb2N1bWVu''@;'; put 'put ''dEVTQ0xpc3RlbmVyJiYodGhpcy5kb2N1bWVudEVTQ0xpc3RlbmVyKCksdGhpcy5kb2N1bWVudEVTQ0xpc3RlbmVyPW51bGwpfWF0dGFjaE91dHNpZGVDbGlja0xpc3RlbmVyKCl7dGhpcy5jbG9zZU9uT3V0c2lkZUNsaWNrJiZ0aGlzLnRvZ2dsZVNlcnZpY2Uub3BlbiYmZG9jdW1lbnQmJmRv''@;'; put 'put ''Y3VtZW50LmFkZEV2ZW50TGlzdGVuZXImJmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIix0aGlzLmNsb3NlT25PdXRzaWRlQ2xpY2tDYWxsYmFjaywhMCl9ZGV0YWNoT3V0c2lkZUNsaWNrTGlzdGVuZXIoKXt0aGlzLmNsb3NlT25PdXRzaWRlQ2xpY2smJmRvY3VtZW50JiZkb2N1''@;'; put 'put ''bWVudC5yZW1vdmVFdmVudExpc3RlbmVyJiZkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy5jbG9zZU9uT3V0c2lkZUNsaWNrQ2FsbGJhY2ssITApfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShEcyksR2UoSmksNCkp''@;'; put 'put ''fSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjfSksY30pKCksZzc9KCgpPT57Y2xhc3MgYyBleHRlbmRzIEhZe2NvbnN0cnVjdG9yKGEsZCxoLGYpe2lmKCFkKXRocm93IG5ldyBFcnJvcigiY2xyLWRyb3Bkb3duLW1lbnUgc2hvdWxkIG9ubHkgYmUgdXNlZCBpbnNpZGUgb2YgYSBjbHItZHJvcGRv''@;'; put 'put ''d24iKTtzdXBlcihhLGQpLGg/KHRoaXMuYW5jaG9yUG9pbnQ9QWkuUklHSFRfVE9QLHRoaXMucG9wb3ZlclBvaW50PUFpLkxFRlRfVE9QKToodGhpcy5hbmNob3JQb2ludD1BaS5CT1RUT01fTEVGVCx0aGlzLnBvcG92ZXJQb2ludD1BaS5MRUZUX1RPUCksdGhpcy5wb3BvdmVyT3B0aW9ucy5h''@;'; put 'put ''bGxvd011bHRpcGxlT3Blbj0hMCx0aGlzLnBvcG92ZXJPcHRpb25zLmlnbm9yZUdsb2JhbEVTQ0xpc3RlbmVyPSEwLHRoaXMuY2xvc2VPbk91dHNpZGVDbGljaz0hMCx0aGlzLmZvY3VzSGFuZGxlcj1mfXNldCBwb3NpdGlvbihhKXtzd2l0Y2goYSl7Y2FzZSJ0b3AtcmlnaHQiOnRoaXMuYW5j''@;'; put 'put ''aG9yUG9pbnQ9QWkuVE9QX1JJR0hULHRoaXMucG9wb3ZlclBvaW50PUFpLlJJR0hUX0JPVFRPTTticmVhaztjYXNlInRvcC1sZWZ0Ijp0aGlzLmFuY2hvclBvaW50PUFpLlRPUF9MRUZULHRoaXMucG9wb3ZlclBvaW50PUFpLkxFRlRfQk9UVE9NO2JyZWFrO2Nhc2UiYm90dG9tLXJpZ2h0Ijp0''@;'; put 'put ''aGlzLmFuY2hvclBvaW50PUFpLkJPVFRPTV9SSUdIVCx0aGlzLnBvcG92ZXJQb2ludD1BaS5SSUdIVF9UT1A7YnJlYWs7Y2FzZSJib3R0b20tbGVmdCI6ZGVmYXVsdDp0aGlzLmFuY2hvclBvaW50PUFpLkJPVFRPTV9MRUZULHRoaXMucG9wb3ZlclBvaW50PUFpLkxFRlRfVE9QO2JyZWFrO2Nh''@;'; put 'put ''c2UicmlnaHQtdG9wIjp0aGlzLmFuY2hvclBvaW50PUFpLlJJR0hUX1RPUCx0aGlzLnBvcG92ZXJQb2ludD1BaS5MRUZUX1RPUDticmVhaztjYXNlInJpZ2h0LWJvdHRvbSI6dGhpcy5hbmNob3JQb2ludD1BaS5SSUdIVF9CT1RUT00sdGhpcy5wb3BvdmVyUG9pbnQ9QWkuTEVGVF9CT1RUT007''@;'; put 'put ''YnJlYWs7Y2FzZSJsZWZ0LXRvcCI6dGhpcy5hbmNob3JQb2ludD1BaS5MRUZUX1RPUCx0aGlzLnBvcG92ZXJQb2ludD1BaS5SSUdIVF9UT1A7YnJlYWs7Y2FzZSJsZWZ0LWJvdHRvbSI6dGhpcy5hbmNob3JQb2ludD1BaS5MRUZUX0JPVFRPTSx0aGlzLnBvcG92ZXJQb2ludD1BaS5SSUdIVF9C''@;'; put 'put ''T1RUT019fW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuZm9jdXNIYW5kbGVyLmNvbnRhaW5lcj10aGlzLmVsLm5hdGl2ZUVsZW1lbnQsdGhpcy5pdGVtcy5jaGFuZ2VzLnN1YnNjcmliZSgoKT0+dGhpcy5mb2N1c0hhbmRsZXIuYWRkQ2hpbGRyZW4odGhpcy5pdGVtcy50b0FycmF5KCkpKSx0''@;'; put 'put ''aGlzLml0ZW1zLm5vdGlmeU9uQ2hhbmdlcygpfW5nT25EZXN0cm95KCl7c3VwZXIubmdPbkRlc3Ryb3koKSx0aGlzLmZvY3VzSGFuZGxlci5yZXNldENoaWxkcmVuKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKERzKSxHZShOTCw4KSxHZShj''@;'; put 'put ''LDEyKSxHZShVTCkpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZHJvcGRvd24tbWVudSJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZhbyhoLHpMLDQpLDImYSl7bGV0IGY7Q2koZj1TaSgpKSYmKGQuaXRlbXM9Zil9fSxob3N0VmFy''@;'; put 'put ''czozLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmKGhyKCJyb2xlIiwibWVudSIpLFRyKCJkcm9wZG93bi1tZW51IiwhMCkpfSxpbnB1dHM6e3Bvc2l0aW9uOltObi5Ob25lLCJjbHJQb3NpdGlvbiIsInBvc2l0aW9uIl19LGZlYXR1cmVzOlt3YV0sbmdDb250ZW50U2VsZWN0b3Jz''@;'; put 'put ''OnlvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoKSxZcigwKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLG03PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy50b2dnbGVTZXJ2aWNlPWQsdGhpcy5pc1Jvb3RMZXZlbFRvZ2ds''@;'; put 'put ''ZT0hMCxhLnBhcmVudCYmKHRoaXMuaXNSb290TGV2ZWxUb2dnbGU9ITEpLGYudHJpZ2dlcj1oLm5hdGl2ZUVsZW1lbnR9Z2V0IGFjdGl2ZSgpe3JldHVybiB0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbn1vbkRyb3Bkb3duVHJpZ2dlckNsaWNrKGEpe3RoaXMudG9nZ2xlU2VydmljZS50b2dnbGVX''@;'; put 'put ''aXRoRXZlbnQoYSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKHNnKSxHZShzYyksR2UoSmkpLEdlKFVMKSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsckRyb3Bkb3duVHJpZ2dlciIsIiJdLFsiIiwiY2xyRHJv''@;'; put 'put ''cGRvd25Ub2dnbGUiLCIiXV0saG9zdFZhcnM6MTAsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZhJiZGdCgiY2xpY2siLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9uRHJvcGRvd25UcmlnZ2VyQ2xpY2soZil9KSwyJmEmJihocigiYXJpYS1oYXNwb3B1cCIsIm1lbnUiKSgiYXJpYS1leHBh''@;'; put 'put ''bmRlZCIsZC5hY3RpdmUpLFRyKCJkcm9wZG93bi10b2dnbGUiLGQuaXNSb290TGV2ZWxUb2dnbGUpKCJkcm9wZG93bi1pdGVtIiwhZC5pc1Jvb3RMZXZlbFRvZ2dsZSkoImV4cGFuZGFibGUiLCFkLmlzUm9vdExldmVsVG9nZ2xlKSgiYWN0aXZlIixkLmFjdGl2ZSkpfX0pLGN9KSgpO2NvbnN0''@;'; put 'put ''IHlVZT1be3Byb3ZpZGU6ekwsdXNlQ2xhc3M6KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5lbD1hLHRoaXMucmVuZGVyZXI9ZCx0aGlzLnBsYXRmb3JtSWQ9aCx0aGlzLmlkPU11KCksdGhpcy5kaXNhYmxlZD0hMSxkLnNldEF0dHJpYnV0ZShhLm5hdGl2ZUVsZW1lbnQs''@;'; put 'put ''ImlkIix0aGlzLmlkKSxkLnNldEF0dHJpYnV0ZShhLm5hdGl2ZUVsZW1lbnQsInRhYmluZGV4IiwiLTEiKX1mb2N1cygpe3RsKHRoaXMucGxhdGZvcm1JZCkmJih0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsInRhYmluZGV4IiwiMCIpLHRoaXMuZWwu''@;'; put 'put ''bmF0aXZlRWxlbWVudC5mb2N1cygpLHRoaXMuZWwubmF0aXZlRWxlbWVudC5zY3JvbGxJbnRvVmlldyh7YmVoYXZpb3I6InNtb290aCIsYmxvY2s6Im5lYXJlc3QiLGlubGluZToibmVhcmVzdCJ9KSl9Ymx1cigpe3RsKHRoaXMucGxhdGZvcm1JZCkmJih0aGlzLnJlbmRlcmVyLnNldEF0dHJp''@;'; put 'put ''YnV0ZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsInRhYmluZGV4IiwiLTEiKSx0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuYmx1cigpKX1hY3RpdmF0ZSgpe3RsKHRoaXMucGxhdGZvcm1JZCkmJnRoaXMuZWwubmF0aXZlRWxlbWVudC5jbGljaygpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24o''@;'; put 'put ''YSl7cmV0dXJuIG5ldyhhfHxjKSh4cihKaSkseHIoRW8pLHhyKGlvKSl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCl9XTtsZXQgVnk9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5kcm9wZG93bj1hLHRoaXMuX2Ryb3Bk''@;'; put 'put ''b3duU2VydmljZT1kLHRoaXMuZm9jdXNhYmxlSXRlbT1ofWdldCBkaXNhYmxlZCgpe3JldHVybiB0aGlzLmZvY3VzYWJsZUl0ZW0uZGlzYWJsZWR9c2V0IGRpc2FibGVkKGEpe3RoaXMuZm9jdXNhYmxlSXRlbS5kaXNhYmxlZD0hIWF8fCIiPT09YX1nZXQgZHJvcGRvd25JdGVtSWQoKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5mb2N1c2FibGVJdGVtLmlkfXNldCBkcm9wZG93bkl0ZW1JZChhKXt0aGlzLmZvY3VzYWJsZUl0ZW0uaWQ9YX1vbkRyb3Bkb3duSXRlbUNsaWNrKCl7aWYodGhpcy5kcm9wZG93bi5pc01lbnVDbG9zYWJsZSYmIXRoaXMuZGlzYWJsZWQmJnRoaXMuZHJvcGRvd24udG9nZ2xlU2Vy''@;'; put 'put ''dmljZS5vcGVuKXtjb25zdCBhPXRoaXMuZmluZFJvb3REcm9wZG93bigpO2EuZm9jdXNIYW5kbGVyLmZvY3VzKCksYS5mb2N1c0hhbmRsZXIuZm9jdXNCYWNrT25UcmlnZ2VyV2hlbkNsb3NlZD0hMX1zZXRUaW1lb3V0KCgpPT57dGhpcy5kcm9wZG93bi5pc01lbnVDbG9zYWJsZSYmIXRoaXMu''@;'; put 'put ''ZGlzYWJsZWQmJnRoaXMuX2Ryb3Bkb3duU2VydmljZS5jbG9zZU1lbnVzKCl9KX1vblNwYWNlS2V5ZG93bihhKXt0aGlzLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbklmRGlzYWJsZWQoYSl9b25FbnRlcktleWRvd24oYSl7dGhpcy5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb25JZkRpc2FibGVk''@;'; put 'put ''KGEpfXN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbklmRGlzYWJsZWQoYSl7dGhpcy5kaXNhYmxlZCYmKGEucHJldmVudERlZmF1bHQoKSxhLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpKX1maW5kUm9vdERyb3Bkb3duKCl7bGV0IGE9dGhpcy5kcm9wZG93bjtmb3IoO2EucGFyZW50OylhPWEu''@;'; put 'put ''cGFyZW50O3JldHVybiBhfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShzZyksR2UoangpLEdlKHpMKSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsckRyb3Bkb3duSXRlbSIsIiJdXSxob3N0VmFyczo3LGhvc3RC''@;'; put 'put ''aW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLm9uRHJvcGRvd25JdGVtQ2xpY2soKX0pKCJrZXlkb3duLnNwYWNlIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vblNwYWNlS2V5ZG93bihmKX0pKCJrZXlkb3duLmVudGVyIixmdW5jdGlvbihm''@;'; put 'put ''KXtyZXR1cm4gZC5vbkVudGVyS2V5ZG93bihmKX0pLDImYSYmKGhyKCJyb2xlIiwibWVudWl0ZW0iKSgiYXJpYS1kaXNhYmxlZCIsZC5kaXNhYmxlZCkoImlkIixkLmRyb3Bkb3duSXRlbUlkKSxUcigiZGlzYWJsZWQiLGQuZGlzYWJsZWQpKCJkcm9wZG93bi1pdGVtIiwhMCkpfSxpbnB1dHM6''@;'; put 'put ''e2Rpc2FibGVkOltObi5Ob25lLCJjbHJEaXNhYmxlZCIsImRpc2FibGVkIl0sZHJvcGRvd25JdGVtSWQ6W05uLk5vbmUsImlkIiwiZHJvcGRvd25JdGVtSWQiXX0sZmVhdHVyZXM6W2RhKFt5VWVdKV19KSxjfSkoKSxOWT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rp''@;'; put 'put ''b24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltSYSxPMixBc119KSxjfSkoKSxWWT0oKCk9PntjbGFzcyBje3NldCB0cmlnZ2VyRWwoYSl7dGhpcy5fdHJpZ2dlckVsPWF9Zm9jdXNUcmlnZ2VyKCl7dGhpcy5f''@;'; put 'put ''dHJpZ2dlckVsJiZ0aGlzLl90cmlnZ2VyRWwuZm9jdXMoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksQlk9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rv''@;'; put 'put ''cigpe3RoaXMuX2lkPW5ldyBXbn1nZXQgaWQoKXtyZXR1cm4gdGhpcy5faWQuYXNPYnNlcnZhYmxlKCl9c2V0SWQoYSl7dGhpcy5faWQubmV4dChhKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0''@;'; put 'put ''b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksWkw9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSl7dGhpcy50b2dnbGVTZXJ2aWNlPWEsdGhpcy5lbD1kLHRoaXMuc2lnbnBvc3RJZFNlcnZpY2U9aCx0aGlzLnNpZ25wb3N0Rm9jdXNNYW5hZ2VyPWYsdGhpcy5wbGF0Zm9ybUlk''@;'; put 'put ''PU0sdGhpcy5hcmlhRXhwYW5kZWQ9ITEsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMuZG9jdW1lbnQ9dn1uZ09uSW5pdCgpe3RoaXMuc2lnbnBvc3RGb2N1c01hbmFnZXIudHJpZ2dlckVsPXRoaXMuZWwubmF0aXZlRWxlbWVudCx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLnRvZ2ds''@;'; put 'put ''ZVNlcnZpY2Uub3BlbkNoYW5nZS5zdWJzY3JpYmUoYT0+e3RoaXMuYXJpYUV4cGFuZGVkPWE7Y29uc3QgZD10aGlzLmlzT3Blbjt0aGlzLmlzT3Blbj1hLCF0aGlzLmlzT3BlbiYmZCYmdGhpcy5mb2N1c09uQ2xvc2UoKX0pLHRoaXMuc2lnbnBvc3RJZFNlcnZpY2UuaWQuc3Vic2NyaWJlKGE9''@;'; put 'put ''PnRoaXMuYXJpYUNvbnRyb2w9YSkpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX1vblNpZ25wb3N0VHJpZ2dlckNsaWNrKGEpe3RoaXMudG9nZ2xlU2VydmljZS50b2dnbGVXaXRoRXZlbnQoYSl9Zm9jdXNPbkNsb3NlKCl7dGwo''@;'; put 'put ''dGhpcy5wbGF0Zm9ybUlkKSYmIXRoaXMuaXNPcGVuJiZ0aGlzLmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ9PT10aGlzLmRvY3VtZW50LmJvZHkmJnRoaXMuc2lnbnBvc3RGb2N1c01hbmFnZXIuZm9jdXNUcmlnZ2VyKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3''@;'; put 'put ''KGF8fGMpKEdlKHNjKSxHZShKaSksR2UoQlkpLEdlKFZZKSxHZSh2cyksR2UoaW8pKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyU2lnbnBvc3RUcmlnZ2VyIiwiIl1dLGhvc3RBdHRyczpbMSwic2lnbnBvc3QtdHJpZ2dlciJdLGhvc3RWYXJzOjQsaG9zdEJp''@;'; put 'put ''bmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZhJiZGdCgiY2xpY2siLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9uU2lnbnBvc3RUcmlnZ2VyQ2xpY2soZil9KSwyJmEmJihocigiYXJpYS1leHBhbmRlZCIsZC5hcmlhRXhwYW5kZWQpKCJhcmlhLWNvbnRyb2xzIixkLmFyaWFDb250cm9sKSxUcigiYWN0''@;'; put 'put ''aXZlIixkLmlzT3BlbikpfX0pLGN9KSgpLFdMPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5jb21tb25TdHJpbmdzPWEsdGhpcy51c2VDdXN0b21UcmlnZ2VyPSExfXNldCBjdXN0b21UcmlnZ2VyKGEpe3RoaXMudXNlQ3VzdG9tVHJpZ2dlcj0hIWF9fXJldHVybiBjLlx1MDI3''@;'; put 'put ''NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKGlzKSl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1zaWducG9zdCJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZhbyhoLFpMLDUpLDImYSl7bGV0IGY7Q2koZj1TaSgp''@;'; put 'put ''KSYmKGQuY3VzdG9tVHJpZ2dlcj1mLmZpcnN0KX19LGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZUcigic2lnbnBvc3QiLCEwKX0saW5wdXRzOntzaWducG9zdFRyaWdnZXJBcmlhTGFiZWw6W05uLk5vbmUsImNsclNpZ25wb3N0VHJpZ2dlckFyaWFMYWJlbCIs''@;'; put 'put ''InNpZ25wb3N0VHJpZ2dlckFyaWFMYWJlbCJdfSxmZWF0dXJlczpbZGEoW1ZZLEJZXSksdmQoW29nXSldLG5nQ29udGVudFNlbGVjdG9yczp5byxkZWNsczoyLHZhcnM6MSxjb25zdHM6W1s0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xyU2lnbnBvc3RUcmlnZ2VyIiwiIiwxLCJzaWdu''@;'; put 'put ''cG9zdC1hY3Rpb24iLCJidG4iLCJidG4tc20iLCJidG4taWNvbiIsImJ0bi1saW5rIl0sWyJzaGFwZSIsImluZm8tY2lyY2xlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoKSxndCgwLEVIZSwzLDIsIm5nLWNvbnRhaW5lciIsMCksWXIoMSkpLDImYSYmTWUoIm5nSWYiLCFk''@;'; put 'put ''LnVzZUN1c3RvbVRyaWdnZXIpfSxkZXBlbmRlbmNpZXM6W2JhLHJzLFpMXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKTtjb25zdCBfVWU9eyJ0b3AtbGVmdCI6e2FuY2hvclBvaW50OkFpLlRPUF9DRU5URVIscG9wb3ZlclBvaW50OkFpLkJPVFRPTV9SSUdIVCxvZmZzZXRZOi0xNixvZmZzZXRY''@;'; put 'put ''OjB9LCJ0b3AtbWlkZGxlIjp7YW5jaG9yUG9pbnQ6QWkuVE9QX0NFTlRFUixwb3BvdmVyUG9pbnQ6QWkuQk9UVE9NX0NFTlRFUixvZmZzZXRZOi0xNixvZmZzZXRYOjB9LCJ0b3AtcmlnaHQiOnthbmNob3JQb2ludDpBaS5UT1BfQ0VOVEVSLHBvcG92ZXJQb2ludDpBaS5CT1RUT01fTEVGVCxv''@;'; put 'put ''ZmZzZXRZOi0xNixvZmZzZXRYOjB9LCJyaWdodC10b3AiOnthbmNob3JQb2ludDpBaS5SSUdIVF9DRU5URVIscG9wb3ZlclBvaW50OkFpLkxFRlRfQk9UVE9NLG9mZnNldFk6MCxvZmZzZXRYOjE2fSwicmlnaHQtbWlkZGxlIjp7YW5jaG9yUG9pbnQ6QWkuUklHSFRfQ0VOVEVSLHBvcG92ZXJQ''@;'; put 'put ''b2ludDpBaS5MRUZUX0NFTlRFUixvZmZzZXRZOjAsb2Zmc2V0WDoxNn0sInJpZ2h0LWJvdHRvbSI6e2FuY2hvclBvaW50OkFpLlJJR0hUX0NFTlRFUixwb3BvdmVyUG9pbnQ6QWkuTEVGVF9UT1Asb2Zmc2V0WTowLG9mZnNldFg6MTZ9LCJib3R0b20tcmlnaHQiOnthbmNob3JQb2ludDpBaS5C''@;'; put 'put ''T1RUT01fQ0VOVEVSLHBvcG92ZXJQb2ludDpBaS5UT1BfTEVGVCxvZmZzZXRZOjE2LG9mZnNldFg6MH0sImJvdHRvbS1taWRkbGUiOnthbmNob3JQb2ludDpBaS5CT1RUT01fQ0VOVEVSLHBvcG92ZXJQb2ludDpBaS5UT1BfQ0VOVEVSLG9mZnNldFk6MTYsb2Zmc2V0WDowfSwiYm90dG9tLWxl''@;'; put 'put ''ZnQiOnthbmNob3JQb2ludDpBaS5CT1RUT01fQ0VOVEVSLHBvcG92ZXJQb2ludDpBaS5UT1BfUklHSFQsb2Zmc2V0WToxNixvZmZzZXRYOjB9LCJsZWZ0LWJvdHRvbSI6e2FuY2hvclBvaW50OkFpLkxFRlRfQ0VOVEVSLHBvcG92ZXJQb2ludDpBaS5SSUdIVF9UT1Asb2Zmc2V0WTowLG9mZnNl''@;'; put 'put ''dFg6LTE2fSwibGVmdC1taWRkbGUiOnthbmNob3JQb2ludDpBaS5MRUZUX0NFTlRFUixwb3BvdmVyUG9pbnQ6QWkuUklHSFRfQ0VOVEVSLG9mZnNldFk6MCxvZmZzZXRYOi0xNn0sImxlZnQtdG9wIjp7YW5jaG9yUG9pbnQ6QWkuTEVGVF9DRU5URVIscG9wb3ZlclBvaW50OkFpLlJJR0hUX0JP''@;'; put 'put ''VFRPTSxvZmZzZXRZOjAsb2Zmc2V0WDotMTZ9LGRlZmF1bHQ6e2FuY2hvclBvaW50OkFpLlJJR0hUX0NFTlRFUixwb3BvdmVyUG9pbnQ6QWkuTEVGVF9DRU5URVIsb2Zmc2V0WTowLG9mZnNldFg6MTZ9fSx3VWU9WyJ0b3AtbGVmdCIsInRvcC1taWRkbGUiLCJ0b3AtcmlnaHQiLCJyaWdodC10''@;'; put 'put ''b3AiLCJyaWdodC1taWRkbGUiLCJyaWdodC1ib3R0b20iLCJib3R0b20tcmlnaHQiLCJib3R0b20tbWlkZGxlIiwiYm90dG9tLWxlZnQiLCJsZWZ0LWJvdHRvbSIsImxlZnQtbWlkZGxlIiwibGVmdC10b3AiXTtsZXQgcTFlPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBIWXtjb25zdHJ1Y3Rvcihh''@;'; put 'put ''LGQsaCxmLHYsTSxEKXtpZihzdXBlcihhLGQpLHRoaXMuY29tbW9uU3RyaW5ncz1oLHRoaXMuc2lnbnBvc3RGb2N1c01hbmFnZXI9dix0aGlzLnBsYXRmb3JtSWQ9TSx0aGlzLnNpZ25wb3N0Q29udGVudElkPU11KCksIWQpdGhyb3cgbmV3IEVycm9yKCJjbHItc2lnbnBvc3QtY29udGVudCBz''@;'; put 'put ''aG91bGQgb25seSBiZSB1c2VkIGluc2lkZSBvZiBhIGNsci1zaWducG9zdCIpO3RoaXMucG9zaXRpb249InJpZ2h0LW1pZGRsZSIsdGhpcy5jbG9zZU9uT3V0c2lkZUNsaWNrPSEwLGYuc2V0SWQodGhpcy5zaWducG9zdENvbnRlbnRJZCksdGhpcy5kb2N1bWVudD1EfWdldCBwb3NpdGlvbigp''@;'; put 'put ''e3JldHVybiB0aGlzLl9wb3NpdGlvbn1zZXQgcG9zaXRpb24oYSl7dGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsdGhpcy5wb3NpdGlvbiksdGhpcy5fcG9zaXRpb249YSYmd1VlLmluZGV4T2YoYSk+LTE/YToicmlnaHQtbWlkZGxlIix0aGlzLnJlbmRl''@;'; put 'put ''cmVyLmFkZENsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCx0aGlzLnBvc2l0aW9uKTtjb25zdCBkPV9VZVt0aGlzLnBvc2l0aW9uXTt0aGlzLmFuY2hvclBvaW50PWQuYW5jaG9yUG9pbnQsdGhpcy5wb3BvdmVyUG9pbnQ9ZC5wb3BvdmVyUG9pbnQsdGhpcy5wb3BvdmVyT3B0aW9ucy5vZmZz''@;'; put 'put ''ZXRZPWQub2Zmc2V0WSx0aGlzLnBvcG92ZXJPcHRpb25zLm9mZnNldFg9ZC5vZmZzZXRYfWNsb3NlKCl7dGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49ITF9bmdPbkRlc3Ryb3koKXtzdXBlci5uZ09uRGVzdHJveSgpLHRsKHRoaXMucGxhdGZvcm1JZCkmJnRoaXMuZWwubmF0aXZlRWxlbWVudC5j''@;'; put 'put ''b250YWlucyh0aGlzLmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpJiZ0aGlzLnNpZ25wb3N0Rm9jdXNNYW5hZ2VyLmZvY3VzVHJpZ2dlcigpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShEcyksR2UoTkwsOCksR2UoaXMpLEdlKEJZKSxHZShWWSks''@;'; put 'put ''R2UoaW8pLEdlKHZzKSl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1zaWducG9zdC1jb250ZW50Il1dLGhvc3RWYXJzOjMsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiYob3AoImlkIixkLnNpZ25wb3N0Q29udGVudElkKSxUcigic2lnbnBvc3QtY29u''@;'; put 'put ''dGVudCIsITApKX0saW5wdXRzOntzaWducG9zdENsb3NlQXJpYUxhYmVsOltObi5Ob25lLCJjbHJTaWducG9zdENsb3NlQXJpYUxhYmVsIiwic2lnbnBvc3RDbG9zZUFyaWFMYWJlbCJdLHBvc2l0aW9uOltObi5Ob25lLCJjbHJQb3NpdGlvbiIsInBvc2l0aW9uIl19LGZlYXR1cmVzOlt3YV0s''@;'; put 'put ''bmdDb250ZW50U2VsZWN0b3JzOkFIZSxkZWNsczo4LHZhcnM6Myxjb25zdHM6W1sxLCJzaWducG9zdC13cmFwIl0sWzEsInBvcG92ZXItcG9pbnRlciJdLFsxLCJzaWducG9zdC1jb250ZW50LWhlYWRlciJdLFsidHlwZSIsImJ1dHRvbiIsMSwic2lnbnBvc3QtYWN0aW9uIiwiY2xvc2UiLDMs''@;'; put 'put ''ImNsaWNrIl0sWyJzaGFwZSIsIndpbmRvdy1jbG9zZSJdLFsidGFiaW5kZXgiLCIwIiwxLCJzaWducG9zdC1jb250ZW50LWJvZHkiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYShUSGUpLGRlKDAsImRpdiIsMCksR3QoMSwiZGl2IiwxKSxkZSgyLCJkaXYiLDIpLFlyKDMpLGRl''@;'; put 'put ''KDQsImJ1dHRvbiIsMyksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLmNsb3NlKCl9KSxHdCg1LCJjZHMtaWNvbiIsNCksaGUoKSgpLGRlKDYsImRpdiIsNSksWXIoNywxKSxoZSgpKCkpLDImYSYmKGZlKDQpLGhyKCJhcmlhLWxhYmVsIixkLnNpZ25wb3N0Q2xvc2VBcmlhTGFiZWx8''@;'; put 'put ''fGQuY29tbW9uU3RyaW5ncy5rZXlzLnNpZ25wb3N0Q2xvc2UpKCJhcmlhLWNvbnRyb2xzIixkLnNpZ25wb3N0Q29udGVudElkKSxmZSgpLGhyKCJ0aXRsZSIsZC5jb21tb25TdHJpbmdzLmtleXMuY2xvc2UpKX0sZGVwZW5kZW5jaWVzOltyc10sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksQ1Vl''@;'; put 'put ''PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtUcy5hZGRJY29ucyh2eCxST2UpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltSYSxBcyxCTCxPMl19KSxj''@;'; put 'put ''fSkoKSxqWT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5faWQ9bmV3IFdufWdldCBpZCgpe3JldHVybiB0aGlzLl9pZC5hc09ic2VydmFibGUoKX11cGRhdGVJZChhKXt0aGlzLl9pZC5uZXh0KGEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhh''@;'; put 'put ''fHxjKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSx6WT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMudG9nZ2xlU2VydmljZT1hfW9uTW91c2VFbnRlclRyaWdnZXIoKXt0aGlzLm1vdXNlT3ZlclRyaWdnZXI9ITAsdGhpcy50''@;'; put 'put ''b2dnbGVTZXJ2aWNlLm9wZW49ITB9b25Nb3VzZUxlYXZlVHJpZ2dlcigpe3RoaXMubW91c2VPdmVyVHJpZ2dlcj0hMSx0aGlzLmhpZGVJZk1vdXNlT3V0KCl9b25Nb3VzZUVudGVyQ29udGVudCgpe3RoaXMubW91c2VPdmVyQ29udGVudD0hMH1vbk1vdXNlTGVhdmVDb250ZW50KCl7dGhpcy5t''@;'; put 'put ''b3VzZU92ZXJDb250ZW50PSExLHRoaXMuaGlkZUlmTW91c2VPdXQoKX1oaWRlSWZNb3VzZU91dCgpe3NldFRpbWVvdXQoKCk9PnshdGhpcy5tb3VzZU92ZXJUcmlnZ2VyJiYhdGhpcy5tb3VzZU92ZXJDb250ZW50JiYodGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49ITEpfSwwKX19cmV0dXJuIGMu''@;'; put 'put ''XHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoeHIoc2MpKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSx2Nz0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxj''@;'; put 'put ''KX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXRvb2x0aXAiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJlRyKCJ0b29sdGlwIiwhMCl9LGZlYXR1cmVzOltkYShbalkselldKSx2ZChbb2ddKV0sbmdDb250ZW50U2VsZWN0b3Jz''@;'; put 'put ''OnlvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoKSxZcigwKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpO2NvbnN0IE1VZT1bImJvdHRvbS1sZWZ0IiwiYm90dG9tLXJpZ2h0IiwidG9wLWxlZnQiLCJ0b3AtcmlnaHQiLCJyaWdodCIsImxlZnQiXSx4''@;'; put 'put ''VWU9WyJ4cyIsInNtIiwibWQiLCJsZyJdO2xldCBiNz0oKCk9PntjbGFzcyBjIGV4dGVuZHMgSFl7Y29uc3RydWN0b3IoYSxkLGgsZil7aWYoc3VwZXIoYSxkKSx0aGlzLnRvb2x0aXBJZFNlcnZpY2U9aCx0aGlzLnRvb2x0aXBNb3VzZVNlcnZpY2U9ZiwhZCl0aHJvdyBuZXcgRXJyb3IoImNs''@;'; put 'put ''ci10b29sdGlwLWNvbnRlbnQgc2hvdWxkIG9ubHkgYmUgdXNlZCBpbnNpZGUgb2YgYSBjbHItdG9vbHRpcCIpO3RoaXMuaWQ9TXUoKX1nZXQgaWQoKXtyZXR1cm4gdGhpcy5faWR9c2V0IGlkKGEpe2NvbnN0IGQ9YXx8IiI7dGhpcy5faWQ9ZCx0aGlzLnRvb2x0aXBJZFNlcnZpY2UudXBkYXRl''@;'; put 'put ''SWQoZCl9Z2V0IHBvc2l0aW9uKCl7cmV0dXJuIHRoaXMuX3Bvc2l0aW9ufXNldCBwb3NpdGlvbihhKXtjb25zdCBkPXRoaXMuX3Bvc2l0aW9uLGg9TVVlLmluY2x1ZGVzKGEpP2E6InJpZ2h0Ijtzd2l0Y2godGhpcy5fcG9zaXRpb249aCx0aGlzLnVwZGF0ZUNzc0NsYXNzKHtvbGRDbGFzczpg''@;'; put 'put ''dG9vbHRpcC0ke2R9YCxuZXdDbGFzczpgdG9vbHRpcC0ke2h9YH0pLGgpe2Nhc2UidG9wLXJpZ2h0Ijp0aGlzLmFuY2hvclBvaW50PUFpLlRPUF9DRU5URVIsdGhpcy5wb3BvdmVyUG9pbnQ9QWkuTEVGVF9CT1RUT007YnJlYWs7Y2FzZSJ0b3AtbGVmdCI6dGhpcy5hbmNob3JQb2ludD1BaS5U''@;'; put 'put ''T1BfQ0VOVEVSLHRoaXMucG9wb3ZlclBvaW50PUFpLlJJR0hUX0JPVFRPTTticmVhaztjYXNlImJvdHRvbS1yaWdodCI6dGhpcy5hbmNob3JQb2ludD1BaS5CT1RUT01fQ0VOVEVSLHRoaXMucG9wb3ZlclBvaW50PUFpLkxFRlRfVE9QO2JyZWFrO2Nhc2UiYm90dG9tLWxlZnQiOnRoaXMuYW5j''@;'; put 'put ''aG9yUG9pbnQ9QWkuQk9UVE9NX0NFTlRFUix0aGlzLnBvcG92ZXJQb2ludD1BaS5SSUdIVF9UT1A7YnJlYWs7Y2FzZSJyaWdodCI6dGhpcy5hbmNob3JQb2ludD1BaS5SSUdIVF9DRU5URVIsdGhpcy5wb3BvdmVyUG9pbnQ9QWkuTEVGVF9UT1A7YnJlYWs7Y2FzZSJsZWZ0Ijp0aGlzLmFuY2hv''@;'; put 'put ''clBvaW50PUFpLkxFRlRfQ0VOVEVSLHRoaXMucG9wb3ZlclBvaW50PUFpLlJJR0hUX1RPUDticmVhaztkZWZhdWx0OiFmdW5jdGlvbiBTVWUoYyl7dGhyb3cgbmV3IEVycm9yKGBVbmhhbmRsZWQgdmFsdWU6ICR7Y31gKX0oaCl9fWdldCBzaXplKCl7cmV0dXJuIHRoaXMuX3NpemV9c2V0IHNp''@;'; put 'put ''emUoYSl7Y29uc3QgZD10aGlzLl9zaXplLGg9eFVlLmluY2x1ZGVzKGEpP2E6InNtIjt0aGlzLl9zaXplPWgsdGhpcy51cGRhdGVDc3NDbGFzcyh7b2xkQ2xhc3M6YHRvb2x0aXAtJHtkfWAsbmV3Q2xhc3M6YHRvb2x0aXAtJHtofWB9KX1uZ09uSW5pdCgpe3RoaXMuc2l6ZT10aGlzLnNpemV8''@;'; put 'put ''fCJzbSIsdGhpcy5wb3NpdGlvbj10aGlzLnBvc2l0aW9ufHwicmlnaHQifW9uTW91c2VFbnRlcigpe3RoaXMudG9vbHRpcE1vdXNlU2VydmljZS5vbk1vdXNlRW50ZXJDb250ZW50KCl9b25Nb3VzZUxlYXZlKCl7dGhpcy50b29sdGlwTW91c2VTZXJ2aWNlLm9uTW91c2VMZWF2ZUNvbnRlbnQo''@;'; put 'put ''KX11cGRhdGVDc3NDbGFzcyh7b2xkQ2xhc3M6YSxuZXdDbGFzczpkfSl7dGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsYSksdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsZCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5j''@;'; put 'put ''dGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKERzKSxHZShOTCw4KSxHZShqWSksR2UoelkpKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXRvb2x0aXAtY29udGVudCJdXSxob3N0VmFyczo2LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmRnQoIm1v''@;'; put 'put ''dXNlZW50ZXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGQub25Nb3VzZUVudGVyKCl9KSgibW91c2VsZWF2ZSIsZnVuY3Rpb24oKXtyZXR1cm4gZC5vbk1vdXNlTGVhdmUoKX0pLDImYSYmKG9wKCJpZCIsZC5pZCksaHIoInJvbGUiLCJ0b29sdGlwIiksX2QoIm9wYWNpdHkiLDEpLFRyKCJ0b29sdGlw''@;'; put 'put ''LWNvbnRlbnQiLCEwKSl9LGlucHV0czp7aWQ6ImlkIixwb3NpdGlvbjpbTm4uTm9uZSwiY2xyUG9zaXRpb24iLCJwb3NpdGlvbiJdLHNpemU6W05uLk5vbmUsImNsclNpemUiLCJzaXplIl19LGZlYXR1cmVzOlt3YV0sbmdDb250ZW50U2VsZWN0b3JzOnlvLGRlY2xzOjEsdmFyczowLHRlbXBs''@;'; put 'put ''YXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoKSxZcigwKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLHk3PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMudG9nZ2xlU2VydmljZT1hLHRoaXMudG9vbHRpcE1vdXNlU2VydmljZT1oLHRoaXMuc3Vicz1bXSx0aGlzLnN1''@;'; put 'put ''YnMucHVzaChkLmlkLnN1YnNjcmliZShmPT50aGlzLmFyaWFEZXNjcmliZWRCeT1mKSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfXNob3dUb29sdGlwKCl7dGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49ITB9aGlkZVRvb2x0aXAoKXt0aGlzLnRv''@;'; put 'put ''Z2dsZVNlcnZpY2Uub3Blbj0hMX1vbk1vdXNlRW50ZXIoKXt0aGlzLnRvb2x0aXBNb3VzZVNlcnZpY2Uub25Nb3VzZUVudGVyVHJpZ2dlcigpfW9uTW91c2VMZWF2ZSgpe3RoaXMudG9vbHRpcE1vdXNlU2VydmljZS5vbk1vdXNlTGVhdmVUcmlnZ2VyKCl9fXJldHVybiBjLlx1MDI3NWZhYz1m''@;'; put 'put ''dW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKHNjKSxHZShqWSksR2UoelkpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyVG9vbHRpcFRyaWdnZXIiLCIiXV0saG9zdEF0dHJzOlsidGFiaW5kZXgiLCIwIl0saG9zdFZhcnM6NCxob3N0QmluZGluZ3M6''@;'; put 'put ''ZnVuY3Rpb24oYSxkKXsxJmEmJkZ0KCJmb2N1cyIsZnVuY3Rpb24oKXtyZXR1cm4gZC5zaG93VG9vbHRpcCgpfSkoImJsdXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGQuaGlkZVRvb2x0aXAoKX0pKCJtb3VzZWVudGVyIixmdW5jdGlvbigpe3JldHVybiBkLm9uTW91c2VFbnRlcigpfSkoIm1vdXNl''@;'; put 'put ''bGVhdmUiLGZ1bmN0aW9uKCl7cmV0dXJuIGQub25Nb3VzZUxlYXZlKCl9KSwyJmEmJihocigiYXJpYS1kZXNjcmliZWRieSIsZC5hcmlhRGVzY3JpYmVkQnkpKCJyb2xlIiwiYnV0dG9uIiksVHIoInRvb2x0aXAtdHJpZ2dlciIsITApKX19KSxjfSkoKSxFVWU9KCgpPT57Y2xhc3MgY3t9cmV0''@;'; put 'put ''dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbUmEsTzIsQXNdfSksY30pKCksVFVlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXty''@;'; put 'put ''ZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W05ZLENVZSxFVWVdfSksY30pKCk7dmFyIF83PWZ1bmN0aW9uKGMpe3JldHVybiBjLlZFUlRJQ0FMPSJ2ZXJ0aWNhbCIsYy5IT1JJWk9OVEFMPSJob3Jpem9udGFsIixjLkNP''@;'; put 'put ''TVBBQ1Q9ImNvbXBhY3QiLGN9KF83fHx7fSk7bGV0IENwPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLm1pbkxhYmVsU2l6ZT0xLHRoaXMubWF4TGFiZWxTaXplPTEyLHRoaXMubGF5b3V0PV83LkhPUklaT05UQUwsdGhpcy5sYXlvdXRWYWx1ZXM9T2JqZWN0LmtleXMoXzcpLm1h''@;'; put 'put ''cChhPT5fN1thXSksdGhpcy5fbGFiZWxTaXplPTJ9Z2V0IGxhYmVsU2l6ZSgpe3JldHVybiB0aGlzLl9sYWJlbFNpemV9c2V0IGxhYmVsU2l6ZShhKXt0aGlzLmxhYmVsU2l6ZUlzVmFsaWQoYSkmJih0aGlzLl9sYWJlbFNpemU9YSl9Z2V0IGxheW91dENsYXNzKCl7cmV0dXJuYGNsci1mb3Jt''@;'; put 'put ''LSR7dGhpcy5sYXlvdXR9YH1pc1ZlcnRpY2FsKCl7cmV0dXJuIHRoaXMubGF5b3V0PT09XzcuVkVSVElDQUx9aXNIb3Jpem9udGFsKCl7cmV0dXJuIHRoaXMubGF5b3V0PT09XzcuSE9SSVpPTlRBTH1pc0NvbXBhY3QoKXtyZXR1cm4gdGhpcy5sYXlvdXQ9PT1fNy5DT01QQUNUfWlzVmFsaWQo''@;'; put 'put ''YSl7cmV0dXJuIHRoaXMubGF5b3V0VmFsdWVzLmluZGV4T2YoYSk+LTF9bGFiZWxTaXplSXNWYWxpZChhKXtyZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihhKSYmYT49dGhpcy5taW5MYWJlbFNpemUmJmE8PXRoaXMubWF4TGFiZWxTaXplfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7''@;'; put 'put ''cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxkcz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdil7dGhpcy5jb250cm9sSWRTZXJ2aWNlPWEsdGhpcy5sYXlvdXRTZXJ2aWNlPWQsdGhpcy5uZ0Nv''@;'; put 'put ''bnRyb2xTZXJ2aWNlPWgsdGhpcy5yZW5kZXJlcj1mLHRoaXMuZWw9dix0aGlzLmVuYWJsZUdyaWQ9ITAsdGhpcy5zdWJzY3JpcHRpb25zPVtdfWdldCBsYWJlbFRleHQoKXtyZXR1cm4gdGhpcy5lbC5uYXRpdmVFbGVtZW50JiZ0aGlzLmVsLm5hdGl2ZUVsZW1lbnQudGV4dENvbnRlbnR9bmdP''@;'; put 'put ''bkluaXQoKXt0aGlzLmlkQXR0cj10aGlzLmlkSW5wdXQsKHRoaXMuY29udHJvbElkU2VydmljZXx8dGhpcy5uZ0NvbnRyb2xTZXJ2aWNlKSYmdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsImNsci1jb250cm9sLWxhYmVsIiksdGhpcy5lbmFibGVHcmlkJiZ0''@;'; put 'put ''aGlzLmxheW91dFNlcnZpY2UmJiF0aGlzLmxheW91dFNlcnZpY2UuaXNWZXJ0aWNhbCgpJiZ0aGlzLmVsLm5hdGl2ZUVsZW1lbnQmJnRoaXMuZWwubmF0aXZlRWxlbWVudC5jbGFzc05hbWUuaW5kZXhPZigiY2xyLWNvbCIpPDAmJih0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWwubmF0''@;'; put 'put ''aXZlRWxlbWVudCwiY2xyLWNvbC0xMiIpLHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LGBjbHItY29sLW1kLSR7dGhpcy5sYXlvdXRTZXJ2aWNlLmxhYmVsU2l6ZX1gKSksdGhpcy5jb250cm9sSWRTZXJ2aWNlJiYhdGhpcy5mb3JBdHRyJiZ0aGlzLnN1YnNj''@;'; put 'put ''cmlwdGlvbnMucHVzaCh0aGlzLmNvbnRyb2xJZFNlcnZpY2UuaWRDaGFuZ2Uuc3Vic2NyaWJlKGE9Pnt0aGlzLmZvckF0dHI9YSx0aGlzLmlkQXR0cj10aGlzLmlkSW5wdXR8fGAke2F9LWxhYmVsYH0pKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5z''@;'; put 'put ''dWJzY3JpYmUoKSl9ZGlzYWJsZUdyaWQoKXt0aGlzLmVuYWJsZUdyaWQ9ITF9b25DbGljayhhKXt0aGlzLnByZXZlbnREZWZhdWx0T25TaWducG9zdFRhcmdldChhKX1wcmV2ZW50RGVmYXVsdE9uU2lnbnBvc3RUYXJnZXQoYSl7dGhpcy5zaWducG9zdCYmdGhpcy5zaWducG9zdC5uYXRpdmVF''@;'; put 'put ''bGVtZW50JiZ0aGlzLnNpZ25wb3N0Lm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoYS50YXJnZXQpJiZhLnByZXZlbnREZWZhdWx0KCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKENoLDgpLEdlKENwLDgpLEdlKGYxLDgpLEdlKEVvKSxHZShKaSkp''@;'; put 'put ''fSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyJsYWJlbCJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZhbyhoLFdMLDUsSmkpLDImYSl7bGV0IGY7Q2koZj1TaSgpKSYmKGQuc2lnbnBvc3Q9Zi5maXJzdCl9fSxob3N0VmFyczoyLGhvc3RCaW5k''@;'; put 'put ''aW5nczpmdW5jdGlvbihhLGQpezEmYSYmRnQoImNsaWNrIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vbkNsaWNrKGYpfSksMiZhJiZocigiaWQiLGQuaWRBdHRyKSgiZm9yIixkLmZvckF0dHIpfSxpbnB1dHM6e2lkSW5wdXQ6W05uLk5vbmUsImlkIiwiaWRJbnB1dCJdLGZvckF0dHI6W05uLk5v''@;'; put 'put ''bmUsImZvciIsImZvckF0dHIiXX19KSxjfSkoKSxBVWU9KCgpPT57Y2xhc3MgYyBleHRlbmRzIEZZe2NvbnN0cnVjdG9yKGEsZCl7c3VwZXIoYSxkKSx0aGlzLmNvbnRyb2xJZFNlcnZpY2U9YSx0aGlzLmNvbnRhaW5lcklkU2VydmljZT1kLHRoaXMuY29udHJvbElkU3VmZml4PSJzdWNjZXNz''@;'; put 'put ''In19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoQ2gsOCksR2UocDcsOCkpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItY29udHJvbC1zdWNjZXNzIl1dLGhvc3RWYXJzOjUsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEs''@;'; put 'put ''ZCl7MiZhJiYoaHIoImlkIixkLmlkKSxUcigiY2xyLXN1YnRleHQiLCEwKSgic3VjY2VzcyIsITApKX0sZmVhdHVyZXM6W3dhXSxuZ0NvbnRlbnRTZWxlY3RvcnM6eW8sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYSgpLFlyKDApKX0sZW5jYXBzdWxhdGlv''@;'; put 'put ''bjoyfSksY30pKCksRGQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmxheW91dFNlcnZpY2U9YSx0aGlzLmNsYXNzTmFtZT0iIn1jb250cm9sQ2xhc3MoYT1BZC5OT05FLGQ9ITEsaD0iIil7Y29uc3QgZj1bdGhpcy5jbGFzc05hbWUsaF07c3dpdGNoKGEpe2Nhc2UgQWQuVkFM''@;'; put 'put ''SUQ6Zi5wdXNoKCJjbHItc3VjY2VzcyIpO2JyZWFrO2Nhc2UgQWQuSU5WQUxJRDpmLnB1c2goImNsci1lcnJvciIpfXJldHVybiBkJiZ0aGlzLmxheW91dFNlcnZpY2UmJi0xPT09dGhpcy5jbGFzc05hbWUuaW5kZXhPZigiY2xyLWNvbCIpJiZmLnB1c2goYGNsci1jb2wtbWQtJHt0aGlzLmxh''@;'; put 'put ''eW91dFNlcnZpY2UubWF4TGFiZWxTaXplLXRoaXMubGF5b3V0U2VydmljZS5sYWJlbFNpemV9IGNsci1jb2wtMTJgKSxmLmpvaW4oIiAiKS50cmltKCl9aW5pdENvbnRyb2xDbGFzcyhhLGQpe2QmJmQuY2xhc3NOYW1lJiYodGhpcy5jbGFzc05hbWU9ZC5jbGFzc05hbWUsZC5jbGFzc05hbWUu''@;'; put 'put ''c3BsaXQoIiAiKS5mb3JFYWNoKGY9PntmLnN0YXJ0c1dpdGgoImNsci1jb2wiKSYmYS5yZW1vdmVDbGFzcyhkLGYpfSkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh4cihDcCw4KSl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMu''@;'; put 'put ''XHUwMjc1ZmFjfSksY30pKCksdzc9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLmlmQ29udHJvbFN0YXRlU2VydmljZT1hLHRoaXMubGF5b3V0U2VydmljZT1kLHRoaXMuY29udHJvbENsYXNzU2VydmljZT1oLHRoaXMubmdDb250cm9sU2VydmljZT1mLHRoaXMuc3Vi''@;'; put 'put ''c2NyaXB0aW9ucz1bXSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChhLnN0YXR1c0NoYW5nZXMuc3Vic2NyaWJlKHY9Pnt0aGlzLnN0YXRlPXYsc2V0VGltZW91dCgoKT0+e3RoaXMudXBkYXRlSGVscGVycygpfSl9KSksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goZi5jb250cm9sQ2hhbmdlcy5z''@;'; put 'put ''dWJzY3JpYmUodj0+e3RoaXMuY29udHJvbD12fSksZi5hZGRpdGlvbmFsQ29udHJvbHNDaGFuZ2VzLnN1YnNjcmliZSh2PT57dGhpcy5hZGRpdGlvbmFsQ29udHJvbHM9dn0pKX1nZXQgc2hvd0hlbHBlcigpe3JldHVybiEhdGhpcy5jb250cm9sSGVscGVyQ29tcG9uZW50fWdldCBzaG93VmFs''@;'; put 'put ''aWQoKXtyZXR1cm4gdGhpcy50b3VjaGVkJiZ0aGlzLnN0YXRlPT09QWQuVkFMSUQmJnRoaXMuc3VjY2Vzc01lc3NhZ2VQcmVzZW50fWdldCBzaG93SW52YWxpZCgpe3JldHVybiB0aGlzLnRvdWNoZWQmJnRoaXMuc3RhdGU9PT1BZC5JTlZBTElEJiZ0aGlzLmVycm9yTWVzc2FnZVByZXNlbnR9''@;'; put 'put ''Z2V0IHN1Y2Nlc3NNZXNzYWdlUHJlc2VudCgpe3JldHVybiEhdGhpcy5jb250cm9sU3VjY2Vzc0NvbXBvbmVudH1nZXQgZXJyb3JNZXNzYWdlUHJlc2VudCgpe3JldHVybiEhdGhpcy5jb250cm9sRXJyb3JDb21wb25lbnR9Z2V0IHRvdWNoZWQoKXtyZXR1cm4hKCF0aGlzLmNvbnRyb2w/LnRv''@;'; put 'put ''dWNoZWQmJiF0aGlzLmFkZGl0aW9uYWxDb250cm9scz8uc29tZShhPT5hLnRvdWNoZWQpKX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLnVwZGF0ZUhlbHBlcnMoKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9Y29udHJvbENs''@;'; put 'put ''YXNzKCl7cmV0dXJuIHRoaXMuY29udHJvbENsYXNzU2VydmljZS5jb250cm9sQ2xhc3MoIXRoaXMuY29udHJvbFN1Y2Nlc3NDb21wb25lbnQmJnRoaXMuc3RhdGU9PT1BZC5WQUxJRHx8IXRoaXMudG91Y2hlZD9BZC5OT05FOnRoaXMuc3RhdGUsdGhpcy5hZGRHcmlkKCkpfWFkZEdyaWQoKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5sYXlvdXRTZXJ2aWNlJiYhdGhpcy5sYXlvdXRTZXJ2aWNlLmlzVmVydGljYWwoKX11cGRhdGVIZWxwZXJzKCl7dGhpcy5uZ0NvbnRyb2xTZXJ2aWNlJiZ0aGlzLm5nQ29udHJvbFNlcnZpY2Uuc2V0SGVscGVycyh7c2hvdzp0aGlzLnNob3dJbnZhbGlkfHx0aGlzLnNob3dI''@;'; put 'put ''ZWxwZXJ8fHRoaXMuc2hvd1ZhbGlkLHNob3dJbnZhbGlkOnRoaXMuc2hvd0ludmFsaWQsc2hvd0hlbHBlcjp0aGlzLnNob3dIZWxwZXIsc2hvd1ZhbGlkOnRoaXMuc2hvd1ZhbGlkfSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKGtkKSxHZShD''@;'; put 'put ''cCw4KSxHZShEZCksR2UoZjEpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6Yyxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiYoYW8oaCxkcyw1KSxhbyhoLEFVZSw1KSxhbyhoLGhVZSw1KSxhbyhoLGpMLDUpKSwyJmEpe2xldCBmO0NpKGY9U2koKSkmJihkLmxhYmVsPWYu''@;'; put 'put ''Zmlyc3QpLENpKGY9U2koKSkmJihkLmNvbnRyb2xTdWNjZXNzQ29tcG9uZW50PWYuZmlyc3QpLENpKGY9U2koKSkmJihkLmNvbnRyb2xFcnJvckNvbXBvbmVudD1mLmZpcnN0KSxDaShmPVNpKCkpJiYoZC5jb250cm9sSGVscGVyQ29tcG9uZW50PWYuZmlyc3QpfX19KSxjfSkoKTtjbGFzcyBZ''@;'; put 'put ''THtjb25zdHJ1Y3RvcihsLGEsZD0wKXtpZih0aGlzLmluamVjdG9yPWEuaW5qZWN0b3IsIXRoaXMuaW5qZWN0b3IuZ2V0KGwsbnVsbCkpe2NvbnN0IGg9dGhpcy5pbmplY3Rvci5nZXQoVzUpLGY9dGhpcy5pbmplY3Rvci5nZXQoSmkpO2EuY3JlYXRlQ29tcG9uZW50KGgucmVzb2x2ZUNvbXBv''@;'; put 'put ''bmVudEZhY3RvcnkoY1VlKSk7Y29uc3Qgdj1oLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KGwpLE09W107TVtkXT1bZi5uYXRpdmVFbGVtZW50XTtjb25zdCBEPWEuY3JlYXRlQ29tcG9uZW50KHYsdm9pZCAwLHZvaWQgMCxNKTthLnJlbW92ZSgwKSx0aGlzLmluamVjdG9yPUQuaW5qZWN0b3J9''@;'; put 'put ''fWdldChsLGEpe3JldHVybiB0aGlzLmluamVjdG9yLmdldChsLGEpfX1sZXQgVVk9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX3RvdWNoZWQ9bmV3IFdufWdldCB0b3VjaGVkQ2hhbmdlKCl7cmV0dXJuIHRoaXMuX3RvdWNoZWQuYXNPYnNlcnZhYmxlKCl9bWFya0FzVG91Y2hl''@;'; put 'put ''ZCgpe3RoaXMuX3RvdWNoZWQubmV4dCgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKTt2YXIgWlk9ZnVuY3Rpb24oYyl7cmV0dXJuIGMuRk9STT0iZm9y''@;'; put 'put ''bSIsYy5NT0RFTD0ibW9kZWwiLGN9KFpZfHx7fSk7bGV0IEM3PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0pe3RoaXMudmNyPWEsdGhpcy53cmFwcGVyVHlwZT1kLHRoaXMuX25nQ29udHJvbD1mLHRoaXMucmVuZGVyZXI9dix0aGlzLmVsPU0sdGhpcy5pbmRleD0wLHRo''@;'; put 'put ''aXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLmFkZGl0aW9uYWxEaWZmZXI9bmV3IE1hcCxoJiYodGhpcy5uZ0NvbnRyb2xTZXJ2aWNlPWguZ2V0KGYxLG51bGwpLHRoaXMuaWZDb250cm9sU3RhdGVTZXJ2aWNlPWguZ2V0KGtkLG51bGwpLHRoaXMuY29udHJvbENsYXNzU2VydmljZT1oLmdldChE''@;'; put 'put ''ZCxudWxsKSx0aGlzLm1hcmtDb250cm9sU2VydmljZT1oLmdldChVWSxudWxsKSx0aGlzLmRpZmZlcnM9aC5nZXQod00sbnVsbCkpLHRoaXMuY29udHJvbENsYXNzU2VydmljZSYmdGhpcy5jb250cm9sQ2xhc3NTZXJ2aWNlLmluaXRDb250cm9sQ2xhc3ModixNLm5hdGl2ZUVsZW1lbnQpLHRo''@;'; put 'put ''aXMubWFya0NvbnRyb2xTZXJ2aWNlJiZ0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLm1hcmtDb250cm9sU2VydmljZS50b3VjaGVkQ2hhbmdlLnN1YnNjcmliZSgoKT0+e3RoaXMubWFya0FzVG91Y2hlZCgpfSkpLHRoaXMubmdDb250cm9sU2VydmljZSYmdGhpcy5zdWJzY3JpcHRpb25z''@;'; put 'put ''LnB1c2godGhpcy5uZ0NvbnRyb2xTZXJ2aWNlLmhlbHBlcnNDaGFuZ2Uuc3Vic2NyaWJlKEQ9Pnt0aGlzLnNldEFyaWFEZXNjcmliZWRCeShEKX0pKX1nZXQgaWQoKXtyZXR1cm4gdGhpcy5faWR9c2V0IGlkKGEpe3RoaXMuX2lkPWEsdGhpcy5jb250cm9sSWRTZXJ2aWNlJiYodGhpcy5jb250''@;'; put 'put ''cm9sSWRTZXJ2aWNlLmlkPWEpfWdldCBoYXNBZGRpdGlvbmFsQ29udHJvbHMoKXtyZXR1cm4gdGhpcy5hZGRpdGlvbmFsRGlmZmVyLnNpemU+MH1uZ09uSW5pdCgpe3RoaXMuX2NvbnRhaW5lckluamVjdG9yPW5ldyBZTCh0aGlzLndyYXBwZXJUeXBlLHRoaXMudmNyLHRoaXMuaW5kZXgpLHRo''@;'; put 'put ''aXMuY29udHJvbElkU2VydmljZT10aGlzLl9jb250YWluZXJJbmplY3Rvci5nZXQoQ2gpLHRoaXMuY29udGFpbmVySWRTZXJ2aWNlPXRoaXMuX2NvbnRhaW5lckluamVjdG9yLmdldChwNyxudWxsKSx0aGlzLl9pZD90aGlzLmNvbnRyb2xJZFNlcnZpY2UuaWQ9dGhpcy5faWQ6dGhpcy5faWQ9''@;'; put 'put ''dGhpcy5jb250cm9sSWRTZXJ2aWNlLmlkLHRoaXMubmdDb250cm9sU2VydmljZSYmdGhpcy5fbmdDb250cm9sJiYodGhpcy5uZ0NvbnRyb2xTZXJ2aWNlLmNvbnRyb2w/KHRoaXMubmdDb250cm9sPXRoaXMubmdDb250cm9sU2VydmljZS5jb250cm9sLHRoaXMubmdDb250cm9sU2VydmljZS5h''@;'; put 'put ''ZGRBZGRpdGlvbmFsQ29udHJvbCh0aGlzLl9uZ0NvbnRyb2wpLHRoaXMuYWRkaXRpb25hbERpZmZlci5zZXQodGhpcy5fbmdDb250cm9sLHRoaXMuZGlmZmVycy5maW5kKHRoaXMuX25nQ29udHJvbCkuY3JlYXRlKCkpKToodGhpcy5uZ0NvbnRyb2w9dGhpcy5fbmdDb250cm9sLHRoaXMubmdD''@;'; put 'put ''b250cm9sU2VydmljZS5zZXRDb250cm9sKHRoaXMubmdDb250cm9sKSx0aGlzLmRpZmZlcj10aGlzLmRpZmZlcnMuZmluZCh0aGlzLl9uZ0NvbnRyb2wpLmNyZWF0ZSgpKSl9bmdEb0NoZWNrKCl7aWYodGhpcy50cmlnZ2VyRG9DaGVjayh0aGlzLmRpZmZlcix0aGlzLm5nQ29udHJvbCksdGhp''@;'; put 'put ''cy5oYXNBZGRpdGlvbmFsQ29udHJvbHMpZm9yKGNvbnN0W2EsZF1vZiB0aGlzLmFkZGl0aW9uYWxEaWZmZXIpdGhpcy50cmlnZ2VyRG9DaGVjayhkLGEpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YT8udW5zdWJzY3JpYmUoKSl9dHJpZ2dlclZhbGlkYXRp''@;'; put 'put ''b24oKXt0aGlzLmlmQ29udHJvbFN0YXRlU2VydmljZSYmdGhpcy5pZkNvbnRyb2xTdGF0ZVNlcnZpY2UudHJpZ2dlclN0YXR1c0NoYW5nZSgpfWdldFByb3ZpZGVyRnJvbUNvbnRhaW5lcihhLGQpe3RyeXtyZXR1cm4gdGhpcy5fY29udGFpbmVySW5qZWN0b3IuZ2V0KGEsZCl9Y2F0Y2h7cmV0''@;'; put 'put ''dXJuIGR9fXRyaWdnZXJEb0NoZWNrKGEsZCl7aWYoYSl7Y29uc3QgaD1hLmRpZmYoZCk7aCYmaC5mb3JFYWNoQ2hhbmdlZEl0ZW0oZj0+eyhmLmtleT09PVpZLkZPUk18fGYua2V5PT09WlkuTU9ERUwpJiZmLmN1cnJlbnRWYWx1ZSE9PWYucHJldmlvdXNWYWx1ZSYmdGhpcy50cmlnZ2VyVmFs''@;'; put 'put ''aWRhdGlvbigpfSl9fW1hcmtBc1RvdWNoZWQoKXt0aGlzLm5nQ29udHJvbCYmKHRoaXMubmdDb250cm9sLmNvbnRyb2wubWFya0FzVG91Y2hlZCgpLHRoaXMubmdDb250cm9sLmNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpKSx0aGlzLm5nQ29udHJvbFNlcnZpY2UmJnRoaXMubmdD''@;'; put 'put ''b250cm9sU2VydmljZS5oYXNBZGRpdGlvbmFsQ29udHJvbHMmJnRoaXMubmdDb250cm9sU2VydmljZS5hZGRpdGlvbmFsQ29udHJvbHM/LmZvckVhY2goYT0+e2EuY29udHJvbC5tYXJrQXNUb3VjaGVkKCksYS5jb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKX0pfXNldEFyaWFEZXNj''@;'; put 'put ''cmliZWRCeShhKXtpZihhLnNob3cpe2NvbnN0IGQ9dGhpcy5nZXRBcmlhRGVzY3JpYmVkQnlJZChhKTtpZihudWxsIT09ZClyZXR1cm4gdm9pZCB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsImFyaWEtZGVzY3JpYmVkYnkiLGQpfXRoaXMucmVuZGVy''@;'; put 'put ''ZXIucmVtb3ZlQXR0cmlidXRlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwiYXJpYS1kZXNjcmliZWRieSIpfWdldEFyaWFEZXNjcmliZWRCeUlkKGEpe2NvbnN0IGQ9dGhpcy5jb250YWluZXJJZFNlcnZpY2U/LmlkfHx0aGlzLmNvbnRyb2xJZFNlcnZpY2U/LmlkO2lmKCFkKXJldHVybiBudWxs''@;'; put 'put ''O2NvbnN0IGg9W2Ake2R9LWhlbHBlcmBdO3JldHVybiBhLnNob3dJbnZhbGlkP2gucHVzaChgJHtkfS1lcnJvcmApOmEuc2hvd1ZhbGlkJiZoLnB1c2goYCR7ZH0tc3VjY2Vzc2ApLGguam9pbigiICIpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShH''@;'; put 'put ''ZShEbyksR2UoajYpLEdlKERzKSxHZShkMSksR2UoRW8pLEdlKEppKSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsaG9zdFZhcnM6MSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJkZ0KCJibHVyIixmdW5jdGlvbigpe3JldHVybiBkLnRyaWdnZXJWYWxpZGF0aW9uKCl9KSwyJmEm''@;'; put 'put ''Jm9wKCJpZCIsZC5pZCl9LGlucHV0czp7aWQ6ImlkIn19KSxjfSkoKSxRMWU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMubGF5b3V0U2VydmljZT1hLHRoaXMubWFya0NvbnRyb2xTZXJ2aWNlPWR9c2V0IGxhYmVsU2l6ZShhKXtjb25zdCBkPXBhcnNlSW50KGEsMTApfHwy''@;'; put 'put ''O3RoaXMubGF5b3V0U2VydmljZS5sYWJlbFNpemU9ZH1vbkZvcm1TdWJtaXQoKXt0aGlzLm1hcmtBc1RvdWNoZWQoKX1tYXJrQXNUb3VjaGVkKCl7dGhpcy5tYXJrQ29udHJvbFNlcnZpY2UubWFya0FzVG91Y2hlZCgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5l''@;'; put 'put ''dyhhfHxjKShHZShDcCksR2UoVVkpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyRm9ybSIsIiJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZhbyhoLGRzLDUpLDImYSl7bGV0IGY7Q2koZj1TaSgpKSYmKGQubGFiZWxzPWYpfX0s''@;'; put 'put ''aG9zdFZhcnM6Nixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJkZ0KCJzdWJtaXQiLGZ1bmN0aW9uKCl7cmV0dXJuIGQub25Gb3JtU3VibWl0KCl9KSwyJmEmJlRyKCJjbHItZm9ybSIsITApKCJjbHItZm9ybS1ob3Jpem9udGFsIixkLmxheW91dFNlcnZpY2UuaXNIb3Jpem9udGFs''@;'; put 'put ''KCkpKCJjbHItZm9ybS1jb21wYWN0IixkLmxheW91dFNlcnZpY2UuaXNDb21wYWN0KCkpfSxpbnB1dHM6e2xhYmVsU2l6ZTpbTm4uTm9uZSwiY2xyTGFiZWxTaXplIiwibGFiZWxTaXplIl19LGZlYXR1cmVzOltkYShbQ3AsVVldKV19KSxjfSkoKSxhdT0oKCk9PntjbGFzcyBje2NvbnN0cnVj''@;'; put 'put ''dG9yKCl7VHMuYWRkSWNvbnModmgsYmgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltSYSxBc119KSxjfSkoKTtjb25zdCBXWT1uZXcgU3QoIklTX1RPR0dM''@;'; put 'put ''RSIpLFJVZT17cHJvdmlkZTpXWSx1c2VGYWN0b3J5OmZ1bmN0aW9uIElVZSgpe3JldHVybiBuZXcgZWkoITEpfX07bGV0IFNoPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy50b2dnbGU9ITEsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGEu''@;'; put 'put ''c3Vic2NyaWJlKGQ9Pnt0aGlzLnRvZ2dsZT1kfSkpfW5nT25Jbml0KCl7dGhpcy5sYWJlbCYmdGhpcy5sYWJlbC5kaXNhYmxlR3JpZCgpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0''@;'; put 'put ''aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoV1kpKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWNoZWNrYm94LXdyYXBwZXIiXSxbImNsci10b2dnbGUtd3JhcHBlciJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiYoYW8oaCxkcyw3''@;'; put 'put ''KSxhbyhoLElkLDcpKSwyJmEpe2xldCBmO0NpKGY9U2koKSkmJihkLmxhYmVsPWYuZmlyc3QpLENpKGY9U2koKSkmJihkLmNoZWNrYm94PWYuZmlyc3QpfX0saG9zdFZhcnM6Nixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJlRyKCJjbHItY2hlY2tib3gtd3JhcHBlciIsIWQudG9n''@;'; put 'put ''Z2xlKSgiY2xyLWNoZWNrYm94LXdyYXBwZXItZGlzYWJsZWQiLG51bGw9PWQuY2hlY2tib3g/bnVsbDpkLmNoZWNrYm94LmNvbnRyb2xEaXNhYmxlZCkoImNsci10b2dnbGUtd3JhcHBlciIsZC50b2dnbGUpfSxmZWF0dXJlczpbZGEoW0NoLFJVZV0pXSxuZ0NvbnRlbnRTZWxlY3RvcnM6REhl''@;'; put 'put ''LGRlY2xzOjMsdmFyczoxLGNvbnN0czpbWzQsIm5nSWYiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYShrSGUpLFlyKDApLFlyKDEsMSksZ3QoMixJSGUsMSwwLCJsYWJlbCIsMCkpLDImYSYmKGZlKDIpLE1lKCJuZ0lmIiwhZC5sYWJlbCkpfSxkZXBlbmRlbmNpZXM6W2JhLGRz''@;'; put 'put ''XSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxJZD0oKCk9PntjbGFzcyBjIGV4dGVuZHMgQzd7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0pe3N1cGVyKGEsU2gsZCxoLGYsdiksdGhpcy5jb250cm9sPWgsdGhpcy50b2dnbGU9TX1nZXQgY29udHJvbERpc2FibGVkKCl7cmV0dXJuIHRoaXMuY29u''@;'; put 'put ''dHJvbD8uZGlzYWJsZWR9bmdPbkluaXQoKXtzdXBlci5uZ09uSW5pdCgpO2NvbnN0IGE9dGhpcy5nZXRQcm92aWRlckZyb21Db250YWluZXIoV1ksbnVsbCk7YSYmbnVsbCE9PXRoaXMudG9nZ2xlJiZhLm5leHQoITApfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5l''@;'; put 'put ''dyhhfHxjKShHZShEbyksR2UoRHMpLEdlKGQxLDEwKSxHZShFbyksR2UoSmkpLElmKCJjbHJUb2dnbGUiKSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsckNoZWNrYm94IiwiIl0sWyIiLCJjbHJUb2dnbGUiLCIiXV0saG9zdFZhcnM6MSxob3N0QmluZGluZ3M6''@;'; put 'put ''ZnVuY3Rpb24oYSxkKXsyJmEmJmhyKCJyb2xlIixudWxsIT09ZC50b2dnbGU/InN3aXRjaCI6bnVsbCl9LGZlYXR1cmVzOlt3YV19KSxjfSkoKSxCeT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgdzd7Y29uc3RydWN0b3IoYSxkLGgsZil7c3VwZXIoZixhLGQsaCksdGhpcy5sYXlvdXRTZXJ2aWNl''@;'; put 'put ''PWEsdGhpcy5jb250cm9sQ2xhc3NTZXJ2aWNlPWQsdGhpcy5uZ0NvbnRyb2xTZXJ2aWNlPWgsdGhpcy5pZkNvbnRyb2xTdGF0ZVNlcnZpY2U9Zix0aGlzLmlubGluZT0hMX1nZXQgY2xySW5saW5lKCl7cmV0dXJuIHRoaXMuaW5saW5lfXNldCBjbHJJbmxpbmUoYSl7dGhpcy5pbmxpbmU9InN0''@;'; put 'put ''cmluZyI9PXR5cGVvZiBhPyJmYWxzZSIhPT1hOiEhYX1nZXQgYWxsQ2hlY2tib3hlc0Rpc2FibGVkKCl7cmV0dXJuIHRoaXMuY29udHJvbD8uZGlzYWJsZWQmJighdGhpcy5hZGRpdGlvbmFsQ29udHJvbHM/Lmxlbmd0aHx8dGhpcy5hZGRpdGlvbmFsQ29udHJvbHMuZXZlcnkoYT0+YS5kaXNh''@;'; put 'put ''YmxlZCkpfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuc2V0QXJpYVJvbGVzKCl9c2V0QXJpYVJvbGVzKCl7dGhpcy5yb2xlPXRoaXMuY2hlY2tib3hlcy5sZW5ndGg/Imdyb3VwIjpudWxsfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShDcCw4''@;'; put 'put ''KSxHZShEZCksR2UoZjEpLEdlKGtkKSl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1jaGVja2JveC1jb250YWluZXIiXSxbImNsci10b2dnbGUtY29udGFpbmVyIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJmFvKGgsSWQsNSksMiZh''@;'; put 'put ''KXtsZXQgZjtDaShmPVNpKCkpJiYoZC5jaGVja2JveGVzPWYpfX0saG9zdFZhcnM6Nyxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJihocigicm9sZSIsZC5yb2xlKSxUcigiY2xyLWZvcm0tY29udHJvbCIsITApKCJjbHItZm9ybS1jb250cm9sLWRpc2FibGVkIixkLmFsbENoZWNr''@;'; put 'put ''Ym94ZXNEaXNhYmxlZCkoImNsci1yb3ciLGQuYWRkR3JpZCgpKSl9LGlucHV0czp7Y2xySW5saW5lOiJjbHJJbmxpbmUifSxmZWF0dXJlczpbZGEoW2tkLGYxLERkLHA3XSksd2FdLG5nQ29udGVudFNlbGVjdG9yczpMSGUsZGVjbHM6Nix2YXJzOjYsY29uc3RzOltbNCwibmdJZiJdLFsxLCJj''@;'; put 'put ''bHItY29udHJvbC1jb250YWluZXIiLDMsIm5nQ2xhc3MiXSxbImNsYXNzIiwiY2xyLXN1YnRleHQtd3JhcHBlciIsNCwibmdJZiJdLFsxLCJjbHItc3VidGV4dC13cmFwcGVyIl0sWyJjbGFzcyIsImNsci12YWxpZGF0ZS1pY29uIiwic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLCJzdGF0''@;'; put 'put ''dXMiLCJkYW5nZXIiLCJhcmlhLWhpZGRlbiIsInRydWUiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2xyLXZhbGlkYXRlLWljb24iLCJzaGFwZSIsImNoZWNrLWNpcmNsZSIsInN0YXR1cyIsInN1Y2Nlc3MiLCJhcmlhLWhpZGRlbiIsInRydWUiLDQsIm5nSWYiXSxbInNoYXBlIiwiZXhjbGFtYXRp''@;'; put 'put ''b24tY2lyY2xlIiwic3RhdHVzIiwiZGFuZ2VyIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJjbHItdmFsaWRhdGUtaWNvbiJdLFsic2hhcGUiLCJjaGVjay1jaXJjbGUiLCJzdGF0dXMiLCJzdWNjZXNzIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJjbHItdmFsaWRhdGUtaWNvbiJdXSx0ZW1w''@;'; put 'put ''bGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKFJIZSksWXIoMCksZ3QoMSxPSGUsMSwwLCJsYWJlbCIsMCksZGUoMiwiZGl2IiwxKSxZcigzLDEpLGd0KDQsUEhlLDIsMCwiZGl2IiwyKSg1LEJIZSw1LDQsImRpdiIsMiksaGUoKSksMiZhJiYoZmUoKSxNZSgibmdJZiIsIWQubGFiZWwmJmQu''@;'; put 'put ''YWRkR3JpZCgpKSxmZSgpLFRyKCJjbHItY29udHJvbC1pbmxpbmUiLGQuY2xySW5saW5lKSxNZSgibmdDbGFzcyIsZC5jb250cm9sQ2xhc3MoKSksZmUoMiksTWUoIm5nSWYiLGQuc2hvd0hlbHBlciksZmUoKSxNZSgibmdJZiIsZC5zaG93SW52YWxpZHx8ZC5zaG93VmFsaWQpKX0sZGVwZW5k''@;'; put 'put ''ZW5jaWVzOlt3dSxiYSxycyxkc10sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksTFVlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtUcy5hZGRJY29ucyh2aCxiaCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlw''@;'; put 'put ''ZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1JhLEFzLGF1LEJ4LGF1XX0pLGN9KSgpO2Z1bmN0aW9uIHFmKGMpe3JldHVybiBudWxsIT09YyYmKCJzdHJpbmciPT10eXBlb2YgYz9jLmxlbmd0aD49MDoiYm9vbGVhbiI9PXR5cGVvZiBjJiZjKX1sZXQgUmQ9KCgpPT57Y2xhc3MgY3tn''@;'; put 'put ''ZXQgc3Bpbm5lckNsYXNzKCl7cmV0dXJuITB9Z2V0IGlubGluZUNsYXNzKCl7cmV0dXJuIHRoaXMuX2lubGluZX1zZXQgY2xySW5saW5lKGEpe3RoaXMuX2lubGluZT1xZihhKX1nZXQgaW52ZXJzZUNsYXNzKCl7cmV0dXJuIHRoaXMuX2ludmVyc2V9c2V0IGNsckludmVyc2UoYSl7dGhpcy5f''@;'; put 'put ''aW52ZXJzZT1xZihhKX1nZXQgc21hbGxDbGFzcygpe3JldHVybiB0aGlzLl9zbWFsbH1zZXQgY2xyU21hbGwoYSl7dGhpcy5fc21hbGw9cWYoYSl9Z2V0IG1lZGl1bUNsYXNzKCl7cmV0dXJuIXRoaXMuX3NtYWxsJiZ0aGlzLl9tZWRpdW19c2V0IGNsck1lZGl1bShhKXt0aGlzLl9tZWRpdW09''@;'; put 'put ''cWYoYSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItc3Bpbm5lciJdXSxob3N0VmFyczoxMSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJihocigiYXJpYS1idXN5''@;'; put 'put ''IiwhMCksVHIoInNwaW5uZXIiLGQuc3Bpbm5lckNsYXNzKSgic3Bpbm5lci1pbmxpbmUiLGQuaW5saW5lQ2xhc3MpKCJzcGlubmVyLWludmVyc2UiLGQuaW52ZXJzZUNsYXNzKSgic3Bpbm5lci1zbSIsZC5zbWFsbENsYXNzKSgic3Bpbm5lci1tZCIsZC5tZWRpdW1DbGFzcykpfSxpbnB1dHM6''@;'; put 'put ''e2NscklubGluZToiY2xySW5saW5lIixjbHJJbnZlcnNlOiJjbHJJbnZlcnNlIixjbHJTbWFsbDoiY2xyU21hbGwiLGNsck1lZGl1bToiY2xyTWVkaXVtIn0sbmdDb250ZW50U2VsZWN0b3JzOnlvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoKSxZcigw''@;'; put 'put ''KSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLGp5PSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1JhXX0pLGN9KSgpO3ZhciBibT1m''@;'; put 'put ''dW5jdGlvbihjKXtyZXR1cm4gYy5WRVJUSUNBTD0idmVydGljYWwiLGMuSE9SSVpPTlRBTD0iaG9yaXpvbnRhbCIsYy5CT1RIPSJib3RoIixjfShibXx8e30pO2xldCBlZGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMuZWxlbWVudFJlZj1hLHRoaXMucGxhdGZvcm1JZD1k''@;'; put 'put ''fWdldCBuYXRpdmVFbGVtZW50KCl7cmV0dXJuIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50fWZvY3VzKCl7dGwodGhpcy5wbGF0Zm9ybUlkKSYmdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBu''@;'; put 'put ''ZXcoYXx8YykoR2UoSmkpLEdlKGlvKSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNscktleUZvY3VzSXRlbSIsIiJdXX0pLGN9KSgpLHp5PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5lbGVtZW50UmVmPWEsdGhpcy5kaXJlY3Rpb249Ym0uVkVS''@;'; put 'put ''VElDQUwsdGhpcy5mb2N1c09uTG9hZD0hMSx0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5mb2N1c0NoYW5nZT1uZXcgS3IsdGhpcy5fY3VycmVudD0wfWdldCBmb2N1c2FibGVJdGVtcygpe3JldHVybiB0aGlzLl9mb2N1c2FibGVJdGVtcz90aGlzLl9mb2N1c2FibGVJdGVtczp0aGlzLmNs''@;'; put 'put ''cktleUZvY3VzSXRlbXM/dGhpcy5jbHJLZXlGb2N1c0l0ZW1zLnRvQXJyYXkoKTpbXX1zZXQgZm9jdXNhYmxlSXRlbXMoYSl7QXJyYXkuaXNBcnJheShhKSYmYS5sZW5ndGgmJih0aGlzLl9mb2N1c2FibGVJdGVtcz1hLHRoaXMuaW5pdGlhbGl6ZUZvY3VzKCkpfWdldCBuYXRpdmVFbGVtZW50''@;'; put 'put ''KCl7cmV0dXJuIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50fWdldCBjdXJyZW50KCl7cmV0dXJuIHRoaXMuX2N1cnJlbnR9c2V0IGN1cnJlbnQoYSl7dGhpcy5fY3VycmVudCE9PWEmJih0aGlzLl9jdXJyZW50PWEpfWdldCBjdXJyZW50SXRlbSgpe3JldHVybiB0aGlzLmZvY3VzYWJs''@;'; put 'put ''ZUl0ZW1zW3RoaXMuX2N1cnJlbnRdfWdldCBjdXJyZW50SXRlbUVsZW1lbnQoKXtyZXR1cm4gdGhpcy5jdXJyZW50SXRlbS5uYXRpdmVFbGVtZW50P3RoaXMuY3VycmVudEl0ZW0ubmF0aXZlRWxlbWVudDp0aGlzLmN1cnJlbnRJdGVtfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuc3Vic2Ny''@;'; put 'put ''aXB0aW9ucy5wdXNoKHRoaXMubGlzdGVuRm9ySXRlbVVwZGF0ZXMoKSksdGhpcy5pbml0aWFsaXplRm9jdXMoKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9aGFuZGxlS2V5Ym9hcmRFdmVudChhKXtpZih0aGlzLmN1cnJlbnRJ''@;'; put 'put ''dGVtRWxlbWVudCE9PWEudGFyZ2V0KXtjb25zdCBkPXRoaXMuZ2V0SXRlbVBvc2l0aW9uKGEudGFyZ2V0KTt0aGlzLnBvc2l0aW9uSW5SYW5nZShkKSYmKHRoaXMuY3VycmVudD1kKX10aGlzLnByZXZLZXlQcmVzc2VkKGEpJiZ0aGlzLmN1cnJlbnRGb2N1c0lzTm90Rmlyc3RJdGVtKCk/dGhp''@;'; put 'put ''cy5tb3ZlVG8odGhpcy5jdXJyZW50LTEpOnRoaXMubmV4dEtleVByZXNzZWQoYSkmJnRoaXMuY3VycmVudEZvY3VzSXNOb3RMYXN0SXRlbSgpP3RoaXMubW92ZVRvKHRoaXMuY3VycmVudCsxKTphLmNvZGU9PT1nYS5Ib21lP3RoaXMubW92ZVRvKDApOmEuY29kZT09PWdhLkVuZCYmdGhpcy5t''@;'; put 'put ''b3ZlVG8odGhpcy5mb2N1c2FibGVJdGVtcy5sZW5ndGgtMSksUlkoYSl9c2V0Q2xpY2tlZEl0ZW1DdXJyZW50KGEpe2NvbnN0IGQ9dGhpcy5nZXRJdGVtUG9zaXRpb24oYS50YXJnZXQpO2Q+LTEmJnRoaXMubW92ZVRvKGQpfWZvY3VzQ3VycmVudCgpe3RoaXMuY3VycmVudEl0ZW0uZm9jdXMo''@;'; put 'put ''KSx0aGlzLmZvY3VzQ2hhbmdlLm5leHQodGhpcy5fY3VycmVudCl9bW92ZVRvKGEpe3RoaXMucG9zaXRpb25JblJhbmdlKGEpJiYodGhpcy5jdXJyZW50PWEsdGhpcy5mb2N1c0N1cnJlbnQoKSl9cG9zaXRpb25JblJhbmdlKGEpe3JldHVybiBhPj0wJiZhPHRoaXMuZm9jdXNhYmxlSXRlbXMu''@;'; put 'put ''bGVuZ3RofWN1cnJlbnRGb2N1c0lzTm90Rmlyc3RJdGVtKCl7cmV0dXJuIHRoaXMuX2N1cnJlbnQtMT49MH1jdXJyZW50Rm9jdXNJc05vdExhc3RJdGVtKCl7cmV0dXJuIHRoaXMuX2N1cnJlbnQrMTx0aGlzLmZvY3VzYWJsZUl0ZW1zLmxlbmd0aH1pbml0aWFsaXplRm9jdXMoKXt0aGlzLmZv''@;'; put 'put ''Y3VzYWJsZUl0ZW1zJiZ0aGlzLmZvY3VzYWJsZUl0ZW1zLmxlbmd0aCYmKHRoaXMuX2N1cnJlbnQ+PXRoaXMuZm9jdXNhYmxlSXRlbXMubGVuZ3RoJiYodGhpcy5fY3VycmVudD10aGlzLmZvY3VzYWJsZUl0ZW1zLmxlbmd0aC0xKSx0aGlzLmZvY3VzT25Mb2FkJiYodGhpcy5jdXJyZW50SXRl''@;'; put 'put ''bS5mb2N1cygpLHRoaXMuZm9jdXNDaGFuZ2UuZW1pdCgpKSl9bmV4dEtleVByZXNzZWQoYSl7Y29uc3QgZD1JMihhLmtleSk7c3dpdGNoKHRoaXMuZGlyZWN0aW9uKXtjYXNlIGJtLlZFUlRJQ0FMOnJldHVybiBkPT09Z2EuQXJyb3dEb3duO2Nhc2UgYm0uSE9SSVpPTlRBTDpyZXR1cm4gZD09''@;'; put 'put ''PWdhLkFycm93UmlnaHQ7Y2FzZSBibS5CT1RIOnJldHVybiBkPT09Z2EuQXJyb3dEb3dufHxkPT09Z2EuQXJyb3dSaWdodDtkZWZhdWx0OnJldHVybiExfX1wcmV2S2V5UHJlc3NlZChhKXtjb25zdCBkPUkyKGEua2V5KTtzd2l0Y2godGhpcy5kaXJlY3Rpb24pe2Nhc2UgYm0uVkVSVElDQUw6''@;'; put 'put ''cmV0dXJuIGQ9PT1nYS5BcnJvd1VwO2Nhc2UgYm0uSE9SSVpPTlRBTDpyZXR1cm4gZD09PWdhLkFycm93TGVmdDtjYXNlIGJtLkJPVEg6cmV0dXJuIGQ9PT1nYS5BcnJvd1VwfHxkPT09Z2EuQXJyb3dMZWZ0O2RlZmF1bHQ6cmV0dXJuITF9fWdldEl0ZW1Qb3NpdGlvbihhKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5fZm9jdXNhYmxlSXRlbXM/dGhpcy5mb2N1c2FibGVJdGVtcy5pbmRleE9mKGEpOnRoaXMuZm9jdXNhYmxlSXRlbXMubWFwKGQ9PmQubmF0aXZlRWxlbWVudCkuaW5kZXhPZihhKX1saXN0ZW5Gb3JJdGVtVXBkYXRlcygpe3JldHVybiB0aGlzLmNscktleUZvY3VzSXRlbXMuY2hhbmdlcy5z''@;'; put 'put ''dWJzY3JpYmUoKCk9Pnt0aGlzLmluaXRpYWxpemVGb2N1cygpfSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKEppKSl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNscktleUZvY3VzIiwiIl1dLGNvbnRlbnRRdWVy''@;'; put 'put ''aWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJmFvKGgsZWRlLDUpLDImYSl7bGV0IGY7Q2koZj1TaSgpKSYmKGQuY2xyS2V5Rm9jdXNJdGVtcz1mKX19LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmRnQoImtleWRvd24iLGZ1bmN0aW9uKGYpe3JldHVybiBkLmhhbmRsZUtleWJv''@;'; put 'put ''YXJkRXZlbnQoZil9KSgiY2xpY2siLGZ1bmN0aW9uKGYpe3JldHVybiBkLnNldENsaWNrZWRJdGVtQ3VycmVudChmKX0pfSxpbnB1dHM6e2RpcmVjdGlvbjpbTm4uTm9uZSwiY2xyRGlyZWN0aW9uIiwiZGlyZWN0aW9uIl0sZm9jdXNPbkxvYWQ6W05uLk5vbmUsImNsckZvY3VzT25Mb2FkIiwi''@;'; put 'put ''Zm9jdXNPbkxvYWQiXSxmb2N1c2FibGVJdGVtczpbTm4uTm9uZSwiY2xyS2V5Rm9jdXMiLCJmb2N1c2FibGVJdGVtcyJdfSxvdXRwdXRzOntmb2N1c0NoYW5nZToiY2xyRm9jdXNDaGFuZ2UifSxhdHRyczpqSGUsbmdDb250ZW50U2VsZWN0b3JzOnlvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRl''@;'; put 'put ''OmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoKSxZcigwKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLFlZPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIo''@;'; put 'put ''e2ltcG9ydHM6W1JhXX0pLGN9KSgpO2NsYXNzIE9VZXtjb250YWluc0l0ZW0obCl7cmV0dXJuISF0aGlzLm1vZGVsJiZ0aGlzLm1vZGVsLmluY2x1ZGVzKGwpfXNlbGVjdChsKXt0aGlzLmFkZEl0ZW0obCl9dW5zZWxlY3QobCl7dGhpcy5yZW1vdmVJdGVtKGwpfWlzRW1wdHkoKXtyZXR1cm4h''@;'; put 'put ''KHRoaXMubW9kZWwmJnRoaXMubW9kZWwubGVuZ3RoPjApfXBvcCgpe2xldCBsO3JldHVybiB0aGlzLm1vZGVsJiZ0aGlzLm1vZGVsLmxlbmd0aD4wJiYobD10aGlzLm1vZGVsW3RoaXMubW9kZWwubGVuZ3RoLTFdLHRoaXMucmVtb3ZlSXRlbShsKSksbH10b1N0cmluZyhsLGE9LTEpe2xldCBk''@;'; put 'put ''PSIiO3JldHVybiB0aGlzLm1vZGVsJiYoYT4tMT90aGlzLm1vZGVsW2FdJiYoZCs9bCYmdGhpcy5tb2RlbFthXVtsXT90aGlzLm1vZGVsW2FdW2xdOnRoaXMubW9kZWxbYV0udG9TdHJpbmcoKSk6dGhpcy5tb2RlbC5mb3JFYWNoKGg9PntkKz1sJiZoW2xdP2hbbF06aC50b1N0cmluZygpLGQr''@;'; put 'put ''PSIgIn0pKSxkLnRyaW0oKX1hZGRJdGVtKGwpe3RoaXMuY29udGFpbnNJdGVtKGwpfHwodGhpcy5tb2RlbD10aGlzLm1vZGVsfHxbXSx0aGlzLm1vZGVsLnB1c2gobCkpfXJlbW92ZUl0ZW0obCl7aWYobnVsbD09dGhpcy5tb2RlbClyZXR1cm47Y29uc3QgYT10aGlzLm1vZGVsLmluZGV4T2Yo''@;'; put 'put ''bCk7YT4tMSYmdGhpcy5tb2RlbC5zcGxpY2UoYSwxKSwwPT09dGhpcy5tb2RlbC5sZW5ndGgmJih0aGlzLm1vZGVsPW51bGwpfX1jbGFzcyBQVWV7Y29udGFpbnNJdGVtKGwpe3JldHVybiB0aGlzLm1vZGVsPT09bH1zZWxlY3QobCl7dGhpcy5tb2RlbD1sfXVuc2VsZWN0KGwpe3RoaXMuY29u''@;'; put 'put ''dGFpbnNJdGVtKGwpJiYodGhpcy5tb2RlbD1udWxsKX1pc0VtcHR5KCl7cmV0dXJuIXRoaXMubW9kZWx9cG9wKCl7Y29uc3QgbD10aGlzLm1vZGVsO3JldHVybiB0aGlzLm1vZGVsPW51bGwsbH10b1N0cmluZyhsKXtyZXR1cm4gdGhpcy5tb2RlbD9sJiZ0aGlzLm1vZGVsW2xdP3RoaXMubW9k''@;'; put 'put ''ZWxbbF06dGhpcy5tb2RlbC50b1N0cmluZygpOiIifX1jbGFzcyBGVWUgZXh0ZW5kcyBQVWV7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX2ZvY3VzQ2hhbmdlZD1uZXcgZWkobnVsbCl9Z2V0IGZvY3VzQ2hhbmdlZCgpe3JldHVybiB0aGlzLl9mb2N1c0NoYW5nZWQu''@;'; put 'put ''YXNPYnNlcnZhYmxlKCl9c2VsZWN0KGwpe3RoaXMubW9kZWwhPT1sJiYodGhpcy5tb2RlbD1sLHRoaXMuX2ZvY3VzQ2hhbmdlZC5uZXh0KGwpKX19bGV0IEhVZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5sb2FkaW5nPSExLHRoaXMuc2hvd0FsbE9wdGlvbnM9ITAsdGhpcy5f''@;'; put 'put ''Y3VycmVudElucHV0PSIiLHRoaXMuX2lucHV0Q2hhbmdlZD1uZXcgZWkoIiIpLHRoaXMuX3NlbGVjdGlvbkNoYW5nZWQ9bmV3IHl4KDEpLHRoaXMuaW5wdXRDaGFuZ2VkPXRoaXMuX2lucHV0Q2hhbmdlZC5hc09ic2VydmFibGUoKX1nZXQgY3VycmVudElucHV0KCl7cmV0dXJuIHRoaXMuX2N1''@;'; put 'put ''cnJlbnRJbnB1dH1zZXQgY3VycmVudElucHV0KGEpeyIiPT09YSYmIXRoaXMubXVsdGlzZWxlY3RhYmxlJiZ0aGlzLnNldFNlbGVjdGlvblZhbHVlKG51bGwpLHRoaXMuX2N1cnJlbnRJbnB1dD1hLHRoaXMuX2lucHV0Q2hhbmdlZC5uZXh0KGEpfWdldCBzZWxlY3Rpb25DaGFuZ2VkKCl7cmV0''@;'; put 'put ''dXJuIHRoaXMuX3NlbGVjdGlvbkNoYW5nZWQuYXNPYnNlcnZhYmxlKCl9Z2V0IG11bHRpc2VsZWN0YWJsZSgpe3JldHVybiB0aGlzLnNlbGVjdGlvbk1vZGVsIGluc3RhbmNlb2YgT1VlfXNlbGVjdChhKXtudWxsPT1hfHx0aGlzLnNlbGVjdGlvbk1vZGVsLmNvbnRhaW5zSXRlbShhKXx8KHRo''@;'; put 'put ''aXMuc2VsZWN0aW9uTW9kZWwuc2VsZWN0KGEpLHRoaXMuX3NlbGVjdGlvbkNoYW5nZWQubmV4dCh0aGlzLnNlbGVjdGlvbk1vZGVsKSl9dG9nZ2xlKGEpe251bGwhPWEmJih0aGlzLnNlbGVjdGlvbk1vZGVsLmNvbnRhaW5zSXRlbShhKT90aGlzLnNlbGVjdGlvbk1vZGVsLnVuc2VsZWN0KGEp''@;'; put 'put ''OnRoaXMuc2VsZWN0aW9uTW9kZWwuc2VsZWN0KGEpLHRoaXMuX3NlbGVjdGlvbkNoYW5nZWQubmV4dCh0aGlzLnNlbGVjdGlvbk1vZGVsKSl9dW5zZWxlY3QoYSl7bnVsbD09YXx8IXRoaXMuc2VsZWN0aW9uTW9kZWwuY29udGFpbnNJdGVtKGEpfHwodGhpcy5zZWxlY3Rpb25Nb2RlbC51bnNl''@;'; put 'put ''bGVjdChhKSx0aGlzLl9zZWxlY3Rpb25DaGFuZ2VkLm5leHQodGhpcy5zZWxlY3Rpb25Nb2RlbCkpfXNldFNlbGVjdGlvblZhbHVlKGEpeyF0aGlzLnNlbGVjdGlvbk1vZGVsfHx0aGlzLnNlbGVjdGlvbk1vZGVsLm1vZGVsPT09YXx8IXRoaXMuc2VsZWN0aW9uTW9kZWwubW9kZWwmJiFhfHwo''@;'; put 'put ''dGhpcy5zZWxlY3Rpb25Nb2RlbC5tb2RlbD1hLHRoaXMuX3NlbGVjdGlvbkNoYW5nZWQubmV4dCh0aGlzLnNlbGVjdGlvbk1vZGVsKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1''@;'; put 'put ''MDI3NWZhY30pLGN9KSgpO1oxZSgoKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMudG9nZ2xlU2VydmljZT1kLHRoaXMuc2VsZWN0aW9uU2VydmljZT1oLHRoaXMucGxhdGZvcm1JZD1mLHRoaXMucHNldWRvRm9jdXM9bmV3IEZVZSx0aGlzLm9wdGlvbkRhdGE9W10sdGhp''@;'; put 'put ''cy5oYW5kbGVGb2N1c1N1YnNjcmlwdGlvbigpLHRoaXMucmVuZGVyZXI9YS5jcmVhdGVSZW5kZXJlcihudWxsLG51bGwpfWdldCB0cmlnZ2VyKCl7cmV0dXJuIHRoaXMuX3RyaWdnZXJ9c2V0IHRyaWdnZXIoYSl7dGhpcy5fdHJpZ2dlcj1hLHRoaXMuYWRkRm9jdXNPbkJsdXJMaXN0ZW5lcihh''@;'; put 'put ''KX1nZXQgbGlzdGJveCgpe3JldHVybiB0aGlzLl9saXN0Ym94fXNldCBsaXN0Ym94KGEpe3RoaXMuX2xpc3Rib3g9YSx0aGlzLmFkZEZvY3VzT25CbHVyTGlzdGVuZXIoYSl9Z2V0IHRleHRJbnB1dCgpe3JldHVybiB0aGlzLl90ZXh0SW5wdXR9c2V0IHRleHRJbnB1dChhKXt0aGlzLl90ZXh0''@;'; put 'put ''SW5wdXQ9YSx0aGlzLnJlbmRlcmVyLmxpc3RlbihhLCJrZXlkb3duIixkPT4hdGhpcy5oYW5kbGVUZXh0SW5wdXQoZCkpLHRoaXMuYWRkRm9jdXNPbkJsdXJMaXN0ZW5lcihhKX1mb2N1c0lucHV0KCl7dGhpcy50ZXh0SW5wdXQmJnRsKHRoaXMucGxhdGZvcm1JZCkmJnRoaXMudGV4dElucHV0''@;'; put 'put ''LmZvY3VzKCl9Zm9jdXNGaXJzdEFjdGl2ZSgpe2lmKHRoaXMub3B0aW9uRGF0YS5sZW5ndGg+MClpZih0aGlzLnNlbGVjdGlvblNlcnZpY2Uuc2VsZWN0aW9uTW9kZWwuaXNFbXB0eSgpKXRoaXMucHNldWRvRm9jdXMuc2VsZWN0KHRoaXMub3B0aW9uRGF0YVswXSk7ZWxzZXtsZXQgYTthPXRo''@;'; put 'put ''aXMuc2VsZWN0aW9uU2VydmljZS5tdWx0aXNlbGVjdGFibGU/dGhpcy5zZWxlY3Rpb25TZXJ2aWNlLnNlbGVjdGlvbk1vZGVsLm1vZGVsWzBdOnRoaXMuc2VsZWN0aW9uU2VydmljZS5zZWxlY3Rpb25Nb2RlbC5tb2RlbDtjb25zdCBkPXRoaXMub3B0aW9uRGF0YS5maW5kKGg9PmgudmFsdWU9''@;'; put 'put ''PT1hKTt0aGlzLnBzZXVkb0ZvY3VzLnNlbGVjdChkfHx0aGlzLm9wdGlvbkRhdGFbMF0pLHRoaXMuc2Nyb2xsSW50b1NlbGVjdGVkTW9kZWwoImF1dG8iKX19YWRkT3B0aW9uVmFsdWVzKGEpe3RoaXMub3B0aW9uRGF0YT1hfWhhbmRsZUZvY3VzU3Vic2NyaXB0aW9uKCl7dGhpcy50b2dnbGVT''@;'; put 'put ''ZXJ2aWNlLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKGE9PnthfHwodGhpcy5wc2V1ZG9Gb2N1cy5tb2RlbD1udWxsKX0pfW1vdmVGb2N1c1RvKGEpe2xldCBkPXRoaXMub3B0aW9uRGF0YS5maW5kSW5kZXgoaD0+aC5lcXVhbHModGhpcy5wc2V1ZG9Gb2N1cy5tb2RlbCkpO2E9PT13aC5VUD8tMT09''@;'; put 'put ''PWR8fDA9PT1kP2Q9dGhpcy5vcHRpb25EYXRhLmxlbmd0aC0xOmQtLTphPT09d2guRE9XTiYmKC0xPT09ZHx8ZD09PXRoaXMub3B0aW9uRGF0YS5sZW5ndGgtMT9kPTA6ZCsrKSx0aGlzLnBzZXVkb0ZvY3VzLnNlbGVjdCh0aGlzLm9wdGlvbkRhdGFbZF0pLHRoaXMuc2Nyb2xsSW50b1NlbGVj''@;'; put 'put ''dGVkTW9kZWwoKX1vcGVuQW5kTW92ZVRvKGEpe3RoaXMudG9nZ2xlU2VydmljZS5vcGVuP3RoaXMubW92ZUZvY3VzVG8oYSk6KHRoaXMudG9nZ2xlU2VydmljZS5vcGVuQ2hhbmdlLnBpcGUoWWYoMSkpLnN1YnNjcmliZShkPT57ZCYmdGhpcy5tb3ZlRm9jdXNUbyhhKX0pLHRoaXMudG9nZ2xl''@;'; put 'put ''U2VydmljZS5vcGVuPSEwKX1oYW5kbGVUZXh0SW5wdXQoYSl7bGV0IGQ9ITE7Y29uc3QgaD1JMihhLmtleSk7aWYoYSlzd2l0Y2goaCl7Y2FzZSBnYS5FbnRlcjp0aGlzLnRvZ2dsZVNlcnZpY2Uub3BlbiYmdGhpcy5wc2V1ZG9Gb2N1cy5tb2RlbCYmKHRoaXMuc2VsZWN0aW9uU2VydmljZS5t''@;'; put 'put ''dWx0aXNlbGVjdGFibGU/dGhpcy5zZWxlY3Rpb25TZXJ2aWNlLnRvZ2dsZSh0aGlzLnBzZXVkb0ZvY3VzLm1vZGVsLnZhbHVlKTp0aGlzLnNlbGVjdGlvblNlcnZpY2Uuc2VsZWN0KHRoaXMucHNldWRvRm9jdXMubW9kZWwudmFsdWUpLGQ9ITApO2JyZWFrO2Nhc2UgZ2EuU3BhY2U6dGhpcy50''@;'; put 'put ''b2dnbGVTZXJ2aWNlLm9wZW58fCh0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj0hMCxkPSEwKTticmVhaztjYXNlIGdhLkFycm93VXA6dGhpcy5wcmV2ZW50Vmlld3BvcnRTY3JvbGxpbmcoYSksdGhpcy5vcGVuQW5kTW92ZVRvKHdoLlVQKSxkPSEwO2JyZWFrO2Nhc2UgZ2EuQXJyb3dEb3duOnRo''@;'; put 'put ''aXMucHJldmVudFZpZXdwb3J0U2Nyb2xsaW5nKGEpLHRoaXMub3BlbkFuZE1vdmVUbyh3aC5ET1dOKSxkPSEwO2JyZWFrO2RlZmF1bHQ6YS5rZXkhPT1nYS5UYWImJighdGhpcy5zZWxlY3Rpb25TZXJ2aWNlLm11bHRpc2VsZWN0YWJsZXx8YS5rZXkhPT1nYS5CYWNrc3BhY2UpJiZhLmtleSE9''@;'; put 'put ''PWdhLkVzY2FwZSYmIXRoaXMudG9nZ2xlU2VydmljZS5vcGVuJiYodGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49ITApfXJldHVybiBkfXNjcm9sbEludG9TZWxlY3RlZE1vZGVsKGE9InNtb290aCIpe3RoaXMucHNldWRvRm9jdXMubW9kZWwmJnRoaXMucHNldWRvRm9jdXMubW9kZWwuZWwmJnRo''@;'; put 'put ''aXMucHNldWRvRm9jdXMubW9kZWwuZWwuc2Nyb2xsSW50b1ZpZXcoe2JlaGF2aW9yOmEsYmxvY2s6ImNlbnRlciIsaW5saW5lOiJuZWFyZXN0In0pfXByZXZlbnRWaWV3cG9ydFNjcm9sbGluZyhhKXthLnByZXZlbnREZWZhdWx0KCksYS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX1hZGRG''@;'; put 'put ''b2N1c09uQmx1ckxpc3RlbmVyKGEpe3RsKHRoaXMucGxhdGZvcm1JZCkmJnRoaXMucmVuZGVyZXIubGlzdGVuKGEsImJsdXIiLGQ9Pnt0aGlzLmZvY3VzT3V0T2ZDb21wb25lbnQoZCkmJih0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj0hMSx0aGlzLmNvbXBvbmVudENkUmVmJiZ0aGlzLmNvbXBv''@;'; put 'put ''bmVudENkUmVmLmRldGVjdENoYW5nZXMoKSl9KX1mb2N1c091dE9mQ29tcG9uZW50KGEpe2NvbnN0IGQ9YS5yZWxhdGVkVGFyZ2V0fHxkb2N1bWVudC5hY3RpdmVFbGVtZW50O3JldHVybiEodGhpcy50ZXh0SW5wdXQuY29udGFpbnMoZCl8fHRoaXMudHJpZ2dlci5jb250YWlucyhkKXx8dGhp''@;'; put 'put ''cy5saXN0Ym94LmNvbnRhaW5zKGQpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoeHIoeDgpLHhyKHNjKSx4cihIVWUpLHhyKGlvKSl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCkpO2xldCBOVWU9''@;'; put 'put ''KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe1RzLmFkZEljb25zKHZoLGJoLEV5LHZ4KX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbUmEsUmMsQXMsWVks''@;'; put 'put ''YXUsTzIsVngsanksYXUsTzJdfSksY30pKCksR0w9KCgpPT57Y2xhc3MgYyBleHRlbmRzIHc3e31yZXR1cm4gYy5cdTAyNzVmYWM9KCgpPT57bGV0IGw7cmV0dXJuIGZ1bmN0aW9uKGQpe3JldHVybihsfHwobD1XcyhjKSkpKGR8fGMpfX0pKCksYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxl''@;'; put 'put ''Y3RvcnM6W1siY2xyLWlucHV0LWNvbnRhaW5lciJdXSxob3N0VmFyczo2LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmVHIoImNsci1mb3JtLWNvbnRyb2wiLCEwKSgiY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCIsbnVsbD09ZC5jb250cm9sP251bGw6ZC5jb250cm9sLmRpc2Fi''@;'; put 'put ''bGVkKSgiY2xyLXJvdyIsZC5hZGRHcmlkKCkpfSxmZWF0dXJlczpbZGEoW2tkLGYxLENoLERkXSksd2FdLG5nQ29udGVudFNlbGVjdG9yczpHSGUsZGVjbHM6MTMsdmFyczo3LGNvbnN0czpbWzQsIm5nSWYiXSxbMSwiY2xyLWNvbnRyb2wtY29udGFpbmVyIiwzLCJuZ0NsYXNzIl0sWzEsImNs''@;'; put 'put ''ci1pbnB1dC13cmFwcGVyIl0sWzEsImNsci1pbnB1dC1ncm91cCJdLFsiY2xhc3MiLCJjbHItdmFsaWRhdGUtaWNvbiIsInNoYXBlIiwiZXhjbGFtYXRpb24tY2lyY2xlIiwic3RhdHVzIiwiZGFuZ2VyIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci12YWxp''@;'; put 'put ''ZGF0ZS1pY29uIiwic2hhcGUiLCJjaGVjay1jaXJjbGUiLCJzdGF0dXMiLCJzdWNjZXNzIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiw0LCJuZ0lmIl0sWyJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIsInN0YXR1cyIsImRhbmdlciIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwiY2xyLXZhbGlk''@;'; put 'put ''YXRlLWljb24iXSxbInNoYXBlIiwiY2hlY2stY2lyY2xlIiwic3RhdHVzIiwic3VjY2VzcyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwiY2xyLXZhbGlkYXRlLWljb24iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYShZSGUpLFlyKDApLGd0KDEsJEhlLDEsMCwibGFiZWwiLDAp''@;'; put 'put ''LGRlKDIsImRpdiIsMSkoMywiZGl2IiwyKSg0LCJkaXYiLDMpLFlyKDUsMSksWXIoNiwyKSxZcig3LDMpLGhlKCksZ3QoOCxLSGUsMSwwLCJjZHMtaWNvbiIsNCkoOSxxSGUsMSwwLCJjZHMtaWNvbiIsNSksaGUoKSxndCgxMCxYSGUsMSwwLCJuZy1jb250ZW50IiwwKSgxMSxKSGUsMSwwLCJu''@;'; put 'put ''Zy1jb250ZW50IiwwKSgxMixRSGUsMSwwLCJuZy1jb250ZW50IiwwKSxoZSgpKSwyJmEmJihmZSgpLE1lKCJuZ0lmIiwhZC5sYWJlbCYmZC5hZGRHcmlkKCkpLGZlKCksTWUoIm5nQ2xhc3MiLGQuY29udHJvbENsYXNzKCkpLGZlKDYpLE1lKCJuZ0lmIixkLnNob3dJbnZhbGlkKSxmZSgpLE1l''@;'; put 'put ''KCJuZ0lmIixkLnNob3dWYWxpZCksZmUoKSxNZSgibmdJZiIsZC5zaG93SGVscGVyKSxmZSgpLE1lKCJuZ0lmIixkLnNob3dJbnZhbGlkKSxmZSgpLE1lKCJuZ0lmIixkLnNob3dWYWxpZCkpfSxkZXBlbmRlbmNpZXM6W3d1LGJhLHJzLGRzXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxaMT0o''@;'; put 'put ''KCk9PntjbGFzcyBjIGV4dGVuZHMgQzd7Y29uc3RydWN0b3IoYSxkLGgsZix2KXtzdXBlcihhLEdMLGQsaCxmLHYpLHRoaXMuaW5kZXg9MSwibnVtYmVyIj09PXRoaXMuZWwubmF0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoInR5cGUiKSYmY29uc29sZS53YXJuKCdXYXJuaW5nOiBJbnB1dHMg''@;'; put 'put ''b2YgdHlwZSAibnVtYmVyIiBzaG91bGQgdXRpbGl6ZSB0aGUgbnVtYmVyLWlucHV0IGNvbXBvbmVudCBmb3IgcHJvcGVyIGhhbmRsaW5nLlxuXG4gIEV4YW1wbGUgdXNhZ2U6XG4gIDxjbHItbnVtYmVyLWlucHV0LWNvbnRhaW5lcj5cbiAgICA8bGFiZWw+TnVtYmVyIElucHV0PC9sYWJlbD5c''@;'; put 'put ''biAgICA8aW5wdXQgY2xyTnVtYmVySW5wdXQgdHlwZT0ibnVtYmVyIi8+XG4gIDwvY2xyLW51bWJlci1pbnB1dC1jb250YWluZXI+XG4gICAgICAnKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoRG8pLEdlKERzKSxHZShkMSwxMCksR2UoRW8p''@;'; put 'put ''LEdlKEppKSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNscklucHV0IiwiIl1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZUcigiY2xyLWlucHV0IiwhMCl9LGZlYXR1cmVzOlt3YV19KSxjfSkoKSx0ZGU9KCgpPT57Y2xhc3Mg''@;'; put 'put ''Y3tjb25zdHJ1Y3Rvcigpe1RzLmFkZEljb25zKHZoLGJoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbUmEsUmMsQXMsYXUsYXVdfSksY30pKCksVXk9KCgp''@;'; put 'put ''PT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2ZvY3VzZWQ9bmV3IGVpKCExKX1nZXQgZm9jdXNDaGFuZ2UoKXtyZXR1cm4gdGhpcy5fZm9jdXNlZC5hc09ic2VydmFibGUoKX1zZXQgZm9jdXNlZChhKXt0aGlzLl9mb2N1c2VkLm5leHQoYSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5j''@;'; put 'put ''dGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLFZVZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7VHMuYWRkSWNvbnModmgsYmgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0''@;'; put 'put ''dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltSYSx0ZGUsQXNdfSksY30pKCksQlVlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1r''@;'; put 'put ''aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1JhLEFzLEJ4LHpjXX0pLGN9KSgpLGpVZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFy''@;'; put 'put ''KHtpbXBvcnRzOltSYSxBc119KSxjfSkoKSxHVWU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbUmEsQXMsTlldfSksY30pKCksaWRl''@;'; put 'put ''PSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJuZy1jb21wb25lbnQiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiZxYShTbCw1KSwyJmEpe2xl''@;'; put 'put ''dCBoO0NpKGg9U2koKSkmJihkLnRlbXBsYXRlPWguZmlyc3QpfX0sbmdDb250ZW50U2VsZWN0b3JzOnlvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoKSxndCgwLGxOZSwxLDAsIm5nLXRlbXBsYXRlIikpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSwk''@;'; put 'put ''VWU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbUmFdfSksY30pKCkseW09KCgpPT57Y2xhc3MgYyBleHRlbmRzIFJ5e31yZXR1cm4g''@;'; put 'put ''Yy5cdTAyNzVmYWM9KCgpPT57bGV0IGw7cmV0dXJuIGZ1bmN0aW9uKGQpe3JldHVybihsfHwobD1XcyhjKSkpKGR8fGMpfX0pKCksYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXRhYnMiXV0sZmVhdHVyZXM6W3dhXX0pLGN9KSgpLFM3PSgoKT0+e2NsYXNzIGMgZXh0''@;'; put 'put ''ZW5kcyBMeXtjb25zdHJ1Y3RvcihhLGQsaCxmKXtpZighZCl0aHJvdyBuZXcgRXJyb3IoImNsclRhYkxpbmsgYW5kIGNsci10YWItY29udGVudCBzaG91bGQgb25seSBiZSB1c2VkIGluc2lkZSBvZiBhIGNsci10YWJzIik7c3VwZXIoYSxkKSx0aGlzLmlmQWN0aXZlPWYsdGhpcy5pZD1ofWdl''@;'; put 'put ''dCBmbGF2b3IoKXtyZXR1cm4gdGhpcy5pZkFjdGl2ZS5jdXJyZW50PT09dGhpcy5pZH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoRXMpLEdlKHltLDgpLEdlKEZ5KSxHZShmNykpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpb''@;'; put 'put ''WyIiLCJjbHJUYWJMaW5rIiwiIl0sWyJjbHItdGFiLWNvbnRlbnQiXV0sZmVhdHVyZXM6W3dhXX0pLGN9KSgpO3ZhciBNNz1mdW5jdGlvbihjKXtyZXR1cm4gYy5IT1JJWk9OVEFMPSJob3Jpem9udGFsIixjLlZFUlRJQ0FMPSJ2ZXJ0aWNhbCIsY30oTTd8fHt9KTtsZXQgeng9KCgpPT57Y2xh''@;'; put 'put ''c3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMubGF5b3V0PU03LkhPUklaT05UQUwsdGhpcy5fY2hpbGRyZW49W119Z2V0IGNoaWxkcmVuKCl7cmV0dXJuIHRoaXMuX2NoaWxkcmVufWdldCBhY3RpdmVUYWIoKXtyZXR1cm4gdGhpcy5jaGlsZHJlbi5maW5kKGE9PmEuYWN0aXZlKX1nZXQgb3ZlcmZs''@;'; put 'put ''b3dUYWJzKCl7cmV0dXJuIHRoaXMubGF5b3V0PT09TTcuVkVSVElDQUw/W106dGhpcy5jaGlsZHJlbi5maWx0ZXIoYT0+ITA9PT1hLnRhYkxpbmsuaW5PdmVyZmxvdyl9cmVnaXN0ZXIoYSl7dGhpcy5fY2hpbGRyZW4ucHVzaChhKX11bnJlZ2lzdGVyKGEpe2NvbnN0IGQ9dGhpcy5jaGlsZHJl''@;'; put 'put ''bi5pbmRleE9mKGEpO2Q+LTEmJnRoaXMuY2hpbGRyZW4uc3BsaWNlKGQsMSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLEtVZT0wLF9tPSgoKT0+e2Ns''@;'; put 'put ''YXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuaWZBY3RpdmVTZXJ2aWNlPWEsdGhpcy5pZD1kLHRoaXMudGFic1NlcnZpY2U9aCx0aGlzLnRhYkNvbnRlbnRJZHx8KHRoaXMudGFiQ29udGVudElkPSJjbHItdGFiLWNvbnRlbnQtIitLVWUrKyl9Z2V0IGFjdGl2ZSgpe3JldHVybiB0aGlz''@;'; put 'put ''LmlmQWN0aXZlU2VydmljZS5jdXJyZW50PT09dGhpcy5pZH1nZXQgYXJpYUxhYmVsbGVkQnkoKXtyZXR1cm4gdGhpcy50YWJzU2VydmljZS5jaGlsZHJlbi5maW5kKGE9PmEudGFiTGluay5pZD09PXRoaXMuaWQpPy50YWJMaW5rPy50YWJMaW5rSWR9c2V0IHRlbXBsYXRlUmVmKGEpe3RoaXMu''@;'; put 'put ''dmlld1JlZj10aGlzLnRhYnNTZXJ2aWNlLnRhYkNvbnRlbnRWaWV3Q29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyhhKX1uZ09uRGVzdHJveSgpe2NvbnN0IGE9dGhpcy50YWJzU2VydmljZS50YWJDb250ZW50Vmlld0NvbnRhaW5lci5pbmRleE9mKHRoaXMudmlld1JlZik7YT4tMSYmdGhp''@;'; put 'put ''cy50YWJzU2VydmljZS50YWJDb250ZW50Vmlld0NvbnRhaW5lci5yZW1vdmUoYSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKGY3KSxHZShGeSksR2UoengpKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXRhYi1j''@;'; put 'put ''b250ZW50Il1dLHZpZXdRdWVyeTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmcWEoY05lLDcpLDImYSl7bGV0IGg7Q2koaD1TaSgpKSYmKGQudGVtcGxhdGVSZWY9aC5maXJzdCl9fSxpbnB1dHM6e3RhYkNvbnRlbnRJZDpbTm4uTm9uZSwiaWQiLCJ0YWJDb250ZW50SWQiXX0sbmdDb250ZW50U2Vs''@;'; put 'put ''ZWN0b3JzOnlvLGRlY2xzOjIsdmFyczowLGNvbnN0czpbWyJ0YWJDb250ZW50UHJvamVjdGVkUmVmIiwiIl0sWyJyb2xlIiwidGFicGFuZWwiLDEsInRhYi1jb250ZW50IiwzLCJpZCIsImhpZGRlbiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKCksZ3QoMCx1TmUsMiw2LCJu''@;'; put 'put ''Zy10ZW1wbGF0ZSIsbnVsbCwwLEljKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLHFVZT0wO2NvbnN0ICRZPW5ldyBTdCgiVEFCU19JRCIpLEpVZT17cHJvdmlkZTokWSx1c2VGYWN0b3J5OmZ1bmN0aW9uIFhVZSgpe3JldHVybiJjbHItdGFicy0iK3FVZSsrfX07bGV0IFFVZT0wLHdtPSgo''@;'; put 'put ''KT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0sRCl7dGhpcy5pZkFjdGl2ZVNlcnZpY2U9YSx0aGlzLmlkPWQsdGhpcy5lbD1oLHRoaXMudGFic1NlcnZpY2U9TSx0aGlzLnRhYnNJZD1ELHRoaXMudGFiTGlua0lkfHwodGhpcy50YWJMaW5rSWQ9ImNsci10YWItbGluay0iK1FV''@;'; put 'put ''ZSsrKTtjb25zdCBaPWYucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoaWRlKTt0aGlzLnRlbXBsYXRlUmVmQ29udGFpbmVyPXYuY3JlYXRlQ29tcG9uZW50KFosdm9pZCAwLHZvaWQgMCxbW2gubmF0aXZlRWxlbWVudF1dKS5pbnN0YW5jZX1nZXQgaW5PdmVyZmxvdygpe3JldHVybiB0aGlzLl9p''@;'; put 'put ''bk92ZXJmbG93JiZ0aGlzLnRhYnNTZXJ2aWNlLmxheW91dCE9PU03LlZFUlRJQ0FMfXNldCBpbk92ZXJmbG93KGEpe3RoaXMuX2luT3ZlcmZsb3c9YX1nZXQgYWRkTGlua0NsYXNzZXMoKXtyZXR1cm4hdGhpcy5pbk92ZXJmbG93fWdldCBhcmlhQ29udHJvbHMoKXtyZXR1cm4gdGhpcy50YWJz''@;'; put 'put ''U2VydmljZS5jaGlsZHJlbi5maW5kKGE9PmEudGFiTGluaz09PXRoaXMpPy50YWJDb250ZW50Py50YWJDb250ZW50SWR9Z2V0IGFjdGl2ZSgpe3JldHVybiB0aGlzLmlmQWN0aXZlU2VydmljZS5jdXJyZW50PT09dGhpcy5pZH1nZXQgdGFiaW5kZXgoKXtyZXR1cm4gdGhpcy5hY3RpdmU/MDot''@;'; put 'put ''MX1hY3RpdmF0ZSgpe3RoaXMuaWZBY3RpdmVTZXJ2aWNlLmN1cnJlbnQ9dGhpcy5pZH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoZjcpLEdlKEZ5KSxHZShKaSksR2UoVzUpLEdlKERvKSxHZSh6eCksR2UoJFkpKX0sYy5cdTAyNzVkaXI9RXIo''@;'; put 'put ''e3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyVGFiTGluayIsIiJdXSxob3N0QXR0cnM6WyJyb2xlIiwidGFiIiwidHlwZSIsImJ1dHRvbiJdLGhvc3RWYXJzOjEyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLmFjdGl2YXRl''@;'; put 'put ''KCl9KSwyJmEmJihvcCgiaWQiLGQudGFiTGlua0lkKSxocigiYXJpYS1jb250cm9scyIsZC5hcmlhQ29udHJvbHMpKCJhcmlhLXNlbGVjdGVkIixkLmFjdGl2ZSkoInRhYmluZGV4IixkLnRhYmluZGV4KSxUcigiYnRuIiwhMCkoImJ0bi1saW5rIixkLmFkZExpbmtDbGFzc2VzKSgibmF2LWxp''@;'; put 'put ''bmsiLGQuYWRkTGlua0NsYXNzZXMpKCJhY3RpdmUiLGQuYWN0aXZlKSl9LGlucHV0czp7dGFiTGlua0lkOltObi5Ob25lLCJpZCIsInRhYkxpbmtJZCJdLGluT3ZlcmZsb3c6W05uLk5vbmUsImNsclRhYkxpbmtJbk92ZXJmbG93IiwiaW5PdmVyZmxvdyJdfX0pLGN9KSgpLENtPSgoKT0+e2Ns''@;'; put 'put ''YXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuaWZBY3RpdmVTZXJ2aWNlPWEsdGhpcy5pZD1kLHRoaXMudGFic1NlcnZpY2U9aCxoLnJlZ2lzdGVyKHRoaXMpfWdldCBhY3RpdmUoKXtyZXR1cm4gdGhpcy5pZkFjdGl2ZVNlcnZpY2UuY3VycmVudD09PXRoaXMuaWR9bmdPbkRlc3Ryb3ko''@;'; put 'put ''KXt0aGlzLnRhYnNTZXJ2aWNlLnVucmVnaXN0ZXIodGhpcyl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKGY3KSxHZShGeSksR2UoengpKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXRhYiJdXSxjb250ZW50UXVl''@;'; put 'put ''cmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiYoYW8oaCx3bSw3KSxhbyhoLF9tLDcpKSwyJmEpe2xldCBmO0NpKGY9U2koKSkmJihkLnRhYkxpbms9Zi5maXJzdCksQ2koZj1TaSgpKSYmKGQudGFiQ29udGVudD1mLmZpcnN0KX19LGZlYXR1cmVzOltkYShbblVlXSldLG5nQ29udGVudFNl''@;'; put 'put ''bGVjdG9yczp5byxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKCksWXIoMCkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxhZGU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUw''@;'; put 'put ''Mjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsclRhYkFjdGlvbiIsIiJdXSxob3N0QXR0cnM6WyJ0YWJpbmRleCIsIjAiXX0pLGN9KSgpLEtZPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNt''@;'; put 'put ''cD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItdGFiLW92ZXJmbG93LWNvbnRlbnQiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJlRyKCJkcm9wZG93bi1tZW51IiwhMCl9LG5nQ29udGVudFNlbGVjdG9yczp5byxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0''@;'; put 'put ''ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKCksWXIoMCkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSx4Nz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdil7dGhpcy5pZkFjdGl2ZVNlcnZpY2U9YSx0aGlzLnRvZ2dsZVNlcnZpY2U9ZCx0aGlzLnRhYnNTZXJ2aWNlPWgsdGhp''@;'; put 'put ''cy50YWJzSWQ9Zix0aGlzLmNvbW1vblN0cmluZ3M9dix0aGlzLnRhYkxpbmtFbGVtZW50cz1bXSx0aGlzLl9tb3VzZWRvd249ITEsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMuX3RhYkxpbmtEaXJlY3RpdmVzPVtdfWdldCBsYXlvdXQoKXtyZXR1cm4gdGhpcy50YWJzU2VydmljZS5sYXlv''@;'; put 'put ''dXR9c2V0IGxheW91dChhKXtPYmplY3Qua2V5cyhNNykubWFwKGQ9Pk03W2RdKS5pbmRleE9mKGEpPj0wJiYodGhpcy50YWJzU2VydmljZS5sYXlvdXQ9YSl9Z2V0IHRhYkxpbmtEaXJlY3RpdmVzKCl7cmV0dXJuIHRoaXMuX3RhYkxpbmtEaXJlY3RpdmVzfWdldCBhY3RpdmVUYWJJbk92ZXJm''@;'; put 'put ''bG93KCl7cmV0dXJuIHRoaXMudGFic1NlcnZpY2Uub3ZlcmZsb3dUYWJzLmluZGV4T2YodGhpcy50YWJzU2VydmljZS5hY3RpdmVUYWIpPi0xfWdldCBhY3RpdmVUYWJQb3NpdGlvbigpe3JldHVybiB0aGlzLl90YWJMaW5rRGlyZWN0aXZlcy5maW5kSW5kZXgoYT0+YS5hY3RpdmUpfWdldCBp''@;'; put 'put ''c0N1cnJlbnRJbk92ZXJmbG93KCl7cmV0dXJuIHRoaXMua2V5Rm9jdXMuY3VycmVudD49dGhpcy5vdmVyZmxvd1Bvc2l0aW9ufWdldCBpc1ZlcnRpY2FsKCl7cmV0dXJuIHRoaXMubGF5b3V0PT09TTcuVkVSVElDQUx9c2V0IHRhYk92ZXJmbG93RWwoYSl7dGhpcy5fdGFiT3ZlcmZsb3dFbD1h''@;'; put 'put ''JiZhLm5hdGl2ZUVsZW1lbnQsdGhpcy50b2dnbGVTZXJ2aWNlLm9wZW4mJmEmJnRoaXMua2V5Rm9jdXMuZm9jdXNDdXJyZW50KCl9Z2V0IG92ZXJmbG93UG9zaXRpb24oKXtyZXR1cm4gdGhpcy5fdGFiTGlua0RpcmVjdGl2ZXMuZmlsdGVyKGE9PiFhLmluT3ZlcmZsb3cpLmxlbmd0aH1zZXQg''@;'; put 'put ''dGFiQ29udGVudFZpZXdDb250YWluZXIoYSl7dGhpcy50YWJzU2VydmljZS50YWJDb250ZW50Vmlld0NvbnRhaW5lcj1hfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubGlzdGVuRm9yVGFiTGlua0NoYW5nZXMoKSksdGhpcy5zdWJzY3JpcHRpb25z''@;'; put 'put ''LnB1c2godGhpcy5saXN0ZWRGb3JUYWJzQWN0aW9uc0NoYW5nZXMoKSksdHlwZW9mIHRoaXMuaWZBY3RpdmVTZXJ2aWNlLmN1cnJlbnQ+InUiJiZ0aGlzLnRhYkxpbmtEaXJlY3RpdmVzWzBdJiZ0aGlzLnRhYkxpbmtEaXJlY3RpdmVzWzBdLmFjdGl2YXRlKCksdGhpcy5rZXlGb2N1cy5jdXJy''@;'; put 'put ''ZW50PXRoaXMuYWN0aXZlVGFiUG9zaXRpb259bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT57YS51bnN1YnNjcmliZSgpfSl9dG9nZ2xlT3ZlcmZsb3dPblBvc2l0aW9uKGEpe3RoaXMudG9nZ2xlU2VydmljZS5vcGVuPWE+PXRoaXMub3ZlcmZsb3dQb3NpdGlv''@;'; put 'put ''bn1yZXNldEtleUZvY3VzQ3VycmVudFRvQWN0aXZlKGEpeyF0aGlzLmtleUZvY3VzLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoYS5yZWxhdGVkVGFyZ2V0KSYmdGhpcy5rZXlGb2N1cy5jdXJyZW50IT09dGhpcy5hY3RpdmVUYWJQb3NpdGlvbiYmKHRoaXMua2V5Rm9jdXMuY3VycmVudD10aGlz''@;'; put 'put ''LmFjdGl2ZVRhYlBvc2l0aW9uKX10b2dnbGVPdmVyZmxvd09uQ2xpY2soKXt0aGlzLmtleUZvY3VzLm1vdmVUbyh0aGlzLmlzQ3VycmVudEluT3ZlcmZsb3cmJnRoaXMudG9nZ2xlU2VydmljZS5vcGVuP3RoaXMub3ZlcmZsb3dQb3NpdGlvbi0xOnRoaXMub3ZlcmZsb3dQb3NpdGlvbiksdGhp''@;'; put 'put ''cy5fbW91c2Vkb3duPSExfW9wZW5PdmVyZmxvd09uRm9jdXMoKXshdGhpcy5fbW91c2Vkb3duJiYhdGhpcy50b2dnbGVTZXJ2aWNlLm9wZW4mJnRoaXMua2V5Rm9jdXMubW92ZVRvKHRoaXMuYWN0aXZlVGFiUG9zaXRpb24pfWNsb3NlT25Gb2N1c091dChhKXshdGhpcy5fdGFiT3ZlcmZsb3dF''@;'; put 'put ''bC5jb250YWlucyhhLnJlbGF0ZWRUYXJnZXQpJiZ0aGlzLnRvZ2dsZVNlcnZpY2Uub3BlbiYmIXRoaXMuX21vdXNlZG93biYmKHRoaXMudG9nZ2xlU2VydmljZS5vcGVuPSExLHRoaXMudGFiTGlua0VsZW1lbnRzW3RoaXMuYWN0aXZlVGFiUG9zaXRpb25dPT09YS5yZWxhdGVkVGFyZ2V0JiYo''@;'; put 'put ''dGhpcy5rZXlGb2N1cy5jdXJyZW50PXRoaXMuYWN0aXZlVGFiUG9zaXRpb24pKX1jbG9zZU9uRXNjYXBlS2V5KCl7dGhpcy5rZXlGb2N1cy5tb3ZlVG8odGhpcy5vdmVyZmxvd1Bvc2l0aW9uLTEpfWNsb3NlT25PdXRzaWRlQ2xpY2soYSxkKXtjb25zdCBoPXRoaXMudGFic0FjdGlvbnMuc29t''@;'; put 'put ''ZShmPT5mLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoYS50YXJnZXQpKTthLnRhcmdldD09PWR8fGQuY29udGFpbnMoYS50YXJnZXQpfHxofHwhdGhpcy5fdGFiT3ZlcmZsb3dFbC5jb250YWlucyhhLnRhcmdldCkmJnRoaXMuaXNDdXJyZW50SW5PdmVyZmxvdyYmdGhpcy5rZXlGb2N1cy5tb3Zl''@;'; put 'put ''VG8odGhpcy5vdmVyZmxvd1Bvc2l0aW9uLTEpfXNldFRhYkxpbmtFbGVtZW50cygpe3RoaXMuX3RhYkxpbmtEaXJlY3RpdmVzPXRoaXMudGFicy5tYXAoYT0+YS50YWJMaW5rKSx0aGlzLnRhYkxpbmtFbGVtZW50cz10aGlzLl90YWJMaW5rRGlyZWN0aXZlcy5tYXAoYT0+YS5lbC5uYXRpdmVF''@;'; put 'put ''bGVtZW50KSx0aGlzLnRhYnNBY3Rpb25zJiZ0aGlzLnRhYnNBY3Rpb25zJiZ0aGlzLnRhYkxpbmtFbGVtZW50cy5wdXNoKC4uLnRoaXMudGFic0FjdGlvbnMubWFwKGE9PmEubmF0aXZlRWxlbWVudCkpfWxpc3RlbkZvclRhYkxpbmtDaGFuZ2VzKCl7cmV0dXJuIHRoaXMudGFicy5jaGFuZ2Vz''@;'; put 'put ''LnBpcGUoeDIodGhpcy50YWJzLm1hcChhPT5hLnRhYkxpbmspKSkuc3Vic2NyaWJlKCgpPT50aGlzLnNldFRhYkxpbmtFbGVtZW50cygpKX1saXN0ZWRGb3JUYWJzQWN0aW9uc0NoYW5nZXMoKXtyZXR1cm4gdGhpcy50YWJzQWN0aW9ucy5jaGFuZ2VzLnN1YnNjcmliZSgoKT0+dGhpcy5zZXRU''@;'; put 'put ''YWJMaW5rRWxlbWVudHMoKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKGY3KSxHZShzYyksR2UoengpLEdlKCRZKSxHZShpcykpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItdGFicyJdXSxjb250ZW50UXVlcmll''@;'; put 'put ''czpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiYoYW8oaCxhZGUsNSxKaSksYW8oaCxDbSw0KSksMiZhKXtsZXQgZjtDaShmPVNpKCkpJiYoZC50YWJzQWN0aW9ucz1mKSxDaShmPVNpKCkpJiYoZC50YWJzPWYpfX0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiYocWEoenksNykscWEo''@;'; put 'put ''S1ksNSxKaSkscWEoZE5lLDcsRG8pKSwyJmEpe2xldCBoO0NpKGg9U2koKSkmJihkLmtleUZvY3VzPWguZmlyc3QpLENpKGg9U2koKSkmJihkLnRhYk92ZXJmbG93RWw9aC5maXJzdCksQ2koaD1TaSgpKSYmKGQudGFiQ29udGVudFZpZXdDb250YWluZXI9aC5maXJzdCl9fSxob3N0VmFyczoy''@;'; put 'put ''LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmVHIoInRhYnMtdmVydGljYWwiLGQuaXNWZXJ0aWNhbCl9LGlucHV0czp7bGF5b3V0OltObi5Ob25lLCJjbHJMYXlvdXQiLCJsYXlvdXQiXX0sZmVhdHVyZXM6W2RhKFtmNyx6eCxKVWVdKSx2ZChbb2ddKV0sbmdDb250ZW50U2VsZWN0''@;'; put 'put ''b3JzOmZOZSxkZWNsczo2LHZhcnM6Myxjb25zdHM6W1sidGFiQ29udGVudFZpZXdDb250YWluZXIiLCIiXSxbInRhYk92ZXJmbG93VHJpZ2dlciIsIiJdLFsicm9sZSIsInRhYmxpc3QiLCJjbHJEaXJlY3Rpb24iLCJib3RoIiwxLCJuYXYiLDMsImNsckZvY3VzQ2hhbmdlIiwiZm9jdXNvdXQi''@;'; put 'put ''LCJjbHJLZXlGb2N1cyJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbNCwibmdJZiJdLFsicm9sZSIsInByZXNlbnRhdGlvbiIsMSwibmF2LWl0ZW0iXSxbMywibmdUZW1wbGF0ZU91dGxldCJdLFsicm9sZSIsInByZXNlbnRhdGlvbiIsMSwidGFicy1vdmVyZmxvdyIsImJvdHRvbS1yaWdodCJd''@;'; put 'put ''LFsicm9sZSIsImFwcGxpY2F0aW9uIiwxLCJuYXYtaXRlbSJdLFsidHlwZSIsImJ1dHRvbiIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwiYnRuIiwiYnRuLWxpbmsiLCJuYXYtbGluayIsImRyb3Bkb3duLXRvZ2dsZSIsMywibW91c2Vkb3duIiwiZm9jdXMiLCJjbGljayJdLFsic2hhcGUiLCJl''@;'; put 'put ''bGxpcHNpcy1ob3Jpem9udGFsIl0sWzMsImtleWRvd24uZXNjYXBlIiwiY2xpY2siLCJmb2N1c291dCIsNCwibmdJZiJdLFszLCJrZXlkb3duLmVzY2FwZSIsImNsaWNrIiwiZm9jdXNvdXQiXSxbMywibmdUZW1wbGF0ZU91dGxldCIsNCwibmdJZiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQp''@;'; put 'put ''e2lmKDEmYSl7Y29uc3QgaD1MbigpO3NhKGhOZSksZGUoMCwidWwiLDIpLEZ0KCJjbHJGb2N1c0NoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIHd0KGgpLEN0KGQudG9nZ2xlT3ZlcmZsb3dPblBvc2l0aW9uKHYpKX0pKCJmb2N1c291dCIsZnVuY3Rpb24odil7cmV0dXJuIHd0KGgpLEN0KGQu''@;'; put 'put ''cmVzZXRLZXlGb2N1c0N1cnJlbnRUb0FjdGl2ZSh2KSl9KSxndCgxLGdOZSwyLDEsIm5nLWNvbnRhaW5lciIsMykoMix5TmUsNywxMSwibmctY29udGFpbmVyIiw0KSxZcigzKSxoZSgpLEZsKDQsbnVsbCwwKX0yJmEmJihNZSgiY2xyS2V5Rm9jdXMiLGQudGFiTGlua0VsZW1lbnRzKSxmZSgp''@;'; put 'put ''LE1lKCJuZ0Zvck9mIixkLnRhYkxpbmtEaXJlY3RpdmVzKSxmZSgpLE1lKCJuZ0lmIixkLnRhYnNTZXJ2aWNlLm92ZXJmbG93VGFicy5sZW5ndGg+MCkpfSxkZXBlbmRlbmNpZXM6W25zLGJhLE4xLHJzLHp5LEtZXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxlWmU9KCgpPT57Y2xhc3MgY3tj''@;'; put 'put ''b25zdHJ1Y3Rvcigpe1RzLmFkZEljb25zKFQwZSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1JhLE8yLEFzLCRVZSxZWSxPMl19KSxjfSkoKSxxWT0oKCk9''@;'; put 'put ''PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5uYXZHcm91cENvdW50PTB9cmVnaXN0ZXJOYXZHcm91cCgpe3RoaXMubmF2R3JvdXBDb3VudCsrfXVucmVnaXN0ZXJOYXZHcm91cCgpe3RoaXMubmF2R3JvdXBDb3VudC0tfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJu''@;'; put 'put ''IG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxYWT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5faWNvbnM9MH1nZXQgaGFzSWNvbnMoKXtyZXR1cm4gdGhpcy5faWNvbnM+MH1yZWdpc3Rlckljb24oKXt0aGlz''@;'; put 'put ''Ll9pY29ucysrfXVucmVnaXN0ZXJJY29uKCl7dGhpcy5faWNvbnMtLX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksSlk9KCgpPT57Y2xhc3MgY3tjb25z''@;'; put 'put ''dHJ1Y3Rvcigpe3RoaXMuX2FuaW1hdGVPbkNvbGxhcHNlZD1uZXcgV24sdGhpcy5fY29sbGFwc2VkQ2hhbmdlZD1uZXcgV24sdGhpcy5fY29sbGFwc2VkPSExLHRoaXMuX2NvbGxhcHNpYmxlPSExfWdldCBhbmltYXRlT25Db2xsYXBzZWQoKXtyZXR1cm4gdGhpcy5fYW5pbWF0ZU9uQ29sbGFw''@;'; put 'put ''c2VkLmFzT2JzZXJ2YWJsZSgpfWdldCBjb2xsYXBzZWRDaGFuZ2VkKCl7cmV0dXJuIHRoaXMuX2NvbGxhcHNlZENoYW5nZWQuYXNPYnNlcnZhYmxlKCl9Z2V0IGNvbGxhcHNlZCgpe3JldHVybiB0aGlzLl9jb2xsYXBzZWR9c2V0IGNvbGxhcHNlZChhKXthPSEhYSx0aGlzLmNvbGxhcHNpYmxl''@;'; put 'put ''JiZ0aGlzLl9jb2xsYXBzZWQhPT1hJiZ0aGlzLnVwZGF0ZUNvbGxhcHNlQmVoYXZpb3IoYSl9Z2V0IGNvbGxhcHNpYmxlKCl7cmV0dXJuIHRoaXMuX2NvbGxhcHNpYmxlfXNldCBjb2xsYXBzaWJsZShhKXt0aGlzLl9jb2xsYXBzaWJsZSE9PShhPSEhYSkmJighYSYmdGhpcy5jb2xsYXBzZWQm''@;'; put 'put ''JnRoaXMudXBkYXRlQ29sbGFwc2VCZWhhdmlvcighMSksdGhpcy5fY29sbGFwc2libGU9YSl9dXBkYXRlQ29sbGFwc2VCZWhhdmlvcihhKXt0aGlzLl9hbmltYXRlT25Db2xsYXBzZWQubmV4dChhKSx0aGlzLl9jb2xsYXBzZWQ9YSx0aGlzLl9jb2xsYXBzZWRDaGFuZ2VkLm5leHQoYSl9fXJl''@;'; put 'put ''dHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLFFZPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy5fbmF2U2VydmljZT1hLHRoaXMuX25h''@;'; put 'put ''dkljb25TZXJ2aWNlPWQsdGhpcy5fbmF2R3JvdXBSZWdpc3RyYXRpb25TZXJ2aWNlPWgsdGhpcy5jb21tb25TdHJpbmdzPWYsdGhpcy5jb250ZW50SWQ9TXUoKSx0aGlzLl9jb2xsYXBzZWRDaGFuZ2VkPW5ldyBLcighMCksdGhpcy5fc3ViPWEuY29sbGFwc2VkQ2hhbmdlZC5zdWJzY3JpYmUo''@;'; put 'put ''dj0+e3RoaXMuX2NvbGxhcHNlZENoYW5nZWQuZW1pdCh2KX0pfWdldCBjb2xsYXBzaWJsZSgpe3JldHVybiB0aGlzLl9uYXZTZXJ2aWNlLmNvbGxhcHNpYmxlfXNldCBjb2xsYXBzaWJsZShhKXt0aGlzLl9uYXZTZXJ2aWNlLmNvbGxhcHNpYmxlPWF9Z2V0IGNvbGxhcHNlZCgpe3JldHVybiB0''@;'; put 'put ''aGlzLl9uYXZTZXJ2aWNlLmNvbGxhcHNlZH1zZXQgY29sbGFwc2VkKGEpe3RoaXMuX25hdlNlcnZpY2UuY29sbGFwc2VkPWF9Z2V0IGhhc05hdkdyb3Vwcygpe3JldHVybiB0aGlzLl9uYXZHcm91cFJlZ2lzdHJhdGlvblNlcnZpY2UubmF2R3JvdXBDb3VudD4wfWdldCBoYXNJY29ucygpe3Jl''@;'; put 'put ''dHVybiB0aGlzLl9uYXZJY29uU2VydmljZS5oYXNJY29uc31nZXQgYXJpYUV4cGFuZGVkKCl7cmV0dXJuIHRoaXMuY29sbGFwc2libGU/dGhpcy5jb2xsYXBzZWQ/ImZhbHNlIjoidHJ1ZSI6bnVsbH1uZ09uRGVzdHJveSgpe3RoaXMuX3N1Yi51bnN1YnNjcmliZSgpfXRvZ2dsZUJ5QnV0dG9u''@;'; put 'put ''KCl7dGhpcy5jb2xsYXBzZWQ9IXRoaXMuY29sbGFwc2VkfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShKWSksR2UoWFkpLEdlKHFZKSxHZShpcykpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItdmVydGljYWwtbmF2''@;'; put 'put ''Il1dLGhvc3RBdHRyczpbMSwiY2xyLXZlcnRpY2FsLW5hdiJdLGhvc3RWYXJzOjYsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZUcigiaXMtY29sbGFwc2VkIixkLmNvbGxhcHNlZCkoImhhcy1uYXYtZ3JvdXBzIixkLmhhc05hdkdyb3VwcykoImhhcy1pY29ucyIsZC5oYXNJY29u''@;'; put 'put ''cyl9LGlucHV0czp7dG9nZ2xlTGFiZWw6W05uLk5vbmUsImNsclZlcnRpY2FsTmF2VG9nZ2xlTGFiZWwiLCJ0b2dnbGVMYWJlbCJdLGNvbGxhcHNpYmxlOltObi5Ob25lLCJjbHJWZXJ0aWNhbE5hdkNvbGxhcHNpYmxlIiwiY29sbGFwc2libGUiXSxjb2xsYXBzZWQ6W05uLk5vbmUsImNsclZl''@;'; put 'put ''cnRpY2FsTmF2Q29sbGFwc2VkIiwiY29sbGFwc2VkIl19LG91dHB1dHM6e19jb2xsYXBzZWRDaGFuZ2VkOiJjbHJWZXJ0aWNhbE5hdkNvbGxhcHNlZENoYW5nZSJ9LGZlYXR1cmVzOltkYShbSlksWFkscVldKV0sbmdDb250ZW50U2VsZWN0b3JzOnlvLGRlY2xzOjQsdmFyczozLGNvbnN0czpb''@;'; put 'put ''WyJ0eXBlIiwiYnV0dG9uIiwiY2xhc3MiLCJuYXYtdHJpZ2dlciIsMywib24tY29sbGFwc2UiLCJjbGljayIsNCwibmdJZiJdLFsxLCJuYXYtY29udGVudCIsMywiaWQiXSxbInR5cGUiLCJidXR0b24iLCJjbGFzcyIsIm5hdi1idG4iLCJhcmlhLWhpZGRlbiIsInRydWUiLCJ0YWJpbmRleCIs''@;'; put 'put ''Ii0xIiwzLCJjbGljayIsNCwibmdJZiJdLFsidHlwZSIsImJ1dHRvbiIsMSwibmF2LXRyaWdnZXIiLDMsImNsaWNrIl0sWyJzaGFwZSIsImFuZ2xlLWRvdWJsZSIsMSwibmF2LXRyaWdnZXItaWNvbiJdLFsidHlwZSIsImJ1dHRvbiIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsInRhYmluZGV4Iiwi''@;'; put 'put ''LTEiLDEsIm5hdi1idG4iLDMsImNsaWNrIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoKSxndCgwLF9OZSwyLDYsImJ1dHRvbiIsMCksZGUoMSwiZGl2IiwxKSxZcigyKSxndCgzLHdOZSwxLDIsImJ1dHRvbiIsMiksaGUoKSksMiZhJiYoTWUoIm5nSWYiLGQuY29sbGFwc2li''@;'; put 'put ''bGUpLGZlKCksTWUoImlkIixkLmNvbnRlbnRJZCksZmUoMiksTWUoIm5nSWYiLGQuY29sbGFwc2libGUmJmQuY29sbGFwc2VkKSl9LGRlcGVuZGVuY2llczpbYmEscnNdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLGVHPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9leHBhbmRD''@;'; put 'put ''aGFuZ2U9bmV3IFdufWdldCBleHBhbmRDaGFuZ2UoKXtyZXR1cm4gdGhpcy5fZXhwYW5kQ2hhbmdlLmFzT2JzZXJ2YWJsZSgpfWV4cGFuZCgpe3RoaXMuX2V4cGFuZENoYW5nZS5uZXh0KCEwKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUw''@;'; put 'put ''Mjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksdEc9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5kZXN0cm95JD1uZXcgV24saCYmeGQoYS5uYXRpdmVFbGVtZW50LCJjbGljayIpLnBpcGUoVjAodGhpcy5kZXN0cm95JCkpLnN1YnNj''@;'; put 'put ''cmliZSgoKT0+e2guZXhwYW5kKCksZC5tYXJrRm9yQ2hlY2soKX0pfW5nT25EZXN0cm95KCl7dGhpcy5kZXN0cm95JC5uZXh0KCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKEppKSxHZShFcyksR2UoZUcsOCkpfSxjLlx1MDI3NWNtcD1Wcih7''@;'; put 'put ''dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJWZXJ0aWNhbE5hdkxpbmsiLCIiXV0saG9zdEF0dHJzOlsxLCJuYXYtbGluayJdLGF0dHJzOk1OZSxuZ0NvbnRlbnRTZWxlY3RvcnM6RU5lLGRlY2xzOjMsdmFyczowLGNvbnN0czpbWzEsIm5hdi10ZXh0Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEs''@;'; put 'put ''ZCl7MSZhJiYoc2EoeE5lKSxZcigwKSxkZSgxLCJzcGFuIiwwKSxZcigyLDEpLGhlKCkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxvZGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe1RzLmFkZEljb25zKEV5LGswZSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1''@;'; put 'put ''cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1JhLEFzLE8yLEJMLE8yLEFzLEJMXX0pLGN9KSgpLGlaZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5c''@;'; put 'put ''dTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltqVWUsR1VlLGVaZSxvZGUsQlVlXX0pLGN9KSgpLFp5PSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBCMGV7Y29uc3RydWN0b3IoYSxkLGgpe3N1cGVyKGEsZCxoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9u''@;'; put 'put ''KGEpe3JldHVybiBuZXcoYXx8YykoR2UoSmkpLEdlKHZZKSxHZSh2cyw4KSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNka1RyYXBGb2N1cyIsIiJdXSxmZWF0dXJlczpbd2FdfSksY30pKCksS0w9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1''@;'; put 'put ''bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7fSksY30pKCk7Y29uc3Qgb1plPS9kKy4rbSsuK3krL2ksc1plPS9tKy4rZCsuK3krL2ksbFplPS9kK3xtK3x5Ky9pLGNaZT0vXGQrL2csdVplPS9Nb2JpL2ksZFplPS9c''@;'; put 'put ''dTIwMGYvZyxuRz0iWVlZWSIscUw9e25hbWU6IkxJVFRMRV9FTkRJQU4iLGZvcm1hdDpbIkREIiwiTU0iLG5HXX0sYUc9e25hbWU6Ik1JRERMRV9FTkRJQU4iLGZvcm1hdDpbIk1NIiwiREQiLG5HXX0saFplPXtuYW1lOiJCSUdfRU5ESUFOIixmb3JtYXQ6W25HLCJNTSIsIkREIl19O2Z1bmN0''@;'; put 'put ''aW9uIGxkZShjLGwpe3JldHVybiBuZXcgRGF0ZShjLGwrMSwwKS5nZXREYXRlKCl9Y2xhc3Mgdlple2NvbnN0cnVjdG9yKGwsYT0hMSxkPSExLGg9ITEsZj0hMSx2PSExLE09ITEsRD0hMSl7dGhpcy5kYXlNb2RlbD1sLHRoaXMuaXNUb2RheXNEYXRlPWEsdGhpcy5pc0V4Y2x1ZGVkPWQsdGhp''@;'; put 'put ''cy5pc0Rpc2FibGVkPWgsdGhpcy5pc1NlbGVjdGVkPWYsdGhpcy5pc0ZvY3VzYWJsZT12LHRoaXMuaXNSYW5nZVN0YXJ0RGF5PU0sdGhpcy5pc1JhbmdlRW5kRGF5PUR9Z2V0IHRhYkluZGV4KCl7cmV0dXJuIHRoaXMuaXNGb2N1c2FibGU/MDotMX19Y2xhc3MgTGR7Y29uc3RydWN0b3IobCxh''@;'; put 'put ''LGQpe3RoaXMueWVhcj1sLHRoaXMubW9udGg9YSx0aGlzLmRhdGU9ZH1pc0VxdWFsKGwpe3JldHVybiEhbCYmdGhpcy55ZWFyPT09bC55ZWFyJiZ0aGlzLm1vbnRoPT09bC5tb250aCYmdGhpcy5kYXRlPT09bC5kYXRlfXRvRGF0ZSgpe3JldHVybiBuZXcgRGF0ZSh0aGlzLnllYXIsdGhpcy5t''@;'; put 'put ''b250aCx0aGlzLmRhdGUpfWluY3JlbWVudEJ5KGwpe2NvbnN0IGE9bmV3IERhdGUodGhpcy55ZWFyLHRoaXMubW9udGgsdGhpcy5kYXRlK2wpO3JldHVybiBuZXcgTGQoYS5nZXRGdWxsWWVhcigpLGEuZ2V0TW9udGgoKSxhLmdldERhdGUoKSl9Y2xvbmUoKXtyZXR1cm4gbmV3IExkKHRoaXMu''@;'; put 'put ''eWVhcix0aGlzLm1vbnRoLHRoaXMuZGF0ZSl9dG9Db21wYXJpc29uU3RyaW5nKCl7cmV0dXJuYCR7dGhpcy55ZWFyfSR7dGhpcy5wYWQodGhpcy5tb250aCl9JHt0aGlzLnBhZCh0aGlzLmRhdGUpfWB9dG9EYXRlU3RyaW5nKCl7cmV0dXJuIHRoaXMudG9EYXRlKCkudG9Mb2NhbGVEYXRlU3Ry''@;'; put 'put ''aW5nKHZvaWQgMCx7d2Vla2RheToibG9uZyIsbW9udGg6ImxvbmciLGRheToibnVtZXJpYyIseWVhcjoibnVtZXJpYyJ9KX1pc0JlZm9yZShsLGE9ITEpe3JldHVybiBhP3RoaXMudG9EYXRlKCkuZ2V0VGltZSgpPD1sPy50b0RhdGUoKS5nZXRUaW1lKCk6dGhpcy50b0RhdGUoKS5nZXRUaW1l''@;'; put 'put ''KCk8bD8udG9EYXRlKCkuZ2V0VGltZSgpfWlzQWZ0ZXIobCxhPSExKXtyZXR1cm4gYT90aGlzLnRvRGF0ZSgpLmdldFRpbWUoKT49bD8udG9EYXRlKCkuZ2V0VGltZSgpOnRoaXMudG9EYXRlKCkuZ2V0VGltZSgpPmw/LnRvRGF0ZSgpLmdldFRpbWUoKX1wYWQobCl7cmV0dXJuIGw8MTA/YDAk''@;'; put 'put ''e2x9YDpgJHtsfWB9fWNsYXNzIGJaZXtjb25zdHJ1Y3RvcihsLGEsZCxoLGYsdixNKXt0aGlzLmNhbGVuZGFyPWwsdGhpcy5zZWxlY3RlZERheT1hLHRoaXMuc2VsZWN0ZWRFbmREYXk9ZCx0aGlzLmZvY3VzYWJsZURheT1oLHRoaXMudG9kYXk9Zix0aGlzLmZpcnN0RGF5T2ZXZWVrPXYsdGhp''@;'; put 'put ''cy5leGNsdWRlZERhdGVzPU0sdGhpcy5jdXJyTW9udGhEYXlWaWV3cz1bXSx0aGlzLmluaXRpYWxpemVDYWxlbmRhclZpZXcoKX1nZXQgY2FsZW5kYXJWaWV3KCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyVmlld311cGRhdGVGb2N1c2FibGVEYXkobCl7dGhpcy5zZXRGb2N1c2FibGVGbGFnKHRo''@;'; put 'put ''aXMuZm9jdXNhYmxlRGF5LCExKSx0aGlzLnNldEZvY3VzYWJsZUZsYWcobCwhMCksdGhpcy5mb2N1c2FibGVEYXk9bH11cGRhdGVTZWxlY3RlZERheShsKXt0aGlzLnNldFNlbGVjdGVkRGF5KHRoaXMuc2VsZWN0ZWREYXksITEpLHRoaXMuc2VsZWN0ZWREYXk9bCx0aGlzLnNldFNlbGVjdGVk''@;'; put 'put ''RGF5KGwsITApfXVwZGF0ZVNlbGVjdGVkRW5kRGF5KGwpe3RoaXMuc2V0U2VsZWN0ZWREYXkodGhpcy5zZWxlY3RlZEVuZERheSwhMSksdGhpcy5zZWxlY3RlZEVuZERheT1sLHRoaXMuc2V0U2VsZWN0ZWREYXkobCwhMCl9aW5pdGlhbGl6ZUNhbGVuZGFyVmlldygpe2NvbnN0IGw9dGhpcy5j''@;'; put 'put ''YWxlbmRhci5wcmV2aW91c01vbnRoKCksYT10aGlzLmNhbGVuZGFyLm5leHRNb250aCgpLGQ9dGhpcy5udW1EYXlzRnJvbVByZXZNb250aEluQ2FsVmlldyh0aGlzLmNhbGVuZGFyLnllYXIsdGhpcy5jYWxlbmRhci5tb250aCksaD00Mi0odGhpcy5jYWxlbmRhci5kYXlzLmxlbmd0aCtkKTts''@;'; put 'put ''ZXQgZj1bXSx2PVtdO2Q+MCYmKGY9dGhpcy5nZW5lcmF0ZURheVZpZXdNb2RlbHMobC5kYXlzLnNsaWNlKC0xKmQpLCEwLCExKSksdGhpcy5jdXJyTW9udGhEYXlWaWV3cz10aGlzLmdlbmVyYXRlRGF5Vmlld01vZGVscyh0aGlzLmNhbGVuZGFyLmRheXMsITEsITApLGg+MCYmKHY9dGhpcy5n''@;'; put 'put ''ZW5lcmF0ZURheVZpZXdNb2RlbHMoYS5kYXlzLnNsaWNlKDAsaCksITAsITEpKSx0aGlzLl9jYWxlbmRhclZpZXc9dGhpcy5nZW5lcmF0ZUNhbGVuZGFyVmlldyhmLHRoaXMuY3Vyck1vbnRoRGF5Vmlld3MsdiksdGhpcy5pbml0aWFsaXplU2VsZWN0ZWREYXkoKSx0aGlzLmluaXRpYWxpemVG''@;'; put 'put ''b2N1c2FibGVEYXkoKX1pc0RhdGVFeGNsdWRlZChsKXtjb25zdHttaW5EYXRlOmEsbWF4RGF0ZTpkfT10aGlzLmV4Y2x1ZGVkRGF0ZXMsaD1hLnRvQ29tcGFyaXNvblN0cmluZygpLGY9ZC50b0NvbXBhcmlzb25TdHJpbmcoKSx2PWwudG9Db21wYXJpc29uU3RyaW5nKCk7cmV0dXJuISh2Pj1o''@;'; put 'put ''JiZ2PD1mKX1nZW5lcmF0ZURheVZpZXdNb2RlbHMobCxhLGQpe2NvbnN0IGg9bC5tYXAoZj0+bmV3IHZaZShmLCExLGEsdGhpcy5pc0RhdGVFeGNsdWRlZChmKSwhMSwhMSkpO3JldHVybiBkJiZ0aGlzLmNhbGVuZGFyLmlzRGF5SW5DYWxlbmRhcih0aGlzLnRvZGF5KSYmKGhbdGhpcy50b2Rh''@;'; put 'put ''eS5kYXRlLTFdLmlzVG9kYXlzRGF0ZT0hMCksaH1udW1EYXlzRnJvbVByZXZNb250aEluQ2FsVmlldyhsLGEpe2NvbnN0IGQ9ZnVuY3Rpb24gcFplKGMsbCxhKXtyZXR1cm4gbmV3IERhdGUoYyxsLGEpLmdldERheSgpfShsLGEsMSk7cmV0dXJuIGQ+PXRoaXMuZmlyc3REYXlPZldlZWs/ZC10''@;'; put 'put ''aGlzLmZpcnN0RGF5T2ZXZWVrOjcrZC10aGlzLmZpcnN0RGF5T2ZXZWVrfWlzRGF5SW5DYWxlbmRhclZpZXcobCl7cmV0dXJuISF0aGlzLmNhbGVuZGFyLmlzRGF5SW5DYWxlbmRhcihsKX1nZW5lcmF0ZUNhbGVuZGFyVmlldyhsLGEsZCl7Y29uc3QgaD1bLi4ubCwuLi5hLC4uLmRdLGY9W107''@;'; put 'put ''Zm9yKGxldCB2PTA7djw2O3YrKylmW3ZdPWguc2xpY2UoNyp2LDcqKHYrMSkpO3JldHVybiBmfWluaXRpYWxpemVTZWxlY3RlZERheSgpe3RoaXMuc2V0U2VsZWN0ZWREYXkodGhpcy5zZWxlY3RlZERheSwhMCksdGhpcy5zZXRTZWxlY3RlZERheSh0aGlzLnNlbGVjdGVkRW5kRGF5LCEwKX1p''@;'; put 'put ''bml0aWFsaXplRm9jdXNhYmxlRGF5KCl7dGhpcy5mb2N1c2FibGVEYXkmJnRoaXMuaXNEYXlJbkNhbGVuZGFyVmlldyh0aGlzLmZvY3VzYWJsZURheSk/dGhpcy5zZXRGb2N1c2FibGVGbGFnKHRoaXMuZm9jdXNhYmxlRGF5LCEwKTp0aGlzLnNlbGVjdGVkRGF5JiZ0aGlzLmlzRGF5SW5DYWxl''@;'; put 'put ''bmRhclZpZXcodGhpcy5zZWxlY3RlZERheSk/KHRoaXMuc2V0Rm9jdXNhYmxlRmxhZyh0aGlzLnNlbGVjdGVkRGF5LCEwKSx0aGlzLmZvY3VzYWJsZURheT10aGlzLnNlbGVjdGVkRGF5LmNsb25lKCkpOnRoaXMuc2VsZWN0ZWRFbmREYXkmJnRoaXMuaXNEYXlJbkNhbGVuZGFyVmlldyh0aGlz''@;'; put 'put ''LnNlbGVjdGVkRW5kRGF5KT8odGhpcy5zZXRGb2N1c2FibGVGbGFnKHRoaXMuc2VsZWN0ZWRFbmREYXksITApLHRoaXMuZm9jdXNhYmxlRGF5PXRoaXMuc2VsZWN0ZWRFbmREYXkuY2xvbmUoKSk6dGhpcy5pc0RheUluQ2FsZW5kYXJWaWV3KHRoaXMudG9kYXkpPyh0aGlzLnNldEZvY3VzYWJs''@;'; put 'put ''ZUZsYWcodGhpcy50b2RheSwhMCksdGhpcy5mb2N1c2FibGVEYXk9dGhpcy50b2RheS5jbG9uZSgpKToodGhpcy5mb2N1c2FibGVEYXk9bmV3IExkKHRoaXMuY2FsZW5kYXIueWVhcix0aGlzLmNhbGVuZGFyLm1vbnRoLDE1KSx0aGlzLnNldEZvY3VzYWJsZUZsYWcodGhpcy5mb2N1c2FibGVE''@;'; put 'put ''YXksITApKX1zZXRGb2N1c2FibGVGbGFnKGwsYSl7bCYmKHRoaXMuY3Vyck1vbnRoRGF5Vmlld3NbbC5kYXRlLTFdLmlzRm9jdXNhYmxlPWEpfXNldFNlbGVjdGVkRGF5KGwsYSl7bCYmdGhpcy5pc0RheUluQ2FsZW5kYXJWaWV3KGwpJiYodGhpcy5jdXJyTW9udGhEYXlWaWV3c1tsPy5kYXRl''@;'; put 'put ''LTFdLmlzU2VsZWN0ZWQ9YSl9fWxldCBaeD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMubG9jYWxlPWEsdGhpcy5fZmlyc3REYXlPZldlZWs9MCx0aGlzLmluaXRpYWxpemVMb2NhbGVEYXRhKCl9Z2V0IGZpcnN0RGF5T2ZXZWVrKCl7cmV0dXJuIHRoaXMuX2ZpcnN0RGF5T2ZX''@;'; put 'put ''ZWVrfWdldCBsb2NhbGVEYXlzKCl7cmV0dXJuIHRoaXMuX2xvY2FsZURheXN9Z2V0IGxvY2FsZURheXNOYXJyb3coKXtyZXR1cm4gdGhpcy5fbG9jYWxlRGF5cy5tYXAoYT0+YS5uYXJyb3cpfWdldCBsb2NhbGVNb250aHNBYmJyZXZpYXRlZCgpe3JldHVybiB0aGlzLl9sb2NhbGVNb250aHNB''@;'; put 'put ''YmJyZXZpYXRlZH1nZXQgbG9jYWxlTW9udGhzV2lkZSgpe3JldHVybiB0aGlzLl9sb2NhbGVNb250aHNXaWRlfWdldCBsb2NhbGVEYXRlRm9ybWF0KCl7cmV0dXJuIHRoaXMuX2xvY2FsZURhdGVGb3JtYXR9aW5pdGlhbGl6ZUxvY2FsZURhdGEoKXt0aGlzLmluaXRpYWxpemVGaXJzdERheU9m''@;'; put 'put ''V2VlaygpLHRoaXMuaW5pdGlhbGl6ZUxvY2FsZURhdGVGb3JtYXQoKSx0aGlzLmluaXRpYWxpemVMb2NhbGVNb250aHNBYmJyZXZpYXRlZCgpLHRoaXMuaW5pdGlhbGl6ZUxvY2FsZU1vbnRoc1dpZGUoKSx0aGlzLmluaXRpYWxpemVMb2NhbGVEYXlzKCl9aW5pdGlhbGl6ZUxvY2FsZURheXMo''@;'; put 'put ''KXtjb25zdCBhPVtdLGQ9alUodGhpcy5sb2NhbGUsZDAuU3RhbmRhbG9uZSxkbC5XaWRlKS5zbGljZSgpLGg9alUodGhpcy5sb2NhbGUsZDAuU3RhbmRhbG9uZSxkbC5OYXJyb3cpLnNsaWNlKCksZj10aGlzLmZpcnN0RGF5T2ZXZWVrO2ZvcihsZXQgdj0wO3Y8Nzt2KyspYS5wdXNoKHtkYXk6''@;'; put 'put ''ZFt2XSxuYXJyb3c6aFt2XX0pO2lmKGY+MCl7Y29uc3Qgdj1hLnNwbGljZSgwLGYpO2EucHVzaCguLi52KX10aGlzLl9sb2NhbGVEYXlzPWF9aW5pdGlhbGl6ZUxvY2FsZU1vbnRoc0FiYnJldmlhdGVkKCl7dGhpcy5fbG9jYWxlTW9udGhzQWJicmV2aWF0ZWQ9elUodGhpcy5sb2NhbGUsZDAu''@;'; put 'put ''U3RhbmRhbG9uZSxkbC5BYmJyZXZpYXRlZCkuc2xpY2UoKX1pbml0aWFsaXplTG9jYWxlTW9udGhzV2lkZSgpe3RoaXMuX2xvY2FsZU1vbnRoc1dpZGU9elUodGhpcy5sb2NhbGUsZDAuU3RhbmRhbG9uZSxkbC5XaWRlKS5zbGljZSgpfWluaXRpYWxpemVGaXJzdERheU9mV2Vlaygpe3RoaXMu''@;'; put 'put ''X2ZpcnN0RGF5T2ZXZWVrPWZ1bmN0aW9uIHhfZShjKXtyZXR1cm4gbzEoYylbZWMuRmlyc3REYXlPZldlZWtdfSh0aGlzLmxvY2FsZSl9aW5pdGlhbGl6ZUxvY2FsZURhdGVGb3JtYXQoKXt0aGlzLl9sb2NhbGVEYXRlRm9ybWF0PWZ1bmN0aW9uIE1NKGMsbCl7cmV0dXJuIEMyKG8xKGMpW2Vj''@;'; put 'put ''LkRhdGVGb3JtYXRdLGwpfSh0aGlzLmxvY2FsZSxDZC5TaG9ydCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHhyKEJmKSl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7Y2xhc3MgT2R7Y29uc3Ry''@;'; put 'put ''dWN0b3IobCxhKXt0aGlzLnllYXI9bCx0aGlzLm1vbnRoPWEsdGhpcy5pbml0aWFsaXplRGF5c0luQ2FsZW5kYXIoKX1pc0VxdWFsKGwpe3JldHVybiEhbCYmdGhpcy55ZWFyPT09bC55ZWFyJiZ0aGlzLm1vbnRoPT09bC5tb250aH1pc0RheUluQ2FsZW5kYXIobCl7cmV0dXJuISFsJiZ0aGlz''@;'; put 'put ''LnllYXI9PT1sLnllYXImJnRoaXMubW9udGg9PT1sLm1vbnRofXByZXZpb3VzTW9udGgoKXtyZXR1cm4gMD09PXRoaXMubW9udGg/bmV3IE9kKHRoaXMueWVhci0xLDExKTpuZXcgT2QodGhpcy55ZWFyLHRoaXMubW9udGgtMSl9bmV4dE1vbnRoKCl7cmV0dXJuIDExPT09dGhpcy5tb250aD9u''@;'; put 'put ''ZXcgT2QodGhpcy55ZWFyKzEsMCk6bmV3IE9kKHRoaXMueWVhcix0aGlzLm1vbnRoKzEpfXByZXZpb3VzWWVhcigpe3JldHVybiBuZXcgT2QodGhpcy55ZWFyLTEsdGhpcy5tb250aCl9bmV4dFllYXIoKXtyZXR1cm4gbmV3IE9kKHRoaXMueWVhcisxLHRoaXMubW9udGgpfWluaXRpYWxpemVE''@;'; put 'put ''YXlzSW5DYWxlbmRhcigpe2NvbnN0IGw9bGRlKHRoaXMueWVhcix0aGlzLm1vbnRoKTt0aGlzLmRheXM9QXJyYXkobCkuZmlsbChudWxsKS5tYXAoKGEsZCk9Pm5ldyBMZCh0aGlzLnllYXIsdGhpcy5tb250aCxkKzEpKX19bGV0IE1oPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlz''@;'; put 'put ''LmlzUmFuZ2VQaWNrZXI9ITEsdGhpcy5oYXNBY3Rpb25CdXR0b25zPSExLHRoaXMuX3RvZGF5c0Z1bGxEYXRlPW5ldyBEYXRlLHRoaXMuX3NlbGVjdGVkRGF5Q2hhbmdlPW5ldyBXbix0aGlzLl9zZWxlY3RlZEVuZERheUNoYW5nZT1uZXcgV24sdGhpcy5fZGlzcGxheWVkQ2FsZW5kYXJDaGFu''@;'; put 'put ''Z2U9bmV3IFduLHRoaXMuX2ZvY3VzT25DYWxlbmRhckNoYW5nZT1uZXcgV24sdGhpcy5fcmVmcmVzaENhbGVuZGFyVmlldz1uZXcgV24sdGhpcy5fZm9jdXNlZERheUNoYW5nZT1uZXcgV259Z2V0IHRvZGF5KCl7cmV0dXJuIHRoaXMuX3RvZGF5fWdldCBkaXNwbGF5ZWRDYWxlbmRhcigpe3Jl''@;'; put 'put ''dHVybiB0aGlzLl9kaXNwbGF5ZWRDYWxlbmRhcn1nZXQgc2VsZWN0ZWREYXlDaGFuZ2UoKXtyZXR1cm4gdGhpcy5fc2VsZWN0ZWREYXlDaGFuZ2UuYXNPYnNlcnZhYmxlKCl9Z2V0IHNlbGVjdGVkRW5kRGF5Q2hhbmdlKCl7cmV0dXJuIHRoaXMuX3NlbGVjdGVkRW5kRGF5Q2hhbmdlLmFzT2Jz''@;'; put 'put ''ZXJ2YWJsZSgpfWdldCBkaXNwbGF5ZWRDYWxlbmRhckNoYW5nZSgpe3JldHVybiB0aGlzLl9kaXNwbGF5ZWRDYWxlbmRhckNoYW5nZS5hc09ic2VydmFibGUoKX1nZXQgZm9jdXNPbkNhbGVuZGFyQ2hhbmdlKCl7cmV0dXJuIHRoaXMuX2ZvY3VzT25DYWxlbmRhckNoYW5nZS5hc09ic2VydmFi''@;'; put 'put ''bGUoKX1nZXQgZm9jdXNlZERheUNoYW5nZSgpe3JldHVybiB0aGlzLl9mb2N1c2VkRGF5Q2hhbmdlLmFzT2JzZXJ2YWJsZSgpLnBpcGUoR3UoYT0+dGhpcy5mb2N1c2VkRGF5PWEpKX1nZXQgcmVmcmVzaENhbGVuZGFyVmlldygpe3JldHVybiB0aGlzLl9yZWZyZXNoQ2FsZW5kYXJWaWV3LmFz''@;'; put 'put ''T2JzZXJ2YWJsZSgpfW5vdGlmeVNlbGVjdGVkRGF5Q2hhbmdlZChhLHtlbWl0RXZlbnQ6ZH09e2VtaXRFdmVudDohMH0pe2lmKHRoaXMuaXNSYW5nZVBpY2tlcil7Y29uc3R7c3RhcnREYXRlOmgsZW5kRGF0ZTpmfT1hO2gmJmY/KHRoaXMuc2V0U2VsZWN0ZWREYXkoaCxkKSx0aGlzLnNldFNl''@;'; put 'put ''bGVjdGVkRW5kRGF5KGYsZCkpOihudWxsIT09ZiYmdGhpcy5zZXRTZWxlY3RlZEVuZERheShmLGQpLG51bGwhPT1oJiZ0aGlzLnNldFNlbGVjdGVkRGF5KGgsZCkpfWVsc2UgdGhpcy5zZXRTZWxlY3RlZERheShhLGQpO3RoaXMuX3JlZnJlc2hDYWxlbmRhclZpZXcubmV4dCgpfWluaXRpYWxp''@;'; put 'put ''emVDYWxlbmRhcigpe3RoaXMuZm9jdXNlZERheT1udWxsLHRoaXMuaW5pdGlhbGl6ZVRvZGF5c0RhdGUoKSx0aGlzLl9kaXNwbGF5ZWRDYWxlbmRhcj10aGlzLnNlbGVjdGVkRGF5P25ldyBPZCh0aGlzLnNlbGVjdGVkRGF5LnllYXIsdGhpcy5zZWxlY3RlZERheS5tb250aCk6bmV3IE9kKHRo''@;'; put 'put ''aXMudG9kYXkueWVhcix0aGlzLnRvZGF5Lm1vbnRoKX1jaGFuZ2VNb250aChhKXt0aGlzLnNldERpc3BsYXllZENhbGVuZGFyKG5ldyBPZCh0aGlzLl9kaXNwbGF5ZWRDYWxlbmRhci55ZWFyLGEpKX1jaGFuZ2VZZWFyKGEpe3RoaXMuc2V0RGlzcGxheWVkQ2FsZW5kYXIobmV3IE9kKGEsdGhp''@;'; put 'put ''cy5fZGlzcGxheWVkQ2FsZW5kYXIubW9udGgpKX1tb3ZlVG9OZXh0TW9udGgoKXt0aGlzLnNldERpc3BsYXllZENhbGVuZGFyKHRoaXMuX2Rpc3BsYXllZENhbGVuZGFyLm5leHRNb250aCgpKX1tb3ZlVG9QcmV2aW91c01vbnRoKCl7dGhpcy5zZXREaXNwbGF5ZWRDYWxlbmRhcih0aGlzLl9k''@;'; put 'put ''aXNwbGF5ZWRDYWxlbmRhci5wcmV2aW91c01vbnRoKCkpfW1vdmVUb05leHRZZWFyKCl7dGhpcy5zZXREaXNwbGF5ZWRDYWxlbmRhcih0aGlzLl9kaXNwbGF5ZWRDYWxlbmRhci5uZXh0WWVhcigpKX1tb3ZlVG9QcmV2aW91c1llYXIoKXt0aGlzLnNldERpc3BsYXllZENhbGVuZGFyKHRoaXMu''@;'; put 'put ''X2Rpc3BsYXllZENhbGVuZGFyLnByZXZpb3VzWWVhcigpKX1tb3ZlVG9DdXJyZW50TW9udGgoKXt0aGlzLmRpc3BsYXllZENhbGVuZGFyLmlzRGF5SW5DYWxlbmRhcih0aGlzLnRvZGF5KXx8dGhpcy5zZXREaXNwbGF5ZWRDYWxlbmRhcihuZXcgT2QodGhpcy50b2RheS55ZWFyLHRoaXMudG9k''@;'; put 'put ''YXkubW9udGgpKSx0aGlzLl9mb2N1c09uQ2FsZW5kYXJDaGFuZ2UubmV4dCgpfW1vdmVUb1NwZWNpZmljTW9udGgoYSl7dGhpcy5kaXNwbGF5ZWRDYWxlbmRhci5pc0RheUluQ2FsZW5kYXIoYSl8fHRoaXMuc2V0RGlzcGxheWVkQ2FsZW5kYXIobmV3IE9kKGEueWVhcixhLm1vbnRoKSl9aW5j''@;'; put 'put ''cmVtZW50Rm9jdXNEYXkoYSl7dGhpcy5ob3ZlcmVkRGF5PXRoaXMuZm9jdXNlZERheT10aGlzLmZvY3VzZWREYXkuaW5jcmVtZW50QnkoYSksdGhpcy5fZGlzcGxheWVkQ2FsZW5kYXIuaXNEYXlJbkNhbGVuZGFyKHRoaXMuZm9jdXNlZERheSk/dGhpcy5fZm9jdXNlZERheUNoYW5nZS5uZXh0''@;'; put 'put ''KHRoaXMuZm9jdXNlZERheSk6dGhpcy5zZXREaXNwbGF5ZWRDYWxlbmRhcihuZXcgT2QodGhpcy5mb2N1c2VkRGF5LnllYXIsdGhpcy5mb2N1c2VkRGF5Lm1vbnRoKSksdGhpcy5fZm9jdXNPbkNhbGVuZGFyQ2hhbmdlLm5leHQoKX1yZXNldFNlbGVjdGVkRGF5KCl7dGhpcy5zZWxlY3RlZERh''@;'; put 'put ''eT10aGlzLnBlcnNpc3RlZERhdGUsdGhpcy5zZWxlY3RlZEVuZERheT10aGlzLnBlcnNpc3RlZEVuZERhdGV9Y29udmVydERhdGVUb0RheU1vZGVsKGEpe3JldHVybiBuZXcgTGQoYS5nZXRGdWxsWWVhcigpLGEuZ2V0TW9udGgoKSxhLmdldERhdGUoKSl9c2V0U2VsZWN0ZWREYXkoYSxkKXt0''@;'; put 'put ''aGlzLnNlbGVjdGVkRGF5PWEsZCYmdGhpcy5fc2VsZWN0ZWREYXlDaGFuZ2UubmV4dChhKX1zZXRTZWxlY3RlZEVuZERheShhLGQpe3RoaXMuc2VsZWN0ZWRFbmREYXk9YSxkJiZ0aGlzLl9zZWxlY3RlZEVuZERheUNoYW5nZS5uZXh0KGEpfXNldERpc3BsYXllZENhbGVuZGFyKGEpe3RoaXMu''@;'; put 'put ''X2Rpc3BsYXllZENhbGVuZGFyLmlzRXF1YWwoYSl8fCh0aGlzLl9kaXNwbGF5ZWRDYWxlbmRhcj1hLHRoaXMuX2Rpc3BsYXllZENhbGVuZGFyQ2hhbmdlLm5leHQoKSl9aW5pdGlhbGl6ZVRvZGF5c0RhdGUoKXt0aGlzLl90b2RheXNGdWxsRGF0ZT1uZXcgRGF0ZSx0aGlzLl90b2RheT1uZXcg''@;'; put 'put ''TGQodGhpcy5fdG9kYXlzRnVsbERhdGUuZ2V0RnVsbFllYXIoKSx0aGlzLl90b2RheXNGdWxsRGF0ZS5nZXRNb250aCgpLHRoaXMuX3RvZGF5c0Z1bGxEYXRlLmdldERhdGUoKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9''@;'; put 'put ''YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLFNtPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLl9uZ1pvbmU9YSx0aGlzLnBsYXRmb3JtSWQ9ZH1mb2N1c0NlbGwoYSl7dGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5uZ1pv''@;'; put 'put ''bmVJc1N0YWJsZUluQnJvd3NlcigpLnN1YnNjcmliZSgoKT0+e2NvbnN0IGQ9YS5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ1t0YWJpbmRleD0iMCJdJyk7ZCYmZC5mb2N1cygpfSl9KX1mb2N1c0lucHV0KGEpe3RoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+dGhpcy5u''@;'; put 'put ''Z1pvbmVJc1N0YWJsZUluQnJvd3NlcigpLnN1YnNjcmliZSgoKT0+YS5mb2N1cygpKSl9ZWxlbWVudElzRm9jdXNlZChhKXtyZXR1cm4gdGwodGhpcy5wbGF0Zm9ybUlkKSYmZG9jdW1lbnQuYWN0aXZlRWxlbWVudD09PWF9bmdab25lSXNTdGFibGVJbkJyb3dzZXIoKXtyZXR1cm4gdGhpcy5f''@;'; put 'put ''bmdab25lLm9uU3RhYmxlLmFzT2JzZXJ2YWJsZSgpLnBpcGUoYW0oKSwkbCgoKT0+dGwodGhpcy5wbGF0Zm9ybUlkKSkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh4cihXYSkseHIoaW8pKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rv''@;'; put 'put ''cnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxjZz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuZGlzYWJsZWREYXRlcz17bWluRGF0ZTpuZXcgTGQoMCwwLDEpLG1heERhdGU6bmV3IExkKDk5OTksMTEsMzEpfSx0aGlzLmNsZHJMb2NhbGVEYXRlRm9ybWF0PSJkZC9NTS95Iix0aGlz''@;'; put 'put ''LmxvY2FsZURpc3BsYXlGb3JtYXQ9cUwsdGhpcy5kZWxpbWl0ZXJzPVsiLyIsIi8iXSx0aGlzLmNsZHJMb2NhbGVEYXRlRm9ybWF0PWEubG9jYWxlRGF0ZUZvcm1hdCx0aGlzLmluaXRpYWxpemVMb2NhbGVEaXNwbGF5Rm9ybWF0KCl9Z2V0IHBsYWNlaG9sZGVyVGV4dCgpe2NvbnN0IGE9dGhp''@;'; put 'put ''cy5sb2NhbGVEaXNwbGF5Rm9ybWF0LmZvcm1hdDtyZXR1cm4gYVswXSt0aGlzLmRlbGltaXRlcnNbMF0rYVsxXSt0aGlzLmRlbGltaXRlcnNbMV0rYVsyXX1zZXRNaW5EYXRlKGEpe2lmKGEpe2NvbnN0W2QsaCxmXT1hLnNwbGl0KCItIikubWFwKHY9PnBhcnNlSW50KHYsMTApKTt0aGlzLmRp''@;'; put 'put ''c2FibGVkRGF0ZXMubWluRGF0ZT1uZXcgTGQoZCxoLTEsZil9ZWxzZSB0aGlzLmRpc2FibGVkRGF0ZXMubWluRGF0ZT1uZXcgTGQoMCwwLDEpfXNldE1heERhdGUoYSl7aWYoYSl7Y29uc3RbZCxoLGZdPWEuc3BsaXQoIi0iKS5tYXAodj0+cGFyc2VJbnQodiwxMCkpO3RoaXMuZGlzYWJsZWRE''@;'; put 'put ''YXRlcy5tYXhEYXRlPW5ldyBMZChkLGgtMSxmKX1lbHNlIHRoaXMuZGlzYWJsZWREYXRlcy5tYXhEYXRlPW5ldyBMZCg5OTk5LDExLDMxKX1zZXRSYW5nZU9wdGlvbnMoYSl7Y29uc3QgZD10aGlzLnZhbGlkYXRlRGF0ZVJhbmdlT3B0aW9ucyhhKTt0aGlzLmRhdGVSYW5nZU9wdGlvbnM9ZHx8''@;'; put 'put ''W119Z2V0UmFuZ2VPcHRpb25zKCl7cmV0dXJuIHRoaXMuZGF0ZVJhbmdlT3B0aW9uc310b0xvY2FsZURpc3BsYXlGb3JtYXRTdHJpbmcoYSl7aWYoYSl7aWYoaXNOYU4oYS5nZXRUaW1lKCkpKXJldHVybiIiO2NvbnN0IGQ9YS5nZXREYXRlKCksaD1hLmdldE1vbnRoKCkrMSxmPWQ+OT9kLnRv''@;'; put 'put ''U3RyaW5nKCk6IjAiK2Qsdj1oPjk/aC50b1N0cmluZygpOiIwIitoO3JldHVybiB0aGlzLmxvY2FsZURpc3BsYXlGb3JtYXQ9PT1xTD9mK3RoaXMuZGVsaW1pdGVyc1swXSt2K3RoaXMuZGVsaW1pdGVyc1sxXSthLmdldEZ1bGxZZWFyKCk6dGhpcy5sb2NhbGVEaXNwbGF5Rm9ybWF0PT09YUc/''@;'; put 'put ''dit0aGlzLmRlbGltaXRlcnNbMF0rZit0aGlzLmRlbGltaXRlcnNbMV0rYS5nZXRGdWxsWWVhcigpOmEuZ2V0RnVsbFllYXIoKSt0aGlzLmRlbGltaXRlcnNbMF0rdit0aGlzLmRlbGltaXRlcnNbMV0rZn1yZXR1cm4iIn1nZXREYXRlVmFsdWVGcm9tRGF0ZVN0cmluZyhhKXtpZighYXx8InN0''@;'; put 'put ''cmluZyIhPXR5cGVvZiBhKXJldHVybiBudWxsO2NvbnN0IGQ9YS5tYXRjaChjWmUpO2lmKCFkfHwzIT09ZC5sZW5ndGgpcmV0dXJuIG51bGw7Y29uc3RbaCxmLHZdPWQ7cmV0dXJuIHRoaXMubG9jYWxlRGlzcGxheUZvcm1hdD09PXFMP3RoaXMudmFsaWRhdGVBbmRHZXREYXRlKHYsZixoKTp0''@;'; put 'put ''aGlzLmxvY2FsZURpc3BsYXlGb3JtYXQ9PT1hRz90aGlzLnZhbGlkYXRlQW5kR2V0RGF0ZSh2LGgsZik6dGhpcy52YWxpZGF0ZUFuZEdldERhdGUoaCxmLHYpfXZhbGlkYXRlRGF0ZVJhbmdlT3B0aW9ucyhhKXtjb25zdCBkPVtdO3JldHVybiBhPy5mb3JFYWNoKGg9PnsyIT09aD8udmFsdWU/''@;'; put 'put ''Lmxlbmd0aHx8IltvYmplY3QgRGF0ZV0iIT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGg/LnZhbHVlWzBdKXx8IltvYmplY3QgRGF0ZV0iIT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGg/LnZhbHVlWzFdKXx8ZC5wdXNoKGgpfSksZH1pbml0aWFsaXplTG9jYWxl''@;'; put 'put ''RGlzcGxheUZvcm1hdCgpe2NvbnN0IGE9dGhpcy5jbGRyTG9jYWxlRGF0ZUZvcm1hdC50b0xvY2FsZUxvd2VyQ2FzZSgpO3RoaXMubG9jYWxlRGlzcGxheUZvcm1hdD1vWmUudGVzdChhKT9xTDpzWmUudGVzdChhKT9hRzpoWmUsdGhpcy5leHRyYWN0RGVsaW1pdGVycygpfWV4dHJhY3REZWxp''@;'; put 'put ''bWl0ZXJzKCl7aWYodGhpcy5jbGRyTG9jYWxlRGF0ZUZvcm1hdCl7Y29uc3QgZD10aGlzLmNsZHJMb2NhbGVEYXRlRm9ybWF0LnJlcGxhY2UoZFplLCIiKS5zcGxpdChsWmUpO2QmJjQ9PT1kLmxlbmd0aD90aGlzLmRlbGltaXRlcnM9W2RbMV0sZFsyXV06Y29uc29sZS5lcnJvcigiVW5leHBl''@;'; put 'put ''Y3RlZCBkYXRlIGZvcm1hdCByZWNlaXZlZC4gRGVsaW1pdGVycyBleHRyYWN0ZWQ6ICIsZCl9fWlzVmFsaWRNb250aChhKXtyZXR1cm4gYT4tMSYmYTwxMn1pc1ZhbGlkRGF0ZShhLGQsaCl7cmV0dXJuIGg+MCYmaDw9bGRlKGEsZCl9dmFsaWRhdGVBbmRHZXREYXRlKGEsZCxoKXtjb25zdCBm''@;'; put 'put ''PSthLHY9K2QtMSxNPStoO2lmKCF0aGlzLmlzVmFsaWRNb250aCh2KXx8IXRoaXMuaXNWYWxpZERhdGUoZix2LE0pKXJldHVybiBudWxsO2NvbnN0IEQ9ZnVuY3Rpb24gZ1plKGMpe2lmKGM+OTk5OXx8Yz4xMDAmJmM8OTk5fHxjPDEwKXJldHVybi0xO2lmKGM+OTk5KXJldHVybiBjO2NvbnN0''@;'; put 'put ''IGw9KG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpO2xldCBkPWMrMTAwKk1hdGguZmxvb3IobC8xMDApO3JldHVybiBkPmwrMjAmJihkLT0xMDApLGR9KGYpO3JldHVybi0xIT09RD9uZXcgRGF0ZShELHYsTSk6bnVsbH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXco''@;'; put 'put ''YXx8YykoeHIoWngpKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxZeT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5fdG91Y2hlZENoYW5nZT1uZXcgV24sdGhpcy5fZGlydHlDaGFuZ2U9bmV3IFdufWdldCB0b3VjaGVkQ2hh''@;'; put 'put ''bmdlKCl7cmV0dXJuIHRoaXMuX3RvdWNoZWRDaGFuZ2UuYXNPYnNlcnZhYmxlKCl9Z2V0IGRpcnR5Q2hhbmdlKCl7cmV0dXJuIHRoaXMuX2RpcnR5Q2hhbmdlLmFzT2JzZXJ2YWJsZSgpfW1hcmtBc1RvdWNoZWQoKXt0aGlzLl90b3VjaGVkQ2hhbmdlLm5leHQoKX1tYXJrQXNEaXJ0eSgpe3Ro''@;'; put 'put ''aXMuX2RpcnR5Q2hhbmdlLm5leHQoKX1zZXREaXNhYmxlZChhKXt0aGlzLmRpc2FibGVkPWF9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLGNkZT0oKCk9''@;'; put 'put ''PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlPWEsdGhpcy5jb21tb25TdHJpbmdzPWQsdGhpcy5vblNlbGVjdERheT1uZXcgS3J9Z2V0IGRheVZpZXcoKXtyZXR1cm4gdGhpcy5fZGF5Vmlld31zZXQgZGF5VmlldyhhKXt0aGlzLl9kYXlWaWV3''@;'; put 'put ''PWF9Z2V0IGRheVN0cmluZygpe3JldHVybiB0aGlzLmRheVZpZXcuaXNTZWxlY3RlZD90aGlzLmNvbW1vblN0cmluZ3MucGFyc2UodGhpcy5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlclNlbGVjdGVkTGFiZWwse0ZVTExfREFURTp0aGlzLl9kYXlWaWV3LmRheU1vZGVsLnRvRGF0ZVN0''@;'; put 'put ''cmluZygpfSk6dGhpcy5fZGF5Vmlldy5kYXlNb2RlbC50b0RhdGVTdHJpbmcoKX1nZXQgaXNSYW5nZVN0YXJ0RGF5KCl7cmV0dXJuIHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5pc1JhbmdlUGlja2VyJiZ0aGlzLmRheVZpZXc/LmRheU1vZGVsPy50b0NvbXBhcmlzb25TdHJpbmcoKT09''@;'; put 'put ''PXRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheT8udG9Db21wYXJpc29uU3RyaW5nKCl9Z2V0IGlzUmFuZ2VFbmREYXkoKXtyZXR1cm4gdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmlzUmFuZ2VQaWNrZXImJnRoaXMuZGF5Vmlldz8uZGF5TW9kZWw/LnRvQ29tcGFy''@;'; put 'put ''aXNvblN0cmluZygpPT09dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5Py50b0NvbXBhcmlzb25TdHJpbmcoKX1ob3Zlckxpc3RlbmVyKCl7dGhpcy5kYXlWaWV3LmlzRGlzYWJsZWR8fCh0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuaG92ZXJlZERheT10aGlz''@;'; put 'put ''LmRheVZpZXcuZGF5TW9kZWwpfW9uRGF5Vmlld0ZvY3VzKCl7dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmZvY3VzZWREYXk9dGhpcy5kYXlWaWV3LmRheU1vZGVsfXNlbGVjdERheSgpe3RoaXMuZGF5Vmlldy5pc0Rpc2FibGVkfHx0aGlzLm9uU2VsZWN0RGF5LmVtaXQodGhpcy5kYXlW''@;'; put 'put ''aWV3LmRheU1vZGVsKX1pc0luUmFuZ2UoKXtyZXR1cm4hIXRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5pc1JhbmdlUGlja2VyJiYodGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5JiZ0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXk/dGhp''@;'; put 'put ''cy5fZGF5Vmlldy5kYXlNb2RlbD8uaXNBZnRlcih0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXkpJiZ0aGlzLl9kYXlWaWV3LmRheU1vZGVsPy5pc0JlZm9yZSh0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXkpOiEoIXRoaXMuX2RhdGVOYXZp''@;'; put 'put ''Z2F0aW9uU2VydmljZS5zZWxlY3RlZERheXx8dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5KSYmdGhpcy5fZGF5Vmlldy5kYXlNb2RlbD8uaXNBZnRlcih0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXkpJiZ0aGlzLl9kYXlWaWV3LmRheU1v''@;'; put 'put ''ZGVsPy5pc0JlZm9yZSh0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuaG92ZXJlZERheSwhMCkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShNaCksR2UoaXMpKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRh''@;'; put 'put ''eSJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmRnQoIm1vdXNlZW50ZXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGQuaG92ZXJMaXN0ZW5lcigpfSksMiZhJiZUcigiZGF5IiwhMCl9LGlucHV0czp7ZGF5VmlldzpbTm4uTm9uZSwiY2xyRGF5VmlldyIsImRheVZp''@;'; put 'put ''ZXciXX0sb3V0cHV0czp7b25TZWxlY3REYXk6InNlbGVjdERheSJ9LGRlY2xzOjIsdmFyczoxOSxjb25zdHM6W1sidHlwZSIsImJ1dHRvbiIsMSwiZGF5LWJ0biIsMywiY2xpY2siLCJmb2N1cyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKGRlKDAsImJ1dHRvbiIsMCksRnQoImNs''@;'; put 'put ''aWNrIixmdW5jdGlvbigpe3JldHVybiBkLnNlbGVjdERheSgpfSkoImZvY3VzIixmdW5jdGlvbigpe3JldHVybiBkLm9uRGF5Vmlld0ZvY3VzKCl9KSxMZSgxKSxoZSgpKSwyJmEmJihUcigiaXMtdG9kYXkiLGQuZGF5Vmlldy5pc1RvZGF5c0RhdGUpKCJpcy1leGNsdWRlZCIsZC5kYXlWaWV3''@;'; put 'put ''LmlzRXhjbHVkZWQpKCJpcy1kaXNhYmxlZCIsZC5kYXlWaWV3LmlzRGlzYWJsZWQpKCJpcy1zZWxlY3RlZCIsZC5kYXlWaWV3LmlzU2VsZWN0ZWQpKCJpbi1yYW5nZSIsZC5pc0luUmFuZ2UoKSkoImlzLXN0YXJ0LXJhbmdlIixkLmlzUmFuZ2VTdGFydERheSkoImlzLWVuZC1yYW5nZSIsZC5p''@;'; put 'put ''c1JhbmdlRW5kRGF5KSxocigidGFiaW5kZXgiLGQuZGF5Vmlldy50YWJJbmRleCkoImFyaWEtY3VycmVudCIsZC5kYXlWaWV3LmlzVG9kYXlzRGF0ZT8iZGF0ZSI6ImZhbHNlIikoImFyaWEtbGFiZWwiLGQuZGF5U3RyaW5nKSgiYXJpYS1zZWxlY3RlZCIsZC5kYXlWaWV3LmlzU2VsZWN0ZWQp''@;'; put 'put ''LGZlKCksSXIoIiAiLGQuZGF5Vmlldy5kYXlNb2RlbC5kYXRlLCIgIikpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSx1ZGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSxEKXt0aGlzLl9sb2NhbGVIZWxwZXJTZXJ2aWNlPWEsdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2''@;'; put 'put ''aWNlPWQsdGhpcy5fZGF0ZXBpY2tlckZvY3VzU2VydmljZT1oLHRoaXMuX2RhdGVJT1NlcnZpY2U9Zix0aGlzLl9lbFJlZj12LHRoaXMuX2RhdGVGb3JtQ29udHJvbFNlcnZpY2U9TSx0aGlzLl90b2dnbGVTZXJ2aWNlPUQsdGhpcy5fc3Vicz1bXSx0aGlzLmdlbmVyYXRlQ2FsZW5kYXJWaWV3''@;'; put 'put ''KCksdGhpcy5pbml0aWFsaXplU3Vic2NyaXB0aW9ucygpfWdldCBsb2NhbGVEYXlzKCl7cmV0dXJuIHRoaXMuX2xvY2FsZUhlbHBlclNlcnZpY2UubG9jYWxlRGF5c31nZXQgY2FsZW5kYXIoKXtyZXR1cm4gdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmRpc3BsYXllZENhbGVuZGFyfWdl''@;'; put 'put ''dCBzZWxlY3RlZERheSgpe3JldHVybiB0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXl9Z2V0IHNlbGVjdGVkRW5kRGF5KCl7cmV0dXJuIHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZEVuZERheX1nZXQgZm9jdXNlZERheSgpe3JldHVybiB0aGlzLl9k''@;'; put 'put ''YXRlTmF2aWdhdGlvblNlcnZpY2UuZm9jdXNlZERheX1nZXQgdG9kYXkoKXtyZXR1cm4gdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnRvZGF5fW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuX2RhdGVwaWNrZXJGb2N1c1NlcnZpY2UuZm9jdXNDZWxsKHRoaXMuX2VsUmVmKX1uZ09uRGVzdHJv''@;'; put 'put ''eSgpe3RoaXMuX3N1YnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfW9uS2V5RG93bihhKXtpZihhJiZ0aGlzLmZvY3VzZWREYXkpc3dpdGNoKEkyKGEua2V5KSl7Y2FzZSBnYS5BcnJvd1VwOmEucHJldmVudERlZmF1bHQoKSx0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuaW5jcmVt''@;'; put 'put ''ZW50Rm9jdXNEYXkoLTcpO2JyZWFrO2Nhc2UgZ2EuQXJyb3dEb3duOmEucHJldmVudERlZmF1bHQoKSx0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuaW5jcmVtZW50Rm9jdXNEYXkoNyk7YnJlYWs7Y2FzZSBnYS5BcnJvd0xlZnQ6YS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX2RhdGVOYXZp''@;'; put 'put ''Z2F0aW9uU2VydmljZS5pbmNyZW1lbnRGb2N1c0RheSgtMSk7YnJlYWs7Y2FzZSBnYS5BcnJvd1JpZ2h0OmEucHJldmVudERlZmF1bHQoKSx0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuaW5jcmVtZW50Rm9jdXNEYXkoMSl9fXNldFNlbGVjdGVkRGF5KGEpe2NvbnN0IGQ9dGhpcy5fZGF0''@;'; put 'put ''ZU5hdmlnYXRpb25TZXJ2aWNlLmhhc0FjdGlvbkJ1dHRvbnMsaD10aGlzLnVwZGF0ZUNhbGVuZGFyVmlld01vZGFsKGEpO3RoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5ub3RpZnlTZWxlY3RlZERheUNoYW5nZWQoaCx7ZW1pdEV2ZW50OiFkfSksZHx8KHRoaXMuX2RhdGVGb3JtQ29udHJv''@;'; put 'put ''bFNlcnZpY2UubWFya0FzRGlydHkoKSx0aGlzLnZhbGlkYXRlQW5kQ2xvc2VEYXRlUGlja2VyKCkpfWluaXRpYWxpemVTdWJzY3JpcHRpb25zKCl7dGhpcy5fc3Vicy5wdXNoKHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5kaXNwbGF5ZWRDYWxlbmRhckNoYW5nZS5zdWJzY3JpYmUoKCk9''@;'; put 'put ''Pnt0aGlzLmdlbmVyYXRlQ2FsZW5kYXJWaWV3KCl9KSksdGhpcy5fc3Vicy5wdXNoKHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5mb2N1c2VkRGF5Q2hhbmdlLnN1YnNjcmliZShhPT57dGhpcy5jYWxlbmRhclZpZXdNb2RlbC51cGRhdGVGb2N1c2FibGVEYXkoYSl9KSksdGhpcy5fc3Vi''@;'; put 'put ''cy5wdXNoKHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5mb2N1c09uQ2FsZW5kYXJDaGFuZ2Uuc3Vic2NyaWJlKCgpPT57dGhpcy5fZGF0ZXBpY2tlckZvY3VzU2VydmljZS5mb2N1c0NlbGwodGhpcy5fZWxSZWYpfSkpLHRoaXMuX3N1YnMucHVzaCh0aGlzLl9kYXRlTmF2aWdhdGlvblNl''@;'; put 'put ''cnZpY2UucmVmcmVzaENhbGVuZGFyVmlldy5zdWJzY3JpYmUoKCk9Pnt0aGlzLnJlZnJlc2hDYWxlbmRhclZpZXdNb2RhbCgpfSkpfXZhbGlkYXRlQW5kQ2xvc2VEYXRlUGlja2VyKCl7KHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5pc1JhbmdlUGlja2VyJiZ0aGlzLl9kYXRlTmF2aWdh''@;'; put 'put ''dGlvblNlcnZpY2Uuc2VsZWN0ZWREYXkmJnRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZEVuZERheXx8IXRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5pc1JhbmdlUGlja2VyJiZ0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXkpJiYodGhpcy5fdG9n''@;'; put 'put ''Z2xlU2VydmljZS5vcGVuPSExKX11cGRhdGVDYWxlbmRhclZpZXdNb2RhbChhKXtjb25zdCBkPXRoaXMuY2FsZW5kYXJWaWV3TW9kZWwuc2VsZWN0ZWREYXl8fG51bGwsaD10aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuaXNSYW5nZVBpY2tlcjtsZXQgZj10aGlzLmNhbGVuZGFyVmlld01v''@;'; put 'put ''ZGVsLnNlbGVjdGVkRW5kRGF5fHxudWxsO3JldHVybiBoPyFkfHxkJiZmfHxkJiZhPy5pc0JlZm9yZShkKT8odGhpcy5jYWxlbmRhclZpZXdNb2RlbC51cGRhdGVTZWxlY3RlZERheShhKSxmJiYoZj12b2lkIDAsdGhpcy5jYWxlbmRhclZpZXdNb2RlbC51cGRhdGVTZWxlY3RlZEVuZERheShm''@;'; put 'put ''KSkpOnRoaXMuY2FsZW5kYXJWaWV3TW9kZWwudXBkYXRlU2VsZWN0ZWRFbmREYXkoYSk6dGhpcy5jYWxlbmRhclZpZXdNb2RlbC51cGRhdGVTZWxlY3RlZERheShhKSxoP3tzdGFydERhdGU6dGhpcy5jYWxlbmRhclZpZXdNb2RlbC5zZWxlY3RlZERheSxlbmREYXRlOnRoaXMuY2FsZW5kYXJW''@;'; put 'put ''aWV3TW9kZWwuc2VsZWN0ZWRFbmREYXl9OnRoaXMuY2FsZW5kYXJWaWV3TW9kZWwuc2VsZWN0ZWREYXl9cmVmcmVzaENhbGVuZGFyVmlld01vZGFsKCl7dGhpcy5jYWxlbmRhclZpZXdNb2RlbC51cGRhdGVTZWxlY3RlZERheSh0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRE''@;'; put 'put ''YXkpLHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5pc1JhbmdlUGlja2VyJiZ0aGlzLmNhbGVuZGFyVmlld01vZGVsLnVwZGF0ZVNlbGVjdGVkRW5kRGF5KHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZEVuZERheSl9Z2VuZXJhdGVDYWxlbmRhclZpZXcoKXt0aGlzLmNh''@;'; put 'put ''bGVuZGFyVmlld01vZGVsPW5ldyBiWmUodGhpcy5jYWxlbmRhcix0aGlzLnNlbGVjdGVkRGF5LHRoaXMuc2VsZWN0ZWRFbmREYXksdGhpcy5mb2N1c2VkRGF5LHRoaXMudG9kYXksdGhpcy5fbG9jYWxlSGVscGVyU2VydmljZS5maXJzdERheU9mV2Vlayx0aGlzLl9kYXRlSU9TZXJ2aWNlLmRp''@;'; put 'put ''c2FibGVkRGF0ZXMpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShaeCksR2UoTWgpLEdlKFNtKSxHZShjZyksR2UoSmkpLEdlKFl5KSxHZShzYykpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItY2FsZW5kYXIiXV0s''@;'; put 'put ''aG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZhJiZGdCgia2V5ZG93biIsZnVuY3Rpb24oZil7cmV0dXJuIGQub25LZXlEb3duKGYpfSl9LGRlY2xzOjQsdmFyczoyLGNvbnN0czpbWyJyb2xlIiwicHJlc2VudGF0aW9uIiwxLCJjYWxlbmRhci10YWJsZSJdLFsxLCJjYWxlbmRhci1yb3ci''@;'; put 'put ''LCJ3ZWVrZGF5cyJdLFsiY2xhc3MiLCJjYWxlbmRhci1jZWxsIHdlZWtkYXkiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsiY2xhc3MiLCJjYWxlbmRhci1yb3ciLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJjYWxlbmRhci1jZWxsIiwid2Vla2RheSJdLFsxLCJjYWxlbmRhci1yb3ciXSxbImNs''@;'; put 'put ''YXNzIiwiY2FsZW5kYXItY2VsbCIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImNhbGVuZGFyLWNlbGwiXSxbMywic2VsZWN0RGF5IiwiY2xyRGF5VmlldyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKGRlKDAsInRhYmxlIiwwKSgxLCJ0ciIsMSksZ3QoMixUTmUsMywyLCJ0aCIs''@;'; put 'put ''MiksaGUoKSxndCgzLGtOZSwyLDEsInRyIiwzKSxoZSgpKSwyJmEmJihmZSgyKSxNZSgibmdGb3JPZiIsZC5sb2NhbGVEYXlzKSxmZSgpLE1lKCJuZ0Zvck9mIixkLmNhbGVuZGFyVmlld01vZGVsLmNhbGVuZGFyVmlldykpfSxkZXBlbmRlbmNpZXM6W25zLGNkZV0sZW5jYXBzdWxhdGlvbjoy''@;'; put 'put ''fSksY30pKCksWEw9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLl9kb2N1bWVudD1hLHRoaXMuX2lzVXNlckFnZW50TW9iaWxlPSExLGEmJih0aGlzLl9pc1VzZXJBZ2VudE1vYmlsZT11WmUudGVzdChhLmRlZmF1bHRWaWV3Lm5hdmlnYXRvci51c2VyQWdlbnQpLHRoaXMuX2lu''@;'; put 'put ''bmVyV2lkdGg9YS5kZWZhdWx0Vmlldy5pbm5lcldpZHRoKX1nZXQgaXNFbmFibGVkKCl7cmV0dXJuISh0aGlzLl9kb2N1bWVudCYmdGhpcy5faW5uZXJXaWR0aDw3NjgmJnRoaXMuX2lzVXNlckFnZW50TW9iaWxlKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXco''@;'; put 'put ''YXx8YykoeHIodnMpKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxvRz0oKCk9PntjbGFzcyBjIGV4dGVuZHMgQzd7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0sRCxaLHJlLGNlLGJlLEVlLEJlKXtzdXBlcihhLFl4LGQsdixmLGgpLHRoaXMu''@;'; put 'put ''ZWw9aCx0aGlzLnJlbmRlcmVyPWYsdGhpcy5jb250cm9sPXYsdGhpcy5jb250YWluZXI9TSx0aGlzLmRhdGVJT1NlcnZpY2U9RCx0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZT1aLHRoaXMuZGF0ZXBpY2tlckVuYWJsZWRTZXJ2aWNlPXJlLHRoaXMuZGF0ZUZvcm1Db250cm9sU2VydmljZT1j''@;'; put 'put ''ZSx0aGlzLnBsYXRmb3JtSWQ9YmUsdGhpcy5mb2N1c1NlcnZpY2U9RWUsdGhpcy5kYXRlcGlja2VyRm9jdXNTZXJ2aWNlPUJlLHRoaXMuaW5kZXg9MX1nZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5kYXRlRm9ybUNvbnRyb2xTZXJ2aWNlP3RoaXMuZGF0ZUZvcm1Db250cm9sU2VydmljZS5k''@;'; put 'put ''aXNhYmxlZHx8ISF0aGlzLmNvbnRyb2w/LmNvbnRyb2w/LmRpc2FibGVkOm51bGx9c2V0IGRpc2FibGVkKGEpe3RoaXMuZGF0ZUZvcm1Db250cm9sU2VydmljZSYmdGhpcy5kYXRlRm9ybUNvbnRyb2xTZXJ2aWNlLnNldERpc2FibGVkKHFmKGEpKX1nZXQgcGxhY2Vob2xkZXJUZXh0KCl7cmV0''@;'; put 'put ''dXJuIHRoaXMucGxhY2Vob2xkZXI/dGhpcy5wbGFjZWhvbGRlcjp0aGlzLmRhdGVJT1NlcnZpY2UucGxhY2Vob2xkZXJUZXh0fWdldCBpbnB1dFR5cGUoKXtyZXR1cm4gdGwodGhpcy5wbGF0Zm9ybUlkKSYmdGhpcy51c2luZ05hdGl2ZURhdGVwaWNrZXIoKT8iZGF0ZSI6InRleHQifW5nT25J''@;'; put 'put ''bml0KCl7c3VwZXIubmdPbkluaXQoKSx0aGlzLnBvcHVsYXRlU2VydmljZXNGcm9tQ29udGFpbmVyQ29tcG9uZW50KCksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5saXN0ZW5Gb3JVc2VyU2VsZWN0ZWREYXlDaGFuZ2VzKCksdGhpcy5saXN0ZW5Gb3JDb250cm9sVmFsdWVDaGFuZ2Vz''@;'; put 'put ''KCksdGhpcy5saXN0ZW5Gb3JUb3VjaENoYW5nZXMoKSx0aGlzLmxpc3RlbkZvckRpcnR5Q2hhbmdlcygpLHRoaXMubGlzdGVuRm9ySW5wdXRSZWZvY3VzKCkpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMucHJvY2Vzc0luaXRpYWxJbnB1dHMoKX1zZXRGb2N1c1N0YXRlcygpe3RoaXMuc2V0Rm9j''@;'; put 'put ''dXMoITApfXRyaWdnZXJWYWxpZGF0aW9uKCl7c3VwZXIudHJpZ2dlclZhbGlkYXRpb24oKSx0aGlzLnNldEZvY3VzKCExKX1vblZhbHVlQ2hhbmdlKGEpe2NvbnN0IGQ9dGhpcy5kYXRlSU9TZXJ2aWNlLmdldERhdGVWYWx1ZUZyb21EYXRlU3RyaW5nKGEudmFsdWUpO2lmKHRoaXMudXNpbmdD''@;'; put 'put ''bGFyaXR5RGF0ZXBpY2tlcigpJiZkKXRoaXMudXBkYXRlRGF0ZShkLCEwKTtlbHNlIGlmKHRoaXMudXNpbmdOYXRpdmVEYXRlcGlja2VyKCkpe2NvbnN0W2gsZix2XT1hLnZhbHVlLnNwbGl0KCItIik7dGhpcy51cGRhdGVEYXRlKG5ldyBEYXRlKCtoLCtmLTEsK3YpLCEwKX1lbHNlIHRoaXMu''@;'; put 'put ''ZW1pdERhdGVPdXRwdXQobnVsbCl9ZGF0ZXBpY2tlckhhc0Zvcm1Db250cm9sKCl7cmV0dXJuISF0aGlzLmNvbnRyb2x9c2V0RGF0ZShhKXsic3RyaW5nIj09dHlwZW9mIGEmJihhPW5ldyBEYXRlKGEpKSx0aGlzLnByZXZpb3VzRGF0ZUNoYW5nZSE9PWEmJnRoaXMudXBkYXRlRGF0ZShhKSx0''@;'; put 'put ''aGlzLmluaXRpYWxDbHJEYXRlSW5wdXRWYWx1ZXx8KHRoaXMuaW5pdGlhbENsckRhdGVJbnB1dFZhbHVlPWEpfXVzaW5nQ2xhcml0eURhdGVwaWNrZXIoKXtyZXR1cm4gdGhpcy5kYXRlcGlja2VyRW5hYmxlZFNlcnZpY2UuaXNFbmFibGVkfXVzaW5nTmF0aXZlRGF0ZXBpY2tlcigpe3JldHVy''@;'; put 'put ''biF0aGlzLmRhdGVwaWNrZXJFbmFibGVkU2VydmljZS5pc0VuYWJsZWR9c2V0Rm9jdXMoYSl7dGhpcy5mb2N1c1NlcnZpY2UmJih0aGlzLmZvY3VzU2VydmljZS5mb2N1c2VkPWEpfXBvcHVsYXRlU2VydmljZXNGcm9tQ29udGFpbmVyQ29tcG9uZW50KCl7dGhpcy5jb250YWluZXJ8fCh0aGlz''@;'; put 'put ''LmRhdGVJT1NlcnZpY2U9dGhpcy5nZXRQcm92aWRlckZyb21Db250YWluZXIoY2cpLHRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlPXRoaXMuZ2V0UHJvdmlkZXJGcm9tQ29udGFpbmVyKE1oKSx0aGlzLmRhdGVwaWNrZXJFbmFibGVkU2VydmljZT10aGlzLmdldFByb3ZpZGVyRnJvbUNvbnRh''@;'; put 'put ''aW5lcihYTCksdGhpcy5kYXRlRm9ybUNvbnRyb2xTZXJ2aWNlPXRoaXMuZ2V0UHJvdmlkZXJGcm9tQ29udGFpbmVyKFl5KSl9cHJvY2Vzc0luaXRpYWxJbnB1dHMoKXt0aGlzLmRhdGVwaWNrZXJIYXNGb3JtQ29udHJvbCgpP3RoaXMudXBkYXRlRGF0ZSh0aGlzLmRhdGVJT1NlcnZpY2UuZ2V0''@;'; put 'put ''RGF0ZVZhbHVlRnJvbURhdGVTdHJpbmcodGhpcy5jb250cm9sLnZhbHVlKSk6dGhpcy51cGRhdGVEYXRlKHRoaXMuaW5pdGlhbENsckRhdGVJbnB1dFZhbHVlKX11cGRhdGVEYXRlKGEsZD0hMSl7Y29uc3QgaD10aGlzLmdldFZhbGlkRGF0ZVZhbHVlRnJvbURhdGUoYSk7aWYoZD90aGlzLmVt''@;'; put 'put ''aXREYXRlT3V0cHV0KGgpOnRoaXMucHJldmlvdXNEYXRlQ2hhbmdlPWgsdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2Upe2NvbnN0IGY9aD9uZXcgTGQoaC5nZXRGdWxsWWVhcigpLGguZ2V0TW9udGgoKSxoLmdldERhdGUoKSk6bnVsbDt0aGlzLnVwZGF0ZURheU1vZGVsKGYpfXRoaXMudXBk''@;'; put 'put ''YXRlSW5wdXQoaCl9dXBkYXRlSW5wdXQoYSl7aWYoYSl7Y29uc3QgZD10aGlzLmRhdGVJT1NlcnZpY2UudG9Mb2NhbGVEaXNwbGF5Rm9ybWF0U3RyaW5nKGEpO3RoaXMudXNpbmdOYXRpdmVEYXRlcGlja2VyKCk/KGEuc2V0TWludXRlcyhhLmdldE1pbnV0ZXMoKS1hLmdldFRpbWV6b25lT2Zm''@;'; put 'put ''c2V0KCkpLHRoaXMucmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJ2YWx1ZUFzRGF0ZSIsYSkpOnRoaXMuZGF0ZXBpY2tlckhhc0Zvcm1Db250cm9sKCkmJmQhPT10aGlzLmNvbnRyb2wudmFsdWU/dGhpcy5jb250cm9sLmNvbnRyb2wuc2V0VmFsdWUoZCk6dGhp''@;'; put 'put ''cy5yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsInZhbHVlIixkKSx0aGlzLnZhbGlkYXRlRGF0ZVJhbmdlKCl9ZWxzZSB0aGlzLnJlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuZWwubmF0aXZlRWxlbWVudCwidmFsdWUiLCIiKX1nZXRWYWxpZERhdGVWYWx1ZUZy''@;'; put 'put ''b21EYXRlKGEpe2lmKHRoaXMuZGF0ZUlPU2VydmljZSl7Y29uc3QgZD10aGlzLmRhdGVJT1NlcnZpY2UudG9Mb2NhbGVEaXNwbGF5Rm9ybWF0U3RyaW5nKGEpO3JldHVybiB0aGlzLmRhdGVJT1NlcnZpY2UuZ2V0RGF0ZVZhbHVlRnJvbURhdGVTdHJpbmcoZCl9cmV0dXJuIG51bGx9ZW1pdERh''@;'; put 'put ''dGVPdXRwdXQoYSl7IWZ1bmN0aW9uIG1aZShjLGwpe3JldHVybiBjIGluc3RhbmNlb2YgRGF0ZSYmbCBpbnN0YW5jZW9mIERhdGUmJmMuZ2V0RnVsbFllYXIoKT09PWwuZ2V0RnVsbFllYXIoKSYmYy5nZXRNb250aCgpPT09bC5nZXRNb250aCgpJiZjLmdldERhdGUoKT09PWwuZ2V0RGF0ZSgp''@;'; put 'put ''fShhLHRoaXMucHJldmlvdXNEYXRlQ2hhbmdlKT8odGhpcy5kYXRlQ2hhbmdlLmVtaXQoYSksdGhpcy5wcmV2aW91c0RhdGVDaGFuZ2U9YSk6IWEmJnRoaXMucHJldmlvdXNEYXRlQ2hhbmdlJiYodGhpcy5kYXRlQ2hhbmdlLmVtaXQobnVsbCksdGhpcy5wcmV2aW91c0RhdGVDaGFuZ2U9bnVs''@;'; put 'put ''bCl9bGlzdGVuRm9yQ29udHJvbFZhbHVlQ2hhbmdlcygpe3JldHVybiB0aGlzLmRhdGVwaWNrZXJIYXNGb3JtQ29udHJvbCgpP3RoaXMuY29udHJvbC52YWx1ZUNoYW5nZXMucGlwZSgkbCgoKT0+IXRoaXMuZGF0ZXBpY2tlckZvY3VzU2VydmljZS5lbGVtZW50SXNGb2N1c2VkKHRoaXMuZWwu''@;'; put 'put ''bmF0aXZlRWxlbWVudCkpKS5zdWJzY3JpYmUoYT0+dGhpcy51cGRhdGVEYXRlKHRoaXMuZGF0ZUlPU2VydmljZS5nZXREYXRlVmFsdWVGcm9tRGF0ZVN0cmluZyhhKSkpOm51bGx9bGlzdGVuRm9yVXNlclNlbGVjdGVkRGF5Q2hhbmdlcygpe3JldHVybiB0aGlzLnVzZXJTZWxlY3RlZERheUNo''@;'; put 'put ''YW5nZS5zdWJzY3JpYmUoYT0+dGhpcy51cGRhdGVEYXRlKGE/LnRvRGF0ZSgpLCEwKSl9bGlzdGVuRm9yVG91Y2hDaGFuZ2VzKCl7cmV0dXJuIHRoaXMuZGF0ZUZvcm1Db250cm9sU2VydmljZS50b3VjaGVkQ2hhbmdlLnBpcGUoJGwoKCk9PnRoaXMuZGF0ZXBpY2tlckhhc0Zvcm1Db250cm9s''@;'; put 'put ''KCkpKS5zdWJzY3JpYmUoKCk9PnRoaXMuY29udHJvbC5jb250cm9sLm1hcmtBc1RvdWNoZWQoKSl9bGlzdGVuRm9yRGlydHlDaGFuZ2VzKCl7cmV0dXJuIHRoaXMuZGF0ZUZvcm1Db250cm9sU2VydmljZS5kaXJ0eUNoYW5nZS5waXBlKCRsKCgpPT50aGlzLmRhdGVwaWNrZXJIYXNGb3JtQ29u''@;'; put 'put ''dHJvbCgpKSkuc3Vic2NyaWJlKCgpPT50aGlzLmNvbnRyb2wuY29udHJvbC5tYXJrQXNEaXJ0eSgpKX1saXN0ZW5Gb3JJbnB1dFJlZm9jdXMoKXtyZXR1cm4gdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXlDaGFuZ2UucGlwZSgkbChhPT4hIWEmJiF0aGlzLmRhdGVOYXZp''@;'; put 'put ''Z2F0aW9uU2VydmljZS5pc1JhbmdlUGlja2VyKSkuc3Vic2NyaWJlKCgpPT50aGlzLmRhdGVwaWNrZXJGb2N1c1NlcnZpY2UuZm9jdXNJbnB1dCh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQpKX12YWxpZGF0ZURhdGVSYW5nZSgpe2lmKHRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmlzUmFuZ2VQ''@;'; put 'put ''aWNrZXIpe2NvbnN0IGE9dGhpcy5uZ0NvbnRyb2xTZXJ2aWNlPy5jb250cm9sLGQ9dGhpcy5uZ0NvbnRyb2xTZXJ2aWNlPy5hZGRpdGlvbmFsQ29udHJvbHM7dGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXk/LmlzQmVmb3JlKHRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNl''@;'; put 'put ''LnNlbGVjdGVkRW5kRGF5LCEwKSYmKGE/Lmhhc0Vycm9yKCJyYW5nZSIpfHxkPy5zb21lKGY9PmYuaGFzRXJyb3IoInJhbmdlIikpKSYmKGEuY29udHJvbD8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSksZC5mb3JFYWNoKGY9PntmPy5jb250cm9sPy51cGRhdGVWYWx1''@;'; put 'put ''ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ITF9KX0pKX19fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKERvKSxHZShEcyksR2UoSmkpLEdlKEVvKSxHZShkMSwxMCksR2UoQ3MoKCk9Pll4KSw4KSxHZShjZyw4KSxHZShNaCw4KSxHZShYTCw4KSxH''@;'; put 'put ''ZShZeSw4KSxHZShpbyksR2UoVXksOCksR2UoU20pKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6Yyxob3N0VmFyczozLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmRnQoImZvY3VzIixmdW5jdGlvbigpe3JldHVybiBkLnNldEZvY3VzU3RhdGVzKCl9KSgiYmx1ciIsZnVuY3Rpb24o''@;'; put 'put ''KXtyZXR1cm4gZC50cmlnZ2VyVmFsaWRhdGlvbigpfSkoImNoYW5nZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQub25WYWx1ZUNoYW5nZShmLnRhcmdldCl9KSwyJmEmJihvcCgiZGlzYWJsZWQiLGQuZGlzYWJsZWQpLGhyKCJwbGFjZWhvbGRlciIsZC5wbGFjZWhvbGRlclRleHQpKCJ0eXBlIixk''@;'; put 'put ''LmlucHV0VHlwZSkpfSxpbnB1dHM6e3BsYWNlaG9sZGVyOiJwbGFjZWhvbGRlciIsZGlzYWJsZWQ6ImRpc2FibGVkIn0sZmVhdHVyZXM6W3dhXX0pLGN9KSgpLGRkZT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgb0d7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuZGF0ZUNo''@;'; put 'put ''YW5nZT1uZXcgS3IoITEpLHRoaXMuaW5wdXRXaWR0aD0xM31zZXQgZGF0ZShhKXt0aGlzLnNldERhdGUoYSl9Z2V0IGlucHV0U2l6ZSgpe3JldHVybiB0aGlzLmlucHV0V2lkdGh9Z2V0IHVzZXJTZWxlY3RlZERheUNoYW5nZSgpe3JldHVybiB0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5z''@;'; put 'put ''ZWxlY3RlZEVuZERheUNoYW5nZX10cmlnZ2VyQ29udHJvbElucHV0VmFsaWRhdGlvbigpe3RoaXMuZGF0ZXBpY2tlckhhc0Zvcm1Db250cm9sKCkmJih0aGlzLmNvbnRyb2wuY29udHJvbD8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSksdGhpcy5jb250cm9sLmNvbnRy''@;'; put 'put ''b2w/LnNldEVycm9ycyh0aGlzLmNvbnRyb2wuY29udHJvbC5lcnJvcnMpKX11cGRhdGVEYXlNb2RlbChhKXt0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5wZXJzaXN0ZWRFbmREYXRlPXRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5PWF9fXJldHVybiBjLlx1MDI3''@;'; put 'put ''NWZhYz0oKCk9PntsZXQgbDtyZXR1cm4gZnVuY3Rpb24oZCl7cmV0dXJuKGx8fChsPVdzKGMpKSkoZHx8Yyl9fSkoKSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJFbmREYXRlIiwiIl1dLGhvc3RWYXJzOjMsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZh''@;'; put 'put ''JiYoaHIoInNpemUiLGQuaW5wdXRTaXplKSxUcigiY2xyLWlucHV0IiwhMCkpfSxpbnB1dHM6e2lucHV0V2lkdGg6ImlucHV0V2lkdGgiLGRhdGU6W05uLk5vbmUsImNsckVuZERhdGUiLCJkYXRlIl19LG91dHB1dHM6e2RhdGVDaGFuZ2U6ImNsckVuZERhdGVDaGFuZ2UifSxmZWF0dXJlczpb''@;'; put 'put ''ZGEoW1NtXSksd2FdfSksY30pKCksSkw9KCgpPT57Y2xhc3MgYyBleHRlbmRzIG9He2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmRhdGVDaGFuZ2U9bmV3IEtyKCExKX1zZXQgZGF0ZShhKXt0aGlzLnNldERhdGUoYSl9c2V0IG1pbihhKXt0aGlzLmRhdGVJT1NlcnZp''@;'; put 'put ''Y2Uuc2V0TWluRGF0ZShhKSx0aGlzLnRyaWdnZXJDb250cm9sVmFsaWRhdGlvbigpfXNldCBtYXgoYSl7dGhpcy5kYXRlSU9TZXJ2aWNlLnNldE1heERhdGUoYSksdGhpcy50cmlnZ2VyQ29udHJvbFZhbGlkYXRpb24oKX1nZXQgdXNlclNlbGVjdGVkRGF5Q2hhbmdlKCl7cmV0dXJuIHRoaXMu''@;'; put 'put ''ZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5Q2hhbmdlfXVwZGF0ZURheU1vZGVsKGEpe3RoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnBlcnNpc3RlZERhdGU9dGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXk9YX10cmlnZ2VyQ29udHJvbFZhbGlkYXRpb24o''@;'; put 'put ''KXt0aGlzLmRhdGVwaWNrZXJIYXNGb3JtQ29udHJvbCgpJiYodGhpcy5jb250cm9sLmNvbnRyb2w/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohMX0pLHRoaXMuY29udHJvbC5jb250cm9sPy5zZXRFcnJvcnModGhpcy5jb250cm9sLmNvbnRyb2wuZXJyb3JzKSl9fXJldHVy''@;'; put 'put ''biBjLlx1MDI3NWZhYz0oKCk9PntsZXQgbDtyZXR1cm4gZnVuY3Rpb24oZCl7cmV0dXJuKGx8fChsPVdzKGMpKSkoZHx8Yyl9fSkoKSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJEYXRlIiwiIl1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEs''@;'; put 'put ''ZCl7MiZhJiZUcigiY2xyLWlucHV0IiwhMCl9LGlucHV0czp7ZGF0ZTpbTm4uTm9uZSwiY2xyRGF0ZSIsImRhdGUiXSxtaW46Im1pbiIsbWF4OiJtYXgifSxvdXRwdXRzOntkYXRlQ2hhbmdlOiJjbHJEYXRlQ2hhbmdlIn0sZmVhdHVyZXM6W2RhKFtTbV0pLHdhXX0pLGN9KSgpLGhkZT0oKCk9''@;'; put 'put ''PntjbGFzcyBjIGV4dGVuZHMgb0d7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuZGF0ZUNoYW5nZT1uZXcgS3IoITEpLHRoaXMuaW5wdXRXaWR0aD0xM31zZXQgZGF0ZShhKXt0aGlzLnNldERhdGUoYSl9Z2V0IGlucHV0U2l6ZSgpe3JldHVybiB0aGlzLmlucHV0V2lk''@;'; put 'put ''dGh9Z2V0IHVzZXJTZWxlY3RlZERheUNoYW5nZSgpe3JldHVybiB0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheUNoYW5nZX10cmlnZ2VyQ29udHJvbElucHV0VmFsaWRhdGlvbigpe3RoaXMuZGF0ZXBpY2tlckhhc0Zvcm1Db250cm9sKCkmJih0aGlzLmNvbnRyb2wuY29u''@;'; put 'put ''dHJvbD8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSksdGhpcy5jb250cm9sLmNvbnRyb2w/LnNldEVycm9ycyh0aGlzLmNvbnRyb2wuY29udHJvbC5lcnJvcnMpKX11cGRhdGVEYXlNb2RlbChhKXt0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5wZXJzaXN0ZWREYXRl''@;'; put 'put ''PXRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5PWF9fXJldHVybiBjLlx1MDI3NWZhYz0oKCk9PntsZXQgbDtyZXR1cm4gZnVuY3Rpb24oZCl7cmV0dXJuKGx8fChsPVdzKGMpKSkoZHx8Yyl9fSkoKSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJj''@;'; put 'put ''bHJTdGFydERhdGUiLCIiXV0saG9zdFZhcnM6NSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJihocigic2l6ZSIsZC5pbnB1dFNpemUpLF9kKCJ0ZXh0LWFsaWduIiwicmlnaHQiKSxUcigiY2xyLWlucHV0IiwhMCkpfSxpbnB1dHM6e2lucHV0V2lkdGg6ImlucHV0V2lkdGgiLGRh''@;'; put 'put ''dGU6W05uLk5vbmUsImNsclN0YXJ0RGF0ZSIsImRhdGUiXX0sb3V0cHV0czp7ZGF0ZUNoYW5nZToiY2xyU3RhcnREYXRlQ2hhbmdlIn0sZmVhdHVyZXM6W2RhKFtTbV0pLHdhXX0pLGN9KSgpLEd5PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLnBvc2l0aW9uPVRkWyJib3R0b20t''@;'; put 'put ''bGVmdCJdLHRoaXMuX2N1cnJlbnRWaWV3PSJEQVlWSUVXIn1nZXQgaXNEYXlWaWV3KCl7cmV0dXJuIkRBWVZJRVciPT09dGhpcy5fY3VycmVudFZpZXd9Z2V0IGlzWWVhclZpZXcoKXtyZXR1cm4iWUVBUlZJRVciPT09dGhpcy5fY3VycmVudFZpZXd9Z2V0IGlzTW9udGhWaWV3KCl7cmV0dXJu''@;'; put 'put ''Ik1PTlRIVklFVyI9PT10aGlzLl9jdXJyZW50Vmlld31jaGFuZ2VUb01vbnRoVmlldygpe3RoaXMuX2N1cnJlbnRWaWV3PSJNT05USFZJRVcifWNoYW5nZVRvWWVhclZpZXcoKXt0aGlzLl9jdXJyZW50Vmlldz0iWUVBUlZJRVcifWNoYW5nZVRvRGF5Vmlldygpe3RoaXMuX2N1cnJlbnRWaWV3''@;'; put 'put ''PSJEQVlWSUVXIn19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksZmRlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0pe3RoaXMuX2xv''@;'; put 'put ''Y2FsZUhlbHBlclNlcnZpY2U9YSx0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2U9ZCx0aGlzLl9kYXRlcGlja2VyRm9jdXNTZXJ2aWNlPWgsdGhpcy5fZWxSZWY9Zix0aGlzLl92aWV3TWFuYWdlclNlcnZpY2U9dix0aGlzLmNvbW1vblN0cmluZ3M9TSx0aGlzLl9mb2N1c2VkTW9udGhJbmRl''@;'; put 'put ''eD10aGlzLmNhbGVuZGFyTW9udGhJbmRleH1nZXQgbW9udGhOYW1lcygpe3JldHVybiB0aGlzLl9sb2NhbGVIZWxwZXJTZXJ2aWNlLmxvY2FsZU1vbnRoc1dpZGV9Z2V0IGNhbGVuZGFyTW9udGhJbmRleCgpe3JldHVybiB0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuZGlzcGxheWVkQ2Fs''@;'; put 'put ''ZW5kYXIubW9udGh9Z2V0IGNhbGVuZGFyRW5kTW9udGhJbmRleCgpe3JldHVybiB0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXk/Lm1vbnRofWdldCB5ZWFyQXR0clN0cmluZygpe3JldHVybiB0aGlzLmNvbW1vblN0cmluZ3MucGFyc2UodGhpcy5jb21tb25TdHJp''@;'; put 'put ''bmdzLmtleXMuZGF0ZXBpY2tlclNlbGVjdFllYXJUZXh0LHtDQUxFTkRBUl9ZRUFSOnRoaXMuY2FsZW5kYXJZZWFyLnRvU3RyaW5nKCl9KX1nZXQgY2FsZW5kYXJZZWFyKCl7cmV0dXJuIHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5kaXNwbGF5ZWRDYWxlbmRhci55ZWFyfWdldCBjdXJy''@;'; put 'put ''ZW50Q2FsZW5kYXJZZWFyKCl7cmV0dXJuKG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpfWdldCBjdXJyZW50Q2FsZW5kYXJNb250aCgpe3JldHVybihuZXcgRGF0ZSkuZ2V0TW9udGgoKX1nZXRJc1JhbmdlU3RhcnRNb250aChhKXtyZXR1cm4gdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmlz''@;'; put 'put ''UmFuZ2VQaWNrZXImJnRoaXMuY2FsZW5kYXJZZWFyPT09dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5Py55ZWFyJiZhPT09dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5Py5tb250aH1nZXRJc1JhbmdlRW5kTW9udGgoYSl7cmV0dXJuIHRoaXMu''@;'; put 'put ''X2RhdGVOYXZpZ2F0aW9uU2VydmljZS5pc1JhbmdlUGlja2VyJiZ0aGlzLmNhbGVuZGFyWWVhcj09PXRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZEVuZERheT8ueWVhciYmYT09PXRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZEVuZERheT8ubW9udGh9Y2hh''@;'; put 'put ''bmdlVG9ZZWFyVmlldygpe3RoaXMuX3ZpZXdNYW5hZ2VyU2VydmljZS5jaGFuZ2VUb1llYXJWaWV3KCl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5fZGF0ZXBpY2tlckZvY3VzU2VydmljZS5mb2N1c0NlbGwodGhpcy5fZWxSZWYpfW9uS2V5RG93bihhKXtpZihhKXtjb25zdCBkPUkyKGEua2V5''@;'; put 'put ''KTtkPT09Z2EuQXJyb3dVcCYmdGhpcy5fZm9jdXNlZE1vbnRoSW5kZXg+MT8oYS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX2ZvY3VzZWRNb250aEluZGV4LT0yLHRoaXMuX2RhdGVwaWNrZXJGb2N1c1NlcnZpY2UuZm9jdXNDZWxsKHRoaXMuX2VsUmVmKSk6ZD09PWdhLkFycm93RG93biYmdGhp''@;'; put 'put ''cy5fZm9jdXNlZE1vbnRoSW5kZXg8MTA/KGEucHJldmVudERlZmF1bHQoKSx0aGlzLl9mb2N1c2VkTW9udGhJbmRleCs9Mix0aGlzLl9kYXRlcGlja2VyRm9jdXNTZXJ2aWNlLmZvY3VzQ2VsbCh0aGlzLl9lbFJlZikpOmQ9PT1nYS5BcnJvd1JpZ2h0JiZ0aGlzLl9mb2N1c2VkTW9udGhJbmRl''@;'; put 'put ''eDwxMT8oYS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX2ZvY3VzZWRNb250aEluZGV4KyssdGhpcy5fZGF0ZXBpY2tlckZvY3VzU2VydmljZS5mb2N1c0NlbGwodGhpcy5fZWxSZWYpKTpkPT09Z2EuQXJyb3dMZWZ0JiZ0aGlzLl9mb2N1c2VkTW9udGhJbmRleD4wJiYoYS5wcmV2ZW50RGVmYXVs''@;'; put 'put ''dCgpLHRoaXMuX2ZvY3VzZWRNb250aEluZGV4LS0sdGhpcy5fZGF0ZXBpY2tlckZvY3VzU2VydmljZS5mb2N1c0NlbGwodGhpcy5fZWxSZWYpKX19aXNTZWxlY3RlZChhKXtyZXR1cm4gdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5Py55ZWFyPT09dGhpcy5jYWxlbmRh''@;'; put 'put ''clllYXImJmE9PT10aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXk/Lm1vbnRofHx0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXk/LnllYXI9PT10aGlzLmNhbGVuZGFyWWVhciYmYT09PXRoaXMuY2FsZW5kYXJFbmRNb250aEluZGV4fW9uSG92''@;'; put 'put ''ZXIoYSl7dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmhvdmVyZWRNb250aD1hfWNoYW5nZU1vbnRoKGEpe3RoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5jaGFuZ2VNb250aChhKSx0aGlzLl92aWV3TWFuYWdlclNlcnZpY2UuY2hhbmdlVG9EYXlWaWV3KCl9Z2V0VGFiSW5kZXgoYSl7''@;'; put 'put ''cmV0dXJuIGE9PT10aGlzLl9mb2N1c2VkTW9udGhJbmRleD8wOi0xfW5leHRZZWFyKCl7dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLm1vdmVUb05leHRZZWFyKCl9cHJldmlvdXNZZWFyKCl7dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLm1vdmVUb1ByZXZpb3VzWWVhcigpfWN1cnJl''@;'; put 'put ''bnRZZWFyKCl7dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLm1vdmVUb0N1cnJlbnRNb250aCgpfWlzSW5SYW5nZShhKXtyZXR1cm4hIXRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5pc1JhbmdlUGlja2VyJiYodGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5JiZ0''@;'; put 'put ''aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXk/dGhpcy5jYWxlbmRhclllYXI9PT10aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXkueWVhciYmYT50aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXkubW9udGgmJnRoaXMuY2Fs''@;'; put 'put ''ZW5kYXJZZWFyPT09dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5LnllYXImJmE8dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5Lm1vbnRofHx0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXkueWVhciE9PXRoaXMu''@;'; put 'put ''X2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZEVuZERheS55ZWFyJiZ0aGlzLmNhbGVuZGFyWWVhcj09PXRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheS55ZWFyJiZhPnRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheS5tb250aHx8dGhpcy5f''@;'; put 'put ''ZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5LnllYXIhPT10aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXkueWVhciYmdGhpcy5jYWxlbmRhclllYXI9PT10aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXkueWVhciYmYTx0aGlz''@;'; put 'put ''Ll9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXkubW9udGh8fHRoaXMuY2FsZW5kYXJZZWFyPnRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheS55ZWFyJiZ0aGlzLmNhbGVuZGFyWWVhcjx0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRF''@;'; put 'put ''bmREYXkueWVhcjohKCF0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXl8fHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZEVuZERheSkmJih0aGlzLmNhbGVuZGFyWWVhcj09PXRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheS55ZWFy''@;'; put 'put ''JiZhPnRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheS5tb250aCYmYTx0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuaG92ZXJlZE1vbnRofHx0aGlzLmNhbGVuZGFyWWVhcj50aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXkueWVhciYmYTx0aGlz''@;'; put 'put ''Ll9kYXRlTmF2aWdhdGlvblNlcnZpY2UuaG92ZXJlZE1vbnRoKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKFp4KSxHZShNaCksR2UoU20pLEdlKEppKSxHZShHeSksR2UoaXMpKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6''@;'; put 'put ''W1siY2xyLW1vbnRocGlja2VyIl1dLGhvc3RBdHRyczpbInJvbGUiLCJhcHBsaWNhdGlvbiJdLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZhJiZGdCgia2V5ZG93biIsZnVuY3Rpb24oZil7cmV0dXJuIGQub25LZXlEb3duKGYpfSksMiZhJiZUcigibW9udGhwaWNr''@;'; put 'put ''ZXIiLCEwKX0sZGVjbHM6MTMsdmFyczoxMCxjb25zdHM6W1sxLCJjYWxlbmRhci1oZWFkZXIiLCJpbi1tb250aHBpY2tlciJdLFsxLCJ5ZWFyLXZpZXctc3dpdGNoZXIiXSxbInR5cGUiLCJidXR0b24iLDEsImNhbGVuZGFyLWJ0biIsInllYXJwaWNrZXItdHJpZ2dlciIsMywiY2xpY2siXSxb''@;'; put 'put ''MSwiY2FsZW5kYXItc3dpdGNoZXJzIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJjYWxlbmRhci1idG4iLCJzd2l0Y2hlciIsMywiY2xpY2siXSxbInNoYXBlIiwiYW5nbGUiLCJkaXJlY3Rpb24iLCJsZWZ0Il0sWyJzaGFwZSIsImV2ZW50Il0sWyJzaGFwZSIsImFuZ2xlIiwiZGlyZWN0aW9uIiwi''@;'; put 'put ''cmlnaHQiXSxbMSwibW9udGhzIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xhc3MiLCJjYWxlbmRhci1idG4gbW9udGgiLDMsImlzLXNlbGVjdGVkIiwiaXMtc3RhcnQtcmFuZ2UiLCJpcy1lbmQtcmFuZ2UiLCJpbi1yYW5nZSIsImlzLXRvZGF5IiwiY2xpY2siLCJtb3VzZWVudGVyIiw0LCJuZ0Zv''@;'; put 'put ''ciIsIm5nRm9yT2YiXSxbInR5cGUiLCJidXR0b24iLDEsImNhbGVuZGFyLWJ0biIsIm1vbnRoIiwzLCJjbGljayIsIm1vdXNlZW50ZXIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihkZSgwLCJkaXYiLDApKDEsImRpdiIsMSkoMiwiYnV0dG9uIiwyKSxGdCgiY2xpY2siLGZ1bmN0''@;'; put 'put ''aW9uKCl7cmV0dXJuIGQuY2hhbmdlVG9ZZWFyVmlldygpfSksTGUoMyksaGUoKSgpLGRlKDQsImRpdiIsMykoNSwiYnV0dG9uIiw0KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQucHJldmlvdXNZZWFyKCl9KSxHdCg2LCJjZHMtaWNvbiIsNSksaGUoKSxkZSg3LCJidXR0b24iLDQp''@;'; put 'put ''LEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5jdXJyZW50WWVhcigpfSksR3QoOCwiY2RzLWljb24iLDYpLGhlKCksZGUoOSwiYnV0dG9uIiw0KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQubmV4dFllYXIoKX0pLEd0KDEwLCJjZHMtaWNvbiIsNyksaGUoKSgpKCksZGUo''@;'; put 'put ''MTEsImRpdiIsOCksZ3QoMTIsRE5lLDIsMTIsImJ1dHRvbiIsOSksaGUoKSksMiZhJiYoZmUoMiksaHIoImFyaWEtbGFiZWwiLGQueWVhckF0dHJTdHJpbmcpKCJ0aXRsZSIsZC55ZWFyQXR0clN0cmluZyksZmUoKSxJcigiICIsZC5jYWxlbmRhclllYXIsIiAiKSxmZSgyKSxocigiYXJpYS1s''@;'; put 'put ''YWJlbCIsZC5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlclByZXZpb3VzTW9udGgpLGZlKCksaHIoInRpdGxlIixkLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyUHJldmlvdXNNb250aCksZmUoKSxocigiYXJpYS1sYWJlbCIsZC5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tl''@;'; put 'put ''ckN1cnJlbnRNb250aCksZmUoKSxocigidGl0bGUiLGQuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJDdXJyZW50TW9udGgpLGZlKCksaHIoImFyaWEtbGFiZWwiLGQuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJOZXh0TW9udGgpLGZlKCksaHIoInRpdGxlIixkLmNvbW1vblN0''@;'; put 'put ''cmluZ3Mua2V5cy5kYXRlcGlja2VyTmV4dE1vbnRoKSxmZSgyKSxNZSgibmdGb3JPZiIsZC5tb250aE5hbWVzKSl9LGRlcGVuZGVuY2llczpbbnMscnNdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpO2NsYXNzIFd4e2NvbnN0cnVjdG9yKGwpe3RoaXMueWVhcj1sLHRoaXMueWVhclJhbmdlPVtd''@;'; put 'put ''LHRoaXMuZ2VuZXJhdGVZZWFyUmFuZ2UoKX1nZXQgbWlkZGxlWWVhcigpe3JldHVybiB0aGlzLnllYXJSYW5nZVtNYXRoLmZsb29yKHRoaXMueWVhclJhbmdlLmxlbmd0aC8yKV19bmV4dERlY2FkZSgpe3JldHVybiBuZXcgV3godGhpcy55ZWFyKzEwKX1wcmV2aW91c0RlY2FkZSgpe3JldHVy''@;'; put 'put ''biBuZXcgV3godGhpcy55ZWFyLTEwKX1jdXJyZW50RGVjYWRlKCl7cmV0dXJuIG5ldyBXeCgobmV3IERhdGUpLmdldEZ1bGxZZWFyKCkpfWluUmFuZ2UobCl7cmV0dXJuIHRoaXMueWVhclJhbmdlLmluZGV4T2YobCk+LTF9Z2VuZXJhdGVZZWFyUmFuZ2UoKXtjb25zdCBhPXRoaXMueWVhci10''@;'; put 'put ''aGlzLnllYXIlMTA7dGhpcy55ZWFyUmFuZ2U9dGhpcy5nZW5lcmF0ZVJhbmdlKGEsYSsxMCl9Z2VuZXJhdGVSYW5nZShsLGEpe3JldHVybiBBcnJheS5mcm9tKHtsZW5ndGg6YS1sfSwoZCxoKT0+aCtsKX19bGV0IGdkZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdil7dGhp''@;'; put 'put ''cy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlPWEsdGhpcy5fdmlld01hbmFnZXJTZXJ2aWNlPWQsdGhpcy5fZGF0ZXBpY2tlckZvY3VzU2VydmljZT1oLHRoaXMuX2VsUmVmPWYsdGhpcy5jb21tb25TdHJpbmdzPXYsdGhpcy55ZWFyUmFuZ2VNb2RlbD1uZXcgV3godGhpcy5jYWxlbmRhclllYXIp''@;'; put 'put ''LHRoaXMuX2ZvY3VzZWRZZWFyPXRoaXMuY2FsZW5kYXJZZWFyfWdldCBzZWxlY3RlZFN0YXJ0WWVhcigpe3JldHVybiB0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXk/LnllYXJ9Z2V0IHNlbGVjdGVkRW5kWWVhcigpe3JldHVybiB0aGlzLl9kYXRlTmF2aWdhdGlvblNl''@;'; put 'put ''cnZpY2Uuc2VsZWN0ZWRFbmREYXk/LnllYXJ9Z2V0IGNhbGVuZGFyWWVhcigpe3JldHVybiB0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuZGlzcGxheWVkQ2FsZW5kYXIueWVhcn1pc0N1cnJlbnRDYWxlbmRhclllYXIoYSl7cmV0dXJuIGE9PT0obmV3IERhdGUpLmdldEZ1bGxZZWFyKCl9''@;'; put 'put ''Z2V0SXNSYW5nZVN0YXJ0WWVhcihhKXtyZXR1cm4gdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmlzUmFuZ2VQaWNrZXImJmE9PT10aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXk/LnllYXJ9Z2V0SXNSYW5nZUVuZFllYXIoYSl7cmV0dXJuIHRoaXMuX2RhdGVOYXZp''@;'; put 'put ''Z2F0aW9uU2VydmljZS5pc1JhbmdlUGlja2VyJiZhPT09dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5Py55ZWFyfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuX2RhdGVwaWNrZXJGb2N1c1NlcnZpY2UuZm9jdXNDZWxsKHRoaXMuX2VsUmVmKX1vbktleURvd24oYSl7''@;'; put 'put ''aWYoYSl7Y29uc3QgZD1JMihhLmtleSk7ZD09PWdhLkFycm93VXA/KGEucHJldmVudERlZmF1bHQoKSx0aGlzLmluY3JlbWVudEZvY3VzWWVhckJ5KC0yKSk6ZD09PWdhLkFycm93RG93bj8oYS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuaW5jcmVtZW50Rm9jdXNZZWFyQnkoMikpOmQ9PT1nYS5B''@;'; put 'put ''cnJvd1JpZ2h0PyhhLnByZXZlbnREZWZhdWx0KCksdGhpcy5pbmNyZW1lbnRGb2N1c1llYXJCeSgxKSk6ZD09PWdhLkFycm93TGVmdCYmKGEucHJldmVudERlZmF1bHQoKSx0aGlzLmluY3JlbWVudEZvY3VzWWVhckJ5KC0xKSl9fWNoYW5nZVllYXIoYSl7dGhpcy5fZGF0ZU5hdmlnYXRpb25T''@;'; put 'put ''ZXJ2aWNlLmNoYW5nZVllYXIoYSksdGhpcy5fdmlld01hbmFnZXJTZXJ2aWNlLmNoYW5nZVRvRGF5VmlldygpfW9uSG92ZXIoYSl7dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmhvdmVyZWRZZWFyPWF9cHJldmlvdXNEZWNhZGUoKXt0aGlzLnllYXJSYW5nZU1vZGVsPXRoaXMueWVhclJh''@;'; put 'put ''bmdlTW9kZWwucHJldmlvdXNEZWNhZGUoKX1jdXJyZW50RGVjYWRlKCl7dGhpcy55ZWFyUmFuZ2VNb2RlbC5pblJhbmdlKHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS50b2RheS55ZWFyKXx8KHRoaXMueWVhclJhbmdlTW9kZWw9dGhpcy55ZWFyUmFuZ2VNb2RlbC5jdXJyZW50RGVjYWRl''@;'; put 'put ''KCkpLHRoaXMuX2RhdGVwaWNrZXJGb2N1c1NlcnZpY2UuZm9jdXNDZWxsKHRoaXMuX2VsUmVmKX1uZXh0RGVjYWRlKCl7dGhpcy55ZWFyUmFuZ2VNb2RlbD10aGlzLnllYXJSYW5nZU1vZGVsLm5leHREZWNhZGUoKX1nZXRUYWJJbmRleChhKXtyZXR1cm4gdGhpcy55ZWFyUmFuZ2VNb2RlbC5p''@;'; put 'put ''blJhbmdlKHRoaXMuX2ZvY3VzZWRZZWFyKXx8KHRoaXMuX2ZvY3VzZWRZZWFyPXRoaXMueWVhclJhbmdlTW9kZWwuaW5SYW5nZSh0aGlzLmNhbGVuZGFyWWVhcik/dGhpcy5jYWxlbmRhclllYXI6dGhpcy55ZWFyUmFuZ2VNb2RlbC5pblJhbmdlKHRoaXMuc2VsZWN0ZWRFbmRZZWFyKT90aGlz''@;'; put 'put ''LnNlbGVjdGVkRW5kWWVhcjp0aGlzLnllYXJSYW5nZU1vZGVsLm1pZGRsZVllYXIpLHRoaXMuX2ZvY3VzZWRZZWFyPT09YT8wOi0xfWlzSW5SYW5nZShhKXtyZXR1cm4hIXRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5pc1JhbmdlUGlja2VyJiYodGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2''@;'; put 'put ''aWNlLnNlbGVjdGVkRGF5Py55ZWFyJiZ0aGlzLnNlbGVjdGVkRW5kWWVhcj9hPnRoaXMuc2VsZWN0ZWRTdGFydFllYXImJmE8dGhpcy5zZWxlY3RlZEVuZFllYXI6ISghdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5Py55ZWFyfHx0aGlzLnNlbGVjdGVkRW5kWWVhcikm''@;'; put 'put ''JmE+dGhpcy5zZWxlY3RlZFN0YXJ0WWVhciYmYTx0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuaG92ZXJlZFllYXIpfWNoYW5nZVRvRGF5Vmlldygpe3RoaXMuX3ZpZXdNYW5hZ2VyU2VydmljZS5jaGFuZ2VUb0RheVZpZXcoKX1pbmNyZW1lbnRGb2N1c1llYXJCeShhKXt0aGlzLl9mb2N1''@;'; put 'put ''c2VkWWVhcj10aGlzLl9mb2N1c2VkWWVhcithLHRoaXMueWVhclJhbmdlTW9kZWwuaW5SYW5nZSh0aGlzLl9mb2N1c2VkWWVhcil8fCh0aGlzLnllYXJSYW5nZU1vZGVsPWE+MD90aGlzLnllYXJSYW5nZU1vZGVsLm5leHREZWNhZGUoKTp0aGlzLnllYXJSYW5nZU1vZGVsLnByZXZpb3VzRGVj''@;'; put 'put ''YWRlKCkpLHRoaXMuX2RhdGVwaWNrZXJGb2N1c1NlcnZpY2UuZm9jdXNDZWxsKHRoaXMuX2VsUmVmKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoTWgpLEdlKEd5KSxHZShTbSksR2UoSmkpLEdlKGlzKSl9LGMuXHUwMjc1Y21wPVZyKHt0eXBl''@;'; put 'put ''OmMsc2VsZWN0b3JzOltbImNsci15ZWFycGlja2VyIl1dLGhvc3RBdHRyczpbInJvbGUiLCJhcHBsaWNhdGlvbiJdLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZhJiZGdCgia2V5ZG93biIsZnVuY3Rpb24oZil7cmV0dXJuIGQub25LZXlEb3duKGYpfSksMiZhJiZU''@;'; put 'put ''cigieWVhcnBpY2tlciIsITApfSxkZWNsczoxMyx2YXJzOjksY29uc3RzOltbMSwiY2FsZW5kYXItaGVhZGVyIl0sWzEsImNhbGVuZGFyLXBpY2tlcnMiXSxbInR5cGUiLCJidXR0b24iLDEsImNhbGVuZGFyLWJ0biIsInllYXJwaWNrZXItdHJpZ2dlciIsInllYXItcmFuZ2UiLDMsImNsaWNr''@;'; put 'put ''Il0sWzEsInllYXItc3dpdGNoZXJzIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJjYWxlbmRhci1idG4iLCJzd2l0Y2hlciIsMywiY2xpY2siXSxbInNoYXBlIiwiYW5nbGUiLCJkaXJlY3Rpb24iLCJsZWZ0Il0sWyJzaGFwZSIsImV2ZW50Il0sWyJzaGFwZSIsImFuZ2xlIiwiZGlyZWN0aW9uIiwi''@;'; put 'put ''cmlnaHQiXSxbMSwieWVhcnMiXSxbInR5cGUiLCJidXR0b24iLCJjbGFzcyIsImNhbGVuZGFyLWJ0biB5ZWFyIiwzLCJpcy1zZWxlY3RlZCIsImlzLXN0YXJ0LXJhbmdlIiwiaXMtZW5kLXJhbmdlIiwiaW4tcmFuZ2UiLCJpcy10b2RheSIsImNsaWNrIiwibW91c2VlbnRlciIsNCwibmdGb3Ii''@;'; put 'put ''LCJuZ0Zvck9mIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJjYWxlbmRhci1idG4iLCJ5ZWFyIiwzLCJjbGljayIsIm1vdXNlZW50ZXIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihkZSgwLCJkaXYiLDApKDEsImRpdiIsMSkoMiwiYnV0dG9uIiwyKSxGdCgiY2xpY2siLGZ1bmN0aW9u''@;'; put 'put ''KCl7cmV0dXJuIGQuY2hhbmdlVG9EYXlWaWV3KCl9KSxMZSgzKSxoZSgpKCksZGUoNCwiZGl2IiwzKSg1LCJidXR0b24iLDQpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5wcmV2aW91c0RlY2FkZSgpfSksR3QoNiwiY2RzLWljb24iLDUpLGhlKCksZGUoNywiYnV0dG9uIiw0KSxG''@;'; put 'put ''dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQuY3VycmVudERlY2FkZSgpfSksR3QoOCwiY2RzLWljb24iLDYpLGhlKCksZGUoOSwiYnV0dG9uIiw0KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQubmV4dERlY2FkZSgpfSksR3QoMTAsImNkcy1pY29uIiw3KSxoZSgpKCkoKSxk''@;'; put 'put ''ZSgxMSwiZGl2Iiw4KSxndCgxMixJTmUsMiwxMiwiYnV0dG9uIiw5KSxoZSgpKSwyJmEmJihmZSgzKSxVdSgiICIsZC55ZWFyUmFuZ2VNb2RlbC55ZWFyUmFuZ2VbMF0sIiAtICIsZC55ZWFyUmFuZ2VNb2RlbC55ZWFyUmFuZ2VbZC55ZWFyUmFuZ2VNb2RlbC55ZWFyUmFuZ2UubGVuZ3RoLTFd''@;'; put 'put ''LCIgIiksZmUoMiksaHIoImFyaWEtbGFiZWwiLGQuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJQcmV2aW91c0RlY2FkZSksZmUoKSxocigidGl0bGUiLGQuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJQcmV2aW91c0RlY2FkZSksZmUoKSxocigiYXJpYS1sYWJlbCIsZC5jb21t''@;'; put 'put ''b25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlckN1cnJlbnREZWNhZGUpLGZlKCksaHIoInRpdGxlIixkLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyQ3VycmVudERlY2FkZSksZmUoKSxocigiYXJpYS1sYWJlbCIsZC5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlck5leHREZWNhZGUp''@;'; put 'put ''LGZlKCksaHIoInRpdGxlIixkLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyTmV4dERlY2FkZSksZmUoMiksTWUoIm5nRm9yT2YiLGQueWVhclJhbmdlTW9kZWwueWVhclJhbmdlKSl9LGRlcGVuZGVuY2llczpbbnMscnNdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLG1kZT0oKCk9Pntj''@;'; put 'put ''bGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMuX3ZpZXdNYW5hZ2VyU2VydmljZT1hLHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZT1kLHRoaXMuX2xvY2FsZUhlbHBlclNlcnZpY2U9aCx0aGlzLmNvbW1vblN0cmluZ3M9Zn1nZXQgbW9udGhBdHRyU3RyaW5nKCl7cmV0dXJuIHRo''@;'; put 'put ''aXMuY29tbW9uU3RyaW5ncy5wYXJzZSh0aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyU2VsZWN0TW9udGhUZXh0LHtDQUxFTkRBUl9NT05USDp0aGlzLmNhbGVuZGFyTW9udGh9KX1nZXQgeWVhckF0dHJTdHJpbmcoKXtyZXR1cm4gdGhpcy5jb21tb25TdHJpbmdzLnBhcnNlKHRo''@;'; put 'put ''aXMuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJTZWxlY3RZZWFyVGV4dCx7Q0FMRU5EQVJfWUVBUjp0aGlzLmNhbGVuZGFyWWVhci50b1N0cmluZygpfSl9Z2V0IGNhbGVuZGFyTW9udGgoKXtyZXR1cm4gdGhpcy5fbG9jYWxlSGVscGVyU2VydmljZS5sb2NhbGVNb250aHNBYmJyZXZp''@;'; put 'put ''YXRlZFt0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuZGlzcGxheWVkQ2FsZW5kYXIubW9udGhdfWdldCBjYWxlbmRhclllYXIoKXtyZXR1cm4gdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmRpc3BsYXllZENhbGVuZGFyLnllYXJ9Y2hhbmdlVG9Nb250aFZpZXcoKXt0aGlzLl92aWV3''@;'; put 'put ''TWFuYWdlclNlcnZpY2UuY2hhbmdlVG9Nb250aFZpZXcoKX1jaGFuZ2VUb1llYXJWaWV3KCl7dGhpcy5fdmlld01hbmFnZXJTZXJ2aWNlLmNoYW5nZVRvWWVhclZpZXcoKX1uZXh0TW9udGgoKXt0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UubW92ZVRvTmV4dE1vbnRoKCl9cHJldmlvdXNN''@;'; put 'put ''b250aCgpe3RoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5tb3ZlVG9QcmV2aW91c01vbnRoKCl9Y3VycmVudE1vbnRoKCl7dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLm1vdmVUb0N1cnJlbnRNb250aCgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhh''@;'; put 'put ''fHxjKShHZShHeSksR2UoTWgpLEdlKFp4KSxHZShpcykpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGF5cGlja2VyIl1dLGhvc3RBdHRyczpbInJvbGUiLCJhcHBsaWNhdGlvbiJdLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZU''@;'; put 'put ''cigiZGF5cGlja2VyIiwhMCl9LGRlY2xzOjE4LHZhcnM6MTQsY29uc3RzOltbMSwiY2xyLXNyLW9ubHkiXSxbMSwiY2FsZW5kYXItaGVhZGVyIl0sWzEsImNhbGVuZGFyLXBpY2tlcnMiXSxbInR5cGUiLCJidXR0b24iLDEsImNhbGVuZGFyLWJ0biIsIm1vbnRocGlja2VyLXRyaWdnZXIiLDMs''@;'; put 'put ''ImNsaWNrIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJjYWxlbmRhci1idG4iLCJ5ZWFycGlja2VyLXRyaWdnZXIiLDMsImNsaWNrIl0sWzEsImNhbGVuZGFyLXN3aXRjaGVycyJdLFsidHlwZSIsImJ1dHRvbiIsMSwiY2FsZW5kYXItYnRuIiwic3dpdGNoZXIiLDMsImNsaWNrIl0sWyJzaGFwZSIs''@;'; put 'put ''ImFuZ2xlIiwiZGlyZWN0aW9uIiwibGVmdCJdLFsic2hhcGUiLCJldmVudCJdLFsic2hhcGUiLCJhbmdsZSIsImRpcmVjdGlvbiIsInJpZ2h0Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoZGUoMCwiZGl2IiwwKSxMZSgxKSxoZSgpLGRlKDIsImRpdiIsMSkoMywiZGl2IiwyKSg0''@;'; put 'put ''LCJidXR0b24iLDMpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5jaGFuZ2VUb01vbnRoVmlldygpfSksTGUoNSksaGUoKSxkZSg2LCJidXR0b24iLDQpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5jaGFuZ2VUb1llYXJWaWV3KCl9KSxMZSg3KSxoZSgpKCksZGUoOCwi''@;'; put 'put ''ZGl2Iiw1KSg5LCJidXR0b24iLDYpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5wcmV2aW91c01vbnRoKCl9KSxHdCgxMCwiY2RzLWljb24iLDcpLGhlKCksZGUoMTEsImJ1dHRvbiIsNiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLmN1cnJlbnRNb250aCgpfSksR3Qo''@;'; put 'put ''MTIsImNkcy1pY29uIiw4KSxoZSgpLGRlKDEzLCJidXR0b24iLDYpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5uZXh0TW9udGgoKX0pLEd0KDE0LCJjZHMtaWNvbiIsOSksaGUoKSgpKCksR3QoMTUsImNsci1jYWxlbmRhciIpLGRlKDE2LCJkaXYiLDApLExlKDE3KSxoZSgpKSwy''@;'; put 'put ''JmEmJihmZSgpLHdyKGQuY29tbW9uU3RyaW5ncy5rZXlzLm1vZGFsQ29udGVudFN0YXJ0KSxmZSgzKSxocigiYXJpYS1sYWJlbCIsZC5tb250aEF0dHJTdHJpbmcpKCJ0aXRsZSIsZC5tb250aEF0dHJTdHJpbmcpLGZlKCksSXIoIiAiLGQuY2FsZW5kYXJNb250aCwiICIpLGZlKCksaHIoImFy''@;'; put 'put ''aWEtbGFiZWwiLGQueWVhckF0dHJTdHJpbmcpKCJ0aXRsZSIsZC55ZWFyQXR0clN0cmluZyksZmUoKSxJcigiICIsZC5jYWxlbmRhclllYXIsIiAiKSxmZSgyKSxocigiYXJpYS1sYWJlbCIsZC5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlclByZXZpb3VzTW9udGgpLGZlKCksaHIoInRp''@;'; put 'put ''dGxlIixkLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyUHJldmlvdXNNb250aCksZmUoKSxocigiYXJpYS1sYWJlbCIsZC5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlckN1cnJlbnRNb250aCksZmUoKSxocigidGl0bGUiLGQuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJD''@;'; put 'put ''dXJyZW50TW9udGgpLGZlKCksaHIoImFyaWEtbGFiZWwiLGQuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJOZXh0TW9udGgpLGZlKCksaHIoInRpdGxlIixkLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyTmV4dE1vbnRoKSxmZSgzKSx3cihkLmNvbW1vblN0cmluZ3Mua2V5cy5t''@;'; put 'put ''b2RhbENvbnRlbnRFbmQpKX0sZGVwZW5kZW5jaWVzOltycyx1ZGVdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLHZkZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMuY29tbW9uU3RyaW5ncz1hLHRoaXMudG9nZ2xlU2VydmljZT1kLHRoaXMuZGF0ZU5hdmlnYXRpb25T''@;'; put 'put ''ZXJ2aWNlPWgsdGhpcy5kYXRlRm9ybUNvbnRyb2xTZXJ2aWNlPWZ9YXBwbHkoKXt0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5pc1JhbmdlUGlja2VyJiZ0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheSYmdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRF''@;'; put 'put ''bmREYXk/KHRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLm5vdGlmeVNlbGVjdGVkRGF5Q2hhbmdlZCh7c3RhcnREYXRlOnRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5LGVuZERhdGU6dGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXl9KSx0aGlz''@;'; put 'put ''LmRhdGVGb3JtQ29udHJvbFNlcnZpY2UubWFya0FzRGlydHkoKSk6IXRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmlzUmFuZ2VQaWNrZXImJnRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5JiYodGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2Uubm90aWZ5U2VsZWN0ZWRE''@;'; put 'put ''YXlDaGFuZ2VkKHRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5KSx0aGlzLmRhdGVGb3JtQ29udHJvbFNlcnZpY2UubWFya0FzRGlydHkoKSksdGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49ITF9Y2FuY2VsKCl7dGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2UucmVzZXRTZWxl''@;'; put 'put ''Y3RlZERheSgpLHRoaXMudG9nZ2xlU2VydmljZS5vcGVuPSExfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShpcyksR2Uoc2MpLEdlKE1oKSxHZShZeSkpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGF0ZXBpY2tl''@;'; put 'put ''ci1hY3Rpb25zIl1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZUcigiZGF0ZXBpY2tlci1hY3Rpb25zIiwhMCl9LGRlY2xzOjQsdmFyczoyLGNvbnN0czpbWzEsImJ0biIsImJ0bi1vdXRsaW5lIiwzLCJjbGljayJdLFsxLCJidG4iLCJidG4tcHJpbWFyeSIs''@;'; put 'put ''MywiY2xpY2siXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihkZSgwLCJidXR0b24iLDApLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5jYW5jZWwoKX0pLExlKDEpLGhlKCksZGUoMiwiYnV0dG9uIiwxKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQuYXBwbHko''@;'; put 'put ''KX0pLExlKDMpLGhlKCkpLDImYSYmKGZlKCksd3IoZC5jb21tb25TdHJpbmdzLmtleXMuY2FuY2VsKSxmZSgyKSx3cihkLmNvbW1vblN0cmluZ3Mua2V5cy5hcHBseSkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxiZGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlz''@;'; put 'put ''LmNvbW1vblN0cmluZ3M9YSx0aGlzLnZpZXdNYW5hZ2VyU2VydmljZT1kLHRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlPWgsdGhpcy5kYXRlSU9TZXJ2aWNlPWZ9Z2V0IGlzTW9udGhWaWV3KCl7cmV0dXJuIHRoaXMudmlld01hbmFnZXJTZXJ2aWNlLmlzTW9udGhWaWV3fWdldCBpc1llYXJW''@;'; put 'put ''aWV3KCl7cmV0dXJuIHRoaXMudmlld01hbmFnZXJTZXJ2aWNlLmlzWWVhclZpZXd9Z2V0IGlzRGF5Vmlldygpe3JldHVybiB0aGlzLnZpZXdNYW5hZ2VyU2VydmljZS5pc0RheVZpZXd9Z2V0IGhhc1JhbmdlT3B0aW9ucygpe3JldHVybiEhdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2U/Lmlz''@;'; put 'put ''UmFuZ2VQaWNrZXImJiEhdGhpcy5kYXRlUmFuZ2VPcHRpb25zPy5sZW5ndGh9Z2V0IGhhc0FjdGlvbkJ1dHRvbnMoKXtyZXR1cm4gdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2UuaGFzQWN0aW9uQnV0dG9uc31nZXQgZGF0ZVJhbmdlT3B0aW9ucygpe3JldHVybiB0aGlzLmRhdGVJT1NlcnZp''@;'; put 'put ''Y2UuZ2V0UmFuZ2VPcHRpb25zKCl9b25SYW5nZU9wdGlvblNlbGVjdChhKXtjb25zdCBkPXRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmNvbnZlcnREYXRlVG9EYXlNb2RlbChhPy52YWx1ZVswXSksaD10aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5jb252ZXJ0RGF0ZVRvRGF5TW9kZWwo''@;'; put 'put ''YT8udmFsdWVbMV0pO3RoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLm5vdGlmeVNlbGVjdGVkRGF5Q2hhbmdlZCh7c3RhcnREYXRlOmQsZW5kRGF0ZTpofSx7ZW1pdEV2ZW50OiF0aGlzLmhhc0FjdGlvbkJ1dHRvbnN9KSx0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5tb3ZlVG9TcGVjaWZp''@;'; put 'put ''Y01vbnRoKGQpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShpcyksR2UoR3kpLEdlKE1oKSxHZShjZykpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGF0ZXBpY2tlci12aWV3LW1hbmFnZXIiXV0saG9zdEF0dHJz''@;'; put 'put ''Olsicm9sZSIsImRpYWxvZyJdLGhvc3RWYXJzOjgsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiYoaHIoImFyaWEtbW9kYWwiLCEwKSgiYXJpYS1sYWJlbCIsZC5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlckRpYWxvZ0xhYmVsKSxUcigiZGF0ZXBpY2tlciIsITApKCJoYXMt''@;'; put 'put ''cmFuZ2Utb3B0aW9uIixkLmhhc1JhbmdlT3B0aW9ucykoImhhcy1hY3Rpb24tYnV0dG9ucyIsZC5oYXNBY3Rpb25CdXR0b25zKSl9LGZlYXR1cmVzOltkYShbU21dKV0sZGVjbHM6Myx2YXJzOjIsY29uc3RzOltbImNhbGVuZGFyVmlldyIsIiJdLFs0LCJuZ0lmIiwibmdJZkVsc2UiXSxbMSwi''@;'; put 'put ''Y2xyLWRhdGUtcmFuZ2UtcGlja2VyLW5hdiJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiZGF0ZXBpY2tlci12aWV3LW1hbmFnZXIiXSxbNCwibmdUZW1wbGF0ZU91dGxldCJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwiIiwiaHJlZiIsImphdmFzY3JpcHQ6dm9pZCgwKSIsInRhYmluZGV4''@;'; put 'put ''IiwiMCIsMywia2V5dXAuZW50ZXIiLCJjbGljayJdLFs0LCJuZ0lmIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiZndCgwLE9OZSw1LDIsIm5nLWNvbnRhaW5lciIsMSkoMSxWTmUsNCw0LCJuZy10ZW1wbGF0ZSIsbnVsbCwwLEljKSwyJmEpe2NvbnN0IGg9aGEoMik7TWUoIm5n''@;'; put 'put ''SWYiLGQuaGFzUmFuZ2VPcHRpb25zKSgibmdJZkVsc2UiLGgpfX0sZGVwZW5kZW5jaWVzOltucyxiYSxOMSxRWSx0RyxmZGUsZ2RlLG1kZSx2ZGVdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLFl4PSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyB3N3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSxELFos''@;'; put 'put ''cmUsY2UsYmUsRWUsQmUscWUpe2lmKHN1cGVyKHFlLEVlLGJlLEJlKSx0aGlzLnJlbmRlcmVyPWEsdGhpcy5lbGVtPWQsdGhpcy50b2dnbGVTZXJ2aWNlPWgsdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2U9Zix0aGlzLmRhdGVwaWNrZXJFbmFibGVkU2VydmljZT12LHRoaXMuZGF0ZUZvcm1D''@;'; put 'put ''b250cm9sU2VydmljZT1NLHRoaXMuZGF0ZUlPU2VydmljZT1ELHRoaXMuY29tbW9uU3RyaW5ncz1aLHRoaXMudmlld01hbmFnZXJTZXJ2aWNlPWNlLHRoaXMuY29udHJvbENsYXNzU2VydmljZT1iZSx0aGlzLmxheW91dFNlcnZpY2U9RWUsdGhpcy5uZ0NvbnRyb2xTZXJ2aWNlPUJlLHRoaXMu''@;'; put 'put ''aWZDb250cm9sU3RhdGVTZXJ2aWNlPXFlLHRoaXMuZm9jdXM9ITEsdGhpcy5zdWJzY3JpcHRpb25zLnB1c2gocmUuZm9jdXNDaGFuZ2Uuc3Vic2NyaWJlKHJ0PT57dGhpcy5mb2N1cz1ydH0pKSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChoLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKCgpPT57TS5t''@;'; put 'put ''YXJrQXNUb3VjaGVkKCl9KSksZil7Y29uc3QgcnQ9ZC5uYXRpdmVFbGVtZW50LnRhZ05hbWUudG9Mb3dlckNhc2UoKTtmLmhhc0FjdGlvbkJ1dHRvbnM9Zi5pc1JhbmdlUGlja2VyPSJjbHItZGF0ZS1yYW5nZS1jb250YWluZXIiPT09cnR9fXNldCBzaG93QWN0aW9uQnV0dG9ucyhhKXt0aGlz''@;'; put 'put ''LmRhdGVOYXZpZ2F0aW9uU2VydmljZS5pc1JhbmdlUGlja2VyJiYhYT9jb25zb2xlLmVycm9yKCJFcnJvciEgVGhlIGRhdGUgcmFuZ2UgcGlja2VyIHJlcXVpcmVzIGFjdGlvbiBidXR0b25zLCBbc2hvd0FjdGlvbkJ1dHRvbnNdIGNhbm5vdCBiZSB0dXJuZWQgb2ZmLiIpOnRoaXMuZGF0ZU5h''@;'; put 'put ''dmlnYXRpb25TZXJ2aWNlLmhhc0FjdGlvbkJ1dHRvbnM9YX1zZXQgY2xyUG9zaXRpb24oYSl7YSYmVGRbYV0mJih0aGlzLnZpZXdNYW5hZ2VyU2VydmljZS5wb3NpdGlvbj1UZFthXSl9c2V0IHJhbmdlT3B0aW9ucyhhKXt0aGlzLmRhdGVJT1NlcnZpY2Uuc2V0UmFuZ2VPcHRpb25zKGEpfXNl''@;'; put 'put ''dCBtaW4oYSl7dGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2UuaXNSYW5nZVBpY2tlcj8odGhpcy5kYXRlSU9TZXJ2aWNlLnNldE1pbkRhdGUoYSksdGhpcy5jbHJTdGFydERhdGVJbnB1dD8udHJpZ2dlckNvbnRyb2xJbnB1dFZhbGlkYXRpb24oKSx0aGlzLmNsckVuZERhdGVJbnB1dD8udHJp''@;'; put 'put ''Z2dlckNvbnRyb2xJbnB1dFZhbGlkYXRpb24oKSk6Y29uc29sZS5lcnJvcigiRXJyb3IhIFRoZSBkYXRlIGNvbnRhaW5lciBbbWluXSBpbnB1dCBvbmx5IHdvcmtzIGZvciBkYXRlIHJhbmdlIHBpY2tlcnMuIFVzZSB0aGUgbmF0aXZlIGBtaW5gIGF0dHJpYnV0ZS9wcm9wZXJ0eSBmb3Igc2lu''@;'; put 'put ''Z2xlLWRhdGUgaW5wdXRzLiIpfXNldCBtYXgoYSl7dGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2UuaXNSYW5nZVBpY2tlcj8odGhpcy5kYXRlSU9TZXJ2aWNlLnNldE1heERhdGUoYSksdGhpcy5jbHJTdGFydERhdGVJbnB1dD8udHJpZ2dlckNvbnRyb2xJbnB1dFZhbGlkYXRpb24oKSx0aGlz''@;'; put 'put ''LmNsckVuZERhdGVJbnB1dD8udHJpZ2dlckNvbnRyb2xJbnB1dFZhbGlkYXRpb24oKSk6Y29uc29sZS5lcnJvcigiRXJyb3IhIFRoZSBkYXRlIGNvbnRhaW5lciBbbWF4XSBpbnB1dCBvbmx5IHdvcmtzIGZvciBkYXRlIHJhbmdlIHBpY2tlcnMuIFVzZSB0aGUgbmF0aXZlIGBtYXhgIGF0dHJp''@;'; put 'put ''YnV0ZS9wcm9wZXJ0eSBmb3Igc2luZ2xlLWRhdGUgaW5wdXRzLiIpfXNldCBhY3Rpb25CdXR0b24oYSl7dGhpcy50b2dnbGVCdXR0b249YX1nZXQgcG9wb3ZlclBvc2l0aW9uKCl7cmV0dXJuIHRoaXMudmlld01hbmFnZXJTZXJ2aWNlLnBvc2l0aW9ufWdldCBvcGVuKCl7cmV0dXJuIHRoaXMu''@;'; put 'put ''dG9nZ2xlU2VydmljZS5vcGVufWdldCBpc0VuYWJsZWQoKXtyZXR1cm4gdGhpcy5kYXRlcGlja2VyRW5hYmxlZFNlcnZpY2UuaXNFbmFibGVkfWdldCBpc0lucHV0RGF0ZURpc2FibGVkKCl7cmV0dXJuIHRoaXMuY29udHJvbCYmdGhpcy5jb250cm9sLmRpc2FibGVkfHx0aGlzLmRhdGVGb3Jt''@;'; put 'put ''Q29udHJvbFNlcnZpY2UmJnRoaXMuZGF0ZUZvcm1Db250cm9sU2VydmljZS5kaXNhYmxlZH1nZXQgaXNSYW5nZVBpY2tlcigpe3JldHVybiB0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5pc1JhbmdlUGlja2VyfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuZGF0ZVJhbmdlU3RydWN0dXJhbENo''@;'; put 'put ''ZWNrcygpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMudG9nZ2xlU2VydmljZS5vcGVuQ2hhbmdlLnN1YnNjcmliZShhPT57YT90aGlzLmluaXRpYWxpemVDYWxlbmRhcigpOih0aGlzLnRvZ2dsZUJ1dHRvbi5uYXRpdmVFbGVtZW50LmZvY3VzKCksdGhpcy5kYXRlTmF2aWdhdGlvblNl''@;'; put 'put ''cnZpY2UucmVzZXRTZWxlY3RlZERheSgpKX0pKSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLmxpc3RlbkZvckRhdGVDaGFuZ2VzKCkpfWdldFRvZ2dsZUJ1dHRvbkxhYmVsKGEpe2lmKGEpe2NvbnN0IGQ9dGhpcy5kYXRlSU9TZXJ2aWNlLnRvTG9jYWxlRGlzcGxheUZvcm1hdFN0cmlu''@;'; put 'put ''ZyhhLnRvRGF0ZSgpKTtyZXR1cm4gdGhpcy5jb21tb25TdHJpbmdzLnBhcnNlKHRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJUb2dnbGVDaGFuZ2VEYXRlTGFiZWwse1NFTEVDVEVEX0RBVEU6ZH0pfXJldHVybiB0aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyVG9n''@;'; put 'put ''Z2xlQ2hvb3NlRGF0ZUxhYmVsfWxpc3RlbkZvckRhdGVDaGFuZ2VzKCl7cmV0dXJuIHRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5Q2hhbmdlLnBpcGUoeDIodGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXkpKS5zdWJzY3JpYmUoYT0+e2lmKHRoaXMu''@;'; put 'put ''aXNFbmFibGVkKXtjb25zdCBkPXRoaXMuZ2V0VG9nZ2xlQnV0dG9uTGFiZWwoYSksaD10aGlzLnRvZ2dsZUJ1dHRvbi5uYXRpdmVFbGVtZW50O3RoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKGgsImFyaWEtbGFiZWwiLGQpLHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKGgsInRpdGxlIixk''@;'; put 'put ''KX19KX1pbml0aWFsaXplQ2FsZW5kYXIoKXt0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5pbml0aWFsaXplQ2FsZW5kYXIoKX1kYXRlUmFuZ2VTdHJ1Y3R1cmFsQ2hlY2tzKCl7dGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2UuaXNSYW5nZVBpY2tlciYmKHRoaXMuY2xyRGF0ZUlucHV0JiZj''@;'; put 'put ''b25zb2xlLmVycm9yKCJFcnJvciEgY2xyLWRhdGUtcmFuZ2UtY29udGFpbmVyIG11c3QgY29udGFpbiBjbHJTdGFydERhdGUgYW5kIGNsckVuZERhdGUgaW5wdXRzIiksdGhpcy5jbHJTdGFydERhdGVJbnB1dHx8Y29uc29sZS5lcnJvcigiRXJyb3IhIGNsci1kYXRlLXJhbmdlLWNvbnRhaW5l''@;'; put 'put ''ciBtdXN0IGNvbnRhaW4gY2xyU3RhcnREYXRlIGlucHV0IiksdGhpcy5jbHJFbmREYXRlSW5wdXR8fGNvbnNvbGUuZXJyb3IoIkVycm9yISBjbHItZGF0ZS1yYW5nZS1jb250YWluZXIgbXVzdCBjb250YWluIGNsckVuZERhdGUgaW5wdXQiKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlv''@;'; put 'put ''bihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKEVvKSxHZShKaSksR2Uoc2MpLEdlKE1oKSxHZShYTCksR2UoWXkpLEdlKGNnKSxHZShpcyksR2UoVXkpLEdlKEd5KSxHZShEZCksR2UoQ3AsOCksR2UoZjEpLEdlKGtkKSl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1k''@;'; put 'put ''YXRlLWNvbnRhaW5lciJdLFsiY2xyLWRhdGUtcmFuZ2UtY29udGFpbmVyIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJihhbyhoLEpMLDUpLGFvKGgsaGRlLDUpLGFvKGgsZGRlLDUpKSwyJmEpe2xldCBmO0NpKGY9U2koKSkmJihkLmNsckRhdGVJbnB1dD1mLmZp''@;'; put 'put ''cnN0KSxDaShmPVNpKCkpJiYoZC5jbHJTdGFydERhdGVJbnB1dD1mLmZpcnN0KSxDaShmPVNpKCkpJiYoZC5jbHJFbmREYXRlSW5wdXQ9Zi5maXJzdCl9fSx2aWV3UXVlcnk6ZnVuY3Rpb24oYSxkKXtpZigxJmEmJnFhKEJOZSw1KSwyJmEpe2xldCBoO0NpKGg9U2koKSkmJihkLmFjdGlvbkJ1''@;'; put 'put ''dHRvbj1oLmZpcnN0KX19LGhvc3RWYXJzOjgsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZUcigiY2xyLWRhdGUtY29udGFpbmVyIiwhMCkoImNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQiLGQuaXNJbnB1dERhdGVEaXNhYmxlZCkoImNsci1mb3JtLWNvbnRyb2wiLCEwKSgiY2xy''@;'; put 'put ''LXJvdyIsZC5hZGRHcmlkKCkpfSxpbnB1dHM6e3Nob3dBY3Rpb25CdXR0b25zOiJzaG93QWN0aW9uQnV0dG9ucyIsY2xyUG9zaXRpb246ImNsclBvc2l0aW9uIixyYW5nZU9wdGlvbnM6InJhbmdlT3B0aW9ucyIsbWluOiJtaW4iLG1heDoibWF4In0sZmVhdHVyZXM6W2RhKFtDaCxaeCxEZCxV''@;'; put 'put ''eSxmMSxjZyxNaCxYTCxZeSxHeSxrZF0pLHZkKFtvZ10pLHdhXSxuZ0NvbnRlbnRTZWxlY3RvcnM6ek5lLGRlY2xzOjE0LHZhcnM6MTUsY29uc3RzOltbImFjdGlvbkJ1dHRvbiIsIiJdLFs0LCJuZ0lmIl0sWzEsImNsci1jb250cm9sLWNvbnRhaW5lciIsMywibmdDbGFzcyJdLFsiY2xyUG9w''@;'; put 'put ''b3ZlckFuY2hvciIsIiIsMSwiY2xyLWlucHV0LXdyYXBwZXIiXSxbMSwiY2xyLWlucHV0LWdyb3VwIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xyUG9wb3Zlck9wZW5DbG9zZUJ1dHRvbiIsIiIsImNsYXNzIiwiY2xyLWlucHV0LWdyb3VwLWljb24tYWN0aW9uIiwzLCJkaXNhYmxlZCIsNCwibmdJ''@;'; put 'put ''ZiJdLFsiY2RrVHJhcEZvY3VzIiwiIiw0LCJjbHJQb3BvdmVyQ29udGVudCIsImNsclBvcG92ZXJDb250ZW50QXQiLCJjbHJQb3BvdmVyQ29udGVudE91dHNpZGVDbGlja1RvQ2xvc2UiLCJjbHJQb3BvdmVyQ29udGVudFNjcm9sbFRvQ2xvc2UiXSxbImNsYXNzIiwiY2xyLXZhbGlkYXRlLWlj''@;'; put 'put ''b24iLCJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIsInN0YXR1cyIsImRhbmdlciIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItdmFsaWRhdGUtaWNvbiIsInNoYXBlIiwiY2hlY2stY2lyY2xlIiwic3RhdHVzIiwic3VjY2VzcyIsImFyaWEtaGlkZGVu''@;'; put 'put ''IiwidHJ1ZSIsNCwibmdJZiJdLFsxLCJkYXRlLXJhbmdlLXNlcGFyYXRvciJdLFsidHlwZSIsImJ1dHRvbiIsImNsclBvcG92ZXJPcGVuQ2xvc2VCdXR0b24iLCIiLDEsImNsci1pbnB1dC1ncm91cC1pY29uLWFjdGlvbiIsMywiZGlzYWJsZWQiXSxbInN0YXR1cyIsImluZm8iLCJzaGFwZSIs''@;'; put 'put ''ImNhbGVuZGFyIl0sWyJjZGtUcmFwRm9jdXMiLCIiXSxbInNoYXBlIiwiZXhjbGFtYXRpb24tY2lyY2xlIiwic3RhdHVzIiwiZGFuZ2VyIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJjbHItdmFsaWRhdGUtaWNvbiJdLFsic2hhcGUiLCJjaGVjay1jaXJjbGUiLCJzdGF0dXMiLCJzdWNjZXNz''@;'; put 'put ''IiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJjbHItdmFsaWRhdGUtaWNvbiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKGpOZSksWXIoMCksZ3QoMSxVTmUsMSwwLCJsYWJlbCIsMSksZGUoMiwiZGl2IiwyKSgzLCJkaXYiLDMpKDQsImRpdiIsNCksZ3QoNSxaTmUsNSwwLCJu''@;'; put 'put ''Zy1jb250YWluZXIiLDEpLFlyKDYsMSksZ3QoNyxXTmUsMywxLCJidXR0b24iLDUpKDgsWU5lLDEsMCwiY2xyLWRhdGVwaWNrZXItdmlldy1tYW5hZ2VyIiw2KSxoZSgpLGd0KDksR05lLDEsMCwiY2RzLWljb24iLDcpKDEwLCROZSwxLDAsImNkcy1pY29uIiw4KSxoZSgpLGd0KDExLEtOZSwx''@;'; put 'put ''LDAsIm5nLWNvbnRlbnQiLDEpKDEyLHFOZSwxLDAsIm5nLWNvbnRlbnQiLDEpKDEzLFhOZSwxLDAsIm5nLWNvbnRlbnQiLDEpLGhlKCkpLDImYSYmKGZlKCksTWUoIm5nSWYiLCFkLmxhYmVsJiZkLmFkZEdyaWQoKSksZmUoKSxNZSgibmdDbGFzcyIsZC5jb250cm9sQ2xhc3MoKSksZmUoMiks''@;'; put 'put ''VHIoImNsci1mb2N1cyIsZC5mb2N1cyksZmUoKSxNZSgibmdJZiIsZC5pc1JhbmdlUGlja2VyKSxmZSgyKSxNZSgibmdJZiIsZC5pc0VuYWJsZWQpLGZlKCksTWUoImNsclBvcG92ZXJDb250ZW50IixkLm9wZW4pKCJjbHJQb3BvdmVyQ29udGVudEF0IixkLnBvcG92ZXJQb3NpdGlvbikoImNs''@;'; put 'put ''clBvcG92ZXJDb250ZW50T3V0c2lkZUNsaWNrVG9DbG9zZSIsITApKCJjbHJQb3BvdmVyQ29udGVudFNjcm9sbFRvQ2xvc2UiLCEwKSxmZSgpLE1lKCJuZ0lmIixkLnNob3dJbnZhbGlkKSxmZSgpLE1lKCJuZ0lmIixkLnNob3dWYWxpZCksZmUoKSxNZSgibmdJZiIsZC5zaG93SGVscGVyKSxm''@;'; put 'put ''ZSgpLE1lKCJuZ0lmIixkLnNob3dJbnZhbGlkKSxmZSgpLE1lKCJuZ0lmIixkLnNob3dWYWxpZCkpfSxkZXBlbmRlbmNpZXM6W3d1LGJhLFp5LFB4LE54LEh4LHJzLGRzLGJkZV0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksc0c9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmRh''@;'; put 'put ''dGVJT1NlcnZpY2U9YX12YWxpZGF0ZShhKXtpZih0aGlzLmRhdGVJT1NlcnZpY2Upe2NvbnN0IGQ9dGhpcy5kYXRlSU9TZXJ2aWNlLmdldERhdGVWYWx1ZUZyb21EYXRlU3RyaW5nKGEudmFsdWUpLGg9dGhpcy5kYXRlSU9TZXJ2aWNlLmRpc2FibGVkRGF0ZXMubWluRGF0ZS50b0RhdGUoKSxm''@;'; put 'put ''PXRoaXMuZGF0ZUlPU2VydmljZS5kaXNhYmxlZERhdGVzLm1heERhdGUudG9EYXRlKCk7aWYoZCYmZDxoKXJldHVybnttaW46e21pbjpoLnRvTG9jYWxlRGF0ZVN0cmluZygpLGFjdHVhbDpkLnRvTG9jYWxlRGF0ZVN0cmluZygpfX07aWYoZCYmZD5mKXJldHVybnttYXg6e21heDpmLnRvTG9j''@;'; put 'put ''YWxlRGF0ZVN0cmluZygpLGFjdHVhbDpkLnRvTG9jYWxlRGF0ZVN0cmluZygpfX19cmV0dXJuIG51bGx9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKGNnLDgpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyRGF0''@;'; put 'put ''ZSIsIiJdLFsiIiwiY2xyU3RhcnREYXRlIiwiIl0sWyIiLCJjbHJFbmREYXRlIiwiIl1dLGZlYXR1cmVzOltkYShbe3Byb3ZpZGU6aDAsdXNlRXhpc3Rpbmc6YyxtdWx0aTohMH1dKV19KSxjfSkoKSx5WmU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe1RzLmFkZEljb25zKHZoLGJoLEV5''@;'; put 'put ''LExPZSxPT2UpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltSYSxLTCxCeCxPMixWeCxBcyxhdSxvZGVdfSksY30pKCk7bmV3IFN0KCJDbHJGaWxlTWVzc2Fn''@;'; put 'put ''ZXNUZW1wbGF0ZUNvbnRleHQiKTtsZXQgd1plPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtUcy5hZGRJY29ucyhQT2UpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtp''@;'; put 'put ''bXBvcnRzOltSYSxBcyxhdSxhdV19KSxjfSkoKSx5ZGU9KCgpPT57Y2xhc3MgYyBleHRlbmRzIHc3e2NvbnN0cnVjdG9yKGEsZCxoLGYsdil7c3VwZXIodixkLGEsaCksdGhpcy5pZkNvbnRyb2xTdGF0ZVNlcnZpY2U9dix0aGlzLmZvY3VzPSExLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGYu''@;'; put 'put ''Zm9jdXNDaGFuZ2Uuc3Vic2NyaWJlKE09PnRoaXMuZm9jdXM9TSkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShEZCksR2UoQ3AsOCksR2UoZjEpLEdlKFV5KSxHZShrZCkpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJj''@;'; put 'put ''bHItbnVtYmVyLWlucHV0LWNvbnRhaW5lciJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZhbyhoLF9kZSw1KSwyJmEpe2xldCBmO0NpKGY9U2koKSkmJihkLmlucHV0PWYuZmlyc3QpfX0saG9zdFZhcnM6OCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEm''@;'; put 'put ''JlRyKCJjbHItZm9ybS1jb250cm9sIiwhMCkoImNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQiLG51bGw9PWQuY29udHJvbD9udWxsOmQuY29udHJvbC5kaXNhYmxlZCkoImNsci1mb3JtLWNvbnRyb2wtcmVhZG9ubHkiLGQuaW5wdXQucmVhZG9ubHkpKCJjbHItcm93IixkLmFkZEdyaWQoKSl9''@;'; put 'put ''LGZlYXR1cmVzOltkYShbVXksa2QsZjEsQ2gsRGRdKSx3YV0sbmdDb250ZW50U2VsZWN0b3JzOm5WZSxkZWNsczoxNyx2YXJzOjExLGNvbnN0czpbWzQsIm5nSWYiXSxbMSwiY2xyLWNvbnRyb2wtY29udGFpbmVyIiwzLCJuZ0NsYXNzIl0sWzEsImNsci1udW1iZXItaW5wdXQtd3JhcHBlciJd''@;'; put 'put ''LFsxLCJjbHItaW5wdXQtZ3JvdXAiXSxbMSwiY2xyLWlucHV0LWdyb3VwLWFjdGlvbnMiXSxbInR5cGUiLCJidXR0b24iLDEsImNsci1pbnB1dC1ncm91cC1pY29uLWFjdGlvbiIsMywiY2xpY2siLCJkaXNhYmxlZCJdLFsic2hhcGUiLCJtaW51cyIsInNpemUiLCJzbSJdLFsxLCJjbHItbnVt''@;'; put 'put ''YmVyLWlucHV0LXNlcGFyYXRvciJdLFsic2hhcGUiLCJwbHVzIiwic2l6ZSIsInNtIl0sWyJjbGFzcyIsImNsci12YWxpZGF0ZS1pY29uIiwic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLCJzdGF0dXMiLCJkYW5nZXIiLCJhcmlhLWhpZGRlbiIsInRydWUiLDQsIm5nSWYiXSxbImNsYXNz''@;'; put 'put ''IiwiY2xyLXZhbGlkYXRlLWljb24iLCJzaGFwZSIsImNoZWNrLWNpcmNsZSIsInN0YXR1cyIsInN1Y2Nlc3MiLCJhcmlhLWhpZGRlbiIsInRydWUiLDQsIm5nSWYiXSxbInNoYXBlIiwiZXhjbGFtYXRpb24tY2lyY2xlIiwic3RhdHVzIiwiZGFuZ2VyIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwx''@;'; put 'put ''LCJjbHItdmFsaWRhdGUtaWNvbiJdLFsic2hhcGUiLCJjaGVjay1jaXJjbGUiLCJzdGF0dXMiLCJzdWNjZXNzIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJjbHItdmFsaWRhdGUtaWNvbiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKHRWZSksWXIoMCksZ3QoMSxyVmUsMSww''@;'; put 'put ''LCJsYWJlbCIsMCksZGUoMiwiZGl2IiwxKSgzLCJkaXYiLDIpKDQsImRpdiIsMyksWXIoNSwxKSxkZSg2LCJkaXYiLDQpKDcsImJ1dHRvbiIsNSksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLmlucHV0LnN0ZXBEb3duKCl9KSxHdCg4LCJjZHMtaWNvbiIsNiksaGUoKSxHdCg5LCJk''@;'; put 'put ''aXYiLDcpLGRlKDEwLCJidXR0b24iLDUpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5pbnB1dC5zdGVwVXAoKX0pLEd0KDExLCJjZHMtaWNvbiIsOCksaGUoKSgpKCksZ3QoMTIsaVZlLDEsMCwiY2RzLWljb24iLDkpKDEzLGFWZSwxLDAsImNkcy1pY29uIiwxMCksaGUoKSxndCgx''@;'; put 'put ''NCxvVmUsMSwwLCJuZy1jb250ZW50IiwwKSgxNSxzVmUsMSwwLCJuZy1jb250ZW50IiwwKSgxNixsVmUsMSwwLCJuZy1jb250ZW50IiwwKSxoZSgpKSwyJmEmJihmZSgpLE1lKCJuZ0lmIiwhZC5sYWJlbCYmZC5hZGRHcmlkKCkpLGZlKCksTWUoIm5nQ2xhc3MiLGQuY29udHJvbENsYXNzKCkp''@;'; put 'put ''LGZlKDIpLFRyKCJjbHItZm9jdXMiLGQuZm9jdXMpLGZlKDMpLE1lKCJkaXNhYmxlZCIsbnVsbD09ZC5jb250cm9sP251bGw6ZC5jb250cm9sLmRpc2FibGVkKSxmZSgzKSxNZSgiZGlzYWJsZWQiLG51bGw9PWQuY29udHJvbD9udWxsOmQuY29udHJvbC5kaXNhYmxlZCksZmUoMiksTWUoIm5n''@;'; put 'put ''SWYiLGQuc2hvd0ludmFsaWQpLGZlKCksTWUoIm5nSWYiLGQuc2hvd1ZhbGlkKSxmZSgpLE1lKCJuZ0lmIixkLnNob3dIZWxwZXIpLGZlKCksTWUoIm5nSWYiLGQuc2hvd0ludmFsaWQpLGZlKCksTWUoIm5nSWYiLGQuc2hvd1ZhbGlkKSl9LGRlcGVuZGVuY2llczpbd3UsYmEscnMsZHNdLGVu''@;'; put 'put ''Y2Fwc3VsYXRpb246Mn0pLGN9KSgpLF9kZT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgQzd7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0pe2lmKHN1cGVyKGQseWRlLGgsZix2LE0pLHRoaXMuZm9jdXNTZXJ2aWNlPWEsdGhpcy5jb250cm9sPWYsdGhpcy5lbD1NLHRoaXMuaW5kZXg9MSwhYSl0aHJv''@;'; put 'put ''dyBuZXcgRXJyb3IoImNsck51bWJlcklucHV0IHJlcXVpcmVzIGJlaW5nIHdyYXBwZWQgaW4gPGNsci1udW1iZXItaW5wdXQtY29udGFpbmVyPiIpfWdldCByZWFkb25seSgpe3JldHVybiBudWxsIT09dGhpcy5lbC5uYXRpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgicmVhZG9ubHkiKX10cmln''@;'; put 'put ''Z2VyRm9jdXMoKXshdGhpcy5yZWFkb25seSYmdGhpcy5mb2N1c1NlcnZpY2UmJih0aGlzLmZvY3VzU2VydmljZS5mb2N1c2VkPSEwKX10cmlnZ2VyVmFsaWRhdGlvbigpe3RoaXMucmVhZG9ubHl8fChzdXBlci50cmlnZ2VyVmFsaWRhdGlvbigpLHRoaXMuZm9jdXNTZXJ2aWNlJiYodGhpcy5m''@;'; put 'put ''b2N1c1NlcnZpY2UuZm9jdXNlZD0hMSkpfXN0ZXBVcCgpe3RoaXMuZWwubmF0aXZlRWxlbWVudC5zdGVwVXAoKSx0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoImlucHV0Iix7YnViYmxlczohMCxjYW5jZWxhYmxlOiEwfSkpLHRoaXMuY29udHJvbC5jb250''@;'; put 'put ''cm9sLm1hcmtBbGxBc1RvdWNoZWQoKX1zdGVwRG93bigpe3RoaXMuZWwubmF0aXZlRWxlbWVudC5zdGVwRG93bigpLHRoaXMuZWwubmF0aXZlRWxlbWVudC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgiaW5wdXQiLHtidWJibGVzOiEwLGNhbmNlbGFibGU6ITB9KSksdGhpcy5jb250cm9sLmNv''@;'; put 'put ''bnRyb2wubWFya0FsbEFzVG91Y2hlZCgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShVeSw4KSxHZShEbyksR2UoRHMpLEdlKGQxLDEwKSxHZShFbyksR2UoSmkpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siaW5wdXQi''@;'; put 'put ''LCJ0eXBlIiwibnVtYmVyIiwiY2xyTnVtYmVySW5wdXQiLCIiXV0saG9zdFZhcnM6NCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJkZ0KCJmb2N1cyIsZnVuY3Rpb24oKXtyZXR1cm4gZC50cmlnZ2VyRm9jdXMoKX0pKCJibHVyIixmdW5jdGlvbigpe3JldHVybiBkLnRyaWdnZXJW''@;'; put 'put ''YWxpZGF0aW9uKCl9KSwyJmEmJlRyKCJjbHItaW5wdXQiLCEwKSgiY2xyLW51bWJlci1pbnB1dCIsITApfSxmZWF0dXJlczpbd2FdfSksY30pKCksQ1plPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtUcy5hZGRJY29ucyh2aCxiaCxGT2UsSE9lKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1''@;'; put 'put ''bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbUmEsUmMsQXMsYXUsYXVdfSksY30pKCk7bmV3IFN0KHZvaWQgMCk7bGV0IHhaZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7VHMuYWRkSWNvbnMo''@;'; put 'put ''Tk9lLFZPZSx2aCxiaCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1JhLFJjLEFzLGF1LGF1XX0pLGN9KSgpLGxHPSgoKT0+e2NsYXNzIGN7bmdPbkluaXQo''@;'; put 'put ''KXt0aGlzLmxhYmVsJiZ0aGlzLmxhYmVsLmRpc2FibGVHcmlkKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItcmFkaW8td3JhcHBlciJdXSxjb250ZW50UXVlcmllczpmdW5j''@;'; put 'put ''dGlvbihhLGQsaCl7aWYoMSZhJiZhbyhoLGRzLDcpLDImYSl7bGV0IGY7Q2koZj1TaSgpKSYmKGQubGFiZWw9Zi5maXJzdCl9fSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmVHIoImNsci1yYWRpby13cmFwcGVyIiwhMCl9LGZlYXR1cmVzOltkYShbQ2hdKV0s''@;'; put 'put ''bmdDb250ZW50U2VsZWN0b3JzOnVWZSxkZWNsczozLHZhcnM6MSxjb25zdHM6W1s0LCJuZ0lmIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoY1ZlKSxZcigwKSxZcigxLDEpLGd0KDIsZFZlLDEsMCwibGFiZWwiLDApKSwyJmEmJihmZSgyKSxNZSgibmdJZiIsIWQubGFiZWwp''@;'; put 'put ''KX0sZGVwZW5kZW5jaWVzOltiYSxkc10sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksY0c9KCgpPT57Y2xhc3MgYyBleHRlbmRzIEM3e2NvbnN0cnVjdG9yKGEsZCxoLGYsdil7c3VwZXIoYSxsRyxkLGgsZix2KX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8''@;'; put 'put ''YykoR2UoRG8pLEdlKERzKSxHZShkMSwxMCksR2UoRW8pLEdlKEppKSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsclJhZGlvIiwiIl1dLGZlYXR1cmVzOlt3YV19KSxjfSkoKSxFWmU9KCgpPT57Y2xhc3MgYyBleHRlbmRzIHc3e2NvbnN0cnVjdG9yKGEsZCxo''@;'; put 'put ''LGYpe3N1cGVyKGYsYSxkLGgpLHRoaXMubGF5b3V0U2VydmljZT1hLHRoaXMuY29udHJvbENsYXNzU2VydmljZT1kLHRoaXMubmdDb250cm9sU2VydmljZT1oLHRoaXMuaWZDb250cm9sU3RhdGVTZXJ2aWNlPWYsdGhpcy5pbmxpbmU9ITEsdGhpcy5fZ2VuZXJhdGVkSWQ9TXUoKX1nZXQgY2xy''@;'; put 'put ''SW5saW5lKCl7cmV0dXJuIHRoaXMuaW5saW5lfXNldCBjbHJJbmxpbmUoYSl7dGhpcy5pbmxpbmU9InN0cmluZyI9PXR5cGVvZiBhPyJmYWxzZSIhPT1hOiEhYX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLnNldEFyaWFSb2xlcygpLHRoaXMuc2V0QXJpYUxhYmVsbGVkQnkoKX1zZXRBcmlh''@;'; put 'put ''Um9sZXMoKXt0aGlzLnJvbGU9dGhpcy5yYWRpb3MubGVuZ3RoPyJyYWRpb2dyb3VwIjpudWxsfXNldEFyaWFMYWJlbGxlZEJ5KCl7Y29uc3QgYT10aGlzLmdyb3VwTGFiZWw/Lm5hdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJpZCIpO2E/dGhpcy5hcmlhTGFiZWxsZWRCeT10aGlzLnJhZGlv''@;'; put 'put ''cy5sZW5ndGg/YTpudWxsOih0aGlzLmdyb3VwTGFiZWw/Lm5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJpZCIsdGhpcy5fZ2VuZXJhdGVkSWQpLHRoaXMuYXJpYUxhYmVsbGVkQnk9dGhpcy5yYWRpb3MubGVuZ3RoP3RoaXMuX2dlbmVyYXRlZElkOm51bGwpfX1yZXR1cm4gYy5cdTAyNzVm''@;'; put 'put ''YWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShDcCw4KSxHZShEZCksR2UoZjEpLEdlKGtkKSl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1yYWRpby1jb250YWluZXIiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmKGFv''@;'; put 'put ''KGgsZHMsNyxKaSksYW8oaCxjRyw1KSksMiZhKXtsZXQgZjtDaShmPVNpKCkpJiYoZC5ncm91cExhYmVsPWYuZmlyc3QpLENpKGY9U2koKSkmJihkLnJhZGlvcz1mKX19LGhvc3RWYXJzOjgsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiYoaHIoInJvbGUiLGQucm9sZSkoImFyaWEt''@;'; put 'put ''bGFiZWxsZWRieSIsZC5hcmlhTGFiZWxsZWRCeSksVHIoImNsci1mb3JtLWNvbnRyb2wiLCEwKSgiY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCIsbnVsbD09ZC5jb250cm9sP251bGw6ZC5jb250cm9sLmRpc2FibGVkKSgiY2xyLXJvdyIsZC5hZGRHcmlkKCkpKX0saW5wdXRzOntjbHJJbmxp''@;'; put 'put ''bmU6ImNscklubGluZSJ9LGZlYXR1cmVzOltkYShbZjEsa2QsRGQscDddKSx3YV0sbmdDb250ZW50U2VsZWN0b3JzOmZWZSxkZWNsczo2LHZhcnM6Nixjb25zdHM6W1s0LCJuZ0lmIl0sWzEsImNsci1jb250cm9sLWNvbnRhaW5lciIsMywibmdDbGFzcyJdLFsiY2xhc3MiLCJjbHItc3VidGV4''@;'; put 'put ''dC13cmFwcGVyIiw0LCJuZ0lmIl0sWzEsImNsci1zdWJ0ZXh0LXdyYXBwZXIiXSxbImNsYXNzIiwiY2xyLXZhbGlkYXRlLWljb24iLCJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIsInN0YXR1cyIsImRhbmdlciIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsNCwibmdJZiJdLFsiY2xhc3MiLCJj''@;'; put 'put ''bHItdmFsaWRhdGUtaWNvbiIsInNoYXBlIiwiY2hlY2stY2lyY2xlIiwic3RhdHVzIiwic3VjY2VzcyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsNCwibmdJZiJdLFsic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLCJzdGF0dXMiLCJkYW5nZXIiLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsImNs''@;'; put 'put ''ci12YWxpZGF0ZS1pY29uIl0sWyJzaGFwZSIsImNoZWNrLWNpcmNsZSIsInN0YXR1cyIsInN1Y2Nlc3MiLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsImNsci12YWxpZGF0ZS1pY29uIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoaFZlKSxZcigwKSxndCgxLHBWZSwxLDAsImxh''@;'; put 'put ''YmVsIiwwKSxkZSgyLCJkaXYiLDEpLFlyKDMsMSksZ3QoNCxnVmUsMiwwLCJkaXYiLDIpKDUsX1ZlLDUsNCwiZGl2IiwyKSxoZSgpKSwyJmEmJihmZSgpLE1lKCJuZ0lmIiwhZC5sYWJlbCYmZC5hZGRHcmlkKCkpLGZlKCksVHIoImNsci1jb250cm9sLWlubGluZSIsZC5jbHJJbmxpbmUpLE1l''@;'; put 'put ''KCJuZ0NsYXNzIixkLmNvbnRyb2xDbGFzcygpKSxmZSgyKSxNZSgibmdJZiIsZC5zaG93SGVscGVyKSxmZSgpLE1lKCJuZ0lmIixkLnNob3dWYWxpZHx8ZC5zaG93SW52YWxpZCkpfSxkZXBlbmRlbmNpZXM6W3d1LGJhLGRzLHJzXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxUWmU9KCgpPT57''@;'; put 'put ''Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe1RzLmFkZEljb25zKHZoLGJoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbUmEsYXUsQngsQXMsYXVdfSksY30pKCks''@;'; put 'put ''QVplPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtUcy5hZGRJY29ucyh2aCxiaCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1JhLGF1LEJ4LEFzLGF1''@;'; put 'put ''XX0pLGN9KSgpLCR5PSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyB3N3tjb25zdHJ1Y3RvcihhLGQsaCxmKXtzdXBlcihmLGEsZCxoKSx0aGlzLmxheW91dFNlcnZpY2U9YSx0aGlzLmNvbnRyb2xDbGFzc1NlcnZpY2U9ZCx0aGlzLm5nQ29udHJvbFNlcnZpY2U9aCx0aGlzLmlmQ29udHJvbFN0YXRl''@;'; put 'put ''U2VydmljZT1mLHRoaXMubXVsdGk9ITF9bmdPbkluaXQoKXt0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLm5nQ29udHJvbFNlcnZpY2UuY29udHJvbENoYW5nZXMuc3Vic2NyaWJlKGE9PnthJiYodGhpcy5tdWx0aT1hLnZhbHVlQWNjZXNzb3IgaW5zdGFuY2VvZiBteCx0aGlzLmNvbnRy''@;'; put 'put ''b2w9YSl9KSl9d3JhcHBlckNsYXNzKCl7cmV0dXJuIHRoaXMubXVsdGk/ImNsci1tdWx0aXNlbGVjdC13cmFwcGVyIjoiY2xyLXNlbGVjdC13cmFwcGVyIn19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoQ3AsOCksR2UoRGQpLEdlKGYxKSxHZShr''@;'; put 'put ''ZCkpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItc2VsZWN0LWNvbnRhaW5lciJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZhbyhoLG14LDUpLDImYSl7bGV0IGY7Q2koZj1TaSgpKSYmKGQubXVsdGlwbGU9Zi5maXJzdCl9fSxob3N0''@;'; put 'put ''VmFyczo2LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmVHIoImNsci1mb3JtLWNvbnRyb2wiLCEwKSgiY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCIsbnVsbD09ZC5jb250cm9sP251bGw6ZC5jb250cm9sLmRpc2FibGVkKSgiY2xyLXJvdyIsZC5hZGRHcmlkKCkpfSxmZWF0dXJl''@;'; put 'put ''czpbZGEoW2tkLGYxLENoLERkXSksd2FdLG5nQ29udGVudFNlbGVjdG9yczpDVmUsZGVjbHM6MTAsdmFyczo4LGNvbnN0czpbWzQsIm5nSWYiXSxbMSwiY2xyLWNvbnRyb2wtY29udGFpbmVyIiwzLCJuZ0NsYXNzIl0sWzMsIm5nQ2xhc3MiXSxbImNsYXNzIiwiY2xyLXZhbGlkYXRlLWljb24i''@;'; put 'put ''LCJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIsInN0YXR1cyIsImRhbmdlciIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItdmFsaWRhdGUtaWNvbiIsInNoYXBlIiwiY2hlY2stY2lyY2xlIiwic3RhdHVzIiwic3VjY2VzcyIsImFyaWEtaGlkZGVuIiwi''@;'; put 'put ''dHJ1ZSIsNCwibmdJZiJdLFsic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLCJzdGF0dXMiLCJkYW5nZXIiLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsImNsci12YWxpZGF0ZS1pY29uIl0sWyJzaGFwZSIsImNoZWNrLWNpcmNsZSIsInN0YXR1cyIsInN1Y2Nlc3MiLCJhcmlhLWhpZGRlbiIs''@;'; put 'put ''InRydWUiLDEsImNsci12YWxpZGF0ZS1pY29uIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2Eod1ZlKSxZcigwKSxndCgxLFNWZSwxLDAsImxhYmVsIiwwKSxkZSgyLCJkaXYiLDEpKDMsImRpdiIsMiksWXIoNCwxKSxndCg1LE1WZSwxLDAsImNkcy1pY29uIiwzKSg2LHhWZSwx''@;'; put 'put ''LDAsImNkcy1pY29uIiw0KSxoZSgpLGd0KDcsRVZlLDEsMCwibmctY29udGVudCIsMCkoOCxUVmUsMSwwLCJuZy1jb250ZW50IiwwKSg5LEFWZSwxLDAsIm5nLWNvbnRlbnQiLDApLGhlKCkpLDImYSYmKGZlKCksTWUoIm5nSWYiLCFkLmxhYmVsJiZkLmFkZEdyaWQoKSksZmUoKSxNZSgibmdD''@;'; put 'put ''bGFzcyIsZC5jb250cm9sQ2xhc3MoKSksZmUoKSxNZSgibmdDbGFzcyIsZC53cmFwcGVyQ2xhc3MoKSksZmUoMiksTWUoIm5nSWYiLGQuc2hvd0ludmFsaWQpLGZlKCksTWUoIm5nSWYiLGQuc2hvd1ZhbGlkKSxmZSgpLE1lKCJuZ0lmIixkLnNob3dIZWxwZXIpLGZlKCksTWUoIm5nSWYiLGQu''@;'; put 'put ''c2hvd0ludmFsaWQpLGZlKCksTWUoIm5nSWYiLGQuc2hvd1ZhbGlkKSl9LGRlcGVuZGVuY2llczpbd3UsYmEscnMsZHNdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLEU3PSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBDN3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYpe3N1cGVyKGEsJHksZCxoLGYsdiks''@;'; put 'put ''dGhpcy5pbmRleD0xfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShEbyksR2UoRHMpLEdlKGQxLDEwKSxHZShFbyksR2UoSmkpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyU2VsZWN0IiwiIl1dLGhvc3RWYXJz''@;'; put 'put ''OjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZUcigiY2xyLXNlbGVjdCIsITApfSxmZWF0dXJlczpbd2FdfSksY30pKCksa1plPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtUcy5hZGRJY29ucyh2aCxiaCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1''@;'; put 'put ''cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1JhLFJjLEFzLGF1LGF1XX0pLGN9KSgpLHdkZT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgdzd7fXJldHVybiBjLlx1MDI3NWZhYz0oKCk9PntsZXQgbDtyZXR1cm4gZnVuY3Rpb24o''@;'; put 'put ''ZCl7cmV0dXJuKGx8fChsPVdzKGMpKSkoZHx8Yyl9fSkoKSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItdGV4dGFyZWEtY29udGFpbmVyIl1dLGhvc3RWYXJzOjYsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZUcigiY2xyLWZvcm0tY29udHJvbCIsITAp''@;'; put 'put ''KCJjbHItZm9ybS1jb250cm9sLWRpc2FibGVkIixudWxsPT1kLmNvbnRyb2w/bnVsbDpkLmNvbnRyb2wuZGlzYWJsZWQpKCJjbHItcm93IixkLmFkZEdyaWQoKSl9LGZlYXR1cmVzOltkYShba2QsZjEsQ2gsRGRdKSx3YV0sbmdDb250ZW50U2VsZWN0b3JzOkRWZSxkZWNsczoxMCx2YXJzOjcs''@;'; put 'put ''Y29uc3RzOltbNCwibmdJZiJdLFsxLCJjbHItY29udHJvbC1jb250YWluZXIiLDMsIm5nQ2xhc3MiXSxbMSwiY2xyLXRleHRhcmVhLXdyYXBwZXIiXSxbImNsYXNzIiwiY2xyLXZhbGlkYXRlLWljb24iLCJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIsInN0YXR1cyIsImRhbmdlciIsImFy''@;'; put 'put ''aWEtaGlkZGVuIiwidHJ1ZSIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItdmFsaWRhdGUtaWNvbiIsInNoYXBlIiwiY2hlY2stY2lyY2xlIiwic3RhdHVzIiwic3VjY2VzcyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsNCwibmdJZiJdLFsic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLCJzdGF0''@;'; put 'put ''dXMiLCJkYW5nZXIiLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsImNsci12YWxpZGF0ZS1pY29uIl0sWyJzaGFwZSIsImNoZWNrLWNpcmNsZSIsInN0YXR1cyIsInN1Y2Nlc3MiLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsImNsci12YWxpZGF0ZS1pY29uIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEs''@;'; put 'put ''ZCl7MSZhJiYoc2Eoa1ZlKSxZcigwKSxndCgxLElWZSwxLDAsImxhYmVsIiwwKSxkZSgyLCJkaXYiLDEpKDMsImRpdiIsMiksWXIoNCwxKSxndCg1LFJWZSwxLDAsImNkcy1pY29uIiwzKSg2LExWZSwxLDAsImNkcy1pY29uIiw0KSxoZSgpLGd0KDcsT1ZlLDEsMCwibmctY29udGVudCIsMCko''@;'; put 'put ''OCxQVmUsMSwwLCJuZy1jb250ZW50IiwwKSg5LEZWZSwxLDAsIm5nLWNvbnRlbnQiLDApLGhlKCkpLDImYSYmKGZlKCksTWUoIm5nSWYiLCFkLmxhYmVsJiZkLmFkZEdyaWQoKSksZmUoKSxNZSgibmdDbGFzcyIsZC5jb250cm9sQ2xhc3MoKSksZmUoMyksTWUoIm5nSWYiLGQuc2hvd0ludmFs''@;'; put 'put ''aWQpLGZlKCksTWUoIm5nSWYiLGQuc2hvd1ZhbGlkKSxmZSgpLE1lKCJuZ0lmIixkLnNob3dIZWxwZXIpLGZlKCksTWUoIm5nSWYiLGQuc2hvd0ludmFsaWQpLGZlKCksTWUoIm5nSWYiLGQuc2hvd1ZhbGlkKSl9LGRlcGVuZGVuY2llczpbd3UsYmEscnMsZHNdLGVuY2Fwc3VsYXRpb246Mn0p''@;'; put 'put ''LGN9KSgpLFFMPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBDN3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYpe3N1cGVyKGEsd2RlLGQsaCxmLHYpLHRoaXMuaW5kZXg9MX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoRG8pLEdlKERzKSxHZShkMSwxMCks''@;'; put 'put ''R2UoRW8pLEdlKEppKSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsclRleHRhcmVhIiwiIl1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZUcigiY2xyLXRleHRhcmVhIiwhMCl9LGZlYXR1cmVzOlt3YV19KSxjfSkoKSxEWmU9''@;'; put 'put ''KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe1RzLmFkZEljb25zKHZoLGJoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbUmEsUmMsQXMsYXUsYXVdfSks''@;'; put 'put ''Y30pKCksQ2RlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1JhLGF1LExVZSxOVWUseVplLHdaZSx0ZGUseFplLFRaZSxrWmUsRFpl''@;'; put 'put ''LEFaZSxWVWUsQ1plXX0pLGN9KSgpLFNkZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltSYV19KSxjfSkoKSxJWmU9KCgpPT57Y2xh''@;'; put 'put ''c3MgYyBleHRlbmRzIFRZe2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNLEQsWixyZSl7c3VwZXIoYSxkLGgsZix2LE0sRCxaLHJlKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoSmkpLEdlKEVZLDgpLEdlKHZzLDgpLEdlKFdhKSxHZShEbyksR2Uo''@;'; put 'put ''eFksOCksR2UocG0pLEdlKFBMKSxHZShFcykpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjZGtEcmFnIiwiIl1dLGZlYXR1cmVzOlt3YV19KSxjfSkoKSxSWmU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXco''@;'; put 'put ''YXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7fSksY30pKCksTFplPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIo''@;'; put 'put ''e2ltcG9ydHM6W1JhXX0pLGN9KSgpO2NsYXNzIGVPe31sZXQgR3g9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMubmJDaGFuZ2VzPTAsdGhpcy5fY2hhbmdlPW5ldyBXbn1nZXQgY2hhbmdlKCl7cmV0dXJuIHRoaXMuX2NoYW5nZS5hc09ic2VydmFibGUoKX1jaGFuZ2VTdGFydCgp''@;'; put 'put ''e3RoaXMubmJDaGFuZ2VzKyt9Y2hhbmdlRG9uZSgpezA9PS0tdGhpcy5uYkNoYW5nZXMmJnRoaXMuX2NoYW5nZS5uZXh0KCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZh''@;'; put 'put ''Y30pLGN9KSgpLE1tPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5zdGF0ZURlYm91bmNlcj1hLHRoaXMuYWN0aXZhdGVkPSExLHRoaXMuX3NpemU9MCx0aGlzLl9jdXJyZW50PTEsdGhpcy5fY2hhbmdlPW5ldyBXbix0aGlzLnByZXZlbnRFbWl0PSExLHRoaXMuX3NpemVDaGFu''@;'; put 'put ''Z2U9bmV3IFdufWdldCBzaXplKCl7cmV0dXJuIHRoaXMuX3NpemV9c2V0IHNpemUoYSl7Y29uc3QgZD10aGlzLl9zaXplO2EhPT1kJiYodGhpcy5wcmV2ZW50RW1pdHx8dGhpcy5zdGF0ZURlYm91bmNlci5jaGFuZ2VTdGFydCgpLHRoaXMuX3NpemU9YSx0aGlzLl9jdXJyZW50PTA9PT1hPzE6''@;'; put 'put ''TWF0aC5mbG9vcihkL2EqKHRoaXMuX2N1cnJlbnQtMSkpKzEsdGhpcy5wcmV2ZW50RW1pdHx8KHRoaXMuX2NoYW5nZS5uZXh0KHRoaXMuX2N1cnJlbnQpLHRoaXMuX3NpemVDaGFuZ2UubmV4dCh0aGlzLl9zaXplKSx0aGlzLnN0YXRlRGVib3VuY2VyLmNoYW5nZURvbmUoKSkpLHRoaXMucHJl''@;'; put 'put ''dmVudEVtaXQ9ITF9Z2V0IHRvdGFsSXRlbXMoKXtyZXR1cm4gdGhpcy5fdG90YWxJdGVtc3x8MH1zZXQgdG90YWxJdGVtcyhhKXt0aGlzLl90b3RhbEl0ZW1zPWEsdGhpcy5jdXJyZW50PnRoaXMubGFzdCYmKHRoaXMuY3VycmVudD10aGlzLmxhc3QpfWdldCBsYXN0KCl7cmV0dXJuIHRoaXMu''@;'; put 'put ''X2xhc3Q/dGhpcy5fbGFzdDp0aGlzLnNpemU+MCYmdGhpcy50b3RhbEl0ZW1zP01hdGguY2VpbCh0aGlzLnRvdGFsSXRlbXMvdGhpcy5zaXplKToxfXNldCBsYXN0KGEpe3RoaXMuX2xhc3Q9YX1nZXQgY2hhbmdlKCl7cmV0dXJuIHRoaXMuX2NoYW5nZS5hc09ic2VydmFibGUoKX1nZXQgc2l6''@;'; put 'put ''ZUNoYW5nZSgpe3JldHVybiB0aGlzLl9zaXplQ2hhbmdlLmFzT2JzZXJ2YWJsZSgpfWdldCBjdXJyZW50KCl7cmV0dXJuIHRoaXMuX2N1cnJlbnR9c2V0IGN1cnJlbnQoYSl7YSE9PXRoaXMuX2N1cnJlbnQmJih0aGlzLnN0YXRlRGVib3VuY2VyLmNoYW5nZVN0YXJ0KCksdGhpcy5fY3VycmVu''@;'; put 'put ''dD1hLHRoaXMuX2NoYW5nZS5uZXh0KGEpLHRoaXMuc3RhdGVEZWJvdW5jZXIuY2hhbmdlRG9uZSgpKX1nZXQgZmlyc3RJdGVtKCl7cmV0dXJuIDA9PT10aGlzLl90b3RhbEl0ZW1zPy0xOjA9PT10aGlzLnNpemU/MDoodGhpcy5jdXJyZW50LTEpKnRoaXMuc2l6ZX1nZXQgbGFzdEl0ZW0oKXtp''@;'; put 'put ''ZigwPT09dGhpcy5fdG90YWxJdGVtcylyZXR1cm4tMTtpZigwPT09dGhpcy5zaXplKXJldHVybiB0aGlzLnRvdGFsSXRlbXMtMTtsZXQgYT10aGlzLmN1cnJlbnQqdGhpcy5zaXplLTE7cmV0dXJuIHRoaXMudG90YWxJdGVtcyYmKGE9TWF0aC5taW4oYSx0aGlzLnRvdGFsSXRlbXMtMSkpLGF9''@;'; put 'put ''cHJldmlvdXMoKXt0aGlzLmN1cnJlbnQ+MSYmdGhpcy5jdXJyZW50LS19bmV4dCgpe3RoaXMuY3VycmVudDx0aGlzLmxhc3QmJnRoaXMuY3VycmVudCsrfXJlc2V0UGFnZVNpemUoYT0hMSl7dGhpcy5wcmV2ZW50RW1pdD1hLHRoaXMuc2l6ZT0wfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rp''@;'; put 'put ''b24oYSl7cmV0dXJuIG5ldyhhfHxjKSh4cihHeCkpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLHVnPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLl9wYWdlPWEsdGhpcy5zdGF0ZURlYm91bmNlcj1kLHRoaXMuX2NoYW5n''@;'; put 'put ''ZT1uZXcgV24sdGhpcy5fYWxsPVtdfWdldCBjaGFuZ2UoKXtyZXR1cm4gdGhpcy5fY2hhbmdlLmFzT2JzZXJ2YWJsZSgpfWhhc0FjdGl2ZUZpbHRlcnMoKXtmb3IoY29uc3R7ZmlsdGVyOmF9b2YgdGhpcy5fYWxsKWlmKGEmJmEuaXNBY3RpdmUoKSlyZXR1cm4hMDtyZXR1cm4hMX1nZXRBY3Rp''@;'; put 'put ''dmVGaWx0ZXJzKCl7Y29uc3QgYT1bXTtmb3IoY29uc3R7ZmlsdGVyOmR9b2YgdGhpcy5fYWxsKWQmJmQuaXNBY3RpdmUoKSYmYS5wdXNoKGQpO3JldHVybiBhfWFkZChhKXtjb25zdCBkPWEuY2hhbmdlcy5zdWJzY3JpYmUoKCk9PnRoaXMucmVzZXRQYWdlQW5kRW1pdEZpbHRlckNoYW5nZShb''@;'; put 'put ''YV0pKTtsZXQgaD0hMTtjb25zdCBmPW5ldyB0TyhhLCgpPT57aWYoaClyZXR1cm47ZC51bnN1YnNjcmliZSgpO2NvbnN0IHY9dGhpcy5fYWxsLmZpbmRJbmRleChNPT5NLmZpbHRlcj09PWEpO3Y+PTAmJnRoaXMuX2FsbC5zcGxpY2UodiwxKSxhLmlzQWN0aXZlKCkmJnRoaXMucmVzZXRQYWdl''@;'; put 'put ''QW5kRW1pdEZpbHRlckNoYW5nZShbXSksaD0hMH0pO3JldHVybiB0aGlzLl9hbGwucHVzaChmKSxhLmlzQWN0aXZlKCkmJnRoaXMucmVzZXRQYWdlQW5kRW1pdEZpbHRlckNoYW5nZShbYV0pLGZ9YWNjZXB0cyhhKXtmb3IoY29uc3R7ZmlsdGVyOmR9b2YgdGhpcy5fYWxsKWlmKGQmJmQuaXNB''@;'; put 'put ''Y3RpdmUoKSYmIWQuYWNjZXB0cyhhKSlyZXR1cm4hMTtyZXR1cm4hMH1yZXNldFBhZ2VBbmRFbWl0RmlsdGVyQ2hhbmdlKGEpe3RoaXMuc3RhdGVEZWJvdW5jZXIuY2hhbmdlU3RhcnQoKSx0aGlzLl9wYWdlLmN1cnJlbnQ9MSx0aGlzLl9jaGFuZ2UubmV4dChhKSx0aGlzLnN0YXRlRGVib3Vu''@;'; put 'put ''Y2VyLmNoYW5nZURvbmUoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoeHIoTW0pLHhyKEd4KSl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7Y2xhc3MgdE97Y29uc3RydWN0b3IobCxhKXt0aGlz''@;'; put 'put ''LmZpbHRlcj1sLHRoaXMudW5yZWdpc3Rlcj1hfX1sZXQgbk89KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmZpbHRlcnM9YX1nZXQgZmlsdGVyKCl7cmV0dXJuIHRoaXMucmVnaXN0ZXJlZCYmdGhpcy5yZWdpc3RlcmVkLmZpbHRlcn1uZ09uRGVzdHJveSgpe3RoaXMuZGVsZXRl''@;'; put 'put ''RmlsdGVyKCl9c2V0RmlsdGVyKGEpe3RoaXMuZGVsZXRlRmlsdGVyKCksYSBpbnN0YW5jZW9mIHRPP3RoaXMucmVnaXN0ZXJlZD1hOmEmJih0aGlzLnJlZ2lzdGVyZWQ9dGhpcy5maWx0ZXJzLmFkZChhKSl9ZGVsZXRlRmlsdGVyKCl7dGhpcy5yZWdpc3RlcmVkJiYodGhpcy5yZWdpc3RlcmVk''@;'; put 'put ''LnVucmVnaXN0ZXIoKSxkZWxldGUgdGhpcy5yZWdpc3RlcmVkKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UodWcpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6Y30pLGN9KSgpO2NsYXNzIE1kZXtjb25zdHJ1Y3RvcihsKXt0aGlzLnV0aWxzPWx9''@;'; put 'put ''a2V5VXAobCl7Y29uc3QgYT10aGlzLnV0aWxzLmNyZWF0ZU5leHRDZWxsQ29vcmRzKGwpO2lmKDA9PT1sLnkpcmV0dXJuIGE7YS55PWwueS0xO2NvbnN0IGQ9dGhpcy51dGlscy5pc0FjdGlvbkNlbGwobCk7cmV0dXJuIHRoaXMudXRpbHMuaXNTaW5nbGVDZWxsRXhwYW5kZWRSb3coYS55KSYm''@;'; put 'put ''IWQmJnRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGEueSk/YS54PTA6dGhpcy51dGlscy5pc0RldGFpbHNSb3coYS55KSYmKGQ/YS55PWEueS0xOmEueD1hLngtdGhpcy51dGlscy5hY3Rpb25DZWxsQ291bnQobC55KSksYX1rZXlEb3duKGwpe2NvbnN0IGE9dGhpcy51dGlscy5jcmVhdGVOZXh0''@;'; put 'put ''Q2VsbENvb3JkcyhsKTtpZihsLnk+PSh0aGlzLnV0aWxzLnJvd3M/dGhpcy51dGlscy5yb3dzLmxlbmd0aC0xOjApKXJldHVybiBhO2NvbnN0IGg9dGhpcy51dGlscy5pc0FjdGlvbkNlbGwobCk7cmV0dXJuIGEueT1sLnkrMSwhaCYmdGhpcy51dGlscy5pc1Jvd1JlcGxhY2VkKGEueSkmJihh''@;'; put 'put ''Lnk9YS55KzEsYS54PXRoaXMudXRpbHMuaXNTaW5nbGVDZWxsRXhwYW5kZWRSb3coYS55KT8wOmEueC10aGlzLnV0aWxzLmFjdGlvbkNlbGxDb3VudChsLnkpKSxhfWtleUxlZnQobCl7Y29uc3QgYT10aGlzLnV0aWxzLmNyZWF0ZU5leHRDZWxsQ29vcmRzKGwpO3JldHVybiAwPT09bC54fHwo''@;'; put 'put ''YS54PWwueC0xKSxhfWtleVJpZ2h0KGwpe2NvbnN0IGE9dGhpcy51dGlscy5jcmVhdGVOZXh0Q2VsbENvb3JkcyhsKSxkPXRoaXMudXRpbHMucm93cz8ubGVuZ3RoLTE/dGhpcy51dGlscy5nZXRDZWxsc0ZvclJvdygwKS5sZW5ndGgtMTowO3JldHVybiBhLng9bC54PGQ/YS54KzE6YS54LGF9''@;'; put 'put ''a2V5RW5kKGwsYSl7Y29uc3QgZD10aGlzLnV0aWxzLmNyZWF0ZU5leHRDZWxsQ29vcmRzKGwpLGg9dGhpcy51dGlscy5yb3dzP3RoaXMudXRpbHMucm93cy5sZW5ndGgtMTowO3JldHVybiBkLng9aD90aGlzLnV0aWxzLmdldENlbGxzRm9yUm93KDApLmxlbmd0aC0xOjAsYSYmKGQueT1oLHRo''@;'; put 'put ''aXMudXRpbHMuaXNEZXRhaWxzUm93KGQueSkmJihkLng9dGhpcy51dGlscy5nZXRDZWxsc0ZvclJvdyhkLnkpLmxlbmd0aC0xKSksZH1rZXlIb21lKGwsYSl7Y29uc3QgZD10aGlzLnV0aWxzLmNyZWF0ZU5leHRDZWxsQ29vcmRzKGwpO3JldHVybiBkLng9MCxhJiYoZC55PTApLGR9a2V5UGFn''@;'; put 'put ''ZVVwKGwpe2NvbnN0IGE9dGhpcy51dGlscy5jcmVhdGVOZXh0Q2VsbENvb3JkcyhsKSxkPXRoaXMudXRpbHMuaXRlbXNQZXJQYWdlO3JldHVybiBhLnk9bC55LWQ+MD9sLnktZCsxOjEsdGhpcy51dGlscy5pc0FjdGlvbkNlbGwobCk/dGhpcy51dGlscy5pc0RldGFpbHNSb3coYS55KSYmKGEu''@;'; put 'put ''eT1hLnktMSk6dGhpcy51dGlscy5pc0RldGFpbHNSb3coYS55KT9hLng9dGhpcy51dGlscy5pc1NpbmdsZUNlbGxFeHBhbmRlZFJvdyhhLnkpPzA6YS54LXRoaXMudXRpbHMuYWN0aW9uQ2VsbENvdW50KGwueSk6dGhpcy51dGlscy5pc1Jvd1JlcGxhY2VkKGEueSkmJihhLnk9YS55KzEsYS54''@;'; put 'put ''PXRoaXMudXRpbHMuaXNTaW5nbGVDZWxsRXhwYW5kZWRSb3coYS55KT8wOmEueC10aGlzLnV0aWxzLmFjdGlvbkNlbGxDb3VudChsLnkpKSxhfWtleVBhZ2VEb3duKGwpe2NvbnN0IGE9dGhpcy51dGlscy5jcmVhdGVOZXh0Q2VsbENvb3JkcyhsKSxkPXRoaXMudXRpbHMucm93cz90aGlzLnV0''@;'; put 'put ''aWxzLnJvd3MubGVuZ3RoLTE6MCxoPXRoaXMudXRpbHMuaXRlbXNQZXJQYWdlO3JldHVybiBhLnk9bC55K2g+PWQ/ZDpsLnkraCx0aGlzLnV0aWxzLmlzQWN0aW9uQ2VsbChsKSYmdGhpcy51dGlscy5pc0RldGFpbHNSb3coYS55KT9hLnk9YS55LTE6dGhpcy51dGlscy5pc0RldGFpbHNSb3co''@;'; put 'put ''YS55KSYmdGhpcy51dGlscy5pc1NpbmdsZUNlbGxFeHBhbmRlZFJvdyhhLnkpP2EueD0wOnRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGEueSk/YS54PWEueC10aGlzLnV0aWxzLmFjdGlvbkNlbGxDb3VudChsLnkpOnRoaXMudXRpbHMuaXNSb3dSZXBsYWNlZChhLnkpJiYoYS55PWEueSsxLGEu''@;'; put 'put ''eD10aGlzLnV0aWxzLmlzU2luZ2xlQ2VsbEV4cGFuZGVkUm93KGEueSk/MDphLngtdGhpcy51dGlscy5hY3Rpb25DZWxsQ291bnQobC55KSksYX19Y2xhc3MgeGRlIGV4dGVuZHMgTWRle2NvbnN0cnVjdG9yKGwpe3N1cGVyKGwpfWtleVVwKGwpe2NvbnN0IGE9dGhpcy51dGlscy5jcmVhdGVO''@;'; put 'put ''ZXh0Q2VsbENvb3JkcyhsKTtpZigwPT09bC55KXJldHVybiBhO2lmKGEueT1sLnktMSx0aGlzLnV0aWxzLmlzQWN0aW9uQ2VsbChsKSl0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhhLnkpJiZhLnk+MCYmKGEueT1hLnktMSk7ZWxzZSBzd2l0Y2godGhpcy51dGlscy5pc1Jvd1JlcGxhY2VkKGwu''@;'; put 'put ''eSkmJihhLnk9YS55LTEpLCEwKXtjYXNlIHRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGEueSk6YS54PTA7YnJlYWs7Y2FzZSExPT09dGhpcy51dGlscy5pc0RldGFpbHNSb3cobC55KTphLng9bC54O2JyZWFrO2RlZmF1bHQ6YS54PXRoaXMudXRpbHMuYWN0aW9uQ2VsbENvdW50KGEueSl9cmV0''@;'; put 'put ''dXJuIGF9a2V5RG93bihsKXtjb25zdCBhPXRoaXMudXRpbHMuY3JlYXRlTmV4dENlbGxDb29yZHMobCksZD10aGlzLnV0aWxzLnJvd3M/dGhpcy51dGlscy5yb3dzLmxlbmd0aC0xOjA7cmV0dXJuIGwueT49ZHx8KGEueT1sLnkrMSx0aGlzLnV0aWxzLmlzQWN0aW9uQ2VsbChsKT9hLnk9YS55''@;'; put 'put ''PGQ/YS55KzE6YS55Oih0aGlzLnV0aWxzLmlzUm93UmVwbGFjZWQoYS55KSYmKGEueT1hLnkrMSksYS54PXRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGEueSk/MDp0aGlzLnV0aWxzLmFjdGlvbkNlbGxDb3VudChhLnkpKSksYX1rZXlMZWZ0KGwpe2NvbnN0IGE9dGhpcy51dGlscy5jcmVhdGVO''@;'; put 'put ''ZXh0Q2VsbENvb3JkcyhsKTtyZXR1cm4gdGhpcy51dGlscy5pc0RldGFpbHNSb3cobC55KXx8dGhpcy51dGlscy5pc1Jvd1JlcGxhY2VkKGwueSk/KDAhPT1sLng/YS54PWwueC0xOnRoaXMudXRpbHMuaXNBY3Rpb25DZWxsKGwpfHwoYS55PWwueS0xLGEueD10aGlzLnV0aWxzLmFjdGlvbkNl''@;'; put 'put ''bGxDb3VudChhLnkpLTEpLGEpOnN1cGVyLmtleUxlZnQobCl9a2V5UmlnaHQobCl7Y29uc3QgYT10aGlzLnV0aWxzLmNyZWF0ZU5leHRDZWxsQ29vcmRzKGwpO2lmKCF0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhsLnkpJiYhdGhpcy51dGlscy5pc1Jvd1JlcGxhY2VkKGwueSkpcmV0dXJuIHN1''@;'; put 'put ''cGVyLmtleVJpZ2h0KGwpO2NvbnN0IGQ9dGhpcy51dGlscy5yb3dzPy5sZW5ndGgtMT90aGlzLnV0aWxzLmdldENlbGxzRm9yUm93KDApLmxlbmd0aC0xOjA7cmV0dXJuIGwueD49ZHx8KHRoaXMudXRpbHMuaXNBY3Rpb25DZWxsKGwpJiZsLng9PT10aGlzLnV0aWxzLmFjdGlvbkNlbGxDb3Vu''@;'; put 'put ''dChsLngpLTEmJnRoaXMudXRpbHMuaXNSb3dSZXBsYWNlZChsLnkpJiYhdGhpcy51dGlscy5pc0RldGFpbHNSb3cobC55KT8oYS55PWwueSsxLGEueD0wKTphLng9bC54KzEpLGF9a2V5RW5kKGwsYSl7Y29uc3QgZD10aGlzLnV0aWxzLmNyZWF0ZU5leHRDZWxsQ29vcmRzKGwpO3JldHVybiF0''@;'; put 'put ''aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhsLnkpJiYhdGhpcy51dGlscy5pc1Jvd1JlcGxhY2VkKGwueSl8fGE/c3VwZXIua2V5RW5kKGwsYSk6KGQueD10aGlzLnV0aWxzLmdldENlbGxzRm9yUm93KGwueSkubGVuZ3RoLTEsZCl9a2V5SG9tZShsLGEpe2NvbnN0IGQ9dGhpcy51dGlscy5jcmVh''@;'; put 'put ''dGVOZXh0Q2VsbENvb3JkcyhsKTtyZXR1cm4gdGhpcy51dGlscy5pc0RldGFpbHNSb3cobC55KXx8dGhpcy51dGlscy5pc1Jvd1JlcGxhY2VkKGwueSk/KGQueD0wLGQueT1sLnktMSxhJiYoZC55PTApLGQpOnN1cGVyLmtleUhvbWUobCxhKX1rZXlQYWdlVXAobCl7Y29uc3QgYT10aGlzLnV0''@;'; put 'put ''aWxzLmNyZWF0ZU5leHRDZWxsQ29vcmRzKGwpLGQ9dGhpcy51dGlscy5pdGVtc1BlclBhZ2U7cmV0dXJuIGEueT1sLnktZD4wP2wueS1kKzE6MSx0aGlzLnV0aWxzLmlzQWN0aW9uQ2VsbChsKT90aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhhLnkpJiYoYS55PWEueS0xKTp0aGlzLnV0aWxzLmlz''@;'; put 'put ''Um93UmVwbGFjZWQoYS55KT90aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhhLnkpfHwoYS55PWEueSsxLGEueD0wKTp0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhsLnkpP3RoaXMudXRpbHMuaXNEZXRhaWxzUm93KGwueSkmJih0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhhLnkpfHwoYS54PXRoaXMu''@;'; put 'put ''dXRpbHMuYWN0aW9uQ2VsbENvdW50KGEueSkpKTp0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhhLnkpJiYoYS54PTApLGF9a2V5UGFnZURvd24obCl7Y29uc3QgYT10aGlzLnV0aWxzLmNyZWF0ZU5leHRDZWxsQ29vcmRzKGwpLGQ9dGhpcy51dGlscy5yb3dzP3RoaXMudXRpbHMucm93cy5sZW5n''@;'; put 'put ''dGgtMTowLGg9dGhpcy51dGlscy5pdGVtc1BlclBhZ2U7cmV0dXJuIGEueT1sLnkraD49ZD9kOmwueStoLHRoaXMudXRpbHMuaXNBY3Rpb25DZWxsKGwpP3RoaXMudXRpbHMuaXNEZXRhaWxzUm93KGEueSkmJihhLnk9YS55LTEpOnRoaXMudXRpbHMuaXNSb3dSZXBsYWNlZChhLnkpP2EueTxk''@;'; put 'put ''JiYhdGhpcy51dGlscy5pc0RldGFpbHNSb3coYS55KSYmKGEueT1hLnkrMSk6dGhpcy51dGlscy5pc0RldGFpbHNSb3cobC55KSYmIXRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGEueSk/YS54PWwueCt0aGlzLnV0aWxzLmFjdGlvbkNlbGxDb3VudChhLnkpOnRoaXMudXRpbHMuaXNEZXRhaWxz''@;'; put 'put ''Um93KGEueSkmJihhLng9MCksYX19Y2xhc3MgT1plIGV4dGVuZHMgeGRle2NvbnN0cnVjdG9yKGwpe3N1cGVyKGwpfWtleVVwKGwpe2NvbnN0IGE9dGhpcy51dGlscy5jcmVhdGVOZXh0Q2VsbENvb3JkcyhsKTtpZigwPT09bC55KXJldHVybiBhO2lmKGEueT1sLnktMSx0aGlzLnV0aWxzLmlz''@;'; put 'put ''U2luZ2xlQ2VsbEV4cGFuZGVkUm93KGEueSkpcmV0dXJuIHN1cGVyLmtleVVwKGwpO2NvbnN0IGQ9dGhpcy51dGlscy5pc0FjdGlvbkNlbGwobCk7cmV0dXJuIGQmJnRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGEueSk/YS55PWEueS0xOnRoaXMudXRpbHMuaXNSb3dSZXBsYWNlZChhLnkpPyhh''@;'; put 'put ''Lnk9YS55LTEsdGhpcy51dGlscy5pc0RldGFpbHNSb3coYS55KXx8KGEueD1sLngrdGhpcy51dGlscy5hY3Rpb25DZWxsQ291bnQoYS55KSkpOnRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGwueSkmJiF0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhhLnkpP2EueD1sLngrdGhpcy51dGlscy5hY3Rp''@;'; put 'put ''b25DZWxsQ291bnQoYS55KTohZCYmdGhpcy51dGlscy5pc0RldGFpbHNSb3coYS55KSYmKGEueD1sLngtdGhpcy51dGlscy5hY3Rpb25DZWxsQ291bnQobC55KSksYX1rZXlEb3duKGwpe2NvbnN0IGE9dGhpcy51dGlscy5jcmVhdGVOZXh0Q2VsbENvb3JkcyhsKSxkPXRoaXMudXRpbHMucm93''@;'; put 'put ''cz90aGlzLnV0aWxzLnJvd3MubGVuZ3RoLTE6MCxoPWQ/dGhpcy51dGlscy5nZXRDZWxsc0ZvclJvdygwKS5sZW5ndGgtMTowO3JldHVybiBsLnk+PWQ/YTooYS55PWwueSsxLHRoaXMudXRpbHMuaXNTaW5nbGVDZWxsRXhwYW5kZWRSb3coYS55KT9zdXBlci5rZXlEb3duKGwpOih0aGlzLnV0''@;'; put 'put ''aWxzLmlzQWN0aW9uQ2VsbChsKXx8dGhpcy51dGlscy5pc1Jvd1JlcGxhY2VkKGEueSk/YS55PWEueTxkP2EueSsxOmEueS0xOmEueD10aGlzLnV0aWxzLmdldENlbGxzRm9yUm93KGwueSkubGVuZ3RoPmg/bC54LXRoaXMudXRpbHMuYWN0aW9uQ2VsbENvdW50KGwueSk6bC54K3RoaXMudXRp''@;'; put 'put ''bHMuYWN0aW9uQ2VsbENvdW50KGEueSksYSkpfWtleUxlZnQobCl7cmV0dXJuIHN1cGVyLmtleUxlZnQobCl9a2V5UmlnaHQobCl7cmV0dXJuIHN1cGVyLmtleVJpZ2h0KGwpfWtleUVuZChsLGEpe3JldHVybiBzdXBlci5rZXlFbmQobCxhKX1rZXlIb21lKGwsYSl7cmV0dXJuIHN1cGVyLmtl''@;'; put 'put ''eUhvbWUobCxhKX1rZXlQYWdlVXAobCl7Y29uc3QgYT10aGlzLnV0aWxzLmNyZWF0ZU5leHRDZWxsQ29vcmRzKGwpLGQ9dGhpcy51dGlscy5pdGVtc1BlclBhZ2U7cmV0dXJuIGEueT1sLnktZD4wP2wueS1kKzE6MSx0aGlzLnV0aWxzLmlzU2luZ2xlQ2VsbEV4cGFuZGVkUm93KGEueSk/c3Vw''@;'; put 'put ''ZXIua2V5UGFnZVVwKGwpOih0aGlzLnV0aWxzLmlzQWN0aW9uQ2VsbChsKT90aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhhLnkpJiYoYS55PWEueS0xKTp0aGlzLnV0aWxzLmlzUm93UmVwbGFjZWQoYS55KT90aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhhLnkpfHwoYS55PWEueSsxLGEueD1sLngr''@;'; put 'put ''dGhpcy51dGlscy5hY3Rpb25DZWxsQ291bnQoYS55KSk6dGhpcy51dGlscy5pc0RldGFpbHNSb3cobC55KSYmIXRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGEueSk/YS54PWwueCt0aGlzLnV0aWxzLmFjdGlvbkNlbGxDb3VudChhLnkpOnRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGEueSkmJihh''@;'; put 'put ''Lng9bC54LXRoaXMudXRpbHMuYWN0aW9uQ2VsbENvdW50KGwueSkpLGEpfWtleVBhZ2VEb3duKGwpe2NvbnN0IGE9dGhpcy51dGlscy5jcmVhdGVOZXh0Q2VsbENvb3JkcyhsKSxkPXRoaXMudXRpbHMucm93cz90aGlzLnV0aWxzLnJvd3MubGVuZ3RoLTE6MCxoPXRoaXMudXRpbHMuaXRlbXNQ''@;'; put 'put ''ZXJQYWdlO3JldHVybiBhLnk9bC55K2g+PWQ/ZDpsLnkraCx0aGlzLnV0aWxzLmlzU2luZ2xlQ2VsbEV4cGFuZGVkUm93KGEueSk/c3VwZXIua2V5UGFnZURvd24obCk6KHRoaXMudXRpbHMuaXNBY3Rpb25DZWxsKGwpP3RoaXMudXRpbHMuaXNEZXRhaWxzUm93KGEueSkmJihhLnk9YS55LTEp''@;'; put 'put ''OnRoaXMudXRpbHMuaXNSb3dSZXBsYWNlZChhLnkpJiYhdGhpcy51dGlscy5pc0RldGFpbHNSb3coYS55KT9hLnk8ZCYmKGEueT1hLnkrMSxhLng9bC54K3RoaXMudXRpbHMuYWN0aW9uQ2VsbENvdW50KGEueSkpOnRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGwueSkmJiF0aGlzLnV0aWxzLmlz''@;'; put 'put ''RGV0YWlsc1JvdyhhLnkpP2EueD1sLngrdGhpcy51dGlscy5hY3Rpb25DZWxsQ291bnQoYS55KTp0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhhLnkpJiYoYS54PWwueC10aGlzLnV0aWxzLmFjdGlvbkNlbGxDb3VudChsLnkpKSxhKX19Y2xhc3MgUFple2NvbnN0cnVjdG9yKGwsYSl7dGhpcy5o''@;'; put 'put ''b3N0PWwsdGhpcy5jb25maWc9YX1nZXQgZ3JpZCgpe3JldHVybiB0aGlzLmhvc3Q/LnF1ZXJ5U2VsZWN0b3IodGhpcy5jb25maWcua2V5R3JpZCl9Z2V0IHJvd3MoKXtyZXR1cm4gdGhpcy5ob3N0Py5xdWVyeVNlbGVjdG9yQWxsKHRoaXMuY29uZmlnLmtleUdyaWRSb3dzKX1nZXQgY2VsbHMo''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5ob3N0Py5xdWVyeVNlbGVjdG9yQWxsKHRoaXMuY29uZmlnLmtleUdyaWRDZWxscyl9Z2V0IGN1cnJlbnRDZWxsQ29vcmRpbmF0ZXMoKXtjb25zdCBsPXRoaXMuY2VsbHM/QXJyYXkuZnJvbSh0aGlzLmNlbGxzKS5maW5kKGg9PiIwIj09PWguZ2V0QXR0cmlidXRlKCJ0''@;'; put 'put ''YWJpbmRleCIpKTpudWxsLGE9bD9sLmNsb3Nlc3QodGhpcy5jb25maWcua2V5R3JpZFJvd3MpOm51bGw7cmV0dXJue3g6YSYmbD9BcnJheS5mcm9tKGEucXVlcnlTZWxlY3RvckFsbCh0aGlzLmNvbmZpZy5rZXlHcmlkQ2VsbHMpKS5pbmRleE9mKGwpOjAseTphJiZsJiZ0aGlzLnJvd3M/QXJy''@;'; put 'put ''YXkuZnJvbSh0aGlzLnJvd3MpLmluZGV4T2YoYSk6MH19Z2V0IGl0ZW1zUGVyUGFnZSgpe3JldHVybiBNYXRoLmZsb29yKHRoaXMuaG9zdD8ucXVlcnlTZWxlY3RvcigiLmRhdGFncmlkIikuY2xpZW50SGVpZ2h0L3RoaXMucm93c1swXS5jbGllbnRIZWlnaHQpLTF8fDB9Z2V0TmV4dEl0ZW1D''@;'; put 'put ''b29yZGluYXRlKGwpe2NvbnN0IGE9dGhpcy5jdXJyZW50Q2VsbENvb3JkaW5hdGVzLGQ9dGhpcy5nZXROYXZTdHJhdGVneShhKTtzd2l0Y2gobC5rZXkpe2Nhc2UgZ2EuQXJyb3dVcDpyZXR1cm4gZC5rZXlVcChhKTtjYXNlIGdhLkFycm93RG93bjpyZXR1cm4gZC5rZXlEb3duKGEpO2Nhc2Ui''@;'; put 'put ''cnRsIj09PXRoaXMuaG9zdC5kaXI/Z2EuQXJyb3dSaWdodDpnYS5BcnJvd0xlZnQ6cmV0dXJuIGQua2V5TGVmdChhKTtjYXNlInJ0bCI9PT10aGlzLmhvc3QuZGlyP2dhLkFycm93TGVmdDpnYS5BcnJvd1JpZ2h0OnJldHVybiBkLmtleVJpZ2h0KGEpO2Nhc2UgZ2EuSG9tZTpyZXR1cm4gZC5r''@;'; put 'put ''ZXlIb21lKGEsbC5jdHJsS2V5KTtjYXNlIGdhLkVuZDpyZXR1cm4gZC5rZXlFbmQoYSxsLmN0cmxLZXkpO2Nhc2UgZ2EuUGFnZVVwOnJldHVybiBkLmtleVBhZ2VVcChhKTtjYXNlIGdhLlBhZ2VEb3duOnJldHVybiBkLmtleVBhZ2VEb3duKGEpO2RlZmF1bHQ6cmV0dXJuIGF9fWdldENlbGxz''@;'; put 'put ''Rm9yUm93KGwpe3JldHVybiB0aGlzLnJvd3NbbF0ucXVlcnlTZWxlY3RvckFsbCh0aGlzLmNvbmZpZy5rZXlHcmlkQ2VsbHMpfWlzRXhwYW5kZWRSb3cobCl7Y29uc3QgYT10aGlzLnJvd3NbbF0ucXVlcnlTZWxlY3RvcigiLmRhdGFncmlkLXJvdy1kZXRhaWwiKTtyZXR1cm4hIWEmJiJub25l''@;'; put 'put ''IiE9PWEuc3R5bGUuZGlzcGxheX1pc0RldGFpbHNSb3cobCl7cmV0dXJuIHRoaXMucm93c1tsXS5jbGFzc0xpc3QuY29udGFpbnMoImRhdGFncmlkLXJvdy1kZXRhaWwiKX1pc1Jvd1JlcGxhY2VkKGwpe3JldHVybiEhdGhpcy5yb3dzW2xdLmNsb3Nlc3QoImNsci1kZy1yb3cuZGF0YWdyaWQt''@;'; put 'put ''cm93LXJlcGxhY2VkIil9aXNTaW5nbGVDZWxsRXhwYW5kZWRSb3cobCl7cmV0dXJuIDE9PT10aGlzLnJvd3NbbF0/LnF1ZXJ5U2VsZWN0b3JBbGwodGhpcy5jb25maWcua2V5R3JpZENlbGxzKS5sZW5ndGh9YWN0aW9uQ2VsbENvdW50KGwpe3JldHVybiB0aGlzLmFjdGlvbkNlbGxzQXNBcnJh''@;'; put 'put ''eShsKS5sZW5ndGh9YWN0aW9uQ2VsbHNBc0FycmF5KGwpe3JldHVybiBBcnJheS5mcm9tKHRoaXMucm93c1tsXS5xdWVyeVNlbGVjdG9yQWxsKCIuZGF0YWdyaWQtcm93LXN0aWNreSAuZGF0YWdyaWQtY2VsbCwgLmRhdGFncmlkLXJvdy1zdGlja3kgLmRhdGFncmlkLWNvbHVtbiIpKX1pc0Fj''@;'; put 'put ''dGlvbkNlbGwobCl7cmV0dXJuISF0aGlzLmFjdGlvbkNlbGxzQXNBcnJheShsLnkpW2wueF19Y3JlYXRlTmV4dENlbGxDb29yZHMobCl7cmV0dXJue3g6bC54LHk6bC55fX1nZXROYXZTdHJhdGVneShsKXtzd2l0Y2goITApe2Nhc2UgdGhpcy5pc1NpbmdsZUNlbGxFeHBhbmRlZFJvdyhsLnkp''@;'; put 'put ''OnJldHVybiBuZXcgeGRlKHRoaXMpO2Nhc2UgdGhpcy5pc0RldGFpbHNSb3cobC55KTpjYXNlIHRoaXMuaXNFeHBhbmRlZFJvdyhsLnkpOnJldHVybiBuZXcgT1plKHRoaXMpO2RlZmF1bHQ6cmV0dXJuIG5ldyBNZGUodGhpcyl9fX1jb25zdCBFZGU9WyJhW2hyZWZdIiwiYXJlYVtocmVmXSIs''@;'; put 'put ''ImlucHV0Om5vdChbZGlzYWJsZWRdKSIsImJ1dHRvbjpub3QoW2Rpc2FibGVkXSkiLCJzZWxlY3Q6bm90KFtkaXNhYmxlZF0pIiwidGV4dGFyZWE6bm90KFtkaXNhYmxlZF0pIiwiaWZyYW1lIiwib2JqZWN0IiwiZW1iZWQiLCJbY29udGVudGVkaXRhYmxlPXRydWVdIiwiW3JvbGU9YnV0dG9u''@;'; put 'put ''XTpub3QoW2Rpc2FibGVkXSkiXTtmdW5jdGlvbiBIWmUoYyl7Y29uc3QgbD1FZGUuam9pbigiLCIpO3JldHVybiBjLm1hdGNoZXMobCl9bGV0IHJPPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy56b25lPWEsdGhpcy5za2lwSXRlbUZvY3VzPSExLHRoaXMubGlzdGVuZXJzQWRk''@;'; put 'put ''ZWQ9ITEsdGhpcy5kZXN0cm95JD1uZXcgV24sdGhpcy5fYWN0aXZlQ2VsbD1udWxsLHRoaXMuY29uZmlnPXtrZXlHcmlkUm93czonW3JvbGU9cm93XTpub3QoLmRhdGFncmlkLXBsYWNlaG9sZGVyKTpub3QoW3N0eWxlKj0iZGlzcGxheTogbm9uZSJdKScsa2V5R3JpZENlbGxzOiJbcm9sZT1n''@;'; put 'put ''cmlkY2VsbF06bm90KC5kYXRhZ3JpZC1oaWRkZW4tY29sdW1uKTpub3QoLmRhdGFncmlkLXBsYWNlaG9sZGVyLWNvbnRlbnQpLCBbcm9sZT1jb2x1bW5oZWFkZXJdOm5vdCguZGF0YWdyaWQtaGlkZGVuLWNvbHVtbik6bm90KC5kYXRhZ3JpZC1wbGFjZWhvbGRlci1jb250ZW50KSwgLmRhdGFn''@;'; put 'put ''cmlkLWRldGFpbC1jYXJldCIsa2V5R3JpZDoiW3JvbGU9Z3JpZF0ifX1uZ09uRGVzdHJveSgpe3RoaXMuZGVzdHJveSQubmV4dCgpLHRoaXMuZGVzdHJveSQuY29tcGxldGUoKX1hZGRMaXN0ZW5lcnMoKXt0aGlzLmxpc3RlbmVyc0FkZGVkfHwodGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFy''@;'; put 'put ''KCgpPT57eGQodGhpcy5rZXlOYXZVdGlscy5ncmlkLCJtb3VzZWRvd24iKS5waXBlKFYwKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoYT0+e2lmKDE9PT1hLmJ1dHRvbnMmJiFhLmN0cmxLZXkpe2NvbnN0IGQ9dGhpcy5rZXlOYXZVdGlscy5jZWxscz9BcnJheS5mcm9tKHRoaXMua2V5TmF2''@;'; put 'put ''VXRpbHMuY2VsbHMpLmZpbmQoaD0+aD09PWEudGFyZ2V0fHxoPT09YS50YXJnZXQuY2xvc2VzdCh0aGlzLmNvbmZpZy5rZXlHcmlkQ2VsbHMpKTpudWxsO2QmJnRoaXMuc2V0QWN0aXZlQ2VsbChkLHtrZWVwRm9jdXM6SFplKGEudGFyZ2V0KX0pfX0pLHhkKHRoaXMua2V5TmF2VXRpbHMuZ3Jp''@;'; put 'put ''ZCwid2hlZWwiKS5waXBlKFYwKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLnJlbW92ZUFjdGl2ZUNlbGwoKX0pLHhkKHRoaXMua2V5TmF2VXRpbHMuZ3JpZCwiZm9jdXNvdXQiKS5waXBlKGZtKDApLFYwKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLmtl''@;'; put 'put ''eU5hdlV0aWxzLmdyaWQuY29udGFpbnMoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCl8fHRoaXMucmVtb3ZlQWN0aXZlQ2VsbCgpfSkseGQodGhpcy5rZXlOYXZVdGlscy5ncmlkLCJrZXlkb3duIikucGlwZShWMCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKGE9PntpZigoIWEudGFyZ2V0LmNs''@;'; put 'put ''YXNzTGlzdC5jb250YWlucygiZHJhZy1oYW5kbGUiKXx8YS5rZXkhPT1nYS5BcnJvd0xlZnQmJmEua2V5IT09Z2EuQXJyb3dSaWdodCkmJihhLmtleT09PWdhLkFycm93VXB8fGEua2V5PT09Z2EuQXJyb3dEb3dufHxhLmtleT09PWdhLkFycm93TGVmdHx8YS5rZXk9PT1nYS5BcnJvd1JpZ2h0''@;'; put 'put ''fHxhLmtleT09PWdhLkVuZHx8YS5rZXk9PT1nYS5Ib21lfHxhLmtleT09PWdhLlBhZ2VVcHx8YS5rZXk9PT1nYS5QYWdlRG93bikpe2NvbnN0IGQ9dGhpcy5rZXlOYXZVdGlscy5nZXROZXh0SXRlbUNvb3JkaW5hdGUoYSksaD10aGlzLmtleU5hdlV0aWxzLnJvd3M/QXJyYXkuZnJvbSh0aGlz''@;'; put 'put ''LmtleU5hdlV0aWxzLmdldENlbGxzRm9yUm93KGQueSkpW2QueF06bnVsbDtoJiZ0aGlzLnNldEFjdGl2ZUNlbGwoaCksYS5wcmV2ZW50RGVmYXVsdCgpfX0pfSksdGhpcy5saXN0ZW5lcnNBZGRlZD0hMCl9aW5pdGlhbGl6ZUtleUdyaWQoYSl7dGhpcy5rZXlOYXZVdGlscz1uZXcgUFplKGEs''@;'; put 'put ''dGhpcy5jb25maWcpLHRoaXMuYWRkTGlzdGVuZXJzKCksdGhpcy5yZXNldEtleUdyaWQoKX1yZXNldEtleUdyaWQoKXt0aGlzLmtleU5hdlV0aWxzLmNlbGxzPy5mb3JFYWNoKGQ9PmQuc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsIi0xIikpLCh0aGlzLmtleU5hdlV0aWxzLmNlbGxzP3RoaXMu''@;'; put 'put ''a2V5TmF2VXRpbHMuY2VsbHNbMF06bnVsbCk/LnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLCIwIil9cmVtb3ZlQWN0aXZlQ2VsbCgpe3RoaXMuX2FjdGl2ZUNlbGw9bnVsbH1nZXRBY3RpdmVDZWxsKCl7cmV0dXJuIHRoaXMuX2FjdGl2ZUNlbGx9c2V0QWN0aXZlQ2VsbChhLHtrZWVwRm9jdXM6''@;'; put 'put ''ZH09e2tlZXBGb2N1czohMX0pe2NvbnN0IGg9dGhpcy5rZXlOYXZVdGlscy5jZWxscz9BcnJheS5mcm9tKHRoaXMua2V5TmF2VXRpbHMuY2VsbHMpLmZpbmQoZj0+IjAiPT09Zi5nZXRBdHRyaWJ1dGUoInRhYmluZGV4IikpOm51bGw7aWYoaCYmaC5zZXRBdHRyaWJ1dGUoInRhYmluZGV4Iiwi''@;'; put 'put ''LTEiKSxhLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLCIwIiksdGhpcy5fYWN0aXZlQ2VsbD1hLCF0aGlzLnNraXBJdGVtRm9jdXMmJiFkKXtsZXQgZjtpZigiY29sdW1uaGVhZGVyIj09PWEuZ2V0QXR0cmlidXRlKCJyb2xlIikpZj1hO2Vsc2V7Y29uc3Qgdj1mdW5jdGlvbiBGWmUoYyl7Y29u''@;'; put 'put ''c3QgYT1bLi4uRWRlLCdbdGFiaW5kZXg9IjAiXTpub3QoW2Rpc2FibGVkXSknXS5qb2luKCIsIik7cmV0dXJuIEFycmF5LmZyb20oYy5xdWVyeVNlbGVjdG9yQWxsKGEpKX0oYSk7Zj12Lmxlbmd0aD92WzBdOmF9Zi5mb2N1cygpfX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3Jl''@;'; put 'put ''dHVybiBuZXcoYXx8YykoeHIoV2EpKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSwkeD0oKCk9PntjbGFzcyBjIGV4dGVuZHMgbk97Y29uc3RydWN0b3IoYSxkLGgsZix2LE0pe3N1cGVyKGEpLHRoaXMuY29tbW9uU3RyaW5ncz1kLHRoaXMu''@;'; put 'put ''c21hcnRUb2dnbGVTZXJ2aWNlPWgsdGhpcy5wbGF0Zm9ybUlkPWYsdGhpcy5lbGVtZW50UmVmPXYsdGhpcy5rZXlOYXZpZ2F0aW9uPU0sdGhpcy5vcGVuQ2hhbmdlPW5ldyBLcighMSksdGhpcy5hcmlhRXhwYW5kZWQ9ITEsdGhpcy5wb3BvdmVySWQ9TXUoKSx0aGlzLnNtYXJ0UG9zaXRpb249''@;'; put 'put ''e2F4aXM6aDEuVkVSVElDQUwsc2lkZTpSMi5BRlRFUixhbmNob3I6T3MuRU5ELGNvbnRlbnQ6T3MuRU5EfSx0aGlzLl9vcGVuPSExLHRoaXMuc3Vicz1bXSx0aGlzLnN1YnMucHVzaChoLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKEQ9Pnt0aGlzLm9wZW49RCx0aGlzLmFyaWFFeHBhbmRlZD1EfSkp''@;'; put 'put ''fWdldCBvcGVuKCl7cmV0dXJuIHRoaXMuX29wZW59c2V0IG9wZW4oYSl7dGhpcy5vcGVuIT09KGE9ISFhKSYmKHRoaXMuc21hcnRUb2dnbGVTZXJ2aWNlLm9wZW49YSx0aGlzLm9wZW5DaGFuZ2UuZW1pdChhKSwhYSYmdGwodGhpcy5wbGF0Zm9ybUlkKSYmdGhpcy5hbmNob3IubmF0aXZlRWxl''@;'; put 'put ''bWVudC5mb2N1cygpLHRoaXMua2V5TmF2aWdhdGlvbiYmKHRoaXMua2V5TmF2aWdhdGlvbi5za2lwSXRlbUZvY3VzPWEpLHRoaXMuX29wZW49YSl9c2V0IGN1c3RvbUZpbHRlcihhKXt0aGlzLnNldEZpbHRlcihhKX1nZXQgYWN0aXZlKCl7cmV0dXJuISF0aGlzLmZpbHRlciYmdGhpcy5maWx0''@;'; put 'put ''ZXIuaXNBY3RpdmUoKX1uZ09uQ2hhbmdlcygpe3NldFRpbWVvdXQoKCk9Pnt0aGlzLnNldFRvZ2dsZUJ1dHRvbkFyaWFMYWJlbCgpfSl9bmdPbkRlc3Ryb3koKXtzdXBlci5uZ09uRGVzdHJveSgpLHRoaXMuc3Vicy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9c2V0VG9nZ2xlQnV0dG9u''@;'; put 'put ''QXJpYUxhYmVsKCl7Y29uc3QgaD10aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudD8uY2xvc2VzdCgiY2xyLWRnLWNvbHVtbiIpPy5xdWVyeVNlbGVjdG9yKCIuZGF0YWdyaWQtY29sdW1uLXRpdGxlIik/LnRleHRDb250ZW50LnRyaW0oKS50b0xvY2FsZUxvd2VyQ2FzZSgpO3RoaXMudG9n''@;'; put 'put ''Z2xlQnV0dG9uQXJpYUxhYmVsPXRoaXMuY29tbW9uU3RyaW5ncy5wYXJzZSh0aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRhZ3JpZEZpbHRlckFyaWFMYWJlbCx7Q09MVU1OOmh8fCIifSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKHVnKSxH''@;'; put 'put ''ZShpcyksR2Uoc2MpLEdlKGlvKSxHZShKaSksR2Uock8sOCkpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGctZmlsdGVyIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmcWEoSFZlLDUsSmkpLDImYSl7bGV0IGg7Q2koaD1TaSgpKSYmKGQuYW5j''@;'; put 'put ''aG9yPWguZmlyc3QpfX0saW5wdXRzOntvcGVuOltObi5Ob25lLCJjbHJEZ0ZpbHRlck9wZW4iLCJvcGVuIl0sY3VzdG9tRmlsdGVyOltObi5Ob25lLCJjbHJEZ0ZpbHRlciIsImN1c3RvbUZpbHRlciJdfSxvdXRwdXRzOntvcGVuQ2hhbmdlOiJjbHJEZ0ZpbHRlck9wZW5DaGFuZ2UifSxmZWF0''@;'; put 'put ''dXJlczpbZGEoW3twcm92aWRlOmVPLHVzZUV4aXN0aW5nOmN9XSksd2Esd2xdLG5nQ29udGVudFNlbGVjdG9yczp5byxkZWNsczo0LHZhcnM6MTMsY29uc3RzOltbImFuY2hvciIsIiJdLFsidHlwZSIsImJ1dHRvbiIsImNsclBvcG92ZXJBbmNob3IiLCIiLCJjbHJQb3BvdmVyT3BlbkNsb3Nl''@;'; put 'put ''QnV0dG9uIiwiIiwxLCJkYXRhZ3JpZC1maWx0ZXItdG9nZ2xlIl0sWyJzb2xpZCIsIiJdLFsiY2xhc3MiLCJkYXRhZ3JpZC1maWx0ZXIiLCJjZGtUcmFwRm9jdXMiLCIiLCJyb2xlIiwiZGlhbG9nIiwzLCJpZCIsNCwiY2xyUG9wb3ZlckNvbnRlbnQiLCJjbHJQb3BvdmVyQ29udGVudEF0Iiwi''@;'; put 'put ''Y2xyUG9wb3ZlckNvbnRlbnRPdXRzaWRlQ2xpY2tUb0Nsb3NlIiwiY2xyUG9wb3ZlckNvbnRlbnRTY3JvbGxUb0Nsb3NlIl0sWyJjZGtUcmFwRm9jdXMiLCIiLCJyb2xlIiwiZGlhbG9nIiwxLCJkYXRhZ3JpZC1maWx0ZXIiLDMsImlkIl0sWzEsImRhdGFncmlkLWZpbHRlci1jbG9zZS13cmFw''@;'; put 'put ''cGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xyUG9wb3ZlckNsb3NlQnV0dG9uIiwiIiwxLCJjbG9zZSJdLFsic2hhcGUiLCJ3aW5kb3ctY2xvc2UiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYSgpLGRlKDAsImJ1dHRvbiIsMSwwKSxHdCgyLCJjZHMtaWNvbiIsMiksaGUoKSxn''@;'; put 'put ''dCgzLE5WZSw1LDMsImRpdiIsMykpLDImYSYmKFRyKCJkYXRhZ3JpZC1maWx0ZXItb3BlbiIsZC5vcGVuKSgiZGF0YWdyaWQtZmlsdGVyZWQiLGQuYWN0aXZlKSxocigiYXJpYS1sYWJlbCIsZC50b2dnbGVCdXR0b25BcmlhTGFiZWwpKCJhcmlhLWV4cGFuZGVkIixkLmFyaWFFeHBhbmRlZCko''@;'; put 'put ''ImFyaWEtY29udHJvbHMiLGQucG9wb3ZlcklkKSxmZSgyKSxocigic3RhdHVzIixkLmFjdGl2ZT8iaW5mbyI6bnVsbCkoInNoYXBlIixkLmFjdGl2ZT8iZmlsdGVyLWdyaWQtY2lyY2xlIjoiZmlsdGVyLWdyaWQiKSxmZSgpLE1lKCJjbHJQb3BvdmVyQ29udGVudCIsZC5vcGVuKSgiY2xyUG9w''@;'; put 'put ''b3ZlckNvbnRlbnRBdCIsZC5zbWFydFBvc2l0aW9uKSgiY2xyUG9wb3ZlckNvbnRlbnRPdXRzaWRlQ2xpY2tUb0Nsb3NlIiwhMCkoImNsclBvcG92ZXJDb250ZW50U2Nyb2xsVG9DbG9zZSIsITApKX0sZGVwZW5kZW5jaWVzOltaeSxycyxQeCxMMWUsTngsSHhdLGVuY2Fwc3VsYXRpb246Mn0p''@;'; put 'put ''LGN9KSgpO2NsYXNzIHVHe2NvbnN0cnVjdG9yKGwpe3RoaXMucHJvcD1sLGwuaW5kZXhPZigiLiIpPj0wJiYodGhpcy5zcGxpdFByb3A9bC5zcGxpdCgiLiIpKX1nZXRQcm9wVmFsdWUobCl7aWYodGhpcy5zcGxpdFByb3Ape2xldCBhPWw7Zm9yKGNvbnN0IGQgb2YgdGhpcy5zcGxpdFByb3Ap''@;'; put 'put ''e2lmKG51bGw9PT1hfHx0eXBlb2YgYT4idSJ8fHR5cGVvZiBhW2RdPiJ1IilyZXR1cm47YT1hW2RdfXJldHVybiBhfXJldHVybiBsW3RoaXMucHJvcF19fWNsYXNzIGlPe2NvbnN0cnVjdG9yKGwsYT0hMSl7dGhpcy5wcm9wPWwsdGhpcy5leGFjdD1hLHRoaXMubmVzdGVkUHJvcD1uZXcgdUco''@;'; put 'put ''bCl9YWNjZXB0cyhsLGEsZCl7Y29uc3QgaD10aGlzLm5lc3RlZFByb3AuZ2V0UHJvcFZhbHVlKGwpO3JldHVybiEodm9pZCAwPT09aHx8bnVsbCE9PWEmJigibnVtYmVyIiE9dHlwZW9mIGh8fGg8YSl8fG51bGwhPT1kJiYoIm51bWJlciIhPXR5cGVvZiBofHxoPmQpKX19Y2xhc3MgVDd7Y29u''@;'; put 'put ''c3RydWN0b3IobCl7dGhpcy5maWx0ZXJGbj1sLHRoaXMuX2NoYW5nZXM9bmV3IFduLHRoaXMuX2xvdz1udWxsLHRoaXMuX2hpZ2g9bnVsbH1nZXQgY2hhbmdlcygpe3JldHVybiB0aGlzLl9jaGFuZ2VzLmFzT2JzZXJ2YWJsZSgpfWdldCB2YWx1ZSgpe3JldHVyblt0aGlzLl9sb3csdGhpcy5f''@;'; put 'put ''aGlnaF19c2V0IHZhbHVlKGwpe2NvbnN0IGE9bFswXSxkPWxbMV07KGEhPT10aGlzLl9sb3d8fGQhPT10aGlzLl9oaWdoKSYmKHRoaXMuX2xvdz1hLHRoaXMuX2hpZ2g9ZCx0aGlzLl9jaGFuZ2VzLm5leHQoW3RoaXMuX2xvdyx0aGlzLl9oaWdoXSkpfWdldCBsb3coKXtyZXR1cm4gdGhpcy5f''@;'; put 'put ''bG93fXNldCBsb3cobCl7bCE9PXRoaXMuX2xvdyYmKHRoaXMuX2xvdz1sLHRoaXMuX2NoYW5nZXMubmV4dChbdGhpcy5fbG93LHRoaXMuX2hpZ2hdKSl9Z2V0IGhpZ2goKXtyZXR1cm4gdGhpcy5faGlnaH1zZXQgaGlnaChsKXtsIT09dGhpcy5faGlnaCYmKHRoaXMuX2hpZ2g9bCx0aGlzLl9j''@;'; put 'put ''aGFuZ2VzLm5leHQoW3RoaXMuX2xvdyx0aGlzLl9oaWdoXSkpfWdldCBzdGF0ZSgpe3JldHVybiB0aGlzLmZpbHRlckZuIGluc3RhbmNlb2YgaU8/e3Byb3BlcnR5OnRoaXMuZmlsdGVyRm4ucHJvcCxsb3c6dGhpcy5fbG93LGhpZ2g6dGhpcy5faGlnaH06dGhpc31pc0FjdGl2ZSgpe3JldHVy''@;'; put 'put ''biBudWxsIT09dGhpcy5fbG93fHxudWxsIT09dGhpcy5oaWdofWFjY2VwdHMobCl7cmV0dXJuIHRoaXMuZmlsdGVyRm4uYWNjZXB0cyhsLHRoaXMuX2xvdyx0aGlzLl9oaWdoKX1lcXVhbHMobCl7cmV0dXJuIGwgaW5zdGFuY2VvZiBUNyYmKGwuZmlsdGVyRm4gaW5zdGFuY2VvZiBpTz90aGlz''@;'; put 'put ''LmZpbHRlckZuIGluc3RhbmNlb2YgaU8mJmwuZmlsdGVyRm4ucHJvcD09PXRoaXMuZmlsdGVyRm4ucHJvcCYmbC5sb3c9PT10aGlzLl9sb3cmJmwuaGlnaD09PXRoaXMuX2hpZ2g6bD09PXRoaXMpfX1sZXQgVGRlPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBuT3tjb25zdHJ1Y3RvcihhLGQsaCxm''@;'; put 'put ''LHYpe3N1cGVyKGEpLHRoaXMuZG9tQWRhcHRlcj1kLHRoaXMuY29tbW9uU3RyaW5ncz1oLHRoaXMucG9wb3ZlclRvZ2dsZVNlcnZpY2U9Zix0aGlzLm5nWm9uZT12LHRoaXMuZmlsdGVyVmFsdWVDaGFuZ2U9bmV3IEtyLHRoaXMub3Blbj0hMSx0aGlzLnN1YnNjcmlwdGlvbnM9W119Z2V0IHZh''@;'; put 'put ''bHVlKCl7cmV0dXJuW3RoaXMuZmlsdGVyLmxvdyx0aGlzLmZpbHRlci5oaWdoXX1zZXQgdmFsdWUoYSl7dGhpcy5maWx0ZXImJkFycmF5LmlzQXJyYXkoYSk/YSYmKGFbMF0hPT10aGlzLmZpbHRlci5sb3d8fGFbMV0hPT10aGlzLmZpbHRlci5oaWdoKSYmKHRoaXMuZmlsdGVyLmxvdz0ibnVt''@;'; put 'put ''YmVyIj09dHlwZW9mIGFbMF0/YVswXTpudWxsLHRoaXMuZmlsdGVyLmhpZ2g9Im51bWJlciI9PXR5cGVvZiBhWzFdP2FbMV06bnVsbCx0aGlzLmZpbHRlclZhbHVlQ2hhbmdlLmVtaXQoYSkpOnRoaXMuaW5pdEZpbHRlclZhbHVlcz1hfXNldCBjdXN0b21OdW1lcmljRmlsdGVyKGEpe3RoaXMu''@;'; put 'put ''c2V0RmlsdGVyKGEgaW5zdGFuY2VvZiB0Tz9hOm5ldyBUNyhhKSksdGhpcy5pbml0RmlsdGVyVmFsdWVzJiYodGhpcy52YWx1ZT10aGlzLmluaXRGaWx0ZXJWYWx1ZXMsZGVsZXRlIHRoaXMuaW5pdEZpbHRlclZhbHVlcyl9Z2V0IG1heFBsYWNlaG9sZGVyVmFsdWUoKXtyZXR1cm4gdGhpcy5t''@;'; put 'put ''YXhQbGFjZWhvbGRlcnx8dGhpcy5jb21tb25TdHJpbmdzLmtleXMubWF4VmFsdWV9Z2V0IG1pblBsYWNlaG9sZGVyVmFsdWUoKXtyZXR1cm4gdGhpcy5taW5QbGFjZWhvbGRlcnx8dGhpcy5jb21tb25TdHJpbmdzLmtleXMubWluVmFsdWV9Z2V0IGZyb21MYWJlbFZhbHVlKCl7cmV0dXJuIHRo''@;'; put 'put ''aXMuZnJvbUxhYmVsfHx0aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5mcm9tTGFiZWx9Z2V0IHRvTGFiZWxWYWx1ZSgpe3JldHVybiB0aGlzLnRvTGFiZWx8fHRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLnRvTGFiZWx9Z2V0IGxvdygpe3JldHVybiJudW1iZXIiPT10eXBlb2YgdGhpcy5maWx0ZXIu''@;'; put 'put ''bG93JiZpc0Zpbml0ZSh0aGlzLmZpbHRlci5sb3cpP3RoaXMuZmlsdGVyLmxvdzpudWxsfXNldCBsb3coYSl7Im51bWJlciI9PXR5cGVvZiBhJiZhIT09dGhpcy5maWx0ZXIubG93Pyh0aGlzLmZpbHRlci5sb3c9YSx0aGlzLmZpbHRlclZhbHVlQ2hhbmdlLmVtaXQoW3RoaXMuZmlsdGVyLmxv''@;'; put 'put ''dyx0aGlzLmZpbHRlci5oaWdoXSkpOiJudW1iZXIiIT10eXBlb2YgYSYmKHRoaXMuZmlsdGVyLmxvdz1udWxsLHRoaXMuZmlsdGVyVmFsdWVDaGFuZ2UuZW1pdChbdGhpcy5maWx0ZXIubG93LHRoaXMuZmlsdGVyLmhpZ2hdKSl9Z2V0IGhpZ2goKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHRo''@;'; put 'put ''aXMuZmlsdGVyLmhpZ2gmJmlzRmluaXRlKHRoaXMuZmlsdGVyLmhpZ2gpP3RoaXMuZmlsdGVyLmhpZ2g6bnVsbH1zZXQgaGlnaChhKXsibnVtYmVyIj09dHlwZW9mIGEmJmEhPT10aGlzLmZpbHRlci5oaWdoPyh0aGlzLmZpbHRlci5oaWdoPWEsdGhpcy5maWx0ZXJWYWx1ZUNoYW5nZS5lbWl0''@;'; put 'put ''KFt0aGlzLmZpbHRlci5sb3csdGhpcy5maWx0ZXIuaGlnaF0pKToibnVtYmVyIiE9dHlwZW9mIGEmJih0aGlzLmZpbHRlci5oaWdoPW51bGwsdGhpcy5maWx0ZXJWYWx1ZUNoYW5nZS5lbWl0KFt0aGlzLmZpbHRlci5sb3csdGhpcy5maWx0ZXIuaGlnaF0pKX1uZ0FmdGVyVmlld0luaXQoKXt0''@;'; put 'put ''aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLnBvcG92ZXJUb2dnbGVTZXJ2aWNlLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKGE9Pnt0aGlzLm9wZW49YSx0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3JlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3RoaXMuZG9tQWRhcHRlci5m''@;'; put 'put ''b2N1cyh0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQpfSl9KX0pKX1uZ09uRGVzdHJveSgpe3N1cGVyLm5nT25EZXN0cm95KCksdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+e2EudW5zdWJzY3JpYmUoKX0pfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhh''@;'; put 'put ''fHxjKShHZSh1ZyksR2Uodm0pLEdlKGlzKSxHZShzYyksR2UoV2EpKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRnLW51bWVyaWMtZmlsdGVyIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmKHFhKFZWZSw1KSxxYSgkeCw1KSksMiZhKXtsZXQg''@;'; put 'put ''aDtDaShoPVNpKCkpJiYoZC5pbnB1dD1oLmZpcnN0KSxDaShoPVNpKCkpJiYoZC5maWx0ZXJDb250YWluZXI9aC5maXJzdCl9fSxpbnB1dHM6e21pblBsYWNlaG9sZGVyOltObi5Ob25lLCJjbHJGaWx0ZXJNaW5QbGFjZWhvbGRlciIsIm1pblBsYWNlaG9sZGVyIl0sbWF4UGxhY2Vob2xkZXI6''@;'; put 'put ''W05uLk5vbmUsImNsckZpbHRlck1heFBsYWNlaG9sZGVyIiwibWF4UGxhY2Vob2xkZXIiXSxmcm9tTGFiZWw6W05uLk5vbmUsImNsckZpbHRlckZyb21MYWJlbCIsImZyb21MYWJlbCJdLHRvTGFiZWw6W05uLk5vbmUsImNsckZpbHRlclRvTGFiZWwiLCJ0b0xhYmVsIl0sdmFsdWU6W05uLk5v''@;'; put 'put ''bmUsImNsckZpbHRlclZhbHVlIiwidmFsdWUiXSxjdXN0b21OdW1lcmljRmlsdGVyOltObi5Ob25lLCJjbHJEZ051bWVyaWNGaWx0ZXIiLCJjdXN0b21OdW1lcmljRmlsdGVyIl19LG91dHB1dHM6e2ZpbHRlclZhbHVlQ2hhbmdlOiJjbHJGaWx0ZXJWYWx1ZUNoYW5nZSJ9LGZlYXR1cmVzOltk''@;'; put 'put ''YShbe3Byb3ZpZGU6ZU8sdXNlRXhpc3Rpbmc6Y31dKSx3YV0sZGVjbHM6MTIsdmFyczoxMCxjb25zdHM6W1siaW5wdXRfbG93IiwiIl0sWyJpbnB1dF9oaWdoIiwiIl0sWzMsImNsckRnRmlsdGVyT3BlbkNoYW5nZSIsImNsckRnRmlsdGVyIiwiY2xyRGdGaWx0ZXJPcGVuIl0sWzEsImRhdGFn''@;'; put 'put ''cmlkLW51bWVyaWMtZmlsdGVyLWZvcm0iXSxbMSwiY2xyLWNvbnRyb2wtbGFiZWwiXSxbImNsck51bWJlcklucHV0IiwiIiwidHlwZSIsIm51bWJlciIsImF1dG9jb21wbGV0ZSIsIm9mZiIsIm5hbWUiLCJsb3ciLDEsImRhdGFncmlkLW51bWVyaWMtZmlsdGVyLWlucHV0IiwzLCJuZ01vZGVs''@;'; put 'put ''Q2hhbmdlIiwibmdNb2RlbCIsInBsYWNlaG9sZGVyIl0sWyJjbHJOdW1iZXJJbnB1dCIsIiIsInR5cGUiLCJudW1iZXIiLCJhdXRvY29tcGxldGUiLCJvZmYiLCJuYW1lIiwiaGlnaCIsMSwiZGF0YWdyaWQtbnVtZXJpYy1maWx0ZXItaW5wdXQiLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVs''@;'; put 'put ''IiwicGxhY2Vob2xkZXIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXtpZigxJmEpe2NvbnN0IGg9TG4oKTtkZSgwLCJjbHItZGctZmlsdGVyIiwyKSxnaSgiY2xyRGdGaWx0ZXJPcGVuQ2hhbmdlIixmdW5jdGlvbih2KXtyZXR1cm4gd3QoaCksbWkoZC5vcGVuLHYpfHwoZC5vcGVuPXYpLEN0''@;'; put 'put ''KHYpfSksZGUoMSwiZGl2IiwzKSgyLCJjbHItbnVtYmVyLWlucHV0LWNvbnRhaW5lciIpKDMsImxhYmVsIiw0KSxMZSg0KSxoZSgpLGRlKDUsImlucHV0Iiw1LDApLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbih2KXtyZXR1cm4gd3QoaCksbWkoZC5sb3csdil8fChkLmxvdz12KSxDdCh2''@;'; put 'put ''KX0pLGhlKCkoKSxkZSg3LCJjbHItbnVtYmVyLWlucHV0LWNvbnRhaW5lciIpKDgsImxhYmVsIiw0KSxMZSg5KSxoZSgpLGRlKDEwLCJpbnB1dCIsNiwxKSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIHd0KGgpLG1pKGQuaGlnaCx2KXx8KGQuaGlnaD12KSxDdCh2KX0p''@;'; put 'put ''LGhlKCkoKSgpKCl9MiZhJiYoTWUoImNsckRnRmlsdGVyIixkLnJlZ2lzdGVyZWQpLHBpKCJjbHJEZ0ZpbHRlck9wZW4iLGQub3BlbiksZmUoNCksd3IoZC5mcm9tTGFiZWxWYWx1ZSksZmUoKSxwaSgibmdNb2RlbCIsZC5sb3cpLE1lKCJwbGFjZWhvbGRlciIsZC5taW5QbGFjZWhvbGRlclZh''@;'; put 'put ''bHVlKSxocigiYXJpYS1sYWJlbCIsZC5taW5QbGFjZWhvbGRlclZhbHVlKSxmZSg0KSx3cihkLnRvTGFiZWxWYWx1ZSksZmUoKSxwaSgibmdNb2RlbCIsZC5oaWdoKSxNZSgicGxhY2Vob2xkZXIiLGQubWF4UGxhY2Vob2xkZXJWYWx1ZSksaHIoImFyaWEtbGFiZWwiLGQubWF4UGxhY2Vob2xk''@;'; put 'put ''ZXJWYWx1ZSkpfSxkZXBlbmRlbmNpZXM6W2RzLF9kZSx5ZGUscWwsdkwsbmwsJHMsJHhdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpO2NsYXNzIGFPe2NvbnN0cnVjdG9yKGwsYT0hMSl7dGhpcy5wcm9wPWwsdGhpcy5leGFjdD1hLHRoaXMubmVzdGVkUHJvcD1uZXcgdUcobCl9YWNjZXB0cyhs''@;'; put 'put ''LGEpe2NvbnN0IGQ9dGhpcy5uZXN0ZWRQcm9wLmdldFByb3BWYWx1ZShsKTtyZXR1cm4hKHR5cGVvZiBkPiJ1IikmJih0aGlzLmV4YWN0PygiIitkKS50b0xvd2VyQ2FzZSgpPT09YTooIiIrZCkudG9Mb3dlckNhc2UoKS5pbmRleE9mKGEpPj0wKX19Y2xhc3MgQTd7Y29uc3RydWN0b3IobCl7''@;'; put 'put ''dGhpcy5maWx0ZXJGbj1sLHRoaXMuX2NoYW5nZXM9bmV3IFduLHRoaXMuX2xvd2VyQ2FzZVZhbHVlPSIiLHRoaXMuX3Jhd1ZhbHVlPSIifWdldCBjaGFuZ2VzKCl7cmV0dXJuIHRoaXMuX2NoYW5nZXMuYXNPYnNlcnZhYmxlKCl9Z2V0IGxvd2VyQ2FzZVZhbHVlKCl7cmV0dXJuIHRoaXMuX2xv''@;'; put 'put ''d2VyQ2FzZVZhbHVlfWdldCBzdGF0ZSgpe3JldHVybiB0aGlzLmZpbHRlckZuIGluc3RhbmNlb2YgYU8/e3Byb3BlcnR5OnRoaXMuZmlsdGVyRm4ucHJvcCx2YWx1ZTp0aGlzLnZhbHVlfTp0aGlzfWdldCB2YWx1ZSgpe3JldHVybiB0aGlzLl9yYXdWYWx1ZX1zZXQgdmFsdWUobCl7bHx8KGw9''@;'; put 'put ''IiIpLGwhPT10aGlzLl9yYXdWYWx1ZSYmKHRoaXMuX3Jhd1ZhbHVlPWwsdGhpcy5fbG93ZXJDYXNlVmFsdWU9bC50b0xvd2VyQ2FzZSgpLnRyaW0oKSx0aGlzLl9jaGFuZ2VzLm5leHQobCkpfWlzQWN0aXZlKCl7cmV0dXJuISF0aGlzLnZhbHVlfWFjY2VwdHMobCl7cmV0dXJuIHRoaXMuZmls''@;'; put 'put ''dGVyRm4uYWNjZXB0cyhsLHRoaXMubG93ZXJDYXNlVmFsdWUpfWVxdWFscyhsKXtyZXR1cm4gbCBpbnN0YW5jZW9mIEE3JiYobC5maWx0ZXJGbiBpbnN0YW5jZW9mIGFPP3RoaXMuZmlsdGVyRm4gaW5zdGFuY2VvZiBhTyYmbC5maWx0ZXJGbi5wcm9wPT09dGhpcy5maWx0ZXJGbi5wcm9wJiZs''@;'; put 'put ''LnZhbHVlPT09dGhpcy52YWx1ZTpsPT09dGhpcyl9fWxldCBkRz0oKCk9PntjbGFzcyBjIGV4dGVuZHMgbk97Y29uc3RydWN0b3IoYSxkLGgsZix2LE0sRCl7c3VwZXIoYSksdGhpcy5kb21BZGFwdGVyPWQsdGhpcy5jb21tb25TdHJpbmdzPWgsdGhpcy5zbWFydFRvZ2dsZVNlcnZpY2U9Zix0''@;'; put 'put ''aGlzLmVsZW1lbnRSZWY9dix0aGlzLmNkcj1NLHRoaXMubmdab25lPUQsdGhpcy5maWx0ZXJWYWx1ZUNoYW5nZT1uZXcgS3IsdGhpcy5vcGVuPSExLHRoaXMubGFiZWxWYWx1ZT0iIix0aGlzLnN1YnM9W119c2V0IGN1c3RvbVN0cmluZ0ZpbHRlcihhKXt0aGlzLnNldEZpbHRlcihhIGluc3Rh''@;'; put 'put ''bmNlb2YgdE8/YTpuZXcgQTcoYSkpLHRoaXMuaW5pdEZpbHRlclZhbHVlJiYodGhpcy52YWx1ZT10aGlzLmluaXRGaWx0ZXJWYWx1ZSxkZWxldGUgdGhpcy5pbml0RmlsdGVyVmFsdWUpfWdldCB2YWx1ZSgpe3JldHVybiB0aGlzLmZpbHRlci52YWx1ZX1zZXQgdmFsdWUoYSl7dGhpcy5maWx0''@;'; put 'put ''ZXImJiJzdHJpbmciPT10eXBlb2YgYT8oYXx8KGE9IiIpLGEhPT10aGlzLmZpbHRlci52YWx1ZSYmKHRoaXMuZmlsdGVyLnZhbHVlPWEsdGhpcy5maWx0ZXJWYWx1ZUNoYW5nZS5lbWl0KGEpKSk6dGhpcy5pbml0RmlsdGVyVmFsdWU9YX1nZXQgcGxhY2Vob2xkZXJWYWx1ZSgpe3JldHVybiB0''@;'; put 'put ''aGlzLnBsYWNlaG9sZGVyfHx0aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5maWx0ZXJJdGVtc31uZ0FmdGVyVmlld0luaXQoKXt0aGlzLnN1YnMucHVzaCh0aGlzLnNtYXJ0VG9nZ2xlU2VydmljZS5vcGVuQ2hhbmdlLnN1YnNjcmliZShhPT57dGhpcy5vcGVuPWEsdGhpcy5uZ1pvbmUucnVuT3V0''@;'; put 'put ''c2lkZUFuZ3VsYXIoKCk9PntyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9Pnt0aGlzLmRvbUFkYXB0ZXIuZm9jdXModGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50KX0pfSl9KSl9bmdPbkNoYW5nZXMoKXtzZXRUaW1lb3V0KCgpPT57dGhpcy5zZXRGaWx0ZXJMYWJlbCgpLHRoaXMuY2RyLm1hcmtG''@;'; put 'put ''b3JDaGVjaygpfSl9bmdPbkRlc3Ryb3koKXtzdXBlci5uZ09uRGVzdHJveSgpLHRoaXMuc3Vicy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9c2V0RmlsdGVyTGFiZWwoKXtpZih0aGlzLmxhYmVsKXJldHVybiB2b2lkKHRoaXMubGFiZWxWYWx1ZT10aGlzLmxhYmVsKTtjb25zdCBkPXRo''@;'; put 'put ''aXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Py5jbG9zZXN0KCJjbHItZGctY29sdW1uIik/LnF1ZXJ5U2VsZWN0b3IoIi5kYXRhZ3JpZC1jb2x1bW4tdGl0bGUiKTt0aGlzLmxhYmVsVmFsdWU9dGhpcy5jb21tb25TdHJpbmdzLnBhcnNlKHRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGFn''@;'; put 'put ''cmlkRmlsdGVyTGFiZWwse0NPTFVNTjpkPy50ZXh0Q29udGVudC50cmltKCl8fCIifSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKHVnKSxHZSh2bSksR2UoaXMpLEdlKHNjKSxHZShKaSksR2UoRXMpLEdlKFdhKSl9LGMuXHUwMjc1Y21wPVZy''@;'; put 'put ''KHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kZy1zdHJpbmctZmlsdGVyIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmKHFhKEJWZSw1KSxxYSgkeCw1KSksMiZhKXtsZXQgaDtDaShoPVNpKCkpJiYoZC5pbnB1dD1oLmZpcnN0KSxDaShoPVNpKCkpJiYoZC5maWx0ZXJDb250''@;'; put 'put ''YWluZXI9aC5maXJzdCl9fSxpbnB1dHM6e3BsYWNlaG9sZGVyOltObi5Ob25lLCJjbHJGaWx0ZXJQbGFjZWhvbGRlciIsInBsYWNlaG9sZGVyIl0sbGFiZWw6W05uLk5vbmUsImNsckZpbHRlckxhYmVsIiwibGFiZWwiXSxjdXN0b21TdHJpbmdGaWx0ZXI6W05uLk5vbmUsImNsckRnU3RyaW5n''@;'; put 'put ''RmlsdGVyIiwiY3VzdG9tU3RyaW5nRmlsdGVyIl0sdmFsdWU6W05uLk5vbmUsImNsckZpbHRlclZhbHVlIiwidmFsdWUiXX0sb3V0cHV0czp7ZmlsdGVyVmFsdWVDaGFuZ2U6ImNsckZpbHRlclZhbHVlQ2hhbmdlIn0sZmVhdHVyZXM6W2RhKFt7cHJvdmlkZTplTyx1c2VFeGlzdGluZzpjfV0p''@;'; put 'put ''LHdhLHdsXSxkZWNsczo2LHZhcnM6Nixjb25zdHM6W1siaW5wdXQiLCIiXSxbMywiY2xyRGdGaWx0ZXJPcGVuQ2hhbmdlIiwiY2xyRGdGaWx0ZXIiLCJjbHJEZ0ZpbHRlck9wZW4iXSxbInR5cGUiLCJ0ZXh0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwibmFtZSIsInNlYXJjaCIsImNscklucHV0''@;'; put 'put ''IiwiIiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCIsInBsYWNlaG9sZGVyIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7aWYoMSZhKXtjb25zdCBoPUxuKCk7ZGUoMCwiY2xyLWRnLWZpbHRlciIsMSksZ2koImNsckRnRmlsdGVyT3BlbkNoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIHd0''@;'; put 'put ''KGgpLG1pKGQub3Blbix2KXx8KGQub3Blbj12KSxDdCh2KX0pLGRlKDEsImNsci1pbnB1dC1jb250YWluZXIiKSgyLCJsYWJlbCIpLExlKDMpLGhlKCksZGUoNCwiaW5wdXQiLDIsMCksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKHYpe3JldHVybiB3dChoKSxtaShkLnZhbHVlLHYpfHwo''@;'; put 'put ''ZC52YWx1ZT12KSxDdCh2KX0pLGhlKCkoKSgpfTImYSYmKE1lKCJjbHJEZ0ZpbHRlciIsZC5yZWdpc3RlcmVkKSxwaSgiY2xyRGdGaWx0ZXJPcGVuIixkLm9wZW4pLGZlKDMpLHdyKGQubGFiZWxWYWx1ZSksZmUoKSxwaSgibmdNb2RlbCIsZC52YWx1ZSksTWUoInBsYWNlaG9sZGVyIixkLnBs''@;'; put 'put ''YWNlaG9sZGVyVmFsdWUpLGhyKCJhcmlhLWxhYmVsIixkLnBsYWNlaG9sZGVyVmFsdWUpKX0sZGVwZW5kZW5jaWVzOltkcyxaMSxHTCxxbCxubCwkcywkeF0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCkseG09KCgpPT57Y2xhc3MgYyBleHRlbmRzIFJ5e31yZXR1cm4gYy5cdTAyNzVmYWM9KCgp''@;'; put 'put ''PT57bGV0IGw7cmV0dXJuIGZ1bmN0aW9uKGQpe3JldHVybihsfHwobD1XcyhjKSkpKGR8fGMpfX0pKCksYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRhdGFncmlkIl1dLGZlYXR1cmVzOlt3YV19KSxjfSkoKSxLeT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7''@;'; put 'put ''dGhpcy5hY3Rpb25hYmxlQ291bnQ9MH1nZXQgaGFzQWN0aW9uYWJsZVJvdygpe3JldHVybiB0aGlzLmFjdGlvbmFibGVDb3VudD4wfXJlZ2lzdGVyKCl7dGhpcy5hY3Rpb25hYmxlQ291bnQrK311bnJlZ2lzdGVyKCl7dGhpcy5hY3Rpb25hYmxlQ291bnQtLX19cmV0dXJuIGMuXHUwMjc1ZmFj''@;'; put 'put ''PWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksazc9KCgpPT57Y2xhc3MgYyBleHRlbmRzIEx5e2NvbnN0cnVjdG9yKGEsZCxoKXtpZighZCl0aHJvdyBuZXcgRXJyb3IoImNsci1kZy1yb3cg''@;'; put 'put ''c2hvdWxkIG9ubHkgYmUgdXNlZCBpbnNpZGUgb2YgYSBjbHItZGF0YWdyaWQiKTtzdXBlcihhLGQpLHRoaXMucm93QWN0aW9ucz1ofWdldCBmbGF2b3IoKXtyZXR1cm4gdGhpcy5yb3dBY3Rpb25zLmhhc0FjdGlvbmFibGVSb3d9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1''@;'; put 'put ''cm4gbmV3KGF8fGMpKEdlKEVzKSxHZSh4bSw4KSxHZShLeSkpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGF0YWdyaWQiXSxbImNsci1kZy1yb3ciXV0sZmVhdHVyZXM6W3dhXX0pLGN9KSgpLEFkZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMu''@;'; put 'put ''cGxhdGZvcm1JZD1hLHRoaXMubW9kYWxTdGFjaz1bXSx0aGlzLmtleVVwRXZlbnRMaXN0ZW5lcj10aGlzLm9uS2V5VXAuYmluZCh0aGlzKX10cmFja01vZGFsT3BlbihhKXshMT09PXRoaXMubW9kYWxTdGFjay5pbmNsdWRlcyhhKSYmdGhpcy5tb2RhbFN0YWNrLnVuc2hpZnQoYSksdGwodGhp''@;'; put 'put ''cy5wbGF0Zm9ybUlkKSYmZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCJrZXl1cCIsdGhpcy5rZXlVcEV2ZW50TGlzdGVuZXIpfXRyYWNrTW9kYWxDbG9zZShhKXtjb25zdCBkPXRoaXMubW9kYWxTdGFjay5pbmRleE9mKGEpO2Q+LTEmJnRoaXMubW9kYWxTdGFjay5zcGxpY2UoZCwx''@;'; put 'put ''KSwwPT09dGhpcy5tb2RhbFN0YWNrLmxlbmd0aCYmdGwodGhpcy5wbGF0Zm9ybUlkKSYmZG9jdW1lbnQuYm9keS5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXl1cCIsdGhpcy5rZXlVcEV2ZW50TGlzdGVuZXIpfW9uS2V5VXAoYSl7dGhpcy5tb2RhbFN0YWNrLmxlbmd0aCYmSTIoYS5rZXkpPT09''@;'; put 'put ''Z2EuRXNjYXBlJiYoZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5ibHVyKCksdGhpcy5tb2RhbFN0YWNrWzBdLmNsb3NlKCkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh4cihpbykpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1''@;'; put 'put ''MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLGN9KSgpLFhmPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5tb2RhbFN0YWNrU2VydmljZT1hLHRoaXMucHJldmVudFNjcm9sbD0hMSx0aGlzLnRvZ2dsZVN0YXRlPSExLHRoaXMuX2VuYWJsZWQ9ITEsdGhpcy5fc3RhdGU9bmV3''@;'; put 'put ''IGVpKHRoaXMudG9nZ2xlU3RhdGUpfWdldCBlbmFibGVkKCl7cmV0dXJuIHRoaXMuX2VuYWJsZWR9c2V0IGVuYWJsZWQoYSl7dGhpcy5fZW5hYmxlZD1hfWdldCBwcmV2ZW50Rm9jdXNTY3JvbGwoKXtyZXR1cm4gdGhpcy5wcmV2ZW50U2Nyb2xsfXNldCBwcmV2ZW50Rm9jdXNTY3JvbGwoYSl7''@;'; put 'put ''dGhpcy5wcmV2ZW50U2Nyb2xsPWF9Z2V0IHN0YXRlKCl7cmV0dXJuIHRoaXMuY2FjaGV9Z2V0IHN0YXRlQ2hhbmdlKCl7cmV0dXJuIHRoaXMuX3N0YXRlLmFzT2JzZXJ2YWJsZSgpfWdldCBpc09wZW4oKXtyZXR1cm4hMD09PXRoaXMudG9nZ2xlU3RhdGV9b3BlbihhLGQpe3RoaXMuY2FjaGU9''@;'; put 'put ''YSx0aGlzLmJ1dHRvbj1kLHRoaXMudG9nZ2xlU3RhdGU9ITAsdGhpcy5fc3RhdGUubmV4dCh0aGlzLnRvZ2dsZVN0YXRlKSx0aGlzLm1vZGFsU3RhY2tTZXJ2aWNlLnRyYWNrTW9kYWxPcGVuKHRoaXMpfWNsb3NlKCl7dGhpcy50b2dnbGVTdGF0ZT0hMSx0aGlzLnJldHVybkZvY3VzKCksdGhp''@;'; put 'put ''cy5fc3RhdGUubmV4dCh0aGlzLnRvZ2dsZVN0YXRlKSx0aGlzLm1vZGFsU3RhY2tTZXJ2aWNlLnRyYWNrTW9kYWxDbG9zZSh0aGlzKX1yZXR1cm5Gb2N1cygpe3RoaXMuYnV0dG9uJiYodGhpcy5idXR0b24uZm9jdXMoe3ByZXZlbnRTY3JvbGw6dGhpcy5wcmV2ZW50Rm9jdXNTY3JvbGx9KSx0''@;'; put 'put ''aGlzLmJ1dHRvbj1udWxsKX10b2dnbGUoYSxkKXt0aGlzLmlzUm93T3BlbihhKXx8IWE/dGhpcy5jbG9zZSgpOnRoaXMub3BlbihhLGQpfWlzUm93T3BlbihhKXtyZXR1cm4hKCF0aGlzLnRvZ2dsZVN0YXRlfHx0aGlzLmNhY2hlIT09YSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihh''@;'; put 'put ''KXtyZXR1cm4gbmV3KGF8fGMpKHhyKEFkZSkpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLHF5PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5kZXRhaWxTZXJ2aWNlPWEsdGhpcy5leHBhbmRhYmxlQ291bnQ9MH1nZXQgaGFz''@;'; put 'put ''RXhwYW5kYWJsZVJvdygpe3JldHVybiF0aGlzLmRldGFpbFNlcnZpY2UuZW5hYmxlZCYmdGhpcy5leHBhbmRhYmxlQ291bnQ+MH1yZWdpc3Rlcigpe3RoaXMuZXhwYW5kYWJsZUNvdW50Kyt9dW5yZWdpc3Rlcigpe3RoaXMuZXhwYW5kYWJsZUNvdW50LS19fXJldHVybiBjLlx1MDI3NWZhYz1m''@;'; put 'put ''dW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHhyKFhmKSl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksRDc9KCgpPT57Y2xhc3MgYyBleHRlbmRzIEx5e2NvbnN0cnVjdG9yKGEsZCxoKXtpZighZCl0aHJvdyBuZXcgRXJyb3IoImNsci1k''@;'; put 'put ''Zy1yb3cgc2hvdWxkIG9ubHkgYmUgdXNlZCBpbnNpZGUgb2YgYSBjbHItZGF0YWdyaWQiKTtzdXBlcihhLGQpLHRoaXMuZXhwYW5kYWJsZUNvdW50PWh9Z2V0IGZsYXZvcigpe3JldHVybiB0aGlzLmV4cGFuZGFibGVDb3VudC5oYXNFeHBhbmRhYmxlUm93fX1yZXR1cm4gYy5cdTAyNzVmYWM9''@;'; put 'put ''ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShFcyksR2UoeG0sOCksR2UocXkpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRhdGFncmlkIl0sWyJjbHItZGctcm93Il1dLGZlYXR1cmVzOlt3YV19KSxjfSkoKTtjbGFzcyBvT3tjb25zdHJ1Y3Rvcihs''@;'; put 'put ''KXt0aGlzLnByb3A9bCx0aGlzLm5lc3RlZFByb3A9bmV3IHVHKGwpfWNvbXBhcmUobCxhKXtsZXQgZD10aGlzLm5lc3RlZFByb3AuZ2V0UHJvcFZhbHVlKGwpLGg9dGhpcy5uZXN0ZWRQcm9wLmdldFByb3BWYWx1ZShhKTtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGQmJihkPWQudG9Mb3dlckNh''@;'; put 'put ''c2UoKSksInN0cmluZyI9PXR5cGVvZiBoJiYoaD1oLnRvTG93ZXJDYXNlKCkpLHR5cGVvZiBkPiJ1Inx8bnVsbD09PWQ/dHlwZW9mIGg+InUifHxudWxsPT09aD8wOjE6dHlwZW9mIGg+InUifHxudWxsPT09aHx8ZDxoPy0xOmQ+aD8xOjB9fXZhciB4aD1mdW5jdGlvbihjKXtyZXR1cm4gY1tj''@;'; put 'put ''LlVOU09SVEVEPTBdPSJVTlNPUlRFRCIsY1tjLkFTQz0xXT0iQVNDIixjW2MuREVTQz0tMV09IkRFU0MiLGN9KHhofHx7fSk7Y29uc3QgWHk9ImRhdGFncmlkLWZpeGVkLXdpZHRoIixLeD0iZGF0YWdyaWQtaGlkZGVuLWNvbHVtbiI7bGV0IGhHPSgoKT0+e2NsYXNzIGN7bmdBZnRlclZpZXdJ''@;'; put 'put ''bml0KCl7dGhpcy5jb2x1bW5WaWV3PXRoaXMudGVtcGxhdGVSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KG51bGwpfW5nT25EZXN0cm95KCl7dGhpcy5jb2x1bW5WaWV3LmRlc3Ryb3koKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1Y21w''@;'; put 'put ''PVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImRnLXdyYXBwZWQtY29sdW1uIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmcWEoalZlLDUpLDImYSl7bGV0IGg7Q2koaD1TaSgpKSYmKGQudGVtcGxhdGVSZWY9aC5maXJzdCl9fSxuZ0NvbnRlbnRTZWxlY3RvcnM6eW8sZGVjbHM6''@;'; put 'put ''Mix2YXJzOjAsY29uc3RzOltbImNvbHVtblBvcnRhbCIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKCksZ3QoMCx6VmUsMSwwLCJuZy10ZW1wbGF0ZSIsbnVsbCwwLEljKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLHNPPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3Io''@;'; put 'put ''YSl7dGhpcy5zdGF0ZURlYm91bmNlcj1hLHRoaXMuX3JldmVyc2U9ITEsdGhpcy5fY2hhbmdlPW5ldyBXbn1nZXQgY29tcGFyYXRvcigpe3JldHVybiB0aGlzLl9jb21wYXJhdG9yfXNldCBjb21wYXJhdG9yKGEpe3RoaXMuc3RhdGVEZWJvdW5jZXIuY2hhbmdlU3RhcnQoKSx0aGlzLl9jb21w''@;'; put 'put ''YXJhdG9yPWEsdGhpcy5lbWl0Q2hhbmdlKCksdGhpcy5zdGF0ZURlYm91bmNlci5jaGFuZ2VEb25lKCl9Z2V0IHJldmVyc2UoKXtyZXR1cm4gdGhpcy5fcmV2ZXJzZX1zZXQgcmV2ZXJzZShhKXt0aGlzLnN0YXRlRGVib3VuY2VyLmNoYW5nZVN0YXJ0KCksdGhpcy5fcmV2ZXJzZT1hLHRoaXMu''@;'; put 'put ''ZW1pdENoYW5nZSgpLHRoaXMuc3RhdGVEZWJvdW5jZXIuY2hhbmdlRG9uZSgpfWdldCBjaGFuZ2UoKXtyZXR1cm4gdGhpcy5fY2hhbmdlLmFzT2JzZXJ2YWJsZSgpfXRvZ2dsZShhLGQpe3RoaXMuc3RhdGVEZWJvdW5jZXIuY2hhbmdlU3RhcnQoKSx0aGlzLmNvbXBhcmF0b3I9PT1hP3RoaXMu''@;'; put 'put ''X3JldmVyc2U9dHlwZW9mIGQ8InUiJiZkfHwhdGhpcy5fcmV2ZXJzZToodGhpcy5fY29tcGFyYXRvcj1hLHRoaXMuX3JldmVyc2U9dHlwZW9mIGQ8InUiJiZkKSx0aGlzLmVtaXRDaGFuZ2UoKSx0aGlzLnN0YXRlRGVib3VuY2VyLmNoYW5nZURvbmUoKX1jbGVhcigpe3RoaXMuY29tcGFyYXRv''@;'; put 'put ''cj1udWxsfWNvbXBhcmUoYSxkKXtyZXR1cm4odGhpcy5yZXZlcnNlPy0xOjEpKnRoaXMuY29tcGFyYXRvci5jb21wYXJlKGEsZCl9ZW1pdENoYW5nZSgpe3RoaXMuX2NoYW5nZS5uZXh0KHRoaXMpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh4cihH''@;'; put 'put ''eCkpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpO3ZhciBKZj1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLkFMSUdOX0NPTFVNTlM9MF09IkFMSUdOX0NPTFVNTlMiLGNbYy5DQUxDVUxBVEVfTU9ERV9PTj0xXT0iQ0FMQ1VMQVRFX01PREVfT04i''@;'; put 'put ''LGNbYy5DQUxDVUxBVEVfTU9ERV9PRkY9Ml09IkNBTENVTEFURV9NT0RFX09GRiIsY1tjLkNMRUFSX1dJRFRIUz0zXT0iQ0xFQVJfV0lEVEhTIixjW2MuQ09NUFVURV9DT0xVTU5fV0lEVEhTPTRdPSJDT01QVVRFX0NPTFVNTl9XSURUSFMiLGN9KEpmfHx7fSk7bGV0IEk3PSgoKT0+e2NsYXNz''@;'; put 'put ''IGN7Y29uc3RydWN0b3IoKXt0aGlzLl9yZW5kZXJTdGVwPW5ldyBXbix0aGlzLmFscmVhZHlTaXplZD0hMX1nZXQgcmVuZGVyU3RlcCgpe3JldHVybiB0aGlzLl9yZW5kZXJTdGVwLmFzT2JzZXJ2YWJsZSgpfWZpbHRlclJlbmRlclN0ZXBzKGEpe3JldHVybiB0aGlzLnJlbmRlclN0ZXAucGlw''@;'; put 'put ''ZSgkbChkPT5hPT09ZCkpfXJlc2l6ZSgpe3RoaXMuX3JlbmRlclN0ZXAubmV4dChKZi5DQUxDVUxBVEVfTU9ERV9PTiksdGhpcy5hbHJlYWR5U2l6ZWQmJnRoaXMuX3JlbmRlclN0ZXAubmV4dChKZi5DTEVBUl9XSURUSFMpLHRoaXMuX3JlbmRlclN0ZXAubmV4dChKZi5DT01QVVRFX0NPTFVN''@;'; put 'put ''Tl9XSURUSFMpLHRoaXMuX3JlbmRlclN0ZXAubmV4dChKZi5BTElHTl9DT0xVTU5TKSx0aGlzLmFscmVhZHlTaXplZD0hMCx0aGlzLl9yZW5kZXJTdGVwLm5leHQoSmYuQ0FMQ1VMQVRFX01PREVfT0ZGKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9''@;'; put 'put ''LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksZkc9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5lbD1hLHRoaXMuZG9tQWRhcHRlcj1kLHRoaXMub3JnYW5pemVyPWgsdGhpcy5fcmVzaXplZEJ5PTB9Z2V0IHJlc2l6ZWRC''@;'; put 'put ''eSgpe3JldHVybiB0aGlzLl9yZXNpemVkQnl9Z2V0IG1pbkNvbHVtbldpZHRoKCl7cmV0dXJuIHRoaXMuZG9tQWRhcHRlci5taW5XaWR0aCh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQpfHw5Nn1nZXQgbWF4UmVzaXplUmFuZ2UoKXtyZXR1cm4gdGhpcy53aWR0aEJlZm9yZVJlc2l6ZS10aGlzLm1p''@;'; put 'put ''bkNvbHVtbldpZHRofWdldCB3aWR0aEFmdGVyUmVzaXplKCl7cmV0dXJuIHRoaXMud2lkdGhCZWZvcmVSZXNpemUrdGhpcy5fcmVzaXplZEJ5fXN0YXJ0UmVzaXplKCl7dGhpcy5fcmVzaXplZEJ5PTAsdGhpcy5pc1dpdGhpbk1heFJlc2l6ZVJhbmdlPSEwLHRoaXMud2lkdGhCZWZvcmVSZXNp''@;'; put 'put ''emU9dGhpcy5kb21BZGFwdGVyLmNsaWVudFJlY3QodGhpcy5lbC5uYXRpdmVFbGVtZW50KS53aWR0aH1lbmRSZXNpemUoKXt0aGlzLm9yZ2FuaXplci5yZXNpemUoKX1jYWxjdWxhdGVSZXNpemUoYSl7YTwtdGhpcy5tYXhSZXNpemVSYW5nZT8odGhpcy5fcmVzaXplZEJ5PS10aGlzLm1heFJl''@;'; put 'put ''c2l6ZVJhbmdlLHRoaXMuaXNXaXRoaW5NYXhSZXNpemVSYW5nZT0hMSk6KHRoaXMuX3Jlc2l6ZWRCeT1hLHRoaXMuaXNXaXRoaW5NYXhSZXNpemVSYW5nZT0hMCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHhyKEppKSx4cih2bSkseHIoSTcpKX0s''@;'; put 'put ''Yy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxwRz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMucGxhdGZvcm1JZD1hfWdldCB0YWJsZVJlZigpe3JldHVybiB0aGlzLl90YWJsZVJlZn1zZXQgdGFibGVSZWYoYSl7dGhpcy5fdGFi''@;'; put 'put ''bGVSZWY9YX1zZXQgdGFibGUoYSl7dGwodGhpcy5wbGF0Zm9ybUlkKSYmYS5uYXRpdmVFbGVtZW50JiYodGhpcy50YWJsZVJlZj1hLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcigiLmRhdGFncmlkLXRhYmxlIikpfWdldENvbHVtbkRyYWdIZWlnaHQoKXtyZXR1cm4gdGhpcy50YWJsZVJl''@;'; put 'put ''Zj9gJHt0aGlzLnRhYmxlUmVmLmNsaWVudEhlaWdodH1weGA6bnVsbH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoeHIoaW8pKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxEZGU9KCgpPT57Y2xh''@;'; put 'put ''c3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSl7dGhpcy5jb2x1bW5SZXNpemVyU2VydmljZT1hLHRoaXMucmVuZGVyZXI9ZCx0aGlzLm5nWm9uZT1oLHRoaXMudGFibGVTaXplU2VydmljZT1mLHRoaXMuY29tbW9uU3RyaW5nPXYsdGhpcy5kb2N1bWVudD1NLHRoaXMuY29sdW1uU2VwYXJh''@;'; put 'put ''dG9ySWQ9TXUoKSx0aGlzLnJlc2l6ZVN0YXJ0ZWRPbktleURvd249ITEsdGhpcy51bmxpc3RlbmVycz1bXX1nZXQgZGVzY3JpcHRpb25JZCgpe3JldHVybmAke3RoaXMuY29sdW1uU2VwYXJhdG9ySWR9LWFyaWEtZGVzY3JpYmVkYnlgfWdldCByZXNpemVUcmFja2VyRWwoKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5yZXNpemVUcmFja2VyUmVmLm5hdGl2ZUVsZW1lbnR9Z2V0IGNvbHVtbkhhbmRsZUVsKCl7cmV0dXJuIHRoaXMuY29sdW1uSGFuZGxlUmVmLm5hdGl2ZUVsZW1lbnR9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLnVubGlzdGVuZXJz''@;'; put 'put ''LnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4odGhpcy5jb2x1bW5IYW5kbGVFbCwia2V5ZG93biIsYT0+e3RoaXMuc2hvd1RyYWNrZXJPbkZpcnN0S2V5RG93bihhKSx0aGlzLm1vdmVUcmFja2VyT25LZXlEb3duKGEpfSkpLHRoaXMudW5saXN0ZW5lcnMucHVzaCh0aGlzLnJlbmRlcmVyLmxp''@;'; put 'put ''c3Rlbih0aGlzLmNvbHVtbkhhbmRsZUVsLCJrZXl1cCIsYT0+e3RoaXMuaGlkZVRyYWNrZXJPbktleVVwKGEpfSkpfSl9bmdPbkRlc3Ryb3koKXt0aGlzLnVubGlzdGVuZXJzLmZvckVhY2goYT0+YSgpKX1zaG93VHJhY2tlcigpe3RoaXMuY29sdW1uUmVzaXplclNlcnZpY2Uuc3RhcnRSZXNp''@;'; put 'put ''emUoKTtjb25zdCBhPXRoaXMudGFibGVTaXplU2VydmljZS5nZXRDb2x1bW5EcmFnSGVpZ2h0KCk7dGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnJlc2l6ZVRyYWNrZXJFbCwiaGVpZ2h0IixhKSx0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMucmVzaXplVHJhY2tlckVsLCJkaXNwbGF5''@;'; put 'put ''IiwiYmxvY2siKX1tb3ZlVHJhY2tlcihhKXt0aGlzLmNvbHVtblJlc2l6ZXJTZXJ2aWNlLmNhbGN1bGF0ZVJlc2l6ZShhKSx0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMucmVzaXplVHJhY2tlckVsLCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGVYKCR7dGhpcy5jb2x1bW5SZXNpemVyU2Vydmlj''@;'; put 'put ''ZS5yZXNpemVkQnl9cHgpYCksdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmRvY3VtZW50LmJvZHksImN1cnNvciIsImNvbC1yZXNpemUiKSx0aGlzLnJlZEZsYWdUcmFja2VyKCl9aGlkZVRyYWNrZXIoKXt0aGlzLmNvbHVtblJlc2l6ZXJTZXJ2aWNlLmVuZFJlc2l6ZSgpLHRoaXMucmVu''@;'; put 'put ''ZGVyZXIuc2V0U3R5bGUodGhpcy5yZXNpemVUcmFja2VyRWwsImRpc3BsYXkiLCJub25lIiksdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnJlc2l6ZVRyYWNrZXJFbCwidHJhbnNmb3JtIiwidHJhbnNsYXRlWCgwcHgpIiksdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmNvbHVtbkhh''@;'; put 'put ''bmRsZUVsLCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGVYKDBweCkiKSx0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZG9jdW1lbnQuYm9keSwiY3Vyc29yIiwiYXV0byIpfXNob3dUcmFja2VyT25GaXJzdEtleURvd24oYSl7IXRoaXMucmVzaXplU3RhcnRlZE9uS2V5RG93biYmKHRoaXMuaXNB''@;'; put 'put ''cnJvd0xlZnRLZXlFdmVudChhKXx8dGhpcy5pc0Fycm93UmlnaHRLZXlFdmVudChhKSkmJih0aGlzLnJlc2l6ZVN0YXJ0ZWRPbktleURvd249ITAsdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLnJlc2l6ZVRyYWNrZXJFbCwib24tYXJyb3cta2V5LXJlc2l6ZSIpLHRoaXMuc2hvd1RyYWNr''@;'; put 'put ''ZXIoKSl9bW92ZVRyYWNrZXJPbktleURvd24oYSl7dGhpcy5pc0Fycm93TGVmdEtleUV2ZW50KGEpPyhhLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMubW92ZVRyYWNrZXIodGhpcy5jb2x1bW5SZXNpemVyU2VydmljZS5yZXNpemVkQnktMTIpKTp0aGlzLmlzQXJyb3dSaWdodEtleUV2ZW50KGEp''@;'; put 'put ''JiYoYS5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLm1vdmVUcmFja2VyKHRoaXMuY29sdW1uUmVzaXplclNlcnZpY2UucmVzaXplZEJ5KzEyKSl9aGlkZVRyYWNrZXJPbktleVVwKGEpe3RoaXMucmVzaXplU3RhcnRlZE9uS2V5RG93biYmKHRoaXMuaXNBcnJvd0xlZnRLZXlFdmVudChhKXx8dGhp''@;'; put 'put ''cy5pc0Fycm93UmlnaHRLZXlFdmVudChhKSkmJih0aGlzLnJlc2l6ZVN0YXJ0ZWRPbktleURvd249ITEsdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLnJlc2l6ZVRyYWNrZXJFbCwib24tYXJyb3cta2V5LXJlc2l6ZSIpLHRoaXMuaGlkZVRyYWNrZXIoKSx0aGlzLmNvbHVtbkhhbmRs''@;'; put 'put ''ZUVsLmZvY3VzKCkpfXJlZEZsYWdUcmFja2VyKCl7dGhpcy5pc1dpdGhpbk1heFJlc2l6ZVJhbmdlIT09dGhpcy5jb2x1bW5SZXNpemVyU2VydmljZS5pc1dpdGhpbk1heFJlc2l6ZVJhbmdlJiYodGhpcy5pc1dpdGhpbk1heFJlc2l6ZVJhbmdlPXRoaXMuY29sdW1uUmVzaXplclNlcnZpY2Uu''@;'; put 'put ''aXNXaXRoaW5NYXhSZXNpemVSYW5nZSx0aGlzLmlzV2l0aGluTWF4UmVzaXplUmFuZ2U/dGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLnJlc2l6ZVRyYWNrZXJFbCwiZXhjZWVkZWQtbWF4Iik6dGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLnJlc2l6ZVRyYWNrZXJFbCwiZXhjZWVk''@;'; put 'put ''ZWQtbWF4IikpfWlzQXJyb3dMZWZ0S2V5RXZlbnQoYSl7cmV0dXJuIEkyKGEua2V5KT09PWdhLkFycm93TGVmdH1pc0Fycm93UmlnaHRLZXlFdmVudChhKXtyZXR1cm4gSTIoYS5rZXkpPT09Z2EuQXJyb3dSaWdodH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXco''@;'; put 'put ''YXx8YykoR2UoZkcpLEdlKEVvKSxHZShXYSksR2UocEcpLEdlKGlzKSxHZSh2cykpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGctY29sdW1uLXNlcGFyYXRvciJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oYSxkKXtpZigxJmEmJihxYShVVmUsNSkscWEoWlZlLDUp''@;'; put 'put ''KSwyJmEpe2xldCBoO0NpKGg9U2koKSkmJihkLnJlc2l6ZVRyYWNrZXJSZWY9aC5maXJzdCksQ2koaD1TaSgpKSYmKGQuY29sdW1uSGFuZGxlUmVmPWguZmlyc3QpfX0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJlRyKCJkYXRhZ3JpZC1jb2x1bW4tc2VwYXJh''@;'; put 'put ''dG9yIiwhMCl9LGRlY2xzOjYsdmFyczo0LGNvbnN0czpbWyJjb2x1bW5IYW5kbGUiLCIiXSxbInJlc2l6ZVRyYWNrZXIiLCIiXSxbInR5cGUiLCJidXR0b24iLCJjZGtEcmFnIiwiIiwiY2RrRHJhZ0xvY2tBeGlzIiwieCIsMSwiZGF0YWdyaWQtY29sdW1uLWhhbmRsZSIsMywiY2RrRHJhZ1N0''@;'; put 'put ''YXJ0ZWQiLCJjZGtEcmFnTW92ZWQiLCJjZGtEcmFnRW5kZWQiXSxbMSwiY2xyLXNyLW9ubHkiXSxbMSwiZGF0YWdyaWQtY29sdW1uLXJlc2l6ZS10cmFja2VyIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7aWYoMSZhKXtjb25zdCBoPUxuKCk7ZGUoMCwiYnV0dG9uIiwyLDApLEZ0KCJjZGtE''@;'; put 'put ''cmFnU3RhcnRlZCIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoaCksQ3QoZC5zaG93VHJhY2tlcigpKX0pKCJjZGtEcmFnTW92ZWQiLGZ1bmN0aW9uKHYpe3JldHVybiB3dChoKSxDdChkLm1vdmVUcmFja2VyKHYuZGlzdGFuY2UueCkpfSkoImNka0RyYWdFbmRlZCIsZnVuY3Rpb24odil7cmV0dXJu''@;'; put 'put ''IHd0KGgpLGQuaGlkZVRyYWNrZXIoKSxDdCh2LnNvdXJjZS5fZHJhZ1JlZi5yZXNldCgpKX0pLGhlKCksZGUoMiwic3BhbiIsMyksTGUoMyksaGUoKSxHdCg0LCJkaXYiLDQsMSl9MiZhJiYoaHIoImFyaWEtbGFiZWwiLGQuY29tbW9uU3RyaW5nLmtleXMuY29sdW1uU2VwYXJhdG9yQXJpYUxh''@;'; put 'put ''YmVsKSgiYXJpYS1kZXNjcmliZWRieSIsZC5kZXNjcmlwdGlvbklkKSxmZSgyKSxocigiaWQiLGQuZGVzY3JpcHRpb25JZCksZmUoKSxJcigiICIsZC5jb21tb25TdHJpbmcua2V5cy5jb2x1bW5TZXBhcmF0b3JEZXNjcmlwdGlvbiwiICIpKX0sZGVwZW5kZW5jaWVzOltJWmVdLGVuY2Fwc3Vs''@;'; put 'put ''YXRpb246Mn0pLGN9KSgpLFI3PSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBuT3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSl7c3VwZXIoaCksdGhpcy5lbD1hLHRoaXMuX3NvcnQ9ZCx0aGlzLnZjcj1mLHRoaXMuZGV0YWlsU2VydmljZT12LHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWY9TSx0aGlzLnNv''@;'; put 'put ''cnRPcmRlckNoYW5nZT1uZXcgS3IsdGhpcy5maWx0ZXJWYWx1ZUNoYW5nZT1uZXcgS3IsdGhpcy5jdXN0b21GaWx0ZXI9ITEsdGhpcy5fY29sVHlwZT0ic3RyaW5nIix0aGlzLl9zb3J0T3JkZXI9eGguVU5TT1JURUQsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMuX3Nob3dTZXBhcmF0b3I9''@;'; put 'put ''ITAsdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5saXN0ZW5Gb3JTb3J0aW5nQ2hhbmdlcygpKSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLmxpc3RlbkZvckRldGFpbFBhbmVDaGFuZ2VzKCkpfWdldCBpc0hpZGRlbigpe3JldHVybiB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuY2xh''@;'; put 'put ''c3NMaXN0LmNvbnRhaW5zKEt4KX1nZXQgc2hvd1NlcGFyYXRvcigpe3JldHVybiB0aGlzLl9zaG93U2VwYXJhdG9yfXNldCBzaG93U2VwYXJhdG9yKGEpe3RoaXMuX3Nob3dTZXBhcmF0b3I9YSx0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfWdldCBjb2xUeXBlKCl7cmV0''@;'; put 'put ''dXJuIHRoaXMuX2NvbFR5cGV9c2V0IGNvbFR5cGUoYSl7dGhpcy5fY29sVHlwZT1hfWdldCBmaWVsZCgpe3JldHVybiB0aGlzLl9maWVsZH1zZXQgZmllbGQoYSl7InN0cmluZyI9PXR5cGVvZiBhJiYodGhpcy5fZmllbGQ9YSx0aGlzLl9zb3J0Qnl8fCh0aGlzLl9zb3J0Qnk9bmV3IG9PKGEp''@;'; put 'put ''KSl9Z2V0IHNvcnRCeSgpe3JldHVybiB0aGlzLl9zb3J0Qnl9c2V0IHNvcnRCeShhKXsic3RyaW5nIj09dHlwZW9mIGE/dGhpcy5fc29ydEJ5PW5ldyBvTyhhKTphP3RoaXMuX3NvcnRCeT1hOnRoaXMuZmllbGQ/dGhpcy5fc29ydEJ5PW5ldyBvTyh0aGlzLmZpZWxkKTpkZWxldGUgdGhpcy5f''@;'; put 'put ''c29ydEJ5fWdldCBzb3J0T3JkZXIoKXtyZXR1cm4gdGhpcy5fc29ydE9yZGVyfXNldCBzb3J0T3JkZXIoYSl7aWYoISh0eXBlb2YgYT4idSIpJiZ0aGlzLl9zb3J0T3JkZXIhPT1hKXN3aXRjaChhKXtjYXNlIHhoLkFTQzp0aGlzLnNvcnQoITEpO2JyZWFrO2Nhc2UgeGguREVTQzp0aGlzLnNv''@;'; put 'put ''cnQoITApO2JyZWFrO2RlZmF1bHQ6dGhpcy5fc29ydC5jbGVhcigpfX1zZXQgdXBkYXRlRmlsdGVyVmFsdWUoYSl7dGhpcy5maWx0ZXI/dGhpcy5maWx0ZXIgaW5zdGFuY2VvZiBBNz8oKCFhfHwic3RyaW5nIiE9dHlwZW9mIGEpJiYoYT0iIiksYSE9PXRoaXMuZmlsdGVyLnZhbHVlJiYodGhp''@;'; put 'put ''cy5maWx0ZXIudmFsdWU9YSkpOnRoaXMuZmlsdGVyIGluc3RhbmNlb2YgVDcmJigoIWF8fCEoYSBpbnN0YW5jZW9mIEFycmF5KSkmJihhPVtudWxsLG51bGxdKSwyPT09YS5sZW5ndGgmJihhWzBdIT09dGhpcy5maWx0ZXIudmFsdWVbMF18fGFbMV0hPT10aGlzLmZpbHRlci52YWx1ZVsxXSkm''@;'; put 'put ''Jih0aGlzLmZpbHRlci52YWx1ZT1hKSk6dGhpcy5pbml0RmlsdGVyVmFsdWU9YX1zZXQgcHJvamVjdGVkRmlsdGVyKGEpe2EmJih0aGlzLmRlbGV0ZUZpbHRlcigpLHRoaXMuY3VzdG9tRmlsdGVyPSEwKX1nZXQgc29ydGFibGUoKXtyZXR1cm4hIXRoaXMuX3NvcnRCeX1nZXQgYXJpYVNvcnQo''@;'; put 'put ''KXtzd2l0Y2godGhpcy5fc29ydE9yZGVyKXtjYXNlIHhoLkFTQzpyZXR1cm4iYXNjZW5kaW5nIjtjYXNlIHhoLkRFU0M6cmV0dXJuImRlc2NlbmRpbmciO2RlZmF1bHQ6cmV0dXJuIm5vbmUifX1nZXQgc29ydERpcmVjdGlvbigpe3JldHVybiB0aGlzLl9zb3J0RGlyZWN0aW9ufWdldCBmaWx0''@;'; put 'put ''ZXJWYWx1ZSgpe3JldHVybiB0aGlzLmZpbHRlciBpbnN0YW5jZW9mIEE3fHx0aGlzLmZpbHRlciBpbnN0YW5jZW9mIFQ3P3RoaXMuZmlsdGVyLnZhbHVlOm51bGx9c2V0IGZpbHRlclZhbHVlKGEpeyh0aGlzLmZpbHRlciBpbnN0YW5jZW9mIEE3fHx0aGlzLmZpbHRlciBpbnN0YW5jZW9mIFQ3''@;'; put 'put ''KSYmKHRoaXMudXBkYXRlRmlsdGVyVmFsdWU9YSx0aGlzLmZpbHRlclZhbHVlQ2hhbmdlLmVtaXQodGhpcy5maWx0ZXIudmFsdWUpKX1nZXQgX3ZpZXcoKXtyZXR1cm4gdGhpcy53cmFwcGVkSW5qZWN0b3IuZ2V0KGhHLHRoaXMudmNyKS5jb2x1bW5WaWV3fW5nT25Jbml0KCl7dGhpcy53cmFw''@;'; put 'put ''cGVkSW5qZWN0b3I9bmV3IFlMKGhHLHRoaXMudmNyKX1uZ09uQ2hhbmdlcyhhKXthLmNvbFR5cGUmJmEuY29sVHlwZS5jdXJyZW50VmFsdWUmJmEuY29sVHlwZS5jdXJyZW50VmFsdWUhPT1hLmNvbFR5cGUucHJldmlvdXNWYWx1ZSYmIXRoaXMuY3VzdG9tRmlsdGVyJiYhdGhpcy5maWx0ZXIm''@;'; put 'put ''JnRoaXMuY29sVHlwZSYmdGhpcy5maWVsZCYmdGhpcy5zZXR1cERlZmF1bHRGaWx0ZXIodGhpcy5maWVsZCx0aGlzLmNvbFR5cGUpLGEuZmllbGQmJmEuZmllbGQuY3VycmVudFZhbHVlJiZhLmZpZWxkLmN1cnJlbnRWYWx1ZSE9PWEuZmllbGQucHJldmlvdXNWYWx1ZSYmIXRoaXMuY3VzdG9t''@;'; put 'put ''RmlsdGVyJiZ0aGlzLmNvbFR5cGUmJnRoaXMuc2V0dXBEZWZhdWx0RmlsdGVyKHRoaXMuZmllbGQsdGhpcy5jb2xUeXBlKX1uZ09uRGVzdHJveSgpe3N1cGVyLm5nT25EZXN0cm95KCksdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX1zb3J0KGEpe3RoaXMu''@;'; put 'put ''c29ydGFibGUmJih0aGlzLl9zb3J0LnRvZ2dsZSh0aGlzLl9zb3J0QnksYSksdGhpcy5fc29ydE9yZGVyPXRoaXMuX3NvcnQucmV2ZXJzZT94aC5ERVNDOnhoLkFTQyx0aGlzLl9zb3J0RGlyZWN0aW9uPXRoaXMuX3NvcnRPcmRlcj09PXhoLkRFU0M/ImRvd24iOiJ1cCIsdGhpcy5zb3J0T3Jk''@;'; put 'put ''ZXJDaGFuZ2UuZW1pdCh0aGlzLl9zb3J0T3JkZXIpKX1saXN0ZW5Gb3JEZXRhaWxQYW5lQ2hhbmdlcygpe3JldHVybiB0aGlzLmRldGFpbFNlcnZpY2Uuc3RhdGVDaGFuZ2Uuc3Vic2NyaWJlKGE9Pnt0aGlzLnNob3dTZXBhcmF0b3IhPT0hYSYmKHRoaXMuc2hvd1NlcGFyYXRvcj0hYSl9KX1s''@;'; put 'put ''aXN0ZW5Gb3JTb3J0aW5nQ2hhbmdlcygpe3JldHVybiB0aGlzLl9zb3J0LmNoYW5nZS5zdWJzY3JpYmUoYT0+e3RoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCksdGhpcy5zb3J0T3JkZXIhPT14aC5VTlNPUlRFRCYmYS5jb21wYXJhdG9yIT09dGhpcy5fc29ydEJ5JiYodGhp''@;'; put 'put ''cy5fc29ydE9yZGVyPXhoLlVOU09SVEVELHRoaXMuc29ydE9yZGVyQ2hhbmdlLmVtaXQodGhpcy5fc29ydE9yZGVyKSx0aGlzLl9zb3J0RGlyZWN0aW9uPW51bGwpfSl9c2V0dXBEZWZhdWx0RmlsdGVyKGEsZCl7Im51bWJlciI9PT1kP3RoaXMuc2V0RmlsdGVyKG5ldyBUNyhuZXcgaU8oYSkp''@;'; put 'put ''KToic3RyaW5nIj09PWQmJnRoaXMuc2V0RmlsdGVyKG5ldyBBNyhuZXcgYU8oYSkpKSx0aGlzLmZpbHRlciYmdGhpcy5pbml0RmlsdGVyVmFsdWUmJih0aGlzLnVwZGF0ZUZpbHRlclZhbHVlPXRoaXMuaW5pdEZpbHRlclZhbHVlLGRlbGV0ZSB0aGlzLmluaXRGaWx0ZXJWYWx1ZSl9fXJldHVy''@;'; put 'put ''biBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKEppKSxHZShzTyksR2UodWcpLEdlKERvKSxHZShYZiksR2UoRXMpKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRnLWNvbHVtbiJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihh''@;'; put 'put ''LGQsaCl7aWYoMSZhJiZhbyhoLGVPLDUpLDImYSl7bGV0IGY7Q2koZj1TaSgpKSYmKGQucHJvamVjdGVkRmlsdGVyPWYuZmlyc3QpfX0saG9zdEF0dHJzOlsicm9sZSIsImNvbHVtbmhlYWRlciJdLGhvc3RWYXJzOjMsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiYoaHIoImFyaWEt''@;'; put 'put ''c29ydCIsZC5hcmlhU29ydCksVHIoImRhdGFncmlkLWNvbHVtbiIsITApKX0saW5wdXRzOntmaWx0ZXJTdHJpbmdQbGFjZWhvbGRlcjpbTm4uTm9uZSwiY2xyRmlsdGVyU3RyaW5nUGxhY2Vob2xkZXIiLCJmaWx0ZXJTdHJpbmdQbGFjZWhvbGRlciJdLGZpbHRlck51bWJlck1heFBsYWNlaG9s''@;'; put 'put ''ZGVyOltObi5Ob25lLCJjbHJGaWx0ZXJOdW1iZXJNYXhQbGFjZWhvbGRlciIsImZpbHRlck51bWJlck1heFBsYWNlaG9sZGVyIl0sZmlsdGVyTnVtYmVyTWluUGxhY2Vob2xkZXI6W05uLk5vbmUsImNsckZpbHRlck51bWJlck1pblBsYWNlaG9sZGVyIiwiZmlsdGVyTnVtYmVyTWluUGxhY2Vo''@;'; put 'put ''b2xkZXIiXSxjb2xUeXBlOltObi5Ob25lLCJjbHJEZ0NvbFR5cGUiLCJjb2xUeXBlIl0sZmllbGQ6W05uLk5vbmUsImNsckRnRmllbGQiLCJmaWVsZCJdLHNvcnRCeTpbTm4uTm9uZSwiY2xyRGdTb3J0QnkiLCJzb3J0QnkiXSxzb3J0T3JkZXI6W05uLk5vbmUsImNsckRnU29ydE9yZGVyIiwi''@;'; put 'put ''c29ydE9yZGVyIl0sdXBkYXRlRmlsdGVyVmFsdWU6W05uLk5vbmUsImNsckZpbHRlclZhbHVlIiwidXBkYXRlRmlsdGVyVmFsdWUiXX0sb3V0cHV0czp7c29ydE9yZGVyQ2hhbmdlOiJjbHJEZ1NvcnRPcmRlckNoYW5nZSIsZmlsdGVyVmFsdWVDaGFuZ2U6ImNsckZpbHRlclZhbHVlQ2hhbmdl''@;'; put 'put ''In0sZmVhdHVyZXM6W3ZkKFtvZ10pLHdhLHdsXSxuZ0NvbnRlbnRTZWxlY3RvcnM6WVZlLGRlY2xzOjksdmFyczo1LGNvbnN0czpbWyJjb2x1bW5UaXRsZSIsIiJdLFsxLCJkYXRhZ3JpZC1jb2x1bW4tZmxleCJdLFsiY2xhc3MiLCJkYXRhZ3JpZC1jb2x1bW4tdGl0bGUiLCJ0eXBlIiwiYnV0''@;'; put 'put ''dG9uIiwzLCJjbGljayIsNCwibmdJZiJdLFszLCJjbHJGaWx0ZXJQbGFjZWhvbGRlciIsImNsckRnU3RyaW5nRmlsdGVyIiwiY2xyRmlsdGVyVmFsdWUiLCJjbHJGaWx0ZXJWYWx1ZUNoYW5nZSIsNCwibmdJZiJdLFszLCJjbHJGaWx0ZXJNYXhQbGFjZWhvbGRlciIsImNsckZpbHRlck1pblBs''@;'; put 'put ''YWNlaG9sZGVyIiwiY2xyRGdOdW1lcmljRmlsdGVyIiwiY2xyRmlsdGVyVmFsdWUiLCJjbHJGaWx0ZXJWYWx1ZUNoYW5nZSIsNCwibmdJZiJdLFsiY2xhc3MiLCJkYXRhZ3JpZC1jb2x1bW4tdGl0bGUiLDQsIm5nSWYiXSxbNCwibmdJZiJdLFsidHlwZSIsImJ1dHRvbiIsMSwiZGF0YWdyaWQt''@;'; put 'put ''Y29sdW1uLXRpdGxlIiwzLCJjbGljayJdLFs0LCJuZ1RlbXBsYXRlT3V0bGV0Il0sWyJzaGFwZSIsImFycm93IiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwiY2xhc3MiLCJzb3J0LWljb24iLDQsIm5nSWYiXSxbInNoYXBlIiwiYXJyb3ciLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsInNvcnQtaWNv''@;'; put 'put ''biJdLFszLCJjbHJGaWx0ZXJWYWx1ZUNoYW5nZSIsImNsckZpbHRlclBsYWNlaG9sZGVyIiwiY2xyRGdTdHJpbmdGaWx0ZXIiLCJjbHJGaWx0ZXJWYWx1ZSJdLFszLCJjbHJGaWx0ZXJWYWx1ZUNoYW5nZSIsImNsckZpbHRlck1heFBsYWNlaG9sZGVyIiwiY2xyRmlsdGVyTWluUGxhY2Vob2xk''@;'; put 'put ''ZXIiLCJjbHJEZ051bWVyaWNGaWx0ZXIiLCJjbHJGaWx0ZXJWYWx1ZSJdLFsxLCJkYXRhZ3JpZC1jb2x1bW4tdGl0bGUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYShXVmUpLGRlKDAsImRpdiIsMSksZ3QoMSxLVmUsMywyLCJidXR0b24iLDIpLFlyKDIpLGd0KDMscVZlLDEs''@;'; put 'put ''MywiY2xyLWRnLXN0cmluZy1maWx0ZXIiLDMpKDQsWFZlLDEsNCwiY2xyLWRnLW51bWVyaWMtZmlsdGVyIiw0KSg1LEpWZSwxLDAsIm5nLXRlbXBsYXRlIixudWxsLDAsSWMpKDcsZUJlLDIsMSwic3BhbiIsNSkoOCx0QmUsMSwwLCJjbHItZGctY29sdW1uLXNlcGFyYXRvciIsNiksaGUoKSks''@;'; put 'put ''MiZhJiYoZmUoKSxNZSgibmdJZiIsZC5zb3J0YWJsZSksZmUoMiksTWUoIm5nSWYiLGQuZmllbGQmJiFkLmN1c3RvbUZpbHRlciYmInN0cmluZyI9PWQuY29sVHlwZSksZmUoKSxNZSgibmdJZiIsZC5maWVsZCYmIWQuY3VzdG9tRmlsdGVyJiYibnVtYmVyIj09ZC5jb2xUeXBlKSxmZSgzKSxN''@;'; put 'put ''ZSgibmdJZiIsIWQuc29ydGFibGUpLGZlKCksTWUoIm5nSWYiLGQuc2hvd1NlcGFyYXRvcikpfSxkZXBlbmRlbmNpZXM6W2JhLE4xLHJzLERkZSxUZGUsZEddLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLGN9KSgpLGRnPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxk''@;'; put 'put ''LGgpe3RoaXMuX2ZpbHRlcnM9YSx0aGlzLl9zb3J0PWQsdGhpcy5fcGFnZT1oLHRoaXMubG9hZGluZz0hMSx0aGlzLl9zbWFydD0hMSx0aGlzLl9kaXNwbGF5ZWQ9W10sdGhpcy5fY2hhbmdlPW5ldyBXbix0aGlzLl9hbGxDaGFuZ2VzPW5ldyBXbix0aGlzLnRyYWNrQnk9Zj0+Zn1nZXQgc21h''@;'; put 'put ''cnQoKXtyZXR1cm4gdGhpcy5fc21hcnR9Z2V0IGFsbCgpe3JldHVybiB0aGlzLl9hbGx9c2V0IGFsbChhKXt0aGlzLl9hbGw9YSx0aGlzLmVtaXRBbGxDaGFuZ2VzKGEpLHRoaXMuc21hcnQ/dGhpcy5fZmlsdGVySXRlbXMoKToodGhpcy5fZGlzcGxheWVkPWEsdGhpcy5lbWl0Q2hhbmdlKCkp''@;'; put 'put ''fWdldCBkaXNwbGF5ZWQoKXtyZXR1cm4gdGhpcy5fZGlzcGxheWVkfWdldCBjaGFuZ2UoKXtyZXR1cm4gdGhpcy5fY2hhbmdlLmFzT2JzZXJ2YWJsZSgpfWdldCBhbGxDaGFuZ2VzKCl7cmV0dXJuIHRoaXMuX2FsbENoYW5nZXMuYXNPYnNlcnZhYmxlKCl9Z2V0IHVuaW5pdGlhbGl6ZWQoKXty''@;'; put 'put ''ZXR1cm4hdGhpcy5fYWxsfWRlc3Ryb3koKXt0aGlzLl9maWx0ZXJzU3ViJiZ0aGlzLl9maWx0ZXJzU3ViLnVuc3Vic2NyaWJlKCksdGhpcy5fc29ydFN1YiYmdGhpcy5fc29ydFN1Yi51bnN1YnNjcmliZSgpLHRoaXMuX3BhZ2VTdWImJnRoaXMuX3BhZ2VTdWIudW5zdWJzY3JpYmUoKX1zbWFy''@;'; put 'put ''dGVuRG93bigpe3RoaXMuX3NtYXJ0PSExLHRoaXMuZGVzdHJveSgpfXNtYXJ0ZW5VcCgpe3RoaXMuX3NtYXJ0PSEwLHRoaXMuX2ZpbHRlcnNTdWI9dGhpcy5fZmlsdGVycy5jaGFuZ2Uuc3Vic2NyaWJlKCgpPT50aGlzLl9maWx0ZXJJdGVtcygpKSx0aGlzLl9zb3J0U3ViPXRoaXMuX3NvcnQu''@;'; put 'put ''Y2hhbmdlLnN1YnNjcmliZSgoKT0+e3RoaXMuX3NvcnQuY29tcGFyYXRvcj90aGlzLl9zb3J0SXRlbXMoKTp0aGlzLl9maWx0ZXJJdGVtcygpfSksdGhpcy5fcGFnZVN1Yj10aGlzLl9wYWdlLmNoYW5nZS5zdWJzY3JpYmUoKCk9PnRoaXMuX2NoYW5nZVBhZ2UoKSl9cmVmcmVzaCgpe3RoaXMu''@;'; put 'put ''c21hcnQmJnRoaXMuX2ZpbHRlckl0ZW1zKCl9ZW1pdENoYW5nZSgpe3RoaXMuX2NoYW5nZS5uZXh0KHRoaXMuZGlzcGxheWVkKX1lbWl0QWxsQ2hhbmdlcyhhKXt0aGlzLl9hbGxDaGFuZ2VzLm5leHQoYSl9X2ZpbHRlckl0ZW1zKCl7dGhpcy51bmluaXRpYWxpemVkfHwodGhpcy5fZmlsdGVy''@;'; put 'put ''ZWQ9dGhpcy5fZmlsdGVycy5oYXNBY3RpdmVGaWx0ZXJzKCk/dGhpcy5fYWxsLmZpbHRlcihhPT50aGlzLl9maWx0ZXJzLmFjY2VwdHMoYSkpOnRoaXMuX2FsbC5zbGljZSgpLHRoaXMuX3BhZ2UudG90YWxJdGVtcz10aGlzLl9maWx0ZXJlZC5sZW5ndGgsdGhpcy5fc29ydEl0ZW1zKCkpfV9z''@;'; put 'put ''b3J0SXRlbXMoKXt0aGlzLnVuaW5pdGlhbGl6ZWR8fCh0aGlzLl9zb3J0LmNvbXBhcmF0b3ImJnRoaXMuX2ZpbHRlcmVkLnNvcnQoKGEsZCk9PnRoaXMuX3NvcnQuY29tcGFyZShhLGQpKSx0aGlzLl9jaGFuZ2VQYWdlKCkpfV9jaGFuZ2VQYWdlKCl7dGhpcy51bmluaXRpYWxpemVkfHx0aGlz''@;'; put 'put ''Ll9wYWdlLmFjdGl2YXRlZCYmMD09PXRoaXMuX3BhZ2Uuc2l6ZXx8KHRoaXMuX2Rpc3BsYXllZD10aGlzLl9wYWdlLnNpemU+MD90aGlzLl9maWx0ZXJlZC5zbGljZSh0aGlzLl9wYWdlLmZpcnN0SXRlbSx0aGlzLl9wYWdlLmxhc3RJdGVtKzEpOnRoaXMuX2ZpbHRlcmVkLHRoaXMuZW1pdENo''@;'; put 'put ''YW5nZSgpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoeHIodWcpLHhyKHNPKSx4cihNbSkpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLEp5PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxk''@;'; put 'put ''LGgsZil7dGhpcy50ZW1wbGF0ZT1hLHRoaXMuZGlmZmVycz1kLHRoaXMuaXRlbXM9aCx0aGlzLmRpZmZlcj1udWxsLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSxoLnNtYXJ0ZW5VcCgpLHRoaXMuaXRlcmFibGVQcm94eT1uZXcgbnMoZixhLGQpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGguY2hh''@;'; put 'put ''bmdlLnN1YnNjcmliZSh2PT57dGhpcy5pdGVyYWJsZVByb3h5Lm5nRm9yT2Y9dix0aGlzLml0ZXJhYmxlUHJveHkubmdEb0NoZWNrKCl9KSl9c2V0IHJhd0l0ZW1zKGEpe3RoaXMuX3Jhd0l0ZW1zPWF8fFtdfXNldCB0cmFja0J5KGEpe3RoaXMuaXRlcmFibGVQcm94eS5uZ0ZvclRyYWNrQnk9''@;'; put 'put ''YX1zdGF0aWMgbmdUZW1wbGF0ZUNvbnRleHRHdWFyZChhLGQpe3JldHVybiEwfW5nRG9DaGVjaygpe3RoaXMuZGlmZmVyfHwodGhpcy5kaWZmZXI9dGhpcy5kaWZmZXJzLmZpbmQodGhpcy5fcmF3SXRlbXMpLmNyZWF0ZSh0aGlzLml0ZXJhYmxlUHJveHkubmdGb3JUcmFja0J5KSksdGhpcy5k''@;'; put 'put ''aWZmZXImJnRoaXMuZGlmZmVyLmRpZmYodGhpcy5fcmF3SXRlbXMpJiYodGhpcy5pdGVtcy5hbGw9dGhpcy5fcmF3SXRlbXMpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEp''@;'; put 'put ''e3JldHVybiBuZXcoYXx8YykoR2UoU2wpLEdlKGVtKSxHZShkZyksR2UoRG8pKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyRGdJdGVtcyIsIiIsImNsckRnSXRlbXNPZiIsIiJdXSxpbnB1dHM6e3Jhd0l0ZW1zOltObi5Ob25lLCJjbHJEZ0l0ZW1zT2YiLCJy''@;'; put 'put ''YXdJdGVtcyJdLHRyYWNrQnk6W05uLk5vbmUsImNsckRnSXRlbXNUcmFja0J5IiwidHJhY2tCeSJdfX0pLGN9KSgpLGdHPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5pdGVtcz1hfWdldCBlbXB0eURhdGFncmlkKCl7cmV0dXJuISh0aGlzLml0ZW1zLmxvYWRpbmd8fHRoaXMu''@;'; put 'put ''aXRlbXMuZGlzcGxheWVkJiYwIT09dGhpcy5pdGVtcy5kaXNwbGF5ZWQubGVuZ3RoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoZGcpKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRnLXBsYWNlaG9sZGVyIl1d''@;'; put 'put ''LGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZUcigiZGF0YWdyaWQtcGxhY2Vob2xkZXItY29udGFpbmVyIiwhMCl9LG5nQ29udGVudFNlbGVjdG9yczp5byxkZWNsczo0LHZhcnM6NCxjb25zdHM6W1sxLCJkYXRhZ3JpZC1wbGFjZWhvbGRlciJdLFsiY2xhc3Mi''@;'; put 'put ''LCJkYXRhZ3JpZC1wbGFjZWhvbGRlci1pbWFnZSIsNCwibmdJZiJdLFsxLCJkYXRhZ3JpZC1wbGFjZWhvbGRlci1jb250ZW50Il0sWzQsIm5nSWYiXSxbMSwiZGF0YWdyaWQtcGxhY2Vob2xkZXItaW1hZ2UiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYSgpLGRlKDAsImRpdiIs''@;'; put 'put ''MCksZ3QoMSxuQmUsMSwwLCJkaXYiLDEpLGRlKDIsInNwYW4iLDIpLGd0KDMsckJlLDEsMCwibmctY29udGVudCIsMyksaGUoKSgpKSwyJmEmJihUcigiZGF0YWdyaWQtZW1wdHkiLGQuZW1wdHlEYXRhZ3JpZCksZmUoKSxNZSgibmdJZiIsZC5lbXB0eURhdGFncmlkKSxmZSgyKSxNZSgibmdJ''@;'; put 'put ''ZiIsZC5lbXB0eURhdGFncmlkKSl9LGRlcGVuZGVuY2llczpbYmFdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLG1HPSgoKT0+e2NsYXNzIGN7bmdBZnRlclZpZXdJbml0KCl7dGhpcy5jZWxsVmlldz10aGlzLnRlbXBsYXRlUmVmLmNyZWF0ZUVtYmVkZGVkVmlldyhudWxsKX1uZ09uRGVzdHJv''@;'; put 'put ''eSgpe3RoaXMuY2VsbFZpZXcuZGVzdHJveSgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siZGctd3JhcHBlZC1jZWxsIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihhLGQpe2lmKDEmYSYm''@;'; put 'put ''cWEoaUJlLDUpLDImYSl7bGV0IGg7Q2koaD1TaSgpKSYmKGQudGVtcGxhdGVSZWY9aC5maXJzdCl9fSxuZ0NvbnRlbnRTZWxlY3RvcnM6eW8sZGVjbHM6Mix2YXJzOjAsY29uc3RzOltbImNlbGxQb3J0YWwiLCIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYSgpLGd0KDAsYUJl''@;'; put 'put ''LDEsMCwibmctdGVtcGxhdGUiLG51bGwsMCxJYykpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxRZj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMudmNyPWF9Z2V0IF92aWV3KCl7cmV0dXJuIHRoaXMud3JhcHBlZEluamVjdG9yLmdldChtRyx0aGlzLnZjcikuY2VsbFZpZXd9''@;'; put 'put ''bmdPbkluaXQoKXt0aGlzLndyYXBwZWRJbmplY3Rvcj1uZXcgWUwobUcsdGhpcy52Y3IpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShEbykpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGctY2VsbCJdXSxjb250''@;'; put 'put ''ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZhbyhoLFdMLDQpLDImYSl7bGV0IGY7Q2koZj1TaSgpKSYmKGQuc2lnbnBvc3Q9Zil9fSxob3N0QXR0cnM6WyJyb2xlIiwiZ3JpZGNlbGwiXSxob3N0VmFyczo0LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmVHIoImRh''@;'; put 'put ''dGFncmlkLWNlbGwiLCEwKSgiZGF0YWdyaWQtc2lnbnBvc3QtdHJpZ2dlciIsZC5zaWducG9zdC5sZW5ndGg+MCl9LG5nQ29udGVudFNlbGVjdG9yczp5byxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKCksWXIoMCkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxj''@;'; put 'put ''fSkoKSxJZGU9MCxxeD0oKCk9PntjbGFzcyBjIGV4dGVuZHMgVTF7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuZXhwYW5kYWJsZUlkPSIiLHRoaXMuX3JlcGxhY2U9bmV3IGVpKCExKSx0aGlzLl9hbmltYXRlPW5ldyBXbixJZGUrKyx0aGlzLmV4cGFuZGFibGVJZD0iY2xyLWRnLWV4cGFu''@;'; put 'put ''ZGFibGUtcm93LSIrSWRlfWdldCBleHBhbmRlZCgpe3JldHVybiB0aGlzLl9leHBhbmRlZH1zZXQgZXhwYW5kZWQoYSl7KGE9ISFhKSE9PXRoaXMuX2V4cGFuZGVkJiYodGhpcy5fZXhwYW5kZWQ9YSx0aGlzLl9hbmltYXRlLm5leHQoKSx0aGlzLl9leHBhbmRDaGFuZ2UubmV4dChhKSl9Z2V0''@;'; put 'put ''IHJlcGxhY2UoKXtyZXR1cm4gdGhpcy5fcmVwbGFjZS5hc09ic2VydmFibGUoKX1nZXQgYW5pbWF0ZSgpe3JldHVybiB0aGlzLl9hbmltYXRlLmFzT2JzZXJ2YWJsZSgpfWxvYWRpbmdTdGF0ZUNoYW5nZShhKXtzdXBlci5sb2FkaW5nU3RhdGVDaGFuZ2UoYSksYSE9PXoxLkxPQURJTkcmJnRo''@;'; put 'put ''aXMuX2FuaW1hdGUubmV4dCgpfXNldFJlcGxhY2UoYSl7dGhpcy5fcmVwbGFjZS5uZXh0KGEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKTt2YXIgUXk9''@;'; put 'put ''ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5ESVNQTEFZPTBdPSJESVNQTEFZIixjW2MuQ0FMQ1VMQVRFPTFdPSJDQUxDVUxBVEUiLGN9KFF5fHx7fSkscGw9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5Ob25lPTBdPSJOb25lIixjW2MuU2luZ2xlPTFdPSJTaW5nbGUiLGNbYy5NdWx0aT0yXT0iTXVs''@;'; put 'put ''dGkiLGN9KHBsfHx7fSk7bGV0IHZHPSgoKT0+e2NsYXNzIGN7bmdBZnRlclZpZXdJbml0KCl7dGhpcy5yb3dWaWV3PXRoaXMudGVtcGxhdGVSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KG51bGwpfW5nT25EZXN0cm95KCl7dGhpcy5yb3dWaWV3LmRlc3Ryb3koKX19cmV0dXJuIGMuXHUwMjc1ZmFj''@;'; put 'put ''PWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImRnLXdyYXBwZWQtcm93Il1dLHZpZXdRdWVyeTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmcWEob0JlLDUpLDImYSl7bGV0IGg7Q2koaD1TaSgpKSYmKGQudGVtcGxhdGVSZWY9''@;'; put 'put ''aC5maXJzdCl9fSxuZ0NvbnRlbnRTZWxlY3RvcnM6eW8sZGVjbHM6Mix2YXJzOjAsY29uc3RzOltbInJvd1BvcnRhbCIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKCksZ3QoMCxzQmUsMSwwLCJuZy10ZW1wbGF0ZSIsbnVsbCwwLEljKSl9LGVuY2Fwc3VsYXRpb246Mn0p''@;'; put 'put ''LGN9KSgpLFZaZT0wLGVfPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLl9pdGVtcz1hLHRoaXMucHJlc2VydmVTZWxlY3Rpb249ITEsdGhpcy5zaGlmdFByZXNzZWQ9ITEsdGhpcy5yb3dTZWxlY3Rpb25Nb2RlPSExLHRoaXMucHJldlNlbGVjdGlvblJlZnM9W10sdGhpcy5s''@;'; put 'put ''b2NrZWRSZWZzPVtdLHRoaXMudmFsdWVDb2xsZWN0b3I9bmV3IFduLHRoaXMuX3NlbGVjdGlvblR5cGU9cGwuTm9uZSx0aGlzLl9jaGFuZ2U9bmV3IFduLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLmlkPSJjbHItZGctc2VsZWN0aW9uIitWWmUrKyx0aGlzLnN1YnNjcmlwdGlvbnMucHVz''@;'; put 'put ''aChkLmNoYW5nZS5zdWJzY3JpYmUoKCk9PnshdGhpcy5fc2VsZWN0YWJsZXx8dGhpcy5wcmVzZXJ2ZVNlbGVjdGlvbnx8dGhpcy5jbGVhclNlbGVjdGlvbigpfSkpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGEuYWxsQ2hhbmdlcy5zdWJzY3JpYmUoaD0+e2NvbnN0IGY9W107c3dpdGNoKHRo''@;'; put 'put ''aXMuc2VsZWN0aW9uVHlwZSl7Y2FzZSBwbC5Ob25lOmJyZWFrO2Nhc2UgcGwuU2luZ2xlOntsZXQgdixNPSExO3RoaXMuY3VycmVudFNpbmdsZSYmIXRoaXMucHJldlNpbmdsZVNlbGVjdGlvblJlZiYmKHRoaXMucHJldlNpbmdsZVNlbGVjdGlvblJlZj1hLnRyYWNrQnkodGhpcy5jdXJyZW50''@;'; put 'put ''U2luZ2xlKSksaC5mb3JFYWNoKEQ9Pntjb25zdCBaPWEudHJhY2tCeShEKTt0aGlzLnByZXZTaW5nbGVTZWxlY3Rpb25SZWY9PT1aJiYodj1ELE09ITApLHRoaXMubG9ja2VkUmVmcy5pbmRleE9mKFopPi0xJiZmLnB1c2goWil9KSxhLnNtYXJ0JiYhdiYmKE09ITApLHNldFRpbWVvdXQoKCk9''@;'; put 'put ''PntNJiYodGhpcy5jdXJyZW50U2luZ2xlPXYpfSwwKTticmVha31jYXNlIHBsLk11bHRpOntsZXQgdj10aGlzLmN1cnJlbnQuc2xpY2UoKSxNPSExO3RoaXMuY3VycmVudC5sZW5ndGg+MCYmdGhpcy5wcmV2U2VsZWN0aW9uUmVmcy5sZW5ndGghPT10aGlzLmN1cnJlbnQubGVuZ3RoJiYodGhp''@;'; put 'put ''cy5wcmV2U2VsZWN0aW9uUmVmcz1bXSx0aGlzLmN1cnJlbnQuZm9yRWFjaChEPT57dGhpcy5wcmV2U2VsZWN0aW9uUmVmcy5wdXNoKGEudHJhY2tCeShEKSl9KSksaC5mb3JFYWNoKEQ9Pntjb25zdCBaPWEudHJhY2tCeShEKTt0aGlzLmxvY2tlZFJlZnMuaW5kZXhPZihaKT4tMSYmZi5wdXNo''@;'; put 'put ''KFopfSksdi5sZW5ndGg+MCYmKGguZm9yRWFjaChEPT57Y29uc3QgWj1hLnRyYWNrQnkoRCkscmU9dGhpcy5wcmV2U2VsZWN0aW9uUmVmcy5pbmRleE9mKFopO3JlPi0xJiYodltyZV09RCxNPSEwKX0pLGEuc21hcnQmJih2PXYuZmlsdGVyKEQ9PmguaW5kZXhPZihEKT4tMSksdGhpcy5jdXJy''@;'; put 'put ''ZW50Lmxlbmd0aCE9PXYubGVuZ3RoJiYoTT0hMCkpLHNldFRpbWVvdXQoKCk9PntNJiYodGhpcy5jdXJyZW50PXYpfSwwKSk7YnJlYWt9fXRoaXMubG9ja2VkUmVmcz1mfSkpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMudmFsdWVDb2xsZWN0b3IucGlwZShmbSgwKSkuc3Vic2NyaWJl''@;'; put 'put ''KCgpPT50aGlzLmVtaXRDaGFuZ2UoKSkpfWdldCBzZWxlY3Rpb25UeXBlKCl7cmV0dXJuIHRoaXMuX3NlbGVjdGlvblR5cGV9c2V0IHNlbGVjdGlvblR5cGUoYSl7YSE9PXRoaXMuc2VsZWN0aW9uVHlwZSYmKHRoaXMuX3NlbGVjdGlvblR5cGU9YSxhPT09cGwuTm9uZT9kZWxldGUgdGhpcy5j''@;'; put 'put ''dXJyZW50OnRoaXMudXBkYXRlQ3VycmVudChbXSwhMSkpfWdldCBjdXJyZW50KCl7cmV0dXJuIHRoaXMuX2N1cnJlbnR9c2V0IGN1cnJlbnQoYSl7dGhpcy51cGRhdGVDdXJyZW50KGEsITApfWdldCBjdXJyZW50U2luZ2xlKCl7cmV0dXJuIHRoaXMuX2N1cnJlbnRTaW5nbGV9c2V0IGN1cnJl''@;'; put 'put ''bnRTaW5nbGUoYSl7YSE9PXRoaXMuX2N1cnJlbnRTaW5nbGUmJih0aGlzLl9jdXJyZW50U2luZ2xlPWEsYSYmKHRoaXMucHJldlNpbmdsZVNlbGVjdGlvblJlZj10aGlzLl9pdGVtcy50cmFja0J5KGEpKSx0aGlzLmVtaXRDaGFuZ2UoKSl9Z2V0IGNoYW5nZSgpe3JldHVybiB0aGlzLl9jaGFu''@;'; put 'put ''Z2UuYXNPYnNlcnZhYmxlKCl9Z2V0IF9zZWxlY3RhYmxlKCl7cmV0dXJuIHRoaXMuX3NlbGVjdGlvblR5cGU9PT1wbC5NdWx0aXx8dGhpcy5fc2VsZWN0aW9uVHlwZT09PXBsLlNpbmdsZX1jbGVhclNlbGVjdGlvbigpe3RoaXMuX2N1cnJlbnQ9W10sdGhpcy5wcmV2U2VsZWN0aW9uUmVmcz1b''@;'; put 'put ''XSx0aGlzLnByZXZTaW5nbGVTZWxlY3Rpb25SZWY9bnVsbCx0aGlzLl9jdXJyZW50U2luZ2xlPW51bGwsdGhpcy5lbWl0Q2hhbmdlKCl9ZGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9dXBkYXRlQ3VycmVudChhLGQpe3RoaXMuX2N1cnJl''@;'; put 'put ''bnQ9YSxkJiZ0aGlzLnZhbHVlQ29sbGVjdG9yLm5leHQoYSl9aXNTZWxlY3RlZChhKXtyZXR1cm4gdGhpcy5fc2VsZWN0aW9uVHlwZT09PXBsLlNpbmdsZT90aGlzLmN1cnJlbnRTaW5nbGU9PT1hOnRoaXMuX3NlbGVjdGlvblR5cGU9PT1wbC5NdWx0aSYmdGhpcy5jdXJyZW50LmluZGV4T2Yo''@;'; put 'put ''YSk+PTB9c2V0U2VsZWN0ZWQoYSxkKXtjb25zdCBoPXRoaXMuY3VycmVudD90aGlzLmN1cnJlbnQuaW5kZXhPZihhKTotMTtzd2l0Y2godGhpcy5fc2VsZWN0aW9uVHlwZSl7Y2FzZSBwbC5Ob25lOmNhc2UgcGwuU2luZ2xlOmJyZWFrO2Nhc2UgcGwuTXVsdGk6aD49MCYmIWQ/dGhpcy5kZXNl''@;'; put 'put ''bGVjdEl0ZW0oaCk6aDwwJiZkJiZ0aGlzLnNlbGVjdEl0ZW0oYSl9fWlzQWxsU2VsZWN0ZWQoKXtpZih0aGlzLl9zZWxlY3Rpb25UeXBlIT09cGwuTXVsdGl8fCF0aGlzLl9pdGVtcy5kaXNwbGF5ZWQpcmV0dXJuITE7Y29uc3QgYT10aGlzLl9pdGVtcy5kaXNwbGF5ZWQuZmlsdGVyKGY9PiEx''@;'; put 'put ''PT09dGhpcy5pc0xvY2tlZChmKSk7cmV0dXJuIShhLmxlbmd0aDwxKSYmYS5maWx0ZXIoZj0+dGhpcy5jdXJyZW50LmluZGV4T2YoZik+LTEpLmxlbmd0aD09PWEubGVuZ3RofWxvY2tJdGVtKGEsZCl7aWYodGhpcy5jYW5JdEJlTG9ja2VkKCkpe2NvbnN0IGg9dGhpcy5faXRlbXMudHJhY2tC''@;'; put 'put ''eShhKTshMD09PWQ/dGhpcy5sb2NrZWRSZWZzLnB1c2goaCk6dGhpcy5sb2NrZWRSZWZzPXRoaXMubG9ja2VkUmVmcy5maWx0ZXIoZj0+aCE9PWYpfX1pc0xvY2tlZChhKXtpZih0aGlzLmNhbkl0QmVMb2NrZWQoKSl7Y29uc3QgZD10aGlzLl9pdGVtcy50cmFja0J5KGEpO3JldHVybiB0aGlz''@;'; put 'put ''LmxvY2tlZFJlZnMuaW5kZXhPZihkKT4tMX1yZXR1cm4hMX10b2dnbGVBbGwoKXt0aGlzLl9zZWxlY3Rpb25UeXBlPT09cGwuTm9uZXx8dGhpcy5fc2VsZWN0aW9uVHlwZT09PXBsLlNpbmdsZXx8KHRoaXMuaXNBbGxTZWxlY3RlZCgpP3RoaXMuX2l0ZW1zLmRpc3BsYXllZC5mb3JFYWNoKGE9''@;'; put 'put ''Pntjb25zdCBkPXRoaXMuY3VycmVudC5pbmRleE9mKGEpO2Q+LTEmJiExPT09dGhpcy5pc0xvY2tlZChhKSYmdGhpcy5kZXNlbGVjdEl0ZW0oZCl9KTp0aGlzLl9pdGVtcy5kaXNwbGF5ZWQuZm9yRWFjaChhPT57dGhpcy5jdXJyZW50LmluZGV4T2YoYSk8MCYmITE9PT10aGlzLmlzTG9ja2Vk''@;'; put 'put ''KGEpJiZ0aGlzLnNlbGVjdEl0ZW0oYSl9KSl9c2VsZWN0SXRlbShhKXt0aGlzLmN1cnJlbnQ9dGhpcy5jdXJyZW50LmNvbmNhdChhKSx0aGlzLnByZXZTZWxlY3Rpb25SZWZzLnB1c2godGhpcy5faXRlbXMudHJhY2tCeShhKSl9ZGVzZWxlY3RJdGVtKGEpe2lmKHRoaXMuY3VycmVudD10aGlz''@;'; put 'put ''LmN1cnJlbnQuc2xpY2UoMCxhKS5jb25jYXQodGhpcy5jdXJyZW50LnNsaWNlKGErMSkpLGE8dGhpcy5wcmV2U2VsZWN0aW9uUmVmcy5sZW5ndGgpe2NvbnN0IGQ9dGhpcy5wcmV2U2VsZWN0aW9uUmVmcy5zcGxpY2UoYSwxKTt0aGlzLmxvY2tlZFJlZnM9dGhpcy5sb2NrZWRSZWZzLmZpbHRl''@;'; put 'put ''cihoPT5oIT09ZFswXSl9fWNhbkl0QmVMb2NrZWQoKXtyZXR1cm4gdGhpcy5fc2VsZWN0aW9uVHlwZSE9PXBsLk5vbmV9ZW1pdENoYW5nZSgpe3RoaXMuX3NlbGVjdGlvblR5cGU9PT1wbC5TaW5nbGU/dGhpcy5fY2hhbmdlLm5leHQodGhpcy5jdXJyZW50U2luZ2xlKTp0aGlzLl9zZWxlY3Rp''@;'; put 'put ''b25UeXBlPT09cGwuTXVsdGkmJnRoaXMuX2NoYW5nZS5uZXh0KHRoaXMuY3VycmVudCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHhyKGRnKSx4cih1ZykpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9''@;'; put 'put ''KSgpLGJHPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5fdmlldz1uZXcgZWkoUXkuRElTUExBWSksdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGEuZmlsdGVyUmVuZGVyU3RlcHMoSmYuQ0FMQ1VMQVRFX01PREVfT04pLnN1YnNjcmliZSgo''@;'; put 'put ''KT0+dGhpcy5fdmlldy5uZXh0KFF5LkNBTENVTEFURSkpKSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChhLmZpbHRlclJlbmRlclN0ZXBzKEpmLkNBTENVTEFURV9NT0RFX09GRikuc3Vic2NyaWJlKCgpPT50aGlzLl92aWV3Lm5leHQoUXkuRElTUExBWSkpKX1nZXQgdmlldygpe3JldHVybiB0''@;'; put 'put ''aGlzLl92aWV3LmFzT2JzZXJ2YWJsZSgpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoeHIoSTcpKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tl''@;'; put 'put ''bjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSx5Rz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuc2VsZWN0aW9uPWF9b25TZWxlY3Rpb25DZWxsQ2xpY2soYSl7dGhpcy5zZWxlY3Rpb24ucm93U2VsZWN0aW9uTW9kZXx8IkxBQkVMIiE9PWEudGFyZ2V0LnRhZ05hbWUm''@;'; put 'put ''JiJJTlBVVCIhPT1hLnRhcmdldC50YWdOYW1lJiZhLnRhcmdldC5xdWVyeVNlbGVjdG9yKCJpbnB1dCIpPy5jbGljaygpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShlXykpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIi''@;'; put 'put ''LDgsImRhdGFncmlkLXNlbGVjdCJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJkZ0KCJjbGljayIsZnVuY3Rpb24oZil7cmV0dXJuIGQub25TZWxlY3Rpb25DZWxsQ2xpY2soZil9KX19KSxjfSkoKSxTcD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLmVs''@;'; put 'put ''PWEsdGhpcy5yZW5kZXJlcj1kLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChoLmZpbHRlclJlbmRlclN0ZXBzKEpmLkNMRUFSX1dJRFRIUykuc3Vic2NyaWJlKCgpPT50aGlzLmNsZWFyV2lkdGgoKSkpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRp''@;'; put 'put ''b25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKSx0aGlzLnN0YXRlU3Vic2NyaXB0aW9uJiZ0aGlzLnN0YXRlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9cmVzZXRTdGF0ZShhKXt0aGlzLnNldFdpZHRoKGEpLHRoaXMuc2V0SGlkZGVuKGEpfXNldFdpZHRoKGEpe2Euc3RyaWN0V2lk''@;'; put 'put ''dGg/dGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsWHkpOnRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LFh5KSx0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwid2lkdGgiLGEud2lkdGgr''@;'; put 'put ''InB4Iil9c2V0SGlkZGVuKGEpe2EuaGlkZGVuP3RoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LEt4KTp0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCxLeCl9Y2xlYXJXaWR0aCgpe3RoaXMucmVuZGVyZXIucmVtb3ZlQ2xh''@;'; put 'put ''c3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LFh5KSx0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwid2lkdGgiLG51bGwpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShKaSksR2UoRW8pLEdlKEk3KSl9LGMuXHUw''@;'; put 'put ''Mjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kZy1jZWxsIl1dfSksY30pKCksbE89MCxFbT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNLEQsWixyZSxjZSxiZSxFZSl7dGhpcy5zZWxlY3Rpb249YSx0aGlzLnJvd0FjdGlvblNlcnZpY2U9ZCx0aGlzLmds''@;'; put 'put ''b2JhbEV4cGFuZGFibGU9aCx0aGlzLmV4cGFuZD1mLHRoaXMuZGV0YWlsU2VydmljZT12LHRoaXMuZGlzcGxheU1vZGU9TSx0aGlzLnZjcj1ELHRoaXMuY29tbW9uU3RyaW5ncz1jZSx0aGlzLml0ZW1zPWJlLHRoaXMuZG9jdW1lbnQ9RWUsdGhpcy5zZWxlY3RlZENoYW5nZWQ9bmV3IEtyKCEx''@;'; put 'put ''KSx0aGlzLmV4cGFuZGVkQ2hhbmdlPW5ldyBLcighMSksdGhpcy5kZXRhaWxEaXNhYmxlZD0hMSx0aGlzLmRldGFpbEhpZGRlbj0hMSx0aGlzLnNrZWxldG9uTG9hZGluZz0hMSx0aGlzLmRpc3BsYXlDZWxscz0hMSx0aGlzLmV4cGFuZEFuaW1hdGlvblRyaWdnZXI9ITEsdGhpcy5TRUxFQ1RJ''@;'; put 'put ''T05fVFlQRT1wbCx0aGlzLml0ZW1DaGFuZ2VzPW5ldyB5eCgxKSx0aGlzLl9zZWxlY3RlZD0hMSx0aGlzLl9kZXRhaWxPcGVuTGFiZWw9IiIsdGhpcy5fZGV0YWlsQ2xvc2VMYWJlbD0iIix0aGlzLl9yb3dTZWxlY3Rpb25MYWJlbD0iIix0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5fc2Vs''@;'; put 'put ''ZWN0YWJsZT0hMCxsTysrLHRoaXMuaWQ9ImNsci1kZy1yb3ciK2xPLHRoaXMucmFkaW9JZD0iY2xyLWRnLXJvdy1yZCIrbE8sdGhpcy5jaGVja2JveElkPSJjbHItZGctcm93LWNiIitsTyx0aGlzLmV4cGFuZGFibGVJZD1mLmV4cGFuZGFibGVJZCx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChx''@;'; put 'put ''OChmLnJlcGxhY2UsZi5leHBhbmRDaGFuZ2UpLnN1YnNjcmliZSgoW0JlLHFlXSk9PntCZSYmcWU/KHRoaXMucmVwbGFjZWQ9ITAsWi5hZGRDbGFzcyhyZS5uYXRpdmVFbGVtZW50LCJkYXRhZ3JpZC1yb3ctcmVwbGFjZWQiKSk6KHRoaXMucmVwbGFjZWQ9ITEsWi5yZW1vdmVDbGFzcyhyZS5u''@;'; put 'put ''YXRpdmVFbGVtZW50LCJkYXRhZ3JpZC1yb3ctcmVwbGFjZWQiKSl9KSl9Z2V0IGl0ZW0oKXtyZXR1cm4gdGhpcy5faXRlbX1zZXQgaXRlbShhKXt0aGlzLl9pdGVtPWEsdGhpcy5pdGVtQ2hhbmdlcy5uZXh0KGEpLHRoaXMuY2xyRGdTZWxlY3RhYmxlPXRoaXMuX3NlbGVjdGFibGV9Z2V0IGNs''@;'; put 'put ''ckRnU2VsZWN0YWJsZSgpe3JldHVybiF0aGlzLnNlbGVjdGlvbi5pc0xvY2tlZCh0aGlzLml0ZW0pfXNldCBjbHJEZ1NlbGVjdGFibGUoYSl7dGhpcy5pdGVtJiZ0aGlzLnNlbGVjdGlvbi5sb2NrSXRlbSh0aGlzLml0ZW0sImZhbHNlIj09PWF8fCExPT09YSksdGhpcy5fc2VsZWN0YWJsZT1h''@;'; put 'put ''fWdldCBzZWxlY3RlZCgpe3JldHVybiB0aGlzLnNlbGVjdGlvbi5zZWxlY3Rpb25UeXBlPT09cGwuTm9uZT90aGlzLl9zZWxlY3RlZDp0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkKHRoaXMuaXRlbSl9c2V0IHNlbGVjdGVkKGEpe3RoaXMuc2VsZWN0aW9uLnNlbGVjdGlvblR5cGU9PT1wbC5O''@;'; put 'put ''b25lP3RoaXMuX3NlbGVjdGVkPWE6KGEmJnRoaXMuc2VsZWN0aW9uLnNlbGVjdGlvblR5cGU9PT1wbC5NdWx0aT90aGlzLnJhbmdlU2VsZWN0KCk6dGhpcy5zZWxlY3Rpb24ucmFuZ2VTdGFydD1udWxsLHRoaXMuc2VsZWN0aW9uLnNldFNlbGVjdGVkKHRoaXMuaXRlbSxhKSl9Z2V0IGV4cGFu''@;'; put 'put ''ZGVkKCl7cmV0dXJuIHRoaXMuZXhwYW5kLmV4cGFuZGVkfXNldCBleHBhbmRlZChhKXt0aGlzLmV4cGFuZC5leHBhbmRlZD1hfWdldCBjbHJEZ0RldGFpbE9wZW5MYWJlbCgpe3JldHVybiB0aGlzLl9kZXRhaWxPcGVuTGFiZWw/dGhpcy5fZGV0YWlsT3BlbkxhYmVsOnRoaXMuY29tbW9uU3Ry''@;'; put 'put ''aW5ncy5rZXlzLm9wZW59c2V0IGNsckRnRGV0YWlsT3BlbkxhYmVsKGEpe3RoaXMuX2RldGFpbE9wZW5MYWJlbD1hfWdldCBjbHJEZ0RldGFpbENsb3NlTGFiZWwoKXtyZXR1cm4gdGhpcy5fZGV0YWlsQ2xvc2VMYWJlbD90aGlzLl9kZXRhaWxDbG9zZUxhYmVsOnRoaXMuY29tbW9uU3RyaW5n''@;'; put 'put ''cy5rZXlzLmNsb3NlfXNldCBjbHJEZ0RldGFpbENsb3NlTGFiZWwoYSl7dGhpcy5fZGV0YWlsQ2xvc2VMYWJlbD1hfWdldCBjbHJEZ1Jvd1NlbGVjdGlvbkxhYmVsKCl7cmV0dXJuIHRoaXMuX3Jvd1NlbGVjdGlvbkxhYmVsP3RoaXMuX3Jvd1NlbGVjdGlvbkxhYmVsOnRoaXMuY29tbW9uU3Ry''@;'; put 'put ''aW5ncy5rZXlzLnNlbGVjdH1zZXQgY2xyRGdSb3dTZWxlY3Rpb25MYWJlbChhKXt0aGlzLl9yb3dTZWxlY3Rpb25MYWJlbD1hfWdldCBfdmlldygpe3JldHVybiB0aGlzLndyYXBwZWRJbmplY3Rvci5nZXQodkcsdGhpcy52Y3IpLnJvd1ZpZXd9bmdPbkluaXQoKXt0aGlzLndyYXBwZWRJbmpl''@;'; put 'put ''Y3Rvcj1uZXcgWUwodkcsdGhpcy52Y3IpLHRoaXMuc2VsZWN0aW9uLmxvY2tJdGVtKHRoaXMuaXRlbSwhMT09PXRoaXMuY2xyRGdTZWxlY3RhYmxlKX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLmRnQ2VsbHMuY2hhbmdlcy5zdWJzY3JpYmUoKCk9Pnt0aGlzLmRnQ2VsbHMuZm9yRWFjaChh''@;'; put 'put ''PT57YS5fdmlldy5kZXN0cm95ZWR8fHRoaXMuX3Njcm9sbGFibGVDZWxscy5pbnNlcnQoYS5fdmlldyl9KX0pfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuZGlzcGxheU1vZGUudmlldy5zdWJzY3JpYmUoYT0+e2ZvcihsZXQgZD10aGlzLl9zY3JvbGxh''@;'; put 'put ''YmxlQ2VsbHMubGVuZ3RoO2Q+MDtkLS0pdGhpcy5fc2Nyb2xsYWJsZUNlbGxzLmRldGFjaCgpO2ZvcihsZXQgZD10aGlzLl9jYWxjdWxhdGVkQ2VsbHMubGVuZ3RoO2Q+MDtkLS0pdGhpcy5fY2FsY3VsYXRlZENlbGxzLmRldGFjaCgpO2E9PT1ReS5DQUxDVUxBVEU/KHRoaXMuZGlzcGxheUNl''@;'; put 'put ''bGxzPSExLHRoaXMuZGdDZWxscy5mb3JFYWNoKGQ9PntkLl92aWV3LmRlc3Ryb3llZHx8dGhpcy5fY2FsY3VsYXRlZENlbGxzLmluc2VydChkLl92aWV3KX0pKToodGhpcy5kaXNwbGF5Q2VsbHM9ITAsdGhpcy5kZ0NlbGxzLmZvckVhY2goZD0+e2QuX3ZpZXcuZGVzdHJveWVkfHx0aGlzLl9z''@;'; put 'put ''Y3JvbGxhYmxlQ2VsbHMuaW5zZXJ0KGQuX3ZpZXcpfSkpfSksdGhpcy5leHBhbmQuYW5pbWF0ZS5zdWJzY3JpYmUoKCk9Pnt0aGlzLmV4cGFuZEFuaW1hdGlvblRyaWdnZXI9IXRoaXMuZXhwYW5kQW5pbWF0aW9uVHJpZ2dlcn0pKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5m''@;'; put 'put ''b3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9dG9nZ2xlKGE9IXRoaXMuc2VsZWN0ZWQpe2EhPT10aGlzLnNlbGVjdGVkJiYodGhpcy5zZWxlY3RlZD1hLHRoaXMuc2VsZWN0ZWRDaGFuZ2VkLmVtaXQoYSkpfXRvZ2dsZUV4cGFuZCgpe3RoaXMuZXhwYW5kLmV4cGFuZGFibGUmJih0aGlzLmV4''@;'; put 'put ''cGFuZEFuaW1hdGlvbi51cGRhdGVTdGFydEhlaWdodCgpLHRoaXMuZXhwYW5kZWQ9IXRoaXMuZXhwYW5kZWQsdGhpcy5leHBhbmRlZENoYW5nZS5lbWl0KHRoaXMuZXhwYW5kZWQpKX1jbGVhclJhbmdlcyhhKXthLnNoaWZ0S2V5JiYodGhpcy5kb2N1bWVudC5nZXRTZWxlY3Rpb24oKS5yZW1v''@;'; put 'put ''dmVBbGxSYW5nZXMoKSwtMSE9PXdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoIkZpcmVmb3giKSYmKGEucHJldmVudERlZmF1bHQoKSx0aGlzLnRvZ2dsZSghMCkpKX1zZWxlY3RSb3coYT0hdGhpcy5zZWxlY3RlZCxkKXsiTEFCRUwiIT09ZC50YXJnZXQudGFnTmFtZSYmKHRo''@;'; put 'put ''aXMuc2VsZWN0aW9uLnNlbGVjdGlvblR5cGU9PT10aGlzLlNFTEVDVElPTl9UWVBFLlNpbmdsZT90aGlzLnNlbGVjdGlvbi5jdXJyZW50U2luZ2xlPXRoaXMuaXRlbTp0aGlzLnRvZ2dsZShhKSl9cmFuZ2VTZWxlY3QoKXtjb25zdCBhPXRoaXMuaXRlbXMuZGlzcGxheWVkO2lmKCFhKXJldHVy''@;'; put 'put ''bjtjb25zdCBkPWEuaW5kZXhPZih0aGlzLnNlbGVjdGlvbi5yYW5nZVN0YXJ0KTtpZih0aGlzLnNlbGVjdGlvbi5yYW5nZVN0YXJ0JiZ0aGlzLnNlbGVjdGlvbi5jdXJyZW50LmluY2x1ZGVzKHRoaXMuc2VsZWN0aW9uLnJhbmdlU3RhcnQpJiZ0aGlzLnNlbGVjdGlvbi5zaGlmdFByZXNzZWQm''@;'; put 'put ''Ji0xIT09ZCl7Y29uc3QgaD1hLmluZGV4T2YodGhpcy5pdGVtKSxmPW5ldyBTZXQodGhpcy5zZWxlY3Rpb24uY3VycmVudC5jb25jYXQoYS5zbGljZShNYXRoLm1pbihkLGgpLE1hdGgubWF4KGQsaCkrMSkpKTt0aGlzLnNlbGVjdGlvbi5jbGVhclNlbGVjdGlvbigpLHRoaXMuc2VsZWN0aW9u''@;'; put 'put ''LmN1cnJlbnQucHVzaCguLi5mKX1lbHNlIHRoaXMuc2VsZWN0aW9uLnJhbmdlU3RhcnQ9dGhpcy5pdGVtfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShlXyksR2UoS3kpLEdlKHF5KSxHZShxeCksR2UoWGYpLEdlKGJHKSxHZShEbyksR2UoRW8p''@;'; put 'put ''LEdlKEppKSxHZShpcyksR2UoZGcpLEdlKHZzKSl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kZy1yb3ciXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmYW8oaCxRZiw0KSwyJmEpe2xldCBmO0NpKGY9U2koKSkmJihkLmRnQ2VsbHM9''@;'; put 'put ''Zil9fSx2aWV3UXVlcnk6ZnVuY3Rpb24oYSxkKXtpZigxJmEmJihxYShWTCw1KSxxYShsQmUsNSkscWEoY0JlLDUsRG8pLHFhKHVCZSw1LERvKSxxYShkQmUsNSxEbykpLDImYSl7bGV0IGg7Q2koaD1TaSgpKSYmKGQuZXhwYW5kQW5pbWF0aW9uPWguZmlyc3QpLENpKGg9U2koKSkmJihkLmRl''@;'; put 'put ''dGFpbEJ1dHRvbj1oLmZpcnN0KSxDaShoPVNpKCkpJiYoZC5fc3RpY2t5Q2VsbHM9aC5maXJzdCksQ2koaD1TaSgpKSYmKGQuX3Njcm9sbGFibGVDZWxscz1oLmZpcnN0KSxDaShoPVNpKCkpJiYoZC5fY2FsY3VsYXRlZENlbGxzPWguZmlyc3QpfX0saG9zdEF0dHJzOlsicm9sZSIsInJvd2dy''@;'; put 'put ''b3VwIl0saG9zdFZhcnM6Nyxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJihocigiYXJpYS1vd25zIixkLmlkKSxUcigiZGF0YWdyaWQtcm93IiwhMCkoImRhdGFncmlkLXJvdy1za2VsZXRvbiIsZC5za2VsZXRvbkxvYWRpbmcpKCJkYXRhZ3JpZC1zZWxlY3RlZCIsZC5zZWxlY3Rl''@;'; put 'put ''ZCkpfSxpbnB1dHM6e2RldGFpbERpc2FibGVkOltObi5Ob25lLCJjbHJEZ0RldGFpbERpc2FibGVkIiwiZGV0YWlsRGlzYWJsZWQiXSxkZXRhaWxIaWRkZW46W05uLk5vbmUsImNsckRnRGV0YWlsSGlkZGVuIiwiZGV0YWlsSGlkZGVuIl0sc2tlbGV0b25Mb2FkaW5nOltObi5Ob25lLCJjbHJE''@;'; put 'put ''Z1NrZWxldG9uTG9hZGluZyIsInNrZWxldG9uTG9hZGluZyJdLGl0ZW06W05uLk5vbmUsImNsckRnSXRlbSIsIml0ZW0iXSxjbHJEZ1NlbGVjdGFibGU6ImNsckRnU2VsZWN0YWJsZSIsc2VsZWN0ZWQ6W05uLk5vbmUsImNsckRnU2VsZWN0ZWQiLCJzZWxlY3RlZCJdLGV4cGFuZGVkOltObi5O''@;'; put 'put ''b25lLCJjbHJEZ0V4cGFuZGVkIiwiZXhwYW5kZWQiXSxjbHJEZ0RldGFpbE9wZW5MYWJlbDoiY2xyRGdEZXRhaWxPcGVuTGFiZWwiLGNsckRnRGV0YWlsQ2xvc2VMYWJlbDoiY2xyRGdEZXRhaWxDbG9zZUxhYmVsIixjbHJEZ1Jvd1NlbGVjdGlvbkxhYmVsOiJjbHJEZ1Jvd1NlbGVjdGlvbkxh''@;'; put 'put ''YmVsIn0sb3V0cHV0czp7c2VsZWN0ZWRDaGFuZ2VkOiJjbHJEZ1NlbGVjdGVkQ2hhbmdlIixleHBhbmRlZENoYW5nZToiY2xyRGdFeHBhbmRlZENoYW5nZSJ9LGZlYXR1cmVzOltkYShbcXgse3Byb3ZpZGU6VTEsdXNlRXhpc3Rpbmc6cXh9LHtwcm92aWRlOkR4LHVzZUV4aXN0aW5nOnF4fV0p''@;'; put 'put ''XSxuZ0NvbnRlbnRTZWxlY3RvcnM6ZkJlLGRlY2xzOjksdmFyczozLGNvbnN0czpbWyJkZXRhaWwiLCIiXSxbInJvd0NvbnRlbnQiLCIiXSxbImNhbGN1bGF0ZWRDZWxscyIsIiJdLFsic3RpY2t5Q2VsbHMiLCIiXSxbInNjcm9sbGFibGVDZWxscyIsIiJdLFsiZGV0YWlsQnV0dG9uIiwiIl0s''@;'; put 'put ''WyJjbGFzcyIsImRhdGFncmlkLXJvdy1jbGlja2FibGUiLDMsIm1vdXNlZG93biIsImNsaWNrIiw0LCJuZ0lmIl0sWzMsImNsckV4cGFuZFRyaWdnZXIiLDQsIm5nSWYiXSxbNCwibmdJZiJdLFsxLCJkYXRhZ3JpZC1yb3ctY2xpY2thYmxlIiwzLCJtb3VzZWRvd24iLCJjbGljayJdLFszLCJj''@;'; put 'put ''bHJFeHBhbmRUcmlnZ2VyIl0sWzMsIm5nVGVtcGxhdGVPdXRsZXQiXSxbInJvbGUiLCJyb3ciLDEsImRhdGFncmlkLXJvdy1tYXN0ZXIiLCJkYXRhZ3JpZC1yb3ctZmxleCIsMywiaWQiXSxbMSwiZGF0YWdyaWQtcm93LXN0aWNreSJdLFsiY2xhc3MiLCJkYXRhZ3JpZC1zZWxlY3QgZGF0YWdy''@;'; put 'put ''aWQtZml4ZWQtY29sdW1uIGRhdGFncmlkLWNlbGwiLCJyb2xlIiwiZ3JpZGNlbGwiLDMsIm5nQ2xhc3MiLDQsIm5nSWYiXSxbImNsYXNzIiwiZGF0YWdyaWQtcm93LWFjdGlvbnMgZGF0YWdyaWQtZml4ZWQtY29sdW1uIGRhdGFncmlkLWNlbGwiLCJyb2xlIiwiZ3JpZGNlbGwiLDQsIm5nSWYi''@;'; put 'put ''XSxbImNsYXNzIiwiZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldCBkYXRhZ3JpZC1maXhlZC1jb2x1bW4gZGF0YWdyaWQtY2VsbCIsInJvbGUiLCJncmlkY2VsbCIsNCwibmdJZiJdLFsiY2xhc3MiLCJkYXRhZ3JpZC1kZXRhaWwtY2FyZXQgZGF0YWdyaWQtZml4ZWQtY29sdW1uIGRhdGFncmlk''@;'; put 'put ''LWNlbGwiLCJyb2xlIiwiZ3JpZGNlbGwiLDQsIm5nSWYiXSxbMSwiZGF0YWdyaWQtcm93LXNjcm9sbGFibGUiLDMsIm5nQ2xhc3MiXSxbMSwiZGF0YWdyaWQtc2Nyb2xsaW5nLWNlbGxzIl0sWyJjbGFzcyIsInNrZWxldG9uLWxvYWRpbmciLDQsIm5nSWYiXSxbInJvbGUiLCJncmlkY2VsbCIs''@;'; put 'put ''MSwiZGF0YWdyaWQtc2VsZWN0IiwiZGF0YWdyaWQtZml4ZWQtY29sdW1uIiwiZGF0YWdyaWQtY2VsbCIsMywibmdDbGFzcyJdLFsxLCJjbHItY2hlY2tib3gtd3JhcHBlciJdLFsidGFiaW5kZXgiLCItMSIsInR5cGUiLCJjaGVja2JveCIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiLCJp''@;'; put 'put ''ZCIsImRpc2FibGVkIl0sWzEsImNsci1jb250cm9sLWxhYmVsIiwiY2xyLWNvbC1udWxsIiwzLCJjbGljayIsImZvciJdLFsxLCJjbHItc3Itb25seSJdLFsidGFiaW5kZXgiLCItMSIsInR5cGUiLCJyYWRpbyIsImNsclJhZGlvIiwiIiwzLCJuZ01vZGVsQ2hhbmdlIiwiaWQiLCJuYW1lIiwi''@;'; put 'put ''dmFsdWUiLCJuZ01vZGVsIiwiY2hlY2tlZCIsImRpc2FibGVkIl0sWzEsImNsci1jb250cm9sLWxhYmVsIiwiY2xyLWNvbC1udWxsIiwzLCJmb3IiXSxbInJvbGUiLCJncmlkY2VsbCIsMSwiZGF0YWdyaWQtcm93LWFjdGlvbnMiLCJkYXRhZ3JpZC1maXhlZC1jb2x1bW4iLCJkYXRhZ3JpZC1j''@;'; put 'put ''ZWxsIl0sWyJyb2xlIiwiZ3JpZGNlbGwiLDEsImRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQiLCJkYXRhZ3JpZC1maXhlZC1jb2x1bW4iLCJkYXRhZ3JpZC1jZWxsIl0sWyJ0YWJpbmRleCIsIi0xIiwidHlwZSIsImJ1dHRvbiIsImNsYXNzIiwiZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldC1i''@;'; put 'put ''dXR0b24iLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJjbHJTbWFsbCIsIiIsNCwibmdJZiJdLFsidGFiaW5kZXgiLCItMSIsInR5cGUiLCJidXR0b24iLDEsImRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQtYnV0dG9uIiwzLCJjbGljayJdLFsic2hhcGUiLCJhbmdsZSIsMSwiZGF0YWdyaWQtZXhw''@;'; put 'put ''YW5kYWJsZS1jYXJldC1pY29uIl0sWyJjbHJTbWFsbCIsIiJdLFsicm9sZSIsImdyaWRjZWxsIiwxLCJkYXRhZ3JpZC1kZXRhaWwtY2FyZXQiLCJkYXRhZ3JpZC1maXhlZC1jb2x1bW4iLCJkYXRhZ3JpZC1jZWxsIl0sWyJ0YWJpbmRleCIsIi0xIiwidHlwZSIsImJ1dHRvbiIsImNsYXNzIiwi''@;'; put 'put ''ZGF0YWdyaWQtZGV0YWlsLWNhcmV0LWJ1dHRvbiIsImFyaWEtaGFzcG9wdXAiLCJkaWFsb2ciLDMsImRpc2FibGVkIiwiaXMtb3BlbiIsImNsaWNrIiw0LCJuZ0lmIl0sWyJ0YWJpbmRleCIsIi0xIiwidHlwZSIsImJ1dHRvbiIsImFyaWEtaGFzcG9wdXAiLCJkaWFsb2ciLDEsImRhdGFncmlk''@;'; put 'put ''LWRldGFpbC1jYXJldC1idXR0b24iLDMsImNsaWNrIiwiZGlzYWJsZWQiXSxbInNoYXBlIiwiYW5nbGUtZG91YmxlIiwxLCJkYXRhZ3JpZC1kZXRhaWwtY2FyZXQtaWNvbiJdLFsxLCJza2VsZXRvbi1sb2FkaW5nIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoaEJlKSxndCgw''@;'; put 'put ''LHlCZSwzLDIsImRpdiIsNikoMSx3QmUsMiwyLCJjbHItZXhwYW5kYWJsZS1hbmltYXRpb24iLDcpKDIsU0JlLDEsMSxudWxsLDgpKDMsTUJlLDEsMCwibmctdGVtcGxhdGUiLG51bGwsMCxJYykoNSxWQmUsMTcsMTQsIm5nLXRlbXBsYXRlIixudWxsLDEsSWMpLEZsKDcsbnVsbCwyKSksMiZh''@;'; put 'put ''JiYoTWUoIm5nSWYiLGQuc2VsZWN0aW9uLnJvd1NlbGVjdGlvbk1vZGUpLGZlKCksTWUoIm5nSWYiLCFkLnNlbGVjdGlvbi5yb3dTZWxlY3Rpb25Nb2RlJiZkLmV4cGFuZC5leHBhbmRhYmxlKSxmZSgpLE1lKCJuZ0lmIiwhZC5zZWxlY3Rpb24ucm93U2VsZWN0aW9uTW9kZSYmIWQuZXhwYW5k''@;'; put 'put ''LmV4cGFuZGFibGUpKX0sZGVwZW5kZW5jaWVzOlt3dSxiYSxOMSxycyxkcyxjRyxsRyxxbCxNZCxiTCxubCwkcyxWTCxSZCxRZix5RyxTcF0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCk7dmFyIFcxPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuV0lEVEg9MF09IldJRFRIIixjW2MuSElEREVOPTFd''@;'; put 'put ''PSJISURERU4iLGNbYy5JTklUSUFMSVpFPTJdPSJJTklUSUFMSVpFIixjfShXMXx8e30pO2NvbnN0IEJaZT1PYmplY3Qua2V5cyhXMSkubWFwKGM9PlcxW2NdKS5maWx0ZXIoYz0+Yz09PXBhcnNlSW50KGMsMTApJiZjIT09VzEuSU5JVElBTElaRSk7bGV0IGhnPSgoKT0+e2NsYXNzIGN7Y29u''@;'; put 'put ''c3RydWN0b3IoKXt0aGlzLmNvbHVtbnM9W10sdGhpcy5jb2x1bW5zU3RhdGVDaGFuZ2U9bmV3IGVpKG51bGwpLHRoaXMuX2NhY2hlPVtdfWdldCBjb2x1bW5TdGF0ZXMoKXtyZXR1cm4gdGhpcy5jb2x1bW5zLm1hcChhPT5hLnZhbHVlKX1nZXQgaGFzSGlkZWFibGVDb2x1bW5zKCl7cmV0dXJu''@;'; put 'put ''IHRoaXMuY29sdW1uU3RhdGVzLmZpbHRlcihhPT5hLmhpZGVhYmxlKS5sZW5ndGg+MH1nZXQgdmlzaWJsZUNvbHVtbnMoKXtyZXR1cm4gdGhpcy5jb2x1bW5TdGF0ZXMuZmlsdGVyKGE9PiFhLmhpZGRlbil9Y2FjaGUoKXt0aGlzLl9jYWNoZT10aGlzLmNvbHVtbnMubWFwKGE9Pntjb25zdCBk''@;'; put 'put ''PXsuLi5hLnZhbHVlfTtyZXR1cm4gZGVsZXRlIGQuY2hhbmdlcyxkfSl9aGFzQ2FjaGUoKXtyZXR1cm4hIXRoaXMuX2NhY2hlLmxlbmd0aH1yZXNldFRvTGFzdENhY2hlKCl7dGhpcy5fY2FjaGUuZm9yRWFjaCgoYSxkKT0+e2NvbnN0IGg9ey4uLmEsY2hhbmdlczpCWmV9O3RoaXMuY29sdW1u''@;'; put 'put ''c1tkXS5uZXh0KGgpLHRoaXMuY29sdW1uc1N0YXRlQ2hhbmdlLm5leHQoaCl9KSx0aGlzLl9jYWNoZT1bXX1lbWl0U3RhdGVDaGFuZ2VBdChhLGQpe3RoaXMuY29sdW1uc1thXSYmdGhpcy5lbWl0U3RhdGVDaGFuZ2UodGhpcy5jb2x1bW5zW2FdLGQpfWVtaXRTdGF0ZUNoYW5nZShhLGQpe2Nv''@;'; put 'put ''bnN0IGg9ey4uLmEudmFsdWUsLi4uZH07YS5uZXh0KGgpLHRoaXMuY29sdW1uc1N0YXRlQ2hhbmdlLm5leHQoaCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9''@;'; put 'put ''KSgpO2NvbnN0IGpaZT17aXRlbVNpemU6MzIsbWluQnVmZmVyUHg6MjAwLG1heEJ1ZmZlclB4OjQwMH07bGV0IFJkZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNLEQsWixyZSxjZSxiZSxFZSxCZSl7dGhpcy5jaGFuZ2VEZXRlY3RvclJlZj1hLHRoaXMuaXRlcmFibGVE''@;'; put 'put ''aWZmZXJzPWQsdGhpcy5pdGVtcz1oLHRoaXMubmdab25lPWYsdGhpcy5yZW5kZXJlcjI9dix0aGlzLnRlbXBsYXRlUmVmPU0sdGhpcy52aWV3Q29udGFpbmVyUmVmPUQsdGhpcy5kaXJlY3Rpb25hbGl0eT1aLHRoaXMuc2Nyb2xsRGlzcGF0Y2hlcj1yZSx0aGlzLnZpZXdwb3J0UnVsZXI9Y2Us''@;'; put 'put ''dGhpcy5kYXRhZ3JpZD1iZSx0aGlzLmNvbHVtbnNTZXJ2aWNlPUVlLHRoaXMuaW5qZWN0b3I9QmUsdGhpcy5yZW5kZXJlZFJhbmdlQ2hhbmdlPW5ldyBLcix0aGlzLnBlcnNpc3RJdGVtcz0hMCx0aGlzLl9jZGtGaXhlZFNpemVWaXJ0dWFsU2Nyb2xsSW5wdXRzPXsuLi5qWmV9LHRoaXMuc3Vi''@;'; put 'put ''c2NyaXB0aW9ucz1bXSx0aGlzLnRvcEluZGV4PTAsdGhpcy5tdXRhdGlvbkNoYW5nZXM9bmV3IE11dGF0aW9uT2JzZXJ2ZXIocWU9PntxZS5mb3JFYWNoKHJ0PT57cnQudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygiZGF0YWdyaWQtY29tcGFjdCIpJiZ0aGlzLml0ZW1TaXplPjI0JiYodGhp''@;'; put 'put ''cy5pdGVtU2l6ZT0yNCl9KX0pLHRoaXMudmlld1JlcGVhdGVyPW5ldyBaMGUsdGhpcy5jZGtWaXJ0dWFsRm9ySW5wdXRzPXtjZGtWaXJ0dWFsRm9yVHJhY2tCeTpxZT0+cWV9LGguc21hcnRlblVwKCksYmUuZGV0YWlsU2VydmljZS5wcmV2ZW50Rm9jdXNTY3JvbGw9ITAsdGhpcy5kYXRhZ3Jp''@;'; put 'put ''ZEVsZW1lbnRSZWY9YmUuZWwsdGhpcy5jZGtWaXJ0dWFsRm9yVGVtcGxhdGVDYWNoZVNpemU9MjAsdGhpcy5tdXRhdGlvbkNoYW5nZXMub2JzZXJ2ZSh0aGlzLmRhdGFncmlkRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LHthdHRyaWJ1dGVGaWx0ZXI6WyJjbGFzcyJdLGF0dHJpYnV0ZU9sZFZh''@;'; put 'put ''bHVlOiEwfSksdGhpcy52aXJ0dWFsU2Nyb2xsU3RyYXRlZ3k9bmV3IEVGZSh0aGlzLl9jZGtGaXhlZFNpemVWaXJ0dWFsU2Nyb2xsSW5wdXRzLml0ZW1TaXplLHRoaXMuX2Nka0ZpeGVkU2l6ZVZpcnR1YWxTY3JvbGxJbnB1dHMubWluQnVmZmVyUHgsdGhpcy5fY2RrRml4ZWRTaXplVmlydHVh''@;'; put 'put ''bFNjcm9sbElucHV0cy5tYXhCdWZmZXJQeCl9Z2V0IGNka1ZpcnR1YWxGb3JPZigpe3JldHVybiB0aGlzLmNka1ZpcnR1YWxGb3JJbnB1dHMuY2RrVmlydHVhbEZvck9mfXNldCBjZGtWaXJ0dWFsRm9yT2YoYSl7dGhpcy5jZGtWaXJ0dWFsRm9ySW5wdXRzLmNka1ZpcnR1YWxGb3JPZj1hLHRo''@;'; put 'put ''aXMuaXRlbXMuYWxsPWEsdGhpcy51cGRhdGVDZGtWaXJ0dWFsRm9ySW5wdXRzKCl9Z2V0IGNka1ZpcnR1YWxGb3JUcmFja0J5KCl7cmV0dXJuIHRoaXMuY2RrVmlydHVhbEZvcklucHV0cy5jZGtWaXJ0dWFsRm9yVHJhY2tCeX1zZXQgY2RrVmlydHVhbEZvclRyYWNrQnkoYSl7dGhpcy5jZGtW''@;'; put 'put ''aXJ0dWFsRm9ySW5wdXRzLmNka1ZpcnR1YWxGb3JUcmFja0J5PWEsdGhpcy51cGRhdGVDZGtWaXJ0dWFsRm9ySW5wdXRzKCl9Z2V0IGNka1ZpcnR1YWxGb3JUZW1wbGF0ZSgpe3JldHVybiB0aGlzPy5jZGtWaXJ0dWFsRm9ySW5wdXRzPy5jZGtWaXJ0dWFsRm9yVGVtcGxhdGV9c2V0IGNka1Zp''@;'; put 'put ''cnR1YWxGb3JUZW1wbGF0ZShhKXt0aGlzLmNka1ZpcnR1YWxGb3JJbnB1dHMuY2RrVmlydHVhbEZvclRlbXBsYXRlPWEsdGhpcy51cGRhdGVDZGtWaXJ0dWFsRm9ySW5wdXRzKCl9Z2V0IGNka1ZpcnR1YWxGb3JUZW1wbGF0ZUNhY2hlU2l6ZSgpe3JldHVybiB0aGlzLmNka1ZpcnR1YWxGb3JJ''@;'; put 'put ''bnB1dHMuY2RrVmlydHVhbEZvclRlbXBsYXRlQ2FjaGVTaXplfXNldCBjZGtWaXJ0dWFsRm9yVGVtcGxhdGVDYWNoZVNpemUoYSl7dGhpcy5jZGtWaXJ0dWFsRm9ySW5wdXRzLmNka1ZpcnR1YWxGb3JUZW1wbGF0ZUNhY2hlU2l6ZT1kNyhhKSx0aGlzLnVwZGF0ZUNka1ZpcnR1YWxGb3JJbnB1''@;'; put 'put ''dHMoKX1nZXQgaXRlbVNpemUoKXtyZXR1cm4gdGhpcy5fY2RrRml4ZWRTaXplVmlydHVhbFNjcm9sbElucHV0cy5pdGVtU2l6ZX1zZXQgaXRlbVNpemUoYSl7dGhpcy5fY2RrRml4ZWRTaXplVmlydHVhbFNjcm9sbElucHV0cy5pdGVtU2l6ZT1kNyhhKSx0aGlzLnVwZGF0ZUZpeGVkU2l6ZVZp''@;'; put 'put ''cnR1YWxTY3JvbGxJbnB1dHMoKX1nZXQgbWluQnVmZmVyUHgoKXtyZXR1cm4gdGhpcy5fY2RrRml4ZWRTaXplVmlydHVhbFNjcm9sbElucHV0cy5taW5CdWZmZXJQeH1zZXQgbWluQnVmZmVyUHgoYSl7dGhpcy5fY2RrRml4ZWRTaXplVmlydHVhbFNjcm9sbElucHV0cy5taW5CdWZmZXJQeD1k''@;'; put 'put ''NyhhKSx0aGlzLnVwZGF0ZUZpeGVkU2l6ZVZpcnR1YWxTY3JvbGxJbnB1dHMoKX1nZXQgbWF4QnVmZmVyUHgoKXtyZXR1cm4gdGhpcy5fY2RrRml4ZWRTaXplVmlydHVhbFNjcm9sbElucHV0cy5tYXhCdWZmZXJQeH1zZXQgbWF4QnVmZmVyUHgoYSl7dGhpcy5fY2RrRml4ZWRTaXplVmlydHVh''@;'; put 'put ''bFNjcm9sbElucHV0cy5tYXhCdWZmZXJQeD1kNyhhKSx0aGlzLnVwZGF0ZUZpeGVkU2l6ZVZpcnR1YWxTY3JvbGxJbnB1dHMoKX1zZXQgZGF0YVJhbmdlKGEpe2EmJih0aGlzLml0ZW1zLnNtYXJ0JiZ0aGlzLml0ZW1zLnNtYXJ0ZW5Eb3duKCksdGhpcy50b3RhbEl0ZW1zPWEudG90YWwsdGhp''@;'; put 'put ''cy51cGRhdGVEYXRhUmFuZ2UoYS5za2lwLGEuZGF0YSkpfWdldCB0b3RhbEl0ZW1zKCl7cmV0dXJuIHRoaXMuX3RvdGFsSXRlbXN9c2V0IHRvdGFsSXRlbXMoYSl7dGhpcy5fdG90YWxJdGVtcz1hfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuaW5qZWN0b3IucnVuSW5Db250ZXh0KCgpPT57dGhp''@;'; put 'put ''cy52aXJ0dWFsU2Nyb2xsVmlld3BvcnQ9dGhpcy5jcmVhdGVWaXJ0dWFsU2Nyb2xsVmlld3BvcnRGb3JEYXRhZ3JpZCh0aGlzLmNoYW5nZURldGVjdG9yUmVmLHRoaXMubmdab25lLHRoaXMucmVuZGVyZXIyLHRoaXMuZGlyZWN0aW9uYWxpdHksdGhpcy5zY3JvbGxEaXNwYXRjaGVyLHRoaXMu''@;'; put 'put ''dmlld3BvcnRSdWxlcix0aGlzLmRhdGFncmlkRWxlbWVudFJlZix0aGlzLnZpcnR1YWxTY3JvbGxTdHJhdGVneSksdGhpcy5jZGtWaXJ0dWFsRm9yPWZ1bmN0aW9uIFVaZShjLGwsYSxkLGgsZil7aWYoK05pZS5tYWpvcjwxOSlyZXR1cm4gbmV3IGtMKGMsbCxhLGQsaCxmKTt7Y29uc3Qgdj1E''@;'; put 'put ''cy5jcmVhdGUoe3BhcmVudDpmaShoYykscHJvdmlkZXJzOlt7cHJvdmlkZTpEeSx1c2VWYWx1ZTpofV19KTtyZXR1cm4gRHMuY3JlYXRlKHtwYXJlbnQ6dixwcm92aWRlcnM6W3twcm92aWRlOkRvLHVzZVZhbHVlOmN9LHtwcm92aWRlOlNsLHVzZVZhbHVlOmx9LHtwcm92aWRlOmVtLHVzZVZh''@;'; put 'put ''bHVlOmF9LHtwcm92aWRlOl9ZLHVzZVZhbHVlOmR9LHtwcm92aWRlOldhLHVzZVZhbHVlOmZ9LHtwcm92aWRlOmtMLHVzZUNsYXNzOmtMfV19KS5nZXQoa0wpfX0odGhpcy52aWV3Q29udGFpbmVyUmVmLHRoaXMudGVtcGxhdGVSZWYsdGhpcy5pdGVyYWJsZURpZmZlcnMsdGhpcy52aWV3UmVw''@;'; put 'put ''ZWF0ZXIsdGhpcy52aXJ0dWFsU2Nyb2xsVmlld3BvcnQsdGhpcy5uZ1pvbmUpLHRoaXMudmlydHVhbFNjcm9sbFZpZXdwb3J0Lm5nT25Jbml0KCl9KSx0aGlzLmdyaWRSb2xlRWxlbWVudD10aGlzLmRhdGFncmlkRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tyb2xl''@;'; put 'put ''PSJncmlkIl0nKSx0aGlzLnVwZGF0ZUNka1ZpcnR1YWxGb3JJbnB1dHMoKSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLml0ZW1zLmNoYW5nZS5zdWJzY3JpYmUoYT0+e3RoaXMuaXRlbXMuc21hcnQmJih0aGlzLmNka1ZpcnR1YWxGb3IuY2RrVmlydHVhbEZvck9mPWEpfSksdGhpcy5j''@;'; put 'put ''ZGtWaXJ0dWFsRm9yLmRhdGFTdHJlYW0uc3Vic2NyaWJlKGE9Pnt0aGlzLnVwZGF0ZUFyaWFSb3dDb3VudChhLmxlbmd0aCl9KSx0aGlzLnZpcnR1YWxTY3JvbGxWaWV3cG9ydC5zY3JvbGxlZEluZGV4Q2hhbmdlLnN1YnNjcmliZShhPT57dGhpcy50b3BJbmRleD1hfSksdGhpcy52aXJ0dWFs''@;'; put 'put ''U2Nyb2xsVmlld3BvcnQucmVuZGVyZWRSYW5nZVN0cmVhbS5zdWJzY3JpYmUoYT0+e3RoaXMucmVuZGVyZWRSYW5nZUNoYW5nZS5lbWl0KGEpfSksdGhpcy5kYXRhZ3JpZC5yZWZyZXNoLnN1YnNjcmliZShhPT57YS5maWx0ZXJzJiZ0aGlzLnNjcm9sbFRvSW5kZXgoMCl9KSx0aGlzLmNvbHVt''@;'; put 'put ''bnNTZXJ2aWNlLmNvbHVtbnNTdGF0ZUNoYW5nZS5zdWJzY3JpYmUoKCk9Pnt0aGlzLnZpZXdSZXBlYXRlci5kZXRhY2goKX0pKX1uZ0RvQ2hlY2soKXt0aGlzLmNka1ZpcnR1YWxGb3I/Lm5nRG9DaGVjaygpLHRoaXMudXBkYXRlQXJpYVJvd0luZGV4ZXMoKX1uZ09uRGVzdHJveSgpe3RoaXMu''@;'; put 'put ''Y2RrVmlydHVhbEZvcj8ubmdPbkRlc3Ryb3koKSx0aGlzLnZpcnR1YWxTY3JvbGxWaWV3cG9ydD8ubmdPbkRlc3Ryb3koKSx0aGlzLm11dGF0aW9uQ2hhbmdlcz8uZGlzY29ubmVjdCgpLHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PnthLnVuc3Vic2NyaWJlKCl9KX1zY3JvbGxVcChh''@;'; put 'put ''LGQ9ImF1dG8iKXt0aGlzLnNjcm9sbFRvSW5kZXgodGhpcy50b3BJbmRleC1hLGQpfXNjcm9sbERvd24oYSxkPSJhdXRvIil7dGhpcy5zY3JvbGxUb0luZGV4KHRoaXMudG9wSW5kZXgrYSxkKX1zY3JvbGxUb0luZGV4KGEsZD0iYXV0byIpe3RoaXMudmlydHVhbFNjcm9sbFZpZXdwb3J0Py5z''@;'; put 'put ''Y3JvbGxUb0luZGV4KGEsZCl9dXBkYXRlRGF0YVJhbmdlKGEsZCl7bGV0IGg9dGhpcy5jZGtWaXJ0dWFsRm9yT2Y7KCF0aGlzLnBlcnNpc3RJdGVtc3x8IWh8fGg/Lmxlbmd0aCE9PXRoaXMudG90YWxJdGVtcykmJihoPUFycmF5KHRoaXMudG90YWxJdGVtcykpLGguc3BsaWNlKGEsZC5sZW5n''@;'; put 'put ''dGgsLi4uZCksdGhpcy5jZGtWaXJ0dWFsRm9yT2Y9QXJyYXkuZnJvbShoKX11cGRhdGVDZGtWaXJ0dWFsRm9ySW5wdXRzKCl7aWYodGhpcy5jZGtWaXJ0dWFsRm9yKWZvcihjb25zdCBhIG9mIE9iamVjdC5rZXlzKHRoaXMuY2RrVmlydHVhbEZvcklucHV0cykpdGhpcy5jZGtWaXJ0dWFsRm9y''@;'; put 'put ''W2FdIT09dGhpcy5jZGtWaXJ0dWFsRm9ySW5wdXRzW2FdJiYodGhpcy5jZGtWaXJ0dWFsRm9yW2FdPXRoaXMuY2RrVmlydHVhbEZvcklucHV0c1thXSl9dXBkYXRlRml4ZWRTaXplVmlydHVhbFNjcm9sbElucHV0cygpe3RoaXMudmlydHVhbFNjcm9sbFN0cmF0ZWd5JiZ0aGlzLnZpcnR1YWxT''@;'; put 'put ''Y3JvbGxTdHJhdGVneS51cGRhdGVJdGVtQW5kQnVmZmVyU2l6ZSh0aGlzLl9jZGtGaXhlZFNpemVWaXJ0dWFsU2Nyb2xsSW5wdXRzLml0ZW1TaXplLHRoaXMuX2Nka0ZpeGVkU2l6ZVZpcnR1YWxTY3JvbGxJbnB1dHMubWluQnVmZmVyUHgsdGhpcy5fY2RrRml4ZWRTaXplVmlydHVhbFNjcm9s''@;'; put 'put ''bElucHV0cy5tYXhCdWZmZXJQeCl9dXBkYXRlQXJpYVJvd0NvdW50KGEpe3RoaXMuZ3JpZFJvbGVFbGVtZW50Py5zZXRBdHRyaWJ1dGUoImFyaWEtcm93Y291bnQiLGEudG9TdHJpbmcoKSl9dXBkYXRlQXJpYVJvd0luZGV4ZXMoKXtmb3IobGV0IGE9MDthPHRoaXMudmlld0NvbnRhaW5lclJl''@;'; put 'put ''Zi5sZW5ndGg7YSsrKXtjb25zdCBkPXRoaXMudmlld0NvbnRhaW5lclJlZi5nZXQoYSk7ZC5yb290Tm9kZXMuZmluZChNPT4iQ0xSLURHLVJPVyI9PT1NLnRhZ05hbWUpPy5xdWVyeVNlbGVjdG9yKCdbcm9sZT0icm93Il0nKT8uc2V0QXR0cmlidXRlKCJhcmlhLXJvd2luZGV4IiwoZC5jb250''@;'; put 'put ''ZXh0LmluZGV4KzEpLnRvU3RyaW5nKCkpfX1jcmVhdGVWaXJ0dWFsU2Nyb2xsVmlld3BvcnRGb3JEYXRhZ3JpZChhLGQsaCxmLHYsTSxELFope2NvbnN0IHJlPUQubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCIuZGF0YWdyaWQiKSxjZT1ELm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3Rv''@;'; put 'put ''cigiLmRhdGFncmlkLXRhYmxlIiksYmU9RC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoIi5kYXRhZ3JpZC1yb3dzIik7bGV0IEJlPTAscWU9MDtmdW5jdGlvbiBydCgpe2JlLnN0eWxlLnRyYW5zZm9ybT1gdHJhbnNsYXRlWSgke0JlfXB4KWAsYmUuc3R5bGUuaGVpZ2h0PXFlLUJlKyJw''@;'; put 'put ''eCJ9Y29uc3QgcHQ9ZnVuY3Rpb24gelplKGMsbCxhLGQsaCxmLHYsTSxEKXtyZXR1cm4rTmllLm1ham9yPDE5P25ldyBEeShjLGwsYSxoLGYsdixNLEQpOkRzLmNyZWF0ZSh7cGFyZW50OmZpKGhjKSxwcm92aWRlcnM6W3twcm92aWRlOkppLHVzZVZhbHVlOmN9LHtwcm92aWRlOkVzLHVzZVZh''@;'; put 'put ''bHVlOmx9LHtwcm92aWRlOldhLHVzZVZhbHVlOmF9LHtwcm92aWRlOkVvLHVzZVZhbHVlOmR9LHtwcm92aWRlOlcwZSx1c2VWYWx1ZTpofSx7cHJvdmlkZTpwbSx1c2VWYWx1ZTpmfSx7cHJvdmlkZTpreSx1c2VWYWx1ZTp2fSx7cHJvdmlkZTpBTCx1c2VWYWx1ZTpNfSx7cHJvdmlkZTokMGUs''@;'; put 'put ''dXNlVmFsdWU6RH0se3Byb3ZpZGU6RHksdXNlQ2xhc3M6RHl9XX0pLmdldChEeSl9KHtuYXRpdmVFbGVtZW50OnJlfSxhLGQsaCxaLGYsdixNLG51bGwpO3JldHVybiBwdC5fY29udGVudFdyYXBwZXI9e25hdGl2ZUVsZW1lbnQ6e3N0eWxlOntzZXQgdHJhbnNmb3JtKGR0KXtCZT12b2lkIDA9''@;'; put 'put ''PT1kdD8wOisvdHJhbnNsYXRlWVwoKFswLTldKylweFwpLy5leGVjKGR0KT8uWzFdLHJ0KCl9fX19LHB0LnNldFRvdGFsQ29udGVudFNpemU9ZHQ9PntxZT1kdCxjZS5zdHlsZS5oZWlnaHQ9YCR7cWV9cHhgLHJ0KCl9LHB0fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJu''@;'; put 'put ''IG5ldyhhfHxjKShHZShFcyksR2UoZW0pLEdlKGRnKSxHZShXYSksR2UoRW8pLEdlKFNsKSxHZShEbyksR2UocG0pLEdlKGt5KSxHZShBTCksR2UoQ3MoKCk9PkFtKSksR2UoaGcpLEdlKGhjKSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsclZpcnR1YWxTY3Jv''@;'; put 'put ''bGwiLCIiXSxbIiIsIkNsclZpcnR1YWxTY3JvbGwiLCIiXV0saW5wdXRzOntwZXJzaXN0SXRlbXM6W05uLk5vbmUsImNsclZpcnR1YWxQZXJzaXN0SXRlbXMiLCJwZXJzaXN0SXRlbXMiXSxjZGtWaXJ0dWFsRm9yT2Y6W05uLk5vbmUsImNsclZpcnR1YWxSb3dzT2YiLCJjZGtWaXJ0dWFsRm9y''@;'; put 'put ''T2YiXSxjZGtWaXJ0dWFsRm9yVHJhY2tCeTpbTm4uTm9uZSwiY2xyVmlydHVhbFJvd3NUcmFja0J5IiwiY2RrVmlydHVhbEZvclRyYWNrQnkiXSxjZGtWaXJ0dWFsRm9yVGVtcGxhdGU6W05uLk5vbmUsImNsclZpcnR1YWxSb3dzVGVtcGxhdGUiLCJjZGtWaXJ0dWFsRm9yVGVtcGxhdGUiXSxj''@;'; put 'put ''ZGtWaXJ0dWFsRm9yVGVtcGxhdGVDYWNoZVNpemU6W05uLk5vbmUsImNsclZpcnR1YWxSb3dzVGVtcGxhdGVDYWNoZVNpemUiLCJjZGtWaXJ0dWFsRm9yVGVtcGxhdGVDYWNoZVNpemUiXSxpdGVtU2l6ZTpbTm4uTm9uZSwiY2xyVmlydHVhbFJvd3NJdGVtU2l6ZSIsIml0ZW1TaXplIl0sbWlu''@;'; put 'put ''QnVmZmVyUHg6W05uLk5vbmUsImNsclZpcnR1YWxSb3dzTWluQnVmZmVyUHgiLCJtaW5CdWZmZXJQeCJdLG1heEJ1ZmZlclB4OltObi5Ob25lLCJjbHJWaXJ0dWFsUm93c01heEJ1ZmZlclB4IiwibWF4QnVmZmVyUHgiXSxkYXRhUmFuZ2U6W05uLk5vbmUsImNsclZpcnR1YWxEYXRhUmFuZ2Ui''@;'; put 'put ''LCJkYXRhUmFuZ2UiXX0sb3V0cHV0czp7cmVuZGVyZWRSYW5nZUNoYW5nZToicmVuZGVyZWRSYW5nZUNoYW5nZSJ9LGZlYXR1cmVzOltkYShbZGddKV19KSxjfSkoKSxMZGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLmZpbHRlcnM9YSx0aGlzLnNvcnQ9ZCx0aGlz''@;'; put 'put ''LnBhZ2U9aCx0aGlzLmRlYm91bmNlcj1mLHRoaXMuY2hhbmdlPXRoaXMuZGVib3VuY2VyLmNoYW5nZS5waXBlKExyKCgpPT50aGlzLnN0YXRlKSl9Z2V0IHN0YXRlKCl7Y29uc3QgYT17fTt0aGlzLnBhZ2Uuc2l6ZT4wJiYoYS5wYWdlPXtmcm9tOnRoaXMucGFnZS5maXJzdEl0ZW0sdG86dGhp''@;'; put 'put ''cy5wYWdlLmxhc3RJdGVtLHNpemU6dGhpcy5wYWdlLnNpemUsY3VycmVudDp0aGlzLnBhZ2UuY3VycmVudH0pLHRoaXMuc29ydC5jb21wYXJhdG9yJiYoYS5zb3J0PXRoaXMuc29ydC5jb21wYXJhdG9yIGluc3RhbmNlb2Ygb08/e2J5OnRoaXMuc29ydC5jb21wYXJhdG9yLnByb3AscmV2ZXJz''@;'; put 'put ''ZTp0aGlzLnNvcnQucmV2ZXJzZX06e2J5OnRoaXMuc29ydC5jb21wYXJhdG9yLHJldmVyc2U6dGhpcy5zb3J0LnJldmVyc2V9KTtjb25zdCBkPXRoaXMuZmlsdGVycy5nZXRBY3RpdmVGaWx0ZXJzKCk7aWYoZC5sZW5ndGg+MCl7YS5maWx0ZXJzPVtdO2Zvcihjb25zdCBoIG9mIGQpYS5maWx0''@;'; put 'put ''ZXJzLnB1c2goaC5zdGF0ZT9oLnN0YXRlOmgpfXJldHVybiBhfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh4cih1ZykseHIoc08pLHhyKE1tKSx4cihHeCkpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9''@;'; put 'put ''KSgpLFRtPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5jb2x1bW5zU2VydmljZT1hLHRoaXMuc3Vic2NyaXB0aW9ucz1bXX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLnNldENlbGxzU3RhdGUoKSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLmNlbGxzLmNoYW5nZXMu''@;'; put 'put ''c3Vic2NyaWJlKCgpPT57dGhpcy5zZXRDZWxsc1N0YXRlKCl9KSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfXNldENlbGxzU3RhdGUoKXt0aGlzLmNlbGxzLmxlbmd0aD09PXRoaXMuY29sdW1uc1NlcnZpY2UuY29sdW1ucy5s''@;'; put 'put ''ZW5ndGgmJnRoaXMuY2VsbHMuZm9yRWFjaCgoYSxkKT0+e3RoaXMuY29sdW1uc1NlcnZpY2UuY29sdW1uc1tkXSYmYS5yZXNldFN0YXRlKHRoaXMuY29sdW1uc1NlcnZpY2UuY29sdW1uc1tkXS52YWx1ZSl9KX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8''@;'; put 'put ''YykoR2UoaGcpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRnLXJvdyJdLFsiY2xyLWRnLXJvdy1kZXRhaWwiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmKGFvKGgsYyw1KSxhbyhoLFNwLDQpKSwyJmEpe2xldCBmO0NpKGY9U2ko''@;'; put 'put ''KSkmJihkLmV4cGFuZGFibGVSb3c9Zi5maXJzdCksQ2koZj1TaSgpKSYmKGQuY2VsbHM9Zil9fX0pLGN9KSgpLEFtPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0sRCxaLHJlLGNlLGJlLEVlLEJlLHFlLHJ0KXt0aGlzLm9yZ2FuaXplcj1hLHRoaXMuaXRlbXM9ZCx0aGlz''@;'; put 'put ''LmV4cGFuZGFibGVSb3dzPWgsdGhpcy5zZWxlY3Rpb249Zix0aGlzLnJvd0FjdGlvblNlcnZpY2U9dix0aGlzLnN0YXRlUHJvdmlkZXI9TSx0aGlzLmRpc3BsYXlNb2RlPUQsdGhpcy5yZW5kZXJlcj1aLHRoaXMuZGV0YWlsU2VydmljZT1yZSx0aGlzLmRvY3VtZW50PWNlLHRoaXMuZWw9YmUs''@;'; put 'put ''dGhpcy5wYWdlPUVlLHRoaXMuY29tbW9uU3RyaW5ncz1CZSx0aGlzLmtleU5hdmlnYXRpb249cWUsdGhpcy56b25lPXJ0LHRoaXMuY2xyRGdTaW5nbGVTZWxlY3Rpb25BcmlhTGFiZWw9dGhpcy5jb21tb25TdHJpbmdzLmtleXMuc2luZ2xlU2VsZWN0aW9uQXJpYUxhYmVsLHRoaXMuY2xyRGdT''@;'; put 'put ''aW5nbGVBY3Rpb25hYmxlQXJpYUxhYmVsPXRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLnNpbmdsZUFjdGlvbmFibGVBcmlhTGFiZWwsdGhpcy5jbHJEZXRhaWxFeHBhbmRhYmxlQXJpYUxhYmVsPXRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLmRldGFpbEV4cGFuZGFibGVBcmlhTGFiZWwsdGhpcy5j''@;'; put 'put ''bHJEZ0Rpc2FibGVQYWdlRm9jdXM9ITEsdGhpcy5zZWxlY3RlZENoYW5nZWQ9bmV3IEtyKCExKSx0aGlzLnNpbmdsZVNlbGVjdGVkQ2hhbmdlZD1uZXcgS3IoITEpLHRoaXMucmVmcmVzaD1uZXcgS3IoITEpLHRoaXMuY3VzdG9tU2VsZWN0QWxsRW5hYmxlZD0hMSx0aGlzLmN1c3RvbVNlbGVj''@;'; put 'put ''dEFsbD1uZXcgS3IsdGhpcy5TRUxFQ1RJT05fVFlQRT1wbCx0aGlzLl9zdWJzY3JpcHRpb25zPVtdO2NvbnN0IHB0PU11KCk7dGhpcy5zZWxlY3RBbGxJZD0iY2xyLWRnLXNlbGVjdC1hbGwtIitwdCxyZS5pZD1wdH1nZXQgbG9hZGluZygpe3JldHVybiB0aGlzLml0ZW1zLmxvYWRpbmd9c2V0''@;'; put 'put ''IGxvYWRpbmcoYSl7dGhpcy5pdGVtcy5sb2FkaW5nPWF9c2V0IHNlbGVjdGVkKGEpe3RoaXMuc2VsZWN0aW9uLnNlbGVjdGlvblR5cGU9YT9wbC5NdWx0aTpwbC5Ob25lLHRoaXMuc2VsZWN0aW9uLnVwZGF0ZUN1cnJlbnQoYSwhMSl9c2V0IHNpbmdsZVNlbGVjdGVkKGEpe3RoaXMuc2VsZWN0''@;'; put 'put ''aW9uLnNlbGVjdGlvblR5cGU9cGwuU2luZ2xlLGE/dGhpcy5zZWxlY3Rpb24uY3VycmVudFNpbmdsZT1hOnRoaXMuc2VsZWN0aW9uLmN1cnJlbnRTaW5nbGUmJih0aGlzLnNlbGVjdGlvbi5jdXJyZW50U2luZ2xlPW51bGwpfXNldCBjbHJEZ1ByZXNlcnZlU2VsZWN0aW9uKGEpe3RoaXMuc2Vs''@;'; put 'put ''ZWN0aW9uLnByZXNlcnZlU2VsZWN0aW9uPWF9c2V0IHJvd1NlbGVjdGlvbk1vZGUoYSl7dGhpcy5zZWxlY3Rpb24ucm93U2VsZWN0aW9uTW9kZT1hfXNldCB0cmFja0J5KGEpe3RoaXMuaXRlbXMudHJhY2tCeT1hfWdldCBhbGxTZWxlY3RlZCgpe3JldHVybiB0aGlzLnNlbGVjdGlvbi5pc0Fs''@;'; put 'put ''bFNlbGVjdGVkKCl9c2V0IGFsbFNlbGVjdGVkKGEpe3RoaXMuY3VzdG9tU2VsZWN0QWxsRW5hYmxlZD90aGlzLmN1c3RvbVNlbGVjdEFsbC5lbWl0KGEpOnRoaXMuc2VsZWN0aW9uLnRvZ2dsZUFsbCgpfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuaXRlbXMuc21hcnR8fCh0aGlzLml0ZW1z''@;'; put 'put ''LmFsbD10aGlzLnJvd3MubWFwKGQ9PmQuaXRlbSkpO2NvbnN0IGE9dGhpcy5yb3dzLmNoYW5nZXMucGlwZShWMShkPT5feChmbyhkLm1hcChoPT5oLml0ZW0pKSxxOChkLm1hcChoPT5oLml0ZW1DaGFuZ2VzKSkucGlwZShmbSgwKSkpKSk7dGhpcy5fc3Vic2NyaXB0aW9ucy5wdXNoKGEuc3Vi''@;'; put 'put ''c2NyaWJlKGQ9Pnt0aGlzLml0ZW1zLnNtYXJ0fHwodGhpcy5pdGVtcy5hbGw9ZCl9KSx0aGlzLnJvd3MuY2hhbmdlcy5zdWJzY3JpYmUoKCk9Pntmb3IobGV0IGQ9dGhpcy5fZGlzcGxheWVkUm93cy5sZW5ndGgtMTtkPj0wO2QtLSl0aGlzLl9kaXNwbGF5ZWRSb3dzLmdldChkKS5kZXN0cm95''@;'; put 'put ''ZWQmJnRoaXMuX2Rpc3BsYXllZFJvd3MucmVtb3ZlKGQpO2lmKHRoaXMucm93cy5mb3JFYWNoKGQ9Pnt0aGlzLl9kaXNwbGF5ZWRSb3dzLmluc2VydChkLl92aWV3KX0pLHRoaXMudXBkYXRlRGV0YWlsU3RhdGUoKSx0aGlzLnZpcnR1YWxTY3JvbGwpe2NvbnN0IGQ9dGhpcy5rZXlOYXZpZ2F0''@;'; put 'put ''aW9uLmdldEFjdGl2ZUNlbGwoKTtkJiZ0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntzZXRUaW1lb3V0KCgpPT50aGlzLmtleU5hdmlnYXRpb24uc2V0QWN0aXZlQ2VsbChkKSl9KX19KSl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5rZXlOYXZpZ2F0aW9uLmluaXRpYWxpemVLZXlH''@;'; put 'put ''cmlkKHRoaXMuZWwubmF0aXZlRWxlbWVudCksdGhpcy51cGRhdGVEZXRhaWxTdGF0ZSgpLHRoaXMucmVmcmVzaC5lbWl0KHRoaXMuc3RhdGVQcm92aWRlci5zdGF0ZSksdGhpcy5fc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuc3RhdGVQcm92aWRlci5jaGFuZ2Uuc3Vic2NyaWJlKGE9PnRoaXMu''@;'; put 'put ''cmVmcmVzaC5lbWl0KGEpKSx0aGlzLnNlbGVjdGlvbi5jaGFuZ2Uuc3Vic2NyaWJlKGE9Pnt0aGlzLnNlbGVjdGlvbi5zZWxlY3Rpb25UeXBlPT09cGwuU2luZ2xlP3RoaXMuc2luZ2xlU2VsZWN0ZWRDaGFuZ2VkLmVtaXQoYSk6dGhpcy5zZWxlY3Rpb24uc2VsZWN0aW9uVHlwZT09PXBsLk11''@;'; put 'put ''bHRpJiZ0aGlzLnNlbGVjdGVkQ2hhbmdlZC5lbWl0KGEpfSksdGhpcy5wYWdlLmNoYW5nZS5zdWJzY3JpYmUoKCk9Pnt0aGlzLmtleU5hdmlnYXRpb24ucmVzZXRLZXlHcmlkKCksdGhpcy5jbHJEZ0Rpc2FibGVQYWdlRm9jdXN8fHRoaXMuZGF0YWdyaWRUYWJsZS5uYXRpdmVFbGVtZW50LmZv''@;'; put 'put ''Y3VzKCl9KSx0aGlzLmRpc3BsYXlNb2RlLnZpZXcuc3Vic2NyaWJlKGE9Pntmb3IobGV0IGQ9dGhpcy5fcHJvamVjdGVkRGlzcGxheUNvbHVtbnMubGVuZ3RoO2Q+MDtkLS0pdGhpcy5fcHJvamVjdGVkRGlzcGxheUNvbHVtbnMuZGV0YWNoKCk7Zm9yKGxldCBkPXRoaXMuX3Byb2plY3RlZENh''@;'; put 'put ''bGN1bGF0aW9uQ29sdW1ucy5sZW5ndGg7ZD4wO2QtLSl0aGlzLl9wcm9qZWN0ZWRDYWxjdWxhdGlvbkNvbHVtbnMuZGV0YWNoKCk7Zm9yKGxldCBkPXRoaXMuX2NhbGN1bGF0aW9uUm93cy5sZW5ndGg7ZD4wO2QtLSl0aGlzLl9jYWxjdWxhdGlvblJvd3MuZGV0YWNoKCk7Zm9yKGxldCBkPXRo''@;'; put 'put ''aXMuX2Rpc3BsYXllZFJvd3MubGVuZ3RoO2Q+MDtkLS0pdGhpcy5fZGlzcGxheWVkUm93cy5kZXRhY2goKTthPT09UXkuRElTUExBWT8odGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsImRhdGFncmlkLWNhbGN1bGF0ZS1tb2RlIiksdGhpcy5jb2x1bW5z''@;'; put 'put ''LmZvckVhY2goZD0+e3RoaXMuX3Byb2plY3RlZERpc3BsYXlDb2x1bW5zLmluc2VydChkLl92aWV3KX0pLHRoaXMucm93cy5mb3JFYWNoKGQ9Pnt0aGlzLl9kaXNwbGF5ZWRSb3dzLmluc2VydChkLl92aWV3KX0pKToodGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1l''@;'; put 'put ''bnQsImRhdGFncmlkLWNhbGN1bGF0ZS1tb2RlIiksdGhpcy5jb2x1bW5zLmZvckVhY2goZD0+e3RoaXMuX3Byb2plY3RlZENhbGN1bGF0aW9uQ29sdW1ucy5pbnNlcnQoZC5fdmlldyl9KSx0aGlzLnJvd3MuZm9yRWFjaChkPT57dGhpcy5fY2FsY3VsYXRpb25Sb3dzLmluc2VydChkLl92aWV3''@;'; put 'put ''KX0pKX0pKSx0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLl9zdWJzY3JpcHRpb25zLnB1c2goeGQodGhpcy5kb2N1bWVudC5ib2R5LCJrZXlkb3duIikuc3Vic2NyaWJlKGE9PnsiU2hpZnQiPT09YS5rZXkmJih0aGlzLnNlbGVjdGlvbi5zaGlmdFByZXNzZWQ9ITApfSks''@;'; put 'put ''eGQodGhpcy5kb2N1bWVudC5ib2R5LCJrZXl1cCIpLnN1YnNjcmliZShhPT57IlNoaWZ0Ij09PWEua2V5JiYodGhpcy5zZWxlY3Rpb24uc2hpZnRQcmVzc2VkPSExKX0pKX0pfW5nT25EZXN0cm95KCl7dGhpcy5fc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9dG9n''@;'; put 'put ''Z2xlQWxsU2VsZWN0ZWQoYSl7YS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuc2VsZWN0QWxsQ2hlY2tib3g/Lm5hdGl2ZUVsZW1lbnQuY2xpY2soKX1yZXNpemUoKXt0aGlzLm9yZ2FuaXplci5yZXNpemUoKX11cGRhdGVEZXRhaWxTdGF0ZSgpe2lmKHRoaXMuZGV0YWlsU2VydmljZS5zdGF0ZSYm''@;'; put 'put ''dGhpcy5kZXRhaWxTZXJ2aWNlLmlzT3Blbil7Y29uc3QgYT10aGlzLnJvd3MuZmluZChkPT50aGlzLml0ZW1zLnRyYWNrQnkoZC5pdGVtKT09PXRoaXMuaXRlbXMudHJhY2tCeSh0aGlzLmRldGFpbFNlcnZpY2Uuc3RhdGUpKTthP3RoaXMuZGV0YWlsU2VydmljZS5vcGVuKGEuaXRlbSxhLmRl''@;'; put 'put ''dGFpbEJ1dHRvbi5uYXRpdmVFbGVtZW50KTp0aGlzLnZpcnR1YWxTY3JvbGx8fHNldFRpbWVvdXQoKCk9Pnt0aGlzLmRldGFpbFNlcnZpY2UuY2xvc2UoKX0pfX1kYXRhQ2hhbmdlZCgpe3RoaXMuaXRlbXMucmVmcmVzaCgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJu''@;'; put 'put ''IG5ldyhhfHxjKShHZShJNyksR2UoZGcpLEdlKHF5KSxHZShlXyksR2UoS3kpLEdlKExkZSksR2UoYkcpLEdlKEVvKSxHZShYZiksR2UodnMpLEdlKEppKSxHZShNbSksR2UoaXMpLEdlKHJPKSxHZShXYSkpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGF0YWdy''@;'; put 'put ''aWQiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmKGFvKGgsUmRlLDUpLGFvKGgsSnksNSksYW8oaCxnRyw1KSxhbyhoLFI3LDQpLGFvKGgsRW0sNCkpLDImYSl7bGV0IGY7Q2koZj1TaSgpKSYmKGQudmlydHVhbFNjcm9sbD1mLmZpcnN0KSxDaShmPVNpKCkpJiYo''@;'; put 'put ''ZC5pdGVyYXRvcj1mLmZpcnN0KSxDaShmPVNpKCkpJiYoZC5wbGFjZWhvbGRlcj1mLmZpcnN0KSxDaShmPVNpKCkpJiYoZC5jb2x1bW5zPWYpLENpKGY9U2koKSkmJihkLnJvd3M9Zil9fSx2aWV3UXVlcnk6ZnVuY3Rpb24oYSxkKXtpZigxJmEmJihxYShCQmUsNSxKaSkscWEoakJlLDUsSmkp''@;'; put 'put ''LHFhKHpCZSw1LERvKSxxYShVQmUsNSxEbykscWEoWkJlLDUsRG8pLHFhKFdCZSw1LERvKSxxYShZQmUsNSxEbykscWEoR0JlLDUpKSwyJmEpe2xldCBoO0NpKGg9U2koKSkmJihkLmRhdGFncmlkPWguZmlyc3QpLENpKGg9U2koKSkmJihkLmRhdGFncmlkVGFibGU9aC5maXJzdCksQ2koaD1T''@;'; put 'put ''aSgpKSYmKGQuc2Nyb2xsYWJsZUNvbHVtbnM9aC5maXJzdCksQ2koaD1TaSgpKSYmKGQuX3Byb2plY3RlZERpc3BsYXlDb2x1bW5zPWguZmlyc3QpLENpKGg9U2koKSkmJihkLl9wcm9qZWN0ZWRDYWxjdWxhdGlvbkNvbHVtbnM9aC5maXJzdCksQ2koaD1TaSgpKSYmKGQuX2Rpc3BsYXllZFJv''@;'; put 'put ''d3M9aC5maXJzdCksQ2koaD1TaSgpKSYmKGQuX2NhbGN1bGF0aW9uUm93cz1oLmZpcnN0KSxDaShoPVNpKCkpJiYoZC5zZWxlY3RBbGxDaGVja2JveD1oLmZpcnN0KX19LGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZUcigiZGF0YWdyaWQtaG9zdCIsITApKCJk''@;'; put 'put ''YXRhZ3JpZC1kZXRhaWwtb3BlbiIsZC5kZXRhaWxTZXJ2aWNlLmlzT3Blbil9LGlucHV0czp7bG9hZGluZ01vcmVJdGVtczpbTm4uTm9uZSwiY2xyTG9hZGluZ01vcmVJdGVtcyIsImxvYWRpbmdNb3JlSXRlbXMiXSxjbHJEZ1NpbmdsZVNlbGVjdGlvbkFyaWFMYWJlbDoiY2xyRGdTaW5nbGVT''@;'; put 'put ''ZWxlY3Rpb25BcmlhTGFiZWwiLGNsckRnU2luZ2xlQWN0aW9uYWJsZUFyaWFMYWJlbDoiY2xyRGdTaW5nbGVBY3Rpb25hYmxlQXJpYUxhYmVsIixjbHJEZXRhaWxFeHBhbmRhYmxlQXJpYUxhYmVsOiJjbHJEZXRhaWxFeHBhbmRhYmxlQXJpYUxhYmVsIixjbHJEZ0Rpc2FibGVQYWdlRm9jdXM6''@;'; put 'put ''ImNsckRnRGlzYWJsZVBhZ2VGb2N1cyIsY3VzdG9tU2VsZWN0QWxsRW5hYmxlZDpbTm4uTm9uZSwiY2xyRGdDdXN0b21TZWxlY3RBbGxFbmFibGVkIiwiY3VzdG9tU2VsZWN0QWxsRW5hYmxlZCJdLGxvYWRpbmc6W05uLk5vbmUsImNsckRnTG9hZGluZyIsImxvYWRpbmciXSxzZWxlY3RlZDpb''@;'; put 'put ''Tm4uTm9uZSwiY2xyRGdTZWxlY3RlZCIsInNlbGVjdGVkIl0sc2luZ2xlU2VsZWN0ZWQ6W05uLk5vbmUsImNsckRnU2luZ2xlU2VsZWN0ZWQiLCJzaW5nbGVTZWxlY3RlZCJdLGNsckRnUHJlc2VydmVTZWxlY3Rpb246ImNsckRnUHJlc2VydmVTZWxlY3Rpb24iLHJvd1NlbGVjdGlvbk1vZGU6''@;'; put 'put ''W05uLk5vbmUsImNsckRnUm93U2VsZWN0aW9uIiwicm93U2VsZWN0aW9uTW9kZSJdLHRyYWNrQnk6W05uLk5vbmUsImNsckRnSXRlbXNUcmFja0J5IiwidHJhY2tCeSJdfSxvdXRwdXRzOntzZWxlY3RlZENoYW5nZWQ6ImNsckRnU2VsZWN0ZWRDaGFuZ2UiLHNpbmdsZVNlbGVjdGVkQ2hhbmdl''@;'; put 'put ''ZDoiY2xyRGdTaW5nbGVTZWxlY3RlZENoYW5nZSIscmVmcmVzaDoiY2xyRGdSZWZyZXNoIixjdXN0b21TZWxlY3RBbGw6ImNsckRnQ3VzdG9tU2VsZWN0QWxsIn0sZmVhdHVyZXM6W2RhKFtlXyxzTyx1ZyxNbSxkZyxJNyxLeSxxeSxHeCxYZixMZGUscEcsaGcsYkcsck9dKV0sbmdDb250ZW50''@;'; put 'put ''U2VsZWN0b3JzOktCZSxkZWNsczozNSx2YXJzOjksY29uc3RzOltbImRhdGFncmlkIiwiIl0sWyJkYXRhZ3JpZFRhYmxlIiwiIl0sWyJwcm9qZWN0ZWREaXNwbGF5Q29sdW1ucyIsIiJdLFsiZGlzcGxheWVkUm93cyIsIiJdLFsicHJvamVjdGVkQ2FsY3VsYXRpb25Db2x1bW5zIiwiIl0sWyJj''@;'; put 'put ''YWxjdWxhdGlvblJvd3MiLCIiXSxbInNlbGVjdEFsbENoZWNrYm94IiwiIl0sWzEsImRhdGFncmlkLW91dGVyLXdyYXBwZXIiXSxbMSwiZGF0YWdyaWQtaW5uZXItd3JhcHBlciJdLFsxLCJkYXRhZ3JpZCJdLFsxLCJkYXRhZ3JpZC10YWJsZS13cmFwcGVyIl0sWyJyb2xlIiwiZ3JpZCIsInRh''@;'; put 'put ''YmluZGV4IiwiLTEiLDEsImRhdGFncmlkLXRhYmxlIl0sWyJyb2xlIiwicm93Z3JvdXAiLDEsImRhdGFncmlkLWhlYWRlciJdLFsicm9sZSIsInJvdyIsMSwiZGF0YWdyaWQtcm93Il0sWzEsImRhdGFncmlkLXJvdy1tYXN0ZXIiLCJkYXRhZ3JpZC1yb3ctZmxleCJdLFsxLCJkYXRhZ3JpZC1y''@;'; put 'put ''b3ctc3RpY2t5Il0sWyJyb2xlIiwiY29sdW1uaGVhZGVyIiwiY2xhc3MiLCJkYXRhZ3JpZC1jb2x1bW4gZGF0YWdyaWQtc2VsZWN0IGRhdGFncmlkLWZpeGVkLWNvbHVtbiIsMywia2V5ZG93bi5zcGFjZSIsNCwibmdJZiJdLFsicm9sZSIsImNvbHVtbmhlYWRlciIsImNsYXNzIiwiZGF0YWdy''@;'; put 'put ''aWQtY29sdW1uIGRhdGFncmlkLXNlbGVjdCBkYXRhZ3JpZC1maXhlZC1jb2x1bW4iLDQsIm5nSWYiXSxbInJvbGUiLCJjb2x1bW5oZWFkZXIiLCJjbGFzcyIsImRhdGFncmlkLWNvbHVtbiBkYXRhZ3JpZC1yb3ctYWN0aW9ucyBkYXRhZ3JpZC1maXhlZC1jb2x1bW4iLDQsIm5nSWYiXSxbInJv''@;'; put 'put ''bGUiLCJjb2x1bW5oZWFkZXIiLCJjbGFzcyIsImRhdGFncmlkLWNvbHVtbiBkYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0IGRhdGFncmlkLWZpeGVkLWNvbHVtbiIsNCwibmdJZiJdLFsxLCJkYXRhZ3JpZC1yb3ctc2Nyb2xsYWJsZSJdLFsicm9sZSIsInByZXNlbnRhdGlvbiIsMSwiZGF0YWdy''@;'; put 'put ''aWQtcm93cyJdLFsiY2xhc3MiLCJkYXRhZ3JpZC1yb3ctbG9hZGluZyIsNCwibmdJZiJdLFs0LCJuZ0lmIl0sWyJjbGFzcyIsImRhdGFncmlkLXNwaW5uZXIiLDQsIm5nSWYiXSxbMSwiZGF0YWdyaWQtY2FsY3VsYXRpb24tdGFibGUiXSxbMSwiZGF0YWdyaWQtY2FsY3VsYXRpb24taGVhZGVy''@;'; put 'put ''Il0sWyJyb2xlIiwiY29sdW1uaGVhZGVyIiwxLCJkYXRhZ3JpZC1jb2x1bW4iLCJkYXRhZ3JpZC1zZWxlY3QiLCJkYXRhZ3JpZC1maXhlZC1jb2x1bW4iLDMsImtleWRvd24uc3BhY2UiXSxbImNsYXNzIiwiY2xyLWNoZWNrYm94LXdyYXBwZXIiLDQsIm5nSWYiXSxbMSwiZGF0YWdyaWQtY29s''@;'; put 'put ''dW1uLXNlcGFyYXRvciJdLFsxLCJjbHItY2hlY2tib3gtd3JhcHBlciJdLFsidHlwZSIsImNoZWNrYm94IiwidGFiaW5kZXgiLCItMSIsMywibmdNb2RlbENoYW5nZSIsImlkIiwibmdNb2RlbCJdLFsxLCJjbHItY29udHJvbC1sYWJlbCIsImNsci1jb2wtbnVsbCIsMywiZm9yIl0sWzEsImNs''@;'; put 'put ''ci1zci1vbmx5Il0sWyJyb2xlIiwiY29sdW1uaGVhZGVyIiwxLCJkYXRhZ3JpZC1jb2x1bW4iLCJkYXRhZ3JpZC1zZWxlY3QiLCJkYXRhZ3JpZC1maXhlZC1jb2x1bW4iXSxbInJvbGUiLCJjb2x1bW5oZWFkZXIiLDEsImRhdGFncmlkLWNvbHVtbiIsImRhdGFncmlkLXJvdy1hY3Rpb25zIiwi''@;'; put 'put ''ZGF0YWdyaWQtZml4ZWQtY29sdW1uIl0sWyJyb2xlIiwiY29sdW1uaGVhZGVyIiwxLCJkYXRhZ3JpZC1jb2x1bW4iLCJkYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0IiwiZGF0YWdyaWQtZml4ZWQtY29sdW1uIl0sWzEsImRhdGFncmlkLXJvdy1sb2FkaW5nIl0sWyJjbHJNZWRpdW0iLCIiXSxb''@;'; put 'put ''MSwiZGF0YWdyaWQtc3Bpbm5lciJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKCRCZSksWXIoMCksZGUoMSwiZGl2Iiw3KSgyLCJkaXYiLDgpKDMsImRpdiIsOSwwKSg1LCJkaXYiLDEwKSg2LCJkaXYiLDExLDEpKDgsImRpdiIsMTIpKDksImRpdiIsMTMpKDEwLCJkaXYiLDE0''@;'; put 'put ''KSgxMSwiZGl2IiwxNSksZ3QoMTIsWEJlLDMsMSwiZGl2IiwxNikoMTMsSkJlLDQsMSwiZGl2IiwxNykoMTQsUUJlLDQsMSwiZGl2IiwxOCkoMTUsZWplLDQsMSwiZGl2IiwxOSksaGUoKSxkZSgxNiwiZGl2IiwyMCksRmwoMTcsbnVsbCwyKSxoZSgpKCkoKSgpLGRlKDE5LCJkaXYiLDIxKSxn''@;'; put 'put ''dCgyMCx0amUsNSwxLCJjbHItZGctcm93IiwyMiksRmwoMjEsbnVsbCwzKSxndCgyMyxuamUsNSwxLCJjbHItZGctcm93IiwyMiksWXIoMjQsMSksZ3QoMjUscmplLDEsMCwiY2xyLWRnLXBsYWNlaG9sZGVyIiwyMyksaGUoKSgpKCkoKSxZcigyNiwyKSxndCgyNyxpamUsMywwLCJkaXYiLDI0''@;'; put 'put ''KSxoZSgpLFlyKDI4LDMpLGhlKCksZGUoMjksImRpdiIsMjUpKDMwLCJkaXYiLDI2KSxGbCgzMSxudWxsLDQpLGhlKCksRmwoMzMsbnVsbCw1KSxoZSgpKSwyJmEmJihmZSgzKSxocigiYXJpYS1oaWRkZW4iLCEhZC5kZXRhaWxTZXJ2aWNlLmlzT3Blbnx8bnVsbCksZmUoOSksTWUoIm5nSWYi''@;'; put 'put ''LGQuc2VsZWN0aW9uLnNlbGVjdGlvblR5cGU9PT1kLlNFTEVDVElPTl9UWVBFLk11bHRpKSxmZSgpLE1lKCJuZ0lmIixkLnNlbGVjdGlvbi5zZWxlY3Rpb25UeXBlPT09ZC5TRUxFQ1RJT05fVFlQRS5TaW5nbGUpLGZlKCksTWUoIm5nSWYiLGQucm93QWN0aW9uU2VydmljZS5oYXNBY3Rpb25h''@;'; put 'put ''YmxlUm93KSxmZSgpLE1lKCJuZ0lmIixkLmV4cGFuZGFibGVSb3dzLmhhc0V4cGFuZGFibGVSb3d8fGQuZGV0YWlsU2VydmljZS5lbmFibGVkKSxmZSg1KSxNZSgibmdJZiIsZC5sb2FkaW5nTW9yZUl0ZW1zKSxmZSgzKSxNZSgibmdJZiIsZC5sb2FkaW5nTW9yZUl0ZW1zKSxmZSgyKSxNZSgi''@;'; put 'put ''bmdJZiIsIWQucGxhY2Vob2xkZXIpLGZlKDIpLE1lKCJuZ0lmIixkLmxvYWRpbmcpKX0sZGVwZW5kZW5jaWVzOltiYSxkcyxNZCxubCwkcyxSZCxRZixnRyxFbSx5RyxTcCxUbSxrNyxEN10sZW5jYXBzdWxhdGlvbjoyfSksY30pKCk7Y29uc3QgR1plPWM9PmM7bGV0IE9kZT0oKCk9PntjbGFz''@;'; put 'put ''cyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5jb21tb25TdHJpbmdzPWEsdGhpcy5jb2x1bW5zU2VydmljZT1kLHRoaXMuYWxsU2VsZWN0ZWQ9bmV3IEtyfWdldCBjbHJBbGxTZWxlY3RlZCgpe3JldHVybiB0aGlzLmFsbFNlbGVjdGVkLmFzT2JzZXJ2YWJsZSgpfWdldCBhbGxIaWRlYWJsZXNW''@;'; put 'put ''aXNpYmxlKCl7cmV0dXJuIDA9PT10aGlzLmhpZGVhYmxlQ29sdW1ucygpLmZpbHRlcihhPT5hLnZhbHVlLmhpZGRlbikubGVuZ3RofXNlbGVjdEFsbCgpe3RoaXMuaGlkZWFibGVDb2x1bW5zKCkuZm9yRWFjaChhPT50aGlzLmNvbHVtbnNTZXJ2aWNlLmVtaXRTdGF0ZUNoYW5nZShhLHtoaWRk''@;'; put 'put ''ZW46ITEsY2hhbmdlczpbVzEuSElEREVOXX0pKSx0aGlzLmFsbFNlbGVjdGVkLm5leHQoITApfWhpZGVhYmxlQ29sdW1ucygpe3JldHVybiB0aGlzLmNvbHVtbnNTZXJ2aWNlLmNvbHVtbnMuZmlsdGVyKGE9PmEudmFsdWUuaGlkZWFibGUpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24o''@;'; put 'put ''YSl7cmV0dXJuIG5ldyhhfHxjKShHZShpcyksR2UoaGcpKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRnLWNvbHVtbi10b2dnbGUtYnV0dG9uIl1dLG91dHB1dHM6e2NsckFsbFNlbGVjdGVkOiJjbHJBbGxTZWxlY3RlZCJ9LGRlY2xzOjIsdmFyczoyLGNvbnN0''@;'; put 'put ''czpbWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tbGluayIsInN3aXRjaC1idXR0b24iLDMsImNsaWNrIiwiZGlzYWJsZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihkZSgwLCJidXR0b24iLDApLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5z''@;'; put 'put ''ZWxlY3RBbGwoKX0pLExlKDEpLGhlKCkpLDImYSYmKE1lKCJkaXNhYmxlZCIsZC5hbGxIaWRlYWJsZXNWaXNpYmxlKSxmZSgpLElyKCIgIixkLmNvbW1vblN0cmluZ3Mua2V5cy5zZWxlY3RBbGwsIiAiKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLFBkZT0oKCk9PntjbGFzcyBje2NvbnN0''@;'; put 'put ''cnVjdG9yKGEsZCxoKXt0aGlzLmNvbW1vblN0cmluZ3M9YSx0aGlzLmNvbHVtbnNTZXJ2aWNlPWQsdGhpcy5wb3BvdmVySWQ9TXUoKSx0aGlzLm9wZW5TdGF0ZT0hMSx0aGlzLnNtYXJ0UG9zaXRpb249e2F4aXM6aDEuVkVSVElDQUwsc2lkZTpSMi5CRUZPUkUsYW5jaG9yOk9zLlNUQVJULGNv''@;'; put 'put ''bnRlbnQ6T3MuU1RBUlR9LHRoaXMudHJhY2tCeUZuPUdaZSx0aGlzLnN1YnNjcmlwdGlvbj1oLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKGY9PnRoaXMub3BlblN0YXRlPWYpfWdldCBhbGxDb2x1bW5zVmlzaWJsZSgpe3JldHVybiB0aGlzLl9hbGxDb2x1bW5zVmlzaWJsZX1zZXQgYWxsQ29sdW1u''@;'; put 'put ''c1Zpc2libGUoYSl7dGhpcy5fYWxsQ29sdW1uc1Zpc2libGU9YX1nZXQgaGlkZWFibGVDb2x1bW5TdGF0ZXMoKXtyZXR1cm4gdGhpcy5jb2x1bW5zU2VydmljZS5jb2x1bW5zLmZpbHRlcihkPT5kLnZhbHVlLmhpZGVhYmxlKS5tYXAoZD0+ZC52YWx1ZSl9Z2V0IGhhc09ubHlPbmVWaXNpYmxl''@;'; put 'put ''Q29sdW1uKCl7cmV0dXJuIHRoaXMuY29sdW1uc1NlcnZpY2UuY29sdW1ucy5sZW5ndGgtdGhpcy5oaWRlYWJsZUNvbHVtblN0YXRlcy5sZW5ndGg9PTAmJjE9PT10aGlzLmhpZGVhYmxlQ29sdW1uU3RhdGVzLmZpbHRlcihkPT4hZC5oaWRkZW4pLmxlbmd0aH1uZ09uRGVzdHJveSgpe3RoaXMu''@;'; put 'put ''c3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9dG9nZ2xlQ29sdW1uU3RhdGUoYSxkKXtjb25zdCBoPXRoaXMuY29sdW1uc1NlcnZpY2UuY29sdW1ucy5maWx0ZXIoZj0+Zi52YWx1ZT09PWEpWzBdO3RoaXMuY29sdW1uc1NlcnZpY2UuZW1pdFN0YXRlQ2hhbmdlKGgse2hpZGRlbjpkLGNoYW5n''@;'; put 'put ''ZXM6W1cxLkhJRERFTl19KX10b2dnbGVTd2l0Y2hQYW5lbCgpe3RoaXMub3BlblN0YXRlPSF0aGlzLm9wZW5TdGF0ZX1hbGxDb2x1bW5zU2VsZWN0ZWQoKXt0aGlzLmFsbFNlbGVjdGVkRWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihh''@;'; put 'put ''KXtyZXR1cm4gbmV3KGF8fGMpKEdlKGlzKSxHZShoZyksR2Uoc2MpKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRnLWNvbHVtbi10b2dnbGUiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiZxYShvamUsNSxKaSksMiZhKXtsZXQgaDtDaShoPVNp''@;'; put 'put ''KCkpJiYoZC5hbGxTZWxlY3RlZEVsZW1lbnQ9aC5maXJzdCl9fSxob3N0VmFyczo0LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmVHIoImNvbHVtbi1zd2l0Y2gtd3JhcHBlciIsITApKCJhY3RpdmUiLGQub3BlblN0YXRlKX0sZmVhdHVyZXM6W3ZkKFtvZ10pXSxkZWNsczozLHZh''@;'; put 'put ''cnM6OCxjb25zdHM6W1siYWxsU2VsZWN0ZWQiLCIiXSxbInJvbGUiLCJidXR0b24iLCJ0eXBlIiwiYnV0dG9uIiwiY2xyUG9wb3ZlckFuY2hvciIsIiIsImNsclBvcG92ZXJPcGVuQ2xvc2VCdXR0b24iLCIiLDEsImJ0biIsImJ0bi1zbSIsImNvbHVtbi10b2dnbGUtLWFjdGlvbiJdLFsiY2xh''@;'; put 'put ''c3MiLCJjb2x1bW4tc3dpdGNoIiwicm9sZSIsImRpYWxvZyIsImNka1RyYXBGb2N1cyIsIiIsMywiaWQiLDQsImNsclBvcG92ZXJDb250ZW50IiwiY2xyUG9wb3ZlckNvbnRlbnRBdCIsImNsclBvcG92ZXJDb250ZW50T3V0c2lkZUNsaWNrVG9DbG9zZSIsImNsclBvcG92ZXJDb250ZW50U2Ny''@;'; put 'put ''b2xsVG9DbG9zZSJdLFsicm9sZSIsImRpYWxvZyIsImNka1RyYXBGb2N1cyIsIiIsMSwiY29sdW1uLXN3aXRjaCIsMywiaWQiXSxbMSwic3dpdGNoLWhlYWRlciJdLFsidGFiaW5kZXgiLCItMSIsMSwiY2xyLXNyLW9ubHkiXSxbImNsclBvcG92ZXJDbG9zZUJ1dHRvbiIsIiIsInR5cGUiLCJi''@;'; put 'put ''dXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1saW5rIiwidG9nZ2xlLXN3aXRjaC1jbG9zZS1idXR0b24iXSxbInNoYXBlIiwid2luZG93LWNsb3NlIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIl0sWzEsImNsci1zci1vbmx5Il0sWzEsInN3aXRjaC1jb250ZW50IiwibGlzdC11bnN0eWxlZCJd''@;'; put 'put ''LFs0LCJuZ0ZvciIsIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiXSxbMSwic3dpdGNoLWZvb3RlciJdLFszLCJjbHJBbGxTZWxlY3RlZCJdLFsiY2xyQ2hlY2tib3giLCIiLCJ0eXBlIiwiY2hlY2tib3giLDMsIm5nTW9kZWxDaGFuZ2UiLCJkaXNhYmxlZCIsIm5nTW9kZWwiXSxbMywibmdUZW1w''@;'; put 'put ''bGF0ZU91dGxldCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKGRlKDAsImJ1dHRvbiIsMSksTGUoMSksaGUoKSxndCgyLGNqZSwxNSw5LCJkaXYiLDIpKSwyJmEmJihocigiYXJpYS1jb250cm9scyIsZC5wb3BvdmVySWQpKCJhcmlhLWV4cGFuZGVkIixkLm9wZW5TdGF0ZSkoImFy''@;'; put 'put ''aWEtaGFzcG9wdXAiLCJtZW51IiksZmUoKSxJcigiICIsZC5jb21tb25TdHJpbmdzLmtleXMucGlja0NvbHVtbnMsIiAiKSxmZSgpLE1lKCJjbHJQb3BvdmVyQ29udGVudCIsZC5vcGVuU3RhdGUpKCJjbHJQb3BvdmVyQ29udGVudEF0IixkLnNtYXJ0UG9zaXRpb24pKCJjbHJQb3BvdmVyQ29u''@;'; put 'put ''dGVudE91dHNpZGVDbGlja1RvQ2xvc2UiLCEwKSgiY2xyUG9wb3ZlckNvbnRlbnRTY3JvbGxUb0Nsb3NlIiwhMCkpfSxkZXBlbmRlbmNpZXM6W25zLE4xLFp5LHJzLGRzLElkLFNoLE1kLG5sLCRzLFB4LEwxZSxOeCxIeCxPZGVdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLEhkZT0oKCk9Pntj''@;'; put 'put ''bGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuZXhwYW5kYWJsZVJvd3NDb3VudD1hLGEmJmEucmVnaXN0ZXIoKX1uZ09uRGVzdHJveSgpe3RoaXMuZXhwYW5kYWJsZVJvd3NDb3VudCYmdGhpcy5leHBhbmRhYmxlUm93c0NvdW50LnVucmVnaXN0ZXIoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1''@;'; put 'put ''bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UocXksOCkpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJJZkV4cGFuZGVkIiwiIl1dfSksY30pKCksY089KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLnNlbGVjdGlvbj1hLHRoaXMu''@;'; put 'put ''ZGV0YWlsU2VydmljZT1kLHRoaXMuY29sdW1uc1NlcnZpY2U9aCx0aGlzLmNvbW1vblN0cmluZ3M9Zix0aGlzLlNFTEVDVElPTl9UWVBFPXBsfWdldCBoYXNIaWRlYWJsZUNvbHVtbnMoKXtyZXR1cm4gdGhpcy5jb2x1bW5zU2VydmljZS5oYXNIaWRlYWJsZUNvbHVtbnN9fXJldHVybiBjLlx1''@;'; put 'put ''MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKGVfKSxHZShYZiksR2UoaGcpLEdlKGlzKSl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kZy1mb290ZXIiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJlRy''@;'; put 'put ''KCJkYXRhZ3JpZC1mb290ZXIiLCEwKX0sbmdDb250ZW50U2VsZWN0b3JzOmhqZSxkZWNsczozLHZhcnM6Mixjb25zdHM6W1s0LCJuZ0lmIl0sWzEsImNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQiXSxbMSwiZGF0YWdyaWQtZm9vdGVyLXNlbGVjdCJdLFsiY2xyQ2hlY2tib3giLCIiLCJ0eXBl''@;'; put 'put ''IiwiY2hlY2tib3giLCJjaGVja2VkIiwiY2hlY2tlZCIsImRpc2FibGVkIiwiIl0sWzEsImNsci1zci1vbmx5Il0sWzEsImRhdGFncmlkLWZvb3Rlci1kZXNjcmlwdGlvbiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKGRqZSksZ3QoMCxmamUsOCwyLCJuZy1jb250YWluZXIi''@;'; put 'put ''LDApKDEsZ2plLDQsMSwibmctY29udGFpbmVyIiwwKSxZcigyKSksMiZhJiYoTWUoIm5nSWYiLGQuc2VsZWN0aW9uLnNlbGVjdGlvblR5cGU9PT1kLlNFTEVDVElPTl9UWVBFLk11bHRpJiZkLnNlbGVjdGlvbi5jdXJyZW50Lmxlbmd0aD4wKSxmZSgpLE1lKCJuZ0lmIiwhZC5kZXRhaWxTZXJ2''@;'; put 'put ''aWNlLmlzT3BlbikpfSxkZXBlbmRlbmNpZXM6W2JhLGRzLElkLFNoLFBkZV0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCk7Y29uc3QgX0c9bmV3IFN0KCJDT0xVTU5fU1RBVEUiKSxYWmU9e3Byb3ZpZGU6X0csdXNlRmFjdG9yeTpmdW5jdGlvbiBxWmUoKXtyZXR1cm4gbmV3IGVpKHtjaGFuZ2Vz''@;'; put 'put ''OltdfSl9fTtsZXQgWHg9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLnBhZ2U9YSx0aGlzLnBhZ2VTaXplT3B0aW9uc0lkPU11KCl9bmdPbkluaXQoKXsoIXRoaXMucGFnZVNpemVPcHRpb25zfHwwPT09dGhpcy5wYWdlU2l6ZU9wdGlvbnMubGVuZ3RoKSYmKHRoaXMucGFnZVNp''@;'; put 'put ''emVPcHRpb25zPVt0aGlzLnBhZ2Uuc2l6ZV0pfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShNbSkpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGctcGFnZS1zaXplIl1dLGlucHV0czp7cGFnZVNpemVPcHRpb25z''@;'; put 'put ''OltObi5Ob25lLCJjbHJQYWdlU2l6ZU9wdGlvbnMiLCJwYWdlU2l6ZU9wdGlvbnMiXSxwYWdlU2l6ZU9wdGlvbnNJZDpbTm4uTm9uZSwiY2xyUGFnZVNpemVPcHRpb25zSWQiLCJwYWdlU2l6ZU9wdGlvbnNJZCJdfSxuZ0NvbnRlbnRTZWxlY3RvcnM6eW8sZGVjbHM6NSx2YXJzOjYsY29uc3Rz''@;'; put 'put ''OltbMywiZm9yIl0sWzEsImNsci1zZWxlY3Qtd3JhcHBlciJdLFszLCJuZ01vZGVsQ2hhbmdlIiwiaWQiLCJuZ01vZGVsIl0sWzMsIm5nVmFsdWUiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFszLCJuZ1ZhbHVlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoKSxkZSgwLCJsYWJl''@;'; put 'put ''bCIsMCksWXIoMSksaGUoKSxkZSgyLCJkaXYiLDEpKDMsInNlbGVjdCIsMiksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGYpe3JldHVybiBtaShkLnBhZ2Uuc2l6ZSxmKXx8KGQucGFnZS5zaXplPWYpLGZ9KSxndCg0LG1qZSwyLDIsIm9wdGlvbiIsMyksaGUoKSgpKSwyJmEmJihNZSgi''@;'; put 'put ''Zm9yIixkLnBhZ2VTaXplT3B0aW9uc0lkKSxmZSgzKSxUcigiY2xyLXBhZ2Utc2l6ZS1zZWxlY3QiLCEwKSxNZSgiaWQiLGQucGFnZVNpemVPcHRpb25zSWQpLHBpKCJuZ01vZGVsIixkLnBhZ2Uuc2l6ZSksZmUoKSxNZSgibmdGb3JPZiIsZC5wYWdlU2l6ZU9wdGlvbnMpKX0sZGVwZW5kZW5j''@;'; put 'put ''aWVzOltucyxkcyxBMixrMixUMixubCwkc10sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksdU89KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5wYWdlPWEsdGhpcy5jb21tb25TdHJpbmdzPWQsdGhpcy5kZXRhaWxTZXJ2aWNlPWgsdGhpcy5jdXJyZW50Q2hhbmdlZD1uZXcg''@;'; put 'put ''S3IoITEpLGEuYWN0aXZhdGVkPSEwfWdldCBwYWdlU2l6ZSgpe3JldHVybiB0aGlzLnBhZ2Uuc2l6ZX1zZXQgcGFnZVNpemUoYSl7Im51bWJlciI9PXR5cGVvZiBhJiYodGhpcy5wYWdlLnNpemU9YSl9Z2V0IHRvdGFsSXRlbXMoKXtyZXR1cm4gdGhpcy5wYWdlLnRvdGFsSXRlbXN9c2V0IHRv''@;'; put 'put ''dGFsSXRlbXMoYSl7Im51bWJlciI9PXR5cGVvZiBhJiYodGhpcy5wYWdlLnRvdGFsSXRlbXM9YSl9Z2V0IGxhc3RQYWdlKCl7cmV0dXJuIHRoaXMucGFnZS5sYXN0fXNldCBsYXN0UGFnZShhKXsibnVtYmVyIj09dHlwZW9mIGEmJih0aGlzLnBhZ2UubGFzdD1hKX1nZXQgY3VycmVudFBhZ2Uo''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5wYWdlLmN1cnJlbnR9c2V0IGN1cnJlbnRQYWdlKGEpeyJudW1iZXIiPT10eXBlb2YgYSYmKHRoaXMucGFnZS5jdXJyZW50PWEpfWdldCBmaXJzdEl0ZW0oKXtyZXR1cm4gdGhpcy5wYWdlLmZpcnN0SXRlbX1nZXQgbGFzdEl0ZW0oKXtyZXR1cm4gdGhpcy5wYWdlLmxh''@;'; put 'put ''c3RJdGVtfWdldCBtaWRkbGVQYWdlcygpe2NvbnN0IGE9W107cmV0dXJuIHRoaXMucGFnZS5jdXJyZW50PjEmJmEucHVzaCh0aGlzLnBhZ2UuY3VycmVudC0xKSxhLnB1c2godGhpcy5wYWdlLmN1cnJlbnQpLHRoaXMucGFnZS5jdXJyZW50PHRoaXMucGFnZS5sYXN0JiZhLnB1c2godGhpcy5w''@;'; put 'put ''YWdlLmN1cnJlbnQrMSksYX1uZ09uSW5pdCgpe3RoaXMucGFnZS5zaXplfHwodGhpcy5wYWdlLnNpemU9MTApLHRoaXMuX3BhZ2VTdWJzY3JpcHRpb249dGhpcy5wYWdlLmNoYW5nZS5zdWJzY3JpYmUoYT0+dGhpcy5jdXJyZW50Q2hhbmdlZC5lbWl0KGEpKX1uZ09uRGVzdHJveSgpe3RoaXMu''@;'; put 'put ''cGFnZS5yZXNldFBhZ2VTaXplKCEwKSx0aGlzLl9wYWdlU3Vic2NyaXB0aW9uJiZ0aGlzLl9wYWdlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9cHJldmlvdXMoKXt0aGlzLnBhZ2UucHJldmlvdXMoKX1uZXh0KCl7dGhpcy5wYWdlLm5leHQoKX12ZXJpZnlDdXJyZW50UGFnZShhKXtwYXJz''@;'; put 'put ''ZUludChhLnRhcmdldC52YWx1ZSwxMCkhPT10aGlzLnBhZ2UuY3VycmVudCYmKGEudGFyZ2V0LnZhbHVlPXRoaXMucGFnZS5jdXJyZW50KX11cGRhdGVDdXJyZW50UGFnZShhKXtjb25zdCBkPXBhcnNlSW50KGEudGFyZ2V0LnZhbHVlLDEwKTtpc05hTihkKXx8KHRoaXMucGFnZS5jdXJyZW50''@;'; put 'put ''PWQ8MT8xOmQ+dGhpcy5wYWdlLmxhc3Q/dGhpcy5wYWdlLmxhc3Q6ZCksdGhpcy5jdXJyZW50UGFnZUlucHV0UmVmLm5hdGl2ZUVsZW1lbnQudmFsdWU9dGhpcy5wYWdlLmN1cnJlbnQudG9TdHJpbmcoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyko''@;'; put 'put ''R2UoTW0pLEdlKGlzKSxHZShYZikpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGctcGFnaW5hdGlvbiJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZhbyhoLFh4LDUpLDImYSl7bGV0IGY7Q2koZj1TaSgpKSYmKGQuX3BhZ2VTaXpl''@;'; put 'put ''Q29tcG9uZW50PWYuZmlyc3QpfX0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiZxYSh2amUsNSksMiZhKXtsZXQgaDtDaShoPVNpKCkpJiYoZC5jdXJyZW50UGFnZUlucHV0UmVmPWguZmlyc3QpfX0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJlRy''@;'; put 'put ''KCJwYWdpbmF0aW9uIiwhMCl9LGlucHV0czp7ZGlzYWJsZUN1cnJlbnRQYWdlSW5wdXQ6W05uLk5vbmUsImNsckRnUGFnZUlucHV0RGlzYWJsZWQiLCJkaXNhYmxlQ3VycmVudFBhZ2VJbnB1dCJdLHBhZ2VTaXplOltObi5Ob25lLCJjbHJEZ1BhZ2VTaXplIiwicGFnZVNpemUiXSx0b3RhbEl0''@;'; put 'put ''ZW1zOltObi5Ob25lLCJjbHJEZ1RvdGFsSXRlbXMiLCJ0b3RhbEl0ZW1zIl0sbGFzdFBhZ2U6W05uLk5vbmUsImNsckRnTGFzdFBhZ2UiLCJsYXN0UGFnZSJdLGN1cnJlbnRQYWdlOltObi5Ob25lLCJjbHJEZ1BhZ2UiLCJjdXJyZW50UGFnZSJdfSxvdXRwdXRzOntjdXJyZW50Q2hhbmdlZDoi''@;'; put 'put ''Y2xyRGdQYWdlQ2hhbmdlIn0sbmdDb250ZW50U2VsZWN0b3JzOnlqZSxkZWNsczoyLHZhcnM6Mixjb25zdHM6W1sicmVhZE9ubHkiLCIiXSxbImN1cnJlbnRQYWdlSW5wdXQiLCIiXSxbNCwibmdJZiJdLFsiY2xhc3MiLCJwYWdpbmF0aW9uLXNpemUiLDQsIm5nSWYiXSxbMSwicGFnaW5hdGlv''@;'; put 'put ''bi1kZXNjcmlwdGlvbiJdLFsiY2xhc3MiLCJwYWdpbmF0aW9uLWxpc3QiLDQsIm5nSWYiXSxbMSwicGFnaW5hdGlvbi1zaXplIl0sWzEsInBhZ2luYXRpb24tbGlzdCJdLFsidHlwZSIsImJ1dHRvbiIsMSwicGFnaW5hdGlvbi1maXJzdCIsMywiY2xpY2siLCJkaXNhYmxlZCJdLFsxLCJjbHIt''@;'; put 'put ''c3Itb25seSJdLFsic2hhcGUiLCJzdGVwLWZvcndhcmQtMiIsImRpcmVjdGlvbiIsImRvd24iXSxbInR5cGUiLCJidXR0b24iLDEsInBhZ2luYXRpb24tcHJldmlvdXMiLDMsImNsaWNrIiwiZGlzYWJsZWQiXSxbInNoYXBlIiwiYW5nbGUiLCJkaXJlY3Rpb24iLCJsZWZ0Il0sWyJ0eXBlIiwi''@;'; put 'put ''dGV4dCIsImNsYXNzIiwicGFnaW5hdGlvbi1jdXJyZW50IGNsci1pbnB1dCIsMywic2l6ZSIsInZhbHVlIiwia2V5ZG93bi5lbnRlciIsImJsdXIiLDQsIm5nSWYiLCJuZ0lmRWxzZSJdLFsidHlwZSIsImJ1dHRvbiIsMSwicGFnaW5hdGlvbi1uZXh0IiwzLCJjbGljayIsImRpc2FibGVkIl0s''@;'; put 'put ''WyJzaGFwZSIsImFuZ2xlIiwiZGlyZWN0aW9uIiwicmlnaHQiXSxbInR5cGUiLCJidXR0b24iLDEsInBhZ2luYXRpb24tbGFzdCIsMywiY2xpY2siLCJkaXNhYmxlZCJdLFsic2hhcGUiLCJzdGVwLWZvcndhcmQtMiIsImRpcmVjdGlvbiIsInVwIl0sWyJ0eXBlIiwidGV4dCIsMSwicGFnaW5h''@;'; put 'put ''dGlvbi1jdXJyZW50IiwiY2xyLWlucHV0IiwzLCJrZXlkb3duLmVudGVyIiwiYmx1ciIsInNpemUiLCJ2YWx1ZSJdLFsxLCJwYWdpbmF0aW9uLWRlc2NyaXB0aW9uLWNvbXBhY3QiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYShiamUpLGd0KDAsTWplLDUsMiwibmctY29udGFp''@;'; put 'put ''bmVyIiwyKSgxLHhqZSwxNCwxMCwibmctY29udGFpbmVyIiwyKSksMiZhJiYoTWUoIm5nSWYiLCFkLmRldGFpbFNlcnZpY2UuaXNPcGVuKSxmZSgpLE1lKCJuZ0lmIixkLmRldGFpbFNlcnZpY2UuaXNPcGVuKSl9LGRlcGVuZGVuY2llczpbYmEscnNdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgp''@;'; put 'put ''LEw3PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0sRCl7dGhpcy5lbD1hLHRoaXMucmVuZGVyZXI9ZCx0aGlzLmRvbUFkYXB0ZXI9Zix0aGlzLmNvbHVtblJlc2l6ZXJTZXJ2aWNlPXYsdGhpcy5jb2x1bW5zU2VydmljZT1NLHRoaXMuY29sdW1uU3RhdGU9RCx0aGlzLnJl''@;'; put 'put ''c2l6ZUVtaXR0ZXI9bmV3IEtyLHRoaXMud2lkdGhTZXQ9ITEsdGhpcy5hdXRvU2V0PSExLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChoLmZpbHRlclJlbmRlclN0ZXBzKEpmLkNMRUFSX1dJRFRIUykuc3Vic2NyaWJlKCgpPT50aGlzLmNsZWFyV2lkdGgo''@;'; put 'put ''KSkpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX1nZXRDb2x1bW5XaWR0aFN0YXRlKCl7Y29uc3QgYT10aGlzLmRldGVjdFN0cmljdFdpZHRoKCk7cmV0dXJue3dpZHRoOnRoaXMuY29tcHV0ZVdpZHRoKGEpLHN0cmljdFdpZHRo''@;'; put 'put ''OmF9fXNldENvbHVtblN0YXRlKGEpe3RoaXMuY29sdW1uc1NlcnZpY2UuY29sdW1uc1thXT10aGlzLmNvbHVtblN0YXRlfXNldFdpZHRoKGEpe2Euc3RyaWN0V2lkdGg/KHRoaXMuY29sdW1uUmVzaXplclNlcnZpY2UucmVzaXplZEJ5JiYodGhpcy5yZXNpemVFbWl0dGVyLmVtaXQoYS53aWR0''@;'; put 'put ''aCksdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsIndpZHRoIixhLndpZHRoKyJweCIpLHRoaXMud2lkdGhTZXQ9ITEpLHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LFh5KSx0aGlzLmF1dG9TZXQ9ITEpOih0aGlzLnJlbmRl''@;'; put 'put ''cmVyLnJlbW92ZUNsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCxYeSksdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsIndpZHRoIixhLndpZHRoKyJweCIpLHRoaXMud2lkdGhTZXQ9ITAsdGhpcy5hdXRvU2V0PSEwKX1zZXRIaWRkZW4oYSl7YS5oaWRkZW4/''@;'; put 'put ''dGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsS3gpOnRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LEt4KX1jbGVhcldpZHRoKCl7dGhpcy53aWR0aFNldCYmIXRoaXMuY29sdW1uUmVzaXplclNlcnZpY2UucmVzaXplZEJ5''@;'; put 'put ''JiZ0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwid2lkdGgiLG51bGwpLHRoaXMuYXV0b1NldCYmdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsWHkpfWRldGVjdFN0cmljdFdpZHRoKCl7cmV0dXJuIHRoaXMuY29sdW1u''@;'; put 'put ''UmVzaXplclNlcnZpY2UucmVzaXplZEJ5P3RoaXMuY29sdW1uUmVzaXplclNlcnZpY2Uud2lkdGhBZnRlclJlc2l6ZTp0aGlzLmF1dG9TZXQ/MDp0aGlzLmRvbUFkYXB0ZXIudXNlckRlZmluZWRXaWR0aCh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQpfWNvbXB1dGVXaWR0aChhKXtsZXQgZD1hO3Jl''@;'; put 'put ''dHVybiBkfHwoZD10aGlzLmRvbUFkYXB0ZXIuc2Nyb2xsV2lkdGgodGhpcy5lbC5uYXRpdmVFbGVtZW50KSksZH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoSmkpLEdlKEVvKSxHZShJNyksR2Uodm0pLEdlKGZHKSxHZShoZyksR2UoX0cpKX0s''@;'; put 'put ''Yy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRnLWNvbHVtbiJdXSxvdXRwdXRzOntyZXNpemVFbWl0dGVyOiJjbHJEZ0NvbHVtblJlc2l6ZSJ9LGZlYXR1cmVzOltkYShbZkcsWFplXSldfSksY30pKCksdFdlPSgoKT0+e2NsYXNzIGN7dXNlckRlZmluZWRXaWR0aChh''@;'; put 'put ''KXtyZXR1cm4gMH1zY3JvbGxCYXJXaWR0aChhKXtyZXR1cm4gMH1zY3JvbGxXaWR0aChhKXtyZXR1cm4gMH1jb21wdXRlZEhlaWdodChhKXtyZXR1cm4gMH1jbGllbnRSZWN0KGEpe3JldHVybnt0b3A6MCxib3R0b206MCxsZWZ0OjAscmlnaHQ6MCx3aWR0aDowLGhlaWdodDowfX1taW5XaWR0''@;'; put 'put ''aChhKXtyZXR1cm4gMH1mb2N1cyhhKXt9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpO2NvbnN0IG5XZT1jPT50bChjKT9uZXcgdm06bmV3IHRXZTtsZXQg''@;'; put 'put ''dF89KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSxELFoscmUsY2UsYmUsRWUpe3RoaXMuZGF0YWdyaWQ9YSx0aGlzLm9yZ2FuaXplcj1kLHRoaXMuaXRlbXM9aCx0aGlzLnBhZ2U9Zix0aGlzLmVsPXYsdGhpcy5yZW5kZXJlcj1NLHRoaXMudGFibGVTaXplU2VydmljZT1a''@;'; put 'put ''LHRoaXMuY29sdW1uc1NlcnZpY2U9cmUsdGhpcy5uZ1pvbmU9Y2UsdGhpcy5rZXlOYXZpZ2F0aW9uPWJlLHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWY9RWUsdGhpcy5faGVpZ2h0U2V0PSExLHRoaXMuc2hvdWxkU3RhYmlsaXplQ29sdW1ucz0hMCx0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5p''@;'; put 'put ''bnRlcnNlY3Rpb25PYnNlcnZlcj1udWxsLHRoaXMuY29sdW1uc1NpemVzU3RhYmxlPSExLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGQuZmlsdGVyUmVuZGVyU3RlcHMoSmYuQ09NUFVURV9DT0xVTU5fV0lEVEhTKS5zdWJzY3JpYmUoKCk9PnRoaXMuY29tcHV0ZUhlYWRlcnNXaWR0aCgpKSks''@;'; put 'put ''dGhpcy5zdWJzY3JpcHRpb25zLnB1c2goZi5zaXplQ2hhbmdlLnN1YnNjcmliZSgoKT0+e3RoaXMuX2hlaWdodFNldCYmdGhpcy5yZXNldERhdGFncmlkSGVpZ2h0KCl9KSksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goRC5zdGF0ZUNoYW5nZS5zdWJzY3JpYmUoQmU9PnRoaXMudG9nZ2xlRGV0''@;'; put 'put ''YWlsUGFuZShCZSkpKSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChoLmNoYW5nZS5zdWJzY3JpYmUoKCk9PnRoaXMuc2hvdWxkU3RhYmlsaXplQ29sdW1ucz0hMCkpfW5nT25Jbml0KCl7dGhpcy5jb2x1bW5zU2VydmljZS5jb2x1bW5zU3RhdGVDaGFuZ2Uuc3Vic2NyaWJlKGE9PnRoaXMuY29s''@;'; put 'put ''dW1uU3RhdGVDaGFuZ2VkKGEpKSxudWxsPT09dGhpcy5lbC5uYXRpdmVFbGVtZW50Lm9mZnNldFBhcmVudCYmKHRoaXMuaW50ZXJzZWN0aW9uT2JzZXJ2ZXI9bmV3IEludGVyc2VjdGlvbk9ic2VydmVyKChbYV0pPT57KHRoaXMuZWwubmF0aXZlRWxlbWVudC5vZmZzZXRQYXJlbnR8fGEuaXNJ''@;'; put 'put ''bnRlcnNlY3RpbmcpJiZ0aGlzLmNvbHVtbnNTaXplc1N0YWJsZSYmKHRoaXMuY29sdW1uc1NpemVzU3RhYmxlPSExLHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCksdGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlci5kaXNjb25uZWN0KCkpfSksdGhpcy5pbnRlcnNlY3Rpb25P''@;'; put 'put ''YnNlcnZlci5vYnNlcnZlKHRoaXMuZWwubmF0aXZlRWxlbWVudCkpfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuc2V0dXBDb2x1bW5zKCksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5oZWFkZXJzLmNoYW5nZXMuc3Vic2NyaWJlKCgpPT57dGhpcy5zZXR1cENvbHVtbnMoKSx0aGlz''@;'; put 'put ''LmNvbHVtbnNTaXplc1N0YWJsZT0hMSx0aGlzLnN0YWJpbGl6ZUNvbHVtbnMoKX0pKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLnRhYmxlU2l6ZVNlcnZpY2UudGFibGU9dGhpcy5lbH1uZ0FmdGVyVmlld0NoZWNrZWQoKXt0aGlzLnNob3VsZFN0YWJpbGl6ZUNvbHVtbnMmJnRoaXMuc3RhYmls''@;'; put 'put ''aXplQ29sdW1ucygpLHRoaXMuc2hvdWxkQ29tcHV0ZUhlaWdodCgpJiZ0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3NldFRpbWVvdXQoKCk9Pnt0aGlzLmNvbXB1dGVEYXRhZ3JpZEhlaWdodCgpfSl9KX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNo''@;'; put 'put ''KGE9PmEudW5zdWJzY3JpYmUoKSksdGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlcj8uZGlzY29ubmVjdCgpfXRvZ2dsZURldGFpbFBhbmUoYSl7dGhpcy5oZWFkZXJzJiYoYSYmIXRoaXMuY29sdW1uc1NlcnZpY2UuaGFzQ2FjaGUoKT8odGhpcy5jb2x1bW5zU2VydmljZS5jYWNoZSgpLHRoaXMu''@;'; put 'put ''Y29sdW1uc1NlcnZpY2UudmlzaWJsZUNvbHVtbnMuZm9yRWFjaCgoZCxoKT0+e2g+MCYmdGhpcy5jb2x1bW5zU2VydmljZS5lbWl0U3RhdGVDaGFuZ2VBdChkLmNvbHVtbkluZGV4LHtjaGFuZ2VzOltXMS5ISURERU5dLGhpZGRlbjphfSl9KSk6YXx8dGhpcy5jb2x1bW5zU2VydmljZS5yZXNl''@;'; put 'put ''dFRvTGFzdENhY2hlKCkpfXNldHVwQ29sdW1ucygpe3RoaXMuaGVhZGVycy5mb3JFYWNoKChhLGQpPT5hLnNldENvbHVtblN0YXRlKGQpKSx0aGlzLmNvbHVtbnNTZXJ2aWNlLmNvbHVtbnMuc3BsaWNlKHRoaXMuaGVhZGVycy5sZW5ndGgpLHRoaXMuY29sdW1uc1NlcnZpY2UuY29sdW1ucy5m''@;'; put 'put ''b3JFYWNoKChhLGQpPT57dGhpcy5jb2x1bW5zU2VydmljZS5lbWl0U3RhdGVDaGFuZ2UoYSx7Y2hhbmdlczpbVzEuSU5JVElBTElaRV0sY29sdW1uSW5kZXg6ZH0pfSl9c2hvdWxkQ29tcHV0ZUhlaWdodCgpe3JldHVybiF0aGlzLl9oZWlnaHRTZXQmJnRoaXMucGFnZS5zaXplPjAmJnRoaXMu''@;'; put 'put ''aXRlbXMuZGlzcGxheWVkLmxlbmd0aD09PXRoaXMucGFnZS5zaXplfWNvbXB1dGVEYXRhZ3JpZEhlaWdodCgpe2NvbnN0IGE9d2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50KS5oZWlnaHQ7dGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsLm5hdGl2ZUVs''@;'; put 'put ''ZW1lbnQsImhlaWdodCIsYSksdGhpcy5faGVpZ2h0U2V0PSEwfXJlc2V0RGF0YWdyaWRIZWlnaHQoKXt0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwiaGVpZ2h0IiwiIiksdGhpcy5faGVpZ2h0U2V0PSExfWNvbXB1dGVIZWFkZXJzV2lkdGgoKXtjb25zdCBh''@;'; put 'put ''PXRoaXMuaGVhZGVycy5sZW5ndGgsZD10aGlzLmhlYWRlcnMubWFwKGY9PmYuZ2V0Q29sdW1uV2lkdGhTdGF0ZSgpKTtsZXQgaD0hMDt0aGlzLmhlYWRlcnMuZm9yRWFjaCgoZix2KT0+e2NvbnN0IE09e2NoYW5nZXM6W1cxLldJRFRIXSwuLi5kW3ZdfTtNLnN0cmljdFdpZHRofHwoaD0hMSks''@;'; put 'put ''YT09PXYrMSYmaCYmKE0uc3RyaWN0V2lkdGg9MCksdGhpcy5jb2x1bW5zU2VydmljZS5lbWl0U3RhdGVDaGFuZ2VBdCh2LE0pfSl9Y29sdW1uU3RhdGVDaGFuZ2VkKGEpe2lmKCF0aGlzLmhlYWRlcnN8fG51bGw9PWEuY29sdW1uSW5kZXgpcmV0dXJuO2NvbnN0IGQ9YS5jb2x1bW5JbmRleDth''@;'; put 'put ''LmNoYW5nZXMmJmEuY2hhbmdlcy5sZW5ndGgmJmEuY2hhbmdlcy5mb3JFYWNoKGg9Pntzd2l0Y2goaCl7Y2FzZSBXMS5XSURUSDp0aGlzLmhlYWRlcnMuZ2V0KGQpLnNldFdpZHRoKGEpLHRoaXMucm93cy5mb3JFYWNoKGY9PntmPy5jZWxscy5sZW5ndGg9PT10aGlzLmNvbHVtbnNTZXJ2aWNl''@;'; put 'put ''LmNvbHVtbnMubGVuZ3RoJiYoZi5jZWxscy5nZXQoZCkuc2V0V2lkdGgoYSksZi5leHBhbmRhYmxlUm93Py5jZWxscy5nZXQoZCk/LnNldFdpZHRoKGEpKX0pO2JyZWFrO2Nhc2UgVzEuSElEREVOOnRoaXMuaGVhZGVycy5nZXQoZCkuc2V0SGlkZGVuKGEpLHRoaXMucm93cy5mb3JFYWNoKGY9''@;'; put 'put ''PntmLmNlbGxzJiZmLmNlbGxzLmxlbmd0aCYmKGYuY2VsbHMuZ2V0KGQpLnNldEhpZGRlbihhKSxmLmV4cGFuZGFibGVSb3c/LmNlbGxzLmdldChkKT8uc2V0SGlkZGVuKGEpKX0pLHRoaXMudXBkYXRlQ29sdW1uU2VwYXJhdG9yc1Zpc2liaWxpdHkoKSx0aGlzLmtleU5hdmlnYXRpb24ucmVz''@;'; put 'put ''ZXRLZXlHcmlkKCk7YnJlYWs7Y2FzZSBXMS5JTklUSUFMSVpFOmEuaGlkZWFibGUmJmEuaGlkZGVuJiYodGhpcy5oZWFkZXJzLmdldChkKS5zZXRIaWRkZW4oYSksdGhpcy5yb3dzLmZvckVhY2goZj0+e2Yuc2V0Q2VsbHNTdGF0ZSgpLGYuZXhwYW5kYWJsZVJvdz8uc2V0Q2VsbHNTdGF0ZSgp''@;'; put 'put ''fSkpfX0pfXN0YWJpbGl6ZUNvbHVtbnMoKXt0aGlzLmNvbHVtbnNTaXplc1N0YWJsZXx8dGhpcy5pdGVtcy5kaXNwbGF5ZWQubGVuZ3RoPjAmJih0aGlzLm9yZ2FuaXplci5yZXNpemUoKSx0aGlzLmNvbHVtbnNTaXplc1N0YWJsZT0hMCl9dXBkYXRlQ29sdW1uU2VwYXJhdG9yc1Zpc2liaWxp''@;'; put 'put ''dHkoKXtjb25zdCBhPXRoaXMuZGF0YWdyaWQuY29sdW1ucy5maWx0ZXIoZD0+IWQuaXNIaWRkZW4pO2EuZm9yRWFjaCgoZCxoKT0+e2g9PT1hLmxlbmd0aC0xP2Quc2hvd1NlcGFyYXRvcj0hMTpkLnNob3dTZXBhcmF0b3J8fChkLnNob3dTZXBhcmF0b3I9ITApfSl9fXJldHVybiBjLlx1MDI3''@;'; put 'put ''NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKEFtKSxHZShJNyksR2UoZGcpLEdlKE1tKSxHZShKaSksR2UoRW8pLEdlKFhmKSxHZShwRyksR2UoaGcpLEdlKFdhKSxHZShyTyksR2UoRXMpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRhdGFn''@;'; put 'put ''cmlkIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJihhbyhoLEw3LDQpLGFvKGgsVG0sNCkpLDImYSl7bGV0IGY7Q2koZj1TaSgpKSYmKGQuaGVhZGVycz1mKSxDaShmPVNpKCkpJiYoZC5yb3dzPWYpfX0sZmVhdHVyZXM6W2RhKFt7cHJvdmlkZTp2bSx1c2VGYWN0''@;'; put 'put ''b3J5Om5XZSxkZXBzOltpb119XSldfSksY30pKCkscldlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtUcy5hZGRJY29ucyhCT2Usak9lLHZ4LHpPZSxBMGUsVU9lLGswZSxaT2UsV09lKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUw''@;'; put 'put ''Mjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbUmEsUlplLEtMLEFzLENkZSxSYyxQWSxPMixMWmUsU2RlLGp5LFZ4LFlZXX0pLGN9KSgpLE5kZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0s''@;'; put 'put ''Yy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXN0YWNrLWNvbnRlbnQiXV19KSxjfSkoKSx3Rz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5fZ2VuZXJhdGVkSWQ9bnVsbCx0aGlzLl9pZD1udWxsfWdldCBpZCgpe3JldHVybiB0aGlzLl9pZH1zZXQgaWQo''@;'; put 'put ''YSl7dGhpcy5faWQ9InN0cmluZyI9PXR5cGVvZiBhJiYiIiE9PWE/YTp0aGlzLl9nZW5lcmF0ZWRJZCsiIn1uZ09uSW5pdCgpe3RoaXMuX2dlbmVyYXRlZElkPSJjbHItc3RhY2stbGFiZWwtIitNdSgpLHRoaXMuaWR8fCh0aGlzLl9pZD10aGlzLl9nZW5lcmF0ZWRJZCsiIil9fXJldHVybiBj''@;'; put 'put ''Llx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItc3RhY2stbGFiZWwiXV0saG9zdFZhcnM6MSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJmhyKCJpZCIsZC5pZCl9LGlucHV0czp7aWQ6''@;'; put 'put ''ImlkIn0sbmdDb250ZW50U2VsZWN0b3JzOnlvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoKSxZcigwKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLFZkZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5wYXJlbnQ9YSx0aGlzLmNv''@;'; put 'put ''bW1vblN0cmluZ3M9ZCx0aGlzLmV4cGFuZGVkPSExLHRoaXMuZXhwYW5kYWJsZT0hMSx0aGlzLmV4cGFuZGVkQ2hhbmdlPW5ldyBLcighMSksdGhpcy5mb2N1c2VkPSExLHRoaXMudW5pcXVlSWQ9TXUoKSx0aGlzLl9jaGFuZ2VkQ2hpbGRyZW49MCx0aGlzLl9mdWxseUluaXRpYWxpemVkPSEx''@;'; put 'put ''LHRoaXMuX2NoYW5nZWQ9ITEsYSYmYS5hZGRDaGlsZCgpfXNldCBzZXRDaGFuZ2VkVmFsdWUoYSl7dGhpcy5fY2hhbmdlZD1hLHRoaXMucGFyZW50JiZ0aGlzLl9mdWxseUluaXRpYWxpemVkJiYoYT90aGlzLnBhcmVudC5fY2hhbmdlZENoaWxkcmVuKys6dGhpcy5wYXJlbnQuX2NoYW5nZWRD''@;'; put 'put ''aGlsZHJlbi0tKX1nZXQgZ2V0Q2hhbmdlZFZhbHVlKCl7cmV0dXJuIHRoaXMuX2NoYW5nZWR8fHRoaXMuX2NoYW5nZWRDaGlsZHJlbj4wJiYhdGhpcy5leHBhbmRlZH1nZXQgb25TdGFja0xhYmVsRm9jdXMoKXtyZXR1cm4gdGhpcy5leHBhbmRhYmxlJiYhdGhpcy5leHBhbmRlZCYmdGhpcy5m''@;'; put 'put ''b2N1c2VkfWdldCBsYWJlbGxlZEJ5SWQoKXtyZXR1cm4gdGhpcy5zdGFja0Jsb2NrVGl0bGUuaWR9Z2V0IGhlYWRpbmdMZXZlbCgpe3JldHVybiB0aGlzLmFyaWFMZXZlbD90aGlzLmFyaWFMZXZlbCsiIjp0aGlzLnBhcmVudD8iNCI6IjMifWdldCBjYXJldERpcmVjdGlvbigpe3JldHVybiB0''@;'; put 'put ''aGlzLmV4cGFuZGVkPyJkb3duIjoicmlnaHQifWdldCByb2xlKCl7cmV0dXJuIHRoaXMuZXhwYW5kYWJsZT8iYnV0dG9uIjpudWxsfWdldCB0YWJJbmRleCgpe3JldHVybiB0aGlzLmV4cGFuZGFibGU/IjAiOm51bGx9Z2V0IGFyaWFFeHBhbmRlZCgpe3JldHVybiB0aGlzLmV4cGFuZGFibGU/''@;'; put 'put ''dGhpcy5leHBhbmRlZD8idHJ1ZSI6ImZhbHNlIjpudWxsfW5nT25Jbml0KCl7dGhpcy5fZnVsbHlJbml0aWFsaXplZD0hMH1hZGRDaGlsZCgpe3RoaXMuZXhwYW5kYWJsZT0hMH10b2dnbGVFeHBhbmQoYSl7QmRlKGEpfHx0aGlzLmV4cGFuZGFibGUmJih0aGlzLmV4cGFuZGVkPSF0aGlzLmV4''@;'; put 'put ''cGFuZGVkLHRoaXMuZXhwYW5kZWRDaGFuZ2UuZW1pdCh0aGlzLmV4cGFuZGVkKSl9Z2V0U3RhY2tDaGlsZHJlbklkKCl7cmV0dXJuIHRoaXMuZXhwYW5kZWQ/YGNsci1zdGFjay1jaGlsZHJlbi0ke3RoaXMudW5pcXVlSWR9YDpudWxsfXByZXZlbnREZWZhdWx0SWZOb3RJbnB1dEV2ZW50KGEp''@;'; put 'put ''e0JkZShhKXx8YS5wcmV2ZW50RGVmYXVsdCgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShjLDEyKSxHZShpcykpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItc3RhY2stYmxvY2siXV0sY29udGVudFF1ZXJpZXM6''@;'; put 'put ''ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmYW8oaCx3Ryw1KSwyJmEpe2xldCBmO0NpKGY9U2koKSkmJihkLnN0YWNrQmxvY2tUaXRsZT1mLmZpcnN0KX19LGhvc3RWYXJzOjEyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmKGhyKCJyb2xlIiwiaGVhZGluZyIpKCJhcmlhLWxldmVs''@;'; put 'put ''IixkLmhlYWRpbmdMZXZlbCksVHIoInN0YWNrLWJsb2NrIiwhMCkoInN0YWNrLWJsb2NrLWV4cGFuZGVkIixkLmV4cGFuZGVkKSgic3RhY2stYmxvY2stZXhwYW5kYWJsZSIsZC5leHBhbmRhYmxlKSgic3RhY2stYmxvY2stY2hhbmdlZCIsZC5nZXRDaGFuZ2VkVmFsdWUpKCJvbi1mb2N1cyIs''@;'; put 'put ''ZC5vblN0YWNrTGFiZWxGb2N1cykpfSxpbnB1dHM6e2V4cGFuZGVkOltObi5Ob25lLCJjbHJTYkV4cGFuZGVkIiwiZXhwYW5kZWQiXSxleHBhbmRhYmxlOltObi5Ob25lLCJjbHJTYkV4cGFuZGFibGUiLCJleHBhbmRhYmxlIl0sYXJpYUxldmVsOltObi5Ob25lLCJjbHJTdGFja1ZpZXdMZXZl''@;'; put 'put ''bCIsImFyaWFMZXZlbCJdLHNldENoYW5nZWRWYWx1ZTpbTm4uTm9uZSwiY2xyU2JOb3RpZnlDaGFuZ2UiLCJzZXRDaGFuZ2VkVmFsdWUiXX0sb3V0cHV0czp7ZXhwYW5kZWRDaGFuZ2U6ImNsclNiRXhwYW5kZWRDaGFuZ2UifSxuZ0NvbnRlbnRTZWxlY3RvcnM6RGplLGRlY2xzOjksdmFyczo5''@;'; put 'put ''LGNvbnN0czpbWzEsInN0YWNrLWJsb2NrLWxhYmVsIiwzLCJjbGljayIsImtleXVwLmVudGVyIiwia2V5dXAuc3BhY2UiLCJrZXlkb3duLnNwYWNlIiwiZm9jdXMiLCJibHVyIiwiaWQiXSxbInNoYXBlIiwiYW5nbGUiLCJjbGFzcyIsInN0YWNrLWJsb2NrLWNhcmV0Iiw0LCJuZ0lmIl0sWyJj''@;'; put 'put ''bGFzcyIsImNsci1zci1vbmx5Iiw0LCJuZ0lmIl0sWzEsInN0YWNrLXZpZXcta2V5Il0sWzEsInN0YWNrLWJsb2NrLWNvbnRlbnQiXSxbMSwic3RhY2stY2hpbGRyZW4iLDMsImNsckV4cGFuZFRyaWdnZXIiXSxbInJvbGUiLCJyZWdpb24iLDMsImhlaWdodCIsNCwibmdJZiJdLFsic2hhcGUi''@;'; put 'put ''LCJhbmdsZSIsMSwic3RhY2stYmxvY2stY2FyZXQiXSxbMSwiY2xyLXNyLW9ubHkiXSxbInJvbGUiLCJyZWdpb24iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYShramUpLGRlKDAsImRpdiIsMCksRnQoImNsaWNrIixmdW5jdGlvbihmKXtyZXR1cm4gZC50b2dnbGVFeHBhbmQo''@;'; put 'put ''Zil9KSgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKGYpe3JldHVybiBkLnRvZ2dsZUV4cGFuZChmKX0pKCJrZXl1cC5zcGFjZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQudG9nZ2xlRXhwYW5kKGYpfSkoImtleWRvd24uc3BhY2UiLGZ1bmN0aW9uKGYpe3JldHVybiBkLnByZXZlbnREZWZhdWx0SWZO''@;'; put 'put ''b3RJbnB1dEV2ZW50KGYpfSkoImZvY3VzIixmdW5jdGlvbigpe3JldHVybiBkLmZvY3VzZWQ9ITB9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gZC5mb2N1c2VkPSExfSksZ3QoMSxJamUsMSwxLCJjZHMtaWNvbiIsMSkoMixSamUsMiwxLCJzcGFuIiwyKSxkZSgzLCJkaXYiLDMpLFlyKDQp''@;'; put 'put ''LGhlKCksZGUoNSwiZGl2Iiw0KSxZcig2LDEpLGhlKCkoKSxkZSg3LCJjbHItZXhwYW5kYWJsZS1hbmltYXRpb24iLDUpLGd0KDgsTGplLDIsNCwiZGl2Iiw2KSxoZSgpKSwyJmEmJihNZSgiaWQiLGQudW5pcXVlSWQpLGhyKCJyb2xlIixkLnJvbGUpKCJ0YWJpbmRleCIsZC50YWJJbmRleCko''@;'; put 'put ''ImFyaWEtZXhwYW5kZWQiLGQuYXJpYUV4cGFuZGVkKSgiYXJpYS1jb250cm9scyIsZC5nZXRTdGFja0NoaWxkcmVuSWQoKSksZmUoKSxNZSgibmdJZiIsZC5leHBhbmRhYmxlKSxmZSgpLE1lKCJuZ0lmIixkLmdldENoYW5nZWRWYWx1ZSksZmUoNSksTWUoImNsckV4cGFuZFRyaWdnZXIiLGQu''@;'; put 'put ''ZXhwYW5kZWQpLGZlKCksTWUoIm5nSWYiLGQuZXhwYW5kZWQpKX0sZGVwZW5kZW5jaWVzOltiYSxycyxWTF0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCk7ZnVuY3Rpb24gQmRlKGMpe2NvbnN0IGw9Yz8udGFyZ2V0O3JldHVybiEhbD8udGFnTmFtZSYmWyJJTlBVVCIsIlRFWFRBUkVBIiwiQlVU''@;'; put 'put ''VE9OIiwiQSIsIlNFTEVDVCIsIk9QVElPTiJdLmluY2x1ZGVzKGwudGFnTmFtZSl9bGV0IENHPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItc3RhY2st''@;'; put 'put ''dmlldyJdXSxuZ0NvbnRlbnRTZWxlY3RvcnM6UGplLGRlY2xzOjMsdmFyczowLGNvbnN0czpbWzEsInN0YWNrLXZpZXciXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYShPamUpLFlyKDApLGRlKDEsImRpdiIsMCksWXIoMiwxKSxoZSgpKX0sZW5jYXBzdWxhdGlvbjoyfSksY30p''@;'; put 'put ''KCksYVdlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtUcy5hZGRJY29ucyhFeSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1JhLFJjLEFzLFNkZV19''@;'; put 'put ''KSxjfSkoKSxPNz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5zZWxlY3RhYmxlPSExLHRoaXMuZWFnZXI9ITAsdGhpcy5jaGlsZHJlbkZldGNoZWQ9bmV3IFdufX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWFu''@;'; put 'put ''KHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKTtjb25zdCBqZGU9e3Byb3ZpZGU6TzcsdXNlRmFjdG9yeTpmdW5jdGlvbiBvV2UoYyl7cmV0dXJuIGN8fG5ldyBPN30sZGVwczpbW25ldyBJMSxuZXcgbGQsTzddXX07bGV0IHpkZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9y''@;'; put 'put ''KGEsZCl7dGhpcy5mZWF0dXJlc1NlcnZpY2U9YSx0aGlzLmV4cGFuZFNlcnZpY2U9ZCxkJiYodGhpcy5zdWJzY3JpcHRpb249ZC5leHBhbmRDaGFuZ2Uuc3Vic2NyaWJlKGg9PnshaCYmdGhpcy5wYXJlbnQmJiFhLmVhZ2VyJiZhLnJlY3Vyc2lvbiYmdGhpcy5wYXJlbnQuY2xlYXJDaGlsZHJl''@;'; put 'put ''bigpfSkpfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuc2V0QXJpYVJvbGVzKCl9c2hvdWxkUmVuZGVyKCl7cmV0dXJuIHRoaXMuZmVhdHVyZXNTZXJ2aWNlLnJlY3Vyc2lvbiYmKHRoaXMuZmVhdHVyZXNTZXJ2aWNlLmVhZ2VyfHwhdGhpcy5leHBhbmRTZXJ2aWNlfHx0aGlzLmV4cGFuZFNl''@;'; put 'put ''cnZpY2UuZXhwYW5kZWQpfWdldENvbnRleHQoYSl7cmV0dXJueyRpbXBsaWNpdDphLm1vZGVsLGNsck1vZGVsOmF9fW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb24mJnRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9c2V0QXJpYVJvbGVzKCl7dGhpcy5yb2xlPXRoaXMucGFy''@;'; put 'put ''ZW50PyJncm91cCI6bnVsbH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoTzcpLEdlKFUxLDgpKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXJlY3Vyc2l2ZS1jaGlsZHJlbiJdXSxob3N0VmFyczoxLGhvc3RCaW5k''@;'; put 'put ''aW5nczpmdW5jdGlvbihhLGQpezImYSYmaHIoInJvbGUiLGQucm9sZSl9LGlucHV0czp7cGFyZW50OiJwYXJlbnQiLGNoaWxkcmVuOiJjaGlsZHJlbiJ9LGRlY2xzOjEsdmFyczoxLGNvbnN0czpbWzQsIm5nSWYiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzQsIm5nVGVtcGxhdGVPdXRsZXQi''@;'; put 'put ''LCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmZ3QoMCxCamUsMiwxLCJuZy1jb250YWluZXIiLDApLDImYSYmTWUoIm5nSWYiLGQuc2hvdWxkUmVuZGVyKCkpfSxkZXBlbmRlbmNpZXM6W25zLGJhLE4xXSxlbmNhcHN1bGF0aW9uOjJ9KSxj''@;'; put 'put ''fSkoKTt2YXIgJHU9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5VTlNFTEVDVEVEPTBdPSJVTlNFTEVDVEVEIixjW2MuU0VMRUNURUQ9MV09IlNFTEVDVEVEIixjW2MuSU5ERVRFUk1JTkFURT0yXT0iSU5ERVRFUk1JTkFURSIsY30oJHV8fHt9KTtjbGFzcyBVZGV7Y29uc3RydWN0b3IoKXt0aGlz''@;'; put 'put ''LmxvYWRpbmckPW5ldyBlaSghMSksdGhpcy5zZWxlY3RlZD1uZXcgZWkoJHUuVU5TRUxFQ1RFRCksdGhpcy5fbG9hZGluZz0hMX1nZXQgbG9hZGluZygpe3JldHVybiB0aGlzLl9sb2FkaW5nfXNldCBsb2FkaW5nKGwpe3RoaXMuX2xvYWRpbmc9bCx0aGlzLmxvYWRpbmckLm5leHQobCl9Z2V0''@;'; put 'put ''IGRpc2FibGVkKCl7cmV0dXJuISghdGhpcy5fZGlzYWJsZWQmJiF0aGlzLnBhcmVudD8uZGlzYWJsZWQpfXNldCBkaXNhYmxlZChsKXt0aGlzLl9kaXNhYmxlZD1sfWRlc3Ryb3koKXt0aGlzLnNlbGVjdGVkLmNvbXBsZXRlKCl9c2V0U2VsZWN0ZWQobCxhLGQpe2whPT10aGlzLnNlbGVjdGVk''@;'; put 'put ''LnZhbHVlJiYodGhpcy5zZWxlY3RlZC5uZXh0KGwpLGQmJmwhPT0kdS5JTkRFVEVSTUlOQVRFJiZ0aGlzLmNoaWxkcmVuJiZ0aGlzLmNoaWxkcmVuLmZvckVhY2goaD0+e2guZGlzYWJsZWR8fGguc2V0U2VsZWN0ZWQobCwhMSwhMCl9KSxhJiZ0aGlzLnBhcmVudCYmdGhpcy5wYXJlbnQuX3Vw''@;'; put 'put ''ZGF0ZVNlbGVjdGlvbkZyb21DaGlsZHJlbigpKX10b2dnbGVTZWxlY3Rpb24obCl7dGhpcy5kaXNhYmxlZHx8dGhpcy5zZXRTZWxlY3RlZCh0aGlzLnNlbGVjdGVkLnZhbHVlPT09JHUuU0VMRUNURUQ/JHUuVU5TRUxFQ1RFRDokdS5TRUxFQ1RFRCwhMCxsKX1fdXBkYXRlU2VsZWN0aW9uRnJv''@;'; put 'put ''bUNoaWxkcmVuKCl7Y29uc3QgbD10aGlzLmNvbXB1dGVTZWxlY3Rpb25TdGF0ZUZyb21DaGlsZHJlbigpO2whPT10aGlzLnNlbGVjdGVkLnZhbHVlJiYodGhpcy5zZWxlY3RlZC5uZXh0KGwpLHRoaXMucGFyZW50JiZ0aGlzLnBhcmVudC5fdXBkYXRlU2VsZWN0aW9uRnJvbUNoaWxkcmVuKCkp''@;'; put 'put ''fWNvbXB1dGVTZWxlY3Rpb25TdGF0ZUZyb21DaGlsZHJlbigpe2xldCBsPSExLGE9ITE7Zm9yKGNvbnN0IGQgb2YgdGhpcy5jaGlsZHJlbilzd2l0Y2goZC5zZWxlY3RlZC52YWx1ZSl7Y2FzZSAkdS5JTkRFVEVSTUlOQVRFOmlmKGQuZGlzYWJsZWQpY29udGludWU7cmV0dXJuICR1LklOREVU''@;'; put 'put ''RVJNSU5BVEU7Y2FzZSAkdS5TRUxFQ1RFRDppZihsPSEwLGEpcmV0dXJuICR1LklOREVURVJNSU5BVEU7YnJlYWs7ZGVmYXVsdDppZihhPSEwLGwpcmV0dXJuICR1LklOREVURVJNSU5BVEV9cmV0dXJuIGw/YT8kdS5VTlNFTEVDVEVEOiR1LlNFTEVDVEVEOiR1LlVOU0VMRUNURUR9fWNsYXNz''@;'; put 'put ''IGRPIGV4dGVuZHMgVWRle2NvbnN0cnVjdG9yKGwsYSxkLGgpe3N1cGVyKCksdGhpcy5nZXRDaGlsZHJlbj1kLHRoaXMuZmVhdHVyZXNTZXJ2aWNlPWgsdGhpcy5jaGlsZHJlbkZldGNoZWQ9ITEsdGhpcy5fY2hpbGRyZW49W10sdGhpcy5tb2RlbD1sLHRoaXMucGFyZW50PWF9Z2V0IGNoaWxk''@;'; put 'put ''cmVuKCl7cmV0dXJuIHRoaXMuZmV0Y2hDaGlsZHJlbigpLHRoaXMuX2NoaWxkcmVufXNldCBjaGlsZHJlbihsKXt0aGlzLl9jaGlsZHJlbj1sfWRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbiYmdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSxzdXBlci5kZXN0cm95KCl9Y2xlYXJD''@;'; put 'put ''aGlsZHJlbigpe3RoaXMuX2NoaWxkcmVuLmZvckVhY2gobD0+bC5kZXN0cm95KCkpLGRlbGV0ZSB0aGlzLl9jaGlsZHJlbix0aGlzLmNoaWxkcmVuRmV0Y2hlZD0hMX1mZXRjaENoaWxkcmVuKCl7aWYodGhpcy5jaGlsZHJlbkZldGNoZWQpcmV0dXJuO2NvbnN0IGw9dGhpcy5nZXRDaGlsZHJl''@;'; put 'put ''bih0aGlzLm1vZGVsKTshZnVuY3Rpb24gc1dlKGMpe3JldHVybiBjJiYiZnVuY3Rpb24iPT10eXBlb2YgYy50aGVufShsKT9CTShsKT8odGhpcy5sb2FkaW5nPSEwLHRoaXMuc3Vic2NyaXB0aW9uPWwuc3Vic2NyaWJlKGE9Pnt0aGlzLl9jaGlsZHJlbj10aGlzLndyYXBDaGlsZHJlbihhKSx0''@;'; put 'put ''aGlzLmxvYWRpbmc9ITF9KSk6dGhpcy5fY2hpbGRyZW49bD90aGlzLndyYXBDaGlsZHJlbihsKTpbXToodGhpcy5sb2FkaW5nPSEwLGwudGhlbihhPT57dGhpcy5fY2hpbGRyZW49dGhpcy53cmFwQ2hpbGRyZW4oYSksdGhpcy5sb2FkaW5nPSExfSkpLHRoaXMuY2hpbGRyZW5GZXRjaGVkPSEw''@;'; put 'put ''LHRoaXMuZmVhdHVyZXNTZXJ2aWNlJiZ0aGlzLmZlYXR1cmVzU2VydmljZS5jaGlsZHJlbkZldGNoZWQubmV4dCgpfXdyYXBDaGlsZHJlbihsKXtyZXR1cm4gbC5tYXAoYT0+bmV3IGRPKGEsdGhpcyx0aGlzLmdldENoaWxkcmVuLHRoaXMuZmVhdHVyZXNTZXJ2aWNlKSl9fWxldCBaZGU9KCgp''@;'; put 'put ''PT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy50ZW1wbGF0ZT1hLHRoaXMuZmVhdHVyZXNTZXJ2aWNlPWQsdGhpcy5jZHI9aH1uZ09uQ2hhbmdlcygpe2xldCBhO2E9QXJyYXkuaXNBcnJheSh0aGlzLm5vZGVzKT90aGlzLm5vZGVzLm1hcChkPT5uZXcgZE8oZCxudWxsLHRoaXMu''@;'; put 'put ''Z2V0Q2hpbGRyZW4sdGhpcy5mZWF0dXJlc1NlcnZpY2UpKTpbbmV3IGRPKHRoaXMubm9kZXMsbnVsbCx0aGlzLmdldENoaWxkcmVuLHRoaXMuZmVhdHVyZXNTZXJ2aWNlKV0sdGhpcy5jaGlsZHJlbkZldGNoU3Vic2NyaXB0aW9ufHwodGhpcy5jaGlsZHJlbkZldGNoU3Vic2NyaXB0aW9uPXRo''@;'; put 'put ''aXMuZmVhdHVyZXNTZXJ2aWNlLmNoaWxkcmVuRmV0Y2hlZC5waXBlKGZtKDApKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCl9KSksdGhpcy5mZWF0dXJlc1NlcnZpY2UucmVjdXJzaW9uPXt0ZW1wbGF0ZTp0aGlzLnRlbXBsYXRlLHJvb3Q6YX19bmdPbkRlc3Ryb3ko''@;'; put 'put ''KXt0aGlzLmNoaWxkcmVuRmV0Y2hTdWJzY3JpcHRpb24mJnRoaXMuY2hpbGRyZW5GZXRjaFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShTbCksR2UoTzcpLEdlKEVzKSl9LGMuXHUwMjc1ZGlyPUVy''@;'; put 'put ''KHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsclJlY3Vyc2l2ZUZvciIsIiIsImNsclJlY3Vyc2l2ZUZvck9mIiwiIl1dLGlucHV0czp7bm9kZXM6W05uLk5vbmUsImNsclJlY3Vyc2l2ZUZvck9mIiwibm9kZXMiXSxnZXRDaGlsZHJlbjpbTm4uTm9uZSwiY2xyUmVjdXJzaXZlRm9yR2V0Q2hp''@;'; put 'put ''bGRyZW4iLCJnZXRDaGlsZHJlbiJdfSxmZWF0dXJlczpbd2xdfSksY30pKCksU0c9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2ZvY3VzUmVxdWVzdD1uZXcgV24sdGhpcy5fZm9jdXNDaGFuZ2U9bmV3IFdufWdldCBmb2N1c1JlcXVlc3QoKXtyZXR1cm4gdGhpcy5fZm9jdXNS''@;'; put 'put ''ZXF1ZXN0LmFzT2JzZXJ2YWJsZSgpfWdldCBmb2N1c0NoYW5nZSgpe3JldHVybiB0aGlzLl9mb2N1c0NoYW5nZS5hc09ic2VydmFibGUoKX1mb2N1c05vZGUoYSl7YSYmdGhpcy5fZm9jdXNSZXF1ZXN0Lm5leHQoYS5ub2RlSWQpfWJyb2FkY2FzdEZvY3VzZWROb2RlKGEpe3RoaXMuZm9jdXNl''@;'; put 'put ''ZE5vZGVJZCE9PWEmJih0aGlzLmZvY3VzZWROb2RlSWQ9YSx0aGlzLl9mb2N1c0NoYW5nZS5uZXh0KGEpKX1mb2N1c1BhcmVudChhKXthJiZ0aGlzLmZvY3VzTm9kZShhLnBhcmVudCl9Zm9jdXNGaXJzdFZpc2libGVOb2RlKCl7dGhpcy5mb2N1c05vZGUodGhpcy5yb290Tm9kZU1vZGVscyYm''@;'; put 'put ''dGhpcy5yb290Tm9kZU1vZGVsc1swXSl9Zm9jdXNMYXN0VmlzaWJsZU5vZGUoKXt0aGlzLmZvY3VzTm9kZSh0aGlzLmZpbmRMYXN0VmlzaWJsZUluVHJlZSgpKX1mb2N1c05vZGVBYm92ZShhKXt0aGlzLmZvY3VzTm9kZSh0aGlzLmZpbmROb2RlQWJvdmUoYSkpfWZvY3VzTm9kZUJlbG93KGEp''@;'; put 'put ''e3RoaXMuZm9jdXNOb2RlKHRoaXMuZmluZE5vZGVCZWxvdyhhKSl9Zm9jdXNOb2RlU3RhcnRzV2l0aChhLGQpe3RoaXMuZm9jdXNOb2RlKHRoaXMuZmluZENsb3Nlc3ROb2RlU3RhcnRzV2l0aChhLGQpKX1maW5kU2libGluZ3MoYSl7cmV0dXJuIGEucGFyZW50P2EucGFyZW50LmNoaWxkcmVu''@;'; put 'put ''OnRoaXMucm9vdE5vZGVNb2RlbHN9ZmluZExhc3RWaXNpYmxlSW5Ob2RlKGEpe2lmKCFhKXJldHVybiBudWxsO2lmKGEuZXhwYW5kZWQmJmEuY2hpbGRyZW4ubGVuZ3RoPjApe2NvbnN0IGQ9YS5jaGlsZHJlbjtyZXR1cm4gdGhpcy5maW5kTGFzdFZpc2libGVJbk5vZGUoZFtkLmxlbmd0aC0x''@;'; put 'put ''XSl9cmV0dXJuIGF9ZmluZE5leHRGb2N1c2FibGUoYSl7aWYoIWEpcmV0dXJuIG51bGw7Y29uc3QgZD10aGlzLmZpbmRTaWJsaW5ncyhhKSxoPWQuaW5kZXhPZihhKTtyZXR1cm4gaDxkLmxlbmd0aC0xP2RbaCsxXTpoPT09ZC5sZW5ndGgtMT90aGlzLmZpbmROZXh0Rm9jdXNhYmxlKGEucGFy''@;'; put 'put ''ZW50KTpudWxsfWZpbmRMYXN0VmlzaWJsZUluVHJlZSgpe3JldHVybiB0aGlzLmZpbmRMYXN0VmlzaWJsZUluTm9kZSh0aGlzLnJvb3ROb2RlTW9kZWxzJiZ0aGlzLnJvb3ROb2RlTW9kZWxzLmxlbmd0aCYmdGhpcy5yb290Tm9kZU1vZGVsc1t0aGlzLnJvb3ROb2RlTW9kZWxzLmxlbmd0aC0x''@;'; put 'put ''XSl9ZmluZE5vZGVBYm92ZShhKXtpZighYSlyZXR1cm4gbnVsbDtjb25zdCBkPXRoaXMuZmluZFNpYmxpbmdzKGEpLGg9ZC5pbmRleE9mKGEpO3JldHVybiAwPT09aD9hLnBhcmVudDpoPjA/dGhpcy5maW5kTGFzdFZpc2libGVJbk5vZGUoZFtoLTFdKTpudWxsfWZpbmROb2RlQmVsb3coYSl7''@;'; put 'put ''cmV0dXJuIGE/YS5leHBhbmRlZCYmYS5jaGlsZHJlbi5sZW5ndGg+MD9hLmNoaWxkcmVuWzBdOnRoaXMuZmluZE5leHRGb2N1c2FibGUoYSk6bnVsbH1maW5kRGVzY2VuZGVudE5vZGVTdGFydHNXaXRoKGEsZCl7aWYoZC5leHBhbmRlZCYmZC5jaGlsZHJlbi5sZW5ndGg+MClmb3IoY29uc3Qg''@;'; put 'put ''aCBvZiBkLmNoaWxkcmVuKXtjb25zdCBmPXRoaXMuZmluZE5vZGVTdGFydHNXaXRoKGEsaCk7aWYoZilyZXR1cm4gZn1yZXR1cm4gbnVsbH1maW5kU2libGluZ05vZGVTdGFydHNXaXRoKGEsZCl7Y29uc3QgaD10aGlzLmZpbmRTaWJsaW5ncyhkKTtmb3IobGV0IHY9aC5pbmRleE9mKGQpKzE7''@;'; put 'put ''djxoLmxlbmd0aDt2Kyspe2NvbnN0IEQ9dGhpcy5maW5kTm9kZVN0YXJ0c1dpdGgoYSxoW3ZdKTtpZihEKXJldHVybiBEfXJldHVybiBudWxsfWZpbmRSb290Tm9kZVN0YXJ0c1dpdGgoYSxkKXtmb3IoY29uc3QgaCBvZiB0aGlzLnJvb3ROb2RlTW9kZWxzKXtpZihkLnBhcmVudCYmZC5wYXJl''@;'; put 'put ''bnQ9PT1oKWNvbnRpbnVlO2NvbnN0IGY9dGhpcy5maW5kTm9kZVN0YXJ0c1dpdGgoYSxoKTtpZihmKXJldHVybiBmfXJldHVybiBudWxsfWZpbmROb2RlU3RhcnRzV2l0aChhLGQpe3JldHVybiBkP2QudGV4dENvbnRlbnQuc3RhcnRzV2l0aChhKT9kOnRoaXMuZmluZERlc2NlbmRlbnROb2Rl''@;'; put 'put ''U3RhcnRzV2l0aChhLGQpOm51bGx9ZmluZENsb3Nlc3ROb2RlU3RhcnRzV2l0aChhLGQpe2lmKCFkKXJldHVybiBudWxsO2NvbnN0IGg9dGhpcy5maW5kRGVzY2VuZGVudE5vZGVTdGFydHNXaXRoKGEsZCk7aWYoaClyZXR1cm4gaDtjb25zdCBmPXRoaXMuZmluZFNpYmxpbmdOb2RlU3RhcnRz''@;'; put 'put ''V2l0aChhLGQpO3JldHVybiBmfHwodGhpcy5maW5kUm9vdE5vZGVTdGFydHNXaXRoKGEsZCl8fHRoaXMuZmluZE5vZGVTdGFydHNXaXRoKGEsZC5wYXJlbnQpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46''@;'; put 'put ''YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7Y2xhc3MgbFdlIGV4dGVuZHMgVWRle2NvbnN0cnVjdG9yKGwpe3N1cGVyKCksdGhpcy5wYXJlbnQ9bCxsJiZsLl9hZGRDaGlsZCh0aGlzKSx0aGlzLmNoaWxkcmVuPVtdfWRlc3Ryb3koKXt0aGlzLnBhcmVudCYmdGhpcy5wYXJlbnQuX3Jl''@;'; put 'put ''bW92ZUNoaWxkKHRoaXMpLHN1cGVyLmRlc3Ryb3koKX1fYWRkQ2hpbGQobCl7dGhpcy5jaGlsZHJlbi5wdXNoKGwpfV9yZW1vdmVDaGlsZChsKXtjb25zdCBhPXRoaXMuY2hpbGRyZW4uaW5kZXhPZihsKTthPi0xJiZ0aGlzLmNoaWxkcmVuLnNwbGljZShhLDEpfX1sZXQgZmc9KCgpPT57Y2xh''@;'; put 'put ''c3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmVsPWF9Z2V0IGFjdGl2ZSgpe3JldHVybiB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCJhY3RpdmUiKX1hY3RpdmF0ZSgpe3RoaXMuZWwubmF0aXZlRWxlbWVudCYmdGhpcy5lbC5uYXRpdmVFbGVtZW50LmNsaWNrJiZ0''@;'; put 'put ''aGlzLmVsLm5hdGl2ZUVsZW1lbnQuY2xpY2soKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoSmkpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiw4LCJjbHItdHJlZW5vZGUtbGluayJdXX0pLGN9KSgpLFBkPSgoKT0+''@;'; put 'put ''e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0sRCxaKXt0aGlzLnBsYXRmb3JtSWQ9YSx0aGlzLmZlYXR1cmVzU2VydmljZT1oLHRoaXMuZXhwYW5kU2VydmljZT1mLHRoaXMuY29tbW9uU3RyaW5ncz12LHRoaXMuZm9jdXNNYW5hZ2VyPU0sdGhpcy5lbGVtZW50UmVmPUQsdGhpcy5z''@;'; put 'put ''ZWxlY3RlZENoYW5nZT1uZXcgS3IoITEpLHRoaXMuZXhwYW5kZWRDaGFuZ2U9bmV3IEtyLHRoaXMuU1RBVEVTPSR1LHRoaXMuaXNNb2RlbExvYWRpbmc9ITEsdGhpcy5ub2RlSWQ9TXUoKSx0aGlzLmNvbnRlbnRDb250YWluZXJUYWJpbmRleD0tMSx0aGlzLnNraXBFbWl0Q2hhbmdlPSExLHRo''@;'; put 'put ''aXMudHlwZUFoZWFkS2V5QnVmZmVyPSIiLHRoaXMudHlwZUFoZWFkS2V5RXZlbnQ9bmV3IFduLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLl9tb2RlbD1oLnJlY3Vyc2lvbj9aLnZpZXc/Wi52aWV3LmNvbnRleHQuY2xyTW9kZWw6Wi5fbFZpZXdbOF0uY2xyTW9kZWw6bmV3IGxXZShkP2Qu''@;'; put 'put ''X21vZGVsOm51bGwpLHRoaXMuX21vZGVsLm5vZGVJZD10aGlzLm5vZGVJZH1nZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5fbW9kZWwuZGlzYWJsZWR9c2V0IGRpc2FibGVkKGEpe3RoaXMuX21vZGVsLmRpc2FibGVkPWF9Z2V0IHNlbGVjdGVkKCl7cmV0dXJuIHRoaXMuX21vZGVsLnNlbGVj''@;'; put 'put ''dGVkLnZhbHVlfXNldCBzZWxlY3RlZChhKXt0aGlzLmZlYXR1cmVzU2VydmljZS5zZWxlY3RhYmxlPSEwLChudWxsPT09YXx8dHlwZW9mIGE+InUiKSYmKGE9JHUuVU5TRUxFQ1RFRCksImJvb2xlYW4iPT10eXBlb2YgYSYmKGE9YT8kdS5TRUxFQ1RFRDokdS5VTlNFTEVDVEVEKSx0aGlzLnNr''@;'; put 'put ''aXBFbWl0Q2hhbmdlPSEwLHRoaXMuX21vZGVsLnNldFNlbGVjdGVkKGEsdGhpcy5mZWF0dXJlc1NlcnZpY2UuZWFnZXIsdGhpcy5mZWF0dXJlc1NlcnZpY2UuZWFnZXIpLHRoaXMuc2tpcEVtaXRDaGFuZ2U9ITF9Z2V0IGV4cGFuZGVkKCl7cmV0dXJuIHRoaXMuZXhwYW5kU2VydmljZS5leHBh''@;'; put 'put ''bmRlZH1zZXQgZXhwYW5kZWQoYSl7dGhpcy5leHBhbmRTZXJ2aWNlLmV4cGFuZGVkPWF9c2V0IGNsckZvclR5cGVBaGVhZChhKXt0aGlzLl9tb2RlbC50ZXh0Q29udGVudD1XZGUoYXx8dGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQudGV4dENvbnRlbnQpfWdldCBhcmlhU2VsZWN0ZWQo''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5pc1NlbGVjdGFibGUoKT90aGlzLl9tb2RlbC5zZWxlY3RlZC52YWx1ZT09PSR1LlNFTEVDVEVEOiEhdGhpcy50cmVlTm9kZUxpbms/LmFjdGl2ZXx8bnVsbH1nZXQgdHJlZU5vZGVMaW5rKCl7cmV0dXJuIHRoaXMudHJlZU5vZGVMaW5rTGlzdCYmdGhpcy50cmVlTm9k''@;'; put 'put ''ZUxpbmtMaXN0LmZpcnN0fWdldCBpc1BhcmVudCgpe3JldHVybiB0aGlzLl9tb2RlbC5jaGlsZHJlbiYmdGhpcy5fbW9kZWwuY2hpbGRyZW4ubGVuZ3RoPjB9bmdPbkluaXQoKXt0aGlzLl9tb2RlbC5leHBhbmRlZD10aGlzLmV4cGFuZGVkLHRoaXMuX21vZGVsLmRpc2FibGVkPXRoaXMuZGlz''@;'; put 'put ''YWJsZWQsdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5fbW9kZWwuc2VsZWN0ZWQucGlwZSgkbCgoKT0+IXRoaXMuc2tpcEVtaXRDaGFuZ2UpKS5zdWJzY3JpYmUoYT0+e3RoaXMuc2VsZWN0ZWRDaGFuZ2UuZW1pdChhKX0pKSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLmV4cGFu''@;'; put 'put ''ZFNlcnZpY2UuZXhwYW5kQ2hhbmdlLnN1YnNjcmliZShhPT57dGhpcy5leHBhbmRlZENoYW5nZS5lbWl0KGEpLHRoaXMuX21vZGVsLmV4cGFuZGVkPWF9KSksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5mb2N1c01hbmFnZXIuZm9jdXNSZXF1ZXN0LnN1YnNjcmliZShhPT57dGhpcy5u''@;'; put 'put ''b2RlSWQ9PT1hJiZ0aGlzLmZvY3VzVHJlZU5vZGUoKX0pLHRoaXMuZm9jdXNNYW5hZ2VyLmZvY3VzQ2hhbmdlLnN1YnNjcmliZShhPT57dGhpcy5jaGVja1RhYkluZGV4KGEpfSkpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuX21vZGVsLmxvYWRpbmckLnBpcGUoZm0oMCkpLnN1YnNj''@;'; put 'put ''cmliZShhPT50aGlzLmlzTW9kZWxMb2FkaW5nPWEpKX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLnR5cGVBaGVhZEtleUV2ZW50LnBpcGUoZm0oMjAwKSkuc3Vic2NyaWJlKGE9Pnt0aGlzLmZvY3VzTWFuYWdlci5mb2N1c05vZGVTdGFydHNXaXRo''@;'; put 'put ''KGEsdGhpcy5fbW9kZWwpLHRoaXMudHlwZUFoZWFkS2V5QnVmZmVyPSIifSkpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuX21vZGVsLnRleHRDb250ZW50fHwodGhpcy5fbW9kZWwudGV4dENvbnRlbnQ9V2RlKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnRleHRDb250ZW50KSl9bmdP''@;'; put 'put ''bkRlc3Ryb3koKXt0aGlzLl9tb2RlbC5kZXN0cm95KCksdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX1pc0V4cGFuZGFibGUoKXtyZXR1cm4gdHlwZW9mIHRoaXMuZXhwYW5kYWJsZTwidSI/dGhpcy5leHBhbmRhYmxlOiEhdGhpcy5leHBhbmRTZXJ2aWNl''@;'; put 'put ''LmV4cGFuZGFibGV8fHRoaXMuaXNQYXJlbnR9aXNTZWxlY3RhYmxlKCl7cmV0dXJuIHRoaXMuZmVhdHVyZXNTZXJ2aWNlLnNlbGVjdGFibGV9Zm9jdXNUcmVlTm9kZSgpe2NvbnN0IGE9dGhpcy5jb250ZW50Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQ7dGwodGhpcy5wbGF0Zm9ybUlkKSYmZG9j''@;'; put 'put ''dW1lbnQuYWN0aXZlRWxlbWVudCE9PWEmJih0aGlzLnNldFRhYkluZGV4KDApLGEuZm9jdXMoKSxhLnNjcm9sbEludG9WaWV3KHtibG9jazoibmVhcmVzdCIsaW5saW5lOiJuZWFyZXN0In0pKX1icm9hZGNhc3RGb2N1c09uQ29udGFpbmVyKCl7dGhpcy5mb2N1c01hbmFnZXIuYnJvYWRjYXN0''@;'; put 'put ''Rm9jdXNlZE5vZGUodGhpcy5ub2RlSWQpfW9uS2V5RG93bihhKXtzd2l0Y2goUlkoYSksSTIoYS5rZXkpKXtjYXNlIGdhLkFycm93VXA6dGhpcy5mb2N1c01hbmFnZXIuZm9jdXNOb2RlQWJvdmUodGhpcy5fbW9kZWwpO2JyZWFrO2Nhc2UgZ2EuQXJyb3dEb3duOnRoaXMuZm9jdXNNYW5hZ2Vy''@;'; put 'put ''LmZvY3VzTm9kZUJlbG93KHRoaXMuX21vZGVsKTticmVhaztjYXNlIGdhLkFycm93UmlnaHQ6dGhpcy5leHBhbmRPckZvY3VzRmlyc3RDaGlsZCgpO2JyZWFrO2Nhc2UgZ2EuQXJyb3dMZWZ0OnRoaXMuY29sbGFwc2VPckZvY3VzUGFyZW50KCk7YnJlYWs7Y2FzZSBnYS5Ib21lOmEucHJldmVu''@;'; put 'put ''dERlZmF1bHQoKSx0aGlzLmZvY3VzTWFuYWdlci5mb2N1c0ZpcnN0VmlzaWJsZU5vZGUoKTticmVhaztjYXNlIGdhLkVuZDphLnByZXZlbnREZWZhdWx0KCksdGhpcy5mb2N1c01hbmFnZXIuZm9jdXNMYXN0VmlzaWJsZU5vZGUoKTticmVhaztjYXNlIGdhLkVudGVyOnRoaXMudG9nZ2xlRXhw''@;'; put 'put ''YW5kT3JUcmlnZ2VyRGVmYXVsdCgpO2JyZWFrO2Nhc2UgZ2EuU3BhY2U6Y2FzZSBnYS5TcGFjZWJhcjphLnByZXZlbnREZWZhdWx0KCksdGhpcy50b2dnbGVFeHBhbmRPclRyaWdnZXJEZWZhdWx0KCk7YnJlYWs7ZGVmYXVsdDppZih0aGlzLl9tb2RlbC50ZXh0Q29udGVudCYmZnVuY3Rpb24g''@;'; put 'put ''cXplKGMpe2NvbnN0IGw9Yy5rZXk7cmV0dXJuIGwudG9Mb3dlckNhc2UoKSE9PWwudG9VcHBlckNhc2UoKXx8bD49IjAiJiZsPD0iOSJ9KGEpKXJldHVybiB0aGlzLnR5cGVBaGVhZEtleUJ1ZmZlcis9YS5rZXksdm9pZCB0aGlzLnR5cGVBaGVhZEtleUV2ZW50Lm5leHQodGhpcy50eXBlQWhl''@;'; put 'put ''YWRLZXlCdWZmZXIpfXRoaXMudHlwZUFoZWFkS2V5QnVmZmVyPSIifXNldFRhYkluZGV4KGEpe3RoaXMuY29udGVudENvbnRhaW5lclRhYmluZGV4PWEsdGhpcy5jb250ZW50Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsYS50b1N0cmluZygpKX1jaGVj''@;'; put 'put ''a1RhYkluZGV4KGEpe3RsKHRoaXMucGxhdGZvcm1JZCkmJnRoaXMubm9kZUlkIT09YSYmLTEhPT10aGlzLmNvbnRlbnRDb250YWluZXJUYWJpbmRleCYmdGhpcy5zZXRUYWJJbmRleCgtMSl9dG9nZ2xlRXhwYW5kT3JUcmlnZ2VyRGVmYXVsdCgpe3RoaXMuZGlzYWJsZWR8fCh0aGlzLmlzRXhw''@;'; put 'put ''YW5kYWJsZSgpJiYhdGhpcy5pc1NlbGVjdGFibGUoKT90aGlzLmV4cGFuZFNlcnZpY2UuZXhwYW5kZWQ9IXRoaXMuZXhwYW5kZWQ6dGhpcy50cmlnZ2VyRGVmYXVsdEFjdGlvbigpKX1leHBhbmRPckZvY3VzRmlyc3RDaGlsZCgpe3RoaXMuZGlzYWJsZWR8fCh0aGlzLmV4cGFuZGVkP3RoaXMu''@;'; put 'put ''aXNQYXJlbnQmJnRoaXMuZm9jdXNNYW5hZ2VyLmZvY3VzTm9kZUJlbG93KHRoaXMuX21vZGVsKTp0aGlzLmlzRXhwYW5kYWJsZSgpJiYodGhpcy5leHBhbmRTZXJ2aWNlLmV4cGFuZGVkPSEwKSl9Y29sbGFwc2VPckZvY3VzUGFyZW50KCl7dGhpcy5kaXNhYmxlZHx8KHRoaXMuZXhwYW5kZWQ/''@;'; put 'put ''dGhpcy5leHBhbmRTZXJ2aWNlLmV4cGFuZGVkPSExOnRoaXMuZm9jdXNNYW5hZ2VyLmZvY3VzUGFyZW50KHRoaXMuX21vZGVsKSl9dHJpZ2dlckRlZmF1bHRBY3Rpb24oKXt0aGlzLnRyZWVOb2RlTGluaz90aGlzLnRyZWVOb2RlTGluay5hY3RpdmF0ZSgpOnRoaXMuaXNTZWxlY3RhYmxlKCkm''@;'; put 'put ''JnRoaXMuX21vZGVsLnRvZ2dsZVNlbGVjdGlvbih0aGlzLmZlYXR1cmVzU2VydmljZS5lYWdlcil9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKGlvKSxHZShjLDEyKSxHZShPNyksR2UoVTEpLEdlKGlzKSxHZShTRyksR2UoSmkpLEdlKERzKSl9''@;'; put 'put ''LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci10cmVlLW5vZGUiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmYW8oaCxmZyw0KSwyJmEpe2xldCBmO0NpKGY9U2koKSkmJihkLnRyZWVOb2RlTGlua0xpc3Q9Zil9fSx2aWV3UXVlcnk6ZnVu''@;'; put 'put ''Y3Rpb24oYSxkKXtpZigxJmEmJnFhKGpqZSw3LEppKSwyJmEpe2xldCBoO0NpKGg9U2koKSkmJihkLmNvbnRlbnRDb250YWluZXI9aC5maXJzdCl9fSxob3N0VmFyczo0LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmVHIoImNsci10cmVlLW5vZGUiLCEwKSgiZGlzYWJsZWQiLGQu''@;'; put 'put ''X21vZGVsLmRpc2FibGVkKX0saW5wdXRzOntleHBhbmRhYmxlOltObi5Ob25lLCJjbHJFeHBhbmRhYmxlIiwiZXhwYW5kYWJsZSJdLGRpc2FibGVkOltObi5Ob25lLCJjbHJEaXNhYmxlZCIsImRpc2FibGVkIl0sc2VsZWN0ZWQ6W05uLk5vbmUsImNsclNlbGVjdGVkIiwic2VsZWN0ZWQiXSxl''@;'; put 'put ''eHBhbmRlZDpbTm4uTm9uZSwiY2xyRXhwYW5kZWQiLCJleHBhbmRlZCJdLGNsckZvclR5cGVBaGVhZDoiY2xyRm9yVHlwZUFoZWFkIn0sb3V0cHV0czp7c2VsZWN0ZWRDaGFuZ2U6ImNsclNlbGVjdGVkQ2hhbmdlIixleHBhbmRlZENoYW5nZToiY2xyRXhwYW5kZWRDaGFuZ2UifSxmZWF0dXJl''@;'; put 'put ''czpbZGEoW2pkZSxVMSx7cHJvdmlkZTpEeCx1c2VFeGlzdGluZzpVMX1dKV0sbmdDb250ZW50U2VsZWN0b3JzOlVqZSxkZWNsczoxMix2YXJzOjEyLGNvbnN0czpbWyJjb250ZW50Q29udGFpbmVyIiwiIl0sWyJ0cmVlbm9kZUNvbnRlbnQiLCIiXSxbInJvbGUiLCJ0cmVlaXRlbSIsInRhYmlu''@;'; put 'put ''ZGV4IiwiLTEiLDEsImNsci10cmVlLW5vZGUtY29udGVudC1jb250YWluZXIiLDMsImtleWRvd24iLCJmb2N1cyJdLFsiYXJpYS1oaWRkZW4iLCJ0cnVlIiwidHlwZSIsImJ1dHRvbiIsInRhYmluZGV4IiwiLTEiLCJjbGFzcyIsImNsci10cmVlbm9kZS1jYXJldCIsMywiZGlzYWJsZWQiLCJj''@;'; put 'put ''bGljayIsImZvY3VzIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci10cmVlbm9kZS1zcGlubmVyLWNvbnRhaW5lciIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItY2hlY2tib3gtd3JhcHBlciBjbHItdHJlZW5vZGUtY2hlY2tib3giLDQsIm5nSWYiXSxbImNsYXNzIiwiY2xyLXRyZWVub2RlLWNv''@;'; put 'put ''bnRlbnQiLDMsIm1vdXNldXAiLDQsIm5nSWYiXSxbMSwiY2xyLXRyZWVub2RlLWNoaWxkcmVuIl0sWzMsInBhcmVudCJdLFsiYXJpYS1oaWRkZW4iLCJ0cnVlIiwidHlwZSIsImJ1dHRvbiIsInRhYmluZGV4IiwiLTEiLDEsImNsci10cmVlbm9kZS1jYXJldCIsMywiY2xpY2siLCJmb2N1cyIs''@;'; put 'put ''ImRpc2FibGVkIl0sWyJzaGFwZSIsImFuZ2xlIiwxLCJjbHItdHJlZW5vZGUtY2FyZXQtaWNvbiJdLFsxLCJjbHItdHJlZW5vZGUtc3Bpbm5lci1jb250YWluZXIiXSxbMSwiY2xyLXRyZWVub2RlLXNwaW5uZXIiLCJzcGlubmVyIl0sWzEsImNsci1jaGVja2JveC13cmFwcGVyIiwiY2xyLXRy''@;'; put 'put ''ZWVub2RlLWNoZWNrYm94Il0sWyJhcmlhLWhpZGRlbiIsInRydWUiLCJ0eXBlIiwiY2hlY2tib3giLCJ0YWJpbmRleCIsIi0xIiwxLCJjbHItY2hlY2tib3giLDMsImNoYW5nZSIsImZvY3VzIiwiaWQiLCJkaXNhYmxlZCIsImNoZWNrZWQiLCJpbmRldGVybWluYXRlIl0sWzEsImNsci1jb250''@;'; put 'put ''cm9sLWxhYmVsIiwzLCJmb3IiXSxbMywibmdUZW1wbGF0ZU91dGxldCJdLFsxLCJjbHItdHJlZW5vZGUtY29udGVudCIsMywibW91c2V1cCJdLFsiY2xhc3MiLCJjbHItc3Itb25seSIsNCwibmdJZiJdLFsxLCJjbHItc3Itb25seSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpe2lmKDEmYSl7''@;'; put 'put ''Y29uc3QgaD1MbigpO3NhKHpqZSksZGUoMCwiZGl2IiwyLDApLEZ0KCJrZXlkb3duIixmdW5jdGlvbih2KXtyZXR1cm4gd3QoaCksQ3QoZC5vbktleURvd24odikpfSkoImZvY3VzIixmdW5jdGlvbigpe3JldHVybiB3dChoKSxDdChkLmJyb2FkY2FzdEZvY3VzT25Db250YWluZXIoKSl9KSxn''@;'; put 'put ''dCgyLFpqZSwyLDIsImJ1dHRvbiIsMykoMyxXamUsMiwwLCJkaXYiLDQpKDQsWWplLDQsNiwiZGl2Iiw1KSg1LEdqZSwyLDEsImRpdiIsNikoNixLamUsMiwxLCJuZy10ZW1wbGF0ZSIsbnVsbCwxLEljKSxoZSgpLGRlKDgsImRpdiIsNyksWXIoOSksWXIoMTAsMSksR3QoMTEsImNsci1yZWN1''@;'; put 'put ''cnNpdmUtY2hpbGRyZW4iLDgpLGhlKCl9MiZhJiYoVHIoImNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQiLGQuZGlzYWJsZWQpLGhyKCJhcmlhLWRpc2FibGVkIixkLmRpc2FibGVkKSgiYXJpYS1leHBhbmRlZCIsZC5pc0V4cGFuZGFibGUoKT9kLmV4cGFuZGVkOm51bGwpKCJhcmlhLXNlbGVj''@;'; put 'put ''dGVkIixkLmFyaWFTZWxlY3RlZCksZmUoMiksTWUoIm5nSWYiLGQuaXNFeHBhbmRhYmxlKCkmJiFkLmlzTW9kZWxMb2FkaW5nJiYhZC5leHBhbmRTZXJ2aWNlLmxvYWRpbmcpLGZlKCksTWUoIm5nSWYiLGQuZXhwYW5kU2VydmljZS5sb2FkaW5nfHxkLmlzTW9kZWxMb2FkaW5nKSxmZSgpLE1l''@;'; put 'put ''KCJuZ0lmIixkLmZlYXR1cmVzU2VydmljZS5zZWxlY3RhYmxlKSxmZSgpLE1lKCJuZ0lmIiwhZC5mZWF0dXJlc1NlcnZpY2Uuc2VsZWN0YWJsZSksZmUoMyksTWUoIkB0b2dnbGVDaGlsZHJlbkFuaW0iLGQuZXhwYW5kU2VydmljZS5leHBhbmRlZD8iZXhwYW5kZWQiOiJjb2xsYXBzZWQiKSxo''@;'; put 'put ''cigicm9sZSIsZC5pc0V4cGFuZGFibGUoKSYmIWQuZmVhdHVyZXNTZXJ2aWNlLnJlY3Vyc2lvbj8iZ3JvdXAiOm51bGwpLGZlKDMpLE1lKCJwYXJlbnQiLGQuX21vZGVsKSl9LGRlcGVuZGVuY2llczpbYmEsTjEscnMsemRlXSxlbmNhcHN1bGF0aW9uOjIsZGF0YTp7YW5pbWF0aW9uOlt5aCgi''@;'; put 'put ''dG9nZ2xlQ2hpbGRyZW5BbmltIixbaXUoImNvbGxhcHNlZCA9PiBleHBhbmRlZCIsW3VzKHtoZWlnaHQ6MH0pLE0wKDIwMCx1cyh7aGVpZ2h0OiIqIn0pKV0pLGl1KCJleHBhbmRlZCA9PiBjb2xsYXBzZWQiLFt1cyh7aGVpZ2h0OiIqIn0pLE0wKDIwMCx1cyh7aGVpZ2h0OjB9KSldKSxTTCgi''@;'; put 'put ''ZXhwYW5kZWQiLHVzKHtoZWlnaHQ6IioiLCJvdmVyZmxvdy15IjoidmlzaWJsZSJ9KSksU0woImNvbGxhcHNlZCIsdXMoe2hlaWdodDowfSkpXSldfX0pLGN9KSgpO2Z1bmN0aW9uIFdkZShjKXtyZXR1cm4gYy50b0xvY2FsZUxvd2VyQ2FzZSgpLnRyaW0oKX1sZXQgRWg9KCgpPT57Y2xhc3Mg''@;'; put 'put ''Y3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYpe3RoaXMuZmVhdHVyZXNTZXJ2aWNlPWEsdGhpcy5mb2N1c01hbmFnZXJTZXJ2aWNlPWQsdGhpcy5yZW5kZXJlcj1oLHRoaXMuZWw9Zix0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5faXNNdWx0aVNlbGVjdGFibGU9ITE7Y29uc3QgTT12LnJ1bk91''@;'; put 'put ''dHNpZGVBbmd1bGFyKCgpPT54ZChmLm5hdGl2ZUVsZW1lbnQsImZvY3VzaW4iKS5zdWJzY3JpYmUoRD0+e0QudGFyZ2V0PT09Zi5uYXRpdmVFbGVtZW50JiYoZC5mb2N1c0ZpcnN0VmlzaWJsZU5vZGUoKSxoLnJlbW92ZUF0dHJpYnV0ZShmLm5hdGl2ZUVsZW1lbnQsInRhYmluZGV4IikpfSkp''@;'; put 'put ''O3RoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKE0pfXNldCBsYXp5KGEpe3RoaXMuZmVhdHVyZXNTZXJ2aWNlLmVhZ2VyPSFhfWdldCBpc011bHRpU2VsZWN0YWJsZSgpe3JldHVybiB0aGlzLl9pc011bHRpU2VsZWN0YWJsZX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLnNldFJvb3ROb2Rlcygp''@;'; put 'put ''LHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMucm9vdE5vZGVzLmNoYW5nZXMuc3Vic2NyaWJlKCgpPT57dGhpcy5zZXRNdWx0aVNlbGVjdGFibGUoKSx0aGlzLnNldFJvb3ROb2RlcygpfSkpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNj''@;'; put 'put ''cmliZSgpKX1zZXRNdWx0aVNlbGVjdGFibGUoKXt0aGlzLmZlYXR1cmVzU2VydmljZS5zZWxlY3RhYmxlJiZ0aGlzLnJvb3ROb2Rlcy5sZW5ndGg+MD8odGhpcy5faXNNdWx0aVNlbGVjdGFibGU9ITAsdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJh''@;'; put 'put ''cmlhLW11bHRpc2VsZWN0YWJsZSIsInRydWUiKSk6KHRoaXMuX2lzTXVsdGlTZWxlY3RhYmxlPSExLHRoaXMucmVuZGVyZXIucmVtb3ZlQXR0cmlidXRlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwiYXJpYS1tdWx0aXNlbGVjdGFibGUiKSl9c2V0Um9vdE5vZGVzKCl7dGhpcy5mb2N1c01hbmFn''@;'; put 'put ''ZXJTZXJ2aWNlLnJvb3ROb2RlTW9kZWxzPXRoaXMucm9vdE5vZGVzLm1hcChhPT5hLl9tb2RlbCkuZmlsdGVyKGE9PiFhLnBhcmVudCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKE83KSxHZShTRyksR2UoRW8pLEdlKEppKSxHZShXYSkpfSxj''@;'; put 'put ''Llx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItdHJlZSJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZhbyhoLFBkLDQpLDImYSl7bGV0IGY7Q2koZj1TaSgpKSYmKGQucm9vdE5vZGVzPWYpfX0saG9zdEF0dHJzOlsidGFiaW5kZXgiLCIwIl0s''@;'; put 'put ''aG9zdFZhcnM6MSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJmhyKCJyb2xlIiwidHJlZSIpfSxpbnB1dHM6e2xhenk6W05uLk5vbmUsImNsckxhenkiLCJsYXp5Il19LGZlYXR1cmVzOltkYShbamRlLFNHXSldLG5nQ29udGVudFNlbGVjdG9yczp5byxkZWNsczoyLHZhcnM6MSxj''@;'; put 'put ''b25zdHM6W1szLCJjaGlsZHJlbiIsNCwibmdJZiJdLFszLCJjaGlsZHJlbiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKCksWXIoMCksZ3QoMSxxamUsMSwxLCJjbHItcmVjdXJzaXZlLWNoaWxkcmVuIiwwKSksMiZhJiYoZmUoKSxNZSgibmdJZiIsZC5mZWF0dXJlc1NlcnZp''@;'; put 'put ''Y2UucmVjdXJzaW9uKSl9LGRlcGVuZGVuY2llczpbYmEsemRlXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxkV2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe1RzLmFkZEljb25zKEV5KX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUw''@;'; put 'put ''Mjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbUmEsQXMsUFldfSksY30pKCksaFdlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVp''@;'; put 'put ''bmo9QXIoe2ltcG9ydHM6W3JXZSxhV2UsZFdlXX0pLGN9KSgpO2NvbnN0IGZXZT1bImluZm8iLCJ3YXJuaW5nIiwiZGFuZ2VyIiwic3VjY2VzcyIsIm5ldXRyYWwiLCJ1bmtub3duIiwibG9hZGluZyJdO2xldCBNRz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuY29tbW9uU3Ry''@;'; put 'put ''aW5ncz1hLHRoaXMuZGVmYXVsdEljb25TaGFwZT0iaW5mby1zdGFuZGFyZCIsdGhpcy5fYWxlcnRJY29uU2hhcGU9IiIsdGhpcy5fYWxlcnRUeXBlPSJpbmZvIn1nZXQgYWxlcnRUeXBlKCl7cmV0dXJuIHRoaXMuX2FsZXJ0VHlwZX1zZXQgYWxlcnRUeXBlKGEpe2ZXZS5pbmRleE9mKGEpPi0x''@;'; put 'put ''JiYodGhpcy5fYWxlcnRUeXBlPWEpfWdldCBhbGVydEljb25TaGFwZSgpe3JldHVybiIiPT09dGhpcy5fYWxlcnRJY29uU2hhcGU/dGhpcy5pY29uSW5mb0Zyb21UeXBlKHRoaXMuX2FsZXJ0VHlwZSkuc2hhcGU6dGhpcy5fYWxlcnRJY29uU2hhcGV9c2V0IGFsZXJ0SWNvblNoYXBlKGEpe2E/''@;'; put 'put ''YSE9PXRoaXMuX2FsZXJ0SWNvblNoYXBlJiYodGhpcy5fYWxlcnRJY29uU2hhcGU9YSk6dGhpcy5fYWxlcnRJY29uU2hhcGU9IiJ9Z2V0IGFsZXJ0SWNvblRpdGxlKCl7cmV0dXJuIHRoaXMuaWNvbkluZm9Gcm9tVHlwZSh0aGlzLl9hbGVydFR5cGUpLnRpdGxlfWljb25JbmZvRnJvbVR5cGUo''@;'; put 'put ''YSl7Y29uc3QgZD17c2hhcGU6IiIsY3NzQ2xhc3M6IiIsdGl0bGU6IiJ9O3N3aXRjaChhKXtjYXNlIndhcm5pbmciOmQuc2hhcGU9Indhcm5pbmctc3RhbmRhcmQiLGQuY3NzQ2xhc3M9ImFsZXJ0LXdhcm5pbmciLGQudGl0bGU9dGhpcy5jb21tb25TdHJpbmdzLmtleXMud2FybmluZzticmVh''@;'; put 'put ''aztjYXNlImRhbmdlciI6ZC5zaGFwZT0iZXJyb3Itc3RhbmRhcmQiLGQuY3NzQ2xhc3M9ImFsZXJ0LWRhbmdlciIsZC50aXRsZT10aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5kYW5nZXI7YnJlYWs7Y2FzZSJzdWNjZXNzIjpkLnNoYXBlPSJzdWNjZXNzLXN0YW5kYXJkIixkLmNzc0NsYXNzPSJh''@;'; put 'put ''bGVydC1zdWNjZXNzIixkLnRpdGxlPXRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLnN1Y2Nlc3M7YnJlYWs7Y2FzZSJuZXV0cmFsIjpkLnNoYXBlPSJub3RlIixkLmNzc0NsYXNzPSJhbGVydC1uZXV0cmFsIixkLnRpdGxlPXRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLm5ldXRyYWw7YnJlYWs7Y2Fz''@;'; put 'put ''ZSJ1bmtub3duIjpkLnNoYXBlPSJoZWxwIixkLmNzc0NsYXNzPSJhbGVydC1uZXV0cmFsIixkLnRpdGxlPXRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLnVua25vd247YnJlYWs7Y2FzZSJsb2FkaW5nIjpkLnNoYXBlPSJsb2FkaW5nIixkLmNzc0NsYXNzPSJhbGVydC1uZXV0cmFsIixkLnRpdGxl''@;'; put 'put ''PXRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLnVua25vd247YnJlYWs7ZGVmYXVsdDpkLnNoYXBlPXRoaXMuZGVmYXVsdEljb25TaGFwZSxkLmNzc0NsYXNzPSJhbGVydC1pbmZvIixkLnRpdGxlPXRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLmluZm99cmV0dXJuIGR9fXJldHVybiBjLlx1MDI3NWZh''@;'; put 'put ''Yz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHhyKGlzKSl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksaE89KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2NoYW5nZT1uZXcgV259Z2V0IGNoYW5nZXMoKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5fY2hhbmdlLmFzT2JzZXJ2YWJsZSgpfWdldCBjdXJyZW50KCl7cmV0dXJuIHRoaXMuX2N1cnJlbnR9c2V0IGN1cnJlbnQoYSl7YSE9PXRoaXMuX2N1cnJlbnQmJih0aGlzLl9jdXJyZW50PWEsdGhpcy5fY2hhbmdlLm5leHQoYSkpfWdldCBhY3RpdmVBbGVydHMoKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5hbGxBbGVydHMmJnRoaXMuYWxsQWxlcnRzLmZpbHRlcihhPT4hYS5fY2xvc2VkKX1nZXQgY3VycmVudEFsZXJ0KCl7cmV0dXJuIHRoaXMuYWN0aXZlQWxlcnRzJiZ0aGlzLmFjdGl2ZUFsZXJ0c1t0aGlzLmN1cnJlbnRdfXNldCBjdXJyZW50QWxlcnQoYSl7dGhpcy5jdXJyZW50PXRoaXMu''@;'; put 'put ''YWN0aXZlQWxlcnRzLmluZGV4T2YoYSl9Z2V0IGNvdW50KCl7cmV0dXJuIHRoaXMuYWN0aXZlQWxlcnRzJiZ0aGlzLmFjdGl2ZUFsZXJ0cy5sZW5ndGh8fDB9bWFuYWdlKGEpe3RoaXMuc3Vic2NyaXB0aW9uJiZ0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuYWxsQWxlcnRz''@;'; put 'put ''PWEsdGhpcy5jdXJyZW50PSJudW1iZXIiPT10eXBlb2YgdGhpcy5fY3VycmVudD90aGlzLl9jdXJyZW50OjAsdGhpcy5fY2hhbmdlLm5leHQodGhpcy5jdXJyZW50KSx0aGlzLnN1YnNjcmlwdGlvbj10aGlzLmFsbEFsZXJ0cy5jaGFuZ2VzLnN1YnNjcmliZSgoKT0+e3RoaXMuY3VycmVudD49''@;'; put 'put ''dGhpcy5hbGxBbGVydHMubGVuZ3RoJiYodGhpcy5jdXJyZW50PU1hdGgubWF4KDAsdGhpcy5hbGxBbGVydHMubGVuZ3RoLTEpKX0pfW5leHQoKXt0aGlzLl9jdXJyZW50PXRoaXMuY3VycmVudD09PXRoaXMuYWN0aXZlQWxlcnRzLmxlbmd0aC0xPzA6dGhpcy5jdXJyZW50KzEsdGhpcy5fY2hh''@;'; put 'put ''bmdlLm5leHQodGhpcy5fY3VycmVudCl9cHJldmlvdXMoKXswIT09dGhpcy5hY3RpdmVBbGVydHMubGVuZ3RoJiYodGhpcy5fY3VycmVudD0wPT09dGhpcy5jdXJyZW50P3RoaXMuYWN0aXZlQWxlcnRzLmxlbmd0aC0xOnRoaXMuY3VycmVudC0xLHRoaXMuX2NoYW5nZS5uZXh0KHRoaXMuX2N1''@;'; put 'put ''cnJlbnQpKX1vcGVuKCl7MCE9PXRoaXMuYWN0aXZlQWxlcnRzLmxlbmd0aCYmKHRoaXMuY3VycmVudEFsZXJ0fHwodGhpcy5fY3VycmVudD0wKSx0aGlzLl9jaGFuZ2UubmV4dCh0aGlzLl9jdXJyZW50KSl9Y2xvc2UoYSl7MCE9PXRoaXMuYWN0aXZlQWxlcnRzLmxlbmd0aCYmKGEmJih0aGlz''@;'; put 'put ''Ll9jdXJyZW50PU1hdGgubWF4KDAsdGhpcy5jdXJyZW50LTEpKSx0aGlzLl9jaGFuZ2UubmV4dCh0aGlzLl9jdXJyZW50KSl9ZGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9uJiZ0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7''@;'; put 'put ''cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxKeD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNKXt0aGlzLmljb25TZXJ2aWNlPWEsdGhpcy5jZHI9ZCx0aGlzLm11bHRpQWxlcnRTZXJ2aWNl''@;'; put 'put ''PWgsdGhpcy5jb21tb25TdHJpbmdzPWYsdGhpcy5yZW5kZXJlcj12LHRoaXMuaG9zdEVsZW1lbnQ9TSx0aGlzLmlzU21hbGw9ITEsdGhpcy5jbG9zYWJsZT0hMCx0aGlzLmlzQXBwTGV2ZWw9ITEsdGhpcy5jbHJDbG9zZUJ1dHRvbkFyaWFMYWJlbD10aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5h''@;'; put 'put ''bGVydENsb3NlQnV0dG9uQXJpYUxhYmVsLHRoaXMuX2Nsb3NlZENoYW5nZWQ9bmV3IEtyKCExKSx0aGlzLl9jbG9zZWQ9ITEsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMuX2lzTGlnaHR3ZWlnaHQ9ITF9Z2V0IGlzTGlnaHR3ZWlnaHQoKXtyZXR1cm4gdGhpcy5faXNMaWdodHdlaWdodH1z''@;'; put 'put ''ZXQgaXNMaWdodHdlaWdodChhKXt0aGlzLl9pc0xpZ2h0d2VpZ2h0PWEsdGhpcy5jb25maWdBbGVydFR5cGUodGhpcy5fb3JpZ0FsZXJ0VHlwZSl9Z2V0IGFsZXJ0VHlwZSgpe3JldHVybiB0aGlzLmljb25TZXJ2aWNlLmFsZXJ0VHlwZX1zZXQgYWxlcnRUeXBlKGEpe3RoaXMuX29yaWdBbGVy''@;'; put 'put ''dFR5cGU9YSx0aGlzLmNvbmZpZ0FsZXJ0VHlwZShhKX1zZXQgYWxlcnRJY29uU2hhcGUoYSl7dGhpcy5pY29uU2VydmljZS5hbGVydEljb25TaGFwZT1hfXNldCBjbG9zZWQoYSl7YSYmIXRoaXMuX2Nsb3NlZD90aGlzLmNsb3NlKCk6IWEmJnRoaXMuX2Nsb3NlZCYmdGhpcy5vcGVuKCl9Z2V0''@;'; put 'put ''IGFsZXJ0Q2xhc3MoKXtyZXR1cm4gdGhpcy5pY29uU2VydmljZS5pY29uSW5mb0Zyb21UeXBlKHRoaXMuaWNvblNlcnZpY2UuYWxlcnRUeXBlKS5jc3NDbGFzc31nZXQgaGlkZGVuKCl7cmV0dXJuIHRoaXMuX2hpZGRlbn1zZXQgaGlkZGVuKGEpe2EhPT10aGlzLl9oaWRkZW4mJih0aGlzLl9o''@;'; put 'put ''aWRkZW49YSx0aGlzLl9oaWRkZW4/dGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmhvc3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnQsImFsZXJ0LWhpZGRlbiIpOnRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50LCJhbGVydC1oaWRkZW4iKSx0''@;'; put 'put ''aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCkpfW5nT25Jbml0KCl7dGhpcy5tdWx0aUFsZXJ0U2VydmljZSYmdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jaGFuZ2VzLnN1YnNjcmliZSgoKT0+e3RoaXMuaGlkZGVuPXRoaXMubXVsdGlBbGVydFNlcnZpY2Uu''@;'; put 'put ''Y3VycmVudEFsZXJ0IT09dGhpc30pKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9Y29uZmlnQWxlcnRUeXBlKGEpe3RoaXMuaWNvblNlcnZpY2UuYWxlcnRUeXBlPWF9b3Blbigpe3RoaXMuX2Nsb3NlZD0hMSx0aGlzLm11bHRp''@;'; put 'put ''QWxlcnRTZXJ2aWNlJiZ0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLm9wZW4oKSx0aGlzLl9jbG9zZWRDaGFuZ2VkLmVtaXQoITEpfWNsb3NlKCl7aWYoIXRoaXMuY2xvc2FibGUpcmV0dXJuO2NvbnN0IGE9dGhpcy5tdWx0aUFsZXJ0U2VydmljZT8uY3VycmVudEFsZXJ0PT09dGhpczt0aGlzLl9j''@;'; put 'put ''bG9zZWQ9ITAsdGhpcy5tdWx0aUFsZXJ0U2VydmljZT8uYWN0aXZlQWxlcnRzJiZ0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmNsb3NlKGEpLHRoaXMuX2Nsb3NlZENoYW5nZWQuZW1pdCghMCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKE1HKSxH''@;'; put 'put ''ZShFcyksR2UoaE8sOCksR2UoaXMpLEdlKEVvKSxHZShKaSkpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItYWxlcnQiXV0saW5wdXRzOntpc1NtYWxsOltObi5Ob25lLCJjbHJBbGVydFNpemVTbWFsbCIsImlzU21hbGwiXSxjbG9zYWJsZTpbTm4uTm9uZSwiY2xy''@;'; put 'put ''QWxlcnRDbG9zYWJsZSIsImNsb3NhYmxlIl0saXNBcHBMZXZlbDpbTm4uTm9uZSwiY2xyQWxlcnRBcHBMZXZlbCIsImlzQXBwTGV2ZWwiXSxjbHJDbG9zZUJ1dHRvbkFyaWFMYWJlbDoiY2xyQ2xvc2VCdXR0b25BcmlhTGFiZWwiLGlzTGlnaHR3ZWlnaHQ6W05uLk5vbmUsImNsckFsZXJ0TGln''@;'; put 'put ''aHR3ZWlnaHQiLCJpc0xpZ2h0d2VpZ2h0Il0sYWxlcnRUeXBlOltObi5Ob25lLCJjbHJBbGVydFR5cGUiLCJhbGVydFR5cGUiXSxhbGVydEljb25TaGFwZTpbTm4uTm9uZSwiY2xyQWxlcnRJY29uIiwiYWxlcnRJY29uU2hhcGUiXSxjbG9zZWQ6W05uLk5vbmUsImNsckFsZXJ0Q2xvc2VkIiwi''@;'; put 'put ''Y2xvc2VkIl19LG91dHB1dHM6e19jbG9zZWRDaGFuZ2VkOiJjbHJBbGVydENsb3NlZENoYW5nZSJ9LGZlYXR1cmVzOltkYShbTUddKV0sbmdDb250ZW50U2VsZWN0b3JzOnlvLGRlY2xzOjEsdmFyczoxLGNvbnN0czpbWyJjbGFzcyIsImFsZXJ0IiwzLCJuZ0NsYXNzIiwiYWxlcnQtc20iLCJh''@;'; put 'put ''bGVydC1saWdodHdlaWdodCIsImFsZXJ0LWFwcC1sZXZlbCIsNCwibmdJZiJdLFsxLCJhbGVydCIsMywibmdDbGFzcyJdLFsxLCJhbGVydC1pdGVtcyJdLFsidHlwZSIsImJ1dHRvbiIsImNsYXNzIiwiY2xvc2UiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJjbG9z''@;'; put 'put ''ZSIsMywiY2xpY2siXSxbInNoYXBlIiwid2luZG93LWNsb3NlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoKSxndCgwLEpqZSw0LDgsImRpdiIsMCkpLDImYSYmTWUoIm5nSWYiLCFkLl9jbG9zZWQpfSxkZXBlbmRlbmNpZXM6W3d1LGJhLHJzXSxlbmNhcHN1bGF0aW9uOjJ9''@;'; put 'put ''KSxjfSkoKSxZZGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmljb25TZXJ2aWNlPWF9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKE1HKSl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1hbGVydC1p''@;'; put 'put ''dGVtIl1dLGhvc3RBdHRyczpbMSwiYWxlcnQtaXRlbSJdLG5nQ29udGVudFNlbGVjdG9yczp5byxkZWNsczo0LHZhcnM6Mixjb25zdHM6W1sxLCJhbGVydC1pY29uLXdyYXBwZXIiXSxbImNsYXNzIiwiYWxlcnQtc3Bpbm5lciIsImNscklubGluZSIsIiIsNCwibmdJZiJdLFsiY2xhc3MiLCJh''@;'; put 'put ''bGVydC1pY29uIiwicm9sZSIsImltZyIsNCwibmdJZiJdLFsiY2xySW5saW5lIiwiIiwxLCJhbGVydC1zcGlubmVyIl0sWyJyb2xlIiwiaW1nIiwxLCJhbGVydC1pY29uIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoKSxkZSgwLCJkaXYiLDApLGd0KDEsUWplLDEsMCwiY2xy''@;'; put 'put ''LXNwaW5uZXIiLDEpKDIsZXplLDEsMiwiY2RzLWljb24iLDIpLGhlKCksWXIoMykpLDImYSYmKGZlKCksTWUoIm5nSWYiLCJsb2FkaW5nIj09PWQuaWNvblNlcnZpY2UuYWxlcnRJY29uU2hhcGUpLGZlKCksTWUoIm5nSWYiLCJsb2FkaW5nIiE9PWQuaWNvblNlcnZpY2UuYWxlcnRJY29uU2hh''@;'; put 'put ''cGUpKX0sZGVwZW5kZW5jaWVzOltiYSxycyxSZF0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksUXg9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsOCwiYWxl''@;'; put 'put ''cnQtdGV4dCJdXX0pLGN9KSgpLEdkZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5tdWx0aUFsZXJ0U2VydmljZT1hLHRoaXMuY29tbW9uU3RyaW5ncz1kLHRoaXMuY3VycmVudEFsZXJ0Q2hhbmdlPW5ldyBLcighMSksdGhpcy5jdXJyZW50QWxlcnRJbmRleENoYW5nZT1u''@;'; put 'put ''ZXcgS3J9Z2V0IGN1cnJlbnRBbGVydCgpe3JldHVybiB0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmN1cnJlbnRBbGVydH1zZXQgY3VycmVudEFsZXJ0KGEpe2EmJih0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmN1cnJlbnRBbGVydD1hKX1nZXQgY3VycmVudEFsZXJ0SW5kZXgoKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5tdWx0aUFsZXJ0U2VydmljZS5jdXJyZW50fXNldCBjdXJyZW50QWxlcnRJbmRleChhKXt0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmN1cnJlbnQ9YX1nZXQgcHJldmlvdXNBbGVydEFyaWFMYWJlbCgpe2NvbnN0IGE9dGhpcy5jdXJyZW50QWxlcnRJbmRleCsxO3JldHVybiB0aGlzLmNvbW1v''@;'; put 'put ''blN0cmluZ3MucGFyc2UodGhpcy5jb21tb25TdHJpbmdzLmtleXMuYWxlcnRQcmV2aW91c0FsZXJ0QXJpYUxhYmVsLHtDVVJSRU5UOigxPT09YT90aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmNvdW50OmEtMSkudG9TdHJpbmcoKSxDT1VOVDp0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmNvdW50LnRv''@;'; put 'put ''U3RyaW5nKCl9KX1nZXQgbmV4dEFsZXJ0QXJpYUxhYmVsKCl7Y29uc3QgYT10aGlzLmN1cnJlbnRBbGVydEluZGV4KzE7cmV0dXJuIHRoaXMuY29tbW9uU3RyaW5ncy5wYXJzZSh0aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5hbGVydE5leHRBbGVydEFyaWFMYWJlbCx7Q1VSUkVOVDooYT09PXRo''@;'; put 'put ''aXMubXVsdGlBbGVydFNlcnZpY2UuY291bnQ/MTphKzEpLnRvU3RyaW5nKCksQ09VTlQ6dGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jb3VudC50b1N0cmluZygpfSl9bmdPbkluaXQoKXt0aGlzLm11bHRpQWxlcnRTZXJ2aWNlQ2hhbmdlcz10aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmNoYW5nZXMu''@;'; put 'put ''c3Vic2NyaWJlKGE9Pnt0aGlzLmN1cnJlbnRBbGVydEluZGV4Q2hhbmdlLmVtaXQoYSksdGhpcy5jdXJyZW50QWxlcnRDaGFuZ2UuZW1pdCh0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmFjdGl2ZUFsZXJ0c1thXSl9KX1uZ09uRGVzdHJveSgpe3RoaXMubXVsdGlBbGVydFNlcnZpY2VDaGFuZ2Vz''@;'; put 'put ''LnVuc3Vic2NyaWJlKCl9cGFnZVVwKCl7dGhpcy5tdWx0aUFsZXJ0U2VydmljZS5uZXh0KCl9cGFnZURvd24oKXt0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLnByZXZpb3VzKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKGhPKSxHZShpcykpfSxj''@;'; put 'put ''Llx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItYWxlcnRzLXBhZ2VyIl1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZUcigiYWxlcnRzLXBhZ2VyIiwhMCl9LGlucHV0czp7Y3VycmVudEFsZXJ0OltObi5Ob25lLCJjbHJDdXJyZW50QWxl''@;'; put 'put ''cnQiLCJjdXJyZW50QWxlcnQiXSxjdXJyZW50QWxlcnRJbmRleDpbTm4uTm9uZSwiY2xyQ3VycmVudEFsZXJ0SW5kZXgiLCJjdXJyZW50QWxlcnRJbmRleCJdfSxvdXRwdXRzOntjdXJyZW50QWxlcnRDaGFuZ2U6ImNsckN1cnJlbnRBbGVydENoYW5nZSIsY3VycmVudEFsZXJ0SW5kZXhDaGFu''@;'; put 'put ''Z2U6ImNsckN1cnJlbnRBbGVydEluZGV4Q2hhbmdlIn0sZGVjbHM6OSx2YXJzOjYsY29uc3RzOltbMSwiYWxlcnRzLXBhZ2VyLWNvbnRyb2wiXSxbMSwiYWxlcnRzLXBhZ2UtZG93biJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYWxlcnRzLXBhZ2VyLWJ1dHRvbiIsMywiY2xpY2siXSxbInNoYXBl''@;'; put 'put ''IiwiYW5nbGUiLCJkaXJlY3Rpb24iLCJsZWZ0Il0sWzEsImFsZXJ0cy1wYWdlci10ZXh0Il0sWzEsImFsZXJ0cy1wYWdlLXVwIl0sWyJzaGFwZSIsImFuZ2xlIiwiZGlyZWN0aW9uIiwicmlnaHQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihkZSgwLCJkaXYiLDApKDEsImRpdiIs''@;'; put 'put ''MSkoMiwiYnV0dG9uIiwyKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQucGFnZURvd24oKX0pLEd0KDMsImNkcy1pY29uIiwzKSxoZSgpKCksZGUoNCwiZGl2Iiw0KSxMZSg1KSxoZSgpLGRlKDYsImRpdiIsNSkoNywiYnV0dG9uIiwyKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0''@;'; put 'put ''dXJuIGQucGFnZVVwKCl9KSxHdCg4LCJjZHMtaWNvbiIsNiksaGUoKSgpKCkpLDImYSYmKGZlKDIpLGhyKCJhcmlhLWxhYmVsIixkLnByZXZpb3VzQWxlcnRBcmlhTGFiZWwpLGZlKCksaHIoInRpdGxlIixkLmNvbW1vblN0cmluZ3Mua2V5cy5wcmV2aW91cyksZmUoMiksVXUoIiIsZC5tdWx0''@;'; put 'put ''aUFsZXJ0U2VydmljZS5jdXJyZW50KzEsIiAvICIsZC5tdWx0aUFsZXJ0U2VydmljZS5jb3VudCwiIiksZmUoMiksaHIoImFyaWEtbGFiZWwiLGQubmV4dEFsZXJ0QXJpYUxhYmVsKSxmZSgpLGhyKCJ0aXRsZSIsZC5jb21tb25TdHJpbmdzLmtleXMubmV4dCkpfSxkZXBlbmRlbmNpZXM6W3Jz''@;'; put 'put ''XSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSwkZGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLm11bHRpQWxlcnRTZXJ2aWNlPWEsdGhpcy5jdXJyZW50QWxlcnRDaGFuZ2U9bmV3IEtyKCExKSx0aGlzLmN1cnJlbnRBbGVydEluZGV4Q2hhbmdlPW5ldyBLcighMSksdGhpcy5z''@;'; put 'put ''dWJzY3JpcHRpb25zPVtdfXNldCBhbGxBbGVydHMoYSl7dGhpcy5tdWx0aUFsZXJ0U2VydmljZS5tYW5hZ2UoYSl9c2V0IF9pbnB1dEN1cnJlbnRJbmRleChhKXtOdW1iZXIuaXNJbnRlZ2VyKGEpJiZhPj0wJiYodGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jdXJyZW50PWEpfWdldCBjdXJyZW50''@;'; put 'put ''QWxlcnRJbmRleCgpe3JldHVybiB0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmN1cnJlbnR9c2V0IGN1cnJlbnRBbGVydEluZGV4KGEpe3RoaXMubXVsdGlBbGVydFNlcnZpY2UuY3VycmVudD1hfWdldCBjdXJyZW50QWxlcnQoKXtyZXR1cm4gdGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jdXJyZW50''@;'; put 'put ''QWxlcnR9c2V0IGN1cnJlbnRBbGVydChhKXthJiYodGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jdXJyZW50QWxlcnQ9YSl9Z2V0IGFsZXJ0cygpe3JldHVybiB0aGlzLmFsbEFsZXJ0cy5maWx0ZXIoYT0+ITE9PT1hLmhpZGRlbil9Z2V0IGN1cnJlbnRBbGVydFR5cGUoKXtyZXR1cm4gdGhpcy5t''@;'; put 'put ''dWx0aUFsZXJ0U2VydmljZS5jdXJyZW50QWxlcnQ/dGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jdXJyZW50QWxlcnQuYWxlcnRUeXBlOiIifW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubXVsdGlBbGVydFNlcnZpY2UuY2hhbmdlcy5zdWJzY3JpYmUo''@;'; put 'put ''YT0+e3RoaXMuY3VycmVudEFsZXJ0SW5kZXhDaGFuZ2UubmV4dChhKSx0aGlzLmN1cnJlbnRBbGVydENoYW5nZS5uZXh0KHRoaXMubXVsdGlBbGVydFNlcnZpY2UuY3VycmVudEFsZXJ0KX0pKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3Jp''@;'; put 'put ''YmUoKSksdGhpcy5tdWx0aUFsZXJ0U2VydmljZS5kZXN0cm95KCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKGhPKSl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1hbGVydHMiXV0sY29udGVudFF1ZXJpZXM6ZnVu''@;'; put 'put ''Y3Rpb24oYSxkLGgpe2lmKDEmYSYmYW8oaCxKeCw0KSwyJmEpe2xldCBmO0NpKGY9U2koKSkmJihkLmFsbEFsZXJ0cz1mKX19LGhvc3RWYXJzOjEyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmVHIoImFsZXJ0cyIsITApKCJhbGVydC1kYW5nZXIiLCJkYW5nZXIiPT1kLmN1cnJl''@;'; put 'put ''bnRBbGVydFR5cGUpKCJhbGVydC1pbmZvIiwiaW5mbyI9PWQuY3VycmVudEFsZXJ0VHlwZSkoImFsZXJ0LXN1Y2Nlc3MiLCJzdWNjZXNzIj09ZC5jdXJyZW50QWxlcnRUeXBlKSgiYWxlcnQtd2FybmluZyIsIndhcm5pbmciPT1kLmN1cnJlbnRBbGVydFR5cGUpKCJhbGVydC1uZXV0cmFsIiwi''@;'; put 'put ''bmV1dHJhbCI9PWQuY3VycmVudEFsZXJ0VHlwZSl9LGlucHV0czp7X2lucHV0Q3VycmVudEluZGV4OltObi5Ob25lLCJjbHJDdXJyZW50QWxlcnRJbmRleCIsIl9pbnB1dEN1cnJlbnRJbmRleCJdLGN1cnJlbnRBbGVydDpbTm4uTm9uZSwiY2xyQ3VycmVudEFsZXJ0IiwiY3VycmVudEFsZXJ0''@;'; put 'put ''Il19LG91dHB1dHM6e2N1cnJlbnRBbGVydENoYW5nZToiY2xyQ3VycmVudEFsZXJ0Q2hhbmdlIixjdXJyZW50QWxlcnRJbmRleENoYW5nZToiY2xyQ3VycmVudEFsZXJ0SW5kZXhDaGFuZ2UifSxmZWF0dXJlczpbZGEoW2hPXSldLG5nQ29udGVudFNlbGVjdG9yczpuemUsZGVjbHM6Myx2YXJz''@;'; put 'put ''OjEsY29uc3RzOltbMSwiYWxlcnRzLXdyYXBwZXIiXSxbMywiY2xyQ3VycmVudEFsZXJ0SW5kZXgiLDQsIm5nSWYiXSxbMywiY2xyQ3VycmVudEFsZXJ0SW5kZXgiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYSh0emUpLGRlKDAsImRpdiIsMCksZ3QoMSxyemUsMSwxLCJjbHIt''@;'; put 'put ''YWxlcnRzLXBhZ2VyIiwxKSxZcigyKSxoZSgpKSwyJmEmJihmZSgpLE1lKCJuZ0lmIixkLm11bHRpQWxlcnRTZXJ2aWNlLmNvdW50PjEpKX0sZGVwZW5kZW5jaWVzOltiYSxHZGVdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV17ZGlzcGxheTpibG9ja30iXX0pLGN9KSgpLEtkZT0oKCk9Pntj''@;'; put 'put ''bGFzcyBje2NvbnN0cnVjdG9yKCl7VHMuYWRkSWNvbnMoc1ksWU9lLEdPZSwkT2UsbFksS09lLHZ4KX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbUmEsQXMs''@;'; put 'put ''TlksanldfSksY30pKCkscFdlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W0tkZV19KSxjfSkoKSxxZGU9KCgpPT57Y2xhc3MgY3tj''@;'; put 'put ''b25zdHJ1Y3RvcihhKXt0aGlzLl9kb2N1bWVudD1hfXN0b3BTY3JvbGxpbmcoKXt0aGlzLl9kb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoIm5vLXNjcm9sbGluZyIpfXJlc3VtZVNjcm9sbGluZygpe3RoaXMuX2RvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmNvbnRhaW5zKCJuby1zY3JvbGxp''@;'; put 'put ''bmciKSYmdGhpcy5fZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKCJuby1zY3JvbGxpbmciKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoeHIodnMpKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxj''@;'; put 'put ''fSkoKSxYZGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuZmFkZU1vdmU9ImZhZGVEb3duIix0aGlzLmJhY2tkcm9wPSEwfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5c''@;'; put 'put ''dTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxjfSkoKSxvdT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMuX3Njcm9sbGluZ1NlcnZpY2U9YSx0aGlzLmNvbW1vblN0cmluZ3M9ZCx0aGlzLm1vZGFsU3RhY2tTZXJ2aWNlPWgsdGhpcy5jb25maWd1cmF0aW9uPWYs''@;'; put 'put ''dGhpcy5tb2RhbElkPU11KCksdGhpcy5fb3Blbj0hMSx0aGlzLl9vcGVuQ2hhbmdlZD1uZXcgS3IoITEpLHRoaXMuY2xvc2FibGU9ITAsdGhpcy5jbG9zZUJ1dHRvbkFyaWFMYWJlbD10aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5jbG9zZSx0aGlzLnNpemU9Im1kIix0aGlzLnN0YXRpY0JhY2tk''@;'; put 'put ''cm9wPSEwLHRoaXMuc2tpcEFuaW1hdGlvbj0hMSx0aGlzLnN0b3BDbG9zZT0hMSx0aGlzLmFsdENsb3NlPW5ldyBLcighMSksdGhpcy5ieXBhc3NTY3JvbGxTZXJ2aWNlPSExfWdldCBmYWRlTW92ZSgpe3JldHVybiB0aGlzLnNraXBBbmltYXRpb24/IiI6dGhpcy5jb25maWd1cmF0aW9uLmZh''@;'; put 'put ''ZGVNb3ZlfXNldCBmYWRlTW92ZShhKXt0aGlzLmNvbmZpZ3VyYXRpb24uZmFkZU1vdmU9YX1nZXQgYmFja2Ryb3AoKXtyZXR1cm4gdGhpcy5jb25maWd1cmF0aW9uLmJhY2tkcm9wfW5nT25DaGFuZ2VzKGEpeyF0aGlzLmJ5cGFzc1Njcm9sbFNlcnZpY2UmJmEmJk9iamVjdC5wcm90b3R5cGUu''@;'; put 'put ''aGFzT3duUHJvcGVydHkuY2FsbChhLCJfb3BlbiIpJiYoYS5fb3Blbi5jdXJyZW50VmFsdWU/KHRoaXMuX3Njcm9sbGluZ1NlcnZpY2Uuc3RvcFNjcm9sbGluZygpLHRoaXMubW9kYWxTdGFja1NlcnZpY2UudHJhY2tNb2RhbE9wZW4odGhpcykpOnRoaXMuX3Njcm9sbGluZ1NlcnZpY2UucmVz''@;'; put 'put ''dW1lU2Nyb2xsaW5nKCkpfW5nT25EZXN0cm95KCl7dGhpcy5fc2Nyb2xsaW5nU2VydmljZS5yZXN1bWVTY3JvbGxpbmcoKX1vcGVuKCl7dGhpcy5fb3Blbnx8KHRoaXMuX29wZW49ITAsdGhpcy5fb3BlbkNoYW5nZWQuZW1pdCghMCksdGhpcy5tb2RhbFN0YWNrU2VydmljZS50cmFja01vZGFs''@;'; put 'put ''T3Blbih0aGlzKSl9YmFja2Ryb3BDbGljaygpe3RoaXMuc3RhdGljQmFja2Ryb3A/dGhpcy50aXRsZS5uYXRpdmVFbGVtZW50LmZvY3VzKCk6dGhpcy5jbG9zZSgpfWNsb3NlKCl7dGhpcy5zdG9wQ2xvc2U/dGhpcy5hbHRDbG9zZS5lbWl0KCExKTohdGhpcy5jbG9zYWJsZXx8IXRoaXMuX29w''@;'; put 'put ''ZW58fCh0aGlzLl9vcGVuPSExKX1mYWRlRG9uZShhKXsidm9pZCI9PT1hLnRvU3RhdGUmJih0aGlzLl9vcGVuQ2hhbmdlZC5lbWl0KCExKSx0aGlzLm1vZGFsU3RhY2tTZXJ2aWNlLnRyYWNrTW9kYWxDbG9zZSh0aGlzKSl9c2Nyb2xsVG9wKCl7dGhpcy5ib2R5RWxlbWVudFJlZi5uYXRpdmVF''@;'; put 'put ''bGVtZW50LnNjcm9sbFRvKDAsMCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKHFkZSksR2UoaXMpLEdlKEFkZSksR2UoWGRlKSl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1tb2RhbCJdXSxjb250ZW50UXVlcmll''@;'; put 'put ''czpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZhbyhoLGl6ZSw1KSwyJmEpe2xldCBmO0NpKGY9U2koKSkmJihkLm1vZGFsQ29udGVudFRlbXBsYXRlPWYuZmlyc3QpfX0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiYocWEoQzFlLDUpLHFhKFMxZSw1KSksMiZhKXtsZXQgaDtDaSho''@;'; put 'put ''PVNpKCkpJiYoZC50aXRsZT1oLmZpcnN0KSxDaShoPVNpKCkpJiYoZC5ib2R5RWxlbWVudFJlZj1oLmZpcnN0KX19LGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZUcigib3BlbiIsZC5fb3Blbil9LGlucHV0czp7X29wZW46W05uLk5vbmUsImNsck1vZGFsT3Bl''@;'; put 'put ''biIsIl9vcGVuIl0sY2xvc2FibGU6W05uLk5vbmUsImNsck1vZGFsQ2xvc2FibGUiLCJjbG9zYWJsZSJdLGNsb3NlQnV0dG9uQXJpYUxhYmVsOltObi5Ob25lLCJjbHJNb2RhbENsb3NlQnV0dG9uQXJpYUxhYmVsIiwiY2xvc2VCdXR0b25BcmlhTGFiZWwiXSxzaXplOltObi5Ob25lLCJjbHJN''@;'; put 'put ''b2RhbFNpemUiLCJzaXplIl0sc3RhdGljQmFja2Ryb3A6W05uLk5vbmUsImNsck1vZGFsU3RhdGljQmFja2Ryb3AiLCJzdGF0aWNCYWNrZHJvcCJdLHNraXBBbmltYXRpb246W05uLk5vbmUsImNsck1vZGFsU2tpcEFuaW1hdGlvbiIsInNraXBBbmltYXRpb24iXSxzdG9wQ2xvc2U6W05uLk5v''@;'; put 'put ''bmUsImNsck1vZGFsUHJldmVudENsb3NlIiwic3RvcENsb3NlIl0sbGFiZWxsZWRCeTpbTm4uTm9uZSwiY2xyTW9kYWxMYWJlbGxlZEJ5SWQiLCJsYWJlbGxlZEJ5Il0sYnlwYXNzU2Nyb2xsU2VydmljZTpbTm4uTm9uZSwiY2xyTW9kYWxPdmVycmlkZVNjcm9sbFNlcnZpY2UiLCJieXBhc3NT''@;'; put 'put ''Y3JvbGxTZXJ2aWNlIl19LG91dHB1dHM6e19vcGVuQ2hhbmdlZDoiY2xyTW9kYWxPcGVuQ2hhbmdlIixhbHRDbG9zZToiY2xyTW9kYWxBbHRlcm5hdGVDbG9zZSJ9LGZlYXR1cmVzOltkYShbXSxbcWRlXSksd2xdLG5nQ29udGVudFNlbGVjdG9yczpvemUsZGVjbHM6Mix2YXJzOjIsY29uc3Rz''@;'; put 'put ''OltbInRpdGxlIiwiIl0sWyJib2R5IiwiIl0sWyJjbGFzcyIsIm1vZGFsIiwzLCJtb2RhbC1mdWxsLXNjcmVlbiIsNCwibmdJZiJdLFsiY2xhc3MiLCJtb2RhbC1iYWNrZHJvcCIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMywiY2xpY2siLDQsIm5nSWYiXSxbMSwibW9kYWwiXSxbImNka1RyYXBG''@;'; put 'put ''b2N1cyIsIiIsInJvbGUiLCJkaWFsb2ciLCJhcmlhLW1vZGFsIiwidHJ1ZSIsMSwibW9kYWwtZGlhbG9nIiwzLCJjZGtUcmFwRm9jdXNBdXRvQ2FwdHVyZSJdLFsxLCJjbHItc3Itb25seSJdLFsiY2xhc3MiLCJtb2RhbC1jb250ZW50LXdyYXBwZXIiLDQsIm5nSWYiLCJuZ0lmRWxzZSJdLFsx''@;'; put 'put ''LCJtb2RhbC1jb250ZW50LXdyYXBwZXIiXSxbMSwibW9kYWwtY29udGVudCJdLFsxLCJtb2RhbC1oZWFkZXItLWFjY2Vzc2libGUiXSxbImNka0ZvY3VzSW5pdGlhbCIsIiIsInRhYmluZGV4IiwiLTEiLDEsIm1vZGFsLXRpdGxlLXdyYXBwZXIiLDMsImlkIl0sWyJ0eXBlIiwiYnV0dG9uIiwi''@;'; put 'put ''Y2xhc3MiLCJjbG9zZSIsMywiY2xpY2siLDQsIm5nSWYiXSxbMSwibW9kYWwtYm9keS13cmFwcGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJjbG9zZSIsMywiY2xpY2siXSxbInNoYXBlIiwid2luZG93LWNsb3NlIl0sWyJhcmlhLWhpZGRlbiIsInRydWUiLDEsIm1vZGFsLWJhY2tkcm9wIiwz''@;'; put 'put ''LCJjbGljayJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKGF6ZSksZ3QoMCxjemUsNywxNiwiZGl2IiwyKSgxLHV6ZSwxLDEsImRpdiIsMykpLDImYSYmKE1lKCJuZ0lmIixkLl9vcGVuKSxmZSgpLE1lKCJuZ0lmIixkLmJhY2tkcm9wKSl9LGRlcGVuZGVuY2llczpbYmEsWnks''@;'; put 'put ''cnNdLGVuY2Fwc3VsYXRpb246MixkYXRhOnthbmltYXRpb246W3loKCJmYWRlTW92ZSIsW2l1KCIqID0+IGZhZGVEb3duIixbdXMoe29wYWNpdHk6MCx0cmFuc2Zvcm06InRyYW5zbGF0ZSgwLCAtMjUlKSJ9KSxNMCgiMC4ycyBlYXNlLWluLW91dCIpXSksaXUoImZhZGVEb3duID0+ICoiLFtN''@;'; put 'put ''MCgiMC4ycyBlYXNlLWluLW91dCIsdXMoe29wYWNpdHk6MCx0cmFuc2Zvcm06InRyYW5zbGF0ZSgwLCAtMjUlKSJ9KSldKSxpdSgiKiA9PiBmYWRlTGVmdCIsW3VzKHtvcGFjaXR5OjAsdHJhbnNmb3JtOiJ0cmFuc2xhdGUoMjUlLCAwKSJ9KSxNMCgiMC4ycyBlYXNlLWluLW91dCIpXSksaXUo''@;'; put 'put ''ImZhZGVMZWZ0ID0+ICoiLFtNMCgiMC4ycyBlYXNlLWluLW91dCIsdXMoe29wYWNpdHk6MCx0cmFuc2Zvcm06InRyYW5zbGF0ZSgyNSUsIDApIn0pKV0pXSkseWgoImZhZGUiLFtpdSgidm9pZCA9PiAqIixbdXMoe29wYWNpdHk6MH0pLE0wKCIwLjJzIGVhc2UtaW4tb3V0Iix1cyh7b3BhY2l0''@;'; put 'put ''eTouODV9KSldKSxpdSgiKiA9PiB2b2lkIixbTTAoIjAuMnMgZWFzZS1pbi1vdXQiLHVzKHtvcGFjaXR5OjB9KSldKV0pXX19KSxjfSkoKSxLdT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLnJlbmRlcmVyPWEsdGhpcy5ob3N0PWQsdGhpcy50YWJpbmRleD0iMCIsdGhp''@;'; put 'put ''cy51bmxpc3RlbmVycz1bXSxoLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5vYnNlcnZlcj1uZXcgUmVzaXplT2JzZXJ2ZXIoKCk9PnRoaXMuYWRkT3JSZW1vdmVUYWJJbmRleCgpKSx0aGlzLm9ic2VydmVyLm9ic2VydmUoZC5uYXRpdmVFbGVtZW50KSx0aGlzLnVubGlzdGVuZXJzLnB1''@;'; put 'put ''c2goYS5saXN0ZW4oZC5uYXRpdmVFbGVtZW50LCJtb3VzZXVwIiwoKT0+e3RoaXMuYWRkT3JSZW1vdmVUYWJJbmRleCgpfSksYS5saXN0ZW4oZC5uYXRpdmVFbGVtZW50LCJtb3VzZWRvd24iLCgpPT57dGhpcy5yZW1vdmVUYWJJbmRleCgpfSkpfSl9bmdPbkRlc3Ryb3koKXtmb3IoO3RoaXMu''@;'; put 'put ''dW5saXN0ZW5lcnMubGVuZ3RoOyl0aGlzLnVubGlzdGVuZXJzLnBvcCgpKCk7dGhpcy5vYnNlcnZlci5kaXNjb25uZWN0KCksdGhpcy5vYnNlcnZlcj1udWxsfWFkZFRhYkluZGV4KCl7dGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUodGhpcy5ob3N0Lm5hdGl2ZUVsZW1lbnQsInRhYmluZGV4''@;'; put 'put ''Iix0aGlzLnRhYmluZGV4KX1yZW1vdmVUYWJJbmRleCgpe3RoaXMucmVuZGVyZXIucmVtb3ZlQXR0cmlidXRlKHRoaXMuaG9zdC5uYXRpdmVFbGVtZW50LCJ0YWJpbmRleCIpfWFkZE9yUmVtb3ZlVGFiSW5kZXgoKXtjb25zdCBhPXRoaXMuaG9zdC5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1l''@;'; put 'put ''bnQ7YSYmYS5jbGllbnRIZWlnaHQ8YS5zY3JvbGxIZWlnaHQ/dGhpcy5hZGRUYWJJbmRleCgpOnRoaXMucmVtb3ZlVGFiSW5kZXgoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoRW8pLEdlKEppKSxHZShXYSkpfSxjLlx1MDI3NWRpcj1Fcih7''@;'; put 'put ''dHlwZTpjLHNlbGVjdG9yczpbWyIiLDgsIm1vZGFsLWJvZHkiXV19KSxjfSkoKSxmTz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7VHMuYWRkSWNvbnModngpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6''@;'; put 'put ''Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltSYSxLTCxBcyxBc119KSxjfSkoKSxnV2U9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0''@;'; put 'put ''czpbUmEsS0wsQXMsZk8sZk8sQXNdfSksY30pKCksbVdlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1JhXX0pLGN9KSgpLGJXZT0o''@;'; put 'put ''KCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7VHMuYWRkSWNvbnMocU9lLFhPZSxzWSxsWSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1JhLEFzLGp5LEFz''@;'; put 'put ''LGp5XX0pLGN9KSgpLFNXZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7VHMuYWRkSWNvbnMoc1ksbFkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltS''@;'; put 'put ''YSxmTyxLZGVdfSksY30pKCksejA9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbcFdlLGhXZSxBcyxmTyxQWSxPMixCTCxsVWUsQ2Rl''@;'; put 'put ''LGlaZSxUVWUsU1dlLGdXZSxLemUsanksbVdlLFZ4LGJXZV19KSxjfSkoKSxNV2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMuc2FzU2VydmljZT1hLHRoaXMubG9nZ2VyU2VydmljZT1kLHRoaXMuX3N1YnNjcmlwdGlvbj1uZXcgcXQsdGhpcy5sb2FkaW5nPSExLHRoaXMu''@;'; put 'put ''YWxlcnRDbG9zZWQ9ITAsdGhpcy5kYXRhPXt1c2VyOm51bGwscGFzczpudWxsfX1uZ09uSW5pdCgpeyJSZWRpcmVjdGVkIiE9PXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLmxvZ2luTWVjaGFuaXNtJiYodGhpcy5fc3Vic2NyaXB0aW9uPXRoaXMuc2FzU2VydmljZS5zaG91bGRM''@;'; put 'put ''b2dpbi5zdWJzY3JpYmUoZD0+e3RoaXMuaXNBY3RpdmU9ZDtsZXQgaD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJib2R5Iik7aCYmKGQ/aC5jbGFzc0xpc3QuYWRkKCJzaG91bGQtbG9naW4iKTpoLmNsYXNzTGlzdC5yZW1vdmUoInNob3VsZC1sb2dpbiIpKX0pKX1uZ09uRGVzdHJveSgpe3Ro''@;'; put 'put ''aXMuX3N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfXN1Ym1pdCgpe3RoaXMubG9hZGluZ3x8KHRoaXMubG9hZGluZz0hMCx0aGlzLmRhdGEudXNlciYmdGhpcy5kYXRhLnBhc3MmJnRoaXMuc2FzU2VydmljZS5sb2dpbih0aGlzLmRhdGEudXNlcix0aGlzLmRhdGEucGFzcykudGhlbihhPT57''@;'; put 'put ''dGhpcy5sb2FkaW5nPSExLGF8fCh0aGlzLmVycm9yTXNnPSJVc2VybmFtZSBvciBwYXNzd29yZCBpbnZhbGlkIix0aGlzLmFsZXJ0Q2xvc2VkPSExKX0sYT0+e3RoaXMubG9nZ2VyU2VydmljZS5sb2coYSksdGhpcy5sb2FkaW5nPSExLHRoaXMuZXJyb3JNc2c9YSx0aGlzLmFsZXJ0Q2xvc2Vk''@;'; put 'put ''PSExfSkpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKEdzKSxHZShTZCkpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLWxvZ2luIl1dLGRlY2xzOjIwLHZhcnM6OSxjb25zdHM6W1sxLCJsb2dp''@;'; put 'put ''bi1zaWRlYmFyLXdyYXBwZXIiXSxbMSwibG9naW4tc2lkZWJhciIsInNpZGVCYXJQcm9wcyJdLFsic3JjIiwiL1NBU1N0b3JlZFByb2Nlc3MvP19QUk9HUkFNPXBaS2Q2Rjk1akVDdlJRbE4wTENmZEE9PS93ZWI5L2ltYWdlcy9kYXRhY29udHJvbGxlci1zdmciLCJhbHQiLCJkYXRhY29udHJv''@;'; put 'put ''bGxlciBsb2dvIiwxLCJsb2dpbi1sb2dvIl0sWzEsImxvZ2luIiwzLCJuZ1N1Ym1pdCJdLFsxLCJ0aXRsZSJdLFsxLCJ3ZWxjb21lIl0sWzEsImhpbnQiXSxbMSwibG9naW4tZ3JvdXAiXSxbImNscklucHV0IiwiIiwibmFtZSIsInVzZXIiLCJ0eXBlIiwidGV4dCIsInBsYWNlaG9sZGVyIiwi''@;'; put 'put ''VXNlcm5hbWUiLDEsInVzZXJuYW1lIiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCJdLFsiY2xySW5wdXQiLCIiLCJuYW1lIiwicGFzcyIsInR5cGUiLCJwYXNzd29yZCIsInBsYWNlaG9sZGVyIiwiUGFzc3dvcmQiLDEsInBhc3N3b3JkIiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCJd''@;'; put 'put ''LFszLCJjbHJBbGVydENsb3NlZENoYW5nZSIsImNsckFsZXJ0VHlwZSIsImNsckFsZXJ0Q2xvc2VkIl0sWyJjbHItYWxlcnQtaXRlbSIsIiIsMSwiYWxlcnQtaXRlbSJdLFsxLCJhbGVydC10ZXh0Il0sWyJ0eXBlIiwic3VibWl0IiwxLCJidG4iLCJidG4tc20iLCJidG4tc3VjY2VzcyIsMywi''@;'; put 'put ''Y2xyTG9hZGluZyIsImRpc2FibGVkIl0sWzEsIm92ZXJsYXkiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJihkZSgwLCJkaXYiLDApKDEsImRpdiIsMSksR3QoMiwiaW1nIiwyKSxkZSgzLCJmb3JtIiwzKSxGdCgibmdTdWJtaXQiLGZ1bmN0aW9uKCl7cmV0dXJuIGguc3VibWl0KCl9''@;'; put 'put ''KSxkZSg0LCJsYWJlbCIsNCkoNSwiaDMiLDUpLExlKDYsIldlbGNvbWUgdG8iKSxoZSgpLExlKDcsIiBEYXRhIENvbnRyb2xsZXIgIiksZGUoOCwiaDQiLDYpLExlKDksIkNhcHR1cmUsIFJldmlldywgYW5kIEFwcHJvdmUiKSxoZSgpKCksZGUoMTAsImRpdiIsNykoMTEsImlucHV0Iiw4KSxn''@;'; put 'put ''aSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIG1pKGguZGF0YS51c2VyLHYpfHwoaC5kYXRhLnVzZXI9diksdn0pLGhlKCksZGUoMTIsImlucHV0Iiw5KSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIG1pKGguZGF0YS5wYXNzLHYpfHwoaC5kYXRhLnBh''@;'; put 'put ''c3M9diksdn0pLGhlKCksZGUoMTMsImNsci1hbGVydCIsMTApLGdpKCJjbHJBbGVydENsb3NlZENoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIG1pKGguYWxlcnRDbG9zZWQsdil8fChoLmFsZXJ0Q2xvc2VkPXYpLHZ9KSxkZSgxNCwiZGl2IiwxMSkoMTUsInNwYW4iLDEyKSxMZSgxNiksaGUo''@;'; put 'put ''KSgpKCksZGUoMTcsImJ1dHRvbiIsMTMpLExlKDE4LCIgTG9nIGluICIpLGhlKCkoKSgpKCksR3QoMTksImRpdiIsMTQpLGhlKCkpLDImZCYmKFRyKCJhY3RpdmUiLGguaXNBY3RpdmUpLGZlKDExKSxwaSgibmdNb2RlbCIsaC5kYXRhLnVzZXIpLGZlKCkscGkoIm5nTW9kZWwiLGguZGF0YS5w''@;'; put 'put ''YXNzKSxmZSgpLE1lKCJjbHJBbGVydFR5cGUiLCJhbGVydC1kYW5nZXIiKSxwaSgiY2xyQWxlcnRDbG9zZWQiLGguYWxlcnRDbG9zZWQpLGZlKDMpLHdyKGguZXJyb3JNc2cpLGZlKCksTWUoImNsckxvYWRpbmciLGgubG9hZGluZykoImRpc2FibGVkIixoLmxvYWRpbmcpKX0sZGVwZW5kZW5j''@;'; put 'put ''aWVzOltsNyxxbCxubCxvNywkcyx5cCxKeCxReCxqMCxQMixkcyxaMV0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiB4V2UoYyxsKXsxJmMmJihkZSgwLCJzcGFuIiwxMCksTGUoMSwibG9hZGluZyIpLGhlKCkpfWZ1bmN0aW9uIEVXZShjLGwpezEmYyYmKGRlKDAs''@;'; put 'put ''InNwYW4iLDExKSxMZSgxLCJsb2FkZWQiKSxoZSgpKX1mdW5jdGlvbiBUV2UoYyxsKXsxJmMmJihkZSgwLCJzcGFuIiwxMiksTGUoMSwiZmFpbGVkIiksaGUoKSl9ZnVuY3Rpb24gQVdlKGMsbCl7aWYoMSZjJiYoZGUoMCwicCIpKDEsImNvZGUiKSxMZSgyKSxoZSgpLExlKDMsIiBceGEwICIp''@;'; put 'put ''LGd0KDQseFdlLDIsMCwic3BhbiIsNykoNSxFV2UsMiwwLCJzcGFuIiw4KSg2LFRXZSwyLDAsInNwYW4iLDkpLGhlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgyKSx3cihhLnByb2dyYW0pLGZlKDIpLE1lKCJuZ0lmIixhLnJ1bm5pbmcpLGZlKCksTWUoIm5nSWYiLCFhLnJ1bm5p''@;'; put 'put ''bmcmJmEuc3VjY2Vzc2Z1bCksZmUoKSxNZSgibmdJZiIsIWEucnVubmluZyYmIWEuc3VjY2Vzc2Z1bCl9fWZ1bmN0aW9uIGtXZShjLGwpe2lmKDEmYyYmKGRlKDAsImNsci1zaWducG9zdC1jb250ZW50Iiw1KSxndCgxLEFXZSw3LDQsInAiLDYpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgpO01l''@;'; put 'put ''KCJjbHJQb3NpdGlvbiIsImJvdHRvbS1taWRkbGUiKSxmZSgpLE1lKCJuZ0Zvck9mIixhLnJlcXVlc3RzKX19bGV0IERXZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5sb2FkaW5nPSExLHRoaXMucmVxdWVzdHM9W10sdGhpcy5fbG9hZGluZ1N1Yj1uZXcgcXR9bmdPbkluaXQo''@;'; put 'put ''KXt9bmdPbkRlc3Ryb3koKXt0aGlzLl9sb2FkaW5nU3ViLnVuc3Vic2NyaWJlKCl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtbG9hZGluZy1pbmRpY2F0''@;'; put 'put ''b3IiXV0sZGVjbHM6Nix2YXJzOjYsY29uc3RzOltbMSwibG9hZGluZy1pbmRpY2F0b3IiXSxbImNsclNpZ25wb3N0VHJpZ2dlciIsIiIsMSwic3Bpbm5lciIsInNwaW5uZXItc20iLCJzcGlubmVyLWludmVyc2UiXSxbImNsclNpZ25wb3N0VHJpZ2dlciIsIiIsInNoYXBlIiwiY2hlY2siLCJz''@;'; put 'put ''aXplIiwiMjAiLDEsImlzLWluZm8iXSxbImNsclNpZ25wb3N0VHJpZ2dlciIsIiIsInNoYXBlIiwiZXJyb3IiLCJzaXplIiwiMjQiLDEsImlzLWVycm9yIl0sWzMsImNsclBvc2l0aW9uIiw0LCJjbHJJZk9wZW4iXSxbMywiY2xyUG9zaXRpb24iXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJj''@;'; put 'put ''bGFzcyIsInJ1bm5pbmciLDQsIm5nSWYiXSxbImNsYXNzIiwic3VjY2VzcyIsNCwibmdJZiJdLFsiY2xhc3MiLCJmYWlsIiw0LCJuZ0lmIl0sWzEsInJ1bm5pbmciXSxbMSwic3VjY2VzcyJdLFsxLCJmYWlsIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYoZGUoMCwiZGl2IiwwKSgx''@;'; put 'put ''LCJjbHItc2lnbnBvc3QiKSxHdCgyLCJzcGFuIiwxKSgzLCJjbHItaWNvbiIsMikoNCwiY2xyLWljb24iLDMpLGd0KDUsa1dlLDIsMiwiY2xyLXNpZ25wb3N0LWNvbnRlbnQiLDQpLGhlKCkoKSksMiZkJiYoZmUoMiksX2QoImRpc3BsYXkiLGgubG9hZGluZz8iaW5saW5lLWJsb2NrIjoibm9u''@;'; put 'put ''ZSIpLGZlKCksX2QoImRpc3BsYXkiLCFoLmxvYWRpbmcmJmgucmVxdWVzdHMubGVuZ3RoPjAmJmgucmVxdWVzdHNbMF0uc3VjY2Vzc2Z1bD8iaW5saW5lLWJsb2NrIjoibm9uZSIpLGZlKCksX2QoImRpc3BsYXkiLCFoLmxvYWRpbmcmJmgucmVxdWVzdHMubGVuZ3RoPjAmJiFoLnJlcXVlc3Rz''@;'; put 'put ''WzBdLnN1Y2Nlc3NmdWw/ImlubGluZS1ibG9jayI6Im5vbmUiKSl9LGRlcGVuZGVuY2llczpbbnMsYmEsSGwsTDIsV0wscTFlLFpMXSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIElXZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNkcy1pY29uIiwx''@;'; put 'put ''MiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgpLnRvZ2dsZURhcmtNb2RlKCEwKSl9KSxoZSgpfX1mdW5jdGlvbiBSV2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjZHMtaWNvbiIsMTMpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3Qo''@;'; put 'put ''YSksQ3QoUmUoKS50b2dnbGVEYXJrTW9kZSghMSkpfSksaGUoKX19ZnVuY3Rpb24gTFdlKGMsbCl7aWYoMSZjJiYoZGUoMCwic3BhbiIpLEd0KDEsImltZyIsMTQpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgpO2ZlKCksZk0oInNyYyIsYS5nZXRQaWN0dXJlVXJsKCksWkMpfX1mdW5jdGlvbiBP''@;'; put 'put ''V2UoYyxsKXtpZigxJmMmJihkZSgwLCJzcGFuIiwxNSksTGUoMSksaGUoKSksMiZjKXtjb25zdCBhPVJlKCk7VHIoImhpZGRlbiIsMD09PWEuZmFpbGVkUmVxcy5sZW5ndGgpLGZlKCksd3IoYS5mYWlsZWRSZXFzLmxlbmd0aCl9fWZ1bmN0aW9uIFBXZShjLGwpe2lmKDEmYyYmKGRlKDAsInNw''@;'; put 'put ''YW4iLDE2KSxMZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoKTtUcigiaGlkZGVuIiwwPT09YS5kZWJ1Z0xvZ3MubGVuZ3RoKSxmZSgpLHdyKGEuZGVidWdMb2dzLmxlbmd0aCl9fWZ1bmN0aW9uIEZXZShjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDE3KX1mdW5jdGlvbiBIV2UoYyxsKXsx''@;'; put 'put ''JmMmJihzaSgwKSxkZSgxLCJhIiwyOCkoMiwic3BhbiIsMjkpLExlKDMsIkRvY3VtZW50YXRpb24iKSxoZSgpKCksbGkoKSl9ZnVuY3Rpb24gTldlKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLWRyb3Bkb3duLW1lbnUiLDE4KSgxLCJkaXYiLDE5LDApKDMsImNsci10b2dn''@;'; put 'put ''bGUtY29udGFpbmVyIiwyMCksRnQoImNsaWNrIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPWhhKDIpO3JldHVybiBDdChSZSgpLm9uRGVidWdSb3dDbGljayhoLGYpKX0pLGRlKDQsImNsci10b2dnbGUtd3JhcHBlciIpKDUsImlucHV0IiwyMSksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0''@;'; put 'put ''aW9uKGgpe3d0KGEpO2NvbnN0IGY9UmUoKTtyZXR1cm4gbWkoZi5zYXNqc0NvbmZpZy5kZWJ1ZyxoKXx8KGYuc2FzanNDb25maWcuZGVidWc9aCksQ3QoaCl9KSxGdCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS5vbkRlYnVnTW9kZUNoYW5nZSgpKX0p''@;'; put 'put ''LGhlKCksZGUoNiwibGFiZWwiKSxMZSg3LCJEZWJ1ZyBNb2RlIiksaGUoKSgpKCkoKSxkZSg4LCJhIiwyMiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgpLm9wZW5SZXF1ZXN0c01vZGFsKCkpfSksZGUoOSwic3BhbiIpLExlKDEwLCJTQVMgUmVxdWVzdHMiKSxo''@;'; put 'put ''ZSgpKCksZ3QoMTEsSFdlLDQsMCwibmctY29udGFpbmVyIiw3KSxHdCgxMiwiZGl2IiwyMyksZGUoMTMsImEiLDI0KSgxNCwic3BhbiIpLExlKDE1LCJTeXN0ZW0iKSxoZSgpKCksZGUoMTYsImEiLDI1KSxGdCgiY2xpY2siLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChSZSgpLmxvZ291''@;'; put 'put ''dChoKSl9KSxkZSgxNywic3BhbiIpLExlKDE4LCJMb2cgT3V0IiksaGUoKSxHdCgxOSwiY2xyLWljb24iLDI2KSxoZSgpLGRlKDIwLCJkaXYiLDI3KSgyMSwic3BhbiIpLExlKDIyKSxoZSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9UmUoKTtmZSg1KSxwaSgibmdNb2RlbCIsYS5zYXNqc0NvbmZp''@;'; put 'put ''Zy5kZWJ1ZyksZmUoNiksTWUoIm5nSWYiLCFhLmlzRGVwbG95UGFnZSksZmUoMTEpLElyKCJ2IixhLmNvbW1pdFZlciwiIil9fWxldCBWV2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLnVzZXJTZXJ2aWNlPWEsdGhpcy5zYXNTZXJ2aWNlPWQsdGhpcy5ldmVudFNl''@;'; put 'put ''cnZpY2U9aCx0aGlzLnJvdXRlcj1mLHRoaXMudXNlck5hbWU9Ik5vdCBsb2dnZWQgaW4iLHRoaXMucmVxU3ViPW5ldyBxdCx0aGlzLnVzZXJTdWI9bmV3IHF0LHRoaXMuYXBwTG9ncz1bXSx0aGlzLmRlYnVnTG9ncz1bXSx0aGlzLmZhaWxlZFJlcXM9W10sdGhpcy5zYXNFcnJvcnM9W10sdGhp''@;'; put 'put ''cy5pc1ZpeWE9ITEsdGhpcy5zYXNqc0NvbmZpZz1uZXcgbWguU0FTanNDb25maWcsdGhpcy5yZXF1ZXN0c0NvdW50PTAsdGhpcy5jb21taXRWZXI9IiIsdGhpcy5kYXJrTW9kZT10aGlzLmV2ZW50U2VydmljZS5kYXJrTW9kZX1uZ09uSW5pdCgpe3RoaXMudXNlclN1Yj10aGlzLnVzZXJTZXJ2''@;'; put 'put ''aWNlLnVzZXJDaGFuZ2Uuc3Vic2NyaWJlKGE9Pnt0aGlzLnVzZXJOYW1lPWEudXNlcm5hbWV9KSx0aGlzLnNhc2pzQ29uZmlnPXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLCJTQVNWSVlBIj09PXRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZSYmKHRoaXMuaXNWaXlhPSEwKSx0''@;'; put 'put ''aGlzLmNvbW1pdFZlcj0idjYuMTYuMiIucmVwbGFjZSgidiIsIiIpKyIuZ2E2MWUyZGUifW5nT25EZXN0cm95KCl7dGhpcy5yZXFTdWIudW5zdWJzY3JpYmUoKSx0aGlzLnVzZXJTdWIudW5zdWJzY3JpYmUoKX10b2dnbGVEYXJrTW9kZShhKXt0aGlzLmV2ZW50U2VydmljZS50b2dnbGVEYXJr''@;'; put 'put ''TW9kZShhKX1vcGVuUmVxdWVzdHNNb2RhbCgpe3RoaXMuZXZlbnRTZXJ2aWNlLm9wZW5SZXF1ZXN0c01vZGFsKCl9b25EZWJ1Z01vZGVDaGFuZ2UoYSl7dGhpcy5zYXNqc0NvbmZpZyYmdGhpcy5zYXNTZXJ2aWNlLnNldERlYnVnU3RhdGUodGhpcy5zYXNqc0NvbmZpZy5kZWJ1Zyl9b25EZWJ1''@;'; put 'put ''Z1Jvd0NsaWNrKGEsZCl7YS5zdG9wUHJvcGFnYXRpb24oKSxLbi51c2VyRHJvcGRvd25Db25maWcuY2xvc2VPbkRlYnVnQ2xpY2smJnNldFRpbWVvdXQoKCk9PntkLmNsaWNrKCl9LDMwMCl9bG9nb3V0KGEpe2EucHJldmVudERlZmF1bHQoKTt0cnl7dGhpcy5zYXNTZXJ2aWNlLmxvZ291dCgp''@;'; put 'put ''fWNhdGNoKGQpe2NvbnNvbGUuZXJyb3IoZCl9fWdldFBpY3R1cmVVcmwoKXtyZXR1cm5gJHt0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybH0vaWRlbnRpdGllcy91c2Vycy8ke3RoaXMudXNlck5hbWV9L2F2YXRhci9jb250ZW50YH1nZXQgaXNEZXBsb3lQYWdlKCl7cmV0dXJuIHRoaXMucm91''@;'; put 'put ''dGVyLnVybC5pbmNsdWRlcygiZGVwbG95Iil9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoX1cpLEdlKEdzKSxHZSh2YyksR2UoTHMpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1oZWFkZXIt''@;'; put 'put ''YWN0aW9ucyJdXSxkZWNsczoxNCx2YXJzOjcsY29uc3RzOltbImRyb3Bkb3duSXRlbURlYnVnIiwiIl0sWzEsImhlYWRlci1hY3Rpb25zIl0sWzEsImQtZmxleCIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiXSxbInNpemUiLCJtZCIsImNsYXNzIiwidGhlbWUtdG9nZ2xlLWljb24gY3Vyc29y''@;'; put 'put ''LXBvaW50ZXIiLCJzaGFwZSIsIm1vb24iLCJpbnZlcnNlIiwiZmFsc2UiLCJzb2xpZCIsImZhbHNlIiwzLCJjbGljayIsNCwibmdJZiJdLFsic2l6ZSIsIm1kIiwiY2xhc3MiLCJ0aGVtZS10b2dnbGUtaWNvbiBjdXJzb3ItcG9pbnRlciIsInNoYXBlIiwic3VuIiwiaW52ZXJzZSIsImZhbHNl''@;'; put 'put ''Iiwic29saWQiLCJmYWxzZSIsMywiY2xpY2siLDQsIm5nSWYiXSxbMSwiYXBwLW5hdi1kcm9wZG93biJdLFsiY2xyRHJvcGRvd25Ub2dnbGUiLCIiLDEsIm5hdi10ZXh0IiwiY29sb3Itd2hpdGUiLCJ1c2VyLW5hdi10b2dnbGUiXSxbNCwibmdJZiJdLFsiY2xhc3MiLCJiYWRnZSBiYWRnZS1k''@;'; put 'put ''YW5nZXIiLDMsImhpZGRlbiIsNCwibmdJZiJdLFsiY2xhc3MiLCJiYWRnZSBiYWRnZS1pbmZvIiwzLCJoaWRkZW4iLDQsIm5nSWYiXSxbInNoYXBlIiwiY2FyZXQgZG93biIsNCwibmdJZiJdLFsiY2xyUG9zaXRpb24iLCJib3R0b20tcmlnaHQiLDQsImNscklmT3BlbiJdLFsic2l6ZSIsIm1k''@;'; put 'put ''Iiwic2hhcGUiLCJtb29uIiwiaW52ZXJzZSIsImZhbHNlIiwic29saWQiLCJmYWxzZSIsMSwidGhlbWUtdG9nZ2xlLWljb24iLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siXSxbInNpemUiLCJtZCIsInNoYXBlIiwic3VuIiwiaW52ZXJzZSIsImZhbHNlIiwic29saWQiLCJmYWxzZSIsMSwi''@;'; put 'put ''dGhlbWUtdG9nZ2xlLWljb24iLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siXSxbImFsdCIsInByb2ZpbGUgcGljdHVyZSIsMSwiYXZhdGFyLWltZyIsMywic3JjIl0sWzEsImJhZGdlIiwiYmFkZ2UtZGFuZ2VyIl0sWzEsImJhZGdlIiwiYmFkZ2UtaW5mbyJdLFsic2hhcGUiLCJjYXJldCBk''@;'; put 'put ''b3duIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1yaWdodCJdLFsiY2xyRHJvcGRvd25JdGVtIiwiIiwxLCJkZWJ1Zy1zd2l0Y2gtaXRlbSJdLFsxLCJ0b2dnbGUtc3dpdGNoIiwzLCJjbGljayJdLFsiaWQiLCJkZWJ1Zy10b2dnbGUxIiwidHlwZSIsImNoZWNrYm94IiwiY2xyVG9nZ2xlIiwi''@;'; put 'put ''IiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCJdLFsiY2xyRHJvcGRvd25JdGVtIiwiIiwzLCJjbGljayJdLFsxLCJzZXBhcmF0b3IiXSxbImhyZWYiLCIuLi4iLCJyb3V0ZXJMaW5rIiwiL3N5c3RlbSIsImNsckRyb3Bkb3duSXRlbSIsIiJdLFsiaHJlZiIsIi4uLiIsImNsckRyb3Bkb3du''@;'; put 'put ''SXRlbSIsIiIsMywiY2xpY2siXSxbInNoYXBlIiwibG9nb3V0IiwxLCJjbHItbG9nb3V0Il0sWzEsImNvcHlSaWdodCJdLFsidGFyZ2V0IiwiX2JsYW5rIiwiaHJlZiIsImh0dHBzOi8vZG9jcy5kYXRhY29udHJvbGxlci5pbyIsImNsckRyb3Bkb3duSXRlbSIsIiJdLFsxLCJkcm9wZG93bi10''@;'; put 'put ''ZXh0Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYoZGUoMCwiZGl2IiwxKSgxLCJkaXYiLDIpLGd0KDIsSVdlLDEsMCwiY2RzLWljb24iLDMpKDMsUldlLDEsMCwiY2RzLWljb24iLDQpLGhlKCksR3QoNCwiYXBwLWxvYWRpbmctaW5kaWNhdG9yIiksZGUoNSwiY2xyLWRyb3Bkb3du''@;'; put 'put ''Iiw1KSg2LCJidXR0b24iLDYpKDcsInNwYW4iKSxMZSg4KSxoZSgpLGd0KDksTFdlLDIsMSwic3BhbiIsNykoMTAsT1dlLDIsMywic3BhbiIsOCkoMTEsUFdlLDIsMywic3BhbiIsOSkoMTIsRldlLDEsMCwiY2xyLWljb24iLDEwKSxoZSgpLGd0KDEzLE5XZSwyMywzLCJjbHItZHJvcGRvd24t''@;'; put 'put ''bWVudSIsMTEpLGhlKCkoKSksMiZkJiYoZmUoMiksTWUoIm5nSWYiLCFoLmRhcmtNb2RlLnZhbHVlKSxmZSgpLE1lKCJuZ0lmIiwhIWguZGFya01vZGUudmFsdWUpLGZlKDUpLHdyKGgudXNlck5hbWUpLGZlKCksTWUoIm5nSWYiLCJOb3QgbG9nZ2VkIGluIiE9PWgudXNlck5hbWUmJmguaXNW''@;'; put 'put ''aXlhKSxmZSgpLE1lKCJuZ0lmIiwhaC5zYXNqc0NvbmZpZy5kZWJ1ZyksZmUoKSxNZSgibmdJZiIsaC5zYXNqc0NvbmZpZy5kZWJ1ZyksZmUoKSxNZSgibmdJZiIsIWguaXNWaXlhKSl9LGRlcGVuZGVuY2llczpbYmEsTWQsbmwsJHMsYzEsSGwscnMsTDIsZHMsSWQsQnksU2gsc2csZzcsbTcs''@;'; put 'put ''VnksRFdlXSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpLGRoZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5hbGVydHM9bmV3IFdufXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92''@;'; put 'put ''PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIEJXZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci1hbGVydCIsMiksZ2koImNsckFsZXJ0Q2xvc2VkQ2hhbmdlIixmdW5jdGlvbihoKXtjb25zdCBmPXd0KGEpLiRpbXBs''@;'; put 'put ''aWNpdDtyZXR1cm4gbWkoZi5jbG9zZWQsaCl8fChmLmNsb3NlZD1oKSxDdChoKX0pLEZ0KCJjbHJBbGVydENsb3NlZENoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoMikub25BbGVydENsb3NlKCkpfSksZGUoMSwiZGl2IiwzKSgyLCJzcGFuIiw0KSxMZSgzKSxoZSgpKCko''@;'; put 'put ''KX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7TWUoImNsckFsZXJ0VHlwZSIsYS50eXBlKSgiY2xyQWxlcnRBcHBMZXZlbCIsITApLHBpKCJjbHJBbGVydENsb3NlZCIsYS5jbG9zZWQpLGZlKDMpLElyKCIgIixhLm1lc3NhZ2UsIiAiKX19ZnVuY3Rpb24galdlKGMsbCl7aWYoMSZjJiYo''@;'; put 'put ''ZGUoMCwiY2xyLWFsZXJ0cyIpLGd0KDEsQldlLDQsNCwiY2xyLWFsZXJ0IiwxKSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoKTtmZSgpLE1lKCJuZ0Zvck9mIixhLmFsZXJ0cyl9fWxldCB6V2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLl9hbGVydHNTZXJ2aWNlPWEsdGhpcy5h''@;'; put 'put ''bGVydHM9W10sdGhpcy5oYXNPcGVuQWxlcnQ9ITEsdGhpcy5hbGVydHNTdWI9bmV3IHF0fW5nT25Jbml0KCl7dGhpcy5hbGVydHNTdWI9dGhpcy5fYWxlcnRzU2VydmljZS5hbGVydHMuc3Vic2NyaWJlKGE9Pnt0aGlzLmFsZXJ0cy5wdXNoKGEpLHRoaXMuaGFzT3BlbkFsZXJ0PSEwLGEuZXJy''@;'; put 'put ''JiZjb25zb2xlLmVycm9yKGEuZXJyKX0pfW9uQWxlcnRDbG9zZSgpe3RoaXMuaGFzT3BlbkFsZXJ0PXRoaXMuYWxlcnRzLnNvbWUoYT0+IWEuY2xvc2VkKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZShkaGUpKX19c3RhdGlje3RoaXMuXHUw''@;'; put 'put ''Mjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1hbGVydHMiXV0sZGVjbHM6MSx2YXJzOjEsY29uc3RzOltbNCwibmdJZiJdLFszLCJjbHJBbGVydFR5cGUiLCJjbHJBbGVydEFwcExldmVsIiwiY2xyQWxlcnRDbG9zZWQiLCJjbHJBbGVydENsb3NlZENoYW5nZSIsNCwibmdGb3Ii''@;'; put 'put ''LCJuZ0Zvck9mIl0sWzMsImNsckFsZXJ0Q2xvc2VkQ2hhbmdlIiwiY2xyQWxlcnRUeXBlIiwiY2xyQWxlcnRBcHBMZXZlbCIsImNsckFsZXJ0Q2xvc2VkIl0sWzEsImFsZXJ0LWl0ZW0iXSxbMSwiYWxlcnQtdGV4dCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmZ3QoMCxqV2UsMiwx''@;'; put 'put ''LCJjbHItYWxlcnRzIiwwKSwyJmQmJk1lKCJuZ0lmIixoLmhhc09wZW5BbGVydCl9LGRlcGVuZGVuY2llczpbbnMsYmEsSngsJGRlLFF4XSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpLHBPPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLmNsYXNzZXM9IiJ9bmdPbklu''@;'; put 'put ''aXQoKXt9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjb250YWN0LWxpbmsiXV0saW5wdXRzOntjbGFzc2VzOiJjbGFzc2VzIn0sZGVjbHM6Mix2YXJzOjMsY29u''@;'; put 'put ''c3RzOltbImhyZWYiLCJtYWlsdG86c3VwcG9ydEBkYXRhY29udHJvbGxlci5pbz9zdWJqZWN0PUxpY2VuY2UiLDMsIm5nQ2xhc3MiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJihkZSgwLCJhIiwwKSxMZSgxLCJzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvIiksaGUoKSksMiZkJiYo''@;'; put 'put ''VHIoInVuc2V0IiwiIiE9PWguY2xhc3NlcyksTWUoIm5nQ2xhc3MiLGguY2xhc3NlcykpfSxkZXBlbmRlbmNpZXM6W3d1XSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpLGhoZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5vcHRpb25zU3ViamVjdCQ9bmV3IFduLHRo''@;'; put 'put ''aXMucmVzdWx0Q2hhbmdlJD1uZXcgV259b3BlbihhKXtyZXR1cm4gdGhpcy5vcHRpb25zU3ViamVjdCQubmV4dCh7b3BlbjohMCwuLi5hfSksdGhpcy5yZXN1bHRDaGFuZ2UkPW5ldyBXbix0aGlzLnJlc3VsdENoYW5nZSQuYXNPYnNlcnZhYmxlKCl9Y2xvc2UoYSl7dGhpcy5vcHRpb25zU3Vi''@;'; put 'put ''amVjdCQubmV4dCh7b3BlbjohMX0pLHRoaXMucmVzdWx0Q2hhbmdlJC5uZXh0KHtwYXNzd29yZDphfSksdGhpcy5yZXN1bHRDaGFuZ2UkLmNvbXBsZXRlKCl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9''@;'; put 'put ''YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gVVdlKGMsbCl7MSZjJiYoZGUoMCwicCIsMTMpLExlKDEsIiBTb3JyeSB0aGF0IGRpZG4ndCB3b3JrLCB0cnkgYWdhaW4uICIpLGhlKCkpfWZ1bmN0aW9uIFpX''@;'; put 'put ''ZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIsMikoMSwiY2xyLW1vZGFsIiwzKSgyLCJoMyIsNCksTGUoMywiIFBhc3N3b3JkIFByb3RlY3RlZCBGaWxlICIpLGhlKCksZGUoNCwiZGl2Iiw1KSg1LCJwIiw2KSxMZSg2LCJQbGVhc2UgZW50ZXIgcGFzc3dvcmQ6IiksaGUo''@;'; put 'put ''KSxkZSg3LCJpbnB1dCIsNywwKSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1SZSgpO3JldHVybiBtaShmLnBhc3N3b3JkSW5wdXQsaCl8fChmLnBhc3N3b3JkSW5wdXQ9aCksQ3QoaCl9KSxoZSgpKCksZGUoOSwiZGl2Iiw4KSgxMCwiZGl2IiksZ3QoMTEs''@;'; put 'put ''VVdlLDIsMCwicCIsOSksaGUoKSxkZSgxMiwiZGl2IiwxMCkoMTMsImJ1dHRvbiIsMTEpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS5jbG9zZSgpKX0pLExlKDE0LCIgQ2FuY2VsICIpLGhlKCksZGUoMTUsImJ1dHRvbiIsMTIpLEZ0KCJjbGljayIsZnVuY3Rp''@;'; put 'put ''b24oKXt3dChhKTtjb25zdCBoPWhhKDgpO3JldHVybiBDdChSZSgpLmNsb3NlKGgudmFsdWUpKX0pLExlKDE2LCIgVW5sb2NrICIpLGhlKCkoKSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9bC5uZ0lmLGQ9aGEoOCksaD1SZSgpO2ZlKCksTWUoImNsck1vZGFsT3BlbiIsYS5vcGVuKSgiY2xyTW9k''@;'; put 'put ''YWxTaXplIiwibWQiKSgiY2xyTW9kYWxDbG9zYWJsZSIsITEpLGZlKDYpLHBpKCJuZ01vZGVsIixoLnBhc3N3b3JkSW5wdXQpLGZlKDQpLE1lKCJuZ0lmIixhLmVycm9yKSxmZSg0KSxNZSgiZGlzYWJsZWQiLGQudmFsdWUubGVuZ3RoPDEpfX1sZXQgV1dlPSgoKT0+e2NsYXNzIGN7Y29uc3Ry''@;'; put 'put ''dWN0b3IoYSl7dGhpcy5leGNlbFBhc3N3b3JkTW9kYWxTZXJ2aWNlPWEsdGhpcy5vcHRpb25zJD10aGlzLmV4Y2VsUGFzc3dvcmRNb2RhbFNlcnZpY2Uub3B0aW9uc1N1YmplY3QkLHRoaXMuZmlsZVVubG9ja0Vycm9yPSExLHRoaXMucGFzc3dvcmRJbnB1dD0iIn1jbG9zZShhKXt0aGlzLnBh''@;'; put 'put ''c3N3b3JkSW5wdXQ9IiIsdGhpcy5leGNlbFBhc3N3b3JkTW9kYWxTZXJ2aWNlLmNsb3NlKGEpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKGhoZSkpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBw''@;'; put 'put ''LWV4Y2VsLXBhc3N3b3JkLW1vZGFsIl1dLGRlY2xzOjIsdmFyczozLGNvbnN0czpbWyJmaWxlUGFzc3dvcmRJbnB1dCIsIiJdLFsiY2xhc3MiLCJleGNlbC1wYXNzd29yZC1yb290Iiw0LCJuZ0lmIl0sWzEsImV4Y2VsLXBhc3N3b3JkLXJvb3QiXSxbMywiY2xyTW9kYWxPcGVuIiwiY2xyTW9k''@;'; put 'put ''YWxTaXplIiwiY2xyTW9kYWxDbG9zYWJsZSJdLFsxLCJtb2RhbC10aXRsZSIsImNlbnRlciIsInRleHQtY2VudGVyIiwiY29sb3ItZGFya2VyLWdyYXkiXSxbMSwibW9kYWwtYm9keSIsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIl0sWzEsIm0tMCJdLFsiZGF0YS1scGln''@;'; put 'put ''bm9yZSIsInRydWUiLCJhdXRvY29tcGxldGUiLCJvZmYiLCJpZCIsImZpbGVQYXNzd29yZElucHV0IiwidHlwZSIsInRleHQiLDEsImNsci1pbnB1dCIsImRpc2FibGUtcGFzc3dvcmQtbWFuYWdlciIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiXSxbMSwibW9kYWwtZm9vdGVyIl0sWyJj''@;'; put 'put ''bGFzcyIsIm0tMCBjb2xvci1yZWQiLDQsIm5nSWYiXSxbMSwiYnV0dG9ucyJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLW91dGxpbmUiLDMsImNsaWNrIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tc3VjY2Vzcy1vdXRsaW5lIiwzLCJj''@;'; put 'put ''bGljayIsImRpc2FibGVkIl0sWzEsIm0tMCIsImNvbG9yLXJlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGd0KDAsWldlLDE3LDYsImRpdiIsMSksZWwoMSwiYXN5bmMiKSksMiZkJiZNZSgibmdJZiIsRGMoMSwxLGgub3B0aW9ucyQpKX0sZGVwZW5kZW5jaWVzOltiYSxxbCxu''@;'; put 'put ''bCwkcyxvdSxLdSxFTV0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKSx0RT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5maWxlT3Zlcj0hMSx0aGlzLmZpbGVEcm9wcGVkPW5ldyBLcix0aGlzLmZpbGVEcmFnZ2VkT3Zlcj1uZXcgS3J9b25EcmFnT3ZlcihhKXthLnBy''@;'; put 'put ''ZXZlbnREZWZhdWx0KCksYS5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLmNvbnRhaW5zRmlsZXMoYSkmJiF0aGlzLmZpbGVPdmVyJiYodGhpcy5maWxlT3Zlcj0hMCx0aGlzLmZpbGVEcmFnZ2VkT3Zlci5lbWl0KCkpfW9uRHJhZ0xlYXZlKGEpe2EucHJldmVudERlZmF1bHQoKSxhLnN0b3BQcm9w''@;'; put 'put ''YWdhdGlvbigpLHRoaXMuZmlsZU92ZXI9ITF9b25kcm9wKGEpe2EucHJldmVudERlZmF1bHQoKSxhLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMuZmlsZU92ZXI9ITE7Y29uc3QgZD1hLmRhdGFUcmFuc2Zlci5maWxlcztkLmxlbmd0aD4wJiZ0aGlzLmZpbGVEcm9wcGVkLmVtaXQoZCl9Y29udGFp''@;'; put 'put ''bnNGaWxlcyhhKXtpZihhJiZhLmRhdGFUcmFuc2ZlciYmYS5kYXRhVHJhbnNmZXIudHlwZXMpZm9yKGxldCBkPTA7ZDxhLmRhdGFUcmFuc2Zlci50eXBlcy5sZW5ndGg7ZCsrKWlmKCJGaWxlcyI9PWEuZGF0YVRyYW5zZmVyLnR5cGVzW2RdKXJldHVybiEwfXN0YXRpY3t0aGlzLlx1MDI3NWZh''@;'; put 'put ''Yz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiYXBwRHJhZ05kcm9wIiwiIl1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGQsaCl7MSZkJiZGdCgiZHJhZ292ZXIiLGZ1bmN0aW9u''@;'; put 'put ''KHYpe3JldHVybiBoLm9uRHJhZ092ZXIodil9KSgiZHJhZ2xlYXZlIixmdW5jdGlvbih2KXtyZXR1cm4gaC5vbkRyYWdMZWF2ZSh2KX0pKCJkcm9wIixmdW5jdGlvbih2KXtyZXR1cm4gaC5vbmRyb3Aodil9KSwyJmQmJlRyKCJmaWxlb3ZlciIsaC5maWxlT3Zlcil9LG91dHB1dHM6e2ZpbGVE''@;'; put 'put ''cm9wcGVkOiJmaWxlRHJvcHBlZCIsZmlsZURyYWdnZWRPdmVyOiJmaWxlRHJhZ2dlZE92ZXIifX0pfX1yZXR1cm4gY30pKCk7Y29uc3QgZmhlPSgpPT5bXTtmdW5jdGlvbiBZV2UoYyxsKXsxJmMmJihkZSgwLCJwIiw2KSxMZSgxLCJObyByZXF1ZXN0cyBtYWRlIiksaGUoKSl9ZnVuY3Rpb24g''@;'; put 'put ''R1dlKGMsbCl7MSZjJiYoZGUoMCwic3BhbiIpLEd0KDEsImNsci1pY29uIiwxMyksaGUoKSl9ZnVuY3Rpb24gJFdlKGMsbCl7MSZjJiYoZGUoMCwic3BhbiIpLEd0KDEsImNsci1pY29uIiwxNCksaGUoKSl9ZnVuY3Rpb24gS1dlKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xy''@;'; put 'put ''LXRyZWUtbm9kZSIsMjIpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLiRpbXBsaWNpdCxmPVJlKDMpLmluZGV4O3JldHVybiBDdChSZSgyKS5nb1RvTG9nTGluZShoLCJyZXF1ZXN0XyIrZiwiZXJyb3IiKSl9KSxkZSgxLCJidXR0b24iLDIzKSxMZSgyKSxoZSgpKCl9aWYo''@;'; put 'put ''MiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKDIpLElyKCIgIixhLCIgIil9fWZ1bmN0aW9uIHFXZShjLGwpe2lmKDEmYyYmKGRlKDAsImNsci10cmVlLW5vZGUiLDE5KSxHdCgxLCJjbHItaWNvbiIsMjApLExlKDIpLGd0KDMsS1dlLDMsMSwiY2xyLXRyZWUtbm9kZSIsMjEpLGhlKCkpLDIm''@;'; put 'put ''Yyl7Y29uc3QgYT1SZSgyKS4kaW1wbGljaXQ7ZmUoMiksSXIoIiBFcnJvcnMgKCIsYS5sb2dFcnJvcnMubGVuZ3RoLCIpICIpLGZlKCksTWUoIm5nRm9yT2YiLGEubG9nRXJyb3JzfHxZcygyLGZoZSkpfX1mdW5jdGlvbiBYV2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHIt''@;'; put 'put ''dHJlZS1ub2RlIiwyMiksRnQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSkuJGltcGxpY2l0LGY9UmUoMykuaW5kZXg7cmV0dXJuIEN0KFJlKDIpLmdvVG9Mb2dMaW5lKGgsInJlcXVlc3RfIitmLCJ3YXJuaW5nIikpfSksZGUoMSwiYnV0dG9uIiwyMyksTGUoMiksaGUoKSgpfWlm''@;'; put 'put ''KDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgyKSxJcigiICIsYSwiICIpfX1mdW5jdGlvbiBKV2UoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItdHJlZS1ub2RlIiwxOSksR3QoMSwiY2xyLWljb24iLDI0KSxMZSgyKSxndCgzLFhXZSwzLDEsImNsci10cmVlLW5vZGUiLDIxKSxoZSgpKSwy''@;'; put 'put ''JmMpe2NvbnN0IGE9UmUoMikuJGltcGxpY2l0O2ZlKDIpLElyKCIgV2FybmluZ3MgKCIsYS5sb2dXYXJuaW5ncy5sZW5ndGgsIikgIiksZmUoKSxNZSgibmdGb3JPZiIsYS5sb2dXYXJuaW5nc3x8WXMoMixmaGUpKX19ZnVuY3Rpb24gUVdlKGMsbCl7MSZjJiZHdCgwLCJkaXYiLDI1KSwyJmMm''@;'; put 'put ''Jk1lKCJpbm5lckhUTUwiLFJlKDIpLiRpbXBsaWNpdC5sb2dGaWxlLFY0KX1mdW5jdGlvbiBlWWUoYyxsKXsxJmMmJkd0KDAsImRpdiIsMjYpLDImYyYmTWUoInRleHRDb250ZW50IixSZSgyKS4kaW1wbGljaXQubG9nRmlsZSl9ZnVuY3Rpb24gdFllKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxu''@;'; put 'put ''KCk7ZGUoMCwiYnV0dG9uIiwyNyksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9UmUoMikuJGltcGxpY2l0O3JldHVybiBDdChSZSgyKS5kb3dubG9hZExvZyhoLmxvZ0ZpbGUpKX0pLExlKDEsIiBEb3dubG9hZCAiKSxoZSgpfX1mdW5jdGlvbiBuWWUoYyxsKXtpZigxJmMm''@;'; put 'put ''JihkZSgwLCJjbHItdGFiLWNvbnRlbnQiKSgxLCJjbHItdHJlZSIpLGd0KDIscVdlLDQsMywiY2xyLXRyZWUtbm9kZSIsMTUpKDMsSldlLDQsMywiY2xyLXRyZWUtbm9kZSIsMTUpLGhlKCksZ3QoNCxRV2UsMSwxLCJkaXYiLDE2KSg1LGVZZSwxLDEsImRpdiIsMTcpKDYsdFllLDIsMCwiYnV0''@;'; put 'put ''dG9uIiwxOCksaGUoKSksMiZjKXtjb25zdCBhPVJlKCkuJGltcGxpY2l0LGQ9UmUoMik7ZmUoMiksTWUoIm5nSWYiLGEubG9nRXJyb3JzKSxmZSgpLE1lKCJuZ0lmIixhLmxvZ1dhcm5pbmdzKSxmZSgpLE1lKCJuZ0lmIiwiU0FTVklZQSIhPT1kLnNlcnZlclR5cGUpLGZlKCksTWUoIm5nSWYi''@;'; put 'put ''LCJTQVNWSVlBIj09PWQuc2VydmVyVHlwZSksZmUoKSxNZSgibmdJZiIsKG51bGw9PWEubG9nRmlsZT9udWxsOmEubG9nRmlsZS5sZW5ndGgpPjApfX1mdW5jdGlvbiByWWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJidXR0b24iLDI3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7''@;'; put 'put ''d3QoYSk7Y29uc3QgaD1SZSgyKS4kaW1wbGljaXQ7cmV0dXJuIEN0KFJlKDIpLmRvd25sb2FkU291cmNlQ29kZShoLnNvdXJjZUNvZGUpKX0pLExlKDEsIiBEb3dubG9hZCAiKSxoZSgpfX1mdW5jdGlvbiBpWWUoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItdGFiLWNvbnRlbnQiKSgxLCJkaXYi''@;'; put 'put ''LDI4KSxMZSgyKSxoZSgpLGd0KDMsclllLDIsMCwiYnV0dG9uIiwxOCksaGUoKSksMiZjKXtjb25zdCBhPVJlKCkuJGltcGxpY2l0O2ZlKDIpLHdyKGEuc291cmNlQ29kZSksZmUoKSxNZSgibmdJZiIsKG51bGw9PWEuc291cmNlQ29kZT9udWxsOmEuc291cmNlQ29kZS5sZW5ndGgpPjApfX1m''@;'; put 'put ''dW5jdGlvbiBhWWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJidXR0b24iLDI3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSgyKS4kaW1wbGljaXQ7cmV0dXJuIEN0KFJlKDIpLmRvd25sb2FkR2VuZXJhdGVkQ29kZShoLmdlbmVyYXRlZENvZGUpKX0p''@;'; put 'put ''LExlKDEsIiBEb3dubG9hZCAiKSxoZSgpfX1mdW5jdGlvbiBvWWUoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItdGFiLWNvbnRlbnQiKSgxLCJkaXYiLDI4KSxMZSgyKSxoZSgpLGd0KDMsYVllLDIsMCwiYnV0dG9uIiwxOCksaGUoKSksMiZjKXtjb25zdCBhPVJlKCkuJGltcGxpY2l0O2ZlKDIp''@;'; put 'put ''LElyKCIgIixhLmdlbmVyYXRlZENvZGUsIiAiKSxmZSgpLE1lKCJuZ0lmIiwobnVsbD09YS5nZW5lcmF0ZWRDb2RlP251bGw6YS5nZW5lcmF0ZWRDb2RlLmxlbmd0aCk+MCl9fWZ1bmN0aW9uIHNZZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIsMzQpLEZ0KCJjbGljayIs''@;'; put 'put ''ZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoUmUoMykuJGltcGxpY2l0LnNlbGVjdGVkVGFibGU9aC5rZXkpfSksTGUoMSksaGUoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7VHIoInNlbGVjdGVkIixSZSgzKS4kaW1wbGljaXQuc2VsZWN0ZWRUYWJs''@;'; put 'put ''ZT09PWEua2V5KSxmZSgpLElyKCIgIixhLmtleSwiICIpfX1mdW5jdGlvbiBsWWUoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItZHJvcGRvd24tbWVudSIpLGd0KDEsc1llLDIsMywiZGl2IiwzMyksZWwoMiwia2V5dmFsdWUiKSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoMikuJGltcGxpY2l0O2Zl''@;'; put 'put ''KCksTWUoIm5nRm9yT2YiLERjKDIsMSxhLlNBU1dPUkspKX19ZnVuY3Rpb24gY1llKGMsbCl7aWYoMSZjJiYoZGUoMCwicCIsMzgpKDEsInN0cm9uZyIpLExlKDIpLGhlKCkoKSksMiZjKXtjb25zdCBhPVJlKDMpLiRpbXBsaWNpdDtmZSgyKSxJcigiIixhLnNlbGVjdGVkVGFibGUsIiAoZmly''@;'; put 'put ''c3QgMTAgcm93cykgIil9fWZ1bmN0aW9uIHVZZShjLGwpe2lmKDEmYyYmKGRlKDAsInRoIiksTGUoMSksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKCksSXIoIiAiLGEua2V5LCIgIil9fWZ1bmN0aW9uIGRZZShjLGwpe2lmKDEmYyYmKGRlKDAsInRkIiksTGUoMSksaGUoKSks''@;'; put 'put ''MiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9UmUoKS4kaW1wbGljaXQ7ZmUoKSxJcigiICIsZFthLmtleV0sIiAiKX19ZnVuY3Rpb24gaFllKGMsbCl7aWYoMSZjJiYoZGUoMCwidHIiKSxndCgxLGRZZSwyLDEsInRkIiw0MCksZWwoMiwia2V5dmFsdWUiKSxoZSgpKSwyJmMpe2NvbnN0IGE9''@;'; put 'put ''UmUoNCkuJGltcGxpY2l0O2ZlKCksTWUoIm5nRm9yT2YiLERjKDIsMSxhLlNBU1dPUktbYS5zZWxlY3RlZFRhYmxlXS5maXJzdDEwcm93c1swXSkpfX1mdW5jdGlvbiBmWWUoYyxsKXtpZigxJmMmJihkZSgwLCJ0YWJsZSIsMzkpKDEsInRoZWFkIikoMiwidHIiKSxndCgzLHVZZSwyLDEsInRo''@;'; put 'put ''Iiw0MCksZWwoNCwia2V5dmFsdWUiKSxoZSgpKCksZGUoNSwidGJvZHkiKSxndCg2LGhZZSwzLDMsInRyIiw0MCksaGUoKSgpKSwyJmMpe2NvbnN0IGE9UmUoMykuJGltcGxpY2l0O2ZlKDMpLE1lKCJuZ0Zvck9mIixEYyg0LDIsYS5TQVNXT1JLW2Euc2VsZWN0ZWRUYWJsZV0uZmlyc3QxMHJv''@;'; put 'put ''d3NbMF0pKSxmZSgzKSxNZSgibmdGb3JPZiIsYS5TQVNXT1JLW2Euc2VsZWN0ZWRUYWJsZV0uZmlyc3QxMHJvd3MpfX1mdW5jdGlvbiBwWWUoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItdGFiLWNvbnRlbnQiKSxndCgxLGNZZSwzLDEsInAiLDM1KSxkZSgyLCJkaXYiLDM2KSxndCgzLGZZZSw3''@;'; put 'put ''LDQsInRhYmxlIiwzNyksaGUoKSgpKSwyJmMpe2NvbnN0IGE9UmUoMikuJGltcGxpY2l0O2ZlKCksTWUoIm5nSWYiLGEuc2VsZWN0ZWRUYWJsZSksZmUoMiksTWUoIm5nSWYiLGEuc2VsZWN0ZWRUYWJsZSl9fWZ1bmN0aW9uIGdZZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNs''@;'; put 'put ''ci10YWIiKSgxLCJjbHItZHJvcGRvd24iLDI5KSgyLCJidXR0b24iLDMwKSxMZSgzLCIgU0FTIFdvcmsgVGFibGVzICIpLEd0KDQsImNsci1pY29uIiwzMSksaGUoKSxndCg1LGxZZSwzLDMsImNsci1kcm9wZG93bi1tZW51IiwzMiksaGUoKSxndCg2LHBZZSw0LDIsIm5nLXRlbXBsYXRlIiwx''@;'; put 'put ''MiksZ2koImNscklmQWN0aXZlQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPVJlKDMpO3JldHVybiBtaShmLnRhYmxlc0FjdGl2ZSxoKXx8KGYudGFibGVzQWN0aXZlPWgpLEN0KGgpfSksaGUoKX1pZigyJmMpe2NvbnN0IGE9UmUoMyk7ZmUoKSxNZSgiY2xyQ2xvc2VNZW51T25J''@;'; put 'put ''dGVtQ2xpY2siLCEwKSxmZSg1KSxwaSgiY2xySWZBY3RpdmUiLGEudGFibGVzQWN0aXZlKX19ZnVuY3Rpb24gbVllKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLXN0YWNrLWJsb2NrIiw4KSgxLCJjbHItc3RhY2stbGFiZWwiKSxMZSgyKSxkZSgzLCJzcGFuIiw5KSxndCg0''@;'; put 'put ''LEdXZSwyLDAsInNwYW4iLDUpKDUsJFdlLDIsMCwic3BhbiIsNSksaGUoKSgpLGRlKDYsImNsci1zdGFjay1jb250ZW50IiksTGUoNyksaGUoKSxkZSg4LCJjbHItc3RhY2stYmxvY2siLDEwKSg5LCJjbHItc3RhY2stY29udGVudCIpKDEwLCJjbHItdGFicyIpKDExLCJjbHItdGFiIikoMTIs''@;'; put 'put ''ImJ1dHRvbiIsMTEpLExlKDEzLCJTQVMgTG9nIiksaGUoKSxndCgxNCxuWWUsNyw1LCJuZy10ZW1wbGF0ZSIsMTIpLGdpKCJjbHJJZkFjdGl2ZUNoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1SZSgyKTtyZXR1cm4gbWkoZi5zYXNMb2dBY3RpdmUsaCl8fChmLnNhc0xvZ0FjdGl2''@;'; put 'put ''ZT1oKSxDdChoKX0pLGhlKCksZGUoMTUsImNsci10YWIiKSgxNiwiYnV0dG9uIiwxMSksTGUoMTcsIlNBUyBTb3VyY2UgQ29kZSIpLGhlKCksZ3QoMTgsaVllLDQsMiwibmctdGVtcGxhdGUiLDEyKSxnaSgiY2xySWZBY3RpdmVDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9UmUo''@;'; put 'put ''Mik7cmV0dXJuIG1pKGYuc2FzU291cmNlQ29kZUFjdGl2ZSxoKXx8KGYuc2FzU291cmNlQ29kZUFjdGl2ZT1oKSxDdChoKX0pLGhlKCksZGUoMTksImNsci10YWIiKSgyMCwiYnV0dG9uIiwxMSksTGUoMjEsIlNBUyBHZW5lcmF0ZWQgQ29kZSIpLGhlKCksZ3QoMjIsb1llLDQsMiwibmctdGVt''@;'; put 'put ''cGxhdGUiLDEyKSxnaSgiY2xySWZBY3RpdmVDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9UmUoMik7cmV0dXJuIG1pKGYuc2FzR2VuZXJhdGVkQ29kZUFjdGl2ZSxoKXx8KGYuc2FzR2VuZXJhdGVkQ29kZUFjdGl2ZT1oKSxDdChoKX0pLGhlKCksZ3QoMjMsZ1llLDcsMiwiY2xy''@;'; put 'put ''LXRhYiIsNSksaGUoKSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1sLmluZGV4LGg9UmUoMik7TWUoImlkIiwicmVxdWVzdF8iK2QpKCJjbHJTdGFja1ZpZXdMZXZlbCIsMSksZmUoMiksSXIoIiAiLGEuc2VydmljZUxpbmssIiAiKSxmZSgyKSxNZSgibmdJZiIsKG51bGw9''@;'; put 'put ''PWEubG9nV2FybmluZ3M/bnVsbDphLmxvZ1dhcm5pbmdzLmxlbmd0aCk+MCksZmUoKSxNZSgibmdJZiIsKG51bGw9PWEubG9nRXJyb3JzP251bGw6YS5sb2dFcnJvcnMubGVuZ3RoKT4wKSxmZSgyKSx3cihhLnBhcnNlZFRpbWVzdGFtcCksZmUoNykscGkoImNscklmQWN0aXZlIixoLnNhc0xv''@;'; put 'put ''Z0FjdGl2ZSksZmUoNCkscGkoImNscklmQWN0aXZlIixoLnNhc1NvdXJjZUNvZGVBY3RpdmUpLGZlKDQpLHBpKCJjbHJJZkFjdGl2ZSIsaC5zYXNHZW5lcmF0ZWRDb2RlQWN0aXZlKSxmZSgpLE1lKCJuZ0lmIixhLlNBU1dPUkspfX1mdW5jdGlvbiB2WWUoYyxsKXtpZigxJmMmJihkZSgwLCJj''@;'; put 'put ''bHItc3RhY2stdmlldyIpLGd0KDEsbVllLDI0LDEwLCJjbHItc3RhY2stYmxvY2siLDcpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgpO2ZlKCksTWUoIm5nRm9yT2YiLGEuc2FzanNSZXF1ZXN0cyl9fWxldCBiWWU9KCgpPT57Y2xhc3MgY3tnZXQgb3BlbmVkKCl7cmV0dXJuIHRoaXMuX29wZW5l''@;'; put 'put ''ZH1zZXQgb3BlbmVkKGEpe3RoaXMuX29wZW5lZD1hLGEmJnRoaXMubW9kYWxPcGVuZWQoKSx0aGlzLmxvZ2dlclNlcnZpY2UubG9nKHRoaXMuc2FzanNSZXF1ZXN0cyl9Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuc2FzU2VydmljZT1hLHRoaXMubG9nZ2VyU2VydmljZT1kLHRoaXMuaGVscGVy''@;'; put 'put ''U2VydmljZT1oLHRoaXMuX29wZW5lZD0hMSx0aGlzLm9wZW5lZENoYW5nZT1uZXcgS3IsdGhpcy5zYXNMb2dBY3RpdmU9ITAsdGhpcy5zYXNTb3VyY2VDb2RlQWN0aXZlPSExLHRoaXMuc2FzR2VuZXJhdGVkQ29kZUFjdGl2ZT0hMSx0aGlzLnRhYmxlc0FjdGl2ZT0hMSx0aGlzLnNhc2pzQ29u''@;'; put 'put ''ZmlnPXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLHRoaXMuc2FzanNSZXF1ZXN0cz1bXSx0aGlzLnNhc2pzQ29uZmlnPXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLHRoaXMuc2VydmVyVHlwZT10aGlzLnNhc1NlcnZpY2UuZ2V0U2VydmVyVHlwZSgpfW5nT25Jbml0''@;'; put 'put ''KCl7fXBhcnNlTG9nVGltZXN0YW1wKGEpe3JldHVybmAke3RoaXMuZm9ybWF0VGltZXN0YW1wKGEpfSAke3RoaXMudGltZXN0YW1wRnJvbU5vdyhhKX1gfWN1dEFwcExvYyhhKXtyZXR1cm4gYS5yZXBsYWNlKHRoaXMuc2FzanNDb25maWcuYXBwTG9jKyIvIiwiIil9Zm9ybWF0VGltZXN0YW1w''@;'; put 'put ''KGEpe3JldHVybiBPbyhhKS5mb3JtYXQoKT9PbyhhKS5mb3JtYXQoImRkZGQsIE1NTU0gRG8gWVlZWSwgaDptbTpzcyBhIik6YX10aW1lc3RhbXBGcm9tTm93KGEpe3JldHVybiBPbyhhKS5mb3JtYXQoKT9gICgke09vKGEpLmZyb21Ob3coKX0pYDoiIn1tb2RhbE9wZW5DaGFuZ2UoYSl7dGhp''@;'; put 'put ''cy5vcGVuZWQ9YSx0aGlzLm9wZW5lZENoYW5nZS5lbWl0KHRoaXMub3BlbmVkKX1tb2RhbE9wZW5lZCgpe3RoaXMuc2FzanNSZXF1ZXN0cz10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzUmVxdWVzdHMoKTtmb3IobGV0IGEgb2YgdGhpcy5zYXNqc1JlcXVlc3RzKXRoaXMucGFyc2VFcnJvcnNBbmRX''@;'; put 'put ''YXJuaW5ncyhhKSxhLnNlcnZpY2VMaW5rPXRoaXMuY3V0QXBwTG9jKGEuc2VydmljZUxpbmspLGEucGFyc2VkVGltZXN0YW1wPXRoaXMucGFyc2VMb2dUaW1lc3RhbXAoYS50aW1lc3RhbXApfWdvVG9Mb2dMaW5lKGEsZCxoKXtjb25zdCBmPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYCMke2R9''@;'; put 'put ''IC5sb2ctd3JhcHBlci5zYXNsb2dgKTtpZihmKWlmKCJTQVNWSVlBIj09PXRoaXMuc2VydmVyVHlwZSl7Y29uc3QgTT0oZi50ZXh0Q29udGVudHx8IiIpLnNwbGl0KCJcbiIpO2xldCBEPS0xO2ZvcihsZXQgYmU9MDtiZTxNLmxlbmd0aDtiZSsrKWlmKE1bYmVdLmluY2x1ZGVzKGEpKXtEPWJl''@;'; put 'put ''O2JyZWFrfWlmKC0xPT09RClyZXR1cm47Y29uc3QgWj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtaLmNsYXNzTmFtZT0idGVtcC1saW5lLWhlaWdodC1jYWxjIixaLnRleHRDb250ZW50PSJYIixmLmFwcGVuZENoaWxkKFopO2NvbnN0IHJlPVouY2xpZW50SGVpZ2h0O2YucmVtb3Zl''@;'; put 'put ''Q2hpbGQoWiksZi5zY3JvbGxUb3A9cmUqRDtjb25zdCBjZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtjZS5jbGFzc05hbWU9ImxpbmUtaGlnaGxpZ2h0LW92ZXJsYXkgIisoImVycm9yIj09PWg/ImVycm9yLWhpZ2hsaWdodCI6Indhcm5pbmctaGlnaGxpZ2h0IiksY2UuY2xhc3NM''@;'; put 'put ''aXN0LmFkZCgidGVtcC1oZWlnaHQtc2V0dGVyIiksZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCItLWxpbmUtaGVpZ2h0IixgJHtyZX1weGApLGNlLmNsYXNzTGlzdC5hZGQoImxpbmUtcG9zaXRpb24tc2V0dGVyIiksZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50''@;'; put 'put ''LnN0eWxlLnNldFByb3BlcnR5KCItLWxpbmUtdG9wIixyZSpEKyJweCIpLGYuYXBwZW5kQ2hpbGQoY2UpLHNldFRpbWVvdXQoKCk9PntmLmNvbnRhaW5zKGNlKSYmZi5yZW1vdmVDaGlsZChjZSl9LDNlMyl9ZWxzZXtjb25zdCB2PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYCMke2R9IC5s''@;'; put 'put ''b2ctd3JhcHBlci5zYXNsb2cgZm9udGApO2ZvcihsZXQgTSBvZiBBcnJheS5mcm9tKHYpKWlmKE0udGV4dENvbnRlbnQ/LmluY2x1ZGVzKGEpKXtmLnNjcm9sbFRvcD1NLm9mZnNldFRvcC1mLm9mZnNldFRvcCxNLmNsYXNzTGlzdC5hZGQoImhpZ2hsaWdodGVkLWxpbmUiKSxzZXRUaW1lb3V0''@;'; put 'put ''KCgpPT57TS5jbGFzc0xpc3QucmVtb3ZlKCJoaWdobGlnaHRlZC1saW5lIil9LDNlMyk7YnJlYWt9fX1wYXJzZUVycm9yc0FuZFdhcm5pbmdzKGEpe3ZhciBkPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2lmKCFhfHwhYS5sb2dGaWxlfHwic3RyaW5nIiE9dHlwZW9mIGEubG9nRmlsZXx8''@;'; put 'put ''dm9pZCAwIT09YS5sb2dFcnJvcnN8fHZvaWQgMCE9PWEubG9nV2FybmluZ3MpcmV0dXJuO2xldCBoPVtdLGY9W10sdj1hLmxvZ0ZpbGUuc3BsaXQoIlxuIiksTT1bLi4udl07Zm9yKGxldCBEPTA7RDx2Lmxlbmd0aDtEKyspe2lmKC88Lio+RVJST1IvZ20udGVzdCh2W0RdKSl7bGV0IFo9dltE''@;'; put 'put ''XS5zdWJzdHJpbmcodltEXS5pbmRleE9mKCJFIiksdltEXS5sZW5ndGgtMSk7aC5wdXNoKFopfWVsc2UvXkVSUk9SL2dtLnRlc3QodltEXSkmJihoLnB1c2godltEXSksIlNBU1ZJWUEiIT09ZC5zZXJ2ZXJUeXBlJiYodltEXT0nPGZvbnQgY2xhc3M9ImVycm9yLWxpbmUiPicrdltEXSsiPC9m''@;'; put 'put ''b250PiIpKTtpZigvPC4qPldBUk5JTkcvZ20udGVzdCh2W0RdKSl7bGV0IFo9dltEXS5zdWJzdHJpbmcodltEXS5pbmRleE9mKCJXIiksdltEXS5sZW5ndGgtMSk7Zi5wdXNoKFopfWVsc2UvXldBUk5JTkcvZ20udGVzdCh2W0RdKSYmKGYucHVzaCh2W0RdKSwiU0FTVklZQSIhPT1kLnNlcnZl''@;'; put 'put ''clR5cGUmJih2W0RdPSc8Zm9udCBjbGFzcz0id2FybmluZy1saW5lIj4nK3ZbRF0rIjwvZm9udD4iKSl9ZC5sb2dnZXJTZXJ2aWNlLmxvZyhmKSwiU0FTVklZQSI9PT1kLnNlcnZlclR5cGUmJihhLm9yaWdpbmFsTG9nRmlsZT1NLmpvaW4oIlxuIiksYS5sb2dGaWxlTGluZU1hcD17fSxoLmZv''@;'; put 'put ''ckVhY2goRD0+e2ZvcihsZXQgWj0wO1o8TS5sZW5ndGg7WisrKWlmKE1bWl0uaW5jbHVkZXMoRCkpe2EubG9nRmlsZUxpbmVNYXAuZXJyb3JzfHwoYS5sb2dGaWxlTGluZU1hcC5lcnJvcnM9e30pLGEubG9nRmlsZUxpbmVNYXAuZXJyb3JzW0RdPVo7YnJlYWt9fSksZi5mb3JFYWNoKEQ9Pntm''@;'; put 'put ''b3IobGV0IFo9MDtaPE0ubGVuZ3RoO1orKylpZihNW1pdLmluY2x1ZGVzKEQpKXthLmxvZ0ZpbGVMaW5lTWFwLndhcm5pbmdzfHwoYS5sb2dGaWxlTGluZU1hcC53YXJuaW5ncz17fSksYS5sb2dGaWxlTGluZU1hcC53YXJuaW5nc1tEXT1aO2JyZWFrfX0pKSxhLmxvZ0ZpbGU9di5qb2luKCJc''@;'; put 'put ''biIpLGEubG9nRXJyb3JzPWgsYS5sb2dXYXJuaW5ncz1mfSkoKX1kb3dubG9hZExvZyhhKXtjb25zdCBkPShuZXcgRGF0ZSkudmFsdWVPZigpO3RoaXMuaGVscGVyU2VydmljZS5kb3dubG9hZFRleHRGaWxlKGBsb2dGaWxlLSR7ZH1gLGEpfWRvd25sb2FkU291cmNlQ29kZShhKXtjb25zdCBk''@;'; put 'put ''PShuZXcgRGF0ZSkudmFsdWVPZigpO3RoaXMuaGVscGVyU2VydmljZS5kb3dubG9hZFRleHRGaWxlKGBzb3VyY2VDb2RlLSR7ZH1gLGEpfWRvd25sb2FkR2VuZXJhdGVkQ29kZShhKXtjb25zdCBkPShuZXcgRGF0ZSkudmFsdWVPZigpO3RoaXMuaGVscGVyU2VydmljZS5kb3dubG9hZFRleHRG''@;'; put 'put ''aWxlKGBnZW5lcmF0ZWRDb2RlLSR7ZH1gLGEpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKEdzKSxHZShTZCksR2UoU3UpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1yZXF1ZXN0cy1tb2Rh''@;'; put 'put ''bCJdXSxpbnB1dHM6e29wZW5lZDoib3BlbmVkIn0sb3V0cHV0czp7b3BlbmVkQ2hhbmdlOiJvcGVuZWRDaGFuZ2UifSxkZWNsczo4LHZhcnM6NCxjb25zdHM6W1siY2xyTW9kYWxTaXplIiwieGwiLDEsInJlcXVlc3RzLW1vZGFsIiwzLCJjbHJNb2RhbE9wZW5DaGFuZ2UiLCJjbHJNb2RhbE9w''@;'; put 'put ''ZW4iXSxbMSwibW9kYWwtdGl0bGUiXSxbMSwibXQtMCIsImQtaW5saW5lLWJsb2NrIl0sWzEsIm1vZGFsLWJvZHkiLCJoLTcwdmgiXSxbImNsYXNzIiwibm8tcmVxcyIsNCwibmdJZiJdLFs0LCJuZ0lmIl0sWzEsIm5vLXJlcXMiXSxbMywiaWQiLCJjbHJTdGFja1ZpZXdMZXZlbCIsNCwibmdG''@;'; put 'put ''b3IiLCJuZ0Zvck9mIl0sWzMsImlkIiwiY2xyU3RhY2tWaWV3TGV2ZWwiXSxbMSwibWwtMTAiXSxbMSwiY29udGVudCJdLFsiY2xyVGFiTGluayIsIiJdLFszLCJjbHJJZkFjdGl2ZUNoYW5nZSIsImNscklmQWN0aXZlIl0sWyJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIsMSwibWItNSIs''@;'; put 'put ''ImNvbG9yLWdyZWVuIl0sWyJzaGFwZSIsImV4Y2xhbWF0aW9uLXRyaWFuZ2xlIiwxLCJtYi01IiwiY29sb3ItcmVkIl0sWyJjbGFzcyIsImVyci1saW5rcyIsNCwibmdJZiJdLFsiY2xhc3MiLCJsb2ctd3JhcHBlciBzYXNsb2ciLDMsImlubmVySFRNTCIsNCwibmdJZiJdLFsiY2xhc3MiLCJs''@;'; put 'put ''b2ctd3JhcHBlciBzYXNsb2cgdml5YSIsMywidGV4dENvbnRlbnQiLDQsIm5nSWYiXSxbInR5cGUiLCJidXR0b24iLCJjbGFzcyIsImJ0biBidG4tbGluayIsMywiY2xpY2siLDQsIm5nSWYiXSxbMSwiZXJyLWxpbmtzIl0sWyJzaGFwZSIsImV4Y2xhbWF0aW9uLXRyaWFuZ2xlIiwxLCJjb2xv''@;'; put 'put ''ci1yZWQiXSxbMywiY2xpY2siLDQsIm5nRm9yIiwibmdGb3JPZiJdLFszLCJjbGljayJdLFsxLCJjbHItdHJlZW5vZGUtbGluayJdLFsic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLDEsImNvbG9yLWdyZWVuIl0sWzEsImxvZy13cmFwcGVyIiwic2FzbG9nIiwzLCJpbm5lckhUTUwiXSxb''@;'; put 'put ''MSwibG9nLXdyYXBwZXIiLCJzYXNsb2ciLCJ2aXlhIiwzLCJ0ZXh0Q29udGVudCJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLWxpbmsiLDMsImNsaWNrIl0sWzEsImxvZy13cmFwcGVyIl0sWyJjbHJUYWJMaW5rIiwiIiwxLCJ3b3JrLXRhYmxlcy1kcm9wZG93biIsMywiY2xyQ2xv''@;'; put 'put ''c2VNZW51T25JdGVtQ2xpY2siXSxbImNsckRyb3Bkb3duVHJpZ2dlciIsIiJdLFsic2hhcGUiLCJjYXJldCBkb3duIl0sWzQsImNscklmT3BlbiJdLFsiY2xhc3MiLCJkcm9wZG93bi1pdGVtIiwiY2xyRHJvcGRvd25JdGVtIiwiIiwzLCJzZWxlY3RlZCIsImNsaWNrIiw0LCJuZ0ZvciIsIm5n''@;'; put 'put ''Rm9yT2YiXSxbImNsckRyb3Bkb3duSXRlbSIsIiIsMSwiZHJvcGRvd24taXRlbSIsMywiY2xpY2siXSxbImNsYXNzIiwibXQtMTAiLDQsIm5nSWYiXSxbMSwibWluLWgtNTB2aCJdLFsiY2xhc3MiLCJ0YWJsZSBtdC0xMCIsNCwibmdJZiJdLFsxLCJtdC0xMCJdLFsxLCJ0YWJsZSIsIm10LTEw''@;'; put 'put ''Il0sWzQsIm5nRm9yIiwibmdGb3JPZiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGRlKDAsImNsci1tb2RhbCIsMCksRnQoImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIGgubW9kYWxPcGVuQ2hhbmdlKHYpfSksZGUoMSwiaDMiLDEpLExlKDIsIiBSZXF1''@;'; put 'put ''ZXN0IEhpc3RvcnkgIiksZGUoMywicCIsMiksTGUoNCksaGUoKSgpLGRlKDUsImRpdiIsMyksZ3QoNixZV2UsMiwwLCJwIiw0KSg3LHZZZSwyLDEsImNsci1zdGFjay12aWV3Iiw1KSxoZSgpKCkpLDImZCYmKE1lKCJjbHJNb2RhbE9wZW4iLGgub3BlbmVkKSxmZSg0KSxJcigiQXBwIExvY2F0''@;'; put 'put ''aW9uOiAiLGguc2FzanNDb25maWcuYXBwTG9jLCIiKSxmZSgyKSxNZSgibmdJZiIsKG51bGw9PWguc2FzanNSZXF1ZXN0cz9udWxsOmguc2FzanNSZXF1ZXN0cy5sZW5ndGgpPDEpLGZlKCksTWUoIm5nSWYiLGgub3BlbmVkJiYobnVsbD09aC5zYXNqc1JlcXVlc3RzP251bGw6aC5zYXNqc1Jl''@;'; put 'put ''cXVlc3RzLmxlbmd0aCk+MCkpfSxkZXBlbmRlbmNpZXM6W25zLGJhLENHLFZkZSx3RyxOZGUsRWgsUGQsZmcsSGwsb3UsS3UsSHksTDIsX20sQ20seDcsd20seW0sUzcsc2csZzcsbTcsVnksd1JdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCk7Y2xhc3MgeVlle2NvbnN0cnVjdG9y''@;'; put 'put ''KCl7dGhpcy5zYXNTZXJ2aWNlPW51bGwsdGhpcy5tZXNzYWdlPSIiLHRoaXMuZGV0YWlscz1uZXcgcGhlfX1jbGFzcyBwaGV7fWZ1bmN0aW9uIF9ZZShjLGwpe2lmKDEmYyYmKGRlKDAsInAiLDgpLExlKDEsIiBTQVMgU2VydmljZTogIiksZGUoMiwic3Ryb25nIiksTGUoMyksaGUoKSgpKSwy''@;'; put 'put ''JmMpe2NvbnN0IGE9UmUoKTtmZSgzKSx3cihhLmRhdGEuc2FzU2VydmljZSl9fWZ1bmN0aW9uIHdZZShjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsOSkoMSwicCIpKDIsInN0cm9uZyIpLExlKDMsIlNZU1dBUk5JTkdURVhUOiIpLGhlKCksTGUoNCksaGUoKSxkZSg1LCJwIikoNiwic3Ryb25n''@;'; put 'put ''IiksTGUoNywiU1lTRVJST1JURVhUOiIpLGhlKCksTGUoOCksaGUoKSxkZSg5LCJwIikoMTAsInN0cm9uZyIpLExlKDExLCJNQUM6IiksaGUoKSxMZSgxMiksaGUoKSgpKSwyJmMpe2NvbnN0IGE9UmUoKTtmZSg0KSxJcigiICIsYS5kYXRhLmRldGFpbHMuU1lTV0FSTklOR1RFWFQsIiIpLGZl''@;'; put 'put ''KDQpLElyKCIgIixhLmRhdGEuZGV0YWlscy5TWVNFUlJPUlRFWFQsIiIpLGZlKDQpLElyKCIgIixhLmRhdGEuZGV0YWlscy5NQUMsIiIpfX1mdW5jdGlvbiBDWWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJidXR0b24iLDEwKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJu''@;'; put 'put ''IHd0KGEpLEN0KFJlKCkub3BlbkNvbmZpZ3VyYXRvcigpKX0pLExlKDEsIiBPcGVuIGNvbmZpZ3VyYXRvciAiKSxoZSgpfX1mdW5jdGlvbiBTWWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJidXR0b24iLDEwKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0''@;'; put 'put ''KFJlKCkub3BlblJlcXVlc3RzTW9kYWwoKSl9KSxMZSgxLCIgT3BlbiByZXF1ZXN0cyBtb2RhbCAiKSxoZSgpfX1mdW5jdGlvbiBNWWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJidXR0b24iLDEwKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKCku''@;'; put 'put ''ZG93bmxvYWRMb2coKSl9KSxMZSgxLCIgRG93bmxvYWQgbG9nICIpLGhlKCl9fWZ1bmN0aW9uIHhZZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImJ1dHRvbiIsMTApLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS5jbG9zZUFib3J0TW9kYWwoKSl9''@;'; put 'put ''KSxMZSgxLCIgQ2xvc2UgIiksaGUoKX19ZnVuY3Rpb24gRVllKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiYnV0dG9uIiwxMCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgpLnJlbG9hZCgpKX0pLExlKDEsIiBSZWxvYWQgIiksaGUoKX19bGV0IFRZ''@;'; put 'put ''ZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMuaGVscGVyU2VydmljZT1hLHRoaXMuZXZlbnRTZXJ2aWNlPWQsdGhpcy5zYXNTZXJ2aWNlPWgsdGhpcy5yb3V0ZXI9Zix0aGlzLm9uQ29uZmlybU1vZGFsQ2xpY2s9bmV3IEtyLHRoaXMuZGF0YT1uZXcgeVllLHRoaXMu''@;'; put 'put ''Zm9yY2VSZWxvYWQ9ITEsdGhpcy5tb2RhbEVuYWJsZWQ9ITAsdGhpcy5kZWZhdWx0RGF0YT17bW9kYWxUaXRsZToiQWJvcnQgTWVzc2FnZSIsc2FzU2VydmljZTpudWxsLG1lc3NhZ2U6IiIsZGV0YWlsczpuZXcgcGhlfX1uZ09uSW5pdCgpe2xldCBhPXsuLi50aGlzLmRlZmF1bHREYXRhLC4u''@;'; put 'put ''LnRoaXMuZGF0YX07dGhpcy5kYXRhPWF9c2hvd0NvbmZpZ3VyYXRvckJ1dHRvbihhKXtjb25zdCBkPXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpO3JldHVybiBhPy5pbmNsdWRlcygic3RhcnR1cHNlcnZpY2UiKSYmZC5zZXJ2ZXJUeXBlPT09QjAuWS5TYXM5fWNsb3NlQWJvcnRN''@;'; put 'put ''b2RhbCgpe3RoaXMub25Db25maXJtTW9kYWxDbGljay5lbWl0KCl9b3BlbkNvbmZpZ3VyYXRvcigpe3RoaXMuZXZlbnRTZXJ2aWNlLnN0YXJ0dXBEYXRhTG9hZGVkKCksdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL2RlcGxveSIpLHRoaXMuY2xvc2VBYm9ydE1vZGFsKCl9ZG93bmxvYWRM''@;'; put 'put ''b2coKXt0aGlzLmhlbHBlclNlcnZpY2UuZG93bmxvYWRUZXh0RmlsZShgJHt0aGlzLmRhdGEuc2FzU2VydmljZX0tTE9HYCx0aGlzLmRhdGEuZGV0YWlscz8uTE9HfHwiRXJyb3IgcGFyc2luZyB0aGUgbG9nIil9b3BlblJlcXVlc3RzTW9kYWwoKXt0aGlzLmV2ZW50U2VydmljZS5vcGVuUmVx''@;'; put 'put ''dWVzdHNNb2RhbCgpfXJlbG9hZCgpe2xvY2F0aW9uLnJlbG9hZCgpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKFN1KSxHZSh2YyksR2UoR3MpLEdlKExzKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpb''@;'; put 'put ''WyJhcHAtaW5mby1tb2RhbCJdXSxpbnB1dHM6e2RhdGE6ImRhdGEiLGZvcmNlUmVsb2FkOiJmb3JjZVJlbG9hZCJ9LG91dHB1dHM6e29uQ29uZmlybU1vZGFsQ2xpY2s6Im9uQ29uZmlybU1vZGFsQ2xpY2sifSxkZWNsczoxMyx2YXJzOjEyLGNvbnN0czpbWyJhcHBEcmFnTmRyb3AiLCIiLDEs''@;'; put 'put ''ImNsci1hYm9ydC1tb2RhbCIsMywiY2xyTW9kYWxPcGVuQ2hhbmdlIiwiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxTaXplIiwiY2xyTW9kYWxDbG9zYWJsZSJdLFsxLCJtb2RhbC10aXRsZSJdLFsiY2xhc3MiLCJzYXNTZXJ2aWNlIG10LTAiLDQsIm5nSWYiXSxbMSwibW9kYWwtYm9keSJdLFsx''@;'; put 'put ''LCJhYm9ydE1zZyIsMywiaW5uZXJIVE1MIl0sWyJjbGFzcyIsInN5c3RleHQiLDQsIm5nSWYiXSxbMSwibW9kYWwtZm9vdGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xhc3MiLCJidG4gYnRuLXByaW1hcnkiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWzEsInNhc1NlcnZpY2UiLCJtdC0wIl0sWzEs''@;'; put 'put ''InN5c3RleHQiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1wcmltYXJ5IiwzLCJjbGljayJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGRlKDAsImNsci1tb2RhbCIsMCksZ2koImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIG1pKGgubW9kYWxF''@;'; put 'put ''bmFibGVkLHYpfHwoaC5tb2RhbEVuYWJsZWQ9diksdn0pLGRlKDEsImgzIiwxKSxMZSgyKSxndCgzLF9ZZSw0LDEsInAiLDIpLGhlKCksZGUoNCwiZGl2IiwzKSxHdCg1LCJkaXYiLDQpLGd0KDYsd1llLDEzLDMsImRpdiIsNSksaGUoKSxkZSg3LCJkaXYiLDYpLGd0KDgsQ1llLDIsMCwiYnV0''@;'; put 'put ''dG9uIiw3KSg5LFNZZSwyLDAsImJ1dHRvbiIsNykoMTAsTVllLDIsMCwiYnV0dG9uIiw3KSgxMSx4WWUsMiwwLCJidXR0b24iLDcpKDEyLEVZZSwyLDAsImJ1dHRvbiIsNyksaGUoKSgpKSwyJmQmJihwaSgiY2xyTW9kYWxPcGVuIixoLm1vZGFsRW5hYmxlZCksTWUoImNsck1vZGFsU2l6ZSIs''@;'; put 'put ''InhsIikoImNsck1vZGFsQ2xvc2FibGUiLCFoLmZvcmNlUmVsb2FkKSxmZSgyKSxJcigiICIsaC5kYXRhLm1vZGFsVGl0bGUsIiAiKSxmZSgpLE1lKCJuZ0lmIixoLmRhdGEuc2FzU2VydmljZSYmaC5kYXRhLnNhc1NlcnZpY2UubGVuZ3RoPjApLGZlKDIpLE1lKCJpbm5lckhUTUwiLGguZGF0''@;'; put 'put ''YS5tZXNzYWdlLFY0KSxmZSgpLE1lKCJuZ0lmIixudWxsIT09aC5kYXRhLmRldGFpbHMpLGZlKDIpLE1lKCJuZ0lmIixoLnNob3dDb25maWd1cmF0b3JCdXR0b24oaC5kYXRhLnNhc1NlcnZpY2UpKSxmZSgpLE1lKCJuZ0lmIixudWxsIT09aC5kYXRhLmRldGFpbHMpLGZlKCksTWUoIm5nSWYi''@;'; put 'put ''LChudWxsPT1oLmRhdGEuZGV0YWlscz9udWxsOmguZGF0YS5kZXRhaWxzLkxPRykmJihudWxsPT1oLmRhdGEuZGV0YWlsc3x8bnVsbD09aC5kYXRhLmRldGFpbHMuTE9HP251bGw6aC5kYXRhLmRldGFpbHMuTE9HLnRyaW0oKS5sZW5ndGgpPjApLGZlKCksTWUoIm5nSWYiLCFoLmZvcmNlUmVs''@;'; put 'put ''b2FkKSxmZSgpLE1lKCJuZ0lmIixoLmZvcmNlUmVsb2FkKSl9LGRlcGVuZGVuY2llczpbYmEsb3UsS3UsdEVdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCk7Y29uc3QgQVllPSgpPT5bIi8iXSxnaGU9KCk9PlsiL3ZpZXciXSxtaGU9KCk9PlsiL2hvbWUiXSxFRz0oKT0+WyIvcmV2''@;'; put 'put ''aWV3L3N1Ym1pdHRlZCJdLGtZZT0oKT0+WyIvcmV2aWV3L2FwcHJvdmUiXSxEWWU9KCk9PlsiL3Jldmlldy9oaXN0b3J5Il07ZnVuY3Rpb24gSVllKGMsbCl7MSZjJiYoc2koMCksZGUoMSwiZGl2IiwxNykoMiwiZGl2IiwxOCkoMywiZGl2IiwxOSksR3QoNCwiY2RzLWljb24iLDIwKSxoZSgp''@;'; put 'put ''LGRlKDUsImRpdiIsMjEpLExlKDYsIiBEYXRhIENvbnRyb2xsZXIgKEZSRUUgVGllcikgLSB0byB1cGdyYWRlIGNvbnRhY3QgIiksR3QoNywiY29udGFjdC1saW5rIiwyMiksaGUoKSgpKCksZGUoOCwiYSIsMjMpLExlKDksIlVwZGF0ZSBMaWNlbmNlIEtleSIpLGhlKCksbGkoKSl9ZnVuY3Rp''@;'; put 'put ''b24gUlllKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7c2koMCksZGUoMSwiZGl2IiwxNykoMiwiZGl2IiwxOCkoMywiZGl2IiwxOSksR3QoNCwiY2RzLWljb24iLDIwKSxoZSgpLGRlKDUsImRpdiIsMjEpLExlKDYsIiBEYXRhIENvbnRyb2xsZXIgKEZSRUUgVGllcikgLSBQcm9ibGVtIHdp''@;'; put 'put ''dGggbGljZW5jZSAiKSxoZSgpKCkoKSxkZSg3LCJhIiwyNCksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9UmUoMyk7cmV0dXJuIEN0KGgubGljZW5jZVByb2JsZW1EZXRhaWxzKGgubGljZW5jZVByb2JsZW0udmFsdWUpKX0pLExlKDgsIk1vcmUgZGV0YWlscyIpLGhlKCks''@;'; put 'put ''bGkoKX19ZnVuY3Rpb24gTFllKGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwxNiksZ3QoMSxJWWUsMTAsMCwibmctY29udGFpbmVyIiwxKSgyLFJZZSw5LDAsIm5nLWNvbnRhaW5lciIsMSksaGUoKSksMiZjKXtjb25zdCBhPVJlKDIpO2ZlKCksTWUoIm5nSWYiLG51bGw9PT1hLmxpY2VuY2VQ''@;'; put 'put ''cm9ibGVtLnZhbHVlKSxmZSgpLE1lKCJuZ0lmIixudWxsIT09YS5saWNlbmNlUHJvYmxlbS52YWx1ZSl9fWZ1bmN0aW9uIE9ZZShjLGwpezEmYyYmKGRlKDAsImEiLDIzKSxMZSgxLCJVcGRhdGUgTGljZW5jZSBLZXkiKSxoZSgpKX1mdW5jdGlvbiBQWWUoYyxsKXtpZigxJmMmJihkZSgwLCJk''@;'; put 'put ''aXYiLDI1KSgxLCJkaXYiLDE3KSgyLCJkaXYiLDE4KSgzLCJkaXYiLDE5KSxHdCg0LCJjZHMtaWNvbiIsMjApLGhlKCksZGUoNSwiZGl2IiwyMSksTGUoNiksR3QoNywiY29udGFjdC1saW5rIiwyMiksTGUoOCksaGUoKSgpKCksZ3QoOSxPWWUsMiwwLCJhIiwyNiksaGUoKSksMiZjKXtjb25z''@;'; put 'put ''dCBhPVJlKDIpO2ZlKDYpLFV1KCIgVGhpcyBsaWNlbnNlIGtleSB3aWxsIGV4cGlyZSBpbiAiLGEubGljZW5zZUV4cGlyaW5nRGF5cywiICIsMT09PWEubGljZW5zZUV4cGlyaW5nRGF5cz8iZGF5IjoiZGF5cyIsIi4gUGxlYXNlIGNvbnRhY3QgIiksZmUoMiksSXIoIiBvciB5b3VyIHJlc2Vs''@;'; put 'put ''bGVyIHRvIGFycmFuZ2UgYWRkaXRpb25hbCBsaWNlbmNlIGZvciBzaXRlIGlkICIsYS5zeXNzaXRlLmdldFZhbHVlKCksIi4gIiksZmUoKSxNZSgibmdJZiIsIWEuZnJlZVRpZXJCYW5uZXIpfX1mdW5jdGlvbiBGWWUoYyxsKXsxJmMmJihkZSgwLCJhIiwyMyksTGUoMSwiVXBkYXRlIExpY2Vu''@;'; put 'put ''Y2UgS2V5IiksaGUoKSl9ZnVuY3Rpb24gSFllKGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwyNSkoMSwiZGl2IiwxNykoMiwiZGl2IiwxOCkoMywiZGl2IiwxOSksR3QoNCwiY2RzLWljb24iLDIwKSxoZSgpLGRlKDUsImRpdiIsMjEpLExlKDYsIiBUaGUgcmVnaXN0ZXJlZCBudW1iZXIgb2Yg''@;'; put 'put ''dXNlcnMgZXhjZWVkcyB0aGUgbGltaXQgc3BlY2lmaWVkIGZvciB5b3VyIGxpY2Vuc2UuIFBsZWFzZSBjb250YWN0ICIpLEd0KDcsImNvbnRhY3QtbGluayIsMjIpLExlKDgpLGhlKCkoKSgpLGd0KDksRlllLDIsMCwiYSIsMjYpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgyKTtmZSg4KSxJcigi''@;'; put 'put ''IG9yIHlvdXIgcmVzZWxsZXIgdG8gYXJyYW5nZSBhZGRpdGlvbmFsIGxpY2VuY2UgZm9yIHNpdGUgaWQgIixhLnN5c3NpdGUuZ2V0VmFsdWUoKSwiLiAiKSxmZSgpLE1lKCJuZ0lmIiwhYS5saWNlbnNlRXhwaXJpbmdEYXlzJiYhYS5mcmVlVGllckJhbm5lcil9fWZ1bmN0aW9uIE5ZZShjLGwp''@;'; put 'put ''e2lmKDEmYyYmKHNpKDApLGd0KDEsTFllLDMsMiwiZGl2IiwxNCkoMixQWWUsMTAsNCwiZGl2IiwxNSkoMyxIWWUsMTAsMiwiZGl2IiwxNSksbGkoKSksMiZjKXtjb25zdCBhPVJlKCk7ZmUoKSxNZSgibmdJZiIsYS5mcmVlVGllckJhbm5lciYmKCFhLmxpY2Vuc2VFeHBpcmluZ0RheXN8fGEu''@;'; put 'put ''bGljZW5zZUV4cGlyaW5nRGF5czwwKSksZmUoKSxNZSgibmdJZiIsYS5saWNlbnNlRXhwaXJpbmdEYXlzJiYhYS5mcmVlVGllckJhbm5lciksZmUoKSxNZSgibmdJZiIsYS5hcHBPdmVyQ2FwYWNpdHkpfX1mdW5jdGlvbiBWWWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYi''@;'; put 'put ''LDI3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkudG9nZ2xlU2lkZWJhcigpKX0pLEd0KDEsImNsci1pY29uIiwyOCksaGUoKX19ZnVuY3Rpb24gQlllKGMsbCl7MSZjJiYoZGUoMCwiYSIsMjkpLEd0KDEsImltZyIsMzApKDIsImltZyIsMzEpLGhlKCkpLDIm''@;'; put 'put ''YyYmTWUoInJvdXRlckxpbmsiLFlzKDEsQVllKSl9ZnVuY3Rpb24galllKGMsbCl7MSZjJiYoZGUoMCwiYSIpLEd0KDEsInNwYW4iLDMyKSxoZSgpKX1mdW5jdGlvbiB6WWUoYyxsKXsxJmMmJihkZSgwLCJjbHItZHJvcGRvd24tbWVudSIsNDApKDEsImEiLDQxKSxMZSgyLCJWSUVXIiksaGUo''@;'; put 'put ''KSxkZSgzLCJhIiw0MSksTGUoNCwiTE9BRCIpLGhlKCksZGUoNSwiYSIsNDEpLExlKDYsIlJFVklFVyIpLGhlKCkoKSksMiZjJiYoZmUoKSxNZSgicm91dGVyTGluayIsWXMoMyxnaGUpKSxmZSgyKSxNZSgicm91dGVyTGluayIsWXMoNCxtaGUpKSxmZSgyKSxNZSgicm91dGVyTGluayIsWXMo''@;'; put 'put ''NSxFRykpKX1mdW5jdGlvbiBVWWUoYyxsKXtpZigxJmMmJihzaSgwKSxkZSgxLCJkaXYiLDMzKSgyLCJjbHItZHJvcGRvd24iKSgzLCJidXR0b24iLDM0KSxMZSg0LCIgTWVudSAiKSxoZSgpLGd0KDUselllLDcsNiwiY2xyLWRyb3Bkb3duLW1lbnUiLDM1KSxoZSgpKCksZGUoNiwiZGl2Iiwz''@;'; put 'put ''NikoNywiYSIsMzcpLExlKDgsIlZJRVciKSxoZSgpLGRlKDksImEiLDM4KSxMZSgxMCwiTE9BRCIpLGhlKCksZGUoMTEsImEiLDM5KSxMZSgxMiwiUkVWSUVXIiksaGUoKSgpLGxpKCkpLDImYyl7Y29uc3QgYT1SZSgpO2ZlKDcpLE1lKCJyb3V0ZXJMaW5rIixZcyg3LGdoZSkpLGZlKDIpLFRy''@;'; put 'put ''KCJhY3RpdmUiLGEucm91dGVyLnVybC5pbmNsdWRlcygiZWRpdG9yIil8fGEucm91dGVyLnVybC5pbmNsdWRlcygiZWRpdC1yZWNvcmQiKXx8YS5yb3V0ZXIudXJsLmluY2x1ZGVzKCJob21lIikpLE1lKCJyb3V0ZXJMaW5rIixZcyg4LG1oZSkpLGZlKDIpLFRyKCJhY3RpdmUiLGEucm91dGVy''@;'; put 'put ''LnVybC5pbmNsdWRlcygic3VibWl0dGVkIil8fGEucm91dGVyLnVybC5pbmNsdWRlcygiYXBwcm92ZSIpfHxhLnJvdXRlci51cmwuaW5jbHVkZXMoImhpc3RvcnkiKSksTWUoInJvdXRlckxpbmsiLFlzKDksRUcpKX19ZnVuY3Rpb24gWlllKGMsbCl7aWYoMSZjJiYoZGUoMCwibmF2Iiw0Miko''@;'; put 'put ''MSwidWwiLDQzKSgyLCJsaSIsNDQpKDMsImEiLDM3KSxMZSg0LCJTVUJNSVQiKSxoZSgpKCksZGUoNSwibGkiLDQ0KSg2LCJhIiwzNyksTGUoNywiQVBQUk9WRSIpLGhlKCkoKSxkZSg4LCJsaSIsNDQpKDksImEiLDM3KSxMZSgxMCwiSElTVE9SWSIpLGhlKCkoKSgpKCkpLDImYyl7Y29uc3Qg''@;'; put 'put ''YT1SZSgpO2ZlKDMpLE1lKCJyb3V0ZXJMaW5rIixZcyg1LEVHKSksZmUoMyksVHIoImFjdGl2ZSIsYS5yb3V0ZXIudXJsLmluY2x1ZGVzKCJhcHByb3ZlIikpLE1lKCJyb3V0ZXJMaW5rIixZcyg2LGtZZSkpLGZlKDMpLE1lKCJyb3V0ZXJMaW5rIixZcyg3LERZZSkpfX1mdW5jdGlvbiBXWWUo''@;'; put 'put ''YyxsKXsxJmMmJkd0KDAsImFwcC1hbGVydHMiKX1mdW5jdGlvbiBZWWUoYyxsKXsxJmMmJkd0KDAsInJvdXRlci1vdXRsZXQiKX1mdW5jdGlvbiBHWWUoYyxsKXsxJmMmJkd0KDAsImFwcC1hbGVydHMiKX1mdW5jdGlvbiAkWWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJhcHAt''@;'; put 'put ''aW5mby1tb2RhbCIsNDUpLEZ0KCJvbkNvbmZpcm1Nb2RhbENsaWNrIixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSkuJGltcGxpY2l0O3JldHVybiBDdChSZSgpLmNsb3NlQWJvcnRNb2RhbChoLmlkKSl9KSxoZSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPVJlKCk7TWUoImRhdGEi''@;'; put 'put ''LGEpKCJmb3JjZVJlbG9hZCIsIWQuc3RhcnR1cERhdGFMb2FkZWQmJjE9PT1kLnNhc2pzQWJvcnRzLmxlbmd0aCl9fWZ1bmN0aW9uIEtZZShjLGwpezEmYyYmKGRlKDAsImRpdiIsNDkpLEd0KDEsImRpdiIsNTApKDIsImRpdiIsNTEpKDMsImRpdiIsNTIpLGhlKCkpfWZ1bmN0aW9uIHFZZShj''@;'; put 'put ''LGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsNDYpLEd0KDEsImltZyIsNDcpLGd0KDIsS1llLDQsMCwiZGl2Iiw0OCksaGUoKSksMiZjKXtjb25zdCBhPVJlKCk7ZmUoMiksTWUoIm5nSWYiLG51bGw9PT1hLmFwcEFjdGl2ZSl9fVRzLmFkZEljb25zKFsibW9vbiIse291dGxpbmU6JzxwYXRoIGQ9''@;'; put 'put ''Ik0xOC4xMSAzMi4wMDAzQzEwLjMzIDMyLjAwMDMgNCAyNS43MjAzIDQgMTcuOTkwM0M0IDEwLjI2MDMgMTAuMDMgNC4yMDAzIDE3LjczIDQuMDAwM0MxOC4xNSAzLjk5MDMgMTguNTIgNC4yMzAzIDE4LjY4IDQuNjEwM0MxOC44NCA0Ljk5MDMgMTguNzUgNS40MzAzIDE4LjQ2IDUuNzIwM0Mx''@;'; put 'put ''Ni42OSA3LjQ1MDMgMTUuNzEgOS43NjAzIDE1LjcxIDEyLjIxMDNDMTUuNzEgMTcuMjQwMyAxOS44MyAyMS4zMzAzIDI0LjkxIDIxLjMzMDNDMjYuOSAyMS4zMzAzIDI4LjggMjAuNzAwMyAzMC40MSAxOS41MTAzQzMwLjc0IDE5LjI3MDMgMzEuMTkgMTkuMjUwMyAzMS41MyAxOS40NjAzQzMx''@;'; put 'put ''Ljg4IDE5LjY4MDMgMzIuMDYgMjAuMDgwMyAzMS45OSAyMC40OTAzQzMwLjc4IDI3LjE2MDMgMjQuOTQgMzIuMDAwMyAxOC4xMSAzMi4wMDAzWk0xNS40MyA2LjI5MDNDOS45OSA3LjQ4MDMgNiAxMi4yNDAzIDYgMTcuOTkwM0M2IDI0LjYxMDMgMTEuNDMgMzAuMDAwMyAxOC4xMSAzMC4wMDAz''@;'; put 'put ''QzIzLjE2IDMwLjAwMDMgMjcuNTggMjYuOTIwMyAyOS4zNyAyMi40MDAzQzI3Ljk3IDIzLjAxMDMgMjYuNDYgMjMuMzIwMyAyNC45MSAyMy4zMjAzQzE4Ljc0IDIzLjMyMDMgMTMuNzEgMTguMzMwMyAxMy43MSAxMi4yMDAzQzEzLjcxIDEwLjA3MDMgMTQuMzEgOC4wMzAzIDE1LjQzIDYuMjgw''@;'; put 'put ''M1Y2LjI5MDNaIi8+Jyxzb2xpZDonPHBhdGggZD0iTTE4LjExIDMyLjAwMDNDMTAuMzMgMzIuMDAwMyA0IDI1LjcyMDMgNCAxNy45OTAzQzQgMTAuMjYwMyAxMC4wMyA0LjIwMDMgMTcuNzMgNC4wMDAzQzE4LjE1IDMuOTkwMyAxOC41MiA0LjIzMDMgMTguNjggNC42MTAzQzE4Ljg0IDQuOTkw''@;'; put 'put ''MyAxOC43NSA1LjQzMDMgMTguNDYgNS43MjAzQzE2LjY5IDcuNDUwMyAxNS43MSA5Ljc2MDMgMTUuNzEgMTIuMjEwM0MxNS43MSAxNy4yNDAzIDE5LjgzIDIxLjMzMDMgMjQuOTEgMjEuMzMwM0MyNi45IDIxLjMzMDMgMjguOCAyMC43MDAzIDMwLjQxIDE5LjUxMDNDMzAuNzQgMTkuMjcwMyAz''@;'; put 'put ''MS4xOSAxOS4yNTAzIDMxLjUzIDE5LjQ2MDNDMzEuODggMTkuNjgwMyAzMi4wNiAyMC4wODAzIDMxLjk5IDIwLjQ5MDNDMzAuNzggMjcuMTYwMyAyNC45NCAzMi4wMDAzIDE4LjExIDMyLjAwMDNaIi8+J31dLFsic3VuIix7b3V0bGluZTonPHBhdGggZD0iTTguODEgMTAuMjJDOS4wMSAxMC40''@;'; put 'put ''MiA5LjI2IDEwLjUxIDkuNTIgMTAuNTFDOS43OCAxMC41MSAxMC4wMyAxMC40MSAxMC4yMyAxMC4yMkMxMC42MiA5LjgzIDEwLjYyIDkuMiAxMC4yMyA4LjgxTDguMTEgNi42OUM3LjcyIDYuMyA3LjA5IDYuMyA2LjcgNi42OUM2LjMxIDcuMDggNi4zMSA3LjcxIDYuNyA4LjFMOC44MiAxMC4y''@;'; put 'put ''Mkg4LjgxWk03IDE4QzcgMTcuNDUgNi41NSAxNyA2IDE3SDNDMi40NSAxNyAyIDE3LjQ1IDIgMThDMiAxOC41NSAyLjQ1IDE5IDMgMTlINkM2LjU1IDE5IDcgMTguNTUgNyAxOFpNMTggN0MxOC41NSA3IDE5IDYuNTUgMTkgNlYzQzE5IDIuNDUgMTguNTUgMiAxOCAyQzE3LjQ1IDIgMTcgMi40''@;'; put 'put ''NSAxNyAzVjZDMTcgNi41NSAxNy40NSA3IDE4IDdaTTI2LjQ5IDEwLjUxQzI2Ljc1IDEwLjUxIDI3IDEwLjQxIDI3LjIgMTAuMjJMMjkuMzIgOC4xQzI5LjcxIDcuNzEgMjkuNzEgNy4wOCAyOS4zMiA2LjY5QzI4LjkzIDYuMyAyOC4zIDYuMyAyNy45MSA2LjY5TDI1Ljc5IDguODFDMjUuNCA5''@;'; put 'put ''LjIgMjUuNCA5LjgzIDI1Ljc5IDEwLjIyQzI1Ljk5IDEwLjQyIDI2LjI0IDEwLjUxIDI2LjUgMTAuNTFIMjYuNDlaTTguODEgMjUuNzhMNi42OSAyNy45QzYuMyAyOC4yOSA2LjMgMjguOTIgNi42OSAyOS4zMUM2Ljg5IDI5LjUxIDcuMTQgMjkuNiA3LjQgMjkuNkM3LjY2IDI5LjYgNy45MSAy''@;'; put 'put ''OS41IDguMTEgMjkuMzFMMTAuMjMgMjcuMTlDMTAuNjIgMjYuOCAxMC42MiAyNi4xNyAxMC4yMyAyNS43OEM5Ljg0IDI1LjM5IDkuMjEgMjUuMzkgOC44MiAyNS43OEg4LjgxWk0zMyAxN0gzMEMyOS40NSAxNyAyOSAxNy40NSAyOSAxOEMyOSAxOC41NSAyOS40NSAxOSAzMCAxOUgzM0MzMy41''@;'; put 'put ''NSAxOSAzNCAxOC41NSAzNCAxOEMzNCAxNy40NSAzMy41NSAxNyAzMyAxN1pNMTggOUMxMy4wNCA5IDkgMTMuMDQgOSAxOEM5IDIyLjk2IDEzLjA0IDI3IDE4IDI3QzIyLjk2IDI3IDI3IDIyLjk2IDI3IDE4QzI3IDEzLjA0IDIyLjk2IDkgMTggOVpNMTggMjVDMTQuMTQgMjUgMTEgMjEuODYg''@;'; put 'put ''MTEgMThDMTEgMTQuMTQgMTQuMTQgMTEgMTggMTFDMjEuODYgMTEgMjUgMTQuMTQgMjUgMThDMjUgMjEuODYgMjEuODYgMjUgMTggMjVaTTI3LjE5IDI1Ljc4QzI2LjggMjUuMzkgMjYuMTcgMjUuMzkgMjUuNzggMjUuNzhDMjUuMzkgMjYuMTcgMjUuMzkgMjYuOCAyNS43OCAyNy4xOUwyNy45''@;'; put 'put ''IDI5LjMxQzI4LjEgMjkuNTEgMjguMzUgMjkuNiAyOC42MSAyOS42QzI4Ljg3IDI5LjYgMjkuMTIgMjkuNSAyOS4zMiAyOS4zMUMyOS43MSAyOC45MiAyOS43MSAyOC4yOSAyOS4zMiAyNy45TDI3LjIgMjUuNzhIMjcuMTlaTTE4IDI5QzE3LjQ1IDI5IDE3IDI5LjQ1IDE3IDMwVjMzQzE3IDMz''@;'; put 'put ''LjU1IDE3LjQ1IDM0IDE4IDM0QzE4LjU1IDM0IDE5IDMzLjU1IDE5IDMzVjMwQzE5IDI5LjQ1IDE4LjU1IDI5IDE4IDI5WiIvPicsc29saWQ6JzxwYXRoIGQ9Ik04LjgxIDI1Ljc4TDYuNjkgMjcuOUM2LjMgMjguMjkgNi4zIDI4LjkyIDYuNjkgMjkuMzFDNi44OSAyOS41MSA3LjE0IDI5LjYg''@;'; put 'put ''Ny40IDI5LjZDNy42NiAyOS42IDcuOTEgMjkuNSA4LjExIDI5LjMxTDEwLjIzIDI3LjE5QzEwLjYyIDI2LjggMTAuNjIgMjYuMTcgMTAuMjMgMjUuNzhDOS44NCAyNS4zOSA5LjIxIDI1LjM5IDguODIgMjUuNzhIOC44MVpNNyAxOEM3IDE3LjQ1IDYuNTUgMTcgNiAxN0gzQzIuNDUgMTcgMiAx''@;'; put 'put ''Ny40NSAyIDE4QzIgMTguNTUgMi40NSAxOSAzIDE5SDZDNi41NSAxOSA3IDE4LjU1IDcgMThaTTguODEgMTAuMjJDOS4wMSAxMC40MiA5LjI2IDEwLjUxIDkuNTIgMTAuNTFDOS43OCAxMC41MSAxMC4wMyAxMC40MSAxMC4yMyAxMC4yMkMxMC42MiA5LjgzIDEwLjYyIDkuMiAxMC4yMyA4Ljgx''@;'; put 'put ''TDguMTEgNi42OUM3LjcyIDYuMyA3LjA5IDYuMyA2LjcgNi42OUM2LjMxIDcuMDggNi4zMSA3LjcxIDYuNyA4LjFMOC44MiAxMC4yMkg4LjgxWk0yNi40OSAxMC41MUMyNi43NSAxMC41MSAyNyAxMC40MSAyNy4yIDEwLjIyTDI5LjMyIDguMUMyOS43MSA3LjcxIDI5LjcxIDcuMDggMjkuMzIg''@;'; put 'put ''Ni42OUMyOC45MyA2LjMgMjguMyA2LjMgMjcuOTEgNi42OUwyNS43OSA4LjgxQzI1LjQgOS4yIDI1LjQgOS44MyAyNS43OSAxMC4yMkMyNS45OSAxMC40MiAyNi4yNCAxMC41MSAyNi41IDEwLjUxSDI2LjQ5Wk0xOCA3QzE4LjU1IDcgMTkgNi41NSAxOSA2VjNDMTkgMi40NSAxOC41NSAyIDE4''@;'; put 'put ''IDJDMTcuNDUgMiAxNyAyLjQ1IDE3IDNWNkMxNyA2LjU1IDE3LjQ1IDcgMTggN1pNMTggMjlDMTcuNDUgMjkgMTcgMjkuNDUgMTcgMzBWMzNDMTcgMzMuNTUgMTcuNDUgMzQgMTggMzRDMTguNTUgMzQgMTkgMzMuNTUgMTkgMzNWMzBDMTkgMjkuNDUgMTguNTUgMjkgMTggMjlaTTMzIDE3SDMw''@;'; put 'put ''QzI5LjQ1IDE3IDI5IDE3LjQ1IDI5IDE4QzI5IDE4LjU1IDI5LjQ1IDE5IDMwIDE5SDMzQzMzLjU1IDE5IDM0IDE4LjU1IDM0IDE4QzM0IDE3LjQ1IDMzLjU1IDE3IDMzIDE3Wk0yNy4xOSAyNS43OEMyNi44IDI1LjM5IDI2LjE3IDI1LjM5IDI1Ljc4IDI1Ljc4QzI1LjM5IDI2LjE3IDI1LjM5''@;'; put 'put ''IDI2LjggMjUuNzggMjcuMTlMMjcuOSAyOS4zMUMyOC4xIDI5LjUxIDI4LjM1IDI5LjYgMjguNjEgMjkuNkMyOC44NyAyOS42IDI5LjEyIDI5LjUgMjkuMzIgMjkuMzFDMjkuNzEgMjguOTIgMjkuNzEgMjguMjkgMjkuMzIgMjcuOUwyNy4yIDI1Ljc4SDI3LjE5Wk0xOCA5QzEzLjA0IDkgOSAx''@;'; put 'put ''My4wNCA5IDE4QzkgMjIuOTYgMTMuMDQgMjcgMTggMjdDMjIuOTYgMjcgMjcgMjIuOTYgMjcgMThDMjcgMTMuMDQgMjIuOTYgOSAxOCA5WiIvPid9XSxbImV4Y2xhbWF0aW9uLXRyaWFuZ2xlIix7b3V0bGluZTonPHBhdGggZD0iTTE3Ljk5NDMgMjAuOEMxOC41NDQgMjAuOCAxOC45OTM4IDIw''@;'; put 'put ''LjM1IDE4Ljk5MzggMTkuOFYxNEMxOC45OTM4IDEzLjQ1IDE4LjU0NCAxMyAxNy45OTQzIDEzQzE3LjQ0NDUgMTMgMTYuOTk0NyAxMy40NSAxNi45OTQ3IDE0VjE5LjhDMTYuOTk0NyAyMC4zNSAxNy40NDQ1IDIwLjggMTcuOTk0MyAyMC44Wk0xOC44NDM5IDIyLjk1QzE4LjcyMzkgMjIuODQg''@;'; put 'put ''MTguNTk0IDIyLjc1IDE4LjQ1NDEgMjIuNjlDMTguMTY0MiAyMi41NyAxNy44MjQzIDIyLjU3IDE3LjUzNDUgMjIuNjlDMTcuMzk0NSAyMi43NSAxNy4yNjQ2IDIyLjg0IDE3LjE0NDYgMjIuOTVDMTYuOTI0NyAyMy4xOCAxNi43OTQ4IDIzLjQ4IDE2Ljc5NDggMjMuOEMxNi43OTQ4IDI0LjEy''@;'; put 'put ''IDE2LjkyNDcgMjQuNDIgMTcuMTQ0NiAyNC42NUMxNy4yNjQ2IDI0Ljc2IDE3LjM5NDUgMjQuODUgMTcuNTM0NSAyNC45MUMxNy42ODQ0IDI0Ljk3IDE3LjgzNDMgMjUgMTcuOTk0MyAyNUMxOC4xNTQyIDI1IDE4LjMwNDEgMjQuOTcgMTguNDU0MSAyNC45MUMxOC41OTQgMjQuODUgMTguNzIz''@;'; put 'put ''OSAyNC43NiAxOC44NDM5IDI0LjY1QzE5LjA2MzggMjQuNDIgMTkuMTkzNyAyNC4xMiAxOS4xOTM3IDIzLjhDMTkuMTkzNyAyMy42NCAxOS4xNjM3IDIzLjQ5IDE5LjEwMzggMjMuMzRDMTkuMDQzOCAyMy4yIDE4Ljk1MzggMjMuMDYgMTguODQzOSAyMi45NVpNMzAuNTk4NiAyNS40M0wyMC42''@;'; put 'put ''NjMxIDcuNTdDMjAuMTEzMyA2LjU5IDE5LjEyMzggNiAxNy45OTQzIDZDMTYuODY0OCA2IDE1Ljg3NTIgNi41OSAxNS4zMjU0IDcuNTdMNS4zODk4OCAyNS40M0M0Ljg1MDEyIDI2LjM5IDQuODcwMTEgMjcuNTMgNS40MTk4NyAyOC40OEM1Ljk2OTYyIDI5LjQzIDYuOTU5MTggMzAgOC4wNTg2''@;'; put 'put ''OSAzMEgyNy45Mjk4QzI5LjAyOTMgMzAgMzAuMDA4OSAyOS40MyAzMC41Njg2IDI4LjQ4QzMxLjEyODQgMjcuNTMgMzEuMTM4NCAyNi4zOSAzMC41OTg2IDI1LjQzWk0yOC44NDk0IDI3LjQ3QzI4Ljc1OTUgMjcuNjMgMjguNDc5NiAyOCAyNy45Mzk4IDI4SDguMDU4NjlDNy41MDg5NCAyOCA3''@;'; put 'put ''LjIzOTA2IDI3LjYzIDcuMTQ5MSAyNy40N0M3LjA1OTE0IDI3LjMxIDYuODY5MjIgMjYuODkgNy4xNDkxIDI2LjQxTDE3LjA2NDcgOC41NUMxNy4zMzQ2IDguMDYgMTcuODA0MyA4IDE3Ljk4NDMgOEMxOC4xNjQyIDggMTguNjM0IDguMDUgMTguOTAzOSA4LjU1TDI4LjgzOTQgMjYuNDFDMjku''@;'; put 'put ''MTA5MyAyNi44OSAyOC45MTk0IDI3LjMxIDI4LjgyOTQgMjcuNDdIMjguODQ5NFoiLz4nLHNvbGlkOic8cGF0aCBkPSJNMzAuNTk4NiAyNS40M0wyMC42NjMxIDcuNTdDMjAuMTEzMyA2LjU5IDE5LjEyMzggNiAxNy45OTQzIDZDMTYuODY0OCA2IDE1Ljg3NTIgNi41OSAxNS4zMjU0IDcuNTdM''@;'; put 'put ''NS4zODk4OCAyNS40M0M0Ljg1MDEyIDI2LjM5IDQuODcwMTEgMjcuNTMgNS40MTk4NyAyOC40OEM1Ljk2OTYyIDI5LjQzIDYuOTU5MTggMzAgOC4wNTg2OSAzMEgyNy45Mjk4QzI5LjAyOTMgMzAgMzAuMDA4OSAyOS40MyAzMC41Njg2IDI4LjQ4QzMxLjEyODQgMjcuNTMgMzEuMTM4NCAyNi4z''@;'; put 'put ''OSAzMC41OTg2IDI1LjQzWk0xNi43OTQ4IDEzLjVDMTYuNzk0OCAxMi44NCAxNy4zMzQ2IDEyLjMgMTcuOTk0MyAxMi4zQzE4LjY1NCAxMi4zIDE5LjE5MzcgMTIuODQgMTkuMTkzNyAxMy41VjE5LjNDMTkuMTkzNyAxOS45NiAxOC42NTQgMjAuNSAxNy45OTQzIDIwLjVDMTcuMzM0NiAyMC41''@;'; put 'put ''IDE2Ljc5NDggMTkuOTYgMTYuNzk0OCAxOS4zVjEzLjVaTTE4Ljk3MzggMjVDMTguODMzOSAyNS4xMyAxOC42ODQgMjUuMjMgMTguNTI0IDI1LjNDMTguMzQ0MSAyNS4zNyAxOC4xNzQyIDI1LjQxIDE3Ljk5NDMgMjUuNDFDMTcuODE0MyAyNS40MSAxNy42MzQ0IDI1LjM4IDE3LjQ1NDUgMjUu''@;'; put 'put ''M0MxNy4zMDQ2IDI1LjIzIDE3LjE1NDYgMjUuMTMgMTYuOTk0NyAyNC45OUMxNi43MzQ4IDI0LjcyIDE2LjU4NDkgMjQuMzcgMTYuNTg0OSAyNEMxNi41ODQ5IDIzLjYzIDE2LjcyNDggMjMuMjkgMTYuOTk0NyAyM0MxNy4xMzQ2IDIyLjg3IDE3LjI4NDYgMjIuNzcgMTcuNDQ0NSAyMi43QzE3''@;'; put 'put ''LjYxNDQgMjIuNjMgMTcuNzk0MyAyMi41OSAxNy45ODQzIDIyLjU5QzE4LjE3NDIgMjIuNTkgMTguMzU0MSAyMi42MyAxOC41MjQgMjIuN0MxOC42NzQgMjIuNzcgMTguODIzOSAyMi44NyAxOC45NzM4IDIzQzE5LjA5MzggMjMuMTIgMTkuMjAzNyAyMy4yOCAxOS4yNzM3IDIzLjQ2QzE5LjM0''@;'; put 'put ''MzcgMjMuNjQgMTkuMzgzNiAyMy44MSAxOS4zODM2IDIzLjk5QzE5LjM4MzYgMjQuMzUgMTkuMjQzNyAyNC43IDE4Ljk2MzggMjQuOTlMMTguOTczOCAyNVoiLz4nfV0sWyJ0YWJsZSIse291dGxpbmU6JzxwYXRoIGQ9Ik0zMyAxOEMzMy41NSAxOCAzNCAxNy41NSAzNCAxN0MzNCAxNi40NSAz''@;'; put 'put ''My41NSAxNiAzMyAxNkgyOFY4SDMzQzMzLjU1IDggMzQgNy41NSAzNCA3QzM0IDYuNDUgMzMuNTUgNiAzMyA2SDhWM0M4IDIuNDUgNy41NSAyIDcgMkM2LjQ1IDIgNiAyLjQ1IDYgM1Y2SDNDMi40NSA2IDIgNi40NSAyIDdDMiA3LjU1IDIuNDUgOCAzIDhINlYzM0M2IDMzLjU1IDYuNDUgMzQg''@;'; put 'put ''NyAzNEM3LjU1IDM0IDggMzMuNTUgOCAzM1YyOEgxNlYzM0MxNiAzMy41NSAxNi40NSAzNCAxNyAzNEMxNy41NSAzNCAxOCAzMy41NSAxOCAzM1YyOEgyNlYzM0MyNiAzMy41NSAyNi40NSAzNCAyNyAzNEMyNy41NSAzNCAyOCAzMy41NSAyOCAzM1YyOEgzM0MzMy41NSAyOCAzNCAyNy41NSAz''@;'; put 'put ''NCAyN0MzNCAyNi40NSAzMy41NSAyNiAzMyAyNkgyOFYxOEgzM1pNMTYgMjZIOFYxOEgxNlYyNlpNMTYgMTZIOFY4SDE2VjE2Wk0yNiAyNkgxOFYxOEgyNlYyNlpNMjYgMTZIMThWOEgyNlYxNloiLz4nfV0sWyJ0cmFzaCIse291dGxpbmU6JzxwYXRoIGQ9Ik0yNy45OCAzMUMyOCAzMS4yNSAy''@;'; put 'put ''Ny45MiAzMS40OSAyNy43NiAzMS42OEMyNy42IDMxLjg3IDI3LjM3IDMxLjk4IDI3LjEyIDMySDguODVDOC42IDMxLjk4IDguMzcgMzEuODcgOC4yMSAzMS42OEM4LjA1IDMxLjQ5IDcuOTcgMzEuMjUgNy45OSAzMVYxMS4wM0g1Ljk3VjMxQzUuOTUgMzEuNzggNi4yNCAzMi41MyA2Ljc4IDMz''@;'; put 'put ''LjA5QzcuMzIgMzMuNjUgOC4wNiAzMy45OCA4Ljg1IDM0SDI3LjEyQzI3LjkgMzMuOTggMjguNjUgMzMuNjYgMjkuMTkgMzMuMDlDMjkuNzMgMzIuNTIgMzAuMDIgMzEuNzcgMzAgMzFWMTEuMDNIMjcuOThWMzFaTTEzIDEyLjk4VjI3Ljk4SDE1LjAyVjEyLjk4SDEzWk0xNSA0SDIxVjZIMjNW''@;'; put 'put ''NEMyMyAyLjkgMjIuMSAyIDIxIDJIMTVDMTMuOSAyIDEzIDIuOSAxMyA0VjZIMTVWNFpNMzAuOTkgNi45OEg1LjAxQzQuNDUgNi45OCA0IDcuNDMgNCA3Ljk4QzQgOC41MyA0LjQ1IDguOTggNS4wMSA4Ljk4SDMwLjk5QzMxLjU1IDguOTggMzIgOC41MyAzMiA3Ljk4QzMyIDcuNDMgMzEuNTUg''@;'; put 'put ''Ni45OCAzMC45OSA2Ljk4Wk0yMC45OCAxMi45OFYyNy45OEgyM1YxMi45OEgyMC45OFoiLz4nLHNvbGlkOic8cGF0aCBkPSJNMTUgNEgyMVY2SDIzVjRDMjMgMi45IDIyLjEgMiAyMSAySDE1QzEzLjkgMiAxMyAyLjkgMTMgNFY2SDE1VjRaTTMwLjk5IDYuOThINS4wMUM0LjQ1IDYuOTggNCA3''@;'; put 'put ''LjQzIDQgNy45OEM0IDguNTMgNC40NSA4Ljk4IDUuMDEgOC45OEgzMC45OUMzMS41NSA4Ljk4IDMyIDguNTMgMzIgNy45OEMzMiA3LjQzIDMxLjU1IDYuOTggMzAuOTkgNi45OFpNNS45NyAxMS4wM1YzMUM1Ljk1IDMxLjc4IDYuMjQgMzIuNTMgNi43OCAzMy4wOUM3LjMyIDMzLjY1IDguMDYg''@;'; put 'put ''MzMuOTggOC44NSAzNEgyNy4xMkMyNy45IDMzLjk4IDI4LjY1IDMzLjY2IDI5LjE5IDMzLjA5QzI5LjczIDMyLjUyIDMwLjAyIDMxLjc3IDMwIDMxVjExLjAzSDUuOTdaTTIwLjc5IDI4LjgyVjE1SDIzLjIxVjI5SDIwLjc5VjI4LjgyWk0xMi44MSAyOC44MlYxNUgxNS4yM1YyOUgxMi44MVYy''@;'; put 'put ''OC44MloiLz4nfV0sWyJwcm9jZXNzLW9uLXZtIix7b3V0bGluZTonPHBhdGggZD0iTTEyIDE0LjUwMDFWMjQuNTAwMUMxMiAyNS4wNTAxIDEyLjQ1IDI1LjUwMDEgMTMgMjUuNTAwMUgyM0MyMy41NSAyNS41MDAxIDI0IDI1LjA1MDEgMjQgMjQuNTAwMVYxNC41MDAxQzI0IDEzLjk1MDEgMjMu''@;'; put 'put ''NTUgMTMuNTAwMSAyMyAxMy41MDAxSDEzQzEyLjQ1IDEzLjUwMDEgMTIgMTMuOTUwMSAxMiAxNC41MDAxWk0xNCAxNS41MDAxSDIyVjIzLjUwMDFIMTRWMTUuNTAwMVpNNS4yNiAyMi4yODAxQzUuODEgMjIuMjAwMSA2LjE5IDIxLjcwMDEgNi4xMSAyMS4xNTAxQzYuMDMgMjAuNjEwMSA2IDIw''@;'; put 'put ''LjA1MDEgNiAxOS40OTAxQzYgMTMuNDEwMSAxMC41NSA4LjM5MDA2IDE2LjQ3IDcuNjEwMDZMMTYuMjkgNy43OTAwNkMxNS45IDguMTgwMDYgMTUuOSA4LjgxMDA2IDE2LjI5IDkuMjAwMDZDMTYuNDkgOS40MDAwNiAxNi43NCA5LjQ5MDA2IDE3IDkuNDkwMDZDMTcuMjYgOS40OTAwNiAxNy41''@;'; put 'put ''MSA5LjM5MDA2IDE3LjcxIDkuMjAwMDZMMjAuNDIgNi40OTAwNkwxNy43MSAzLjc5MDA2QzE3LjMyIDMuNDAwMDYgMTYuNjkgMy40MDAwNiAxNi4zIDMuNzkwMDZDMTUuOTEgNC4xODAwNiAxNS45MSA0LjgxMDA2IDE2LjMgNS4yMDAwNkwxNi42NiA1LjU2MDA2QzkuNTYgNi4yNTAwNiA0IDEy''@;'; put 'put ''LjIzMDEgNCAxOS41MDAxQzQgMjAuMTUwMSA0LjA0IDIwLjgwMDEgNC4xMyAyMS40MzAxQzQuMiAyMS45MzAxIDQuNjMgMjIuMjkwMSA1LjEyIDIyLjI5MDFDNS4xNiAyMi4yOTAxIDUuMjEgMjIuMjkwMSA1LjI2IDIyLjI5MDFWMjIuMjgwMVpNMjMuNjcgMzAuMDcwMUMyMS45NCAzMS4wMDAx''@;'; put 'put ''IDE5Ljk4IDMxLjQ5MDEgMTggMzEuNDkwMUMxNC4zIDMxLjQ5MDEgMTAuODMgMjkuNzYwMSA4LjU3IDI2LjkwMDFMOC44MyAyNi45NDAxQzkuMzggMjcuMDQwMSA5Ljg5IDI2LjY2MDEgOS45OCAyNi4xMjAxQzEwLjA3IDI1LjU4MDEgOS43IDI1LjA2MDEgOS4xNiAyNC45NzAxTDUuMzggMjQu''@;'; put 'put ''MzQwMUw0Ljc1IDI4LjEyMDFDNC42NiAyOC42NjAxIDUuMDMgMjkuMTgwMSA1LjU3IDI5LjI3MDFDNS42MyAyOS4yNzAxIDUuNjggMjkuMjgwMSA1Ljc0IDI5LjI4MDFDNi4yMiAyOS4yODAxIDYuNjQgMjguOTMwMSA2LjczIDI4LjQ1MDFMNi44MiAyNy45MjAxQzkuNDUgMzEuNDAwMSAxMy41''@;'; put 'put ''OSAzMy41MDAxIDE4IDMzLjUwMDFDMjAuMzEgMzMuNTAwMSAyMi42IDMyLjkzMDEgMjQuNjIgMzEuODQwMUMyNS4xMSAzMS41ODAxIDI1LjI5IDMwLjk3MDEgMjUuMDMgMzAuNDkwMUMyNC43NyAzMC4wMDAxIDI0LjE2IDI5LjgyMDEgMjMuNjggMzAuMDgwMUwyMy42NyAzMC4wNzAxWk0zMC4w''@;'; put 'put ''OSAyNi44MzAxTDI5LjkgMjYuODYwMUMzMS4yNiAyNC42NjAxIDMyIDIyLjEyMDEgMzIgMTkuNDkwMUMzMiAxMy45MDAxIDI4LjY4IDguODUwMDYgMjMuNTUgNi42MzAwNkMyMy4wNCA2LjQxMDA2IDIyLjQ2IDYuNjQwMDYgMjIuMjQgNy4xNTAwNkMyMi4wMiA3LjY2MDA2IDIyLjI1IDguMjUw''@;'; put 'put ''MDYgMjIuNzYgOC40NjAwNkMyNy4xNiAxMC4zNjAxIDMwLjAxIDE0LjY5MDEgMzAuMDEgMTkuNDgwMUMzMC4wMSAyMS44MDAxIDI5LjM0IDI0LjA0MDEgMjguMSAyNS45NjAxTDI3Ljk5IDI1LjMyMDFDMjcuOSAyNC43ODAxIDI3LjM5IDI0LjQwMDEgMjYuODQgMjQuNTAwMUMyNi4zIDI0LjU5''@;'; put 'put ''MDEgMjUuOTMgMjUuMTAwMSAyNi4wMiAyNS42NTAxTDI2LjY0IDI5LjQzMDFMMzAuNDIgMjguODEwMUMzMC45NiAyOC43MjAxIDMxLjMzIDI4LjIxMDEgMzEuMjQgMjcuNjYwMUMzMS4xNSAyNy4xMjAxIDMwLjY0IDI2Ljc0MDEgMzAuMDkgMjYuODQwMVYyNi44MzAxWiIvPid9XSk7bGV0IFhZ''@;'; put 'put ''ZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNLEQsWixyZSl7dGhpcy5hcHBTZXJ2aWNlPWEsdGhpcy5saWNlbmNlU2VydmljZT1kLHRoaXMucm91dGVyPWgsdGhpcy5yb3V0ZT1mLHRoaXMubG9jYXRpb249dix0aGlzLmV2ZW50U2VydmljZT1NLHRoaXMuYXBwU3RvcmVT''@;'; put 'put ''ZXJ2aWNlPUQsdGhpcy5jZHI9Wix0aGlzLmVsZW1lbnRSZWY9cmUsdGhpcy5saWNlbnNlRXhwaXJpbmdEYXlzPW51bGwsdGhpcy5zYXNqc0Fib3J0cz1bXSx0aGlzLmVkaXRvckFjdGl2ZT0hMSx0aGlzLmFwcHJvdmVBY3RpdmU9ITEsdGhpcy5mcmVlVGllckJhbm5lcj10aGlzLmxpY2VuY2VT''@;'; put 'put ''ZXJ2aWNlLmlzQXBwRnJlZVRpZXIudmFsdWUsdGhpcy5saWNlbmNlUHJvYmxlbT10aGlzLmxpY2VuY2VTZXJ2aWNlLmxpY2VuY2VQcm9ibGVtLHRoaXMuYXBwT3ZlckNhcGFjaXR5PSExLHRoaXMuYXBwQWN0aXZlPW51bGwsdGhpcy5yZXF1ZXN0c01vZGFsPSExLHRoaXMuc2hvd1JlZ2lzdHJh''@;'; put 'put ''dGlvbj0hMCx0aGlzLnN0YXJ0dXBEYXRhTG9hZGVkPSExLHRoaXMuZGVtb0xpbWl0Tm90aWNlPXtvcGVuOiExLGZlYXR1cmVOYW1lOiIifSx0aGlzLnN5c3NpdGU9dGhpcy5hcHBTZXJ2aWNlLnN5c3NpdGUsdGhpcy5saWNlbmNlU3RhdGU9dGhpcy5saWNlbmNlU2VydmljZS5saWNlbmNlU3Rh''@;'; put 'put ''dGUsdGhpcy5wYXJzZURjQWRhcHRlclNldHRpbmdzKCksd2luZG93LmFwcGluZm89KCk9Pntjb25zb2xlLnRhYmxlKHsiQWRhcHRlciB2ZXJzaW9uIjoiNC4xMi4wIiwiQXBwIHZlcnNpb24iOiJ2Ni4xNi4yIi5yZXBsYWNlKCJ2IiwiIiksIkJ1aWxkIHRpbWVzdGFtcCI6T28ocGFyc2VJbnQo''@;'; put 'put ''IjE3NDkyMDk3NjI0ODIiKSkuZm9ybWF0KCJERC1NTU0tWVlZWSBISDpNTSIpLCIuLi4iOiIuLi4ifSl9LHRoaXMuc3Vic2NyaWJlVG9MaWNlbnNlRXZlbnRzKCksdGhpcy5jb21taXRWZXI9InY2LjE2LjIiLnJlcGxhY2UoInYiLCIiKSsiLmdhNjFlMmRlIixoLmV2ZW50cy5zdWJzY3JpYmUo''@;'; put 'put ''Y2U9PntpZih0aGlzLnJvdXRlVXJsPXRoaXMucm91dGVyLnVybCx0eXBlb2YgdGhpcy5yb3V0ZVVybDwidSImJnRoaXMucm91dGVVcmwubGVuZ3RoPjQpe2xldCBiZT10aGlzLnJvdXRlVXJsLnNwbGl0KCIvIilbMV07ImVkaXRvciI9PT1iZT8odGhpcy5lcnJUb3A9ITAsdGhpcy5lZGl0b3JB''@;'; put 'put ''Y3RpdmU9ITAsdGhpcy5hcHByb3ZlQWN0aXZlPSExKToiaG9tZSI9PT1iZT8odGhpcy5lcnJUb3A9ITEsdGhpcy5lZGl0b3JBY3RpdmU9ITAsdGhpcy5hcHByb3ZlQWN0aXZlPSExKToodGhpcy5lcnJUb3A9ITAsdGhpcy5lZGl0b3JBY3RpdmU9ITEpLEtuLnJvb3RQYXJhbT1iZX10eXBlb2Yg''@;'; put 'put ''dGhpcy5yb3V0ZVVybDwidSImJnRoaXMucm91dGVVcmwubGVuZ3RoPjYmJih0aGlzLmFwcHJvdmVBY3RpdmU9ISF0aGlzLnJvdXRlVXJsLmluY2x1ZGVzKCJhcHByb3ZlRGV0Iil8fCEhdGhpcy5yb3V0ZVVybC5pbmNsdWRlcygidG9hcHByb3ZlIikpfSksdGhpcy5zdWJzY3JpYmVUb1Nob3dB''@;'; put 'put ''Ym9ydE1vZGFsKCksdGhpcy5zdWJzY3JpYmVUb1JlcXVlc3RzTW9kYWwoKSx0aGlzLnN1YnNjcmliZVRvU3RhcnR1cERhdGEoKSx0aGlzLnN1YnNjcmliZVRvQXBwQWN0aXZlKCksdGhpcy5zdWJzY3JpYmVUb0RlbW9MaW1pdE1vZGFsKCksd2luZG93LmZyYW1lRWxlbWVudCYmKHdpbmRvdy5m''@;'; put 'put ''cmFtZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJzdHlsZSIsImhlaWdodDoxMDAlO3dpZHRoOjEwMCU7cG9zaXRpb246YWJzb2x1dGUiKSx3aW5kb3cuZnJhbWVFbGVtZW50LnNldEF0dHJpYnV0ZSgiYWxsb3dmdWxsc2NyZWVuIiwiIiksd2luZG93LmZyYW1lRWxlbWVudC5zZXRBdHRyaWJ1dGUo''@;'; put 'put ''ImZyYW1lYm9yZGVyIiwiMCIpLHdpbmRvdy5mcmFtZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJtYXJnaW5oZWlnaHQiLCIwIiksd2luZG93LmZyYW1lRWxlbWVudC5zZXRBdHRyaWJ1dGUoIm1hcmdpbndpZHRoIiwiMCIpLHdpbmRvdy5mcmFtZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJzY3JvbGxp''@;'; put 'put ''bmciLCJhdXRvIiksd2luZG93LmZvY3VzKCkpfXBhcnNlRGNBZGFwdGVyU2V0dGluZ3MoKXtjb25zdCBhPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoInNhc2pzIik7aWYoIWEpcmV0dXJuIHRoaXMubGljZW5jZVNlcnZpY2UuZGVhY3RpdmF0ZUFwcCgpLHZvaWQgc2V0VGltZW91dCgoKT0+e3Ro''@;'; put 'put ''aXMuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKG51bGwsIlBsZWFzZSBtYWtlIHN1cmUgJ1NBU0pTJyB0YWcgd2l0aCBjb25maWcgYXR0cmlidXRlcyBpcyBhZGRlZCB0byBpbmRleC5odG1sIixudWxsLCJTQVNqcyBDb25maWcgbm90IGZvdW5kIil9KTtjb25zdCBkPWY9PmEuZ2V0QXR0''@;'; put 'put ''cmlidXRlKGYpfHx2b2lkIDAsaD17c2VydmVyVXJsOmQoInNlcnZlclVybCIpfHwiIixhcHBMb2M6ZCgiYXBwTG9jIil8fCIiLHNlcnZlclR5cGU6ZCgic2VydmVyVHlwZSIpLGxvZ2luTWVjaGFuaXNtOmQoImxvZ2luTWVjaGFuaXNtIil8fCIiLGFkbWluR3JvdXA6ZCgiYWRtaW5Hcm91cCIp''@;'; put 'put ''fHwiIixkY1BhdGg6ZCgiZGNQYXRoIil8fCIiLGRlYnVnOiJ0cnVlIj09PWQoImRlYnVnIil8fCExLHVzZUNvbXB1dGVBcGk6dGhpcy5wYXJzZUNvbXB1dGVBcGkoZCgidXNlQ29tcHV0ZUFwaSIpKSxjb250ZXh0TmFtZTpkKCJjb250ZXh0TmFtZSIpfHwiIixob3RMaWNlbmNlS2V5OmQoImhv''@;'; put 'put ''dExpY2VuY2VLZXkiKXx8IiJ9O3RoaXMuZGNBZGFwdGVyU2V0dGluZ3M9aCx0aGlzLmFwcFN0b3JlU2VydmljZS5zZXREY0FkYXB0ZXJTZXR0aW5ncyhoKSx0aGlzLmFwcFNlcnZpY2Uuc2FzU2VydmljZUluaXQoKX1saWNlbmNlUHJvYmxlbURldGFpbHMoYSl7dGhpcy5yb3V0ZXIubmF2aWdh''@;'; put 'put ''dGVCeVVybChhKX1wYXJzZUNvbXB1dGVBcGkoYSl7cmV0dXJuIHZvaWQgMD09PWF8fCJ1bmRlZmluZWQiPT09YXx8Im51bGwiPT09YT9udWxsOiJ0cnVlIj09PWF8fCExfXN1YnNjcmliZVRvRGVtb0xpbWl0TW9kYWwoKXt0aGlzLmV2ZW50U2VydmljZS5vbkRlbW9MaW1pdE1vZGFsU2hvdy5z''@;'; put 'put ''dWJzY3JpYmUoYT0+e3RoaXMuZGVtb0xpbWl0Tm90aWNlPXtvcGVuOiEwLGZlYXR1cmVOYW1lOmF9fSl9c3Vic2NyaWJlVG9MaWNlbnNlRXZlbnRzKCl7dGhpcy5saWNlbmNlU2VydmljZS5pc0FwcEZyZWVUaWVyLnN1YnNjcmliZShhPT57dGhpcy5mcmVlVGllckJhbm5lcj1hfSksdGhpcy5s''@;'; put 'put ''aWNlbmNlU2VydmljZS5saWNlbnNlRXhwaXJlc0luRGF5cy5zdWJzY3JpYmUoYT0+e2EmJmE8PTE0JiYodGhpcy5saWNlbnNlRXhwaXJpbmdEYXlzPWEpfSksdGhpcy5saWNlbmNlU2VydmljZS5pc0FwcE92ZXJDYXBhY2l0eS5zdWJzY3JpYmUoYT0+e3RoaXMuYXBwT3ZlckNhcGFjaXR5PWF9''@;'; put 'put ''KX1zdWJzY3JpYmVUb0FwcEFjdGl2ZSgpe3RoaXMubGljZW5jZVNlcnZpY2UuaXNBcHBBY3RpdmF0ZWQuc3Vic2NyaWJlKGE9Pnt0aGlzLmFwcEFjdGl2ZT1hfSl9c3Vic2NyaWJlVG9TaG93QWJvcnRNb2RhbCgpe3RoaXMuZXZlbnRTZXJ2aWNlLm9uU2hvd0Fib3J0TW9kYWwuc3Vic2NyaWJl''@;'; put 'put ''KGE9PnthLmlkPXRoaXMuc2FzanNBYm9ydHMubGVuZ3RoKzEsdGhpcy5zYXNqc0Fib3J0cy5wdXNoKGEpLHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKX0pfXN1YnNjcmliZVRvU3RhcnR1cERhdGEoKXt0aGlzLmV2ZW50U2VydmljZS5vblN0YXJ0dXBEYXRhTG9hZGVkLnN1YnNjcmliZSgoKT0+''@;'; put 'put ''e3RoaXMuc3RhcnR1cERhdGFMb2FkZWQ9ITB9KX1zdWJzY3JpYmVUb1JlcXVlc3RzTW9kYWwoKXt0aGlzLmV2ZW50U2VydmljZS5vblJlcXVlc3RzTW9kYWxPcGVuLnN1YnNjcmliZShhPT57dGhpcy5yZXF1ZXN0c01vZGFsPSEwfSl9Y2xvc2VBYm9ydE1vZGFsKGEpe2xldCBkPXRoaXMuc2Fz''@;'; put 'put ''anNBYm9ydHMuZmluZEluZGV4KGg9PmguaWQ9PT1hKTt0aGlzLnNhc2pzQWJvcnRzLnNwbGljZShkLDEpfXRvZ2dsZVNpZGViYXIoKXt0aGlzLmV2ZW50U2VydmljZS50b2dnbGVTaWRlYmFyKCl9aXNNYWluUm91dGUoYSl7cmV0dXJuIHRoaXMucm91dGVyLnVybC5pbmNsdWRlcyhhKX1vcGVu''@;'; put 'put ''TGljZW5jaW5nUGFnZSgpe3RoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9saWNlbnNpbmcvdXBkYXRlIil9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2Uob0wpLEdlKHUxKSxHZShMcyksR2UoQ3UpLEdlKGZoKSxHZSh2YyksR2UoUTgpLEdl''@;'; put 'put ''KEVzKSxHZShKaSkpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1sibXktYXBwIl1dLGRlY2xzOjI2LHZhcnM6MTcsY29uc3RzOltbMSwibWFpbi1jb250YWluZXIiXSxbNCwibmdJZiJdLFsxLCJhcHAtaGVhZGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xh''@;'; put 'put ''c3MiLCJjdXJzb3ItcG9pbnRlciBzZWxlY3Qtbm9uZSBtbC0xMCBkLWZsZXggY2xyLWp1c3RpZnktY29udGVudC1jZW50ZXIgY2xyLWFsaWduLWl0ZW1zLWNlbnRlciIsMywiY2xpY2siLDQsIm5nSWYiXSxbMSwibG9nbyIsImQtZmxleCIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiXSxbImhy''@;'; put 'put ''ZWYiLCIjIiwiY2xhc3MiLCJuYXYtbGluayIsMywicm91dGVyTGluayIsNCwibmdJZiJdLFsiY2xhc3MiLCJzdWJuYXYiLDQsIm5nSWYiXSxbMywib3BlbmVkQ2hhbmdlIiwib3BlbmVkIl0sWzMsImRhdGEiLCJmb3JjZVJlbG9hZCIsIm9uQ29uZmlybU1vZGFsQ2xpY2siLDQsIm5nRm9yIiwi''@;'; put 'put ''bmdGb3JPZiJdLFsiYXBwRHJhZ05kcm9wIiwiIiwxLCJwb3NpdGlvbi1yZWxhdGl2ZSIsMywiY2xyTW9kYWxPcGVuQ2hhbmdlIiwiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxDbG9zYWJsZSIsImNsck1vZGFsU2l6ZSJdLFsxLCJtb2RhbC10aXRsZSJdLFsic2l6ZSIsIjIwIiwic2hhcGUiLCJs''@;'; put 'put ''b2NrIl0sWzEsIm1vZGFsLWJvZHkiXSxbImNsYXNzIiwiYXBwLWxvYWRpbmciLDQsIm5nSWYiXSxbImNsYXNzIiwiYWxlcnQgYWxlcnQtYXBwLWxldmVsIGFsZXJ0LXdhcm5pbmciLCJpZCIsImRlbW8tYmFubmVyIiwicm9sZSIsImFsZXJ0Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsImFsZXJ0IGFs''@;'; put 'put ''ZXJ0LWFwcC1sZXZlbCBhbGVydC1kYW5nZXIiLCJpZCIsImRlbW8tYmFubmVyIiwicm9sZSIsImFsZXJ0Iiw0LCJuZ0lmIl0sWyJpZCIsImRlbW8tYmFubmVyIiwicm9sZSIsImFsZXJ0IiwxLCJhbGVydCIsImFsZXJ0LWFwcC1sZXZlbCIsImFsZXJ0LXdhcm5pbmciXSxbMSwiYWxlcnQtaXRl''@;'; put 'put ''bXMiXSxbMSwiYWxlcnQtaXRlbSIsInN0YXRpYyJdLFsxLCJhbGVydC1pY29uLXdyYXBwZXIiXSxbInNoYXBlIiwid2FybmluZy1zdGFuZGFyZCIsMSwiYWxlcnQtaWNvbiJdLFsxLCJhbGVydC10ZXh0Il0sWyJjbGFzc2VzIiwiY29sb3Itd2hpdGUiXSxbInJvdXRlckxpbmsiLCIvbGljZW5z''@;'; put 'put ''aW5nL3VwZGF0ZSIsMSwidXBkYXRlLWtleSJdLFsxLCJ1cGRhdGUta2V5IiwiY3Vyc29yLXBvaW50ZXIiLDMsImNsaWNrIl0sWyJpZCIsImRlbW8tYmFubmVyIiwicm9sZSIsImFsZXJ0IiwxLCJhbGVydCIsImFsZXJ0LWFwcC1sZXZlbCIsImFsZXJ0LWRhbmdlciJdLFsicm91dGVyTGluayIs''@;'; put 'put ''Ii9saWNlbnNpbmcvdXBkYXRlIiwiY2xhc3MiLCJ1cGRhdGUta2V5Iiw0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJjdXJzb3ItcG9pbnRlciIsInNlbGVjdC1ub25lIiwibWwtMTAiLCJkLWZsZXgiLCJjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciIsImNsci1hbGlnbi1pdGVtcy1j''@;'; put 'put ''ZW50ZXIiLDMsImNsaWNrIl0sWyJzaXplIiwiMjQiLCJzaGFwZSIsInRyZWUtdmlldyJdLFsiaHJlZiIsIiMiLDEsIm5hdi1saW5rIiwzLCJyb3V0ZXJMaW5rIl0sWyJzcmMiLCIvU0FTU3RvcmVkUHJvY2Vzcy8/X1BST0dSQU09cFpLZDZGOTVqRUN2UlFsTjBMQ2ZkQT09L3dlYjkvaW1hZ2Vz''@;'; put 'put ''L2RjLWxvZ28tc3ZnIiwiYWx0IiwiZGF0YWNvbnRyb2xsZXIgbG9nbyB3aXRob3V0IHRleHQiLDEsIndpdGhvdXQtdGV4dCIsImQtYmxvY2siLCJkLW1kLW5vbmUiXSxbInNyYyIsIi9TQVNTdG9yZWRQcm9jZXNzLz9fUFJPR1JBTT1wWktkNkY5NWpFQ3ZSUWxOMExDZmRBPT0vd2ViOS9pbWFn''@;'; put 'put ''ZXMvZGF0YWNvbnRyb2xsZXItc3ZnIiwiYWx0IiwiZGF0YWNvbnRyb2xsZXIgbG9nbyIsMSwid2l0aC10ZXh0IiwiZC1ub25lIiwiZC1tZC1ibG9jayJdLFsxLCJjbHItaWNvbiIsImhlYWRlci1sb2dvIiwibWwtMTAiXSxbMSwiaGVhZGVyLW5hdiIsImQtZmxleCIsImQtc20tbm9uZSJdLFsi''@;'; put 'put ''Y2xyRHJvcGRvd25UcmlnZ2VyIiwiIiwiYXJpYS1sYWJlbCIsInRvZ2dsZSBzZXR0aW5ncyBtZW51IiwxLCJuYXYtaWNvbiIsImNvbG9yLXdoaXRlLWkiXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLWxlZnQiLDQsImNscklmT3BlbiJdLFsxLCJoZWFkZXItbmF2IiwiZC1ub25lIiwiZC1zbS1m''@;'; put 'put ''bGV4Il0sWyJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0aXZlIiwxLCJuYXYtbGluayIsIm5hdi10ZXh0IiwzLCJyb3V0ZXJMaW5rIl0sWzEsIm5hdi1saW5rIiwibmF2LXRleHQiLDMsInJvdXRlckxpbmsiXSxbMSwibmF2LWxpbmsiLCJuYXYtdGV4dCIsImN1cnNvci1wb2ludGVyIiwzLCJyb3V0''@;'; put 'put ''ZXJMaW5rIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1sZWZ0Il0sWyJjbHJEcm9wZG93bkl0ZW0iLCIiLDMsInJvdXRlckxpbmsiXSxbMSwic3VibmF2Il0sWzEsIm5hdiJdLFsxLCJuYXYtaXRlbSJdLFszLCJvbkNvbmZpcm1Nb2RhbENsaWNrIiwiZGF0YSIsImZvcmNlUmVsb2FkIl0sWzEs''@;'; put 'put ''ImFwcC1sb2FkaW5nIl0sWyJzcmMiLCIvU0FTU3RvcmVkUHJvY2Vzcy8/X1BST0dSQU09cFpLZDZGOTVqRUN2UlFsTjBMQ2ZkQT09L3dlYjkvaW1hZ2VzL2RhdGFjb250cm9sbGVyLXN2ZyIsImFsdCIsImRhdGFjb250cm9sbGVyIGxvZ28iLDEsImxvYWRpbmctbG9nbyJdLFsiY2xhc3MiLCJz''@;'; put 'put ''bGlkZXIiLDQsIm5nSWYiXSxbMSwic2xpZGVyIl0sWzEsImxpbmUiXSxbMSwic3VibGluZSIsImluYyJdLFsxLCJzdWJsaW5lIiwiZGVjIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYoZGUoMCwiZGl2IiwwKSxndCgxLE5ZZSw0LDMsIm5nLWNvbnRhaW5lciIsMSksZGUoMiwiaGVh''@;'; put 'put ''ZGVyIiwyKSxndCgzLFZZZSwyLDAsImRpdiIsMyksZGUoNCwiZGl2Iiw0KSxndCg1LEJZZSwzLDIsImEiLDUpKDYsalllLDIsMCwiYSIsMSksaGUoKSxndCg3LFVZZSwxMywxMCwibmctY29udGFpbmVyIiwxKSxHdCg4LCJhcHAtaGVhZGVyLWFjdGlvbnMiKSxoZSgpLGd0KDksWlllLDExLDgs''@;'; put 'put ''Im5hdiIsNikoMTAsV1llLDEsMCwiYXBwLWFsZXJ0cyIsMSksZGUoMTEsImFwcC1yZXF1ZXN0cy1tb2RhbCIsNyksZ2koIm9wZW5lZENoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIG1pKGgucmVxdWVzdHNNb2RhbCx2KXx8KGgucmVxdWVzdHNNb2RhbD12KSx2fSksaGUoKSxHdCgxMiwiYXBw''@;'; put 'put ''LWV4Y2VsLXBhc3N3b3JkLW1vZGFsIiksZ3QoMTMsWVllLDEsMCwicm91dGVyLW91dGxldCIsMSksR3QoMTQsImFwcC1sb2dpbiIpLGd0KDE1LEdZZSwxLDAsImFwcC1hbGVydHMiLDEpKDE2LCRZZSwxLDIsImFwcC1pbmZvLW1vZGFsIiw4KSxkZSgxNywiY2xyLW1vZGFsIiw5KSxnaSgiY2xy''@;'; put 'put ''TW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbih2KXtyZXR1cm4gbWkoaC5kZW1vTGltaXROb3RpY2Uub3Blbix2KXx8KGguZGVtb0xpbWl0Tm90aWNlLm9wZW49diksdn0pLGRlKDE4LCJoMyIsMTApLExlKDE5KSxHdCgyMCwiY2xyLWljb24iLDExKSxoZSgpLGRlKDIxLCJkaXYiLDEyKSxMZSgy''@;'; put 'put ''MiwiIENvbnRhY3QgIiksR3QoMjMsImNvbnRhY3QtbGluayIpLExlKDI0KSxoZSgpKCkoKSxndCgyNSxxWWUsMywxLCJkaXYiLDEzKSksMiZkJiYoZmUoKSxNZSgibmdJZiIsIWgucm91dGVyLnVybC5pbmNsdWRlcygibGljZW5zaW5nIikpLGZlKDIpLE1lKCJuZ0lmIixoLmlzTWFpblJvdXRl''@;'; put 'put ''KCJ2aWV3Iil8fGguaXNNYWluUm91dGUoImhvbWUiKSYmIWgucm91dGVyLnVybC5pbmNsdWRlcygibGljZW5zaW5nIikpLGZlKDIpLE1lKCJuZ0lmIiwhaC5yb3V0ZXIudXJsLmluY2x1ZGVzKCJkZXBsb3kiKSksZmUoKSxNZSgibmdJZiIsaC5yb3V0ZXIudXJsLmluY2x1ZGVzKCJkZXBsb3ki''@;'; put 'put ''KSksZmUoKSxNZSgibmdJZiIsIWgucm91dGVyLnVybC5pbmNsdWRlcygiZGVwbG95IikmJiFoLnJvdXRlci51cmwuaW5jbHVkZXMoImxpY2Vuc2luZyIpKSxmZSgyKSxNZSgibmdJZiIsaC5yb3V0ZXIudXJsLmluY2x1ZGVzKCJzdWJtaXR0ZWQiKXx8aC5yb3V0ZXIudXJsLmluY2x1ZGVzKCJh''@;'; put 'put ''cHByb3ZlIil8fGgucm91dGVyLnVybC5pbmNsdWRlcygiaGlzdG9yeSIpKSxmZSgpLE1lKCJuZ0lmIiwhaC5lcnJUb3ApLGZlKCkscGkoIm9wZW5lZCIsaC5yZXF1ZXN0c01vZGFsKSxmZSgyKSxNZSgibmdJZiIsaC5zdGFydHVwRGF0YUxvYWRlZCksZmUoMiksTWUoIm5nSWYiLGguZXJyVG9w''@;'; put 'put ''KSxmZSgpLE1lKCJuZ0Zvck9mIixoLnNhc2pzQWJvcnRzKSxmZSgpLHBpKCJjbHJNb2RhbE9wZW4iLGguZGVtb0xpbWl0Tm90aWNlLm9wZW4pLE1lKCJjbHJNb2RhbENsb3NhYmxlIiwhMCkoImNsck1vZGFsU2l6ZSIsImxnIiksZmUoMiksSXIoIiBMb2NrZWQgRmVhdHVyZSAoIixoLmRlbW9M''@;'; put 'put ''aW1pdE5vdGljZS5mZWF0dXJlTmFtZSwiKSAiKSxmZSg1KSxJcigiIHdpdGggeW91ciBzaXRlIGlkICgiLGguc3lzc2l0ZS52YWx1ZSwiKSB0byBhY3RpdmF0ZSEgIiksZmUoKSxNZSgibmdJZiIsIWguc3RhcnR1cERhdGFMb2FkZWQpKX0sZGVwZW5kZW5jaWVzOltucyxiYSxyZyxjMSxweSxN''@;'; put 'put ''V2UsVldlLHpXZSxwTyxXV2UsUXgsSGwscnMsb3UsS3UsTDIsc2csZzcsbTcsVnksdEUsYlllLFRZZV0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiB2aGUoYyl7cmV0dXJuIG5ldyBRbigzZTMsITEpfWZ1bmN0aW9uIERtKGMpe3N3aXRjaChjLmxlbmd0aCl7Y2Fz''@;'; put 'put ''ZSAwOnJldHVybiBuZXcgd3g7Y2FzZSAxOnJldHVybiBjWzBdO2RlZmF1bHQ6cmV0dXJuIG5ldyBSMGUoYyl9fWZ1bmN0aW9uIGJoZShjLGwsYT1uZXcgTWFwLGQ9bmV3IE1hcCl7Y29uc3QgaD1bXSxmPVtdO2xldCB2PS0xLE09bnVsbDtpZihsLmZvckVhY2goRD0+e2NvbnN0IFo9RC5nZXQo''@;'; put 'put ''Im9mZnNldCIpLHJlPVo9PXYsY2U9cmUmJk18fG5ldyBNYXA7RC5mb3JFYWNoKChiZSxFZSk9PntsZXQgQmU9RWUscWU9YmU7aWYoIm9mZnNldCIhPT1FZSlzd2l0Y2goQmU9Yy5ub3JtYWxpemVQcm9wZXJ0eU5hbWUoQmUsaCkscWUpe2Nhc2UiISI6cWU9YS5nZXQoRWUpO2JyZWFrO2Nhc2Ug''@;'; put 'put ''aWc6cWU9ZC5nZXQoRWUpO2JyZWFrO2RlZmF1bHQ6cWU9Yy5ub3JtYWxpemVTdHlsZVZhbHVlKEVlLEJlLHFlLGgpfWNlLnNldChCZSxxZSl9KSxyZXx8Zi5wdXNoKGNlKSxNPWNlLHY9Wn0pLGgubGVuZ3RoKXRocm93IGZ1bmN0aW9uIF9HZShjKXtyZXR1cm4gbmV3IFFuKDM1MDIsITEpfSgp''@;'; put 'put ''O3JldHVybiBmfWZ1bmN0aW9uIFRHKGMsbCxhLGQpe3N3aXRjaChsKXtjYXNlInN0YXJ0IjpjLm9uU3RhcnQoKCk9PmQoYSYmQUcoYSwic3RhcnQiLGMpKSk7YnJlYWs7Y2FzZSJkb25lIjpjLm9uRG9uZSgoKT0+ZChhJiZBRyhhLCJkb25lIixjKSkpO2JyZWFrO2Nhc2UiZGVzdHJveSI6Yy5v''@;'; put 'put ''bkRlc3Ryb3koKCk9PmQoYSYmQUcoYSwiZGVzdHJveSIsYykpKX19ZnVuY3Rpb24gQUcoYyxsLGEpe2NvbnN0IGY9a0coYy5lbGVtZW50LGMudHJpZ2dlck5hbWUsYy5mcm9tU3RhdGUsYy50b1N0YXRlLGx8fGMucGhhc2VOYW1lLGEudG90YWxUaW1lPz9jLnRvdGFsVGltZSwhIWEuZGlzYWJs''@;'; put 'put ''ZWQpLHY9Yy5fZGF0YTtyZXR1cm4gbnVsbCE9diYmKGYuX2RhdGE9diksZn1mdW5jdGlvbiBrRyhjLGwsYSxkLGg9IiIsZj0wLHYpe3JldHVybntlbGVtZW50OmMsdHJpZ2dlck5hbWU6bCxmcm9tU3RhdGU6YSx0b1N0YXRlOmQscGhhc2VOYW1lOmgsdG90YWxUaW1lOmYsZGlzYWJsZWQ6ISF2''@;'; put 'put ''fX1mdW5jdGlvbiBUaChjLGwsYSl7bGV0IGQ9Yy5nZXQobCk7cmV0dXJuIGR8fGMuc2V0KGwsZD1hKSxkfWZ1bmN0aW9uIHloZShjKXtjb25zdCBsPWMuaW5kZXhPZigiOiIpO3JldHVybltjLnN1YnN0cmluZygxLGwpLGMuc2xpY2UobCsxKV19Y29uc3QgUkdlPXR5cGVvZiBkb2N1bWVudD4i''@;'; put 'put ''dSI/bnVsbDpkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7ZnVuY3Rpb24gREcoYyl7Y29uc3QgbD1jLnBhcmVudE5vZGV8fGMuaG9zdHx8bnVsbDtyZXR1cm4gbD09PVJHZT9udWxsOmx9bGV0IFA3PW51bGwsX2hlPSExO2Z1bmN0aW9uIHdoZShjLGwpe2Zvcig7bDspe2lmKGw9PT1jKXJldHVy''@;'; put 'put ''biEwO2w9REcobCl9cmV0dXJuITF9ZnVuY3Rpb24gQ2hlKGMsbCxhKXtpZihhKXJldHVybiBBcnJheS5mcm9tKGMucXVlcnlTZWxlY3RvckFsbChsKSk7Y29uc3QgZD1jLnF1ZXJ5U2VsZWN0b3IobCk7cmV0dXJuIGQ/W2RdOltdfWxldCBJRz0oKCk9PntjbGFzcyBje3ZhbGlkYXRlU3R5bGVQ''@;'; put 'put ''cm9wZXJ0eShhKXtyZXR1cm4gZnVuY3Rpb24gT0dlKGMpe1A3fHwoUDc9ZnVuY3Rpb24gUEdlKCl7cmV0dXJuIHR5cGVvZiBkb2N1bWVudDwidSI/ZG9jdW1lbnQuYm9keTpudWxsfSgpfHx7fSxfaGU9ISFQNy5zdHlsZSYmIldlYmtpdEFwcGVhcmFuY2UiaW4gUDcuc3R5bGUpO2xldCBsPSEw''@;'; put 'put ''O3JldHVybiBQNy5zdHlsZSYmIWZ1bmN0aW9uIExHZShjKXtyZXR1cm4iZWJraXQiPT1jLnN1YnN0cmluZygxLDYpfShjKSYmKGw9YyBpbiBQNy5zdHlsZSwhbCYmX2hlJiYobD0iV2Via2l0IitjLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK2Muc2xpY2UoMSlpbiBQNy5zdHlsZSkpLGx9KGEp''@;'; put 'put ''fW1hdGNoZXNFbGVtZW50KGEsZCl7cmV0dXJuITF9Y29udGFpbnNFbGVtZW50KGEsZCl7cmV0dXJuIHdoZShhLGQpfWdldFBhcmVudEVsZW1lbnQoYSl7cmV0dXJuIERHKGEpfXF1ZXJ5KGEsZCxoKXtyZXR1cm4gQ2hlKGEsZCxoKX1jb21wdXRlU3R5bGUoYSxkLGgpe3JldHVybiBofHwiIn1h''@;'; put 'put ''bmltYXRlKGEsZCxoLGYsdixNPVtdLEQpe3JldHVybiBuZXcgd3goaCxmKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSl9fXJldHVybiBjfSko''@;'; put 'put ''KTtjbGFzcyBSR3tzdGF0aWN7dGhpcy5OT09QPW5ldyBJR319Y2xhc3MgTEd7fWNvbnN0IEhHZT0xZTMsT0c9Im5nLWVudGVyIixnTz0ibmctbGVhdmUiLG1PPSJuZy10cmlnZ2VyIix2Tz0iLm5nLXRyaWdnZXIiLE1oZT0ibmctYW5pbWF0aW5nIixQRz0iLm5nLWFuaW1hdGluZyI7ZnVuY3Rp''@;'; put 'put ''b24gcGcoYyl7aWYoIm51bWJlciI9PXR5cGVvZiBjKXJldHVybiBjO2NvbnN0IGw9Yy5tYXRjaCgvXigtP1tcLlxkXSspKG0/cykvKTtyZXR1cm4hbHx8bC5sZW5ndGg8Mj8wOkZHKHBhcnNlRmxvYXQobFsxXSksbFsyXSl9ZnVuY3Rpb24gRkcoYyxsKXtyZXR1cm4icyI9PT1sP2MqSEdlOmN9''@;'; put 'put ''ZnVuY3Rpb24gYk8oYyxsLGEpe3JldHVybiBjLmhhc093blByb3BlcnR5KCJkdXJhdGlvbiIpP2M6ZnVuY3Rpb24gVkdlKGMsbCxhKXtsZXQgaCxmPTAsdj0iIjtpZigic3RyaW5nIj09dHlwZW9mIGMpe2NvbnN0IE09Yy5tYXRjaCgvXigtP1tcLlxkXSspKG0/cykoPzpccysoLT9bXC5cZF0r''@;'; put 'put ''KShtP3MpKT8oPzpccysoWy1hLXpdKyg/OlwoLis/XCkpPykpPyQvaSk7aWYobnVsbD09PU0pcmV0dXJuIGwucHVzaCh2aGUoKSkse2R1cmF0aW9uOjAsZGVsYXk6MCxlYXNpbmc6IiJ9O2g9RkcocGFyc2VGbG9hdChNWzFdKSxNWzJdKTtjb25zdCBEPU1bM107bnVsbCE9RCYmKGY9RkcocGFy''@;'; put 'put ''c2VGbG9hdChEKSxNWzRdKSk7Y29uc3QgWj1NWzVdO1omJih2PVopfWVsc2UgaD1jO2lmKCFhKXtsZXQgTT0hMSxEPWwubGVuZ3RoO2g8MCYmKGwucHVzaChmdW5jdGlvbiBKWWUoKXtyZXR1cm4gbmV3IFFuKDMxMDAsITEpfSgpKSxNPSEwKSxmPDAmJihsLnB1c2goZnVuY3Rpb24gUVllKCl7''@;'; put 'put ''cmV0dXJuIG5ldyBRbigzMTAxLCExKX0oKSksTT0hMCksTSYmbC5zcGxpY2UoRCwwLHZoZSgpKX1yZXR1cm57ZHVyYXRpb246aCxkZWxheTpmLGVhc2luZzp2fX0oYyxsLGEpfWZ1bmN0aW9uIE1wKGMsbCxhKXtsLmZvckVhY2goKGQsaCk9Pntjb25zdCBmPU5HKGgpO2EmJiFhLmhhcyhoKSYm''@;'; put 'put ''YS5zZXQoaCxjLnN0eWxlW2ZdKSxjLnN0eWxlW2ZdPWR9KX1mdW5jdGlvbiBGNyhjLGwpe2wuZm9yRWFjaCgoYSxkKT0+e2NvbnN0IGg9TkcoZCk7Yy5zdHlsZVtoXT0iIn0pfWZ1bmN0aW9uIG5FKGMpe3JldHVybiBBcnJheS5pc0FycmF5KGMpPzE9PWMubGVuZ3RoP2NbMF06ZnVuY3Rpb24g''@;'; put 'put ''Y1BlKGMsbD1udWxsKXtyZXR1cm57dHlwZTpBby5TZXF1ZW5jZSxzdGVwczpjLG9wdGlvbnM6bH19KGMpOmN9Y29uc3QgSEc9bmV3IFJlZ0V4cCgie3tcXHMqKC4rPylcXHMqfX0iLCJnIik7ZnVuY3Rpb24gRWhlKGMpe2xldCBsPVtdO2lmKCJzdHJpbmciPT10eXBlb2YgYyl7bGV0IGE7Zm9y''@;'; put 'put ''KDthPUhHLmV4ZWMoYyk7KWwucHVzaChhWzFdKTtIRy5sYXN0SW5kZXg9MH1yZXR1cm4gbH1mdW5jdGlvbiByRShjLGwsYSl7Y29uc3QgZD1gJHtjfWAsaD1kLnJlcGxhY2UoSEcsKGYsdik9PntsZXQgTT1sW3ZdO3JldHVybiBudWxsPT1NJiYoYS5wdXNoKGZ1bmN0aW9uIHRHZShjKXtyZXR1''@;'; put 'put ''cm4gbmV3IFFuKDMwMDMsITEpfSgpKSxNPSIiKSxNLnRvU3RyaW5nKCl9KTtyZXR1cm4gaD09ZD9jOmh9Y29uc3QgekdlPS8tKyhbYS16MC05XSkvZztmdW5jdGlvbiBORyhjKXtyZXR1cm4gYy5yZXBsYWNlKHpHZSwoLi4ubCk9PmxbMV0udG9VcHBlckNhc2UoKSl9ZnVuY3Rpb24gQWgoYyxs''@;'; put 'put ''LGEpe3N3aXRjaChsLnR5cGUpe2Nhc2UgQW8uVHJpZ2dlcjpyZXR1cm4gYy52aXNpdFRyaWdnZXIobCxhKTtjYXNlIEFvLlN0YXRlOnJldHVybiBjLnZpc2l0U3RhdGUobCxhKTtjYXNlIEFvLlRyYW5zaXRpb246cmV0dXJuIGMudmlzaXRUcmFuc2l0aW9uKGwsYSk7Y2FzZSBBby5TZXF1ZW5j''@;'; put 'put ''ZTpyZXR1cm4gYy52aXNpdFNlcXVlbmNlKGwsYSk7Y2FzZSBBby5Hcm91cDpyZXR1cm4gYy52aXNpdEdyb3VwKGwsYSk7Y2FzZSBBby5BbmltYXRlOnJldHVybiBjLnZpc2l0QW5pbWF0ZShsLGEpO2Nhc2UgQW8uS2V5ZnJhbWVzOnJldHVybiBjLnZpc2l0S2V5ZnJhbWVzKGwsYSk7Y2FzZSBB''@;'; put 'put ''by5TdHlsZTpyZXR1cm4gYy52aXNpdFN0eWxlKGwsYSk7Y2FzZSBBby5SZWZlcmVuY2U6cmV0dXJuIGMudmlzaXRSZWZlcmVuY2UobCxhKTtjYXNlIEFvLkFuaW1hdGVDaGlsZDpyZXR1cm4gYy52aXNpdEFuaW1hdGVDaGlsZChsLGEpO2Nhc2UgQW8uQW5pbWF0ZVJlZjpyZXR1cm4gYy52aXNp''@;'; put 'put ''dEFuaW1hdGVSZWYobCxhKTtjYXNlIEFvLlF1ZXJ5OnJldHVybiBjLnZpc2l0UXVlcnkobCxhKTtjYXNlIEFvLlN0YWdnZXI6cmV0dXJuIGMudmlzaXRTdGFnZ2VyKGwsYSk7ZGVmYXVsdDp0aHJvdyBmdW5jdGlvbiBuR2UoYyl7cmV0dXJuIG5ldyBRbigzMDA0LCExKX0oKX19ZnVuY3Rpb24g''@;'; put 'put ''VkcoYyxsKXtyZXR1cm4gd2luZG93LmdldENvbXB1dGVkU3R5bGUoYylbbF19Y29uc3QgV0dlPW5ldyBTZXQoWyJ3aWR0aCIsImhlaWdodCIsIm1pbldpZHRoIiwibWluSGVpZ2h0IiwibWF4V2lkdGgiLCJtYXhIZWlnaHQiLCJsZWZ0IiwidG9wIiwiYm90dG9tIiwicmlnaHQiLCJmb250U2l6''@;'; put 'put ''ZSIsIm91dGxpbmVXaWR0aCIsIm91dGxpbmVPZmZzZXQiLCJwYWRkaW5nVG9wIiwicGFkZGluZ0xlZnQiLCJwYWRkaW5nQm90dG9tIiwicGFkZGluZ1JpZ2h0IiwibWFyZ2luVG9wIiwibWFyZ2luTGVmdCIsIm1hcmdpbkJvdHRvbSIsIm1hcmdpblJpZ2h0IiwiYm9yZGVyUmFkaXVzIiwiYm9y''@;'; put 'put ''ZGVyV2lkdGgiLCJib3JkZXJUb3BXaWR0aCIsImJvcmRlckxlZnRXaWR0aCIsImJvcmRlclJpZ2h0V2lkdGgiLCJib3JkZXJCb3R0b21XaWR0aCIsInRleHRJbmRlbnQiLCJwZXJzcGVjdGl2ZSJdKTtjbGFzcyBUaGUgZXh0ZW5kcyBMR3tub3JtYWxpemVQcm9wZXJ0eU5hbWUobCxhKXtyZXR1''@;'; put 'put ''cm4gTkcobCl9bm9ybWFsaXplU3R5bGVWYWx1ZShsLGEsZCxoKXtsZXQgZj0iIjtjb25zdCB2PWQudG9TdHJpbmcoKS50cmltKCk7aWYoV0dlLmhhcyhhKSYmMCE9PWQmJiIwIiE9PWQpaWYoIm51bWJlciI9PXR5cGVvZiBkKWY9InB4IjtlbHNle2NvbnN0IE09ZC5tYXRjaCgvXlsrLV0/W1xk''@;'; put 'put ''XC5dKyhbYS16XSopJC8pO00mJjA9PU1bMV0ubGVuZ3RoJiZoLnB1c2goZnVuY3Rpb24gckdlKGMsbCl7cmV0dXJuIG5ldyBRbigzMDA1LCExKX0oKSl9cmV0dXJuIHYrZn19Y29uc3QgeU89IioiO2NvbnN0IF9PPW5ldyBTZXQoWyJ0cnVlIiwiMSJdKSx3Tz1uZXcgU2V0KFsiZmFsc2UiLCIw''@;'; put 'put ''Il0pO2Z1bmN0aW9uIEFoZShjLGwpe2NvbnN0IGE9X08uaGFzKGMpfHx3Ty5oYXMoYyksZD1fTy5oYXMobCl8fHdPLmhhcyhsKTtyZXR1cm4oaCxmKT0+e2xldCB2PWM9PXlPfHxjPT1oLE09bD09eU98fGw9PWY7cmV0dXJuIXYmJmEmJiJib29sZWFuIj09dHlwZW9mIGgmJih2PWg/X08uaGFz''@;'; put 'put ''KGMpOndPLmhhcyhjKSksIU0mJmQmJiJib29sZWFuIj09dHlwZW9mIGYmJihNPWY/X08uaGFzKGwpOndPLmhhcyhsKSksdiYmTX19Y29uc3QgS0dlPW5ldyBSZWdFeHAoInMqOnNlbGZzKiw/IiwiZyIpO2Z1bmN0aW9uIEJHKGMsbCxhLGQpe3JldHVybiBuZXcgcUdlKGMpLmJ1aWxkKGwsYSxk''@;'; put 'put ''KX1jbGFzcyBxR2V7Y29uc3RydWN0b3IobCl7dGhpcy5fZHJpdmVyPWx9YnVpbGQobCxhLGQpe2NvbnN0IGg9bmV3IFFHZShhKTtyZXR1cm4gdGhpcy5fcmVzZXRDb250ZXh0U3R5bGVUaW1pbmdTdGF0ZShoKSxBaCh0aGlzLG5FKGwpLGgpfV9yZXNldENvbnRleHRTdHlsZVRpbWluZ1N0YXRl''@;'; put 'put ''KGwpe2wuY3VycmVudFF1ZXJ5U2VsZWN0b3I9IiIsbC5jb2xsZWN0ZWRTdHlsZXM9bmV3IE1hcCxsLmNvbGxlY3RlZFN0eWxlcy5zZXQoIiIsbmV3IE1hcCksbC5jdXJyZW50VGltZT0wfXZpc2l0VHJpZ2dlcihsLGEpe2xldCBkPWEucXVlcnlDb3VudD0wLGg9YS5kZXBDb3VudD0wO2NvbnN0''@;'; put 'put ''IGY9W10sdj1bXTtyZXR1cm4iQCI9PWwubmFtZS5jaGFyQXQoMCkmJmEuZXJyb3JzLnB1c2goZnVuY3Rpb24gaUdlKCl7cmV0dXJuIG5ldyBRbigzMDA2LCExKX0oKSksbC5kZWZpbml0aW9ucy5mb3JFYWNoKE09PntpZih0aGlzLl9yZXNldENvbnRleHRTdHlsZVRpbWluZ1N0YXRlKGEpLE0u''@;'; put 'put ''dHlwZT09QW8uU3RhdGUpe2NvbnN0IEQ9TSxaPUQubmFtZTtaLnRvU3RyaW5nKCkuc3BsaXQoL1xzKixccyovKS5mb3JFYWNoKHJlPT57RC5uYW1lPXJlLGYucHVzaCh0aGlzLnZpc2l0U3RhdGUoRCxhKSl9KSxELm5hbWU9Wn1lbHNlIGlmKE0udHlwZT09QW8uVHJhbnNpdGlvbil7Y29uc3Qg''@;'; put 'put ''RD10aGlzLnZpc2l0VHJhbnNpdGlvbihNLGEpO2QrPUQucXVlcnlDb3VudCxoKz1ELmRlcENvdW50LHYucHVzaChEKX1lbHNlIGEuZXJyb3JzLnB1c2goZnVuY3Rpb24gYUdlKCl7cmV0dXJuIG5ldyBRbigzMDA3LCExKX0oKSl9KSx7dHlwZTpBby5UcmlnZ2VyLG5hbWU6bC5uYW1lLHN0YXRl''@;'; put 'put ''czpmLHRyYW5zaXRpb25zOnYscXVlcnlDb3VudDpkLGRlcENvdW50Omgsb3B0aW9uczpudWxsfX12aXNpdFN0YXRlKGwsYSl7Y29uc3QgZD10aGlzLnZpc2l0U3R5bGUobC5zdHlsZXMsYSksaD1sLm9wdGlvbnMmJmwub3B0aW9ucy5wYXJhbXN8fG51bGw7aWYoZC5jb250YWluc0R5bmFtaWNT''@;'; put 'put ''dHlsZXMpe2NvbnN0IGY9bmV3IFNldCx2PWh8fHt9O2Quc3R5bGVzLmZvckVhY2goTT0+e00gaW5zdGFuY2VvZiBNYXAmJk0uZm9yRWFjaChEPT57RWhlKEQpLmZvckVhY2goWj0+e3YuaGFzT3duUHJvcGVydHkoWil8fGYuYWRkKFopfSl9KX0pLGYuc2l6ZSYmYS5lcnJvcnMucHVzaChmdW5j''@;'; put 'put ''dGlvbiBvR2UoYyxsKXtyZXR1cm4gbmV3IFFuKDMwMDgsITEpfSgwLGYudmFsdWVzKCkpKX1yZXR1cm57dHlwZTpBby5TdGF0ZSxuYW1lOmwubmFtZSxzdHlsZTpkLG9wdGlvbnM6aD97cGFyYW1zOmh9Om51bGx9fXZpc2l0VHJhbnNpdGlvbihsLGEpe2EucXVlcnlDb3VudD0wLGEuZGVwQ291''@;'; put 'put ''bnQ9MDtjb25zdCBkPUFoKHRoaXMsbkUobC5hbmltYXRpb24pLGEpLGg9ZnVuY3Rpb24gWUdlKGMsbCl7Y29uc3QgYT1bXTtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGM/Yy5zcGxpdCgvXHMqLFxzKi8pLmZvckVhY2goZD0+ZnVuY3Rpb24gR0dlKGMsbCxhKXtpZigiOiI9PWNbMF0pe2NvbnN0''@;'; put 'put ''IEQ9ZnVuY3Rpb24gJEdlKGMsbCl7c3dpdGNoKGMpe2Nhc2UiOmVudGVyIjpyZXR1cm4idm9pZCA9PiAqIjtjYXNlIjpsZWF2ZSI6cmV0dXJuIiogPT4gdm9pZCI7Y2FzZSI6aW5jcmVtZW50IjpyZXR1cm4oYSxkKT0+cGFyc2VGbG9hdChkKT5wYXJzZUZsb2F0KGEpO2Nhc2UiOmRlY3JlbWVu''@;'; put 'put ''dCI6cmV0dXJuKGEsZCk9PnBhcnNlRmxvYXQoZCk8cGFyc2VGbG9hdChhKTtkZWZhdWx0OnJldHVybiBsLnB1c2goZnVuY3Rpb24gbUdlKGMpe3JldHVybiBuZXcgUW4oMzAxNiwhMSl9KCkpLCIqID0+ICoifX0oYyxhKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgRClyZXR1cm4gdm9pZCBsLnB1''@;'; put 'put ''c2goRCk7Yz1EfWNvbnN0IGQ9Yy5tYXRjaCgvXihcKnxbLVx3XSspXHMqKDw/Wz0tXT4pXHMqKFwqfFstXHddKykkLyk7aWYobnVsbD09ZHx8ZC5sZW5ndGg8NClyZXR1cm4gYS5wdXNoKGZ1bmN0aW9uIGdHZShjKXtyZXR1cm4gbmV3IFFuKDMwMTUsITEpfSgpKSxsO2NvbnN0IGg9ZFsxXSxm''@;'; put 'put ''PWRbMl0sdj1kWzNdO2wucHVzaChBaGUoaCx2KSksIjwiPT1mWzBdJiYoaCE9eU98fHYhPXlPKSYmbC5wdXNoKEFoZSh2LGgpKX0oZCxhLGwpKTphLnB1c2goYyksYX0obC5leHByLGEuZXJyb3JzKTtyZXR1cm57dHlwZTpBby5UcmFuc2l0aW9uLG1hdGNoZXJzOmgsYW5pbWF0aW9uOmQscXVl''@;'; put 'put ''cnlDb3VudDphLnF1ZXJ5Q291bnQsZGVwQ291bnQ6YS5kZXBDb3VudCxvcHRpb25zOkg3KGwub3B0aW9ucyl9fXZpc2l0U2VxdWVuY2UobCxhKXtyZXR1cm57dHlwZTpBby5TZXF1ZW5jZSxzdGVwczpsLnN0ZXBzLm1hcChkPT5BaCh0aGlzLGQsYSkpLG9wdGlvbnM6SDcobC5vcHRpb25zKX19''@;'; put 'put ''dmlzaXRHcm91cChsLGEpe2NvbnN0IGQ9YS5jdXJyZW50VGltZTtsZXQgaD0wO2NvbnN0IGY9bC5zdGVwcy5tYXAodj0+e2EuY3VycmVudFRpbWU9ZDtjb25zdCBNPUFoKHRoaXMsdixhKTtyZXR1cm4gaD1NYXRoLm1heChoLGEuY3VycmVudFRpbWUpLE19KTtyZXR1cm4gYS5jdXJyZW50VGlt''@;'; put 'put ''ZT1oLHt0eXBlOkFvLkdyb3VwLHN0ZXBzOmYsb3B0aW9uczpINyhsLm9wdGlvbnMpfX12aXNpdEFuaW1hdGUobCxhKXtjb25zdCBkPWZ1bmN0aW9uIHQkZShjLGwpe2lmKGMuaGFzT3duUHJvcGVydHkoImR1cmF0aW9uIikpcmV0dXJuIGM7aWYoIm51bWJlciI9PXR5cGVvZiBjKXJldHVybiBq''@;'; put 'put ''RyhiTyhjLGwpLmR1cmF0aW9uLDAsIiIpO2NvbnN0IGE9YztpZihhLnNwbGl0KC9ccysvKS5zb21lKGY9PiJ7Ij09Zi5jaGFyQXQoMCkmJiJ7Ij09Zi5jaGFyQXQoMSkpKXtjb25zdCBmPWpHKDAsMCwiIik7cmV0dXJuIGYuZHluYW1pYz0hMCxmLnN0clZhbHVlPWEsZn1jb25zdCBoPWJPKGEs''@;'; put 'put ''bCk7cmV0dXJuIGpHKGguZHVyYXRpb24saC5kZWxheSxoLmVhc2luZyl9KGwudGltaW5ncyxhLmVycm9ycyk7YS5jdXJyZW50QW5pbWF0ZVRpbWluZ3M9ZDtsZXQgaCxmPWwuc3R5bGVzP2wuc3R5bGVzOnVzKHt9KTtpZihmLnR5cGU9PUFvLktleWZyYW1lcyloPXRoaXMudmlzaXRLZXlmcmFt''@;'; put 'put ''ZXMoZixhKTtlbHNle2xldCB2PWwuc3R5bGVzLE09ITE7aWYoIXYpe009ITA7Y29uc3QgWj17fTtkLmVhc2luZyYmKFouZWFzaW5nPWQuZWFzaW5nKSx2PXVzKFopfWEuY3VycmVudFRpbWUrPWQuZHVyYXRpb24rZC5kZWxheTtjb25zdCBEPXRoaXMudmlzaXRTdHlsZSh2LGEpO0QuaXNFbXB0''@;'; put 'put ''eVN0ZXA9TSxoPUR9cmV0dXJuIGEuY3VycmVudEFuaW1hdGVUaW1pbmdzPW51bGwse3R5cGU6QW8uQW5pbWF0ZSx0aW1pbmdzOmQsc3R5bGU6aCxvcHRpb25zOm51bGx9fXZpc2l0U3R5bGUobCxhKXtjb25zdCBkPXRoaXMuX21ha2VTdHlsZUFzdChsLGEpO3JldHVybiB0aGlzLl92YWxpZGF0''@;'; put 'put ''ZVN0eWxlQXN0KGQsYSksZH1fbWFrZVN0eWxlQXN0KGwsYSl7Y29uc3QgZD1bXSxoPUFycmF5LmlzQXJyYXkobC5zdHlsZXMpP2wuc3R5bGVzOltsLnN0eWxlc107Zm9yKGxldCBNIG9mIGgpInN0cmluZyI9PXR5cGVvZiBNP009PT1pZz9kLnB1c2goTSk6YS5lcnJvcnMucHVzaChuZXcgUW4o''@;'; put 'put ''MzAwMiwhMSkpOmQucHVzaChuZXcgTWFwKE9iamVjdC5lbnRyaWVzKE0pKSk7bGV0IGY9ITEsdj1udWxsO3JldHVybiBkLmZvckVhY2goTT0+e2lmKE0gaW5zdGFuY2VvZiBNYXAmJihNLmhhcygiZWFzaW5nIikmJih2PU0uZ2V0KCJlYXNpbmciKSxNLmRlbGV0ZSgiZWFzaW5nIikpLCFmKSlm''@;'; put 'put ''b3IobGV0IEQgb2YgTS52YWx1ZXMoKSlpZihELnRvU3RyaW5nKCkuaW5kZXhPZigie3siKT49MCl7Zj0hMDticmVha319KSx7dHlwZTpBby5TdHlsZSxzdHlsZXM6ZCxlYXNpbmc6dixvZmZzZXQ6bC5vZmZzZXQsY29udGFpbnNEeW5hbWljU3R5bGVzOmYsb3B0aW9uczpudWxsfX1fdmFsaWRh''@;'; put 'put ''dGVTdHlsZUFzdChsLGEpe2NvbnN0IGQ9YS5jdXJyZW50QW5pbWF0ZVRpbWluZ3M7bGV0IGg9YS5jdXJyZW50VGltZSxmPWEuY3VycmVudFRpbWU7ZCYmZj4wJiYoZi09ZC5kdXJhdGlvbitkLmRlbGF5KSxsLnN0eWxlcy5mb3JFYWNoKHY9Pnsic3RyaW5nIiE9dHlwZW9mIHYmJnYuZm9yRWFj''@;'; put 'put ''aCgoTSxEKT0+e2NvbnN0IFo9YS5jb2xsZWN0ZWRTdHlsZXMuZ2V0KGEuY3VycmVudFF1ZXJ5U2VsZWN0b3IpLHJlPVouZ2V0KEQpO2xldCBjZT0hMDtyZSYmKGYhPWgmJmY+PXJlLnN0YXJ0VGltZSYmaDw9cmUuZW5kVGltZSYmKGEuZXJyb3JzLnB1c2goZnVuY3Rpb24gbEdlKGMsbCxhLGQs''@;'; put 'put ''aCl7cmV0dXJuIG5ldyBRbigzMDEwLCExKX0oKSksY2U9ITEpLGY9cmUuc3RhcnRUaW1lKSxjZSYmWi5zZXQoRCx7c3RhcnRUaW1lOmYsZW5kVGltZTpofSksYS5vcHRpb25zJiZmdW5jdGlvbiBqR2UoYyxsLGEpe2NvbnN0IGQ9bC5wYXJhbXN8fHt9LGg9RWhlKGMpO2gubGVuZ3RoJiZoLmZv''@;'; put 'put ''ckVhY2goZj0+e2QuaGFzT3duUHJvcGVydHkoZil8fGEucHVzaChmdW5jdGlvbiBlR2UoYyl7cmV0dXJuIG5ldyBRbigzMDAxLCExKX0oKSl9KX0oTSxhLm9wdGlvbnMsYS5lcnJvcnMpfSl9KX12aXNpdEtleWZyYW1lcyhsLGEpe2NvbnN0IGQ9e3R5cGU6QW8uS2V5ZnJhbWVzLHN0eWxlczpb''@;'; put 'put ''XSxvcHRpb25zOm51bGx9O2lmKCFhLmN1cnJlbnRBbmltYXRlVGltaW5ncylyZXR1cm4gYS5lcnJvcnMucHVzaChmdW5jdGlvbiBjR2UoKXtyZXR1cm4gbmV3IFFuKDMwMTEsITEpfSgpKSxkO2xldCBmPTA7Y29uc3Qgdj1bXTtsZXQgTT0hMSxEPSExLFo9MDtjb25zdCByZT1sLnN0ZXBzLm1h''@;'; put 'put ''cChwdD0+e2NvbnN0IGR0PXRoaXMuX21ha2VTdHlsZUFzdChwdCxhKTtsZXQgSnQ9bnVsbCE9ZHQub2Zmc2V0P2R0Lm9mZnNldDpmdW5jdGlvbiBlJGUoYyl7aWYoInN0cmluZyI9PXR5cGVvZiBjKXJldHVybiBudWxsO2xldCBsPW51bGw7aWYoQXJyYXkuaXNBcnJheShjKSljLmZvckVhY2go''@;'; put 'put ''YT0+e2lmKGEgaW5zdGFuY2VvZiBNYXAmJmEuaGFzKCJvZmZzZXQiKSl7Y29uc3QgZD1hO2w9cGFyc2VGbG9hdChkLmdldCgib2Zmc2V0IikpLGQuZGVsZXRlKCJvZmZzZXQiKX19KTtlbHNlIGlmKGMgaW5zdGFuY2VvZiBNYXAmJmMuaGFzKCJvZmZzZXQiKSl7Y29uc3QgYT1jO2w9cGFyc2VG''@;'; put 'put ''bG9hdChhLmdldCgib2Zmc2V0IikpLGEuZGVsZXRlKCJvZmZzZXQiKX1yZXR1cm4gbH0oZHQuc3R5bGVzKSx2bj0wO3JldHVybiBudWxsIT1KdCYmKGYrKyx2bj1kdC5vZmZzZXQ9SnQpLEQ9RHx8dm48MHx8dm4+MSxNPU18fHZuPFosWj12bix2LnB1c2godm4pLGR0fSk7RCYmYS5lcnJvcnMu''@;'; put 'put ''cHVzaChmdW5jdGlvbiB1R2UoKXtyZXR1cm4gbmV3IFFuKDMwMTIsITEpfSgpKSxNJiZhLmVycm9ycy5wdXNoKGZ1bmN0aW9uIGRHZSgpe3JldHVybiBuZXcgUW4oMzIwMCwhMSl9KCkpO2NvbnN0IGNlPWwuc3RlcHMubGVuZ3RoO2xldCBiZT0wO2Y+MCYmZjxjZT9hLmVycm9ycy5wdXNoKGZ1''@;'; put 'put ''bmN0aW9uIGhHZSgpe3JldHVybiBuZXcgUW4oMzIwMiwhMSl9KCkpOjA9PWYmJihiZT0xLyhjZS0xKSk7Y29uc3QgRWU9Y2UtMSxCZT1hLmN1cnJlbnRUaW1lLHFlPWEuY3VycmVudEFuaW1hdGVUaW1pbmdzLHJ0PXFlLmR1cmF0aW9uO3JldHVybiByZS5mb3JFYWNoKChwdCxkdCk9Pntjb25z''@;'; put 'put ''dCBKdD1iZT4wP2R0PT1FZT8xOmJlKmR0OnZbZHRdLHZuPUp0KnJ0O2EuY3VycmVudFRpbWU9QmUrcWUuZGVsYXkrdm4scWUuZHVyYXRpb249dm4sdGhpcy5fdmFsaWRhdGVTdHlsZUFzdChwdCxhKSxwdC5vZmZzZXQ9SnQsZC5zdHlsZXMucHVzaChwdCl9KSxkfXZpc2l0UmVmZXJlbmNlKGws''@;'; put 'put ''YSl7cmV0dXJue3R5cGU6QW8uUmVmZXJlbmNlLGFuaW1hdGlvbjpBaCh0aGlzLG5FKGwuYW5pbWF0aW9uKSxhKSxvcHRpb25zOkg3KGwub3B0aW9ucyl9fXZpc2l0QW5pbWF0ZUNoaWxkKGwsYSl7cmV0dXJuIGEuZGVwQ291bnQrKyx7dHlwZTpBby5BbmltYXRlQ2hpbGQsb3B0aW9uczpINyhs''@;'; put 'put ''Lm9wdGlvbnMpfX12aXNpdEFuaW1hdGVSZWYobCxhKXtyZXR1cm57dHlwZTpBby5BbmltYXRlUmVmLGFuaW1hdGlvbjp0aGlzLnZpc2l0UmVmZXJlbmNlKGwuYW5pbWF0aW9uLGEpLG9wdGlvbnM6SDcobC5vcHRpb25zKX19dmlzaXRRdWVyeShsLGEpe2NvbnN0IGQ9YS5jdXJyZW50UXVlcnlT''@;'; put 'put ''ZWxlY3RvcixoPWwub3B0aW9uc3x8e307YS5xdWVyeUNvdW50KyssYS5jdXJyZW50UXVlcnk9bDtjb25zdFtmLHZdPWZ1bmN0aW9uIFhHZShjKXtjb25zdCBsPSEhYy5zcGxpdCgvXHMqLFxzKi8pLmZpbmQoYT0+IjpzZWxmIj09YSk7cmV0dXJuIGwmJihjPWMucmVwbGFjZShLR2UsIiIpKSxj''@;'; put 'put ''PWMucmVwbGFjZSgvQFwqL2csdk8pLnJlcGxhY2UoL0BcdysvZyxhPT52TysiLSIrYS5zbGljZSgxKSkucmVwbGFjZSgvOmFuaW1hdGluZy9nLFBHKSxbYyxsXX0obC5zZWxlY3Rvcik7YS5jdXJyZW50UXVlcnlTZWxlY3Rvcj1kLmxlbmd0aD9kKyIgIitmOmYsVGgoYS5jb2xsZWN0ZWRTdHls''@;'; put 'put ''ZXMsYS5jdXJyZW50UXVlcnlTZWxlY3RvcixuZXcgTWFwKTtjb25zdCBNPUFoKHRoaXMsbkUobC5hbmltYXRpb24pLGEpO3JldHVybiBhLmN1cnJlbnRRdWVyeT1udWxsLGEuY3VycmVudFF1ZXJ5U2VsZWN0b3I9ZCx7dHlwZTpBby5RdWVyeSxzZWxlY3RvcjpmLGxpbWl0OmgubGltaXR8fDAs''@;'; put 'put ''b3B0aW9uYWw6ISFoLm9wdGlvbmFsLGluY2x1ZGVTZWxmOnYsYW5pbWF0aW9uOk0sb3JpZ2luYWxTZWxlY3RvcjpsLnNlbGVjdG9yLG9wdGlvbnM6SDcobC5vcHRpb25zKX19dmlzaXRTdGFnZ2VyKGwsYSl7YS5jdXJyZW50UXVlcnl8fGEuZXJyb3JzLnB1c2goZnVuY3Rpb24gZkdlKCl7cmV0''@;'; put 'put ''dXJuIG5ldyBRbigzMDEzLCExKX0oKSk7Y29uc3QgZD0iZnVsbCI9PT1sLnRpbWluZ3M/e2R1cmF0aW9uOjAsZGVsYXk6MCxlYXNpbmc6ImZ1bGwifTpiTyhsLnRpbWluZ3MsYS5lcnJvcnMsITApO3JldHVybnt0eXBlOkFvLlN0YWdnZXIsYW5pbWF0aW9uOkFoKHRoaXMsbkUobC5hbmltYXRp''@;'; put 'put ''b24pLGEpLHRpbWluZ3M6ZCxvcHRpb25zOm51bGx9fX1jbGFzcyBRR2V7Y29uc3RydWN0b3IobCl7dGhpcy5lcnJvcnM9bCx0aGlzLnF1ZXJ5Q291bnQ9MCx0aGlzLmRlcENvdW50PTAsdGhpcy5jdXJyZW50VHJhbnNpdGlvbj1udWxsLHRoaXMuY3VycmVudFF1ZXJ5PW51bGwsdGhpcy5jdXJy''@;'; put 'put ''ZW50UXVlcnlTZWxlY3Rvcj1udWxsLHRoaXMuY3VycmVudEFuaW1hdGVUaW1pbmdzPW51bGwsdGhpcy5jdXJyZW50VGltZT0wLHRoaXMuY29sbGVjdGVkU3R5bGVzPW5ldyBNYXAsdGhpcy5vcHRpb25zPW51bGwsdGhpcy51bnN1cHBvcnRlZENTU1Byb3BlcnRpZXNGb3VuZD1uZXcgU2V0fX1m''@;'; put 'put ''dW5jdGlvbiBINyhjKXtyZXR1cm4gYz8oYz17Li4uY30pLnBhcmFtcyYmKGMucGFyYW1zPWZ1bmN0aW9uIEpHZShjKXtyZXR1cm4gYz97Li4uY306bnVsbH0oYy5wYXJhbXMpKTpjPXt9LGN9ZnVuY3Rpb24gakcoYyxsLGEpe3JldHVybntkdXJhdGlvbjpjLGRlbGF5OmwsZWFzaW5nOmF9fWZ1''@;'; put 'put ''bmN0aW9uIHpHKGMsbCxhLGQsaCxmLHY9bnVsbCxNPSExKXtyZXR1cm57dHlwZToxLGVsZW1lbnQ6YyxrZXlmcmFtZXM6bCxwcmVTdHlsZVByb3BzOmEscG9zdFN0eWxlUHJvcHM6ZCxkdXJhdGlvbjpoLGRlbGF5OmYsdG90YWxUaW1lOmgrZixlYXNpbmc6dixzdWJUaW1lbGluZTpNfX1jbGFz''@;'; put 'put ''cyBDT3tjb25zdHJ1Y3Rvcigpe3RoaXMuX21hcD1uZXcgTWFwfWdldChsKXtyZXR1cm4gdGhpcy5fbWFwLmdldChsKXx8W119YXBwZW5kKGwsYSl7bGV0IGQ9dGhpcy5fbWFwLmdldChsKTtkfHx0aGlzLl9tYXAuc2V0KGwsZD1bXSksZC5wdXNoKC4uLmEpfWhhcyhsKXtyZXR1cm4gdGhpcy5f''@;'; put 'put ''bWFwLmhhcyhsKX1jbGVhcigpe3RoaXMuX21hcC5jbGVhcigpfX1jb25zdCBpJGU9bmV3IFJlZ0V4cCgiOmVudGVyIiwiZyIpLG8kZT1uZXcgUmVnRXhwKCI6bGVhdmUiLCJnIik7ZnVuY3Rpb24gVUcoYyxsLGEsZCxoLGY9bmV3IE1hcCx2PW5ldyBNYXAsTSxELFo9W10pe3JldHVybihuZXcg''@;'; put 'put ''cyRlKS5idWlsZEtleWZyYW1lcyhjLGwsYSxkLGgsZix2LE0sRCxaKX1jbGFzcyBzJGV7YnVpbGRLZXlmcmFtZXMobCxhLGQsaCxmLHYsTSxELFoscmU9W10pe1o9Wnx8bmV3IENPO2NvbnN0IGNlPW5ldyBaRyhsLGEsWixoLGYscmUsW10pO2NlLm9wdGlvbnM9RDtjb25zdCBiZT1ELmRlbGF5''@;'; put 'put ''P3BnKEQuZGVsYXkpOjA7Y2UuY3VycmVudFRpbWVsaW5lLmRlbGF5TmV4dFN0ZXAoYmUpLGNlLmN1cnJlbnRUaW1lbGluZS5zZXRTdHlsZXMoW3ZdLG51bGwsY2UuZXJyb3JzLEQpLEFoKHRoaXMsZCxjZSk7Y29uc3QgRWU9Y2UudGltZWxpbmVzLmZpbHRlcihCZT0+QmUuY29udGFpbnNBbmlt''@;'; put 'put ''YXRpb24oKSk7aWYoRWUubGVuZ3RoJiZNLnNpemUpe2xldCBCZTtmb3IobGV0IHFlPUVlLmxlbmd0aC0xO3FlPj0wO3FlLS0pe2NvbnN0IHJ0PUVlW3FlXTtpZihydC5lbGVtZW50PT09YSl7QmU9cnQ7YnJlYWt9fUJlJiYhQmUuYWxsb3dPbmx5VGltZWxpbmVTdHlsZXMoKSYmQmUuc2V0U3R5''@;'; put 'put ''bGVzKFtNXSxudWxsLGNlLmVycm9ycyxEKX1yZXR1cm4gRWUubGVuZ3RoP0VlLm1hcChCZT0+QmUuYnVpbGRLZXlmcmFtZXMoKSk6W3pHKGEsW10sW10sW10sMCxiZSwiIiwhMSldfXZpc2l0VHJpZ2dlcihsLGEpe312aXNpdFN0YXRlKGwsYSl7fXZpc2l0VHJhbnNpdGlvbihsLGEpe312aXNp''@;'; put 'put ''dEFuaW1hdGVDaGlsZChsLGEpe2NvbnN0IGQ9YS5zdWJJbnN0cnVjdGlvbnMuZ2V0KGEuZWxlbWVudCk7aWYoZCl7Y29uc3QgaD1hLmNyZWF0ZVN1YkNvbnRleHQobC5vcHRpb25zKSxmPWEuY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lLHY9dGhpcy5fdmlzaXRTdWJJbnN0cnVjdGlvbnMo''@;'; put 'put ''ZCxoLGgub3B0aW9ucyk7ZiE9diYmYS50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUodil9YS5wcmV2aW91c05vZGU9bH12aXNpdEFuaW1hdGVSZWYobCxhKXtjb25zdCBkPWEuY3JlYXRlU3ViQ29udGV4dChsLm9wdGlvbnMpO2QudHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKCksdGhpcy5fYXBw''@;'; put 'put ''bHlBbmltYXRpb25SZWZEZWxheXMoW2wub3B0aW9ucyxsLmFuaW1hdGlvbi5vcHRpb25zXSxhLGQpLHRoaXMudmlzaXRSZWZlcmVuY2UobC5hbmltYXRpb24sZCksYS50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUoZC5jdXJyZW50VGltZWxpbmUuY3VycmVudFRpbWUpLGEucHJldmlvdXNOb2Rl''@;'; put 'put ''PWx9X2FwcGx5QW5pbWF0aW9uUmVmRGVsYXlzKGwsYSxkKXtmb3IoY29uc3QgaCBvZiBsKXtjb25zdCBmPWg/LmRlbGF5O2lmKGYpe2NvbnN0IHY9Im51bWJlciI9PXR5cGVvZiBmP2Y6cGcockUoZixoPy5wYXJhbXM/P3t9LGEuZXJyb3JzKSk7ZC5kZWxheU5leHRTdGVwKHYpfX19X3Zpc2l0''@;'; put 'put ''U3ViSW5zdHJ1Y3Rpb25zKGwsYSxkKXtsZXQgZj1hLmN1cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZTtjb25zdCB2PW51bGwhPWQuZHVyYXRpb24/cGcoZC5kdXJhdGlvbik6bnVsbCxNPW51bGwhPWQuZGVsYXk/cGcoZC5kZWxheSk6bnVsbDtyZXR1cm4gMCE9PXYmJmwuZm9yRWFjaChEPT57''@;'; put 'put ''Y29uc3QgWj1hLmFwcGVuZEluc3RydWN0aW9uVG9UaW1lbGluZShELHYsTSk7Zj1NYXRoLm1heChmLFouZHVyYXRpb24rWi5kZWxheSl9KSxmfXZpc2l0UmVmZXJlbmNlKGwsYSl7YS51cGRhdGVPcHRpb25zKGwub3B0aW9ucywhMCksQWgodGhpcyxsLmFuaW1hdGlvbixhKSxhLnByZXZpb3Vz''@;'; put 'put ''Tm9kZT1sfXZpc2l0U2VxdWVuY2UobCxhKXtjb25zdCBkPWEuc3ViQ29udGV4dENvdW50O2xldCBoPWE7Y29uc3QgZj1sLm9wdGlvbnM7aWYoZiYmKGYucGFyYW1zfHxmLmRlbGF5KSYmKGg9YS5jcmVhdGVTdWJDb250ZXh0KGYpLGgudHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKCksbnVsbCE9''@;'; put 'put ''Zi5kZWxheSkpe2gucHJldmlvdXNOb2RlLnR5cGU9PUFvLlN0eWxlJiYoaC5jdXJyZW50VGltZWxpbmUuc25hcHNob3RDdXJyZW50U3R5bGVzKCksaC5wcmV2aW91c05vZGU9U08pO2NvbnN0IHY9cGcoZi5kZWxheSk7aC5kZWxheU5leHRTdGVwKHYpfWwuc3RlcHMubGVuZ3RoJiYobC5zdGVw''@;'; put 'put ''cy5mb3JFYWNoKHY9PkFoKHRoaXMsdixoKSksaC5jdXJyZW50VGltZWxpbmUuYXBwbHlTdHlsZXNUb0tleWZyYW1lKCksaC5zdWJDb250ZXh0Q291bnQ+ZCYmaC50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUoKSksYS5wcmV2aW91c05vZGU9bH12aXNpdEdyb3VwKGwsYSl7Y29uc3QgZD1bXTts''@;'; put 'put ''ZXQgaD1hLmN1cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZTtjb25zdCBmPWwub3B0aW9ucyYmbC5vcHRpb25zLmRlbGF5P3BnKGwub3B0aW9ucy5kZWxheSk6MDtsLnN0ZXBzLmZvckVhY2godj0+e2NvbnN0IE09YS5jcmVhdGVTdWJDb250ZXh0KGwub3B0aW9ucyk7ZiYmTS5kZWxheU5leHRT''@;'; put 'put ''dGVwKGYpLEFoKHRoaXMsdixNKSxoPU1hdGgubWF4KGgsTS5jdXJyZW50VGltZWxpbmUuY3VycmVudFRpbWUpLGQucHVzaChNLmN1cnJlbnRUaW1lbGluZSl9KSxkLmZvckVhY2godj0+YS5jdXJyZW50VGltZWxpbmUubWVyZ2VUaW1lbGluZUNvbGxlY3RlZFN0eWxlcyh2KSksYS50cmFuc2Zv''@;'; put 'put ''cm1JbnRvTmV3VGltZWxpbmUoaCksYS5wcmV2aW91c05vZGU9bH1fdmlzaXRUaW1pbmcobCxhKXtpZihsLmR5bmFtaWMpe2NvbnN0IGQ9bC5zdHJWYWx1ZTtyZXR1cm4gYk8oYS5wYXJhbXM/ckUoZCxhLnBhcmFtcyxhLmVycm9ycyk6ZCxhLmVycm9ycyl9cmV0dXJue2R1cmF0aW9uOmwuZHVy''@;'; put 'put ''YXRpb24sZGVsYXk6bC5kZWxheSxlYXNpbmc6bC5lYXNpbmd9fXZpc2l0QW5pbWF0ZShsLGEpe2NvbnN0IGQ9YS5jdXJyZW50QW5pbWF0ZVRpbWluZ3M9dGhpcy5fdmlzaXRUaW1pbmcobC50aW1pbmdzLGEpLGg9YS5jdXJyZW50VGltZWxpbmU7ZC5kZWxheSYmKGEuaW5jcmVtZW50VGltZShk''@;'; put 'put ''LmRlbGF5KSxoLnNuYXBzaG90Q3VycmVudFN0eWxlcygpKTtjb25zdCBmPWwuc3R5bGU7Zi50eXBlPT1Bby5LZXlmcmFtZXM/dGhpcy52aXNpdEtleWZyYW1lcyhmLGEpOihhLmluY3JlbWVudFRpbWUoZC5kdXJhdGlvbiksdGhpcy52aXNpdFN0eWxlKGYsYSksaC5hcHBseVN0eWxlc1RvS2V5''@;'; put 'put ''ZnJhbWUoKSksYS5jdXJyZW50QW5pbWF0ZVRpbWluZ3M9bnVsbCxhLnByZXZpb3VzTm9kZT1sfXZpc2l0U3R5bGUobCxhKXtjb25zdCBkPWEuY3VycmVudFRpbWVsaW5lLGg9YS5jdXJyZW50QW5pbWF0ZVRpbWluZ3M7IWgmJmQuaGFzQ3VycmVudFN0eWxlUHJvcGVydGllcygpJiZkLmZvcndh''@;'; put 'put ''cmRGcmFtZSgpO2NvbnN0IGY9aCYmaC5lYXNpbmd8fGwuZWFzaW5nO2wuaXNFbXB0eVN0ZXA/ZC5hcHBseUVtcHR5U3RlcChmKTpkLnNldFN0eWxlcyhsLnN0eWxlcyxmLGEuZXJyb3JzLGEub3B0aW9ucyksYS5wcmV2aW91c05vZGU9bH12aXNpdEtleWZyYW1lcyhsLGEpe2NvbnN0IGQ9YS5j''@;'; put 'put ''dXJyZW50QW5pbWF0ZVRpbWluZ3MsaD1hLmN1cnJlbnRUaW1lbGluZS5kdXJhdGlvbixmPWQuZHVyYXRpb24sTT1hLmNyZWF0ZVN1YkNvbnRleHQoKS5jdXJyZW50VGltZWxpbmU7TS5lYXNpbmc9ZC5lYXNpbmcsbC5zdHlsZXMuZm9yRWFjaChEPT57TS5mb3J3YXJkVGltZSgoRC5vZmZzZXR8''@;'; put 'put ''fDApKmYpLE0uc2V0U3R5bGVzKEQuc3R5bGVzLEQuZWFzaW5nLGEuZXJyb3JzLGEub3B0aW9ucyksTS5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKX0pLGEuY3VycmVudFRpbWVsaW5lLm1lcmdlVGltZWxpbmVDb2xsZWN0ZWRTdHlsZXMoTSksYS50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUoaCtm''@;'; put 'put ''KSxhLnByZXZpb3VzTm9kZT1sfXZpc2l0UXVlcnkobCxhKXtjb25zdCBkPWEuY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lLGg9bC5vcHRpb25zfHx7fSxmPWguZGVsYXk/cGcoaC5kZWxheSk6MDtmJiYoYS5wcmV2aW91c05vZGUudHlwZT09PUFvLlN0eWxlfHwwPT1kJiZhLmN1cnJlbnRU''@;'; put 'put ''aW1lbGluZS5oYXNDdXJyZW50U3R5bGVQcm9wZXJ0aWVzKCkpJiYoYS5jdXJyZW50VGltZWxpbmUuc25hcHNob3RDdXJyZW50U3R5bGVzKCksYS5wcmV2aW91c05vZGU9U08pO2xldCB2PWQ7Y29uc3QgTT1hLmludm9rZVF1ZXJ5KGwuc2VsZWN0b3IsbC5vcmlnaW5hbFNlbGVjdG9yLGwubGlt''@;'; put 'put ''aXQsbC5pbmNsdWRlU2VsZiwhIWgub3B0aW9uYWwsYS5lcnJvcnMpO2EuY3VycmVudFF1ZXJ5VG90YWw9TS5sZW5ndGg7bGV0IEQ9bnVsbDtNLmZvckVhY2goKFoscmUpPT57YS5jdXJyZW50UXVlcnlJbmRleD1yZTtjb25zdCBjZT1hLmNyZWF0ZVN1YkNvbnRleHQobC5vcHRpb25zLFopO2Ym''@;'; put 'put ''JmNlLmRlbGF5TmV4dFN0ZXAoZiksWj09PWEuZWxlbWVudCYmKEQ9Y2UuY3VycmVudFRpbWVsaW5lKSxBaCh0aGlzLGwuYW5pbWF0aW9uLGNlKSxjZS5jdXJyZW50VGltZWxpbmUuYXBwbHlTdHlsZXNUb0tleWZyYW1lKCksdj1NYXRoLm1heCh2LGNlLmN1cnJlbnRUaW1lbGluZS5jdXJyZW50''@;'; put 'put ''VGltZSl9KSxhLmN1cnJlbnRRdWVyeUluZGV4PTAsYS5jdXJyZW50UXVlcnlUb3RhbD0wLGEudHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKHYpLEQmJihhLmN1cnJlbnRUaW1lbGluZS5tZXJnZVRpbWVsaW5lQ29sbGVjdGVkU3R5bGVzKEQpLGEuY3VycmVudFRpbWVsaW5lLnNuYXBzaG90Q3Vy''@;'; put 'put ''cmVudFN0eWxlcygpKSxhLnByZXZpb3VzTm9kZT1sfXZpc2l0U3RhZ2dlcihsLGEpe2NvbnN0IGQ9YS5wYXJlbnRDb250ZXh0LGg9YS5jdXJyZW50VGltZWxpbmUsZj1sLnRpbWluZ3Msdj1NYXRoLmFicyhmLmR1cmF0aW9uKSxNPXYqKGEuY3VycmVudFF1ZXJ5VG90YWwtMSk7bGV0IEQ9diph''@;'; put 'put ''LmN1cnJlbnRRdWVyeUluZGV4O3N3aXRjaChmLmR1cmF0aW9uPDA/InJldmVyc2UiOmYuZWFzaW5nKXtjYXNlInJldmVyc2UiOkQ9TS1EO2JyZWFrO2Nhc2UiZnVsbCI6RD1kLmN1cnJlbnRTdGFnZ2VyVGltZX1jb25zdCByZT1hLmN1cnJlbnRUaW1lbGluZTtEJiZyZS5kZWxheU5leHRTdGVw''@;'; put 'put ''KEQpO2NvbnN0IGNlPXJlLmN1cnJlbnRUaW1lO0FoKHRoaXMsbC5hbmltYXRpb24sYSksYS5wcmV2aW91c05vZGU9bCxkLmN1cnJlbnRTdGFnZ2VyVGltZT1oLmN1cnJlbnRUaW1lLWNlKyhoLnN0YXJ0VGltZS1kLmN1cnJlbnRUaW1lbGluZS5zdGFydFRpbWUpfX1jb25zdCBTTz17fTtjbGFz''@;'; put 'put ''cyBaR3tjb25zdHJ1Y3RvcihsLGEsZCxoLGYsdixNLEQpe3RoaXMuX2RyaXZlcj1sLHRoaXMuZWxlbWVudD1hLHRoaXMuc3ViSW5zdHJ1Y3Rpb25zPWQsdGhpcy5fZW50ZXJDbGFzc05hbWU9aCx0aGlzLl9sZWF2ZUNsYXNzTmFtZT1mLHRoaXMuZXJyb3JzPXYsdGhpcy50aW1lbGluZXM9TSx0''@;'; put 'put ''aGlzLnBhcmVudENvbnRleHQ9bnVsbCx0aGlzLmN1cnJlbnRBbmltYXRlVGltaW5ncz1udWxsLHRoaXMucHJldmlvdXNOb2RlPVNPLHRoaXMuc3ViQ29udGV4dENvdW50PTAsdGhpcy5vcHRpb25zPXt9LHRoaXMuY3VycmVudFF1ZXJ5SW5kZXg9MCx0aGlzLmN1cnJlbnRRdWVyeVRvdGFsPTAs''@;'; put 'put ''dGhpcy5jdXJyZW50U3RhZ2dlclRpbWU9MCx0aGlzLmN1cnJlbnRUaW1lbGluZT1EfHxuZXcgTU8odGhpcy5fZHJpdmVyLGEsMCksTS5wdXNoKHRoaXMuY3VycmVudFRpbWVsaW5lKX1nZXQgcGFyYW1zKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5wYXJhbXN9dXBkYXRlT3B0aW9ucyhsLGEpe2lm''@;'; put 'put ''KCFsKXJldHVybjtjb25zdCBkPWw7bGV0IGg9dGhpcy5vcHRpb25zO251bGwhPWQuZHVyYXRpb24mJihoLmR1cmF0aW9uPXBnKGQuZHVyYXRpb24pKSxudWxsIT1kLmRlbGF5JiYoaC5kZWxheT1wZyhkLmRlbGF5KSk7Y29uc3QgZj1kLnBhcmFtcztpZihmKXtsZXQgdj1oLnBhcmFtczt2fHwo''@;'; put 'put ''dj10aGlzLm9wdGlvbnMucGFyYW1zPXt9KSxPYmplY3Qua2V5cyhmKS5mb3JFYWNoKE09PnsoIWF8fCF2Lmhhc093blByb3BlcnR5KE0pKSYmKHZbTV09ckUoZltNXSx2LHRoaXMuZXJyb3JzKSl9KX19X2NvcHlPcHRpb25zKCl7Y29uc3QgbD17fTtpZih0aGlzLm9wdGlvbnMpe2NvbnN0IGE9''@;'; put 'put ''dGhpcy5vcHRpb25zLnBhcmFtcztpZihhKXtjb25zdCBkPWwucGFyYW1zPXt9O09iamVjdC5rZXlzKGEpLmZvckVhY2goaD0+e2RbaF09YVtoXX0pfX1yZXR1cm4gbH1jcmVhdGVTdWJDb250ZXh0KGw9bnVsbCxhLGQpe2NvbnN0IGg9YXx8dGhpcy5lbGVtZW50LGY9bmV3IFpHKHRoaXMuX2Ry''@;'; put 'put ''aXZlcixoLHRoaXMuc3ViSW5zdHJ1Y3Rpb25zLHRoaXMuX2VudGVyQ2xhc3NOYW1lLHRoaXMuX2xlYXZlQ2xhc3NOYW1lLHRoaXMuZXJyb3JzLHRoaXMudGltZWxpbmVzLHRoaXMuY3VycmVudFRpbWVsaW5lLmZvcmsoaCxkfHwwKSk7cmV0dXJuIGYucHJldmlvdXNOb2RlPXRoaXMucHJldmlv''@;'; put 'put ''dXNOb2RlLGYuY3VycmVudEFuaW1hdGVUaW1pbmdzPXRoaXMuY3VycmVudEFuaW1hdGVUaW1pbmdzLGYub3B0aW9ucz10aGlzLl9jb3B5T3B0aW9ucygpLGYudXBkYXRlT3B0aW9ucyhsKSxmLmN1cnJlbnRRdWVyeUluZGV4PXRoaXMuY3VycmVudFF1ZXJ5SW5kZXgsZi5jdXJyZW50UXVlcnlU''@;'; put 'put ''b3RhbD10aGlzLmN1cnJlbnRRdWVyeVRvdGFsLGYucGFyZW50Q29udGV4dD10aGlzLHRoaXMuc3ViQ29udGV4dENvdW50KyssZn10cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUobCl7cmV0dXJuIHRoaXMucHJldmlvdXNOb2RlPVNPLHRoaXMuY3VycmVudFRpbWVsaW5lPXRoaXMuY3VycmVudFRp''@;'; put 'put ''bWVsaW5lLmZvcmsodGhpcy5lbGVtZW50LGwpLHRoaXMudGltZWxpbmVzLnB1c2godGhpcy5jdXJyZW50VGltZWxpbmUpLHRoaXMuY3VycmVudFRpbWVsaW5lfWFwcGVuZEluc3RydWN0aW9uVG9UaW1lbGluZShsLGEsZCl7Y29uc3QgaD17ZHVyYXRpb246YT8/bC5kdXJhdGlvbixkZWxheTp0''@;'; put 'put ''aGlzLmN1cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZSsoZD8/MCkrbC5kZWxheSxlYXNpbmc6IiJ9LGY9bmV3IGwkZSh0aGlzLl9kcml2ZXIsbC5lbGVtZW50LGwua2V5ZnJhbWVzLGwucHJlU3R5bGVQcm9wcyxsLnBvc3RTdHlsZVByb3BzLGgsbC5zdHJldGNoU3RhcnRpbmdLZXlmcmFtZSk7''@;'; put 'put ''cmV0dXJuIHRoaXMudGltZWxpbmVzLnB1c2goZiksaH1pbmNyZW1lbnRUaW1lKGwpe3RoaXMuY3VycmVudFRpbWVsaW5lLmZvcndhcmRUaW1lKHRoaXMuY3VycmVudFRpbWVsaW5lLmR1cmF0aW9uK2wpfWRlbGF5TmV4dFN0ZXAobCl7bD4wJiZ0aGlzLmN1cnJlbnRUaW1lbGluZS5kZWxheU5l''@;'; put 'put ''eHRTdGVwKGwpfWludm9rZVF1ZXJ5KGwsYSxkLGgsZix2KXtsZXQgTT1bXTtpZihoJiZNLnB1c2godGhpcy5lbGVtZW50KSxsLmxlbmd0aD4wKXtsPShsPWwucmVwbGFjZShpJGUsIi4iK3RoaXMuX2VudGVyQ2xhc3NOYW1lKSkucmVwbGFjZShvJGUsIi4iK3RoaXMuX2xlYXZlQ2xhc3NOYW1l''@;'; put 'put ''KTtsZXQgWj10aGlzLl9kcml2ZXIucXVlcnkodGhpcy5lbGVtZW50LGwsMSE9ZCk7MCE9PWQmJihaPWQ8MD9aLnNsaWNlKFoubGVuZ3RoK2QsWi5sZW5ndGgpOlouc2xpY2UoMCxkKSksTS5wdXNoKC4uLlopfXJldHVybiFmJiYwPT1NLmxlbmd0aCYmdi5wdXNoKGZ1bmN0aW9uIHBHZShjKXty''@;'; put 'put ''ZXR1cm4gbmV3IFFuKDMwMTQsITEpfSgpKSxNfX1jbGFzcyBNT3tjb25zdHJ1Y3RvcihsLGEsZCxoKXt0aGlzLl9kcml2ZXI9bCx0aGlzLmVsZW1lbnQ9YSx0aGlzLnN0YXJ0VGltZT1kLHRoaXMuX2VsZW1lbnRUaW1lbGluZVN0eWxlc0xvb2t1cD1oLHRoaXMuZHVyYXRpb249MCx0aGlzLmVh''@;'; put 'put ''c2luZz1udWxsLHRoaXMuX3ByZXZpb3VzS2V5ZnJhbWU9bmV3IE1hcCx0aGlzLl9jdXJyZW50S2V5ZnJhbWU9bmV3IE1hcCx0aGlzLl9rZXlmcmFtZXM9bmV3IE1hcCx0aGlzLl9zdHlsZVN1bW1hcnk9bmV3IE1hcCx0aGlzLl9sb2NhbFRpbWVsaW5lU3R5bGVzPW5ldyBNYXAsdGhpcy5fcGVu''@;'; put 'put ''ZGluZ1N0eWxlcz1uZXcgTWFwLHRoaXMuX2JhY2tGaWxsPW5ldyBNYXAsdGhpcy5fY3VycmVudEVtcHR5U3RlcEtleWZyYW1lPW51bGwsdGhpcy5fZWxlbWVudFRpbWVsaW5lU3R5bGVzTG9va3VwfHwodGhpcy5fZWxlbWVudFRpbWVsaW5lU3R5bGVzTG9va3VwPW5ldyBNYXApLHRoaXMuX2ds''@;'; put 'put ''b2JhbFRpbWVsaW5lU3R5bGVzPXRoaXMuX2VsZW1lbnRUaW1lbGluZVN0eWxlc0xvb2t1cC5nZXQoYSksdGhpcy5fZ2xvYmFsVGltZWxpbmVTdHlsZXN8fCh0aGlzLl9nbG9iYWxUaW1lbGluZVN0eWxlcz10aGlzLl9sb2NhbFRpbWVsaW5lU3R5bGVzLHRoaXMuX2VsZW1lbnRUaW1lbGluZVN0''@;'; put 'put ''eWxlc0xvb2t1cC5zZXQoYSx0aGlzLl9sb2NhbFRpbWVsaW5lU3R5bGVzKSksdGhpcy5fbG9hZEtleWZyYW1lKCl9Y29udGFpbnNBbmltYXRpb24oKXtzd2l0Y2godGhpcy5fa2V5ZnJhbWVzLnNpemUpe2Nhc2UgMDpyZXR1cm4hMTtjYXNlIDE6cmV0dXJuIHRoaXMuaGFzQ3VycmVudFN0eWxl''@;'; put 'put ''UHJvcGVydGllcygpO2RlZmF1bHQ6cmV0dXJuITB9fWhhc0N1cnJlbnRTdHlsZVByb3BlcnRpZXMoKXtyZXR1cm4gdGhpcy5fY3VycmVudEtleWZyYW1lLnNpemU+MH1nZXQgY3VycmVudFRpbWUoKXtyZXR1cm4gdGhpcy5zdGFydFRpbWUrdGhpcy5kdXJhdGlvbn1kZWxheU5leHRTdGVwKGwp''@;'; put 'put ''e2NvbnN0IGE9MT09PXRoaXMuX2tleWZyYW1lcy5zaXplJiZ0aGlzLl9wZW5kaW5nU3R5bGVzLnNpemU7dGhpcy5kdXJhdGlvbnx8YT8odGhpcy5mb3J3YXJkVGltZSh0aGlzLmN1cnJlbnRUaW1lK2wpLGEmJnRoaXMuc25hcHNob3RDdXJyZW50U3R5bGVzKCkpOnRoaXMuc3RhcnRUaW1lKz1s''@;'; put 'put ''fWZvcmsobCxhKXtyZXR1cm4gdGhpcy5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKSxuZXcgTU8odGhpcy5fZHJpdmVyLGwsYXx8dGhpcy5jdXJyZW50VGltZSx0aGlzLl9lbGVtZW50VGltZWxpbmVTdHlsZXNMb29rdXApfV9sb2FkS2V5ZnJhbWUoKXt0aGlzLl9jdXJyZW50S2V5ZnJhbWUmJih0''@;'; put 'put ''aGlzLl9wcmV2aW91c0tleWZyYW1lPXRoaXMuX2N1cnJlbnRLZXlmcmFtZSksdGhpcy5fY3VycmVudEtleWZyYW1lPXRoaXMuX2tleWZyYW1lcy5nZXQodGhpcy5kdXJhdGlvbiksdGhpcy5fY3VycmVudEtleWZyYW1lfHwodGhpcy5fY3VycmVudEtleWZyYW1lPW5ldyBNYXAsdGhpcy5fa2V5''@;'; put 'put ''ZnJhbWVzLnNldCh0aGlzLmR1cmF0aW9uLHRoaXMuX2N1cnJlbnRLZXlmcmFtZSkpfWZvcndhcmRGcmFtZSgpe3RoaXMuZHVyYXRpb24rPTEsdGhpcy5fbG9hZEtleWZyYW1lKCl9Zm9yd2FyZFRpbWUobCl7dGhpcy5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKSx0aGlzLmR1cmF0aW9uPWwsdGhp''@;'; put 'put ''cy5fbG9hZEtleWZyYW1lKCl9X3VwZGF0ZVN0eWxlKGwsYSl7dGhpcy5fbG9jYWxUaW1lbGluZVN0eWxlcy5zZXQobCxhKSx0aGlzLl9nbG9iYWxUaW1lbGluZVN0eWxlcy5zZXQobCxhKSx0aGlzLl9zdHlsZVN1bW1hcnkuc2V0KGwse3RpbWU6dGhpcy5jdXJyZW50VGltZSx2YWx1ZTphfSl9''@;'; put 'put ''YWxsb3dPbmx5VGltZWxpbmVTdHlsZXMoKXtyZXR1cm4gdGhpcy5fY3VycmVudEVtcHR5U3RlcEtleWZyYW1lIT09dGhpcy5fY3VycmVudEtleWZyYW1lfWFwcGx5RW1wdHlTdGVwKGwpe2wmJnRoaXMuX3ByZXZpb3VzS2V5ZnJhbWUuc2V0KCJlYXNpbmciLGwpO2ZvcihsZXRbYSxkXW9mIHRo''@;'; put 'put ''aXMuX2dsb2JhbFRpbWVsaW5lU3R5bGVzKXRoaXMuX2JhY2tGaWxsLnNldChhLGR8fGlnKSx0aGlzLl9jdXJyZW50S2V5ZnJhbWUuc2V0KGEsaWcpO3RoaXMuX2N1cnJlbnRFbXB0eVN0ZXBLZXlmcmFtZT10aGlzLl9jdXJyZW50S2V5ZnJhbWV9c2V0U3R5bGVzKGwsYSxkLGgpe2EmJnRoaXMu''@;'; put 'put ''X3ByZXZpb3VzS2V5ZnJhbWUuc2V0KCJlYXNpbmciLGEpO2NvbnN0IGY9aCYmaC5wYXJhbXN8fHt9LHY9ZnVuY3Rpb24gYyRlKGMsbCl7Y29uc3QgYT1uZXcgTWFwO2xldCBkO3JldHVybiBjLmZvckVhY2goaD0+e2lmKCIqIj09PWgpe2Q/Pz1sLmtleXMoKTtmb3IobGV0IGYgb2YgZClhLnNl''@;'; put 'put ''dChmLGlnKX1lbHNlIGZvcihsZXRbZix2XW9mIGgpYS5zZXQoZix2KX0pLGF9KGwsdGhpcy5fZ2xvYmFsVGltZWxpbmVTdHlsZXMpO2ZvcihsZXRbTSxEXW9mIHYpe2NvbnN0IFo9ckUoRCxmLGQpO3RoaXMuX3BlbmRpbmdTdHlsZXMuc2V0KE0sWiksdGhpcy5fbG9jYWxUaW1lbGluZVN0eWxl''@;'; put 'put ''cy5oYXMoTSl8fHRoaXMuX2JhY2tGaWxsLnNldChNLHRoaXMuX2dsb2JhbFRpbWVsaW5lU3R5bGVzLmdldChNKT8/aWcpLHRoaXMuX3VwZGF0ZVN0eWxlKE0sWil9fWFwcGx5U3R5bGVzVG9LZXlmcmFtZSgpezAhPXRoaXMuX3BlbmRpbmdTdHlsZXMuc2l6ZSYmKHRoaXMuX3BlbmRpbmdTdHls''@;'; put 'put ''ZXMuZm9yRWFjaCgobCxhKT0+e3RoaXMuX2N1cnJlbnRLZXlmcmFtZS5zZXQoYSxsKX0pLHRoaXMuX3BlbmRpbmdTdHlsZXMuY2xlYXIoKSx0aGlzLl9sb2NhbFRpbWVsaW5lU3R5bGVzLmZvckVhY2goKGwsYSk9Pnt0aGlzLl9jdXJyZW50S2V5ZnJhbWUuaGFzKGEpfHx0aGlzLl9jdXJyZW50''@;'; put 'put ''S2V5ZnJhbWUuc2V0KGEsbCl9KSl9c25hcHNob3RDdXJyZW50U3R5bGVzKCl7Zm9yKGxldFtsLGFdb2YgdGhpcy5fbG9jYWxUaW1lbGluZVN0eWxlcyl0aGlzLl9wZW5kaW5nU3R5bGVzLnNldChsLGEpLHRoaXMuX3VwZGF0ZVN0eWxlKGwsYSl9Z2V0RmluYWxLZXlmcmFtZSgpe3JldHVybiB0''@;'; put 'put ''aGlzLl9rZXlmcmFtZXMuZ2V0KHRoaXMuZHVyYXRpb24pfWdldCBwcm9wZXJ0aWVzKCl7Y29uc3QgbD1bXTtmb3IobGV0IGEgaW4gdGhpcy5fY3VycmVudEtleWZyYW1lKWwucHVzaChhKTtyZXR1cm4gbH1tZXJnZVRpbWVsaW5lQ29sbGVjdGVkU3R5bGVzKGwpe2wuX3N0eWxlU3VtbWFyeS5m''@;'; put 'put ''b3JFYWNoKChhLGQpPT57Y29uc3QgaD10aGlzLl9zdHlsZVN1bW1hcnkuZ2V0KGQpOyghaHx8YS50aW1lPmgudGltZSkmJnRoaXMuX3VwZGF0ZVN0eWxlKGQsYS52YWx1ZSl9KX1idWlsZEtleWZyYW1lcygpe3RoaXMuYXBwbHlTdHlsZXNUb0tleWZyYW1lKCk7Y29uc3QgbD1uZXcgU2V0LGE9''@;'; put 'put ''bmV3IFNldCxkPTE9PT10aGlzLl9rZXlmcmFtZXMuc2l6ZSYmMD09PXRoaXMuZHVyYXRpb247bGV0IGg9W107dGhpcy5fa2V5ZnJhbWVzLmZvckVhY2goKE0sRCk9Pntjb25zdCBaPW5ldyBNYXAoWy4uLnRoaXMuX2JhY2tGaWxsLC4uLk1dKTtaLmZvckVhY2goKHJlLGNlKT0+eyIhIj09PXJl''@;'; put 'put ''P2wuYWRkKGNlKTpyZT09PWlnJiZhLmFkZChjZSl9KSxkfHxaLnNldCgib2Zmc2V0IixEL3RoaXMuZHVyYXRpb24pLGgucHVzaChaKX0pO2NvbnN0IGY9Wy4uLmwudmFsdWVzKCldLHY9Wy4uLmEudmFsdWVzKCldO2lmKGQpe2NvbnN0IE09aFswXSxEPW5ldyBNYXAoTSk7TS5zZXQoIm9mZnNl''@;'; put 'put ''dCIsMCksRC5zZXQoIm9mZnNldCIsMSksaD1bTSxEXX1yZXR1cm4gekcodGhpcy5lbGVtZW50LGgsZix2LHRoaXMuZHVyYXRpb24sdGhpcy5zdGFydFRpbWUsdGhpcy5lYXNpbmcsITEpfX1jbGFzcyBsJGUgZXh0ZW5kcyBNT3tjb25zdHJ1Y3RvcihsLGEsZCxoLGYsdixNPSExKXtzdXBlcihs''@;'; put 'put ''LGEsdi5kZWxheSksdGhpcy5rZXlmcmFtZXM9ZCx0aGlzLnByZVN0eWxlUHJvcHM9aCx0aGlzLnBvc3RTdHlsZVByb3BzPWYsdGhpcy5fc3RyZXRjaFN0YXJ0aW5nS2V5ZnJhbWU9TSx0aGlzLnRpbWluZ3M9e2R1cmF0aW9uOnYuZHVyYXRpb24sZGVsYXk6di5kZWxheSxlYXNpbmc6di5lYXNp''@;'; put 'put ''bmd9fWNvbnRhaW5zQW5pbWF0aW9uKCl7cmV0dXJuIHRoaXMua2V5ZnJhbWVzLmxlbmd0aD4xfWJ1aWxkS2V5ZnJhbWVzKCl7bGV0IGw9dGhpcy5rZXlmcmFtZXMse2RlbGF5OmEsZHVyYXRpb246ZCxlYXNpbmc6aH09dGhpcy50aW1pbmdzO2lmKHRoaXMuX3N0cmV0Y2hTdGFydGluZ0tleWZy''@;'; put 'put ''YW1lJiZhKXtjb25zdCBmPVtdLHY9ZCthLE09YS92LEQ9bmV3IE1hcChsWzBdKTtELnNldCgib2Zmc2V0IiwwKSxmLnB1c2goRCk7Y29uc3QgWj1uZXcgTWFwKGxbMF0pO1ouc2V0KCJvZmZzZXQiLEloZShNKSksZi5wdXNoKFopO2NvbnN0IHJlPWwubGVuZ3RoLTE7Zm9yKGxldCBjZT0xO2Nl''@;'; put 'put ''PD1yZTtjZSsrKXtsZXQgYmU9bmV3IE1hcChsW2NlXSk7Y29uc3QgRWU9YmUuZ2V0KCJvZmZzZXQiKTtiZS5zZXQoIm9mZnNldCIsSWhlKChhK0VlKmQpL3YpKSxmLnB1c2goYmUpfWQ9dixhPTAsaD0iIixsPWZ9cmV0dXJuIHpHKHRoaXMuZWxlbWVudCxsLHRoaXMucHJlU3R5bGVQcm9wcyx0''@;'; put 'put ''aGlzLnBvc3RTdHlsZVByb3BzLGQsYSxoLCEwKX19ZnVuY3Rpb24gSWhlKGMsbD0zKXtjb25zdCBhPU1hdGgucG93KDEwLGwtMSk7cmV0dXJuIE1hdGgucm91bmQoYyphKS9hfWZ1bmN0aW9uIFJoZShjLGwsYSxkLGgsZix2LE0sRCxaLHJlLGNlLGJlKXtyZXR1cm57dHlwZTowLGVsZW1lbnQ6''@;'; put 'put ''Yyx0cmlnZ2VyTmFtZTpsLGlzUmVtb3ZhbFRyYW5zaXRpb246aCxmcm9tU3RhdGU6YSxmcm9tU3R5bGVzOmYsdG9TdGF0ZTpkLHRvU3R5bGVzOnYsdGltZWxpbmVzOk0scXVlcmllZEVsZW1lbnRzOkQscHJlU3R5bGVQcm9wczpaLHBvc3RTdHlsZVByb3BzOnJlLHRvdGFsVGltZTpjZSxlcnJv''@;'; put 'put ''cnM6YmV9fWNvbnN0IFdHPXt9O2NsYXNzIExoZXtjb25zdHJ1Y3RvcihsLGEsZCl7dGhpcy5fdHJpZ2dlck5hbWU9bCx0aGlzLmFzdD1hLHRoaXMuX3N0YXRlU3R5bGVzPWR9bWF0Y2gobCxhLGQsaCl7cmV0dXJuIGZ1bmN0aW9uIHUkZShjLGwsYSxkLGgpe3JldHVybiBjLnNvbWUoZj0+Zihs''@;'; put 'put ''LGEsZCxoKSl9KHRoaXMuYXN0Lm1hdGNoZXJzLGwsYSxkLGgpfWJ1aWxkU3R5bGVzKGwsYSxkKXtsZXQgaD10aGlzLl9zdGF0ZVN0eWxlcy5nZXQoIioiKTtyZXR1cm4gdm9pZCAwIT09bCYmKGg9dGhpcy5fc3RhdGVTdHlsZXMuZ2V0KGw/LnRvU3RyaW5nKCkpfHxoKSxoP2guYnVpbGRTdHls''@;'; put 'put ''ZXMoYSxkKTpuZXcgTWFwfWJ1aWxkKGwsYSxkLGgsZix2LE0sRCxaLHJlKXtjb25zdCBjZT1bXSxiZT10aGlzLmFzdC5vcHRpb25zJiZ0aGlzLmFzdC5vcHRpb25zLnBhcmFtc3x8V0csQmU9dGhpcy5idWlsZFN0eWxlcyhkLE0mJk0ucGFyYW1zfHxXRyxjZSkscWU9RCYmRC5wYXJhbXN8fFdH''@;'; put 'put ''LHJ0PXRoaXMuYnVpbGRTdHlsZXMoaCxxZSxjZSkscHQ9bmV3IFNldCxkdD1uZXcgTWFwLEp0PW5ldyBNYXAsdm49InZvaWQiPT09aCxDbj17cGFyYW1zOk9oZShxZSxiZSksZGVsYXk6dGhpcy5hc3Qub3B0aW9ucz8uZGVsYXl9LHRuPXJlP1tdOlVHKGwsYSx0aGlzLmFzdC5hbmltYXRpb24s''@;'; put 'put ''Zix2LEJlLHJ0LENuLFosY2UpO2xldCBNbj0wO3JldHVybiB0bi5mb3JFYWNoKENyPT57TW49TWF0aC5tYXgoQ3IuZHVyYXRpb24rQ3IuZGVsYXksTW4pfSksY2UubGVuZ3RoP1JoZShhLHRoaXMuX3RyaWdnZXJOYW1lLGQsaCx2bixCZSxydCxbXSxbXSxkdCxKdCxNbixjZSk6KHRuLmZvckVh''@;'; put 'put ''Y2goQ3I9Pntjb25zdCBHcj1Dci5lbGVtZW50LG1yPVRoKGR0LEdyLG5ldyBTZXQpO0NyLnByZVN0eWxlUHJvcHMuZm9yRWFjaChhaT0+bXIuYWRkKGFpKSk7Y29uc3QgR249VGgoSnQsR3IsbmV3IFNldCk7Q3IucG9zdFN0eWxlUHJvcHMuZm9yRWFjaChhaT0+R24uYWRkKGFpKSksR3IhPT1h''@;'; put 'put ''JiZwdC5hZGQoR3IpfSksUmhlKGEsdGhpcy5fdHJpZ2dlck5hbWUsZCxoLHZuLEJlLHJ0LHRuLFsuLi5wdC52YWx1ZXMoKV0sZHQsSnQsTW4pKX19ZnVuY3Rpb24gT2hlKGMsbCl7Y29uc3QgYT17Li4ubH07cmV0dXJuIE9iamVjdC5lbnRyaWVzKGMpLmZvckVhY2goKFtkLGhdKT0+e251bGwh''@;'; put 'put ''PWgmJihhW2RdPWgpfSksYX1jbGFzcyBkJGV7Y29uc3RydWN0b3IobCxhLGQpe3RoaXMuc3R5bGVzPWwsdGhpcy5kZWZhdWx0UGFyYW1zPWEsdGhpcy5ub3JtYWxpemVyPWR9YnVpbGRTdHlsZXMobCxhKXtjb25zdCBkPW5ldyBNYXAsaD1PaGUobCx0aGlzLmRlZmF1bHRQYXJhbXMpO3JldHVy''@;'; put 'put ''biB0aGlzLnN0eWxlcy5zdHlsZXMuZm9yRWFjaChmPT57InN0cmluZyIhPXR5cGVvZiBmJiZmLmZvckVhY2goKHYsTSk9Pnt2JiYodj1yRSh2LGgsYSkpO2NvbnN0IEQ9dGhpcy5ub3JtYWxpemVyLm5vcm1hbGl6ZVByb3BlcnR5TmFtZShNLGEpO3Y9dGhpcy5ub3JtYWxpemVyLm5vcm1hbGl6''@;'; put 'put ''ZVN0eWxlVmFsdWUoTSxELHYsYSksZC5zZXQoTSx2KX0pfSksZH19Y2xhc3MgZiRle2NvbnN0cnVjdG9yKGwsYSxkKXt0aGlzLm5hbWU9bCx0aGlzLmFzdD1hLHRoaXMuX25vcm1hbGl6ZXI9ZCx0aGlzLnRyYW5zaXRpb25GYWN0b3JpZXM9W10sdGhpcy5zdGF0ZXM9bmV3IE1hcCxhLnN0YXRl''@;'; put 'put ''cy5mb3JFYWNoKGg9Pnt0aGlzLnN0YXRlcy5zZXQoaC5uYW1lLG5ldyBkJGUoaC5zdHlsZSxoLm9wdGlvbnMmJmgub3B0aW9ucy5wYXJhbXN8fHt9LGQpKX0pLFBoZSh0aGlzLnN0YXRlcywidHJ1ZSIsIjEiKSxQaGUodGhpcy5zdGF0ZXMsImZhbHNlIiwiMCIpLGEudHJhbnNpdGlvbnMuZm9y''@;'; put 'put ''RWFjaChoPT57dGhpcy50cmFuc2l0aW9uRmFjdG9yaWVzLnB1c2gobmV3IExoZShsLGgsdGhpcy5zdGF0ZXMpKX0pLHRoaXMuZmFsbGJhY2tUcmFuc2l0aW9uPWZ1bmN0aW9uIHAkZShjLGwsYSl7cmV0dXJuIG5ldyBMaGUoYyx7dHlwZTpBby5UcmFuc2l0aW9uLGFuaW1hdGlvbjp7dHlwZTpB''@;'; put 'put ''by5TZXF1ZW5jZSxzdGVwczpbXSxvcHRpb25zOm51bGx9LG1hdGNoZXJzOlsodixNKT0+ITBdLG9wdGlvbnM6bnVsbCxxdWVyeUNvdW50OjAsZGVwQ291bnQ6MH0sbCl9KGwsdGhpcy5zdGF0ZXMpfWdldCBjb250YWluc1F1ZXJpZXMoKXtyZXR1cm4gdGhpcy5hc3QucXVlcnlDb3VudD4wfW1h''@;'; put 'put ''dGNoVHJhbnNpdGlvbihsLGEsZCxoKXtyZXR1cm4gdGhpcy50cmFuc2l0aW9uRmFjdG9yaWVzLmZpbmQodj0+di5tYXRjaChsLGEsZCxoKSl8fG51bGx9bWF0Y2hTdHlsZXMobCxhLGQpe3JldHVybiB0aGlzLmZhbGxiYWNrVHJhbnNpdGlvbi5idWlsZFN0eWxlcyhsLGEsZCl9fWZ1bmN0aW9u''@;'; put 'put ''IFBoZShjLGwsYSl7Yy5oYXMobCk/Yy5oYXMoYSl8fGMuc2V0KGEsYy5nZXQobCkpOmMuaGFzKGEpJiZjLnNldChsLGMuZ2V0KGEpKX1jb25zdCBnJGU9bmV3IENPO2NsYXNzIG0kZXtjb25zdHJ1Y3RvcihsLGEsZCl7dGhpcy5ib2R5Tm9kZT1sLHRoaXMuX2RyaXZlcj1hLHRoaXMuX25vcm1h''@;'; put 'put ''bGl6ZXI9ZCx0aGlzLl9hbmltYXRpb25zPW5ldyBNYXAsdGhpcy5fcGxheWVyc0J5SWQ9bmV3IE1hcCx0aGlzLnBsYXllcnM9W119cmVnaXN0ZXIobCxhKXtjb25zdCBkPVtdLGY9QkcodGhpcy5fZHJpdmVyLGEsZCxbXSk7aWYoZC5sZW5ndGgpdGhyb3cgZnVuY3Rpb24gd0dlKGMpe3JldHVy''@;'; put 'put ''biBuZXcgUW4oMzUwMywhMSl9KCk7dGhpcy5fYW5pbWF0aW9ucy5zZXQobCxmKX1fYnVpbGRQbGF5ZXIobCxhLGQpe2NvbnN0IGg9bC5lbGVtZW50LGY9YmhlKHRoaXMuX25vcm1hbGl6ZXIsbC5rZXlmcmFtZXMsYSxkKTtyZXR1cm4gdGhpcy5fZHJpdmVyLmFuaW1hdGUoaCxmLGwuZHVyYXRp''@;'; put 'put ''b24sbC5kZWxheSxsLmVhc2luZyxbXSwhMCl9Y3JlYXRlKGwsYSxkPXt9KXtjb25zdCBoPVtdLGY9dGhpcy5fYW5pbWF0aW9ucy5nZXQobCk7bGV0IHY7Y29uc3QgTT1uZXcgTWFwO2lmKGY/KHY9VUcodGhpcy5fZHJpdmVyLGEsZixPRyxnTyxuZXcgTWFwLG5ldyBNYXAsZCxnJGUsaCksdi5m''@;'; put 'put ''b3JFYWNoKHJlPT57Y29uc3QgY2U9VGgoTSxyZS5lbGVtZW50LG5ldyBNYXApO3JlLnBvc3RTdHlsZVByb3BzLmZvckVhY2goYmU9PmNlLnNldChiZSxudWxsKSl9KSk6KGgucHVzaChmdW5jdGlvbiBDR2UoKXtyZXR1cm4gbmV3IFFuKDMzMDAsITEpfSgpKSx2PVtdKSxoLmxlbmd0aCl0aHJv''@;'; put 'put ''dyBmdW5jdGlvbiBTR2UoYyl7cmV0dXJuIG5ldyBRbigzNTA0LCExKX0oKTtNLmZvckVhY2goKHJlLGNlKT0+e3JlLmZvckVhY2goKGJlLEVlKT0+e3JlLnNldChFZSx0aGlzLl9kcml2ZXIuY29tcHV0ZVN0eWxlKGNlLEVlLGlnKSl9KX0pO2NvbnN0IFo9RG0odi5tYXAocmU9Pntjb25zdCBj''@;'; put 'put ''ZT1NLmdldChyZS5lbGVtZW50KTtyZXR1cm4gdGhpcy5fYnVpbGRQbGF5ZXIocmUsbmV3IE1hcCxjZSl9KSk7cmV0dXJuIHRoaXMuX3BsYXllcnNCeUlkLnNldChsLFopLFoub25EZXN0cm95KCgpPT50aGlzLmRlc3Ryb3kobCkpLHRoaXMucGxheWVycy5wdXNoKFopLFp9ZGVzdHJveShsKXtj''@;'; put 'put ''b25zdCBhPXRoaXMuX2dldFBsYXllcihsKTthLmRlc3Ryb3koKSx0aGlzLl9wbGF5ZXJzQnlJZC5kZWxldGUobCk7Y29uc3QgZD10aGlzLnBsYXllcnMuaW5kZXhPZihhKTtkPj0wJiZ0aGlzLnBsYXllcnMuc3BsaWNlKGQsMSl9X2dldFBsYXllcihsKXtjb25zdCBhPXRoaXMuX3BsYXllcnNC''@;'; put 'put ''eUlkLmdldChsKTtpZighYSl0aHJvdyBmdW5jdGlvbiBNR2UoYyl7cmV0dXJuIG5ldyBRbigzMzAxLCExKX0oKTtyZXR1cm4gYX1saXN0ZW4obCxhLGQsaCl7Y29uc3QgZj1rRyhhLCIiLCIiLCIiKTtyZXR1cm4gVEcodGhpcy5fZ2V0UGxheWVyKGwpLGQsZixoKSwoKT0+e319Y29tbWFuZChs''@;'; put 'put ''LGEsZCxoKXtpZigicmVnaXN0ZXIiPT1kKXJldHVybiB2b2lkIHRoaXMucmVnaXN0ZXIobCxoWzBdKTtpZigiY3JlYXRlIj09ZClyZXR1cm4gdm9pZCB0aGlzLmNyZWF0ZShsLGEsaFswXXx8e30pO2NvbnN0IGY9dGhpcy5fZ2V0UGxheWVyKGwpO3N3aXRjaChkKXtjYXNlInBsYXkiOmYucGxh''@;'; put 'put ''eSgpO2JyZWFrO2Nhc2UicGF1c2UiOmYucGF1c2UoKTticmVhaztjYXNlInJlc2V0IjpmLnJlc2V0KCk7YnJlYWs7Y2FzZSJyZXN0YXJ0IjpmLnJlc3RhcnQoKTticmVhaztjYXNlImZpbmlzaCI6Zi5maW5pc2goKTticmVhaztjYXNlImluaXQiOmYuaW5pdCgpO2JyZWFrO2Nhc2Uic2V0UG9z''@;'; put 'put ''aXRpb24iOmYuc2V0UG9zaXRpb24ocGFyc2VGbG9hdChoWzBdKSk7YnJlYWs7Y2FzZSJkZXN0cm95Ijp0aGlzLmRlc3Ryb3kobCl9fX1jb25zdCBGaGU9Im5nLWFuaW1hdGUtcXVldWVkIixZRz0ibmctYW5pbWF0ZS1kaXNhYmxlZCIsdyRlPVtdLEhoZT17bmFtZXNwYWNlSWQ6IiIsc2V0Rm9y''@;'; put 'put ''UmVtb3ZhbDohMSxzZXRGb3JNb3ZlOiExLGhhc0FuaW1hdGlvbjohMSxyZW1vdmVkQmVmb3JlUXVlcmllZDohMX0sQyRlPXtuYW1lc3BhY2VJZDoiIixzZXRGb3JNb3ZlOiExLHNldEZvclJlbW92YWw6ITEsaGFzQW5pbWF0aW9uOiExLHJlbW92ZWRCZWZvcmVRdWVyaWVkOiEwfSxlMz0iX19u''@;'; put 'put ''Z19yZW1vdmVkIjtjbGFzcyBHR3tnZXQgcGFyYW1zKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5wYXJhbXN9Y29uc3RydWN0b3IobCxhPSIiKXt0aGlzLm5hbWVzcGFjZUlkPWE7Y29uc3QgZD1sJiZsLmhhc093blByb3BlcnR5KCJ2YWx1ZSIpO2lmKHRoaXMudmFsdWU9ZnVuY3Rpb24gRSRlKGMp''@;'; put 'put ''e3JldHVybiBjPz9udWxsfShkP2wudmFsdWU6bCksZCl7Y29uc3R7dmFsdWU6ZiwuLi52fT1sO3RoaXMub3B0aW9ucz12fWVsc2UgdGhpcy5vcHRpb25zPXt9O3RoaXMub3B0aW9ucy5wYXJhbXN8fCh0aGlzLm9wdGlvbnMucGFyYW1zPXt9KX1hYnNvcmJPcHRpb25zKGwpe2NvbnN0IGE9bC5w''@;'; put 'put ''YXJhbXM7aWYoYSl7Y29uc3QgZD10aGlzLm9wdGlvbnMucGFyYW1zO09iamVjdC5rZXlzKGEpLmZvckVhY2goaD0+e251bGw9PWRbaF0mJihkW2hdPWFbaF0pfSl9fX1jb25zdCBpRT0idm9pZCIsJEc9bmV3IEdHKGlFKTtjbGFzcyBTJGV7Y29uc3RydWN0b3IobCxhLGQpe3RoaXMuaWQ9bCx0''@;'; put 'put ''aGlzLmhvc3RFbGVtZW50PWEsdGhpcy5fZW5naW5lPWQsdGhpcy5wbGF5ZXJzPVtdLHRoaXMuX3RyaWdnZXJzPW5ldyBNYXAsdGhpcy5fcXVldWU9W10sdGhpcy5fZWxlbWVudExpc3RlbmVycz1uZXcgTWFwLHRoaXMuX2hvc3RDbGFzc05hbWU9Im5nLXRucy0iK2wsRjIoYSx0aGlzLl9ob3N0''@;'; put 'put ''Q2xhc3NOYW1lKX1saXN0ZW4obCxhLGQsaCl7aWYoIXRoaXMuX3RyaWdnZXJzLmhhcyhhKSl0aHJvdyBmdW5jdGlvbiB4R2UoYyxsKXtyZXR1cm4gbmV3IFFuKDMzMDIsITEpfSgpO2lmKG51bGw9PWR8fDA9PWQubGVuZ3RoKXRocm93IGZ1bmN0aW9uIEVHZShjKXtyZXR1cm4gbmV3IFFuKDMz''@;'; put 'put ''MDMsITEpfSgpO2lmKCFmdW5jdGlvbiBUJGUoYyl7cmV0dXJuInN0YXJ0Ij09Y3x8ImRvbmUiPT1jfShkKSl0aHJvdyBmdW5jdGlvbiBUR2UoYyxsKXtyZXR1cm4gbmV3IFFuKDM0MDAsITEpfSgpO2NvbnN0IGY9VGgodGhpcy5fZWxlbWVudExpc3RlbmVycyxsLFtdKSx2PXtuYW1lOmEscGhh''@;'; put 'put ''c2U6ZCxjYWxsYmFjazpofTtmLnB1c2godik7Y29uc3QgTT1UaCh0aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LGwsbmV3IE1hcCk7cmV0dXJuIE0uaGFzKGEpfHwoRjIobCxtTyksRjIobCxtTysiLSIrYSksTS5zZXQoYSwkRykpLCgpPT57dGhpcy5fZW5naW5lLmFmdGVyRmx1c2goKCk9''@;'; put 'put ''Pntjb25zdCBEPWYuaW5kZXhPZih2KTtEPj0wJiZmLnNwbGljZShELDEpLHRoaXMuX3RyaWdnZXJzLmhhcyhhKXx8TS5kZWxldGUoYSl9KX19cmVnaXN0ZXIobCxhKXtyZXR1cm4hdGhpcy5fdHJpZ2dlcnMuaGFzKGwpJiYodGhpcy5fdHJpZ2dlcnMuc2V0KGwsYSksITApfV9nZXRUcmlnZ2Vy''@;'; put 'put ''KGwpe2NvbnN0IGE9dGhpcy5fdHJpZ2dlcnMuZ2V0KGwpO2lmKCFhKXRocm93IGZ1bmN0aW9uIEFHZShjKXtyZXR1cm4gbmV3IFFuKDM0MDEsITEpfSgpO3JldHVybiBhfXRyaWdnZXIobCxhLGQsaD0hMCl7Y29uc3QgZj10aGlzLl9nZXRUcmlnZ2VyKGEpLHY9bmV3IEtHKHRoaXMuaWQsYSxs''@;'; put 'put ''KTtsZXQgTT10aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LmdldChsKTtNfHwoRjIobCxtTyksRjIobCxtTysiLSIrYSksdGhpcy5fZW5naW5lLnN0YXRlc0J5RWxlbWVudC5zZXQobCxNPW5ldyBNYXApKTtsZXQgRD1NLmdldChhKTtjb25zdCBaPW5ldyBHRyhkLHRoaXMuaWQpO2lmKCEo''@;'; put 'put ''ZCYmZC5oYXNPd25Qcm9wZXJ0eSgidmFsdWUiKSkmJkQmJlouYWJzb3JiT3B0aW9ucyhELm9wdGlvbnMpLE0uc2V0KGEsWiksRHx8KEQ9JEcpLFoudmFsdWUhPT1pRSYmRC52YWx1ZT09PVoudmFsdWUpe2lmKCFmdW5jdGlvbiBEJGUoYyxsKXtjb25zdCBhPU9iamVjdC5rZXlzKGMpLGQ9T2Jq''@;'; put 'put ''ZWN0LmtleXMobCk7aWYoYS5sZW5ndGghPWQubGVuZ3RoKXJldHVybiExO2ZvcihsZXQgaD0wO2g8YS5sZW5ndGg7aCsrKXtjb25zdCBmPWFbaF07aWYoIWwuaGFzT3duUHJvcGVydHkoZil8fGNbZl0hPT1sW2ZdKXJldHVybiExfXJldHVybiEwfShELnBhcmFtcyxaLnBhcmFtcykpe2NvbnN0''@;'; put 'put ''IHFlPVtdLHJ0PWYubWF0Y2hTdHlsZXMoRC52YWx1ZSxELnBhcmFtcyxxZSkscHQ9Zi5tYXRjaFN0eWxlcyhaLnZhbHVlLFoucGFyYW1zLHFlKTtxZS5sZW5ndGg/dGhpcy5fZW5naW5lLnJlcG9ydEVycm9yKHFlKTp0aGlzLl9lbmdpbmUuYWZ0ZXJGbHVzaCgoKT0+e0Y3KGwscnQpLE1wKGws''@;'; put 'put ''cHQpfSl9cmV0dXJufWNvbnN0IGJlPVRoKHRoaXMuX2VuZ2luZS5wbGF5ZXJzQnlFbGVtZW50LGwsW10pO2JlLmZvckVhY2gocWU9PntxZS5uYW1lc3BhY2VJZD09dGhpcy5pZCYmcWUudHJpZ2dlck5hbWU9PWEmJnFlLnF1ZXVlZCYmcWUuZGVzdHJveSgpfSk7bGV0IEVlPWYubWF0Y2hUcmFu''@;'; put 'put ''c2l0aW9uKEQudmFsdWUsWi52YWx1ZSxsLFoucGFyYW1zKSxCZT0hMTtpZighRWUpe2lmKCFoKXJldHVybjtFZT1mLmZhbGxiYWNrVHJhbnNpdGlvbixCZT0hMH1yZXR1cm4gdGhpcy5fZW5naW5lLnRvdGFsUXVldWVkUGxheWVycysrLHRoaXMuX3F1ZXVlLnB1c2goe2VsZW1lbnQ6bCx0cmln''@;'; put 'put ''Z2VyTmFtZTphLHRyYW5zaXRpb246RWUsZnJvbVN0YXRlOkQsdG9TdGF0ZTpaLHBsYXllcjp2LGlzRmFsbGJhY2tUcmFuc2l0aW9uOkJlfSksQmV8fChGMihsLEZoZSksdi5vblN0YXJ0KCgpPT57aV8obCxGaGUpfSkpLHYub25Eb25lKCgpPT57bGV0IHFlPXRoaXMucGxheWVycy5pbmRleE9m''@;'; put 'put ''KHYpO3FlPj0wJiZ0aGlzLnBsYXllcnMuc3BsaWNlKHFlLDEpO2NvbnN0IHJ0PXRoaXMuX2VuZ2luZS5wbGF5ZXJzQnlFbGVtZW50LmdldChsKTtpZihydCl7bGV0IHB0PXJ0LmluZGV4T2Yodik7cHQ+PTAmJnJ0LnNwbGljZShwdCwxKX19KSx0aGlzLnBsYXllcnMucHVzaCh2KSxiZS5wdXNo''@;'; put 'put ''KHYpLHZ9ZGVyZWdpc3RlcihsKXt0aGlzLl90cmlnZ2Vycy5kZWxldGUobCksdGhpcy5fZW5naW5lLnN0YXRlc0J5RWxlbWVudC5mb3JFYWNoKGE9PmEuZGVsZXRlKGwpKSx0aGlzLl9lbGVtZW50TGlzdGVuZXJzLmZvckVhY2goKGEsZCk9Pnt0aGlzLl9lbGVtZW50TGlzdGVuZXJzLnNldChk''@;'; put 'put ''LGEuZmlsdGVyKGg9PmgubmFtZSE9bCkpfSl9Y2xlYXJFbGVtZW50Q2FjaGUobCl7dGhpcy5fZW5naW5lLnN0YXRlc0J5RWxlbWVudC5kZWxldGUobCksdGhpcy5fZWxlbWVudExpc3RlbmVycy5kZWxldGUobCk7Y29uc3QgYT10aGlzLl9lbmdpbmUucGxheWVyc0J5RWxlbWVudC5nZXQobCk7''@;'; put 'put ''YSYmKGEuZm9yRWFjaChkPT5kLmRlc3Ryb3koKSksdGhpcy5fZW5naW5lLnBsYXllcnNCeUVsZW1lbnQuZGVsZXRlKGwpKX1fc2lnbmFsUmVtb3ZhbEZvcklubmVyVHJpZ2dlcnMobCxhKXtjb25zdCBkPXRoaXMuX2VuZ2luZS5kcml2ZXIucXVlcnkobCx2TywhMCk7ZC5mb3JFYWNoKGg9Pntp''@;'; put 'put ''ZihoW2UzXSlyZXR1cm47Y29uc3QgZj10aGlzLl9lbmdpbmUuZmV0Y2hOYW1lc3BhY2VzQnlFbGVtZW50KGgpO2Yuc2l6ZT9mLmZvckVhY2godj0+di50cmlnZ2VyTGVhdmVBbmltYXRpb24oaCxhLCExLCEwKSk6dGhpcy5jbGVhckVsZW1lbnRDYWNoZShoKX0pLHRoaXMuX2VuZ2luZS5hZnRl''@;'; put 'put ''ckZsdXNoQW5pbWF0aW9uc0RvbmUoKCk9PmQuZm9yRWFjaChoPT50aGlzLmNsZWFyRWxlbWVudENhY2hlKGgpKSl9dHJpZ2dlckxlYXZlQW5pbWF0aW9uKGwsYSxkLGgpe2NvbnN0IGY9dGhpcy5fZW5naW5lLnN0YXRlc0J5RWxlbWVudC5nZXQobCksdj1uZXcgTWFwO2lmKGYpe2NvbnN0IE09''@;'; put 'put ''W107aWYoZi5mb3JFYWNoKChELFopPT57aWYodi5zZXQoWixELnZhbHVlKSx0aGlzLl90cmlnZ2Vycy5oYXMoWikpe2NvbnN0IHJlPXRoaXMudHJpZ2dlcihsLFosaUUsaCk7cmUmJk0ucHVzaChyZSl9fSksTS5sZW5ndGgpcmV0dXJuIHRoaXMuX2VuZ2luZS5tYXJrRWxlbWVudEFzUmVtb3Zl''@;'; put 'put ''ZCh0aGlzLmlkLGwsITAsYSx2KSxkJiZEbShNKS5vbkRvbmUoKCk9PnRoaXMuX2VuZ2luZS5wcm9jZXNzTGVhdmVOb2RlKGwpKSwhMH1yZXR1cm4hMX1wcmVwYXJlTGVhdmVBbmltYXRpb25MaXN0ZW5lcnMobCl7Y29uc3QgYT10aGlzLl9lbGVtZW50TGlzdGVuZXJzLmdldChsKSxkPXRoaXMu''@;'; put 'put ''X2VuZ2luZS5zdGF0ZXNCeUVsZW1lbnQuZ2V0KGwpO2lmKGEmJmQpe2NvbnN0IGg9bmV3IFNldDthLmZvckVhY2goZj0+e2NvbnN0IHY9Zi5uYW1lO2lmKGguaGFzKHYpKXJldHVybjtoLmFkZCh2KTtjb25zdCBEPXRoaXMuX3RyaWdnZXJzLmdldCh2KS5mYWxsYmFja1RyYW5zaXRpb24sWj1k''@;'; put 'put ''LmdldCh2KXx8JEcscmU9bmV3IEdHKGlFKSxjZT1uZXcgS0codGhpcy5pZCx2LGwpO3RoaXMuX2VuZ2luZS50b3RhbFF1ZXVlZFBsYXllcnMrKyx0aGlzLl9xdWV1ZS5wdXNoKHtlbGVtZW50OmwsdHJpZ2dlck5hbWU6dix0cmFuc2l0aW9uOkQsZnJvbVN0YXRlOlosdG9TdGF0ZTpyZSxwbGF5''@;'; put 'put ''ZXI6Y2UsaXNGYWxsYmFja1RyYW5zaXRpb246ITB9KX0pfX1yZW1vdmVOb2RlKGwsYSl7Y29uc3QgZD10aGlzLl9lbmdpbmU7aWYobC5jaGlsZEVsZW1lbnRDb3VudCYmdGhpcy5fc2lnbmFsUmVtb3ZhbEZvcklubmVyVHJpZ2dlcnMobCxhKSx0aGlzLnRyaWdnZXJMZWF2ZUFuaW1hdGlvbihs''@;'; put 'put ''LGEsITApKXJldHVybjtsZXQgaD0hMTtpZihkLnRvdGFsQW5pbWF0aW9ucyl7Y29uc3QgZj1kLnBsYXllcnMubGVuZ3RoP2QucGxheWVyc0J5UXVlcmllZEVsZW1lbnQuZ2V0KGwpOltdO2lmKGYmJmYubGVuZ3RoKWg9ITA7ZWxzZXtsZXQgdj1sO2Zvcig7dj12LnBhcmVudE5vZGU7KWlmKGQu''@;'; put 'put ''c3RhdGVzQnlFbGVtZW50LmdldCh2KSl7aD0hMDticmVha319fWlmKHRoaXMucHJlcGFyZUxlYXZlQW5pbWF0aW9uTGlzdGVuZXJzKGwpLGgpZC5tYXJrRWxlbWVudEFzUmVtb3ZlZCh0aGlzLmlkLGwsITEsYSk7ZWxzZXtjb25zdCBmPWxbZTNdOyghZnx8Zj09PUhoZSkmJihkLmFmdGVyRmx1''@;'; put 'put ''c2goKCk9PnRoaXMuY2xlYXJFbGVtZW50Q2FjaGUobCkpLGQuZGVzdHJveUlubmVyQW5pbWF0aW9ucyhsKSxkLl9vblJlbW92YWxDb21wbGV0ZShsLGEpKX19aW5zZXJ0Tm9kZShsLGEpe0YyKGwsdGhpcy5faG9zdENsYXNzTmFtZSl9ZHJhaW5RdWV1ZWRUcmFuc2l0aW9ucyhsKXtjb25zdCBh''@;'; put 'put ''PVtdO3JldHVybiB0aGlzLl9xdWV1ZS5mb3JFYWNoKGQ9Pntjb25zdCBoPWQucGxheWVyO2lmKGguZGVzdHJveWVkKXJldHVybjtjb25zdCBmPWQuZWxlbWVudCx2PXRoaXMuX2VsZW1lbnRMaXN0ZW5lcnMuZ2V0KGYpO3YmJnYuZm9yRWFjaChNPT57aWYoTS5uYW1lPT1kLnRyaWdnZXJOYW1l''@;'; put 'put ''KXtjb25zdCBEPWtHKGYsZC50cmlnZ2VyTmFtZSxkLmZyb21TdGF0ZS52YWx1ZSxkLnRvU3RhdGUudmFsdWUpO0QuX2RhdGE9bCxURyhkLnBsYXllcixNLnBoYXNlLEQsTS5jYWxsYmFjayl9fSksaC5tYXJrZWRGb3JEZXN0cm95P3RoaXMuX2VuZ2luZS5hZnRlckZsdXNoKCgpPT57aC5kZXN0''@;'; put 'put ''cm95KCl9KTphLnB1c2goZCl9KSx0aGlzLl9xdWV1ZT1bXSxhLnNvcnQoKGQsaCk9Pntjb25zdCBmPWQudHJhbnNpdGlvbi5hc3QuZGVwQ291bnQsdj1oLnRyYW5zaXRpb24uYXN0LmRlcENvdW50O3JldHVybiAwPT1mfHwwPT12P2Ytdjp0aGlzLl9lbmdpbmUuZHJpdmVyLmNvbnRhaW5zRWxl''@;'; put 'put ''bWVudChkLmVsZW1lbnQsaC5lbGVtZW50KT8xOi0xfSl9ZGVzdHJveShsKXt0aGlzLnBsYXllcnMuZm9yRWFjaChhPT5hLmRlc3Ryb3koKSksdGhpcy5fc2lnbmFsUmVtb3ZhbEZvcklubmVyVHJpZ2dlcnModGhpcy5ob3N0RWxlbWVudCxsKX19Y2xhc3MgTSRle19vblJlbW92YWxDb21wbGV0''@;'; put 'put ''ZShsLGEpe3RoaXMub25SZW1vdmFsQ29tcGxldGUobCxhKX1jb25zdHJ1Y3RvcihsLGEsZCxoKXt0aGlzLmJvZHlOb2RlPWwsdGhpcy5kcml2ZXI9YSx0aGlzLl9ub3JtYWxpemVyPWQsdGhpcy5zY2hlZHVsZXI9aCx0aGlzLnBsYXllcnM9W10sdGhpcy5uZXdIb3N0RWxlbWVudHM9bmV3IE1h''@;'; put 'put ''cCx0aGlzLnBsYXllcnNCeUVsZW1lbnQ9bmV3IE1hcCx0aGlzLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50PW5ldyBNYXAsdGhpcy5zdGF0ZXNCeUVsZW1lbnQ9bmV3IE1hcCx0aGlzLmRpc2FibGVkTm9kZXM9bmV3IFNldCx0aGlzLnRvdGFsQW5pbWF0aW9ucz0wLHRoaXMudG90YWxRdWV1ZWRQ''@;'; put 'put ''bGF5ZXJzPTAsdGhpcy5fbmFtZXNwYWNlTG9va3VwPXt9LHRoaXMuX25hbWVzcGFjZUxpc3Q9W10sdGhpcy5fZmx1c2hGbnM9W10sdGhpcy5fd2hlblF1aWV0Rm5zPVtdLHRoaXMubmFtZXNwYWNlc0J5SG9zdEVsZW1lbnQ9bmV3IE1hcCx0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHM9W10s''@;'; put 'put ''dGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzPVtdLHRoaXMub25SZW1vdmFsQ29tcGxldGU9KGYsdik9Pnt9fWdldCBxdWV1ZWRQbGF5ZXJzKCl7Y29uc3QgbD1bXTtyZXR1cm4gdGhpcy5fbmFtZXNwYWNlTGlzdC5mb3JFYWNoKGE9PnthLnBsYXllcnMuZm9yRWFjaChkPT57ZC5xdWV1ZWQm''@;'; put 'put ''JmwucHVzaChkKX0pfSksbH1jcmVhdGVOYW1lc3BhY2UobCxhKXtjb25zdCBkPW5ldyBTJGUobCxhLHRoaXMpO3JldHVybiB0aGlzLmJvZHlOb2RlJiZ0aGlzLmRyaXZlci5jb250YWluc0VsZW1lbnQodGhpcy5ib2R5Tm9kZSxhKT90aGlzLl9iYWxhbmNlTmFtZXNwYWNlTGlzdChkLGEpOih0''@;'; put 'put ''aGlzLm5ld0hvc3RFbGVtZW50cy5zZXQoYSxkKSx0aGlzLmNvbGxlY3RFbnRlckVsZW1lbnQoYSkpLHRoaXMuX25hbWVzcGFjZUxvb2t1cFtsXT1kfV9iYWxhbmNlTmFtZXNwYWNlTGlzdChsLGEpe2NvbnN0IGQ9dGhpcy5fbmFtZXNwYWNlTGlzdCxoPXRoaXMubmFtZXNwYWNlc0J5SG9zdEVs''@;'; put 'put ''ZW1lbnQ7aWYoZC5sZW5ndGgtMT49MCl7bGV0IHY9ITEsTT10aGlzLmRyaXZlci5nZXRQYXJlbnRFbGVtZW50KGEpO2Zvcig7TTspe2NvbnN0IEQ9aC5nZXQoTSk7aWYoRCl7Y29uc3QgWj1kLmluZGV4T2YoRCk7ZC5zcGxpY2UoWisxLDAsbCksdj0hMDticmVha31NPXRoaXMuZHJpdmVyLmdl''@;'; put 'put ''dFBhcmVudEVsZW1lbnQoTSl9dnx8ZC51bnNoaWZ0KGwpfWVsc2UgZC5wdXNoKGwpO3JldHVybiBoLnNldChhLGwpLGx9cmVnaXN0ZXIobCxhKXtsZXQgZD10aGlzLl9uYW1lc3BhY2VMb29rdXBbbF07cmV0dXJuIGR8fChkPXRoaXMuY3JlYXRlTmFtZXNwYWNlKGwsYSkpLGR9cmVnaXN0ZXJU''@;'; put 'put ''cmlnZ2VyKGwsYSxkKXtsZXQgaD10aGlzLl9uYW1lc3BhY2VMb29rdXBbbF07aCYmaC5yZWdpc3RlcihhLGQpJiZ0aGlzLnRvdGFsQW5pbWF0aW9ucysrfWRlc3Ryb3kobCxhKXtsJiYodGhpcy5hZnRlckZsdXNoKCgpPT57fSksdGhpcy5hZnRlckZsdXNoQW5pbWF0aW9uc0RvbmUoKCk9Pntj''@;'; put 'put ''b25zdCBkPXRoaXMuX2ZldGNoTmFtZXNwYWNlKGwpO3RoaXMubmFtZXNwYWNlc0J5SG9zdEVsZW1lbnQuZGVsZXRlKGQuaG9zdEVsZW1lbnQpO2NvbnN0IGg9dGhpcy5fbmFtZXNwYWNlTGlzdC5pbmRleE9mKGQpO2g+PTAmJnRoaXMuX25hbWVzcGFjZUxpc3Quc3BsaWNlKGgsMSksZC5kZXN0''@;'; put 'put ''cm95KGEpLGRlbGV0ZSB0aGlzLl9uYW1lc3BhY2VMb29rdXBbbF19KSl9X2ZldGNoTmFtZXNwYWNlKGwpe3JldHVybiB0aGlzLl9uYW1lc3BhY2VMb29rdXBbbF19ZmV0Y2hOYW1lc3BhY2VzQnlFbGVtZW50KGwpe2NvbnN0IGE9bmV3IFNldCxkPXRoaXMuc3RhdGVzQnlFbGVtZW50LmdldChs''@;'; put 'put ''KTtpZihkKWZvcihsZXQgaCBvZiBkLnZhbHVlcygpKWlmKGgubmFtZXNwYWNlSWQpe2NvbnN0IGY9dGhpcy5fZmV0Y2hOYW1lc3BhY2UoaC5uYW1lc3BhY2VJZCk7ZiYmYS5hZGQoZil9cmV0dXJuIGF9dHJpZ2dlcihsLGEsZCxoKXtpZih4TyhhKSl7Y29uc3QgZj10aGlzLl9mZXRjaE5hbWVz''@;'; put 'put ''cGFjZShsKTtpZihmKXJldHVybiBmLnRyaWdnZXIoYSxkLGgpLCEwfXJldHVybiExfWluc2VydE5vZGUobCxhLGQsaCl7aWYoIXhPKGEpKXJldHVybjtjb25zdCBmPWFbZTNdO2lmKGYmJmYuc2V0Rm9yUmVtb3ZhbCl7Zi5zZXRGb3JSZW1vdmFsPSExLGYuc2V0Rm9yTW92ZT0hMDtjb25zdCB2''@;'; put 'put ''PXRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cy5pbmRleE9mKGEpO3Y+PTAmJnRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cy5zcGxpY2UodiwxKX1pZihsKXtjb25zdCB2PXRoaXMuX2ZldGNoTmFtZXNwYWNlKGwpO3YmJnYuaW5zZXJ0Tm9kZShhLGQpfWgmJnRoaXMuY29sbGVjdEVudGVy''@;'; put 'put ''RWxlbWVudChhKX1jb2xsZWN0RW50ZXJFbGVtZW50KGwpe3RoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50cy5wdXNoKGwpfW1hcmtFbGVtZW50QXNEaXNhYmxlZChsLGEpe2E/dGhpcy5kaXNhYmxlZE5vZGVzLmhhcyhsKXx8KHRoaXMuZGlzYWJsZWROb2Rlcy5hZGQobCksRjIobCxZRykpOnRo''@;'; put 'put ''aXMuZGlzYWJsZWROb2Rlcy5oYXMobCkmJih0aGlzLmRpc2FibGVkTm9kZXMuZGVsZXRlKGwpLGlfKGwsWUcpKX1yZW1vdmVOb2RlKGwsYSxkKXtpZih4TyhhKSl7dGhpcy5zY2hlZHVsZXI/Lm5vdGlmeSgpO2NvbnN0IGg9bD90aGlzLl9mZXRjaE5hbWVzcGFjZShsKTpudWxsO2g/aC5yZW1v''@;'; put 'put ''dmVOb2RlKGEsZCk6dGhpcy5tYXJrRWxlbWVudEFzUmVtb3ZlZChsLGEsITEsZCk7Y29uc3QgZj10aGlzLm5hbWVzcGFjZXNCeUhvc3RFbGVtZW50LmdldChhKTtmJiZmLmlkIT09bCYmZi5yZW1vdmVOb2RlKGEsZCl9ZWxzZSB0aGlzLl9vblJlbW92YWxDb21wbGV0ZShhLGQpfW1hcmtFbGVt''@;'; put 'put ''ZW50QXNSZW1vdmVkKGwsYSxkLGgsZil7dGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzLnB1c2goYSksYVtlM109e25hbWVzcGFjZUlkOmwsc2V0Rm9yUmVtb3ZhbDpoLGhhc0FuaW1hdGlvbjpkLHJlbW92ZWRCZWZvcmVRdWVyaWVkOiExLHByZXZpb3VzVHJpZ2dlcnNWYWx1ZXM6Zn19bGlz''@;'; put 'put ''dGVuKGwsYSxkLGgsZil7cmV0dXJuIHhPKGEpP3RoaXMuX2ZldGNoTmFtZXNwYWNlKGwpLmxpc3RlbihhLGQsaCxmKTooKT0+e319X2J1aWxkSW5zdHJ1Y3Rpb24obCxhLGQsaCxmKXtyZXR1cm4gbC50cmFuc2l0aW9uLmJ1aWxkKHRoaXMuZHJpdmVyLGwuZWxlbWVudCxsLmZyb21TdGF0ZS52''@;'; put 'put ''YWx1ZSxsLnRvU3RhdGUudmFsdWUsZCxoLGwuZnJvbVN0YXRlLm9wdGlvbnMsbC50b1N0YXRlLm9wdGlvbnMsYSxmKX1kZXN0cm95SW5uZXJBbmltYXRpb25zKGwpe2xldCBhPXRoaXMuZHJpdmVyLnF1ZXJ5KGwsdk8sITApO2EuZm9yRWFjaChkPT50aGlzLmRlc3Ryb3lBY3RpdmVBbmltYXRp''@;'; put 'put ''b25zRm9yRWxlbWVudChkKSksMCE9dGhpcy5wbGF5ZXJzQnlRdWVyaWVkRWxlbWVudC5zaXplJiYoYT10aGlzLmRyaXZlci5xdWVyeShsLFBHLCEwKSxhLmZvckVhY2goZD0+dGhpcy5maW5pc2hBY3RpdmVRdWVyaWVkQW5pbWF0aW9uT25FbGVtZW50KGQpKSl9ZGVzdHJveUFjdGl2ZUFuaW1h''@;'; put 'put ''dGlvbnNGb3JFbGVtZW50KGwpe2NvbnN0IGE9dGhpcy5wbGF5ZXJzQnlFbGVtZW50LmdldChsKTthJiZhLmZvckVhY2goZD0+e2QucXVldWVkP2QubWFya2VkRm9yRGVzdHJveT0hMDpkLmRlc3Ryb3koKX0pfWZpbmlzaEFjdGl2ZVF1ZXJpZWRBbmltYXRpb25PbkVsZW1lbnQobCl7Y29uc3Qg''@;'; put 'put ''YT10aGlzLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50LmdldChsKTthJiZhLmZvckVhY2goZD0+ZC5maW5pc2goKSl9d2hlblJlbmRlcmluZ0RvbmUoKXtyZXR1cm4gbmV3IFByb21pc2UobD0+e2lmKHRoaXMucGxheWVycy5sZW5ndGgpcmV0dXJuIERtKHRoaXMucGxheWVycykub25Eb25lKCgp''@;'; put 'put ''PT5sKCkpO2woKX0pfXByb2Nlc3NMZWF2ZU5vZGUobCl7Y29uc3QgYT1sW2UzXTtpZihhJiZhLnNldEZvclJlbW92YWwpe2lmKGxbZTNdPUhoZSxhLm5hbWVzcGFjZUlkKXt0aGlzLmRlc3Ryb3lJbm5lckFuaW1hdGlvbnMobCk7Y29uc3QgZD10aGlzLl9mZXRjaE5hbWVzcGFjZShhLm5hbWVz''@;'; put 'put ''cGFjZUlkKTtkJiZkLmNsZWFyRWxlbWVudENhY2hlKGwpfXRoaXMuX29uUmVtb3ZhbENvbXBsZXRlKGwsYS5zZXRGb3JSZW1vdmFsKX1sLmNsYXNzTGlzdD8uY29udGFpbnMoWUcpJiZ0aGlzLm1hcmtFbGVtZW50QXNEaXNhYmxlZChsLCExKSx0aGlzLmRyaXZlci5xdWVyeShsLCIubmctYW5p''@;'; put 'put ''bWF0ZS1kaXNhYmxlZCIsITApLmZvckVhY2goZD0+e3RoaXMubWFya0VsZW1lbnRBc0Rpc2FibGVkKGQsITEpfSl9Zmx1c2gobD0tMSl7bGV0IGE9W107aWYodGhpcy5uZXdIb3N0RWxlbWVudHMuc2l6ZSYmKHRoaXMubmV3SG9zdEVsZW1lbnRzLmZvckVhY2goKGQsaCk9PnRoaXMuX2JhbGFu''@;'; put 'put ''Y2VOYW1lc3BhY2VMaXN0KGQsaCkpLHRoaXMubmV3SG9zdEVsZW1lbnRzLmNsZWFyKCkpLHRoaXMudG90YWxBbmltYXRpb25zJiZ0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHMubGVuZ3RoKWZvcihsZXQgZD0wO2Q8dGhpcy5jb2xsZWN0ZWRFbnRlckVsZW1lbnRzLmxlbmd0aDtkKyspRjIo''@;'; put 'put ''dGhpcy5jb2xsZWN0ZWRFbnRlckVsZW1lbnRzW2RdLCJuZy1zdGFyLWluc2VydGVkIik7aWYodGhpcy5fbmFtZXNwYWNlTGlzdC5sZW5ndGgmJih0aGlzLnRvdGFsUXVldWVkUGxheWVyc3x8dGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzLmxlbmd0aCkpe2NvbnN0IGQ9W107dHJ5e2E9dGhp''@;'; put 'put ''cy5fZmx1c2hBbmltYXRpb25zKGQsbCl9ZmluYWxseXtmb3IobGV0IGg9MDtoPGQubGVuZ3RoO2grKylkW2hdKCl9fWVsc2UgZm9yKGxldCBkPTA7ZDx0aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHMubGVuZ3RoO2QrKyl0aGlzLnByb2Nlc3NMZWF2ZU5vZGUodGhpcy5jb2xsZWN0ZWRMZWF2''@;'; put 'put ''ZUVsZW1lbnRzW2RdKTtpZih0aGlzLnRvdGFsUXVldWVkUGxheWVycz0wLHRoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50cy5sZW5ndGg9MCx0aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHMubGVuZ3RoPTAsdGhpcy5fZmx1c2hGbnMuZm9yRWFjaChkPT5kKCkpLHRoaXMuX2ZsdXNoRm5zPVtd''@;'; put 'put ''LHRoaXMuX3doZW5RdWlldEZucy5sZW5ndGgpe2NvbnN0IGQ9dGhpcy5fd2hlblF1aWV0Rm5zO3RoaXMuX3doZW5RdWlldEZucz1bXSxhLmxlbmd0aD9EbShhKS5vbkRvbmUoKCk9PntkLmZvckVhY2goaD0+aCgpKX0pOmQuZm9yRWFjaChoPT5oKCkpfX1yZXBvcnRFcnJvcihsKXt0aHJvdyBm''@;'; put 'put ''dW5jdGlvbiBrR2UoYyl7cmV0dXJuIG5ldyBRbigzNDAyLCExKX0oKX1fZmx1c2hBbmltYXRpb25zKGwsYSl7Y29uc3QgZD1uZXcgQ08saD1bXSxmPW5ldyBNYXAsdj1bXSxNPW5ldyBNYXAsRD1uZXcgTWFwLFo9bmV3IE1hcCxyZT1uZXcgU2V0O3RoaXMuZGlzYWJsZWROb2Rlcy5mb3JFYWNo''@;'; put 'put ''KEpuPT57cmUuYWRkKEpuKTtjb25zdCBEcj10aGlzLmRyaXZlci5xdWVyeShKbiwiLm5nLWFuaW1hdGUtcXVldWVkIiwhMCk7Zm9yKGxldCAkcj0wOyRyPERyLmxlbmd0aDskcisrKXJlLmFkZChEclskcl0pfSk7Y29uc3QgY2U9dGhpcy5ib2R5Tm9kZSxiZT1BcnJheS5mcm9tKHRoaXMuc3Rh''@;'; put 'put ''dGVzQnlFbGVtZW50LmtleXMoKSksRWU9QmhlKGJlLHRoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50cyksQmU9bmV3IE1hcDtsZXQgcWU9MDtFZS5mb3JFYWNoKChKbixEcik9Pntjb25zdCAkcj1PRytxZSsrO0JlLnNldChEciwkciksSm4uZm9yRWFjaCh3aT0+RjIod2ksJHIpKX0pO2NvbnN0''@;'; put 'put ''IHJ0PVtdLHB0PW5ldyBTZXQsZHQ9bmV3IFNldDtmb3IobGV0IEpuPTA7Sm48dGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzLmxlbmd0aDtKbisrKXtjb25zdCBEcj10aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHNbSm5dLCRyPURyW2UzXTskciYmJHIuc2V0Rm9yUmVtb3ZhbCYmKHJ0LnB1''@;'; put 'put ''c2goRHIpLHB0LmFkZChEciksJHIuaGFzQW5pbWF0aW9uP3RoaXMuZHJpdmVyLnF1ZXJ5KERyLCIubmctc3Rhci1pbnNlcnRlZCIsITApLmZvckVhY2god2k9PnB0LmFkZCh3aSkpOmR0LmFkZChEcikpfWNvbnN0IEp0PW5ldyBNYXAsdm49QmhlKGJlLEFycmF5LmZyb20ocHQpKTt2bi5mb3JF''@;'; put 'put ''YWNoKChKbixEcik9Pntjb25zdCAkcj1nTytxZSsrO0p0LnNldChEciwkciksSm4uZm9yRWFjaCh3aT0+RjIod2ksJHIpKX0pLGwucHVzaCgoKT0+e0VlLmZvckVhY2goKEpuLERyKT0+e2NvbnN0ICRyPUJlLmdldChEcik7Sm4uZm9yRWFjaCh3aT0+aV8od2ksJHIpKX0pLHZuLmZvckVhY2go''@;'; put 'put ''KEpuLERyKT0+e2NvbnN0ICRyPUp0LmdldChEcik7Sm4uZm9yRWFjaCh3aT0+aV8od2ksJHIpKX0pLHJ0LmZvckVhY2goSm49Pnt0aGlzLnByb2Nlc3NMZWF2ZU5vZGUoSm4pfSl9KTtjb25zdCBDbj1bXSx0bj1bXTtmb3IobGV0IEpuPXRoaXMuX25hbWVzcGFjZUxpc3QubGVuZ3RoLTE7Sm4+''@;'; put 'put ''PTA7Sm4tLSl0aGlzLl9uYW1lc3BhY2VMaXN0W0puXS5kcmFpblF1ZXVlZFRyYW5zaXRpb25zKGEpLmZvckVhY2goJHI9Pntjb25zdCB3aT0kci5wbGF5ZXIsZWE9JHIuZWxlbWVudDtpZihDbi5wdXNoKHdpKSx0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHMubGVuZ3RoKXtjb25zdCBhcj1l''@;'; put 'put ''YVtlM107aWYoYXImJmFyLnNldEZvck1vdmUpe2lmKGFyLnByZXZpb3VzVHJpZ2dlcnNWYWx1ZXMmJmFyLnByZXZpb3VzVHJpZ2dlcnNWYWx1ZXMuaGFzKCRyLnRyaWdnZXJOYW1lKSl7Y29uc3QgSHI9YXIucHJldmlvdXNUcmlnZ2Vyc1ZhbHVlcy5nZXQoJHIudHJpZ2dlck5hbWUpLHFyPXRo''@;'; put 'put ''aXMuc3RhdGVzQnlFbGVtZW50LmdldCgkci5lbGVtZW50KTtpZihxciYmcXIuaGFzKCRyLnRyaWdnZXJOYW1lKSl7Y29uc3Qgb249cXIuZ2V0KCRyLnRyaWdnZXJOYW1lKTtvbi52YWx1ZT1Icixxci5zZXQoJHIudHJpZ2dlck5hbWUsb24pfX1yZXR1cm4gdm9pZCB3aS5kZXN0cm95KCl9fWNv''@;'; put 'put ''bnN0IGZhPSFjZXx8IXRoaXMuZHJpdmVyLmNvbnRhaW5zRWxlbWVudChjZSxlYSksdnQ9SnQuZ2V0KGVhKSxOdD1CZS5nZXQoZWEpLEh0PXRoaXMuX2J1aWxkSW5zdHJ1Y3Rpb24oJHIsZCxOdCx2dCxmYSk7aWYoSHQuZXJyb3JzJiZIdC5lcnJvcnMubGVuZ3RoKXJldHVybiB2b2lkIHRuLnB1''@;'; put 'put ''c2goSHQpO2lmKGZhKXJldHVybiB3aS5vblN0YXJ0KCgpPT5GNyhlYSxIdC5mcm9tU3R5bGVzKSksd2kub25EZXN0cm95KCgpPT5NcChlYSxIdC50b1N0eWxlcykpLHZvaWQgaC5wdXNoKHdpKTtpZigkci5pc0ZhbGxiYWNrVHJhbnNpdGlvbilyZXR1cm4gd2kub25TdGFydCgoKT0+RjcoZWEs''@;'; put 'put ''SHQuZnJvbVN0eWxlcykpLHdpLm9uRGVzdHJveSgoKT0+TXAoZWEsSHQudG9TdHlsZXMpKSx2b2lkIGgucHVzaCh3aSk7Y29uc3QgSG49W107SHQudGltZWxpbmVzLmZvckVhY2goYXI9Pnthci5zdHJldGNoU3RhcnRpbmdLZXlmcmFtZT0hMCx0aGlzLmRpc2FibGVkTm9kZXMuaGFzKGFyLmVs''@;'; put 'put ''ZW1lbnQpfHxIbi5wdXNoKGFyKX0pLEh0LnRpbWVsaW5lcz1IbixkLmFwcGVuZChlYSxIdC50aW1lbGluZXMpLHYucHVzaCh7aW5zdHJ1Y3Rpb246SHQscGxheWVyOndpLGVsZW1lbnQ6ZWF9KSxIdC5xdWVyaWVkRWxlbWVudHMuZm9yRWFjaChhcj0+VGgoTSxhcixbXSkucHVzaCh3aSkpLEh0''@;'; put 'put ''LnByZVN0eWxlUHJvcHMuZm9yRWFjaCgoYXIsSHIpPT57aWYoYXIuc2l6ZSl7bGV0IHFyPUQuZ2V0KEhyKTtxcnx8RC5zZXQoSHIscXI9bmV3IFNldCksYXIuZm9yRWFjaCgob24seW4pPT5xci5hZGQoeW4pKX19KSxIdC5wb3N0U3R5bGVQcm9wcy5mb3JFYWNoKChhcixIcik9PntsZXQgcXI9''@;'; put 'put ''Wi5nZXQoSHIpO3FyfHxaLnNldChIcixxcj1uZXcgU2V0KSxhci5mb3JFYWNoKChvbix5bik9PnFyLmFkZCh5bikpfSl9KTtpZih0bi5sZW5ndGgpe2NvbnN0IEpuPVtdO3RuLmZvckVhY2goRHI9PntKbi5wdXNoKGZ1bmN0aW9uIERHZShjLGwpe3JldHVybiBuZXcgUW4oMzUwNSwhMSl9KCkp''@;'; put 'put ''fSksQ24uZm9yRWFjaChEcj0+RHIuZGVzdHJveSgpKSx0aGlzLnJlcG9ydEVycm9yKEpuKX1jb25zdCBNbj1uZXcgTWFwLENyPW5ldyBNYXA7di5mb3JFYWNoKEpuPT57Y29uc3QgRHI9Sm4uZWxlbWVudDtkLmhhcyhEcikmJihDci5zZXQoRHIsRHIpLHRoaXMuX2JlZm9yZUFuaW1hdGlvbkJ1''@;'; put 'put ''aWxkKEpuLnBsYXllci5uYW1lc3BhY2VJZCxKbi5pbnN0cnVjdGlvbixNbikpfSksaC5mb3JFYWNoKEpuPT57Y29uc3QgRHI9Sm4uZWxlbWVudDt0aGlzLl9nZXRQcmV2aW91c1BsYXllcnMoRHIsITEsSm4ubmFtZXNwYWNlSWQsSm4udHJpZ2dlck5hbWUsbnVsbCkuZm9yRWFjaCh3aT0+e1Ro''@;'; put 'put ''KE1uLERyLFtdKS5wdXNoKHdpKSx3aS5kZXN0cm95KCl9KX0pO2NvbnN0IEdyPXJ0LmZpbHRlcihKbj0+emhlKEpuLEQsWikpLG1yPW5ldyBNYXA7VmhlKG1yLHRoaXMuZHJpdmVyLGR0LFosaWcpLmZvckVhY2goSm49Pnt6aGUoSm4sRCxaKSYmR3IucHVzaChKbil9KTtjb25zdCBhaT1uZXcg''@;'; put 'put ''TWFwO0VlLmZvckVhY2goKEpuLERyKT0+e1ZoZShhaSx0aGlzLmRyaXZlcixuZXcgU2V0KEpuKSxELCIhIil9KSxHci5mb3JFYWNoKEpuPT57Y29uc3QgRHI9bXIuZ2V0KEpuKSwkcj1haS5nZXQoSm4pO21yLnNldChKbixuZXcgTWFwKFsuLi5Ecj8uZW50cmllcygpPz9bXSwuLi4kcj8uZW50''@;'; put 'put ''cmllcygpPz9bXV0pKX0pO2NvbnN0IF9pPVtdLE9uPVtdLHpyPXt9O3YuZm9yRWFjaChKbj0+e2NvbnN0e2VsZW1lbnQ6RHIscGxheWVyOiRyLGluc3RydWN0aW9uOndpfT1KbjtpZihkLmhhcyhEcikpe2lmKHJlLmhhcyhEcikpcmV0dXJuICRyLm9uRGVzdHJveSgoKT0+TXAoRHIsd2kudG9T''@;'; put 'put ''dHlsZXMpKSwkci5kaXNhYmxlZD0hMCwkci5vdmVycmlkZVRvdGFsVGltZSh3aS50b3RhbFRpbWUpLHZvaWQgaC5wdXNoKCRyKTtsZXQgZWE9enI7aWYoQ3Iuc2l6ZT4xKXtsZXQgdnQ9RHI7Y29uc3QgTnQ9W107Zm9yKDt2dD12dC5wYXJlbnROb2RlOyl7Y29uc3QgSHQ9Q3IuZ2V0KHZ0KTtp''@;'; put 'put ''ZihIdCl7ZWE9SHQ7YnJlYWt9TnQucHVzaCh2dCl9TnQuZm9yRWFjaChIdD0+Q3Iuc2V0KEh0LGVhKSl9Y29uc3QgZmE9dGhpcy5fYnVpbGRBbmltYXRpb24oJHIubmFtZXNwYWNlSWQsd2ksTW4sZixhaSxtcik7aWYoJHIuc2V0UmVhbFBsYXllcihmYSksZWE9PT16cilfaS5wdXNoKCRyKTtl''@;'; put 'put ''bHNle2NvbnN0IHZ0PXRoaXMucGxheWVyc0J5RWxlbWVudC5nZXQoZWEpO3Z0JiZ2dC5sZW5ndGgmJigkci5wYXJlbnRQbGF5ZXI9RG0odnQpKSxoLnB1c2goJHIpfX1lbHNlIEY3KERyLHdpLmZyb21TdHlsZXMpLCRyLm9uRGVzdHJveSgoKT0+TXAoRHIsd2kudG9TdHlsZXMpKSxPbi5wdXNo''@;'; put 'put ''KCRyKSxyZS5oYXMoRHIpJiZoLnB1c2goJHIpfSksT24uZm9yRWFjaChKbj0+e2NvbnN0IERyPWYuZ2V0KEpuLmVsZW1lbnQpO2lmKERyJiZEci5sZW5ndGgpe2NvbnN0ICRyPURtKERyKTtKbi5zZXRSZWFsUGxheWVyKCRyKX19KSxoLmZvckVhY2goSm49PntKbi5wYXJlbnRQbGF5ZXI/Sm4u''@;'; put 'put ''c3luY1BsYXllckV2ZW50cyhKbi5wYXJlbnRQbGF5ZXIpOkpuLmRlc3Ryb3koKX0pO2ZvcihsZXQgSm49MDtKbjxydC5sZW5ndGg7Sm4rKyl7Y29uc3QgRHI9cnRbSm5dLCRyPURyW2UzXTtpZihpXyhEcixnTyksJHImJiRyLmhhc0FuaW1hdGlvbiljb250aW51ZTtsZXQgd2k9W107aWYoTS5z''@;'; put 'put ''aXplKXtsZXQgZmE9TS5nZXQoRHIpO2ZhJiZmYS5sZW5ndGgmJndpLnB1c2goLi4uZmEpO2xldCB2dD10aGlzLmRyaXZlci5xdWVyeShEcixQRywhMCk7Zm9yKGxldCBOdD0wO050PHZ0Lmxlbmd0aDtOdCsrKXtsZXQgSHQ9TS5nZXQodnRbTnRdKTtIdCYmSHQubGVuZ3RoJiZ3aS5wdXNoKC4u''@;'; put 'put ''Lkh0KX19Y29uc3QgZWE9d2kuZmlsdGVyKGZhPT4hZmEuZGVzdHJveWVkKTtlYS5sZW5ndGg/QSRlKHRoaXMsRHIsZWEpOnRoaXMucHJvY2Vzc0xlYXZlTm9kZShEcil9cmV0dXJuIHJ0Lmxlbmd0aD0wLF9pLmZvckVhY2goSm49Pnt0aGlzLnBsYXllcnMucHVzaChKbiksSm4ub25Eb25lKCgp''@;'; put 'put ''PT57Sm4uZGVzdHJveSgpO2NvbnN0IERyPXRoaXMucGxheWVycy5pbmRleE9mKEpuKTt0aGlzLnBsYXllcnMuc3BsaWNlKERyLDEpfSksSm4ucGxheSgpfSksX2l9YWZ0ZXJGbHVzaChsKXt0aGlzLl9mbHVzaEZucy5wdXNoKGwpfWFmdGVyRmx1c2hBbmltYXRpb25zRG9uZShsKXt0aGlzLl93''@;'; put 'put ''aGVuUXVpZXRGbnMucHVzaChsKX1fZ2V0UHJldmlvdXNQbGF5ZXJzKGwsYSxkLGgsZil7bGV0IHY9W107aWYoYSl7Y29uc3QgTT10aGlzLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50LmdldChsKTtNJiYodj1NKX1lbHNle2NvbnN0IE09dGhpcy5wbGF5ZXJzQnlFbGVtZW50LmdldChsKTtpZihN''@;'; put 'put ''KXtjb25zdCBEPSFmfHxmPT1pRTtNLmZvckVhY2goWj0+e1oucXVldWVkfHwhRCYmWi50cmlnZ2VyTmFtZSE9aHx8di5wdXNoKFopfSl9fXJldHVybihkfHxoKSYmKHY9di5maWx0ZXIoTT0+IShkJiZkIT1NLm5hbWVzcGFjZUlkfHxoJiZoIT1NLnRyaWdnZXJOYW1lKSkpLHZ9X2JlZm9yZUFu''@;'; put 'put ''aW1hdGlvbkJ1aWxkKGwsYSxkKXtjb25zdCBmPWEuZWxlbWVudCx2PWEuaXNSZW1vdmFsVHJhbnNpdGlvbj92b2lkIDA6bCxNPWEuaXNSZW1vdmFsVHJhbnNpdGlvbj92b2lkIDA6YS50cmlnZ2VyTmFtZTtmb3IoY29uc3QgRCBvZiBhLnRpbWVsaW5lcyl7Y29uc3QgWj1ELmVsZW1lbnQscmU9''@;'; put 'put ''WiE9PWYsY2U9VGgoZCxaLFtdKTt0aGlzLl9nZXRQcmV2aW91c1BsYXllcnMoWixyZSx2LE0sYS50b1N0YXRlKS5mb3JFYWNoKEVlPT57Y29uc3QgQmU9RWUuZ2V0UmVhbFBsYXllcigpO0JlLmJlZm9yZURlc3Ryb3kmJkJlLmJlZm9yZURlc3Ryb3koKSxFZS5kZXN0cm95KCksY2UucHVzaChF''@;'; put 'put ''ZSl9KX1GNyhmLGEuZnJvbVN0eWxlcyl9X2J1aWxkQW5pbWF0aW9uKGwsYSxkLGgsZix2KXtjb25zdCBNPWEudHJpZ2dlck5hbWUsRD1hLmVsZW1lbnQsWj1bXSxyZT1uZXcgU2V0LGNlPW5ldyBTZXQsYmU9YS50aW1lbGluZXMubWFwKEJlPT57Y29uc3QgcWU9QmUuZWxlbWVudDtyZS5hZGQo''@;'; put 'put ''cWUpO2NvbnN0IHJ0PXFlW2UzXTtpZihydCYmcnQucmVtb3ZlZEJlZm9yZVF1ZXJpZWQpcmV0dXJuIG5ldyB3eChCZS5kdXJhdGlvbixCZS5kZWxheSk7Y29uc3QgcHQ9cWUhPT1ELGR0PWZ1bmN0aW9uIGskZShjKXtjb25zdCBsPVtdO3JldHVybiBqaGUoYyxsKSxsfSgoZC5nZXQocWUpfHx3''@;'; put 'put ''JGUpLm1hcChNbj0+TW4uZ2V0UmVhbFBsYXllcigpKSkuZmlsdGVyKE1uPT4hIU1uLmVsZW1lbnQmJk1uLmVsZW1lbnQ9PT1xZSksSnQ9Zi5nZXQocWUpLHZuPXYuZ2V0KHFlKSxDbj1iaGUodGhpcy5fbm9ybWFsaXplcixCZS5rZXlmcmFtZXMsSnQsdm4pLHRuPXRoaXMuX2J1aWxkUGxheWVy''@;'; put 'put ''KEJlLENuLGR0KTtpZihCZS5zdWJUaW1lbGluZSYmaCYmY2UuYWRkKHFlKSxwdCl7Y29uc3QgTW49bmV3IEtHKGwsTSxxZSk7TW4uc2V0UmVhbFBsYXllcih0biksWi5wdXNoKE1uKX1yZXR1cm4gdG59KTtaLmZvckVhY2goQmU9PntUaCh0aGlzLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50LEJl''@;'; put 'put ''LmVsZW1lbnQsW10pLnB1c2goQmUpLEJlLm9uRG9uZSgoKT0+ZnVuY3Rpb24geCRlKGMsbCxhKXtsZXQgZD1jLmdldChsKTtpZihkKXtpZihkLmxlbmd0aCl7Y29uc3QgaD1kLmluZGV4T2YoYSk7ZC5zcGxpY2UoaCwxKX0wPT1kLmxlbmd0aCYmYy5kZWxldGUobCl9cmV0dXJuIGR9KHRoaXMu''@;'; put 'put ''cGxheWVyc0J5UXVlcmllZEVsZW1lbnQsQmUuZWxlbWVudCxCZSkpfSkscmUuZm9yRWFjaChCZT0+RjIoQmUsTWhlKSk7Y29uc3QgRWU9RG0oYmUpO3JldHVybiBFZS5vbkRlc3Ryb3koKCk9PntyZS5mb3JFYWNoKEJlPT5pXyhCZSxNaGUpKSxNcChELGEudG9TdHlsZXMpfSksY2UuZm9yRWFj''@;'; put 'put ''aChCZT0+e1RoKGgsQmUsW10pLnB1c2goRWUpfSksRWV9X2J1aWxkUGxheWVyKGwsYSxkKXtyZXR1cm4gYS5sZW5ndGg+MD90aGlzLmRyaXZlci5hbmltYXRlKGwuZWxlbWVudCxhLGwuZHVyYXRpb24sbC5kZWxheSxsLmVhc2luZyxkKTpuZXcgd3gobC5kdXJhdGlvbixsLmRlbGF5KX19Y2xh''@;'; put 'put ''c3MgS0d7Y29uc3RydWN0b3IobCxhLGQpe3RoaXMubmFtZXNwYWNlSWQ9bCx0aGlzLnRyaWdnZXJOYW1lPWEsdGhpcy5lbGVtZW50PWQsdGhpcy5fcGxheWVyPW5ldyB3eCx0aGlzLl9jb250YWluc1JlYWxQbGF5ZXI9ITEsdGhpcy5fcXVldWVkQ2FsbGJhY2tzPW5ldyBNYXAsdGhpcy5kZXN0''@;'; put 'put ''cm95ZWQ9ITEsdGhpcy5wYXJlbnRQbGF5ZXI9bnVsbCx0aGlzLm1hcmtlZEZvckRlc3Ryb3k9ITEsdGhpcy5kaXNhYmxlZD0hMSx0aGlzLnF1ZXVlZD0hMCx0aGlzLnRvdGFsVGltZT0wfXNldFJlYWxQbGF5ZXIobCl7dGhpcy5fY29udGFpbnNSZWFsUGxheWVyfHwodGhpcy5fcGxheWVyPWws''@;'; put 'put ''dGhpcy5fcXVldWVkQ2FsbGJhY2tzLmZvckVhY2goKGEsZCk9PnthLmZvckVhY2goaD0+VEcobCxkLHZvaWQgMCxoKSl9KSx0aGlzLl9xdWV1ZWRDYWxsYmFja3MuY2xlYXIoKSx0aGlzLl9jb250YWluc1JlYWxQbGF5ZXI9ITAsdGhpcy5vdmVycmlkZVRvdGFsVGltZShsLnRvdGFsVGltZSks''@;'; put 'put ''dGhpcy5xdWV1ZWQ9ITEpfWdldFJlYWxQbGF5ZXIoKXtyZXR1cm4gdGhpcy5fcGxheWVyfW92ZXJyaWRlVG90YWxUaW1lKGwpe3RoaXMudG90YWxUaW1lPWx9c3luY1BsYXllckV2ZW50cyhsKXtjb25zdCBhPXRoaXMuX3BsYXllcjthLnRyaWdnZXJDYWxsYmFjayYmbC5vblN0YXJ0KCgpPT5h''@;'; put 'put ''LnRyaWdnZXJDYWxsYmFjaygic3RhcnQiKSksbC5vbkRvbmUoKCk9PnRoaXMuZmluaXNoKCkpLGwub25EZXN0cm95KCgpPT50aGlzLmRlc3Ryb3koKSl9X3F1ZXVlRXZlbnQobCxhKXtUaCh0aGlzLl9xdWV1ZWRDYWxsYmFja3MsbCxbXSkucHVzaChhKX1vbkRvbmUobCl7dGhpcy5xdWV1ZWQm''@;'; put 'put ''JnRoaXMuX3F1ZXVlRXZlbnQoImRvbmUiLGwpLHRoaXMuX3BsYXllci5vbkRvbmUobCl9b25TdGFydChsKXt0aGlzLnF1ZXVlZCYmdGhpcy5fcXVldWVFdmVudCgic3RhcnQiLGwpLHRoaXMuX3BsYXllci5vblN0YXJ0KGwpfW9uRGVzdHJveShsKXt0aGlzLnF1ZXVlZCYmdGhpcy5fcXVldWVF''@;'; put 'put ''dmVudCgiZGVzdHJveSIsbCksdGhpcy5fcGxheWVyLm9uRGVzdHJveShsKX1pbml0KCl7dGhpcy5fcGxheWVyLmluaXQoKX1oYXNTdGFydGVkKCl7cmV0dXJuIXRoaXMucXVldWVkJiZ0aGlzLl9wbGF5ZXIuaGFzU3RhcnRlZCgpfXBsYXkoKXshdGhpcy5xdWV1ZWQmJnRoaXMuX3BsYXllci5w''@;'; put 'put ''bGF5KCl9cGF1c2UoKXshdGhpcy5xdWV1ZWQmJnRoaXMuX3BsYXllci5wYXVzZSgpfXJlc3RhcnQoKXshdGhpcy5xdWV1ZWQmJnRoaXMuX3BsYXllci5yZXN0YXJ0KCl9ZmluaXNoKCl7dGhpcy5fcGxheWVyLmZpbmlzaCgpfWRlc3Ryb3koKXt0aGlzLmRlc3Ryb3llZD0hMCx0aGlzLl9wbGF5''@;'; put 'put ''ZXIuZGVzdHJveSgpfXJlc2V0KCl7IXRoaXMucXVldWVkJiZ0aGlzLl9wbGF5ZXIucmVzZXQoKX1zZXRQb3NpdGlvbihsKXt0aGlzLnF1ZXVlZHx8dGhpcy5fcGxheWVyLnNldFBvc2l0aW9uKGwpfWdldFBvc2l0aW9uKCl7cmV0dXJuIHRoaXMucXVldWVkPzA6dGhpcy5fcGxheWVyLmdldFBv''@;'; put 'put ''c2l0aW9uKCl9dHJpZ2dlckNhbGxiYWNrKGwpe2NvbnN0IGE9dGhpcy5fcGxheWVyO2EudHJpZ2dlckNhbGxiYWNrJiZhLnRyaWdnZXJDYWxsYmFjayhsKX19ZnVuY3Rpb24geE8oYyl7cmV0dXJuIGMmJjE9PT1jLm5vZGVUeXBlfWZ1bmN0aW9uIE5oZShjLGwpe2NvbnN0IGE9Yy5zdHlsZS5k''@;'; put 'put ''aXNwbGF5O3JldHVybiBjLnN0eWxlLmRpc3BsYXk9bD8/Im5vbmUiLGF9ZnVuY3Rpb24gVmhlKGMsbCxhLGQsaCl7Y29uc3QgZj1bXTthLmZvckVhY2goRD0+Zi5wdXNoKE5oZShEKSkpO2NvbnN0IHY9W107ZC5mb3JFYWNoKChELFopPT57Y29uc3QgcmU9bmV3IE1hcDtELmZvckVhY2goY2U9''@;'; put 'put ''Pntjb25zdCBiZT1sLmNvbXB1dGVTdHlsZShaLGNlLGgpO3JlLnNldChjZSxiZSksKCFiZXx8MD09YmUubGVuZ3RoKSYmKFpbZTNdPUMkZSx2LnB1c2goWikpfSksYy5zZXQoWixyZSl9KTtsZXQgTT0wO3JldHVybiBhLmZvckVhY2goRD0+TmhlKEQsZltNKytdKSksdn1mdW5jdGlvbiBCaGUo''@;'; put 'put ''YyxsKXtjb25zdCBhPW5ldyBNYXA7aWYoYy5mb3JFYWNoKE09PmEuc2V0KE0sW10pKSwwPT1sLmxlbmd0aClyZXR1cm4gYTtjb25zdCBoPW5ldyBTZXQobCksZj1uZXcgTWFwO2Z1bmN0aW9uIHYoTSl7aWYoIU0pcmV0dXJuIDE7bGV0IEQ9Zi5nZXQoTSk7aWYoRClyZXR1cm4gRDtjb25zdCBa''@;'; put 'put ''PU0ucGFyZW50Tm9kZTtyZXR1cm4gRD1hLmhhcyhaKT9aOmguaGFzKFopPzE6dihaKSxmLnNldChNLEQpLER9cmV0dXJuIGwuZm9yRWFjaChNPT57Y29uc3QgRD12KE0pOzEhPT1EJiZhLmdldChEKS5wdXNoKE0pfSksYX1mdW5jdGlvbiBGMihjLGwpe2MuY2xhc3NMaXN0Py5hZGQobCl9ZnVu''@;'; put 'put ''Y3Rpb24gaV8oYyxsKXtjLmNsYXNzTGlzdD8ucmVtb3ZlKGwpfWZ1bmN0aW9uIEEkZShjLGwsYSl7RG0oYSkub25Eb25lKCgpPT5jLnByb2Nlc3NMZWF2ZU5vZGUobCkpfWZ1bmN0aW9uIGpoZShjLGwpe2ZvcihsZXQgYT0wO2E8Yy5sZW5ndGg7YSsrKXtjb25zdCBkPWNbYV07ZCBpbnN0YW5j''@;'; put 'put ''ZW9mIFIwZT9qaGUoZC5wbGF5ZXJzLGwpOmwucHVzaChkKX19ZnVuY3Rpb24gemhlKGMsbCxhKXtjb25zdCBkPWEuZ2V0KGMpO2lmKCFkKXJldHVybiExO2xldCBoPWwuZ2V0KGMpO3JldHVybiBoP2QuZm9yRWFjaChmPT5oLmFkZChmKSk6bC5zZXQoYyxkKSxhLmRlbGV0ZShjKSwhMH1jbGFz''@;'; put 'put ''cyBhRXtjb25zdHJ1Y3RvcihsLGEsZCxoKXt0aGlzLl9kcml2ZXI9YSx0aGlzLl9ub3JtYWxpemVyPWQsdGhpcy5fdHJpZ2dlckNhY2hlPXt9LHRoaXMub25SZW1vdmFsQ29tcGxldGU9KGYsdik9Pnt9LHRoaXMuX3RyYW5zaXRpb25FbmdpbmU9bmV3IE0kZShsLmJvZHksYSxkLGgpLHRoaXMu''@;'; put 'put ''X3RpbWVsaW5lRW5naW5lPW5ldyBtJGUobC5ib2R5LGEsZCksdGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5vblJlbW92YWxDb21wbGV0ZT0oZix2KT0+dGhpcy5vblJlbW92YWxDb21wbGV0ZShmLHYpfXJlZ2lzdGVyVHJpZ2dlcihsLGEsZCxoLGYpe2NvbnN0IHY9bCsiLSIraDtsZXQgTT10aGlz''@;'; put 'put ''Ll90cmlnZ2VyQ2FjaGVbdl07aWYoIU0pe2NvbnN0IEQ9W10scmU9QkcodGhpcy5fZHJpdmVyLGYsRCxbXSk7aWYoRC5sZW5ndGgpdGhyb3cgZnVuY3Rpb24geUdlKGMsbCl7cmV0dXJuIG5ldyBRbigzNDA0LCExKX0oKTtNPWZ1bmN0aW9uIGgkZShjLGwsYSl7cmV0dXJuIG5ldyBmJGUoYyxs''@;'; put 'put ''LGEpfShoLHJlLHRoaXMuX25vcm1hbGl6ZXIpLHRoaXMuX3RyaWdnZXJDYWNoZVt2XT1NfXRoaXMuX3RyYW5zaXRpb25FbmdpbmUucmVnaXN0ZXJUcmlnZ2VyKGEsaCxNKX1yZWdpc3RlcihsLGEpe3RoaXMuX3RyYW5zaXRpb25FbmdpbmUucmVnaXN0ZXIobCxhKX1kZXN0cm95KGwsYSl7dGhp''@;'; put 'put ''cy5fdHJhbnNpdGlvbkVuZ2luZS5kZXN0cm95KGwsYSl9b25JbnNlcnQobCxhLGQsaCl7dGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5pbnNlcnROb2RlKGwsYSxkLGgpfW9uUmVtb3ZlKGwsYSxkKXt0aGlzLl90cmFuc2l0aW9uRW5naW5lLnJlbW92ZU5vZGUobCxhLGQpfWRpc2FibGVBbmltYXRp''@;'; put 'put ''b25zKGwsYSl7dGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5tYXJrRWxlbWVudEFzRGlzYWJsZWQobCxhKX1wcm9jZXNzKGwsYSxkLGgpe2lmKCJAIj09ZC5jaGFyQXQoMCkpe2NvbnN0W2Ysdl09eWhlKGQpO3RoaXMuX3RpbWVsaW5lRW5naW5lLmNvbW1hbmQoZixhLHYsaCl9ZWxzZSB0aGlzLl90''@;'; put 'put ''cmFuc2l0aW9uRW5naW5lLnRyaWdnZXIobCxhLGQsaCl9bGlzdGVuKGwsYSxkLGgsZil7aWYoIkAiPT1kLmNoYXJBdCgwKSl7Y29uc3RbdixNXT15aGUoZCk7cmV0dXJuIHRoaXMuX3RpbWVsaW5lRW5naW5lLmxpc3Rlbih2LGEsTSxmKX1yZXR1cm4gdGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5s''@;'; put 'put ''aXN0ZW4obCxhLGQsaCxmKX1mbHVzaChsPS0xKXt0aGlzLl90cmFuc2l0aW9uRW5naW5lLmZsdXNoKGwpfWdldCBwbGF5ZXJzKCl7cmV0dXJuWy4uLnRoaXMuX3RyYW5zaXRpb25FbmdpbmUucGxheWVycywuLi50aGlzLl90aW1lbGluZUVuZ2luZS5wbGF5ZXJzXX13aGVuUmVuZGVyaW5nRG9u''@;'; put 'put ''ZSgpe3JldHVybiB0aGlzLl90cmFuc2l0aW9uRW5naW5lLndoZW5SZW5kZXJpbmdEb25lKCl9YWZ0ZXJGbHVzaEFuaW1hdGlvbnNEb25lKGwpe3RoaXMuX3RyYW5zaXRpb25FbmdpbmUuYWZ0ZXJGbHVzaEFuaW1hdGlvbnNEb25lKGwpfX1jbGFzcyBvRXtzdGF0aWN7dGhpcy5pbml0aWFsU3R5''@;'; put 'put ''bGVzQnlFbGVtZW50PW5ldyBXZWFrTWFwfWNvbnN0cnVjdG9yKGwsYSxkKXt0aGlzLl9lbGVtZW50PWwsdGhpcy5fc3RhcnRTdHlsZXM9YSx0aGlzLl9lbmRTdHlsZXM9ZCx0aGlzLl9zdGF0ZT0wO2xldCBoPW9FLmluaXRpYWxTdHlsZXNCeUVsZW1lbnQuZ2V0KGwpO2h8fG9FLmluaXRpYWxT''@;'; put 'put ''dHlsZXNCeUVsZW1lbnQuc2V0KGwsaD1uZXcgTWFwKSx0aGlzLl9pbml0aWFsU3R5bGVzPWh9c3RhcnQoKXt0aGlzLl9zdGF0ZTwxJiYodGhpcy5fc3RhcnRTdHlsZXMmJk1wKHRoaXMuX2VsZW1lbnQsdGhpcy5fc3RhcnRTdHlsZXMsdGhpcy5faW5pdGlhbFN0eWxlcyksdGhpcy5fc3RhdGU9''@;'; put 'put ''MSl9ZmluaXNoKCl7dGhpcy5zdGFydCgpLHRoaXMuX3N0YXRlPDImJihNcCh0aGlzLl9lbGVtZW50LHRoaXMuX2luaXRpYWxTdHlsZXMpLHRoaXMuX2VuZFN0eWxlcyYmKE1wKHRoaXMuX2VsZW1lbnQsdGhpcy5fZW5kU3R5bGVzKSx0aGlzLl9lbmRTdHlsZXM9bnVsbCksdGhpcy5fc3RhdGU9''@;'; put 'put ''MSl9ZGVzdHJveSgpe3RoaXMuZmluaXNoKCksdGhpcy5fc3RhdGU8MyYmKG9FLmluaXRpYWxTdHlsZXNCeUVsZW1lbnQuZGVsZXRlKHRoaXMuX2VsZW1lbnQpLHRoaXMuX3N0YXJ0U3R5bGVzJiYoRjcodGhpcy5fZWxlbWVudCx0aGlzLl9zdGFydFN0eWxlcyksdGhpcy5fZW5kU3R5bGVzPW51''@;'; put 'put ''bGwpLHRoaXMuX2VuZFN0eWxlcyYmKEY3KHRoaXMuX2VsZW1lbnQsdGhpcy5fZW5kU3R5bGVzKSx0aGlzLl9lbmRTdHlsZXM9bnVsbCksTXAodGhpcy5fZWxlbWVudCx0aGlzLl9pbml0aWFsU3R5bGVzKSx0aGlzLl9zdGF0ZT0zKX19ZnVuY3Rpb24gcUcoYyl7bGV0IGw9bnVsbDtyZXR1cm4g''@;'; put 'put ''Yy5mb3JFYWNoKChhLGQpPT57KGZ1bmN0aW9uIFIkZShjKXtyZXR1cm4iZGlzcGxheSI9PT1jfHwicG9zaXRpb24iPT09Y30pKGQpJiYobD1sfHxuZXcgTWFwLGwuc2V0KGQsYSkpfSksbH1jbGFzcyBVaGV7Y29uc3RydWN0b3IobCxhLGQsaCl7dGhpcy5lbGVtZW50PWwsdGhpcy5rZXlmcmFt''@;'; put 'put ''ZXM9YSx0aGlzLm9wdGlvbnM9ZCx0aGlzLl9zcGVjaWFsU3R5bGVzPWgsdGhpcy5fb25Eb25lRm5zPVtdLHRoaXMuX29uU3RhcnRGbnM9W10sdGhpcy5fb25EZXN0cm95Rm5zPVtdLHRoaXMuX2luaXRpYWxpemVkPSExLHRoaXMuX2ZpbmlzaGVkPSExLHRoaXMuX3N0YXJ0ZWQ9ITEsdGhpcy5f''@;'; put 'put ''ZGVzdHJveWVkPSExLHRoaXMuX29yaWdpbmFsT25Eb25lRm5zPVtdLHRoaXMuX29yaWdpbmFsT25TdGFydEZucz1bXSx0aGlzLnRpbWU9MCx0aGlzLnBhcmVudFBsYXllcj1udWxsLHRoaXMuY3VycmVudFNuYXBzaG90PW5ldyBNYXAsdGhpcy5fZHVyYXRpb249ZC5kdXJhdGlvbix0aGlzLl9k''@;'; put 'put ''ZWxheT1kLmRlbGF5fHwwLHRoaXMudGltZT10aGlzLl9kdXJhdGlvbit0aGlzLl9kZWxheX1fb25GaW5pc2goKXt0aGlzLl9maW5pc2hlZHx8KHRoaXMuX2ZpbmlzaGVkPSEwLHRoaXMuX29uRG9uZUZucy5mb3JFYWNoKGw9PmwoKSksdGhpcy5fb25Eb25lRm5zPVtdKX1pbml0KCl7dGhpcy5f''@;'; put 'put ''YnVpbGRQbGF5ZXIoKSx0aGlzLl9wcmVwYXJlUGxheWVyQmVmb3JlU3RhcnQoKX1fYnVpbGRQbGF5ZXIoKXtpZih0aGlzLl9pbml0aWFsaXplZClyZXR1cm47dGhpcy5faW5pdGlhbGl6ZWQ9ITA7Y29uc3QgbD10aGlzLmtleWZyYW1lczt0aGlzLmRvbVBsYXllcj10aGlzLl90cmlnZ2VyV2Vi''@;'; put 'put ''QW5pbWF0aW9uKHRoaXMuZWxlbWVudCxsLHRoaXMub3B0aW9ucyksdGhpcy5fZmluYWxLZXlmcmFtZT1sLmxlbmd0aD9sW2wubGVuZ3RoLTFdOm5ldyBNYXA7Y29uc3QgYT0oKT0+dGhpcy5fb25GaW5pc2goKTt0aGlzLmRvbVBsYXllci5hZGRFdmVudExpc3RlbmVyKCJmaW5pc2giLGEpLHRo''@;'; put 'put ''aXMub25EZXN0cm95KCgpPT57dGhpcy5kb21QbGF5ZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZmluaXNoIixhKX0pfV9wcmVwYXJlUGxheWVyQmVmb3JlU3RhcnQoKXt0aGlzLl9kZWxheT90aGlzLl9yZXNldERvbVBsYXllclN0YXRlKCk6dGhpcy5kb21QbGF5ZXIucGF1c2UoKX1fY29udmVy''@;'; put 'put ''dEtleWZyYW1lc1RvT2JqZWN0KGwpe2NvbnN0IGE9W107cmV0dXJuIGwuZm9yRWFjaChkPT57YS5wdXNoKE9iamVjdC5mcm9tRW50cmllcyhkKSl9KSxhfV90cmlnZ2VyV2ViQW5pbWF0aW9uKGwsYSxkKXtyZXR1cm4gbC5hbmltYXRlKHRoaXMuX2NvbnZlcnRLZXlmcmFtZXNUb09iamVjdChh''@;'; put 'put ''KSxkKX1vblN0YXJ0KGwpe3RoaXMuX29yaWdpbmFsT25TdGFydEZucy5wdXNoKGwpLHRoaXMuX29uU3RhcnRGbnMucHVzaChsKX1vbkRvbmUobCl7dGhpcy5fb3JpZ2luYWxPbkRvbmVGbnMucHVzaChsKSx0aGlzLl9vbkRvbmVGbnMucHVzaChsKX1vbkRlc3Ryb3kobCl7dGhpcy5fb25EZXN0''@;'; put 'put ''cm95Rm5zLnB1c2gobCl9cGxheSgpe3RoaXMuX2J1aWxkUGxheWVyKCksdGhpcy5oYXNTdGFydGVkKCl8fCh0aGlzLl9vblN0YXJ0Rm5zLmZvckVhY2gobD0+bCgpKSx0aGlzLl9vblN0YXJ0Rm5zPVtdLHRoaXMuX3N0YXJ0ZWQ9ITAsdGhpcy5fc3BlY2lhbFN0eWxlcyYmdGhpcy5fc3BlY2lh''@;'; put 'put ''bFN0eWxlcy5zdGFydCgpKSx0aGlzLmRvbVBsYXllci5wbGF5KCl9cGF1c2UoKXt0aGlzLmluaXQoKSx0aGlzLmRvbVBsYXllci5wYXVzZSgpfWZpbmlzaCgpe3RoaXMuaW5pdCgpLHRoaXMuX3NwZWNpYWxTdHlsZXMmJnRoaXMuX3NwZWNpYWxTdHlsZXMuZmluaXNoKCksdGhpcy5fb25GaW5p''@;'; put 'put ''c2goKSx0aGlzLmRvbVBsYXllci5maW5pc2goKX1yZXNldCgpe3RoaXMuX3Jlc2V0RG9tUGxheWVyU3RhdGUoKSx0aGlzLl9kZXN0cm95ZWQ9ITEsdGhpcy5fZmluaXNoZWQ9ITEsdGhpcy5fc3RhcnRlZD0hMSx0aGlzLl9vblN0YXJ0Rm5zPXRoaXMuX29yaWdpbmFsT25TdGFydEZucyx0aGlz''@;'; put 'put ''Ll9vbkRvbmVGbnM9dGhpcy5fb3JpZ2luYWxPbkRvbmVGbnN9X3Jlc2V0RG9tUGxheWVyU3RhdGUoKXt0aGlzLmRvbVBsYXllciYmdGhpcy5kb21QbGF5ZXIuY2FuY2VsKCl9cmVzdGFydCgpe3RoaXMucmVzZXQoKSx0aGlzLnBsYXkoKX1oYXNTdGFydGVkKCl7cmV0dXJuIHRoaXMuX3N0YXJ0''@;'; put 'put ''ZWR9ZGVzdHJveSgpe3RoaXMuX2Rlc3Ryb3llZHx8KHRoaXMuX2Rlc3Ryb3llZD0hMCx0aGlzLl9yZXNldERvbVBsYXllclN0YXRlKCksdGhpcy5fb25GaW5pc2goKSx0aGlzLl9zcGVjaWFsU3R5bGVzJiZ0aGlzLl9zcGVjaWFsU3R5bGVzLmRlc3Ryb3koKSx0aGlzLl9vbkRlc3Ryb3lGbnMu''@;'; put 'put ''Zm9yRWFjaChsPT5sKCkpLHRoaXMuX29uRGVzdHJveUZucz1bXSl9c2V0UG9zaXRpb24obCl7dm9pZCAwPT09dGhpcy5kb21QbGF5ZXImJnRoaXMuaW5pdCgpLHRoaXMuZG9tUGxheWVyLmN1cnJlbnRUaW1lPWwqdGhpcy50aW1lfWdldFBvc2l0aW9uKCl7cmV0dXJuKyh0aGlzLmRvbVBsYXll''@;'; put 'put ''ci5jdXJyZW50VGltZT8/MCkvdGhpcy50aW1lfWdldCB0b3RhbFRpbWUoKXtyZXR1cm4gdGhpcy5fZGVsYXkrdGhpcy5fZHVyYXRpb259YmVmb3JlRGVzdHJveSgpe2NvbnN0IGw9bmV3IE1hcDt0aGlzLmhhc1N0YXJ0ZWQoKSYmdGhpcy5fZmluYWxLZXlmcmFtZS5mb3JFYWNoKChkLGgpPT57''@;'; put 'put ''Im9mZnNldCIhPT1oJiZsLnNldChoLHRoaXMuX2ZpbmlzaGVkP2Q6VkcodGhpcy5lbGVtZW50LGgpKX0pLHRoaXMuY3VycmVudFNuYXBzaG90PWx9dHJpZ2dlckNhbGxiYWNrKGwpe2NvbnN0IGE9InN0YXJ0Ij09PWw/dGhpcy5fb25TdGFydEZuczp0aGlzLl9vbkRvbmVGbnM7YS5mb3JFYWNo''@;'; put 'put ''KGQ9PmQoKSksYS5sZW5ndGg9MH19Y2xhc3MgWmhle3ZhbGlkYXRlU3R5bGVQcm9wZXJ0eShsKXtyZXR1cm4hMH12YWxpZGF0ZUFuaW1hdGFibGVTdHlsZVByb3BlcnR5KGwpe3JldHVybiEwfW1hdGNoZXNFbGVtZW50KGwsYSl7cmV0dXJuITF9Y29udGFpbnNFbGVtZW50KGwsYSl7cmV0dXJu''@;'; put 'put ''IHdoZShsLGEpfWdldFBhcmVudEVsZW1lbnQobCl7cmV0dXJuIERHKGwpfXF1ZXJ5KGwsYSxkKXtyZXR1cm4gQ2hlKGwsYSxkKX1jb21wdXRlU3R5bGUobCxhLGQpe3JldHVybiBWRyhsLGEpfWFuaW1hdGUobCxhLGQsaCxmLHY9W10pe2NvbnN0IEQ9e2R1cmF0aW9uOmQsZGVsYXk6aCxmaWxs''@;'; put 'put ''OjA9PWg/ImJvdGgiOiJmb3J3YXJkcyJ9O2YmJihELmVhc2luZz1mKTtjb25zdCBaPW5ldyBNYXAscmU9di5maWx0ZXIoRWU9PkVlIGluc3RhbmNlb2YgVWhlKTsoZnVuY3Rpb24gVUdlKGMsbCl7cmV0dXJuIDA9PT1jfHwwPT09bH0pKGQsaCkmJnJlLmZvckVhY2goRWU9PntFZS5jdXJyZW50''@;'; put 'put ''U25hcHNob3QuZm9yRWFjaCgoQmUscWUpPT5aLnNldChxZSxCZSkpfSk7bGV0IGNlPWZ1bmN0aW9uIEJHZShjKXtyZXR1cm4gYy5sZW5ndGg/Y1swXWluc3RhbmNlb2YgTWFwP2M6Yy5tYXAobD0+bmV3IE1hcChPYmplY3QuZW50cmllcyhsKSkpOltdfShhKS5tYXAoRWU9Pm5ldyBNYXAoRWUp''@;'; put 'put ''KTtjZT1mdW5jdGlvbiBaR2UoYyxsLGEpe2lmKGEuc2l6ZSYmbC5sZW5ndGgpe2xldCBkPWxbMF0saD1bXTtpZihhLmZvckVhY2goKGYsdik9PntkLmhhcyh2KXx8aC5wdXNoKHYpLGQuc2V0KHYsZil9KSxoLmxlbmd0aClmb3IobGV0IGY9MTtmPGwubGVuZ3RoO2YrKyl7bGV0IHY9bFtmXTto''@;'; put 'put ''LmZvckVhY2goTT0+di5zZXQoTSxWRyhjLE0pKSl9fXJldHVybiBsfShsLGNlLFopO2NvbnN0IGJlPWZ1bmN0aW9uIEkkZShjLGwpe2xldCBhPW51bGwsZD1udWxsO3JldHVybiBBcnJheS5pc0FycmF5KGwpJiZsLmxlbmd0aD8oYT1xRyhsWzBdKSxsLmxlbmd0aD4xJiYoZD1xRyhsW2wubGVu''@;'; put 'put ''Z3RoLTFdKSkpOmwgaW5zdGFuY2VvZiBNYXAmJihhPXFHKGwpKSxhfHxkP25ldyBvRShjLGEsZCk6bnVsbH0obCxjZSk7cmV0dXJuIG5ldyBVaGUobCxjZSxELGJlKX19Y29uc3QgV2hlPSJALmRpc2FibGVkIjtjbGFzcyBZaGV7Y29uc3RydWN0b3IobCxhLGQsaCl7dGhpcy5uYW1lc3BhY2VJ''@;'; put 'put ''ZD1sLHRoaXMuZGVsZWdhdGU9YSx0aGlzLmVuZ2luZT1kLHRoaXMuX29uRGVzdHJveT1oLHRoaXMuXHUwMjc1dHlwZT0wfWdldCBkYXRhKCl7cmV0dXJuIHRoaXMuZGVsZWdhdGUuZGF0YX1kZXN0cm95Tm9kZShsKXt0aGlzLmRlbGVnYXRlLmRlc3Ryb3lOb2RlPy4obCl9ZGVzdHJveSgpe3Ro''@;'; put 'put ''aXMuZW5naW5lLmRlc3Ryb3kodGhpcy5uYW1lc3BhY2VJZCx0aGlzLmRlbGVnYXRlKSx0aGlzLmVuZ2luZS5hZnRlckZsdXNoQW5pbWF0aW9uc0RvbmUoKCk9PntxdWV1ZU1pY3JvdGFzaygoKT0+e3RoaXMuZGVsZWdhdGUuZGVzdHJveSgpfSl9KSx0aGlzLl9vbkRlc3Ryb3k/LigpfWNyZWF0''@;'; put 'put ''ZUVsZW1lbnQobCxhKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5jcmVhdGVFbGVtZW50KGwsYSl9Y3JlYXRlQ29tbWVudChsKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5jcmVhdGVDb21tZW50KGwpfWNyZWF0ZVRleHQobCl7cmV0dXJuIHRoaXMuZGVsZWdhdGUuY3JlYXRlVGV4dChsKX1hcHBlbmRD''@;'; put 'put ''aGlsZChsLGEpe3RoaXMuZGVsZWdhdGUuYXBwZW5kQ2hpbGQobCxhKSx0aGlzLmVuZ2luZS5vbkluc2VydCh0aGlzLm5hbWVzcGFjZUlkLGEsbCwhMSl9aW5zZXJ0QmVmb3JlKGwsYSxkLGg9ITApe3RoaXMuZGVsZWdhdGUuaW5zZXJ0QmVmb3JlKGwsYSxkKSx0aGlzLmVuZ2luZS5vbkluc2Vy''@;'; put 'put ''dCh0aGlzLm5hbWVzcGFjZUlkLGEsbCxoKX1yZW1vdmVDaGlsZChsLGEsZCl7dGhpcy5lbmdpbmUub25SZW1vdmUodGhpcy5uYW1lc3BhY2VJZCxhLHRoaXMuZGVsZWdhdGUpfXNlbGVjdFJvb3RFbGVtZW50KGwsYSl7cmV0dXJuIHRoaXMuZGVsZWdhdGUuc2VsZWN0Um9vdEVsZW1lbnQobCxh''@;'; put 'put ''KX1wYXJlbnROb2RlKGwpe3JldHVybiB0aGlzLmRlbGVnYXRlLnBhcmVudE5vZGUobCl9bmV4dFNpYmxpbmcobCl7cmV0dXJuIHRoaXMuZGVsZWdhdGUubmV4dFNpYmxpbmcobCl9c2V0QXR0cmlidXRlKGwsYSxkLGgpe3RoaXMuZGVsZWdhdGUuc2V0QXR0cmlidXRlKGwsYSxkLGgpfXJlbW92''@;'; put 'put ''ZUF0dHJpYnV0ZShsLGEsZCl7dGhpcy5kZWxlZ2F0ZS5yZW1vdmVBdHRyaWJ1dGUobCxhLGQpfWFkZENsYXNzKGwsYSl7dGhpcy5kZWxlZ2F0ZS5hZGRDbGFzcyhsLGEpfXJlbW92ZUNsYXNzKGwsYSl7dGhpcy5kZWxlZ2F0ZS5yZW1vdmVDbGFzcyhsLGEpfXNldFN0eWxlKGwsYSxkLGgpe3Ro''@;'; put 'put ''aXMuZGVsZWdhdGUuc2V0U3R5bGUobCxhLGQsaCl9cmVtb3ZlU3R5bGUobCxhLGQpe3RoaXMuZGVsZWdhdGUucmVtb3ZlU3R5bGUobCxhLGQpfXNldFByb3BlcnR5KGwsYSxkKXsiQCI9PWEuY2hhckF0KDApJiZhPT1XaGU/dGhpcy5kaXNhYmxlQW5pbWF0aW9ucyhsLCEhZCk6dGhpcy5kZWxl''@;'; put 'put ''Z2F0ZS5zZXRQcm9wZXJ0eShsLGEsZCl9c2V0VmFsdWUobCxhKXt0aGlzLmRlbGVnYXRlLnNldFZhbHVlKGwsYSl9bGlzdGVuKGwsYSxkKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5saXN0ZW4obCxhLGQpfWRpc2FibGVBbmltYXRpb25zKGwsYSl7dGhpcy5lbmdpbmUuZGlzYWJsZUFuaW1hdGlv''@;'; put 'put ''bnMobCxhKX19Y2xhc3MgTCRlIGV4dGVuZHMgWWhle2NvbnN0cnVjdG9yKGwsYSxkLGgsZil7c3VwZXIoYSxkLGgsZiksdGhpcy5mYWN0b3J5PWwsdGhpcy5uYW1lc3BhY2VJZD1hfXNldFByb3BlcnR5KGwsYSxkKXsiQCI9PWEuY2hhckF0KDApPyIuIj09YS5jaGFyQXQoMSkmJmE9PVdoZT90''@;'; put 'put ''aGlzLmRpc2FibGVBbmltYXRpb25zKGwsZD12b2lkIDA9PT1kfHwhIWQpOnRoaXMuZW5naW5lLnByb2Nlc3ModGhpcy5uYW1lc3BhY2VJZCxsLGEuc2xpY2UoMSksZCk6dGhpcy5kZWxlZ2F0ZS5zZXRQcm9wZXJ0eShsLGEsZCl9bGlzdGVuKGwsYSxkKXtpZigiQCI9PWEuY2hhckF0KDApKXtj''@;'; put 'put ''b25zdCBoPWZ1bmN0aW9uIE8kZShjKXtzd2l0Y2goYyl7Y2FzZSJib2R5IjpyZXR1cm4gZG9jdW1lbnQuYm9keTtjYXNlImRvY3VtZW50IjpyZXR1cm4gZG9jdW1lbnQ7Y2FzZSJ3aW5kb3ciOnJldHVybiB3aW5kb3c7ZGVmYXVsdDpyZXR1cm4gY319KGwpO2xldCBmPWEuc2xpY2UoMSksdj0i''@;'; put 'put ''IjtyZXR1cm4iQCIhPWYuY2hhckF0KDApJiYoW2Ysdl09ZnVuY3Rpb24gUCRlKGMpe2NvbnN0IGw9Yy5pbmRleE9mKCIuIik7cmV0dXJuW2Muc3Vic3RyaW5nKDAsbCksYy5zbGljZShsKzEpXX0oZikpLHRoaXMuZW5naW5lLmxpc3Rlbih0aGlzLm5hbWVzcGFjZUlkLGgsZix2LE09Pnt0aGlz''@;'; put 'put ''LmZhY3Rvcnkuc2NoZWR1bGVMaXN0ZW5lckNhbGxiYWNrKE0uX2RhdGF8fC0xLGQsTSl9KX1yZXR1cm4gdGhpcy5kZWxlZ2F0ZS5saXN0ZW4obCxhLGQpfX1jbGFzcyBGJGV7Y29uc3RydWN0b3IobCxhLGQpe3RoaXMuZGVsZWdhdGU9bCx0aGlzLmVuZ2luZT1hLHRoaXMuX3pvbmU9ZCx0aGlz''@;'; put 'put ''Ll9jdXJyZW50SWQ9MCx0aGlzLl9taWNyb3Rhc2tJZD0xLHRoaXMuX2FuaW1hdGlvbkNhbGxiYWNrc0J1ZmZlcj1bXSx0aGlzLl9yZW5kZXJlckNhY2hlPW5ldyBNYXAsdGhpcy5fY2RSZWN1ckRlcHRoPTAsYS5vblJlbW92YWxDb21wbGV0ZT0oaCxmKT0+e2NvbnN0IHY9Zj8ucGFyZW50Tm9k''@;'; put 'put ''ZShoKTt2JiZmLnJlbW92ZUNoaWxkKHYsaCl9fWNyZWF0ZVJlbmRlcmVyKGwsYSl7Y29uc3QgaD10aGlzLmRlbGVnYXRlLmNyZWF0ZVJlbmRlcmVyKGwsYSk7aWYoIWx8fCFhPy5kYXRhPy5hbmltYXRpb24pe2NvbnN0IFo9dGhpcy5fcmVuZGVyZXJDYWNoZTtsZXQgcmU9Wi5nZXQoaCk7cmV0''@;'; put 'put ''dXJuIHJlfHwocmU9bmV3IFloZSgiIixoLHRoaXMuZW5naW5lLCgpPT5aLmRlbGV0ZShoKSksWi5zZXQoaCxyZSkpLHJlfWNvbnN0IGY9YS5pZCx2PWEuaWQrIi0iK3RoaXMuX2N1cnJlbnRJZDt0aGlzLl9jdXJyZW50SWQrKyx0aGlzLmVuZ2luZS5yZWdpc3Rlcih2LGwpO2NvbnN0IE09Wj0+''@;'; put 'put ''e0FycmF5LmlzQXJyYXkoWik/Wi5mb3JFYWNoKE0pOnRoaXMuZW5naW5lLnJlZ2lzdGVyVHJpZ2dlcihmLHYsbCxaLm5hbWUsWil9O3JldHVybiBhLmRhdGEuYW5pbWF0aW9uLmZvckVhY2goTSksbmV3IEwkZSh0aGlzLHYsaCx0aGlzLmVuZ2luZSl9YmVnaW4oKXt0aGlzLl9jZFJlY3VyRGVw''@;'; put 'put ''dGgrKyx0aGlzLmRlbGVnYXRlLmJlZ2luJiZ0aGlzLmRlbGVnYXRlLmJlZ2luKCl9X3NjaGVkdWxlQ291bnRUYXNrKCl7cXVldWVNaWNyb3Rhc2soKCk9Pnt0aGlzLl9taWNyb3Rhc2tJZCsrfSl9c2NoZWR1bGVMaXN0ZW5lckNhbGxiYWNrKGwsYSxkKXtpZihsPj0wJiZsPHRoaXMuX21pY3Jv''@;'; put 'put ''dGFza0lkKXJldHVybiB2b2lkIHRoaXMuX3pvbmUucnVuKCgpPT5hKGQpKTtjb25zdCBoPXRoaXMuX2FuaW1hdGlvbkNhbGxiYWNrc0J1ZmZlcjswPT1oLmxlbmd0aCYmcXVldWVNaWNyb3Rhc2soKCk9Pnt0aGlzLl96b25lLnJ1bigoKT0+e2guZm9yRWFjaChmPT57Y29uc3RbdixNXT1mO3Yo''@;'; put 'put ''TSl9KSx0aGlzLl9hbmltYXRpb25DYWxsYmFja3NCdWZmZXI9W119KX0pLGgucHVzaChbYSxkXSl9ZW5kKCl7dGhpcy5fY2RSZWN1ckRlcHRoLS0sMD09dGhpcy5fY2RSZWN1ckRlcHRoJiZ0aGlzLl96b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5fc2NoZWR1bGVDb3VudFRhc2so''@;'; put 'put ''KSx0aGlzLmVuZ2luZS5mbHVzaCh0aGlzLl9taWNyb3Rhc2tJZCl9KSx0aGlzLmRlbGVnYXRlLmVuZCYmdGhpcy5kZWxlZ2F0ZS5lbmQoKX13aGVuUmVuZGVyaW5nRG9uZSgpe3JldHVybiB0aGlzLmVuZ2luZS53aGVuUmVuZGVyaW5nRG9uZSgpfX1sZXQgSCRlPSgoKT0+e2NsYXNzIGMgZXh0''@;'; put 'put ''ZW5kcyBhRXtjb25zdHJ1Y3RvcihhLGQsaCl7c3VwZXIoYSxkLGgsZmkoYmIse29wdGlvbmFsOiEwfSkpfW5nT25EZXN0cm95KCl7dGhpcy5mbHVzaCgpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHhyKHZzKSx4cihSRykseHIoTEcpKX19c3Rh''@;'; put 'put ''dGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSl9fXJldHVybiBjfSkoKTtjb25zdCBHaGU9W3twcm92aWRlOkxHLHVzZUZhY3Rvcnk6ZnVuY3Rpb24gTiRlKCl7cmV0dXJuIG5ldyBUaGV9fSx7cHJvdmlkZTphRSx1c2VDbGFzczpIJGV9LHtwcm92''@;'; put 'put ''aWRlOng4LHVzZUZhY3Rvcnk6ZnVuY3Rpb24gViRlKGMsbCxhKXtyZXR1cm4gbmV3IEYkZShjLGwsYSl9LGRlcHM6W2NaLGFFLFdhXX1dLFhHPVt7cHJvdmlkZTpSRyx1c2VGYWN0b3J5OigpPT5uZXcgWmhlfSx7cHJvdmlkZTpGayx1c2VWYWx1ZToiQnJvd3NlckFuaW1hdGlvbnMifSwuLi5H''@;'; put 'put ''aGVdLCRoZT1be3Byb3ZpZGU6UkcsdXNlQ2xhc3M6SUd9LHtwcm92aWRlOkZrLHVzZVZhbHVlOiJOb29wQW5pbWF0aW9ucyJ9LC4uLkdoZV07bGV0IEIkZT0oKCk9PntjbGFzcyBje3N0YXRpYyB3aXRoQ29uZmlnKGEpe3JldHVybntuZ01vZHVsZTpjLHByb3ZpZGVyczphLmRpc2FibGVBbmlt''@;'; put 'put ''YXRpb25zPyRoZTpYR319c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1raSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPUFyKHtwcm92aWRlcnM6WEcsaW1wb3J0czpbVG9lXX0pfX1yZXR1cm4g''@;'; put 'put ''Y30pKCksaiRlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt9bmdPbkluaXQoKXt9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtbm90LWZvdW5kIl1d''@;'; put 'put ''LGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxkZWNsczozLHZhcnM6MCxjb25zdHM6W1sxLCJjb250ZW50LWFyZWEiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJihkZSgwLCJkaXYiLDApKDEsInAiKSxMZSgyLCI0MDQgLSBOb3QgRm91bmQiKSxoZSgpKCkpfSxlbmNh''@;'; put 'put ''cHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpLEtoZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7fWRvd25sb2FkRmlsZShhLGQsaD0idHh0Iil7bGV0IGY9bmV3IEJsb2IoW2FdLHt0eXBlOiJ0ZXh0L3BsYWluIn0pO2lmKG5hdmlnYXRvci5hcHBWZXJzaW9uLnRvU3RyaW5nKCkuaW5k''@;'; put 'put ''ZXhPZigiLk5FVCIpPjApd2luZG93Lm5hdmlnYXRvci5tc1NhdmVCbG9iKGYsYCR7ZH0uJHtofWApO2Vsc2V7bGV0IHY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpO3YuaHJlZj0iZGF0YTp0ZXh0L3BsYWluLCIrZW5jb2RlVVJJQ29tcG9uZW50KGEpLHYuZG93bmxvYWQ9YCR7ZH0uJHto''@;'; put 'put ''fWAsZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh2KSx2LmNsaWNrKCksZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh2KX19cmVhZEZpbGUoYSl7cmV0dXJuIG5ldyBQcm9taXNlKChkLGgpPT57bGV0IGY9bmV3IEZpbGVSZWFkZXI7Zi5vbmxvYWQ9KCk9PntmLnJlc3VsdCYmZChKU09OLnBh''@;'; put 'put ''cnNlKGYucmVzdWx0LnRvU3RyaW5nKCkpKX0sZi5yZWFkQXNUZXh0KGEpfSl9Y2xlYXJVcGxvYWRJbnB1dChhKXthLnRhcmdldC52YWx1ZT0iIn1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9r''@;'; put 'put ''ZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9fXJldHVybiBjfSkoKTt2YXIgZ2c9eSg1OTQ4KTtjb25zdCBKRz1mdW5jdGlvbiBVJGUoYyl7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBjfHxDeShjKSYmIltvYmplY3QgU3ltYm9sXSI9PWJ5KGMpfTt2YXIgWiRl''@;'; put 'put ''PS9cLnxcWyg/OlteW1xdXSp8KFsiJ10pKD86KD8hXDEpW15cXF18XFwuKSo/XDEpXF0vLFckZT0vXlx3KiQvO2Z1bmN0aW9uIFFHKGMsbCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGN8fG51bGwhPWwmJiJmdW5jdGlvbiIhPXR5cGVvZiBsKXRocm93IG5ldyBUeXBlRXJyb3IoIkV4cGVjdGVk''@;'; put 'put ''IGEgZnVuY3Rpb24iKTt2YXIgYT1mdW5jdGlvbigpe3ZhciBkPWFyZ3VtZW50cyxoPWw/bC5hcHBseSh0aGlzLGQpOmRbMF0sZj1hLmNhY2hlO2lmKGYuaGFzKGgpKXJldHVybiBmLmdldChoKTt2YXIgdj1jLmFwcGx5KHRoaXMsZCk7cmV0dXJuIGEuY2FjaGU9Zi5zZXQoaCx2KXx8Zix2fTty''@;'; put 'put ''ZXR1cm4gYS5jYWNoZT1uZXcoUUcuQ2FjaGV8fGtXKSxhfVFHLkNhY2hlPWtXO2NvbnN0IEskZT1RRzt2YXIgUSRlPS9bXi5bXF1dK3xcWyg/OigtP1xkKyg/OlwuXGQrKT8pfChbIiddKSgoPzooPyFcMilbXlxcXXxcXC4pKj8pXDIpXF18KD89KD86XC58XFtcXSkoPzpcLnxcW1xdfCQpKS9n''@;'; put 'put ''LGVLZT0vXFwoXFwpPy9nLHRLZT1mdW5jdGlvbiBYJGUoYyl7dmFyIGw9SyRlKGMsZnVuY3Rpb24oZCl7cmV0dXJuIDUwMD09PWEuc2l6ZSYmYS5jbGVhcigpLGR9KSxhPWwuY2FjaGU7cmV0dXJuIGx9KGZ1bmN0aW9uKGMpe3ZhciBsPVtdO3JldHVybiA0Nj09PWMuY2hhckNvZGVBdCgwKSYm''@;'; put 'put ''bC5wdXNoKCIiKSxjLnJlcGxhY2UoUSRlLGZ1bmN0aW9uKGEsZCxoLGYpe2wucHVzaChoP2YucmVwbGFjZShlS2UsIiQxIik6ZHx8YSl9KSxsfSk7Y29uc3QgbktlPXRLZTt2YXIgcWhlPXVtP3VtLnByb3RvdHlwZTp2b2lkIDAsWGhlPXFoZT9xaGUudG9TdHJpbmc6dm9pZCAwO2NvbnN0IG9L''@;'; put 'put ''ZT1mdW5jdGlvbiBKaGUoYyl7aWYoInN0cmluZyI9PXR5cGVvZiBjKXJldHVybiBjO2lmKFN5KGMpKXJldHVybiBmdW5jdGlvbiByS2UoYyxsKXtmb3IodmFyIGE9LTEsZD1udWxsPT1jPzA6Yy5sZW5ndGgsaD1BcnJheShkKTsrK2E8ZDspaFthXT1sKGNbYV0sYSxjKTtyZXR1cm4gaH0oYyxK''@;'; put 'put ''aGUpKyIiO2lmKEpHKGMpKXJldHVybiBYaGU/WGhlLmNhbGwoYyk6IiI7dmFyIGw9YysiIjtyZXR1cm4iMCI9PWwmJjEvYz09LTEvMD8iLTAiOmx9LHVLZT1mdW5jdGlvbiBjS2UoYyxsKXtyZXR1cm4gU3koYyk/YzpmdW5jdGlvbiBZJGUoYyxsKXtpZihTeShjKSlyZXR1cm4hMTt2YXIgYT10''@;'; put 'put ''eXBlb2YgYztyZXR1cm4hKCJudW1iZXIiIT1hJiYic3ltYm9sIiE9YSYmImJvb2xlYW4iIT1hJiZudWxsIT1jJiYhSkcoYykpfHxXJGUudGVzdChjKXx8IVokZS50ZXN0KGMpfHxudWxsIT1sJiZjIGluIE9iamVjdChsKX0oYyxsKT9bY106bktlKGZ1bmN0aW9uIHNLZShjKXtyZXR1cm4gbnVs''@;'; put 'put ''bD09Yz8iIjpvS2UoYyl9KGMpKX0sZktlPWZ1bmN0aW9uIGhLZShjKXtpZigic3RyaW5nIj09dHlwZW9mIGN8fEpHKGMpKXJldHVybiBjO3ZhciBsPWMrIiI7cmV0dXJuIjAiPT1sJiYxL2M9PS0xLzA/Ii0wIjpsfSx5Yz1mdW5jdGlvbiBtS2UoYyxsLGEpe3ZhciBkPW51bGw9PWM/dm9pZCAw''@;'; put 'put ''OmZ1bmN0aW9uIHBLZShjLGwpe2Zvcih2YXIgYT0wLGQ9KGw9dUtlKGwsYykpLmxlbmd0aDtudWxsIT1jJiZhPGQ7KWM9Y1tmS2UobFthKytdKV07cmV0dXJuIGEmJmE9PWQ/Yzp2b2lkIDB9KGMsbCk7cmV0dXJuIHZvaWQgMD09PWQ/YTpkfTtsZXQga2g9KCgpPT57Y2xhc3MgY3tjb25zdHJ1''@;'; put 'put ''Y3RvcihhLGQsaCl7dGhpcy5zYXNTZXJ2aWNlPWEsdGhpcy5oZWxwZXJTZXJ2aWNlPWQsdGhpcy5sb2dnZXJTZXJ2aWNlPWgsdGhpcy5yZXNwb25zZT1uZXcgV24sdGhpcy5jaGFuZ2VkVGFibGU9bmV3IFduLHRoaXMuZGV0YWlscz1uZXcgV24sdGhpcy5kaWZmcz1uZXcgV24sdGhpcy5jb2x1''@;'; put 'put ''bW5zPW5ldyBXbix0aGlzLnZhbHVlcz1uZXcgV24sdGhpcy5maWx0ZXI9bmV3IFduLHRoaXMucXVlcnk9bmV3IFduLHRoaXMuc3VibWl0dERldGFpbD1uZXcgV24sdGhpcy5yZW1vdmVRdWVyeT1uZXcgV24sdGhpcy5zZXRTdWJtaXQ9bmV3IFduLHRoaXMuc2V0U3VibWl0TGlzdD1uZXcgV259''@;'; put 'put ''Y2FsbFNlcnZpY2UoYSxkLGgsZil7dmFyIHY9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7Y29uc3QgTT17fTtyZXR1cm4gTVtkXT1bYV0se2RhdGE6KHlpZWxkIHYuc2FzU2VydmljZS5yZXF1ZXN0KGgsTSkpLmFkYXB0ZXJSZXNwb25zZSxsaWJkczpmfX0pKCl9dXBkYXRlVGFibGUoYSxk''@;'; put 'put ''LGgsZix2LE0sRCl7dmFyIFo9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7bGV0IHJlPXtqc2RhdGE6ZH07aWYodil7bGV0IGJlPVoucGFyc2VGb3JtYXRzKHYpO3JlLiRqc2RhdGE9e2Zvcm1hdHM6YmV9fXJldHVybiByZVtoXT1bYV0seWllbGQgWi5zYXNTZXJ2aWNlLnJlcXVlc3QoZixy''@;'; put 'put ''ZSxELHtzdXBwcmVzc0Vycm9yQWJvcnRNb2RhbDpNLHN1cHByZXNzU3VjY2Vzc0Fib3J0TW9kYWw6TX0pfSkoKX1nZXRBcHByb3ZhbHMoYSxkLGgpe3ZhciBmPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2xldCB2PXt9O3JldHVybiB2W2RdPVthXSwoeWllbGQgZi5zYXNTZXJ2aWNlLnJl''@;'; put 'put ''cXVlc3QoaCx2KSkuYWRhcHRlclJlc3BvbnNlfSkoKX1zZW5kRGV0YWlscyhhLGQsaCl7dmFyIGY9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7bGV0IHY9T2JqZWN0LmFzc2lnbih7c3ViOiEwfSxhKTtmLnN1Ym1pdHREZXRhaWwubmV4dCh7ZGF0YTpoW2RdLHZpZXdEYXRhOnZ9KX0pKCl9''@;'; put 'put ''Z2V0U3VibWl0dHMoKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtyZXR1cm4oeWllbGQgYS5zYXNTZXJ2aWNlLnJlcXVlc3QoImVkaXRvcnMvZ2V0c3VibWl0cyIsbnVsbCkpLmFkYXB0ZXJSZXNwb25zZX0pKCl9dmlld0xpYnMoKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5j''@;'; put 'put ''dGlvbiooKXtyZXR1cm4oeWllbGQgYS5zYXNTZXJ2aWNlLnJlcXVlc3QoInB1YmxpYy92aWV3bGlicyIsbnVsbCkpLmFkYXB0ZXJSZXNwb25zZX0pKCl9cmVmcmVzaExpYkluZm8oYSl7dmFyIGQ9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7Y29uc3QgaD17bGliMnJlZnJlc2g6W3tsaWJy''@;'; put 'put ''ZWY6YX1dfTtyZXR1cm4oeWllbGQgZC5zYXNTZXJ2aWNlLnJlcXVlc3QoInB1YmxpYy9yZWZyZXNobGliaW5mbyIsaCkpLmFkYXB0ZXJSZXNwb25zZX0pKCl9dmlld1RhYmxlcyhhKXt2YXIgZD10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtsZXQgaD17U0FTQ29udHJvbFRhYmxlOlt7TVBM''@;'; put 'put ''SUI6YX1dfTtyZXR1cm4oeWllbGQgZC5zYXNTZXJ2aWNlLnJlcXVlc3QoInB1YmxpYy92aWV3dGFibGVzIixoKSkuYWRhcHRlclJlc3BvbnNlfSkoKX12aWV3RGF0YShhLGQpe3ZhciBoPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2xldCBmPXtTQVNDb250cm9sVGFibGU6W3tMSUJEUzph''@;'; put 'put ''LEZJTFRFUl9SSzpkfV19O3JldHVybih5aWVsZCBoLnNhc1NlcnZpY2UucmVxdWVzdCgicHVibGljL3ZpZXdkYXRhIixmKSkuYWRhcHRlclJlc3BvbnNlfSkoKX12aWV3RGF0YVNlYXJjaChhKXt2YXIgZD10aGlzO3JldHVybiBlZShmdW5jdGlvbiooaCxmPSExLHYsTSl7bGV0IFo9e1NBU0Nv''@;'; put 'put ''bnRyb2xUYWJsZTpbe1NFQVJDSFRZUEU6aC5sZW5ndGg+MD9mPyJOVU0iOiJDSEFSIjoiTk9ORSIsU0VBUkNIVkFMOmgsTElCRFM6dixGSUxURVJfUks6TX1dfTtyZXR1cm4oeWllbGQgZC5zYXNTZXJ2aWNlLnJlcXVlc3QoInB1YmxpYy92aWV3ZGF0YSIsWikpLmFkYXB0ZXJSZXNwb25zZX0p''@;'; put 'put ''LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1nZXRYTE1hcFJ1bGVzKGEpe3ZhciBkPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2NvbnN0IGg9e2dldHhsbWFwc19pbjpbe1hMTUFQX0lEOmF9XX07cmV0dXJuKHlpZWxkIGQuc2FzU2VydmljZS5yZXF1ZXN0KCJlZGl0b3JzL2dldHhsbWFwcyIs''@;'; put 'put ''aCkpLmFkYXB0ZXJSZXNwb25zZX0pKCl9c2hvd0RpZmZzKGEsZCxoKXt2YXIgZj10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtsZXQgdj17fTtyZXR1cm4gdltkXT1bYV0sKHlpZWxkIGYuc2FzU2VydmljZS5yZXF1ZXN0KGgsdix7dXNlQ29tcHV0ZUFwaTpudWxsfSkpLmFkYXB0ZXJSZXNw''@;'; put 'put ''b25zZX0pKCl9cmVqZWN0aW5nKGEsZCxoKXt2YXIgZj10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtsZXQgdj17fTtyZXR1cm4gdltkXT1bYV0sKHlpZWxkIGYuc2FzU2VydmljZS5yZXF1ZXN0KGgsdix7dXNlQ29tcHV0ZUFwaTpudWxsfSkpLmFkYXB0ZXJSZXNwb25zZX0pKCl9YXBwcm92''@;'; put 'put ''ZVRhYmxlKGEsZCxoKXt2YXIgZj10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtsZXQgdj17fTtyZXR1cm4gdltkXT1bYV0sKHlpZWxkIGYuc2FzU2VydmljZS5yZXF1ZXN0KGgsdikpLmFkYXB0ZXJSZXNwb25zZX0pKCl9Z2V0SGlzdG9yeShhLGQsaCl7dmFyIGY9dGhpcztyZXR1cm4gZWUo''@;'; put 'put ''ZnVuY3Rpb24qKCl7bGV0IHY9e307cmV0dXJuIHZbZF09W2FdLCh5aWVsZCBmLnNhc1NlcnZpY2UucmVxdWVzdChoLHYpKS5hZGFwdGVyUmVzcG9uc2V9KSgpfXNldFF1ZXJ5VmFyaWFibGVzKGEsZCl7dGhpcy5jb2x1bW5zLm5leHQoe2RhdGE6e2NvbHM6ZH0sbGliZHM6YX0pfWdldENoYW5n''@;'; put 'put ''ZUluZm8oYSl7dmFyIGQ9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7bGV0IGY9e1NBU0NvbnRyb2xUYWJsZTpbe1RBQkxFOmF9XX07cmV0dXJuKHlpZWxkIGQuc2FzU2VydmljZS5yZXF1ZXN0KCJwdWJsaWMvZ2V0Y2hhbmdlaW5mbyIsZikpLmFkYXB0ZXJSZXNwb25zZX0pKCl9Z2V0UXVl''@;'; put 'put ''cnlWYWx1ZXMoYSxkLGgsZix2KXt2YXIgTT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtsZXQgRD17aXdhbnQ6W3tsaWJkczpkLGNvbDphLC4uLmYmJntTVEFSVFJPVzpmfSwuLi52JiZ7Uk9XUzp2fX1dfTtyZXR1cm4gaC5sZW5ndGg+MCYmKEQuRklMVEVSUVVFUlk9aCksKHlpZWxkIE0u''@;'; put 'put ''c2FzU2VydmljZS5yZXF1ZXN0KCJwdWJsaWMvZ2V0Y29sdmFscyIsRCkuY2F0Y2goWj0+e3Rocm93IFp9KSkuYWRhcHRlclJlc3BvbnNlfSkoKX1zYXZlUXVlcnkoYSxkKXt2YXIgaD10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtsZXQgZj17aXdhbnQ6W3tmaWx0ZXJfdGFibGU6YX1dLGZp''@;'; put 'put ''bHRlcnF1ZXJ5OmR9O2NvbnN0IHY9eWllbGQgaC5zYXNTZXJ2aWNlLnJlcXVlc3QoInB1YmxpYy92YWxpZGF0ZWZpbHRlciIsZik7cmV0dXJuIGguZmlsdGVyLm5leHQodiksdi5hZGFwdGVyUmVzcG9uc2V9KSgpfW9wZW5UYWJsZShhKXt2YXIgZD10aGlzO3JldHVybiBlZShmdW5jdGlvbioo''@;'; put 'put ''KXtsZXQgaD17aXdhbnQ6W3t0YWJsZV9pZDphfV19O3JldHVybih5aWVsZCBkLnNhc1NlcnZpY2UucmVxdWVzdCgiYXVkaXRvcnMvZ2V0c3RhZ2V0YWJsZSIsaCkpLmFkYXB0ZXJSZXNwb25zZX0pKCl9Y2hlY2tPcGVyYXRvcihhLGQsaCl7bGV0IGY7c3dpdGNoKGEpe2Nhc2UiQkVUV0VFTiI6''@;'; put 'put ''ZCBpbnN0YW5jZW9mIEFycmF5JiYoIiIhPT1kWzBdJiYiIiE9PWRbMV0/Zj1kWzBdKyIgQU5EICIrZFsxXToiIiE9PWRbMF0mJiIiPT09ZFsxXT8oZFsxXT0iLiIsZj1kWzBdKyIgQU5EICIrZFsxXSk6IiI9PT1kWzBdJiYiIiE9PWRbMV0/KGRbMF09Ii4iLGY9ZFswXSsiIEFORCAiK2RbMV0p''@;'; put 'put ''OihkWzBdPSIuIixkWzFdPSIuIixmPWRbMF0rIiBBTkQgIitkWzFdKSk7YnJlYWs7Y2FzZSJJTiI6Y2FzZSJOT1QgSU4iOmxldCBNPVtdO2lmKHR5cGVvZiBkPCJ1Iilmb3IobGV0IEQ9MDtEPGQubGVuZ3RoO0QrKykhMD09PWRbRF0uY2hlY2tlZCYmKCJjaGFyIj09PWg/KCJzdHJpbmciPT10''@;'; put 'put ''eXBlb2YgZFtEXS52YWwmJihkW0RdLnZhbD1kW0RdLnZhbC5yZXBsYWNlKCInIiwiJyciKSksTS5wdXNoKCInIitkW0RdLnZhbCsiJyIpKToobnVsbD09PWRbRF0udmFsJiYoZFtEXS52YWw9Ii4iKSxNLnB1c2goZFtEXS52YWwpKSk7ZD0iKCIrTSsiKSI7YnJlYWs7Y2FzZSJDT05UQUlOUyI6''@;'; put 'put ''YT0iPyI7YnJlYWs7Y2FzZSJOT1QgRVFVQUwiOmE9Im5lIn1yZXR1cm4ibnVtIj09PWgmJm51bGw9PT1kJiYoZD0iLiIpLCJQbGVhc2Ugc2VsZWN0IHZhbHVlIj09PWQmJihkPSIiKSwtMSE9PVsiPSIsIj4iLCI8IiwiPD0iLCI+PSIsIm5lIl0uaW5kZXhPZihhKSYmIm51bSI9PT1oJiYiIj09''@;'; put 'put ''PWQmJihkPSIuIiksIkJFVFdFRU4iPT09YT97dmFsdWU6ZixvcGVyYXRvcjphfTp7dmFsdWU6ZCxvcGVyYXRvcjphfX13aGVyZUNsYXVzZUNyZWF0b3IoYSxkLGgpe2xldCBELGNlLGY9IiIsWj0iIixyZT1bXTtmb3IobGV0IEVlPTA7RWU8YS5xdWVyeU9iai5sZW5ndGg7RWUrKyl7bGV0IEJl''@;'; put 'put ''PSIiLHFlPWEucXVlcnlPYmpbRWVdO2ZvcihsZXQgcnQ9MDtydDxxZS5lbGVtZW50cy5sZW5ndGg7cnQrKyl7bGV0IGR0LHB0PXFlLmVsZW1lbnRzW3J0XTtEPXJ0PHFlLmVsZW1lbnRzLmxlbmd0aC0xP3FlLmNsYXVzZUxvZ2ljOiIiO2ZvcihsZXQgQ3I9MDtDcjxwdC52YWx1ZXMubGVuZ3Ro''@;'; put 'put ''O0NyKyspe2lmKCJzdHJpbmciPT10eXBlb2YgcHQudmFsdWUmJiJudW1iZXIiPT10eXBlb2YgcHQudmFsdWVzW0NyXS5mb3JtYXR0ZWQpcHQudmFsdWU9PT1KU09OLnN0cmluZ2lmeShwdC52YWx1ZXNbQ3JdLmZvcm1hdHRlZCkmJihkdD1wdC52YWx1ZXNbQ3JdLnVuZm9ybWF0dGVkKTtlbHNl''@;'; put 'put ''e2xldCBtcj0ibnVtYmVyIiE9dHlwZW9mIHB0LnZhbHVlc1tDcl0uZm9ybWF0dGVkJiZudWxsIT09cHQudmFsdWVzW0NyXS5mb3JtYXR0ZWQ/cHQudmFsdWVzW0NyXS5mb3JtYXR0ZWQudHJpbSgpOnB0LnZhbHVlc1tDcl0uZm9ybWF0dGVkO3B0LnZhbHVlPT09bXImJihkdD1wdC52YWx1ZXNb''@;'; put 'put ''Q3JdLnVuZm9ybWF0dGVkKX0iUGxlYXNlIHNlbGVjdCB2YWx1ZSI9PT1wdC52YWx1ZSYmLTEhPT1bIj0iLCI+IiwiPCIsIjw9IiwiPj0iLCJuZSJdLmluZGV4T2YocHQub3BlcmF0b3IpJiYoZHQ9IiIpLCgiQ09OVEFJTlMiPT09cHQub3BlcmF0b3J8fCJMSUtFIj09PXB0Lm9wZXJhdG9yfHwi''@;'; put 'put ''QkVHSU5TX1dJVEgiPT09cHQub3BlcmF0b3IpJiYoZHQ9cHQudmFsdWUpfWlmKGR0fHwoZHQ9cHQudmFsdWUpLHB0LnZhbHVlIGluc3RhbmNlb2YgQXJyYXkmJiJCRVRXRUVOIj09PXB0Lm9wZXJhdG9yKXtkdD1bXSxkdC5wdXNoKHB0LnZhbHVlWzBdKSxkdC5wdXNoKHB0LnZhbHVlWzFdKTtm''@;'; put 'put ''b3IobGV0IENyPTA7Q3I8cHQudmFsdWVzLmxlbmd0aDtDcisrKWR0WzBdPT09cHQudmFsdWVzW0NyXS5mb3JtYXR0ZWQmJihkdFswXT1wdC52YWx1ZXNbQ3JdLnVuZm9ybWF0dGVkKSxkdFsxXT09PXB0LnZhbHVlc1tDcl0uZm9ybWF0dGVkJiYoZHRbMV09cHQudmFsdWVzW0NyXS51bmZvcm1h''@;'; put 'put ''dHRlZCl9aWYocHQudmFsdWUgaW5zdGFuY2VvZiBBcnJheSYmKCJJTiI9PT1wdC5vcGVyYXRvcnx8Ik5PVCBJTiI9PT1wdC5vcGVyYXRvcikpe2R0PVtdLGR0PXB0LnZhbHVlO2ZvcihsZXQgQ3I9MDtDcjxwdC52YWx1ZXMubGVuZ3RoO0NyKyspZHRbQ3JdJiZkdFtDcl0udmFsPT09cHQudmFs''@;'; put 'put ''dWVzW0NyXS5mb3JtYXR0ZWQmJihkdFtDcl0udmFsPXB0LnZhbHVlc1tDcl0udW5mb3JtYXR0ZWQpfWxldCBKdD1wdC50eXBlO2NvbnN0IHZuPXB0LnZhbHVlVmFyaWFibGU7bGV0IE1uLENuPW51bGw9PT1wdC52YXJpYWJsZT8iIjpwdC52YXJpYWJsZSx0bj1udWxsPT09cHQub3BlcmF0b3I/''@;'; put 'put ''IiI6cHQub3BlcmF0b3I7TW49dGhpcy5jaGVja09wZXJhdG9yKHRuLGR0LEp0KS52YWx1ZSwic3RyaW5nIj09dHlwZW9mIE1uJiYiKCIhPT1NblswXSYmKE1uPU1uLnJlcGxhY2UoIiciLCInJyIpKSx0bj10aGlzLmNoZWNrT3BlcmF0b3IodG4sTW4sSnQpLm9wZXJhdG9yLCJjaGFyIj09PUp0''@;'; put 'put ''JiYiSU4iIT09dG4mJiJOT1QgSU4iIT09dG4/KHR5cGVvZiBNbj4idSImJihNbj0iIiksTW49dm4/IiAiK01uKyIgIjoiICciK01uKyInICIsQmU9QmUrIiAiK0NuKyIgIit0bitNbitEKTooIm51bSI9PT1KdCYmdHlwZW9mIE1uPiJ1IiYmKE1uPSIuIiksTW49dHlwZW9mIE1uPiJ1Ij8iIjoi''@;'; put 'put ''ICIrTW4rIiAiLEJlPUJlKyIgIitDbisiICIrdG4rTW4rRCl9cmUucHVzaChCZSl9Wj0iIjtmb3IobGV0IEVlPTA7RWU8cmUubGVuZ3RoO0VlKyspY2U9RWU8cmUubGVuZ3RoLTE/ZDoiIixaPTE9PT1yZS5sZW5ndGg/cmVbMF06WisiICgiK3JlW0VlXSsiKSAiK2NlO3JldHVybiBmPVouc3Vi''@;'; put 'put ''c3RyKDEpLnNsaWNlKDAsLTEpLFo9IldIRVJFIitaKyI7Iix0aGlzLnF1ZXJ5Lm5leHQoe3doZXJlQ2xhdXNlOlosc3RyaW5nOmYsb2JqOmEsbGliZHM6aH0pLHt3aGVyZUNsYXVzZTpaLHN0cmluZzpmfX1jcmVhdGVGaWx0ZXJRdWVyeVRhYmxlKGEpe2NvbnN0IGQ9W107cmV0dXJuIGEuZmls''@;'; put 'put ''dGVyR3JvdXBzLmZvckVhY2goKGgsZik9PntoLmZpbHRlckNsYXVzZXMuZm9yRWFjaCh2PT57bGV0IE09IiI7IkJFVFdFRU4iPT09di5vcGVyYXRvcj9NPWAke3YudmFsdWVbMF19IEFORCAke3YudmFsdWVbMV19YDoiSU4iPT09di5vcGVyYXRvcnx8Ik5PVCBJTiI9PT12Lm9wZXJhdG9yPyh2''@;'; put 'put ''LnZhbHVlLmZvckVhY2goRD0+e2lmKEQuY2hlY2tlZCl7Y29uc3QgWj1ELnZhbDsic3RyaW5nIiE9dHlwZW9mIFp8fCgwLGdnLmlzU3BlY2lhbE1pc3NpbmcpKFopJiYiY2hhciIhPT12LnR5cGU/TS5sZW5ndGg+MD9NKz1gLCR7Wn1gOk09YCgke1p9YDpNLmxlbmd0aD4wP00rPWAsJyR7Wi5y''@;'; put 'put ''ZXBsYWNlKC8nL2csIicnIil9J2A6TT1gKCcke1oucmVwbGFjZSgvJy9nLCInJyIpfSdgfX0pLE0ubGVuZ3RoPjAmJihNKz0iKSIpKToiIj09PXYudmFsdWU/TT0iY2hhciI9PT12LnR5cGU/IicgJyI6Ii4iOiJjaGFyIj09PXYudHlwZSYmIXYudmFsdWVWYXJpYWJsZSYmKE09YCcke3YudmFs''@;'; put 'put ''dWUucmVwbGFjZSgvJy9nLCInJyIpfSdgKSxkLnB1c2goe0dST1VQX0xPR0lDOmEuZ3JvdXBMb2dpYyxTVUJHUk9VUF9MT0dJQzpoLmNsYXVzZUxvZ2ljfHwiQU5EIixTVUJHUk9VUF9JRDpmLFZBUklBQkxFX05NOnYudmFyaWFibGUsT1BFUkFUT1JfTk06di5vcGVyYXRvcixSQVdfVkFMVUU6''@;'; put 'put ''TXx8di52YWx1ZX0pfSl9KSxkfWluaXRpYWxpemVHbG9iYWxGaWx0ZXJDbGF1c2UoYSxkKXtjb25zdCBoPXtxdWVyeU9iajpbXSxjbGF1c2VMb2dpYzpbXSxncm91cExvZ2ljOnljKEtuLGEpLmZpbHRlci5xdWVyeVswXS5HUk9VUF9MT0dJQ307eWMoS24sYSkuZmlsdGVyLmNsYXVzZXM9dGhp''@;'; put 'put ''cy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShoKSx5YyhLbixhKS5maWx0ZXIuZ3JvdXBMb2dpYz15YyhLbixhKS5maWx0ZXIucXVlcnlbMF0uR1JPVVBfTE9HSUM7bGV0IGY9IiIsdj17ZWxlbWVudHM6W119LE09MDt5YyhLbixhKS5maWx0ZXIucXVlcnkuZm9yRWFjaChEPT57Y29uc3QgWj17''@;'; put 'put ''fTtmb3IobGV0IHJlPTA7cmU8ZC5sZW5ndGg7cmUrKylpZihkW3JlXS5OQU1FPT09RC5WQVJJQUJMRV9OTSl7aWYoZj1ELlNVQkdST1VQX0xPR0lDLFouZGR0eXBlPWRbcmVdLkREVFlQRSxaLnR5cGU9ZFtyZV0uVFlQRSxaLm9wZXJhdG9ycz0ibnVtIj09PWRbcmVdLlRZUEU/S24ub3BlcmF0''@;'; put 'put ''b3JzLm51bU9wZXJhdG9yczpLbi5vcGVyYXRvcnMuY2hhck9wZXJhdG9ycyxaLmxvZ2ljPW51bGwsWi5vcGVyYXRvcj1ELk9QRVJBVE9SX05NLFoudmFyaWFibGU9RC5WQVJJQUJMRV9OTSwiY2hhciI9PT1kW3JlXS5UWVBFKWlmKCJJTiI9PT1ELk9QRVJBVE9SX05NfHwiTk9UIElOIj09PUQu''@;'; put 'put ''T1BFUkFUT1JfTk0pe2NvbnN0IGNlPVtdLEVlPUQuUkFXX1ZBTFVFLnNsaWNlKDEsLTEpLnNwbGl0KCInLCciKTsxPT09RWUubGVuZ3RoP2NlLnB1c2goe2NoZWNrZWQ6ITAsdmFsOkVlWzBdLnNsaWNlKDEsLTEpLnJlcGxhY2UoLycnL2csIiciKX0pOkVlLmZvckVhY2goKEJlLHFlKT0+e2Nl''@;'; put 'put ''LnB1c2goMD09PXFlP3tjaGVja2VkOiEwLHZhbDpCZS5zbGljZSgxKS5yZXBsYWNlKC8nJy9nLCInIil9OnFlPT09RWUubGVuZ3RoLTE/e2NoZWNrZWQ6ITAsdmFsOkJlLnNsaWNlKDAsLTEpLnJlcGxhY2UoLycnL2csIiciKX06e2NoZWNrZWQ6ITAsdmFsOkJlLnJlcGxhY2UoLycnL2csIici''@;'; put 'put ''KX0pfSksWi52YWx1ZT10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKGNlKX1lbHNlIFoudmFsdWU9RC5SQVdfVkFMVUUuc2xpY2UoMSwtMSkucmVwbGFjZSgvJycvZywiJyIpO2Vsc2UgaWYoIklOIj09PUQuT1BFUkFUT1JfTk18fCJOT1QgSU4iPT09RC5PUEVSQVRPUl9OTSl7Y29uc3Qg''@;'; put 'put ''Y2U9W107RC5SQVdfVkFMVUUuc2xpY2UoMSwtMSkuc3BsaXQoIiwiKS5mb3JFYWNoKChCZSxxZSk9PntjZS5wdXNoKHtjaGVja2VkOiEwLHZhbDpCZX0pfSksWi52YWx1ZT10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKGNlKX1lbHNlIGlmKCJCRVRXRUVOIj09PUQuT1BFUkFUT1JfTk0p''@;'; put 'put ''e2NvbnN0IGNlPUQuUkFXX1ZBTFVFLnNwbGl0KCIgQU5EICIpO1oudmFsdWU9Y2V9ZWxzZSBaLnZhbHVlPUQuUkFXX1ZBTFVFO1oudmFsdWVzPVtdLE09PT1ELlNVQkdST1VQX0lEfHwoeWMoS24sYSkuZmlsdGVyLmNsYXVzZXMucXVlcnlPYmoucHVzaCh0aGlzLmhlbHBlclNlcnZpY2UuZGVl''@;'; put 'put ''cENsb25lKHYpKSx5YyhLbixhKS5maWx0ZXIuY2xhdXNlcy5xdWVyeU9ialtNXS5jbGF1c2VMb2dpYz1mLHljKEtuLGEpLmZpbHRlci5jbGF1c2VzLnF1ZXJ5T2JqW01dLmludmFsaWRDbGF1c2U9ITEsTSsrLHYuZWxlbWVudHM9W10pLHYuZWxlbWVudHMucHVzaCh0aGlzLmhlbHBlclNlcnZp''@;'; put 'put ''Y2UuZGVlcENsb25lKFopKTticmVha319KSx2LmVsZW1lbnRzLmxlbmd0aD4wJiYoeWMoS24sYSkuZmlsdGVyLmNsYXVzZXMucXVlcnlPYmoucHVzaCh0aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKHYpKSx5YyhLbixhKS5maWx0ZXIuY2xhdXNlcy5xdWVyeU9ialtNXS5jbGF1c2VMb2dp''@;'; put 'put ''Yz1mLHljKEtuLGEpLmZpbHRlci5jbGF1c2VzLnF1ZXJ5T2JqW01dLmludmFsaWRDbGF1c2U9ITEpLHljKEtuLGEpLmZpbHRlci5xdWVyeT1bXX1yZW1vdmVDbGF1c2UoKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtyZXR1cm4gYS5yZW1vdmVRdWVyeS5uZXh0KCEwKSwhMH0p''@;'; put 'put ''KCl9c3BlY0NvbnZlcnNpb24oYSl7bGV0IGQ9e30saD1bXTtpZihoPWEubWFwKGZ1bmN0aW9uKGYpe3JldHVybiBmLk5BTUUudG9VcHBlckNhc2UoKX0pLGEgaW5zdGFuY2VvZiBBcnJheSlmb3IobGV0IGY9MDtmPGgubGVuZ3RoO2YrKylkW2hbZl1dPTE9PT1hW2ZdLlRZUEU/e2NvbFR5cGU6''@;'; put 'put ''Im51bSIsY29sTGVuZ3RoOmFbZl0uTEVOR1RIfTp7Y29sVHlwZToic3RyaW5nIixjb2xMZW5ndGg6YVtmXS5MRU5HVEh9O3JldHVybiBkfXNldFN1Ym1pdFJlYWR5KCl7dGhpcy5zZXRTdWJtaXQubmV4dCghMCl9cGFyc2VGb3JtYXRzKGEpe2NvbnN0IGQ9e30saD1hLnZhcnM7Zm9yKGxldCBm''@;'; put 'put ''IG9mIE9iamVjdC5rZXlzKGgpKXtjb25zdCB2PWhbZl0udHlwZSxNPWhbZl0ubGVuZ3RoOyJudW0iPT09dj9kW2ZdPSJiZXN0LiI6ImNoYXIiPT09diYmKGRbZl09YCRjaGFyJHtNfS5gKX1yZXR1cm4gZH1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxj''@;'; put 'put ''KSh4cihHcykseHIoU3UpLHhyKFNkKSl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gdktlKGMsbCl7MSZjJiYoc2koMCksZGUoMSwic3BhbiIsMjEpLExlKDIsIiBMb2FkaW5nLi4uICIpLGhl''@;'; put 'put ''KCksZGUoMywicCIpLExlKDQsIkRlcGxveWluZy4uLiIpLGhlKCksbGkoKSl9ZnVuY3Rpb24gYktlKGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsMzIpfWZ1bmN0aW9uIHlLZShjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDMzKX1mdW5jdGlvbiBfS2UoYyxsKXtpZigxJmMmJihkZSgwLCJk''@;'; put 'put ''aXYiLDMwKSxndCgxLGJLZSwxLDAsImNsci1pY29uIiwzMSkoMix5S2UsMSwwLCJjbHItaWNvbiIsMjcpLGRlKDMsInAiKSxMZSg0LCJEZXBsb3kgU0FTIEpvYnMiKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1SZSgzKTtmZSgpLE1lKCJuZ0lmIiwhMD09PWEuYXV0b0RlcGxveVN0YXR1cy5kZXBs''@;'; put 'put ''b3lTZXJ2aWNlUGFjayksZmUoKSxNZSgibmdJZiIsISFhLmF1dG9EZXBsb3lTdGF0dXMuZGVwbG95U2VydmljZVBhY2spfX1mdW5jdGlvbiB3S2UoYyxsKXsxJmMmJkd0KDAsImNsci1pY29uIiwzMil9ZnVuY3Rpb24gQ0tlKGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsMzMpfWZ1bmN0aW9u''@;'; put 'put ''IFNLZShjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMzApLGd0KDEsd0tlLDEsMCwiY2xyLWljb24iLDMxKSgyLENLZSwxLDAsImNsci1pY29uIiwyNyksZGUoMywicCIpLExlKDQsIkNyZWF0ZSBkYXRhYmFzZSIpLGhlKCkoKSksMiZjKXtjb25zdCBhPVJlKDMpO2ZlKCksTWUoIm5nSWYiLGEu''@;'; put 'put ''YXV0b0RlcGxveVN0YXR1cy5ydW5NYWtlRGF0YSksZmUoKSxNZSgibmdJZiIsITE9PT1hLmF1dG9EZXBsb3lTdGF0dXMucnVuTWFrZURhdGEpfX1mdW5jdGlvbiBNS2UoYyxsKXsxJmMmJkd0KDAsImNsci1pY29uIiwzMyl9ZnVuY3Rpb24geEtlKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7''@;'; put 'put ''c2koMCksZGUoMSwicCIsMjIpLExlKDIsIkRvbmUiKSxoZSgpLEd0KDMsImhyIiwyMyksZ3QoNCxfS2UsNSwyLCJkaXYiLDI0KSg1LFNLZSw1LDIsImRpdiIsMjQpLEd0KDYsImhyIiwyMyksZGUoNywiZGl2IiwyNSkoOCwiYnV0dG9uIiwyNiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVy''@;'; put 'put ''biB3dChhKSxDdChSZSgyKS5uYXZpZ2F0ZVRvSG9tZSgpKX0pLGd0KDksTUtlLDEsMCwiY2xyLWljb24iLDI3KSxMZSgxMCwiIExBVU5DSCAiKSxoZSgpLGRlKDExLCJidXR0b24iLDI4KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSgyKTtyZXR1cm4gQ3QoaC5kb3du''@;'; put 'put ''bG9hZEZpbGUoaC5tYWtlRGF0YVJlc3BvbnNlLCJjcmVhdGUtZGF0YWJhc2UtbG9nIiwidHh0IikpfSksTGUoMTIsIiBEb3dubG9hZCBsb2cgIiksaGUoKSgpLEd0KDEzLCJociIsMjMpLGRlKDE0LCJkaXYiLDI1KSgxNSwiYnV0dG9uIiwyOSksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEp''@;'; put 'put ''O2NvbnN0IGg9UmUoMik7cmV0dXJuIGguYXV0b2RlcGxveWluZz0hMSxDdChoLmF1dG9kZXBsb3lEb25lPSExKX0pLExlKDE2LCIgQ2xvc2UgIiksaGUoKSxkZSgxNywiYnV0dG9uIiwyOSksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgyKS5vcGVuU2FzUmVxdWVz''@;'; put 'put ''dHNNb2RhbCgpKX0pLExlKDE4LCIgU0FTIFJlcXVlc3RzICIpLGhlKCkoKSxsaSgpfWlmKDImYyl7Y29uc3QgYT1SZSgyKTtmZSg0KSxNZSgibmdJZiIsbnVsbCE9PWEuYXV0b0RlcGxveVN0YXR1cy5kZXBsb3lTZXJ2aWNlUGFjayksZmUoKSxNZSgibmdJZiIsbnVsbCE9PWEuYXV0b0RlcGxv''@;'; put 'put ''eVN0YXR1cy5ydW5NYWtlRGF0YSksZmUoNCksTWUoIm5nSWYiLCExPT09YS5hdXRvRGVwbG95U3RhdHVzLmRlcGxveVNlcnZpY2VQYWNrfHwhMT09PWEuYXV0b0RlcGxveVN0YXR1cy5ydW5NYWtlRGF0YSl9fWZ1bmN0aW9uIEVLZShjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMTkpKDEsImRp''@;'; put 'put ''diIsMjApLGd0KDIsdktlLDUsMCwibmctY29udGFpbmVyIiwxMikoMyx4S2UsMTksMywibmctY29udGFpbmVyIiwxMiksaGUoKSgpKSwyJmMpe2NvbnN0IGE9UmUoKTtmZSgyKSxNZSgibmdJZiIsIWEuYXV0b2RlcGxveURvbmUpLGZlKCksTWUoIm5nSWYiLGEuYXV0b2RlcGxveURvbmUpfX1m''@;'; put 'put ''dW5jdGlvbiBUS2UoYyxsKXtpZigxJmMmJihkZSgwLCJvcHRpb24iLDM2KSxMZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7TWUoInZhbHVlIixhLmlkKSxmZSgpLElyKCIgIixhLm5hbWUsIiAiKX19ZnVuY3Rpb24gQUtlKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUo''@;'; put 'put ''MCwic2VsZWN0IiwzNCksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9UmUoKTtyZXR1cm4gbWkoZi5zZWxlY3RlZEFkbWluR3JvdXAsaCl8fChmLnNlbGVjdGVkQWRtaW5Hcm91cD1oKSxDdChoKX0pLGd0KDEsVEtlLDIsMiwib3B0aW9uIiwzNSksaGUoKX1p''@;'; put 'put ''ZigyJmMpe2NvbnN0IGE9UmUoKTtwaSgibmdNb2RlbCIsYS5zZWxlY3RlZEFkbWluR3JvdXApLGZlKCksTWUoIm5nRm9yT2YiLGEuYWRtaW5Hcm91cHMpfX1mdW5jdGlvbiBrS2UoYyxsKXsxJmMmJkd0KDAsImNsci1zcGlubmVyIiwzNyl9ZnVuY3Rpb24gREtlKGMsbCl7aWYoMSZjJiYoZGUo''@;'; put 'put ''MCwib3B0aW9uIiwzNiksTGUoMSksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O01lKCJ2YWx1ZSIsYS5pZCksZmUoKSxJcigiICIsYS5uYW1lLCIgIil9fWZ1bmN0aW9uIElLZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsInNlbGVjdCIsMzQpLEZ0KCJuZ01vZGVsQ2hh''@;'; put 'put ''bmdlIixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS5vbkNvbXB1dGVDb250ZXh0Q2hhbmdlKGgpKX0pLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPVJlKCk7cmV0dXJuIG1pKGYuc2VsZWN0ZWRDb21wdXRlQ29udGV4dCxoKXx8KGYuc2VsZWN0''@;'; put 'put ''ZWRDb21wdXRlQ29udGV4dD1oKSxDdChoKX0pLGd0KDEsREtlLDIsMiwib3B0aW9uIiwzNSksaGUoKX1pZigyJmMpe2NvbnN0IGE9UmUoKTtwaSgibmdNb2RlbCIsYS5zZWxlY3RlZENvbXB1dGVDb250ZXh0KSxmZSgpLE1lKCJuZ0Zvck9mIixhLmNvbXB1dGVDb250ZXh0cyl9fWZ1bmN0aW9u''@;'; put 'put ''IFJLZShjLGwpezEmYyYmR3QoMCwiY2xyLXNwaW5uZXIiLDM3KX1mdW5jdGlvbiBMS2UoYyxsKXtpZigxJmMmJihzaSgwKSxkZSgxLCJsYWJlbCIsMiksTGUoMiwiUnVubmluZyBhcyB1c2VyOiIpLGhlKCksZGUoMywiZGl2IiwzKSg0LCJkaXYiLDQpKDUsInAiLDUpLExlKDYpLGhlKCkoKSgp''@;'; put 'put ''LGxpKCkpLDImYyl7Y29uc3QgYT1SZSgpO2ZlKDYpLHdyKGEucnVubmluZ0FzVXNlcil9fWxldCBPS2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSl7dGhpcy5ldmVudFNlcnZpY2U9YSx0aGlzLmRlcGxveVNlcnZpY2U9ZCx0aGlzLnNhc1NlcnZpY2U9aCx0aGlzLnNh''@;'; put 'put ''c1ZpeWFTZXJ2aWNlPWYsdGhpcy5sb2dnZXJTZXJ2aWNlPXYsdGhpcy5oZWxwZXJTZXJ2aWNlPU0sdGhpcy5zYXNKc0NvbmZpZz1uZXcgbWguU0FTanNDb25maWcsdGhpcy5hcHBMb2M9IiIsdGhpcy5kY1BhdGg9IiIsdGhpcy5zZWxlY3RlZEFkbWluR3JvdXA9IiIsdGhpcy5vbk5hdmlnYXRl''@;'; put 'put ''VG9Ib21lPW5ldyBLcix0aGlzLnNlbGVjdGVkQ29tcHV0ZUNvbnRleHQ9IiIsdGhpcy5tYWtlRGF0YVJlc3BvbnNlPSIiLHRoaXMuanNvbkZpbGU9bnVsbCx0aGlzLmF1dG9kZXBsb3lpbmc9ITEsdGhpcy5hdXRvZGVwbG95RG9uZT0hMSx0aGlzLnJlY3JlYXRlRGF0YWJhc2VNb2RhbD0hMSx0''@;'; put 'put ''aGlzLmlzU3VibWl0dGluZ0pzb249ITEsdGhpcy5pc0pzb25TdWJtaXR0ZWQ9ITEsdGhpcy5yZWNyZWF0ZURhdGFiYXNlPSEwLHRoaXMuY3JlYXRlRGF0YWJhc2VMb2FkaW5nPSExLHRoaXMuYWRtaW5Hcm91cHNMb2FkaW5nPSExLHRoaXMuY3VycmVudFVzZXJJbmZvTG9hZGluZz0hMSx0aGlz''@;'; put 'put ''LmNvbXB1dGVDb250ZXh0c0xvYWRpbmc9ITEsdGhpcy5hZG1pbkdyb3Vwcz1bXSx0aGlzLmN1cnJlbnRVc2VySW5mbz1udWxsLHRoaXMuY29tcHV0ZUNvbnRleHRzPVtdLHRoaXMuYXV0b0RlcGxveVN0YXR1cz17ZGVwbG95U2VydmljZVBhY2s6bnVsbCxydW5NYWtlRGF0YTpudWxsfX1uZ09u''@;'; put 'put ''SW5pdCgpe3RoaXMubG9hZERhdGEoKX1sb2FkRGF0YSgpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe3lpZWxkIGEuZ2V0QWRtaW5Hcm91cHMoKSx5aWVsZCBhLmdldENvbXB1dGVDb250ZXh0cygpLHlpZWxkIGEuZ2V0Q3VycmVudFVzZXIoKSxzZXRUaW1lb3V0KCgpPT57YS5z''@;'; put 'put ''ZWxlY3RlZENvbXB1dGVDb250ZXh0JiZhLm9uQ29tcHV0ZUNvbnRleHRDaGFuZ2UoYS5zZWxlY3RlZENvbXB1dGVDb250ZXh0KX0sNTAwKX0pKCl9Z2V0Q29tcHV0ZUNvbnRleHRzKCl7dmFyIGE9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7cmV0dXJuIG5ldyBQcm9taXNlKChkLGgpPT57''@;'; put 'put ''YS5jb21wdXRlQ29udGV4dHNMb2FkaW5nPSEwLGEuc2FzVml5YVNlcnZpY2UuZ2V0Q29tcHV0ZUNvbnRleHRzKCkuc3Vic2NyaWJlKGY9PnthLmNvbXB1dGVDb250ZXh0c0xvYWRpbmc9ITE7Y29uc3Qgdj1mLml0ZW1zLmZpbmQoTT0+IlNBUyBKb2IgRXhlY3V0aW9uIGNvbXB1dGUgY29udGV4''@;'; put 'put ''dCI9PT1NLm5hbWUpO3YmJihhLnNlbGVjdGVkQ29tcHV0ZUNvbnRleHQ9di5pZCksYS5jb21wdXRlQ29udGV4dHM9Zi5pdGVtcyxkKCl9LGY9PntoKGYpfSl9KX0pKCl9Z2V0Q3VycmVudFVzZXIoKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtyZXR1cm4gbmV3IFByb21pc2Uo''@;'; put 'put ''KGQsaCk9PnthLmN1cnJlbnRVc2VySW5mb0xvYWRpbmc9ITAsYS5zYXNWaXlhU2VydmljZS5nZXRDdXJyZW50VXNlcigpLnN1YnNjcmliZShmPT57YS5jdXJyZW50VXNlckluZm9Mb2FkaW5nPSExLGEuY3VycmVudFVzZXJJbmZvPWYsYS5kY1BhdGg9YC9leHBvcnQvdml5YS9ob21lcy8ke2Yu''@;'; put 'put ''aWR9YCxkKCl9LGY9Pntjb25zb2xlLmVycm9yKCJFcnJvciB3aGlsZSBnZXR0aW5nIGN1cnJlbnQgdXNlciIsZiksaChmKX0pfSl9KSgpfWdldEFkbWluR3JvdXBzKCl7dmFyIGE9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7cmV0dXJuIG5ldyBQcm9taXNlKChkLGgpPT57YS5hZG1pbkdy''@;'; put 'put ''b3Vwc0xvYWRpbmc9ITAsYS5zYXNWaXlhU2VydmljZS5nZXRBZG1pbkdyb3VwcygpLnN1YnNjcmliZShmPT57YS5hZG1pbkdyb3Vwc0xvYWRpbmc9ITEsYS5hZG1pbkdyb3Vwcz1mLml0ZW1zLm1hcCh2PT4oe2lkOnYuaWQsbmFtZTp2Lm5hbWV9KSksZCgpfSl9KX0pKCl9b25Db21wdXRlQ29u''@;'; put 'put ''dGV4dENoYW5nZShhKXt2YXIgZD10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtkLnNhc1ZpeWFTZXJ2aWNlLmdldENvbXB1dGVDb250ZXh0QnlJZChhKS5zdWJzY3JpYmUoaD0+e2QucnVubmluZ0FzVXNlcj1oLmF0dHJpYnV0ZXMmJmguYXR0cmlidXRlcy5ydW5TZXJ2ZXJBcz9oLmF0dHJp''@;'; put 'put ''YnV0ZXMucnVuU2VydmVyQXM6ZC5jdXJyZW50VXNlckluZm8/LmlkfHwidW5rbm93biJ9KX0pKCl9Z2V0Q29tcHV0ZUNvbnRleHROYW1lKGEpe3JldHVybiB0aGlzLmNvbXB1dGVDb250ZXh0cy5maW5kKGQ9PmQuaWQ9PT1hKT8ubmFtZXx8dm9pZCAwfWV4ZWN1dGVKc29uKCl7dmFyIGE9dGhp''@;'; put 'put ''cztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7YS5pc1N1Ym1pdHRpbmdKc29uPSEwO3RyeXt5aWVsZCBhLnNhc0pzLmRlcGxveVNlcnZpY2VQYWNrKGEuanNvbkZpbGUsYS5kY0FkYXB0ZXJTZXR0aW5ncz8uYXBwTG9jLHZvaWQgMCx2b2lkIDAsITApLGEuYXV0b0RlcGxveVN0YXR1cy5kZXBsb3lT''@;'; put 'put ''ZXJ2aWNlUGFjaz0hMCxhLmlzSnNvblN1Ym1pdHRlZD0hMH1jYXRjaChkKXtsZXQgaD0iIjtyZXR1cm4gaD0ic3RyaW5nIiE9dHlwZW9mIGQubWVzc2FnZT9KU09OLnN0cmluZ2lmeShkKS5yZXBsYWNlKC9cXC9nbSwiIik6ZC5tZXNzYWdlLGEuYXV0b0RlcGxveVN0YXR1cy5kZXBsb3lTZXJ2''@;'; put 'put ''aWNlUGFjaz0hMSxhLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJEZXBsb3kgZXJyb3IiLGBFeGNlcHRpb246IFxuICR7IiIhPT1oP2g6ZH1gKSxhLmF1dG9kZXBsb3lpbmc9ITEsdm9pZChhLmF1dG9kZXBsb3lEb25lPSExKX1hLmlzU3VibWl0dGluZ0pzb249ITF9KSgpfXJ1bkF1dG9E''@;'; put 'put ''ZXBsb3koKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooZD0hMSl7YS5hdXRvZGVwbG95aW5nPSEwLGQmJmEuZXhlY3V0ZUpzb24oKSxhLnJlY3JlYXRlRGF0YWJhc2U/YS5jcmVhdGVEYXRhYmFzZSgpOmEuYXV0b2RlcGxveURvbmU9ITB9KS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9''@;'; put 'put ''Y3JlYXRlRGF0YWJhc2UoKXtsZXQgYT17ZnJvbWpzOlt7QURNSU46dGhpcy5zZWxlY3RlZEFkbWluR3JvdXAsRENQQVRIOnRoaXMuZGNQYXRofV19LGQ9dGhpcy5zYXNKc0NvbmZpZy5jb250ZXh0TmFtZTtpZih0aGlzLnNlbGVjdGVkQ29tcHV0ZUNvbnRleHQubGVuZ3RoJiZ0aGlzLmNvbXB1''@;'; put 'put ''dGVDb250ZXh0cy5sZW5ndGgpe2NvbnN0IGY9dGhpcy5nZXRDb21wdXRlQ29udGV4dE5hbWUodGhpcy5zZWxlY3RlZENvbXB1dGVDb250ZXh0KTtmJiYoZD1mKX10aGlzLnNhc0pzLnJlcXVlc3QoInNlcnZpY2VzL2FkbWluL21ha2VkYXRhIixhLHt1c2VDb21wdXRlQXBpOm51bGwsY29udGV4''@;'; put 'put ''dE5hbWU6ZCxkZWJ1ZzohMH0sKCk9Pnt0aGlzLnNhc1NlcnZpY2Uuc2hvdWxkTG9naW4ubmV4dCghMCl9KS50aGVuKGY9Pnt0aGlzLmF1dG9kZXBsb3lEb25lPSEwO3RyeXt0aGlzLm1ha2VEYXRhUmVzcG9uc2U9SlNPTi5zdHJpbmdpZnkoZil9Y2F0Y2h7dGhpcy5tYWtlRGF0YVJlc3BvbnNl''@;'; put 'put ''PWZ9dGhpcy5hdXRvRGVwbG95U3RhdHVzLnJ1bk1ha2VEYXRhPSEhKGYucmVzdWx0JiZmLnJlc3VsdC5sZW5ndGg+MCksdHlwZW9mIGYuc2FzanNBYm9ydDwidSImJnRoaXMuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKCJtYWtlZGF0YSIsZi5zYXNqc0Fib3J0WzBdLk1TRyx7U1lTV0FS''@;'; put 'put ''TklOR1RFWFQ6Zi5TWVNXQVJOSU5HVEVYVCxTWVNFUlJPUlRFWFQ6Zi5TWVNFUlJPUlRFWFQsTUFDOmYuc2FzanNBYm9ydFswXS5NQUN9KSx0aGlzLmhlbHBlclNlcnZpY2UuaXNTdHJlYW1pbmdWaXlhKCkmJnRoaXMudXBkYXRlSW5kZXhIdG1sQ29tcHV0ZUNvbnRleHQoKX0pLmNhdGNoKGY9''@;'; put 'put ''Pnt0aGlzLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbCgibWFrZWRhdGEiLEpTT04uc3RyaW5naWZ5KGYpKSx0aGlzLmF1dG9EZXBsb3lTdGF0dXMucnVuTWFrZURhdGE9ITEsdGhpcy5hdXRvZGVwbG95RG9uZT0hMDt0cnl7dGhpcy5tYWtlRGF0YVJlc3BvbnNlPUpTT04uc3RyaW5naWZ5''@;'; put 'put ''KGYpfWNhdGNoe3RoaXMubWFrZURhdGFSZXNwb25zZT1mfX0pfXVwZGF0ZUluZGV4SHRtbENvbXB1dGVDb250ZXh0KCl7dmFyIGE9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7Y29uc3QgZD1sb2NhdGlvbi5zZWFyY2guc3BsaXQoIi8iKS5wb3AoKSxoPWQ/LmluY2x1ZGVzKCIuIik/ZDp2''@;'; put 'put ''b2lkIDA7aWYoIWgpcmV0dXJuIHZvaWQgYS5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwobnVsbCwiV2UgY291bGQgbm90IGZpZ3VyZSBvdXQgdGhlIGZpbGUgbmFtZSBvZiBgaW5kZXguaHRtbGAgYmFzZWQgb24gdGhlIHVybC4iKTtjb25zdCBmPXlpZWxkIGEuc2FzU2VydmljZS5nZXRG''@;'; put 'put ''aWxlQ29udGVudChgJHthLmFwcExvY30vc2VydmljZXNgLGgpO2lmKCFmKXJldHVybiB2b2lkIGEubG9nZ2VyU2VydmljZS5lcnJvcihgRmFpbGVkIHRvIGdldCAke2h9IGF0ICR7YS5hcHBMb2N9L3NlcnZpY2VzYCk7Y29uc3Qgdj1hLmdldENvbXB1dGVDb250ZXh0TmFtZShhLnNlbGVjdGVk''@;'; put 'put ''Q29tcHV0ZUNvbnRleHQpO2lmKCF2KXJldHVybiB2b2lkIGEubG9nZ2VyU2VydmljZS5lcnJvcihgQ29tcHV0ZSBjb250ZXh0IG5hbWUgbm90IGZvdW5kIGZvciBJRDogJHthLnNlbGVjdGVkQ29tcHV0ZUNvbnRleHR9IHwgTGlzdDogJHtKU09OLnN0cmluZ2lmeShhLmNvbXB1dGVDb250ZXh0''@;'; put 'put ''cyl9YCk7Y29uc3QgTT1mLnJlcGxhY2UoL2NvbnRleHRuYW1lPSJbXiJdKiIvZyxgY29udGV4dG5hbWU9IiR7dn0iYCk7eWllbGQgYS5zYXNTZXJ2aWNlLnVwZGF0ZUZpbGVDb250ZW50KGAke2EuYXBwTG9jfS9zZXJ2aWNlc2AsaCxNKS5jYXRjaChEPT57YS5sb2dnZXJTZXJ2aWNlLmVycm9y''@;'; put 'put ''KGBGYWlsZWQgdG8gdXBkYXRlIERhdGFDb250cm9sbGVyLmh0bWw6ICR7RH1gKX0pfSkoKX1kb3dubG9hZEZpbGUoYSxkLGg9InR4dCIpe3RoaXMuZGVwbG95U2VydmljZS5kb3dubG9hZEZpbGUoYSxkLGgpfW9uSnNvbkZpbGVDaGFuZ2UoYSl7dmFyIGQ9dGhpcztyZXR1cm4gZWUoZnVuY3Rp''@;'; put 'put ''b24qKCl7bGV0IGg9YS50YXJnZXQuZmlsZXNbMF07ZC5qc29uRmlsZT15aWVsZCBkLmRlcGxveVNlcnZpY2UucmVhZEZpbGUoaCl9KSgpfXJlY3JlYXRlRGF0YWJhc2VDbGlja2VkKGEpeyEwPT09YS50YXJnZXQuY2hlY2tlZCYmKHRoaXMucmVjcmVhdGVEYXRhYmFzZU1vZGFsPSEwKX1jbGVh''@;'; put 'put ''clVwbG9hZElucHV0KGEpe3RoaXMuZGVwbG95U2VydmljZS5jbGVhclVwbG9hZElucHV0KGEpfW9wZW5TYXNSZXF1ZXN0c01vZGFsKCl7dGhpcy5ldmVudFNlcnZpY2Uub3BlblJlcXVlc3RzTW9kYWwoKX1uYXZpZ2F0ZVRvSG9tZSgpe3RoaXMub25OYXZpZ2F0ZVRvSG9tZS5lbWl0KCl9c3Rh''@;'; put 'put ''dGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UodmMpLEdlKEtoZSksR2UoR3MpLEdlKFRXKSxHZShTZCksR2UoU3UpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1hdXRvbWF0aWMtZGVwbG95Il1dLGlu''@;'; put 'put ''cHV0czp7c2FzSnM6InNhc0pzIixzYXNKc0NvbmZpZzoic2FzSnNDb25maWciLGRjQWRhcHRlclNldHRpbmdzOiJkY0FkYXB0ZXJTZXR0aW5ncyIsYXBwTG9jOiJhcHBMb2MiLGRjUGF0aDoiZGNQYXRoIixzZWxlY3RlZEFkbWluR3JvdXA6InNlbGVjdGVkQWRtaW5Hcm91cCJ9LG91dHB1dHM6''@;'; put 'put ''e29uTmF2aWdhdGVUb0hvbWU6Im9uTmF2aWdhdGVUb0hvbWUifSxkZWNsczo0NCx2YXJzOjExLGNvbnN0czpbWyJjbGFzcyIsImF1dG8tZGVwbG95Iiw0LCJuZ0lmIl0sWzEsInRleHQtY2VudGVyIiwibXktMTUiXSxbImZvciIsImRjbG9jIiwxLCJtdC0yMCIsImNsci1jb250cm9sLWxhYmVs''@;'; put 'put ''Il0sWzEsIm1iLTEwIiwiY2xyLWNvbnRyb2wtY29udGFpbmVyIl0sWzEsImNsci1pbnB1dC13cmFwcGVyIl0sWzEsIm10LTAiXSxbMSwibWItMTAiLCJjbHItY29udHJvbC1jb250YWluZXIiLCJkYy1sb2MtaW5wdXQtd3JhcHBlciJdLFsxLCJjbHItaW5wdXQtd3JhcHBlciIsInNtYWxsLW10''@;'; put 'put ''Il0sWyJjbHJJbnB1dCIsIiIsIm5hbWUiLCJkY2xvYyIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiXSxbImNsclNlbGVjdCIsIiIsIm5hbWUiLCJvcHRpb25zIiwzLCJuZ01vZGVsIiwibmdNb2RlbENoYW5nZSIsNCwibmdJZiJdLFsiY2xySW5saW5lIiwiIiwiY2xhc3MiLCJzcGlubmVy''@;'; put 'put ''LXNtIiw0LCJuZ0lmIl0sWyJmb3IiLCJjb21wdXRlQ29udGV4dCIsMSwibXQtMjAiLCJjbHItY29udHJvbC1sYWJlbCJdLFs0LCJuZ0lmIl0sWzEsImJ0bi1hdXRvZGVwbG95IiwiYnRuIiwiYnRuLXByaW1hcnkiLCJkLWlubGluZS1ibG9jayIsIm1yLTEwIiwzLCJjbGljayJdLFszLCJjbHJN''@;'; put 'put ''b2RhbE9wZW5DaGFuZ2UiLCJjbHJNb2RhbE9wZW4iLCJjbHJNb2RhbENsb3NhYmxlIl0sWzEsIm1vZGFsLXRpdGxlIl0sWzEsIm1vZGFsLWJvZHkiXSxbMSwibW9kYWwtZm9vdGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tcHJpbWFyeSIsMywiY2xpY2siXSxb''@;'; put 'put ''MSwiYXV0by1kZXBsb3kiXSxbMSwic3Bpbm5lci1ib3giXSxbMSwic3Bpbm5lciIsInNwaW5uZXItbWQiXSxbMSwibS0wIiwiYWxpZ24tc2VsZi1zdGFydCJdLFsxLCJ3LTEwMCJdLFsiY2xhc3MiLCJkZXBsb3ktc3RhdHVzLXJvdyIsNCwibmdJZiJdLFsxLCJidXR0b25zIl0sWzEsImJ0biIs''@;'; put 'put ''ImJ0bi1wcmltYXJ5IiwibXQtMTUiLCJtci0wIiwzLCJjbGljayJdLFsiY2xhc3MiLCJkZXBsb3ktZXJyb3IiLCJzaGFwZSIsInRpbWVzLWNpcmNsZSIsNCwibmdJZiJdLFsxLCJidG4iLCJidG4tcHJpbWFyeS1vdXRsaW5lIiwibXQtMTUiLCJtci0wIiwzLCJjbGljayJdLFsxLCJidG4iLCJi''@;'; put 'put ''dG4tcHJpbWFyeS1vdXRsaW5lIiwibXQtMTUiLCJtci0wIiwiYWxpZ24tc2VsZi1lbmQiLDMsImNsaWNrIl0sWzEsImRlcGxveS1zdGF0dXMtcm93Il0sWyJjbGFzcyIsImRlcGxveS1zdWNjZXNzIiwic2hhcGUiLCJzdWNjZXNzLXN0YW5kYXJkIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInN1Y2Nl''@;'; put 'put ''c3Mtc3RhbmRhcmQiLDEsImRlcGxveS1zdWNjZXNzIl0sWyJzaGFwZSIsInRpbWVzLWNpcmNsZSIsMSwiZGVwbG95LWVycm9yIl0sWyJjbHJTZWxlY3QiLCIiLCJuYW1lIiwib3B0aW9ucyIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiXSxbMywidmFsdWUiLDQsIm5nRm9yIiwibmdGb3JP''@;'; put 'put ''ZiJdLFszLCJ2YWx1ZSJdLFsiY2xySW5saW5lIiwiIiwxLCJzcGlubmVyLXNtIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYoZ3QoMCxFS2UsNCwyLCJkaXYiLDApLGRlKDEsImg0IiwxKSxMZSgyLCJWaXlhIERlcGxveSIpLGhlKCksR3QoMywiaHIiKSxkZSg0LCJsYWJlbCIsMiks''@;'; put 'put ''TGUoNSwiQXBwIExvYyIpLGhlKCksZGUoNiwiZGl2IiwzKSg3LCJkaXYiLDQpKDgsInAiLDUpLExlKDkpLGhlKCkoKSgpLGRlKDEwLCJsYWJlbCIsMiksTGUoMTEsIkRDIExvYyIpLGhlKCksZGUoMTIsImRpdiIsNikoMTMsImRpdiIsNykoMTQsImlucHV0Iiw4KSxnaSgibmdNb2RlbENoYW5n''@;'; put 'put ''ZSIsZnVuY3Rpb24odil7cmV0dXJuIG1pKGguZGNQYXRoLHYpfHwoaC5kY1BhdGg9diksdn0pLGhlKCkoKSgpLGRlKDE1LCJsYWJlbCIsMiksTGUoMTYsIlNBUyBBZG1pbiBncm91cCIpLGhlKCksZGUoMTcsImRpdiIsMykoMTgsImRpdiIsNyksZ3QoMTksQUtlLDIsMiwic2VsZWN0Iiw5KSgy''@;'; put 'put ''MCxrS2UsMSwwLCJjbHItc3Bpbm5lciIsMTApLGhlKCkoKSxkZSgyMSwibGFiZWwiLDExKSxMZSgyMiwiQ29tcHV0ZSBDb250ZXh0IiksaGUoKSxkZSgyMywiZGl2IiwzKSgyNCwiZGl2Iiw3KSxndCgyNSxJS2UsMiwyLCJzZWxlY3QiLDkpKDI2LFJLZSwxLDAsImNsci1zcGlubmVyIiwxMCks''@;'; put 'put ''aGUoKSgpLGd0KDI3LExLZSw3LDEsIm5nLWNvbnRhaW5lciIsMTIpLEd0KDI4LCJociIpLGRlKDI5LCJidXR0b24iLDEzKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGgucnVuQXV0b0RlcGxveSgpfSksTGUoMzAsIiBEZXBsb3lcbiIpLGhlKCksZGUoMzEsImNsci1tb2RhbCIsMTQp''@;'; put 'put ''LGdpKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKHYpe3JldHVybiBtaShoLnJlY3JlYXRlRGF0YWJhc2VNb2RhbCx2KXx8KGgucmVjcmVhdGVEYXRhYmFzZU1vZGFsPXYpLHZ9KSxkZSgzMiwiaDMiLDE1KSxMZSgzMywiV2FybmluZyIpLGhlKCksZGUoMzQsImRpdiIsMTYpLExlKDM1''@;'; put 'put ''LCIgVGhpcyBhY3Rpb24gd2lsbCByZWNyZWF0ZSB0aGUgZGF0YWJhc2UgKGlmIGl0IGV4aXN0cykuIEZvciBhbiBpbml0aWFsIGRlcGxveW1lbnQsIHRoaXMgaXMgZXhwZWN0ZWQuIElmIHRoaXMgaXMgYSByZS1kZXBsb3ltZW50LCB5b3Ugd2lsbCBsb3NlIGFueSBleGlzdGluZyB0YWJsZXMg''@;'; put 'put ''aW4gIiksZGUoMzYsInN0cm9uZyIpLExlKDM3KSxoZSgpLExlKDM4LCIuICIpLGhlKCksZGUoMzksImRpdiIsMTcpKDQwLCJidXR0b24iLDE4KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGgucmVjcmVhdGVEYXRhYmFzZU1vZGFsPSExLGgucmVjcmVhdGVEYXRhYmFzZT0hMX0pLExl''@;'; put 'put ''KDQxLCIgQ2FuY2VsICIpLGhlKCksZGUoNDIsImJ1dHRvbiIsMTgpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaC5yZWNyZWF0ZURhdGFiYXNlTW9kYWw9ITEsaC5yZWNyZWF0ZURhdGFiYXNlPSEwfSksTGUoNDMsIiBPayAiKSxoZSgpKCkoKSksMiZkJiYoTWUoIm5nSWYiLGguYXV0''@;'; put 'put ''b2RlcGxveWluZyksZmUoOSksd3IoaC5hcHBMb2MpLGZlKDUpLHBpKCJuZ01vZGVsIixoLmRjUGF0aCksZmUoNSksTWUoIm5nSWYiLCFoLmFkbWluR3JvdXBzTG9hZGluZyksZmUoKSxNZSgibmdJZiIsaC5hZG1pbkdyb3Vwc0xvYWRpbmcpLGZlKDUpLE1lKCJuZ0lmIiwhaC5jb21wdXRlQ29u''@;'; put 'put ''dGV4dHNMb2FkaW5nKSxmZSgpLE1lKCJuZ0lmIixoLmNvbXB1dGVDb250ZXh0c0xvYWRpbmcpLGZlKCksTWUoIm5nSWYiLGgucnVubmluZ0FzVXNlciksZmUoNCkscGkoImNsck1vZGFsT3BlbiIsaC5yZWNyZWF0ZURhdGFiYXNlTW9kYWwpLE1lKCJjbHJNb2RhbENsb3NhYmxlIiwhMSksZmUo''@;'; put 'put ''Niksd3IoaC5kY1BhdGgpKX0sZGVwZW5kZW5jaWVzOltucyxiYSxBMixrMixxbCxUMixubCwkcyxIbCxvdSxLdSxkcyxaMSxFNyxSZF0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKTtjb25zdCBlJD0oKT0+KHtzdGFuZGFsb25lOiEwfSk7ZnVuY3Rpb24gUEtlKGMsbCl7MSZjJiYo''@;'; put 'put ''ZGUoMCwiZGl2Iiw2KSgxLCJwIiw3KSxMZSgyLCJQbGVhc2UgbG9nIGluIGZpcnN0IiksaGUoKSxkZSgzLCJsYWJlbCIsOCksTGUoNCwiVXNlcm5hbWUiKSxoZSgpLGRlKDUsImRpdiIsOSkoNiwiZGl2IiwxMCksR3QoNywiaW5wdXQiLDExKSxoZSgpKCksZGUoOCwibGFiZWwiLDEyKSxMZSg5''@;'; put 'put ''LCJQYXNzd29yZCIpLGhlKCksZGUoMTAsImRpdiIsOSkoMTEsImRpdiIsMTApLEd0KDEyLCJpbnB1dCIsMTMpLGhlKCkoKSxkZSgxMywiYnV0dG9uIiwxNCksTGUoMTQsIkxvZyBpbiIpLGhlKCkoKSl9ZnVuY3Rpb24gRktlKGMsbCl7aWYoMSZjJiYoZGUoMCwib3B0aW9uIiwzNiksTGUoMSks''@;'; put 'put ''aGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O01lKCJ2YWx1ZSIsYS5pZCksZmUoKSxJcigiICIsYS5uYW1lLCIgIil9fWZ1bmN0aW9uIEhLZShjLGwpe2lmKDEmYyYmKGRlKDAsInNwYW4iKSxMZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoKS4kaW1wbGljaXQ7ZmUoKSxJcigiKCAi''@;'; put 'put ''LGEuYXR0cmlidXRlcy5zeXNVc2VySWQsIiApIil9fWZ1bmN0aW9uIE5LZShjLGwpe2lmKDEmYyYmKGRlKDAsIm9wdGlvbiIsMzYpLExlKDEpLGd0KDIsSEtlLDIsMSwic3BhbiIsNSksZWwoMywianNvbiIpLGhlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtNZSgidmFsdWUiLGEubmFt''@;'; put 'put ''ZSksZmUoKSxJcigiICIsYS5uYW1lLCIgIiksZmUoKSxNZSgibmdJZiIsInt9IiE9RGMoMywzLGEuYXR0cmlidXRlcykpfX1mdW5jdGlvbiBWS2UoYyxsKXsxJmMmJihkZSgwLCJzcGFuIiksTGUoMSwiSlNPTiBTdWJtaXR0ZWQgU3VjY2Vzc2Z1bGx5IiksaGUoKSl9ZnVuY3Rpb24gQktlKGMs''@;'; put 'put ''bCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiYnV0dG9uIiwzNyksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgyKS5kb3dubG9hZFNhc1ByZWNvZGVGaWxlKCkpfSksR3QoMSwiY2xyLWljb24iLDM4KSxoZSgpfX1mdW5jdGlvbiBqS2UoYyxsKXtpZigxJmMp''@;'; put 'put ''e2NvbnN0IGE9TG4oKTtzaSgwKSxkZSgxLCJwIiwzOSksTGUoMiwiRmlsZSBleGVjdXRlIGNvbXBsZXRlZCIpLGhlKCksR3QoMywiaHIiKSxkZSg0LCJkaXYiKSg1LCJidXR0b24iLDQwKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSgyKTtyZXR1cm4gQ3QoaC5kb3du''@;'; put 'put ''bG9hZEZpbGUoaC5qb2JMb2csImV4ZWN1dGUtc2NyaXB0LWxvZyIsInR4dCIpKX0pLExlKDYsIiBEb3dubG9hZCBsb2cgIiksaGUoKSgpLGxpKCl9fWZ1bmN0aW9uIHpLZShjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsNDQpLExlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgzKTtmZSgpLEly''@;'; put 'put ''KCIgIixhLm1ha2VEYXRhUmVzcG9uc2UsIiAiKX19ZnVuY3Rpb24gVUtlKGMsbCl7MSZjJiYoc2koMCksZGUoMSwic3BhbiIsMjUpLExlKDIsIiBWYWxpZGF0aW5nIGRlcGxveS4uLiAiKSxoZSgpLGRlKDMsInNwYW4iKSxMZSg0LCIgVmFsaWRhdGluZyBkZXBsb3kuLi4gIiksaGUoKSxsaSgp''@;'; put 'put ''KX1mdW5jdGlvbiBaS2UoYyxsKXsxJmMmJihzaSgwKSxHdCgxLCJjbHItaWNvbiIsNDYpLGRlKDIsInNwYW4iKSxMZSgzLCIgVmFsaWRhdGlvbiBmYWlsZWQgIiksaGUoKSxsaSgpKX1mdW5jdGlvbiBXS2UoYyxsKXsxJmMmJihzaSgwKSxHdCgxLCJjbHItaWNvbiIsNDcpLGRlKDIsInNwYW4i''@;'; put 'put ''KSxMZSgzLCIgVmFsaWRhdGlvbiBzdWNjZWVkZWQgIiksaGUoKSxsaSgpKX1mdW5jdGlvbiBZS2UoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDQ1KSxndCgxLFVLZSw1LDAsIm5nLWNvbnRhaW5lciIsNSkoMixaS2UsNCwwLCJuZy1jb250YWluZXIiLDUpKDMsV0tlLDQsMCwibmctY29udGFp''@;'; put 'put ''bmVyIiw1KSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoMyk7ZmUoKSxNZSgibmdJZiIsYS5pc1ZhbGlkYXRpbmcpLGZlKCksTWUoIm5nSWYiLCFhLmlzVmFsaWRhdGluZyYmImVycm9yIj09PWEudmFsaWRhdGlvblN0YXRlKSxmZSgpLE1lKCJuZ0lmIiwhYS5pc1ZhbGlkYXRpbmcmJiJzdWNjZXNz''@;'; put 'put ''Ij09PWEudmFsaWRhdGlvblN0YXRlKX19ZnVuY3Rpb24gR0tlKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7c2koMCksZGUoMSwicCIsMzkpLExlKDIsIkNyZWF0ZSBEYXRhYmFzZSBDb21wbGV0ZWQiKSxoZSgpLEd0KDMsImhyIiksZ3QoNCx6S2UsMiwxLCJkaXYiLDQxKSxkZSg1LCJidXR0''@;'; put 'put ''b24iLDQyKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKDIpLm5hdmlnYXRlVG9Ib21lKCkpfSksTGUoNiwiIExldCdzIGdldCBzdGFydGVkICIpLGhlKCksZGUoNywiYnV0dG9uIiw0MiksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9UmUoMik7''@;'; put 'put ''cmV0dXJuIEN0KGguZG93bmxvYWRGaWxlKGgubWFrZURhdGFSZXNwb25zZSwiY3JlYXRlLWRhdGFiYXNlLWxvZyIsInR4dCIpKX0pLExlKDgsIiBEb3dubG9hZCBsb2cgIiksaGUoKSxkZSg5LCJidXR0b24iLDQyKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKDIp''@;'; put 'put ''LnZhbGlkYXRlRGVwbG95KCkpfSksTGUoMTAsIiBWYWxpZGF0ZSAiKSxoZSgpLGd0KDExLFlLZSw0LDMsImRpdiIsNDMpLGxpKCl9aWYoMiZjKXtjb25zdCBhPVJlKDIpO2ZlKDQpLE1lKCJuZ0lmIixhLm1ha2VEYXRhUmVzcG9uc2UubGVuZ3RoPjApLGZlKDcpLE1lKCJuZ0lmIiwibm9uZSIh''@;'; put 'put ''PT1hLnZhbGlkYXRpb25TdGF0ZXx8YS5pc1ZhbGlkYXRpbmcpfX1mdW5jdGlvbiAkS2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtzaSgwKSxkZSgxLCJmb3JtIikoMiwiZGl2IiwxNSkoMywibGFiZWwiLDE2KSxMZSg0LCJBZG1pbiBncm91cCIpLGhlKCksZGUoNSwiZGl2IiwxNykoNiwi''@;'; put 'put ''ZGl2IiwxOCkoNywic2VsZWN0IiwxOSksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9UmUoKTtyZXR1cm4gbWkoZi5zZWxlY3RlZEFkbWluR3JvdXAsaCl8fChmLnNlbGVjdGVkQWRtaW5Hcm91cD1oKSxDdChoKX0pLGd0KDgsRktlLDIsMiwib3B0aW9uIiwy''@;'; put 'put ''MCksaGUoKSgpKCkoKSxkZSg5LCJkaXYiLDE1KSgxMCwiZGl2IikoMTEsImxhYmVsIiwxNiksTGUoMTIsIkNvbnRleHQiKSxoZSgpLGRlKDEzLCJkaXYiLDE3KSgxNCwiZGl2IiwxOCkoMTUsInNlbGVjdCIsMjEpLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBm''@;'; put 'put ''PVJlKCk7cmV0dXJuIG1pKGYuc2VsZWN0ZWRDb250ZXh0LGgpfHwoZi5zZWxlY3RlZENvbnRleHQ9aCksQ3QoaCl9KSxndCgxNixOS2UsNCw1LCJvcHRpb24iLDIwKSxoZSgpKCkoKSxkZSgxNywiYnV0dG9uIiwyMiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgp''@;'; put 'put ''LmV4ZWN1dGFibGVDb250ZXh0KCkpfSksR3QoMTgsImNsci1pY29uIiwyMyksaGUoKSgpLGRlKDE5LCJkaXYiLDI0KSgyMCwic3BhbiIsMjUpLExlKDIxLCIgTG9hZGluZyBjb250ZXh0cy4uLiAiKSxoZSgpLGRlKDIyLCJzcGFuIiksTGUoMjMsIiBMb2FkaW5nIGNvbnRleHRzLi4uICIpLGhl''@;'; put 'put ''KCkoKSxkZSgyNCwibGFiZWwiLDI2KSxMZSgyNSwiREMgTG9jIiksaGUoKSxkZSgyNiwiZGl2Iiw5KSgyNywiZGl2IiwxMCkoMjgsImlucHV0IiwyNyksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9UmUoKTtyZXR1cm4gbWkoZi5kY1BhdGgsaCl8fChmLmRj''@;'; put 'put ''UGF0aD1oKSxDdChoKX0pLEZ0KCJmb2N1c291dCIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS5zYXZlRGNQYXRoKCkpfSksaGUoKSgpKCksZGUoMjksInAiLDI4KSxMZSgzMCwiIFNlbGVjdCBKU09OIGZpbGUgdG8gdXBsb2FkIChqc29uIGJ1aWxkIGZpbGUgcHJlbG9hZGVkKTog''@;'; put 'put ''IiksaGUoKSxkZSgzMSwiZGl2IiwyOSkoMzIsImlucHV0IiwzMCksRnQoImNsaWNrIixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS5jbGVhclVwbG9hZElucHV0KGgpKX0pKCJjaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChSZSgpLm9uSnNvbkZpbGVDaGFuZ2Uo''@;'; put 'put ''aCkpfSksaGUoKSgpLGRlKDMzLCJkaXYiLDMxKSgzNCwiYnV0dG9uIiwzMiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgpLmV4ZWN1dGVKc29uKCkpfSksTGUoMzUsIiBTVUJNSVQgSlNPTiAiKSxoZSgpLGd0KDM2LFZLZSwyLDAsInNwYW4iLDUpLGhlKCksZGUo''@;'; put 'put ''MzcsInAiLDI4KSxMZSgzOCwiU2VsZWN0IFNBUyBmaWxlIHRvIHVwbG9hZDoiKSxoZSgpLGRlKDM5LCJkaXYiLDI5KSg0MCwiaW5wdXQiLDMwKSxGdCgiY2xpY2siLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChSZSgpLmNsZWFyVXBsb2FkSW5wdXQoaCkpfSkoImNoYW5nZSIsZnVuY3Rp''@;'; put 'put ''b24oaCl7d3QoYSk7Y29uc3QgZj1SZSgpO3JldHVybiBmLm9uU2FzRmlsZUNoYW5nZShoKSxDdChmLmRvd25sb2FkRmlsZUJ0bj0hMCl9KSxoZSgpLGd0KDQxLEJLZSwyLDAsImJ1dHRvbiIsMzMpLGhlKCksZGUoNDIsImRpdiIsMzEpKDQzLCJidXR0b24iLDM0KSxGdCgiY2xpY2siLGZ1bmN0''@;'; put 'put ''aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkuZXhlY3V0ZVNBUygpKX0pLExlKDQ0LCIgU1VCTUlUICIpLGhlKCkoKSgpLGd0KDQ1LGpLZSw3LDAsIm5nLWNvbnRhaW5lciIsNSksZGUoNDYsImJ1dHRvbiIsMzUpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS5j''@;'; put 'put ''cmVhdGVEYXRhYmFzZSgpKX0pLExlKDQ3LCIgQ3JlYXRlIERhdGFiYXNlICIpLGhlKCksZ3QoNDgsR0tlLDEyLDIsIm5nLWNvbnRhaW5lciIsNSksaGUoKSxsaSgpfWlmKDImYyl7Y29uc3QgYT1SZSgpO2ZlKDcpLHBpKCJuZ01vZGVsIixhLnNlbGVjdGVkQWRtaW5Hcm91cCksTWUoIm5nTW9k''@;'; put 'put ''ZWxPcHRpb25zIixZcygxOSxlJCkpLGZlKCksTWUoIm5nRm9yT2YiLGEuYWRtaW5Hcm91cHMpLGZlKDIpLFRyKCJoaWRkZW4iLGEuY29udGV4dHNMb2FkaW5nKSxmZSg1KSxwaSgibmdNb2RlbCIsYS5zZWxlY3RlZENvbnRleHQpLE1lKCJuZ01vZGVsT3B0aW9ucyIsWXMoMjAsZSQpKSxmZSgp''@;'; put 'put ''LE1lKCJuZ0Zvck9mIixhLmFsbENvbnRleHRzKSxmZSgzKSxUcigiaGlkZGVuIiwhYS5jb250ZXh0c0xvYWRpbmcpLGZlKDkpLHBpKCJuZ01vZGVsIixhLmRjUGF0aCksTWUoIm5nTW9kZWxPcHRpb25zIixZcygyMSxlJCkpLGZlKDYpLE1lKCJjbHJMb2FkaW5nIixhLmlzU3VibWl0dGluZ0pz''@;'; put 'put ''b24pLGZlKDIpLE1lKCJuZ0lmIixhLmlzSnNvblN1Ym1pdHRlZCksZmUoNSksTWUoIm5nSWYiLGEuZG93bmxvYWRGaWxlQnRuKSxmZSgyKSxNZSgiY2xyTG9hZGluZyIsYS5leGVjdXRpbmdTY3JpcHQpLGZlKDIpLE1lKCJuZ0lmIixhLmpvYkxvZy5sZW5ndGg+MCksZmUoKSxNZSgiY2xyTG9h''@;'; put 'put ''ZGluZyIsYS5jcmVhdGVEYXRhYmFzZUxvYWRpbmcpLGZlKDIpLE1lKCJuZ0lmIixhLm1ha2VEYXRhUmVzcG9uc2UubGVuZ3RoPjApfX1sZXQgS0tlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy5zYXNTZXJ2aWNlPWEsdGhpcy5ldmVudFNlcnZpY2U9ZCx0aGlzLmxv''@;'; put 'put ''Z2dlclNlcnZpY2U9aCx0aGlzLmRlcGxveVNlcnZpY2U9Zix0aGlzLnNhc0pzQ29uZmlnPW5ldyBtaC5TQVNqc0NvbmZpZyx0aGlzLm9uTmF2aWdhdGVUb0hvbWU9bmV3IEtyLHRoaXMubmVlZHNMb2dpbj0hMSx0aGlzLmFkbWluR3JvdXBzPVtdLHRoaXMuYWxsQ29udGV4dHM9W10sdGhpcy5h''@;'; put 'put ''cHBMb2M9IiIsdGhpcy5kY1BhdGg9IiIsdGhpcy5zZWxlY3RlZEFkbWluR3JvdXA9IiIsdGhpcy5zZWxlY3RlZENvbnRleHQ9IiIsdGhpcy5qb2JMb2c9IiIsdGhpcy5tYWtlRGF0YVJlc3BvbnNlPSIiLHRoaXMubGluZXNPZkNvZGU9W10sdGhpcy5maWxlTmFtZT0iIix0aGlzLnByZWxvYWRl''@;'; put 'put ''ZEZpbGU9ITAsdGhpcy5leGVjdXRlU0FTRW5hYmxlZD0hMSx0aGlzLmNvbnRleHRzTG9hZGluZz0hMSx0aGlzLmNyZWF0ZURhdGFiYXNlTG9hZGluZz0hMSx0aGlzLmV4ZWN1dGluZ1NjcmlwdD0hMSx0aGlzLmRvd25sb2FkRmlsZUJ0bj0hMSx0aGlzLmlzVmFsaWRhdGluZz0hMSx0aGlzLmpz''@;'; put 'put ''b25GaWxlPW51bGwsdGhpcy5pc1N1Ym1pdHRpbmdKc29uPSExLHRoaXMuaXNKc29uU3VibWl0dGVkPSExLHRoaXMudmFsaWRhdGlvblN0YXRlPSJub25lIn1uZ09uSW5pdCgpe31leGVjdXRhYmxlQ29udGV4dCgpe3JldHVybiBlZShmdW5jdGlvbiooKXt9KSgpfWNsZWFyVXBsb2FkSW5wdXQo''@;'; put 'put ''YSl7dGhpcy5kZXBsb3lTZXJ2aWNlLmNsZWFyVXBsb2FkSW5wdXQoYSl9b25TYXNGaWxlQ2hhbmdlKGEpe3RoaXMucHJlbG9hZGVkRmlsZT0hMTtsZXQgZD1hLnRhcmdldC5maWxlc1swXTt0aGlzLmZpbGVOYW1lPWQubmFtZTtsZXQgaD1uZXcgRmlsZVJlYWRlcjtoLm9ubG9hZD0oKT0+e2gu''@;'; put 'put ''cmVzdWx0JiYodGhpcy5saW5lc09mQ29kZT1oLnJlc3VsdC5zcGxpdCgiXG4iKSx0aGlzLmxpbmVzT2ZDb2RlPXRoaXMubGluZXNPZkNvZGUuZmlsdGVyKGY9PiIiIT09ZiYmbnVsbCE9PWYpLHRoaXMuZXhlY3V0ZVNBU0VuYWJsZWQ9ITAsdGhpcy5hZGRQcmVjb2RlTGluZXMoKSl9LGgucmVh''@;'; put 'put ''ZEFzVGV4dChkKX1vbkpzb25GaWxlQ2hhbmdlKGEpe3ZhciBkPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2xldCBoPWEudGFyZ2V0LmZpbGVzWzBdO2QuanNvbkZpbGU9eWllbGQgZC5kZXBsb3lTZXJ2aWNlLnJlYWRGaWxlKGgpfSkoKX1hZGRQcmVjb2RlTGluZXMoKXt0aGlzLmxpbmVz''@;'; put 'put ''T2ZDb2RlLnVuc2hpZnQoYCVsZXQgY29udGV4dD0ke3RoaXMuc2VsZWN0ZWRDb250ZXh0fTtgLGAlbGV0IGFwcExvYz0ke3RoaXMuYXBwTG9jfTtgLGAlbGV0IGFkbWluPSR7dGhpcy5zZWxlY3RlZEFkbWluR3JvdXB9O2AsYCVsZXQgZGNwYXRoPSR7dGhpcy5kY1BhdGh9O2ApfWRvd25sb2Fk''@;'; put 'put ''U2FzUHJlY29kZUZpbGUoKXtsZXQgYT10aGlzLmxpbmVzT2ZDb2RlLmpvaW4oIlxuIiksZD10aGlzLmZpbGVOYW1lLnNwbGl0KCIuIilbMF07dGhpcy5kb3dubG9hZEZpbGUoYSxkLCJzYXMiKX1kb3dubG9hZEZpbGUoYSxkLGg9InR4dCIpe3RoaXMuZGVwbG95U2VydmljZS5kb3dubG9hZEZp''@;'; put 'put ''bGUoYSxkLGgpfXNhdmVEY1BhdGgoKXtsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgiZGVwbG95X2RjX2xvYyIsdGhpcy5kY1BhdGgpfWV4ZWN1dGVKc29uKCl7dmFyIGE9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7YS5pc1N1Ym1pdHRpbmdKc29uPSEwO3RyeXt5aWVsZCBhLnNhc0pzLmRlcGxv''@;'; put 'put ''eVNlcnZpY2VQYWNrKGEuanNvbkZpbGUsYS5kY0FkYXB0ZXJTZXR0aW5ncz8uYXBwTG9jfHwiIix2b2lkIDAsdm9pZCAwLCEwKSxhLmlzSnNvblN1Ym1pdHRlZD0hMH1jYXRjaChkKXtsZXQgaD0iIjtyZXR1cm4gaD0ic3RyaW5nIiE9dHlwZW9mIGQubWVzc2FnZT9KU09OLnN0cmluZ2lmeShk''@;'; put 'put ''KS5yZXBsYWNlKC9cXC9nbSwiIik6ZC5tZXNzYWdlLHZvaWQgYS5ldmVudFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgiRGVwbG95IGVycm9yIixgRXhjZXB0aW9uOiBcbiAkeyIiIT09aD9oOmR9YCl9YS5pc1N1Ym1pdHRpbmdKc29uPSExfSkoKX1leGVjdXRlU0FTKCl7dmFyIGE9dGhpcztyZXR1''@;'; put 'put ''cm4gZWUoZnVuY3Rpb24qKCl7YS5leGVjdXRpbmdTY3JpcHQ9ITAsYS5qb2JMb2c9IiIsYS5tYWtlRGF0YVJlc3BvbnNlPSIiO3RyeXtsZXQgZD15aWVsZCBhLnNhc0pzLmV4ZWN1dGVTY3JpcHQoe2ZpbGVOYW1lOmEuZmlsZU5hbWUsbGluZXNPZkNvZGU6YS5saW5lc09mQ29kZSxjb250ZXh0''@;'; put 'put ''TmFtZTphLnNlbGVjdGVkQ29udGV4dH0pO2EubG9nZ2VyU2VydmljZS5sb2coZCksInN0cmluZyI9PXR5cGVvZiBkLmxvZyYmKGQubG9nPUpTT04ucGFyc2UoZC5sb2cpKSwiZXJyb3IiPT09ZC5qb2JTdGF0dXM/YWxlcnQoIkVycm9yISIpOmEuam9iTG9nPWQubG9nLml0ZW1zP2QubG9nLml0''@;'; put 'put ''ZW1zLm1hcChoPT5oLmxpbmUpLmpvaW4oIlxuIik6SlNPTi5zdHJpbmdpZnkoZC5sb2cpLGEuZXhlY3V0aW5nU2NyaXB0PSExfWNhdGNoe2EuZXhlY3V0aW5nU2NyaXB0PSExfX0pKCl9Y3JlYXRlRGF0YWJhc2UoYT0hMCl7aWYoYSl7bGV0IGY9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29u''@;'; put 'put ''ZmlnKCkuc2VydmVyVXJsKyIvU0FTSm9iRXhlY3V0aW9uLz9fcHJvZ3JhbT0iK3RoaXMuZGNBZGFwdGVyU2V0dGluZ3M/LmFwcExvY3x8Ii9hZG1pbi9tYWtlZGF0YSZBRE1JTj0iK3RoaXMuc2VsZWN0ZWRBZG1pbkdyb3VwKyImRENQQVRIPSIrdGhpcy5kY1BhdGgrIiZfZGVidWc9MTMxIjt3''@;'; put 'put ''aW5kb3cub3BlbihmLCJfYmxhbmsiKX1lbHNlIHRoaXMuY3JlYXRlRGF0YWJhc2VMb2FkaW5nPSEwLHRoaXMuc2FzSnMucmVxdWVzdCgic2VydmljZXMvYWRtaW4vbWFrZWRhdGEiLHtmcm9tanM6W3tBRE1JTjp0aGlzLnNlbGVjdGVkQWRtaW5Hcm91cCxEQ1BBVEg6dGhpcy5kY1BhdGh9XX0s''@;'; put 'put ''e3VzZUNvbXB1dGVBcGk6bnVsbCxjb250ZXh0TmFtZTp0aGlzLnNhc0pzQ29uZmlnLmNvbnRleHROYW1lLGRlYnVnOiEwfSwoKT0+e3RoaXMuc2FzU2VydmljZS5zaG91bGRMb2dpbi5uZXh0KCEwKX0pLnRoZW4oZj0+e3RyeXt0aGlzLm1ha2VEYXRhUmVzcG9uc2U9SlNPTi5zdHJpbmdpZnko''@;'; put 'put ''Zil9Y2F0Y2h7dGhpcy5tYWtlRGF0YVJlc3BvbnNlPWZ9dGhpcy5jcmVhdGVEYXRhYmFzZUxvYWRpbmc9ITF9KS5jYXRjaChmPT57dGhpcy5jcmVhdGVEYXRhYmFzZUxvYWRpbmc9ITE7dHJ5e3RoaXMubWFrZURhdGFSZXNwb25zZT1KU09OLnN0cmluZ2lmeShmKX1jYXRjaHt0aGlzLm1ha2VE''@;'; put 'put ''YXRhUmVzcG9uc2U9Zn19KX1uYXZpZ2F0ZVRvSG9tZSgpe3RoaXMub25OYXZpZ2F0ZVRvSG9tZS5lbWl0KCl9dmFsaWRhdGVEZXBsb3koKXt0aGlzLmlzVmFsaWRhdGluZz0hMCx0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgicHVibGljL3N0YXJ0dXBzZXJ2aWNlIixudWxsKS50aGVuKGE9Pnt0''@;'; put 'put ''aGlzLmxvZ2dlclNlcnZpY2UubG9nKGEuYWRhcHRlclJlc3BvbnNlKSx0aGlzLnZhbGlkYXRpb25TdGF0ZT1hLmFkYXB0ZXJSZXNwb25zZS5zYXNsaWJzPyJzdWNjZXNzIjoiZXJyb3IiLHRoaXMuaXNWYWxpZGF0aW5nPSExfSkuY2F0Y2goYT0+e3RoaXMuaXNWYWxpZGF0aW5nPSExLHRoaXMu''@;'; put 'put ''dmFsaWRhdGlvblN0YXRlPSJlcnJvciJ9KX1kZWxldGVLZXlzKCl7bG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oImRlcGxveV9kY19sb2MiKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZShHcyksR2UodmMpLEdlKFNkKSxHZShLaGUpKX19c3Rh''@;'; put 'put ''dGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1tYW51YWwtZGVwbG95Il1dLGlucHV0czp7c2FzSnM6InNhc0pzIixzYXNKc0NvbmZpZzoic2FzSnNDb25maWciLGRjQWRhcHRlclNldHRpbmdzOiJkY0FkYXB0ZXJTZXR0aW5ncyJ9LG91dHB1dHM6e29uTmF2''@;'; put 'put ''aWdhdGVUb0hvbWU6Im9uTmF2aWdhdGVUb0hvbWUifSxkZWNsczo5LHZhcnM6Myxjb25zdHM6W1sxLCJjYXJkLWhlYWRlciIsInBvc2l0aW9uLXJlbGF0aXZlIl0sWzEsImQtaW5saW5lLWJsb2NrIiwibWwtMTAiLCJtYi0xMCIsIm10LTAiXSxbMSwiYnRuIiwiYnRuLXByaW1hcnkiLCJjbGVh''@;'; put 'put ''ci1tZW1vcnktYnV0dG9uIiwicG9zaXRpb24tYWJzb2x1dGUiLDMsImNsaWNrIl0sWzEsImNhcmQtYmxvY2siXSxbImlkIiwibG9naW5Gb3JtIiwiY2xhc3MiLCJkLW5vbmUiLDQsIm5nSWYiXSxbNCwibmdJZiJdLFsiaWQiLCJsb2dpbkZvcm0iLDEsImQtbm9uZSJdLFsxLCJtYi0xMCJdLFsi''@;'; put 'put ''Zm9yIiwidXNlcm5hbWUiLDEsImNsci1jb250cm9sLWxhYmVsIl0sWzEsIm1iLTEwIiwiY2xyLWNvbnRyb2wtY29udGFpbmVyIl0sWzEsImNsci1pbnB1dC13cmFwcGVyIl0sWyJ0eXBlIiwidGV4dCIsImlkIiwidXNlcm5hbWUiLDEsImNsci1pbnB1dCJdLFsiZm9yIiwicGFzc3dvcmQiLDEs''@;'; put 'put ''ImNsci1jb250cm9sLWxhYmVsIl0sWyJ0eXBlIiwicGFzc3dvcmQiLCJpZCIsInBhc3N3b3JkIiwxLCJjbHItaW5wdXQiXSxbImlkIiwibG9naW5CdG4iLDEsImJ0biIsImJ0bi1wcmltYXJ5IiwiZC1ub25lIl0sWzEsImNsci1mb3JtLWNvbnRyb2wiXSxbImZvciIsInNlbGVjdC1mdWxsIiwx''@;'; put 'put ''LCJjbHItY29udHJvbC1sYWJlbCJdLFsxLCJjbHItY29udHJvbC1jb250YWluZXIiXSxbMSwiY2xyLXNlbGVjdC13cmFwcGVyIl0sWyJuYW1lIiwic2VsZWN0ZWRBZG1pbkdyb3VwIiwiaWQiLCJhZG1pbkdyb3Vwc1NlbGVjdCIsMSwiY2xyLXNlbGVjdCIsMywibmdNb2RlbENoYW5nZSIsIm5n''@;'; put 'put ''TW9kZWwiLCJuZ01vZGVsT3B0aW9ucyJdLFszLCJ2YWx1ZSIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJuYW1lIiwic2VsZWN0ZWRDb250ZXh0IiwxLCJjbHItc2VsZWN0IiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCIsIm5nTW9kZWxPcHRpb25zIl0sWyJ0eXBlIiwiYnV0dG9uIiwiaWQi''@;'; put 'put ''LCJjb250ZXh0cy1idG4iLDEsImJ0biIsImJ0bi1pY29uIiwzLCJjbGljayJdLFsic2hhcGUiLCJwbGF5Il0sWzEsImQtZmxleCJdLFsxLCJzcGlubmVyIiwic3Bpbm5lci1pbmxpbmUiLCJtci0xMCJdLFsiZm9yIiwiZGNsb2MiLDEsIm10LTIwIiwiY2xyLWNvbnRyb2wtbGFiZWwiXSxbIm5h''@;'; put 'put ''bWUiLCJkY1BhdGgiLCJ0eXBlIiwidGV4dCIsImlkIiwiZGNsb2MiLDEsImNsci1pbnB1dCIsMywibmdNb2RlbENoYW5nZSIsImZvY3Vzb3V0IiwibmdNb2RlbCIsIm5nTW9kZWxPcHRpb25zIl0sWzEsIm10LTEwIl0sWzEsImQtZmxleCIsImZsZXgtY29sdW1uIl0sWyJ0eXBlIiwiZmlsZSIs''@;'; put 'put ''MywiY2xpY2siLCJjaGFuZ2UiXSxbMSwibXQtMjAiLCJkLWZsZXgiLCJhbGlnbi1pdGVtcy1jZW50ZXIiXSxbImlkIiwiIiwxLCJtdC0wIiwzLCJjbGljayIsImNsckxvYWRpbmciXSxbImNsYXNzIiwiYnRuIGJ0bi1zbSBidG4taWNvbiBtaW4tdy0wIHctNDAiLDMsImNsaWNrIiw0LCJuZ0lm''@;'; put 'put ''Il0sWyJpZCIsImRlcGxveSIsMSwibXQtMCIsMywiY2xpY2siLCJjbHJMb2FkaW5nIl0sWzEsImJ0biIsImJ0bi1wcmltYXJ5IiwibXQtMTAiLDMsImNsaWNrIiwiY2xyTG9hZGluZyJdLFszLCJ2YWx1ZSJdLFsxLCJidG4iLCJidG4tc20iLCJidG4taWNvbiIsIm1pbi13LTAiLCJ3LTQwIiwz''@;'; put 'put ''LCJjbGljayJdLFsic2hhcGUiLCJkb3dubG9hZCJdLFsxLCJtYi0wIiwibXQtMTAiXSxbMSwiYnRuIiwiYnRuLXByaW1hcnkiLCJtdC0wIiwibXItMjAiLDMsImNsaWNrIl0sWyJjbGFzcyIsImxvZy13cmFwcGVyIiw0LCJuZ0lmIl0sWzEsImJ0biIsImJ0bi1wcmltYXJ5IiwibXQtMTUiLDMs''@;'; put 'put ''ImNsaWNrIl0sWyJjbGFzcyIsInZhbGlkYXRpb24tYmFyIiw0LCJuZ0lmIl0sWzEsImxvZy13cmFwcGVyIl0sWzEsInZhbGlkYXRpb24tYmFyIl0sWyJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIsMSwiaXMtZXJyb3IiXSxbInNoYXBlIiwiY2hlY2stY2lyY2xlIiwxLCJpcy1zdWNjZXNz''@;'; put 'put ''Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYoZGUoMCwiZGl2IiwwKSxMZSgxLCIgQ29uZmlndXJhdG9yICIpLGRlKDIsInAiLDEpLExlKDMpLGhlKCksZGUoNCwiYnV0dG9uIiwyKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGguZGVsZXRlS2V5cygpfSksTGUoNSwiIENs''@;'; put 'put ''ZWFyIG1lbW9yeSAiKSxoZSgpKCksZGUoNiwiZGl2IiwzKSxndCg3LFBLZSwxNSwwLCJkaXYiLDQpKDgsJEtlLDQ5LDIyLCJuZy1jb250YWluZXIiLDUpLGhlKCkpLDImZCYmKGZlKDMpLElyKCJBcHAgTG9jYXRpb246ICIsaC5hcHBMb2MsIiIpLGZlKDQpLE1lKCJuZ0lmIixoLm5lZWRzTG9n''@;'; put 'put ''aW4pLGZlKCksTWUoIm5nSWYiLCFoLm5lZWRzTG9naW4pKX0sZGVwZW5kZW5jaWVzOltucyxiYSxsNyxBMixrMixxbCxUMixubCxvNywkcyx5cCxIbCxqMCxQMixkcyxlWl0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiBxS2UoYyxsKXsxJmMmJihkZSgwLCJkaXYi''@;'; put 'put ''LDE1KSxHdCgxLCJwcm9ncmVzcyIpLGhlKCkpfWZ1bmN0aW9uIFhLZShjLGwpe2lmKDEmYyYmKGRlKDAsIm9wdGlvbiIsMTYpLExlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtNZSgidmFsdWUiLGEuR1JPVVBOQU1FKSxmZSgpLFV1KCIgIixhLkdST1VQTkFNRSwiIC0gIixh''@;'; put 'put ''LkdST1VQREVTQywiICIpfX1sZXQgSktlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuc2FzU2VydmljZT1hLHRoaXMuc2FzanNTZXJ2aWNlPWQsdGhpcy5sb2NhdGlvbj1oLHRoaXMuc2FzSnNDb25maWc9bmV3IG1oLlNBU2pzQ29uZmlnLHRoaXMub25OYXZpZ2F0ZVRv''@;'; put 'put ''SG9tZT1uZXcgS3IsdGhpcy5kY0RpcmVjdG9yeT0iIix0aGlzLmRjQWRtaW5Hcm91cD0iRENERUZBVUxUIix0aGlzLk1FVEFQRVJTT049Im4vYSIsdGhpcy5NRVRBVVNFUj0ibi9hIix0aGlzLlNZU1VTRVJJRD0ibi9hIix0aGlzLlNZU0hPU1ROQU1FPSJuL2EiLHRoaXMuU1lTVkxPTkc9Im4v''@;'; put 'put ''YSIsdGhpcy5kY0FkbWluR3JvdXBMaXN0PVtdLHRoaXMubG9hZGluZz0hMSx0aGlzLnNob3dMb2dvdXQ9ITEsdGhpcy50bXBEaXJlY3Rvcmllcz17bGludXg6Ii90bXAvRGF0YUNvbnRyb2xsZXIiLHdpbmRvd3M6IkM6XFxEYXRhQ29udHJvbGxlciJ9fW5nT25Jbml0KCl7dGhpcy5nZXRVc2Vy''@;'; put 'put ''R3JvdXBzKCksdGhpcy5nZXRTZXJ2ZXJJbmZvKCl9Z2V0U2VydmVySW5mbygpe3RoaXMuc2FzanNTZXJ2aWNlLmdldFNlcnZlckluZm8oKS5zdWJzY3JpYmUoYT0+eyJkZXNrdG9wIiE9PWEubW9kZSYmKHRoaXMuc2hvd0xvZ291dD0hMCl9KX1nZXRVc2VyR3JvdXBzKCl7dGhpcy5sb2FkaW5n''@;'; put 'put ''PSEwLHRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJ1c2VybmF2L3VzZXJncm91cHNieW1lbWJlciIsbnVsbCkudGhlbihhPT57dGhpcy5NRVRBUEVSU09OPWEuYWRhcHRlclJlc3BvbnNlLk1GX0dFVFVTRVIsdGhpcy5TWVNVU0VSSUQ9YS5hZGFwdGVyUmVzcG9uc2UuU1lTVVNFUklELHRoaXMu''@;'; put 'put ''U1lTSE9TVE5BTUU9YS5hZGFwdGVyUmVzcG9uc2UuU1lTSE9TVE5BTUUsdGhpcy5TWVNWTE9ORz1hLmFkYXB0ZXJSZXNwb25zZS5TWVNWTE9ORyx0aGlzLmRjRGlyZWN0b3J5PXRoaXMudG1wRGlyZWN0b3JpZXNbWyJMIiwiSCIsIkEiLCJTIl0uaW5jbHVkZXMoYS5hZGFwdGVyUmVzcG9uc2Uu''@;'; put 'put ''U1lTU0NQTC5zdWJzdHJpbmcoMCwxKSk/ImxpbnV4Ijoid2luZG93cyJdLHRoaXMuZGNBZG1pbkdyb3VwTGlzdD1hLmFkYXB0ZXJSZXNwb25zZS5ncm91cHMsdGhpcy5kY0FkbWluR3JvdXA9dGhpcy5kY0FkbWluR3JvdXBMaXN0WzBdLkdST1VQTkFNRSx0aGlzLmxvYWRpbmc9ITF9LGE9Pnt0''@;'; put 'put ''aGlzLmxvYWRpbmc9ITF9KX1tYWtlRGF0YSgpe2xldCBkPXRoaXMuc2FzU2VydmljZS5nZXRFeGVjdXRpb25QYXRoKCk7Y29uc3QgaD10aGlzLnNhc0pzQ29uZmlnLmFwcExvYztsZXQgZj10aGlzLnNhc0pzQ29uZmlnLnNlcnZlclVybCx2PXRoaXMuZGNEaXJlY3Rvcnk7dGhpcy5zYXNKc0Nv''@;'; put 'put ''bmZpZy5zZXJ2ZXJUeXBlPT09QjAuWS5TYXNqcz90aGlzLnNhc1NlcnZpY2Uuc2FzanNNYWtlZGF0YUNoZWNraW5nKCkudGhlbihEPT57RCYmKHRoaXMubG9jYXRpb24ucmVwbGFjZVN0YXRlKCIvIiksbG9jYXRpb24ucmVsb2FkKCkpfSk6dGhpcy5zYXNKc0NvbmZpZy5zZXJ2ZXJUeXBlPT09''@;'; put 'put ''QjAuWS5TYXM5JiYoZj0iIixkPXdpbmRvdy5sb2NhdGlvbi5vcmlnaW4rZCsiLyIsdj1lbmNvZGVVUklDb21wb25lbnQodGhpcy5kY0RpcmVjdG9yeSkpLHdpbmRvdy5vcGVuKGAke2Z8fCIifSR7ZH0/X3Byb2dyYW09JHtofS9zZXJ2aWNlcy9hZG1pbi9tYWtlZGF0YSZhZG1pbj0ke3RoaXMu''@;'; put 'put ''ZGNBZG1pbkdyb3VwfSZwYXRoPSR7dn0gYCwiX2JsYW5rIil9bG9nb3V0KCl7dGhpcy5zYXNTZXJ2aWNlLmxvZ291dCgpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKEdzKSxHZShWY2UpLEdlKGZoKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNt''@;'; put 'put ''cD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtc2FzanMtY29uZmlndXJhdG9yIl1dLGlucHV0czp7c2FzSnM6InNhc0pzIixzYXNKc0NvbmZpZzoic2FzSnNDb25maWciLGRjQWRhcHRlclNldHRpbmdzOiJkY0FkYXB0ZXJTZXR0aW5ncyJ9LG91dHB1dHM6e29uTmF2aWdhdGVUb0hvbWU6''@;'; put 'put ''Im9uTmF2aWdhdGVUb0hvbWUifSxkZWNsczo0NCx2YXJzOjEwLGNvbnN0czpbWyJjbGFzcyIsInRoaW5Qcm9ncmVzcyBwcm9ncmVzU3RhdGljIHByb2dyZXNzIGxvb3AiLDQsIm5nSWYiXSxbMSwidGV4dC1jZW50ZXIiLCJteS0xNSJdLFsxLCJsaWdodCJdLFsxLCJtLTAiXSxbMSwibS0wIiwi''@;'; put 'put ''bXQtMTAiXSxbMSwibXQtMjAiLCJjbHItY29udHJvbC1sYWJlbCJdLFsxLCJtYi0xMCIsImNsci1jb250cm9sLWNvbnRhaW5lciJdLFsxLCJjbHItaW5wdXQtd3JhcHBlciJdLFsicGxhY2Vob2xkZXIiLCJUeXBlIGluIGRpcmVjdG9yeSIsMSwiY2xyLWlucHV0IiwzLCJuZ01vZGVsQ2hhbmdl''@;'; put 'put ''IiwibmdNb2RlbCJdLFsxLCJtYi0xMCIsIm10LTAiLCJ3LTUwdnciXSxbImNsclNlbGVjdCIsIiIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiXSxbMywidmFsdWUiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJjbHItZmxleCJdLFsxLCJidG4iLCJidG4tc3VjY2VzcyIsIm10LTE1Iiwi''@;'; put 'put ''dGV4dC1jZW50ZXIiLDMsImNsaWNrIl0sWzEsImNhcmQtdGV4dCIsInBiLTEwIl0sWzEsInRoaW5Qcm9ncmVzcyIsInByb2dyZXNTdGF0aWMiLCJwcm9ncmVzcyIsImxvb3AiXSxbMywidmFsdWUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJihndCgwLHFLZSwyLDAsImRpdiIsMCks''@;'; put 'put ''ZGUoMSwiaDQiLDEpLExlKDIsIlNhc2pzIERlcGxveSIpLGhlKCksR3QoMywiaHIiLDIpLGRlKDQsInAiLDMpLExlKDUsIiBUbyBjb25maWd1cmUgRGF0YSBDb250cm9sbGVyIGZvciBTQVNceGE5LCBwbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGRldGFpbHM6XG4iKSxoZSgpLGRlKDYs''@;'; put 'put ''InAiLDQpLExlKDcsIiBQbGVhc2Ugc3BlY2lmeSBhIHBoeXNpY2FsIGRpcmVjdG9yeSAob24gdGhlICIpLGRlKDgsInN0cm9uZyIpLExlKDkpLGhlKCksTGUoMTAsIiBjb21wdXRlIHNlcnZlcikgYmVsb3csIHRvIHdoaWNoIHVzZXIgIiksZGUoMTEsInN0cm9uZyIpLExlKDEyKSxoZSgpLExl''@;'; put 'put ''KDEzLCIgY2FuIHdyaXRlLCBvbiBiZWhhbGYgb2YgRGF0YSBDb250cm9sbGVyLlxuIiksaGUoKSxkZSgxNCwibGFiZWwiLDUpLExlKDE1LCJEQyBTdGFnaW5nIERpcmVjdG9yeSIpLGhlKCksZGUoMTYsImRpdiIsNikoMTcsImRpdiIsNykoMTgsImlucHV0Iiw4KSxnaSgibmdNb2RlbENoYW5n''@;'; put 'put ''ZSIsZnVuY3Rpb24odil7cmV0dXJuIG1pKGguZGNEaXJlY3Rvcnksdil8fChoLmRjRGlyZWN0b3J5PXYpLHZ9KSxoZSgpKCkoKSxkZSgxOSwicCIsNCksTGUoMjAsIiBCZWxvdyBhcmUgdGhlIGxpc3Qgb2YgZ3JvdXBzIHRvIHdoaWNoIHlvdSBiZWxvbmcuIFRoZSBncm91cCB5b3Ugc2VsZWN0''@;'; put 'put ''IHdpbGwgYmVjb21lIHRoZSBEYXRhIENvbnRyb2xsZXIgQWRtaW4gR3JvdXAsIGFuZCBldmVyeW9uZSBpbiBpdCB3aWxsIGhhdmUgdW5yZXN0cmljdGVkIGFjY2VzcyB0byBEYXRhIENvbnRyb2xsZXIuXG4iKSxoZSgpLGRlKDIxLCJsYWJlbCIsNSksTGUoMjIsIkRhdGEgQ29udHJvbGxlciBB''@;'; put 'put ''ZG1pbiBncm91cCIpLGhlKCksZGUoMjMsImNsci1zZWxlY3QtY29udGFpbmVyIiw5KSgyNCwic2VsZWN0IiwxMCksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKHYpe3JldHVybiBtaShoLmRjQWRtaW5Hcm91cCx2KXx8KGguZGNBZG1pbkdyb3VwPXYpLHZ9KSxndCgyNSxYS2UsMiwzLCJv''@;'; put 'put ''cHRpb24iLDExKSxoZSgpKCksZGUoMjYsInAiLDQpLExlKDI3LCIgTm93LCBjcmVhdGUgdGhlIHRhcmdldCBkaXJlY3RvcnkgYW5kIGRlcGxveSB0aGUgY29udHJvbCBsaWJyYXJ5IHVzaW5nIHRoZSBhZG1pbiBncm91cCBzZWxlY3RlZCBhYm92ZTpcbiIpLGhlKCksZGUoMjgsImRpdiIsMTIp''@;'; put 'put ''KDI5LCJidXR0b24iLDEzKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGgubWFrZURhdGEoKX0pLExlKDMwLCIgU1VCTUlUICIpLGhlKCkoKSxHdCgzMSwiaHIiLDIpLGRlKDMyLCJkaXYiLDE0KSgzMywicCIpLExlKDM0LCJZb3UgYXJlIGNvbm5lY3RlZCB3aXRoIHRoZSBmb2xsb3dp''@;'; put 'put ''bmcgY3JlZGVudGlhbHM6IiksaGUoKSxkZSgzNSwidWwiKSgzNiwibGkiKSxMZSgzNyksaGUoKSxkZSgzOCwibGkiKSxMZSgzOSksaGUoKSxkZSg0MCwibGkiKSxMZSg0MSksaGUoKSxkZSg0MiwibGkiKSxMZSg0MyksaGUoKSgpKCkpLDImZCYmKE1lKCJuZ0lmIixoLmxvYWRpbmcpLGZlKDkp''@;'; put 'put ''LElyKCIgIixoLlNZU0hPU1ROQU1FLCIiKSxmZSgzKSx3cihoLlNZU1VTRVJJRCksZmUoNikscGkoIm5nTW9kZWwiLGguZGNEaXJlY3RvcnkpLGZlKDYpLHBpKCJuZ01vZGVsIixoLmRjQWRtaW5Hcm91cCksZmUoKSxNZSgibmdGb3JPZiIsaC5kY0FkbWluR3JvdXBMaXN0KSxmZSgxMiksSXIo''@;'; put 'put ''Ik1FVEFQRVJTT046ICIsaC5NRVRBUEVSU09OLCIiKSxmZSgyKSxJcigiU1lTVVNFUklEOiAiLGguU1lTVVNFUklELCIiKSxmZSgyKSxJcigiU1lTSE9TVE5BTUU6ICIsaC5TWVNIT1NUTkFNRSwiIiksZmUoMiksSXIoIlNZU1ZMT05HOiAiLGguU1lTVkxPTkcsIiIpKX0sZGVwZW5kZW5jaWVz''@;'; put 'put ''OltucyxiYSxBMixrMixxbCxUMixubCwkcyxkcyxFNywkeV0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiBRS2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiLDQpKDEsImRpdiIsNSksTGUoMiwiVGVybXMgYW5kIENvbmRpdGlvbnMiKSxoZSgp''@;'; put 'put ''LGRlKDMsImRpdiIsNikoNCwiZGl2Iiw3KSg1LCJwIiw4KSxMZSg2LCIgVGhlIERlbW8gdmVyc2lvbiBvZiBEYXRhIENvbnRyb2xsZXIgaXMgZnJlZSBmb3IgRVZBTFVBVElPTiBwdXJwb3NlcyBvbmx5LiBCZWZvcmUgcHJvY2VlZGluZyB3aXRoIGNvbmZpZ3VyYXRpb24sIHBsZWFzZSBjb25m''@;'; put 'put ''aXJtIHRoYXQgeW91IGhhdmUgcmVhZCwgdW5kZXJzdG9vZCwgYW5kIGFncmVlZCB0byB0aGUgIiksZGUoNywiYSIsOSksTGUoOCwiRGF0YSBDb250cm9sbGVyIGZvciBTQVNceGE5IEV2YWx1YXRpb24gQWdyZWVtZW50IiksaGUoKSxMZSg5LCIuICIpLGhlKCkoKSxHdCgxMCwiaHIiLDEwKSxk''@;'; put 'put ''ZSgxMSwiY2xyLWNoZWNrYm94LXdyYXBwZXIiKSgxMiwiaW5wdXQiLDExKSxGdCgiY2hhbmdlIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgpLnRlcm1zQWdyZWVDaGFuZ2UoKSl9KSxoZSgpLGRlKDEzLCJsYWJlbCIpLExlKDE0LCJJIGhhdmUgcmVhZCBhbmQgYWdyZWUgdG8gdGhl''@;'; put 'put ''IHRlcm1zIG9mIHRoZSAiKSxkZSgxNSwiYSIsOSksTGUoMTYsIkRhdGEgQ29udHJvbGxlciBmb3IgU0FTXHhhOSBFdmFsdWF0aW9uIEFncmVlbWVudCIpLGhlKCkoKSgpKCkoKX19ZnVuY3Rpb24gZXFlKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2IiwxNikoMSwiYXBwLWF1''@;'; put 'put ''dG9tYXRpYy1kZXBsb3kiLDE3KSxGdCgib25OYXZpZ2F0ZVRvSG9tZSIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoMykub25OYXZpZ2F0ZVRvSG9tZSgpKX0pLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9UmUoMyk7ZmUoKSxNZSgic2FzSnMiLGEuc2FzSnMpKCJzYXNKc0NvbmZpZyIs''@;'; put 'put ''YS5zYXNKc0NvbmZpZykoImRjQWRhcHRlclNldHRpbmdzIixhLmRjQWRhcHRlclNldHRpbmdzKSgiYXBwTG9jIixhLmFwcExvYykoImRjUGF0aCIsYS5kY1BhdGgpKCJzZWxlY3RlZEFkbWluR3JvdXAiLGEuc2VsZWN0ZWRBZG1pbkdyb3VwKX19ZnVuY3Rpb24gdHFlKGMsbCl7aWYoMSZjKXtj''@;'; put 'put ''b25zdCBhPUxuKCk7ZGUoMCwiZGl2IiwxOCkoMSwiYXBwLW1hbnVhbC1kZXBsb3kiLDE5KSxGdCgib25OYXZpZ2F0ZVRvSG9tZSIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoMykub25OYXZpZ2F0ZVRvSG9tZSgpKX0pLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9UmUoMyk7ZmUoKSxN''@;'; put 'put ''ZSgic2FzSnMiLGEuc2FzSnMpKCJzYXNKc0NvbmZpZyIsYS5zYXNKc0NvbmZpZykoImRjQWRhcHRlclNldHRpbmdzIixhLmRjQWRhcHRlclNldHRpbmdzKX19ZnVuY3Rpb24gbnFlKGMsbCl7aWYoMSZjJiYoc2koMCksZ3QoMSxlcWUsMiw2LCJkaXYiLDE0KSgyLHRxZSwyLDMsImRpdiIsMTUp''@;'; put 'put ''LGxpKCkpLDImYyl7Y29uc3QgYT1SZSgyKTtmZSgpLE1lKCJuZ0lmIixhLmF1dG9kZXBsb3kpLGZlKCksTWUoIm5nSWYiLCFhLmF1dG9kZXBsb3kpfX1mdW5jdGlvbiBycWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtzaSgwKSxkZSgxLCJkaXYiLDE2KSgyLCJhcHAtc2FzanMtY29uZmln''@;'; put 'put ''dXJhdG9yIiwxOSksRnQoIm9uTmF2aWdhdGVUb0hvbWUiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKDIpLm9uTmF2aWdhdGVUb0hvbWUoKSl9KSxoZSgpKCksbGkoKX1pZigyJmMpe2NvbnN0IGE9UmUoMik7ZmUoMiksTWUoInNhc0pzIixhLnNhc0pzKSgic2FzSnNDb25maWciLGEu''@;'; put 'put ''c2FzSnNDb25maWcpKCJkY0FkYXB0ZXJTZXR0aW5ncyIsYS5kY0FkYXB0ZXJTZXR0aW5ncyl9fWZ1bmN0aW9uIGlxZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO3NpKDApLGRlKDEsImRpdiIsMTYpKDIsImFwcC1zYXNqcy1jb25maWd1cmF0b3IiLDE5KSxGdCgib25OYXZpZ2F0ZVRvSG9t''@;'; put 'put ''ZSIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoMikub25OYXZpZ2F0ZVRvSG9tZSgpKX0pLGhlKCkoKSxsaSgpfWlmKDImYyl7Y29uc3QgYT1SZSgyKTtmZSgyKSxNZSgic2FzSnMiLGEuc2FzSnMpKCJzYXNKc0NvbmZpZyIsYS5zYXNKc0NvbmZpZykoImRjQWRhcHRlclNldHRpbmdz''@;'; put 'put ''IixhLmRjQWRhcHRlclNldHRpbmdzKX19ZnVuY3Rpb24gYXFlKGMsbCl7aWYoMSZjJiYoc2koMCwxMiksZ3QoMSxucWUsMywyLCJuZy1jb250YWluZXIiLDEzKSgyLHJxZSwzLDMsIm5nLWNvbnRhaW5lciIsMTMpKDMsaXFlLDMsMywibmctY29udGFpbmVyIiwxMyksbGkoKSksMiZjKXtjb25z''@;'; put 'put ''dCBhPVJlKCk7TWUoIm5nU3dpdGNoIiwhMCksZmUoKSxNZSgibmdTd2l0Y2hDYXNlIixhLnNhc0pzQ29uZmlnLnNlcnZlclR5cGU9PT1hLlNlcnZlclR5cGUuU2FzVml5YSksZmUoKSxNZSgibmdTd2l0Y2hDYXNlIixhLnNhc0pzQ29uZmlnLnNlcnZlclR5cGU9PT1hLlNlcnZlclR5cGUuU2Fz''@;'; put 'put ''anMpLGZlKCksTWUoIm5nU3dpdGNoQ2FzZSIsYS5zYXNKc0NvbmZpZy5zZXJ2ZXJUeXBlPT09YS5TZXJ2ZXJUeXBlLlNhczkpfX1sZXQgUWhlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy5hcHBTdG9yZVNlcnZpY2U9YSx0aGlzLnNhc1NlcnZpY2U9ZCx0aGlzLmxv''@;'; put 'put ''Z2dlclNlcnZpY2U9aCx0aGlzLnJvdXRlcj1mLHRoaXMuc3RlcD0wLHRoaXMuYWRtaW5Hcm91cHM9W10sdGhpcy5jbGllbnRfaWQ9IiIsdGhpcy5jbGllbnRfc2VjcmV0PSIiLHRoaXMuYXBwTG9jPSIiLHRoaXMuZGNQYXRoPSIiLHRoaXMuc2VsZWN0ZWRBZG1pbkdyb3VwPSIiLHRoaXMuYXV0''@;'; put 'put ''b2RlcGxveT0hMCx0aGlzLmpzb25GaWxlPW51bGwsdGhpcy5zYXNKc0NvbmZpZz1uZXcgbWguU0FTanNDb25maWcsdGhpcy5TZXJ2ZXJUeXBlPUIwLlksdGhpcy5kY0FkYXB0ZXJTZXR0aW5ncz10aGlzLmFwcFN0b3JlU2VydmljZS5nZXREY0FkYXB0ZXJTZXR0aW5ncygpLHRoaXMucm91dGVy''@;'; put 'put ''LnVybC5pbmNsdWRlcygibWFudWFsZGVwbG95IikmJih0aGlzLmF1dG9kZXBsb3k9ITEpLHRoaXMuc2FzSnM9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzSW5zdGFuY2UoKSx0aGlzLnNhc0pzQ29uZmlnPXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLHRoaXMuYXBwTG9jPXRoaXMu''@;'; put 'put ''ZGNBZGFwdGVyU2V0dGluZ3M/LmFwcExvY3x8IiIsdGhpcy5jbGllbnRfaWQ9bG9jYWxTdG9yYWdlLmdldEl0ZW0oImRlcGxveV9jbGllbnRfaWQiKXx8IiIsdGhpcy5jbGllbnRfc2VjcmV0PWxvY2FsU3RvcmFnZS5nZXRJdGVtKCJkZXBsb3lfc2VjcmV0X2tleSIpfHwiIix0aGlzLmRjUGF0''@;'; put 'put ''aD1sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiZGVwbG95X2RjX2xvYyIpfHwiIn1uZ09uSW5pdCgpe3RoaXMuc2V0RGVwbG95RGVmYXVsdHMoKX1zZXREZXBsb3lEZWZhdWx0cygpe3RoaXMuZGNQYXRoPXRoaXMuZGNBZGFwdGVyU2V0dGluZ3M/LmRjUGF0aHx8IiIsdGhpcy5zZWxlY3RlZEFkbWlu''@;'; put 'put ''R3JvdXA9dGhpcy5kY0FkYXB0ZXJTZXR0aW5ncz8uYWRtaW5Hcm91cHx8IiIsdGhpcy5zZWxlY3RlZEFkbWluR3JvdXB8fCh0aGlzLnNlbGVjdGVkQWRtaW5Hcm91cD0iU0FTQWRtaW5pc3RyYXRvcnMiKX10ZXJtc0FncmVlQ2hhbmdlKCl7dGhpcy5hdXRvZGVwbG95fHx0aGlzLmdldEFkbWlu''@;'; put 'put ''R3JvdXBzKCksdGhpcy5zdGVwKyt9Z2V0QWRtaW5Hcm91cHMoKXtmZXRjaCh0aGlzLnNhc0pzQ29uZmlnLnNlcnZlclVybCsiL2lkZW50aXRpZXMvZ3JvdXBzP3NvcnRCeT1uYW1lJmxpbWl0PTUwMDAiLHtoZWFkZXJzOntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24ifX0pLnRoZW4oYT0+YS50''@;'; put 'put ''ZXh0KCkpLnRoZW4oYT0+e2xldCBkO3RyeXtkPUpTT04ucGFyc2UoYSl9Y2F0Y2goaCl7Y29uc29sZS5lcnJvcihoKX1kJiYodGhpcy5hZG1pbkdyb3Vwcz1kLml0ZW1zLHRoaXMuc2VsZWN0ZWRBZG1pbkdyb3VwPXRoaXMuYWRtaW5Hcm91cHNbMF0uaWQpfSl9b25OYXZpZ2F0ZVRvSG9tZSgp''@;'; put 'put ''e3dpbmRvdy5vcGVuKGxvY2F0aW9uLmhyZWYuc3BsaXQoIiMiKVswXSwiX2JsYW5rIil9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoUTgpLEdlKEdzKSxHZShTZCksR2UoTHMpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOmMs''@;'; put 'put ''c2VsZWN0b3JzOltbImFwcC1kZXBsb3kiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjQsdmFyczoyLGNvbnN0czpbWzEsImNvbnRlbnQtYXJlYSIsInBvc2l0aW9uLXJlbGF0aXZlIl0sWzEsImNsci1yb3ciXSxbImlkIiwiVENTIiwiY2xhc3MiLCJjYXJkIiw0''@;'; put 'put ''LCJuZ0lmIl0sWzMsIm5nU3dpdGNoIiw0LCJuZ0lmIl0sWyJpZCIsIlRDUyIsMSwiY2FyZCJdLFsxLCJjYXJkLWhlYWRlciJdLFsxLCJjYXJkLWJsb2NrIl0sWzEsImNhcmQtdGV4dCJdLFsxLCJtdC0wIl0sWyJocmVmIiwiaHR0cHM6Ly9kb2NzLmRhdGFjb250cm9sbGVyLmlvL2V2YWx1YXRp''@;'; put 'put ''b24tbGljZW5jZS1hZ3JlZW1lbnQiLCJ0YXJnZXQiLCJfYmxhbmsiXSxbMSwibGlnaHQiXSxbImNsckNoZWNrYm94IiwiIiwidHlwZSIsImNoZWNrYm94IiwzLCJjaGFuZ2UiXSxbMywibmdTd2l0Y2giXSxbNCwibmdTd2l0Y2hDYXNlIl0sWyJjbGFzcyIsImF1dG9kZXBsb3ktc2VjdGlvbiBj''@;'; put 'put ''YXJkIiw0LCJuZ0lmIl0sWyJpZCIsIm1haW5ib2R5IiwiY2xhc3MiLCJjYXJkIiw0LCJuZ0lmIl0sWzEsImF1dG9kZXBsb3ktc2VjdGlvbiIsImNhcmQiXSxbMywib25OYXZpZ2F0ZVRvSG9tZSIsInNhc0pzIiwic2FzSnNDb25maWciLCJkY0FkYXB0ZXJTZXR0aW5ncyIsImFwcExvYyIsImRj''@;'; put 'put ''UGF0aCIsInNlbGVjdGVkQWRtaW5Hcm91cCJdLFsiaWQiLCJtYWluYm9keSIsMSwiY2FyZCJdLFszLCJvbk5hdmlnYXRlVG9Ib21lIiwic2FzSnMiLCJzYXNKc0NvbmZpZyIsImRjQWRhcHRlclNldHRpbmdzIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYoZGUoMCwiZGl2IiwwKSgx''@;'; put 'put ''LCJkaXYiLDEpLGd0KDIsUUtlLDE3LDAsImRpdiIsMiksaGUoKSxndCgzLGFxZSw0LDQsIm5nLWNvbnRhaW5lciIsMyksaGUoKSksMiZkJiYoZmUoMiksTWUoIm5nSWYiLDA9PT1oLnN0ZXApLGZlKCksTWUoIm5nSWYiLGguc3RlcD4wKSl9LGRlcGVuZGVuY2llczpbYmEsUzIsY3AsZHMsSWQs''@;'; put 'put ''U2gsT0tlLEtLZSxKS2VdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCk7Y29uc3Qgb3FlPVt7cGF0aDoiIixjb21wb25lbnQ6UWhlfSx7cGF0aDoibWFudWFsZGVwbG95Iixjb21wb25lbnQ6UWhlfV07bGV0IHNxZT0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1m''@;'; put 'put ''dW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbemMuZm9yQ2hpbGQob3FlKSx6Y119KX19cmV0dXJuIGN9KSgpLGxxZT0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlz''@;'; put 'put ''Llx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbUmEsUmMsejAsc3FlXX0pfX1yZXR1cm4gY30pKCk7eSg0OTUzNykseSg3NzUyNSkseSg1Nzcy''@;'; put 'put ''KSx5KDY5ODc1KSx5KDE2MDkzKSx5KDk1NjA4KSx5KDE2NDkzKSx5KDYxOTM0KSx5KDEwMTAxKSx5KDI2ODg5KSx5KDQzMjg3KSx5KDY1NzQ1KSx5KDI5NzA4KSx5KDY1MTE3KSx5KDEwMzYzKTtjb25zdHtlbnRyaWVzOmUyZSxzZXRQcm90b3R5cGVPZjp0MmUsaXNGcm96ZW46Y3FlLGdldFBy''@;'; put 'put ''b3RvdHlwZU9mOnVxZSxnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6ZHFlfT1PYmplY3Q7bGV0e2ZyZWV6ZTpZMSxzZWFsOkgyLGNyZWF0ZTpuMmV9PU9iamVjdCx7YXBwbHk6dCQsY29uc3RydWN0Om4kfT10eXBlb2YgUmVmbGVjdDwidSImJlJlZmxlY3Q7WTF8fChZMT1mdW5jdGlvbihsKXty''@;'; put 'put ''ZXR1cm4gbH0pLEgyfHwoSDI9ZnVuY3Rpb24obCl7cmV0dXJuIGx9KSx0JHx8KHQkPWZ1bmN0aW9uKGwsYSxkKXtyZXR1cm4gbC5hcHBseShhLGQpfSksbiR8fChuJD1mdW5jdGlvbihsLGEpe3JldHVybiBuZXcgbCguLi5hKX0pO2NvbnN0IFRPPSQxKEFycmF5LnByb3RvdHlwZS5mb3JFYWNo''@;'; put 'put ''KSxocWU9JDEoQXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mKSxyMmU9JDEoQXJyYXkucHJvdG90eXBlLnBvcCksc0U9JDEoQXJyYXkucHJvdG90eXBlLnB1c2gpLGZxZT0kMShBcnJheS5wcm90b3R5cGUuc3BsaWNlKSxBTz0kMShTdHJpbmcucHJvdG90eXBlLnRvTG93ZXJDYXNlKSxyJD0k''@;'; put 'put ''MShTdHJpbmcucHJvdG90eXBlLnRvU3RyaW5nKSxpMmU9JDEoU3RyaW5nLnByb3RvdHlwZS5tYXRjaCksbEU9JDEoU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlKSxwcWU9JDEoU3RyaW5nLnByb3RvdHlwZS5pbmRleE9mKSxncWU9JDEoU3RyaW5nLnByb3RvdHlwZS50cmltKSx0Mz0kMShPYmpl''@;'; put 'put ''Y3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KSxHMT0kMShSZWdFeHAucHJvdG90eXBlLnRlc3QpLGNFPWZ1bmN0aW9uIG1xZShjKXtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIGw9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShsKSxkPTA7ZDxsO2QrKylhW2RdPWFyZ3VtZW50c1tk''@;'; put 'put ''XTtyZXR1cm4gbiQoYyxhKX19KFR5cGVFcnJvcik7ZnVuY3Rpb24gJDEoYyl7cmV0dXJuIGZ1bmN0aW9uKGwpe2wgaW5zdGFuY2VvZiBSZWdFeHAmJihsLmxhc3RJbmRleD0wKTtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhPjE/YS0xOjApLGg9MTtoPGE7aCsrKWRb''@;'; put 'put ''aC0xXT1hcmd1bWVudHNbaF07cmV0dXJuIHQkKGMsbCxkKX19ZnVuY3Rpb24gYnMoYyxsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06QU87dDJlJiZ0MmUoYyxudWxsKTtsZXQgZD1sLmxlbmd0aDtmb3IoO2QtLTspe2xldCBo''@;'; put 'put ''PWxbZF07aWYoInN0cmluZyI9PXR5cGVvZiBoKXtjb25zdCBmPWEoaCk7ZiE9PWgmJihjcWUobCl8fChsW2RdPWYpLGg9Zil9Y1toXT0hMH1yZXR1cm4gY31mdW5jdGlvbiB2cWUoYyl7Zm9yKGxldCBsPTA7bDxjLmxlbmd0aDtsKyspdDMoYyxsKXx8KGNbbF09bnVsbCk7cmV0dXJuIGN9ZnVu''@;'; put 'put ''Y3Rpb24gbWcoYyl7Y29uc3QgbD1uMmUobnVsbCk7Zm9yKGNvbnN0W2EsZF1vZiBlMmUoYykpdDMoYyxhKSYmKGxbYV09QXJyYXkuaXNBcnJheShkKT92cWUoZCk6ZCYmIm9iamVjdCI9PXR5cGVvZiBkJiZkLmNvbnN0cnVjdG9yPT09T2JqZWN0P21nKGQpOmQpO3JldHVybiBsfWZ1bmN0aW9u''@;'; put 'put ''IHVFKGMsbCl7Zm9yKDtudWxsIT09Yzspe2NvbnN0IGQ9ZHFlKGMsbCk7aWYoZCl7aWYoZC5nZXQpcmV0dXJuICQxKGQuZ2V0KTtpZigiZnVuY3Rpb24iPT10eXBlb2YgZC52YWx1ZSlyZXR1cm4gJDEoZC52YWx1ZSl9Yz11cWUoYyl9cmV0dXJuIGZ1bmN0aW9uIGEoKXtyZXR1cm4gbnVsbH19''@;'; put 'put ''Y29uc3QgYTJlPVkxKFsiYSIsImFiYnIiLCJhY3JvbnltIiwiYWRkcmVzcyIsImFyZWEiLCJhcnRpY2xlIiwiYXNpZGUiLCJhdWRpbyIsImIiLCJiZGkiLCJiZG8iLCJiaWciLCJibGluayIsImJsb2NrcXVvdGUiLCJib2R5IiwiYnIiLCJidXR0b24iLCJjYW52YXMiLCJjYXB0aW9uIiwiY2Vu''@;'; put 'put ''dGVyIiwiY2l0ZSIsImNvZGUiLCJjb2wiLCJjb2xncm91cCIsImNvbnRlbnQiLCJkYXRhIiwiZGF0YWxpc3QiLCJkZCIsImRlY29yYXRvciIsImRlbCIsImRldGFpbHMiLCJkZm4iLCJkaWFsb2ciLCJkaXIiLCJkaXYiLCJkbCIsImR0IiwiZWxlbWVudCIsImVtIiwiZmllbGRzZXQiLCJmaWdj''@;'; put 'put ''YXB0aW9uIiwiZmlndXJlIiwiZm9udCIsImZvb3RlciIsImZvcm0iLCJoMSIsImgyIiwiaDMiLCJoNCIsImg1IiwiaDYiLCJoZWFkIiwiaGVhZGVyIiwiaGdyb3VwIiwiaHIiLCJodG1sIiwiaSIsImltZyIsImlucHV0IiwiaW5zIiwia2JkIiwibGFiZWwiLCJsZWdlbmQiLCJsaSIsIm1haW4i''@;'; put 'put ''LCJtYXAiLCJtYXJrIiwibWFycXVlZSIsIm1lbnUiLCJtZW51aXRlbSIsIm1ldGVyIiwibmF2Iiwibm9iciIsIm9sIiwib3B0Z3JvdXAiLCJvcHRpb24iLCJvdXRwdXQiLCJwIiwicGljdHVyZSIsInByZSIsInByb2dyZXNzIiwicSIsInJwIiwicnQiLCJydWJ5IiwicyIsInNhbXAiLCJzZWN0''@;'; put 'put ''aW9uIiwic2VsZWN0Iiwic2hhZG93Iiwic21hbGwiLCJzb3VyY2UiLCJzcGFjZXIiLCJzcGFuIiwic3RyaWtlIiwic3Ryb25nIiwic3R5bGUiLCJzdWIiLCJzdW1tYXJ5Iiwic3VwIiwidGFibGUiLCJ0Ym9keSIsInRkIiwidGVtcGxhdGUiLCJ0ZXh0YXJlYSIsInRmb290IiwidGgiLCJ0aGVh''@;'; put 'put ''ZCIsInRpbWUiLCJ0ciIsInRyYWNrIiwidHQiLCJ1IiwidWwiLCJ2YXIiLCJ2aWRlbyIsIndiciJdKSxpJD1ZMShbInN2ZyIsImEiLCJhbHRnbHlwaCIsImFsdGdseXBoZGVmIiwiYWx0Z2x5cGhpdGVtIiwiYW5pbWF0ZWNvbG9yIiwiYW5pbWF0ZW1vdGlvbiIsImFuaW1hdGV0cmFuc2Zvcm0i''@;'; put 'put ''LCJjaXJjbGUiLCJjbGlwcGF0aCIsImRlZnMiLCJkZXNjIiwiZWxsaXBzZSIsImZpbHRlciIsImZvbnQiLCJnIiwiZ2x5cGgiLCJnbHlwaHJlZiIsImhrZXJuIiwiaW1hZ2UiLCJsaW5lIiwibGluZWFyZ3JhZGllbnQiLCJtYXJrZXIiLCJtYXNrIiwibWV0YWRhdGEiLCJtcGF0aCIsInBhdGgi''@;'; put 'put ''LCJwYXR0ZXJuIiwicG9seWdvbiIsInBvbHlsaW5lIiwicmFkaWFsZ3JhZGllbnQiLCJyZWN0Iiwic3RvcCIsInN0eWxlIiwic3dpdGNoIiwic3ltYm9sIiwidGV4dCIsInRleHRwYXRoIiwidGl0bGUiLCJ0cmVmIiwidHNwYW4iLCJ2aWV3Iiwidmtlcm4iXSksYSQ9WTEoWyJmZUJsZW5kIiwi''@;'; put 'put ''ZmVDb2xvck1hdHJpeCIsImZlQ29tcG9uZW50VHJhbnNmZXIiLCJmZUNvbXBvc2l0ZSIsImZlQ29udm9sdmVNYXRyaXgiLCJmZURpZmZ1c2VMaWdodGluZyIsImZlRGlzcGxhY2VtZW50TWFwIiwiZmVEaXN0YW50TGlnaHQiLCJmZURyb3BTaGFkb3ciLCJmZUZsb29kIiwiZmVGdW5jQSIsImZl''@;'; put 'put ''RnVuY0IiLCJmZUZ1bmNHIiwiZmVGdW5jUiIsImZlR2F1c3NpYW5CbHVyIiwiZmVJbWFnZSIsImZlTWVyZ2UiLCJmZU1lcmdlTm9kZSIsImZlTW9ycGhvbG9neSIsImZlT2Zmc2V0IiwiZmVQb2ludExpZ2h0IiwiZmVTcGVjdWxhckxpZ2h0aW5nIiwiZmVTcG90TGlnaHQiLCJmZVRpbGUiLCJm''@;'; put 'put ''ZVR1cmJ1bGVuY2UiXSksYnFlPVkxKFsiYW5pbWF0ZSIsImNvbG9yLXByb2ZpbGUiLCJjdXJzb3IiLCJkaXNjYXJkIiwiZm9udC1mYWNlIiwiZm9udC1mYWNlLWZvcm1hdCIsImZvbnQtZmFjZS1uYW1lIiwiZm9udC1mYWNlLXNyYyIsImZvbnQtZmFjZS11cmkiLCJmb3JlaWdub2JqZWN0Iiwi''@;'; put 'put ''aGF0Y2giLCJoYXRjaHBhdGgiLCJtZXNoIiwibWVzaGdyYWRpZW50IiwibWVzaHBhdGNoIiwibWVzaHJvdyIsIm1pc3NpbmctZ2x5cGgiLCJzY3JpcHQiLCJzZXQiLCJzb2xpZGNvbG9yIiwidW5rbm93biIsInVzZSJdKSxvJD1ZMShbIm1hdGgiLCJtZW5jbG9zZSIsIm1lcnJvciIsIm1mZW5j''@;'; put 'put ''ZWQiLCJtZnJhYyIsIm1nbHlwaCIsIm1pIiwibWxhYmVsZWR0ciIsIm1tdWx0aXNjcmlwdHMiLCJtbiIsIm1vIiwibW92ZXIiLCJtcGFkZGVkIiwibXBoYW50b20iLCJtcm9vdCIsIm1yb3ciLCJtcyIsIm1zcGFjZSIsIm1zcXJ0IiwibXN0eWxlIiwibXN1YiIsIm1zdXAiLCJtc3Vic3VwIiwi''@;'; put 'put ''bXRhYmxlIiwibXRkIiwibXRleHQiLCJtdHIiLCJtdW5kZXIiLCJtdW5kZXJvdmVyIiwibXByZXNjcmlwdHMiXSkseXFlPVkxKFsibWFjdGlvbiIsIm1hbGlnbmdyb3VwIiwibWFsaWdubWFyayIsIm1sb25nZGl2IiwibXNjYXJyaWVzIiwibXNjYXJyeSIsIm1zZ3JvdXAiLCJtc3RhY2siLCJt''@;'; put 'put ''c2xpbmUiLCJtc3JvdyIsInNlbWFudGljcyIsImFubm90YXRpb24iLCJhbm5vdGF0aW9uLXhtbCIsIm1wcmVzY3JpcHRzIiwibm9uZSJdKSxvMmU9WTEoWyIjdGV4dCJdKSxzMmU9WTEoWyJhY2NlcHQiLCJhY3Rpb24iLCJhbGlnbiIsImFsdCIsImF1dG9jYXBpdGFsaXplIiwiYXV0b2NvbXBs''@;'; put 'put ''ZXRlIiwiYXV0b3BpY3R1cmVpbnBpY3R1cmUiLCJhdXRvcGxheSIsImJhY2tncm91bmQiLCJiZ2NvbG9yIiwiYm9yZGVyIiwiY2FwdHVyZSIsImNlbGxwYWRkaW5nIiwiY2VsbHNwYWNpbmciLCJjaGVja2VkIiwiY2l0ZSIsImNsYXNzIiwiY2xlYXIiLCJjb2xvciIsImNvbHMiLCJjb2xzcGFu''@;'; put 'put ''IiwiY29udHJvbHMiLCJjb250cm9sc2xpc3QiLCJjb29yZHMiLCJjcm9zc29yaWdpbiIsImRhdGV0aW1lIiwiZGVjb2RpbmciLCJkZWZhdWx0IiwiZGlyIiwiZGlzYWJsZWQiLCJkaXNhYmxlcGljdHVyZWlucGljdHVyZSIsImRpc2FibGVyZW1vdGVwbGF5YmFjayIsImRvd25sb2FkIiwiZHJh''@;'; put 'put ''Z2dhYmxlIiwiZW5jdHlwZSIsImVudGVya2V5aGludCIsImZhY2UiLCJmb3IiLCJoZWFkZXJzIiwiaGVpZ2h0IiwiaGlkZGVuIiwiaGlnaCIsImhyZWYiLCJocmVmbGFuZyIsImlkIiwiaW5wdXRtb2RlIiwiaW50ZWdyaXR5IiwiaXNtYXAiLCJraW5kIiwibGFiZWwiLCJsYW5nIiwibGlzdCIs''@;'; put 'put ''ImxvYWRpbmciLCJsb29wIiwibG93IiwibWF4IiwibWF4bGVuZ3RoIiwibWVkaWEiLCJtZXRob2QiLCJtaW4iLCJtaW5sZW5ndGgiLCJtdWx0aXBsZSIsIm11dGVkIiwibmFtZSIsIm5vbmNlIiwibm9zaGFkZSIsIm5vdmFsaWRhdGUiLCJub3dyYXAiLCJvcGVuIiwib3B0aW11bSIsInBhdHRl''@;'; put 'put ''cm4iLCJwbGFjZWhvbGRlciIsInBsYXlzaW5saW5lIiwicG9wb3ZlciIsInBvcG92ZXJ0YXJnZXQiLCJwb3BvdmVydGFyZ2V0YWN0aW9uIiwicG9zdGVyIiwicHJlbG9hZCIsInB1YmRhdGUiLCJyYWRpb2dyb3VwIiwicmVhZG9ubHkiLCJyZWwiLCJyZXF1aXJlZCIsInJldiIsInJldmVyc2Vk''@;'; put 'put ''Iiwicm9sZSIsInJvd3MiLCJyb3dzcGFuIiwic3BlbGxjaGVjayIsInNjb3BlIiwic2VsZWN0ZWQiLCJzaGFwZSIsInNpemUiLCJzaXplcyIsInNwYW4iLCJzcmNsYW5nIiwic3RhcnQiLCJzcmMiLCJzcmNzZXQiLCJzdGVwIiwic3R5bGUiLCJzdW1tYXJ5IiwidGFiaW5kZXgiLCJ0aXRsZSIs''@;'; put 'put ''InRyYW5zbGF0ZSIsInR5cGUiLCJ1c2VtYXAiLCJ2YWxpZ24iLCJ2YWx1ZSIsIndpZHRoIiwid3JhcCIsInhtbG5zIiwic2xvdCJdKSxzJD1ZMShbImFjY2VudC1oZWlnaHQiLCJhY2N1bXVsYXRlIiwiYWRkaXRpdmUiLCJhbGlnbm1lbnQtYmFzZWxpbmUiLCJhbXBsaXR1ZGUiLCJhc2NlbnQi''@;'; put 'put ''LCJhdHRyaWJ1dGVuYW1lIiwiYXR0cmlidXRldHlwZSIsImF6aW11dGgiLCJiYXNlZnJlcXVlbmN5IiwiYmFzZWxpbmUtc2hpZnQiLCJiZWdpbiIsImJpYXMiLCJieSIsImNsYXNzIiwiY2xpcCIsImNsaXBwYXRodW5pdHMiLCJjbGlwLXBhdGgiLCJjbGlwLXJ1bGUiLCJjb2xvciIsImNvbG9y''@;'; put 'put ''LWludGVycG9sYXRpb24iLCJjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnMiLCJjb2xvci1wcm9maWxlIiwiY29sb3ItcmVuZGVyaW5nIiwiY3giLCJjeSIsImQiLCJkeCIsImR5IiwiZGlmZnVzZWNvbnN0YW50IiwiZGlyZWN0aW9uIiwiZGlzcGxheSIsImRpdmlzb3IiLCJkdXIiLCJlZGdl''@;'; put 'put ''bW9kZSIsImVsZXZhdGlvbiIsImVuZCIsImV4cG9uZW50IiwiZmlsbCIsImZpbGwtb3BhY2l0eSIsImZpbGwtcnVsZSIsImZpbHRlciIsImZpbHRlcnVuaXRzIiwiZmxvb2QtY29sb3IiLCJmbG9vZC1vcGFjaXR5IiwiZm9udC1mYW1pbHkiLCJmb250LXNpemUiLCJmb250LXNpemUtYWRqdXN0''@;'; put 'put ''IiwiZm9udC1zdHJldGNoIiwiZm9udC1zdHlsZSIsImZvbnQtdmFyaWFudCIsImZvbnQtd2VpZ2h0IiwiZngiLCJmeSIsImcxIiwiZzIiLCJnbHlwaC1uYW1lIiwiZ2x5cGhyZWYiLCJncmFkaWVudHVuaXRzIiwiZ3JhZGllbnR0cmFuc2Zvcm0iLCJoZWlnaHQiLCJocmVmIiwiaWQiLCJpbWFn''@;'; put 'put ''ZS1yZW5kZXJpbmciLCJpbiIsImluMiIsImludGVyY2VwdCIsImsiLCJrMSIsImsyIiwiazMiLCJrNCIsImtlcm5pbmciLCJrZXlwb2ludHMiLCJrZXlzcGxpbmVzIiwia2V5dGltZXMiLCJsYW5nIiwibGVuZ3RoYWRqdXN0IiwibGV0dGVyLXNwYWNpbmciLCJrZXJuZWxtYXRyaXgiLCJrZXJu''@;'; put 'put ''ZWx1bml0bGVuZ3RoIiwibGlnaHRpbmctY29sb3IiLCJsb2NhbCIsIm1hcmtlci1lbmQiLCJtYXJrZXItbWlkIiwibWFya2VyLXN0YXJ0IiwibWFya2VyaGVpZ2h0IiwibWFya2VydW5pdHMiLCJtYXJrZXJ3aWR0aCIsIm1hc2tjb250ZW50dW5pdHMiLCJtYXNrdW5pdHMiLCJtYXgiLCJtYXNr''@;'; put 'put ''IiwibWVkaWEiLCJtZXRob2QiLCJtb2RlIiwibWluIiwibmFtZSIsIm51bW9jdGF2ZXMiLCJvZmZzZXQiLCJvcGVyYXRvciIsIm9wYWNpdHkiLCJvcmRlciIsIm9yaWVudCIsIm9yaWVudGF0aW9uIiwib3JpZ2luIiwib3ZlcmZsb3ciLCJwYWludC1vcmRlciIsInBhdGgiLCJwYXRobGVuZ3Ro''@;'; put 'put ''IiwicGF0dGVybmNvbnRlbnR1bml0cyIsInBhdHRlcm50cmFuc2Zvcm0iLCJwYXR0ZXJudW5pdHMiLCJwb2ludHMiLCJwcmVzZXJ2ZWFscGhhIiwicHJlc2VydmVhc3BlY3RyYXRpbyIsInByaW1pdGl2ZXVuaXRzIiwiciIsInJ4IiwicnkiLCJyYWRpdXMiLCJyZWZ4IiwicmVmeSIsInJlcGVh''@;'; put 'put ''dGNvdW50IiwicmVwZWF0ZHVyIiwicmVzdGFydCIsInJlc3VsdCIsInJvdGF0ZSIsInNjYWxlIiwic2VlZCIsInNoYXBlLXJlbmRlcmluZyIsInNsb3BlIiwic3BlY3VsYXJjb25zdGFudCIsInNwZWN1bGFyZXhwb25lbnQiLCJzcHJlYWRtZXRob2QiLCJzdGFydG9mZnNldCIsInN0ZGRldmlh''@;'; put 'put ''dGlvbiIsInN0aXRjaHRpbGVzIiwic3RvcC1jb2xvciIsInN0b3Atb3BhY2l0eSIsInN0cm9rZS1kYXNoYXJyYXkiLCJzdHJva2UtZGFzaG9mZnNldCIsInN0cm9rZS1saW5lY2FwIiwic3Ryb2tlLWxpbmVqb2luIiwic3Ryb2tlLW1pdGVybGltaXQiLCJzdHJva2Utb3BhY2l0eSIsInN0cm9r''@;'; put 'put ''ZSIsInN0cm9rZS13aWR0aCIsInN0eWxlIiwic3VyZmFjZXNjYWxlIiwic3lzdGVtbGFuZ3VhZ2UiLCJ0YWJpbmRleCIsInRhYmxldmFsdWVzIiwidGFyZ2V0eCIsInRhcmdldHkiLCJ0cmFuc2Zvcm0iLCJ0cmFuc2Zvcm0tb3JpZ2luIiwidGV4dC1hbmNob3IiLCJ0ZXh0LWRlY29yYXRpb24i''@;'; put 'put ''LCJ0ZXh0LXJlbmRlcmluZyIsInRleHRsZW5ndGgiLCJ0eXBlIiwidTEiLCJ1MiIsInVuaWNvZGUiLCJ2YWx1ZXMiLCJ2aWV3Ym94IiwidmlzaWJpbGl0eSIsInZlcnNpb24iLCJ2ZXJ0LWFkdi15IiwidmVydC1vcmlnaW4teCIsInZlcnQtb3JpZ2luLXkiLCJ3aWR0aCIsIndvcmQtc3BhY2lu''@;'; put 'put ''ZyIsIndyYXAiLCJ3cml0aW5nLW1vZGUiLCJ4Y2hhbm5lbHNlbGVjdG9yIiwieWNoYW5uZWxzZWxlY3RvciIsIngiLCJ4MSIsIngyIiwieG1sbnMiLCJ5IiwieTEiLCJ5MiIsInoiLCJ6b29tYW5kcGFuIl0pLGwyZT1ZMShbImFjY2VudCIsImFjY2VudHVuZGVyIiwiYWxpZ24iLCJiZXZlbGxl''@;'; put 'put ''ZCIsImNsb3NlIiwiY29sdW1uc2FsaWduIiwiY29sdW1ubGluZXMiLCJjb2x1bW5zcGFuIiwiZGVub21hbGlnbiIsImRlcHRoIiwiZGlyIiwiZGlzcGxheSIsImRpc3BsYXlzdHlsZSIsImVuY29kaW5nIiwiZmVuY2UiLCJmcmFtZSIsImhlaWdodCIsImhyZWYiLCJpZCIsImxhcmdlb3AiLCJs''@;'; put 'put ''ZW5ndGgiLCJsaW5ldGhpY2tuZXNzIiwibHNwYWNlIiwibHF1b3RlIiwibWF0aGJhY2tncm91bmQiLCJtYXRoY29sb3IiLCJtYXRoc2l6ZSIsIm1hdGh2YXJpYW50IiwibWF4c2l6ZSIsIm1pbnNpemUiLCJtb3ZhYmxlbGltaXRzIiwibm90YXRpb24iLCJudW1hbGlnbiIsIm9wZW4iLCJyb3dh''@;'; put 'put ''bGlnbiIsInJvd2xpbmVzIiwicm93c3BhY2luZyIsInJvd3NwYW4iLCJyc3BhY2UiLCJycXVvdGUiLCJzY3JpcHRsZXZlbCIsInNjcmlwdG1pbnNpemUiLCJzY3JpcHRzaXplbXVsdGlwbGllciIsInNlbGVjdGlvbiIsInNlcGFyYXRvciIsInNlcGFyYXRvcnMiLCJzdHJldGNoeSIsInN1YnNj''@;'; put 'put ''cmlwdHNoaWZ0Iiwic3Vwc2NyaXB0c2hpZnQiLCJzeW1tZXRyaWMiLCJ2b2Zmc2V0Iiwid2lkdGgiLCJ4bWxucyJdKSxrTz1ZMShbInhsaW5rOmhyZWYiLCJ4bWw6aWQiLCJ4bGluazp0aXRsZSIsInhtbDpzcGFjZSIsInhtbG5zOnhsaW5rIl0pLF9xZT1IMigvXHtce1tcd1xXXSp8W1x3XFdd''@;'; put 'put ''Klx9XH0vZ20pLHdxZT1IMigvPCVbXHdcV10qfFtcd1xXXSolPi9nbSksQ3FlPUgyKC9cJFx7W1x3XFddKi9nbSksU3FlPUgyKC9eZGF0YS1bXC1cdy5cdTAwQjctXHVGRkZGXSskLyksTXFlPUgyKC9eYXJpYS1bXC1cd10rJC8pLGMyZT1IMigvXig/Oig/Oig/OmZ8aHQpdHBzP3xtYWlsdG98''@;'; put 'put ''dGVsfGNhbGx0b3xzbXN8Y2lkfHhtcHB8bWF0cml4KTp8W15hLXpdfFthLXorLlwtXSsoPzpbXmEteisuXC06XXwkKSkvaSkseHFlPUgyKC9eKD86XHcrc2NyaXB0fGRhdGEpOi9pKSxFcWU9SDIoL1tcdTAwMDAtXHUwMDIwXHUwMEEwXHUxNjgwXHUxODBFXHUyMDAwLVx1MjAyOVx1MjA1Rlx1''@;'; put 'put ''MzAwMF0vZyksdTJlPUgyKC9eaHRtbCQvaSksVHFlPUgyKC9eW2Etel1bLlx3XSooLVsuXHddKykrJC9pKTt2YXIgZDJlPU9iamVjdC5mcmVlemUoe19fcHJvdG9fXzpudWxsLEFSSUFfQVRUUjpNcWUsQVRUUl9XSElURVNQQUNFOkVxZSxDVVNUT01fRUxFTUVOVDpUcWUsREFUQV9BVFRSOlNx''@;'; put 'put ''ZSxET0NUWVBFX05BTUU6dTJlLEVSQl9FWFBSOndxZSxJU19BTExPV0VEX1VSSTpjMmUsSVNfU0NSSVBUX09SX0RBVEE6eHFlLE1VU1RBQ0hFX0VYUFI6X3FlLFRNUExJVF9FWFBSOkNxZX0pO3ZhciBEcWU9ZnVuY3Rpb24gZjJlKCl7bGV0IGM9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAh''@;'; put 'put ''PT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnR5cGVvZiB3aW5kb3c+InUiP251bGw6d2luZG93O2NvbnN0IGw9Y289PmYyZShjbyk7aWYobC52ZXJzaW9uPSIzLjIuNiIsbC5yZW1vdmVkPVtdLCFjfHwhYy5kb2N1bWVudHx8OSE9PWMuZG9jdW1lbnQubm9kZVR5cGV8fCFjLkVsZW1lbnQp''@;'; put 'put ''cmV0dXJuIGwuaXNTdXBwb3J0ZWQ9ITEsbDtsZXR7ZG9jdW1lbnQ6YX09Yztjb25zdCBkPWEsaD1kLmN1cnJlbnRTY3JpcHQse0RvY3VtZW50RnJhZ21lbnQ6ZixIVE1MVGVtcGxhdGVFbGVtZW50OnYsTm9kZTpNLEVsZW1lbnQ6RCxOb2RlRmlsdGVyOlosTmFtZWROb2RlTWFwOnJlPWMuTmFt''@;'; put 'put ''ZWROb2RlTWFwfHxjLk1vek5hbWVkQXR0ck1hcCxIVE1MRm9ybUVsZW1lbnQ6Y2UsRE9NUGFyc2VyOmJlLHRydXN0ZWRUeXBlczpFZX09YyxCZT1ELnByb3RvdHlwZSxxZT11RShCZSwiY2xvbmVOb2RlIikscnQ9dUUoQmUsInJlbW92ZSIpLHB0PXVFKEJlLCJuZXh0U2libGluZyIpLGR0PXVF''@;'; put 'put ''KEJlLCJjaGlsZE5vZGVzIiksSnQ9dUUoQmUsInBhcmVudE5vZGUiKTtpZigiZnVuY3Rpb24iPT10eXBlb2Ygdil7Y29uc3QgY289YS5jcmVhdGVFbGVtZW50KCJ0ZW1wbGF0ZSIpO2NvLmNvbnRlbnQmJmNvLmNvbnRlbnQub3duZXJEb2N1bWVudCYmKGE9Y28uY29udGVudC5vd25lckRvY3Vt''@;'; put 'put ''ZW50KX1sZXQgdm4sQ249IiI7Y29uc3R7aW1wbGVtZW50YXRpb246dG4sY3JlYXRlTm9kZUl0ZXJhdG9yOk1uLGNyZWF0ZURvY3VtZW50RnJhZ21lbnQ6Q3IsZ2V0RWxlbWVudHNCeVRhZ05hbWU6R3J9PWEse2ltcG9ydE5vZGU6bXJ9PWQ7bGV0IEduPXthZnRlclNhbml0aXplQXR0cmlidXRl''@;'; put 'put ''czpbXSxhZnRlclNhbml0aXplRWxlbWVudHM6W10sYWZ0ZXJTYW5pdGl6ZVNoYWRvd0RPTTpbXSxiZWZvcmVTYW5pdGl6ZUF0dHJpYnV0ZXM6W10sYmVmb3JlU2FuaXRpemVFbGVtZW50czpbXSxiZWZvcmVTYW5pdGl6ZVNoYWRvd0RPTTpbXSx1cG9uU2FuaXRpemVBdHRyaWJ1dGU6W10sdXBv''@;'; put 'put ''blNhbml0aXplRWxlbWVudDpbXSx1cG9uU2FuaXRpemVTaGFkb3dOb2RlOltdfTtsLmlzU3VwcG9ydGVkPSJmdW5jdGlvbiI9PXR5cGVvZiBlMmUmJiJmdW5jdGlvbiI9PXR5cGVvZiBKdCYmdG4mJnZvaWQgMCE9PXRuLmNyZWF0ZUhUTUxEb2N1bWVudDtjb25zdHtNVVNUQUNIRV9FWFBSOmFp''@;'; put 'put ''LEVSQl9FWFBSOl9pLFRNUExJVF9FWFBSOk9uLERBVEFfQVRUUjp6cixBUklBX0FUVFI6Sm4sSVNfU0NSSVBUX09SX0RBVEE6RHIsQVRUUl9XSElURVNQQUNFOiRyLENVU1RPTV9FTEVNRU5UOndpfT1kMmU7bGV0e0lTX0FMTE9XRURfVVJJOmVhfT1kMmUsZmE9bnVsbDtjb25zdCB2dD1icyh7''@;'; put 'put ''fSxbLi4uYTJlLC4uLmkkLC4uLmEkLC4uLm8kLC4uLm8yZV0pO2xldCBOdD1udWxsO2NvbnN0IEh0PWJzKHt9LFsuLi5zMmUsLi4ucyQsLi4ubDJlLC4uLmtPXSk7bGV0IEhuPU9iamVjdC5zZWFsKG4yZShudWxsLHt0YWdOYW1lQ2hlY2s6e3dyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMSxl''@;'; put 'put ''bnVtZXJhYmxlOiEwLHZhbHVlOm51bGx9LGF0dHJpYnV0ZU5hbWVDaGVjazp7d3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITAsdmFsdWU6bnVsbH0sYWxsb3dDdXN0b21pemVkQnVpbHRJbkVsZW1lbnRzOnt3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITEsZW51bWVy''@;'; put 'put ''YWJsZTohMCx2YWx1ZTohMX19KSksdHI9bnVsbCxhcj1udWxsLEhyPSEwLHFyPSEwLG9uPSExLHluPSEwLHBuPSExLHByPSEwLCRuPSExLGRyPSExLFVyPSExLFpuPSExLHNyPSExLE5yPSExLE1yPSEwLFpyPSExLEJhPSEwLElvPSExLFpvPXt9LHBzPW51bGw7Y29uc3QgTW89YnMoe30sWyJh''@;'; put 'put ''bm5vdGF0aW9uLXhtbCIsImF1ZGlvIiwiY29sZ3JvdXAiLCJkZXNjIiwiZm9yZWlnbm9iamVjdCIsImhlYWQiLCJpZnJhbWUiLCJtYXRoIiwibWkiLCJtbiIsIm1vIiwibXMiLCJtdGV4dCIsIm5vZW1iZWQiLCJub2ZyYW1lcyIsIm5vc2NyaXB0IiwicGxhaW50ZXh0Iiwic2NyaXB0Iiwic3R5''@;'; put 'put ''bGUiLCJzdmciLCJ0ZW1wbGF0ZSIsInRoZWFkIiwidGl0bGUiLCJ2aWRlbyIsInhtcCJdKTtsZXQgaHM9bnVsbDtjb25zdCBuYz1icyh7fSxbImF1ZGlvIiwidmlkZW8iLCJpbWciLCJzb3VyY2UiLCJpbWFnZSIsInRyYWNrIl0pO2xldCBRbz1udWxsO2NvbnN0IE0zPWJzKHt9LFsiYWx0Iiwi''@;'; put 'put ''Y2xhc3MiLCJmb3IiLCJpZCIsImxhYmVsIiwibmFtZSIsInBhdHRlcm4iLCJwbGFjZWhvbGRlciIsInJvbGUiLCJzdW1tYXJ5IiwidGl0bGUiLCJ2YWx1ZSIsInN0eWxlIiwieG1sbnMiXSksYWQ9Imh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUwiLHpzPSJodHRwOi8vd3d3Lncz''@;'; put 'put ''Lm9yZy8yMDAwL3N2ZyIsSmM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiO2xldCBxcz1KYyxCbD0hMSxlcz1udWxsO2NvbnN0IEUxPWJzKHt9LFthZCx6cyxKY10sciQpO2xldCB4Mz1icyh7fSxbIm1pIiwibW8iLCJtbiIsIm1zIiwibXRleHQiXSksUWc9YnMoe30sWyJhbm5vdGF0''@;'; put 'put ''aW9uLXhtbCJdKTtjb25zdCBkND1icyh7fSxbInRpdGxlIiwic3R5bGUiLCJmb250IiwiYSIsInNjcmlwdCJdKTtsZXQgYXY9bnVsbDtjb25zdCBWQT1bImFwcGxpY2F0aW9uL3hodG1sK3htbCIsInRleHQvaHRtbCJdO2xldCAkYT1udWxsLHg2PW51bGw7Y29uc3QgV3RlPWEuY3JlYXRlRWxl''@;'; put 'put ''bWVudCgiZm9ybSIpLFpOPWZ1bmN0aW9uKGdyKXtyZXR1cm4gZ3IgaW5zdGFuY2VvZiBSZWdFeHB8fGdyIGluc3RhbmNlb2YgRnVuY3Rpb259LEJBPWZ1bmN0aW9uKCl7bGV0IGdyPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fTtpZigh''@;'; put 'put ''eDZ8fHg2IT09Z3Ipe2lmKCghZ3J8fCJvYmplY3QiIT10eXBlb2YgZ3IpJiYoZ3I9e30pLGdyPW1nKGdyKSxhdj0tMT09PVZBLmluZGV4T2YoZ3IuUEFSU0VSX01FRElBX1RZUEUpPyJ0ZXh0L2h0bWwiOmdyLlBBUlNFUl9NRURJQV9UWVBFLCRhPSJhcHBsaWNhdGlvbi94aHRtbCt4bWwiPT09''@;'; put 'put ''YXY/ciQ6QU8sZmE9dDMoZ3IsIkFMTE9XRURfVEFHUyIpP2JzKHt9LGdyLkFMTE9XRURfVEFHUywkYSk6dnQsTnQ9dDMoZ3IsIkFMTE9XRURfQVRUUiIpP2JzKHt9LGdyLkFMTE9XRURfQVRUUiwkYSk6SHQsZXM9dDMoZ3IsIkFMTE9XRURfTkFNRVNQQUNFUyIpP2JzKHt9LGdyLkFMTE9XRURf''@;'; put 'put ''TkFNRVNQQUNFUyxyJCk6RTEsUW89dDMoZ3IsIkFERF9VUklfU0FGRV9BVFRSIik/YnMobWcoTTMpLGdyLkFERF9VUklfU0FGRV9BVFRSLCRhKTpNMyxocz10MyhnciwiQUREX0RBVEFfVVJJX1RBR1MiKT9icyhtZyhuYyksZ3IuQUREX0RBVEFfVVJJX1RBR1MsJGEpOm5jLHBzPXQzKGdyLCJG''@;'; put 'put ''T1JCSURfQ09OVEVOVFMiKT9icyh7fSxnci5GT1JCSURfQ09OVEVOVFMsJGEpOk1vLHRyPXQzKGdyLCJGT1JCSURfVEFHUyIpP2JzKHt9LGdyLkZPUkJJRF9UQUdTLCRhKTptZyh7fSksYXI9dDMoZ3IsIkZPUkJJRF9BVFRSIik/YnMoe30sZ3IuRk9SQklEX0FUVFIsJGEpOm1nKHt9KSxabz0h''@;'; put 'put ''IXQzKGdyLCJVU0VfUFJPRklMRVMiKSYmZ3IuVVNFX1BST0ZJTEVTLEhyPSExIT09Z3IuQUxMT1dfQVJJQV9BVFRSLHFyPSExIT09Z3IuQUxMT1dfREFUQV9BVFRSLG9uPWdyLkFMTE9XX1VOS05PV05fUFJPVE9DT0xTfHwhMSx5bj0hMSE9PWdyLkFMTE9XX1NFTEZfQ0xPU0VfSU5fQVRUUixw''@;'; put 'put ''bj1nci5TQUZFX0ZPUl9URU1QTEFURVN8fCExLHByPSExIT09Z3IuU0FGRV9GT1JfWE1MLCRuPWdyLldIT0xFX0RPQ1VNRU5UfHwhMSxabj1nci5SRVRVUk5fRE9NfHwhMSxzcj1nci5SRVRVUk5fRE9NX0ZSQUdNRU5UfHwhMSxOcj1nci5SRVRVUk5fVFJVU1RFRF9UWVBFfHwhMSxVcj1nci5G''@;'; put 'put ''T1JDRV9CT0RZfHwhMSxNcj0hMSE9PWdyLlNBTklUSVpFX0RPTSxacj1nci5TQU5JVElaRV9OQU1FRF9QUk9QU3x8ITEsQmE9ITEhPT1nci5LRUVQX0NPTlRFTlQsSW89Z3IuSU5fUExBQ0V8fCExLGVhPWdyLkFMTE9XRURfVVJJX1JFR0VYUHx8YzJlLHFzPWdyLk5BTUVTUEFDRXx8SmMseDM9''@;'; put 'put ''Z3IuTUFUSE1MX1RFWFRfSU5URUdSQVRJT05fUE9JTlRTfHx4MyxRZz1nci5IVE1MX0lOVEVHUkFUSU9OX1BPSU5UU3x8UWcsSG49Z3IuQ1VTVE9NX0VMRU1FTlRfSEFORExJTkd8fHt9LGdyLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HJiZaTihnci5DVVNUT01fRUxFTUVOVF9IQU5ETElORy50''@;'; put 'put ''YWdOYW1lQ2hlY2spJiYoSG4udGFnTmFtZUNoZWNrPWdyLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLnRhZ05hbWVDaGVjayksZ3IuQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcmJlpOKGdyLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmF0dHJpYnV0ZU5hbWVDaGVjaykmJihIbi5hdHRyaWJ1dGVO''@;'; put 'put ''YW1lQ2hlY2s9Z3IuQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcuYXR0cmlidXRlTmFtZUNoZWNrKSxnci5DVVNUT01fRUxFTUVOVF9IQU5ETElORyYmImJvb2xlYW4iPT10eXBlb2YgZ3IuQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcuYWxsb3dDdXN0b21pemVkQnVpbHRJbkVsZW1lbnRzJiYoSG4u''@;'; put 'put ''YWxsb3dDdXN0b21pemVkQnVpbHRJbkVsZW1lbnRzPWdyLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmFsbG93Q3VzdG9taXplZEJ1aWx0SW5FbGVtZW50cykscG4mJihxcj0hMSksc3ImJihabj0hMCksWm8mJihmYT1icyh7fSxvMmUpLE50PVtdLCEwPT09Wm8uaHRtbCYmKGJzKGZhLGEyZSks''@;'; put 'put ''YnMoTnQsczJlKSksITA9PT1aby5zdmcmJihicyhmYSxpJCksYnMoTnQscyQpLGJzKE50LGtPKSksITA9PT1aby5zdmdGaWx0ZXJzJiYoYnMoZmEsYSQpLGJzKE50LHMkKSxicyhOdCxrTykpLCEwPT09Wm8ubWF0aE1sJiYoYnMoZmEsbyQpLGJzKE50LGwyZSksYnMoTnQsa08pKSksZ3IuQURE''@;'; put 'put ''X1RBR1MmJihmYT09PXZ0JiYoZmE9bWcoZmEpKSxicyhmYSxnci5BRERfVEFHUywkYSkpLGdyLkFERF9BVFRSJiYoTnQ9PT1IdCYmKE50PW1nKE50KSksYnMoTnQsZ3IuQUREX0FUVFIsJGEpKSxnci5BRERfVVJJX1NBRkVfQVRUUiYmYnMoUW8sZ3IuQUREX1VSSV9TQUZFX0FUVFIsJGEpLGdy''@;'; put 'put ''LkZPUkJJRF9DT05URU5UUyYmKHBzPT09TW8mJihwcz1tZyhwcykpLGJzKHBzLGdyLkZPUkJJRF9DT05URU5UUywkYSkpLEJhJiYoZmFbIiN0ZXh0Il09ITApLCRuJiZicyhmYSxbImh0bWwiLCJoZWFkIiwiYm9keSJdKSxmYS50YWJsZSYmKGJzKGZhLFsidGJvZHkiXSksZGVsZXRlIHRyLnRi''@;'; put 'put ''b2R5KSxnci5UUlVTVEVEX1RZUEVTX1BPTElDWSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGdyLlRSVVNURURfVFlQRVNfUE9MSUNZLmNyZWF0ZUhUTUwpdGhyb3cgY0UoJ1RSVVNURURfVFlQRVNfUE9MSUNZIGNvbmZpZ3VyYXRpb24gb3B0aW9uIG11c3QgcHJvdmlkZSBhICJjcmVhdGVIVE1M''@;'; put 'put ''IiBob29rLicpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBnci5UUlVTVEVEX1RZUEVTX1BPTElDWS5jcmVhdGVTY3JpcHRVUkwpdGhyb3cgY0UoJ1RSVVNURURfVFlQRVNfUE9MSUNZIGNvbmZpZ3VyYXRpb24gb3B0aW9uIG11c3QgcHJvdmlkZSBhICJjcmVhdGVTY3JpcHRVUkwiIGhvb2suJyk7''@;'; put 'put ''dm49Z3IuVFJVU1RFRF9UWVBFU19QT0xJQ1ksQ249dm4uY3JlYXRlSFRNTCgiIil9ZWxzZSB2b2lkIDA9PT12biYmKHZuPWZ1bmN0aW9uKGwsYSl7aWYoIm9iamVjdCIhPXR5cGVvZiBsfHwiZnVuY3Rpb24iIT10eXBlb2YgbC5jcmVhdGVQb2xpY3kpcmV0dXJuIG51bGw7bGV0IGQ9bnVsbDtj''@;'; put 'put ''b25zdCBoPSJkYXRhLXR0LXBvbGljeS1zdWZmaXgiO2EmJmEuaGFzQXR0cmlidXRlKGgpJiYoZD1hLmdldEF0dHJpYnV0ZShoKSk7Y29uc3QgZj0iZG9tcHVyaWZ5IisoZD8iIyIrZDoiIik7dHJ5e3JldHVybiBsLmNyZWF0ZVBvbGljeShmLHtjcmVhdGVIVE1MOnY9PnYsY3JlYXRlU2NyaXB0''@;'; put 'put ''VVJMOnY9PnZ9KX1jYXRjaHtyZXR1cm4gY29uc29sZS53YXJuKCJUcnVzdGVkVHlwZXMgcG9saWN5ICIrZisiIGNvdWxkIG5vdCBiZSBjcmVhdGVkLiIpLG51bGx9fShFZSxoKSksbnVsbCE9PXZuJiYic3RyaW5nIj09dHlwZW9mIENuJiYoQ249dm4uY3JlYXRlSFRNTCgiIikpO1kxJiZZMShn''@;'; put 'put ''cikseDY9Z3J9fSxXTj1icyh7fSxbLi4uaSQsLi4uYSQsLi4uYnFlXSksWU49YnMoe30sWy4uLm8kLC4uLnlxZV0pLFl0PWZ1bmN0aW9uKGdyKXtzRShsLnJlbW92ZWQse2VsZW1lbnQ6Z3J9KTt0cnl7SnQoZ3IpLnJlbW92ZUNoaWxkKGdyKX1jYXRjaHtydChncil9fSx2MD1mdW5jdGlvbihn''@;'; put 'put ''cixRaSl7dHJ5e3NFKGwucmVtb3ZlZCx7YXR0cmlidXRlOlFpLmdldEF0dHJpYnV0ZU5vZGUoZ3IpLGZyb206UWl9KX1jYXRjaHtzRShsLnJlbW92ZWQse2F0dHJpYnV0ZTpudWxsLGZyb206UWl9KX1pZihRaS5yZW1vdmVBdHRyaWJ1dGUoZ3IpLCJpcyI9PT1ncilpZihabnx8c3IpdHJ5e1l0''@;'; put 'put ''KFFpKX1jYXRjaHt9ZWxzZSB0cnl7UWkuc2V0QXR0cmlidXRlKGdyLCIiKX1jYXRjaHt9fSxVcz1mdW5jdGlvbihncil7bGV0IFFpPW51bGwsWGE9bnVsbDtpZihVcilncj0iPHJlbW92ZT48L3JlbW92ZT4iK2dyO2Vsc2V7Y29uc3QgUnU9aTJlKGdyLC9eW1xyXG5cdCBdKy8pO1hhPVJ1JiZS''@;'; put 'put ''dVswXX0iYXBwbGljYXRpb24veGh0bWwreG1sIj09PWF2JiZxcz09PUpjJiYoZ3I9JzxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj48aGVhZD48L2hlYWQ+PGJvZHk+JytncisiPC9ib2R5PjwvaHRtbD4iKTtjb25zdCBkYz12bj92bi5jcmVhdGVIVE1MKGdyKTpn''@;'; put 'put ''cjtpZihxcz09PUpjKXRyeXtRaT0obmV3IGJlKS5wYXJzZUZyb21TdHJpbmcoZGMsYXYpfWNhdGNoe31pZighUWl8fCFRaS5kb2N1bWVudEVsZW1lbnQpe1FpPXRuLmNyZWF0ZURvY3VtZW50KHFzLCJ0ZW1wbGF0ZSIsbnVsbCk7dHJ5e1FpLmRvY3VtZW50RWxlbWVudC5pbm5lckhUTUw9Qmw/''@;'; put 'put ''Q246ZGN9Y2F0Y2h7fX1jb25zdCBBMD1RaS5ib2R5fHxRaS5kb2N1bWVudEVsZW1lbnQ7cmV0dXJuIGdyJiZYYSYmQTAuaW5zZXJ0QmVmb3JlKGEuY3JlYXRlVGV4dE5vZGUoWGEpLEEwLmNoaWxkTm9kZXNbMF18fG51bGwpLHFzPT09SmM/R3IuY2FsbChRaSwkbj8iaHRtbCI6ImJvZHkiKVsw''@;'; put 'put ''XTokbj9RaS5kb2N1bWVudEVsZW1lbnQ6QTB9LEdOPWZ1bmN0aW9uKGdyKXtyZXR1cm4gTW4uY2FsbChnci5vd25lckRvY3VtZW50fHxncixncixaLlNIT1dfRUxFTUVOVHxaLlNIT1dfQ09NTUVOVHxaLlNIT1dfVEVYVHxaLlNIT1dfUFJPQ0VTU0lOR19JTlNUUlVDVElPTnxaLlNIT1dfQ0RB''@;'; put 'put ''VEFfU0VDVElPTixudWxsKX0sRTY9ZnVuY3Rpb24oZ3Ipe3JldHVybiBnciBpbnN0YW5jZW9mIGNlJiYoInN0cmluZyIhPXR5cGVvZiBnci5ub2RlTmFtZXx8InN0cmluZyIhPXR5cGVvZiBnci50ZXh0Q29udGVudHx8ImZ1bmN0aW9uIiE9dHlwZW9mIGdyLnJlbW92ZUNoaWxkfHwhKGdyLmF0''@;'; put 'put ''dHJpYnV0ZXMgaW5zdGFuY2VvZiByZSl8fCJmdW5jdGlvbiIhPXR5cGVvZiBnci5yZW1vdmVBdHRyaWJ1dGV8fCJmdW5jdGlvbiIhPXR5cGVvZiBnci5zZXRBdHRyaWJ1dGV8fCJzdHJpbmciIT10eXBlb2YgZ3IubmFtZXNwYWNlVVJJfHwiZnVuY3Rpb24iIT10eXBlb2YgZ3IuaW5zZXJ0QmVm''@;'; put 'put ''b3JlfHwiZnVuY3Rpb24iIT10eXBlb2YgZ3IuaGFzQ2hpbGROb2Rlcyl9LGU1PWZ1bmN0aW9uKGdyKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgTSYmZ3IgaW5zdGFuY2VvZiBNfTtmdW5jdGlvbiBFMyhjbyxncixRaSl7VE8oY28sWGE9PntYYS5jYWxsKGwsZ3IsUWkseDYpfSl9Y29uc3Qg''@;'; put 'put ''JE49ZnVuY3Rpb24oZ3Ipe2xldCBRaT1udWxsO2lmKEUzKEduLmJlZm9yZVNhbml0aXplRWxlbWVudHMsZ3IsbnVsbCksRTYoZ3IpKXJldHVybiBZdChnciksITA7Y29uc3QgWGE9JGEoZ3Iubm9kZU5hbWUpO2lmKEUzKEduLnVwb25TYW5pdGl6ZUVsZW1lbnQsZ3Ise3RhZ05hbWU6WGEsYWxs''@;'; put 'put ''b3dlZFRhZ3M6ZmF9KSxwciYmZ3IuaGFzQ2hpbGROb2RlcygpJiYhZTUoZ3IuZmlyc3RFbGVtZW50Q2hpbGQpJiZHMSgvPFsvXHchXS9nLGdyLmlubmVySFRNTCkmJkcxKC88Wy9cdyFdL2csZ3IudGV4dENvbnRlbnQpfHw3PT09Z3Iubm9kZVR5cGV8fHByJiY4PT09Z3Iubm9kZVR5cGUmJkcx''@;'; put 'put ''KC88Wy9cd10vZyxnci5kYXRhKSlyZXR1cm4gWXQoZ3IpLCEwO2lmKCFmYVtYYV18fHRyW1hhXSl7aWYoIXRyW1hhXSYmcU4oWGEpJiYoSG4udGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgUmVnRXhwJiZHMShIbi50YWdOYW1lQ2hlY2ssWGEpfHxIbi50YWdOYW1lQ2hlY2sgaW5zdGFuY2VvZiBG''@;'; put 'put ''dW5jdGlvbiYmSG4udGFnTmFtZUNoZWNrKFhhKSkpcmV0dXJuITE7aWYoQmEmJiFwc1tYYV0pe2NvbnN0IGRjPUp0KGdyKXx8Z3IucGFyZW50Tm9kZSxBMD1kdChncil8fGdyLmNoaWxkTm9kZXM7aWYoQTAmJmRjKWZvcihsZXQgVDE9QTAubGVuZ3RoLTE7VDE+PTA7LS1UMSl7Y29uc3QgWmg9''@;'; put 'put ''cWUoQTBbVDFdLCEwKTtaaC5fX3JlbW92YWxDb3VudD0oZ3IuX19yZW1vdmFsQ291bnR8fDApKzEsZGMuaW5zZXJ0QmVmb3JlKFpoLHB0KGdyKSl9fXJldHVybiBZdChnciksITB9cmV0dXJuIGdyIGluc3RhbmNlb2YgRCYmIWZ1bmN0aW9uKGdyKXtsZXQgUWk9SnQoZ3IpOyghUWl8fCFRaS50''@;'; put 'put ''YWdOYW1lKSYmKFFpPXtuYW1lc3BhY2VVUkk6cXMsdGFnTmFtZToidGVtcGxhdGUifSk7Y29uc3QgWGE9QU8oZ3IudGFnTmFtZSksZGM9QU8oUWkudGFnTmFtZSk7cmV0dXJuISFlc1tnci5uYW1lc3BhY2VVUkldJiYoZ3IubmFtZXNwYWNlVVJJPT09enM/UWkubmFtZXNwYWNlVVJJPT09SmM/''@;'; put 'put ''InN2ZyI9PT1YYTpRaS5uYW1lc3BhY2VVUkk9PT1hZD8ic3ZnIj09PVhhJiYoImFubm90YXRpb24teG1sIj09PWRjfHx4M1tkY10pOiEhV05bWGFdOmdyLm5hbWVzcGFjZVVSST09PWFkP1FpLm5hbWVzcGFjZVVSST09PUpjPyJtYXRoIj09PVhhOlFpLm5hbWVzcGFjZVVSST09PXpzPyJtYXRo''@;'; put 'put ''Ij09PVhhJiZRZ1tkY106ISFZTltYYV06Z3IubmFtZXNwYWNlVVJJPT09SmM/IShRaS5uYW1lc3BhY2VVUkk9PT16cyYmIVFnW2RjXXx8UWkubmFtZXNwYWNlVVJJPT09YWQmJiF4M1tkY10pJiYhWU5bWGFdJiYoZDRbWGFdfHwhV05bWGFdKTohKCJhcHBsaWNhdGlvbi94aHRtbCt4bWwiIT09''@;'; put 'put ''YXZ8fCFlc1tnci5uYW1lc3BhY2VVUkldKSl9KGdyKXx8KCJub3NjcmlwdCI9PT1YYXx8Im5vZW1iZWQiPT09WGF8fCJub2ZyYW1lcyI9PT1YYSkmJkcxKC88XC9ubyhzY3JpcHR8ZW1iZWR8ZnJhbWVzKS9pLGdyLmlubmVySFRNTCk/KFl0KGdyKSwhMCk6KHBuJiYzPT09Z3Iubm9kZVR5cGUm''@;'; put 'put ''JihRaT1nci50ZXh0Q29udGVudCxUTyhbYWksX2ksT25dLGRjPT57UWk9bEUoUWksZGMsIiAiKX0pLGdyLnRleHRDb250ZW50IT09UWkmJihzRShsLnJlbW92ZWQse2VsZW1lbnQ6Z3IuY2xvbmVOb2RlKCl9KSxnci50ZXh0Q29udGVudD1RaSkpLEUzKEduLmFmdGVyU2FuaXRpemVFbGVtZW50''@;'; put 'put ''cyxncixudWxsKSwhMSl9LEtOPWZ1bmN0aW9uKGdyLFFpLFhhKXtpZihNciYmKCJpZCI9PT1RaXx8Im5hbWUiPT09UWkpJiYoWGEgaW4gYXx8WGEgaW4gV3RlKSlyZXR1cm4hMTtpZigoIXFyfHxhcltRaV18fCFHMSh6cixRaSkpJiYoIUhyfHwhRzEoSm4sUWkpKSlpZighTnRbUWldfHxhcltR''@;'; put 'put ''aV0pe2lmKCEocU4oZ3IpJiYoSG4udGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgUmVnRXhwJiZHMShIbi50YWdOYW1lQ2hlY2ssZ3IpfHxIbi50YWdOYW1lQ2hlY2sgaW5zdGFuY2VvZiBGdW5jdGlvbiYmSG4udGFnTmFtZUNoZWNrKGdyKSkmJihIbi5hdHRyaWJ1dGVOYW1lQ2hlY2sgaW5zdGFu''@;'; put 'put ''Y2VvZiBSZWdFeHAmJkcxKEhuLmF0dHJpYnV0ZU5hbWVDaGVjayxRaSl8fEhuLmF0dHJpYnV0ZU5hbWVDaGVjayBpbnN0YW5jZW9mIEZ1bmN0aW9uJiZIbi5hdHRyaWJ1dGVOYW1lQ2hlY2soUWkpKXx8ImlzIj09PVFpJiZIbi5hbGxvd0N1c3RvbWl6ZWRCdWlsdEluRWxlbWVudHMmJihIbi50''@;'; put 'put ''YWdOYW1lQ2hlY2sgaW5zdGFuY2VvZiBSZWdFeHAmJkcxKEhuLnRhZ05hbWVDaGVjayxYYSl8fEhuLnRhZ05hbWVDaGVjayBpbnN0YW5jZW9mIEZ1bmN0aW9uJiZIbi50YWdOYW1lQ2hlY2soWGEpKSkpcmV0dXJuITF9ZWxzZSBpZighUW9bUWldJiYhRzEoZWEsbEUoWGEsJHIsIiIpKSYmKCJz''@;'; put 'put ''cmMiIT09UWkmJiJ4bGluazpocmVmIiE9PVFpJiYiaHJlZiIhPT1RaXx8InNjcmlwdCI9PT1ncnx8MCE9PXBxZShYYSwiZGF0YToiKXx8IWhzW2dyXSkmJighb258fEcxKERyLGxFKFhhLCRyLCIiKSkpJiZYYSlyZXR1cm4hMTtyZXR1cm4hMH0scU49ZnVuY3Rpb24oZ3Ipe3JldHVybiJhbm5v''@;'; put 'put ''dGF0aW9uLXhtbCIhPT1nciYmaTJlKGdyLHdpKX0sWE49ZnVuY3Rpb24oZ3Ipe0UzKEduLmJlZm9yZVNhbml0aXplQXR0cmlidXRlcyxncixudWxsKTtjb25zdHthdHRyaWJ1dGVzOlFpfT1ncjtpZighUWl8fEU2KGdyKSlyZXR1cm47Y29uc3QgWGE9e2F0dHJOYW1lOiIiLGF0dHJWYWx1ZToi''@;'; put 'put ''IixrZWVwQXR0cjohMCxhbGxvd2VkQXR0cmlidXRlczpOdCxmb3JjZUtlZXBBdHRyOnZvaWQgMH07bGV0IGRjPVFpLmxlbmd0aDtmb3IoO2RjLS07KXtjb25zdCBBMD1RaVtkY10se25hbWU6UnUsbmFtZXNwYWNlVVJJOlQxLHZhbHVlOlpofT1BMCxzdj0kYShSdSksekE9Wmg7bGV0IGswPSJ2''@;'; put 'put ''YWx1ZSI9PT1SdT96QTpncWUoekEpO2lmKFhhLmF0dHJOYW1lPXN2LFhhLmF0dHJWYWx1ZT1rMCxYYS5rZWVwQXR0cj0hMCxYYS5mb3JjZUtlZXBBdHRyPXZvaWQgMCxFMyhHbi51cG9uU2FuaXRpemVBdHRyaWJ1dGUsZ3IsWGEpLGswPVhhLmF0dHJWYWx1ZSxaciYmKCJpZCI9PT1zdnx8Im5h''@;'; put 'put ''bWUiPT09c3YpJiYodjAoUnUsZ3IpLGswPSJ1c2VyLWNvbnRlbnQtIitrMCkscHImJkcxKC8oKC0tIT98XSk+KXw8XC8oc3R5bGV8dGl0bGUpL2ksazApKXt2MChSdSxncik7Y29udGludWV9aWYoWGEuZm9yY2VLZWVwQXR0ciljb250aW51ZTtpZighWGEua2VlcEF0dHIpe3YwKFJ1LGdyKTtj''@;'; put 'put ''b250aW51ZX1pZigheW4mJkcxKC9cLz4vaSxrMCkpe3YwKFJ1LGdyKTtjb250aW51ZX1wbiYmVE8oW2FpLF9pLE9uXSxKTj0+e2swPWxFKGswLEpOLCIgIil9KTtjb25zdCBrdz0kYShnci5ub2RlTmFtZSk7aWYoS04oa3csc3YsazApKXtpZih2biYmIm9iamVjdCI9PXR5cGVvZiBFZSYmImZ1''@;'; put 'put ''bmN0aW9uIj09dHlwZW9mIEVlLmdldEF0dHJpYnV0ZVR5cGUmJiFUMSlzd2l0Y2goRWUuZ2V0QXR0cmlidXRlVHlwZShrdyxzdikpe2Nhc2UiVHJ1c3RlZEhUTUwiOmswPXZuLmNyZWF0ZUhUTUwoazApO2JyZWFrO2Nhc2UiVHJ1c3RlZFNjcmlwdFVSTCI6azA9dm4uY3JlYXRlU2NyaXB0VVJM''@;'; put 'put ''KGswKX1pZihrMCE9PXpBKXRyeXtUMT9nci5zZXRBdHRyaWJ1dGVOUyhUMSxSdSxrMCk6Z3Iuc2V0QXR0cmlidXRlKFJ1LGswKSxFNihncik/WXQoZ3IpOnIyZShsLnJlbW92ZWQpfWNhdGNoe3YwKFJ1LGdyKX19ZWxzZSB2MChSdSxncil9RTMoR24uYWZ0ZXJTYW5pdGl6ZUF0dHJpYnV0ZXMs''@;'; put 'put ''Z3IsbnVsbCl9LG92PWZ1bmN0aW9uIGNvKGdyKXtsZXQgUWk9bnVsbDtjb25zdCBYYT1HTihncik7Zm9yKEUzKEduLmJlZm9yZVNhbml0aXplU2hhZG93RE9NLGdyLG51bGwpO1FpPVhhLm5leHROb2RlKCk7KUUzKEduLnVwb25TYW5pdGl6ZVNoYWRvd05vZGUsUWksbnVsbCksJE4oUWkpLFhO''@;'; put 'put ''KFFpKSxRaS5jb250ZW50IGluc3RhbmNlb2YgZiYmY28oUWkuY29udGVudCk7RTMoR24uYWZ0ZXJTYW5pdGl6ZVNoYWRvd0RPTSxncixudWxsKX07cmV0dXJuIGwuc2FuaXRpemU9ZnVuY3Rpb24oY28pe2xldCBncj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9h''@;'; put 'put ''cmd1bWVudHNbMV06e30sUWk9bnVsbCxYYT1udWxsLGRjPW51bGwsQTA9bnVsbDtpZihCbD0hY28sQmwmJihjbz0iXHgzYyEtLVx4M2UiKSwic3RyaW5nIiE9dHlwZW9mIGNvJiYhZTUoY28pKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgY28udG9TdHJpbmcpdGhyb3cgY0UoInRvU3RyaW5nIGlz''@;'; put 'put ''IG5vdCBhIGZ1bmN0aW9uIik7aWYoInN0cmluZyIhPXR5cGVvZihjbz1jby50b1N0cmluZygpKSl0aHJvdyBjRSgiZGlydHkgaXMgbm90IGEgc3RyaW5nLCBhYm9ydGluZyIpfWlmKCFsLmlzU3VwcG9ydGVkKXJldHVybiBjbztpZihkcnx8QkEoZ3IpLGwucmVtb3ZlZD1bXSwic3RyaW5nIj09''@;'; put 'put ''dHlwZW9mIGNvJiYoSW89ITEpLElvKXtpZihjby5ub2RlTmFtZSl7Y29uc3QgWmg9JGEoY28ubm9kZU5hbWUpO2lmKCFmYVtaaF18fHRyW1poXSl0aHJvdyBjRSgicm9vdCBub2RlIGlzIGZvcmJpZGRlbiBhbmQgY2Fubm90IGJlIHNhbml0aXplZCBpbi1wbGFjZSIpfX1lbHNlIGlmKGNvIGlu''@;'; put 'put ''c3RhbmNlb2YgTSlRaT1VcygiXHgzYyEtLS0tXHgzZSIpLFhhPVFpLm93bmVyRG9jdW1lbnQuaW1wb3J0Tm9kZShjbywhMCksMT09PVhhLm5vZGVUeXBlJiYiQk9EWSI9PT1YYS5ub2RlTmFtZXx8IkhUTUwiPT09WGEubm9kZU5hbWU/UWk9WGE6UWkuYXBwZW5kQ2hpbGQoWGEpO2Vsc2V7aWYo''@;'; put 'put ''IVpuJiYhcG4mJiEkbiYmLTE9PT1jby5pbmRleE9mKCI8IikpcmV0dXJuIHZuJiZOcj92bi5jcmVhdGVIVE1MKGNvKTpjbztpZihRaT1VcyhjbyksIVFpKXJldHVybiBabj9udWxsOk5yP0NuOiIifVFpJiZVciYmWXQoUWkuZmlyc3RDaGlsZCk7Y29uc3QgUnU9R04oSW8/Y286UWkpO2Zvcig7''@;'; put 'put ''ZGM9UnUubmV4dE5vZGUoKTspJE4oZGMpLFhOKGRjKSxkYy5jb250ZW50IGluc3RhbmNlb2YgZiYmb3YoZGMuY29udGVudCk7aWYoSW8pcmV0dXJuIGNvO2lmKFpuKXtpZihzcilmb3IoQTA9Q3IuY2FsbChRaS5vd25lckRvY3VtZW50KTtRaS5maXJzdENoaWxkOylBMC5hcHBlbmRDaGlsZChR''@;'; put 'put ''aS5maXJzdENoaWxkKTtlbHNlIEEwPVFpO3JldHVybihOdC5zaGFkb3dyb290fHxOdC5zaGFkb3dyb290bW9kZSkmJihBMD1tci5jYWxsKGQsQTAsITApKSxBMH1sZXQgVDE9JG4/UWkub3V0ZXJIVE1MOlFpLmlubmVySFRNTDtyZXR1cm4gJG4mJmZhWyIhZG9jdHlwZSJdJiZRaS5vd25lckRv''@;'; put 'put ''Y3VtZW50JiZRaS5vd25lckRvY3VtZW50LmRvY3R5cGUmJlFpLm93bmVyRG9jdW1lbnQuZG9jdHlwZS5uYW1lJiZHMSh1MmUsUWkub3duZXJEb2N1bWVudC5kb2N0eXBlLm5hbWUpJiYoVDE9IjwhRE9DVFlQRSAiK1FpLm93bmVyRG9jdW1lbnQuZG9jdHlwZS5uYW1lKyI+XG4iK1QxKSxwbiYm''@;'; put 'put ''VE8oW2FpLF9pLE9uXSxaaD0+e1QxPWxFKFQxLFpoLCIgIil9KSx2biYmTnI/dm4uY3JlYXRlSFRNTChUMSk6VDF9LGwuc2V0Q29uZmlnPWZ1bmN0aW9uKCl7QkEoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9KSxkcj0hMH0sbC5jbGVh''@;'; put 'put ''ckNvbmZpZz1mdW5jdGlvbigpe3g2PW51bGwsZHI9ITF9LGwuaXNWYWxpZEF0dHJpYnV0ZT1mdW5jdGlvbihjbyxncixRaSl7eDZ8fEJBKHt9KTtjb25zdCBYYT0kYShjbyksZGM9JGEoZ3IpO3JldHVybiBLTihYYSxkYyxRaSl9LGwuYWRkSG9vaz1mdW5jdGlvbihjbyxncil7ImZ1bmN0aW9u''@;'; put 'put ''Ij09dHlwZW9mIGdyJiZzRShHbltjb10sZ3IpfSxsLnJlbW92ZUhvb2s9ZnVuY3Rpb24oY28sZ3Ipe2lmKHZvaWQgMCE9PWdyKXtjb25zdCBRaT1ocWUoR25bY29dLGdyKTtyZXR1cm4tMT09PVFpP3ZvaWQgMDpmcWUoR25bY29dLFFpLDEpWzBdfXJldHVybiByMmUoR25bY29dKX0sbC5yZW1v''@;'; put 'put ''dmVIb29rcz1mdW5jdGlvbihjbyl7R25bY29dPVtdfSxsLnJlbW92ZUFsbEhvb2tzPWZ1bmN0aW9uKCl7R249e2FmdGVyU2FuaXRpemVBdHRyaWJ1dGVzOltdLGFmdGVyU2FuaXRpemVFbGVtZW50czpbXSxhZnRlclNhbml0aXplU2hhZG93RE9NOltdLGJlZm9yZVNhbml0aXplQXR0cmlidXRl''@;'; put 'put ''czpbXSxiZWZvcmVTYW5pdGl6ZUVsZW1lbnRzOltdLGJlZm9yZVNhbml0aXplU2hhZG93RE9NOltdLHVwb25TYW5pdGl6ZUF0dHJpYnV0ZTpbXSx1cG9uU2FuaXRpemVFbGVtZW50OltdLHVwb25TYW5pdGl6ZVNoYWRvd05vZGU6W119fSxsfSgpO2Z1bmN0aW9uIHAyZShjKXtjb25zdCBsPWMu''@;'; put 'put ''bGVuZ3RoO2xldCBhPTA7Zm9yKDthPGw7KWNbYV09W2NbYV1dLGErPTF9ZnVuY3Rpb24gbCQoYyxsKXtjb25zdCBhPWwubGVuZ3RoO2xldCBkPTA7Zm9yKDtkPGE7KWMucHVzaChsW2RdKSxkKz0xfWZ1bmN0aW9uIGhFKGMpe2NvbnN0IGw9W107aWYoIWN8fDA9PT1jLmxlbmd0aHx8IWNbMF18''@;'; put 'put ''fDA9PT1jWzBdLmxlbmd0aClyZXR1cm4gbDtjb25zdCBhPWMubGVuZ3RoLGQ9Y1swXS5sZW5ndGg7Zm9yKGxldCBoPTA7aDxhO2grKylmb3IobGV0IGY9MDtmPGQ7ZisrKWxbZl18fChsW2ZdPVtdKSxsW2ZdW2hdPWNbaF1bZl07cmV0dXJuIGx9ZnVuY3Rpb24gcXUoYyxsLGEsZCl7bGV0IGg9''@;'; put 'put ''LTEsZj1jLHY9YTtBcnJheS5pc0FycmF5KGMpfHwoZj1BcnJheS5mcm9tKGMpKTtjb25zdCBNPWYubGVuZ3RoO2ZvcihkJiZNJiYoaCs9MSx2PWZbaF0pLGgrPTE7aDxNOyl2PWwodixmW2hdLGgsZiksaCs9MTtyZXR1cm4gdn1mdW5jdGlvbiBJbShjLGwpe2xldCBhPTAsZD1jO0FycmF5Lmlz''@;'; put 'put ''QXJyYXkoYyl8fChkPUFycmF5LmZyb20oYykpO2NvbnN0IGg9ZC5sZW5ndGgsZj1bXTtsZXQgdj0tMTtmb3IoO2E8aDspe2NvbnN0IE09ZFthXTtsKE0sYSxkKSYmKHYrPTEsZlt2XT1NKSxhKz0xfXJldHVybiBmfWZ1bmN0aW9uIHlzKGMsbCl7bGV0IGE9MCxkPWM7QXJyYXkuaXNBcnJheShj''@;'; put 'put ''KXx8KGQ9QXJyYXkuZnJvbShjKSk7Y29uc3QgaD1kLmxlbmd0aCxmPVtdO2xldCB2PS0xO2Zvcig7YTxoOyl2Kz0xLGZbdl09bChkW2FdLGEsZCksYSs9MTtyZXR1cm4gZn1mdW5jdGlvbiBZbihjLGwpe2xldCBhPTAsZD1jO0FycmF5LmlzQXJyYXkoYyl8fChkPUFycmF5LmZyb20oYykpO2Nv''@;'; put 'put ''bnN0IGg9ZC5sZW5ndGg7Zm9yKDthPGgmJiExIT09bChkW2FdLGEsZCk7KWErPTE7cmV0dXJuIGN9ZnVuY3Rpb24gZzJlKGMpe3JldHVybiBxdShjLChsLGEpPT5sK2EsMCl9ZnVuY3Rpb24gSXFlKGMpe3JldHVybiBxdShjLChsLGEpPT5sPmE/bDphLEFycmF5LmlzQXJyYXkoYyk/Y1swXTp2''@;'; put 'put ''b2lkIDApfWZ1bmN0aW9uIFJxZShjKXtyZXR1cm4gcXUoYywobCxhKT0+bDxhP2w6YSxBcnJheS5pc0FycmF5KGMpP2NbMF06dm9pZCAwKX1mdW5jdGlvbiBMcWUoYyl7cmV0dXJuIGMubGVuZ3RoP2cyZShjKS9jLmxlbmd0aDowfWZ1bmN0aW9uIG0yZShjKXtyZXR1cm4gcXUoYywobCxhKT0+''@;'; put 'put ''bC5jb25jYXQoQXJyYXkuaXNBcnJheShhKT9tMmUoYSk6YSksW10pfWZ1bmN0aW9uIHYyZShjKXtjb25zdCBsPVtdO3JldHVybiBZbihjLGE9PnstMT09PWwuaW5kZXhPZihhKSYmbC5wdXNoKGEpfSksbH1mdW5jdGlvbiBjJCgpe2Zvcih2YXIgYz1hcmd1bWVudHMubGVuZ3RoLGw9bmV3IEFy''@;'; put 'put ''cmF5KGMpLGE9MDthPGM7YSsrKWxbYV09YXJndW1lbnRzW2FdO2NvbnN0W2QsLi4uaF09Wy4uLmxdO2xldCBmPWQ7cmV0dXJuIFluKGgsdj0+e2Y9Zi5maWx0ZXIoTT0+IXYuaW5jbHVkZXMoTSkpfSksZn1mdW5jdGlvbiBPcWUoKXtmb3IodmFyIGM9YXJndW1lbnRzLmxlbmd0aCxsPW5ldyBB''@;'; put 'put ''cnJheShjKSxhPTA7YTxjO2ErKylsW2FdPWFyZ3VtZW50c1thXTtjb25zdFtkLC4uLmhdPVsuLi5sXTtsZXQgZj1kO3JldHVybiBZbihoLHY9PntmPWYuZmlsdGVyKE09PnYuaW5jbHVkZXMoTSkpfSksZn1mdW5jdGlvbiBQcWUoKXtmb3IodmFyIGM9YXJndW1lbnRzLmxlbmd0aCxsPW5ldyBB''@;'; put 'put ''cnJheShjKSxhPTA7YTxjO2ErKylsW2FdPWFyZ3VtZW50c1thXTtjb25zdFtkLC4uLmhdPVsuLi5sXSxmPW5ldyBTZXQoZCk7cmV0dXJuIFluKGgsdj0+e1luKHYsTT0+e2YuaGFzKE0pfHxmLmFkZChNKX0pfSksQXJyYXkuZnJvbShmKX1mdW5jdGlvbiB1JChjKXtyZXR1cm4gYy5zcGxpdChh''@;'; put 'put ''cmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06IiAiKX1mdW5jdGlvbiBnbChjKXtmb3IodmFyIGw9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShsPjE/bC0xOjApLGQ9MTtkPGw7ZCsrKWFbZC0xXT1hcmd1bWVudHNbZF07cmV0dXJuIHF1''@;'; put 'put ''KGMsKGYsdixNKT0+Zit2LnJlcGxhY2UoL1xyP1xuXHMqL2csIiIpKyhhW01dP2FbTV06IiIpLCIiKS50cmltKCl9ZnVuY3Rpb24gbGMoYyl7bGV0IGw7c3dpdGNoKHR5cGVvZiBjKXtjYXNlInN0cmluZyI6Y2FzZSJudW1iZXIiOmw9YCR7Y31gO2JyZWFrO2Nhc2Uib2JqZWN0IjpsPW51bGw9''@;'; put 'put ''PT1jPyIiOmMudG9TdHJpbmcoKTticmVhaztjYXNlInVuZGVmaW5lZCI6bD0iIjticmVhaztkZWZhdWx0Omw9Yy50b1N0cmluZygpfXJldHVybiBsfWZ1bmN0aW9uIFBhKGMpe3JldHVybiB0eXBlb2YgYzwidSJ9ZnVuY3Rpb24gX2MoYyl7cmV0dXJuIHR5cGVvZiBjPiJ1In1mdW5jdGlvbiBV''@;'; put 'put ''YyhjKXtyZXR1cm4gbnVsbD09PWN8fCIiPT09Y3x8X2MoYyl9ZnVuY3Rpb24gYjJlKGMpe3JldHVybiJbb2JqZWN0IFJlZ0V4cF0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGMpfWNvbnN0IGZFPSJsZW5ndGgiLHBFPWM9PnBhcnNlSW50KGMsMTYpLHkyZT1jPT5wYXJzZUlu''@;'; put 'put ''dChjLDEwKSxETz0oYyxsLGEpPT5jLnN1YnN0cihsLGEpLGdFPWM9PmMuY29kZVBvaW50QXQoMCktNjUsZCQ9Yz0+YCR7Y31gLnJlcGxhY2UoL1wtL2csIiIpLEZxZT1jPT5wRShETyhkJChjKSxwRSgiMTIiKSxnRSgiRiIpKSkvKHBFKERPKGQkKGMpLGdFKCJCIiksfn4hW11bZkVdKSl8fDkp''@;'; put 'put ''LEhxZT0oKT0+dHlwZW9mIGxvY2F0aW9uPCJ1IiYmL14oW2EtejAtOVwtXStcLik/XHg2OFx4NjFceDZFXHg2NFx4NzNceDZGXHg2RVx4NzRceDYxXHg2Mlx4NkNceDY1XHgyRVx4NjNceDZGXHg2RCQvaS50ZXN0KGxvY2F0aW9uLmhvc3QpO2xldCBfMmU9ITE7Y29uc3QgdzJlPXtpbnZhbGlk''@;'; put 'put ''OigpPT5nbGAKICAgIFRoZSBsaWNlbnNlIGtleSBmb3IgSGFuZHNvbnRhYmxlIGlzIGludmFsaWQuXHgyMAogICAgSWYgeW91IG5lZWQgYW55IGhlbHAsIGNvbnRhY3QgdXMgYXQgc3VwcG9ydEBoYW5kc29udGFibGUuY29tLmAsZXhwaXJlZDpjPT57bGV0e2tleVZhbGlkaXR5RGF0ZTpsLGhv''@;'; put 'put ''dFZlcnNpb246YX09YztyZXR1cm4gZ2xgCiAgICBUaGUgbGljZW5zZSBrZXkgZm9yIEhhbmRzb250YWJsZSBleHBpcmVkIG9uICR7bH0sIGFuZCBpcyBub3QgdmFsaWQgZm9yIHRoZSBpbnN0YWxsZWRceDIwCiAgICB2ZXJzaW9uICR7YX0uIFJlbmV3IHlvdXIgbGljZW5zZSBrZXkgYXQgaGFu''@;'; put 'put ''ZHNvbnRhYmxlLmNvbSBvciBkb3duZ3JhZGUgdG8gYSB2ZXJzaW9uIHJlbGVhc2VkIHByaW9yXHgyMAogICAgdG8gJHtsfS4gSWYgeW91IG5lZWQgYW55IGhlbHAsIGNvbnRhY3QgdXMgYXQgc2FsZXNAaGFuZHNvbnRhYmxlLmNvbS5gfSxtaXNzaW5nOigpPT5nbGAKICAgIFRoZSBsaWNlbnNl''@;'; put 'put ''IGtleSBmb3IgSGFuZHNvbnRhYmxlIGlzIG1pc3NpbmcuIFVzZSB5b3VyIHB1cmNoYXNlZCBrZXkgdG8gYWN0aXZhdGUgdGhlIHByb2R1Y3QuXHgyMAogICAgQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBhY3RpdmF0ZSBIYW5kc29udGFibGUgdG8gdXNlIGZvciBub24tY29tbWVyY2lhbCBwdXJw''@;'; put 'put ''b3NlcyBieVx4MjAKICAgIHBhc3NpbmcgdGhlIGtleTogJ25vbi1jb21tZXJjaWFsLWFuZC1ldmFsdWF0aW9uJy4gSWYgeW91IG5lZWQgYW55IGhlbHAsIGNvbnRhY3RceDIwCiAgICB1cyBhdCBzdXBwb3J0QGhhbmRzb250YWJsZS5jb20uYCxub25fY29tbWVyY2lhbDooKT0+IiJ9LEMyZT17''@;'; put 'put ''aW52YWxpZDooKT0+Z2xgCiAgICBUaGUgbGljZW5zZSBrZXkgZm9yIEhhbmRzb250YWJsZSBpcyBpbnZhbGlkLlx4MjAKICAgIDxhIGhyZWY9Imh0dHBzOi8vaGFuZHNvbnRhYmxlLmNvbS9kb2NzL3R1dG9yaWFsLWxpY2Vuc2Uta2V5Lmh0bWwiIHRhcmdldD0iX2JsYW5rIj5SZWFkIG1vcmU8''@;'; put 'put ''L2E+IG9uIGhvdyB0b1x4MjAKICAgIGluc3RhbGwgaXQgcHJvcGVybHkgb3IgY29udGFjdCB1cyBhdCA8YSBocmVmPSJtYWlsdG86c3VwcG9ydEBoYW5kc29udGFibGUuY29tIj5zdXBwb3J0QGhhbmRzb250YWJsZS5jb208L2E+LmAsZXhwaXJlZDpjPT57bGV0e2tleVZhbGlkaXR5RGF0ZTps''@;'; put 'put ''LGhvdFZlcnNpb246YX09YztyZXR1cm4gZ2xgCiAgICBUaGUgbGljZW5zZSBrZXkgZm9yIEhhbmRzb250YWJsZSBleHBpcmVkIG9uICR7bH0sIGFuZCBpcyBub3QgdmFsaWQgZm9yIHRoZSBpbnN0YWxsZWRceDIwCiAgICB2ZXJzaW9uICR7YX0uIDxhIGhyZWY9Imh0dHBzOi8vaGFuZHNvbnRh''@;'; put 'put ''YmxlLmNvbS9wcmljaW5nIiB0YXJnZXQ9Il9ibGFuayI+UmVuZXc8L2E+IHlvdXJceDIwCiAgICBsaWNlbnNlIGtleSBvciBkb3duZ3JhZGUgdG8gYSB2ZXJzaW9uIHJlbGVhc2VkIHByaW9yIHRvICR7bH0uIElmIHlvdSBuZWVkIGFueVx4MjAKICAgIGhlbHAsIGNvbnRhY3QgdXMgYXQgPGEg''@;'; put 'put ''aHJlZj0ibWFpbHRvOnNhbGVzQGhhbmRzb250YWJsZS5jb20iPnNhbGVzQGhhbmRzb250YWJsZS5jb208L2E+LmB9LG1pc3Npbmc6KCk9PmdsYAogICAgVGhlIGxpY2Vuc2Uga2V5IGZvciBIYW5kc29udGFibGUgaXMgbWlzc2luZy4gVXNlIHlvdXIgcHVyY2hhc2VkIGtleSB0byBhY3RpdmF0''@;'; put 'put ''ZSB0aGUgcHJvZHVjdC5ceDIwCiAgICBBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIGFjdGl2YXRlIEhhbmRzb250YWJsZSB0byB1c2UgZm9yIG5vbi1jb21tZXJjaWFsIHB1cnBvc2VzIGJ5XHgyMAogICAgcGFzc2luZyB0aGUga2V5OiAnbm9uLWNvbW1lcmNpYWwtYW5kLWV2YWx1YXRpb24nLlx4''@;'; put 'put ''MjAKICAgIDxhIGhyZWY9Imh0dHBzOi8vaGFuZHNvbnRhYmxlLmNvbS9kb2NzL3R1dG9yaWFsLWxpY2Vuc2Uta2V5Lmh0bWwiIHRhcmdldD0iX2JsYW5rIj5SZWFkIG1vcmU8L2E+IGFib3V0IGl0IGluXHgyMAogICAgdGhlIGRvY3VtZW50YXRpb24gb3IgY29udGFjdCB1cyBhdCA8YSBocmVm''@;'; put 'put ''PSJtYWlsdG86c3VwcG9ydEBoYW5kc29udGFibGUuY29tIj5zdXBwb3J0QGhhbmRzb250YWJsZS5jb208L2E+LmAsbm9uX2NvbW1lcmNpYWw6KCk9PiIifTtmdW5jdGlvbiBTMmUoYyxsKXtjb25zdCBhPSFVYyhjKSxkPSJzdHJpbmciPT10eXBlb2YgYyYmIm5vbi1jb21tZXJjaWFsLWFuZC1l''@;'; put 'put ''dmFsdWF0aW9uIj09PWMudG9Mb3dlckNhc2UoKSxoPSIxNS4zLjAiO2xldCBmLHY9ImludmFsaWQiLE09ImludmFsaWQiO2NvbnN0IEQ9ZnVuY3Rpb24gTnFlKGMpe2xldCBsPVtdW2ZFXSxhPWw7aWYoY1tmRV0hPT1nRSgiWiIpKXJldHVybiExO2ZvcihsZXQgZD0iIixoPSJCPEg0UCsiLnNw''@;'; put 'put ''bGl0KCIiKSxmPWdFKGguc2hpZnQoKSk7ZjtmPWdFKGguc2hpZnQoKXx8IkEiKSktLWY8IiJbZkVdP2F8PSh5MmUoYCR7eTJlKHBFKGQpKyhwRShETyhjLE1hdGguYWJzKGYpLDIpKStbXSkucGFkU3RhcnQoMiwiMCIpKX1gKSU5N3x8Mik+PjE6ZD1ETyhjLGYsZj8xPT09aFtmRV0/OTo4OjYp''@;'; put 'put ''O3JldHVybiBhPT09bH0oYz1kJChjfHwiIikpO2lmKGF8fGR8fEQpaWYoRCl7Y29uc3QgWj1PbygiMjkvMDQvMjAyNSIsIkREL01NL1lZWVkiKSxyZT1NYXRoLmZsb29yKFoudG9EYXRlKCkuZ2V0VGltZSgpLzg2NGU1KSxjZT1GcWUoYyk7Zj1Pbyg4NjRlNSooY2UrMSksIngiKS5mb3JtYXQo''@;'; put 'put ''Ik1NTU0gREQsIFlZWVkiKSxyZT5jZT8odj0iZXhwaXJlZCIsTT0iZXhwaXJlZCIpOih2PSJ2YWxpZCIsTT0idmFsaWQiKX1lbHNlIGQ/KHY9Im5vbl9jb21tZXJjaWFsIixNPSJ2YWxpZCIpOih2PSJpbnZhbGlkIixNPSJpbnZhbGlkIik7ZWxzZSB2PSJtaXNzaW5nIixNPSJtaXNzaW5nIjtp''@;'; put 'put ''ZihIcWUoKSYmKHY9InZhbGlkIixNPSJ2YWxpZCIpLCFfMmUmJiJ2YWxpZCIhPT12JiYodzJlW3ZdKHtrZXlWYWxpZGl0eURhdGU6Zixob3RWZXJzaW9uOmh9KSYmY29uc29sZVsibm9uX2NvbW1lcmNpYWwiPT09dj8iaW5mbyI6Indhcm4iXSh3MmVbdl0oe2tleVZhbGlkaXR5RGF0ZTpmLGhv''@;'; put 'put ''dFZlcnNpb246aH0pKSxfMmU9ITApLCJ2YWxpZCIhPT1NJiZsLnBhcmVudE5vZGUmJkMyZVtNXSh7a2V5VmFsaWRpdHlEYXRlOmYsaG90VmVyc2lvbjpofSkpe2NvbnN0IHJlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JlLmNsYXNzTmFtZT0iaGFuZHNvbnRhYmxlIGhvdC1kaXNw''@;'; put 'put ''bGF5LWxpY2Vuc2UtaW5mbyIscmUuaW5uZXJIVE1MPUMyZVtNXSh7a2V5VmFsaWRpdHlEYXRlOmYsaG90VmVyc2lvbjpofSksbC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShyZSxsLm5leHRTaWJsaW5nKX19ZnVuY3Rpb24gcDEoYyl7cmV0dXJuIGNbMF0udG9VcHBlckNhc2UoKStjLnN1YnN0''@;'; put 'put ''cigxKX1mdW5jdGlvbiBWcWUoKXtjb25zdCBjPVtdO2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGwpLGQ9MDtkPGw7ZCsrKWFbZF09YXJndW1lbnRzW2RdO2xldCBoPWEubGVuZ3RoO2Zvcig7aDspe2gtPTE7Y29uc3QgZj1sYyhhW2hdKS50b0xvd2VyQ2FzZSgpOy0x''@;'; put 'put ''PT09Yy5pbmRleE9mKGYpJiZjLnB1c2goZil9cmV0dXJuIDE9PT1jLmxlbmd0aH1mdW5jdGlvbiBoJCgpe2Z1bmN0aW9uIGMoKXtyZXR1cm4gTWF0aC5mbG9vcig2NTUzNiooMStNYXRoLnJhbmRvbSgpKSkudG9TdHJpbmcoMTYpLnN1YnN0cmluZygxKX1yZXR1cm4gYygpK2MoKStjKCkrYygp''@;'; put 'put ''fWZ1bmN0aW9uIGYkKGMpe3JldHVybi9eKFswLTldWzAtOV0/JSQpfCheMTAwJSQpLy50ZXN0KGMpfWZ1bmN0aW9uIHAkKGMpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fTtyZXR1cm5gJHtjfWAucmVwbGFjZSgvKD86XFwp''@;'; put 'put ''P1xbKFteW1xdXSspXS9nLChhLGQpPT4iXFwiPT09YS5jaGFyQXQoMCk/YS5zdWJzdHIoMSxhLmxlbmd0aC0xKTp2b2lkIDA9PT1sW2RdPyIiOmxbZF0pfWZ1bmN0aW9uIGckKGMpe3JldHVybiBJTyhgJHtjfWAse0FMTE9XRURfVEFHUzpbXX0pfWZ1bmN0aW9uIElPKGMsbCl7cmV0dXJuIERx''@;'; put 'put ''ZS5zYW5pdGl6ZShjLGwpfWNvbnN0IE43PWM9PlsidGFiaW5kZXgiLGNdLEtxZT0oKT0+WyJyb2xlIiwiY2hlY2tib3giXSxtRT1jPT5bImFyaWEtbGFiZWwiLGNdLFY3PSgpPT5bImFyaWEtaGlkZGVuIiwidHJ1ZSJdLEUyZT1jPT5bImFyaWEtaGFzcG9wdXAiLGNdLFQyZT1jPT5bImFyaWEt''@;'; put 'put ''cm93Y291bnQiLGNdLFJPPWM9PlsiYXJpYS1jb2xjb3VudCIsY10sQTJlPWM9PlsiYXJpYS1yb3dpbmRleCIsY10sdiQ9Yz0+WyJhcmlhLWNvbGluZGV4IixjXSxOMj1jPT5bImFyaWEtZXhwYW5kZWQiLGNdLGsyZT0oKT0+WyJhcmlhLXJlYWRvbmx5IiwidHJ1ZSJdLEQyZT0oKT0+WyJhcmlh''@;'; put 'put ''LWludmFsaWQiLCJ0cnVlIl0sSTJlPWM9PlsiYXJpYS1jaGVja2VkIixjXSxyWGU9Yz0+WyJhcmlhLWNvbnRyb2xzIixjXSxhWGU9Yz0+WyJhcmlhLWxpdmUiLGNdLG9YZT1jPT5bImFyaWEtcmVsZXZhbnQiLGNdLHNYZT1jPT5bImFyaWEtc2V0c2l6ZSIsY10sbFhlPWM9PlsiYXJpYS1wb3Np''@;'; put 'put ''bnNldCIsY107ZnVuY3Rpb24gUjJlKGMpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTowLGE9LTEsZD1udWxsLGg9Yztmb3IoO251bGwhPT1oOyl7aWYoYT09PWwpe2Q9aDticmVha31oLmhvc3QmJmgubm9kZVR5cGU9PT1Ob2Rl''@;'; put 'put ''LkRPQ1VNRU5UX0ZSQUdNRU5UX05PREU/aD1oLmhvc3Q6KGErPTEsaD1oLnBhcmVudE5vZGUpfXJldHVybiBkfWZ1bmN0aW9uIHZFKGMsbCl7Y29uc3QgYT1jLmNsb3Nlc3QoIi5oYW5kc29udGFibGUiKTtyZXR1cm4hIWEmJihhLnBhcmVudE5vZGU9PT1sfHxhPT09bCl9ZnVuY3Rpb24gTDJl''@;'; put 'put ''KGMpe3JldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoYy5wYXJlbnQpJiZjLmZyYW1lRWxlbWVudH1mdW5jdGlvbiBCNyhjKXtyZXR1cm4gTDJlKGMpJiZjLnBhcmVudH1mdW5jdGlvbiBjWGUoYyl7cmV0dXJuISFPYmplY3QuZ2V0UHJvdG90eXBlT2YoYy5wYXJlbnQpfWZ1bmN0aW9uIFJt''@;'; put 'put ''KGMpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpbXSxhPWFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwO2NvbnN0e0VMRU1FTlRfTk9ERTpkLERPQ1VNRU5UX0ZSQUdNRU5UX05PREU6aH09Tm9kZTtsZXQg''@;'; put 'put ''Zj1jO2Zvcig7bnVsbCE9ZiYmZiE9PWE7KXtjb25zdHtub2RlVHlwZTp2LG5vZGVOYW1lOk19PWY7aWYodj09PWQmJihsLmluY2x1ZGVzKE0pfHxsLmluY2x1ZGVzKGYpKSlyZXR1cm4gZjtjb25zdHtob3N0OkR9PWY7Zj1EJiZ2PT09aD9EOmYucGFyZW50Tm9kZX1yZXR1cm4gbnVsbH1mdW5j''@;'; put 'put ''dGlvbiBiRShjLGwsYSl7Y29uc3QgZD1bXTtsZXQgaD1jO2Zvcig7aCYmKGg9Um0oaCxsLGEpLGgmJighYXx8YS5jb250YWlucyhoKSkpOylkLnB1c2goaCksaD1oLmhvc3QmJmgubm9kZVR5cGU9PT1Ob2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREU/aC5ob3N0OmgucGFyZW50Tm9kZTtjb25z''@;'; put 'put ''dCBmPWQubGVuZ3RoO3JldHVybiBmP2RbZi0xXTpudWxsfWZ1bmN0aW9uIE8yZShjLGwpe2NvbnN0IGE9e2VsZW1lbnQ6dm9pZCAwLGNsYXNzTmFtZXM6W119O2xldCBkPWM7Zm9yKDtudWxsIT09ZCYmZCE9PWMub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQmJiFhLmVsZW1lbnQ7KXtp''@;'; put 'put ''Zigic3RyaW5nIj09dHlwZW9mIGwmJmQuY2xhc3NMaXN0LmNvbnRhaW5zKGwpKWEuZWxlbWVudD1kLGEuY2xhc3NOYW1lcy5wdXNoKGwpO2Vsc2UgaWYobCBpbnN0YW5jZW9mIFJlZ0V4cCl7Y29uc3QgaD1BcnJheS5mcm9tKGQuY2xhc3NMaXN0KS5maWx0ZXIoZj0+bC50ZXN0KGYpKTtoLmxl''@;'; put 'put ''bmd0aCYmKGEuZWxlbWVudD1kLGEuY2xhc3NOYW1lcy5wdXNoKC4uLmgpKX1kPWQucGFyZW50RWxlbWVudH1yZXR1cm4gYX1mdW5jdGlvbiBMbShjLGwpe2xldCBhPWMucGFyZW50Tm9kZSxkPVtdO2Zvcigic3RyaW5nIj09dHlwZW9mIGw/ZD1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChj''@;'; put 'put ''LmRlZmF1bHRWaWV3P2MucXVlcnlTZWxlY3RvckFsbChsKTpjLm93bmVyRG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChsKSwwKTpkLnB1c2gobCk7bnVsbCE9PWE7KXtpZihkLmluZGV4T2YoYSk+LTEpcmV0dXJuITA7YT1hLnBhcmVudE5vZGV9cmV0dXJuITF9ZnVuY3Rpb24gUDJlKGMpe2xl''@;'; put 'put ''dCBsPTAsYT1jO2lmKGEucHJldmlvdXNTaWJsaW5nKWZvcig7YT1hLnByZXZpb3VzU2libGluZzspbCs9MTtyZXR1cm4gbH1mdW5jdGlvbiBPbShjLGwsYSl7Y29uc3QgZD1hLnBhcmVudEVsZW1lbnQucXVlcnlTZWxlY3RvcihgLmh0X2Nsb25lXyR7Y31gKTtyZXR1cm4gZD9kLmNvbnRhaW5z''@;'; put 'put ''KGwpOm51bGx9ZnVuY3Rpb24gRjJlKGMpe3JldHVybiBjJiZjLmxlbmd0aD9jLmZpbHRlcihsPT4hIWwpOltdfWZ1bmN0aW9uIEgyZShjLGwpe2lmKCFjfHwhYy5sZW5ndGgpcmV0dXJuIGw/e3JlZ2V4RnJlZTpbXSxyZWdleGVzOltdfTpbXTtjb25zdCBhPVtdLGQ9W107cmV0dXJuIGQucHVz''@;'; put 'put ''aCguLi5jLmZpbHRlcihoPT57Y29uc3QgZj1oIGluc3RhbmNlb2YgUmVnRXhwO3JldHVybiBmJiZsJiZhLnB1c2goaCksIWZ9KSksbD97cmVnZXhGcmVlOmQscmVnZXhlczphfTpkfWZ1bmN0aW9uIHBvKGMsbCl7cmV0dXJuIHZvaWQgMCE9PWMuY2xhc3NMaXN0JiYic3RyaW5nIj09dHlwZW9m''@;'; put 'put ''IGwmJiIiIT09bCYmYy5jbGFzc0xpc3QuY29udGFpbnMobCl9ZnVuY3Rpb24gVGkoYyxsKXsic3RyaW5nIj09dHlwZW9mIGwmJihsPWwuc3BsaXQoIiAiKSksKGw9RjJlKGwpKS5sZW5ndGg+MCYmYy5jbGFzc0xpc3QuYWRkKC4uLmwpfWZ1bmN0aW9uIGxvKGMsbCl7InN0cmluZyI9PXR5cGVv''@;'; put 'put ''ZiBsP2w9bC5zcGxpdCgiICIpOmwgaW5zdGFuY2VvZiBSZWdFeHAmJihsPVtsXSk7bGV0e3JlZ2V4RnJlZTphLHJlZ2V4ZXM6ZH09SDJlKGwsITApO2E9RjJlKGEpLGEubGVuZ3RoPjAmJmMuY2xhc3NMaXN0LnJlbW92ZSguLi5hKSxkLmZvckVhY2goaD0+e2MuY2xhc3NMaXN0LmZvckVhY2go''@;'; put 'put ''Zj0+e2gudGVzdChmKSYmYy5jbGFzc0xpc3QucmVtb3ZlKGYpfSl9KX1mdW5jdGlvbiB2byhjKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06W10sYT1hcmd1bWVudHMubGVuZ3RoPjI/YXJndW1lbnRzWzJdOnZvaWQgMDtBcnJh''@;'; put 'put ''eS5pc0FycmF5KGwpfHwobD1bW2wsYV1dKSxsLmZvckVhY2goZD0+e0FycmF5LmlzQXJyYXkoZCkmJiIiIT09ZFswXSYmYy5zZXRBdHRyaWJ1dGUoLi4uZCl9KX1mdW5jdGlvbiBqNyhjKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNb''@;'; put 'put ''MV06W107InN0cmluZyI9PXR5cGVvZiBsP2w9bC5zcGxpdCgiICIpOmwgaW5zdGFuY2VvZiBSZWdFeHAmJihsPVtsXSk7Y29uc3R7cmVnZXhGcmVlOmEscmVnZXhlczpkfT1IMmUobCwhMCk7YS5mb3JFYWNoKGg9PnsiIiE9PWgmJmMucmVtb3ZlQXR0cmlidXRlKGgpfSksZC5mb3JFYWNoKGg9''@;'; put 'put ''PntjLmdldEF0dHJpYnV0ZU5hbWVzKCkuZm9yRWFjaChmPT57aC50ZXN0KGYpJiZjLnJlbW92ZUF0dHJpYnV0ZShmKX0pfSl9ZnVuY3Rpb24geSQoYyl7aWYoMz09PWMubm9kZVR5cGUpYy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGMpO2Vsc2UgaWYoWyJUQUJMRSIsIlRIRUFEIiwiVEJPRFki''@;'; put 'put ''LCJURk9PVCIsIlRSIl0uaW5kZXhPZihjLm5vZGVOYW1lKT4tMSl7Y29uc3QgbD1jLmNoaWxkTm9kZXM7Zm9yKGxldCBhPWwubGVuZ3RoLTE7YT49MDthLS0peSQobFthXSl9fWZ1bmN0aW9uIHhwKGMpe2xldCBsO2Zvcig7bD1jLmxhc3RDaGlsZDspYy5yZW1vdmVDaGlsZChsKX1jb25zdCBO''@;'; put 'put ''MmU9Lyg8KC4qKT58JiguKik7KS87ZnVuY3Rpb24gejcoYyxsKXtsZXQgYT0hKGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdKXx8YXJndW1lbnRzWzJdO04yZS50ZXN0KGwpP2MuaW5uZXJIVE1MPWE/SU8obCk6bDpQbShjLGwpfWZ1bmN0aW9uIFBtKGMsbCl7Y29u''@;'; put 'put ''c3QgYT1jLmZpcnN0Q2hpbGQ7YSYmMz09PWEubm9kZVR5cGUmJm51bGw9PT1hLm5leHRTaWJsaW5nP2EudGV4dENvbnRlbnQ9bDooeHAoYyksYy5hcHBlbmRDaGlsZChjLm93bmVyRG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobCkpKX1mdW5jdGlvbiBVNyhjKXtjb25zdCBsPWMub3duZXJEb2N1''@;'; put 'put ''bWVudC5kb2N1bWVudEVsZW1lbnQsYT1jLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXc7bGV0IGQ9Yztmb3IoO2QhPT1sOyl7aWYobnVsbD09PWQpcmV0dXJuITE7aWYoZC5ub2RlVHlwZT09PU5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERSl7aWYoZC5ob3N0KXtpZihkLmhvc3QuaW1wbCly''@;'; put 'put ''ZXR1cm4gVTcoZC5ob3N0LmltcGwpO2lmKGQuaG9zdClyZXR1cm4gVTcoZC5ob3N0KTt0aHJvdyBuZXcgRXJyb3IoIkxvc3QgaW4gV2ViIENvbXBvbmVudHMgd29ybGQiKX1yZXR1cm4hMX1pZigibm9uZSI9PT1hLmdldENvbXB1dGVkU3R5bGUoZCkuZGlzcGxheSlyZXR1cm4hMTtkPWQucGFy''@;'; put 'put ''ZW50Tm9kZX1yZXR1cm4hMH1mdW5jdGlvbiBWMmUoYyl7Y29uc3QgYT1jLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXc7bGV0IGQ9Yztmb3IoO2QucGFyZW50Tm9kZTspe2lmKCIwcHgiPT09ZC5zdHlsZS5oZWlnaHR8fCIwIj09PWQuc3R5bGUuaGVpZ2h0KXJldHVybiJoaWRkZW4iPT09YS5n''@;'; put 'put ''ZXRDb21wdXRlZFN0eWxlKGQpLm92ZXJmbG93O2Q9ZC5wYXJlbnROb2RlfXJldHVybiExfWZ1bmN0aW9uIFUwKGMpe2NvbnN0IGw9Yy5vd25lckRvY3VtZW50LGE9bC5kZWZhdWx0VmlldyxkPWwuZG9jdW1lbnRFbGVtZW50O2xldCBmLHYsTSxoPWM7Zm9yKGY9aC5vZmZzZXRMZWZ0LHY9aC5v''@;'; put 'put ''ZmZzZXRUb3AsTT1oOyhoPWgub2Zmc2V0UGFyZW50KSYmaCE9PWwuYm9keSYmIm9mZnNldExlZnQiaW4gaDspZis9aC5vZmZzZXRMZWZ0LHYrPWgub2Zmc2V0VG9wLE09aDtyZXR1cm4gTSYmImZpeGVkIj09PU0uc3R5bGUucG9zaXRpb24mJihmKz1hLnBhZ2VYT2Zmc2V0fHxkLnNjcm9sbExl''@;'; put 'put ''ZnQsdis9YS5wYWdlWU9mZnNldHx8ZC5zY3JvbGxUb3ApLHtsZWZ0OmYsdG9wOnZ9fWZ1bmN0aW9uIF8kKCl7cmV0dXJuKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp3aW5kb3cpLnNjcm9sbFl9ZnVuY3Rpb24gTE8oKXtyZXR1cm4oYXJn''@;'; put 'put ''dW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOndpbmRvdykuc2Nyb2xsWH1mdW5jdGlvbiBPTyhjKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06d2luZG93O3JldHVybiBjPT09bD9f''@;'; put 'put ''JChsKTpjLnNjcm9sbFRvcH1mdW5jdGlvbiB3JChjKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06d2luZG93O3JldHVybiBjPT09bD9MTyhsKTpjLnNjcm9sbExlZnR9ZnVuY3Rpb24geUUoYyl7bGV0IGw9Yy5vd25lckRvY3Vt''@;'; put 'put ''ZW50LGE9bD9sLmRlZmF1bHRWaWV3OnZvaWQgMDtsfHwobD1jLmRvY3VtZW50P2MuZG9jdW1lbnQ6YyxhPWwuZGVmYXVsdFZpZXcpO2NvbnN0IGQ9WyJhdXRvIiwic2Nyb2xsIl07bGV0IGg9Yy5wYXJlbnROb2RlO2Zvcig7aCYmaC5zdHlsZSYmbC5ib2R5IT09aDspe2xldHtvdmVyZmxvdzpm''@;'; put 'put ''LG92ZXJmbG93WDp2LG92ZXJmbG93WTpNfT1oLnN0eWxlO2lmKFtmLHYsTV0uaW5jbHVkZXMoInNjcm9sbCIpKXJldHVybiBoO2lmKCh7b3ZlcmZsb3c6ZixvdmVyZmxvd1g6dixvdmVyZmxvd1k6TX09YS5nZXRDb21wdXRlZFN0eWxlKGgpKSxkLmluY2x1ZGVzKGYpfHxkLmluY2x1ZGVzKHYp''@;'; put 'put ''fHxkLmluY2x1ZGVzKE0pfHxoLmNsaWVudEhlaWdodDw9aC5zY3JvbGxIZWlnaHQrMSYmKGQuaW5jbHVkZXMoTSl8fGQuaW5jbHVkZXMoZikpfHxoLmNsaWVudFdpZHRoPD1oLnNjcm9sbFdpZHRoKzEmJihkLmluY2x1ZGVzKHYpfHxkLmluY2x1ZGVzKGYpKSlyZXR1cm4gaDtoPWgucGFyZW50''@;'; put 'put ''Tm9kZX1yZXR1cm4gYX1mdW5jdGlvbiBCMmUoYyl7cmV0dXJuIGMuc2Nyb2xsSGVpZ2h0LWMuY2xpZW50SGVpZ2h0fWZ1bmN0aW9uIGoyZShjKXtyZXR1cm4gYy5zY3JvbGxXaWR0aC1jLmNsaWVudFdpZHRofWZ1bmN0aW9uIGFfKGMpe2NvbnN0IGw9Yy5vd25lckRvY3VtZW50LGE9bC5kZWZh''@;'; put 'put ''dWx0VmlldztsZXQgZD1jLnBhcmVudE5vZGU7Zm9yKDtkJiZkLnN0eWxlJiZsLmJvZHkhPT1kOyl7aWYoInZpc2libGUiIT09ZC5zdHlsZS5vdmVyZmxvdyYmIiIhPT1kLnN0eWxlLm92ZXJmbG93KXJldHVybiBkO2NvbnN0IGg9YS5nZXRDb21wdXRlZFN0eWxlKGQpLGY9WyJzY3JvbGwiLCJo''@;'; put 'put ''aWRkZW4iLCJhdXRvIl0sdj1oLmdldFByb3BlcnR5VmFsdWUoIm92ZXJmbG93IiksTT1oLmdldFByb3BlcnR5VmFsdWUoIm92ZXJmbG93LXkiKSxEPWguZ2V0UHJvcGVydHlWYWx1ZSgib3ZlcmZsb3cteCIpO2lmKGYuaW5jbHVkZXModil8fGYuaW5jbHVkZXMoTSl8fGYuaW5jbHVkZXMoRCkp''@;'; put 'put ''cmV0dXJuIGQ7ZD1kLnBhcmVudE5vZGV9cmV0dXJuIGF9ZnVuY3Rpb24gX0UoYyxsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06d2luZG93O2lmKCFjKXJldHVybjtpZihjPT09YSlyZXR1cm4id2lkdGgiPT09bD9gJHthLmlu''@;'; put 'put ''bmVyV2lkdGh9cHhgOiJoZWlnaHQiPT09bD9gJHthLmlubmVySGVpZ2h0fXB4YDp2b2lkIDA7Y29uc3QgZD1jLnN0eWxlW2xdO2lmKCIiIT09ZCYmdm9pZCAwIT09ZClyZXR1cm4gZDtjb25zdCBoPWEuZ2V0Q29tcHV0ZWRTdHlsZShjKTtyZXR1cm4iIiE9PWhbbF0mJnZvaWQgMCE9PWhbbF0/''@;'; put 'put ''aFtsXTp2b2lkIDB9ZnVuY3Rpb24gdVhlKGMsbCl7Y29uc3R7c2VsZWN0b3JUZXh0OmF9PWw7bGV0IGQ9ITE7cmV0dXJuIGwudHlwZT09PUNTU1J1bGUuU1RZTEVfUlVMRSYmYSYmKGMubXNNYXRjaGVzU2VsZWN0b3I/ZD1jLm1zTWF0Y2hlc1NlbGVjdG9yKGEpOmMubWF0Y2hlcyYmKGQ9Yy5t''@;'; put 'put ''YXRjaGVzKGEpKSksZH1mdW5jdGlvbiBzdShjKXtyZXR1cm4gYy5vZmZzZXRXaWR0aH1mdW5jdGlvbiB4dShjKXtyZXR1cm4gYy5vZmZzZXRIZWlnaHR9ZnVuY3Rpb24gb18oYyl7cmV0dXJuIGMuY2xpZW50SGVpZ2h0fHxjLmlubmVySGVpZ2h0fWZ1bmN0aW9uIEMkKGMpe3JldHVybiBjLmNs''@;'; put 'put ''aWVudFdpZHRofHxjLmlubmVyV2lkdGh9ZnVuY3Rpb24gZFhlKGMsbCxhKXtjLmFkZEV2ZW50TGlzdGVuZXIobCxhLCExKX1mdW5jdGlvbiBoWGUoYyxsLGEpe2MucmVtb3ZlRXZlbnRMaXN0ZW5lcihsLGEsITEpfWZ1bmN0aW9uIFMkKGMpe3JldHVybiBjLnNlbGVjdGlvblN0YXJ0P2Muc2Vs''@;'; put 'put ''ZWN0aW9uU3RhcnQ6MH1mdW5jdGlvbiB6MmUoYyl7cmV0dXJuIGMuc2VsZWN0aW9uRW5kP2Muc2VsZWN0aW9uRW5kOjB9ZnVuY3Rpb24gZlhlKCl7bGV0IGM9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOndpbmRvdztjb25zdCBsPWMuZG9j''@;'; put 'put ''dW1lbnQ7bGV0IGE9IiI7cmV0dXJuIGMuZ2V0U2VsZWN0aW9uP2E9Yy5nZXRTZWxlY3Rpb24oKS50b1N0cmluZygpOmwuc2VsZWN0aW9uJiYiQ29udHJvbCIhPT1sLnNlbGVjdGlvbi50eXBlJiYoYT1sLnNlbGVjdGlvbi5jcmVhdGVSYW5nZSgpLnRleHQpLGF9ZnVuY3Rpb24gTSQoKXtsZXQg''@;'; put 'put ''Yz1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06d2luZG93O2MuZ2V0U2VsZWN0aW9uJiYoYy5nZXRTZWxlY3Rpb24oKS5lbXB0eT9jLmdldFNlbGVjdGlvbigpLmVtcHR5KCk6Yy5nZXRTZWxlY3Rpb24oKS5yZW1vdmVBbGxSYW5nZXMmJmMu''@;'; put 'put ''Z2V0U2VsZWN0aW9uKCkucmVtb3ZlQWxsUmFuZ2VzKCkpfWZ1bmN0aW9uIHdFKGMsbCxhKXtpZih2b2lkIDA9PT1hJiYoYT1sKSxjLnNldFNlbGVjdGlvblJhbmdlKXtjLmZvY3VzKCk7dHJ5e2Muc2V0U2VsZWN0aW9uUmFuZ2UobCxhKX1jYXRjaHtjb25zdCBoPWMucGFyZW50Tm9kZSxmPWgu''@;'; put 'put ''c3R5bGUuZGlzcGxheTtoLnN0eWxlLmRpc3BsYXk9ImJsb2NrIixjLnNldFNlbGVjdGlvblJhbmdlKGwsYSksaC5zdHlsZS5kaXNwbGF5PWZ9fX1sZXQgeCQsbF87ZnVuY3Rpb24gZjAoKXtsZXQgYz1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNb''@;'; put 'put ''MF06ZG9jdW1lbnQ7cmV0dXJuIHZvaWQgMD09PXgkJiYoeCQ9ZnVuY3Rpb24gcFhlKCl7bGV0IGM9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOmRvY3VtZW50O2NvbnN0IGw9Yy5jcmVhdGVFbGVtZW50KCJkaXYiKTtsLnN0eWxlLmhlaWdo''@;'; put 'put ''dD0iMjAwcHgiLGwuc3R5bGUud2lkdGg9IjEwMCUiO2NvbnN0IGE9Yy5jcmVhdGVFbGVtZW50KCJkaXYiKTthLnN0eWxlLmJveFNpemluZz0iY29udGVudC1ib3giLGEuc3R5bGUuaGVpZ2h0PSIxNTBweCIsYS5zdHlsZS5sZWZ0PSIwcHgiLGEuc3R5bGUub3ZlcmZsb3c9ImhpZGRlbiIsYS5z''@;'; put 'put ''dHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLGEuc3R5bGUudG9wPSIwcHgiLGEuc3R5bGUud2lkdGg9IjIwMHB4IixhLnN0eWxlLnZpc2liaWxpdHk9ImhpZGRlbiIsYS5hcHBlbmRDaGlsZChsKSwoYy5ib2R5fHxjLmRvY3VtZW50RWxlbWVudCkuYXBwZW5kQ2hpbGQoYSk7Y29uc3QgZD1sLm9m''@;'; put 'put ''ZnNldFdpZHRoO2Euc3R5bGUub3ZlcmZsb3c9InNjcm9sbCI7bGV0IGg9bC5vZmZzZXRXaWR0aDtyZXR1cm4gZD09PWgmJihoPWEuY2xpZW50V2lkdGgpLChjLmJvZHl8fGMuZG9jdW1lbnRFbGVtZW50KS5yZW1vdmVDaGlsZChhKSxkLWh9KGMpKSx4JH1mdW5jdGlvbiBFJChjKXtyZXR1cm4g''@;'; put 'put ''YyBpbnN0YW5jZW9mIFdpbmRvdz9jLmRvY3VtZW50LmJvZHkuc2Nyb2xsSGVpZ2h0PmMuaW5uZXJIZWlnaHQ6Yy5vZmZzZXRXaWR0aCE9PWMuY2xpZW50V2lkdGh9ZnVuY3Rpb24gVCQoYyl7cmV0dXJuIGMgaW5zdGFuY2VvZiBXaW5kb3c/Yy5kb2N1bWVudC5ib2R5LnNjcm9sbFdpZHRoPmMu''@;'; put 'put ''aW5uZXJXaWR0aDpjLm9mZnNldEhlaWdodCE9PWMuY2xpZW50SGVpZ2h0fWZ1bmN0aW9uIFBPKGMsbCxhKXtjLnN0eWxlLnRyYW5zZm9ybT1gdHJhbnNsYXRlM2QoJHtsfSwke2F9LDApYH1mdW5jdGlvbiBnWGUoYyl7bGV0IGw7cmV0dXJuIGMuc3R5bGUudHJhbnNmb3JtJiYiIiE9PShsPWMu''@;'; put 'put ''c3R5bGUudHJhbnNmb3JtKT9bInRyYW5zZm9ybSIsbF06LTF9ZnVuY3Rpb24gQ0UoYyl7Yy5zdHlsZS50cmFuc2Zvcm0mJiIiIT09Yy5zdHlsZS50cmFuc2Zvcm0mJihjLnN0eWxlLnRyYW5zZm9ybT0iIil9ZnVuY3Rpb24gU0UoYyl7cmV0dXJuIGMmJihbIklOUFVUIiwiU0VMRUNUIiwiVEVY''@;'; put 'put ''VEFSRUEiXS5pbmRleE9mKGMubm9kZU5hbWUpPi0xfHwidHJ1ZSI9PT1jLmNvbnRlbnRFZGl0YWJsZSl9ZnVuY3Rpb24gRk8oYyl7cmV0dXJuIFNFKGMpJiYhMT09PWMuaGFzQXR0cmlidXRlKCJkYXRhLWhvdC1pbnB1dCIpfWZ1bmN0aW9uIG1YZShjKXtGTyhjLm93bmVyRG9jdW1lbnQuYWN0''@;'; put 'put ''aXZlRWxlbWVudCl8fGMuc2VsZWN0KCl9ZnVuY3Rpb24gQSQoYyl7cmV0dXJuIWMucGFyZW50Tm9kZX1mdW5jdGlvbiBVMmUoYyxsKXtuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoKGQsaCk9PntkLmZvckVhY2goZj0+e2YuaXNJbnRlcnNlY3RpbmcmJm51bGwhPT1jLm9mZnNldFBhcmVudCYm''@;'; put 'put ''KGwoKSxoLnVub2JzZXJ2ZShjKSl9KX0se3Jvb3Q6Yy5vd25lckRvY3VtZW50LmJvZHl9KS5vYnNlcnZlKGMpfWZ1bmN0aW9uIGskKGMpe2xldCBsPSEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0pfHxhcmd1bWVudHNbMV0sYT0hKGFyZ3VtZW50cy5sZW5ndGg+''@;'; put 'put ''MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdKXx8YXJndW1lbnRzWzJdO2NvbnN0IGQ9Yy5vd25lckRvY3VtZW50LGg9ZC5jcmVhdGVSYW5nZSgpLGY9ZC5kZWZhdWx0Vmlldy5nZXRTZWxlY3Rpb24oKTt2byhjLCJjb250ZW50ZWRpdGFibGUiLCEwKSxhJiZ2byhjLC4uLlY3KCkpLGwmJlRpKGMs''@;'; put 'put ''ImludmlzaWJsZVNlbGVjdGlvbiIpLGguc2VsZWN0Tm9kZUNvbnRlbnRzKGMpLGYucmVtb3ZlQWxsUmFuZ2VzKCksZi5hZGRSYW5nZShoKX1mdW5jdGlvbiBEJChjKXtsZXQgbD0hKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdO2NvbnN0''@;'; put 'put ''IGE9Yy5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LmdldFNlbGVjdGlvbigpO2MuaGFzQXR0cmlidXRlKCJhcmlhLWhpZGRlbiIpJiZjLnJlbW92ZUF0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iKSxhLnJlbW92ZUFsbFJhbmdlcygpLGwmJmxvKGMsImludmlzaWJsZVNlbGVjdGlvbiIpLGMucmVt''@;'; put 'put ''b3ZlQXR0cmlidXRlKCJjb250ZW50ZWRpdGFibGUiKX1mdW5jdGlvbiBaMmUoYyxsKXtsZXQgYT0hKGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdKXx8YXJndW1lbnRzWzJdO2skKGMsYSksbCgpLEQkKGMsYSl9ZnVuY3Rpb24gRXAoYyl7dmFyIGw7Y29uc3QgYT1u''@;'; put 'put ''dWxsPT1jfHxudWxsPT09KGw9Yy5vd25lckRvY3VtZW50KXx8dm9pZCAwPT09bD92b2lkIDA6bC5kZWZhdWx0Vmlldy5FbGVtZW50O3JldHVybiEhKGEmJm51bGwhPT1hJiZjIGluc3RhbmNlb2YgYSl9ZnVuY3Rpb24gbWwoYyl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGN9ZnVuY3Rpb24g''@;'; put 'put ''VzJlKGMpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToyMDAsYT0wO2NvbnN0IGQ9e2xhc3RDYWxsVGhyb3R0bGVkOiEwfTtsZXQgaD1udWxsO3JldHVybiBmdW5jdGlvbiBmKCl7Zm9yKHZhciB2PWFyZ3VtZW50cy5sZW5ndGgs''@;'; put 'put ''TT1uZXcgQXJyYXkodiksRD0wO0Q8djtEKyspTVtEXT1hcmd1bWVudHNbRF07Y29uc3QgWj1EYXRlLm5vdygpO2xldCByZT0hMTtkLmxhc3RDYWxsVGhyb3R0bGVkPSEwLGF8fChhPVoscmU9ITApO2NvbnN0IGNlPWwtKFotYSk7cmV0dXJuIHJlPyhkLmxhc3RDYWxsVGhyb3R0bGVkPSExLGMu''@;'; put 'put ''YXBwbHkodGhpcyxNKSk6KGgmJmNsZWFyVGltZW91dChoKSxoPXNldFRpbWVvdXQoKCk9PntkLmxhc3RDYWxsVGhyb3R0bGVkPSExLGMuYXBwbHkodGhpcyxNKSxhPTAsaD12b2lkIDB9LGNlKSksZH19ZnVuY3Rpb24gdlhlKGMpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09''@;'; put 'put ''YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXToxMDtjb25zdCBkPVcyZShjLGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToyMDApO2xldCBoPWE7ZnVuY3Rpb24gdigpe2Zvcih2YXIgTT1hcmd1bWVudHMubGVuZ3RoLEQ9bmV3IEFycmF5KE0p''@;'; put 'put ''LFo9MDtaPE07WisrKURbWl09YXJndW1lbnRzW1pdO3JldHVybiBoPyhoLT0xLGMuYXBwbHkodGhpcyxEKSk6ZC5hcHBseSh0aGlzLEQpfXJldHVybiB2LmNsZWFySGl0cz1mdW5jdGlvbiBmKCl7aD1hfSx2fWZ1bmN0aW9uIE1FKGMpe2xldCBkLGw9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lk''@;'; put 'put ''IDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjIwMCxhPW51bGw7cmV0dXJuIGZ1bmN0aW9uIGgoKXtmb3IodmFyIGY9YXJndW1lbnRzLmxlbmd0aCx2PW5ldyBBcnJheShmKSxNPTA7TTxmO00rKyl2W01dPWFyZ3VtZW50c1tNXTtyZXR1cm4gYSYmY2xlYXJUaW1lb3V0KGEpLGE9c2V0''@;'; put 'put ''VGltZW91dCgoKT0+e2Q9Yy5hcHBseSh0aGlzLHYpfSxsKSxkfX1mdW5jdGlvbiBiWGUoKXtmb3IodmFyIGM9YXJndW1lbnRzLmxlbmd0aCxsPW5ldyBBcnJheShjKSxhPTA7YTxjO2ErKylsW2FdPWFyZ3VtZW50c1thXTtjb25zdFtkLC4uLmhdPWw7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZh''@;'; put 'put ''ciB2PWFyZ3VtZW50cy5sZW5ndGgsTT1uZXcgQXJyYXkodiksRD0wO0Q8djtEKyspTVtEXT1hcmd1bWVudHNbRF07cmV0dXJuIHF1KGgsKFoscmUpPT5yZShaKSxkLmFwcGx5KHRoaXMsTSkpfX1mdW5jdGlvbiBJJChjKXtmb3IodmFyIGw9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShs''@;'; put 'put ''PjE/bC0xOjApLGQ9MTtkPGw7ZCsrKWFbZC0xXT1hcmd1bWVudHNbZF07cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBmPWFyZ3VtZW50cy5sZW5ndGgsdj1uZXcgQXJyYXkoZiksTT0wO008ZjtNKyspdltNXT1hcmd1bWVudHNbTV07cmV0dXJuIGMuYXBwbHkodGhpcyxhLmNvbmNhdCh2KSl9''@;'; put 'put ''fWZ1bmN0aW9uIFkyZShjKXtjb25zdCBsPWMubGVuZ3RoO3JldHVybiBmdW5jdGlvbiBhKGQpe3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgZj1hcmd1bWVudHMubGVuZ3RoLHY9bmV3IEFycmF5KGYpLE09MDtNPGY7TSsrKXZbTV09YXJndW1lbnRzW01dO2NvbnN0IEQ9ZC5jb25jYXQodik7''@;'; put 'put ''bGV0IFo7cmV0dXJuIFo9RC5sZW5ndGg+PWw/Yy5hcHBseSh0aGlzLEQpOmEoRCksWn19KFtdKX1mdW5jdGlvbiB5WGUoYyl7Y29uc3QgbD1jLmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24gYShkKXtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIGY9YXJndW1lbnRzLmxlbmd0aCx2PW5ldyBBcnJh''@;'; put 'put ''eShmKSxNPTA7TTxmO00rKyl2W01dPWFyZ3VtZW50c1tNXTtjb25zdCBEPWQuY29uY2F0KHYucmV2ZXJzZSgpKTtsZXQgWjtyZXR1cm4gWj1ELmxlbmd0aD49bD9jLmFwcGx5KHRoaXMsRCk6YShEKSxafX0oW10pfWZ1bmN0aW9uIEhPKGMsbCxhLGQsaCxmLHYsTSl7cmV0dXJuIFBhKE0pP2Mu''@;'; put 'put ''Y2FsbChsLGEsZCxoLGYsdixNKTpQYSh2KT9jLmNhbGwobCxhLGQsaCxmLHYpOlBhKGYpP2MuY2FsbChsLGEsZCxoLGYpOlBhKGgpP2MuY2FsbChsLGEsZCxoKTpQYShkKT9jLmNhbGwobCxhLGQpOlBhKGEpP2MuY2FsbChsLGEpOmMuY2FsbChsKX1mdW5jdGlvbiBzXyhjKXtsZXQgbDtyZXR1''@;'; put 'put ''cm4gQXJyYXkuaXNBcnJheShjKT9sPWMubGVuZ3RoP25ldyBBcnJheShjLmxlbmd0aCkuZmlsbChudWxsKTpbXToobD17fSxYbyhjLChhLGQpPT57Il9fY2hpbGRyZW4iIT09ZCYmKGxbZF09YSYmIm9iamVjdCI9PXR5cGVvZiBhJiYhQXJyYXkuaXNBcnJheShhKT9zXyhhKTpBcnJheS5pc0Fy''@;'; put 'put ''cmF5KGEpP2EubGVuZ3RoJiYib2JqZWN0Ij09dHlwZW9mIGFbMF0mJiFBcnJheS5pc0FycmF5KGFbMF0pP1tzXyhhWzBdKV06W106bnVsbCl9KSksbH1mdW5jdGlvbiBHMmUoYyxsKXtyZXR1cm4gbC5wcm90b3R5cGUuY29uc3RydWN0b3I9bCxjLnByb3RvdHlwZT1uZXcgbCxjLnByb3RvdHlw''@;'; put 'put ''ZS5jb25zdHJ1Y3Rvcj1jLGN9ZnVuY3Rpb24gRXUoYyxsLGEpe2NvbnN0IGQ9QXJyYXkuaXNBcnJheShhKTtyZXR1cm4gWG8obCwoaCxmKT0+eyghMT09PWR8fGEuaW5jbHVkZXMoZikpJiYoY1tmXT1oKX0pLGN9ZnVuY3Rpb24geEUoYyxsKXtYbyhsLChhLGQpPT57bFtkXSYmIm9iamVjdCI9''@;'; put 'put ''PXR5cGVvZiBsW2RdPyhjW2RdfHwoY1tkXT1BcnJheS5pc0FycmF5KGxbZF0pP1tdOiJbb2JqZWN0IERhdGVdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChsW2RdKT9sW2RdOnt9KSx4RShjW2RdLGxbZF0pKTpjW2RdPWxbZF19KX1mdW5jdGlvbiBnMShjKXtyZXR1cm4ib2Jq''@;'; put 'put ''ZWN0Ij09dHlwZW9mIGM/SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShjKSk6Y31mdW5jdGlvbiBuMyhjKXtjb25zdCBsPXt9O3JldHVybiBYbyhjLChhLGQpPT57bFtkXT1hfSksbH1mdW5jdGlvbiBUbChjKXtjLk1JWElOU3x8KGMuTUlYSU5TPVtdKTtmb3IodmFyIGw9YXJndW1lbnRzLmxl''@;'; put 'put ''bmd0aCxhPW5ldyBBcnJheShsPjE/bC0xOjApLGQ9MTtkPGw7ZCsrKWFbZC0xXT1hcmd1bWVudHNbZF07cmV0dXJuIFluKGEsaD0+e2MuTUlYSU5TLnB1c2goaC5NSVhJTl9OQU1FKSxYbyhoLChmLHYpPT57aWYodm9pZCAwIT09Yy5wcm90b3R5cGVbdl0pdGhyb3cgbmV3IEVycm9yKGBNaXhp''@;'; put 'put ''biBjb25mbGljdC4gUHJvcGVydHkgJyR7dn0nIGFscmVhZHkgZXhpc3QgYW5kIGNhbm5vdCBiZSBvdmVyd3JpdHRlbi5gKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgZiljLnByb3RvdHlwZVt2XT1mO2Vsc2V7Y29uc3QgRD1mdW5jdGlvbihyZSl7Y29uc3QgY2U9YF8ke3JlfWA7cmV0dXJuIGZ1''@;'; put 'put ''bmN0aW9uKGJlKXt0aGlzW2NlXT1iZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLnByb3RvdHlwZSx2LHtnZXQ6ZnVuY3Rpb24ocmUsY2Upe2NvbnN0IGJlPWBfJHtyZX1gO3JldHVybiBmdW5jdGlvbigpe3JldHVybiB2b2lkIDA9PT10aGlzW2JlXSYmKHRoaXNbYmVdPShCZT0+e2xldCBx''@;'; put 'put ''ZT1CZTtyZXR1cm4oQXJyYXkuaXNBcnJheShxZSl8fHFvKHFlKSkmJihxZT1nMShxZSkpLHFlfSkoY2UpKSx0aGlzW2JlXX19KHYsZiksc2V0OkQodiksY29uZmlndXJhYmxlOiEwfSl9fSl9KSxjfWZ1bmN0aW9uIE5PKGMsbCl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGMpPT09SlNPTi5zdHJp''@;'; put 'put ''bmdpZnkobCl9ZnVuY3Rpb24gcW8oYyl7cmV0dXJuIltvYmplY3QgT2JqZWN0XSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYyl9ZnVuY3Rpb24gVHAoYyxsLGEsZCl7ZC52YWx1ZT1hLGQud3JpdGFibGU9ITEhPT1kLndyaXRhYmxlLGQuZW51bWVyYWJsZT0hMSE9PWQuZW51''@;'; put 'put ''bWVyYWJsZSxkLmNvbmZpZ3VyYWJsZT0hMSE9PWQuY29uZmlndXJhYmxlLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwsZCl9ZnVuY3Rpb24gWG8oYyxsKXtmb3IoY29uc3QgYSBpbiBjKWlmKCghYy5oYXNPd25Qcm9wZXJ0eXx8Yy5oYXNPd25Qcm9wZXJ0eSYmT2JqZWN0LnByb3RvdHlwZS5o''@;'; put 'put ''YXNPd25Qcm9wZXJ0eS5jYWxsKGMsYSkpJiYhMT09PWwoY1thXSxhLGMpKWJyZWFrO3JldHVybiBjfWZ1bmN0aW9uICQyZShjLGwpe2NvbnN0IGE9bC5zcGxpdCgiLiIpO2xldCBkPWM7cmV0dXJuIFhvKGEsaD0+e2lmKGQ9ZFtoXSx2b2lkIDA9PT1kKXJldHVybiBkPXZvaWQgMCwhMX0pLGR9''@;'; put 'put ''ZnVuY3Rpb24gVk8oYyxsLGEpe2lmKCJzdHJpbmciIT10eXBlb2YgbClyZXR1cm47Y29uc3QgZD1sLnNwbGl0KCIuIik7bGV0IGg9YztkLmZvckVhY2goKGYsdik9PnsiX19wcm90b19fIj09PWZ8fCJjb25zdHJ1Y3RvciI9PT1mfHwicHJvdG90eXBlIj09PWZ8fCh2IT09ZC5sZW5ndGgtMT8o''@;'; put 'put ''VHUoaCxmKXx8KGhbZl09e30pLGg9aFtmXSk6aFtmXT1hKX0pfWZ1bmN0aW9uIEJPKGMpe2lmKCFxbyhjKSlyZXR1cm4gMDtjb25zdCBsPWZ1bmN0aW9uKGEpe2xldCBkPTA7cmV0dXJuIHFvKGEpP1hvKGEsKGgsZik9PnsiX19jaGlsZHJlbiIhPT1mJiYoZCs9bChoKSl9KTpkKz0xLGR9O3Jl''@;'; put 'put ''dHVybiBsKGMpfWZ1bmN0aW9uIEZkKGMpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToidmFsdWUiO2NvbnN0IGE9YF8ke2x9YCxkPXtfdG91Y2hlZDohMSxbYV06Yyxpc1RvdWNoZWQoKXtyZXR1cm4gdGhpcy5fdG91Y2hlZH19''@;'; put 'put ''O3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZCxsLHtnZXQoKXtyZXR1cm4gdGhpc1thXX0sc2V0KGgpe3RoaXMuX3RvdWNoZWQ9ITAsdGhpc1thXT1ofSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLGR9ZnVuY3Rpb24gVHUoYyxsKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlw''@;'; put 'put ''ZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGMsbCl9ZnVuY3Rpb24gRUUoYyl7cmV0dXJuIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoYyl9ZnVuY3Rpb24gVEUoYyl7d2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKGMpfWZ1bmN0aW9uIFIkKCl7cmV0dXJuIm9udG91Y2hzdGFydCJpbiB3''@;'; put 'put ''aW5kb3d9ZnVuY3Rpb24gSzJlKCl7cmV0dXJuIHR5cGVvZiB3aW5kb3c8InUifWZ1bmN0aW9uIHEyZShjKXtyZXR1cm4gbF98fChsXz0ib2JqZWN0Ij09dHlwZW9mIEludGw/bmV3IEludGwuQ29sbGF0b3IoYyxhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1''@;'; put 'put ''bWVudHNbMV06e30pLmNvbXBhcmU6ImZ1bmN0aW9uIj09dHlwZW9mIFN0cmluZy5wcm90b3R5cGUubG9jYWxlQ29tcGFyZT8oYSxkKT0+YCR7YX1gLmxvY2FsZUNvbXBhcmUoZCk6KGEsZCk9PmE9PT1kPzA6YT5kPy0xOjEsbF8pfXkoOTU0OTMpO2NvbnN0IFYyPWM9Pntjb25zdCBsPXt2YWx1''@;'; put 'put ''ZTohMSx0ZXN0OihhLGQpPT57bC52YWx1ZT1jKGEsZCl9fTtyZXR1cm4gbH0sYmc9e2Nocm9tZTpWMigoYyxsKT0+L0Nocm9tZS8udGVzdChjKSYmL0dvb2dsZS8udGVzdChsKSksY2hyb21lV2ViS2l0OlYyKGM9Pi9DcmlPUy8udGVzdChjKSksZWRnZTpWMihjPT4vRWRnZS8udGVzdChjKSks''@;'; put 'put ''ZWRnZVdlYktpdDpWMihjPT4vRWRnaU9TLy50ZXN0KGMpKSxmaXJlZm94OlYyKGM9Pi9GaXJlZm94Ly50ZXN0KGMpKSxmaXJlZm94V2ViS2l0OlYyKGM9Pi9GeGlPUy8udGVzdChjKSksbW9iaWxlOlYyKGM9Pi9BbmRyb2lkfHdlYk9TfGlQaG9uZXxpUGFkfGlQb2R8QmxhY2tCZXJyeXxJRU1v''@;'; put 'put ''YmlsZXxPcGVyYSBNaW5pL2kudGVzdChjKSksc2FmYXJpOlYyKChjLGwpPT4vU2FmYXJpLy50ZXN0KGMpJiYvQXBwbGUgQ29tcHV0ZXIvLnRlc3QobCkpfSxjXz17bWFjOlYyKGM9Pi9eTWFjLy50ZXN0KGMpKSx3aW46VjIoYz0+L15XaW4vLnRlc3QoYykpLGxpbnV4OlYyKGM9Pi9eTGludXgv''@;'; put 'put ''LnRlc3QoYykpLGlvczpWMihjPT4vaVBob25lfGlQYWR8aVBvZC9pLnRlc3QoYykpfTtmdW5jdGlvbiBYMmUoKXtsZXR7dXNlckFnZW50OmM9bmF2aWdhdG9yLnVzZXJBZ2VudCx2ZW5kb3I6bD1uYXZpZ2F0b3IudmVuZG9yfT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50''@;'; put 'put ''c1swXT9hcmd1bWVudHNbMF06e307WG8oYmcsYT0+e2xldHt0ZXN0OmR9PWE7ZChjLGwpfSl9ZnVuY3Rpb24gSjJlKCl7bGV0e3BsYXRmb3JtOmM9bmF2aWdhdG9yLnBsYXRmb3JtfT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e307WG8o''@;'; put 'put ''Y18sbD0+e2xldHt0ZXN0OmF9PWw7YShjKX0pfWZ1bmN0aW9uIEwkKCl7cmV0dXJuIGJnLmNocm9tZS52YWx1ZX1mdW5jdGlvbiBRMmUoKXtyZXR1cm4gYmcuY2hyb21lV2ViS2l0LnZhbHVlfWZ1bmN0aW9uIGpPKCl7cmV0dXJuIGJnLmZpcmVmb3gudmFsdWV9ZnVuY3Rpb24gZWZlKCl7cmV0''@;'; put 'put ''dXJuIGJnLmZpcmVmb3hXZWJLaXQudmFsdWV9ZnVuY3Rpb24gQUUoKXtyZXR1cm4gYmcuc2FmYXJpLnZhbHVlfWZ1bmN0aW9uIHRmZSgpe3JldHVybiBiZy5lZGdlLnZhbHVlfWZ1bmN0aW9uIF9YZSgpe3JldHVybiBiZy5lZGdlV2ViS2l0LnZhbHVlfWZ1bmN0aW9uIEFwKCl7cmV0dXJuIGJn''@;'; put 'put ''Lm1vYmlsZS52YWx1ZX1mdW5jdGlvbiBPJCgpe3JldHVybiBjXy5pb3MudmFsdWV9ZnVuY3Rpb24gUCQoKXtsZXR7bWF4VG91Y2hQb2ludHM6Y309YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOm5hdmlnYXRvcjtyZXR1cm4gYz4yJiZjXy5t''@;'; put 'put ''YWMudmFsdWV9ZnVuY3Rpb24gRiQoKXtyZXR1cm4gY18ud2luLnZhbHVlfWZ1bmN0aW9uIHpPKCl7cmV0dXJuIGNfLm1hYy52YWx1ZX1mdW5jdGlvbiB3WGUoKXtyZXR1cm4gY18ubGludXgudmFsdWV9SzJlKCkmJihYMmUoKSxKMmUoKSk7Y29uc3QgWWE9e0FMVDoxOCxBUlJPV19ET1dOOjQw''@;'; put 'put ''LEFSUk9XX0xFRlQ6MzcsQVJST1dfUklHSFQ6MzksQVJST1dfVVA6MzgsQVVESU9fRE9XTjpqTygpPzE4MjoxNzQsQVVESU9fTVVURTpqTygpPzE4MToxNzMsQVVESU9fVVA6ak8oKT8xODM6MTc1LEJBQ0tTUEFDRTo4LENBUFNfTE9DSzoyMCxDT01NQToxODgsQ09NTUFORF9MRUZUOjkxLENP''@;'; put 'put ''TU1BTkRfUklHSFQ6OTMsQ09NTUFORF9GSVJFRk9YOjIyNCxDT05UUk9MOjE3LERFTEVURTo0NixFTkQ6MzUsRU5URVI6MTMsRVNDQVBFOjI3LEYxOjExMixGMjoxMTMsRjM6MTE0LEY0OjExNSxGNToxMTYsRjY6MTE3LEY3OjExOCxGODoxMTksRjk6MTIwLEYxMDoxMjEsRjExOjEyMixGMTI6''@;'; put 'put ''MTIzLEYxMzoxMjQsRjE0OjEyNSxGMTU6MTI2LEYxNjoxMjcsRjE3OjEyOCxGMTg6MTI5LEYxOToxMzAsSE9NRTozNixJTlNFUlQ6NDUsTUVESUFfTkVYVDoxNzYsTUVESUFfUExBWV9QQVVTRToxNzksTUVESUFfUFJFVjoxNzcsTUVESUFfU1RPUDoxNzgsTlVMTDowLE5VTV9MT0NLOjE0NCxQ''@;'; put 'put ''QUdFX0RPV046MzQsUEFHRV9VUDozMyxQQVVTRToxOSxQRVJJT0Q6MTkwLFNDUk9MTF9MT0NLOjE0NSxTSElGVDoxNixTUEFDRTozMixUQUI6OSxBOjY1LEM6NjcsRDo2OCxGOjcwLEw6NzYsTzo3OSxQOjgwLFM6ODMsVjo4NixYOjg4LFk6ODksWjo5MH0sQ1hlPVtZYS5BTFQsWWEuQVJST1df''@;'; put 'put ''RE9XTixZYS5BUlJPV19MRUZULFlhLkFSUk9XX1JJR0hULFlhLkFSUk9XX1VQLFlhLkFVRElPX0RPV04sWWEuQVVESU9fTVVURSxZYS5BVURJT19VUCxZYS5CQUNLU1BBQ0UsWWEuQ0FQU19MT0NLLFlhLkRFTEVURSxZYS5FTkQsWWEuRU5URVIsWWEuRVNDQVBFLFlhLkYxLFlhLkYyLFlhLkYz''@;'; put 'put ''LFlhLkY0LFlhLkY1LFlhLkY2LFlhLkY3LFlhLkY4LFlhLkY5LFlhLkYxMCxZYS5GMTEsWWEuRjEyLFlhLkYxMyxZYS5GMTQsWWEuRjE1LFlhLkYxNixZYS5GMTcsWWEuRjE4LFlhLkYxOSxZYS5IT01FLFlhLklOU0VSVCxZYS5NRURJQV9ORVhULFlhLk1FRElBX1BMQVlfUEFVU0UsWWEuTUVE''@;'; put 'put ''SUFfUFJFVixZYS5NRURJQV9TVE9QLFlhLk5VTEwsWWEuTlVNX0xPQ0ssWWEuUEFHRV9ET1dOLFlhLlBBR0VfVVAsWWEuUEFVU0UsWWEuU0NST0xMX0xPQ0ssWWEuU0hJRlQsWWEuVEFCXTtmdW5jdGlvbiBuZmUoYyl7cmV0dXJuIDMyPT09Y3x8Yz49NDgmJmM8PTU3fHxjPj05NiYmYzw9MTEx''@;'; put 'put ''fHxjPj0xODYmJmM8PTE5Mnx8Yz49MjE5JiZjPD0yMjJ8fGM+PTIyNnx8Yz49NjUmJmM8PTkwfWZ1bmN0aW9uIEgkKGMpe3JldHVybiBDWGUuaW5jbHVkZXMoYyl9ZnVuY3Rpb24gU1hlKGMpe2NvbnN0IGw9W107cmV0dXJuIHpPKCk/bC5wdXNoKFlhLkNPTU1BTkRfTEVGVCxZYS5DT01NQU5E''@;'; put 'put ''X1JJR0hULFlhLkNPTU1BTkRfRklSRUZPWCk6bC5wdXNoKFlhLkNPTlRST0wpLGwuaW5jbHVkZXMoYyl9ZnVuY3Rpb24gcmZlKGMpe3JldHVybltZYS5DT05UUk9MLFlhLkNPTU1BTkRfTEVGVCxZYS5DT01NQU5EX1JJR0hULFlhLkNPTU1BTkRfRklSRUZPWF0uaW5jbHVkZXMoYyl9ZnVuY3Rp''@;'; put 'put ''b24gdV8oYyxsKXtjb25zdCBhPWwuc3BsaXQoInwiKTtsZXQgZD0hMTtyZXR1cm4gWW4oYSxoPT57aWYoYz09PVlhW2hdKXJldHVybiBkPSEwLCExfSksZH1mdW5jdGlvbiBCMihjKXtjLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25FbmFibGVkPSExLGMuY2FuY2VsQnViYmxlPSEwfWZ1bmN0aW9u''@;'; put 'put ''IEZtKGMpe3JldHVybiExPT09Yy5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uRW5hYmxlZH1mdW5jdGlvbiBIbShjKXtyZXR1cm4gMj09PWMuYnV0dG9ufWZ1bmN0aW9uIFVPKGMpe3JldHVybiAwPT09Yy5idXR0b259ZnVuY3Rpb24gaWZlKGMpe3JldHVybiBjIGluc3RhbmNlb2YgVG91Y2hFdmVu''@;'; put 'put ''dH1mdW5jdGlvbiBhZmUoYyxsKXtjb25zdCBhPXt4OmMub2Zmc2V0WCx5OmMub2Zmc2V0WX07bGV0IGQ9Yy50YXJnZXQ7aWYoIUVwKGwpfHxkIT09bCYmZC5jb250YWlucyhsKSlyZXR1cm4gYTtmb3IoO2QhPT1sOylhLngrPWQub2Zmc2V0TGVmdCxhLnkrPWQub2Zmc2V0VG9wLGQ9ZC5vZmZz''@;'; put 'put ''ZXRQYXJlbnQ7cmV0dXJuIGF9ZnVuY3Rpb24gaWwoKXtQYShjb25zb2xlKSYmY29uc29sZS53YXJuKC4uLmFyZ3VtZW50cyl9ZnVuY3Rpb24gTiQoKXtQYShjb25zb2xlKSYmY29uc29sZS5lcnJvciguLi5hcmd1bWVudHMpfWNvbnN0IFo3PVsiYWZ0ZXJDZWxsTWV0YVJlc2V0IiwiYWZ0ZXJD''@;'; put 'put ''aGFuZ2UiLCJhZnRlckNvbnRleHRNZW51RGVmYXVsdE9wdGlvbnMiLCJiZWZvcmVDb250ZXh0TWVudVNldEl0ZW1zIiwiYWZ0ZXJEcm9wZG93bk1lbnVEZWZhdWx0T3B0aW9ucyIsImJlZm9yZURyb3Bkb3duTWVudVNldEl0ZW1zIiwiYWZ0ZXJDb250ZXh0TWVudUhpZGUiLCJiZWZvcmVDb250''@;'; put 'put ''ZXh0TWVudVNob3ciLCJhZnRlckNvbnRleHRNZW51U2hvdyIsImFmdGVyQ29weUxpbWl0IiwiYmVmb3JlQ3JlYXRlQ29sIiwiYWZ0ZXJDb2x1bW5TZXF1ZW5jZUNoYW5nZSIsImFmdGVyQ3JlYXRlQ29sIiwiYmVmb3JlQ3JlYXRlUm93IiwiYWZ0ZXJDcmVhdGVSb3ciLCJhZnRlckRlc2VsZWN0''@;'; put 'put ''IiwiYWZ0ZXJEZXN0cm95IiwiYWZ0ZXJEb2N1bWVudEtleURvd24iLCJhZnRlckRyYXdTZWxlY3Rpb24iLCJiZWZvcmVSZW1vdmVDZWxsQ2xhc3NOYW1lcyIsImJlZm9yZUNvbXBvc2l0aW9uU3RhcnQiLCJhZnRlckdldENlbGxNZXRhIiwiYWZ0ZXJHZXRDb2xIZWFkZXIiLCJhZnRlckdldFJv''@;'; put 'put ''d0hlYWRlciIsImFmdGVySW5pdCIsImFmdGVyTG9hZERhdGEiLCJhZnRlclVwZGF0ZURhdGEiLCJhZnRlck1vbWVudHVtU2Nyb2xsIiwiYWZ0ZXJPbkNlbGxDb3JuZXJNb3VzZURvd24iLCJhZnRlck9uQ2VsbENvcm5lckRibENsaWNrIiwiYWZ0ZXJPbkNlbGxNb3VzZURvd24iLCJhZnRlck9u''@;'; put 'put ''Q2VsbE1vdXNlVXAiLCJhZnRlck9uQ2VsbENvbnRleHRNZW51IiwiYWZ0ZXJPbkNlbGxNb3VzZU92ZXIiLCJhZnRlck9uQ2VsbE1vdXNlT3V0IiwiYWZ0ZXJSZW1vdmVDb2wiLCJhZnRlclJlbW92ZVJvdyIsImJlZm9yZVJlbmRlcmVyIiwiYWZ0ZXJSZW5kZXJlciIsImFmdGVyUm93U2VxdWVu''@;'; put 'put ''Y2VDaGFuZ2UiLCJiZWZvcmVWaWV3cG9ydFNjcm9sbFZlcnRpY2FsbHkiLCJiZWZvcmVWaWV3cG9ydFNjcm9sbEhvcml6b250YWxseSIsImJlZm9yZVZpZXdwb3J0U2Nyb2xsIiwiYWZ0ZXJTY3JvbGxIb3Jpem9udGFsbHkiLCJhZnRlclNjcm9sbFZlcnRpY2FsbHkiLCJhZnRlclNjcm9sbCIs''@;'; put 'put ''ImFmdGVyU2VsZWN0aW9uIiwiYWZ0ZXJTZWxlY3Rpb25CeVByb3AiLCJhZnRlclNlbGVjdGlvbkVuZCIsImFmdGVyU2VsZWN0aW9uRW5kQnlQcm9wIiwiYWZ0ZXJTZWxlY3Rpb25Gb2N1c1NldCIsImJlZm9yZVNlbGVjdENvbHVtbnMiLCJhZnRlclNlbGVjdENvbHVtbnMiLCJiZWZvcmVTZWxl''@;'; put 'put ''Y3RSb3dzIiwiYWZ0ZXJTZWxlY3RSb3dzIiwiYWZ0ZXJTZXRDZWxsTWV0YSIsImFmdGVyUmVtb3ZlQ2VsbE1ldGEiLCJhZnRlclNldERhdGFBdENlbGwiLCJhZnRlclNldERhdGFBdFJvd1Byb3AiLCJhZnRlclNldFNvdXJjZURhdGFBdENlbGwiLCJhZnRlclNldFRoZW1lIiwiYWZ0ZXJVcGRh''@;'; put 'put ''dGVTZXR0aW5ncyIsImFmdGVyVmFsaWRhdGUiLCJiZWZvcmVMYW5ndWFnZUNoYW5nZSIsImFmdGVyTGFuZ3VhZ2VDaGFuZ2UiLCJiZWZvcmVBdXRvZmlsbCIsImFmdGVyQXV0b2ZpbGwiLCJiZWZvcmVDZWxsQWxpZ25tZW50IiwiYmVmb3JlQ2hhbmdlIiwiYmVmb3JlQ2hhbmdlUmVuZGVyIiwi''@;'; put 'put ''YmVmb3JlRHJhd0JvcmRlcnMiLCJiZWZvcmVHZXRDZWxsTWV0YSIsImJlZm9yZVJlbW92ZUNlbGxNZXRhIiwiYmVmb3JlSW5pdCIsImJlZm9yZUluaXRXYWxrb250YWJsZSIsImJlZm9yZUxvYWREYXRhIiwiYmVmb3JlVXBkYXRlRGF0YSIsImJlZm9yZUtleURvd24iLCJiZWZvcmVPbkNlbGxN''@;'; put 'put ''b3VzZURvd24iLCJiZWZvcmVPbkNlbGxNb3VzZVVwIiwiYmVmb3JlT25DZWxsQ29udGV4dE1lbnUiLCJiZWZvcmVPbkNlbGxNb3VzZU92ZXIiLCJiZWZvcmVPbkNlbGxNb3VzZU91dCIsImJlZm9yZVJlbW92ZUNvbCIsImJlZm9yZVJlbW92ZVJvdyIsImJlZm9yZVZpZXdSZW5kZXIiLCJhZnRl''@;'; put 'put ''clZpZXdSZW5kZXIiLCJiZWZvcmVSZW5kZXIiLCJhZnRlclJlbmRlciIsImJlZm9yZVJvd1dyYXAiLCJiZWZvcmVDb2x1bW5XcmFwIiwiYmVmb3JlU2V0Q2VsbE1ldGEiLCJiZWZvcmVTZWxlY3Rpb25Gb2N1c1NldCIsImJlZm9yZVNldFJhbmdlU3RhcnRPbmx5IiwiYmVmb3JlU2V0UmFuZ2VT''@;'; put 'put ''dGFydCIsImJlZm9yZVNldFJhbmdlRW5kIiwiYmVmb3JlU2VsZWN0aW9uSGlnaGxpZ2h0U2V0IiwiYmVmb3JlVG91Y2hTY3JvbGwiLCJiZWZvcmVWYWxpZGF0ZSIsImJlZm9yZVZhbHVlUmVuZGVyIiwiY29uc3RydWN0IiwiaW5pdCIsIm1vZGlmeUNvbEhlYWRlciIsIm1vZGlmeUNvbFdpZHRo''@;'; put 'put ''IiwibW9kaWZ5RmlsdGVyc011bHRpU2VsZWN0VmFsdWUiLCJtb2RpZnlGb2N1c2VkRWxlbWVudCIsIm1vZGlmeVJvd0hlYWRlciIsIm1vZGlmeVJvd0hlaWdodCIsIm1vZGlmeVJvd0hlaWdodEJ5T3ZlcmxheU5hbWUiLCJtb2RpZnlEYXRhIiwibW9kaWZ5U291cmNlRGF0YSIsIm1vZGlmeVJv''@;'; put 'put ''d0RhdGEiLCJtb2RpZnlHZXRDZWxsQ29vcmRzIiwibW9kaWZ5R2V0Q29vcmRzRWxlbWVudCIsIm1vZGlmeUZvY3VzT25UYWJOYXZpZ2F0aW9uIiwiYmVmb3JlSGlnaGxpZ2h0aW5nUm93SGVhZGVyIiwiYmVmb3JlSGlnaGxpZ2h0aW5nQ29sdW1uSGVhZGVyIiwicGVyc2lzdGVudFN0YXRlTG9h''@;'; put 'put ''ZCIsInBlcnNpc3RlbnRTdGF0ZVJlc2V0IiwicGVyc2lzdGVudFN0YXRlU2F2ZSIsImJlZm9yZUNvbHVtblNvcnQiLCJhZnRlckNvbHVtblNvcnQiLCJtb2RpZnlBdXRvZmlsbFJhbmdlIiwibW9kaWZ5Q29weWFibGVSYW5nZSIsImJlZm9yZUN1dCIsImFmdGVyQ3V0IiwiYmVmb3JlQ29weSIs''@;'; put 'put ''ImFmdGVyQ29weSIsImJlZm9yZVBhc3RlIiwiYWZ0ZXJQYXN0ZSIsImJlZm9yZUNvbHVtbkZyZWV6ZSIsImFmdGVyQ29sdW1uRnJlZXplIiwiYmVmb3JlQ29sdW1uTW92ZSIsImFmdGVyQ29sdW1uTW92ZSIsImJlZm9yZUNvbHVtblVuZnJlZXplIiwiYWZ0ZXJDb2x1bW5VbmZyZWV6ZSIsImJl''@;'; put 'put ''Zm9yZVJvd01vdmUiLCJhZnRlclJvd01vdmUiLCJiZWZvcmVDb2x1bW5SZXNpemUiLCJhZnRlckNvbHVtblJlc2l6ZSIsImJlZm9yZVJvd1Jlc2l6ZSIsImFmdGVyUm93UmVzaXplIiwiYWZ0ZXJHZXRDb2x1bW5IZWFkZXJSZW5kZXJlcnMiLCJhZnRlckdldFJvd0hlYWRlclJlbmRlcmVycyIs''@;'; put 'put ''ImJlZm9yZVN0cmV0Y2hpbmdDb2x1bW5XaWR0aCIsImJlZm9yZUZpbHRlciIsImFmdGVyRmlsdGVyIiwiYWZ0ZXJGb3JtdWxhc1ZhbHVlc1VwZGF0ZSIsImFmdGVyTmFtZWRFeHByZXNzaW9uQWRkZWQiLCJhZnRlck5hbWVkRXhwcmVzc2lvblJlbW92ZWQiLCJhZnRlclNoZWV0QWRkZWQiLCJh''@;'; put 'put ''ZnRlclNoZWV0UmVuYW1lZCIsImFmdGVyU2hlZXRSZW1vdmVkIiwibW9kaWZ5Q29sdW1uSGVhZGVySGVpZ2h0IiwibW9kaWZ5Q29sdW1uSGVhZGVyVmFsdWUiLCJiZWZvcmVVbmRvIiwiYmVmb3JlVW5kb1N0YWNrQ2hhbmdlIiwiYWZ0ZXJVbmRvIiwiYWZ0ZXJVbmRvU3RhY2tDaGFuZ2UiLCJi''@;'; put 'put ''ZWZvcmVSZWRvIiwiYmVmb3JlUmVkb1N0YWNrQ2hhbmdlIiwiYWZ0ZXJSZWRvIiwiYWZ0ZXJSZWRvU3RhY2tDaGFuZ2UiLCJtb2RpZnlSb3dIZWFkZXJXaWR0aCIsIm1vZGlmeVRyYW5zZm9ybUZvY3VzIiwibW9kaWZ5VHJhbnNmb3JtU3RhcnQiLCJtb2RpZnlUcmFuc2Zvcm1FbmQiLCJhZnRl''@;'; put 'put ''ck1vZGlmeVRyYW5zZm9ybUZvY3VzIiwiYWZ0ZXJNb2RpZnlUcmFuc2Zvcm1TdGFydCIsImFmdGVyTW9kaWZ5VHJhbnNmb3JtRW5kIiwiYWZ0ZXJWaWV3cG9ydFJvd0NhbGN1bGF0b3JPdmVycmlkZSIsImFmdGVyVmlld3BvcnRDb2x1bW5DYWxjdWxhdG9yT3ZlcnJpZGUiLCJhZnRlclBsdWdp''@;'; put 'put ''bnNJbml0aWFsaXplZCIsImJlZm9yZUhpZGVSb3dzIiwiYWZ0ZXJIaWRlUm93cyIsImJlZm9yZVVuaGlkZVJvd3MiLCJhZnRlclVuaGlkZVJvd3MiLCJiZWZvcmVIaWRlQ29sdW1ucyIsImFmdGVySGlkZUNvbHVtbnMiLCJiZWZvcmVVbmhpZGVDb2x1bW5zIiwiYWZ0ZXJVbmhpZGVDb2x1bW5z''@;'; put 'put ''IiwiYmVmb3JlVHJpbVJvdyIsImFmdGVyVHJpbVJvdyIsImJlZm9yZVVudHJpbVJvdyIsImFmdGVyVW50cmltUm93IiwiYmVmb3JlRHJvcGRvd25NZW51U2hvdyIsImFmdGVyRHJvcGRvd25NZW51U2hvdyIsImFmdGVyRHJvcGRvd25NZW51SGlkZSIsImJlZm9yZUFkZENoaWxkIiwiYWZ0ZXJB''@;'; put 'put ''ZGRDaGlsZCIsImJlZm9yZURldGFjaENoaWxkIiwiYWZ0ZXJEZXRhY2hDaGlsZCIsImJlZm9yZUJlZ2luRWRpdGluZyIsImFmdGVyQmVnaW5FZGl0aW5nIiwiYmVmb3JlTWVyZ2VDZWxscyIsImFmdGVyTWVyZ2VDZWxscyIsImJlZm9yZVVubWVyZ2VDZWxscyIsImFmdGVyVW5tZXJnZUNlbGxz''@;'; put 'put ''IiwiYWZ0ZXJMaXN0ZW4iLCJhZnRlclVubGlzdGVuIiwiYWZ0ZXJSZWZyZXNoRGltZW5zaW9ucyIsImJlZm9yZVJlZnJlc2hEaW1lbnNpb25zIiwiYmVmb3JlQ29sdW1uQ29sbGFwc2UiLCJhZnRlckNvbHVtbkNvbGxhcHNlIiwiYmVmb3JlQ29sdW1uRXhwYW5kIiwiYWZ0ZXJDb2x1bW5FeHBh''@;'; put 'put ''bmQiLCJtb2RpZnlBdXRvQ29sdW1uU2l6ZVNlZWQiXSxWJD1uZXcgTWFwKFtbIm1vZGlmeVJvdyIsIjguMC4wIl0sWyJtb2RpZnlDb2wiLCI4LjAuMCJdLFsidW5tb2RpZnlSb3ciLCI4LjAuMCJdLFsidW5tb2RpZnlDb2wiLCI4LjAuMCJdLFsic2tpcExlbmd0aENhY2hlIiwiOC4wLjAiXSxb''@;'; put 'put ''ImhpZGRlbkNvbHVtbiIsIjguMC4wIl0sWyJoaWRkZW5Sb3ciLCI4LjAuMCJdXSksQiQ9bmV3IE1hcChbW11dKTtmdW5jdGlvbiBqJChjLGwsYSl7b2ZlKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBvZmUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5p''@;'; put 'put ''dGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIHNmZShjLGwsYSl7cmV0dXJuIGMuc2V0KFpPKGMsbCksYSksYX1mdW5jdGlvbiBaMChjLGwpe3JldHVybiBjLmdldChaTyhjLGwpKX1mdW5jdGlvbiBaTyhjLGwsYSl7aWYoImZ1''@;'; put 'put ''bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9eSgyMzAxMikseSg4MTI2MCk7dmFyIERoPW5ldyBXZWFr''@;'; put 'put ''TWFwLGRfPW5ldyBXZWFrTWFwLHokPW5ldyBXZWFrTWFwLFUkPW5ldyBXZWFrU2V0O2NsYXNzIGxmZXtjb25zdHJ1Y3RvcigpeyhmdW5jdGlvbiBNWGUoYyxsKXtvZmUoYyxsKSxsLmFkZChjKX0pKHRoaXMsVSQpLGokKHRoaXMsRGgsbmV3IE1hcCksaiQodGhpcyxkXyxuZXcgTWFwKSxqJCh0''@;'; put 'put ''aGlzLHokLG5ldyBTZXQpLFo3LmZvckVhY2gobD0+Wk8oVSQsdGhpcyxjZmUpLmNhbGwodGhpcyxsKSl9Z2V0SG9va3MobCl7dmFyIGE7cmV0dXJuIG51bGwhPT0oYT1aMChEaCx0aGlzKS5nZXQobCkpJiZ2b2lkIDAhPT1hP2E6W119YWRkKGwsYSl7bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD4y''@;'; put 'put ''JiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnt9O1owKERoLHRoaXMpLmhhcyhsKXx8KFpPKFUkLHRoaXMsY2ZlKS5jYWxsKHRoaXMsbCksWjcucHVzaChsKSk7Y29uc3QgaD1aMChEaCx0aGlzKS5nZXQobCk7aWYoaC5maW5kKFo9PlouY2FsbGJhY2s9PT1hKSlyZXR1cm47''@;'; put 'put ''Y29uc3QgZj1OdW1iZXIuaXNJbnRlZ2VyKGQub3JkZXJJbmRleCk/ZC5vcmRlckluZGV4OjAsdj0hIWQucnVuT25jZSxNPSEhZC5pbml0aWFsSG9vaztsZXQgRD0hMTtpZihNKXtjb25zdCBaPWguZmluZChyZT0+cmUuaW5pdGlhbEhvb2spO1omJihaLmNhbGxiYWNrPWEsRD0hMCl9aWYoIUQp''@;'; put 'put ''e2gucHVzaCh7Y2FsbGJhY2s6YSxvcmRlckluZGV4OmYscnVuT25jZTp2LGluaXRpYWxIb29rOk0sc2tpcDohMX0pO2xldCBaPVowKHokLHRoaXMpLmhhcyhsKTshWiYmMCE9PWYmJihaPSEwLFowKHokLHRoaXMpLmFkZChsKSksWiYmaC5sZW5ndGg+MSYmWjAoRGgsdGhpcykuc2V0KGwsaC50''@;'; put 'put ''b1NvcnRlZCgocmUsY2UpPT5yZS5vcmRlckluZGV4LWNlLm9yZGVySW5kZXgpKX19aGFzKGwpe3JldHVybiBaMChEaCx0aGlzKS5oYXMobCkmJlowKERoLHRoaXMpLmdldChsKS5sZW5ndGg+MH1yZW1vdmUobCxhKXtpZighWjAoRGgsdGhpcykuaGFzKGwpKXJldHVybiExO2NvbnN0IGQ9WjAo''@;'; put 'put ''RGgsdGhpcykuZ2V0KGwpLGg9ZC5maW5kKGY9PmYuY2FsbGJhY2s9PT1hKTtpZihoKXtsZXQgZj1aMChkXyx0aGlzKS5nZXQobCk7cmV0dXJuIGguc2tpcD0hMCxmKz0xLGY+MTAwJiYoWjAoRGgsdGhpcykuc2V0KGwsZC5maWx0ZXIodj0+IXYuc2tpcCkpLGY9MCksWjAoZF8sdGhpcykuc2V0''@;'; put 'put ''KGwsZiksITB9cmV0dXJuITF9ZGVzdHJveSgpe1owKERoLHRoaXMpLmNsZWFyKCksWjAoZF8sdGhpcykuY2xlYXIoKSxzZmUoRGgsdGhpcyxudWxsKSxzZmUoZF8sdGhpcyxudWxsKX19ZnVuY3Rpb24gY2ZlKGMpe1owKERoLHRoaXMpLnNldChjLFtdKSxaMChkXyx0aGlzKS5zZXQoYywwKX1j''@;'; put 'put ''b25zdCBrWGU9Z2xgVGhlIHBsdWdpbiBob29rICJbaG9va05hbWVdIiB3YXMgcmVtb3ZlZCBpbiBIYW5kc29udGFibGUgW3JlbW92ZWRJblZlcnNpb25dLlx4MjAKICBQbGVhc2UgY29uc3VsdCByZWxlYXNlIG5vdGVzIGh0dHBzOi8vZ2l0aHViLmNvbS9oYW5kc29udGFibGUvaGFuZHNvbnRh''@;'; put 'put ''YmxlL3JlbGVhc2VzL3RhZy9bcmVtb3ZlZEluVmVyc2lvbl0gdG9ceDIwCiAgbGVhcm4gYWJvdXQgdGhlIG1pZ3JhdGlvbiBwYXRoLmA7Y2xhc3MgU2F7Y29uc3RydWN0b3IoKXshZnVuY3Rpb24gRVhlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBUWGUoYyl7dmFyIGw9ZnVuY3Rpb24gQVhl''@;'; put 'put ''KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigi''@;'; put 'put ''QEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGws''@;'; put 'put ''e3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY30odGhpcywiZ2xvYmFsQnVja2V0IixuZXcgbGZlKX1zdGF0aWMgZ2V0U2luZ2xldG9uKCl7cmV0dXJuIGZ1bmN0aW9uIElYZSgpe3JldHVybiBEWGV9KCl9Z2V0QnVja2V0KCl7bGV0''@;'; put 'put ''IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOm51bGw7cmV0dXJuIGw/KGwucGx1Z2luSG9va0J1Y2tldHx8KGwucGx1Z2luSG9va0J1Y2tldD1uZXcgbGZlKSxsLnBsdWdpbkhvb2tCdWNrZXQpOnRoaXMuZ2xvYmFsQnVja2V0fWFkZChs''@;'; put 'put ''LGEpe2xldCBkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpudWxsLGg9YXJndW1lbnRzLmxlbmd0aD4zP2FyZ3VtZW50c1szXTp2b2lkIDA7cmV0dXJuIEFycmF5LmlzQXJyYXkoYSk/WW4oYSxmPT50aGlzLmFkZChsLGYsZCkpOihWJC5o''@;'; put 'put ''YXMobCkmJmlsKHAkKGtYZSx7aG9va05hbWU6bCxyZW1vdmVkSW5WZXJzaW9uOlYkLmdldChsKX0pKSxCJC5oYXMobCkmJmlsKEIkLmdldChsKSksdGhpcy5nZXRCdWNrZXQoZCkuYWRkKGwsYSx7b3JkZXJJbmRleDpoLHJ1bk9uY2U6ITF9KSksdGhpc31vbmNlKGwsYSl7bGV0IGQ9YXJndW1l''@;'; put 'put ''bnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOm51bGwsaD1hcmd1bWVudHMubGVuZ3RoPjM/YXJndW1lbnRzWzNdOnZvaWQgMDtyZXR1cm4gQXJyYXkuaXNBcnJheShhKT9ZbihhLGY9PnRoaXMub25jZShsLGYsZCkpOnRoaXMuZ2V0QnVja2V0KGQpLmFk''@;'; put 'put ''ZChsLGEse29yZGVySW5kZXg6aCxydW5PbmNlOiEwfSksdGhpc31hZGRBc0ZpeGVkKGwsYSl7bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOm51bGw7cmV0dXJuIEFycmF5LmlzQXJyYXkoYSk/WW4oYSxoPT50aGlzLmFkZEFzRml4''@;'; put 'put ''ZWQobCxoLGQpKTp0aGlzLmdldEJ1Y2tldChkKS5hZGQobCxhLHtpbml0aWFsSG9vazohMH0pLHRoaXN9cmVtb3ZlKGwsYSl7cmV0dXJuIHRoaXMuZ2V0QnVja2V0KGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpudWxsKS5yZW1vdmUobCxh''@;'; put 'put ''KX1oYXMobCl7cmV0dXJuIHRoaXMuZ2V0QnVja2V0KGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpudWxsKS5oYXMobCl9cnVuKGwsYSxkLGgsZix2LE0sRCl7e2NvbnN0IFo9dGhpcy5nZXRCdWNrZXQoKS5nZXRIb29rcyhhKSxyZT1aP1ou''@;'; put 'put ''bGVuZ3RoOjA7bGV0IGNlPTA7aWYocmUpZm9yKDtjZTxyZTspe2lmKCFaW2NlXXx8WltjZV0uc2tpcCl7Y2UrPTE7Y29udGludWV9Y29uc3QgYmU9SE8oWltjZV0uY2FsbGJhY2ssbCxkLGgsZix2LE0sRCk7dm9pZCAwIT09YmUmJihkPWJlKSxaW2NlXSYmWltjZV0ucnVuT25jZSYmdGhpcy5y''@;'; put 'put ''ZW1vdmUoYSxaW2NlXS5jYWxsYmFjayksY2UrPTF9fXtjb25zdCBaPXRoaXMuZ2V0QnVja2V0KGwpLmdldEhvb2tzKGEpLHJlPVo/Wi5sZW5ndGg6MDtsZXQgY2U9MDtpZihyZSlmb3IoO2NlPHJlOyl7aWYoIVpbY2VdfHxaW2NlXS5za2lwKXtjZSs9MTtjb250aW51ZX1jb25zdCBiZT1ITyha''@;'; put 'put ''W2NlXS5jYWxsYmFjayxsLGQsaCxmLHYsTSxEKTt2b2lkIDAhPT1iZSYmKGQ9YmUpLFpbY2VdJiZaW2NlXS5ydW5PbmNlJiZ0aGlzLnJlbW92ZShhLFpbY2VdLmNhbGxiYWNrLGwpLGNlKz0xfX1yZXR1cm4gZH1kZXN0cm95KCl7dGhpcy5nZXRCdWNrZXQoYXJndW1lbnRzLmxlbmd0aD4wJiZ2''@;'; put 'put ''b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOm51bGwpLmRlc3Ryb3koKX1yZWdpc3RlcihsKXt0aGlzLmlzUmVnaXN0ZXJlZChsKXx8WjcucHVzaChsKX1kZXJlZ2lzdGVyKGwpe3RoaXMuaXNSZWdpc3RlcmVkKGwpJiZaNy5zcGxpY2UoWjcuaW5kZXhPZihsKSwxKX1pc0RlcHJl''@;'; put 'put ''Y2F0ZWQobCl7cmV0dXJuIEIkLmhhcyhsKXx8ViQuaGFzKGwpfWlzUmVnaXN0ZXJlZChsKXtyZXR1cm4gWjcuaW5kZXhPZihsKT49MH1nZXRSZWdpc3RlcmVkKCl7cmV0dXJuIFo3fX1jb25zdCBEWGU9bmV3IFNhLFokPW5ldyBNYXA7ZnVuY3Rpb24gcjMoKXtsZXQgYz1hcmd1bWVudHMubGVu''@;'; put 'put ''Z3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06ImNvbW1vbiI7WiQuaGFzKGMpfHxaJC5zZXQoYyxuZXcgTWFwKTtjb25zdCBsPVokLmdldChjKTtyZXR1cm57cmVnaXN0ZXI6ZnVuY3Rpb24gYShNLEQpe2wuc2V0KE0sRCl9LGdldEl0ZW06ZnVuY3Rpb24gZChNKXty''@;'; put 'put ''ZXR1cm4gbC5nZXQoTSl9LGhhc0l0ZW06ZnVuY3Rpb24gaChNKXtyZXR1cm4gbC5oYXMoTSl9LGdldE5hbWVzOmZ1bmN0aW9uIGYoKXtyZXR1cm5bLi4ubC5rZXlzKCldfSxnZXRWYWx1ZXM6ZnVuY3Rpb24gdigpe3JldHVyblsuLi5sLnZhbHVlcygpXX19fWNvbnN0IFckPW5ldyBXZWFrTWFw''@;'; put 'put ''LHtyZWdpc3RlcjpSWGUsZ2V0SXRlbTp1ZmUsaGFzSXRlbTpkZmUsZ2V0TmFtZXM6TFhlfT1yMygiZWRpdG9ycyIpO2Z1bmN0aW9uIE9YZShjKXtjb25zdCBsPXt9LGE9Yzt0aGlzLmdldENvbnN0cnVjdG9yPWZ1bmN0aW9uKCl7cmV0dXJuIGN9LHRoaXMuZ2V0SW5zdGFuY2U9ZnVuY3Rpb24o''@;'; put 'put ''ZCl7cmV0dXJuIGQuZ3VpZCBpbiBsfHwobFtkLmd1aWRdPW5ldyBhKGQpKSxsW2QuZ3VpZF19LFNhLmdldFNpbmdsZXRvbigpLmFkZCgiYWZ0ZXJEZXN0cm95IixmdW5jdGlvbigpe2xbdGhpcy5ndWlkXT1udWxsfSl9ZnVuY3Rpb24gaGZlKGMsbCl7bGV0IGE7aWYoImZ1bmN0aW9uIj09dHlw''@;'; put 'put ''ZW9mIGMpVyQuZ2V0KGMpfHxIZChudWxsLGMpLGE9VyQuZ2V0KGMpO2Vsc2V7aWYoInN0cmluZyIhPXR5cGVvZiBjKXRocm93IEVycm9yKCdPbmx5IHN0cmluZ3MgYW5kIGZ1bmN0aW9ucyBjYW4gYmUgcGFzc2VkIGFzICJlZGl0b3IiIHBhcmFtZXRlcicpO2E9dWZlKGMpfWlmKCFhKXRocm93''@;'; put 'put ''IEVycm9yKGBObyBlZGl0b3IgcmVnaXN0ZXJlZCB1bmRlciBuYW1lICIke2N9ImApO3JldHVybiBhLmdldEluc3RhbmNlKGwpfWZ1bmN0aW9uIFdPKGMpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjKXJldHVybiBjO2lmKCFkZmUoYykpdGhyb3cgRXJyb3IoYE5vIHJlZ2lzdGVyZWQgZWRpdG9y''@;'; put 'put ''IGZvdW5kIHVuZGVyICIke2N9IiBuYW1lYCk7cmV0dXJuIHVmZShjKS5nZXRDb25zdHJ1Y3RvcigpfWZ1bmN0aW9uIEhkKGMsbCl7YyYmInN0cmluZyIhPXR5cGVvZiBjJiYoYz0obD1jKS5FRElUT1JfVFlQRSk7Y29uc3QgYT1uZXcgT1hlKGwpOyJzdHJpbmciPT10eXBlb2YgYyYmUlhlKGMs''@;'; put 'put ''YSksVyQuc2V0KGwsYSl9bGV0IFlPPTA7Y29uc3QgajI9Y2xhc3MgTlhle2NvbnN0cnVjdG9yKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOm51bGw7KGZ1bmN0aW9uIFBYZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gRlhl''@;'; put 'put ''KGMpe3ZhciBsPWZ1bmN0aW9uIEhYZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBk''@;'; put 'put ''O3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmpl''@;'; put 'put ''Y3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9KSh0aGlzLCJjb250ZXh0Iix2b2lkIDApLHRoaXMuY29udGV4dD1sfHx0aGlzLHRoaXMuY29udGV4dC5ldmVudExpc3RlbmVyc3x8KHRoaXMu''@;'; put 'put ''Y29udGV4dC5ldmVudExpc3RlbmVycz1bXSl9YWRkRXZlbnRMaXN0ZW5lcihsLGEsZCl7bGV0IGg9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10mJmFyZ3VtZW50c1szXTtmdW5jdGlvbiBmKHYpe2QuY2FsbCh0aGlzLGZ1bmN0aW9uIFZYZShjKXtjb25zdCBsPWMu''@;'; put 'put ''c3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uO3JldHVybiBjLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbj1mdW5jdGlvbigpe2wuYXBwbHkodGhpcyksQjIodGhpcyl9LGN9KHYpKX1yZXR1cm4gdGhpcy5jb250ZXh0LmV2ZW50TGlzdGVuZXJzLnB1c2goe2VsZW1lbnQ6bCxldmVudDphLGNhbGxi''@;'; put 'put ''YWNrOmQsY2FsbGJhY2tQcm94eTpmLG9wdGlvbnM6aCxldmVudE1hbmFnZXI6dGhpc30pLGwuYWRkRXZlbnRMaXN0ZW5lcihhLGYsaCksWU8rPTEsKCk9Pnt0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIobCxhLGQpfX1yZW1vdmVFdmVudExpc3RlbmVyKGwsYSxkKXtsZXQgdixoPWFyZ3VtZW50''@;'; put 'put ''cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdJiZhcmd1bWVudHNbM10sZj10aGlzLmNvbnRleHQuZXZlbnRMaXN0ZW5lcnMubGVuZ3RoO2Zvcig7ZjspaWYoZi09MSx2PXRoaXMuY29udGV4dC5ldmVudExpc3RlbmVyc1tmXSx2LmV2ZW50PT09YSYmdi5lbGVtZW50PT09bCl7aWYo''@;'; put 'put ''ZCYmZCE9PXYuY2FsbGJhY2t8fGgmJnYuZXZlbnRNYW5hZ2VyIT09dGhpcyljb250aW51ZTt0aGlzLmNvbnRleHQuZXZlbnRMaXN0ZW5lcnMuc3BsaWNlKGYsMSksdi5lbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodi5ldmVudCx2LmNhbGxiYWNrUHJveHksdi5vcHRpb25zKSxZTy09MX19''@;'; put 'put ''Y2xlYXJFdmVudHMoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdO2lmKCF0aGlzLmNvbnRleHQpcmV0dXJuO2xldCBhPXRoaXMuY29udGV4dC5ldmVudExpc3RlbmVycy5sZW5ndGg7Zm9yKDthOyl7YS09MTtjb25zdCBkPXRo''@;'; put 'put ''aXMuY29udGV4dC5ldmVudExpc3RlbmVyc1thXTtsJiZkLmV2ZW50TWFuYWdlciE9PXRoaXN8fCh0aGlzLmNvbnRleHQuZXZlbnRMaXN0ZW5lcnMuc3BsaWNlKGEsMSksZC5lbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoZC5ldmVudCxkLmNhbGxiYWNrUHJveHksZC5vcHRpb25zKSxZTy09''@;'; put 'put ''MSl9fWNsZWFyKCl7dGhpcy5jbGVhckV2ZW50cygpfWRlc3Ryb3koKXt0aGlzLmNsZWFyRXZlbnRzKCksdGhpcy5jb250ZXh0PW51bGx9ZGVzdHJveVdpdGhPd25FdmVudHNPbmx5KCl7dGhpcy5jbGVhckV2ZW50cyghMCksdGhpcy5jb250ZXh0PW51bGx9ZmlyZUV2ZW50KGwsYSl7bGV0IGQ9''@;'; put 'put ''bC5kb2N1bWVudCxoPWw7ZHx8KGQ9bC5vd25lckRvY3VtZW50P2wub3duZXJEb2N1bWVudDpsLGg9ZC5kZWZhdWx0Vmlldyk7Y29uc3QgZj17YnViYmxlczohMCxjYW5jZWxhYmxlOiJtb3VzZW1vdmUiIT09YSx2aWV3OmgsZGV0YWlsOjAsc2NyZWVuWDowLHNjcmVlblk6MCxjbGllbnRYOjEs''@;'; put 'put ''Y2xpZW50WToxLGN0cmxLZXk6ITEsYWx0S2V5OiExLHNoaWZ0S2V5OiExLG1ldGFLZXk6ITEsYnV0dG9uOjAscmVsYXRlZFRhcmdldDp2b2lkIDB9O2xldCB2O2QuY3JlYXRlRXZlbnQ/KHY9ZC5jcmVhdGVFdmVudCgiTW91c2VFdmVudHMiKSx2LmluaXRNb3VzZUV2ZW50KGEsZi5idWJibGVz''@;'; put 'put ''LGYuY2FuY2VsYWJsZSxmLnZpZXcsZi5kZXRhaWwsZi5zY3JlZW5YLGYuc2NyZWVuWSxmLmNsaWVudFgsZi5jbGllbnRZLGYuY3RybEtleSxmLmFsdEtleSxmLnNoaWZ0S2V5LGYubWV0YUtleSxmLmJ1dHRvbixmLnJlbGF0ZWRUYXJnZXR8fGQuYm9keS5wYXJlbnROb2RlKSk6dj1kLmNyZWF0''@;'; put 'put ''ZUV2ZW50T2JqZWN0KCksbC5kaXNwYXRjaEV2ZW50P2wuZGlzcGF0Y2hFdmVudCh2KTpsLmZpcmVFdmVudChgb24ke2F9YCx2KX19O2Z1bmN0aW9uIFc3KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBVWGUoYyl7dmFyIGw9ZnVuY3Rpb24gWlhlKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBj''@;'; put 'put ''fHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBh''@;'; put 'put ''IHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25m''@;'; put 'put ''aWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBZJChjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5v''@;'; put 'put ''dCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIEdPPW5ldyBXZWFrU2V0O2NsYXNzIEcke2NvbnN0cnVjdG9yKGwsYSxkKXsoZnVuY3Rpb24galhlKGMsbCl7KGZ1bmN0aW9uIHpYZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRo''@;'; put 'put ''ZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuYWRkKGMpfSkodGhpcyxHTyksVzcodGhpcywiaG90Iix2b2lkIDApLFc3KHRoaXMsInRhYmxlTWV0YSIsdm9pZCAwKSxXNyh0aGlzLCJzZWxlY3Rpb24iLHZvaWQgMCksVzcodGhpcywiZXZlbnRN''@;'; put 'put ''YW5hZ2VyIix2b2lkIDApLFc3KHRoaXMsImRlc3Ryb3llZCIsITEpLFc3KHRoaXMsImFjdGl2ZUVkaXRvciIsdm9pZCAwKSxXNyh0aGlzLCJjZWxsUHJvcGVydGllcyIsdm9pZCAwKSx0aGlzLmhvdD1sLHRoaXMudGFibGVNZXRhPWEsdGhpcy5zZWxlY3Rpb249ZCx0aGlzLmV2ZW50TWFuYWdl''@;'; put 'put ''cj1uZXcgajIobCksdGhpcy5ob3QuYWRkSG9vaygiYWZ0ZXJEb2N1bWVudEtleURvd24iLGg9PlkkKEdPLHRoaXMsZmZlKS5jYWxsKHRoaXMsaCkpLHRoaXMuaG90LmFkZEhvb2soImJlZm9yZUNvbXBvc2l0aW9uU3RhcnQiLGg9PlkkKEdPLHRoaXMsZmZlKS5jYWxsKHRoaXMsaCkpLHRoaXMu''@;'; put 'put ''aG90LnZpZXcuX3d0LnVwZGF0ZSgib25DZWxsRGJsQ2xpY2siLChoLGYsdik9PlkkKEdPLHRoaXMsV1hlKS5jYWxsKHRoaXMsaCxmLHYpKX1nZXRBY3RpdmVFZGl0b3IoKXtyZXR1cm4gdGhpcy5hY3RpdmVFZGl0b3J9cHJlcGFyZUVkaXRvcigpe3ZhciBsO2lmKHRoaXMuYWN0aXZlRWRpdG9y''@;'; put 'put ''JiZ0aGlzLmFjdGl2ZUVkaXRvci5pc1dhaXRpbmcoKSlyZXR1cm4gdm9pZCB0aGlzLmNsb3NlRWRpdG9yKCExLCExLFo9PntaJiZ0aGlzLnByZXBhcmVFZGl0b3IoKX0pO2NvbnN0IGE9bnVsbD09PShsPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkpfHx2b2lkIDA9PT1sP3ZvaWQg''@;'; put 'put ''MDpsLmhpZ2hsaWdodDtpZighYXx8YS5pc0hlYWRlcigpKXJldHVybjtjb25zdHtyb3c6ZCxjb2w6aH09YSxmPXRoaXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlHZXRDZWxsQ29vcmRzIixkLGgsITEsIm1ldGEiKTtsZXQgdj1kLE09aDtpZihBcnJheS5pc0FycmF5KGYpJiYoW3YsTV09ZiksdGhp''@;'; put 'put ''cy5jZWxsUHJvcGVydGllcz10aGlzLmhvdC5nZXRDZWxsTWV0YSh2LE0pLCF0aGlzLmlzQ2VsbEVkaXRhYmxlKCkpcmV0dXJuIHZvaWQgdGhpcy5jbGVhckFjdGl2ZUVkaXRvcigpO2NvbnN0IEQ9dGhpcy5ob3QuZ2V0Q2VsbChkLGgsITApO2lmKEQpe2NvbnN0IFo9dGhpcy5ob3QuZ2V0Q2Vs''@;'; put 'put ''bEVkaXRvcih0aGlzLmNlbGxQcm9wZXJ0aWVzKSxyZT10aGlzLmhvdC5jb2xUb1Byb3AoTSksY2U9dGhpcy5ob3QuZ2V0U291cmNlRGF0YUF0Q2VsbCh0aGlzLmhvdC50b1BoeXNpY2FsUm93KHYpLE0pO3RoaXMuYWN0aXZlRWRpdG9yPWhmZShaLHRoaXMuaG90KSx0aGlzLmFjdGl2ZUVkaXRv''@;'; put 'put ''ci5wcmVwYXJlKGQsaCxyZSxELGNlLHRoaXMuY2VsbFByb3BlcnRpZXMpfX1pc0VkaXRvck9wZW5lZCgpe3JldHVybiB0aGlzLmFjdGl2ZUVkaXRvciYmdGhpcy5hY3RpdmVFZGl0b3IuaXNPcGVuZWQoKX1vcGVuRWRpdG9yKGwsYSl7bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAh''@;'; put 'put ''PT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXTtpZighdGhpcy5pc0NlbGxFZGl0YWJsZSgpKXJldHVybiB2b2lkIHRoaXMuY2xlYXJBY3RpdmVFZGl0b3IoKTtjb25zdCBoPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7bGV0IGY9dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUJl''@;'; put 'put ''Z2luRWRpdGluZyIsaC5oaWdobGlnaHQucm93LGguaGlnaGxpZ2h0LmNvbCxsLGEsZCk7YSBpbnN0YW5jZW9mIE1vdXNlRXZlbnQmJiJib29sZWFuIiE9dHlwZW9mIGYmJihmPTA9PT10aGlzLmhvdC5zZWxlY3Rpb24uZ2V0TGF5ZXJMZXZlbCgpJiZoLmlzU2luZ2xlKCkpLCExIT09Zj8odGhp''@;'; put 'put ''cy5hY3RpdmVFZGl0b3J8fCh0aGlzLmhvdC5zY3JvbGxUb0ZvY3VzZWRDZWxsKCksdGhpcy5wcmVwYXJlRWRpdG9yKCkpLHRoaXMuYWN0aXZlRWRpdG9yJiYoZCYmdGhpcy5hY3RpdmVFZGl0b3IuZW5hYmxlRnVsbEVkaXRNb2RlKCksdGhpcy5hY3RpdmVFZGl0b3IuYmVnaW5FZGl0aW5nKGws''@;'; put 'put ''YSkpKTp0aGlzLmNsZWFyQWN0aXZlRWRpdG9yKCl9Y2xvc2VFZGl0b3IobCxhLGQpe3RoaXMuYWN0aXZlRWRpdG9yP3RoaXMuYWN0aXZlRWRpdG9yLmZpbmlzaEVkaXRpbmcobCxhLGQpOmQmJmQoITEpfWNsb3NlRWRpdG9yQW5kU2F2ZUNoYW5nZXMobCl7dGhpcy5jbG9zZUVkaXRvcighMSxs''@;'; put 'put ''KX1jbG9zZUVkaXRvckFuZFJlc3RvcmVPcmlnaW5hbFZhbHVlKGwpe3RoaXMuY2xvc2VFZGl0b3IoITAsbCl9Y2xlYXJBY3RpdmVFZGl0b3IoKXt0aGlzLmFjdGl2ZUVkaXRvcj12b2lkIDB9aXNDZWxsRWRpdGFibGUoKXtjb25zdCBsPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7''@;'; put 'put ''aWYoIWwpcmV0dXJuITE7Y29uc3QgYT10aGlzLmhvdC5nZXRDZWxsRWRpdG9yKHRoaXMuY2VsbFByb3BlcnRpZXMpLHtyb3c6ZCxjb2w6aH09bC5oaWdobGlnaHQse3Jvd0luZGV4TWFwcGVyOmYsY29sdW1uSW5kZXhNYXBwZXI6dn09dGhpcy5ob3QsTT1mLmlzSGlkZGVuKHRoaXMuaG90LnRv''@;'; put 'put ''UGh5c2ljYWxSb3coZCkpfHx2LmlzSGlkZGVuKHRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4oaCkpO3JldHVybiEodGhpcy5jZWxsUHJvcGVydGllcy5yZWFkT25seXx8IWF8fE0pfW1vdmVTZWxlY3Rpb25BZnRlckVudGVyKGwpe2NvbnN0IGE9ey4uLiJmdW5jdGlvbiI9PXR5cGVvZiB0aGlz''@;'; put 'put ''LnRhYmxlTWV0YS5lbnRlck1vdmVzP3RoaXMudGFibGVNZXRhLmVudGVyTW92ZXMobCk6dGhpcy50YWJsZU1ldGEuZW50ZXJNb3Zlc307bC5zaGlmdEtleSYmKGEucm93PS1hLnJvdyxhLmNvbD0tYS5jb2wpLHRoaXMuaG90LnNlbGVjdGlvbi5pc011bHRpcGxlKCk/dGhpcy5zZWxlY3Rpb24u''@;'; put 'put ''dHJhbnNmb3JtRm9jdXMoYS5yb3csYS5jb2wpOnRoaXMuc2VsZWN0aW9uLnRyYW5zZm9ybVN0YXJ0KGEucm93LGEuY29sLCEwKX1kZXN0cm95KCl7dGhpcy5kZXN0cm95ZWQ9ITAsdGhpcy5ldmVudE1hbmFnZXIuZGVzdHJveSgpfX1mdW5jdGlvbiBmZmUoYyl7Y29uc3QgbD10aGlzLmhvdC5n''@;'; put 'put ''ZXRTZWxlY3RlZFJhbmdlTGFzdCgpO2lmKCF0aGlzLmhvdC5pc0xpc3RlbmluZygpfHwhbHx8bC5oaWdobGlnaHQuaXNIZWFkZXIoKXx8Rm0oYykpcmV0dXJuO2NvbnN0e2tleUNvZGU6YX09YyxkPShjLmN0cmxLZXl8fGMubWV0YUtleSkmJiFjLmFsdEtleTsoIXRoaXMuYWN0aXZlRWRpdG9y''@;'; put 'put ''fHx0aGlzLmFjdGl2ZUVkaXRvciYmIXRoaXMuYWN0aXZlRWRpdG9yLmlzV2FpdGluZygpKSYmIUgkKGEpJiYhcmZlKGEpJiYhZCYmIXRoaXMuaXNFZGl0b3JPcGVuZWQoKSYmdGhpcy5vcGVuRWRpdG9yKCIiLGMpfWZ1bmN0aW9uIFdYZShjLGwpe2wuaXNDZWxsKCkmJnRoaXMub3BlbkVkaXRv''@;'; put 'put ''cihudWxsLGMsITApfWNvbnN0IHBmZT1uZXcgV2Vha01hcDtHJC5nZXRJbnN0YW5jZT1mdW5jdGlvbihjLGwsYSl7bGV0IGQ9cGZlLmdldChjKTtyZXR1cm4gZHx8KGQ9bmV3IEckKGMsbCxhKSxwZmUuc2V0KGMsZCkpLGR9O2NvbnN0IFlYZT1HJDtmdW5jdGlvbiBrRShjLGwsYSl7Z2ZlKGMs''@;'; put 'put ''bCksbC5zZXQoYyxhKX1mdW5jdGlvbiBnZmUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIGNjKGMsbCl7cmV0dXJuIGMuZ2V0KHlnKGMs''@;'; put 'put ''bCkpfWZ1bmN0aW9uIERFKGMsbCxhKXtyZXR1cm4gYy5zZXQoeWcoYyxsKSxhKSxhfWZ1bmN0aW9uIHlnKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRl''@;'; put 'put ''IGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1jb25zdCBoXz1PYmplY3QuZnJlZXplKHtDRUxMOiJjZWxsIixNSVhFRDoibWl4ZWQifSk7dmFyIFh1PW5ldyBXZWFrTWFwLCRPPW5ldyBXZWFrTWFwLEtPPW5ldyBXZWFrTWFwLHFPPW5ldyBXZWFrTWFwLFhPPW5ldyBX''@;'; put 'put ''ZWFrTWFwLE5tPW5ldyBXZWFrU2V0O2NsYXNzICRYZXtjb25zdHJ1Y3RvcihsKXt2YXIgYT10aGlzOyhmdW5jdGlvbiBHWGUoYyxsKXtnZmUoYyxsKSxsLmFkZChjKX0pKHRoaXMsTm0pLGtFKHRoaXMsWHUsdm9pZCAwKSxrRSh0aGlzLCRPLHZvaWQgMCksa0UodGhpcyxLTywxKSxrRSh0aGlz''@;'; put 'put ''LHFPLG51bGwpLGtFKHRoaXMsWE8sbmV3IE1hcCk7Y29uc3QgZD1sLmdldFNldHRpbmdzKCk7REUoWHUsdGhpcyxsKSxERSgkTyx0aGlzLGQuaW1lRmFzdEVkaXQ/aF8uTUlYRUQ6aF8uQ0VMTCksY2MoWHUsdGhpcykuYWRkSG9vaygiYWZ0ZXJVcGRhdGVTZXR0aW5ncyIsZnVuY3Rpb24oKXtm''@;'; put 'put ''b3IodmFyIGg9YXJndW1lbnRzLmxlbmd0aCxmPW5ldyBBcnJheShoKSx2PTA7djxoO3YrKylmW3ZdPWFyZ3VtZW50c1t2XTtyZXR1cm4geWcoTm0sYSxxWGUpLmNhbGwoYSwuLi5mKX0pLGNjKFh1LHRoaXMpLmFkZEhvb2soImFmdGVyU2VsZWN0aW9uIixmdW5jdGlvbigpe2Zvcih2YXIgaD1h''@;'; put 'put ''cmd1bWVudHMubGVuZ3RoLGY9bmV3IEFycmF5KGgpLHY9MDt2PGg7disrKWZbdl09YXJndW1lbnRzW3ZdO3JldHVybiB5ZyhObSxhLG1mZSkuY2FsbChhLC4uLmYpfSksY2MoWHUsdGhpcykuYWRkSG9vaygiYWZ0ZXJTZWxlY3Rpb25Gb2N1c1NldCIsZnVuY3Rpb24oKXtmb3IodmFyIGg9YXJn''@;'; put 'put ''dW1lbnRzLmxlbmd0aCxmPW5ldyBBcnJheShoKSx2PTA7djxoO3YrKylmW3ZdPWFyZ3VtZW50c1t2XTtyZXR1cm4geWcoTm0sYSxtZmUpLmNhbGwoYSwuLi5mKX0pLGNjKFh1LHRoaXMpLmFkZEhvb2soImFmdGVyU2VsZWN0aW9uRW5kIixmdW5jdGlvbigpe2Zvcih2YXIgaD1hcmd1bWVudHMu''@;'; put 'put ''bGVuZ3RoLGY9bmV3IEFycmF5KGgpLHY9MDt2PGg7disrKWZbdl09YXJndW1lbnRzW3ZdO3JldHVybiB5ZyhObSxhLEtYZSkuY2FsbChhLC4uLmYpfSl9Z2V0Rm9jdXNNb2RlKCl7cmV0dXJuIGNjKCRPLHRoaXMpfXNldEZvY3VzTW9kZShsKXtPYmplY3QudmFsdWVzKGhfKS5pbmNsdWRlcyhs''@;'; put 'put ''KT9ERSgkTyx0aGlzLGwpOmlsKGAiJHtsfSIgaXMgbm90IGEgdmFsaWQgZm9jdXMgbW9kZS5gKX1nZXRSZWZvY3VzRGVsYXkoKXtyZXR1cm4gY2MoS08sdGhpcyl9c2V0UmVmb2N1c0RlbGF5KGwpe0RFKEtPLHRoaXMsbCl9c2V0UmVmb2N1c0VsZW1lbnRHZXR0ZXIobCl7REUocU8sdGhpcyxs''@;'; put 'put ''KX1nZXRSZWZvY3VzRWxlbWVudCgpe3ZhciBsO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBjYyhxTyx0aGlzKT9jYyhxTyx0aGlzKS5jYWxsKHRoaXMpOm51bGw9PT0obD1jYyhYdSx0aGlzKS5nZXRBY3RpdmVFZGl0b3IoKSl8fHZvaWQgMD09PWw/dm9pZCAwOmwuVEVYVEFSRUF9Zm9jdXNP''@;'; put 'put ''bkhpZ2hsaWdodGVkQ2VsbChsKXtjb25zdCBhPWQ9Pnt2YXIgaCxmO2NvbnN0IHY9bnVsbD09PShoPWNjKFh1LHRoaXMpLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkpfHx2b2lkIDA9PT1oP3ZvaWQgMDpoLmhpZ2hsaWdodDtpZighdilyZXR1cm47bGV0IE09Y2MoWHUsdGhpcykucnVuSG9va3Mo''@;'; put 'put ''Im1vZGlmeUZvY3VzZWRFbGVtZW50Iix2LnJvdyx2LmNvbCxkKTtFcChNKXx8KE09ZCksTSYmKG51bGw9PT0oZj1jYyhYdSx0aGlzKS5nZXRBY3RpdmVFZGl0b3IoKSl8fHZvaWQgMD09PWZ8fCFmLmlzT3BlbmVkKCkpJiZNLmZvY3VzKHtwcmV2ZW50U2Nyb2xsOiEwfSl9O2w/YShsKTp5ZyhO''@;'; put 'put ''bSx0aGlzLCQkKS5jYWxsKHRoaXMsZD0+YShkKSl9cmVmb2N1c1RvRWRpdG9yVGV4dGFyZWEoKXt2YXIgbDtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06Y2MoS08sdGhpcyk7dmFyIGQsaDshY2MoWHUsdGhpcykuZ2V0U2V0dGlu''@;'; put 'put ''Z3MoKS5pbWVGYXN0RWRpdHx8bnVsbCE9PShsPWNjKFh1LHRoaXMpLmdldEFjdGl2ZUVkaXRvcigpKSYmdm9pZCAwIT09bCYmbC5pc09wZW5lZCgpfHwobnVsbD09PShkPWNjKFh1LHRoaXMpLmdldEFjdGl2ZUVkaXRvcigpKXx8dm9pZCAwPT09ZHx8bnVsbD09PShoPWQucmVmcmVzaFZhbHVl''@;'; put 'put ''KXx8dm9pZCAwPT09aHx8aC5jYWxsKGQpLGNjKFhPLHRoaXMpLmhhcyhhKXx8Y2MoWE8sdGhpcykuc2V0KGEsTUUoKCk9Pnt2YXIgZjtjYyhYdSx0aGlzKS5pc0Rlc3Ryb3llZHx8bnVsbD09PShmPXRoaXMuZ2V0UmVmb2N1c0VsZW1lbnQoKSl8fHZvaWQgMD09PWZ8fGYuc2VsZWN0KCl9LGEp''@;'; put 'put ''KSxjYyhYTyx0aGlzKS5nZXQoYSkoKSl9fWZ1bmN0aW9uICQkKGMpe3ZhciBsO2NvbnN0IGE9bnVsbD09PShsPWNjKFh1LHRoaXMpLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkpfHx2b2lkIDA9PT1sP3ZvaWQgMDpsLmhpZ2hsaWdodDtpZighYXx8IWNjKFh1LHRoaXMpLnNlbGVjdGlvbi5pc0Nl''@;'; put 'put ''bGxWaXNpYmxlKGEpKXJldHVybiB2b2lkIGMobnVsbCk7Y29uc3QgZD1jYyhYdSx0aGlzKS5nZXRDZWxsKGEucm93LGEuY29sLCEwKTtudWxsPT09ZD9jYyhYdSx0aGlzKS5hZGRIb29rT25jZSgiYWZ0ZXJTY3JvbGwiLCgpPT57YyhjYyhYdSx0aGlzKS5nZXRDZWxsKGEucm93LGEuY29sLCEw''@;'; put 'put ''KSl9KTpjKGQpfWZ1bmN0aW9uIG1mZSgpe3lnKE5tLHRoaXMsJCQpLmNhbGwodGhpcyxjPT57Y29uc3R7YWN0aXZlRWxlbWVudDpsfT1jYyhYdSx0aGlzKS5yb290RG9jdW1lbnQ7bCYmRk8obCkmJmwuYmx1cigpLHRoaXMuZm9jdXNPbkhpZ2hsaWdodGVkQ2VsbChjKX0pfWZ1bmN0aW9uIEtY''@;'; put 'put ''ZSgpe3lnKE5tLHRoaXMsJCQpLmNhbGwodGhpcyxjPT57dGhpcy5nZXRGb2N1c01vZGUoKT09PWhfLk1JWEVEJiYiVEQiPT09Yz8ubm9kZU5hbWUmJnRoaXMucmVmb2N1c1RvRWRpdG9yVGV4dGFyZWEoKX0pfWZ1bmN0aW9uIHFYZShjKXsiYm9vbGVhbiI9PXR5cGVvZiBjLmltZUZhc3RFZGl0''@;'; put 'put ''JiZ0aGlzLnNldEZvY3VzTW9kZShjLmltZUZhc3RFZGl0P2hfLk1JWEVEOmhfLkNFTEwpfXkoMTYyMjkpLHkoNDQyMTMpO2NvbnN0IHZmZT17IiZuYnNwOyI6IiAiLCImYW1wOyI6IiYiLCImbHQ7IjoiPCIsIiZndDsiOiI+In0sWFhlPW5ldyBSZWdFeHAoT2JqZWN0LmtleXModmZlKS5tYXAo''@;'; put 'put ''Yz0+YCgke2N9KWApLmpvaW4oInwiKSwiZ2kiKTtmdW5jdGlvbiBLJChjKXtjb25zdCBsPWMuaGFzQ29sSGVhZGVycygpLGE9Yy5oYXNSb3dIZWFkZXJzKCksZD1bbD8tMTowLGE/LTE6MCxjLmNvdW50Um93cygpLTEsYy5jb3VudENvbHMoKS0xXSxoPWMuZ2V0RGF0YSguLi5kKSxmPWgubGVu''@;'; put 'put ''Z3RoLHY9Zj4wP2hbMF0ubGVuZ3RoOjAsTT1bIjx0YWJsZT4iLCI8L3RhYmxlPiJdLEQ9bD9bIjx0aGVhZD4iLCI8L3RoZWFkPiJdOltdLFo9WyI8dGJvZHk+IiwiPC90Ym9keT4iXSxyZT1hPzE6MCxjZT1sPzE6MDtmb3IobGV0IGJlPTA7YmU8ZjtiZSs9MSl7Y29uc3QgRWU9bCYmMD09PWJl''@;'; put 'put ''LEJlPVtdO2ZvcihsZXQgcnQ9MDtydDx2O3J0Kz0xKXtjb25zdCBwdD0hRWUmJmEmJjA9PT1ydDtsZXQgZHQ9IiI7aWYoRWUpZHQ9YDx0aD4ke2MuZ2V0Q29sSGVhZGVyKHJ0LXJlKX08L3RoPmA7ZWxzZSBpZihwdClkdD1gPHRoPiR7Yy5nZXRSb3dIZWFkZXIoYmUtY2UpfTwvdGg+YDtlbHNl''@;'; put 'put ''e2NvbnN0IEp0PWhbYmVdW3J0XSx7aGlkZGVuOnZuLHJvd3NwYW46Q24sY29sc3Bhbjp0bn09Yy5nZXRDZWxsTWV0YShiZS1jZSxydC1yZSk7aWYoIXZuKXtjb25zdCBNbj1bXTtpZihDbiYmTW4ucHVzaChgcm93c3Bhbj0iJHtDbn0iYCksdG4mJk1uLnB1c2goYGNvbHNwYW49IiR7dG59ImAp''@;'; put 'put ''LFVjKEp0KSlkdD1gPHRkICR7TW4uam9pbigiICIpfT48L3RkPmA7ZWxzZXtjb25zdCBDcj1KdC50b1N0cmluZygpLnJlcGxhY2UoLzwvZywiJmx0OyIpLnJlcGxhY2UoLz4vZywiJmd0OyIpLnJlcGxhY2UoLyg8YnIoXHMqfFwvKT4oXHJcbnxcbik/fFxyXG58XG4pL2csIjxicj5cclxuIiku''@;'; put 'put ''cmVwbGFjZSgvXHgyMC9naSwiJm5ic3A7IikucmVwbGFjZSgvXHQvZ2ksIiYjOTsiKTtkdD1gPHRkICR7TW4uam9pbigiICIpfT4ke0NyfTwvdGQ+YH19fUJlLnB1c2goZHQpfWNvbnN0IHFlPVsiPHRyPiIsLi4uQmUsIjwvdHI+Il0uam9pbigiIik7RWU/RC5zcGxpY2UoMSwwLHFlKTpaLnNw''@;'; put 'put ''bGljZSgtMSwwLHFlKX1yZXR1cm4gTS5zcGxpY2UoMSwwLEQuam9pbigiIiksWi5qb2luKCIiKSksTS5qb2luKCIiKX1mdW5jdGlvbiBxJChjKXtjb25zdCBsPWMubGVuZ3RoLGE9WyI8dGFibGU+Il07Zm9yKGxldCBkPTA7ZDxsO2QrPTEpe2NvbnN0IGg9Y1tkXSxmPWgubGVuZ3RoLHY9W107''@;'; put 'put ''MD09PWQmJmEucHVzaCgiPHRib2R5PiIpO2ZvcihsZXQgTT0wO008ZjtNKz0xKXtjb25zdCBEPWhbTV0sWj1VYyhEKT8iIjpELnRvU3RyaW5nKCkucmVwbGFjZSgvJi9nLCImYW1wOyIpLnJlcGxhY2UoLzwvZywiJmx0OyIpLnJlcGxhY2UoLz4vZywiJmd0OyIpLnJlcGxhY2UoLyg8YnIoXHMq''@;'; put 'put ''fFwvKT4oXHJcbnxcbik/fFxyXG58XG4pL2csIjxicj5cclxuIikucmVwbGFjZSgvXHgyMHsyLH0vZ2kscmU9PmA8c3BhbiBzdHlsZT0ibXNvLXNwYWNlcnVuOiB5ZXMiPiR7IiZuYnNwOyIucmVwZWF0KHJlLmxlbmd0aC0xKX0gPC9zcGFuPmApLnJlcGxhY2UoL1x0L2dpLCImIzk7Iik7di5w''@;'; put 'put ''dXNoKGA8dGQ+JHtafTwvdGQ+YCl9YS5wdXNoKCI8dHI+IiwuLi52LCI8L3RyPiIpLGQrMT09PWwmJmEucHVzaCgiPC90Ym9keT4iKX1yZXR1cm4gYS5wdXNoKCI8L3RhYmxlPiIpLGEuam9pbigiIil9ZnVuY3Rpb24gYmZlKGMpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09''@;'; put 'put ''YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpkb2N1bWVudDtjb25zdCBhPXt9LGQ9bC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksaD1sLmNyZWF0ZUVsZW1lbnQoImRpdiIpO2QuYXBwZW5kQ2hpbGQoaCk7bGV0IGY9YztpZigic3RyaW5nIj09dHlwZW9mIGYpe2NvbnN0IEp0PWYucmVwbGFj''@;'; put 'put ''ZSgvPHRkXGJbXj5dKj8+KFtcc1xTXSo/KTxcL1xzKnRkPi9nLHZuPT57Y29uc3QgQ249dm4ubWF0Y2goLzx0ZFxiW14+XSo/Pi9nKVswXTtyZXR1cm5gJHtDbn0ke3ZuLnN1YnN0cmluZyhDbi5sZW5ndGgsdm4ubGFzdEluZGV4T2YoIjwiKSkudHJpbSgpLnJlcGxhY2VBbGwoL1xuXHMrL2cs''@;'; put 'put ''IiAiKS5yZXBsYWNlQWxsKC88cC4qPz4vZywiXG4iKS5yZXBsYWNlKCJcbiIsIiIpLnJlcGxhY2VBbGwoLzxcLyguKik+XHMrJC9nbSwiPC8kMT4iKS5yZXBsYWNlKC8oPCg/IWJyKShbXj5dKyk+KS9naSwiIikucmVwbGFjZUFsbCgvXiZuYnNwOyQvZ20sIiIpfTwvdGQ+YH0pO2guaW5zZXJ0''@;'; put 'put ''QWRqYWNlbnRIVE1MKCJhZnRlcmJlZ2luIixgJHtKdH1gKSxmPWgucXVlcnlTZWxlY3RvcigidGFibGUiKX1pZighZnx8IWZ1bmN0aW9uIEpYZShjKXtyZXR1cm4iVEFCTEUiPT09KGMmJmMubm9kZU5hbWV8fCIiKX0oZikpcmV0dXJuO2NvbnN0IHY9aC5xdWVyeVNlbGVjdG9yKCdtZXRhW25h''@;'; put 'put ''bWUkPSJlbmVyYXRvciJdJyksTT1udWxsIT09Zi5xdWVyeVNlbGVjdG9yKCJ0Ym9keSB0aCIpLEQ9Zi5xdWVyeVNlbGVjdG9yKCJ0ciIpLFo9RD9BcnJheS5mcm9tKEQuY2VsbHMpLnJlZHVjZSgoSnQsdm4pPT5KdCt2bi5jb2xTcGFuLDApLShNPzE6MCk6MCxyZT1mLnRGb290JiZBcnJheS5m''@;'; put 'put ''cm9tKGYudEZvb3Qucm93cyl8fFtdLGNlPVtdO2xldCBiZT0hMSxFZT0wLEJlPTA7aWYoZi50SGVhZCl7Y29uc3QgSnQ9QXJyYXkuZnJvbShmLnRIZWFkLnJvd3MpLmZpbHRlcih2bj0+e2NvbnN0IENuPW51bGwhPT12bi5xdWVyeVNlbGVjdG9yKCJ0ZCIpO3JldHVybiBDbiYmY2UucHVzaCh2''@;'; put 'put ''biksIUNufSk7RWU9SnQubGVuZ3RoLGJlPUVlPjAsRWU+MT9hLm5lc3RlZEhlYWRlcnM9QXJyYXkuZnJvbShKdCkucmVkdWNlKCh2bixDbik9Pntjb25zdCB0bj1BcnJheS5mcm9tKENuLmNlbGxzKS5yZWR1Y2UoKE1uLENyLEdyKT0+e2lmKE0mJjA9PT1HcilyZXR1cm4gTW47Y29uc3R7Y29s''@;'; put 'put ''U3Bhbjptcixpbm5lckhUTUw6R259PUNyO3JldHVybiBNbi5wdXNoKG1yPjE/e2xhYmVsOkduLGNvbHNwYW46bXJ9OkduKSxNbn0sW10pO3JldHVybiB2bi5wdXNoKHRuKSx2bn0sW10pOmJlJiYoYS5jb2xIZWFkZXJzPUFycmF5LmZyb20oSnRbMF0uY2hpbGRyZW4pLnJlZHVjZSgodm4sQ24s''@;'; put 'put ''dG4pPT4oTSYmMD09PXRufHx2bi5wdXNoKENuLmlubmVySFRNTCksdm4pLFtdKSl9Y2UubGVuZ3RoJiYoYS5maXhlZFJvd3NUb3A9Y2UubGVuZ3RoKSxyZS5sZW5ndGgmJihhLmZpeGVkUm93c0JvdHRvbT1yZS5sZW5ndGgpO2NvbnN0IHFlPVsuLi5jZSwuLi5BcnJheS5mcm9tKGYudEJvZGll''@;'; put 'put ''cykucmVkdWNlKChKdCx2bik9PihKdC5wdXNoKC4uLkFycmF5LmZyb20odm4ucm93cykpLEp0KSxbXSksLi4ucmVdO0JlPXFlLmxlbmd0aDtjb25zdCBydD1uZXcgQXJyYXkoQmUpO2ZvcihsZXQgSnQ9MDtKdDxCZTtKdCsrKXJ0W0p0XT1uZXcgQXJyYXkoWik7Y29uc3QgcHQ9W10sZHQ9W107''@;'; put 'put ''Zm9yKGxldCBKdD0wO0p0PEJlO0p0Kyspe2NvbnN0IENuPUFycmF5LmZyb20ocWVbSnRdLmNlbGxzKSx0bj1Dbi5sZW5ndGg7Zm9yKGxldCBNbj0wO01uPHRuO01uKyspe2NvbnN0IENyPUNuW01uXSx7bm9kZU5hbWU6R3IsaW5uZXJIVE1MOm1yLHJvd1NwYW46R24sY29sU3BhbjphaX09Q3Is''@;'; put 'put ''X2k9cnRbSnRdLmZpbmRJbmRleChPbj0+dm9pZCAwPT09T24pO2lmKCJURCI9PT1Hcil7aWYoR24+MXx8YWk+MSl7Zm9yKGxldCBEcj1KdDtEcjxKdCtHbjtEcisrKWlmKERyPEJlKWZvcihsZXQgJHI9X2k7JHI8X2krYWk7JHIrKylydFtEcl1bJHJdPW51bGw7Y29uc3QgenI9Q3IuZ2V0QXR0''@;'; put 'put ''cmlidXRlKCJzdHlsZSIpO3pyJiZ6ci5pbmNsdWRlcygibXNvLWlnbm9yZTpjb2xzcGFuIil8fHB0LnB1c2goe2NvbDpfaSxyb3c6SnQscm93c3BhbjpHbixjb2xzcGFuOmFpfSl9bGV0IE9uPSIiO09uPXYmJi9leGNlbC9naS50ZXN0KHYuY29udGVudCk/bXIucmVwbGFjZSgvW1xyXG5dW1x4''@;'; put 'put ''MjBdezAsMn0vZywiICIpLnJlcGxhY2UoLzxicihccyp8XC8pPltcclxuXT9bXHgyMF17MCwzfS9naW0sIlxyXG4iKTptci5yZXBsYWNlKC88YnIoXHMqfFwvKT5bXHJcbl0/L2dpbSwiXHJcbiIpLHJ0W0p0XVtfaV09T24ucmVwbGFjZShYWGUsenI9PnZmZVt6cl0pfWVsc2UgZHQucHVzaCht''@;'; put 'put ''cil9fXJldHVybiBwdC5sZW5ndGgmJihhLm1lcmdlQ2VsbHM9cHQpLGR0Lmxlbmd0aCYmKGEucm93SGVhZGVycz1kdCkscnQubGVuZ3RoJiYoYS5kYXRhPXJ0KSxhfWZ1bmN0aW9uIG0xKGMpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50''@;'; put 'put ''c1sxXTpbXTtjb25zdCBhPXR5cGVvZiBjO2lmKCJudW1iZXIiPT09YSlyZXR1cm4haXNOYU4oYykmJmlzRmluaXRlKGMpO2lmKCJzdHJpbmciPT09YSl7aWYoMD09PWMubGVuZ3RoKXJldHVybiExO2lmKDE9PT1jLmxlbmd0aClyZXR1cm4vXGQvLnRlc3QoYyk7Y29uc3QgZD1BcnJheS5mcm9t''@;'; put 'put ''KG5ldyBTZXQoWyIuIiwuLi5sXSkpLm1hcChoPT5gXFwke2h9YCkuam9pbigifCIpO3JldHVybiBuZXcgUmVnRXhwKGBeWystXT8oKCgke2R9KT9cXGQrKCgke2R9KVxcZCspPyhlWystXT9cXGQrKT8pfCgweFthLWZcXGRdKykpJGAsImkiKS50ZXN0KGMudHJpbSgpKX1yZXR1cm4ib2JqZWN0''@;'; put 'put ''Ij09PWEmJiEoIWN8fCJudW1iZXIiIT10eXBlb2YgYy52YWx1ZU9mKCl8fGMgaW5zdGFuY2VvZiBEYXRlKX1mdW5jdGlvbiB5ZmUoYyl7cmV0dXJuIG0xKGMsWyIsIl0pfWZ1bmN0aW9uIEdhKGMsbCxhKXtsZXQgZD0tMTtmb3IoImZ1bmN0aW9uIj09dHlwZW9mIGw/KGE9bCxsPWMpOmQ9Yy0x''@;'; put 'put ''OysrZDw9bCYmITEhPT1hKGQpOyk7fWZ1bmN0aW9uIFgkKGMsbCxhKXtsZXQgZD1jKzE7Zm9yKCJmdW5jdGlvbiI9PXR5cGVvZiBsJiYoYT1sLGw9MCk7LS1kPj1sJiYhMSE9PWEoZCk7KTt9ZnVuY3Rpb24gSiQoYyxsKXtyZXR1cm4gbD1wYXJzZUludChsLnRvU3RyaW5nKCkucmVwbGFjZSgi''@;'; put 'put ''JSIsIiIpLDEwKSxsPWlzTmFOKGwpPzA6bCxwYXJzZUludChjKmwvMTAwLDEwKX1mdW5jdGlvbiBrcyhjLGwsYSl7cmV0dXJuIE1hdGgubWluKGMsbCk9PT1jP2w6TWF0aC5tYXgoYyxhKT09PWM/YTpjfWNvbnN0IF9mZT1uZXcgTWFwKFtbImFzYyIsWy0xLDFdXSxbImRlc2MiLFsxLC0xXV1d''@;'; put 'put ''KSxlSmU9Yz0+YFRoZSBwcmlvcml0eSAnJHtjfScgaXMgYWxyZWFkeSBkZWNsYXJlZCBpbiBhIG1hcC5gLHRKZT1jPT5gVGhlIHByaW9yaXR5ICcke2N9JyBpcyBub3QgYSBudW1iZXIuYCxySmU9Yz0+YFRoZSBpZCAnJHtjfScgaXMgYWxyZWFkeSBkZWNsYXJlZCBpbiBhIG1hcC5gO2Z1bmN0''@;'; put 'put ''aW9uIEpPKCl7bGV0e2Vycm9ySWRFeGlzdHM6Y309YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9O2NvbnN0IGw9bmV3IE1hcDtmdW5jdGlvbiBNKCl7cmV0dXJuWy4uLmxdfWZ1bmN0aW9uIEQoWil7cmV0dXJuIGwuaGFzKFopfXJldHVy''@;'; put 'put ''biBjPW1sKGMpP2M6ckplLHthZGRJdGVtOmZ1bmN0aW9uIGEoWixyZSl7aWYoRChaKSl0aHJvdyBuZXcgRXJyb3IoYyhaKSk7bC5zZXQoWixyZSl9LGNsZWFyOmZ1bmN0aW9uIGgoKXtsLmNsZWFyKCl9LGdldElkOmZ1bmN0aW9uIGYoWil7Y29uc3RbcmVdPU0oKS5maW5kKGNlPT57bGV0W2Jl''@;'; put 'put ''LEVlXT1jZTtyZXR1cm4gWj09PUVlJiZiZX0pfHxbbnVsbF07cmV0dXJuIHJlfSxnZXRJdGVtOmZ1bmN0aW9uIHYoWil7cmV0dXJuIGwuZ2V0KFopfSxnZXRJdGVtczpNLGhhc0l0ZW06RCxyZW1vdmVJdGVtOmZ1bmN0aW9uIGQoWil7cmV0dXJuIGwuZGVsZXRlKFopfX19Y29uc3QgaUplPWM9''@;'; put 'put ''PmAnJHtjfScgdmFsdWUgaXMgYWxyZWFkeSBkZWNsYXJlZCBpbiBhIHVuaXF1ZSBzZXQuYCxlSz1jPT5gVGhlcmUgaXMgYWxyZWFkeSByZWdpc3RlcmVkICIke2N9IiBwbHVnaW4uYCx3ZmU9ZnVuY3Rpb24gbkplKCl7bGV0e2Vycm9yUHJpb3JpdHlFeGlzdHM6YyxlcnJvclByaW9yaXR5TmFO''@;'; put 'put ''Omx9PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fTtjb25zdCBhPW5ldyBNYXA7cmV0dXJuIGM9bWwoYyk/YzplSmUsbD1tbChsKT9sOnRKZSx7YWRkSXRlbTpmdW5jdGlvbiBkKGYsdil7aWYoIW0xKGYpKXRocm93IG5ldyBFcnJvcihs''@;'; put 'put ''KGYpKTtpZihhLmhhcyhmKSl0aHJvdyBuZXcgRXJyb3IoYyhmKSk7YS5zZXQoZix2KX0sZ2V0SXRlbXM6ZnVuY3Rpb24gaCgpe2xldCBmPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXToiYXNjIjtjb25zdFt2LE1dPV9mZS5nZXQoZil8fF9m''@;'; put 'put ''ZS5nZXQoImFzYyIpO3JldHVyblsuLi5hXS5zb3J0KChELFopPT5EWzBdPFpbMF0/djpNKS5tYXAoRD0+RFsxXSl9fX0oe2Vycm9yUHJpb3JpdHlFeGlzdHM6Yz0+YFRoZXJlIGlzIGFscmVhZHkgcmVnaXN0ZXJlZCBwbHVnaW4gb24gcHJpb3JpdHkgIiR7Y30iLmAsZXJyb3JQcmlvcml0eU5h''@;'; put 'put ''TjpjPT5gVGhlIHByaW9yaXR5ICIke2N9IiBpcyBub3QgYSBudW1iZXIuYH0pLENmZT1mdW5jdGlvbiBhSmUoKXtsZXR7ZXJyb3JJdGVtRXhpc3RzOmN9PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fTtjb25zdCBsPW5ldyBTZXQ7cmV0''@;'; put 'put ''dXJuIGM9bWwoYyk/YzppSmUse2FkZEl0ZW06ZnVuY3Rpb24gYShmKXtpZihsLmhhcyhmKSl0aHJvdyBuZXcgRXJyb3IoYyhmKSk7bC5hZGQoZil9LGNsZWFyOmZ1bmN0aW9uIGgoKXtsLmNsZWFyKCl9LGdldEl0ZW1zOmZ1bmN0aW9uIGQoKXtyZXR1cm5bLi4ubF19fX0oe2Vycm9ySXRlbUV4''@;'; put 'put ''aXN0czplS30pLHRLPUpPKHtlcnJvcklkRXhpc3RzOmVLfSk7ZnVuY3Rpb24gbksoKXtyZXR1cm5bLi4ud2ZlLmdldEl0ZW1zKCksLi4uQ2ZlLmdldEl0ZW1zKCldfWZ1bmN0aW9uIElFKGMpe2NvbnN0IGw9cDEoYyk7cmV0dXJuIHRLLmdldEl0ZW0obCl9ZnVuY3Rpb24gUHMoYyxsLGEpe1tj''@;'; put 'put ''LGwsYV09ZnVuY3Rpb24gbEplKGMsbCxhKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgYyYmKGM9KGw9YykuUExVR0lOX0tFWSxhPWwuUExVR0lOX1BSSU9SSVRZKSxbYyxsLGFdfShjLGwsYSksdm9pZCAwPT09SUUoYykmJmZ1bmN0aW9uIHNKZShjLGwsYSl7Y29uc3QgZD1wMShjKTtpZih0''@;'; put 'put ''Sy5oYXNJdGVtKGQpKXRocm93IG5ldyBFcnJvcihlSyhkKSk7dm9pZCAwPT09YT9DZmUuYWRkSXRlbShkKTp3ZmUuYWRkSXRlbShhLGQpLHRLLmFkZEl0ZW0oZCxsKX0oYyxsLGEpfWNvbnN0e3JlZ2lzdGVyOmNKZSxnZXRJdGVtOnVKZSxoYXNJdGVtOlNmZSxnZXROYW1lczpkSmV9PXIzKCJy''@;'; put 'put ''ZW5kZXJlcnMiKTtmdW5jdGlvbiBRTyhjKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYylyZXR1cm4gYztpZighU2ZlKGMpKXRocm93IEVycm9yKGBObyByZWdpc3RlcmVkIHJlbmRlcmVyIGZvdW5kIHVuZGVyICIke2N9IiBuYW1lYCk7cmV0dXJuIHVKZShjKX1mdW5jdGlvbiBJaChjLGwpeyJz''@;'; put 'put ''dHJpbmciIT10eXBlb2YgYyYmKGM9KGw9YykuUkVOREVSRVJfVFlQRSksY0plKGMsbCl9Y29uc3R7cmVnaXN0ZXI6aEplLGdldEl0ZW06ZkplLGhhc0l0ZW06TWZlLGdldE5hbWVzOnBKZX09cjMoInZhbGlkYXRvcnMiKTtmdW5jdGlvbiBySyhjKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYyly''@;'; put 'put ''ZXR1cm4gYztpZighTWZlKGMpKXRocm93IEVycm9yKGBObyByZWdpc3RlcmVkIHZhbGlkYXRvciBmb3VuZCB1bmRlciAiJHtjfSIgbmFtZWApO3JldHVybiBmSmUoYyl9ZnVuY3Rpb24gWTcoYyxsKXsic3RyaW5nIiE9dHlwZW9mIGMmJihjPShsPWMpLlZBTElEQVRPUl9UWVBFKSxoSmUoYyxs''@;'; put 'put ''KX1mdW5jdGlvbiBrcChjLGwsYSl7KGZ1bmN0aW9uIGdKZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24g''@;'; put 'put ''UWEoYyxsKXtyZXR1cm4gYy5nZXQoeGZlKGMsbCkpfWZ1bmN0aW9uIFZtKGMsbCxhKXtyZXR1cm4gYy5zZXQoeGZlKGMsbCksYSksYX1mdW5jdGlvbiB4ZmUoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDph''@;'; put 'put ''O3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciB6Mj1uZXcgV2Vha01hcCxpSz1uZXcgV2Vha01hcCx4MD1uZXcgV2Vha01hcCxmXz1uZXcgV2Vha01hcCxlUD1uZXcgV2Vha01hcCxpMz1uZXcgV2Vha01hcCxh''@;'; put 'put ''Sz1uZXcgV2Vha01hcCxSRT1uZXcgV2Vha01hcCxHNz1uZXcgV2Vha01hcCxEcD1uZXcgV2Vha01hcDtjb25zdCBFZmU9Y2xhc3MgbUple2NvbnN0cnVjdG9yKGwsYSxkLGgsZix2KXtsZXQgTT1hcmd1bWVudHMubGVuZ3RoPjYmJnZvaWQgMCE9PWFyZ3VtZW50c1s2XT9hcmd1bWVudHNbNl06''@;'; put 'put ''bnVsbDtrcCh0aGlzLHoyLHZvaWQgMCksa3AodGhpcyxpSyx2b2lkIDApLGtwKHRoaXMseDAsdm9pZCAwKSxrcCh0aGlzLGZfLHZvaWQgMCksa3AodGhpcyxlUCx2b2lkIDApLGtwKHRoaXMsaTMsdm9pZCAwKSxrcCh0aGlzLGFLLHZvaWQgMCksa3AodGhpcyxSRSx2b2lkIDApLGtwKHRoaXMs''@;'; put 'put ''RzcsW251bGwsbnVsbF0pLGtwKHRoaXMsRHAsW251bGwsbnVsbF0pLFZtKHoyLHRoaXMsZCksVm0oaUssdGhpcyxhKSxWbSh4MCx0aGlzLGYpLFZtKGZfLHRoaXMsdiksVm0oZVAsdGhpcyxNKSxWbShpMyx0aGlzLGgpLFZtKGFLLHRoaXMsbCksdGhpcy5yZWdpc3RlckV2ZW50cygpfXJlZ2lz''@;'; put 'put ''dGVyRXZlbnRzKCl7UWEoaTMsdGhpcykuYWRkRXZlbnRMaXN0ZW5lcihRYSh4MCx0aGlzKS5ob2xkZXIsImNvbnRleHRtZW51IixkPT50aGlzLm9uQ29udGV4dE1lbnUoZCkpLFFhKGkzLHRoaXMpLmFkZEV2ZW50TGlzdGVuZXIoUWEoeDAsdGhpcykuVEFCTEUsIm1vdXNlb3ZlciIsZD0+dGhp''@;'; put 'put ''cy5vbk1vdXNlT3ZlcihkKSksUWEoaTMsdGhpcykuYWRkRXZlbnRMaXN0ZW5lcihRYSh4MCx0aGlzKS5UQUJMRSwibW91c2VvdXQiLGQ9PnRoaXMub25Nb3VzZU91dChkKSk7Y29uc3QgbD0oKT0+e1FhKGkzLHRoaXMpLmFkZEV2ZW50TGlzdGVuZXIoUWEoeDAsdGhpcykuaG9sZGVyLCJ0b3Vj''@;'; put 'put ''aHN0YXJ0IixkPT50aGlzLm9uVG91Y2hTdGFydChkKSksUWEoaTMsdGhpcykuYWRkRXZlbnRMaXN0ZW5lcihRYSh4MCx0aGlzKS5ob2xkZXIsInRvdWNoZW5kIixkPT50aGlzLm9uVG91Y2hFbmQoZCkpLHRoaXMubW9tZW50dW1TY3JvbGxpbmd8fCh0aGlzLm1vbWVudHVtU2Nyb2xsaW5nPXt9''@;'; put 'put ''KSxRYShpMyx0aGlzKS5hZGRFdmVudExpc3RlbmVyKFFhKHgwLHRoaXMpLmhvbGRlciwic2Nyb2xsIiwoKT0+e2NsZWFyVGltZW91dCh0aGlzLm1vbWVudHVtU2Nyb2xsaW5nLl90aW1lb3V0KSx0aGlzLm1vbWVudHVtU2Nyb2xsaW5nLm9uZ29pbmd8fFFhKHoyLHRoaXMpLmdldFNldHRpbmco''@;'; put 'put ''Im9uQmVmb3JlVG91Y2hTY3JvbGwiKSx0aGlzLm1vbWVudHVtU2Nyb2xsaW5nLm9uZ29pbmc9ITAsdGhpcy5tb21lbnR1bVNjcm9sbGluZy5fdGltZW91dD1zZXRUaW1lb3V0KCgpPT57dGhpcy50b3VjaEFwcGxpZWR8fCh0aGlzLm1vbWVudHVtU2Nyb2xsaW5nLm9uZ29pbmc9ITEsUWEoejIs''@;'; put 'put ''dGhpcykuZ2V0U2V0dGluZygib25BZnRlck1vbWVudHVtU2Nyb2xsIikpfSwyMDApfSl9O0FwKCk/bCgpOihSJCgpJiZsKCksKCgpPT57UWEoaTMsdGhpcykuYWRkRXZlbnRMaXN0ZW5lcihRYSh4MCx0aGlzKS5ob2xkZXIsIm1vdXNldXAiLGQ9PnRoaXMub25Nb3VzZVVwKGQpKSxRYShpMyx0''@;'; put 'put ''aGlzKS5hZGRFdmVudExpc3RlbmVyKFFhKHgwLHRoaXMpLmhvbGRlciwibW91c2Vkb3duIixkPT50aGlzLm9uTW91c2VEb3duKGQpKX0pKCkpfXNlbGVjdGVkQ2VsbFdhc1RvdWNoZWQobCl7Y29uc3QgZD10aGlzLnBhcmVudENlbGwobCkuY29vcmRzO2lmKFFhKFJFLHRoaXMpJiZkKXtjb25z''@;'; put 'put ''dFtoLGZdPVtkLnJvdyxRYShSRSx0aGlzKS5mcm9tLnJvd10sW3YsTV09W2QuY29sLFFhKFJFLHRoaXMpLmZyb20uY29sXTtyZXR1cm4gaD09PWYmJnY9PT1NfXJldHVybiExfXBhcmVudENlbGwobCl7Y29uc3QgYT17fSxoPWJFKGwsWyJURCIsIlRIIl0sUWEoeDAsdGhpcykuVEFCTEUpO3Jl''@;'; put 'put ''dHVybiBoPyhhLmNvb3Jkcz1RYSh4MCx0aGlzKS5nZXRDb29yZHMoaCksYS5URD1oKTpwbyhsLCJ3dEJvcmRlciIpJiZwbyhsLCJjdXJyZW50Iik/KGEuY29vcmRzPVFhKGZfLHRoaXMpLmdldEZvY3VzU2VsZWN0aW9uKCkuY2VsbFJhbmdlLmhpZ2hsaWdodCxhLlREPVFhKHgwLHRoaXMpLmdl''@;'; put 'put ''dENlbGwoYS5jb29yZHMpKTpwbyhsLCJ3dEJvcmRlciIpJiZwbyhsLCJhcmVhIikmJlFhKGZfLHRoaXMpLmdldEFyZWFTZWxlY3Rpb24oKS5jZWxsUmFuZ2UmJihhLmNvb3Jkcz1RYShmXyx0aGlzKS5nZXRBcmVhU2VsZWN0aW9uKCkuY2VsbFJhbmdlLnRvLGEuVEQ9UWEoeDAsdGhpcykuZ2V0''@;'; put 'put ''Q2VsbChhLmNvb3JkcykpLGF9b25Nb3VzZURvd24obCl7Y29uc3QgYT1RYShpSyx0aGlzKS5yb290RG9jdW1lbnQuYWN0aXZlRWxlbWVudCxkPUkkKFIyZSxsLnRhcmdldCksaD1sLnRhcmdldDtpZighWyJURCIsIlRIIl0uaW5jbHVkZXMoYS5ub2RlTmFtZSkmJihoPT09YXx8ZCgwKT09PWF8''@;'; put 'put ''fGQoMSk9PT1hKSlyZXR1cm47Y29uc3QgZj10aGlzLnBhcmVudENlbGwoaCk7cG8oaCwiY29ybmVyIik/UWEoejIsdGhpcykuZ2V0U2V0dGluZygib25DZWxsQ29ybmVyTW91c2VEb3duIixsLGgpOmYuVEQmJlFhKHoyLHRoaXMpLmhhcygib25DZWxsTW91c2VEb3duIikmJnRoaXMuY2FsbExp''@;'; put 'put ''c3RlbmVyKCJvbkNlbGxNb3VzZURvd24iLGwsZi5jb29yZHMsZi5URCksKDA9PT1sLmJ1dHRvbnx8dGhpcy50b3VjaEFwcGxpZWQpJiZmLlREJiYoUWEoRHAsdGhpcylbMF09Zi5URCxjbGVhclRpbWVvdXQoUWEoRzcsdGhpcylbMF0pLFFhKEc3LHRoaXMpWzBdPXNldFRpbWVvdXQoKCk9PntR''@;'; put 'put ''YShEcCx0aGlzKVswXT1udWxsfSwxZTMpKX1vbkNvbnRleHRNZW51KGwpe2lmKFFhKHoyLHRoaXMpLmhhcygib25DZWxsQ29udGV4dE1lbnUiKSl7Y29uc3QgYT10aGlzLnBhcmVudENlbGwobC50YXJnZXQpO2EuVEQmJnRoaXMuY2FsbExpc3RlbmVyKCJvbkNlbGxDb250ZXh0TWVudSIsbCxh''@;'; put 'put ''LmNvb3JkcyxhLlREKX19b25Nb3VzZU92ZXIobCl7aWYoIVFhKHoyLHRoaXMpLmhhcygib25DZWxsTW91c2VPdmVyIikpcmV0dXJuO2NvbnN0IGE9UWEoeDAsdGhpcykuVEFCTEUsZD1iRShsLnRhcmdldCxbIlREIiwiVEgiXSxhKSxoPVFhKGVQLHRoaXMpfHx0aGlzO2QmJmQhPT1oLmxhc3RN''@;'; put 'put ''b3VzZU92ZXImJkxtKGQsYSkmJihoLmxhc3RNb3VzZU92ZXI9ZCx0aGlzLmNhbGxMaXN0ZW5lcigib25DZWxsTW91c2VPdmVyIixsLFFhKHgwLHRoaXMpLmdldENvb3JkcyhkKSxkKSl9b25Nb3VzZU91dChsKXtpZighUWEoejIsdGhpcykuaGFzKCJvbkNlbGxNb3VzZU91dCIpKXJldHVybjtj''@;'; put 'put ''b25zdCBhPVFhKHgwLHRoaXMpLlRBQkxFLGQ9YkUobC50YXJnZXQsWyJURCIsIlRIIl0sYSksaD1iRShsLnJlbGF0ZWRUYXJnZXQsWyJURCIsIlRIIl0sYSksZj1RYShlUCx0aGlzKXx8dGhpcztkJiZkIT09aCYmTG0oZCxhKSYmKHRoaXMuY2FsbExpc3RlbmVyKCJvbkNlbGxNb3VzZU91dCIs''@;'; put 'put ''bCxRYSh4MCx0aGlzKS5nZXRDb29yZHMoZCksZCksbnVsbD09PWgmJihmLmxhc3RNb3VzZU92ZXI9bnVsbCkpfW9uTW91c2VVcChsKXtjb25zdCBhPXRoaXMucGFyZW50Q2VsbChsLnRhcmdldCk7YS5URCYmUWEoejIsdGhpcykuaGFzKCJvbkNlbGxNb3VzZVVwIikmJnRoaXMuY2FsbExpc3Rl''@;'; put 'put ''bmVyKCJvbkNlbGxNb3VzZVVwIixsLGEuY29vcmRzLGEuVEQpLCgwPT09bC5idXR0b258fHRoaXMudG91Y2hBcHBsaWVkKSYmKGEuVEQ9PT1RYShEcCx0aGlzKVswXSYmYS5URD09PVFhKERwLHRoaXMpWzFdPyhwbyhsLnRhcmdldCwiY29ybmVyIik/dGhpcy5jYWxsTGlzdGVuZXIoIm9uQ2Vs''@;'; put 'put ''bENvcm5lckRibENsaWNrIixsLGEuY29vcmRzLGEuVEQpOnRoaXMuY2FsbExpc3RlbmVyKCJvbkNlbGxEYmxDbGljayIsbCxhLmNvb3JkcyxhLlREKSxRYShEcCx0aGlzKVswXT1udWxsLFFhKERwLHRoaXMpWzFdPW51bGwpOmEuVEQ9PT1RYShEcCx0aGlzKVswXSYmKFFhKERwLHRoaXMpWzFd''@;'; put 'put ''PWEuVEQsY2xlYXJUaW1lb3V0KFFhKEc3LHRoaXMpWzFdKSxRYShHNyx0aGlzKVsxXT1zZXRUaW1lb3V0KCgpPT57UWEoRHAsdGhpcylbMV09bnVsbH0sNTAwKSkpfW9uVG91Y2hTdGFydChsKXtWbShSRSx0aGlzLFFhKGZfLHRoaXMpLmdldEZvY3VzU2VsZWN0aW9uKCkuY2VsbFJhbmdlKSx0''@;'; put 'put ''aGlzLnRvdWNoQXBwbGllZD0hMCx0aGlzLm9uTW91c2VEb3duKGwpfW9uVG91Y2hFbmQobCl7dmFyIGE7Y29uc3QgZD1sLnRhcmdldCxoPW51bGw9PT0oYT10aGlzLnBhcmVudENlbGwoZCkpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLmNvb3JkcyxmPVBhKGgpJiZoLnJvdz49MCYmaC5jb2w+PTA7''@;'; put 'put ''aWYobC5jYW5jZWxhYmxlJiZmJiZRYSh6Mix0aGlzKS5nZXRTZXR0aW5nKCJpc0RhdGFWaWV3SW5zdGFuY2UiKSl7Y29uc3QgTT1bIkEiLCJCVVRUT04iLCJJTlBVVCJdO08kKCkmJihRMmUoKXx8ZWZlKCkpJiZ0aGlzLnNlbGVjdGVkQ2VsbFdhc1RvdWNoZWQoZCkmJiFNLmluY2x1ZGVzKGQu''@;'; put 'put ''dGFnTmFtZSk/bC5wcmV2ZW50RGVmYXVsdCgpOnRoaXMuc2VsZWN0ZWRDZWxsV2FzVG91Y2hlZChkKXx8bC5wcmV2ZW50RGVmYXVsdCgpfXRoaXMub25Nb3VzZVVwKGwpLHRoaXMudG91Y2hBcHBsaWVkPSExfWNhbGxMaXN0ZW5lcihsLGEsZCxoKXtjb25zdCBmPVFhKHoyLHRoaXMpLmdldFNl''@;'; put 'put ''dHRpbmdQdXJlKGwpO2YmJmYoYSxkLGgsUWEoYUssdGhpcykuY2FsbCh0aGlzKSl9ZGVzdHJveSgpe2NsZWFyVGltZW91dChRYShHNyx0aGlzKVswXSksY2xlYXJUaW1lb3V0KFFhKEc3LHRoaXMpWzFdKSxRYShpMyx0aGlzKS5kZXN0cm95KCl9fTtmdW5jdGlvbiBvSyhjLGwsYSl7cmV0dXJu''@;'; put 'put ''KGw9ZnVuY3Rpb24gdkplKGMpe3ZhciBsPWZ1bmN0aW9uIGJKZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5''@;'; put 'put ''cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsi''@;'; put 'put ''In0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y29uc3QgX0plPWNsYXNzIHlKZXtjb25zdHJ1Y3RvcihsLGEsZCl7b0sodGhpcywib2Zmc2V0Iix2b2lkIDApLG9L''@;'; put 'put ''KHRoaXMsInRvdGFsIix2b2lkIDApLG9LKHRoaXMsImNvdW50VEgiLHZvaWQgMCksdGhpcy5vZmZzZXQ9bCx0aGlzLnRvdGFsPWEsdGhpcy5jb3VudFRIPWR9b2Zmc2V0dGVkKGwpe3JldHVybiBsK3RoaXMub2Zmc2V0fXVuT2Zmc2V0dGVkKGwpe3JldHVybiBsLXRoaXMub2Zmc2V0fXJlbmRl''@;'; put 'put ''cmVkVG9Tb3VyY2UobCl7cmV0dXJuIHRoaXMub2Zmc2V0dGVkKGwpfXNvdXJjZVRvUmVuZGVyZWQobCl7cmV0dXJuIHRoaXMudW5PZmZzZXR0ZWQobCl9b2Zmc2V0dGVkVEgobCl7cmV0dXJuIGwtdGhpcy5jb3VudFRIfXVuT2Zmc2V0dGVkVEgobCl7cmV0dXJuIGwrdGhpcy5jb3VudFRIfXZp''@;'; put 'put ''c2libGVSb3dIZWFkZWRDb2x1bW5Ub1NvdXJjZUNvbHVtbihsKXtyZXR1cm4gdGhpcy5yZW5kZXJlZFRvU291cmNlKHRoaXMub2Zmc2V0dGVkVEgobCkpfXNvdXJjZUNvbHVtblRvVmlzaWJsZVJvd0hlYWRlZENvbHVtbihsKXtyZXR1cm4gdGhpcy51bk9mZnNldHRlZFRIKHRoaXMuc291cmNl''@;'; put 'put ''VG9SZW5kZXJlZChsKSl9fTtmdW5jdGlvbiBzSyhjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gd0plKGMpe3ZhciBsPWZ1bmN0aW9uIENKZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3Zh''@;'; put 'put ''ciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0o''@;'; put 'put ''Yywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y29uc3QgTUplPWNsYXNzIFNKZXtjb25z''@;'; put 'put ''dHJ1Y3RvcihsLGEsZCl7c0sodGhpcywib2Zmc2V0Iix2b2lkIDApLHNLKHRoaXMsInRvdGFsIix2b2lkIDApLHNLKHRoaXMsImNvdW50VEgiLHZvaWQgMCksdGhpcy5vZmZzZXQ9bCx0aGlzLnRvdGFsPWEsdGhpcy5jb3VudFRIPWR9b2Zmc2V0dGVkKGwpe3JldHVybiBsK3RoaXMub2Zmc2V0''@;'; put 'put ''fXVuT2Zmc2V0dGVkKGwpe3JldHVybiBsLXRoaXMub2Zmc2V0fXJlbmRlcmVkVG9Tb3VyY2UobCl7cmV0dXJuIHRoaXMub2Zmc2V0dGVkKGwpfXNvdXJjZVRvUmVuZGVyZWQobCl7cmV0dXJuIHRoaXMudW5PZmZzZXR0ZWQobCl9b2Zmc2V0dGVkVEgobCl7cmV0dXJuIGwtdGhpcy5jb3VudFRI''@;'; put 'put ''fXVuT2Zmc2V0dGVkVEgobCl7cmV0dXJuIGwrdGhpcy5jb3VudFRIfXZpc2libGVDb2xIZWFkZWRSb3dUb1NvdXJjZVJvdyhsKXtyZXR1cm4gdGhpcy5yZW5kZXJlZFRvU291cmNlKHRoaXMub2Zmc2V0dGVkVEgobCkpfXNvdXJjZVJvd1RvVmlzaWJsZUNvbEhlYWRlZFJvdyhsKXtyZXR1cm4g''@;'; put 'put ''dGhpcy51bk9mZnNldHRlZFRIKHRoaXMuc291cmNlVG9SZW5kZXJlZChsKSl9fTtmdW5jdGlvbiB0UChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24geEplKGMpe3ZhciBsPWZ1bmN0aW9uIEVKZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wu''@;'; put 'put ''dG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJz''@;'; put 'put ''dHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1ts''@;'; put 'put ''XT1hLGN9Y2xhc3MgVEple2NvbnN0cnVjdG9yKCl7dFAodGhpcywiY3VycmVudFNpemUiLDApLHRQKHRoaXMsIm5leHRTaXplIiwwKSx0UCh0aGlzLCJjdXJyZW50T2Zmc2V0IiwwKSx0UCh0aGlzLCJuZXh0T2Zmc2V0IiwwKX1zZXRTaXplKGwpe3RoaXMuY3VycmVudFNpemU9dGhpcy5uZXh0''@;'; put 'put ''U2l6ZSx0aGlzLm5leHRTaXplPWx9c2V0T2Zmc2V0KGwpe3RoaXMuY3VycmVudE9mZnNldD10aGlzLm5leHRPZmZzZXQsdGhpcy5uZXh0T2Zmc2V0PWx9fWZ1bmN0aW9uIGNLKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBrSmUoYyl7dmFyIGw9ZnVuY3Rpb24gREplKGMsbCl7aWYoIm9iamVj''@;'; put 'put ''dCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBt''@;'; put 'put ''dXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVy''@;'; put 'put ''YWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBJSmV7Y29uc3RydWN0b3IoKXtjSyh0aGlzLCJzaXplIixuZXcgVEplKSxjSyh0aGlzLCJ3b3JraW5nU3BhY2UiLDApLGNLKHRoaXMsInNoYXJlZFNpemUiLG51bGwpfXNldFNpemUobCl7dGhpcy5z''@;'; put 'put ''aXplLnNldFNpemUobCl9c2V0T2Zmc2V0KGwpe3RoaXMuc2l6ZS5zZXRPZmZzZXQobCl9Z2V0Vmlld1NpemUoKXtyZXR1cm4gdGhpcy5zaXplfWlzU2hhcmVkKCl7cmV0dXJuIG51bGwhPT10aGlzLnNoYXJlZFNpemV9aXNQbGFjZU9uKGwpe3JldHVybiB0aGlzLndvcmtpbmdTcGFjZT09PWx9''@;'; put 'put ''YXBwZW5kKGwpe3RoaXMud29ya2luZ1NwYWNlPTEsbC53b3JraW5nU3BhY2U9Mix0aGlzLnNoYXJlZFNpemU9bC5nZXRWaWV3U2l6ZSgpfXByZXBlbmQobCl7dGhpcy53b3JraW5nU3BhY2U9MixsLndvcmtpbmdTcGFjZT0xLHRoaXMuc2hhcmVkU2l6ZT1sLmdldFZpZXdTaXplKCl9fXkoMjk3''@;'; put 'put ''NjApO2NsYXNzIEFmZXtjb25zdHJ1Y3RvcihsLGEpeyhmdW5jdGlvbiBSSmUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIExKZShjKXt2YXIgbD1mdW5jdGlvbiBPSmUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtp''@;'; put 'put ''Zih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3Ry''@;'; put 'put ''aW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfSkodGhpcywi''@;'; put 'put ''b3JkZXIiLFtdKSx0aGlzLm9yZGVyPVsuLi5BcnJheShhKS5rZXlzKCldLm1hcChkPT5sK2QpfWdldCBsZW5ndGgoKXtyZXR1cm4gdGhpcy5vcmRlci5sZW5ndGh9aGFzKGwpe3JldHVybiB0aGlzLm9yZGVyLmluZGV4T2YobCk+LTF9Z2V0KGwpe3JldHVybiBsPHRoaXMub3JkZXIubGVuZ3Ro''@;'; put 'put ''P3RoaXMub3JkZXJbbF06LTF9cmVtb3ZlKGwpe3RoaXMub3JkZXIuc3BsaWNlKHRoaXMub3JkZXIuaW5kZXhPZihsKSwxKX1wcmVwZW5kKGwpe3JldHVybiB0aGlzLm9yZGVyLnVuc2hpZnQobCksdGhpcy5vcmRlci5wb3AoKX19Y2xhc3MgTkple2NvbnN0cnVjdG9yKGwpeyhmdW5jdGlvbiBQ''@;'; put 'put ''SmUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIEZKZShjKXt2YXIgbD1mdW5jdGlvbiBISmUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIp''@;'; put 'put ''O2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wi''@;'; put 'put ''PT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfSkodGhpcywic2l6ZVNldCIsdm9pZCAwKSx0aGlzLnNpemVTZXQ9bH1kaWZmKCl7Y29u''@;'; put 'put ''c3R7c2l6ZVNldDpsfT10aGlzLHtjdXJyZW50U2l6ZTphLG5leHRTaXplOmR9PWwuZ2V0Vmlld1NpemUoKTtsZXQgaD1NYXRoLm1heChkLGEpO2lmKDA9PT1oKXJldHVybltdO2NvbnN0e2N1cnJlbnRPZmZzZXQ6ZixuZXh0T2Zmc2V0OnZ9PWwuZ2V0Vmlld1NpemUoKSxNPW5ldyBBZmUoZixh''@;'; put 'put ''KSxEPW5ldyBBZmUodixkKSxaPVtdO2ZvcihsZXQgcmU9MDtyZTxoO3JlKyspe2NvbnN0IGNlPU0uZ2V0KHJlKSxiZT1ELmdldChyZSk7aWYoLTE9PT1iZSlaLnB1c2goWyJyZW1vdmUiLGNlXSk7ZWxzZSBpZigtMT09PWNlKSFsLmlzU2hhcmVkKCl8fGwuaXNTaGFyZWQoKSYmbC5pc1BsYWNl''@;'; put 'put ''T24oMik/Wi5wdXNoKFsiYXBwZW5kIixiZV0pOloucHVzaChbInByZXBlbmQiLGJlXSk7ZWxzZSBpZihiZT5jZSlNLmhhcyhiZSkmJihNLnJlbW92ZShiZSksZDw9TS5sZW5ndGgmJihoLT0xKSksWi5wdXNoKFsicmVwbGFjZSIsYmUsY2VdKTtlbHNlIGlmKGJlPGNlKXtjb25zdCBFZT1NLnBy''@;'; put 'put ''ZXBlbmQoYmUpO1oucHVzaChbImluc2VydF9iZWZvcmUiLGJlLGNlLEVlXSl9ZWxzZSBaLnB1c2goWyJub25lIixiZV0pfXJldHVybiBafX1mdW5jdGlvbiBwXyhjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gVkplKGMpe3ZhciBsPWZ1bmN0aW9uIEJKZShjLGwpe2lmKCJvYmplY3QiIT10eXBl''@;'; put 'put ''b2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1''@;'; put 'put ''cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAs''@;'; put 'put ''Y29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3Mga2Zle2NvbnN0cnVjdG9yKGwsYSl7cF8odGhpcywicm9vdE5vZGUiLHZvaWQgMCkscF8odGhpcywibm9kZXNQb29sIix2b2lkIDApLHBfKHRoaXMsInNpemVTZXQiLG5ldyBJSmUpLHBfKHRoaXMsImNvbGxlY3Rl''@;'; put 'put ''ZE5vZGVzIixbXSkscF8odGhpcywidmlld0RpZmZlciIsbmV3IE5KZSh0aGlzLnNpemVTZXQpKSxwXyh0aGlzLCJsZWFkcyIsW10pLHRoaXMucm9vdE5vZGU9bCx0aGlzLm5vZGVzUG9vbD1hfXNldFNpemUobCl7cmV0dXJuIHRoaXMuc2l6ZVNldC5zZXRTaXplKGwpLHRoaXN9c2V0T2Zmc2V0''@;'; put 'put ''KGwpe3JldHVybiB0aGlzLnNpemVTZXQuc2V0T2Zmc2V0KGwpLHRoaXN9aXNTaGFyZWRWaWV3U2V0KCl7cmV0dXJuIHRoaXMuc2l6ZVNldC5pc1NoYXJlZCgpfWdldE5vZGUobCl7cmV0dXJuIGw8dGhpcy5jb2xsZWN0ZWROb2Rlcy5sZW5ndGg/dGhpcy5jb2xsZWN0ZWROb2Rlc1tsXTpudWxs''@;'; put 'put ''fWdldEN1cnJlbnROb2RlKCl7Y29uc3QgbD10aGlzLmNvbGxlY3RlZE5vZGVzLmxlbmd0aDtyZXR1cm4gbD4wP3RoaXMuY29sbGVjdGVkTm9kZXNbbC0xXTpudWxsfWFwcGx5Q29tbWFuZChsKXtjb25zdHtyb290Tm9kZTphfT10aGlzLFtkLGgsZix2XT1sLE09dGhpcy5ub2Rlc1Bvb2woaCk7''@;'; put 'put ''c3dpdGNoKHRoaXMuY29sbGVjdGVkTm9kZXMucHVzaChNKSxkKXtjYXNlInByZXBlbmQiOmEuaW5zZXJ0QmVmb3JlKE0sYS5maXJzdENoaWxkKTticmVhaztjYXNlImFwcGVuZCI6YS5hcHBlbmRDaGlsZChNKTticmVhaztjYXNlImluc2VydF9iZWZvcmUiOmEuaW5zZXJ0QmVmb3JlKE0sdGhp''@;'; put 'put ''cy5ub2Rlc1Bvb2woZikpLGEucmVtb3ZlQ2hpbGQodGhpcy5ub2Rlc1Bvb2wodikpO2JyZWFrO2Nhc2UicmVwbGFjZSI6YS5yZXBsYWNlQ2hpbGQoTSx0aGlzLm5vZGVzUG9vbChmKSk7YnJlYWs7Y2FzZSJyZW1vdmUiOmEucmVtb3ZlQ2hpbGQoTSl9fXN0YXJ0KCl7dGhpcy5jb2xsZWN0ZWRO''@;'; put 'put ''b2Rlcy5sZW5ndGg9MCx0aGlzLmxlYWRzPXRoaXMudmlld0RpZmZlci5kaWZmKCl9cmVuZGVyKCl7dGhpcy5sZWFkcy5sZW5ndGg+MCYmdGhpcy5hcHBseUNvbW1hbmQodGhpcy5sZWFkcy5zaGlmdCgpKX1lbmQoKXtmb3IoO3RoaXMubGVhZHMubGVuZ3RoPjA7KXRoaXMuYXBwbHlDb21tYW5k''@;'; put 'put ''KHRoaXMubGVhZHMuc2hpZnQoKSl9fWNsYXNzIERmZSBleHRlbmRzIGtmZXtwcmVwZW5kVmlldyhsKXtyZXR1cm4gdGhpcy5zaXplU2V0LnByZXBlbmQobC5zaXplU2V0KSxsLnNpemVTZXQuYXBwZW5kKHRoaXMuc2l6ZVNldCksdGhpc31hcHBlbmRWaWV3KGwpe3JldHVybiB0aGlzLnNpemVT''@;'; put 'put ''ZXQuYXBwZW5kKGwuc2l6ZVNldCksbC5zaXplU2V0LnByZXBlbmQodGhpcy5zaXplU2V0KSx0aGlzfX1mdW5jdGlvbiBJZmUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIGpKZShjKXt2YXIgbD1mdW5jdGlvbiB6SmUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3Zh''@;'; put 'put ''ciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVl''@;'; put 'put ''LiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0''@;'; put 'put ''YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIFVKZXtjb25zdHJ1Y3RvcihsKXtJZmUodGhpcywibm9kZVR5cGUiLHZvaWQgMCksSWZlKHRoaXMsInBvb2wiLG5ldyBNYXApLHRoaXMubm9kZVR5cGU9bC50b1VwcGVyQ2FzZSgpfXNldFJvb3REb2N1bWVudChsKXt0aGlzLnJvb3REb2N1bWVudD1s''@;'; put 'put ''fW9idGFpbihsLGEpe2NvbnN0IGg9Im51bWJlciI9PXR5cGVvZiBhP2Ake2x9eCR7YX1gOmwudG9TdHJpbmcoKTtpZih0aGlzLnBvb2wuaGFzKGgpKXJldHVybiB0aGlzLnBvb2wuZ2V0KGgpO2NvbnN0IGY9dGhpcy5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0aGlzLm5vZGVUeXBlKTty''@;'; put 'put ''ZXR1cm4gdGhpcy5wb29sLnNldChoLGYpLGZ9fWZ1bmN0aW9uIExFKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBaSmUoYyl7dmFyIGw9ZnVuY3Rpb24gV0plKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9p''@;'; put 'put ''ZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpO''@;'; put 'put ''dW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBPRXtjb25z''@;'; put 'put ''dHJ1Y3RvcihsLGEpe0xFKHRoaXMsIm5vZGVzUG9vbCIsbnVsbCksTEUodGhpcywibm9kZVR5cGUiLHZvaWQgMCksTEUodGhpcywicm9vdE5vZGUiLHZvaWQgMCksTEUodGhpcywidGFibGUiLG51bGwpLExFKHRoaXMsInJlbmRlcmVkTm9kZXMiLDApLHRoaXMubm9kZXNQb29sPSJzdHJpbmci''@;'; put 'put ''PT10eXBlb2YgbD9uZXcgVUplKGwpOm51bGwsdGhpcy5ub2RlVHlwZT1sLHRoaXMucm9vdE5vZGU9YX1zZXRUYWJsZShsKXt0aGlzLm5vZGVzUG9vbCYmdGhpcy5ub2Rlc1Bvb2wuc2V0Um9vdERvY3VtZW50KGwucm9vdERvY3VtZW50KSx0aGlzLnRhYmxlPWx9YWRqdXN0KCl7fXJlbmRlcigp''@;'; put 'put ''e319ZnVuY3Rpb24gUmZlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBZSmUoYyl7dmFyIGw9ZnVuY3Rpb24gR0plKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMs''@;'; put 'put ''bHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTty''@;'; put 'put ''ZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyAkSmUgZXh0ZW5kcyBPRXtjb25zdHJ1Y3Rvcigpe3N1''@;'; put 'put ''cGVyKCJUSCIpLFJmZSh0aGlzLCJvcmRlclZpZXdzIixuZXcgV2Vha01hcCksUmZlKHRoaXMsInNvdXJjZVJvd0luZGV4IiwwKX1vYnRhaW5PcmRlclZpZXcobCl7bGV0IGE7cmV0dXJuIHRoaXMub3JkZXJWaWV3cy5oYXMobCk/YT10aGlzLm9yZGVyVmlld3MuZ2V0KGwpOihhPW5ldyBEZmUo''@;'; put 'put ''bCxkPT50aGlzLm5vZGVzUG9vbC5vYnRhaW4odGhpcy5zb3VyY2VSb3dJbmRleCxkKSksdGhpcy5vcmRlclZpZXdzLnNldChsLGEpKSxhfXJlbmRlcigpe2NvbnN0e3Jvd3NUb1JlbmRlcjpsLHJvd0hlYWRlckZ1bmN0aW9uczphLHJvd0hlYWRlcnNDb3VudDpkLHJvd3M6aCxjZWxsczpmfT10''@;'; put 'put ''aGlzLnRhYmxlO2ZvcihsZXQgdj0wO3Y8bDt2Kyspe2NvbnN0IE09dGhpcy50YWJsZS5yZW5kZXJlZFJvd1RvU291cmNlKHYpLEQ9aC5nZXRSZW5kZXJlZE5vZGUodik7dGhpcy5zb3VyY2VSb3dJbmRleD1NO2NvbnN0IFo9dGhpcy5vYnRhaW5PcmRlclZpZXcoRCkscmU9Zi5vYnRhaW5PcmRl''@;'; put 'put ''clZpZXcoRCk7Wi5hcHBlbmRWaWV3KHJlKS5zZXRTaXplKGQpLnNldE9mZnNldCgwKS5zdGFydCgpO2ZvcihsZXQgY2U9ZC0xO2NlPj0wO2NlLS0pe1oucmVuZGVyKCk7Y29uc3QgYmU9Wi5nZXRDdXJyZW50Tm9kZSgpO2JlLmNsYXNzTmFtZT0iIixiZS5yZW1vdmVBdHRyaWJ1dGUoInN0eWxl''@;'; put 'put ''IiksajcoYmUsW25ldyBSZWdFeHAoImFyaWEtKC4qKSIpLG5ldyBSZWdFeHAoInJvbGUiKV0pLHRoaXMudGFibGUuaXNBcmlhRW5hYmxlZCgpJiZ2byhiZSxbWyJyb2xlIiwicm93aGVhZGVyIl0sWyJzY29wZSIsInJvdyJdLHYkKGNlKzEpLE43KC0xKV0pLGFbY2VdKE0sYmUsY2UpfVouZW5k''@;'; put 'put ''KCl9fX1jbGFzcyBLSmUgZXh0ZW5kcyBPRXtjb25zdHJ1Y3RvcihsKXtzdXBlcihudWxsLGwpfWFkanVzdCgpe2NvbnN0e2NvbHVtbkhlYWRlcnNDb3VudDpsLHJvd0hlYWRlcnNDb3VudDphfT10aGlzLnRhYmxlO2xldCBkPXRoaXMucm9vdE5vZGUuZmlyc3RDaGlsZDtpZihsKXtjb25zdHtj''@;'; put 'put ''b2x1bW5zVG9SZW5kZXI6aH09dGhpcy50YWJsZSxmPWgrYTtmb3IobGV0IE09MCxEPWw7TTxEO00rKyl7Zm9yKGQ9dGhpcy5yb290Tm9kZS5jaGlsZE5vZGVzW01dLGR8fChkPXRoaXMudGFibGUucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRyIiksdGhpcy5yb290Tm9kZS5hcHBlbmRD''@;'; put 'put ''aGlsZChkKSksdGhpcy5yZW5kZXJlZE5vZGVzPWQuY2hpbGROb2Rlcy5sZW5ndGg7dGhpcy5yZW5kZXJlZE5vZGVzPGY7KWQuYXBwZW5kQ2hpbGQodGhpcy50YWJsZS5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGgiKSksdGhpcy5yZW5kZXJlZE5vZGVzKz0xO2Zvcig7dGhpcy5yZW5k''@;'; put 'put ''ZXJlZE5vZGVzPmY7KWQucmVtb3ZlQ2hpbGQoZC5sYXN0Q2hpbGQpLHRoaXMucmVuZGVyZWROb2Rlcy09MX1jb25zdCB2PXRoaXMucm9vdE5vZGUuY2hpbGROb2Rlcy5sZW5ndGg7aWYodj5sKWZvcihsZXQgTT1sO008djtNKyspdGhpcy5yb290Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLnJvb3RO''@;'; put 'put ''b2RlLmxhc3RDaGlsZCl9ZWxzZSBkJiZ4cChkKX1yZW5kZXIoKXtjb25zdHtjb2x1bW5IZWFkZXJzQ291bnQ6bH09dGhpcy50YWJsZTt0aGlzLnRhYmxlLmlzQXJpYUVuYWJsZWQoKSYmdm8odGhpcy5yb290Tm9kZSxbWyJyb2xlIiwicm93Z3JvdXAiXV0pO2ZvcihsZXQgYT0wO2E8bDthKz0x''@;'; put 'put ''KXtjb25zdHtjb2x1bW5IZWFkZXJGdW5jdGlvbnM6ZCxjb2x1bW5zVG9SZW5kZXI6aCxyb3dIZWFkZXJzQ291bnQ6Zn09dGhpcy50YWJsZSx2PXRoaXMucm9vdE5vZGUuY2hpbGROb2Rlc1thXTt0aGlzLnRhYmxlLmlzQXJpYUVuYWJsZWQoKSYmdm8odixbWyJyb2xlIiwicm93Il0sQTJlKGEr''@;'; put 'put ''MSldKTtmb3IobGV0IE09LTEqZjtNPGg7TSs9MSl7Y29uc3QgRD10aGlzLnRhYmxlLnJlbmRlcmVkQ29sdW1uVG9Tb3VyY2UoTSksWj12LmNoaWxkTm9kZXNbTStmXTtaLmNsYXNzTmFtZT0iIixaLnJlbW92ZUF0dHJpYnV0ZSgic3R5bGUiKSxqNyhaLFtuZXcgUmVnRXhwKCJhcmlhLSguKiki''@;'; put 'put ''KSxuZXcgUmVnRXhwKCJyb2xlIildKSx0aGlzLnRhYmxlLmlzQXJpYUVuYWJsZWQoKSYmdm8oWixbdiQoTSsxK3RoaXMudGFibGUucm93SGVhZGVyc0NvdW50KSxONygtMSksWyJyb2xlIiwiY29sdW1uaGVhZGVyIl0sLi4uTT49MD9bWyJzY29wZSIsImNvbCJdXTpbWyJyb2xlIiwicm93Il1d''@;'; put 'put ''XSksZFthXShELFosYSl9fX19bGV0IExmZT0hMTtjbGFzcyBxSmUgZXh0ZW5kcyBPRXtjb25zdHJ1Y3RvcihsKXtzdXBlcihudWxsLGwpfWFkanVzdCgpe2NvbnN0e2NvbHVtbnNUb1JlbmRlcjpsLHJvd0hlYWRlcnNDb3VudDphfT10aGlzLnRhYmxlLGQ9bCthO2Zvcig7dGhpcy5yZW5kZXJl''@;'; put 'put ''ZE5vZGVzPGQ7KXRoaXMucm9vdE5vZGUuYXBwZW5kQ2hpbGQodGhpcy50YWJsZS5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY29sIikpLHRoaXMucmVuZGVyZWROb2Rlcys9MTtmb3IoO3RoaXMucmVuZGVyZWROb2Rlcz5kOyl0aGlzLnJvb3ROb2RlLnJlbW92ZUNoaWxkKHRoaXMucm9v''@;'; put 'put ''dE5vZGUubGFzdENoaWxkKSx0aGlzLnJlbmRlcmVkTm9kZXMtPTF9cmVuZGVyKCl7dGhpcy5hZGp1c3QoKTtjb25zdHtjb2x1bW5zVG9SZW5kZXI6bCxyb3dIZWFkZXJzQ291bnQ6YX09dGhpcy50YWJsZTshTGZlJiZsPjFlMyYmKExmZT0hMCxpbChnbGBQZXJmb3JtYW5jZSB0aXA6IEhhbmRz''@;'; put 'put ''b250YWJsZSByZW5kZXJlZCBtb3JlIHRoYW4gMTAwMCB2aXNpYmxlIGNvbHVtbnMuXHgyMAogICAgICAgIENvbnNpZGVyIGxpbWl0aW5nIHRoZSBudW1iZXIgb2YgcmVuZGVyZWQgY29sdW1ucyBieSBzcGVjaWZ5aW5nIHRoZSB0YWJsZSB3aWR0aCBhbmQvb3JceDIwCiAgICAgICAgdHVybmlu''@;'; put 'put ''ZyBvZmYgdGhlICJyZW5kZXJBbGxDb2x1bW5zIiBvcHRpb24uYCkpO2ZvcihsZXQgaD0wO2g8YTtoKyspe2NvbnN0IGY9dGhpcy50YWJsZS5yZW5kZXJlZENvbHVtblRvU291cmNlKGgpLHY9dGhpcy50YWJsZS5jb2x1bW5VdGlscy5nZXRIZWFkZXJXaWR0aChmKTt0aGlzLnJvb3ROb2RlLmNo''@;'; put 'put ''aWxkTm9kZXNbaF0uc3R5bGUud2lkdGg9YCR7dn1weGB9Zm9yKGxldCBoPTA7aDxsO2grKyl7Y29uc3QgZj10aGlzLnRhYmxlLnJlbmRlcmVkQ29sdW1uVG9Tb3VyY2UoaCksdj10aGlzLnRhYmxlLmNvbHVtblV0aWxzLmdldFdpZHRoKGYpO3RoaXMucm9vdE5vZGUuY2hpbGROb2Rlc1toK2Fd''@;'; put 'put ''LnN0eWxlLndpZHRoPWAke3Z9cHhgfWNvbnN0IGQ9dGhpcy5yb290Tm9kZS5maXJzdENoaWxkO2QmJlRpKGQsInJvd0hlYWRlciIpfX1sZXQgT2ZlPSExO2NsYXNzIGVRZSBleHRlbmRzIE9Fe2NvbnN0cnVjdG9yKGwpe3N1cGVyKCJUUiIsbCksZnVuY3Rpb24gWEplKGMsbCxhKXtyZXR1cm4o''@;'; put 'put ''bD1mdW5jdGlvbiBKSmUoYyl7dmFyIGw9ZnVuY3Rpb24gUUplKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlw''@;'; put 'put ''ZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIi''@;'; put 'put ''fShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY30odGhpcywib3JkZXJWaWV3Iix2b2lkIDApLHRoaXMub3JkZXJWaWV3PW5ldyBrZmUobCxhPT50aGlzLm5vZGVzUG9v''@;'; put 'put ''bC5vYnRhaW4oYSkpfWdldFJlbmRlcmVkTm9kZShsKXtyZXR1cm4gdGhpcy5vcmRlclZpZXcuZ2V0Tm9kZShsKX1oYXNTdGFsZUNvbnRlbnQobCl7cmV0dXJuIHRoaXMub3JkZXJWaWV3Lmhhc1N0YWxlQ29udGVudChsKX1yZW5kZXIoKXtjb25zdHtyb3dzVG9SZW5kZXI6bH09dGhpcy50YWJs''@;'; put 'put ''ZTshT2ZlJiZsPjFlMyYmKE9mZT0hMCxpbChnbGBQZXJmb3JtYW5jZSB0aXA6IEhhbmRzb250YWJsZSByZW5kZXJlZCBtb3JlIHRoYW4gMTAwMCB2aXNpYmxlIHJvd3MuXHgyMAogICAgICAgIENvbnNpZGVyIGxpbWl0aW5nIHRoZSBudW1iZXIgb2YgcmVuZGVyZWQgcm93cyBieSBzcGVjaWZ5''@;'; put 'put ''aW5nIHRoZSB0YWJsZSBoZWlnaHQgYW5kL29yXHgyMAogICAgICAgIHR1cm5pbmcgb2ZmIHRoZSAicmVuZGVyQWxsUm93cyIgb3B0aW9uLmApKSx0aGlzLnRhYmxlLmlzQXJpYUVuYWJsZWQoKSYmdm8odGhpcy5yb290Tm9kZSxbWyJyb2xlIiwicm93Z3JvdXAiXV0pLHRoaXMub3JkZXJWaWV3''@;'; put 'put ''LnNldFNpemUobCkuc2V0T2Zmc2V0KHRoaXMudGFibGUucmVuZGVyZWRSb3dUb1NvdXJjZSgwKSkuc3RhcnQoKTtmb3IobGV0IGg9MDtoPGw7aCsrKXt0aGlzLm9yZGVyVmlldy5yZW5kZXIoKTtjb25zdCBmPXRoaXMub3JkZXJWaWV3LmdldEN1cnJlbnROb2RlKCksdj10aGlzLnRhYmxlLnJl''@;'; put 'put ''bmRlcmVkUm93VG9Tb3VyY2UoaCk7dmFyIGEsZDt0aGlzLnRhYmxlLmlzQXJpYUVuYWJsZWQoKSYmdm8oZixbWyJyb2xlIiwicm93Il0sQTJlKHYrKG51bGwhPT0oYT1udWxsPT09KGQ9dGhpcy50YWJsZS5yb3dVdGlscyl8fHZvaWQgMD09PWR8fG51bGw9PT0oZD1kLmRhdGFBY2Nlc3NPYmpl''@;'; put 'put ''Y3QpfHx2b2lkIDA9PT1kP3ZvaWQgMDpkLmNvbHVtbkhlYWRlcnMubGVuZ3RoKSYmdm9pZCAwIT09YT9hOjApKzEpXSksKHYrMSklMj09MD9wbyhmLCJodF9fcm93X2V2ZW4iKXx8KGxvKGYsImh0X19yb3dfb2RkIiksVGkoZiwiaHRfX3Jvd19ldmVuIikpOnBvKGYsImh0X19yb3dfb2RkIil8''@;'; put 'put ''fChsbyhmLCJodF9fcm93X2V2ZW4iKSxUaShmLCJodF9fcm93X29kZCIpKX10aGlzLm9yZGVyVmlldy5lbmQoKX19ZnVuY3Rpb24gUGZlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiB0UWUoYyl7dmFyIGw9ZnVuY3Rpb24gblFlKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1''@;'; put 'put ''cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2''@;'; put 'put ''ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6''@;'; put 'put ''ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyByUWUgZXh0ZW5kcyBPRXtjb25zdHJ1Y3Rvcigpe3N1cGVyKCJURCIpLFBmZSh0aGlzLCJvcmRlclZpZXdzIixuZXcgV2Vha01hcCksUGZlKHRoaXMsInNvdXJjZVJvd0luZGV4IiwwKX1vYnRhaW5PcmRlclZpZXcobCl7bGV0IGE7cmV0''@;'; put 'put ''dXJuIHRoaXMub3JkZXJWaWV3cy5oYXMobCk/YT10aGlzLm9yZGVyVmlld3MuZ2V0KGwpOihhPW5ldyBEZmUobCxkPT50aGlzLm5vZGVzUG9vbC5vYnRhaW4odGhpcy5zb3VyY2VSb3dJbmRleCxkKSx0aGlzLm5vZGVUeXBlKSx0aGlzLm9yZGVyVmlld3Muc2V0KGwsYSkpLGF9cmVuZGVyKCl7''@;'; put 'put ''Y29uc3R7cm93c1RvUmVuZGVyOmwsY29sdW1uc1RvUmVuZGVyOmEscm93czpkLHJvd0hlYWRlcnM6aH09dGhpcy50YWJsZTtmb3IobGV0IE09MDtNPGw7TSsrKXtjb25zdCBEPXRoaXMudGFibGUucmVuZGVyZWRSb3dUb1NvdXJjZShNKSxaPWQuZ2V0UmVuZGVyZWROb2RlKE0pO3RoaXMuc291''@;'; put 'put ''cmNlUm93SW5kZXg9RDtjb25zdCByZT10aGlzLm9idGFpbk9yZGVyVmlldyhaKSxjZT1oLm9idGFpbk9yZGVyVmlldyhaKTtyZS5wcmVwZW5kVmlldyhjZSkuc2V0U2l6ZShhKS5zZXRPZmZzZXQoMCkuc3RhcnQoKTtmb3IobGV0IGJlPTA7YmU8YTtiZSsrKXtyZS5yZW5kZXIoKTtjb25zdCBF''@;'; put 'put ''ZT10aGlzLnRhYmxlLnJlbmRlcmVkQ29sdW1uVG9Tb3VyY2UoYmUpLEJlPXJlLmdldEN1cnJlbnROb2RlKCk7dmFyIGYsdjtwbyhCZSwiaGlkZSIpfHwoQmUuY2xhc3NOYW1lPSIiKSxCZS5yZW1vdmVBdHRyaWJ1dGUoInN0eWxlIiksQmUucmVtb3ZlQXR0cmlidXRlKCJkaXIiKSxqNyhCZSxb''@;'; put 'put ''bmV3IFJlZ0V4cCgiYXJpYS0oLiopIiksbmV3IFJlZ0V4cCgicm9sZSIpXSksdGhpcy50YWJsZS5jZWxsUmVuZGVyZXIoRCxFZSxCZSksdGhpcy50YWJsZS5pc0FyaWFFbmFibGVkKCkmJnZvKEJlLFsuLi5CZS5oYXNBdHRyaWJ1dGUoInJvbGUiKT9bXTpbWyJyb2xlIiwiZ3JpZGNlbGwiXV0s''@;'; put 'put ''TjcoLTEpLHYkKEVlKyhudWxsIT09KGY9bnVsbD09PSh2PXRoaXMudGFibGUucm93VXRpbHMpfHx2b2lkIDA9PT12fHxudWxsPT09KHY9di5kYXRhQWNjZXNzT2JqZWN0KXx8dm9pZCAwPT09dj92b2lkIDA6di5yb3dIZWFkZXJzLmxlbmd0aCkmJnZvaWQgMCE9PWY/ZjowKSsxKV0pfXJlLmVu''@;'; put 'put ''ZCgpfX19ZnVuY3Rpb24gSnUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIGlRZShjKXt2YXIgbD1mdW5jdGlvbiBhUWUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwo''@;'; put 'put ''YyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIp''@;'; put 'put ''O3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIG9RZXtjb25zdHJ1Y3RvcihsKXtsZXR7Y2VsbFJl''@;'; put 'put ''bmRlcmVyOmEsc3R5bGVzSGFuZGxlcjpkfT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e307SnUodGhpcywicm9vdE5vZGUiLHZvaWQgMCksSnUodGhpcywicm9vdERvY3VtZW50Iix2b2lkIDApLEp1KHRoaXMsInJvd0hlYWRlcnMiLG51''@;'; put 'put ''bGwpLEp1KHRoaXMsImNvbHVtbkhlYWRlcnMiLG51bGwpLEp1KHRoaXMsImNvbEdyb3VwIixudWxsKSxKdSh0aGlzLCJyb3dzIixudWxsKSxKdSh0aGlzLCJjZWxscyIsbnVsbCksSnUodGhpcywicm93RmlsdGVyIixudWxsKSxKdSh0aGlzLCJjb2x1bW5GaWx0ZXIiLG51bGwpLEp1KHRoaXMs''@;'; put 'put ''InJvd1V0aWxzIixudWxsKSxKdSh0aGlzLCJjb2x1bW5VdGlscyIsbnVsbCksSnUodGhpcywicm93c1RvUmVuZGVyIiwwKSxKdSh0aGlzLCJjb2x1bW5zVG9SZW5kZXIiLDApLEp1KHRoaXMsInJvd0hlYWRlckZ1bmN0aW9ucyIsW10pLEp1KHRoaXMsInJvd0hlYWRlcnNDb3VudCIsMCksSnUo''@;'; put 'put ''dGhpcywiY29sdW1uSGVhZGVyRnVuY3Rpb25zIixbXSksSnUodGhpcywiY29sdW1uSGVhZGVyc0NvdW50IiwwKSxKdSh0aGlzLCJjZWxsUmVuZGVyZXIiLHZvaWQgMCksSnUodGhpcywiYWN0aXZlT3ZlcmxheU5hbWUiLHZvaWQgMCksSnUodGhpcywic3R5bGVzSGFuZGxlciIsdm9pZCAwKSx0''@;'; put 'put ''aGlzLnJvb3ROb2RlPWwsdGhpcy5yb290RG9jdW1lbnQ9dGhpcy5yb290Tm9kZS5vd25lckRvY3VtZW50LHRoaXMuY2VsbFJlbmRlcmVyPWEsdGhpcy5zdHlsZXNIYW5kbGVyPWR9c2V0QWN0aXZlT3ZlcmxheU5hbWUobCl7dGhpcy5hY3RpdmVPdmVybGF5TmFtZT1sfXNldEF4aXNVdGlscyhs''@;'; put 'put ''LGEpe3RoaXMucm93VXRpbHM9bCx0aGlzLmNvbHVtblV0aWxzPWF9c2V0Vmlld3BvcnRTaXplKGwsYSl7dGhpcy5yb3dzVG9SZW5kZXI9bCx0aGlzLmNvbHVtbnNUb1JlbmRlcj1hfXNldEZpbHRlcnMobCxhKXt0aGlzLnJvd0ZpbHRlcj1sLHRoaXMuY29sdW1uRmlsdGVyPWF9c2V0SGVhZGVy''@;'; put 'put ''Q29udGVudFJlbmRlcmVycyhsLGEpe3RoaXMucm93SGVhZGVyRnVuY3Rpb25zPWwsdGhpcy5yb3dIZWFkZXJzQ291bnQ9bC5sZW5ndGgsdGhpcy5jb2x1bW5IZWFkZXJGdW5jdGlvbnM9YSx0aGlzLmNvbHVtbkhlYWRlcnNDb3VudD1hLmxlbmd0aH1zZXRSZW5kZXJlcnMoKXtsZXR7cm93SGVh''@;'; put 'put ''ZGVyczpsLGNvbHVtbkhlYWRlcnM6YSxjb2xHcm91cDpkLHJvd3M6aCxjZWxsczpmfT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e307bC5zZXRUYWJsZSh0aGlzKSxhLnNldFRhYmxlKHRoaXMpLGQuc2V0VGFibGUodGhpcyksaC5zZXRU''@;'; put 'put ''YWJsZSh0aGlzKSxmLnNldFRhYmxlKHRoaXMpLHRoaXMucm93SGVhZGVycz1sLHRoaXMuY29sdW1uSGVhZGVycz1hLHRoaXMuY29sR3JvdXA9ZCx0aGlzLnJvd3M9aCx0aGlzLmNlbGxzPWZ9cmVuZGVyZWRSb3dUb1NvdXJjZShsKXtyZXR1cm4gdGhpcy5yb3dGaWx0ZXIucmVuZGVyZWRUb1Nv''@;'; put 'put ''dXJjZShsKX1yZW5kZXJlZENvbHVtblRvU291cmNlKGwpe3JldHVybiB0aGlzLmNvbHVtbkZpbHRlci5yZW5kZXJlZFRvU291cmNlKGwpfWlzQXJpYUVuYWJsZWQoKXtyZXR1cm4gdGhpcy5yb3dVdGlscy53dFNldHRpbmdzLmdldFNldHRpbmcoImFyaWFUYWdzIil9cmVuZGVyKCl7dGhpcy5j''@;'; put 'put ''b2xHcm91cC5hZGp1c3QoKSx0aGlzLmNvbHVtbkhlYWRlcnMuYWRqdXN0KCksdGhpcy5yb3dzLmFkanVzdCgpLHRoaXMucm93SGVhZGVycy5hZGp1c3QoKSx0aGlzLmNvbHVtbkhlYWRlcnMucmVuZGVyKCksdGhpcy5yb3dzLnJlbmRlcigpLHRoaXMucm93SGVhZGVycy5yZW5kZXIoKSx0aGlz''@;'; put 'put ''LmNlbGxzLnJlbmRlcigpLHRoaXMuY29sdW1uVXRpbHMuY2FsY3VsYXRlV2lkdGhzKCksdGhpcy5jb2xHcm91cC5yZW5kZXIoKTtjb25zdHtyb3dzVG9SZW5kZXI6bCxyb3dzOmF9PXRoaXM7Zm9yKGxldCBkPTA7ZDxsO2QrKyl7Y29uc3QgaD1hLmdldFJlbmRlcmVkTm9kZShkKSxmPXRoaXMu''@;'; put 'put ''cm93VXRpbHM7aWYoaC5maXJzdENoaWxkKXtjb25zdCB2PXRoaXMucmVuZGVyZWRSb3dUb1NvdXJjZShkKSxNPWYuZ2V0SGVpZ2h0QnlPdmVybGF5TmFtZSh2LHRoaXMuYWN0aXZlT3ZlcmxheU5hbWUpLFo9dGhpcy5zdHlsZXNIYW5kbGVyLmFyZUNlbGxzQm9yZGVyQm94KCk/MDoxO2guZmly''@;'; put 'put ''c3RDaGlsZC5zdHlsZS5oZWlnaHQ9TT9NLVorInB4IjoiIn19fX1jbGFzcyBzUWV7Y29uc3RydWN0b3IoKXtsZXR7VEFCTEU6bCxUSEVBRDphLENPTEdST1VQOmQsVEJPRFk6aCxyb3dVdGlsczpmLGNvbHVtblV0aWxzOnYsY2VsbFJlbmRlcmVyOk0sc3R5bGVzSGFuZGxlcjpEfT1hcmd1bWVu''@;'; put 'put ''dHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e307dGhpcy5yZW5kZXJlcj1uZXcgb1FlKGwse2NlbGxSZW5kZXJlcjpNLHN0eWxlc0hhbmRsZXI6RH0pLHRoaXMucmVuZGVyZXIuc2V0UmVuZGVyZXJzKHtyb3dIZWFkZXJzOm5ldyAkSmUsY29sdW1uSGVh''@;'; put 'put ''ZGVyczpuZXcgS0plKGEpLGNvbEdyb3VwOm5ldyBxSmUoZCkscm93czpuZXcgZVFlKGgpLGNlbGxzOm5ldyByUWV9KSx0aGlzLnJlbmRlcmVyLnNldEF4aXNVdGlscyhmLHYpfXNldEFjdGl2ZU92ZXJsYXlOYW1lKGwpe3JldHVybiB0aGlzLnJlbmRlcmVyLnNldEFjdGl2ZU92ZXJsYXlOYW1l''@;'; put 'put ''KGwpLHRoaXN9c2V0RmlsdGVycyhsLGEpe3JldHVybiB0aGlzLnJlbmRlcmVyLnNldEZpbHRlcnMobCxhKSx0aGlzfXNldFZpZXdwb3J0U2l6ZShsLGEpe3JldHVybiB0aGlzLnJlbmRlcmVyLnNldFZpZXdwb3J0U2l6ZShsLGEpLHRoaXN9c2V0SGVhZGVyQ29udGVudFJlbmRlcmVycyhsLGEp''@;'; put 'put ''e3JldHVybiB0aGlzLnJlbmRlcmVyLnNldEhlYWRlckNvbnRlbnRSZW5kZXJlcnMobCxhKSx0aGlzfWFkanVzdCgpe3RoaXMucmVuZGVyZXIuYWRqdXN0KCl9cmVuZGVyKCl7dGhpcy5yZW5kZXJlci5yZW5kZXIoKX19ZnVuY3Rpb24gdUsoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIGxRZShj''@;'; put 'put ''KXt2YXIgbD1mdW5jdGlvbiBjUWUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0''@;'; put 'put ''aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0''@;'; put 'put ''LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIHVRZXtjb25zdHJ1Y3RvcihsLGEpe3VLKHRoaXMsImRhdGFBY2Nlc3NPYmplY3QiLHZvaWQgMCksdUsodGhpcywid3RTZXR0aW5ncyIs''@;'; put 'put ''dm9pZCAwKSx1Syh0aGlzLCJoZWFkZXJXaWR0aHMiLG5ldyBNYXApLHRoaXMuZGF0YUFjY2Vzc09iamVjdD1sLHRoaXMud3RTZXR0aW5ncz1hfWdldFdpZHRoKGwpe3JldHVybiB0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiY29sdW1uV2lkdGgiLGwpfHx0aGlzLnd0U2V0dGluZ3MuZ2V0''@;'; put 'put ''U2V0dGluZygiZGVmYXVsdENvbHVtbldpZHRoIil9Z2V0SGVhZGVySGVpZ2h0KGwpe2xldCBhPXRoaXMuZGF0YUFjY2Vzc09iamVjdC5zdHlsZXNIYW5kbGVyLmdldERlZmF1bHRSb3dIZWlnaHQoKTtjb25zdCBkPXRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFZpZXdwb3J0Lm92ZXJzaXplZENv''@;'; put 'put ''bHVtbkhlYWRlcnNbbF07cmV0dXJuIHZvaWQgMCE9PWQmJihhPWE/TWF0aC5tYXgoYSxkKTpkKSxhfWdldEhlYWRlcldpZHRoKGwpe3JldHVybiB0aGlzLmhlYWRlcldpZHRocy5nZXQodGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0VGFibGUuY29sdW1uRmlsdGVyLnNvdXJjZVRvUmVuZGVyZWQo''@;'; put 'put ''bCkpfWNhbGN1bGF0ZVdpZHRocygpe2NvbnN0e3d0U2V0dGluZ3M6bH09dGhpcztsZXQgYT1sLmdldFNldHRpbmcoInJvd0hlYWRlcldpZHRoIik7aWYoYT1sLmdldFNldHRpbmcoIm9uTW9kaWZ5Um93SGVhZGVyV2lkdGgiLGEpLG51bGwhPWEpe2NvbnN0IGQ9bC5nZXRTZXR0aW5nKCJyb3dI''@;'; put 'put ''ZWFkZXJzIikubGVuZ3RoLGg9bC5nZXRTZXR0aW5nKCJkZWZhdWx0Q29sdW1uV2lkdGgiKTtmb3IobGV0IGY9MDtmPGQ7ZisrKXtsZXQgdj1BcnJheS5pc0FycmF5KGEpP2FbZl06YTt2PXY/P2gsdGhpcy5oZWFkZXJXaWR0aHMuc2V0KGYsdil9fX19ZnVuY3Rpb24gRmZlKGMsbCxhKXtyZXR1''@;'; put 'put ''cm4obD1mdW5jdGlvbiBkUWUoYyl7dmFyIGw9ZnVuY3Rpb24gaFFlKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9''@;'; put 'put ''dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDps''@;'; put 'put ''KyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBmUWV7Y29uc3RydWN0b3IobCxhKXtGZmUodGhpcywiZGF0YUFjY2Vzc09iamVjdCIsdm9pZCAwKSxG''@;'; put 'put ''ZmUodGhpcywid3RTZXR0aW5ncyIsdm9pZCAwKSx0aGlzLmRhdGFBY2Nlc3NPYmplY3Q9bCx0aGlzLnd0U2V0dGluZ3M9YX1nZXRIZWlnaHQobCl7bGV0IGE9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInJvd0hlaWdodCIsbCk7Y29uc3QgZD10aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RW''@;'; put 'put ''aWV3cG9ydC5vdmVyc2l6ZWRSb3dzW2xdO3JldHVybiB2b2lkIDAhPT1kJiYoYT12b2lkIDA9PT1hP2Q6TWF0aC5tYXgoYSxkKSksYX1nZXRIZWlnaHRCeU92ZXJsYXlOYW1lKGwsYSl7bGV0IGQ9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInJvd0hlaWdodEJ5T3ZlcmxheU5hbWUiLGws''@;'; put 'put ''YSk7Y29uc3QgaD10aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RWaWV3cG9ydC5vdmVyc2l6ZWRSb3dzW2xdO3JldHVybiB2b2lkIDAhPT1oJiYoZD12b2lkIDA9PT1kP2g6TWF0aC5tYXgoZCxoKSksZH19Y29uc3QgJDc9InRvcCIsSXA9ImJvdHRvbSIsSzc9ImlubGluZV9zdGFydCIscTc9InRv''@;'; put 'put ''cF9pbmxpbmVfc3RhcnRfY29ybmVyIixCbT0iYm90dG9tX2lubGluZV9zdGFydF9jb3JuZXIiLEhmZT1bJDcsSXAsSzcscTcsQm1dLHBRZT1uZXcgTWFwKFtbJDcsYGh0X2Nsb25lXyR7JDd9YF0sW0lwLGBodF9jbG9uZV8ke0lwfWBdLFtLNyxgaHRfY2xvbmVfJHtLN30gaHRfY2xvbmVfbGVm''@;'; put 'put ''dGBdLFtxNyxgaHRfY2xvbmVfJHtxN30gaHRfY2xvbmVfdG9wX2xlZnRfY29ybmVyYF0sW0JtLGBodF9jbG9uZV8ke0JtfSBodF9jbG9uZV9ib3R0b21fbGVmdF9jb3JuZXJgXV0pO2Z1bmN0aW9uIFJwKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBnUWUoYyl7dmFyIGw9ZnVuY3Rpb24gbVFl''@;'; put 'put ''KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigi''@;'; put 'put ''QEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGws''@;'; put 'put ''e3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jb25zdCBtXz1jbGFzcyB2UWV7Y29uc3RydWN0b3IobCxhLGQsaCxmKXtScCh0aGlzLCJ3dFNldHRpbmdzIixudWxsKSxScCh0aGlzLCJkb21CaW5kaW5ncyIsdm9pZCAwKSxScCh0''@;'; put 'put ''aGlzLCJUQk9EWSIsbnVsbCksUnAodGhpcywiVEhFQUQiLG51bGwpLFJwKHRoaXMsIkNPTEdST1VQIixudWxsKSxScCh0aGlzLCJoYXNUYWJsZUhlaWdodCIsITApLFJwKHRoaXMsImhhc1RhYmxlV2lkdGgiLCEwKSxScCh0aGlzLCJpc1RhYmxlVmlzaWJsZSIsITEpLFJwKHRoaXMsInRhYmxl''@;'; put 'put ''T2Zmc2V0IiwwKSxScCh0aGlzLCJob2xkZXJPZmZzZXQiLDApLHRoaXMuZG9tQmluZGluZ3M9ZCx0aGlzLmlzTWFzdGVyPSJtYXN0ZXIiPT09Zix0aGlzLm5hbWU9Zix0aGlzLmRhdGFBY2Nlc3NPYmplY3Q9bCx0aGlzLmZhY2FkZUdldHRlcj1hLHRoaXMud3RTZXR0aW5ncz1oLHRoaXMuaW5z''@;'; put 'put ''dGFuY2U9dGhpcy5kYXRhQWNjZXNzT2JqZWN0LndvdCx0aGlzLndvdD10aGlzLmRhdGFBY2Nlc3NPYmplY3Qud290LHRoaXMuVEFCTEU9ZC5yb290VGFibGUseSQodGhpcy5UQUJMRSksdGhpcy5zcHJlYWRlcj10aGlzLmNyZWF0ZVNwcmVhZGVyKHRoaXMuVEFCTEUpLHRoaXMuaGlkZXI9dGhp''@;'; put 'put ''cy5jcmVhdGVIaWRlcih0aGlzLnNwcmVhZGVyKSx0aGlzLmhvbGRlcj10aGlzLmNyZWF0ZUhvbGRlcih0aGlzLmhpZGVyKSx0aGlzLnd0Um9vdEVsZW1lbnQ9dGhpcy5ob2xkZXIucGFyZW50Tm9kZSx0aGlzLmlzTWFzdGVyJiZ0aGlzLmFsaWduT3ZlcmxheXNXaXRoVHJpbW1pbmdDb250YWlu''@;'; put 'put ''ZXIoKSx0aGlzLmZpeFRhYmxlRG9tVHJlZSgpLHRoaXMucm93RmlsdGVyPW51bGwsdGhpcy5jb2x1bW5GaWx0ZXI9bnVsbCx0aGlzLmNvcnJlY3RIZWFkZXJXaWR0aD0hMTtjb25zdCB2PXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nUHVyZSgicm93SGVhZGVyV2lkdGgiKTt0aGlzLnd0U2V0''@;'; put 'put ''dGluZ3MudXBkYXRlKCJyb3dIZWFkZXJXaWR0aCIsKCk9PnRoaXMuX21vZGlmeVJvd0hlYWRlcldpZHRoKHYpKSx0aGlzLnJvd1V0aWxzPW5ldyBmUWUodGhpcy5kYXRhQWNjZXNzT2JqZWN0LHRoaXMud3RTZXR0aW5ncyksdGhpcy5jb2x1bW5VdGlscz1uZXcgdVFlKHRoaXMuZGF0YUFjY2Vz''@;'; put 'put ''c09iamVjdCx0aGlzLnd0U2V0dGluZ3MpLHRoaXMudGFibGVSZW5kZXJlcj1uZXcgc1FlKHtUQUJMRTp0aGlzLlRBQkxFLFRIRUFEOnRoaXMuVEhFQUQsQ09MR1JPVVA6dGhpcy5DT0xHUk9VUCxUQk9EWTp0aGlzLlRCT0RZLHJvd1V0aWxzOnRoaXMucm93VXRpbHMsY29sdW1uVXRpbHM6dGhp''@;'; put 'put ''cy5jb2x1bW5VdGlscyxjZWxsUmVuZGVyZXI6dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmdQdXJlKCJjZWxsUmVuZGVyZXIiKSxzdHlsZXNIYW5kbGVyOnRoaXMuZGF0YUFjY2Vzc09iamVjdC5zdHlsZXNIYW5kbGVyfSl9aXMobCl7cmV0dXJuIHRoaXMubmFtZT09PWx9Zml4VGFibGVEb21U''@;'; put 'put ''cmVlKCl7Y29uc3QgbD10aGlzLmRvbUJpbmRpbmdzLnJvb3REb2N1bWVudDt0aGlzLlRCT0RZPXRoaXMuVEFCTEUucXVlcnlTZWxlY3RvcigidGJvZHkiKSx0aGlzLlRCT0RZfHwodGhpcy5UQk9EWT1sLmNyZWF0ZUVsZW1lbnQoInRib2R5IiksdGhpcy5UQUJMRS5hcHBlbmRDaGlsZCh0aGlz''@;'; put 'put ''LlRCT0RZKSksdGhpcy5USEVBRD10aGlzLlRBQkxFLnF1ZXJ5U2VsZWN0b3IoInRoZWFkIiksdGhpcy5USEVBRHx8KHRoaXMuVEhFQUQ9bC5jcmVhdGVFbGVtZW50KCJ0aGVhZCIpLHRoaXMuVEFCTEUuaW5zZXJ0QmVmb3JlKHRoaXMuVEhFQUQsdGhpcy5UQk9EWSkpLHRoaXMuQ09MR1JPVVA9''@;'; put 'put ''dGhpcy5UQUJMRS5xdWVyeVNlbGVjdG9yKCJjb2xncm91cCIpLHRoaXMuQ09MR1JPVVB8fCh0aGlzLkNPTEdST1VQPWwuY3JlYXRlRWxlbWVudCgiY29sZ3JvdXAiKSx0aGlzLlRBQkxFLmluc2VydEJlZm9yZSh0aGlzLkNPTEdST1VQLHRoaXMuVEhFQUQpKX1jcmVhdGVTcHJlYWRlcihsKXtj''@;'; put 'put ''b25zdCBhPWwucGFyZW50Tm9kZTtsZXQgZDtyZXR1cm4oIWF8fGEubm9kZVR5cGUhPT1Ob2RlLkVMRU1FTlRfTk9ERXx8IXBvKGEsInd0SG9sZGVyIikpJiYoZD10aGlzLmRvbUJpbmRpbmdzLnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxkLmNsYXNzTmFtZT0id3RTcHJlYWRl''@;'; put 'put ''ciIsYSYmYS5pbnNlcnRCZWZvcmUoZCxsKSxkLmFwcGVuZENoaWxkKGwpKSxkLnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSIsdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImFyaWFUYWdzIikmJnZvKGQsW1sicm9sZSIsInByZXNlbnRhdGlvbiJdXSksZH1jcmVhdGVIaWRlcihsKXtjb25z''@;'; put 'put ''dCBhPWwucGFyZW50Tm9kZTtsZXQgZDtyZXR1cm4oIWF8fGEubm9kZVR5cGUhPT1Ob2RlLkVMRU1FTlRfTk9ERXx8IXBvKGEsInd0SG9sZGVyIikpJiYoZD10aGlzLmRvbUJpbmRpbmdzLnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxkLmNsYXNzTmFtZT0id3RIaWRlciIsYSYm''@;'; put 'put ''YS5pbnNlcnRCZWZvcmUoZCxsKSxkLmFwcGVuZENoaWxkKGwpKSx0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiYXJpYVRhZ3MiKSYmdm8oZCxbWyJyb2xlIiwicHJlc2VudGF0aW9uIl1dKSxkfWNyZWF0ZUhvbGRlcihsKXtjb25zdCBhPWwucGFyZW50Tm9kZTtsZXQgZDtyZXR1cm4oIWF8''@;'; put 'put ''fGEubm9kZVR5cGUhPT1Ob2RlLkVMRU1FTlRfTk9ERXx8IXBvKGEsInd0SG9sZGVyIikpJiYoZD10aGlzLmRvbUJpbmRpbmdzLnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxkLnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSIsZC5jbGFzc05hbWU9Ind0SG9sZGVyIix2byhkLFtO''@;'; put 'put ''NygtMSldKSxhJiZhLmluc2VydEJlZm9yZShkLGwpLHRoaXMuaXNNYXN0ZXImJihkLnBhcmVudE5vZGUuY2xhc3NOYW1lKz0iaHRfbWFzdGVyIGhhbmRzb250YWJsZSIsZC5wYXJlbnROb2RlLnNldEF0dHJpYnV0ZSgiZGlyIix0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZ1B1cmUoInJ0bE1v''@;'; put 'put ''ZGUiKT8icnRsIjoibHRyIiksdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImFyaWFUYWdzIikmJnZvKGQucGFyZW50Tm9kZSxbWyJyb2xlIiwicHJlc2VudGF0aW9uIl1dKSksZC5hcHBlbmRDaGlsZChsKSksdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImFyaWFUYWdzIikmJnZvKGQs''@;'; put 'put ''W1sicm9sZSIsInByZXNlbnRhdGlvbiJdXSksZH1kcmF3KCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTtjb25zdHt3dFNldHRpbmdzOmF9PXRoaXMse3d0T3ZlcmxheXM6ZCx3dFZpZXdwb3J0Omh9PXRoaXMuZGF0YUFjY2Vz''@;'; put 'put ''c09iamVjdCxmPWEuZ2V0U2V0dGluZygidG90YWxSb3dzIiksdj1hLmdldFNldHRpbmcoInRvdGFsQ29sdW1ucyIpLE09YS5nZXRTZXR0aW5nKCJyb3dIZWFkZXJzIiksRD1NLmxlbmd0aCxaPWEuZ2V0U2V0dGluZygiY29sdW1uSGVhZGVycyIpLHJlPVoubGVuZ3RoO2xldCBjZT1sO2lmKHRo''@;'; put 'put ''aXMuaXNNYXN0ZXImJihkLmJlZm9yZURyYXcoKSx0aGlzLmhvbGRlck9mZnNldD1VMCh0aGlzLmhvbGRlciksY2U9aC5jcmVhdGVDYWxjdWxhdG9ycyhjZSksRCYmIWEuZ2V0U2V0dGluZygiZml4ZWRDb2x1bW5zU3RhcnQiKSkpe2NvbnN0IEVlPWQuaW5saW5lU3RhcnRPdmVybGF5LmdldFNj''@;'; put 'put ''cm9sbFBvc2l0aW9uKCksQmU9dGhpcy5jb3JyZWN0SGVhZGVyV2lkdGg7dGhpcy5jb3JyZWN0SGVhZGVyV2lkdGg9MCE9PUVlLEJlIT09dGhpcy5jb3JyZWN0SGVhZGVyV2lkdGgmJihjZT0hMSl9aWYoY2UpdGhpcy5pc01hc3RlciYmZC5yZWZyZXNoKCEwKTtlbHNle3RoaXMudGFibGVPZmZz''@;'; put 'put ''ZXQ9dGhpcy5pc01hc3Rlcj9VMCh0aGlzLlRBQkxFKTp0aGlzLmRhdGFBY2Nlc3NPYmplY3QucGFyZW50VGFibGVPZmZzZXQ7Y29uc3QgRWU9TWF0aC5tYXgodGhpcy5nZXRGaXJzdFJlbmRlcmVkUm93KCksMCksQmU9TWF0aC5tYXgodGhpcy5nZXRGaXJzdFJlbmRlcmVkQ29sdW1uKCksMCk7''@;'; put 'put ''dGhpcy5yb3dGaWx0ZXI9bmV3IE1KZShFZSxmLHJlKSx0aGlzLmNvbHVtbkZpbHRlcj1uZXcgX0plKEJlLHYsRCk7bGV0IHFlPSEwO2lmKHRoaXMuaXNNYXN0ZXIpe3RoaXMuYWxpZ25PdmVybGF5c1dpdGhUcmltbWluZ0NvbnRhaW5lcigpO2NvbnN0IHJ0PXt9O3RoaXMud3RTZXR0aW5ncy5n''@;'; put 'put ''ZXRTZXR0aW5nKCJiZWZvcmVEcmF3IiwhMCxydCkscWU9ITAhPT1ydC5za2lwUmVuZGVyfXFlJiYodGhpcy50YWJsZVJlbmRlcmVyLnNldEhlYWRlckNvbnRlbnRSZW5kZXJlcnMoTSxaKSwodGhpcy5pcyhJcCl8fHRoaXMuaXMoQm0pKSYmdGhpcy50YWJsZVJlbmRlcmVyLnNldEhlYWRlckNv''@;'; put 'put ''bnRlbnRSZW5kZXJlcnMoTSxbXSksdGhpcy5yZXNldE92ZXJzaXplZFJvd3MoKSx0aGlzLnRhYmxlUmVuZGVyZXIuc2V0QWN0aXZlT3ZlcmxheU5hbWUodGhpcy5uYW1lKS5zZXRWaWV3cG9ydFNpemUodGhpcy5nZXRSZW5kZXJlZFJvd3NDb3VudCgpLHRoaXMuZ2V0UmVuZGVyZWRDb2x1bW5z''@;'; put 'put ''Q291bnQoKSkuc2V0RmlsdGVycyh0aGlzLnJvd0ZpbHRlcix0aGlzLmNvbHVtbkZpbHRlcikucmVuZGVyKCksdGhpcy5pc01hc3RlciYmdGhpcy5tYXJrT3ZlcnNpemVkQ29sdW1uSGVhZGVycygpLHRoaXMuYWRqdXN0Q29sdW1uSGVhZGVySGVpZ2h0cygpLCh0aGlzLmlzTWFzdGVyfHx0aGlz''@;'; put 'put ''LmlzKElwKSkmJnRoaXMubWFya092ZXJzaXplZFJvd3MoKSx0aGlzLmlzTWFzdGVyPyh0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZXh0ZXJuYWxSb3dDYWxjdWxhdG9yIil8fGguY3JlYXRlVmlzaWJsZUNhbGN1bGF0b3JzKCksZC5yZWZyZXNoKCExKSxkLmFwcGx5VG9ET00oKSx0aGlz''@;'; put 'put ''Lnd0U2V0dGluZ3MuZ2V0U2V0dGluZygib25EcmF3IiwhMCkpOnRoaXMuaXMoSXApJiZ0aGlzLmRhdGFBY2Nlc3NPYmplY3QuY2xvbmVTb3VyY2Uud3RPdmVybGF5cy5hZGp1c3RFbGVtZW50c1NpemUoKSl9bGV0IGJlPSExO3JldHVybiB0aGlzLmlzTWFzdGVyJiYoYmU9ZC50b3BPdmVybGF5''@;'; put 'put ''LnJlc2V0Rml4ZWRQb3NpdGlvbigpLGQuYm90dG9tT3ZlcmxheS5jbG9uZSYmKGJlPWQuYm90dG9tT3ZlcmxheS5yZXNldEZpeGVkUG9zaXRpb24oKXx8YmUpLGJlPWQuaW5saW5lU3RhcnRPdmVybGF5LnJlc2V0Rml4ZWRQb3NpdGlvbigpfHxiZSxkLnRvcElubGluZVN0YXJ0Q29ybmVyT3Zl''@;'; put 'put ''cmxheSYmZC50b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXkucmVzZXRGaXhlZFBvc2l0aW9uKCksZC5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXkmJmQuYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LmNsb25lJiZkLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5y''@;'; put 'put ''ZXNldEZpeGVkUG9zaXRpb24oKSksYmU/KGQucmVmcmVzaEFsbCgpLGQuYWRqdXN0RWxlbWVudHNTaXplKCkpOnRoaXMuZGF0YUFjY2Vzc09iamVjdC5zZWxlY3Rpb25NYW5hZ2VyLnNldEFjdGl2ZU92ZXJsYXkodGhpcy5mYWNhZGVHZXR0ZXIoKSkucmVuZGVyKGNlKSx0aGlzLmlzTWFzdGVy''@;'; put 'put ''JiZkLmFmdGVyRHJhdygpLHRoaXMuZGF0YUFjY2Vzc09iamVjdC5kcmF3bj0hMCx0aGlzfW1hcmtJZk92ZXJzaXplZENvbHVtbkhlYWRlcihsKXtjb25zdCBhPXRoaXMuY29sdW1uRmlsdGVyLnJlbmRlcmVkVG9Tb3VyY2UobCk7bGV0IGQ9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImNv''@;'; put 'put ''bHVtbkhlYWRlcnMiKS5sZW5ndGg7Y29uc3QgaD10aGlzLmRhdGFBY2Nlc3NPYmplY3Quc3R5bGVzSGFuZGxlci5nZXREZWZhdWx0Um93SGVpZ2h0KCk7bGV0IGYsdixNO2NvbnN0IEQ9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImNvbHVtbkhlYWRlckhlaWdodCIpfHxbXTtmb3IoO2Q7''@;'; put 'put ''KWQtPTEsZj10aGlzLmdldENvbHVtbkhlYWRlckhlaWdodChkKSx2PXRoaXMuZ2V0Q29sdW1uSGVhZGVyKGEsZCksdiYmKE09b18odiksKCFmJiZoPE18fGY8TSkmJih0aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RWaWV3cG9ydC5vdmVyc2l6ZWRDb2x1bW5IZWFkZXJzW2RdPU0pLEFycmF5Lmlz''@;'; put 'put ''QXJyYXkoRCk/bnVsbCE9RFtkXSYmKHRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFZpZXdwb3J0Lm92ZXJzaXplZENvbHVtbkhlYWRlcnNbZF09RFtkXSk6aXNOYU4oRCl8fCh0aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RWaWV3cG9ydC5vdmVyc2l6ZWRDb2x1bW5IZWFkZXJzW2RdPUQpLHRoaXMu''@;'; put 'put ''ZGF0YUFjY2Vzc09iamVjdC53dFZpZXdwb3J0Lm92ZXJzaXplZENvbHVtbkhlYWRlcnNbZF08KERbZF18fEQpJiYodGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0Vmlld3BvcnQub3ZlcnNpemVkQ29sdW1uSGVhZGVyc1tkXT1EW2RdfHxEKSl9YWRqdXN0Q29sdW1uSGVhZGVySGVpZ2h0cygpe2Nv''@;'; put 'put ''bnN0e3d0U2V0dGluZ3M6bH09dGhpcyxhPXRoaXMuVEhFQUQuY2hpbGROb2RlcyxkPXRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFZpZXdwb3J0Lm92ZXJzaXplZENvbHVtbkhlYWRlcnM7Zm9yKGxldCBmPTAsdj1sLmdldFNldHRpbmcoImNvbHVtbkhlYWRlcnMiKS5sZW5ndGg7Zjx2O2YrKylp''@;'; put 'put ''ZihkW2ZdKXtpZighYVtmXXx8MD09PWFbZl0uY2hpbGROb2Rlcy5sZW5ndGgpcmV0dXJuO2FbZl0uY2hpbGROb2Rlc1swXS5zdHlsZS5oZWlnaHQ9YCR7ZFtmXX1weGB9fXJlc2V0T3ZlcnNpemVkUm93cygpe2NvbnN0e3d0U2V0dGluZ3M6bH09dGhpcyx7d3RWaWV3cG9ydDphfT10aGlzLmRh''@;'; put 'put ''dGFBY2Nlc3NPYmplY3Q7aWYoKHRoaXMuaXNNYXN0ZXJ8fHRoaXMuaXMoSXApKSYmIWwuZ2V0U2V0dGluZygiZXh0ZXJuYWxSb3dDYWxjdWxhdG9yIikpe2NvbnN0IGQ9dGhpcy5nZXRSZW5kZXJlZFJvd3NDb3VudCgpO2ZvcihsZXQgaD0wO2g8ZDtoKyspe2NvbnN0IGY9dGhpcy5yb3dGaWx0''@;'; put 'put ''ZXIucmVuZGVyZWRUb1NvdXJjZShoKTthLm92ZXJzaXplZFJvd3MmJmEub3ZlcnNpemVkUm93c1tmXSYmKGEub3ZlcnNpemVkUm93c1tmXT12b2lkIDApfX19Z2V0Q2VsbChsKXtsZXQgYT1sLnJvdyxkPWwuY29sO2NvbnN0IGg9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoIm9uTW9kaWZ5''@;'; put 'put ''R2V0Q2VsbENvb3JkcyIsYSxkLCF0aGlzLmlzTWFzdGVyLCJyZW5kZXIiKTtpZihoJiZBcnJheS5pc0FycmF5KGgpJiYoW2EsZF09aCksdGhpcy5pc1Jvd0JlZm9yZVJlbmRlcmVkUm93cyhhKSlyZXR1cm4tMTtpZih0aGlzLmlzUm93QWZ0ZXJSZW5kZXJlZFJvd3MoYSkpcmV0dXJuLTI7aWYo''@;'; put 'put ''dGhpcy5pc0NvbHVtbkJlZm9yZVJlbmRlcmVkQ29sdW1ucyhkKSlyZXR1cm4tMztpZih0aGlzLmlzQ29sdW1uQWZ0ZXJSZW5kZXJlZENvbHVtbnMoZCkpcmV0dXJuLTQ7Y29uc3QgZj10aGlzLmdldFJvdyhhKTtpZighZiYmYT49MCl0aHJvdyBuZXcgRXJyb3IoIlRSIHdhcyBleHBlY3RlZCB0''@;'; put 'put ''byBiZSByZW5kZXJlZCBidXQgaXMgbm90Iik7Y29uc3Qgdj1mLmNoaWxkTm9kZXNbdGhpcy5jb2x1bW5GaWx0ZXIuc291cmNlQ29sdW1uVG9WaXNpYmxlUm93SGVhZGVkQ29sdW1uKGQpXTtpZighdiYmZD49MCl0aHJvdyBuZXcgRXJyb3IoIlREIG9yIFRIIHdhcyBleHBlY3RlZCB0byBiZSBy''@;'; put 'put ''ZW5kZXJlZCBidXQgaXMgbm90Iik7cmV0dXJuIHZ9Z2V0Um93KGwpe2xldCBhPW51bGwsZD1udWxsO3ZhciBoLGY7cmV0dXJuIGw8MD8oYT1udWxsPT09KGg9dGhpcy5yb3dGaWx0ZXIpfHx2b2lkIDA9PT1oP3ZvaWQgMDpoLnNvdXJjZVJvd1RvVmlzaWJsZUNvbEhlYWRlZFJvdyhsKSxkPXRo''@;'; put 'put ''aXMuVEhFQUQpOihhPW51bGw9PT0oZj10aGlzLnJvd0ZpbHRlcil8fHZvaWQgMD09PWY/dm9pZCAwOmYuc291cmNlVG9SZW5kZXJlZChsKSxkPXRoaXMuVEJPRFkpLHZvaWQgMCE9PWEmJnZvaWQgMCE9PWQmJiEoZC5jaGlsZE5vZGVzLmxlbmd0aDxhKzEpJiZkLmNoaWxkTm9kZXNbYV19Z2V0''@;'; put 'put ''Q29sdW1uSGVhZGVyKGwpe2NvbnN0IGQ9dGhpcy5USEVBRC5jaGlsZE5vZGVzW2FyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTowXTtyZXR1cm4gZD8uY2hpbGROb2Rlc1t0aGlzLmNvbHVtbkZpbHRlci5zb3VyY2VDb2x1bW5Ub1Zpc2libGVS''@;'; put 'put ''b3dIZWFkZWRDb2x1bW4obCldfWdldENvbHVtbkhlYWRlcnMobCl7Y29uc3QgYT1bXSxkPXRoaXMuY29sdW1uRmlsdGVyLnNvdXJjZUNvbHVtblRvVmlzaWJsZVJvd0hlYWRlZENvbHVtbihsKTtyZXR1cm4gdGhpcy5USEVBRC5jaGlsZE5vZGVzLmZvckVhY2goaD0+e2NvbnN0IGY9aC5jaGls''@;'; put 'put ''ZE5vZGVzW2RdO2YmJmEucHVzaChmKX0pLGF9Z2V0Um93SGVhZGVyKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTowO2lmKGE+PXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJyb3dIZWFkZXJzIikubGVuZ3RoKXJldHVy''@;'; put 'put ''bjtjb25zdCBoPXRoaXMucm93RmlsdGVyLnNvdXJjZVRvUmVuZGVyZWQobCksZj1oPDA/dGhpcy5yb3dGaWx0ZXIuc291cmNlUm93VG9WaXNpYmxlQ29sSGVhZGVkUm93KGwpOmgsTT0oaDwwP3RoaXMuVEhFQUQ6dGhpcy5UQk9EWSkuY2hpbGROb2Rlc1tmXTtyZXR1cm4gTT8uY2hpbGROb2Rl''@;'; put 'put ''c1thXX1nZXRSb3dIZWFkZXJzKGwpe2NvbnN0IGE9W10sZD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicm93SGVhZGVycyIpLmxlbmd0aDtmb3IobGV0IGg9MDtoPGQ7aCsrKXtjb25zdCBmPXRoaXMuVEJPRFkuY2hpbGROb2Rlc1t0aGlzLnJvd0ZpbHRlci5zb3VyY2VUb1JlbmRlcmVk''@;'; put 'put ''KGwpXSx2PWY/LmNoaWxkTm9kZXNbaF07diYmYS5wdXNoKHYpfXJldHVybiBhfWdldENvb3JkcyhsKXtsZXQgYT1sO2lmKCJURCIhPT1hLm5vZGVOYW1lJiYiVEgiIT09YS5ub2RlTmFtZSYmKGE9Um0oYSxbIlREIiwiVEgiXSkpLG51bGw9PT1hKXJldHVybiBudWxsO2NvbnN0IGQ9YS5wYXJl''@;'; put 'put ''bnROb2RlO2lmKCFkKXJldHVybiBudWxsO2NvbnN0IGg9ZC5wYXJlbnROb2RlO2xldCBmPVAyZShkKSx2PWEuY2VsbEluZGV4O09tKHE3LGEsdGhpcy53dFJvb3RFbGVtZW50KXx8T20oJDcsYSx0aGlzLnd0Um9vdEVsZW1lbnQpPyJUSEVBRCI9PT1oLm5vZGVOYW1lJiYoZi09aC5jaGlsZE5v''@;'; put 'put ''ZGVzLmxlbmd0aCk6T20oQm0sYSx0aGlzLnd0Um9vdEVsZW1lbnQpfHxPbShJcCxhLHRoaXMud3RSb290RWxlbWVudCk/Zj10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxSb3dzIiktaC5jaGlsZE5vZGVzLmxlbmd0aCtmOmg9PT10aGlzLlRIRUFEP2Y9dGhpcy5yb3dGaWx0ZXIu''@;'; put 'put ''dmlzaWJsZUNvbEhlYWRlZFJvd1RvU291cmNlUm93KGYpOnRoaXMucm93RmlsdGVyJiYoZj10aGlzLnJvd0ZpbHRlci5yZW5kZXJlZFRvU291cmNlKGYpKSxPbShxNyxhLHRoaXMud3RSb290RWxlbWVudCl8fE9tKEs3LGEsdGhpcy53dFJvb3RFbGVtZW50KXx8T20oQm0sYSx0aGlzLnd0Um9v''@;'; put 'put ''dEVsZW1lbnQpP3Y9dGhpcy5jb2x1bW5GaWx0ZXIub2Zmc2V0dGVkVEgodik6dGhpcy5jb2x1bW5GaWx0ZXImJih2PXRoaXMuY29sdW1uRmlsdGVyLnZpc2libGVSb3dIZWFkZWRDb2x1bW5Ub1NvdXJjZUNvbHVtbih2KSk7Y29uc3QgTT10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygib25N''@;'; put 'put ''b2RpZnlHZXRDb29yZHNFbGVtZW50IixmLHYpO3JldHVybiBNJiZBcnJheS5pc0FycmF5KE0pJiYoW2Ysdl09TSksdGhpcy53b3QuY3JlYXRlQ2VsbENvb3JkcyhmLHYpfW1hcmtPdmVyc2l6ZWRSb3dzKCl7aWYodGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImV4dGVybmFsUm93Q2FsY3Vs''@;'; put 'put ''YXRvciIpKXJldHVybjtsZXQgbD10aGlzLlRCT0RZLmNoaWxkTm9kZXMubGVuZ3RoO2NvbnN0IGE9bCp0aGlzLmRhdGFBY2Nlc3NPYmplY3Quc3R5bGVzSGFuZGxlci5nZXREZWZhdWx0Um93SGVpZ2h0KCksZD1vXyh0aGlzLlRCT0RZKS0xLGg9dGhpcy53b3Quc3R5bGVzSGFuZGxlci5hcmVD''@;'; put 'put ''ZWxsc0JvcmRlckJveCgpLGY9aD94dTpvXyx2PWg/MDoxLE09aD8xOjA7bGV0IEQsWixyZSxjZSxiZTtpZihhIT09ZHx8dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkUm93c0JvdHRvbSIpKWZvcig7bDspe2wtPTEscmU9dGhpcy5yb3dGaWx0ZXIucmVuZGVyZWRUb1NvdXJjZShs''@;'; put 'put ''KSxEPXRoaXMuZ2V0Um93SGVpZ2h0KHJlKSxjZT10aGlzLmdldFRyRm9yUm93KHJlKSxiZT1jZS5xdWVyeVNlbGVjdG9yKCJ0aCIpO2NvbnN0IEVlPTA9PT1yZT9NOjA7Wj1iZT9mKGJlKTpmKGNlKS12LCghRCYmdGhpcy5kYXRhQWNjZXNzT2JqZWN0LnN0eWxlc0hhbmRsZXIuZ2V0RGVmYXVs''@;'; put 'put ''dFJvd0hlaWdodCgpPFotRWV8fEQ8WikmJihofHwoWis9MSksdGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0Vmlld3BvcnQub3ZlcnNpemVkUm93c1tyZV09Wil9fWdldFRyRm9yUm93KGwpe3JldHVybiB0aGlzLlRCT0RZLmNoaWxkTm9kZXNbdGhpcy5yb3dGaWx0ZXIuc291cmNlVG9SZW5kZXJl''@;'; put 'put ''ZChsKV19aXNDb2x1bW5IZWFkZXJSZW5kZXJlZChsKXtpZihsPj0wKXJldHVybiExO2NvbnN0IGQ9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInJvd0hlYWRlcnMiKS5sZW5ndGg7cmV0dXJuIE1hdGguYWJzKGwpPD1kfWlzUm93SGVhZGVyUmVuZGVyZWQobCl7aWYobD49MClyZXR1cm4h''@;'; put 'put ''MTtjb25zdCBkPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJjb2x1bW5IZWFkZXJzIikubGVuZ3RoO3JldHVybiBNYXRoLmFicyhsKTw9ZH1pc1Jvd0JlZm9yZVJlbmRlcmVkUm93cyhsKXtjb25zdCBhPXRoaXMuZ2V0Rmlyc3RSZW5kZXJlZFJvdygpO3JldHVybiBsPDAmJmE8PTA/IXRo''@;'; put 'put ''aXMuaXNSb3dIZWFkZXJSZW5kZXJlZChsKTpsPGF9aXNSb3dBZnRlclJlbmRlcmVkUm93cyhsKXtyZXR1cm4gbD50aGlzLmdldExhc3RSZW5kZXJlZFJvdygpfWlzQ29sdW1uQmVmb3JlUmVuZGVyZWRDb2x1bW5zKGwpe2NvbnN0IGE9dGhpcy5nZXRGaXJzdFJlbmRlcmVkQ29sdW1uKCk7cmV0''@;'; put 'put ''dXJuIGw8MCYmYTw9MD8hdGhpcy5pc0NvbHVtbkhlYWRlclJlbmRlcmVkKGwpOmw8YX1pc0NvbHVtbkFmdGVyUmVuZGVyZWRDb2x1bW5zKGwpe3JldHVybiB0aGlzLmNvbHVtbkZpbHRlciYmbD50aGlzLmdldExhc3RSZW5kZXJlZENvbHVtbigpfWlzQ29sdW1uQWZ0ZXJWaWV3cG9ydChsKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5jb2x1bW5GaWx0ZXImJmw+dGhpcy5nZXRMYXN0VmlzaWJsZUNvbHVtbigpfWlzUm93QWZ0ZXJWaWV3cG9ydChsKXtyZXR1cm4gdGhpcy5yb3dGaWx0ZXImJmw+dGhpcy5nZXRMYXN0VmlzaWJsZVJvdygpfWlzQ29sdW1uQmVmb3JlVmlld3BvcnQobCl7cmV0dXJuIHRoaXMu''@;'; put 'put ''Y29sdW1uRmlsdGVyJiZ0aGlzLmNvbHVtbkZpbHRlci5zb3VyY2VUb1JlbmRlcmVkKGwpPDAmJmw+PTB9aXNMYXN0Um93RnVsbHlWaXNpYmxlKCl7cmV0dXJuIHRoaXMuZ2V0TGFzdFZpc2libGVSb3coKT09PXRoaXMuZ2V0TGFzdFJlbmRlcmVkUm93KCl9aXNMYXN0Q29sdW1uRnVsbHlWaXNp''@;'; put 'put ''YmxlKCl7cmV0dXJuIHRoaXMuZ2V0TGFzdFZpc2libGVDb2x1bW4oKT09PXRoaXMuZ2V0TGFzdFJlbmRlcmVkQ29sdW1uKCl9YWxsUm93c0luVmlld3BvcnQoKXtyZXR1cm4gdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsUm93cyIpPT09dGhpcy5nZXRWaXNpYmxlUm93c0NvdW50''@;'; put 'put ''KCl9YWxsQ29sdW1uc0luVmlld3BvcnQoKXtyZXR1cm4gdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsQ29sdW1ucyIpPT09dGhpcy5nZXRWaXNpYmxlQ29sdW1uc0NvdW50KCl9Z2V0Um93SGVpZ2h0KGwpe3JldHVybiB0aGlzLnJvd1V0aWxzLmdldEhlaWdodChsKX1nZXRDb2x1''@;'; put 'put ''bW5IZWFkZXJIZWlnaHQobCl7cmV0dXJuIHRoaXMuY29sdW1uVXRpbHMuZ2V0SGVhZGVySGVpZ2h0KGwpfWdldENvbHVtbldpZHRoKGwpe3JldHVybiB0aGlzLmNvbHVtblV0aWxzLmdldFdpZHRoKGwpfWhhc0RlZmluZWRTaXplKCl7cmV0dXJuIHRoaXMuaGFzVGFibGVIZWlnaHQmJnRoaXMu''@;'; put 'put ''aGFzVGFibGVXaWR0aH1nZXRXaWR0aCgpe3JldHVybiBzdSh0aGlzLlRBQkxFKX1nZXRIZWlnaHQoKXtyZXR1cm4geHUodGhpcy5UQUJMRSl9Z2V0VG90YWxXaWR0aCgpe2NvbnN0IGw9c3UodGhpcy5oaWRlcik7cmV0dXJuIDAhPT1sP2w6dGhpcy5nZXRXaWR0aCgpfWdldFRvdGFsSGVpZ2h0''@;'; put 'put ''KCl7Y29uc3QgbD14dSh0aGlzLmhpZGVyKTtyZXR1cm4gMCE9PWw/bDp0aGlzLmdldEhlaWdodCgpfWlzVmlzaWJsZSgpe3JldHVybiBVNyh0aGlzLlRBQkxFKX1fbW9kaWZ5Um93SGVhZGVyV2lkdGgobCl7bGV0IGE9bWwobCk/bCgpOm51bGw7cmV0dXJuIEFycmF5LmlzQXJyYXkoYSk/KGE9''@;'; put 'put ''Wy4uLmFdLGFbYS5sZW5ndGgtMV09dGhpcy5fY29ycmVjdFJvd0hlYWRlcldpZHRoKGFbYS5sZW5ndGgtMV0pKTphPXRoaXMuX2NvcnJlY3RSb3dIZWFkZXJXaWR0aChhKSxhfV9jb3JyZWN0Um93SGVhZGVyV2lkdGgobCl7bGV0IGE9bDtyZXR1cm4ibnVtYmVyIiE9dHlwZW9mIGwmJihhPXRo''@;'; put 'put ''aXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJkZWZhdWx0Q29sdW1uV2lkdGgiKSksdGhpcy5jb3JyZWN0SGVhZGVyV2lkdGgmJihhKz0xKSxhfX0sTmZlPXtnZXRGaXJzdFJlbmRlcmVkUm93KCl7cmV0dXJuIDA9PT10aGlzLmdldFJlbmRlcmVkUm93c0NvdW50KCk/LTE6MH0sZ2V0Rmlyc3RW''@;'; put 'put ''aXNpYmxlUm93KCl7cmV0dXJuIHRoaXMuZ2V0Rmlyc3RSZW5kZXJlZFJvdygpfSxnZXRGaXJzdFBhcnRpYWxseVZpc2libGVSb3coKXtyZXR1cm4gdGhpcy5nZXRGaXJzdFJlbmRlcmVkUm93KCl9LGdldExhc3RSZW5kZXJlZFJvdygpe3JldHVybiB0aGlzLmdldFJlbmRlcmVkUm93c0NvdW50''@;'; put 'put ''KCktMX0sZ2V0TGFzdFZpc2libGVSb3coKXtyZXR1cm4gdGhpcy5nZXRMYXN0UmVuZGVyZWRSb3coKX0sZ2V0TGFzdFBhcnRpYWxseVZpc2libGVSb3coKXtyZXR1cm4gdGhpcy5nZXRMYXN0UmVuZGVyZWRSb3coKX0sZ2V0UmVuZGVyZWRSb3dzQ291bnQoKXtyZXR1cm4gTWF0aC5taW4odGhp''@;'; put 'put ''cy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsUm93cyIpLHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZFJvd3NUb3AiKSl9LGdldFZpc2libGVSb3dzQ291bnQoKXtyZXR1cm4gdGhpcy5nZXRSZW5kZXJlZFJvd3NDb3VudCgpfSxnZXRDb2x1bW5IZWFkZXJzQ291bnQoKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5kYXRhQWNjZXNzT2JqZWN0LmNvbHVtbkhlYWRlcnMubGVuZ3RofX07VHAoTmZlLCJNSVhJTl9OQU1FIiwic3RpY2t5Um93c1RvcCIse3dyaXRhYmxlOiExLGVudW1lcmFibGU6ITF9KTtjb25zdCBWZmU9TmZlLEJmZT17Z2V0Rmlyc3RSZW5kZXJlZENvbHVtbigpe2NvbnN0''@;'; put 'put ''IGM9dGhpcy5kYXRhQWNjZXNzT2JqZWN0LnN0YXJ0Q29sdW1uUmVuZGVyZWQ7cmV0dXJuIG51bGw9PT1jPy0xOmN9LGdldEZpcnN0VmlzaWJsZUNvbHVtbigpe2NvbnN0IGM9dGhpcy5kYXRhQWNjZXNzT2JqZWN0LnN0YXJ0Q29sdW1uVmlzaWJsZTtyZXR1cm4gbnVsbD09PWM/LTE6Y30sZ2V0''@;'; put 'put ''Rmlyc3RQYXJ0aWFsbHlWaXNpYmxlQ29sdW1uKCl7Y29uc3QgYz10aGlzLmRhdGFBY2Nlc3NPYmplY3Quc3RhcnRDb2x1bW5QYXJ0aWFsbHlWaXNpYmxlO3JldHVybiBudWxsPT09Yz8tMTpjfSxnZXRMYXN0UmVuZGVyZWRDb2x1bW4oKXtjb25zdCBjPXRoaXMuZGF0YUFjY2Vzc09iamVjdC5l''@;'; put 'put ''bmRDb2x1bW5SZW5kZXJlZDtyZXR1cm4gbnVsbD09PWM/LTE6Y30sZ2V0TGFzdFZpc2libGVDb2x1bW4oKXtjb25zdCBjPXRoaXMuZGF0YUFjY2Vzc09iamVjdC5lbmRDb2x1bW5WaXNpYmxlO3JldHVybiBudWxsPT09Yz8tMTpjfSxnZXRMYXN0UGFydGlhbGx5VmlzaWJsZUNvbHVtbigpe2Nv''@;'; put 'put ''bnN0IGM9dGhpcy5kYXRhQWNjZXNzT2JqZWN0LmVuZENvbHVtblBhcnRpYWxseVZpc2libGU7cmV0dXJuIG51bGw9PT1jPy0xOmN9LGdldFJlbmRlcmVkQ29sdW1uc0NvdW50KCl7cmV0dXJuIHRoaXMuZGF0YUFjY2Vzc09iamVjdC5jb3VudENvbHVtbnNSZW5kZXJlZH0sZ2V0VmlzaWJsZUNv''@;'; put 'put ''bHVtbnNDb3VudCgpe3JldHVybiB0aGlzLmRhdGFBY2Nlc3NPYmplY3QuY291bnRDb2x1bW5zVmlzaWJsZX0sZ2V0Um93SGVhZGVyc0NvdW50KCl7cmV0dXJuIHRoaXMuZGF0YUFjY2Vzc09iamVjdC5yb3dIZWFkZXJzLmxlbmd0aH19O1RwKEJmZSwiTUlYSU5fTkFNRSIsImNhbGN1bGF0ZWRD''@;'; put 'put ''b2x1bW5zIix7d3JpdGFibGU6ITEsZW51bWVyYWJsZTohMX0pO2NvbnN0IGRLPUJmZTtjbGFzcyBoSyBleHRlbmRzIG1fe2NvbnN0cnVjdG9yKGwsYSxkLGgpe3N1cGVyKGwsYSxkLGgsJDcpfX1UbChoSyxWZmUpLFRsKGhLLGRLKTtjb25zdCBfUWU9aEs7ZnVuY3Rpb24gblAoYyxsLGEpe2lm''@;'; put 'put ''KCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciBQRT1uZXcgV2Vha1NldDtmdW5jdGlvbiBq''@;'; put 'put ''ZmUoYyl7Y29uc3R7d3RTZXR0aW5nczpsLGlubGluZVN0YXJ0T3ZlcmxheTphLHd0VGFibGU6ZCx3dFZpZXdwb3J0OmgsdG90YWxDb2x1bW5zOmYscm9vdFdpbmRvdzp2fT10aGlzLmRhdGFBY2Nlc3NPYmplY3Q7aWYoYS5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudD09PXYpe2xldCBEPW51''@;'; put 'put ''bGw7aWYobC5nZXRTZXR0aW5nKCJydGxNb2RlIikpe2NvbnN0IHJlPWQuVEFCTEUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7RD1NYXRoLmFicyhyZS5yaWdodC10aGlzLmRhdGFBY2Nlc3NPYmplY3Qucm9vdFdpbmRvdy5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQub2Zmc2V0V2lkdGgpfWVs''@;'; put 'put ''c2UgRD1VMChkLnd0Um9vdEVsZW1lbnQpLmxlZnQ7Y29uc3QgWj1NYXRoLmFicyh3JCh2LHYpKTtpZihEPlope2NvbnN0IHJlPUMkKHYpO2xldCBjZT1oLmdldFJvd0hlYWRlcldpZHRoKCk7Zm9yKGxldCBiZT0xO2JlPD1mO2JlKyspaWYoY2UrPWEuc3VtQ2VsbFNpemVzKGJlLTEsYmUpLEQr''@;'; put 'put ''Y2UtWj49cmUpe2M9YmUtMjticmVha319fXJldHVybiBjfWZ1bmN0aW9uIHpmZShjKXtjb25zdHt0b3BPdmVybGF5Omwsd3RUYWJsZTphLHd0Vmlld3BvcnQ6ZCx0b3RhbFJvd3M6aCxyb290V2luZG93OmZ9PXRoaXMuZGF0YUFjY2Vzc09iamVjdDtpZihsLm1haW5UYWJsZVNjcm9sbGFibGVF''@;'; put 'put ''bGVtZW50PT09Zil7Y29uc3Qgdj1VMChhLnd0Um9vdEVsZW1lbnQpLE09T08oZixmKTtpZih2LnRvcD5NKXtjb25zdCBEPW9fKGYpO2xldCBaPWQuZ2V0Q29sdW1uSGVhZGVySGVpZ2h0KCk7Zm9yKGxldCByZT0xO3JlPD1oO3JlKyspaWYoWis9bC5zdW1DZWxsU2l6ZXMocmUtMSxyZSksdi50''@;'; put 'put ''b3ArWi1NPj1EKXtjPXJlLTI7YnJlYWt9fX1yZXR1cm4gY31jb25zdCBUUWU9Y2xhc3MgRVFle2NvbnN0cnVjdG9yKGwpeyhmdW5jdGlvbiB3UWUoYyxsKXsoZnVuY3Rpb24gQ1FlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNh''@;'; put 'put ''bWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5hZGQoYyl9KSh0aGlzLFBFKSxmdW5jdGlvbiBTUWUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIE1RZShjKXt2YXIgbD1mdW5jdGlvbiB4UWUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJl''@;'; put 'put ''dHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0''@;'; put 'put ''aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJs''@;'; put 'put ''ZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfSh0aGlzLCJkYXRhQWNjZXNzT2JqZWN0Iix2b2lkIDApLHRoaXMuZGF0YUFjY2Vzc09iamVjdD1sfXNjcm9sbFZpZXdwb3J0KGwsYSxkKXtpZihsLmNvbDwwfHxsLnJvdzwwKXJldHVybiExO2NvbnN0IGg9dGhpcy5zY3JvbGxWaWV3cG9ydEhv''@;'; put 'put ''cml6b250YWxseShsLmNvbCxhKSxmPXRoaXMuc2Nyb2xsVmlld3BvcnRWZXJ0aWNhbGx5KGwucm93LGQpO3JldHVybiBofHxmfXNjcm9sbFZpZXdwb3J0SG9yaXpvbnRhbGx5KGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToi''@;'; put 'put ''YXV0byI7Y29uc3R7ZHJhd246ZCx0b3RhbENvbHVtbnM6aH09dGhpcy5kYXRhQWNjZXNzT2JqZWN0O2lmKCFkKXJldHVybiExO2NvbnN0IGY9RmQoYSk7aWYobD10aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJvbkJlZm9yZVZpZXdwb3J0U2Nyb2xsSG9yaXpv''@;'; put 'put ''bnRhbGx5IixsLGYpLCFOdW1iZXIuaXNJbnRlZ2VyKGwpfHxsPDB8fGw+aClyZXR1cm4hMTthPWYudmFsdWU7Y29uc3R7Zml4ZWRDb2x1bW5zU3RhcnQ6dixpbmxpbmVTdGFydE92ZXJsYXk6TX09dGhpcy5kYXRhQWNjZXNzT2JqZWN0LEQ9ImF1dG8iPT09YTtpZihEJiZsPHYpcmV0dXJuITE7''@;'; put 'put ''Y29uc3QgWj10aGlzLmdldEZpcnN0VmlzaWJsZUNvbHVtbigpLHJlPXRoaXMuZ2V0TGFzdFZpc2libGVDb2x1bW4oKTtsZXQgY2U9ITE7cmV0dXJuKEQmJihsPFp8fGw+cmUpfHwhRCkmJihjZT1NLnNjcm9sbFRvKGwsRD9sPj10aGlzLmdldExhc3RQYXJ0aWFsbHlWaXNpYmxlQ29sdW1uKCk6''@;'; put 'put ''ImVuZCI9PT1hKSksY2V9c2Nyb2xsVmlld3BvcnRWZXJ0aWNhbGx5KGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToiYXV0byI7Y29uc3R7ZHJhd246ZCx0b3RhbFJvd3M6aH09dGhpcy5kYXRhQWNjZXNzT2JqZWN0O2lmKCFk''@;'; put 'put ''KXJldHVybiExO2NvbnN0IGY9RmQoYSk7aWYobD10aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJvbkJlZm9yZVZpZXdwb3J0U2Nyb2xsVmVydGljYWxseSIsbCxmKSwhTnVtYmVyLmlzSW50ZWdlcihsKXx8bDwwfHxsPmgpcmV0dXJuITE7YT1mLnZhbHVlO2Nv''@;'; put 'put ''bnN0e2ZpeGVkUm93c0JvdHRvbTp2LGZpeGVkUm93c1RvcDpNLHRvcE92ZXJsYXk6RH09dGhpcy5kYXRhQWNjZXNzT2JqZWN0LFo9ImF1dG8iPT09YTtpZihaJiYobDxNfHxsPmgtdi0xKSlyZXR1cm4hMTtjb25zdCByZT10aGlzLmdldEZpcnN0VmlzaWJsZVJvdygpLGNlPXRoaXMuZ2V0TGFz''@;'; put 'put ''dFZpc2libGVSb3coKTtsZXQgYmU9ITE7cmV0dXJuKFomJihsPHJlfHxsPmNlKXx8IVopJiYoYmU9RC5zY3JvbGxUbyhsLFo/bD49dGhpcy5nZXRMYXN0UGFydGlhbGx5VmlzaWJsZVJvdygpOiJib3R0b20iPT09YSkpLGJlfWdldEZpcnN0VmlzaWJsZVJvdygpe3JldHVybiB0aGlzLmRhdGFB''@;'; put 'put ''Y2Nlc3NPYmplY3Qud3RUYWJsZS5nZXRGaXJzdFZpc2libGVSb3coKX1nZXRMYXN0VmlzaWJsZVJvdygpe3JldHVybiBuUChQRSx0aGlzLHpmZSkuY2FsbCh0aGlzLHRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFRhYmxlLmdldExhc3RWaXNpYmxlUm93KCkpfWdldEZpcnN0UGFydGlhbGx5Vmlz''@;'; put 'put ''aWJsZVJvdygpe3JldHVybiB0aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RUYWJsZS5nZXRGaXJzdFBhcnRpYWxseVZpc2libGVSb3coKX1nZXRMYXN0UGFydGlhbGx5VmlzaWJsZVJvdygpe3JldHVybiBuUChQRSx0aGlzLHpmZSkuY2FsbCh0aGlzLHRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFRh''@;'; put 'put ''YmxlLmdldExhc3RQYXJ0aWFsbHlWaXNpYmxlUm93KCkpfWdldEZpcnN0VmlzaWJsZUNvbHVtbigpe3JldHVybiB0aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RUYWJsZS5nZXRGaXJzdFZpc2libGVDb2x1bW4oKX1nZXRMYXN0VmlzaWJsZUNvbHVtbigpe3JldHVybiBuUChQRSx0aGlzLGpmZSku''@;'; put 'put ''Y2FsbCh0aGlzLHRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFRhYmxlLmdldExhc3RWaXNpYmxlQ29sdW1uKCkpfWdldEZpcnN0UGFydGlhbGx5VmlzaWJsZUNvbHVtbigpe3JldHVybiB0aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RUYWJsZS5nZXRGaXJzdFBhcnRpYWxseVZpc2libGVDb2x1bW4o''@;'; put 'put ''KX1nZXRMYXN0UGFydGlhbGx5VmlzaWJsZUNvbHVtbigpe3JldHVybiBuUChQRSx0aGlzLGpmZSkuY2FsbCh0aGlzLHRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFRhYmxlLmdldExhc3RQYXJ0aWFsbHlWaXNpYmxlQ29sdW1uKCkpfX07ZnVuY3Rpb24gVWZlKGMsbCxhKXtyZXR1cm4obD1mdW5j''@;'; put 'put ''dGlvbiBEUWUoYyl7dmFyIGw9ZnVuY3Rpb24gSVFlKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQp''@;'; put 'put ''cmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlp''@;'; put 'put ''biBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiB2XyhjLGwpe3JldHVybiBjLmdldChXZmUoYyxsKSl9ZnVuY3Rpb24gWmZlKGMsbCxhKXtyZXR1cm4gYy5zZXQo''@;'; put 'put ''V2ZlKGMsbCksYSksYX1mdW5jdGlvbiBXZmUoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9i''@;'; put 'put ''amVjdCIpfXZhciBfZz1uZXcgV2Vha01hcDtjbGFzcyByUHtjb25zdHJ1Y3RvcihsLGEpe2xldCBkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl07VWZlKHRoaXMsInJvdyIsbnVsbCksVWZlKHRoaXMsImNvbCIsbnVsbCksZnVuY3Rpb24g''@;'; put 'put ''QVFlKGMsbCxhKXsoZnVuY3Rpb24ga1FlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5zZXQoYyxhKX0odGhpcyxfZywhMSksWmZlKF9n''@;'; put 'put ''LHRoaXMsZCksdHlwZW9mIGw8InUiJiZ0eXBlb2YgYTwidSImJih0aGlzLnJvdz1sLHRoaXMuY29sPWEpfWlzVmFsaWQobCl7Y29uc3R7Y291bnRSb3dzOmEsY291bnRDb2xzOmQsY291bnRSb3dIZWFkZXJzOmgsY291bnRDb2xIZWFkZXJzOmZ9PXtjb3VudFJvd3M6MCxjb3VudENvbHM6MCxj''@;'; put 'put ''b3VudFJvd0hlYWRlcnM6MCxjb3VudENvbEhlYWRlcnM6MCwuLi5sfTtyZXR1cm4hKCFOdW1iZXIuaXNJbnRlZ2VyKHRoaXMucm93KXx8IU51bWJlci5pc0ludGVnZXIodGhpcy5jb2wpfHx0aGlzLnJvdzwtZnx8dGhpcy5jb2w8LWh8fHRoaXMucm93Pj1hfHx0aGlzLmNvbD49ZCl9aXNFcXVh''@;'; put 'put ''bChsKXtyZXR1cm4gbD09PXRoaXN8fHRoaXMucm93PT09bC5yb3cmJnRoaXMuY29sPT09bC5jb2x9aXNIZWFkZXIoKXtyZXR1cm4hdGhpcy5pc0NlbGwoKX1pc0NlbGwoKXtyZXR1cm4gdGhpcy5yb3c+PTAmJnRoaXMuY29sPj0wfWlzUnRsKCl7cmV0dXJuIHZfKF9nLHRoaXMpfWlzU291dGhF''@;'; put 'put ''YXN0T2YobCl7cmV0dXJuIHRoaXMucm93Pj1sLnJvdyYmKHZfKF9nLHRoaXMpP3RoaXMuY29sPD1sLmNvbDp0aGlzLmNvbD49bC5jb2wpfWlzTm9ydGhXZXN0T2YobCl7cmV0dXJuIHRoaXMucm93PD1sLnJvdyYmKHZfKF9nLHRoaXMpP3RoaXMuY29sPj1sLmNvbDp0aGlzLmNvbDw9bC5jb2wp''@;'; put 'put ''fWlzU291dGhXZXN0T2YobCl7cmV0dXJuIHRoaXMucm93Pj1sLnJvdyYmKHZfKF9nLHRoaXMpP3RoaXMuY29sPj1sLmNvbDp0aGlzLmNvbDw9bC5jb2wpfWlzTm9ydGhFYXN0T2YobCl7cmV0dXJuIHRoaXMucm93PD1sLnJvdyYmKHZfKF9nLHRoaXMpP3RoaXMuY29sPD1sLmNvbDp0aGlzLmNv''@;'; put 'put ''bD49bC5jb2wpfW5vcm1hbGl6ZSgpe3JldHVybiB0aGlzLnJvdz1udWxsPT09dGhpcy5yb3c/dGhpcy5yb3c6TWF0aC5tYXgodGhpcy5yb3csMCksdGhpcy5jb2w9bnVsbD09PXRoaXMuY29sP3RoaXMuY29sOk1hdGgubWF4KHRoaXMuY29sLDApLHRoaXN9YXNzaWduKGwpe3JldHVybiBOdW1i''@;'; put 'put ''ZXIuaXNJbnRlZ2VyKGw/LnJvdykmJih0aGlzLnJvdz1sLnJvdyksTnVtYmVyLmlzSW50ZWdlcihsPy5jb2wpJiYodGhpcy5jb2w9bC5jb2wpLGwgaW5zdGFuY2VvZiByUCYmWmZlKF9nLHRoaXMsbC5pc1J0bCgpKSx0aGlzfWNsb25lKCl7cmV0dXJuIG5ldyByUCh0aGlzLnJvdyx0aGlzLmNv''@;'; put 'put ''bCx2XyhfZyx0aGlzKSl9dG9PYmplY3QoKXtyZXR1cm57cm93OnRoaXMucm93LGNvbDp0aGlzLmNvbH19fWNvbnN0IGlQPXJQO2Z1bmN0aW9uIGZLKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBPUWUoYyl7dmFyIGw9ZnVuY3Rpb24gUFFlKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwh''@;'; put 'put ''YylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHBy''@;'; put 'put ''aW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1''@;'; put 'put ''cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBVMihjLGwpe3JldHVybiBjLmdldChZZmUoYyxsKSl9ZnVuY3Rpb24gWWZlKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJv''@;'; put 'put ''dyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgTmQ9bmV3IFdlYWtNYXA7Y2xhc3MgcEt7Y29uc3RydWN0b3IobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRz''@;'; put 'put ''WzFdOmwsZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06bCxoPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdJiZhcmd1bWVudHNbM107ZksodGhpcywiaGlnaGxpZ2h0IixudWxsKSxmSyh0aGlzLCJmcm9tIixu''@;'; put 'put ''dWxsKSxmSyh0aGlzLCJ0byIsbnVsbCksZnVuY3Rpb24gUlFlKGMsbCxhKXsoZnVuY3Rpb24gTFFlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMs''@;'; put 'put ''bCksbC5zZXQoYyxhKX0odGhpcyxOZCwhMSksdGhpcy5oaWdobGlnaHQ9bC5jbG9uZSgpLHRoaXMuZnJvbT1hLmNsb25lKCksdGhpcy50bz1kLmNsb25lKCksZnVuY3Rpb24gRlFlKGMsbCxhKXtjLnNldChZZmUoYyxsKSxhKX0oTmQsdGhpcyxoKX1zZXRIaWdobGlnaHQobCl7cmV0dXJuIHRo''@;'; put 'put ''aXMuaGlnaGxpZ2h0PWwuY2xvbmUoKSx0aGlzfXNldEZyb20obCl7cmV0dXJuIHRoaXMuZnJvbT1sLmNsb25lKCksdGhpc31zZXRUbyhsKXtyZXR1cm4gdGhpcy50bz1sLmNsb25lKCksdGhpc31ub3JtYWxpemUoKXtyZXR1cm4gdGhpcy5oaWdobGlnaHQubm9ybWFsaXplKCksdGhpcy5mcm9t''@;'; put 'put ''Lm5vcm1hbGl6ZSgpLHRoaXMudG8ubm9ybWFsaXplKCksdGhpc31pc1ZhbGlkKGwpe3JldHVybiB0aGlzLmZyb20uaXNWYWxpZChsKSYmdGhpcy50by5pc1ZhbGlkKGwpfWlzU2luZ2xlKCl7cmV0dXJuIHRoaXMuaXNTaW5nbGVDZWxsKCl8fHRoaXMuaXNTaW5nbGVIZWFkZXIoKX1pc1Npbmds''@;'; put 'put ''ZUNlbGwoKXtyZXR1cm4gdGhpcy5mcm9tLnJvdz49MCYmdGhpcy5mcm9tLnJvdz09PXRoaXMudG8ucm93JiZ0aGlzLmZyb20uY29sPj0wJiZ0aGlzLmZyb20uY29sPT09dGhpcy50by5jb2x9aXNTaW5nbGVIZWFkZXIoKXtyZXR1cm4odGhpcy5mcm9tLnJvdzwwfHx0aGlzLmZyb20uY29sPDAp''@;'; put 'put ''JiZ0aGlzLmZyb20ucm93PT09dGhpcy50by5yb3cmJnRoaXMuZnJvbS5jb2w9PT10aGlzLnRvLmNvbH1pc0hlYWRlcigpe3JldHVybiEoIXRoaXMuZnJvbS5pc0hlYWRlcigpfHwhdGhpcy50by5pc0hlYWRlcigpKXx8dGhpcy5mcm9tLmNvbDwwJiZ0aGlzLnRvLmNvbDwwfHx0aGlzLmZyb20u''@;'; put 'put ''cm93PDAmJnRoaXMudG8ucm93PDB9Y29udGFpbnNIZWFkZXJzKCl7cmV0dXJuIHRoaXMuZnJvbS5pc0hlYWRlcigpfHx0aGlzLnRvLmlzSGVhZGVyKCl9Z2V0T3V0ZXJIZWlnaHQoKXtyZXR1cm4gTWF0aC5tYXgodGhpcy5mcm9tLnJvdyx0aGlzLnRvLnJvdyktTWF0aC5taW4odGhpcy5mcm9t''@;'; put 'put ''LnJvdyx0aGlzLnRvLnJvdykrMX1nZXRPdXRlcldpZHRoKCl7cmV0dXJuIE1hdGgubWF4KHRoaXMuZnJvbS5jb2wsdGhpcy50by5jb2wpLU1hdGgubWluKHRoaXMuZnJvbS5jb2wsdGhpcy50by5jb2wpKzF9Z2V0SGVpZ2h0KCl7aWYodGhpcy5mcm9tLnJvdzwwJiZ0aGlzLnRvLnJvdzwwKXJl''@;'; put 'put ''dHVybiAwO2NvbnN0IGw9TWF0aC5tYXgodGhpcy5mcm9tLnJvdywwKSxhPU1hdGgubWF4KHRoaXMudG8ucm93LDApO3JldHVybiBNYXRoLm1heChsLGEpLU1hdGgubWluKGwsYSkrMX1nZXRXaWR0aCgpe2lmKHRoaXMuZnJvbS5jb2w8MCYmdGhpcy50by5jb2w8MClyZXR1cm4gMDtjb25zdCBs''@;'; put 'put ''PU1hdGgubWF4KHRoaXMuZnJvbS5jb2wsMCksYT1NYXRoLm1heCh0aGlzLnRvLmNvbCwwKTtyZXR1cm4gTWF0aC5tYXgobCxhKS1NYXRoLm1pbihsLGEpKzF9Z2V0Q2VsbHNDb3VudCgpe3JldHVybiB0aGlzLmdldFdpZHRoKCkqdGhpcy5nZXRIZWlnaHQoKX1pbmNsdWRlcyhsKXtjb25zdHty''@;'; put 'put ''b3c6YSxjb2w6ZH09bCxoPXRoaXMuZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpLGY9dGhpcy5nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpO3JldHVybiBoLnJvdzw9YSYmZi5yb3c+PWEmJmguY29sPD1kJiZmLmNvbD49ZH1pbmNsdWRlc1JhbmdlKGwpe3JldHVybiB0aGlzLmluY2x1ZGVzKGwu''@;'; put 'put ''Z2V0T3V0ZXJUb3BTdGFydENvcm5lcigpKSYmdGhpcy5pbmNsdWRlcyhsLmdldE91dGVyQm90dG9tRW5kQ29ybmVyKCkpfWlzRXF1YWwobCl7cmV0dXJuIE1hdGgubWluKHRoaXMuZnJvbS5yb3csdGhpcy50by5yb3cpPT09TWF0aC5taW4obC5mcm9tLnJvdyxsLnRvLnJvdykmJk1hdGgubWF4''@;'; put 'put ''KHRoaXMuZnJvbS5yb3csdGhpcy50by5yb3cpPT09TWF0aC5tYXgobC5mcm9tLnJvdyxsLnRvLnJvdykmJk1hdGgubWluKHRoaXMuZnJvbS5jb2wsdGhpcy50by5jb2wpPT09TWF0aC5taW4obC5mcm9tLmNvbCxsLnRvLmNvbCkmJk1hdGgubWF4KHRoaXMuZnJvbS5jb2wsdGhpcy50by5jb2wp''@;'; put 'put ''PT09TWF0aC5tYXgobC5mcm9tLmNvbCxsLnRvLmNvbCl9b3ZlcmxhcHMobCl7cmV0dXJuIGwuaXNTb3V0aEVhc3RPZih0aGlzLmdldE91dGVyVG9wTGVmdENvcm5lcigpKSYmbC5pc05vcnRoV2VzdE9mKHRoaXMuZ2V0T3V0ZXJCb3R0b21SaWdodENvcm5lcigpKX1pc1NvdXRoRWFzdE9mKGwp''@;'; put 'put ''e3JldHVybiB0aGlzLmdldE91dGVyVG9wTGVmdENvcm5lcigpLmlzU291dGhFYXN0T2YobCl8fHRoaXMuZ2V0T3V0ZXJCb3R0b21SaWdodENvcm5lcigpLmlzU291dGhFYXN0T2YobCl9aXNOb3J0aFdlc3RPZihsKXtyZXR1cm4gdGhpcy5nZXRPdXRlclRvcExlZnRDb3JuZXIoKS5pc05vcnRo''@;'; put 'put ''V2VzdE9mKGwpfHx0aGlzLmdldE91dGVyQm90dG9tUmlnaHRDb3JuZXIoKS5pc05vcnRoV2VzdE9mKGwpfWlzT3ZlcmxhcHBpbmdIb3Jpem9udGFsbHkobCl7cmV0dXJuIHRoaXMuZ2V0T3V0ZXJUb3BFbmRDb3JuZXIoKS5jb2w+PWwuZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpLmNvbCYmdGhp''@;'; put 'put ''cy5nZXRPdXRlclRvcEVuZENvcm5lcigpLmNvbDw9bC5nZXRPdXRlclRvcEVuZENvcm5lcigpLmNvbHx8dGhpcy5nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCkuY29sPD1sLmdldE91dGVyVG9wRW5kQ29ybmVyKCkuY29sJiZ0aGlzLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKS5jb2w+PWwuZ2V0''@;'; put 'put ''T3V0ZXJUb3BTdGFydENvcm5lcigpLmNvbH1pc092ZXJsYXBwaW5nVmVydGljYWxseShsKXtyZXR1cm4gdGhpcy5nZXRPdXRlckJvdHRvbVN0YXJ0Q29ybmVyKCkucm93Pj1sLmdldE91dGVyVG9wUmlnaHRDb3JuZXIoKS5yb3cmJnRoaXMuZ2V0T3V0ZXJCb3R0b21TdGFydENvcm5lcigpLnJv''@;'; put 'put ''dzw9bC5nZXRPdXRlckJvdHRvbVN0YXJ0Q29ybmVyKCkucm93fHx0aGlzLmdldE91dGVyVG9wRW5kQ29ybmVyKCkucm93PD1sLmdldE91dGVyQm90dG9tU3RhcnRDb3JuZXIoKS5yb3cmJnRoaXMuZ2V0T3V0ZXJUb3BFbmRDb3JuZXIoKS5yb3c+PWwuZ2V0T3V0ZXJUb3BSaWdodENvcm5lcigp''@;'; put 'put ''LnJvd31leHBhbmQobCl7Y29uc3QgYT10aGlzLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKSxkPXRoaXMuZ2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKTtyZXR1cm4obC5yb3c8YS5yb3d8fGwuY29sPGEuY29sfHxsLnJvdz5kLnJvd3x8bC5jb2w+ZC5jb2wpJiYodGhpcy5mcm9tPXRoaXMuX2Ny''@;'; put 'put ''ZWF0ZUNlbGxDb29yZHMoTWF0aC5taW4oYS5yb3csbC5yb3cpLE1hdGgubWluKGEuY29sLGwuY29sKSksdGhpcy50bz10aGlzLl9jcmVhdGVDZWxsQ29vcmRzKE1hdGgubWF4KGQucm93LGwucm93KSxNYXRoLm1heChkLmNvbCxsLmNvbCkpLCEwKX1leHBhbmRCeVJhbmdlKGwpe2xldCBhPSEo''@;'; put 'put ''YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0pfHxhcmd1bWVudHNbMV07aWYodGhpcy5pbmNsdWRlc1JhbmdlKGwpfHwhdGhpcy5vdmVybGFwcyhsKSlyZXR1cm4hMTtjb25zdCBkPXRoaXMuZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpLGg9dGhpcy5nZXRPdXRlckJv''@;'; put 'put ''dHRvbUVuZENvcm5lcigpLGY9dGhpcy5nZXREaXJlY3Rpb24oKSx2PWwuZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpLE09bC5nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpLEQ9TWF0aC5taW4oZC5yb3csdi5yb3cpLFo9TWF0aC5taW4oZC5jb2wsdi5jb2wpLHJlPU1hdGgubWF4KGgucm93LE0u''@;'; put 'put ''cm93KSxjZT1NYXRoLm1heChoLmNvbCxNLmNvbCksYmU9dGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhELFopLEVlPXRoaXMuX2NyZWF0ZUNlbGxDb29yZHMocmUsY2UpO3JldHVybiB0aGlzLmZyb209YmUsdGhpcy50bz1FZSx0aGlzLnNldERpcmVjdGlvbihmKSxhJiYodGhpcy5oaWdobGlnaHQu''@;'; put 'put ''cm93PT09dGhpcy5nZXRPdXRlckJvdHRvbVJpZ2h0Q29ybmVyKCkucm93JiYiTi1TIj09PXRoaXMuZ2V0VmVydGljYWxEaXJlY3Rpb24oKSYmdGhpcy5mbGlwRGlyZWN0aW9uVmVydGljYWxseSgpLHRoaXMuaGlnaGxpZ2h0LmNvbD09PXRoaXMuZ2V0T3V0ZXJUb3BSaWdodENvcm5lcigpLmNv''@;'; put 'put ''bCYmIlctRSI9PT10aGlzLmdldEhvcml6b250YWxEaXJlY3Rpb24oKSYmdGhpcy5mbGlwRGlyZWN0aW9uSG9yaXpvbnRhbGx5KCkpLCEwfWdldERpcmVjdGlvbigpe3JldHVybiB0aGlzLmZyb20uaXNOb3J0aFdlc3RPZih0aGlzLnRvKT8iTlctU0UiOnRoaXMuZnJvbS5pc05vcnRoRWFzdE9m''@;'; put 'put ''KHRoaXMudG8pPyJORS1TVyI6dGhpcy5mcm9tLmlzU291dGhFYXN0T2YodGhpcy50byk/IlNFLU5XIjp0aGlzLmZyb20uaXNTb3V0aFdlc3RPZih0aGlzLnRvKT8iU1ctTkUiOnZvaWQgMH1zZXREaXJlY3Rpb24obCl7c3dpdGNoKGwpe2Nhc2UiTlctU0UiOlt0aGlzLmZyb20sdGhpcy50b109''@;'; put 'put ''W3RoaXMuZ2V0T3V0ZXJUb3BMZWZ0Q29ybmVyKCksdGhpcy5nZXRPdXRlckJvdHRvbVJpZ2h0Q29ybmVyKCldO2JyZWFrO2Nhc2UiTkUtU1ciOlt0aGlzLmZyb20sdGhpcy50b109W3RoaXMuZ2V0T3V0ZXJUb3BSaWdodENvcm5lcigpLHRoaXMuZ2V0T3V0ZXJCb3R0b21MZWZ0Q29ybmVyKCld''@;'; put 'put ''O2JyZWFrO2Nhc2UiU0UtTlciOlt0aGlzLmZyb20sdGhpcy50b109W3RoaXMuZ2V0T3V0ZXJCb3R0b21SaWdodENvcm5lcigpLHRoaXMuZ2V0T3V0ZXJUb3BMZWZ0Q29ybmVyKCldO2JyZWFrO2Nhc2UiU1ctTkUiOlt0aGlzLmZyb20sdGhpcy50b109W3RoaXMuZ2V0T3V0ZXJCb3R0b21MZWZ0''@;'; put 'put ''Q29ybmVyKCksdGhpcy5nZXRPdXRlclRvcFJpZ2h0Q29ybmVyKCldfX1nZXRWZXJ0aWNhbERpcmVjdGlvbigpe3JldHVyblsiTkUtU1ciLCJOVy1TRSJdLmluZGV4T2YodGhpcy5nZXREaXJlY3Rpb24oKSk+LTE/Ik4tUyI6IlMtTiJ9Z2V0SG9yaXpvbnRhbERpcmVjdGlvbigpe3JldHVyblsi''@;'; put 'put ''TlctU0UiLCJTVy1ORSJdLmluZGV4T2YodGhpcy5nZXREaXJlY3Rpb24oKSk+LTE/IlctRSI6IkUtVyJ9ZmxpcERpcmVjdGlvblZlcnRpY2FsbHkoKXtzd2l0Y2godGhpcy5nZXREaXJlY3Rpb24oKSl7Y2FzZSJOVy1TRSI6dGhpcy5zZXREaXJlY3Rpb24oIlNXLU5FIik7YnJlYWs7Y2FzZSJO''@;'; put 'put ''RS1TVyI6dGhpcy5zZXREaXJlY3Rpb24oIlNFLU5XIik7YnJlYWs7Y2FzZSJTRS1OVyI6dGhpcy5zZXREaXJlY3Rpb24oIk5FLVNXIik7YnJlYWs7Y2FzZSJTVy1ORSI6dGhpcy5zZXREaXJlY3Rpb24oIk5XLVNFIil9fWZsaXBEaXJlY3Rpb25Ib3Jpem9udGFsbHkoKXtzd2l0Y2godGhpcy5n''@;'; put 'put ''ZXREaXJlY3Rpb24oKSl7Y2FzZSJOVy1TRSI6dGhpcy5zZXREaXJlY3Rpb24oIk5FLVNXIik7YnJlYWs7Y2FzZSJORS1TVyI6dGhpcy5zZXREaXJlY3Rpb24oIk5XLVNFIik7YnJlYWs7Y2FzZSJTRS1OVyI6dGhpcy5zZXREaXJlY3Rpb24oIlNXLU5FIik7YnJlYWs7Y2FzZSJTVy1ORSI6dGhp''@;'; put 'put ''cy5zZXREaXJlY3Rpb24oIlNFLU5XIil9fWdldFRvcFN0YXJ0Q29ybmVyKCl7cmV0dXJuIHRoaXMuX2NyZWF0ZUNlbGxDb29yZHMoTWF0aC5taW4odGhpcy5mcm9tLnJvdyx0aGlzLnRvLnJvdyksTWF0aC5taW4odGhpcy5mcm9tLmNvbCx0aGlzLnRvLmNvbCkpLm5vcm1hbGl6ZSgpfWdldFRv''@;'; put 'put ''cExlZnRDb3JuZXIoKXtyZXR1cm4gVTIoTmQsdGhpcyk/dGhpcy5nZXRUb3BFbmRDb3JuZXIoKTp0aGlzLmdldFRvcFN0YXJ0Q29ybmVyKCl9Z2V0Qm90dG9tRW5kQ29ybmVyKCl7cmV0dXJuIHRoaXMuX2NyZWF0ZUNlbGxDb29yZHMoTWF0aC5tYXgodGhpcy5mcm9tLnJvdyx0aGlzLnRvLnJv''@;'; put 'put ''dyksTWF0aC5tYXgodGhpcy5mcm9tLmNvbCx0aGlzLnRvLmNvbCkpLm5vcm1hbGl6ZSgpfWdldEJvdHRvbVJpZ2h0Q29ybmVyKCl7cmV0dXJuIFUyKE5kLHRoaXMpP3RoaXMuZ2V0Qm90dG9tU3RhcnRDb3JuZXIoKTp0aGlzLmdldEJvdHRvbUVuZENvcm5lcigpfWdldFRvcEVuZENvcm5lcigp''@;'; put 'put ''e3JldHVybiB0aGlzLl9jcmVhdGVDZWxsQ29vcmRzKE1hdGgubWluKHRoaXMuZnJvbS5yb3csdGhpcy50by5yb3cpLE1hdGgubWF4KHRoaXMuZnJvbS5jb2wsdGhpcy50by5jb2wpKS5ub3JtYWxpemUoKX1nZXRUb3BSaWdodENvcm5lcigpe3JldHVybiBVMihOZCx0aGlzKT90aGlzLmdldFRv''@;'; put 'put ''cFN0YXJ0Q29ybmVyKCk6dGhpcy5nZXRUb3BFbmRDb3JuZXIoKX1nZXRCb3R0b21TdGFydENvcm5lcigpe3JldHVybiB0aGlzLl9jcmVhdGVDZWxsQ29vcmRzKE1hdGgubWF4KHRoaXMuZnJvbS5yb3csdGhpcy50by5yb3cpLE1hdGgubWluKHRoaXMuZnJvbS5jb2wsdGhpcy50by5jb2wpKS5u''@;'; put 'put ''b3JtYWxpemUoKX1nZXRCb3R0b21MZWZ0Q29ybmVyKCl7cmV0dXJuIFUyKE5kLHRoaXMpP3RoaXMuZ2V0Qm90dG9tRW5kQ29ybmVyKCk6dGhpcy5nZXRCb3R0b21TdGFydENvcm5lcigpfWdldE91dGVyVG9wU3RhcnRDb3JuZXIoKXtyZXR1cm4gdGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhNYXRo''@;'; put 'put ''Lm1pbih0aGlzLmZyb20ucm93LHRoaXMudG8ucm93KSxNYXRoLm1pbih0aGlzLmZyb20uY29sLHRoaXMudG8uY29sKSl9Z2V0T3V0ZXJUb3BMZWZ0Q29ybmVyKCl7cmV0dXJuIFUyKE5kLHRoaXMpP3RoaXMuZ2V0T3V0ZXJUb3BFbmRDb3JuZXIoKTp0aGlzLmdldE91dGVyVG9wU3RhcnRDb3Ju''@;'; put 'put ''ZXIoKX1nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpe3JldHVybiB0aGlzLl9jcmVhdGVDZWxsQ29vcmRzKE1hdGgubWF4KHRoaXMuZnJvbS5yb3csdGhpcy50by5yb3cpLE1hdGgubWF4KHRoaXMuZnJvbS5jb2wsdGhpcy50by5jb2wpKX1nZXRPdXRlckJvdHRvbVJpZ2h0Q29ybmVyKCl7cmV0''@;'; put 'put ''dXJuIFUyKE5kLHRoaXMpP3RoaXMuZ2V0T3V0ZXJCb3R0b21TdGFydENvcm5lcigpOnRoaXMuZ2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKX1nZXRPdXRlclRvcEVuZENvcm5lcigpe3JldHVybiB0aGlzLl9jcmVhdGVDZWxsQ29vcmRzKE1hdGgubWluKHRoaXMuZnJvbS5yb3csdGhpcy50by5y''@;'; put 'put ''b3cpLE1hdGgubWF4KHRoaXMuZnJvbS5jb2wsdGhpcy50by5jb2wpKX1nZXRPdXRlclRvcFJpZ2h0Q29ybmVyKCl7cmV0dXJuIFUyKE5kLHRoaXMpP3RoaXMuZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpOnRoaXMuZ2V0T3V0ZXJUb3BFbmRDb3JuZXIoKX1nZXRPdXRlckJvdHRvbVN0YXJ0Q29y''@;'; put 'put ''bmVyKCl7cmV0dXJuIHRoaXMuX2NyZWF0ZUNlbGxDb29yZHMoTWF0aC5tYXgodGhpcy5mcm9tLnJvdyx0aGlzLnRvLnJvdyksTWF0aC5taW4odGhpcy5mcm9tLmNvbCx0aGlzLnRvLmNvbCkpfWdldE91dGVyQm90dG9tTGVmdENvcm5lcigpe3JldHVybiBVMihOZCx0aGlzKT90aGlzLmdldE91''@;'; put 'put ''dGVyQm90dG9tRW5kQ29ybmVyKCk6dGhpcy5nZXRPdXRlckJvdHRvbVN0YXJ0Q29ybmVyKCl9aXNDb3JuZXIobCl7cmV0dXJuIGwuaXNFcXVhbCh0aGlzLmdldE91dGVyVG9wTGVmdENvcm5lcigpKXx8bC5pc0VxdWFsKHRoaXMuZ2V0T3V0ZXJUb3BSaWdodENvcm5lcigpKXx8bC5pc0VxdWFs''@;'; put 'put ''KHRoaXMuZ2V0T3V0ZXJCb3R0b21MZWZ0Q29ybmVyKCkpfHxsLmlzRXF1YWwodGhpcy5nZXRPdXRlckJvdHRvbVJpZ2h0Q29ybmVyKCkpfWdldE9wcG9zaXRlQ29ybmVyKGwpe3JldHVybiBsIGluc3RhbmNlb2YgaVAmJihsLmlzRXF1YWwodGhpcy5nZXRPdXRlckJvdHRvbUVuZENvcm5lcigp''@;'; put 'put ''KT90aGlzLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKTpsLmlzRXF1YWwodGhpcy5nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCkpP3RoaXMuZ2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKTpsLmlzRXF1YWwodGhpcy5nZXRPdXRlclRvcEVuZENvcm5lcigpKT90aGlzLmdldE91dGVyQm90dG9tU3Rh''@;'; put 'put ''cnRDb3JuZXIoKTpsLmlzRXF1YWwodGhpcy5nZXRPdXRlckJvdHRvbVN0YXJ0Q29ybmVyKCkpP3RoaXMuZ2V0T3V0ZXJUb3BFbmRDb3JuZXIoKTp2b2lkIDApfWdldEJvcmRlcnNTaGFyZWRXaXRoKGwpe2lmKCF0aGlzLmluY2x1ZGVzUmFuZ2UobCkpcmV0dXJuW107Y29uc3QgYV90b3A9TWF0''@;'; put 'put ''aC5taW4odGhpcy5mcm9tLnJvdyx0aGlzLnRvLnJvdyksYV9ib3R0b209TWF0aC5tYXgodGhpcy5mcm9tLnJvdyx0aGlzLnRvLnJvdyksYV9sZWZ0PU1hdGgubWluKHRoaXMuZnJvbS5jb2wsdGhpcy50by5jb2wpLGFfcmlnaHQ9TWF0aC5tYXgodGhpcy5mcm9tLmNvbCx0aGlzLnRvLmNvbCks''@;'; put 'put ''ZF90b3A9TWF0aC5taW4obC5mcm9tLnJvdyxsLnRvLnJvdyksZF9ib3R0b209TWF0aC5tYXgobC5mcm9tLnJvdyxsLnRvLnJvdyksZF9sZWZ0PU1hdGgubWluKGwuZnJvbS5jb2wsbC50by5jb2wpLGRfcmlnaHQ9TWF0aC5tYXgobC5mcm9tLmNvbCxsLnRvLmNvbCksaD1bXTtyZXR1cm4gYV90''@;'; put 'put ''b3A9PT1kX3RvcCYmaC5wdXNoKCJ0b3AiKSxhX3JpZ2h0PT09ZF9yaWdodCYmaC5wdXNoKFUyKE5kLHRoaXMpPyJsZWZ0IjoicmlnaHQiKSxhX2JvdHRvbT09PWRfYm90dG9tJiZoLnB1c2goImJvdHRvbSIpLGFfbGVmdD09PWRfbGVmdCYmaC5wdXNoKFUyKE5kLHRoaXMpPyJyaWdodCI6Imxl''@;'; put 'put ''ZnQiKSxofWdldElubmVyKCl7Y29uc3QgbD10aGlzLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKSxhPXRoaXMuZ2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKSxkPVtdO2ZvcihsZXQgaD1sLnJvdztoPD1hLnJvdztoKyspZm9yKGxldCBmPWwuY29sO2Y8PWEuY29sO2YrKykodGhpcy5mcm9tLnJv''@;'; put 'put ''dyE9PWh8fHRoaXMuZnJvbS5jb2whPT1mKSYmKHRoaXMudG8ucm93IT09aHx8dGhpcy50by5jb2whPT1mKSYmZC5wdXNoKHRoaXMuX2NyZWF0ZUNlbGxDb29yZHMoaCxmKSk7cmV0dXJuIGR9Z2V0QWxsKCl7Y29uc3QgbD10aGlzLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKSxhPXRoaXMuZ2V0''@;'; put 'put ''T3V0ZXJCb3R0b21FbmRDb3JuZXIoKSxkPVtdO2ZvcihsZXQgaD1sLnJvdztoPD1hLnJvdztoKyspZm9yKGxldCBmPWwuY29sO2Y8PWEuY29sO2YrKylkLnB1c2gobC5yb3c9PT1oJiZsLmNvbD09PWY/bDphLnJvdz09PWgmJmEuY29sPT09Zj9hOnRoaXMuX2NyZWF0ZUNlbGxDb29yZHMoaCxm''@;'; put 'put ''KSk7cmV0dXJuIGR9Zm9yQWxsKGwpe2NvbnN0IGE9dGhpcy5nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCksZD10aGlzLmdldE91dGVyQm90dG9tRW5kQ29ybmVyKCk7Zm9yKGxldCBoPWEucm93O2g8PWQucm93O2grKylmb3IobGV0IGY9YS5jb2w7Zjw9ZC5jb2w7ZisrKWlmKCExPT09bChoLGYp''@;'; put 'put ''KXJldHVybn1jbG9uZSgpe3JldHVybiBuZXcgcEsodGhpcy5oaWdobGlnaHQsdGhpcy5mcm9tLHRoaXMudG8sVTIoTmQsdGhpcykpfXRvT2JqZWN0KCl7cmV0dXJue2Zyb206dGhpcy5mcm9tLnRvT2JqZWN0KCksdG86dGhpcy50by50b09iamVjdCgpfX1fY3JlYXRlQ2VsbENvb3JkcyhsLGEp''@;'; put 'put ''e3JldHVybiBuZXcgaVAobCxhLFUyKE5kLHRoaXMpKX19Y29uc3QgZ0s9cEs7ZnVuY3Rpb24gWjIoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIEhRZShjKXt2YXIgbD1mdW5jdGlvbiBOUWUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRv''@;'; put 'put ''UHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3Ry''@;'; put 'put ''aW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09''@;'; put 'put ''YSxjfWNsYXNzIG1Le2dldCBldmVudE1hbmFnZXIoKXtyZXR1cm4gbmV3IGoyKHRoaXMpfWNvbnN0cnVjdG9yKGwsYSl7WjIodGhpcywid3RUYWJsZSIsdm9pZCAwKSxaMih0aGlzLCJ3dFNjcm9sbCIsdm9pZCAwKSxaMih0aGlzLCJ3dFZpZXdwb3J0Iix2b2lkIDApLFoyKHRoaXMsInd0T3Zl''@;'; put 'put ''cmxheXMiLHZvaWQgMCksWjIodGhpcywic2VsZWN0aW9uTWFuYWdlciIsdm9pZCAwKSxaMih0aGlzLCJ3dEV2ZW50Iix2b2lkIDApLFoyKHRoaXMsImd1aWQiLGB3dF8ke2gkKCl9YCksWjIodGhpcywiZHJhd0ludGVycnVwdGVkIiwhMSksWjIodGhpcywiZHJhd24iLCExKSxaMih0aGlzLCJh''@;'; put 'put ''Y3RpdmVPdmVybGF5TmFtZSIsIm1hc3RlciIpLFoyKHRoaXMsImRvbUJpbmRpbmdzIix2b2lkIDApLFoyKHRoaXMsInd0U2V0dGluZ3MiLHZvaWQgMCksdGhpcy5kb21CaW5kaW5ncz17cm9vdFRhYmxlOmwscm9vdERvY3VtZW50Omwub3duZXJEb2N1bWVudCxyb290V2luZG93Omwub3duZXJE''@;'; put 'put ''b2N1bWVudC5kZWZhdWx0Vmlld30sdGhpcy53dFNldHRpbmdzPWEsdGhpcy53dFNjcm9sbD1uZXcgVFFlKHRoaXMuY3JlYXRlU2Nyb2xsRGFvKCkpfWZpbmRPcmlnaW5hbEhlYWRlcnMoKXtjb25zdCBsPVtdO2lmKHRoaXMud3RUYWJsZS5USEVBRC5jaGlsZE5vZGVzLmxlbmd0aCYmdGhpcy53''@;'; put 'put ''dFRhYmxlLlRIRUFELmNoaWxkTm9kZXNbMF0uY2hpbGROb2Rlcy5sZW5ndGgpe2ZvcihsZXQgYT0wLGQ9dGhpcy53dFRhYmxlLlRIRUFELmNoaWxkTm9kZXNbMF0uY2hpbGROb2Rlcy5sZW5ndGg7YTxkO2ErKylsLnB1c2godGhpcy53dFRhYmxlLlRIRUFELmNoaWxkTm9kZXNbMF0uY2hpbGRO''@;'; put 'put ''b2Rlc1thXS5pbm5lckhUTUwpO3RoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJjb2x1bW5IZWFkZXJzIikubGVuZ3RofHx0aGlzLnd0U2V0dGluZ3MudXBkYXRlKCJjb2x1bW5IZWFkZXJzIixbZnVuY3Rpb24oYSxkKXtQbShkLGxbYV0pfV0pfX1jcmVhdGVDZWxsQ29vcmRzKGwsYSl7cmV0''@;'; put 'put ''dXJuIG5ldyBpUChsLGEsdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInJ0bE1vZGUiKSl9Y3JlYXRlQ2VsbFJhbmdlKGwsYSxkKXtyZXR1cm4gbmV3IGdLKGwsYSxkLHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJydGxNb2RlIikpfWRyYXcoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3Ro''@;'; put 'put ''PjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdO3JldHVybiB0aGlzLmRyYXdJbnRlcnJ1cHRlZD0hMSwhdGhpcy53dFRhYmxlLmlzVmlzaWJsZSgpfHxWMmUodGhpcy53dFRhYmxlLnd0Um9vdEVsZW1lbnQucGFyZW50Tm9kZSk/dGhpcy5kcmF3SW50ZXJydXB0ZWQ9ITA6''@;'; put 'put ''dGhpcy53dFRhYmxlLmRyYXcobCksdGhpc31nZXRDZWxsKGwpe2lmKCEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXSkpcmV0dXJuIHRoaXMud3RUYWJsZS5nZXRDZWxsKGwpO2NvbnN0IGQ9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmco''@;'; put 'put ''InRvdGFsUm93cyIpLGg9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkUm93c1RvcCIpLGY9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkUm93c0JvdHRvbSIpLHY9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkQ29sdW1uc1N0YXJ0Iik7aWYobC5yb3c8''@;'; put 'put ''aCYmbC5jb2w8dilyZXR1cm4gdGhpcy53dE92ZXJsYXlzLnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5jbG9uZS53dFRhYmxlLmdldENlbGwobCk7aWYobC5yb3c8aClyZXR1cm4gdGhpcy53dE92ZXJsYXlzLnRvcE92ZXJsYXkuY2xvbmUud3RUYWJsZS5nZXRDZWxsKGwpO2lmKGwuY29s''@;'; put 'put ''PHYmJmwucm93Pj1kLWYpe2lmKHRoaXMud3RPdmVybGF5cy5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXkmJnRoaXMud3RPdmVybGF5cy5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXkuY2xvbmUpcmV0dXJuIHRoaXMud3RPdmVybGF5cy5ib3R0b21JbmxpbmVTdGFydENvcm5l''@;'; put 'put ''ck92ZXJsYXkuY2xvbmUud3RUYWJsZS5nZXRDZWxsKGwpfWVsc2V7aWYobC5jb2w8dilyZXR1cm4gdGhpcy53dE92ZXJsYXlzLmlubGluZVN0YXJ0T3ZlcmxheS5jbG9uZS53dFRhYmxlLmdldENlbGwobCk7aWYobC5yb3c8ZCYmbC5yb3c+PWQtZiYmdGhpcy53dE92ZXJsYXlzLmJvdHRvbU92''@;'; put 'put ''ZXJsYXkmJnRoaXMud3RPdmVybGF5cy5ib3R0b21PdmVybGF5LmNsb25lKXJldHVybiB0aGlzLnd0T3ZlcmxheXMuYm90dG9tT3ZlcmxheS5jbG9uZS53dFRhYmxlLmdldENlbGwobCl9cmV0dXJuIHRoaXMud3RUYWJsZS5nZXRDZWxsKGwpfXNjcm9sbFZpZXdwb3J0KGwsYSxkKXtyZXR1cm4g''@;'; put 'put ''dGhpcy53dFNjcm9sbC5zY3JvbGxWaWV3cG9ydChsLGEsZCl9c2Nyb2xsVmlld3BvcnRIb3Jpem9udGFsbHkobCxhKXtyZXR1cm4gdGhpcy53dFNjcm9sbC5zY3JvbGxWaWV3cG9ydEhvcml6b250YWxseShsLGEpfXNjcm9sbFZpZXdwb3J0VmVydGljYWxseShsLGEpe3JldHVybiB0aGlzLnd0''@;'; put 'put ''U2Nyb2xsLnNjcm9sbFZpZXdwb3J0VmVydGljYWxseShsLGEpfWdldFZpZXdwb3J0KCl7cmV0dXJuW3RoaXMud3RUYWJsZS5nZXRGaXJzdFZpc2libGVSb3coKSx0aGlzLnd0VGFibGUuZ2V0Rmlyc3RWaXNpYmxlQ29sdW1uKCksdGhpcy53dFRhYmxlLmdldExhc3RWaXNpYmxlUm93KCksdGhp''@;'; put 'put ''cy53dFRhYmxlLmdldExhc3RWaXNpYmxlQ29sdW1uKCldfWRlc3Ryb3koKXt0aGlzLnd0T3ZlcmxheXMuZGVzdHJveSgpLHRoaXMud3RFdmVudC5kZXN0cm95KCl9Y3JlYXRlU2Nyb2xsRGFvKCl7Y29uc3QgbD10aGlzO3JldHVybntnZXQgZHJhd24oKXtyZXR1cm4gbC5kcmF3bn0sZ2V0IHRv''@;'; put 'put ''cE92ZXJsYXkoKXtyZXR1cm4gbC53dE92ZXJsYXlzLnRvcE92ZXJsYXl9LGdldCBpbmxpbmVTdGFydE92ZXJsYXkoKXtyZXR1cm4gbC53dE92ZXJsYXlzLmlubGluZVN0YXJ0T3ZlcmxheX0sZ2V0IHd0VGFibGUoKXtyZXR1cm4gbC53dFRhYmxlfSxnZXQgd3RWaWV3cG9ydCgpe3JldHVybiBs''@;'; put 'put ''Lnd0Vmlld3BvcnR9LGdldCB3dFNldHRpbmdzKCl7cmV0dXJuIGwud3RTZXR0aW5nc30sZ2V0IHJvb3RXaW5kb3coKXtyZXR1cm4gbC5kb21CaW5kaW5ncy5yb290V2luZG93fSxnZXQgdG90YWxSb3dzKCl7cmV0dXJuIGwud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKX0sZ2V0''@;'; put 'put ''IHRvdGFsQ29sdW1ucygpe3JldHVybiBsLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxDb2x1bW5zIil9LGdldCBmaXhlZFJvd3NUb3AoKXtyZXR1cm4gbC53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkUm93c1RvcCIpfSxnZXQgZml4ZWRSb3dzQm90dG9tKCl7cmV0dXJuIGwud3RT''@;'; put 'put ''ZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZFJvd3NCb3R0b20iKX0sZ2V0IGZpeGVkQ29sdW1uc1N0YXJ0KCl7cmV0dXJuIGwud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZENvbHVtbnNTdGFydCIpfX19Z2V0VGFibGVEYW8oKXtjb25zdCBsPXRoaXM7cmV0dXJue2dldCB3b3QoKXtyZXR1''@;'; put 'put ''cm4gbH0sZ2V0IHBhcmVudFRhYmxlT2Zmc2V0KCl7cmV0dXJuIGwuY2xvbmVTb3VyY2Uud3RUYWJsZS50YWJsZU9mZnNldH0sZ2V0IGNsb25lU291cmNlKCl7cmV0dXJuIGwuY2xvbmVTb3VyY2V9LGdldCB3b3Jrc3BhY2VXaWR0aCgpe3JldHVybiBsLnd0Vmlld3BvcnQuZ2V0V29ya3NwYWNl''@;'; put 'put ''V2lkdGgoKX0sZ2V0IHd0Vmlld3BvcnQoKXtyZXR1cm4gbC53dFZpZXdwb3J0fSxnZXQgd3RPdmVybGF5cygpe3JldHVybiBsLnd0T3ZlcmxheXN9LGdldCBzZWxlY3Rpb25NYW5hZ2VyKCl7cmV0dXJuIGwuc2VsZWN0aW9uTWFuYWdlcn0sZ2V0IHN0eWxlc0hhbmRsZXIoKXtyZXR1cm4gbC5z''@;'; put 'put ''dHlsZXNIYW5kbGVyfSxnZXQgZHJhd24oKXtyZXR1cm4gbC5kcmF3bn0sc2V0IGRyYXduKGEpe2wuZHJhd249YX0sZ2V0IHd0VGFibGUoKXtyZXR1cm4gbC53dFRhYmxlfSxnZXQgc3RhcnRDb2x1bW5SZW5kZXJlZCgpe3JldHVybiBsLnd0Vmlld3BvcnQuY29sdW1uc1JlbmRlckNhbGN1bGF0''@;'; put 'put ''b3Iuc3RhcnRDb2x1bW59LGdldCBzdGFydENvbHVtblZpc2libGUoKXtyZXR1cm4gbC53dFZpZXdwb3J0LmNvbHVtbnNWaXNpYmxlQ2FsY3VsYXRvci5zdGFydENvbHVtbn0sZ2V0IHN0YXJ0Q29sdW1uUGFydGlhbGx5VmlzaWJsZSgpe3JldHVybiBsLnd0Vmlld3BvcnQuY29sdW1uc1BhcnRp''@;'; put 'put ''YWxseVZpc2libGVDYWxjdWxhdG9yLnN0YXJ0Q29sdW1ufSxnZXQgZW5kQ29sdW1uUmVuZGVyZWQoKXtyZXR1cm4gbC53dFZpZXdwb3J0LmNvbHVtbnNSZW5kZXJDYWxjdWxhdG9yLmVuZENvbHVtbn0sZ2V0IGVuZENvbHVtblZpc2libGUoKXtyZXR1cm4gbC53dFZpZXdwb3J0LmNvbHVtbnNW''@;'; put 'put ''aXNpYmxlQ2FsY3VsYXRvci5lbmRDb2x1bW59LGdldCBlbmRDb2x1bW5QYXJ0aWFsbHlWaXNpYmxlKCl7cmV0dXJuIGwud3RWaWV3cG9ydC5jb2x1bW5zUGFydGlhbGx5VmlzaWJsZUNhbGN1bGF0b3IuZW5kQ29sdW1ufSxnZXQgY291bnRDb2x1bW5zUmVuZGVyZWQoKXtyZXR1cm4gbC53dFZp''@;'; put 'put ''ZXdwb3J0LmNvbHVtbnNSZW5kZXJDYWxjdWxhdG9yLmNvdW50fSxnZXQgY291bnRDb2x1bW5zVmlzaWJsZSgpe3JldHVybiBsLnd0Vmlld3BvcnQuY29sdW1uc1Zpc2libGVDYWxjdWxhdG9yLmNvdW50fSxnZXQgc3RhcnRSb3dSZW5kZXJlZCgpe3JldHVybiBsLnd0Vmlld3BvcnQucm93c1Jl''@;'; put 'put ''bmRlckNhbGN1bGF0b3Iuc3RhcnRSb3d9LGdldCBzdGFydFJvd1Zpc2libGUoKXtyZXR1cm4gbC53dFZpZXdwb3J0LnJvd3NWaXNpYmxlQ2FsY3VsYXRvci5zdGFydFJvd30sZ2V0IHN0YXJ0Um93UGFydGlhbGx5VmlzaWJsZSgpe3JldHVybiBsLnd0Vmlld3BvcnQucm93c1BhcnRpYWxseVZp''@;'; put 'put ''c2libGVDYWxjdWxhdG9yLnN0YXJ0Um93fSxnZXQgZW5kUm93UmVuZGVyZWQoKXtyZXR1cm4gbC53dFZpZXdwb3J0LnJvd3NSZW5kZXJDYWxjdWxhdG9yLmVuZFJvd30sZ2V0IGVuZFJvd1Zpc2libGUoKXtyZXR1cm4gbC53dFZpZXdwb3J0LnJvd3NWaXNpYmxlQ2FsY3VsYXRvci5lbmRSb3d9''@;'; put 'put ''LGdldCBlbmRSb3dQYXJ0aWFsbHlWaXNpYmxlKCl7cmV0dXJuIGwud3RWaWV3cG9ydC5yb3dzUGFydGlhbGx5VmlzaWJsZUNhbGN1bGF0b3IuZW5kUm93fSxnZXQgY291bnRSb3dzUmVuZGVyZWQoKXtyZXR1cm4gbC53dFZpZXdwb3J0LnJvd3NSZW5kZXJDYWxjdWxhdG9yLmNvdW50fSxnZXQg''@;'; put 'put ''Y291bnRSb3dzVmlzaWJsZSgpe3JldHVybiBsLnd0Vmlld3BvcnQucm93c1Zpc2libGVDYWxjdWxhdG9yLmNvdW50fSxnZXQgY29sdW1uSGVhZGVycygpe3JldHVybiBsLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiY29sdW1uSGVhZGVycyIpfSxnZXQgcm93SGVhZGVycygpe3JldHVybiBsLnd0''@;'; put 'put ''U2V0dGluZ3MuZ2V0U2V0dGluZygicm93SGVhZGVycyIpfX19fWZ1bmN0aW9uIEdmZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gVlFlKGMpe3ZhciBsPWZ1bmN0aW9uIEJRZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRp''@;'; put 'put ''dmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09''@;'; put 'put ''bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xh''@;'; put 'put ''c3MgalFlIGV4dGVuZHMgbUt7Y29uc3RydWN0b3IobCxhLGQpe3N1cGVyKGwsYSksR2ZlKHRoaXMsImNsb25lU291cmNlIix2b2lkIDApLEdmZSh0aGlzLCJjbG9uZU92ZXJsYXkiLHZvaWQgMCk7Y29uc3QgaD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZmFjYWRlIix0aGlzKTt0aGlz''@;'; put 'put ''LmNsb25lU291cmNlPWQuc291cmNlLHRoaXMuY2xvbmVPdmVybGF5PWQub3ZlcmxheSx0aGlzLnN0eWxlc0hhbmRsZXI9ZC5zdHlsZXNIYW5kbGVyLHRoaXMud3RUYWJsZT10aGlzLmNsb25lT3ZlcmxheS5jcmVhdGVUYWJsZSh0aGlzLmdldFRhYmxlRGFvKCksaCx0aGlzLmRvbUJpbmRpbmdz''@;'; put 'put ''LHRoaXMud3RTZXR0aW5ncyksdGhpcy53dFZpZXdwb3J0PWQudmlld3BvcnQsdGhpcy5zZWxlY3Rpb25NYW5hZ2VyPWQuc2VsZWN0aW9uTWFuYWdlcix0aGlzLnd0RXZlbnQ9bmV3IEVmZShoLHRoaXMuZG9tQmluZGluZ3MsdGhpcy53dFNldHRpbmdzLHRoaXMuZXZlbnRNYW5hZ2VyLHRoaXMu''@;'; put 'put ''d3RUYWJsZSx0aGlzLnNlbGVjdGlvbk1hbmFnZXIsZC5ldmVudCksdGhpcy5maW5kT3JpZ2luYWxIZWFkZXJzKCl9fWNsYXNzIEZFe2NvbnN0cnVjdG9yKGwsYSxkLGgsZil7KGZ1bmN0aW9uIHpRZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gVVFlKGMpe3ZhciBsPWZ1bmN0aW9uIFpRZShj''@;'; put 'put ''LGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBA''@;'; put 'put ''dG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2''@;'; put 'put ''YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9KSh0aGlzLCJ3dFNldHRpbmdzIixudWxsKSxUcCh0aGlzLCJ3b3QiLGwse3dyaXRhYmxlOiExfSksdGhpcy5kb21CaW5kaW5ncz1mLHRoaXMuZmFjYWRlR2V0dGVyPWEsdGhpcy53dFNl''@;'; put 'put ''dHRpbmdzPWg7Y29uc3R7VEFCTEU6dixoaWRlcjpNLHNwcmVhZGVyOkQsaG9sZGVyOlosd3RSb290RWxlbWVudDpyZX09dGhpcy53b3Qud3RUYWJsZTt0aGlzLmluc3RhbmNlPXRoaXMud290LHRoaXMudHlwZT1kLHRoaXMubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQ9bnVsbCx0aGlzLlRB''@;'; put 'put ''QkxFPXYsdGhpcy5oaWRlcj1NLHRoaXMuc3ByZWFkZXI9RCx0aGlzLmhvbGRlcj1aLHRoaXMud3RSb290RWxlbWVudD1yZSx0aGlzLnRyaW1taW5nQ29udGFpbmVyPWFfKHRoaXMuaGlkZXIucGFyZW50Tm9kZS5wYXJlbnROb2RlKSx0aGlzLm5lZWRGdWxsUmVuZGVyPXRoaXMuc2hvdWxkQmVS''@;'; put 'put ''ZW5kZXJlZCgpLHRoaXMuY2xvbmU9dGhpcy5tYWtlQ2xvbmUoKX1oYXNSZW5kZXJpbmdTdGF0ZUNoYW5nZWQoKXtyZXR1cm4gdGhpcy5uZWVkRnVsbFJlbmRlciE9PXRoaXMuc2hvdWxkQmVSZW5kZXJlZCgpfXVwZGF0ZVN0YXRlT2ZSZW5kZXJpbmcobCl7ImJlZm9yZSI9PT1sJiZ0aGlzLnNo''@;'; put 'put ''b3VsZEJlUmVuZGVyZWQoKT90aGlzLm5lZWRGdWxsUmVuZGVyPSEwOiJhZnRlciI9PT1sJiYhdGhpcy5zaG91bGRCZVJlbmRlcmVkKCkmJih0aGlzLm5lZWRGdWxsUmVuZGVyPSExKX1zaG91bGRCZVJlbmRlcmVkKCl7cmV0dXJuITB9dXBkYXRlVHJpbW1pbmdDb250YWluZXIoKXt0aGlzLnRy''@;'; put 'put ''aW1taW5nQ29udGFpbmVyPWFfKHRoaXMuaGlkZXIucGFyZW50Tm9kZS5wYXJlbnROb2RlKX11cGRhdGVNYWluU2Nyb2xsYWJsZUVsZW1lbnQoKXtjb25zdHt3dFRhYmxlOmx9PXRoaXMud290LHtyb290V2luZG93OmF9PXRoaXMuZG9tQmluZGluZ3M7dGhpcy5tYWluVGFibGVTY3JvbGxhYmxl''@;'; put 'put ''RWxlbWVudD0iaGlkZGVuIj09PWEuZ2V0Q29tcHV0ZWRTdHlsZShsLnd0Um9vdEVsZW1lbnQucGFyZW50Tm9kZSkuZ2V0UHJvcGVydHlWYWx1ZSgib3ZlcmZsb3ciKT90aGlzLndvdC53dFRhYmxlLmhvbGRlcjp5RShsLlRBQkxFKX1nZXRSZWxhdGl2ZUNlbGxQb3NpdGlvbihsLGEsZCl7aWYo''@;'; put 'put ''ITE9PT10aGlzLmNsb25lLnd0VGFibGUuaG9sZGVyLmNvbnRhaW5zKGwpKXJldHVybiB2b2lkIGlsKGBUaGUgcHJvdmlkZWQgZWxlbWVudCBpcyBub3QgYSBjaGlsZCBvZiB0aGUgJHt0aGlzLnR5cGV9IG92ZXJsYXlgKTtjb25zdCBoPXRoaXMubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQ9''@;'; put 'put ''PT10aGlzLmRvbUJpbmRpbmdzLnJvb3RXaW5kb3csZj1kPHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZENvbHVtbnNTdGFydCIpLHY9YTx0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRSb3dzVG9wIiksTT1hPj10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90''@;'; put 'put ''YWxSb3dzIiktdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkUm93c0JvdHRvbSIpLEQ9dGhpcy5jbG9uZS53dFRhYmxlLnNwcmVhZGVyLFo9e3N0YXJ0OnRoaXMuZ2V0UmVsYXRpdmVTdGFydFBvc2l0aW9uKEQpLHRvcDpELm9mZnNldFRvcH0scmU9e3N0YXJ0OnRoaXMuZ2V0UmVs''@;'; put 'put ''YXRpdmVTdGFydFBvc2l0aW9uKGwpLHRvcDpsLm9mZnNldFRvcH07bGV0IGNlPW51bGw7cmV0dXJuIGNlPWg/dGhpcy5nZXRSZWxhdGl2ZUNlbGxQb3NpdGlvbldpdGhpbldpbmRvdyh2LGYscmUsWik6dGhpcy5nZXRSZWxhdGl2ZUNlbGxQb3NpdGlvbldpdGhpbkhvbGRlcih2LE0sZixyZSxa''@;'; put 'put ''KSxjZX1nZXRSZWxhdGl2ZVN0YXJ0UG9zaXRpb24obCl7cmV0dXJuIHRoaXMuaXNSdGwoKT9sLm9mZnNldFBhcmVudC5vZmZzZXRXaWR0aC1sLm9mZnNldExlZnQtbC5vZmZzZXRXaWR0aDpsLm9mZnNldExlZnR9Z2V0UmVsYXRpdmVDZWxsUG9zaXRpb25XaXRoaW5XaW5kb3cobCxhLGQsaCl7''@;'; put 'put ''Y29uc3QgZj10aGlzLndvdC53dFRhYmxlLnd0Um9vdEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7bGV0IHY9MCxNPTA7aWYoYSl7bGV0IEQ9Zi5sZWZ0O3RoaXMuaXNSdGwoKSYmKEQ9dGhpcy5kb21CaW5kaW5ncy5yb290V2luZG93LmlubmVyV2lkdGgtKGYubGVmdCtmLndpZHRo''@;'; put 'put ''K2YwKCkpKSx2PUQ8PTA/LTEqRDowfWVsc2Ugdj1oLnN0YXJ0O3JldHVybiBNPWw/dGhpcy5jbG9uZS53dFRhYmxlLlRBQkxFLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcC1mLnRvcDpoLnRvcCx7c3RhcnQ6ZC5zdGFydCt2LHRvcDpkLnRvcCtNfX1nZXRSZWxhdGl2ZUNlbGxQb3NpdGlv''@;'; put 'put ''bldpdGhpbkhvbGRlcihsLGEsZCxoLGYpe2NvbnN0IHZfaG9yaXpvbnRhbD10aGlzLndvdC53dE92ZXJsYXlzLmlubGluZVN0YXJ0T3ZlcmxheS5nZXRTY3JvbGxQb3NpdGlvbigpLHZfdmVydGljYWw9dGhpcy53b3Qud3RPdmVybGF5cy50b3BPdmVybGF5LmdldFNjcm9sbFBvc2l0aW9uKCk7''@;'; put 'put ''bGV0IE09MCxEPTA7aWYoZHx8KE09dl9ob3Jpem9udGFsLWYuc3RhcnQpLGEpe2NvbnN0IFo9dGhpcy53b3Qud3RUYWJsZS53dFJvb3RFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO0Q9LTEqdGhpcy5jbG9uZS53dFRhYmxlLlRBQkxFLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRv''@;'; put 'put ''cCtaLnRvcH1lbHNlIGx8fChEPXZfdmVydGljYWwtZi50b3ApO3JldHVybntzdGFydDpoLnN0YXJ0LU0sdG9wOmgudG9wLUR9fW1ha2VDbG9uZSgpe2lmKC0xPT09SGZlLmluZGV4T2YodGhpcy50eXBlKSl0aHJvdyBuZXcgRXJyb3IoYENsb25lIHR5cGUgIiR7dGhpcy50eXBlfSIgaXMgbm90''@;'; put 'put ''IHN1cHBvcnRlZC5gKTtjb25zdHt3dFRhYmxlOmwsd3RTZXR0aW5nczphfT10aGlzLndvdCx7cm9vdERvY3VtZW50OmQscm9vdFdpbmRvdzpofT10aGlzLmRvbUJpbmRpbmdzLGY9ZC5jcmVhdGVFbGVtZW50KCJkaXYiKSx2PWQuY3JlYXRlRWxlbWVudCgidGFibGUiKSxNPWwud3RSb290RWxl''@;'; put 'put ''bWVudC5wYXJlbnROb2RlO2YuY2xhc3NOYW1lPWAke3BRZS5nZXQodGhpcy50eXBlKX0gaGFuZHNvbnRhYmxlYCxmLnNldEF0dHJpYnV0ZSgiZGlyIix0aGlzLmlzUnRsKCk/InJ0bCI6Imx0ciIpLGYuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixmLnN0eWxlLnRvcD0wLGYuc3R5bGUub3Zl''@;'; put 'put ''cmZsb3c9InZpc2libGUiLHRoaXMuaXNSdGwoKT9mLnN0eWxlLnJpZ2h0PTA6Zi5zdHlsZS5sZWZ0PTAsYS5nZXRTZXR0aW5nKCJhcmlhVGFncyIpJiZ2byhmLFtbInJvbGUiLCJwcmVzZW50YXRpb24iXV0pLHYuY2xhc3NOYW1lPWwuVEFCTEUuY2xhc3NOYW1lLGwuVEFCTEUuZ2V0QXR0cmli''@;'; put 'put ''dXRlKCJyb2xlIikmJnYuc2V0QXR0cmlidXRlKCJyb2xlIixsLlRBQkxFLmdldEF0dHJpYnV0ZSgicm9sZSIpKSxmLmFwcGVuZENoaWxkKHYpLE0uYXBwZW5kQ2hpbGQoZik7Y29uc3QgWj10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicHJldmVudE92ZXJmbG93Iik7cmV0dXJuIHRoaXMu''@;'; put 'put ''bWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQ9ITA9PT1afHwiaG9yaXpvbnRhbCI9PT1aJiZ0aGlzLnR5cGU9PT0kN3x8InZlcnRpY2FsIj09PVomJnRoaXMudHlwZT09PUs3P2g6ImhpZGRlbiI9PT1oLmdldENvbXB1dGVkU3R5bGUoTSkuZ2V0UHJvcGVydHlWYWx1ZSgib3ZlcmZsb3ciKT9s''@;'; put 'put ''LmhvbGRlcjp5RShsLlRBQkxFKSxuZXcgalFlKHYsdGhpcy53dFNldHRpbmdzLHtzb3VyY2U6dGhpcy53b3Qsb3ZlcmxheTp0aGlzLHZpZXdwb3J0OnRoaXMud290Lnd0Vmlld3BvcnQsZXZlbnQ6dGhpcy53b3Qud3RFdmVudCxzZWxlY3Rpb25NYW5hZ2VyOnRoaXMud290LnNlbGVjdGlvbk1h''@;'; put 'put ''bmFnZXIsc3R5bGVzSGFuZGxlcjp0aGlzLndvdC5zdHlsZXNIYW5kbGVyfSl9cmVmcmVzaCgpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07aWYodGhpcy5uZWVkRnVsbFJlbmRlcil7Y29uc3QgYT10aGlzLmNsb25lLmNsb25l''@;'; put 'put ''U291cmNlO2EuYWN0aXZlT3ZlcmxheU5hbWU9dGhpcy5jbG9uZS53dFRhYmxlLm5hbWUsdGhpcy5jbG9uZS5kcmF3KGwpLGEuYWN0aXZlT3ZlcmxheU5hbWU9Im1hc3RlciJ9fXJlc2V0KCl7Y29uc3QgbD10aGlzLmNsb25lLnd0VGFibGUuaG9sZGVyO1tsLnN0eWxlLHRoaXMuY2xvbmUud3RU''@;'; put 'put ''YWJsZS5oaWRlci5zdHlsZSxsLnBhcmVudE5vZGUuc3R5bGVdLmZvckVhY2godj0+e3Yud2lkdGg9IiIsdi5oZWlnaHQ9IiJ9KX1pc1J0bCgpe3JldHVybiB0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicnRsTW9kZSIpfWRlc3Ryb3koKXt0aGlzLmNsb25lLmV2ZW50TWFuYWdlci5kZXN0''@;'; put 'put ''cm95KCl9fWNvbnN0IHZLPWM9Pntjb25zdCBsPWMuc3R5bGVzSGFuZGxlcjtpZihsLmlzQ2xhc3NpY1RoZW1lKCkpcmV0dXJuIE9iamVjdC5mcmVlemUoe3dpZHRoOjYsaGVpZ2h0OjYsYm9yZGVyV2lkdGg6MSxib3JkZXJTdHlsZToic29saWQiLGJvcmRlckNvbG9yOiIjRkZGIn0pO2NvbnN0''@;'; put 'put ''IGE9bC5nZXRDU1NWYXJpYWJsZVZhbHVlKCJjZWxsLWF1dG9maWxsLXNpemUiKSxkPWwuZ2V0Q1NTVmFyaWFibGVWYWx1ZSgiY2VsbC1hdXRvZmlsbC1ib3JkZXItd2lkdGgiKSxoPWwuZ2V0Q1NTVmFyaWFibGVWYWx1ZSgiY2VsbC1hdXRvZmlsbC1ib3JkZXItY29sb3IiKTtyZXR1cm4gT2Jq''@;'; put 'put ''ZWN0LmZyZWV6ZSh7d2lkdGg6YSxoZWlnaHQ6YSxib3JkZXJXaWR0aDpkLGJvcmRlclN0eWxlOiJzb2xpZCIsYm9yZGVyQ29sb3I6aH0pfTtjbGFzcyAkUWUgZXh0ZW5kcyBGRXtjb25zdHJ1Y3RvcihsLGEsZCxoKXtzdXBlcihsLGEsJDcsZCxoKSxmdW5jdGlvbiBXUWUoYyxsLGEpe3JldHVy''@;'; put 'put ''bihsPWZ1bmN0aW9uIFlRZShjKXt2YXIgbD1mdW5jdGlvbiBHUWUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10''@;'; put 'put ''eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwr''@;'; put 'put ''IiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfSh0aGlzLCJjYWNoZWRGaXhlZFJvd3NUb3AiLC0xKSx0aGlzLmNhY2hlZEZpeGVkUm93c1RvcD10aGlzLnd0U2V0''@;'; put 'put ''dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRSb3dzVG9wIil9Y3JlYXRlVGFibGUoKXtmb3IodmFyIGw9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShsKSxkPTA7ZDxsO2QrKylhW2RdPWFyZ3VtZW50c1tkXTtyZXR1cm4gbmV3IF9RZSguLi5hKX1zaG91bGRCZVJlbmRlcmVkKCl7cmV0dXJu''@;'; put 'put ''IHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJzaG91bGRSZW5kZXJUb3BPdmVybGF5Iil9cmVzZXRGaXhlZFBvc2l0aW9uKCl7aWYoIXRoaXMubmVlZEZ1bGxSZW5kZXJ8fCF0aGlzLnNob3VsZEJlUmVuZGVyZWQoKXx8IXRoaXMud290Lnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUpcmV0''@;'; put 'put ''dXJuITE7Y29uc3QgbD10aGlzLmNsb25lLnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUse3Jvb3RXaW5kb3c6YX09dGhpcy5kb21CaW5kaW5ncyxkPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJwcmV2ZW50T3ZlcmZsb3ciKTtsZXQgaD0wLGY9ITE7aWYodGhpcy50cmltbWluZ0NvbnRh''@;'; put 'put ''aW5lciE9PWF8fGQmJiJ2ZXJ0aWNhbCI9PT1kKWg9dGhpcy5nZXRTY3JvbGxQb3NpdGlvbigpLENFKGwpO2Vsc2V7Y29uc3R7d3RUYWJsZTpNfT10aGlzLndvdCxEPU0uaGlkZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7Zj1NYXRoLmNlaWwoRC5ib3R0b20pPT09bC5vZmZzZXRIZWlnaHQs''@;'; put 'put ''aD10aGlzLmdldE92ZXJsYXlPZmZzZXQoKSxQTyhsLCIwcHgiLGAke2h9cHhgKX1jb25zdCB2PXRoaXMuYWRqdXN0SGVhZGVyQm9yZGVyc1Bvc2l0aW9uKGgsZik7cmV0dXJuIHRoaXMuYWRqdXN0RWxlbWVudHNTaXplKCksdn1zZXRTY3JvbGxQb3NpdGlvbihsKXtjb25zdHtyb290V2luZG93''@;'; put 'put ''OmF9PXRoaXMuZG9tQmluZGluZ3MsZD10aGlzLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50O2xldCBoPSExO2lmKGQ9PT1hJiZsIT09YS5zY3JvbGxZKXtjb25zdCBmPWEuc2Nyb2xsWTthLnNjcm9sbFRvKExPKGEpLGwpLGg9ZiE9PWEuc2Nyb2xsWX1lbHNlIGlmKGwhPT1kLnNjcm9sbFRv''@;'; put 'put ''cCl7Y29uc3QgZj1kLnNjcm9sbFRvcDtkLnNjcm9sbFRvcD1sLGg9ZiE9PWQuc2Nyb2xsVG9wfXJldHVybiBofW9uU2Nyb2xsKCl7dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoIm9uU2Nyb2xsSG9yaXpvbnRhbGx5Iil9c3VtQ2VsbFNpemVzKGwsYSl7Y29uc3QgZD10aGlzLndvdC5zdHls''@;'; put 'put ''ZXNIYW5kbGVyLmdldERlZmF1bHRSb3dIZWlnaHQoKTtsZXQgaD1sLGY9MDtmb3IoO2g8YTspe2NvbnN0IHY9dGhpcy53b3Qud3RUYWJsZS5nZXRSb3dIZWlnaHQoaCk7Zis9dm9pZCAwPT09dj9kOnYsaCs9MX1yZXR1cm4gZn1hZGp1c3RFbGVtZW50c1NpemUoKXt0aGlzLnVwZGF0ZVRyaW1t''@;'; put 'put ''aW5nQ29udGFpbmVyKCksdGhpcy5uZWVkRnVsbFJlbmRlciYmKHRoaXMuYWRqdXN0Um9vdEVsZW1lbnRTaXplKCksdGhpcy5hZGp1c3RSb290Q2hpbGRyZW5TaXplKCkpfWFkanVzdFJvb3RFbGVtZW50U2l6ZSgpe2NvbnN0e3d0VGFibGU6bCx3dFZpZXdwb3J0OmF9PXRoaXMud290LHtyb290''@;'; put 'put ''RG9jdW1lbnQ6ZCxyb290V2luZG93Omh9PXRoaXMuZG9tQmluZGluZ3Msdj10aGlzLmNsb25lLnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUuc3R5bGUsTT10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicHJldmVudE92ZXJmbG93Iik7aWYodGhpcy50cmltbWluZ0NvbnRhaW5lciE9PWh8''@;'; put 'put ''fCJob3Jpem9udGFsIj09PU0pe2xldCBaPWEuZ2V0V29ya3NwYWNlV2lkdGgoKTthLmhhc1ZlcnRpY2FsU2Nyb2xsKCkmJihaLT1mMChkKSksWj1NYXRoLm1pbihaLGwud3RSb290RWxlbWVudC5zY3JvbGxXaWR0aCksdi53aWR0aD1gJHtafXB4YH1lbHNlIHYud2lkdGg9IiI7dGhpcy5jbG9u''@;'; put 'put ''ZS53dFRhYmxlLmhvbGRlci5zdHlsZS53aWR0aD12LndpZHRoO2xldCBEPXh1KHRoaXMuY2xvbmUud3RUYWJsZS5UQUJMRSk7bC5oYXNEZWZpbmVkU2l6ZSgpfHwoRD0wKSx2LmhlaWdodD1gJHtEfXB4YH1hZGp1c3RSb290Q2hpbGRyZW5TaXplKCl7Y29uc3R7aG9sZGVyOmx9PXRoaXMuY2xv''@;'; put 'put ''bmUud3RUYWJsZSxhPXZLKHRoaXMud290KSxkPXRoaXMud290LnNlbGVjdGlvbk1hbmFnZXIuZ2V0Rm9jdXNTZWxlY3Rpb24oKT9wYXJzZUludChhLmhlaWdodCwxMCkvMjowO3RoaXMuY2xvbmUud3RUYWJsZS5oaWRlci5zdHlsZS53aWR0aD10aGlzLmhpZGVyLnN0eWxlLndpZHRoLGwuc3R5''@;'; put 'put ''bGUud2lkdGg9bC5wYXJlbnROb2RlLnN0eWxlLndpZHRoLGwuc3R5bGUuaGVpZ2h0PWAke3BhcnNlSW50KGwucGFyZW50Tm9kZS5zdHlsZS5oZWlnaHQsMTApK2R9cHhgfWFwcGx5VG9ET00oKXtjb25zdCBsPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKTtpZigibnVt''@;'; put 'put ''YmVyIj09dHlwZW9mIHRoaXMud290Lnd0Vmlld3BvcnQucm93c1JlbmRlckNhbGN1bGF0b3Iuc3RhcnRQb3NpdGlvbil0aGlzLnNwcmVhZGVyLnN0eWxlLnRvcD1gJHt0aGlzLndvdC53dFZpZXdwb3J0LnJvd3NSZW5kZXJDYWxjdWxhdG9yLnN0YXJ0UG9zaXRpb259cHhgO2Vsc2V7aWYoMCE9''@;'; put 'put ''PWwpdGhyb3cgbmV3IEVycm9yKCJJbmNvcnJlY3QgdmFsdWUgb2YgdGhlIHJvd3NSZW5kZXJDYWxjdWxhdG9yIik7dGhpcy5zcHJlYWRlci5zdHlsZS50b3A9IjAifXRoaXMuc3ByZWFkZXIuc3R5bGUuYm90dG9tPSIiLHRoaXMubmVlZEZ1bGxSZW5kZXImJnRoaXMuc3luY092ZXJsYXlPZmZz''@;'; put 'put ''ZXQoKX1zeW5jT3ZlcmxheU9mZnNldCgpe2NvbnN0IGw9dGhpcy5pc1J0bCgpPyJyaWdodCI6ImxlZnQiLHtzcHJlYWRlcjphfT10aGlzLmNsb25lLnd0VGFibGU7YS5zdHlsZVtsXT0ibnVtYmVyIj09dHlwZW9mIHRoaXMud290Lnd0Vmlld3BvcnQuY29sdW1uc1JlbmRlckNhbGN1bGF0b3Iu''@;'; put 'put ''c3RhcnRQb3NpdGlvbj9gJHt0aGlzLndvdC53dFZpZXdwb3J0LmNvbHVtbnNSZW5kZXJDYWxjdWxhdG9yLnN0YXJ0UG9zaXRpb259cHhgOiIifXNjcm9sbFRvKGwsYSl7Y29uc3R7d290OmQsd3RTZXR0aW5nczpofT10aGlzLHY9KGQuY2xvbmVTb3VyY2U/ZC5jbG9uZVNvdXJjZTpkKS53dFRh''@;'; put 'put ''YmxlLmhvbGRlcixNPWguZ2V0U2V0dGluZygiY29sdW1uSGVhZGVycyIpLFo9MD09PWguZ2V0U2V0dGluZygiZml4ZWRSb3dzVG9wIikmJk0ubGVuZ3RoPjAmJiFwbyh2LnBhcmVudE5vZGUsImlubmVyQm9yZGVyVG9wIik/MTowO2xldCByZT10aGlzLmdldFRhYmxlUGFyZW50T2Zmc2V0KCks''@;'; put 'put ''Y2U9MDtpZihhJiZ0aGlzLndvdC53dFRhYmxlLmdldFJvd0hlaWdodChsKT50aGlzLndvdC53dFZpZXdwb3J0LmdldFZpZXdwb3J0SGVpZ2h0KCkmJihhPSExKSxhJiZ2Lm9mZnNldEhlaWdodCE9PXYuY2xpZW50SGVpZ2h0JiYoY2U9ZjAodGhpcy5kb21CaW5kaW5ncy5yb290RG9jdW1lbnQp''@;'; put 'put ''KSxhKXtjb25zdCBiZT1oLmdldFNldHRpbmcoImZpeGVkUm93c0JvdHRvbSIpLEVlPWguZ2V0U2V0dGluZygidG90YWxSb3dzIik7cmUrPXRoaXMuc3VtQ2VsbFNpemVzKDAsbCsxKSxyZS09ZC53dFZpZXdwb3J0LmdldFZpZXdwb3J0SGVpZ2h0KCktdGhpcy5zdW1DZWxsU2l6ZXMoRWUtYmUs''@;'; put 'put ''RWUpLHJlKz0xLHJlKz1afWVsc2UgcmUrPXRoaXMuc3VtQ2VsbFNpemVzKGguZ2V0U2V0dGluZygiZml4ZWRSb3dzVG9wIiksbCk7cmV0dXJuIHJlKz1jZSxCMmUodGhpcy5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudCk9PT1yZS1aJiZaPjAmJnRoaXMud290Lnd0T3ZlcmxheXMuZXhwYW5k''@;'; put 'put ''SGlkZXJWZXJ0aWNhbGx5QnkoWiksdGhpcy5zZXRTY3JvbGxQb3NpdGlvbihyZSl9Z2V0VGFibGVQYXJlbnRPZmZzZXQoKXtyZXR1cm4gdGhpcy5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudD09PXRoaXMuZG9tQmluZGluZ3Mucm9vdFdpbmRvdz90aGlzLndvdC53dFRhYmxlLmhvbGRlck9m''@;'; put 'put ''ZnNldC50b3A6MH1nZXRTY3JvbGxQb3NpdGlvbigpe3JldHVybiBPTyh0aGlzLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50LHRoaXMuZG9tQmluZGluZ3Mucm9vdFdpbmRvdyl9Z2V0T3ZlcmxheU9mZnNldCgpe2NvbnN0e3Jvb3RXaW5kb3c6bH09dGhpcy5kb21CaW5kaW5ncyxhPXRoaXMu''@;'; put 'put ''d3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJwcmV2ZW50T3ZlcmZsb3ciKTtsZXQgZD0wO2lmKHRoaXMudHJpbW1pbmdDb250YWluZXI9PT1sJiYoIWF8fCJ2ZXJ0aWNhbCIhPT1hKSl7Y29uc3Qgdj10aGlzLndvdC53dFRhYmxlLmdldFRvdGFsSGVpZ2h0KCktdGhpcy5jbG9uZS53dFRhYmxlLmdl''@;'; put 'put ''dFRvdGFsSGVpZ2h0KCk7ZD1NYXRoLm1heCh0aGlzLmdldFNjcm9sbFBvc2l0aW9uKCktdGhpcy5nZXRUYWJsZVBhcmVudE9mZnNldCgpLDApLGQ+diYmKGQ9MCl9cmV0dXJuIGR9YWRqdXN0SGVhZGVyQm9yZGVyc1Bvc2l0aW9uKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAw''@;'; put 'put ''IT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV07Y29uc3R7d3RTZXR0aW5nczpkfT10aGlzLGg9dGhpcy53b3Qud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZSxmPWQuZ2V0U2V0dGluZygidG90YWxDb2x1bW5zIiksdj0iaG9yaXpvbnRhbCI9PT1kLmdldFNldHRpbmcoInByZXZlbnRPdmVy''@;'; put 'put ''ZmxvdyIpO2Y/bG8oaCwiZW1wdHlDb2x1bW5zIik6VGkoaCwiZW1wdHlDb2x1bW5zIik7bGV0IE09ITE7aWYoIWEmJiF2KXtjb25zdCBEPWQuZ2V0U2V0dGluZygiZml4ZWRSb3dzVG9wIiksWj10aGlzLmNhY2hlZEZpeGVkUm93c1RvcCE9PUQscmU9ZC5nZXRTZXR0aW5nKCJjb2x1bW5IZWFk''@;'; put 'put ''ZXJzIik7aWYoKFp8fDA9PT1EKSYmcmUubGVuZ3RoPjApe2NvbnN0IGNlPXBvKGgsImlubmVyQm9yZGVyVG9wIik7dGhpcy5jYWNoZWRGaXhlZFJvd3NUb3A9ZC5nZXRTZXR0aW5nKCJmaXhlZFJvd3NUb3AiKSxsfHwwPT09ZC5nZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKT8oVGkoaCwiaW5uZXJC''@;'; put 'put ''b3JkZXJUb3AiKSxNPSFjZSk6KGxvKGgsImlubmVyQm9yZGVyVG9wIiksTT1jZSl9fXJldHVybiBNfX1jb25zdCAkZmU9e2dldEZpcnN0UmVuZGVyZWRSb3coKXtjb25zdCBjPXRoaXMuZ2V0UmVuZGVyZWRSb3dzQ291bnQoKTtyZXR1cm4gMD09PWM/LTE6dGhpcy53dFNldHRpbmdzLmdldFNl''@;'; put 'put ''dHRpbmcoInRvdGFsUm93cyIpLWN9LGdldEZpcnN0VmlzaWJsZVJvdygpe3JldHVybiB0aGlzLmdldEZpcnN0UmVuZGVyZWRSb3coKX0sZ2V0Rmlyc3RQYXJ0aWFsbHlWaXNpYmxlUm93KCl7cmV0dXJuIHRoaXMuZ2V0Rmlyc3RSZW5kZXJlZFJvdygpfSxnZXRMYXN0UmVuZGVyZWRSb3coKXty''@;'; put 'put ''ZXR1cm4gMD09PXRoaXMuZ2V0UmVuZGVyZWRSb3dzQ291bnQoKT8tMTp0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxSb3dzIiktMX0sZ2V0TGFzdFZpc2libGVSb3coKXtyZXR1cm4gdGhpcy5nZXRMYXN0UmVuZGVyZWRSb3coKX0sZ2V0TGFzdFBhcnRpYWxseVZpc2libGVSb3co''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5nZXRMYXN0UmVuZGVyZWRSb3coKX0sZ2V0UmVuZGVyZWRSb3dzQ291bnQoKXtyZXR1cm4gTWF0aC5taW4odGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsUm93cyIpLHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZFJvd3NCb3R0b20iKSl9LGdl''@;'; put 'put ''dFZpc2libGVSb3dzQ291bnQoKXtyZXR1cm4gdGhpcy5nZXRSZW5kZXJlZFJvd3NDb3VudCgpfSxnZXRDb2x1bW5IZWFkZXJzQ291bnQ6KCk9PjB9O1RwKCRmZSwiTUlYSU5fTkFNRSIsInN0aWNreVJvd3NCb3R0b20iLHt3cml0YWJsZTohMSxlbnVtZXJhYmxlOiExfSk7Y29uc3QgS2ZlPSRm''@;'; put 'put ''ZTtjbGFzcyBiSyBleHRlbmRzIG1fe2NvbnN0cnVjdG9yKGwsYSxkLGgpe3N1cGVyKGwsYSxkLGgsSXApfX1UbChiSyxLZmUpLFRsKGJLLGRLKTtjb25zdCBxUWU9Yks7Y2xhc3MgZWV0IGV4dGVuZHMgRkV7Y29uc3RydWN0b3IobCxhLGQsaCl7c3VwZXIobCxhLElwLGQsaCksZnVuY3Rpb24g''@;'; put 'put ''WFFlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBKUWUoYyl7dmFyIGw9ZnVuY3Rpb24gUVFlKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQi''@;'; put 'put ''KTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9s''@;'; put 'put ''Ij09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY30odGhpcywiY2FjaGVkRml4ZWRSb3dzQm90dG9tIiwtMSksdGhpcy5jYWNoZWRGaXhl''@;'; put 'put ''ZFJvd3NCb3R0b209dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkUm93c0JvdHRvbSIpfWNyZWF0ZVRhYmxlKCl7Zm9yKHZhciBsPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkobCksZD0wO2Q8bDtkKyspYVtkXT1hcmd1bWVudHNbZF07cmV0dXJuIG5ldyBxUWUoLi4uYSl9''@;'; put 'put ''c2hvdWxkQmVSZW5kZXJlZCgpe3JldHVybiB0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygic2hvdWxkUmVuZGVyQm90dG9tT3ZlcmxheSIpfXJlc2V0Rml4ZWRQb3NpdGlvbigpe2lmKCF0aGlzLm5lZWRGdWxsUmVuZGVyfHwhdGhpcy5zaG91bGRCZVJlbmRlcmVkKCl8fCF0aGlzLndvdC53''@;'; put 'put ''dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlKXJldHVybiExO2NvbnN0e3Jvb3RXaW5kb3c6bH09dGhpcy5kb21CaW5kaW5ncyxhPXRoaXMuY2xvbmUud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZTthLnN0eWxlLnRvcD0iIjtsZXQgZD0wO2NvbnN0IGg9dGhpcy53dFNldHRpbmdzLmdldFNldHRp''@;'; put 'put ''bmcoInByZXZlbnRPdmVyZmxvdyIpO3RoaXMudHJpbW1pbmdDb250YWluZXIhPT1sfHxoJiYidmVydGljYWwiPT09aD8oZD10aGlzLmdldFNjcm9sbFBvc2l0aW9uKCksdGhpcy5yZXBvc2l0aW9uT3ZlcmxheSgpKTooZD10aGlzLmdldE92ZXJsYXlPZmZzZXQoKSxhLnN0eWxlLmJvdHRvbT1g''@;'; put 'put ''JHtkfXB4YCk7Y29uc3QgZj10aGlzLmFkanVzdEhlYWRlckJvcmRlcnNQb3NpdGlvbihkKTtyZXR1cm4gdGhpcy5hZGp1c3RFbGVtZW50c1NpemUoKSxmfXJlcG9zaXRpb25PdmVybGF5KCl7Y29uc3R7d3RUYWJsZTpsLHd0Vmlld3BvcnQ6YX09dGhpcy53b3Qse3Jvb3REb2N1bWVudDpkfT10''@;'; put 'put ''aGlzLmRvbUJpbmRpbmdzLGg9dGhpcy5jbG9uZS53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlO2xldCBmPTA7YS5oYXNWZXJ0aWNhbFNjcm9sbCgpfHwoZis9YS5nZXRXb3Jrc3BhY2VIZWlnaHQoKS1sLmdldFRvdGFsSGVpZ2h0KCkpLGEuaGFzVmVydGljYWxTY3JvbGwoKSYmYS5oYXNIb3Jp''@;'; put 'put ''em9udGFsU2Nyb2xsKCkmJihmKz1mMChkKSksaC5zdHlsZS5ib3R0b209YCR7Zn1weGB9c2V0U2Nyb2xsUG9zaXRpb24obCl7Y29uc3R7cm9vdFdpbmRvdzphfT10aGlzLmRvbUJpbmRpbmdzLGQ9dGhpcy5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudDtsZXQgaD0hMTtpZihkPT09YSYmbCE9''@;'; put 'put ''PWEuc2Nyb2xsWSl7Y29uc3QgZj1hLnNjcm9sbFk7YS5zY3JvbGxUbyhMTyhhKSx0b3ApLGg9ZiE9PWEuc2Nyb2xsWX1lbHNlIGlmKGwhPT1kLnNjcm9sbFRvcCl7Y29uc3QgZj1kLnNjcm9sbFRvcDtkLnNjcm9sbFRvcD1sLGg9ZiE9PWQuc2Nyb2xsVG9wfXJldHVybiBofW9uU2Nyb2xsKCl7''@;'; put 'put ''dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoIm9uU2Nyb2xsSG9yaXpvbnRhbGx5Iil9c3VtQ2VsbFNpemVzKGwsYSl7Y29uc3R7d3RUYWJsZTpkLHN0eWxlc0hhbmRsZXI6aH09dGhpcy53b3QsZj1oLmdldERlZmF1bHRSb3dIZWlnaHQoKTtsZXQgdj1sLE09MDtmb3IoO3Y8YTspe2NvbnN0''@;'; put 'put ''IEQ9ZC5nZXRSb3dIZWlnaHQodik7TSs9dm9pZCAwPT09RD9mOkQsdis9MX1yZXR1cm4gTX1hZGp1c3RFbGVtZW50c1NpemUoKXt0aGlzLnVwZGF0ZVRyaW1taW5nQ29udGFpbmVyKCksdGhpcy5uZWVkRnVsbFJlbmRlciYmKHRoaXMuYWRqdXN0Um9vdEVsZW1lbnRTaXplKCksdGhpcy5hZGp1''@;'; put 'put ''c3RSb290Q2hpbGRyZW5TaXplKCkpfWFkanVzdFJvb3RFbGVtZW50U2l6ZSgpe2NvbnN0e3d0VGFibGU6bCx3dFZpZXdwb3J0OmF9PXRoaXMud290LHtyb290RG9jdW1lbnQ6ZCxyb290V2luZG93Omh9PXRoaXMuZG9tQmluZGluZ3Msdj10aGlzLmNsb25lLnd0VGFibGUuaG9sZGVyLnBhcmVu''@;'; put 'put ''dE5vZGUuc3R5bGUsTT10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicHJldmVudE92ZXJmbG93Iik7aWYodGhpcy50cmltbWluZ0NvbnRhaW5lciE9PWh8fCJob3Jpem9udGFsIj09PU0pe2xldCBaPWEuZ2V0V29ya3NwYWNlV2lkdGgoKTthLmhhc1ZlcnRpY2FsU2Nyb2xsKCkmJihaLT1m''@;'; put 'put ''MChkKSksWj1NYXRoLm1pbihaLGwud3RSb290RWxlbWVudC5zY3JvbGxXaWR0aCksdi53aWR0aD1gJHtafXB4YH1lbHNlIHYud2lkdGg9IiI7dGhpcy5jbG9uZS53dFRhYmxlLmhvbGRlci5zdHlsZS53aWR0aD12LndpZHRoO2xldCBEPXh1KHRoaXMuY2xvbmUud3RUYWJsZS5UQUJMRSk7bC5o''@;'; put 'put ''YXNEZWZpbmVkU2l6ZSgpfHwoRD0wKSx2LmhlaWdodD1gJHtEfXB4YH1hZGp1c3RSb290Q2hpbGRyZW5TaXplKCl7Y29uc3R7aG9sZGVyOmx9PXRoaXMuY2xvbmUud3RUYWJsZTt0aGlzLmNsb25lLnd0VGFibGUuaGlkZXIuc3R5bGUud2lkdGg9dGhpcy5oaWRlci5zdHlsZS53aWR0aCxsLnN0''@;'; put 'put ''eWxlLndpZHRoPWwucGFyZW50Tm9kZS5zdHlsZS53aWR0aCxsLnN0eWxlLmhlaWdodD1sLnBhcmVudE5vZGUuc3R5bGUuaGVpZ2h0fWFwcGx5VG9ET00oKXtjb25zdCBsPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKTtpZigibnVtYmVyIj09dHlwZW9mIHRoaXMud290''@;'; put 'put ''Lnd0Vmlld3BvcnQucm93c1JlbmRlckNhbGN1bGF0b3Iuc3RhcnRQb3NpdGlvbil0aGlzLnNwcmVhZGVyLnN0eWxlLnRvcD1gJHt0aGlzLndvdC53dFZpZXdwb3J0LnJvd3NSZW5kZXJDYWxjdWxhdG9yLnN0YXJ0UG9zaXRpb259cHhgO2Vsc2V7aWYoMCE9PWwpdGhyb3cgbmV3IEVycm9yKCJJ''@;'; put 'put ''bmNvcnJlY3QgdmFsdWUgb2YgdGhlIHJvd3NSZW5kZXJDYWxjdWxhdG9yIik7dGhpcy5zcHJlYWRlci5zdHlsZS50b3A9IjAifXRoaXMuc3ByZWFkZXIuc3R5bGUuYm90dG9tPSIiLHRoaXMubmVlZEZ1bGxSZW5kZXImJnRoaXMuc3luY092ZXJsYXlPZmZzZXQoKX1zeW5jT3ZlcmxheU9mZnNl''@;'; put 'put ''dCgpe2NvbnN0IGw9dGhpcy5pc1J0bCgpPyJyaWdodCI6ImxlZnQiLHtzcHJlYWRlcjphfT10aGlzLmNsb25lLnd0VGFibGU7YS5zdHlsZVtsXT0ibnVtYmVyIj09dHlwZW9mIHRoaXMud290Lnd0Vmlld3BvcnQuY29sdW1uc1JlbmRlckNhbGN1bGF0b3Iuc3RhcnRQb3NpdGlvbj9gJHt0aGlz''@;'; put 'put ''LndvdC53dFZpZXdwb3J0LmNvbHVtbnNSZW5kZXJDYWxjdWxhdG9yLnN0YXJ0UG9zaXRpb259cHhgOiIifXNjcm9sbFRvKGwsYSl7bGV0IGQ9dGhpcy5nZXRUYWJsZVBhcmVudE9mZnNldCgpO2NvbnN0IGY9KHRoaXMud290LmNsb25lU291cmNlP3RoaXMud290LmNsb25lU291cmNlOnRoaXMu''@;'; put 'put ''d290KS53dFRhYmxlLmhvbGRlcjtsZXQgdj0wO2EmJmYub2Zmc2V0SGVpZ2h0IT09Zi5jbGllbnRIZWlnaHQmJih2PWYwKHRoaXMuZG9tQmluZGluZ3Mucm9vdERvY3VtZW50KSksYT8oZCs9dGhpcy5zdW1DZWxsU2l6ZXMoMCxsKzEpLGQtPXRoaXMud290Lnd0Vmlld3BvcnQuZ2V0Vmlld3Bv''@;'; put 'put ''cnRIZWlnaHQoKSxkKz0xKTpkKz10aGlzLnN1bUNlbGxTaXplcyh0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRSb3dzQm90dG9tIiksbCksZCs9dix0aGlzLnNldFNjcm9sbFBvc2l0aW9uKGQpfWdldFRhYmxlUGFyZW50T2Zmc2V0KCl7cmV0dXJuIHRoaXMubWFpblRhYmxlU2Ny''@;'; put 'put ''b2xsYWJsZUVsZW1lbnQ9PT10aGlzLmRvbUJpbmRpbmdzLnJvb3RXaW5kb3c/dGhpcy53b3Qud3RUYWJsZS5ob2xkZXJPZmZzZXQudG9wOjB9Z2V0U2Nyb2xsUG9zaXRpb24oKXtyZXR1cm4gT08odGhpcy5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudCx0aGlzLmRvbUJpbmRpbmdzLnJvb3RX''@;'; put 'put ''aW5kb3cpfWdldE92ZXJsYXlPZmZzZXQoKXtjb25zdHtyb290V2luZG93Omx9PXRoaXMuZG9tQmluZGluZ3MsYT10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicHJldmVudE92ZXJmbG93Iik7bGV0IGQ9MDtpZih0aGlzLnRyaW1taW5nQ29udGFpbmVyPT09bCYmKCFhfHwidmVydGljYWwi''@;'; put 'put ''IT09YSkpe2NvbnN0IGg9dGhpcy53b3Qud3RUYWJsZS5nZXRUb3RhbEhlaWdodCgpLHY9aC10aGlzLmNsb25lLnd0VGFibGUuZ2V0VG90YWxIZWlnaHQoKSxNPXRoaXMuZG9tQmluZGluZ3Mucm9vdERvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQ7ZD1NYXRoLm1heCh0aGlz''@;'; put 'put ''LmdldFRhYmxlUGFyZW50T2Zmc2V0KCktdGhpcy5nZXRTY3JvbGxQb3NpdGlvbigpLU0raCwwKSxkPnYmJihkPTApfXJldHVybiBkfWFkanVzdEhlYWRlckJvcmRlcnNQb3NpdGlvbihsKXtjb25zdCBhPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZFJvd3NCb3R0b20iKSxkPXRo''@;'; put 'put ''aXMuY2FjaGVkRml4ZWRSb3dzQm90dG9tIT09YSxoPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJjb2x1bW5IZWFkZXJzIik7bGV0IGY9ITE7aWYoKGR8fDA9PT1hKSYmaC5sZW5ndGg+MCl7Y29uc3Qgdj10aGlzLndvdC53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlLE09cG8odiwiaW5u''@;'; put 'put ''ZXJCb3JkZXJCb3R0b20iKTt0aGlzLmNhY2hlZEZpeGVkUm93c0JvdHRvbT10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRSb3dzQm90dG9tIiksbHx8MD09PXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKT8oVGkodiwiaW5uZXJCb3JkZXJCb3R0b20iKSxm''@;'; put 'put ''PSFNKToobG8odiwiaW5uZXJCb3JkZXJCb3R0b20iKSxmPU0pfXJldHVybiBmfX1jb25zdCBxZmU9e2dldEZpcnN0UmVuZGVyZWRSb3coKXtjb25zdCBjPXRoaXMuZGF0YUFjY2Vzc09iamVjdC5zdGFydFJvd1JlbmRlcmVkO3JldHVybiBudWxsPT09Yz8tMTpjfSxnZXRGaXJzdFZpc2libGVS''@;'; put 'put ''b3coKXtjb25zdCBjPXRoaXMuZGF0YUFjY2Vzc09iamVjdC5zdGFydFJvd1Zpc2libGU7cmV0dXJuIG51bGw9PT1jPy0xOmN9LGdldEZpcnN0UGFydGlhbGx5VmlzaWJsZVJvdygpe2NvbnN0IGM9dGhpcy5kYXRhQWNjZXNzT2JqZWN0LnN0YXJ0Um93UGFydGlhbGx5VmlzaWJsZTtyZXR1cm4g''@;'; put 'put ''bnVsbD09PWM/LTE6Y30sZ2V0TGFzdFJlbmRlcmVkUm93KCl7Y29uc3QgYz10aGlzLmRhdGFBY2Nlc3NPYmplY3QuZW5kUm93UmVuZGVyZWQ7cmV0dXJuIG51bGw9PT1jPy0xOmN9LGdldExhc3RWaXNpYmxlUm93KCl7Y29uc3QgYz10aGlzLmRhdGFBY2Nlc3NPYmplY3QuZW5kUm93VmlzaWJs''@;'; put 'put ''ZTtyZXR1cm4gbnVsbD09PWM/LTE6Y30sZ2V0TGFzdFBhcnRpYWxseVZpc2libGVSb3coKXtjb25zdCBjPXRoaXMuZGF0YUFjY2Vzc09iamVjdC5lbmRSb3dQYXJ0aWFsbHlWaXNpYmxlO3JldHVybiBudWxsPT09Yz8tMTpjfSxnZXRSZW5kZXJlZFJvd3NDb3VudCgpe3JldHVybiB0aGlzLmRh''@;'; put 'put ''dGFBY2Nlc3NPYmplY3QuY291bnRSb3dzUmVuZGVyZWR9LGdldFZpc2libGVSb3dzQ291bnQoKXtyZXR1cm4gdGhpcy5kYXRhQWNjZXNzT2JqZWN0LmNvdW50Um93c1Zpc2libGV9LGdldENvbHVtbkhlYWRlcnNDb3VudCgpe3JldHVybiB0aGlzLmRhdGFBY2Nlc3NPYmplY3QuY29sdW1uSGVh''@;'; put 'put ''ZGVycy5sZW5ndGh9fTtUcChxZmUsIk1JWElOX05BTUUiLCJjYWxjdWxhdGVkUm93cyIse3dyaXRhYmxlOiExLGVudW1lcmFibGU6ITF9KTtjb25zdCBYZmU9cWZlLEpmZT17Z2V0Rmlyc3RSZW5kZXJlZENvbHVtbigpe3JldHVybiAwPT09dGhpcy5nZXRSZW5kZXJlZENvbHVtbnNDb3VudCgp''@;'; put 'put ''Py0xOjB9LGdldEZpcnN0VmlzaWJsZUNvbHVtbigpe3JldHVybiB0aGlzLmdldEZpcnN0UmVuZGVyZWRDb2x1bW4oKX0sZ2V0Rmlyc3RQYXJ0aWFsbHlWaXNpYmxlQ29sdW1uKCl7cmV0dXJuIHRoaXMuZ2V0Rmlyc3RSZW5kZXJlZENvbHVtbigpfSxnZXRMYXN0UmVuZGVyZWRDb2x1bW4oKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5nZXRSZW5kZXJlZENvbHVtbnNDb3VudCgpLTF9LGdldExhc3RWaXNpYmxlQ29sdW1uKCl7cmV0dXJuIHRoaXMuZ2V0TGFzdFJlbmRlcmVkQ29sdW1uKCl9LGdldExhc3RQYXJ0aWFsbHlWaXNpYmxlQ29sdW1uKCl7cmV0dXJuIHRoaXMuZ2V0TGFzdFJlbmRlcmVkQ29sdW1u''@;'; put 'put ''KCl9LGdldFJlbmRlcmVkQ29sdW1uc0NvdW50KCl7cmV0dXJuIE1hdGgubWluKHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbENvbHVtbnMiKSx0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRDb2x1bW5zU3RhcnQiKSl9LGdldFZpc2libGVDb2x1bW5zQ291bnQoKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5nZXRSZW5kZXJlZENvbHVtbnNDb3VudCgpfSxnZXRSb3dIZWFkZXJzQ291bnQoKXtyZXR1cm4gdGhpcy5kYXRhQWNjZXNzT2JqZWN0LnJvd0hlYWRlcnMubGVuZ3RofX07VHAoSmZlLCJNSVhJTl9OQU1FIiwic3RpY2t5Q29sdW1uc1N0YXJ0Iix7d3JpdGFibGU6ITEsZW51''@;'; put 'put ''bWVyYWJsZTohMX0pO2NvbnN0IHlLPUpmZTtjbGFzcyBfSyBleHRlbmRzIG1fe2NvbnN0cnVjdG9yKGwsYSxkLGgpe3N1cGVyKGwsYSxkLGgsSzcpfX1UbChfSyxYZmUpLFRsKF9LLHlLKTtjb25zdCByZXQ9X0s7Y2xhc3MgaWV0IGV4dGVuZHMgRkV7Y29uc3RydWN0b3IobCxhLGQsaCl7c3Vw''@;'; put 'put ''ZXIobCxhLEs3LGQsaCl9Y3JlYXRlVGFibGUoKXtmb3IodmFyIGw9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShsKSxkPTA7ZDxsO2QrKylhW2RdPWFyZ3VtZW50c1tkXTtyZXR1cm4gbmV3IHJldCguLi5hKX1zaG91bGRCZVJlbmRlcmVkKCl7cmV0dXJuIHRoaXMud3RTZXR0aW5ncy5n''@;'; put 'put ''ZXRTZXR0aW5nKCJzaG91bGRSZW5kZXJJbmxpbmVTdGFydE92ZXJsYXkiKX1yZXNldEZpeGVkUG9zaXRpb24oKXtjb25zdHt3dFRhYmxlOmx9PXRoaXMud290O2lmKCF0aGlzLm5lZWRGdWxsUmVuZGVyfHwhdGhpcy5zaG91bGRCZVJlbmRlcmVkKCl8fCFsLmhvbGRlci5wYXJlbnROb2RlKXJl''@;'; put 'put ''dHVybiExO2NvbnN0e3Jvb3RXaW5kb3c6YX09dGhpcy5kb21CaW5kaW5ncyxkPXRoaXMuY2xvbmUud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZSxoPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJwcmV2ZW50T3ZlcmZsb3ciKTtsZXQgZj0wO3RoaXMudHJpbW1pbmdDb250YWluZXIhPT1h''@;'; put 'put ''fHxoJiYiaG9yaXpvbnRhbCI9PT1oPyhmPXRoaXMuZ2V0U2Nyb2xsUG9zaXRpb24oKSxDRShkKSk6KGY9dGhpcy5nZXRPdmVybGF5T2Zmc2V0KCkqKHRoaXMuaXNSdGwoKT8tMToxKSxQTyhkLGAke2Z9cHhgLCIwcHgiKSk7Y29uc3Qgdj10aGlzLmFkanVzdEhlYWRlckJvcmRlcnNQb3NpdGlv''@;'; put 'put ''bihmKTtyZXR1cm4gdGhpcy5hZGp1c3RFbGVtZW50c1NpemUoKSx2fXNldFNjcm9sbFBvc2l0aW9uKGwpe2NvbnN0e3Jvb3RXaW5kb3c6YX09dGhpcy5kb21CaW5kaW5ncztsZXQgZD0hMTt0aGlzLmlzUnRsKCkmJihsPS1sKTtjb25zdCBoPXRoaXMubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1l''@;'; put 'put ''bnQ7aWYoaD09PWEmJmwhPT1hLnNjcm9sbFgpe2NvbnN0IGY9YS5zY3JvbGxYO2Euc2Nyb2xsVG8obCxfJChhKSksZD1mIT09YS5zY3JvbGxYfWVsc2UgaWYobCE9PWguc2Nyb2xsTGVmdCl7Y29uc3QgZj1oLnNjcm9sbExlZnQ7aC5zY3JvbGxMZWZ0PWwsZD1mIT09aC5zY3JvbGxMZWZ0fXJl''@;'; put 'put ''dHVybiBkfW9uU2Nyb2xsKCl7dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoIm9uU2Nyb2xsVmVydGljYWxseSIpfXN1bUNlbGxTaXplcyhsLGEpe2NvbnN0IGQ9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImRlZmF1bHRDb2x1bW5XaWR0aCIpO2xldCBoPWwsZj0wO2Zvcig7aDxhOylm''@;'; put 'put ''Kz10aGlzLndvdC53dFRhYmxlLmdldENvbHVtbldpZHRoKGgpfHxkLGgrPTE7cmV0dXJuIGZ9YWRqdXN0RWxlbWVudHNTaXplKCl7dGhpcy51cGRhdGVUcmltbWluZ0NvbnRhaW5lcigpLHRoaXMubmVlZEZ1bGxSZW5kZXImJih0aGlzLmFkanVzdFJvb3RFbGVtZW50U2l6ZSgpLHRoaXMuYWRq''@;'; put 'put ''dXN0Um9vdENoaWxkcmVuU2l6ZSgpKX1hZGp1c3RSb290RWxlbWVudFNpemUoKXtjb25zdHt3dFRhYmxlOmwsd3RWaWV3cG9ydDphfT10aGlzLndvdCx7cm9vdERvY3VtZW50OmQscm9vdFdpbmRvdzpofT10aGlzLmRvbUJpbmRpbmdzLHY9dGhpcy5jbG9uZS53dFRhYmxlLmhvbGRlci5wYXJl''@;'; put 'put ''bnROb2RlLnN0eWxlLE09dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInByZXZlbnRPdmVyZmxvdyIpO2lmKHRoaXMudHJpbW1pbmdDb250YWluZXIhPT1ofHwidmVydGljYWwiPT09TSl7bGV0IFo9YS5nZXRXb3Jrc3BhY2VIZWlnaHQoKTthLmhhc0hvcml6b250YWxTY3JvbGwoKSYmKFot''@;'; put 'put ''PWYwKGQpKSxaPU1hdGgubWluKFosbC53dFJvb3RFbGVtZW50LnNjcm9sbEhlaWdodCksdi5oZWlnaHQ9YCR7Wn1weGB9ZWxzZSB2LmhlaWdodD0iIjt0aGlzLmNsb25lLnd0VGFibGUuaG9sZGVyLnN0eWxlLmhlaWdodD12LmhlaWdodDtjb25zdCBEPXN1KHRoaXMuY2xvbmUud3RUYWJsZS5U''@;'; put 'put ''QUJMRSk7di53aWR0aD1gJHtEfXB4YH1hZGp1c3RSb290Q2hpbGRyZW5TaXplKCl7Y29uc3R7aG9sZGVyOmx9PXRoaXMuY2xvbmUud3RUYWJsZSxhPXZLKHRoaXMud290KSxkPXRoaXMud290LnNlbGVjdGlvbk1hbmFnZXIuZ2V0Rm9jdXNTZWxlY3Rpb24oKT9wYXJzZUludChhLndpZHRoLDEw''@;'; put 'put ''KS8yOjA7dGhpcy5jbG9uZS53dFRhYmxlLmhpZGVyLnN0eWxlLmhlaWdodD10aGlzLmhpZGVyLnN0eWxlLmhlaWdodCxsLnN0eWxlLmhlaWdodD1sLnBhcmVudE5vZGUuc3R5bGUuaGVpZ2h0LGwuc3R5bGUud2lkdGg9YCR7cGFyc2VJbnQobC5wYXJlbnROb2RlLnN0eWxlLndpZHRoLDEwKStk''@;'; put 'put ''fXB4YH1hcHBseVRvRE9NKCl7Y29uc3QgbD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxDb2x1bW5zIiksYT10aGlzLmlzUnRsKCk/InJpZ2h0IjoibGVmdCI7aWYoIm51bWJlciI9PXR5cGVvZiB0aGlzLndvdC53dFZpZXdwb3J0LmNvbHVtbnNSZW5kZXJDYWxjdWxhdG9yLnN0''@;'; put 'put ''YXJ0UG9zaXRpb24pdGhpcy5zcHJlYWRlci5zdHlsZVthXT1gJHt0aGlzLndvdC53dFZpZXdwb3J0LmNvbHVtbnNSZW5kZXJDYWxjdWxhdG9yLnN0YXJ0UG9zaXRpb259cHhgO2Vsc2V7aWYoMCE9PWwpdGhyb3cgbmV3IEVycm9yKCJJbmNvcnJlY3QgdmFsdWUgb2YgdGhlIGNvbHVtbnNSZW5k''@;'; put 'put ''ZXJDYWxjdWxhdG9yIik7dGhpcy5zcHJlYWRlci5zdHlsZVthXT0iMCJ9dGhpcy5pc1J0bCgpP3RoaXMuc3ByZWFkZXIuc3R5bGUubGVmdD0iIjp0aGlzLnNwcmVhZGVyLnN0eWxlLnJpZ2h0PSIiLHRoaXMubmVlZEZ1bGxSZW5kZXImJnRoaXMuc3luY092ZXJsYXlPZmZzZXQoKX1zeW5jT3Zl''@;'; put 'put ''cmxheU9mZnNldCgpe3RoaXMuY2xvbmUud3RUYWJsZS5zcHJlYWRlci5zdHlsZS50b3A9Im51bWJlciI9PXR5cGVvZiB0aGlzLndvdC53dFZpZXdwb3J0LnJvd3NSZW5kZXJDYWxjdWxhdG9yLnN0YXJ0UG9zaXRpb24/YCR7dGhpcy53b3Qud3RWaWV3cG9ydC5yb3dzUmVuZGVyQ2FsY3VsYXRv''@;'; put 'put ''ci5zdGFydFBvc2l0aW9ufXB4YDoiIn1zY3JvbGxUbyhsLGEpe2NvbnN0e3d0U2V0dGluZ3M6ZH09dGhpcyxoPWQuZ2V0U2V0dGluZygicm93SGVhZGVycyIpLGY9ZC5nZXRTZXR0aW5nKCJmaXhlZENvbHVtbnNTdGFydCIpLE09KHRoaXMud290LmNsb25lU291cmNlP3RoaXMud290LmNsb25l''@;'; put 'put ''U291cmNlOnRoaXMud290KS53dFRhYmxlLmhvbGRlcixEPTA9PT1mJiZoLmxlbmd0aD4wJiYhcG8oTS5wYXJlbnROb2RlLCJpbm5lckJvcmRlcklubGluZVN0YXJ0Iik/MTowO2xldCBaPXRoaXMuZ2V0VGFibGVQYXJlbnRPZmZzZXQoKSxyZT0wO3JldHVybiBhJiZ0aGlzLndvdC53dFRhYmxl''@;'; put 'put ''LmdldENvbHVtbldpZHRoKGwpPnRoaXMud290Lnd0Vmlld3BvcnQuZ2V0Vmlld3BvcnRXaWR0aCgpJiYoYT0hMSksYSYmTS5vZmZzZXRXaWR0aCE9PU0uY2xpZW50V2lkdGgmJihyZT1mMCh0aGlzLmRvbUJpbmRpbmdzLnJvb3REb2N1bWVudCkpLGE/KForPXRoaXMuc3VtQ2VsbFNpemVzKDAs''@;'; put 'put ''bCsxKSxaLT10aGlzLndvdC53dFZpZXdwb3J0LmdldFZpZXdwb3J0V2lkdGgoKSxaKz1EKTpaKz10aGlzLnN1bUNlbGxTaXplcyh0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRDb2x1bW5zU3RhcnQiKSxsKSxaKz1yZSxqMmUodGhpcy5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVu''@;'; put 'put ''dCk9PT1aLUQmJkQ+MCYmdGhpcy53b3Qud3RPdmVybGF5cy5leHBhbmRIaWRlckhvcml6b250YWxseUJ5KEQpLHRoaXMuc2V0U2Nyb2xsUG9zaXRpb24oWil9Z2V0VGFibGVQYXJlbnRPZmZzZXQoKXtsZXQgYT0wO3JldHVybiF0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicHJldmVudE92''@;'; put 'put ''ZXJmbG93IikmJnRoaXMudHJpbW1pbmdDb250YWluZXI9PT10aGlzLmRvbUJpbmRpbmdzLnJvb3RXaW5kb3cmJihhPXRoaXMud290Lnd0VGFibGUuaG9sZGVyT2Zmc2V0LmxlZnQpLGF9Z2V0U2Nyb2xsUG9zaXRpb24oKXtyZXR1cm4gTWF0aC5hYnModyQodGhpcy5tYWluVGFibGVTY3JvbGxh''@;'; put 'put ''YmxlRWxlbWVudCx0aGlzLmRvbUJpbmRpbmdzLnJvb3RXaW5kb3cpKX1nZXRPdmVybGF5T2Zmc2V0KCl7Y29uc3R7cm9vdFdpbmRvdzpsfT10aGlzLmRvbUJpbmRpbmdzLGE9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInByZXZlbnRPdmVyZmxvdyIpO2xldCBkPTA7cmV0dXJuIHRoaXMu''@;'; put 'put ''dHJpbW1pbmdDb250YWluZXIhPT1sfHxhJiYiaG9yaXpvbnRhbCI9PT1hfHwoZD10aGlzLmlzUnRsKCk/TWF0aC5hYnMoTWF0aC5taW4odGhpcy5nZXRUYWJsZVBhcmVudE9mZnNldCgpLXRoaXMuZ2V0U2Nyb2xsUG9zaXRpb24oKSwwKSk6TWF0aC5tYXgodGhpcy5nZXRTY3JvbGxQb3NpdGlv''@;'; put 'put ''bigpLXRoaXMuZ2V0VGFibGVQYXJlbnRPZmZzZXQoKSwwKSxkPnRoaXMud290Lnd0VGFibGUuZ2V0VG90YWxXaWR0aCgpLXRoaXMuY2xvbmUud3RUYWJsZS5nZXRUb3RhbFdpZHRoKCkmJihkPTApKSxkfWFkanVzdEhlYWRlckJvcmRlcnNQb3NpdGlvbihsKXtjb25zdHt3dFNldHRpbmdzOmF9''@;'; put 'put ''PXRoaXMsZD10aGlzLndvdC53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlLGg9YS5nZXRTZXR0aW5nKCJyb3dIZWFkZXJzIiksZj1hLmdldFNldHRpbmcoImZpeGVkQ29sdW1uc1N0YXJ0Iiksdj1hLmdldFNldHRpbmcoInRvdGFsUm93cyIpLE09InZlcnRpY2FsIj09PWEuZ2V0U2V0dGluZygi''@;'; put 'put ''cHJldmVudE92ZXJmbG93Iik7dj9sbyhkLCJlbXB0eVJvd3MiKTpUaShkLCJlbXB0eVJvd3MiKTtsZXQgRD0hMTtpZighTSlpZihmJiYhaC5sZW5ndGgpVGkoZCwiaW5uZXJCb3JkZXJMZWZ0IGlubmVyQm9yZGVySW5saW5lU3RhcnQiKTtlbHNlIGlmKCFmJiZoLmxlbmd0aCl7Y29uc3QgWj1w''@;'; put 'put ''byhkLCJpbm5lckJvcmRlcklubGluZVN0YXJ0Iik7bD8oVGkoZCwiaW5uZXJCb3JkZXJMZWZ0IGlubmVyQm9yZGVySW5saW5lU3RhcnQiKSxEPSFaKToobG8oZCwiaW5uZXJCb3JkZXJMZWZ0IGlubmVyQm9yZGVySW5saW5lU3RhcnQiKSxEPVopfXJldHVybiBEfX1jbGFzcyB3SyBleHRlbmRz''@;'; put 'put ''IG1fe2NvbnN0cnVjdG9yKGwsYSxkLGgpe3N1cGVyKGwsYSxkLGgscTcpfX1UbCh3SyxWZmUpLFRsKHdLLHlLKTtjb25zdCBhZXQ9d0s7ZnVuY3Rpb24gUWZlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBvZXQoYyl7dmFyIGw9ZnVuY3Rpb24gc2V0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVv''@;'; put 'put ''ZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVy''@;'; put 'put ''biBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxj''@;'; put 'put ''b25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBjZXQgZXh0ZW5kcyBGRXtjb25zdHJ1Y3RvcihsLGEsZCxoLGYsdil7c3VwZXIobCxhLHE3LGQsaCksUWZlKHRoaXMsInRvcE92ZXJsYXkiLHZvaWQgMCksUWZlKHRoaXMsImlubGluZVN0YXJ0T3ZlcmxheSIsdm9p''@;'; put 'put ''ZCAwKSx0aGlzLnRvcE92ZXJsYXk9Zix0aGlzLmlubGluZVN0YXJ0T3ZlcmxheT12fWNyZWF0ZVRhYmxlKCl7Zm9yKHZhciBsPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkobCksZD0wO2Q8bDtkKyspYVtkXT1hcmd1bWVudHNbZF07cmV0dXJuIG5ldyBhZXQoLi4uYSl9c2hvdWxkQmVS''@;'; put 'put ''ZW5kZXJlZCgpe3JldHVybiB0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygic2hvdWxkUmVuZGVyVG9wT3ZlcmxheSIpJiZ0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygic2hvdWxkUmVuZGVySW5saW5lU3RhcnRPdmVybGF5Iil9cmVzZXRGaXhlZFBvc2l0aW9uKCl7aWYodGhpcy51cGRh''@;'; put 'put ''dGVUcmltbWluZ0NvbnRhaW5lcigpLCF0aGlzLndvdC53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlKXJldHVybiExO2NvbnN0IGw9dGhpcy5jbG9uZS53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlO3RoaXMudHJpbW1pbmdDb250YWluZXI9PT10aGlzLmRvbUJpbmRpbmdzLnJvb3RXaW5kb3c/''@;'; put 'put ''UE8obCx0aGlzLmlubGluZVN0YXJ0T3ZlcmxheS5nZXRPdmVybGF5T2Zmc2V0KCkqKHRoaXMuaXNSdGwoKT8tMToxKSsicHgiLGAke3RoaXMudG9wT3ZlcmxheS5nZXRPdmVybGF5T2Zmc2V0KCl9cHhgKTpDRShsKTtsZXQgYT14dSh0aGlzLmNsb25lLnd0VGFibGUuVEFCTEUpO2NvbnN0IGQ9''@;'; put 'put ''c3UodGhpcy5jbG9uZS53dFRhYmxlLlRBQkxFKTtyZXR1cm4gdGhpcy53b3Qud3RUYWJsZS5oYXNEZWZpbmVkU2l6ZSgpfHwoYT0wKSxsLnN0eWxlLmhlaWdodD1gJHthfXB4YCxsLnN0eWxlLndpZHRoPWAke2R9cHhgLCExfX1jbGFzcyBDSyBleHRlbmRzIG1fe2NvbnN0cnVjdG9yKGwsYSxk''@;'; put 'put ''LGgpe3N1cGVyKGwsYSxkLGgsQm0pfX1UbChDSyxLZmUpLFRsKENLLHlLKTtjb25zdCB1ZXQ9Q0s7Y2xhc3MgZGV0IGV4dGVuZHMgRkV7Y29uc3RydWN0b3IobCxhLGQsaCxmLHYpe3N1cGVyKGwsYSxCbSxkLGgpLHRoaXMuYm90dG9tT3ZlcmxheT1mLHRoaXMuaW5saW5lU3RhcnRPdmVybGF5''@;'; put 'put ''PXZ9Y3JlYXRlVGFibGUoKXtmb3IodmFyIGw9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShsKSxkPTA7ZDxsO2QrKylhW2RdPWFyZ3VtZW50c1tkXTtyZXR1cm4gbmV3IHVldCguLi5hKX1zaG91bGRCZVJlbmRlcmVkKCl7cmV0dXJuIHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJz''@;'; put 'put ''aG91bGRSZW5kZXJCb3R0b21PdmVybGF5IikmJnRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJzaG91bGRSZW5kZXJJbmxpbmVTdGFydE92ZXJsYXkiKX1yZXNldEZpeGVkUG9zaXRpb24oKXtjb25zdHt3b3Q6bH09dGhpcztpZih0aGlzLnVwZGF0ZVRyaW1taW5nQ29udGFpbmVyKCksIWwu''@;'; put 'put ''d3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZSlyZXR1cm4hMTtjb25zdCBhPXRoaXMuY2xvbmUud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZTtpZihhLnN0eWxlLnRvcD0iIix0aGlzLnRyaW1taW5nQ29udGFpbmVyPT09dGhpcy5kb21CaW5kaW5ncy5yb290V2luZG93KXtjb25zdCBmPXRoaXMu''@;'; put 'put ''aW5saW5lU3RhcnRPdmVybGF5LmdldE92ZXJsYXlPZmZzZXQoKSx2PXRoaXMuYm90dG9tT3ZlcmxheS5nZXRPdmVybGF5T2Zmc2V0KCk7YS5zdHlsZVt0aGlzLmlzUnRsKCk/InJpZ2h0IjoibGVmdCJdPWAke2Z9cHhgLGEuc3R5bGUuYm90dG9tPWAke3Z9cHhgfWVsc2UgQ0UoYSksdGhpcy5y''@;'; put 'put ''ZXBvc2l0aW9uT3ZlcmxheSgpO2xldCBkPXh1KHRoaXMuY2xvbmUud3RUYWJsZS5UQUJMRSk7Y29uc3QgaD1zdSh0aGlzLmNsb25lLnd0VGFibGUuVEFCTEUpO3JldHVybiB0aGlzLndvdC53dFRhYmxlLmhhc0RlZmluZWRTaXplKCl8fChkPTApLGEuc3R5bGUuaGVpZ2h0PWAke2R9cHhgLGEu''@;'; put 'put ''c3R5bGUud2lkdGg9YCR7aH1weGAsITF9cmVwb3NpdGlvbk92ZXJsYXkoKXtjb25zdHt3dFRhYmxlOmwsd3RWaWV3cG9ydDphfT10aGlzLndvdCx7cm9vdERvY3VtZW50OmR9PXRoaXMuZG9tQmluZGluZ3MsaD10aGlzLmNsb25lLnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGU7bGV0IGY9MDth''@;'; put 'put ''Lmhhc1ZlcnRpY2FsU2Nyb2xsKCl8fChmKz1hLmdldFdvcmtzcGFjZUhlaWdodCgpLWwuZ2V0VG90YWxIZWlnaHQoKSksYS5oYXNWZXJ0aWNhbFNjcm9sbCgpJiZhLmhhc0hvcml6b250YWxTY3JvbGwoKSYmKGYrPWYwKGQpKSxoLnN0eWxlLmJvdHRvbT1gJHtmfXB4YH19ZnVuY3Rpb24gYVAo''@;'; put 'put ''YyxsLGEpeyhmdW5jdGlvbiBoZXQoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIHdnKGMsbCxhKXtyZXR1''@;'; put 'put ''cm4obD1mdW5jdGlvbiBmZXQoYyl7dmFyIGw9ZnVuY3Rpb24gcGV0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9''@;'; put 'put ''dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDps''@;'; put 'put ''KyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBYNyhjLGwsYSl7cmV0dXJuIGMuc2V0KGUzZShjLGwpLGEpLGF9ZnVuY3Rpb24gQ2coYyxsKXty''@;'; put 'put ''ZXR1cm4gYy5nZXQoZTNlKGMsbCkpfWZ1bmN0aW9uIGUzZShjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9u''@;'; put 'put ''IHRoaXMgb2JqZWN0Iil9dmFyIGJfPW5ldyBXZWFrTWFwLG9QPW5ldyBXZWFrTWFwLHlfPW5ldyBXZWFrTWFwLHNQPW5ldyBXZWFrTWFwO2NvbnN0IG1ldD1jbGFzcyBnZXR7Y29uc3RydWN0b3IobCxhLGQsaCxmLHYpe3dnKHRoaXMsIndvdCIsbnVsbCksYVAodGhpcyxiXyxbXSksd2codGhp''@;'; put 'put ''cywidG9wT3ZlcmxheSIsbnVsbCksd2codGhpcywiYm90dG9tT3ZlcmxheSIsbnVsbCksd2codGhpcywiaW5saW5lU3RhcnRPdmVybGF5IixudWxsKSx3Zyh0aGlzLCJ0b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXkiLG51bGwpLHdnKHRoaXMsImJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3Zl''@;'; put 'put ''cmxheSIsbnVsbCksd2codGhpcywiYnJvd3NlckxpbmVIZWlnaHQiLHZvaWQgMCksd2codGhpcywid3RTZXR0aW5ncyIsbnVsbCksYVAodGhpcyxvUCwhMSksYVAodGhpcyx5XywwKSxhUCh0aGlzLHNQLG51bGwpLHdnKHRoaXMsInJlc2l6ZU9ic2VydmVyIixuZXcgUmVzaXplT2JzZXJ2ZXIo''@;'; put 'put ''cmU9PntFRSgoKT0+eyFBcnJheS5pc0FycmF5KHJlKXx8IXJlLmxlbmd0aHx8KFg3KHlfLHRoaXMsQ2coeV8sdGhpcykrMSksMTAwPT09Q2coeV8sdGhpcykmJihpbCgiVGhlIFJlc2l6ZU9ic2VydmVyIGNhbGxiYWNrIHdhcyBmaXJlZCB0b28gbWFueSB0aW1lcyBpbiBkaXJlY3Qgc3VjY2Vz''@;'; put 'put ''c2lvbi5cblRoaXMgbWF5IGJlIGR1ZSB0byBhbiBpbmZpbml0ZSBsb29wIGNhdXNlZCBieSBzZXR0aW5nIGEgZHluYW1pYyBoZWlnaHQvd2lkdGggKGZvciBleGFtcGxlLCB3aXRoIHRoZSBgZHZoYCB1bml0cykgdG8gYSBIYW5kc29udGFibGUgY29udGFpbmVyJ3MgcGFyZW50LiBcblRoZSBv''@;'; put 'put ''YnNlcnZlciB3aWxsIGJlIGRpc2Nvbm5lY3RlZC4iKSx0aGlzLnJlc2l6ZU9ic2VydmVyLmRpc2Nvbm5lY3QoKSksbnVsbCE9PUNnKHNQLHRoaXMpJiZjbGVhclRpbWVvdXQoQ2coc1AsdGhpcykpLFg3KHNQLHRoaXMsc2V0VGltZW91dCgoKT0+e1g3KHlfLHRoaXMsMCl9LDEwMCkpLHRoaXMu''@;'; put 'put ''d3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJvbkNvbnRhaW5lckVsZW1lbnRSZXNpemUiKSl9KX0pKSx0aGlzLndvdD1sLHRoaXMud3RTZXR0aW5ncz1oLHRoaXMuZG9tQmluZGluZ3M9ZCx0aGlzLmZhY2FkZUdldHRlcj1hLHRoaXMud3RUYWJsZT12O2NvbnN0e3Jvb3REb2N1bWVudDpNLHJvb3RX''@;'; put 'put ''aW5kb3c6RH09dGhpcy5kb21CaW5kaW5nczt0aGlzLmluc3RhbmNlPXRoaXMud290LHRoaXMuZXZlbnRNYW5hZ2VyPWYsdGhpcy5zY3JvbGxiYXJTaXplPWYwKE0pO2NvbnN0IFo9ImhpZGRlbiI9PT1ELmdldENvbXB1dGVkU3R5bGUodi53dFJvb3RFbGVtZW50LnBhcmVudE5vZGUpLmdldFBy''@;'; put 'put ''b3BlcnR5VmFsdWUoIm92ZXJmbG93Iik7dGhpcy5zY3JvbGxhYmxlRWxlbWVudD1aP3YuaG9sZGVyOnlFKHYuVEFCTEUpLHRoaXMuaW5pdE92ZXJsYXlzKCksdGhpcy5kZXN0cm95ZWQ9ITEsdGhpcy5rZXlQcmVzc2VkPSExLHRoaXMuc3ByZWFkZXJMYXN0U2l6ZT17d2lkdGg6bnVsbCxoZWln''@;'; put 'put ''aHQ6bnVsbH0sdGhpcy52ZXJ0aWNhbFNjcm9sbGluZz0hMSx0aGlzLmhvcml6b250YWxTY3JvbGxpbmc9ITEsdGhpcy5pbml0QnJvd3NlckxpbmVIZWlnaHQoKSx0aGlzLnJlZ2lzdGVyTGlzdGVuZXJzKCksdGhpcy5sYXN0U2Nyb2xsWD1ELnNjcm9sbFgsdGhpcy5sYXN0U2Nyb2xsWT1ELnNj''@;'; put 'put ''cm9sbFl9Z2V0T3ZlcmxheXMoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdO2NvbnN0IGE9Wy4uLkNnKGJfLHRoaXMpXTtyZXR1cm4gbCYmYS5wdXNoKHRoaXMud3RUYWJsZSksYX1pbml0QnJvd3NlckxpbmVIZWlnaHQoKXtj''@;'; put 'put ''b25zdHtyb290V2luZG93Omwscm9vdERvY3VtZW50OmF9PXRoaXMuZG9tQmluZGluZ3MsZD1sLmdldENvbXB1dGVkU3R5bGUoYS5ib2R5KSxoPXBhcnNlSW50KGQubGluZUhlaWdodCwxMCksZj0xLjIqcGFyc2VJbnQoZC5mb250U2l6ZSwxMCk7dGhpcy5icm93c2VyTGluZUhlaWdodD1ofHxm''@;'; put 'put ''fWluaXRPdmVybGF5cygpe2NvbnN0IGw9W3RoaXMud290LHRoaXMuZmFjYWRlR2V0dGVyLHRoaXMud3RTZXR0aW5ncyx0aGlzLmRvbUJpbmRpbmdzXTt0aGlzLnRvcE92ZXJsYXk9bmV3ICRRZSguLi5sKSx0aGlzLmJvdHRvbU92ZXJsYXk9bmV3IGVldCguLi5sKSx0aGlzLmlubGluZVN0YXJ0''@;'; put 'put ''T3ZlcmxheT1uZXcgaWV0KC4uLmwpLHRoaXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5PW5ldyBjZXQoLi4ubCx0aGlzLnRvcE92ZXJsYXksdGhpcy5pbmxpbmVTdGFydE92ZXJsYXkpLHRoaXMuYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5PW5ldyBkZXQoLi4ubCx0aGlzLmJv''@;'; put 'put ''dHRvbU92ZXJsYXksdGhpcy5pbmxpbmVTdGFydE92ZXJsYXkpLFg3KGJfLHRoaXMsW3RoaXMudG9wT3ZlcmxheSx0aGlzLmJvdHRvbU92ZXJsYXksdGhpcy5pbmxpbmVTdGFydE92ZXJsYXksdGhpcy50b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXksdGhpcy5ib3R0b21JbmxpbmVTdGFydENv''@;'; put 'put ''cm5lck92ZXJsYXldKX1iZWZvcmVEcmF3KCl7WDcob1AsdGhpcyxDZyhiXyx0aGlzKS5yZWR1Y2UoKGwsYSk9PmEuaGFzUmVuZGVyaW5nU3RhdGVDaGFuZ2VkKCl8fGwsITEpKSxDZyhiXyx0aGlzKS5mb3JFYWNoKGw9PmwudXBkYXRlU3RhdGVPZlJlbmRlcmluZygiYmVmb3JlIikpfWFmdGVy''@;'; put 'put ''RHJhdygpe3RoaXMuc3luY1Njcm9sbFdpdGhNYXN0ZXIoKSxDZyhiXyx0aGlzKS5mb3JFYWNoKGw9Pntjb25zdCBhPWwuaGFzUmVuZGVyaW5nU3RhdGVDaGFuZ2VkKCk7bC51cGRhdGVTdGF0ZU9mUmVuZGVyaW5nKCJhZnRlciIpLGEmJiFsLm5lZWRGdWxsUmVuZGVyJiZsLnJlc2V0KCl9KX1y''@;'; put 'put ''ZWZyZXNoQWxsKCl7aWYodGhpcy53b3QuZHJhd24pe2lmKCF0aGlzLnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUpcmV0dXJuIHZvaWQgdGhpcy5kZXN0cm95KCk7dGhpcy53b3QuZHJhdyghMCksdGhpcy52ZXJ0aWNhbFNjcm9sbGluZyYmdGhpcy5pbmxpbmVTdGFydE92ZXJsYXkub25TY3Jv''@;'; put 'put ''bGwoKSx0aGlzLmhvcml6b250YWxTY3JvbGxpbmcmJnRoaXMudG9wT3ZlcmxheS5vblNjcm9sbCgpLHRoaXMudmVydGljYWxTY3JvbGxpbmc9ITEsdGhpcy5ob3Jpem9udGFsU2Nyb2xsaW5nPSExfX1yZWdpc3Rlckxpc3RlbmVycygpe2NvbnN0e3Jvb3REb2N1bWVudDpsLHJvb3RXaW5kb3c6''@;'; put 'put ''YX09dGhpcy5kb21CaW5kaW5ncyx7bWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQ6ZH09dGhpcy50b3BPdmVybGF5LHttYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudDpofT10aGlzLmlubGluZVN0YXJ0T3ZlcmxheTt0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwuZG9jdW1l''@;'; put 'put ''bnRFbGVtZW50LCJrZXlkb3duIixjZT0+dGhpcy5vbktleURvd24oY2UpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwuZG9jdW1lbnRFbGVtZW50LCJrZXl1cCIsKCk9PnRoaXMub25LZXlVcCgpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwsInZp''@;'; put 'put ''c2liaWxpdHljaGFuZ2UiLCgpPT50aGlzLm9uS2V5VXAoKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihkLCJzY3JvbGwiLGNlPT50aGlzLm9uVGFibGVTY3JvbGwoY2UpLHtwYXNzaXZlOiEwfSksZCE9PWgmJnRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIo''@;'; put 'put ''aCwic2Nyb2xsIixjZT0+dGhpcy5vblRhYmxlU2Nyb2xsKGNlKSx7cGFzc2l2ZTohMH0pO2NvbnN0IGY9YS5kZXZpY2VQaXhlbFJhdGlvJiZhLmRldmljZVBpeGVsUmF0aW8+MSx2PXRoaXMuc2Nyb2xsYWJsZUVsZW1lbnQ9PT1hLE09dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInByZXZl''@;'; put 'put ''bnRXaGVlbCIpLEQ9e3Bhc3NpdmU6dn07bGV0IHJlOyhNfHxmfHwhTCQoKSkmJnRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodGhpcy53dFRhYmxlLnd0Um9vdEVsZW1lbnQsIndoZWVsIixjZT0+dGhpcy5vbkNsb25lV2hlZWwoY2UsTSksRCksW3RoaXMudG9wT3ZlcmxheSx0''@;'; put 'put ''aGlzLmJvdHRvbU92ZXJsYXksdGhpcy5pbmxpbmVTdGFydE92ZXJsYXksdGhpcy50b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXksdGhpcy5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXldLmZvckVhY2goY2U9Pnt0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGNlLmNs''@;'; put 'put ''b25lLnd0VGFibGUuaG9sZGVyLCJ3aGVlbCIsYmU9PnRoaXMub25DbG9uZVdoZWVsKGJlLE0pLEQpfSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihhLCJyZXNpemUiLCgpPT57RUUoKCk9PntjbGVhclRpbWVvdXQocmUpLHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJv''@;'; put 'put ''bldpbmRvd1Jlc2l6ZSIpLHJlPXNldFRpbWVvdXQoKCk9PntYNyh5Xyx0aGlzLDApfSwyMDApfSl9KSx2fHx0aGlzLnJlc2l6ZU9ic2VydmVyLm9ic2VydmUodGhpcy53dFRhYmxlLnd0Um9vdEVsZW1lbnQucGFyZW50RWxlbWVudCl9b25UYWJsZVNjcm9sbChsKXtjb25zdCBhPXRoaXMuZG9t''@;'; put 'put ''QmluZGluZ3Mucm9vdFdpbmRvdyxkPXRoaXMuaW5saW5lU3RhcnRPdmVybGF5Lm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50LGg9dGhpcy50b3BPdmVybGF5Lm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50LGY9bC50YXJnZXQ7dGhpcy5rZXlQcmVzc2VkJiYoaCE9PWEmJmYhPT1hJiYhbC50''@;'; put 'put ''YXJnZXQuY29udGFpbnMoaCl8fGQhPT1hJiZmIT09YSYmIWwudGFyZ2V0LmNvbnRhaW5zKGQpKXx8dGhpcy5zeW5jU2Nyb2xsUG9zaXRpb25zKGwpfW9uQ2xvbmVXaGVlbChsLGEpe2NvbnN0e3Jvb3RXaW5kb3c6ZH09dGhpcy5kb21CaW5kaW5ncyxoPXRoaXMuaW5saW5lU3RhcnRPdmVybGF5''@;'; put 'put ''Lm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50LGY9dGhpcy50b3BPdmVybGF5Lm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50LHY9bC50YXJnZXQsTT1mIT09ZCYmdiE9PWQmJiF2LmNvbnRhaW5zKGYpLEQ9aCE9PWQmJnYhPT1kJiYhdi5jb250YWlucyhoKTtpZih0aGlzLmtleVByZXNzZWQm''@;'; put 'put ''JihNfHxEKXx8dGhpcy5zY3JvbGxhYmxlRWxlbWVudD09PWQpcmV0dXJuO2NvbnN0IFo9dGhpcy50cmFuc2xhdGVNb3VzZVdoZWVsVG9TY3JvbGwobCk7KGF8fHRoaXMuc2Nyb2xsYWJsZUVsZW1lbnQhPT1kJiZaKSYmbC5wcmV2ZW50RGVmYXVsdCgpfW9uS2V5RG93bihsKXt0aGlzLmtleVBy''@;'; put 'put ''ZXNzZWQ9dV8obC5rZXlDb2RlLCJBUlJPV19VUHxBUlJPV19SSUdIVHxBUlJPV19ET1dOfEFSUk9XX0xFRlQiKX1vbktleVVwKCl7dGhpcy5rZXlQcmVzc2VkPSExfXRyYW5zbGF0ZU1vdXNlV2hlZWxUb1Njcm9sbChsKXtsZXQgYT1pc05hTihsLmRlbHRhWSk/LTEqbC53aGVlbERlbHRhWTps''@;'; put 'put ''LmRlbHRhWSxkPWlzTmFOKGwuZGVsdGFYKT8tMSpsLndoZWVsRGVsdGFYOmwuZGVsdGFYOzE9PT1sLmRlbHRhTW9kZSYmKGQrPWQqdGhpcy5icm93c2VyTGluZUhlaWdodCxhKz1hKnRoaXMuYnJvd3NlckxpbmVIZWlnaHQpO2NvbnN0IGg9dGhpcy5zY3JvbGxWZXJ0aWNhbGx5KGEpLGY9dGhp''@;'; put 'put ''cy5zY3JvbGxIb3Jpem9udGFsbHkoZCk7cmV0dXJuIGh8fGZ9c2Nyb2xsVmVydGljYWxseShsKXtjb25zdCBhPXRoaXMuc2Nyb2xsYWJsZUVsZW1lbnQuc2Nyb2xsVG9wO3JldHVybiB0aGlzLnNjcm9sbGFibGVFbGVtZW50LnNjcm9sbFRvcCs9bCxhIT09dGhpcy5zY3JvbGxhYmxlRWxlbWVu''@;'; put 'put ''dC5zY3JvbGxUb3B9c2Nyb2xsSG9yaXpvbnRhbGx5KGwpe2NvbnN0IGE9dGhpcy5zY3JvbGxhYmxlRWxlbWVudC5zY3JvbGxMZWZ0O3JldHVybiB0aGlzLnNjcm9sbGFibGVFbGVtZW50LnNjcm9sbExlZnQrPWwsYSE9PXRoaXMuc2Nyb2xsYWJsZUVsZW1lbnQuc2Nyb2xsTGVmdH1zeW5jU2Ny''@;'; put 'put ''b2xsUG9zaXRpb25zKCl7aWYodGhpcy5kZXN0cm95ZWQpcmV0dXJuO2NvbnN0IGw9dGhpcy50b3BPdmVybGF5LmNsb25lLnd0VGFibGUuaG9sZGVyLGE9dGhpcy5pbmxpbmVTdGFydE92ZXJsYXkuY2xvbmUud3RUYWJsZS5ob2xkZXI7bGV0IGQ9dGhpcy5zY3JvbGxhYmxlRWxlbWVudC5zY3Jv''@;'; put 'put ''bGxMZWZ0LGg9dGhpcy5zY3JvbGxhYmxlRWxlbWVudC5zY3JvbGxUb3A7aWYodGhpcy53b3Qud3RWaWV3cG9ydC5pc0hvcml6b250YWxseVNjcm9sbGFibGVCeVdpbmRvdygpJiYoZD10aGlzLnNjcm9sbGFibGVFbGVtZW50LnNjcm9sbFgpLHRoaXMud290Lnd0Vmlld3BvcnQuaXNWZXJ0aWNh''@;'; put 'put ''bGx5U2Nyb2xsYWJsZUJ5V2luZG93KCkmJihoPXRoaXMuc2Nyb2xsYWJsZUVsZW1lbnQuc2Nyb2xsWSksdGhpcy5ob3Jpem9udGFsU2Nyb2xsaW5nPXRoaXMubGFzdFNjcm9sbFghPT1kLHRoaXMudmVydGljYWxTY3JvbGxpbmc9dGhpcy5sYXN0U2Nyb2xsWSE9PWgsdGhpcy5sYXN0U2Nyb2xs''@;'; put 'put ''WD1kLHRoaXMubGFzdFNjcm9sbFk9aCx0aGlzLmhvcml6b250YWxTY3JvbGxpbmcpe2wuc2Nyb2xsTGVmdD1kO2NvbnN0IGY9dGhpcy5ib3R0b21PdmVybGF5Lm5lZWRGdWxsUmVuZGVyP3RoaXMuYm90dG9tT3ZlcmxheS5jbG9uZS53dFRhYmxlLmhvbGRlcjpudWxsO2YmJihmLnNjcm9sbExl''@;'; put 'put ''ZnQ9ZCl9dGhpcy52ZXJ0aWNhbFNjcm9sbGluZyYmKGEuc2Nyb2xsVG9wPWgpLHRoaXMucmVmcmVzaEFsbCgpfXN5bmNTY3JvbGxXaXRoTWFzdGVyKCl7aWYoIUNnKG9QLHRoaXMpKXJldHVybjtjb25zdCBsPXRoaXMudG9wT3ZlcmxheS5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudCx7c2Ny''@;'; put 'put ''b2xsTGVmdDphLHNjcm9sbFRvcDpkfT1sO3RoaXMudG9wT3ZlcmxheS5uZWVkRnVsbFJlbmRlciYmKHRoaXMudG9wT3ZlcmxheS5jbG9uZS53dFRhYmxlLmhvbGRlci5zY3JvbGxMZWZ0PWEpLHRoaXMuYm90dG9tT3ZlcmxheS5uZWVkRnVsbFJlbmRlciYmKHRoaXMuYm90dG9tT3ZlcmxheS5j''@;'; put 'put ''bG9uZS53dFRhYmxlLmhvbGRlci5zY3JvbGxMZWZ0PWEpLHRoaXMuaW5saW5lU3RhcnRPdmVybGF5Lm5lZWRGdWxsUmVuZGVyJiYodGhpcy5pbmxpbmVTdGFydE92ZXJsYXkuY2xvbmUud3RUYWJsZS5ob2xkZXIuc2Nyb2xsVG9wPWQpLFg3KG9QLHRoaXMsITEpfXVwZGF0ZU1haW5TY3JvbGxh''@;'; put 'put ''YmxlRWxlbWVudHMoKXt0aGlzLmV2ZW50TWFuYWdlci5jbGVhckV2ZW50cyghMCksdGhpcy5pbmxpbmVTdGFydE92ZXJsYXkudXBkYXRlTWFpblNjcm9sbGFibGVFbGVtZW50KCksdGhpcy50b3BPdmVybGF5LnVwZGF0ZU1haW5TY3JvbGxhYmxlRWxlbWVudCgpLHRoaXMuYm90dG9tT3Zlcmxh''@;'; put 'put ''eS5uZWVkRnVsbFJlbmRlciYmdGhpcy5ib3R0b21PdmVybGF5LnVwZGF0ZU1haW5TY3JvbGxhYmxlRWxlbWVudCgpO2NvbnN0e3d0VGFibGU6bH09dGhpcyx7cm9vdFdpbmRvdzphfT10aGlzLmRvbUJpbmRpbmdzO3RoaXMuc2Nyb2xsYWJsZUVsZW1lbnQ9ImhpZGRlbiI9PT1hLmdldENvbXB1''@;'; put 'put ''dGVkU3R5bGUobC53dFJvb3RFbGVtZW50LnBhcmVudE5vZGUpLmdldFByb3BlcnR5VmFsdWUoIm92ZXJmbG93Iik/bC5ob2xkZXI6eUUobC5UQUJMRSksdGhpcy5yZWdpc3Rlckxpc3RlbmVycygpfWRlc3Ryb3koKXt0aGlzLnJlc2l6ZU9ic2VydmVyLmRpc2Nvbm5lY3QoKSx0aGlzLmV2ZW50''@;'; put 'put ''TWFuYWdlci5kZXN0cm95KCksdGhpcy50b3BPdmVybGF5LmRlc3Ryb3koKSx0aGlzLmJvdHRvbU92ZXJsYXkuY2xvbmUmJnRoaXMuYm90dG9tT3ZlcmxheS5kZXN0cm95KCksdGhpcy5pbmxpbmVTdGFydE92ZXJsYXkuZGVzdHJveSgpLHRoaXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5''@;'; put 'put ''JiZ0aGlzLnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5kZXN0cm95KCksdGhpcy5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXkmJnRoaXMuYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LmNsb25lJiZ0aGlzLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5kZXN0''@;'; put 'put ''cm95KCksdGhpcy5kZXN0cm95ZWQ9ITB9cmVmcmVzaCgpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07dGhpcy51cGRhdGVMYXN0U3ByZWFkZXJTaXplKCkmJnRoaXMuYWRqdXN0RWxlbWVudHNTaXplKCksdGhpcy5ib3R0b21P''@;'; put 'put ''dmVybGF5LmNsb25lJiZ0aGlzLmJvdHRvbU92ZXJsYXkucmVmcmVzaChsKSx0aGlzLmlubGluZVN0YXJ0T3ZlcmxheS5yZWZyZXNoKGwpLHRoaXMudG9wT3ZlcmxheS5yZWZyZXNoKGwpLHRoaXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5JiZ0aGlzLnRvcElubGluZVN0YXJ0Q29ybmVy''@;'; put 'put ''T3ZlcmxheS5yZWZyZXNoKGwpLHRoaXMuYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5JiZ0aGlzLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5jbG9uZSYmdGhpcy5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXkucmVmcmVzaChsKX11cGRhdGVMYXN0U3ByZWFkZXJT''@;'; put 'put ''aXplKCl7Y29uc3QgbD10aGlzLnd0VGFibGUuc3ByZWFkZXIsYT1sLmNsaWVudFdpZHRoLGQ9bC5jbGllbnRIZWlnaHQsaD1hIT09dGhpcy5zcHJlYWRlckxhc3RTaXplLndpZHRofHxkIT09dGhpcy5zcHJlYWRlckxhc3RTaXplLmhlaWdodDtyZXR1cm4gaCYmKHRoaXMuc3ByZWFkZXJMYXN0''@;'; put 'put ''U2l6ZS53aWR0aD1hLHRoaXMuc3ByZWFkZXJMYXN0U2l6ZS5oZWlnaHQ9ZCksaH1hZGp1c3RFbGVtZW50c1NpemUoKXtjb25zdHt3dFZpZXdwb3J0Omx9PXRoaXMud290LHt3dFRhYmxlOmF9PXRoaXMse3Jvb3RXaW5kb3c6ZH09dGhpcy5kb21CaW5kaW5ncyxoPXRoaXMuc2Nyb2xsYWJsZUVs''@;'; put 'put ''ZW1lbnQ9PT1kLGY9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsQ29sdW1ucyIpLHY9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsUm93cyIpLE09bC5nZXRSb3dIZWFkZXJXaWR0aCgpLFo9bC5nZXRDb2x1bW5IZWFkZXJIZWlnaHQoKSt0aGlzLnRvcE92ZXJsYXku''@;'; put 'put ''c3VtQ2VsbFNpemVzKDAsdikrMSxyZT1NK3RoaXMuaW5saW5lU3RhcnRPdmVybGF5LnN1bUNlbGxTaXplcygwLGYpLGJlPWEuaGlkZXIuc3R5bGUscWU9KCgpPT4haCYmdGhpcy5zY3JvbGxhYmxlRWxlbWVudC5zY3JvbGxUb3A+TWF0aC5tYXgoMCxaLWEuaG9sZGVyLmNsaWVudEhlaWdodCkp''@;'; put 'put ''KCk/MTowLHJ0PSgoKT0+IWgmJnRoaXMuc2Nyb2xsYWJsZUVsZW1lbnQuc2Nyb2xsTGVmdD5NYXRoLm1heCgwLHJlLWEuaG9sZGVyLmNsaWVudFdpZHRoKSkoKT8xOjA7YmUud2lkdGg9YCR7cmUrcnR9cHhgLGJlLmhlaWdodD1gJHtaK3FlfXB4YCx0aGlzLnRvcE92ZXJsYXkuYWRqdXN0RWxl''@;'; put 'put ''bWVudHNTaXplKCksdGhpcy5pbmxpbmVTdGFydE92ZXJsYXkuYWRqdXN0RWxlbWVudHNTaXplKCksdGhpcy5ib3R0b21PdmVybGF5LmFkanVzdEVsZW1lbnRzU2l6ZSgpfWV4cGFuZEhpZGVyVmVydGljYWxseUJ5KGwpe2NvbnN0e3d0VGFibGU6YX09dGhpczthLmhpZGVyLnN0eWxlLmhlaWdo''@;'; put 'put ''dD1gJHtwYXJzZUludChhLmhpZGVyLnN0eWxlLmhlaWdodCwxMCkrbH1weGB9ZXhwYW5kSGlkZXJIb3Jpem9udGFsbHlCeShsKXtjb25zdHt3dFRhYmxlOmF9PXRoaXM7YS5oaWRlci5zdHlsZS53aWR0aD1gJHtwYXJzZUludChhLmhpZGVyLnN0eWxlLndpZHRoLDEwKStsfXB4YH1hcHBseVRv''@;'; put 'put ''RE9NKCl7dGhpcy53dFRhYmxlLmlzVmlzaWJsZSgpJiYodGhpcy50b3BPdmVybGF5LmFwcGx5VG9ET00oKSx0aGlzLmJvdHRvbU92ZXJsYXkuY2xvbmUmJnRoaXMuYm90dG9tT3ZlcmxheS5hcHBseVRvRE9NKCksdGhpcy5pbmxpbmVTdGFydE92ZXJsYXkuYXBwbHlUb0RPTSgpKX1nZXRQYXJl''@;'; put 'put ''bnRPdmVybGF5KGwpe2lmKCFsKXJldHVybiBudWxsO2xldCBkPW51bGw7cmV0dXJuIFluKFt0aGlzLnRvcE92ZXJsYXksdGhpcy5pbmxpbmVTdGFydE92ZXJsYXksdGhpcy5ib3R0b21PdmVybGF5LHRoaXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LHRoaXMuYm90dG9tSW5saW5lU3Rh''@;'; put 'put ''cnRDb3JuZXJPdmVybGF5XSxoPT57aCYmaC5jbG9uZSYmaC5jbG9uZS53dFRhYmxlLlRBQkxFLmNvbnRhaW5zKGwpJiYoZD1oLmNsb25lKX0pLGR9c3luY092ZXJsYXlUYWJsZUNsYXNzTmFtZXMoKXtjb25zdCBsPXRoaXMud3RUYWJsZS5UQUJMRTtZbihbdGhpcy50b3BPdmVybGF5LHRoaXMu''@;'; put 'put ''aW5saW5lU3RhcnRPdmVybGF5LHRoaXMuYm90dG9tT3ZlcmxheSx0aGlzLnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheSx0aGlzLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheV0sZD0+e2QmJihkLmNsb25lLnd0VGFibGUuVEFCTEUuY2xhc3NOYW1lPWwuY2xhc3NOYW1lKX0pfX07''@;'; put 'put ''ZnVuY3Rpb24gdDNlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiB2ZXQoYyl7dmFyIGw9ZnVuY3Rpb24gYmV0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8''@;'; put 'put ''ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1''@;'; put 'put ''cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyB5ZXR7Y29uc3RydWN0b3IobCl7dDNlKHRoaXMsInNldHRp''@;'; put 'put ''bmdzIix7fSksdDNlKHRoaXMsImRlZmF1bHRzIixPYmplY3QuZnJlZXplKHRoaXMuZ2V0RGVmYXVsdHMoKSkpLFhvKHRoaXMuZGVmYXVsdHMsKGEsZCk9PntpZih2b2lkIDAhPT1sW2RdKXRoaXMuc2V0dGluZ3NbZF09bFtkXTtlbHNle2lmKHZvaWQgMD09PWEpdGhyb3cgbmV3IEVycm9yKGBB''@;'; put 'put ''IHJlcXVpcmVkIHNldHRpbmcgIiR7ZH0iIHdhcyBub3QgcHJvdmlkZWRgKTt0aGlzLnNldHRpbmdzW2RdPWF9fSl9Z2V0RGVmYXVsdHMoKXtyZXR1cm57ZmFjYWRlOnZvaWQgMCx0YWJsZTp2b2lkIDAsaXNEYXRhVmlld0luc3RhbmNlOiEwLGV4dGVybmFsUm93Q2FsY3VsYXRvcjohMSxjdXJy''@;'; put 'put ''ZW50Um93Q2xhc3NOYW1lOm51bGwsY3VycmVudENvbHVtbkNsYXNzTmFtZTpudWxsLHByZXZlbnRPdmVyZmxvdzooKT0+ITEscHJldmVudFdoZWVsOiExLGRhdGE6dm9pZCAwLGZpeGVkQ29sdW1uc1N0YXJ0OjAsZml4ZWRSb3dzVG9wOjAsZml4ZWRSb3dzQm90dG9tOjAsc2hvdWxkUmVuZGVy''@;'; put 'put ''SW5saW5lU3RhcnRPdmVybGF5OigpPT50aGlzLmdldFNldHRpbmcoImZpeGVkQ29sdW1uc1N0YXJ0Iik+MHx8dGhpcy5nZXRTZXR0aW5nKCJyb3dIZWFkZXJzIikubGVuZ3RoPjAsc2hvdWxkUmVuZGVyVG9wT3ZlcmxheTooKT0+dGhpcy5nZXRTZXR0aW5nKCJmaXhlZFJvd3NUb3AiKT4wfHx0''@;'; put 'put ''aGlzLmdldFNldHRpbmcoImNvbHVtbkhlYWRlcnMiKS5sZW5ndGg+MCxzaG91bGRSZW5kZXJCb3R0b21PdmVybGF5OigpPT50aGlzLmdldFNldHRpbmcoImZpeGVkUm93c0JvdHRvbSIpPjAsbWluU3BhcmVSb3dzOjAscm93SGVhZGVyczooKT0+W10sY29sdW1uSGVhZGVyczooKT0+W10sdG90''@;'; put 'put ''YWxSb3dzOnZvaWQgMCx0b3RhbENvbHVtbnM6dm9pZCAwLGNlbGxSZW5kZXJlcjoobCxhLGQpPT57UG0oZCx0aGlzLmdldFNldHRpbmcoImRhdGEiLGwsYSk/PyIiKX0sY29sdW1uV2lkdGgoKXt9LHJvd0hlaWdodCgpe30scm93SGVpZ2h0QnlPdmVybGF5TmFtZSgpe30sZGVmYXVsdENvbHVt''@;'; put 'put ''bldpZHRoOjUwLHNlbGVjdGlvbnM6bnVsbCxoaWRlQm9yZGVyT25Nb3VzZURvd25PdmVyOiExLHZpZXdwb3J0Um93Q2FsY3VsYXRvck92ZXJyaWRlOm51bGwsdmlld3BvcnRDb2x1bW5DYWxjdWxhdG9yT3ZlcnJpZGU6bnVsbCx2aWV3cG9ydFJvd1JlbmRlcmluZ1RocmVzaG9sZDpudWxsLHZp''@;'; put 'put ''ZXdwb3J0Q29sdW1uUmVuZGVyaW5nVGhyZXNob2xkOm51bGwsb25DZWxsTW91c2VEb3duOm51bGwsb25DZWxsQ29udGV4dE1lbnU6bnVsbCxvbkNlbGxNb3VzZU92ZXI6bnVsbCxvbkNlbGxNb3VzZU91dDpudWxsLG9uQ2VsbE1vdXNlVXA6bnVsbCxvbkNlbGxEYmxDbGljazpudWxsLG9uQ2Vs''@;'; put 'put ''bENvcm5lck1vdXNlRG93bjpudWxsLG9uQ2VsbENvcm5lckRibENsaWNrOm51bGwsYmVmb3JlRHJhdzpudWxsLG9uRHJhdzpudWxsLG9uQmVmb3JlUmVtb3ZlQ2VsbENsYXNzTmFtZXM6bnVsbCxvbkFmdGVyRHJhd1NlbGVjdGlvbjpudWxsLG9uQmVmb3JlRHJhd0JvcmRlcnM6bnVsbCxvbkJl''@;'; put 'put ''Zm9yZVZpZXdwb3J0U2Nyb2xsSG9yaXpvbnRhbGx5Omw9Pmwsb25CZWZvcmVWaWV3cG9ydFNjcm9sbFZlcnRpY2FsbHk6bD0+bCxvblNjcm9sbEhvcml6b250YWxseTpudWxsLG9uU2Nyb2xsVmVydGljYWxseTpudWxsLG9uQmVmb3JlVG91Y2hTY3JvbGw6bnVsbCxvbkFmdGVyTW9tZW50dW1T''@;'; put 'put ''Y3JvbGw6bnVsbCxvbk1vZGlmeVJvd0hlYWRlcldpZHRoOm51bGwsb25Nb2RpZnlHZXRDZWxsQ29vcmRzOm51bGwsb25Nb2RpZnlHZXRDb29yZHNFbGVtZW50Om51bGwsb25Nb2RpZnlHZXRDb29yZHM6bnVsbCxvbkJlZm9yZUhpZ2hsaWdodGluZ1Jvd0hlYWRlcjpsPT5sLG9uQmVmb3JlSGln''@;'; put 'put ''aGxpZ2h0aW5nQ29sdW1uSGVhZGVyOmw9Pmwsb25XaW5kb3dSZXNpemU6bnVsbCxvbkNvbnRhaW5lckVsZW1lbnRSZXNpemU6bnVsbCxyZW5kZXJBbGxDb2x1bW5zOiExLHJlbmRlckFsbFJvd3M6ITEsZ3JvdXBzOiExLHJvd0hlYWRlcldpZHRoOm51bGwsY29sdW1uSGVhZGVySGVpZ2h0Om51''@;'; put 'put ''bGwsaGVhZGVyQ2xhc3NOYW1lOm51bGwscnRsTW9kZTohMSxhcmlhVGFnczohMH19dXBkYXRlKGwsYSl7cmV0dXJuIHZvaWQgMD09PWE/WG8obCwoZCxoKT0+e3RoaXMuc2V0dGluZ3NbaF09ZH0pOnRoaXMuc2V0dGluZ3NbbF09YSx0aGlzfWdldFNldHRpbmcobCxhLGQsaCxmKXtyZXR1cm4i''@;'; put 'put ''ZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5zZXR0aW5nc1tsXT90aGlzLnNldHRpbmdzW2xdKGEsZCxoLGYpOnZvaWQgMCE9PWEmJkFycmF5LmlzQXJyYXkodGhpcy5zZXR0aW5nc1tsXSk/dGhpcy5zZXR0aW5nc1tsXVthXTp0aGlzLnNldHRpbmdzW2xdfWdldFNldHRpbmdQdXJlKGwpe3JldHVy''@;'; put 'put ''biB0aGlzLnNldHRpbmdzW2xdfWhhcyhsKXtyZXR1cm4hIXRoaXMuc2V0dGluZ3NbbF19fWNsYXNzIFNLIGV4dGVuZHMgbV97Y29uc3RydWN0b3IobCxhLGQsaCl7c3VwZXIobCxhLGQsaCwibWFzdGVyIil9YWxpZ25PdmVybGF5c1dpdGhUcmltbWluZ0NvbnRhaW5lcigpe2NvbnN0IGw9YV8o''@;'; put 'put ''dGhpcy53dFJvb3RFbGVtZW50KSx7cm9vdFdpbmRvdzphfT10aGlzLmRvbUJpbmRpbmdzO2lmKGw9PT1hKXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJwcmV2ZW50T3ZlcmZsb3ciKXx8KHRoaXMuaG9sZGVyLnN0eWxlLm92ZXJmbG93PSJ2aXNpYmxlIix0aGlzLnd0Um9vdEVsZW1lbnQu''@;'; put 'put ''c3R5bGUub3ZlcmZsb3c9InZpc2libGUiKTtlbHNle2NvbnN0IGQ9bC5wYXJlbnRFbGVtZW50LGg9X0UobCwiaGVpZ2h0IixhKSxmPV9FKGwsIm92ZXJmbG93IixhKSx2PXRoaXMuaG9sZGVyLnN0eWxlLHtzY3JvbGxXaWR0aDpNLHNjcm9sbEhlaWdodDpEfT1sO2xldCBaPWwub2Zmc2V0V2lk''@;'; put 'put ''dGgscmU9bC5vZmZzZXRIZWlnaHQ7aWYoZCYmWyJhdXRvIiwiaGlkZGVuIiwic2Nyb2xsIl0uaW5jbHVkZXMoZikpe2NvbnN0IGJlPWwuY2xvbmVOb2RlKCExKTtiZS5zdHlsZS5vdmVyZmxvdz0iYXV0byIsYmUuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixsLm5leHRFbGVtZW50U2libGlu''@;'; put 'put ''Zz9kLmluc2VydEJlZm9yZShiZSxsLm5leHRFbGVtZW50U2libGluZyk6ZC5hcHBlbmRDaGlsZChiZSk7Y29uc3QgRWU9cGFyc2VJbnQoYS5nZXRDb21wdXRlZFN0eWxlKGJlKS5oZWlnaHQsMTApO2QucmVtb3ZlQ2hpbGQoYmUpLDA9PT1FZSYmKHJlPTApfXJlPU1hdGgubWluKHJlLEQpLHYu''@;'; put 'put ''aGVpZ2h0PSJhdXRvIj09PWg/ImF1dG8iOmAke3JlfXB4YCxaPU1hdGgubWluKFosTSksdi53aWR0aD1gJHtafXB4YCx2Lm92ZXJmbG93PSIiLHRoaXMuaGFzVGFibGVIZWlnaHQ9ImF1dG8iPT09di5oZWlnaHR8fHJlPjAsdGhpcy5oYXNUYWJsZVdpZHRoPVo+MH10aGlzLmlzVGFibGVWaXNp''@;'; put 'put ''YmxlPVU3KHRoaXMuVEFCTEUpfW1hcmtPdmVyc2l6ZWRDb2x1bW5IZWFkZXJzKCl7Y29uc3R7d3RTZXR0aW5nczpsfT10aGlzLHt3dFZpZXdwb3J0OmF9PXRoaXMuZGF0YUFjY2Vzc09iamVjdCxkPSJtYXN0ZXIiLGY9bC5nZXRTZXR0aW5nKCJjb2x1bW5IZWFkZXJzIikubGVuZ3RoO2lmKGYm''@;'; put 'put ''JiFhLmhhc092ZXJzaXplZENvbHVtbkhlYWRlcnNNYXJrZWRbZF0pe2NvbnN0IE09bC5nZXRTZXR0aW5nKCJyb3dIZWFkZXJzIikubGVuZ3RoLEQ9dGhpcy5nZXRSZW5kZXJlZENvbHVtbnNDb3VudCgpO2ZvcihsZXQgWj0wO1o8ZjtaKyspZm9yKGxldCByZT0tMSpNO3JlPEQ7cmUrKyl0aGlz''@;'; put 'put ''Lm1hcmtJZk92ZXJzaXplZENvbHVtbkhlYWRlcihyZSk7YS5oYXNPdmVyc2l6ZWRDb2x1bW5IZWFkZXJzTWFya2VkW2RdPSEwfX19VGwoU0ssWGZlKSxUbChTSyxkSyk7Y29uc3QgX2V0PVNLO2Z1bmN0aW9uIEhFKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiB3ZXQoYyl7dmFyIGw9ZnVuY3Rp''@;'; put 'put ''b24gQ2V0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVF''@;'; put 'put ''cnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0''@;'; put 'put ''eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBNZXR7Y29uc3RydWN0b3IoKXtIRSh0aGlzLCJjb3VudCIsMCksSEUodGhpcywic3RhcnRSb3ciLDApLEhFKHRoaXMsImVuZFJvdyIsMCksSEUodGhpcywic3Rh''@;'; put 'put ''cnRQb3NpdGlvbiIsMCksSEUodGhpcywiaXNWaXNpYmxlSW5UcmltbWluZ0NvbnRhaW5lciIsITApfWluaXRpYWxpemUobCl7bGV0e3RvdGFsUm93czphfT1sO3RoaXMuY291bnQ9YSx0aGlzLmVuZFJvdz10aGlzLmNvdW50LTF9cHJvY2Vzcygpe31maW5hbGl6ZSgpe319ZnVuY3Rpb24gTkUo''@;'; put 'put ''YyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIHhldChjKXt2YXIgbD1mdW5jdGlvbiBFZXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lm''@;'; put 'put ''KCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10''@;'; put 'put ''eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfXkoMzkwOTIpLHkoMTQzNjApO2NsYXNzIG4zZXtjb25zdHJ1Y3Rvcigpe05FKHRoaXMsImNv''@;'; put 'put ''dW50IiwwKSxORSh0aGlzLCJzdGFydFJvdyIsbnVsbCksTkUodGhpcywiZW5kUm93IixudWxsKSxORSh0aGlzLCJzdGFydFBvc2l0aW9uIixudWxsKSxORSh0aGlzLCJpc1Zpc2libGVJblRyaW1taW5nQ29udGFpbmVyIiwhMSl9aW5pdGlhbGl6ZSgpe31wcm9jZXNzKGwsYSl7Y29uc3R7dG90''@;'; put 'put ''YWxDYWxjdWxhdGVkSGVpZ2h0OmQsemVyb0Jhc2VkU2Nyb2xsT2Zmc2V0OmgsaW5uZXJWaWV3cG9ydEhlaWdodDpmfT1hO2Q8PWgmJih0aGlzLnN0YXJ0Um93PWwpLGQ+PWgmJmQ8PWYmJm51bGw9PT10aGlzLnN0YXJ0Um93JiYodGhpcy5zdGFydFJvdz1sKSx0aGlzLmVuZFJvdz1sfWZpbmFs''@;'; put 'put ''aXplKGwpe3ZhciBhO2NvbnN0e3Njcm9sbE9mZnNldDpkLHZpZXdwb3J0SGVpZ2h0OmgsaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodDpmLHRvdGFsUm93czp2LG5lZWRSZXZlcnNlOk0sc3RhcnRQb3NpdGlvbnM6RCxyb3dIZWlnaHQ6Wn09bDtpZih0aGlzLmVuZFJvdz09PXYtMSYmTSlmb3Io''@;'; put 'put ''dGhpcy5zdGFydFJvdz10aGlzLmVuZFJvdzt0aGlzLnN0YXJ0Um93PjA7KXtjb25zdCBjZT1EW3RoaXMuZW5kUm93XStaLURbdGhpcy5zdGFydFJvdy0xXTtpZih0aGlzLnN0YXJ0Um93LT0xLGNlPj1oLWYpYnJlYWt9dGhpcy5zdGFydFBvc2l0aW9uPW51bGwhPT0oYT1EW3RoaXMuc3RhcnRS''@;'; put 'put ''b3ddKSYmdm9pZCAwIT09YT9hOm51bGwsdGhpcy5pc1Zpc2libGVJblRyaW1taW5nQ29udGFpbmVyPSEoZCtoLWY8MHx8ZD5ELmF0KC0xKStaKSx2PHRoaXMuZW5kUm93JiYodGhpcy5lbmRSb3c9di0xKSxudWxsIT09dGhpcy5zdGFydFJvdyYmKHRoaXMuY291bnQ9dGhpcy5lbmRSb3ctdGhp''@;'; put 'put ''cy5zdGFydFJvdysxKX19ZnVuY3Rpb24gcjNlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBUZXQoYyl7dmFyIGw9ZnVuY3Rpb24gQWV0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFy''@;'; put 'put ''IGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShj''@;'; put 'put ''LCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBrZXQgZXh0ZW5kcyBuM2V7Y29u''@;'; put 'put ''c3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHIzZSh0aGlzLCJyb3dTdGFydE9mZnNldCIsMCkscjNlKHRoaXMsInJvd0VuZE9mZnNldCIsMCl9ZmluYWxpemUobCl7dmFyIGE7c3VwZXIuZmluYWxpemUobCk7Y29uc3R7b3ZlcnJpZGVGbjpkLHRvdGFsUm93czpoLHN0YXJ0UG9zaXRp''@;'; put 'put ''b25zOmZ9PWw7aWYobnVsbCE9PXRoaXMuc3RhcnRSb3cmJiJmdW5jdGlvbiI9PXR5cGVvZiBkKXtjb25zdCB2PXRoaXMuc3RhcnRSb3csTT10aGlzLmVuZFJvdztkKHRoaXMpLHRoaXMucm93U3RhcnRPZmZzZXQ9di10aGlzLnN0YXJ0Um93LHRoaXMucm93RW5kT2Zmc2V0PXRoaXMuZW5kUm93''@;'; put 'put ''LU19dGhpcy5zdGFydFJvdzwwJiYodGhpcy5zdGFydFJvdz0wKSx0aGlzLnN0YXJ0UG9zaXRpb249bnVsbCE9PShhPWZbdGhpcy5zdGFydFJvd10pJiZ2b2lkIDAhPT1hP2E6bnVsbCxoPHRoaXMuZW5kUm93JiYodGhpcy5lbmRSb3c9aC0xKSxudWxsIT09dGhpcy5zdGFydFJvdyYmKHRoaXMu''@;'; put 'put ''Y291bnQ9dGhpcy5lbmRSb3ctdGhpcy5zdGFydFJvdysxKX19ZnVuY3Rpb24gVkUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIERldChjKXt2YXIgbD1mdW5jdGlvbiBJZXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZl''@;'; put 'put ''XTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/''@;'; put 'put ''U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNz''@;'; put 'put ''IFJldHtjb25zdHJ1Y3Rvcigpe1ZFKHRoaXMsImNvdW50IiwwKSxWRSh0aGlzLCJzdGFydFJvdyIsbnVsbCksVkUodGhpcywiZW5kUm93IixudWxsKSxWRSh0aGlzLCJzdGFydFBvc2l0aW9uIixudWxsKSxWRSh0aGlzLCJpc1Zpc2libGVJblRyaW1taW5nQ29udGFpbmVyIiwhMSl9aW5pdGlh''@;'; put 'put ''bGl6ZSgpe31wcm9jZXNzKGwsYSl7Y29uc3R7dG90YWxDYWxjdWxhdGVkSGVpZ2h0OmQsemVyb0Jhc2VkU2Nyb2xsT2Zmc2V0OmgsaW5uZXJWaWV3cG9ydEhlaWdodDpmLHJvd0hlaWdodDp2fT1hO2Q+PWgmJmQrdjw9ZiYmKG51bGw9PT10aGlzLnN0YXJ0Um93JiYodGhpcy5zdGFydFJvdz1s''@;'; put 'put ''KSx0aGlzLmVuZFJvdz1sKX1maW5hbGl6ZShsKXt2YXIgYTtjb25zdHtzY3JvbGxPZmZzZXQ6ZCx2aWV3cG9ydEhlaWdodDpoLGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQ6Zix0b3RhbFJvd3M6dixuZWVkUmV2ZXJzZTpNLHN0YXJ0UG9zaXRpb25zOkQscm93SGVpZ2h0Olp9PWw7aWYodGhp''@;'; put 'put ''cy5lbmRSb3c9PT12LTEmJk0pZm9yKHRoaXMuc3RhcnRSb3c9dGhpcy5lbmRSb3c7dGhpcy5zdGFydFJvdz4wOyl7Y29uc3QgYmU9RFt0aGlzLmVuZFJvd10rWi1EW3RoaXMuc3RhcnRSb3ctMV07aWYoYmU8PWgtZiYmKHRoaXMuc3RhcnRSb3ctPTEpLGJlPj1oLWYpYnJlYWt9dGhpcy5zdGFy''@;'; put 'put ''dFBvc2l0aW9uPW51bGwhPT0oYT1EW3RoaXMuc3RhcnRSb3ddKSYmdm9pZCAwIT09YT9hOm51bGw7Y29uc3QgcmU9ZCtoLWYsY2U9bnVsbD09PXRoaXMuc3RhcnRSb3c/MDpsLmdldFJvd0hlaWdodCh0aGlzLnN0YXJ0Um93KTt0aGlzLmlzVmlzaWJsZUluVHJpbW1pbmdDb250YWluZXI9IShy''@;'; put 'put ''ZTxjZXx8ZD5ELmF0KC0xKSksdjx0aGlzLmVuZFJvdyYmKHRoaXMuZW5kUm93PXYtMSksbnVsbCE9PXRoaXMuc3RhcnRSb3cmJih0aGlzLmNvdW50PXRoaXMuZW5kUm93LXRoaXMuc3RhcnRSb3crMSl9fWZ1bmN0aW9uIEJFKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBMZXQoYyl7dmFyIGw9''@;'; put 'put ''ZnVuY3Rpb24gT2V0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3''@;'; put 'put ''IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQ''@;'; put 'put ''cm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBQZXR7Y29uc3RydWN0b3IoKXtCRSh0aGlzLCJjb3VudCIsMCksQkUodGhpcywic3RhcnRDb2x1bW4iLDApLEJFKHRoaXMsImVuZENvbHVtbiIsMCks''@;'; put 'put ''QkUodGhpcywic3RhcnRQb3NpdGlvbiIsMCksQkUodGhpcywiaXNWaXNpYmxlSW5UcmltbWluZ0NvbnRhaW5lciIsITApfWluaXRpYWxpemUobCl7bGV0e3RvdGFsQ29sdW1uczphfT1sO3RoaXMuY291bnQ9YSx0aGlzLmVuZENvbHVtbj10aGlzLmNvdW50LTF9cHJvY2Vzcygpe31maW5hbGl6''@;'; put 'put ''ZSgpe319ZnVuY3Rpb24gakUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIEZldChjKXt2YXIgbD1mdW5jdGlvbiBIZXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwo''@;'; put 'put ''YyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIp''@;'; put 'put ''O3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIGkzZXtjb25zdHJ1Y3Rvcigpe2pFKHRoaXMsImNv''@;'; put 'put ''dW50IiwwKSxqRSh0aGlzLCJzdGFydENvbHVtbiIsbnVsbCksakUodGhpcywiZW5kQ29sdW1uIixudWxsKSxqRSh0aGlzLCJzdGFydFBvc2l0aW9uIixudWxsKSxqRSh0aGlzLCJpc1Zpc2libGVJblRyaW1taW5nQ29udGFpbmVyIiwhMSl9aW5pdGlhbGl6ZSgpe31wcm9jZXNzKGwsYSl7Y29u''@;'; put 'put ''c3R7dG90YWxDYWxjdWxhdGVkV2lkdGg6ZCx6ZXJvQmFzZWRTY3JvbGxPZmZzZXQ6aCx2aWV3cG9ydFdpZHRoOmZ9PWE7ZDw9aCYmKHRoaXMuc3RhcnRDb2x1bW49bCksZD49aCYmZDw9aCsoaD4wP2YrMTpmKSYmbnVsbD09dGhpcy5zdGFydENvbHVtbiYmKHRoaXMuc3RhcnRDb2x1bW49bCks''@;'; put 'put ''dGhpcy5lbmRDb2x1bW49bH1maW5hbGl6ZShsKXt2YXIgYTtjb25zdHtzY3JvbGxPZmZzZXQ6ZCx2aWV3cG9ydFdpZHRoOmgsaW5saW5lU3RhcnRPZmZzZXQ6Zix6ZXJvQmFzZWRTY3JvbGxPZmZzZXQ6dix0b3RhbENvbHVtbnM6TSxuZWVkUmV2ZXJzZTpELHN0YXJ0UG9zaXRpb25zOlosY29s''@;'; put 'put ''dW1uV2lkdGg6cmV9PWw7aWYodGhpcy5lbmRDb2x1bW49PT1NLTEmJkQpZm9yKHRoaXMuc3RhcnRDb2x1bW49dGhpcy5lbmRDb2x1bW47dGhpcy5zdGFydENvbHVtbj4wOyl7Y29uc3QgRWU9Wlt0aGlzLmVuZENvbHVtbl0rcmUtWlt0aGlzLnN0YXJ0Q29sdW1uLTFdO2lmKHRoaXMuc3RhcnRD''@;'; put 'put ''b2x1bW4tPTEsRWU+aClicmVha310aGlzLnN0YXJ0UG9zaXRpb249bnVsbCE9PShhPVpbdGhpcy5zdGFydENvbHVtbl0pJiZ2b2lkIDAhPT1hP2E6bnVsbCx0aGlzLmlzVmlzaWJsZUluVHJpbW1pbmdDb250YWluZXI9IShkK2gtKHY+MD9oKzE6aCk8LTEqZnx8ZD5aLmF0KC0xKStyZXx8LTEq''@;'; put 'put ''ZC1oPjApLE08dGhpcy5lbmRDb2x1bW4mJih0aGlzLmVuZENvbHVtbj1NLTEpLG51bGwhPT10aGlzLnN0YXJ0Q29sdW1uJiYodGhpcy5jb3VudD10aGlzLmVuZENvbHVtbi10aGlzLnN0YXJ0Q29sdW1uKzEpfX1mdW5jdGlvbiBhM2UoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIE5ldChjKXt2''@;'; put 'put ''YXIgbD1mdW5jdGlvbiBWZXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJv''@;'; put 'put ''dyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRl''@;'; put 'put ''ZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIEJldCBleHRlbmRzIGkzZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksYTNlKHRoaXMsImNvbHVtblN0YXJ0T2Zmc2V0Iiww''@;'; put 'put ''KSxhM2UodGhpcywiY29sdW1uRW5kT2Zmc2V0IiwwKX1maW5hbGl6ZShsKXt2YXIgYTtzdXBlci5maW5hbGl6ZShsKTtjb25zdHtvdmVycmlkZUZuOmQsdG90YWxDb2x1bW5zOmgsc3RhcnRQb3NpdGlvbnM6Zn09bDtpZihudWxsIT09dGhpcy5zdGFydENvbHVtbiYmImZ1bmN0aW9uIj09dHlw''@;'; put 'put ''ZW9mIGQpe2NvbnN0IHY9dGhpcy5zdGFydENvbHVtbixNPXRoaXMuZW5kQ29sdW1uO2QodGhpcyksdGhpcy5jb2x1bW5TdGFydE9mZnNldD12LXRoaXMuc3RhcnRDb2x1bW4sdGhpcy5jb2x1bW5FbmRPZmZzZXQ9dGhpcy5lbmRDb2x1bW4tTX10aGlzLnN0YXJ0Q29sdW1uPDAmJih0aGlzLnN0''@;'; put 'put ''YXJ0Q29sdW1uPTApLHRoaXMuc3RhcnRQb3NpdGlvbj1udWxsIT09KGE9Zlt0aGlzLnN0YXJ0Q29sdW1uXSkmJnZvaWQgMCE9PWE/YTpudWxsLGg8dGhpcy5lbmRDb2x1bW4mJih0aGlzLmVuZENvbHVtbj1oLTEpLG51bGwhPT10aGlzLnN0YXJ0Q29sdW1uJiYodGhpcy5jb3VudD10aGlzLmVu''@;'; put 'put ''ZENvbHVtbi10aGlzLnN0YXJ0Q29sdW1uKzEpfX1mdW5jdGlvbiB6RShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gamV0KGMpe3ZhciBsPWZ1bmN0aW9uIHpldChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZv''@;'; put 'put ''aWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6''@;'; put 'put ''TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgVWV0e2Nv''@;'; put 'put ''bnN0cnVjdG9yKCl7ekUodGhpcywiY291bnQiLDApLHpFKHRoaXMsInN0YXJ0Q29sdW1uIixudWxsKSx6RSh0aGlzLCJlbmRDb2x1bW4iLG51bGwpLHpFKHRoaXMsInN0YXJ0UG9zaXRpb24iLG51bGwpLHpFKHRoaXMsImlzVmlzaWJsZUluVHJpbW1pbmdDb250YWluZXIiLCExKX1pbml0aWFs''@;'; put 'put ''aXplKCl7fXByb2Nlc3MobCxhKXtjb25zdHt0b3RhbENhbGN1bGF0ZWRXaWR0aDpkLHplcm9CYXNlZFNjcm9sbE9mZnNldDpoLHZpZXdwb3J0V2lkdGg6Zixjb2x1bW5XaWR0aDp2fT1hO2Q+PWgmJmQrdjw9aCsoaD4wP2YrMTpmKSYmKG51bGw9PXRoaXMuc3RhcnRDb2x1bW4mJih0aGlzLnN0''@;'; put 'put ''YXJ0Q29sdW1uPWwpLHRoaXMuZW5kQ29sdW1uPWwpfWZpbmFsaXplKGwpe3ZhciBhO2NvbnN0e3Njcm9sbE9mZnNldDpkLHZpZXdwb3J0V2lkdGg6aCxpbmxpbmVTdGFydE9mZnNldDpmLHplcm9CYXNlZFNjcm9sbE9mZnNldDp2LHRvdGFsQ29sdW1uczpNLG5lZWRSZXZlcnNlOkQsc3RhcnRQ''@;'; put 'put ''b3NpdGlvbnM6Wixjb2x1bW5XaWR0aDpyZX09bDtpZih0aGlzLmVuZENvbHVtbj09PU0tMSYmRClmb3IodGhpcy5zdGFydENvbHVtbj10aGlzLmVuZENvbHVtbjt0aGlzLnN0YXJ0Q29sdW1uPjA7KXtjb25zdCBCZT1aW3RoaXMuZW5kQ29sdW1uXStyZS1aW3RoaXMuc3RhcnRDb2x1bW4tMV07''@;'; put 'put ''aWYoQmU8PWgmJih0aGlzLnN0YXJ0Q29sdW1uLT0xKSxCZT49aClicmVha310aGlzLnN0YXJ0UG9zaXRpb249bnVsbCE9PShhPVpbdGhpcy5zdGFydENvbHVtbl0pJiZ2b2lkIDAhPT1hP2E6bnVsbDtjb25zdCBiZT1kK2gtKHY+MD9oKzE6aCksRWU9bnVsbD09PXRoaXMuc3RhcnRDb2x1bW4/''@;'; put 'put ''MDpsLmdldENvbHVtbldpZHRoKHRoaXMuc3RhcnRDb2x1bW4pO3RoaXMuaXNWaXNpYmxlSW5UcmltbWluZ0NvbnRhaW5lcj0hKGJlPC0xKmZ8fGQ+Wi5hdCgtMSl8fC0xKmQtaD4tMSpFZSksTTx0aGlzLmVuZENvbHVtbiYmKHRoaXMuZW5kQ29sdW1uPU0tMSksbnVsbCE9PXRoaXMuc3RhcnRD''@;'; put 'put ''b2x1bW4mJih0aGlzLmNvdW50PXRoaXMuZW5kQ29sdW1uLXRoaXMuc3RhcnRDb2x1bW4rMSl9fWZ1bmN0aW9uIG8zZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gWmV0KGMpe3ZhciBsPWZ1bmN0aW9uIFdldChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9''@;'; put 'put ''Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9''@;'; put 'put ''cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxl''@;'; put 'put ''OiEwfSk6Y1tsXT1hLGN9Y2xhc3MgczNle2NvbnN0cnVjdG9yKGwpe28zZSh0aGlzLCJjYWxjdWxhdGlvblR5cGVzIixbXSksbzNlKHRoaXMsImNhbGN1bGF0aW9uUmVzdWx0cyIsbmV3IE1hcCksdGhpcy5jYWxjdWxhdGlvblR5cGVzPWx9X2luaXRpYWxpemUobCl7dGhpcy5jYWxjdWxhdGlv''@;'; put 'put ''blR5cGVzLmZvckVhY2goYT0+e2xldFtkLGhdPWE7dGhpcy5jYWxjdWxhdGlvblJlc3VsdHMuc2V0KGQsaCksaC5pbml0aWFsaXplKGwpfSl9X3Byb2Nlc3MobCxhKXt0aGlzLmNhbGN1bGF0aW9uVHlwZXMuZm9yRWFjaChkPT57bGV0WyxoXT1kO3JldHVybiBoLnByb2Nlc3MobCxhKX0pfV9m''@;'; put 'put ''aW5hbGl6ZShsKXt0aGlzLmNhbGN1bGF0aW9uVHlwZXMuZm9yRWFjaChhPT57bGV0WyxkXT1hO3JldHVybiBkLmZpbmFsaXplKGwpfSl9Z2V0UmVzdWx0c0ZvcihsKXtyZXR1cm4gdGhpcy5jYWxjdWxhdGlvblJlc3VsdHMuZ2V0KGwpfX1mdW5jdGlvbiBXMihjLGwsYSl7cmV0dXJuKGw9ZnVu''@;'; put 'put ''Y3Rpb24gWWV0KGMpe3ZhciBsPWZ1bmN0aW9uIEdldChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBk''@;'; put 'put ''KXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkp''@;'; put 'put ''aW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgJGV0IGV4dGVuZHMgczNle2NvbnN0cnVjdG9yKGwpe2xldHtjYWxjdWxhdGlvblR5cGVzOmEsdmlld3BvcnRIZWln''@;'; put 'put ''aHQ6ZCxzY3JvbGxPZmZzZXQ6aCx0b3RhbFJvd3M6ZixkZWZhdWx0Um93SGVpZ2h0OnYscm93SGVpZ2h0Rm46TSxvdmVycmlkZUZuOkQsaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodDpafT1sO3N1cGVyKGEpLFcyKHRoaXMsInZpZXdwb3J0SGVpZ2h0IiwwKSxXMih0aGlzLCJzY3JvbGxPZmZz''@;'; put 'put ''ZXQiLDApLFcyKHRoaXMsInplcm9CYXNlZFNjcm9sbE9mZnNldCIsMCksVzIodGhpcywidG90YWxSb3dzIiwwKSxXMih0aGlzLCJyb3dIZWlnaHRGbiIsbnVsbCksVzIodGhpcywicm93SGVpZ2h0IiwwKSxXMih0aGlzLCJvdmVycmlkZUZuIixudWxsKSxXMih0aGlzLCJob3Jpem9udGFsU2Ny''@;'; put 'put ''b2xsYmFySGVpZ2h0IiwwKSxXMih0aGlzLCJpbm5lclZpZXdwb3J0SGVpZ2h0IiwwKSxXMih0aGlzLCJ0b3RhbENhbGN1bGF0ZWRIZWlnaHQiLDApLFcyKHRoaXMsInN0YXJ0UG9zaXRpb25zIixbXSksVzIodGhpcywibmVlZFJldmVyc2UiLCEwKSx0aGlzLmRlZmF1bHRIZWlnaHQ9dix0aGlz''@;'; put 'put ''LnZpZXdwb3J0SGVpZ2h0PWQsdGhpcy5zY3JvbGxPZmZzZXQ9aCx0aGlzLnplcm9CYXNlZFNjcm9sbE9mZnNldD1NYXRoLm1heChoLDApLHRoaXMudG90YWxSb3dzPWYsdGhpcy5yb3dIZWlnaHRGbj1NLHRoaXMub3ZlcnJpZGVGbj1ELHRoaXMuaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodD1a''@;'; put 'put ''Pz8wLHRoaXMuaW5uZXJWaWV3cG9ydEhlaWdodD10aGlzLnplcm9CYXNlZFNjcm9sbE9mZnNldCt0aGlzLnZpZXdwb3J0SGVpZ2h0LXRoaXMuaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCx0aGlzLmNhbGN1bGF0ZSgpfWNhbGN1bGF0ZSgpe3RoaXMuX2luaXRpYWxpemUodGhpcyk7Zm9yKGxl''@;'; put 'put ''dCBsPTA7bDx0aGlzLnRvdGFsUm93cztsKyspaWYodGhpcy5yb3dIZWlnaHQ9dGhpcy5nZXRSb3dIZWlnaHQobCksdGhpcy5fcHJvY2VzcyhsLHRoaXMpLHRoaXMuc3RhcnRQb3NpdGlvbnMucHVzaCh0aGlzLnRvdGFsQ2FsY3VsYXRlZEhlaWdodCksdGhpcy50b3RhbENhbGN1bGF0ZWRIZWln''@;'; put 'put ''aHQrPXRoaXMucm93SGVpZ2h0LHRoaXMudG90YWxDYWxjdWxhdGVkSGVpZ2h0Pj10aGlzLmlubmVyVmlld3BvcnRIZWlnaHQpe3RoaXMubmVlZFJldmVyc2U9ITE7YnJlYWt9dGhpcy5fZmluYWxpemUodGhpcyl9Z2V0Um93SGVpZ2h0KGwpe2NvbnN0IGE9dGhpcy5yb3dIZWlnaHRGbihsKTty''@;'; put 'put ''ZXR1cm4gaXNOYU4oYSk/dGhpcy5kZWZhdWx0SGVpZ2h0OmF9fWZ1bmN0aW9uIGEzKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBLZXQoYyl7dmFyIGw9ZnVuY3Rpb24gcWV0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2''@;'; put 'put ''ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1s''@;'; put 'put ''P1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jb25z''@;'; put 'put ''dCBfXz01MDtjbGFzcyBYZXQgZXh0ZW5kcyBzM2V7Y29uc3RydWN0b3IobCl7bGV0e2NhbGN1bGF0aW9uVHlwZXM6YSx2aWV3cG9ydFdpZHRoOmQsc2Nyb2xsT2Zmc2V0OmgsdG90YWxDb2x1bW5zOmYsY29sdW1uV2lkdGhGbjp2LG92ZXJyaWRlRm46TSxpbmxpbmVTdGFydE9mZnNldDpEfT1s''@;'; put 'put ''O3N1cGVyKGEpLGEzKHRoaXMsInZpZXdwb3J0V2lkdGgiLDApLGEzKHRoaXMsInNjcm9sbE9mZnNldCIsMCksYTModGhpcywiemVyb0Jhc2VkU2Nyb2xsT2Zmc2V0IiwwKSxhMyh0aGlzLCJ0b3RhbENvbHVtbnMiLDApLGEzKHRoaXMsImNvbHVtbldpZHRoRm4iLG51bGwpLGEzKHRoaXMsImNv''@;'; put 'put ''bHVtbldpZHRoIiwwKSxhMyh0aGlzLCJvdmVycmlkZUZuIixudWxsKSxhMyh0aGlzLCJpbmxpbmVTdGFydE9mZnNldCIsMCksYTModGhpcywidG90YWxDYWxjdWxhdGVkV2lkdGgiLDApLGEzKHRoaXMsInN0YXJ0UG9zaXRpb25zIixbXSksYTModGhpcywibmVlZFJldmVyc2UiLCEwKSx0aGlz''@;'; put 'put ''LnZpZXdwb3J0V2lkdGg9ZCx0aGlzLnNjcm9sbE9mZnNldD1oLHRoaXMuemVyb0Jhc2VkU2Nyb2xsT2Zmc2V0PU1hdGgubWF4KGgsMCksdGhpcy50b3RhbENvbHVtbnM9Zix0aGlzLmNvbHVtbldpZHRoRm49dix0aGlzLm92ZXJyaWRlRm49TSx0aGlzLmlubGluZVN0YXJ0T2Zmc2V0PUQsdGhp''@;'; put 'put ''cy5jYWxjdWxhdGUoKX1jYWxjdWxhdGUoKXt0aGlzLl9pbml0aWFsaXplKHRoaXMpO2ZvcihsZXQgbD0wO2w8dGhpcy50b3RhbENvbHVtbnM7bCsrKWlmKHRoaXMuY29sdW1uV2lkdGg9dGhpcy5nZXRDb2x1bW5XaWR0aChsKSx0aGlzLl9wcm9jZXNzKGwsdGhpcyksdGhpcy5zdGFydFBvc2l0''@;'; put 'put ''aW9ucy5wdXNoKHRoaXMudG90YWxDYWxjdWxhdGVkV2lkdGgpLHRoaXMudG90YWxDYWxjdWxhdGVkV2lkdGgrPXRoaXMuY29sdW1uV2lkdGgsdGhpcy50b3RhbENhbGN1bGF0ZWRXaWR0aD49dGhpcy56ZXJvQmFzZWRTY3JvbGxPZmZzZXQrdGhpcy52aWV3cG9ydFdpZHRoKXt0aGlzLm5lZWRS''@;'; put 'put ''ZXZlcnNlPSExO2JyZWFrfXRoaXMuX2ZpbmFsaXplKHRoaXMpfWdldENvbHVtbldpZHRoKGwpe2NvbnN0IGE9dGhpcy5jb2x1bW5XaWR0aEZuKGwpO3JldHVybiBpc05hTihhKT9fXzphfX1jb25zdCBRZXQ9Y2xhc3MgSmV0e2NvbnN0cnVjdG9yKGwsYSxkLGgsZil7dGhpcy5kYXRhQWNjZXNz''@;'; put 'put ''T2JqZWN0PWwsdGhpcy53b3Q9bC53b3QsdGhpcy5pbnN0YW5jZT10aGlzLndvdCx0aGlzLmRvbUJpbmRpbmdzPWEsdGhpcy53dFNldHRpbmdzPWQsdGhpcy53dFRhYmxlPWYsdGhpcy5vdmVyc2l6ZWRSb3dzPVtdLHRoaXMub3ZlcnNpemVkQ29sdW1uSGVhZGVycz1bXSx0aGlzLmhhc092ZXJz''@;'; put 'put ''aXplZENvbHVtbkhlYWRlcnNNYXJrZWQ9e30sdGhpcy5jbGllbnRIZWlnaHQ9MCx0aGlzLnJvd0hlYWRlcldpZHRoPU5hTix0aGlzLnJvd3NWaXNpYmxlQ2FsY3VsYXRvcj1udWxsLHRoaXMuY29sdW1uc1Zpc2libGVDYWxjdWxhdG9yPW51bGwsdGhpcy5yb3dzQ2FsY3VsYXRvclR5cGVzPW5l''@;'; put 'put ''dyBNYXAoW1sicmVuZGVyZWQiLCgpPT50aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicmVuZGVyQWxsUm93cyIpP25ldyBNZXQ6bmV3IGtldF0sWyJmdWxseVZpc2libGUiLCgpPT5uZXcgUmV0XSxbInBhcnRpYWxseVZpc2libGUiLCgpPT5uZXcgbjNlXV0pLHRoaXMuY29sdW1uc0NhbGN1''@;'; put 'put ''bGF0b3JUeXBlcz1uZXcgTWFwKFtbInJlbmRlcmVkIiwoKT0+dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInJlbmRlckFsbENvbHVtbnMiKT9uZXcgUGV0Om5ldyBCZXRdLFsiZnVsbHlWaXNpYmxlIiwoKT0+bmV3IFVldF0sWyJwYXJ0aWFsbHlWaXNpYmxlIiwoKT0+bmV3IGkzZV1dKSx0''@;'; put 'put ''aGlzLmV2ZW50TWFuYWdlcj1oLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodGhpcy5kb21CaW5kaW5ncy5yb290V2luZG93LCJyZXNpemUiLCgpPT57dGhpcy5jbGllbnRIZWlnaHQ9dGhpcy5nZXRXb3Jrc3BhY2VIZWlnaHQoKX0pfWdldFdvcmtzcGFjZUhlaWdodCgpe2Nv''@;'; put 'put ''bnN0IGE9dGhpcy5kYXRhQWNjZXNzT2JqZWN0LnRvcE92ZXJsYXlUcmltbWluZ0NvbnRhaW5lcjtsZXQgZD0wO3JldHVybiBkPWE9PT10aGlzLmRvbUJpbmRpbmdzLnJvb3RXaW5kb3c/dGhpcy5kb21CaW5kaW5ncy5yb290RG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodDp4''@;'; put 'put ''dShhKT4wJiZhLmNsaWVudEhlaWdodD4wP2EuY2xpZW50SGVpZ2h0OjEvMCxkfWdldFZpZXdwb3J0SGVpZ2h0KCl7bGV0IGw9dGhpcy5nZXRXb3Jrc3BhY2VIZWlnaHQoKTtpZihsPT09MS8wKXJldHVybiBsO2NvbnN0IGE9dGhpcy5nZXRDb2x1bW5IZWFkZXJIZWlnaHQoKTtyZXR1cm4gYT4w''@;'; put 'put ''JiYobC09YSksbH1nZXRXb3Jrc3BhY2VXaWR0aCgpe2NvbnN0e3Jvb3REb2N1bWVudDpsLHJvb3RXaW5kb3c6YX09dGhpcy5kb21CaW5kaW5ncyxkPXRoaXMuZGF0YUFjY2Vzc09iamVjdC5pbmxpbmVTdGFydE92ZXJsYXlUcmltbWluZ0NvbnRhaW5lcjtsZXQgaDtpZihkPT09YSl7Y29uc3Qg''@;'; put 'put ''Zj10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxDb2x1bW5zIik7aD10aGlzLnd0VGFibGUuaG9sZGVyLm9mZnNldFdpZHRoLHRoaXMuZ2V0Um93SGVhZGVyV2lkdGgoKSt0aGlzLnN1bUNvbHVtbldpZHRocygwLGYpPmgmJihoPWwuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRo''@;'; put 'put ''KX1lbHNlIGg9ZC5jbGllbnRXaWR0aDtyZXR1cm4gaH1nZXRWaWV3cG9ydFdpZHRoKCl7Y29uc3QgbD10aGlzLmdldFdvcmtzcGFjZVdpZHRoKCk7aWYobD09PTEvMClyZXR1cm4gbDtjb25zdCBhPXRoaXMuZ2V0Um93SGVhZGVyV2lkdGgoKTtyZXR1cm4gYT4wP2wtYTpsfWhhc1ZlcnRpY2Fs''@;'; put 'put ''U2Nyb2xsKCl7aWYodGhpcy5pc1ZlcnRpY2FsbHlTY3JvbGxhYmxlQnlXaW5kb3coKSl7Y29uc3QgZj10aGlzLmRvbUJpbmRpbmdzLnJvb3REb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7cmV0dXJuIGYuc2Nyb2xsSGVpZ2h0PmYuY2xpZW50SGVpZ2h0fWNvbnN0e2hvbGRlcjpsLGhpZGVyOmF9''@;'; put 'put ''PXRoaXMud3RUYWJsZSxoPWEub2Zmc2V0SGVpZ2h0O3JldHVybiBsLmNsaWVudEhlaWdodDxofHxoPnRoaXMuZ2V0V29ya3NwYWNlSGVpZ2h0KCl9aGFzSG9yaXpvbnRhbFNjcm9sbCgpe2lmKHRoaXMuaXNWZXJ0aWNhbGx5U2Nyb2xsYWJsZUJ5V2luZG93KCkpe2NvbnN0IGY9dGhpcy5kb21C''@;'; put 'put ''aW5kaW5ncy5yb290RG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O3JldHVybiBmLnNjcm9sbFdpZHRoPmYuY2xpZW50V2lkdGh9Y29uc3R7aG9sZGVyOmwsaGlkZXI6YX09dGhpcy53dFRhYmxlLGg9YS5vZmZzZXRXaWR0aDtyZXR1cm4gbC5jbGllbnRXaWR0aDxofHxoPnRoaXMuZ2V0V29ya3Nw''@;'; put 'put ''YWNlV2lkdGgoKX1pc1ZlcnRpY2FsbHlTY3JvbGxhYmxlQnlXaW5kb3coKXtyZXR1cm4gdGhpcy5kYXRhQWNjZXNzT2JqZWN0LnRvcE92ZXJsYXlUcmltbWluZ0NvbnRhaW5lcj09PXRoaXMuZG9tQmluZGluZ3Mucm9vdFdpbmRvd31pc0hvcml6b250YWxseVNjcm9sbGFibGVCeVdpbmRvdygp''@;'; put 'put ''e3JldHVybiB0aGlzLmRhdGFBY2Nlc3NPYmplY3QuaW5saW5lU3RhcnRPdmVybGF5VHJpbW1pbmdDb250YWluZXI9PT10aGlzLmRvbUJpbmRpbmdzLnJvb3RXaW5kb3d9c3VtQ29sdW1uV2lkdGhzKGwsYSl7bGV0IGQ9MCxoPWw7Zm9yKDtoPGE7KWQrPXRoaXMud3RUYWJsZS5nZXRDb2x1bW5X''@;'; put 'put ''aWR0aChoKSxoKz0xO3JldHVybiBkfWdldFdvcmtzcGFjZU9mZnNldCgpe3JldHVybiBVMCh0aGlzLnd0VGFibGUuaG9sZGVyKX1nZXRDb2x1bW5IZWFkZXJIZWlnaHQoKXtyZXR1cm4gdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImNvbHVtbkhlYWRlcnMiKS5sZW5ndGg/aXNOYU4odGhp''@;'; put 'put ''cy5jb2x1bW5IZWFkZXJIZWlnaHQpJiYodGhpcy5jb2x1bW5IZWFkZXJIZWlnaHQ9eHUodGhpcy53dFRhYmxlLlRIRUFEKSk6dGhpcy5jb2x1bW5IZWFkZXJIZWlnaHQ9MCx0aGlzLmNvbHVtbkhlYWRlckhlaWdodH1nZXRSb3dIZWFkZXJXaWR0aCgpe2NvbnN0IGw9dGhpcy53dFNldHRpbmdz''@;'; put 'put ''LmdldFNldHRpbmcoInJvd0hlYWRlcldpZHRoIiksYT10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicm93SGVhZGVycyIpO2lmKGwpe3RoaXMucm93SGVhZGVyV2lkdGg9MDtmb3IobGV0IGQ9MCxoPWEubGVuZ3RoO2Q8aDtkKyspdGhpcy5yb3dIZWFkZXJXaWR0aCs9bFtkXXx8bH1pZihp''@;'; put 'put ''c05hTih0aGlzLnJvd0hlYWRlcldpZHRoKSlpZihhLmxlbmd0aCl7bGV0IGQ9dGhpcy53dFRhYmxlLlRBQkxFLnF1ZXJ5U2VsZWN0b3IoIlRIIik7dGhpcy5yb3dIZWFkZXJXaWR0aD0wO2ZvcihsZXQgaD0wLGY9YS5sZW5ndGg7aDxmO2grKylkPyh0aGlzLnJvd0hlYWRlcldpZHRoKz1zdShk''@;'; put 'put ''KSxkPWQubmV4dFNpYmxpbmcpOnRoaXMucm93SGVhZGVyV2lkdGgrPTUwfWVsc2UgdGhpcy5yb3dIZWFkZXJXaWR0aD0wO3JldHVybiB0aGlzLnJvd0hlYWRlcldpZHRoPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJvbk1vZGlmeVJvd0hlYWRlcldpZHRoIix0aGlzLnJvd0hlYWRlcldp''@;'; put 'put ''ZHRoKXx8dGhpcy5yb3dIZWFkZXJXaWR0aCx0aGlzLnJvd0hlYWRlcldpZHRofWNyZWF0ZVJvd3NDYWxjdWxhdG9yKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOlsicmVuZGVyZWQiLCJmdWxseVZpc2libGUiLCJwYXJ0aWFs''@;'; put 'put ''bHlWaXNpYmxlIl07Y29uc3R7d3RTZXR0aW5nczphLHd0VGFibGU6ZH09dGhpcztsZXQgZix2LGg9dGhpcy5nZXRWaWV3cG9ydEhlaWdodCgpO3RoaXMucm93SGVhZGVyV2lkdGg9TmFOO2xldCBNPXRoaXMuZGF0YUFjY2Vzc09iamVjdC50b3BTY3JvbGxQb3NpdGlvbi10aGlzLmRhdGFBY2Nl''@;'; put 'put ''c3NPYmplY3QudG9wUGFyZW50T2Zmc2V0O2NvbnN0IEQ9YS5nZXRTZXR0aW5nKCJmaXhlZFJvd3NUb3AiKSxaPWEuZ2V0U2V0dGluZygiZml4ZWRSb3dzQm90dG9tIikscmU9YS5nZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKTtyZXR1cm4gRCYmTT49MCYmKHY9dGhpcy5kYXRhQWNjZXNzT2JqZWN0''@;'; put 'put ''LnRvcE92ZXJsYXkuc3VtQ2VsbFNpemVzKDAsRCksTSs9dixoLT12KSxaJiZ0aGlzLmRhdGFBY2Nlc3NPYmplY3QuYm90dG9tT3ZlcmxheS5jbG9uZSYmKHY9dGhpcy5kYXRhQWNjZXNzT2JqZWN0LmJvdHRvbU92ZXJsYXkuc3VtQ2VsbFNpemVzKHJlLVoscmUpLGgtPXYpLGY9ZC5ob2xkZXIu''@;'; put 'put ''Y2xpZW50SGVpZ2h0PT09ZC5ob2xkZXIub2Zmc2V0SGVpZ2h0PzA6ZjAodGhpcy5kb21CaW5kaW5ncy5yb290RG9jdW1lbnQpLG5ldyAkZXQoe2NhbGN1bGF0aW9uVHlwZXM6bC5tYXAoY2U9PltjZSx0aGlzLnJvd3NDYWxjdWxhdG9yVHlwZXMuZ2V0KGNlKSgpXSksdmlld3BvcnRIZWlnaHQ6''@;'; put 'put ''aCxzY3JvbGxPZmZzZXQ6TSx0b3RhbFJvd3M6YS5nZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKSxkZWZhdWx0Um93SGVpZ2h0OnRoaXMuaW5zdGFuY2Uuc3R5bGVzSGFuZGxlci5nZXREZWZhdWx0Um93SGVpZ2h0KCkscm93SGVpZ2h0Rm46Y2U9PmQuZ2V0Um93SGVpZ2h0KGNlKSxvdmVycmlkZUZu''@;'; put 'put ''OmEuZ2V0U2V0dGluZ1B1cmUoInZpZXdwb3J0Um93Q2FsY3VsYXRvck92ZXJyaWRlIiksaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodDpmfSl9Y3JlYXRlQ29sdW1uc0NhbGN1bGF0b3IoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNb''@;'; put 'put ''MF06WyJyZW5kZXJlZCIsImZ1bGx5VmlzaWJsZSIsInBhcnRpYWxseVZpc2libGUiXTtjb25zdHt3dFNldHRpbmdzOmEsd3RUYWJsZTpkfT10aGlzO2xldCBoPXRoaXMuZ2V0Vmlld3BvcnRXaWR0aCgpLGY9TWF0aC5hYnModGhpcy5kYXRhQWNjZXNzT2JqZWN0LmlubGluZVN0YXJ0U2Nyb2xs''@;'; put 'put ''UG9zaXRpb24pLXRoaXMuZGF0YUFjY2Vzc09iamVjdC5pbmxpbmVTdGFydFBhcmVudE9mZnNldDt0aGlzLmNvbHVtbkhlYWRlckhlaWdodD1OYU47Y29uc3Qgdj1hLmdldFNldHRpbmcoImZpeGVkQ29sdW1uc1N0YXJ0Iik7aWYodiYmZj49MCl7Y29uc3QgTT10aGlzLmRhdGFBY2Nlc3NPYmpl''@;'; put 'put ''Y3QuaW5saW5lU3RhcnRPdmVybGF5LnN1bUNlbGxTaXplcygwLHYpO2YrPU0saC09TX1yZXR1cm4gZC5ob2xkZXIuY2xpZW50V2lkdGghPT1kLmhvbGRlci5vZmZzZXRXaWR0aCYmKGgtPWYwKHRoaXMuZG9tQmluZGluZ3Mucm9vdERvY3VtZW50KSksbmV3IFhldCh7Y2FsY3VsYXRpb25UeXBl''@;'; put 'put ''czpsLm1hcChNPT5bTSx0aGlzLmNvbHVtbnNDYWxjdWxhdG9yVHlwZXMuZ2V0KE0pKCldKSx2aWV3cG9ydFdpZHRoOmgsc2Nyb2xsT2Zmc2V0OmYsdG90YWxDb2x1bW5zOmEuZ2V0U2V0dGluZygidG90YWxDb2x1bW5zIiksY29sdW1uV2lkdGhGbjpNPT5kLmdldENvbHVtbldpZHRoKE0pLG92''@;'; put 'put ''ZXJyaWRlRm46YS5nZXRTZXR0aW5nUHVyZSgidmlld3BvcnRDb2x1bW5DYWxjdWxhdG9yT3ZlcnJpZGUiKSxpbmxpbmVTdGFydE9mZnNldDp0aGlzLmRhdGFBY2Nlc3NPYmplY3QuaW5saW5lU3RhcnRQYXJlbnRPZmZzZXR9KX1jcmVhdGVDYWxjdWxhdG9ycygpe2xldCBsPWFyZ3VtZW50cy5s''@;'; put 'put ''ZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07Y29uc3R7d3RTZXR0aW5nczphfT10aGlzLGQ9dGhpcy5jcmVhdGVSb3dzQ2FsY3VsYXRvcigpLGg9dGhpcy5jcmVhdGVDb2x1bW5zQ2FsY3VsYXRvcigpO2lmKGwmJiFhLmdldFNldHRpbmcoInJlbmRlckFsbFJv''@;'; put 'put ''d3MiKSl7Y29uc3QgZj1kLmdldFJlc3VsdHNGb3IoImZ1bGx5VmlzaWJsZSIpO2w9dGhpcy5hcmVBbGxQcm9wb3NlZFZpc2libGVSb3dzQWxyZWFkeVJlbmRlcmVkKGYpfWlmKGwmJiFhLmdldFNldHRpbmcoInJlbmRlckFsbENvbHVtbnMiKSl7Y29uc3QgZj1oLmdldFJlc3VsdHNGb3IoImZ1''@;'; put 'put ''bGx5VmlzaWJsZSIpO2w9dGhpcy5hcmVBbGxQcm9wb3NlZFZpc2libGVDb2x1bW5zQWxyZWFkeVJlbmRlcmVkKGYpfXJldHVybiBsfHwodGhpcy5yb3dzUmVuZGVyQ2FsY3VsYXRvcj1kLmdldFJlc3VsdHNGb3IoInJlbmRlcmVkIiksdGhpcy5jb2x1bW5zUmVuZGVyQ2FsY3VsYXRvcj1oLmdl''@;'; put 'put ''dFJlc3VsdHNGb3IoInJlbmRlcmVkIikpLHRoaXMucm93c1Zpc2libGVDYWxjdWxhdG9yPWQuZ2V0UmVzdWx0c0ZvcigiZnVsbHlWaXNpYmxlIiksdGhpcy5jb2x1bW5zVmlzaWJsZUNhbGN1bGF0b3I9aC5nZXRSZXN1bHRzRm9yKCJmdWxseVZpc2libGUiKSx0aGlzLnJvd3NQYXJ0aWFsbHlW''@;'; put 'put ''aXNpYmxlQ2FsY3VsYXRvcj1kLmdldFJlc3VsdHNGb3IoInBhcnRpYWxseVZpc2libGUiKSx0aGlzLmNvbHVtbnNQYXJ0aWFsbHlWaXNpYmxlQ2FsY3VsYXRvcj1oLmdldFJlc3VsdHNGb3IoInBhcnRpYWxseVZpc2libGUiKSxsfWNyZWF0ZVZpc2libGVDYWxjdWxhdG9ycygpe2NvbnN0IGw9''@;'; put 'put ''dGhpcy5jcmVhdGVSb3dzQ2FsY3VsYXRvcihbImZ1bGx5VmlzaWJsZSIsInBhcnRpYWxseVZpc2libGUiXSksYT10aGlzLmNyZWF0ZUNvbHVtbnNDYWxjdWxhdG9yKFsiZnVsbHlWaXNpYmxlIiwicGFydGlhbGx5VmlzaWJsZSJdKTt0aGlzLnJvd3NWaXNpYmxlQ2FsY3VsYXRvcj1sLmdldFJl''@;'; put 'put ''c3VsdHNGb3IoImZ1bGx5VmlzaWJsZSIpLHRoaXMuY29sdW1uc1Zpc2libGVDYWxjdWxhdG9yPWEuZ2V0UmVzdWx0c0ZvcigiZnVsbHlWaXNpYmxlIiksdGhpcy5yb3dzUGFydGlhbGx5VmlzaWJsZUNhbGN1bGF0b3I9bC5nZXRSZXN1bHRzRm9yKCJwYXJ0aWFsbHlWaXNpYmxlIiksdGhpcy5j''@;'; put 'put ''b2x1bW5zUGFydGlhbGx5VmlzaWJsZUNhbGN1bGF0b3I9YS5nZXRSZXN1bHRzRm9yKCJwYXJ0aWFsbHlWaXNpYmxlIil9YXJlQWxsUHJvcG9zZWRWaXNpYmxlUm93c0FscmVhZHlSZW5kZXJlZChsKXtpZighdGhpcy5yb3dzVmlzaWJsZUNhbGN1bGF0b3IpcmV0dXJuITE7bGV0e3N0YXJ0Um93''@;'; put 'put ''OmEsZW5kUm93OmR9PWw7aWYobnVsbD09PWEmJm51bGw9PT1kKXtpZighbC5pc1Zpc2libGVJblRyaW1taW5nQ29udGFpbmVyKXJldHVybiEwO2E9dGhpcy5yb3dzUGFydGlhbGx5VmlzaWJsZUNhbGN1bGF0b3Iuc3RhcnRSb3csZD10aGlzLnJvd3NQYXJ0aWFsbHlWaXNpYmxlQ2FsY3VsYXRv''@;'; put 'put ''ci5lbmRSb3d9Y29uc3R7c3RhcnRSb3c6aCxlbmRSb3c6Zixyb3dTdGFydE9mZnNldDp2LHJvd0VuZE9mZnNldDpNfT10aGlzLnJvd3NSZW5kZXJDYWxjdWxhdG9yLEQ9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsUm93cyIpLTEsWj10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGlu''@;'; put 'put ''Zygidmlld3BvcnRSb3dSZW5kZXJpbmdUaHJlc2hvbGQiKTtyZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihaKSYmWj4wPyhhPU1hdGgubWF4KDAsYS1NYXRoLm1pbih2LFopKSxkPU1hdGgubWluKEQsZCtNYXRoLm1pbihNLFopKSk6ImF1dG8iPT09WiYmKGE9TWF0aC5tYXgoMCxhLU1hdGguY2Vp''@;'; put 'put ''bCh2LzIpKSxkPU1hdGgubWluKEQsZCtNYXRoLmNlaWwoTS8yKSkpLCEoYTxofHxhPT09aCYmYT4wfHxkPmZ8fGQ9PT1mJiZkPEQpfWFyZUFsbFByb3Bvc2VkVmlzaWJsZUNvbHVtbnNBbHJlYWR5UmVuZGVyZWQobCl7aWYoIXRoaXMuY29sdW1uc1Zpc2libGVDYWxjdWxhdG9yKXJldHVybiEx''@;'; put 'put ''O2xldHtzdGFydENvbHVtbjphLGVuZENvbHVtbjpkfT1sO2lmKG51bGw9PT1hJiZudWxsPT09ZCl7aWYoIWwuaXNWaXNpYmxlSW5UcmltbWluZ0NvbnRhaW5lcilyZXR1cm4hMDthPXRoaXMuY29sdW1uc1BhcnRpYWxseVZpc2libGVDYWxjdWxhdG9yLnN0YXJ0Q29sdW1uLGQ9dGhpcy5jb2x1''@;'; put 'put ''bW5zUGFydGlhbGx5VmlzaWJsZUNhbGN1bGF0b3IuZW5kQ29sdW1ufWNvbnN0e3N0YXJ0Q29sdW1uOmgsZW5kQ29sdW1uOmYsY29sdW1uU3RhcnRPZmZzZXQ6dixjb2x1bW5FbmRPZmZzZXQ6TX09dGhpcy5jb2x1bW5zUmVuZGVyQ2FsY3VsYXRvcixEPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0''@;'; put 'put ''aW5nKCJ0b3RhbENvbHVtbnMiKS0xLFo9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInZpZXdwb3J0Q29sdW1uUmVuZGVyaW5nVGhyZXNob2xkIik7cmV0dXJuIE51bWJlci5pc0ludGVnZXIoWikmJlo+MD8oYT1NYXRoLm1heCgwLGEtTWF0aC5taW4odixaKSksZD1NYXRoLm1pbihELGQr''@;'; put 'put ''TWF0aC5taW4oTSxaKSkpOiJhdXRvIj09PVomJihhPU1hdGgubWF4KDAsYS1NYXRoLmNlaWwodi8yKSksZD1NYXRoLm1pbihELGQrTWF0aC5jZWlsKE0vMikpKSwhKGE8aHx8YT09PWgmJmE+MHx8ZD5mfHxkPT09ZiYmZDxEKX1yZXNldEhhc092ZXJzaXplZENvbHVtbkhlYWRlcnNNYXJrZWQo''@;'; put 'put ''KXtYbyh0aGlzLmhhc092ZXJzaXplZENvbHVtbkhlYWRlcnNNYXJrZWQsKGwsYSxkKT0+e2RbYV09dm9pZCAwfSl9fTtmdW5jdGlvbiBsM2UoYyxsLGEpe2MzZShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gYzNlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90''@;'; put 'put ''IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBaYyhjLGwpe3JldHVybiBjLmdldChVRShjLGwpKX1mdW5jdGlvbiB1M2UoYyxsLGEpe3JldHVybiBjLnNldChVRShjLGwpLGEpLGF9ZnVuY3Rpb24gVUUoYyxsLGEpe2lm''@;'; put 'put ''KCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXkoOTM5MDkpO3ZhciBvMz1uZXcgV2Vha01hcCx2''@;'; put 'put ''MT1uZXcgV2Vha01hcCxsUD1uZXcgV2Vha1NldDtjbGFzcyB0dHR7Y29uc3RydWN0b3IoKXsoZnVuY3Rpb24gZXR0KGMsbCl7YzNlKGMsbCksbC5hZGQoYyl9KSh0aGlzLGxQKSxsM2UodGhpcyxvMyx2b2lkIDApLGwzZSh0aGlzLHYxLHZvaWQgMCl9c2V0QWN0aXZlT3ZlcmxheShsKXtyZXR1''@;'; put 'put ''cm4gdTNlKHYxLHRoaXMsbCksdGhpc31zZXRBY3RpdmVTZWxlY3Rpb24obCl7cmV0dXJuIHUzZShvMyx0aGlzLGwpLHRoaXN9c2Nhbigpe2NvbnN0IGw9WmMobzMsdGhpcykuc2V0dGluZ3Muc2VsZWN0aW9uVHlwZSxhPW5ldyBTZXQ7cmV0dXJuImFjdGl2ZS1oZWFkZXIiPT09bD8odGhpcy5z''@;'; put 'put ''Y2FuQ29sdW1uc0luSGVhZGVyc1JhbmdlKGQ9PmEuYWRkKGQpKSx0aGlzLnNjYW5Sb3dzSW5IZWFkZXJzUmFuZ2UoZD0+YS5hZGQoZCkpKToiYXJlYSI9PT1sP3RoaXMuc2NhbkNlbGxzUmFuZ2UoZD0+YS5hZGQoZCkpOiJmb2N1cyI9PT1sPyh0aGlzLnNjYW5Db2x1bW5zSW5IZWFkZXJzUmFu''@;'; put 'put ''Z2UoZD0+YS5hZGQoZCkpLHRoaXMuc2NhblJvd3NJbkhlYWRlcnNSYW5nZShkPT5hLmFkZChkKSksdGhpcy5zY2FuQ2VsbHNSYW5nZShkPT5hLmFkZChkKSkpOiJmaWxsIj09PWw/dGhpcy5zY2FuQ2VsbHNSYW5nZShkPT5hLmFkZChkKSk6ImhlYWRlciI9PT1sPyh0aGlzLnNjYW5Db2x1bW5z''@;'; put 'put ''SW5IZWFkZXJzUmFuZ2UoZD0+YS5hZGQoZCkpLHRoaXMuc2NhblJvd3NJbkhlYWRlcnNSYW5nZShkPT5hLmFkZChkKSkpOiJyb3ciPT09bD8odGhpcy5zY2FuUm93c0luSGVhZGVyc1JhbmdlKGQ9PmEuYWRkKGQpKSx0aGlzLnNjYW5Sb3dzSW5DZWxsc1JhbmdlKGQ9PmEuYWRkKGQpKSk6ImNv''@;'; put 'put ''bHVtbiI9PT1sJiYodGhpcy5zY2FuQ29sdW1uc0luSGVhZGVyc1JhbmdlKGQ9PmEuYWRkKGQpKSx0aGlzLnNjYW5Db2x1bW5zSW5DZWxsc1JhbmdlKGQ9PmEuYWRkKGQpKSksYX1zY2FuQ29sdW1uc0luSGVhZGVyc1JhbmdlKGwpe2NvbnN0W2EsZCxoLGZdPVpjKG8zLHRoaXMpLmdldENvcm5l''@;'; put 'put ''cnMoKSx7d3RUYWJsZTp2fT1aYyh2MSx0aGlzKSxNPXYuZ2V0UmVuZGVyZWRDb2x1bW5zQ291bnQoKSxEPXYuZ2V0Q29sdW1uSGVhZGVyc0NvdW50KCk7bGV0IFo9MDtmb3IobGV0IHJlPS12LmdldFJvd0hlYWRlcnNDb3VudCgpO3JlPE07cmUrKyl7Y29uc3QgY2U9di5jb2x1bW5GaWx0ZXIu''@;'; put 'put ''cmVuZGVyZWRUb1NvdXJjZShyZSk7aWYoIShjZTxkfHxjZT5mKSl7Zm9yKGxldCBiZT0tRDtiZTwwO2JlKyspe2lmKGJlPGF8fGJlPmgpY29udGludWU7Y29uc3QgRWU9YmUrRDtsZXQgQmU9di5nZXRDb2x1bW5IZWFkZXIoY2UsRWUpO2NvbnN0IHFlPVpjKHYxLHRoaXMpLmdldFNldHRpbmco''@;'; put 'put ''Im9uQmVmb3JlSGlnaGxpZ2h0aW5nQ29sdW1uSGVhZGVyIixjZSxFZSx7c2VsZWN0aW9uVHlwZTpaYyhvMyx0aGlzKS5zZXR0aW5ncy5zZWxlY3Rpb25UeXBlLGNvbHVtbkN1cnNvcjpaLHNlbGVjdGlvbldpZHRoOmYtZCsxfSk7bnVsbCE9PXFlJiYocWUhPT1jZSYmKEJlPXYuZ2V0Q29sdW1u''@;'; put 'put ''SGVhZGVyKHFlLEVlKSksbChCZSkpfVorPTF9fX1zY2FuUm93c0luSGVhZGVyc1JhbmdlKGwpe2NvbnN0W2EsZCxoLGZdPVpjKG8zLHRoaXMpLmdldENvcm5lcnMoKSx7d3RUYWJsZTp2fT1aYyh2MSx0aGlzKSxNPXYuZ2V0UmVuZGVyZWRSb3dzQ291bnQoKSxEPXYuZ2V0Um93SGVhZGVyc0Nv''@;'; put 'put ''dW50KCk7bGV0IFo9MDtmb3IobGV0IHJlPS12LmdldENvbHVtbkhlYWRlcnNDb3VudCgpO3JlPE07cmUrKyl7Y29uc3QgY2U9di5yb3dGaWx0ZXIucmVuZGVyZWRUb1NvdXJjZShyZSk7aWYoIShjZTxhfHxjZT5oKSl7Zm9yKGxldCBiZT0tRDtiZTwwO2JlKyspe2lmKGJlPGR8fGJlPmYpY29u''@;'; put 'put ''dGludWU7Y29uc3QgRWU9YmUrRDtsZXQgQmU9di5nZXRSb3dIZWFkZXIoY2UsRWUpO2NvbnN0IHFlPVpjKHYxLHRoaXMpLmdldFNldHRpbmcoIm9uQmVmb3JlSGlnaGxpZ2h0aW5nUm93SGVhZGVyIixjZSxFZSx7c2VsZWN0aW9uVHlwZTpaYyhvMyx0aGlzKS5zZXR0aW5ncy5zZWxlY3Rpb25U''@;'; put 'put ''eXBlLHJvd0N1cnNvcjpaLHNlbGVjdGlvbkhlaWdodDpoLWErMX0pO251bGwhPT1xZSYmKHFlIT09Y2UmJihCZT12LmdldFJvd0hlYWRlcihxZSxFZSkpLGwoQmUpKX1aKz0xfX19c2NhbkNlbGxzUmFuZ2UobCl7Y29uc3R7d3RUYWJsZTphfT1aYyh2MSx0aGlzKTtVRShsUCx0aGlzLG50dCku''@;'; put 'put ''Y2FsbCh0aGlzLChkLGgpPT57Y29uc3QgZj1hLmdldENlbGwoWmModjEsdGhpcykuY3JlYXRlQ2VsbENvb3JkcyhkLGgpKSx2PVpjKHYxLHRoaXMpLmdldFNldHRpbmcoIm9uQWZ0ZXJEcmF3U2VsZWN0aW9uIixkLGgsWmMobzMsdGhpcykuc2V0dGluZ3MubGF5ZXJMZXZlbCk7InN0cmluZyI9''@;'; put 'put ''PXR5cGVvZiB2JiZUaShmLHYpLGwoZil9KX1zY2FuUm93c0luQ2VsbHNSYW5nZShsKXtjb25zdFthLCxkXT1aYyhvMyx0aGlzKS5nZXRDb3JuZXJzKCkse3d0VGFibGU6aH09WmModjEsdGhpcyk7VUUobFAsdGhpcyxkM2UpLmNhbGwodGhpcywoZix2KT0+e2lmKGY+PWEmJmY8PWQpe2NvbnN0''@;'; put 'put ''IE09aC5nZXRDZWxsKFpjKHYxLHRoaXMpLmNyZWF0ZUNlbGxDb29yZHMoZix2KSk7bChNKX19KX1zY2FuQ29sdW1uc0luQ2VsbHNSYW5nZShsKXtjb25zdFssYSwsZF09WmMobzMsdGhpcykuZ2V0Q29ybmVycygpLHt3dFRhYmxlOmh9PVpjKHYxLHRoaXMpO1VFKGxQLHRoaXMsZDNlKS5jYWxs''@;'; put 'put ''KHRoaXMsKGYsdik9PntpZih2Pj1hJiZ2PD1kKXtjb25zdCBNPWguZ2V0Q2VsbChaYyh2MSx0aGlzKS5jcmVhdGVDZWxsQ29vcmRzKGYsdikpO2woTSl9fSl9fWZ1bmN0aW9uIG50dChjKXtsZXRbbCxhLGQsaF09WmMobzMsdGhpcykuZ2V0Q29ybmVycygpO2lmKGw8MCYmZDwwfHxhPDAmJmg8''@;'; put 'put ''MClyZXR1cm47Y29uc3R7d3RUYWJsZTpmfT1aYyh2MSx0aGlzKSx2PWwhPT1kfHxhIT09aDtpZihhPU1hdGgubWF4KGEsMCksaD1NYXRoLm1heChoLDApLGw9TWF0aC5tYXgobCwwKSxkPU1hdGgubWF4KGQsMCksdil7aWYoYT1NYXRoLm1heChhLGYuZ2V0Rmlyc3RSZW5kZXJlZENvbHVtbigp''@;'; put 'put ''KSxoPU1hdGgubWluKGgsZi5nZXRMYXN0UmVuZGVyZWRDb2x1bW4oKSksbD1NYXRoLm1heChsLGYuZ2V0Rmlyc3RSZW5kZXJlZFJvdygpKSxkPU1hdGgubWluKGQsZi5nZXRMYXN0UmVuZGVyZWRSb3coKSksaDxhfHxkPGwpcmV0dXJufWVsc2UgaWYoIUVwKGYuZ2V0Q2VsbChaYyh2MSx0aGlz''@;'; put 'put ''KS5jcmVhdGVDZWxsQ29vcmRzKGwsYSkpKSlyZXR1cm47Zm9yKGxldCBNPWw7TTw9ZDtNKz0xKWZvcihsZXQgRD1hO0Q8PWg7RCs9MSljKE0sRCl9ZnVuY3Rpb24gZDNlKGMpe2NvbnN0e3d0VGFibGU6bH09WmModjEsdGhpcyksYT1sLmdldFJlbmRlcmVkUm93c0NvdW50KCksZD1sLmdldFJl''@;'; put 'put ''bmRlcmVkQ29sdW1uc0NvdW50KCk7Zm9yKGxldCBoPTA7aDxhO2grPTEpe2NvbnN0IGY9bC5yb3dGaWx0ZXIucmVuZGVyZWRUb1NvdXJjZShoKTtmb3IobGV0IHY9MDt2PGQ7dis9MSljKGYsbC5jb2x1bW5GaWx0ZXIucmVuZGVyZWRUb1NvdXJjZSh2KSl9fWNvbnN0IGgzZT1jbGFzcyBydHR7''@;'; put 'put ''Y29uc3RydWN0b3IobCxhKXthJiYodGhpcy5ldmVudE1hbmFnZXI9bC5ldmVudE1hbmFnZXIsdGhpcy5pbnN0YW5jZT1sLHRoaXMud290PWwsdGhpcy5zZXR0aW5ncz1hLHRoaXMubW91c2VEb3duPSExLHRoaXMubWFpbj1udWxsLHRoaXMudG9wPW51bGwsdGhpcy5ib3R0b209bnVsbCx0aGlz''@;'; put 'put ''LnN0YXJ0PW51bGwsdGhpcy5lbmQ9bnVsbCx0aGlzLnRvcFN0eWxlPW51bGwsdGhpcy5ib3R0b21TdHlsZT1udWxsLHRoaXMuc3RhcnRTdHlsZT1udWxsLHRoaXMuZW5kU3R5bGU9bnVsbCx0aGlzLmNvcm5lckRlZmF1bHRTdHlsZT12Syh0aGlzLmluc3RhbmNlKSx0aGlzLmNvcm5lckNlbnRl''@;'; put 'put ''clBvaW50T2Zmc2V0PS1NYXRoLmNlaWwocGFyc2VJbnQodGhpcy5jb3JuZXJEZWZhdWx0U3R5bGUud2lkdGgsMTApLzIpLHRoaXMuY29ybmVyPW51bGwsdGhpcy5jb3JuZXJTdHlsZT1udWxsLHRoaXMuY3JlYXRlQm9yZGVycyhhKSx0aGlzLnJlZ2lzdGVyTGlzdGVuZXJzKCkpfXJlZ2lzdGVy''@;'; put 'put ''TGlzdGVuZXJzKCl7Y29uc3QgbD10aGlzLndvdC5yb290RG9jdW1lbnQuYm9keTt0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwsIm1vdXNlZG93biIsKCk9PnRoaXMub25Nb3VzZURvd24oKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLCJtb3VzZXVw''@;'; put 'put ''IiwoKT0+dGhpcy5vbk1vdXNlVXAoKSk7Zm9yKGxldCBhPTAsZD10aGlzLm1haW4uY2hpbGROb2Rlcy5sZW5ndGg7YTxkO2ErKyl0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHRoaXMubWFpbi5jaGlsZE5vZGVzW2FdLCJtb3VzZWVudGVyIixmPT50aGlzLm9uTW91c2VFbnRl''@;'; put 'put ''cihmLHRoaXMubWFpbi5jaGlsZE5vZGVzW2FdKSl9b25Nb3VzZURvd24oKXt0aGlzLm1vdXNlRG93bj0hMH1vbk1vdXNlVXAoKXt0aGlzLm1vdXNlRG93bj0hMX1vbk1vdXNlRW50ZXIobCxhKXtpZighdGhpcy5tb3VzZURvd258fCF0aGlzLndvdC5nZXRTZXR0aW5nKCJoaWRlQm9yZGVyT25N''@;'; put 'put ''b3VzZURvd25PdmVyIikpcmV0dXJuO2wucHJldmVudERlZmF1bHQoKSxCMihsKTtjb25zdCBkPXRoaXMsaD10aGlzLndvdC5yb290RG9jdW1lbnQuYm9keSxmPWEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7YS5zdHlsZS5kaXNwbGF5PSJub25lIix0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVu''@;'; put 'put ''dExpc3RlbmVyKGgsIm1vdXNlbW92ZSIsZnVuY3Rpb24gTShEKXsoZnVuY3Rpb24gdihEKXtpZihELmNsaWVudFk8TWF0aC5mbG9vcihmLnRvcCl8fEQuY2xpZW50WT5NYXRoLmNlaWwoZi50b3ArZi5oZWlnaHQpfHxELmNsaWVudFg8TWF0aC5mbG9vcihmLmxlZnQpfHxELmNsaWVudFg+TWF0''@;'; put 'put ''aC5jZWlsKGYubGVmdCtmLndpZHRoKSlyZXR1cm4hMH0pKEQpJiYoZC5ldmVudE1hbmFnZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcihoLCJtb3VzZW1vdmUiLE0pLGEuc3R5bGUuZGlzcGxheT0iYmxvY2siKX0pfWNyZWF0ZUJvcmRlcnMobCl7Y29uc3R7cm9vdERvY3VtZW50OmF9PXRoaXMud290''@;'; put 'put ''O3RoaXMubWFpbj1hLmNyZWF0ZUVsZW1lbnQoImRpdiIpO2NvbnN0IGQ9WyJ0b3AiLCJzdGFydCIsImJvdHRvbSIsImVuZCIsImNvcm5lciJdO2xldCBoPXRoaXMubWFpbi5zdHlsZTtoLnBvc2l0aW9uPSJhYnNvbHV0ZSIsaC50b3A9MCxoLmxlZnQ9MDtmb3IobGV0IE09MDtNPDU7TSsrKXtj''@;'; put 'put ''b25zdCBEPWRbTV0sWj1hLmNyZWF0ZUVsZW1lbnQoImRpdiIpO1ouY2xhc3NOYW1lPWB3dEJvcmRlciAke3RoaXMuc2V0dGluZ3MuY2xhc3NOYW1lfHwiIn1gLHRoaXMuc2V0dGluZ3NbRF0mJnRoaXMuc2V0dGluZ3NbRF0uaGlkZSYmKFouY2xhc3NOYW1lKz0iIGhpZGRlbiIpLGg9Wi5zdHls''@;'; put 'put ''ZSxoLmJhY2tncm91bmRDb2xvcj10aGlzLnNldHRpbmdzW0RdJiZ0aGlzLnNldHRpbmdzW0RdLmNvbG9yP3RoaXMuc2V0dGluZ3NbRF0uY29sb3I6bC5ib3JkZXIuY29sb3IsaC5oZWlnaHQ9dGhpcy5zZXR0aW5nc1tEXSYmdGhpcy5zZXR0aW5nc1tEXS53aWR0aD9gJHt0aGlzLnNldHRpbmdz''@;'; put 'put ''W0RdLndpZHRofXB4YDpgJHtsLmJvcmRlci53aWR0aH1weGAsaC53aWR0aD10aGlzLnNldHRpbmdzW0RdJiZ0aGlzLnNldHRpbmdzW0RdLndpZHRoP2Ake3RoaXMuc2V0dGluZ3NbRF0ud2lkdGh9cHhgOmAke2wuYm9yZGVyLndpZHRofXB4YCx0aGlzLm1haW4uYXBwZW5kQ2hpbGQoWil9dGhp''@;'; put 'put ''cy50b3A9dGhpcy5tYWluLmNoaWxkTm9kZXNbMF0sdGhpcy5zdGFydD10aGlzLm1haW4uY2hpbGROb2Rlc1sxXSx0aGlzLmJvdHRvbT10aGlzLm1haW4uY2hpbGROb2Rlc1syXSx0aGlzLmVuZD10aGlzLm1haW4uY2hpbGROb2Rlc1szXSx0aGlzLnRvcFN0eWxlPXRoaXMudG9wLnN0eWxlLHRo''@;'; put 'put ''aXMuc3RhcnRTdHlsZT10aGlzLnN0YXJ0LnN0eWxlLHRoaXMuYm90dG9tU3R5bGU9dGhpcy5ib3R0b20uc3R5bGUsdGhpcy5lbmRTdHlsZT10aGlzLmVuZC5zdHlsZSx0aGlzLmNvcm5lcj10aGlzLm1haW4uY2hpbGROb2Rlc1s0XSx0aGlzLmNvcm5lci5jbGFzc05hbWUrPSIgY29ybmVyIix0''@;'; put 'put ''aGlzLmNvcm5lclN0eWxlPXRoaXMuY29ybmVyLnN0eWxlLHRoaXMuY29ybmVyU3R5bGUud2lkdGg9YCR7dGhpcy5jb3JuZXJEZWZhdWx0U3R5bGUud2lkdGh9cHhgLHRoaXMuY29ybmVyU3R5bGUuaGVpZ2h0PWAke3RoaXMuY29ybmVyRGVmYXVsdFN0eWxlLmhlaWdodH1weGAsdGhpcy5jb3Ju''@;'; put 'put ''ZXJTdHlsZS5ib3JkZXI9W2Ake3RoaXMuY29ybmVyRGVmYXVsdFN0eWxlLmJvcmRlcldpZHRofXB4YCx0aGlzLmNvcm5lckRlZmF1bHRTdHlsZS5ib3JkZXJTdHlsZSx0aGlzLmNvcm5lckRlZmF1bHRTdHlsZS5ib3JkZXJDb2xvcl0uam9pbigiICIpLEFwKCkmJnRoaXMuaW5zdGFuY2UuZ2V0''@;'; put 'put ''U2V0dGluZygiaXNEYXRhVmlld0luc3RhbmNlIikmJnRoaXMuY3JlYXRlTXVsdGlwbGVTZWxlY3RvckhhbmRsZXMoKSx0aGlzLmRpc2FwcGVhcigpO2NvbnN0e3d0VGFibGU6Zn09dGhpcy53b3Q7bGV0IHY9Zi5ib3JkZXJzSG9sZGVyO3Z8fCh2PWEuY3JlYXRlRWxlbWVudCgiZGl2Iiksdi5j''@;'; put 'put ''bGFzc05hbWU9Imh0Qm9yZGVycyIsZi5ib3JkZXJzSG9sZGVyPXYsZi5zcHJlYWRlci5hcHBlbmRDaGlsZCh2KSksdi5hcHBlbmRDaGlsZCh0aGlzLm1haW4pfWNyZWF0ZU11bHRpcGxlU2VsZWN0b3JIYW5kbGVzKCl7Y29uc3R7cm9vdERvY3VtZW50Omwsc3R5bGVzSGFuZGxlcjphfT10aGlz''@;'; put 'put ''LndvdCxkPWEuZ2V0Q1NTVmFyaWFibGVWYWx1ZSgiY2VsbC1tb2JpbGUtaGFuZGxlLXNpemUiKSxoPWEuZ2V0Q1NTVmFyaWFibGVWYWx1ZSgiY2VsbC1tb2JpbGUtaGFuZGxlLWJvcmRlci1yYWRpdXMiKSxmPWEuZ2V0Q1NTVmFyaWFibGVWYWx1ZSgiY2VsbC1tb2JpbGUtaGFuZGxlLWJhY2tn''@;'; put 'put ''cm91bmQtY29sb3IiKSx2PWEuZ2V0Q1NTVmFyaWFibGVWYWx1ZSgiY2VsbC1tb2JpbGUtaGFuZGxlLWJvcmRlci13aWR0aCIpLE09YS5nZXRDU1NWYXJpYWJsZVZhbHVlKCJjZWxsLW1vYmlsZS1oYW5kbGUtYm9yZGVyLWNvbG9yIik7dGhpcy5zZWxlY3Rpb25IYW5kbGVzPXt0b3A6bC5jcmVh''@;'; put 'put ''dGVFbGVtZW50KCJESVYiKSx0b3BIaXRBcmVhOmwuY3JlYXRlRWxlbWVudCgiRElWIiksYm90dG9tOmwuY3JlYXRlRWxlbWVudCgiRElWIiksYm90dG9tSGl0QXJlYTpsLmNyZWF0ZUVsZW1lbnQoIkRJViIpfSx0aGlzLnNlbGVjdGlvbkhhbmRsZXMudG9wLmNsYXNzTmFtZT0idG9wU2VsZWN0''@;'; put 'put ''aW9uSGFuZGxlIHRvcExlZnRTZWxlY3Rpb25IYW5kbGUiLHRoaXMuc2VsZWN0aW9uSGFuZGxlcy50b3BIaXRBcmVhLmNsYXNzTmFtZT0idG9wU2VsZWN0aW9uSGFuZGxlLUhpdEFyZWEgdG9wTGVmdFNlbGVjdGlvbkhhbmRsZS1IaXRBcmVhIix0aGlzLnNlbGVjdGlvbkhhbmRsZXMuYm90dG9t''@;'; put 'put ''LmNsYXNzTmFtZT0iYm90dG9tU2VsZWN0aW9uSGFuZGxlIGJvdHRvbVJpZ2h0U2VsZWN0aW9uSGFuZGxlIix0aGlzLnNlbGVjdGlvbkhhbmRsZXMuYm90dG9tSGl0QXJlYS5jbGFzc05hbWU9ImJvdHRvbVNlbGVjdGlvbkhhbmRsZS1IaXRBcmVhIGJvdHRvbVJpZ2h0U2VsZWN0aW9uSGFuZGxl''@;'; put 'put ''LUhpdEFyZWEiLHRoaXMuc2VsZWN0aW9uSGFuZGxlcy5zdHlsZXM9e3RvcDp0aGlzLnNlbGVjdGlvbkhhbmRsZXMudG9wLnN0eWxlLHRvcEhpdEFyZWE6dGhpcy5zZWxlY3Rpb25IYW5kbGVzLnRvcEhpdEFyZWEuc3R5bGUsYm90dG9tOnRoaXMuc2VsZWN0aW9uSGFuZGxlcy5ib3R0b20uc3R5''@;'; put 'put ''bGUsYm90dG9tSGl0QXJlYTp0aGlzLnNlbGVjdGlvbkhhbmRsZXMuYm90dG9tSGl0QXJlYS5zdHlsZX0sWG8oe3Bvc2l0aW9uOiJhYnNvbHV0ZSIsaGVpZ2h0OiI0MHB4Iix3aWR0aDoiNDBweCIsImJvcmRlci1yYWRpdXMiOmAke3BhcnNlSW50KDQwLzEuNSwxMCl9cHhgfSwoYmUsRWUpPT57''@;'; put 'put ''dGhpcy5zZWxlY3Rpb25IYW5kbGVzLnN0eWxlcy5ib3R0b21IaXRBcmVhW0VlXT1iZSx0aGlzLnNlbGVjdGlvbkhhbmRsZXMuc3R5bGVzLnRvcEhpdEFyZWFbRWVdPWJlfSksWG8oYS5pc0NsYXNzaWNUaGVtZSgpP3twb3NpdGlvbjoiYWJzb2x1dGUiLGhlaWdodDoiMTBweCIsd2lkdGg6IjEw''@;'; put 'put ''cHgiLCJib3JkZXItcmFkaXVzIjpgJHtwYXJzZUludCgxMC8xLjUsMTApfXB4YCxiYWNrZ3JvdW5kOiIjRjVGNUZGIixib3JkZXI6IjFweCBzb2xpZCAjNDI4NWM4In06e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsaGVpZ2h0OmAke2R9cHhgLHdpZHRoOmAke2R9cHhgLCJib3JkZXItcmFkaXVzIjpg''@;'; put 'put ''JHtofXB4YCxiYWNrZ3JvdW5kOmAke2Z9YCxib3JkZXI6YCR7dn1weCBzb2xpZCAke019YH0sKGJlLEVlKT0+e3RoaXMuc2VsZWN0aW9uSGFuZGxlcy5zdHlsZXMuYm90dG9tW0VlXT1iZSx0aGlzLnNlbGVjdGlvbkhhbmRsZXMuc3R5bGVzLnRvcFtFZV09YmV9KSx0aGlzLm1haW4uYXBwZW5k''@;'; put 'put ''Q2hpbGQodGhpcy5zZWxlY3Rpb25IYW5kbGVzLnRvcCksdGhpcy5tYWluLmFwcGVuZENoaWxkKHRoaXMuc2VsZWN0aW9uSGFuZGxlcy5ib3R0b20pLHRoaXMubWFpbi5hcHBlbmRDaGlsZCh0aGlzLnNlbGVjdGlvbkhhbmRsZXMudG9wSGl0QXJlYSksdGhpcy5tYWluLmFwcGVuZENoaWxkKHRo''@;'; put 'put ''aXMuc2VsZWN0aW9uSGFuZGxlcy5ib3R0b21IaXRBcmVhKX1pc1BhcnRSYW5nZShsLGEpe2NvbnN0IGQ9dGhpcy53b3Quc2VsZWN0aW9uTWFuYWdlci5nZXRBcmVhU2VsZWN0aW9uKCk7cmV0dXJuISghZC5jZWxsUmFuZ2V8fGw9PT1kLmNlbGxSYW5nZS50by5yb3cmJmE9PT1kLmNlbGxSYW5n''@;'; put 'put ''ZS50by5jb2wpfXVwZGF0ZU11bHRpcGxlU2VsZWN0aW9uSGFuZGxlc1Bvc2l0aW9uKGwsYSxkLGgsZix2KXtjb25zdCBEPXRoaXMud290Lnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicnRsTW9kZSIpPyJyaWdodCI6ImxlZnQiLHt0b3A6Wix0b3BIaXRBcmVhOnJlLGJvdHRvbTpjZSxib3R0b21I''@;'; put 'put ''aXRBcmVhOmJlfT10aGlzLnNlbGVjdGlvbkhhbmRsZXMuc3R5bGVzLEVlPXBhcnNlSW50KFouYm9yZGVyV2lkdGgsMTApLEJlPXBhcnNlSW50KFoud2lkdGgsMTApLHFlPXBhcnNlSW50KHJlLndpZHRoLDEwKSxydD10aGlzLndvdC53dFRhYmxlLmdldFdpZHRoKCkscHQ9dGhpcy53b3Qud3RU''@;'; put 'put ''YWJsZS5nZXRIZWlnaHQoKTtaLnRvcD1gJHtwYXJzZUludChkLUJlLTEsMTApfXB4YCxaW0RdPWAke3BhcnNlSW50KGgtQmUtMSwxMCl9cHhgLHJlLnRvcD1gJHtwYXJzZUludChkLXFlLzQqMywxMCl9cHhgLHJlW0RdPWAke3BhcnNlSW50KGgtcWUvNCozLDEwKX1weGA7Y29uc3QgZHQ9TWF0''@;'; put 'put ''aC5taW4ocGFyc2VJbnQoaCtmLDEwKSxydC1CZS0yKkVlKSxKdD1NYXRoLm1pbihwYXJzZUludChoK2YtcWUvNCwxMCkscnQtcWUtMipFZSk7Y2VbRF09YCR7ZHR9cHhgLGJlW0RdPWAke0p0fXB4YDtjb25zdCB2bj1NYXRoLm1pbihwYXJzZUludChkK3YsMTApLHB0LUJlLTIqRWUpLENuPU1h''@;'; put 'put ''dGgubWluKHBhcnNlSW50KGQrdi1xZS80LDEwKSxwdC1xZS0yKkVlKTtjZS50b3A9YCR7dm59cHhgLGJlLnRvcD1gJHtDbn1weGAsdGhpcy5zZXR0aW5ncy5ib3JkZXIuY29ybmVyVmlzaWJsZSYmdGhpcy5zZXR0aW5ncy5ib3JkZXIuY29ybmVyVmlzaWJsZSgpPyhaLmRpc3BsYXk9ImJsb2Nr''@;'; put 'put ''IixyZS5kaXNwbGF5PSJibG9jayIsdGhpcy5pc1BhcnRSYW5nZShsLGEpPyhjZS5kaXNwbGF5PSJub25lIixiZS5kaXNwbGF5PSJub25lIik6KGNlLmRpc3BsYXk9ImJsb2NrIixiZS5kaXNwbGF5PSJibG9jayIpKTooWi5kaXNwbGF5PSJub25lIixjZS5kaXNwbGF5PSJub25lIixyZS5kaXNw''@;'; put 'put ''bGF5PSJub25lIixiZS5kaXNwbGF5PSJub25lIiksbD09PXRoaXMud290Lnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRSb3dzVG9wIil8fGE9PT10aGlzLndvdC53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkQ29sdW1uc1N0YXJ0Iik/KFouekluZGV4PSI5OTk5IixyZS56SW5kZXg9''@;'; put 'put ''Ijk5OTkiKTooWi56SW5kZXg9IiIscmUuekluZGV4PSIiKX1hcHBlYXIobCl7aWYodGhpcy5kaXNhYmxlZClyZXR1cm47bGV0W2EsZCxoLGZdPWw7aWYoYTwwJiZoPDB8fGQ8MCYmZjwwKXJldHVybiB2b2lkIHRoaXMuZGlzYXBwZWFyKCk7Y29uc3R7d3RUYWJsZTp2LHJvb3REb2N1bWVudDpN''@;'; put 'put ''LHJvb3RXaW5kb3c6RH09dGhpcy53b3QsWj1hIT09aHx8ZCE9PWYscmU9di5nZXRGaXJzdFJlbmRlcmVkUm93KCksY2U9di5nZXRMYXN0UmVuZGVyZWRSb3coKSxiZT12LmdldEZpcnN0UmVuZGVyZWRDb2x1bW4oKSxFZT12LmdldExhc3RSZW5kZXJlZENvbHVtbigpO2lmKGJlPDAmJkVlPDB8''@;'; put 'put ''fHJlPDAmJmNlPDApcmV0dXJuIHZvaWQgdGhpcy5kaXNhcHBlYXIoKTtsZXQgQmU7aWYoWil7aWYoZD1NYXRoLm1heChkLGJlKSxmPU1hdGgubWluKGYsRWUpLGE9TWF0aC5tYXgoYSxyZSksaD1NYXRoLm1pbihoLGNlKSxmPGR8fGg8YSlyZXR1cm4gdm9pZCB0aGlzLmRpc2FwcGVhcigpO0Jl''@;'; put 'put ''PXYuZ2V0Q2VsbCh0aGlzLndvdC5jcmVhdGVDZWxsQ29vcmRzKGEsZCkpfWVsc2UgaWYoQmU9di5nZXRDZWxsKHRoaXMud290LmNyZWF0ZUNlbGxDb29yZHMoYSxkKSksIUVwKEJlKSlyZXR1cm4gdm9pZCB0aGlzLmRpc2FwcGVhcigpO2NvbnN0IHFlPVo/di5nZXRDZWxsKHRoaXMud290LmNy''@;'; put 'put ''ZWF0ZUNlbGxDb29yZHMoaCxmKSk6QmUscnQ9VTAoQmUpLHB0PVo/VTAocWUpOnJ0LGR0PVUwKHYuVEFCTEUpLEp0PXJ0LnRvcCx2bj1ydC5sZWZ0LENuPXRoaXMud290Lnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicnRsTW9kZSIpO2xldCB0bj0wLE1uPTA7aWYoQ24pe2NvbnN0IERyPXN1KHYu''@;'; put 'put ''VEFCTEUpLCRyPXN1KEJlKTtNbj12biskci1wdC5sZWZ0LHRuPUQuaW5uZXJXaWR0aC12bi0kci0oRC5pbm5lcldpZHRoLWR0LmxlZnQtRHIpLTF9ZWxzZSBNbj1wdC5sZWZ0K3N1KHFlKS12bix0bj12bi1kdC5sZWZ0LTE7aWYodGhpcy5pc0VudGlyZUNvbHVtblNlbGVjdGVkKGEsaCkpe2Nv''@;'; put 'put ''bnN0ICRyPXRoaXMuZ2V0RGltZW5zaW9uc0Zyb21IZWFkZXIoImNvbHVtbnMiLGQsZixhLGR0KTtsZXQgd2k9bnVsbDskciYmKFt3aSx0bixNbl09JHIpLHdpJiYoQmU9d2kpfWxldCBDcj1KdC1kdC50b3AtMSxHcj1wdC50b3AreHUocWUpLUp0O2lmKHRoaXMuaXNFbnRpcmVSb3dTZWxlY3Rl''@;'; put 'put ''ZChkLGYpKXtjb25zdCAkcj10aGlzLmdldERpbWVuc2lvbnNGcm9tSGVhZGVyKCJyb3dzIixhLGgsZCxkdCk7bGV0IHdpPW51bGw7JHImJihbd2ksQ3IsR3JdPSRyKSx3aSYmKEJlPXdpKX1jb25zdCBtcj1ELmdldENvbXB1dGVkU3R5bGUoQmUpO3BhcnNlSW50KG1yLmJvcmRlclRvcFdpZHRo''@;'; put 'put ''LDEwKT4wJiYoQ3IrPTEsR3I9R3I+MD9Hci0xOjApLHBhcnNlSW50KG1yW0NuPyJib3JkZXJSaWdodFdpZHRoIjoiYm9yZGVyTGVmdFdpZHRoIl0sMTApPjAmJih0bis9MSxNbj1Nbj4wP01uLTE6MCk7Y29uc3QgR249Q24/InJpZ2h0IjoibGVmdCI7dGhpcy50b3BTdHlsZS50b3A9YCR7Q3J9''@;'; put 'put ''cHhgLHRoaXMudG9wU3R5bGVbR25dPWAke3RufXB4YCx0aGlzLnRvcFN0eWxlLndpZHRoPWAke01ufXB4YCx0aGlzLnRvcFN0eWxlLmRpc3BsYXk9ImJsb2NrIix0aGlzLnN0YXJ0U3R5bGUudG9wPWAke0NyfXB4YCx0aGlzLnN0YXJ0U3R5bGVbR25dPWAke3RufXB4YCx0aGlzLnN0YXJ0U3R5''@;'; put 'put ''bGUuaGVpZ2h0PWAke0dyfXB4YCx0aGlzLnN0YXJ0U3R5bGUuZGlzcGxheT0iYmxvY2siO2NvbnN0IGFpPU1hdGguZmxvb3IodGhpcy5zZXR0aW5ncy5ib3JkZXIud2lkdGgvMik7dGhpcy5ib3R0b21TdHlsZS50b3A9Q3IrR3ItYWkrInB4Iix0aGlzLmJvdHRvbVN0eWxlW0duXT1gJHt0bn1w''@;'; put 'put ''eGAsdGhpcy5ib3R0b21TdHlsZS53aWR0aD1gJHtNbn1weGAsdGhpcy5ib3R0b21TdHlsZS5kaXNwbGF5PSJibG9jayIsdGhpcy5lbmRTdHlsZS50b3A9YCR7Q3J9cHhgLHRoaXMuZW5kU3R5bGVbR25dPXRuK01uLWFpKyJweCIsdGhpcy5lbmRTdHlsZS5oZWlnaHQ9YCR7R3IrMX1weGAsdGhp''@;'; put 'put ''cy5lbmRTdHlsZS5kaXNwbGF5PSJibG9jayI7bGV0IF9pPXRoaXMuc2V0dGluZ3MuYm9yZGVyLmNvcm5lclZpc2libGU7X2k9ImZ1bmN0aW9uIj09dHlwZW9mIF9pP19pKHRoaXMuc2V0dGluZ3MubGF5ZXJMZXZlbCk6X2k7Y29uc3QgT249dGhpcy53b3QuZ2V0U2V0dGluZygib25Nb2RpZnlH''@;'; put 'put ''ZXRDZWxsQ29vcmRzIixoLGYsITEsInJlbmRlciIpO2xldFt6cixKbl09W2gsZl07aWYoT24mJkFycmF5LmlzQXJyYXkoT24pJiYoWywsenIsSm5dPU9uKSxBcCgpfHwhX2l8fHRoaXMuaXNQYXJ0UmFuZ2UoenIsSm4pKXRoaXMuY29ybmVyU3R5bGUuZGlzcGxheT0ibm9uZSI7ZWxzZXt0aGlz''@;'; put 'put ''LmNvcm5lclN0eWxlLnRvcD1DcitHcit0aGlzLmNvcm5lckNlbnRlclBvaW50T2Zmc2V0LXRoaXMuY29ybmVyRGVmYXVsdFN0eWxlLmJvcmRlcldpZHRoKyJweCIsdGhpcy5jb3JuZXJTdHlsZVtHbl09dG4rTW4rdGhpcy5jb3JuZXJDZW50ZXJQb2ludE9mZnNldC10aGlzLmNvcm5lckRlZmF1''@;'; put 'put ''bHRTdHlsZS5ib3JkZXJXaWR0aCsicHgiLHRoaXMuY29ybmVyU3R5bGUuYm9yZGVyUmlnaHRXaWR0aD1gJHt0aGlzLmNvcm5lckRlZmF1bHRTdHlsZS5ib3JkZXJXaWR0aH1weGAsdGhpcy5jb3JuZXJTdHlsZS5ib3JkZXJMZWZ0V2lkdGg9YCR7dGhpcy5jb3JuZXJEZWZhdWx0U3R5bGUuYm9y''@;'; put 'put ''ZGVyV2lkdGh9cHhgLHRoaXMuY29ybmVyU3R5bGUuYm9yZGVyQm90dG9tV2lkdGg9YCR7dGhpcy5jb3JuZXJEZWZhdWx0U3R5bGUuYm9yZGVyV2lkdGh9cHhgLHRoaXMuY29ybmVyU3R5bGUud2lkdGg9dGhpcy5jb3JuZXJEZWZhdWx0U3R5bGUud2lkdGgsdGhpcy5jb3JuZXJTdHlsZS5kaXNw''@;'; put 'put ''bGF5PSJub25lIjtsZXQgRHI9YV8odi5UQUJMRSk7Y29uc3QgJHI9RHI9PT1EOyRyJiYoRHI9TS5kb2N1bWVudEVsZW1lbnQpO2NvbnN0IHdpPXBhcnNlSW50KHRoaXMuY29ybmVyRGVmYXVsdFN0eWxlLmJvcmRlcldpZHRoLDEwKS0xLGVhPU1hdGguY2VpbChwYXJzZUludCh0aGlzLmNvcm5l''@;'; put 'put ''ckRlZmF1bHRTdHlsZS53aWR0aCwxMCkvMiksZmE9TWF0aC5jZWlsKHBhcnNlSW50KHRoaXMuY29ybmVyRGVmYXVsdFN0eWxlLmhlaWdodCwxMCkvMik7aWYoZj09PXRoaXMud290LmdldFNldHRpbmcoInRvdGFsQ29sdW1ucyIpLTEpe2NvbnN0IHZ0PSRyP3FlLmdldEJvdW5kaW5nQ2xpZW50''@;'; put 'put ''UmVjdCgpLmxlZnQ6cWUub2Zmc2V0TGVmdDtsZXQgTnQ9ITEsSHQ9MDtDbj8oSHQ9dnQtcGFyc2VJbnQodGhpcy5jb3JuZXJEZWZhdWx0U3R5bGUud2lkdGgsMTApLzIsTnQ9SHQ8MCk6KEh0PXZ0K3N1KHFlKStwYXJzZUludCh0aGlzLmNvcm5lckRlZmF1bHRTdHlsZS53aWR0aCwxMCkvMixO''@;'; put 'put ''dD1IdD49QyQoRHIpKSxOdCYmKHRoaXMuY29ybmVyU3R5bGVbR25dPWAke01hdGguZmxvb3IodG4rTW4rdGhpcy5jb3JuZXJDZW50ZXJQb2ludE9mZnNldC1lYS13aSl9cHhgLHRoaXMuY29ybmVyU3R5bGVbQ24/ImJvcmRlckxlZnRXaWR0aCI6ImJvcmRlclJpZ2h0V2lkdGgiXT0wKX1pZiho''@;'; put 'put ''PT09dGhpcy53b3QuZ2V0U2V0dGluZygidG90YWxSb3dzIiktMSl7Y29uc3QgSHQ9KCRyP3FlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcDpxZS5vZmZzZXRUb3ApK3h1KHFlKStwYXJzZUludCh0aGlzLmNvcm5lckRlZmF1bHRTdHlsZS5oZWlnaHQsMTApLzI+PW9fKERyKSxIbj10aGlz''@;'; put 'put ''LndvdC5zdHlsZXNIYW5kbGVyLmlzQ2xhc3NpY1RoZW1lKCk7aWYoSHQpe2NvbnN0IHRyPU1hdGguZmxvb3IoQ3IrR3IrdGhpcy5jb3JuZXJDZW50ZXJQb2ludE9mZnNldC1mYS13aSk7SG4/KHRoaXMuY29ybmVyU3R5bGUudG9wPWAke3RyfXB4YCx0aGlzLmNvcm5lclN0eWxlLmJvcmRlckJv''@;'; put 'put ''dHRvbVdpZHRoPTApOnRoaXMuY29ybmVyU3R5bGUudG9wPXRyLTErInB4In19dGhpcy5jb3JuZXJTdHlsZS5kaXNwbGF5PSJibG9jayJ9QXAoKSYmdGhpcy5pbnN0YW5jZS5nZXRTZXR0aW5nKCJpc0RhdGFWaWV3SW5zdGFuY2UiKSYmdGhpcy51cGRhdGVNdWx0aXBsZVNlbGVjdGlvbkhhbmRs''@;'; put 'put ''ZXNQb3NpdGlvbihoLGYsQ3IsdG4sTW4sR3IpfWlzRW50aXJlQ29sdW1uU2VsZWN0ZWQobCxhKXtyZXR1cm4gbD09PXRoaXMud290Lnd0VGFibGUuZ2V0Rmlyc3RSZW5kZXJlZFJvdygpJiZhPT09dGhpcy53b3Qud3RUYWJsZS5nZXRMYXN0UmVuZGVyZWRSb3coKX1pc0VudGlyZVJvd1NlbGVj''@;'; put 'put ''dGVkKGwsYSl7cmV0dXJuIGw9PT10aGlzLndvdC53dFRhYmxlLmdldEZpcnN0UmVuZGVyZWRDb2x1bW4oKSYmYT09PXRoaXMud290Lnd0VGFibGUuZ2V0TGFzdFJlbmRlcmVkQ29sdW1uKCl9Z2V0RGltZW5zaW9uc0Zyb21IZWFkZXIobCxhLGQsaCxmKXtjb25zdHt3dFRhYmxlOnZ9PXRoaXMu''@;'; put 'put ''d290LE09di53dFJvb3RFbGVtZW50LnBhcmVudE5vZGU7bGV0IEQ9bnVsbCxaPW51bGwscmU9bnVsbCxjZT1udWxsLGJlPW51bGwsRWU9bnVsbCxCZT1udWxsLHFlPW51bGw7c3dpdGNoKGwpe2Nhc2Uicm93cyI6RD1mdW5jdGlvbigpe3JldHVybiB2LmdldFJvd0hlYWRlciguLi5hcmd1bWVu''@;'; put 'put ''dHMpfSxaPWZ1bmN0aW9uKCl7cmV0dXJuIHh1KC4uLmFyZ3VtZW50cyl9LHJlPSJodF9fc2VsZWN0aW9uLS1yb3dzIixFZT0idG9wIjticmVhaztjYXNlImNvbHVtbnMiOkQ9ZnVuY3Rpb24oKXtyZXR1cm4gdi5nZXRDb2x1bW5IZWFkZXIoLi4uYXJndW1lbnRzKX0sWj1mdW5jdGlvbigpe3Jl''@;'; put 'put ''dHVybiBzdSguLi5hcmd1bWVudHMpfSxyZT0iaHRfX3NlbGVjdGlvbi0tY29sdW1ucyIsRWU9ImxlZnQifWlmKE0uY2xhc3NMaXN0LmNvbnRhaW5zKHJlKSl7Y29uc3QgcnQ9dGhpcy53b3QuZ2V0U2V0dGluZygiY29sdW1uSGVhZGVycyIpLmxlbmd0aDtpZihCZT1EKGEscnQtaCkscWU9RChk''@;'; put 'put ''LHJ0LWgpLCFCZXx8IXFlKXJldHVybiExO2NvbnN0IHB0PVUwKEJlKSxkdD1VMChxZSk7cmV0dXJuIEJlJiZxZSYmKGNlPXB0W0VlXS1mW0VlXS0xLGJlPWR0W0VlXStaKHFlKS1wdFtFZV0pLFtCZSxjZSxiZV19cmV0dXJuITF9Y2hhbmdlQm9yZGVyU3R5bGUobCxhKXtjb25zdCBkPXRoaXNb''@;'; put 'put ''bF0uc3R5bGUsaD1hW2xdOyFofHxoLmhpZGU/VGkodGhpc1tsXSwiaGlkZGVuIik6KHBvKHRoaXNbbF0sImhpZGRlbiIpJiZsbyh0aGlzW2xdLCJoaWRkZW4iKSxkLmJhY2tncm91bmRDb2xvcj1oLmNvbG9yLCgidG9wIj09PWx8fCJib3R0b20iPT09bCkmJihkLmhlaWdodD1gJHtoLndpZHRo''@;'; put 'put ''fXB4YCksKCJzdGFydCI9PT1sfHwiZW5kIj09PWwpJiYoZC53aWR0aD1gJHtoLndpZHRofXB4YCkpfWNoYW5nZUJvcmRlclRvRGVmYXVsdFN0eWxlKGwpe2NvbnN0IGQ9dGhpc1tsXS5zdHlsZTtkLmJhY2tncm91bmRDb2xvcj0iIzAwMCIsZC53aWR0aD0iMXB4IixkLmhlaWdodD0iMXB4In10''@;'; put 'put ''b2dnbGVIaWRkZW5DbGFzcyhsLGEpe3RoaXMuY2hhbmdlQm9yZGVyVG9EZWZhdWx0U3R5bGUobCksYT9UaSh0aGlzW2xdLCJoaWRkZW4iKTpsbyh0aGlzW2xdLCJoaWRkZW4iKX1kaXNhcHBlYXIoKXt0aGlzLnRvcFN0eWxlLmRpc3BsYXk9Im5vbmUiLHRoaXMuYm90dG9tU3R5bGUuZGlzcGxh''@;'; put 'put ''eT0ibm9uZSIsdGhpcy5zdGFydFN0eWxlLmRpc3BsYXk9Im5vbmUiLHRoaXMuZW5kU3R5bGUuZGlzcGxheT0ibm9uZSIsdGhpcy5jb3JuZXJTdHlsZS5kaXNwbGF5PSJub25lIixBcCgpJiZ0aGlzLmluc3RhbmNlLmdldFNldHRpbmcoImlzRGF0YVZpZXdJbnN0YW5jZSIpJiYodGhpcy5zZWxl''@;'; put 'put ''Y3Rpb25IYW5kbGVzLnN0eWxlcy50b3AuZGlzcGxheT0ibm9uZSIsdGhpcy5zZWxlY3Rpb25IYW5kbGVzLnN0eWxlcy50b3BIaXRBcmVhLmRpc3BsYXk9Im5vbmUiLHRoaXMuc2VsZWN0aW9uSGFuZGxlcy5zdHlsZXMuYm90dG9tLmRpc3BsYXk9Im5vbmUiLHRoaXMuc2VsZWN0aW9uSGFuZGxl''@;'; put 'put ''cy5zdHlsZXMuYm90dG9tSGl0QXJlYS5kaXNwbGF5PSJub25lIil9ZGVzdHJveSgpe3RoaXMuZXZlbnRNYW5hZ2VyLmRlc3Ryb3lXaXRoT3duRXZlbnRzT25seSgpLHRoaXMubWFpbi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMubWFpbil9fTtmdW5jdGlvbiB3XyhjLGwsYSl7ZjNlKGMs''@;'; put 'put ''bCksbC5zZXQoYyxhKX1mdW5jdGlvbiBmM2UoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIGFzKGMsbCl7cmV0dXJuIGMuZ2V0KE1LKGMs''@;'; put 'put ''bCkpfWZ1bmN0aW9uIHAzZShjLGwsYSl7cmV0dXJuIGMuc2V0KE1LKGMsbCksYSksYX1mdW5jdGlvbiBNSyhjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0''@;'; put 'put ''ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIGIxPW5ldyBXZWFrTWFwLFZkPW5ldyBXZWFrTWFwLHhLPW5ldyBXZWFrTWFwLFpFPW5ldyBXZWFrTWFwLEVLPW5ldyBXZWFrTWFwLEo3PW5ldyBXZWFrTWFwLGczZT1uZXcgV2Vha1NldDtjbGFzcyBhdHR7Y29u''@;'; put 'put ''c3RydWN0b3IobCl7KGZ1bmN0aW9uIGl0dChjLGwpe2YzZShjLGwpLGwuYWRkKGMpfSkodGhpcyxnM2UpLHdfKHRoaXMsYjEsdm9pZCAwKSx3Xyh0aGlzLFZkLHZvaWQgMCksd18odGhpcyx4SyxuZXcgdHR0KSx3Xyh0aGlzLFpFLG5ldyBXZWFrTWFwKSx3Xyh0aGlzLEVLLG5ldyBXZWFrU2V0''@;'; put 'put ''KSx3Xyh0aGlzLEo3LG5ldyBNYXApLHAzZShWZCx0aGlzLGwpfXNldEFjdGl2ZU92ZXJsYXkobCl7cmV0dXJuIHAzZShiMSx0aGlzLGwpLGFzKHhLLHRoaXMpLnNldEFjdGl2ZU92ZXJsYXkoYXMoYjEsdGhpcykpLGFzKFpFLHRoaXMpLmhhcyhhcyhiMSx0aGlzKSl8fGFzKFpFLHRoaXMpLnNl''@;'; put 'put ''dChhcyhiMSx0aGlzKSxuZXcgU2V0KSx0aGlzfWdldEZvY3VzU2VsZWN0aW9uKCl7cmV0dXJuIG51bGwhPT1hcyhWZCx0aGlzKT9hcyhWZCx0aGlzKS5nZXRGb2N1cygpOm51bGx9Z2V0QXJlYVNlbGVjdGlvbigpe3JldHVybiBudWxsIT09YXMoVmQsdGhpcyk/YXMoVmQsdGhpcykuY3JlYXRl''@;'; put 'put ''TGF5ZXJlZEFyZWEoKTpudWxsfWdldEJvcmRlckluc3RhbmNlKGwpe2lmKCFsLnNldHRpbmdzLmJvcmRlcilyZXR1cm4gbnVsbDtpZihhcyhKNyx0aGlzKS5oYXMobCkpe2NvbnN0IGQ9YXMoSjcsdGhpcykuZ2V0KGwpO2lmKGQuaGFzKGFzKGIxLHRoaXMpKSlyZXR1cm4gZC5nZXQoYXMoYjEs''@;'; put 'put ''dGhpcykpO2NvbnN0IGg9bmV3IGgzZShhcyhiMSx0aGlzKSxsLnNldHRpbmdzKTtyZXR1cm4gZC5zZXQoYXMoYjEsdGhpcyksaCksaH1jb25zdCBhPW5ldyBoM2UoYXMoYjEsdGhpcyksbC5zZXR0aW5ncyk7cmV0dXJuIGFzKEo3LHRoaXMpLnNldChsLG5ldyBNYXAoW1thcyhiMSx0aGlzKSxh''@;'; put 'put ''XV0pKSxhfWdldEJvcmRlckluc3RhbmNlcyhsKXt2YXIgYSxkO3JldHVybiBBcnJheS5mcm9tKG51bGwhPT0oYT1udWxsPT09KGQ9YXMoSjcsdGhpcykuZ2V0KGwpKXx8dm9pZCAwPT09ZD92b2lkIDA6ZC52YWx1ZXMoKSkmJnZvaWQgMCE9PWE/YTpbXSl9ZGVzdHJveUJvcmRlcnMobCl7YXMo''@;'; put 'put ''SjcsdGhpcykuZ2V0KGwpLmZvckVhY2goYT0+YS5kZXN0cm95KCkpLGFzKEo3LHRoaXMpLmRlbGV0ZShsKX1yZW5kZXIobCl7aWYobnVsbD09PWFzKFZkLHRoaXMpKXJldHVybjtsJiZNSyhnM2UsdGhpcyxvdHQpLmNhbGwodGhpcyk7Y29uc3QgYT1BcnJheS5mcm9tKGFzKFZkLHRoaXMpKSxk''@;'; put 'put ''PW5ldyBNYXAsaD1uZXcgTWFwO2ZvcihsZXQgZj0wO2Y8YS5sZW5ndGg7ZisrKXtjb25zdCB2PWFbZl0se2NsYXNzTmFtZTpNLGhlYWRlckF0dHJpYnV0ZXM6RCxjcmVhdGVMYXllcnM6WixzZWxlY3Rpb25UeXBlOnJlfT12LnNldHRpbmdzO2FzKEVLLHRoaXMpLmhhcyh2KXx8KGFzKEVLLHRo''@;'; put 'put ''aXMpLmFkZCh2KSx2LmFkZExvY2FsSG9vaygiZGVzdHJveSIsKCk9PnRoaXMuZGVzdHJveUJvcmRlcnModikpKTtjb25zdCBjZT10aGlzLmdldEJvcmRlckluc3RhbmNlKHYpO2lmKHYuaXNFbXB0eSgpKXtjZT8uZGlzYXBwZWFyKCk7Y29udGludWV9TSYmYXMoeEssdGhpcykuc2V0QWN0aXZl''@;'; put 'put ''U2VsZWN0aW9uKHYpLnNjYW4oKS5mb3JFYWNoKEJlPT57aWYoZC5oYXMoQmUpKXtjb25zdCBxZT1kLmdldChCZSk7cWUuaGFzKE0pJiYhMD09PVo/cWUuc2V0KE0scWUuZ2V0KE0pKzEpOnFlLnNldChNLDEpfWVsc2UgZC5zZXQoQmUsbmV3IE1hcChbW00sMV1dKSk7RCYmKGguaGFzKEJlKXx8''@;'; put 'put ''aC5zZXQoQmUsW10pLCJUSCI9PT1CZS5ub2RlTmFtZSYmaC5nZXQoQmUpLnB1c2goLi4uRCkpfSk7Y29uc3QgYmU9di5nZXRDb3JuZXJzKCk7YXMoYjEsdGhpcykuZ2V0U2V0dGluZygib25CZWZvcmVEcmF3Qm9yZGVycyIsYmUscmUpLGNlPy5hcHBlYXIoYmUpfWQuZm9yRWFjaCgoZix2KT0+''@;'; put 'put ''e3ZhciBNO2NvbnN0IEQ9QXJyYXkuZnJvbShmKS5tYXAoWj0+e2xldFtyZSxjZV09WjtyZXR1cm4gMT09PWNlP3JlOltyZSwuLi5BcnJheS5mcm9tKHtsZW5ndGg6Y2UtMX0sKGJlLEVlKT0+YCR7cmV9LSR7RWUrMX1gKV19KS5mbGF0KCk7RC5mb3JFYWNoKFo9PmFzKFpFLHRoaXMpLmdldChh''@;'; put 'put ''cyhiMSx0aGlzKSkuYWRkKFopKSxUaSh2LEQpLCJURCI9PT12Lm5vZGVOYW1lJiZBcnJheS5pc0FycmF5KG51bGw9PT0oTT1hcyhWZCx0aGlzKS5vcHRpb25zKXx8dm9pZCAwPT09TT92b2lkIDA6TS5jZWxsQXR0cmlidXRlcykmJnZvKHYsYXMoVmQsdGhpcykub3B0aW9ucy5jZWxsQXR0cmli''@;'; put 'put ''dXRlcyl9KSxBcnJheS5mcm9tKGgua2V5cygpKS5mb3JFYWNoKGY9Pnt2byhmLFsuLi5oLmdldChmKV0pfSl9fWZ1bmN0aW9uIG90dCgpe2NvbnN0IGM9YXMoWkUsdGhpcykuZ2V0KGFzKGIxLHRoaXMpKSxsPWFzKGIxLHRoaXMpLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygib25CZWZvcmVSZW1v''@;'; put 'put ''dmVDZWxsQ2xhc3NOYW1lcyIpO2lmKEFycmF5LmlzQXJyYXkobCkpZm9yKGxldCBhPTA7YTxsLmxlbmd0aDthKyspYy5hZGQobFthXSk7Yy5mb3JFYWNoKGE9Pnt2YXIgZCxoO2NvbnN0IGY9YXMoYjEsdGhpcykud3RUYWJsZS5UQUJMRS5xdWVyeVNlbGVjdG9yQWxsKGAuJHthfWApO2xldCB2''@;'; put 'put ''PVtdO0FycmF5LmlzQXJyYXkobnVsbD09PShkPWFzKFZkLHRoaXMpLm9wdGlvbnMpfHx2b2lkIDA9PT1kP3ZvaWQgMDpkLmNlbGxBdHRyaWJ1dGVzKSYmKHY9YXMoVmQsdGhpcykub3B0aW9ucy5jZWxsQXR0cmlidXRlcy5tYXAoTT0+TVswXSkpLEFycmF5LmlzQXJyYXkobnVsbD09PShoPWFz''@;'; put 'put ''KFZkLHRoaXMpLm9wdGlvbnMpfHx2b2lkIDA9PT1oP3ZvaWQgMDpoLmhlYWRlckF0dHJpYnV0ZXMpJiYodj1bLi4udiwuLi5hcyhWZCx0aGlzKS5vcHRpb25zLmhlYWRlckF0dHJpYnV0ZXMubWFwKE09Pk1bMF0pXSk7Zm9yKGxldCBNPTAsRD1mLmxlbmd0aDtNPEQ7TSsrKWxvKGZbTV0sYSks''@;'; put 'put ''ajcoZltNXSx2KX0pLGMuY2xlYXIoKX1mdW5jdGlvbiBRNyhjLGwsYSl7bTNlKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBtM2UoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9u''@;'; put 'put ''IGFuIG9iamVjdCIpfWZ1bmN0aW9uIHdjKGMsbCl7cmV0dXJuIGMuZ2V0KGwzKGMsbCkpfWZ1bmN0aW9uIHMzKGMsbCxhKXtyZXR1cm4gYy5zZXQobDMoYyxsKSxhKSxhfWZ1bmN0aW9uIGwzKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJn''@;'; put 'put ''dW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgTHA9bmV3IFdlYWtNYXAsU2c9bmV3IFdlYWtNYXAsVEs9bmV3IFdlYWtNYXAsQUs9bmV3IFdlYWtNYXAsam09bmV3IFdlYWtN''@;'; put 'put ''YXAsV0U9bmV3IFdlYWtNYXAsWUU9bmV3IFdlYWtNYXAsT3A9bmV3IFdlYWtTZXQ7Y2xhc3MgbHR0e2NvbnN0cnVjdG9yKGwpeyhmdW5jdGlvbiBzdHQoYyxsKXttM2UoYyxsKSxsLmFkZChjKX0pKHRoaXMsT3ApLFE3KHRoaXMsTHAsdm9pZCAwKSxRNyh0aGlzLFNnLHZvaWQgMCksUTcodGhp''@;'; put 'put ''cyxUSyx2b2lkIDApLFE3KHRoaXMsQUssdm9pZCAwKSxRNyh0aGlzLGptLCEwKSxRNyh0aGlzLFdFLHt9KSxRNyh0aGlzLFlFLHt9KSxzMyhTZyx0aGlzLGwucm9vdFRhYmxlLnBhcmVudEVsZW1lbnQucGFyZW50RWxlbWVudCksczMoQUssdGhpcyxsLnJvb3REb2N1bWVudCl9aXNDbGFzc2lj''@;'; put 'put ''VGhlbWUoKXtyZXR1cm4gd2Moam0sdGhpcyl9Z2V0Q1NTVmFyaWFibGVWYWx1ZShsKXt2YXIgYTtpZih3YyhqbSx0aGlzKSlyZXR1cm4gbnVsbDtpZih3YyhXRSx0aGlzKVtgLS1odC0ke2x9YF0pcmV0dXJuIHdjKFdFLHRoaXMpW2AtLWh0LSR7bH1gXTtjb25zdCBkPW51bGwhPT0oYT1sMyhP''@;'; put 'put ''cCx0aGlzLGh0dCkuY2FsbCh0aGlzLGAtLWh0LSR7bH1gKSkmJnZvaWQgMCE9PWE/YTpsMyhPcCx0aGlzLHkzZSkuY2FsbCh0aGlzLGAtLWh0LSR7bH1gKTtyZXR1cm4gbnVsbCE9PWQ/KHdjKFdFLHRoaXMpW2AtLWh0LSR7bH1gXT1kLGQpOnZvaWQgMH1nZXRTdHlsZUZvclREKGwpe3ZhciBh''@;'; put 'put ''O3JldHVybiBudWxsPT09KGE9d2MoWUUsdGhpcykpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLnRkW2xdfWdldERlZmF1bHRSb3dIZWlnaHQoKXtpZih3YyhqbSx0aGlzKSlyZXR1cm4gMjM7Y29uc3QgbD1sMyhPcCx0aGlzLGN0dCkuY2FsbCh0aGlzKTtyZXR1cm4hbCYmcG8od2MoU2csdGhpcyks''@;'; put 'put ''Imh0LXdyYXBwZXIiKT8oaWwoYFRoZSAiJHt3YyhMcCx0aGlzKX0iIHRoZW1lIGlzIGVuYWJsZWQsIGJ1dCBpdHMgc3R5bGVzaGVldHMgYXJlIG1pc3Npbmcgb3Igbm90IGltcG9ydGVkIGNvcnJlY3RseS4gSW1wb3J0IHRoZSBjb3JyZWN0IENTUyBmaWxlcyBpbiBvcmRlciB0byB1c2UgdGhh''@;'; put 'put ''dCB0aGVtZS5gKSxzMyhqbSx0aGlzLCEwKSx0aGlzLnVzZVRoZW1lKCksMjMpOmx9YXJlQ2VsbHNCb3JkZXJCb3goKXtyZXR1cm4iYm9yZGVyLWJveCI9PT10aGlzLmdldFN0eWxlRm9yVEQoImJveC1zaXppbmciKX11c2VUaGVtZShsKXtpZighbClyZXR1cm4gbDMoT3AsdGhpcyxiM2UpLmNh''@;'; put 'put ''bGwodGhpcyksczMoam0sdGhpcywhMCksdm9pZCBzMyhMcCx0aGlzLGx8fHZvaWQgMCk7bCYmbCE9PXdjKExwLHRoaXMpJiYod2MoTHAsdGhpcykmJmwzKE9wLHRoaXMsZnR0KS5jYWxsKHRoaXMpLHMzKExwLHRoaXMsbCksczMoam0sdGhpcywhMSksbDMoT3AsdGhpcyx1dHQpLmNhbGwodGhp''@;'; put 'put ''cyksbDMoT3AsdGhpcyxiM2UpLmNhbGwodGhpcykpfWdldFRoZW1lTmFtZSgpe3JldHVybiB3YyhMcCx0aGlzKX1yZW1vdmVDbGFzc05hbWVzKCl7cG8od2MoU2csdGhpcyksd2MoTHAsdGhpcykpJiZsbyh3YyhTZyx0aGlzKSx3YyhMcCx0aGlzKSl9fWZ1bmN0aW9uIGN0dCgpe2NvbnN0IGM9''@;'; put 'put ''dGhpcy5nZXRDU1NWYXJpYWJsZVZhbHVlKCJsaW5lLWhlaWdodCIpLGw9dGhpcy5nZXRDU1NWYXJpYWJsZVZhbHVlKCJjZWxsLXZlcnRpY2FsLXBhZGRpbmciKSxhPU1hdGguY2VpbChwYXJzZUZsb2F0KHRoaXMuZ2V0U3R5bGVGb3JURCgiYm9yZGVyLWJvdHRvbS13aWR0aCIpKSk7cmV0dXJu''@;'; put 'put ''IG51bGw9PT1jfHxudWxsPT09bHx8aXNOYU4oYSk/bnVsbDpjKzIqbCthfWZ1bmN0aW9uIHV0dCgpe2xvKHdjKFNnLHRoaXMpLC9odC10aGVtZS0uKi9nKSxUaSh3YyhTZyx0aGlzKSx3YyhMcCx0aGlzKSl9ZnVuY3Rpb24gYjNlKCl7dGhpcy5pc0NsYXNzaWNUaGVtZSgpfHxzMyhUSyx0aGlz''@;'; put 'put ''LGdldENvbXB1dGVkU3R5bGUod2MoU2csdGhpcykpKTtjb25zdCBjPWwzKE9wLHRoaXMsZHR0KS5jYWxsKHRoaXMsWyJib3gtc2l6aW5nIiwiYm9yZGVyLWJvdHRvbS13aWR0aCJdKTt3YyhZRSx0aGlzKS50ZD17Li4ud2MoWUUsdGhpcykudGQsImJveC1zaXppbmciOmNbImJveC1zaXppbmci''@;'; put 'put ''XSwiYm9yZGVyLWJvdHRvbS13aWR0aCI6Y1siYm9yZGVyLWJvdHRvbS13aWR0aCJdfX1mdW5jdGlvbiBkdHQoYyl7Y29uc3QgbD13YyhBSyx0aGlzKSxhPXdjKFNnLHRoaXMpLGQ9bC5jcmVhdGVFbGVtZW50KCJ0YWJsZSIpLGg9bC5jcmVhdGVFbGVtZW50KCJ0Ym9keSIpLGY9bC5jcmVhdGVF''@;'; put 'put ''bGVtZW50KCJ0ciIpLHY9bC5jcmVhdGVFbGVtZW50KCJ0ciIpLE09bC5jcmVhdGVFbGVtZW50KCJ0ZCIpO3YuYXBwZW5kQ2hpbGQoTSksaC5hcHBlbmRDaGlsZChmKSxoLmFwcGVuZENoaWxkKHYpLGQuYXBwZW5kQ2hpbGQoaCksYS5hcHBlbmRDaGlsZChkKTtjb25zdCBEPWdldENvbXB1dGVk''@;'; put 'put ''U3R5bGUoTSksWj17fTtyZXR1cm4gYy5mb3JFYWNoKHJlPT57WltyZV09RC5nZXRQcm9wZXJ0eVZhbHVlKHJlKX0pLGEucmVtb3ZlQ2hpbGQoZCksWn1mdW5jdGlvbiBodHQoYyl7Y29uc3QgbD1NYXRoLmNlaWwocGFyc2VGbG9hdChsMyhPcCx0aGlzLHkzZSkuY2FsbCh0aGlzLGMpKSk7cmV0''@;'; put 'put ''dXJuIE51bWJlci5pc05hTihsKT9udWxsOmx9ZnVuY3Rpb24geTNlKGMpe2NvbnN0IGw9d2MoVEssdGhpcykuZ2V0UHJvcGVydHlWYWx1ZShjKTtyZXR1cm4iIj09PWw/bnVsbDpsfWZ1bmN0aW9uIGZ0dCgpe3MzKFlFLHRoaXMse30pLHMzKFdFLHRoaXMse30pLHMzKGptLHRoaXMsITApfWNs''@;'; put 'put ''YXNzIHB0dCBleHRlbmRzIG1Le2NvbnN0cnVjdG9yKGwsYSl7c3VwZXIobCxuZXcgeWV0KGEpKSx0aGlzLnN0eWxlc0hhbmRsZXI9bmV3IGx0dCh0aGlzLmRvbUJpbmRpbmdzKTtjb25zdCBkPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmYWNhZGUiLHRoaXMpO3RoaXMud3RUYWJsZT1u''@;'; put 'put ''ZXcgX2V0KHRoaXMuZ2V0VGFibGVEYW8oKSxkLHRoaXMuZG9tQmluZGluZ3MsdGhpcy53dFNldHRpbmdzKSx0aGlzLnd0Vmlld3BvcnQ9bmV3IFFldCh0aGlzLmdldFZpZXdwb3J0RGFvKCksdGhpcy5kb21CaW5kaW5ncyx0aGlzLnd0U2V0dGluZ3MsdGhpcy5ldmVudE1hbmFnZXIsdGhpcy53''@;'; put 'put ''dFRhYmxlKSx0aGlzLnNlbGVjdGlvbk1hbmFnZXI9bmV3IGF0dCh0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygic2VsZWN0aW9ucyIpKSx0aGlzLnd0RXZlbnQ9bmV3IEVmZShkLHRoaXMuZG9tQmluZGluZ3MsdGhpcy53dFNldHRpbmdzLHRoaXMuZXZlbnRNYW5hZ2VyLHRoaXMud3RUYWJs''@;'; put 'put ''ZSx0aGlzLnNlbGVjdGlvbk1hbmFnZXIpLHRoaXMud3RPdmVybGF5cz1uZXcgbWV0KHRoaXMsZCx0aGlzLmRvbUJpbmRpbmdzLHRoaXMud3RTZXR0aW5ncyx0aGlzLmV2ZW50TWFuYWdlcix0aGlzLnd0VGFibGUpLHRoaXMuZXhwb3J0U2V0dGluZ3NBc0NsYXNzTmFtZXMoKSx0aGlzLmZpbmRP''@;'; put 'put ''cmlnaW5hbEhlYWRlcnMoKX1leHBvcnRTZXR0aW5nc0FzQ2xhc3NOYW1lcygpe2NvbnN0IGE9W10sZD1bXTtYbyh7cm93SGVhZGVyczoiaHRSb3dIZWFkZXJzIixjb2x1bW5IZWFkZXJzOiJodENvbHVtbkhlYWRlcnMifSwoaCxmKT0+e3RoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKGYpLmxl''@;'; put 'put ''bmd0aCYmZC5wdXNoKGgpLGEucHVzaChoKX0pLGxvKHRoaXMud3RUYWJsZS53dFJvb3RFbGVtZW50LnBhcmVudE5vZGUsYSksVGkodGhpcy53dFRhYmxlLnd0Um9vdEVsZW1lbnQucGFyZW50Tm9kZSxkKX1nZXRPdmVybGF5QnlOYW1lKGwpe3ZhciBhO2lmKCFIZmUuaW5jbHVkZXMobCkpcmV0''@;'; put 'put ''dXJuIG51bGw7Y29uc3QgZD1sLnJlcGxhY2UoL18oW2Etel0pL2csaD0+aFsxXS50b1VwcGVyQ2FzZSgpKTtyZXR1cm4gbnVsbCE9PShhPXRoaXMud3RPdmVybGF5c1tgJHtkfU92ZXJsYXlgXSkmJnZvaWQgMCE9PWE/YTpudWxsfWdldFZpZXdwb3J0RGFvKCl7Y29uc3QgbD10aGlzO3JldHVy''@;'; put 'put ''bntnZXQgd290KCl7cmV0dXJuIGx9LGdldCB0b3BPdmVybGF5VHJpbW1pbmdDb250YWluZXIoKXtyZXR1cm4gbC53dE92ZXJsYXlzLnRvcE92ZXJsYXkudHJpbW1pbmdDb250YWluZXJ9LGdldCBpbmxpbmVTdGFydE92ZXJsYXlUcmltbWluZ0NvbnRhaW5lcigpe3JldHVybiBsLnd0T3Zlcmxh''@;'; put 'put ''eXMuaW5saW5lU3RhcnRPdmVybGF5LnRyaW1taW5nQ29udGFpbmVyfSxnZXQgdG9wU2Nyb2xsUG9zaXRpb24oKXtyZXR1cm4gbC53dE92ZXJsYXlzLnRvcE92ZXJsYXkuZ2V0U2Nyb2xsUG9zaXRpb24oKX0sZ2V0IHRvcFBhcmVudE9mZnNldCgpe3JldHVybiBsLnd0T3ZlcmxheXMudG9wT3Zl''@;'; put 'put ''cmxheS5nZXRUYWJsZVBhcmVudE9mZnNldCgpfSxnZXQgaW5saW5lU3RhcnRTY3JvbGxQb3NpdGlvbigpe3JldHVybiBsLnd0T3ZlcmxheXMuaW5saW5lU3RhcnRPdmVybGF5LmdldFNjcm9sbFBvc2l0aW9uKCl9LGdldCBpbmxpbmVTdGFydFBhcmVudE9mZnNldCgpe3JldHVybiBsLnd0T3Zl''@;'; put 'put ''cmxheXMuaW5saW5lU3RhcnRPdmVybGF5LmdldFRhYmxlUGFyZW50T2Zmc2V0KCl9LGdldCB0b3BPdmVybGF5KCl7cmV0dXJuIGwud3RPdmVybGF5cy50b3BPdmVybGF5fSxnZXQgaW5saW5lU3RhcnRPdmVybGF5KCl7cmV0dXJuIGwud3RPdmVybGF5cy5pbmxpbmVTdGFydE92ZXJsYXl9LGdl''@;'; put 'put ''dCBib3R0b21PdmVybGF5KCl7cmV0dXJuIGwud3RPdmVybGF5cy5ib3R0b21PdmVybGF5fX19fWNsYXNzIGtLe2NvbnN0cnVjdG9yKGwpe2wgaW5zdGFuY2VvZiBtSz90aGlzLl93b3Q9bDp0aGlzLl9pbml0RnJvbVNldHRpbmdzKGwpfV9pbml0RnJvbVNldHRpbmdzKGwpe2wuZmFjYWRlPWE9''@;'; put 'put ''Pntjb25zdCBkPW5ldyBrSyhhKTtyZXR1cm4oKT0+ZH0sdGhpcy5fd290PW5ldyBwdHQobC50YWJsZSxsKX1nZXQgZ3VpZCgpe3JldHVybiB0aGlzLl93b3QuZ3VpZH1nZXQgcm9vdERvY3VtZW50KCl7cmV0dXJuIHRoaXMuX3dvdC5kb21CaW5kaW5ncy5yb290RG9jdW1lbnR9Z2V0IHJvb3RX''@;'; put 'put ''aW5kb3coKXtyZXR1cm4gdGhpcy5fd290LmRvbUJpbmRpbmdzLnJvb3RXaW5kb3d9Z2V0IHd0U2V0dGluZ3MoKXtyZXR1cm4gdGhpcy5fd290Lnd0U2V0dGluZ3N9Z2V0IGNsb25lU291cmNlKCl7cmV0dXJuIHRoaXMuX3dvdC5jbG9uZVNvdXJjZX1nZXQgY2xvbmVPdmVybGF5KCl7cmV0dXJu''@;'; put 'put ''IHRoaXMuX3dvdC5jbG9uZU92ZXJsYXl9Z2V0IHNlbGVjdGlvbk1hbmFnZXIoKXtyZXR1cm4gdGhpcy5fd290LnNlbGVjdGlvbk1hbmFnZXJ9Z2V0IHd0Vmlld3BvcnQoKXtyZXR1cm4gdGhpcy5fd290Lnd0Vmlld3BvcnR9Z2V0IHd0T3ZlcmxheXMoKXtyZXR1cm4gdGhpcy5fd290Lnd0T3Zl''@;'; put 'put ''cmxheXN9Z2V0IHd0VGFibGUoKXtyZXR1cm4gdGhpcy5fd290Lnd0VGFibGV9Z2V0IHd0RXZlbnQoKXtyZXR1cm4gdGhpcy5fd290Lnd0RXZlbnR9Z2V0IHd0U2Nyb2xsKCl7cmV0dXJuIHRoaXMuX3dvdC53dFNjcm9sbH1nZXQgZHJhd24oKXtyZXR1cm4gdGhpcy5fd290LmRyYXdufXNldCBk''@;'; put 'put ''cmF3bihsKXt0aGlzLl93b3QuZHJhd249bH1nZXQgYWN0aXZlT3ZlcmxheU5hbWUoKXtyZXR1cm4gdGhpcy5fd290LmFjdGl2ZU92ZXJsYXlOYW1lfWdldCBkcmF3SW50ZXJydXB0ZWQoKXtyZXR1cm4gdGhpcy5fd290LmRyYXdJbnRlcnJ1cHRlZH1zZXQgZHJhd0ludGVycnVwdGVkKGwpe3Ro''@;'; put 'put ''aXMuX3dvdC5kcmF3SW50ZXJydXB0ZWQ9bH1nZXQgbGFzdE1vdXNlT3Zlcigpe3JldHVybiB0aGlzLl93b3QubGFzdE1vdXNlT3Zlcn1zZXQgbGFzdE1vdXNlT3ZlcihsKXt0aGlzLl93b3QubGFzdE1vdXNlT3Zlcj1sfWdldCBtb21lbnR1bVNjcm9sbGluZygpe3JldHVybiB0aGlzLl93b3Qu''@;'; put 'put ''bW9tZW50dW1TY3JvbGxpbmd9c2V0IG1vbWVudHVtU2Nyb2xsaW5nKGwpe3RoaXMuX3dvdC5tb21lbnR1bVNjcm9sbGluZz1sfWdldCB0b3VjaEFwcGxpZWQoKXtyZXR1cm4gdGhpcy5fd290LnRvdWNoQXBwbGllZH1zZXQgdG91Y2hBcHBsaWVkKGwpe3RoaXMuX3dvdC50b3VjaEFwcGxpZWQ9''@;'; put 'put ''bH1nZXQgZG9tQmluZGluZ3MoKXtyZXR1cm4gdGhpcy5fd290LmRvbUJpbmRpbmdzfWdldCBldmVudExpc3RlbmVycygpe3JldHVybiB0aGlzLl93b3QuZXZlbnRMaXN0ZW5lcnN9c2V0IGV2ZW50TGlzdGVuZXJzKGwpe3RoaXMuX3dvdC5ldmVudExpc3RlbmVycz1sfWdldCBldmVudE1hbmFn''@;'; put 'put ''ZXIoKXtyZXR1cm4gdGhpcy5fd290LmV2ZW50TWFuYWdlcn1nZXQgc3R5bGVzSGFuZGxlcigpe3JldHVybiB0aGlzLl93b3Quc3R5bGVzSGFuZGxlcn1jcmVhdGVDZWxsQ29vcmRzKGwsYSl7cmV0dXJuIHRoaXMuX3dvdC5jcmVhdGVDZWxsQ29vcmRzKGwsYSl9Y3JlYXRlQ2VsbFJhbmdlKGws''@;'; put 'put ''YSxkKXtyZXR1cm4gdGhpcy5fd290LmNyZWF0ZUNlbGxSYW5nZShsLGEsZCl9ZHJhdygpe3JldHVybiB0aGlzLl93b3QuZHJhdyhhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdKSx0aGlzfWdldENlbGwobCl7cmV0dXJuIHRoaXMuX3dvdC5n''@;'; put 'put ''ZXRDZWxsKGwsYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXSl9c2Nyb2xsVmlld3BvcnQobCxhLGQpe3JldHVybiB0aGlzLl93b3Quc2Nyb2xsVmlld3BvcnQobCxhLGQpfXNjcm9sbFZpZXdwb3J0SG9yaXpvbnRhbGx5KGwsYSl7cmV0dXJu''@;'; put 'put ''IHRoaXMuX3dvdC5zY3JvbGxWaWV3cG9ydEhvcml6b250YWxseShsLGEpfXNjcm9sbFZpZXdwb3J0VmVydGljYWxseShsLGEpe3JldHVybiB0aGlzLl93b3Quc2Nyb2xsVmlld3BvcnRWZXJ0aWNhbGx5KGwsYSl9Z2V0Vmlld3BvcnQoKXtyZXR1cm4gdGhpcy5fd290LmdldFZpZXdwb3J0KCl9''@;'; put 'put ''Z2V0T3ZlcmxheU5hbWUoKXtyZXR1cm4gdGhpcy5fd290LmNsb25lT3ZlcmxheT90aGlzLl93b3QuY2xvbmVPdmVybGF5LnR5cGU6Im1hc3RlciJ9Z2V0T3ZlcmxheUJ5TmFtZShsKXtyZXR1cm4gdGhpcy5fd290LmdldE92ZXJsYXlCeU5hbWUobCl9ZXhwb3J0U2V0dGluZ3NBc0NsYXNzTmFt''@;'; put 'put ''ZXMoKXtyZXR1cm4gdGhpcy5fd290LmV4cG9ydFNldHRpbmdzQXNDbGFzc05hbWVzKCl9dXBkYXRlKGwsYSl7cmV0dXJuIHRoaXMuX3dvdC53dFNldHRpbmdzLnVwZGF0ZShsLGEpLHRoaXN9Z2V0U2V0dGluZyhsLGEsZCxoLGYpe3JldHVybiB0aGlzLl93b3Qud3RTZXR0aW5ncy5nZXRTZXR0''@;'; put 'put ''aW5nKGwsYSxkLGgsZil9aGFzU2V0dGluZyhsKXtyZXR1cm4gdGhpcy5fd290Lnd0U2V0dGluZ3MuaGFzU2V0dGluZyhsKX1kZXN0cm95KCl7dGhpcy5fd290LmRlc3Ryb3koKX19ZnVuY3Rpb24gXzNlKGMpe2xldHtpc1NoaWZ0S2V5OmwsaXNMZWZ0Q2xpY2s6YSxpc1JpZ2h0Q2xpY2s6ZCxj''@;'; put 'put ''b29yZHM6aCxzZWxlY3Rpb246Zixjb250cm9sbGVyOnYsY2VsbENvb3Jkc0ZhY3Rvcnk6TX09Yztjb25zdCBEPWYuaXNTZWxlY3RlZCgpP2YuZ2V0U2VsZWN0ZWRSYW5nZSgpLmN1cnJlbnQoKTpudWxsLFo9Zi5pc1NlbGVjdGVkQnlDb3JuZXIoKSxyZT1mLmlzU2VsZWN0ZWRCeVJvd0hlYWRl''@;'; put 'put ''cigpO2lmKGYubWFya1NvdXJjZSgibW91c2UiKSxsJiZEKWgucm93Pj0wJiZoLmNvbD49MCYmIXYuY2VsbD9mLnNldFJhbmdlRW5kKGgpOihafHxyZSkmJmgucm93Pj0wJiZoLmNvbD49MCYmIXYuY2VsbD9mLnNldFJhbmdlRW5kKE0oaC5yb3csaC5jb2wpKTpaJiZoLnJvdzwwJiYhdi5jb2x1''@;'; put 'put ''bW4/Zi5zZXRSYW5nZUVuZChNKEQudG8ucm93LGguY29sKSk6cmUmJmguY29sPDAmJiF2LnJvdz9mLnNldFJhbmdlRW5kKE0oaC5yb3csRC50by5jb2wpKTooIVomJiFyZSYmaC5jb2w8MHx8WiYmaC5jb2w8MCkmJiF2LnJvdz9mLnNlbGVjdFJvd3MoTWF0aC5tYXgoRC5mcm9tLnJvdywwKSxo''@;'; put 'put ''LnJvdyxoLmNvbCk6KCFaJiYhcmUmJmgucm93PDB8fHJlJiZoLnJvdzwwKSYmIXYuY29sdW1uJiZmLnNlbGVjdENvbHVtbnMoTWF0aC5tYXgoRC5mcm9tLmNvbCwwKSxoLmNvbCxoLnJvdyk7ZWxzZXtjb25zdCBjZT0hZi5pbkluU2VsZWN0aW9uKGgpLGJlPWF8fGQmJmNlO2gucm93PDAmJmgu''@;'; put 'put ''Y29sPj0wJiYhdi5jb2x1bW4/YmUmJmYuc2VsZWN0Q29sdW1ucyhoLmNvbCxoLmNvbCxoLnJvdyk6aC5jb2w8MCYmaC5yb3c+PTAmJiF2LnJvdz9iZSYmZi5zZWxlY3RSb3dzKGgucm93LGgucm93LGguY29sKTpoLmNvbD49MCYmaC5yb3c+PTAmJiF2LmNlbGw/YmUmJmYuc2V0UmFuZ2VTdGFy''@;'; put 'put ''dChoKTpoLmNvbDwwJiZoLnJvdzwwJiZmLnNlbGVjdEFsbCghMCwhMCx7ZGlzYWJsZUhlYWRlcnNIaWdobGlnaHQ6ITAsZm9jdXNQb3NpdGlvbjp7cm93OjAsY29sOjB9fSl9Zi5tYXJrRW5kU291cmNlKCl9Y29uc3QgbXR0PW5ldyBNYXAoW1sibW91c2Vkb3duIixfM2VdLFsibW91c2VvdmVy''@;'; put 'put ''IixmdW5jdGlvbiBndHQoYyl7bGV0e2lzTGVmdENsaWNrOmwsY29vcmRzOmEsc2VsZWN0aW9uOmQsY29udHJvbGxlcjpoLGNlbGxDb29yZHNGYWN0b3J5OmZ9PWM7aWYoIWwpcmV0dXJuO2NvbnN0IHY9ZC5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKSxNPWQuaXNTZWxlY3RlZEJ5Q29sdW1uSGVh''@;'; put 'put ''ZGVyKCksRD1kLnRhYmxlUHJvcHMuY291bnRDb2xzKCksWj1kLnRhYmxlUHJvcHMuY291bnRSb3dzKCk7ZC5tYXJrU291cmNlKCJtb3VzZSIpLE0mJiFoLmNvbHVtbj9kLnNldFJhbmdlRW5kKGYoWi0xLGEuY29sKSk6diYmIWgucm93P2Quc2V0UmFuZ2VFbmQoZihhLnJvdyxELTEpKTpoLmNl''@;'; put 'put ''bGx8fGQuc2V0UmFuZ2VFbmQoYSksZC5tYXJrRW5kU291cmNlKCl9XSxbInRvdWNoc3RhcnQiLF8zZV1dKTtmdW5jdGlvbiB3M2UoYyxsKXtsZXR7Y29vcmRzOmEsc2VsZWN0aW9uOmQsY29udHJvbGxlcjpoLGNlbGxDb29yZHNGYWN0b3J5OmZ9PWw7bXR0LmdldChjLnR5cGUpKHtjb29yZHM6''@;'; put 'put ''YSxzZWxlY3Rpb246ZCxjb250cm9sbGVyOmgsY2VsbENvb3Jkc0ZhY3Rvcnk6Zixpc1NoaWZ0S2V5OmMuc2hpZnRLZXksaXNMZWZ0Q2xpY2s6VU8oYyl8fCJ0b3VjaHN0YXJ0Ij09PWMudHlwZSxpc1JpZ2h0Q2xpY2s6SG0oYyl9KX1jb25zdCBDM2U9bmV3IFdlYWtNYXAsREs9U3ltYm9sKCJy''@;'; put 'put ''b290SW5zdGFuY2UiKTtmdW5jdGlvbiBjUChjKXtyZXR1cm4gQzNlLmhhcyhjKX1mdW5jdGlvbiB6bShjLGwsYSl7UzNlKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBTM2UoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBw''@;'; put 'put ''cml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIFVtKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBfdHQoYyl7dmFyIGw9ZnVuY3Rpb24gd3R0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2''@;'; put 'put ''ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1s''@;'; put 'put ''P1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5j''@;'; put 'put ''dGlvbiBBdShjLGwpe3JldHVybiBjLmdldChDXyhjLGwpKX1mdW5jdGlvbiBCZChjLGwsYSl7cmV0dXJuIGMuc2V0KENfKGMsbCksYSksYX1mdW5jdGlvbiBDXyhjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9s''@;'; put 'put ''OmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIElLPW5ldyBXZWFrTWFwLHVQPW5ldyBXZWFrTWFwLGRQPW5ldyBXZWFrTWFwLE1nPW5ldyBXZWFrTWFwLGMzPW5ldyBXZWFrTWFwLFJLPW5ldyBXZWFrTWFw''@;'; put 'put ''LExLPW5ldyBXZWFrTWFwLFNfPW5ldyBXZWFrTWFwLEdFPW5ldyBXZWFrU2V0O2Z1bmN0aW9uIE0zZSgpe3JldHVybiBwYXJzZUludCh0aGlzLmhvdC5yb290RWxlbWVudC5nZXRBdHRyaWJ1dGUoUk8oKVswXSksMTApfWZ1bmN0aW9uIFN0dChjKXtjb25zdCBsPUNfKEdFLHRoaXMsTTNlKS5j''@;'; put 'put ''YWxsKHRoaXMpK2M7dm8odGhpcy5ob3Qucm9vdEVsZW1lbnQsLi4uUk8obCkpfWZ1bmN0aW9uIE10dCgpe2NvbnN0IGM9dGhpcy5ob3Qucm9vdEVsZW1lbnQ7dGhpcy5oYXNWZXJ0aWNhbFNjcm9sbCgpP1RpKGMsImh0SGFzU2Nyb2xsWSIpOmxvKGMsImh0SGFzU2Nyb2xsWSIpLHRoaXMuaGFz''@;'; put 'put ''SG9yaXpvbnRhbFNjcm9sbCgpP1RpKGMsImh0SGFzU2Nyb2xsWCIpOmxvKGMsImh0SGFzU2Nyb2xsWCIpfWNvbnN0IHh0dD1jbGFzcyBDdHR7Y29uc3RydWN0b3IobCl7KGZ1bmN0aW9uIHl0dChjLGwpe1MzZShjLGwpLGwuYWRkKGMpfSkodGhpcyxHRSksVW0odGhpcywiaG90Iix2b2lkIDAp''@;'; put 'put ''LFVtKHRoaXMsImV2ZW50TWFuYWdlciIsdm9pZCAwKSxVbSh0aGlzLCJzZXR0aW5ncyIsdm9pZCAwKSxVbSh0aGlzLCJUSEVBRCIsdm9pZCAwKSxVbSh0aGlzLCJUQk9EWSIsdm9pZCAwKSxVbSh0aGlzLCJfd3QiLHZvaWQgMCksVW0odGhpcywiYWN0aXZlV3QiLHZvaWQgMCksem0odGhpcyxJ''@;'; put 'put ''SywwKSx6bSh0aGlzLHVQLDApLFVtKHRoaXMsInBvc3Rwb25lZEFkanVzdEVsZW1lbnRzU2l6ZSIsITEpLHptKHRoaXMsZFAsITEpLHptKHRoaXMsTWcsdm9pZCAwKSx6bSh0aGlzLGMzLHZvaWQgMCksem0odGhpcyxSSywwKSx6bSh0aGlzLExLLDApLHptKHRoaXMsU18sbnVsbCksdGhpcy5o''@;'; put 'put ''b3Q9bCx0aGlzLmV2ZW50TWFuYWdlcj1uZXcgajIodGhpcy5ob3QpLHRoaXMuc2V0dGluZ3M9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKSx0aGlzLmNyZWF0ZUVsZW1lbnRzKCksdGhpcy5yZWdpc3RlckV2ZW50cygpLHRoaXMuaW5pdGlhbGl6ZVdhbGtvbnRhYmxlKCl9cmVuZGVyKCl7aWYoIXRo''@;'; put 'put ''aXMuaG90LmlzUmVuZGVyU3VzcGVuZGVkKCkpe2NvbnN0IGw9dGhpcy5ob3QuZm9yY2VGdWxsUmVuZGVyO3RoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVSZW5kZXIiLGwpLHRoaXMucG9zdHBvbmVkQWRqdXN0RWxlbWVudHNTaXplJiYodGhpcy5wb3N0cG9uZWRBZGp1c3RFbGVtZW50c1NpemU9''@;'; put 'put ''ITEsdGhpcy5hZGp1c3RFbGVtZW50c1NpemUoKSksdGhpcy5fd3QuZHJhdyghbCksQ18oR0UsdGhpcyxNdHQpLmNhbGwodGhpcyksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyUmVuZGVyIixsKSx0aGlzLmhvdC5mb3JjZUZ1bGxSZW5kZXI9ITF9fWFkanVzdEVsZW1lbnRzU2l6ZSgpe3RoaXMu''@;'; put 'put ''aG90LmlzUmVuZGVyU3VzcGVuZGVkKCk/dGhpcy5wb3N0cG9uZWRBZGp1c3RFbGVtZW50c1NpemU9ITA6dGhpcy5fd3Qud3RPdmVybGF5cy5hZGp1c3RFbGVtZW50c1NpemUoKX1nZXRDZWxsQXRDb29yZHMobCxhKXtjb25zdCBkPXRoaXMuX3d0LmdldENlbGwobCxhKTtyZXR1cm4gZDwwP251''@;'; put 'put ''bGw6ZH1zY3JvbGxWaWV3cG9ydChsLGEsZCl7cmV0dXJuIHRoaXMuX3d0LnNjcm9sbFZpZXdwb3J0KGwsYSxkKX1zY3JvbGxWaWV3cG9ydEhvcml6b250YWxseShsLGEpe3JldHVybiB0aGlzLl93dC5zY3JvbGxWaWV3cG9ydEhvcml6b250YWxseShsLGEpfXNjcm9sbFZpZXdwb3J0VmVydGlj''@;'; put 'put ''YWxseShsLGEpe3JldHVybiB0aGlzLl93dC5zY3JvbGxWaWV3cG9ydFZlcnRpY2FsbHkobCxhKX1jcmVhdGVFbGVtZW50cygpe2NvbnN0e3Jvb3RFbGVtZW50Omwscm9vdERvY3VtZW50OmF9PXRoaXMuaG90LGQ9bC5nZXRBdHRyaWJ1dGUoInN0eWxlIik7ZCYmbC5zZXRBdHRyaWJ1dGUoImRh''@;'; put 'put ''dGEtb3JpZ2luYWxzdHlsZSIsZCksVGkobCwiaGFuZHNvbnRhYmxlIiksQmQoYzMsdGhpcyxhLmNyZWF0ZUVsZW1lbnQoIlRBQkxFIikpLFRpKEF1KGMzLHRoaXMpLCJodENvcmUiKSx0aGlzLmhvdC5nZXRTZXR0aW5ncygpLnRhYmxlQ2xhc3NOYW1lJiZUaShBdShjMyx0aGlzKSx0aGlzLmhv''@;'; put 'put ''dC5nZXRTZXR0aW5ncygpLnRhYmxlQ2xhc3NOYW1lKSx0aGlzLnNldHRpbmdzLmFyaWFUYWdzJiYodm8oQXUoYzMsdGhpcyksW1sicm9sZSIsInByZXNlbnRhdGlvbiJdXSksdm8obCxbWyJyb2xlIiwidHJlZWdyaWQiXSxUMmUoLTEpLFJPKHRoaXMuaG90LmNvdW50Q29scygpKSxbImFyaWEt''@;'; put 'put ''bXVsdGlzZWxlY3RhYmxlIiwidHJ1ZSJdXSkpLHRoaXMuVEhFQUQ9YS5jcmVhdGVFbGVtZW50KCJUSEVBRCIpLEF1KGMzLHRoaXMpLmFwcGVuZENoaWxkKHRoaXMuVEhFQUQpLHRoaXMuVEJPRFk9YS5jcmVhdGVFbGVtZW50KCJUQk9EWSIpLEF1KGMzLHRoaXMpLmFwcGVuZENoaWxkKHRoaXMu''@;'; put 'put ''VEJPRFkpLHRoaXMuaG90LnRhYmxlPUF1KGMzLHRoaXMpLHRoaXMuaG90LmNvbnRhaW5lci5pbnNlcnRCZWZvcmUoQXUoYzMsdGhpcyksdGhpcy5ob3QuY29udGFpbmVyLmZpcnN0Q2hpbGQpfXJlZ2lzdGVyRXZlbnRzKCl7Y29uc3R7cm9vdEVsZW1lbnQ6bCxyb290RG9jdW1lbnQ6YSxzZWxl''@;'; put 'put ''Y3Rpb246ZCxyb290V2luZG93Omh9PXRoaXMuaG90LGY9YS5kb2N1bWVudEVsZW1lbnQ7dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLCJtb3VzZWRvd24iLE09PntCZChkUCx0aGlzLCEwKSx0aGlzLmlzVGV4dFNlbGVjdGlvbkFsbG93ZWQoTS50YXJnZXQpfHwoTSQoaCks''@;'; put 'put ''TS5wcmV2ZW50RGVmYXVsdCgpLGguZm9jdXMoKSl9KSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwsIm1vdXNldXAiLCgpPT57QmQoZFAsdGhpcywhMSl9KSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwsIm1vdXNlbW92ZSIsTT0+e0F1KGRQLHRoaXMp''@;'; put 'put ''JiYhdGhpcy5pc1RleHRTZWxlY3Rpb25BbGxvd2VkKE0udGFyZ2V0KSYmKHRoaXMuc2V0dGluZ3MuZnJhZ21lbnRTZWxlY3Rpb24mJk0kKGgpLE0ucHJldmVudERlZmF1bHQoKSl9KSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGYsImtleXVwIixNPT57ZC5pc0luUHJvZ3Jl''@;'; put 'put ''c3MoKSYmIU0uc2hpZnRLZXkmJmQuZmluaXNoKCl9KSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGYsIm1vdXNldXAiLE09PntkLmlzSW5Qcm9ncmVzcygpJiZVTyhNKSYmZC5maW5pc2goKSxCZChNZyx0aGlzLCExKTtjb25zdCBEPUZPKGEuYWN0aXZlRWxlbWVudCk7U0Uo''@;'; put 'put ''YS5hY3RpdmVFbGVtZW50KSYmIUR8fChEfHwhZC5pc1NlbGVjdGVkKCkmJiFkLmlzU2VsZWN0ZWRCeUFueUhlYWRlcigpJiYhbC5jb250YWlucyhNLnRhcmdldCkmJiFIbShNKSkmJnRoaXMuaG90LnVubGlzdGVuKCl9KSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGYsImNv''@;'; put 'put ''bnRleHRtZW51IixNPT57ZC5pc0luUHJvZ3Jlc3MoKSYmSG0oTSkmJihkLmZpbmlzaCgpLEJkKE1nLHRoaXMsITEpKX0pLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoZiwidG91Y2hlbmQiLCgpPT57ZC5pc0luUHJvZ3Jlc3MoKSYmZC5maW5pc2goKSxCZChNZyx0aGlzLCEx''@;'; put 'put ''KX0pLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoZiwibW91c2Vkb3duIixNPT57Y29uc3QgRD1NLnRhcmdldCxaPU0ueHx8TS5jbGllbnRYLHJlPU0ueXx8TS5jbGllbnRZO2xldCBjZT1NLnRhcmdldDtpZihBdShNZyx0aGlzKXx8IWx8fCF0aGlzLmhvdC52aWV3KXJldHVy''@;'; put 'put ''bjtjb25zdHtob2xkZXI6YmV9PXRoaXMuX3d0Lnd0VGFibGU7aWYoY2U9PT1iZSl7Y29uc3QgQmU9ZjAoYSk7aWYoYS5lbGVtZW50RnJvbVBvaW50KForQmUscmUpIT09YmV8fGEuZWxlbWVudEZyb21Qb2ludChaLHJlK0JlKSE9PWJlKXJldHVybn1lbHNlIGZvcig7Y2UhPT1mOyl7aWYobnVs''@;'; put 'put ''bD09PWNlKXtpZihNLmlzVGFyZ2V0V2ViQ29tcG9uZW50KWJyZWFrO3JldHVybn1pZihjZT09PWwpcmV0dXJuO2NlPWNlLnBhcmVudE5vZGV9KCJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLnNldHRpbmdzLm91dHNpZGVDbGlja0Rlc2VsZWN0cz90aGlzLnNldHRpbmdzLm91dHNpZGVDbGlja0Rl''@;'; put 'put ''c2VsZWN0cyhEKTp0aGlzLnNldHRpbmdzLm91dHNpZGVDbGlja0Rlc2VsZWN0cyk/dGhpcy5ob3QuZGVzZWxlY3RDZWxsKCk6dGhpcy5ob3QuZGVzdHJveUVkaXRvcighMSwhMSl9KTtsZXQgdj1CNyhoKTtmb3IoO251bGwhPT12Oyl0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVy''@;'; put 'put ''KHYuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCJjbGljayIsKCk9Pnt0aGlzLmhvdC51bmxpc3RlbigpfSksdj1CNyh2KTt0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKEF1KGMzLHRoaXMpLCJzZWxlY3RzdGFydCIsTT0+e3RoaXMuc2V0dGluZ3MuZnJhZ21lbnRTZWxlY3Rp''@;'; put 'put ''b258fFNFKE0udGFyZ2V0KXx8TS5wcmV2ZW50RGVmYXVsdCgpfSl9dHJhbnNsYXRlRnJvbVJlbmRlcmFibGVUb1Zpc3VhbENvb3JkcyhsKXtsZXR7cm93OmEsY29sOmR9PWw7cmV0dXJuIHRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKC4uLnRoaXMudHJhbnNsYXRlRnJvbVJlbmRlcmFibGVU''@;'; put 'put ''b1Zpc3VhbEluZGV4KGEsZCkpfXRyYW5zbGF0ZUZyb21SZW5kZXJhYmxlVG9WaXN1YWxJbmRleChsLGEpe2xldCBkPWw+PTA/dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChsKTpsLGg9YT49MD90aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5n''@;'; put 'put ''ZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGEpOmE7cmV0dXJuIG51bGw9PT1kJiYoZD1sKSxudWxsPT09aCYmKGg9YSksW2QsaF19Y291bnRSZW5kZXJhYmxlSW5kZXhlcyhsLGEpe2NvbnN0IGQ9TWF0aC5taW4obC5nZXROb3RUcmltbWVkSW5kZXhlc0xlbmd0aCgpLGEpLGg9bC5nZXRO''@;'; put 'put ''ZWFyZXN0Tm90SGlkZGVuSW5kZXgoZC0xLC0xKTtyZXR1cm4gbnVsbD09PWg/MDpsLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoaCkrMX1jb3VudFJlbmRlcmFibGVDb2x1bW5zKCl7cmV0dXJuIHRoaXMuY291bnRSZW5kZXJhYmxlSW5kZXhlcyh0aGlzLmhvdC5jb2x1bW5JbmRleE1h''@;'; put 'put ''cHBlcix0aGlzLnNldHRpbmdzLm1heENvbHMpfWNvdW50UmVuZGVyYWJsZVJvd3MoKXtyZXR1cm4gdGhpcy5jb3VudFJlbmRlcmFibGVJbmRleGVzKHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLHRoaXMuc2V0dGluZ3MubWF4Um93cyl9Y291bnROb3RIaWRkZW5Sb3dJbmRleGVzKGwsYSl7cmV0''@;'; put 'put ''dXJuIHRoaXMuY291bnROb3RIaWRkZW5JbmRleGVzKGwsYSx0aGlzLmhvdC5yb3dJbmRleE1hcHBlcix0aGlzLmNvdW50UmVuZGVyYWJsZVJvd3MoKSl9Y291bnROb3RIaWRkZW5Db2x1bW5JbmRleGVzKGwsYSl7cmV0dXJuIHRoaXMuY291bnROb3RIaWRkZW5JbmRleGVzKGwsYSx0aGlzLmhv''@;'; put 'put ''dC5jb2x1bW5JbmRleE1hcHBlcix0aGlzLmNvdW50UmVuZGVyYWJsZUNvbHVtbnMoKSl9Y291bnROb3RIaWRkZW5JbmRleGVzKGwsYSxkLGgpe2lmKGlzTmFOKGwpfHxsPDApcmV0dXJuIDA7Y29uc3QgZj1kLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChsLGEpLHY9ZC5nZXRSZW5kZXJhYmxl''@;'; put 'put ''RnJvbVZpc3VhbEluZGV4KGYpO2lmKCFOdW1iZXIuaXNJbnRlZ2VyKHYpKXJldHVybiAwO2xldCBNPTA7cmV0dXJuIGE8MD9NPXYrMTphPjAmJihNPWgtdiksTX1jb3VudE5vdEhpZGRlbkZpeGVkQ29sdW1uc1N0YXJ0KCl7Y29uc3QgbD10aGlzLmhvdC5jb3VudENvbHMoKSxhPU1hdGgubWlu''@;'; put 'put ''KHBhcnNlSW50KHRoaXMuc2V0dGluZ3MuZml4ZWRDb2x1bW5zU3RhcnQsMTApLGwpLTE7cmV0dXJuIHRoaXMuY291bnROb3RIaWRkZW5Db2x1bW5JbmRleGVzKGEsLTEpfWNvdW50Tm90SGlkZGVuRml4ZWRSb3dzVG9wKCl7Y29uc3QgbD10aGlzLmhvdC5jb3VudFJvd3MoKSxhPU1hdGgubWlu''@;'; put 'put ''KHBhcnNlSW50KHRoaXMuc2V0dGluZ3MuZml4ZWRSb3dzVG9wLDEwKSxsKS0xO3JldHVybiB0aGlzLmNvdW50Tm90SGlkZGVuUm93SW5kZXhlcyhhLC0xKX1jb3VudE5vdEhpZGRlbkZpeGVkUm93c0JvdHRvbSgpe2NvbnN0IGw9dGhpcy5ob3QuY291bnRSb3dzKCksYT1NYXRoLm1heChsLXBh''@;'; put 'put ''cnNlSW50KHRoaXMuc2V0dGluZ3MuZml4ZWRSb3dzQm90dG9tLDEwKSwwKTtyZXR1cm4gdGhpcy5jb3VudE5vdEhpZGRlblJvd0luZGV4ZXMoYSwxKX1jb3VudFJlbmRlcmFibGVDb2x1bW5zSW5SYW5nZShsLGEpe2xldCBkPTA7Zm9yKGxldCBoPWw7aDw9YTtoKyspbnVsbCE9PXRoaXMuaG90''@;'; put 'put ''LmNvbHVtbkluZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoaCkmJihkKz0xKTtyZXR1cm4gZH1jb3VudFJlbmRlcmFibGVSb3dzSW5SYW5nZShsLGEpe2xldCBkPTA7Zm9yKGxldCBoPWw7aDw9YTtoKyspbnVsbCE9PXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldFJl''@;'; put 'put ''bmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoaCkmJihkKz0xKTtyZXR1cm4gZH1nZXRTdHlsZXNIYW5kbGVyKCl7cmV0dXJuIHRoaXMuX3d0LnN0eWxlc0hhbmRsZXJ9Z2V0RGVmYXVsdFJvd0hlaWdodCgpe3JldHVybiB0aGlzLl93dC5zdHlsZXNIYW5kbGVyLmdldERlZmF1bHRSb3dIZWlnaHQo''@;'; put 'put ''KX1hZGRDbGFzc05hbWVUb0xpY2Vuc2VFbGVtZW50KGwpe3ZhciBhO2NvbnN0IGQ9bnVsbD09PShhPXRoaXMuaG90LnJvb3RFbGVtZW50LnBhcmVudE5vZGUpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLnF1ZXJ5U2VsZWN0b3IoIi5ob3QtZGlzcGxheS1saWNlbnNlLWluZm8iKTtkJiZUaShkLGwp''@;'; put 'put ''fXJlbW92ZUNsYXNzTmFtZUZyb21MaWNlbnNlRWxlbWVudChsKXt2YXIgYTtjb25zdCBkPW51bGw9PT0oYT10aGlzLmhvdC5yb290RWxlbWVudC5wYXJlbnROb2RlKXx8dm9pZCAwPT09YT92b2lkIDA6YS5xdWVyeVNlbGVjdG9yKCIuaG90LWRpc3BsYXktbGljZW5zZS1pbmZvIik7ZCYmbG8o''@;'; put 'put ''ZCxsKX1pc01haW5UYWJsZU5vdEZ1bGx5Q292ZXJlZEJ5T3ZlcmxheXMoKXtjb25zdCBsPXRoaXMuY291bnROb3RIaWRkZW5GaXhlZFJvd3NUb3AoKSt0aGlzLmNvdW50Tm90SGlkZGVuRml4ZWRSb3dzQm90dG9tKCksYT10aGlzLmNvdW50Tm90SGlkZGVuRml4ZWRDb2x1bW5zU3RhcnQoKTty''@;'; put 'put ''ZXR1cm4gdGhpcy5ob3QuY291bnRSZW5kZXJlZFJvd3MoKT5sJiZ0aGlzLmhvdC5jb3VudFJlbmRlcmVkQ29scygpPmF9aW5pdGlhbGl6ZVdhbGtvbnRhYmxlKCl7Y29uc3QgbD17YXJpYVRhZ3M6dGhpcy5zZXR0aW5ncy5hcmlhVGFncyxydGxNb2RlOnRoaXMuaG90LmlzUnRsKCksZXh0ZXJu''@;'; put 'put ''YWxSb3dDYWxjdWxhdG9yOnRoaXMuaG90LmdldFBsdWdpbigiYXV0b1Jvd1NpemUiKSYmdGhpcy5ob3QuZ2V0UGx1Z2luKCJhdXRvUm93U2l6ZSIpLmlzRW5hYmxlZCgpLHRhYmxlOkF1KGMzLHRoaXMpLGlzRGF0YVZpZXdJbnN0YW5jZTooKT0+Y1AodGhpcy5ob3QpLHByZXZlbnRPdmVyZmxv''@;'; put 'put ''dzooKT0+dGhpcy5zZXR0aW5ncy5wcmV2ZW50T3ZlcmZsb3cscHJldmVudFdoZWVsOigpPT50aGlzLnNldHRpbmdzLnByZXZlbnRXaGVlbCx2aWV3cG9ydENvbHVtblJlbmRlcmluZ1RocmVzaG9sZDooKT0+dGhpcy5zZXR0aW5ncy52aWV3cG9ydENvbHVtblJlbmRlcmluZ1RocmVzaG9sZCx2''@;'; put 'put ''aWV3cG9ydFJvd1JlbmRlcmluZ1RocmVzaG9sZDooKT0+dGhpcy5zZXR0aW5ncy52aWV3cG9ydFJvd1JlbmRlcmluZ1RocmVzaG9sZCxkYXRhOihmLHYpPT50aGlzLmhvdC5nZXREYXRhQXRDZWxsKC4uLnRoaXMudHJhbnNsYXRlRnJvbVJlbmRlcmFibGVUb1Zpc3VhbEluZGV4KGYsdikpLHRv''@;'; put 'put ''dGFsUm93czooKT0+dGhpcy5jb3VudFJlbmRlcmFibGVSb3dzKCksdG90YWxDb2x1bW5zOigpPT50aGlzLmNvdW50UmVuZGVyYWJsZUNvbHVtbnMoKSxmaXhlZENvbHVtbnNTdGFydDooKT0+dGhpcy5jb3VudE5vdEhpZGRlbkZpeGVkQ29sdW1uc1N0YXJ0KCksZml4ZWRSb3dzVG9wOigpPT50''@;'; put 'put ''aGlzLmNvdW50Tm90SGlkZGVuRml4ZWRSb3dzVG9wKCksZml4ZWRSb3dzQm90dG9tOigpPT50aGlzLmNvdW50Tm90SGlkZGVuRml4ZWRSb3dzQm90dG9tKCksc2hvdWxkUmVuZGVySW5saW5lU3RhcnRPdmVybGF5OigpPT50aGlzLnNldHRpbmdzLmZpeGVkQ29sdW1uc1N0YXJ0PjB8fGwucm93''@;'; put 'put ''SGVhZGVycygpLmxlbmd0aD4wLHNob3VsZFJlbmRlclRvcE92ZXJsYXk6KCk9PnRoaXMuc2V0dGluZ3MuZml4ZWRSb3dzVG9wPjB8fGwuY29sdW1uSGVhZGVycygpLmxlbmd0aD4wLHNob3VsZFJlbmRlckJvdHRvbU92ZXJsYXk6KCk9PnRoaXMuc2V0dGluZ3MuZml4ZWRSb3dzQm90dG9tPjAs''@;'; put 'put ''bWluU3BhcmVSb3dzOigpPT50aGlzLnNldHRpbmdzLm1pblNwYXJlUm93cyxyZW5kZXJBbGxSb3dzOnRoaXMuc2V0dGluZ3MucmVuZGVyQWxsUm93cyxyZW5kZXJBbGxDb2x1bW5zOnRoaXMuc2V0dGluZ3MucmVuZGVyQWxsQ29sdW1ucyxyb3dIZWFkZXJzOigpPT57Y29uc3QgZj1bXTtyZXR1''@;'; put 'put ''cm4gdGhpcy5ob3QuaGFzUm93SGVhZGVycygpJiZmLnB1c2goKHYsTSk9Pntjb25zdCBEPXY+PTA/dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleCh2KTp2O3RoaXMuYXBwZW5kUm93SGVhZGVyKEQsTSl9KSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0''@;'; put 'put ''ZXJHZXRSb3dIZWFkZXJSZW5kZXJlcnMiLGYpLEJkKHVQLHRoaXMsZi5sZW5ndGgpLHRoaXMuaG90LmdldFNldHRpbmdzKCkuYXJpYVRhZ3MmJkNfKEdFLHRoaXMsTTNlKS5jYWxsKHRoaXMpPT09dGhpcy5ob3QuY291bnRDb2xzKCkmJkNfKEdFLHRoaXMsU3R0KS5jYWxsKHRoaXMsQXUodVAs''@;'; put 'put ''dGhpcykpLGZ9LGNvbHVtbkhlYWRlcnM6KCk9Pntjb25zdCBmPVtdO3JldHVybiB0aGlzLmhvdC5oYXNDb2xIZWFkZXJzKCkmJmYucHVzaCgodixNKT0+e2NvbnN0IEQ9dj49MD90aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHYpOnY7dGhp''@;'; put 'put ''cy5hcHBlbmRDb2xIZWFkZXIoRCxNKX0pLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckdldENvbHVtbkhlYWRlclJlbmRlcmVycyIsZiksQmQoSUssdGhpcyxmLmxlbmd0aCksZn0sY29sdW1uV2lkdGg6Zj0+e2NvbnN0IHY9dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJv''@;'; put 'put ''bVJlbmRlcmFibGVJbmRleChmKTtyZXR1cm4gdGhpcy5ob3QuZ2V0Q29sV2lkdGgobnVsbD09PXY/Zjp2KX0scm93SGVpZ2h0OmY9Pntjb25zdCB2PXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoZik7cmV0dXJuIHRoaXMuaG90LmdldFJvd0hl''@;'; put 'put ''aWdodChudWxsPT09dj9mOnYpfSxyb3dIZWlnaHRCeU92ZXJsYXlOYW1lOihmLHYpPT57Y29uc3QgTT10aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGYpLEQ9bnVsbD09PU0/ZjpNO3JldHVybiB0aGlzLmhvdC5ydW5Ib29rcygibW9kaWZ5Um93''@;'; put 'put ''SGVpZ2h0QnlPdmVybGF5TmFtZSIsdGhpcy5ob3QuZ2V0Um93SGVpZ2h0KEQpLEQsdil9LGNlbGxSZW5kZXJlcjooZix2LE0pPT57Y29uc3RbRCxaXT10aGlzLnRyYW5zbGF0ZUZyb21SZW5kZXJhYmxlVG9WaXN1YWxJbmRleChmLHYpLHJlPXRoaXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlHZXRD''@;'; put 'put ''ZWxsQ29vcmRzIixELFosITEsIm1ldGEiKTtsZXQgY2U9RCxiZT1aO0FycmF5LmlzQXJyYXkocmUpJiYoW2NlLGJlXT1yZSk7Y29uc3QgRWU9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEoY2UsYmUpLEJlPXRoaXMuaG90LmNvbFRvUHJvcChiZSk7bGV0IHFlPXRoaXMuaG90LmdldERhdGFBdFJvd1By''@;'; put 'put ''b3AoY2UsQmUpO3RoaXMuaG90Lmhhc0hvb2soImJlZm9yZVZhbHVlUmVuZGVyIikmJihxZT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlVmFsdWVSZW5kZXIiLHFlLEVlKSksdGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVJlbmRlcmVyIixNLEQsWixCZSxxZSxFZSksdGhpcy5ob3QuZ2V0Q2Vs''@;'; put 'put ''bFJlbmRlcmVyKEVlKSh0aGlzLmhvdCxNLEQsWixCZSxxZSxFZSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyUmVuZGVyZXIiLE0sRCxaLEJlLHFlLEVlKX0sc2VsZWN0aW9uczp0aGlzLmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LGhpZGVCb3JkZXJPbk1vdXNlRG93bk92ZXI6KCk9PnRoaXMu''@;'; put 'put ''c2V0dGluZ3MuZnJhZ21lbnRTZWxlY3Rpb24sb25XaW5kb3dSZXNpemU6KCk9Pnt0aGlzLmhvdCYmIXRoaXMuaG90LmlzRGVzdHJveWVkJiZ0aGlzLmhvdC5yZWZyZXNoRGltZW5zaW9ucygpfSxvbkNvbnRhaW5lckVsZW1lbnRSZXNpemU6KCk9Pnt0aGlzLmhvdCYmIXRoaXMuaG90LmlzRGVz''@;'; put 'put ''dHJveWVkJiZVNyh0aGlzLmhvdC5yb290RWxlbWVudCkmJnRoaXMuaG90LnJlZnJlc2hEaW1lbnNpb25zKCl9LG9uQ2VsbE1vdXNlRG93bjooZix2LE0sRCk9Pntjb25zdCBaPXRoaXMudHJhbnNsYXRlRnJvbVJlbmRlcmFibGVUb1Zpc3VhbENvb3Jkcyh2KSxyZT17cm93OiExLGNvbHVtbjoh''@;'; put 'put ''MSxjZWxsOiExfTt0aGlzLmhvdC5saXN0ZW4oKSx0aGlzLmFjdGl2ZVd0PUQsQmQoTWcsdGhpcywhMCksQmQoU18sdGhpcyx7eDpmLmNsaWVudFgseTpmLmNsaWVudFl9KSx0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlT25DZWxsTW91c2VEb3duIixmLFosTSxyZSksIUZtKGYpJiYodzNlKGYs''@;'; put 'put ''e2Nvb3JkczpaLHNlbGVjdGlvbjp0aGlzLmhvdC5zZWxlY3Rpb24sY29udHJvbGxlcjpyZSxjZWxsQ29vcmRzRmFjdG9yeTooY2UsYmUpPT50aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhjZSxiZSl9KSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJPbkNlbGxNb3VzZURvd24iLGYsWixNKSx0''@;'; put 'put ''aGlzLmFjdGl2ZVd0PXRoaXMuX3d0KX0sb25DZWxsQ29udGV4dE1lbnU6KGYsdixNLEQpPT57Y29uc3QgWj10aGlzLnRyYW5zbGF0ZUZyb21SZW5kZXJhYmxlVG9WaXN1YWxDb29yZHModik7dGhpcy5hY3RpdmVXdD1ELEJkKE1nLHRoaXMsITEpLHRoaXMuaG90LnNlbGVjdGlvbi5pc0luUHJv''@;'; put 'put ''Z3Jlc3MoKSYmdGhpcy5ob3Quc2VsZWN0aW9uLmZpbmlzaCgpLHRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVPbkNlbGxDb250ZXh0TWVudSIsZixaLE0pLCFGbShmKSYmKHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlck9uQ2VsbENvbnRleHRNZW51IixmLFosTSksdGhpcy5hY3RpdmVXdD10aGlz''@;'; put 'put ''Ll93dCl9LG9uQ2VsbE1vdXNlT3V0OihmLHYsTSxEKT0+e2NvbnN0IFo9dGhpcy50cmFuc2xhdGVGcm9tUmVuZGVyYWJsZVRvVmlzdWFsQ29vcmRzKHYpO3RoaXMuYWN0aXZlV3Q9RCx0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlT25DZWxsTW91c2VPdXQiLGYsWixNKSwhRm0oZikmJih0aGlz''@;'; put 'put ''LmhvdC5ydW5Ib29rcygiYWZ0ZXJPbkNlbGxNb3VzZU91dCIsZixaLE0pLHRoaXMuYWN0aXZlV3Q9dGhpcy5fd3QpfSxvbkNlbGxNb3VzZU92ZXI6KGYsdixNLEQpPT57Y29uc3QgWj10aGlzLnRyYW5zbGF0ZUZyb21SZW5kZXJhYmxlVG9WaXN1YWxDb29yZHModikscmU9e3JvdzohMSxjb2x1''@;'; put 'put ''bW46ITEsY2VsbDohMX07dGhpcy5hY3RpdmVXdD1ELHRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVPbkNlbGxNb3VzZU92ZXIiLGYsWixNLHJlKSwhRm0oZikmJihBdShNZyx0aGlzKSYmKCFBdShTXyx0aGlzKXx8QXUoU18sdGhpcykueCE9PWYuY2xpZW50WHx8QXUoU18sdGhpcykueSE9PWYu''@;'; put 'put ''Y2xpZW50WSkmJnczZShmLHtjb29yZHM6WixzZWxlY3Rpb246dGhpcy5ob3Quc2VsZWN0aW9uLGNvbnRyb2xsZXI6cmUsY2VsbENvb3Jkc0ZhY3Rvcnk6KGNlLGJlKT0+dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoY2UsYmUpfSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyT25DZWxsTW91''@;'; put 'put ''c2VPdmVyIixmLFosTSksdGhpcy5hY3RpdmVXdD10aGlzLl93dCxCZChTXyx0aGlzLG51bGwpKX0sb25DZWxsTW91c2VVcDooZix2LE0sRCk9Pntjb25zdCBaPXRoaXMudHJhbnNsYXRlRnJvbVJlbmRlcmFibGVUb1Zpc3VhbENvb3Jkcyh2KTt0aGlzLmFjdGl2ZVd0PUQsdGhpcy5ob3QucnVu''@;'; put 'put ''SG9va3MoImJlZm9yZU9uQ2VsbE1vdXNlVXAiLGYsWixNKSwhRm0oZikmJiF0aGlzLmhvdC5pc0Rlc3Ryb3llZCYmKHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlck9uQ2VsbE1vdXNlVXAiLGYsWixNKSx0aGlzLmFjdGl2ZVd0PXRoaXMuX3d0KX0sb25DZWxsQ29ybmVyTW91c2VEb3duOmY9Pntm''@;'; put 'put ''LnByZXZlbnREZWZhdWx0KCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyT25DZWxsQ29ybmVyTW91c2VEb3duIixmKX0sb25DZWxsQ29ybmVyRGJsQ2xpY2s6Zj0+e2YucHJldmVudERlZmF1bHQoKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJPbkNlbGxDb3JuZXJEYmxDbGljayIsZil9LGJl''@;'; put 'put ''Zm9yZURyYXc6KGYsdik9PnRoaXMuYmVmb3JlUmVuZGVyKGYsdiksb25EcmF3OmY9PnRoaXMuYWZ0ZXJSZW5kZXIoZiksb25CZWZvcmVWaWV3cG9ydFNjcm9sbFZlcnRpY2FsbHk6KGYsdik9Pntjb25zdCBNPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLEQ9ZjwwO2xldCBaPWY7cmV0dXJuIER8''@;'; put 'put ''fChaPU0uZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChmKSxudWxsIT09Wik/KFo9dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVZpZXdwb3J0U2Nyb2xsVmVydGljYWxseSIsWix2KSx0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlVmlld3BvcnRTY3JvbGwiKSxEP1o6TS5nZXRSZW5kZXJh''@;'; put 'put ''YmxlRnJvbVZpc3VhbEluZGV4KFopKTpmfSxvbkJlZm9yZVZpZXdwb3J0U2Nyb2xsSG9yaXpvbnRhbGx5OihmLHYpPT57Y29uc3QgTT10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlcixEPWY8MDtsZXQgWj1mO3JldHVybiBEfHwoWj1NLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoZiks''@;'; put 'put ''bnVsbCE9PVopPyhaPXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVWaWV3cG9ydFNjcm9sbEhvcml6b250YWxseSIsWix2KSx0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlVmlld3BvcnRTY3JvbGwiKSxEP1o6TS5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KFopKTpmfSxvblNjcm9sbFZl''@;'; put 'put ''cnRpY2FsbHk6KCk9Pnt0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJTY3JvbGxWZXJ0aWNhbGx5IiksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyU2Nyb2xsIil9LG9uU2Nyb2xsSG9yaXpvbnRhbGx5OigpPT57dGhpcy5ob3QucnVuSG9va3MoImFmdGVyU2Nyb2xsSG9yaXpvbnRhbGx5IiksdGhp''@;'; put 'put ''cy5ob3QucnVuSG9va3MoImFmdGVyU2Nyb2xsIil9LG9uQmVmb3JlUmVtb3ZlQ2VsbENsYXNzTmFtZXM6KCk9PnRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVSZW1vdmVDZWxsQ2xhc3NOYW1lcyIpLG9uQmVmb3JlSGlnaGxpZ2h0aW5nUm93SGVhZGVyOihmLHYsTSk9Pntjb25zdCBEPXRoaXMu''@;'; put 'put ''aG90LnJvd0luZGV4TWFwcGVyLFo9ZjwwO2xldCByZT1mO1p8fChyZT1ELmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoZikpO2NvbnN0IGNlPXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVIaWdobGlnaHRpbmdSb3dIZWFkZXIiLHJlLHYsTSk7cmV0dXJuIFo/Y2U6RC5nZXRSZW5kZXJh''@;'; put 'put ''YmxlRnJvbVZpc3VhbEluZGV4KEQuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGNlLDEpKX0sb25CZWZvcmVIaWdobGlnaHRpbmdDb2x1bW5IZWFkZXI6KGYsdixNKT0+e2NvbnN0IEQ9dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIsWj1mPDA7bGV0IHJlPWY7Wnx8KHJlPUQuZ2V0VmlzdWFs''@;'; put 'put ''RnJvbVJlbmRlcmFibGVJbmRleChmKSk7Y29uc3QgY2U9dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUhpZ2hsaWdodGluZ0NvbHVtbkhlYWRlciIscmUsdixNKTtyZXR1cm4gWj9jZTpELmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoRC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoY2Us''@;'; put 'put ''MSkpfSxvbkFmdGVyRHJhd1NlbGVjdGlvbjooZix2LE0pPT57bGV0IEQ7Y29uc3RbWixyZV09dGhpcy50cmFuc2xhdGVGcm9tUmVuZGVyYWJsZVRvVmlzdWFsSW5kZXgoZix2KSxjZT10aGlzLmhvdC5zZWxlY3Rpb24uZ2V0U2VsZWN0ZWRSYW5nZSgpO2lmKGNlLnNpemUoKT4wKXtjb25zdCBF''@;'; put 'put ''ZT1jZS5wZWVrQnlJbmRleChNPz8wKTtEPVtFZS5mcm9tLnJvdyxFZS5mcm9tLmNvbCxFZS50by5yb3csRWUudG8uY29sXX1yZXR1cm4gdGhpcy5ob3QucnVuSG9va3MoImFmdGVyRHJhd1NlbGVjdGlvbiIsWixyZSxELE0pfSxvbkJlZm9yZURyYXdCb3JkZXJzOihmLHYpPT57Y29uc3RbTSxE''@;'; put 'put ''LFoscmVdPWYsY2U9W3RoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoTSksdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChEKSx0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXRWaXN1YWxGcm9t''@;'; put 'put ''UmVuZGVyYWJsZUluZGV4KFopLHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgocmUpXTtyZXR1cm4gdGhpcy5ob3QucnVuSG9va3MoImJlZm9yZURyYXdCb3JkZXJzIixjZSx2KX0sb25CZWZvcmVUb3VjaFNjcm9sbDooKT0+dGhpcy5ob3Qu''@;'; put 'put ''cnVuSG9va3MoImJlZm9yZVRvdWNoU2Nyb2xsIiksb25BZnRlck1vbWVudHVtU2Nyb2xsOigpPT50aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJNb21lbnR1bVNjcm9sbCIpLG9uTW9kaWZ5Um93SGVhZGVyV2lkdGg6Zj0+dGhpcy5ob3QucnVuSG9va3MoIm1vZGlmeVJvd0hlYWRlcldpZHRoIixm''@;'; put 'put ''KSxvbk1vZGlmeUdldENlbGxDb29yZHM6KGYsdixNLEQpPT57Y29uc3QgWj10aGlzLmhvdC5yb3dJbmRleE1hcHBlcixyZT10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlcixjZT12Pj0wP3JlLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgodik6dixiZT1mPj0wP1ouZ2V0VmlzdWFsRnJv''@;'; put 'put ''bVJlbmRlcmFibGVJbmRleChmKTpmLEVlPXRoaXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlHZXRDZWxsQ29vcmRzIixiZSxjZSxNLEQpO2lmKEFycmF5LmlzQXJyYXkoRWUpKXtjb25zdFtCZSxxZSxydCxwdF09RWU7cmV0dXJuW0JlPj0wP1ouZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleCha''@;'; put 'put ''LmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChCZSwxKSk6QmUscWU+PTA/cmUuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChyZS5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgocWUsMSkpOnFlLHJ0Pj0wP1ouZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChaLmdldE5lYXJlc3ROb3RI''@;'; put 'put ''aWRkZW5JbmRleChydCwtMSkpOnJ0LHB0Pj0wP3JlLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgocmUuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KHB0LC0xKSk6cHRdfX0sb25Nb2RpZnlHZXRDb29yZHNFbGVtZW50OihmLHYpPT57Y29uc3QgTT10aGlzLmhvdC5yb3dJbmRleE1hcHBl''@;'; put 'put ''cixEPXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLFo9dj49MD9ELmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgodik6dixyZT1mPj0wP00uZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChmKTpmLGNlPXRoaXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlHZXRDb29yZHNFbGVtZW50Iixy''@;'; put 'put ''ZSxaKTtpZihBcnJheS5pc0FycmF5KGNlKSl7Y29uc3RbYmUsRWVdPWNlO3JldHVybltiZT49MD9NLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoTS5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoYmUsMSkpOmJlLEVlPj0wP0QuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChELmdl''@;'; put 'put ''dE5lYXJlc3ROb3RIaWRkZW5JbmRleChFZSwxKSk6RWVdfX0sdmlld3BvcnRSb3dDYWxjdWxhdG9yT3ZlcnJpZGU6Zj0+e2xldCB2PXRoaXMuc2V0dGluZ3Mudmlld3BvcnRSb3dSZW5kZXJpbmdPZmZzZXQ7aWYoImF1dG8iPT09diYmdGhpcy5zZXR0aW5ncy5maXhlZFJvd3NUb3AmJih2PTEw''@;'; put 'put ''KSx2PjB8fCJhdXRvIj09PXYpe2NvbnN0IE09dGhpcy5jb3VudFJlbmRlcmFibGVSb3dzKCksRD1mLnN0YXJ0Um93LFo9Zi5lbmRSb3c7aWYoIm51bWJlciI9PXR5cGVvZiB2KWYuc3RhcnRSb3c9TWF0aC5tYXgoRC12LDApLGYuZW5kUm93PU1hdGgubWluKFordixNLTEpO2Vsc2UgaWYoImF1''@;'; put 'put ''dG8iPT09dil7Y29uc3QgcmU9TWF0aC5tYXgoMSxNYXRoLmNlaWwoWi9NKjEyKSk7Zi5zdGFydFJvdz1NYXRoLm1heChELXJlLDApLGYuZW5kUm93PU1hdGgubWluKForcmUsTS0xKX19dGhpcy5ob3QucnVuSG9va3MoImFmdGVyVmlld3BvcnRSb3dDYWxjdWxhdG9yT3ZlcnJpZGUiLGYpfSx2''@;'; put 'put ''aWV3cG9ydENvbHVtbkNhbGN1bGF0b3JPdmVycmlkZTpmPT57bGV0IHY9dGhpcy5zZXR0aW5ncy52aWV3cG9ydENvbHVtblJlbmRlcmluZ09mZnNldDtpZigiYXV0byI9PT12JiZ0aGlzLnNldHRpbmdzLmZpeGVkQ29sdW1uc1N0YXJ0JiYodj0xMCksdj4wfHwiYXV0byI9PT12KXtjb25zdCBN''@;'; put 'put ''PXRoaXMuY291bnRSZW5kZXJhYmxlQ29sdW1ucygpLEQ9Zi5zdGFydENvbHVtbixaPWYuZW5kQ29sdW1uO2lmKCJudW1iZXIiPT10eXBlb2YgdiYmKGYuc3RhcnRDb2x1bW49TWF0aC5tYXgoRC12LDApLGYuZW5kQ29sdW1uPU1hdGgubWluKFordixNLTEpKSwiYXV0byI9PT12KXtjb25zdCBy''@;'; put 'put ''ZT1NYXRoLm1heCgxLE1hdGguY2VpbChaL00qNikpO2Yuc3RhcnRDb2x1bW49TWF0aC5tYXgoRC1yZSwwKSxmLmVuZENvbHVtbj1NYXRoLm1pbihaK3JlLE0tMSl9fXRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclZpZXdwb3J0Q29sdW1uQ2FsY3VsYXRvck92ZXJyaWRlIixmKX0scm93SGVhZGVy''@;'; put 'put ''V2lkdGg6KCk9PnRoaXMuc2V0dGluZ3Mucm93SGVhZGVyV2lkdGgsY29sdW1uSGVhZGVySGVpZ2h0OigpPT57Y29uc3QgZj10aGlzLmhvdC5ydW5Ib29rcygibW9kaWZ5Q29sdW1uSGVhZGVySGVpZ2h0Iik7cmV0dXJuIHRoaXMuc2V0dGluZ3MuY29sdW1uSGVhZGVySGVpZ2h0fHxmfX07dGhp''@;'; put 'put ''cy5ob3QucnVuSG9va3MoImJlZm9yZUluaXRXYWxrb250YWJsZSIsbCksdGhpcy5fd3Q9bmV3IGtLKGwpLHRoaXMuYWN0aXZlV3Q9dGhpcy5fd3Q7Y29uc3QgYT10aGlzLl93dC53dFRhYmxlLnNwcmVhZGVyLHt3aWR0aDpkLGhlaWdodDpofT10aGlzLmhvdC5yb290RWxlbWVudC5nZXRCb3Vu''@;'; put 'put ''ZGluZ0NsaWVudFJlY3QoKTt0aGlzLnNldExhc3RTaXplKGQsaCksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihhLCJtb3VzZWRvd24iLGY9PntmLnRhcmdldD09PWEmJjM9PT1mLndoaWNoJiZmLnN0b3BQcm9wYWdhdGlvbigpfSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZl''@;'; put 'put ''bnRMaXN0ZW5lcihhLCJjb250ZXh0bWVudSIsZj0+e2YudGFyZ2V0PT09YSYmMz09PWYud2hpY2gmJmYuc3RvcFByb3BhZ2F0aW9uKCl9KSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHRoaXMuaG90LnJvb3REb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsImNsaWNrIiwoKT0+''@;'; put 'put ''e3RoaXMuc2V0dGluZ3Mub2JzZXJ2ZURPTVZpc2liaWxpdHkmJnRoaXMuX3d0LmRyYXdJbnRlcnJ1cHRlZCYmdGhpcy5ob3QucmVuZGVyKCl9KX1pc1RleHRTZWxlY3Rpb25BbGxvd2VkKGwpe2lmKFNFKGwpKXJldHVybiEwO2NvbnN0IGE9TG0obCx0aGlzLl93dC53dFRhYmxlLnNwcmVhZGVy''@;'; put 'put ''KTtyZXR1cm4hISghMD09PXRoaXMuc2V0dGluZ3MuZnJhZ21lbnRTZWxlY3Rpb24mJmF8fCJjZWxsIj09PXRoaXMuc2V0dGluZ3MuZnJhZ21lbnRTZWxlY3Rpb24mJnRoaXMuaXNTZWxlY3RlZE9ubHlDZWxsKCkmJmF8fCF0aGlzLnNldHRpbmdzLmZyYWdtZW50U2VsZWN0aW9uJiZ0aGlzLmlz''@;'; put 'put ''Q2VsbEVkaXRlZCgpJiZ0aGlzLmlzU2VsZWN0ZWRPbmx5Q2VsbCgpKX1pc01vdXNlRG93bigpe3JldHVybiBBdShNZyx0aGlzKX1pc1NlbGVjdGVkT25seUNlbGwoKXt2YXIgbCxhO3JldHVybiBudWxsIT09KGw9bnVsbD09PShhPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkpfHx2''@;'; put 'put ''b2lkIDA9PT1hP3ZvaWQgMDphLmlzU2luZ2xlQ2VsbCgpKSYmdm9pZCAwIT09bCYmbH1pc0NlbGxFZGl0ZWQoKXtjb25zdCBsPXRoaXMuaG90LmdldEFjdGl2ZUVkaXRvcigpO3JldHVybiBsJiZsLmlzT3BlbmVkKCl9YmVmb3JlUmVuZGVyKGwsYSl7bCYmdGhpcy5ob3QucnVuSG9va3MoImJl''@;'; put 'put ''Zm9yZVZpZXdSZW5kZXIiLHRoaXMuaG90LmZvcmNlRnVsbFJlbmRlcixhKX1hZnRlclJlbmRlcihsKXtsJiZ0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJWaWV3UmVuZGVyIix0aGlzLmhvdC5mb3JjZUZ1bGxSZW5kZXIpfWFwcGVuZFJvd0hlYWRlcihsLGEpe2lmKGEuZmlyc3RDaGlsZCl7Y29u''@;'; put 'put ''c3QgZD1hLmZpcnN0Q2hpbGQ7aWYoIXBvKGQsInJlbGF0aXZlIikpcmV0dXJuIHhwKGEpLHZvaWQgdGhpcy5hcHBlbmRSb3dIZWFkZXIobCxhKTt0aGlzLnVwZGF0ZUNlbGxIZWFkZXIoZC5xdWVyeVNlbGVjdG9yKCIucm93SGVhZGVyIiksbCx0aGlzLmhvdC5nZXRSb3dIZWFkZXIpfWVsc2V7''@;'; put 'put ''Y29uc3R7cm9vdERvY3VtZW50OmQsZ2V0Um93SGVhZGVyOmh9PXRoaXMuaG90LGY9ZC5jcmVhdGVFbGVtZW50KCJkaXYiKSx2PWQuY3JlYXRlRWxlbWVudCgic3BhbiIpO2YuY2xhc3NOYW1lPSJyZWxhdGl2ZSIsdi5jbGFzc05hbWU9InJvd0hlYWRlciIsdGhpcy51cGRhdGVDZWxsSGVhZGVy''@;'; put 'put ''KHYsbCxoKSxmLmFwcGVuZENoaWxkKHYpLGEuYXBwZW5kQ2hpbGQoZil9dGhpcy5ob3QucnVuSG9va3MoImFmdGVyR2V0Um93SGVhZGVyIixsLGEpfWFwcGVuZENvbEhlYWRlcihsLGEpe2xldCBkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1sy''@;'; put 'put ''XTp0aGlzLmhvdC5nZXRDb2xIZWFkZXIsaD1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXT9hcmd1bWVudHNbM106MDtjb25zdCBmPSgpPT57Y29uc3Qgdj1sPj0wP3RoaXMuaG90LmdldENvbHVtbk1ldGEobCkuaGVhZGVyQ2xhc3NOYW1lOm51bGw7cmV0dXJuIHY/''@;'; put 'put ''di5zcGxpdCgiICIpOltdfTtpZihhLmZpcnN0Q2hpbGQpe2NvbnN0IHY9YS5maXJzdENoaWxkO3BvKHYsInJlbGF0aXZlIik/KHRoaXMudXBkYXRlQ2VsbEhlYWRlcih2LnF1ZXJ5U2VsZWN0b3IoIi5jb2xIZWFkZXIiKSxsLGQsaCksdi5jbGFzc05hbWU9IiIsVGkodixbInJlbGF0aXZlIiwu''@;'; put 'put ''Li5mKCldKSk6KHhwKGEpLHRoaXMuYXBwZW5kQ29sSGVhZGVyKGwsYSxkLGgpKX1lbHNle2NvbnN0e3Jvb3REb2N1bWVudDp2fT10aGlzLmhvdCxNPXYuY3JlYXRlRWxlbWVudCgiZGl2IiksRD12LmNyZWF0ZUVsZW1lbnQoInNwYW4iKSxaPWYoKTtNLmNsYXNzTGlzdC5hZGQoInJlbGF0aXZl''@;'; put 'put ''IiwuLi5aKSxELmNsYXNzTmFtZT0iY29sSGVhZGVyIix0aGlzLnNldHRpbmdzLmFyaWFUYWdzJiYodm8oTSwicm9sZSIsInByZXNlbnRhdGlvbiIpLHZvKEQsInJvbGUiLCJwcmVzZW50YXRpb24iKSksdGhpcy51cGRhdGVDZWxsSGVhZGVyKEQsbCxkLGgpLE0uYXBwZW5kQ2hpbGQoRCksYS5h''@;'; put 'put ''cHBlbmRDaGlsZChNKX10aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJHZXRDb2xIZWFkZXIiLGwsYSxoKX11cGRhdGVDZWxsSGVhZGVyKGwsYSxkKXtsZXQgaD1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXT9hcmd1bWVudHNbM106MCxmPWE7Y29uc3Qgdj10aGlzLl93''@;'; put 'put ''dC53dE92ZXJsYXlzLmdldFBhcmVudE92ZXJsYXkobCl8fHRoaXMuX3d0O2wucGFyZW50Tm9kZSYmKHBvKGwsImNvbEhlYWRlciIpP2Y9di53dFRhYmxlLmNvbHVtbkZpbHRlci5zb3VyY2VUb1JlbmRlcmVkKGEpOnBvKGwsInJvd0hlYWRlciIpJiYoZj12Lnd0VGFibGUucm93RmlsdGVyLnNv''@;'; put 'put ''dXJjZVRvUmVuZGVyZWQoYSkpKSxmPi0xP3o3KGwsZChhLGgpKTooUG0obCwiXHhhMCIpLFRpKGwsImNvcm5lckhlYWRlciIpKX1tYXhpbXVtVmlzaWJsZUVsZW1lbnRXaWR0aChsKXtjb25zdCBkPXRoaXMuX3d0Lnd0Vmlld3BvcnQuZ2V0V29ya3NwYWNlV2lkdGgoKS1sO3JldHVybiBkPjA/''@;'; put 'put ''ZDowfW1heGltdW1WaXNpYmxlRWxlbWVudEhlaWdodChsKXtjb25zdCBkPXRoaXMuX3d0Lnd0Vmlld3BvcnQuZ2V0V29ya3NwYWNlSGVpZ2h0KCktbDtyZXR1cm4gZD4wP2Q6MH1zZXRMYXN0U2l6ZShsLGEpe0JkKFJLLHRoaXMsbCksQmQoTEssdGhpcyxhKX1nZXRMYXN0U2l6ZSgpe3JldHVy''@;'; put 'put ''bnt3aWR0aDpBdShSSyx0aGlzKSxoZWlnaHQ6QXUoTEssdGhpcyl9fWdldEZpcnN0UmVuZGVyZWRWaXNpYmxlUm93KCl7aWYoIXRoaXMuX3d0Lnd0Vmlld3BvcnQucm93c1JlbmRlckNhbGN1bGF0b3IpcmV0dXJuIG51bGw7Y29uc3QgbD10aGlzLmhvdC5yb3dJbmRleE1hcHBlcixhPWwuZ2V0''@;'; put 'put ''VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleCh0aGlzLl93dC53dFRhYmxlLmdldEZpcnN0UmVuZGVyZWRSb3coKSk7cmV0dXJuIGwuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGE/PzAsMSl9Z2V0TGFzdFJlbmRlcmVkVmlzaWJsZVJvdygpe2lmKCF0aGlzLl93dC53dFZpZXdwb3J0LnJvd3NS''@;'; put 'put ''ZW5kZXJDYWxjdWxhdG9yKXJldHVybiBudWxsO2NvbnN0IGw9dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIsYT1sLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgodGhpcy5fd3Qud3RUYWJsZS5nZXRMYXN0UmVuZGVyZWRSb3coKSk7cmV0dXJuIGwuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4''@;'; put 'put ''KGE/P3RoaXMuaG90LmNvdW50Um93cygpLTEsLTEpfWdldEZpcnN0UmVuZGVyZWRWaXNpYmxlQ29sdW1uKCl7aWYoIXRoaXMuX3d0Lnd0Vmlld3BvcnQuY29sdW1uc1JlbmRlckNhbGN1bGF0b3IpcmV0dXJuIG51bGw7Y29uc3QgbD10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlcixhPWwuZ2V0''@;'; put 'put ''VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleCh0aGlzLl93dC53dFRhYmxlLmdldEZpcnN0UmVuZGVyZWRDb2x1bW4oKSk7cmV0dXJuIGwuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGE/PzAsMSl9Z2V0TGFzdFJlbmRlcmVkVmlzaWJsZUNvbHVtbigpe2lmKCF0aGlzLl93dC53dFZpZXdwb3J0''@;'; put 'put ''LmNvbHVtbnNSZW5kZXJDYWxjdWxhdG9yKXJldHVybiBudWxsO2NvbnN0IGw9dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIsYT1sLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgodGhpcy5fd3Qud3RUYWJsZS5nZXRMYXN0UmVuZGVyZWRDb2x1bW4oKSk7cmV0dXJuIGwuZ2V0TmVhcmVz''@;'; put 'put ''dE5vdEhpZGRlbkluZGV4KGE/P3RoaXMuaG90LmNvdW50Q29scygpLTEsLTEpfWdldEZpcnN0RnVsbHlWaXNpYmxlUm93KCl7cmV0dXJuIHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgodGhpcy5fd3Qud3RTY3JvbGwuZ2V0Rmlyc3RWaXNpYmxl''@;'; put 'put ''Um93KCkpfWdldExhc3RGdWxseVZpc2libGVSb3coKXtyZXR1cm4gdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleCh0aGlzLl93dC53dFNjcm9sbC5nZXRMYXN0VmlzaWJsZVJvdygpKX1nZXRGaXJzdEZ1bGx5VmlzaWJsZUNvbHVtbigpe3JldHVy''@;'; put 'put ''biB0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHRoaXMuX3d0Lnd0U2Nyb2xsLmdldEZpcnN0VmlzaWJsZUNvbHVtbigpKX1nZXRMYXN0RnVsbHlWaXNpYmxlQ29sdW1uKCl7cmV0dXJuIHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdl''@;'; put 'put ''dFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgodGhpcy5fd3Qud3RTY3JvbGwuZ2V0TGFzdFZpc2libGVDb2x1bW4oKSl9Z2V0Rmlyc3RQYXJ0aWFsbHlWaXNpYmxlUm93KCl7cmV0dXJuIHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgodGhpcy5f''@;'; put 'put ''d3Qud3RTY3JvbGwuZ2V0Rmlyc3RQYXJ0aWFsbHlWaXNpYmxlUm93KCkpfWdldExhc3RQYXJ0aWFsbHlWaXNpYmxlUm93KCl7cmV0dXJuIHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgodGhpcy5fd3Qud3RTY3JvbGwuZ2V0TGFzdFBhcnRpYWxs''@;'; put 'put ''eVZpc2libGVSb3coKSl9Z2V0Rmlyc3RQYXJ0aWFsbHlWaXNpYmxlQ29sdW1uKCl7cmV0dXJuIHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgodGhpcy5fd3Qud3RTY3JvbGwuZ2V0Rmlyc3RQYXJ0aWFsbHlWaXNpYmxlQ29sdW1uKCkpfWdl''@;'; put 'put ''dExhc3RQYXJ0aWFsbHlWaXNpYmxlQ29sdW1uKCl7cmV0dXJuIHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgodGhpcy5fd3Qud3RTY3JvbGwuZ2V0TGFzdFBhcnRpYWxseVZpc2libGVDb2x1bW4oKSl9Z2V0Q29sdW1uSGVhZGVyc0NvdW50''@;'; put 'put ''KCl7cmV0dXJuIEF1KElLLHRoaXMpfWdldFJvd0hlYWRlcnNDb3VudCgpe3JldHVybiBBdSh1UCx0aGlzKX1nZXRWaWV3cG9ydFdpZHRoKCl7cmV0dXJuIHRoaXMuX3d0Lnd0Vmlld3BvcnQuZ2V0Vmlld3BvcnRXaWR0aCgpfWdldFdvcmtzcGFjZVdpZHRoKCl7cmV0dXJuIHRoaXMuX3d0Lnd0''@;'; put 'put ''Vmlld3BvcnQuZ2V0V29ya3NwYWNlV2lkdGgoKX1nZXRWaWV3cG9ydEhlaWdodCgpe3JldHVybiB0aGlzLl93dC53dFZpZXdwb3J0LmdldFZpZXdwb3J0SGVpZ2h0KCl9Z2V0V29ya3NwYWNlSGVpZ2h0KCl7cmV0dXJuIHRoaXMuX3d0Lnd0Vmlld3BvcnQuZ2V0V29ya3NwYWNlSGVpZ2h0KCl9''@;'; put 'put ''Z2V0RWxlbWVudE92ZXJsYXlOYW1lKGwpe3ZhciBhO3JldHVybihudWxsIT09KGE9dGhpcy5fd3Qud3RPdmVybGF5cy5nZXRQYXJlbnRPdmVybGF5KGwpKSYmdm9pZCAwIT09YT9hOnRoaXMuX3d0KS53dFRhYmxlLm5hbWV9Z2V0T3ZlcmxheUJ5TmFtZShsKXtyZXR1cm4gdGhpcy5fd3QuZ2V0''@;'; put 'put ''T3ZlcmxheUJ5TmFtZShsKX1nZXRBY3RpdmVPdmVybGF5TmFtZSgpe3JldHVybiB0aGlzLl93dC5hY3RpdmVPdmVybGF5TmFtZX1pc1Zpc2libGUoKXtyZXR1cm4gdGhpcy5fd3Qud3RUYWJsZS5pc1Zpc2libGUoKX1oYXNWZXJ0aWNhbFNjcm9sbCgpe3JldHVybiB0aGlzLl93dC53dFZpZXdw''@;'; put 'put ''b3J0Lmhhc1ZlcnRpY2FsU2Nyb2xsKCl9aGFzSG9yaXpvbnRhbFNjcm9sbCgpe3JldHVybiB0aGlzLl93dC53dFZpZXdwb3J0Lmhhc0hvcml6b250YWxTY3JvbGwoKX1nZXRUYWJsZVdpZHRoKCl7cmV0dXJuIHRoaXMuX3d0Lnd0VGFibGUuZ2V0V2lkdGgoKX1nZXRUYWJsZUhlaWdodCgpe3Jl''@;'; put 'put ''dHVybiB0aGlzLl93dC53dFRhYmxlLmdldEhlaWdodCgpfWdldFRhYmxlT2Zmc2V0KCl7cmV0dXJuIHRoaXMuX3d0Lnd0Vmlld3BvcnQuZ2V0V29ya3NwYWNlT2Zmc2V0KCl9Z2V0Um93SGVhZGVyV2lkdGgoKXtyZXR1cm4gdGhpcy5fd3Qud3RWaWV3cG9ydC5nZXRSb3dIZWFkZXJXaWR0aCgp''@;'; put 'put ''fWdldENvbHVtbkhlYWRlckhlaWdodCgpe3JldHVybiB0aGlzLl93dC53dFZpZXdwb3J0LmdldENvbHVtbkhlYWRlckhlaWdodCgpfWlzVmVydGljYWxseVNjcm9sbGFibGVCeVdpbmRvdygpe3JldHVybiB0aGlzLl93dC53dFZpZXdwb3J0LmlzVmVydGljYWxseVNjcm9sbGFibGVCeVdpbmRv''@;'; put 'put ''dygpfWlzSG9yaXpvbnRhbGx5U2Nyb2xsYWJsZUJ5V2luZG93KCl7cmV0dXJuIHRoaXMuX3d0Lnd0Vmlld3BvcnQuaXNIb3Jpem9udGFsbHlTY3JvbGxhYmxlQnlXaW5kb3coKX1kZXN0cm95KCl7dGhpcy5fd3QuZGVzdHJveSgpLHRoaXMuZXZlbnRNYW5hZ2VyLmRlc3Ryb3koKX19O3koMTM5''@;'; put 'put ''MDgpO2NvbnN0IHgzZT0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoiLE9LPXgzZS5sZW5ndGg7ZnVuY3Rpb24gaFAoYyl7bGV0IGQsbD1jKzEsYT0iIjtmb3IoO2w+MDspZD0obC0xKSVPSyxhPVN0cmluZy5mcm9tQ2hhckNvZGUoNjUrZCkrYSxsPXBhcnNlSW50KChsLWQpL09LLDEwKTty''@;'; put 'put ''ZXR1cm4gYX1mdW5jdGlvbiBFdHQoYyl7bGV0IGw9MDtpZihjKWZvcihsZXQgYT0wLGQ9Yy5sZW5ndGgtMTthPGMubGVuZ3RoO2ErPTEsZC09MSlsKz1PSyoqZCooeDNlLmluZGV4T2YoY1thXSkrMSk7cmV0dXJuIGwtPTEsbH1mdW5jdGlvbiBUdHQoKXtsZXQgYz1hcmd1bWVudHMubGVuZ3Ro''@;'; put 'put ''PjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06MTAwLGw9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjQ7Y29uc3QgYT1bXTtsZXQgZCxoO2ZvcihkPTA7ZDxjO2QrKyl7Y29uc3QgZj1bXTtmb3IoaD0wO2g8bDtoKysp''@;'; put 'put ''Zi5wdXNoKGhQKGgpKyhkKzEpKTthLnB1c2goZil9cmV0dXJuIGF9ZnVuY3Rpb24gQXR0KCl7bGV0IGM9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOjEwMCxsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2Fy''@;'; put 'put ''Z3VtZW50c1sxXTo0O2NvbnN0IGE9W107bGV0IGQsaDtmb3IoZD0wO2Q8YztkKyspe2NvbnN0IGY9e307Zm9yKGg9MDtoPGw7aCsrKWZbYHByb3Ake2h9YF09aFAoaCkrKGQrMSk7YS5wdXNoKGYpfXJldHVybiBhfWZ1bmN0aW9uIGt0dChjLGwpe2NvbnN0IGE9W107bGV0IGQ7Zm9yKGxldCBo''@;'; put 'put ''PTA7aDxjO2grKyl7ZD1bXTtmb3IobGV0IGY9MDtmPGw7ZisrKWQucHVzaCgiIik7YS5wdXNoKGQpfXJldHVybiBhfWZ1bmN0aW9uIFBLKGMpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTowLGE9Yztjb25zdCBkPVtdO3JldHVy''@;'; put 'put ''bighQXJyYXkuaXNBcnJheShjKXx8IUFycmF5LmlzQXJyYXkoY1swXSkpJiYoYT1bY10pLGEuZm9yRWFjaCgoaCxmKT0+e0FycmF5LmlzQXJyYXkoaCk/aC5mb3JFYWNoKCh2LE0pPT57ZC5wdXNoKFtmK2wsTSx2XSl9KTpPYmplY3Qua2V5cyhoKS5mb3JFYWNoKHY9PntkLnB1c2goW2YrbCx2''@;'; put 'put ''LGhbdl1dKX0pfSksZH1mdW5jdGlvbiBGSyhjKXtsZXQgbD0wO3JldHVybiBBcnJheS5pc0FycmF5KGMpJiYoY1swXSYmQXJyYXkuaXNBcnJheShjWzBdKT9sPWNbMF0ubGVuZ3RoOmNbMF0mJnFvKGNbMF0pJiYobD1CTyhjWzBdKSkpLGx9ZnVuY3Rpb24gRTNlKGMpe3JldHVybiEhKEFycmF5''@;'; put 'put ''LmlzQXJyYXkoYykmJmMubGVuZ3RoJiZjLmV2ZXJ5KGw9PkFycmF5LmlzQXJyYXkobCkpKX1mdW5jdGlvbiBUM2UoYyl7cmV0dXJuISEoQXJyYXkuaXNBcnJheShjKSYmYy5sZW5ndGgmJmMuZXZlcnkobD0+Im9iamVjdCI9PXR5cGVvZiBsJiYhQXJyYXkuaXNBcnJheShsKSYmbnVsbCE9PWwp''@;'; put 'put ''KX1mdW5jdGlvbiAkRShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gRHR0KGMpe3ZhciBsPWZ1bmN0aW9uIEl0dChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8''@;'; put 'put ''fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0''@;'; put 'put ''dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y29uc3QgTHR0PWNsYXNzIFJ0dHtjb25zdHJ1Y3RvcihsKXtsZXQg''@;'; put 'put ''YT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06W107JEUodGhpcywiaG90Iix2b2lkIDApLCRFKHRoaXMsImRhdGEiLHZvaWQgMCksJEUodGhpcywiZGF0YVR5cGUiLCJhcnJheSIpLCRFKHRoaXMsImNvbFRvUHJvcCIsKCk9Pnt9KSwkRSh0''@;'; put 'put ''aGlzLCJwcm9wVG9Db2wiLCgpPT57fSksdGhpcy5ob3Q9bCx0aGlzLmRhdGE9YX1tb2RpZnlSb3dEYXRhKGwpe2xldCBhO3JldHVybiB0aGlzLmhvdC5oYXNIb29rKCJtb2RpZnlSb3dEYXRhIikmJihhPXRoaXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlSb3dEYXRhIixsKSksdm9pZCAwPT09YXx8''@;'; put 'put ''TnVtYmVyLmlzSW50ZWdlcihhKT90aGlzLmRhdGFbbF06YX1nZXREYXRhKCl7cmV0dXJuIHRoaXMuZGF0YSYmMCE9PXRoaXMuZGF0YS5sZW5ndGg/dGhpcy5nZXRCeVJhbmdlKG51bGwsbnVsbCxhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBd''@;'; put 'put ''KTp0aGlzLmRhdGF9c2V0RGF0YShsKXt0aGlzLmRhdGE9bH1nZXRBdENvbHVtbihsKXtjb25zdCBhPVtdO3JldHVybiBZbih0aGlzLmRhdGEsKGQsaCk9Pntjb25zdCBmPXRoaXMuZ2V0QXRDZWxsKGgsbCk7YS5wdXNoKGYpfSksYX1nZXRBdFJvdyhsLGEsZCl7bGV0IGg9YXJndW1lbnRzLmxl''@;'; put 'put ''bmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10mJmFyZ3VtZW50c1szXTtjb25zdCBmPXZvaWQgMD09PWEmJnZvaWQgMD09PWQse2RhdGFEb3ROb3RhdGlvbjp2fT10aGlzLmhvdC5nZXRTZXR0aW5ncygpO2xldCBNPW51bGwsRD1udWxsO2lmKE09dGhpcy5tb2RpZnlSb3dEYXRhKGwpLEFy''@;'; put 'put ''cmF5LmlzQXJyYXkoTSkpRD1bXSxmP00uZm9yRWFjaCgoWixyZSk9PntEW3JlXT10aGlzLmdldEF0UGh5c2ljYWxDZWxsKGwscmUsTSl9KTpHYShhLGQsWj0+e0RbWi1hXT10aGlzLmdldEF0UGh5c2ljYWxDZWxsKGwsWixNKX0pO2Vsc2UgaWYocW8oTSl8fG1sKE0pKWlmKEQ9aD9bXTp7fSwh''@;'; put 'put ''Znx8aCl7Y29uc3QgcmU9dGhpcy5jb3VudEZpcnN0Um93S2V5cygpLTE7R2EoMCxyZSxjZT0+e2NvbnN0IGJlPXRoaXMuY29sVG9Qcm9wKGNlKTtpZihjZT49KGF8fDApJiZjZTw9KGR8fHJlKSYmIU51bWJlci5pc0ludGVnZXIoYmUpKXtjb25zdCBFZT10aGlzLmdldEF0UGh5c2ljYWxDZWxs''@;'; put 'put ''KGwsYmUsTSk7aD9ELnB1c2goRWUpOnY/Vk8oRCxiZSxFZSk6RFtiZV09RWV9fSl9ZWxzZSBYbyhNLChaLHJlKT0+e2NvbnN0IGNlPXRoaXMuZ2V0QXRQaHlzaWNhbENlbGwobCxyZSxNKTt2P1ZPKEQscmUsY2UpOkRbcmVdPWNlfSk7cmV0dXJuIER9c2V0QXRDZWxsKGwsYSxkKXtpZighKGw+''@;'; put 'put ''PXRoaXMuY291bnRSb3dzKCl8fGE+PXRoaXMuY291bnRGaXJzdFJvd0tleXMoKSkpe2lmKHRoaXMuaG90Lmhhc0hvb2soIm1vZGlmeVNvdXJjZURhdGEiKSl7Y29uc3QgaD1GZChkKTt0aGlzLmhvdC5ydW5Ib29rcygibW9kaWZ5U291cmNlRGF0YSIsbCxhLGgsInNldCIpLGguaXNUb3VjaGVk''@;'; put 'put ''KCkmJihkPWgudmFsdWUpfVsiX19wcm90b19fIiwiY29uc3RydWN0b3IiLCJwcm90b3R5cGUiXS5pbmNsdWRlcyhsKXx8KE51bWJlci5pc0ludGVnZXIoYSk/dGhpcy5kYXRhW2xdW2FdPWQ6Vk8odGhpcy5kYXRhW2xdLGEsZCkpfX1nZXRBdFBoeXNpY2FsQ2VsbChsLGEsZCl7bGV0IGg9bnVs''@;'; put 'put ''bDtpZihkKWlmKCJzdHJpbmciPT10eXBlb2YgYSl7Y29uc3R7ZGF0YURvdE5vdGF0aW9uOmZ9PXRoaXMuaG90LmdldFNldHRpbmdzKCk7aD1mPyQyZShkLGEpOmRbYV19ZWxzZSBoPSJmdW5jdGlvbiI9PXR5cGVvZiBhP2EoZCk6ZFthXTtpZih0aGlzLmhvdC5oYXNIb29rKCJtb2RpZnlTb3Vy''@;'; put 'put ''Y2VEYXRhIikpe2NvbnN0IGY9RmQoaCk7dGhpcy5ob3QucnVuSG9va3MoIm1vZGlmeVNvdXJjZURhdGEiLGwsYSxmLCJnZXQiKSxmLmlzVG91Y2hlZCgpJiYoaD1mLnZhbHVlKX1yZXR1cm4gaH1nZXRBdENlbGwobCxhKXtjb25zdCBkPXRoaXMubW9kaWZ5Um93RGF0YShsKTtyZXR1cm4gdGhp''@;'; put 'put ''cy5nZXRBdFBoeXNpY2FsQ2VsbChsLHRoaXMuY29sVG9Qcm9wKGEpLGQpfWdldEJ5UmFuZ2UoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bnVsbCxhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFd''@;'; put 'put ''P2FyZ3VtZW50c1sxXTpudWxsLGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXSxoPSExLGY9bnVsbCx2PW51bGwsTT1udWxsLEQ9bnVsbDtudWxsPT09bHx8bnVsbD09PWE/KGg9ITAsZj0wLE09dGhpcy5jb3VudFJvd3MoKS0xKTooZj1N''@;'; put 'put ''YXRoLm1pbihsLnJvdyxhLnJvdyksdj1NYXRoLm1pbihsLmNvbCxhLmNvbCksTT1NYXRoLm1heChsLnJvdyxhLnJvdyksRD1NYXRoLm1heChsLmNvbCxhLmNvbCkpO2NvbnN0IFo9W107cmV0dXJuIEdhKGYsTSxyZT0+e1oucHVzaChoP3RoaXMuZ2V0QXRSb3cocmUsdm9pZCAwLHZvaWQgMCxk''@;'; put 'put ''KTp0aGlzLmdldEF0Um93KHJlLHYsRCxkKSl9KSxafWNvdW50Um93cygpe2lmKHRoaXMuaG90Lmhhc0hvb2soIm1vZGlmeVNvdXJjZUxlbmd0aCIpKXtjb25zdCBsPXRoaXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlTb3VyY2VMZW5ndGgiKTtpZihOdW1iZXIuaXNJbnRlZ2VyKGwpKXJldHVybiBs''@;'; put 'put ''fXJldHVybiB0aGlzLmRhdGEubGVuZ3RofWNvdW50Rmlyc3RSb3dLZXlzKCl7cmV0dXJuIEZLKHRoaXMuZGF0YSl9ZGVzdHJveSgpe3RoaXMuZGF0YT1udWxsLHRoaXMuaG90PW51bGx9fTt5KDIwMjkxKTtjb25zdCBBM2U9e19sb2NhbEhvb2tzOk9iamVjdC5jcmVhdGUobnVsbCksYWRkTG9j''@;'; put 'put ''YWxIb29rKGMsbCl7cmV0dXJuIHRoaXMuX2xvY2FsSG9va3NbY118fCh0aGlzLl9sb2NhbEhvb2tzW2NdPVtdKSx0aGlzLl9sb2NhbEhvb2tzW2NdLnB1c2gobCksdGhpc30scnVuTG9jYWxIb29rcyhjLGwsYSxkLGgsZix2KXtpZih0aGlzLl9sb2NhbEhvb2tzW2NdKXtjb25zdCBNPXRoaXMu''@;'; put 'put ''X2xvY2FsSG9va3NbY10ubGVuZ3RoO2ZvcihsZXQgRD0wO0Q8TTtEKyspSE8odGhpcy5fbG9jYWxIb29rc1tjXVtEXSx0aGlzLGwsYSxkLGgsZix2KX19LGNsZWFyTG9jYWxIb29rcygpe3JldHVybiB0aGlzLl9sb2NhbEhvb2tzPXt9LHRoaXN9fTtUcChBM2UsIk1JWElOX05BTUUiLCJsb2Nh''@;'; put 'put ''bEhvb2tzIix7d3JpdGFibGU6ITEsZW51bWVyYWJsZTohMX0pO2NvbnN0IHkxPUEzZTtmdW5jdGlvbiBrM2UoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIFB0dChjKXt2YXIgbD1mdW5jdGlvbiBGdHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3lt''@;'; put 'put ''Ym9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVy''@;'; put 'put ''bigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0p''@;'; put 'put ''OmNbbF09YSxjfWNsYXNzIGU5e2NvbnN0cnVjdG9yKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOm51bGw7azNlKHRoaXMsImluZGV4ZWRWYWx1ZXMiLFtdKSxrM2UodGhpcywiaW5pdFZhbHVlT3JGbiIsdm9pZCAwKSx0aGlz''@;'; put 'put ''LmluaXRWYWx1ZU9yRm49bH1nZXRWYWx1ZXMoKXtyZXR1cm4gdGhpcy5pbmRleGVkVmFsdWVzfWdldFZhbHVlQXRJbmRleChsKXtjb25zdCBhPXRoaXMuaW5kZXhlZFZhbHVlcztpZihsPGEubGVuZ3RoKXJldHVybiBhW2xdfXNldFZhbHVlcyhsKXt0aGlzLmluZGV4ZWRWYWx1ZXM9bC5zbGlj''@;'; put 'put ''ZSgpLHRoaXMucnVuTG9jYWxIb29rcygiY2hhbmdlIil9c2V0VmFsdWVBdEluZGV4KGwsYSl7cmV0dXJuIGw8dGhpcy5pbmRleGVkVmFsdWVzLmxlbmd0aCYmKHRoaXMuaW5kZXhlZFZhbHVlc1tsXT1hLHRoaXMucnVuTG9jYWxIb29rcygiY2hhbmdlIiksITApfWNsZWFyKCl7dGhpcy5zZXRE''@;'; put 'put ''ZWZhdWx0VmFsdWVzKCl9Z2V0TGVuZ3RoKCl7cmV0dXJuIHRoaXMuZ2V0VmFsdWVzKCkubGVuZ3RofXNldERlZmF1bHRWYWx1ZXMoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06dGhpcy5pbmRleGVkVmFsdWVzLmxlbmd0aDt0''@;'; put 'put ''aGlzLmluZGV4ZWRWYWx1ZXMubGVuZ3RoPTAsbWwodGhpcy5pbml0VmFsdWVPckZuKT9HYShsLTEsYT0+dGhpcy5pbmRleGVkVmFsdWVzLnB1c2godGhpcy5pbml0VmFsdWVPckZuKGEpKSk6R2EobC0xLCgpPT50aGlzLmluZGV4ZWRWYWx1ZXMucHVzaCh0aGlzLmluaXRWYWx1ZU9yRm4pKSx0''@;'; put 'put ''aGlzLnJ1bkxvY2FsSG9va3MoImNoYW5nZSIpfWluaXQobCl7cmV0dXJuIHRoaXMuc2V0RGVmYXVsdFZhbHVlcyhsKSx0aGlzLnJ1bkxvY2FsSG9va3MoImluaXQiKSx0aGlzfWluc2VydCgpe3RoaXMucnVuTG9jYWxIb29rcygiY2hhbmdlIil9cmVtb3ZlKCl7dGhpcy5ydW5Mb2NhbEhvb2tz''@;'; put 'put ''KCJjaGFuZ2UiKX1kZXN0cm95KCl7dGhpcy5jbGVhckxvY2FsSG9va3MoKSx0aGlzLmluZGV4ZWRWYWx1ZXM9bnVsbCx0aGlzLmluaXRWYWx1ZU9yRm49bnVsbH19ZnVuY3Rpb24gSEsoYyxsLGEpe3JldHVyblsuLi5jLnNsaWNlKDAsbCksLi4uYSwuLi5jLnNsaWNlKGwpXX1mdW5jdGlvbiBL''@;'; put 'put ''RShjLGwpe3JldHVybiBJbShjLGE9PiExPT09bC5pbmNsdWRlcyhhKSl9ZnVuY3Rpb24gTksoYyxsKXtyZXR1cm4geXMoYyxhPT5hLWwuZmlsdGVyKGQ9PmQ8YSkubGVuZ3RoKX1mdW5jdGlvbiBWSyhjLGwpe2NvbnN0IGE9bFswXSxkPWwubGVuZ3RoO3JldHVybiB5cyhjLGg9Pmg+PWE/aCtk''@;'; put 'put ''OmgpfVRsKGU5LHkxKTtjbGFzcyBEM2UgZXh0ZW5kcyBlOXtjb25zdHJ1Y3Rvcigpe3N1cGVyKGw9PmwpfWluc2VydChsLGEpe2NvbnN0IGQ9VksodGhpcy5pbmRleGVkVmFsdWVzLGEpO3RoaXMuaW5kZXhlZFZhbHVlcz1ISyhkLGwsYSksc3VwZXIuaW5zZXJ0KGwsYSl9cmVtb3ZlKGwpe2Nv''@;'; put 'put ''bnN0IGE9S0UodGhpcy5pbmRleGVkVmFsdWVzLGwpO3RoaXMuaW5kZXhlZFZhbHVlcz1OSyhhLGwpLHN1cGVyLnJlbW92ZShsKX19ZnVuY3Rpb24gQksoYyxsLGEsZCl7Y29uc3QgaD1hLmxlbmd0aD9hWzBdOnZvaWQgMDtyZXR1cm5bLi4uYy5zbGljZSgwLGgpLC4uLmEubWFwKChmLHYpPT5t''@;'; put 'put ''bChkKT9kKGYsdik6ZCksLi4udm9pZCAwPT09aD9bXTpjLnNsaWNlKGgpXX1mdW5jdGlvbiBqSyhjLGwpe3JldHVybiBJbShjLChhLGQpPT4hMT09PWwuaW5jbHVkZXMoZCkpfWNsYXNzIFptIGV4dGVuZHMgZTl7aW5zZXJ0KGwsYSl7dGhpcy5pbmRleGVkVmFsdWVzPUJLKHRoaXMuaW5kZXhl''@;'; put 'put ''ZFZhbHVlcywwLGEsdGhpcy5pbml0VmFsdWVPckZuKSxzdXBlci5pbnNlcnQobCxhKX1yZW1vdmUobCl7dGhpcy5pbmRleGVkVmFsdWVzPWpLKHRoaXMuaW5kZXhlZFZhbHVlcyxsKSxzdXBlci5yZW1vdmUobCl9fWNsYXNzIGZQIGV4dGVuZHMgWm17Y29uc3RydWN0b3IoKXtzdXBlcihhcmd1''@;'; put 'put ''bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdKX1nZXRIaWRkZW5JbmRleGVzKCl7cmV0dXJuIHF1KHRoaXMuZ2V0VmFsdWVzKCksKGwsYSxkKT0+KGEmJmwucHVzaChkKSxsKSxbXSl9fWNsYXNzIHBQIGV4dGVuZHMgZTl7Y29uc3RydWN0b3IoKXtz''@;'; put 'put ''dXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIEh0dChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gTnR0KGMpe3ZhciBsPWZ1bmN0aW9uIFZ0dChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEp''@;'; put 'put ''e3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShj''@;'; put 'put ''KX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9KHRoaXMsIm9yZGVyT2ZJbmRleGVz''@;'; put 'put ''IixbXSl9Z2V0VmFsdWVzKCl7cmV0dXJuIHRoaXMub3JkZXJPZkluZGV4ZXMubWFwKGw9PnRoaXMuaW5kZXhlZFZhbHVlc1tsXSl9c2V0VmFsdWVzKGwpe3RoaXMub3JkZXJPZkluZGV4ZXM9Wy4uLkFycmF5KGwubGVuZ3RoKS5rZXlzKCldLHN1cGVyLnNldFZhbHVlcyhsKX1zZXRWYWx1ZUF0''@;'; put 'put ''SW5kZXgobCxhKXtsZXQgZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06dGhpcy5vcmRlck9mSW5kZXhlcy5sZW5ndGg7cmV0dXJuIGw8dGhpcy5pbmRleGVkVmFsdWVzLmxlbmd0aCYmKHRoaXMuaW5kZXhlZFZhbHVlc1tsXT1hLCExPT09''@;'; put 'put ''dGhpcy5vcmRlck9mSW5kZXhlcy5pbmNsdWRlcyhsKSYmdGhpcy5vcmRlck9mSW5kZXhlcy5zcGxpY2UoZCwwLGwpLHRoaXMucnVuTG9jYWxIb29rcygiY2hhbmdlIiksITApfWNsZWFyVmFsdWUobCl7dGhpcy5vcmRlck9mSW5kZXhlcz1LRSh0aGlzLm9yZGVyT2ZJbmRleGVzLFtsXSksbWwo''@;'; put 'put ''dGhpcy5pbml0VmFsdWVPckZuKT9zdXBlci5zZXRWYWx1ZUF0SW5kZXgobCx0aGlzLmluaXRWYWx1ZU9yRm4obCkpOnN1cGVyLnNldFZhbHVlQXRJbmRleChsLHRoaXMuaW5pdFZhbHVlT3JGbil9Z2V0TGVuZ3RoKCl7cmV0dXJuIHRoaXMub3JkZXJPZkluZGV4ZXMubGVuZ3RofXNldERlZmF1''@;'; put 'put ''bHRWYWx1ZXMoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06dGhpcy5pbmRleGVkVmFsdWVzLmxlbmd0aDt0aGlzLm9yZGVyT2ZJbmRleGVzLmxlbmd0aD0wLHN1cGVyLnNldERlZmF1bHRWYWx1ZXMobCl9aW5zZXJ0KGwsYSl7''@;'; put 'put ''dGhpcy5pbmRleGVkVmFsdWVzPUJLKHRoaXMuaW5kZXhlZFZhbHVlcywwLGEsdGhpcy5pbml0VmFsdWVPckZuKSx0aGlzLm9yZGVyT2ZJbmRleGVzPVZLKHRoaXMub3JkZXJPZkluZGV4ZXMsYSksc3VwZXIuaW5zZXJ0KGwsYSl9cmVtb3ZlKGwpe3RoaXMuaW5kZXhlZFZhbHVlcz1qSyh0aGlz''@;'; put 'put ''LmluZGV4ZWRWYWx1ZXMsbCksdGhpcy5vcmRlck9mSW5kZXhlcz1LRSh0aGlzLm9yZGVyT2ZJbmRleGVzLGwpLHRoaXMub3JkZXJPZkluZGV4ZXM9TksodGhpcy5vcmRlck9mSW5kZXhlcyxsKSxzdXBlci5yZW1vdmUobCl9Z2V0RW50cmllcygpe3JldHVybiB0aGlzLm9yZGVyT2ZJbmRleGVz''@;'; put 'put ''Lm1hcChsPT5bbCx0aGlzLmdldFZhbHVlQXRJbmRleChsKV0pfX1jbGFzcyBxRSBleHRlbmRzIFpte2NvbnN0cnVjdG9yKCl7c3VwZXIoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXSl9Z2V0VHJpbW1lZEluZGV4ZXMoKXtyZXR1cm4gcXUo''@;'; put 'put ''dGhpcy5nZXRWYWx1ZXMoKSwobCxhLGQpPT4oYSYmbC5wdXNoKGQpLGwpLFtdKX19Y29uc3QgSTNlPW5ldyBNYXAoW1siaGlkaW5nIixmUF0sWyJpbmRleCIsZTldLFsibGlua2VkUGh5c2ljYWxJbmRleFRvVmFsdWUiLHBQXSxbInBoeXNpY2FsSW5kZXhUb1ZhbHVlIixabV0sWyJ0cmltbWlu''@;'; put 'put ''ZyIscUVdXSk7bGV0IHpLPTA7Y2xhc3MgVUt7Y29uc3RydWN0b3IoKXshZnVuY3Rpb24ganR0KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiB6dHQoYyl7dmFyIGw9ZnVuY3Rpb24gVXR0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1By''@;'; put 'put ''aW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmlu''@;'; put 'put ''ZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEs''@;'; put 'put ''Y30odGhpcywiY29sbGVjdGlvbiIsbmV3IE1hcCl9cmVnaXN0ZXIobCxhKXshMT09PXRoaXMuY29sbGVjdGlvbi5oYXMobCkmJih0aGlzLmNvbGxlY3Rpb24uc2V0KGwsYSksYS5hZGRMb2NhbEhvb2soImNoYW5nZSIsKCk9PnRoaXMucnVuTG9jYWxIb29rcygiY2hhbmdlIixhKSkseksrPTEp''@;'; put 'put ''fXVucmVnaXN0ZXIobCl7Y29uc3QgYT10aGlzLmNvbGxlY3Rpb24uZ2V0KGwpO1BhKGEpJiYoYS5kZXN0cm95KCksdGhpcy5jb2xsZWN0aW9uLmRlbGV0ZShsKSx0aGlzLnJ1bkxvY2FsSG9va3MoImNoYW5nZSIsYSksekstPTEpfXVucmVnaXN0ZXJBbGwoKXt0aGlzLmNvbGxlY3Rpb24uZm9y''@;'; put 'put ''RWFjaCgobCxhKT0+dGhpcy51bnJlZ2lzdGVyKGEpKSx0aGlzLmNvbGxlY3Rpb24uY2xlYXIoKX1nZXQobCl7cmV0dXJuIF9jKGwpP0FycmF5LmZyb20odGhpcy5jb2xsZWN0aW9uLnZhbHVlcygpKTp0aGlzLmNvbGxlY3Rpb24uZ2V0KGwpfWdldExlbmd0aCgpe3JldHVybiB0aGlzLmNvbGxl''@;'; put 'put ''Y3Rpb24uc2l6ZX1yZW1vdmVGcm9tRXZlcnkobCl7dGhpcy5jb2xsZWN0aW9uLmZvckVhY2goYT0+e2EucmVtb3ZlKGwpfSl9aW5zZXJ0VG9FdmVyeShsLGEpe3RoaXMuY29sbGVjdGlvbi5mb3JFYWNoKGQ9PntkLmluc2VydChsLGEpfSl9aW5pdEV2ZXJ5KGwpe3RoaXMuY29sbGVjdGlvbi5m''@;'; put 'put ''b3JFYWNoKGE9PnthLmluaXQobCl9KX19ZnVuY3Rpb24gWksoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIFd0dChjKXt2YXIgbD1mdW5jdGlvbiBZdHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAh''@;'; put 'put ''PT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJl''@;'; put 'put ''cikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfVRsKFVLLHkxKTtjbGFzcyBS''@;'; put 'put ''M2UgZXh0ZW5kcyBVS3tjb25zdHJ1Y3RvcihsLGEpe3N1cGVyKCksWksodGhpcywibWVyZ2VkVmFsdWVzQ2FjaGUiLFtdKSxaSyh0aGlzLCJhZ2dyZWdhdGlvbkZ1bmN0aW9uIix2b2lkIDApLFpLKHRoaXMsImZhbGxiYWNrVmFsdWUiLHZvaWQgMCksdGhpcy5hZ2dyZWdhdGlvbkZ1bmN0aW9u''@;'; put 'put ''PWwsdGhpcy5mYWxsYmFja1ZhbHVlPWF9Z2V0TWVyZ2VkVmFsdWVzKCl7aWYoITA9PT0oIShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSl8fGFyZ3VtZW50c1swXSkpcmV0dXJuIHRoaXMubWVyZ2VkVmFsdWVzQ2FjaGU7aWYoMD09PXRoaXMuZ2V0TGVuZ3RoKCkp''@;'; put 'put ''cmV0dXJuW107Y29uc3QgYT15cyh0aGlzLmdldCgpLGY9PmYuZ2V0VmFsdWVzKCkpLGQ9W10saD1QYShhWzBdKSYmYVswXS5sZW5ndGh8fDA7Zm9yKGxldCBmPTA7ZjxoO2YrPTEpe2NvbnN0IHY9W107Zm9yKGxldCBNPTA7TTx0aGlzLmdldExlbmd0aCgpO00rPTEpdi5wdXNoKGFbTV1bZl0p''@;'; put 'put ''O2QucHVzaCh2KX1yZXR1cm4geXMoZCx0aGlzLmFnZ3JlZ2F0aW9uRnVuY3Rpb24pfWdldE1lcmdlZFZhbHVlQXRJbmRleChsLGEpe2NvbnN0IGQ9dGhpcy5nZXRNZXJnZWRWYWx1ZXMoYSlbbF07cmV0dXJuIFBhKGQpP2Q6dGhpcy5mYWxsYmFja1ZhbHVlfXVwZGF0ZUNhY2hlKCl7dGhpcy5t''@;'; put 'put ''ZXJnZWRWYWx1ZXNDYWNoZT10aGlzLmdldE1lcmdlZFZhbHVlcyghMSl9fWZ1bmN0aW9uIEwzZShjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVt''@;'; put 'put ''ZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIFdLPW5ldyBXZWFrTWFwO2NsYXNzIE8zZXtjb25zdHJ1Y3RvcigpeyFmdW5jdGlvbiBHdHQoYyxsLGEpeyhmdW5jdGlvbiAkdHQoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlh''@;'; put 'put ''bGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLnNldChjLGEpfSh0aGlzLFdLLFtdKX1zdWJzY3JpYmUobCl7cmV0dXJuIHRoaXMuYWRkTG9jYWxIb29rKCJjaGFuZ2UiLGwpLHRoaXMuX3dyaXRlKGZ1bmN0aW9uIHF0dChjLGwpe3Jl''@;'; put 'put ''dHVybiBjLmdldChMM2UoYyxsKSl9KFdLLHRoaXMpKSx0aGlzfXVuc3Vic2NyaWJlKCl7cmV0dXJuIHRoaXMucnVuTG9jYWxIb29rcygidW5zdWJzY3JpYmUiKSx0aGlzLmNsZWFyTG9jYWxIb29rcygpLHRoaXN9X3dyaXRlKGwpe3JldHVybiBsLmxlbmd0aD4wJiZ0aGlzLnJ1bkxvY2FsSG9v''@;'; put 'put ''a3MoImNoYW5nZSIsbCksdGhpc31fd3JpdGVJbml0aWFsQ2hhbmdlcyhsKXshZnVuY3Rpb24gS3R0KGMsbCxhKXtjLnNldChMM2UoYyxsKSxhKX0oV0ssdGhpcyxsKX19ZnVuY3Rpb24gUDNlKGMsbCl7Y29uc3QgYT1bXTtsZXQgZD0wLGg9MDtmb3IoO2Q8Yy5sZW5ndGgmJmg8bC5sZW5ndGg7''@;'; put 'put ''ZCsrLGgrKyljW2RdIT09bFtoXSYmYS5wdXNoKHtvcDoicmVwbGFjZSIsaW5kZXg6aCxvbGRWYWx1ZTpjW2RdLG5ld1ZhbHVlOmxbaF19KTtmb3IoO2Q8bC5sZW5ndGg7ZCsrKWEucHVzaCh7b3A6Imluc2VydCIsaW5kZXg6ZCxvbGRWYWx1ZTp2b2lkIDAsbmV3VmFsdWU6bFtkXX0pO2Zvcig7''@;'; put 'put ''aDxjLmxlbmd0aDtoKyspYS5wdXNoKHtvcDoicmVtb3ZlIixpbmRleDpoLG9sZFZhbHVlOmNbaF0sbmV3VmFsdWU6dm9pZCAwfSk7cmV0dXJuIGF9ZnVuY3Rpb24gWEUoYyxsLGEpeyhmdW5jdGlvbiBYdHQoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5p''@;'; put 'put ''dGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIFkyKGMsbCl7cmV0dXJuIGMuZ2V0KEYzZShjLGwpKX1mdW5jdGlvbiBnUChjLGwsYSl7cmV0dXJuIGMuc2V0KEYzZShjLGwpLGEpLGF9ZnVuY3Rp''@;'; put 'put ''b24gRjNlKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1UbChPM2UseTEpO3Zh''@;'; put 'put ''ciBtUD1uZXcgV2Vha01hcCxKRT1uZXcgV2Vha01hcCx2UD1uZXcgV2Vha01hcCxiUD1uZXcgV2Vha01hcCx5UD1uZXcgV2Vha01hcDtjbGFzcyBKdHR7Y29uc3RydWN0b3IoKXtsZXR7aW5pdGlhbEluZGV4VmFsdWU6bH09YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNb''@;'; put 'put ''MF0/YXJndW1lbnRzWzBdOnt9O1hFKHRoaXMsbVAsbmV3IFNldCksWEUodGhpcyxKRSxbXSksWEUodGhpcyx2UCxbXSksWEUodGhpcyxiUCwhMSksWEUodGhpcyx5UCwhMSksZ1AoeVAsdGhpcyxsPz8hMSl9Y3JlYXRlT2JzZXJ2ZXIoKXtjb25zdCBsPW5ldyBPM2U7cmV0dXJuIFkyKG1QLHRo''@;'; put 'put ''aXMpLmFkZChsKSxsLmFkZExvY2FsSG9vaygidW5zdWJzY3JpYmUiLCgpPT57WTIobVAsdGhpcykuZGVsZXRlKGwpfSksbC5fd3JpdGVJbml0aWFsQ2hhbmdlcyhQM2UoWTIoSkUsdGhpcyksWTIodlAsdGhpcykpKSxsfWVtaXQobCl7bGV0IGE9WTIodlAsdGhpcyk7KCFZMihiUCx0aGlzKXx8''@;'; put 'put ''WTIoSkUsdGhpcykubGVuZ3RoIT09bC5sZW5ndGgpJiYoMD09PWwubGVuZ3RoP2w9bmV3IEFycmF5KGEubGVuZ3RoKS5maWxsKFkyKHlQLHRoaXMpKTpnUChKRSx0aGlzLG5ldyBBcnJheShsLmxlbmd0aCkuZmlsbChZMih5UCx0aGlzKSkpLFkyKGJQLHRoaXMpfHwoZ1AoYlAsdGhpcywhMCks''@;'; put 'put ''YT1ZMihKRSx0aGlzKSkpO2NvbnN0IGQ9UDNlKGEsbCk7WTIobVAsdGhpcykuZm9yRWFjaChoPT5oLl93cml0ZShkKSksZ1AodlAsdGhpcyxsKX19ZnVuY3Rpb24gSzEoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIFF0dChjKXt2YXIgbD1mdW5jdGlvbiBlbnQoYyxsKXtpZigib2JqZWN0IiE9''@;'; put 'put ''dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3Qg''@;'; put 'put ''cmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxl''@;'; put 'put ''OiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIFlLe2NvbnN0cnVjdG9yKCl7SzEodGhpcywiaW5kZXhlc1NlcXVlbmNlIixuZXcgRDNlKSxLMSh0aGlzLCJ0cmltbWluZ01hcHNDb2xsZWN0aW9uIixuZXcgUjNlKGw9Pmwuc29tZShhPT4hMD09PWEpLCEx''@;'; put 'put ''KSksSzEodGhpcywiaGlkaW5nTWFwc0NvbGxlY3Rpb24iLG5ldyBSM2UobD0+bC5zb21lKGE9PiEwPT09YSksITEpKSxLMSh0aGlzLCJ2YXJpb3VzTWFwc0NvbGxlY3Rpb24iLG5ldyBVSyksSzEodGhpcywiaGlkaW5nQ2hhbmdlc09ic2VydmFibGUiLG5ldyBKdHQoe2luaXRpYWxJbmRleFZh''@;'; put 'put ''bHVlOiExfSkpLEsxKHRoaXMsIm5vdFRyaW1tZWRJbmRleGVzQ2FjaGUiLFtdKSxLMSh0aGlzLCJub3RIaWRkZW5JbmRleGVzQ2FjaGUiLFtdKSxLMSh0aGlzLCJpc0JhdGNoZWQiLCExKSxLMSh0aGlzLCJpbmRleGVzU2VxdWVuY2VDaGFuZ2VkIiwhMSksSzEodGhpcywiaW5kZXhlc0NoYW5n''@;'; put 'put ''ZVNvdXJjZSIsdm9pZCAwKSxLMSh0aGlzLCJ0cmltbWVkSW5kZXhlc0NoYW5nZWQiLCExKSxLMSh0aGlzLCJoaWRkZW5JbmRleGVzQ2hhbmdlZCIsITEpLEsxKHRoaXMsInJlbmRlcmFibGVQaHlzaWNhbEluZGV4ZXNDYWNoZSIsW10pLEsxKHRoaXMsImZyb21QaHlzaWNhbFRvVmlzdWFsSW5k''@;'; put 'put ''ZXhlc0NhY2hlIixuZXcgTWFwKSxLMSh0aGlzLCJmcm9tVmlzdWFsVG9SZW5kZXJhYmxlSW5kZXhlc0NhY2hlIixuZXcgTWFwKSx0aGlzLmluZGV4ZXNTZXF1ZW5jZS5hZGRMb2NhbEhvb2soImNoYW5nZSIsKCk9Pnt0aGlzLmluZGV4ZXNTZXF1ZW5jZUNoYW5nZWQ9ITAsdGhpcy51cGRhdGVD''@;'; put 'put ''YWNoZSgpLHRoaXMucnVuTG9jYWxIb29rcygiaW5kZXhlc1NlcXVlbmNlQ2hhbmdlIix0aGlzLmluZGV4ZXNDaGFuZ2VTb3VyY2UpLHRoaXMucnVuTG9jYWxIb29rcygiY2hhbmdlIix0aGlzLmluZGV4ZXNTZXF1ZW5jZSxudWxsKX0pLHRoaXMudHJpbW1pbmdNYXBzQ29sbGVjdGlvbi5hZGRM''@;'; put 'put ''b2NhbEhvb2soImNoYW5nZSIsbD0+e3RoaXMudHJpbW1lZEluZGV4ZXNDaGFuZ2VkPSEwLHRoaXMudXBkYXRlQ2FjaGUoKSx0aGlzLnJ1bkxvY2FsSG9va3MoImNoYW5nZSIsbCx0aGlzLnRyaW1taW5nTWFwc0NvbGxlY3Rpb24pfSksdGhpcy5oaWRpbmdNYXBzQ29sbGVjdGlvbi5hZGRMb2Nh''@;'; put 'put ''bEhvb2soImNoYW5nZSIsbD0+e3RoaXMuaGlkZGVuSW5kZXhlc0NoYW5nZWQ9ITAsdGhpcy51cGRhdGVDYWNoZSgpLHRoaXMucnVuTG9jYWxIb29rcygiY2hhbmdlIixsLHRoaXMuaGlkaW5nTWFwc0NvbGxlY3Rpb24pfSksdGhpcy52YXJpb3VzTWFwc0NvbGxlY3Rpb24uYWRkTG9jYWxIb29r''@;'; put 'put ''KCJjaGFuZ2UiLGw9Pnt0aGlzLnJ1bkxvY2FsSG9va3MoImNoYW5nZSIsbCx0aGlzLnZhcmlvdXNNYXBzQ29sbGVjdGlvbil9KX1zdXNwZW5kT3BlcmF0aW9ucygpe3RoaXMuaXNCYXRjaGVkPSEwfXJlc3VtZU9wZXJhdGlvbnMoKXt0aGlzLmlzQmF0Y2hlZD0hMSx0aGlzLnVwZGF0ZUNhY2hl''@;'; put 'put ''KCl9Y3JlYXRlQ2hhbmdlc09ic2VydmVyKGwpe2lmKCJoaWRpbmciIT09bCl0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIGluZGV4IG1hcCB0eXBlICIke2x9Ii5gKTtyZXR1cm4gdGhpcy5oaWRpbmdDaGFuZ2VzT2JzZXJ2YWJsZS5jcmVhdGVPYnNlcnZlcigpfWNyZWF0ZUFuZFJlZ2lz''@;'; put 'put ''dGVySW5kZXhNYXAobCxhLGQpe3JldHVybiB0aGlzLnJlZ2lzdGVyTWFwKGwsZnVuY3Rpb24gQnR0KGMpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpudWxsO2lmKCFJM2UuaGFzKGMpKXRocm93IG5ldyBFcnJvcihgVGhlIHBy''@;'; put 'put ''b3ZpZGVkIG1hcCB0eXBlICgiJHtjfSIpIGRvZXMgbm90IGV4aXN0LmApO3JldHVybiBuZXcoSTNlLmdldChjKSkobCl9KGEsZCkpfXJlZ2lzdGVyTWFwKGwsYSl7aWYodGhpcy50cmltbWluZ01hcHNDb2xsZWN0aW9uLmdldChsKXx8dGhpcy5oaWRpbmdNYXBzQ29sbGVjdGlvbi5nZXQobCl8''@;'; put 'put ''fHRoaXMudmFyaW91c01hcHNDb2xsZWN0aW9uLmdldChsKSl0aHJvdyBFcnJvcihgTWFwIHdpdGggbmFtZSAiJHtsfSIgaGFzIGJlZW4gYWxyZWFkeSByZWdpc3RlcmVkLmApO2EgaW5zdGFuY2VvZiBxRT90aGlzLnRyaW1taW5nTWFwc0NvbGxlY3Rpb24ucmVnaXN0ZXIobCxhKTphIGluc3Rh''@;'; put 'put ''bmNlb2YgZlA/dGhpcy5oaWRpbmdNYXBzQ29sbGVjdGlvbi5yZWdpc3RlcihsLGEpOnRoaXMudmFyaW91c01hcHNDb2xsZWN0aW9uLnJlZ2lzdGVyKGwsYSk7Y29uc3QgZD10aGlzLmdldE51bWJlck9mSW5kZXhlcygpO3JldHVybiBkPjAmJmEuaW5pdChkKSxhfXVucmVnaXN0ZXJNYXAobCl7''@;'; put 'put ''dGhpcy50cmltbWluZ01hcHNDb2xsZWN0aW9uLnVucmVnaXN0ZXIobCksdGhpcy5oaWRpbmdNYXBzQ29sbGVjdGlvbi51bnJlZ2lzdGVyKGwpLHRoaXMudmFyaW91c01hcHNDb2xsZWN0aW9uLnVucmVnaXN0ZXIobCl9dW5yZWdpc3RlckFsbCgpe3RoaXMudHJpbW1pbmdNYXBzQ29sbGVjdGlv''@;'; put 'put ''bi51bnJlZ2lzdGVyQWxsKCksdGhpcy5oaWRpbmdNYXBzQ29sbGVjdGlvbi51bnJlZ2lzdGVyQWxsKCksdGhpcy52YXJpb3VzTWFwc0NvbGxlY3Rpb24udW5yZWdpc3RlckFsbCgpfWdldFBoeXNpY2FsRnJvbVZpc3VhbEluZGV4KGwpe2NvbnN0IGE9dGhpcy5ub3RUcmltbWVkSW5kZXhlc0Nh''@;'; put 'put ''Y2hlW2xdO3JldHVybiBQYShhKT9hOm51bGx9Z2V0UGh5c2ljYWxGcm9tUmVuZGVyYWJsZUluZGV4KGwpe2NvbnN0IGE9dGhpcy5yZW5kZXJhYmxlUGh5c2ljYWxJbmRleGVzQ2FjaGVbbF07cmV0dXJuIFBhKGEpP2E6bnVsbH1nZXRWaXN1YWxGcm9tUGh5c2ljYWxJbmRleChsKXtjb25zdCBh''@;'; put 'put ''PXRoaXMuZnJvbVBoeXNpY2FsVG9WaXN1YWxJbmRleGVzQ2FjaGUuZ2V0KGwpO3JldHVybiBQYShhKT9hOm51bGx9Z2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChsKXtyZXR1cm4gdGhpcy5nZXRWaXN1YWxGcm9tUGh5c2ljYWxJbmRleCh0aGlzLmdldFBoeXNpY2FsRnJvbVJlbmRlcmFi''@;'; put 'put ''bGVJbmRleChsKSl9Z2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChsKXtjb25zdCBhPXRoaXMuZnJvbVZpc3VhbFRvUmVuZGVyYWJsZUluZGV4ZXNDYWNoZS5nZXQobCk7cmV0dXJuIFBhKGEpP2E6bnVsbH1nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgobCxhKXtsZXQgZD1hcmd1bWVudHMu''@;'; put 'put ''bGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdO2lmKG51bGw9PT10aGlzLmdldFBoeXNpY2FsRnJvbVZpc3VhbEluZGV4KGwpKXJldHVybiBudWxsO2lmKHRoaXMuZnJvbVZpc3VhbFRvUmVuZGVyYWJsZUluZGV4ZXNDYWNoZS5oYXMobCkpcmV0dXJuIGw7Y29u''@;'; put 'put ''c3QgZj1BcnJheS5mcm9tKHRoaXMuZnJvbVZpc3VhbFRvUmVuZGVyYWJsZUluZGV4ZXNDYWNoZS5rZXlzKCkpO2xldCB2PS0xO3JldHVybiB2PWE+MD9mLmZpbmRJbmRleChNPT5NPmwpOmYucmV2ZXJzZSgpLmZpbmRJbmRleChNPT5NPGwpLC0xPT09dj9kP3RoaXMuZ2V0TmVhcmVzdE5vdEhp''@;'; put 'put ''ZGRlbkluZGV4KGwsLWEsITEpOm51bGw6Zlt2XX1pbml0VG9MZW5ndGgoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06dGhpcy5nZXROdW1iZXJPZkluZGV4ZXMoKTt0aGlzLm5vdFRyaW1tZWRJbmRleGVzQ2FjaGU9Wy4uLm5l''@;'; put 'put ''dyBBcnJheShsKS5rZXlzKCldLHRoaXMubm90SGlkZGVuSW5kZXhlc0NhY2hlPVsuLi5uZXcgQXJyYXkobCkua2V5cygpXSx0aGlzLnN1c3BlbmRPcGVyYXRpb25zKCksdGhpcy5pbmRleGVzQ2hhbmdlU291cmNlPSJpbml0Iix0aGlzLmluZGV4ZXNTZXF1ZW5jZS5pbml0KGwpLHRoaXMuaW5k''@;'; put 'put ''ZXhlc0NoYW5nZVNvdXJjZT12b2lkIDAsdGhpcy50cmltbWluZ01hcHNDb2xsZWN0aW9uLmluaXRFdmVyeShsKSx0aGlzLnJlc3VtZU9wZXJhdGlvbnMoKSx0aGlzLnN1c3BlbmRPcGVyYXRpb25zKCksdGhpcy5oaWRpbmdNYXBzQ29sbGVjdGlvbi5pbml0RXZlcnkobCksdGhpcy52YXJpb3Vz''@;'; put 'put ''TWFwc0NvbGxlY3Rpb24uaW5pdEV2ZXJ5KGwpLHRoaXMucmVzdW1lT3BlcmF0aW9ucygpLHRoaXMucnVuTG9jYWxIb29rcygiaW5pdCIpfWZpdFRvTGVuZ3RoKGwpe2NvbnN0IGE9dGhpcy5nZXROdW1iZXJPZkluZGV4ZXMoKTtpZihsPGEpe2NvbnN0IGQ9Wy4uLkFycmF5KHRoaXMuZ2V0TnVt''@;'; put 'put ''YmVyT2ZJbmRleGVzKCktbCkua2V5cygpXS5tYXAoaD0+aCtsKTt0aGlzLnJlbW92ZUluZGV4ZXMoZCl9ZWxzZSB0aGlzLmluc2VydEluZGV4ZXMoYSxsLWEpfWdldEluZGV4ZXNTZXF1ZW5jZSgpe3JldHVybiB0aGlzLmluZGV4ZXNTZXF1ZW5jZS5nZXRWYWx1ZXMoKX1zZXRJbmRleGVzU2Vx''@;'; put 'put ''dWVuY2UobCl7dm9pZCAwPT09dGhpcy5pbmRleGVzQ2hhbmdlU291cmNlJiYodGhpcy5pbmRleGVzQ2hhbmdlU291cmNlPSJ1cGRhdGUiKSx0aGlzLmluZGV4ZXNTZXF1ZW5jZS5zZXRWYWx1ZXMobCksInVwZGF0ZSI9PT10aGlzLmluZGV4ZXNDaGFuZ2VTb3VyY2UmJih0aGlzLmluZGV4ZXND''@;'; put 'put ''aGFuZ2VTb3VyY2U9dm9pZCAwKX1nZXROb3RUcmltbWVkSW5kZXhlcygpe3JldHVybiEwPT09KCEoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0pfHxhcmd1bWVudHNbMF0pP3RoaXMubm90VHJpbW1lZEluZGV4ZXNDYWNoZTp0aGlzLmdldEluZGV4ZXNTZXF1ZW5j''@;'; put 'put ''ZSgpLmZpbHRlcihkPT4hMT09PXRoaXMuaXNUcmltbWVkKGQpKX1nZXROb3RUcmltbWVkSW5kZXhlc0xlbmd0aCgpe3JldHVybiB0aGlzLmdldE5vdFRyaW1tZWRJbmRleGVzKCkubGVuZ3RofWdldE5vdEhpZGRlbkluZGV4ZXMoKXtyZXR1cm4hMD09PSghKGFyZ3VtZW50cy5sZW5ndGg+MCYm''@;'; put 'put ''dm9pZCAwIT09YXJndW1lbnRzWzBdKXx8YXJndW1lbnRzWzBdKT90aGlzLm5vdEhpZGRlbkluZGV4ZXNDYWNoZTp0aGlzLmdldEluZGV4ZXNTZXF1ZW5jZSgpLmZpbHRlcihkPT4hMT09PXRoaXMuaXNIaWRkZW4oZCkpfWdldE5vdEhpZGRlbkluZGV4ZXNMZW5ndGgoKXtyZXR1cm4gdGhpcy5n''@;'; put 'put ''ZXROb3RIaWRkZW5JbmRleGVzKCkubGVuZ3RofWdldFJlbmRlcmFibGVJbmRleGVzKCl7cmV0dXJuITA9PT0oIShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSl8fGFyZ3VtZW50c1swXSk/dGhpcy5yZW5kZXJhYmxlUGh5c2ljYWxJbmRleGVzQ2FjaGU6dGhpcy5n''@;'; put 'put ''ZXROb3RUcmltbWVkSW5kZXhlcygpLmZpbHRlcihkPT4hMT09PXRoaXMuaXNIaWRkZW4oZCkpfWdldFJlbmRlcmFibGVJbmRleGVzTGVuZ3RoKCl7cmV0dXJuIHRoaXMuZ2V0UmVuZGVyYWJsZUluZGV4ZXMoKS5sZW5ndGh9Z2V0TnVtYmVyT2ZJbmRleGVzKCl7cmV0dXJuIHRoaXMuZ2V0SW5k''@;'; put 'put ''ZXhlc1NlcXVlbmNlKCkubGVuZ3RofW1vdmVJbmRleGVzKGwsYSl7Im51bWJlciI9PXR5cGVvZiBsJiYobD1bbF0pO2NvbnN0IGQ9eXMobCxaPT50aGlzLmdldFBoeXNpY2FsRnJvbVZpc3VhbEluZGV4KFopKSxoPXRoaXMuZ2V0Tm90VHJpbW1lZEluZGV4ZXNMZW5ndGgoKSxmPWwubGVuZ3Ro''@;'; put 'put ''LHY9S0UodGhpcy5nZXRJbmRleGVzU2VxdWVuY2UoKSxkKSxNPXYuZmlsdGVyKFo9PiExPT09dGhpcy5pc1RyaW1tZWQoWikpO2xldCBEPXYuaW5kZXhPZihNW00ubGVuZ3RoLTFdKSsxO2ErZjxoJiYoRD12LmluZGV4T2YoTVthXSkpLHRoaXMuaW5kZXhlc0NoYW5nZVNvdXJjZT0ibW92ZSIs''@;'; put 'put ''dGhpcy5zZXRJbmRleGVzU2VxdWVuY2UoSEsodixELGQpKSx0aGlzLmluZGV4ZXNDaGFuZ2VTb3VyY2U9dm9pZCAwfWlzVHJpbW1lZChsKXtyZXR1cm4gdGhpcy50cmltbWluZ01hcHNDb2xsZWN0aW9uLmdldE1lcmdlZFZhbHVlQXRJbmRleChsKX1pc0hpZGRlbihsKXtyZXR1cm4gdGhpcy5o''@;'; put 'put ''aWRpbmdNYXBzQ29sbGVjdGlvbi5nZXRNZXJnZWRWYWx1ZUF0SW5kZXgobCl9aW5zZXJ0SW5kZXhlcyhsLGEpe2NvbnN0IGQ9dGhpcy5nZXROb3RUcmltbWVkSW5kZXhlcygpW2xdLGg9UGEoZCk/ZDp0aGlzLmdldE51bWJlck9mSW5kZXhlcygpLGY9dGhpcy5nZXRJbmRleGVzU2VxdWVuY2Uo''@;'; put 'put ''KS5pbmNsdWRlcyhkKT90aGlzLmdldEluZGV4ZXNTZXF1ZW5jZSgpLmluZGV4T2YoZCk6dGhpcy5nZXROdW1iZXJPZkluZGV4ZXMoKSx2PXlzKG5ldyBBcnJheShhKS5maWxsKGgpLChNLEQpPT5NK0QpO3RoaXMuc3VzcGVuZE9wZXJhdGlvbnMoKSx0aGlzLmluZGV4ZXNDaGFuZ2VTb3VyY2U9''@;'; put 'put ''Imluc2VydCIsdGhpcy5pbmRleGVzU2VxdWVuY2UuaW5zZXJ0KGYsdiksdGhpcy5pbmRleGVzQ2hhbmdlU291cmNlPXZvaWQgMCx0aGlzLnRyaW1taW5nTWFwc0NvbGxlY3Rpb24uaW5zZXJ0VG9FdmVyeShmLHYpLHRoaXMuaGlkaW5nTWFwc0NvbGxlY3Rpb24uaW5zZXJ0VG9FdmVyeShmLHYp''@;'; put 'put ''LHRoaXMudmFyaW91c01hcHNDb2xsZWN0aW9uLmluc2VydFRvRXZlcnkoZix2KSx0aGlzLnJlc3VtZU9wZXJhdGlvbnMoKX1yZW1vdmVJbmRleGVzKGwpe3RoaXMuc3VzcGVuZE9wZXJhdGlvbnMoKSx0aGlzLmluZGV4ZXNDaGFuZ2VTb3VyY2U9InJlbW92ZSIsdGhpcy5pbmRleGVzU2VxdWVu''@;'; put 'put ''Y2UucmVtb3ZlKGwpLHRoaXMuaW5kZXhlc0NoYW5nZVNvdXJjZT12b2lkIDAsdGhpcy50cmltbWluZ01hcHNDb2xsZWN0aW9uLnJlbW92ZUZyb21FdmVyeShsKSx0aGlzLmhpZGluZ01hcHNDb2xsZWN0aW9uLnJlbW92ZUZyb21FdmVyeShsKSx0aGlzLnZhcmlvdXNNYXBzQ29sbGVjdGlvbi5y''@;'; put 'put ''ZW1vdmVGcm9tRXZlcnkobCksdGhpcy5yZXN1bWVPcGVyYXRpb25zKCl9dXBkYXRlQ2FjaGUoKXsoITA9PT0oYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXSl8fCExPT09dGhpcy5pc0JhdGNoZWQmJiEwPT09KHRoaXMuaW5kZXhlc1NlcXVl''@;'; put 'put ''bmNlQ2hhbmdlZHx8dGhpcy50cmltbWVkSW5kZXhlc0NoYW5nZWR8fHRoaXMuaGlkZGVuSW5kZXhlc0NoYW5nZWQpKSYmKHRoaXMudHJpbW1pbmdNYXBzQ29sbGVjdGlvbi51cGRhdGVDYWNoZSgpLHRoaXMuaGlkaW5nTWFwc0NvbGxlY3Rpb24udXBkYXRlQ2FjaGUoKSx0aGlzLm5vdFRyaW1t''@;'; put 'put ''ZWRJbmRleGVzQ2FjaGU9dGhpcy5nZXROb3RUcmltbWVkSW5kZXhlcyghMSksdGhpcy5ub3RIaWRkZW5JbmRleGVzQ2FjaGU9dGhpcy5nZXROb3RIaWRkZW5JbmRleGVzKCExKSx0aGlzLnJlbmRlcmFibGVQaHlzaWNhbEluZGV4ZXNDYWNoZT10aGlzLmdldFJlbmRlcmFibGVJbmRleGVzKCEx''@;'; put 'put ''KSx0aGlzLmNhY2hlRnJvbVBoeXNpY2FsVG9WaXN1YWxJbmRleGVzKCksdGhpcy5jYWNoZUZyb21WaXN1YWxUb1JlbmRlcmFibGVJbmRleGVzKCksdGhpcy5oaWRkZW5JbmRleGVzQ2hhbmdlZCYmdGhpcy5oaWRpbmdDaGFuZ2VzT2JzZXJ2YWJsZS5lbWl0KHRoaXMuaGlkaW5nTWFwc0NvbGxl''@;'; put 'put ''Y3Rpb24uZ2V0TWVyZ2VkVmFsdWVzKCkpLHRoaXMucnVuTG9jYWxIb29rcygiY2FjaGVVcGRhdGVkIix7aW5kZXhlc1NlcXVlbmNlQ2hhbmdlZDp0aGlzLmluZGV4ZXNTZXF1ZW5jZUNoYW5nZWQsdHJpbW1lZEluZGV4ZXNDaGFuZ2VkOnRoaXMudHJpbW1lZEluZGV4ZXNDaGFuZ2VkLGhpZGRl''@;'; put 'put ''bkluZGV4ZXNDaGFuZ2VkOnRoaXMuaGlkZGVuSW5kZXhlc0NoYW5nZWR9KSx0aGlzLmluZGV4ZXNTZXF1ZW5jZUNoYW5nZWQ9ITEsdGhpcy50cmltbWVkSW5kZXhlc0NoYW5nZWQ9ITEsdGhpcy5oaWRkZW5JbmRleGVzQ2hhbmdlZD0hMSl9Y2FjaGVGcm9tUGh5c2ljYWxUb1Zpc3VhbEluZGV4''@;'; put 'put ''ZXMoKXtjb25zdCBsPXRoaXMuZ2V0Tm90VHJpbW1lZEluZGV4ZXNMZW5ndGgoKTt0aGlzLmZyb21QaHlzaWNhbFRvVmlzdWFsSW5kZXhlc0NhY2hlLmNsZWFyKCk7Zm9yKGxldCBhPTA7YTxsO2ErPTEpe2NvbnN0IGQ9dGhpcy5nZXRQaHlzaWNhbEZyb21WaXN1YWxJbmRleChhKTt0aGlzLmZy''@;'; put 'put ''b21QaHlzaWNhbFRvVmlzdWFsSW5kZXhlc0NhY2hlLnNldChkLGEpfX1jYWNoZUZyb21WaXN1YWxUb1JlbmRlcmFibGVJbmRleGVzKCl7Y29uc3QgbD10aGlzLmdldFJlbmRlcmFibGVJbmRleGVzTGVuZ3RoKCk7dGhpcy5mcm9tVmlzdWFsVG9SZW5kZXJhYmxlSW5kZXhlc0NhY2hlLmNsZWFy''@;'; put 'put ''KCk7Zm9yKGxldCBhPTA7YTxsO2ErPTEpe2NvbnN0IGQ9dGhpcy5nZXRQaHlzaWNhbEZyb21SZW5kZXJhYmxlSW5kZXgoYSksaD10aGlzLmdldFZpc3VhbEZyb21QaHlzaWNhbEluZGV4KGQpO3RoaXMuZnJvbVZpc3VhbFRvUmVuZGVyYWJsZUluZGV4ZXNDYWNoZS5zZXQoaCxhKX19fWZ1bmN0''@;'; put 'put ''aW9uIEgzZShjKXtjb25zdCBhPS9eKFthLXpBLVpdezJ9KS0oW2EtekEtWl17Mn0pJC8uZXhlYyhjKTtyZXR1cm4gYT9gJHthWzFdLnRvTG93ZXJDYXNlKCl9LSR7YVsyXS50b1VwcGVyQ2FzZSgpfWA6Y31mdW5jdGlvbiBOM2UoYyl7UGEoYykmJk4kKGdsYExhbmd1YWdlIHdpdGggY29kZSAi''@;'; put 'put ''JHtjfSIgd2FzIG5vdCBmb3VuZC4gWW91IHNob3VsZCByZWdpc3RlciBwYXJ0aWN1bGFyIGxhbmd1YWdlXHgyMAogICAgYmVmb3JlIHVzaW5nIGl0LiBSZWFkIG1vcmUgYWJvdXQgdGhpcyBpc3N1ZSBhdDogaHR0cHM6Ly9kb2NzLmhhbmRzb250YWJsZS5jb20vaTE4bi9taXNzaW5nLWxhbmd1''@;'; put 'put ''YWdlLWNvZGUuYCl9VGwoWUsseTEpO2NvbnN0e3JlZ2lzdGVyOnJudCxnZXRWYWx1ZXM6aW50fT1yMygicGhyYXNlRm9ybWF0dGVycyIpOyFmdW5jdGlvbiBhbnQoYyxsKXtybnQoYyxsKX0oInBsdXJhbGl6ZSIsZnVuY3Rpb24gbm50KGMsbCl7cmV0dXJuIEFycmF5LmlzQXJyYXkoYykmJk51''@;'; put 'put ''bWJlci5pc0ludGVnZXIobCk/Y1tsXTpjfSk7Y29uc3QgVjNlPSJDb250ZXh0TWVudTppdGVtcyIsR0s9YCR7VjNlfS5ub0l0ZW1zYCwkSz1gJHtWM2V9Lmluc2VydFJvd0Fib3ZlYCxLSz1gJHtWM2V9Lmluc2VydFJvd0JlbG93YCxxSz1gJHtWM2V9Lmluc2VydENvbHVtbk9uVGhlTGVmdGAs''@;'; put 'put ''WEs9YCR7VjNlfS5pbnNlcnRDb2x1bW5PblRoZVJpZ2h0YCxKSz1gJHtWM2V9LnJlbW92ZVJvd2AsUUs9YCR7VjNlfS5yZW1vdmVDb2x1bW5gLGVxPWAke1YzZX0udW5kb2AsdHE9YCR7VjNlfS5yZWRvYCxfUD1gJHtWM2V9LnJlYWRPbmx5YCxucT1gJHtWM2V9LmNsZWFyQ29sdW1uYCxycT1g''@;'; put 'put ''JHtWM2V9LmNvcHlgLGlxPWAke1YzZX0uY29weVdpdGhIZWFkZXJzYCxhcT1gJHtWM2V9LmNvcHlXaXRoR3JvdXBIZWFkZXJzYCxvcT1gJHtWM2V9LmNvcHlIZWFkZXJzT25seWAsc3E9YCR7VjNlfS5jdXRgLGxxPWAke1YzZX0uZnJlZXplQ29sdW1uYCxjcT1gJHtWM2V9LnVuZnJlZXplQ29s''@;'; put 'put ''dW1uYCx1cT1gJHtWM2V9Lm1lcmdlQ2VsbHNgLGRxPWAke1YzZX0udW5tZXJnZUNlbGxzYCxocT1gJHtWM2V9LmFkZENvbW1lbnRgLGZxPWAke1YzZX0uZWRpdENvbW1lbnRgLHBxPWAke1YzZX0ucmVtb3ZlQ29tbWVudGAsZ3E9YCR7VjNlfS5yZWFkT25seUNvbW1lbnRgLG1xPWAke1YzZX0u''@;'; put 'put ''YWxpZ25gLHZxPWAke1YzZX0uYWxpZ24ubGVmdGAsYnE9YCR7VjNlfS5hbGlnbi5jZW50ZXJgLHlxPWAke1YzZX0uYWxpZ24ucmlnaHRgLF9xPWAke1YzZX0uYWxpZ24uanVzdGlmeWAsd3E9YCR7VjNlfS5hbGlnbi50b3BgLENxPWAke1YzZX0uYWxpZ24ubWlkZGxlYCxTcT1gJHtWM2V9LmFs''@;'; put 'put ''aWduLmJvdHRvbWAsTXE9YCR7VjNlfS5ib3JkZXJzYCx4cT1gJHtWM2V9LmJvcmRlcnMudG9wYCxFcT1gJHtWM2V9LmJvcmRlcnMucmlnaHRgLFRxPWAke1YzZX0uYm9yZGVycy5ib3R0b21gLEFxPWAke1YzZX0uYm9yZGVycy5sZWZ0YCxrcT1gJHtWM2V9LmJvcmRlcnMucmVtb3ZlYCxEcT1g''@;'; put 'put ''JHtWM2V9Lm5lc3RlZEhlYWRlcnMuaW5zZXJ0Q2hpbGRSb3dgLElxPWAke1YzZX0ubmVzdGVkSGVhZGVycy5kZXRhY2hGcm9tUGFyZW50YCxScT1gJHtWM2V9LmhpZGVDb2x1bW5gLExxPWAke1YzZX0uc2hvd0NvbHVtbmAsT3E9YCR7VjNlfS5oaWRlUm93YCxQcT1gJHtWM2V9LnNob3dSb3dg''@;'; put 'put ''LHExPSJGaWx0ZXJzOiIsV2M9YCR7cTF9Y29uZGl0aW9uc2Asd1A9YCR7V2N9Lm5vbmVgLEZxPWAke1djfS5pc0VtcHR5YCxIcT1gJHtXY30uaXNOb3RFbXB0eWAsTnE9YCR7V2N9LmlzRXF1YWxUb2AsVnE9YCR7V2N9LmlzTm90RXF1YWxUb2AsQnE9YCR7V2N9LmJlZ2luc1dpdGhgLGpxPWAk''@;'; put 'put ''e1djfS5lbmRzV2l0aGAsenE9YCR7V2N9LmNvbnRhaW5zYCxVcT1gJHtXY30uZG9lc05vdENvbnRhaW5gLHNudD1gJHtXY30uYnlWYWx1ZWAsWnE9YCR7V2N9LmdyZWF0ZXJUaGFuYCxXcT1gJHtXY30uZ3JlYXRlclRoYW5PckVxdWFsVG9gLFlxPWAke1djfS5sZXNzVGhhbmAsR3E9YCR7V2N9''@;'; put 'put ''Lmxlc3NUaGFuT3JFcXVhbFRvYCwkcT1gJHtXY30uaXNCZXR3ZWVuYCxLcT1gJHtXY30uaXNOb3RCZXR3ZWVuYCxxcT1gJHtXY30uYWZ0ZXJgLFhxPWAke1djfS5iZWZvcmVgLEpxPWAke1djfS50b2RheWAsUXE9YCR7V2N9LnRvbW9ycm93YCxlWD1gJHtXY30ueWVzdGVyZGF5YCx0WD1gJHtx''@;'; put 'put ''MX1sYWJlbHMuZmlsdGVyQnlDb25kaXRpb25gLG5YPWAke3ExfWxhYmVscy5maWx0ZXJCeVZhbHVlYCxyWD1gJHtxMX1sYWJlbHMuY29uanVuY3Rpb25gLENQPWAke3ExfWxhYmVscy5kaXNqdW5jdGlvbmAsU1A9YCR7cTF9dmFsdWVzLmJsYW5rQ2VsbHNgLGlYPWAke3ExfWJ1dHRvbnMuc2Vs''@;'; put 'put ''ZWN0QWxsYCxhWD1gJHtxMX1idXR0b25zLmNsZWFyYCxvWD1gJHtxMX1idXR0b25zLm9rYCxzWD1gJHtxMX1idXR0b25zLmNhbmNlbGAsbFg9YCR7cTF9YnV0dG9ucy5wbGFjZWhvbGRlci5zZWFyY2hgLGNYPWAke3ExfWJ1dHRvbnMucGxhY2Vob2xkZXIudmFsdWVgLHVYPWAke3ExfWJ1dHRv''@;'; put 'put ''bnMucGxhY2Vob2xkZXIuc2Vjb25kVmFsdWVgLGRYPSJDaGVja2JveFJlbmRlcmVyOiIsaFg9YCR7ZFh9Y2hlY2tlZGAsZlg9YCR7ZFh9dW5jaGVja2VkYCxCM2U9e2xhbmd1YWdlQ29kZToiZW4tVVMiLFtHS106Ik5vIGF2YWlsYWJsZSBvcHRpb25zIixbJEtdOiJJbnNlcnQgcm93IGFib3Zl''@;'; put 'put ''IixbS0tdOiJJbnNlcnQgcm93IGJlbG93IixbcUtdOiJJbnNlcnQgY29sdW1uIGxlZnQiLFtYS106Ikluc2VydCBjb2x1bW4gcmlnaHQiLFtKS106WyJSZW1vdmUgcm93IiwiUmVtb3ZlIHJvd3MiXSxbUUtdOlsiUmVtb3ZlIGNvbHVtbiIsIlJlbW92ZSBjb2x1bW5zIl0sW2VxXToiVW5kbyIs''@;'; put 'put ''W3RxXToiUmVkbyIsW19QXToiUmVhZCBvbmx5IixbbnFdOiJDbGVhciBjb2x1bW4iLFttcV06IkFsaWdubWVudCIsW3ZxXToiTGVmdCIsW2JxXToiQ2VudGVyIixbeXFdOiJSaWdodCIsW19xXToiSnVzdGlmeSIsW3dxXToiVG9wIixbQ3FdOiJNaWRkbGUiLFtTcV06IkJvdHRvbSIsW2xxXToi''@;'; put 'put ''RnJlZXplIGNvbHVtbiIsW2NxXToiVW5mcmVlemUgY29sdW1uIixbTXFdOiJCb3JkZXJzIixbeHFdOiJUb3AiLFtFcV06IlJpZ2h0IixbVHFdOiJCb3R0b20iLFtBcV06IkxlZnQiLFtrcV06IlJlbW92ZSBib3JkZXIocykiLFtocV06IkFkZCBjb21tZW50IixbZnFdOiJFZGl0IGNvbW1lbnQi''@;'; put 'put ''LFtwcV06IkRlbGV0ZSBjb21tZW50IixbZ3FdOiJSZWFkLW9ubHkgY29tbWVudCIsW3VxXToiTWVyZ2UgY2VsbHMiLFtkcV06IlVubWVyZ2UgY2VsbHMiLFtycV06IkNvcHkiLFtpcV06WyJDb3B5IHdpdGggaGVhZGVyIiwiQ29weSB3aXRoIGhlYWRlcnMiXSxbYXFdOlsiQ29weSB3aXRoIGdy''@;'; put 'put ''b3VwIGhlYWRlciIsIkNvcHkgd2l0aCBncm91cCBoZWFkZXJzIl0sW29xXTpbIkNvcHkgaGVhZGVyIG9ubHkiLCJDb3B5IGhlYWRlcnMgb25seSJdLFtzcV06IkN1dCIsW0RxXToiSW5zZXJ0IGNoaWxkIHJvdyIsW0lxXToiRGV0YWNoIGZyb20gcGFyZW50IixbUnFdOlsiSGlkZSBjb2x1bW4i''@;'; put 'put ''LCJIaWRlIGNvbHVtbnMiXSxbTHFdOlsiU2hvdyBjb2x1bW4iLCJTaG93IGNvbHVtbnMiXSxbT3FdOlsiSGlkZSByb3ciLCJIaWRlIHJvd3MiXSxbUHFdOlsiU2hvdyByb3ciLCJTaG93IHJvd3MiXSxbd1BdOiJOb25lIixbRnFdOiJJcyBlbXB0eSIsW0hxXToiSXMgbm90IGVtcHR5IixbTnFd''@;'; put 'put ''OiJJcyBlcXVhbCB0byIsW1ZxXToiSXMgbm90IGVxdWFsIHRvIixbQnFdOiJCZWdpbnMgd2l0aCIsW2pxXToiRW5kcyB3aXRoIixbenFdOiJDb250YWlucyIsW1VxXToiRG9lcyBub3QgY29udGFpbiIsW1pxXToiR3JlYXRlciB0aGFuIixbV3FdOiJHcmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8i''@;'; put 'put ''LFtZcV06Ikxlc3MgdGhhbiIsW0dxXToiTGVzcyB0aGFuIG9yIGVxdWFsIHRvIixbJHFdOiJJcyBiZXR3ZWVuIixbS3FdOiJJcyBub3QgYmV0d2VlbiIsW3FxXToiQWZ0ZXIiLFtYcV06IkJlZm9yZSIsW0pxXToiVG9kYXkiLFtRcV06IlRvbW9ycm93IixbZVhdOiJZZXN0ZXJkYXkiLFtTUF06''@;'; put 'put ''IkJsYW5rIGNlbGxzIixbdFhdOiJGaWx0ZXIgYnkgY29uZGl0aW9uIixbblhdOiJGaWx0ZXIgYnkgdmFsdWUiLFtyWF06IkFuZCIsW0NQXToiT3IiLFtpWF06IlNlbGVjdCBhbGwiLFthWF06IkNsZWFyIixbb1hdOiJPSyIsW3NYXToiQ2FuY2VsIixbbFhdOiJTZWFyY2giLFtjWF06IlZhbHVl''@;'; put 'put ''IixbdVhdOiJTZWNvbmQgdmFsdWUiLFtoWF06IkNoZWNrZWQiLFtmWF06IlVuY2hlY2tlZCJ9LGxudD1XLHBYPUIzZS5sYW5ndWFnZUNvZGUse3JlZ2lzdGVyOmNudCxnZXRJdGVtOmozZSxoYXNJdGVtOnVudCxnZXRWYWx1ZXM6ZG50fT1yMygibGFuZ3VhZ2VzRGljdGlvbmFyaWVzIik7ZnVu''@;'; put 'put ''Y3Rpb24gejNlKGMsbCl7bGV0IGE9YyxkPWw7cmV0dXJuIHFvKGMpJiYoZD1jLGE9ZC5sYW5ndWFnZUNvZGUpLGZ1bmN0aW9uIGhudChjLGwpe2MhPT1wWCYmZnVuY3Rpb24gdG50KGMsbCl7WG8obCwoYSxkKT0+e19jKGNbZF0pJiYoY1tkXT1hKX0pfShsLGozZShwWCkpfShhLGQpLGNudChh''@;'; put 'put ''LGcxKGQpKSxnMShkKX1mdW5jdGlvbiBVM2UoYyl7cmV0dXJuIGdYKGMpP2cxKGozZShjKSk6bnVsbH1mdW5jdGlvbiBnWChjKXtyZXR1cm4gdW50KGMpfWZ1bmN0aW9uIFozZShjLGwsYSl7Y29uc3QgZD1VM2UoYyk7aWYobnVsbD09PWQpcmV0dXJuIG51bGw7Y29uc3QgaD1kW2xdO2lmKF9j''@;'; put 'put ''KGgpKXJldHVybiBudWxsO2NvbnN0IGY9ZnVuY3Rpb24gcG50KGMsbCl7bGV0IGE9YztyZXR1cm4gWW4oZnVuY3Rpb24gb250KCl7cmV0dXJuIGludCgpfSgpLGQ9PnthPWQoYyxsKX0pLGF9KGgsYSk7cmV0dXJuIEFycmF5LmlzQXJyYXkoZik/ZlswXTpmfXozZShCM2UpO2NvbnN0IFczZT0i''@;'; put 'put ''YWN0aXZlLWhlYWRlciIsbVg9ImhlYWRlciIsdlg9ImFyZWEiLFFFPSJmb2N1cyI7Y2xhc3MgWTNle2NvbnN0cnVjdG9yKGwsYSl7dGhpcy5zZXR0aW5ncz1sLHRoaXMuY2VsbFJhbmdlPWF8fG51bGx9aXNFbXB0eSgpe3JldHVybiBudWxsPT09dGhpcy5jZWxsUmFuZ2V9YWRkKGwpe3JldHVy''@;'; put 'put ''biB0aGlzLmlzRW1wdHkoKT90aGlzLmNlbGxSYW5nZT10aGlzLnNldHRpbmdzLmNyZWF0ZUNlbGxSYW5nZShsKTp0aGlzLmNlbGxSYW5nZS5leHBhbmQobCksdGhpc31yZXBsYWNlKGwsYSl7aWYoIXRoaXMuaXNFbXB0eSgpKXtpZih0aGlzLmNlbGxSYW5nZS5mcm9tLmlzRXF1YWwobCkpcmV0''@;'; put 'put ''dXJuIHRoaXMuY2VsbFJhbmdlLmZyb209YSwhMDtpZih0aGlzLmNlbGxSYW5nZS50by5pc0VxdWFsKGwpKXJldHVybiB0aGlzLmNlbGxSYW5nZS50bz1hLCEwfXJldHVybiExfWNsZWFyKCl7cmV0dXJuIHRoaXMuY2VsbFJhbmdlPW51bGwsdGhpc31nZXRDb3JuZXJzKCl7Y29uc3QgbD10aGlz''@;'; put 'put ''LmNlbGxSYW5nZS5nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCksYT10aGlzLmNlbGxSYW5nZS5nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpO3JldHVybltsLnJvdyxsLmNvbCxhLnJvdyxhLmNvbF19ZGVzdHJveSgpe3RoaXMucnVuTG9jYWxIb29rcygiZGVzdHJveSIpfX1UbChZM2UseTEpO2Nv''@;'; put 'put ''bnN0IF9udD1ZM2U7Y29uc3QgeGc9Y2xhc3MgTW50IGV4dGVuZHMgX250e2NvbnN0cnVjdG9yKGwsYSl7c3VwZXIobCxudWxsKSxmdW5jdGlvbiB3bnQoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIENudChjKXt2YXIgbD1mdW5jdGlvbiBTbnQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8''@;'; put 'put ''fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEg''@;'; put 'put ''cHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZp''@;'; put 'put ''Z3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfSh0aGlzLCJ2aXN1YWxDZWxsUmFuZ2UiLG51bGwpLHRoaXMudmlzdWFsQ2VsbFJhbmdlPWF8fG51bGwsdGhpcy5jb21taXQoKX1hZGQobCl7cmV0dXJuIG51bGw9PT10aGlzLnZpc3VhbENlbGxSYW5nZT90aGlzLnZpc3VhbENlbGxS''@;'; put 'put ''YW5nZT10aGlzLnNldHRpbmdzLmNyZWF0ZUNlbGxSYW5nZShsKTp0aGlzLnZpc3VhbENlbGxSYW5nZS5leHBhbmQobCksdGhpc31jbGVhcigpe3JldHVybiB0aGlzLnZpc3VhbENlbGxSYW5nZT1udWxsLHN1cGVyLmNsZWFyKCl9dHJpbVRvVmlzaWJsZUNlbGxzUmFuZ2VPbmx5KGwpe2xldHtm''@;'; put 'put ''cm9tOmEsdG86ZH09bCxoPXRoaXMuZ2V0TmVhcmVzdE5vdEhpZGRlbkNvb3JkcyhhLDEpLGY9dGhpcy5nZXROZWFyZXN0Tm90SGlkZGVuQ29vcmRzKGQsLTEpO3JldHVybiBudWxsPT09aHx8bnVsbD09PWY/bnVsbDooKGgucm93PmYucm93fHxoLmNvbD5mLmNvbCkmJihoPWEsZj1kKSx0aGlz''@;'; put 'put ''LnNldHRpbmdzLmNyZWF0ZUNlbGxSYW5nZShoLGgsZikpfWdldE5lYXJlc3ROb3RIaWRkZW5Db29yZHMobCxhKXtsZXQgZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06YTtjb25zdCBoPXRoaXMuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4''@;'; put 'put ''KHRoaXMuc2V0dGluZ3Mucm93SW5kZXhNYXBwZXIsbC5yb3csYSk7aWYobnVsbD09PWgpcmV0dXJuIG51bGw7Y29uc3QgZj10aGlzLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCh0aGlzLnNldHRpbmdzLmNvbHVtbkluZGV4TWFwcGVyLGwuY29sLGQpO3JldHVybiBudWxsPT09Zj9udWxsOnRo''@;'; put 'put ''aXMuc2V0dGluZ3MuY3JlYXRlQ2VsbENvb3JkcyhoLGYpfWdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChsLGEsZCl7cmV0dXJuIGE8MD9hOmwuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGEsZCl9Y29tbWl0KCl7aWYobnVsbD09PXRoaXMudmlzdWFsQ2VsbFJhbmdlKXJldHVybiB0aGlzO2Nv''@;'; put 'put ''bnN0IGw9dGhpcy50cmltVG9WaXNpYmxlQ2VsbHNSYW5nZU9ubHkodGhpcy52aXN1YWxDZWxsUmFuZ2UpO3JldHVybiB0aGlzLmNlbGxSYW5nZT1udWxsPT09bD9udWxsOnRoaXMuY3JlYXRlUmVuZGVyYWJsZUNlbGxSYW5nZShsLmZyb20sbC50byksdGhpc31zeW5jV2l0aChsKXtjb25zdCBh''@;'; put 'put ''PWwuZnJvbS5jbG9uZSgpLm5vcm1hbGl6ZSgpLGQ9Ik4tUyI9PT1sLmdldFZlcnRpY2FsRGlyZWN0aW9uKCk/MTotMSxoPSJXLUUiPT09bC5nZXRIb3Jpem9udGFsRGlyZWN0aW9uKCk/MTotMSxmPXRoaXMuc2V0dGluZ3MudmlzdWFsVG9SZW5kZXJhYmxlQ29vcmRzKHRoaXMudmlzdWFsQ2Vs''@;'; put 'put ''bFJhbmdlLmhpZ2hsaWdodCk7bGV0IHY9bnVsbDtpZigobnVsbD09PWZ8fG51bGw9PT1mLmNvbHx8bnVsbD09PWYucm93KSYmKHY9dGhpcy5nZXROZWFyZXN0Tm90SGlkZGVuQ29vcmRzKGEsZCxoKSksbnVsbCE9PXYmJmwub3ZlcmxhcHModikpe2NvbnN0IE09bC5oaWdobGlnaHQuY2xvbmUo''@;'; put 'put ''KTtpZihNLnJvdz49MCYmKE0ucm93PXYucm93KSxNLmNvbD49MCYmKE0uY29sPXYuY29sKSxudWxsPT09dGhpcy5jZWxsUmFuZ2Upe2NvbnN0IEQ9dGhpcy5zZXR0aW5ncy52aXN1YWxUb1JlbmRlcmFibGVDb29yZHMoTSk7dGhpcy5jZWxsUmFuZ2U9dGhpcy5zZXR0aW5ncy5jcmVhdGVDZWxs''@;'; put 'put ''UmFuZ2UoRCl9bC5zZXRIaWdobGlnaHQoTSl9cmV0dXJuImZvY3VzIj09PXRoaXMuc2V0dGluZ3Muc2VsZWN0aW9uVHlwZSYmbnVsbCE9PWYmJm51bGw9PT12JiZsLnNldEhpZ2hsaWdodCh0aGlzLnZpc3VhbENlbGxSYW5nZS5oaWdobGlnaHQpLHRoaXN9Z2V0Q29ybmVycygpe2NvbnN0e2Zy''@;'; put 'put ''b206bCx0bzphfT10aGlzLmNlbGxSYW5nZTtyZXR1cm5bTWF0aC5taW4obC5yb3csYS5yb3cpLE1hdGgubWluKGwuY29sLGEuY29sKSxNYXRoLm1heChsLnJvdyxhLnJvdyksTWF0aC5tYXgobC5jb2wsYS5jb2wpXX1nZXRWaXN1YWxDb3JuZXJzKCl7Y29uc3QgbD10aGlzLnNldHRpbmdzLnJl''@;'; put 'put ''bmRlcmFibGVUb1Zpc3VhbENvb3Jkcyh0aGlzLmNlbGxSYW5nZS5nZXRUb3BTdGFydENvcm5lcigpKSxhPXRoaXMuc2V0dGluZ3MucmVuZGVyYWJsZVRvVmlzdWFsQ29vcmRzKHRoaXMuY2VsbFJhbmdlLmdldEJvdHRvbUVuZENvcm5lcigpKTtyZXR1cm5bbC5yb3csbC5jb2wsYS5yb3csYS5j''@;'; put 'put ''b2xdfWNyZWF0ZVJlbmRlcmFibGVDZWxsUmFuZ2UobCxhKXtjb25zdCBkPXRoaXMuc2V0dGluZ3MudmlzdWFsVG9SZW5kZXJhYmxlQ29vcmRzKGwpLGg9dGhpcy5zZXR0aW5ncy52aXN1YWxUb1JlbmRlcmFibGVDb29yZHMoYSk7cmV0dXJuIG51bGw9PT1kLnJvd3x8bnVsbD09PWQuY29sfHxu''@;'; put 'put ''dWxsPT09aC5yb3d8fG51bGw9PT1oLmNvbD9udWxsOnRoaXMuc2V0dGluZ3MuY3JlYXRlQ2VsbFJhbmdlKGQsZCxoKX19O2Z1bmN0aW9uIGJYKGMpe2xldHthY3RpdmVIZWFkZXJDbGFzc05hbWU6bCwuLi5hfT1jO3JldHVybiBuZXcgeGcoe2NsYXNzTmFtZTpsLC4uLmEsc2VsZWN0aW9uVHlw''@;'; put 'put ''ZTpXM2V9KX1mdW5jdGlvbiB4bnQoYyl7bGV0e2FyZWFDb3JuZXJWaXNpYmxlOmwsLi4uYX09YztyZXR1cm4gbmV3IHhnKHtjbGFzc05hbWU6ImFyZWEiLGNyZWF0ZUxheWVyczohMCxib3JkZXI6e3dpZHRoOjEsY29sb3I6IiM0Yjg5ZmYiLGNvcm5lclZpc2libGU6bH0sLi4uYSxzZWxlY3Rp''@;'; put 'put ''b25UeXBlOnZYfSl9ZnVuY3Rpb24gRW50KGMpe2xldHsuLi5sfT1jO3JldHVybiBuZXcgeGcoe2NsYXNzTmFtZToiaGlnaGxpZ2h0IiwuLi5sLHNlbGVjdGlvblR5cGU6dlh9KX1mdW5jdGlvbiBUbnQoYyl7bGV0e2NvbHVtbkNsYXNzTmFtZTpsLC4uLmF9PWM7cmV0dXJuIG5ldyB4Zyh7Y2xh''@;'; put 'put ''c3NOYW1lOmwsLi4uYSxzZWxlY3Rpb25UeXBlOiJjb2x1bW4ifSl9ZnVuY3Rpb24gRzNlKGMpe2xldHtoZWFkZXJDbGFzc05hbWU6bCwuLi5hfT1jO3JldHVybiBuZXcgeGcoe2NsYXNzTmFtZTpsLC4uLmEsc2VsZWN0aW9uVHlwZTptWH0pfWZ1bmN0aW9uIEludChjKXtsZXR7cm93Q2xhc3NO''@;'; put 'put ''YW1lOmwsLi4uYX09YztyZXR1cm4gbmV3IHhnKHtjbGFzc05hbWU6bCwuLi5hLHNlbGVjdGlvblR5cGU6InJvdyJ9KX1mdW5jdGlvbiBqZChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gT250KGMpe3ZhciBsPWZ1bmN0aW9uIFBudChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0''@;'; put 'put ''dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRp''@;'; put 'put ''dmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxl''@;'; put 'put ''OiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24gRWcoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2Vu''@;'; put 'put ''dCBvbiB0aGlzIG9iamVjdCIpfXZhciBQcD1uZXcgV2Vha1NldDtjbGFzcyBGbnR7Y29uc3RydWN0b3IobCl7KGZ1bmN0aW9uIFJudChjLGwpeyhmdW5jdGlvbiBMbnQoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2''@;'; put 'put ''YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLmFkZChjKX0pKHRoaXMsUHApLGpkKHRoaXMsIm9wdGlvbnMiLHZvaWQgMCksamQodGhpcywibGF5ZXJMZXZlbCIsMCksamQodGhpcywiZm9jdXMiLHZvaWQgMCksamQodGhpcywiZmlsbCIsdm9pZCAwKSxqZCh0aGlz''@;'; put 'put ''LCJsYXllcmVkQXJlYXMiLG5ldyBNYXApLGpkKHRoaXMsImFyZWFzIixuZXcgTWFwKSxqZCh0aGlzLCJyb3dIZWFkZXJzIixuZXcgTWFwKSxqZCh0aGlzLCJjb2x1bW5IZWFkZXJzIixuZXcgTWFwKSxqZCh0aGlzLCJhY3RpdmVSb3dIZWFkZXJzIixuZXcgTWFwKSxqZCh0aGlzLCJhY3RpdmVD''@;'; put 'put ''b2x1bW5IZWFkZXJzIixuZXcgTWFwKSxqZCh0aGlzLCJhY3RpdmVDb3JuZXJIZWFkZXJzIixuZXcgTWFwKSxqZCh0aGlzLCJyb3dIaWdobGlnaHRzIixuZXcgTWFwKSxqZCh0aGlzLCJjb2x1bW5IaWdobGlnaHRzIixuZXcgTWFwKSxqZCh0aGlzLCJjdXN0b21TZWxlY3Rpb25zIixbXSksdGhp''@;'; put 'put ''cy5vcHRpb25zPWwsdGhpcy5mb2N1cz1mdW5jdGlvbiBBbnQoYyl7bGV0e2NlbGxDb3JuZXJWaXNpYmxlOmwsLi4uYX09YztyZXR1cm4gbmV3IHhnKHtjbGFzc05hbWU6ImN1cnJlbnQiLGhlYWRlckF0dHJpYnV0ZXM6W1siYXJpYS1zZWxlY3RlZCIsInRydWUiXV0sYm9yZGVyOnt3aWR0aDoy''@;'; put 'put ''LGNvbG9yOiIjNGI4OWZmIixjb3JuZXJWaXNpYmxlOmx9LC4uLmEsc2VsZWN0aW9uVHlwZTpRRX0pfShsKSx0aGlzLmZpbGw9ZnVuY3Rpb24gRG50KGMpe2xldHsuLi5sfT1jO3JldHVybiBuZXcgeGcoe2NsYXNzTmFtZToiZmlsbCIsYm9yZGVyOnt3aWR0aDoxLGNvbG9yOiIjZmYwMDAwIn0s''@;'; put 'put ''Li4ubCxzZWxlY3Rpb25UeXBlOiJmaWxsIn0pfShsKX1pc0VuYWJsZWRGb3IobCxhKXtsZXQgZD1sO2w9PT1RRSYmKGQ9ImN1cnJlbnQiKTtsZXQgaD10aGlzLm9wdGlvbnMuZGlzYWJsZWRDZWxsU2VsZWN0aW9uKGEucm93LGEuY29sKTtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGgmJihoPVto''@;'; put 'put ''XSksITE9PT1ofHxBcnJheS5pc0FycmF5KGgpJiYhaC5pbmNsdWRlcyhkKX11c2VMYXllckxldmVsKCl7cmV0dXJuIHRoaXMubGF5ZXJMZXZlbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06MCx0aGlzfWdldEZvY3VzKCl7cmV0dXJuIHRo''@;'; put 'put ''aXMuZm9jdXN9Z2V0RmlsbCgpe3JldHVybiB0aGlzLmZpbGx9Y3JlYXRlTGF5ZXJlZEFyZWEoKXtyZXR1cm4gRWcoUHAsdGhpcyxUZykuY2FsbCh0aGlzLHRoaXMubGF5ZXJlZEFyZWFzLHhudCl9Z2V0TGF5ZXJlZEFyZWFzKCl7cmV0dXJuWy4uLnRoaXMubGF5ZXJlZEFyZWFzLnZhbHVlcygp''@;'; put 'put ''XX1jcmVhdGVBcmVhKCl7cmV0dXJuIEVnKFBwLHRoaXMsVGcpLmNhbGwodGhpcyx0aGlzLmFyZWFzLEVudCl9Z2V0QXJlYXMoKXtyZXR1cm5bLi4udGhpcy5hcmVhcy52YWx1ZXMoKV19Y3JlYXRlUm93SGVhZGVyKCl7cmV0dXJuIEVnKFBwLHRoaXMsVGcpLmNhbGwodGhpcyx0aGlzLnJvd0hl''@;'; put 'put ''YWRlcnMsRzNlKX1nZXRSb3dIZWFkZXJzKCl7cmV0dXJuWy4uLnRoaXMucm93SGVhZGVycy52YWx1ZXMoKV19Y3JlYXRlQ29sdW1uSGVhZGVyKCl7cmV0dXJuIEVnKFBwLHRoaXMsVGcpLmNhbGwodGhpcyx0aGlzLmNvbHVtbkhlYWRlcnMsRzNlKX1nZXRDb2x1bW5IZWFkZXJzKCl7cmV0dXJu''@;'; put 'put ''Wy4uLnRoaXMuY29sdW1uSGVhZGVycy52YWx1ZXMoKV19Y3JlYXRlQWN0aXZlUm93SGVhZGVyKCl7cmV0dXJuIEVnKFBwLHRoaXMsVGcpLmNhbGwodGhpcyx0aGlzLmFjdGl2ZVJvd0hlYWRlcnMsYlgpfWdldEFjdGl2ZVJvd0hlYWRlcnMoKXtyZXR1cm5bLi4udGhpcy5hY3RpdmVSb3dIZWFk''@;'; put 'put ''ZXJzLnZhbHVlcygpXX1jcmVhdGVBY3RpdmVDb2x1bW5IZWFkZXIoKXtyZXR1cm4gRWcoUHAsdGhpcyxUZykuY2FsbCh0aGlzLHRoaXMuYWN0aXZlQ29sdW1uSGVhZGVycyxiWCl9Z2V0QWN0aXZlQ29sdW1uSGVhZGVycygpe3JldHVyblsuLi50aGlzLmFjdGl2ZUNvbHVtbkhlYWRlcnMudmFs''@;'; put 'put ''dWVzKCldfWNyZWF0ZUFjdGl2ZUNvcm5lckhlYWRlcigpe3JldHVybiBFZyhQcCx0aGlzLFRnKS5jYWxsKHRoaXMsdGhpcy5hY3RpdmVDb3JuZXJIZWFkZXJzLGJYKX1nZXRBY3RpdmVDb3JuZXJIZWFkZXJzKCl7cmV0dXJuWy4uLnRoaXMuYWN0aXZlQ29ybmVySGVhZGVycy52YWx1ZXMoKV19''@;'; put 'put ''Y3JlYXRlUm93SGlnaGxpZ2h0KCl7cmV0dXJuIEVnKFBwLHRoaXMsVGcpLmNhbGwodGhpcyx0aGlzLnJvd0hpZ2hsaWdodHMsSW50KX1nZXRSb3dIaWdobGlnaHRzKCl7cmV0dXJuWy4uLnRoaXMucm93SGlnaGxpZ2h0cy52YWx1ZXMoKV19Y3JlYXRlQ29sdW1uSGlnaGxpZ2h0KCl7cmV0dXJu''@;'; put 'put ''IEVnKFBwLHRoaXMsVGcpLmNhbGwodGhpcyx0aGlzLmNvbHVtbkhpZ2hsaWdodHMsVG50KX1nZXRDb2x1bW5IaWdobGlnaHRzKCl7cmV0dXJuWy4uLnRoaXMuY29sdW1uSGlnaGxpZ2h0cy52YWx1ZXMoKV19Z2V0Q3VzdG9tU2VsZWN0aW9ucygpe3JldHVyblsuLi50aGlzLmN1c3RvbVNlbGVj''@;'; put 'put ''dGlvbnMudmFsdWVzKCldfWFkZEN1c3RvbVNlbGVjdGlvbihsKXt0aGlzLmN1c3RvbVNlbGVjdGlvbnMucHVzaChmdW5jdGlvbiBrbnQoYyl7bGV0e2JvcmRlcjpsLHZpc3VhbENlbGxSYW5nZTphLC4uLmR9PWM7cmV0dXJuIG5ldyB4Zyh7Li4ubCwuLi5kLHNlbGVjdGlvblR5cGU6ImN1c3Rv''@;'; put 'put ''bS1zZWxlY3Rpb24ifSxhKX0oey4uLnRoaXMub3B0aW9ucywuLi5sfSkpfWNsZWFyKCl7dGhpcy5mb2N1cy5jbGVhcigpLHRoaXMuZmlsbC5jbGVhcigpLFluKHRoaXMuYXJlYXMudmFsdWVzKCksbD0+e2wuY2xlYXIoKX0pLFluKHRoaXMubGF5ZXJlZEFyZWFzLnZhbHVlcygpLGw9PntsLmNs''@;'; put 'put ''ZWFyKCl9KSxZbih0aGlzLnJvd0hlYWRlcnMudmFsdWVzKCksbD0+e2wuY2xlYXIoKX0pLFluKHRoaXMuY29sdW1uSGVhZGVycy52YWx1ZXMoKSxsPT57bC5jbGVhcigpfSksWW4odGhpcy5hY3RpdmVSb3dIZWFkZXJzLnZhbHVlcygpLGw9PntsLmNsZWFyKCl9KSxZbih0aGlzLmFjdGl2ZUNv''@;'; put 'put ''bHVtbkhlYWRlcnMudmFsdWVzKCksbD0+e2wuY2xlYXIoKX0pLFluKHRoaXMuYWN0aXZlQ29ybmVySGVhZGVycy52YWx1ZXMoKSxsPT57bC5jbGVhcigpfSksWW4odGhpcy5yb3dIaWdobGlnaHRzLnZhbHVlcygpLGw9PntsLmNsZWFyKCl9KSxZbih0aGlzLmNvbHVtbkhpZ2hsaWdodHMudmFs''@;'; put 'put ''dWVzKCksbD0+e2wuY2xlYXIoKX0pfVtTeW1ib2wuaXRlcmF0b3JdKCl7cmV0dXJuW3RoaXMuZm9jdXMsdGhpcy5maWxsLC4uLnRoaXMuYXJlYXMudmFsdWVzKCksLi4udGhpcy5sYXllcmVkQXJlYXMudmFsdWVzKCksLi4udGhpcy5yb3dIZWFkZXJzLnZhbHVlcygpLC4uLnRoaXMuY29sdW1u''@;'; put 'put ''SGVhZGVycy52YWx1ZXMoKSwuLi50aGlzLmFjdGl2ZVJvd0hlYWRlcnMudmFsdWVzKCksLi4udGhpcy5hY3RpdmVDb2x1bW5IZWFkZXJzLnZhbHVlcygpLC4uLnRoaXMuYWN0aXZlQ29ybmVySGVhZGVycy52YWx1ZXMoKSwuLi50aGlzLnJvd0hpZ2hsaWdodHMudmFsdWVzKCksLi4udGhpcy5j''@;'; put 'put ''b2x1bW5IaWdobGlnaHRzLnZhbHVlcygpLC4uLnRoaXMuY3VzdG9tU2VsZWN0aW9uc11bU3ltYm9sLml0ZXJhdG9yXSgpfX1mdW5jdGlvbiBUZyhjLGwpe2NvbnN0IGE9dGhpcy5sYXllckxldmVsO2lmKGMuaGFzKGEpKXJldHVybiBjLmdldChhKTtjb25zdCBkPWwoe2xheWVyTGV2ZWw6YSwu''@;'; put 'put ''Li50aGlzLm9wdGlvbnN9KTtyZXR1cm4gYy5zZXQoYSxkKSxkfWNvbnN0IEhudD1GbnQ7ZnVuY3Rpb24gJDNlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBObnQoYyl7dmFyIGw9ZnVuY3Rpb24gVm50KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5''@;'; put 'put ''bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1''@;'; put 'put ''cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9''@;'; put 'put ''KTpjW2xdPWEsY31jbGFzcyBCbnR7Y29uc3RydWN0b3IobCl7JDNlKHRoaXMsInJhbmdlcyIsW10pLCQzZSh0aGlzLCJjcmVhdGVDZWxsUmFuZ2UiLHZvaWQgMCksdGhpcy5jcmVhdGVDZWxsUmFuZ2U9bH1pc0VtcHR5KCl7cmV0dXJuIDA9PT10aGlzLnNpemUoKX1zZXQobCl7cmV0dXJuIHRo''@;'; put 'put ''aXMuY2xlYXIoKSx0aGlzLnJhbmdlcy5wdXNoKHRoaXMuY3JlYXRlQ2VsbFJhbmdlKGwpKSx0aGlzfWFkZChsKXtyZXR1cm4gdGhpcy5yYW5nZXMucHVzaCh0aGlzLmNyZWF0ZUNlbGxSYW5nZShsKSksdGhpc31wb3AoKXtyZXR1cm4gdGhpcy5yYW5nZXMucG9wKCksdGhpc31jdXJyZW50KCl7''@;'; put 'put ''cmV0dXJuIHRoaXMucGVla0J5SW5kZXgodGhpcy5zaXplKCktMSl9cHJldmlvdXMoKXtyZXR1cm4gdGhpcy5wZWVrQnlJbmRleCh0aGlzLnNpemUoKS0yKX1pbmNsdWRlcyhsKXtyZXR1cm4gdGhpcy5yYW5nZXMuc29tZShhPT5hLmluY2x1ZGVzKGwpKX1jbGVhcigpe3JldHVybiB0aGlzLnJh''@;'; put 'put ''bmdlcy5sZW5ndGg9MCx0aGlzfXNpemUoKXtyZXR1cm4gdGhpcy5yYW5nZXMubGVuZ3RofXBlZWtCeUluZGV4KCl7bGV0IGEsbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06MDtyZXR1cm4gbD49MCYmbDx0aGlzLnNpemUoKSYmKGE9dGhp''@;'; put 'put ''cy5yYW5nZXNbbF0pLGF9W1N5bWJvbC5pdGVyYXRvcl0oKXtyZXR1cm4gdGhpcy5yYW5nZXNbU3ltYm9sLml0ZXJhdG9yXSgpfX1jb25zdCBqbnQ9Qm50O2Z1bmN0aW9uIHlYKGMsbCxhKXtLM2UoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIEszZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5l''@;'; put 'put ''dyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gQnMoYyxsKXtyZXR1cm4gYy5nZXQoUXUoYyxsKSl9ZnVuY3Rpb24gTVAoYyxsLGEpe3JldHVybiBjLnNldChRdShjLGwpLGEpLGF9ZnVu''@;'; put 'put ''Y3Rpb24gUXUoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciB4UD1uZXcg''@;'; put 'put ''V2Vha01hcCx1Yz1uZXcgV2Vha01hcCx1Mz1uZXcgV2Vha01hcCxwMD1uZXcgV2Vha1NldDtjbGFzcyBxM2V7Y29uc3RydWN0b3IobCxhKXsoZnVuY3Rpb24gem50KGMsbCl7SzNlKGMsbCksbC5hZGQoYyl9KSh0aGlzLHAwKSx5WCh0aGlzLHhQLHZvaWQgMCkseVgodGhpcyx1Yyx2b2lkIDAp''@;'; put 'put ''LHlYKHRoaXMsdTMse3g6MCx5OjB9KSxNUCh4UCx0aGlzLGwpLE1QKHVjLHRoaXMsYSl9dHJhbnNmb3JtU3RhcnQobCxhKXtsZXQgZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdO2NvbnN0IGg9QnModWMsdGhpcykuY3JlYXRlQ2VsbENv''@;'; put 'put ''b3JkcyhsLGEpO2xldCBmPUJzKHhQLHRoaXMpLmN1cnJlbnQoKS5oaWdobGlnaHQ7Y29uc3Qgdj1Ccyh1Yyx0aGlzKS52aXN1YWxUb1JlbmRlcmFibGVDb29yZHMoZik7bGV0IE09MCxEPTA7aWYodGhpcy5ydW5Mb2NhbEhvb2tzKCJiZWZvcmVUcmFuc2Zvcm1TdGFydCIsaCksbnVsbCE9PXYu''@;'; put 'put ''cm93JiZudWxsIT09di5jb2wpe2NvbnN0e3dpZHRoOlosaGVpZ2h0OnJlfT1RdShwMCx0aGlzLEozZSkuY2FsbCh0aGlzKSx7cm93OmNlLGNvbDpiZX09UXUocDAsdGhpcyxRM2UpLmNhbGwodGhpcyxmKSxFZT1Ccyh1Yyx0aGlzKS5maXhlZFJvd3NCb3R0b20oKSxCZT1Ccyh1Yyx0aGlzKS5t''@;'; put 'put ''aW5TcGFyZVJvd3MoKSxxZT1Ccyh1Yyx0aGlzKS5taW5TcGFyZUNvbHMoKSxydD1Ccyh1Yyx0aGlzKS5hdXRvV3JhcFJvdygpLHB0PUJzKHVjLHRoaXMpLmF1dG9XcmFwQ29sKCksZHQ9QnModWMsdGhpcykuY3JlYXRlQ2VsbENvb3JkcyhjZStoLnJvdyxiZStoLmNvbCk7aWYoZHQucm93Pj1y''@;'; put 'put ''ZSl7Y29uc3QgQ249RmQoZCYmQmU+MCYmMD09PUVlKSx0bj1kdC5jb2wrMSxNbj1Ccyh1Yyx0aGlzKS5jcmVhdGVDZWxsQ29vcmRzKGR0LnJvdy1yZSx0bj49Wj90bi1aOnRuKTt0aGlzLnJ1bkxvY2FsSG9va3MoImJlZm9yZUNvbHVtbldyYXAiLENuLFF1KHAwLHRoaXMsTV8pLmNhbGwodGhp''@;'; put 'put ''cyxNbiksdG4+PVopLENuLnZhbHVlP3RoaXMucnVuTG9jYWxIb29rcygiaW5zZXJ0Um93UmVxdWlyZSIsQnModWMsdGhpcykuY291bnRSZW5kZXJhYmxlUm93cygpKTpwdCYmZHQuYXNzaWduKE1uKX1lbHNlIGlmKGR0LnJvdzwwKXtjb25zdCBDbj1GZChwdCksdG49ZHQuY29sLTEsTW49QnMo''@;'; put 'put ''dWMsdGhpcykuY3JlYXRlQ2VsbENvb3JkcyhyZStkdC5yb3csdG48MD9aK3RuOnRuKTt0aGlzLnJ1bkxvY2FsSG9va3MoImJlZm9yZUNvbHVtbldyYXAiLENuLFF1KHAwLHRoaXMsTV8pLmNhbGwodGhpcyxNbiksdG48MCkscHQmJmR0LmFzc2lnbihNbil9aWYoZHQuY29sPj1aKXtjb25zdCBD''@;'; put 'put ''bj1GZChkJiZxZT4wKSx0bj1kdC5yb3crMSxNbj1Ccyh1Yyx0aGlzKS5jcmVhdGVDZWxsQ29vcmRzKHRuPj1yZT90bi1yZTp0bixkdC5jb2wtWik7dGhpcy5ydW5Mb2NhbEhvb2tzKCJiZWZvcmVSb3dXcmFwIixDbixRdShwMCx0aGlzLE1fKS5jYWxsKHRoaXMsTW4pLHRuPj1yZSksQ24udmFs''@;'; put 'put ''dWU/dGhpcy5ydW5Mb2NhbEhvb2tzKCJpbnNlcnRDb2xSZXF1aXJlIixCcyh1Yyx0aGlzKS5jb3VudFJlbmRlcmFibGVDb2x1bW5zKCkpOnJ0JiZkdC5hc3NpZ24oTW4pfWVsc2UgaWYoZHQuY29sPDApe2NvbnN0IENuPUZkKHJ0KSx0bj1kdC5yb3ctMSxNbj1Ccyh1Yyx0aGlzKS5jcmVhdGVD''@;'; put 'put ''ZWxsQ29vcmRzKHRuPDA/cmUrdG46dG4sWitkdC5jb2wpO3RoaXMucnVuTG9jYWxIb29rcygiYmVmb3JlUm93V3JhcCIsQ24sUXUocDAsdGhpcyxNXykuY2FsbCh0aGlzLE1uKSx0bjwwKSxydCYmZHQuYXNzaWduKE1uKX1jb25zdHtyb3dEaXI6SnQsY29sRGlyOnZufT1RdShwMCx0aGlzLFgz''@;'; put 'put ''ZSkuY2FsbCh0aGlzLGR0KTtNPUp0LEQ9dm4sZj1RdShwMCx0aGlzLE1fKS5jYWxsKHRoaXMsZHQpfXJldHVybiB0aGlzLnJ1bkxvY2FsSG9va3MoImFmdGVyVHJhbnNmb3JtU3RhcnQiLGYsTSxEKSxmfXRyYW5zZm9ybUVuZChsLGEpe2NvbnN0IGQ9QnModWMsdGhpcykuY3JlYXRlQ2VsbENv''@;'; put 'put ''b3JkcyhsLGEpLGg9QnMoeFAsdGhpcykuY3VycmVudCgpLGY9QnModWMsdGhpcykudmlzdWFsVG9SZW5kZXJhYmxlQ29vcmRzKGguaGlnaGxpZ2h0KSx2PVF1KHAwLHRoaXMsX1gpLmNhbGwodGhpcyxoLnRvLnJvdyxoLmZyb20ucm93KSxNPVF1KHAwLHRoaXMsd1gpLmNhbGwodGhpcyxoLnRv''@;'; put 'put ''LmNvbCxoLmZyb20uY29sKSxEPWgudG8uY2xvbmUoKTtsZXQgWj0wLHJlPTA7aWYodGhpcy5ydW5Mb2NhbEhvb2tzKCJiZWZvcmVUcmFuc2Zvcm1FbmQiLGQpLG51bGwhPT1mLnJvdyYmbnVsbCE9PWYuY29sJiZudWxsIT09diYmbnVsbCE9PU0pe2NvbnN0e3JvdzpjZSxjb2w6YmV9PVF1KHAw''@;'; put 'put ''LHRoaXMsUTNlKS5jYWxsKHRoaXMsaC5oaWdobGlnaHQpLEVlPUJzKHVjLHRoaXMpLmNyZWF0ZUNlbGxDb29yZHModitkLnJvdyxNK2QuY29sKSxCZT1oLmdldFRvcFN0YXJ0Q29ybmVyKCkscWU9aC5nZXRUb3BFbmRDb3JuZXIoKSxydD1oLmdldEJvdHRvbUVuZENvcm5lcigpO2lmKGQuY29s''@;'; put 'put ''PDAmJk0+PWJlJiZFZS5jb2w8YmUpe2NvbnN0IHZuPUVlLmNvbC1iZTtFZS5jb2w9UXUocDAsdGhpcyx3WCkuY2FsbCh0aGlzLEJlLmNvbCxxZS5jb2wpK3ZufWVsc2UgaWYoZC5jb2w+MCYmTTw9YmUmJkVlLmNvbD5iZSl7Y29uc3Qgdm49UXUocDAsdGhpcyx3WCkuY2FsbCh0aGlzLHFlLmNv''@;'; put 'put ''bCxCZS5jb2wpLENuPU1hdGgubWF4KEVlLmNvbC12biwxKTtFZS5jb2w9dm4rQ259aWYoZC5yb3c8MCYmdj49Y2UmJkVlLnJvdzxjZSl7Y29uc3Qgdm49RWUucm93LWNlO0VlLnJvdz1RdShwMCx0aGlzLF9YKS5jYWxsKHRoaXMsQmUucm93LHJ0LnJvdykrdm59ZWxzZSBpZihkLnJvdz4wJiZ2''@;'; put 'put ''PD1jZSYmRWUucm93PmNlKXtjb25zdCB2bj1RdShwMCx0aGlzLF9YKS5jYWxsKHRoaXMscnQucm93LEJlLnJvdyksQ249TWF0aC5tYXgoRWUucm93LXZuLDEpO0VlLnJvdz12bitDbn1jb25zdHtyb3dEaXI6cHQsY29sRGlyOmR0fT1RdShwMCx0aGlzLFgzZSkuY2FsbCh0aGlzLEVlKTtaPXB0''@;'; put 'put ''LHJlPWR0O2NvbnN0IEp0PVF1KHAwLHRoaXMsTV8pLmNhbGwodGhpcyxFZSk7MD09PWQucm93JiYwIT09ZC5jb2w/RC5jb2w9SnQuY29sOjAhPT1kLnJvdyYmMD09PWQuY29sP0Qucm93PUp0LnJvdzooRC5yb3c9SnQucm93LEQuY29sPUp0LmNvbCl9cmV0dXJuIHRoaXMucnVuTG9jYWxIb29r''@;'; put 'put ''cygiYWZ0ZXJUcmFuc2Zvcm1FbmQiLEQsWixyZSksRH1zZXRPZmZzZXRTaXplKGwpe2xldHt4OmEseTpkfT1sO01QKHUzLHRoaXMse3g6YSx5OmR9KX1yZXNldE9mZnNldFNpemUoKXtNUCh1Myx0aGlzLHt4OjAseTowfSl9fWZ1bmN0aW9uIFgzZShjKXtjb25zdHt3aWR0aDpsLGhlaWdodDph''@;'; put 'put ''fT1RdShwMCx0aGlzLEozZSkuY2FsbCh0aGlzKTtsZXQgZD0wLGg9MDtyZXR1cm4gYy5yb3c8MD8oZD0tMSxjLnJvdz0wKTpjLnJvdz4wJiZjLnJvdz49YSYmKGQ9MSxjLnJvdz1hLTEpLGMuY29sPDA/KGg9LTEsYy5jb2w9MCk6Yy5jb2w+MCYmYy5jb2w+PWwmJihoPTEsYy5jb2w9bC0xKSx7''@;'; put 'put ''cm93RGlyOmQsY29sRGlyOmh9fWZ1bmN0aW9uIEozZSgpe3JldHVybnt3aWR0aDpCcyh1Myx0aGlzKS54K0JzKHVjLHRoaXMpLmNvdW50UmVuZGVyYWJsZUNvbHVtbnMoKSxoZWlnaHQ6QnModTMsdGhpcykueStCcyh1Yyx0aGlzKS5jb3VudFJlbmRlcmFibGVSb3dzKCl9fWZ1bmN0aW9uIF9Y''@;'; put 'put ''KGMsbCl7Y29uc3QgYT1Ccyh1Yyx0aGlzKS5maW5kRmlyc3ROb25IaWRkZW5SZW5kZXJhYmxlUm93KGMsbCk7cmV0dXJuIG51bGw9PT1hP251bGw6QnModTMsdGhpcykueSthfWZ1bmN0aW9uIHdYKGMsbCl7Y29uc3QgYT1Ccyh1Yyx0aGlzKS5maW5kRmlyc3ROb25IaWRkZW5SZW5kZXJhYmxl''@;'; put 'put ''Q29sdW1uKGMsbCk7cmV0dXJuIG51bGw9PT1hP251bGw6QnModTMsdGhpcykueCthfWZ1bmN0aW9uIFEzZShjKXtjb25zdHtyb3c6bCxjb2w6YX09QnModWMsdGhpcykudmlzdWFsVG9SZW5kZXJhYmxlQ29vcmRzKGMpO2lmKG51bGw9PT1sfHxudWxsPT09YSl0aHJvdyBuZXcgRXJyb3IoIlJl''@;'; put 'put ''bmRlcmFibGUgY29vcmRzIGFyZSBub3QgdmlzaWJsZS4iKTtyZXR1cm4gQnModWMsdGhpcykuY3JlYXRlQ2VsbENvb3JkcyhCcyh1Myx0aGlzKS55K2wsQnModTMsdGhpcykueCthKX1mdW5jdGlvbiBNXyhjKXtjb25zdCBsPWMuY2xvbmUoKTtyZXR1cm4gbC5jb2w9Yy5jb2wtQnModTMsdGhp''@;'; put 'put ''cykueCxsLnJvdz1jLnJvdy1Ccyh1Myx0aGlzKS55LEJzKHVjLHRoaXMpLnJlbmRlcmFibGVUb1Zpc3VhbENvb3JkcyhsKX1UbChxM2UseTEpO2NvbnN0IGVwZT1xM2UsVW50PVszLDJdLFpudD1bWyJudW1iZXIiXSxbIm51bWJlciIsInN0cmluZyJdLFsibnVtYmVyIiwidW5kZWZpbmVkIl0s''@;'; put 'put ''WyJudW1iZXIiLCJzdHJpbmciLCJ1bmRlZmluZWQiXV0sU1g9U3ltYm9sKCJyb290IiksbnBlPVN5bWJvbCgiY2hpbGQiKTtmdW5jdGlvbiB4XyhjKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06U1g7aWYobCE9PVNYJiZsIT09''@;'; put 'put ''bnBlKXRocm93IG5ldyBFcnJvcigiVGhlIHNlY29uZCBhcmd1bWVudCBpcyB1c2VkIGludGVybmFsbHkgb25seSBhbmQgY2Fubm90IGJlIG92ZXJ3cml0dGVuLiIpO2NvbnN0IGE9QXJyYXkuaXNBcnJheShjKSxkPWw9PT1TWDtsZXQgaD0wO2lmKGEpe2NvbnN0IGY9Y1swXTswPT09Yy5sZW5n''@;'; put 'put ''dGg/aD0xOmQmJmYgaW5zdGFuY2VvZiBnSz9oPTM6ZCYmQXJyYXkuaXNBcnJheShmKT9oPXhfKGYsbnBlKTpjLmxlbmd0aD49MiYmYy5sZW5ndGg8PTQmJiFjLnNvbWUoKE0sRCk9PiFabnRbRF0uaW5jbHVkZXModHlwZW9mIE0pKSYmKGg9Mil9cmV0dXJuIGh9ZnVuY3Rpb24gZVQoYyl7bGV0''@;'; put 'put ''e2NyZWF0ZUNlbGxDb29yZHM6bCxjcmVhdGVDZWxsUmFuZ2U6YSxrZWVwRGlyZWN0aW9uOmQ9ITEscHJvcFRvQ29sOmh9PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fTtpZighVW50LmluY2x1ZGVzKGMpKXRocm93IG5ldyBFcnJvcigi''@;'; put 'put ''VW5zdXBwb3J0ZWQgc2VsZWN0aW9uIHJhbmdlcyBzY2hlbWEgdHlwZSB3YXMgcHJvdmlkZWQuIik7cmV0dXJuIGZ1bmN0aW9uKGYpe2NvbnN0IHY9Mz09PWM7bGV0IE09dj9mLmZyb20ucm93OmZbMF0sRD12P2YuZnJvbS5jb2w6ZlsxXSxaPXY/Zi50by5yb3c6ZlsyXSxyZT12P2YudG8uY29s''@;'; put 'put ''OmZbM107aWYoImZ1bmN0aW9uIj09dHlwZW9mIGgmJigic3RyaW5nIj09dHlwZW9mIEQmJihEPWgoRCkpLCJzdHJpbmciPT10eXBlb2YgcmUmJihyZT1oKHJlKSkpLF9jKFopJiYoWj1NKSxfYyhyZSkmJihyZT1EKSwhZCl7Y29uc3QgRWU9TSxCZT1ELHFlPVoscnQ9cmU7TT1NYXRoLm1pbihF''@;'; put 'put ''ZSxxZSksRD1NYXRoLm1pbihCZSxydCksWj1NYXRoLm1heChFZSxxZSkscmU9TWF0aC5tYXgoQmUscnQpfWNvbnN0IGNlPWwoTSxEKSxiZT1sKFoscmUpO3JldHVybiBhKGNlLGNlLGJlKX19ZnVuY3Rpb24gRV8oYyxsLGEpeyhmdW5jdGlvbiBHbnQoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBu''@;'; put 'put ''ZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIHQ5KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiAkbnQoYyl7dmFyIGw9ZnVuY3Rpb24gS250KGMsbCl7''@;'; put 'put ''aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1By''@;'; put 'put ''aW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVl''@;'; put 'put ''OmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBDYyhjLGwpe3JldHVybiBjLmdldChycGUoYyxsKSl9ZnVuY3Rpb24gRnAoYyxsLGEpe3JldHVybiBjLnNldChycGUoYyxsKSxhKSxhfWZ1bmN0aW9uIHJwZShjLGwsYSl7aWYo''@;'; put 'put ''ImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIF8xPW5ldyBXZWFrTWFwLG45PW5ldyBXZWFr''@;'; put 'put ''TWFwLEFQPW5ldyBXZWFrTWFwLHRUPW5ldyBXZWFrTWFwLGtQPW5ldyBXZWFrTWFwLG5UPW5ldyBXZWFrTWFwO2NsYXNzIGlwZXtjb25zdHJ1Y3RvcihsLGEpe3ZhciBkPXRoaXM7dDkodGhpcywic2V0dGluZ3MiLHZvaWQgMCksdDkodGhpcywidGFibGVQcm9wcyIsdm9pZCAwKSx0OSh0aGlz''@;'; put 'put ''LCJpblByb2dyZXNzIiwhMSksdDkodGhpcywic2VsZWN0ZWRSYW5nZSIsbmV3IGpudCgoaCxmLHYpPT50aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbFJhbmdlKGgsZix2KSkpLHQ5KHRoaXMsImhpZ2hsaWdodCIsdm9pZCAwKSxFXyh0aGlzLF8xLHZvaWQgMCksRV8odGhpcyxuOSx2b2lkIDAp''@;'; put 'put ''LHQ5KHRoaXMsInNlbGVjdGVkQnlSb3dIZWFkZXIiLG5ldyBTZXQpLHQ5KHRoaXMsInNlbGVjdGVkQnlDb2x1bW5IZWFkZXIiLG5ldyBTZXQpLEVfKHRoaXMsQVAsITEpLEVfKHRoaXMsdFQsITEpLEVfKHRoaXMsa1AsInVua25vd24iKSxFXyh0aGlzLG5ULC0xKSx0aGlzLnNldHRpbmdzPWws''@;'; put 'put ''dGhpcy50YWJsZVByb3BzPWEsdGhpcy5oaWdobGlnaHQ9bmV3IEhudCh7aGVhZGVyQ2xhc3NOYW1lOmwuY3VycmVudEhlYWRlckNsYXNzTmFtZSxhY3RpdmVIZWFkZXJDbGFzc05hbWU6bC5hY3RpdmVIZWFkZXJDbGFzc05hbWUscm93Q2xhc3NOYW1lOmwuY3VycmVudFJvd0NsYXNzTmFtZSxj''@;'; put 'put ''b2x1bW5DbGFzc05hbWU6bC5jdXJyZW50Q29sQ2xhc3NOYW1lLGNlbGxBdHRyaWJ1dGVzOltbImFyaWEtc2VsZWN0ZWQiLCJ0cnVlIl1dLHJvd0luZGV4TWFwcGVyOnRoaXMudGFibGVQcm9wcy5yb3dJbmRleE1hcHBlcixjb2x1bW5JbmRleE1hcHBlcjp0aGlzLnRhYmxlUHJvcHMuY29sdW1u''@;'; put 'put ''SW5kZXhNYXBwZXIsZGlzYWJsZWRDZWxsU2VsZWN0aW9uOihoLGYpPT50aGlzLnRhYmxlUHJvcHMuaXNEaXNhYmxlZENlbGxTZWxlY3Rpb24oaCxmKSxjZWxsQ29ybmVyVmlzaWJsZTpmdW5jdGlvbigpe3JldHVybiBkLmlzQ2VsbENvcm5lclZpc2libGUoLi4uYXJndW1lbnRzKX0sYXJlYUNv''@;'; put 'put ''cm5lclZpc2libGU6ZnVuY3Rpb24oKXtyZXR1cm4gZC5pc0FyZWFDb3JuZXJWaXNpYmxlKC4uLmFyZ3VtZW50cyl9LHZpc3VhbFRvUmVuZGVyYWJsZUNvb3JkczpoPT50aGlzLnRhYmxlUHJvcHMudmlzdWFsVG9SZW5kZXJhYmxlQ29vcmRzKGgpLHJlbmRlcmFibGVUb1Zpc3VhbENvb3Jkczpo''@;'; put 'put ''PT50aGlzLnRhYmxlUHJvcHMucmVuZGVyYWJsZVRvVmlzdWFsQ29vcmRzKGgpLGNyZWF0ZUNlbGxDb29yZHM6KGgsZik9PnRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKGgsZiksY3JlYXRlQ2VsbFJhbmdlOihoLGYsdik9PnRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsUmFuZ2Uo''@;'; put 'put ''aCxmLHYpfSksRnAoXzEsdGhpcyxuZXcgZXBlKHRoaXMuc2VsZWN0ZWRSYW5nZSx7cm93SW5kZXhNYXBwZXI6dGhpcy50YWJsZVByb3BzLnJvd0luZGV4TWFwcGVyLGNvbHVtbkluZGV4TWFwcGVyOnRoaXMudGFibGVQcm9wcy5jb2x1bW5JbmRleE1hcHBlcixjb3VudFJlbmRlcmFibGVSb3dz''@;'; put 'put ''OigpPT50aGlzLnRhYmxlUHJvcHMuY291bnRSZW5kZXJhYmxlUm93cygpLGNvdW50UmVuZGVyYWJsZUNvbHVtbnM6KCk9PnRoaXMudGFibGVQcm9wcy5jb3VudFJlbmRlcmFibGVDb2x1bW5zKCksdmlzdWFsVG9SZW5kZXJhYmxlQ29vcmRzOmg9PnRoaXMudGFibGVQcm9wcy52aXN1YWxUb1Jl''@;'; put 'put ''bmRlcmFibGVDb29yZHMoaCkscmVuZGVyYWJsZVRvVmlzdWFsQ29vcmRzOmg9PnRoaXMudGFibGVQcm9wcy5yZW5kZXJhYmxlVG9WaXN1YWxDb29yZHMoaCksZmluZEZpcnN0Tm9uSGlkZGVuUmVuZGVyYWJsZVJvdzpmdW5jdGlvbigpe3JldHVybiBkLnRhYmxlUHJvcHMuZmluZEZpcnN0Tm9u''@;'; put 'put ''SGlkZGVuUmVuZGVyYWJsZVJvdyguLi5hcmd1bWVudHMpfSxmaW5kRmlyc3ROb25IaWRkZW5SZW5kZXJhYmxlQ29sdW1uOmZ1bmN0aW9uKCl7cmV0dXJuIGQudGFibGVQcm9wcy5maW5kRmlyc3ROb25IaWRkZW5SZW5kZXJhYmxlQ29sdW1uKC4uLmFyZ3VtZW50cyl9LGNyZWF0ZUNlbGxDb29y''@;'; put 'put ''ZHM6KGgsZik9PnRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKGgsZiksZml4ZWRSb3dzQm90dG9tOigpPT5sLmZpeGVkUm93c0JvdHRvbSxtaW5TcGFyZVJvd3M6KCk9PmwubWluU3BhcmVSb3dzLG1pblNwYXJlQ29sczooKT0+bC5taW5TcGFyZUNvbHMsYXV0b1dyYXBSb3c6KCk9''@;'; put 'put ''PmwuYXV0b1dyYXBSb3csYXV0b1dyYXBDb2w6KCk9PmwuYXV0b1dyYXBDb2x9KSksRnAobjksdGhpcyxuZXcgZXBlKHRoaXMuc2VsZWN0ZWRSYW5nZSx7cm93SW5kZXhNYXBwZXI6dGhpcy50YWJsZVByb3BzLnJvd0luZGV4TWFwcGVyLGNvbHVtbkluZGV4TWFwcGVyOnRoaXMudGFibGVQcm9w''@;'; put 'put ''cy5jb2x1bW5JbmRleE1hcHBlcixjb3VudFJlbmRlcmFibGVSb3dzOigpPT57Y29uc3QgaD10aGlzLnNlbGVjdGVkUmFuZ2UuY3VycmVudCgpO3JldHVybiB0aGlzLnRhYmxlUHJvcHMuY291bnRSZW5kZXJhYmxlUm93c0luUmFuZ2UoMCxoLmdldE91dGVyQm90dG9tRW5kQ29ybmVyKCkucm93''@;'; put 'put ''KX0sY291bnRSZW5kZXJhYmxlQ29sdW1uczooKT0+e2NvbnN0IGg9dGhpcy5zZWxlY3RlZFJhbmdlLmN1cnJlbnQoKTtyZXR1cm4gdGhpcy50YWJsZVByb3BzLmNvdW50UmVuZGVyYWJsZUNvbHVtbnNJblJhbmdlKDAsaC5nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpLmNvbCl9LHZpc3VhbFRv''@;'; put 'put ''UmVuZGVyYWJsZUNvb3JkczpoPT50aGlzLnRhYmxlUHJvcHMudmlzdWFsVG9SZW5kZXJhYmxlQ29vcmRzKGgpLHJlbmRlcmFibGVUb1Zpc3VhbENvb3JkczpoPT50aGlzLnRhYmxlUHJvcHMucmVuZGVyYWJsZVRvVmlzdWFsQ29vcmRzKGgpLGZpbmRGaXJzdE5vbkhpZGRlblJlbmRlcmFibGVS''@;'; put 'put ''b3c6ZnVuY3Rpb24oKXtyZXR1cm4gZC50YWJsZVByb3BzLmZpbmRGaXJzdE5vbkhpZGRlblJlbmRlcmFibGVSb3coLi4uYXJndW1lbnRzKX0sZmluZEZpcnN0Tm9uSGlkZGVuUmVuZGVyYWJsZUNvbHVtbjpmdW5jdGlvbigpe3JldHVybiBkLnRhYmxlUHJvcHMuZmluZEZpcnN0Tm9uSGlkZGVu''@;'; put 'put ''UmVuZGVyYWJsZUNvbHVtbiguLi5hcmd1bWVudHMpfSxjcmVhdGVDZWxsQ29vcmRzOihoLGYpPT50aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhoLGYpLGZpeGVkUm93c0JvdHRvbTooKT0+MCxtaW5TcGFyZVJvd3M6KCk9PjAsbWluU3BhcmVDb2xzOigpPT4wLGF1dG9XcmFwUm93''@;'; put 'put ''OigpPT4hMCxhdXRvV3JhcENvbDooKT0+ITB9KSksQ2MoXzEsdGhpcykuYWRkTG9jYWxIb29rKCJiZWZvcmVUcmFuc2Zvcm1TdGFydCIsZnVuY3Rpb24oKXtmb3IodmFyIGg9YXJndW1lbnRzLmxlbmd0aCxmPW5ldyBBcnJheShoKSx2PTA7djxoO3YrKylmW3ZdPWFyZ3VtZW50c1t2XTtyZXR1''@;'; put 'put ''cm4gZC5ydW5Mb2NhbEhvb2tzKCJiZWZvcmVNb2RpZnlUcmFuc2Zvcm1TdGFydCIsLi4uZil9KSxDYyhfMSx0aGlzKS5hZGRMb2NhbEhvb2soImFmdGVyVHJhbnNmb3JtU3RhcnQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBoPWFyZ3VtZW50cy5sZW5ndGgsZj1uZXcgQXJyYXkoaCksdj0wO3Y8aDt2''@;'; put 'put ''KyspZlt2XT1hcmd1bWVudHNbdl07cmV0dXJuIGQucnVuTG9jYWxIb29rcygiYWZ0ZXJNb2RpZnlUcmFuc2Zvcm1TdGFydCIsLi4uZil9KSxDYyhfMSx0aGlzKS5hZGRMb2NhbEhvb2soImJlZm9yZVRyYW5zZm9ybUVuZCIsZnVuY3Rpb24oKXtmb3IodmFyIGg9YXJndW1lbnRzLmxlbmd0aCxm''@;'; put 'put ''PW5ldyBBcnJheShoKSx2PTA7djxoO3YrKylmW3ZdPWFyZ3VtZW50c1t2XTtyZXR1cm4gZC5ydW5Mb2NhbEhvb2tzKCJiZWZvcmVNb2RpZnlUcmFuc2Zvcm1FbmQiLC4uLmYpfSksQ2MoXzEsdGhpcykuYWRkTG9jYWxIb29rKCJhZnRlclRyYW5zZm9ybUVuZCIsZnVuY3Rpb24oKXtmb3IodmFy''@;'; put 'put ''IGg9YXJndW1lbnRzLmxlbmd0aCxmPW5ldyBBcnJheShoKSx2PTA7djxoO3YrKylmW3ZdPWFyZ3VtZW50c1t2XTtyZXR1cm4gZC5ydW5Mb2NhbEhvb2tzKCJhZnRlck1vZGlmeVRyYW5zZm9ybUVuZCIsLi4uZil9KSxDYyhfMSx0aGlzKS5hZGRMb2NhbEhvb2soImluc2VydFJvd1JlcXVpcmUi''@;'; put 'put ''LGZ1bmN0aW9uKCl7Zm9yKHZhciBoPWFyZ3VtZW50cy5sZW5ndGgsZj1uZXcgQXJyYXkoaCksdj0wO3Y8aDt2KyspZlt2XT1hcmd1bWVudHNbdl07cmV0dXJuIGQucnVuTG9jYWxIb29rcygiaW5zZXJ0Um93UmVxdWlyZSIsLi4uZil9KSxDYyhfMSx0aGlzKS5hZGRMb2NhbEhvb2soImluc2Vy''@;'; put 'put ''dENvbFJlcXVpcmUiLGZ1bmN0aW9uKCl7Zm9yKHZhciBoPWFyZ3VtZW50cy5sZW5ndGgsZj1uZXcgQXJyYXkoaCksdj0wO3Y8aDt2KyspZlt2XT1hcmd1bWVudHNbdl07cmV0dXJuIGQucnVuTG9jYWxIb29rcygiaW5zZXJ0Q29sUmVxdWlyZSIsLi4uZil9KSxDYyhfMSx0aGlzKS5hZGRMb2Nh''@;'; put 'put ''bEhvb2soImJlZm9yZVJvd1dyYXAiLGZ1bmN0aW9uKCl7Zm9yKHZhciBoPWFyZ3VtZW50cy5sZW5ndGgsZj1uZXcgQXJyYXkoaCksdj0wO3Y8aDt2KyspZlt2XT1hcmd1bWVudHNbdl07cmV0dXJuIGQucnVuTG9jYWxIb29rcygiYmVmb3JlUm93V3JhcCIsLi4uZil9KSxDYyhfMSx0aGlzKS5h''@;'; put 'put ''ZGRMb2NhbEhvb2soImJlZm9yZUNvbHVtbldyYXAiLGZ1bmN0aW9uKCl7Zm9yKHZhciBoPWFyZ3VtZW50cy5sZW5ndGgsZj1uZXcgQXJyYXkoaCksdj0wO3Y8aDt2KyspZlt2XT1hcmd1bWVudHNbdl07cmV0dXJuIGQucnVuTG9jYWxIb29rcygiYmVmb3JlQ29sdW1uV3JhcCIsLi4uZil9KSxD''@;'; put 'put ''YyhuOSx0aGlzKS5hZGRMb2NhbEhvb2soImJlZm9yZVRyYW5zZm9ybVN0YXJ0IixmdW5jdGlvbigpe2Zvcih2YXIgaD1hcmd1bWVudHMubGVuZ3RoLGY9bmV3IEFycmF5KGgpLHY9MDt2PGg7disrKWZbdl09YXJndW1lbnRzW3ZdO3JldHVybiBkLnJ1bkxvY2FsSG9va3MoImJlZm9yZU1vZGlm''@;'; put 'put ''eVRyYW5zZm9ybUZvY3VzIiwuLi5mKX0pLENjKG45LHRoaXMpLmFkZExvY2FsSG9vaygiYWZ0ZXJUcmFuc2Zvcm1TdGFydCIsZnVuY3Rpb24oKXtmb3IodmFyIGg9YXJndW1lbnRzLmxlbmd0aCxmPW5ldyBBcnJheShoKSx2PTA7djxoO3YrKylmW3ZdPWFyZ3VtZW50c1t2XTtyZXR1cm4gZC5y''@;'; put 'put ''dW5Mb2NhbEhvb2tzKCJhZnRlck1vZGlmeVRyYW5zZm9ybUZvY3VzIiwuLi5mKX0pfWdldFNlbGVjdGVkUmFuZ2UoKXtyZXR1cm4gdGhpcy5zZWxlY3RlZFJhbmdlfW1hcmtTb3VyY2UobCl7RnAoa1AsdGhpcyxsKX1tYXJrRW5kU291cmNlKCl7RnAoa1AsdGhpcywidW5rbm93biIpfWdldFNl''@;'; put 'put ''bGVjdGlvblNvdXJjZSgpe3JldHVybiBDYyhrUCx0aGlzKX1zZXRFeHBlY3RlZExheWVycyhsKXtGcChuVCx0aGlzLGwpfWJlZ2luKCl7dGhpcy5pblByb2dyZXNzPSEwfWZpbmlzaCgpe3RoaXMucnVuTG9jYWxIb29rcygiYWZ0ZXJTZWxlY3Rpb25GaW5pc2hlZCIsQXJyYXkuZnJvbSh0aGlz''@;'; put 'put ''LnNlbGVjdGVkUmFuZ2UpKSx0aGlzLmluUHJvZ3Jlc3M9ITEsRnAoblQsdGhpcywtMSl9aXNJblByb2dyZXNzKCl7cmV0dXJuIHRoaXMuaW5Qcm9ncmVzc31zZXRSYW5nZVN0YXJ0KGwsYSl7bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50''@;'; put 'put ''c1syXSxoPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdP2FyZ3VtZW50c1szXTpsO2NvbnN0IGY9Im11bHRpcGxlIj09PXRoaXMuc2V0dGluZ3Muc2VsZWN0aW9uTW9kZSx2PV9jKGEpP3RoaXMudGFibGVQcm9wcy5nZXRTaG9ydGN1dE1hbmFnZXIoKS5pc0N0cmxQ''@;'; put 'put ''cmVzc2VkKCk6YSxNPWwuY2xvbmUoKTtGcChBUCx0aGlzLCExKSx0aGlzLnJ1bkxvY2FsSG9va3MoImJlZm9yZVNldFJhbmdlU3RhcnQiKyhkPyJPbmx5IjoiIiksTSksKCFmfHxmJiYhdiYmX2MoYSkpJiZ0aGlzLnNlbGVjdGVkUmFuZ2UuY2xlYXIoKSx0aGlzLnNlbGVjdGVkUmFuZ2UuYWRk''@;'; put 'put ''KE0pLmN1cnJlbnQoKS5zZXRIaWdobGlnaHQoaC5jbG9uZSgpKSwwPT09dGhpcy5nZXRMYXllckxldmVsKCkmJih0aGlzLnNlbGVjdGVkQnlSb3dIZWFkZXIuY2xlYXIoKSx0aGlzLnNlbGVjdGVkQnlDb2x1bW5IZWFkZXIuY2xlYXIoKSksZHx8dGhpcy5zZXRSYW5nZUVuZChsKX1zZXRSYW5n''@;'; put 'put ''ZVN0YXJ0T25seShsLGEpe3RoaXMuc2V0UmFuZ2VTdGFydChsLGEsITAsYXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOmwpfXNldFJhbmdlRW5kKGwpe2lmKHRoaXMuc2VsZWN0ZWRSYW5nZS5pc0VtcHR5KCkpcmV0dXJuO2NvbnN0IGE9bC5j''@;'; put 'put ''bG9uZSgpLGQ9dGhpcy50YWJsZVByb3BzLmNvdW50Um93cygpLGg9dGhpcy50YWJsZVByb3BzLmNvdW50Q29scygpLGY9dGhpcy5zZWxlY3RlZFJhbmdlLmN1cnJlbnQoKS5jbG9uZSgpLnNldFRvKGwpLmlzU2luZ2xlSGVhZGVyKCk7aWYoKGQ+MHx8aD4wKSYmKDA9PT1kJiZhLmNvbDwwJiYh''@;'; put 'put ''Znx8MD09PWgmJmEucm93PDAmJiFmKSlyZXR1cm47dGhpcy5ydW5Mb2NhbEhvb2tzKCJiZWZvcmVTZXRSYW5nZUVuZCIsYSksdGhpcy5iZWdpbigpO2NvbnN0IHY9dGhpcy5zZWxlY3RlZFJhbmdlLmN1cnJlbnQoKTtpZih0aGlzLnNldHRpbmdzLm5hdmlnYWJsZUhlYWRlcnN8fHYuaGlnaGxp''@;'; put 'put ''Z2h0Lm5vcm1hbGl6ZSgpLCJzaW5nbGUiPT09dGhpcy5zZXR0aW5ncy5zZWxlY3Rpb25Nb2RlKXYuc2V0RnJvbSh2LmhpZ2hsaWdodCksdi5zZXRUbyh2LmhpZ2hsaWdodCk7ZWxzZXtjb25zdCBEPXYuZ2V0SG9yaXpvbnRhbERpcmVjdGlvbigpLFo9di5nZXRWZXJ0aWNhbERpcmVjdGlvbigp''@;'; put 'put ''LHJlPXRoaXMuaXNNdWx0aXBsZSgpO3Yuc2V0VG8oYSkscmUmJihEIT09di5nZXRIb3Jpem9udGFsRGlyZWN0aW9uKCl8fDE9PT12LmdldFdpZHRoKCkmJiF2LmluY2x1ZGVzKHYuaGlnaGxpZ2h0KSkmJnYuZnJvbS5hc3NpZ24oe2NvbDp2LmhpZ2hsaWdodC5jb2x9KSxyZSYmKFohPT12Lmdl''@;'; put 'put ''dFZlcnRpY2FsRGlyZWN0aW9uKCl8fDE9PT12LmdldEhlaWdodCgpJiYhdi5pbmNsdWRlcyh2LmhpZ2hsaWdodCkpJiZ2LmZyb20uYXNzaWduKHtyb3c6di5oaWdobGlnaHQucm93fSl9ZD4wJiZoPjAmJighdGhpcy5zZXR0aW5ncy5uYXZpZ2FibGVIZWFkZXJzfHx0aGlzLnNldHRpbmdzLm5h''@;'; put 'put ''dmlnYWJsZUhlYWRlcnMmJiF2LmlzU2luZ2xlSGVhZGVyKCkpJiZ2LnRvLm5vcm1hbGl6ZSgpLHRoaXMucnVuTG9jYWxIb29rcygiYmVmb3JlSGlnaGxpZ2h0U2V0IiksdGhpcy5zZXRSYW5nZUZvY3VzKHRoaXMuc2VsZWN0ZWRSYW5nZS5jdXJyZW50KCkuaGlnaGxpZ2h0KSx0aGlzLmFwcGx5''@;'; put 'put ''QW5kQ29tbWl0KCk7Y29uc3QgTT0tMT09PUNjKG5ULHRoaXMpfHx0aGlzLnNlbGVjdGVkUmFuZ2Uuc2l6ZSgpPT09Q2MoblQsdGhpcyk7dGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlclNldFJhbmdlRW5kIixsLE0pfWFwcGx5QW5kQ29tbWl0KCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2''@;'; put 'put ''b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnRoaXMuc2VsZWN0ZWRSYW5nZS5jdXJyZW50KCksYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06dGhpcy5nZXRMYXllckxldmVsKCk7Y29uc3QgZD10aGlzLnRhYmxlUHJvcHMu''@;'; put 'put ''Y291bnRSb3dzKCksaD10aGlzLnRhYmxlUHJvcHMuY291bnRDb2xzKCk7YTx0aGlzLmhpZ2hsaWdodC5sYXllckxldmVsJiYoWW4odGhpcy5oaWdobGlnaHQuZ2V0QXJlYXMoKSxCZT0+e0JlLmNsZWFyKCl9KSxZbih0aGlzLmhpZ2hsaWdodC5nZXRMYXllcmVkQXJlYXMoKSxCZT0+e0JlLmNs''@;'; put 'put ''ZWFyKCl9KSxZbih0aGlzLmhpZ2hsaWdodC5nZXRSb3dIZWFkZXJzKCksQmU9PntCZS5jbGVhcigpfSksWW4odGhpcy5oaWdobGlnaHQuZ2V0Q29sdW1uSGVhZGVycygpLEJlPT57QmUuY2xlYXIoKX0pLFluKHRoaXMuaGlnaGxpZ2h0LmdldEFjdGl2ZVJvd0hlYWRlcnMoKSxCZT0+e0JlLmNs''@;'; put 'put ''ZWFyKCl9KSxZbih0aGlzLmhpZ2hsaWdodC5nZXRBY3RpdmVDb2x1bW5IZWFkZXJzKCksQmU9PntCZS5jbGVhcigpfSksWW4odGhpcy5oaWdobGlnaHQuZ2V0QWN0aXZlQ29ybmVySGVhZGVycygpLEJlPT57QmUuY2xlYXIoKX0pLFluKHRoaXMuaGlnaGxpZ2h0LmdldFJvd0hpZ2hsaWdodHMo''@;'; put 'put ''KSxCZT0+e0JlLmNsZWFyKCl9KSxZbih0aGlzLmhpZ2hsaWdodC5nZXRDb2x1bW5IaWdobGlnaHRzKCksQmU9PntCZS5jbGVhcigpfSkpLHRoaXMuaGlnaGxpZ2h0LnVzZUxheWVyTGV2ZWwoYSk7Y29uc3QgZj10aGlzLmhpZ2hsaWdodC5jcmVhdGVBcmVhKCksdj10aGlzLmhpZ2hsaWdodC5j''@;'; put 'put ''cmVhdGVMYXllcmVkQXJlYSgpLE09dGhpcy5oaWdobGlnaHQuY3JlYXRlUm93SGVhZGVyKCksRD10aGlzLmhpZ2hsaWdodC5jcmVhdGVDb2x1bW5IZWFkZXIoKSxaPXRoaXMuaGlnaGxpZ2h0LmNyZWF0ZUFjdGl2ZVJvd0hlYWRlcigpLHJlPXRoaXMuaGlnaGxpZ2h0LmNyZWF0ZUFjdGl2ZUNv''@;'; put 'put ''bHVtbkhlYWRlcigpLGNlPXRoaXMuaGlnaGxpZ2h0LmNyZWF0ZUFjdGl2ZUNvcm5lckhlYWRlcigpLGJlPXRoaXMuaGlnaGxpZ2h0LmNyZWF0ZVJvd0hpZ2hsaWdodCgpLEVlPXRoaXMuaGlnaGxpZ2h0LmNyZWF0ZUNvbHVtbkhpZ2hsaWdodCgpO2lmKGYuY2xlYXIoKSx2LmNsZWFyKCksTS5j''@;'; put 'put ''bGVhcigpLEQuY2xlYXIoKSxaLmNsZWFyKCkscmUuY2xlYXIoKSxjZS5jbGVhcigpLGJlLmNsZWFyKCksRWUuY2xlYXIoKSx0aGlzLmhpZ2hsaWdodC5pc0VuYWJsZWRGb3IodlgsbC5oaWdobGlnaHQpJiYodGhpcy5pc011bHRpcGxlKCl8fGE+PTEpJiYoZi5hZGQobC5mcm9tKS5hZGQobC50''@;'; put 'put ''bykuY29tbWl0KCksdi5hZGQobC5mcm9tKS5hZGQobC50bykuY29tbWl0KCksMT09PWEpKXtjb25zdCBCZT10aGlzLnNlbGVjdGVkUmFuZ2UucHJldmlvdXMoKTt0aGlzLmhpZ2hsaWdodC51c2VMYXllckxldmVsKGEtMSksdGhpcy5oaWdobGlnaHQuY3JlYXRlQXJlYSgpLmFkZChCZS5mcm9t''@;'; put 'put ''KS5jb21taXQoKS5zeW5jV2l0aChCZSksdGhpcy5oaWdobGlnaHQuY3JlYXRlTGF5ZXJlZEFyZWEoKS5hZGQoQmUuZnJvbSkuY29tbWl0KCkuc3luY1dpdGgoQmUpLHRoaXMuaGlnaGxpZ2h0LnVzZUxheWVyTGV2ZWwoYSl9aWYodGhpcy5oaWdobGlnaHQuaXNFbmFibGVkRm9yKG1YLGwuaGln''@;'; put 'put ''aGxpZ2h0KSl7aWYoIWwuaXNTaW5nbGVIZWFkZXIoKSl7Y29uc3QgcnQ9dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoTWF0aC5tYXgobC5mcm9tLnJvdywwKSwtMSkscHQ9dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMobC50by5yb3csLTEpLGR0PXRoaXMudGFibGVQ''@;'; put 'put ''cm9wcy5jcmVhdGVDZWxsQ29vcmRzKC0xLE1hdGgubWF4KGwuZnJvbS5jb2wsMCkpLEp0PXRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKC0xLGwudG8uY29sKTsic2luZ2xlIj09PXRoaXMuc2V0dGluZ3Muc2VsZWN0aW9uTW9kZT8oTS5hZGQocnQpLmNvbW1pdCgpLEQuYWRkKGR0''@;'; put 'put ''KS5jb21taXQoKSxiZS5hZGQocnQpLmNvbW1pdCgpLEVlLmFkZChkdCkuY29tbWl0KCkpOihNLmFkZChydCkuYWRkKHB0KS5jb21taXQoKSxELmFkZChkdCkuYWRkKEp0KS5jb21taXQoKSxiZS5hZGQocnQpLmFkZChwdCkuY29tbWl0KCksRWUuYWRkKGR0KS5hZGQoSnQpLmNvbW1pdCgpKX1j''@;'; put 'put ''b25zdCBCZT0hQ2ModFQsdGhpcykmJnRoaXMuaXNFbnRpcmVSb3dTZWxlY3RlZCgpJiYoaD4wJiZoPT09bC5nZXRXaWR0aCgpfHwwPT09aCYmdGhpcy5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKSkscWU9IUNjKHRULHRoaXMpJiZ0aGlzLmlzRW50aXJlQ29sdW1uU2VsZWN0ZWQoKSYmKGQ+MCYm''@;'; put 'put ''ZD09PWwuZ2V0SGVpZ2h0KCl8fDA9PT1kJiZ0aGlzLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpKTtCZSYmWi5hZGQodGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoTWF0aC5tYXgobC5mcm9tLnJvdywwKSxNYXRoLm1pbigtdGhpcy50YWJsZVByb3BzLmNvdW50Um93SGVhZGVy''@;'; put 'put ''cygpLC0xKSkpLmFkZCh0aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhNYXRoLm1heChsLnRvLnJvdywwKSwtMSkpLmNvbW1pdCgpLHFlJiZyZS5hZGQodGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoTWF0aC5taW4oLXRoaXMudGFibGVQcm9wcy5jb3VudENvbEhlYWRl''@;'; put 'put ''cnMoKSwtMSksTWF0aC5tYXgobC5mcm9tLmNvbCwwKSkpLmFkZCh0aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcygtMSxNYXRoLm1heChsLnRvLmNvbCwwKSkpLmNvbW1pdCgpLEJlJiZxZSYmY2UuYWRkKHRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKC10aGlzLnRhYmxl''@;'; put 'put ''UHJvcHMuY291bnRDb2xIZWFkZXJzKCksLXRoaXMudGFibGVQcm9wcy5jb3VudFJvd0hlYWRlcnMoKSkpLmFkZCh0aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcygtMSwtMSkpLmNvbW1pdCgpfX1zZXRSYW5nZUZvY3VzKGwpe2lmKHRoaXMuc2VsZWN0ZWRSYW5nZS5pc0VtcHR5KCkp''@;'; put 'put ''cmV0dXJuO2NvbnN0IGE9dGhpcy5zZWxlY3RlZFJhbmdlLmN1cnJlbnQoKTt0aGlzLmluUHJvZ3Jlc3N8fHRoaXMucnVuTG9jYWxIb29rcygiYmVmb3JlU2V0Rm9jdXMiLGwpO2NvbnN0IGQ9dGhpcy5oaWdobGlnaHQuZ2V0Rm9jdXMoKTtkLmNsZWFyKCksYS5zZXRIaWdobGlnaHQobCksdGhp''@;'; put 'put ''cy5pblByb2dyZXNzfHx0aGlzLnJ1bkxvY2FsSG9va3MoImJlZm9yZUhpZ2hsaWdodFNldCIpLHRoaXMuaGlnaGxpZ2h0LmlzRW5hYmxlZEZvcihRRSxhLmhpZ2hsaWdodCkmJmQuYWRkKGEuaGlnaGxpZ2h0KS5jb21taXQoKS5zeW5jV2l0aChhKSx0aGlzLmluUHJvZ3Jlc3N8fChGcChBUCx0''@;'; put 'put ''aGlzLCEwKSx0aGlzLnJ1bkxvY2FsSG9va3MoImFmdGVyU2V0Rm9jdXMiLGEuaGlnaGxpZ2h0KSl9dHJhbnNmb3JtU3RhcnQobCxhKXtsZXQgZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdO3RoaXMuc2V0dGluZ3MubmF2aWdhYmxlSGVh''@;'; put 'put ''ZGVycz9DYyhfMSx0aGlzKS5zZXRPZmZzZXRTaXplKHt4OnRoaXMudGFibGVQcm9wcy5jb3VudFJvd0hlYWRlcnMoKSx5OnRoaXMudGFibGVQcm9wcy5jb3VudENvbEhlYWRlcnMoKX0pOkNjKF8xLHRoaXMpLnJlc2V0T2Zmc2V0U2l6ZSgpLHRoaXMuc2V0UmFuZ2VTdGFydChDYyhfMSx0aGlz''@;'; put 'put ''KS50cmFuc2Zvcm1TdGFydChsLGEsZCkpfXRyYW5zZm9ybUVuZChsLGEpe3RoaXMuc2V0dGluZ3MubmF2aWdhYmxlSGVhZGVycz9DYyhfMSx0aGlzKS5zZXRPZmZzZXRTaXplKHt4OnRoaXMudGFibGVQcm9wcy5jb3VudFJvd0hlYWRlcnMoKSx5OnRoaXMudGFibGVQcm9wcy5jb3VudENvbEhl''@;'; put 'put ''YWRlcnMoKX0pOkNjKF8xLHRoaXMpLnJlc2V0T2Zmc2V0U2l6ZSgpLHRoaXMuc2V0UmFuZ2VFbmQoQ2MoXzEsdGhpcykudHJhbnNmb3JtRW5kKGwsYSkpfXRyYW5zZm9ybUZvY3VzKGwsYSl7Y29uc3QgZD10aGlzLnNlbGVjdGVkUmFuZ2UuY3VycmVudCgpLHtyb3c6aCxjb2w6Zn09ZC5nZXRP''@;'; put 'put ''dXRlclRvcFN0YXJ0Q29ybmVyKCksdj10aGlzLnRhYmxlUHJvcHMuY291bnRSZW5kZXJhYmxlQ29sdW1uc0luUmFuZ2UoMCxmLTEpLE09dGhpcy50YWJsZVByb3BzLmNvdW50UmVuZGVyYWJsZVJvd3NJblJhbmdlKDAsaC0xKTtkLmhpZ2hsaWdodC5pc0hlYWRlcigpP0NjKG45LHRoaXMpLnNl''@;'; put 'put ''dE9mZnNldFNpemUoe3g6ZjwwP01hdGguYWJzKGYpOi12LHk6aDwwP01hdGguYWJzKGgpOi1NfSk6Q2MobjksdGhpcykuc2V0T2Zmc2V0U2l6ZSh7eDpmPDA/MDotdix5Omg8MD8wOi1NfSk7Y29uc3QgRD1DYyhuOSx0aGlzKS50cmFuc2Zvcm1TdGFydChsLGEpO3RoaXMuc2V0UmFuZ2VGb2N1''@;'; put 'put ''cyhELm5vcm1hbGl6ZSgpKX1zaGlmdFJvd3MobCxhKXtpZighdGhpcy5pc1NlbGVjdGVkKCkpcmV0dXJuO2NvbnN0IGQ9dGhpcy5zZWxlY3RlZFJhbmdlLmN1cnJlbnQoKTtpZih0aGlzLmlzU2VsZWN0ZWRCeUNvcm5lcigpKXRoaXMuc2VsZWN0QWxsKCEwLCEwLHtkaXNhYmxlSGVhZGVyc0hp''@;'; put 'put ''Z2hsaWdodDohMH0pO2Vsc2UgaWYodGhpcy5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKXx8ZC5nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCkucm93Pj1sKXtjb25zdHtmcm9tOmgsdG86ZixoaWdobGlnaHQ6dn09ZCxNPXRoaXMudGFibGVQcm9wcy5jb3VudFJvd3MoKSxEPXRoaXMuaXNTZWxl''@;'; put 'put ''Y3RlZEJ5Um93SGVhZGVyKCksWj10aGlzLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpLHJlPVo/LTE6MCxjZT1aPzA6YTt0aGlzLmdldFNlbGVjdGVkUmFuZ2UoKS5wb3AoKTtjb25zdCBiZT10aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhrcyhoLnJvdytjZSxyZSxNLTEpLGgu''@;'; put 'put ''Y29sKSxFZT10aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhrcyhmLnJvdythLHJlLE0tMSksZi5jb2wpO3RoaXMubWFya1NvdXJjZSgic2hpZnQiKSx2LnJvdz49bD90aGlzLnNldFJhbmdlU3RhcnRPbmx5KGJlLCEwLHRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKGtz''@;'; put 'put ''KHYucm93K2EsMCxNLTEpLHYuY29sKSk6dGhpcy5zZXRSYW5nZVN0YXJ0T25seShiZSwhMCksRCYmdGhpcy5zZWxlY3RlZEJ5Um93SGVhZGVyLmFkZCh0aGlzLmdldExheWVyTGV2ZWwoKSksWiYmdGhpcy5zZWxlY3RlZEJ5Q29sdW1uSGVhZGVyLmFkZCh0aGlzLmdldExheWVyTGV2ZWwoKSks''@;'; put 'put ''dGhpcy5zZXRSYW5nZUVuZChFZSksdGhpcy5tYXJrRW5kU291cmNlKCl9fXNoaWZ0Q29sdW1ucyhsLGEpe2lmKCF0aGlzLmlzU2VsZWN0ZWQoKSlyZXR1cm47Y29uc3QgZD10aGlzLnNlbGVjdGVkUmFuZ2UuY3VycmVudCgpO2lmKHRoaXMuaXNTZWxlY3RlZEJ5Q29ybmVyKCkpdGhpcy5zZWxl''@;'; put 'put ''Y3RBbGwoITAsITAse2Rpc2FibGVIZWFkZXJzSGlnaGxpZ2h0OiEwfSk7ZWxzZSBpZih0aGlzLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpfHxkLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKS5jb2w+PWwpe2NvbnN0e2Zyb206aCx0bzpmLGhpZ2hsaWdodDp2fT1kLE09dGhpcy50YWJsZVByb3Bz''@;'; put 'put ''LmNvdW50Q29scygpLEQ9dGhpcy5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKSxaPXRoaXMuaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCkscmU9RD8tMTowLGNlPUQ/MDphO3RoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpLnBvcCgpO2NvbnN0IGJlPXRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29v''@;'; put 'put ''cmRzKGgucm93LGtzKGguY29sK2NlLHJlLE0tMSkpLEVlPXRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKGYucm93LGtzKGYuY29sK2EscmUsTS0xKSk7dGhpcy5tYXJrU291cmNlKCJzaGlmdCIpLHYuY29sPj1sP3RoaXMuc2V0UmFuZ2VTdGFydE9ubHkoYmUsITAsdGhpcy50YWJs''@;'; put 'put ''ZVByb3BzLmNyZWF0ZUNlbGxDb29yZHModi5yb3csa3Modi5jb2wrYSwwLE0tMSkpKTp0aGlzLnNldFJhbmdlU3RhcnRPbmx5KGJlLCEwKSxEJiZ0aGlzLnNlbGVjdGVkQnlSb3dIZWFkZXIuYWRkKHRoaXMuZ2V0TGF5ZXJMZXZlbCgpKSxaJiZ0aGlzLnNlbGVjdGVkQnlDb2x1bW5IZWFkZXIu''@;'; put 'put ''YWRkKHRoaXMuZ2V0TGF5ZXJMZXZlbCgpKSx0aGlzLnNldFJhbmdlRW5kKEVlKSx0aGlzLm1hcmtFbmRTb3VyY2UoKX19Z2V0TGF5ZXJMZXZlbCgpe3JldHVybiB0aGlzLnNlbGVjdGVkUmFuZ2Uuc2l6ZSgpLTF9aXNTZWxlY3RlZCgpe3JldHVybiF0aGlzLnNlbGVjdGVkUmFuZ2UuaXNFbXB0''@;'; put 'put ''eSgpfWlzTXVsdGlwbGUoKXtpZighdGhpcy5pc1NlbGVjdGVkKCkpcmV0dXJuITE7Y29uc3QgbD1GZCghdGhpcy5zZWxlY3RlZFJhbmdlLmN1cnJlbnQoKS5pc1NpbmdsZSgpKTtyZXR1cm4gdGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlcklzTXVsdGlwbGVTZWxlY3Rpb24iLGwpLGwudmFsdWV9''@;'; put 'put ''aXNGb2N1c1NlbGVjdGlvbkNoYW5nZWQoKXtyZXR1cm4gdGhpcy5pc1NlbGVjdGVkKCkmJkNjKEFQLHRoaXMpfWlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp0aGlzLmdldExheWVyTGV2''@;'; put 'put ''ZWwoKTtyZXR1cm4hdGhpcy5pc1NlbGVjdGVkQnlDb3JuZXIobCkmJigtMT09PWw/dGhpcy5zZWxlY3RlZEJ5Um93SGVhZGVyLnNpemU+MDp0aGlzLnNlbGVjdGVkQnlSb3dIZWFkZXIuaGFzKGwpKX1pc0VudGlyZVJvd1NlbGVjdGVkKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lk''@;'; put 'put ''IDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnRoaXMuZ2V0TGF5ZXJMZXZlbCgpO2NvbnN0IGE9aD0+e2NvbnN0e2NvbDpmfT1oLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKSx2PXRoaXMudGFibGVQcm9wcy5jb3VudFJvd0hlYWRlcnMoKSxNPXRoaXMudGFibGVQcm9wcy5jb3VudENv''@;'; put 'put ''bHMoKTtyZXR1cm4odj4wJiZmPDB8fDA9PT12KSYmaC5nZXRXaWR0aCgpPT09TX07aWYoLTE9PT1sKXJldHVybiBBcnJheS5mcm9tKHRoaXMuc2VsZWN0ZWRSYW5nZSkuc29tZShoPT5hKGgpKTtjb25zdCBkPXRoaXMuc2VsZWN0ZWRSYW5nZS5wZWVrQnlJbmRleChsKTtyZXR1cm4hIWQmJmEo''@;'; put 'put ''ZCl9aXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnRoaXMuZ2V0TGF5ZXJMZXZlbCgpO3JldHVybiF0aGlzLmlzU2VsZWN0ZWRCeUNvcm5lcigpJiYoLTE9PT1sP3RoaXMuc2VsZWN0''@;'; put 'put ''ZWRCeUNvbHVtbkhlYWRlci5zaXplPjA6dGhpcy5zZWxlY3RlZEJ5Q29sdW1uSGVhZGVyLmhhcyhsKSl9aXNFbnRpcmVDb2x1bW5TZWxlY3RlZCgpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp0aGlzLmdldExheWVyTGV2ZWwo''@;'; put 'put ''KTtjb25zdCBhPWg9Pntjb25zdHtyb3c6Zn09aC5nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCksdj10aGlzLnRhYmxlUHJvcHMuY291bnRDb2xIZWFkZXJzKCksTT10aGlzLnRhYmxlUHJvcHMuY291bnRSb3dzKCk7cmV0dXJuKHY+MCYmZjwwfHwwPT09dikmJmguZ2V0SGVpZ2h0KCk9PT1NfTtp''@;'; put 'put ''ZigtMT09PWwpcmV0dXJuIEFycmF5LmZyb20odGhpcy5zZWxlY3RlZFJhbmdlKS5zb21lKGg9PmEoaCkpO2NvbnN0IGQ9dGhpcy5zZWxlY3RlZFJhbmdlLnBlZWtCeUluZGV4KGwpO3JldHVybiEhZCYmYShkKX1pc1NlbGVjdGVkQnlBbnlIZWFkZXIoKXtyZXR1cm4gdGhpcy5pc1NlbGVjdGVk''@;'; put 'put ''QnlSb3dIZWFkZXIoLTEpfHx0aGlzLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigtMSl8fHRoaXMuaXNTZWxlY3RlZEJ5Q29ybmVyKCl9aXNTZWxlY3RlZEJ5Q29ybmVyKCl7cmV0dXJuIHRoaXMuc2VsZWN0ZWRCeUNvbHVtbkhlYWRlci5oYXModGhpcy5nZXRMYXllckxldmVsKCkpJiZ0aGlz''@;'; put 'put ''LnNlbGVjdGVkQnlSb3dIZWFkZXIuaGFzKHRoaXMuZ2V0TGF5ZXJMZXZlbCgpKX1pbkluU2VsZWN0aW9uKGwpe3JldHVybiB0aGlzLnNlbGVjdGVkUmFuZ2UuaW5jbHVkZXMobCl9aXNDZWxsQ29ybmVyVmlzaWJsZSgpe3JldHVybiB0aGlzLnNldHRpbmdzLmZpbGxIYW5kbGUmJiF0aGlzLnRh''@;'; put 'put ''YmxlUHJvcHMuaXNFZGl0b3JPcGVuZWQoKSYmIXRoaXMuaXNNdWx0aXBsZSgpfWlzQ2VsbFZpc2libGUobCl7Y29uc3QgYT10aGlzLnRhYmxlUHJvcHMudmlzdWFsVG9SZW5kZXJhYmxlQ29vcmRzKGwpO3JldHVybiBudWxsIT09YS5yb3cmJm51bGwhPT1hLmNvbH1pc0FyZWFDb3JuZXJWaXNp''@;'; put 'put ''YmxlKGwpe3JldHVybighTnVtYmVyLmlzSW50ZWdlcihsKXx8bD09PXRoaXMuZ2V0TGF5ZXJMZXZlbCgpKSYmdGhpcy5zZXR0aW5ncy5maWxsSGFuZGxlJiYhdGhpcy50YWJsZVByb3BzLmlzRWRpdG9yT3BlbmVkKCkmJnRoaXMuaXNNdWx0aXBsZSgpfWNsZWFyKCl7dGhpcy5zZWxlY3RlZFJh''@;'; put 'put ''bmdlLmNsZWFyKCksdGhpcy5oaWdobGlnaHQuY2xlYXIoKX1kZXNlbGVjdCgpe3RoaXMuaXNTZWxlY3RlZCgpJiYodGhpcy5pblByb2dyZXNzPSExLHRoaXMuY2xlYXIoKSx0aGlzLnJ1bkxvY2FsSG9va3MoImFmdGVyRGVzZWxlY3QiKSl9c2VsZWN0QWxsKCl7dmFyIGw7bGV0IGE9YXJndW1l''@;'; put 'put ''bnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXSxkPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV0saD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06''@;'; put 'put ''e2ZvY3VzUG9zaXRpb246ITEsZGlzYWJsZUhlYWRlcnNIaWdobGlnaHQ6ITF9O2NvbnN0IGY9dGhpcy50YWJsZVByb3BzLmNvdW50Um93cygpLHY9dGhpcy50YWJsZVByb3BzLmNvdW50Q29scygpLE09dGhpcy50YWJsZVByb3BzLmNvdW50Um93SGVhZGVycygpLEQ9dGhpcy50YWJsZVByb3Bz''@;'; put 'put ''LmNvdW50Q29sSGVhZGVycygpLFo9ZD8tRDowLHJlPWE/LU06MDtpZigwPT09WiYmMD09PXJlJiYoMD09PWZ8fDA9PT12KSlyZXR1cm47bGV0IGNlPW51bGw9PT0obD10aGlzLmdldFNlbGVjdGVkUmFuZ2UoKS5jdXJyZW50KCkpfHx2b2lkIDA9PT1sP3ZvaWQgMDpsLmhpZ2hsaWdodDtjb25z''@;'; put 'put ''dHtmb2N1c1Bvc2l0aW9uOmJlLGRpc2FibGVIZWFkZXJzSGlnaGxpZ2h0OkVlfT1oO0ZwKHRULHRoaXMsRWUpLGJlJiZOdW1iZXIuaXNJbnRlZ2VyKGJlPy5yb3cpJiZOdW1iZXIuaXNJbnRlZ2VyKGJlPy5jb2wpJiYoY2U9dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoa3MoYmUu''@;'; put 'put ''cm93LFosZi0xKSxrcyhiZS5jb2wscmUsdi0xKSkpO2NvbnN0IEJlPXRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKFoscmUpLHFlPXRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKGYtMSx2LTEpO3RoaXMuY2xlYXIoKSx0aGlzLnNldFJhbmdlU3RhcnRPbmx5KEJlLHZv''@;'; put 'put ''aWQgMCxjZSkscmU8MCYmdGhpcy5zZWxlY3RlZEJ5Um93SGVhZGVyLmFkZCh0aGlzLmdldExheWVyTGV2ZWwoKSksWjwwJiZ0aGlzLnNlbGVjdGVkQnlDb2x1bW5IZWFkZXIuYWRkKHRoaXMuZ2V0TGF5ZXJMZXZlbCgpKSx0aGlzLnNldFJhbmdlRW5kKHFlKSx0aGlzLmZpbmlzaCgpLEZwKHRU''@;'; put 'put ''LHRoaXMsITEpfXNlbGVjdENlbGxzKGwpe3ZhciBhPXRoaXM7Y29uc3QgZD14XyhsKTtpZigxPT09ZClyZXR1cm4hMTtpZigwPT09ZCl0aHJvdyBuZXcgRXJyb3IoZ2xgVW5zdXBwb3J0ZWQgZm9ybWF0IG9mIHRoZSBzZWxlY3Rpb24gcmFuZ2VzIHdhcyBwYXNzZWQuIFRvIHNlbGVjdCBjZWxs''@;'; put 'put ''cyBwYXNzXHgyMAogICAgICAgIHRoZSBjb29yZGluYXRlcyBhcyBhbiBhcnJheSBvZiBhcnJheXMgKFtbcm93U3RhcnQsIGNvbHVtblN0YXJ0L2NvbHVtblByb3BTdGFydCwgcm93RW5kLFx4MjAKICAgICAgICBjb2x1bW5FbmQvY29sdW1uUHJvcEVuZF1dKSBvciBhcyBhbiBhcnJheSBvZiBD''@;'; put 'put ''ZWxsUmFuZ2Ugb2JqZWN0cy5gKTtjb25zdCBoPWVUKGQse2NyZWF0ZUNlbGxDb29yZHM6ZnVuY3Rpb24oKXtyZXR1cm4gYS50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoLi4uYXJndW1lbnRzKX0sY3JlYXRlQ2VsbFJhbmdlOmZ1bmN0aW9uKCl7cmV0dXJuIGEudGFibGVQcm9wcy5jcmVh''@;'; put 'put ''dGVDZWxsUmFuZ2UoLi4uYXJndW1lbnRzKX0scHJvcFRvQ29sOkQ9PnRoaXMudGFibGVQcm9wcy5wcm9wVG9Db2woRCksa2VlcERpcmVjdGlvbjohMH0pLGY9dGhpcy5zZXR0aW5ncy5uYXZpZ2FibGVIZWFkZXJzLHY9e2NvdW50Um93czp0aGlzLnRhYmxlUHJvcHMuY291bnRSb3dzKCksY291''@;'; put 'put ''bnRDb2xzOnRoaXMudGFibGVQcm9wcy5jb3VudENvbHMoKSxjb3VudFJvd0hlYWRlcnM6Zj90aGlzLnRhYmxlUHJvcHMuY291bnRSb3dIZWFkZXJzKCk6MCxjb3VudENvbEhlYWRlcnM6Zj90aGlzLnRhYmxlUHJvcHMuY291bnRDb2xIZWFkZXJzKCk6MH0sTT0hbC5zb21lKEQ9Pntjb25zdCBa''@;'; put 'put ''PWgoRCkscmU9Wi5pc1ZhbGlkKHYpO3JldHVybiEocmUmJiFaLmNvbnRhaW5zSGVhZGVycygpfHxyZSYmWi5jb250YWluc0hlYWRlcnMoKSYmWi5pc1NpbmdsZUhlYWRlcigpKX0pO3JldHVybiBNJiYodGhpcy5jbGVhcigpLHRoaXMuc2V0RXhwZWN0ZWRMYXllcnMobC5sZW5ndGgpLFluKGws''@;'; put 'put ''RD0+e2NvbnN0e2Zyb206Wix0bzpyZX09aChEKTt0aGlzLnNldFJhbmdlU3RhcnRPbmx5KFouY2xvbmUoKSwhMSksdGhpcy5zZXRSYW5nZUVuZChyZS5jbG9uZSgpKX0pLHRoaXMuZmluaXNoKCkpLE19c2VsZWN0Q29sdW1ucyhsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9''@;'; put 'put ''PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bCxkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTowO2NvbnN0IGg9InN0cmluZyI9PXR5cGVvZiBsP3RoaXMudGFibGVQcm9wcy5wcm9wVG9Db2wobCk6bCxmPSJzdHJpbmciPT10eXBlb2Yg''@;'; put 'put ''YT90aGlzLnRhYmxlUHJvcHMucHJvcFRvQ29sKGEpOmEsdj10aGlzLnRhYmxlUHJvcHMuY291bnRSb3dzKCksTT10aGlzLnRhYmxlUHJvcHMuY291bnRDb2xzKCksRD10aGlzLnRhYmxlUHJvcHMuY291bnRDb2xIZWFkZXJzKCksWj0wPT09RD8wOi1ELHJlPXRoaXMudGFibGVQcm9wcy5jcmVh''@;'; put 'put ''dGVDZWxsQ29vcmRzKFosaCksY2U9dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHModi0xLGYpLGJlPXRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsUmFuZ2UocmUscmUsY2UpLmlzVmFsaWQoe2NvdW50Um93czp2LGNvdW50Q29sczpNLGNvdW50Um93SGVhZGVyczowLGNvdW50Q29s''@;'; put 'put ''SGVhZGVyczpEfSk7aWYoYmUpe2xldCBFZT0wLEJlPTA7TnVtYmVyLmlzSW50ZWdlcihkPy5yb3cpJiZOdW1iZXIuaXNJbnRlZ2VyKGQ/LmNvbCk/KEVlPWtzKGQucm93LFosdi0xKSxCZT1rcyhkLmNvbCxNYXRoLm1pbihoLGYpLE1hdGgubWF4KGgsZikpKTooRWU9a3MoZCxaLHYtMSksQmU9''@;'; put 'put ''aCk7Y29uc3QgcWU9dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoRWUsQmUpLHJ0PTA9PT1EPzA6a3MocWUucm93LFosLTEpLHB0PXYtMSxkdD10aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhydCxoKSxKdD10aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3Jkcyhw''@;'; put 'put ''dCxmKTt0aGlzLnJ1bkxvY2FsSG9va3MoImJlZm9yZVNlbGVjdENvbHVtbnMiLGR0LEp0LHFlKSxkdC5yb3c9cnQsSnQucm93PXB0LHRoaXMuc2V0UmFuZ2VTdGFydE9ubHkoZHQsdm9pZCAwLHFlKSx0aGlzLnNlbGVjdGVkQnlDb2x1bW5IZWFkZXIuYWRkKHRoaXMuZ2V0TGF5ZXJMZXZlbCgp''@;'; put 'put ''KSx0aGlzLnNldFJhbmdlRW5kKEp0KSx0aGlzLnJ1bkxvY2FsSG9va3MoImFmdGVyU2VsZWN0Q29sdW1ucyIsZHQsSnQscWUpLHRoaXMuZmluaXNoKCl9cmV0dXJuIGJlfXNlbGVjdFJvd3MobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1l''@;'; put 'put ''bnRzWzFdOmwsZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06MDtjb25zdCBoPXRoaXMudGFibGVQcm9wcy5jb3VudFJvd3MoKSxmPXRoaXMudGFibGVQcm9wcy5jb3VudENvbHMoKSx2PXRoaXMudGFibGVQcm9wcy5jb3VudFJvd0hlYWRl''@;'; put 'put ''cnMoKSxNPTA9PT12PzA6LXYsRD10aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhsLE0pLFo9dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoYSxmLTEpLHJlPXRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsUmFuZ2UoRCxELFopLmlzVmFsaWQoe2NvdW50Um93czpoLGNv''@;'; put 'put ''dW50Q29sczpmLGNvdW50Um93SGVhZGVyczp2LGNvdW50Q29sSGVhZGVyczowfSk7aWYocmUpe2xldCBjZT0wLGJlPTA7TnVtYmVyLmlzSW50ZWdlcihkPy5yb3cpJiZOdW1iZXIuaXNJbnRlZ2VyKGQ/LmNvbCk/KGNlPWtzKGQucm93LE1hdGgubWluKGwsYSksTWF0aC5tYXgobCxhKSksYmU9''@;'; put 'put ''a3MoZC5jb2wsTSxmLTEpKTooY2U9bCxiZT1rcyhkLE0sZi0xKSk7Y29uc3QgRWU9dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoY2UsYmUpLEJlPTA9PT12PzA6a3MoRWUuY29sLE0sLTEpLHFlPWYtMSxydD10aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhsLEJlKSxw''@;'; put 'put ''dD10aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhhLHFlKTt0aGlzLnJ1bkxvY2FsSG9va3MoImJlZm9yZVNlbGVjdFJvd3MiLHJ0LHB0LEVlKSxydC5jb2w9QmUscHQuY29sPXFlLHRoaXMuc2V0UmFuZ2VTdGFydE9ubHkocnQsdm9pZCAwLEVlKSx0aGlzLnNlbGVjdGVkQnlSb3dI''@;'; put 'put ''ZWFkZXIuYWRkKHRoaXMuZ2V0TGF5ZXJMZXZlbCgpKSx0aGlzLnNldFJhbmdlRW5kKHB0KSx0aGlzLnJ1bkxvY2FsSG9va3MoImFmdGVyU2VsZWN0Um93cyIscnQscHQsRWUpLHRoaXMuZmluaXNoKCl9cmV0dXJuIHJlfXJlZnJlc2goKXtpZighdGhpcy5pc1NlbGVjdGVkKCkpcmV0dXJuO2Nv''@;'; put 'put ''bnN0IGw9dGhpcy50YWJsZVByb3BzLmNvdW50Um93cygpLGE9dGhpcy50YWJsZVByb3BzLmNvdW50Q29scygpO2lmKDA9PT1sfHwwPT09YSlyZXR1cm4gdm9pZCB0aGlzLmRlc2VsZWN0KCk7Y29uc3QgZD10aGlzLnNlbGVjdGVkUmFuZ2UucGVla0J5SW5kZXgodGhpcy5zZWxlY3RlZFJhbmdl''@;'; put 'put ''LnNpemUoKS0xKSx7ZnJvbTpoLHRvOmYsaGlnaGxpZ2h0OnZ9PWQ7dGhpcy5jbGVhcigpLHYuYXNzaWduKHtyb3c6a3Modi5yb3csLTEvMCxsLTEpLGNvbDprcyh2LmNvbCwtMS8wLGEtMSl9KSxoLmFzc2lnbih7cm93OmtzKGgucm93LC0xLzAsbC0xKSxjb2w6a3MoaC5jb2wsLTEvMCxhLTEp''@;'; put 'put ''fSksZi5hc3NpZ24oe3JvdzprcyhmLnJvdywwLGwtMSksY29sOmtzKGYuY29sLDAsYS0xKX0pLHRoaXMuc2VsZWN0ZWRSYW5nZS5yYW5nZXMucHVzaChkKSx0aGlzLmhpZ2hsaWdodC5pc0VuYWJsZWRGb3IoUUUsdGhpcy5zZWxlY3RlZFJhbmdlLmN1cnJlbnQoKS5oaWdobGlnaHQpJiZ0aGlz''@;'; put 'put ''LmhpZ2hsaWdodC5nZXRGb2N1cygpLmFkZCh2KS5jb21taXQoKS5zeW5jV2l0aChkKSx0aGlzLmFwcGx5QW5kQ29tbWl0KGQpfWNvbW1pdCgpe2lmKHRoaXMuaGlnaGxpZ2h0LmdldEN1c3RvbVNlbGVjdGlvbnMoKS5mb3JFYWNoKGg9PntoLmNvbW1pdCgpfSksIXRoaXMuaXNTZWxlY3RlZCgp''@;'; put 'put ''KXJldHVybjtjb25zdCBhPXRoaXMuZ2V0TGF5ZXJMZXZlbCgpLGQ9dGhpcy5zZWxlY3RlZFJhbmdlLmN1cnJlbnQoKTt0aGlzLmhpZ2hsaWdodC5pc0VuYWJsZWRGb3IoUUUsZC5oaWdobGlnaHQpJiZ0aGlzLmhpZ2hsaWdodC5nZXRGb2N1cygpLmNvbW1pdCgpLnN5bmNXaXRoKGQpO2Zvcihs''@;'; put 'put ''ZXQgaD0wO2g8dGhpcy5zZWxlY3RlZFJhbmdlLnNpemUoKTtoKz0xKXt0aGlzLmhpZ2hsaWdodC51c2VMYXllckxldmVsKGgpO2NvbnN0IGY9dGhpcy5oaWdobGlnaHQuY3JlYXRlQXJlYSgpLHY9dGhpcy5oaWdobGlnaHQuY3JlYXRlTGF5ZXJlZEFyZWEoKSxNPXRoaXMuaGlnaGxpZ2h0LmNy''@;'; put 'put ''ZWF0ZVJvd0hlYWRlcigpLEQ9dGhpcy5oaWdobGlnaHQuY3JlYXRlQ29sdW1uSGVhZGVyKCksWj10aGlzLmhpZ2hsaWdodC5jcmVhdGVBY3RpdmVSb3dIZWFkZXIoKSxyZT10aGlzLmhpZ2hsaWdodC5jcmVhdGVBY3RpdmVDb2x1bW5IZWFkZXIoKSxjZT10aGlzLmhpZ2hsaWdodC5jcmVhdGVB''@;'; put 'put ''Y3RpdmVDb3JuZXJIZWFkZXIoKSxiZT10aGlzLmhpZ2hsaWdodC5jcmVhdGVSb3dIaWdobGlnaHQoKSxFZT10aGlzLmhpZ2hsaWdodC5jcmVhdGVDb2x1bW5IaWdobGlnaHQoKTtmLmNvbW1pdCgpLHYuY29tbWl0KCksTS5jb21taXQoKSxELmNvbW1pdCgpLFouY29tbWl0KCkscmUuY29tbWl0''@;'; put 'put ''KCksY2UuY29tbWl0KCksYmUuY29tbWl0KCksRWUuY29tbWl0KCl9dGhpcy5oaWdobGlnaHQudXNlTGF5ZXJMZXZlbChhKX19VGwoaXBlLHkxKTtjb25zdCBxbnQ9aXBlLHtyZWdpc3RlcjpYbnQsZ2V0SXRlbTpKbnQsaGFzSXRlbTphcGUsZ2V0TmFtZXM6UW50fT1yMygiY2VsbFR5cGVzIik7''@;'; put 'put ''ZnVuY3Rpb24gTVgoYyl7aWYoIWFwZShjKSl0aHJvdyBFcnJvcihgWW91IGRlY2xhcmVkIGNlbGwgdHlwZSAiJHtjfSIgYXMgYSBzdHJpbmcgdGhhdCBpcyBub3QgbWFwcGVkIHRvIGEga25vd24gb2JqZWN0LlxuICAgICAgICAgICAgICAgICBDZWxsIHR5cGUgbXVzdCBiZSBhbiBvYmplY3Qg''@;'; put 'put ''b3IgYSBzdHJpbmcgbWFwcGVkIHRvIGFuIG9iamVjdCByZWdpc3RlcmVkIGJ5XG4gICAgICAgICAgICAgICAgICJIYW5kc29udGFibGUuY2VsbFR5cGVzLnJlZ2lzdGVyQ2VsbFR5cGUiIG1ldGhvZGApO3JldHVybiBKbnQoYyl9ZnVuY3Rpb24gRzIoYyxsKXsic3RyaW5nIiE9dHlwZW9mIGMm''@;'; put 'put ''JihjPShsPWMpLkNFTExfVFlQRSk7Y29uc3R7ZWRpdG9yOmEscmVuZGVyZXI6ZCx2YWxpZGF0b3I6aH09bDthJiZIZChjLGEpLGQmJkloKGMsZCksaCYmWTcoYyxoKSxYbnQoYyxsKX1mdW5jdGlvbiBEUChjLGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRz''@;'; put 'put ''WzJdP2FyZ3VtZW50c1syXTpjO2NvbnN0IGQ9InN0cmluZyI9PXR5cGVvZiBsLnR5cGU/TVgobC50eXBlKTpsLnR5cGU7aWYoYy5fYXV0b21hdGljYWxseUFzc2lnbmVkTWV0YVByb3BzJiZYbyhsLChmLHYpPT57Yy5fYXV0b21hdGljYWxseUFzc2lnbmVkTWV0YVByb3BzLmRlbGV0ZSh2KX0p''@;'; put 'put ''LCFxbyhkKSlyZXR1cm47YT09PWMmJiFjLl9hdXRvbWF0aWNhbGx5QXNzaWduZWRNZXRhUHJvcHMmJihjLl9hdXRvbWF0aWNhbGx5QXNzaWduZWRNZXRhUHJvcHM9bmV3IFNldCk7Y29uc3QgaD17fTtYbyhkLChmLHYpPT57dmFyIE07KGZ1bmN0aW9uIGVydChjLGwpe3ZhciBhO3JldHVybiJD''@;'; put 'put ''RUxMX1RZUEUiIT09YyYmKChudWxsPT09KGE9bC5fYXV0b21hdGljYWxseUFzc2lnbmVkTWV0YVByb3BzKXx8dm9pZCAwPT09YT92b2lkIDA6YS5oYXMoYykpfHwhVHUobCxjKSl9KSh2LGEpJiYoaFt2XT1mLG51bGw9PT0oTT1jLl9hdXRvbWF0aWNhbGx5QXNzaWduZWRNZXRhUHJvcHMpfHx2''@;'; put 'put ''b2lkIDA9PT1NfHxNLmFkZCh2KSl9KSxFdShjLGgpfWZ1bmN0aW9uIElQKGMpe3JldHVybiBOdW1iZXIuaXNJbnRlZ2VyKGMpJiZjPj0wfWZ1bmN0aW9uIFJQKGMsbCl7aWYoIWMoKSl0aHJvdyBuZXcgRXJyb3IoYEFzc2VydGlvbiBmYWlsZWQ6ICR7bH1gKX1mdW5jdGlvbiBMUChjKXtyZXR1''@;'; put 'put ''cm4gbnVsbD09Y31jb25zdCBvcGU9KCk9Pih7X2F1dG9tYXRpY2FsbHlBc3NpZ25lZE1ldGFQcm9wczp2b2lkIDAsYWN0aXZlSGVhZGVyQ2xhc3NOYW1lOiJodF9fYWN0aXZlX2hpZ2hsaWdodCIsYWxsb3dFbXB0eTohMCxhbGxvd0h0bWw6ITEsYWxsb3dJbnNlcnRDb2x1bW46ITAsYWxsb3dJ''@;'; put 'put ''bnNlcnRSb3c6ITAsYWxsb3dJbnZhbGlkOiEwLGFsbG93UmVtb3ZlQ29sdW1uOiEwLGFsbG93UmVtb3ZlUm93OiEwLGFyaWFUYWdzOiEwLGF1dG9Db2x1bW5TaXplOnZvaWQgMCxhdXRvUm93U2l6ZTp2b2lkIDAsYXV0b1dyYXBDb2w6ITEsYXV0b1dyYXBSb3c6ITEsYmluZFJvd3NXaXRoSGVh''@;'; put 'put ''ZGVyczp2b2lkIDAsY2VsbDpbXSxjZWxsczp2b2lkIDAsY2hlY2tlZFRlbXBsYXRlOnZvaWQgMCxjbGFzc05hbWU6dm9pZCAwLGNvbEhlYWRlcnM6bnVsbCxjb2xsYXBzaWJsZUNvbHVtbnM6dm9pZCAwLGNvbHVtbkhlYWRlckhlaWdodDp2b2lkIDAsY29sdW1uczp2b2lkIDAsY29sdW1uU29y''@;'; put 'put ''dGluZzp2b2lkIDAsY29sdW1uU3VtbWFyeTp2b2lkIDAsY29sV2lkdGhzOnZvaWQgMCxjb21tZW50ZWRDZWxsQ2xhc3NOYW1lOiJodENvbW1lbnRDZWxsIixjb21tZW50czohMSxjb250ZXh0TWVudTp2b2lkIDAsY29weWFibGU6ITAsY29weVBhc3RlOiEwLGNvcnJlY3RGb3JtYXQ6ITEsY3Vy''@;'; put 'put ''cmVudENvbENsYXNzTmFtZTp2b2lkIDAsY3VycmVudEhlYWRlckNsYXNzTmFtZToiaHRfX2hpZ2hsaWdodCIsY3VycmVudFJvd0NsYXNzTmFtZTp2b2lkIDAsY3VzdG9tQm9yZGVyczohMSxkYXRhOnZvaWQgMCxkYXRhRG90Tm90YXRpb246ITAsZGF0YVNjaGVtYTp2b2lkIDAsZGF0ZUZvcm1h''@;'; put 'put ''dDoiREQvTU0vWVlZWSIsdGltZUZvcm1hdDoiaDptbTpzcyBhIixkYXRlUGlja2VyQ29uZmlnOnZvaWQgMCxkZWZhdWx0RGF0ZTp2b2lkIDAsZGlzYWJsZVZpc3VhbFNlbGVjdGlvbjohMSxkcmFnVG9TY3JvbGw6ITAsZHJvcGRvd25NZW51OnZvaWQgMCxlZGl0b3I6dm9pZCAwLGVudGVyQmVn''@;'; put 'put ''aW5zRWRpdGluZzohMCxlbnRlck1vdmVzOntjb2w6MCxyb3c6MX0sZmlsbEhhbmRsZTp7YXV0b0luc2VydFJvdzohMX0sZmlsdGVyOiEwLGZpbHRlcmluZ0Nhc2VTZW5zaXRpdmU6ITEsZmlsdGVyczp2b2lkIDAsZml4ZWRDb2x1bW5zTGVmdDowLGZpeGVkQ29sdW1uc1N0YXJ0OjAsZml4ZWRS''@;'; put 'put ''b3dzQm90dG9tOjAsZml4ZWRSb3dzVG9wOjAsZm9ybXVsYXM6dm9pZCAwLGZyYWdtZW50U2VsZWN0aW9uOiExLGhlYWRlckNsYXNzTmFtZTp2b2lkIDAsaGVpZ2h0OnZvaWQgMCxoaWRkZW5Db2x1bW5zOnZvaWQgMCxoaWRkZW5Sb3dzOnZvaWQgMCxpbnZhbGlkQ2VsbENsYXNzTmFtZToiaHRJ''@;'; put 'put ''bnZhbGlkIixpbWVGYXN0RWRpdDohMSxpc0VtcHR5Q29sKGMpe2xldCBsLGEsZDtmb3IobD0wLGE9dGhpcy5jb3VudFJvd3MoKTtsPGE7bCsrKWlmKGQ9dGhpcy5nZXREYXRhQXRDZWxsKGwsYyksITE9PT1VYyhkKSlyZXR1cm4hMTtyZXR1cm4hMH0saXNFbXB0eVJvdyhjKXtsZXQgbCxhLGQs''@;'; put 'put ''aDtmb3IobD0wLGE9dGhpcy5jb3VudENvbHMoKTtsPGE7bCsrKWlmKGQ9dGhpcy5nZXREYXRhQXRDZWxsKGMsbCksITE9PT1VYyhkKSlyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGQmJihoPXRoaXMuZ2V0Q2VsbE1ldGEoYyxsKSxOTyh0aGlzLmdldFNjaGVtYSgpW2gucHJvcF0sZCkpO3JldHVy''@;'; put 'put ''biEwfSxsYWJlbDp2b2lkIDAsbGFuZ3VhZ2U6ImVuLVVTIixsYXlvdXREaXJlY3Rpb246ImluaGVyaXQiLGxpY2Vuc2VLZXk6dm9pZCAwLGxvY2FsZToiZW4tVVMiLG1hbnVhbENvbHVtbkZyZWV6ZTp2b2lkIDAsbWFudWFsQ29sdW1uTW92ZTp2b2lkIDAsbWFudWFsQ29sdW1uUmVzaXplOnZv''@;'; put 'put ''aWQgMCxtYW51YWxSb3dNb3ZlOnZvaWQgMCxtYW51YWxSb3dSZXNpemU6dm9pZCAwLG1heENvbHM6MS8wLG1heFJvd3M6MS8wLG1lcmdlQ2VsbHM6ITEsbWluQ29sczowLG1pblJvd3M6MCxtaW5TcGFyZUNvbHM6MCxtaW5TcGFyZVJvd3M6MCxtdWx0aUNvbHVtblNvcnRpbmc6dm9pZCAwLG5h''@;'; put 'put ''dmlnYWJsZUhlYWRlcnM6ITEsdGFiTmF2aWdhdGlvbjohMCxuZXN0ZWRIZWFkZXJzOnZvaWQgMCxuZXN0ZWRSb3dzOnZvaWQgMCxub1dvcmRXcmFwQ2xhc3NOYW1lOiJodE5vV3JhcCIsbnVtZXJpY0Zvcm1hdDp2b2lkIDAsb2JzZXJ2ZURPTVZpc2liaWxpdHk6ITAsb3V0c2lkZUNsaWNrRGVz''@;'; put 'put ''ZWxlY3RzOiEwLHBlcnNpc3RlbnRTdGF0ZTp2b2lkIDAscGxhY2Vob2xkZXI6dm9pZCAwLHBsYWNlaG9sZGVyQ2VsbENsYXNzTmFtZToiaHRQbGFjZWhvbGRlciIscHJldmVudE92ZXJmbG93OiExLHByZXZlbnRXaGVlbDohMSxyZWFkT25seTohMSxyZWFkT25seUNlbGxDbGFzc05hbWU6Imh0''@;'; put 'put ''RGltbWVkIixyZW5kZXJBbGxSb3dzOiExLHJlbmRlckFsbENvbHVtbnM6ITEscmVuZGVyZXI6dm9pZCAwLHJvd0hlYWRlcnM6dm9pZCAwLHJvd0hlYWRlcldpZHRoOnZvaWQgMCxyb3dIZWlnaHRzOnZvaWQgMCxzZWFyY2g6ITEsc2VsZWN0aW9uTW9kZToibXVsdGlwbGUiLHNlbGVjdE9wdGlv''@;'; put 'put ''bnM6dm9pZCAwLHNraXBDb2x1bW5PblBhc3RlOiExLHNraXBSb3dPblBhc3RlOiExLHNvcnRCeVJlbGV2YW5jZTohMCxzb3VyY2U6dm9pZCAwLHN0YXJ0Q29sczo1LHN0YXJ0Um93czo1LHN0cmV0Y2hIOiJub25lIixzdHJpY3Q6dm9pZCAwLHRhYmxlQ2xhc3NOYW1lOnZvaWQgMCx0aGVtZU5h''@;'; put 'put ''bWU6dm9pZCAwLHRhYk1vdmVzOntyb3c6MCxjb2w6MX0sdGl0bGU6dm9pZCAwLHRyaW1Ecm9wZG93bjohMCx0cmltUm93czp2b2lkIDAsdHJpbVdoaXRlc3BhY2U6ITAsdHlwZToidGV4dCIsdW5jaGVja2VkVGVtcGxhdGU6dm9pZCAwLHVuZG86ITAsdmFsaWRhdG9yOnZvaWQgMCx2aWV3cG9y''@;'; put 'put ''dENvbHVtblJlbmRlcmluZ09mZnNldDoiYXV0byIsdmlld3BvcnRSb3dSZW5kZXJpbmdPZmZzZXQ6ImF1dG8iLHZpZXdwb3J0Q29sdW1uUmVuZGVyaW5nVGhyZXNob2xkOjAsdmlld3BvcnRSb3dSZW5kZXJpbmdUaHJlc2hvbGQ6MCx2aXNpYmxlUm93czoxMCx3aWR0aDp2b2lkIDAsd29yZFdy''@;'; put 'put ''YXA6ITB9KTtmdW5jdGlvbiBzcGUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIG5ydChjKXt2YXIgbD1mdW5jdGlvbiBycnQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNh''@;'; put 'put ''bGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmlu''@;'; put 'put ''ZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIGFydHtjb25zdHJ1Y3RvcihsKXtzcGUodGhp''@;'; put 'put ''cywibWV0YUN0b3IiLGNsYXNze30pLHNwZSh0aGlzLCJtZXRhIix2b2lkIDApLHRoaXMubWV0YT10aGlzLm1ldGFDdG9yLnByb3RvdHlwZSxFdSh0aGlzLm1ldGEsb3BlKCkpLHRoaXMubWV0YS5pbnN0YW5jZT1sfWdldE1ldGFDb25zdHJ1Y3Rvcigpe3JldHVybiB0aGlzLm1ldGFDdG9yfWdl''@;'; put 'put ''dE1ldGEoKXtyZXR1cm4gdGhpcy5tZXRhfXVwZGF0ZU1ldGEobCl7dmFyIGE7RXUodGhpcy5tZXRhLGwpLERQKHRoaXMubWV0YSx7Li4ubCx0eXBlOm51bGwhPT0oYT1sLnR5cGUpJiZ2b2lkIDAhPT1hP2E6dGhpcy5tZXRhLnR5cGV9LGwpfX1jbGFzcyBjcnR7Y29uc3RydWN0b3IobCl7IWZ1''@;'; put 'put ''bmN0aW9uIG9ydChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gc3J0KGMpe3ZhciBsPWZ1bmN0aW9uIGxydChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJk''@;'; put 'put ''ZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJu''@;'; put 'put ''InN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9KHRoaXMsIm1ldGEiLHZvaWQgMCk7Y29uc3QgYT1sLmdldE1ldGFDb25z''@;'; put 'put ''dHJ1Y3RvcigpO3RoaXMubWV0YT1uZXcgYX1nZXRNZXRhKCl7cmV0dXJuIHRoaXMubWV0YX11cGRhdGVNZXRhKGwpe0V1KHRoaXMubWV0YSxsKSxEUCh0aGlzLm1ldGEsbCxsKX19ZnVuY3Rpb24gT1AoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIHVydChjKXt2YXIgbD1mdW5jdGlvbiBkcnQo''@;'; put 'put ''YyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJA''@;'; put 'put ''QHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7''@;'; put 'put ''dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIFBQe2NvbnN0cnVjdG9yKGwpe09QKHRoaXMsInZhbHVlRmFjdG9yeSIsdm9pZCAwKSxPUCh0aGlzLCJkYXRhIixbXSksT1AodGhpcywiaW5kZXgiLFtdKSxPUCh0aGlzLCJo''@;'; put 'put ''b2xlcyIsbmV3IFNldCksdGhpcy52YWx1ZUZhY3Rvcnk9bH1vYnRhaW4obCl7UlAoKCk9PklQKGwpLCJFeHBlY3RpbmcgYW4gdW5zaWduZWQgbnVtYmVyLiIpO2NvbnN0IGE9dGhpcy5fZ2V0U3RvcmFnZUluZGV4QnlLZXkobCk7bGV0IGQ7aWYoYT49MClkPXRoaXMuZGF0YVthXSx2b2lkIDA9''@;'; put 'put ''PT1kJiYoZD10aGlzLnZhbHVlRmFjdG9yeShsKSx0aGlzLmRhdGFbYV09ZCk7ZWxzZSBpZihkPXRoaXMudmFsdWVGYWN0b3J5KGwpLHRoaXMuaG9sZXMuc2l6ZT4wKXtjb25zdCBoPXRoaXMuaG9sZXMudmFsdWVzKCkubmV4dCgpLnZhbHVlO3RoaXMuaG9sZXMuZGVsZXRlKGgpLHRoaXMuZGF0''@;'; put 'put ''YVtoXT1kLHRoaXMuaW5kZXhbbF09aH1lbHNlIHRoaXMuZGF0YS5wdXNoKGQpLHRoaXMuaW5kZXhbbF09dGhpcy5kYXRhLmxlbmd0aC0xO3JldHVybiBkfWluc2VydChsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MTtSUCgo''@;'; put 'put ''KT0+SVAobCl8fExQKGwpLCJFeHBlY3RpbmcgYW4gdW5zaWduZWQgbnVtYmVyIG9yIG51bGwvdW5kZWZpbmVkIGFyZ3VtZW50LiIpO2NvbnN0IGQ9W10saD10aGlzLmRhdGEubGVuZ3RoO2ZvcihsZXQgdj0wO3Y8YTt2KyspZC5wdXNoKGgrdiksdGhpcy5kYXRhLnB1c2godm9pZCAwKTtjb25z''@;'; put 'put ''dCBmPUxQKGwpP3RoaXMuaW5kZXgubGVuZ3RoOmw7dGhpcy5pbmRleD1bLi4udGhpcy5pbmRleC5zbGljZSgwLGYpLC4uLmQsLi4udGhpcy5pbmRleC5zbGljZShmKV19cmVtb3ZlKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sx''@;'; put 'put ''XToxO1JQKCgpPT5JUChsKXx8TFAobCksIkV4cGVjdGluZyBhbiB1bnNpZ25lZCBudW1iZXIgb3IgbnVsbC91bmRlZmluZWQgYXJndW1lbnQuIik7Y29uc3QgZD10aGlzLmluZGV4LnNwbGljZShMUChsKT90aGlzLmluZGV4Lmxlbmd0aC1hOmwsYSk7Zm9yKGxldCBoPTA7aDxkLmxlbmd0aDto''@;'; put 'put ''Kyspe2NvbnN0IGY9ZFtoXTsibnVtYmVyIj09dHlwZW9mIGYmJnRoaXMuaG9sZXMuYWRkKGYpfX1zaXplKCl7cmV0dXJuIHRoaXMuZGF0YS5sZW5ndGgtdGhpcy5ob2xlcy5zaXplfXZhbHVlcygpe3JldHVybiB0aGlzLmRhdGEuZmlsdGVyKChsLGEpPT52b2lkIDAhPT1sJiYhdGhpcy5ob2xl''@;'; put 'put ''cy5oYXMoYSkpW1N5bWJvbC5pdGVyYXRvcl0oKX1lbnRyaWVzKCl7Y29uc3QgbD1bXTtmb3IobGV0IGQ9MDtkPHRoaXMuZGF0YS5sZW5ndGg7ZCsrKXtjb25zdCBoPXRoaXMuX2dldEtleUJ5U3RvcmFnZUluZGV4KGQpOy0xIT09aCYmdm9pZCAwIT09dGhpcy5kYXRhW2RdJiZsLnB1c2goW2gs''@;'; put 'put ''dGhpcy5kYXRhW2RdXSl9bGV0IGE9MDtyZXR1cm57bmV4dDooKT0+e2lmKGE8bC5sZW5ndGgpe2NvbnN0IGQ9bFthXTtyZXR1cm4gYSs9MSx7dmFsdWU6ZCxkb25lOiExfX1yZXR1cm57ZG9uZTohMH19fX1jbGVhcigpe3RoaXMuZGF0YT1bXSx0aGlzLmluZGV4PVtdLHRoaXMuaG9sZXMuY2xl''@;'; put 'put ''YXIoKX1fZ2V0U3RvcmFnZUluZGV4QnlLZXkobCl7cmV0dXJuIHRoaXMuaW5kZXgubGVuZ3RoPmw/dGhpcy5pbmRleFtsXTotMX1fZ2V0S2V5QnlTdG9yYWdlSW5kZXgobCl7cmV0dXJuIHRoaXMuaW5kZXguaW5kZXhPZihsKX1bU3ltYm9sLml0ZXJhdG9yXSgpe3JldHVybiB0aGlzLmVudHJp''@;'; put 'put ''ZXMoKX19ZnVuY3Rpb24gbHBlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBocnQoYyl7dmFyIGw9ZnVuY3Rpb24gZnJ0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxs''@;'; put 'put ''KGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmci''@;'; put 'put ''KTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jb25zdCBwcnQ9WyJkYXRhIiwid2lkdGgiXTtjbGFzcyBn''@;'; put 'put ''cnR7Y29uc3RydWN0b3IobCl7bHBlKHRoaXMsImdsb2JhbE1ldGEiLHZvaWQgMCksbHBlKHRoaXMsIm1ldGFzIixuZXcgUFAoKCk9PnRoaXMuX2NyZWF0ZU1ldGEoKSkpLHRoaXMuZ2xvYmFsTWV0YT1sLHRoaXMubWV0YXM9bmV3IFBQKCgpPT50aGlzLl9jcmVhdGVNZXRhKCkpfXVwZGF0ZU1l''@;'; put 'put ''dGEobCxhKXtjb25zdCBkPXRoaXMuZ2V0TWV0YShsKTtFdShkLGEpLERQKGQsYSl9Y3JlYXRlQ29sdW1uKGwsYSl7dGhpcy5tZXRhcy5pbnNlcnQobCxhKX1yZW1vdmVDb2x1bW4obCxhKXt0aGlzLm1ldGFzLnJlbW92ZShsLGEpfWdldE1ldGEobCl7cmV0dXJuIHRoaXMubWV0YXMub2J0YWlu''@;'; put 'put ''KGwpfWdldE1ldGFDb25zdHJ1Y3RvcihsKXtyZXR1cm4gdGhpcy5tZXRhcy5vYnRhaW4obCkuY29uc3RydWN0b3J9Y2xlYXJDYWNoZSgpe3RoaXMubWV0YXMuY2xlYXIoKX1fY3JlYXRlTWV0YSgpe3JldHVybiBmdW5jdGlvbiB0cnQoYyl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lk''@;'; put 'put ''IDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOltdO2Z1bmN0aW9uIGEoKXt9RzJlKGEsYyk7Zm9yKGxldCBkPTA7ZDxsLmxlbmd0aDtkKyspYS5wcm90b3R5cGVbbFtkXV09dm9pZCAwO3JldHVybiBhfSh0aGlzLmdsb2JhbE1ldGEuZ2V0TWV0YUNvbnN0cnVjdG9yKCkscHJ0KS5wcm90''@;'; put 'put ''b3R5cGV9fWZ1bmN0aW9uIGNwZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gbXJ0KGMpe3ZhciBsPWZ1bmN0aW9uIHZydChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2Fs''@;'; put 'put ''bChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5n''@;'; put 'put ''Iik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgYnJ0e2NvbnN0cnVjdG9yKGwpe2NwZSh0aGlz''@;'; put 'put ''LCJjb2x1bW5NZXRhIix2b2lkIDApLGNwZSh0aGlzLCJtZXRhcyIsbmV3IFBQKCgpPT50aGlzLl9jcmVhdGVSb3coKSkpLHRoaXMuY29sdW1uTWV0YT1sfXVwZGF0ZU1ldGEobCxhLGQpe2NvbnN0IGg9dGhpcy5nZXRNZXRhKGwsYSk7RXUoaCxkKSxEUChoLGQpfWNyZWF0ZVJvdyhsLGEpe3Ro''@;'; put 'put ''aXMubWV0YXMuaW5zZXJ0KGwsYSl9Y3JlYXRlQ29sdW1uKGwsYSl7Zm9yKGxldCBkPTA7ZDx0aGlzLm1ldGFzLnNpemUoKTtkKyspdGhpcy5tZXRhcy5vYnRhaW4oZCkuaW5zZXJ0KGwsYSl9cmVtb3ZlUm93KGwsYSl7dGhpcy5tZXRhcy5yZW1vdmUobCxhKX1yZW1vdmVDb2x1bW4obCxhKXtm''@;'; put 'put ''b3IobGV0IGQ9MDtkPHRoaXMubWV0YXMuc2l6ZSgpO2QrKyl0aGlzLm1ldGFzLm9idGFpbihkKS5yZW1vdmUobCxhKX1nZXRNZXRhKGwsYSxkKXtjb25zdCBoPXRoaXMubWV0YXMub2J0YWluKGwpLm9idGFpbihhKTtyZXR1cm4gdm9pZCAwPT09ZD9oOmhbZF19c2V0TWV0YShsLGEsZCxoKXt2''@;'; put 'put ''YXIgZjtjb25zdCB2PXRoaXMubWV0YXMub2J0YWluKGwpLm9idGFpbihhKTtudWxsPT09KGY9di5fYXV0b21hdGljYWxseUFzc2lnbmVkTWV0YVByb3BzKXx8dm9pZCAwPT09Znx8Zi5kZWxldGUoZCksdltkXT1ofXJlbW92ZU1ldGEobCxhLGQpe2RlbGV0ZSB0aGlzLm1ldGFzLm9idGFpbihs''@;'; put 'put ''KS5vYnRhaW4oYSlbZF19Z2V0TWV0YXMoKXtjb25zdCBsPVtdLGE9QXJyYXkuZnJvbSh0aGlzLm1ldGFzLnZhbHVlcygpKTtmb3IobGV0IGQ9MDtkPGEubGVuZ3RoO2QrKylQYShhW2RdKSYmbC5wdXNoKC4uLmFbZF0udmFsdWVzKCkpO3JldHVybiBsfWdldE1ldGFzQXRSb3cobCl7UlAoKCk9''@;'; put 'put ''PklQKGwpLCJFeHBlY3RpbmcgYW4gdW5zaWduZWQgbnVtYmVyLiIpO2NvbnN0IGE9bmV3IE1hcCh0aGlzLm1ldGFzKTtyZXR1cm4gYS5oYXMobCk/QXJyYXkuZnJvbShhLmdldChsKS52YWx1ZXMoKSk6W119Y2xlYXJDYWNoZSgpe3RoaXMubWV0YXMuY2xlYXIoKX1fY3JlYXRlUm93KCl7cmV0''@;'; put 'put ''dXJuIG5ldyBQUChsPT50aGlzLl9jcmVhdGVNZXRhKGwpKX1fY3JlYXRlTWV0YShsKXtyZXR1cm4gbmV3KHRoaXMuY29sdW1uTWV0YS5nZXRNZXRhQ29uc3RydWN0b3IobCkpfX1jbGFzcyB1cGV7Y29uc3RydWN0b3IobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1''@;'; put 'put ''bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9LGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOltdO3RoaXMuaG90PWwsdGhpcy5nbG9iYWxNZXRhPW5ldyBhcnQobCksdGhpcy50YWJsZU1ldGE9bmV3IGNydCh0aGlzLmdsb2JhbE1ldGEpLHRo''@;'; put 'put ''aXMuY29sdW1uTWV0YT1uZXcgZ3J0KHRoaXMuZ2xvYmFsTWV0YSksdGhpcy5jZWxsTWV0YT1uZXcgYnJ0KHRoaXMuY29sdW1uTWV0YSksZC5mb3JFYWNoKGg9Pm5ldyBoKHRoaXMpKSx0aGlzLmdsb2JhbE1ldGEudXBkYXRlTWV0YShhKX1nZXRHbG9iYWxNZXRhKCl7cmV0dXJuIHRoaXMuZ2xv''@;'; put 'put ''YmFsTWV0YS5nZXRNZXRhKCl9dXBkYXRlR2xvYmFsTWV0YShsKXt0aGlzLmdsb2JhbE1ldGEudXBkYXRlTWV0YShsKX1nZXRUYWJsZU1ldGEoKXtyZXR1cm4gdGhpcy50YWJsZU1ldGEuZ2V0TWV0YSgpfXVwZGF0ZVRhYmxlTWV0YShsKXt0aGlzLnRhYmxlTWV0YS51cGRhdGVNZXRhKGwpfWdl''@;'; put 'put ''dENvbHVtbk1ldGEobCl7cmV0dXJuIHRoaXMuY29sdW1uTWV0YS5nZXRNZXRhKGwpfXVwZGF0ZUNvbHVtbk1ldGEobCxhKXt0aGlzLmNvbHVtbk1ldGEudXBkYXRlTWV0YShsLGEpfWdldENlbGxNZXRhKGwsYSxkKXtjb25zdCBoPXRoaXMuY2VsbE1ldGEuZ2V0TWV0YShsLGEpO3JldHVybiBo''@;'; put 'put ''LnZpc3VhbFJvdz1kLnZpc3VhbFJvdyxoLnZpc3VhbENvbD1kLnZpc3VhbENvbHVtbixoLnJvdz1sLGguY29sPWEsZC5za2lwTWV0YUV4dGVuc2lvbnx8dGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlckdldENlbGxNZXRhIixoKSxofWdldENlbGxNZXRhS2V5VmFsdWUobCxhLGQpe2lmKCJzdHJp''@;'; put 'put ''bmciIT10eXBlb2YgZCl0aHJvdyBuZXcgRXJyb3IoIlRoZSBwYXNzZWQgY2VsbCBtZXRhIG9iamVjdCBrZXkgaXMgbm90IGEgc3RyaW5nIik7cmV0dXJuIHRoaXMuY2VsbE1ldGEuZ2V0TWV0YShsLGEsZCl9c2V0Q2VsbE1ldGEobCxhLGQsaCl7dGhpcy5jZWxsTWV0YS5zZXRNZXRhKGwsYSxk''@;'; put 'put ''LGgpfXVwZGF0ZUNlbGxNZXRhKGwsYSxkKXt0aGlzLmNlbGxNZXRhLnVwZGF0ZU1ldGEobCxhLGQpfXJlbW92ZUNlbGxNZXRhKGwsYSxkKXt0aGlzLmNlbGxNZXRhLnJlbW92ZU1ldGEobCxhLGQpfWdldENlbGxzTWV0YSgpe3JldHVybiB0aGlzLmNlbGxNZXRhLmdldE1ldGFzKCl9Z2V0Q2Vs''@;'; put 'put ''bHNNZXRhQXRSb3cobCl7cmV0dXJuIHRoaXMuY2VsbE1ldGEuZ2V0TWV0YXNBdFJvdyhsKX1jcmVhdGVSb3cobCl7dGhpcy5jZWxsTWV0YS5jcmVhdGVSb3cobCxhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MSl9cmVtb3ZlUm93KGwpe3Ro''@;'; put 'put ''aXMuY2VsbE1ldGEucmVtb3ZlUm93KGwsYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjEpfWNyZWF0ZUNvbHVtbihsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MTt0aGlz''@;'; put 'put ''LmNlbGxNZXRhLmNyZWF0ZUNvbHVtbihsLGEpLHRoaXMuY29sdW1uTWV0YS5jcmVhdGVDb2x1bW4obCxhKX1yZW1vdmVDb2x1bW4obCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjE7dGhpcy5jZWxsTWV0YS5yZW1vdmVDb2x1''@;'; put 'put ''bW4obCxhKSx0aGlzLmNvbHVtbk1ldGEucmVtb3ZlQ29sdW1uKGwsYSl9Y2xlYXJDZWxsc0NhY2hlKCl7dGhpcy5jZWxsTWV0YS5jbGVhckNhY2hlKCl9Y2xlYXJDYWNoZSgpe3RoaXMuY2VsbE1ldGEuY2xlYXJDYWNoZSgpLHRoaXMuY29sdW1uTWV0YS5jbGVhckNhY2hlKCl9fWZ1bmN0aW9u''@;'; put 'put ''IGRwZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24geXJ0KGMpe3ZhciBsPWZ1bmN0aW9uIF9ydChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0''@;'; put 'put ''Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJv''@;'; put 'put ''bCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9VGwodXBlLHkxKTtjbGFzcyB3cnR7Y29uc3RydWN0b3IobCl7dmFyIGE9dGhpcztk''@;'; put 'put ''cGUodGhpcywibWV0YU1hbmFnZXIiLHZvaWQgMCksZHBlKHRoaXMsIm1ldGFTeW5jTWVtbyIsbmV3IE1hcCksdGhpcy5tZXRhTWFuYWdlcj1sLGwuYWRkTG9jYWxIb29rKCJhZnRlckdldENlbGxNZXRhIixmdW5jdGlvbigpe3JldHVybiBhLmV4dGVuZENlbGxNZXRhKC4uLmFyZ3VtZW50cyl9''@;'; put 'put ''KSxTYS5nZXRTaW5nbGV0b24oKS5hZGQoImJlZm9yZVJlbmRlciIsZD0+e2QmJnRoaXMubWV0YVN5bmNNZW1vLmNsZWFyKCl9LHRoaXMubWV0YU1hbmFnZXIuaG90KX1leHRlbmRDZWxsTWV0YShsKXt2YXIgYTtjb25zdHtyb3c6ZCxjb2w6aH09bDtpZihudWxsIT09KGE9dGhpcy5tZXRhU3lu''@;'; put 'put ''Y01lbW8uZ2V0KGQpKSYmdm9pZCAwIT09YSYmYS5oYXMoaCkpcmV0dXJuO2NvbnN0e3Zpc3VhbFJvdzpmLHZpc3VhbENvbDp2fT1sLE09dGhpcy5tZXRhTWFuYWdlci5ob3QsRD1NLmNvbFRvUHJvcCh2KTtsLnByb3A9RCxNLnJ1bkhvb2tzKCJiZWZvcmVHZXRDZWxsTWV0YSIsZix2LGwpO2Nv''@;'; put 'put ''bnN0IFo9VHUobCwidHlwZSIpP2wudHlwZTpudWxsO2xldCByZT1tbChsLmNlbGxzKT9sLmNlbGxzKGQsaCxEKTpudWxsO2lmKFopaWYocmUpe3ZhciBjZTtyZS50eXBlPW51bGwhPT0oY2U9cmUudHlwZSkmJnZvaWQgMCE9PWNlP2NlOlp9ZWxzZSByZT17dHlwZTpafTtyZSYmdGhpcy5tZXRh''@;'; put 'put ''TWFuYWdlci51cGRhdGVDZWxsTWV0YShkLGgscmUpLE0ucnVuSG9va3MoImFmdGVyR2V0Q2VsbE1ldGEiLGYsdixsKSx0aGlzLm1ldGFTeW5jTWVtby5oYXMoZCl8fHRoaXMubWV0YVN5bmNNZW1vLnNldChkLG5ldyBTZXQpLHRoaXMubWV0YVN5bmNNZW1vLmdldChkKS5hZGQoaCl9fWZ1bmN0''@;'; put 'put ''aW9uIHhYKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBNcnQoYyl7dmFyIGw9ZnVuY3Rpb24geHJ0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1''@;'; put 'put ''bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3lt''@;'; put 'put ''Ym9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY312YXIgaHBlPW5ldyBXZWFrTWFwO2NsYXNzIEFydHtjb25zdHJ1Y3RvcihsKXt4''@;'; put 'put ''WCh0aGlzLCJtZXRhTWFuYWdlciIsdm9pZCAwKSx4WCh0aGlzLCJ1c2FnZVRyYWNrZXIiLG5ldyBTZXQpLHhYKHRoaXMsInByb3BEZXNjcmlwdG9ycyIsbmV3IE1hcChbWyJhcmlhVGFncyIse2luaXRPbmx5OiEwfV0sWyJmaXhlZENvbHVtbnNMZWZ0Iix7dGFyZ2V0OiJmaXhlZENvbHVtbnNT''@;'; put 'put ''dGFydCIsb25DaGFuZ2UoYSl7aWYodGhpcy5tZXRhTWFuYWdlci5ob3QuaXNSdGwoKSYmImZpeGVkQ29sdW1uc0xlZnQiPT09YSl0aHJvdyBuZXcgRXJyb3IoIlRoZSBgZml4ZWRDb2x1bW5zTGVmdGAgaXMgbm90IHN1cHBvcnRlZCBmb3IgUlRMLiBQbGVhc2UgdXNlIG9wdGlvbiBgZml4ZWRD''@;'; put 'put ''b2x1bW5zU3RhcnRgLiIpO2lmKHRoaXMudXNhZ2VUcmFja2VyLmhhcygiZml4ZWRDb2x1bW5zTGVmdCIpJiZ0aGlzLnVzYWdlVHJhY2tlci5oYXMoImZpeGVkQ29sdW1uc1N0YXJ0IikpdGhyb3cgbmV3IEVycm9yKCJUaGUgYGZpeGVkQ29sdW1uc0xlZnRgIGFuZCBgZml4ZWRDb2x1bW5zU3Rh''@;'; put 'put ''cnRgIHNob3VsZCBub3QgYmUgdXNlZCB0b2dldGhlci4gUGxlYXNlIHVzZSBvbmx5IHRoZSBvcHRpb24gYGZpeGVkQ29sdW1uc1N0YXJ0YC4iKX19XSxbImxheW91dERpcmVjdGlvbiIse2luaXRPbmx5OiEwfV0sWyJyZW5kZXJBbGxDb2x1bW5zIix7aW5pdE9ubHk6ITB9XSxbInJlbmRlckFs''@;'; put 'put ''bFJvd3MiLHtpbml0T25seTohMH1dXSkpLGZ1bmN0aW9uIENydChjLGwsYSl7KGZ1bmN0aW9uIFNydChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShj''@;'; put 'put ''LGwpLGwuc2V0KGMsYSl9KHRoaXMsaHBlLChhLGQsaCk9PntpZighaCl0aHJvdyBuZXcgRXJyb3IoYFRoZSBcYCR7YX1cYCBvcHRpb24gY2FuIG5vdCBiZSB1cGRhdGVkIGFmdGVyIHRoZSBIYW5kc29udGFibGUgaXMgaW5pdGlhbGl6ZWQuYCl9KSx0aGlzLm1ldGFNYW5hZ2VyPWwsdGhpcy5l''@;'; put 'put ''eHRlbmRNZXRhUHJvcHMoKX1leHRlbmRNZXRhUHJvcHMoKXt0aGlzLnByb3BEZXNjcmlwdG9ycy5mb3JFYWNoKChsLGEpPT57Y29uc3R7aW5pdE9ubHk6ZCx0YXJnZXQ6aCxvbkNoYW5nZTpmfT1sLHY9InN0cmluZyI9PXR5cGVvZiBoLE09dj9oOmEsRD1gXyR7TX1gO3RoaXMubWV0YU1hbmFn''@;'; put 'put ''ZXIuZ2xvYmFsTWV0YS5tZXRhW0RdPXRoaXMubWV0YU1hbmFnZXIuZ2xvYmFsTWV0YS5tZXRhW01dLGY/KHRoaXMuaW5zdGFsbFByb3BXYXRjaGVyKGEsRCxmKSx2JiZ0aGlzLmluc3RhbGxQcm9wV2F0Y2hlcihoLEQsZikpOmQmJih0aGlzLmluc3RhbGxQcm9wV2F0Y2hlcihhLEQsZnVuY3Rp''@;'; put 'put ''b24gRXJ0KGMsbCl7cmV0dXJuIGMuZ2V0KGZ1bmN0aW9uIFRydChjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50''@;'; put 'put ''IG9uIHRoaXMgb2JqZWN0Iil9KGMsbCkpfShocGUsdGhpcykpLHRoaXMubWV0YU1hbmFnZXIuZ2xvYmFsTWV0YS5tZXRhLl9pbml0T25seVNldHRpbmdzfHwodGhpcy5tZXRhTWFuYWdlci5nbG9iYWxNZXRhLm1ldGEuX2luaXRPbmx5U2V0dGluZ3M9W10pLHRoaXMubWV0YU1hbmFnZXIuZ2xv''@;'; put 'put ''YmFsTWV0YS5tZXRhLl9pbml0T25seVNldHRpbmdzLnB1c2goYSkpfSl9aW5zdGFsbFByb3BXYXRjaGVyKGwsYSxkKXtjb25zdCBoPXRoaXM7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMubWV0YU1hbmFnZXIuZ2xvYmFsTWV0YS5tZXRhLGwse2dldCgpe3JldHVybiB0aGlzW2FdfSxzZXQo''@;'; put 'put ''Zil7Y29uc3Qgdj0haC51c2FnZVRyYWNrZXIuaGFzKGwpO2gudXNhZ2VUcmFja2VyLmFkZChsKSxkLmNhbGwoaCxsLGYsdiksdGhpc1thXT1mfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pfX1jb25zdCBmcGU9L14oXHJcbnxcblxyfFxyfFxuKS8sa3J0PS9eW15cdFxyXG5dKy8s''@;'; put 'put ''cHBlPS9eXHQvO2Z1bmN0aW9uIHJUKGMpe2xldCBsLGEsZCxoLHYsZj0iIjtmb3IobD0wLGE9Yy5sZW5ndGg7bDxhO2wrPTEpe2ZvcihoPWNbbF0ubGVuZ3RoLGQ9MDtkPGg7ZCs9MSlkPjAmJihmKz0iXHQiKSx2PWNbbF1bZF0sInN0cmluZyI9PXR5cGVvZiB2P3YuaW5kZXhPZigiXG4iKT4t''@;'; put 'put ''MT9mKz1gIiR7di5yZXBsYWNlKC8iL2csJyIiJyl9ImA6Zis9djpmKz1udWxsPT12PyIiOnY7bCE9PWEtMSYmKGYrPSJcbiIpfXJldHVybiBmfWZ1bmN0aW9uIHI5KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBJcnQoYyl7dmFyIGw9ZnVuY3Rpb24gUnJ0KGMsbCl7aWYoIm9iamVjdCIhPXR5''@;'; put 'put ''cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJl''@;'; put 'put ''dHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZToh''@;'; put 'put ''MCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBUX3tzdGF0aWMgZ2V0IERFU1RJTkFUSU9OX1JFTkRFUkVSKCl7cmV0dXJuIDF9c3RhdGljIGdldCBERVNUSU5BVElPTl9DTElQQk9BUkRfR0VORVJBVE9SKCl7cmV0dXJuIDJ9Y29uc3RydWN0b3IobCxhLGQp''@;'; put 'put ''e3I5KHRoaXMsImhvdCIsdm9pZCAwKSxyOSh0aGlzLCJtZXRhTWFuYWdlciIsdm9pZCAwKSxyOSh0aGlzLCJ0YWJsZU1ldGEiLHZvaWQgMCkscjkodGhpcywiZGF0YVNvdXJjZSIsdm9pZCAwKSxyOSh0aGlzLCJkdWNrU2NoZW1hIix2b2lkIDApLHI5KHRoaXMsImNvbFRvUHJvcENhY2hlIix2''@;'; put 'put ''b2lkIDApLHI5KHRoaXMsInByb3BUb0NvbENhY2hlIix2b2lkIDApLHRoaXMuaG90PWwsdGhpcy5tZXRhTWFuYWdlcj1kLHRoaXMudGFibGVNZXRhPWQuZ2V0VGFibGVNZXRhKCksdGhpcy5kYXRhU291cmNlPWEsdGhpcy5yZWZyZXNoRHVja1NjaGVtYSgpLHRoaXMuY3JlYXRlTWFwKCl9Y3Jl''@;'; put 'put ''YXRlTWFwKCl7Y29uc3QgbD10aGlzLmdldFNjaGVtYSgpO2lmKHR5cGVvZiBsPiJ1Iil0aHJvdyBuZXcgRXJyb3IoInRyeWluZyB0byBjcmVhdGUgYGNvbHVtbnNgIGRlZmluaXRpb24gYnV0IHlvdSBkaWRuJ3QgcHJvdmlkZSBgc2NoZW1hYCBub3IgYGRhdGFgIik7Y29uc3QgYT10aGlzLnRh''@;'; put 'put ''YmxlTWV0YS5jb2x1bW5zO2xldCBkO2lmKHRoaXMuY29sVG9Qcm9wQ2FjaGU9W10sdGhpcy5wcm9wVG9Db2xDYWNoZT1uZXcgTWFwLGEpe2xldCBoPTAsZj0wLHY9ITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGEpe2NvbnN0IE09Qk8obCk7aD1NPjA/TTp0aGlzLmNvdW50Rmlyc3RSb3dLZXlz''@;'; put 'put ''KCksdj0hMH1lbHNlIGg9TWF0aC5taW4odGhpcy50YWJsZU1ldGEubWF4Q29scyxhLmxlbmd0aCk7Zm9yKGQ9MDtkPGg7ZCsrKXtjb25zdCBNPXY/YShkKTphW2RdO2lmKHFvKE0pKXtpZih0eXBlb2YgTS5kYXRhPCJ1Iil7Y29uc3QgRD12P2Y6ZDt0aGlzLmNvbFRvUHJvcENhY2hlW0RdPU0u''@;'; put 'put ''ZGF0YSx0aGlzLnByb3BUb0NvbENhY2hlLnNldChNLmRhdGEsRCl9Zis9MX19fWVsc2UgdGhpcy5yZWN1cnNpdmVEdWNrQ29sdW1ucyhsKX1jb3VudEZpcnN0Um93S2V5cygpe3JldHVybiBGSyh0aGlzLmRhdGFTb3VyY2UpfXJlY3Vyc2l2ZUR1Y2tDb2x1bW5zKGwsYSxkKXtsZXQgdixoPWEs''@;'; put 'put ''Zj1kO3JldHVybiB0eXBlb2YgaD4idSImJihoPTAsZj0iIiksIm9iamVjdCI9PXR5cGVvZiBsJiYhQXJyYXkuaXNBcnJheShsKSYmWG8obCwoTSxEKT0+e251bGw9PT1NPyh2PWYrRCx0aGlzLmNvbFRvUHJvcENhY2hlLnB1c2godiksdGhpcy5wcm9wVG9Db2xDYWNoZS5zZXQodixoKSxoKz0x''@;'; put 'put ''KTpoPXRoaXMucmVjdXJzaXZlRHVja0NvbHVtbnMoTSxoLGAke0R9LmApfSksaH1jb2xUb1Byb3AobCl7aWYoITE9PT1OdW1iZXIuaXNJbnRlZ2VyKGwpKXJldHVybiBsO2NvbnN0IGE9dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihsKTtyZXR1cm4gbnVsbD09PWE/bDp0aGlzLmNvbFRvUHJv''@;'; put 'put ''cENhY2hlJiZQYSh0aGlzLmNvbFRvUHJvcENhY2hlW2FdKT90aGlzLmNvbFRvUHJvcENhY2hlW2FdOmF9cHJvcFRvQ29sKGwpe2NvbnN0IGE9dGhpcy5wcm9wVG9Db2xDYWNoZS5nZXQobCk7aWYoUGEoYSkpcmV0dXJuIHRoaXMuaG90LnRvVmlzdWFsQ29sdW1uKGEpO2NvbnN0IGQ9dGhpcy5o''@;'; put 'put ''b3QudG9WaXN1YWxDb2x1bW4obCk7cmV0dXJuIG51bGw9PT1kP2w6ZH1nZXRTY2hlbWEoKXtjb25zdCBsPXRoaXMudGFibGVNZXRhLmRhdGFTY2hlbWE7cmV0dXJuIGw/ImZ1bmN0aW9uIj09dHlwZW9mIGw/bCgpOmw6dGhpcy5kdWNrU2NoZW1hfWNyZWF0ZUR1Y2tTY2hlbWEoKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5kYXRhU291cmNlJiZ0aGlzLmRhdGFTb3VyY2VbMF0/c18odGhpcy5kYXRhU291cmNlWzBdKTp7fX1yZWZyZXNoRHVja1NjaGVtYSgpe3RoaXMuZHVja1NjaGVtYT10aGlzLmNyZWF0ZUR1Y2tTY2hlbWEoKX1jcmVhdGVSb3cobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lk''@;'; put 'put ''IDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjEse3NvdXJjZTpkLG1vZGU6aD0iYWJvdmUifT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06e307Y29uc3QgZj10aGlzLmhvdC5jb3VudFNvdXJjZVJvd3MoKTtsZXQgdj1mLE09MCxE''@;'; put 'put ''PWw7aWYoKCJudW1iZXIiIT10eXBlb2YgRHx8RD49ZikmJihEPWYpLEQ8dGhpcy5ob3QuY291bnRSb3dzKCkmJih2PXRoaXMuaG90LnRvUGh5c2ljYWxSb3coRCkpLCExPT09dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUNyZWF0ZVJvdyIsRCxhLGQpfHxudWxsPT09dilyZXR1cm57ZGVsdGE6''@;'; put 'put ''MH07Y29uc3QgcmU9dGhpcy50YWJsZU1ldGEubWF4Um93cyxjZT10aGlzLmdldFNjaGVtYSgpLmxlbmd0aCxiZT1bXTtmb3IoO008YSYmZitNPHJlOyl7bGV0IEJlPW51bGw7ImFycmF5Ij09PXRoaXMuaG90LmRhdGFUeXBlP3RoaXMudGFibGVNZXRhLmRhdGFTY2hlbWE/QmU9ZzEodGhpcy5n''@;'; put 'put ''ZXRTY2hlbWEoKSk6KEJlPVtdLEdhKGNlLTEsKCk9PkJlLnB1c2gobnVsbCkpKToiZnVuY3Rpb24iPT09dGhpcy5ob3QuZGF0YVR5cGU/QmU9dGhpcy50YWJsZU1ldGEuZGF0YVNjaGVtYShEK00pOihCZT17fSx4RShCZSx0aGlzLmdldFNjaGVtYSgpKSksYmUucHVzaChCZSksTSs9MX10aGlz''@;'; put 'put ''LmhvdC5yb3dJbmRleE1hcHBlci5pbnNlcnRJbmRleGVzKEQsTSksImJlbG93Ij09PWgmJih2PU1hdGgubWluKHYrMSxmKSksdGhpcy5zcGxpY2VEYXRhKHYsMCxiZSk7Y29uc3QgRWU9dGhpcy5ob3QudG9WaXN1YWxSb3codik7cmV0dXJuIHRoaXMuaG90LmNvdW50U291cmNlUm93cygpPT09''@;'; put 'put ''YmUubGVuZ3RoJiZ0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5pbml0VG9MZW5ndGgodGhpcy5ob3QuZ2V0SW5pdGlhbENvbHVtbkNvdW50KCkpLE0+MCYmKG51bGw9PWw/dGhpcy5tZXRhTWFuYWdlci5jcmVhdGVSb3cobnVsbCxNKToiYXV0byIhPT1kJiZ0aGlzLm1ldGFNYW5hZ2VyLmNy''@;'; put 'put ''ZWF0ZVJvdyh2LGEpKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJDcmVhdGVSb3ciLEVlLE0sZCkse2RlbHRhOk0sc3RhcnRQaHlzaWNhbEluZGV4OnZ9fWNyZWF0ZUNvbChsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MSx7''@;'; put 'put ''c291cmNlOmQsbW9kZTpoPSJzdGFydCJ9PWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp7fTtpZighdGhpcy5ob3QuaXNDb2x1bW5Nb2RpZmljYXRpb25BbGxvd2VkKCkpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgY3JlYXRlIG5ldyBjb2x1''@;'; put 'put ''bW4uIFdoZW4gZGF0YSBzb3VyY2UgaW4gYW4gb2JqZWN0LCB5b3UgY2FuIG9ubHkgaGF2ZSBhcyBtdWNoIGNvbHVtbnMgYXMgZGVmaW5lZCBpbiBmaXJzdCBkYXRhIHJvdywgZGF0YSBzY2hlbWEgb3IgaW4gdGhlICdjb2x1bW5zJyBzZXR0aW5nLklmIHlvdSB3YW50IHRvIGJlIGFibGUgdG8g''@;'; put 'put ''YWRkIG5ldyBjb2x1bW5zLCB5b3UgaGF2ZSB0byB1c2UgYXJyYXkgZGF0YXNvdXJjZS4iKTtjb25zdCBmPXRoaXMuZGF0YVNvdXJjZSx2PXRoaXMudGFibGVNZXRhLm1heENvbHMsTT10aGlzLmhvdC5jb3VudFNvdXJjZUNvbHMoKTtsZXQgRD1sO2lmKCgibnVtYmVyIiE9dHlwZW9mIER8fEQ+''@;'; put 'put ''PU0pJiYoRD1NKSwhMT09PXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVDcmVhdGVDb2wiLEQsYSxkKSlyZXR1cm57ZGVsdGE6MH07bGV0IHJlPU07RDx0aGlzLmhvdC5jb3VudENvbHMoKSYmKHJlPXRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4oRCkpO2NvbnN0IGNlPXRoaXMuaG90LmNvdW50''@;'; put 'put ''U291cmNlUm93cygpO2xldCBiZT10aGlzLmhvdC5jb3VudENvbHMoKSxFZT0wLEJlPXJlOyJlbmQiPT09aCYmKEJlPU1hdGgubWluKEJlKzEsTSkpO2NvbnN0IHFlPUJlO2Zvcig7RWU8YSYmYmU8djspe2lmKCJudW1iZXIiIT10eXBlb2YgRHx8RD49YmUpaWYoY2U+MClmb3IobGV0IHB0PTA7''@;'; put 'put ''cHQ8Y2U7cHQrPTEpdHlwZW9mIGZbcHRdPiJ1IiYmKGZbcHRdPVtdKSxmW3B0XS5wdXNoKG51bGwpO2Vsc2UgZi5wdXNoKFtudWxsXSk7ZWxzZSBmb3IobGV0IHB0PTA7cHQ8Y2U7cHQrKylmW3B0XS5zcGxpY2UoQmUsMCxudWxsKTtFZSs9MSxCZSs9MSxiZSs9MX10aGlzLmhvdC5jb2x1bW5J''@;'; put 'put ''bmRleE1hcHBlci5pbnNlcnRJbmRleGVzKEQsRWUpLEVlPjAmJihudWxsPT1sP3RoaXMubWV0YU1hbmFnZXIuY3JlYXRlQ29sdW1uKG51bGwsRWUpOiJhdXRvIiE9PWQmJnRoaXMubWV0YU1hbmFnZXIuY3JlYXRlQ29sdW1uKHFlLGEpKTtjb25zdCBydD10aGlzLmhvdC50b1Zpc3VhbENvbHVt''@;'; put 'put ''bihxZSk7cmV0dXJuIHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckNyZWF0ZUNvbCIscnQsRWUsZCksdGhpcy5yZWZyZXNoRHVja1NjaGVtYSgpLHtkZWx0YTpFZSxzdGFydFBoeXNpY2FsSW5kZXg6cWV9fXJlbW92ZVJvdyhsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFy''@;'; put 'put ''Z3VtZW50c1sxXT9hcmd1bWVudHNbMV06MSxkPWFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwLGg9TnVtYmVyLmlzSW50ZWdlcihsKT9sOi1hO2NvbnN0IGY9dGhpcy52aXN1YWxSb3dzVG9QaHlzaWNhbChoLGEpLHY9dGhpcy5ob3QuY291bnRTb3VyY2VSb3dzKCk7aWYo''@;'; put 'put ''aD0oditoKSV2LCExPT09dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVJlbW92ZVJvdyIsaCxmLmxlbmd0aCxmLGQpKXJldHVybiExO2NvbnN0IEQ9Zi5sZW5ndGg7aWYodGhpcy5maWx0ZXJEYXRhKGgsRCxmKSxoPHRoaXMuaG90LmNvdW50Um93cygpKXt0aGlzLmhvdC5yb3dJbmRleE1hcHBl''@;'; put 'put ''ci5yZW1vdmVJbmRleGVzKGYpO2NvbnN0IHJlPVBhKHRoaXMudGFibGVNZXRhLmNvbHVtbnMpfHxQYSh0aGlzLnRhYmxlTWV0YS5kYXRhU2NoZW1hKXx8dGhpcy50YWJsZU1ldGEuY29sSGVhZGVyczswPT09dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0Tm90VHJpbW1lZEluZGV4ZXNMZW5n''@;'; put 'put ''dGgoKSYmIXJlJiZ0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5zZXRJbmRleGVzU2VxdWVuY2UoW10pfXJldHVybiBmLnNsaWNlKDApLnNvcnQoKHJlLGNlKT0+Y2UtcmUpLmZvckVhY2gocmU9Pnt0aGlzLm1ldGFNYW5hZ2VyLnJlbW92ZVJvdyhyZSwxKX0pLHRoaXMuaG90LnJ1bkhvb2tz''@;'; put 'put ''KCJhZnRlclJlbW92ZVJvdyIsaCxELGYsZCksITB9cmVtb3ZlQ29sKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToxLGQ9YXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDA7aWYoIm9iamVjdCI9PT10aGlz''@;'; put 'put ''LmhvdC5kYXRhVHlwZXx8dGhpcy50YWJsZU1ldGEuY29sdW1ucyl0aHJvdyBuZXcgRXJyb3IoImNhbm5vdCByZW1vdmUgY29sdW1uIHdpdGggb2JqZWN0IGRhdGEgc291cmNlIG9yIGNvbHVtbnMgb3B0aW9uIHNwZWNpZmllZCIpO2xldCBoPSJudW1iZXIiIT10eXBlb2YgbD8tYTpsO2g9KHRo''@;'; put 'put ''aXMuaG90LmNvdW50Q29scygpK2gpJXRoaXMuaG90LmNvdW50Q29scygpO2NvbnN0IGY9dGhpcy52aXN1YWxDb2x1bW5zVG9QaHlzaWNhbChoLGEpLHY9Zi5zbGljZSgwKS5zb3J0KChjZSxiZSk9PmJlLWNlKTtpZighMT09PXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVSZW1vdmVDb2wiLGgs''@;'; put 'put ''YSxmLGQpKXJldHVybiExO2xldCBEPSEwO2NvbnN0IFo9di5sZW5ndGgscmU9dGhpcy5kYXRhU291cmNlO2ZvcihsZXQgY2U9MDtjZTxaO2NlKyspRCYmZlswXSE9PWZbY2VdLWNlJiYoRD0hMSk7aWYoRClmb3IobGV0IGNlPTAsYmU9dGhpcy5ob3QuY291bnRTb3VyY2VSb3dzKCk7Y2U8YmU7''@;'; put 'put ''Y2UrKylyZVtjZV0uc3BsaWNlKGZbMF0sYSksMD09PWNlJiZ0aGlzLm1ldGFNYW5hZ2VyLnJlbW92ZUNvbHVtbihmWzBdLGEpO2Vsc2UgZm9yKGxldCBjZT0wLGJlPXRoaXMuaG90LmNvdW50U291cmNlUm93cygpO2NlPGJlO2NlKyspZm9yKGxldCBFZT0wO0VlPFo7RWUrKylyZVtjZV0uc3Bs''@;'; put 'put ''aWNlKHZbRWVdLDEpLDA9PT1jZSYmdGhpcy5tZXRhTWFuYWdlci5yZW1vdmVDb2x1bW4odltFZV0sMSk7cmV0dXJuIGg8dGhpcy5ob3QuY291bnRDb2xzKCkmJih0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5yZW1vdmVJbmRleGVzKGYpLCF0aGlzLnRhYmxlTWV0YS5yb3dIZWFkZXJzJiYw''@;'; put 'put ''PT09dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0Tm90VHJpbW1lZEluZGV4ZXNMZW5ndGgoKSYmdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuc2V0SW5kZXhlc1NlcXVlbmNlKFtdKSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyUmVtb3ZlQ29sIixoLGEsZixkKSx0aGlzLnJlZnJlc2hE''@;'; put 'put ''dWNrU2NoZW1hKCksITB9c3BsaWNlQ29sKGwsYSxkKXtjb25zdCBoPXRoaXMuaG90LmdldERhdGFBdENvbChsKSxmPWguc2xpY2UoYSxhK2QpLHY9aC5zbGljZShhK2QpO2Zvcih2YXIgTT1hcmd1bWVudHMubGVuZ3RoLEQ9bmV3IEFycmF5KE0+Mz9NLTM6MCksWj0zO1o8TTtaKyspRFtaLTNd''@;'; put 'put ''PWFyZ3VtZW50c1taXTtsJChELHYpO2xldCByZT0wO2Zvcig7cmU8ZDspRC5wdXNoKG51bGwpLHJlKz0xO3JldHVybiBwMmUoRCksdGhpcy5ob3QucG9wdWxhdGVGcm9tQXJyYXkoYSxsLEQsbnVsbCxudWxsLCJzcGxpY2VDb2wiKSxmfXNwbGljZVJvdyhsLGEsZCl7Y29uc3QgaD10aGlzLmhv''@;'; put 'put ''dC5nZXRTb3VyY2VEYXRhQXRSb3cobCksZj1oLnNsaWNlKGEsYStkKSx2PWguc2xpY2UoYStkKTtmb3IodmFyIE09YXJndW1lbnRzLmxlbmd0aCxEPW5ldyBBcnJheShNPjM/TS0zOjApLFo9MztaPE07WisrKURbWi0zXT1hcmd1bWVudHNbWl07bCQoRCx2KTtsZXQgcmU9MDtmb3IoO3JlPGQ7''@;'; put 'put ''KUQucHVzaChudWxsKSxyZSs9MTtyZXR1cm4gdGhpcy5ob3QucG9wdWxhdGVGcm9tQXJyYXkobCxhLFtEXSxudWxsLG51bGwsInNwbGljZVJvdyIpLGZ9c3BsaWNlRGF0YShsLGEsZCl7aWYoITEhPT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlRGF0YVNwbGljZSIsbCxhLGQpKXtjb25zdCBm''@;'; put 'put ''PVsuLi50aGlzLmRhdGFTb3VyY2Uuc2xpY2UoMCxsKSwuLi5kLC4uLnRoaXMuZGF0YVNvdXJjZS5zbGljZShsKV07dGhpcy5kYXRhU291cmNlLmxlbmd0aD0wLGYuZm9yRWFjaCh2PT50aGlzLmRhdGFTb3VyY2UucHVzaCh2KSl9fWZpbHRlckRhdGEobCxhLGQpe2xldCBoPXRoaXMuaG90LnJ1''@;'; put 'put ''bkhvb2tzKCJmaWx0ZXJEYXRhIixsLGEsZCk7ITE9PT1BcnJheS5pc0FycmF5KGgpJiYoaD10aGlzLmRhdGFTb3VyY2UuZmlsdGVyKChmLHYpPT4tMT09PWQuaW5kZXhPZih2KSkpLHRoaXMuZGF0YVNvdXJjZS5sZW5ndGg9MCxBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseSh0aGlzLmRhdGFT''@;'; put 'put ''b3VyY2UsaCl9Z2V0KGwsYSl7Y29uc3QgZD10aGlzLmhvdC50b1BoeXNpY2FsUm93KGwpO2xldCBoPXRoaXMuZGF0YVNvdXJjZVtkXTtjb25zdCBmPXRoaXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlSb3dEYXRhIixkKTtoPWlzTmFOKGYpP2Y6aDtjb25zdHtkYXRhRG90Tm90YXRpb246dn09dGhp''@;'; put 'put ''cy5ob3QuZ2V0U2V0dGluZ3MoKTtsZXQgTT1udWxsO2lmKGgmJmguaGFzT3duUHJvcGVydHkmJlR1KGgsYSkpTT1oW2FdO2Vsc2UgaWYodiYmInN0cmluZyI9PXR5cGVvZiBhJiZhLmluZGV4T2YoIi4iKT4tMSl7bGV0IEQ9aDtpZighRClyZXR1cm4gbnVsbDtjb25zdCBaPWEuc3BsaXQoIi4i''@;'; put 'put ''KTtmb3IobGV0IHJlPTAsY2U9Wi5sZW5ndGg7cmU8Y2U7cmUrKylpZihEPURbWltyZV1dLHR5cGVvZiBEPiJ1IilyZXR1cm4gbnVsbDtNPUR9ZWxzZSJmdW5jdGlvbiI9PXR5cGVvZiBhJiYoTT1hKHRoaXMuZGF0YVNvdXJjZS5zbGljZShkLGQrMSlbMF0pKTtpZih0aGlzLmhvdC5oYXNIb29r''@;'; put 'put ''KCJtb2RpZnlEYXRhIikpe2NvbnN0IEQ9RmQoTSk7dGhpcy5ob3QucnVuSG9va3MoIm1vZGlmeURhdGEiLGQsdGhpcy5wcm9wVG9Db2woYSksRCwiZ2V0IiksRC5pc1RvdWNoZWQoKSYmKE09RC52YWx1ZSl9cmV0dXJuIE19Z2V0Q29weWFibGUobCxhKXtyZXR1cm4gdGhpcy5ob3QuZ2V0Q2Vs''@;'; put 'put ''bE1ldGEobCx0aGlzLnByb3BUb0NvbChhKSkuY29weWFibGU/dGhpcy5nZXQobCxhKToiIn1zZXQobCxhLGQpe2NvbnN0IGg9dGhpcy5ob3QudG9QaHlzaWNhbFJvdyhsKTtsZXQgZj1kLHY9dGhpcy5kYXRhU291cmNlW2hdO2NvbnN0IE09dGhpcy5ob3QucnVuSG9va3MoIm1vZGlmeVJvd0Rh''@;'; put 'put ''dGEiLGgpO2lmKHY9aXNOYU4oTSk/TTp2LHRoaXMuaG90Lmhhc0hvb2soIm1vZGlmeURhdGEiKSl7Y29uc3QgWj1GZChmKTt0aGlzLmhvdC5ydW5Ib29rcygibW9kaWZ5RGF0YSIsaCx0aGlzLnByb3BUb0NvbChhKSxaLCJzZXQiKSxaLmlzVG91Y2hlZCgpJiYoZj1aLnZhbHVlKX1jb25zdHtk''@;'; put 'put ''YXRhRG90Tm90YXRpb246RH09dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKTtpZih2JiZ2Lmhhc093blByb3BlcnR5JiZUdSh2LGEpKXZbYV09ZjtlbHNlIGlmKEQmJiJzdHJpbmciPT10eXBlb2YgYSYmYS5pbmRleE9mKCIuIik+LTEpe2xldCBjZSxaPXYscmU9MDtjb25zdCBiZT1hLnNwbGl0KCIu''@;'; put 'put ''Iik7Zm9yKHJlPTAsY2U9YmUubGVuZ3RoLTE7cmU8Y2U7cmUrKyl7aWYoIl9fcHJvdG9fXyI9PT1iZVtyZV18fCJjb25zdHJ1Y3RvciI9PT1iZVtyZV18fCJwcm90b3R5cGUiPT09YmVbcmVdKXJldHVybjt0eXBlb2YgWltiZVtyZV1dPiJ1IiYmKFpbYmVbcmVdXT17fSksWj1aW2JlW3JlXV19''@;'; put 'put ''WltiZVtyZV1dPWZ9ZWxzZSBpZigiZnVuY3Rpb24iPT10eXBlb2YgYSlhKHRoaXMuZGF0YVNvdXJjZS5zbGljZShoLGgrMSlbMF0sZik7ZWxzZXtpZigiX19wcm90b19fIj09PWF8fCJjb25zdHJ1Y3RvciI9PT1hfHwicHJvdG90eXBlIj09PWEpcmV0dXJuO3ZbYV09Zn19dmlzdWFsUm93c1Rv''@;'; put 'put ''UGh5c2ljYWwobCxhKXtjb25zdCBkPXRoaXMuaG90LmNvdW50U291cmNlUm93cygpLGg9W107bGV0IE0sZj0oZCtsKSVkLHY9YTtmb3IoO2Y8ZCYmdjspTT10aGlzLmhvdC50b1BoeXNpY2FsUm93KGYpLGgucHVzaChNKSx2LT0xLGYrPTE7cmV0dXJuIGh9dmlzdWFsQ29sdW1uc1RvUGh5c2lj''@;'; put 'put ''YWwobCxhKXtjb25zdCBkPXRoaXMuaG90LmNvdW50Q29scygpLGg9W107bGV0IGY9KGQrbCklZCx2PWE7Zm9yKDtmPGQmJnY7KXtjb25zdCBNPXRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4oZik7aC5wdXNoKE0pLHYtPTEsZis9MX1yZXR1cm4gaH1jbGVhcigpe2ZvcihsZXQgbD0wO2w8dGhp''@;'; put 'put ''cy5ob3QuY291bnRTb3VyY2VSb3dzKCk7bCsrKWZvcihsZXQgYT0wO2E8dGhpcy5ob3QuY291bnRDb2xzKCk7YSsrKXRoaXMuc2V0KGwsdGhpcy5jb2xUb1Byb3AoYSksIiIpfWdldExlbmd0aCgpe2NvbnN0IGw9dGhpcy50YWJsZU1ldGEubWF4Um93cztsZXQgYTthPWw8MHx8MD09PWw/MDps''@;'; put 'put ''fHwxLzA7Y29uc3QgZD10aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXROb3RUcmltbWVkSW5kZXhlc0xlbmd0aCgpO3JldHVybiBNYXRoLm1pbihkLGEpfWdldEFsbCgpe2NvbnN0IGw9e3JvdzowLGNvbDowfSxhPXtyb3c6TWF0aC5tYXgodGhpcy5ob3QuY291bnRSb3dzKCktMSwwKSxjb2w6''@;'; put 'put ''TWF0aC5tYXgodGhpcy5ob3QuY291bnRDb2xzKCktMSwwKX07cmV0dXJuIGwucm93LWEucm93IT0wfHx0aGlzLmhvdC5jb3VudFNvdXJjZVJvd3MoKT90aGlzLmdldFJhbmdlKGwsYSxUXy5ERVNUSU5BVElPTl9SRU5ERVJFUik6W119Y291bnRDYWNoZWRDb2x1bW5zKCl7cmV0dXJuIHRoaXMu''@;'; put 'put ''Y29sVG9Qcm9wQ2FjaGUubGVuZ3RofWdldFJhbmdlKGwsYSxkKXtjb25zdCBoPVtdO2xldCBmLHYsTTtjb25zdCBEPXRoaXMudGFibGVNZXRhLm1heFJvd3MsWj10aGlzLnRhYmxlTWV0YS5tYXhDb2xzO2lmKDA9PT1EfHwwPT09WilyZXR1cm5bXTtjb25zdCByZT1kPT09VF8uREVTVElOQVRJ''@;'; put 'put ''T05fQ0xJUEJPQVJEX0dFTkVSQVRPUj90aGlzLmdldENvcHlhYmxlOnRoaXMuZ2V0LGNlPU1hdGgubWluKE1hdGgubWF4KEQtMSwwKSxNYXRoLm1heChsLnJvdyxhLnJvdykpLGJlPU1hdGgubWluKE1hdGgubWF4KFotMSwwKSxNYXRoLm1heChsLmNvbCxhLmNvbCkpO2ZvcihmPU1hdGgubWlu''@;'; put 'put ''KGwucm93LGEucm93KTtmPD1jZTtmKyspe009W107Y29uc3QgRWU9Zj49MD90aGlzLmhvdC50b1BoeXNpY2FsUm93KGYpOmY7Zm9yKHY9TWF0aC5taW4obC5jb2wsYS5jb2wpO3Y8PWJlJiZudWxsIT09RWU7disrKU0ucHVzaChyZS5jYWxsKHRoaXMsZix0aGlzLmNvbFRvUHJvcCh2KSkpO251''@;'; put 'put ''bGwhPT1FZSYmaC5wdXNoKE0pfXJldHVybiBofWdldFRleHQobCxhKXtyZXR1cm4gclQodGhpcy5nZXRSYW5nZShsLGEsVF8uREVTVElOQVRJT05fUkVOREVSRVIpKX1nZXRDb3B5YWJsZVRleHQobCxhKXtyZXR1cm4gclQodGhpcy5nZXRSYW5nZShsLGEsVF8uREVTVElOQVRJT05fQ0xJUEJP''@;'; put 'put ''QVJEX0dFTkVSQVRPUikpfWRlc3Ryb3koKXt0aGlzLmhvdD1udWxsLHRoaXMubWV0YU1hbmFnZXI9bnVsbCx0aGlzLmRhdGFTb3VyY2U9bnVsbCx0aGlzLmR1Y2tTY2hlbWE9bnVsbCx0aGlzLmNvbFRvUHJvcENhY2hlLmxlbmd0aD0wLHRoaXMucHJvcFRvQ29sQ2FjaGUuY2xlYXIoKSx0aGlz''@;'; put 'put ''LnByb3BUb0NvbENhY2hlPXZvaWQgMH19Y29uc3QgTHJ0PVRfO2Z1bmN0aW9uIGdwZShjLGwsYSxkKXtjb25zdHtob3RJbnN0YW5jZTpoLGRhdGFNYXA6ZixkYXRhU291cmNlOnYsaW50ZXJuYWxTb3VyY2U6TSxzb3VyY2U6RCxtZXRhTWFuYWdlcjpaLGZpcnN0UnVuOnJlfT1kLGNlPXAxKE0p''@;'; put 'put ''LGJlPWguZ2V0U2V0dGluZ3MoKTtoLmRhdGFUeXBlPUFycmF5LmlzQXJyYXkoYmUuZGF0YVNjaGVtYSk/ImFycmF5IjptbChiZS5kYXRhU2NoZW1hKT8iZnVuY3Rpb24iOiJvYmplY3QiLGYmJmYuZGVzdHJveSgpLGM9aC5ydW5Ib29rcyhgYmVmb3JlJHtjZX1gLGMscmUsRCk7Y29uc3QgRWU9''@;'; put 'put ''bmV3IExydChoLGMsWik7aWYobChFZSksIm9iamVjdCI9PXR5cGVvZiBjJiZudWxsIT09YyljLnB1c2gmJmMuc3BsaWNlfHwoYz1bY10pO2Vsc2V7aWYobnVsbCE9PWMpdGhyb3cgbmV3IEVycm9yKGAke019IG9ubHkgYWNjZXB0cyBhcnJheSBvZiBvYmplY3RzIG9yIGFycmF5IG9mIGFycmF5''@;'; put 'put ''cyAoJHt0eXBlb2YgY30gZ2l2ZW4pYCk7e2NvbnN0IEJlPUVlLmdldFNjaGVtYSgpO2M9W107bGV0IHFlLHJ0PTAscHQ9MDtmb3IocnQ9MCxwdD1iZS5zdGFydFJvd3M7cnQ8cHQ7cnQrKylpZigib2JqZWN0IiE9PWguZGF0YVR5cGUmJiJmdW5jdGlvbiIhPT1oLmRhdGFUeXBlfHwhYmUuZGF0''@;'; put 'put ''YVNjaGVtYSlpZigiYXJyYXkiPT09aC5kYXRhVHlwZSlxZT1nMShCZVswXSksYy5wdXNoKHFlKTtlbHNle3FlPVtdO2ZvcihsZXQgZHQ9MCxKdD1iZS5zdGFydENvbHM7ZHQ8SnQ7ZHQrKylxZS5wdXNoKG51bGwpO2MucHVzaChxZSl9ZWxzZSBxZT1nMShCZSksYy5wdXNoKHFlKX19QXJyYXku''@;'; put 'put ''aXNBcnJheShjWzBdKSYmKGguZGF0YVR5cGU9ImFycmF5IiksYmUuZGF0YT1jLEVlLmRhdGFTb3VyY2U9Yyx2LmRhdGE9Yyx2LmRhdGFUeXBlPWguZGF0YVR5cGUsdi5jb2xUb1Byb3A9RWUuY29sVG9Qcm9wLmJpbmQoRWUpLHYucHJvcFRvQ29sPUVlLnByb3BUb0NvbC5iaW5kKEVlKSx2LmNv''@;'; put 'put ''dW50Q2FjaGVkQ29sdW1ucz1FZS5jb3VudENhY2hlZENvbHVtbnMuYmluZChFZSksYShFZSksaC5ydW5Ib29rcyhgYWZ0ZXIke2NlfWAsYyxyZSxEKSxyZXx8KGgucnVuSG9va3MoImFmdGVyQ2hhbmdlIixudWxsLE0pLGgucmVuZGVyKCkpLGguZ2V0U2V0dGluZ3MoKS5hcmlhVGFncyYmdm8o''@;'; put 'put ''aC5yb290RWxlbWVudCxbVDJlKC0xKSxSTyhoLmNvdW50Q29scygpKyhoLnZpZXc/aC5jb3VudFJvd0hlYWRlcnMoKTowKSldKX1mdW5jdGlvbiBBXyhjKXtFcChjKSYmYy5zY3JvbGxJbnRvVmlldyh7YmxvY2s6Im5lYXJlc3QiLGlubGluZToibmVhcmVzdCJ9KX1mdW5jdGlvbiBGUChjKXtj''@;'; put 'put ''b25zdHtzZWxlY3Rpb246bCx2aWV3OmF9PWMsZD1jLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksaD1sLmdldFNlbGVjdGlvblNvdXJjZSgpLGY9YS5nZXRGaXJzdEZ1bGx5VmlzaWJsZUNvbHVtbigpLHY9YS5nZXRMYXN0RnVsbHlWaXNpYmxlQ29sdW1uKCksTT1kLmdldFRvcFN0YXJ0Q29ybmVy''@;'; put 'put ''KCkuY29sLEQ9ZC5nZXRCb3R0b21FbmRDb3JuZXIoKS5jb2wsWj1NPD1mLHJlPUQ+PXYsY2U9YS5nZXRGaXJzdEZ1bGx5VmlzaWJsZVJvdygpLGJlPWEuZ2V0TGFzdEZ1bGx5VmlzaWJsZVJvdygpLEVlPWQuZ2V0VG9wU3RhcnRDb3JuZXIoKS5yb3csQmU9ZC5nZXRCb3R0b21FbmRDb3JuZXIo''@;'; put 'put ''KS5yb3cscWU9RWU8PWNlLHJ0PUJlPj1iZTtyZXR1cm57Z2V0Q29tcHV0ZWRDb2x1bW5UYXJnZXQ6cHQ9PiJtb3VzZSI9PT1ofHwia2V5Ym9hcmQiPT09aD9wdC5jb2w6WiYmcmU/ZC5oaWdobGlnaHQuY29sOlo/TTpyZT9EOnB0LmNvbCxnZXRDb21wdXRlZFJvd1RhcmdldDpwdD0+Im1vdXNl''@;'; put 'put ''Ij09PWh8fCJrZXlib2FyZCI9PT1oP3B0LnJvdzpxZSYmcnQ/ZC5oaWdobGlnaHQucm93OnFlP0VlOnJ0P0JlOnB0LnJvd319Y29uc3QgbXBlPSJncmlkRGVmYXVsdCIsV209ImVkaXRvck1hbmFnZXIuaGFuZGxpbmdFZGl0b3IiO2Z1bmN0aW9uIHZwZShjKXtjb25zdCBhPWMucm9vdERvY3Vt''@;'; put 'put ''ZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7cmV0dXJuIGEudHlwZT0idGV4dCIsYS5uYW1lPSJfX2h0Rm9jdXNDYXRjaGVyIixhLmNsYXNzTGlzdC5hZGQoImh0Rm9jdXNDYXRjaGVyIiksYy5nZXRTZXR0aW5ncygpLmFyaWFUYWdzJiZ2byhhLFttRSgiRm9jdXMgY2F0Y2hlciIpXSksYX1m''@;'; put 'put ''dW5jdGlvbiBFWChjKXtjb25zdHtyb3dJbmRleE1hcHBlcjpsLGNvbHVtbkluZGV4TWFwcGVyOmF9PWMse25hdmlnYWJsZUhlYWRlcnM6ZH09Yy5nZXRTZXR0aW5ncygpO2xldCBoPWQmJmMuY291bnRDb2xIZWFkZXJzKCk+MD8tYy5jb3VudENvbEhlYWRlcnMoKTowLGY9ZCYmYy5jb3VudFJv''@;'; put 'put ''d0hlYWRlcnMoKT4wPy1jLmNvdW50Um93SGVhZGVycygpOjA7cmV0dXJuIDA9PT1oJiYoaD1sLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoaCkpLDA9PT1mJiYoZj1hLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoZikpLG51bGw9PT1ofHxudWxsPT09Zj9udWxsOmMuX2NyZWF0''@;'; put 'put ''ZUNlbGxDb29yZHMoaCxmKX1mdW5jdGlvbiBUWChjKXt2YXIgbCxhO2NvbnN0e3Jvd0luZGV4TWFwcGVyOmQsY29sdW1uSW5kZXhNYXBwZXI6aH09Yyx7bmF2aWdhYmxlSGVhZGVyczpmfT1jLmdldFNldHRpbmdzKCk7bGV0IHY9ZC5nZXRSZW5kZXJhYmxlSW5kZXhlc0xlbmd0aCgpLTEsTT1o''@;'; put 'put ''LmdldFJlbmRlcmFibGVJbmRleGVzTGVuZ3RoKCktMTtpZih2PDApe2lmKCFmfHwwPT09Yy5jb3VudENvbEhlYWRlcnMoKSlyZXR1cm4gbnVsbDt2PS0xfWlmKE08MCl7aWYoIWZ8fDA9PT1jLmNvdW50Q29sSGVhZGVycygpKXJldHVybiBudWxsO009LTF9cmV0dXJuIGMuX2NyZWF0ZUNlbGxD''@;'; put 'put ''b29yZHMobnVsbCE9PShsPWQuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleCh2KSkmJnZvaWQgMCE9PWw/bDp2LG51bGwhPT0oYT1oLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoTSkpJiZ2b2lkIDAhPT1hP2E6TSl9Y29uc3QgYnBlPW5ldyBNYXAoW1siICIsInNwYWNlIl0sWyJz''@;'; put 'put ''cGFjZWJhciIsInNwYWNlIl0sWyJzY3JvbGwiLCJzY3JvbGxsb2NrIl0sWyJkZWwiLCJkZWxldGUiXSxbImVzYyIsImVzY2FwZSJdLFsibWVkaWFuZXh0dHJhY2siLCJtZWRpYXRyYWNrbmV4dCJdLFsibWVkaWFwcmV2aW91c3RyYWNrIiwibWVkaWF0cmFja3ByZXZpb3VzIl0sWyJ2b2x1bWV1''@;'; put 'put ''cCIsImF1ZGlvdm9sdW1ldXAiXSxbInZvbHVtZWRvd24iLCJhdWRpb3ZvbHVtZWRvd24iXSxbInZvbHVtZW11dGUiLCJhdWRpb3ZvbHVtZW11dGUiXSxbIm11bHRpcGx5IiwiKiJdLFsiYWRkIiwiKyJdLFsiZGl2aWRlIiwiLyJdLFsic3VidHJhY3QiLCItIl0sWyJsZWZ0IiwiYXJyb3dsZWZ0''@;'; put 'put ''Il0sWyJyaWdodCIsImFycm93cmlnaHQiXSxbInVwIiwiYXJyb3d1cCJdLFsiZG93biIsImFycm93ZG93biJdXSksSFA9Yz0+Yy5tYXAobD0+e2NvbnN0IGE9bC50b0xvd2VyQ2FzZSgpO3JldHVybiBicGUuaGFzKGEpP2JwZS5nZXQoYSk6YX0pLnNvcnQoKS5qb2luKCIrIikseXBlPW5ldyBN''@;'; put 'put ''YXAoW1s5NiwibnVtcGFkMCJdLFs5NywibnVtcGFkMSJdLFs5OCwibnVtcGFkMiJdLFs5OSwibnVtcGFkMyJdLFsxMDAsIm51bXBhZDQiXSxbMTAxLCJudW1wYWQ1Il0sWzEwMiwibnVtcGFkNiJdLFsxMDMsIm51bXBhZDciXSxbMTA0LCJudW1wYWQ4Il0sWzEwNSwibnVtcGFkOSJdLFsxMDYs''@;'; put 'put ''Im11bHRpcGx5Il0sWzEwNywiYWRkIl0sWzEwOCwiZGVjaW1hbCJdLFsxMDksInN1YnRyYWN0Il0sWzExMCwiZGVjaW1hbCJdLFsxMTEsImRpdmlkZSJdLFsxMTIsImYxIl0sWzExMywiZjIiXSxbMTE0LCJmMyJdLFsxMTUsImY0Il0sWzExNiwiZjUiXSxbMTE3LCJmNiJdLFsxMTgsImY3Il0s''@;'; put 'put ''WzExOSwiZjgiXSxbMTIwLCJmOSJdLFsxMjEsImYxMCJdLFsxMjIsImYxMSJdLFsxMjMsImYxMiJdLFsxODYsInNlbWljb2xvbiJdLFsxODcsImVxdWFsIl0sWzE4OCwiY29tbWEiXSxbMTg5LCJtaW51cyJdLFsxOTAsInBlcmlvZCJdLFsxOTEsInNsYXNoIl0sWzE5MiwiYmFja3F1b3RlIl0s''@;'; put 'put ''WzIxOSwiYnJhY2tldGxlZnQiXSxbMjIwLCJiYWNrc2xhc2giXSxbMjIxLCJicmFja2V0cmlnaHQiXSxbMjIyLCJxdW90ZSJdXSksQVg9Yz0+e2xldHt3aGljaDpsLGtleTphfT1jO2lmKHlwZS5oYXMobCkpcmV0dXJuIHlwZS5nZXQobCk7Y29uc3QgZD1TdHJpbmcuZnJvbUNoYXJDb2RlKGwp''@;'; put 'put ''LnRvTG93ZXJDYXNlKCk7cmV0dXJuL15bYS16MC05XSQvLnRlc3QoZCk/ZDphLnRvTG93ZXJDYXNlKCl9LF9wZT1TeW1ib2woInNob3J0Y3V0LWNvbnRleHQiKTtmdW5jdGlvbiB3cGUoYyl7cmV0dXJuIHFvKGMpJiZjLl9fa2luZE9mPT09X3BlfWNvbnN0ICRydD1bIm1ldGEiLCJhbHQiLCJz''@;'; put 'put ''aGlmdCIsImNvbnRyb2wiXSxpVD1mdW5jdGlvbiBHcnQoKXtjb25zdCBjPW5ldyBTZXQ7cmV0dXJue3ByZXNzKGwpe2MuYWRkKGwpfSxyZWxlYXNlKGwpe2MuZGVsZXRlKGwpfSxyZWxlYXNlQWxsKCl7Yy5jbGVhcigpfSxpc1ByZXNzZWQ6bD0+Yy5oYXMobCl9fSgpLGFUPVtdO2xldCBOUD0w''@;'; put 'put ''O2NvbnN0IHFydD1jPT57bGV0e293bmVyV2luZG93OmwsaGFuZGxlRXZlbnQ6YSxiZWZvcmVLZXlEb3duOmQsYWZ0ZXJLZXlEb3duOmh9PWM7Y29uc3QgZj1KTyh7ZXJyb3JJZEV4aXN0czpCZT0+YFRoZSAiJHtCZX0iIGNvbnRleHQgbmFtZSBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQuYH0pO2xl''@;'; put 'put ''dCB2PSJncmlkIjtjb25zdCBEPSgpPT52LFo9QmU9PmYuZ2V0SXRlbShCZSk7bGV0IGNlPSExO2NvbnN0IGJlPWZ1bmN0aW9uKEJlLHFlKXtsZXQgcnQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOkQoKTtjb25zdCBwdD13cGUocnQpP3J0''@;'; put 'put ''OloocnQpO2xldCBkdD0hMTtpZighcHQuaGFzU2hvcnRjdXQocWUpKXJldHVybiBkdDtjb25zdCBKdD1wdC5nZXRTaG9ydGN1dHMocWUpO2ZvcihsZXQgdm49MDt2bjxKdC5sZW5ndGg7dm4rKyl7Y29uc3R7Y2FsbGJhY2s6Q24scnVuT25seUlmOnRuLHByZXZlbnREZWZhdWx0Ok1uLHN0b3BQ''@;'; put 'put ''cm9wYWdhdGlvbjpDcixjYXB0dXJlQ3RybDpHcixmb3J3YXJkVG9Db250ZXh0Om1yfT1KdFt2bl07aWYoITA9PT10bihCZSkpe2lmKGNlPUdyLGR0PSExPT09Q24oQmUscWUpLGNlPSExLE1uJiZCZS5wcmV2ZW50RGVmYXVsdCgpLENyJiYoQjIoQmUpLEJlLnN0b3BQcm9wYWdhdGlvbigpKSxk''@;'; put 'put ''dClicmVhazttciYmYmUoQmUscWUsbXIpfX1yZXR1cm4gZHR9LEVlPWZ1bmN0aW9uIEtydChjLGwsYSxkLGgpe2NvbnN0IGY9RWU9PiRydC5pbmNsdWRlcyhFZSksdj1mdW5jdGlvbihFZSl7bGV0IEJlPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVu''@;'; put 'put ''dHNbMV07Y29uc3QgcWU9W107cmV0dXJuIEVlLmFsdEtleSYmcWUucHVzaCgiYWx0IiksQmUmJihFZS5jdHJsS2V5fHxFZS5tZXRhS2V5KT9xZS5wdXNoKCJjb250cm9sL21ldGEiKTooRWUuY3RybEtleSYmcWUucHVzaCgiY29udHJvbCIpLEVlLm1ldGFLZXkmJnFlLnB1c2goIm1ldGEiKSks''@;'; put 'put ''RWUuc2hpZnRLZXkmJnFlLnB1c2goInNoaWZ0IikscWV9LE09RWU9PntpZighMT09PWwoRWUpfHwhMT09PWEoRWUpfHwyMjk9PT1FZS5rZXlDb2RlfHwic3RyaW5nIiE9dHlwZW9mIEVlLmtleXx8Rm0oRWUpKXJldHVybjtjb25zdCBxZT1BWChFZSk7bGV0IHJ0PVtdO2YocWUpfHwocnQ9dihF''@;'; put 'put ''ZSkpO2NvbnN0IHB0PVtxZV0uY29uY2F0KHJ0KTshaChFZSxwdCkmJih6TygpJiZydC5pbmNsdWRlcygibWV0YSIpfHwhek8oKSYmcnQuaW5jbHVkZXMoImNvbnRyb2wiKSkmJmgoRWUsW3FlXS5jb25jYXQodihFZSwhMCkpKSxkKEVlKX0sRD1FZT0+e2lmKCJzdHJpbmciPT10eXBlb2YgRWUu''@;'; put 'put ''a2V5KXtjb25zdCBCZT1BWChFZSk7ZihCZSkmJmlULnByZXNzKEJlKX19LFo9RWU9PntpZigic3RyaW5nIj09dHlwZW9mIEVlLmtleSl7Y29uc3QgQmU9QVgoRWUpO2YoQmUpJiZpVC5yZWxlYXNlKEJlKX19LHJlPSgpPT57aVQucmVsZWFzZUFsbCgpfTtyZXR1cm57bW91bnQ6KCk9PntsZXQg''@;'; put 'put ''RWU9Yztmb3IoTlArPTE7RWU7KTE9PT1OUCYmKEVlLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIixEKSxhVC5wdXNoKHtldmVudDoia2V5ZG93biIsbGlzdGVuZXI6RH0pLEVlLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5hZGRFdmVudExpc3Rl''@;'; put 'put ''bmVyKCJrZXl1cCIsWiksYVQucHVzaCh7ZXZlbnQ6ImtleXVwIixsaXN0ZW5lcjpafSkpLEVlLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIixNKSxFZS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIscmUp''@;'; put 'put ''LEVlPUI3KEVlKX0sdW5tb3VudDooKT0+e2xldCBFZT1jO2ZvcihOUC09MTtFZTspe2lmKDA9PT1OUCl7Zm9yKGxldCBCZT0wO0JlPGFULmxlbmd0aDtCZSsrKXtjb25zdHtldmVudDpxZSxsaXN0ZW5lcjpydH09YVRbQmVdO0VlLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5yZW1vdmVFdmVu''@;'; put 'put ''dExpc3RlbmVyKHFlLHJ0KX1hVC5sZW5ndGg9MH1FZS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsTSksRWUuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImJsdXIiLHJlKSxFZT1CNyhFZSl9fSxpc1By''@;'; put 'put ''ZXNzZWQ6RWU9PmlULmlzUHJlc3NlZChFZSkscmVsZWFzZVByZXNzZWRLZXlzOigpPT5pVC5yZWxlYXNlQWxsKCl9fShsLGEsZCxoLGJlKTtyZXR1cm4gRWUubW91bnQoKSx7YWRkQ29udGV4dDpCZT0+e2NvbnN0IHFlPShjPT57Y29uc3QgbD1KTyh7ZXJyb3JJZEV4aXN0czpEPT5gVGhlICIk''@;'; put 'put ''e0R9IiBzaG9ydGN1dCBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQgaW4gdGhlICIke2N9IiBjb250ZXh0LmB9KSxhPWZ1bmN0aW9uKCl7bGV0e2tleXM6RCxjYWxsYmFjazpaLGdyb3VwOnJlLHJ1bk9ubHlJZjpjZT0oKCk9PiEwKSxjYXB0dXJlQ3RybDpiZT0hMSxwcmV2ZW50RGVmYXVsdDpFZT0h''@;'; put 'put ''MCxzdG9wUHJvcGFnYXRpb246QmU9ITEscmVsYXRpdmVUb0dyb3VwOnFlLHBvc2l0aW9uOnJ0LGZvcndhcmRUb0NvbnRleHQ6cHR9PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fTtpZihfYyhyZSkpdGhyb3cgbmV3IEVycm9yKCJZb3Ug''@;'; put 'put ''bmVlZCB0byBkZWZpbmUgdGhlIHNob3J0Y3V0J3MgZ3JvdXAuIik7aWYoITE9PT1tbChaKSl0aHJvdyBuZXcgRXJyb3IoIlRoZSBzaG9ydGN1dCdzIGNhbGxiYWNrIG5lZWRzIHRvIGJlIGEgZnVuY3Rpb24uIik7aWYoITE9PT1BcnJheS5pc0FycmF5KEQpKXRocm93IG5ldyBFcnJvcihnbGBQ''@;'; put 'put ''YXNzIHRoZSBzaG9ydGN1dFwncyBrZXlzIGFzIGFuIGFycmF5IG9mIGFycmF5cyxceDIwCiAgICAgIHVzaW5nIHRoZSBLZXlib2FyZEV2ZW50LmtleSBwcm9wZXJ0aWVzOlx4MjAKICAgICAgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0tleWJvYXJk''@;'; put 'put ''RXZlbnQva2V5L0tleV9WYWx1ZXMuYCk7Y29uc3QgZHQ9e2NhbGxiYWNrOlosZ3JvdXA6cmUscnVuT25seUlmOmNlLGNhcHR1cmVDdHJsOmJlLHByZXZlbnREZWZhdWx0OkVlLHN0b3BQcm9wYWdhdGlvbjpCZX07UGEocWUpJiYoZHQucmVsYXRpdmVUb0dyb3VwPXFlLGR0LnBvc2l0aW9uPXJ0''@;'; put 'put ''KSx3cGUocHQpJiYoZHQuZm9yd2FyZFRvQ29udGV4dD1wdCksRC5mb3JFYWNoKEp0PT57Y29uc3Qgdm49SFAoSnQpO2lmKGwuaGFzSXRlbSh2bikpe2NvbnN0IHRuPWwuZ2V0SXRlbSh2bik7bGV0IE1uPXRuLmZpbmRJbmRleChDcj0+Q3IuZ3JvdXA9PT1xZSk7LTEhPT1Nbj8iYmVmb3JlIj09''@;'; put 'put ''PXJ0P01uLT0xOk1uKz0xOk1uPXRuLmxlbmd0aCx0bi5zcGxpY2UoTW4sMCxkdCl9ZWxzZSBsLmFkZEl0ZW0odm4sW2R0XSl9KX0saD1EPT57Y29uc3QgWj1IUChEKTtsLnJlbW92ZUl0ZW0oWil9O3JldHVybntfX2tpbmRPZjpfcGUsYWRkU2hvcnRjdXQ6YSxhZGRTaG9ydGN1dHM6ZnVuY3Rp''@;'; put 'put ''b24oRCl7bGV0IFo9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9O0QuZm9yRWFjaChyZT0+e1hvKFosKGNlLGJlKT0+eyExPT09T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHJlLGJlKSYmKHJlW2JlXT1aW2JlXSl9''@;'; put 'put ''KSxhKHJlKX0pfSxnZXRTaG9ydGN1dHM6RD0+e2NvbnN0IFo9SFAoRCkscmU9bC5nZXRJdGVtKFopO3JldHVybiBQYShyZSk/cmUuc2xpY2UoKTpbXX0saGFzU2hvcnRjdXQ6RD0+e2NvbnN0IFo9SFAoRCk7cmV0dXJuIGwuaGFzSXRlbShaKX0scmVtb3ZlU2hvcnRjdXRzQnlLZXlzOmgscmVt''@;'; put 'put ''b3ZlU2hvcnRjdXRzQnlHcm91cDpEPT57bC5nZXRJdGVtcygpLmZvckVhY2gocmU9PntsZXRbY2UsYmVdPXJlO2NvbnN0IEVlPWJlLmZpbHRlcihCZT0+QmUuZ3JvdXAhPT1EKTswPT09RWUubGVuZ3RoP2goKGM9PmMuc3BsaXQoIisiKSkoY2UpKTooYmUubGVuZ3RoPTAsYmUucHVzaCguLi5F''@;'; put 'put ''ZSkpfSl9fX0pKEJlKTtyZXR1cm4gZi5hZGRJdGVtKEJlLHFlKSxxZX0sZ2V0QWN0aXZlQ29udGV4dE5hbWU6RCxnZXRDb250ZXh0Olosc2V0QWN0aXZlQ29udGV4dE5hbWU6QmU9PntpZighZi5oYXNJdGVtKEJlKSl0aHJvdyBuZXcgRXJyb3IoZ2xgWW91J3ZlIHRyaWVkIHRvIGFjdGl2YXRl''@;'; put 'put ''IHRoZSAiJHtCZX0iIHNob3J0Y3V0IGNvbnRleHRceDIwCiAgICAgICAgdGhhdCBkb2VzIG5vdCBleGlzdC4gQmVmb3JlIGFjdGl2YXRpb24sIHJlZ2lzdGVyIHRoZSBjb250ZXh0IHVzaW5nIHRoZSAiYWRkQ29udGV4dCIgbWV0aG9kLmApO3Y9QmV9LGlzQ3RybFByZXNzZWQ6KCk9PiFjZSYm''@;'; put 'put ''KEVlLmlzUHJlc3NlZCgiY29udHJvbCIpfHxFZS5pc1ByZXNzZWQoIm1ldGEiKSkscmVsZWFzZVByZXNzZWRLZXlzOigpPT5FZS5yZWxlYXNlUHJlc3NlZEtleXMoKSxkZXN0cm95OigpPT5FZS51bm1vdW50KCl9fSxYcnQ9e25hbWU6ImVkaXRvckNsb3NlQW5kU2F2ZSIsY2FsbGJhY2soYyl7''@;'; put 'put ''Yy5fZ2V0RWRpdG9yTWFuYWdlcigpLmNsb3NlRWRpdG9yQW5kU2F2ZUNoYW5nZXMoKX19LENwZT17X2hvb2tzU3RvcmFnZTpPYmplY3QuY3JlYXRlKG51bGwpLGFkZEhvb2soYyxsKXtyZXR1cm4gdGhpcy5faG9va3NTdG9yYWdlW2NdfHwodGhpcy5faG9va3NTdG9yYWdlW2NdPVtdKSx0aGlz''@;'; put 'put ''LmhvdC5hZGRIb29rKGMsbCksdGhpcy5faG9va3NTdG9yYWdlW2NdLnB1c2gobCksdGhpc30scmVtb3ZlSG9va3NCeUtleShjKXtZbih0aGlzLl9ob29rc1N0b3JhZ2VbY118fFtdLGw9Pnt0aGlzLmhvdC5yZW1vdmVIb29rKGMsbCl9KX0sY2xlYXJIb29rcygpe1hvKHRoaXMuX2hvb2tzU3Rv''@;'; put 'put ''cmFnZSwoYyxsKT0+dGhpcy5yZW1vdmVIb29rc0J5S2V5KGwpKSx0aGlzLl9ob29rc1N0b3JhZ2U9e319fTtUcChDcGUsIk1JWElOX05BTUUiLCJob29rc1JlZlJlZ2lzdGVyZXIiLHt3cml0YWJsZTohMSxlbnVtZXJhYmxlOiExfSk7Y29uc3QgUXJ0PUNwZTtmdW5jdGlvbiBkMyhjLGwsYSl7''@;'; put 'put ''cmV0dXJuKGw9ZnVuY3Rpb24gZWl0KGMpe3ZhciBsPWZ1bmN0aW9uIHRpdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVj''@;'; put 'put ''dCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBs''@;'; put 'put ''P2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y29uc3QgbHU9T2JqZWN0LmZyZWV6ZSh7VklSR0lOOiJTVEFURV9WSVJHSU4iLEVESVRJTkc6IlNUQVRF''@;'; put 'put ''X0VESVRJTkciLFdBSVRJTkc6IlNUQVRFX1dBSVRJTkciLEZJTklTSEVEOiJTVEFURV9GSU5JU0hFRCJ9KTtjbGFzcyBrX3tzdGF0aWMgZ2V0IEVESVRPUl9UWVBFKCl7cmV0dXJuImJhc2UifWNvbnN0cnVjdG9yKGwpe2QzKHRoaXMsImhvdCIsdm9pZCAwKSxkMyh0aGlzLCJzdGF0ZSIsbHUu''@;'; put 'put ''VklSR0lOKSxkMyh0aGlzLCJfb3BlbmVkIiwhMSksZDModGhpcywiX2Z1bGxFZGl0TW9kZSIsITEpLGQzKHRoaXMsIl9jbG9zZUNhbGxiYWNrIixudWxsKSxkMyh0aGlzLCJURCIsbnVsbCksZDModGhpcywicm93IixudWxsKSxkMyh0aGlzLCJjb2wiLG51bGwpLGQzKHRoaXMsInByb3AiLG51''@;'; put 'put ''bGwpLGQzKHRoaXMsIm9yaWdpbmFsVmFsdWUiLG51bGwpLGQzKHRoaXMsImNlbGxQcm9wZXJ0aWVzIixudWxsKSx0aGlzLmhvdD1sLHRoaXMuaW5pdCgpfV9maXJlQ2FsbGJhY2tzKGwpe3RoaXMuX2Nsb3NlQ2FsbGJhY2smJih0aGlzLl9jbG9zZUNhbGxiYWNrKGwpLHRoaXMuX2Nsb3NlQ2Fs''@;'; put 'put ''bGJhY2s9bnVsbCl9aW5pdCgpe31nZXRWYWx1ZSgpe3Rocm93IEVycm9yKCJFZGl0b3IgZ2V0VmFsdWUoKSBtZXRob2QgdW5pbXBsZW1lbnRlZCIpfXNldFZhbHVlKCl7dGhyb3cgRXJyb3IoIkVkaXRvciBzZXRWYWx1ZSgpIG1ldGhvZCB1bmltcGxlbWVudGVkIil9b3Blbigpe3Rocm93IEVy''@;'; put 'put ''cm9yKCJFZGl0b3Igb3BlbigpIG1ldGhvZCB1bmltcGxlbWVudGVkIil9Y2xvc2UoKXt0aHJvdyBFcnJvcigiRWRpdG9yIGNsb3NlKCkgbWV0aG9kIHVuaW1wbGVtZW50ZWQiKX1wcmVwYXJlKGwsYSxkLGgsZix2KXt0aGlzLlREPWgsdGhpcy5yb3c9bCx0aGlzLmNvbD1hLHRoaXMucHJvcD1k''@;'; put 'put ''LHRoaXMub3JpZ2luYWxWYWx1ZT1mLHRoaXMuY2VsbFByb3BlcnRpZXM9dix0aGlzLnN0YXRlPXRoaXMuaXNPcGVuZWQoKT90aGlzLnN0YXRlOmx1LlZJUkdJTn1leHRlbmQoKXtyZXR1cm4gY2xhc3MgZXh0ZW5kcyB0aGlzLmNvbnN0cnVjdG9ye319c2F2ZVZhbHVlKGwsYSl7bGV0IGQsaCxm''@;'; put 'put ''LHY7aWYoYSl7Y29uc3QgRD10aGlzLmhvdC5nZXRTZWxlY3RlZExhc3QoKTtkPU1hdGgubWF4KE1hdGgubWluKERbMF0sRFsyXSksMCksaD1NYXRoLm1heChNYXRoLm1pbihEWzFdLERbM10pLDApLGY9TWF0aC5tYXgoRFswXSxEWzJdKSx2PU1hdGgubWF4KERbMV0sRFszXSl9ZWxzZVtkLGgs''@;'; put 'put ''Zix2XT1bdGhpcy5yb3csdGhpcy5jb2wsbnVsbCxudWxsXTtjb25zdCBNPXRoaXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlHZXRDZWxsQ29vcmRzIixkLGgsITEsIm1ldGEiKTtBcnJheS5pc0FycmF5KE0pJiYoW2QsaF09TSksdGhpcy5ob3QucG9wdWxhdGVGcm9tQXJyYXkoZCxoLGwsZix2LCJl''@;'; put 'put ''ZGl0Iil9YmVnaW5FZGl0aW5nKGwsYSl7aWYodGhpcy5zdGF0ZSE9PWx1LlZJUkdJTilyZXR1cm47Y29uc3QgZD10aGlzLmhvdCxoPWQucm93SW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleCh0aGlzLnJvdyksZj1kLmNvbHVtbkluZGV4TWFwcGVyLmdldFJlbmRlcmFi''@;'; put 'put ''bGVGcm9tVmlzdWFsSW5kZXgodGhpcy5jb2wpLHY9KCk9PntpZih0aGlzLnN0YXRlPWx1LkVESVRJTkcsdGhpcy5pc0luRnVsbEVkaXRNb2RlKCkpe2NvbnN0IEQ9InN0cmluZyI9PXR5cGVvZiBsP2w6bGModGhpcy5vcmlnaW5hbFZhbHVlKTt0aGlzLnNldFZhbHVlKEQpfXRoaXMub3Blbihh''@;'; put 'put ''KSx0aGlzLl9vcGVuZWQ9ITAsdGhpcy5mb2N1cygpLGQudmlldy5yZW5kZXIoKSxkLnJ1bkhvb2tzKCJhZnRlckJlZ2luRWRpdGluZyIsdGhpcy5yb3csdGhpcy5jb2wpfTt0aGlzLmhvdC5hZGRIb29rT25jZSgiYWZ0ZXJTY3JvbGwiLHYpLGQudmlldy5zY3JvbGxWaWV3cG9ydChkLl9jcmVh''@;'; put 'put ''dGVDZWxsQ29vcmRzKGgsZikpfHwodGhpcy5ob3QucmVtb3ZlSG9vaygiYWZ0ZXJTY3JvbGwiLHYpLHYoKSl9ZmluaXNoRWRpdGluZyhsLGEsZCl7bGV0IGg7aWYoZCl7Y29uc3QgZj10aGlzLl9jbG9zZUNhbGxiYWNrO3RoaXMuX2Nsb3NlQ2FsbGJhY2s9dj0+e2YmJmYodiksZCh2KSx0aGlz''@;'; put 'put ''LmhvdC52aWV3LnJlbmRlcigpfX1pZighdGhpcy5pc1dhaXRpbmcoKSl7aWYodGhpcy5zdGF0ZT09PWx1LlZJUkdJTilyZXR1cm4gdm9pZCB0aGlzLmhvdC5fcmVnaXN0ZXJUaW1lb3V0KCgpPT57dGhpcy5fZmlyZUNhbGxiYWNrcyghMCl9KTtpZih0aGlzLnN0YXRlPT09bHUuRURJVElORyl7''@;'; put 'put ''aWYobClyZXR1cm4gdGhpcy5jYW5jZWxDaGFuZ2VzKCksdm9pZCB0aGlzLmhvdC52aWV3LnJlbmRlcigpO2NvbnN0IGY9dGhpcy5nZXRWYWx1ZSgpO2g9dGhpcy5jZWxsUHJvcGVydGllcy50cmltV2hpdGVzcGFjZT9bWyJzdHJpbmciPT10eXBlb2YgZj9TdHJpbmcucHJvdG90eXBlLnRyaW0u''@;'; put 'put ''Y2FsbChmfHwiIik6Zl1dOltbZl1dLHRoaXMuc3RhdGU9bHUuV0FJVElORyx0aGlzLnNhdmVWYWx1ZShoLGEpLHRoaXMuaG90LmdldENlbGxWYWxpZGF0b3IodGhpcy5jZWxsUHJvcGVydGllcyk/dGhpcy5ob3QuYWRkSG9va09uY2UoInBvc3RBZnRlclZhbGlkYXRlIix2PT57dGhpcy5zdGF0''@;'; put 'put ''ZT1sdS5GSU5JU0hFRCx0aGlzLmRpc2NhcmRFZGl0b3Iodil9KToodGhpcy5zdGF0ZT1sdS5GSU5JU0hFRCx0aGlzLmRpc2NhcmRFZGl0b3IoITApKX19fWNhbmNlbENoYW5nZXMoKXt0aGlzLnN0YXRlPWx1LkZJTklTSEVELHRoaXMuZGlzY2FyZEVkaXRvcigpfWRpc2NhcmRFZGl0b3IobCl7''@;'; put 'put ''dGhpcy5zdGF0ZT09PWx1LkZJTklTSEVEJiYoITE9PT1sJiYhMCE9PXRoaXMuY2VsbFByb3BlcnRpZXMuYWxsb3dJbnZhbGlkPyh0aGlzLmhvdC5zZWxlY3RDZWxsKHRoaXMucm93LHRoaXMuY29sKSx0aGlzLmZvY3VzKCksdGhpcy5zdGF0ZT1sdS5FRElUSU5HLHRoaXMuX2ZpcmVDYWxsYmFj''@;'; put 'put ''a3MoITEpKToodGhpcy5jbG9zZSgpLHRoaXMuX29wZW5lZD0hMSx0aGlzLl9mdWxsRWRpdE1vZGU9ITEsdGhpcy5zdGF0ZT1sdS5WSVJHSU4sdGhpcy5fZmlyZUNhbGxiYWNrcyghMCksdGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuc2V0QWN0aXZlQ29udGV4dE5hbWUoImdyaWQiKSkp''@;'; put 'put ''fWVuYWJsZUZ1bGxFZGl0TW9kZSgpe3RoaXMuX2Z1bGxFZGl0TW9kZT0hMH1pc0luRnVsbEVkaXRNb2RlKCl7cmV0dXJuIHRoaXMuX2Z1bGxFZGl0TW9kZX1pc09wZW5lZCgpe3JldHVybiB0aGlzLl9vcGVuZWR9aXNXYWl0aW5nKCl7cmV0dXJuIHRoaXMuc3RhdGU9PT1sdS5XQUlUSU5HfWdl''@;'; put 'put ''dEVkaXRlZENlbGxSZWN0KCl7dmFyIGw7Y29uc3QgYT10aGlzLmdldEVkaXRlZENlbGwoKTtpZighYSlyZXR1cm47Y29uc3R7d3RPdmVybGF5czpkLHd0Vmlld3BvcnQ6aH09dGhpcy5ob3Qudmlldy5fd3QsZj10aGlzLmhvdC5yb290V2luZG93LHY9VTAoYSksTT1zdShhKSxEPVUwKHRoaXMu''@;'; put 'put ''aG90LnJvb3RFbGVtZW50KSxaPXN1KHRoaXMuaG90LnJvb3RFbGVtZW50KSxyZT1kLnRvcE92ZXJsYXkuaG9sZGVyLGNlPWQuaW5saW5lU3RhcnRPdmVybGF5LmhvbGRlcixiZT1yZSE9PWY/cmUuc2Nyb2xsVG9wOjAsRWU9Y2UhPT1mP2NlLnNjcm9sbExlZnQ6MCxCZT1mLmlubmVyV2lkdGgt''@;'; put 'put ''RC5sZWZ0LVose3d0VGFibGU6cWV9PW51bGwhPT0obD1kLmdldFBhcmVudE92ZXJsYXkoYSkpJiZ2b2lkIDAhPT1sP2w6dGhpcy5ob3Qudmlldy5fd3QscnQ9cWUubmFtZSxwdD1bIm1hc3RlciIsImlubGluZV9zdGFydCJdLmluY2x1ZGVzKHJ0KT9iZTowLGR0PVsibWFzdGVyIiwidG9wIiwi''@;'; put 'put ''Ym90dG9tIl0uaW5jbHVkZXMocnQpP0VlOjA7bGV0IHZuPXYudG9wLUQudG9wLSh2LnRvcD09PUQudG9wPzA6MSktcHQsQ249MDtDbj10aGlzLmhvdC5pc1J0bCgpP2YuaW5uZXJXaWR0aC12LmxlZnQtTS1CZS0xK2R0OnYubGVmdC1ELmxlZnQtMS1kdCxbInRvcCIsInRvcF9pbmxpbmVfc3Rh''@;'; put 'put ''cnRfY29ybmVyIl0uaW5jbHVkZXMocnQpJiYodm4rPWQudG9wT3ZlcmxheS5nZXRPdmVybGF5T2Zmc2V0KCkpLFsiaW5saW5lX3N0YXJ0IiwidG9wX2lubGluZV9zdGFydF9jb3JuZXIiXS5pbmNsdWRlcyhydCkmJihDbis9TWF0aC5hYnMoZC5pbmxpbmVTdGFydE92ZXJsYXkuZ2V0T3Zlcmxh''@;'; put 'put ''eU9mZnNldCgpKSk7Y29uc3QgdG49dGhpcy5ob3QuaGFzQ29sSGVhZGVycygpLE1uPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgodGhpcy5yb3cpLENyPXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFs''@;'; put 'put ''SW5kZXgodGhpcy5jb2wpLG1yPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldFJlbmRlcmFibGVJbmRleGVzTGVuZ3RoKCktdGhpcy5ob3Qudmlldy5fd3QuZ2V0U2V0dGluZygiZml4ZWRSb3dzQm90dG9tIik7KHRuJiZNbjw9MHx8TW49PT1tcikmJih2bis9MSksQ3I8PTAmJihDbis9MSk7''@;'; put 'put ''Y29uc3QgR249aC5yb3dzUmVuZGVyQ2FsY3VsYXRvci5zdGFydFBvc2l0aW9uLGFpPWguY29sdW1uc1JlbmRlckNhbGN1bGF0b3Iuc3RhcnRQb3NpdGlvbixfaT1NYXRoLmFicyhkLmlubGluZVN0YXJ0T3ZlcmxheS5nZXRTY3JvbGxQb3NpdGlvbigpKSxPbj1kLnRvcE92ZXJsYXkuZ2V0U2Ny''@;'; put 'put ''b2xsUG9zaXRpb24oKSx6cj1mMCh0aGlzLmhvdC5yb290RG9jdW1lbnQpO2xldCBKbj1hLm9mZnNldFRvcDtpZihbImlubGluZV9zdGFydCIsIm1hc3RlciJdLmluY2x1ZGVzKHJ0KSYmKEpuKz1Hbi1PbiksWyJib3R0b20iLCJib3R0b21faW5saW5lX3N0YXJ0X2Nvcm5lciJdLmluY2x1ZGVz''@;'; put 'put ''KHJ0KSl7Y29uc3R7d3RWaWV3cG9ydDpIcix3dFRhYmxlOnFyfT1kLmJvdHRvbU92ZXJsYXkuY2xvbmU7Sm4rPUhyLmdldFdvcmtzcGFjZUhlaWdodCgpLXFyLmdldEhlaWdodCgpLXpyfWxldCBEcj1hLm9mZnNldExlZnQ7dGhpcy5ob3QuaXNSdGwoKT8oRHI9RHI+PTA/cWUuZ2V0V2lkdGgo''@;'; put 'put ''KS1hLm9mZnNldExlZnQ6TWF0aC5hYnMoRHIpLERyKz1haS1faS1NKTpbInRvcCIsIm1hc3RlciIsImJvdHRvbSJdLmluY2x1ZGVzKHJ0KSYmKERyKz1haS1faSk7Y29uc3QgJHI9Zi5nZXRDb21wdXRlZFN0eWxlKHRoaXMuVEQpLHdpPXRoaXMuaG90LmlzUnRsKCk/ImJvcmRlclJpZ2h0V2lk''@;'; put 'put ''dGgiOiJib3JkZXJMZWZ0V2lkdGgiLGVhPXBhcnNlSW50KCRyW3dpXSwxMCk+MD8wOjEsZmE9cGFyc2VJbnQoJHIuYm9yZGVyVG9wV2lkdGgsMTApPjA/MDoxLHZ0PXN1KGEpK2VhLE50PXh1KGEpK2ZhLEh0PUUkKHJlKT96cjowLEhuPVQkKGNlKT96cjowLHRyPXRoaXMuaG90LnZpZXcubWF4''@;'; put 'put ''aW11bVZpc2libGVFbGVtZW50V2lkdGgoRHIpLUh0K2VhO3JldHVybnt0b3A6dm4sc3RhcnQ6Q24saGVpZ2h0Ok50LG1heEhlaWdodDpNYXRoLm1heCh0aGlzLmhvdC52aWV3Lm1heGltdW1WaXNpYmxlRWxlbWVudEhlaWdodChKbiktSG4rZmEsdGhpcy5ob3Qudmlldy5nZXREZWZhdWx0Um93''@;'; put 'put ''SGVpZ2h0KCkpLHdpZHRoOnZ0LG1heFdpZHRoOnRyfX1nZXRFZGl0ZWRDZWxsc0xheWVyQ2xhc3MoKXtzd2l0Y2godGhpcy5jaGVja0VkaXRvclNlY3Rpb24oKSl7Y2FzZSJpbmxpbmUtc3RhcnQiOnJldHVybiJodF9jbG9uZV9sZWZ0IGh0X2Nsb25lX2lubGluZV9zdGFydCI7Y2FzZSJib3R0''@;'; put 'put ''b20iOnJldHVybiJodF9jbG9uZV9ib3R0b20iO2Nhc2UiYm90dG9tLWlubGluZS1zdGFydC1jb3JuZXIiOnJldHVybiJodF9jbG9uZV9ib3R0b21fbGVmdF9jb3JuZXIgaHRfY2xvbmVfYm90dG9tX2lubGluZV9zdGFydF9jb3JuZXIiO2Nhc2UidG9wIjpyZXR1cm4iaHRfY2xvbmVfdG9wIjtj''@;'; put 'put ''YXNlInRvcC1pbmxpbmUtc3RhcnQtY29ybmVyIjpyZXR1cm4iaHRfY2xvbmVfdG9wX2xlZnRfY29ybmVyIGh0X2Nsb25lX3RvcF9pbmxpbmVfc3RhcnRfY29ybmVyIjtkZWZhdWx0OnJldHVybiJodF9jbG9uZV9tYXN0ZXIifX1nZXRFZGl0ZWRDZWxsKCl7cmV0dXJuIHRoaXMuaG90LmdldENl''@;'; put 'put ''bGwodGhpcy5yb3csdGhpcy5jb2wsITApfWNoZWNrRWRpdG9yU2VjdGlvbigpe2NvbnN0IGw9dGhpcy5ob3QuY291bnRSb3dzKCk7bGV0IGE9IiI7cmV0dXJuIHRoaXMucm93PHRoaXMuaG90LmdldFNldHRpbmdzKCkuZml4ZWRSb3dzVG9wP2E9dGhpcy5jb2w8dGhpcy5ob3QuZ2V0U2V0dGlu''@;'; put 'put ''Z3MoKS5maXhlZENvbHVtbnNTdGFydD8idG9wLWlubGluZS1zdGFydC1jb3JuZXIiOiJ0b3AiOnRoaXMuaG90LmdldFNldHRpbmdzKCkuZml4ZWRSb3dzQm90dG9tJiZ0aGlzLnJvdz49bC10aGlzLmhvdC5nZXRTZXR0aW5ncygpLmZpeGVkUm93c0JvdHRvbT9hPXRoaXMuY29sPHRoaXMuaG90''@;'; put 'put ''LmdldFNldHRpbmdzKCkuZml4ZWRDb2x1bW5zU3RhcnQ/ImJvdHRvbS1pbmxpbmUtc3RhcnQtY29ybmVyIjoiYm90dG9tIjp0aGlzLmNvbDx0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmZpeGVkQ29sdW1uc1N0YXJ0JiYoYT0iaW5saW5lLXN0YXJ0IiksYX19VGwoa18sUXJ0KTtjb25zdCByaXQ9''@;'; put 'put ''e25hbWU6ImVkaXRvckNsb3NlQW5kU2F2ZUJ5QXJyb3dLZXlzIixjYWxsYmFjayhjLGwsYSl7Y29uc3QgZD1jLl9nZXRFZGl0b3JNYW5hZ2VyKCksaD1kLmdldEFjdGl2ZUVkaXRvcigpO2guaXNJbkZ1bGxFZGl0TW9kZSgpJiZoLnN0YXRlPT09bHUuRURJVElOR3x8KGQuY2xvc2VFZGl0b3JB''@;'; put 'put ''bmRTYXZlQ2hhbmdlcygpLGMuZ2V0U2VsZWN0ZWQoKSYmKGEuaW5jbHVkZXMoImFycm93ZG93biIpP2Muc2VsZWN0aW9uLnRyYW5zZm9ybVN0YXJ0KDEsMCk6YS5pbmNsdWRlcygiYXJyb3d1cCIpP2Muc2VsZWN0aW9uLnRyYW5zZm9ybVN0YXJ0KC0xLDApOmEuaW5jbHVkZXMoImFycm93bGVm''@;'; put 'put ''dCIpP2Muc2VsZWN0aW9uLnRyYW5zZm9ybVN0YXJ0KDAsLTEqYy5nZXREaXJlY3Rpb25GYWN0b3IoKSk6YS5pbmNsdWRlcygiYXJyb3dyaWdodCIpJiZjLnNlbGVjdGlvbi50cmFuc2Zvcm1TdGFydCgwLGMuZ2V0RGlyZWN0aW9uRmFjdG9yKCkpKSxsLnByZXZlbnREZWZhdWx0KCkpfX0saWl0''@;'; put 'put ''PXtuYW1lOiJlZGl0b3JDbG9zZUFuZFNhdmVCeUVudGVyIixjYWxsYmFjayhjLGwpe2NvbnN0IGE9Yy5fZ2V0RWRpdG9yTWFuYWdlcigpO2EuY2xvc2VFZGl0b3JBbmRTYXZlQ2hhbmdlcyhsLmN0cmxLZXl8fGwubWV0YUtleSksYS5tb3ZlU2VsZWN0aW9uQWZ0ZXJFbnRlcihsKX19LGFpdD17''@;'; put 'put ''bmFtZToiZWRpdG9yQ2xvc2VXaXRob3V0U2F2aW5nIixjYWxsYmFjayhjKXtjb25zdCBsPWMuX2dldEVkaXRvck1hbmFnZXIoKTtsLmNsb3NlRWRpdG9yQW5kUmVzdG9yZU9yaWdpbmFsVmFsdWUoYy5nZXRTaG9ydGN1dE1hbmFnZXIoKS5pc0N0cmxQcmVzc2VkKCkpLGwuYWN0aXZlRWRpdG9y''@;'; put 'put ''LmZvY3VzKCl9fSxvaXQ9e25hbWU6ImVkaXRvckZhc3RPcGVuIixjYWxsYmFjayhjLGwpe2NvbnN0e2hpZ2hsaWdodDphfT1jLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7YS5pc0hlYWRlcigpfHxjLl9nZXRFZGl0b3JNYW5hZ2VyKCkub3BlbkVkaXRvcihudWxsLGwsITApfX0sc2l0PXtuYW1l''@;'; put 'put ''OiJlZGl0b3JPcGVuIixjYWxsYmFjayhjLGwsYSl7Y29uc3QgZD1jLl9nZXRFZGl0b3JNYW5hZ2VyKCksaD1jLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkse2hpZ2hsaWdodDpmfT1oO2lmKGMuc2VsZWN0aW9uLmlzTXVsdGlwbGUoKSYmIWguaXNIZWFkZXIoKSYmYy5jb3VudFJlbmRlcmVkQ29s''@;'; put 'put ''cygpPjAmJmMuY291bnRSZW5kZXJlZFJvd3MoKT4wKXtjb25zdCB2PWMuZ2V0U2V0dGluZ3MoKSxNPSJmdW5jdGlvbiI9PXR5cGVvZiB2LmVudGVyTW92ZXM/di5lbnRlck1vdmVzKGwpOnYuZW50ZXJNb3ZlczthLmluY2x1ZGVzKCJzaGlmdCIpP2Muc2VsZWN0aW9uLnRyYW5zZm9ybUZvY3Vz''@;'; put 'put ''KC1NLnJvdywtTS5jb2wpOmMuc2VsZWN0aW9uLnRyYW5zZm9ybUZvY3VzKE0ucm93LE0uY29sKX1lbHNlIGYuaXNIZWFkZXIoKXx8KGMuZ2V0U2V0dGluZ3MoKS5lbnRlckJlZ2luc0VkaXRpbmc/ZC5jZWxsUHJvcGVydGllcy5yZWFkT25seT9kLm1vdmVTZWxlY3Rpb25BZnRlckVudGVyKGwp''@;'; put 'put ''OmQub3BlbkVkaXRvcihudWxsLGwsITApOmQubW92ZVNlbGVjdGlvbkFmdGVyRW50ZXIobCksQjIobCkpfX0sY2l0PXtuYW1lOiJleHRlbmRDZWxsc1NlbGVjdGlvbkRvd24iLGNhbGxiYWNrKGMpe2NvbnN0e3NlbGVjdGlvbjpsfT1jLHtoaWdobGlnaHQ6YX09Yy5nZXRTZWxlY3RlZFJhbmdl''@;'; put 'put ''TGFzdCgpOyFsLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpJiYhbC5pc1NlbGVjdGVkQnlDb3JuZXIoKSYmKGEuaXNDZWxsKCl8fGEuaXNIZWFkZXIoKSYmbC5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKSkmJihsLm1hcmtTb3VyY2UoImtleWJvYXJkIiksbC50cmFuc2Zvcm1FbmQoMSwwKSxs''@;'; put 'put ''Lm1hcmtFbmRTb3VyY2UoKSl9fSx1aXQ9e25hbWU6ImV4dGVuZENlbGxzU2VsZWN0aW9uRG93bkJ5Vmlld3BvcnRIZWlnaHQiLGNhbGxiYWNrKGMpe2NvbnN0e3NlbGVjdGlvbjpsLHJvd0luZGV4TWFwcGVyOmF9PWMse3RvOmR9PWMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxoPU1hdGgubWlu''@;'; put 'put ''KGQucm93K2MuY291bnRWaXNpYmxlUm93cygpLGMuY291bnRSb3dzKCktMSksZj1hLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChoLC0xKTtpZihudWxsIT09Zil7Y29uc3Qgdj1jLl9jcmVhdGVDZWxsQ29vcmRzKGYsZC5jb2wpLE09ZC5yb3ctYy5nZXRGaXJzdEZ1bGx5VmlzaWJsZVJvdygp''@;'; put 'put ''LEQ9TWF0aC5taW4odi5yb3ctTSxjLmNvdW50Um93cygpLTEpO2wubWFya1NvdXJjZSgia2V5Ym9hcmQiKSxsLnNldFJhbmdlRW5kKHYpLGwubWFya0VuZFNvdXJjZSgpLGMuc2Nyb2xsVmlld3BvcnRUbyh7cm93OkQsdmVydGljYWxTbmFwOiJ0b3AiLGhvcml6b250YWxTbmFwOiJzdGFydCJ9''@;'; put 'put ''KX19fSxkaXQ9e25hbWU6ImV4dGVuZENlbGxzU2VsZWN0aW9uTGVmdCIsY2FsbGJhY2soYyl7Y29uc3R7c2VsZWN0aW9uOmx9PWMse2hpZ2hsaWdodDphfT1jLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7IWwuaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCkmJiFsLmlzU2VsZWN0ZWRCeUNvcm5lcigp''@;'; put 'put ''JiYoYS5pc0NlbGwoKXx8YS5pc0hlYWRlcigpJiZsLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpKSYmKGwubWFya1NvdXJjZSgia2V5Ym9hcmQiKSxsLnRyYW5zZm9ybUVuZCgwLC0xKmMuZ2V0RGlyZWN0aW9uRmFjdG9yKCkpLGwubWFya0VuZFNvdXJjZSgpKX19LGhpdD17bmFtZToiZXh0''@;'; put 'put ''ZW5kQ2VsbHNTZWxlY3Rpb25SaWdodCIsY2FsbGJhY2soYyl7Y29uc3R7c2VsZWN0aW9uOmx9PWMse2hpZ2hsaWdodDphfT1jLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7IWwuaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCkmJiFsLmlzU2VsZWN0ZWRCeUNvcm5lcigpJiYoYS5pc0NlbGwoKXx8YS5p''@;'; put 'put ''c0hlYWRlcigpJiZsLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpKSYmKGwubWFya1NvdXJjZSgia2V5Ym9hcmQiKSxsLnRyYW5zZm9ybUVuZCgwLGMuZ2V0RGlyZWN0aW9uRmFjdG9yKCkpLGwubWFya0VuZFNvdXJjZSgpKX19LGZpdD17bmFtZToiZXh0ZW5kQ2VsbHNTZWxlY3Rpb25Ub0Nv''@;'; put 'put ''bHVtbnMiLGNhbGxiYWNrKGMpe2NvbnN0e3NlbGVjdGlvbjpsfT1jLHtoaWdobGlnaHQ6YSxmcm9tOmQsdG86aH09Yy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO2wubWFya1NvdXJjZSgia2V5Ym9hcmQiKSxsLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpP2wuc2VsZWN0QWxsKCEwLCEwKTpjLnNl''@;'; put 'put ''bGVjdENvbHVtbnMoZC5jb2wsaC5jb2wsYSksbC5tYXJrRW5kU291cmNlKCl9fSxwaXQ9e25hbWU6ImV4dGVuZENlbGxzU2VsZWN0aW9uVG9Nb3N0Qm90dG9tIixjYWxsYmFjayhjKXtjb25zdHtzZWxlY3Rpb246bCxyb3dJbmRleE1hcHBlcjphfT1jLHtoaWdobGlnaHQ6ZCxmcm9tOmgsdG86''@;'; put 'put ''Zn09Yy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLHY9ZC5pc0hlYWRlcigpJiZsLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpO2lmKGQuaXNDZWxsKCl8fHYpe2NvbnN0IE09YS5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoYy5jb3VudFJvd3MoKS0xLC0xKSxEPWguY2xvbmUoKTtELnJvdz1kLnJv''@;'; put 'put ''dyxsLm1hcmtTb3VyY2UoImtleWJvYXJkIiksbC5zZXRSYW5nZVN0YXJ0KEQsdm9pZCAwLCExLGQuY2xvbmUoKSksdiYmbC5zZWxlY3RlZEJ5Um93SGVhZGVyLmFkZChsLmdldExheWVyTGV2ZWwoKSksbC5zZXRSYW5nZUVuZChjLl9jcmVhdGVDZWxsQ29vcmRzKE0sZi5jb2wpKSxsLm1hcmtF''@;'; put 'put ''bmRTb3VyY2UoKX19fSxnaXQ9e25hbWU6ImV4dGVuZENlbGxzU2VsZWN0aW9uVG9Nb3N0SW5saW5lRW5kIixjYWxsYmFjayhjKXtjb25zdHtzZWxlY3Rpb246bCxjb2x1bW5JbmRleE1hcHBlcjphfT1jLHtoaWdobGlnaHQ6ZCxmcm9tOmgsdG86Zn09Yy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgp''@;'; put 'put ''O2lmKCFsLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpJiYhbC5pc1NlbGVjdGVkQnlDb3JuZXIoKSYmZC5pc0NlbGwoKSl7Y29uc3Qgdj1hLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChjLmNvdW50Q29scygpLTEsLTEpLE09aC5jbG9uZSgpO00uY29sPWQuY29sLGwubWFya1NvdXJjZSgia2V5''@;'; put 'put ''Ym9hcmQiKSxsLnNldFJhbmdlU3RhcnQoTSx2b2lkIDAsITEsZC5jbG9uZSgpKSxsLnNldFJhbmdlRW5kKGMuX2NyZWF0ZUNlbGxDb29yZHMoZi5yb3csdikpLGwubWFya0VuZFNvdXJjZSgpfX19LG1pdD17bmFtZToiZXh0ZW5kQ2VsbHNTZWxlY3Rpb25Ub01vc3RJbmxpbmVTdGFydCIsY2Fs''@;'; put 'put ''bGJhY2soYyl7Y29uc3R7c2VsZWN0aW9uOmwsY29sdW1uSW5kZXhNYXBwZXI6YX09Yyx7aGlnaGxpZ2h0OmQsZnJvbTpoLHRvOmZ9PWMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtpZighbC5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKSYmIWwuaXNTZWxlY3RlZEJ5Q29ybmVyKCkmJmQuaXNDZWxs''@;'; put 'put ''KCkpe2NvbnN0IHY9cGFyc2VJbnQoYy5nZXRTZXR0aW5ncygpLmZpeGVkQ29sdW1uc1N0YXJ0LDEwKSxNPWEuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KHYsMSksRD1oLmNsb25lKCk7RC5jb2w9ZC5jb2wsbC5tYXJrU291cmNlKCJrZXlib2FyZCIpLGwuc2V0UmFuZ2VTdGFydChELHZvaWQg''@;'; put 'put ''MCwhMSxkLmNsb25lKCkpLGwuc2V0UmFuZ2VFbmQoYy5fY3JlYXRlQ2VsbENvb3JkcyhmLnJvdyxNKSksbC5tYXJrRW5kU291cmNlKCl9fX0sdml0PXtuYW1lOiJleHRlbmRDZWxsc1NlbGVjdGlvblRvTW9zdExlZnQiLGNhbGxiYWNrKGMpe2NvbnN0e3NlbGVjdGlvbjpsLGNvbHVtbkluZGV4''@;'; put 'put ''TWFwcGVyOmF9PWMse2hpZ2hsaWdodDpkLGZyb206aCx0bzpmfT1jLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksdj1kLmlzSGVhZGVyKCkmJmwuaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCk7aWYoZC5pc0NlbGwoKXx8dil7Y29uc3QgTT1hLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCguLi5j''@;'; put 'put ''LmlzUnRsKCk/W2MuY291bnRDb2xzKCktMSwtMV06WzAsMV0pLEQ9aC5jbG9uZSgpO0QuY29sPWQuY29sLGwubWFya1NvdXJjZSgia2V5Ym9hcmQiKSxsLnNldFJhbmdlU3RhcnQoRCx2b2lkIDAsITEsZC5jbG9uZSgpKSx2JiZsLnNlbGVjdGVkQnlDb2x1bW5IZWFkZXIuYWRkKGwuZ2V0TGF5''@;'; put 'put ''ZXJMZXZlbCgpKSxsLnNldFJhbmdlRW5kKGMuX2NyZWF0ZUNlbGxDb29yZHMoZi5yb3csTSkpLGwubWFya0VuZFNvdXJjZSgpfX19LGJpdD17bmFtZToiZXh0ZW5kQ2VsbHNTZWxlY3Rpb25Ub01vc3RSaWdodCIsY2FsbGJhY2soYyl7Y29uc3R7c2VsZWN0aW9uOmwsY29sdW1uSW5kZXhNYXBw''@;'; put 'put ''ZXI6YX09Yyx7aGlnaGxpZ2h0OmQsZnJvbTpoLHRvOmZ9PWMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSx2PWQuaXNIZWFkZXIoKSYmbC5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKTtpZihkLmlzQ2VsbCgpfHx2KXtjb25zdCBNPWEuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KC4uLmMuaXNS''@;'; put 'put ''dGwoKT9bMCwxXTpbYy5jb3VudENvbHMoKS0xLC0xXSksRD1oLmNsb25lKCk7RC5jb2w9ZC5jb2wsbC5tYXJrU291cmNlKCJrZXlib2FyZCIpLGwuc2V0UmFuZ2VTdGFydChELHZvaWQgMCwhMSxkLmNsb25lKCkpLHYmJmwuc2VsZWN0ZWRCeUNvbHVtbkhlYWRlci5hZGQobC5nZXRMYXllckxl''@;'; put 'put ''dmVsKCkpLGwuc2V0UmFuZ2VFbmQoYy5fY3JlYXRlQ2VsbENvb3JkcyhmLnJvdyxNKSksbC5tYXJrRW5kU291cmNlKCl9fX0seWl0PXtuYW1lOiJleHRlbmRDZWxsc1NlbGVjdGlvblRvTW9zdFRvcCIsY2FsbGJhY2soYyl7Y29uc3R7c2VsZWN0aW9uOmwscm93SW5kZXhNYXBwZXI6YX09Yyx7''@;'; put 'put ''aGlnaGxpZ2h0OmQsZnJvbTpoLHRvOmZ9PWMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSx2PWQuaXNIZWFkZXIoKSYmbC5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKTtpZihkLmlzQ2VsbCgpfHx2KXtjb25zdCBNPWEuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KDAsMSksRD1oLmNsb25lKCk7RC5y''@;'; put 'put ''b3c9ZC5yb3csbC5tYXJrU291cmNlKCJrZXlib2FyZCIpLGwuc2V0UmFuZ2VTdGFydChELHZvaWQgMCwhMSxkLmNsb25lKCkpLHYmJmwuc2VsZWN0ZWRCeVJvd0hlYWRlci5hZGQobC5nZXRMYXllckxldmVsKCkpLGwuc2V0UmFuZ2VFbmQoYy5fY3JlYXRlQ2VsbENvb3JkcyhNLGYuY29sKSks''@;'; put 'put ''bC5tYXJrRW5kU291cmNlKCl9fX0sX2l0PXtuYW1lOiJleHRlbmRDZWxsc1NlbGVjdGlvblRvUm93cyIsY2FsbGJhY2soYyl7Y29uc3R7c2VsZWN0aW9uOmx9PWMse2hpZ2hsaWdodDphLGZyb206ZCx0bzpofT1jLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7bC5tYXJrU291cmNlKCJrZXlib2Fy''@;'; put 'put ''ZCIpLGwuaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCk/bC5zZWxlY3RBbGwoITAsITApOmMuc2VsZWN0Um93cyhkLnJvdyxoLnJvdyxhKSxsLm1hcmtFbmRTb3VyY2UoKX19LHdpdD17bmFtZToiZXh0ZW5kQ2VsbHNTZWxlY3Rpb25VcCIsY2FsbGJhY2soYyl7Y29uc3R7c2VsZWN0aW9uOmx9''@;'; put 'put ''PWMse2hpZ2hsaWdodDphfT1jLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7IWwuaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCkmJiFsLmlzU2VsZWN0ZWRCeUNvcm5lcigpJiYoYS5pc0NlbGwoKXx8YS5pc0hlYWRlcigpJiZsLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpKSYmKGwubWFya1NvdXJj''@;'; put 'put ''ZSgia2V5Ym9hcmQiKSxsLnRyYW5zZm9ybUVuZCgtMSwwKSxsLm1hcmtFbmRTb3VyY2UoKSl9fSxDaXQ9e25hbWU6ImV4dGVuZENlbGxzU2VsZWN0aW9uVXBCeVZpZXdwb3J0SGVpZ2h0IixjYWxsYmFjayhjKXtjb25zdHtzZWxlY3Rpb246bCxyb3dJbmRleE1hcHBlcjphfT1jLHt0bzpkfT1j''@;'; put 'put ''LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksaD1NYXRoLm1heChkLnJvdy1jLmNvdW50VmlzaWJsZVJvd3MoKSwwKSxmPWEuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGgsMSk7aWYobnVsbCE9PWYpe2NvbnN0IHY9Yy5fY3JlYXRlQ2VsbENvb3JkcyhmLGQuY29sKSxNPWQucm93LWMuZ2V0Rmly''@;'; put 'put ''c3RGdWxseVZpc2libGVSb3coKSxEPU1hdGgubWF4KHYucm93LU0sMCk7bC5tYXJrU291cmNlKCJrZXlib2FyZCIpLGwuc2V0UmFuZ2VFbmQodiksbC5tYXJrRW5kU291cmNlKCksYy5zY3JvbGxWaWV3cG9ydFRvKHtyb3c6RCx2ZXJ0aWNhbFNuYXA6InRvcCIsaG9yaXpvbnRhbFNuYXA6InN0''@;'; put 'put ''YXJ0In0pfX19LE1pdD17bmFtZToibW92ZUNlbGxTZWxlY3Rpb25Eb3duIixjYWxsYmFjayhjKXtsZXR7c2VsZWN0aW9uOmx9PWM7bC5tYXJrU291cmNlKCJrZXlib2FyZCIpLGwudHJhbnNmb3JtU3RhcnQoMSwwKSxsLm1hcmtFbmRTb3VyY2UoKX19LHhpdD17bmFtZToibW92ZUNlbGxTZWxl''@;'; put 'put ''Y3Rpb25Eb3duQnlWaWV3cG9ydEhlaWdodCIsY2FsbGJhY2soYyl7Y29uc3R7c2VsZWN0aW9uOmx9PWMse25hdmlnYWJsZUhlYWRlcnM6YX09Yy5nZXRTZXR0aW5ncygpLGQ9YT9jLmNvdW50Q29sSGVhZGVycygpOjAse3JvdzpofT1jLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkuaGlnaGxpZ2h0''@;'; put 'put ''O2xldCBmPWMuY291bnRWaXNpYmxlUm93cygpK2Q7Zj0wPT09Zj8xOmYsaD09PWMuY291bnRSb3dzKCktMT9mPTE6aCtmPmMuY291bnRSb3dzKCkmJihmPWMuY291bnRSb3dzKCktaC0xKSxsLm1hcmtTb3VyY2UoImtleWJvYXJkIiksbC50cmFuc2Zvcm1TdGFydChmLDApLGwubWFya0VuZFNv''@;'; put 'put ''dXJjZSgpLGMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5oaWdobGlnaHQucm93PDAmJmMuc2Nyb2xsVmlld3BvcnRUbyh7cm93OjB9KX19LEVpdD17bmFtZToibW92ZUNlbGxTZWxlY3Rpb25JbmxpbmVFbmQiLGNhbGxiYWNrKGMsbCl7Y29uc3R7c2VsZWN0aW9uOmF9PWMsZD1jLmdldFNldHRp''@;'; put 'put ''bmdzKCksaD1jLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksZj0iZnVuY3Rpb24iPT10eXBlb2YgZC50YWJNb3Zlcz9kLnRhYk1vdmVzKGwpOmQudGFiTW92ZXM7YS5tYXJrU291cmNlKCJrZXlib2FyZCIpLGEuaXNNdWx0aXBsZSgpJiYhaC5pc0hlYWRlcigpJiZjLmNvdW50UmVuZGVyZWRDb2xz''@;'; put 'put ''KCk+MCYmYy5jb3VudFJlbmRlcmVkUm93cygpPjA/YS50cmFuc2Zvcm1Gb2N1cygtZi5yb3csLWYuY29sKTphLnRyYW5zZm9ybVN0YXJ0KC1mLnJvdywtZi5jb2wpLGEubWFya0VuZFNvdXJjZSgpfX0sVGl0PXtuYW1lOiJtb3ZlQ2VsbFNlbGVjdGlvbklubGluZVN0YXJ0IixjYWxsYmFjayhj''@;'; put 'put ''LGwpe2NvbnN0e3NlbGVjdGlvbjphfT1jLGQ9Yy5nZXRTZXR0aW5ncygpLGg9Yy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLGY9ImZ1bmN0aW9uIj09dHlwZW9mIGQudGFiTW92ZXM/ZC50YWJNb3ZlcyhsKTpkLnRhYk1vdmVzO2EubWFya1NvdXJjZSgia2V5Ym9hcmQiKSxhLmlzTXVsdGlwbGUo''@;'; put 'put ''KSYmIWguaXNIZWFkZXIoKSYmYy5jb3VudFJlbmRlcmVkQ29scygpPjAmJmMuY291bnRSZW5kZXJlZFJvd3MoKT4wP2EudHJhbnNmb3JtRm9jdXMoZi5yb3csZi5jb2wpOmEudHJhbnNmb3JtU3RhcnQoZi5yb3csZi5jb2wpLGEubWFya0VuZFNvdXJjZSgpfX0sQWl0PXtuYW1lOiJtb3ZlQ2Vs''@;'; put 'put ''bFNlbGVjdGlvbkxlZnQiLGNhbGxiYWNrKGMpe2NvbnN0e3NlbGVjdGlvbjpsfT1jO2wubWFya1NvdXJjZSgia2V5Ym9hcmQiKSxsLnRyYW5zZm9ybVN0YXJ0KDAsLTEqYy5nZXREaXJlY3Rpb25GYWN0b3IoKSksbC5tYXJrRW5kU291cmNlKCl9fSxraXQ9e25hbWU6Im1vdmVDZWxsU2VsZWN0''@;'; put 'put ''aW9uUmlnaHQiLGNhbGxiYWNrKGMpe2NvbnN0e3NlbGVjdGlvbjpsfT1jO2wubWFya1NvdXJjZSgia2V5Ym9hcmQiKSxsLnRyYW5zZm9ybVN0YXJ0KDAsYy5nZXREaXJlY3Rpb25GYWN0b3IoKSksbC5tYXJrRW5kU291cmNlKCl9fSxEaXQ9e25hbWU6Im1vdmVDZWxsU2VsZWN0aW9uVG9Nb3N0''@;'; put 'put ''Qm90dG9tIixjYWxsYmFjayhjKXtjb25zdHtzZWxlY3Rpb246bH09Yyx7Y29sOmF9PWMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5oaWdobGlnaHQ7bGV0IGQ9Yy5yb3dJbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoYy5jb3VudFJvd3MoKS0xLC0xKTtudWxsPT09ZCYmKGQ9''@;'; put 'put ''LTEpLGwuc2V0UmFuZ2VTdGFydChjLl9jcmVhdGVDZWxsQ29vcmRzKGQsYSkpfX0sSWl0PXtuYW1lOiJtb3ZlQ2VsbFNlbGVjdGlvblRvTW9zdEJvdHRvbUlubGluZUVuZCIsY2FsbGJhY2soYyl7Y29uc3R7c2VsZWN0aW9uOmwscm93SW5kZXhNYXBwZXI6YSxjb2x1bW5JbmRleE1hcHBlcjpk''@;'; put 'put ''fT1jLGg9cGFyc2VJbnQoYy5nZXRTZXR0aW5ncygpLmZpeGVkUm93c0JvdHRvbSwxMCksZj1hLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChjLmNvdW50Um93cygpLWgtMSwtMSksdj1kLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChjLmNvdW50Q29scygpLTEsLTEpO2wubWFya1NvdXJjZSgi''@;'; put 'put ''a2V5Ym9hcmQiKSxsLnNldFJhbmdlU3RhcnQoYy5fY3JlYXRlQ2VsbENvb3JkcyhmLHYpKSxsLm1hcmtFbmRTb3VyY2UoKX19LFJpdD17bmFtZToibW92ZUNlbGxTZWxlY3Rpb25Ub01vc3RJbmxpbmVFbmQiLGNhbGxiYWNrKGMpe2NvbnN0e3NlbGVjdGlvbjpsLGNvbHVtbkluZGV4TWFwcGVy''@;'; put 'put ''OmF9PWM7bC5tYXJrU291cmNlKCJrZXlib2FyZCIpLGwuc2V0UmFuZ2VTdGFydChjLl9jcmVhdGVDZWxsQ29vcmRzKGMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5oaWdobGlnaHQucm93LGEuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGMuY291bnRDb2xzKCktMSwtMSkpKSxsLm1hcmtFbmRT''@;'; put 'put ''b3VyY2UoKX19LExpdD17bmFtZToibW92ZUNlbGxTZWxlY3Rpb25Ub01vc3RJbmxpbmVTdGFydCIsY2FsbGJhY2soYyl7Y29uc3R7c2VsZWN0aW9uOmwsY29sdW1uSW5kZXhNYXBwZXI6YX09YyxkPXBhcnNlSW50KGMuZ2V0U2V0dGluZ3MoKS5maXhlZENvbHVtbnNTdGFydCwxMCksaD1jLmdl''@;'; put 'put ''dFNlbGVjdGVkUmFuZ2VMYXN0KCkuaGlnaGxpZ2h0LnJvdyxmPWEuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGQsMSk7bC5tYXJrU291cmNlKCJrZXlib2FyZCIpLGwuc2V0UmFuZ2VTdGFydChjLl9jcmVhdGVDZWxsQ29vcmRzKGgsZikpLGwubWFya0VuZFNvdXJjZSgpfX0sT2l0PXtuYW1l''@;'; put 'put ''OiJtb3ZlQ2VsbFNlbGVjdGlvblRvTW9zdExlZnQiLGNhbGxiYWNrKGMpe2NvbnN0e3NlbGVjdGlvbjpsLGNvbHVtbkluZGV4TWFwcGVyOmF9PWMsZD1jLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkuaGlnaGxpZ2h0LnJvdztsZXQgaD1hLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCguLi5jLmlz''@;'; put 'put ''UnRsKCk/W2MuY291bnRDb2xzKCktMSwtMV06WzAsMV0pO251bGw9PT1oJiYoaD1jLmlzUnRsKCk/LTE6LWMuY291bnRSb3dIZWFkZXJzKCkpLGwubWFya1NvdXJjZSgia2V5Ym9hcmQiKSxsLnNldFJhbmdlU3RhcnQoYy5fY3JlYXRlQ2VsbENvb3JkcyhkLGgpKSxsLm1hcmtFbmRTb3VyY2Uo''@;'; put 'put ''KX19LFBpdD17bmFtZToibW92ZUNlbGxTZWxlY3Rpb25Ub01vc3RSaWdodCIsY2FsbGJhY2soYyl7Y29uc3R7c2VsZWN0aW9uOmwsY29sdW1uSW5kZXhNYXBwZXI6YX09Yyx7cm93OmR9PWMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5oaWdobGlnaHQ7bGV0IGg9YS5nZXROZWFyZXN0Tm90SGlk''@;'; put 'put ''ZGVuSW5kZXgoLi4uYy5pc1J0bCgpP1swLDFdOltjLmNvdW50Q29scygpLTEsLTFdKTtudWxsPT09aCYmKGg9Yy5pc1J0bCgpPy1jLmNvdW50Um93SGVhZGVycygpOi0xKSxsLm1hcmtTb3VyY2UoImtleWJvYXJkIiksbC5zZXRSYW5nZVN0YXJ0KGMuX2NyZWF0ZUNlbGxDb29yZHMoZCxoKSks''@;'; put 'put ''bC5tYXJrRW5kU291cmNlKCl9fSxGaXQ9e25hbWU6Im1vdmVDZWxsU2VsZWN0aW9uVG9Nb3N0VG9wIixjYWxsYmFjayhjKXtjb25zdHtzZWxlY3Rpb246bH09Yyx7Y29sOmF9PWMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5oaWdobGlnaHQ7bGV0IGQ9Yy5yb3dJbmRleE1hcHBlci5nZXROZWFy''@;'; put 'put ''ZXN0Tm90SGlkZGVuSW5kZXgoMCwxKTtudWxsPT09ZCYmKGQ9LWMuY291bnRDb2xIZWFkZXJzKCkpLGwubWFya1NvdXJjZSgia2V5Ym9hcmQiKSxsLnNldFJhbmdlU3RhcnQoYy5fY3JlYXRlQ2VsbENvb3JkcyhkLGEpKSxsLm1hcmtFbmRTb3VyY2UoKX19LEhpdD17bmFtZToibW92ZUNlbGxT''@;'; put 'put ''ZWxlY3Rpb25Ub01vc3RUb3BJbmxpbmVTdGFydCIsY2FsbGJhY2soYyl7Y29uc3R7c2VsZWN0aW9uOmwscm93SW5kZXhNYXBwZXI6YSxjb2x1bW5JbmRleE1hcHBlcjpkfT1jLGg9cGFyc2VJbnQoYy5nZXRTZXR0aW5ncygpLmZpeGVkUm93c1RvcCwxMCksZj1wYXJzZUludChjLmdldFNldHRp''@;'; put 'put ''bmdzKCkuZml4ZWRDb2x1bW5zU3RhcnQsMTApLHY9YS5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoaCwxKSxNPWQuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGYsMSk7bC5tYXJrU291cmNlKCJrZXlib2FyZCIpLGwuc2V0UmFuZ2VTdGFydChjLl9jcmVhdGVDZWxsQ29vcmRzKHYsTSkpLGwu''@;'; put 'put ''bWFya0VuZFNvdXJjZSgpfX0sTml0PXtuYW1lOiJtb3ZlQ2VsbFNlbGVjdGlvblVwIixjYWxsYmFjayhjKXtsZXR7c2VsZWN0aW9uOmx9PWM7bC5tYXJrU291cmNlKCJrZXlib2FyZCIpLGwudHJhbnNmb3JtU3RhcnQoLTEsMCksbC5tYXJrRW5kU291cmNlKCl9fSxWaXQ9e25hbWU6Im1vdmVD''@;'; put 'put ''ZWxsU2VsZWN0aW9uVXBCeVZpZXdwb3J0SGlnaHQiLGNhbGxiYWNrKGMpe2NvbnN0e3NlbGVjdGlvbjpsfT1jLHtuYXZpZ2FibGVIZWFkZXJzOmF9PWMuZ2V0U2V0dGluZ3MoKSxkPWE/Yy5jb3VudENvbEhlYWRlcnMoKTowLHtyb3c6aH09Yy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLmhpZ2hs''@;'; put 'put ''aWdodDtsZXQgZj1jLmNvdW50VmlzaWJsZVJvd3MoKStkO2Y9MD09PWY/LTE6LWYsaD09PS1kP2Y9LTE6aCtmPGQmJihmPS0oaCtkKSksbC5tYXJrU291cmNlKCJrZXlib2FyZCIpLGwudHJhbnNmb3JtU3RhcnQoZiwwKSxsLm1hcmtFbmRTb3VyY2UoKSxjLmdldFNlbGVjdGVkUmFuZ2VMYXN0''@;'; put 'put ''KCkuaGlnaGxpZ2h0LnJvdzwwJiZjLnNjcm9sbFZpZXdwb3J0VG8oe3JvdzowfSl9fSxqaXQ9e25hbWU6ImVtcHR5U2VsZWN0ZWRDZWxscyIsY2FsbGJhY2soYyl7Yy5lbXB0eVNlbGVjdGVkQ2VsbHMoKSxjLl9nZXRFZGl0b3JNYW5hZ2VyKCkucHJlcGFyZUVkaXRvcigpfX0seml0PXtuYW1l''@;'; put 'put ''OiJzY3JvbGxUb0ZvY3VzZWRDZWxsIixjYWxsYmFjayhjKXtjb25zdHtoaWdobGlnaHQ6bH09Yy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLGE9Yy5nZXRGaXJzdEZ1bGx5VmlzaWJsZVJvdygpLTEsZD1jLmdldEZpcnN0RnVsbHlWaXNpYmxlQ29sdW1uKCktMSxoPWMuZ2V0TGFzdEZ1bGx5Vmlz''@;'; put 'put ''aWJsZVJvdygpKzEsZj1jLmdldExhc3RGdWxseVZpc2libGVDb2x1bW4oKSsxLHY9Yy5fY3JlYXRlQ2VsbENvb3JkcyhhLGQpLE09Yy5fY3JlYXRlQ2VsbENvb3JkcyhoLGYpO2lmKCFjLl9jcmVhdGVDZWxsUmFuZ2Uodix2LE0pLmluY2x1ZGVzKGwpJiYobC5yb3c+PTB8fGwuY29sPj0wKSl7''@;'; put 'put ''Y29uc3QgWj17fTtpZihsLmNvbD49MCl7Y29uc3QgcmU9TWF0aC5mbG9vcihjLmNvdW50VmlzaWJsZUNvbHMoKS8yKTtaLmNvbD1NYXRoLm1heChsLmNvbC1yZSwwKX1pZihsLnJvdz49MCl7Y29uc3QgcmU9TWF0aC5mbG9vcihjLmNvdW50VmlzaWJsZVJvd3MoKS8yKTtaLnJvdz1NYXRoLm1h''@;'; put 'put ''eChsLnJvdy1yZSwwKX1jLnNjcm9sbFZpZXdwb3J0VG8oey4uLlosdmVydGljYWxTbmFwOiJ0b3AiLGhvcml6b250YWxTbmFwOiJzdGFydCJ9KX19fSxVaXQ9e25hbWU6InNlbGVjdEFsbENlbGxzIixjYWxsYmFjayhjKXtsZXR7c2VsZWN0aW9uOmx9PWM7bC5tYXJrU291cmNlKCJrZXlib2Fy''@;'; put 'put ''ZCIpLGwuc2VsZWN0QWxsKCEwLCEwLHtkaXNhYmxlSGVhZGVyc0hpZ2hsaWdodDohMH0pLGwubWFya0VuZFNvdXJjZSgpfX0sWml0PXtuYW1lOiJzZWxlY3RBbGxDZWxsc0FuZEhlYWRlcnMiLGNhbGxiYWNrKGMpe2xldHtzZWxlY3Rpb246bH09YztsLm1hcmtTb3VyY2UoImtleWJvYXJkIiks''@;'; put 'put ''bC5zZWxlY3RBbGwoITAsITAse2Rpc2FibGVIZWFkZXJzSGlnaGxpZ2h0OiExfSksbC5tYXJrRW5kU291cmNlKCl9fSxXaXQ9e25hbWU6InBvcHVsYXRlU2VsZWN0ZWRDZWxsc0RhdGEiLGNhbGxiYWNrKGMpe2NvbnN0IGw9Yy5nZXRTZWxlY3RlZFJhbmdlKCkse3JvdzphLGNvbDpkfT1sW2wu''@;'; put 'put ''bGVuZ3RoLTFdLmhpZ2hsaWdodC5ub3JtYWxpemUoKSxoPWMuZ2V0RGF0YUF0Q2VsbChhLGQpLGY9bmV3IE1hcDtmb3IobGV0IHY9MDt2PGwubGVuZ3RoO3YrKylsW3ZdLmZvckFsbCgoTSxEKT0+e2lmKE0+PTAmJkQ+PTAmJihNIT09YXx8RCE9PWQpKXtjb25zdHtyZWFkT25seTpafT1jLmdl''@;'; put 'put ''dENlbGxNZXRhKE0sRCk7Wnx8Zi5zZXQoYCR7TX14JHtEfWAsW00sRCxoXSl9fSk7Yy5zZXREYXRhQXRDZWxsKEFycmF5LmZyb20oZi52YWx1ZXMoKSkpfX0sWWl0PVsuLi5mdW5jdGlvbiBsaXQoKXtyZXR1cm5bWHJ0LHJpdCxpaXQsYWl0LG9pdCxzaXRdfSgpLC4uLmZ1bmN0aW9uIFNpdCgp''@;'; put 'put ''e3JldHVybltjaXQsdWl0LGRpdCxoaXQsZml0LHBpdCxnaXQsbWl0LHZpdCxiaXQseWl0LF9pdCx3aXQsQ2l0XX0oKSwuLi5mdW5jdGlvbiBCaXQoKXtyZXR1cm5bTWl0LHhpdCxFaXQsVGl0LEFpdCxraXQsRGl0LElpdCxSaXQsTGl0LE9pdCxQaXQsRml0LEhpdCxOaXQsVml0XX0oKSxqaXQs''@;'; put 'put ''eml0LFVpdCxaaXQsV2l0XTtmdW5jdGlvbiBTcGUoYyl7Y29uc3QgbD17fTtyZXR1cm4gWWl0LmZvckVhY2goYT0+e2xldHtuYW1lOmQsY2FsbGJhY2s6aH09YTtsW2RdPWZ1bmN0aW9uKCl7Zm9yKHZhciBmPWFyZ3VtZW50cy5sZW5ndGgsdj1uZXcgQXJyYXkoZiksTT0wO008ZjtNKyspdltN''@;'; put 'put ''XT1hcmd1bWVudHNbTV07cmV0dXJuIGgoYywuLi52KX19KSxsfWZ1bmN0aW9uIEdpdChjKXtjb25zdCBsPWMuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuYWRkQ29udGV4dCgiZWRpdG9yIiksYT1TcGUoYyksZD17Z3JvdXA6V219O2wuYWRkU2hvcnRjdXRzKFt7a2V5czpbWyJFbnRlciJdLFsiRW50''@;'; put 'put ''ZXIiLCJTaGlmdCJdXSxjYWxsYmFjazooaCxmKT0+YS5lZGl0b3JDbG9zZUFuZFNhdmVCeUVudGVyKGgsZil9LHtrZXlzOltbIkVudGVyIiwiQ29udHJvbC9NZXRhIl0sWyJFbnRlciIsIkNvbnRyb2wvTWV0YSIsIlNoaWZ0Il1dLGNhcHR1cmVDdHJsOiEwLGNhbGxiYWNrOihoLGYpPT5hLmVk''@;'; put 'put ''aXRvckNsb3NlQW5kU2F2ZUJ5RW50ZXIoaCxmKX0se2tleXM6W1siVGFiIl0sWyJUYWIiLCJTaGlmdCJdLFsiUGFnZURvd24iXSxbIlBhZ2VVcCJdXSxmb3J3YXJkVG9Db250ZXh0OmMuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZ3JpZCIpLGNhbGxiYWNrOihoLGYpPT5hLmVk''@;'; put 'put ''aXRvckNsb3NlQW5kU2F2ZShoLGYpfSx7a2V5czpbWyJBcnJvd0Rvd24iXSxbIkFycm93VXAiXSxbIkFycm93TGVmdCJdLFsiQXJyb3dSaWdodCJdXSxwcmV2ZW50RGVmYXVsdDohMSxjYWxsYmFjazooaCxmKT0+YS5lZGl0b3JDbG9zZUFuZFNhdmVCeUFycm93S2V5cyhoLGYpfSx7a2V5czpb''@;'; put 'put ''WyJFc2NhcGUiXSxbIkVzY2FwZSIsIkNvbnRyb2wvTWV0YSJdXSxjYWxsYmFjazooKT0+YS5lZGl0b3JDbG9zZVdpdGhvdXRTYXZpbmcoKX1dLGQpfWZ1bmN0aW9uICRpdChjKXtjb25zdCBsPWMuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuYWRkQ29udGV4dCgiZ3JpZCIpLGE9U3BlKGMpLGQ9e3J1''@;'; put 'put ''bk9ubHlJZjooKT0+e2NvbnN0e25hdmlnYWJsZUhlYWRlcnM6aH09Yy5nZXRTZXR0aW5ncygpO3JldHVybiBQYShjLmdldFNlbGVjdGVkKCkpJiYoaHx8IWgmJmMuY291bnRSZW5kZXJlZFJvd3MoKT4wJiZjLmNvdW50UmVuZGVyZWRDb2xzKCk+MCl9LGdyb3VwOm1wZX07bC5hZGRTaG9ydGN1''@;'; put 'put ''dHMoW3trZXlzOltbIkYyIl1dLGNhbGxiYWNrOmg9PmEuZWRpdG9yRmFzdE9wZW4oaCl9LHtrZXlzOltbIkVudGVyIl0sWyJFbnRlciIsIlNoaWZ0Il1dLGNhbGxiYWNrOihoLGYpPT5hLmVkaXRvck9wZW4oaCxmKX0se2tleXM6W1siQmFja3NwYWNlIl0sWyJEZWxldGUiXV0sY2FsbGJhY2s6''@;'; put 'put ''KCk9PmEuZW1wdHlTZWxlY3RlZENlbGxzKCl9XSx7Z3JvdXA6V20scnVuT25seUlmOigpPT5QYShjLmdldFNlbGVjdGVkKCkpfSksbC5hZGRTaG9ydGN1dHMoW3trZXlzOltbIkNvbnRyb2wvTWV0YSIsIkEiXV0sY2FsbGJhY2s6KCk9PmEuc2VsZWN0QWxsQ2VsbHMoKSxydW5Pbmx5SWY6KCk9''@;'; put 'put ''Pnt2YXIgaDtyZXR1cm4hKG51bGwhPT0oaD1jLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkpJiZ2b2lkIDAhPT1oJiZoLmhpZ2hsaWdodC5pc0hlYWRlcigpKX19LHtrZXlzOltbIkNvbnRyb2wvTWV0YSIsIkEiXV0sY2FsbGJhY2s6KCk9Pnt9LHJ1bk9ubHlJZjooKT0+e3ZhciBoO3JldHVybiBu''@;'; put 'put ''dWxsPT09KGg9Yy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpKXx8dm9pZCAwPT09aD92b2lkIDA6aC5oaWdobGlnaHQuaXNIZWFkZXIoKX0scHJldmVudERlZmF1bHQ6ITB9LHtrZXlzOltbIkNvbnRyb2wvTWV0YSIsIlNoaWZ0IiwiU3BhY2UiXV0sY2FsbGJhY2s6KCk9PmEuc2VsZWN0QWxsQ2Vs''@;'; put 'put ''bHNBbmRIZWFkZXJzKCl9LHtrZXlzOltbIkNvbnRyb2wvTWV0YSIsIkVudGVyIl1dLGNhbGxiYWNrOigpPT5hLnBvcHVsYXRlU2VsZWN0ZWRDZWxsc0RhdGEoKSxydW5Pbmx5SWY6KCk9Pnt2YXIgaCxmO3JldHVybiEobnVsbCE9PShoPWMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSkmJnZvaWQg''@;'; put 'put ''MCE9PWgmJmguaGlnaGxpZ2h0LmlzSGVhZGVyKCkpJiYobnVsbD09PShmPWMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSl8fHZvaWQgMD09PWY/dm9pZCAwOmYuZ2V0Q2VsbHNDb3VudCgpKT4xfX0se2tleXM6W1siQ29udHJvbCIsIlNwYWNlIl1dLGNhcHR1cmVDdHJsOiEwLGNhbGxiYWNrOigp''@;'; put 'put ''PT5hLmV4dGVuZENlbGxzU2VsZWN0aW9uVG9Db2x1bW5zKCl9LHtrZXlzOltbIlNoaWZ0IiwiU3BhY2UiXV0sc3RvcFByb3BhZ2F0aW9uOiEwLGNhbGxiYWNrOigpPT5hLmV4dGVuZENlbGxzU2VsZWN0aW9uVG9Sb3dzKCl9LHtrZXlzOltbIkFycm93VXAiXV0sY2FsbGJhY2s6KCk9PmEubW92''@;'; put 'put ''ZUNlbGxTZWxlY3Rpb25VcCgpfSx7a2V5czpbWyJBcnJvd1VwIiwiQ29udHJvbC9NZXRhIl1dLGNhcHR1cmVDdHJsOiEwLGNhbGxiYWNrOigpPT5hLm1vdmVDZWxsU2VsZWN0aW9uVG9Nb3N0VG9wKCl9LHtrZXlzOltbIkFycm93VXAiLCJTaGlmdCJdXSxjYWxsYmFjazooKT0+YS5leHRlbmRD''@;'; put 'put ''ZWxsc1NlbGVjdGlvblVwKCl9LHtrZXlzOltbIkFycm93VXAiLCJTaGlmdCIsIkNvbnRyb2wvTWV0YSJdXSxjYXB0dXJlQ3RybDohMCxjYWxsYmFjazooKT0+YS5leHRlbmRDZWxsc1NlbGVjdGlvblRvTW9zdFRvcCgpLHJ1bk9ubHlJZjooKT0+IShjLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlD''@;'; put 'put ''b3JuZXIoKXx8Yy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCkpfSx7a2V5czpbWyJBcnJvd0Rvd24iXV0sY2FsbGJhY2s6KCk9PmEubW92ZUNlbGxTZWxlY3Rpb25Eb3duKCl9LHtrZXlzOltbIkFycm93RG93biIsIkNvbnRyb2wvTWV0YSJdXSxjYXB0dXJlQ3RybDohMCxj''@;'; put 'put ''YWxsYmFjazooKT0+YS5tb3ZlQ2VsbFNlbGVjdGlvblRvTW9zdEJvdHRvbSgpfSx7a2V5czpbWyJBcnJvd0Rvd24iLCJTaGlmdCJdXSxjYWxsYmFjazooKT0+YS5leHRlbmRDZWxsc1NlbGVjdGlvbkRvd24oKX0se2tleXM6W1siQXJyb3dEb3duIiwiU2hpZnQiLCJDb250cm9sL01ldGEiXV0s''@;'; put 'put ''Y2FwdHVyZUN0cmw6ITAsY2FsbGJhY2s6KCk9PmEuZXh0ZW5kQ2VsbHNTZWxlY3Rpb25Ub01vc3RCb3R0b20oKSxydW5Pbmx5SWY6KCk9PiEoYy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCl8fGMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpKX0se2tleXM6W1si''@;'; put 'put ''QXJyb3dMZWZ0Il1dLGNhbGxiYWNrOigpPT5hLm1vdmVDZWxsU2VsZWN0aW9uTGVmdCgpfSx7a2V5czpbWyJBcnJvd0xlZnQiLCJDb250cm9sL01ldGEiXV0sY2FwdHVyZUN0cmw6ITAsY2FsbGJhY2s6KCk9PmEubW92ZUNlbGxTZWxlY3Rpb25Ub01vc3RMZWZ0KCl9LHtrZXlzOltbIkFycm93''@;'; put 'put ''TGVmdCIsIlNoaWZ0Il1dLGNhbGxiYWNrOigpPT5hLmV4dGVuZENlbGxzU2VsZWN0aW9uTGVmdCgpfSx7a2V5czpbWyJBcnJvd0xlZnQiLCJTaGlmdCIsIkNvbnRyb2wvTWV0YSJdXSxjYXB0dXJlQ3RybDohMCxjYWxsYmFjazooKT0+YS5leHRlbmRDZWxsc1NlbGVjdGlvblRvTW9zdExlZnQo''@;'; put 'put ''KSxydW5Pbmx5SWY6KCk9PiEoYy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCl8fGMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpKX0se2tleXM6W1siQXJyb3dSaWdodCJdXSxjYWxsYmFjazooKT0+YS5tb3ZlQ2VsbFNlbGVjdGlvblJpZ2h0KCl9LHtrZXlzOltbIkFy''@;'; put 'put ''cm93UmlnaHQiLCJDb250cm9sL01ldGEiXV0sY2FwdHVyZUN0cmw6ITAsY2FsbGJhY2s6KCk9PmEubW92ZUNlbGxTZWxlY3Rpb25Ub01vc3RSaWdodCgpfSx7a2V5czpbWyJBcnJvd1JpZ2h0IiwiU2hpZnQiXV0sY2FsbGJhY2s6KCk9PmEuZXh0ZW5kQ2VsbHNTZWxlY3Rpb25SaWdodCgpfSx7''@;'; put 'put ''a2V5czpbWyJBcnJvd1JpZ2h0IiwiU2hpZnQiLCJDb250cm9sL01ldGEiXV0sY2FwdHVyZUN0cmw6ITAsY2FsbGJhY2s6KCk9PmEuZXh0ZW5kQ2VsbHNTZWxlY3Rpb25Ub01vc3RSaWdodCgpLHJ1bk9ubHlJZjooKT0+IShjLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKXx8Yy5zZWxl''@;'; put 'put ''Y3Rpb24uaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCkpfSx7a2V5czpbWyJIb21lIl1dLGNhcHR1cmVDdHJsOiEwLGNhbGxiYWNrOigpPT5hLm1vdmVDZWxsU2VsZWN0aW9uVG9Nb3N0SW5saW5lU3RhcnQoKSxydW5Pbmx5SWY6KCk9PmMudmlldy5pc01haW5UYWJsZU5vdEZ1bGx5Q292ZXJlZEJ5''@;'; put 'put ''T3ZlcmxheXMoKX0se2tleXM6W1siSG9tZSIsIlNoaWZ0Il1dLGNhbGxiYWNrOigpPT5hLmV4dGVuZENlbGxzU2VsZWN0aW9uVG9Nb3N0SW5saW5lU3RhcnQoKX0se2tleXM6W1siSG9tZSIsIkNvbnRyb2wvTWV0YSJdXSxjYXB0dXJlQ3RybDohMCxjYWxsYmFjazooKT0+YS5tb3ZlQ2VsbFNl''@;'; put 'put ''bGVjdGlvblRvTW9zdFRvcElubGluZVN0YXJ0KCkscnVuT25seUlmOigpPT5jLnZpZXcuaXNNYWluVGFibGVOb3RGdWxseUNvdmVyZWRCeU92ZXJsYXlzKCl9LHtrZXlzOltbIkVuZCJdXSxjYXB0dXJlQ3RybDohMCxjYWxsYmFjazooKT0+YS5tb3ZlQ2VsbFNlbGVjdGlvblRvTW9zdElubGlu''@;'; put 'put ''ZUVuZCgpLHJ1bk9ubHlJZjooKT0+Yy52aWV3LmlzTWFpblRhYmxlTm90RnVsbHlDb3ZlcmVkQnlPdmVybGF5cygpfSx7a2V5czpbWyJFbmQiLCJTaGlmdCJdXSxjYWxsYmFjazooKT0+YS5leHRlbmRDZWxsc1NlbGVjdGlvblRvTW9zdElubGluZUVuZCgpfSx7a2V5czpbWyJFbmQiLCJDb250''@;'; put 'put ''cm9sL01ldGEiXV0sY2FwdHVyZUN0cmw6ITAsY2FsbGJhY2s6KCk9PmEubW92ZUNlbGxTZWxlY3Rpb25Ub01vc3RCb3R0b21JbmxpbmVFbmQoKSxydW5Pbmx5SWY6KCk9PmMudmlldy5pc01haW5UYWJsZU5vdEZ1bGx5Q292ZXJlZEJ5T3ZlcmxheXMoKX0se2tleXM6W1siUGFnZVVwIl1dLGNh''@;'; put 'put ''bGxiYWNrOigpPT5hLm1vdmVDZWxsU2VsZWN0aW9uVXBCeVZpZXdwb3J0SGlnaHQoKX0se2tleXM6W1siUGFnZVVwIiwiU2hpZnQiXV0sY2FsbGJhY2s6KCk9PmEuZXh0ZW5kQ2VsbHNTZWxlY3Rpb25VcEJ5Vmlld3BvcnRIZWlnaHQoKX0se2tleXM6W1siUGFnZURvd24iXV0sY2FsbGJhY2s6''@;'; put 'put ''KCk9PmEubW92ZUNlbGxTZWxlY3Rpb25Eb3duQnlWaWV3cG9ydEhlaWdodCgpfSx7a2V5czpbWyJQYWdlRG93biIsIlNoaWZ0Il1dLGNhbGxiYWNrOigpPT5hLmV4dGVuZENlbGxzU2VsZWN0aW9uRG93bkJ5Vmlld3BvcnRIZWlnaHQoKX0se2tleXM6W1siVGFiIl1dLHByZXZlbnREZWZhdWx0''@;'; put 'put ''OiExLGNhbGxiYWNrOmg9PmEubW92ZUNlbGxTZWxlY3Rpb25JbmxpbmVTdGFydChoKX0se2tleXM6W1siU2hpZnQiLCJUYWIiXV0scHJldmVudERlZmF1bHQ6ITEsY2FsbGJhY2s6aD0+YS5tb3ZlQ2VsbFNlbGVjdGlvbklubGluZUVuZChoKX0se2tleXM6W1siQ29udHJvbC9NZXRhIiwiQmFj''@;'; put 'put ''a3NwYWNlIl1dLGNhbGxiYWNrOigpPT5hLnNjcm9sbFRvRm9jdXNlZENlbGwoKX1dLGQpfWZ1bmN0aW9uIE1wZShjKXtjb25zdHtjbGFzc05hbWVzOmx9PU8yZShjLC9odC10aGVtZS1bYS16QS1aMC05Xy1dKy8pO3JldHVybiBsLnBvcCgpfWxldCBrWD1udWxsO2NvbnN0IERYPW5ldyBNYXA7''@;'; put 'put ''ZnVuY3Rpb24geHBlKGMsbCl7dmFyIGEsZD10aGlzO2xldCBoPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl0sZj10aGlzO2NvbnN0IHY9bmV3IGoyKGYpO2xldCBNLEQsWixyZSxjZSxiZSxFZT0hMDsoZnVuY3Rpb24gYnR0KGMpe3JldHVy''@;'; put 'put ''biBjPT09REt9KShoKSYmZnVuY3Rpb24gdnR0KGMpe0MzZS5zZXQoYywhMCl9KHRoaXMpLHRoaXMucm9vdEVsZW1lbnQ9Yyx0aGlzLnJvb3REb2N1bWVudD1jLm93bmVyRG9jdW1lbnQsdGhpcy5yb290V2luZG93PXRoaXMucm9vdERvY3VtZW50LmRlZmF1bHRWaWV3LHRoaXMuaXNEZXN0cm95''@;'; put 'put ''ZWQ9ITEsdGhpcy5yZW5kZXJTdXNwZW5kZWRDb3VudGVyPTAsdGhpcy5leGVjdXRpb25TdXNwZW5kZWRDb3VudGVyPTA7Y29uc3QgQmU9bnVsbCE9PShhPWw/LmxheW91dERpcmVjdGlvbikmJnZvaWQgMCE9PWE/YToiaW5oZXJpdCIscWU9WyJydGwiLCJsdHIiXS5pbmNsdWRlcyhCZSk/QmU6''@;'; put 'put ''dGhpcy5yb290V2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcy5yb290RWxlbWVudCkuZGlyZWN0aW9uO3RoaXMucm9vdEVsZW1lbnQuc2V0QXR0cmlidXRlKCJkaXIiLHFlKSx0aGlzLmlzUnRsPWZ1bmN0aW9uKCl7cmV0dXJuInJ0bCI9PT1xZX0sdGhpcy5pc0x0cj1mdW5jdGlvbigpe3Jl''@;'; put 'put ''dHVybiFmLmlzUnRsKCl9LHRoaXMuZ2V0RGlyZWN0aW9uRmFjdG9yPWZ1bmN0aW9uKCl7cmV0dXJuIGYuaXNMdHIoKT8xOi0xfSxsLmxhbmd1YWdlPWZ1bmN0aW9uIGdudChjKXtsZXQgbD1IM2UoYyk7cmV0dXJuIGdYKGwpfHwobD1wWCxOM2UoYykpLGx9KGwubGFuZ3VhZ2UpO2NvbnN0IHJ0''@;'; put 'put ''PU9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyhsKS5maWx0ZXIodnQ9PntsZXRbTnRdPXZ0O3JldHVybiEoU2EuZ2V0U2luZ2xldG9uKCkuaXNSZWdpc3RlcmVkKE50KXx8U2EuZ2V0U2luZ2xldG9uKCkuaXNEZXByZWNhdGVkKE50KSl9KSkscHQ9bmV3IHVwZShmLHJ0LFt3cnQs''@;'; put 'put ''QXJ0XSksZHQ9cHQuZ2V0VGFibGVNZXRhKCksSnQ9cHQuZ2V0R2xvYmFsTWV0YSgpLHZuPUpPKCk7dGhpcy5jb250YWluZXI9dGhpcy5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksYy5pbnNlcnRCZWZvcmUodGhpcy5jb250YWluZXIsYy5maXJzdENoaWxkKSxjUCh0aGlzKSYm''@;'; put 'put ''KFMyZShsLmxpY2Vuc2VLZXksYyksVGkoYywiaHQtd3JhcHBlciIpKSx0aGlzLmd1aWQ9YGh0XyR7aCQoKX1gLERYLnNldCh0aGlzLmd1aWQsdGhpcyksdGhpcy5jb2x1bW5JbmRleE1hcHBlcj1uZXcgWUssdGhpcy5yb3dJbmRleE1hcHBlcj1uZXcgWUssdGhpcy5jb2x1bW5JbmRleE1hcHBl''@;'; put 'put ''ci5hZGRMb2NhbEhvb2soImluZGV4ZXNTZXF1ZW5jZUNoYW5nZSIsdnQ9PntmLnJ1bkhvb2tzKCJhZnRlckNvbHVtblNlcXVlbmNlQ2hhbmdlIix2dCl9KSx0aGlzLnJvd0luZGV4TWFwcGVyLmFkZExvY2FsSG9vaygiaW5kZXhlc1NlcXVlbmNlQ2hhbmdlIix2dD0+e2YucnVuSG9va3MoImFm''@;'; put 'put ''dGVyUm93U2VxdWVuY2VDaGFuZ2UiLHZ0KX0pLHYuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLnJvb3REb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsImNvbXBvc2l0aW9uc3RhcnQiLHZ0PT57Zi5ydW5Ib29rcygiYmVmb3JlQ29tcG9zaXRpb25TdGFydCIsdnQpfSksRD1uZXcgTHR0KGYpLCghdGhp''@;'; put 'put ''cy5yb290RWxlbWVudC5pZHx8Imh0XyI9PT10aGlzLnJvb3RFbGVtZW50LmlkLnN1YnN0cmluZygwLDMpKSYmKHRoaXMucm9vdEVsZW1lbnQuaWQ9dGhpcy5ndWlkKTtsZXQgR3I9bmV3IHFudChkdCx7cm93SW5kZXhNYXBwZXI6Zi5yb3dJbmRleE1hcHBlcixjb2x1bW5JbmRleE1hcHBlcjpm''@;'; put 'put ''LmNvbHVtbkluZGV4TWFwcGVyLGNvdW50Q29sczooKT0+Zi5jb3VudENvbHMoKSxjb3VudFJvd3M6KCk9PmYuY291bnRSb3dzKCkscHJvcFRvQ29sOnZ0PT5NLnByb3BUb0NvbCh2dCksaXNFZGl0b3JPcGVuZWQ6KCk9PiEhZi5nZXRBY3RpdmVFZGl0b3IoKSYmZi5nZXRBY3RpdmVFZGl0b3Io''@;'; put 'put ''KS5pc09wZW5lZCgpLGNvdW50UmVuZGVyYWJsZUNvbHVtbnM6KCk9PnRoaXMudmlldy5jb3VudFJlbmRlcmFibGVDb2x1bW5zKCksY291bnRSZW5kZXJhYmxlUm93czooKT0+dGhpcy52aWV3LmNvdW50UmVuZGVyYWJsZVJvd3MoKSxjb3VudFJvd0hlYWRlcnM6KCk9PnRoaXMuY291bnRSb3dI''@;'; put 'put ''ZWFkZXJzKCksY291bnRDb2xIZWFkZXJzOigpPT50aGlzLmNvdW50Q29sSGVhZGVycygpLGNvdW50UmVuZGVyYWJsZVJvd3NJblJhbmdlOmZ1bmN0aW9uKCl7cmV0dXJuIGQudmlldy5jb3VudFJlbmRlcmFibGVSb3dzSW5SYW5nZSguLi5hcmd1bWVudHMpfSxjb3VudFJlbmRlcmFibGVDb2x1''@;'; put 'put ''bW5zSW5SYW5nZTpmdW5jdGlvbigpe3JldHVybiBkLnZpZXcuY291bnRSZW5kZXJhYmxlQ29sdW1uc0luUmFuZ2UoLi4uYXJndW1lbnRzKX0sZ2V0U2hvcnRjdXRNYW5hZ2VyOigpPT5mLmdldFNob3J0Y3V0TWFuYWdlcigpLGNyZWF0ZUNlbGxDb29yZHM6KHZ0LE50KT0+Zi5fY3JlYXRlQ2Vs''@;'; put 'put ''bENvb3Jkcyh2dCxOdCksY3JlYXRlQ2VsbFJhbmdlOih2dCxOdCxIdCk9PmYuX2NyZWF0ZUNlbGxSYW5nZSh2dCxOdCxIdCksdmlzdWFsVG9SZW5kZXJhYmxlQ29vcmRzOnZ0PT57Y29uc3R7cm93Ok50LGNvbDpIdH09dnQ7cmV0dXJuIGYuX2NyZWF0ZUNlbGxDb29yZHMoTnQ+PTA/Zi5yb3dJ''@;'; put 'put ''bmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KE50KTpOdCxIdD49MD9mLmNvbHVtbkluZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoSHQpOkh0KX0scmVuZGVyYWJsZVRvVmlzdWFsQ29vcmRzOnZ0PT57Y29uc3R7cm93Ok50LGNvbDpIdH09dnQ7''@;'; put 'put ''cmV0dXJuIGYuX2NyZWF0ZUNlbGxDb29yZHMoTnQ+PTA/Zi5yb3dJbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KE50KTpOdCxIdD49MD9mLmNvbHVtbkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoSHQpOkh0KX0sZmluZEZpcnN0Tm9uSGlk''@;'; put 'put ''ZGVuUmVuZGVyYWJsZVJvdzoodnQsTnQpPT57Y29uc3QgSHQ9TnQ+dnQ/MTotMSxIbj1NYXRoLm1pbih2dCxOdCksdHI9TWF0aC5tYXgodnQsTnQpLGFyPWYucm93SW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KHZ0LEh0KTtyZXR1cm4gbnVsbD09PWFyfHwxPT09SHQmJmFy''@;'; put 'put ''PnRyfHwtMT09PUh0JiZhcjxIbj9udWxsOmFyPj0wP2Yucm93SW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChhcik6YXJ9LGZpbmRGaXJzdE5vbkhpZGRlblJlbmRlcmFibGVDb2x1bW46KHZ0LE50KT0+e2NvbnN0IEh0PU50PnZ0PzE6LTEsSG49TWF0aC5taW4odnQs''@;'; put 'put ''TnQpLHRyPU1hdGgubWF4KHZ0LE50KSxhcj1mLmNvbHVtbkluZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCh2dCxIdCk7cmV0dXJuIG51bGw9PT1hcnx8MT09PUh0JiZhcj50cnx8LTE9PT1IdCYmYXI8SG4/bnVsbDphcj49MD9mLmNvbHVtbkluZGV4TWFwcGVyLmdldFJlbmRl''@;'; put 'put ''cmFibGVGcm9tVmlzdWFsSW5kZXgoYXIpOmFyfSxpc0Rpc2FibGVkQ2VsbFNlbGVjdGlvbjoodnQsTnQpPT52dDwwfHxOdDwwP2YuZ2V0U2V0dGluZ3MoKS5kaXNhYmxlVmlzdWFsU2VsZWN0aW9uOmYuZ2V0Q2VsbE1ldGEodnQsTnQpLmRpc2FibGVWaXN1YWxTZWxlY3Rpb259KTt0aGlzLnNl''@;'; put 'put ''bGVjdGlvbj1Hcjtjb25zdCBtcj12dD0+e2xldHtoaWRkZW5JbmRleGVzQ2hhbmdlZDpOdH09dnQ7dGhpcy5mb3JjZUZ1bGxSZW5kZXI9ITAsTnQmJnRoaXMuc2VsZWN0aW9uLmNvbW1pdCgpfTtmdW5jdGlvbiBhaSh2dCxOdCl7Y29uc3QgSHQ9ImNsYXNzTmFtZSI9PT12dD9mLnJvb3RFbGVt''@;'; put 'put ''ZW50OmYudGFibGU7aWYoRWUpVGkoSHQsTnQpO2Vsc2V7bGV0IEhuPVtdLHRyPVtdO0p0W3Z0XSYmKEhuPUFycmF5LmlzQXJyYXkoSnRbdnRdKT9KdFt2dF06dSQoSnRbdnRdKSksTnQmJih0cj1BcnJheS5pc0FycmF5KE50KT9OdDp1JChOdCkpO2NvbnN0IGFyPWMkKEhuLHRyKSxIcj1jJCh0''@;'; put 'put ''cixIbik7YXIubGVuZ3RoJiZsbyhIdCxhciksSHIubGVuZ3RoJiZUaShIdCxIcil9SnRbdnRdPU50fWZ1bmN0aW9uIF9pKCl7bGV0IHZ0PSExO3JldHVybnt2YWxpZGF0b3JzSW5RdWV1ZTowLHZhbGlkOiEwLGFkZFZhbGlkYXRvclRvUXVldWUoKXt0aGlzLnZhbGlkYXRvcnNJblF1ZXVlKz0x''@;'; put 'put ''LHZ0PSExfSxyZW1vdmVWYWxpZGF0b3JGb3JtUXVldWUoKXt0aGlzLnZhbGlkYXRvcnNJblF1ZXVlPXRoaXMudmFsaWRhdG9yc0luUXVldWUtMTwwPzA6dGhpcy52YWxpZGF0b3JzSW5RdWV1ZS0xLHRoaXMuY2hlY2tJZlF1ZXVlSXNFbXB0eSgpfSxvblF1ZXVlRW1wdHkoKXt9LGNoZWNrSWZR''@;'; put 'put ''dWV1ZUlzRW1wdHkoKXswPT09dGhpcy52YWxpZGF0b3JzSW5RdWV1ZSYmITE9PT12dCYmKHZ0PSEwLHRoaXMub25RdWV1ZUVtcHR5KHRoaXMudmFsaWQpKX19fWZ1bmN0aW9uIE9uKHZ0KXtjb25zdCBOdD12dC5yZXBsYWNlKCIsIiwiLiIpO3JldHVybiExPT09aXNOYU4ocGFyc2VGbG9hdChO''@;'; put 'put ''dCkpP3BhcnNlRmxvYXQoTnQpOnZ0fWZ1bmN0aW9uIHpyKHZ0LE50LEh0KXtpZighdnQubGVuZ3RoKXJldHVybiB2b2lkIEh0KCk7Y29uc3QgSG49Zi5nZXRBY3RpdmVFZGl0b3IoKSx0cj1uZXcgX2k7bGV0IGFyPSEwO3RyLm9uUXVldWVFbXB0eT0oKT0+e0huJiZhciYmSG4uY2FuY2VsQ2hh''@;'; put 'put ''bmdlcygpLEh0KCl9O2ZvcihsZXQgSHI9dnQubGVuZ3RoLTE7SHI+PTA7SHItLSl7Y29uc3RbcXIsb25dPXZ0W0hyXSx5bj1NLnByb3BUb0NvbChvbik7bGV0IHBuO3BuPU51bWJlci5pc0ludGVnZXIoeW4pP2YuZ2V0Q2VsbE1ldGEocXIseW4pOnsuLi5PYmplY3QuZ2V0UHJvdG90eXBlT2Yo''@;'; put 'put ''ZHQpLC4uLmR0fSxmLmdldENlbGxWYWxpZGF0b3IocG4pJiYodHIuYWRkVmFsaWRhdG9yVG9RdWV1ZSgpLGYudmFsaWRhdGVDZWxsKHZ0W0hyXVszXSxwbixmdW5jdGlvbihwciwkbil7cmV0dXJuIGZ1bmN0aW9uKGRyKXtpZigiYm9vbGVhbiIhPXR5cGVvZiBkcil0aHJvdyBuZXcgRXJyb3Io''@;'; put 'put ''IlZhbGlkYXRpb24gZXJyb3I6IHJlc3VsdCBpcyBub3QgYm9vbGVhbiIpOyExPT09ZHImJiExPT09JG4uYWxsb3dJbnZhbGlkJiYoYXI9ITEsdnQuc3BsaWNlKHByLDEpLCRuLnZhbGlkPSEwKSx0ci5yZW1vdmVWYWxpZGF0b3JGb3JtUXVldWUoKX19KEhyLHBuKSxOdCkpfXRyLmNoZWNrSWZR''@;'; put 'put ''dWV1ZUlzRW1wdHkoKX1mdW5jdGlvbiBKbih2dCxOdCl7Zm9yKGxldCBIbj12dC5sZW5ndGgtMTtIbj49MDtIbi0tKXtsZXQgdHI9ITE7aWYobnVsbCE9PXZ0W0huXSl7aWYobnVsbCE9dnRbSG5dWzJdfHxudWxsIT12dFtIbl1bM10pe2lmKGR0LmFsbG93SW5zZXJ0Um93KWZvcig7dnRbSG5d''@;'; put 'put ''WzBdPmYuY291bnRSb3dzKCktMTspe2NvbnN0e2RlbHRhOmFyfT1NLmNyZWF0ZVJvdyh2b2lkIDAsdm9pZCAwLHtzb3VyY2U6ImF1dG8ifSk7aWYoMD09PWFyKXt0cj0hMDticmVha319aWYoImFycmF5Ij09PWYuZGF0YVR5cGUmJighZHQuY29sdW1uc3x8MD09PWR0LmNvbHVtbnMubGVuZ3Ro''@;'; put 'put ''KSYmZHQuYWxsb3dJbnNlcnRDb2x1bW4pZm9yKDtNLnByb3BUb0NvbCh2dFtIbl1bMV0pPmYuY291bnRDb2xzKCktMTspe2NvbnN0e2RlbHRhOmFyfT1NLmNyZWF0ZUNvbCh2b2lkIDAsdm9pZCAwLHtzb3VyY2U6ImF1dG8ifSk7aWYoMD09PWFyKXt0cj0hMDticmVha319dHJ8fE0uc2V0KHZ0''@;'; put 'put ''W0huXVswXSx2dFtIbl1bMV0sdnRbSG5dWzNdKX19ZWxzZSB2dC5zcGxpY2UoSG4sMSl9aWYodnQubGVuZ3RoPjApe1ouYWRqdXN0Um93c0FuZENvbHMoKSxmLnJ1bkhvb2tzKCJiZWZvcmVDaGFuZ2VSZW5kZXIiLHZ0LE50KSxyZS5jbG9zZUVkaXRvcigpLGYucmVuZGVyKCkscmUucHJlcGFy''@;'; put 'put ''ZUVkaXRvcigpLGYudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKSxmLnJ1bkhvb2tzKCJhZnRlckNoYW5nZSIsdnQsTnR8fCJlZGl0Iik7Y29uc3QgSG49Zi5nZXRBY3RpdmVFZGl0b3IoKTtIbiYmUGEoSG4ucmVmcmVzaFZhbHVlKSYmSG4ucmVmcmVzaFZhbHVlKCl9ZWxzZSBmLnJlbmRlcigp''@;'; put 'put ''fWZ1bmN0aW9uIERyKHZ0LE50LEh0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh2dCk/dnQ6W1t2dCxOdCxIdF1dfWZ1bmN0aW9uICRyKHZ0LE50KXtjb25zdCBIdD1mLnJ1bkhvb2tzKCJiZWZvcmVDaGFuZ2UiLHZ0LE50fHwiZWRpdCIpLEhuPXZ0LmZpbHRlcihhcj0+bnVsbCE9PWFyKTt2YXIg''@;'; put 'put ''dHI7aWYoITE9PT1IdHx8MD09PUhuLmxlbmd0aClyZXR1cm4gbnVsbD09PSh0cj1mLmdldEFjdGl2ZUVkaXRvcigpKXx8dm9pZCAwPT09dHJ8fHRyLmNhbmNlbENoYW5nZXMoKSxbXTtmb3IobGV0IGFyPUhuLmxlbmd0aC0xO2FyPj0wO2FyLS0pe2NvbnN0W0hyLHFyLCxvbl09SG5bYXJdLHlu''@;'; put 'put ''PU0ucHJvcFRvQ29sKHFyKTtsZXQgcG47cG49TnVtYmVyLmlzSW50ZWdlcih5bik/Zi5nZXRDZWxsTWV0YShIcix5bik6ey4uLk9iamVjdC5nZXRQcm90b3R5cGVPZihkdCksLi4uZHR9O2NvbnN0e3R5cGU6cHIsY2hlY2tlZFRlbXBsYXRlOiRuLHVuY2hlY2tlZFRlbXBsYXRlOmRyfT1wbjtp''@;'; put 'put ''ZigibnVtZXJpYyI9PT1wciYmInN0cmluZyI9PXR5cGVvZiBvbiYmeWZlKG9uKSYmKEhuW2FyXVszXT1PbihvbikpLCJjaGVja2JveCI9PT1wcil7Y29uc3QgVXI9bGMob24pLFpuPVVyPT09bGMoJG4pLHNyPVVyPT09bGMoZHIpOyhabnx8c3IpJiYoSG5bYXJdWzNdPVpuPyRuOmRyKX19cmV0''@;'; put 'put ''dXJuIEhufXRoaXMuY29sdW1uSW5kZXhNYXBwZXIuYWRkTG9jYWxIb29rKCJjYWNoZVVwZGF0ZWQiLG1yKSx0aGlzLnJvd0luZGV4TWFwcGVyLmFkZExvY2FsSG9vaygiY2FjaGVVcGRhdGVkIixtciksdGhpcy5zZWxlY3Rpb24uYWRkTG9jYWxIb29rKCJhZnRlclNldFJhbmdlRW5kIiwodnQs''@;'; put 'put ''TnQpPT57Y29uc3QgSHQ9RmQoITEpLEhuPXRoaXMuc2VsZWN0aW9uLmdldFNlbGVjdGVkUmFuZ2UoKSx7ZnJvbTp0cix0bzphcn09SG4uY3VycmVudCgpLEhyPUhuLnNpemUoKS0xO3RoaXMucnVuSG9va3MoImFmdGVyU2VsZWN0aW9uIix0ci5yb3csdHIuY29sLGFyLnJvdyxhci5jb2wsSHQs''@;'; put 'put ''SHIpLHRoaXMucnVuSG9va3MoImFmdGVyU2VsZWN0aW9uQnlQcm9wIix0ci5yb3csZi5jb2xUb1Byb3AodHIuY29sKSxhci5yb3csZi5jb2xUb1Byb3AoYXIuY29sKSxIdCxIciksTnQmJighSHQuaXNUb3VjaGVkKCl8fEh0LmlzVG91Y2hlZCgpJiYhSHQudmFsdWUpJiZiZS5zY3JvbGxUbyh2''@;'; put 'put ''dCk7Y29uc3QgcXI9R3IuaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCksb249R3IuaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCk7cXImJm9uP1RpKHRoaXMucm9vdEVsZW1lbnQsWyJodF9fc2VsZWN0aW9uLS1yb3dzIiwiaHRfX3NlbGVjdGlvbi0tY29sdW1ucyJdKTpxcj8obG8odGhpcy5yb290''@;'; put 'put ''RWxlbWVudCwiaHRfX3NlbGVjdGlvbi0tY29sdW1ucyIpLFRpKHRoaXMucm9vdEVsZW1lbnQsImh0X19zZWxlY3Rpb24tLXJvd3MiKSk6b24/KGxvKHRoaXMucm9vdEVsZW1lbnQsImh0X19zZWxlY3Rpb24tLXJvd3MiKSxUaSh0aGlzLnJvb3RFbGVtZW50LCJodF9fc2VsZWN0aW9uLS1jb2x1''@;'; put 'put ''bW5zIikpOmxvKHRoaXMucm9vdEVsZW1lbnQsWyJodF9fc2VsZWN0aW9uLS1yb3dzIiwiaHRfX3NlbGVjdGlvbi0tY29sdW1ucyJdKSwic2hpZnQiIT09R3IuZ2V0U2VsZWN0aW9uU291cmNlKCkmJnJlLmNsb3NlRWRpdG9yKG51bGwpLGYudmlldy5yZW5kZXIoKSxyZS5wcmVwYXJlRWRpdG9y''@;'; put 'put ''KCl9KSx0aGlzLnNlbGVjdGlvbi5hZGRMb2NhbEhvb2soImJlZm9yZVNldEZvY3VzIix2dD0+e3RoaXMucnVuSG9va3MoImJlZm9yZVNlbGVjdGlvbkZvY3VzU2V0Iix2dC5yb3csdnQuY29sKX0pLHRoaXMuc2VsZWN0aW9uLmFkZExvY2FsSG9vaygiYWZ0ZXJTZXRGb2N1cyIsdnQ9Pntjb25z''@;'; put 'put ''dCBOdD1GZCghMSk7dGhpcy5ydW5Ib29rcygiYWZ0ZXJTZWxlY3Rpb25Gb2N1c1NldCIsdnQucm93LHZ0LmNvbCxOdCksKCFOdC5pc1RvdWNoZWQoKXx8TnQuaXNUb3VjaGVkKCkmJiFOdC52YWx1ZSkmJmJlLnNjcm9sbFRvKHZ0KSxyZS5jbG9zZUVkaXRvcigpLGYudmlldy5yZW5kZXIoKSxy''@;'; put 'put ''ZS5wcmVwYXJlRWRpdG9yKCl9KSx0aGlzLnNlbGVjdGlvbi5hZGRMb2NhbEhvb2soImFmdGVyU2VsZWN0aW9uRmluaXNoZWQiLHZ0PT57Y29uc3QgTnQ9dnQubGVuZ3RoLTEse2Zyb206SHQsdG86SG59PXZ0W050XTt0aGlzLnJ1bkhvb2tzKCJhZnRlclNlbGVjdGlvbkVuZCIsSHQucm93LEh0''@;'; put 'put ''LmNvbCxIbi5yb3csSG4uY29sLE50KSx0aGlzLnJ1bkhvb2tzKCJhZnRlclNlbGVjdGlvbkVuZEJ5UHJvcCIsSHQucm93LGYuY29sVG9Qcm9wKEh0LmNvbCksSG4ucm93LGYuY29sVG9Qcm9wKEhuLmNvbCksTnQpfSksdGhpcy5zZWxlY3Rpb24uYWRkTG9jYWxIb29rKCJhZnRlcklzTXVsdGlw''@;'; put 'put ''bGVTZWxlY3Rpb24iLHZ0PT57Y29uc3QgTnQ9dGhpcy5ydW5Ib29rcygiYWZ0ZXJJc011bHRpcGxlU2VsZWN0aW9uIix2dC52YWx1ZSk7dnQudmFsdWUmJih2dC52YWx1ZT1OdCl9KSx0aGlzLnNlbGVjdGlvbi5hZGRMb2NhbEhvb2soImFmdGVyRGVzZWxlY3QiLCgpPT57cmUuY2xvc2VFZGl0''@;'; put 'put ''b3IoKSxmLnZpZXcucmVuZGVyKCksbG8odGhpcy5yb290RWxlbWVudCxbImh0X19zZWxlY3Rpb24tLXJvd3MiLCJodF9fc2VsZWN0aW9uLS1jb2x1bW5zIl0pLHRoaXMucnVuSG9va3MoImFmdGVyRGVzZWxlY3QiKX0pLHRoaXMuc2VsZWN0aW9uLmFkZExvY2FsSG9vaygiYmVmb3JlSGlnaGxp''@;'; put 'put ''Z2h0U2V0IiwoKT0+dGhpcy5ydW5Ib29rcygiYmVmb3JlU2VsZWN0aW9uSGlnaGxpZ2h0U2V0IikpLmFkZExvY2FsSG9vaygiYmVmb3JlU2V0UmFuZ2VTdGFydCIsZnVuY3Rpb24oKXtmb3IodmFyIHZ0PWFyZ3VtZW50cy5sZW5ndGgsTnQ9bmV3IEFycmF5KHZ0KSxIdD0wO0h0PHZ0O0h0Kysp''@;'; put 'put ''TnRbSHRdPWFyZ3VtZW50c1tIdF07cmV0dXJuIGQucnVuSG9va3MoImJlZm9yZVNldFJhbmdlU3RhcnQiLC4uLk50KX0pLmFkZExvY2FsSG9vaygiYmVmb3JlU2V0UmFuZ2VTdGFydE9ubHkiLGZ1bmN0aW9uKCl7Zm9yKHZhciB2dD1hcmd1bWVudHMubGVuZ3RoLE50PW5ldyBBcnJheSh2dCks''@;'; put 'put ''SHQ9MDtIdDx2dDtIdCsrKU50W0h0XT1hcmd1bWVudHNbSHRdO3JldHVybiBkLnJ1bkhvb2tzKCJiZWZvcmVTZXRSYW5nZVN0YXJ0T25seSIsLi4uTnQpfSkuYWRkTG9jYWxIb29rKCJiZWZvcmVTZXRSYW5nZUVuZCIsZnVuY3Rpb24oKXtmb3IodmFyIHZ0PWFyZ3VtZW50cy5sZW5ndGgsTnQ9''@;'; put 'put ''bmV3IEFycmF5KHZ0KSxIdD0wO0h0PHZ0O0h0KyspTnRbSHRdPWFyZ3VtZW50c1tIdF07cmV0dXJuIGQucnVuSG9va3MoImJlZm9yZVNldFJhbmdlRW5kIiwuLi5OdCl9KS5hZGRMb2NhbEhvb2soImJlZm9yZVNlbGVjdENvbHVtbnMiLGZ1bmN0aW9uKCl7Zm9yKHZhciB2dD1hcmd1bWVudHMu''@;'; put 'put ''bGVuZ3RoLE50PW5ldyBBcnJheSh2dCksSHQ9MDtIdDx2dDtIdCsrKU50W0h0XT1hcmd1bWVudHNbSHRdO3JldHVybiBkLnJ1bkhvb2tzKCJiZWZvcmVTZWxlY3RDb2x1bW5zIiwuLi5OdCl9KS5hZGRMb2NhbEhvb2soImFmdGVyU2VsZWN0Q29sdW1ucyIsZnVuY3Rpb24oKXtmb3IodmFyIHZ0''@;'; put 'put ''PWFyZ3VtZW50cy5sZW5ndGgsTnQ9bmV3IEFycmF5KHZ0KSxIdD0wO0h0PHZ0O0h0KyspTnRbSHRdPWFyZ3VtZW50c1tIdF07cmV0dXJuIGQucnVuSG9va3MoImFmdGVyU2VsZWN0Q29sdW1ucyIsLi4uTnQpfSkuYWRkTG9jYWxIb29rKCJiZWZvcmVTZWxlY3RSb3dzIixmdW5jdGlvbigpe2Zv''@;'; put 'put ''cih2YXIgdnQ9YXJndW1lbnRzLmxlbmd0aCxOdD1uZXcgQXJyYXkodnQpLEh0PTA7SHQ8dnQ7SHQrKylOdFtIdF09YXJndW1lbnRzW0h0XTtyZXR1cm4gZC5ydW5Ib29rcygiYmVmb3JlU2VsZWN0Um93cyIsLi4uTnQpfSkuYWRkTG9jYWxIb29rKCJhZnRlclNlbGVjdFJvd3MiLGZ1bmN0aW9u''@;'; put 'put ''KCl7Zm9yKHZhciB2dD1hcmd1bWVudHMubGVuZ3RoLE50PW5ldyBBcnJheSh2dCksSHQ9MDtIdDx2dDtIdCsrKU50W0h0XT1hcmd1bWVudHNbSHRdO3JldHVybiBkLnJ1bkhvb2tzKCJhZnRlclNlbGVjdFJvd3MiLC4uLk50KX0pLmFkZExvY2FsSG9vaygiYmVmb3JlTW9kaWZ5VHJhbnNmb3Jt''@;'; put 'put ''U3RhcnQiLGZ1bmN0aW9uKCl7Zm9yKHZhciB2dD1hcmd1bWVudHMubGVuZ3RoLE50PW5ldyBBcnJheSh2dCksSHQ9MDtIdDx2dDtIdCsrKU50W0h0XT1hcmd1bWVudHNbSHRdO3JldHVybiBkLnJ1bkhvb2tzKCJtb2RpZnlUcmFuc2Zvcm1TdGFydCIsLi4uTnQpfSkuYWRkTG9jYWxIb29rKCJh''@;'; put 'put ''ZnRlck1vZGlmeVRyYW5zZm9ybVN0YXJ0IixmdW5jdGlvbigpe2Zvcih2YXIgdnQ9YXJndW1lbnRzLmxlbmd0aCxOdD1uZXcgQXJyYXkodnQpLEh0PTA7SHQ8dnQ7SHQrKylOdFtIdF09YXJndW1lbnRzW0h0XTtyZXR1cm4gZC5ydW5Ib29rcygiYWZ0ZXJNb2RpZnlUcmFuc2Zvcm1TdGFydCIs''@;'; put 'put ''Li4uTnQpfSkuYWRkTG9jYWxIb29rKCJiZWZvcmVNb2RpZnlUcmFuc2Zvcm1Gb2N1cyIsZnVuY3Rpb24oKXtmb3IodmFyIHZ0PWFyZ3VtZW50cy5sZW5ndGgsTnQ9bmV3IEFycmF5KHZ0KSxIdD0wO0h0PHZ0O0h0KyspTnRbSHRdPWFyZ3VtZW50c1tIdF07cmV0dXJuIGQucnVuSG9va3MoIm1v''@;'; put 'put ''ZGlmeVRyYW5zZm9ybUZvY3VzIiwuLi5OdCl9KS5hZGRMb2NhbEhvb2soImFmdGVyTW9kaWZ5VHJhbnNmb3JtRm9jdXMiLGZ1bmN0aW9uKCl7Zm9yKHZhciB2dD1hcmd1bWVudHMubGVuZ3RoLE50PW5ldyBBcnJheSh2dCksSHQ9MDtIdDx2dDtIdCsrKU50W0h0XT1hcmd1bWVudHNbSHRdO3Jl''@;'; put 'put ''dHVybiBkLnJ1bkhvb2tzKCJhZnRlck1vZGlmeVRyYW5zZm9ybUZvY3VzIiwuLi5OdCl9KS5hZGRMb2NhbEhvb2soImJlZm9yZU1vZGlmeVRyYW5zZm9ybUVuZCIsZnVuY3Rpb24oKXtmb3IodmFyIHZ0PWFyZ3VtZW50cy5sZW5ndGgsTnQ9bmV3IEFycmF5KHZ0KSxIdD0wO0h0PHZ0O0h0Kysp''@;'; put 'put ''TnRbSHRdPWFyZ3VtZW50c1tIdF07cmV0dXJuIGQucnVuSG9va3MoIm1vZGlmeVRyYW5zZm9ybUVuZCIsLi4uTnQpfSkuYWRkTG9jYWxIb29rKCJhZnRlck1vZGlmeVRyYW5zZm9ybUVuZCIsZnVuY3Rpb24oKXtmb3IodmFyIHZ0PWFyZ3VtZW50cy5sZW5ndGgsTnQ9bmV3IEFycmF5KHZ0KSxI''@;'; put 'put ''dD0wO0h0PHZ0O0h0KyspTnRbSHRdPWFyZ3VtZW50c1tIdF07cmV0dXJuIGQucnVuSG9va3MoImFmdGVyTW9kaWZ5VHJhbnNmb3JtRW5kIiwuLi5OdCl9KS5hZGRMb2NhbEhvb2soImJlZm9yZVJvd1dyYXAiLGZ1bmN0aW9uKCl7Zm9yKHZhciB2dD1hcmd1bWVudHMubGVuZ3RoLE50PW5ldyBB''@;'; put 'put ''cnJheSh2dCksSHQ9MDtIdDx2dDtIdCsrKU50W0h0XT1hcmd1bWVudHNbSHRdO3JldHVybiBkLnJ1bkhvb2tzKCJiZWZvcmVSb3dXcmFwIiwuLi5OdCl9KS5hZGRMb2NhbEhvb2soImJlZm9yZUNvbHVtbldyYXAiLGZ1bmN0aW9uKCl7Zm9yKHZhciB2dD1hcmd1bWVudHMubGVuZ3RoLE50PW5l''@;'; put 'put ''dyBBcnJheSh2dCksSHQ9MDtIdDx2dDtIdCsrKU50W0h0XT1hcmd1bWVudHNbSHRdO3JldHVybiBkLnJ1bkhvb2tzKCJiZWZvcmVDb2x1bW5XcmFwIiwuLi5OdCl9KS5hZGRMb2NhbEhvb2soImluc2VydFJvd1JlcXVpcmUiLHZ0PT50aGlzLmFsdGVyKCJpbnNlcnRfcm93X2Fib3ZlIix2dCwx''@;'; put 'put ''LCJhdXRvIikpLmFkZExvY2FsSG9vaygiaW5zZXJ0Q29sUmVxdWlyZSIsdnQ9PnRoaXMuYWx0ZXIoImluc2VydF9jb2xfc3RhcnQiLHZ0LDEsImF1dG8iKSksWj17YWx0ZXIodnQsTnQpe2xldCBIdD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNb''@;'; put 'put ''Ml06MSxIbj1hcmd1bWVudHMubGVuZ3RoPjM/YXJndW1lbnRzWzNdOnZvaWQgMCx0cj1hcmd1bWVudHMubGVuZ3RoPjQ/YXJndW1lbnRzWzRdOnZvaWQgMDtjb25zdCBhcj1Icj0+e2lmKDA9PT1Ici5sZW5ndGgpcmV0dXJuW107Y29uc3QgcXI9Wy4uLkhyXTtyZXR1cm4gcXIuc29ydCgoeW4s''@;'; put 'put ''cG4pPT57bGV0W3ByXT15bixbJG5dPXBuO3JldHVybiBwcj09PSRuPzA6cHI+JG4/MTotMX0pLHF1KHFyLCh5bixwbik9PntsZXRbcHIsJG5dPXBuO2NvbnN0IGRyPXluW3luLmxlbmd0aC0xXSxbVXIsWm5dPWRyLHNyPVVyK1puO2lmKHByPD1zcil7Y29uc3QgTnI9TWF0aC5tYXgoJG4tKHNy''@;'; put 'put ''LXByKSwwKTtkclsxXSs9TnJ9ZWxzZSB5bi5wdXNoKFtwciwkbl0pO3JldHVybiB5bn0sW3FyWzBdXSl9O3N3aXRjaCh2dCl7Y2FzZSJpbnNlcnRfcm93X2JlbG93IjpjYXNlImluc2VydF9yb3dfYWJvdmUiOmNvbnN0IEhyPWYuY291bnRTb3VyY2VSb3dzKCk7aWYoZHQubWF4Um93cz09PUhy''@;'; put 'put ''KXJldHVybjtjb25zdCBxcj0iaW5zZXJ0X3Jvd19iZWxvdyI9PT12dD8iYmVsb3ciOiJhYm92ZSI7TnQ9TnQ/PygiYmVsb3ciPT09cXI/SHI6MCk7Y29uc3R7ZGVsdGE6b24sc3RhcnRQaHlzaWNhbEluZGV4OnlufT1NLmNyZWF0ZVJvdyhOdCxIdCx7c291cmNlOkhuLG1vZGU6cXJ9KTtHci5z''@;'; put 'put ''aGlmdFJvd3MoZi50b1Zpc3VhbFJvdyh5biksb24pO2JyZWFrO2Nhc2UiaW5zZXJ0X2NvbF9zdGFydCI6Y2FzZSJpbnNlcnRfY29sX2VuZCI6Y29uc3QgcG49Imluc2VydF9jb2xfZW5kIj09PXZ0PyJlbmQiOiJzdGFydCI7TnQ9TnQ/PygiZW5kIj09PXBuP2YuY291bnRTb3VyY2VDb2xzKCk6''@;'; put 'put ''MCk7Y29uc3R7ZGVsdGE6cHIsc3RhcnRQaHlzaWNhbEluZGV4OiRufT1NLmNyZWF0ZUNvbChOdCxIdCx7c291cmNlOkhuLG1vZGU6cG59KTtpZihwcil7aWYoQXJyYXkuaXNBcnJheShkdC5jb2xIZWFkZXJzKSl7Y29uc3QgWm49W2YudG9WaXN1YWxDb2x1bW4oJG4pLDBdO1puLmxlbmd0aCs9''@;'; put 'put ''cHIsQXJyYXkucHJvdG90eXBlLnNwbGljZS5hcHBseShkdC5jb2xIZWFkZXJzLFpuKX1Hci5zaGlmdENvbHVtbnMoZi50b1Zpc3VhbENvbHVtbigkbikscHIpfWJyZWFrO2Nhc2UicmVtb3ZlX3JvdyI6Y29uc3QgZHI9Wm49PntsZXQgc3I9MDtZbihabixOcj0+e2xldFtNcixacl09TnI7Y29u''@;'; put 'put ''c3QgYWE9VWMoTXIpP2YuY291bnRSb3dzKCktMTpNYXRoLm1heChNci1zciwwKTtpZihOdW1iZXIuaXNJbnRlZ2VyKE1yKSYmKE1yPU1hdGgubWF4KE1yLXNyLDApKSwhTS5yZW1vdmVSb3coTXIsWnIsSG4pKXJldHVybjtpZihHci5pc1NlbGVjdGVkKCkpe2NvbnN0e3JvdzpNb309Zi5nZXRT''@;'; put 'put ''ZWxlY3RlZFJhbmdlTGFzdCgpLmhpZ2hsaWdodDtNbz49TXImJk1vPD1Ncitaci0xJiZyZS5jbG9zZUVkaXRvcighMCl9Y29uc3QgSW89Zi5jb3VudFJvd3MoKSxabz1kdC5maXhlZFJvd3NUb3A7Wm8+PWFhKzEmJihkdC5maXhlZFJvd3NUb3AtPU1hdGgubWluKFpyLFpvLWFhKSk7Y29uc3Qg''@;'; put 'put ''cHM9ZHQuZml4ZWRSb3dzQm90dG9tO3BzJiZhYT49SW8tcHMmJihkdC5maXhlZFJvd3NCb3R0b20tPU1hdGgubWluKFpyLHBzKSksMD09PUlvP0dyLmRlc2VsZWN0KCk6IkNvbnRleHRNZW51LnJlbW92ZVJvdyI9PT1Ibj9Hci5yZWZyZXNoKCk6R3Iuc2hpZnRSb3dzKE1yLC1aciksc3IrPVpy''@;'; put 'put ''fSl9O0FycmF5LmlzQXJyYXkoTnQpP2RyKGFyKE50KSk6ZHIoW1tOdCxIdF1dKTticmVhaztjYXNlInJlbW92ZV9jb2wiOmNvbnN0IFVyPVpuPT57bGV0IHNyPTA7WW4oWm4sTnI9PntsZXRbTXIsWnJdPU5yO2NvbnN0IGFhPVVjKE1yKT9mLmNvdW50Q29scygpLTE6TWF0aC5tYXgoTXItc3Is''@;'; put 'put ''MCk7bGV0IEJhPWYudG9QaHlzaWNhbENvbHVtbihhYSk7aWYoTnVtYmVyLmlzSW50ZWdlcihNcikmJihNcj1NYXRoLm1heChNci1zciwwKSksIU0ucmVtb3ZlQ29sKE1yLFpyLEhuKSlyZXR1cm47aWYoR3IuaXNTZWxlY3RlZCgpKXtjb25zdHtjb2w6TW99PWYuZ2V0U2VsZWN0ZWRSYW5nZUxh''@;'; put 'put ''c3QoKS5oaWdobGlnaHQ7TW8+PU1yJiZNbzw9TXIrWnItMSYmcmUuY2xvc2VFZGl0b3IoITApfTA9PT1mLmNvdW50Q29scygpP0dyLmRlc2VsZWN0KCk6IkNvbnRleHRNZW51LnJlbW92ZUNvbHVtbiI9PT1Ibj9Hci5yZWZyZXNoKCk6R3Iuc2hpZnRDb2x1bW5zKE1yLC1acik7Y29uc3QgcHM9''@;'; put 'put ''ZHQuZml4ZWRDb2x1bW5zU3RhcnQ7cHM+PWFhKzEmJihkdC5maXhlZENvbHVtbnNTdGFydC09TWF0aC5taW4oWnIscHMtYWEpKSxBcnJheS5pc0FycmF5KGR0LmNvbEhlYWRlcnMpJiYodHlwZW9mIEJhPiJ1IiYmKEJhPS0xKSxkdC5jb2xIZWFkZXJzLnNwbGljZShCYSxacikpLHNyKz1acn0p''@;'; put 'put ''fTtBcnJheS5pc0FycmF5KE50KT9VcihhcihOdCkpOlVyKFtbTnQsSHRdXSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYFRoZXJlIGlzIG5vIHN1Y2ggYWN0aW9uICIke3Z0fSJgKX10cnx8Wi5hZGp1c3RSb3dzQW5kQ29scygpLGYudmlldy5yZW5kZXIoKSxmLnZpZXcuYWRqdXN0''@;'; put 'put ''RWxlbWVudHNTaXplKCl9LGFkanVzdFJvd3NBbmRDb2xzKCl7Y29uc3QgdnQ9ZHQubWluUm93cyxOdD1kdC5taW5TcGFyZVJvd3MsSHQ9ZHQubWluQ29scyxIbj1kdC5taW5TcGFyZUNvbHM7aWYodnQpe2NvbnN0IHRyPWYuY291bnRSb3dzKCk7dHI8dnQmJk0uY3JlYXRlUm93KHRyLHZ0LXRy''@;'; put 'put ''LHtzb3VyY2U6ImF1dG8ifSl9aWYoTnQpe2NvbnN0IHRyPWYuY291bnRFbXB0eVJvd3MoITApO2lmKHRyPE50KXtjb25zdCBIcj1NYXRoLm1pbihOdC10cixkdC5tYXhSb3dzLWYuY291bnRTb3VyY2VSb3dzKCkpO00uY3JlYXRlUm93KGYuY291bnRSb3dzKCksSHIse3NvdXJjZToiYXV0byJ9''@;'; put 'put ''KX19e2xldCB0cjsoSHR8fEhuKSYmKHRyPWYuY291bnRFbXB0eUNvbHMoITApKTtsZXQgYXI9Zi5jb3VudENvbHMoKTtpZihIdCYmIWR0LmNvbHVtbnMmJmFyPEh0KXtjb25zdCBIcj1IdC1hcjt0cis9SHIsTS5jcmVhdGVDb2woYXIsSHIse3NvdXJjZToiYXV0byJ9KX1pZihIbiYmIWR0LmNv''@;'; put 'put ''bHVtbnMmJiJhcnJheSI9PT1mLmRhdGFUeXBlJiZ0cjxIbil7YXI9Zi5jb3VudENvbHMoKTtjb25zdCBxcj1NYXRoLm1pbihIbi10cixkdC5tYXhDb2xzLWFyKTtNLmNyZWF0ZUNvbChhcixxcix7c291cmNlOiJhdXRvIn0pfX19LHBvcHVsYXRlRnJvbUFycmF5KHZ0LE50LEh0LEhuLHRyKXts''@;'; put 'put ''ZXQgYXIsSHIscXIsb247Y29uc3QgeW49W10scG49e30scHI9W10sJG49dnQucm93LGRyPXZ0LmNvbDtpZihIcj1OdC5sZW5ndGgsMD09PUhyKXJldHVybiExO2xldCBVcj0wLFpuPTA7c3dpdGNoKHFvKEh0KSYmKFVyPUh0LmNvbC1kcisxLFpuPUh0LnJvdy0kbisxKSx0cil7Y2FzZSJzaGlm''@;'; put 'put ''dF9kb3duIjpjb25zdCBzcj1oRShOdCksTnI9c3IubGVuZ3RoLE1yPU1hdGgubWF4KE5yLFVyKSxacj1mLmdldERhdGEoKS5zbGljZSgkbiksYWE9aEUoWnIpLnNsaWNlKGRyLGRyK01yKTtmb3IocXI9MDtxcjxNcjtxcis9MSlpZihxcjxOcil7Zm9yKGFyPTAsSHI9c3JbcXJdLmxlbmd0aDth''@;'; put 'put ''cjxabi1Icjthcis9MSlzcltxcl0ucHVzaChzcltxcl1bYXIlSHJdKTtwci5wdXNoKHNyW3FyXS5jb25jYXQocXI8YWEubGVuZ3RoP2FhW3FyXTpuZXcgQXJyYXkoWnIubGVuZ3RoKS5maWxsKG51bGwpKSl9ZWxzZSBwci5wdXNoKHNyW3FyJU5yXS5jb25jYXQoYWFbcXJdKSk7Zi5wb3B1bGF0''@;'; put 'put ''ZUZyb21BcnJheSgkbixkcixoRShwcikpO2JyZWFrO2Nhc2Uic2hpZnRfcmlnaHQiOmNvbnN0IEJhPU50Lmxlbmd0aCxJbz1NYXRoLm1heChCYSxabiksWm89Zi5nZXREYXRhKCkuc2xpY2UoJG4pLm1hcCh6cz0+enMuc2xpY2UoZHIpKTtmb3IoYXI9MDthcjxJbzthcis9MSlpZihhcjxCYSl7''@;'; put 'put ''Zm9yKHFyPTAsb249TnRbYXJdLmxlbmd0aDtxcjxVci1vbjtxcis9MSlOdFthcl0ucHVzaChOdFthcl1bcXIlb25dKTtpZihhcjxaby5sZW5ndGgpZm9yKGxldCB6cz0wO3pzPFpvW2FyXS5sZW5ndGg7enMrPTEpTnRbYXJdLnB1c2goWm9bYXJdW3pzXSk7ZWxzZSBOdFthcl0ucHVzaCguLi5u''@;'; put 'put ''ZXcgQXJyYXkoWm9bMF0ubGVuZ3RoKS5maWxsKG51bGwpKX1lbHNlIE50LnB1c2goTnRbYXIlSHJdLnNsaWNlKDAsSW8pLmNvbmNhdChab1thcl0pKTtmLnBvcHVsYXRlRnJvbUFycmF5KCRuLGRyLE50KTticmVhaztkZWZhdWx0OnBuLnJvdz12dC5yb3cscG4uY29sPXZ0LmNvbDtsZXQgbmMs''@;'; put 'put ''cHM9MCxNbz0wLGhzPSEwO2NvbnN0IFFvPWZ1bmN0aW9uKEpjKXtsZXQgcXM9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm51bGw7Y29uc3QgQmw9TnRbSmMlTnQubGVuZ3RoXTtyZXR1cm4gbnVsbCE9PXFzP0JsW3FzJUJsLmxlbmd0aF06''@;'; put 'put ''Qmx9LE0zPU50Lmxlbmd0aCxhZD1IdD9IdC5yb3ctdnQucm93KzE6MDtmb3IoSHI9SHQ/YWQ6TWF0aC5tYXgoTTMsYWQpLGFyPTA7YXI8SHImJiEoSHQmJnBuLnJvdz5IdC5yb3cmJmFkPk0zfHwhZHQuYWxsb3dJbnNlcnRSb3cmJnBuLnJvdz5mLmNvdW50Um93cygpLTF8fHBuLnJvdz49ZHQu''@;'; put 'put ''bWF4Um93cyk7YXIrKyl7Y29uc3QgenM9YXItcHMsSmM9UW8oenMpLmxlbmd0aCxxcz1IdD9IdC5jb2wtdnQuY29sKzE6MDtpZihvbj1IdD9xczpNYXRoLm1heChKYyxxcykscG4uY29sPXZ0LmNvbCxuYz1mLmdldENlbGxNZXRhKHBuLnJvdyxwbi5jb2wpLCJDb3B5UGFzdGUucGFzdGUiIT09''@;'; put 'put ''SG4mJiJBdXRvZmlsbC5maWxsIiE9PUhufHwhbmMuc2tpcFJvd09uUGFzdGUpe2ZvcihNbz0wLHFyPTA7cXI8b24mJiEoSHQmJnBuLmNvbD5IdC5jb2wmJnFzPkpjfHwhZHQuYWxsb3dJbnNlcnRDb2x1bW4mJnBuLmNvbD5mLmNvdW50Q29scygpLTF8fHBuLmNvbD49ZHQubWF4Q29scyk7cXIr''@;'; put 'put ''Kyl7aWYobmM9Zi5nZXRDZWxsTWV0YShwbi5yb3cscG4uY29sKSwoIkNvcHlQYXN0ZS5wYXN0ZSI9PT1Ibnx8IkF1dG9maWxsLmZpbGwiPT09SG4pJiZuYy5za2lwQ29sdW1uT25QYXN0ZSl7TW8rPTEscG4uY29sKz0xLG9uKz0xO2NvbnRpbnVlfWlmKG5jLnJlYWRPbmx5JiYiVW5kb1JlZG8u''@;'; put 'put ''dW5kbyIhPT1Ibil7cG4uY29sKz0xO2NvbnRpbnVlfWxldCBlcz1Rbyh6cyxxci1NbyksRTE9Zi5nZXREYXRhQXRDZWxsKHBuLnJvdyxwbi5jb2wpO2lmKG51bGwhPT1lcyYmIm9iamVjdCI9PXR5cGVvZiBlcylpZihBcnJheS5pc0FycmF5KGVzKSYmbnVsbD09PUUxJiYoRTE9W10pLG51bGw9''@;'; put 'put ''PT1FMXx8Im9iamVjdCIhPXR5cGVvZiBFMSlocz0hMTtlbHNle2NvbnN0IHgzPXNfKEFycmF5LmlzQXJyYXkoRTEpP0UxOkUxWzBdfHxFMSksUWc9c18oQXJyYXkuaXNBcnJheShlcyk/ZXM6ZXNbMF18fGVzKTtOTyh4MyxRZyl8fEFycmF5LmlzQXJyYXkoeDMpJiZBcnJheS5pc0FycmF5KFFn''@;'; put 'put ''KT9lcz1nMShlcyk6aHM9ITF9ZWxzZSBudWxsIT09RTEmJiJvYmplY3QiPT10eXBlb2YgRTEmJihocz0hMSk7aHMmJnluLnB1c2goW3BuLnJvdyxwbi5jb2wsZXNdKSxocz0hMCxwbi5jb2wrPTF9cG4ucm93Kz0xfWVsc2UgcHMrPTEscG4ucm93Kz0xLEhyKz0xfWYuc2V0RGF0YUF0Q2VsbCh5''@;'; put 'put ''bixudWxsLG51bGwsSG58fCJwb3B1bGF0ZUZyb21BcnJheSIpfX19LHRoaXMuaW5pdD1mdW5jdGlvbigpe0Quc2V0RGF0YShkdC5kYXRhKSxmLnJ1bkhvb2tzKCJiZWZvcmVJbml0IiksKEFwKCl8fFAkKCkpJiZUaShmLnJvb3RFbGVtZW50LCJtb2JpbGUiKSx0aGlzLnVwZGF0ZVNldHRpbmdz''@;'; put 'put ''KGwsITApLHRoaXMudmlldz1uZXcgeHR0KHRoaXMpO2NvbnN0IHZ0PWR0LnRoZW1lTmFtZXx8TXBlKGYucm9vdEVsZW1lbnQpO2YudXNlVGhlbWUodnQpLGYudmlldy5hZGRDbGFzc05hbWVUb0xpY2Vuc2VFbGVtZW50KGYuZ2V0Q3VycmVudFRoZW1lTmFtZSgpKSxyZT1ZWGUuZ2V0SW5zdGFu''@;'; put 'put ''Y2UoZixkdCxHciksYmU9ZnVuY3Rpb24ganJ0KGMpe2NvbnN0e3NlbGVjdGlvbjpsfT1jO2xldCBhPSExLGQ9ITE7cmV0dXJue3Jlc3VtZSgpe2Q9ITF9LHN1c3BlbmQoKXtkPSEwfSxza2lwTmV4dFNjcm9sbEN5Y2xlKCl7YT0hMH0sc2Nyb2xsVG8oaCl7dmFyIGY7aWYoYXx8ZClyZXR1cm4g''@;'; put 'put ''dm9pZChhPSExKTtsZXQgdjtsLmlzRm9jdXNTZWxlY3Rpb25DaGFuZ2VkKCk/dj1mdW5jdGlvbiBGcnQoYyl7cmV0dXJuIGw9PntjLnNjcm9sbFZpZXdwb3J0VG8obC50b09iamVjdCgpLCgpPT57Y29uc3R7cm93OmEsY29sOmR9PWMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5oaWdobGlnaHQ7''@;'; put 'put ''QV8oYy5nZXRDZWxsKGEsZCwhMCkpfSl9fShjKTpsLmlzU2VsZWN0ZWRCeUNvcm5lcigpP3Y9KCk9Pnt9OmwuaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCk/dj1mdW5jdGlvbiBWcnQoYyl7cmV0dXJuIGw9Pntjb25zdCBhPUZQKGMpLmdldENvbXB1dGVkUm93VGFyZ2V0KGwpO2Muc2Nyb2xsVmll''@;'; put 'put ''d3BvcnRUbyh7cm93OmF9LCgpPT57Y29uc3QgZD0hIWMuZ2V0U2V0dGluZ3MoKS5yb3dIZWFkZXJzO0FfKGMuZ2V0Q2VsbChhLGQ/LTE6MCwhMCkpfSl9fShjKTpsLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpP3Y9ZnVuY3Rpb24gT3J0KGMpe3JldHVybiBsPT57Y29uc3QgYT1GUChjKS5n''@;'; put 'put ''ZXRDb21wdXRlZENvbHVtblRhcmdldChsKTtjLnNjcm9sbFZpZXdwb3J0VG8oe2NvbDphfSwoKT0+e2NvbnN0IGQ9ISFjLmdldFNldHRpbmdzKCkuY29sSGVhZGVycztBXyhjLmdldENlbGwoZD8tMTowLGEsITApKX0pfX0oYyk6MT09PWwuZ2V0U2VsZWN0ZWRSYW5nZSgpLnNpemUoKSYmbC5p''@;'; put 'put ''c011bHRpcGxlKCk/dj1mdW5jdGlvbiBIcnQoYyl7cmV0dXJuIGw9Pntjb25zdCBhPUZQKGMpLGQ9e3JvdzphLmdldENvbXB1dGVkUm93VGFyZ2V0KGwpLGNvbDphLmdldENvbXB1dGVkQ29sdW1uVGFyZ2V0KGwpfTtjLnNjcm9sbFZpZXdwb3J0VG8oZCwoKT0+e2NvbnN0e3JvdzpoLGNvbDpm''@;'; put 'put ''fT1kO0FfKGMuZ2V0Q2VsbChoLGYsITApKX0pfX0oYyk6MSE9PWwuZ2V0U2VsZWN0ZWRSYW5nZSgpLnNpemUoKXx8bC5pc011bHRpcGxlKCk/bC5nZXRTZWxlY3RlZFJhbmdlKCkuc2l6ZSgpPjEmJih2PWZ1bmN0aW9uIE5ydChjKXtyZXR1cm4gbD0+e2NvbnN0IGE9RlAoYyksZD17cm93OmEu''@;'; put 'put ''Z2V0Q29tcHV0ZWRSb3dUYXJnZXQobCksY29sOmEuZ2V0Q29tcHV0ZWRDb2x1bW5UYXJnZXQobCl9O2Muc2Nyb2xsVmlld3BvcnRUbyhkLCgpPT57Y29uc3R7cm93OmgsY29sOmZ9PWQ7QV8oYy5nZXRDZWxsKGgsZiwhMCkpfSl9fShjKSk6dj1mdW5jdGlvbiBCcnQoYyl7cmV0dXJuIGw9Pntj''@;'; put 'put ''b25zdCBhPWMuc2VsZWN0aW9uLmdldFNlbGVjdGlvblNvdXJjZSgpLHtyb3c6ZCxjb2w6aH09bCxmPSgpPT57QV8oYy5nZXRDZWxsKGQsaCwhMCkpfTtpZihkPDAmJmg+PTApYy5zY3JvbGxWaWV3cG9ydFRvKHtjb2w6aH0sZik7ZWxzZSBpZihoPDAmJmQ+PTApYy5zY3JvbGxWaWV3cG9ydFRv''@;'; put 'put ''KHtyb3c6ZH0sZik7ZWxzZXtpZigibW91c2UiPT09YSYmKGg9PT1jLnZpZXcuZ2V0TGFzdFBhcnRpYWxseVZpc2libGVDb2x1bW4oKXx8ZD09PWMudmlldy5nZXRMYXN0UGFydGlhbGx5VmlzaWJsZVJvdygpKSlyZXR1cm47Yy5zY3JvbGxWaWV3cG9ydFRvKHtyb3c6ZCxjb2w6aH0sZil9fX0o''@;'; put 'put ''YyksbnVsbD09PShmPXYpfHx2b2lkIDA9PT1mfHxmKGgpfX19KGYpLGNlPW5ldyAkWGUoZiksY1AodGhpcykmJmZ1bmN0aW9uIFVydChjKXtjb25zdCBsPWZ1bmN0aW9uIFpydChjKXtyZXR1cm4gbD0+e2lmKCFsKXJldHVybiBudWxsO2NvbnN0IGE9RVgoYyksZD1UWChjKTtyZXR1cm4gbC5j''@;'; put 'put ''b2w8YS5jb2wmJihsLmNvbD1hLmNvbCksbC5jb2w+ZC5jb2wmJihsLmNvbD1kLmNvbCksbC5yb3c8YS5yb3cmJihsLnJvdz1hLnJvdyksbC5yb3c+ZC5yb3cmJihsLnJvdz1kLnJvdyksbH19KGMpO2xldCBhO2NvbnN0e2FjdGl2YXRlOmQsZGVhY3RpdmF0ZTpofT1mdW5jdGlvbiB6cnQoYyl7''@;'; put 'put ''bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9O2NvbnN0IGE9Yy5yb290RWxlbWVudCxkPXZwZShjKSxoPXZwZShjKTtyZXR1cm4gZC5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsKCk9Pmw/Lm9uRm9jdXNGcm9tVG9wKCkpLGgu''@;'; put 'put ''YWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLCgpPT5sPy5vbkZvY3VzRnJvbUJvdHRvbSgpKSxhLmZpcnN0Q2hpbGQuYmVmb3JlKGQpLGEubGFzdENoaWxkLmFmdGVyKGgpLHthY3RpdmF0ZSgpe2MuX3JlZ2lzdGVyVGltZW91dCgoKT0+e2QudGFiSW5kZXg9MCxoLnRhYkluZGV4PTB9LDEwKX0s''@;'; put 'put ''ZGVhY3RpdmF0ZSgpe2MuX3JlZ2lzdGVyVGltZW91dCgoKT0+e2QudGFiSW5kZXg9LTEsaC50YWJJbmRleD0tMX0sMTApfX19KGMse29uRm9jdXNGcm9tVG9wKCl7dmFyIGNlO2NvbnN0IGJlPW51bGwhPT0oY2U9bChhKSkmJnZvaWQgMCE9PWNlP2NlOkVYKGMpO2JlJiYoYy5ydW5Ib29rcygi''@;'; put 'put ''bW9kaWZ5Rm9jdXNPblRhYk5hdmlnYXRpb24iLCJmcm9tX2Fib3ZlIixiZSksYy5zZWxlY3RDZWxsKGJlLnJvdyxiZS5jb2wpKSxjLmxpc3RlbigpfSxvbkZvY3VzRnJvbUJvdHRvbSgpe3ZhciBjZTtjb25zdCBiZT1udWxsIT09KGNlPWwoYSkpJiZ2b2lkIDAhPT1jZT9jZTpUWChjKTtiZSYm''@;'; put 'put ''KGMucnVuSG9va3MoIm1vZGlmeUZvY3VzT25UYWJOYXZpZ2F0aW9uIiwiZnJvbV9iZWxvdyIsYmUpLGMuc2VsZWN0Q2VsbChiZS5yb3csYmUuY29sKSksYy5saXN0ZW4oKX19KSxmPXt3cmFwcGVkOiExLGZsaXBwZWQ6ITF9O2xldCB2PSEwLE09ITEsRD0hMTtjLmFkZEhvb2soImFmdGVyTGlz''@;'; put 'put ''dGVuIiwoKT0+aCgpKSxjLmFkZEhvb2soImFmdGVyVW5saXN0ZW4iLCgpPT5kKCkpLGMuYWRkSG9vaygiYWZ0ZXJTZWxlY3Rpb24iLChjZSxiZSxFZSxCZSxxZSk9Pnt2YXIgcnQ7TSYmKGYud3JhcHBlZCYmZi5mbGlwcGVkfHxEKSYmKEQ9ITEscWUudmFsdWU9ITApLHYmJihhPW51bGw9PT0o''@;'; put 'put ''cnQ9Yy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpKXx8dm9pZCAwPT09cnQ/dm9pZCAwOnJ0LmhpZ2hsaWdodCl9KSxjLmFkZEhvb2soImJlZm9yZVJvd1dyYXAiLChjZSxiZSxFZSk9PntmLndyYXBwZWQ9ITAsZi5mbGlwcGVkPUVlfSk7Y29uc3QgcmU9e2tleXM6W1siVGFiIl0sWyJTaGlmdCIs''@;'; put 'put ''IlRhYiJdXSxwcmV2ZW50RGVmYXVsdDohMSxzdG9wUHJvcGFnYXRpb246ITEscmVsYXRpdmVUb0dyb3VwOm1wZSxncm91cDoiZm9jdXNDYXRjaGVyIn07Yy5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJncmlkIikuYWRkU2hvcnRjdXRzKFt7Li4ucmUsY2FsbGJhY2s6KCk9Pntj''@;'; put 'put ''b25zdHt0YWJOYXZpZ2F0aW9uOmNlfT1jLmdldFNldHRpbmdzKCk7TT0hMCxjLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkmJiFjZSYmKHY9ITEpLGNlfHwoRD0hMCl9LHBvc2l0aW9uOiJiZWZvcmUifSx7Li4ucmUsY2FsbGJhY2s6Y2U9Pntjb25zdHt0YWJOYXZpZ2F0aW9uOmJlLGF1dG9XcmFw''@;'; put 'put ''Um93OkVlfT1jLmdldFNldHRpbmdzKCk7aWYoTT0hMSx2PSEwLCFiZXx8IWMuc2VsZWN0aW9uLmlzU2VsZWN0ZWQoKXx8RWUmJmYud3JhcHBlZCYmZi5mbGlwcGVkfHwhRWUmJmYud3JhcHBlZClyZXR1cm4gRWUmJmYud3JhcHBlZCYmZi5mbGlwcGVkJiYoYT1jZS5zaGlmdEtleT9FWChjKTpU''@;'; put 'put ''WChjKSksZnVuY3Rpb24gWigpe2Yud3JhcHBlZD0hMSxmLmZsaXBwZWQ9ITEsYy5kZXNlbGVjdENlbGwoKSxjLnVubGlzdGVuKCl9KCksITE7Y2UucHJldmVudERlZmF1bHQoKX0scG9zaXRpb246ImFmdGVyIn1dKX0oZiksZi5ydW5Ib29rcygiaW5pdCIpLHRoaXMucmVuZGVyKCksRWUmJm51''@;'; put 'put ''bGw9PT1mLnJvb3RFbGVtZW50Lm9mZnNldFBhcmVudCYmVTJlKGYucm9vdEVsZW1lbnQsKCk9PntmLnZpZXcuX3d0Lnd0T3ZlcmxheXMudXBkYXRlTGFzdFNwcmVhZGVyU2l6ZSgpLGYucmVuZGVyKCksZi52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpfSksIm9iamVjdCI9PXR5cGVvZiBFZSYm''@;'; put 'put ''KGYucnVuSG9va3MoImFmdGVyQ2hhbmdlIixFZVswXSxFZVsxXSksRWU9ITEpLGYucnVuSG9va3MoImFmdGVySW5pdCIpfSx0aGlzLl9jcmVhdGVDZWxsQ29vcmRzPWZ1bmN0aW9uKHZ0LE50KXtyZXR1cm4gZi52aWV3Ll93dC5jcmVhdGVDZWxsQ29vcmRzKHZ0LE50KX0sdGhpcy5fY3JlYXRl''@;'; put 'put ''Q2VsbFJhbmdlPWZ1bmN0aW9uKHZ0LE50LEh0KXtyZXR1cm4gZi52aWV3Ll93dC5jcmVhdGVDZWxsUmFuZ2UodnQsTnQsSHQpfSx0aGlzLnZhbGlkYXRlQ2VsbD1mdW5jdGlvbih2dCxOdCxIdCxIbil7bGV0IHRyPWYuZ2V0Q2VsbFZhbGlkYXRvcihOdCk7ZnVuY3Rpb24gYXIoSHIpe2lmKGFy''@;'; put 'put ''Z3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiYhYXJndW1lbnRzWzFdfHwhMD09PU50LmhpZGRlbilyZXR1cm4gdm9pZCBIdChIcik7Y29uc3Qgb249TnQudmlzdWFsQ29sLHluPU50LnZpc3VhbFJvdyxwbj1mLmdldENlbGwoeW4sb24sITApO2lmKHBuJiYiVEgiIT09''@;'; put 'put ''cG4ubm9kZU5hbWUpe2NvbnN0IHByPWYucm93SW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleCh5biksJG49Zi5jb2x1bW5JbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KG9uKTtmLnZpZXcuX3d0LmdldFNldHRpbmcoImNlbGxSZW5kZXJlciIs''@;'; put 'put ''cHIsJG4scG4pfUh0KEhyKX1iMmUodHIpJiYodHI9ZnVuY3Rpb24oSHIpe3JldHVybiBmdW5jdGlvbihxcixvbil7b24oSHIudGVzdChxcikpfX0odHIpKSxtbCh0cik/KHZ0PWYucnVuSG9va3MoImJlZm9yZVZhbGlkYXRlIix2dCxOdC52aXN1YWxSb3csTnQucHJvcCxIbiksZi5fcmVnaXN0''@;'; put 'put ''ZXJJbW1lZGlhdGUoKCk9Pnt0ci5jYWxsKE50LHZ0LEhyPT57ZiYmKEhyPWYucnVuSG9va3MoImFmdGVyVmFsaWRhdGUiLEhyLHZ0LE50LnZpc3VhbFJvdyxOdC5wcm9wLEhuKSxOdC52YWxpZD1IcixhcihIciksZi5ydW5Ib29rcygicG9zdEFmdGVyVmFsaWRhdGUiLEhyLHZ0LE50LnZpc3Vh''@;'; put 'put ''bFJvdyxOdC5wcm9wLEhuKSl9KX0pKTpmLl9yZWdpc3RlckltbWVkaWF0ZSgoKT0+e050LnZhbGlkPSEwLGFyKE50LnZhbGlkLCExKX0pfSx0aGlzLnNldERhdGFBdENlbGw9ZnVuY3Rpb24odnQsTnQsSHQsSG4pe2NvbnN0IHRyPURyKHZ0LE50LEh0KSxhcj1bXTtsZXQgcXIsb24seW4sSHI9''@;'; put 'put ''SG47Zm9yKHFyPTAsb249dHIubGVuZ3RoO3FyPG9uO3FyKyspe2lmKCJvYmplY3QiIT10eXBlb2YgdHJbcXJdKXRocm93IG5ldyBFcnJvcigiTWV0aG9kIGBzZXREYXRhQXRDZWxsYCBhY2NlcHRzIHJvdyBudW1iZXIgb3IgY2hhbmdlcyBhcnJheSBvZiBhcnJheXMgYXMgaXRzIGZpcnN0IHBh''@;'; put 'put ''cmFtZXRlciIpO2lmKCJudW1iZXIiIT10eXBlb2YgdHJbcXJdWzFdKXRocm93IG5ldyBFcnJvcigiTWV0aG9kIGBzZXREYXRhQXRDZWxsYCBhY2NlcHRzIHJvdyBhbmQgY29sdW1uIG51bWJlciBhcyBpdHMgcGFyYW1ldGVycy4gSWYgeW91IHdhbnQgdG8gdXNlIG9iamVjdCBwcm9wZXJ0eSBu''@;'; put 'put ''YW1lLCB1c2UgbWV0aG9kIGBzZXREYXRhQXRSb3dQcm9wYCIpO3luPXRyW3FyXVsxXT49dGhpcy5jb3VudENvbHMoKT90cltxcl1bMV06TS5jb2xUb1Byb3AodHJbcXJdWzFdKSxhci5wdXNoKFt0cltxcl1bMF0seW4sRC5nZXRBdENlbGwodGhpcy50b1BoeXNpY2FsUm93KHRyW3FyXVswXSks''@;'; put 'put ''dHJbcXJdWzFdKSx0cltxcl1bMl1dKX0hSHImJiJvYmplY3QiPT10eXBlb2YgdnQmJihIcj1OdCk7Y29uc3QgcG49JHIoYXIsSHIpO2YucnVuSG9va3MoImFmdGVyU2V0RGF0YUF0Q2VsbCIscG4sSHIpLHpyKHBuLEhyLCgpPT57Sm4ocG4sSHIpfSl9LHRoaXMuc2V0RGF0YUF0Um93UHJvcD1m''@;'; put 'put ''dW5jdGlvbih2dCxOdCxIdCxIbil7Y29uc3QgdHI9RHIodnQsTnQsSHQpLGFyPVtdO2xldCBxcixvbixIcj1Ibjtmb3IocXI9MCxvbj10ci5sZW5ndGg7cXI8b247cXIrKylhci5wdXNoKFt0cltxcl1bMF0sdHJbcXJdWzFdLEQuZ2V0QXRDZWxsKHRoaXMudG9QaHlzaWNhbFJvdyh0cltxcl1b''@;'; put 'put ''MF0pLHRyW3FyXVsxXSksdHJbcXJdWzJdXSk7IUhyJiYib2JqZWN0Ij09dHlwZW9mIHZ0JiYoSHI9TnQpO2NvbnN0IHluPSRyKGFyLEhuKTtmLnJ1bkhvb2tzKCJhZnRlclNldERhdGFBdFJvd1Byb3AiLHluLEhyKSx6cih5bixIciwoKT0+e0puKHluLEhyKX0pfSx0aGlzLmxpc3Rlbj1mdW5j''@;'; put 'put ''dGlvbigpe2YmJiFmLmlzTGlzdGVuaW5nKCkmJihEWC5mb3JFYWNoKHZ0PT57ZiE9PXZ0JiZ2dC51bmxpc3RlbigpfSksa1g9Zi5ndWlkLGYucnVuSG9va3MoImFmdGVyTGlzdGVuIikpfSx0aGlzLnVubGlzdGVuPWZ1bmN0aW9uKCl7dGhpcy5pc0xpc3RlbmluZygpJiYoa1g9bnVsbCxmLnJ1''@;'; put 'put ''bkhvb2tzKCJhZnRlclVubGlzdGVuIikpfSx0aGlzLmlzTGlzdGVuaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIGtYPT09Zi5ndWlkfSx0aGlzLmRlc3Ryb3lFZGl0b3I9ZnVuY3Rpb24oKXtsZXQgTnQ9IShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50''@;'; put 'put ''c1sxXTtyZS5jbG9zZUVkaXRvcihhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdKSxmLnZpZXcucmVuZGVyKCksTnQmJkdyLmlzU2VsZWN0ZWQoKSYmcmUucHJlcGFyZUVkaXRvcigpfSx0aGlzLnBvcHVsYXRlRnJvbUFycmF5PWZ1bmN0aW9u''@;'; put 'put ''KHZ0LE50LEh0LEhuLHRyLGFyLEhyKXtpZigib2JqZWN0IiE9dHlwZW9mIEh0fHwib2JqZWN0IiE9dHlwZW9mIEh0WzBdKXRocm93IG5ldyBFcnJvcigicG9wdWxhdGVGcm9tQXJyYXkgcGFyYW1ldGVyIGBpbnB1dGAgbXVzdCBiZSBhbiBhcnJheSBvZiBhcnJheXMiKTtjb25zdCBxcj0ibnVt''@;'; put 'put ''YmVyIj09dHlwZW9mIEhuP2YuX2NyZWF0ZUNlbGxDb29yZHMoSG4sdHIpOm51bGw7cmV0dXJuIFoucG9wdWxhdGVGcm9tQXJyYXkoZi5fY3JlYXRlQ2VsbENvb3Jkcyh2dCxOdCksSHQscXIsYXIsSHIpfSx0aGlzLnNwbGljZUNvbD1mdW5jdGlvbih2dCxOdCxIdCl7Zm9yKHZhciBIbj1hcmd1''@;'; put 'put ''bWVudHMubGVuZ3RoLHRyPW5ldyBBcnJheShIbj4zP0huLTM6MCksYXI9MzthcjxIbjthcisrKXRyW2FyLTNdPWFyZ3VtZW50c1thcl07cmV0dXJuIE0uc3BsaWNlQ29sKHZ0LE50LEh0LC4uLnRyKX0sdGhpcy5zcGxpY2VSb3c9ZnVuY3Rpb24odnQsTnQsSHQpe2Zvcih2YXIgSG49YXJndW1l''@;'; put 'put ''bnRzLmxlbmd0aCx0cj1uZXcgQXJyYXkoSG4+Mz9Ibi0zOjApLGFyPTM7YXI8SG47YXIrKyl0clthci0zXT1hcmd1bWVudHNbYXJdO3JldHVybiBNLnNwbGljZVJvdyh2dCxOdCxIdCwuLi50cil9LHRoaXMuZ2V0U2VsZWN0ZWQ9ZnVuY3Rpb24oKXtpZihHci5pc1NlbGVjdGVkKCkpcmV0dXJu''@;'; put 'put ''IHlzKEdyLmdldFNlbGVjdGVkUmFuZ2UoKSx2dD0+e2xldHtmcm9tOk50LHRvOkh0fT12dDtyZXR1cm5bTnQucm93LE50LmNvbCxIdC5yb3csSHQuY29sXX0pfSx0aGlzLmdldFNlbGVjdGVkTGFzdD1mdW5jdGlvbigpe2NvbnN0IHZ0PXRoaXMuZ2V0U2VsZWN0ZWQoKTtsZXQgTnQ7cmV0dXJu''@;'; put 'put ''IHZ0JiZ2dC5sZW5ndGg+MCYmKE50PXZ0W3Z0Lmxlbmd0aC0xXSksTnR9LHRoaXMuZ2V0U2VsZWN0ZWRSYW5nZT1mdW5jdGlvbigpe2lmKEdyLmlzU2VsZWN0ZWQoKSlyZXR1cm4gQXJyYXkuZnJvbShHci5nZXRTZWxlY3RlZFJhbmdlKCkpfSx0aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0PWZ1''@;'; put 'put ''bmN0aW9uKCl7Y29uc3QgdnQ9dGhpcy5nZXRTZWxlY3RlZFJhbmdlKCk7bGV0IE50O3JldHVybiB2dCYmdnQubGVuZ3RoPjAmJihOdD12dFt2dC5sZW5ndGgtMV0pLE50fSx0aGlzLmVtcHR5U2VsZWN0ZWRDZWxscz1mdW5jdGlvbih2dCl7aWYoIUdyLmlzU2VsZWN0ZWQoKXx8MD09PXRoaXMu''@;'; put 'put ''Y291bnRSb3dzKCl8fDA9PT10aGlzLmNvdW50Q29scygpKXJldHVybjtjb25zdCBOdD1bXTtZbihHci5nZXRTZWxlY3RlZFJhbmdlKCksSHQ9PntpZihIdC5pc1NpbmdsZUhlYWRlcigpKXJldHVybjtjb25zdCBIbj1IdC5nZXRUb3BTdGFydENvcm5lcigpLHRyPUh0LmdldEJvdHRvbUVuZENv''@;'; put 'put ''cm5lcigpO0dhKEhuLnJvdyx0ci5yb3csYXI9PntHYShIbi5jb2wsdHIuY29sLEhyPT57dGhpcy5nZXRDZWxsTWV0YShhcixIcikucmVhZE9ubHl8fE50LnB1c2goW2FyLEhyLG51bGxdKX0pfSl9KSxOdC5sZW5ndGg+MCYmdGhpcy5zZXREYXRhQXRDZWxsKE50LHZ0KX0sdGhpcy5pc1JlbmRl''@;'; put 'put ''clN1c3BlbmRlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlbmRlclN1c3BlbmRlZENvdW50ZXI+MH0sdGhpcy5zdXNwZW5kUmVuZGVyPWZ1bmN0aW9uKCl7dGhpcy5yZW5kZXJTdXNwZW5kZWRDb3VudGVyKz0xfSx0aGlzLnJlc3VtZVJlbmRlcj1mdW5jdGlvbigpe2NvbnN0IHZ0PXRoaXMu''@;'; put 'put ''cmVuZGVyU3VzcGVuZGVkQ291bnRlci0xO3RoaXMucmVuZGVyU3VzcGVuZGVkQ291bnRlcj1NYXRoLm1heCh2dCwwKSwhdGhpcy5pc1JlbmRlclN1c3BlbmRlZCgpJiZ2dD09PXRoaXMucmVuZGVyU3VzcGVuZGVkQ291bnRlciYmZi52aWV3LnJlbmRlcigpfSx0aGlzLnJlbmRlcj1mdW5jdGlv''@;'; put 'put ''bigpe3RoaXMudmlldyYmKHRoaXMuZm9yY2VGdWxsUmVuZGVyPSEwLHRoaXMuaXNSZW5kZXJTdXNwZW5kZWQoKXx8Zi52aWV3LnJlbmRlcigpKX0sdGhpcy5iYXRjaFJlbmRlcj1mdW5jdGlvbih2dCl7dGhpcy5zdXNwZW5kUmVuZGVyKCk7Y29uc3QgTnQ9dnQoKTtyZXR1cm4gdGhpcy5yZXN1''@;'; put 'put ''bWVSZW5kZXIoKSxOdH0sdGhpcy5pc0V4ZWN1dGlvblN1c3BlbmRlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmV4ZWN1dGlvblN1c3BlbmRlZENvdW50ZXI+MH0sdGhpcy5zdXNwZW5kRXhlY3V0aW9uPWZ1bmN0aW9uKCl7dGhpcy5leGVjdXRpb25TdXNwZW5kZWRDb3VudGVyKz0xLHRoaXMu''@;'; put 'put ''Y29sdW1uSW5kZXhNYXBwZXIuc3VzcGVuZE9wZXJhdGlvbnMoKSx0aGlzLnJvd0luZGV4TWFwcGVyLnN1c3BlbmRPcGVyYXRpb25zKCl9LHRoaXMucmVzdW1lRXhlY3V0aW9uPWZ1bmN0aW9uKCl7bGV0IHZ0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1''@;'; put 'put ''bWVudHNbMF07Y29uc3QgTnQ9dGhpcy5leGVjdXRpb25TdXNwZW5kZWRDb3VudGVyLTE7dGhpcy5leGVjdXRpb25TdXNwZW5kZWRDb3VudGVyPU1hdGgubWF4KE50LDApLCghdGhpcy5pc0V4ZWN1dGlvblN1c3BlbmRlZCgpJiZOdD09PXRoaXMuZXhlY3V0aW9uU3VzcGVuZGVkQ291bnRlcnx8''@;'; put 'put ''dnQpJiYodGhpcy5jb2x1bW5JbmRleE1hcHBlci5yZXN1bWVPcGVyYXRpb25zKCksdGhpcy5yb3dJbmRleE1hcHBlci5yZXN1bWVPcGVyYXRpb25zKCkpfSx0aGlzLmJhdGNoRXhlY3V0aW9uPWZ1bmN0aW9uKHZ0KXtsZXQgTnQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVu''@;'; put 'put ''dHNbMV0mJmFyZ3VtZW50c1sxXTt0aGlzLnN1c3BlbmRFeGVjdXRpb24oKTtjb25zdCBIdD12dCgpO3JldHVybiB0aGlzLnJlc3VtZUV4ZWN1dGlvbihOdCksSHR9LHRoaXMuYmF0Y2g9ZnVuY3Rpb24odnQpe3RoaXMuc3VzcGVuZFJlbmRlcigpLHRoaXMuc3VzcGVuZEV4ZWN1dGlvbigpO2Nv''@;'; put 'put ''bnN0IE50PXZ0KCk7cmV0dXJuIHRoaXMucmVzdW1lRXhlY3V0aW9uKCksdGhpcy5yZXN1bWVSZW5kZXIoKSxOdH0sdGhpcy5yZWZyZXNoRGltZW5zaW9ucz1mdW5jdGlvbigpe2lmKCFmLnZpZXcpcmV0dXJuO2NvbnN0IHZ0PWYudmlldyx7d2lkdGg6TnQsaGVpZ2h0Okh0fT12dC5nZXRMYXN0''@;'; put 'put ''U2l6ZSgpLHt3aWR0aDpIbixoZWlnaHQ6dHJ9PWYucm9vdEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksYXI9SG4hPT1OdHx8dHIhPT1IdDshMSE9PWYucnVuSG9va3MoImJlZm9yZVJlZnJlc2hEaW1lbnNpb25zIix7d2lkdGg6TnQsaGVpZ2h0Okh0fSx7d2lkdGg6SG4saGVpZ2h0''@;'; put 'put ''OnRyfSxhcikmJigoYXJ8fHZ0Ll93dC53dE92ZXJsYXlzLnNjcm9sbGFibGVFbGVtZW50PT09Zi5yb290V2luZG93KSYmKHZ0LnNldExhc3RTaXplKEhuLHRyKSxmLnJlbmRlcigpLHZ0LmFkanVzdEVsZW1lbnRzU2l6ZSgpKSxmLnJ1bkhvb2tzKCJhZnRlclJlZnJlc2hEaW1lbnNpb25zIix7''@;'; put 'put ''d2lkdGg6TnQsaGVpZ2h0Okh0fSx7d2lkdGg6SG4saGVpZ2h0OnRyfSxhcikpfSx0aGlzLnVwZGF0ZURhdGE9ZnVuY3Rpb24odnQsTnQpe2dwZSh2dCxIdD0+e009SHR9LEh0PT57TT1IdCxmLmNvbHVtbkluZGV4TWFwcGVyLmZpdFRvTGVuZ3RoKHRoaXMuZ2V0SW5pdGlhbENvbHVtbkNvdW50''@;'; put 'put ''KCkpLGYucm93SW5kZXhNYXBwZXIuZml0VG9MZW5ndGgodGhpcy5jb3VudFNvdXJjZVJvd3MoKSksWi5hZGp1c3RSb3dzQW5kQ29scygpLEdyLnJlZnJlc2goKX0se2hvdEluc3RhbmNlOmYsZGF0YU1hcDpNLGRhdGFTb3VyY2U6RCxpbnRlcm5hbFNvdXJjZToidXBkYXRlRGF0YSIsc291cmNl''@;'; put 'put ''Ok50LG1ldGFNYW5hZ2VyOnB0LGZpcnN0UnVuOkVlfSl9LHRoaXMubG9hZERhdGE9ZnVuY3Rpb24odnQsTnQpe2dwZSh2dCxIdD0+e009SHR9LCgpPT57cHQuY2xlYXJDZWxsc0NhY2hlKCksZi5pbml0SW5kZXhNYXBwZXJzKCksWi5hZGp1c3RSb3dzQW5kQ29scygpLEdyLnJlZnJlc2goKSxF''@;'; put 'put ''ZSYmKEVlPVtudWxsLCJsb2FkRGF0YSJdKX0se2hvdEluc3RhbmNlOmYsZGF0YU1hcDpNLGRhdGFTb3VyY2U6RCxpbnRlcm5hbFNvdXJjZToibG9hZERhdGEiLHNvdXJjZTpOdCxtZXRhTWFuYWdlcjpwdCxmaXJzdFJ1bjpFZX0pfSx0aGlzLmdldEluaXRpYWxDb2x1bW5Db3VudD1mdW5jdGlv''@;'; put 'put ''bigpe2NvbnN0IHZ0PWR0LmNvbHVtbnM7bGV0IE50PTA7aWYoQXJyYXkuaXNBcnJheSh2dCkpTnQ9dnQubGVuZ3RoO2Vsc2UgaWYobWwodnQpKWlmKCJhcnJheSI9PT1mLmRhdGFUeXBlKXtjb25zdCBIdD10aGlzLmNvdW50U291cmNlQ29scygpO2ZvcihsZXQgSG49MDtIbjxIdDtIbis9MSl2''@;'; put 'put ''dChIbikmJihOdCs9MSl9ZWxzZSgib2JqZWN0Ij09PWYuZGF0YVR5cGV8fCJmdW5jdGlvbiI9PT1mLmRhdGFUeXBlKSYmKE50PU0uY29sVG9Qcm9wQ2FjaGUubGVuZ3RoKTtlbHNlIGlmKFBhKGR0LmRhdGFTY2hlbWEpKXtjb25zdCBIdD1NLmdldFNjaGVtYSgpO050PUFycmF5LmlzQXJyYXko''@;'; put 'put ''SHQpP0h0Lmxlbmd0aDpCTyhIdCl9ZWxzZSBOdD10aGlzLmNvdW50U291cmNlQ29scygpO3JldHVybiBOdH0sdGhpcy5pbml0SW5kZXhNYXBwZXJzPWZ1bmN0aW9uKCl7dGhpcy5jb2x1bW5JbmRleE1hcHBlci5pbml0VG9MZW5ndGgodGhpcy5nZXRJbml0aWFsQ29sdW1uQ291bnQoKSksdGhp''@;'; put 'put ''cy5yb3dJbmRleE1hcHBlci5pbml0VG9MZW5ndGgodGhpcy5jb3VudFNvdXJjZVJvd3MoKSl9LHRoaXMuZ2V0RGF0YT1mdW5jdGlvbih2dCxOdCxIdCxIbil7cmV0dXJuIF9jKHZ0KT9NLmdldEFsbCgpOk0uZ2V0UmFuZ2UoZi5fY3JlYXRlQ2VsbENvb3Jkcyh2dCxOdCksZi5fY3JlYXRlQ2Vs''@;'; put 'put ''bENvb3JkcyhIdCxIbiksTS5ERVNUSU5BVElPTl9SRU5ERVJFUil9LHRoaXMuZ2V0Q29weWFibGVUZXh0PWZ1bmN0aW9uKHZ0LE50LEh0LEhuKXtyZXR1cm4gTS5nZXRDb3B5YWJsZVRleHQoZi5fY3JlYXRlQ2VsbENvb3Jkcyh2dCxOdCksZi5fY3JlYXRlQ2VsbENvb3JkcyhIdCxIbikpfSx0''@;'; put 'put ''aGlzLmdldENvcHlhYmxlRGF0YT1mdW5jdGlvbih2dCxOdCl7cmV0dXJuIE0uZ2V0Q29weWFibGUodnQsTS5jb2xUb1Byb3AoTnQpKX0sdGhpcy5nZXRTY2hlbWE9ZnVuY3Rpb24oKXtyZXR1cm4gTS5nZXRTY2hlbWEoKX0sdGhpcy51cGRhdGVTZXR0aW5ncz1mdW5jdGlvbih2dCl7bGV0IE50''@;'; put 'put ''PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV07Y29uc3QgSHQ9KEVlP2YubG9hZERhdGE6Zi51cGRhdGVEYXRhKS5iaW5kKHRoaXMpO2xldCB0cixhcixIbj0hMTtpZihQYSh2dC5yb3dzKSl0aHJvdyBuZXcgRXJyb3IoJ1RoZSAicm93cyIg''@;'; put 'put ''c2V0dGluZyBpcyBubyBsb25nZXIgc3VwcG9ydGVkLiBEbyB5b3UgbWVhbiBzdGFydFJvd3MsIG1pblJvd3Mgb3IgbWF4Um93cz8nKTtpZihQYSh2dC5jb2xzKSl0aHJvdyBuZXcgRXJyb3IoJ1RoZSAiY29scyIgc2V0dGluZyBpcyBubyBsb25nZXIgc3VwcG9ydGVkLiBEbyB5b3UgbWVhbiBz''@;'; put 'put ''dGFydENvbHMsIG1pbkNvbHMgb3IgbWF4Q29scz8nKTtpZihQYSh2dC5nYW50dENoYXJ0KSl0aHJvdyBuZXcgRXJyb3IoJ1NpbmNlIDguMC4wIHRoZSAiZ2FudHRDaGFydCIgc2V0dGluZyBpcyBubyBsb25nZXIgc3VwcG9ydGVkLicpO2Zvcih0ciBpbiB2dC5sYW5ndWFnZSYmZnVuY3Rpb24g''@;'; put 'put ''R24odnQpe2NvbnN0IE50PUgzZSh2dCk7Z1goTnQpPyhmLnJ1bkhvb2tzKCJiZWZvcmVMYW5ndWFnZUNoYW5nZSIsTnQpLEp0Lmxhbmd1YWdlPU50LGYucnVuSG9va3MoImFmdGVyTGFuZ3VhZ2VDaGFuZ2UiLE50KSk6TjNlKHZ0KX0odnQubGFuZ3VhZ2UpLHZ0KWlmKCJkYXRhIiE9PXRyJiYi''@;'; put 'put ''bGFuZ3VhZ2UiIT09dHIpaWYoImNsYXNzTmFtZSI9PT10cilhaSgiY2xhc3NOYW1lIix2dC5jbGFzc05hbWUpO2Vsc2UgaWYoInRhYmxlQ2xhc3NOYW1lIj09PXRyJiZmLnRhYmxlKWFpKCJ0YWJsZUNsYXNzTmFtZSIsdnQudGFibGVDbGFzc05hbWUpLGYudmlldy5fd3Qud3RPdmVybGF5cy5z''@;'; put 'put ''eW5jT3ZlcmxheVRhYmxlQ2xhc3NOYW1lcygpO2Vsc2UgaWYoU2EuZ2V0U2luZ2xldG9uKCkuaXNSZWdpc3RlcmVkKHRyKXx8U2EuZ2V0U2luZ2xldG9uKCkuaXNEZXByZWNhdGVkKHRyKSl7Y29uc3QgcG49dnRbdHJdO21sKHBuKT8oU2EuZ2V0U2luZ2xldG9uKCkuYWRkQXNGaXhlZCh0cixw''@;'; put 'put ''bixmKSxkdFt0cl09cG4pOkFycmF5LmlzQXJyYXkocG4pJiYoU2EuZ2V0U2luZ2xldG9uKCkuYWRkKHRyLHBuLGYpLGR0W3RyXT1wbil9ZWxzZSFOdCYmVHUodnQsdHIpJiYoSnRbdHJdPXZ0W3RyXSk7dm9pZCAwPT09dnQuZGF0YSYmdm9pZCAwPT09ZHQuZGF0YT9IdChudWxsLCJ1cGRhdGVT''@;'; put 'put ''ZXR0aW5ncyIpOnZvaWQgMCE9PXZ0LmRhdGE/SHQodnQuZGF0YSwidXBkYXRlU2V0dGluZ3MiKTp2b2lkIDAhPT12dC5jb2x1bW5zJiYoTS5jcmVhdGVNYXAoKSxmLmluaXRJbmRleE1hcHBlcnMoKSk7Y29uc3QgSHI9Zi5jb3VudENvbHMoKSxxcj1kdC5jb2x1bW5zO2lmKHFyJiZtbChxcikm''@;'; put 'put ''JihIbj0hMCksKHZvaWQgMCE9PXZ0LmNlbGx8fHZvaWQgMCE9PXZ0LmNlbGxzfHx2b2lkIDAhPT12dC5jb2x1bW5zKSYmcHQuY2xlYXJDYWNoZSgpLEhyPjApZm9yKHRyPTAsYXI9MDt0cjxIcjt0cisrKXtpZihxcil7Y29uc3QgcG49SG4/cXIodHIpOnFyW2FyXTtwbiYmcHQudXBkYXRlQ29s''@;'; put 'put ''dW1uTWV0YShhcixwbil9YXIrPTF9UGEodnQuY2VsbCkmJlhvKHZ0LmNlbGwscG49PntmLnNldENlbGxNZXRhT2JqZWN0KHBuLnJvdyxwbi5jb2wscG4pfSksZi5ydW5Ib29rcygiYWZ0ZXJDZWxsTWV0YVJlc2V0Iik7bGV0IG9uPWYucm9vdEVsZW1lbnQuc3R5bGUuaGVpZ2h0OyIiIT09b24m''@;'; put 'put ''Jihvbj1wYXJzZUludChmLnJvb3RFbGVtZW50LnN0eWxlLmhlaWdodCwxMCkpO2xldCB5bj12dC5oZWlnaHQ7aWYobWwoeW4pJiYoeW49eW4oKSksTnQmJmYucm9vdEVsZW1lbnQuZ2V0QXR0cmlidXRlKCJzdHlsZSIpJiZmLnJvb3RFbGVtZW50LnNldEF0dHJpYnV0ZSgiZGF0YS1pbml0aWFs''@;'; put 'put ''c3R5bGUiLGYucm9vdEVsZW1lbnQuZ2V0QXR0cmlidXRlKCJzdHlsZSIpKSxudWxsPT09eW4pe2NvbnN0IHBuPWYucm9vdEVsZW1lbnQuZ2V0QXR0cmlidXRlKCJkYXRhLWluaXRpYWxzdHlsZSIpO3BuJiYocG4uaW5kZXhPZigiaGVpZ2h0Iik+LTF8fHBuLmluZGV4T2YoIm92ZXJmbG93Iik+''@;'; put 'put ''LTEpP2Yucm9vdEVsZW1lbnQuc2V0QXR0cmlidXRlKCJzdHlsZSIscG4pOihmLnJvb3RFbGVtZW50LnN0eWxlLmhlaWdodD0iIixmLnJvb3RFbGVtZW50LnN0eWxlLm92ZXJmbG93PSIiKX1lbHNlIHZvaWQgMCE9PXluJiYoZi5yb290RWxlbWVudC5zdHlsZS5oZWlnaHQ9aXNOYU4oeW4pP2Ak''@;'; put 'put ''e3lufWA6YCR7eW59cHhgLGYucm9vdEVsZW1lbnQuc3R5bGUub3ZlcmZsb3c9ImhpZGRlbiIpO2lmKHR5cGVvZiB2dC53aWR0aDwidSIpe2xldCBwbj12dC53aWR0aDttbChwbikmJihwbj1wbigpKSxmLnJvb3RFbGVtZW50LnN0eWxlLndpZHRoPWlzTmFOKHBuKT9gJHtwbn1gOmAke3BufXB4''@;'; put 'put ''YH1pZighTnQpe2lmKGYudmlldyl7Zi52aWV3Ll93dC53dFZpZXdwb3J0LnJlc2V0SGFzT3ZlcnNpemVkQ29sdW1uSGVhZGVyc01hcmtlZCgpLGYudmlldy5fd3QuZXhwb3J0U2V0dGluZ3NBc0NsYXNzTmFtZXMoKTtjb25zdCBwbj1mLmdldEN1cnJlbnRUaGVtZU5hbWUoKSxwcj1UdSh2dCwi''@;'; put 'put ''dGhlbWVOYW1lIik7cG4mJnByJiZwbiE9PXZ0LnRoZW1lTmFtZSYmKGYudmlldy5nZXRTdHlsZXNIYW5kbGVyKCkucmVtb3ZlQ2xhc3NOYW1lcygpLGYudmlldy5yZW1vdmVDbGFzc05hbWVGcm9tTGljZW5zZUVsZW1lbnQocG4pKTtjb25zdCAkbj1wciYmdnQudGhlbWVOYW1lfHxNcGUoZi5y''@;'; put 'put ''b290RWxlbWVudCk7Zi51c2VUaGVtZSgkbiksZi52aWV3LmFkZENsYXNzTmFtZVRvTGljZW5zZUVsZW1lbnQoZi5nZXRDdXJyZW50VGhlbWVOYW1lKCkpfWYucnVuSG9va3MoImFmdGVyVXBkYXRlU2V0dGluZ3MiLHZ0KX1aLmFkanVzdFJvd3NBbmRDb2xzKCksZi52aWV3JiYhRWUmJihmLnJl''@;'; put 'put ''bmRlcigpLGYudmlldy5fd3Qud3RPdmVybGF5cy5hZGp1c3RFbGVtZW50c1NpemUoKSksIU50JiZmLnZpZXcmJigiIj09PW9ufHwiIj09PXlufHx2b2lkIDA9PT15bikmJm9uIT09eW4mJmYudmlldy5fd3Qud3RPdmVybGF5cy51cGRhdGVNYWluU2Nyb2xsYWJsZUVsZW1lbnRzKCl9LHRoaXMu''@;'; put 'put ''Z2V0VmFsdWU9ZnVuY3Rpb24oKXtjb25zdCB2dD1mLmdldFNlbGVjdGVkTGFzdCgpO2lmKGR0LmdldFZhbHVlKXtpZihtbChkdC5nZXRWYWx1ZSkpcmV0dXJuIGR0LmdldFZhbHVlLmNhbGwoZik7aWYodnQpcmV0dXJuIGYuZ2V0RGF0YSgpW3Z0WzBdWzBdXVtkdC5nZXRWYWx1ZV19ZWxzZSBp''@;'; put 'put ''Zih2dClyZXR1cm4gZi5nZXREYXRhQXRDZWxsKHZ0WzBdLHZ0WzFdKX0sdGhpcy5nZXRTZXR0aW5ncz1mdW5jdGlvbigpe3JldHVybiBkdH0sdGhpcy5jbGVhcj1mdW5jdGlvbigpe3RoaXMuc2VsZWN0QWxsKCksdGhpcy5lbXB0eVNlbGVjdGVkQ2VsbHMoKX0sdGhpcy5hbHRlcj1mdW5jdGlv''@;'; put 'put ''bih2dCxOdCxIdCxIbix0cil7Wi5hbHRlcih2dCxOdCxIdCxIbix0cil9LHRoaXMuZ2V0Q2VsbD1mdW5jdGlvbih2dCxOdCl7bGV0IEh0PWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl0sSG49TnQsdHI9dnQ7aWYoTnQ+PTApe2lmKHRoaXMu''@;'; put 'put ''Y29sdW1uSW5kZXhNYXBwZXIuaXNIaWRkZW4odGhpcy50b1BoeXNpY2FsQ29sdW1uKE50KSkpcmV0dXJuIG51bGw7SG49dGhpcy5jb2x1bW5JbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KE50KX1pZih2dD49MCl7aWYodGhpcy5yb3dJbmRleE1hcHBlci5pc0hpZGRl''@;'; put 'put ''bih0aGlzLnRvUGh5c2ljYWxSb3codnQpKSlyZXR1cm4gbnVsbDt0cj10aGlzLnJvd0luZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgodnQpfXJldHVybiBudWxsPT09dHJ8fG51bGw9PT1Ibnx8dm9pZCAwPT09dHJ8fHZvaWQgMD09PUhuP251bGw6Zi52aWV3LmdldENl''@;'; put 'put ''bGxBdENvb3JkcyhmLl9jcmVhdGVDZWxsQ29vcmRzKHRyLEhuKSxIdCl9LHRoaXMuZ2V0Q29vcmRzPWZ1bmN0aW9uKHZ0KXtjb25zdCBOdD10aGlzLnZpZXcuX3d0Lnd0VGFibGUuZ2V0Q29vcmRzKHZ0KTtpZihudWxsPT09TnQpcmV0dXJuIG51bGw7Y29uc3R7cm93Okh0LGNvbDpIbn09TnQ7''@;'; put 'put ''bGV0IHRyPUh0LGFyPUhuO3JldHVybiBIdD49MCYmKHRyPXRoaXMucm93SW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChIdCkpLEhuPj0wJiYoYXI9dGhpcy5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KEhuKSksZi5fY3JlYXRl''@;'; put 'put ''Q2VsbENvb3Jkcyh0cixhcil9LHRoaXMuY29sVG9Qcm9wPWZ1bmN0aW9uKHZ0KXtyZXR1cm4gTS5jb2xUb1Byb3AodnQpfSx0aGlzLnByb3BUb0NvbD1mdW5jdGlvbih2dCl7cmV0dXJuIE0ucHJvcFRvQ29sKHZ0KX0sdGhpcy50b1Zpc3VhbFJvdz12dD0+dGhpcy5yb3dJbmRleE1hcHBlci5n''@;'; put 'put ''ZXRWaXN1YWxGcm9tUGh5c2ljYWxJbmRleCh2dCksdGhpcy50b1Zpc3VhbENvbHVtbj12dD0+dGhpcy5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUGh5c2ljYWxJbmRleCh2dCksdGhpcy50b1BoeXNpY2FsUm93PXZ0PT50aGlzLnJvd0luZGV4TWFwcGVyLmdldFBoeXNpY2FsRnJv''@;'; put 'put ''bVZpc3VhbEluZGV4KHZ0KSx0aGlzLnRvUGh5c2ljYWxDb2x1bW49dnQ9PnRoaXMuY29sdW1uSW5kZXhNYXBwZXIuZ2V0UGh5c2ljYWxGcm9tVmlzdWFsSW5kZXgodnQpLHRoaXMuZ2V0RGF0YUF0Q2VsbD1mdW5jdGlvbih2dCxOdCl7cmV0dXJuIE0uZ2V0KHZ0LE0uY29sVG9Qcm9wKE50KSl9''@;'; put 'put ''LHRoaXMuZ2V0RGF0YUF0Um93UHJvcD1mdW5jdGlvbih2dCxOdCl7cmV0dXJuIE0uZ2V0KHZ0LE50KX0sdGhpcy5nZXREYXRhQXRDb2w9ZnVuY3Rpb24odnQpe2NvbnN0IE50PVtdLEh0PU0uZ2V0UmFuZ2UoZi5fY3JlYXRlQ2VsbENvb3JkcygwLHZ0KSxmLl9jcmVhdGVDZWxsQ29vcmRzKGR0''@;'; put 'put ''LmRhdGEubGVuZ3RoLTEsdnQpLE0uREVTVElOQVRJT05fUkVOREVSRVIpO2ZvcihsZXQgSG49MDtIbjxIdC5sZW5ndGg7SG4rPTEpZm9yKGxldCB0cj0wO3RyPEh0W0huXS5sZW5ndGg7dHIrPTEpTnQucHVzaChIdFtIbl1bdHJdKTtyZXR1cm4gTnR9LHRoaXMuZ2V0RGF0YUF0UHJvcD1mdW5j''@;'; put 'put ''dGlvbih2dCl7Y29uc3QgTnQ9W10sSHQ9TS5nZXRSYW5nZShmLl9jcmVhdGVDZWxsQ29vcmRzKDAsTS5wcm9wVG9Db2wodnQpKSxmLl9jcmVhdGVDZWxsQ29vcmRzKGR0LmRhdGEubGVuZ3RoLTEsTS5wcm9wVG9Db2wodnQpKSxNLkRFU1RJTkFUSU9OX1JFTkRFUkVSKTtmb3IobGV0IEhuPTA7''@;'; put 'put ''SG48SHQubGVuZ3RoO0huKz0xKWZvcihsZXQgdHI9MDt0cjxIdFtIbl0ubGVuZ3RoO3RyKz0xKU50LnB1c2goSHRbSG5dW3RyXSk7cmV0dXJuIE50fSx0aGlzLmdldFNvdXJjZURhdGE9ZnVuY3Rpb24odnQsTnQsSHQsSG4pe2xldCB0cjtyZXR1cm4gdHI9dm9pZCAwPT09dnQ/RC5nZXREYXRh''@;'; put 'put ''KCk6RC5nZXRCeVJhbmdlKGYuX2NyZWF0ZUNlbGxDb29yZHModnQsTnQpLGYuX2NyZWF0ZUNlbGxDb29yZHMoSHQsSG4pKSx0cn0sdGhpcy5nZXRTb3VyY2VEYXRhQXJyYXk9ZnVuY3Rpb24odnQsTnQsSHQsSG4pe2xldCB0cjtyZXR1cm4gdHI9dm9pZCAwPT09dnQ/RC5nZXREYXRhKCEwKTpE''@;'; put 'put ''LmdldEJ5UmFuZ2UoZi5fY3JlYXRlQ2VsbENvb3Jkcyh2dCxOdCksZi5fY3JlYXRlQ2VsbENvb3JkcyhIdCxIbiksITApLHRyfSx0aGlzLmdldFNvdXJjZURhdGFBdENvbD1mdW5jdGlvbih2dCl7cmV0dXJuIEQuZ2V0QXRDb2x1bW4odnQpfSx0aGlzLnNldFNvdXJjZURhdGFBdENlbGw9ZnVu''@;'; put 'put ''Y3Rpb24odnQsTnQsSHQsSG4pe2NvbnN0IHRyPURyKHZ0LE50LEh0KSxhcj10aGlzLmhhc0hvb2soImFmdGVyU2V0U291cmNlRGF0YUF0Q2VsbCIpLEhyPVtdO2FyJiZZbih0cixvbj0+e2xldFt5bixwbixwcl09b247SHIucHVzaChbeW4scG4sRC5nZXRBdENlbGwoeW4scG4pLHByXSl9KSxZ''@;'; put 'put ''bih0cixvbj0+e2xldFt5bixwbixwcl09b247RC5zZXRBdENlbGwoeW4scG4scHIpfSksYXImJnRoaXMucnVuSG9va3MoImFmdGVyU2V0U291cmNlRGF0YUF0Q2VsbCIsSHIsSG4pLHRoaXMucmVuZGVyKCk7Y29uc3QgcXI9Zi5nZXRBY3RpdmVFZGl0b3IoKTtxciYmUGEocXIucmVmcmVzaFZh''@;'; put 'put ''bHVlKSYmcXIucmVmcmVzaFZhbHVlKCl9LHRoaXMuZ2V0U291cmNlRGF0YUF0Um93PWZ1bmN0aW9uKHZ0KXtyZXR1cm4gRC5nZXRBdFJvdyh2dCl9LHRoaXMuZ2V0U291cmNlRGF0YUF0Q2VsbD1mdW5jdGlvbih2dCxOdCl7cmV0dXJuIEQuZ2V0QXRDZWxsKHZ0LE50KX0sdGhpcy5nZXREYXRh''@;'; put 'put ''QXRSb3c9ZnVuY3Rpb24odnQpe3JldHVybiBNLmdldFJhbmdlKGYuX2NyZWF0ZUNlbGxDb29yZHModnQsMCksZi5fY3JlYXRlQ2VsbENvb3Jkcyh2dCx0aGlzLmNvdW50Q29scygpLTEpLE0uREVTVElOQVRJT05fUkVOREVSRVIpWzBdfHxbXX0sdGhpcy5nZXREYXRhVHlwZT1mdW5jdGlvbih2''@;'; put 'put ''dCxOdCxIdCxIbil7Y29uc3QgdHI9dm9pZCAwPT09dnQ/WzAsMCx0aGlzLmNvdW50Um93cygpLHRoaXMuY291bnRDb2xzKCldOlt2dCxOdCxIdCxIbl0sW2FyLEhyXT10cjtsZXRbLCxxcixvbl09dHIseW49bnVsbCxwbj1udWxsO3ZvaWQgMD09PXFyJiYocXI9YXIpLHZvaWQgMD09PW9uJiYo''@;'; put 'put ''b249SHIpO2xldCBwcj0ibWl4ZWQiO3JldHVybiBHYShNYXRoLm1heChNYXRoLm1pbihhcixxciksMCksTWF0aC5tYXgoYXIscXIpLCRuPT57bGV0IGRyPSEwO3JldHVybiBHYShNYXRoLm1heChNYXRoLm1pbihIcixvbiksMCksTWF0aC5tYXgoSHIsb24pLFVyPT4ocG49dGhpcy5nZXRDZWxs''@;'; put 'put ''TWV0YSgkbixVcikudHlwZSx5bj9kcj15bj09PXBuOnluPXBuLGRyKSkscHI9ZHI/cG46Im1peGVkIixkcn0pLHByfSx0aGlzLnJlbW92ZUNlbGxNZXRhPWZ1bmN0aW9uKHZ0LE50LEh0KXtjb25zdFtIbix0cl09W3RoaXMudG9QaHlzaWNhbFJvdyh2dCksdGhpcy50b1BoeXNpY2FsQ29sdW1u''@;'; put 'put ''KE50KV07bGV0IGFyPXB0LmdldENlbGxNZXRhS2V5VmFsdWUoSG4sdHIsSHQpOyExIT09Zi5ydW5Ib29rcygiYmVmb3JlUmVtb3ZlQ2VsbE1ldGEiLHZ0LE50LEh0LGFyKSYmKHB0LnJlbW92ZUNlbGxNZXRhKEhuLHRyLEh0KSxmLnJ1bkhvb2tzKCJhZnRlclJlbW92ZUNlbGxNZXRhIix2dCxO''@;'; put 'put ''dCxIdCxhcikpLGFyPW51bGx9LHRoaXMuc3BsaWNlQ2VsbHNNZXRhPWZ1bmN0aW9uKHZ0KXtsZXQgTnQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjA7Zm9yKHZhciBIdD1hcmd1bWVudHMubGVuZ3RoLEhuPW5ldyBBcnJheShIdD4yP0h0''@;'; put 'put ''LTI6MCksdHI9Mjt0cjxIdDt0cisrKUhuW3RyLTJdPWFyZ3VtZW50c1t0cl07aWYoSG4ubGVuZ3RoPjAmJiFBcnJheS5pc0FycmF5KEhuWzBdKSl0aHJvdyBuZXcgRXJyb3IoIlRoZSAzcmQgYXJndW1lbnQgKGNlbGxNZXRhUm93cykgaGFzIHRvIGJlIHBhc3NlZCBhcyBhbiBhcnJheSBvZiBj''@;'; put 'put ''ZWxsIG1ldGEgb2JqZWN0cyBhcnJheS4iKTtOdD4wJiZwdC5yZW1vdmVSb3codGhpcy50b1BoeXNpY2FsUm93KHZ0KSxOdCksSG4ubGVuZ3RoPjAmJlluKEhuLnJldmVyc2UoKSxhcj0+e3B0LmNyZWF0ZVJvdyh0aGlzLnRvUGh5c2ljYWxSb3codnQpKSxZbihhciwoSHIscXIpPT50aGlzLnNl''@;'; put 'put ''dENlbGxNZXRhT2JqZWN0KHZ0LHFyLEhyKSl9KSxmLnJlbmRlcigpfSx0aGlzLnNldENlbGxNZXRhT2JqZWN0PWZ1bmN0aW9uKHZ0LE50LEh0KXsib2JqZWN0Ij09dHlwZW9mIEh0JiZYbyhIdCwoSG4sdHIpPT57dGhpcy5zZXRDZWxsTWV0YSh2dCxOdCx0cixIbil9KX0sdGhpcy5zZXRDZWxs''@;'; put 'put ''TWV0YT1mdW5jdGlvbih2dCxOdCxIdCxIbil7aWYoITE9PT1mLnJ1bkhvb2tzKCJiZWZvcmVTZXRDZWxsTWV0YSIsdnQsTnQsSHQsSG4pKXJldHVybjtsZXQgYXI9dnQsSHI9TnQ7dnQ8dGhpcy5jb3VudFJvd3MoKSYmKGFyPXRoaXMudG9QaHlzaWNhbFJvdyh2dCkpLE50PHRoaXMuY291bnRD''@;'; put 'put ''b2xzKCkmJihIcj10aGlzLnRvUGh5c2ljYWxDb2x1bW4oTnQpKSxwdC5zZXRDZWxsTWV0YShhcixIcixIdCxIbiksZi5ydW5Ib29rcygiYWZ0ZXJTZXRDZWxsTWV0YSIsdnQsTnQsSHQsSG4pfSx0aGlzLmdldENlbGxzTWV0YT1mdW5jdGlvbigpe3JldHVybiBwdC5nZXRDZWxsc01ldGEoKX0s''@;'; put 'put ''dGhpcy5nZXRDZWxsTWV0YT1mdW5jdGlvbih2dCxOdCl7bGV0IEh0PWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp7c2tpcE1ldGFFeHRlbnNpb246ITF9LEhuPXRoaXMudG9QaHlzaWNhbFJvdyh2dCksdHI9dGhpcy50b1BoeXNpY2FsQ29s''@;'; put 'put ''dW1uKE50KTtyZXR1cm4gbnVsbD09PUhuJiYoSG49dnQpLG51bGw9PT10ciYmKHRyPU50KSxwdC5nZXRDZWxsTWV0YShIbix0cix7dmlzdWFsUm93OnZ0LHZpc3VhbENvbHVtbjpOdCwuLi5IdH0pfSx0aGlzLmdldENvbHVtbk1ldGE9ZnVuY3Rpb24odnQpe3JldHVybiBwdC5nZXRDb2x1bW5N''@;'; put 'put ''ZXRhKHRoaXMudG9QaHlzaWNhbENvbHVtbih2dCkpfSx0aGlzLmdldENlbGxNZXRhQXRSb3c9ZnVuY3Rpb24odnQpe3JldHVybiBwdC5nZXRDZWxsc01ldGFBdFJvdyh2dCl9LHRoaXMuaXNDb2x1bW5Nb2RpZmljYXRpb25BbGxvd2VkPWZ1bmN0aW9uKCl7cmV0dXJuISgib2JqZWN0Ij09PWYu''@;'; put 'put ''ZGF0YVR5cGV8fGR0LmNvbHVtbnMpfSx0aGlzLmdldENlbGxSZW5kZXJlcj1mdW5jdGlvbih2dCxOdCl7Y29uc3QgSHQ9Im51bWJlciI9PXR5cGVvZiB2dD9mLmdldENlbGxNZXRhKHZ0LE50KS5yZW5kZXJlcjp2dC5yZW5kZXJlcjtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIEh0P1FPKEh0KTpf''@;'; put 'put ''YyhIdCk/UU8oInRleHQiKTpIdH0sdGhpcy5nZXRDZWxsRWRpdG9yPWZ1bmN0aW9uKHZ0LE50KXtjb25zdCBIdD0ibnVtYmVyIj09dHlwZW9mIHZ0P2YuZ2V0Q2VsbE1ldGEodnQsTnQpLmVkaXRvcjp2dC5lZGl0b3I7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBIdD9XTyhIdCk6X2MoSHQpP1dP''@;'; put 'put ''KCJ0ZXh0Iik6SHR9LHRoaXMuZ2V0Q2VsbFZhbGlkYXRvcj1mdW5jdGlvbih2dCxOdCl7Y29uc3QgSHQ9Im51bWJlciI9PXR5cGVvZiB2dD9mLmdldENlbGxNZXRhKHZ0LE50KS52YWxpZGF0b3I6dnQudmFsaWRhdG9yO3JldHVybiJzdHJpbmciPT10eXBlb2YgSHQ/cksoSHQpOkh0fSx0aGlz''@;'; put 'put ''LnZhbGlkYXRlQ2VsbHM9ZnVuY3Rpb24odnQpe3RoaXMuX3ZhbGlkYXRlQ2VsbHModnQpfSx0aGlzLnZhbGlkYXRlUm93cz1mdW5jdGlvbih2dCxOdCl7aWYoIUFycmF5LmlzQXJyYXkodnQpKXRocm93IG5ldyBFcnJvcigidmFsaWRhdGVSb3dzIHBhcmFtZXRlciBgcm93c2AgbXVzdCBiZSBh''@;'; put 'put ''biBhcnJheSIpO3RoaXMuX3ZhbGlkYXRlQ2VsbHMoTnQsdnQpfSx0aGlzLnZhbGlkYXRlQ29sdW1ucz1mdW5jdGlvbih2dCxOdCl7aWYoIUFycmF5LmlzQXJyYXkodnQpKXRocm93IG5ldyBFcnJvcigidmFsaWRhdGVDb2x1bW5zIHBhcmFtZXRlciBgY29sdW1uc2AgbXVzdCBiZSBhbiBhcnJh''@;'; put 'put ''eSIpO3RoaXMuX3ZhbGlkYXRlQ2VsbHMoTnQsdm9pZCAwLHZ0KX0sdGhpcy5fdmFsaWRhdGVDZWxscz1mdW5jdGlvbih2dCxOdCxIdCl7Y29uc3QgSG49bmV3IF9pO3Z0JiYoSG4ub25RdWV1ZUVtcHR5PXZ0KTtsZXQgdHI9Zi5jb3VudFJvd3MoKS0xO2Zvcig7dHI+PTA7KXtpZih2b2lkIDAh''@;'; put 'put ''PT1OdCYmLTE9PT1OdC5pbmRleE9mKHRyKSl7dHItPTE7Y29udGludWV9bGV0IGFyPWYuY291bnRDb2xzKCktMTtmb3IoO2FyPj0wOyl2b2lkIDA9PT1IdHx8LTEhPT1IdC5pbmRleE9mKGFyKT8oSG4uYWRkVmFsaWRhdG9yVG9RdWV1ZSgpLGYudmFsaWRhdGVDZWxsKGYuZ2V0RGF0YUF0Q2Vs''@;'; put 'put ''bCh0cixhciksZi5nZXRDZWxsTWV0YSh0cixhciksSHI9PntpZigiYm9vbGVhbiIhPXR5cGVvZiBIcil0aHJvdyBuZXcgRXJyb3IoIlZhbGlkYXRpb24gZXJyb3I6IHJlc3VsdCBpcyBub3QgYm9vbGVhbiIpOyExPT09SHImJihIbi52YWxpZD0hMSksSG4ucmVtb3ZlVmFsaWRhdG9yRm9ybVF1''@;'; put 'put ''ZXVlKCl9LCJ2YWxpZGF0ZUNlbGxzIiksYXItPTEpOmFyLT0xO3RyLT0xfUhuLmNoZWNrSWZRdWV1ZUlzRW1wdHkoKX0sdGhpcy5nZXRSb3dIZWFkZXI9ZnVuY3Rpb24odnQpe2xldCBOdD1kdC5yb3dIZWFkZXJzLEh0PXZ0O3JldHVybiB2b2lkIDAhPT1IdCYmKEh0PWYucnVuSG9va3MoIm1v''@;'; put 'put ''ZGlmeVJvd0hlYWRlciIsSHQpKSx2b2lkIDA9PT1IdD8oTnQ9W10sR2EoZi5jb3VudFJvd3MoKS0xLEhuPT57TnQucHVzaChmLmdldFJvd0hlYWRlcihIbikpfSkpOkFycmF5LmlzQXJyYXkoTnQpJiZ2b2lkIDAhPT1OdFtIdF0/TnQ9TnRbSHRdOm1sKE50KT9OdD1OdChIdCk6TnQmJiJzdHJp''@;'; put 'put ''bmciIT10eXBlb2YgTnQmJiJudW1iZXIiIT10eXBlb2YgTnQmJihOdD1IdCsxKSxOdH0sdGhpcy5oYXNSb3dIZWFkZXJzPWZ1bmN0aW9uKCl7cmV0dXJuISFkdC5yb3dIZWFkZXJzfSx0aGlzLmhhc0NvbEhlYWRlcnM9ZnVuY3Rpb24oKXtpZihudWxsIT1kdC5jb2xIZWFkZXJzKXJldHVybiEh''@;'; put 'put ''ZHQuY29sSGVhZGVycztmb3IobGV0IHZ0PTAsTnQ9Zi5jb3VudENvbHMoKTt2dDxOdDt2dCsrKWlmKGYuZ2V0Q29sSGVhZGVyKHZ0KSlyZXR1cm4hMDtyZXR1cm4hMX0sdGhpcy5nZXRDb2xIZWFkZXI9ZnVuY3Rpb24odnQpe2xldCBOdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFy''@;'; put 'put ''Z3VtZW50c1sxXT9hcmd1bWVudHNbMV06LTE7Y29uc3QgSHQ9Zi5ydW5Ib29rcygibW9kaWZ5Q29sSGVhZGVyIix2dCk7aWYodm9pZCAwPT09SHQpe2NvbnN0IHFyPVtdLG9uPWYuY291bnRDb2xzKCk7Zm9yKGxldCB5bj0wO3luPG9uO3luKyspcXIucHVzaChmLmdldENvbEhlYWRlcih5bikp''@;'; put 'put ''O3JldHVybiBxcn1sZXQgSG49ZHQuY29sSGVhZGVycztjb25zdCBhcj1mLnRvUGh5c2ljYWxDb2x1bW4oSHQpLEhyPWZ1bmN0aW9uKHFyKXtjb25zdCBvbj1bXSx5bj1mLmNvdW50Q29scygpO2xldCBwbj0wO2Zvcig7cG48eW47cG4rKyltbChkdC5jb2x1bW5zKSYmZHQuY29sdW1ucyhwbikm''@;'; put 'put ''Jm9uLnB1c2gocG4pO3JldHVybiBvbltxcl19KGFyKTtyZXR1cm4hMT09PWR0LmNvbEhlYWRlcnM/SG49bnVsbDpkdC5jb2x1bW5zJiZtbChkdC5jb2x1bW5zKSYmZHQuY29sdW1ucyhIcikmJmR0LmNvbHVtbnMoSHIpLnRpdGxlP0huPWR0LmNvbHVtbnMoSHIpLnRpdGxlOmR0LmNvbHVtbnMm''@;'; put 'put ''JmR0LmNvbHVtbnNbYXJdJiZkdC5jb2x1bW5zW2FyXS50aXRsZT9Ibj1kdC5jb2x1bW5zW2FyXS50aXRsZTpBcnJheS5pc0FycmF5KGR0LmNvbEhlYWRlcnMpJiZ2b2lkIDAhPT1kdC5jb2xIZWFkZXJzW2FyXT9Ibj1kdC5jb2xIZWFkZXJzW2FyXTptbChkdC5jb2xIZWFkZXJzKT9Ibj1kdC5j''@;'; put 'put ''b2xIZWFkZXJzKGFyKTpkdC5jb2xIZWFkZXJzJiYic3RyaW5nIiE9dHlwZW9mIGR0LmNvbEhlYWRlcnMmJiJudW1iZXIiIT10eXBlb2YgZHQuY29sSGVhZGVycyYmKEhuPWhQKEh0KSksSG49Zi5ydW5Ib29rcygibW9kaWZ5Q29sdW1uSGVhZGVyVmFsdWUiLEhuLHZ0LE50KSxIbn0sdGhpcy5f''@;'; put 'put ''Z2V0Q29sV2lkdGhGcm9tU2V0dGluZ3M9ZnVuY3Rpb24odnQpe2xldCBOdDtpZih2dD49MCYmKE50PWYuZ2V0Q2VsbE1ldGEoMCx2dCkud2lkdGgpLCh2b2lkIDA9PT1OdHx8TnQ9PT1kdC53aWR0aCkmJihOdD1kdC5jb2xXaWR0aHMpLG51bGwhPU50KXtzd2l0Y2godHlwZW9mIE50KXtjYXNl''@;'; put 'put ''Im9iamVjdCI6TnQ9TnRbdnRdO2JyZWFrO2Nhc2UiZnVuY3Rpb24iOk50PU50KHZ0KX0ic3RyaW5nIj09dHlwZW9mIE50JiYoTnQ9cGFyc2VJbnQoTnQsMTApKX1yZXR1cm4gTnR9LHRoaXMuZ2V0Q29sV2lkdGg9ZnVuY3Rpb24odnQsTnQpe2xldCBIdD1mLl9nZXRDb2xXaWR0aEZyb21TZXR0''@;'; put 'put ''aW5ncyh2dCk7cmV0dXJuIEh0PWYucnVuSG9va3MoIm1vZGlmeUNvbFdpZHRoIixIdCx2dCxOdCksdm9pZCAwPT09SHQmJihIdD1fXyksSHR9LHRoaXMuX2dldFJvd0hlaWdodEZyb21TZXR0aW5ncz1mdW5jdGlvbih2dCl7Y29uc3QgTnQ9dGhpcy52aWV3LmdldERlZmF1bHRSb3dIZWlnaHQo''@;'; put 'put ''KTtsZXQgSHQ9ZHQucm93SGVpZ2h0cztpZihudWxsIT1IdCl7c3dpdGNoKHR5cGVvZiBIdCl7Y2FzZSJvYmplY3QiOkh0PUh0W3Z0XTticmVhaztjYXNlImZ1bmN0aW9uIjpIdD1IdCh2dCl9InN0cmluZyI9PXR5cGVvZiBIdCYmKEh0PXBhcnNlSW50KEh0LDEwKSl9cmV0dXJuIG51bGwhPUh0''@;'; put 'put ''JiZIdDxOdD9OdDpIdH0sdGhpcy5nZXRSb3dIZWlnaHQ9ZnVuY3Rpb24odnQsTnQpe2xldCBIdD1mLl9nZXRSb3dIZWlnaHRGcm9tU2V0dGluZ3ModnQpO3JldHVybiBIdD1mLnJ1bkhvb2tzKCJtb2RpZnlSb3dIZWlnaHQiLEh0LHZ0LE50KSxIdH0sdGhpcy5jb3VudFNvdXJjZVJvd3M9ZnVu''@;'; put 'put ''Y3Rpb24oKXtyZXR1cm4gRC5jb3VudFJvd3MoKX0sdGhpcy5jb3VudFNvdXJjZUNvbHM9ZnVuY3Rpb24oKXtyZXR1cm4gRC5jb3VudEZpcnN0Um93S2V5cygpfSx0aGlzLmNvdW50Um93cz1mdW5jdGlvbigpe3JldHVybiBNLmdldExlbmd0aCgpfSx0aGlzLmNvdW50Q29scz1mdW5jdGlvbigp''@;'; put 'put ''e2NvbnN0IHZ0PWR0Lm1heENvbHMsTnQ9dGhpcy5jb2x1bW5JbmRleE1hcHBlci5nZXROb3RUcmltbWVkSW5kZXhlc0xlbmd0aCgpO3JldHVybiBNYXRoLm1pbih2dCxOdCl9LHRoaXMuY291bnRSZW5kZXJlZFJvd3M9ZnVuY3Rpb24oKXtyZXR1cm4gZi52aWV3Ll93dC5kcmF3bj9mLnZpZXcu''@;'; put 'put ''X3d0Lnd0VGFibGUuZ2V0UmVuZGVyZWRSb3dzQ291bnQoKTotMX0sdGhpcy5jb3VudFZpc2libGVSb3dzPWZ1bmN0aW9uKCl7cmV0dXJuIGYudmlldy5fd3QuZHJhd24/Zi52aWV3Ll93dC53dFRhYmxlLmdldFZpc2libGVSb3dzQ291bnQoKTotMX0sdGhpcy5jb3VudFJlbmRlcmVkQ29scz1m''@;'; put 'put ''dW5jdGlvbigpe3JldHVybiBmLnZpZXcuX3d0LmRyYXduP2Yudmlldy5fd3Qud3RUYWJsZS5nZXRSZW5kZXJlZENvbHVtbnNDb3VudCgpOi0xfSx0aGlzLmNvdW50VmlzaWJsZUNvbHM9ZnVuY3Rpb24oKXtyZXR1cm4gZi52aWV3Ll93dC5kcmF3bj9mLnZpZXcuX3d0Lnd0VGFibGUuZ2V0Vmlz''@;'; put 'put ''aWJsZUNvbHVtbnNDb3VudCgpOi0xfSx0aGlzLmNvdW50Um93SGVhZGVycz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnZpZXcuZ2V0Um93SGVhZGVyc0NvdW50KCl9LHRoaXMuY291bnRDb2xIZWFkZXJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmlldy5nZXRDb2x1bW5IZWFkZXJzQ291bnQo''@;'; put 'put ''KX0sdGhpcy5jb3VudEVtcHR5Um93cz1mdW5jdGlvbigpe2xldCB2dD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdLE50PTA7cmV0dXJuIFgkKGYuY291bnRSb3dzKCktMSxIdD0+e2lmKGYuaXNFbXB0eVJvdyhIdCkpTnQrPTE7ZWxzZSBp''@;'; put 'put ''ZighMD09PXZ0KXJldHVybiExfSksTnR9LHRoaXMuY291bnRFbXB0eUNvbHM9ZnVuY3Rpb24oKXtsZXQgdnQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXSxOdD0wO3JldHVybiBYJChmLmNvdW50Q29scygpLTEsSHQ9PntpZihmLmlzRW1w''@;'; put 'put ''dHlDb2woSHQpKU50Kz0xO2Vsc2UgaWYoITA9PT12dClyZXR1cm4hMX0pLE50fSx0aGlzLmlzRW1wdHlSb3c9ZnVuY3Rpb24odnQpe3JldHVybiBkdC5pc0VtcHR5Um93LmNhbGwoZix2dCl9LHRoaXMuaXNFbXB0eUNvbD1mdW5jdGlvbih2dCl7cmV0dXJuIGR0LmlzRW1wdHlDb2wuY2FsbChm''@;'; put 'put ''LHZ0KX0sdGhpcy5zZWxlY3RDZWxsPWZ1bmN0aW9uKHZ0LE50LEh0LEhuKXtsZXQgdHI9IShhcmd1bWVudHMubGVuZ3RoPjQmJnZvaWQgMCE9PWFyZ3VtZW50c1s0XSl8fGFyZ3VtZW50c1s0XSxhcj0hKGFyZ3VtZW50cy5sZW5ndGg+NSYmdm9pZCAwIT09YXJndW1lbnRzWzVdKXx8YXJndW1l''@;'; put 'put ''bnRzWzVdO3JldHVybiFfYyh2dCkmJiFfYyhOdCkmJnRoaXMuc2VsZWN0Q2VsbHMoW1t2dCxOdCxIdCxIbl1dLHRyLGFyKX0sdGhpcy5zZWxlY3RDZWxscz1mdW5jdGlvbigpe2xldCB2dD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06W1td''@;'; put 'put ''XSxIdD0hKGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdKXx8YXJndW1lbnRzWzJdOyExPT09KCEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0pfHxhcmd1bWVudHNbMV0pJiZiZS5zdXNwZW5kKCk7Y29uc3QgSG49R3Iuc2VsZWN0Q2Vs''@;'; put 'put ''bHModnQpO3JldHVybiBIbiYmSHQmJmYubGlzdGVuKCksYmUucmVzdW1lKCksSG59LHRoaXMuc2VsZWN0Q29sdW1ucz1mdW5jdGlvbih2dCl7cmV0dXJuIEdyLnNlbGVjdENvbHVtbnModnQsYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnZ0''@;'; put 'put ''LGFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwKX0sdGhpcy5zZWxlY3RSb3dzPWZ1bmN0aW9uKHZ0KXtyZXR1cm4gR3Iuc2VsZWN0Um93cyh2dCxhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06dnQsYXJndW1lbnRzLmxl''@;'; put 'put ''bmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDApfSx0aGlzLmRlc2VsZWN0Q2VsbD1mdW5jdGlvbigpe0dyLmRlc2VsZWN0KCl9LHRoaXMuc2VsZWN0QWxsPWZ1bmN0aW9uKCl7bGV0IHZ0PSEoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0pfHxhcmd1bWVudHNbMF0s''@;'; put 'put ''TnQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnZ0LEh0PWFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwO2JlLnNraXBOZXh0U2Nyb2xsQ3ljbGUoKSxHci5zZWxlY3RBbGwodnQsTnQsSHQpfTtjb25zdCB3aT0odnQs''@;'; put 'put ''TnQpPT52dC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoTnQsMSwhMCk7dGhpcy5zY3JvbGxWaWV3cG9ydFRvPWZ1bmN0aW9uKHZ0LE50KXt2YXIgSHQ7Im51bWJlciI9PXR5cGVvZiB2dCYmKHZ0PXtyb3c6YXJndW1lbnRzWzBdLGNvbDphcmd1bWVudHNbMV0sdmVydGljYWxTbmFwOmFyZ3Vt''@;'; put 'put ''ZW50c1syXT8iYm90dG9tIjoidG9wIixob3Jpem9udGFsU25hcDphcmd1bWVudHNbM10/ImVuZCI6InN0YXJ0Iixjb25zaWRlckhpZGRlbkluZGV4ZXM6bnVsbD09PShIdD1hcmd1bWVudHNbNF0pfHx2b2lkIDA9PT1IdHx8SHR9KTtjb25zdHtyb3c6SG4sY29sOnRyLGNvbnNpZGVySGlkZGVu''@;'; put 'put ''SW5kZXhlczphcn09dnQ/P3t9O2xldCBIcj1Ibixxcj10cjtpZihtbChOdCkmJnRoaXMuYWRkSG9va09uY2UoImFmdGVyU2Nyb2xsIixOdCksdm9pZCAwPT09YXJ8fGFyKXtjb25zdCBwcj1OdW1iZXIuaXNJbnRlZ2VyKEhuKSYmSG4+PTAsJG49TnVtYmVyLmlzSW50ZWdlcih0cikmJnRyPj0w''@;'; put 'put ''LGRyPXByP3dpKHRoaXMucm93SW5kZXhNYXBwZXIsSG4pOnZvaWQgMCxVcj0kbj93aSh0aGlzLmNvbHVtbkluZGV4TWFwcGVyLHRyKTp2b2lkIDA7aWYobnVsbD09PWRyfHxudWxsPT09VXIpcmV0dXJuITE7SHI9cHI/Zi5yb3dJbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbElu''@;'; put 'put ''ZGV4KGRyKTpIbixxcj0kbj9mLmNvbHVtbkluZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoVXIpOnRyfWNvbnN0IG9uPU51bWJlci5pc0ludGVnZXIoSHIpLHluPU51bWJlci5pc0ludGVnZXIocXIpO2xldCBwbj0hMTtyZXR1cm4gb24mJkhyPj0wJiZ5biYmcXI+PTA/''@;'; put 'put ''cG49Zi52aWV3LnNjcm9sbFZpZXdwb3J0KGYuX2NyZWF0ZUNlbGxDb29yZHMoSHIscXIpLHZ0Lmhvcml6b250YWxTbmFwLHZ0LnZlcnRpY2FsU25hcCk6b24mJkhyPj0wJiYoeW4mJnFyPDB8fCF5bik/cG49Zi52aWV3LnNjcm9sbFZpZXdwb3J0VmVydGljYWxseShIcix2dC52ZXJ0aWNhbFNu''@;'; put 'put ''YXApOnluJiZxcj49MCYmKG9uJiZIcjwwfHwhb24pJiYocG49Zi52aWV3LnNjcm9sbFZpZXdwb3J0SG9yaXpvbnRhbGx5KHFyLHZ0Lmhvcml6b250YWxTbmFwKSksbWwoTnQpJiYocG4/dGhpcy52aWV3LnJlbmRlcigpOih0aGlzLnJlbW92ZUhvb2soImFmdGVyU2Nyb2xsIixOdCksdGhpcy5f''@;'; put 'put ''cmVnaXN0ZXJNaWNyb3Rhc2soKCk9Pk50KCkpKSkscG59LHRoaXMuc2Nyb2xsVG9Gb2N1c2VkQ2VsbD1mdW5jdGlvbih2dCl7aWYoIXRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWQoKSlyZXR1cm4hMTttbCh2dCkmJnRoaXMuYWRkSG9va09uY2UoImFmdGVyU2Nyb2xsIix2dCk7Y29uc3R7aGln''@;'; put 'put ''aGxpZ2h0Ok50fT10aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksSHQ9dGhpcy5zY3JvbGxWaWV3cG9ydFRvKE50LnRvT2JqZWN0KCkpO3JldHVybiBIdD90aGlzLnZpZXcucmVuZGVyKCk6bWwodnQpJiYodGhpcy5yZW1vdmVIb29rKCJhZnRlclNjcm9sbCIsdnQpLHRoaXMuX3JlZ2lzdGVy''@;'; put 'put ''TWljcm90YXNrKCgpPT52dCgpKSksSHR9LHRoaXMuZGVzdHJveT1mdW5jdGlvbigpe2lmKGYuX2NsZWFyVGltZW91dHMoKSxmLl9jbGVhckltbWVkaWF0ZXMoKSxmLnZpZXcmJmYudmlldy5kZXN0cm95KCksRCYmRC5kZXN0cm95KCksRD1udWxsLHRoaXMuZ2V0U2hvcnRjdXRNYW5hZ2VyKCku''@;'; put 'put ''ZGVzdHJveSgpLHB0LmNsZWFyQ2FjaGUoKSxEWC5kZWxldGUodGhpcy5ndWlkKSxjUChmKSl7Y29uc3QgdnQ9dGhpcy5yb290RG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLmhvdC1kaXNwbGF5LWxpY2Vuc2UtaW5mbyIpO3Z0JiZ2dC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHZ0KX14cChmLnJv''@;'; put 'put ''b3RFbGVtZW50KSx2LmRlc3Ryb3koKSxyZSYmcmUuZGVzdHJveSgpLGYuYmF0Y2hFeGVjdXRpb24oKCk9PntmLnJvd0luZGV4TWFwcGVyLnVucmVnaXN0ZXJBbGwoKSxmLmNvbHVtbkluZGV4TWFwcGVyLnVucmVnaXN0ZXJBbGwoKSx2bi5nZXRJdGVtcygpLmZvckVhY2godnQ9PntsZXRbLE50''@;'; put 'put ''XT12dDtOdC5kZXN0cm95KCl9KSx2bi5jbGVhcigpLGYucnVuSG9va3MoImFmdGVyRGVzdHJveSIpfSwhMCksU2EuZ2V0U2luZ2xldG9uKCkuZGVzdHJveShmKSxYbyhmLCh2dCxOdCxIdCk9PnttbCh2dCk/SHRbTnRdPWZ1bmN0aW9uIGVhKHZ0KXtyZXR1cm4oKT0+e3Rocm93IG5ldyBFcnJv''@;'; put 'put ''cihgVGhlICIke3Z0fSIgbWV0aG9kIGNhbm5vdCBiZSBjYWxsZWQgYmVjYXVzZSB0aGlzIEhhbmRzb250YWJsZSBpbnN0YW5jZSBoYXMgYmVlbiBkZXN0cm95ZWRgKX19KE50KToiZ3VpZCIhPT1OdCYmKEh0W050XT1udWxsKX0pLGYuaXNEZXN0cm95ZWQ9ITAsTSYmTS5kZXN0cm95KCksTT1u''@;'; put 'put ''dWxsLFo9bnVsbCxHcj1udWxsLHJlPW51bGwsZj1udWxsfSx0aGlzLmdldEFjdGl2ZUVkaXRvcj1mdW5jdGlvbigpe3JldHVybiByZS5nZXRBY3RpdmVFZGl0b3IoKX0sdGhpcy5nZXRGaXJzdFJlbmRlcmVkVmlzaWJsZVJvdz1mdW5jdGlvbigpe3JldHVybiBmLnZpZXcuZ2V0Rmlyc3RSZW5k''@;'; put 'put ''ZXJlZFZpc2libGVSb3coKX0sdGhpcy5nZXRMYXN0UmVuZGVyZWRWaXNpYmxlUm93PWZ1bmN0aW9uKCl7cmV0dXJuIGYudmlldy5nZXRMYXN0UmVuZGVyZWRWaXNpYmxlUm93KCl9LHRoaXMuZ2V0Rmlyc3RSZW5kZXJlZFZpc2libGVDb2x1bW49ZnVuY3Rpb24oKXtyZXR1cm4gZi52aWV3Lmdl''@;'; put 'put ''dEZpcnN0UmVuZGVyZWRWaXNpYmxlQ29sdW1uKCl9LHRoaXMuZ2V0TGFzdFJlbmRlcmVkVmlzaWJsZUNvbHVtbj1mdW5jdGlvbigpe3JldHVybiBmLnZpZXcuZ2V0TGFzdFJlbmRlcmVkVmlzaWJsZUNvbHVtbigpfSx0aGlzLmdldEZpcnN0RnVsbHlWaXNpYmxlUm93PWZ1bmN0aW9uKCl7cmV0''@;'; put 'put ''dXJuIGYudmlldy5nZXRGaXJzdEZ1bGx5VmlzaWJsZVJvdygpfSx0aGlzLmdldExhc3RGdWxseVZpc2libGVSb3c9ZnVuY3Rpb24oKXtyZXR1cm4gZi52aWV3LmdldExhc3RGdWxseVZpc2libGVSb3coKX0sdGhpcy5nZXRGaXJzdEZ1bGx5VmlzaWJsZUNvbHVtbj1mdW5jdGlvbigpe3JldHVy''@;'; put 'put ''biBmLnZpZXcuZ2V0Rmlyc3RGdWxseVZpc2libGVDb2x1bW4oKX0sdGhpcy5nZXRMYXN0RnVsbHlWaXNpYmxlQ29sdW1uPWZ1bmN0aW9uKCl7cmV0dXJuIGYudmlldy5nZXRMYXN0RnVsbHlWaXNpYmxlQ29sdW1uKCl9LHRoaXMuZ2V0Rmlyc3RQYXJ0aWFsbHlWaXNpYmxlUm93PWZ1bmN0aW9u''@;'; put 'put ''KCl7cmV0dXJuIGYudmlldy5nZXRGaXJzdFBhcnRpYWxseVZpc2libGVSb3coKX0sdGhpcy5nZXRMYXN0UGFydGlhbGx5VmlzaWJsZVJvdz1mdW5jdGlvbigpe3JldHVybiBmLnZpZXcuZ2V0TGFzdFBhcnRpYWxseVZpc2libGVSb3coKX0sdGhpcy5nZXRGaXJzdFBhcnRpYWxseVZpc2libGVD''@;'; put 'put ''b2x1bW49ZnVuY3Rpb24oKXtyZXR1cm4gZi52aWV3LmdldEZpcnN0UGFydGlhbGx5VmlzaWJsZUNvbHVtbigpfSx0aGlzLmdldExhc3RQYXJ0aWFsbHlWaXNpYmxlQ29sdW1uPWZ1bmN0aW9uKCl7cmV0dXJuIGYudmlldy5nZXRMYXN0UGFydGlhbGx5VmlzaWJsZUNvbHVtbigpfSx0aGlzLmdl''@;'; put 'put ''dFBsdWdpbj1mdW5jdGlvbih2dCl7cmV0dXJuIHZuLmdldEl0ZW0ocDEodnQpKX0sdGhpcy5nZXRQbHVnaW5OYW1lPWZ1bmN0aW9uKHZ0KXtyZXR1cm4gdnQ9PT10aGlzLnVuZG9SZWRvP3RoaXMudW5kb1JlZG8uY29uc3RydWN0b3IuUExVR0lOX0tFWTp2bi5nZXRJZCh2dCl9LHRoaXMuZ2V0''@;'; put 'put ''SW5zdGFuY2U9ZnVuY3Rpb24oKXtyZXR1cm4gZn0sdGhpcy5hZGRIb29rPWZ1bmN0aW9uKHZ0LE50LEh0KXtTYS5nZXRTaW5nbGV0b24oKS5hZGQodnQsTnQsZixIdCl9LHRoaXMuaGFzSG9vaz1mdW5jdGlvbih2dCl7cmV0dXJuIFNhLmdldFNpbmdsZXRvbigpLmhhcyh2dCxmKXx8U2EuZ2V0''@;'; put 'put ''U2luZ2xldG9uKCkuaGFzKHZ0KX0sdGhpcy5hZGRIb29rT25jZT1mdW5jdGlvbih2dCxOdCxIdCl7U2EuZ2V0U2luZ2xldG9uKCkub25jZSh2dCxOdCxmLEh0KX0sdGhpcy5yZW1vdmVIb29rPWZ1bmN0aW9uKHZ0LE50KXtTYS5nZXRTaW5nbGV0b24oKS5yZW1vdmUodnQsTnQsZil9LHRoaXMu''@;'; put 'put ''cnVuSG9va3M9ZnVuY3Rpb24odnQsTnQsSHQsSG4sdHIsYXIsSHIpe3JldHVybiBTYS5nZXRTaW5nbGV0b24oKS5ydW4oZix2dCxOdCxIdCxIbix0cixhcixIcil9LHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZT1mdW5jdGlvbih2dCxOdCl7cmV0dXJuIFozZShkdC5sYW5ndWFnZSx2dCxOdCl9''@;'; put 'put ''LHRoaXMudG9IVE1MPSgpPT5LJCh0aGlzKSx0aGlzLnRvVGFibGVFbGVtZW50PSgpPT57Y29uc3QgdnQ9dGhpcy5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIHZ0Lmluc2VydEFkamFjZW50SFRNTCgiYWZ0ZXJiZWdpbiIsSyQodGhpcykpLHZ0LmZpcnN0RWxlbWVu''@;'; put 'put ''dENoaWxkfSx0aGlzLnRpbWVvdXRzPVtdLHRoaXMudXNlVGhlbWU9dnQ9Pnt0aGlzLnZpZXcuZ2V0U3R5bGVzSGFuZGxlcigpLnVzZVRoZW1lKHZ0KSx0aGlzLnJ1bkhvb2tzKCJhZnRlclNldFRoZW1lIix2dCwhIUVlKX0sdGhpcy5nZXRDdXJyZW50VGhlbWVOYW1lPSgpPT50aGlzLnZpZXcu''@;'; put 'put ''Z2V0U3R5bGVzSGFuZGxlcigpLmdldFRoZW1lTmFtZSgpLHRoaXMuX3JlZ2lzdGVyVGltZW91dD1mdW5jdGlvbih2dCl7bGV0IEh0PXZ0OyJmdW5jdGlvbiI9PXR5cGVvZiBIdCYmKEh0PXNldFRpbWVvdXQoSHQsYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJn''@;'; put 'put ''dW1lbnRzWzFdOjApKSx0aGlzLnRpbWVvdXRzLnB1c2goSHQpfSx0aGlzLl9jbGVhclRpbWVvdXRzPWZ1bmN0aW9uKCl7WW4odGhpcy50aW1lb3V0cyx2dD0+e2NsZWFyVGltZW91dCh2dCl9KX0sdGhpcy5pbW1lZGlhdGVzPVtdLHRoaXMuX3JlZ2lzdGVySW1tZWRpYXRlPWZ1bmN0aW9uKHZ0''@;'; put 'put ''KXt0aGlzLmltbWVkaWF0ZXMucHVzaChzZXRJbW1lZGlhdGUodnQpKX0sdGhpcy5fY2xlYXJJbW1lZGlhdGVzPWZ1bmN0aW9uKCl7WW4odGhpcy5pbW1lZGlhdGVzLHZ0PT57Y2xlYXJJbW1lZGlhdGUodnQpfSl9LHRoaXMuX3JlZ2lzdGVyTWljcm90YXNrPWZ1bmN0aW9uKHZ0KXt0aGlzLnJv''@;'; put 'put ''b3RXaW5kb3cucXVldWVNaWNyb3Rhc2soKCk9Pnt0aGlzLmlzRGVzdHJveWVkfHx2dCgpfSl9LHRoaXMuX2dldEVkaXRvck1hbmFnZXI9ZnVuY3Rpb24oKXtyZXR1cm4gcmV9O2NvbnN0IGZhPXFydCh7aGFuZGxlRXZlbnQ6KCk9PmYuaXNMaXN0ZW5pbmcoKSxiZWZvcmVLZXlEb3duOnZ0PT50''@;'; put 'put ''aGlzLnJ1bkhvb2tzKCJiZWZvcmVLZXlEb3duIix2dCksYWZ0ZXJLZXlEb3duOnZ0PT57dGhpcy5pc0Rlc3Ryb3llZHx8Zi5ydW5Ib29rcygiYWZ0ZXJEb2N1bWVudEtleURvd24iLHZ0KX0sb3duZXJXaW5kb3c6dGhpcy5yb290V2luZG93fSk7dGhpcy5hZGRIb29rKCJiZWZvcmVPbkNlbGxN''@;'; put 'put ''b3VzZURvd24iLHZ0PT57ITE9PT12dC5jdHJsS2V5JiYhMT09PXZ0Lm1ldGFLZXkmJmZhLnJlbGVhc2VQcmVzc2VkS2V5cygpfSksdGhpcy5nZXRTaG9ydGN1dE1hbmFnZXI9ZnVuY3Rpb24oKXtyZXR1cm4gZmF9LHRoaXMuZ2V0Rm9jdXNNYW5hZ2VyPWZ1bmN0aW9uKCl7cmV0dXJuIGNlfSxu''@;'; put 'put ''SygpLmZvckVhY2godnQ9Pntjb25zdCBOdD1JRSh2dCk7dm4uYWRkSXRlbSh2dCxuZXcgTnQodGhpcykpfSksZnVuY3Rpb24gS2l0KGMpe1skaXQsR2l0XS5mb3JFYWNoKGw9PmwoYykpfShmKSxmYS5zZXRBY3RpdmVDb250ZXh0TmFtZSgiZ3JpZCIpLFNhLmdldFNpbmdsZXRvbigpLnJ1bihm''@;'; put 'put ''LCJjb25zdHJ1Y3QiKX1mdW5jdGlvbiBFcGUoYyxsLGEpe2MuYWRkRXZlbnRMaXN0ZW5lcihsLGEsITEpfWZ1bmN0aW9uIFRwZShjLGwsYSl7Yy5yZW1vdmVFdmVudExpc3RlbmVyKGwsYSwhMSl9ZnVuY3Rpb24gVlAoYyl7cmV0dXJuIGMub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRD''@;'; put 'put ''b21wdXRlZFN0eWxlKGMpfWZ1bmN0aW9uIEFwZShjKXtjb25zdCBhPXttaW5IZWlnaHQ6MjAwLG1heEhlaWdodDozMDAsbWluV2lkdGg6MTAwLG1heFdpZHRoOjMwMCx0ZXh0Q29udGVudDpjZT0+Y2UudmFsdWUsLi4uYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/''@;'; put 'put ''YXJndW1lbnRzWzFdOnt9fSxkPWMuYm9keSxoPWMuY3JlYXRlVGV4dE5vZGUoIiIpLGY9Yy5jcmVhdGVFbGVtZW50KCJzcGFuIik7bGV0IHY7ZnVuY3Rpb24gTSgpe3ZhciBjZSxiZTtoLnRleHRDb250ZW50PWEudGV4dENvbnRlbnQodiksZi5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLGYu''@;'; put 'put ''c3R5bGUuZm9udFNpemU9VlAodikuZm9udFNpemUsZi5zdHlsZS5mb250RmFtaWx5PVZQKHYpLmZvbnRGYW1pbHksZi5zdHlsZS53aGl0ZVNwYWNlPSJwcmUiLGQuYXBwZW5kQ2hpbGQoZik7Y29uc3QgRWU9cGFyc2VJbnQoKG51bGw9PT0oY2U9VlAodikpfHx2b2lkIDA9PT1jZT92b2lkIDA6''@;'; put 'put ''Y2UucGFkZGluZ0lubGluZVN0YXJ0KXx8MCwxMCksQmU9cGFyc2VJbnQoKG51bGw9PT0oYmU9VlAodikpfHx2b2lkIDA9PT1iZT92b2lkIDA6YmUucGFkZGluZ0lubGluZUVuZCl8fDAsMTApLHFlPWYuY2xpZW50V2lkdGgrRWUrQmUrMTtkLnJlbW92ZUNoaWxkKGYpO2NvbnN0IHJ0PXYuc3R5''@;'; put 'put ''bGU7cnQuaGVpZ2h0PWAke2EubWluSGVpZ2h0fXB4YCxydC53aWR0aD1hLm1pbldpZHRoPnFlP2Ake2EubWluV2lkdGh9cHhgOnFlPmEubWF4V2lkdGg/YCR7YS5tYXhXaWR0aH1weGA6YCR7cWV9cHhgO2NvbnN0IHB0PXYuc2Nyb2xsSGVpZ2h0P3Yuc2Nyb2xsSGVpZ2h0LTE6MDthLm1pbkhl''@;'; put 'put ''aWdodD5wdD9ydC5oZWlnaHQ9YCR7YS5taW5IZWlnaHR9cHhgOmEubWF4SGVpZ2h0PHB0PyhydC5oZWlnaHQ9YCR7YS5tYXhIZWlnaHR9cHhgLHJ0Lm92ZXJmbG93WT0idmlzaWJsZSIpOnJ0LmhlaWdodD1gJHtwdH1weGB9ZnVuY3Rpb24gRCgpe2MuZGVmYXVsdFZpZXcuc2V0VGltZW91dChN''@;'; put 'put ''LDApfXJldHVybntpbml0OmZ1bmN0aW9uIHJlKGNlLGJlKXtsZXQgRWU9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXTt2PWNlLGZ1bmN0aW9uIFooY2Upe2lmKGNlJiZjZS5taW5IZWlnaHQpaWYoImluaGVyaXQiPT09Y2UubWluSGVpZ2h0''@;'; put 'put ''KWEubWluSGVpZ2h0PXYuY2xpZW50SGVpZ2h0O2Vsc2V7Y29uc3QgYmU9cGFyc2VJbnQoY2UubWluSGVpZ2h0LDEwKTtpc05hTihiZSl8fChhLm1pbkhlaWdodD1iZSl9aWYoY2UmJmNlLm1heEhlaWdodClpZigiaW5oZXJpdCI9PT1jZS5tYXhIZWlnaHQpYS5tYXhIZWlnaHQ9di5jbGllbnRI''@;'; put 'put ''ZWlnaHQ7ZWxzZXtjb25zdCBiZT1wYXJzZUludChjZS5tYXhIZWlnaHQsMTApO2lzTmFOKGJlKXx8KGEubWF4SGVpZ2h0PWJlKX1pZihjZSYmY2UubWluV2lkdGgpaWYoImluaGVyaXQiPT09Y2UubWluV2lkdGgpYS5taW5XaWR0aD12LmNsaWVudFdpZHRoO2Vsc2V7Y29uc3QgYmU9cGFyc2VJ''@;'; put 'put ''bnQoY2UubWluV2lkdGgsMTApO2lzTmFOKGJlKXx8KGEubWluV2lkdGg9YmUpfWlmKGNlJiZjZS5tYXhXaWR0aClpZigiaW5oZXJpdCI9PT1jZS5tYXhXaWR0aClhLm1heFdpZHRoPXYuY2xpZW50V2lkdGg7ZWxzZXtjb25zdCBiZT1wYXJzZUludChjZS5tYXhXaWR0aCwxMCk7aXNOYU4oYmUp''@;'; put 'put ''fHwoYS5tYXhXaWR0aD1iZSl9Zi5maXJzdENoaWxkfHwoZi5jbGFzc05hbWU9ImF1dG9SZXNpemUiLGYuc3R5bGUuZGlzcGxheT0iaW5saW5lLWJsb2NrIixmLmFwcGVuZENoaWxkKGgpKX0oYmUpLCJURVhUQVJFQSI9PT12Lm5vZGVOYW1lJiYodi5zdHlsZS5yZXNpemU9Im5vbmUiLHYuc3R5''@;'; put 'put ''bGUuaGVpZ2h0PWAke2EubWluSGVpZ2h0fXB4YCx2LnN0eWxlLm1pbldpZHRoPWAke2EubWluV2lkdGh9cHhgLHYuc3R5bGUubWF4V2lkdGg9YCR7YS5tYXhXaWR0aH1weGAsdi5zdHlsZS5vdmVyZmxvd1k9ImhpZGRlbiIpLEVlJiYoRXBlKHYsImlucHV0IixNKSxFcGUodiwia2V5ZG93biIs''@;'; put 'put ''RCkpLE0oKX0scmVzaXplOk0sdW5PYnNlcnZlKCl7VHBlKHYsImlucHV0IixNKSxUcGUodiwia2V5ZG93biIsRCl9fX1mdW5jdGlvbiBrcGUoYyxsKXtjb25zdCBhPVMkKGwpLGQ9bC52YWx1ZS5zcGxpdCgiXG4iKTtsZXQgaD1hLGY9MDtmb3IobGV0IHY9MDt2PGQubGVuZ3RoO3YrKyl7MCE9''@;'; put 'put ''PXYmJihmKz1kW3YtMV0ubGVuZ3RoKzEpO2NvbnN0IEQ9ZitkW3ZdLmxlbmd0aDtpZigiaG9tZSI9PT1jP2g9ZjoiZW5kIj09PWMmJihoPUQpLGE8PUQpYnJlYWt9d0UobCxoKX1mdW5jdGlvbiBpOShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gcWl0KGMpe3ZhciBsPWZ1bmN0aW9uIFhpdChj''@;'; put 'put ''LGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBA''@;'; put 'put ''dG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2''@;'; put 'put ''YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y29uc3QgQlA9Imh0X2VkaXRvcl9oaWRkZW4iLERwZT0idGV4dEVkaXRvciI7Y2xhc3MgYTkgZXh0ZW5kcyBrX3tzdGF0aWMgZ2V0IEVESVRPUl9UWVBFKCl7cmV0dXJuInRleHQifWNv''@;'; put 'put ''bnN0cnVjdG9yKGwpe3N1cGVyKGwpLGk5KHRoaXMsImV2ZW50TWFuYWdlciIsbmV3IGoyKHRoaXMpKSxpOSh0aGlzLCJhdXRvUmVzaXplIixBcGUodGhpcy5ob3Qucm9vdERvY3VtZW50KSksaTkodGhpcywiVEVYVEFSRUEiLHZvaWQgMCksaTkodGhpcywidGV4dGFyZWFTdHlsZSIsdm9pZCAw''@;'; put 'put ''KSxpOSh0aGlzLCJURVhUQVJFQV9QQVJFTlQiLHZvaWQgMCksaTkodGhpcywidGV4dGFyZWFQYXJlbnRTdHlsZSIsdm9pZCAwKSxpOSh0aGlzLCJsYXllckNsYXNzIix2b2lkIDApLHRoaXMuZXZlbnRNYW5hZ2VyPW5ldyBqMih0aGlzKSx0aGlzLmNyZWF0ZUVsZW1lbnRzKCksdGhpcy5iaW5k''@;'; put 'put ''RXZlbnRzKCksdGhpcy5ob3QuYWRkSG9va09uY2UoImFmdGVyRGVzdHJveSIsKCk9PnRoaXMuZGVzdHJveSgpKX1nZXRWYWx1ZSgpe3JldHVybiB0aGlzLlRFWFRBUkVBLnZhbHVlfXNldFZhbHVlKGwpe3RoaXMuVEVYVEFSRUEudmFsdWU9bH1vcGVuKCl7dGhpcy5yZWZyZXNoRGltZW5zaW9u''@;'; put 'put ''cygpLHRoaXMuc2hvd0VkaXRhYmxlRWxlbWVudCgpLHRoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLnNldEFjdGl2ZUNvbnRleHROYW1lKCJlZGl0b3IiKSx0aGlzLnJlZ2lzdGVyU2hvcnRjdXRzKCl9Y2xvc2UoKXt0aGlzLmF1dG9SZXNpemUudW5PYnNlcnZlKCksdkUodGhpcy5ob3Qu''@;'; put 'put ''cm9vdERvY3VtZW50LmFjdGl2ZUVsZW1lbnQsdGhpcy5ob3Qucm9vdEVsZW1lbnQpJiZ0aGlzLmhvdC5saXN0ZW4oKSx0aGlzLmhpZGVFZGl0YWJsZUVsZW1lbnQoKSx0aGlzLnVucmVnaXN0ZXJTaG9ydGN1dHMoKX1wcmVwYXJlKGwsYSxkLGgsZix2KXtjb25zdCBNPXRoaXMuc3RhdGU7aWYo''@;'; put 'put ''c3VwZXIucHJlcGFyZShsLGEsZCxoLGYsdiksIXYucmVhZE9ubHkpe3RoaXMucmVmcmVzaERpbWVuc2lvbnMoITApO2NvbnN0e2FsbG93SW52YWxpZDpEfT12O0QmJiF0aGlzLmlzT3BlbmVkKCkmJih0aGlzLlRFWFRBUkVBLnZhbHVlPSIiKSxNIT09bHUuRklOSVNIRUQmJiF0aGlzLmlzT3Bl''@;'; put 'put ''bmVkKCkmJnRoaXMuaGlkZUVkaXRhYmxlRWxlbWVudCgpfX1iZWdpbkVkaXRpbmcobCxhKXt0aGlzLnN0YXRlPT09bHUuVklSR0lOJiYodGhpcy5URVhUQVJFQS52YWx1ZT0iIixzdXBlci5iZWdpbkVkaXRpbmcobCxhKSl9Zm9jdXMoKXt0aGlzLlRFWFRBUkVBLnNlbGVjdCgpLHdFKHRoaXMu''@;'; put 'put ''VEVYVEFSRUEsdGhpcy5URVhUQVJFQS52YWx1ZS5sZW5ndGgpfWNyZWF0ZUVsZW1lbnRzKCl7Y29uc3R7cm9vdERvY3VtZW50Omx9PXRoaXMuaG90O3RoaXMuVEVYVEFSRUE9bC5jcmVhdGVFbGVtZW50KCJURVhUQVJFQSIpLHZvKHRoaXMuVEVYVEFSRUEsW1siZGF0YS1ob3QtaW5wdXQiLCIi''@;'; put 'put ''XSxONygtMSldKSxUaSh0aGlzLlRFWFRBUkVBLCJoYW5kc29udGFibGVJbnB1dCIpLHRoaXMudGV4dGFyZWFTdHlsZT10aGlzLlRFWFRBUkVBLnN0eWxlLHRoaXMudGV4dGFyZWFTdHlsZS53aWR0aD0wLHRoaXMudGV4dGFyZWFTdHlsZS5oZWlnaHQ9MCx0aGlzLnRleHRhcmVhU3R5bGUub3Zl''@;'; put 'put ''cmZsb3dZPSJ2aXNpYmxlIix0aGlzLlRFWFRBUkVBX1BBUkVOVD1sLmNyZWF0ZUVsZW1lbnQoIkRJViIpLFRpKHRoaXMuVEVYVEFSRUFfUEFSRU5ULCJoYW5kc29udGFibGVJbnB1dEhvbGRlciIpLHBvKHRoaXMuVEVYVEFSRUFfUEFSRU5ULHRoaXMubGF5ZXJDbGFzcykmJmxvKHRoaXMuVEVY''@;'; put 'put ''VEFSRUFfUEFSRU5ULHRoaXMubGF5ZXJDbGFzcyksVGkodGhpcy5URVhUQVJFQV9QQVJFTlQsQlApLHRoaXMudGV4dGFyZWFQYXJlbnRTdHlsZT10aGlzLlRFWFRBUkVBX1BBUkVOVC5zdHlsZSx0aGlzLlRFWFRBUkVBX1BBUkVOVC5hcHBlbmRDaGlsZCh0aGlzLlRFWFRBUkVBKSx0aGlzLmhv''@;'; put 'put ''dC5yb290RWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLlRFWFRBUkVBX1BBUkVOVCl9aGlkZUVkaXRhYmxlRWxlbWVudCgpe3RmZSgpJiYodGhpcy50ZXh0YXJlYVN0eWxlLnRleHRJbmRlbnQ9Ii05OTk5OXB4IiksdGhpcy50ZXh0YXJlYVN0eWxlLm92ZXJmbG93WT0idmlzaWJsZSIsdGhpcy50''@;'; put 'put ''ZXh0YXJlYVBhcmVudFN0eWxlLm9wYWNpdHk9IjAiLHRoaXMudGV4dGFyZWFQYXJlbnRTdHlsZS5oZWlnaHQ9IjFweCIsbG8odGhpcy5URVhUQVJFQV9QQVJFTlQsdGhpcy5sYXllckNsYXNzKSxUaSh0aGlzLlRFWFRBUkVBX1BBUkVOVCxCUCl9c2hvd0VkaXRhYmxlRWxlbWVudCgpe3RoaXMu''@;'; put 'put ''dGV4dGFyZWFQYXJlbnRTdHlsZS5oZWlnaHQ9IiIsdGhpcy50ZXh0YXJlYVBhcmVudFN0eWxlLm92ZXJmbG93PSIiLHRoaXMudGV4dGFyZWFQYXJlbnRTdHlsZS5wb3NpdGlvbj0iIix0aGlzLnRleHRhcmVhUGFyZW50U3R5bGVbdGhpcy5ob3QuaXNSdGwoKT8ibGVmdCI6InJpZ2h0Il09ImF1''@;'; put 'put ''dG8iLHRoaXMudGV4dGFyZWFQYXJlbnRTdHlsZS5vcGFjaXR5PSIxIix0aGlzLnRleHRhcmVhU3R5bGUudGV4dEluZGVudD0iIjtjb25zdCBsPXRoaXMuVEVYVEFSRUFfUEFSRU5ULmNoaWxkTm9kZXM7bGV0IGE9ITE7R2EobC5sZW5ndGgtMSxkPT57aWYocG8obFtkXSwiaGFuZHNvbnRhYmxl''@;'; put 'put ''RWRpdG9yIikpcmV0dXJuIGE9ITAsITF9KSxwbyh0aGlzLlRFWFRBUkVBX1BBUkVOVCxCUCkmJmxvKHRoaXMuVEVYVEFSRUFfUEFSRU5ULEJQKSxhPyh0aGlzLmxheWVyQ2xhc3M9Imh0X2VkaXRvcl92aXNpYmxlIixUaSh0aGlzLlRFWFRBUkVBX1BBUkVOVCx0aGlzLmxheWVyQ2xhc3MpKToo''@;'; put 'put ''dGhpcy5sYXllckNsYXNzPXRoaXMuZ2V0RWRpdGVkQ2VsbHNMYXllckNsYXNzKCksVGkodGhpcy5URVhUQVJFQV9QQVJFTlQsdGhpcy5sYXllckNsYXNzKSl9cmVmcmVzaFZhbHVlKCl7Y29uc3QgbD10aGlzLmhvdC50b1BoeXNpY2FsUm93KHRoaXMucm93KSxhPXRoaXMuaG90LmdldFNvdXJj''@;'; put 'put ''ZURhdGFBdENlbGwobCx0aGlzLmNvbCk7dGhpcy5vcmlnaW5hbFZhbHVlPWEsdGhpcy5zZXRWYWx1ZShhKSx0aGlzLnJlZnJlc2hEaW1lbnNpb25zKCl9cmVmcmVzaERpbWVuc2lvbnMoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRz''@;'; put 'put ''WzBdO2lmKHRoaXMuc3RhdGUhPT1sdS5FRElUSU5HJiYhbClyZXR1cm47aWYodGhpcy5URD10aGlzLmdldEVkaXRlZENlbGwoKSwhdGhpcy5URClyZXR1cm4gdm9pZChsfHx0aGlzLmNsb3NlKCkpO2NvbnN0e3RvcDphLHN0YXJ0OmQsd2lkdGg6aCxtYXhXaWR0aDpmLGhlaWdodDp2LG1heEhl''@;'; put 'put ''aWdodDpNfT10aGlzLmdldEVkaXRlZENlbGxSZWN0KCk7dGhpcy50ZXh0YXJlYVBhcmVudFN0eWxlLnRvcD1gJHthfXB4YCx0aGlzLnRleHRhcmVhUGFyZW50U3R5bGVbdGhpcy5ob3QuaXNSdGwoKT8icmlnaHQiOiJsZWZ0Il09YCR7ZH1weGAsdGhpcy5zaG93RWRpdGFibGVFbGVtZW50KCk7''@;'; put 'put ''Y29uc3QgRD10aGlzLmhvdC5yb290V2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcy5URCk7dGhpcy5URVhUQVJFQS5zdHlsZS5mb250U2l6ZT1ELmZvbnRTaXplLHRoaXMuVEVYVEFSRUEuc3R5bGUuZm9udEZhbWlseT1ELmZvbnRGYW1pbHksdGhpcy5URVhUQVJFQS5zdHlsZS5iYWNrZ3Jv''@;'; put 'put ''dW5kQ29sb3I9dGhpcy5URC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IsdGhpcy5hdXRvUmVzaXplLmluaXQodGhpcy5URVhUQVJFQSx7bWluV2lkdGg6TWF0aC5taW4oaCxmKSxtaW5IZWlnaHQ6TWF0aC5taW4odixNKSxtYXhXaWR0aDpmLG1heEhlaWdodDpNfSwhMCl9YmluZEV2ZW50cygpe08k''@;'; put 'put ''KCkmJnRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodGhpcy5URVhUQVJFQSwiZm9jdXNvdXQiLCgpPT50aGlzLmZpbmlzaEVkaXRpbmcoITEpKSx0aGlzLmFkZEhvb2soImFmdGVyU2Nyb2xsSG9yaXpvbnRhbGx5IiwoKT0+dGhpcy5yZWZyZXNoRGltZW5zaW9ucygpKSx0aGlz''@;'; put 'put ''LmFkZEhvb2soImFmdGVyU2Nyb2xsVmVydGljYWxseSIsKCk9PnRoaXMucmVmcmVzaERpbWVuc2lvbnMoKSksdGhpcy5hZGRIb29rKCJhZnRlckNvbHVtblJlc2l6ZSIsKCk9Pnt0aGlzLnJlZnJlc2hEaW1lbnNpb25zKCksdGhpcy5zdGF0ZT09PWx1LkVESVRJTkcmJnRoaXMuZm9jdXMoKX0p''@;'; put 'put ''LHRoaXMuYWRkSG9vaygiYWZ0ZXJSb3dSZXNpemUiLCgpPT57dGhpcy5yZWZyZXNoRGltZW5zaW9ucygpLHRoaXMuc3RhdGU9PT1sdS5FRElUSU5HJiZ0aGlzLmZvY3VzKCl9KX1hbGxvd0tleUV2ZW50UHJvcGFnYXRpb24oKXt9ZGVzdHJveSgpe3RoaXMuZXZlbnRNYW5hZ2VyLmRlc3Ryb3ko''@;'; put 'put ''KSx0aGlzLmNsZWFySG9va3MoKX1yZWdpc3RlclNob3J0Y3V0cygpe2NvbnN0IGE9dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZWRpdG9yIiksaD0oKT0+e3RoaXMuaG90LnJvb3REb2N1bWVudC5leGVjQ29tbWFuZCgiaW5zZXJ0VGV4dCIsITEsIlxuIil9O2Eu''@;'; put 'put ''YWRkU2hvcnRjdXRzKFt7a2V5czpbWyJDb250cm9sIiwiRW50ZXIiXV0sY2FsbGJhY2s6KCk9PihoKCksITEpLHJ1bk9ubHlJZjpmPT4hdGhpcy5ob3Quc2VsZWN0aW9uLmlzTXVsdGlwbGUoKSYmIWYuYWx0S2V5fSx7a2V5czpbWyJNZXRhIiwiRW50ZXIiXV0sY2FsbGJhY2s6KCk9PihoKCks''@;'; put 'put ''ITEpLHJ1bk9ubHlJZjooKT0+IXRoaXMuaG90LnNlbGVjdGlvbi5pc011bHRpcGxlKCl9LHtrZXlzOltbIkFsdCIsIkVudGVyIl1dLGNhbGxiYWNrOigpPT4oaCgpLCExKX0se2tleXM6W1siSG9tZSJdXSxjYWxsYmFjazooZix2KT0+e2xldFtNXT12O2twZShNLHRoaXMuVEVYVEFSRUEpfX0s''@;'; put 'put ''e2tleXM6W1siRW5kIl1dLGNhbGxiYWNrOihmLHYpPT57bGV0W01dPXY7a3BlKE0sdGhpcy5URVhUQVJFQSl9fV0se3J1bk9ubHlJZjooKT0+UGEodGhpcy5ob3QuZ2V0U2VsZWN0ZWQoKSksZ3JvdXA6RHBlfSl9dW5yZWdpc3RlclNob3J0Y3V0cygpe3RoaXMuaG90LmdldFNob3J0Y3V0TWFu''@;'; put 'put ''YWdlcigpLmdldENvbnRleHQoImVkaXRvciIpLnJlbW92ZVNob3J0Y3V0c0J5R3JvdXAoRHBlKX19ZnVuY3Rpb24gb1QoYyxsLGEsZCxoLGYsdil7Y29uc3QgTT12LmFyaWFUYWdzLEQ9W10sWj1bXSxyZT1bXSxjZT1bXTt2LmNsYXNzTmFtZSYmVGkobCx2LmNsYXNzTmFtZSksdi5yZWFkT25s''@;'; put 'put ''eT8oRC5wdXNoKHYucmVhZE9ubHlDZWxsQ2xhc3NOYW1lKSxNJiZjZS5wdXNoKGsyZSgpKSk6TSYmcmUucHVzaChrMmUoKVswXSksITE9PT12LnZhbGlkJiZ2LmludmFsaWRDZWxsQ2xhc3NOYW1lPyhELnB1c2godi5pbnZhbGlkQ2VsbENsYXNzTmFtZSksTSYmY2UucHVzaChEMmUoKSkpOiha''@;'; put 'put ''LnB1c2godi5pbnZhbGlkQ2VsbENsYXNzTmFtZSksTSYmcmUucHVzaChEMmUoKVswXSkpLCExPT09di53b3JkV3JhcCYmdi5ub1dvcmRXcmFwQ2xhc3NOYW1lJiZELnB1c2godi5ub1dvcmRXcmFwQ2xhc3NOYW1lKSwhZiYmdi5wbGFjZWhvbGRlciYmRC5wdXNoKHYucGxhY2Vob2xkZXJDZWxs''@;'; put 'put ''Q2xhc3NOYW1lKSxsbyhsLFopLFRpKGwsRCksajcobCxyZSksdm8obCxjZSl9ZnVuY3Rpb24gQWcoYyxsLGEsZCxoLGYsdil7b1QuYXBwbHkodGhpcyxbYyxsLGEsZCxoLGYsdl0pO2xldCBNPWY7IU0mJnYucGxhY2Vob2xkZXImJihNPXYucGxhY2Vob2xkZXIpLE09bGMoTSksdi50cmltV2hp''@;'; put 'put ''dGVzcGFjZSYmKE09TS50cmltKCkpLFBtKGwsTSl9b1QuUkVOREVSRVJfVFlQRT0iYmFzZSIsQWcuUkVOREVSRVJfVFlQRT0idGV4dCI7Y29uc3QgSXBlPXtDRUxMX1RZUEU6InRleHQiLGVkaXRvcjphOSxyZW5kZXJlcjpBZ307ZnVuY3Rpb24gaDMoYyxsKXtjb25zdCBhPW5ldyB4cGUoYyxs''@;'; put 'put ''fHx7fSxESyk7cmV0dXJuIGEuaW5pdCgpLGF9RzIoSXBlKSxoMy5lZGl0b3JzPXtCYXNlRWRpdG9yOmtffSxoMy5Db3JlPWZ1bmN0aW9uKGMpe3JldHVybiBuZXcgeHBlKGMsYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9LERLKX0saDMu''@;'; put 'put ''RGVmYXVsdFNldHRpbmdzPW9wZSgpLGgzLmhvb2tzPVNhLmdldFNpbmdsZXRvbigpLGgzLkNlbGxDb29yZHM9aVAsaDMuQ2VsbFJhbmdlPWdLLGgzLnBhY2thZ2VOYW1lPSJoYW5kc29udGFibGUiLGgzLmJ1aWxkRGF0ZT0iMjQvMDQvMjAyNSAxMDo1OTowMCIsaDMudmVyc2lvbj0iMTUuMy4w''@;'; put 'put ''IixoMy5sYW5ndWFnZXM9e2RpY3Rpb25hcnlLZXlzOmxudCxnZXRMYW5ndWFnZURpY3Rpb25hcnk6VTNlLGdldExhbmd1YWdlc0RpY3Rpb25hcmllczpmdW5jdGlvbiBmbnQoKXtyZXR1cm4gZG50KCl9LHJlZ2lzdGVyTGFuZ3VhZ2VEaWN0aW9uYXJ5OnozZSxnZXRUcmFuc2xhdGVkUGhyYXNl''@;'; put 'put ''OlozZX07Y29uc3Qgb3M9aDMsbmF0PVsiY29udGFpbmVyIl0sSVg9bmV3IE1hcCxScGU9IlRoZSBIYW5kc29udGFibGUgaW5zdGFuY2UgYm91bmQgdG8gdGhpcyBjb21wb25lbnQgd2FzIGRlc3Ryb3llZCBhbmQgY2Fubm90IGJlIHVzZWQgcHJvcGVybHkuIjtsZXQgWW09KCgpPT57Y2xhc3Mg''@;'; put 'put ''Y3tnZXRJbnN0YW5jZShhKXtjb25zdCBkPUlYLmdldChhKTtyZXR1cm4gZC5pc0Rlc3Ryb3llZD8oY29uc29sZS53YXJuKFJwZSksbnVsbCk6ZH1yZWdpc3Rlckluc3RhbmNlKGEsZCl7cmV0dXJuIElYLnNldChhLGQpfXJlbW92ZUluc3RhbmNlKGEpe3JldHVybiBJWC5kZWxldGUoYSl9c3Rh''@;'; put 'put ''dGljIFx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfTtzdGF0aWMgXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSl9cmV0dXJuIGN9KSgpO2NvbnN0IHJhdD1PYmplY3Qua2V5cyhvcy5EZWZhdWx0U2V0dGluZ3MpLExwZT1vcy5ob29rcy5n''@;'; put 'put ''ZXRSZWdpc3RlcmVkKCk7bGV0IE9wZT0oKCk9PntjbGFzcyBje21lcmdlU2V0dGluZ3MoYSl7Y29uc3QgZD0ic2V0dGluZ3MiaW4gYSYmIm9iamVjdCI9PXR5cGVvZiBhLnNldHRpbmdzLGg9ZD9hLnNldHRpbmdzOnt9O3JldHVybiBMcGUuY29uY2F0KHJhdCkuZm9yRWFjaCh2PT57Y29uc3Qg''@;'; put 'put ''TT1McGUuaW5kZXhPZih2KT4tMTtsZXQgRDtkJiZNJiYoRD1hLnNldHRpbmdzW3ZdKSx2b2lkIDAhPT1hW3ZdJiYoRD1hW3ZdKSx2b2lkIDAhPT1EJiYoaFt2XT0ibmdab25lImluIGEmJiJmdW5jdGlvbiI9PXR5cGVvZiBEJiZNP2Z1bmN0aW9uKC4uLlope3JldHVybiBhLm5nWm9uZS5ydW4o''@;'; put 'put ''KCk9PkQuYXBwbHkodGhpcyxaKSl9OkQpfSksaH1wcmVwYXJlQ2hhbmdlcyhhKXtjb25zdCBkPXt9O3JldHVybiBPYmplY3Qua2V5cyhhKS5mb3JFYWNoKGY9PnthLmhhc093blByb3BlcnR5KGYpJiYoZFtmXT1hW2ZdLmN1cnJlbnRWYWx1ZSl9KSxkfXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rp''@;'; put 'put ''b24oZCl7cmV0dXJuIG5ldyhkfHxjKX07c3RhdGljIFx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pfXJldHVybiBjfSkoKSxEXz0oKCk9PntjbGFzcyBje19ob3RUYWJsZVJlZ2lzdGVyZXI7X2hvdFNldHRpbmdzUmVzb2x2ZXI7bmdab25lO2NvbnRhaW5lcjtf''@;'; put 'put ''X2hvdEluc3RhbmNlPW51bGw7Y29sdW1uc0NvbXBvbmVudHM9W107c2V0dGluZ3M7aG90SWQ9IiI7YWN0aXZlSGVhZGVyQ2xhc3NOYW1lO2FsbG93RW1wdHk7YWxsb3dIdG1sO2FsbG93SW5zZXJ0Q29sdW1uO2FsbG93SW5zZXJ0Um93O2FsbG93SW52YWxpZDthbGxvd1JlbW92ZUNvbHVtbjth''@;'; put 'put ''bGxvd1JlbW92ZVJvdzthcmlhVGFnczthdXRvQ29sdW1uU2l6ZTthdXRvUm93U2l6ZTthdXRvV3JhcENvbDthdXRvV3JhcFJvdztiaW5kUm93c1dpdGhIZWFkZXJzO2NlbGw7Y2VsbHM7Y2hlY2tlZFRlbXBsYXRlO2NsYXNzTmFtZTtjb2xIZWFkZXJzO2NvbGxhcHNpYmxlQ29sdW1ucztjb2x1''@;'; put 'put ''bW5IZWFkZXJIZWlnaHQ7Y29sdW1ucztjb2x1bW5Tb3J0aW5nO2NvbHVtblN1bW1hcnk7Y29sV2lkdGhzO2NvbW1lbnRlZENlbGxDbGFzc05hbWU7Y29tbWVudHM7Y29udGV4dE1lbnU7Y29weWFibGU7Y29weVBhc3RlO2NvcnJlY3RGb3JtYXQ7Y3VycmVudENvbENsYXNzTmFtZTtjdXJyZW50''@;'; put 'put ''SGVhZGVyQ2xhc3NOYW1lO2N1cnJlbnRSb3dDbGFzc05hbWU7Y3VzdG9tQm9yZGVycztkYXRhO2RhdGFEb3ROb3RhdGlvbjtkYXRhU2NoZW1hO2RhdGVGb3JtYXQ7ZGF0ZVBpY2tlckNvbmZpZztkZWZhdWx0RGF0ZTt0YWJOYXZpZ2F0aW9uO3RoZW1lTmFtZTtkaXNhYmxlVmlzdWFsU2VsZWN0''@;'; put 'put ''aW9uO2RyYWdUb1Njcm9sbDtkcm9wZG93bk1lbnU7ZWRpdG9yO2VudGVyQmVnaW5zRWRpdGluZztlbnRlck1vdmVzO2ZpbGxIYW5kbGU7ZmlsdGVyO2ZpbHRlcmluZ0Nhc2VTZW5zaXRpdmU7ZmlsdGVycztmaXhlZENvbHVtbnNMZWZ0O2ZpeGVkQ29sdW1uc1N0YXJ0O2ZpeGVkUm93c0JvdHRv''@;'; put 'put ''bTtmaXhlZFJvd3NUb3A7Zm9ybXVsYXM7ZnJhZ21lbnRTZWxlY3Rpb247aGVhZGVyQ2xhc3NOYW1lO2hlaWdodDtoaWRkZW5Db2x1bW5zO2hpZGRlblJvd3M7aW52YWxpZENlbGxDbGFzc05hbWU7aW1lRmFzdEVkaXQ7bGFiZWw7bGFuZ3VhZ2U7bGF5b3V0RGlyZWN0aW9uO2xpY2Vuc2VLZXk7''@;'; put 'put ''bG9jYWxlO21hbnVhbENvbHVtbkZyZWV6ZTttYW51YWxDb2x1bW5Nb3ZlO21hbnVhbENvbHVtblJlc2l6ZTttYW51YWxSb3dNb3ZlO21hbnVhbFJvd1Jlc2l6ZTttYXhDb2xzO21heFJvd3M7bWVyZ2VDZWxsczttaW5Db2xzO21pblJvd3M7bWluU3BhcmVDb2xzO21pblNwYXJlUm93czttdWx0''@;'; put 'put ''aUNvbHVtblNvcnRpbmc7bmF2aWdhYmxlSGVhZGVycztuZXN0ZWRIZWFkZXJzO25lc3RlZFJvd3M7bm9Xb3JkV3JhcENsYXNzTmFtZTtudW1lcmljRm9ybWF0O29ic2VydmVET01WaXNpYmlsaXR5O291dHNpZGVDbGlja0Rlc2VsZWN0cztwZXJzaXN0ZW50U3RhdGU7cGxhY2Vob2xkZXI7cGxh''@;'; put 'put ''Y2Vob2xkZXJDZWxsQ2xhc3NOYW1lO3ByZXZlbnRPdmVyZmxvdztwcmV2ZW50V2hlZWw7cmVhZE9ubHk7cmVhZE9ubHlDZWxsQ2xhc3NOYW1lO3JlbmRlckFsbENvbHVtbnM7cmVuZGVyQWxsUm93cztyZW5kZXJlcjtyb3dIZWFkZXJzO3Jvd0hlYWRlcldpZHRoO3Jvd0hlaWdodHM7c2VhcmNo''@;'; put 'put ''O3NlbGVjdGlvbk1vZGU7c2VsZWN0T3B0aW9ucztza2lwQ29sdW1uT25QYXN0ZTtza2lwUm93T25QYXN0ZTtzb3J0QnlSZWxldmFuY2U7c291cmNlO3N0YXJ0Q29scztzdGFydFJvd3M7c3RyZXRjaEg7c3RyaWN0O3RhYmxlQ2xhc3NOYW1lO3RhYk1vdmVzO3RpdGxlO3RyaW1Ecm9wZG93bjt0''@;'; put 'put ''cmltUm93czt0cmltV2hpdGVzcGFjZTt0eXBlO3VuY2hlY2tlZFRlbXBsYXRlO3VuZG87dmFsaWRhdG9yO3ZpZXdwb3J0Q29sdW1uUmVuZGVyaW5nT2Zmc2V0O3ZpZXdwb3J0Um93UmVuZGVyaW5nT2Zmc2V0O3Zpc2libGVSb3dzO3dpZHRoO3dvcmRXcmFwO2FmdGVyQWRkQ2hpbGQ7YWZ0ZXJB''@;'; put 'put ''dXRvZmlsbDthZnRlckJlZ2luRWRpdGluZzthZnRlckNlbGxNZXRhUmVzZXQ7YWZ0ZXJDaGFuZ2U7YWZ0ZXJDaGFuZ2VzT2JzZXJ2ZWQ7YWZ0ZXJDb2x1bW5Db2xsYXBzZTthZnRlckNvbHVtbkV4cGFuZDthZnRlckNvbHVtbkZyZWV6ZTthZnRlckNvbHVtbk1vdmU7YWZ0ZXJDb2x1bW5SZXNp''@;'; put 'put ''emU7YWZ0ZXJDb2x1bW5TZXF1ZW5jZUNoYW5nZTthZnRlckNvbHVtblNvcnQ7YWZ0ZXJDb2x1bW5VbmZyZWV6ZTthZnRlckNvbnRleHRNZW51RGVmYXVsdE9wdGlvbnM7YWZ0ZXJDb250ZXh0TWVudUhpZGU7YWZ0ZXJDb250ZXh0TWVudVNob3c7YWZ0ZXJDb3B5O2FmdGVyQ29weUxpbWl0O2Fm''@;'; put 'put ''dGVyQ3JlYXRlQ29sO2FmdGVyQ3JlYXRlUm93O2FmdGVyQ3V0O2FmdGVyRGVzZWxlY3Q7YWZ0ZXJEZXN0cm95O2FmdGVyRGV0YWNoQ2hpbGQ7YWZ0ZXJEb2N1bWVudEtleURvd247YWZ0ZXJEcmF3U2VsZWN0aW9uO2FmdGVyRHJvcGRvd25NZW51RGVmYXVsdE9wdGlvbnM7YWZ0ZXJEcm9wZG93''@;'; put 'put ''bk1lbnVIaWRlO2FmdGVyRHJvcGRvd25NZW51U2hvdzthZnRlckZpbHRlcjthZnRlckZvcm11bGFzVmFsdWVzVXBkYXRlO2FmdGVyR2V0Q2VsbE1ldGE7YWZ0ZXJHZXRDb2xIZWFkZXI7YWZ0ZXJHZXRDb2x1bW5IZWFkZXJSZW5kZXJlcnM7YWZ0ZXJHZXRSb3dIZWFkZXI7YWZ0ZXJHZXRSb3dI''@;'; put 'put ''ZWFkZXJSZW5kZXJlcnM7YWZ0ZXJIaWRlQ29sdW1uczthZnRlckhpZGVSb3dzO2FmdGVySW5pdDthZnRlckxhbmd1YWdlQ2hhbmdlO2FmdGVyTGlzdGVuO2FmdGVyTG9hZERhdGE7YWZ0ZXJNZXJnZUNlbGxzO2FmdGVyTW9kaWZ5VHJhbnNmb3JtRW5kO2FmdGVyTW9kaWZ5VHJhbnNmb3JtRm9j''@;'; put 'put ''dXM7YWZ0ZXJNb2RpZnlUcmFuc2Zvcm1TdGFydDthZnRlck1vbWVudHVtU2Nyb2xsO2FmdGVyTmFtZWRFeHByZXNzaW9uQWRkZWQ7YWZ0ZXJOYW1lZEV4cHJlc3Npb25SZW1vdmVkO2FmdGVyT25DZWxsQ29udGV4dE1lbnU7YWZ0ZXJPbkNlbGxDb3JuZXJEYmxDbGljazthZnRlck9uQ2VsbENv''@;'; put 'put ''cm5lck1vdXNlRG93bjthZnRlck9uQ2VsbE1vdXNlRG93bjthZnRlck9uQ2VsbE1vdXNlT3V0O2FmdGVyT25DZWxsTW91c2VPdmVyO2FmdGVyT25DZWxsTW91c2VVcDthZnRlclBhc3RlO2FmdGVyUGx1Z2luc0luaXRpYWxpemVkO2FmdGVyUmVkbzthZnRlclJlZG9TdGFja0NoYW5nZTthZnRl''@;'; put 'put ''clJlZnJlc2hEaW1lbnNpb25zO2FmdGVyUmVtb3ZlQ2VsbE1ldGE7YWZ0ZXJSZW1vdmVDb2w7YWZ0ZXJSZW1vdmVSb3c7YWZ0ZXJSZW5kZXI7YWZ0ZXJSZW5kZXJlcjthZnRlclJvd01vdmU7YWZ0ZXJSb3dSZXNpemU7YWZ0ZXJSb3dTZXF1ZW5jZUNoYW5nZTthZnRlclNjcm9sbEhvcml6b250''@;'; put 'put ''YWxseTthZnRlclNjcm9sbFZlcnRpY2FsbHk7YWZ0ZXJTY3JvbGw7YWZ0ZXJTZWxlY3RDb2x1bW5zO2FmdGVyU2VsZWN0aW9uO2FmdGVyU2VsZWN0aW9uQnlQcm9wO2FmdGVyU2VsZWN0aW9uRW5kO2FmdGVyU2VsZWN0aW9uRW5kQnlQcm9wO2FmdGVyU2VsZWN0aW9uRm9jdXNTZXQ7YWZ0ZXJT''@;'; put 'put ''ZWxlY3RSb3dzO2FmdGVyU2V0Q2VsbE1ldGE7YWZ0ZXJTZXREYXRhQXRDZWxsO2FmdGVyU2V0RGF0YUF0Um93UHJvcDthZnRlclNldFNvdXJjZURhdGFBdENlbGw7YWZ0ZXJTZXRUaGVtZTthZnRlclNoZWV0QWRkZWQ7YWZ0ZXJTaGVldFJlbmFtZWQ7YWZ0ZXJTaGVldFJlbW92ZWQ7YWZ0ZXJU''@;'; put 'put ''cmltUm93O2FmdGVyVW5kbzthZnRlclVuZG9TdGFja0NoYW5nZTthZnRlclVuaGlkZUNvbHVtbnM7YWZ0ZXJVbmhpZGVSb3dzO2FmdGVyVW5saXN0ZW47YWZ0ZXJVbm1lcmdlQ2VsbHM7YWZ0ZXJVbnRyaW1Sb3c7YWZ0ZXJVcGRhdGVEYXRhO2FmdGVyVXBkYXRlU2V0dGluZ3M7YWZ0ZXJWYWxp''@;'; put 'put ''ZGF0ZTthZnRlclZpZXdwb3J0Q29sdW1uQ2FsY3VsYXRvck92ZXJyaWRlO2FmdGVyVmlld3BvcnRSb3dDYWxjdWxhdG9yT3ZlcnJpZGU7YWZ0ZXJWaWV3UmVuZGVyO2JlZm9yZUFkZENoaWxkO2JlZm9yZUF1dG9maWxsO2JlZm9yZUJlZ2luRWRpdGluZztiZWZvcmVDZWxsQWxpZ25tZW50O2Jl''@;'; put 'put ''Zm9yZUNoYW5nZTtiZWZvcmVDaGFuZ2VSZW5kZXI7YmVmb3JlQ29sdW1uQ29sbGFwc2U7YmVmb3JlQ29sdW1uRXhwYW5kO2JlZm9yZUNvbHVtbkZyZWV6ZTtiZWZvcmVDb2x1bW5Nb3ZlO2JlZm9yZUNvbHVtblJlc2l6ZTtiZWZvcmVDb2x1bW5Tb3J0O2JlZm9yZUNvbHVtbldyYXA7YmVmb3Jl''@;'; put 'put ''Q29sdW1uVW5mcmVlemU7YmVmb3JlQ29tcG9zaXRpb25TdGFydDtiZWZvcmVDb250ZXh0TWVudVNldEl0ZW1zO2JlZm9yZUNvbnRleHRNZW51U2hvdztiZWZvcmVDb3B5O2JlZm9yZUNyZWF0ZUNvbDtiZWZvcmVDcmVhdGVSb3c7YmVmb3JlQ3V0O2JlZm9yZURldGFjaENoaWxkO2JlZm9yZURy''@;'; put 'put ''YXdCb3JkZXJzO2JlZm9yZURyb3Bkb3duTWVudVNldEl0ZW1zO2JlZm9yZURyb3Bkb3duTWVudVNob3c7YmVmb3JlRmlsdGVyO2JlZm9yZUdldENlbGxNZXRhO2JlZm9yZUhpZGVDb2x1bW5zO2JlZm9yZUhpZGVSb3dzO2JlZm9yZUhpZ2hsaWdodGluZ0NvbHVtbkhlYWRlcjtiZWZvcmVIaWdo''@;'; put 'put ''bGlnaHRpbmdSb3dIZWFkZXI7YmVmb3JlSW5pdDtiZWZvcmVJbml0V2Fsa29udGFibGU7YmVmb3JlS2V5RG93bjtiZWZvcmVMYW5ndWFnZUNoYW5nZTtiZWZvcmVMb2FkRGF0YTtiZWZvcmVNZXJnZUNlbGxzO2JlZm9yZU9uQ2VsbENvbnRleHRNZW51O2JlZm9yZU9uQ2VsbE1vdXNlRG93bjti''@;'; put 'put ''ZWZvcmVPbkNlbGxNb3VzZU91dDtiZWZvcmVPbkNlbGxNb3VzZU92ZXI7YmVmb3JlT25DZWxsTW91c2VVcDtiZWZvcmVQYXN0ZTtiZWZvcmVSZWRvO2JlZm9yZVJlZG9TdGFja0NoYW5nZTtiZWZvcmVSZWZyZXNoRGltZW5zaW9ucztiZWZvcmVSZW1vdmVDZWxsQ2xhc3NOYW1lcztiZWZvcmVS''@;'; put 'put ''ZW1vdmVDZWxsTWV0YTtiZWZvcmVSZW1vdmVDb2w7YmVmb3JlUmVtb3ZlUm93O2JlZm9yZVJlbmRlcjtiZWZvcmVSZW5kZXJlcjtiZWZvcmVSb3dNb3ZlO2JlZm9yZVJvd1Jlc2l6ZTtiZWZvcmVSb3dXcmFwO2JlZm9yZVNlbGVjdENvbHVtbnM7YmVmb3JlU2VsZWN0aW9uRm9jdXNTZXQ7YmVm''@;'; put 'put ''b3JlU2VsZWN0aW9uSGlnaGxpZ2h0U2V0O2JlZm9yZVNlbGVjdFJvd3M7YmVmb3JlU2V0Q2VsbE1ldGE7YmVmb3JlU2V0UmFuZ2VFbmQ7YmVmb3JlU2V0UmFuZ2VTdGFydDtiZWZvcmVTZXRSYW5nZVN0YXJ0T25seTtiZWZvcmVTdHJldGNoaW5nQ29sdW1uV2lkdGg7YmVmb3JlVG91Y2hTY3Jv''@;'; put 'put ''bGw7YmVmb3JlVHJpbVJvdztiZWZvcmVVbmRvO2JlZm9yZVVuZG9TdGFja0NoYW5nZTtiZWZvcmVVbmhpZGVDb2x1bW5zO2JlZm9yZVVuaGlkZVJvd3M7YmVmb3JlVW5tZXJnZUNlbGxzO2JlZm9yZVVudHJpbVJvdztiZWZvcmVVcGRhdGVEYXRhO2JlZm9yZVZhbGlkYXRlO2JlZm9yZVZhbHVl''@;'; put 'put ''UmVuZGVyO2JlZm9yZVZpZXdwb3J0U2Nyb2xsO2JlZm9yZVZpZXdwb3J0U2Nyb2xsSG9yaXpvbnRhbGx5O2JlZm9yZVZpZXdwb3J0U2Nyb2xsVmVydGljYWxseTtiZWZvcmVWaWV3UmVuZGVyO2NvbnN0cnVjdDtpbml0O21vZGlmeUF1dG9Db2x1bW5TaXplU2VlZDttb2RpZnlBdXRvZmlsbFJh''@;'; put 'put ''bmdlO21vZGlmeUNvbEhlYWRlcjttb2RpZnlDb2x1bW5IZWFkZXJIZWlnaHQ7bW9kaWZ5Q29sdW1uSGVhZGVyVmFsdWU7bW9kaWZ5Q29sV2lkdGg7bW9kaWZ5Q29weWFibGVSYW5nZTttb2RpZnlGaWx0ZXJzTXVsdGlTZWxlY3RWYWx1ZTttb2RpZnlGb2N1c2VkRWxlbWVudDttb2RpZnlEYXRh''@;'; put 'put ''O21vZGlmeUZvY3VzT25UYWJOYXZpZ2F0aW9uO21vZGlmeUdldENlbGxDb29yZHM7bW9kaWZ5R2V0Q29vcmRzRWxlbWVudDttb2RpZnlSb3dEYXRhO21vZGlmeVJvd0hlYWRlcjttb2RpZnlSb3dIZWFkZXJXaWR0aDttb2RpZnlSb3dIZWlnaHQ7bW9kaWZ5Um93SGVpZ2h0QnlPdmVybGF5TmFt''@;'; put 'put ''ZTttb2RpZnlTb3VyY2VEYXRhO21vZGlmeVRyYW5zZm9ybUVuZDttb2RpZnlUcmFuc2Zvcm1Gb2N1czttb2RpZnlUcmFuc2Zvcm1TdGFydDtwZXJzaXN0ZW50U3RhdGVMb2FkO3BlcnNpc3RlbnRTdGF0ZVJlc2V0O3BlcnNpc3RlbnRTdGF0ZVNhdmU7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMu''@;'; put 'put ''X2hvdFRhYmxlUmVnaXN0ZXJlcj1hLHRoaXMuX2hvdFNldHRpbmdzUmVzb2x2ZXI9ZCx0aGlzLm5nWm9uZT1ofWdldCBob3RJbnN0YW5jZSgpe3JldHVybiF0aGlzLl9faG90SW5zdGFuY2V8fHRoaXMuX19ob3RJbnN0YW5jZSYmIXRoaXMuX19ob3RJbnN0YW5jZS5pc0Rlc3Ryb3llZD90aGlz''@;'; put 'put ''Ll9faG90SW5zdGFuY2U6KHRoaXMuX2hvdFRhYmxlUmVnaXN0ZXJlci5yZW1vdmVJbnN0YW5jZSh0aGlzLmhvdElkKSxjb25zb2xlLndhcm4oUnBlKSxudWxsKX1zZXQgaG90SW5zdGFuY2UoYSl7dGhpcy5fX2hvdEluc3RhbmNlPWF9bmdBZnRlclZpZXdJbml0KCl7Y29uc3QgYT10aGlzLl9o''@;'; put 'put ''b3RTZXR0aW5nc1Jlc29sdmVyLm1lcmdlU2V0dGluZ3ModGhpcyk7aWYodGhpcy5jb2x1bW5zQ29tcG9uZW50cy5sZW5ndGg+MCl7Y29uc3QgZD1bXTt0aGlzLmNvbHVtbnNDb21wb25lbnRzLmZvckVhY2goaD0+e2QucHVzaCh0aGlzLl9ob3RTZXR0aW5nc1Jlc29sdmVyLm1lcmdlU2V0dGlu''@;'; put 'put ''Z3MoaCkpfSksYS5jb2x1bW5zPWR9dGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLmhvdEluc3RhbmNlPW5ldyBvcy5Db3JlKHRoaXMuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQsYSksdGhpcy5ob3RJZCYmdGhpcy5faG90VGFibGVSZWdpc3RlcmVyLnJlZ2lzdGVySW5z''@;'; put 'put ''dGFuY2UodGhpcy5ob3RJZCx0aGlzLmhvdEluc3RhbmNlKSx0aGlzLmhvdEluc3RhbmNlLmluaXQoKX0pfW5nT25DaGFuZ2VzKGEpe2lmKG51bGw9PT10aGlzLmhvdEluc3RhbmNlKXJldHVybjtjb25zdCBkPXRoaXMuX2hvdFNldHRpbmdzUmVzb2x2ZXIucHJlcGFyZUNoYW5nZXMoYSk7dGhp''@;'; put 'put ''cy51cGRhdGVIb3RUYWJsZShkKX1uZ09uRGVzdHJveSgpe3RoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5ob3RJbnN0YW5jZSYmdGhpcy5ob3RJbnN0YW5jZS5kZXN0cm95KCl9KSx0aGlzLmhvdElkJiZ0aGlzLl9ob3RUYWJsZVJlZ2lzdGVyZXIucmVtb3ZlSW5zdGFu''@;'; put 'put ''Y2UodGhpcy5ob3RJZCl9dXBkYXRlSG90VGFibGUoYSl7dGhpcy5ob3RJbnN0YW5jZSYmdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLmhvdEluc3RhbmNlLnVwZGF0ZVNldHRpbmdzKGEsITEpfSl9b25BZnRlckNvbHVtbnNDaGFuZ2UoKXtpZih2b2lkIDAhPT10aGlz''@;'; put 'put ''LmNvbHVtbnNDb21wb25lbnRzJiZ0aGlzLmNvbHVtbnNDb21wb25lbnRzLmxlbmd0aD4wKXtjb25zdCBhPVtdO3RoaXMuY29sdW1uc0NvbXBvbmVudHMuZm9yRWFjaChoPT57YS5wdXNoKHRoaXMuX2hvdFNldHRpbmdzUmVzb2x2ZXIubWVyZ2VTZXR0aW5ncyhoKSl9KSx0aGlzLnVwZGF0ZUhv''@;'; put 'put ''dFRhYmxlKHtjb2x1bW5zOmF9KX19b25BZnRlckNvbHVtbnNOdW1iZXJDaGFuZ2UoKXtjb25zdCBhPVtdO3RoaXMuY29sdW1uc0NvbXBvbmVudHMubGVuZ3RoPjAmJnRoaXMuY29sdW1uc0NvbXBvbmVudHMuZm9yRWFjaChkPT57YS5wdXNoKHRoaXMuX2hvdFNldHRpbmdzUmVzb2x2ZXIubWVy''@;'; put 'put ''Z2VTZXR0aW5ncyhkKSl9KSx0aGlzLnVwZGF0ZUhvdFRhYmxlKHtjb2x1bW5zOmF9KX1hZGRDb2x1bW4oYSl7dGhpcy5jb2x1bW5zQ29tcG9uZW50cy5wdXNoKGEpLHRoaXMub25BZnRlckNvbHVtbnNOdW1iZXJDaGFuZ2UoKX1yZW1vdmVDb2x1bW4oYSl7Y29uc3QgZD10aGlzLmNvbHVtbnND''@;'; put 'put ''b21wb25lbnRzLmluZGV4T2YoYSk7dGhpcy5jb2x1bW5zQ29tcG9uZW50cy5zcGxpY2UoZCwxKSx0aGlzLm9uQWZ0ZXJDb2x1bW5zTnVtYmVyQ2hhbmdlKCl9c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKFltKSxHZShPcGUpLEdlKFdhKSl9O3N0YXRp''@;'; put 'put ''YyBcdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siaG90LXRhYmxlIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihkLGgpe2lmKDEmZCYmcWEobmF0LDUpLDImZCl7bGV0IGY7Q2koZj1TaSgpKSYmKGguY29udGFpbmVyPWYuZmlyc3QpfX0saW5wdXRzOntzZXR0aW5nczoic2V0dGluZ3Mi''@;'; put 'put ''LGhvdElkOiJob3RJZCIsYWN0aXZlSGVhZGVyQ2xhc3NOYW1lOiJhY3RpdmVIZWFkZXJDbGFzc05hbWUiLGFsbG93RW1wdHk6ImFsbG93RW1wdHkiLGFsbG93SHRtbDoiYWxsb3dIdG1sIixhbGxvd0luc2VydENvbHVtbjoiYWxsb3dJbnNlcnRDb2x1bW4iLGFsbG93SW5zZXJ0Um93OiJhbGxv''@;'; put 'put ''d0luc2VydFJvdyIsYWxsb3dJbnZhbGlkOiJhbGxvd0ludmFsaWQiLGFsbG93UmVtb3ZlQ29sdW1uOiJhbGxvd1JlbW92ZUNvbHVtbiIsYWxsb3dSZW1vdmVSb3c6ImFsbG93UmVtb3ZlUm93IixhcmlhVGFnczoiYXJpYVRhZ3MiLGF1dG9Db2x1bW5TaXplOiJhdXRvQ29sdW1uU2l6ZSIsYXV0''@;'; put 'put ''b1Jvd1NpemU6ImF1dG9Sb3dTaXplIixhdXRvV3JhcENvbDoiYXV0b1dyYXBDb2wiLGF1dG9XcmFwUm93OiJhdXRvV3JhcFJvdyIsYmluZFJvd3NXaXRoSGVhZGVyczoiYmluZFJvd3NXaXRoSGVhZGVycyIsY2VsbDoiY2VsbCIsY2VsbHM6ImNlbGxzIixjaGVja2VkVGVtcGxhdGU6ImNoZWNr''@;'; put 'put ''ZWRUZW1wbGF0ZSIsY2xhc3NOYW1lOiJjbGFzc05hbWUiLGNvbEhlYWRlcnM6ImNvbEhlYWRlcnMiLGNvbGxhcHNpYmxlQ29sdW1uczoiY29sbGFwc2libGVDb2x1bW5zIixjb2x1bW5IZWFkZXJIZWlnaHQ6ImNvbHVtbkhlYWRlckhlaWdodCIsY29sdW1uczoiY29sdW1ucyIsY29sdW1uU29y''@;'; put 'put ''dGluZzoiY29sdW1uU29ydGluZyIsY29sdW1uU3VtbWFyeToiY29sdW1uU3VtbWFyeSIsY29sV2lkdGhzOiJjb2xXaWR0aHMiLGNvbW1lbnRlZENlbGxDbGFzc05hbWU6ImNvbW1lbnRlZENlbGxDbGFzc05hbWUiLGNvbW1lbnRzOiJjb21tZW50cyIsY29udGV4dE1lbnU6ImNvbnRleHRNZW51''@;'; put 'put ''Iixjb3B5YWJsZToiY29weWFibGUiLGNvcHlQYXN0ZToiY29weVBhc3RlIixjb3JyZWN0Rm9ybWF0OiJjb3JyZWN0Rm9ybWF0IixjdXJyZW50Q29sQ2xhc3NOYW1lOiJjdXJyZW50Q29sQ2xhc3NOYW1lIixjdXJyZW50SGVhZGVyQ2xhc3NOYW1lOiJjdXJyZW50SGVhZGVyQ2xhc3NOYW1lIixj''@;'; put 'put ''dXJyZW50Um93Q2xhc3NOYW1lOiJjdXJyZW50Um93Q2xhc3NOYW1lIixjdXN0b21Cb3JkZXJzOiJjdXN0b21Cb3JkZXJzIixkYXRhOiJkYXRhIixkYXRhRG90Tm90YXRpb246ImRhdGFEb3ROb3RhdGlvbiIsZGF0YVNjaGVtYToiZGF0YVNjaGVtYSIsZGF0ZUZvcm1hdDoiZGF0ZUZvcm1hdCIs''@;'; put 'put ''ZGF0ZVBpY2tlckNvbmZpZzoiZGF0ZVBpY2tlckNvbmZpZyIsZGVmYXVsdERhdGU6ImRlZmF1bHREYXRlIix0YWJOYXZpZ2F0aW9uOiJ0YWJOYXZpZ2F0aW9uIix0aGVtZU5hbWU6InRoZW1lTmFtZSIsZGlzYWJsZVZpc3VhbFNlbGVjdGlvbjoiZGlzYWJsZVZpc3VhbFNlbGVjdGlvbiIsZHJh''@;'; put 'put ''Z1RvU2Nyb2xsOiJkcmFnVG9TY3JvbGwiLGRyb3Bkb3duTWVudToiZHJvcGRvd25NZW51IixlZGl0b3I6ImVkaXRvciIsZW50ZXJCZWdpbnNFZGl0aW5nOiJlbnRlckJlZ2luc0VkaXRpbmciLGVudGVyTW92ZXM6ImVudGVyTW92ZXMiLGZpbGxIYW5kbGU6ImZpbGxIYW5kbGUiLGZpbHRlcjoi''@;'; put 'put ''ZmlsdGVyIixmaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlOiJmaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlIixmaWx0ZXJzOiJmaWx0ZXJzIixmaXhlZENvbHVtbnNMZWZ0OiJmaXhlZENvbHVtbnNMZWZ0IixmaXhlZENvbHVtbnNTdGFydDoiZml4ZWRDb2x1bW5zU3RhcnQiLGZpeGVkUm93c0JvdHRvbToi''@;'; put 'put ''Zml4ZWRSb3dzQm90dG9tIixmaXhlZFJvd3NUb3A6ImZpeGVkUm93c1RvcCIsZm9ybXVsYXM6ImZvcm11bGFzIixmcmFnbWVudFNlbGVjdGlvbjoiZnJhZ21lbnRTZWxlY3Rpb24iLGhlYWRlckNsYXNzTmFtZToiaGVhZGVyQ2xhc3NOYW1lIixoZWlnaHQ6ImhlaWdodCIsaGlkZGVuQ29sdW1u''@;'; put 'put ''czoiaGlkZGVuQ29sdW1ucyIsaGlkZGVuUm93czoiaGlkZGVuUm93cyIsaW52YWxpZENlbGxDbGFzc05hbWU6ImludmFsaWRDZWxsQ2xhc3NOYW1lIixpbWVGYXN0RWRpdDoiaW1lRmFzdEVkaXQiLGxhYmVsOiJsYWJlbCIsbGFuZ3VhZ2U6Imxhbmd1YWdlIixsYXlvdXREaXJlY3Rpb246Imxh''@;'; put 'put ''eW91dERpcmVjdGlvbiIsbGljZW5zZUtleToibGljZW5zZUtleSIsbG9jYWxlOiJsb2NhbGUiLG1hbnVhbENvbHVtbkZyZWV6ZToibWFudWFsQ29sdW1uRnJlZXplIixtYW51YWxDb2x1bW5Nb3ZlOiJtYW51YWxDb2x1bW5Nb3ZlIixtYW51YWxDb2x1bW5SZXNpemU6Im1hbnVhbENvbHVtblJl''@;'; put 'put ''c2l6ZSIsbWFudWFsUm93TW92ZToibWFudWFsUm93TW92ZSIsbWFudWFsUm93UmVzaXplOiJtYW51YWxSb3dSZXNpemUiLG1heENvbHM6Im1heENvbHMiLG1heFJvd3M6Im1heFJvd3MiLG1lcmdlQ2VsbHM6Im1lcmdlQ2VsbHMiLG1pbkNvbHM6Im1pbkNvbHMiLG1pblJvd3M6Im1pblJvd3Mi''@;'; put 'put ''LG1pblNwYXJlQ29sczoibWluU3BhcmVDb2xzIixtaW5TcGFyZVJvd3M6Im1pblNwYXJlUm93cyIsbXVsdGlDb2x1bW5Tb3J0aW5nOiJtdWx0aUNvbHVtblNvcnRpbmciLG5hdmlnYWJsZUhlYWRlcnM6Im5hdmlnYWJsZUhlYWRlcnMiLG5lc3RlZEhlYWRlcnM6Im5lc3RlZEhlYWRlcnMiLG5l''@;'; put 'put ''c3RlZFJvd3M6Im5lc3RlZFJvd3MiLG5vV29yZFdyYXBDbGFzc05hbWU6Im5vV29yZFdyYXBDbGFzc05hbWUiLG51bWVyaWNGb3JtYXQ6Im51bWVyaWNGb3JtYXQiLG9ic2VydmVET01WaXNpYmlsaXR5OiJvYnNlcnZlRE9NVmlzaWJpbGl0eSIsb3V0c2lkZUNsaWNrRGVzZWxlY3RzOiJvdXRz''@;'; put 'put ''aWRlQ2xpY2tEZXNlbGVjdHMiLHBlcnNpc3RlbnRTdGF0ZToicGVyc2lzdGVudFN0YXRlIixwbGFjZWhvbGRlcjoicGxhY2Vob2xkZXIiLHBsYWNlaG9sZGVyQ2VsbENsYXNzTmFtZToicGxhY2Vob2xkZXJDZWxsQ2xhc3NOYW1lIixwcmV2ZW50T3ZlcmZsb3c6InByZXZlbnRPdmVyZmxvdyIs''@;'; put 'put ''cHJldmVudFdoZWVsOiJwcmV2ZW50V2hlZWwiLHJlYWRPbmx5OiJyZWFkT25seSIscmVhZE9ubHlDZWxsQ2xhc3NOYW1lOiJyZWFkT25seUNlbGxDbGFzc05hbWUiLHJlbmRlckFsbENvbHVtbnM6InJlbmRlckFsbENvbHVtbnMiLHJlbmRlckFsbFJvd3M6InJlbmRlckFsbFJvd3MiLHJlbmRl''@;'; put 'put ''cmVyOiJyZW5kZXJlciIscm93SGVhZGVyczoicm93SGVhZGVycyIscm93SGVhZGVyV2lkdGg6InJvd0hlYWRlcldpZHRoIixyb3dIZWlnaHRzOiJyb3dIZWlnaHRzIixzZWFyY2g6InNlYXJjaCIsc2VsZWN0aW9uTW9kZToic2VsZWN0aW9uTW9kZSIsc2VsZWN0T3B0aW9uczoic2VsZWN0T3B0''@;'; put 'put ''aW9ucyIsc2tpcENvbHVtbk9uUGFzdGU6InNraXBDb2x1bW5PblBhc3RlIixza2lwUm93T25QYXN0ZToic2tpcFJvd09uUGFzdGUiLHNvcnRCeVJlbGV2YW5jZToic29ydEJ5UmVsZXZhbmNlIixzb3VyY2U6InNvdXJjZSIsc3RhcnRDb2xzOiJzdGFydENvbHMiLHN0YXJ0Um93czoic3RhcnRS''@;'; put 'put ''b3dzIixzdHJldGNoSDoic3RyZXRjaEgiLHN0cmljdDoic3RyaWN0Iix0YWJsZUNsYXNzTmFtZToidGFibGVDbGFzc05hbWUiLHRhYk1vdmVzOiJ0YWJNb3ZlcyIsdGl0bGU6InRpdGxlIix0cmltRHJvcGRvd246InRyaW1Ecm9wZG93biIsdHJpbVJvd3M6InRyaW1Sb3dzIix0cmltV2hpdGVz''@;'; put 'put ''cGFjZToidHJpbVdoaXRlc3BhY2UiLHR5cGU6InR5cGUiLHVuY2hlY2tlZFRlbXBsYXRlOiJ1bmNoZWNrZWRUZW1wbGF0ZSIsdW5kbzoidW5kbyIsdmFsaWRhdG9yOiJ2YWxpZGF0b3IiLHZpZXdwb3J0Q29sdW1uUmVuZGVyaW5nT2Zmc2V0OiJ2aWV3cG9ydENvbHVtblJlbmRlcmluZ09mZnNl''@;'; put 'put ''dCIsdmlld3BvcnRSb3dSZW5kZXJpbmdPZmZzZXQ6InZpZXdwb3J0Um93UmVuZGVyaW5nT2Zmc2V0Iix2aXNpYmxlUm93czoidmlzaWJsZVJvd3MiLHdpZHRoOiJ3aWR0aCIsd29yZFdyYXA6IndvcmRXcmFwIixhZnRlckFkZENoaWxkOiJhZnRlckFkZENoaWxkIixhZnRlckF1dG9maWxsOiJh''@;'; put 'put ''ZnRlckF1dG9maWxsIixhZnRlckJlZ2luRWRpdGluZzoiYWZ0ZXJCZWdpbkVkaXRpbmciLGFmdGVyQ2VsbE1ldGFSZXNldDoiYWZ0ZXJDZWxsTWV0YVJlc2V0IixhZnRlckNoYW5nZToiYWZ0ZXJDaGFuZ2UiLGFmdGVyQ2hhbmdlc09ic2VydmVkOiJhZnRlckNoYW5nZXNPYnNlcnZlZCIsYWZ0''@;'; put 'put ''ZXJDb2x1bW5Db2xsYXBzZToiYWZ0ZXJDb2x1bW5Db2xsYXBzZSIsYWZ0ZXJDb2x1bW5FeHBhbmQ6ImFmdGVyQ29sdW1uRXhwYW5kIixhZnRlckNvbHVtbkZyZWV6ZToiYWZ0ZXJDb2x1bW5GcmVlemUiLGFmdGVyQ29sdW1uTW92ZToiYWZ0ZXJDb2x1bW5Nb3ZlIixhZnRlckNvbHVtblJlc2l6''@;'; put 'put ''ZToiYWZ0ZXJDb2x1bW5SZXNpemUiLGFmdGVyQ29sdW1uU2VxdWVuY2VDaGFuZ2U6ImFmdGVyQ29sdW1uU2VxdWVuY2VDaGFuZ2UiLGFmdGVyQ29sdW1uU29ydDoiYWZ0ZXJDb2x1bW5Tb3J0IixhZnRlckNvbHVtblVuZnJlZXplOiJhZnRlckNvbHVtblVuZnJlZXplIixhZnRlckNvbnRleHRN''@;'; put 'put ''ZW51RGVmYXVsdE9wdGlvbnM6ImFmdGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9ucyIsYWZ0ZXJDb250ZXh0TWVudUhpZGU6ImFmdGVyQ29udGV4dE1lbnVIaWRlIixhZnRlckNvbnRleHRNZW51U2hvdzoiYWZ0ZXJDb250ZXh0TWVudVNob3ciLGFmdGVyQ29weToiYWZ0ZXJDb3B5IixhZnRl''@;'; put 'put ''ckNvcHlMaW1pdDoiYWZ0ZXJDb3B5TGltaXQiLGFmdGVyQ3JlYXRlQ29sOiJhZnRlckNyZWF0ZUNvbCIsYWZ0ZXJDcmVhdGVSb3c6ImFmdGVyQ3JlYXRlUm93IixhZnRlckN1dDoiYWZ0ZXJDdXQiLGFmdGVyRGVzZWxlY3Q6ImFmdGVyRGVzZWxlY3QiLGFmdGVyRGVzdHJveToiYWZ0ZXJEZXN0''@;'; put 'put ''cm95IixhZnRlckRldGFjaENoaWxkOiJhZnRlckRldGFjaENoaWxkIixhZnRlckRvY3VtZW50S2V5RG93bjoiYWZ0ZXJEb2N1bWVudEtleURvd24iLGFmdGVyRHJhd1NlbGVjdGlvbjoiYWZ0ZXJEcmF3U2VsZWN0aW9uIixhZnRlckRyb3Bkb3duTWVudURlZmF1bHRPcHRpb25zOiJhZnRlckRy''@;'; put 'put ''b3Bkb3duTWVudURlZmF1bHRPcHRpb25zIixhZnRlckRyb3Bkb3duTWVudUhpZGU6ImFmdGVyRHJvcGRvd25NZW51SGlkZSIsYWZ0ZXJEcm9wZG93bk1lbnVTaG93OiJhZnRlckRyb3Bkb3duTWVudVNob3ciLGFmdGVyRmlsdGVyOiJhZnRlckZpbHRlciIsYWZ0ZXJGb3JtdWxhc1ZhbHVlc1Vw''@;'; put 'put ''ZGF0ZToiYWZ0ZXJGb3JtdWxhc1ZhbHVlc1VwZGF0ZSIsYWZ0ZXJHZXRDZWxsTWV0YToiYWZ0ZXJHZXRDZWxsTWV0YSIsYWZ0ZXJHZXRDb2xIZWFkZXI6ImFmdGVyR2V0Q29sSGVhZGVyIixhZnRlckdldENvbHVtbkhlYWRlclJlbmRlcmVyczoiYWZ0ZXJHZXRDb2x1bW5IZWFkZXJSZW5kZXJl''@;'; put 'put ''cnMiLGFmdGVyR2V0Um93SGVhZGVyOiJhZnRlckdldFJvd0hlYWRlciIsYWZ0ZXJHZXRSb3dIZWFkZXJSZW5kZXJlcnM6ImFmdGVyR2V0Um93SGVhZGVyUmVuZGVyZXJzIixhZnRlckhpZGVDb2x1bW5zOiJhZnRlckhpZGVDb2x1bW5zIixhZnRlckhpZGVSb3dzOiJhZnRlckhpZGVSb3dzIixh''@;'; put 'put ''ZnRlckluaXQ6ImFmdGVySW5pdCIsYWZ0ZXJMYW5ndWFnZUNoYW5nZToiYWZ0ZXJMYW5ndWFnZUNoYW5nZSIsYWZ0ZXJMaXN0ZW46ImFmdGVyTGlzdGVuIixhZnRlckxvYWREYXRhOiJhZnRlckxvYWREYXRhIixhZnRlck1lcmdlQ2VsbHM6ImFmdGVyTWVyZ2VDZWxscyIsYWZ0ZXJNb2RpZnlU''@;'; put 'put ''cmFuc2Zvcm1FbmQ6ImFmdGVyTW9kaWZ5VHJhbnNmb3JtRW5kIixhZnRlck1vZGlmeVRyYW5zZm9ybUZvY3VzOiJhZnRlck1vZGlmeVRyYW5zZm9ybUZvY3VzIixhZnRlck1vZGlmeVRyYW5zZm9ybVN0YXJ0OiJhZnRlck1vZGlmeVRyYW5zZm9ybVN0YXJ0IixhZnRlck1vbWVudHVtU2Nyb2xs''@;'; put 'put ''OiJhZnRlck1vbWVudHVtU2Nyb2xsIixhZnRlck5hbWVkRXhwcmVzc2lvbkFkZGVkOiJhZnRlck5hbWVkRXhwcmVzc2lvbkFkZGVkIixhZnRlck5hbWVkRXhwcmVzc2lvblJlbW92ZWQ6ImFmdGVyTmFtZWRFeHByZXNzaW9uUmVtb3ZlZCIsYWZ0ZXJPbkNlbGxDb250ZXh0TWVudToiYWZ0ZXJP''@;'; put 'put ''bkNlbGxDb250ZXh0TWVudSIsYWZ0ZXJPbkNlbGxDb3JuZXJEYmxDbGljazoiYWZ0ZXJPbkNlbGxDb3JuZXJEYmxDbGljayIsYWZ0ZXJPbkNlbGxDb3JuZXJNb3VzZURvd246ImFmdGVyT25DZWxsQ29ybmVyTW91c2VEb3duIixhZnRlck9uQ2VsbE1vdXNlRG93bjoiYWZ0ZXJPbkNlbGxNb3Vz''@;'; put 'put ''ZURvd24iLGFmdGVyT25DZWxsTW91c2VPdXQ6ImFmdGVyT25DZWxsTW91c2VPdXQiLGFmdGVyT25DZWxsTW91c2VPdmVyOiJhZnRlck9uQ2VsbE1vdXNlT3ZlciIsYWZ0ZXJPbkNlbGxNb3VzZVVwOiJhZnRlck9uQ2VsbE1vdXNlVXAiLGFmdGVyUGFzdGU6ImFmdGVyUGFzdGUiLGFmdGVyUGx1''@;'; put 'put ''Z2luc0luaXRpYWxpemVkOiJhZnRlclBsdWdpbnNJbml0aWFsaXplZCIsYWZ0ZXJSZWRvOiJhZnRlclJlZG8iLGFmdGVyUmVkb1N0YWNrQ2hhbmdlOiJhZnRlclJlZG9TdGFja0NoYW5nZSIsYWZ0ZXJSZWZyZXNoRGltZW5zaW9uczoiYWZ0ZXJSZWZyZXNoRGltZW5zaW9ucyIsYWZ0ZXJSZW1v''@;'; put 'put ''dmVDZWxsTWV0YToiYWZ0ZXJSZW1vdmVDZWxsTWV0YSIsYWZ0ZXJSZW1vdmVDb2w6ImFmdGVyUmVtb3ZlQ29sIixhZnRlclJlbW92ZVJvdzoiYWZ0ZXJSZW1vdmVSb3ciLGFmdGVyUmVuZGVyOiJhZnRlclJlbmRlciIsYWZ0ZXJSZW5kZXJlcjoiYWZ0ZXJSZW5kZXJlciIsYWZ0ZXJSb3dNb3Zl''@;'; put 'put ''OiJhZnRlclJvd01vdmUiLGFmdGVyUm93UmVzaXplOiJhZnRlclJvd1Jlc2l6ZSIsYWZ0ZXJSb3dTZXF1ZW5jZUNoYW5nZToiYWZ0ZXJSb3dTZXF1ZW5jZUNoYW5nZSIsYWZ0ZXJTY3JvbGxIb3Jpem9udGFsbHk6ImFmdGVyU2Nyb2xsSG9yaXpvbnRhbGx5IixhZnRlclNjcm9sbFZlcnRpY2Fs''@;'; put 'put ''bHk6ImFmdGVyU2Nyb2xsVmVydGljYWxseSIsYWZ0ZXJTY3JvbGw6ImFmdGVyU2Nyb2xsIixhZnRlclNlbGVjdENvbHVtbnM6ImFmdGVyU2VsZWN0Q29sdW1ucyIsYWZ0ZXJTZWxlY3Rpb246ImFmdGVyU2VsZWN0aW9uIixhZnRlclNlbGVjdGlvbkJ5UHJvcDoiYWZ0ZXJTZWxlY3Rpb25CeVBy''@;'; put 'put ''b3AiLGFmdGVyU2VsZWN0aW9uRW5kOiJhZnRlclNlbGVjdGlvbkVuZCIsYWZ0ZXJTZWxlY3Rpb25FbmRCeVByb3A6ImFmdGVyU2VsZWN0aW9uRW5kQnlQcm9wIixhZnRlclNlbGVjdGlvbkZvY3VzU2V0OiJhZnRlclNlbGVjdGlvbkZvY3VzU2V0IixhZnRlclNlbGVjdFJvd3M6ImFmdGVyU2Vs''@;'; put 'put ''ZWN0Um93cyIsYWZ0ZXJTZXRDZWxsTWV0YToiYWZ0ZXJTZXRDZWxsTWV0YSIsYWZ0ZXJTZXREYXRhQXRDZWxsOiJhZnRlclNldERhdGFBdENlbGwiLGFmdGVyU2V0RGF0YUF0Um93UHJvcDoiYWZ0ZXJTZXREYXRhQXRSb3dQcm9wIixhZnRlclNldFNvdXJjZURhdGFBdENlbGw6ImFmdGVyU2V0''@;'; put 'put ''U291cmNlRGF0YUF0Q2VsbCIsYWZ0ZXJTZXRUaGVtZToiYWZ0ZXJTZXRUaGVtZSIsYWZ0ZXJTaGVldEFkZGVkOiJhZnRlclNoZWV0QWRkZWQiLGFmdGVyU2hlZXRSZW5hbWVkOiJhZnRlclNoZWV0UmVuYW1lZCIsYWZ0ZXJTaGVldFJlbW92ZWQ6ImFmdGVyU2hlZXRSZW1vdmVkIixhZnRlclRy''@;'; put 'put ''aW1Sb3c6ImFmdGVyVHJpbVJvdyIsYWZ0ZXJVbmRvOiJhZnRlclVuZG8iLGFmdGVyVW5kb1N0YWNrQ2hhbmdlOiJhZnRlclVuZG9TdGFja0NoYW5nZSIsYWZ0ZXJVbmhpZGVDb2x1bW5zOiJhZnRlclVuaGlkZUNvbHVtbnMiLGFmdGVyVW5oaWRlUm93czoiYWZ0ZXJVbmhpZGVSb3dzIixhZnRl''@;'; put 'put ''clVubGlzdGVuOiJhZnRlclVubGlzdGVuIixhZnRlclVubWVyZ2VDZWxsczoiYWZ0ZXJVbm1lcmdlQ2VsbHMiLGFmdGVyVW50cmltUm93OiJhZnRlclVudHJpbVJvdyIsYWZ0ZXJVcGRhdGVEYXRhOiJhZnRlclVwZGF0ZURhdGEiLGFmdGVyVXBkYXRlU2V0dGluZ3M6ImFmdGVyVXBkYXRlU2V0''@;'; put 'put ''dGluZ3MiLGFmdGVyVmFsaWRhdGU6ImFmdGVyVmFsaWRhdGUiLGFmdGVyVmlld3BvcnRDb2x1bW5DYWxjdWxhdG9yT3ZlcnJpZGU6ImFmdGVyVmlld3BvcnRDb2x1bW5DYWxjdWxhdG9yT3ZlcnJpZGUiLGFmdGVyVmlld3BvcnRSb3dDYWxjdWxhdG9yT3ZlcnJpZGU6ImFmdGVyVmlld3BvcnRS''@;'; put 'put ''b3dDYWxjdWxhdG9yT3ZlcnJpZGUiLGFmdGVyVmlld1JlbmRlcjoiYWZ0ZXJWaWV3UmVuZGVyIixiZWZvcmVBZGRDaGlsZDoiYmVmb3JlQWRkQ2hpbGQiLGJlZm9yZUF1dG9maWxsOiJiZWZvcmVBdXRvZmlsbCIsYmVmb3JlQmVnaW5FZGl0aW5nOiJiZWZvcmVCZWdpbkVkaXRpbmciLGJlZm9y''@;'; put 'put ''ZUNlbGxBbGlnbm1lbnQ6ImJlZm9yZUNlbGxBbGlnbm1lbnQiLGJlZm9yZUNoYW5nZToiYmVmb3JlQ2hhbmdlIixiZWZvcmVDaGFuZ2VSZW5kZXI6ImJlZm9yZUNoYW5nZVJlbmRlciIsYmVmb3JlQ29sdW1uQ29sbGFwc2U6ImJlZm9yZUNvbHVtbkNvbGxhcHNlIixiZWZvcmVDb2x1bW5FeHBh''@;'; put 'put ''bmQ6ImJlZm9yZUNvbHVtbkV4cGFuZCIsYmVmb3JlQ29sdW1uRnJlZXplOiJiZWZvcmVDb2x1bW5GcmVlemUiLGJlZm9yZUNvbHVtbk1vdmU6ImJlZm9yZUNvbHVtbk1vdmUiLGJlZm9yZUNvbHVtblJlc2l6ZToiYmVmb3JlQ29sdW1uUmVzaXplIixiZWZvcmVDb2x1bW5Tb3J0OiJiZWZvcmVD''@;'; put 'put ''b2x1bW5Tb3J0IixiZWZvcmVDb2x1bW5XcmFwOiJiZWZvcmVDb2x1bW5XcmFwIixiZWZvcmVDb2x1bW5VbmZyZWV6ZToiYmVmb3JlQ29sdW1uVW5mcmVlemUiLGJlZm9yZUNvbXBvc2l0aW9uU3RhcnQ6ImJlZm9yZUNvbXBvc2l0aW9uU3RhcnQiLGJlZm9yZUNvbnRleHRNZW51U2V0SXRlbXM6''@;'; put 'put ''ImJlZm9yZUNvbnRleHRNZW51U2V0SXRlbXMiLGJlZm9yZUNvbnRleHRNZW51U2hvdzoiYmVmb3JlQ29udGV4dE1lbnVTaG93IixiZWZvcmVDb3B5OiJiZWZvcmVDb3B5IixiZWZvcmVDcmVhdGVDb2w6ImJlZm9yZUNyZWF0ZUNvbCIsYmVmb3JlQ3JlYXRlUm93OiJiZWZvcmVDcmVhdGVSb3ci''@;'; put 'put ''LGJlZm9yZUN1dDoiYmVmb3JlQ3V0IixiZWZvcmVEZXRhY2hDaGlsZDoiYmVmb3JlRGV0YWNoQ2hpbGQiLGJlZm9yZURyYXdCb3JkZXJzOiJiZWZvcmVEcmF3Qm9yZGVycyIsYmVmb3JlRHJvcGRvd25NZW51U2V0SXRlbXM6ImJlZm9yZURyb3Bkb3duTWVudVNldEl0ZW1zIixiZWZvcmVEcm9w''@;'; put 'put ''ZG93bk1lbnVTaG93OiJiZWZvcmVEcm9wZG93bk1lbnVTaG93IixiZWZvcmVGaWx0ZXI6ImJlZm9yZUZpbHRlciIsYmVmb3JlR2V0Q2VsbE1ldGE6ImJlZm9yZUdldENlbGxNZXRhIixiZWZvcmVIaWRlQ29sdW1uczoiYmVmb3JlSGlkZUNvbHVtbnMiLGJlZm9yZUhpZGVSb3dzOiJiZWZvcmVI''@;'; put 'put ''aWRlUm93cyIsYmVmb3JlSGlnaGxpZ2h0aW5nQ29sdW1uSGVhZGVyOiJiZWZvcmVIaWdobGlnaHRpbmdDb2x1bW5IZWFkZXIiLGJlZm9yZUhpZ2hsaWdodGluZ1Jvd0hlYWRlcjoiYmVmb3JlSGlnaGxpZ2h0aW5nUm93SGVhZGVyIixiZWZvcmVJbml0OiJiZWZvcmVJbml0IixiZWZvcmVJbml0''@;'; put 'put ''V2Fsa29udGFibGU6ImJlZm9yZUluaXRXYWxrb250YWJsZSIsYmVmb3JlS2V5RG93bjoiYmVmb3JlS2V5RG93biIsYmVmb3JlTGFuZ3VhZ2VDaGFuZ2U6ImJlZm9yZUxhbmd1YWdlQ2hhbmdlIixiZWZvcmVMb2FkRGF0YToiYmVmb3JlTG9hZERhdGEiLGJlZm9yZU1lcmdlQ2VsbHM6ImJlZm9y''@;'; put 'put ''ZU1lcmdlQ2VsbHMiLGJlZm9yZU9uQ2VsbENvbnRleHRNZW51OiJiZWZvcmVPbkNlbGxDb250ZXh0TWVudSIsYmVmb3JlT25DZWxsTW91c2VEb3duOiJiZWZvcmVPbkNlbGxNb3VzZURvd24iLGJlZm9yZU9uQ2VsbE1vdXNlT3V0OiJiZWZvcmVPbkNlbGxNb3VzZU91dCIsYmVmb3JlT25DZWxs''@;'; put 'put ''TW91c2VPdmVyOiJiZWZvcmVPbkNlbGxNb3VzZU92ZXIiLGJlZm9yZU9uQ2VsbE1vdXNlVXA6ImJlZm9yZU9uQ2VsbE1vdXNlVXAiLGJlZm9yZVBhc3RlOiJiZWZvcmVQYXN0ZSIsYmVmb3JlUmVkbzoiYmVmb3JlUmVkbyIsYmVmb3JlUmVkb1N0YWNrQ2hhbmdlOiJiZWZvcmVSZWRvU3RhY2tD''@;'; put 'put ''aGFuZ2UiLGJlZm9yZVJlZnJlc2hEaW1lbnNpb25zOiJiZWZvcmVSZWZyZXNoRGltZW5zaW9ucyIsYmVmb3JlUmVtb3ZlQ2VsbENsYXNzTmFtZXM6ImJlZm9yZVJlbW92ZUNlbGxDbGFzc05hbWVzIixiZWZvcmVSZW1vdmVDZWxsTWV0YToiYmVmb3JlUmVtb3ZlQ2VsbE1ldGEiLGJlZm9yZVJl''@;'; put 'put ''bW92ZUNvbDoiYmVmb3JlUmVtb3ZlQ29sIixiZWZvcmVSZW1vdmVSb3c6ImJlZm9yZVJlbW92ZVJvdyIsYmVmb3JlUmVuZGVyOiJiZWZvcmVSZW5kZXIiLGJlZm9yZVJlbmRlcmVyOiJiZWZvcmVSZW5kZXJlciIsYmVmb3JlUm93TW92ZToiYmVmb3JlUm93TW92ZSIsYmVmb3JlUm93UmVzaXpl''@;'; put 'put ''OiJiZWZvcmVSb3dSZXNpemUiLGJlZm9yZVJvd1dyYXA6ImJlZm9yZVJvd1dyYXAiLGJlZm9yZVNlbGVjdENvbHVtbnM6ImJlZm9yZVNlbGVjdENvbHVtbnMiLGJlZm9yZVNlbGVjdGlvbkZvY3VzU2V0OiJiZWZvcmVTZWxlY3Rpb25Gb2N1c1NldCIsYmVmb3JlU2VsZWN0aW9uSGlnaGxpZ2h0''@;'; put 'put ''U2V0OiJiZWZvcmVTZWxlY3Rpb25IaWdobGlnaHRTZXQiLGJlZm9yZVNlbGVjdFJvd3M6ImJlZm9yZVNlbGVjdFJvd3MiLGJlZm9yZVNldENlbGxNZXRhOiJiZWZvcmVTZXRDZWxsTWV0YSIsYmVmb3JlU2V0UmFuZ2VFbmQ6ImJlZm9yZVNldFJhbmdlRW5kIixiZWZvcmVTZXRSYW5nZVN0YXJ0''@;'; put 'put ''OiJiZWZvcmVTZXRSYW5nZVN0YXJ0IixiZWZvcmVTZXRSYW5nZVN0YXJ0T25seToiYmVmb3JlU2V0UmFuZ2VTdGFydE9ubHkiLGJlZm9yZVN0cmV0Y2hpbmdDb2x1bW5XaWR0aDoiYmVmb3JlU3RyZXRjaGluZ0NvbHVtbldpZHRoIixiZWZvcmVUb3VjaFNjcm9sbDoiYmVmb3JlVG91Y2hTY3Jv''@;'; put 'put ''bGwiLGJlZm9yZVRyaW1Sb3c6ImJlZm9yZVRyaW1Sb3ciLGJlZm9yZVVuZG86ImJlZm9yZVVuZG8iLGJlZm9yZVVuZG9TdGFja0NoYW5nZToiYmVmb3JlVW5kb1N0YWNrQ2hhbmdlIixiZWZvcmVVbmhpZGVDb2x1bW5zOiJiZWZvcmVVbmhpZGVDb2x1bW5zIixiZWZvcmVVbmhpZGVSb3dzOiJi''@;'; put 'put ''ZWZvcmVVbmhpZGVSb3dzIixiZWZvcmVVbm1lcmdlQ2VsbHM6ImJlZm9yZVVubWVyZ2VDZWxscyIsYmVmb3JlVW50cmltUm93OiJiZWZvcmVVbnRyaW1Sb3ciLGJlZm9yZVVwZGF0ZURhdGE6ImJlZm9yZVVwZGF0ZURhdGEiLGJlZm9yZVZhbGlkYXRlOiJiZWZvcmVWYWxpZGF0ZSIsYmVmb3Jl''@;'; put 'put ''VmFsdWVSZW5kZXI6ImJlZm9yZVZhbHVlUmVuZGVyIixiZWZvcmVWaWV3cG9ydFNjcm9sbDoiYmVmb3JlVmlld3BvcnRTY3JvbGwiLGJlZm9yZVZpZXdwb3J0U2Nyb2xsSG9yaXpvbnRhbGx5OiJiZWZvcmVWaWV3cG9ydFNjcm9sbEhvcml6b250YWxseSIsYmVmb3JlVmlld3BvcnRTY3JvbGxW''@;'; put 'put ''ZXJ0aWNhbGx5OiJiZWZvcmVWaWV3cG9ydFNjcm9sbFZlcnRpY2FsbHkiLGJlZm9yZVZpZXdSZW5kZXI6ImJlZm9yZVZpZXdSZW5kZXIiLGNvbnN0cnVjdDoiY29uc3RydWN0Iixpbml0OiJpbml0Iixtb2RpZnlBdXRvQ29sdW1uU2l6ZVNlZWQ6Im1vZGlmeUF1dG9Db2x1bW5TaXplU2VlZCIs''@;'; put 'put ''bW9kaWZ5QXV0b2ZpbGxSYW5nZToibW9kaWZ5QXV0b2ZpbGxSYW5nZSIsbW9kaWZ5Q29sSGVhZGVyOiJtb2RpZnlDb2xIZWFkZXIiLG1vZGlmeUNvbHVtbkhlYWRlckhlaWdodDoibW9kaWZ5Q29sdW1uSGVhZGVySGVpZ2h0Iixtb2RpZnlDb2x1bW5IZWFkZXJWYWx1ZToibW9kaWZ5Q29sdW1u''@;'; put 'put ''SGVhZGVyVmFsdWUiLG1vZGlmeUNvbFdpZHRoOiJtb2RpZnlDb2xXaWR0aCIsbW9kaWZ5Q29weWFibGVSYW5nZToibW9kaWZ5Q29weWFibGVSYW5nZSIsbW9kaWZ5RmlsdGVyc011bHRpU2VsZWN0VmFsdWU6Im1vZGlmeUZpbHRlcnNNdWx0aVNlbGVjdFZhbHVlIixtb2RpZnlGb2N1c2VkRWxl''@;'; put 'put ''bWVudDoibW9kaWZ5Rm9jdXNlZEVsZW1lbnQiLG1vZGlmeURhdGE6Im1vZGlmeURhdGEiLG1vZGlmeUZvY3VzT25UYWJOYXZpZ2F0aW9uOiJtb2RpZnlGb2N1c09uVGFiTmF2aWdhdGlvbiIsbW9kaWZ5R2V0Q2VsbENvb3JkczoibW9kaWZ5R2V0Q2VsbENvb3JkcyIsbW9kaWZ5R2V0Q29vcmRz''@;'; put 'put ''RWxlbWVudDoibW9kaWZ5R2V0Q29vcmRzRWxlbWVudCIsbW9kaWZ5Um93RGF0YToibW9kaWZ5Um93RGF0YSIsbW9kaWZ5Um93SGVhZGVyOiJtb2RpZnlSb3dIZWFkZXIiLG1vZGlmeVJvd0hlYWRlcldpZHRoOiJtb2RpZnlSb3dIZWFkZXJXaWR0aCIsbW9kaWZ5Um93SGVpZ2h0OiJtb2RpZnlS''@;'; put 'put ''b3dIZWlnaHQiLG1vZGlmeVJvd0hlaWdodEJ5T3ZlcmxheU5hbWU6Im1vZGlmeVJvd0hlaWdodEJ5T3ZlcmxheU5hbWUiLG1vZGlmeVNvdXJjZURhdGE6Im1vZGlmeVNvdXJjZURhdGEiLG1vZGlmeVRyYW5zZm9ybUVuZDoibW9kaWZ5VHJhbnNmb3JtRW5kIixtb2RpZnlUcmFuc2Zvcm1Gb2N1''@;'; put 'put ''czoibW9kaWZ5VHJhbnNmb3JtRm9jdXMiLG1vZGlmeVRyYW5zZm9ybVN0YXJ0OiJtb2RpZnlUcmFuc2Zvcm1TdGFydCIscGVyc2lzdGVudFN0YXRlTG9hZDoicGVyc2lzdGVudFN0YXRlTG9hZCIscGVyc2lzdGVudFN0YXRlUmVzZXQ6InBlcnNpc3RlbnRTdGF0ZVJlc2V0IixwZXJzaXN0ZW50''@;'; put 'put ''U3RhdGVTYXZlOiJwZXJzaXN0ZW50U3RhdGVTYXZlIn0sZmVhdHVyZXM6W2RhKFtZbSxPcGVdKSx3bF0sZGVjbHM6Mix2YXJzOjEsY29uc3RzOltbImNvbnRhaW5lciIsIiJdLFszLCJpZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmR3QoMCwiZGl2IiwxLDApLDImZCYmTWUoImlk''@;'; put 'put ''IixoLmhvdElkKX0sZW5jYXBzdWxhdGlvbjoyfSl9cmV0dXJuIGN9KSgpLG85PSgoKT0+e2NsYXNzIGN7c3RhdGljIHZlcnNpb249IjE1LjMuMCI7c3RhdGljIGZvclJvb3QoKXtyZXR1cm57bmdNb2R1bGU6Yyxwcm92aWRlcnM6W1ltXX19c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihkKXty''@;'; put 'put ''ZXR1cm4gbmV3KGR8fGMpfTtzdGF0aWMgXHUwMjc1bW9kPWtpKHt0eXBlOmN9KTtzdGF0aWMgXHUwMjc1aW5qPUFyKHt9KX1yZXR1cm4gY30pKCk7Y29uc3QgUHBlPSJoYW5kc29udGFibGVFZGl0b3IiO2NsYXNzIFJYIGV4dGVuZHMgYTl7c3RhdGljIGdldCBFRElUT1JfVFlQRSgpe3JldHVy''@;'; put 'put ''biJoYW5kc29udGFibGUifW9wZW4oKXtzdXBlci5vcGVuKCk7Y29uc3QgbD10aGlzLmh0Q29udGFpbmVyLnN0eWxlO3RoaXMuaHRFZGl0b3ImJih0aGlzLmh0RWRpdG9yLmRlc3Ryb3koKSxsLndpZHRoPSIiLGwuaGVpZ2h0PSIiLGwub3ZlcmZsb3c9IiIpLCJub25lIj09PWwuZGlzcGxheSYm''@;'; put 'put ''KGwuZGlzcGxheT0iIiksdGhpcy5odEVkaXRvcj1uZXcgdGhpcy5ob3QuY29uc3RydWN0b3IodGhpcy5odENvbnRhaW5lcix0aGlzLmh0T3B0aW9ucyksdGhpcy5odEVkaXRvci5pbml0KCksdGhpcy5odEVkaXRvci5yb290RWxlbWVudC5zdHlsZS5kaXNwbGF5PSIiLHRoaXMuY2VsbFByb3Bl''@;'; put 'put ''cnRpZXMuc3RyaWN0P3RoaXMuaHRFZGl0b3Iuc2VsZWN0Q2VsbCgwLDApOnRoaXMuaHRFZGl0b3IuZGVzZWxlY3RDZWxsKCksd0UodGhpcy5URVhUQVJFQSwwLHRoaXMuVEVYVEFSRUEudmFsdWUubGVuZ3RoKSx0aGlzLmh0RWRpdG9yLnVwZGF0ZVNldHRpbmdzKHt3aWR0aDp0aGlzLmdldFdp''@;'; put 'put ''ZHRoKCksaGVpZ2h0OnRoaXMuZ2V0SGVpZ2h0KCl9KSx0aGlzLnJlZnJlc2hEaW1lbnNpb25zKCl9Y2xvc2UoKXt0aGlzLmh0RWRpdG9yJiYodGhpcy5odEVkaXRvci5yb290RWxlbWVudC5zdHlsZS5kaXNwbGF5PSJub25lIiksdGhpcy5yZW1vdmVIb29rc0J5S2V5KCJiZWZvcmVLZXlEb3du''@;'; put 'put ''Iiksc3VwZXIuY2xvc2UoKX1wcmVwYXJlKGwsYSxkLGgsZix2KXtzdXBlci5wcmVwYXJlKGwsYSxkLGgsZix2KTtjb25zdCBNPXRoaXMsRD17c3RhcnRSb3dzOjAsc3RhcnRDb2xzOjAsbWluUm93czowLG1pbkNvbHM6MCxjbGFzc05hbWU6Imxpc3Rib3giLGNvcHlQYXN0ZTohMSxhdXRvQ29s''@;'; put 'put ''dW1uU2l6ZTohMSxhdXRvUm93U2l6ZTohMSxyZWFkT25seTohMCxmaWxsSGFuZGxlOiExLGF1dG9XcmFwQ29sOiExLGF1dG9XcmFwUm93OiExLGFyaWFUYWdzOiExLHRoZW1lTmFtZTp0aGlzLmhvdC5nZXRDdXJyZW50VGhlbWVOYW1lKCksYWZ0ZXJPbkNlbGxNb3VzZURvd24oWixyZSl7Y29u''@;'; put 'put ''c3QgY2U9dGhpcy5nZXRTb3VyY2VEYXRhKHJlLnJvdyxyZS5jb2wpO3ZvaWQgMCE9PWNlJiZNLnNldFZhbHVlKGNlKSxNLmhvdC5kZXN0cm95RWRpdG9yKCl9LHByZXZlbnRXaGVlbDohMCxsYXlvdXREaXJlY3Rpb246dGhpcy5ob3QuaXNSdGwoKT8icnRsIjoibHRyIn07dGhpcy5jZWxsUHJv''@;'; put 'put ''cGVydGllcy5oYW5kc29udGFibGUmJkV1KEQsdi5oYW5kc29udGFibGUpLHRoaXMuaHRPcHRpb25zPUR9YmVnaW5FZGl0aW5nKGwsYSl7Y29uc3QgZD10aGlzLmhvdC5nZXRTZXR0aW5ncygpLm9uQmVnaW5FZGl0aW5nO2QmJiExPT09ZCgpfHxzdXBlci5iZWdpbkVkaXRpbmcobCxhKX1jcmVh''@;'; put 'put ''dGVFbGVtZW50cygpe3N1cGVyLmNyZWF0ZUVsZW1lbnRzKCk7Y29uc3QgbD10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiRElWIik7bC5jbGFzc05hbWU9ImhhbmRzb250YWJsZUVkaXRvciIsdGhpcy5URVhUQVJFQV9QQVJFTlQuYXBwZW5kQ2hpbGQobCksdGhpcy5odENv''@;'; put 'put ''bnRhaW5lcj1sLHRoaXMuYXNzaWduSG9va3MoKX1maW5pc2hFZGl0aW5nKGwsYSxkKXtpZih0aGlzLmh0RWRpdG9yJiZ0aGlzLmh0RWRpdG9yLmlzTGlzdGVuaW5nKCkmJnRoaXMuaG90Lmxpc3RlbigpLHRoaXMuaHRFZGl0b3ImJnRoaXMuaHRFZGl0b3IuZ2V0U2VsZWN0ZWRMYXN0KCkpe2Nv''@;'; put 'put ''bnN0IGg9dGhpcy5odEVkaXRvci5nZXRWYWx1ZSgpO3ZvaWQgMCE9PWgmJnRoaXMuc2V0VmFsdWUoaCl9c3VwZXIuZmluaXNoRWRpdGluZyhsLGEsZCl9Z2V0SGVpZ2h0KCl7cmV0dXJuIHRoaXMuaHRFZGl0b3Iudmlldy5nZXRUYWJsZUhlaWdodCgpKzF9Z2V0V2lkdGgoKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5odEVkaXRvci52aWV3LmdldFRhYmxlV2lkdGgoKX1hc3NpZ25Ib29rcygpe3RoaXMuaG90LmFkZEhvb2soImFmdGVyRGVzdHJveSIsKCk9Pnt2YXIgbDtudWxsPT09KGw9dGhpcy5odEVkaXRvcil8fHZvaWQgMD09PWx8fGwuZGVzdHJveSgpfSksdGhpcy5ob3QuYWRkSG9vaygiYWZ0ZXJT''@;'; put 'put ''ZXRUaGVtZSIsKGwsYSk9Pnt2YXIgZDthfHxudWxsPT09KGQ9dGhpcy5odEVkaXRvcil8fHZvaWQgMD09PWR8fGQudXNlVGhlbWUobCl9KX1yZWdpc3RlclNob3J0Y3V0cygpe2NvbnN0IGE9dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZWRpdG9yIik7c3VwZXIu''@;'; put 'put ''cmVnaXN0ZXJTaG9ydGN1dHMoKTtjb25zdCBoPShmLHYpPT57Y29uc3QgTT10aGlzLmh0RWRpdG9yO2lmKHZvaWQgMCE9PWYmJihmPDB8fE0uZmxpcHBlZCYmZj5NLmNvdW50Um93cygpLTE/TS5kZXNlbGVjdENlbGwoKTpNLnNlbGVjdENlbGwoZiwwKSxNLmdldERhdGEoKS5sZW5ndGgpKXJl''@;'; put 'put ''dHVybiB2LnByZXZlbnREZWZhdWx0KCksQjIodiksdGhpcy5ob3QubGlzdGVuKCksdGhpcy5URVhUQVJFQS5mb2N1cygpLCExfTthLmFkZFNob3J0Y3V0cyhbe2tleXM6W1siQXJyb3dVcCJdXSxjYWxsYmFjazpmPT57Y29uc3Qgdj10aGlzLmh0RWRpdG9yO2xldCBNLEQ7cmV0dXJuIXYuZ2V0''@;'; put 'put ''U2VsZWN0ZWRMYXN0KCkmJnYuZmxpcHBlZD9NPXYuY291bnRSb3dzKCktMTp2LmdldFNlbGVjdGVkTGFzdCgpJiYodi5mbGlwcGVkPyhEPXYuZ2V0U2VsZWN0ZWRMYXN0KClbMF0sTT1NYXRoLm1heCgwLEQtMSkpOihEPXYuZ2V0U2VsZWN0ZWRMYXN0KClbMF0sTT1ELTEpKSxoKE0sZil9LHBy''@;'; put 'put ''ZXZlbnREZWZhdWx0OiExfSx7a2V5czpbWyJBcnJvd0Rvd24iXV0sY2FsbGJhY2s6Zj0+e2NvbnN0IHY9dGhpcy5odEVkaXRvcjtsZXQgTSxEO2lmKHYuZ2V0U2VsZWN0ZWRMYXN0KCl8fHYuZmxpcHBlZCl7aWYodi5nZXRTZWxlY3RlZExhc3QoKSlpZih2LmZsaXBwZWQpTT12LmdldFNlbGVj''@;'; put 'put ''dGVkTGFzdCgpWzBdKzE7ZWxzZSBpZighdi5mbGlwcGVkKXtjb25zdCBaPXYuY291bnRSb3dzKCktMTtEPXYuZ2V0U2VsZWN0ZWRMYXN0KClbMF0sTT1NYXRoLm1pbihaLEQrMSl9fWVsc2UgTT0wO3JldHVybiBoKE0sZil9LHByZXZlbnREZWZhdWx0OiExfV0se2dyb3VwOlBwZSxyZWxhdGl2''@;'; put 'put ''ZVRvR3JvdXA6V20scG9zaXRpb246ImJlZm9yZSJ9KX11bnJlZ2lzdGVyU2hvcnRjdXRzKCl7c3VwZXIudW5yZWdpc3RlclNob3J0Y3V0cygpLHRoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImVkaXRvciIpLnJlbW92ZVNob3J0Y3V0c0J5R3JvdXAoUHBlKX19ZnVu''@;'; put 'put ''Y3Rpb24gRnBlKGMsbCxhKXtIcGUoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIEhwZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24galAo''@;'; put 'put ''YyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIG9hdChjKXt2YXIgbD1mdW5jdGlvbiBzYXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lm''@;'; put 'put ''KCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10''@;'; put 'put ''eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIExYKGMsbCl7cmV0dXJuIGMuZ2V0KE9YKGMsbCkpfWZ1bmN0aW9uIE9YKGMs''@;'; put 'put ''bCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgUFg9bmV3IFdlYWtNYXAsTnBl''@;'; put 'put ''PW5ldyBXZWFrTWFwLEZYPW5ldyBXZWFrU2V0O2NsYXNzIEhYIGV4dGVuZHMgUlh7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIGFhdChjLGwpe0hwZShjLGwpLGwuYWRkKGMpfSh0aGlzLEZYKSxqUCh0aGlzLCJxdWVyeSIsbnVsbCksalAodGhpcywic3RyaXBw''@;'; put 'put ''ZWRDaG9pY2VzIixbXSksalAodGhpcywicmF3Q2hvaWNlcyIsW10pLEZwZSh0aGlzLFBYLHRoaXMuaG90Lmd1aWQuc2xpY2UoMCw5KSksRnBlKHRoaXMsTnBlLE1FKCgpPT57dGhpcy5mb2N1cygpfSwxMDApKSxqUCh0aGlzLCJzb3J0QnlSZWxldmFuY2UiLGZ1bmN0aW9uKGwsYSxkKXtjb25z''@;'; put 'put ''dCBoPVtdLGY9W10sdj1sLmxlbmd0aDtsZXQgRCxaLHJlLGNlLE09YS5sZW5ndGg7aWYoMD09PXYpe2ZvcihyZT0wO3JlPE07cmUrKylmLnB1c2gocmUpO3JldHVybiBmfWZvcihyZT0wO3JlPE07cmUrKyl7aWYoWj1nJChsYyhhW3JlXSkpLGQpY2U9Wi5pbmRleE9mKGwpO2Vsc2V7Y29uc3Qg''@;'; put 'put ''YmU9dGhpcy5jZWxsUHJvcGVydGllcy5sb2NhbGU7Y2U9Wi50b0xvY2FsZUxvd2VyQ2FzZShiZSkuaW5kZXhPZihsLnRvTG9jYWxlTG93ZXJDYXNlKGJlKSl9LTEhPT1jZSYmKEQ9Wi5sZW5ndGgtY2UtdixoLnB1c2goe2Jhc2VJbmRleDpyZSxpbmRleDpjZSxjaGFyc0xlZnQ6RCx2YWx1ZTpa''@;'; put 'put ''fSkpfWZvcihoLnNvcnQoKGJlLEVlKT0+e2lmKC0xPT09RWUuaW5kZXgpcmV0dXJuLTE7aWYoLTE9PT1iZS5pbmRleClyZXR1cm4gMTtpZihiZS5pbmRleDxFZS5pbmRleClyZXR1cm4tMTtpZihFZS5pbmRleDxiZS5pbmRleClyZXR1cm4gMTtpZihiZS5pbmRleD09PUVlLmluZGV4KXtpZihi''@;'; put 'put ''ZS5jaGFyc0xlZnQ8RWUuY2hhcnNMZWZ0KXJldHVybi0xO2lmKGJlLmNoYXJzTGVmdD5FZS5jaGFyc0xlZnQpcmV0dXJuIDF9cmV0dXJuIDB9KSxyZT0wLE09aC5sZW5ndGg7cmU8TTtyZSsrKWYucHVzaChoW3JlXS5iYXNlSW5kZXgpO3JldHVybiBmfSl9c3RhdGljIGdldCBFRElUT1JfVFlQ''@;'; put 'put ''RSgpe3JldHVybiJhdXRvY29tcGxldGUifWdldFZhbHVlKCl7Y29uc3QgbD10aGlzLnJhd0Nob2ljZXMuZmluZChhPT50aGlzLnN0cmlwVmFsdWVJZk5lZWRlZChhKT09PXRoaXMuVEVYVEFSRUEudmFsdWUpO3JldHVybiBQYShsKT9sOnRoaXMuVEVYVEFSRUEudmFsdWV9Y3JlYXRlRWxlbWVu''@;'; put 'put ''dHMoKXtzdXBlci5jcmVhdGVFbGVtZW50cygpLFRpKHRoaXMuaHRDb250YWluZXIsImF1dG9jb21wbGV0ZUVkaXRvciIpLFRpKHRoaXMuaHRDb250YWluZXIsLTE9PT10aGlzLmhvdC5yb290V2luZG93Lm5hdmlnYXRvci5wbGF0Zm9ybS5pbmRleE9mKCJNYWMiKT8iIjoiaHRNYWNTY3JvbGwi''@;'; put 'put ''KSx0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmFyaWFUYWdzJiZ2byh0aGlzLlRFWFRBUkVBLFtbInR5cGUiLCJ0ZXh0Il0sWyJyb2xlIiwiY29tYm9ib3giXSxFMmUoImxpc3Rib3giKSxbImFyaWEtYXV0b2NvbXBsZXRlIiwibGlzdCJdXSl9cHJlcGFyZShsLGEsZCxoLGYsdil7c3VwZXIucHJl''@;'; put 'put ''cGFyZShsLGEsZCxoLGYsdiksdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5hcmlhVGFncyYmdm8odGhpcy5URVhUQVJFQSxbTjIoImZhbHNlIiksclhlKGAke0xYKFBYLHRoaXMpfS1saXN0Ym94LSR7bH0tJHthfWApXSl9b3Blbigpe3N1cGVyLm9wZW4oKTtjb25zdCBsPXZvaWQgMD09PXRoaXMu''@;'; put 'put ''Y2VsbFByb3BlcnRpZXMudHJpbURyb3Bkb3dufHx0aGlzLmNlbGxQcm9wZXJ0aWVzLnRyaW1Ecm9wZG93bixhPXRoaXMuaG90LmdldFNldHRpbmdzKCkuYXJpYVRhZ3MsZD1BcnJheS5pc0FycmF5KHRoaXMuY2VsbFByb3BlcnRpZXMuc291cmNlKT90aGlzLmNlbGxQcm9wZXJ0aWVzLnNvdXJj''@;'; put 'put ''ZTpudWxsLGg9ZD8ubGVuZ3RoLHtyb3c6Zixjb2w6dn09dGhpczt0aGlzLnNob3dFZGl0YWJsZUVsZW1lbnQoKSx0aGlzLmZvY3VzKCksdGhpcy5hZGRIb29rKCJiZWZvcmVLZXlEb3duIixNPT50aGlzLm9uQmVmb3JlS2V5RG93bihNKSksdGhpcy5odEVkaXRvci5hZGRIb29rKCJhZnRlclNj''@;'; put 'put ''cm9sbCIsTFgoTnBlLHRoaXMpKSx0aGlzLmh0RWRpdG9yLnVwZGF0ZVNldHRpbmdzKHtjb2xXaWR0aHM6bD9bc3UodGhpcy5URVhUQVJFQSktMl06dm9pZCAwLGF1dG9Db2x1bW5TaXplOiEwLHJlbmRlcmVyOihNLEQsWixyZSxjZSxiZSxFZSk9PntBZyhNLEQsWixyZSxjZSxiZSxFZSk7Y29u''@;'; put 'put ''c3R7ZmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZTpCZSxhbGxvd0h0bWw6cWUsbG9jYWxlOnJ0fT10aGlzLmNlbGxQcm9wZXJ0aWVzLHB0PXRoaXMucXVlcnk7bGV0IEp0LHZuLGR0PWxjKGJlKTtkdCYmIXFlJiYoSnQ9ITA9PT1CZT9kdC5pbmRleE9mKHB0KTpkdC50b0xvY2FsZUxvd2VyQ2FzZShy''@;'; put 'put ''dCkuaW5kZXhPZihwdC50b0xvY2FsZUxvd2VyQ2FzZShydCkpLC0xIT09SnQmJih2bj1kdC5zdWJzdHIoSnQscHQubGVuZ3RoKSxkdD1kdC5yZXBsYWNlKHZuLGA8c3Ryb25nPiR7dm59PC9zdHJvbmc+YCkpKSxhJiZ2byhELFtbInJvbGUiLCJvcHRpb24iXSwuLi5kP1tzWGUoaCldOltdLC4u''@;'; put 'put ''LmQ/W2xYZShkLmluZGV4T2YoYmUpKzEpXTpbXSxbImlkIixgJHt0aGlzLmh0RWRpdG9yLnJvb3RFbGVtZW50LmlkfV8ke1p9LSR7cmV9YF1dKSxELmlubmVySFRNTD1kdH0sYWZ0ZXJTZWxlY3Rpb25FbmQ6KE0sRCk9PntpZihhKXtjb25zdCBaPWNlPT57dm8oY2UsW1siYXJpYS1zZWxlY3Rl''@;'; put 'put ''ZCIsInRydWUiXV0pLHZvKHRoaXMuVEVYVEFSRUEsLi4uKGM9PlsiYXJpYS1hY3RpdmVkZXNjZW5kYW50IixjXSkoY2UuaWQpKX0scmU9dGhpcy5odEVkaXRvci5nZXRDZWxsKE0sRCwhMCk7bnVsbCE9PXJlP1oocmUpOnRoaXMuaHRFZGl0b3IuYWRkSG9va09uY2UoImFmdGVyU2Nyb2xsVmVy''@;'; put 'put ''dGljYWxseSIsKCk9Pntjb25zdCBjZT10aGlzLmh0RWRpdG9yLmdldENlbGwoTSxELCEwKTtaKGNlKX0pfX19KSxhJiYodm8odGhpcy5odEVkaXRvci52aWV3Ll93dC53dE92ZXJsYXlzLnd0VGFibGUuVEFCTEUsInJvbGUiLCJwcmVzZW50YXRpb24iKSx2byh0aGlzLmh0RWRpdG9yLnJvb3RF''@;'; put 'put ''bGVtZW50LFtbInJvbGUiLCJsaXN0Ym94Il0sYVhlKCJwb2xpdGUiKSxvWGUoInRleHQiKSxbImlkIixgJHtMWChQWCx0aGlzKX0tbGlzdGJveC0ke2Z9LSR7dn1gXV0pLHZvKHRoaXMuVEVYVEFSRUEsLi4uTjIoInRydWUiKSkpLHRoaXMuaG90Ll9yZWdpc3RlclRpbWVvdXQoKCk9Pnt0aGlz''@;'; put 'put ''LnF1ZXJ5Q2hvaWNlcyh0aGlzLlRFWFRBUkVBLnZhbHVlKX0pfWNsb3NlKCl7dGhpcy5yZW1vdmVIb29rc0J5S2V5KCJiZWZvcmVLZXlEb3duIiksc3VwZXIuY2xvc2UoKSx0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmFyaWFUYWdzJiZ2byh0aGlzLlRFWFRBUkVBLFtOMigiZmFsc2UiKV0pfWRp''@;'; put 'put ''c2NhcmRFZGl0b3IobCl7c3VwZXIuZGlzY2FyZEVkaXRvcihsKSx0aGlzLmhvdC52aWV3LnJlbmRlcigpfXF1ZXJ5Q2hvaWNlcyhsKXtjb25zdCBhPXRoaXMuY2VsbFByb3BlcnRpZXMuc291cmNlO3RoaXMucXVlcnk9bCwiZnVuY3Rpb24iPT10eXBlb2YgYT9hLmNhbGwodGhpcy5jZWxsUHJv''@;'; put 'put ''cGVydGllcyxsLGQ9Pnt0aGlzLnJhd0Nob2ljZXM9ZCx0aGlzLnVwZGF0ZUNob2ljZXNMaXN0KHRoaXMuc3RyaXBWYWx1ZXNJZk5lZWRlZChkKSl9KTpBcnJheS5pc0FycmF5KGEpPyh0aGlzLnJhd0Nob2ljZXM9YSx0aGlzLnVwZGF0ZUNob2ljZXNMaXN0KHRoaXMuc3RyaXBWYWx1ZXNJZk5l''@;'; put 'put ''ZWRlZChhKSkpOnRoaXMudXBkYXRlQ2hvaWNlc0xpc3QoW10pfXVwZGF0ZUNob2ljZXNMaXN0KGwpe2NvbnN0IGE9UyQodGhpcy5URVhUQVJFQSksZD16MmUodGhpcy5URVhUQVJFQSksaD10aGlzLmNlbGxQcm9wZXJ0aWVzLnNvcnRCeVJlbGV2YW5jZSxmPXRoaXMuY2VsbFByb3BlcnRpZXMu''@;'; put 'put ''ZmlsdGVyO2xldCB2PW51bGwsTT1udWxsLEQ9bDtoJiYodj10aGlzLnNvcnRCeVJlbGV2YW5jZSh0aGlzLnN0cmlwVmFsdWVJZk5lZWRlZCh0aGlzLmdldFZhbHVlKCkpLEQsdGhpcy5jZWxsUHJvcGVydGllcy5maWx0ZXJpbmdDYXNlU2Vuc2l0aXZlKSk7Y29uc3QgWj1BcnJheS5pc0FycmF5''@;'; put 'put ''KHYpP3YubGVuZ3RoOjA7aWYoITE9PT1mKVomJihNPXZbMF0pO2Vsc2V7Y29uc3QgcmU9W107Zm9yKGxldCBjZT0wLGJlPUQubGVuZ3RoO2NlPGJlJiYhKGgmJlo8PWNlKTtjZSsrKXJlLnB1c2goWj9EW3ZbY2VdXTpEW2NlXSk7TT0wLEQ9cmV9dGhpcy5zdHJpcHBlZENob2ljZXM9RCx0aGlz''@;'; put 'put ''Lmh0RWRpdG9yLnJvb3RFbGVtZW50LnN0eWxlLmRpc3BsYXk9MD09PUQubGVuZ3RoPyJub25lIjoiIix0aGlzLmh0RWRpdG9yLmxvYWREYXRhKGhFKFtEXSkpLEQubGVuZ3RoPjAmJih0aGlzLnVwZGF0ZURyb3Bkb3duRGltZW5zaW9ucygpLHRoaXMuZmxpcERyb3Bkb3duSWZOZWVkZWQoKSwh''@;'; put 'put ''MD09PXRoaXMuY2VsbFByb3BlcnRpZXMuc3RyaWN0JiZ0aGlzLmhpZ2hsaWdodEJlc3RNYXRjaGluZ0Nob2ljZShNKSksdGhpcy5ob3QubGlzdGVuKCksd0UodGhpcy5URVhUQVJFQSxhLGE9PT1kP3ZvaWQgMDpkKX1mbGlwRHJvcGRvd25JZk5lZWRlZCgpe2NvbnN0IGw9dGhpcy5nZXRFZGl0''@;'; put 'put ''ZWRDZWxsUmVjdCgpLGE9bC5oZWlnaHQ7bGV0IGQ9bC50b3A7aWYodGhpcy5ob3Qudmlldy5pc1ZlcnRpY2FsbHlTY3JvbGxhYmxlQnlXaW5kb3coKSl7Y29uc3QgTT10aGlzLmhvdC52aWV3LmdldFRhYmxlT2Zmc2V0KCkudG9wLXRoaXMuaG90LnJvb3RXaW5kb3cuc2Nyb2xsWTtkPU1hdGgu''@;'; put 'put ''bWF4KGQrTSwwKX1jb25zdCBoPXRoaXMuZ2V0SGVpZ2h0KCksZj10aGlzLmhvdC52aWV3LmdldFdvcmtzcGFjZUhlaWdodCgpLWQtYSx2PWg+ZiYmZD5mK2E7cmV0dXJuIHY/dGhpcy5mbGlwRHJvcGRvd24oaCk6dGhpcy51bmZsaXBEcm9wZG93bigpLHRoaXMubGltaXREcm9wZG93bklmTmVl''@;'; put 'put ''ZGVkKHY/ZDpmLGgpLHZ9bGltaXREcm9wZG93bklmTmVlZGVkKGwsYSl7aWYoYT5sKXtsZXQgZD0wLGg9MCxmPTAsdj1udWxsO2Rve2Y9dGhpcy5odEVkaXRvci5nZXRSb3dIZWlnaHQoaCl8fHRoaXMuaHRFZGl0b3Iudmlldy5nZXREZWZhdWx0Um93SGVpZ2h0KCksZCs9ZixoKz0xfXdoaWxl''@;'; put 'put ''KGQ8bCk7dj1kLWYsdGhpcy5odEVkaXRvci5mbGlwcGVkJiYodGhpcy5odEVkaXRvci5yb290RWxlbWVudC5zdHlsZS50b3A9cGFyc2VJbnQodGhpcy5odEVkaXRvci5yb290RWxlbWVudC5zdHlsZS50b3AsMTApK2EtdisicHgiKSx0aGlzLnNldERyb3Bkb3duSGVpZ2h0KGQtZil9fWZsaXBE''@;'; put 'put ''cm9wZG93bihsKXtjb25zdCBhPXRoaXMuaHRFZGl0b3Iucm9vdEVsZW1lbnQuc3R5bGU7YS5wb3NpdGlvbj0iYWJzb2x1dGUiLGEudG9wPS1sKyJweCIsdGhpcy5odEVkaXRvci5mbGlwcGVkPSEwfXVuZmxpcERyb3Bkb3duKCl7Y29uc3QgbD10aGlzLmh0RWRpdG9yLnJvb3RFbGVtZW50LnN0''@;'; put 'put ''eWxlO2wucG9zaXRpb249ImFic29sdXRlIixsLnRvcD0iIix0aGlzLmh0RWRpdG9yLmZsaXBwZWQ9dm9pZCAwfXVwZGF0ZURyb3Bkb3duRGltZW5zaW9ucygpe3RoaXMuaHRFZGl0b3IudXBkYXRlU2V0dGluZ3Moe3dpZHRoOnRoaXMuZ2V0V2lkdGgoKSxoZWlnaHQ6dGhpcy5nZXRIZWlnaHQo''@;'; put 'put ''KX0pLE9YKEZYLHRoaXMsVnBlKS5jYWxsKHRoaXMpLHRoaXMuaHRFZGl0b3Iudmlldy5fd3Qud3RUYWJsZS5hbGlnbk92ZXJsYXlzV2l0aFRyaW1taW5nQ29udGFpbmVyKCl9c2V0RHJvcGRvd25IZWlnaHQobCl7dGhpcy5odEVkaXRvci51cGRhdGVTZXR0aW5ncyh7aGVpZ2h0Omx9KSxPWChG''@;'; put 'put ''WCx0aGlzLFZwZSkuY2FsbCh0aGlzKSx0aGlzLmh0RWRpdG9yLnZpZXcuX3d0Lnd0VGFibGUuYWxpZ25PdmVybGF5c1dpdGhUcmltbWluZ0NvbnRhaW5lcigpfWhpZ2hsaWdodEJlc3RNYXRjaGluZ0Nob2ljZShsKXsibnVtYmVyIj09dHlwZW9mIGw/dGhpcy5odEVkaXRvci5zZWxlY3RDZWxs''@;'; put 'put ''KGwsMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCwhMSk6dGhpcy5odEVkaXRvci5kZXNlbGVjdENlbGwoKX1nZXRIZWlnaHQoKXtjb25zdCBsPXRoaXMuaG90LnJvb3RXaW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLmh0Q29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoIi5odENvcmUiKSksYT1wYXJz''@;'; put 'put ''ZUludChsLmJvcmRlclRvcFdpZHRoLDEwKStwYXJzZUludChsLmJvcmRlckJvdHRvbVdpZHRoLDEwKSxkPU1hdGgubWluKHRoaXMuY2VsbFByb3BlcnRpZXMudmlzaWJsZVJvd3MsdGhpcy5zdHJpcHBlZENob2ljZXMubGVuZ3RoKTtyZXR1cm4gQXJyYXkuZnJvbSh7bGVuZ3RoOmR9LChmLHYp''@;'; put 'put ''PT52KS5yZWR1Y2UoKGYsdik9PmYrKHRoaXMuaHRFZGl0b3IuZ2V0Um93SGVpZ2h0KHYpfHx0aGlzLmh0RWRpdG9yLnZpZXcuZ2V0RGVmYXVsdFJvd0hlaWdodCgpKSwwKSthKzF9Z2V0V2lkdGgoKXtjb25zdCBsPXRoaXMuaG90LnJvb3RXaW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLmh0''@;'; put 'put ''Q29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoIi5odENvcmUiKSksYT1wYXJzZUludChsLmJvcmRlcklubGluZVN0YXJ0V2lkdGgsMTApK3BhcnNlSW50KGwuYm9yZGVySW5saW5lRW5kV2lkdGgsMTApO3JldHVybiB0aGlzLmh0RWRpdG9yLmdldENvbFdpZHRoKDApK2F9c3RyaXBWYWx1ZUlmTmVl''@;'; put 'put ''ZGVkKGwpe3JldHVybiB0aGlzLnN0cmlwVmFsdWVzSWZOZWVkZWQoW2xdKVswXX1zdHJpcFZhbHVlc0lmTmVlZGVkKGwpe2NvbnN0e2FsbG93SHRtbDphfT10aGlzLmNlbGxQcm9wZXJ0aWVzLGQ9eXMobCxmPT5sYyhmKSk7cmV0dXJuIHlzKGQsZj0+YT9mOmckKGYpKX1hbGxvd0tleUV2ZW50''@;'; put 'put ''UHJvcGFnYXRpb24obCl7Y29uc3QgYT10aGlzLmh0RWRpdG9yLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksZF9yb3c9YT9hLmZyb20ucm93Oi0xO2xldCBoPSExO3JldHVybiBsPT09WWEuQVJST1dfRE9XTiYmZF9yb3c+MCYmZF9yb3c8dGhpcy5odEVkaXRvci5jb3VudFJvd3MoKS0xJiYoaD0h''@;'; put 'put ''MCksbD09PVlhLkFSUk9XX1VQJiZkX3Jvdz4tMSYmKGg9ITApLGh9b25CZWZvcmVLZXlEb3duKGwpe2lmKG5mZShsLmtleUNvZGUpfHxsLmtleUNvZGU9PT1ZYS5CQUNLU1BBQ0V8fGwua2V5Q29kZT09PVlhLkRFTEVURXx8bC5rZXlDb2RlPT09WWEuSU5TRVJUKXtsZXQgYT0xMDtpZihsLmtl''@;'; put 'put ''eUNvZGU9PT1ZYS5DJiYobC5jdHJsS2V5fHxsLm1ldGFLZXkpKXJldHVybjt0aGlzLmlzT3BlbmVkKCl8fChhKz0xMCksdGhpcy5odEVkaXRvciYmdGhpcy5ob3QuX3JlZ2lzdGVyVGltZW91dCgoKT0+e3RoaXMucXVlcnlDaG9pY2VzKHRoaXMuVEVYVEFSRUEudmFsdWUpfSxhKX19fWZ1bmN0''@;'; put 'put ''aW9uIFZwZSgpe3RoaXMuaHRFZGl0b3Iudmlldy5oYXNWZXJ0aWNhbFNjcm9sbCgpJiZ0aGlzLmh0RWRpdG9yLnVwZGF0ZVNldHRpbmdzKHt3aWR0aDp0aGlzLmdldFdpZHRoKCkrZjAodGhpcy5ob3Qucm9vdERvY3VtZW50KX0pfWNsYXNzIEJwZSBleHRlbmRzIGtfe3N0YXRpYyBnZXQgRURJ''@;'; put 'put ''VE9SX1RZUEUoKXtyZXR1cm4iY2hlY2tib3gifWJlZ2luRWRpdGluZyhsLGEpe2lmKGEmJiJtb3VzZXVwIj09PWEudHlwZSYmIlREIj09PWEudGFyZ2V0Lm5vZGVOYW1lKXtjb25zdCBkPXRoaXMuVEQucXVlcnlTZWxlY3RvcignaW5wdXRbdHlwZT0iY2hlY2tib3giXScpO3BvKGQsImh0QmFk''@;'; put 'put ''VmFsdWUiKXx8ZC5jbGljaygpfX1maW5pc2hFZGl0aW5nKCl7fWluaXQoKXt9b3Blbigpe31jbG9zZSgpe31nZXRWYWx1ZSgpe31zZXRWYWx1ZSgpe31mb2N1cygpe319Y29uc3QgR209KCk9PndpbmRvdywkMj0oKT0+d2luZG93LmRvY3VtZW50LE5YPShjLGwpPT53aW5kb3cuc2V0VGltZW91''@;'; put 'put ''dChjLGwpLEhwPWZ1bmN0aW9uKGMsbCxhLGQpe2MuYWRkRXZlbnRMaXN0ZW5lcihsLGEsISFkKX0sa2c9ZnVuY3Rpb24oYyxsLGEsZCl7Yy5yZW1vdmVFdmVudExpc3RlbmVyKGwsYSwhIWQpfSxSaD1mdW5jdGlvbihjLGwpe3JldHVybi0xIT09KCIgIitjLmNsYXNzTmFtZSsiICIpLmluZGV4''@;'; put 'put ''T2YoIiAiK2wrIiAiKX0sVlg9ZnVuY3Rpb24oYyxsKXtSaChjLGwpfHwoYy5jbGFzc05hbWU9IiI9PT1jLmNsYXNzTmFtZT9sOmMuY2xhc3NOYW1lKyIgIitsKX0sQlg9ZnVuY3Rpb24oYyxsKXtjLmNsYXNzTmFtZT1mdW5jdGlvbihjKXtyZXR1cm4gYy50cmltP2MudHJpbSgpOmMucmVwbGFj''@;'; put 'put ''ZSgvXlxzK3xccyskL2csIiIpfSgoIiAiK2MuY2xhc3NOYW1lKyIgIikucmVwbGFjZSgiICIrbCsiICIsIiAiKSl9LGpYPWZ1bmN0aW9uKGMpe3JldHVybi9BcnJheS8udGVzdChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYykpfSxMaD1mdW5jdGlvbihjKXtyZXR1cm4vRGF0ZS8u''@;'; put 'put ''dGVzdChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYykpJiYhaXNOYU4oYy5nZXRUaW1lKCkpfSxkYXQ9ZnVuY3Rpb24oYyl7bGV0IGw9Yy5nZXREYXkoKTtyZXR1cm4gMD09PWx8fDY9PT1sfSxoYXQ9ZnVuY3Rpb24oYyl7cmV0dXJuIGMlND09MCYmYyUxMDAhPTB8fGMlNDAwPT0w''@;'; put 'put ''fSxqcGU9ZnVuY3Rpb24oYyxsKXtyZXR1cm5bMzEsaGF0KGMpPzI5OjI4LDMxLDMwLDMxLDMwLDMxLDMxLDMwLDMxLDMwLDMxXVtsXX0selA9ZnVuY3Rpb24oYyl7TGgoYykmJmMuc2V0SG91cnMoMCwwLDAsMCl9LFVQPWZ1bmN0aW9uKGMsbCl7cmV0dXJuIGMuZ2V0VGltZSgpPT09bC5nZXRU''@;'; put 'put ''aW1lKCl9LFpQPWZ1bmN0aW9uKGMsbCxhKXtsZXQgZCxoO2ZvcihkIGluIGwpaD12b2lkIDAhPT1jW2RdLGgmJiJvYmplY3QiPT10eXBlb2YgbFtkXSYmbnVsbCE9PWxbZF0mJnZvaWQgMD09PWxbZF0ubm9kZU5hbWU/TGgobFtkXSk/YSYmKGNbZF09bmV3IERhdGUobFtkXS5nZXRUaW1lKCkp''@;'; put 'put ''KTpqWChsW2RdKT9hJiYoY1tkXT1sW2RdLnNsaWNlKDApKTpjW2RdPVpQKHt9LGxbZF0sYSk6KGF8fCFoKSYmKGNbZF09bFtkXSk7cmV0dXJuIGN9LHpwZT1mdW5jdGlvbihjLGwsYSl7bGV0IGQ9JDIoKS5jcmVhdGVFdmVudCgiSFRNTEV2ZW50cyIpO2QuaW5pdEV2ZW50KGwsITAsITEpLGQ9''@;'; put 'put ''WlAoZCxhKSxjLmRpc3BhdGNoRXZlbnQoZCl9LFVwZT1mdW5jdGlvbihjKXtyZXR1cm4gYy5tb250aDwwJiYoYy55ZWFyLT1NYXRoLmNlaWwoTWF0aC5hYnMoYy5tb250aCkvMTIpLGMubW9udGgrPTEyKSxjLm1vbnRoPjExJiYoYy55ZWFyKz1NYXRoLmZsb29yKE1hdGguYWJzKGMubW9udGgp''@;'; put 'put ''LzEyKSxjLm1vbnRoLT0xMiksY30sTnA9e2ZpZWxkOm51bGwsYm91bmQ6dm9pZCAwLGFyaWFMYWJlbDoiVXNlIHRoZSBhcnJvdyBrZXlzIHRvIHBpY2sgYSBkYXRlIixwb3NpdGlvbjoiYm90dG9tIGxlZnQiLHJlcG9zaXRpb246ITAsZm9ybWF0OiJZWVlZLU1NLUREIix0b1N0cmluZzpudWxs''@;'; put 'put ''LHBhcnNlOm51bGwsZGVmYXVsdERhdGU6bnVsbCxzZXREZWZhdWx0RGF0ZTohMSxmaXJzdERheTowLGZpcnN0V2Vla09mWWVhck1pbkRheXM6NCxmb3JtYXRTdHJpY3Q6ITEsbWluRGF0ZTpudWxsLG1heERhdGU6bnVsbCx5ZWFyUmFuZ2U6MTAsc2hvd1dlZWtOdW1iZXI6ITEscGlja1dob2xl''@;'; put 'put ''V2VlazohMSxtaW5ZZWFyOjAsbWF4WWVhcjo5OTk5LG1pbk1vbnRoOnZvaWQgMCxtYXhNb250aDp2b2lkIDAsc3RhcnRSYW5nZTpudWxsLGVuZFJhbmdlOm51bGwsaXNSVEw6ITEseWVhclN1ZmZpeDoiIixzaG93TW9udGhBZnRlclllYXI6ITEsc2hvd0RheXNJbk5leHRBbmRQcmV2aW91c01v''@;'; put 'put ''bnRoczohMSxlbmFibGVTZWxlY3Rpb25EYXlzSW5OZXh0QW5kUHJldmlvdXNNb250aHM6ITEsbnVtYmVyT2ZNb250aHM6MSxtYWluQ2FsZW5kYXI6ImxlZnQiLGNvbnRhaW5lcjp2b2lkIDAsYmx1ckZpZWxkT25TZWxlY3Q6ITAsaTE4bjp7cHJldmlvdXNNb250aDoiUHJldmlvdXMgTW9udGgi''@;'; put 'put ''LG5leHRNb250aDoiTmV4dCBNb250aCIsbW9udGhzOlsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXSx3ZWVrZGF5czpbIlN1bmRheSIsIk1v''@;'; put 'put ''bmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sd2Vla2RheXNTaG9ydDpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdfSx0aGVtZTpudWxsLGV2ZW50czpbXSxvblNlbGVjdDpudWxsLG9uT3BlbjpudWxs''@;'; put 'put ''LG9uQ2xvc2U6bnVsbCxvbkRyYXc6bnVsbCxrZXlib2FyZElucHV0OiEwfSxacGU9ZnVuY3Rpb24oYyxsLGEpe2ZvcihsKz1jLmZpcnN0RGF5O2w+PTc7KWwtPTc7cmV0dXJuIGE/Yy5pMThuLndlZWtkYXlzU2hvcnRbbF06Yy5pMThuLndlZWtkYXlzW2xdfSxmYXQ9ZnVuY3Rpb24oYyl7bGV0''@;'; put 'put ''IGw9W10sYT0iZmFsc2UiO2lmKGMuaXNFbXB0eSl7aWYoIWMuc2hvd0RheXNJbk5leHRBbmRQcmV2aW91c01vbnRocylyZXR1cm4nPHRkIGNsYXNzPSJpcy1lbXB0eSI+PC90ZD4nO2wucHVzaCgiaXMtb3V0c2lkZS1jdXJyZW50LW1vbnRoIiksYy5lbmFibGVTZWxlY3Rpb25EYXlzSW5OZXh0''@;'; put 'put ''QW5kUHJldmlvdXNNb250aHN8fGwucHVzaCgiaXMtc2VsZWN0aW9uLWRpc2FibGVkIil9cmV0dXJuIGMuaXNEaXNhYmxlZCYmbC5wdXNoKCJpcy1kaXNhYmxlZCIpLGMuaXNUb2RheSYmbC5wdXNoKCJpcy10b2RheSIpLGMuaXNTZWxlY3RlZCYmKGwucHVzaCgiaXMtc2VsZWN0ZWQiKSxhPSJ0''@;'; put 'put ''cnVlIiksYy5oYXNFdmVudCYmbC5wdXNoKCJoYXMtZXZlbnQiKSxjLmlzSW5SYW5nZSYmbC5wdXNoKCJpcy1pbnJhbmdlIiksYy5pc1N0YXJ0UmFuZ2UmJmwucHVzaCgiaXMtc3RhcnRyYW5nZSIpLGMuaXNFbmRSYW5nZSYmbC5wdXNoKCJpcy1lbmRyYW5nZSIpLCc8dGQgZGF0YS1kYXk9Iicr''@;'; put 'put ''Yy5kYXkrJyIgY2xhc3M9IicrbC5qb2luKCIgIikrJyIgYXJpYS1zZWxlY3RlZD0iJythKyciPjxidXR0b24gY2xhc3M9InBpa2EtYnV0dG9uIHBpa2EtZGF5IiB0eXBlPSJidXR0b24iIGRhdGEtcGlrYS15ZWFyPSInK2MueWVhcisnIiBkYXRhLXBpa2EtbW9udGg9IicrYy5tb250aCsnIiBk''@;'; put 'put ''YXRhLXBpa2EtZGF5PSInK2MuZGF5KyciPicrYy5kYXkrIjwvYnV0dG9uPjwvdGQ+In0sZ2F0PWZ1bmN0aW9uKGMsbCxhLGQsaCl7bGV0IGY9bmV3IERhdGUoZCxhLGwpO3JldHVybic8dGQgY2xhc3M9InBpa2Etd2VlayI+JysoYy5oYXNNb21lbnQ/Yy5tb21lbnQoZikuaXNvV2VlaygpOmZ1''@;'; put 'put ''bmN0aW9uKGMsbCl7Yy5zZXRIb3VycygwLDAsMCwwKTtsZXQgYT1jLmdldERhdGUoKSxkPWMuZ2V0RGF5KCksaD1sLGY9aC0xLE09ZnVuY3Rpb24oYmUpe3JldHVybihiZSs3LTEpJTd9O2Muc2V0RGF0ZShhK2YtTShkKSk7bGV0IEQ9bmV3IERhdGUoYy5nZXRGdWxsWWVhcigpLDAsaCkscmU9''@;'; put 'put ''KGMuZ2V0VGltZSgpLUQuZ2V0VGltZSgpKS84NjRlNTtyZXR1cm4gMStNYXRoLnJvdW5kKChyZS1mK00oRC5nZXREYXkoKSkpLzcpfShmLGgpKSsiPC90ZD4ifSxtYXQ9ZnVuY3Rpb24oYyxsLGEsZCl7cmV0dXJuJzx0ciBjbGFzcz0icGlrYS1yb3cnKyhhPyIgcGljay13aG9sZS13ZWVrIjoi''@;'; put 'put ''IikrKGQ/IiBpcy1zZWxlY3RlZCI6IiIpKyciPicrKGw/Yy5yZXZlcnNlKCk6Yykuam9pbigiIikrIjwvdHI+In0seWF0PWZ1bmN0aW9uKGMsbCxhLGQsaCxmKXtsZXQgdixNLEQsRWUsQmUsWj1jLl9vLHJlPWE9PT1aLm1pblllYXIsY2U9YT09PVoubWF4WWVhcixiZT0nPGRpdiBpZD0iJytm''@;'; put 'put ''KyciIGNsYXNzPSJwaWthLXRpdGxlIiByb2xlPSJoZWFkaW5nIiBhcmlhLWxpdmU9InBvbGl0ZSI+JyxxZT0hMCxydD0hMDtmb3IoRD1bXSx2PTA7djwxMjt2KyspRC5wdXNoKCc8b3B0aW9uIHZhbHVlPSInKyhhPT09aD92LWw6MTIrdi1sKSsnIicrKHY9PT1kPycgc2VsZWN0ZWQ9InNlbGVj''@;'; put 'put ''dGVkIic6IiIpKyhyZSYmdjxaLm1pbk1vbnRofHxjZSYmdj5aLm1heE1vbnRoPycgZGlzYWJsZWQ9ImRpc2FibGVkIic6IiIpKyI+IitaLmkxOG4ubW9udGhzW3ZdKyI8L29wdGlvbj4iKTtmb3IoRWU9JzxkaXYgY2xhc3M9InBpa2EtbGFiZWwiPicrWi5pMThuLm1vbnRoc1tkXSsnPHNlbGVj''@;'; put 'put ''dCBjbGFzcz0icGlrYS1zZWxlY3QgcGlrYS1zZWxlY3QtbW9udGgiIHRhYmluZGV4PSItMSI+JytELmpvaW4oIiIpKyI8L3NlbGVjdD48L2Rpdj4iLGpYKFoueWVhclJhbmdlKT8odj1aLnllYXJSYW5nZVswXSxNPVoueWVhclJhbmdlWzFdKzEpOih2PWEtWi55ZWFyUmFuZ2UsTT0xK2ErWi55''@;'; put 'put ''ZWFyUmFuZ2UpLEQ9W107djxNJiZ2PD1aLm1heFllYXI7disrKXY+PVoubWluWWVhciYmRC5wdXNoKCc8b3B0aW9uIHZhbHVlPSInK3YrJyInKyh2PT09YT8nIHNlbGVjdGVkPSJzZWxlY3RlZCInOiIiKSsiPiIrdisiPC9vcHRpb24+Iik7cmV0dXJuIEJlPSc8ZGl2IGNsYXNzPSJwaWthLWxh''@;'; put 'put ''YmVsIj4nK2ErWi55ZWFyU3VmZml4Kyc8c2VsZWN0IGNsYXNzPSJwaWthLXNlbGVjdCBwaWthLXNlbGVjdC15ZWFyIiB0YWJpbmRleD0iLTEiPicrRC5qb2luKCIiKSsiPC9zZWxlY3Q+PC9kaXY+IixiZSs9Wi5zaG93TW9udGhBZnRlclllYXI/QmUrRWU6RWUrQmUscmUmJigwPT09ZHx8Wi5t''@;'; put 'put ''aW5Nb250aD49ZCkmJihxZT0hMSksY2UmJigxMT09PWR8fFoubWF4TW9udGg8PWQpJiYocnQ9ITEpLDA9PT1sJiYoYmUrPSc8YnV0dG9uIGNsYXNzPSJwaWthLXByZXYnKyhxZT8iIjoiIGlzLWRpc2FibGVkIikrJyIgdHlwZT0iYnV0dG9uIj4nK1ouaTE4bi5wcmV2aW91c01vbnRoKyI8L2J1''@;'; put 'put ''dHRvbj4iKSxsPT09Yy5fby5udW1iZXJPZk1vbnRocy0xJiYoYmUrPSc8YnV0dG9uIGNsYXNzPSJwaWthLW5leHQnKyhydD8iIjoiIGlzLWRpc2FibGVkIikrJyIgdHlwZT0iYnV0dG9uIj4nK1ouaTE4bi5uZXh0TW9udGgrIjwvYnV0dG9uPiIpLGJlKyI8L2Rpdj4ifTtmdW5jdGlvbiB6WChj''@;'; put 'put ''KXtsZXQgbD10aGlzLGE9bC5jb25maWcoYyk7bC5fb25Nb3VzZURvd249ZnVuY3Rpb24oaCl7aWYoIWwuX3YpcmV0dXJuO2xldCBmPShoPWh8fEdtKCkuZXZlbnQpLnRhcmdldHx8aC5zcmNFbGVtZW50O2lmKGYpaWYoUmgoZiwiaXMtZGlzYWJsZWQiKXx8KCFSaChmLCJwaWthLWJ1dHRvbiIp''@;'; put 'put ''fHxSaChmLCJpcy1lbXB0eSIpfHxSaChmLnBhcmVudE5vZGUsImlzLWRpc2FibGVkIik/UmgoZiwicGlrYS1wcmV2Iik/bC5wcmV2TW9udGgoKTpSaChmLCJwaWthLW5leHQiKSYmbC5uZXh0TW9udGgoKToobC5zZXREYXRlKG5ldyBEYXRlKGYuZ2V0QXR0cmlidXRlKCJkYXRhLXBpa2EteWVh''@;'; put 'put ''ciIpLGYuZ2V0QXR0cmlidXRlKCJkYXRhLXBpa2EtbW9udGgiKSxmLmdldEF0dHJpYnV0ZSgiZGF0YS1waWthLWRheSIpKSksYS5ib3VuZCYmTlgoZnVuY3Rpb24oKXtsLmhpZGUoKSxhLmJsdXJGaWVsZE9uU2VsZWN0JiZhLmZpZWxkJiZhLmZpZWxkLmJsdXIoKX0sMTAwKSkpLFJoKGYsInBp''@;'; put 'put ''a2Etc2VsZWN0IikpbC5fYz0hMDtlbHNle2lmKCFoLnByZXZlbnREZWZhdWx0KXJldHVybiBoLnJldHVyblZhbHVlPSExLCExO2gucHJldmVudERlZmF1bHQoKX19LGwuX29uQ2hhbmdlPWZ1bmN0aW9uKGgpe2xldCBmPShoPWh8fEdtKCkuZXZlbnQpLnRhcmdldHx8aC5zcmNFbGVtZW50O2Ym''@;'; put 'put ''JihSaChmLCJwaWthLXNlbGVjdC1tb250aCIpP2wuZ290b01vbnRoKGYudmFsdWUpOlJoKGYsInBpa2Etc2VsZWN0LXllYXIiKSYmbC5nb3RvWWVhcihmLnZhbHVlKSl9LGwuX29uS2V5Q2hhbmdlPWZ1bmN0aW9uKGgpe2lmKGg9aHx8R20oKS5ldmVudCxsLmlzVmlzaWJsZSgpKXN3aXRjaCho''@;'; put 'put ''LmtleUNvZGUpe2Nhc2UgMTM6Y2FzZSAyNzphLmZpZWxkJiZhLmZpZWxkLmJsdXIoKTticmVhaztjYXNlIDM3OmwuYWRqdXN0RGF0ZSgic3VidHJhY3QiLDEpO2JyZWFrO2Nhc2UgMzg6bC5hZGp1c3REYXRlKCJzdWJ0cmFjdCIsNyk7YnJlYWs7Y2FzZSAzOTpsLmFkanVzdERhdGUoImFkZCIs''@;'; put 'put ''MSk7YnJlYWs7Y2FzZSA0MDpsLmFkanVzdERhdGUoImFkZCIsNyk7YnJlYWs7Y2FzZSA4OmNhc2UgNDY6bC5zZXREYXRlKG51bGwpfX0sbC5fcGFyc2VGaWVsZFZhbHVlPWZ1bmN0aW9uKCl7aWYoYS5wYXJzZSlyZXR1cm4gYS5wYXJzZShhLmZpZWxkLnZhbHVlLGEuZm9ybWF0KTtpZih0aGlz''@;'; put 'put ''Lmhhc01vbWVudCl7bGV0IGg9dGhpcy5tb21lbnQoYS5maWVsZC52YWx1ZSxhLmZvcm1hdCxhLmZvcm1hdFN0cmljdCk7cmV0dXJuIGgmJmguaXNWYWxpZCgpP2gudG9EYXRlKCk6bnVsbH1yZXR1cm4gbmV3IERhdGUoRGF0ZS5wYXJzZShhLmZpZWxkLnZhbHVlKSl9LGwuX29uSW5wdXRDaGFu''@;'; put 'put ''Z2U9ZnVuY3Rpb24oaCl7bGV0IGY7aC5maXJlZEJ5IT09bCYmKGY9bC5fcGFyc2VGaWVsZFZhbHVlKCksTGgoZikmJmwuc2V0RGF0ZShmKSxsLl92fHxsLnNob3coKSl9LGwuX29uSW5wdXRGb2N1cz1mdW5jdGlvbigpe2wuc2hvdygpfSxsLl9vbklucHV0Q2xpY2s9ZnVuY3Rpb24oKXtsLnNo''@;'; put 'put ''b3coKX0sbC5fb25JbnB1dEJsdXI9ZnVuY3Rpb24oKXtsZXQgaD0kMigpLmFjdGl2ZUVsZW1lbnQ7ZG97aWYoUmgoaCwicGlrYS1zaW5nbGUiKSlyZXR1cm59d2hpbGUoaD1oLnBhcmVudE5vZGUpO2wuX2N8fChsLl9iPU5YKGZ1bmN0aW9uKCl7bC5oaWRlKCl9LDUwKSksbC5fYz0hMX0sbC5f''@;'; put 'put ''b25DbGljaz1mdW5jdGlvbihoKXtsZXQgZj0oaD1ofHxHbSgpLmV2ZW50KS50YXJnZXR8fGguc3JjRWxlbWVudCx2PWY7aWYoZil7IWhhc0V2ZW50TGlzdGVuZXJzJiZSaChmLCJwaWthLXNlbGVjdCIpJiYoZi5vbmNoYW5nZXx8KGYuc2V0QXR0cmlidXRlKCJvbmNoYW5nZSIsInJldHVybjsi''@;'; put 'put ''KSxIcChmLCJjaGFuZ2UiLGwuX29uQ2hhbmdlKSkpO2Rve2lmKFJoKHYsInBpa2Etc2luZ2xlIil8fHY9PT1hLnRyaWdnZXIpcmV0dXJufXdoaWxlKHY9di5wYXJlbnROb2RlKTtsLl92JiZmIT09YS50cmlnZ2VyJiZ2IT09YS50cmlnZ2VyJiZsLmhpZGUoKX19LGwuZWw9JDIoKS5jcmVhdGVF''@;'; put 'put ''bGVtZW50KCJkaXYiKSxsLmVsLmNsYXNzTmFtZT0icGlrYS1zaW5nbGUiKyhhLmlzUlRMPyIgaXMtcnRsIjoiIikrKGEudGhlbWU/IiAiK2EudGhlbWU6IiIpLEhwKGwuZWwsIm1vdXNlZG93biIsbC5fb25Nb3VzZURvd24sITApLEhwKGwuZWwsInRvdWNoZW5kIixsLl9vbk1vdXNlRG93biwh''@;'; put 'put ''MCksSHAobC5lbCwiY2hhbmdlIixsLl9vbkNoYW5nZSksYS5rZXlib2FyZElucHV0JiZIcCgkMigpLCJrZXlkb3duIixsLl9vbktleUNoYW5nZSksYS5maWVsZCYmKGEuY29udGFpbmVyP2EuY29udGFpbmVyLmFwcGVuZENoaWxkKGwuZWwpOmEuYm91bmQ/JDIoKS5ib2R5LmFwcGVuZENoaWxk''@;'; put 'put ''KGwuZWwpOmEuZmllbGQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobC5lbCxhLmZpZWxkLm5leHRTaWJsaW5nKSxIcChhLmZpZWxkLCJjaGFuZ2UiLGwuX29uSW5wdXRDaGFuZ2UpLGEuZGVmYXVsdERhdGV8fChhLmRlZmF1bHREYXRlPWwuX3BhcnNlRmllbGRWYWx1ZSgpLGEuc2V0RGVmYXVs''@;'; put 'put ''dERhdGU9ITApKTtsZXQgZD1hLmRlZmF1bHREYXRlO0xoKGQpP2Euc2V0RGVmYXVsdERhdGU/bC5zZXREYXRlKGQsITApOmwuZ290b0RhdGUoZCk6bC5nb3RvRGF0ZShuZXcgRGF0ZSksYS5ib3VuZD8odGhpcy5oaWRlKCksbC5lbC5jbGFzc05hbWUrPSIgaXMtYm91bmQiLEhwKGEudHJpZ2dl''@;'; put 'put ''ciwiY2xpY2siLGwuX29uSW5wdXRDbGljayksSHAoYS50cmlnZ2VyLCJmb2N1cyIsbC5fb25JbnB1dEZvY3VzKSxIcChhLnRyaWdnZXIsImJsdXIiLGwuX29uSW5wdXRCbHVyKSk6dGhpcy5zaG93KCl9ZnVuY3Rpb24gV3BlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBTYXQoYyl7dmFyIGw9''@;'; put 'put ''ZnVuY3Rpb24gTWF0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3''@;'; put 'put ''IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQ''@;'; put 'put ''cm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBVWChjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhy''@;'; put 'put ''b3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9elgucHJvdG90eXBlPXtjb25maWc6ZnVuY3Rpb24oYyl7dGhpcy5fb3x8KHRoaXMuX289WlAoe30sTnAsITApKTtsZXQgbD1aUCh0aGlzLl9vLGMsITApO2wuaXNSVEw9ISFs''@;'; put 'put ''LmlzUlRMLGwuZmllbGQ9bC5maWVsZCYmbC5maWVsZC5ub2RlTmFtZT9sLmZpZWxkOm51bGwsbC50aGVtZT0ic3RyaW5nIj09dHlwZW9mIGwudGhlbWUmJmwudGhlbWU/bC50aGVtZTpudWxsLGwuYm91bmQ9ISEodm9pZCAwIT09bC5ib3VuZD9sLmZpZWxkJiZsLmJvdW5kOmwuZmllbGQpLGwu''@;'; put 'put ''dHJpZ2dlcj1sLnRyaWdnZXImJmwudHJpZ2dlci5ub2RlTmFtZT9sLnRyaWdnZXI6bC5maWVsZCxsLmRpc2FibGVXZWVrZW5kcz0hIWwuZGlzYWJsZVdlZWtlbmRzLGwuZGlzYWJsZURheUZuPSJmdW5jdGlvbiI9PXR5cGVvZiBsLmRpc2FibGVEYXlGbj9sLmRpc2FibGVEYXlGbjpudWxsO2xl''@;'; put 'put ''dCBhPXBhcnNlSW50KGwubnVtYmVyT2ZNb250aHMsMTApfHwxO2lmKGwubnVtYmVyT2ZNb250aHM9YT40PzQ6YSxMaChsLm1pbkRhdGUpfHwobC5taW5EYXRlPSExKSxMaChsLm1heERhdGUpfHwobC5tYXhEYXRlPSExKSxsLm1pbkRhdGUmJmwubWF4RGF0ZSYmbC5tYXhEYXRlPGwubWluRGF0''@;'; put 'put ''ZSYmKGwubWF4RGF0ZT1sLm1pbkRhdGU9ITEpLGwubWluRGF0ZSYmdGhpcy5zZXRNaW5EYXRlKGwubWluRGF0ZSksbC5tYXhEYXRlJiZ0aGlzLnNldE1heERhdGUobC5tYXhEYXRlKSxqWChsLnllYXJSYW5nZSkpe2xldCBkPShuZXcgRGF0ZSkuZ2V0RnVsbFllYXIoKS0xMDtsLnllYXJSYW5n''@;'; put 'put ''ZVswXT1wYXJzZUludChsLnllYXJSYW5nZVswXSwxMCl8fGQsbC55ZWFyUmFuZ2VbMV09cGFyc2VJbnQobC55ZWFyUmFuZ2VbMV0sMTApfHxkfWVsc2UgbC55ZWFyUmFuZ2U9TWF0aC5hYnMocGFyc2VJbnQobC55ZWFyUmFuZ2UsMTApKXx8TnAueWVhclJhbmdlLGwueWVhclJhbmdlPjEwMCYm''@;'; put 'put ''KGwueWVhclJhbmdlPTEwMCk7cmV0dXJuIGx9LHRvU3RyaW5nOmZ1bmN0aW9uKGMpe3JldHVybiBjPWN8fHRoaXMuX28uZm9ybWF0LExoKHRoaXMuX2QpP3RoaXMuX28udG9TdHJpbmc/dGhpcy5fby50b1N0cmluZyh0aGlzLl9kLGMpOnRoaXMuaGFzTW9tZW50P3RoaXMubW9tZW50KHRoaXMu''@;'; put 'put ''X2QpLmZvcm1hdChjKTp0aGlzLl9kLnRvRGF0ZVN0cmluZygpOiIifSxnZXRNb21lbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oYXNNb21lbnQ/dGhpcy5tb21lbnQodGhpcy5fZCk6bnVsbH0sc2V0TW9tZW50OmZ1bmN0aW9uKGMsbCl7dGhpcy5oYXNNb21lbnQmJnRoaXMubW9tZW50Lmlz''@;'; put 'put ''TW9tZW50KGMpJiZ0aGlzLnNldERhdGUoYy50b0RhdGUoKSxsKX0sdXNlTW9tZW50OmZ1bmN0aW9uKGMpe3RoaXMuaGFzTW9tZW50PSEwLHRoaXMubW9tZW50PWN9LGdldERhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gTGgodGhpcy5fZCk/bmV3IERhdGUodGhpcy5fZC5nZXRUaW1lKCkpOm51bGx9''@;'; put 'put ''LHNldERhdGU6ZnVuY3Rpb24oYyxsKXtpZighYylyZXR1cm4gdGhpcy5fZD1udWxsLHRoaXMuX28uZmllbGQmJih0aGlzLl9vLmZpZWxkLnZhbHVlPSIiLHpwZSh0aGlzLl9vLmZpZWxkLCJjaGFuZ2UiLHtmaXJlZEJ5OnRoaXN9KSksdGhpcy5kcmF3KCk7aWYoInN0cmluZyI9PXR5cGVvZiBj''@;'; put 'put ''JiYoYz1uZXcgRGF0ZShEYXRlLnBhcnNlKGMpKSksIUxoKGMpKXJldHVybjtsZXQgYT10aGlzLl9vLm1pbkRhdGUsZD10aGlzLl9vLm1heERhdGU7TGgoYSkmJmM8YT9jPWE6TGgoZCkmJmM+ZCYmKGM9ZCksdGhpcy5fZD1uZXcgRGF0ZShjLmdldFRpbWUoKSkselAodGhpcy5fZCksdGhpcy5n''@;'; put 'put ''b3RvRGF0ZSh0aGlzLl9kKSx0aGlzLl9vLmZpZWxkJiYodGhpcy5fby5maWVsZC52YWx1ZT10aGlzLnRvU3RyaW5nKCksenBlKHRoaXMuX28uZmllbGQsImNoYW5nZSIse2ZpcmVkQnk6dGhpc30pKSwhbCYmImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuX28ub25TZWxlY3QmJnRoaXMuX28ub25T''@;'; put 'put ''ZWxlY3QuY2FsbCh0aGlzLHRoaXMuZ2V0RGF0ZSgpKX0sY2xlYXI6ZnVuY3Rpb24oKXt0aGlzLnNldERhdGUobnVsbCl9LGdvdG9EYXRlOmZ1bmN0aW9uKGMpe2xldCBsPSEwO2lmKExoKGMpKXtpZih0aGlzLmNhbGVuZGFycyl7bGV0IGE9bmV3IERhdGUodGhpcy5jYWxlbmRhcnNbMF0ueWVh''@;'; put 'put ''cix0aGlzLmNhbGVuZGFyc1swXS5tb250aCwxKSxkPW5ldyBEYXRlKHRoaXMuY2FsZW5kYXJzW3RoaXMuY2FsZW5kYXJzLmxlbmd0aC0xXS55ZWFyLHRoaXMuY2FsZW5kYXJzW3RoaXMuY2FsZW5kYXJzLmxlbmd0aC0xXS5tb250aCwxKSxoPWMuZ2V0VGltZSgpO2Quc2V0TW9udGgoZC5nZXRN''@;'; put 'put ''b250aCgpKzEpLGQuc2V0RGF0ZShkLmdldERhdGUoKS0xKSxsPWg8YS5nZXRUaW1lKCl8fGQuZ2V0VGltZSgpPGh9bCYmKHRoaXMuY2FsZW5kYXJzPVt7bW9udGg6Yy5nZXRNb250aCgpLHllYXI6Yy5nZXRGdWxsWWVhcigpfV0sInJpZ2h0Ij09PXRoaXMuX28ubWFpbkNhbGVuZGFyJiYodGhp''@;'; put 'put ''cy5jYWxlbmRhcnNbMF0ubW9udGgrPTEtdGhpcy5fby5udW1iZXJPZk1vbnRocykpLHRoaXMuYWRqdXN0Q2FsZW5kYXJzKCl9fSxhZGp1c3REYXRlOmZ1bmN0aW9uKGMsbCl7bGV0IGgsYT10aGlzLmdldERhdGUoKXx8bmV3IERhdGUsZD0yNCpwYXJzZUludChsKSo2MCo2MCoxZTM7ImFkZCI9''@;'; put 'put ''PT1jP2g9bmV3IERhdGUoYS52YWx1ZU9mKCkrZCk6InN1YnRyYWN0Ij09PWMmJihoPW5ldyBEYXRlKGEudmFsdWVPZigpLWQpKSx0aGlzLnNldERhdGUoaCl9LGFkanVzdENhbGVuZGFyczpmdW5jdGlvbigpe3RoaXMuY2FsZW5kYXJzWzBdPVVwZSh0aGlzLmNhbGVuZGFyc1swXSk7Zm9yKGxl''@;'; put 'put ''dCBjPTE7Yzx0aGlzLl9vLm51bWJlck9mTW9udGhzO2MrKyl0aGlzLmNhbGVuZGFyc1tjXT1VcGUoe21vbnRoOnRoaXMuY2FsZW5kYXJzWzBdLm1vbnRoK2MseWVhcjp0aGlzLmNhbGVuZGFyc1swXS55ZWFyfSk7dGhpcy5kcmF3KCl9LGdvdG9Ub2RheTpmdW5jdGlvbigpe3RoaXMuZ290b0Rh''@;'; put 'put ''dGUobmV3IERhdGUpfSxnb3RvTW9udGg6ZnVuY3Rpb24oYyl7aXNOYU4oYyl8fCh0aGlzLmNhbGVuZGFyc1swXS5tb250aD1wYXJzZUludChjLDEwKSx0aGlzLmFkanVzdENhbGVuZGFycygpKX0sbmV4dE1vbnRoOmZ1bmN0aW9uKCl7dGhpcy5jYWxlbmRhcnNbMF0ubW9udGgrKyx0aGlzLmFk''@;'; put 'put ''anVzdENhbGVuZGFycygpfSxwcmV2TW9udGg6ZnVuY3Rpb24oKXt0aGlzLmNhbGVuZGFyc1swXS5tb250aC0tLHRoaXMuYWRqdXN0Q2FsZW5kYXJzKCl9LGdvdG9ZZWFyOmZ1bmN0aW9uKGMpe2lzTmFOKGMpfHwodGhpcy5jYWxlbmRhcnNbMF0ueWVhcj1wYXJzZUludChjLDEwKSx0aGlzLmFk''@;'; put 'put ''anVzdENhbGVuZGFycygpKX0sc2V0TWluRGF0ZTpmdW5jdGlvbihjKXtjIGluc3RhbmNlb2YgRGF0ZT8oelAoYyksdGhpcy5fby5taW5EYXRlPWMsdGhpcy5fby5taW5ZZWFyPWMuZ2V0RnVsbFllYXIoKSx0aGlzLl9vLm1pbk1vbnRoPWMuZ2V0TW9udGgoKSk6KHRoaXMuX28ubWluRGF0ZT1O''@;'; put 'put ''cC5taW5EYXRlLHRoaXMuX28ubWluWWVhcj1OcC5taW5ZZWFyLHRoaXMuX28ubWluTW9udGg9TnAubWluTW9udGgsdGhpcy5fby5zdGFydFJhbmdlPU5wLnN0YXJ0UmFuZ2UpLHRoaXMuZHJhdygpfSxzZXRNYXhEYXRlOmZ1bmN0aW9uKGMpe2MgaW5zdGFuY2VvZiBEYXRlPyh6UChjKSx0aGlz''@;'; put 'put ''Ll9vLm1heERhdGU9Yyx0aGlzLl9vLm1heFllYXI9Yy5nZXRGdWxsWWVhcigpLHRoaXMuX28ubWF4TW9udGg9Yy5nZXRNb250aCgpKToodGhpcy5fby5tYXhEYXRlPU5wLm1heERhdGUsdGhpcy5fby5tYXhZZWFyPU5wLm1heFllYXIsdGhpcy5fby5tYXhNb250aD1OcC5tYXhNb250aCx0aGlz''@;'; put 'put ''Ll9vLmVuZFJhbmdlPU5wLmVuZFJhbmdlKSx0aGlzLmRyYXcoKX0sc2V0U3RhcnRSYW5nZTpmdW5jdGlvbihjKXt0aGlzLl9vLnN0YXJ0UmFuZ2U9Y30sc2V0RW5kUmFuZ2U6ZnVuY3Rpb24oYyl7dGhpcy5fby5lbmRSYW5nZT1jfSxkcmF3OmZ1bmN0aW9uKGMpe2lmKCF0aGlzLl92JiYhYyly''@;'; put 'put ''ZXR1cm47bGV0IE0sbD10aGlzLl9vLGE9bC5taW5ZZWFyLGQ9bC5tYXhZZWFyLGg9bC5taW5Nb250aCxmPWwubWF4TW9udGgsdj0iIjt0aGlzLl95PD1hJiYodGhpcy5feT1hLCFpc05hTihoKSYmdGhpcy5fbTxoJiYodGhpcy5fbT1oKSksdGhpcy5feT49ZCYmKHRoaXMuX3k9ZCwhaXNOYU4o''@;'; put 'put ''ZikmJnRoaXMuX20+ZiYmKHRoaXMuX209ZikpO2ZvcihsZXQgRD0wO0Q8bC5udW1iZXJPZk1vbnRocztEKyspTT0icGlrYS10aXRsZS0iK01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnJlcGxhY2UoL1teYS16XSsvZywiIikuc3Vic3RyKDAsMiksdis9JzxkaXYgY2xhc3M9InBpa2EtbGVu''@;'; put 'put ''ZGFyIj4nK3lhdCh0aGlzLEQsdGhpcy5jYWxlbmRhcnNbRF0ueWVhcix0aGlzLmNhbGVuZGFyc1tEXS5tb250aCx0aGlzLmNhbGVuZGFyc1swXS55ZWFyLE0pK3RoaXMucmVuZGVyKHRoaXMuY2FsZW5kYXJzW0RdLnllYXIsdGhpcy5jYWxlbmRhcnNbRF0ubW9udGgsTSkrIjwvZGl2PiI7dGhp''@;'; put 'put ''cy5lbC5pbm5lckhUTUw9dixsLmJvdW5kJiYiaGlkZGVuIiE9PWwuZmllbGQudHlwZSYmTlgoZnVuY3Rpb24oKXtsLnRyaWdnZXIuZm9jdXMoKX0sMSksImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuX28ub25EcmF3JiZ0aGlzLl9vLm9uRHJhdyh0aGlzKSxsLmJvdW5kJiZsLmZpZWxkLnNldEF0''@;'; put 'put ''dHJpYnV0ZSgiYXJpYS1sYWJlbCIsbC5hcmlhTGFiZWwpfSxhZGp1c3RQb3NpdGlvbjpmdW5jdGlvbigpe2xldCBjLGwsYSxkLGgsZix2LE0sRCxaLHJlO3RoaXMuX28uY29udGFpbmVyfHwodGhpcy5lbC5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLGM9dGhpcy5fby50cmlnZ2VyLGw9dGhp''@;'; put 'put ''cy5lbC5vZmZzZXRXaWR0aCxhPXRoaXMuZWwub2Zmc2V0SGVpZ2h0LGQ9R20oKS5pbm5lcldpZHRofHwkMigpLmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCxoPUdtKCkuaW5uZXJIZWlnaHR8fCQyKCkuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCxmPSQyKCkuYm9keS5zY3JvbGxU''@;'; put 'put ''b3B8fCQyKCkuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCxaPSEwLHJlPSEwLEQ9Yy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx2PUQubGVmdCtHbSgpLnBhZ2VYT2Zmc2V0LE09RC5ib3R0b20rR20oKS5wYWdlWU9mZnNldCwodGhpcy5fby5yZXBvc2l0aW9uJiZ2K2w+ZHx8dGhpcy5fby5w''@;'; put 'put ''b3NpdGlvbi5pbmRleE9mKCJyaWdodCIpPi0xJiZ2LWwrYy5vZmZzZXRXaWR0aD4wKSYmKHY9di1sK2Mub2Zmc2V0V2lkdGgsWj0hMSksKHRoaXMuX28ucmVwb3NpdGlvbiYmTSthPmgrZnx8dGhpcy5fby5wb3NpdGlvbi5pbmRleE9mKCJ0b3AiKT4tMSYmTS1hLWMub2Zmc2V0SGVpZ2h0PjAp''@;'; put 'put ''JiYoTT1NLWEtYy5vZmZzZXRIZWlnaHQscmU9ITEpLHY8MCYmKHY9MCksTTwwJiYoTT0wKSx0aGlzLmVsLnN0eWxlLmxlZnQ9disicHgiLHRoaXMuZWwuc3R5bGUudG9wPU0rInB4IixWWCh0aGlzLmVsLFo/ImxlZnQtYWxpZ25lZCI6InJpZ2h0LWFsaWduZWQiKSxWWCh0aGlzLmVsLHJlPyJi''@;'; put 'put ''b3R0b20tYWxpZ25lZCI6InRvcC1hbGlnbmVkIiksQlgodGhpcy5lbCxaPyJyaWdodC1hbGlnbmVkIjoibGVmdC1hbGlnbmVkIiksQlgodGhpcy5lbCxyZT8idG9wLWFsaWduZWQiOiJib3R0b20tYWxpZ25lZCIpKX0scmVuZGVyOmZ1bmN0aW9uKGMsbCxhKXtsZXQgZD10aGlzLl9vLGg9bmV3''@;'; put 'put ''IERhdGUsZj1qcGUoYyxsKSx2PW5ldyBEYXRlKGMsbCwxKS5nZXREYXkoKSxNPVtdLEQ9W107elAoaCksZC5maXJzdERheT4wJiYodi09ZC5maXJzdERheSx2PDAmJih2Kz03KSk7bGV0IFo9MD09PWw/MTE6bC0xLHJlPTExPT09bD8wOmwrMSxjZT0wPT09bD9jLTE6YyxiZT0xMT09PWw/Yysx''@;'; put 'put ''OmMsRWU9anBlKGNlLFopLEJlPWYrdixxZT1CZTtmb3IoO3FlPjc7KXFlLT03O0JlKz03LXFlO2xldCBydD0hMTtmb3IobGV0IHB0PTAsZHQ9MDtwdDxCZTtwdCsrKXtsZXQgSnQ9bmV3IERhdGUoYyxsLHB0LXYrMSksdm49ISFMaCh0aGlzLl9kKSYmVVAoSnQsdGhpcy5fZCksQ249VVAoSnQs''@;'; put 'put ''aCksdG49LTEhPT1kLmV2ZW50cy5pbmRleE9mKEp0LnRvRGF0ZVN0cmluZygpKSxNbj1wdDx2fHxwdD49Zit2LENyPXB0LXYrMSxHcj1sLG1yPWMsR249ZC5zdGFydFJhbmdlJiZVUChkLnN0YXJ0UmFuZ2UsSnQpLGFpPWQuZW5kUmFuZ2UmJlVQKGQuZW5kUmFuZ2UsSnQpLF9pPWQuc3RhcnRS''@;'; put 'put ''YW5nZSYmZC5lbmRSYW5nZSYmZC5zdGFydFJhbmdlPEp0JiZKdDxkLmVuZFJhbmdlLE9uPWQubWluRGF0ZSYmSnQ8ZC5taW5EYXRlfHxkLm1heERhdGUmJkp0PmQubWF4RGF0ZXx8ZC5kaXNhYmxlV2Vla2VuZHMmJmRhdChKdCl8fGQuZGlzYWJsZURheUZuJiZkLmRpc2FibGVEYXlGbihKdCk7''@;'; put 'put ''TW4mJihwdDx2PyhDcj1FZStDcixHcj1aLG1yPWNlKTooQ3ItPWYsR3I9cmUsbXI9YmUpKSxkLnBpY2tXaG9sZVdlZWsmJnZuJiYocnQ9ITApLEQucHVzaChmYXQoe2RheTpDcixtb250aDpHcix5ZWFyOm1yLGhhc0V2ZW50OnRuLGlzU2VsZWN0ZWQ6dm4saXNUb2RheTpDbixpc0Rpc2FibGVk''@;'; put 'put ''Ok9uLGlzRW1wdHk6TW4saXNTdGFydFJhbmdlOkduLGlzRW5kUmFuZ2U6YWksaXNJblJhbmdlOl9pLHNob3dEYXlzSW5OZXh0QW5kUHJldmlvdXNNb250aHM6ZC5zaG93RGF5c0luTmV4dEFuZFByZXZpb3VzTW9udGhzLGVuYWJsZVNlbGVjdGlvbkRheXNJbk5leHRBbmRQcmV2aW91c01vbnRo''@;'; put 'put ''czpkLmVuYWJsZVNlbGVjdGlvbkRheXNJbk5leHRBbmRQcmV2aW91c01vbnRoc30pKSw3PT0rK2R0JiYoZC5zaG93V2Vla051bWJlciYmRC51bnNoaWZ0KGdhdCh0aGlzLHB0LXYsbCxjLGQuZmlyc3RXZWVrT2ZZZWFyTWluRGF5cykpLE0ucHVzaChtYXQoRCxkLmlzUlRMLGQucGlja1dob2xl''@;'; put 'put ''V2VlayxydCkpLEQ9W10sZHQ9MCxydD0hMSl9cmV0dXJuIGZ1bmN0aW9uKGMsbCxhKXtyZXR1cm4nPHRhYmxlIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgY2xhc3M9InBpa2EtdGFibGUiIHJvbGU9ImdyaWQiIGFyaWEtbGFiZWxsZWRieT0iJythKyciPicrZnVuY3Rpb24oYyl7''@;'; put 'put ''bGV0IGwsYT1bXTtmb3IoYy5zaG93V2Vla051bWJlciYmYS5wdXNoKCI8dGg+PC90aD4iKSxsPTA7bDw3O2wrKylhLnB1c2goJzx0aCBzY29wZT0iY29sIj48YWJiciB0aXRsZT0iJytacGUoYyxsKSsnIj4nK1pwZShjLGwsITApKyI8L2FiYnI+PC90aD4iKTtyZXR1cm4iPHRoZWFkPjx0cj4i''@;'; put 'put ''KyhjLmlzUlRMP2EucmV2ZXJzZSgpOmEpLmpvaW4oIiIpKyI8L3RyPjwvdGhlYWQ+In0oYykrZnVuY3Rpb24oYyl7cmV0dXJuIjx0Ym9keT4iK2Muam9pbigiIikrIjwvdGJvZHk+In0obCkrIjwvdGFibGU+In0oZCxNLGEpfSxpc1Zpc2libGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdn0s''@;'; put 'put ''c2hvdzpmdW5jdGlvbigpe3RoaXMuaXNWaXNpYmxlKCl8fCh0aGlzLl92PSEwLHRoaXMuZHJhdygpLEJYKHRoaXMuZWwsImlzLWhpZGRlbiIpLHRoaXMuX28uYm91bmQmJihIcCgkMigpLCJjbGljayIsdGhpcy5fb25DbGljayksdGhpcy5hZGp1c3RQb3NpdGlvbigpKSwiZnVuY3Rpb24iPT10''@;'; put 'put ''eXBlb2YgdGhpcy5fby5vbk9wZW4mJnRoaXMuX28ub25PcGVuLmNhbGwodGhpcykpfSxoaWRlOmZ1bmN0aW9uKCl7bGV0IGM9dGhpcy5fdjshMSE9PWMmJih0aGlzLl9vLmJvdW5kJiZrZygkMigpLCJjbGljayIsdGhpcy5fb25DbGljayksdGhpcy5fby5jb250YWluZXJ8fCh0aGlzLmVsLnN0''@;'; put 'put ''eWxlLnBvc2l0aW9uPSJzdGF0aWMiLHRoaXMuZWwuc3R5bGUubGVmdD0iYXV0byIsdGhpcy5lbC5zdHlsZS50b3A9ImF1dG8iKSxWWCh0aGlzLmVsLCJpcy1oaWRkZW4iKSx0aGlzLl92PSExLHZvaWQgMCE9PWMmJiJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLl9vLm9uQ2xvc2UmJnRoaXMuX28u''@;'; put 'put ''b25DbG9zZS5jYWxsKHRoaXMpKX0sZGVzdHJveTpmdW5jdGlvbigpe2xldCBjPXRoaXMuX287dGhpcy5oaWRlKCksa2codGhpcy5lbCwibW91c2Vkb3duIix0aGlzLl9vbk1vdXNlRG93biwhMCksa2codGhpcy5lbCwidG91Y2hlbmQiLHRoaXMuX29uTW91c2VEb3duLCEwKSxrZyh0aGlzLmVs''@;'; put 'put ''LCJjaGFuZ2UiLHRoaXMuX29uQ2hhbmdlKSxjLmtleWJvYXJkSW5wdXQmJmtnKCQyKCksImtleWRvd24iLHRoaXMuX29uS2V5Q2hhbmdlKSxjLmZpZWxkJiYoa2coYy5maWVsZCwiY2hhbmdlIix0aGlzLl9vbklucHV0Q2hhbmdlKSxjLmJvdW5kJiYoa2coYy50cmlnZ2VyLCJjbGljayIsdGhp''@;'; put 'put ''cy5fb25JbnB1dENsaWNrKSxrZyhjLnRyaWdnZXIsImZvY3VzIix0aGlzLl9vbklucHV0Rm9jdXMpLGtnKGMudHJpZ2dlciwiYmx1ciIsdGhpcy5fb25JbnB1dEJsdXIpKSksdGhpcy5lbC5wYXJlbnROb2RlJiZ0aGlzLmVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5lbCl9fTtjb25z''@;'; put 'put ''dCBZcGU9ImRhdGUiLEdwZT0iZGF0ZUVkaXRvciI7dmFyIFdQPW5ldyBXZWFrU2V0O2NsYXNzICRwZSBleHRlbmRzIGE5e2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlvbiB3YXQoYyxsKXsoZnVuY3Rpb24gQ2F0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5''@;'; put 'put ''cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5hZGQoYyl9KHRoaXMsV1ApLFdwZSh0aGlzLCJwYXJlbnREZXN0cm95ZWQiLCExKSxXcGUodGhpcywiJGRhdGVQaWNrZXIiLG51bGwpfXN0YXRp''@;'; put 'put ''YyBnZXQgRURJVE9SX1RZUEUoKXtyZXR1cm4gWXBlfWluaXQoKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgT28pdGhyb3cgbmV3IEVycm9yKCJZb3UgbmVlZCB0byBpbmNsdWRlIG1vbWVudC5qcyB0byB5b3VyIHByb2plY3QuIik7c3VwZXIuaW5pdCgpLHRoaXMuaG90LmFkZEhvb2soImFmdGVy''@;'; put 'put ''RGVzdHJveSIsKCk9Pnt0aGlzLnBhcmVudERlc3Ryb3llZD0hMCx0aGlzLmRlc3Ryb3lFbGVtZW50cygpfSksdGhpcy5ob3QuYWRkSG9vaygiYWZ0ZXJTZXRUaGVtZSIsKGwsYSk9PnthfHwobG8odGhpcy5kYXRlUGlja2VyLC9odC10aGVtZS0uKi9nKSxUaSh0aGlzLmRhdGVQaWNrZXIsbCkp''@;'; put 'put ''fSl9Y3JlYXRlRWxlbWVudHMoKXtzdXBlci5jcmVhdGVFbGVtZW50cygpLHRoaXMuZGF0ZVBpY2tlcj10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiRElWIiksdGhpcy5kYXRlUGlja2VyU3R5bGU9dGhpcy5kYXRlUGlja2VyLnN0eWxlLHRoaXMuZGF0ZVBpY2tlclN0eWxl''@;'; put 'put ''LnBvc2l0aW9uPSJhYnNvbHV0ZSIsdGhpcy5kYXRlUGlja2VyU3R5bGUudG9wPTAsdGhpcy5kYXRlUGlja2VyU3R5bGUubGVmdD0wLHRoaXMuZGF0ZVBpY2tlclN0eWxlLnpJbmRleD05OTk5LHRoaXMuZGF0ZVBpY2tlci5zZXRBdHRyaWJ1dGUoImRpciIsdGhpcy5ob3QuaXNSdGwoKT8icnRs''@;'; put 'put ''IjoibHRyIiksVGkodGhpcy5kYXRlUGlja2VyLCJodERhdGVwaWNrZXJIb2xkZXIiKTtjb25zdCBsPXRoaXMuaG90LmdldEN1cnJlbnRUaGVtZU5hbWUoKTtsbyh0aGlzLmRhdGVQaWNrZXIsL2h0LXRoZW1lLS4qL2cpLFRpKHRoaXMuZGF0ZVBpY2tlcixsKSx0aGlzLmhvdC5yb290RG9jdW1l''@;'; put 'put ''bnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLmRhdGVQaWNrZXIpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodGhpcy5kYXRlUGlja2VyLCJtb3VzZWRvd24iLGE9PntwbyhhLnRhcmdldCwicGlrYS1kYXkiKSYmdGhpcy5oaWRlRGF0ZXBpY2tlcigpLGEuc3RvcFByb3BhZ2F0''@;'; put 'put ''aW9uKCl9KX1kZXN0cm95RWxlbWVudHMoKXtjb25zdCBsPXRoaXMuZGF0ZVBpY2tlci5wYXJlbnROb2RlO3RoaXMuJGRhdGVQaWNrZXImJnRoaXMuJGRhdGVQaWNrZXIuZGVzdHJveSgpLGwmJmwucmVtb3ZlQ2hpbGQodGhpcy5kYXRlUGlja2VyKX1wcmVwYXJlKGwsYSxkLGgsZix2KXtzdXBl''@;'; put 'put ''ci5wcmVwYXJlKGwsYSxkLGgsZix2KX1vcGVuKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOm51bGw7Y29uc3QgZD10aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJlZGl0b3IiKTt0aGlzLnNob3dE''@;'; put 'put ''YXRlcGlja2VyKGwpLHN1cGVyLm9wZW4oKSxkLmFkZFNob3J0Y3V0cyhbe2tleXM6W1siQXJyb3dMZWZ0Il1dLGNhbGxiYWNrOigpPT57dGhpcy4kZGF0ZVBpY2tlci5hZGp1c3REYXRlKCJzdWJ0cmFjdCIsMSl9fSx7a2V5czpbWyJBcnJvd1JpZ2h0Il1dLGNhbGxiYWNrOigpPT57dGhpcy4k''@;'; put 'put ''ZGF0ZVBpY2tlci5hZGp1c3REYXRlKCJhZGQiLDEpfX0se2tleXM6W1siQXJyb3dVcCJdXSxjYWxsYmFjazooKT0+e3RoaXMuJGRhdGVQaWNrZXIuYWRqdXN0RGF0ZSgic3VidHJhY3QiLDcpfX0se2tleXM6W1siQXJyb3dEb3duIl1dLGNhbGxiYWNrOigpPT57dGhpcy4kZGF0ZVBpY2tlci5h''@;'; put 'put ''ZGp1c3REYXRlKCJhZGQiLDcpfX1dLHtncm91cDpHcGV9KX1jbG9zZSgpe3ZhciBsO3RoaXMuX29wZW5lZD0hMSxudWxsIT09KGw9dGhpcy4kZGF0ZVBpY2tlcikmJnZvaWQgMCE9PWwmJmwuZGVzdHJveSYmdGhpcy4kZGF0ZVBpY2tlci5kZXN0cm95KCksdGhpcy5ob3QuX3JlZ2lzdGVyVGlt''@;'; put 'put ''ZW91dCgoKT0+e2NvbnN0IGg9dGhpcy5ob3QuX2dldEVkaXRvck1hbmFnZXIoKTtoLmNsb3NlRWRpdG9yKCksdGhpcy5ob3Qudmlldy5yZW5kZXIoKSxoLnByZXBhcmVFZGl0b3IoKX0pLHRoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImVkaXRvciIpLnJlbW92ZVNo''@;'; put 'put ''b3J0Y3V0c0J5R3JvdXAoR3BlKSxzdXBlci5jbG9zZSgpfWZpbmlzaEVkaXRpbmcoKXtzdXBlci5maW5pc2hFZGl0aW5nKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF0sYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNb''@;'; put 'put ''MV0mJmFyZ3VtZW50c1sxXSl9c2hvd0RhdGVwaWNrZXIobCl7Y29uc3QgYT1VWChXUCx0aGlzLFpYKS5jYWxsKHRoaXMpLGQ9dGhpcy5ob3Qudmlldy5pc01vdXNlRG93bigpLGg9ISFsJiZIJChsLmtleUNvZGUpO2xldCBmO3RoaXMuZGF0ZVBpY2tlci5zdHlsZS5kaXNwbGF5PSJibG9jayIs''@;'; put 'put ''dGhpcy4kZGF0ZVBpY2tlcj1uZXcgelgodGhpcy5nZXREYXRlUGlja2VyQ29uZmlnKCkpLCJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLiRkYXRlUGlja2VyLnVzZU1vbWVudCYmdGhpcy4kZGF0ZVBpY2tlci51c2VNb21lbnQoT28pLHRoaXMuJGRhdGVQaWNrZXIuX29uSW5wdXRGb2N1cz1mdW5j''@;'; put 'put ''dGlvbigpe30sdGhpcy5vcmlnaW5hbFZhbHVlPyhmPXRoaXMub3JpZ2luYWxWYWx1ZSxPbyhmLGEsITApLmlzVmFsaWQoKSYmdGhpcy4kZGF0ZVBpY2tlci5zZXRNb21lbnQoT28oZixhKSwhMCksdGhpcy5nZXRWYWx1ZSgpIT09dGhpcy5vcmlnaW5hbFZhbHVlJiZ0aGlzLnNldFZhbHVlKHRo''@;'; put 'put ''aXMub3JpZ2luYWxWYWx1ZSksIWgmJiFkJiZ0aGlzLnNldFZhbHVlKCIiKSk6dGhpcy5jZWxsUHJvcGVydGllcy5kZWZhdWx0RGF0ZT8oZj10aGlzLmNlbGxQcm9wZXJ0aWVzLmRlZmF1bHREYXRlLE9vKGYsYSwhMCkuaXNWYWxpZCgpJiZ0aGlzLiRkYXRlUGlja2VyLnNldE1vbWVudChPbyhm''@;'; put 'put ''LGEpLCEwKSwhaCYmIWQmJnRoaXMuc2V0VmFsdWUoIiIpKTp0aGlzLiRkYXRlUGlja2VyLmdvdG9Ub2RheSgpfWhpZGVEYXRlcGlja2VyKCl7dGhpcy5kYXRlUGlja2VyU3R5bGUuZGlzcGxheT0ibm9uZSIsdGhpcy4kZGF0ZVBpY2tlci5oaWRlKCl9Z2V0RGF0ZVBpY2tlckNvbmZpZygpe3Zh''@;'; put 'put ''ciBsO2NvbnN0IGE9dGhpcy5URVhUQVJFQSxkPXt9O3RoaXMuY2VsbFByb3BlcnRpZXMmJnRoaXMuY2VsbFByb3BlcnRpZXMuZGF0ZVBpY2tlckNvbmZpZyYmeEUoZCx0aGlzLmNlbGxQcm9wZXJ0aWVzLmRhdGVQaWNrZXJDb25maWcpO2NvbnN0IGg9ZC5vblNlbGVjdCxmPWQub25DbG9zZTty''@;'; put 'put ''ZXR1cm4gZC5maWVsZD1hLGQudHJpZ2dlcj1hLGQuY29udGFpbmVyPXRoaXMuZGF0ZVBpY2tlcixkLmJvdW5kPSExLGQua2V5Ym9hcmRJbnB1dD0hMSxkLmZvcm1hdD1udWxsIT09KGw9ZC5mb3JtYXQpJiZ2b2lkIDAhPT1sP2w6VVgoV1AsdGhpcyxaWCkuY2FsbCh0aGlzKSxkLnJlcG9zaXRp''@;'; put 'put ''b249ZC5yZXBvc2l0aW9ufHwhMSxkLmlzUlRMPSExLGQub25TZWxlY3Q9dj0+e2xldCBNPXY7aXNOYU4oTS5nZXRUaW1lKCkpfHwoTT1PbyhNKS5mb3JtYXQoVVgoV1AsdGhpcyxaWCkuY2FsbCh0aGlzKSkpLHRoaXMuc2V0VmFsdWUoTSksaCYmaCgpLEFwKCkmJnRoaXMuaGlkZURhdGVwaWNr''@;'; put 'put ''ZXIoKX0sZC5vbkNsb3NlPSgpPT57dGhpcy5wYXJlbnREZXN0cm95ZWR8fHRoaXMuZmluaXNoRWRpdGluZyghMSksZiYmZigpfSxkfXJlZnJlc2hEaW1lbnNpb25zKGwpe3ZhciBhO2lmKHN1cGVyLnJlZnJlc2hEaW1lbnNpb25zKGwpLHRoaXMuc3RhdGUhPT1sdS5FRElUSU5HKXJldHVybjtp''@;'; put 'put ''Zih0aGlzLlREPXRoaXMuZ2V0RWRpdGVkQ2VsbCgpLCF0aGlzLlREKXJldHVybiB2b2lkIHRoaXMuaGlkZURhdGVwaWNrZXIoKTtjb25zdHtyb3dJbmRleE1hcHBlcjpkLGNvbHVtbkluZGV4TWFwcGVyOmh9PXRoaXMuaG90LHt3dE92ZXJsYXlzOmZ9PXRoaXMuaG90LnZpZXcuX3d0LHt3dFRh''@;'; put 'put ''YmxlOnZ9PW51bGwhPT0oYT1mLmdldFBhcmVudE92ZXJsYXkodGhpcy5URCkpJiZ2b2lkIDAhPT1hP2E6dGhpcy5ob3Qudmlldy5fd3QsTT1kLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgodi5nZXRGaXJzdFBhcnRpYWxseVZpc2libGVSb3coKSksRD1kLmdldFZpc3VhbEZyb21SZW5k''@;'; put 'put ''ZXJhYmxlSW5kZXgodi5nZXRMYXN0UGFydGlhbGx5VmlzaWJsZVJvdygpKSxaPWguZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleCh2LmdldEZpcnN0UGFydGlhbGx5VmlzaWJsZUNvbHVtbigpKSxyZT1oLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgodi5nZXRMYXN0UGFydGlhbGx5''@;'; put 'put ''VmlzaWJsZUNvbHVtbigpKTtpZih0aGlzLnJvdz49TSYmdGhpcy5yb3c8PUQmJnRoaXMuY29sPj1aJiZ0aGlzLmNvbDw9cmUpe2NvbnN0IGNlPXRoaXMuVEQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dGhpcy5kYXRlUGlja2VyU3R5bGUudG9wPWAke3RoaXMuaG90LnJvb3RXaW5kb3cucGFn''@;'; put 'put ''ZVlPZmZzZXQrY2UudG9wK3h1KHRoaXMuVEQpfXB4YDtsZXQgYmU9dGhpcy5ob3Qucm9vdFdpbmRvdy5wYWdlWE9mZnNldDt0aGlzLmhvdC5pc1J0bCgpP2JlKz1jZS5yaWdodC1zdSh0aGlzLmRhdGVQaWNrZXIpOmJlKz1jZS5sZWZ0LHRoaXMuZGF0ZVBpY2tlclN0eWxlLmxlZnQ9YCR7YmV9''@;'; put 'put ''cHhgfWVsc2UgdGhpcy5oaWRlRGF0ZXBpY2tlcigpfX1mdW5jdGlvbiBaWCgpe3ZhciBjO3JldHVybiBudWxsIT09KGM9dGhpcy5jZWxsUHJvcGVydGllcy5kYXRlRm9ybWF0KSYmdm9pZCAwIT09Yz9jOiJERC9NTS9ZWVlZIn1jbGFzcyBLcGUgZXh0ZW5kcyBIWHtzdGF0aWMgZ2V0IEVESVRP''@;'; put 'put ''Ul9UWVBFKCl7cmV0dXJuImRyb3Bkb3duIn1wcmVwYXJlKGwsYSxkLGgsZix2KXt2LmZpbHRlcj0hMSx2LnN0cmljdD0hMCxzdXBlci5wcmVwYXJlKGwsYSxkLGgsZix2KX19Y2xhc3MgcXBlIGV4dGVuZHMgYTl7c3RhdGljIGdldCBFRElUT1JfVFlQRSgpe3JldHVybiJudW1lcmljIn19Y2xh''@;'; put 'put ''c3MgWHBlIGV4dGVuZHMgYTl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIEFhdChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24ga2F0KGMpe3ZhciBsPWZ1bmN0aW9uIERhdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tT''@;'; put 'put ''eW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0''@;'; put 'put ''dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEw''@;'; put 'put ''fSk6Y1tsXT1hLGN9KHRoaXMsImF1dG9SZXNpemUiLEFwZSh0aGlzLmhvdC5yb290RG9jdW1lbnQse3RleHRDb250ZW50Omw9PiJcdTIwMjIiLnJlcGVhdChsLnZhbHVlLmxlbmd0aCl9KSl9c3RhdGljIGdldCBFRElUT1JfVFlQRSgpe3JldHVybiJwYXNzd29yZCJ9Y3JlYXRlRWxlbWVudHMo''@;'; put 'put ''KXtzdXBlci5jcmVhdGVFbGVtZW50cygpLHRoaXMuVEVYVEFSRUE9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0IiksdGhpcy5URVhUQVJFQS5zZXRBdHRyaWJ1dGUoInR5cGUiLCJwYXNzd29yZCIpLHRoaXMuVEVYVEFSRUEuc2V0QXR0cmlidXRlKCJkYXRhLWhv''@;'; put 'put ''dC1pbnB1dCIsIiIpLHRoaXMuVEVYVEFSRUEuY2xhc3NOYW1lPSJoYW5kc29udGFibGVJbnB1dCIsdGhpcy50ZXh0YXJlYVN0eWxlPXRoaXMuVEVYVEFSRUEuc3R5bGUsdGhpcy50ZXh0YXJlYVN0eWxlLndpZHRoPTAsdGhpcy50ZXh0YXJlYVN0eWxlLmhlaWdodD0wLHhwKHRoaXMuVEVYVEFS''@;'; put 'put ''RUFfUEFSRU5UKSx0aGlzLlRFWFRBUkVBX1BBUkVOVC5hcHBlbmRDaGlsZCh0aGlzLlRFWFRBUkVBKX19Y29uc3QgV1g9Imh0X2VkaXRvcl92aXNpYmxlIixKcGU9InNlbGVjdEVkaXRvciI7Y2xhc3MgUXBlIGV4dGVuZHMga197c3RhdGljIGdldCBFRElUT1JfVFlQRSgpe3JldHVybiJzZWxl''@;'; put 'put ''Y3QifWluaXQoKXt0aGlzLnNlbGVjdFdyYXBwZXI9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMuc2VsZWN0PXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzZWxlY3QiKSx0aGlzLnNlbGVjdC5zZXRBdHRyaWJ1dGUoImRhdGEtaG90''@;'; put 'put ''LWlucHV0IiwidHJ1ZSIpLHRoaXMuc2VsZWN0V3JhcHBlci5zdHlsZS5kaXNwbGF5PSJub25lIjtjb25zdCBsPXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYiKSxhPXRoaXMuaG90LmdldFNldHRpbmdzKCkuYXJpYVRhZ3M7bC5jbGFzc05hbWU9Imh0QXV0b2NvbXBs''@;'; put 'put ''ZXRlQXJyb3ciLGEmJmwuc2V0QXR0cmlidXRlKC4uLlY3KCkpLGwuYXBwZW5kQ2hpbGQodGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJcdTI1YmMiKSksVGkodGhpcy5zZWxlY3RXcmFwcGVyLCJodFNlbGVjdEVkaXRvciIpLHRoaXMuc2VsZWN0V3JhcHBlci5hcHBlbmRD''@;'; put 'put ''aGlsZCh0aGlzLnNlbGVjdCksdGhpcy5zZWxlY3RXcmFwcGVyLmluc2VydEJlZm9yZShsLHRoaXMuc2VsZWN0V3JhcHBlci5maXJzdENoaWxkKSx0aGlzLmhvdC5yb290RWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLnNlbGVjdFdyYXBwZXIpLHRoaXMucmVnaXN0ZXJIb29rcygpfWdldFZhbHVl''@;'; put 'put ''KCl7cmV0dXJuIHRoaXMuc2VsZWN0LnZhbHVlfXNldFZhbHVlKGwpe3RoaXMuc2VsZWN0LnZhbHVlPWx9b3Blbigpe3RoaXMuX29wZW5lZD0hMCx0aGlzLnJlZnJlc2hEaW1lbnNpb25zKCksdGhpcy5zZWxlY3RXcmFwcGVyLnN0eWxlLmRpc3BsYXk9IiIsdGhpcy5ob3QuZ2V0U2hvcnRjdXRN''@;'; put 'put ''YW5hZ2VyKCkuc2V0QWN0aXZlQ29udGV4dE5hbWUoImVkaXRvciIpLHRoaXMucmVnaXN0ZXJTaG9ydGN1dHMoKX1jbG9zZSgpe3RoaXMuX29wZW5lZD0hMSx0aGlzLnNlbGVjdFdyYXBwZXIuc3R5bGUuZGlzcGxheT0ibm9uZSIscG8odGhpcy5zZWxlY3RXcmFwcGVyLFdYKSYmbG8odGhpcy5z''@;'; put 'put ''ZWxlY3RXcmFwcGVyLFdYKSx0aGlzLnVucmVnaXN0ZXJTaG9ydGN1dHMoKSx0aGlzLmNsZWFySG9va3MoKX1mb2N1cygpe3RoaXMuc2VsZWN0LmZvY3VzKCl9cmVnaXN0ZXJIb29rcygpe3RoaXMuYWRkSG9vaygiYWZ0ZXJTY3JvbGxIb3Jpem9udGFsbHkiLCgpPT50aGlzLnJlZnJlc2hEaW1l''@;'; put 'put ''bnNpb25zKCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJTY3JvbGxWZXJ0aWNhbGx5IiwoKT0+dGhpcy5yZWZyZXNoRGltZW5zaW9ucygpKSx0aGlzLmFkZEhvb2soImFmdGVyQ29sdW1uUmVzaXplIiwoKT0+dGhpcy5yZWZyZXNoRGltZW5zaW9ucygpKSx0aGlzLmFkZEhvb2soImFmdGVyUm93UmVz''@;'; put 'put ''aXplIiwoKT0+dGhpcy5yZWZyZXNoRGltZW5zaW9ucygpKX1wcmVwYXJlKGwsYSxkLGgsZix2KXtzdXBlci5wcmVwYXJlKGwsYSxkLGgsZix2KTtjb25zdCBNPXRoaXMuY2VsbFByb3BlcnRpZXMuc2VsZWN0T3B0aW9ucztsZXQgRDtEPXRoaXMucHJlcGFyZU9wdGlvbnMoImZ1bmN0aW9uIj09''@;'; put 'put ''dHlwZW9mIE0/TSh0aGlzLnJvdyx0aGlzLmNvbCx0aGlzLnByb3ApOk0pLHhwKHRoaXMuc2VsZWN0KSxYbyhELChaLHJlKT0+e2NvbnN0IGNlPXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJPUFRJT04iKTtjZS52YWx1ZT1yZSx6NyhjZSxaKSx0aGlzLnNlbGVjdC5hcHBl''@;'; put 'put ''bmRDaGlsZChjZSl9KX1wcmVwYXJlT3B0aW9ucyhsKXtsZXQgYT17fTtpZihBcnJheS5pc0FycmF5KGwpKWZvcihsZXQgZD0wLGg9bC5sZW5ndGg7ZDxoO2QrKylhW2xbZF1dPWxbZF07ZWxzZSJvYmplY3QiPT10eXBlb2YgbCYmKGE9bCk7cmV0dXJuIGF9cmVmcmVzaFZhbHVlKCl7Y29uc3Qg''@;'; put 'put ''bD10aGlzLmhvdC5nZXRTb3VyY2VEYXRhQXRDZWxsKHRoaXMucm93LHRoaXMucHJvcCk7dGhpcy5vcmlnaW5hbFZhbHVlPWwsdGhpcy5zZXRWYWx1ZShsKSx0aGlzLnJlZnJlc2hEaW1lbnNpb25zKCl9cmVmcmVzaERpbWVuc2lvbnMoKXtpZih0aGlzLnN0YXRlIT09bHUuRURJVElORylyZXR1''@;'; put 'put ''cm47aWYodGhpcy5URD10aGlzLmdldEVkaXRlZENlbGwoKSwhdGhpcy5URClyZXR1cm4gdm9pZCB0aGlzLmNsb3NlKCk7Y29uc3R7dG9wOmwsc3RhcnQ6YSx3aWR0aDpkLGhlaWdodDpofT10aGlzLmdldEVkaXRlZENlbGxSZWN0KCksZj10aGlzLnNlbGVjdFdyYXBwZXIuc3R5bGU7Zi5oZWln''@;'; put 'put ''aHQ9YCR7aH1weGAsZi53aWR0aD1gJHtkfXB4YCxmLnRvcD1gJHtsfXB4YCxmW3RoaXMuaG90LmlzUnRsKCk/InJpZ2h0IjoibGVmdCJdPWAke2F9cHhgLGYubWFyZ2luPSIwcHgiLFRpKHRoaXMuc2VsZWN0V3JhcHBlcixXWCl9cmVnaXN0ZXJTaG9ydGN1dHMoKXtjb25zdCBhPXRoaXMuaG90''@;'; put 'put ''LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImVkaXRvciIpLGQ9e2dyb3VwOkpwZX07dGhpcy5pc0luRnVsbEVkaXRNb2RlKCkmJmEuYWRkU2hvcnRjdXRzKFt7a2V5czpbWyJBcnJvd1VwIl1dLGNhbGxiYWNrOigpPT57Y29uc3QgaD10aGlzLnNlbGVjdC5zZWxlY3RlZEluZGV4''@;'; put 'put ''LTE7aD49MCYmKHRoaXMuc2VsZWN0W2hdLnNlbGVjdGVkPSEwKX19LHtrZXlzOltbIkFycm93RG93biJdXSxjYWxsYmFjazooKT0+e2NvbnN0IGg9dGhpcy5zZWxlY3Quc2VsZWN0ZWRJbmRleCsxO2g8PXRoaXMuc2VsZWN0Lmxlbmd0aC0xJiYodGhpcy5zZWxlY3RbaF0uc2VsZWN0ZWQ9ITAp''@;'; put 'put ''fX1dLGQpfXVucmVnaXN0ZXJTaG9ydGN1dHMoKXt0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJlZGl0b3IiKS5yZW1vdmVTaG9ydGN1dHNCeUdyb3VwKEpwZSl9fWNsYXNzIGU0ZSBleHRlbmRzIGE5e3N0YXRpYyBnZXQgRURJVE9SX1RZUEUoKXtyZXR1cm4idGlt''@;'; put 'put ''ZSJ9cHJlcGFyZShsLGEsZCxoLGYsdil7c3VwZXIucHJlcGFyZShsLGEsZCxoLGYsdiksdGhpcy5URVhUQVJFQS5kaXI9Imx0ciJ9fWZ1bmN0aW9uIFlYKGMsbCxhLGQsaCxmLHYpe29ULmFwcGx5KHRoaXMsW2MsbCxhLGQsaCxmLHZdKSx6NyhsLGY/PyIiLCExKX1mdW5jdGlvbiBJXyhjLGws''@;'; put 'put ''YSxkLGgsZix2KXtjb25zdHtyb290RG9jdW1lbnQ6TX09YyxEPXYuYWxsb3dIdG1sP1lYOkFnLFo9TS5jcmVhdGVFbGVtZW50KCJESVYiKSxyZT1jLmdldFNldHRpbmdzKCkuYXJpYVRhZ3M7aWYoWi5jbGFzc05hbWU9Imh0QXV0b2NvbXBsZXRlQXJyb3ciLHJlJiZaLnNldEF0dHJpYnV0ZSgu''@;'; put 'put ''Li5WNygpKSxaLmFwcGVuZENoaWxkKE0uY3JlYXRlVGV4dE5vZGUoIlx1MjViYyIpKSxELmFwcGx5KHRoaXMsW2MsbCxhLGQsaCxmLHZdKSxsLmZpcnN0Q2hpbGR8fGwuYXBwZW5kQ2hpbGQoTS5jcmVhdGVUZXh0Tm9kZSgiXHhhMCIpKSxsLmluc2VydEJlZm9yZShaLGwuZmlyc3RDaGlsZCks''@;'; put 'put ''VGkobCwiaHRBdXRvY29tcGxldGUiKSwhYy5hY0Fycm93TGlzdGVuZXIpe2NvbnN0IGNlPW5ldyBqMihjKTtjLmFjQXJyb3dMaXN0ZW5lcj1mdW5jdGlvbihiZSl7cG8oYmUudGFyZ2V0LCJodEF1dG9jb21wbGV0ZUFycm93IikmJmMudmlldy5fd3QuZ2V0U2V0dGluZygib25DZWxsRGJsQ2xp''@;'; put 'put ''Y2siLG51bGwsYy5fY3JlYXRlQ2VsbENvb3JkcyhhLGQpLGwpfSxjZS5hZGRFdmVudExpc3RlbmVyKGMucm9vdEVsZW1lbnQsIm1vdXNlZG93biIsYy5hY0Fycm93TGlzdGVuZXIpLGMuYWRkSG9va09uY2UoImFmdGVyRGVzdHJveSIsKCk9PntjZS5kZXN0cm95KCl9KX19ZnVuY3Rpb24gR1go''@;'; put 'put ''YyxsLGEsZCxoLGYsdil7SV8uYXBwbHkodGhpcyxbYyxsLGEsZCxoLGYsdl0pfVlYLlJFTkRFUkVSX1RZUEU9Imh0bWwiLElfLlJFTkRFUkVSX1RZUEU9ImF1dG9jb21wbGV0ZSIsR1guUkVOREVSRVJfVFlQRT0iZHJvcGRvd24iO2NvbnN0IHQ0ZT1uZXcgV2Vha01hcCxuNGU9bmV3IFdlYWtN''@;'; put 'put ''YXAsTmF0PSJodEJhZFZhbHVlIixSXz0iZGF0YS1yb3ciLExfPSJkYXRhLWNvbCIsVmF0PSJjaGVja2JveFJlbmRlcmVyIjtmdW5jdGlvbiAkWChjLGwsYSxkLGgsZix2KXtjb25zdHtyb290RG9jdW1lbnQ6TX09YyxEPWMuZ2V0U2V0dGluZ3MoKS5hcmlhVGFncztvVC5hcHBseSh0aGlzLFtj''@;'; put 'put ''LGwsYSxkLGgsZix2XSksZnVuY3Rpb24gQmF0KGMpe2xldCBsPW40ZS5nZXQoYyk7aWYoIWwpe2NvbnN0e3Jvb3RFbGVtZW50OmF9PWM7bD1uZXcgajIoYyksbC5hZGRFdmVudExpc3RlbmVyKGEsImNsaWNrIixkPT5mdW5jdGlvbiBaYXQoYyxsKXtjb25zdHt0YXJnZXQ6YX09YztpZighS1go''@;'; put 'put ''YSl8fCFhLmhhc0F0dHJpYnV0ZShSXyl8fCFhLmhhc0F0dHJpYnV0ZShMXykpcmV0dXJuO2NvbnN0IGQ9cGFyc2VJbnQoYS5nZXRBdHRyaWJ1dGUoUl8pLDEwKSxoPXBhcnNlSW50KGEuZ2V0QXR0cmlidXRlKExfKSwxMCk7bC5nZXRDZWxsTWV0YShkLGgpLnJlYWRPbmx5JiZjLnByZXZlbnRE''@;'; put 'put ''ZWZhdWx0KCl9KGQsYykpLGwuYWRkRXZlbnRMaXN0ZW5lcihhLCJtb3VzZXVwIixkPT5mdW5jdGlvbiBVYXQoYyxsKXtjb25zdHt0YXJnZXQ6YX09YztLWChhKSYmKCFhLmhhc0F0dHJpYnV0ZShSXyl8fCFhLmhhc0F0dHJpYnV0ZShMXyl8fHNldFRpbWVvdXQobC5saXN0ZW4sMTApKX0oZCxj''@;'; put 'put ''KSksbC5hZGRFdmVudExpc3RlbmVyKGEsImNoYW5nZSIsZD0+ZnVuY3Rpb24gV2F0KGMsbCl7Y29uc3R7dGFyZ2V0OmF9PWM7aWYoIUtYKGEpfHwhYS5oYXNBdHRyaWJ1dGUoUl8pfHwhYS5oYXNBdHRyaWJ1dGUoTF8pKXJldHVybjtjb25zdCBkPXBhcnNlSW50KGEuZ2V0QXR0cmlidXRlKFJf''@;'; put 'put ''KSwxMCksaD1wYXJzZUludChhLmdldEF0dHJpYnV0ZShMXyksMTApLGY9bC5nZXRDZWxsTWV0YShkLGgpO2lmKCFmLnJlYWRPbmx5KXtsZXQgdj1udWxsO3Y9Yy50YXJnZXQuY2hlY2tlZD92b2lkIDA9PT1mLnVuY2hlY2tlZFRlbXBsYXRlfHxmLmNoZWNrZWRUZW1wbGF0ZTp2b2lkIDAhPT1m''@;'; put 'put ''LnVuY2hlY2tlZFRlbXBsYXRlJiZmLnVuY2hlY2tlZFRlbXBsYXRlLGwuc2V0RGF0YUF0Q2VsbChkLGgsdil9fShkLGMpKSxuNGUuc2V0KGMsbCl9fShjKTtsZXQgWj1mdW5jdGlvbiBqYXQoYyl7Y29uc3QgbD1jLmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7cmV0dXJuIGwuY2xhc3NOYW1lPSJo''@;'; put 'put ''dENoZWNrYm94UmVuZGVyZXJJbnB1dCIsbC50eXBlPSJjaGVja2JveCIsbC5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwiLTEiKSxsLmNsb25lTm9kZSghMSl9KE0pO2NvbnN0IHJlPXYubGFiZWw7bGV0IGNlPSExO2lmKHR5cGVvZiB2LmNoZWNrZWRUZW1wbGF0ZT4idSImJih2LmNoZWNrZWRU''@;'; put 'put ''ZW1wbGF0ZT0hMCksdHlwZW9mIHYudW5jaGVja2VkVGVtcGxhdGU+InUiJiYodi51bmNoZWNrZWRUZW1wbGF0ZT0hMSkseHAobCksZj09PXYuY2hlY2tlZFRlbXBsYXRlfHxsYyhmKS50b0xvY2FsZUxvd2VyQ2FzZSh2LmxvY2FsZSk9PT1sYyh2LmNoZWNrZWRUZW1wbGF0ZSkudG9Mb2NhbGVM''@;'; put 'put ''b3dlckNhc2Uodi5sb2NhbGUpP1ouY2hlY2tlZD0hMDpmPT09di51bmNoZWNrZWRUZW1wbGF0ZXx8bGMoZikudG9Mb2NhbGVMb3dlckNhc2Uodi5sb2NhbGUpPT09bGModi51bmNoZWNrZWRUZW1wbGF0ZSkudG9Mb2NhbGVMb3dlckNhc2Uodi5sb2NhbGUpP1ouY2hlY2tlZD0hMTpVYyhmKT9U''@;'; put 'put ''aShaLCJub1ZhbHVlIik6KFouc3R5bGUuZGlzcGxheT0ibm9uZSIsVGkoWixOYXQpLGNlPSEwKSx2byhaLFtbUl8sYV0sW0xfLGRdXSksRCYmdm8oWixbbUUoYy5nZXRUcmFuc2xhdGVkUGhyYXNlKFouY2hlY2tlZD9oWDpmWCkpLEkyZShaLmNoZWNrZWQpLEtxZSgpXSksIWNlJiZyZSl7bGV0''@;'; put 'put ''IHFlPSIiO2lmKHJlLnZhbHVlKXFlPSJmdW5jdGlvbiI9PXR5cGVvZiByZS52YWx1ZT9yZS52YWx1ZS5jYWxsKHRoaXMsYSxkLGgsZik6cmUudmFsdWU7ZWxzZSBpZihyZS5wcm9wZXJ0eSl7Y29uc3QgcHQ9Yy5nZXREYXRhQXRSb3dQcm9wKGEscmUucHJvcGVydHkpO3FlPW51bGwhPT1wdD9w''@;'; put 'put ''dDoiIn1jb25zdCBydD1mdW5jdGlvbiB6YXQoYyxsLGEpe2NvbnN0IGQ9Yy5jcmVhdGVFbGVtZW50KCJsYWJlbCIpO2QuY2xhc3NOYW1lPSJodENoZWNrYm94UmVuZGVyZXJMYWJlbCAiKyhhPyJmdWxsV2lkdGgiOiIiKTtjb25zdCBoPWMuY3JlYXRlVGV4dE5vZGUobCk7aWYoYSl7Y29uc3Qg''@;'; put 'put ''Zj1jLmNyZWF0ZUVsZW1lbnQoInNwYW4iKTtmLmFwcGVuZENoaWxkKGgpLGQuYXBwZW5kQ2hpbGQoZil9ZWxzZSBkLmFwcGVuZENoaWxkKGgpO3JldHVybiBkLmNsb25lTm9kZSghMCl9KE0scWUsITAhPT1yZS5zZXBhcmF0ZWQpOyJiZWZvcmUiPT09cmUucG9zaXRpb24/cmUuc2VwYXJhdGVk''@;'; put 'put ''PyhsLmFwcGVuZENoaWxkKHJ0KSxsLmFwcGVuZENoaWxkKFopKToocnQuYXBwZW5kQ2hpbGQoWiksWj1ydCk6KCFyZS5wb3NpdGlvbnx8ImFmdGVyIj09PXJlLnBvc2l0aW9uKSYmKHJlLnNlcGFyYXRlZD8obC5hcHBlbmRDaGlsZChaKSxsLmFwcGVuZENoaWxkKHJ0KSk6KHJ0Lmluc2VydEJl''@;'; put 'put ''Zm9yZShaLHJ0LmZpcnN0Q2hpbGQpLFo9cnQpKX1mdW5jdGlvbiBFZSgpe2xldCBxZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdO2NvbnN0IHJ0PWMuZ2V0U2VsZWN0ZWRSYW5nZSgpLHB0PVtdLGR0PW5ldyBNYXA7bGV0IEp0PVtdLHZu''@;'; put 'put ''PTA7aWYocnQpe2ZvcihsZXQgQ249MDtDbjxydC5sZW5ndGg7Q24rKyl7Y29uc3R7cm93OnRuLGNvbDpNbn09cnRbQ25dLmdldFRvcFN0YXJ0Q29ybmVyKCkse3JvdzpDcixjb2w6R3J9PXJ0W0NuXS5nZXRCb3R0b21FbmRDb3JuZXIoKTtmb3IobGV0IG1yPXRuO21yPD1Dcjttcis9MSlmb3Io''@;'; put 'put ''bGV0IEduPU1uO0duPD1HcjtHbis9MSl7Y29uc3QgYWk9Yy5nZXRDZWxsTWV0YShtcixHbik7aWYoYWkuaGlkZGVuKWNvbnRpbnVlO2NvbnN0IF9pPXtjaGVja2VkVGVtcGxhdGU6YWkuY2hlY2tlZFRlbXBsYXRlLHVuY2hlY2tlZFRlbXBsYXRlOmFpLnVuY2hlY2tlZFRlbXBsYXRlfTtpZigi''@;'; put 'put ''Y2hlY2tib3giIT09YWkudHlwZSl7ITA9PT1xZSYmIWFpLnJlYWRPbmx5JiYoZHQuaGFzKHB0Lmxlbmd0aCk/ZHQuc2V0KHB0Lmxlbmd0aCxbLi4uZHQuZ2V0KHB0Lmxlbmd0aCksW21yLEduLG51bGxdXSk6ZHQuc2V0KHB0Lmxlbmd0aCxbW21yLEduLG51bGxdXSkpO2NvbnRpbnVlfWlmKCEw''@;'; put 'put ''PT09YWkucmVhZE9ubHkpY29udGludWU7dHlwZW9mIGFpLmNoZWNrZWRUZW1wbGF0ZT4idSImJihhaS5jaGVja2VkVGVtcGxhdGU9ITApLHR5cGVvZiBhaS51bmNoZWNrZWRUZW1wbGF0ZT4idSImJihhaS51bmNoZWNrZWRUZW1wbGF0ZT0hMSk7Y29uc3QgT249Yy5nZXREYXRhQXRDZWxsKG1y''@;'; put 'put ''LEduKTshMT09PXFlP1thaS5jaGVja2VkVGVtcGxhdGUsYWkuY2hlY2tlZFRlbXBsYXRlLnRvU3RyaW5nKCldLmluY2x1ZGVzKE9uKT9KdC5wdXNoKFttcixHbixhaS51bmNoZWNrZWRUZW1wbGF0ZSxfaV0pOlthaS51bmNoZWNrZWRUZW1wbGF0ZSxhaS51bmNoZWNrZWRUZW1wbGF0ZS50b1N0''@;'; put 'put ''cmluZygpLG51bGwsdm9pZCAwXS5pbmNsdWRlcyhPbikmJkp0LnB1c2goW21yLEduLGFpLmNoZWNrZWRUZW1wbGF0ZSxfaV0pOkp0LnB1c2goW21yLEduLGFpLnVuY2hlY2tlZFRlbXBsYXRlLF9pXSksdm4rPTF9cHQucHVzaCh2biksdm49MH1KdD1KdC5ldmVyeShDbj0+e2xldFssLHRuXT1D''@;'; put 'put ''bjtyZXR1cm4gdG49PT1KdFswXVsyXX0pP0p0Lm1hcChDbj0+e2xldFt0bixNbixDcl09Q247cmV0dXJuW3RuLE1uLENyXX0pOkp0Lm1hcChDbj0+e2xldFt0bixNbiwsQ3JdPUNuO3JldHVyblt0bixNbixDci5jaGVja2VkVGVtcGxhdGVdfSksSnQubGVuZ3RoPjAmJnB0LmZvckVhY2goKENu''@;'; put 'put ''LHRuKT0+e2xldCBNbj1KdC5zcGxpY2UoMCxDbik7ZHQuc2l6ZSYmZHQuaGFzKHRuKSYmKE1uPVsuLi5NbiwuLi5kdC5nZXQodG4pXSksYy5zZXREYXRhQXRDZWxsKE1uKX0pfX1mdW5jdGlvbiBCZSgpe2NvbnN0IHFlPWMuZ2V0U2VsZWN0ZWRSYW5nZSgpO2lmKHFlKXtmb3IobGV0IHJ0PTA7''@;'; put 'put ''cnQ8cWUubGVuZ3RoO3J0Kyspe2NvbnN0IHB0PXFlW3J0XS5nZXRUb3BTdGFydENvcm5lcigpLGR0PXFlW3J0XS5nZXRCb3R0b21FbmRDb3JuZXIoKTtmb3IobGV0IEp0PXB0LnJvdztKdDw9ZHQucm93O0p0KyspZm9yKGxldCB2bj1wdC5jb2w7dm48PWR0LmNvbDt2bisrKXtpZihjLmdldENl''@;'; put 'put ''bGxNZXRhKEp0LHZuKS5yZWFkT25seSljb250aW51ZTtjb25zdCB0bj1jLmdldENlbGwoSnQsdm4pO2lmKEVwKHRuKSYmdG4ucXVlcnlTZWxlY3RvckFsbCgiaW5wdXRbdHlwZT1jaGVja2JveF0iKS5sZW5ndGg+MClyZXR1cm4hMH19cmV0dXJuITF9fSghcmV8fHJlJiYhcmUuc2VwYXJhdGVk''@;'; put 'put ''KSYmbC5hcHBlbmRDaGlsZChaKSxjZSYmbC5hcHBlbmRDaGlsZChNLmNyZWF0ZVRleHROb2RlKCIjYmFkLXZhbHVlIyIpKSx0NGUuaGFzKGMpfHwodDRlLnNldChjLCEwKSxmdW5jdGlvbiBiZSgpe2MuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZ3JpZCIpLmFkZFNob3J0Y3V0''@;'; put 'put ''cyhbe2tleXM6W1sic3BhY2UiXV0sY2FsbGJhY2s6KCk9PihFZSgpLCFCZSgpKSxydW5Pbmx5SWY6KCk9Pnt2YXIgZHQ7cmV0dXJuIG51bGw9PT0oZHQ9Yy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpKXx8dm9pZCAwPT09ZHQ/dm9pZCAwOmR0LmhpZ2hsaWdodC5pc0NlbGwoKX19LHtrZXlzOltb''@;'; put 'put ''ImVudGVyIl1dLGNhbGxiYWNrOigpPT4oRWUoKSwhQmUoKSkscnVuT25seUlmOigpPT57Y29uc3QgZHQ9Yy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO3JldHVybiBjLmdldFNldHRpbmdzKCkuZW50ZXJCZWdpbnNFZGl0aW5nJiZkdD8uaGlnaGxpZ2h0LmlzQ2VsbCgpJiYhYy5zZWxlY3Rpb24u''@;'; put 'put ''aXNNdWx0aXBsZSgpfX0se2tleXM6W1siZGVsZXRlIl0sWyJiYWNrc3BhY2UiXV0sY2FsbGJhY2s6KCk9PihFZSghMCksIUJlKCkpLHJ1bk9ubHlJZjooKT0+e3ZhciBkdDtyZXR1cm4gbnVsbD09PShkdD1jLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkpfHx2b2lkIDA9PT1kdD92b2lkIDA6ZHQu''@;'; put 'put ''aGlnaGxpZ2h0LmlzQ2VsbCgpfX1dLHtncm91cDpWYXQscmVsYXRpdmVUb0dyb3VwOldtLHBvc2l0aW9uOiJiZWZvcmUifSl9KCkpfWZ1bmN0aW9uIEtYKGMpe3JldHVybiJJTlBVVCI9PT1jLnRhZ05hbWUmJiJjaGVja2JveCI9PT1jLmdldEF0dHJpYnV0ZSgidHlwZSIpfWZ1bmN0aW9uIHFY''@;'; put 'put ''KGMsbCxhLGQsaCxmLHYpe0lfLmFwcGx5KHRoaXMsW2MsbCxhLGQsaCxmLHZdKX1TYS5nZXRTaW5nbGV0b24oKS5hZGQoIm1vZGlmeUF1dG9Db2x1bW5TaXplU2VlZCIsZnVuY3Rpb24oYyxsLGEpe2NvbnN0e2xhYmVsOmQsdHlwZTpoLHJvdzpmLGNvbHVtbjp2LHByb3A6TX09bDtpZigiY2hl''@;'; put 'put ''Y2tib3giPT09aCl7aWYoZCl7Y29uc3R7dmFsdWU6RCxwcm9wZXJ0eTpafT1kO2xldCByZT1hO2lmKEQpcmU9ImZ1bmN0aW9uIj09dHlwZW9mIEQ/RChmLHYsTSxhKTpEO2Vsc2UgaWYoWil7Y29uc3QgY2U9dGhpcy5nZXREYXRhQXRSb3dQcm9wKGYsWik7cmU9bnVsbCE9PWNlP2NlOmF9Yz1y''@;'; put 'put ''ZX1yZXR1cm4gY319KSwkWC5SRU5ERVJFUl9UWVBFPSJjaGVja2JveCIscVguUkVOREVSRVJfVFlQRT0iaGFuZHNvbnRhYmxlIjt2YXIgWFgsaTRlLEpYLGE0ZSxRWCxzNGUsR2F0PXR5cGVvZiBnbG9iYWxUaGlzPCJ1Ij9nbG9iYWxUaGlzOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp0eXBl''@;'; put 'put ''b2YgZ2xvYmFsPCJ1Ij9nbG9iYWw6dHlwZW9mIHNlbGY8InUiP3NlbGY6e307ZnVuY3Rpb24gJGF0KGMpe3JldHVybiBjJiZjLl9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjLCJkZWZhdWx0Iik/Yy5kZWZhdWx0OmN9ZnVuY3Rpb24gbzRlKCl7aWYo''@;'; put 'put ''YTRlKXJldHVybiBKWDthNGU9MTtjb25zdCBjPVt7a2V5OiJaaUIiLGZhY3RvcjpNYXRoLnBvdygxMDI0LDcpfSx7a2V5OiJaQiIsZmFjdG9yOk1hdGgucG93KDFlMyw3KX0se2tleToiWWlCIixmYWN0b3I6TWF0aC5wb3coMTAyNCw4KX0se2tleToiWUIiLGZhY3RvcjpNYXRoLnBvdygxZTMs''@;'; put 'put ''OCl9LHtrZXk6IlRpQiIsZmFjdG9yOk1hdGgucG93KDEwMjQsNCl9LHtrZXk6IlRCIixmYWN0b3I6TWF0aC5wb3coMWUzLDQpfSx7a2V5OiJQaUIiLGZhY3RvcjpNYXRoLnBvdygxMDI0LDUpfSx7a2V5OiJQQiIsZmFjdG9yOk1hdGgucG93KDFlMyw1KX0se2tleToiTWlCIixmYWN0b3I6TWF0''@;'; put 'put ''aC5wb3coMTAyNCwyKX0se2tleToiTUIiLGZhY3RvcjpNYXRoLnBvdygxZTMsMil9LHtrZXk6IktpQiIsZmFjdG9yOk1hdGgucG93KDEwMjQsMSl9LHtrZXk6IktCIixmYWN0b3I6TWF0aC5wb3coMWUzLDEpfSx7a2V5OiJHaUIiLGZhY3RvcjpNYXRoLnBvdygxMDI0LDMpfSx7a2V5OiJHQiIs''@;'; put 'put ''ZmFjdG9yOk1hdGgucG93KDFlMywzKX0se2tleToiRWlCIixmYWN0b3I6TWF0aC5wb3coMTAyNCw2KX0se2tleToiRUIiLGZhY3RvcjpNYXRoLnBvdygxZTMsNil9LHtrZXk6IkIiLGZhY3RvcjoxfV07ZnVuY3Rpb24gbChEKXtyZXR1cm4gRC5yZXBsYWNlKC9bLS9cXF4kKis/LigpfFtcXXt9''@;'; put 'put ''XS9nLCJcXCQmIil9ZnVuY3Rpb24gYShELFoscmUsY2UsYmUsRWUsQmUpe2lmKCFpc05hTigrRCkpcmV0dXJuK0Q7bGV0IHFlPSIiLHJ0PUQucmVwbGFjZSgvKF5bXihdKilcKCguKilcKShbXildKiQpLywiJDEkMiQzIik7aWYocnQhPT1EKXJldHVybi0xKmEocnQsWixyZSxjZSxiZSxFZSk7''@;'; put 'put ''Zm9yKGxldCB0bj0wO3RuPGMubGVuZ3RoO3RuKyspe2xldCBNbj1jW3RuXTtpZihxZT1ELnJlcGxhY2UoUmVnRXhwKGAoWzAtOSBdKSgke01uLmtleX0pJGApLCIkMSIpLHFlIT09RClyZXR1cm4gYShxZSxaLHJlLGNlLGJlLEVlKSpNbi5mYWN0b3J9aWYocWU9RC5yZXBsYWNlKCIlIiwiIiks''@;'; put 'put ''cWUhPT1EKXJldHVybiBhKHFlLFoscmUsY2UsYmUsRWUpLzEwMDtsZXQgcHQ9cGFyc2VGbG9hdChEKTtpZihpc05hTihwdCkpcmV0dXJuO2xldCBkdD1jZShwdCk7aWYoZHQmJiIuIiE9PWR0JiYocWU9RC5yZXBsYWNlKG5ldyBSZWdFeHAoYCR7bChkdCl9JGApLCIiKSxxZSE9PUQpKXJldHVy''@;'; put 'put ''biBhKHFlLFoscmUsY2UsYmUsRWUpO2xldCBKdD17fTtPYmplY3Qua2V5cyhFZSkuZm9yRWFjaCh0bj0+e0p0W0VlW3RuXV09dG59KTtsZXQgdm49T2JqZWN0LmtleXMoSnQpLnNvcnQoKS5yZXZlcnNlKCksQ249dm4ubGVuZ3RoO2ZvcihsZXQgdG49MDt0bjxDbjt0bisrKXtsZXQgTW49dm5b''@;'; put 'put ''dG5dLENyPUp0W01uXTtpZihxZT1ELnJlcGxhY2UoTW4sIiIpLHFlIT09RCl7bGV0IEdyO3N3aXRjaChDcil7Y2FzZSJ0aG91c2FuZCI6R3I9TWF0aC5wb3coMTAsMyk7YnJlYWs7Y2FzZSJtaWxsaW9uIjpHcj1NYXRoLnBvdygxMCw2KTticmVhaztjYXNlImJpbGxpb24iOkdyPU1hdGgucG93''@;'; put 'put ''KDEwLDkpO2JyZWFrO2Nhc2UidHJpbGxpb24iOkdyPU1hdGgucG93KDEwLDEyKX1yZXR1cm4gYShxZSxaLHJlLGNlLGJlLEVlKSpHcn19fWZ1bmN0aW9uIGgoRCxaLHJlPSIiLGNlLGJlLEVlLEJlKXtpZigiIj09PUQpcmV0dXJuO2lmKEQ9PT1iZSlyZXR1cm4gMDtsZXQgcWU9ZnVuY3Rpb24g''@;'; put 'put ''ZChELFoscmUpe2xldCBjZT1ELnJlcGxhY2UocmUsIiIpO3JldHVybiBjZT1jZS5yZXBsYWNlKG5ldyBSZWdFeHAoYChbMC05XSkke2woWi50aG91c2FuZHMpfShbMC05XSlgLCJnIiksIiQxJDIiKSxjZT1jZS5yZXBsYWNlKFouZGVjaW1hbCwiLiIpLGNlfShELFoscmUpO3JldHVybiBhKHFl''@;'; put 'put ''LFoscmUsY2UsYmUsRWUpfXJldHVybiBKWD17dW5mb3JtYXQ6ZnVuY3Rpb24gTShELFope2NvbnN0IHJlPXJKKCk7bGV0IHJ0LGNlPXJlLmN1cnJlbnREZWxpbWl0ZXJzKCksYmU9cmUuY3VycmVudEN1cnJlbmN5KCkuc3ltYm9sLEVlPXJlLmN1cnJlbnRPcmRpbmFsKCksQmU9cmUuZ2V0WmVy''@;'; put 'put ''b0Zvcm1hdCgpLHFlPXJlLmN1cnJlbnRBYmJyZXZpYXRpb25zKCk7aWYoInN0cmluZyI9PXR5cGVvZiBEKXJ0PWZ1bmN0aW9uIGYoRCxaKXtpZighRC5pbmRleE9mKCI6Iil8fCI6Ij09PVoudGhvdXNhbmRzKXJldHVybiExO2xldCBjZT1ELnNwbGl0KCI6Iik7aWYoMyE9PWNlLmxlbmd0aCly''@;'; put 'put ''ZXR1cm4hMTtsZXQgRWU9K2NlWzFdLEJlPStjZVsyXTtyZXR1cm4haXNOYU4oK2NlWzBdKSYmIWlzTmFOKEVlKSYmIWlzTmFOKEJlKX0oRCxjZSk/ZnVuY3Rpb24gdihEKXtsZXQgWj1ELnNwbGl0KCI6Iik7cmV0dXJuK1pbMl0rNjAqK1pbMV0rMzYwMCorWlswXX0oRCk6aChELGNlLGJlLEVl''@;'; put 'put ''LEJlLHFlKTtlbHNle2lmKCJudW1iZXIiIT10eXBlb2YgRClyZXR1cm47cnQ9RH1pZih2b2lkIDAhPT1ydClyZXR1cm4gcnR9fX1mdW5jdGlvbiBlSigpe2lmKHM0ZSlyZXR1cm4gUVg7czRlPTE7bGV0IGM9bzRlKCk7Y29uc3QgbD0vXlthLXpdezIsM30oLVthLXpBLVpdezR9KT8oLShbQS1a''@;'; put 'put ''XXsyfXxbMC05XXszfSkpPyQvLFo9e291dHB1dDp7dHlwZToic3RyaW5nIix2YWxpZFZhbHVlczpbImN1cnJlbmN5IiwicGVyY2VudCIsImJ5dGUiLCJ0aW1lIiwib3JkaW5hbCIsIm51bWJlciJdfSxiYXNlOnt0eXBlOiJzdHJpbmciLHZhbGlkVmFsdWVzOlsiZGVjaW1hbCIsImJpbmFyeSIs''@;'; put 'put ''ImdlbmVyYWwiXSxyZXN0cmljdGlvbjoocnQscHQpPT4iYnl0ZSI9PT1wdC5vdXRwdXQsbWVzc2FnZToiYGJhc2VgIG11c3QgYmUgcHJvdmlkZWQgb25seSB3aGVuIHRoZSBvdXRwdXQgaXMgYGJ5dGVgIixtYW5kYXRvcnk6cnQ9PiJieXRlIj09PXJ0Lm91dHB1dH0sY2hhcmFjdGVyaXN0aWM6''@;'; put 'put ''e3R5cGU6Im51bWJlciIscmVzdHJpY3Rpb246cnQ9PnJ0Pj0wLG1lc3NhZ2U6InZhbHVlIG11c3QgYmUgcG9zaXRpdmUifSxwcmVmaXg6InN0cmluZyIscG9zdGZpeDoic3RyaW5nIixmb3JjZUF2ZXJhZ2U6e3R5cGU6InN0cmluZyIsdmFsaWRWYWx1ZXM6WyJ0cmlsbGlvbiIsImJpbGxpb24i''@;'; put 'put ''LCJtaWxsaW9uIiwidGhvdXNhbmQiXX0sYXZlcmFnZToiYm9vbGVhbiIsbG93UHJlY2lzaW9uOnt0eXBlOiJib29sZWFuIixyZXN0cmljdGlvbjoocnQscHQpPT4hMD09PXB0LmF2ZXJhZ2UsbWVzc2FnZToiYGxvd1ByZWNpc2lvbmAgbXVzdCBiZSBwcm92aWRlZCBvbmx5IHdoZW4gdGhlIG9w''@;'; put 'put ''dGlvbiBgYXZlcmFnZWAgaXMgc2V0In0sY3VycmVuY3lQb3NpdGlvbjp7dHlwZToic3RyaW5nIix2YWxpZFZhbHVlczpbInByZWZpeCIsImluZml4IiwicG9zdGZpeCJdfSxjdXJyZW5jeVN5bWJvbDoic3RyaW5nIix0b3RhbExlbmd0aDp7dHlwZToibnVtYmVyIixyZXN0cmljdGlvbnM6W3ty''@;'; put 'put ''ZXN0cmljdGlvbjpydD0+cnQ+PTAsbWVzc2FnZToidmFsdWUgbXVzdCBiZSBwb3NpdGl2ZSJ9LHtyZXN0cmljdGlvbjoocnQscHQpPT4hcHQuZXhwb25lbnRpYWwsbWVzc2FnZToiYHRvdGFsTGVuZ3RoYCBpcyBpbmNvbXBhdGlibGUgd2l0aCBgZXhwb25lbnRpYWxgIn1dfSxtYW50aXNzYTp7''@;'; put 'put ''dHlwZToibnVtYmVyIixyZXN0cmljdGlvbjpydD0+cnQ+PTAsbWVzc2FnZToidmFsdWUgbXVzdCBiZSBwb3NpdGl2ZSJ9LG9wdGlvbmFsTWFudGlzc2E6ImJvb2xlYW4iLHRyaW1NYW50aXNzYToiYm9vbGVhbiIscm91bmRpbmdGdW5jdGlvbjoiZnVuY3Rpb24iLG9wdGlvbmFsQ2hhcmFjdGVy''@;'; put 'put ''aXN0aWM6ImJvb2xlYW4iLHRob3VzYW5kU2VwYXJhdGVkOiJib29sZWFuIixzcGFjZVNlcGFyYXRlZDoiYm9vbGVhbiIsc3BhY2VTZXBhcmF0ZWRDdXJyZW5jeToiYm9vbGVhbiIsc3BhY2VTZXBhcmF0ZWRBYmJyZXZpYXRpb246ImJvb2xlYW4iLGFiYnJldmlhdGlvbnM6e3R5cGU6Im9iamVj''@;'; put 'put ''dCIsY2hpbGRyZW46e3Rob3VzYW5kOiJzdHJpbmciLG1pbGxpb246InN0cmluZyIsYmlsbGlvbjoic3RyaW5nIix0cmlsbGlvbjoic3RyaW5nIn19LG5lZ2F0aXZlOnt0eXBlOiJzdHJpbmciLHZhbGlkVmFsdWVzOlsic2lnbiIsInBhcmVudGhlc2lzIl19LGZvcmNlU2lnbjoiYm9vbGVhbiIs''@;'; put 'put ''ZXhwb25lbnRpYWw6e3R5cGU6ImJvb2xlYW4ifSxwcmVmaXhTeW1ib2w6e3R5cGU6ImJvb2xlYW4iLHJlc3RyaWN0aW9uOihydCxwdCk9PiJwZXJjZW50Ij09PXB0Lm91dHB1dCxtZXNzYWdlOiJgcHJlZml4U3ltYm9sYCBjYW4gYmUgcHJvdmlkZWQgb25seSB3aGVuIHRoZSBvdXRwdXQgaXMg''@;'; put 'put ''YHBlcmNlbnRgIn19LHJlPXtsYW5ndWFnZVRhZzp7dHlwZToic3RyaW5nIixtYW5kYXRvcnk6ITAscmVzdHJpY3Rpb246cnQ9PnJ0Lm1hdGNoKGwpLG1lc3NhZ2U6InRoZSBsYW5ndWFnZSB0YWcgbXVzdCBmb2xsb3cgdGhlIEJDUCA0NyBzcGVjaWZpY2F0aW9uIChzZWUgaHR0cHM6Ly90b29s''@;'; put 'put ''cy5pZWZ0Lm9yZy9odG1sL2JjcDQ3KSJ9LGRlbGltaXRlcnM6e3R5cGU6Im9iamVjdCIsY2hpbGRyZW46e3Rob3VzYW5kczoic3RyaW5nIixkZWNpbWFsOiJzdHJpbmciLHRob3VzYW5kc1NpemU6Im51bWJlciJ9LG1hbmRhdG9yeTohMH0sYWJicmV2aWF0aW9uczp7dHlwZToib2JqZWN0Iixj''@;'; put 'put ''aGlsZHJlbjp7dGhvdXNhbmQ6e3R5cGU6InN0cmluZyIsbWFuZGF0b3J5OiEwfSxtaWxsaW9uOnt0eXBlOiJzdHJpbmciLG1hbmRhdG9yeTohMH0sYmlsbGlvbjp7dHlwZToic3RyaW5nIixtYW5kYXRvcnk6ITB9LHRyaWxsaW9uOnt0eXBlOiJzdHJpbmciLG1hbmRhdG9yeTohMH19LG1hbmRh''@;'; put 'put ''dG9yeTohMH0sc3BhY2VTZXBhcmF0ZWQ6ImJvb2xlYW4iLHNwYWNlU2VwYXJhdGVkQ3VycmVuY3k6ImJvb2xlYW4iLG9yZGluYWw6e3R5cGU6ImZ1bmN0aW9uIixtYW5kYXRvcnk6ITB9LGJ5dGVzOnt0eXBlOiJvYmplY3QiLGNoaWxkcmVuOntiaW5hcnlTdWZmaXhlczoib2JqZWN0IixkZWNp''@;'; put 'put ''bWFsU3VmZml4ZXM6Im9iamVjdCJ9fSxjdXJyZW5jeTp7dHlwZToib2JqZWN0IixjaGlsZHJlbjp7c3ltYm9sOiJzdHJpbmciLHBvc2l0aW9uOiJzdHJpbmciLGNvZGU6InN0cmluZyJ9LG1hbmRhdG9yeTohMH0sZGVmYXVsdHM6ImZvcm1hdCIsb3JkaW5hbEZvcm1hdDoiZm9ybWF0IixieXRl''@;'; put 'put ''Rm9ybWF0OiJmb3JtYXQiLHBlcmNlbnRhZ2VGb3JtYXQ6ImZvcm1hdCIsY3VycmVuY3lGb3JtYXQ6ImZvcm1hdCIsdGltZURlZmF1bHRzOiJmb3JtYXQiLGZvcm1hdHM6e3R5cGU6Im9iamVjdCIsY2hpbGRyZW46e2ZvdXJEaWdpdHM6e3R5cGU6ImZvcm1hdCIsbWFuZGF0b3J5OiEwfSxmdWxs''@;'; put 'put ''V2l0aFR3b0RlY2ltYWxzOnt0eXBlOiJmb3JtYXQiLG1hbmRhdG9yeTohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e3R5cGU6ImZvcm1hdCIsbWFuZGF0b3J5OiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e3R5cGU6ImZvcm1hdCIsbWFuZGF0b3J5OiEwfX19fTtmdW5jdGlvbiBi''@;'; put 'put ''ZShydCl7cmV0dXJuIHZvaWQgMCE9PWMudW5mb3JtYXQocnQpfWZ1bmN0aW9uIEVlKHJ0LHB0LGR0LEp0PSExKXtsZXQgdm49T2JqZWN0LmtleXMocnQpLm1hcChDbj0+e2lmKCFwdFtDbl0pcmV0dXJuIGNvbnNvbGUuZXJyb3IoYCR7ZHR9IEludmFsaWQga2V5OiAke0NufWApLCExO2xldCB0''@;'; put 'put ''bj1ydFtDbl0sTW49cHRbQ25dO2lmKCJzdHJpbmciPT10eXBlb2YgTW4mJihNbj17dHlwZTpNbn0pLCJmb3JtYXQiPT09TW4udHlwZSl7aWYoIUVlKHRuLFosYFtWYWxpZGF0ZSAke0NufV1gLCEwKSlyZXR1cm4hMX1lbHNlIGlmKHR5cGVvZiB0biE9PU1uLnR5cGUpcmV0dXJuIGNvbnNvbGUu''@;'; put 'put ''ZXJyb3IoYCR7ZHR9ICR7Q259IHR5cGUgbWlzbWF0Y2hlZDogIiR7TW4udHlwZX0iIGV4cGVjdGVkLCAiJHt0eXBlb2YgdG59IiBwcm92aWRlZGApLCExO2lmKE1uLnJlc3RyaWN0aW9ucyYmTW4ucmVzdHJpY3Rpb25zLmxlbmd0aCl7bGV0IENyPU1uLnJlc3RyaWN0aW9ucy5sZW5ndGg7Zm9y''@;'; put 'put ''KGxldCBHcj0wO0dyPENyO0dyKyspe2xldHtyZXN0cmljdGlvbjptcixtZXNzYWdlOkdufT1Nbi5yZXN0cmljdGlvbnNbR3JdO2lmKCFtcih0bixydCkpcmV0dXJuIGNvbnNvbGUuZXJyb3IoYCR7ZHR9ICR7Q259IGludmFsaWQgdmFsdWU6ICR7R259YCksITF9fXJldHVybiBNbi5yZXN0cmlj''@;'; put 'put ''dGlvbiYmIU1uLnJlc3RyaWN0aW9uKHRuLHJ0KT8oY29uc29sZS5lcnJvcihgJHtkdH0gJHtDbn0gaW52YWxpZCB2YWx1ZTogJHtNbi5tZXNzYWdlfWApLCExKTpNbi52YWxpZFZhbHVlcyYmLTE9PT1Nbi52YWxpZFZhbHVlcy5pbmRleE9mKHRuKT8oY29uc29sZS5lcnJvcihgJHtkdH0gJHtD''@;'; put 'put ''bn0gaW52YWxpZCB2YWx1ZTogbXVzdCBiZSBhbW9uZyAke0pTT04uc3RyaW5naWZ5KE1uLnZhbGlkVmFsdWVzKX0sICIke3RufSIgcHJvdmlkZWRgKSwhMSk6IShNbi5jaGlsZHJlbiYmIUVlKHRuLE1uLmNoaWxkcmVuLGBbVmFsaWRhdGUgJHtDbn1dYCkpfSk7cmV0dXJuIEp0fHx2bi5wdXNo''@;'; put 'put ''KC4uLk9iamVjdC5rZXlzKHB0KS5tYXAoQ249PntsZXQgdG49cHRbQ25dO2lmKCJzdHJpbmciPT10eXBlb2YgdG4mJih0bj17dHlwZTp0bn0pLHRuLm1hbmRhdG9yeSl7bGV0IE1uPXRuLm1hbmRhdG9yeTtpZigiZnVuY3Rpb24iPT10eXBlb2YgTW4mJihNbj1NbihydCkpLE1uJiZ2b2lkIDA9''@;'; put 'put ''PT1ydFtDbl0pcmV0dXJuIGNvbnNvbGUuZXJyb3IoYCR7ZHR9IE1pc3NpbmcgbWFuZGF0b3J5IGtleSAiJHtDbn0iYCksITF9cmV0dXJuITB9KSksdm4ucmVkdWNlKChDbix0bik9PkNuJiZ0biwhMCl9ZnVuY3Rpb24gQmUocnQpe3JldHVybiBFZShydCxaLCJbVmFsaWRhdGUgZm9ybWF0XSIp''@;'; put 'put ''fXJldHVybiBRWD17dmFsaWRhdGU6ZnVuY3Rpb24gY2UocnQscHQpe2xldCBkdD1iZShydCksSnQ9QmUocHQpO3JldHVybiBkdCYmSnR9LHZhbGlkYXRlRm9ybWF0OkJlLHZhbGlkYXRlSW5wdXQ6YmUsdmFsaWRhdGVMYW5ndWFnZTpmdW5jdGlvbiBxZShydCl7cmV0dXJuIEVlKHJ0LHJlLCJb''@;'; put 'put ''VmFsaWRhdGUgbGFuZ3VhZ2VdIil9fX12YXIgbkosbDRlLHRKPXtwYXJzZUZvcm1hdDpmdW5jdGlvbiBkb3QoYyxsPXt9KXtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIGM/YzooYz1mdW5jdGlvbiBxYXQoYyxsKXtsZXQgYT1jLm1hdGNoKC9eeyhbXn1dKil9Lyk7cmV0dXJuIGE/KGwucHJlZml4''@;'; put 'put ''PWFbMV0sYy5zbGljZShhWzBdLmxlbmd0aCkpOmN9KGMsbCksYz1mdW5jdGlvbiBYYXQoYyxsKXtsZXQgYT1jLm1hdGNoKC97KFtefV0qKX0kLyk7cmV0dXJuIGE/KGwucG9zdGZpeD1hWzFdLGMuc2xpY2UoMCwtYVswXS5sZW5ndGgpKTpjfShjLGwpLGZ1bmN0aW9uIEphdChjLGwpe2lmKC0x''@;'; put 'put ''PT09Yy5pbmRleE9mKCIkIikpe2lmKC0xPT09Yy5pbmRleE9mKCIlIikpcmV0dXJuLTEhPT1jLmluZGV4T2YoImJkIik/KGwub3V0cHV0PSJieXRlIix2b2lkKGwuYmFzZT0iZ2VuZXJhbCIpKTotMSE9PWMuaW5kZXhPZigiYiIpPyhsLm91dHB1dD0iYnl0ZSIsdm9pZChsLmJhc2U9ImJpbmFy''@;'; put 'put ''eSIpKTotMSE9PWMuaW5kZXhPZigiZCIpPyhsLm91dHB1dD0iYnl0ZSIsdm9pZChsLmJhc2U9ImRlY2ltYWwiKSk6dm9pZCgtMT09PWMuaW5kZXhPZigiOiIpPy0xIT09Yy5pbmRleE9mKCJvIikmJihsLm91dHB1dD0ib3JkaW5hbCIpOmwub3V0cHV0PSJ0aW1lIik7bC5vdXRwdXQ9InBlcmNl''@;'; put 'put ''bnQifWVsc2UgbC5vdXRwdXQ9ImN1cnJlbmN5In0oYyxsKSxmdW5jdGlvbiB0b3QoYyxsKXtsZXQgYT1jLm1hdGNoKC9bMS05XStbMC05XSovKTthJiYobC50b3RhbExlbmd0aD0rYVswXSl9KGMsbCksZnVuY3Rpb24gbm90KGMsbCl7bGV0IGQ9Yy5zcGxpdCgiLiIpWzBdLm1hdGNoKC8wKy8p''@;'; put 'put ''O2QmJihsLmNoYXJhY3RlcmlzdGljPWRbMF0ubGVuZ3RoKX0oYyxsKSxmdW5jdGlvbiBsb3QoYyxsKXtpZigtMSE9PWMuaW5kZXhPZigiLiIpKXtsZXQgYT1jLnNwbGl0KCIuIilbMF07bC5vcHRpb25hbENoYXJhY3RlcmlzdGljPS0xPT09YS5pbmRleE9mKCIwIil9fShjLGwpLGZ1bmN0aW9u''@;'; put 'put ''IGFvdChjLGwpey0xIT09Yy5pbmRleE9mKCJhIikmJihsLmF2ZXJhZ2U9ITApfShjLGwpLGZ1bmN0aW9uIG9vdChjLGwpey0xIT09Yy5pbmRleE9mKCJLIik/bC5mb3JjZUF2ZXJhZ2U9InRob3VzYW5kIjotMSE9PWMuaW5kZXhPZigiTSIpP2wuZm9yY2VBdmVyYWdlPSJtaWxsaW9uIjotMSE9''@;'; put 'put ''PWMuaW5kZXhPZigiQiIpP2wuZm9yY2VBdmVyYWdlPSJiaWxsaW9uIjotMSE9PWMuaW5kZXhPZigiVCIpJiYobC5mb3JjZUF2ZXJhZ2U9InRyaWxsaW9uIil9KGMsbCksZnVuY3Rpb24gcm90KGMsbCl7bGV0IGE9Yy5zcGxpdCgiLiIpWzFdO2lmKGEpe2xldCBkPWEubWF0Y2goLzArLyk7ZCYm''@;'; put 'put ''KGwubWFudGlzc2E9ZFswXS5sZW5ndGgpfX0oYyxsKSxmdW5jdGlvbiBzb3QoYyxsKXtjLm1hdGNoKC9cW1wuXS8pP2wub3B0aW9uYWxNYW50aXNzYT0hMDpjLm1hdGNoKC9cLi8pJiYobC5vcHRpb25hbE1hbnRpc3NhPSExKX0oYyxsKSxmdW5jdGlvbiBpb3QoYyxsKXtjb25zdCBhPWMuc3Bs''@;'; put 'put ''aXQoIi4iKVsxXTthJiYobC50cmltTWFudGlzc2E9LTEhPT1hLmluZGV4T2YoIlsiKSl9KGMsbCksZnVuY3Rpb24gUWF0KGMsbCl7LTEhPT1jLmluZGV4T2YoIiwiKSYmKGwudGhvdXNhbmRTZXBhcmF0ZWQ9ITApfShjLGwpLGZ1bmN0aW9uIGVvdChjLGwpey0xIT09Yy5pbmRleE9mKCIgIikm''@;'; put 'put ''JihsLnNwYWNlU2VwYXJhdGVkPSEwLGwuc3BhY2VTZXBhcmF0ZWRDdXJyZW5jeT0hMCwobC5hdmVyYWdlfHxsLmZvcmNlQXZlcmFnZSkmJihsLnNwYWNlU2VwYXJhdGVkQWJicmV2aWF0aW9uPSEwKSl9KGMsbCksZnVuY3Rpb24gY290KGMsbCl7Yy5tYXRjaCgvXlwrP1woW14pXSpcKSQvKSYm''@;'; put 'put ''KGwubmVnYXRpdmU9InBhcmVudGhlc2lzIiksYy5tYXRjaCgvXlwrPy0vKSYmKGwubmVnYXRpdmU9InNpZ24iKX0oYyxsKSxmdW5jdGlvbiB1b3QoYyxsKXtjLm1hdGNoKC9eXCsvKSYmKGwuZm9yY2VTaWduPSEwKX0oYyxsKSxsKX19O2Z1bmN0aW9uIHJKKCl7aWYobDRlKXJldHVybiBuSjts''@;'; put 'put ''NGU9MTtjb25zdCBjPWZ1bmN0aW9uIEthdCgpe3JldHVybiBpNGV8fChpNGU9MSxYWD17bGFuZ3VhZ2VUYWc6ImVuLVVTIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiwiLGRlY2ltYWw6Ii4ifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiayIsbWlsbGlvbjoibSIsYmlsbGlvbjoiYiIsdHJp''@;'; put 'put ''bGxpb246InQifSxzcGFjZVNlcGFyYXRlZDohMSxvcmRpbmFsOmZ1bmN0aW9uKGMpe2xldCBsPWMlMTA7cmV0dXJuIDE9PX5+KGMlMTAwLzEwKT8idGgiOjE9PT1sPyJzdCI6Mj09PWw/Im5kIjozPT09bD8icmQiOiJ0aCJ9LGJ5dGVzOntiaW5hcnlTdWZmaXhlczpbIkIiLCJLaUIiLCJNaUIi''@;'; put 'put ''LCJHaUIiLCJUaUIiLCJQaUIiLCJFaUIiLCJaaUIiLCJZaUIiXSxkZWNpbWFsU3VmZml4ZXM6WyJCIiwiS0IiLCJNQiIsIkdCIiwiVEIiLCJQQiIsIkVCIiwiWkIiLCJZQiJdfSxjdXJyZW5jeTp7c3ltYm9sOiIkIixwb3NpdGlvbjoicHJlZml4Iixjb2RlOiJVU0QifSxjdXJyZW5jeUZvcm1h''@;'; put 'put ''dDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxzcGFjZVNlcGFyYXRlZEN1cnJlbmN5OiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6''@;'; put 'put ''ImN1cnJlbmN5Iix0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYToyfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6Mn0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5Iix0aG91c2FuZFNlcGFyYXRlZDoh''@;'; put 'put ''MCxtYW50aXNzYTowfX19KSxYWH0oKSxsPWVKKCksYT10SjtsZXQgaCxkPXt9LGY9e30sdj1udWxsLE09e307ZnVuY3Rpb24gRChyZSl7aD1yZX1mdW5jdGlvbiBaKCl7cmV0dXJuIGZbaF19cmV0dXJuIGQubGFuZ3VhZ2VzPSgpPT5PYmplY3QuYXNzaWduKHt9LGYpLGQuY3VycmVudExhbmd1''@;'; put 'put ''YWdlPSgpPT5oLGQuY3VycmVudEJ5dGVzPSgpPT5aKCkuYnl0ZXN8fHt9LGQuY3VycmVudEN1cnJlbmN5PSgpPT5aKCkuY3VycmVuY3ksZC5jdXJyZW50QWJicmV2aWF0aW9ucz0oKT0+WigpLmFiYnJldmlhdGlvbnMsZC5jdXJyZW50RGVsaW1pdGVycz0oKT0+WigpLmRlbGltaXRlcnMsZC5j''@;'; put 'put ''dXJyZW50T3JkaW5hbD0oKT0+WigpLm9yZGluYWwsZC5jdXJyZW50RGVmYXVsdHM9KCk9Pk9iamVjdC5hc3NpZ24oe30sWigpLmRlZmF1bHRzLE0pLGQuY3VycmVudE9yZGluYWxEZWZhdWx0Rm9ybWF0PSgpPT5PYmplY3QuYXNzaWduKHt9LGQuY3VycmVudERlZmF1bHRzKCksWigpLm9yZGlu''@;'; put 'put ''YWxGb3JtYXQpLGQuY3VycmVudEJ5dGVEZWZhdWx0Rm9ybWF0PSgpPT5PYmplY3QuYXNzaWduKHt9LGQuY3VycmVudERlZmF1bHRzKCksWigpLmJ5dGVGb3JtYXQpLGQuY3VycmVudFBlcmNlbnRhZ2VEZWZhdWx0Rm9ybWF0PSgpPT5PYmplY3QuYXNzaWduKHt9LGQuY3VycmVudERlZmF1bHRz''@;'; put 'put ''KCksWigpLnBlcmNlbnRhZ2VGb3JtYXQpLGQuY3VycmVudEN1cnJlbmN5RGVmYXVsdEZvcm1hdD0oKT0+T2JqZWN0LmFzc2lnbih7fSxkLmN1cnJlbnREZWZhdWx0cygpLFooKS5jdXJyZW5jeUZvcm1hdCksZC5jdXJyZW50VGltZURlZmF1bHRGb3JtYXQ9KCk9Pk9iamVjdC5hc3NpZ24oe30s''@;'; put 'put ''ZC5jdXJyZW50RGVmYXVsdHMoKSxaKCkudGltZUZvcm1hdCksZC5zZXREZWZhdWx0cz1yZT0+e3JlPWEucGFyc2VGb3JtYXQocmUpLGwudmFsaWRhdGVGb3JtYXQocmUpJiYoTT1yZSl9LGQuZ2V0WmVyb0Zvcm1hdD0oKT0+dixkLnNldFplcm9Gb3JtYXQ9cmU9PnY9InN0cmluZyI9PXR5cGVv''@;'; put 'put ''ZiByZT9yZTpudWxsLGQuaGFzWmVyb0Zvcm1hdD0oKT0+bnVsbCE9PXYsZC5sYW5ndWFnZURhdGE9cmU9PntpZihyZSl7aWYoZltyZV0pcmV0dXJuIGZbcmVdO3Rocm93IG5ldyBFcnJvcihgVW5rbm93biB0YWcgIiR7cmV9ImApfXJldHVybiBaKCl9LGQucmVnaXN0ZXJMYW5ndWFnZT0ocmUs''@;'; put 'put ''Y2U9ITEpPT57aWYoIWwudmFsaWRhdGVMYW5ndWFnZShyZSkpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGxhbmd1YWdlIGRhdGEiKTtmW3JlLmxhbmd1YWdlVGFnXT1yZSxjZSYmRChyZS5sYW5ndWFnZVRhZyl9LGQuc2V0TGFuZ3VhZ2U9KHJlLGNlPWMubGFuZ3VhZ2VUYWcpPT57aWYoIWZb''@;'; put 'put ''cmVdKXtsZXQgYmU9cmUuc3BsaXQoIi0iKVswXSxFZT1PYmplY3Qua2V5cyhmKS5maW5kKEJlPT5CZS5zcGxpdCgiLSIpWzBdPT09YmUpO3JldHVybiBmW0VlXT92b2lkIEQoRWUpOnZvaWQgRChjZSl9RChyZSl9LGQucmVnaXN0ZXJMYW5ndWFnZShjKSxoPWMubGFuZ3VhZ2VUYWcsbko9ZH12''@;'; put 'put ''YXIgYzRlPXtleHBvcnRzOnt9fTshZnVuY3Rpb24oYyl7IWZ1bmN0aW9uKGwpe3ZhciBhLGQ9L14tPyg/OlxkKyg/OlwuXGQqKT98XC5cZCspKD86ZVsrLV0/XGQrKT8kL2ksaD1NYXRoLmNlaWwsZj1NYXRoLmZsb29yLHY9IltCaWdOdW1iZXIgRXJyb3JdICIsTT12KyJOdW1iZXIgcHJpbWl0''@;'; put 'put ''aXZlIGhhcyBtb3JlIHRoYW4gMTUgc2lnbmlmaWNhbnQgZGlnaXRzOiAiLEQ9MWUxNCxaPTE0LHJlPTkwMDcxOTkyNTQ3NDA5OTEsY2U9WzEsMTAsMTAwLDFlMywxZTQsMWU1LDFlNiwxZTcsMWU4LDFlOSwxZTEwLDFlMTEsMWUxMiwxZTEzXSxiZT0xZTcsRWU9MWU5O2Z1bmN0aW9uIHFlKHRu''@;'; put 'put ''KXt2YXIgTW49MHx0bjtyZXR1cm4gdG4+MHx8dG49PT1Nbj9NbjpNbi0xfWZ1bmN0aW9uIHJ0KHRuKXtmb3IodmFyIE1uLENyLEdyPTEsbXI9dG4ubGVuZ3RoLEduPXRuWzBdKyIiO0dyPG1yOyl7Zm9yKE1uPXRuW0dyKytdKyIiLENyPVotTW4ubGVuZ3RoO0NyLS07TW49IjAiK01uKTtHbis9''@;'; put 'put ''TW59Zm9yKG1yPUduLmxlbmd0aDs0OD09PUduLmNoYXJDb2RlQXQoLS1tcik7KTtyZXR1cm4gR24uc2xpY2UoMCxtcisxfHwxKX1mdW5jdGlvbiBwdCh0bixNbil7dmFyIENyLEdyLG1yPXRuLmMsR249TW4uYyxhaT10bi5zLF9pPU1uLnMsT249dG4uZSx6cj1Nbi5lO2lmKCFhaXx8IV9pKXJl''@;'; put 'put ''dHVybiBudWxsO2lmKEdyPUduJiYhR25bMF0sKENyPW1yJiYhbXJbMF0pfHxHcilyZXR1cm4gQ3I/R3I/MDotX2k6YWk7aWYoYWkhPV9pKXJldHVybiBhaTtpZihDcj1haTwwLEdyPU9uPT16ciwhbXJ8fCFHbilyZXR1cm4gR3I/MDohbXJeQ3I/MTotMTtpZighR3IpcmV0dXJuIE9uPnpyXkNy''@;'; put 'put ''PzE6LTE7Zm9yKF9pPShPbj1tci5sZW5ndGgpPCh6cj1Hbi5sZW5ndGgpP09uOnpyLGFpPTA7YWk8X2k7YWkrKylpZihtclthaV0hPUduW2FpXSlyZXR1cm4gbXJbYWldPkduW2FpXV5Dcj8xOi0xO3JldHVybiBPbj09enI/MDpPbj56cl5Dcj8xOi0xfWZ1bmN0aW9uIGR0KHRuLE1uLENyLEdy''@;'; put 'put ''KXtpZih0bjxNbnx8dG4+Q3J8fHRuIT09Zih0bikpdGhyb3cgRXJyb3IodisoR3J8fCJBcmd1bWVudCIpKygibnVtYmVyIj09dHlwZW9mIHRuP3RuPE1ufHx0bj5Dcj8iIG91dCBvZiByYW5nZTogIjoiIG5vdCBhbiBpbnRlZ2VyOiAiOiIgbm90IGEgcHJpbWl0aXZlIG51bWJlcjogIikrU3Ry''@;'; put 'put ''aW5nKHRuKSl9ZnVuY3Rpb24gSnQodG4pe3ZhciBNbj10bi5jLmxlbmd0aC0xO3JldHVybiBxZSh0bi5lL1opPT1NbiYmdG4uY1tNbl0lMiE9MH1mdW5jdGlvbiB2bih0bixNbil7cmV0dXJuKHRuLmxlbmd0aD4xP3RuLmNoYXJBdCgwKSsiLiIrdG4uc2xpY2UoMSk6dG4pKyhNbjwwPyJlIjoi''@;'; put 'put ''ZSsiKStNbn1mdW5jdGlvbiBDbih0bixNbixDcil7dmFyIEdyLG1yO2lmKE1uPDApe2Zvcihtcj1DcisiLiI7KytNbjttcis9Q3IpO3RuPW1yK3RufWVsc2UgaWYoKytNbj4oR3I9dG4ubGVuZ3RoKSl7Zm9yKG1yPUNyLE1uLT1HcjstLU1uO21yKz1Dcik7dG4rPW1yfWVsc2UgTW48R3ImJih0''@;'; put 'put ''bj10bi5zbGljZSgwLE1uKSsiLiIrdG4uc2xpY2UoTW4pKTtyZXR1cm4gdG59YT1mdW5jdGlvbiBCZSh0bil7dmFyIE1uLENyLEdyLG9uLHluLG1yPUh0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6SHQsdG9TdHJpbmc6bnVsbCx2YWx1ZU9mOm51bGx9LEduPW5ldyBIdCgxKSxhaT0yMCxfaT00''@;'; put 'put ''LE9uPS03LHpyPTIxLEpuPS0xZTcsRHI9MWU3LCRyPSExLHdpPTEsZWE9MCxmYT17cHJlZml4OiIiLGdyb3VwU2l6ZTozLHNlY29uZGFyeUdyb3VwU2l6ZTowLGdyb3VwU2VwYXJhdG9yOiIsIixkZWNpbWFsU2VwYXJhdG9yOiIuIixmcmFjdGlvbkdyb3VwU2l6ZTowLGZyYWN0aW9uR3JvdXBT''@;'; put 'put ''ZXBhcmF0b3I6Ilx4YTAiLHN1ZmZpeDoiIn0sdnQ9IjAxMjM0NTY3ODlhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiIsTnQ9ITA7ZnVuY3Rpb24gSHQob24seW4pe3ZhciBwbixwciwkbixkcixVcixabixzcixOcixNcj10aGlzO2lmKCEoTXIgaW5zdGFuY2VvZiBIdCkpcmV0dXJuIG5ldyBI''@;'; put 'put ''dChvbix5bik7aWYobnVsbD09eW4pe2lmKG9uJiYhMD09PW9uLl9pc0JpZ051bWJlcilyZXR1cm4gTXIucz1vbi5zLHZvaWQoIW9uLmN8fG9uLmU+RHI/TXIuYz1Nci5lPW51bGw6b24uZTxKbj9Nci5jPVtNci5lPTBdOihNci5lPW9uLmUsTXIuYz1vbi5jLnNsaWNlKCkpKTtpZigoWm49Im51''@;'; put 'put ''bWJlciI9PXR5cGVvZiBvbikmJjAqb249PTApe2lmKE1yLnM9MS9vbjwwPyhvbj0tb24sLTEpOjEsb249PT1+fm9uKXtmb3IoZHI9MCxVcj1vbjtVcj49MTA7VXIvPTEwLGRyKyspO3JldHVybiB2b2lkKGRyPkRyP01yLmM9TXIuZT1udWxsOihNci5lPWRyLE1yLmM9W29uXSkpfU5yPVN0cmlu''@;'; put 'put ''Zyhvbil9ZWxzZXtpZighZC50ZXN0KE5yPVN0cmluZyhvbikpKXJldHVybiBHcihNcixOcixabik7TXIucz00NT09TnIuY2hhckNvZGVBdCgwKT8oTnI9TnIuc2xpY2UoMSksLTEpOjF9KGRyPU5yLmluZGV4T2YoIi4iKSk+LTEmJihOcj1Oci5yZXBsYWNlKCIuIiwiIikpLChVcj1Oci5zZWFy''@;'; put 'put ''Y2goL2UvaSkpPjA/KGRyPDAmJihkcj1VciksZHIrPStOci5zbGljZShVcisxKSxOcj1Oci5zdWJzdHJpbmcoMCxVcikpOmRyPDAmJihkcj1Oci5sZW5ndGgpfWVsc2V7aWYoZHQoeW4sMix2dC5sZW5ndGgsIkJhc2UiKSwxMD09eW4mJk50KXJldHVybiBIcihNcj1uZXcgSHQob24pLGFpK01y''@;'; put 'put ''LmUrMSxfaSk7aWYoTnI9U3RyaW5nKG9uKSxabj0ibnVtYmVyIj09dHlwZW9mIG9uKXtpZigwKm9uIT0wKXJldHVybiBHcihNcixOcixabix5bik7aWYoTXIucz0xL29uPDA/KE5yPU5yLnNsaWNlKDEpLC0xKToxLEh0LkRFQlVHJiZOci5yZXBsYWNlKC9eMFwuMCp8XC4vLCIiKS5sZW5ndGg+''@;'; put 'put ''MTUpdGhyb3cgRXJyb3IoTStvbil9ZWxzZSBNci5zPTQ1PT09TnIuY2hhckNvZGVBdCgwKT8oTnI9TnIuc2xpY2UoMSksLTEpOjE7Zm9yKHBuPXZ0LnNsaWNlKDAseW4pLGRyPVVyPTAsc3I9TnIubGVuZ3RoO1VyPHNyO1VyKyspaWYocG4uaW5kZXhPZihwcj1Oci5jaGFyQXQoVXIpKTwwKXtp''@;'; put 'put ''ZigiLiI9PXByKXtpZihVcj5kcil7ZHI9c3I7Y29udGludWV9fWVsc2UgaWYoISRuJiYoTnI9PU5yLnRvVXBwZXJDYXNlKCkmJihOcj1Oci50b0xvd2VyQ2FzZSgpKXx8TnI9PU5yLnRvTG93ZXJDYXNlKCkmJihOcj1Oci50b1VwcGVyQ2FzZSgpKSkpeyRuPSEwLFVyPS0xLGRyPTA7Y29udGlu''@;'; put 'put ''dWV9cmV0dXJuIEdyKE1yLFN0cmluZyhvbiksWm4seW4pfVpuPSExLChkcj0oTnI9Q3IoTnIseW4sMTAsTXIucykpLmluZGV4T2YoIi4iKSk+LTE/TnI9TnIucmVwbGFjZSgiLiIsIiIpOmRyPU5yLmxlbmd0aH1mb3IoVXI9MDs0OD09PU5yLmNoYXJDb2RlQXQoVXIpO1VyKyspO2Zvcihzcj1O''@;'; put 'put ''ci5sZW5ndGg7NDg9PT1Oci5jaGFyQ29kZUF0KC0tc3IpOyk7aWYoTnI9TnIuc2xpY2UoVXIsKytzcikpe2lmKHNyLT1VcixabiYmSHQuREVCVUcmJnNyPjE1JiYob24+cmV8fG9uIT09ZihvbikpKXRocm93IEVycm9yKE0rTXIucypvbik7aWYoKGRyPWRyLVVyLTEpPkRyKU1yLmM9TXIuZT1u''@;'; put 'put ''dWxsO2Vsc2UgaWYoZHI8Sm4pTXIuYz1bTXIuZT0wXTtlbHNle2lmKE1yLmU9ZHIsTXIuYz1bXSxVcj0oZHIrMSklWixkcjwwJiYoVXIrPVopLFVyPHNyKXtmb3IoVXImJk1yLmMucHVzaCgrTnIuc2xpY2UoMCxVcikpLHNyLT1aO1VyPHNyOylNci5jLnB1c2goK05yLnNsaWNlKFVyLFVyKz1a''@;'; put 'put ''KSk7VXI9Wi0oTnI9TnIuc2xpY2UoVXIpKS5sZW5ndGh9ZWxzZSBVci09c3I7Zm9yKDtVci0tO05yKz0iMCIpO01yLmMucHVzaCgrTnIpfX1lbHNlIE1yLmM9W01yLmU9MF19ZnVuY3Rpb24gSG4ob24seW4scG4scHIpe3ZhciAkbixkcixVcixabixzcjtpZihudWxsPT1wbj9wbj1faTpkdChw''@;'; put 'put ''biwwLDgpLCFvbi5jKXJldHVybiBvbi50b1N0cmluZygpO2lmKCRuPW9uLmNbMF0sVXI9b24uZSxudWxsPT15bilzcj1ydChvbi5jKSxzcj0xPT1wcnx8Mj09cHImJihVcjw9T258fFVyPj16cik/dm4oc3IsVXIpOkNuKHNyLFVyLCIwIik7ZWxzZSBpZihkcj0ob249SHIobmV3IEh0KG9uKSx5''@;'; put 'put ''bixwbikpLmUsWm49KHNyPXJ0KG9uLmMpKS5sZW5ndGgsMT09cHJ8fDI9PXByJiYoeW48PWRyfHxkcjw9T24pKXtmb3IoO1puPHluO3NyKz0iMCIsWm4rKyk7c3I9dm4oc3IsZHIpfWVsc2UgaWYoeW4tPVVyLHNyPUNuKHNyLGRyLCIwIiksZHIrMT5abil7aWYoLS15bj4wKWZvcihzcis9Ii4i''@;'; put 'put ''O3luLS07c3IrPSIwIik7fWVsc2UgaWYoKHluKz1kci1abik+MClmb3IoZHIrMT09Wm4mJihzcis9Ii4iKTt5bi0tO3NyKz0iMCIpO3JldHVybiBvbi5zPDAmJiRuPyItIitzcjpzcn1mdW5jdGlvbiB0cihvbix5bil7Zm9yKHZhciBwbixwciwkbj0xLGRyPW5ldyBIdChvblswXSk7JG48b24u''@;'; put 'put ''bGVuZ3RoOyRuKyspKCEocHI9bmV3IEh0KG9uWyRuXSkpLnN8fChwbj1wdChkcixwcikpPT09eW58fDA9PT1wbiYmZHIucz09PXluKSYmKGRyPXByKTtyZXR1cm4gZHJ9ZnVuY3Rpb24gYXIob24seW4scG4pe2Zvcih2YXIgcHI9MSwkbj15bi5sZW5ndGg7IXluWy0tJG5dO3luLnBvcCgpKTtm''@;'; put 'put ''b3IoJG49eW5bMF07JG4+PTEwOyRuLz0xMCxwcisrKTtyZXR1cm4ocG49cHIrcG4qWi0xKT5Ecj9vbi5jPW9uLmU9bnVsbDpwbjxKbj9vbi5jPVtvbi5lPTBdOihvbi5lPXBuLG9uLmM9eW4pLG9ufWZ1bmN0aW9uIEhyKG9uLHluLHBuLHByKXt2YXIgJG4sZHIsVXIsWm4sc3IsTnIsTXIsWnI9''@;'; put 'put ''b24uYyxhYT1jZTtpZihacil7ZTp7Zm9yKCRuPTEsWm49WnJbMF07Wm4+PTEwO1puLz0xMCwkbisrKTtpZigoZHI9eW4tJG4pPDApZHIrPVosc3I9WnJbTnI9MF0sTXI9Zihzci9hYVskbi0oVXI9eW4pLTFdJTEwKTtlbHNlIGlmKChOcj1oKChkcisxKS9aKSk+PVpyLmxlbmd0aCl7aWYoIXBy''@;'; put 'put ''KWJyZWFrIGU7Zm9yKDtaci5sZW5ndGg8PU5yO1pyLnB1c2goMCkpO3NyPU1yPTAsJG49MSxVcj0oZHIlPVopLVorMX1lbHNle2Zvcihzcj1abj1acltOcl0sJG49MTtabj49MTA7Wm4vPTEwLCRuKyspO01yPShVcj0oZHIlPVopLVorJG4pPDA/MDpmKHNyL2FhWyRuLVVyLTFdJTEwKX1pZihw''@;'; put 'put ''cj1wcnx8eW48MHx8bnVsbCE9WnJbTnIrMV18fChVcjwwP3NyOnNyJWFhWyRuLVVyLTFdKSxwcj1wbjw0PyhNcnx8cHIpJiYoMD09cG58fHBuPT0ob24uczwwPzM6MikpOk1yPjV8fDU9PU1yJiYoND09cG58fHByfHw2PT1wbiYmKGRyPjA/VXI+MD9zci9hYVskbi1Vcl06MDpacltOci0xXSkl''@;'; put 'put ''MTAmMXx8cG49PShvbi5zPDA/ODo3KSkseW48MXx8IVpyWzBdKXJldHVybiBaci5sZW5ndGg9MCxwcj8oWnJbMF09YWFbKFotKHluLT1vbi5lKzEpJVopJVpdLG9uLmU9LXlufHwwKTpaclswXT1vbi5lPTAsb247aWYoMD09ZHI/KFpyLmxlbmd0aD1Ocixabj0xLE5yLS0pOihaci5sZW5ndGg9''@;'; put 'put ''TnIrMSxabj1hYVtaLWRyXSxacltOcl09VXI+MD9mKHNyL2FhWyRuLVVyXSVhYVtVcl0pKlpuOjApLHByKWZvcig7Oyl7aWYoMD09TnIpe2Zvcihkcj0xLFVyPVpyWzBdO1VyPj0xMDtVci89MTAsZHIrKyk7Zm9yKFVyPVpyWzBdKz1abixabj0xO1VyPj0xMDtVci89MTAsWm4rKyk7ZHIhPVpu''@;'; put 'put ''JiYob24uZSsrLFpyWzBdPT1EJiYoWnJbMF09MSkpO2JyZWFrfWlmKFpyW05yXSs9Wm4sWnJbTnJdIT1EKWJyZWFrO1pyW05yLS1dPTAsWm49MX1mb3IoZHI9WnIubGVuZ3RoOzA9PT1aclstLWRyXTtaci5wb3AoKSk7fW9uLmU+RHI/b24uYz1vbi5lPW51bGw6b24uZTxKbiYmKG9uLmM9W29u''@;'; put 'put ''LmU9MF0pfXJldHVybiBvbn1mdW5jdGlvbiBxcihvbil7dmFyIHluLHBuPW9uLmU7cmV0dXJuIG51bGw9PT1wbj9vbi50b1N0cmluZygpOih5bj1ydChvbi5jKSx5bj1wbjw9T258fHBuPj16cj92bih5bixwbik6Q24oeW4scG4sIjAiKSxvbi5zPDA/Ii0iK3luOnluKX1yZXR1cm4gSHQuY2xv''@;'; put 'put ''bmU9QmUsSHQuUk9VTkRfVVA9MCxIdC5ST1VORF9ET1dOPTEsSHQuUk9VTkRfQ0VJTD0yLEh0LlJPVU5EX0ZMT09SPTMsSHQuUk9VTkRfSEFMRl9VUD00LEh0LlJPVU5EX0hBTEZfRE9XTj01LEh0LlJPVU5EX0hBTEZfRVZFTj02LEh0LlJPVU5EX0hBTEZfQ0VJTD03LEh0LlJPVU5EX0hBTEZf''@;'; put 'put ''RkxPT1I9OCxIdC5FVUNMSUQ9OSxIdC5jb25maWc9SHQuc2V0PWZ1bmN0aW9uKG9uKXt2YXIgeW4scG47aWYobnVsbCE9b24pe2lmKCJvYmplY3QiIT10eXBlb2Ygb24pdGhyb3cgRXJyb3IodisiT2JqZWN0IGV4cGVjdGVkOiAiK29uKTtpZihvbi5oYXNPd25Qcm9wZXJ0eSh5bj0iREVDSU1B''@;'; put 'put ''TF9QTEFDRVMiKSYmKGR0KHBuPW9uW3luXSwwLEVlLHluKSxhaT1wbiksb24uaGFzT3duUHJvcGVydHkoeW49IlJPVU5ESU5HX01PREUiKSYmKGR0KHBuPW9uW3luXSwwLDgseW4pLF9pPXBuKSxvbi5oYXNPd25Qcm9wZXJ0eSh5bj0iRVhQT05FTlRJQUxfQVQiKSYmKChwbj1vblt5bl0pJiZw''@;'; put 'put ''bi5wb3A/KGR0KHBuWzBdLC1FZSwwLHluKSxkdChwblsxXSwwLEVlLHluKSxPbj1wblswXSx6cj1wblsxXSk6KGR0KHBuLC1FZSxFZSx5biksT249LSh6cj1wbjwwPy1wbjpwbikpKSxvbi5oYXNPd25Qcm9wZXJ0eSh5bj0iUkFOR0UiKSlpZigocG49b25beW5dKSYmcG4ucG9wKWR0KHBuWzBd''@;'; put 'put ''LC1FZSwtMSx5biksZHQocG5bMV0sMSxFZSx5biksSm49cG5bMF0sRHI9cG5bMV07ZWxzZXtpZihkdChwbiwtRWUsRWUseW4pLCFwbil0aHJvdyBFcnJvcih2K3luKyIgY2Fubm90IGJlIHplcm86ICIrcG4pO0puPS0oRHI9cG48MD8tcG46cG4pfWlmKG9uLmhhc093blByb3BlcnR5KHluPSJD''@;'; put 'put ''UllQVE8iKSl7aWYoKHBuPW9uW3luXSkhPT0hIXBuKXRocm93IEVycm9yKHYreW4rIiBub3QgdHJ1ZSBvciBmYWxzZTogIitwbik7aWYocG4pe2lmKCEodHlwZW9mIGNyeXB0bzwidSImJmNyeXB0byYmKGNyeXB0by5nZXRSYW5kb21WYWx1ZXN8fGNyeXB0by5yYW5kb21CeXRlcykpKXRocm93''@;'; put 'put ''ICRyPSFwbixFcnJvcih2KyJjcnlwdG8gdW5hdmFpbGFibGUiKTskcj1wbn1lbHNlICRyPXBufWlmKG9uLmhhc093blByb3BlcnR5KHluPSJNT0RVTE9fTU9ERSIpJiYoZHQocG49b25beW5dLDAsOSx5biksd2k9cG4pLG9uLmhhc093blByb3BlcnR5KHluPSJQT1dfUFJFQ0lTSU9OIikmJihk''@;'; put 'put ''dChwbj1vblt5bl0sMCxFZSx5biksZWE9cG4pLG9uLmhhc093blByb3BlcnR5KHluPSJGT1JNQVQiKSl7aWYoIm9iamVjdCIhPXR5cGVvZihwbj1vblt5bl0pKXRocm93IEVycm9yKHYreW4rIiBub3QgYW4gb2JqZWN0OiAiK3BuKTtmYT1wbn1pZihvbi5oYXNPd25Qcm9wZXJ0eSh5bj0iQUxQ''@;'; put 'put ''SEFCRVQiKSl7aWYoInN0cmluZyIhPXR5cGVvZihwbj1vblt5bl0pfHwvXi4/JHxbK1wtLlxzXXwoLikuKlwxLy50ZXN0KHBuKSl0aHJvdyBFcnJvcih2K3luKyIgaW52YWxpZDogIitwbik7TnQ9IjAxMjM0NTY3ODkiPT1wbi5zbGljZSgwLDEwKSx2dD1wbn19cmV0dXJue0RFQ0lNQUxfUExB''@;'; put 'put ''Q0VTOmFpLFJPVU5ESU5HX01PREU6X2ksRVhQT05FTlRJQUxfQVQ6W09uLHpyXSxSQU5HRTpbSm4sRHJdLENSWVBUTzokcixNT0RVTE9fTU9ERTp3aSxQT1dfUFJFQ0lTSU9OOmVhLEZPUk1BVDpmYSxBTFBIQUJFVDp2dH19LEh0LmlzQmlnTnVtYmVyPWZ1bmN0aW9uKG9uKXtpZighb258fCEw''@;'; put 'put ''IT09b24uX2lzQmlnTnVtYmVyKXJldHVybiExO2lmKCFIdC5ERUJVRylyZXR1cm4hMDt2YXIgeW4scG4scHI9b24uYywkbj1vbi5lLGRyPW9uLnM7ZTppZigiW29iamVjdCBBcnJheV0iPT17fS50b1N0cmluZy5jYWxsKHByKSl7aWYoKDE9PT1kcnx8LTE9PT1kcikmJiRuPj0tRWUmJiRuPD1F''@;'; put 'put ''ZSYmJG49PT1mKCRuKSl7aWYoMD09PXByWzBdKXtpZigwPT09JG4mJjE9PT1wci5sZW5ndGgpcmV0dXJuITA7YnJlYWsgZX1pZigoeW49KCRuKzEpJVopPDEmJih5bis9WiksU3RyaW5nKHByWzBdKS5sZW5ndGg9PXluKXtmb3IoeW49MDt5bjxwci5sZW5ndGg7eW4rKylpZigocG49cHJbeW5d''@;'; put 'put ''KTwwfHxwbj49RHx8cG4hPT1mKHBuKSlicmVhayBlO2lmKDAhPT1wbilyZXR1cm4hMH19fWVsc2UgaWYobnVsbD09PXByJiZudWxsPT09JG4mJihudWxsPT09ZHJ8fDE9PT1kcnx8LTE9PT1kcikpcmV0dXJuITA7dGhyb3cgRXJyb3IodisiSW52YWxpZCBCaWdOdW1iZXI6ICIrb24pfSxIdC5t''@;'; put 'put ''YXhpbXVtPUh0Lm1heD1mdW5jdGlvbigpe3JldHVybiB0cihhcmd1bWVudHMsLTEpfSxIdC5taW5pbXVtPUh0Lm1pbj1mdW5jdGlvbigpe3JldHVybiB0cihhcmd1bWVudHMsMSl9LEh0LnJhbmRvbT0ob249OTAwNzE5OTI1NDc0MDk5Mix5bj1NYXRoLnJhbmRvbSgpKm9uJjIwOTcxNTE/ZnVu''@;'; put 'put ''Y3Rpb24oKXtyZXR1cm4gZihNYXRoLnJhbmRvbSgpKm9uKX06ZnVuY3Rpb24oKXtyZXR1cm4gODM4ODYwOCooMTA3Mzc0MTgyNCpNYXRoLnJhbmRvbSgpfDApKyg4Mzg4NjA4Kk1hdGgucmFuZG9tKCl8MCl9LGZ1bmN0aW9uKHBuKXt2YXIgcHIsJG4sZHIsVXIsWm4sc3I9MCxOcj1bXSxNcj1u''@;'; put 'put ''ZXcgSHQoR24pO2lmKG51bGw9PXBuP3BuPWFpOmR0KHBuLDAsRWUpLFVyPWgocG4vWiksJHIpaWYoY3J5cHRvLmdldFJhbmRvbVZhbHVlcyl7Zm9yKHByPWNyeXB0by5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQzMkFycmF5KFVyKj0yKSk7c3I8VXI7KShabj0xMzEwNzIqcHJbc3JdKyhwcltz''@;'; put 'put ''cisxXT4+PjExKSk+PTllMTU/KCRuPWNyeXB0by5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQzMkFycmF5KDIpKSxwcltzcl09JG5bMF0scHJbc3IrMV09JG5bMV0pOihOci5wdXNoKFpuJTFlMTQpLHNyKz0yKTtzcj1Vci8yfWVsc2V7aWYoIWNyeXB0by5yYW5kb21CeXRlcyl0aHJvdyAkcj0h''@;'; put 'put ''MSxFcnJvcih2KyJjcnlwdG8gdW5hdmFpbGFibGUiKTtmb3IocHI9Y3J5cHRvLnJhbmRvbUJ5dGVzKFVyKj03KTtzcjxVcjspKFpuPTI4MTQ3NDk3NjcxMDY1NiooMzEmcHJbc3JdKSsxMDk5NTExNjI3Nzc2KnByW3NyKzFdKzQyOTQ5NjcyOTYqcHJbc3IrMl0rMTY3NzcyMTYqcHJbc3IrM10r''@;'; put 'put ''KHByW3NyKzRdPDwxNikrKHByW3NyKzVdPDw4KStwcltzcis2XSk+PTllMTU/Y3J5cHRvLnJhbmRvbUJ5dGVzKDcpLmNvcHkocHIsc3IpOihOci5wdXNoKFpuJTFlMTQpLHNyKz03KTtzcj1Vci83fWlmKCEkcilmb3IoO3NyPFVyOykoWm49eW4oKSk8OWUxNSYmKE5yW3NyKytdPVpuJTFlMTQp''@;'; put 'put ''O2ZvcihVcj1OclstLXNyXSxwbiU9WixVciYmcG4mJihOcltzcl09ZihVci8oWm49Y2VbWi1wbl0pKSpabik7MD09PU5yW3NyXTtOci5wb3AoKSxzci0tKTtpZihzcjwwKU5yPVtkcj0wXTtlbHNle2Zvcihkcj0tMTswPT09TnJbMF07TnIuc3BsaWNlKDAsMSksZHItPVopO2Zvcihzcj0xLFpu''@;'; put 'put ''PU5yWzBdO1puPj0xMDtabi89MTAsc3IrKyk7c3I8WiYmKGRyLT1aLXNyKX1yZXR1cm4gTXIuZT1kcixNci5jPU5yLE1yfSksSHQuc3VtPWZ1bmN0aW9uKCl7Zm9yKHZhciBvbj0xLHluPWFyZ3VtZW50cyxwbj1uZXcgSHQoeW5bMF0pO29uPHluLmxlbmd0aDspcG49cG4ucGx1cyh5bltvbisr''@;'; put 'put ''XSk7cmV0dXJuIHBufSxDcj1mdW5jdGlvbigpe3ZhciBvbj0iMDEyMzQ1Njc4OSI7ZnVuY3Rpb24geW4ocG4scHIsJG4sZHIpe2Zvcih2YXIgVXIsc3IsWm49WzBdLE5yPTAsTXI9cG4ubGVuZ3RoO05yPE1yOyl7Zm9yKHNyPVpuLmxlbmd0aDtzci0tO1puW3NyXSo9cHIpO2ZvcihablswXSs9''@;'; put 'put ''ZHIuaW5kZXhPZihwbi5jaGFyQXQoTnIrKykpLFVyPTA7VXI8Wm4ubGVuZ3RoO1VyKyspWm5bVXJdPiRuLTEmJihudWxsPT1abltVcisxXSYmKFpuW1VyKzFdPTApLFpuW1VyKzFdKz1abltVcl0vJG58MCxabltVcl0lPSRuKX1yZXR1cm4gWm4ucmV2ZXJzZSgpfXJldHVybiBmdW5jdGlvbihw''@;'; put 'put ''bixwciwkbixkcixVcil7dmFyIFpuLHNyLE5yLE1yLFpyLGFhLEJhLElvLFpvPXBuLmluZGV4T2YoIi4iKSxwcz1haSxNbz1faTtmb3IoWm8+PTAmJihNcj1lYSxlYT0wLHBuPXBuLnJlcGxhY2UoIi4iLCIiKSxhYT0oSW89bmV3IEh0KHByKSkucG93KHBuLmxlbmd0aC1abyksZWE9TXIsSW8u''@;'; put 'put ''Yz15bihDbihydChhYS5jKSxhYS5lLCIwIiksMTAsJG4sb24pLElvLmU9SW8uYy5sZW5ndGgpLE5yPU1yPShCYT15bihwbixwciwkbixVcj8oWm49dnQsb24pOihabj1vbix2dCkpKS5sZW5ndGg7MD09QmFbLS1Ncl07QmEucG9wKCkpO2lmKCFCYVswXSlyZXR1cm4gWm4uY2hhckF0KDApO2lm''@;'; put 'put ''KFpvPDA/LS1OcjooYWEuYz1CYSxhYS5lPU5yLGFhLnM9ZHIsQmE9KGFhPU1uKGFhLElvLHBzLE1vLCRuKSkuYyxacj1hYS5yLE5yPWFhLmUpLFpvPUJhW3NyPU5yK3BzKzFdLE1yPSRuLzIsWnI9WnJ8fHNyPDB8fG51bGwhPUJhW3NyKzFdLFpyPU1vPDQ/KG51bGwhPVpvfHxacikmJigwPT1N''@;'; put 'put ''b3x8TW89PShhYS5zPDA/MzoyKSk6Wm8+TXJ8fFpvPT1NciYmKDQ9PU1vfHxacnx8Nj09TW8mJjEmQmFbc3ItMV18fE1vPT0oYWEuczwwPzg6NykpLHNyPDF8fCFCYVswXSlwbj1acj9Dbihabi5jaGFyQXQoMSksLXBzLFpuLmNoYXJBdCgwKSk6Wm4uY2hhckF0KDApO2Vsc2V7aWYoQmEubGVu''@;'; put 'put ''Z3RoPXNyLFpyKWZvcigtLSRuOysrQmFbLS1zcl0+JG47KUJhW3NyXT0wLHNyfHwoKytOcixCYT1bMV0uY29uY2F0KEJhKSk7Zm9yKE1yPUJhLmxlbmd0aDshQmFbLS1Ncl07KTtmb3IoWm89MCxwbj0iIjtabzw9TXI7cG4rPVpuLmNoYXJBdChCYVtabysrXSkpO3BuPUNuKHBuLE5yLFpuLmNo''@;'; put 'put ''YXJBdCgwKSl9cmV0dXJuIHBufX0oKSxNbj1mdW5jdGlvbigpe2Z1bmN0aW9uIG9uKHByLCRuLGRyKXt2YXIgVXIsWm4sc3IsTnIsTXI9MCxacj1wci5sZW5ndGgsYWE9JG4lYmUsQmE9JG4vYmV8MDtmb3IocHI9cHIuc2xpY2UoKTtaci0tOylNcj0oKFpuPWFhKihzcj1wcltacl0lYmUpKyhV''@;'; put 'put ''cj1CYSpzcisoTnI9cHJbWnJdL2JlfDApKmFhKSViZSpiZStNcikvZHJ8MCkrKFVyL2JlfDApK0JhKk5yLHByW1pyXT1abiVkcjtyZXR1cm4gTXImJihwcj1bTXJdLmNvbmNhdChwcikpLHByfWZ1bmN0aW9uIHluKHByLCRuLGRyLFVyKXt2YXIgWm4sc3I7aWYoZHIhPVVyKXNyPWRyPlVyPzE6''@;'; put 'put ''LTE7ZWxzZSBmb3IoWm49c3I9MDtabjxkcjtabisrKWlmKHByW1puXSE9JG5bWm5dKXtzcj1wcltabl0+JG5bWm5dPzE6LTE7YnJlYWt9cmV0dXJuIHNyfWZ1bmN0aW9uIHBuKHByLCRuLGRyLFVyKXtmb3IodmFyIFpuPTA7ZHItLTspcHJbZHJdLT1abixwcltkcl09KFpuPXByW2RyXTwkbltk''@;'; put 'put ''cl0/MTowKSpVcitwcltkcl0tJG5bZHJdO2Zvcig7IXByWzBdJiZwci5sZW5ndGg+MTtwci5zcGxpY2UoMCwxKSk7fXJldHVybiBmdW5jdGlvbihwciwkbixkcixVcixabil7dmFyIHNyLE5yLE1yLFpyLGFhLEJhLElvLFpvLHBzLE1vLGhzLG5jLFFvLE0zLGFkLHpzLEpjLHFzPXByLnM9PSRu''@;'; put 'put ''LnM/MTotMSxCbD1wci5jLGVzPSRuLmM7aWYoIShCbCYmQmxbMF0mJmVzJiZlc1swXSkpcmV0dXJuIG5ldyBIdChwci5zJiYkbi5zJiYoQmw/IWVzfHxCbFswXSE9ZXNbMF06ZXMpP0JsJiYwPT1CbFswXXx8IWVzPzAqcXM6cXMvMDpOYU4pO2Zvcihwcz0oWm89bmV3IEh0KHFzKSkuYz1bXSxx''@;'; put 'put ''cz1kcisoTnI9cHIuZS0kbi5lKSsxLFpufHwoWm49RCxOcj1xZShwci5lL1opLXFlKCRuLmUvWikscXM9cXMvWnwwKSxNcj0wO2VzW01yXT09KEJsW01yXXx8MCk7TXIrKyk7aWYoZXNbTXJdPihCbFtNcl18fDApJiZOci0tLHFzPDApcHMucHVzaCgxKSxacj0hMDtlbHNle2ZvcihNMz1CbC5s''@;'; put 'put ''ZW5ndGgsenM9ZXMubGVuZ3RoLE1yPTAscXMrPTIsKGFhPWYoWm4vKGVzWzBdKzEpKSk+MSYmKGVzPW9uKGVzLGFhLFpuKSxCbD1vbihCbCxhYSxabiksenM9ZXMubGVuZ3RoLE0zPUJsLmxlbmd0aCksUW89enMsaHM9KE1vPUJsLnNsaWNlKDAsenMpKS5sZW5ndGg7aHM8enM7TW9baHMrK109''@;'; put 'put ''MCk7SmM9ZXMuc2xpY2UoKSxKYz1bMF0uY29uY2F0KEpjKSxhZD1lc1swXSxlc1sxXT49Wm4vMiYmYWQrKztkb3tpZihhYT0wLChzcj15bihlcyxNbyx6cyxocykpPDApe2lmKG5jPU1vWzBdLHpzIT1ocyYmKG5jPW5jKlpuKyhNb1sxXXx8MCkpLChhYT1mKG5jL2FkKSk+MSlmb3IoYWE+PVpu''@;'; put 'put ''JiYoYWE9Wm4tMSksSW89KEJhPW9uKGVzLGFhLFpuKSkubGVuZ3RoLGhzPU1vLmxlbmd0aDsxPT15bihCYSxNbyxJbyxocyk7KWFhLS0scG4oQmEsenM8SW8/SmM6ZXMsSW8sWm4pLElvPUJhLmxlbmd0aCxzcj0xO2Vsc2UgMD09YWEmJihzcj1hYT0xKSxJbz0oQmE9ZXMuc2xpY2UoKSkubGVu''@;'; put 'put ''Z3RoO2lmKElvPGhzJiYoQmE9WzBdLmNvbmNhdChCYSkpLHBuKE1vLEJhLGhzLFpuKSxocz1Nby5sZW5ndGgsLTE9PXNyKWZvcig7eW4oZXMsTW8senMsaHMpPDE7KWFhKysscG4oTW8senM8aHM/SmM6ZXMsaHMsWm4pLGhzPU1vLmxlbmd0aH1lbHNlIDA9PT1zciYmKGFhKyssTW89WzBdKTtw''@;'; put 'put ''c1tNcisrXT1hYSxNb1swXT9Nb1tocysrXT1CbFtRb118fDA6KE1vPVtCbFtRb11dLGhzPTEpfXdoaWxlKChRbysrPE0zfHxudWxsIT1Nb1swXSkmJnFzLS0pO1pyPW51bGwhPU1vWzBdLHBzWzBdfHxwcy5zcGxpY2UoMCwxKX1pZihabj09RCl7Zm9yKE1yPTEscXM9cHNbMF07cXM+PTEwO3Fz''@;'; put 'put ''Lz0xMCxNcisrKTtIcihabyxkcisoWm8uZT1NcitOcipaLTEpKzEsVXIsWnIpfWVsc2UgWm8uZT1Ocixaby5yPStacjtyZXR1cm4gWm99fSgpLEdyPWZ1bmN0aW9uKCl7dmFyIG9uPS9eKC0/KTAoW3hib10pKD89XHdbXHcuXSokKS9pLHluPS9eKFteLl0rKVwuJC8scG49L15cLihbXi5dKykk''@;'; put 'put ''Lyxwcj0vXi0/KEluZmluaXR5fE5hTikkLywkbj0vXlxzKlwrKD89W1x3Ll0pfF5ccyt8XHMrJC9nO3JldHVybiBmdW5jdGlvbihkcixVcixabixzcil7dmFyIE5yLE1yPVpuP1VyOlVyLnJlcGxhY2UoJG4sIiIpO2lmKHByLnRlc3QoTXIpKWRyLnM9aXNOYU4oTXIpP251bGw6TXI8MD8tMTox''@;'; put 'put ''O2Vsc2V7aWYoIVpuJiYoTXI9TXIucmVwbGFjZShvbixmdW5jdGlvbihacixhYSxCYSl7cmV0dXJuIE5yPSJ4Ij09KEJhPUJhLnRvTG93ZXJDYXNlKCkpPzE2OiJiIj09QmE/Mjo4LHNyJiZzciE9TnI/WnI6YWF9KSxzciYmKE5yPXNyLE1yPU1yLnJlcGxhY2UoeW4sIiQxIikucmVwbGFjZShw''@;'; put 'put ''biwiMC4kMSIpKSxVciE9TXIpKXJldHVybiBuZXcgSHQoTXIsTnIpO2lmKEh0LkRFQlVHKXRocm93IEVycm9yKHYrIk5vdCBhIisoc3I/IiBiYXNlICIrc3I6IiIpKyIgbnVtYmVyOiAiK1VyKTtkci5zPW51bGx9ZHIuYz1kci5lPW51bGx9fSgpLG1yLmFic29sdXRlVmFsdWU9bXIuYWJzPWZ1''@;'; put 'put ''bmN0aW9uKCl7dmFyIG9uPW5ldyBIdCh0aGlzKTtyZXR1cm4gb24uczwwJiYob24ucz0xKSxvbn0sbXIuY29tcGFyZWRUbz1mdW5jdGlvbihvbix5bil7cmV0dXJuIHB0KHRoaXMsbmV3IEh0KG9uLHluKSl9LG1yLmRlY2ltYWxQbGFjZXM9bXIuZHA9ZnVuY3Rpb24ob24seW4pe3ZhciBwbixw''@;'; put 'put ''ciwkbjtpZihudWxsIT1vbilyZXR1cm4gZHQob24sMCxFZSksbnVsbD09eW4/eW49X2k6ZHQoeW4sMCw4KSxIcihuZXcgSHQodGhpcyksb24rdGhpcy5lKzEseW4pO2lmKCEocG49dGhpcy5jKSlyZXR1cm4gbnVsbDtpZihwcj0oKCRuPXBuLmxlbmd0aC0xKS1xZSh0aGlzLmUvWikpKlosJG49''@;'; put 'put ''cG5bJG5dKWZvcig7JG4lMTA9PTA7JG4vPTEwLHByLS0pO3JldHVybiBwcjwwJiYocHI9MCkscHJ9LG1yLmRpdmlkZWRCeT1tci5kaXY9ZnVuY3Rpb24ob24seW4pe3JldHVybiBNbih0aGlzLG5ldyBIdChvbix5biksYWksX2kpfSxtci5kaXZpZGVkVG9JbnRlZ2VyQnk9bXIuaWRpdj1mdW5j''@;'; put 'put ''dGlvbihvbix5bil7cmV0dXJuIE1uKHRoaXMsbmV3IEh0KG9uLHluKSwwLDEpfSxtci5leHBvbmVudGlhdGVkQnk9bXIucG93PWZ1bmN0aW9uKG9uLHluKXt2YXIgcG4scHIsJG4sZHIsWm4sc3IsTnIsTXIsWnI9dGhpcztpZigob249bmV3IEh0KG9uKSkuYyYmIW9uLmlzSW50ZWdlcigpKXRo''@;'; put 'put ''cm93IEVycm9yKHYrIkV4cG9uZW50IG5vdCBhbiBpbnRlZ2VyOiAiK3FyKG9uKSk7aWYobnVsbCE9eW4mJih5bj1uZXcgSHQoeW4pKSxabj1vbi5lPjE0LCFaci5jfHwhWnIuY1swXXx8MT09WnIuY1swXSYmIVpyLmUmJjE9PVpyLmMubGVuZ3RofHwhb24uY3x8IW9uLmNbMF0pcmV0dXJuIE1y''@;'; put 'put ''PW5ldyBIdChNYXRoLnBvdygrcXIoWnIpLFpuP29uLnMqKDItSnQob24pKTorcXIob24pKSkseW4/TXIubW9kKHluKTpNcjtpZihzcj1vbi5zPDAseW4pe2lmKHluLmM/IXluLmNbMF06IXluLnMpcmV0dXJuIG5ldyBIdChOYU4pOyhwcj0hc3ImJlpyLmlzSW50ZWdlcigpJiZ5bi5pc0ludGVn''@;'; put 'put ''ZXIoKSkmJihacj1aci5tb2QoeW4pKX1lbHNle2lmKG9uLmU+OSYmKFpyLmU+MHx8WnIuZTwtMXx8KDA9PVpyLmU/WnIuY1swXT4xfHxabiYmWnIuY1sxXT49MjRlNzpaci5jWzBdPDhlMTN8fFpuJiZaci5jWzBdPD05OTk5OTc1ZTcpKSlyZXR1cm4gZHI9WnIuczwwJiZKdChvbik/LTA6MCxa''@;'; put 'put ''ci5lPi0xJiYoZHI9MS9kciksbmV3IEh0KHNyPzEvZHI6ZHIpO2VhJiYoZHI9aChlYS9aKzIpKX1mb3IoWm4/KHBuPW5ldyBIdCguNSksc3ImJihvbi5zPTEpLE5yPUp0KG9uKSk6TnI9KCRuPU1hdGguYWJzKCtxcihvbikpKSUyLE1yPW5ldyBIdChHbik7Oyl7aWYoTnIpe2lmKCEoTXI9TXIu''@;'; put 'put ''dGltZXMoWnIpKS5jKWJyZWFrO2RyP01yLmMubGVuZ3RoPmRyJiYoTXIuYy5sZW5ndGg9ZHIpOnByJiYoTXI9TXIubW9kKHluKSl9aWYoJG4pe2lmKDA9PT0oJG49Zigkbi8yKSkpYnJlYWs7TnI9JG4lMn1lbHNlIGlmKEhyKG9uPW9uLnRpbWVzKHBuKSxvbi5lKzEsMSksb24uZT4xNClOcj1K''@;'; put 'put ''dChvbik7ZWxzZXtpZigwPT0oJG49K3FyKG9uKSkpYnJlYWs7TnI9JG4lMn1acj1aci50aW1lcyhaciksZHI/WnIuYyYmWnIuYy5sZW5ndGg+ZHImJihaci5jLmxlbmd0aD1kcik6cHImJihacj1aci5tb2QoeW4pKX1yZXR1cm4gcHI/TXI6KHNyJiYoTXI9R24uZGl2KE1yKSkseW4/TXIubW9k''@;'; put 'put ''KHluKTpkcj9IcihNcixlYSxfaSx2b2lkIDApOk1yKX0sbXIuaW50ZWdlclZhbHVlPWZ1bmN0aW9uKG9uKXt2YXIgeW49bmV3IEh0KHRoaXMpO3JldHVybiBudWxsPT1vbj9vbj1faTpkdChvbiwwLDgpLEhyKHluLHluLmUrMSxvbil9LG1yLmlzRXF1YWxUbz1tci5lcT1mdW5jdGlvbihvbix5''@;'; put 'put ''bil7cmV0dXJuIDA9PT1wdCh0aGlzLG5ldyBIdChvbix5bikpfSxtci5pc0Zpbml0ZT1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5jfSxtci5pc0dyZWF0ZXJUaGFuPW1yLmd0PWZ1bmN0aW9uKG9uLHluKXtyZXR1cm4gcHQodGhpcyxuZXcgSHQob24seW4pKT4wfSxtci5pc0dyZWF0ZXJUaGFu''@;'; put 'put ''T3JFcXVhbFRvPW1yLmd0ZT1mdW5jdGlvbihvbix5bil7cmV0dXJuIDE9PT0oeW49cHQodGhpcyxuZXcgSHQob24seW4pKSl8fDA9PT15bn0sbXIuaXNJbnRlZ2VyPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLmMmJnFlKHRoaXMuZS9aKT50aGlzLmMubGVuZ3RoLTJ9LG1yLmlzTGVzc1RoYW49''@;'; put 'put ''bXIubHQ9ZnVuY3Rpb24ob24seW4pe3JldHVybiBwdCh0aGlzLG5ldyBIdChvbix5bikpPDB9LG1yLmlzTGVzc1RoYW5PckVxdWFsVG89bXIubHRlPWZ1bmN0aW9uKG9uLHluKXtyZXR1cm4tMT09PSh5bj1wdCh0aGlzLG5ldyBIdChvbix5bikpKXx8MD09PXlufSxtci5pc05hTj1mdW5jdGlv''@;'; put 'put ''bigpe3JldHVybiF0aGlzLnN9LG1yLmlzTmVnYXRpdmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zPDB9LG1yLmlzUG9zaXRpdmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zPjB9LG1yLmlzWmVybz1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5jJiYwPT10aGlzLmNbMF19LG1yLm1pbnVzPWZ1''@;'; put 'put ''bmN0aW9uKG9uLHluKXt2YXIgcG4scHIsJG4sZHIsVXI9dGhpcyxabj1Vci5zO2lmKHluPShvbj1uZXcgSHQob24seW4pKS5zLCFabnx8IXluKXJldHVybiBuZXcgSHQoTmFOKTtpZihabiE9eW4pcmV0dXJuIG9uLnM9LXluLFVyLnBsdXMob24pO3ZhciBzcj1Vci5lL1osTnI9b24uZS9aLE1y''@;'; put 'put ''PVVyLmMsWnI9b24uYztpZighc3J8fCFOcil7aWYoIU1yfHwhWnIpcmV0dXJuIE1yPyhvbi5zPS15bixvbik6bmV3IEh0KFpyP1VyOk5hTik7aWYoIU1yWzBdfHwhWnJbMF0pcmV0dXJuIFpyWzBdPyhvbi5zPS15bixvbik6bmV3IEh0KE1yWzBdP1VyOjM9PV9pPy0wOjApfWlmKHNyPXFlKHNy''@;'; put 'put ''KSxOcj1xZShOciksTXI9TXIuc2xpY2UoKSxabj1zci1Ocil7Zm9yKChkcj1abjwwKT8oWm49LVpuLCRuPU1yKTooTnI9c3IsJG49WnIpLCRuLnJldmVyc2UoKSx5bj1abjt5bi0tOyRuLnB1c2goMCkpOyRuLnJldmVyc2UoKX1lbHNlIGZvcihwcj0oZHI9KFpuPU1yLmxlbmd0aCk8KHluPVpy''@;'; put 'put ''Lmxlbmd0aCkpP1puOnluLFpuPXluPTA7eW48cHI7eW4rKylpZihNclt5bl0hPVpyW3luXSl7ZHI9TXJbeW5dPFpyW3luXTticmVha31pZihkciYmKCRuPU1yLE1yPVpyLFpyPSRuLG9uLnM9LW9uLnMpLCh5bj0ocHI9WnIubGVuZ3RoKS0ocG49TXIubGVuZ3RoKSk+MClmb3IoO3luLS07TXJb''@;'; put 'put ''cG4rK109MCk7Zm9yKHluPUQtMTtwcj5abjspe2lmKE1yWy0tcHJdPFpyW3ByXSl7Zm9yKHBuPXByO3BuJiYhTXJbLS1wbl07TXJbcG5dPXluKTstLU1yW3BuXSxNcltwcl0rPUR9TXJbcHJdLT1acltwcl19Zm9yKDswPT1NclswXTtNci5zcGxpY2UoMCwxKSwtLU5yKTtyZXR1cm4gTXJbMF0/''@;'; put 'put ''YXIob24sTXIsTnIpOihvbi5zPTM9PV9pPy0xOjEsb24uYz1bb24uZT0wXSxvbil9LG1yLm1vZHVsbz1tci5tb2Q9ZnVuY3Rpb24ob24seW4pe3ZhciBwbixwciwkbj10aGlzO3JldHVybiBvbj1uZXcgSHQob24seW4pLCEkbi5jfHwhb24uc3x8b24uYyYmIW9uLmNbMF0/bmV3IEh0KE5hTik6''@;'; put 'put ''IW9uLmN8fCRuLmMmJiEkbi5jWzBdP25ldyBIdCgkbik6KDk9PXdpPyhwcj1vbi5zLG9uLnM9MSxwbj1NbigkbixvbiwwLDMpLG9uLnM9cHIscG4ucyo9cHIpOnBuPU1uKCRuLG9uLDAsd2kpLCEob249JG4ubWludXMocG4udGltZXMob24pKSkuY1swXSYmMT09d2kmJihvbi5zPSRuLnMpLG9u''@;'; put 'put ''KX0sbXIubXVsdGlwbGllZEJ5PW1yLnRpbWVzPWZ1bmN0aW9uKG9uLHluKXt2YXIgcG4scHIsJG4sZHIsVXIsWm4sc3IsTnIsTXIsWnIsYWEsQmEsSW8sWm8scHMsTW89dGhpcyxocz1Nby5jLG5jPShvbj1uZXcgSHQob24seW4pKS5jO2lmKCEoaHMmJm5jJiZoc1swXSYmbmNbMF0pKXJldHVy''@;'; put 'put ''biFNby5zfHwhb24uc3x8aHMmJiFoc1swXSYmIW5jfHxuYyYmIW5jWzBdJiYhaHM/b24uYz1vbi5lPW9uLnM9bnVsbDoob24ucyo9TW8ucyxocyYmbmM/KG9uLmM9WzBdLG9uLmU9MCk6b24uYz1vbi5lPW51bGwpLG9uO2Zvcihwcj1xZShNby5lL1opK3FlKG9uLmUvWiksb24ucyo9TW8ucywo''@;'; put 'put ''c3I9aHMubGVuZ3RoKTwoWnI9bmMubGVuZ3RoKSYmKElvPWhzLGhzPW5jLG5jPUlvLCRuPXNyLHNyPVpyLFpyPSRuKSwkbj1zcitacixJbz1bXTskbi0tO0lvLnB1c2goMCkpO2Zvcihabz1ELHBzPWJlLCRuPVpyOy0tJG4+PTA7KXtmb3IocG49MCxhYT1uY1skbl0lcHMsQmE9bmNbJG5dL3Bz''@;'; put 'put ''fDAsZHI9JG4rKFVyPXNyKTtkcj4kbjspcG49KChOcj1hYSooTnI9aHNbLS1Vcl0lcHMpKyhabj1CYSpOcisoTXI9aHNbVXJdL3BzfDApKmFhKSVwcypwcytJb1tkcl0rcG4pL1pvfDApKyhabi9wc3wwKStCYSpNcixJb1tkci0tXT1OciVabztJb1tkcl09cG59cmV0dXJuIHBuPysrcHI6SW8u''@;'; put 'put ''c3BsaWNlKDAsMSksYXIob24sSW8scHIpfSxtci5uZWdhdGVkPWZ1bmN0aW9uKCl7dmFyIG9uPW5ldyBIdCh0aGlzKTtyZXR1cm4gb24ucz0tb24uc3x8bnVsbCxvbn0sbXIucGx1cz1mdW5jdGlvbihvbix5bil7dmFyIHBuLHByPXRoaXMsJG49cHIucztpZih5bj0ob249bmV3IEh0KG9uLHlu''@;'; put 'put ''KSkucywhJG58fCF5bilyZXR1cm4gbmV3IEh0KE5hTik7aWYoJG4hPXluKXJldHVybiBvbi5zPS15bixwci5taW51cyhvbik7dmFyIGRyPXByLmUvWixVcj1vbi5lL1osWm49cHIuYyxzcj1vbi5jO2lmKCFkcnx8IVVyKXtpZighWm58fCFzcilyZXR1cm4gbmV3IEh0KCRuLzApO2lmKCFablsw''@;'; put 'put ''XXx8IXNyWzBdKXJldHVybiBzclswXT9vbjpuZXcgSHQoWm5bMF0/cHI6MCokbil9aWYoZHI9cWUoZHIpLFVyPXFlKFVyKSxabj1abi5zbGljZSgpLCRuPWRyLVVyKXtmb3IoJG4+MD8oVXI9ZHIscG49c3IpOigkbj0tJG4scG49Wm4pLHBuLnJldmVyc2UoKTskbi0tO3BuLnB1c2goMCkpO3Bu''@;'; put 'put ''LnJldmVyc2UoKX1mb3IoKCRuPVpuLmxlbmd0aCktKHluPXNyLmxlbmd0aCk8MCYmKHBuPXNyLHNyPVpuLFpuPXBuLHluPSRuKSwkbj0wO3luOykkbj0oWm5bLS15bl09Wm5beW5dK3NyW3luXSskbikvRHwwLFpuW3luXT1EPT09Wm5beW5dPzA6Wm5beW5dJUQ7cmV0dXJuICRuJiYoWm49WyRu''@;'; put 'put ''XS5jb25jYXQoWm4pLCsrVXIpLGFyKG9uLFpuLFVyKX0sbXIucHJlY2lzaW9uPW1yLnNkPWZ1bmN0aW9uKG9uLHluKXt2YXIgcG4scHIsJG47aWYobnVsbCE9b24mJm9uIT09ISFvbilyZXR1cm4gZHQob24sMSxFZSksbnVsbD09eW4/eW49X2k6ZHQoeW4sMCw4KSxIcihuZXcgSHQodGhpcyks''@;'; put 'put ''b24seW4pO2lmKCEocG49dGhpcy5jKSlyZXR1cm4gbnVsbDtpZihwcj0oJG49cG4ubGVuZ3RoLTEpKlorMSwkbj1wblskbl0pe2Zvcig7JG4lMTA9PTA7JG4vPTEwLHByLS0pO2Zvcigkbj1wblswXTskbj49MTA7JG4vPTEwLHByKyspO31yZXR1cm4gb24mJnRoaXMuZSsxPnByJiYocHI9dGhp''@;'; put 'put ''cy5lKzEpLHByfSxtci5zaGlmdGVkQnk9ZnVuY3Rpb24ob24pe3JldHVybiBkdChvbiwtcmUscmUpLHRoaXMudGltZXMoIjFlIitvbil9LG1yLnNxdWFyZVJvb3Q9bXIuc3FydD1mdW5jdGlvbigpe3ZhciBvbix5bixwbixwciwkbixkcj10aGlzLFVyPWRyLmMsWm49ZHIucyxzcj1kci5lLE5y''@;'; put 'put ''PWFpKzQsTXI9bmV3IEh0KCIwLjUiKTtpZigxIT09Wm58fCFVcnx8IVVyWzBdKXJldHVybiBuZXcgSHQoIVpufHxabjwwJiYoIVVyfHxVclswXSk/TmFOOlVyP2RyOjEvMCk7aWYoMD09KFpuPU1hdGguc3FydCgrcXIoZHIpKSl8fFpuPT0xLzA/KCgoeW49cnQoVXIpKS5sZW5ndGgrc3IpJTI9''@;'; put 'put ''PTAmJih5bis9IjAiKSxabj1NYXRoLnNxcnQoK3luKSxzcj1xZSgoc3IrMSkvMiktKHNyPDB8fHNyJTIpLHBuPW5ldyBIdCh5bj1abj09MS8wPyI1ZSIrc3I6KHluPVpuLnRvRXhwb25lbnRpYWwoKSkuc2xpY2UoMCx5bi5pbmRleE9mKCJlIikrMSkrc3IpKTpwbj1uZXcgSHQoWm4rIiIpLHBu''@;'; put 'put ''LmNbMF0pZm9yKChabj0oc3I9cG4uZSkrTnIpPDMmJihabj0wKTs7KWlmKHBuPU1yLnRpbWVzKCgkbj1wbikucGx1cyhNbihkciwkbixOciwxKSkpLHJ0KCRuLmMpLnNsaWNlKDAsWm4pPT09KHluPXJ0KHBuLmMpKS5zbGljZSgwLFpuKSl7aWYocG4uZTxzciYmLS1abiwiOTk5OSIhPSh5bj15''@;'; put 'put ''bi5zbGljZShabi0zLFpuKzEpKSYmKHByfHwiNDk5OSIhPXluKSl7KCEreW58fCEreW4uc2xpY2UoMSkmJiI1Ij09eW4uY2hhckF0KDApKSYmKEhyKHBuLHBuLmUrYWkrMiwxKSxvbj0hcG4udGltZXMocG4pLmVxKGRyKSk7YnJlYWt9aWYoIXByJiYoSHIoJG4sJG4uZSthaSsyLDApLCRuLnRp''@;'; put 'put ''bWVzKCRuKS5lcShkcikpKXtwbj0kbjticmVha31Ocis9NCxabis9NCxwcj0xfXJldHVybiBIcihwbixwbi5lK2FpKzEsX2ksb24pfSxtci50b0V4cG9uZW50aWFsPWZ1bmN0aW9uKG9uLHluKXtyZXR1cm4gbnVsbCE9b24mJihkdChvbiwwLEVlKSxvbisrKSxIbih0aGlzLG9uLHluLDEpfSxt''@;'; put 'put ''ci50b0ZpeGVkPWZ1bmN0aW9uKG9uLHluKXtyZXR1cm4gbnVsbCE9b24mJihkdChvbiwwLEVlKSxvbj1vbit0aGlzLmUrMSksSG4odGhpcyxvbix5bil9LG1yLnRvRm9ybWF0PWZ1bmN0aW9uKG9uLHluLHBuKXt2YXIgcHI7aWYobnVsbD09cG4pbnVsbCE9b24mJnluJiYib2JqZWN0Ij09dHlw''@;'; put 'put ''ZW9mIHluPyhwbj15bix5bj1udWxsKTpvbiYmIm9iamVjdCI9PXR5cGVvZiBvbj8ocG49b24sb249eW49bnVsbCk6cG49ZmE7ZWxzZSBpZigib2JqZWN0IiE9dHlwZW9mIHBuKXRocm93IEVycm9yKHYrIkFyZ3VtZW50IG5vdCBhbiBvYmplY3Q6ICIrcG4pO2lmKHByPXRoaXMudG9GaXhlZChv''@;'; put 'put ''bix5biksdGhpcy5jKXt2YXIgZHIsVXI9cHIuc3BsaXQoIi4iKSxabj0rcG4uZ3JvdXBTaXplLHNyPStwbi5zZWNvbmRhcnlHcm91cFNpemUsTnI9cG4uZ3JvdXBTZXBhcmF0b3J8fCIiLE1yPVVyWzBdLFpyPVVyWzFdLGFhPXRoaXMuczwwLEJhPWFhP01yLnNsaWNlKDEpOk1yLElvPUJhLmxl''@;'; put 'put ''bmd0aDtpZihzciYmKGRyPVpuLFpuPXNyLHNyPWRyLElvLT1kciksWm4+MCYmSW8+MCl7Zm9yKE1yPUJhLnN1YnN0cigwLGRyPUlvJVpufHxabik7ZHI8SW87ZHIrPVpuKU1yKz1OcitCYS5zdWJzdHIoZHIsWm4pO3NyPjAmJihNcis9TnIrQmEuc2xpY2UoZHIpKSxhYSYmKE1yPSItIitNcil9''@;'; put 'put ''cHI9WnI/TXIrKHBuLmRlY2ltYWxTZXBhcmF0b3J8fCIiKSsoKHNyPStwbi5mcmFjdGlvbkdyb3VwU2l6ZSk/WnIucmVwbGFjZShuZXcgUmVnRXhwKCJcXGR7IitzcisifVxcQiIsImciKSwiJCYiKyhwbi5mcmFjdGlvbkdyb3VwU2VwYXJhdG9yfHwiIikpOlpyKTpNcn1yZXR1cm4ocG4ucHJl''@;'; put 'put ''Zml4fHwiIikrcHIrKHBuLnN1ZmZpeHx8IiIpfSxtci50b0ZyYWN0aW9uPWZ1bmN0aW9uKG9uKXt2YXIgeW4scG4scHIsJG4sZHIsVXIsWm4sc3IsTnIsTXIsWnIsYWEsQmE9dGhpcyxJbz1CYS5jO2lmKG51bGwhPW9uJiYoIShabj1uZXcgSHQob24pKS5pc0ludGVnZXIoKSYmKFpuLmN8fDEh''@;'; put 'put ''PT1abi5zKXx8Wm4ubHQoR24pKSl0aHJvdyBFcnJvcih2KyJBcmd1bWVudCAiKyhabi5pc0ludGVnZXIoKT8ib3V0IG9mIHJhbmdlOiAiOiJub3QgYW4gaW50ZWdlcjogIikrcXIoWm4pKTtpZighSW8pcmV0dXJuIG5ldyBIdChCYSk7Zm9yKHluPW5ldyBIdChHbiksTnI9cG49bmV3IEh0KEdu''@;'; put 'put ''KSxwcj1zcj1uZXcgSHQoR24pLGFhPXJ0KElvKSxkcj15bi5lPWFhLmxlbmd0aC1CYS5lLTEseW4uY1swXT1jZVsoVXI9ZHIlWik8MD9aK1VyOlVyXSxvbj0hb258fFpuLmNvbXBhcmVkVG8oeW4pPjA/ZHI+MD95bjpOcjpabixVcj1EcixEcj0xLzAsWm49bmV3IEh0KGFhKSxzci5jWzBdPTA7''@;'; put 'put ''TXI9TW4oWm4seW4sMCwxKSwxIT0oJG49cG4ucGx1cyhNci50aW1lcyhwcikpKS5jb21wYXJlZFRvKG9uKTspcG49cHIscHI9JG4sTnI9c3IucGx1cyhNci50aW1lcygkbj1OcikpLHNyPSRuLHluPVpuLm1pbnVzKE1yLnRpbWVzKCRuPXluKSksWm49JG47cmV0dXJuICRuPU1uKG9uLm1pbnVz''@;'; put 'put ''KHBuKSxwciwwLDEpLHNyPXNyLnBsdXMoJG4udGltZXMoTnIpKSxwbj1wbi5wbHVzKCRuLnRpbWVzKHByKSksc3Iucz1Oci5zPUJhLnMsWnI9TW4oTnIscHIsZHIqPTIsX2kpLm1pbnVzKEJhKS5hYnMoKS5jb21wYXJlZFRvKE1uKHNyLHBuLGRyLF9pKS5taW51cyhCYSkuYWJzKCkpPDE/W05y''@;'; put 'put ''LHByXTpbc3IscG5dLERyPVVyLFpyfSxtci50b051bWJlcj1mdW5jdGlvbigpe3JldHVybitxcih0aGlzKX0sbXIudG9QcmVjaXNpb249ZnVuY3Rpb24ob24seW4pe3JldHVybiBudWxsIT1vbiYmZHQob24sMSxFZSksSG4odGhpcyxvbix5biwyKX0sbXIudG9TdHJpbmc9ZnVuY3Rpb24ob24p''@;'; put 'put ''e3ZhciB5bixwbj10aGlzLHByPXBuLnMsJG49cG4uZTtyZXR1cm4gbnVsbD09PSRuP3ByPyh5bj0iSW5maW5pdHkiLHByPDAmJih5bj0iLSIreW4pKTp5bj0iTmFOIjoobnVsbD09b24/eW49JG48PU9ufHwkbj49enI/dm4ocnQocG4uYyksJG4pOkNuKHJ0KHBuLmMpLCRuLCIwIik6MTA9PT1v''@;'; put 'put ''biYmTnQ/eW49Q24ocnQoKHBuPUhyKG5ldyBIdChwbiksYWkrJG4rMSxfaSkpLmMpLHBuLmUsIjAiKTooZHQob24sMix2dC5sZW5ndGgsIkJhc2UiKSx5bj1DcihDbihydChwbi5jKSwkbiwiMCIpLDEwLG9uLHByLCEwKSkscHI8MCYmcG4uY1swXSYmKHluPSItIit5bikpLHlufSxtci52YWx1''@;'; put 'put ''ZU9mPW1yLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiBxcih0aGlzKX0sbXIuX2lzQmlnTnVtYmVyPSEwLG51bGwhPXRuJiZIdC5zZXQodG4pLEh0fSgpLGEuZGVmYXVsdD1hLkJpZ051bWJlcj1hLGMuZXhwb3J0cz9jLmV4cG9ydHM9YToobHx8KGw9dHlwZW9mIHNlbGY8InUiJiZzZWxmP3Nl''@;'; put 'put ''bGY6d2luZG93KSxsLkJpZ051bWJlcj1hKX0oR2F0KX0oYzRlKTt2YXIgdTRlPWM0ZS5leHBvcnRzO2NvbnN0IGYzPXJKKCksZ290PWVKKCksbW90PXRKLHZvdD11NGUsVzA9e3RyaWxsaW9uOk1hdGgucG93KDEwLDEyKSxiaWxsaW9uOk1hdGgucG93KDEwLDkpLG1pbGxpb246TWF0aC5wb3co''@;'; put 'put ''MTAsNiksdGhvdXNhbmQ6TWF0aC5wb3coMTAsMyl9LHNUPXt0b3RhbExlbmd0aDowLGNoYXJhY3RlcmlzdGljOjAsZm9yY2VBdmVyYWdlOiExLGF2ZXJhZ2U6ITEsbWFudGlzc2E6LTEsb3B0aW9uYWxNYW50aXNzYTohMCx0aG91c2FuZFNlcGFyYXRlZDohMSxzcGFjZVNlcGFyYXRlZDohMSxu''@;'; put 'put ''ZWdhdGl2ZToic2lnbiIsZm9yY2VTaWduOiExLHJvdW5kaW5nRnVuY3Rpb246TWF0aC5yb3VuZCxzcGFjZVNlcGFyYXRlZEFiYnJldmlhdGlvbjohMX0se2JpbmFyeVN1ZmZpeGVzOmQ0ZSxkZWNpbWFsU3VmZml4ZXM6WVB9PWYzLmN1cnJlbnRCeXRlcygpLGlKPXtnZW5lcmFsOntzY2FsZTox''@;'; put 'put ''MDI0LHN1ZmZpeGVzOllQLG1hcmtlcjoiYmQifSxiaW5hcnk6e3NjYWxlOjEwMjQsc3VmZml4ZXM6ZDRlLG1hcmtlcjoiYiJ9LGRlY2ltYWw6e3NjYWxlOjFlMyxzdWZmaXhlczpZUCxtYXJrZXI6ImQifX07ZnVuY3Rpb24gR1AoYyxsLGEpe2xldCBkPWxbMF0saD1NYXRoLmFicyhjKTtpZiho''@;'; put 'put ''Pj1hKXtmb3IobGV0IGY9MTtmPGwubGVuZ3RoOysrZil7bGV0IHY9TWF0aC5wb3coYSxmKSxNPU1hdGgucG93KGEsZisxKTtpZihoPj12JiZoPE0pe2Q9bFtmXSxjLz12O2JyZWFrfX1kPT09bFswXSYmKGMvPU1hdGgucG93KGEsbC5sZW5ndGgtMSksZD1sW2wubGVuZ3RoLTFdKX1yZXR1cm57''@;'; put 'put ''dmFsdWU6YyxzdWZmaXg6ZH19ZnVuY3Rpb24gJFAoYyl7bGV0IGw9IiI7Zm9yKGxldCBhPTA7YTxjO2ErKylsKz0iMCI7cmV0dXJuIGx9ZnVuY3Rpb24gbFQoe2luc3RhbmNlOmMscHJvdmlkZWRGb3JtYXQ6bCxzdGF0ZTphPWYzLGRlY2ltYWxTZXBhcmF0b3I6ZCxkZWZhdWx0czpoPWEuY3Vy''@;'; put 'put ''cmVudERlZmF1bHRzKCl9KXtsZXQgZj1jLl92YWx1ZTtpZigwPT09ZiYmYS5oYXNaZXJvRm9ybWF0KCkpcmV0dXJuIGEuZ2V0WmVyb0Zvcm1hdCgpO2lmKCFpc0Zpbml0ZShmKSlyZXR1cm4gZi50b1N0cmluZygpO2xldCB2PU9iamVjdC5hc3NpZ24oe30sc1QsaCxsKSxNPXYudG90YWxMZW5n''@;'; put 'put ''dGgsRD1NPzA6di5jaGFyYWN0ZXJpc3RpYyxaPXYub3B0aW9uYWxDaGFyYWN0ZXJpc3RpYyxyZT12LmZvcmNlQXZlcmFnZSxiZT0hIU18fCEhcmV8fHYuYXZlcmFnZSxFZT1NPy0xOmJlJiZ2b2lkIDA9PT1sLm1hbnRpc3NhPzA6di5tYW50aXNzYSxCZT0hTSYmKHZvaWQgMD09PWwub3B0aW9u''@;'; put 'put ''YWxNYW50aXNzYT8tMT09PUVlOnYub3B0aW9uYWxNYW50aXNzYSkscWU9di50cmltTWFudGlzc2EscnQ9di50aG91c2FuZFNlcGFyYXRlZCxwdD12LnNwYWNlU2VwYXJhdGVkLGR0PXYubmVnYXRpdmUsSnQ9di5mb3JjZVNpZ24sdm49di5leHBvbmVudGlhbCxDbj12LnJvdW5kaW5nRnVuY3Rp''@;'; put 'put ''b24sdG49IiI7aWYoYmUpe2xldCBDcj1mdW5jdGlvbiBBb3Qoe3ZhbHVlOmMsZm9yY2VBdmVyYWdlOmwsbG93UHJlY2lzaW9uOmE9ITAsYWJicmV2aWF0aW9uczpkLHNwYWNlU2VwYXJhdGVkOmg9ITEsdG90YWxMZW5ndGg6Zj0wLHJvdW5kaW5nRnVuY3Rpb246dj1NYXRoLnJvdW5kfSl7bGV0''@;'; put 'put ''IE09IiIsRD1NYXRoLmFicyhjKSxaPS0xO2lmKGwmJmRbbF0mJlcwW2xdPyhNPWRbbF0sYy89VzBbbF0pOkQ+PVcwLnRyaWxsaW9ufHxhJiYxPT09dihEL1cwLnRyaWxsaW9uKT8oTT1kLnRyaWxsaW9uLGMvPVcwLnRyaWxsaW9uKTpEPFcwLnRyaWxsaW9uJiZEPj1XMC5iaWxsaW9ufHxhJiYx''@;'; put 'put ''PT09dihEL1cwLmJpbGxpb24pPyhNPWQuYmlsbGlvbixjLz1XMC5iaWxsaW9uKTpEPFcwLmJpbGxpb24mJkQ+PVcwLm1pbGxpb258fGEmJjE9PT12KEQvVzAubWlsbGlvbik/KE09ZC5taWxsaW9uLGMvPVcwLm1pbGxpb24pOihEPFcwLm1pbGxpb24mJkQ+PVcwLnRob3VzYW5kfHxhJiYxPT09''@;'; put 'put ''dihEL1cwLnRob3VzYW5kKSkmJihNPWQudGhvdXNhbmQsYy89VzAudGhvdXNhbmQpLE0mJihNPShoPyIgIjoiIikrTSksZil7bGV0IGNlPWM8MCxiZT1jLnRvU3RyaW5nKCkuc3BsaXQoIi4iKVswXTtaPU1hdGgubWF4KGYtKGNlP2JlLmxlbmd0aC0xOmJlLmxlbmd0aCksMCl9cmV0dXJue3Zh''@;'; put 'put ''bHVlOmMsYWJicmV2aWF0aW9uOk0sbWFudGlzc2FQcmVjaXNpb246Wn19KHt2YWx1ZTpmLGZvcmNlQXZlcmFnZTpyZSxsb3dQcmVjaXNpb246di5sb3dQcmVjaXNpb24sYWJicmV2aWF0aW9uczphLmN1cnJlbnRBYmJyZXZpYXRpb25zKCksc3BhY2VTZXBhcmF0ZWQ6cHQscm91bmRpbmdGdW5j''@;'; put 'put ''dGlvbjpDbix0b3RhbExlbmd0aDpNfSk7Zj1Dci52YWx1ZSx0bis9Q3IuYWJicmV2aWF0aW9uLE0mJihFZT1Dci5tYW50aXNzYVByZWNpc2lvbil9aWYodm4pe2xldCBDcj1mdW5jdGlvbiBrb3Qoe3ZhbHVlOmMsY2hhcmFjdGVyaXN0aWNQcmVjaXNpb246bH0pe2xldFthLGRdPWMudG9FeHBv''@;'; put 'put ''bmVudGlhbCgpLnNwbGl0KCJlIiksaD0rYTtyZXR1cm4gbD8oMTxsJiYoaCo9TWF0aC5wb3coMTAsbC0xKSxkPStkLShsLTEpLGQ9ZD49MD9gKyR7ZH1gOmQpLHt2YWx1ZTpoLGFiYnJldmlhdGlvbjpgZSR7ZH1gfSk6e3ZhbHVlOmgsYWJicmV2aWF0aW9uOmBlJHtkfWB9fSh7dmFsdWU6Zixj''@;'; put 'put ''aGFyYWN0ZXJpc3RpY1ByZWNpc2lvbjpEfSk7Zj1Dci52YWx1ZSx0bj1Dci5hYmJyZXZpYXRpb24rdG59bGV0IE1uPWZ1bmN0aW9uIFJvdChjLGwsYSxkLGgsZil7aWYoLTE9PT1kKXJldHVybiBjO2xldCB2PWZ1bmN0aW9uIElvdChjLGwsYT1NYXRoLnJvdW5kKXtyZXR1cm4tMSE9PWMudG9T''@;'; put 'put ''dHJpbmcoKS5pbmRleE9mKCJlIik/ZnVuY3Rpb24gRG90KGMsbCl7bGV0IGE9Yy50b1N0cmluZygpLFtkLGhdPWEuc3BsaXQoImUiKSxbZix2PSIiXT1kLnNwbGl0KCIuIik7aWYoK2g+MClhPWYrdiskUChoLXYubGVuZ3RoKTtlbHNle2xldCBNPSIuIjtNPStmPDA/YC0wJHtNfWA6YDAke019''@;'; put 'put ''YDtsZXQgRD0oJFAoLWgtMSkrTWF0aC5hYnMoZikrdikuc3Vic3RyKDAsbCk7RC5sZW5ndGg8bCYmKEQrPSRQKGwtRC5sZW5ndGgpKSxhPU0rRH1yZXR1cm4raD4wJiZsPjAmJihhKz1gLiR7JFAobCl9YCksYX0oYyxsKTpuZXcgdm90KGEoK2Ake2N9ZSske2x9YCkvTWF0aC5wb3coMTAsbCkp''@;'; put 'put ''LnRvRml4ZWQobCl9KGwsZCxmKSxbTSxEPSIiXT12LnRvU3RyaW5nKCkuc3BsaXQoIi4iKTtpZihELm1hdGNoKC9eMCskLykmJihhfHxoKSlyZXR1cm4gTTtsZXQgWj1ELm1hdGNoKC8wKyQvKTtyZXR1cm4gaCYmWj9gJHtNfS4ke0QudG9TdHJpbmcoKS5zbGljZSgwLFouaW5kZXgpfWA6di50''@;'; put 'put ''b1N0cmluZygpfShmLnRvU3RyaW5nKCksZixCZSxFZSxxZSxDbik7cmV0dXJuIE1uPWZ1bmN0aW9uIExvdChjLGwsYSxkKXtsZXQgaD1jLFtmLHZdPWgudG9TdHJpbmcoKS5zcGxpdCgiLiIpO2lmKGYubWF0Y2goL14tPzAkLykmJmEpcmV0dXJuIHY/YCR7Zi5yZXBsYWNlKCIwIiwiIil9LiR7''@;'; put 'put ''dn1gOmYucmVwbGFjZSgiMCIsIiIpO2NvbnN0IE09bDwwJiYwPT09Zi5pbmRleE9mKCItIik7aWYoTSYmKGY9Zi5zbGljZSgxKSxoPWguc2xpY2UoMSkpLGYubGVuZ3RoPGQpe2xldCBEPWQtZi5sZW5ndGg7Zm9yKGxldCBaPTA7WjxEO1orKyloPWAwJHtofWB9cmV0dXJuIE0mJihoPWAtJHto''@;'; put 'put ''fWApLGgudG9TdHJpbmcoKX0oTW4sZixaLEQpLE1uPWZ1bmN0aW9uIFBvdChjLGwsYSxkLGgpe2xldCBmPWQuY3VycmVudERlbGltaXRlcnMoKSx2PWYudGhvdXNhbmRzO2g9aHx8Zi5kZWNpbWFsO2xldCBNPWYudGhvdXNhbmRzU2l6ZXx8MyxEPWMudG9TdHJpbmcoKSxaPUQuc3BsaXQoIi4i''@;'; put 'put ''KVswXSxyZT1ELnNwbGl0KCIuIilbMV07Y29uc3QgY2U9bDwwJiYwPT09Wi5pbmRleE9mKCItIik7cmV0dXJuIGEmJihjZSYmKFo9Wi5zbGljZSgxKSksZnVuY3Rpb24gT290KGMsbCl7bGV0IGE9W10sZD0wO2ZvcihsZXQgaD1jO2g+MDtoLS0pZD09PWwmJihhLnVuc2hpZnQoaCksZD0wKSxk''@;'; put 'put ''Kys7cmV0dXJuIGF9KFoubGVuZ3RoLE0pLmZvckVhY2goKEVlLEJlKT0+e1o9Wi5zbGljZSgwLEVlK0JlKSt2K1ouc2xpY2UoRWUrQmUpfSksY2UmJihaPWAtJHtafWApKSxEPXJlP1oraCtyZTpaLER9KE1uLGYscnQsYSxkKSwoYmV8fHZuKSYmKE1uPWZ1bmN0aW9uIEZvdChjLGwpe3JldHVy''@;'; put 'put ''biBjK2x9KE1uLHRuKSksKEp0fHxmPDApJiYoTW49ZnVuY3Rpb24gSG90KGMsbCxhKXtyZXR1cm4gMD09PWw/YzowPT0rYz9jLnJlcGxhY2UoIi0iLCIiKTpsPjA/YCske2N9YDoic2lnbiI9PT1hP2M6YCgke2MucmVwbGFjZSgiLSIsIiIpfSlgfShNbixmLGR0KSksTW59ZnVuY3Rpb24gT18o''@;'; put 'put ''YyxsKXtpZighYylyZXR1cm4gbDtsZXQgYT1PYmplY3Qua2V5cyhjKTtyZXR1cm4gMT09PWEubGVuZ3RoJiYib3V0cHV0Ij09PWFbMF0/bDpjfWNvbnN0IERnPXU0ZTtmdW5jdGlvbiBoNGUoYyxsLGEpe2xldCBkPW5ldyBEZyhjLl92YWx1ZSksaD1sO3JldHVybiBhLmlzTnVtYnJvKGwpJiYo''@;'; put 'put ''aD1sLl92YWx1ZSksaD1uZXcgRGcoaCksYy5fdmFsdWU9ZC5taW51cyhoKS50b051bWJlcigpLGN9Y29uc3QgVnA9ckooKSwkb3Q9ZUooKSxLb3Q9KGM9Pih7bG9hZExhbmd1YWdlc0luTm9kZTpsPT5mdW5jdGlvbiBmb3QoYyxsKXtjLmZvckVhY2goYT0+e2xldCBkO3RyeXtkPWZ1bmN0aW9u''@;'; put 'put ''IGhvdChjKXt0aHJvdyBuZXcgRXJyb3IoJ0NvdWxkIG5vdCBkeW5hbWljYWxseSByZXF1aXJlICInK2MrJyIuIFBsZWFzZSBjb25maWd1cmUgdGhlIGR5bmFtaWNSZXF1aXJlVGFyZ2V0cyBvci9hbmQgaWdub3JlRHluYW1pY1JlcXVpcmVzIG9wdGlvbiBvZiBAcm9sbHVwL3BsdWdpbi1jb21t''@;'; put 'put ''b25qcyBhcHByb3ByaWF0ZWx5IGZvciB0aGlzIHJlcXVpcmUgY2FsbCB0byB3b3JrLicpfShgLi4vbGFuZ3VhZ2VzLyR7YX1gKX1jYXRjaHtjb25zb2xlLmVycm9yKGBVbmFibGUgdG8gbG9hZCAiJHthfSIuIE5vIG1hdGNoaW5nIGxhbmd1YWdlIGZpbGUgZm91bmQuYCl9ZCYmbC5yZWdpc3Rl''@;'; put 'put ''ckxhbmd1YWdlKGQpfSl9KGwsYyl9KSkoY3UpLHFvdD1vNGUoKTtsZXQgczk9KGM9Pih7Zm9ybWF0OiguLi5sKT0+ZnVuY3Rpb24gYm90KGMsbD17fSxhKXtpZigic3RyaW5nIj09dHlwZW9mIGwmJihsPW1vdC5wYXJzZUZvcm1hdChsKSksIWdvdC52YWxpZGF0ZUZvcm1hdChsKSlyZXR1cm4i''@;'; put 'put ''RVJST1I6IGludmFsaWQgZm9ybWF0IjtsZXQgaD1sLnByZWZpeHx8IiIsZj1sLnBvc3RmaXh8fCIiLHY9ZnVuY3Rpb24geW90KGMsbCxhKXtzd2l0Y2gobC5vdXRwdXQpe2Nhc2UiY3VycmVuY3kiOnJldHVybiBmdW5jdGlvbiBUb3QoYyxsLGEpe2NvbnN0IGQ9YS5jdXJyZW50Q3VycmVuY3ko''@;'; put 'put ''KTtsZXQgdixoPU9iamVjdC5hc3NpZ24oe30sbCksZj1PYmplY3QuYXNzaWduKHt9LHNULGgpLE09IiIsRD0hIWYudG90YWxMZW5ndGh8fCEhZi5mb3JjZUF2ZXJhZ2V8fGYuYXZlcmFnZSxaPWguY3VycmVuY3lQb3NpdGlvbnx8ZC5wb3NpdGlvbixyZT1oLmN1cnJlbmN5U3ltYm9sfHxkLnN5''@;'; put 'put ''bWJvbDtjb25zdCBjZT12b2lkIDAhPT1mLnNwYWNlU2VwYXJhdGVkQ3VycmVuY3k/Zi5zcGFjZVNlcGFyYXRlZEN1cnJlbmN5OmYuc3BhY2VTZXBhcmF0ZWQ7dm9pZCAwPT09aC5sb3dQcmVjaXNpb24mJihoLmxvd1ByZWNpc2lvbj0hMSksY2UmJihNPSIgIiksImluZml4Ij09PVomJih2PU0r''@;'; put 'put ''cmUrTSk7bGV0IGJlPWxUKHtpbnN0YW5jZTpjLHByb3ZpZGVkRm9ybWF0Omgsc3RhdGU6YSxkZWNpbWFsU2VwYXJhdG9yOnZ9KTtyZXR1cm4icHJlZml4Ij09PVomJihiZT1jLl92YWx1ZTwwJiYic2lnbiI9PT1mLm5lZ2F0aXZlP2AtJHtNfSR7cmV9JHtiZS5zbGljZSgxKX1gOmMuX3ZhbHVl''@;'; put 'put ''PjAmJmYuZm9yY2VTaWduP2ArJHtNfSR7cmV9JHtiZS5zbGljZSgxKX1gOnJlK00rYmUpLCghWnx8InBvc3RmaXgiPT09WikmJihNPSFmLnNwYWNlU2VwYXJhdGVkQWJicmV2aWF0aW9uJiZEPyIiOk0sYmU9YmUrTStyZSksYmV9KGMsbD1PXyhsLGYzLmN1cnJlbnRDdXJyZW5jeURlZmF1bHRG''@;'; put 'put ''b3JtYXQoKSksZjMpO2Nhc2UicGVyY2VudCI6cmV0dXJuIGZ1bmN0aW9uIEVvdChjLGwsYSxkKXtsZXQgaD1sLnByZWZpeFN5bWJvbCxmPWxUKHtpbnN0YW5jZTpkKDEwMCpjLl92YWx1ZSkscHJvdmlkZWRGb3JtYXQ6bCxzdGF0ZTphfSksdj1PYmplY3QuYXNzaWduKHt9LHNULGwpO3JldHVy''@;'; put 'put ''biBoP2AlJHt2LnNwYWNlU2VwYXJhdGVkPyIgIjoiIn0ke2Z9YDpgJHtmfSR7di5zcGFjZVNlcGFyYXRlZD8iICI6IiJ9JWB9KGMsbD1PXyhsLGYzLmN1cnJlbnRQZXJjZW50YWdlRGVmYXVsdEZvcm1hdCgpKSxmMyxhKTtjYXNlImJ5dGUiOnJldHVybiBmdW5jdGlvbiBTb3QoYyxsLGEsZCl7''@;'; put 'put ''bGV0IGg9bC5iYXNlfHwiYmluYXJ5IixmPU9iamVjdC5hc3NpZ24oe30sc1QsbCk7Y29uc3R7YmluYXJ5U3VmZml4ZXM6dixkZWNpbWFsU3VmZml4ZXM6TX09YS5jdXJyZW50Qnl0ZXMoKTtsZXQgWj17Z2VuZXJhbDp7c2NhbGU6MTAyNCxzdWZmaXhlczpNfHxZUCxtYXJrZXI6ImJkIn0sYmlu''@;'; put 'put ''YXJ5OntzY2FsZToxMDI0LHN1ZmZpeGVzOnZ8fGQ0ZSxtYXJrZXI6ImIifSxkZWNpbWFsOntzY2FsZToxZTMsc3VmZml4ZXM6TXx8WVAsbWFya2VyOiJkIn19W2hdLHt2YWx1ZTpyZSxzdWZmaXg6Y2V9PUdQKGMuX3ZhbHVlLFouc3VmZml4ZXMsWi5zY2FsZSk7cmV0dXJuYCR7bFQoe2luc3Rh''@;'; put 'put ''bmNlOmQocmUpLHByb3ZpZGVkRm9ybWF0Omwsc3RhdGU6YSxkZWZhdWx0czphLmN1cnJlbnRCeXRlRGVmYXVsdEZvcm1hdCgpfSl9JHtmLnNwYWNlU2VwYXJhdGVkPyIgIjoiIn0ke2NlfWB9KGMsbD1PXyhsLGYzLmN1cnJlbnRCeXRlRGVmYXVsdEZvcm1hdCgpKSxmMyxhKTtjYXNlInRpbWUi''@;'; put 'put ''OnJldHVybiBsPU9fKGwsZjMuY3VycmVudFRpbWVEZWZhdWx0Rm9ybWF0KCkpLGZ1bmN0aW9uIHhvdChjKXtsZXQgbD1NYXRoLmZsb29yKGMuX3ZhbHVlLzYwLzYwKSxhPU1hdGguZmxvb3IoKGMuX3ZhbHVlLTYwKmwqNjApLzYwKSxkPU1hdGgucm91bmQoYy5fdmFsdWUtNjAqbCo2MC02MCph''@;'; put 'put ''KTtyZXR1cm5gJHtsfToke2E8MTA/IjAiOiIifSR7YX06JHtkPDEwPyIwIjoiIn0ke2R9YH0oYyk7Y2FzZSJvcmRpbmFsIjpyZXR1cm4gZnVuY3Rpb24gTW90KGMsbCxhKXtsZXQgZD1hLmN1cnJlbnRPcmRpbmFsKCksaD1PYmplY3QuYXNzaWduKHt9LHNULGwpLGY9bFQoe2luc3RhbmNlOmMs''@;'; put 'put ''cHJvdmlkZWRGb3JtYXQ6bCxzdGF0ZTphfSksdj1kKGMuX3ZhbHVlKTtyZXR1cm5gJHtmfSR7aC5zcGFjZVNlcGFyYXRlZD8iICI6IiJ9JHt2fWB9KGMsbD1PXyhsLGYzLmN1cnJlbnRPcmRpbmFsRGVmYXVsdEZvcm1hdCgpKSxmMyk7ZGVmYXVsdDpyZXR1cm4gbFQoe2luc3RhbmNlOmMscHJv''@;'; put 'put ''dmlkZWRGb3JtYXQ6bCxudW1icm86YX0pfX0oYyxsLGEpO3JldHVybiB2PWZ1bmN0aW9uIE5vdChjLGwpe3JldHVybiBsK2N9KHYsaCksdj1mdW5jdGlvbiBWb3QoYyxsKXtyZXR1cm4gYytsfSh2LGYpLHZ9KC4uLmwsYyksZ2V0Qnl0ZVVuaXQ6KC4uLmwpPT5mdW5jdGlvbiBDb3QoYyl7bGV0''@;'; put 'put ''IGw9aUouZ2VuZXJhbDtyZXR1cm4gR1AoYy5fdmFsdWUsbC5zdWZmaXhlcyxsLnNjYWxlKS5zdWZmaXh9KC4uLmwsYyksZ2V0QmluYXJ5Qnl0ZVVuaXQ6KC4uLmwpPT5mdW5jdGlvbiB3b3QoYyl7bGV0IGw9aUouYmluYXJ5O3JldHVybiBHUChjLl92YWx1ZSxsLnN1ZmZpeGVzLGwuc2NhbGUp''@;'; put 'put ''LnN1ZmZpeH0oLi4ubCxjKSxnZXREZWNpbWFsQnl0ZVVuaXQ6KC4uLmwpPT5mdW5jdGlvbiBfb3QoYyl7bGV0IGw9aUouZGVjaW1hbDtyZXR1cm4gR1AoYy5fdmFsdWUsbC5zdWZmaXhlcyxsLnNjYWxlKS5zdWZmaXh9KC4uLmwsYyksZm9ybWF0T3JEZWZhdWx0Ok9ffSkpKGN1KSxsOT0oYz0+''@;'; put 'put ''KHthZGQ6KGwsYSk9PmZ1bmN0aW9uIGpvdChjLGwsYSl7bGV0IGQ9bmV3IERnKGMuX3ZhbHVlKSxoPWw7cmV0dXJuIGEuaXNOdW1icm8obCkmJihoPWwuX3ZhbHVlKSxoPW5ldyBEZyhoKSxjLl92YWx1ZT1kLnBsdXMoaCkudG9OdW1iZXIoKSxjfShsLGEsYyksc3VidHJhY3Q6KGwsYSk9Pmg0''@;'; put 'put ''ZShsLGEsYyksbXVsdGlwbHk6KGwsYSk9PmZ1bmN0aW9uIHpvdChjLGwsYSl7bGV0IGQ9bmV3IERnKGMuX3ZhbHVlKSxoPWw7cmV0dXJuIGEuaXNOdW1icm8obCkmJihoPWwuX3ZhbHVlKSxoPW5ldyBEZyhoKSxjLl92YWx1ZT1kLnRpbWVzKGgpLnRvTnVtYmVyKCksY30obCxhLGMpLGRpdmlk''@;'; put 'put ''ZToobCxhKT0+ZnVuY3Rpb24gVW90KGMsbCxhKXtsZXQgZD1uZXcgRGcoYy5fdmFsdWUpLGg9bDtyZXR1cm4gYS5pc051bWJybyhsKSYmKGg9bC5fdmFsdWUpLGg9bmV3IERnKGgpLGMuX3ZhbHVlPWQuZGl2aWRlZEJ5KGgpLnRvTnVtYmVyKCksY30obCxhLGMpLHNldDoobCxhKT0+ZnVuY3Rp''@;'; put 'put ''b24gWm90KGMsbCxhKXtsZXQgZD1sO3JldHVybiBhLmlzTnVtYnJvKGwpJiYoZD1sLl92YWx1ZSksYy5fdmFsdWU9ZCxjfShsLGEsYyksZGlmZmVyZW5jZToobCxhKT0+ZnVuY3Rpb24gV290KGMsbCxhKXtsZXQgZD1hKGMuX3ZhbHVlKTtyZXR1cm4gaDRlKGQsbCxhKSxNYXRoLmFicyhkLl92''@;'; put 'put ''YWx1ZSl9KGwsYSxjKSxCaWdOdW1iZXI6RGd9KSkoY3UpO2NvbnN0IFhvdD10SjtjbGFzcyBmNGV7Y29uc3RydWN0b3IobCl7dGhpcy5fdmFsdWU9bH1jbG9uZSgpe3JldHVybiBjdSh0aGlzLl92YWx1ZSl9Zm9ybWF0KGw9e30pe3JldHVybiBzOS5mb3JtYXQodGhpcyxsKX1mb3JtYXRDdXJy''@;'; put 'put ''ZW5jeShsKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGwmJihsPVhvdC5wYXJzZUZvcm1hdChsKSksKGw9czkuZm9ybWF0T3JEZWZhdWx0KGwsVnAuY3VycmVudEN1cnJlbmN5RGVmYXVsdEZvcm1hdCgpKSkub3V0cHV0PSJjdXJyZW5jeSIsczkuZm9ybWF0KHRoaXMsbCl9Zm9ybWF0VGltZShs''@;'; put 'put ''PXt9KXtyZXR1cm4gbC5vdXRwdXQ9InRpbWUiLHM5LmZvcm1hdCh0aGlzLGwpfWJpbmFyeUJ5dGVVbml0cygpe3JldHVybiBzOS5nZXRCaW5hcnlCeXRlVW5pdCh0aGlzKX1kZWNpbWFsQnl0ZVVuaXRzKCl7cmV0dXJuIHM5LmdldERlY2ltYWxCeXRlVW5pdCh0aGlzKX1ieXRlVW5pdHMoKXty''@;'; put 'put ''ZXR1cm4gczkuZ2V0Qnl0ZVVuaXQodGhpcyl9ZGlmZmVyZW5jZShsKXtyZXR1cm4gbDkuZGlmZmVyZW5jZSh0aGlzLGwpfWFkZChsKXtyZXR1cm4gbDkuYWRkKHRoaXMsbCl9c3VidHJhY3QobCl7cmV0dXJuIGw5LnN1YnRyYWN0KHRoaXMsbCl9bXVsdGlwbHkobCl7cmV0dXJuIGw5Lm11bHRp''@;'; put 'put ''cGx5KHRoaXMsbCl9ZGl2aWRlKGwpe3JldHVybiBsOS5kaXZpZGUodGhpcyxsKX1zZXQobCl7cmV0dXJuIGw5LnNldCh0aGlzLHA0ZShsKSl9dmFsdWUoKXtyZXR1cm4gdGhpcy5fdmFsdWV9dmFsdWVPZigpe3JldHVybiB0aGlzLl92YWx1ZX19ZnVuY3Rpb24gcDRlKGMpe2xldCBsPWM7cmV0''@;'; put 'put ''dXJuIGN1LmlzTnVtYnJvKGMpP2w9Yy5fdmFsdWU6InN0cmluZyI9PXR5cGVvZiBjP2w9Y3UudW5mb3JtYXQoYyk6aXNOYU4oYykmJihsPU5hTiksbH1mdW5jdGlvbiBjdShjKXtyZXR1cm4gbmV3IGY0ZShwNGUoYykpfWN1LnZlcnNpb249IjIuNS4wIixjdS5pc051bWJybz1mdW5jdGlvbihj''@;'; put 'put ''KXtyZXR1cm4gYyBpbnN0YW5jZW9mIGY0ZX0sY3UubGFuZ3VhZ2U9VnAuY3VycmVudExhbmd1YWdlLGN1LnJlZ2lzdGVyTGFuZ3VhZ2U9VnAucmVnaXN0ZXJMYW5ndWFnZSxjdS5zZXRMYW5ndWFnZT1WcC5zZXRMYW5ndWFnZSxjdS5sYW5ndWFnZXM9VnAubGFuZ3VhZ2VzLGN1Lmxhbmd1YWdl''@;'; put 'put ''RGF0YT1WcC5sYW5ndWFnZURhdGEsY3UuemVyb0Zvcm1hdD1WcC5zZXRaZXJvRm9ybWF0LGN1LmRlZmF1bHRGb3JtYXQ9VnAuY3VycmVudERlZmF1bHRzLGN1LnNldERlZmF1bHRzPVZwLnNldERlZmF1bHRzLGN1LmRlZmF1bHRDdXJyZW5jeUZvcm1hdD1WcC5jdXJyZW50Q3VycmVuY3lEZWZh''@;'; put 'put ''dWx0Rm9ybWF0LGN1LnZhbGlkYXRlPSRvdC52YWxpZGF0ZSxjdS5sb2FkTGFuZ3VhZ2VzSW5Ob2RlPUtvdC5sb2FkTGFuZ3VhZ2VzSW5Ob2RlLGN1LnVuZm9ybWF0PXFvdC51bmZvcm1hdCxjdS5CaWdOdW1iZXI9bDkuQmlnTnVtYmVyO3ZhciAkbT0kYXQoY3UpO2Z1bmN0aW9uIGc0ZShjLGwp''@;'; put 'put ''e2lmKG0xKGMpKXtjb25zdCBhPWwubnVtZXJpY0Zvcm1hdCxkPWEmJmEuY3VsdHVyZXx8Ii0iLGg9YSYmYS5wYXR0ZXJuO2lmKHR5cGVvZiBkPCJ1IiYmISRtLmxhbmd1YWdlcygpW2RdKXtjb25zdCBmPWQucmVwbGFjZSgiLSIsIiIpLHY9JG0uYWxsTGFuZ3VhZ2VzPyRtLmFsbExhbmd1YWdl''@;'; put 'put ''c1tkXTokbVtmXTt2JiYkbS5yZWdpc3Rlckxhbmd1YWdlKHYpfSRtLnNldExhbmd1YWdlKGQpLGM9JG0oYykuZm9ybWF0KGh8fCIwIil9cmV0dXJuIGN9ZnVuY3Rpb24gYUooYyxsLGEsZCxoLGYsdil7bGV0IE09ZjtpZihtMShNKSl7bGV0IFo9W107aWYoQXJyYXkuaXNBcnJheSh2LmNsYXNz''@;'; put 'put ''TmFtZSkpWj12LmNsYXNzTmFtZTtlbHNle3ZhciBEO2NvbnN0IHJlPW51bGwhPT0oRD12LmNsYXNzTmFtZSkmJnZvaWQgMCE9PUQ/RDoiIjtyZS5sZW5ndGgmJihaPXJlLnNwbGl0KCIgIikpfU09ZzRlKE0sdiksWi5pbmRleE9mKCJodExlZnQiKTwwJiZaLmluZGV4T2YoImh0Q2VudGVyIik8''@;'; put 'put ''MCYmWi5pbmRleE9mKCJodFJpZ2h0Iik8MCYmWi5pbmRleE9mKCJodEp1c3RpZnkiKTwwJiZaLnB1c2goImh0UmlnaHQiKSxaLmluZGV4T2YoImh0TnVtZXJpYyIpPDAmJloucHVzaCgiaHROdW1lcmljIiksdi5jbGFzc05hbWU9Wi5qb2luKCIgIiksbC5kaXI9Imx0ciJ9QWcoYyxsLGEsZCxo''@;'; put 'put ''LE0sdil9ZnVuY3Rpb24gb0ooYyxsLGEsZCxoLGYsdil7QWcuYXBwbHkodGhpcyxbYyxsLGEsZCxoLGYsdl0pO2NvbnN0IEQ9di5oYXNoU3ltYm9sfHwiKiI7bGV0IFo9IiI7R2EoKHYuaGFzaExlbmd0aHx8bC5pbm5lckhUTUwubGVuZ3RoKS0xLCgpPT57Wis9RH0pLHo3KGwsWil9ZnVuY3Rp''@;'; put 'put ''b24gc0ooYyxsLGEsZCxoLGYsdil7QWcuYXBwbHkodGhpcyxbYyxsLGEsZCxoLGYsdl0pfWZ1bmN0aW9uIGxKKGMsbCxhLGQsaCxmLHYpe0FnLmFwcGx5KHRoaXMsW2MsbCxhLGQsaCxmLHZdKSxsLmRpcj0ibHRyIn1mdW5jdGlvbiBjVChjLGwpe2xldCBhPWM7bnVsbD09YSYmKGE9IiIpLHRo''@;'; put 'put ''aXMuYWxsb3dFbXB0eSYmIiI9PT1hP2woITApOnRoaXMuc3RyaWN0JiZ0aGlzLnNvdXJjZT8iZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5zb3VyY2U/dGhpcy5zb3VyY2UoYSxtNGUoYSxsKSk6bTRlKGEsbCkodGhpcy5zb3VyY2UpOmwoITApfWZ1bmN0aW9uIG00ZShjLGwpe2NvbnN0IGE9Yzty''@;'; put 'put ''ZXR1cm4gZnVuY3Rpb24oZCl7bGV0IGg9ITE7Zm9yKGxldCBmPTAsdj1kLmxlbmd0aDtmPHY7ZisrKWlmKGE9PT1kW2ZdKXtoPSEwO2JyZWFrfWwoaCl9fWZ1bmN0aW9uIHY0ZShjKXtjb25zdCBsPW5ldyBEYXRlKGMpO3JldHVybiBpc05hTihuZXcgRGF0ZShgJHtjfVQwMDowMGApLmdldERh''@;'; put 'put ''dGUoKSk/bDpuZXcgRGF0ZShsLmdldFRpbWUoKSs2ZTQqbC5nZXRUaW1lem9uZU9mZnNldCgpKX1mdW5jdGlvbiBLUChjLGwpe2NvbnN0IGE9aGZlKFlwZSx0aGlzLmluc3RhbmNlKTtsZXQgZD1jLGg9ITA7bnVsbD09ZCYmKGQ9IiIpO2xldCBmPU9vKGQsdGhpcy5kYXRlRm9ybWF0fHxhLmRl''@;'; put 'put ''ZmF1bHREYXRlRm9ybWF0LCEwKS5pc1ZhbGlkKCksdj1PbyhuZXcgRGF0ZShkKSkuaXNWYWxpZCgpfHxmO2lmKHRoaXMuYWxsb3dFbXB0eSYmIiI9PT1kJiYodj0hMCxmPSEwKSx2fHwoaD0hMSksIXYmJmYmJihoPSEwKSx2JiYhZilpZighMD09PXRoaXMuY29ycmVjdEZvcm1hdCl7Y29uc3Qg''@;'; put 'put ''TT1mdW5jdGlvbiBvc3QoYyxsKXtjb25zdCBhPU9vKHY0ZShjKSksZD1PbyhjLGwpLGg9Yy5zZWFyY2goL1tBLVphLXpdL2cpPi0xO2xldCBmO3JldHVybiBmPWEuaXNWYWxpZCgpJiZhLmZvcm1hdCgieCIpPT09ZC5mb3JtYXQoIngiKXx8IWQuaXNWYWxpZCgpfHxoP2E6ZCxmLmZvcm1hdChs''@;'; put 'put ''KX0oZCx0aGlzLmRhdGVGb3JtYXQpO3RoaXMuaW5zdGFuY2Uuc2V0RGF0YUF0Q2VsbCh0aGlzLnZpc3VhbFJvdyx0aGlzLnZpc3VhbENvbCxNLCJkYXRlVmFsaWRhdG9yIiksaD0hMH1lbHNlIGg9ITE7bChoKX1mdW5jdGlvbiBjSihjLGwpe2NULmFwcGx5KHRoaXMsW2MsbF0pfWZ1bmN0aW9u''@;'; put 'put ''IHVKKGMsbCl7bGV0IGE9YztudWxsPT1hJiYoYT0iIiksbCghKCF0aGlzLmFsbG93RW1wdHl8fCIiIT09YSl8fCIiIT09YSYmbTEoYykpfWFKLlJFTkRFUkVSX1RZUEU9Im51bWVyaWMiLG9KLlJFTkRFUkVSX1RZUEU9InBhc3N3b3JkIixzSi5SRU5ERVJFUl9UWVBFPSJzZWxlY3QiLGxKLlJF''@;'; put 'put ''TkRFUkVSX1RZUEU9InRpbWUiLGNULlZBTElEQVRPUl9UWVBFPSJhdXRvY29tcGxldGUiLEtQLlZBTElEQVRPUl9UWVBFPSJkYXRlIixjSi5WQUxJREFUT1JfVFlQRT0iZHJvcGRvd24iLHVKLlZBTElEQVRPUl9UWVBFPSJudW1lcmljIjtjb25zdCBjc3Q9WyJZWVlZLU1NLUREVEhIOm1tOnNz''@;'; put 'put ''LlNTU1oiLCJYIiwieCJdO2Z1bmN0aW9uIHFQKGMsbCl7Y29uc3QgYT10aGlzLnRpbWVGb3JtYXR8fCJoOm1tOnNzIGEiO2xldCBkPSEwLGg9YztudWxsPT09aCYmKGg9IiIpLGg9L15cZHszLH0kLy50ZXN0KGgpP3BhcnNlSW50KGgsMTApOmg7Y29uc3QgZj0vXlxkezEsMn0kLy50ZXN0KGgp''@;'; put 'put ''O2YmJihoKz0iOjAwIik7Y29uc3Qgdj1PbyhoLGNzdCwhMCkuaXNWYWxpZCgpP09vKGgpOk9vKGgsYSk7bGV0IE09di5pc1ZhbGlkKCksRD1PbyhoLGEsITApLmlzVmFsaWQoKSYmIWY7aWYodGhpcy5hbGxvd0VtcHR5JiYiIj09PWgmJihNPSEwLEQ9ITApLE18fChkPSExKSwhTSYmRCYmKGQ9''@;'; put 'put ''ITApLE0mJiFEKWlmKCEwPT09dGhpcy5jb3JyZWN0Rm9ybWF0KXtjb25zdCBaPXYuZm9ybWF0KGEpO3RoaXMuaW5zdGFuY2Uuc2V0RGF0YUF0Q2VsbCh0aGlzLnZpc3VhbFJvdyx0aGlzLnZpc3VhbENvbCxaLCJ0aW1lVmFsaWRhdG9yIiksZD0hMH1lbHNlIGQ9ITE7bChkKX1xUC5WQUxJREFU''@;'; put 'put ''T1JfVFlQRT0idGltZSI7Y29uc3QgaHN0PXtDRUxMX1RZUEU6ImF1dG9jb21wbGV0ZSIsZWRpdG9yOkhYLHJlbmRlcmVyOklfLHZhbGlkYXRvcjpjVH0sZnN0PXtDRUxMX1RZUEU6ImNoZWNrYm94IixlZGl0b3I6QnBlLHJlbmRlcmVyOiRYfTtmdW5jdGlvbiBiNGUoYyxsLGEsZCxoLGYsdil7''@;'; put 'put ''SV8uYXBwbHkodGhpcyxbYyxsLGEsZCxoLGYsdl0pfWI0ZS5SRU5ERVJFUl9UWVBFPSJkYXRlIjtjb25zdCBnc3Q9e0NFTExfVFlQRToiZGF0ZSIsZWRpdG9yOiRwZSxyZW5kZXJlcjpiNGUsdmFsaWRhdG9yOktQfSxtc3Q9e0NFTExfVFlQRToiZHJvcGRvd24iLGVkaXRvcjpLcGUscmVuZGVy''@;'; put 'put ''ZXI6R1gsdmFsaWRhdG9yOmNKLGZpbHRlcjohMSxzdHJpY3Q6ITB9LHZzdD17Q0VMTF9UWVBFOiJoYW5kc29udGFibGUiLGVkaXRvcjpSWCxyZW5kZXJlcjpxWH0sYnN0PXtDRUxMX1RZUEU6Im51bWVyaWMiLGVkaXRvcjpxcGUscmVuZGVyZXI6YUosdmFsaWRhdG9yOnVKLGRhdGFUeXBlOiJu''@;'; put 'put ''dW1iZXIifSx5c3Q9e0NFTExfVFlQRToicGFzc3dvcmQiLGVkaXRvcjpYcGUscmVuZGVyZXI6b0osY29weWFibGU6ITF9LF9zdD17Q0VMTF9UWVBFOiJzZWxlY3QiLGVkaXRvcjpRcGUscmVuZGVyZXI6c0p9LHdzdD17Q0VMTF9UWVBFOiJ0aW1lIixlZGl0b3I6ZTRlLHJlbmRlcmVyOmxKLHZh''@;'; put 'put ''bGlkYXRvcjpxUH07ZnVuY3Rpb24geTRlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBQXyhjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24g''@;'; put 'put ''eHN0KGMpe3ZhciBsPWZ1bmN0aW9uIEVzdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVy''@;'; put 'put ''biBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9P''@;'; put 'put ''YmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24gRl8oYyxsKXtyZXR1cm4gYy5nZXQoXzRlKGMsbCkpfWZ1bmN0aW9uIF80ZShjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlw''@;'; put 'put ''ZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9Y29uc3QgdzRlPW5ldyBNYXAoW1sicGx1Z2luIixmdW5jdGlvbiBvSmUoYyl7''@;'; put 'put ''cmV0dXJuISFJRShjKX1dLFsiY2VsbC10eXBlIixhcGVdLFsiZWRpdG9yIixkZmVdLFsicmVuZGVyZXIiLFNmZV0sWyJ2YWxpZGF0b3IiLE1mZV1dKSxDNGU9U3ltYm9sKCJtYWluU2V0dGluZyIpLFhQPVtdO2xldCBjOT1udWxsO3ZhciB1OT1uZXcgV2Vha01hcCxTNGU9bmV3IFdlYWtTZXQ7''@;'; put 'put ''Y2xhc3MgRnN7c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuImJhc2UifXN0YXRpYyBnZXQgU0VUVElOR19LRVlTKCl7cmV0dXJuW3RoaXMuUExVR0lOX0tFWV19c3RhdGljIGdldCBERUZBVUxUX1NFVFRJTkdTKCl7cmV0dXJue319Y29uc3RydWN0b3IobCl7KGZ1bmN0aW9uIFNzdChj''@;'; put 'put ''LGwpe3k0ZShjLGwpLGwuYWRkKGMpfSkodGhpcyxTNGUpLFBfKHRoaXMsImV2ZW50TWFuYWdlciIsbmV3IGoyKHRoaXMpKSxQXyh0aGlzLCJwbHVnaW5OYW1lIixudWxsKSxQXyh0aGlzLCJwbHVnaW5zSW5pdGlhbGl6ZWRDYWxsYmFja3MiLFtdKSxQXyh0aGlzLCJpc1BsdWdpbnNSZWFkeSIs''@;'; put 'put ''ITEpLFBfKHRoaXMsImVuYWJsZWQiLCExKSxQXyh0aGlzLCJpbml0aWFsaXplZCIsITEpLGZ1bmN0aW9uIE1zdChjLGwsYSl7eTRlKGMsbCksbC5zZXQoYyxhKX0odGhpcyx1OSx7fSksVHAodGhpcywiaG90IixsLHt3cml0YWJsZTohMX0pLGM5PW51bGwsdGhpcy5ob3QuYWRkSG9vaygiYWZ0''@;'; put 'put ''ZXJQbHVnaW5zSW5pdGlhbGl6ZWQiLCgpPT50aGlzLm9uQWZ0ZXJQbHVnaW5zSW5pdGlhbGl6ZWQoKSksdGhpcy5ob3QuYWRkSG9vaygiYWZ0ZXJVcGRhdGVTZXR0aW5ncyIsYT0+dGhpcy5vblVwZGF0ZVNldHRpbmdzKGEpKSx0aGlzLmhvdC5hZGRIb29rKCJiZWZvcmVJbml0IiwoKT0+dGhp''@;'; put 'put ''cy5pbml0KCkpfWluaXQoKXt0aGlzLnBsdWdpbk5hbWU9dGhpcy5ob3QuZ2V0UGx1Z2luTmFtZSh0aGlzKTtjb25zdCBsPXRoaXMuY29uc3RydWN0b3IuUExVR0lOX0RFUFMsYT1BcnJheS5pc0FycmF5KGwpP2w6W107aWYoYS5sZW5ndGg+MCl7Y29uc3QgaD1bXTtpZihhLmZvckVhY2goZj0+''@;'; put 'put ''e2NvbnN0W3YsTV09Zi5zcGxpdCgiOiIpO2lmKCF3NGUuaGFzKHYpKXRocm93IG5ldyBFcnJvcihgVW5rbm93biBwbHVnaW4gZGVwZW5kZW5jeSB0eXBlICIke3Z9IiB3YXMgZm91bmQuYCk7dzRlLmdldCh2KShNKXx8aC5wdXNoKGAgLSAke019ICgke3Z9KWApfSksaC5sZW5ndGg+MCl7Y29u''@;'; put 'put ''c3QgZj1bYFRoZSAke3RoaXMucGx1Z2luTmFtZX0gcGx1Z2luIHJlcXVpcmVzIHRoZSBmb2xsb3dpbmcgbW9kdWxlczpcbmAsYCR7aC5qb2luKCJcbiIpfVxuYF0uam9pbigiIik7WFAucHVzaChmKX19aWYoYzl8fChjOT1uSygpKSxjOS5pbmRleE9mKHRoaXMucGx1Z2luTmFtZSk+PTAmJmM5''@;'; put 'put ''LnNwbGljZShjOS5pbmRleE9mKHRoaXMucGx1Z2luTmFtZSksMSksdGhpcy5ob3QuYWRkSG9va09uY2UoImFmdGVyUGx1Z2luc0luaXRpYWxpemVkIiwoKT0+e3RoaXMuaXNFbmFibGVkJiZ0aGlzLmlzRW5hYmxlZCgpJiZ0aGlzLmVuYWJsZVBsdWdpbigpfSksMD09PWM5Lmxlbmd0aCl7aWYo''@;'; put 'put ''WFAubGVuZ3RoPjApe2NvbnN0IGg9W2Ake1hQLmpvaW4oIlxuIil9XG5gLCJZb3UgaGF2ZSB0byBpbXBvcnQgYW5kIHJlZ2lzdGVyIHRoZW0gbWFudWFsbHkuIl0uam9pbigiIik7dGhyb3cgWFAubGVuZ3RoPTAsbmV3IEVycm9yKGgpfXRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclBsdWdpbnNJ''@;'; put 'put ''bml0aWFsaXplZCIpfXRoaXMuaW5pdGlhbGl6ZWQ9ITB9ZW5hYmxlUGx1Z2luKCl7dGhpcy5lbmFibGVkPSEwfWRpc2FibGVQbHVnaW4oKXt2YXIgbDtudWxsPT09KGw9dGhpcy5ldmVudE1hbmFnZXIpfHx2b2lkIDA9PT1sfHxsLmNsZWFyKCksdGhpcy5jbGVhckhvb2tzKCksdGhpcy5lbmFi''@;'; put 'put ''bGVkPSExfWdldFNldHRpbmcobCl7Y29uc3QgYT10aGlzLmhvdC5nZXRTZXR0aW5ncygpW3RoaXMuY29uc3RydWN0b3IuUExVR0lOX0tFWV07aWYodm9pZCAwPT09bClyZXR1cm4gYTtjb25zdCBkPXRoaXMuY29uc3RydWN0b3IuREVGQVVMVF9TRVRUSU5HUzt2YXIgaCxmO3JldHVybihBcnJh''@;'; put 'put ''eS5pc0FycmF5KGEpfHxxbyhhKSkmJmRbQzRlXT09PWw/QXJyYXkuaXNBcnJheShhKT9hOm51bGwhPT0oaD1hW2xdKSYmdm9pZCAwIT09aD9oOmRbbF06cW8oYSkmJm51bGwhPT0oZj1hW2xdKSYmdm9pZCAwIT09Zj9mOmRbbF19YWRkSG9vayhsLGEsZCl7Rl8odTksdGhpcylbbF09Rl8odTks''@;'; put 'put ''dGhpcylbbF18fFtdO2NvbnN0IGg9Rl8odTksdGhpcylbbF07dGhpcy5ob3QuYWRkSG9vayhsLGEsZCksaC5wdXNoKGEpLEZfKHU5LHRoaXMpW2xdPWh9cmVtb3ZlSG9va3MobCl7WW4oRl8odTksdGhpcylbbF18fFtdLGE9Pnt0aGlzLmhvdC5yZW1vdmVIb29rKGwsYSl9KX1jbGVhckhvb2tz''@;'; put 'put ''KCl7Y29uc3QgbD1GXyh1OSx0aGlzKTtYbyhsLChhLGQpPT50aGlzLnJlbW92ZUhvb2tzKGQpKSxsLmxlbmd0aD0wfWNhbGxPblBsdWdpbnNSZWFkeShsKXt0aGlzLmlzUGx1Z2luc1JlYWR5P2woKTp0aGlzLnBsdWdpbnNJbml0aWFsaXplZENhbGxiYWNrcy5wdXNoKGwpfW9uQWZ0ZXJQbHVn''@;'; put 'put ''aW5zSW5pdGlhbGl6ZWQoKXtZbih0aGlzLnBsdWdpbnNJbml0aWFsaXplZENhbGxiYWNrcyxsPT5sKCkpLHRoaXMucGx1Z2luc0luaXRpYWxpemVkQ2FsbGJhY2tzLmxlbmd0aD0wLHRoaXMuaXNQbHVnaW5zUmVhZHk9ITB9b25VcGRhdGVTZXR0aW5ncyhsKXtjb25zdCBhPV80ZShTNGUsdGhp''@;'; put 'put ''cyxBc3QpLmNhbGwodGhpcyxsKTt0aGlzLmlzRW5hYmxlZCYmKHRoaXMuZW5hYmxlZCYmIXRoaXMuaXNFbmFibGVkKCkmJnRoaXMuZGlzYWJsZVBsdWdpbigpLCF0aGlzLmVuYWJsZWQmJnRoaXMuaXNFbmFibGVkKCkmJnRoaXMuZW5hYmxlUGx1Z2luKCksdGhpcy5lbmFibGVkJiZ0aGlzLmlz''@;'; put 'put ''RW5hYmxlZCgpJiZhJiZ0aGlzLnVwZGF0ZVBsdWdpbihsKSl9dXBkYXRlUGx1Z2luKCl7fWRlc3Ryb3koKXt2YXIgbDtudWxsPT09KGw9dGhpcy5ldmVudE1hbmFnZXIpfHx2b2lkIDA9PT1sfHxsLmRlc3Ryb3koKSx0aGlzLmNsZWFySG9va3MoKSxYbyh0aGlzLChhLGQpPT57ImhvdCIhPT1k''@;'; put 'put ''JiYodGhpc1tkXT1udWxsKX0pLGRlbGV0ZSB0aGlzLnQsZGVsZXRlIHRoaXMuaG90fX1mdW5jdGlvbiBBc3QoYyl7aWYoIWMpcmV0dXJuITE7Y29uc3QgbD10aGlzLmNvbnN0cnVjdG9yLlNFVFRJTkdfS0VZUztpZigiYm9vbGVhbiI9PXR5cGVvZiBsKXJldHVybiBsO2ZvcihsZXQgYT0wO2E8''@;'; put 'put ''bC5sZW5ndGg7YSsrKWlmKHZvaWQgMCE9PWNbbFthXV0pcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gZDkoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIGtzdChjKXt2YXIgbD1mdW5jdGlvbiBEc3QoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3lt''@;'; put 'put ''Ym9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVy''@;'; put 'put ''bigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0p''@;'; put 'put ''OmNbbF09YSxjfWNvbnN0IGRKPWNsYXNzIElzdHtjb25zdHJ1Y3RvcihsKXtkOSh0aGlzLCJob3QiLG51bGwpLGQ5KHRoaXMsImNvbnRhaW5lciIsbnVsbCksZDkodGhpcywiaW5qZWN0ZWQiLCExKSxkOSh0aGlzLCJyb3dzIixbXSksZDkodGhpcywiY29sdW1ucyIsW10pLGQ5KHRoaXMsInNh''@;'; put 'put ''bXBsZXMiLG51bGwpLGQ5KHRoaXMsInNldHRpbmdzIix7dXNlSGVhZGVyczohMH0pLHRoaXMuaG90PWx9YWRkUm93KGwsYSl7aWYodGhpcy5jb2x1bW5zLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIkRvZXNuJ3Qgc3VwcG9ydCBtdWx0aS1kaW1lbnNpb25hbCB0YWJsZSIpO3RoaXMucm93cy5s''@;'; put 'put ''ZW5ndGh8fCh0aGlzLmNvbnRhaW5lcj10aGlzLmNyZWF0ZUNvbnRhaW5lcih0aGlzLmhvdC5yb290RWxlbWVudC5jbGFzc05hbWUpKTtjb25zdCBkPXtyb3c6bH07dGhpcy5yb3dzLnB1c2goZCksdGhpcy5zYW1wbGVzPWEsdGhpcy50YWJsZT10aGlzLmNyZWF0ZVRhYmxlKHRoaXMuaG90LnRh''@;'; put 'put ''YmxlLmNsYXNzTmFtZSksdGhpcy50YWJsZS5jb2xHcm91cC5hcHBlbmRDaGlsZCh0aGlzLmNyZWF0ZUNvbEdyb3Vwc0NvbChsKSksdGhpcy50YWJsZS50ci5hcHBlbmRDaGlsZCh0aGlzLmNyZWF0ZVJvdyhsKSksMD09PWwmJlRpKHRoaXMudGFibGUudGFibGUsImh0R2hvc3RUYWJsZUZpcnN0''@;'; put 'put ''Um93IiksdGhpcy5jb250YWluZXIuY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMudGFibGUuZnJhZ21lbnQpLGQudGFibGU9dGhpcy50YWJsZS50YWJsZX1hZGRDb2x1bW5IZWFkZXJzUm93KGwpe2lmKG51bGwhPXRoaXMuaG90LmdldENvbEhlYWRlcigwKSl7Y29uc3QgZD17cm93Oi0xfTt0''@;'; put 'put ''aGlzLnJvd3MucHVzaChkKSx0aGlzLmNvbnRhaW5lcj10aGlzLmNyZWF0ZUNvbnRhaW5lcih0aGlzLmhvdC5yb290RWxlbWVudC5jbGFzc05hbWUpLHRoaXMuc2FtcGxlcz1sLHRoaXMudGFibGU9dGhpcy5jcmVhdGVUYWJsZSh0aGlzLmhvdC50YWJsZS5jbGFzc05hbWUpLHRoaXMudGFibGUu''@;'; put 'put ''Y29sR3JvdXAuYXBwZW5kQ2hpbGQodGhpcy5jcmVhdGVDb2xHcm91cHNDb2woKSksdGhpcy5hcHBlbmRDb2x1bW5IZWFkZXJzUm93KCksdGhpcy5jb250YWluZXIuY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMudGFibGUuZnJhZ21lbnQpLGQudGFibGU9dGhpcy50YWJsZS50YWJsZX19YWRk''@;'; put 'put ''Q29sdW1uKGwsYSl7aWYodGhpcy5yb3dzLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIkRvZXNuJ3Qgc3VwcG9ydCBtdWx0aS1kaW1lbnNpb25hbCB0YWJsZSIpO3RoaXMuY29sdW1ucy5sZW5ndGh8fCh0aGlzLmNvbnRhaW5lcj10aGlzLmNyZWF0ZUNvbnRhaW5lcih0aGlzLmhvdC5yb290RWxl''@;'; put 'put ''bWVudC5jbGFzc05hbWUpKTtjb25zdCBkPXtjb2w6bH07dGhpcy5jb2x1bW5zLnB1c2goZCksdGhpcy5zYW1wbGVzPWEsdGhpcy50YWJsZT10aGlzLmNyZWF0ZVRhYmxlKHRoaXMuaG90LnRhYmxlLmNsYXNzTmFtZSksdGhpcy5nZXRTZXR0aW5nKCJ1c2VIZWFkZXJzIikmJm51bGwhPT10aGlz''@;'; put 'put ''LmhvdC5nZXRDb2xIZWFkZXIobCkmJnRoaXMuaG90LnZpZXcuYXBwZW5kQ29sSGVhZGVyKGwsdGhpcy50YWJsZS50aCx2b2lkIDAsLTEpLHRoaXMudGFibGUudEJvZHkuYXBwZW5kQ2hpbGQodGhpcy5jcmVhdGVDb2wobCkpLHRoaXMuY29udGFpbmVyLmNvbnRhaW5lci5hcHBlbmRDaGlsZCh0''@;'; put 'put ''aGlzLnRhYmxlLmZyYWdtZW50KSxkLnRhYmxlPXRoaXMudGFibGUudGFibGV9Z2V0SGVpZ2h0cyhsKXt0aGlzLmluamVjdGVkfHx0aGlzLmluamVjdFRhYmxlKCksWW4odGhpcy5yb3dzLGE9Pntjb25zdHtoZWlnaHQ6ZH09YS50YWJsZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtsKGEucm93''@;'; put 'put ''LE1hdGguY2VpbChkKSl9KX1nZXRXaWR0aHMobCl7dGhpcy5pbmplY3RlZHx8dGhpcy5pbmplY3RUYWJsZSgpLFluKHRoaXMuY29sdW1ucyxhPT57Y29uc3R7d2lkdGg6ZH09YS50YWJsZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtsKGEuY29sLE1hdGguY2VpbChkKSl9KX1zZXRTZXR0aW5n''@;'; put 'put ''cyhsKXt0aGlzLnNldHRpbmdzPWx9c2V0U2V0dGluZyhsLGEpe3RoaXMuc2V0dGluZ3N8fCh0aGlzLnNldHRpbmdzPXt9KSx0aGlzLnNldHRpbmdzW2xdPWF9Z2V0U2V0dGluZ3MoKXtyZXR1cm4gdGhpcy5zZXR0aW5nc31nZXRTZXR0aW5nKGwpe3JldHVybiB0aGlzLnNldHRpbmdzP3RoaXMu''@;'; put 'put ''c2V0dGluZ3NbbF06bnVsbH1jcmVhdGVDb2xHcm91cHNDb2wobCl7Y29uc3QgYT10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO3JldHVybiB0aGlzLmhvdC5oYXNSb3dIZWFkZXJzKCkmJmEuYXBwZW5kQ2hpbGQodGhpcy5jcmVhdGVDb2xFbGVtZW50KC0x''@;'; put 'put ''LC0xKSksdGhpcy5zYW1wbGVzLmZvckVhY2goZD0+e1luKGQuc3RyaW5ncyxoPT57YS5hcHBlbmRDaGlsZCh0aGlzLmNyZWF0ZUNvbEVsZW1lbnQoaC5jb2wsbCkpfSl9KSxhfWNyZWF0ZVJvdyhsKXtjb25zdHtyb290RG9jdW1lbnQ6YX09dGhpcy5ob3QsZD1hLmNyZWF0ZURvY3VtZW50RnJh''@;'; put 'put ''Z21lbnQoKSxoPWEuY3JlYXRlRWxlbWVudCgidGgiKTtyZXR1cm4gdGhpcy5ob3QuaGFzUm93SGVhZGVycygpJiYodGhpcy5ob3Qudmlldy5hcHBlbmRSb3dIZWFkZXIobCxoKSxkLmFwcGVuZENoaWxkKGgpKSx0aGlzLnNhbXBsZXMuZm9yRWFjaChmPT57WW4oZi5zdHJpbmdzLHY9Pntjb25z''@;'; put 'put ''dCBNPXYuY29sLEQ9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEobCxNKSxaPXRoaXMuaG90LmdldENlbGxSZW5kZXJlcihEKSxyZT1hLmNyZWF0ZUVsZW1lbnQoInRkIik7cmUuc2V0QXR0cmlidXRlKCJnaG9zdC10YWJsZSIsMSksWih0aGlzLmhvdCxyZSxsLE0sdGhpcy5ob3QuY29sVG9Qcm9wKE0p''@;'; put 'put ''LHYudmFsdWUsRCksZC5hcHBlbmRDaGlsZChyZSl9KX0pLGR9YXBwZW5kQ29sdW1uSGVhZGVyc1Jvdygpe2NvbnN0e3Jvb3REb2N1bWVudDpsfT10aGlzLmhvdCxhPWwuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLGQ9W107aWYodGhpcy5ob3QuaGFzUm93SGVhZGVycygpKXtjb25zdCBoPWwu''@;'; put 'put ''Y3JlYXRlRWxlbWVudCgidGgiKTtkLnB1c2goWy0xLGhdKSxhLmFwcGVuZENoaWxkKGgpfXRoaXMuc2FtcGxlcy5mb3JFYWNoKGg9PntZbihoLnN0cmluZ3MsZj0+e2NvbnN0IHY9Zi5jb2wsTT1sLmNyZWF0ZUVsZW1lbnQoInRoIik7ZC5wdXNoKFt2LE1dKSxhLmFwcGVuZENoaWxkKE0pfSl9''@;'; put 'put ''KSx0aGlzLnRhYmxlLnRIZWFkLmFwcGVuZENoaWxkKGEpLFluKGQsaD0+e2NvbnN0W2Ysdl09aDt0aGlzLmhvdC52aWV3LmFwcGVuZENvbEhlYWRlcihmLHYpfSl9Y3JlYXRlQ29sKGwpe2NvbnN0e3Jvb3REb2N1bWVudDphfT10aGlzLmhvdCxkPWEuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgp''@;'; put 'put ''O3JldHVybiB0aGlzLnNhbXBsZXMuZm9yRWFjaChoPT57WW4oaC5zdHJpbmdzLGY9Pntjb25zdCB2PWYucm93LE09dGhpcy5ob3QuZ2V0Q2VsbE1ldGEodixsKSxEPXRoaXMuaG90LmdldENlbGxSZW5kZXJlcihNKSxaPWEuY3JlYXRlRWxlbWVudCgidGQiKSxyZT1hLmNyZWF0ZUVsZW1lbnQo''@;'; put 'put ''InRyIik7Wi5zZXRBdHRyaWJ1dGUoImdob3N0LXRhYmxlIiwxKSxEKHRoaXMuaG90LFosdixsLHRoaXMuaG90LmNvbFRvUHJvcChsKSxmLnZhbHVlLE0pLHJlLmFwcGVuZENoaWxkKFopLGQuYXBwZW5kQ2hpbGQocmUpfSl9KSxkfWNsZWFuKCl7dGhpcy5yb3dzLmxlbmd0aD0wLHRoaXMucm93''@;'; put 'put ''c1stMV09dm9pZCAwLHRoaXMuY29sdW1ucy5sZW5ndGg9MCx0aGlzLnNhbXBsZXMmJnRoaXMuc2FtcGxlcy5jbGVhcigpLHRoaXMuc2FtcGxlcz1udWxsLHRoaXMucmVtb3ZlVGFibGUoKX1pbmplY3RUYWJsZSgpe3RoaXMuaW5qZWN0ZWR8fCgoKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAw''@;'; put 'put ''IT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpudWxsKXx8dGhpcy5ob3Qucm9vdEVsZW1lbnQpLmFwcGVuZENoaWxkKHRoaXMuY29udGFpbmVyLmZyYWdtZW50KSx0aGlzLmluamVjdGVkPSEwKX1yZW1vdmVUYWJsZSgpe3RoaXMuaW5qZWN0ZWQmJnRoaXMuY29udGFpbmVyLmNvbnRhaW5l''@;'; put 'put ''ci5wYXJlbnROb2RlJiYodGhpcy5jb250YWluZXIuY29udGFpbmVyLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5jb250YWluZXIuY29udGFpbmVyKSx0aGlzLmNvbnRhaW5lcj1udWxsLHRoaXMuaW5qZWN0ZWQ9ITEpfWNyZWF0ZUNvbEVsZW1lbnQobCxhKXtjb25zdCBkPXRoaXMuaG90''@;'; put 'put ''LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjb2wiKTtsZXQgaD0wO2E+PTAmJmw+PTAmJihoPXRoaXMuaG90LmdldENlbGxNZXRhKGEsbCkuY29sc3Bhbik7bGV0IGY9dGhpcy5ob3QuZ2V0Q29sV2lkdGgobCk7aWYoaD4xKWZvcihsZXQgdj1sKzE7djxsK2g7disrKWYrPXRoaXMuaG90''@;'; put 'put ''LmdldENvbFdpZHRoKHYpO3JldHVybiBkLnN0eWxlLndpZHRoPWAke2Z9cHhgLGR9Y3JlYXRlVGFibGUoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06IiI7Y29uc3R7cm9vdERvY3VtZW50OmF9PXRoaXMuaG90LGQ9YS5jcmVh''@;'; put 'put ''dGVEb2N1bWVudEZyYWdtZW50KCksaD1hLmNyZWF0ZUVsZW1lbnQoInRhYmxlIiksZj1hLmNyZWF0ZUVsZW1lbnQoInRoZWFkIiksdj1hLmNyZWF0ZUVsZW1lbnQoInRib2R5IiksTT1hLmNyZWF0ZUVsZW1lbnQoImNvbGdyb3VwIiksRD1hLmNyZWF0ZUVsZW1lbnQoInRyIiksWj1hLmNyZWF0''@;'; put 'put ''ZUVsZW1lbnQoInRoIik7cmV0dXJuIHRoaXMuaXNWZXJ0aWNhbCgpJiZoLmFwcGVuZENoaWxkKE0pLHRoaXMuaXNIb3Jpem9udGFsKCkmJihELmFwcGVuZENoaWxkKFopLGYuYXBwZW5kQ2hpbGQoRCksaC5zdHlsZS50YWJsZUxheW91dD0iYXV0byIsaC5zdHlsZS53aWR0aD0iYXV0byIpLGgu''@;'; put 'put ''YXBwZW5kQ2hpbGQoZiksdGhpcy5pc1ZlcnRpY2FsKCkmJnYuYXBwZW5kQ2hpbGQoRCksaC5hcHBlbmRDaGlsZCh2KSxUaShoLGwpLGQuYXBwZW5kQ2hpbGQoaCkse2ZyYWdtZW50OmQsdGFibGU6aCx0SGVhZDpmLHRCb2R5OnYsY29sR3JvdXA6TSx0cjpELHRoOlp9fWNyZWF0ZUNvbnRhaW5l''@;'; put 'put ''cigpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXToiIjtjb25zdHtyb290RG9jdW1lbnQ6YX09dGhpcy5ob3QsZD1hLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxoPWEuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIFRpKGgs''@;'; put 'put ''YGh0R2hvc3RUYWJsZSBodEF1dG9TaXplICR7bC50cmltKCl9YCksZC5hcHBlbmRDaGlsZChoKSx7ZnJhZ21lbnQ6ZCxjb250YWluZXI6aH19aXNWZXJ0aWNhbCgpe3JldHVybiEoIXRoaXMucm93cy5sZW5ndGh8fHRoaXMuY29sdW1ucy5sZW5ndGgpfWlzSG9yaXpvbnRhbCgpe3JldHVybiEo''@;'; put 'put ''IXRoaXMuY29sdW1ucy5sZW5ndGh8fHRoaXMucm93cy5sZW5ndGgpfX07ZnVuY3Rpb24gSlAoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIFJzdChjKXt2YXIgbD1mdW5jdGlvbiBMc3QoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJp''@;'; put 'put ''bWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5n''@;'; put 'put ''Ij09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxj''@;'; put 'put ''fWNsYXNzIGhKe3N0YXRpYyBnZXQgU0FNUExFX0NPVU5UKCl7cmV0dXJuIDN9Y29uc3RydWN0b3IobCl7SlAodGhpcywic2FtcGxlcyIsbnVsbCksSlAodGhpcywiZGF0YUZhY3RvcnkiLG51bGwpLEpQKHRoaXMsImN1c3RvbVNhbXBsZUNvdW50IixudWxsKSxKUCh0aGlzLCJhbGxvd0R1cGxp''@;'; put 'put ''Y2F0ZXMiLCExKSx0aGlzLmRhdGFGYWN0b3J5PWx9Z2V0U2FtcGxlQ291bnQoKXtyZXR1cm4gdGhpcy5jdXN0b21TYW1wbGVDb3VudD90aGlzLmN1c3RvbVNhbXBsZUNvdW50OmhKLlNBTVBMRV9DT1VOVH1zZXRTYW1wbGVDb3VudChsKXt0aGlzLmN1c3RvbVNhbXBsZUNvdW50PWx9c2V0QWxs''@;'; put 'put ''b3dEdXBsaWNhdGVzKGwpe3RoaXMuYWxsb3dEdXBsaWNhdGVzPWx9Z2VuZXJhdGVSb3dTYW1wbGVzKGwsYSl7cmV0dXJuIHRoaXMuZ2VuZXJhdGVTYW1wbGVzKCJyb3ciLGEsbCl9Z2VuZXJhdGVDb2x1bW5TYW1wbGVzKGwsYSl7cmV0dXJuIHRoaXMuZ2VuZXJhdGVTYW1wbGVzKCJjb2wiLGEs''@;'; put 'put ''bCl9Z2VuZXJhdGVTYW1wbGVzKGwsYSxkKXtjb25zdCBoPW5ldyBNYXAse2Zyb206Zix0bzp2fT0ibnVtYmVyIj09dHlwZW9mIGQ/e2Zyb206ZCx0bzpkfTpkO3JldHVybiBHYShmLHYsTT0+e2NvbnN0IEQ9dGhpcy5nZW5lcmF0ZVNhbXBsZShsLGEsTSk7aC5zZXQoTSxEKX0pLGh9Z2VuZXJh''@;'; put 'put ''dGVTYW1wbGUobCxhLGQpe2lmKCJyb3ciIT09bCYmImNvbCIhPT1sKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgc2FtcGxlIHR5cGUiKTtjb25zdCBoPW5ldyBNYXAsZj0icm93Ij09PWw/ImNvbCI6InJvdyIsdj1bXTtyZXR1cm4gR2EoYS5mcm9tLGEudG8sTT0+e2NvbnN0IEQ9InJv''@;'; put 'put ''dyI9PT1sP3RoaXMuZGF0YUZhY3RvcnkoZCxNKTp0aGlzLmRhdGFGYWN0b3J5KE0sZCk7aWYoITE9PT1EKXJldHVybjtjb25zdHt2YWx1ZTpaLGJ1bmRsZVNlZWQ6cmV9PUQsY2U9InN0cmluZyI9PXR5cGVvZiByZSYmcmUubGVuZ3RoPjA7bGV0IGJlO2JlPWNlP3JlOnFvKFopP2Ake09iamVj''@;'; put 'put ''dC5rZXlzKFopLmxlbmd0aH1gOkFycmF5LmlzQXJyYXkoWik/YCR7Wi5sZW5ndGh9YDpgJHtsYyhaKS5sZW5ndGh9YCxoLmhhcyhiZSl8fGguc2V0KGJlLHtuZWVkZWQ6dGhpcy5nZXRTYW1wbGVDb3VudCgpLHN0cmluZ3M6W119KTtjb25zdCBFZT1oLmdldChiZSk7RWUubmVlZGVkJiYoISh2''@;'; put 'put ''LmluZGV4T2YoWik+LTEpfHx0aGlzLmFsbG93RHVwbGljYXRlc3x8Y2UpJiYoRWUuc3RyaW5ncy5wdXNoKHt2YWx1ZTpaLFtmXTpNfSksdi5wdXNoKFopLEVlLm5lZWRlZC09MSl9KSxofX1jb25zdCBNNGU9aEo7ZnVuY3Rpb24gZkooYyxsLGEpe3g0ZShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rp''@;'; put 'put ''b24geDRlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiB1VChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gUHN0KGMpe3ZhciBsPWZ1bmN0''@;'; put 'put ''aW9uIEZzdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBl''@;'; put 'put ''RXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVy''@;'; put 'put ''dHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24gS20oYyxsKXtyZXR1cm4gYy5nZXQoemQoYyxsKSl9ZnVuY3Rpb24gUVAoYyxsLGEpe3JldHVybiBjLnNldCh6ZChjLGwpLGEpLGF9ZnVuY3Rpb24gemQo''@;'; put 'put ''YyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfVNhLmdldFNpbmdsZXRvbigpLnJl''@;'; put 'put ''Z2lzdGVyKCJtb2RpZnlBdXRvQ29sdW1uU2l6ZVNlZWQiKTtjb25zdCBwSj0iYXV0b0NvbHVtblNpemUiO3ZhciBnSj1uZXcgV2Vha01hcCxIXz1uZXcgV2Vha01hcCxOXz1uZXcgV2Vha01hcCxPaD1uZXcgV2Vha1NldDtjbGFzcyBkVCBleHRlbmRzIEZze3N0YXRpYyBnZXQgUExVR0lOX0tF''@;'; put 'put ''WSgpe3JldHVybiBwSn1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAxMH1zdGF0aWMgZ2V0IFNFVFRJTkdfS0VZUygpe3JldHVybiEwfXN0YXRpYyBnZXQgREVGQVVMVF9TRVRUSU5HUygpe3JldHVybnt1c2VIZWFkZXJzOiEwLHNhbXBsaW5nUmF0aW86bnVsbCxhbGxvd1Nh''@;'; put 'put ''bXBsZUR1cGxpY2F0ZXM6ITF9fXN0YXRpYyBnZXQgQ0FMQ1VMQVRJT05fU1RFUCgpe3JldHVybiA1MH1zdGF0aWMgZ2V0IFNZTkNfQ0FMQ1VMQVRJT05fTElNSVQoKXtyZXR1cm4gNTB9Y29uc3RydWN0b3IobCl7c3VwZXIobCksZnVuY3Rpb24gT3N0KGMsbCl7eDRlKGMsbCksbC5hZGQoYyl9''@;'; put 'put ''KHRoaXMsT2gpLHVUKHRoaXMsImdob3N0VGFibGUiLG5ldyBkSih0aGlzLmhvdCkpLHVUKHRoaXMsInNhbXBsZXNHZW5lcmF0b3IiLG5ldyBNNGUoKGEsZCk9Pntjb25zdCBoPXRoaXMuaG90LnRvUGh5c2ljYWxSb3coYSksZj10aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGQpO2lmKHRoaXMu''@;'; put 'put ''aG90LnJvd0luZGV4TWFwcGVyLmlzSGlkZGVuKGgpfHx0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5pc0hpZGRlbihmKSlyZXR1cm4hMTtjb25zdCB2PXRoaXMuaG90LmdldENlbGxNZXRhKGEsZCk7bGV0IE09IiI7di5zcGFubmVkfHwoTT10aGlzLmhvdC5nZXREYXRhQXRDZWxsKGEsZCkp''@;'; put 'put ''O2xldCBEPSIiO3JldHVybiB0aGlzLmhvdC5oYXNIb29rKCJtb2RpZnlBdXRvQ29sdW1uU2l6ZVNlZWQiKSYmKEQ9dGhpcy5ob3QucnVuSG9va3MoIm1vZGlmeUF1dG9Db2x1bW5TaXplU2VlZCIsRCx2LE0pKSx7dmFsdWU6TSxidW5kbGVTZWVkOkR9fSkpLHVUKHRoaXMsImluUHJvZ3Jlc3Mi''@;'; put 'put ''LCExKSx1VCh0aGlzLCJtZWFzdXJlZENvbHVtbnMiLDApLHVUKHRoaXMsImNvbHVtbldpZHRoc01hcCIsbmV3IFptKSxmSih0aGlzLGdKLCExKSxmSih0aGlzLEhfLFtdKSxmSih0aGlzLE5fLFtdKSx0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5yZWdpc3Rlck1hcCgiYXV0b0NvbHVtblNp''@;'; put 'put ''emUiLHRoaXMuY29sdW1uV2lkdGhzTWFwKSx0aGlzLmFkZEhvb2soImJlZm9yZUNvbHVtblJlc2l6ZSIsKGEsZCxoKT0+emQoT2gsdGhpcyxBNGUpLmNhbGwodGhpcyxhLGQsaCkpfWlzRW5hYmxlZCgpe3JldHVybiExIT09dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtwSl0mJiF0aGlzLmhvdC5n''@;'; put 'put ''ZXRTZXR0aW5ncygpLmNvbFdpZHRoc31lbmFibGVQbHVnaW4oKXt2YXIgbD10aGlzO2lmKHRoaXMuZW5hYmxlZClyZXR1cm47dGhpcy5naG9zdFRhYmxlLnNldFNldHRpbmcoInVzZUhlYWRlcnMiLHRoaXMuZ2V0U2V0dGluZygidXNlSGVhZGVycyIpKSx0aGlzLnNhbXBsZXNHZW5lcmF0b3Iu''@;'; put 'put ''c2V0QWxsb3dEdXBsaWNhdGVzKHRoaXMuZ2V0U2V0dGluZygiYWxsb3dTYW1wbGVEdXBsaWNhdGVzIikpO2NvbnN0IGE9dGhpcy5nZXRTZXR0aW5nKCJzYW1wbGluZ1JhdGlvIik7YSYmIWlzTmFOKGEpJiZ0aGlzLnNhbXBsZXNHZW5lcmF0b3Iuc2V0U2FtcGxlQ291bnQocGFyc2VJbnQoYSwx''@;'; put 'put ''MCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJMb2FkRGF0YSIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gemQoT2gsbCxqc3QpLmNhbGwobCwuLi5oKX0pLHRoaXMuYWRkSG9vaygi''@;'; put 'put ''YmVmb3JlQ2hhbmdlUmVuZGVyIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiB6ZChPaCxsLHpzdCkuY2FsbChsLC4uLmgpfSksdGhpcy5hZGRIb29rKCJhZnRlckZvcm11bGFz''@;'; put 'put ''VmFsdWVzVXBkYXRlIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiB6ZChPaCxsLFpzdCkuY2FsbChsLC4uLmgpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVSZW5kZXIiLCgpPT56''@;'; put 'put ''ZChPaCx0aGlzLEJzdCkuY2FsbCh0aGlzKSksdGhpcy5hZGRIb29rKCJtb2RpZnlDb2xXaWR0aCIsKGQsaCk9PnRoaXMuZ2V0Q29sdW1uV2lkdGgoaCxkKSksdGhpcy5hZGRIb29rKCJpbml0IiwoKT0+emQoT2gsdGhpcyxVc3QpLmNhbGwodGhpcykpLHN1cGVyLmVuYWJsZVBsdWdpbigpfXVw''@;'; put 'put ''ZGF0ZVBsdWdpbigpe1FQKE5fLHRoaXMsdGhpcy5maW5kQ29sdW1uc1doZXJlSGVhZGVyV2FzQ2hhbmdlZCgpKSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7c3VwZXIuZGlzYWJsZVBsdWdpbigpLHRoaXMuYWRkSG9vaygiYmVmb3JlQ29sdW1uUmVzaXplIiwobCxhLGQp''@;'; put 'put ''PT56ZChPaCx0aGlzLEE0ZSkuY2FsbCh0aGlzLGwsYSxkKSl9Y2FsY3VsYXRlVmlzaWJsZUNvbHVtbnNXaWR0aCgpe2lmKCF0aGlzLmhvdC5jb3VudFJvd3MoKSlyZXR1cm47Y29uc3QgbD10aGlzLmdldEZpcnN0VmlzaWJsZUNvbHVtbigpLGE9dGhpcy5nZXRMYXN0VmlzaWJsZUNvbHVtbigp''@;'; put 'put ''Oy0xIT09bCYmLTEhPT1hJiZ0aGlzLmNhbGN1bGF0ZUNvbHVtbnNXaWR0aCh7ZnJvbTpsLHRvOmF9LHZvaWQgMCx0aGlzLmhvdC5mb3JjZUZ1bGxSZW5kZXIpfWNhbGN1bGF0ZUNvbHVtbnNXaWR0aCgpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2Fy''@;'; put 'put ''Z3VtZW50c1swXTp7ZnJvbTowLHRvOnRoaXMuaG90LmNvdW50Q29scygpLTF9LGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOntmcm9tOjAsdG86dGhpcy5ob3QuY291bnRSb3dzKCktMX0sZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQg''@;'; put 'put ''MCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdO2NvbnN0IGg9Im51bWJlciI9PXR5cGVvZiBsP3tmcm9tOmwsdG86bH06bCxmPSJudW1iZXIiPT10eXBlb2YgYT97ZnJvbTphLHRvOmF9OmE7R2EoaC5mcm9tLGgudG8sdj0+e2xldCBNPXRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4odik7''@;'; put 'put ''bnVsbD09PU0mJihNPXYpLChkfHxudWxsPT09dGhpcy5jb2x1bW5XaWR0aHNNYXAuZ2V0VmFsdWVBdEluZGV4KE0pJiYhdGhpcy5ob3QuX2dldENvbFdpZHRoRnJvbVNldHRpbmdzKE0pKSYmemQoT2gsdGhpcyxFNGUpLmNhbGwodGhpcyx2LGYpfSksdGhpcy5naG9zdFRhYmxlLmNvbHVtbnMu''@;'; put 'put ''bGVuZ3RoJiYoemQoT2gsdGhpcyxUNGUpLmNhbGwodGhpcyksdGhpcy5tZWFzdXJlZENvbHVtbnM9aC50bysxLHRoaXMuZ2hvc3RUYWJsZS5jbGVhbigpKX1jYWxjdWxhdGVBbGxDb2x1bW5zV2lkdGgoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9h''@;'; put 'put ''cmd1bWVudHNbMF06e2Zyb206MCx0bzp0aGlzLmhvdC5jb3VudFJvd3MoKS0xfSxhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV0sZD0wO2NvbnN0IGg9dGhpcy5ob3QuY291bnRDb2xzKCktMTtsZXQgZj1udWxsO3RoaXMuaW5Qcm9ncmVz''@;'; put 'put ''cz0hMDtjb25zdCB2PSgpPT57aWYoIXRoaXMuaG90KXJldHVybiBURShmKSx2b2lkKHRoaXMuaW5Qcm9ncmVzcz0hMSk7dGhpcy5jYWxjdWxhdGVDb2x1bW5zV2lkdGgoe2Zyb206ZCx0bzpNYXRoLm1pbihkK2RULkNBTENVTEFUSU9OX1NURVAsaCl9LGwsYSksZD1kK2RULkNBTENVTEFUSU9O''@;'; put 'put ''X1NURVArMSxkPGg/Zj1FRSh2KTooVEUoZiksdGhpcy5pblByb2dyZXNzPSExLHRoaXMuaG90LnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCkpfSxNPXRoaXMuZ2V0U3luY0NhbGN1bGF0aW9uTGltaXQoKTtNPj0wJiYodGhpcy5jYWxjdWxhdGVDb2x1bW5zV2lkdGgoe2Zyb206MCx0bzpNfSxs''@;'; put 'put ''LGEpLGQ9TSsxKSxkPGg/digpOnRoaXMuaW5Qcm9ncmVzcz0hMX1yZWNhbGN1bGF0ZUFsbENvbHVtbnNXaWR0aCgpe3RoaXMuaG90LnZpZXcuaXNWaXNpYmxlKCkmJnRoaXMuY2FsY3VsYXRlQWxsQ29sdW1uc1dpZHRoKHtmcm9tOjAsdG86dGhpcy5ob3QuY291bnRSb3dzKCktMX0sITApfWdl''@;'; put 'put ''dFN5bmNDYWxjdWxhdGlvbkxpbWl0KCl7Y29uc3QgbD10aGlzLmhvdC5nZXRTZXR0aW5ncygpW3BKXTtsZXQgYT1kVC5TWU5DX0NBTENVTEFUSU9OX0xJTUlUO2NvbnN0IGQ9dGhpcy5ob3QuY291bnRDb2xzKCktMTtyZXR1cm4gcW8obCkmJihhPWwuc3luY0xpbWl0LGYkKGEpP2E9SiQoZCxh''@;'; put 'put ''KTphPj49MCksTWF0aC5taW4oYSxkKX1nZXRDb2x1bW5XaWR0aChsLGEpe2xldCBkPSEoYXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0pfHxhcmd1bWVudHNbMl0saD1hO3JldHVybiB2b2lkIDA9PT1oJiYoaD10aGlzLmNvbHVtbldpZHRoc01hcC5nZXRWYWx1ZUF0''@;'; put 'put ''SW5kZXgodGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihsKSksZCYmIm51bWJlciI9PXR5cGVvZiBoJiYoaD1NYXRoLm1heChoLF9fKSkpLGh9Z2V0Rmlyc3RWaXNpYmxlQ29sdW1uKCl7dmFyIGw7cmV0dXJuIG51bGwhPT0obD10aGlzLmhvdC5nZXRGaXJzdFJlbmRlcmVkVmlzaWJsZUNvbHVt''@;'; put 'put ''bigpKSYmdm9pZCAwIT09bD9sOi0xfWdldExhc3RWaXNpYmxlQ29sdW1uKCl7dmFyIGw7cmV0dXJuIG51bGwhPT0obD10aGlzLmhvdC5nZXRMYXN0UmVuZGVyZWRWaXNpYmxlQ29sdW1uKCkpJiZ2b2lkIDAhPT1sP2w6LTF9ZmluZENvbHVtbnNXaGVyZUhlYWRlcldhc0NoYW5nZWQoKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5ob3QuZ2V0Q29sSGVhZGVyKCkucmVkdWNlKChkLGgsZik9Pntjb25zdCB2PUttKEhfLHRoaXMpLmxlbmd0aDtyZXR1cm4odi0xPGZ8fEttKEhfLHRoaXMpW2ZdIT09aCkmJmQucHVzaCh0aGlzLmhvdC50b1Zpc3VhbENvbHVtbihmKSksdi0xPGY/S20oSF8sdGhpcykucHVzaCho''@;'; put 'put ''KTpLbShIXyx0aGlzKVtmXT1oLGR9LFtdKX1jbGVhckNhY2hlKGwpe0FycmF5LmlzQXJyYXkobCk/dGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9PntsLmZvckVhY2goYT0+e3RoaXMuY29sdW1uV2lkdGhzTWFwLnNldFZhbHVlQXRJbmRleChhLG51bGwpfSl9LCEwKTp0aGlzLmNvbHVtbldp''@;'; put 'put ''ZHRoc01hcC5jbGVhcigpfWlzTmVlZFJlY2FsY3VsYXRlKCl7cmV0dXJuISF0aGlzLmNvbHVtbldpZHRoc01hcC5nZXRWYWx1ZXMoKS5zbGljZSgwLHRoaXMubWVhc3VyZWRDb2x1bW5zKS5maWx0ZXIobD0+bnVsbD09PWwpLmxlbmd0aH1kZXN0cm95KCl7dGhpcy5naG9zdFRhYmxlLmNsZWFu''@;'; put 'put ''KCksc3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiBWc3QoYyl7Y29uc3QgbD17ZnJvbTowLHRvOnRoaXMuaG90LmNvdW50Um93cygpLTF9O2MuZm9yRWFjaChhPT57Y29uc3QgZD10aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGEpO251bGwhPT1kJiYodGhpcy5ob3QuX2dldENvbFdpZHRoRnJv''@;'; put 'put ''bVNldHRpbmdzKGQpfHx6ZChPaCx0aGlzLEU0ZSkuY2FsbCh0aGlzLGEsbCkpfSksdGhpcy5naG9zdFRhYmxlLmNvbHVtbnMubGVuZ3RoJiYoemQoT2gsdGhpcyxUNGUpLmNhbGwodGhpcyksdGhpcy5naG9zdFRhYmxlLmNsZWFuKCkpfWZ1bmN0aW9uIEU0ZShjLGwpe3RoaXMuc2FtcGxlc0dl''@;'; put 'put ''bmVyYXRvci5nZW5lcmF0ZUNvbHVtblNhbXBsZXMoYyxsKS5mb3JFYWNoKChkLGgpPT50aGlzLmdob3N0VGFibGUuYWRkQ29sdW1uKGgsZCkpfWZ1bmN0aW9uIFQ0ZSgpe3RoaXMuaG90LmJhdGNoRXhlY3V0aW9uKCgpPT57dGhpcy5naG9zdFRhYmxlLmdldFdpZHRocygoYyxsKT0+e2NvbnN0''@;'; put 'put ''IGE9dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihjKTt0aGlzLmNvbHVtbldpZHRoc01hcC5zZXRWYWx1ZUF0SW5kZXgoYSxsKX0pfSwhMCl9ZnVuY3Rpb24gQnN0KCl7dGhpcy5jYWxjdWxhdGVWaXNpYmxlQ29sdW1uc1dpZHRoKCksdGhpcy5pblByb2dyZXNzfHwoemQoT2gsdGhpcyxWc3Qp''@;'; put 'put ''LmNhbGwodGhpcyxLbShOXyx0aGlzKSksUVAoTl8sdGhpcyxbXSkpfWZ1bmN0aW9uIGpzdChjLGwpe2x8fHRoaXMucmVjYWxjdWxhdGVBbGxDb2x1bW5zV2lkdGgoKX1mdW5jdGlvbiB6c3QoYyl7Y29uc3QgbD1jLnJlZHVjZSgoYSxkKT0+e2xldFssaF09ZDtjb25zdCBmPXRoaXMuaG90LnBy''@;'; put 'put ''b3BUb0NvbChoKTtyZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihmKSYmLTE9PT1hLmluZGV4T2YoZikmJmEucHVzaChmKSxhfSxbXSk7S20oTl8sdGhpcykucHVzaCguLi5sKX1mdW5jdGlvbiBBNGUoYyxsLGEpe2xldCBkPWM7cmV0dXJuIGEmJih0aGlzLmNhbGN1bGF0ZUNvbHVtbnNXaWR0aChs''@;'; put 'put ''LHZvaWQgMCwhMCksZD10aGlzLmdldENvbHVtbldpZHRoKGwsdm9pZCAwLCExKSksZH1mdW5jdGlvbiBVc3QoKXtRUChIXyx0aGlzLHRoaXMuaG90LmdldENvbEhlYWRlcigpKSx0aGlzLnJlY2FsY3VsYXRlQWxsQ29sdW1uc1dpZHRoKCksUVAoZ0osdGhpcywhMCl9ZnVuY3Rpb24gWnN0KGMp''@;'; put 'put ''e2lmKCFLbShnSix0aGlzKSlyZXR1cm47Y29uc3QgbD1jLnJlZHVjZSgoYSxkKT0+e3ZhciBoO2NvbnN0IGY9bnVsbD09PShoPWQuYWRkcmVzcyl8fHZvaWQgMD09PWg/dm9pZCAwOmguY29sO2lmKE51bWJlci5pc0ludGVnZXIoZikpe2NvbnN0IHY9dGhpcy5ob3QudG9WaXN1YWxDb2x1bW4o''@;'; put 'put ''Zik7LTE9PT1hLmluZGV4T2YodikmJmEucHVzaCh2KX1yZXR1cm4gYX0sW10pO0ttKE5fLHRoaXMpLnB1c2goLi4ubCl9Y29uc3QgaDk9e2hvcml6b250YWw6Imhvcml6b250YWwiLHZlcnRpY2FsOiJ2ZXJ0aWNhbCJ9O2Z1bmN0aW9uIFZfKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBLc3Qo''@;'; put 'put ''Yyl7dmFyIGw9ZnVuY3Rpb24gcXN0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7''@;'; put 'put ''dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVj''@;'; put 'put ''dC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBoVChjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8''@;'; put 'put ''Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9U2EuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoIm1vZGlmeUF1dG9maWxsUmFuZ2UiKSxTYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVmb3JlQXV0b2Zp''@;'; put 'put ''bGwiKSxTYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJBdXRvZmlsbCIpO2NvbnN0IEpzdD1bImZpbGxIYW5kbGUiXTt2YXIgQl89bmV3IFdlYWtTZXQ7Y2xhc3MgdGx0IGV4dGVuZHMgRnN7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIEdzdChjLGwp''@;'; put 'put ''eyhmdW5jdGlvbiAkc3QoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLmFkZChjKX0odGhpcyxCXyksVl8odGhpcywiYWRkaW5nU3RhcnRl''@;'; put 'put ''ZCIsITEpLFZfKHRoaXMsIm1vdXNlRG93bk9uQ2VsbENvcm5lciIsITEpLFZfKHRoaXMsIm1vdXNlRHJhZ091dHNpZGUiLCExKSxWXyh0aGlzLCJoYW5kbGVEcmFnZ2VkQ2VsbHMiLDApLFZfKHRoaXMsImRpcmVjdGlvbnMiLFtdKSxWXyh0aGlzLCJhdXRvSW5zZXJ0Um93IiwhMSl9c3RhdGlj''@;'; put 'put ''IGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuImF1dG9maWxsIn1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAyMH1zdGF0aWMgZ2V0IFNFVFRJTkdfS0VZUygpe3JldHVyblsiYXV0b2ZpbGwiLC4uLkpzdF19aXNFbmFibGVkKCl7cmV0dXJuIHRoaXMuaG90LmdldFNldHRpbmdz''@;'; put 'put ''KCkuZmlsbEhhbmRsZX1lbmFibGVQbHVnaW4oKXt0aGlzLmVuYWJsZWR8fCh0aGlzLm1hcFNldHRpbmdzKCksdGhpcy5yZWdpc3RlckV2ZW50cygpLHRoaXMuYWRkSG9vaygiYWZ0ZXJPbkNlbGxDb3JuZXJNb3VzZURvd24iLGw9PmhUKEJfLHRoaXMscmx0KS5jYWxsKHRoaXMsbCkpLHRoaXMu''@;'; put 'put ''YWRkSG9vaygiYWZ0ZXJPbkNlbGxDb3JuZXJEYmxDbGljayIsbD0+aFQoQl8sdGhpcyxubHQpLmNhbGwodGhpcyxsKSksdGhpcy5hZGRIb29rKCJiZWZvcmVPbkNlbGxNb3VzZU92ZXIiLChsLGEpPT5oVChCXyx0aGlzLGlsdCkuY2FsbCh0aGlzLGEpKSxzdXBlci5lbmFibGVQbHVnaW4oKSl9''@;'; put 'put ''dXBkYXRlUGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7dGhpcy5jbGVhck1hcHBlZFNldHRpbmdzKCksc3VwZXIuZGlzYWJsZVBsdWdpbigpfWdldFNlbGVjdGlvbkRhdGEoKXtjb25z''@;'; put 'put ''dCBsPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkse3JvdzphLGNvbDpkfT1sLmdldFRvcFN0YXJ0Q29ybmVyKCkse3JvdzpoLGNvbDpmfT1sLmdldEJvdHRvbUVuZENvcm5lcigpLHY9dGhpcy5ob3QucnVuSG9va3MoIm1vZGlmeUNvcHlhYmxlUmFuZ2UiLFt7c3RhcnRSb3c6YSxz''@;'; put 'put ''dGFydENvbDpkLGVuZFJvdzpoLGVuZENvbDpmfV0pLE09W10sRD1bXSxaPVtdO3JldHVybiBZbih2LHJlPT57Zm9yKGxldCBjZT1yZS5zdGFydFJvdztjZTw9cmUuZW5kUm93O2NlKz0xKS0xPT09TS5pbmRleE9mKGNlKSYmTS5wdXNoKGNlKTtmb3IobGV0IGNlPXJlLnN0YXJ0Q29sO2NlPD1y''@;'; put 'put ''ZS5lbmRDb2w7Y2UrPTEpLTE9PT1ELmluZGV4T2YoY2UpJiZELnB1c2goY2UpfSksWW4oTSxyZT0+e2NvbnN0IGNlPVtdO1luKEQsYmU9PntjZS5wdXNoKHRoaXMuaG90LmdldENvcHlhYmxlRGF0YShyZSxiZSkpfSksWi5wdXNoKGNlKX0pLFp9ZmlsbEluKCl7aWYodGhpcy5ob3Quc2VsZWN0''@;'; put 'put ''aW9uLmhpZ2hsaWdodC5nZXRGaWxsKCkuaXNFbXB0eSgpKXJldHVybiExO2NvbnN0W2wsYSxkLGhdPXRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuZ2V0RmlsbCgpLmdldFZpc3VhbENvcm5lcnMoKSxmPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksdj1mLmdldFRvcFN0YXJ0''@;'; put 'put ''Q29ybmVyKCksTT1mLmdldEJvdHRvbUVuZENvcm5lcigpO3RoaXMucmVzZXRTZWxlY3Rpb25PZkRyYWdnZWRBcmVhKCk7Y29uc3QgRD1bdi5yb3csdi5jb2wsTS5yb3csTS5jb2xdLFo9dGhpcy5ob3QucnVuSG9va3MoIm1vZGlmeUF1dG9maWxsUmFuZ2UiLFtNYXRoLm1pbih2LnJvdyxsKSxN''@;'; put 'put ''YXRoLm1pbih2LmNvbCxhKSxNYXRoLm1heChNLnJvdyxkKSxNYXRoLm1heChNLmNvbCxoKV0sRCkse2RpcmVjdGlvbk9mRHJhZzpyZSxzdGFydE9mRHJhZ0Nvb3JkczpjZSxlbmRPZkRyYWdDb29yZHM6YmV9PWZ1bmN0aW9uIFdzdChjLGwsYSl7bGV0IGQsaCxmO3JldHVybiBsWzBdPT09Y1sw''@;'; put 'put ''XSYmbFsxXTxjWzFdPyhmPSJsZWZ0IixkPWEobFswXSxsWzFdKSxoPWEobFsyXSxjWzFdLTEpKTpsWzJdPT09Y1syXSYmbFswXT09PWNbMF0mJmxbM10+Y1szXT8oZj0icmlnaHQiLGQ9YShsWzBdLGNbM10rMSksaD1hKGxbMl0sbFszXSkpOmxbMF08Y1swXSYmbFsxXT09PWNbMV0/KGY9InVw''@;'; put 'put ''IixkPWEobFswXSxsWzFdKSxoPWEoY1swXS0xLGxbM10pKTpsWzJdPmNbMl0mJmxbMV09PT1jWzFdJiYoZj0iZG93biIsZD1hKGNbMl0rMSxsWzFdKSxoPWEobFsyXSxsWzNdKSksZCYmZC5ub3JtYWxpemUoKSxoJiZoLm5vcm1hbGl6ZSgpLHtkaXJlY3Rpb25PZkRyYWc6ZixzdGFydE9mRHJh''@;'; put 'put ''Z0Nvb3JkczpkLGVuZE9mRHJhZ0Nvb3JkczpofX0oRCxaLChFZSxCZSk9PnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKEVlLEJlKSk7aWYoY2UmJmNlLnJvdz4tMSYmY2UuY29sPi0xKXtjb25zdCBFZT10aGlzLmdldFNlbGVjdGlvbkRhdGEoKSxCZT1mLmNsb25lKCkscWU9dGhpcy5ob3Qu''@;'; put 'put ''X2NyZWF0ZUNlbGxSYW5nZShjZSxjZSxiZSkscnQ9dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUF1dG9maWxsIixFZSxCZSxxZSxyZSk7aWYoITE9PT1ydClyZXR1cm4gdGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5nZXRGaWxsKCkuY2xlYXIoKSx0aGlzLmhvdC5yZW5kZXIoKSwhMTts''@;'; put 'put ''ZXQgcHQ9cnQ7Y29uc3QgZHQ9cnQ7aWYoWyJ1cCIsImxlZnQiXS5pbmRleE9mKHJlKT4tMSYmKDEhPT1kdC5sZW5ndGh8fDAhPT1kdFswXS5sZW5ndGgpKWlmKHB0PVtdLCJ1cCI9PT1yZSl7Y29uc3QgSnQ9YmUucm93LWNlLnJvdysxLHZuPUp0JWR0Lmxlbmd0aDtmb3IobGV0IENuPTA7Q248''@;'; put 'put ''SnQ7Q24rKylwdC5wdXNoKGR0WyhDbisoZHQubGVuZ3RoLXZuKSklZHQubGVuZ3RoXSl9ZWxzZXtjb25zdCBKdD1iZS5jb2wtY2UuY29sKzEsdm49SnQlZHRbMF0ubGVuZ3RoO2ZvcihsZXQgQ249MDtDbjxkdC5sZW5ndGg7Q24rKyl7cHQucHVzaChbXSk7Zm9yKGxldCB0bj0wO3RuPEp0O3Ru''@;'; put 'put ''KyspcHRbQ25dLnB1c2goZHRbQ25dWyh0bisoZHRbQ25dLmxlbmd0aC12bikpJWR0W0NuXS5sZW5ndGhdKX19dGhpcy5ob3QucG9wdWxhdGVGcm9tQXJyYXkoY2Uucm93LGNlLmNvbCxwdCxiZS5yb3csYmUuY29sLGAke3RoaXMucGx1Z2luTmFtZX0uZmlsbGAsbnVsbCksdGhpcy5zZXRTZWxl''@;'; put 'put ''Y3Rpb24oWiksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyQXV0b2ZpbGwiLHB0LEJlLHFlLHJlKSx0aGlzLmhvdC5yZW5kZXIoKX1lbHNlIHRoaXMuaG90LnZpZXcucmVuZGVyKCk7cmV0dXJuITB9cmVkdWNlU2VsZWN0aW9uQXJlYUlmTmVlZGVkKGwpe3JldHVybiBsLnJvdzwwJiYobC5yb3c9''@;'; put 'put ''MCksbC5jb2w8MCYmKGwuY29sPTApLGx9Z2V0Q29vcmRzT2ZEcmFnQW5kRHJvcEJvcmRlcnMobCl7Y29uc3QgYT10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLGQ9YS5nZXRCb3R0b21FbmRDb3JuZXIoKTtsZXQgaD1sO2lmKHRoaXMuZGlyZWN0aW9ucy5pbmNsdWRlcyhoOS52ZXJ0''@;'; put 'put ''aWNhbCkmJnRoaXMuZGlyZWN0aW9ucy5pbmNsdWRlcyhoOS5ob3Jpem9udGFsKSl7Y29uc3QgZj1hLmdldFRvcFN0YXJ0Q29ybmVyKCk7KGQuY29sPD1sLmNvbHx8Zi5jb2w+PWwuY29sKSYmKGg9dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoZC5yb3csbC5jb2wpKSwoZC5yb3c8bC5yb3d8''@;'; put 'put ''fGYucm93Pmwucm93KSYmKGg9dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobC5yb3csZC5jb2wpKX1lbHNlIGlmKHRoaXMuZGlyZWN0aW9ucy5pbmNsdWRlcyhoOS52ZXJ0aWNhbCkpaD10aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhsLnJvdyxkLmNvbCk7ZWxzZXtpZighdGhpcy5kaXJl''@;'; put 'put ''Y3Rpb25zLmluY2x1ZGVzKGg5Lmhvcml6b250YWwpKXJldHVybjtoPXRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGQucm93LGwuY29sKX1yZXR1cm4gdGhpcy5yZWR1Y2VTZWxlY3Rpb25BcmVhSWZOZWVkZWQoaCl9c2hvd0JvcmRlcihsKXtjb25zdCBhPXRoaXMuZ2V0Q29vcmRzT2ZEcmFn''@;'; put 'put ''QW5kRHJvcEJvcmRlcnMobCk7YSYmdGhpcy5yZWRyYXdCb3JkZXJzKGEpfWFkZFJvdygpe3RoaXMuaG90Ll9yZWdpc3RlclRpbWVvdXQoKCk9Pnt0aGlzLmhvdC5hbHRlcigiaW5zZXJ0X3Jvd19iZWxvdyIsdm9pZCAwLDEsYCR7dGhpcy5wbHVnaW5OYW1lfS5maWxsYCksdGhpcy5hZGRpbmdT''@;'; put 'put ''dGFydGVkPSExfSwyMDApfWFkZE5ld1Jvd0lmTmVlZGVkKCl7aWYoIXRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuZ2V0RmlsbCgpLmlzRW1wdHkoKSYmITE9PT10aGlzLmFkZGluZ1N0YXJ0ZWQmJnRoaXMuYXV0b0luc2VydFJvdyl7Y29uc3QgbD10aGlzLmhvdC5nZXRTZWxlY3RlZExh''@;'; put 'put ''c3QoKSxhPXRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuZ2V0RmlsbCgpLmdldFZpc3VhbENvcm5lcnMoKSxkPXRoaXMuaG90LmNvdW50Um93cygpO2xbMl08ZC0xJiZhWzJdPT09ZC0xJiYodGhpcy5hZGRpbmdTdGFydGVkPSEwLHRoaXMuYWRkUm93KCkpfX1nZXRJbmRleE9mTGFzdEFk''@;'; put 'put ''amFjZW50RmlsbGVkSW5Sb3cobCl7Y29uc3QgYT10aGlzLmhvdC5nZXREYXRhKCksZD10aGlzLmhvdC5jb3VudFJvd3MoKTtsZXQgaDtmb3IobGV0IGY9bFsyXSsxO2Y8ZDtmKyspe2ZvcihsZXQgRD1sWzFdO0Q8PWxbM107RCsrKWlmKCFVYyhhW2ZdW0RdKSlyZXR1cm4tMTtjb25zdCBNPWFb''@;'; put 'put ''Zl1bbFszXSsxXTsoIVVjKGFbZl1bbFsxXS0xXSl8fCFVYyhNKSkmJihoPWYpfXJldHVybiBofWFkZFNlbGVjdGlvbkZyb21TdGFydEFyZWFUb1NwZWNpZmljUm93SW5kZXgobCxhKXt0aGlzLmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LmdldEZpbGwoKS5jbGVhcigpLmFkZCh0aGlzLmhvdC5f''@;'; put 'put ''Y3JlYXRlQ2VsbENvb3JkcyhsWzBdLGxbMV0pKS5hZGQodGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoYSxsWzNdKSkuY29tbWl0KCl9c2V0U2VsZWN0aW9uKGwpe3RoaXMuaG90LnNlbGVjdENlbGwoLi4ueXMobCxhPT5NYXRoLm1heChhLDApKSwhMSwhMSl9c2VsZWN0QWRqYWNlbnQoKXtj''@;'; put 'put ''b25zdCBsPXRoaXMuaG90LmdldFNlbGVjdGVkTGFzdCgpLGE9dGhpcy5nZXRJbmRleE9mTGFzdEFkamFjZW50RmlsbGVkSW5Sb3cobCk7cmV0dXJuLTEhPT1hJiZ2b2lkIDAhPT1hJiYodGhpcy5hZGRTZWxlY3Rpb25Gcm9tU3RhcnRBcmVhVG9TcGVjaWZpY1Jvd0luZGV4KGwsYSksITApfXJl''@;'; put 'put ''c2V0U2VsZWN0aW9uT2ZEcmFnZ2VkQXJlYSgpe3RoaXMuaGFuZGxlRHJhZ2dlZENlbGxzPTAsdGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5nZXRGaWxsKCkuY2xlYXIoKX1yZWRyYXdCb3JkZXJzKGwpe3RoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuZ2V0RmlsbCgpLmNsZWFyKCku''@;'; put 'put ''YWRkKHRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkuZnJvbSkuYWRkKHRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkudG8pLmFkZChsKS5jb21taXQoKSx0aGlzLmhvdC52aWV3LnJlbmRlcigpfWdldElmTW91c2VXYXNEcmFnZ2VkT3V0c2lkZShsKXtjb25zdHtkb2N1bWVu''@;'; put 'put ''dEVsZW1lbnQ6YX09dGhpcy5ob3Qucm9vdERvY3VtZW50LGQ9VTAodGhpcy5ob3QudGFibGUpLnRvcC0odGhpcy5ob3Qucm9vdFdpbmRvdy5wYWdlWU9mZnNldHx8YS5zY3JvbGxUb3ApK3h1KHRoaXMuaG90LnRhYmxlKSxoPVUwKHRoaXMuaG90LnRhYmxlKS5sZWZ0LSh0aGlzLmhvdC5yb290''@;'; put 'put ''V2luZG93LnBhZ2VYT2Zmc2V0fHxhLnNjcm9sbExlZnQpK3N1KHRoaXMuaG90LnRhYmxlKTtyZXR1cm4gbC5jbGllbnRZPmQmJmwuY2xpZW50WDw9aH1yZWdpc3RlckV2ZW50cygpe2NvbnN0e2RvY3VtZW50RWxlbWVudDpsfT10aGlzLmhvdC5yb290RG9jdW1lbnQ7dGhpcy5ldmVudE1hbmFn''@;'; put 'put ''ZXIuYWRkRXZlbnRMaXN0ZW5lcihsLCJtb3VzZXVwIiwoKT0+aFQoQl8sdGhpcyxhbHQpLmNhbGwodGhpcykpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobCwibW91c2Vtb3ZlIixhPT5oVChCXyx0aGlzLG9sdCkuY2FsbCh0aGlzLGEpKX1jbGVhck1hcHBlZFNldHRpbmdz''@;'; put 'put ''KCl7dGhpcy5kaXJlY3Rpb25zLmxlbmd0aD0wLHRoaXMuYXV0b0luc2VydFJvdz0hMX1tYXBTZXR0aW5ncygpe2NvbnN0IGw9ZnVuY3Rpb24gWXN0KGMpe2NvbnN0IGw9e307cmV0dXJuITA9PT1jPyhsLmRpcmVjdGlvbnM9T2JqZWN0LmtleXMoaDkpLGwuYXV0b0luc2VydFJvdz0hMCk6cW8o''@;'; put 'put ''Yyk/KGwuYXV0b0luc2VydFJvdz0hIVBhKGMuYXV0b0luc2VydFJvdykmJmMuZGlyZWN0aW9uIT09aDkuaG9yaXpvbnRhbCYmYy5hdXRvSW5zZXJ0Um93LGwuZGlyZWN0aW9ucz1QYShjLmRpcmVjdGlvbik/W2MuZGlyZWN0aW9uXTpPYmplY3Qua2V5cyhoOSkpOiJzdHJpbmciPT10eXBlb2Yg''@;'; put 'put ''Yz8obC5kaXJlY3Rpb25zPVtjXSxsLmF1dG9JbnNlcnRSb3c9ITApOihsLmRpcmVjdGlvbnM9W10sbC5hdXRvSW5zZXJ0Um93PSExKSxsfSh0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmZpbGxIYW5kbGUpO3RoaXMuZGlyZWN0aW9ucz1sLmRpcmVjdGlvbnMsdGhpcy5hdXRvSW5zZXJ0Um93PWwu''@;'; put 'put ''YXV0b0luc2VydFJvd31kZXN0cm95KCl7c3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiBubHQoKXt0aGlzLnNlbGVjdEFkamFjZW50KCkmJnRoaXMuZmlsbEluKCl9ZnVuY3Rpb24gcmx0KCl7dGhpcy5oYW5kbGVEcmFnZ2VkQ2VsbHM9MSx0aGlzLm1vdXNlRG93bk9uQ2VsbENvcm5lcj0hMH1m''@;'; put 'put ''dW5jdGlvbiBpbHQoYyl7dGhpcy5tb3VzZURvd25PbkNlbGxDb3JuZXImJiF0aGlzLmhvdC52aWV3LmlzTW91c2VEb3duKCkmJnRoaXMuaGFuZGxlRHJhZ2dlZENlbGxzJiYodGhpcy5oYW5kbGVEcmFnZ2VkQ2VsbHMrPTEsdGhpcy5zaG93Qm9yZGVyKGMpLHRoaXMuYWRkTmV3Um93SWZOZWVk''@;'; put 'put ''ZWQoKSl9ZnVuY3Rpb24gYWx0KCl7dGhpcy5oYW5kbGVEcmFnZ2VkQ2VsbHMmJih0aGlzLmhhbmRsZURyYWdnZWRDZWxscz4xJiZ0aGlzLmZpbGxJbigpLHRoaXMuaGFuZGxlRHJhZ2dlZENlbGxzPTAsdGhpcy5tb3VzZURvd25PbkNlbGxDb3JuZXI9ITEpfWZ1bmN0aW9uIG9sdChjKXtjb25z''@;'; put 'put ''dCBsPXRoaXMuZ2V0SWZNb3VzZVdhc0RyYWdnZWRPdXRzaWRlKGMpOyExPT09dGhpcy5hZGRpbmdTdGFydGVkJiZ0aGlzLmhhbmRsZURyYWdnZWRDZWxscz4wJiZsPyh0aGlzLm1vdXNlRHJhZ091dHNpZGU9ITAsdGhpcy5hZGRpbmdTdGFydGVkPSEwKTp0aGlzLm1vdXNlRHJhZ091dHNpZGU9''@;'; put 'put ''ITEsdGhpcy5tb3VzZURyYWdPdXRzaWRlJiZ0aGlzLmF1dG9JbnNlcnRSb3cmJnRoaXMuYWRkUm93KCl9ZnVuY3Rpb24gRDRlKGMsbCxhKXtJNGUoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIEk0ZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFs''@;'; put 'put ''aXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gal8oYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIGxsdChjKXt2YXIgbD1mdW5jdGlvbiBjbHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3lt''@;'; put 'put ''Ym9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVy''@;'; put 'put ''bigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0p''@;'; put 'put ''OmNbbF09YSxjfWZ1bmN0aW9uIFI0ZShjLGwsYSl7cmV0dXJuIGMuc2V0KEJwKGMsbCksYSksYX1mdW5jdGlvbiBlRihjLGwpe3JldHVybiBjLmdldChCcChjLGwpKX1mdW5jdGlvbiBCcChjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3Vt''@;'; put 'put ''ZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9Y29uc3QgbUo9ImF1dG9Sb3dTaXplIjt2YXIgZlQ9bmV3IFdlYWtNYXAsdko9bmV3IFdlYWtNYXAsSWc9bmV3IFdlYWtTZXQ7Y2xhc3Mg''@;'; put 'put ''cFQgZXh0ZW5kcyBGc3tzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gbUp9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gNDB9c3RhdGljIGdldCBTRVRUSU5HX0tFWVMoKXtyZXR1cm4hMH1zdGF0aWMgZ2V0IERFRkFVTFRfU0VUVElOR1MoKXtyZXR1cm57dXNlSGVh''@;'; put 'put ''ZGVyczohMCxzYW1wbGluZ1JhdGlvOm51bGwsYWxsb3dTYW1wbGVEdXBsaWNhdGVzOiExfX1zdGF0aWMgZ2V0IENBTENVTEFUSU9OX1NURVAoKXtyZXR1cm4gNTB9c3RhdGljIGdldCBTWU5DX0NBTENVTEFUSU9OX0xJTUlUKCl7cmV0dXJuIDUwMH1jb25zdHJ1Y3RvcihsKXtzdXBlcihsKSxm''@;'; put 'put ''dW5jdGlvbiBzbHQoYyxsKXtJNGUoYyxsKSxsLmFkZChjKX0odGhpcyxJZyksal8odGhpcywiaGVhZGVySGVpZ2h0IixudWxsKSxqXyh0aGlzLCJnaG9zdFRhYmxlIixuZXcgZEoodGhpcy5ob3QpKSxqXyh0aGlzLCJzYW1wbGVzR2VuZXJhdG9yIixuZXcgTTRlKChhLGQpPT57Y29uc3QgaD10''@;'; put 'put ''aGlzLmhvdC50b1BoeXNpY2FsUm93KGEpLGY9dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihkKTtpZih0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5pc0hpZGRlbihoKXx8dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuaXNIaWRkZW4oZil8fGE+PTAmJmQ+PTAmJnRoaXMuaG90LmdldENlbGxN''@;'; put 'put ''ZXRhKGEsZCkuaGlkZGVuKXJldHVybiExO2xldCB2O3JldHVybiBhPj0wP3Y9dGhpcy5ob3QuZ2V0RGF0YUF0Q2VsbChhLGQpOi0xPT09YSYmKHY9dGhpcy5ob3QuZ2V0Q29sSGVhZGVyKGQpKSx7dmFsdWU6dn19KSksal8odGhpcywiaW5Qcm9ncmVzcyIsITEpLGpfKHRoaXMsIm1lYXN1cmVk''@;'; put 'put ''Um93cyIsMCksal8odGhpcywicm93SGVpZ2h0c01hcCIsbmV3IFptKSxENGUodGhpcyxmVCxbXSksRDRlKHRoaXMsdkosITEpLHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLnJlZ2lzdGVyTWFwKCJhdXRvUm93U2l6ZSIsdGhpcy5yb3dIZWlnaHRzTWFwKSx0aGlzLmFkZEhvb2soImJlZm9yZVJv''@;'; put 'put ''d1Jlc2l6ZSIsKGEsZCxoKT0+QnAoSWcsdGhpcyxMNGUpLmNhbGwodGhpcyxhLGQsaCkpfWlzRW5hYmxlZCgpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVttSl07cmV0dXJuITA9PT1sfHxxbyhsKX1lbmFibGVQbHVnaW4oKXt2YXIgbD10aGlzO2lmKHRoaXMuZW5hYmxlZClyZXR1''@;'; put 'put ''cm47dGhpcy5zYW1wbGVzR2VuZXJhdG9yLnNldEFsbG93RHVwbGljYXRlcyh0aGlzLmdldFNldHRpbmcoImFsbG93U2FtcGxlRHVwbGljYXRlcyIpKTtjb25zdCBhPXRoaXMuZ2V0U2V0dGluZygic2FtcGxpbmdSYXRpbyIpO2EmJiFpc05hTihhKSYmdGhpcy5zYW1wbGVzR2VuZXJhdG9yLnNl''@;'; put 'put ''dFNhbXBsZUNvdW50KHBhcnNlSW50KGEsMTApKSx0aGlzLmFkZEhvb2soImFmdGVyTG9hZERhdGEiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIEJwKElnLGwscGx0KS5jYWxs''@;'; put 'put ''KGwsLi4uaCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZUNoYW5nZVJlbmRlciIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gQnAoSWcsbCxnbHQpLmNhbGwobCwuLi5oKX0pLHRo''@;'; put 'put ''aXMuYWRkSG9vaygiYmVmb3JlQ29sdW1uUmVzaXplIiwoKT0+dGhpcy5yZWNhbGN1bGF0ZUFsbFJvd3NIZWlnaHQoKSksdGhpcy5hZGRIb29rKCJhZnRlckZvcm11bGFzVmFsdWVzVXBkYXRlIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9''@;'; put 'put ''MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBCcChJZyxsLHZsdCkuY2FsbChsLC4uLmgpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVSZW5kZXIiLCgpPT5CcChJZyx0aGlzLGZsdCkuY2FsbCh0aGlzKSksdGhpcy5hZGRIb29rKCJtb2RpZnlSb3dIZWlnaHQiLChkLGgpPT50aGlz''@;'; put 'put ''LmdldFJvd0hlaWdodChoLGQpKSx0aGlzLmFkZEhvb2soImluaXQiLCgpPT5CcChJZyx0aGlzLG1sdCkuY2FsbCh0aGlzKSksdGhpcy5hZGRIb29rKCJtb2RpZnlDb2x1bW5IZWFkZXJIZWlnaHQiLCgpPT50aGlzLmdldENvbHVtbkhlYWRlckhlaWdodCgpKSxzdXBlci5lbmFibGVQbHVnaW4o''@;'; put 'put ''KX1kaXNhYmxlUGx1Z2luKCl7dGhpcy5oZWFkZXJIZWlnaHQ9bnVsbCxzdXBlci5kaXNhYmxlUGx1Z2luKCksdGhpcy5hZGRIb29rKCJiZWZvcmVSb3dSZXNpemUiLChsLGEsZCk9PkJwKElnLHRoaXMsTDRlKS5jYWxsKHRoaXMsbCxhLGQpKX1jYWxjdWxhdGVWaXNpYmxlUm93c0hlaWdodCgp''@;'; put 'put ''e2lmKCF0aGlzLmhvdC5jb3VudENvbHMoKSlyZXR1cm47Y29uc3QgbD10aGlzLmdldEZpcnN0VmlzaWJsZVJvdygpLGE9dGhpcy5nZXRMYXN0VmlzaWJsZVJvdygpOy0xIT09bCYmLTEhPT1hJiZ0aGlzLmNhbGN1bGF0ZVJvd3NIZWlnaHQoe2Zyb206bCx0bzphfSx2b2lkIDAsdGhpcy5ob3Qu''@;'; put 'put ''Zm9yY2VGdWxsUmVuZGVyKX1jYWxjdWxhdGVSb3dzSGVpZ2h0KCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOntmcm9tOjAsdG86dGhpcy5ob3QuY291bnRSb3dzKCktMX0sYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9''@;'; put 'put ''PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e2Zyb206MCx0bzp0aGlzLmhvdC5jb3VudENvbHMoKS0xfSxkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl07Y29uc3QgaD0ibnVtYmVyIj09dHlwZW9mIGw/e2Zyb206bCx0bzpsfTpsLGY9''@;'; put 'put ''Im51bWJlciI9PXR5cGVvZiBhP3tmcm9tOmEsdG86YX06YTtpZihudWxsIT09dGhpcy5ob3QuZ2V0Q29sSGVhZGVyKDApKXtjb25zdCB2PXRoaXMuc2FtcGxlc0dlbmVyYXRvci5nZW5lcmF0ZVJvd1NhbXBsZXMoLTEsZik7dGhpcy5naG9zdFRhYmxlLmFkZENvbHVtbkhlYWRlcnNSb3codi5n''@;'; put 'put ''ZXQoLTEpKX1HYShoLmZyb20saC50byx2PT57bGV0IE09dGhpcy5ob3QudG9QaHlzaWNhbFJvdyh2KTtudWxsPT09TSYmKE09diksKGR8fG51bGw9PT10aGlzLnJvd0hlaWdodHNNYXAuZ2V0VmFsdWVBdEluZGV4KE0pKSYmdGhpcy5zYW1wbGVzR2VuZXJhdG9yLmdlbmVyYXRlUm93U2FtcGxl''@;'; put 'put ''cyh2LGYpLmZvckVhY2goKFoscmUpPT50aGlzLmdob3N0VGFibGUuYWRkUm93KHJlLFopKX0pLHRoaXMuZ2hvc3RUYWJsZS5yb3dzLmxlbmd0aCYmKHRoaXMuaG90LmJhdGNoRXhlY3V0aW9uKCgpPT57dGhpcy5naG9zdFRhYmxlLmdldEhlaWdodHMoKHYsTSk9Pnt2PDA/dGhpcy5oZWFkZXJI''@;'; put 'put ''ZWlnaHQ9TTp0aGlzLnJvd0hlaWdodHNNYXAuc2V0VmFsdWVBdEluZGV4KHRoaXMuaG90LnRvUGh5c2ljYWxSb3codiksTSl9KX0sITApLHRoaXMubWVhc3VyZWRSb3dzPWgudG8rMSx0aGlzLmdob3N0VGFibGUuY2xlYW4oKSl9Y2FsY3VsYXRlQWxsUm93c0hlaWdodCgpe2xldCBsPWFyZ3Vt''@;'; put 'put ''ZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7ZnJvbTowLHRvOnRoaXMuaG90LmNvdW50Q29scygpLTF9LGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXSxkPTA7Y29uc3QgaD10aGlzLmhvdC5j''@;'; put 'put ''b3VudFJvd3MoKS0xO2xldCBmPW51bGw7dGhpcy5pblByb2dyZXNzPSEwO2NvbnN0IHY9KCk9PntpZighdGhpcy5ob3QpcmV0dXJuIFRFKGYpLHZvaWQodGhpcy5pblByb2dyZXNzPSExKTt0aGlzLmNhbGN1bGF0ZVJvd3NIZWlnaHQoe2Zyb206ZCx0bzpNYXRoLm1pbihkK3BULkNBTENVTEFU''@;'; put 'put ''SU9OX1NURVAsaCl9LGwsYSksZD1kK3BULkNBTENVTEFUSU9OX1NURVArMSxkPGg/Zj1FRSh2KTooVEUoZiksdGhpcy5pblByb2dyZXNzPSExLHRoaXMuaG90LnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCkpfSxNPXRoaXMuZ2V0U3luY0NhbGN1bGF0aW9uTGltaXQoKTtNPj0wJiYodGhpcy5j''@;'; put 'put ''YWxjdWxhdGVSb3dzSGVpZ2h0KHtmcm9tOjAsdG86TX0sbCxhKSxkPU0rMSksZDxoP3YoKToodGhpcy5pblByb2dyZXNzPSExLHRoaXMuaG90LnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCkpfXJlY2FsY3VsYXRlQWxsUm93c0hlaWdodCgpe3RoaXMuaG90LnZpZXcuaXNWaXNpYmxlKCkmJnRo''@;'; put 'put ''aXMuY2FsY3VsYXRlQWxsUm93c0hlaWdodCh7ZnJvbTowLHRvOnRoaXMuaG90LmNvdW50Q29scygpLTF9LCEwKX1nZXRTeW5jQ2FsY3VsYXRpb25MaW1pdCgpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVttSl07bGV0IGE9cFQuU1lOQ19DQUxDVUxBVElPTl9MSU1JVDtjb25zdCBk''@;'; put 'put ''PXRoaXMuaG90LmNvdW50Um93cygpLTE7cmV0dXJuIHFvKGwpJiYoYT1sLnN5bmNMaW1pdCxmJChhKT9hPUokKGQsYSk6YT4+PTApLE1hdGgubWluKGEsZCl9Z2V0Um93SGVpZ2h0KGwsYSl7Y29uc3QgZD1sPDA/dGhpcy5oZWFkZXJIZWlnaHQ6dGhpcy5yb3dIZWlnaHRzTWFwLmdldFZhbHVl''@;'; put 'put ''QXRJbmRleCh0aGlzLmhvdC50b1BoeXNpY2FsUm93KGwpKTtsZXQgaD1hO3JldHVybiBudWxsIT09ZCYmZD4oYXx8MCkmJihoPWQpLGh9Z2V0Q29sdW1uSGVhZGVySGVpZ2h0KCl7cmV0dXJuIHRoaXMuaGVhZGVySGVpZ2h0fWdldEZpcnN0VmlzaWJsZVJvdygpe3ZhciBsO3JldHVybiBudWxs''@;'; put 'put ''IT09KGw9dGhpcy5ob3QuZ2V0Rmlyc3RSZW5kZXJlZFZpc2libGVSb3coKSkmJnZvaWQgMCE9PWw/bDotMX1nZXRMYXN0VmlzaWJsZVJvdygpe3ZhciBsO3JldHVybiBudWxsIT09KGw9dGhpcy5ob3QuZ2V0TGFzdFJlbmRlcmVkVmlzaWJsZVJvdygpKSYmdm9pZCAwIT09bD9sOi0xfWNsZWFy''@;'; put 'put ''Q2FjaGUobCl7dGhpcy5oZWFkZXJIZWlnaHQ9bnVsbCxBcnJheS5pc0FycmF5KGwpP3RoaXMuaG90LmJhdGNoRXhlY3V0aW9uKCgpPT57bC5mb3JFYWNoKGE9Pnt0aGlzLnJvd0hlaWdodHNNYXAuc2V0VmFsdWVBdEluZGV4KGEsbnVsbCl9KX0sITApOnRoaXMucm93SGVpZ2h0c01hcC5jbGVh''@;'; put 'put ''cigpfWNsZWFyQ2FjaGVCeVJhbmdlKGwpe2NvbnN0e2Zyb206YSx0bzpkfT0ibnVtYmVyIj09dHlwZW9mIGw/e2Zyb206bCx0bzpsfTpsO3RoaXMuaG90LmJhdGNoRXhlY3V0aW9uKCgpPT57R2EoTWF0aC5taW4oYSxkKSxNYXRoLm1heChhLGQpLGg9Pnt0aGlzLnJvd0hlaWdodHNNYXAuc2V0''@;'; put 'put ''VmFsdWVBdEluZGV4KGgsbnVsbCl9KX0sITApfWlzTmVlZFJlY2FsY3VsYXRlKCl7cmV0dXJuISF0aGlzLnJvd0hlaWdodHNNYXAuZ2V0VmFsdWVzKCkuc2xpY2UoMCx0aGlzLm1lYXN1cmVkUm93cykuZmlsdGVyKGw9Pm51bGw9PT1sKS5sZW5ndGh9ZGVzdHJveSgpe3RoaXMuZ2hvc3RUYWJs''@;'; put 'put ''ZS5jbGVhbigpLHN1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gaGx0KGMpe2NvbnN0IGw9e2Zyb206MCx0bzp0aGlzLmhvdC5jb3VudENvbHMoKS0xfTtjLmZvckVhY2goYT0+e3RoaXMuc2FtcGxlc0dlbmVyYXRvci5nZW5lcmF0ZVJvd1NhbXBsZXMoYSxsKS5mb3JFYWNoKChoLGYpPT50aGlz''@;'; put 'put ''Lmdob3N0VGFibGUuYWRkUm93KGYsaCkpfSksdGhpcy5naG9zdFRhYmxlLnJvd3MubGVuZ3RoJiYodGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9Pnt0aGlzLmdob3N0VGFibGUuZ2V0SGVpZ2h0cygoYSxkKT0+e2NvbnN0IGg9dGhpcy5ob3QudG9QaHlzaWNhbFJvdyhhKTt0aGlzLnJvd0hl''@;'; put 'put ''aWdodHNNYXAuc2V0VmFsdWVBdEluZGV4KGgsZCl9KX0sITApLHRoaXMuZ2hvc3RUYWJsZS5jbGVhbigpKX1mdW5jdGlvbiBmbHQoKXt0aGlzLmNhbGN1bGF0ZVZpc2libGVSb3dzSGVpZ2h0KCksdGhpcy5pblByb2dyZXNzfHwoQnAoSWcsdGhpcyxobHQpLmNhbGwodGhpcyxlRihmVCx0aGlz''@;'; put 'put ''KSksUjRlKGZULHRoaXMsW10pKX1mdW5jdGlvbiBMNGUoYyxsLGEpe2xldCBkPWM7cmV0dXJuIGEmJih0aGlzLmNhbGN1bGF0ZVJvd3NIZWlnaHQobCx2b2lkIDAsITApLGQ9dGhpcy5nZXRSb3dIZWlnaHQobCkpLGR9ZnVuY3Rpb24gcGx0KGMsbCl7bHx8dGhpcy5yZWNhbGN1bGF0ZUFsbFJv''@;'; put 'put ''d3NIZWlnaHQoKX1mdW5jdGlvbiBnbHQoYyl7Y29uc3QgbD1jLnJlZHVjZSgoYSxkKT0+e2xldFtoXT1kO3JldHVybi0xPT09YS5pbmRleE9mKGgpJiZhLnB1c2goaCksYX0sW10pO2VGKGZULHRoaXMpLnB1c2goLi4ubCl9ZnVuY3Rpb24gbWx0KCl7dGhpcy5yZWNhbGN1bGF0ZUFsbFJvd3NI''@;'; put 'put ''ZWlnaHQoKSxSNGUodkosdGhpcywhMCl9ZnVuY3Rpb24gdmx0KGMpe2lmKCFlRih2Six0aGlzKSlyZXR1cm47Y29uc3QgbD1jLnJlZHVjZSgoYSxkKT0+e3ZhciBoO2NvbnN0IGY9bnVsbD09PShoPWQuYWRkcmVzcyl8fHZvaWQgMD09PWg/dm9pZCAwOmgucm93O2lmKE51bWJlci5pc0ludGVn''@;'; put 'put ''ZXIoZikpe2NvbnN0IHY9dGhpcy5ob3QudG9WaXN1YWxSb3coZik7LTE9PT1hLmluZGV4T2YodikmJmEucHVzaCh2KX1yZXR1cm4gYX0sW10pO2VGKGZULHRoaXMpLnB1c2goLi4ubCl9Y29uc3QgTzRlPW5ldyBNYXAoW1siaW5kZXhlc1NlcXVlbmNlIix7Z2V0TGlzdFdpdGhJbnNlcnRlZEl0''@;'; put 'put ''ZW1zOkhLLGdldExpc3RXaXRoUmVtb3ZlZEl0ZW1zOktFfV0sWyJwaHlzaWNhbGx5SW5kZXhlZCIse2dldExpc3RXaXRoSW5zZXJ0ZWRJdGVtczpCSyxnZXRMaXN0V2l0aFJlbW92ZWRJdGVtczpqS31dXSksUDRlPWM9PntpZighMT09PU80ZS5oYXMoYykpdGhyb3cgbmV3IEVycm9yKGBBbHRl''@;'; put 'put ''ciBzdHJhdGVneSB3aXRoIElEICcke2N9JyBkb2VzIG5vdCBleGlzdC5gKTtyZXR1cm4gTzRlLmdldChjKX0se2dldExpc3RXaXRoSW5zZXJ0ZWRJdGVtczpibHQsZ2V0TGlzdFdpdGhSZW1vdmVkSXRlbXM6eWx0fT1QNGUoInBoeXNpY2FsbHlJbmRleGVkIikse2dldExpc3RXaXRoSW5zZXJ0''@;'; put 'put ''ZWRJdGVtczpDbHQsZ2V0TGlzdFdpdGhSZW1vdmVkSXRlbXM6U2x0fT1QNGUoInBoeXNpY2FsbHlJbmRleGVkIik7Y29uc3QgRjRlPSJiaW5kUm93c1dpdGhIZWFkZXJzIixINGU9bmV3IE1hcChbWyJsb29zZSIsY2xhc3MgX2x0IGV4dGVuZHMgZTl7Y29uc3RydWN0b3IoKXtzdXBlcihsPT5s''@;'; put 'put ''KX1pbnNlcnQobCxhKXtjb25zdCBkPVZLKHRoaXMuaW5kZXhlZFZhbHVlcyxhKTt0aGlzLmluZGV4ZWRWYWx1ZXM9Ymx0KGQsbCxhLHRoaXMuaW5pdFZhbHVlT3JGbiksc3VwZXIuaW5zZXJ0KGwsYSl9cmVtb3ZlKGwpe2NvbnN0IGE9eWx0KHRoaXMuaW5kZXhlZFZhbHVlcyxsKTt0aGlzLmlu''@;'; put 'put ''ZGV4ZWRWYWx1ZXM9TksoYSxsKSxzdXBlci5yZW1vdmUobCl9fV0sWyJzdHJpY3QiLGNsYXNzIE1sdCBleHRlbmRzIGU5e2NvbnN0cnVjdG9yKCl7c3VwZXIobD0+bCl9aW5zZXJ0KGwsYSl7dGhpcy5pbmRleGVkVmFsdWVzPUNsdCh0aGlzLmluZGV4ZWRWYWx1ZXMsbCxhLChkLGgpPT50aGlz''@;'; put 'put ''LmdldE5leHRWYWx1ZShoKSksc3VwZXIuaW5zZXJ0KGwsYSl9cmVtb3ZlKGwpe3RoaXMuaW5kZXhlZFZhbHVlcz1TbHQodGhpcy5pbmRleGVkVmFsdWVzLGwpLHN1cGVyLnJlbW92ZShsKX1nZXROZXh0VmFsdWUobCl7cmV0dXJuIE1hdGgubWF4KC4uLnRoaXMuZ2V0VmFsdWVzKCkpKzErbH19''@;'; put 'put ''XV0pO3ZhciBONGU9bmV3IFdlYWtTZXQ7Y2xhc3MgT2x0IGV4dGVuZHMgRnN7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIEVsdChjLGwpeyhmdW5jdGlvbiBUbHQoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6''@;'; put 'put ''ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLmFkZChjKX0odGhpcyxONGUpLGZ1bmN0aW9uIEFsdChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24ga2x0KGMpe3ZhciBsPWZ1bmN0aW9uIERsdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2Yg''@;'; put 'put ''Y3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4g''@;'; put 'put ''YSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29u''@;'; put 'put ''ZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9KHRoaXMsImhlYWRlckluZGV4ZXMiLG51bGwpfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBGNGV9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMjEwfWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5o''@;'; put 'put ''b3QuZ2V0U2V0dGluZ3MoKVtGNGVdfWVuYWJsZVBsdWdpbigpe3ZhciBsO2lmKHRoaXMuZW5hYmxlZClyZXR1cm47Y29uc3QgYT1udWxsIT09KGw9SDRlLmdldCh0aGlzLmdldFNldHRpbmcoKSkpJiZ2b2lkIDAhPT1sP2w6SDRlLmdldCgibG9vc2UiKTt0aGlzLmhlYWRlckluZGV4ZXM9dGhp''@;'; put 'put ''cy5ob3Qucm93SW5kZXhNYXBwZXIucmVnaXN0ZXJNYXAoImJpbmRSb3dzV2l0aEhlYWRlcnMiLG5ldyBhKSx0aGlzLmFkZEhvb2soIm1vZGlmeVJvd0hlYWRlciIsZD0+ZnVuY3Rpb24gSWx0KGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJn''@;'; put 'put ''dW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX0oTjRlLHRoaXMsUGx0KS5jYWxsKHRoaXMsZCkpLHN1cGVyLmVuYWJsZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXt0aGlzLmhvdC5y''@;'; put 'put ''b3dJbmRleE1hcHBlci51bnJlZ2lzdGVyTWFwKCJiaW5kUm93c1dpdGhIZWFkZXJzIiksc3VwZXIuZGlzYWJsZVBsdWdpbigpfWRlc3Ryb3koKXtzdXBlci5kZXN0cm95KCl9fWZ1bmN0aW9uIFBsdChjKXtyZXR1cm4gdGhpcy5oZWFkZXJJbmRleGVzLmdldFZhbHVlQXRJbmRleCh0aGlzLmhv''@;'; put 'put ''dC50b1BoeXNpY2FsUm93KGMpKX1mdW5jdGlvbiBWNGUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIEI0ZShjLGwsYSl7cmV0dXJuKGw9''@;'; put 'put ''ZnVuY3Rpb24gTmx0KGMpe3ZhciBsPWZ1bmN0aW9uIFZsdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVv''@;'; put 'put ''ZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0o''@;'; put 'put ''bCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24gajRlKGMsbCl7cmV0dXJuIGMuZ2V0KHpfKGMsbCkpfWZ1bmN0aW9uIGJKKGMsbCxhKXtyZXR1cm4gYy5z''@;'; put 'put ''ZXQoel8oYyxsKSxhKSxhfWZ1bmN0aW9uIHpfKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBv''@;'; put 'put ''YmplY3QiKX1jb25zdCB0Rj0iY29sbGFwc2libGVDb2x1bW5zIixqbHQ9WyJuZXN0ZWRIZWFkZXJzIl0sVV89ImNvbGxhcHNpYmxlSW5kaWNhdG9yIix6NGU9dEYsVTRlPW5ldyBNYXAoW1siY29sbGFwc2UiLHtoaWRlQ29sdW1uOiEwLGJlZm9yZUhvb2s6ImJlZm9yZUNvbHVtbkNvbGxhcHNl''@;'; put 'put ''IixhZnRlckhvb2s6ImFmdGVyQ29sdW1uQ29sbGFwc2UifV0sWyJleHBhbmQiLHtoaWRlQ29sdW1uOiExLGJlZm9yZUhvb2s6ImJlZm9yZUNvbHVtbkV4cGFuZCIsYWZ0ZXJIb29rOiJhZnRlckNvbHVtbkV4cGFuZCJ9XV0pO3ZhciBaXz1uZXcgV2Vha01hcCxnVD1uZXcgV2Vha1NldDtjbGFz''@;'; put 'put ''cyB6bHQgZXh0ZW5kcyBGc3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gRmx0KGMsbCl7VjRlKGMsbCksbC5hZGQoYyl9KHRoaXMsZ1QpLEI0ZSh0aGlzLCJuZXN0ZWRIZWFkZXJzUGx1Z2luIixudWxsKSxCNGUodGhpcywiaGVhZGVyU3RhdGVNYW5hZ2VyIixu''@;'; put 'put ''dWxsKSxmdW5jdGlvbiBIbHQoYyxsLGEpe1Y0ZShjLGwpLGwuc2V0KGMsYSl9KHRoaXMsWl8sbnVsbCl9c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIHRGfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDI5MH1zdGF0aWMgZ2V0IFBMVUdJTl9ERVBTKCl7cmV0dXJu''@;'; put 'put ''WyJwbHVnaW46TmVzdGVkSGVhZGVycyJdfXN0YXRpYyBnZXQgU0VUVElOR19LRVlTKCl7cmV0dXJuW3RGLC4uLmpsdF19aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW3RGXX1lbmFibGVQbHVnaW4oKXt2YXIgbD10aGlzO2lmKHRoaXMuZW5hYmxlZClyZXR1cm47''@;'; put 'put ''Y29uc3R7bmVzdGVkSGVhZGVyczphfT10aGlzLmhvdC5nZXRTZXR0aW5ncygpO2F8fGlsKCJZb3UgbmVlZCB0byBjb25maWd1cmUgdGhlIE5lc3RlZCBIZWFkZXJzIHBsdWdpbiBpbiBvcmRlciB0byB1c2UgY29sbGFwc2libGUgaGVhZGVycy4iKSxiSihaXyx0aGlzLHRoaXMuaG90LmNvbHVt''@;'; put 'put ''bkluZGV4TWFwcGVyLmNyZWF0ZUFuZFJlZ2lzdGVySW5kZXhNYXAodGhpcy5wbHVnaW5OYW1lLCJoaWRpbmciKSksdGhpcy5uZXN0ZWRIZWFkZXJzUGx1Z2luPXRoaXMuaG90LmdldFBsdWdpbigibmVzdGVkSGVhZGVycyIpLHRoaXMuaGVhZGVyU3RhdGVNYW5hZ2VyPXRoaXMubmVzdGVkSGVh''@;'; put 'put ''ZGVyc1BsdWdpbi5nZXRTdGF0ZU1hbmFnZXIoKSx0aGlzLmFkZEhvb2soImluaXQiLCgpPT56XyhnVCx0aGlzLFdsdCkuY2FsbCh0aGlzKSksdGhpcy5hZGRIb29rKCJhZnRlckxvYWREYXRhIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9''@;'; put 'put ''MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiB6XyhnVCxsLFlsdCkuY2FsbChsLC4uLmgpfSksdGhpcy5hZGRIb29rKCJhZnRlckdldENvbEhlYWRlciIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2Zd''@;'; put 'put ''PWFyZ3VtZW50c1tmXTtyZXR1cm4gel8oZ1QsbCxVbHQpLmNhbGwobCwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlT25DZWxsTW91c2VEb3duIiwoZCxoLGYpPT56XyhnVCx0aGlzLFpsdCkuY2FsbCh0aGlzLGQsaCxmKSksdGhpcy5yZWdpc3RlclNob3J0Y3V0cygpLHN1cGVyLmVuYWJs''@;'; put 'put ''ZVBsdWdpbigpLHRoaXMudXBkYXRlUGx1Z2luKCl9dXBkYXRlUGx1Z2luKCl7aWYodGhpcy5ob3Qudmlldyl7aWYoIXRoaXMubmVzdGVkSGVhZGVyc1BsdWdpbi5kZXRlY3RlZE92ZXJsYXBwZWRIZWFkZXJzKXtjb25zdHtjb2xsYXBzaWJsZUNvbHVtbnM6bH09dGhpcy5ob3QuZ2V0U2V0dGlu''@;'; put 'put ''Z3MoKTsiYm9vbGVhbiI9PXR5cGVvZiBsP3RoaXMuaGVhZGVyU3RhdGVNYW5hZ2VyLm1hcFN0YXRlKGE9Pih7Y29sbGFwc2libGU6YS5vcmlnQ29sc3Bhbj4xfSkpOkFycmF5LmlzQXJyYXkobCkmJih0aGlzLmhlYWRlclN0YXRlTWFuYWdlci5tYXBTdGF0ZSgoKT0+KHtjb2xsYXBzaWJsZToh''@;'; put 'put ''MX0pKSx0aGlzLmhlYWRlclN0YXRlTWFuYWdlci5tZXJnZVN0YXRlV2l0aChsKSl9c3VwZXIudXBkYXRlUGx1Z2luKCl9fWRpc2FibGVQbHVnaW4oKXt0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci51bnJlZ2lzdGVyTWFwKHRoaXMucGx1Z2luTmFtZSksYkooWl8sdGhpcyxudWxsKSx0aGlz''@;'; put 'put ''Lm5lc3RlZEhlYWRlcnNQbHVnaW49bnVsbCx0aGlzLnVucmVnaXN0ZXJTaG9ydGN1dHMoKSx0aGlzLmNsZWFyQnV0dG9ucygpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX1yZWdpc3RlclNob3J0Y3V0cygpe3RoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKS5h''@;'; put 'put ''ZGRTaG9ydGN1dCh7a2V5czpbWyJFbnRlciJdXSxjYWxsYmFjazooKT0+e3ZhciBsO2NvbnN0e3JvdzphLGNvbDpkfT10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLmhpZ2hsaWdodCx7Y29sbGFwc2libGU6aCxpc0NvbGxhcHNlZDpmLGNvbHVtbkluZGV4OnZ9PW51bGwhPT0obD10''@;'; put 'put ''aGlzLmhlYWRlclN0YXRlTWFuYWdlci5nZXRIZWFkZXJUcmVlTm9kZURhdGEoYSxkKSkmJnZvaWQgMCE9PWw/bDp7fTtpZihoKXJldHVybiBmP3RoaXMuZXhwYW5kU2VjdGlvbih7cm93OmEsY29sOnZ9KTp0aGlzLmNvbGxhcHNlU2VjdGlvbih7cm93OmEsY29sOnZ9KSwhMX0scnVuT25seUlm''@;'; put 'put ''OigpPT57dmFyIGwsYTtyZXR1cm4obnVsbD09PShsPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkpfHx2b2lkIDA9PT1sP3ZvaWQgMDpsLmlzU2luZ2xlKCkpJiYobnVsbD09PShhPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLmhp''@;'; put 'put ''Z2hsaWdodC5pc0hlYWRlcigpKX0sZ3JvdXA6ejRlLHJlbGF0aXZlVG9Hcm91cDpXbSxwb3NpdGlvbjoiYmVmb3JlIn0pfXVucmVnaXN0ZXJTaG9ydGN1dHMoKXt0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJncmlkIikucmVtb3ZlU2hvcnRjdXRzQnlHcm91cCh6''@;'; put 'put ''NGUpfWNsZWFyQnV0dG9ucygpe2lmKCF0aGlzLmhvdC52aWV3KXJldHVybjtjb25zdCBsPXRoaXMuaG90LnZpZXcuX3d0LmdldFNldHRpbmcoImNvbHVtbkhlYWRlcnMiKS5sZW5ndGgsYT10aGlzLmhvdC52aWV3Ll93dC53dFRhYmxlLlRIRUFELGQ9dGhpcy5ob3Qudmlldy5fd3Qud3RPdmVy''@;'; put 'put ''bGF5cy50b3BPdmVybGF5LmNsb25lLnd0VGFibGUuVEhFQUQsaD10aGlzLmhvdC52aWV3Ll93dC53dE92ZXJsYXlzLnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheT90aGlzLmhvdC52aWV3Ll93dC53dE92ZXJsYXlzLnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5jbG9uZS53dFRhYmxl''@;'; put 'put ''LlRIRUFEOm51bGwsZj1mdW5jdGlvbih2KXt2JiZ2LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodil9O0dhKDAsbC0xLHY9Pntjb25zdCBNPWEuY2hpbGROb2Rlc1t2XSxEPWQuY2hpbGROb2Rlc1t2XSxaPWg/aC5jaGlsZE5vZGVzW3ZdOm51bGw7R2EoMCxNLmNoaWxkTm9kZXMubGVuZ3RoLTEs''@;'; put 'put ''cmU9PntsZXQgY2U9TS5jaGlsZE5vZGVzW3JlXS5xdWVyeVNlbGVjdG9yKGAuJHtVX31gKTtmKGNlKSxEJiZELmNoaWxkTm9kZXNbcmVdJiYoY2U9RC5jaGlsZE5vZGVzW3JlXS5xdWVyeVNlbGVjdG9yKGAuJHtVX31gKSxmKGNlKSksaCYmWiYmWi5jaGlsZE5vZGVzW3JlXSYmKGNlPVouY2hp''@;'; put 'put ''bGROb2Rlc1tyZV0ucXVlcnlTZWxlY3RvcihgLiR7VV99YCksZihjZSkpfSl9KX1leHBhbmRTZWN0aW9uKGwpe3RoaXMudG9nZ2xlQ29sbGFwc2libGVTZWN0aW9uKFtsXSwiZXhwYW5kIil9Y29sbGFwc2VTZWN0aW9uKGwpe3RoaXMudG9nZ2xlQ29sbGFwc2libGVTZWN0aW9uKFtsXSwiY29s''@;'; put 'put ''bGFwc2UiKX10b2dnbGVBbGxDb2xsYXBzaWJsZVNlY3Rpb25zKGwpe2NvbnN0IGE9dGhpcy5oZWFkZXJTdGF0ZU1hbmFnZXIubWFwTm9kZXMoZD0+e2NvbnN0e2NvbGxhcHNpYmxlOmgsb3JpZ0NvbHNwYW46ZixoZWFkZXJMZXZlbDp2LGNvbHVtbkluZGV4Ok0saXNDb2xsYXBzZWQ6RH09ZDtp''@;'; put 'put ''ZighMD09PWgmJmY+MSYmKEQmJiJleHBhbmQiPT09bHx8IUQmJiJjb2xsYXBzZSI9PT1sKSlyZXR1cm57cm93OnRoaXMuaGVhZGVyU3RhdGVNYW5hZ2VyLmxldmVsVG9Sb3dDb29yZHModiksY29sOk19fSk7dGhpcy50b2dnbGVDb2xsYXBzaWJsZVNlY3Rpb24oYSxsKX1jb2xsYXBzZUFsbCgp''@;'; put 'put ''e3RoaXMudG9nZ2xlQWxsQ29sbGFwc2libGVTZWN0aW9ucygiY29sbGFwc2UiKX1leHBhbmRBbGwoKXt0aGlzLnRvZ2dsZUFsbENvbGxhcHNpYmxlU2VjdGlvbnMoImV4cGFuZCIpfXRvZ2dsZUNvbGxhcHNpYmxlU2VjdGlvbihsLGEpe2lmKCFVNGUuaGFzKGEpKXRocm93IG5ldyBFcnJvcihg''@;'; put 'put ''VW5zdXBwb3J0ZWQgYWN0aW9uIGlzIHBhc3NlZCAoJHthfSkuYCk7aWYoIUFycmF5LmlzQXJyYXkobCkpcmV0dXJuO2NvbnN0IGQ9SW0obCxFZT0+e2xldHtyb3c6QmV9PUVlO3JldHVybiBCZTwwfSk7bGV0IGg9ZC5sZW5ndGg+MDtZbihkLEVlPT57dmFyIEJlO2xldHtyb3c6cWUsY29sOnJ0''@;'; put 'put ''fT1FZTtjb25zdHtjb2xsYXBzaWJsZTpwdCxpc0NvbGxhcHNlZDpkdH09bnVsbCE9PShCZT10aGlzLmhlYWRlclN0YXRlTWFuYWdlci5nZXRIZWFkZXJTZXR0aW5ncyhxZSxydCkpJiZ2b2lkIDAhPT1CZT9CZTp7fTtpZighcHR8fGR0JiYiY29sbGFwc2UiPT09YXx8IWR0JiYiZXhwYW5kIj09''@;'; put 'put ''PWEpcmV0dXJuIGg9ITEsITF9KTtjb25zdCBmPVtdLHY9W107aCYmWW4oZCxFZT0+e2xldHtyb3c6QmUsY29sOnFlfT1FZTtjb25zdHtjb2xzcGFuQ29tcGVuc2F0aW9uOnJ0LGFmZmVjdGVkQ29sdW1uczpwdCxyb2xsYmFja01vZGlmaWNhdGlvbjpkdH09dGhpcy5oZWFkZXJTdGF0ZU1hbmFn''@;'; put 'put ''ZXIudHJpZ2dlck5vZGVNb2RpZmljYXRpb24oYSxCZSxxZSk7cnQ+MCYmKHYucHVzaCguLi5wdCksZi5wdXNoKGR0KSl9KTtjb25zdCBNPXRoaXMuZ2V0Q29sbGFwc2VkQ29sdW1ucygpO2xldCBEPVtdOyJjb2xsYXBzZSI9PT1hP0Q9djJlKFsuLi5NLC4uLnZdKToiZXhwYW5kIj09PWEmJihE''@;'; put 'put ''PUltKE0sRWU9PiF2LmluY2x1ZGVzKEVlKSkpO2NvbnN0IFo9VTRlLmdldChhKTtpZighMT09PXRoaXMuaG90LnJ1bkhvb2tzKFouYmVmb3JlSG9vayxNLEQsaCkpcmV0dXJuIHZvaWQgWW4oZixFZT0+e0VlKCl9KTt0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e1luKHYsRWU9PntqNGUo''@;'; put 'put ''Wl8sdGhpcykuc2V0VmFsdWVBdEluZGV4KHRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4oRWUpLFouaGlkZUNvbHVtbil9KX0sITApO2NvbnN0IGNlPXRoaXMuZ2V0Q29sbGFwc2VkQ29sdW1ucygpLmxlbmd0aCE9PU0ubGVuZ3RoLGJlPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7''@;'; put 'put ''aWYoImNvbGxhcHNlIj09PWEmJmNlJiZiZSl7Y29uc3R7cm93OkVlLGNvbDpCZX09YmUuaGlnaGxpZ2h0O2lmKCh0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5pc0hpZGRlbihFZSl8fHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmlzSGlkZGVuKEJlKSkmJnYuaW5jbHVkZXMoQmUpKXtjb25z''@;'; put 'put ''dCBydD1FZT49MD90aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoRWUsMSwhMCk6RWUscHQ9QmU+PTA/dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KEJlLDEsITApOkJlO251bGwhPT1ydCYmbnVsbCE9PXB0''@;'; put 'put ''JiZ0aGlzLmhvdC5zZWxlY3RDZWxsKHJ0LHB0KX19dGhpcy5ob3QucnVuSG9va3MoWi5hZnRlckhvb2ssTSxELGgsY2UpLHRoaXMuaG90LnJlbmRlcigpLHRoaXMuaG90LnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCl9Z2V0Q29sbGFwc2VkQ29sdW1ucygpe3JldHVybiBqNGUoWl8sdGhpcyku''@;'; put 'put ''Z2V0SGlkZGVuSW5kZXhlcygpfWRlc3Ryb3koKXtiSihaXyx0aGlzLG51bGwpLHN1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gVWx0KGMsbCxhKXt2YXIgZDtjb25zdHtjb2xsYXBzaWJsZTpoLG9yaWdDb2xzcGFuOmYsaXNDb2xsYXBzZWQ6dn09bnVsbCE9PShkPXRoaXMuaGVhZGVyU3RhdGVN''@;'; put 'put ''YW5hZ2VyLmdldEhlYWRlclNldHRpbmdzKGEsYykpJiZ2b2lkIDAhPT1kP2Q6e30sTT1oJiZmPjEmJmM+PXRoaXMuaG90LmdldFNldHRpbmdzKCkuZml4ZWRDb2x1bW5zU3RhcnQsRD10aGlzLmhvdC5nZXRTZXR0aW5ncygpLmFyaWFUYWdzO2xldCBaPWwucXVlcnlTZWxlY3RvcihgLiR7VV99''@;'; put 'put ''YCk7dmFyIHJlO2o3KGwsW04yKCIiKVswXV0pLE0/KFp8fChaPXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxUaShaLFVfKSxsLnF1ZXJ5U2VsZWN0b3IoImRpdjpmaXJzdC1jaGlsZCIpLmFwcGVuZENoaWxkKFopKSxsbyhaLFsiY29sbGFwc2VkIiwiZXhwYW5k''@;'; put 'put ''ZWQiXSksdj8oVGkoWiwiY29sbGFwc2VkIiksUG0oWiwiKyIpLEQmJnZvKGwsLi4uTjIoITEpKSk6KFRpKFosImV4cGFuZGVkIiksUG0oWiwiLSIpLEQmJnZvKGwsLi4uTjIoITApKSksRCYmdm8oWiwuLi5WNygpKSk6bnVsbD09PShyZT1aKXx8dm9pZCAwPT09cmV8fHJlLnJlbW92ZSgpfWZ1''@;'; put 'put ''bmN0aW9uIFpsdChjLGwpe3BvKGMudGFyZ2V0LFVfKSYmKHBvKGMudGFyZ2V0LCJleHBhbmRlZCIpPyh0aGlzLmV2ZW50TWFuYWdlci5maXJlRXZlbnQoYy50YXJnZXQsIm1vdXNldXAiKSx0aGlzLnRvZ2dsZUNvbGxhcHNpYmxlU2VjdGlvbihbbF0sImNvbGxhcHNlIikpOnBvKGMudGFyZ2V0''@;'; put 'put ''LCJjb2xsYXBzZWQiKSYmKHRoaXMuZXZlbnRNYW5hZ2VyLmZpcmVFdmVudChjLnRhcmdldCwibW91c2V1cCIpLHRoaXMudG9nZ2xlQ29sbGFwc2libGVTZWN0aW9uKFtsXSwiZXhwYW5kIikpLEIyKGMpKX1mdW5jdGlvbiBXbHQoKXt0aGlzLnVwZGF0ZVBsdWdpbigpfWZ1bmN0aW9uIFlsdChj''@;'; put 'put ''LGwpe2x8fHRoaXMudXBkYXRlUGx1Z2luKCl9ZnVuY3Rpb24gZjkoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIEdsdChjKXt2YXIgbD1mdW5jdGlvbiAkbHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lk''@;'; put 'put ''IDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51''@;'; put 'put ''bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNvbnN0IEtsdD1bInNv''@;'; put 'put ''cnRFbXB0eUNlbGxzIiwiaW5kaWNhdG9yIiwiaGVhZGVyQWN0aW9uIiwiY29tcGFyZUZ1bmN0aW9uRmFjdG9yeSJdO2NsYXNzIFFsdHtjb25zdHJ1Y3RvcihsLGEpe2Y5KHRoaXMsImhvdCIsdm9pZCAwKSxmOSh0aGlzLCJzb3J0aW5nU3RhdGVzIixuZXcgcFApLGY5KHRoaXMsInNvcnRFbXB0''@;'; put 'put ''eUNlbGxzIiwhMSksZjkodGhpcywiaW5kaWNhdG9yIiwhMCksZjkodGhpcywiaGVhZGVyQWN0aW9uIiwhMCksZjkodGhpcywiY29tcGFyZUZ1bmN0aW9uRmFjdG9yeSIsdm9pZCAwKSxmOSh0aGlzLCJtYXBOYW1lIix2b2lkIDApLHRoaXMuaG90PWwsdGhpcy5tYXBOYW1lPWEsdGhpcy5ob3Qu''@;'; put 'put ''Y29sdW1uSW5kZXhNYXBwZXIucmVnaXN0ZXJNYXAoYSx0aGlzLnNvcnRpbmdTdGF0ZXMpfXVwZGF0ZUFsbENvbHVtbnNQcm9wZXJ0aWVzKGwpe3FvKGwpJiZYbyhsLChhLGQpPT57S2x0LmluY2x1ZGVzKGQpJiYodGhpc1tkXT1hKX0pfWdldEFsbENvbHVtbnNQcm9wZXJ0aWVzKCl7Y29uc3Qg''@;'; put 'put ''bD17c29ydEVtcHR5Q2VsbHM6dGhpcy5zb3J0RW1wdHlDZWxscyxpbmRpY2F0b3I6dGhpcy5pbmRpY2F0b3IsaGVhZGVyQWN0aW9uOnRoaXMuaGVhZGVyQWN0aW9ufTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5jb21wYXJlRnVuY3Rpb25GYWN0b3J5JiYobC5jb21wYXJlRnVuY3Rp''@;'; put 'put ''b25GYWN0b3J5PXRoaXMuY29tcGFyZUZ1bmN0aW9uRmFjdG9yeSksbH1nZXRTb3J0T3JkZXJPZkNvbHVtbihsKXt2YXIgYTtyZXR1cm4gbnVsbD09PShhPXRoaXMuc29ydGluZ1N0YXRlcy5nZXRWYWx1ZUF0SW5kZXgodGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihsKSkpfHx2b2lkIDA9PT1h''@;'; put 'put ''P3ZvaWQgMDphLnNvcnRPcmRlcn1nZXRJbmRleE9mQ29sdW1uSW5Tb3J0UXVldWUobCl7cmV0dXJuIGw9dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihsKSx0aGlzLnNvcnRpbmdTdGF0ZXMuZ2V0RW50cmllcygpLmZpbmRJbmRleChhPT57bGV0W2RdPWE7cmV0dXJuIGQ9PT1sfSl9Z2V0TnVt''@;'; put 'put ''YmVyT2ZTb3J0ZWRDb2x1bW5zKCl7cmV0dXJuIHRoaXMuc29ydGluZ1N0YXRlcy5nZXRMZW5ndGgoKX1pc0xpc3RPZlNvcnRlZENvbHVtbnNFbXB0eSgpe3JldHVybiAwPT09dGhpcy5nZXROdW1iZXJPZlNvcnRlZENvbHVtbnMoKX1pc0NvbHVtblNvcnRlZChsKXtyZXR1cm4gcW8odGhpcy5z''@;'; put 'put ''b3J0aW5nU3RhdGVzLmdldFZhbHVlQXRJbmRleCh0aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGwpKSl9Z2V0U29ydFN0YXRlcygpe3JldHVybiBudWxsPT09dGhpcy5zb3J0aW5nU3RhdGVzP1tdOnRoaXMuc29ydGluZ1N0YXRlcy5nZXRFbnRyaWVzKCkubWFwKGE9PntsZXRbZCxoXT1hO3Jl''@;'; put 'put ''dHVybntjb2x1bW46dGhpcy5ob3QudG9WaXN1YWxDb2x1bW4oZCksLi4uaH19KX1nZXRDb2x1bW5Tb3J0U3RhdGUobCl7Y29uc3QgYT10aGlzLmdldFNvcnRPcmRlck9mQ29sdW1uKGwpO2lmKFBhKGEpKXJldHVybntjb2x1bW46bCxzb3J0T3JkZXI6YX19c2V0U29ydFN0YXRlcyhsKXt0aGlz''@;'; put 'put ''LnNvcnRpbmdTdGF0ZXMuY2xlYXIoKTtmb3IobGV0IGE9MDthPGwubGVuZ3RoO2ErPTEpdGhpcy5zb3J0aW5nU3RhdGVzLnNldFZhbHVlQXRJbmRleCh0aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGxbYV0uY29sdW1uKSx7c29ydE9yZGVyOmxbYV0uc29ydE9yZGVyfSl9ZGVzdHJveSgpe3Ro''@;'; put 'put ''aXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLnVucmVnaXN0ZXJNYXAodGhpcy5tYXBOYW1lKSx0aGlzLnNvcnRpbmdTdGF0ZXM9bnVsbH19ZnVuY3Rpb24gWjRlKGMsbCxhKXtjb25zdCBkPWwubG9jYWxlO3JldHVybiBmdW5jdGlvbihoLGYpe2NvbnN0e3NvcnRFbXB0eUNlbGxzOnZ9PWE7cmV0''@;'; put 'put ''dXJuInN0cmluZyI9PXR5cGVvZiBoJiYoaD1oLnRvTG9jYWxlTG93ZXJDYXNlKGQpKSwic3RyaW5nIj09dHlwZW9mIGYmJihmPWYudG9Mb2NhbGVMb3dlckNhc2UoZCkpLGg9PT1mP2pwOlVjKGgpP1VjKGYpP2pwOnYmJiJhc2MiPT09Yz9ZYzpHYzpVYyhmKT92JiYiYXNjIj09PWM/R2M6WWM6''@;'; put 'put ''aXNOYU4oaCkmJiFpc05hTihmKT8iYXNjIj09PWM/R2M6WWM6IWlzTmFOKGgpJiZpc05hTihmKXx8KGlzTmFOKGgpfHxpc05hTihmKXx8KGg9cGFyc2VGbG9hdChoKSxmPXBhcnNlRmxvYXQoZikpLGg8Zik/ImFzYyI9PT1jP1ljOkdjOmg+Zj8iYXNjIj09PWM/R2M6WWM6anB9fWNvbnN0e3Jl''@;'; put 'put ''Z2lzdGVyOm1ULGdldEl0ZW06WTRlLGhhc0l0ZW06bGN0fT1yMygic29ydGluZy5jb21wYXJlRnVuY3Rpb25GYWN0b3J5Iikse3JlZ2lzdGVyOkc0ZSxnZXRJdGVtOmNjdH09cjMoInNvcnRpbmcubWFpblNvcnRDb21wYXJhdG9yIik7ZnVuY3Rpb24gJDRlKGMpe3JldHVybiBsY3QoYyk/WTRl''@;'; put 'put ''KGMpOlk0ZSgiZGVmYXVsdCIpfW1UKCJjaGVja2JveCIsZnVuY3Rpb24gbmN0KGMsbCxhKXtjb25zdCBkPWwuY2hlY2tlZFRlbXBsYXRlLGg9bC51bmNoZWNrZWRUZW1wbGF0ZSx7c29ydEVtcHR5Q2VsbHM6Zn09YTtyZXR1cm4gZnVuY3Rpb24odixNKXtjb25zdCBEPVVjKHYpLFo9VWMoTSks''@;'; put 'put ''cmU9RD9oOnYsY2U9Wj9oOk0sYmU9cmU9PT1ofHxyZT09PWQsRWU9Y2U9PT1ofHxjZT09PWQ7aWYoITE9PT1mKXtpZihEJiYhMT09PVopcmV0dXJuIEdjO2lmKCExPT09RCYmWilyZXR1cm4gWWN9cmV0dXJuITE9PT1iZSYmRWU/ImFzYyI9PT1jP1ljOkdjOmJlJiYhMT09PUVlPyJhc2MiPT09''@;'; put 'put ''Yz9HYzpZYzohMT09PWJlJiYhMT09PUVlP1o0ZShjLGwsYSkodixNKTpyZT09PWgmJmNlPT09ZD8iYXNjIj09PWM/WWM6R2M6cmU9PT1kJiZjZT09PWg/ImFzYyI9PT1jP0djOlljOmpwfX0pLG1UKCJkYXRlIixmdW5jdGlvbiBpY3QoYyxsLGEpe3JldHVybiBRNGUoYyxsLmRhdGVGb3JtYXQs''@;'; put 'put ''YSl9KSxtVCgiZGVmYXVsdCIsWjRlKSxtVCgibnVtZXJpYyIsZnVuY3Rpb24gZWN0KGMsbCxhKXtyZXR1cm4gZnVuY3Rpb24oZCxoKXtjb25zdCBmPXBhcnNlRmxvYXQoZCksdj1wYXJzZUZsb2F0KGgpLHtzb3J0RW1wdHlDZWxsczpNfT1hO2lmKGY9PT12fHxpc05hTihmKSYmaXNOYU4odikp''@;'; put 'put ''cmV0dXJuIGpwO2lmKE0pe2lmKFVjKGQpKXJldHVybiJhc2MiPT09Yz9ZYzpHYztpZihVYyhoKSlyZXR1cm4iYXNjIj09PWM/R2M6WWN9cmV0dXJuIGlzTmFOKGYpP0djOmlzTmFOKHYpP1ljOmY8dj8iYXNjIj09PWM/WWM6R2M6Zj52PyJhc2MiPT09Yz9HYzpZYzpqcH19KSxtVCgidGltZSIs''@;'; put 'put ''ZnVuY3Rpb24gb2N0KGMsbCxhKXtyZXR1cm4gUTRlKGMsbC50aW1lRm9ybWF0LGEpfSk7Y29uc3QganA9MCxZYz0tMSxHYz0xLG5GPSJhc2MiLHJGPSJkZXNjIixLNGU9ImNvbEhlYWRlciI7ZnVuY3Rpb24gcTRlKGMpe2lmKGMhPT1yRilyZXR1cm4gYz09PW5GP3JGOm5GfWZ1bmN0aW9uIFg0''@;'; put 'put ''ZShjKXtyZXR1cm4gYy5xdWVyeVNlbGVjdG9yKGAuJHtLNGV9YCl9ZnVuY3Rpb24gSjRlKGMsbCl7aWYoYzwwfHwhbC5wYXJlbnROb2RlKXJldHVybiExO2NvbnN0IGE9bC5wYXJlbnROb2RlLnBhcmVudE5vZGUuY2hpbGROb2RlcztyZXR1cm4gQXJyYXkuZnJvbShhKS5pbmRleE9mKGwucGFy''@;'; put 'put ''ZW50Tm9kZSktYS5sZW5ndGg9PS0xfWZ1bmN0aW9uIHlKKGMsbCxhKXtyZXR1cm4tMT09PWMmJmw+PTAmJiExPT09SG0oYSl9ZnVuY3Rpb24gUTRlKGMsbCxhKXtyZXR1cm4gZnVuY3Rpb24oZCxoKXtjb25zdHtzb3J0RW1wdHlDZWxsczpmfT1hO2lmKGQ9PT1oKXJldHVybiBqcDtpZihVYyhk''@;'; put 'put ''KSlyZXR1cm4gVWMoaCk/anA6ZiYmImFzYyI9PT1jP1ljOkdjO2lmKFVjKGgpKXJldHVybiBmJiYiYXNjIj09PWM/R2M6WWM7Y29uc3Qgdj1PbyhkLGwpLE09T28oaCxsKTtyZXR1cm4gdi5pc1ZhbGlkKCk/TS5pc1ZhbGlkKCk/TS5pc0FmdGVyKHYpPyJhc2MiPT09Yz9ZYzpHYzpNLmlzQmVm''@;'; put 'put ''b3JlKHYpPyJhc2MiPT09Yz9HYzpZYzpqcDpZYzpHY319Y29uc3QgZWdlPSJpbmRpY2F0b3JEaXNhYmxlZCIsdGdlPSJjb2x1bW5Tb3J0aW5nIixuZ2U9InNvcnRBY3Rpb24iLHJnZT1uZXcgTWFwKFtbbkYsImFzY2VuZGluZyJdLFtyRiwiZGVzY2VuZGluZyJdXSk7ZnVuY3Rpb24gaUYoYyxs''@;'; put 'put ''LGEpe3JldHVybihsPWZ1bmN0aW9uIHdjdChjKXt2YXIgbD1mdW5jdGlvbiBDY3QoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJv''@;'; put 'put ''YmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBl''@;'; put 'put ''b2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIFdfKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhs''@;'; put 'put ''KSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1jb25zdCBhRj0iY29sdW1uU29ydGluZyIsb0Y9ImFwcGVuZCIsaWdlPWFGO0c0ZShhRixmdW5jdGlvbiBiY3Qo''@;'; put 'put ''YyxsKXtyZXR1cm4gZnVuY3Rpb24oYSxkKXtjb25zdFssLi4uaF09YSxbLC4uLmZdPWQ7cmV0dXJuIGZ1bmN0aW9uKE0pe2NvbnN0IEQ9Y1swXSxaPWxbMF0scmU9aFswXSxjZT1mWzBdLGJlPVouY29sdW1uU29ydGluZztyZXR1cm4oYmUuY29tcGFyZUZ1bmN0aW9uRmFjdG9yeT9iZS5jb21w''@;'; put 'put ''YXJlRnVuY3Rpb25GYWN0b3J5OiQ0ZShaLnR5cGUpKShELFosYmUpKHJlLGNlKX0oKX19KSxTYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVmb3JlQ29sdW1uU29ydCIpLFNhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlckNvbHVtblNvcnQiKTtjb25zdCB2VD1uZXcgV2Vha01h''@;'; put 'put ''cDt2YXIgcDk9bmV3IFdlYWtTZXQ7Y2xhc3MgYWdlIGV4dGVuZHMgRnN7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIHljdChjLGwpeyhmdW5jdGlvbiBfY3QoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0''@;'; put 'put ''aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLmFkZChjKX0odGhpcyxwOSksaUYodGhpcywiY29sdW1uU3RhdGVzTWFuYWdlciIsbnVsbCksaUYodGhpcywiY29sdW1uTWV0YUNhY2hlIixudWxsKSxpRih0aGlzLCJwbHVnaW5LZXkiLGFGKSxp''@;'; put 'put ''Rih0aGlzLCJpbmRleGVzU2VxdWVuY2VDYWNoZSIsbnVsbCl9c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIGFGfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDUwfWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVt0aGlzLnBsdWdpbktl''@;'; put 'put ''eV19ZW5hYmxlUGx1Z2luKCl7dmFyIGw9dGhpcztpZih2VC5oYXModGhpcy5ob3QpJiZ2VC5nZXQodGhpcy5ob3QpIT09dGhpcy5wbHVnaW5LZXkpcmV0dXJuIHRoaXMuaG90LnVwZGF0ZVNldHRpbmdzKHtbdGhpcy5wbHVnaW5LZXldOiExfSksdm9pZCBmdW5jdGlvbiBmY3QoYyxsKXtpbChn''@;'; put 'put ''bGBQbHVnaW5zIFxgY29sdW1uU29ydGluZ1xgIGFuZCBcYG11bHRpQ29sdW1uU29ydGluZ1xgIHNob3VsZCBub3QgYmUgZW5hYmxlZCBzaW11bHRhbmVvdXNseS5ceDIwCiAgICBPbmx5IFxgJHtjfVxgIHdpbGwgd29yay4gVGhlIFxgJHtsfVxgIHBsdWdpbiB3aWxsIHJlbWFpbiBkaXNhYmxl''@;'; put 'put ''ZC5gKX0odlQuZ2V0KHRoaXMuaG90KSx0aGlzLnBsdWdpbktleSk7dGhpcy5lbmFibGVkfHwodlQuc2V0KHRoaXMuaG90LHRoaXMucGx1Z2luS2V5KSx0aGlzLmNvbHVtblN0YXRlc01hbmFnZXI9bmV3IFFsdCh0aGlzLmhvdCxgJHt0aGlzLnBsdWdpbktleX0uc29ydGluZ1N0YXRlc2ApLHRo''@;'; put 'put ''aXMuY29sdW1uTWV0YUNhY2hlPW5ldyBabShhPT57bGV0IGQ9dGhpcy5ob3QudG9WaXN1YWxDb2x1bW4oYSk7cmV0dXJuIG51bGw9PT1kJiYoZD1hKSx0aGlzLmdldE1lcmdlZFBsdWdpblNldHRpbmdzKGQpfSksdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIucmVnaXN0ZXJNYXAoYCR7dGhp''@;'; put 'put ''cy5wbHVnaW5LZXl9LmNvbHVtbk1ldGFgLHRoaXMuY29sdW1uTWV0YUNhY2hlKSx0aGlzLmFkZEhvb2soImFmdGVyR2V0Q29sSGVhZGVyIiwoYSxkKT0+V18ocDksdGhpcyx4Y3QpLmNhbGwodGhpcyxhLGQpKSx0aGlzLmFkZEhvb2soImJlZm9yZU9uQ2VsbE1vdXNlRG93biIsZnVuY3Rpb24o''@;'; put 'put ''KXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gV18ocDksbCxUY3QpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJPbkNlbGxNb3VzZURvd24iLChhLGQpPT50aGlzLm9uQWZ0ZXJP''@;'; put 'put ''bkNlbGxNb3VzZURvd24oYSxkKSksdGhpcy5hZGRIb29rKCJhZnRlckluaXQiLCgpPT5XXyhwOSx0aGlzLF9KKS5jYWxsKHRoaXMpKSx0aGlzLmFkZEhvb2soImFmdGVyTG9hZERhdGEiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8''@;'; put 'put ''YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIFdfKHA5LGwsRWN0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmhvdC52aWV3JiZXXyhwOSx0aGlzLF9KKS5jYWxsKHRoaXMpLHRoaXMucmVnaXN0ZXJTaG9ydGN1dHMoKSxzdXBlci5lbmFibGVQbHVnaW4oKSl9ZGlzYWJsZVBsdWdpbigpe2Nv''@;'; put 'put ''bnN0IGw9KGEsZCk9Pntjb25zdCBoPVg0ZShkKTshMT09PUo0ZShhLGQpfHxudWxsPT09aHx8dGhpcy51cGRhdGVIZWFkZXJDbGFzc2VzKGgpfTt2VC5kZWxldGUodGhpcy5ob3QpLHRoaXMuaG90LmFkZEhvb2soImFmdGVyR2V0Q29sSGVhZGVyIixsKSx0aGlzLmhvdC5hZGRIb29rT25jZSgi''@;'; put 'put ''YWZ0ZXJWaWV3UmVuZGVyIiwoKT0+e3RoaXMuaG90LnJlbW92ZUhvb2soImFmdGVyR2V0Q29sSGVhZGVyIixsKX0pLHRoaXMuaG90LmJhdGNoRXhlY3V0aW9uKCgpPT57bnVsbCE9PXRoaXMuaW5kZXhlc1NlcXVlbmNlQ2FjaGUmJih0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5zZXRJbmRleGVz''@;'; put 'put ''U2VxdWVuY2UodGhpcy5pbmRleGVzU2VxdWVuY2VDYWNoZS5nZXRWYWx1ZXMoKSksdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIudW5yZWdpc3Rlck1hcCh0aGlzLnBsdWdpbktleSksdGhpcy5pbmRleGVzU2VxdWVuY2VDYWNoZT1udWxsKX0sITApLHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVy''@;'; put 'put ''LnVucmVnaXN0ZXJNYXAoYCR7dGhpcy5wbHVnaW5LZXl9LmNvbHVtbk1ldGFgKSx0aGlzLmNvbHVtblN0YXRlc01hbmFnZXIuZGVzdHJveSgpLHRoaXMuY29sdW1uTWV0YUNhY2hlPW51bGwsdGhpcy5jb2x1bW5TdGF0ZXNNYW5hZ2VyPW51bGwsdGhpcy51bnJlZ2lzdGVyU2hvcnRjdXRzKCks''@;'; put 'put ''c3VwZXIuZGlzYWJsZVBsdWdpbigpfXJlZ2lzdGVyU2hvcnRjdXRzKCl7dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZ3JpZCIpLmFkZFNob3J0Y3V0KHtrZXlzOltbIkVudGVyIl1dLGNhbGxiYWNrOigpPT57Y29uc3R7aGlnaGxpZ2h0Omx9PXRoaXMuaG90Lmdl''@;'; put 'put ''dFNlbGVjdGVkUmFuZ2VMYXN0KCk7cmV0dXJuIHRoaXMuc29ydCh0aGlzLmdldENvbHVtbk5leHRDb25maWcobC5jb2wpKSwhMX0scnVuT25seUlmOigpPT57dmFyIGwsYTtjb25zdCBkPW51bGw9PT0obD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpKXx8dm9pZCAwPT09bD92b2lk''@;'; put 'put ''IDA6bC5oaWdobGlnaHQ7cmV0dXJuIGQmJihudWxsPT09KGE9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSl8fHZvaWQgMD09PWE/dm9pZCAwOmEuaXNTaW5nbGUoKSkmJnRoaXMuaG90LnNlbGVjdGlvbi5pc0NlbGxWaXNpYmxlKGQpJiYtMT09PWQucm93JiZkLmNvbD49MH0scmVs''@;'; put 'put ''YXRpdmVUb0dyb3VwOldtLHBvc2l0aW9uOiJiZWZvcmUiLGdyb3VwOmlnZX0pfXVucmVnaXN0ZXJTaG9ydGN1dHMoKXt0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJncmlkIikucmVtb3ZlU2hvcnRjdXRzQnlHcm91cChpZ2UpfXNvcnQobCl7Y29uc3QgYT10aGlz''@;'; put 'put ''LmdldFNvcnRDb25maWcoKSxkPXRoaXMuZ2V0Tm9ybWFsaXplZFNvcnRDb25maWdzKGwpLGg9dGhpcy5hcmVWYWxpZFNvcnRDb25maWdzKGQpOyExIT09dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUNvbHVtblNvcnQiLGEsZCxoKSYmKDA9PT1hLmxlbmd0aCYmbnVsbD09PXRoaXMuaW5kZXhl''@;'; put 'put ''c1NlcXVlbmNlQ2FjaGUmJih0aGlzLmluZGV4ZXNTZXF1ZW5jZUNhY2hlPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLnJlZ2lzdGVyTWFwKHRoaXMucGx1Z2luS2V5LG5ldyBEM2UpLHRoaXMuaW5kZXhlc1NlcXVlbmNlQ2FjaGUuc2V0VmFsdWVzKHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdl''@;'; put 'put ''dEluZGV4ZXNTZXF1ZW5jZSgpKSksaCYmKHRoaXMuY29sdW1uU3RhdGVzTWFuYWdlci5zZXRTb3J0U3RhdGVzKGQpLHRoaXMuc29ydEJ5UHJlc2V0U29ydFN0YXRlcyhkKSx0aGlzLnNhdmVBbGxTb3J0U2V0dGluZ3MoZCkpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckNvbHVtblNvcnQiLGEs''@;'; put 'put ''aD9kOmEsaCksaCYmdGhpcy5ob3QucmVuZGVyKCkpfWNsZWFyU29ydCgpe3RoaXMuc29ydChbXSl9aXNTb3J0ZWQoKXtyZXR1cm4gdGhpcy5lbmFibGVkJiYhdGhpcy5jb2x1bW5TdGF0ZXNNYW5hZ2VyLmlzTGlzdE9mU29ydGVkQ29sdW1uc0VtcHR5KCl9Z2V0U29ydENvbmZpZyhsKXtyZXR1''@;'; put 'put ''cm4gUGEobCk/dGhpcy5jb2x1bW5TdGF0ZXNNYW5hZ2VyLmdldENvbHVtblNvcnRTdGF0ZShsKTp0aGlzLmNvbHVtblN0YXRlc01hbmFnZXIuZ2V0U29ydFN0YXRlcygpfXNldFNvcnRDb25maWcobCl7Y29uc3QgYT10aGlzLmdldE5vcm1hbGl6ZWRTb3J0Q29uZmlncyhsKTt0aGlzLmFyZVZh''@;'; put 'put ''bGlkU29ydENvbmZpZ3MoYSkmJnRoaXMuY29sdW1uU3RhdGVzTWFuYWdlci5zZXRTb3J0U3RhdGVzKGEpfWdldE5vcm1hbGl6ZWRTb3J0Q29uZmlncygpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpbXTtyZXR1cm4gQXJyYXku''@;'; put 'put ''aXNBcnJheShsKT9sLnNsaWNlKDAsMSk6W2xdfWFyZVZhbGlkU29ydENvbmZpZ3MobCl7Y29uc3QgYT10aGlzLmhvdC5jb3VudENvbHMoKTtyZXR1cm4gZnVuY3Rpb24gaGN0KGMpe2lmKGMuc29tZShhPT4hMT09PWZ1bmN0aW9uIGRjdChjKXtpZighMT09PXFvKGMpKXJldHVybiExO2NvbnN0''@;'; put 'put ''e2NvbHVtbjpsLHNvcnRPcmRlcjphfT1jO3JldHVybiBOdW1iZXIuaXNJbnRlZ2VyKGwpJiZbbkYsckZdLmluY2x1ZGVzKGEpfShhKSkpcmV0dXJuITE7Y29uc3QgbD1jLm1hcChhPT57bGV0e2NvbHVtbjpkfT1hO3JldHVybiBkfSk7cmV0dXJuIG5ldyBTZXQobCkuc2l6ZT09PWwubGVuZ3Ro''@;'; put 'put ''fShsKSYmbC5ldmVyeShkPT57bGV0e2NvbHVtbjpofT1kO3JldHVybiBoPD1hJiZoPj0wfSl9c2F2ZUFsbFNvcnRTZXR0aW5ncyhsKXtjb25zdCBhPXRoaXMuY29sdW1uU3RhdGVzTWFuYWdlci5nZXRBbGxDb2x1bW5zUHJvcGVydGllcygpO2EuaW5pdGlhbENvbmZpZz15cyhsLGg9PntsZXR7''@;'; put 'put ''Y29sdW1uOmYsLi4udn09aDtyZXR1cm57Y29sdW1uOnRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4oZiksLi4udn19KSx0aGlzLmhvdC5ydW5Ib29rcygicGVyc2lzdGVudFN0YXRlU2F2ZSIsImNvbHVtblNvcnRpbmciLGEpfWdldEFsbFNhdmVkU29ydFNldHRpbmdzKCl7Y29uc3QgbD17fTt0''@;'; put 'put ''aGlzLmhvdC5ydW5Ib29rcygicGVyc2lzdGVudFN0YXRlTG9hZCIsImNvbHVtblNvcnRpbmciLGwpO2NvbnN0IGE9bC52YWx1ZTtyZXR1cm4gUGEoYSkmJkFycmF5LmlzQXJyYXkoYS5pbml0aWFsQ29uZmlnKSYmKGEuaW5pdGlhbENvbmZpZz15cyhhLmluaXRpYWxDb25maWcsaD0+e2xldHtj''@;'; put 'put ''b2x1bW46ZiwuLi52fT1oO3JldHVybntjb2x1bW46dGhpcy5ob3QudG9WaXN1YWxDb2x1bW4oZiksLi4udn19KSksYX1nZXRDb2x1bW5OZXh0Q29uZmlnKGwpe2NvbnN0IGE9dGhpcy5jb2x1bW5TdGF0ZXNNYW5hZ2VyLmdldFNvcnRPcmRlck9mQ29sdW1uKGwpO2lmKFBhKGEpKXtjb25zdCBo''@;'; put 'put ''PXE0ZShhKTtyZXR1cm4gUGEoaCk/e2NvbHVtbjpsLHNvcnRPcmRlcjpofTp2b2lkIDB9Y29uc3QgZD10aGlzLmhvdC5jb3VudENvbHMoKTtpZihOdW1iZXIuaXNJbnRlZ2VyKGwpJiZsPj0wJiZsPGQpcmV0dXJue2NvbHVtbjpsLHNvcnRPcmRlcjpxNGUoKX19Z2V0TmV4dFNvcnRDb25maWco''@;'; put 'put ''bCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm9GO2NvbnN0IGQ9dGhpcy5jb2x1bW5TdGF0ZXNNYW5hZ2VyLmdldEluZGV4T2ZDb2x1bW5JblNvcnRRdWV1ZShsKSxoPS0xIT09ZCxmPXRoaXMuZ2V0U29ydENvbmZpZygpLHY9''@;'; put 'put ''dGhpcy5nZXRDb2x1bW5OZXh0Q29uZmlnKGwpO2lmKGgpe2lmKF9jKHYpKXJldHVyblsuLi5mLnNsaWNlKDAsZCksLi4uZi5zbGljZShkKzEpXTtpZihhPT09b0YpcmV0dXJuWy4uLmYuc2xpY2UoMCxkKSwuLi5mLnNsaWNlKGQrMSksdl07aWYoInJlcGxhY2UiPT09YSlyZXR1cm5bLi4uZi5z''@;'; put 'put ''bGljZSgwLGQpLHYsLi4uZi5zbGljZShkKzEpXX1yZXR1cm4gUGEodik/Zi5jb25jYXQodik6Zn1nZXRQbHVnaW5Db2x1bW5Db25maWcobCl7aWYocW8obCkpe2NvbnN0IGE9bFt0aGlzLnBsdWdpbktleV07aWYocW8oYSkpcmV0dXJuIGF9cmV0dXJue319Z2V0TWVyZ2VkUGx1Z2luU2V0dGlu''@;'; put 'put ''Z3MobCl7Y29uc3QgYT10aGlzLmhvdC5nZXRTZXR0aW5ncygpW3RoaXMucGx1Z2luS2V5XSxkPXRoaXMuY29sdW1uU3RhdGVzTWFuYWdlci5nZXRBbGxDb2x1bW5zUHJvcGVydGllcygpLGg9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEoMCxsKSxmPU9iamVjdC5nZXRQcm90b3R5cGVPZihoKTtyZXR1''@;'; put 'put ''cm4gQXJyYXkuaXNBcnJheShmLmNvbHVtbnMpP09iamVjdC5hc3NpZ24oZCxhLHRoaXMuZ2V0UGx1Z2luQ29sdW1uQ29uZmlnKGYuY29sdW1uc1tsXSkpOm1sKGYuY29sdW1ucyk/T2JqZWN0LmFzc2lnbihkLGEsdGhpcy5nZXRQbHVnaW5Db2x1bW5Db25maWcoZi5jb2x1bW5zKGwpKSk6T2Jq''@;'; put 'put ''ZWN0LmFzc2lnbihkLGEpfWdldEZpcnN0Q2VsbFNldHRpbmdzKGwpe2NvbnN0IGE9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEoMCxsKSxkPU9iamVjdC5jcmVhdGUoYSk7cmV0dXJuIGRbdGhpcy5wbHVnaW5LZXldPXRoaXMuY29sdW1uTWV0YUNhY2hlLmdldFZhbHVlQXRJbmRleCh0aGlzLmhvdC50''@;'; put 'put ''b1BoeXNpY2FsQ29sdW1uKGwpKSxkfWdldE51bWJlck9mUm93c1RvU29ydChsKXtjb25zdCBhPXRoaXMuaG90LmdldFNldHRpbmdzKCk7cmV0dXJuIGEubWF4Um93czw9bD9hLm1heFJvd3M6bC1hLm1pblNwYXJlUm93c31zb3J0QnlQcmVzZXRTb3J0U3RhdGVzKGwpe2lmKHRoaXMuaG90LnJv''@;'; put 'put ''d0luZGV4TWFwcGVyLnNldEluZGV4ZXNTZXF1ZW5jZSh0aGlzLmluZGV4ZXNTZXF1ZW5jZUNhY2hlLmdldFZhbHVlcygpKSwwPT09bC5sZW5ndGgpcmV0dXJuO2NvbnN0IGE9W10sZD10aGlzLmhvdC5jb3VudFJvd3MoKSxoPVo9PnlzKGwscmU9PnRoaXMuaG90LmdldERhdGFBdENlbGwoWixy''@;'; put 'put ''ZS5jb2x1bW4pKTtmb3IobGV0IFo9MDtaPHRoaXMuZ2V0TnVtYmVyT2ZSb3dzVG9Tb3J0KGQpO1orPTEpYS5wdXNoKFt0aGlzLmhvdC50b1BoeXNpY2FsUm93KFopXS5jb25jYXQoaChaKSkpO2NvbnN0IGY9eXMoYSxaPT5aWzBdKTshZnVuY3Rpb24gdWN0KGMsbCl7Y29uc3QgYT1jY3QobCk7''@;'; put 'put ''Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZD4yP2QtMjowKSxmPTI7ZjxkO2YrKyloW2YtMl09YXJndW1lbnRzW2ZdO2Muc29ydChhKC4uLmgpKX0oYSx0aGlzLnBsdWdpbktleSx5cyhsLFo9Plouc29ydE9yZGVyKSx5cyhsLFo9PnRoaXMuZ2V0Rmlyc3RDZWxsU2V0''@;'; put 'put ''dGluZ3MoWi5jb2x1bW4pKSk7Zm9yKGxldCBaPWEubGVuZ3RoO1o8ZDtaKz0xKWEucHVzaChbWl0uY29uY2F0KGgoWikpKTtjb25zdCB2PXlzKGEsWj0+WlswXSksTT1uZXcgTWFwKHlzKGYsKFoscmUpPT5bWix2W3JlXV0pKSxEPXlzKHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldEluZGV4''@;'; put 'put ''ZXNTZXF1ZW5jZSgpLFo9Pk0uaGFzKFopP00uZ2V0KFopOlopO3RoaXMuaG90LnJvd0luZGV4TWFwcGVyLnNldEluZGV4ZXNTZXF1ZW5jZShEKX1zb3J0QnlTZXR0aW5ncyhsKXtpZihxbyhsKSl7dGhpcy5jb2x1bW5TdGF0ZXNNYW5hZ2VyLnVwZGF0ZUFsbENvbHVtbnNQcm9wZXJ0aWVzKGwp''@;'; put 'put ''O2NvbnN0IGE9bC5pbml0aWFsQ29uZmlnOyhBcnJheS5pc0FycmF5KGEpfHxxbyhhKSkmJnRoaXMuc29ydChhKX1lbHNlIHRoaXMuaG90LnJlbmRlcigpfXVwZGF0ZUhlYWRlckNsYXNzZXMobCl7aWYobG8obCxmdW5jdGlvbiB2Y3QoKXtyZXR1cm4gQXJyYXkuZnJvbShyZ2UudmFsdWVzKCkp''@;'; put 'put ''LmNvbmNhdChuZ2UsZWdlLHRnZSl9KCkpLCExIT09dGhpcy5lbmFibGVkKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhPjE/YS0xOjApLGg9MTtoPGE7aCsrKWRbaC0xXT1hcmd1bWVudHNbaF07VGkobCxmdW5jdGlvbiBtY3QoYyxsLGEsZCl7Y29uc3QgaD1bdGdl''@;'; put 'put ''XTtpZihkJiZoLnB1c2gobmdlKSwhMT09PWEpcmV0dXJuIGgucHVzaChlZ2UpLGg7Y29uc3QgZj1jLmdldFNvcnRPcmRlck9mQ29sdW1uKGwpO3JldHVybiBQYShmKSYmaC5wdXNoKHJnZS5nZXQoZikpLGh9KC4uLmQpKX19b25VcGRhdGVTZXR0aW5ncyhsKXtzdXBlci5vblVwZGF0ZVNldHRp''@;'; put 'put ''bmdzKGwpLG51bGwhPT10aGlzLmNvbHVtbk1ldGFDYWNoZSYmdGhpcy5jb2x1bW5NZXRhQ2FjaGUuaW5pdCh0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXROdW1iZXJPZkluZGV4ZXMoKSksUGEobFt0aGlzLnBsdWdpbktleV0pJiZ0aGlzLnNvcnRCeVNldHRpbmdzKGxbdGhpcy5wbHVn''@;'; put 'put ''aW5LZXldKX13YXNDbGlja2FibGVIZWFkZXJDbGlja2VkKGwsYSl7cmV0dXJuIHRoaXMuZ2V0Rmlyc3RDZWxsU2V0dGluZ3MoYSlbdGhpcy5wbHVnaW5LZXldLmhlYWRlckFjdGlvbiYmcG8obC50YXJnZXQsSzRlKX1vbkFmdGVyT25DZWxsTW91c2VEb3duKGwsYSl7aWYoITEhPT15SihhLnJv''@;'; put 'put ''dyxhLmNvbCxsKSYmdGhpcy53YXNDbGlja2FibGVIZWFkZXJDbGlja2VkKGwsYS5jb2wpKXt0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5pc0N0cmxQcmVzc2VkKCkmJih0aGlzLmhvdC5kZXNlbGVjdENlbGwoKSx0aGlzLmhvdC5zZWxlY3RDb2x1bW5zKGEuY29sKSk7Y29uc3QgZD10''@;'; put 'put ''aGlzLmhvdC5nZXRBY3RpdmVFZGl0b3IoKSxoPXRoaXMuZ2V0Q29sdW1uTmV4dENvbmZpZyhhLmNvbCk7bnVsbCE9ZCYmZC5pc09wZW5lZCgpJiZ0aGlzLmhvdC5nZXRDZWxsVmFsaWRhdG9yKGQucm93LGQuY29sKT90aGlzLmhvdC5hZGRIb29rT25jZSgicG9zdEFmdGVyVmFsaWRhdGUiLCgp''@;'; put 'put ''PT57dGhpcy5zb3J0KGgpfSk6dGhpcy5zb3J0KGgpfX1kZXN0cm95KCl7dmFyIGw7bnVsbD09PShsPXRoaXMuY29sdW1uU3RhdGVzTWFuYWdlcil8fHZvaWQgMD09PWx8fGwuZGVzdHJveSgpLHN1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gX0ooKXtjb25zdCBjPXRoaXMuZ2V0QWxsU2F2ZWRT''@;'; put 'put ''b3J0U2V0dGluZ3MoKTtpZihxbyhjKSl0aGlzLnNvcnRCeVNldHRpbmdzKGMpO2Vsc2V7Y29uc3QgbD10aGlzLmhvdC5nZXRTZXR0aW5ncygpW3RoaXMucGx1Z2luS2V5XTt0aGlzLnNvcnRCeVNldHRpbmdzKGwpfX1mdW5jdGlvbiB4Y3QoYyxsKXtjb25zdCBhPVg0ZShsKTtpZighMT09PUo0''@;'; put 'put ''ZShjLGwpfHxudWxsPT09YSlyZXR1cm47Y29uc3QgZD10aGlzLmdldEZpcnN0Q2VsbFNldHRpbmdzKGMpW3RoaXMucGx1Z2luS2V5XTtpZih0aGlzLnVwZGF0ZUhlYWRlckNsYXNzZXMoYSx0aGlzLmNvbHVtblN0YXRlc01hbmFnZXIsYyxkLmluZGljYXRvcixkLmhlYWRlckFjdGlvbiksdGhp''@;'; put 'put ''cy5ob3QuZ2V0U2V0dGluZ3MoKS5hcmlhVGFncyl7Y29uc3Qgdj10aGlzLmNvbHVtblN0YXRlc01hbmFnZXIuZ2V0U29ydE9yZGVyT2ZDb2x1bW4oYyk7dm8obCwuLi4oYz0+WyJhcmlhLXNvcnQiLGNdKSh2P2Ake3Z9ZW5kaW5nYDoibm9uZSIpKX19ZnVuY3Rpb24gRWN0KGMpeyEwPT09YyYm''@;'; put 'put ''dGhpcy5ob3QudmlldyYmV18ocDksdGhpcyxfSikuY2FsbCh0aGlzKX1mdW5jdGlvbiBUY3QoYyxsLGEsZCl7ITEhPT15SihsLnJvdyxsLmNvbCxjKSYmdGhpcy53YXNDbGlja2FibGVIZWFkZXJDbGlja2VkKGMsbC5jb2wpJiZ0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5pc0N0cmxQ''@;'; put 'put ''cmVzc2VkKCkmJihkLmNvbHVtbj0hMCl9ZnVuY3Rpb24gZzkoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIEFjdChjKXt2YXIgbD1mdW5jdGlvbiBrY3QoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAh''@;'; put 'put ''PT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJl''@;'; put 'put ''cikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNvbnN0IEljdD1jbGFzcyBE''@;'; put 'put ''Y3R7Y29uc3RydWN0b3IobCxhKXtnOSh0aGlzLCJwbHVnaW4iLHZvaWQgMCksZzkodGhpcywiaG90Iix2b2lkIDApLGc5KHRoaXMsImVuZHBvaW50cyIsW10pLGc5KHRoaXMsInNldHRpbmdzIix2b2lkIDApLGc5KHRoaXMsInNldHRpbmdzVHlwZSIsImFycmF5IiksZzkodGhpcywiY3VycmVu''@;'; put 'put ''dEVuZHBvaW50IixudWxsKSxnOSh0aGlzLCJjZWxsc1RvU2V0Q2FjaGUiLFtdKSx0aGlzLnBsdWdpbj1sLHRoaXMuaG90PXRoaXMucGx1Z2luLmhvdCx0aGlzLnNldHRpbmdzPWF9aW5pdEVuZHBvaW50cygpe3RoaXMuZW5kcG9pbnRzPXRoaXMucGFyc2VTZXR0aW5ncygpLHRoaXMucmVmcmVz''@;'; put 'put ''aEFsbEVuZHBvaW50cygpfWdldEVuZHBvaW50KGwpe3JldHVybiJmdW5jdGlvbiI9PT10aGlzLnNldHRpbmdzVHlwZT90aGlzLmZpbGxNaXNzaW5nRW5kcG9pbnREYXRhKHRoaXMuc2V0dGluZ3MpW2xdOnRoaXMuZW5kcG9pbnRzW2xdfWdldEFsbEVuZHBvaW50cygpe3JldHVybiJmdW5jdGlv''@;'; put 'put ''biI9PT10aGlzLnNldHRpbmdzVHlwZT90aGlzLmZpbGxNaXNzaW5nRW5kcG9pbnREYXRhKHRoaXMuc2V0dGluZ3MpOnRoaXMuZW5kcG9pbnRzfWZpbGxNaXNzaW5nRW5kcG9pbnREYXRhKGwpe3JldHVybiB0aGlzLnBhcnNlU2V0dGluZ3MobC5jYWxsKHRoaXMpKX1wYXJzZVNldHRpbmdzKGwp''@;'; put 'put ''e2NvbnN0IGE9W107bGV0IGQ9bDtpZihkfHwiZnVuY3Rpb24iIT10eXBlb2YgdGhpcy5zZXR0aW5ncylyZXR1cm4gZHx8KGQ9dGhpcy5zZXR0aW5ncyksWW4oZCxoPT57Y29uc3QgZj17fTt0aGlzLmFzc2lnblNldHRpbmcoaCxmLCJyYW5nZXMiLFtbMCx0aGlzLmhvdC5jb3VudFJvd3MoKS0x''@;'; put 'put ''XV0pLHRoaXMuYXNzaWduU2V0dGluZyhoLGYsInJldmVyc2VkUm93Q29vcmRzIiwhMSksdGhpcy5hc3NpZ25TZXR0aW5nKGgsZiwiZGVzdGluYXRpb25Sb3ciLG5ldyBFcnJvcigiXG4gICAgICAgIFlvdSBtdXN0IHByb3ZpZGUgYSBkZXN0aW5hdGlvbiByb3cgZm9yIHRoZSBDb2x1bW4gU3Vt''@;'; put 'put ''bWFyeSBwbHVnaW4gaW4gb3JkZXIgdG8gd29yayBwcm9wZXJseSFcbiAgICAgICIpKSx0aGlzLmFzc2lnblNldHRpbmcoaCxmLCJkZXN0aW5hdGlvbkNvbHVtbiIsbmV3IEVycm9yKCJcbiAgICAgICAgWW91IG11c3QgcHJvdmlkZSBhIGRlc3RpbmF0aW9uIGNvbHVtbiBmb3IgdGhlIENvbHVt''@;'; put 'put ''biBTdW1tYXJ5IHBsdWdpbiBpbiBvcmRlciB0byB3b3JrIHByb3Blcmx5IVxuICAgICAgIikpLHRoaXMuYXNzaWduU2V0dGluZyhoLGYsInNvdXJjZUNvbHVtbiIsaC5kZXN0aW5hdGlvbkNvbHVtbiksdGhpcy5hc3NpZ25TZXR0aW5nKGgsZiwidHlwZSIsInN1bSIpLHRoaXMuYXNzaWduU2V0''@;'; put 'put ''dGluZyhoLGYsImZvcmNlTnVtZXJpYyIsITEpLHRoaXMuYXNzaWduU2V0dGluZyhoLGYsInN1cHByZXNzRGF0YVR5cGVFcnJvcnMiLCEwKSx0aGlzLmFzc2lnblNldHRpbmcoaCxmLCJjdXN0b21GdW5jdGlvbiIsbnVsbCksdGhpcy5hc3NpZ25TZXR0aW5nKGgsZiwicmVhZE9ubHkiLCEwKSx0''@;'; put 'put ''aGlzLmFzc2lnblNldHRpbmcoaCxmLCJyb3VuZEZsb2F0IiwhMSksYS5wdXNoKGYpfSksYTt0aGlzLnNldHRpbmdzVHlwZT0iZnVuY3Rpb24ifWFzc2lnblNldHRpbmcobCxhLGQsaCl7aWYoInJhbmdlcyIhPT1kfHx2b2lkIDAhPT1sW2RdKXtpZigicmFuZ2VzIiE9PWR8fDAhPT1sW2RdLmxl''@;'; put 'put ''bmd0aClpZih2b2lkIDA9PT1sW2RdKXtpZihoIGluc3RhbmNlb2YgRXJyb3IpdGhyb3cgaDthW2RdPWh9ZWxzZSBhW2RdPSJkZXN0aW5hdGlvblJvdyI9PT1kJiZhLnJldmVyc2VkUm93Q29vcmRzP3RoaXMuaG90LmNvdW50Um93cygpLWxbZF0tMTpsW2RdfWVsc2UgYVtkXT1ofXJlc2V0U2V0''@;'; put 'put ''dXBCZWZvcmVTdHJ1Y3R1cmVBbHRlcmF0aW9uKGwsYSxkKXtpZigiZnVuY3Rpb24iIT09dGhpcy5zZXR0aW5nc1R5cGUpcmV0dXJuO2NvbnN0IGg9bC5pbmRleE9mKCJyb3ciKT4tMT8icm93IjoiY29sIixmPXRoaXMuZ2V0QWxsRW5kcG9pbnRzKCk7WW4oZix2PT57InJvdyI9PT1oJiZ2LmRl''@;'; put 'put ''c3RpbmF0aW9uUm93Pj1hJiYoImluc2VydF9yb3ciPT09bD92LmFsdGVyUm93T2Zmc2V0PWQ6InJlbW92ZV9yb3ciPT09bCYmKHYuYWx0ZXJSb3dPZmZzZXQ9LTEqZCkpLCJjb2wiPT09aCYmdi5kZXN0aW5hdGlvbkNvbHVtbj49YSYmKCJpbnNlcnRfY29sIj09PWw/di5hbHRlckNvbHVtbk9m''@;'; put 'put ''ZnNldD1kOiJyZW1vdmVfY29sIj09PWwmJih2LmFsdGVyQ29sdW1uT2Zmc2V0PS0xKmQpKX0pLHRoaXMucmVzZXRBbGxFbmRwb2ludHMoZiwhMSl9cmVzZXRTZXR1cEFmdGVyU3RydWN0dXJlQWx0ZXJhdGlvbihsLGEsZCxoLGYpe2xldCB2PSEoYXJndW1lbnRzLmxlbmd0aD41JiZ2b2lkIDAh''@;'; put 'put ''PT1hcmd1bWVudHNbNV0pfHxhcmd1bWVudHNbNV07aWYoImZ1bmN0aW9uIj09PXRoaXMuc2V0dGluZ3NUeXBlKXtjb25zdCBiZT0oKT0+KHRoaXMuaG90LnJlbW92ZUhvb2soImJlZm9yZVZpZXdSZW5kZXIiLGJlKSx0aGlzLnJlZnJlc2hBbGxFbmRwb2ludHMoKSk7cmV0dXJuIHZvaWQgdGhp''@;'; put 'put ''cy5ob3QuYWRkSG9va09uY2UoImJlZm9yZVZpZXdSZW5kZXIiLGJlKX1jb25zdCBNPWwuaW5kZXhPZigicm93Iik+LTE/InJvdyI6ImNvbCIsRD1sLmluZGV4T2YoInJlbW92ZSIpPi0xPy0xOjEsWj10aGlzLmdldEFsbEVuZHBvaW50cygpLHJlPTA9PT1sLmluZGV4T2YoIm1vdmVfcm93Iiks''@;'; put 'put ''Y2U9YTtZbihaLGJlPT57InJvdyI9PT1NJiZiZS5kZXN0aW5hdGlvblJvdz49Y2UmJihiZS5hbHRlclJvd09mZnNldD1EKmQpLCJjb2wiPT09TSYmYmUuZGVzdGluYXRpb25Db2x1bW4+PWNlJiYoYmUuYWx0ZXJDb2x1bW5PZmZzZXQ9RCpkKX0pLHRoaXMucmVzZXRBbGxFbmRwb2ludHMoWiwh''@;'; put 'put ''cmUpLFluKFoscmU/YmU9Pnt0aGlzLmV4dGVuZEVuZHBvaW50UmFuZ2VzKGJlLGNlLGhbMF0saC5sZW5ndGgpLHRoaXMucmVjcmVhdGVQaHlzaWNhbFJhbmdlcyhiZSksdGhpcy5jbGVhck9mZnNldEluZm9ybWF0aW9uKGJlKX06YmU9Pnt0aGlzLnNoaWZ0RW5kcG9pbnRDb29yZGluYXRlcyhi''@;'; put 'put ''ZSxjZSl9KSx2JiZ0aGlzLnJlZnJlc2hBbGxFbmRwb2ludHMoKX1jbGVhck9mZnNldEluZm9ybWF0aW9uKGwpe2wuYWx0ZXJSb3dPZmZzZXQ9dm9pZCAwLGwuYWx0ZXJDb2x1bW5PZmZzZXQ9dm9pZCAwfWV4dGVuZEVuZHBvaW50UmFuZ2VzKGwsYSxkLGgpe1luKGwucmFuZ2VzLGY9PntmWzFd''@;'; put 'put ''JiYoYT49ZlswXSYmYTw9ZlsxXT9kPmZbMV0/ZlsxXSs9aDpkPGZbMF0mJihmWzBdLT1oKTpkPj1mWzBdJiZkPD1mWzFdJiYoZlsxXS09aCxhPD1mWzBdJiYoZlswXSs9MSxmWzFdKz0xKSkpfSl9cmVjcmVhdGVQaHlzaWNhbFJhbmdlcyhsKXtjb25zdCBkPVtdLGg9W107WW4obC5yYW5nZXMs''@;'; put 'put ''Zj0+e2NvbnN0IHY9W107aWYoZlsxXSlmb3IobGV0IE09ZlswXTtNPD1mWzFdO00rKyl2LnB1c2godGhpcy5ob3QudG9QaHlzaWNhbFJvdyhNKSk7ZWxzZSB2LnB1c2godGhpcy5ob3QudG9QaHlzaWNhbFJvdyhmWzBdKSk7aC5wdXNoKHYpfSksWW4oaCxmPT57bGV0IHY9W107WW4oZiwoTSxE''@;'; put 'put ''KT0+ezA9PT1EP3YucHVzaChNKTpmW0RdIT09ZltELTFdKzEmJih2LnB1c2goZltELTFdKSxkLnB1c2godiksdj1bXSx2LnB1c2goTSkpLEQ9PT1mLmxlbmd0aC0xJiYodi5wdXNoKE0pLGQucHVzaCh2KSl9KX0pLGwucmFuZ2VzPWR9c2hpZnRFbmRwb2ludENvb3JkaW5hdGVzKGwsYSl7bC5h''@;'; put 'put ''bHRlclJvd09mZnNldCYmMCE9PWwuYWx0ZXJSb3dPZmZzZXQ/KGwuZGVzdGluYXRpb25Sb3crPWwuYWx0ZXJSb3dPZmZzZXR8fDAsWW4obC5yYW5nZXMsZD0+e1luKGQsKGgsZik9PntoPj1hJiYoZFtmXSs9bC5hbHRlclJvd09mZnNldHx8MCl9KX0pKTpsLmFsdGVyQ29sdW1uT2Zmc2V0JiYw''@;'; put 'put ''IT09bC5hbHRlckNvbHVtbk9mZnNldCYmKGwuZGVzdGluYXRpb25Db2x1bW4rPWwuYWx0ZXJDb2x1bW5PZmZzZXR8fDAsbC5zb3VyY2VDb2x1bW4rPWwuYWx0ZXJDb2x1bW5PZmZzZXR8fDApfXJlc2V0QWxsRW5kcG9pbnRzKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1h''@;'; put 'put ''cmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnRoaXMuZ2V0QWxsRW5kcG9pbnRzKCksYT0hKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdO2wuc29tZShoPT57Y29uc3Qgdj1oLmFsdGVyQ29sdW1uT2Zmc2V0fHwwO3JldHVybiBoLmRlc3Rp''@;'; put 'put ''bmF0aW9uUm93KyhoLmFsdGVyUm93T2Zmc2V0fHwwKT49dGhpcy5ob3QuY291bnRSb3dzKCl8fGguZGVzdGluYXRpb25Db2x1bW4rdj49dGhpcy5ob3QuY291bnRDb2xzKCl9KXx8KHRoaXMuY2VsbHNUb1NldENhY2hlPVtdLFluKGwsaD0+e3RoaXMucmVzZXRFbmRwb2ludFZhbHVlKGgsYSl9''@;'; put 'put ''KSx0aGlzLmhvdC5zZXREYXRhQXRDZWxsKHRoaXMuY2VsbHNUb1NldENhY2hlLCJDb2x1bW5TdW1tYXJ5LnJlc2V0IiksdGhpcy5jZWxsc1RvU2V0Q2FjaGU9W10pfXJlZnJlc2hBbGxFbmRwb2ludHMoKXt0aGlzLmNlbGxzVG9TZXRDYWNoZT1bXSxZbih0aGlzLmdldEFsbEVuZHBvaW50cygp''@;'; put 'put ''LGw9Pnt0aGlzLmN1cnJlbnRFbmRwb2ludD1sLHRoaXMucGx1Z2luLmNhbGN1bGF0ZShsKSx0aGlzLnNldEVuZHBvaW50VmFsdWUobCwiaW5pdCIpfSksdGhpcy5jdXJyZW50RW5kcG9pbnQ9bnVsbCx0aGlzLmhvdC5zZXREYXRhQXRDZWxsKHRoaXMuY2VsbHNUb1NldENhY2hlLCJDb2x1bW5T''@;'; put 'put ''dW1tYXJ5LnJlc2V0IiksdGhpcy5jZWxsc1RvU2V0Q2FjaGU9W119cmVmcmVzaENoYW5nZWRFbmRwb2ludHMobCl7Y29uc3QgYT1bXTt0aGlzLmNlbGxzVG9TZXRDYWNoZT1bXSxZbihsLChkLGgsZik9PntgJHtkWzJdfHwiIn1gIT1gJHtkWzNdfWAmJlluKHRoaXMuZ2V0QWxsRW5kcG9pbnRz''@;'; put 'put ''KCksKHYsTSk9Pnt0aGlzLmhvdC5wcm9wVG9Db2woZltoXVsxXSk9PT12LnNvdXJjZUNvbHVtbiYmLTE9PT1hLmluZGV4T2YoTSkmJmEucHVzaChNKX0pfSksWW4oYSxkPT57dGhpcy5yZWZyZXNoRW5kcG9pbnQodGhpcy5nZXRFbmRwb2ludChkKSl9KSx0aGlzLmhvdC5zZXREYXRhQXRDZWxs''@;'; put 'put ''KHRoaXMuY2VsbHNUb1NldENhY2hlLCJDb2x1bW5TdW1tYXJ5LnJlc2V0IiksdGhpcy5jZWxsc1RvU2V0Q2FjaGU9W119cmVmcmVzaENlbGxNZXRhcygpe3RoaXMuZW5kcG9pbnRzLmZvckVhY2gobD0+e2NvbnN0IGE9dGhpcy5ob3QudG9WaXN1YWxSb3cobC5kZXN0aW5hdGlvblJvdyk7aWYo''@;'; put 'put ''bnVsbCE9PWEpe2NvbnN0IGQ9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEoYSxsLmRlc3RpbmF0aW9uQ29sdW1uKTtkLnJlYWRPbmx5PWwucmVhZE9ubHksZC5jbGFzc05hbWU9ImNvbHVtblN1bW1hcnlSZXN1bHQifX0pfXJlZnJlc2hFbmRwb2ludChsKXt0aGlzLmN1cnJlbnRFbmRwb2ludD1sLHRo''@;'; put 'put ''aXMucGx1Z2luLmNhbGN1bGF0ZShsKSx0aGlzLnNldEVuZHBvaW50VmFsdWUobCksdGhpcy5jdXJyZW50RW5kcG9pbnQ9bnVsbH1yZXNldEVuZHBvaW50VmFsdWUobCl7bGV0IGE9IShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXTtjb25z''@;'; put 'put ''dCBoPWwuYWx0ZXJDb2x1bW5PZmZzZXR8fDA7dGhpcy5jZWxsc1RvU2V0Q2FjaGUucHVzaChbdGhpcy5ob3QudG9WaXN1YWxSb3cobC5kZXN0aW5hdGlvblJvdysoYSYmbC5hbHRlclJvd09mZnNldHx8MCkpLHRoaXMuaG90LnRvVmlzdWFsQ29sdW1uKGwuZGVzdGluYXRpb25Db2x1bW4rKGE/''@;'; put 'put ''aDowKSksIiJdKX1zZXRFbmRwb2ludFZhbHVlKGwsYSl7bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXTtjb25zdCBoPXRoaXMuaG90LnRvVmlzdWFsUm93KGwuZGVzdGluYXRpb25Sb3cpO2lmKGwuZGVzdGluYXRpb25Sb3c+PXRo''@;'; put 'put ''aXMuaG90LmNvdW50Um93cygpfHxsLmRlc3RpbmF0aW9uQ29sdW1uPj10aGlzLmhvdC5jb3VudENvbHMoKSlyZXR1cm4gdm9pZCB0aGlzLnRocm93T3V0T2ZCb3VuZHNXYXJuaW5nKCk7Y29uc3QgZj10aGlzLmhvdC50b1Zpc3VhbFJvdyhsLmRlc3RpbmF0aW9uUm93KTtpZihudWxsIT09Zil7''@;'; put 'put ''Y29uc3Qgdj10aGlzLmhvdC5nZXRDZWxsTWV0YShmLGwuZGVzdGluYXRpb25Db2x1bW4pOygiaW5pdCI9PT1hfHx2LnJlYWRPbmx5IT09bC5yZWFkT25seSkmJih2LnJlYWRPbmx5PWwucmVhZE9ubHksdi5jbGFzc05hbWU9ImNvbHVtblN1bW1hcnlSZXN1bHQiKX1pZigoITA9PT1sLnJvdW5k''@;'; put 'put ''RmxvYXR8fE51bWJlci5pc0ludGVnZXIobC5yb3VuZEZsb2F0KSkmJiFpc05hTihsLnJlc3VsdCkpe2NvbnN0IHY9bC5yb3VuZEZsb2F0O2xldCBNPTA7TnVtYmVyLmlzSW50ZWdlcih2KSYmKE09TWF0aC5taW4oTWF0aC5tYXgoMCx2KSwxMDApKSxsLnJlc3VsdD1sLnJlc3VsdC50b0ZpeGVk''@;'; put 'put ''KE0pfWQ/dGhpcy5ob3Quc2V0RGF0YUF0Q2VsbChoLGwuZGVzdGluYXRpb25Db2x1bW4sbC5yZXN1bHQsIkNvbHVtblN1bW1hcnkuc2V0Iik6dGhpcy5jZWxsc1RvU2V0Q2FjaGUucHVzaChbaCxsLmRlc3RpbmF0aW9uQ29sdW1uLGwucmVzdWx0XSksbC5hbHRlclJvd09mZnNldD12b2lkIDAs''@;'; put 'put ''bC5hbHRlckNvbHVtbk9mZnNldD12b2lkIDB9dGhyb3dPdXRPZkJvdW5kc1dhcm5pbmcoKXtpbCgiT25lIG9mIHRoZSBDb2x1bW4gU3VtbWFyeSBwbHVnaW5zJyBkZXN0aW5hdGlvbiBwb2ludHMgeW91IHByb3ZpZGVkIGlzIGJleW9uZCB0aGUgdGFibGUgYm91bmRhcmllcyEiKX19O2Z1bmN0''@;'; put 'put ''aW9uIHdKKGMpe3JldHVybiBudWxsPT1jfHxpc05hTihjKX1mdW5jdGlvbiBzRihjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5v''@;'; put 'put ''dCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9Y29uc3QgQ0o9ImNvbHVtblN1bW1hcnkiO3ZhciBiVD1uZXcgV2Vha1NldDtjbGFzcyBOY3QgZXh0ZW5kcyBGc3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gUmN0KGMsbCl7KGZ1bmN0aW9uIExjdChjLGwpe2lm''@;'; put 'put ''KGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuYWRkKGMpfSh0aGlzLGJUKSxmdW5jdGlvbiBPY3QoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIFBjdChj''@;'; put 'put ''KXt2YXIgbD1mdW5jdGlvbiBGY3QoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0''@;'; put 'put ''aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0''@;'; put 'put ''LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfSh0aGlzLCJlbmRwb2ludHMiLG51bGwpfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBDSn1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklU''@;'; put 'put ''WSgpe3JldHVybiAyMjB9aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW0NKXX1lbmFibGVQbHVnaW4oKXt2YXIgbD10aGlzO3RoaXMuZW5hYmxlZHx8KHRoaXMuc2V0dGluZ3M9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtDSl0sdGhpcy5lbmRwb2ludHM9bmV3IElj''@;'; put 'put ''dCh0aGlzLHRoaXMuc2V0dGluZ3MpLHRoaXMuYWRkSG9vaygiYWZ0ZXJJbml0IixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBzRihiVCxsLFZjdCkuY2FsbChsLC4uLmQpfSks''@;'; put 'put ''dGhpcy5hZGRIb29rKCJhZnRlckNoYW5nZSIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gc0YoYlQsbCxqY3QpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJV''@;'; put 'put ''cGRhdGVTZXR0aW5ncyIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gc0YoYlQsbCxCY3QpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlQ3JlYXRlUm93Iiwo''@;'; put 'put ''YSxkLGgpPT50aGlzLmVuZHBvaW50cy5yZXNldFNldHVwQmVmb3JlU3RydWN0dXJlQWx0ZXJhdGlvbigiaW5zZXJ0X3JvdyIsYSxkLG51bGwsaCkpLHRoaXMuYWRkSG9vaygiYmVmb3JlQ3JlYXRlQ29sIiwoYSxkLGgpPT50aGlzLmVuZHBvaW50cy5yZXNldFNldHVwQmVmb3JlU3RydWN0dXJl''@;'; put 'put ''QWx0ZXJhdGlvbigiaW5zZXJ0X2NvbCIsYSxkLG51bGwsaCkpLHRoaXMuYWRkSG9vaygiYmVmb3JlUmVtb3ZlUm93IixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBsLmVuZHBv''@;'; put 'put ''aW50cy5yZXNldFNldHVwQmVmb3JlU3RydWN0dXJlQWx0ZXJhdGlvbigicmVtb3ZlX3JvdyIsLi4uZCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVJlbW92ZUNvbCIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFy''@;'; put 'put ''Z3VtZW50c1toXTtyZXR1cm4gbC5lbmRwb2ludHMucmVzZXRTZXR1cEJlZm9yZVN0cnVjdHVyZUFsdGVyYXRpb24oInJlbW92ZV9jb2wiLC4uLmQpfSksdGhpcy5hZGRIb29rKCJhZnRlckNyZWF0ZVJvdyIsKGEsZCxoKT0+dGhpcy5lbmRwb2ludHMucmVzZXRTZXR1cEFmdGVyU3RydWN0dXJl''@;'; put 'put ''QWx0ZXJhdGlvbigiaW5zZXJ0X3JvdyIsYSxkLG51bGwsaCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJDcmVhdGVDb2wiLChhLGQsaCk9PnRoaXMuZW5kcG9pbnRzLnJlc2V0U2V0dXBBZnRlclN0cnVjdHVyZUFsdGVyYXRpb24oImluc2VydF9jb2wiLGEsZCxudWxsLGgpKSx0aGlzLmFkZEhvb2so''@;'; put 'put ''ImFmdGVyUmVtb3ZlUm93IixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBsLmVuZHBvaW50cy5yZXNldFNldHVwQWZ0ZXJTdHJ1Y3R1cmVBbHRlcmF0aW9uKCJyZW1vdmVfcm93''@;'; put 'put ''IiwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJSZW1vdmVDb2wiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGwuZW5kcG9pbnRzLnJlc2V0U2V0dXBBZnRlclN0cnVjdHVy''@;'; put 'put ''ZUFsdGVyYXRpb24oInJlbW92ZV9jb2wiLC4uLmQpfSksdGhpcy5hZGRIb29rKCJhZnRlclJvd01vdmUiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIHNGKGJULGwsemN0KS5j''@;'; put 'put ''YWxsKGwsLi4uZCl9KSxzdXBlci5lbmFibGVQbHVnaW4oKSl9ZGlzYWJsZVBsdWdpbigpe3RoaXMuZW5kcG9pbnRzPW51bGwsdGhpcy5zZXR0aW5ncz1udWxsLHRoaXMuY3VycmVudEVuZHBvaW50PW51bGwsc3VwZXIuZGlzYWJsZVBsdWdpbigpfXVwZGF0ZVBsdWdpbigpe3RoaXMuZGlzYWJs''@;'; put 'put ''ZVBsdWdpbigpLHRoaXMuZW5hYmxlUGx1Z2luKCksdGhpcy5lbmRwb2ludHMuaW5pdEVuZHBvaW50cygpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWNhbGN1bGF0ZShsKXtzd2l0Y2gobC50eXBlLnRvTG93ZXJDYXNlKCkpe2Nhc2Uic3VtIjpsLnJlc3VsdD10aGlzLmNhbGN1bGF0ZVN1bShsKTti''@;'; put 'put ''cmVhaztjYXNlIm1pbiI6Y2FzZSJtYXgiOmwucmVzdWx0PXRoaXMuY2FsY3VsYXRlTWluTWF4KGwsbC50eXBlKTticmVhaztjYXNlImNvdW50IjpsLnJlc3VsdD10aGlzLmNvdW50RW50cmllcyhsKTticmVhaztjYXNlImF2ZXJhZ2UiOmwucmVzdWx0PXRoaXMuY2FsY3VsYXRlQXZlcmFnZShs''@;'; put 'put ''KTticmVhaztjYXNlImN1c3RvbSI6bC5yZXN1bHQ9bC5jdXN0b21GdW5jdGlvbi5jYWxsKHRoaXMsbCl9fWNhbGN1bGF0ZVN1bShsKXtsZXQgYT0wO3JldHVybiBYbyhsLnJhbmdlcyxkPT57YSs9dGhpcy5nZXRQYXJ0aWFsU3VtKGQsbC5zb3VyY2VDb2x1bW4pfSksYX1nZXRQYXJ0aWFsU3Vt''@;'; put 'put ''KGwsYSl7bGV0IGQ9MCxoPWxbMV18fGxbMF0sZj1udWxsLHY9MDtkb3tpZihmPXRoaXMuZ2V0Q2VsbFZhbHVlKGgsYSksZj13SihmKT9udWxsOmYsbnVsbCE9PWYpe2NvbnN0IE09KGAke2Z9YC5zcGxpdCgiLiIpWzFdfHxbXSkubGVuZ3RofHwxO00+diYmKHY9TSl9ZCs9Znx8MCxoLT0xfXdo''@;'; put 'put ''aWxlKGg+PWxbMF0pO3JldHVybiBNYXRoLnJvdW5kKGQqMTAqKnYpLzEwKip2fWNhbGN1bGF0ZU1pbk1heChsLGEpe2xldCBkPW51bGw7cmV0dXJuIFhvKGwucmFuZ2VzLGg9Pntjb25zdCBmPXRoaXMuZ2V0UGFydGlhbE1pbk1heChoLGwuc291cmNlQ29sdW1uLGEpO2lmKG51bGw9PT1kJiZu''@;'; put 'put ''dWxsIT09ZiYmKGQ9ZiksbnVsbCE9PWYpc3dpdGNoKGEpe2Nhc2UibWluIjpkPU1hdGgubWluKGQsZik7YnJlYWs7Y2FzZSJtYXgiOmQ9TWF0aC5tYXgoZCxmKX19KSxudWxsPT09ZD8iTm90IGVub3VnaCBkYXRhIjpkfWdldFBhcnRpYWxNaW5NYXgobCxhLGQpe2xldCB2LGg9bnVsbCxmPWxb''@;'; put 'put ''MV18fGxbMF07ZG97aWYodj10aGlzLmdldENlbGxWYWx1ZShmLGEpLHY9d0oodik/bnVsbDp2LG51bGw9PT1oKWg9djtlbHNlIGlmKG51bGwhPT12KXN3aXRjaChkKXtjYXNlIm1pbiI6aD1NYXRoLm1pbihoLHYpO2JyZWFrO2Nhc2UibWF4IjpoPU1hdGgubWF4KGgsdil9Zi09MX13aGlsZShm''@;'; put 'put ''Pj1sWzBdKTtyZXR1cm4gaH1jb3VudEVtcHR5KGwsYSl7bGV0IGQsaD0wLGY9bFsxXXx8bFswXTtkb3tkPXRoaXMuZ2V0Q2VsbFZhbHVlKGYsYSksZD13SihkKT9udWxsOmQsbnVsbD09PWQmJihoKz0xKSxmLT0xfXdoaWxlKGY+PWxbMF0pO3JldHVybiBofWNvdW50RW50cmllcyhsKXtsZXQg''@;'; put 'put ''YT0wO3JldHVybiBYbyhsLnJhbmdlcyxoPT57Y29uc3QgZj12b2lkIDA9PT1oWzFdPzE6aFsxXS1oWzBdKzEsdj10aGlzLmNvdW50RW1wdHkoaCxsLnNvdXJjZUNvbHVtbik7YSs9ZixhLT12fSksYX1jYWxjdWxhdGVBdmVyYWdlKGwpe3JldHVybiB0aGlzLmNhbGN1bGF0ZVN1bShsKS90aGlz''@;'; put 'put ''LmNvdW50RW50cmllcyhsKX1nZXRDZWxsVmFsdWUobCxhKXtjb25zdCBkPXRoaXMuaG90LnRvVmlzdWFsUm93KGwpLGg9dGhpcy5ob3QudG9WaXN1YWxDb2x1bW4oYSk7bGV0IGY9dGhpcy5ob3QuZ2V0U291cmNlRGF0YUF0Q2VsbChsLGEpLHY9IiI7aWYobnVsbCE9PWQmJm51bGwhPT1oJiYo''@;'; put 'put ''dj10aGlzLmhvdC5nZXRDZWxsTWV0YShkLGgpLmNsYXNzTmFtZXx8IiIpLHYuaW5kZXhPZigiY29sdW1uU3VtbWFyeVJlc3VsdCIpPi0xKXJldHVybiBudWxsO2lmKHRoaXMuZW5kcG9pbnRzLmN1cnJlbnRFbmRwb2ludC5mb3JjZU51bWVyaWMmJigic3RyaW5nIj09dHlwZW9mIGYmJihmPWYu''@;'; put 'put ''cmVwbGFjZSgvLC8sIi4iKSksZj1wYXJzZUZsb2F0KGYpKSxpc05hTihmKSYmIXRoaXMuZW5kcG9pbnRzLmN1cnJlbnRFbmRwb2ludC5zdXBwcmVzc0RhdGFUeXBlRXJyb3JzKXRocm93IG5ldyBFcnJvcihnbGBDb2x1bW5TdW1tYXJ5IHBsdWdpbjogY2VsbCBhdCAoJHtsfSwgJHthfSkgaXMg''@;'; put 'put ''bm90IGluIGFceDIwCiAgICAgICAgICBudW1lcmljIGZvcm1hdC4gQ2Fubm90IGRvIHRoZSBjYWxjdWxhdGlvbi5gKTtyZXR1cm4gZn19ZnVuY3Rpb24gVmN0KCl7dGhpcy5lbmRwb2ludHMuaW5pdEVuZHBvaW50cygpfWZ1bmN0aW9uIEJjdChjKXt2b2lkIDAhPT1jLmNvbHVtbnMmJnRoaXMu''@;'; put 'put ''ZW5kcG9pbnRzLnJlZnJlc2hDZWxsTWV0YXMoKX1mdW5jdGlvbiBqY3QoYyxsKXtjJiYiQ29sdW1uU3VtbWFyeS5yZXNldCIhPT1sJiYiQ29sdW1uU3VtbWFyeS5zZXQiIT09bCYmImxvYWREYXRhIiE9PWwmJnRoaXMuZW5kcG9pbnRzLnJlZnJlc2hDaGFuZ2VkRW5kcG9pbnRzKGMpfWZ1bmN0''@;'; put 'put ''aW9uIHpjdChjLGwpe3RoaXMuZW5kcG9pbnRzLnJlc2V0U2V0dXBCZWZvcmVTdHJ1Y3R1cmVBbHRlcmF0aW9uKCJtb3ZlX3JvdyIsY1swXSxjLmxlbmd0aCxjLHRoaXMucGx1Z2luTmFtZSksdGhpcy5lbmRwb2ludHMucmVzZXRTZXR1cEFmdGVyU3RydWN0dXJlQWx0ZXJhdGlvbigibW92ZV9y''@;'; put 'put ''b3ciLGwsYy5sZW5ndGgsYyx0aGlzLnBsdWdpbk5hbWUpfWZ1bmN0aW9uIFNKKGMsbCxhKXtvZ2UoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIG9nZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVu''@;'; put 'put ''dHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gWV8oYyxsKXtyZXR1cm4gYy5nZXQoeEooYyxsKSl9ZnVuY3Rpb24gTUooYyxsLGEpe3JldHVybiBjLnNldCh4SihjLGwpLGEpLGF9ZnVuY3Rpb24geEooYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwp''@;'; put 'put ''KXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciBsRj1uZXcgV2Vha01hcCxjRj1uZXcgV2Vha01hcCx1Rj1uZXcgV2Vha01hcCxzZ2U9bmV3IFdlYWtTZXQ7''@;'; put 'put ''Y2xhc3MgbGdle2NvbnN0cnVjdG9yKCl7KGZ1bmN0aW9uIFVjdChjLGwpe29nZShjLGwpLGwuYWRkKGMpfSkodGhpcyxzZ2UpLFNKKHRoaXMsbEYsITApLFNKKHRoaXMsY0YsbnVsbCksU0oodGhpcyx1RixuZXcgUmVzaXplT2JzZXJ2ZXIobD0+eEooc2dlLHRoaXMsWmN0KS5jYWxsKHRoaXMs''@;'; put 'put ''bCkpKX1zZXRPYnNlcnZlZEVsZW1lbnQobCl7TUooY0YsdGhpcyxsKX11bm9ic2VydmUoKXtZXyh1Rix0aGlzKS51bm9ic2VydmUoWV8oY0YsdGhpcykpfW9ic2VydmUoKXtNSihsRix0aGlzLCEwKSxZXyh1Rix0aGlzKS5vYnNlcnZlKFlfKGNGLHRoaXMpKX1kZXN0cm95KCl7WV8odUYsdGhp''@;'; put 'put ''cykuZGlzY29ubmVjdCgpfX1mdW5jdGlvbiBaY3QoYyl7IVlfKGxGLHRoaXMpJiZBcnJheS5pc0FycmF5KGMpJiZjLmxlbmd0aD9jLmZvckVhY2gobD0+e2xldHtib3JkZXJCb3hTaXplOmF9PWw7Y29uc3R7aW5saW5lU2l6ZTpkLGJsb2NrU2l6ZTpofT1hWzBdO3RoaXMucnVuTG9jYWxIb29r''@;'; put 'put ''cygicmVzaXplIixkLGgpfSk6TUoobEYsdGhpcywhMSl9ZnVuY3Rpb24gbTkoYyxsLGEpeyhmdW5jdGlvbiBXY3QoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVj''@;'; put 'put ''dCIpfSkoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIE5sKGMsbCl7cmV0dXJuIGMuZ2V0KGNnZShjLGwpKX1mdW5jdGlvbiBSZyhjLGwsYSl7cmV0dXJuIGMuc2V0KGNnZShjLGwpLGEpLGF9ZnVuY3Rpb24gY2dlKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhs''@;'; put 'put ''KSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1UbChsZ2UseTEpO3ZhciB2OT1uZXcgV2Vha01hcCxFSj1uZXcgV2Vha01hcCxMZz1uZXcgV2Vha01hcCxxbT1u''@;'; put 'put ''ZXcgV2Vha01hcCxYbT1uZXcgV2Vha01hcCxkRj1uZXcgV2Vha01hcCxHXz1uZXcgV2Vha01hcDtjbGFzcyBiOXtzdGF0aWMgZ2V0IENMQVNTX0VESVRPUl9DT05UQUlORVIoKXtyZXR1cm4iaHRDb21tZW50c0NvbnRhaW5lciJ9c3RhdGljIGdldCBDTEFTU19FRElUT1IoKXtyZXR1cm4iaHRD''@;'; put 'put ''b21tZW50cyJ9c3RhdGljIGdldCBDTEFTU19JTlBVVCgpe3JldHVybiJodENvbW1lbnRUZXh0QXJlYSJ9c3RhdGljIGdldCBDTEFTU19DRUxMKCl7cmV0dXJuImh0Q29tbWVudENlbGwifWNvbnN0cnVjdG9yKGwsYSl7dmFyIGQ9dGhpczttOSh0aGlzLHY5LHZvaWQgMCksbTkodGhpcyxFSiwh''@;'; put 'put ''MSksbTkodGhpcyxMZyxudWxsKSxtOSh0aGlzLHFtLHZvaWQgMCksbTkodGhpcyxYbSx2b2lkIDApLG05KHRoaXMsZEYsITApLG05KHRoaXMsR18sbmV3IGxnZSksUmcodjksdGhpcyxsKSxSZyhFSix0aGlzLGEpLFJnKHFtLHRoaXMsdGhpcy5jcmVhdGVFZGl0b3IoKSksUmcoWG0sdGhpcyxO''@;'; put 'put ''bChxbSx0aGlzKS5zdHlsZSksTmwoR18sdGhpcykuc2V0T2JzZXJ2ZWRFbGVtZW50KHRoaXMuZ2V0SW5wdXRFbGVtZW50KCkpLE5sKEdfLHRoaXMpLmFkZExvY2FsSG9vaygicmVzaXplIixmdW5jdGlvbigpe2Zvcih2YXIgaD1hcmd1bWVudHMubGVuZ3RoLGY9bmV3IEFycmF5KGgpLHY9MDt2''@;'; put 'put ''PGg7disrKWZbdl09YXJndW1lbnRzW3ZdO3JldHVybiBkLnJ1bkxvY2FsSG9va3MoInJlc2l6ZSIsLi4uZil9KSx0aGlzLmhpZGUoKX1zZXRQb3NpdGlvbihsLGEpe05sKFhtLHRoaXMpLmxlZnQ9YCR7bH1weGAsTmwoWG0sdGhpcykudG9wPWAke2F9cHhgfXNldFNpemUobCxhKXtpZihsJiZh''@;'; put 'put ''KXtjb25zdCBkPXRoaXMuZ2V0SW5wdXRFbGVtZW50KCk7ZC5zdHlsZS53aWR0aD1gJHtsfXB4YCxkLnN0eWxlLmhlaWdodD1gJHthfXB4YH19Z2V0U2l6ZSgpe3JldHVybnt3aWR0aDpzdSh0aGlzLmdldElucHV0RWxlbWVudCgpKSxoZWlnaHQ6eHUodGhpcy5nZXRJbnB1dEVsZW1lbnQoKSl9''@;'; put 'put ''fW9ic2VydmVTaXplKCl7TmwoR18sdGhpcykub2JzZXJ2ZSgpfXJlc2V0U2l6ZSgpe2NvbnN0IGw9dGhpcy5nZXRJbnB1dEVsZW1lbnQoKTtsLnN0eWxlLndpZHRoPSIiLGwuc3R5bGUuaGVpZ2h0PSIifXNldFJlYWRPbmx5U3RhdGUobCl7dGhpcy5nZXRJbnB1dEVsZW1lbnQoKS5yZWFkT25s''@;'; put 'put ''eT1sfXNob3coKXtObChYbSx0aGlzKS5kaXNwbGF5PSJibG9jayIsUmcoZEYsdGhpcywhMSl9aGlkZSgpe05sKEdfLHRoaXMpLnVub2JzZXJ2ZSgpLE5sKGRGLHRoaXMpfHwoTmwoWG0sdGhpcykuZGlzcGxheT0ibm9uZSIpLFJnKGRGLHRoaXMsITApfWlzVmlzaWJsZSgpe3JldHVybiJibG9j''@;'; put 'put ''ayI9PT1ObChYbSx0aGlzKS5kaXNwbGF5fXNldFZhbHVlKCl7Y29uc3QgYT0oYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOiIiKXx8IiI7dGhpcy5nZXRJbnB1dEVsZW1lbnQoKS52YWx1ZT1hfWdldFZhbHVlKCl7cmV0dXJuIHRoaXMuZ2V0''@;'; put 'put ''SW5wdXRFbGVtZW50KCkudmFsdWV9aXNGb2N1c2VkKCl7cmV0dXJuIE5sKHY5LHRoaXMpLmFjdGl2ZUVsZW1lbnQ9PT10aGlzLmdldElucHV0RWxlbWVudCgpfWZvY3VzKCl7dGhpcy5nZXRJbnB1dEVsZW1lbnQoKS5mb2N1cygpfWNyZWF0ZUVkaXRvcigpe2NvbnN0IGw9TmwodjksdGhpcyku''@;'; put 'put ''Y3JlYXRlRWxlbWVudCgiZGl2IiksYT1ObCh2OSx0aGlzKS5jcmVhdGVFbGVtZW50KCJ0ZXh0YXJlYSIpO3JldHVybiBsLnN0eWxlLmRpc3BsYXk9Im5vbmUiLFJnKExnLHRoaXMsTmwodjksdGhpcykuY3JlYXRlRWxlbWVudCgiZGl2IikpLE5sKExnLHRoaXMpLnNldEF0dHJpYnV0ZSgiZGly''@;'; put 'put ''IixObChFSix0aGlzKT8icnRsIjoibHRyIiksVGkoTmwoTGcsdGhpcyksYjkuQ0xBU1NfRURJVE9SX0NPTlRBSU5FUiksTmwodjksdGhpcykuYm9keS5hcHBlbmRDaGlsZChObChMZyx0aGlzKSksVGkobCxiOS5DTEFTU19FRElUT1IpLFRpKGEsYjkuQ0xBU1NfSU5QVVQpLGEuc2V0QXR0cmli''@;'; put 'put ''dXRlKCJkYXRhLWhvdC1pbnB1dCIsITApLGwuYXBwZW5kQ2hpbGQoYSksTmwoTGcsdGhpcykuYXBwZW5kQ2hpbGQobCksbH1nZXRJbnB1dEVsZW1lbnQoKXtyZXR1cm4gTmwocW0sdGhpcykucXVlcnlTZWxlY3RvcihgLiR7YjkuQ0xBU1NfSU5QVVR9YCl9Z2V0RWRpdG9yRWxlbWVudCgpe3Jl''@;'; put 'put ''dHVybiBObChxbSx0aGlzKX1kZXN0cm95KCl7Y29uc3QgbD1ObChMZyx0aGlzKT9ObChMZyx0aGlzKS5wYXJlbnROb2RlOm51bGw7TmwocW0sdGhpcykucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChObChxbSx0aGlzKSksUmcocW0sdGhpcyxudWxsKSxSZyhYbSx0aGlzLG51bGwpLE5sKEdfLHRo''@;'; put 'put ''aXMpLmRlc3Ryb3koKSxsJiZsLnJlbW92ZUNoaWxkKE5sKExnLHRoaXMpKX19VGwoYjkseTEpO2NvbnN0IFljdD1iOTtmdW5jdGlvbiBUSihjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gR2N0KGMpe3ZhciBsPWZ1bmN0aW9uICRjdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0''@;'; put 'put ''dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRp''@;'; put 'put ''dmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxl''@;'; put 'put ''OiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgdWdle2NvbnN0cnVjdG9yKGwpe1RKKHRoaXMsIndhc0xhc3RBY3Rpb25TaG93IiwhMCksVEoodGhpcywic2hvd0RlYm91bmNlZCIsbnVsbCksVEoodGhpcywiaGlkaW5nVGltZXIiLG51bGwpLHRoaXMudXBkYXRlRGVsYXkobCl9aGlk''@;'; put 'put ''ZSgpe3RoaXMud2FzTGFzdEFjdGlvblNob3c9ITEsdGhpcy5oaWRpbmdUaW1lcj1zZXRUaW1lb3V0KCgpPT57ITE9PT10aGlzLndhc0xhc3RBY3Rpb25TaG93JiZ0aGlzLnJ1bkxvY2FsSG9va3MoImhpZGUiKX0sMjUwKX1zaG93KGwpe3RoaXMud2FzTGFzdEFjdGlvblNob3c9ITAsdGhpcy5z''@;'; put 'put ''aG93RGVib3VuY2VkKGwpfWNhbmNlbEhpZGluZygpe3RoaXMud2FzTGFzdEFjdGlvblNob3c9ITAsY2xlYXJUaW1lb3V0KHRoaXMuaGlkaW5nVGltZXIpLHRoaXMuaGlkaW5nVGltZXI9bnVsbH11cGRhdGVEZWxheSgpe3RoaXMuc2hvd0RlYm91bmNlZD1NRShhPT57dGhpcy53YXNMYXN0QWN0''@;'; put 'put ''aW9uU2hvdyYmdGhpcy5ydW5Mb2NhbEhvb2tzKCJzaG93IixhLmZyb20ucm93LGEuZnJvbS5jb2wpfSxhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06MjUwKX1kZXN0cm95KCl7dGhpcy5jbGVhckxvY2FsSG9va3MoKX19VGwodWdlLHkxKTtj''@;'; put 'put ''b25zdCBYY3Q9dWdlLHNzPSItLS0tLS0tLS0iO2Z1bmN0aW9uIHk5KGMsbCl7Y29uc3QgYT17fTtyZXR1cm4gWW4oYyxkPT57ZC5mb3JBbGwoKGgsZik9PntoPj0wJiZmPj0wJiYoYVtoXXx8KGFbaF09W10pLGFbaF1bZl09bChoLGYpKX0pfSksYX1mdW5jdGlvbiBKbShjLGwsYSxkLGgpe1lu''@;'; put 'put ''KGMsZj0+e2YuZm9yQWxsKCh2LE0pPT57dj49MCYmTT49MCYmZnVuY3Rpb24gcnV0KGMsbCxhLGQsaCxmKXtjb25zdCB2PWgoYyxsKTtsZXQgTT1kO3YuY2xhc3NOYW1lJiYoTT0idmVydGljYWwiPT09YT9mdW5jdGlvbiB0dXQoYyxsKXtyZXR1cm4tMSE9PWMuaW5kZXhPZihsKT9jOmAke2Mu''@;'; put 'put ''cmVwbGFjZSgiaHRUb3AiLCIiKS5yZXBsYWNlKCJodE1pZGRsZSIsIiIpLnJlcGxhY2UoImh0Qm90dG9tIiwiIikucmVwbGFjZSgiICAiLCIiKX0gJHtsfWB9KHYuY2xhc3NOYW1lLGQpOmZ1bmN0aW9uIG51dChjLGwpe3JldHVybi0xIT09Yy5pbmRleE9mKGwpP2M6YCR7Yy5yZXBsYWNlKCJo''@;'; put 'put ''dExlZnQiLCIiKS5yZXBsYWNlKCJodENlbnRlciIsIiIpLnJlcGxhY2UoImh0UmlnaHQiLCIiKS5yZXBsYWNlKCJodEp1c3RpZnkiLCIiKS5yZXBsYWNlKCIgICIsIiIpfSAke2x9YH0odi5jbGFzc05hbWUsZCkpLGYoYyxsLCJjbGFzc05hbWUiLE0pfSh2LE0sbCxhLGQsaCl9KX0pfWZ1bmN0''@;'; put 'put ''aW9uIGRnZShjKXtyZXR1cm5gPHNwYW4gY2xhc3M9InNlbGVjdGVkIj5cdTI3MTM8L3NwYW4+JHtjfWB9ZnVuY3Rpb24gaEYoYyxsKXtsZXQgYT0hMTtyZXR1cm4gQXJyYXkuaXNBcnJheShjKSYmWW4oYyxkPT4oZC5mb3JBbGwoKGgsZik9PntpZihoPj0wJiZmPj0wJiZsKGgsZikpcmV0dXJu''@;'; put 'put ''IGE9ITAsITF9KSxhKSksYX1mdW5jdGlvbiBmRihjLGwpe2NvbnN0IGE9e3RvcDowLGxlZnQ6MH07aWYobCE9PWMub3duZXJEb2N1bWVudCl7Y29uc3R7ZnJhbWVFbGVtZW50OmR9PWwuZGVmYXVsdFZpZXcse3RvcDpoLGxlZnQ6Zn09ZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTthLnRvcD1o''@;'; put 'put ''LGEubGVmdD1mfXJldHVybiBhfWZ1bmN0aW9uICRfKGMsbCxhKXtoZ2UoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIGhnZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4g''@;'; put 'put ''b2JqZWN0Iil9ZnVuY3Rpb24gUW0oYyxsLGEpe3JldHVybiBjLnNldChVZChjLGwpLGEpLGF9ZnVuY3Rpb24gSm8oYyxsKXtyZXR1cm4gYy5nZXQoVWQoYyxsKSl9ZnVuY3Rpb24gVWQoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVu''@;'; put 'put ''dHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfWNvbnN0IHBGPSJjb21tZW50cyIsT2c9ImNvbW1lbnQiLHlUPSJ2YWx1ZSIsZ0Y9InJlYWRPbmx5IixfVD1wRixBSj1gcGx1Z2luOiR7cEZ9''@;'; put 'put ''YDt2YXIgQWw9bmV3IFdlYWtNYXAsenA9bmV3IFdlYWtNYXAsbUY9bmV3IFdlYWtNYXAsdkY9bmV3IFdlYWtNYXAsa0o9bmV3IFdlYWtNYXAsYkY9bmV3IFdlYWtNYXAsUGg9bmV3IFdlYWtTZXQ7Y2xhc3MgdXV0IGV4dGVuZHMgRnN7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMp''@;'; put 'put ''LGZ1bmN0aW9uIGF1dChjLGwpe2hnZShjLGwpLGwuYWRkKGMpfSh0aGlzLFBoKSxmdW5jdGlvbiBvdXQoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIHN1dChjKXt2YXIgbD1mdW5jdGlvbiBsdXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9s''@;'; put 'put ''LnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigi''@;'; put 'put ''c3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNb''@;'; put 'put ''bF09YSxjfSh0aGlzLCJyYW5nZSIse30pLCRfKHRoaXMsQWwsbnVsbCksJF8odGhpcyx6cCxudWxsKSwkXyh0aGlzLG1GLCExKSwkXyh0aGlzLHZGLCExKSwkXyh0aGlzLGtKLG51bGwpLCRfKHRoaXMsYkYsIiIpfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBwRn1zdGF0aWMgZ2V0''@;'; put 'put ''IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiA2MH1zdGF0aWMgZ2V0IERFRkFVTFRfU0VUVElOR1MoKXtyZXR1cm57ZGlzcGxheURlbGF5OjI1MH19aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW3BGXX1lbmFibGVQbHVnaW4oKXt2YXIgbD10aGlzO3RoaXMuZW5h''@;'; put 'put ''YmxlZHx8KEpvKEFsLHRoaXMpfHwoUW0oQWwsdGhpcyxuZXcgWWN0KHRoaXMuaG90LnJvb3REb2N1bWVudCx0aGlzLmhvdC5pc1J0bCgpKSksSm8oQWwsdGhpcykuYWRkTG9jYWxIb29rKCJyZXNpemUiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXko''@;'; put 'put ''YSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIFVkKFBoLGwsYnV0KS5jYWxsKGwsLi4uZCl9KSksSm8oenAsdGhpcyl8fFFtKHpwLHRoaXMsbmV3IFhjdCh0aGlzLmdldFNldHRpbmcoImRpc3BsYXlEZWxheSIpKSksdGhpcy5hZGRIb29rKCJhZnRlckNvbnRleHRNZW51''@;'; put 'put ''RGVmYXVsdE9wdGlvbnMiLGE9PnRoaXMuYWRkVG9Db250ZXh0TWVudShhKSksdGhpcy5hZGRIb29rKCJhZnRlclJlbmRlcmVyIiwoYSxkLGgsZix2LE0pPT5VZChQaCx0aGlzLGd1dCkuY2FsbCh0aGlzLGEsTSkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJTY3JvbGwiLCgpPT5VZChQaCx0aGlzLHl1''@;'; put 'put ''dCkuY2FsbCh0aGlzKSksdGhpcy5hZGRIb29rKCJhZnRlckJlZ2luRWRpdGluZyIsKCk9PnRoaXMuaGlkZSgpKSx0aGlzLmFkZEhvb2soImFmdGVyRG9jdW1lbnRLZXlEb3duIixhPT5VZChQaCx0aGlzLHBnZSkuY2FsbCh0aGlzLGEpKSx0aGlzLmFkZEhvb2soImJlZm9yZUNvbXBvc2l0aW9u''@;'; put 'put ''U3RhcnQiLGE9PlVkKFBoLHRoaXMscGdlKS5jYWxsKHRoaXMsYSkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJTZXRUaGVtZSIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gVWQoUGgs''@;'; put 'put ''bCxfdXQpLmNhbGwobCwuLi5kKX0pLEpvKHpwLHRoaXMpLmFkZExvY2FsSG9vaygiaGlkZSIsKCk9PnRoaXMuaGlkZSgpKSxKbyh6cCx0aGlzKS5hZGRMb2NhbEhvb2soInNob3ciLChhLGQpPT50aGlzLnNob3dBdENlbGwoYSxkKSksdGhpcy5yZWdpc3RlclNob3J0Y3V0cygpLHRoaXMucmVn''@;'; put 'put ''aXN0ZXJMaXN0ZW5lcnMoKSxzdXBlci5lbmFibGVQbHVnaW4oKSl9dXBkYXRlUGx1Z2luKCl7Sm8oenAsdGhpcykudXBkYXRlRGVsYXkodGhpcy5nZXRTZXR0aW5nKCJkaXNwbGF5RGVsYXkiKSksc3VwZXIudXBkYXRlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe3RoaXMudW5yZWdpc3RlclNo''@;'; put 'put ''b3J0Y3V0cygpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX1yZWdpc3RlclNob3J0Y3V0cygpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCksYT1sLmdldENvbnRleHQoImdyaWQiKSxkPWwuYWRkQ29udGV4dChBSik7YS5hZGRTaG9ydGN1dCh7a2V5czpbWyJDb250cm9sIiwi''@;'; put 'put ''QWx0IiwiTSJdXSxjYWxsYmFjazooKT0+e2NvbnN0IGg9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtRbSh2Rix0aGlzLCEwKSx0aGlzLmhvdC5zY3JvbGxUb0ZvY3VzZWRDZWxsKCgpPT57dGhpcy5zZXRSYW5nZShoKSx0aGlzLnNob3coKSx0aGlzLmZvY3VzRWRpdG9yKCksbC5z''@;'; put 'put ''ZXRBY3RpdmVDb250ZXh0TmFtZShBSiksdGhpcy5ob3QuX3JlZ2lzdGVyVGltZW91dCgoKT0+e1FtKHZGLHRoaXMsITEpfSl9KX0sc3RvcFByb3BhZ2F0aW9uOiEwLHJ1bk9ubHlJZjooKT0+e3ZhciBoO3JldHVybiBudWxsPT09KGg9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSl8''@;'; put 'put ''fHZvaWQgMD09PWg/dm9pZCAwOmguaGlnaGxpZ2h0LmlzQ2VsbCgpfSxncm91cDpfVH0pLGQuYWRkU2hvcnRjdXQoe2tleXM6W1siRXNjYXBlIl1dLGNhbGxiYWNrOigpPT57Sm8oQWwsdGhpcykuc2V0VmFsdWUoSm8oYkYsdGhpcykpLHRoaXMuaGlkZSgpLGwuc2V0QWN0aXZlQ29udGV4dE5h''@;'; put 'put ''bWUoImdyaWQiKX0scnVuT25seUlmOigpPT5KbyhBbCx0aGlzKS5pc1Zpc2libGUoKSYmSm8oQWwsdGhpcykuaXNGb2N1c2VkKCksZ3JvdXA6X1R9KSxkLmFkZFNob3J0Y3V0KHtrZXlzOltbIkNvbnRyb2wvTWV0YSIsIkVudGVyIl1dLGNhbGxiYWNrOigpPT57dGhpcy5oaWRlKCksbC5zZXRB''@;'; put 'put ''Y3RpdmVDb250ZXh0TmFtZSgiZ3JpZCIpfSxydW5Pbmx5SWY6KCk9PkpvKEFsLHRoaXMpLmlzVmlzaWJsZSgpJiZKbyhBbCx0aGlzKS5pc0ZvY3VzZWQoKSxncm91cDpfVH0pLGQuYWRkU2hvcnRjdXQoe2tleXM6W1siU2hpZnQiLCJUYWIiXSxbIlRhYiJdXSxmb3J3YXJkVG9Db250ZXh0Omwu''@;'; put 'put ''Z2V0Q29udGV4dCgiZ3JpZCIpLGNhbGxiYWNrOigpPT57Sm8oQWwsdGhpcykuc2V0VmFsdWUoSm8oQWwsdGhpcykuZ2V0VmFsdWUoKSksdGhpcy5oaWRlKCksbC5zZXRBY3RpdmVDb250ZXh0TmFtZSgiZ3JpZCIpfSxncm91cDpfVH0pfXVucmVnaXN0ZXJTaG9ydGN1dHMoKXt0aGlzLmhvdC5n''@;'; put 'put ''ZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJncmlkIikucmVtb3ZlU2hvcnRjdXRzQnlHcm91cChfVCl9cmVnaXN0ZXJMaXN0ZW5lcnMoKXtjb25zdHtyb290RG9jdW1lbnQ6bH09dGhpcy5ob3QsYT10aGlzLmdldEVkaXRvcklucHV0RWxlbWVudCgpO3RoaXMuZXZlbnRNYW5hZ2Vy''@;'; put 'put ''LmFkZEV2ZW50TGlzdGVuZXIobCwibW91c2VvdmVyIixkPT5VZChQaCx0aGlzLGZ1dCkuY2FsbCh0aGlzLGQpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwsIm1vdXNlZG93biIsZD0+VWQoUGgsdGhpcyxkdXQpLmNhbGwodGhpcyxkKSksdGhpcy5ldmVudE1hbmFnZXIu''@;'; put 'put ''YWRkRXZlbnRMaXN0ZW5lcihsLCJtb3VzZXVwIiwoKT0+VWQoUGgsdGhpcyxwdXQpLmNhbGwodGhpcykpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoYSwiZm9jdXMiLCgpPT5VZChQaCx0aGlzLHZ1dCkuY2FsbCh0aGlzKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRM''@;'; put 'put ''aXN0ZW5lcihhLCJibHVyIiwoKT0+VWQoUGgsdGhpcyxtdXQpLmNhbGwodGhpcykpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodGhpcy5nZXRFZGl0b3JJbnB1dEVsZW1lbnQoKSwibW91c2Vkb3duIixkPT5VZChQaCx0aGlzLGh1dCkuY2FsbCh0aGlzLGQpKX1zZXRSYW5n''@;'; put 'put ''ZShsKXt0aGlzLnJhbmdlPWx9Y2xlYXJSYW5nZSgpe3RoaXMucmFuZ2U9e319dGFyZ2V0SXNDZWxsV2l0aENvbW1lbnQobCl7Y29uc3QgYT1SbShsLnRhcmdldCwiVEQiLCJUQk9EWSIpO3JldHVybiEhKGEmJnBvKGEsImh0Q29tbWVudENlbGwiKSYmUm0oYSxbdGhpcy5ob3Qucm9vdEVsZW1l''@;'; put 'put ''bnRdKSl9dGFyZ2V0SXNDb21tZW50VGV4dEFyZWEobCl7cmV0dXJuIHRoaXMuZ2V0RWRpdG9ySW5wdXRFbGVtZW50KCk9PT1sLnRhcmdldH1zZXRDb21tZW50KGwpe2lmKCF0aGlzLnJhbmdlLmZyb20pdGhyb3cgbmV3IEVycm9yKCdCZWZvcmUgdXNpbmcgdGhpcyBtZXRob2QsIGZpcnN0IHNl''@;'; put 'put ''dCBjZWxsIHJhbmdlIChob3QuZ2V0UGx1Z2luKCJjb21tZW50Iikuc2V0UmFuZ2UoKSknKTtjb25zdCBhPUpvKEFsLHRoaXMpLmdldFZhbHVlKCk7bGV0IGQ9IiI7bnVsbCE9bD9kPWw6bnVsbCE9YSYmKGQ9YSksdGhpcy51cGRhdGVDb21tZW50TWV0YSh0aGlzLnJhbmdlLmZyb20ucm93LHRo''@;'; put 'put ''aXMucmFuZ2UuZnJvbS5jb2wse1t5VF06ZH0pLHRoaXMuaG90LnJlbmRlcigpfXNldENvbW1lbnRBdENlbGwobCxhLGQpe3RoaXMuc2V0UmFuZ2Uoe2Zyb206dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobCxhKX0pLHRoaXMuc2V0Q29tbWVudChkKX1yZW1vdmVDb21tZW50KCl7bGV0IGw9''@;'; put 'put ''IShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSl8fGFyZ3VtZW50c1swXTtpZighdGhpcy5yYW5nZS5mcm9tKXRocm93IG5ldyBFcnJvcignQmVmb3JlIHVzaW5nIHRoaXMgbWV0aG9kLCBmaXJzdCBzZXQgY2VsbCByYW5nZSAoaG90LmdldFBsdWdpbigiY29tbWVu''@;'; put 'put ''dCIpLnNldFJhbmdlKCkpJyk7dGhpcy5ob3Quc2V0Q2VsbE1ldGEodGhpcy5yYW5nZS5mcm9tLnJvdyx0aGlzLnJhbmdlLmZyb20uY29sLE9nKSxsJiZ0aGlzLmhvdC5yZW5kZXIoKSx0aGlzLmhpZGUoKX1yZW1vdmVDb21tZW50QXRDZWxsKGwsYSl7bGV0IGQ9IShhcmd1bWVudHMubGVuZ3Ro''@;'; put 'put ''PjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSl8fGFyZ3VtZW50c1syXTt0aGlzLnNldFJhbmdlKHtmcm9tOnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGwsYSl9KSx0aGlzLnJlbW92ZUNvbW1lbnQoZCl9Z2V0Q29tbWVudCgpe3JldHVybiB0aGlzLmdldENvbW1lbnRNZXRhKHRoaXMucmFu''@;'; put 'put ''Z2UuZnJvbS5yb3csdGhpcy5yYW5nZS5mcm9tLmNvbCx5VCl9Z2V0Q29tbWVudEF0Q2VsbChsLGEpe3JldHVybiB0aGlzLmdldENvbW1lbnRNZXRhKGwsYSx5VCl9c2hvdygpe3ZhciBsO2lmKCF0aGlzLnJhbmdlLmZyb20pdGhyb3cgbmV3IEVycm9yKCdCZWZvcmUgdXNpbmcgdGhpcyBtZXRo''@;'; put 'put ''b2QsIGZpcnN0IHNldCBjZWxsIHJhbmdlIChob3QuZ2V0UGx1Z2luKCJjb21tZW50Iikuc2V0UmFuZ2UoKSknKTtjb25zdHtmcm9tOntyb3c6YSxjb2w6ZH19PXRoaXMucmFuZ2U7aWYoYTwwfHxhPnRoaXMuaG90LmNvdW50U291cmNlUm93cygpLTF8fGQ8MHx8ZD50aGlzLmhvdC5jb3VudFNv''@;'; put 'put ''dXJjZUNvbHMoKS0xKXJldHVybiExO2NvbnN0IGg9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEodGhpcy5yYW5nZS5mcm9tLnJvdyx0aGlzLnJhbmdlLmZyb20uY29sKTtyZXR1cm4gSm8oenAsdGhpcykuY2FuY2VsSGlkaW5nKCksSm8oQWwsdGhpcykuc2V0VmFsdWUobnVsbCE9PShsPWhbT2ddP2hb''@;'; put 'put ''T2ddW3lUXTpudWxsKSYmdm9pZCAwIT09bD9sOiIiKSxKbyhBbCx0aGlzKS5zaG93KCksdGhpcy5yZWZyZXNoRWRpdG9yKCEwKSwhMH1zaG93QXRDZWxsKGwsYSl7cmV0dXJuIHRoaXMuc2V0UmFuZ2Uoe2Zyb206dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobCxhKX0pLHRoaXMuc2hvdygp''@;'; put 'put ''fWhpZGUoKXtKbyhBbCx0aGlzKS5oaWRlKCl9cmVmcmVzaEVkaXRvcigpe2lmKCEoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXXx8dGhpcy5yYW5nZS5mcm9tJiZKbyhBbCx0aGlzKS5pc1Zpc2libGUoKSkpcmV0dXJuO2NvbnN0e3Jvd0lu''@;'; put 'put ''ZGV4TWFwcGVyOmEsY29sdW1uSW5kZXhNYXBwZXI6ZH09dGhpcy5ob3Qse3JvdzpoLGNvbDpmfT10aGlzLnJhbmdlLmZyb207bGV0IHY9YS5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGgpLE09ZC5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGYpO2NvbnN0IEQ9bnVsbD09PXY7''@;'; put 'put ''Sm8oQWwsdGhpcykuc2V0UG9zaXRpb24oMCwwKSxudWxsPT09diYmKHY9YS5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGEuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGgsLTEpKSksbnVsbD09PU0mJihNPWQuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChkLmdldE5lYXJlc3RO''@;'; put 'put ''b3RIaWRkZW5JbmRleChmLC0xKSkpO2NvbnN0IFo9bnVsbD09PXYscmU9bnVsbD09PU07dj12Pz8wLE09TT8/MDtjb25zdHtyb290V2luZG93OmNlLHZpZXc6e193dDpiZX19PXRoaXMuaG90LHt3dFRhYmxlOkVlfT1iZSxCZT1iZS5nZXRDZWxsKHtyb3c6dixjb2w6TX0sITApLHFlPXRoaXMu''@;'; put 'put ''Z2V0Q29tbWVudE1ldGEoaCxmLCJzdHlsZSIpO3FlP0pvKEFsLHRoaXMpLnNldFNpemUocWUud2lkdGgscWUuaGVpZ2h0KTpKbyhBbCx0aGlzKS5yZXNldFNpemUoKTtjb25zdCBydD1yZT8wOkVlLmdldENvbHVtbldpZHRoKE0pLHB0PUQmJiFaP3h1KEJlKTowLHtsZWZ0OmR0LHRvcDpKdCx3''@;'; put 'put ''aWR0aDp2bixoZWlnaHQ6Q259PUJlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHt3aWR0aDp0bixoZWlnaHQ6TW59PUpvKEFsLHRoaXMpLmdldFNpemUoKSx7aW5uZXJXaWR0aDpDcixpbm5lckhlaWdodDpHcn09dGhpcy5ob3Qucm9vdFdpbmRvdyxtcj10aGlzLmhvdC5yb290RG9jdW1lbnQu''@;'; put 'put ''ZG9jdW1lbnRFbGVtZW50LEduPWYwKHRoaXMuaG90LnJvb3REb2N1bWVudCksYWk9RSQodGhpcy5ob3Qucm9vdFdpbmRvdyk/R246MCxfaT1UJCh0aGlzLmhvdC5yb290V2luZG93KT9HbjowO2xldCBPbj1kdCtjZS5zY3JvbGxYK3J0LHpyPUp0K2NlLnNjcm9sbFkrcHQ7dGhpcy5ob3QuaXNS''@;'; put 'put ''dGwoKSYmKE9uLT10bitydCksdGhpcy5ob3QuaXNMdHIoKSYmZHQrdm4rdG4+Q3ItYWk/T249ZHQrY2Uuc2Nyb2xsWC10bi0xOnRoaXMuaG90LmlzUnRsKCkmJk9uPC0obXIuc2Nyb2xsV2lkdGgtbXIuY2xpZW50V2lkdGgpJiYoT249ZHQrY2Uuc2Nyb2xsWCtydCsxKSxKdCtNbj5Hci1faSYm''@;'; put 'put ''KHpyLT1Nbi1DbisxKSxKbyhBbCx0aGlzKS5zZXRQb3NpdGlvbihPbix6ciksSm8oQWwsdGhpcykuc2V0UmVhZE9ubHlTdGF0ZSh0aGlzLmdldENvbW1lbnRNZXRhKGgsZixnRikpLEpvKEFsLHRoaXMpLm9ic2VydmVTaXplKCl9Zm9jdXNFZGl0b3IoKXtKbyhBbCx0aGlzKS5mb2N1cygpfXVw''@;'; put 'put ''ZGF0ZUNvbW1lbnRNZXRhKGwsYSxkKXtjb25zdCBoPXRoaXMuaG90LmdldENlbGxNZXRhKGwsYSlbT2ddO2xldCBmO2g/KGY9ZzEoaCkseEUoZixkKSk6Zj1kLHRoaXMuaG90LnNldENlbGxNZXRhKGwsYSxPZyxmKX1nZXRDb21tZW50TWV0YShsLGEsZCl7Y29uc3QgaD10aGlzLmhvdC5nZXRD''@;'; put 'put ''ZWxsTWV0YShsLGEpO2lmKGhbT2ddKXJldHVybiBoW09nXVtkXX1hZGRUb0NvbnRleHRNZW51KGwpe2wuaXRlbXMucHVzaCh7bmFtZTpzc30sZnVuY3Rpb24gUWN0KGMpe3JldHVybntrZXk6ImNvbW1lbnRzQWRkRWRpdCIsbmFtZSgpe3ZhciBsO2NvbnN0IGE9bnVsbD09PShsPXRoaXMuZ2V0''@;'; put 'put ''U2VsZWN0ZWRSYW5nZUxhc3QoKSl8fHZvaWQgMD09PWw/dm9pZCAwOmwuaGlnaGxpZ2h0O3JldHVybiBudWxsIT1hJiZhLmlzQ2VsbCgpJiZjLmdldENvbW1lbnRBdENlbGwoYS5yb3csYS5jb2wpP3RoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShmcSk6dGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNl''@;'; put 'put ''KGhxKX0sY2FsbGJhY2soKXtjb25zdCBsPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtjLnNldFJhbmdlKGwpLGMuc2hvdygpLGMuZm9jdXNFZGl0b3IoKX0sZGlzYWJsZWQoKXtjb25zdCBsPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtyZXR1cm4hISghbHx8bC5oaWdobGlnaHQu''@;'; put 'put ''aXNIZWFkZXIoKXx8dGhpcy5zZWxlY3Rpb24uaXNFbnRpcmVSb3dTZWxlY3RlZCgpJiZ0aGlzLnNlbGVjdGlvbi5pc0VudGlyZUNvbHVtblNlbGVjdGVkKCl8fDA9PT10aGlzLmNvdW50UmVuZGVyZWRSb3dzKCl8fDA9PT10aGlzLmNvdW50UmVuZGVyZWRDb2xzKCkpfX19KHRoaXMpLGZ1bmN0''@;'; put 'put ''aW9uIGV1dChjKXtyZXR1cm57a2V5OiJjb21tZW50c1JlbW92ZSIsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UocHEpfSxjYWxsYmFjaygpe3RoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5mb3JBbGwoKGEsZCk9PnthPj0wJiZkPj0wJiZjLnJlbW92ZUNvbW1lbnRB''@;'; put 'put ''dENlbGwoYSxkLCExKX0pLHRoaXMucmVuZGVyKCl9LGRpc2FibGVkKCl7Y29uc3QgbD10aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7cmV0dXJuISEoIWx8fGwuaGlnaGxpZ2h0LmlzSGVhZGVyKCl8fHRoaXMuc2VsZWN0aW9uLmlzRW50aXJlUm93U2VsZWN0ZWQoKSYmdGhpcy5zZWxlY3Rp''@;'; put 'put ''b24uaXNFbnRpcmVDb2x1bW5TZWxlY3RlZCgpfHwwPT09dGhpcy5jb3VudFJlbmRlcmVkUm93cygpfHwwPT09dGhpcy5jb3VudFJlbmRlcmVkQ29scygpKX19fSh0aGlzKSxmdW5jdGlvbiBpdXQoYyl7cmV0dXJue2tleToiY29tbWVudHNSZWFkT25seSIsbmFtZSgpe2NvbnN0IGw9dGhpcy5n''@;'; put 'put ''ZXRUcmFuc2xhdGVkUGhyYXNlKGdxKTtyZXR1cm4gaEYodGhpcy5nZXRTZWxlY3RlZFJhbmdlKCksKGQsaCk9PmMuZ2V0Q29tbWVudE1ldGEoZCxoLGdGKSk/ZGdlKGwpOmx9LGNhbGxiYWNrKCl7dGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLmZvckFsbCgoYSxkKT0+e2lmKGE+PTAmJmQ+''@;'; put 'put ''PTApe2NvbnN0IGg9ISFjLmdldENvbW1lbnRNZXRhKGEsZCxnRik7Yy51cGRhdGVDb21tZW50TWV0YShhLGQse1tnRl06IWh9KX19KX0sZGlzYWJsZWQoKXtjb25zdCBsPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtyZXR1cm4hISghbHx8bC5oaWdobGlnaHQuaXNIZWFkZXIoKXx8IWMu''@;'; put 'put ''Z2V0Q29tbWVudEF0Q2VsbChsLmhpZ2hsaWdodC5yb3csbC5oaWdobGlnaHQuY29sKXx8dGhpcy5zZWxlY3Rpb24uaXNFbnRpcmVSb3dTZWxlY3RlZCgpJiZ0aGlzLnNlbGVjdGlvbi5pc0VudGlyZUNvbHVtblNlbGVjdGVkKCl8fDA9PT10aGlzLmNvdW50UmVuZGVyZWRSb3dzKCl8fDA9PT10''@;'; put 'put ''aGlzLmNvdW50UmVuZGVyZWRDb2xzKCkpfX19KHRoaXMpKX1nZXRFZGl0b3JJbnB1dEVsZW1lbnQoKXtyZXR1cm4gSm8oQWwsdGhpcykuZ2V0SW5wdXRFbGVtZW50KCl9ZGVzdHJveSgpe3ZhciBsLGE7bnVsbD09PShsPUpvKEFsLHRoaXMpKXx8dm9pZCAwPT09bHx8bC5kZXN0cm95KCksbnVs''@;'; put 'put ''bD09PShhPUpvKHpwLHRoaXMpKXx8dm9pZCAwPT09YXx8YS5kZXN0cm95KCksc3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiBkdXQoYyl7aWYodGhpcy5ob3QudmlldyYmdGhpcy5ob3Qudmlldy5fd3QmJiFKbyhtRix0aGlzKSYmIXRoaXMudGFyZ2V0SXNDb21tZW50VGV4dEFyZWEoYykpe2Nv''@;'; put 'put ''bnN0IGw9Um0oYy50YXJnZXQsIlREIiwiVEJPRFkiKTtsZXQgYT1udWxsO2wmJihhPXRoaXMuaG90LmdldENvb3JkcyhsKSksKCFsfHx0aGlzLnJhbmdlLmZyb20mJmEmJih0aGlzLnJhbmdlLmZyb20ucm93IT09YS5yb3d8fHRoaXMucmFuZ2UuZnJvbS5jb2whPT1hLmNvbCkpJiZ0aGlzLmhp''@;'; put 'put ''ZGUoKX19ZnVuY3Rpb24gaHV0KGMpe2Muc3RvcFByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gZnV0KGMpe2NvbnN0e3Jvb3REb2N1bWVudDpsfT10aGlzLmhvdDtpZighKEpvKG1GLHRoaXMpfHxKbyhBbCx0aGlzKS5pc0ZvY3VzZWQoKXx8cG8oYy50YXJnZXQsInd0Qm9yZGVyIil8fEpvKGtKLHRo''@;'; put 'put ''aXMpPT09Yy50YXJnZXQpJiZKbyhBbCx0aGlzKSlpZihRbShrSix0aGlzLGwuZWxlbWVudEZyb21Qb2ludChjLmNsaWVudFgsYy5jbGllbnRZKSksdGhpcy50YXJnZXRJc0NlbGxXaXRoQ29tbWVudChjKSl7Y29uc3QgYT10aGlzLmhvdC5fY3JlYXRlQ2VsbFJhbmdlKHRoaXMuaG90LmdldENv''@;'; put 'put ''b3JkcyhjLnRhcmdldCkpO0pvKHpwLHRoaXMpLnNob3coYSl9ZWxzZSBMbShjLnRhcmdldCxsKSYmIXRoaXMudGFyZ2V0SXNDb21tZW50VGV4dEFyZWEoYykmJkpvKHpwLHRoaXMpLmhpZGUoKX1mdW5jdGlvbiBwdXQoKXtRbShtRix0aGlzLCExKX1mdW5jdGlvbiBndXQoYyxsKXtsW09nXSYm''@;'; put 'put ''bFtPZ11beVRdJiZUaShjLGwuY29tbWVudGVkQ2VsbENsYXNzTmFtZSl9ZnVuY3Rpb24gbXV0KCl7UW0oYkYsdGhpcywiIiksdGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuc2V0QWN0aXZlQ29udGV4dE5hbWUoImdyaWQiKSx0aGlzLnNldENvbW1lbnQoKX1mdW5jdGlvbiB2dXQoKXtR''@;'; put 'put ''bShiRix0aGlzLHRoaXMuZ2V0Q29tbWVudCgpKSx0aGlzLmhvdC5saXN0ZW4oKSx0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5zZXRBY3RpdmVDb250ZXh0TmFtZShBSil9ZnVuY3Rpb24gYnV0KGMsbCl7dGhpcy51cGRhdGVDb21tZW50TWV0YSh0aGlzLnJhbmdlLmZyb20ucm93LHRo''@;'; put 'put ''aXMucmFuZ2UuZnJvbS5jb2wse3N0eWxlOnt3aWR0aDpjLGhlaWdodDpsfX0pfWZ1bmN0aW9uIHBnZShjKXtKbyhBbCx0aGlzKS5pc0ZvY3VzZWQoKSYmQjIoYyl9ZnVuY3Rpb24geXV0KCl7Sm8odkYsdGhpcyl8fHRoaXMuaGlkZSgpfWZ1bmN0aW9uIF91dCgpe2NvbnN0IGM9Sm8oQWwsdGhp''@;'; put 'put ''cykuZ2V0RWRpdG9yRWxlbWVudCgpO2xvKGMsL2h0LXRoZW1lLS4qL2cpLFRpKGMsdGhpcy5ob3QuZ2V0Q3VycmVudFRoZW1lTmFtZSgpKX1mdW5jdGlvbiBESihjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gd3V0KGMpe3ZhciBsPWZ1bmN0aW9uIEN1dChjLGwpe2lmKCJvYmplY3QiIT10eXBl''@;'; put 'put ''b2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1''@;'; put 'put ''cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAs''@;'; put 'put ''Y29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgZ2dle2NvbnN0cnVjdG9yKGwpe0RKKHRoaXMsImhvdCIsdm9pZCAwKSxESih0aGlzLCJjb21tYW5kcyIse30pLERKKHRoaXMsImNvbW1vbkNhbGxiYWNrIixudWxsKSx0aGlzLmhvdD1sfXJlZ2lzdGVyQ29tbWFu''@;'; put 'put ''ZChsLGEpe3RoaXMuY29tbWFuZHNbbF09YX1zZXRDb21tb25DYWxsYmFjayhsKXt0aGlzLmNvbW1vbkNhbGxiYWNrPWx9ZXhlY3V0ZShsKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhPjE/YS0xOjApLGg9MTtoPGE7aCsrKWRbaC0xXT1hcmd1bWVudHNbaF07Y29u''@;'; put 'put ''c3QgZj1sLnNwbGl0KCI6Iiksdj1mWzBdLE09Mj09PWYubGVuZ3RoP2ZbMV06bnVsbDtsZXQgRD10aGlzLmNvbW1hbmRzW3ZdO2lmKCFEKXRocm93IG5ldyBFcnJvcihgTWVudSBjb21tYW5kICcke3Z9JyBub3QgZXhpc3RzLmApO2lmKE0mJkQuc3VibWVudSYmKEQ9ZnVuY3Rpb24gU3V0KGMs''@;'; put 'put ''bCl7bGV0IGE7cmV0dXJuIFluKGwsZD0+e2NvbnN0IGg9ZC5rZXk/ZC5rZXkuc3BsaXQoIjoiKTpudWxsO2lmKEFycmF5LmlzQXJyYXkoaCkmJmhbMV09PT1jKXJldHVybiBhPWQsITF9KSxhfShNLEQuc3VibWVudS5pdGVtcykpLCEwPT09RC5kaXNhYmxlZHx8ImZ1bmN0aW9uIj09dHlwZW9m''@;'; put 'put ''IEQuZGlzYWJsZWQmJiEwPT09RC5kaXNhYmxlZC5jYWxsKHRoaXMuaG90KXx8VHUoRCwic3VibWVudSIpKXJldHVybjtjb25zdCBaPVtdOyJmdW5jdGlvbiI9PXR5cGVvZiBELmNhbGxiYWNrJiZaLnB1c2goRC5jYWxsYmFjayksImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuY29tbW9uQ2FsbGJh''@;'; put 'put ''Y2smJloucHVzaCh0aGlzLmNvbW1vbkNhbGxiYWNrKSxkLnVuc2hpZnQoZi5qb2luKCI6IikpLFluKFoscmU9PnJlLmFwcGx5KHRoaXMuaG90LGQpKX19Y29uc3QgSzI9ImFsaWdubWVudCIseUY9ImNsZWFyX2NvbHVtbiIsd1Q9ImNvbF9sZWZ0IixDVD0iY29sX3JpZ2h0IixTVD0ibWFrZV9y''@;'; put 'put ''ZWFkX29ubHkiLF9GPSJyZWRvIixNVD0icmVtb3ZlX2NvbCIsd0Y9InJlbW92ZV9yb3ciLENGPSJyb3dfYWJvdmUiLFNGPSJyb3dfYmVsb3ciLHhUPSJub19pdGVtcyIsTUY9InVuZG8iLG1nZT1bQ0YsU0Ysd1QsQ1QseUYsd0YsTVQsTUYsX0YsU1QsSzIsc3MseFRdLHZnZT17W3NzXTpmdW5j''@;'; put 'put ''dGlvbiBKY3QoKXtyZXR1cm57bmFtZTpzc319LFt4VF06ZnVuY3Rpb24gT3V0KCl7cmV0dXJue2tleTp4VCxuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShHSyl9LGRpc2FibGVkOiEwLGlzQ29tbWFuZDohMX19LFtDRl06ZnVuY3Rpb24gUnV0KCl7cmV0dXJue2tleTpD''@;'; put 'put ''RixuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZSgkSyl9LGNhbGxiYWNrKCl7Y29uc3QgYz10aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkuZ2V0VG9wTGVmdENvcm5lcigpO3RoaXMuYWx0ZXIoImluc2VydF9yb3dfYWJvdmUiLGMucm93LDEsIkNvbnRleHRNZW51LnJv''@;'; put 'put ''d0Fib3ZlIil9LGRpc2FibGVkKCl7Y29uc3QgYz10aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7cmV0dXJuISEoIWN8fHRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpfHxjLmlzU2luZ2xlSGVhZGVyKCkmJmMuaGlnaGxpZ2h0LnJvdzwwfHx0aGlzLmNvdW50U291''@;'; put 'put ''cmNlUm93cygpPj10aGlzLmdldFNldHRpbmdzKCkubWF4Um93cyl8fCEhdGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCkmJjA9PT10aGlzLmNvdW50Um93cygpfSxoaWRkZW4oKXtyZXR1cm4hdGhpcy5nZXRTZXR0aW5ncygpLmFsbG93SW5zZXJ0Um93fX19LFtTRl06ZnVuY3Rp''@;'; put 'put ''b24gTHV0KCl7cmV0dXJue2tleTpTRixuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShLSyl9LGNhbGxiYWNrKCl7Y29uc3QgYz10aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkuZ2V0Qm90dG9tUmlnaHRDb3JuZXIoKTt0aGlzLmFsdGVyKCJpbnNlcnRfcm93X2JlbG93''@;'; put 'put ''IixjLnJvdywxLCJDb250ZXh0TWVudS5yb3dCZWxvdyIpfSxkaXNhYmxlZCgpe2NvbnN0IGM9dGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO3JldHVybiEhKCFjfHx0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKXx8Yy5pc1NpbmdsZUhlYWRlcigpJiZjLmhpZ2hs''@;'; put 'put ''aWdodC5yb3c8MHx8dGhpcy5jb3VudFNvdXJjZVJvd3MoKT49dGhpcy5nZXRTZXR0aW5ncygpLm1heFJvd3MpfSxoaWRkZW4oKXtyZXR1cm4hdGhpcy5nZXRTZXR0aW5ncygpLmFsbG93SW5zZXJ0Um93fX19LFt3VF06ZnVuY3Rpb24gRXV0KCl7cmV0dXJue2tleTp3VCxuYW1lKCl7cmV0dXJu''@;'; put 'put ''IHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShxSyl9LGNhbGxiYWNrKCl7Y29uc3QgYz10aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkuZ2V0VG9wTGVmdENvcm5lcigpLGw9dGhpcy5pc1J0bCgpPyJpbnNlcnRfY29sX2VuZCI6Imluc2VydF9jb2xfc3RhcnQiO3RoaXMuYWx0ZXIobCxjLmNv''@;'; put 'put ''bCwxLCJDb250ZXh0TWVudS5jb2x1bW5MZWZ0Iil9LGRpc2FibGVkKCl7aWYoIXRoaXMuaXNDb2x1bW5Nb2RpZmljYXRpb25BbGxvd2VkKCkpcmV0dXJuITA7Y29uc3QgYz10aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7cmV0dXJuISEoIWN8fHRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRC''@;'; put 'put ''eVJvd0hlYWRlcigpfHxjLmlzU2luZ2xlSGVhZGVyKCkmJmMuaGlnaGxpZ2h0LmNvbDwwfHx0aGlzLmNvdW50U291cmNlQ29scygpPj10aGlzLmdldFNldHRpbmdzKCkubWF4Q29scyl8fCEhdGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCkmJjA9PT10aGlzLmNvdW50Q29scygp''@;'; put 'put ''fSxoaWRkZW4oKXtyZXR1cm4hdGhpcy5nZXRTZXR0aW5ncygpLmFsbG93SW5zZXJ0Q29sdW1ufX19LFtDVF06ZnVuY3Rpb24gVHV0KCl7cmV0dXJue2tleTpDVCxuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShYSyl9LGNhbGxiYWNrKCl7Y29uc3QgYz10aGlzLmdldFNl''@;'; put 'put ''bGVjdGVkUmFuZ2VMYXN0KCkuZ2V0VG9wUmlnaHRDb3JuZXIoKSxsPXRoaXMuaXNSdGwoKT8iaW5zZXJ0X2NvbF9zdGFydCI6Imluc2VydF9jb2xfZW5kIjt0aGlzLmFsdGVyKGwsYy5jb2wsMSwiQ29udGV4dE1lbnUuY29sdW1uUmlnaHQiKX0sZGlzYWJsZWQoKXtpZighdGhpcy5pc0NvbHVt''@;'; put 'put ''bk1vZGlmaWNhdGlvbkFsbG93ZWQoKSlyZXR1cm4hMDtjb25zdCBjPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtyZXR1cm4hISghY3x8dGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCl8fGMuaXNTaW5nbGVIZWFkZXIoKSYmYy5oaWdobGlnaHQuY29sPDB8fHRoaXMu''@;'; put 'put ''Y291bnRTb3VyY2VDb2xzKCk+PXRoaXMuZ2V0U2V0dGluZ3MoKS5tYXhDb2xzKX0saGlkZGVuKCl7cmV0dXJuIXRoaXMuZ2V0U2V0dGluZ3MoKS5hbGxvd0luc2VydENvbHVtbn19fSxbeUZdOmZ1bmN0aW9uIHh1dCgpe3JldHVybntrZXk6eUYsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5z''@;'; put 'put ''bGF0ZWRQaHJhc2UobnEpfSxjYWxsYmFjayhjLGwpe2NvbnN0IGE9bFswXS5zdGFydC5jb2wsZD1sWzBdLmVuZC5jb2w7dGhpcy5jb3VudFJvd3MoKSYmdGhpcy5wb3B1bGF0ZUZyb21BcnJheSgwLGEsW1tudWxsXV0sTWF0aC5tYXgobFswXS5zdGFydC5yb3csbFswXS5lbmQucm93KSxkLCJD''@;'; put 'put ''b250ZXh0TWVudS5jbGVhckNvbHVtbiIpfSxkaXNhYmxlZCgpe2NvbnN0IGM9dGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO2lmKCFjfHxjLmlzU2luZ2xlSGVhZGVyKCkmJmMuaGlnaGxpZ2h0LmNvbDwwfHwhdGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCkpcmV0''@;'; put 'put ''dXJuITA7bGV0IGw9ITE7cmV0dXJuIGMuZm9yQWxsKChhLGQpPT57aWYoYTwwfHxkPDApcmV0dXJuITA7Y29uc3R7cmVhZE9ubHk6aH09dGhpcy5nZXRDZWxsTWV0YShhLGQpO3JldHVybiEhaHx8KGw9ITAsITEpfSksIWx9fX0sW3dGXTpmdW5jdGlvbiBJdXQoKXtyZXR1cm57a2V5OndGLG5h''@;'; put 'put ''bWUoKXtjb25zdCBjPXRoaXMuZ2V0U2VsZWN0ZWQoKTtsZXQgbD0wO2lmKGMpaWYoYy5sZW5ndGg+MSlsPTE7ZWxzZXtjb25zdFthLCxkXT1jWzBdO2EtZCE9MCYmKGw9MSl9cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShKSyxsKX0sY2FsbGJhY2soKXt0aGlzLmFsdGVyKCJyZW1v''@;'; put 'put ''dmVfcm93IixmdW5jdGlvbiBZbnQoYyl7Y29uc3QgbD14XyhjLmdldFNlbGVjdGVkKCkpO2lmKDA9PT1sfHwxPT09bClyZXR1cm5bXTtjb25zdCBhPWVUKGwse2NyZWF0ZUNlbGxDb29yZHM6Yy5fY3JlYXRlQ2VsbENvb3Jkcy5iaW5kKGMpLGNyZWF0ZUNlbGxSYW5nZTpjLl9jcmVhdGVDZWxs''@;'; put 'put ''UmFuZ2UuYmluZChjKX0pLGQ9bmV3IFNldDtyZXR1cm4gWW4oYy5nZXRTZWxlY3RlZCgpLHY9Pntjb25zdHtmcm9tOk0sdG86RH09YSh2KSxaPU1hdGgubWF4KE0ucm93LDApO1luKEFycmF5LmZyb20obmV3IEFycmF5KEQucm93LVorMSksKGNlLGJlKT0+WitiZSksY2U9PntkLmhhcyhjZSl8''@;'; put 'put ''fGQuYWRkKGNlKX0pfSkscXUoQXJyYXkuZnJvbShkKS5zb3J0KCh2LE0pPT52LU0pLCh2LE0sRCxaKT0+KDAhPT1EJiZNPT09WltELTFdKzE/dlt2Lmxlbmd0aC0xXVsxXSs9MTp2LnB1c2goW00sMV0pLHYpLFtdKX0odGhpcyksMSwiQ29udGV4dE1lbnUucmVtb3ZlUm93Iil9LGRpc2FibGVk''@;'; put 'put ''KCl7Y29uc3QgYz10aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7aWYoIWN8fGMuaXNTaW5nbGVIZWFkZXIoKSYmYy5oaWdobGlnaHQucm93PDApcmV0dXJuITA7Y29uc3QgbD10aGlzLmNvdW50Um93cygpO3JldHVybiB0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKT8wPT09''@;'; put 'put ''bDp0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKXx8MD09PWx9LGhpZGRlbigpe3JldHVybiF0aGlzLmdldFNldHRpbmdzKCkuYWxsb3dSZW1vdmVSb3d9fX0sW01UXTpmdW5jdGlvbiBEdXQoKXtyZXR1cm57a2V5Ok1ULG5hbWUoKXtjb25zdCBjPXRoaXMuZ2V0U2Vs''@;'; put 'put ''ZWN0ZWQoKTtsZXQgbD0wO2lmKGMpaWYoYy5sZW5ndGg+MSlsPTE7ZWxzZXtjb25zdFssYSwsZF09Y1swXTthLWQhPTAmJihsPTEpfXJldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoUUssbCl9LGNhbGxiYWNrKCl7dGhpcy5hbHRlcigicmVtb3ZlX2NvbCIsZnVuY3Rpb24gV250KGMp''@;'; put 'put ''e2NvbnN0IGw9eF8oYy5nZXRTZWxlY3RlZCgpKTtpZigwPT09bHx8MT09PWwpcmV0dXJuW107Y29uc3QgYT1lVChsLHtjcmVhdGVDZWxsQ29vcmRzOmMuX2NyZWF0ZUNlbGxDb29yZHMuYmluZChjKSxjcmVhdGVDZWxsUmFuZ2U6Yy5fY3JlYXRlQ2VsbFJhbmdlLmJpbmQoYyl9KSxkPW5ldyBT''@;'; put 'put ''ZXQ7cmV0dXJuIFluKGMuZ2V0U2VsZWN0ZWQoKSx2PT57Y29uc3R7ZnJvbTpNLHRvOkR9PWEodiksWj1NYXRoLm1heChNLmNvbCwwKTtZbihBcnJheS5mcm9tKG5ldyBBcnJheShELmNvbC1aKzEpLChjZSxiZSk9PlorYmUpLGNlPT57ZC5oYXMoY2UpfHxkLmFkZChjZSl9KX0pLHF1KEFycmF5''@;'; put 'put ''LmZyb20oZCkuc29ydCgodixNKT0+di1NKSwodixNLEQsWik9PigwIT09RCYmTT09PVpbRC0xXSsxP3Zbdi5sZW5ndGgtMV1bMV0rPTE6di5wdXNoKFtNLDFdKSx2KSxbXSl9KHRoaXMpLG51bGwsIkNvbnRleHRNZW51LnJlbW92ZUNvbHVtbiIpfSxkaXNhYmxlZCgpe2lmKCF0aGlzLmlzQ29s''@;'; put 'put ''dW1uTW9kaWZpY2F0aW9uQWxsb3dlZCgpKXJldHVybiEwO2NvbnN0IGM9dGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO2lmKCFjfHxjLmlzU2luZ2xlSGVhZGVyKCkmJmMuaGlnaGxpZ2h0LmNvbDwwKXJldHVybiEwO2NvbnN0IGw9dGhpcy5jb3VudENvbHMoKTtyZXR1cm4gdGhpcy5zZWxl''@;'; put 'put ''Y3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCk/MD09PWw6dGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCl8fDA9PT1sfSxoaWRkZW4oKXtyZXR1cm4hdGhpcy5nZXRTZXR0aW5ncygpLmFsbG93UmVtb3ZlQ29sdW1ufX19LFtNRl06ZnVuY3Rpb24gUHV0KCl7cmV0dXJue2tl''@;'; put 'put ''eTpNRixuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShlcSl9LGNhbGxiYWNrKCl7dGhpcy5nZXRQbHVnaW4oInVuZG9SZWRvIikudW5kbygpfSxoaWRkZW4oKXtjb25zdCBjPXRoaXMuZ2V0UGx1Z2luKCJ1bmRvUmVkbyIpO3JldHVybiFjfHwhYy5pc0VuYWJsZWQoKX0s''@;'; put 'put ''ZGlzYWJsZWQoKXtyZXR1cm4hdGhpcy5nZXRQbHVnaW4oInVuZG9SZWRvIikuaXNVbmRvQXZhaWxhYmxlKCl9fX0sW19GXTpmdW5jdGlvbiBrdXQoKXtyZXR1cm57a2V5Ol9GLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKHRxKX0sY2FsbGJhY2soKXt0aGlzLmdldFBs''@;'; put 'put ''dWdpbigidW5kb1JlZG8iKS5yZWRvKCl9LGhpZGRlbigpe2NvbnN0IGM9dGhpcy5nZXRQbHVnaW4oInVuZG9SZWRvIik7cmV0dXJuIWN8fCFjLmlzRW5hYmxlZCgpfSxkaXNhYmxlZCgpe3JldHVybiF0aGlzLmdldFBsdWdpbigidW5kb1JlZG8iKS5pc1JlZG9BdmFpbGFibGUoKX19fSxbU1Rd''@;'; put 'put ''OmZ1bmN0aW9uIEF1dCgpe3JldHVybntrZXk6U1QsY2hlY2thYmxlOiEwLGFyaWFDaGVja2VkKCl7cmV0dXJuIGhGKHRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpLChsLGEpPT50aGlzLmdldENlbGxNZXRhKGwsYSkucmVhZE9ubHkpfSxhcmlhTGFiZWwoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xh''@;'; put 'put ''dGVkUGhyYXNlKF9QKX0sbmFtZSgpe2xldCBjPXRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShfUCk7cmV0dXJuIGhGKHRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpLChhLGQpPT50aGlzLmdldENlbGxNZXRhKGEsZCkucmVhZE9ubHkpJiYoYz1kZ2UoYykpLGN9LGNhbGxiYWNrKCl7Y29uc3QgYz10''@;'; put 'put ''aGlzLmdldFNlbGVjdGVkUmFuZ2UoKSxsPWhGKGMsKGEsZCk9PnRoaXMuZ2V0Q2VsbE1ldGEoYSxkKS5yZWFkT25seSk7WW4oYyxhPT57YS5mb3JBbGwoKGQsaCk9PntkPj0wJiZoPj0wJiZ0aGlzLnNldENlbGxNZXRhKGQsaCwicmVhZE9ubHkiLCFsKX0pfSksdGhpcy5yZW5kZXIoKX0sZGlz''@;'; put 'put ''YWJsZWQoKXtjb25zdCBjPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtyZXR1cm4hKGMmJiFjLmlzU2luZ2xlSGVhZGVyKCkmJiF0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKSYmMCE9PXRoaXMuY291bnRSb3dzKCkmJjAhPT10aGlzLmNvdW50Q29scygpJiZ0aGlzLmdl''@;'; put 'put ''dFNlbGVjdGVkUmFuZ2UoKSYmMCE9PXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpLmxlbmd0aCl9fX0sW0syXTpmdW5jdGlvbiBNdXQoKXtyZXR1cm57a2V5OksyLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKG1xKX0sZGlzYWJsZWQoKXtpZigwPT09dGhpcy5jb3VudFJv''@;'; put 'put ''d3MoKXx8MD09PXRoaXMuY291bnRDb2xzKCkpcmV0dXJuITA7Y29uc3QgYz10aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7cmV0dXJuIShjJiYhYy5pc1NpbmdsZUhlYWRlcigpJiZ0aGlzLmdldFNlbGVjdGVkUmFuZ2UoKSYmIXRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigp''@;'; put 'put ''KX0sc3VibWVudTp7aXRlbXM6W3trZXk6YCR7SzJ9OmxlZnRgLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKHZxKX0sY2FsbGJhY2soKXtjb25zdCBjPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpLGw9eTkoYywoaCxmKT0+dGhpcy5nZXRDZWxsTWV0YShoLGYpLmNsYXNz''@;'; put 'put ''TmFtZSksYT0iaG9yaXpvbnRhbCIsZD0iaHRMZWZ0Ijt0aGlzLnJ1bkhvb2tzKCJiZWZvcmVDZWxsQWxpZ25tZW50IixsLGMsYSxkKSxKbShjLGEsZCwoaCxmKT0+dGhpcy5nZXRDZWxsTWV0YShoLGYpLChoLGYsdixNKT0+dGhpcy5zZXRDZWxsTWV0YShoLGYsdixNKSksdGhpcy5yZW5kZXIo''@;'; put 'put ''KX0sZGlzYWJsZWQ6ITF9LHtrZXk6YCR7SzJ9OmNlbnRlcmAsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoYnEpfSxjYWxsYmFjaygpe2NvbnN0IGM9dGhpcy5nZXRTZWxlY3RlZFJhbmdlKCksbD15OShjLChoLGYpPT50aGlzLmdldENlbGxNZXRhKGgsZikuY2xhc3NO''@;'; put 'put ''YW1lKSxhPSJob3Jpem9udGFsIixkPSJodENlbnRlciI7dGhpcy5ydW5Ib29rcygiYmVmb3JlQ2VsbEFsaWdubWVudCIsbCxjLGEsZCksSm0oYyxhLGQsKGgsZik9PnRoaXMuZ2V0Q2VsbE1ldGEoaCxmKSwoaCxmLHYsTSk9PnRoaXMuc2V0Q2VsbE1ldGEoaCxmLHYsTSkpLHRoaXMucmVuZGVy''@;'; put 'put ''KCl9LGRpc2FibGVkOiExfSx7a2V5OmAke0syfTpyaWdodGAsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoeXEpfSxjYWxsYmFjaygpe2NvbnN0IGM9dGhpcy5nZXRTZWxlY3RlZFJhbmdlKCksbD15OShjLChoLGYpPT50aGlzLmdldENlbGxNZXRhKGgsZikuY2xhc3NO''@;'; put 'put ''YW1lKSxhPSJob3Jpem9udGFsIixkPSJodFJpZ2h0Ijt0aGlzLnJ1bkhvb2tzKCJiZWZvcmVDZWxsQWxpZ25tZW50IixsLGMsYSxkKSxKbShjLGEsZCwoaCxmKT0+dGhpcy5nZXRDZWxsTWV0YShoLGYpLChoLGYsdixNKT0+dGhpcy5zZXRDZWxsTWV0YShoLGYsdixNKSksdGhpcy5yZW5kZXIo''@;'; put 'put ''KX0sZGlzYWJsZWQ6ITF9LHtrZXk6YCR7SzJ9Omp1c3RpZnlgLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKF9xKX0sY2FsbGJhY2soKXtjb25zdCBjPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpLGw9eTkoYywoaCxmKT0+dGhpcy5nZXRDZWxsTWV0YShoLGYpLmNsYXNz''@;'; put 'put ''TmFtZSksYT0iaG9yaXpvbnRhbCIsZD0iaHRKdXN0aWZ5Ijt0aGlzLnJ1bkhvb2tzKCJiZWZvcmVDZWxsQWxpZ25tZW50IixsLGMsYSxkKSxKbShjLGEsZCwoaCxmKT0+dGhpcy5nZXRDZWxsTWV0YShoLGYpLChoLGYsdixNKT0+dGhpcy5zZXRDZWxsTWV0YShoLGYsdixNKSksdGhpcy5yZW5k''@;'; put 'put ''ZXIoKX0sZGlzYWJsZWQ6ITF9LHtuYW1lOnNzfSx7a2V5OmAke0syfTp0b3BgLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKHdxKX0sY2FsbGJhY2soKXtjb25zdCBjPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpLGw9eTkoYywoaCxmKT0+dGhpcy5nZXRDZWxsTWV0YSho''@;'; put 'put ''LGYpLmNsYXNzTmFtZSksYT0idmVydGljYWwiLGQ9Imh0VG9wIjt0aGlzLnJ1bkhvb2tzKCJiZWZvcmVDZWxsQWxpZ25tZW50IixsLGMsYSxkKSxKbShjLGEsZCwoaCxmKT0+dGhpcy5nZXRDZWxsTWV0YShoLGYpLChoLGYsdixNKT0+dGhpcy5zZXRDZWxsTWV0YShoLGYsdixNKSksdGhpcy5y''@;'; put 'put ''ZW5kZXIoKX0sZGlzYWJsZWQ6ITF9LHtrZXk6YCR7SzJ9Om1pZGRsZWAsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoQ3EpfSxjYWxsYmFjaygpe2NvbnN0IGM9dGhpcy5nZXRTZWxlY3RlZFJhbmdlKCksbD15OShjLChoLGYpPT50aGlzLmdldENlbGxNZXRhKGgsZiku''@;'; put 'put ''Y2xhc3NOYW1lKSxhPSJ2ZXJ0aWNhbCIsZD0iaHRNaWRkbGUiO3RoaXMucnVuSG9va3MoImJlZm9yZUNlbGxBbGlnbm1lbnQiLGwsYyxhLGQpLEptKGMsYSxkLChoLGYpPT50aGlzLmdldENlbGxNZXRhKGgsZiksKGgsZix2LE0pPT50aGlzLnNldENlbGxNZXRhKGgsZix2LE0pKSx0aGlzLnJl''@;'; put 'put ''bmRlcigpfSxkaXNhYmxlZDohMX0se2tleTpgJHtLMn06Ym90dG9tYCxuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShTcSl9LGNhbGxiYWNrKCl7Y29uc3QgYz10aGlzLmdldFNlbGVjdGVkUmFuZ2UoKSxsPXk5KGMsKGgsZik9PnRoaXMuZ2V0Q2VsbE1ldGEoaCxmKS5j''@;'; put 'put ''bGFzc05hbWUpLGE9InZlcnRpY2FsIixkPSJodEJvdHRvbSI7dGhpcy5ydW5Ib29rcygiYmVmb3JlQ2VsbEFsaWdubWVudCIsbCxjLGEsZCksSm0oYyxhLGQsKGgsZik9PnRoaXMuZ2V0Q2VsbE1ldGEoaCxmKSwoaCxmLHYsTSk9PnRoaXMuc2V0Q2VsbE1ldGEoaCxmLHYsTSkpLHRoaXMucmVu''@;'; put 'put ''ZGVyKCl9LGRpc2FibGVkOiExfV19fX19O2Z1bmN0aW9uIGJnZSgpe2NvbnN0IGM9e307cmV0dXJuIFhvKHZnZSwobCxhKT0+e2NbYV09bCgpfSksY31mdW5jdGlvbiBJSihjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gRnV0KGMpe3ZhciBsPWZ1bmN0aW9uIEh1dChjLGwpe2lmKCJvYmplY3Qi''@;'; put 'put ''IT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVz''@;'; put 'put ''dCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFi''@;'; put 'put ''bGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgeWdle2NvbnN0cnVjdG9yKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpudWxsO0lKKHRoaXMsImhvdCIsdm9pZCAwKSxJSih0aGlz''@;'; put 'put ''LCJwcmVkZWZpbmVkSXRlbXMiLGJnZSgpKSxJSih0aGlzLCJkZWZhdWx0T3JkZXJQYXR0ZXJuIix2b2lkIDApLHRoaXMuaG90PWwsdGhpcy5kZWZhdWx0T3JkZXJQYXR0ZXJuPWF9c2V0UHJlZGVmaW5lZEl0ZW1zKGwpe2NvbnN0IGE9e307dGhpcy5kZWZhdWx0T3JkZXJQYXR0ZXJuLmxlbmd0''@;'; put 'put ''aD0wLFhvKGwsKGQsaCk9PntsZXQgZj0iIjtkLm5hbWU9PT1zcz8oYVtzc109ZCxmPXNzKTppc05hTihwYXJzZUludChoLDEwKSk/KGQua2V5PXZvaWQgMD09PWQua2V5P2g6ZC5rZXksYVtoXT1kLGY9ZC5rZXkpOihhW2Qua2V5XT1kLGY9ZC5rZXkpLHRoaXMuZGVmYXVsdE9yZGVyUGF0dGVy''@;'; put 'put ''bi5wdXNoKGYpfSksdGhpcy5wcmVkZWZpbmVkSXRlbXM9YX1nZXRJdGVtcygpe3JldHVybiBmdW5jdGlvbiBOdXQoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06W10sYT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFy''@;'; put 'put ''Z3VtZW50c1syXT9hcmd1bWVudHNbMl06e307Y29uc3QgZD1bXTtsZXQgaD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bnVsbDtyZXR1cm4gaCYmaC5pdGVtcz9oPWguaXRlbXM6QXJyYXkuaXNBcnJheShoKXx8KGg9bCkscW8oaCk/WG8o''@;'; put 'put ''aCwoZix2KT0+e2xldCBNPWFbInN0cmluZyI9PXR5cGVvZiBmP2Y6dl07TXx8KE09ZikscW8oZik/RXUoTSxmKToic3RyaW5nIj09dHlwZW9mIE0mJihNPXtuYW1lOk19KSx2b2lkIDA9PT1NLmtleSYmKE0ua2V5PXYpLGQucHVzaChNKX0pOlluKGgsKGYsdik9PntsZXQgTT1hW2ZdOyFNJiZt''@;'; put 'put ''Z2UuaW5kZXhPZihmKT49MHx8KE18fChNPXtuYW1lOmYsa2V5OmAke3Z9YH0pLHFvKGYpJiZFdShNLGYpLHZvaWQgMD09PU0ua2V5JiYoTS5rZXk9diksZC5wdXNoKE0pKX0pLGR9KGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpudWxsLHRo''@;'; put 'put ''aXMuZGVmYXVsdE9yZGVyUGF0dGVybix0aGlzLnByZWRlZmluZWRJdGVtcyl9fWZ1bmN0aW9uIGU2KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBWdXQoYyl7dmFyIGw9ZnVuY3Rpb24gQnV0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50''@;'; put 'put ''b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0''@;'; put 'put ''cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xd''@;'; put 'put ''PWEsY31jbGFzcyBqdXR7Y29uc3RydWN0b3IobCxhKXtlNih0aGlzLCJ0b3AiLHZvaWQgMCksZTYodGhpcywidG9wUmVsYXRpdmUiLHZvaWQgMCksZTYodGhpcywibGVmdCIsdm9pZCAwKSxlNih0aGlzLCJsZWZ0UmVsYXRpdmUiLHZvaWQgMCksZTYodGhpcywic2Nyb2xsVG9wIix2b2lkIDAp''@;'; put 'put ''LGU2KHRoaXMsInNjcm9sbExlZnQiLHZvaWQgMCksZTYodGhpcywiY2VsbEhlaWdodCIsdm9pZCAwKSxlNih0aGlzLCJjZWxsV2lkdGgiLHZvaWQgMCk7Y29uc3QgZD1hLnNjcm9sbFksaD1hLnNjcm9sbFg7bGV0IGYsdixNLEQsWixyZTt0aGlzLnJvb3RXaW5kb3c9YSx0aGlzLnR5cGU9dGhp''@;'; put 'put ''cy5nZXRTb3VyY2VUeXBlKGwpLCJsaXRlcmFsIj09PXRoaXMudHlwZT8oZj1wYXJzZUludChsLnRvcCwxMCksTT1wYXJzZUludChsLmxlZnQsMTApLFo9bC5oZWlnaHR8fDAscmU9bC53aWR0aHx8MCx2PWYsRD1NLGYrPWQsTSs9aCk6ImV2ZW50Ij09PXRoaXMudHlwZSYmKGY9cGFyc2VJbnQo''@;'; put 'put ''bC5wYWdlWSwxMCksTT1wYXJzZUludChsLnBhZ2VYLDEwKSxaPWwudGFyZ2V0LmNsaWVudEhlaWdodCxyZT1sLnRhcmdldC5jbGllbnRXaWR0aCx2PWYtZCxEPU0taCksdGhpcy50b3A9Zix0aGlzLnRvcFJlbGF0aXZlPXYsdGhpcy5sZWZ0PU0sdGhpcy5sZWZ0UmVsYXRpdmU9RCx0aGlzLnNj''@;'; put 'put ''cm9sbFRvcD1kLHRoaXMuc2Nyb2xsTGVmdD1oLHRoaXMuY2VsbEhlaWdodD1aLHRoaXMuY2VsbFdpZHRoPXJlfWdldFNvdXJjZVR5cGUobCl7bGV0IGE9ImxpdGVyYWwiO3JldHVybiBsIGluc3RhbmNlb2YgRXZlbnQmJihhPSJldmVudCIpLGF9Zml0c0Fib3ZlKGwpe3JldHVybiB0aGlzLnRv''@;'; put 'put ''cFJlbGF0aXZlPj1sLm9mZnNldEhlaWdodH1maXRzQmVsb3cobCl7cmV0dXJuIHRoaXMudG9wUmVsYXRpdmUrbC5vZmZzZXRIZWlnaHQ8PShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06dGhpcy5yb290V2luZG93LmlubmVySGVpZ2h0KX1m''@;'; put 'put ''aXRzT25SaWdodChsKXtyZXR1cm4gdGhpcy5sZWZ0UmVsYXRpdmUrdGhpcy5jZWxsV2lkdGgrbC5vZmZzZXRXaWR0aDw9KGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp0aGlzLnJvb3RXaW5kb3cuaW5uZXJXaWR0aCl9Zml0c09uTGVmdChs''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5sZWZ0UmVsYXRpdmU+PWwub2Zmc2V0V2lkdGh9fWZ1bmN0aW9uIEVUKGMsbCxhKXsoZnVuY3Rpb24genV0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBv''@;'; put 'put ''biBhbiBvYmplY3QiKX0pKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBVbyhjLGwpe3JldHVybiBjLmdldChfZ2UoYyxsKSl9ZnVuY3Rpb24geEYoYyxsLGEpe3JldHVybiBjLnNldChfZ2UoYyxsKSxhKSxhfWZ1bmN0aW9uIF9nZShjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09''@;'; put 'put ''PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIFgxPW5ldyBXZWFrTWFwLFpkPW5ldyBXZWFrTWFwLFdkPW5ldyBXZWFrTWFwLFJKPW5l''@;'; put 'put ''dyBXZWFrTWFwLEtfPW5ldyBXZWFrTWFwO2NsYXNzIFV1dHtjb25zdHJ1Y3RvcihsKXtFVCh0aGlzLFgxLHZvaWQgMCksRVQodGhpcyxaZCx2b2lkIDApLEVUKHRoaXMsV2Qsdm9pZCAwKSxFVCh0aGlzLFJKLCExKSxFVCh0aGlzLEtfLHthYm92ZTowLGJlbG93OjAsbGVmdDowLHJpZ2h0OjB9''@;'; put 'put ''KSx4RihSSix0aGlzLGwpfXNldE9mZnNldChsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MDtyZXR1cm4gVW8oS18sdGhpcylbbF09YSx0aGlzfXNldEVsZW1lbnQobCl7cmV0dXJuIHhGKFgxLHRoaXMsbCksdGhpc31zZXRQ''@;'; put 'put ''YXJlbnRFbGVtZW50KGwpe3JldHVybiB4RihaZCx0aGlzLGwpLHRoaXN9dXBkYXRlUG9zaXRpb24obCl7eEYoV2QsdGhpcyxuZXcganV0KGwsVW8oWDEsdGhpcykub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldykpLFVvKFJKLHRoaXMpPyhVbyhXZCx0aGlzKS5maXRzQmVsb3coVW8oWDEsdGhp''@;'; put 'put ''cykpP3RoaXMuc2V0UG9zaXRpb25CZWxvd0N1cnNvcigpOlVvKFdkLHRoaXMpLmZpdHNBYm92ZShVbyhYMSx0aGlzKSk/dGhpcy5zZXRQb3NpdGlvbkFib3ZlQ3Vyc29yKCk6dGhpcy5zZXRQb3NpdGlvbkJlbG93Q3Vyc29yKCksdGhpcy51cGRhdGVIb3Jpem9udGFsUG9zaXRpb24oKSk6KHRo''@;'; put 'put ''aXMuc2V0UG9zaXRpb25CZWxvd0N1cnNvcigpLHRoaXMuc2V0UG9zaXRpb25PblJpZ2h0T2ZDdXJzb3IoKSl9dXBkYXRlSG9yaXpvbnRhbFBvc2l0aW9uKCl7InJ0bCI9PT1VbyhYMSx0aGlzKS5kaXI/VW8oV2QsdGhpcykuZml0c09uTGVmdChVbyhYMSx0aGlzKSk/dGhpcy5zZXRQb3NpdGlv''@;'; put 'put ''bk9uTGVmdE9mQ3Vyc29yKCk6dGhpcy5zZXRQb3NpdGlvbk9uUmlnaHRPZkN1cnNvcigpOlVvKFdkLHRoaXMpLmZpdHNPblJpZ2h0KFVvKFgxLHRoaXMpKT90aGlzLnNldFBvc2l0aW9uT25SaWdodE9mQ3Vyc29yKCk6dGhpcy5zZXRQb3NpdGlvbk9uTGVmdE9mQ3Vyc29yKCl9c2V0UG9zaXRp''@;'; put 'put ''b25BYm92ZUN1cnNvcigpe2xldCBsPVVvKEtfLHRoaXMpLmFib3ZlK1VvKFdkLHRoaXMpLnRvcC1VbyhYMSx0aGlzKS5vZmZzZXRIZWlnaHQ7aWYoVW8oWmQsdGhpcykpe2NvbnN0IGQ9VW8oWmQsdGhpcykub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKFVvKFpk''@;'; put 'put ''LHRoaXMpLnF1ZXJ5U2VsZWN0b3IoIi5odF9tYXN0ZXIiKSksaD1OdW1iZXIucGFyc2VJbnQoZC5wYWRkaW5nVG9wLDEwKSxmPU51bWJlci5wYXJzZUludChkLmJvcmRlclRvcCwxMCk7bD1VbyhXZCx0aGlzKS50b3ArVW8oV2QsdGhpcykuY2VsbEhlaWdodC1VbyhYMSx0aGlzKS5zY3JvbGxI''@;'; put 'put ''ZWlnaHQraCtmfVVvKFgxLHRoaXMpLnN0eWxlLnRvcD1gJHtsfXB4YH1zZXRQb3NpdGlvbkJlbG93Q3Vyc29yKCl7bGV0IGw9VW8oS18sdGhpcykuYmVsb3crVW8oV2QsdGhpcykudG9wKzE7aWYoVW8oWmQsdGhpcykpe2NvbnN0IGQ9VW8oWmQsdGhpcykub3duZXJEb2N1bWVudC5kZWZhdWx0''@;'; put 'put ''Vmlldy5nZXRDb21wdXRlZFN0eWxlKFVvKFpkLHRoaXMpLnF1ZXJ5U2VsZWN0b3IoIi5odF9tYXN0ZXIiKSksaD1OdW1iZXIucGFyc2VJbnQoZC5wYWRkaW5nVG9wLDEwKSxmPU51bWJlci5wYXJzZUludChkLmJvcmRlclRvcCwxMCk7bD1VbyhXZCx0aGlzKS50b3AtaC1mLTF9VW8oWDEsdGhp''@;'; put 'put ''cykuc3R5bGUudG9wPWAke2x9cHhgfXNldFBvc2l0aW9uT25SaWdodE9mQ3Vyc29yKCl7bGV0IGw9VW8oV2QsdGhpcykubGVmdDtpZihVbyhaZCx0aGlzKSl7Y29uc3QgYT1VbyhaZCx0aGlzKS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LGQ9TnVtYmVyLnBhcnNlSW50KGEuZ2V0Q29tcHV0''@;'; put 'put ''ZWRTdHlsZShVbyhaZCx0aGlzKS5xdWVyeVNlbGVjdG9yKCIuaHRDb3JlIikpLmJvcmRlclJpZ2h0V2lkdGgsMTApO2wrPVVvKFdkLHRoaXMpLmNlbGxXaWR0aCtkfWVsc2UgbCs9VW8oS18sdGhpcykucmlnaHQ7VW8oWDEsdGhpcykuc3R5bGUubGVmdD1gJHtsfXB4YH1zZXRQb3NpdGlvbk9u''@;'; put 'put ''TGVmdE9mQ3Vyc29yKCl7bGV0IGw9VW8oS18sdGhpcykubGVmdCtVbyhXZCx0aGlzKS5sZWZ0LVVvKFgxLHRoaXMpLm9mZnNldFdpZHRoO2lmKFVvKFpkLHRoaXMpKXtjb25zdCBhPVVvKFpkLHRoaXMpLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXc7bC09TnVtYmVyLnBhcnNlSW50KGEuZ2V0''@;'; put 'put ''Q29tcHV0ZWRTdHlsZShVbyhaZCx0aGlzKS5xdWVyeVNlbGVjdG9yKCIuaHRDb3JlIikpLmJvcmRlckxlZnRXaWR0aCwxMCl9VW8oWDEsdGhpcykuc3R5bGUubGVmdD1gJHtsfXB4YH19ZnVuY3Rpb24gd2dlKGMpe2xldHtpbml0aWFsUGFnZTpsPS0xLHNpemU6YT0oKCk9PjApLG9uSXRlbVNl''@;'; put 'put ''bGVjdDpkPSgoKT0+e30pLG9uQ2xlYXI6aD0oKCk9Pnt9KX09Yztjb25zdCBmPW5ldyBTZXQ7bGV0IHY9a3MobCwtMSxCZSgpLTEpO2Z1bmN0aW9uIE0ocnQscHQpe2NvbnN0IGR0PUJlKCktMTtyZXR1cm4gcnQ8MCYmKHJ0PWR0KSxydD5kdCYmKHJ0PTApLGYuaGFzKHJ0KT8tMTooZi5hZGQo''@;'; put 'put ''cnQpLCExPT09ZChydCwhMSkmJihydD1NKDE9PT1wdD8rK3J0Oi0tcnQscHQpKSxydCl9ZnVuY3Rpb24gQmUoKXtyZXR1cm4gTWF0aC5tYXgoYSgpLDApfXJldHVybntzZXRDdXJyZW50UGFnZTpmdW5jdGlvbiBEKHJ0KXtydD4tMSYmcnQ8QmUoKSYmITEhPT1kKHJ0LCEwKSYmKHY9cnQpfSxn''@;'; put 'put ''ZXRDdXJyZW50UGFnZTpmdW5jdGlvbiBaKCl7cmV0dXJuIHZ9LHRvRmlyc3RJdGVtOmZ1bmN0aW9uIHJlKCl7QmUoKT4wJiYoZi5jbGVhcigpLHY9TSgwLDEpKX0sdG9MYXN0SXRlbTpmdW5jdGlvbiBjZSgpe0JlKCk+MCYmKGYuY2xlYXIoKSx2PU0oQmUoKS0xLC0xKSl9LHRvTmV4dEl0ZW06''@;'; put 'put ''ZnVuY3Rpb24gYmUoKXtCZSgpPjAmJihmLmNsZWFyKCksdj1NKCsrdiwxKSl9LHRvUHJldmlvdXNJdGVtOmZ1bmN0aW9uIEVlKCl7QmUoKT4wJiYoZi5jbGVhcigpLHY9TSgtLXYsLTEpKX0sZ2V0U2l6ZTpCZSxjbGVhcjpmdW5jdGlvbiBxZSgpe2YuY2xlYXIoKSx2PWwsaCgpfX19ZnVuY3Rp''@;'; put 'put ''b24gTEooYyl7cmV0dXJuIFR1KGMsInN1Ym1lbnUiKX1mdW5jdGlvbiBPSihjKXtyZXR1cm4gbmV3IFJlZ0V4cChzcywiaSIpLnRlc3QoYy5uYW1lKX1mdW5jdGlvbiBFRihjLGwpe3JldHVybiEwPT09Yy5kaXNhYmxlZHx8ImZ1bmN0aW9uIj09dHlwZW9mIGMuZGlzYWJsZWQmJiEwPT09Yy5k''@;'; put 'put ''aXNhYmxlZC5jYWxsKGwpfWZ1bmN0aW9uIENnZShjKXtyZXR1cm4gVHUoYywiZGlzYWJsZVNlbGVjdGlvbiIpfWZ1bmN0aW9uIFNnZShjLGwpe2NvbnN0IGE9Yy5zbGljZSgwKTtmb3IobGV0IGQ9MDtkPGEubGVuZ3RoJiZhW2RdLm5hbWU9PT1sOylhLnNoaWZ0KCk7cmV0dXJuIGF9ZnVuY3Rp''@;'; put 'put ''b24gUXV0KGMpe3JldHVybiEwPT09Yy5jaGVja2FibGV9ZnVuY3Rpb24gcjB0KGMpe3JldHVybihsLGEsZCxoLGYsdik9Pntjb25zdCBNPWwuZ2V0U291cmNlRGF0YUF0Um93KGQpLEQ9Yy5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksWj0iZnVuY3Rpb24iPT10eXBlb2Ygdj92''@;'; put 'put ''LmNhbGwoYyk6dixyZT0iZnVuY3Rpb24iPT10eXBlb2YgTS5hcmlhTGFiZWw/TS5hcmlhTGFiZWwuY2FsbChjKTpNLmFyaWFMYWJlbCxjZT0iZnVuY3Rpb24iPT10eXBlb2YgTS5hcmlhQ2hlY2tlZD9NLmFyaWFDaGVja2VkLmNhbGwoYyk6TS5hcmlhQ2hlY2tlZDtpZih4cChhKSxUaShELCJo''@;'; put 'put ''dEl0ZW1XcmFwcGVyIiksYy5nZXRTZXR0aW5ncygpLmFyaWFUYWdzKXtjb25zdCBiZT0hRUYoTSxjKSYmIUNnZShNKSYmIU9KKE0pO3ZvKGEsWy4uLlF1dChNKT9bWyJyb2xlIiwibWVudWl0ZW1jaGVja2JveCJdLG1FKHJlKSxJMmUoY2UpXTpbWyJyb2xlIiwibWVudWl0ZW0iXSxtRShaKV0s''@;'; put 'put ''Li4uYmU/W043KC0xKV06W10sLi4uRUYoTSxjKT9bWyJhcmlhLWRpc2FibGVkIiwidHJ1ZSJdXTpbXSwuLi5MSihNKT9bTjIoITEpXTpbXV0pfWEuY2xhc3NOYW1lPSIiLGEuYXBwZW5kQ2hpbGQoRCksT0ooTSk/VGkoYSwiaHRTZXBhcmF0b3IiKToiZnVuY3Rpb24iPT10eXBlb2YgTS5yZW5k''@;'; put 'put ''ZXJlcj8oVGkoYSwiaHRDdXN0b21NZW51UmVuZGVyZXIiKSxhLmFwcGVuZENoaWxkKE0ucmVuZGVyZXIobCxELGQsaCxmLFopKSk6ejcoRCxaKSxFRihNLGMpP1RpKGEsImh0RGlzYWJsZWQiKTpDZ2UoTSk/VGkoYSwiaHRTZWxlY3Rpb25EaXNhYmxlZCIpOkxKKE0pJiZUaShhLCJodFN1Ym1l''@;'; put 'put ''bnUiKX19ZnVuY3Rpb24gUEooYyxsLGEpeyhmdW5jdGlvbiBpMHQoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLnNldChjLGEpfWZ1bmN0''@;'; put 'put ''aW9uIFVwKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBhMHQoYyl7dmFyIGw9ZnVuY3Rpb24gbzB0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1''@;'; put 'put ''bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3lt''@;'; put 'put ''Ym9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBGSihjLGwsYSl7cmV0dXJuIGMuc2V0KEVnZShjLGwpLGEpLGF9''@;'; put 'put ''ZnVuY3Rpb24gXzkoYyxsKXtyZXR1cm4gYy5nZXQoRWdlKGMsbCkpfWZ1bmN0aW9uIEVnZShjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50''@;'; put 'put ''IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIFRUPW5ldyBXZWFrTWFwLFRGPW5ldyBXZWFrTWFwLEFGPW5ldyBXZWFrTWFwO2NsYXNzIHFfe2dldCB0YWJsZUJvcmRlcldpZHRoKCl7cmV0dXJuIHZvaWQgMD09PV85KEFGLHRoaXMpJiZ0aGlzLmhvdE1lbnUmJkZKKEFGLHRo''@;'; put 'put ''aXMscGFyc2VJbnQodGhpcy5ob3RNZW51LnJvb3RXaW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLmhvdE1lbnUudmlldy5fd3Qud3RUYWJsZS5UQUJMRSkuYm9yZGVyV2lkdGgsMTApKSxfOShBRix0aGlzKX1jb25zdHJ1Y3RvcihsLGEpe3ZhciBkPXRoaXM7VXAodGhpcywiaG90Iix2b2lk''@;'; put 'put ''IDApLFVwKHRoaXMsIm9wdGlvbnMiLHZvaWQgMCksVXAodGhpcywiZXZlbnRNYW5hZ2VyIixuZXcgajIodGhpcykpLFVwKHRoaXMsImNvbnRhaW5lciIsdm9pZCAwKSxVcCh0aGlzLCJwb3NpdGlvbmVyIix2b2lkIDApLFVwKHRoaXMsImhvdE1lbnUiLG51bGwpLFVwKHRoaXMsImhvdFN1Yk1l''@;'; put 'put ''bnVzIix7fSksVXAodGhpcywicGFyZW50TWVudSIsdm9pZCAwKSxVcCh0aGlzLCJtZW51SXRlbXMiLG51bGwpLFVwKHRoaXMsIm9yaWdPdXRzaWRlQ2xpY2tEZXNlbGVjdHMiLG51bGwpLFBKKHRoaXMsVFQsdm9pZCAwKSxQSih0aGlzLFRGLHZvaWQgMCksUEoodGhpcyxBRix2b2lkIDApLHRo''@;'; put 'put ''aXMuaG90PWwsdGhpcy5vcHRpb25zPWF8fHtwYXJlbnQ6bnVsbCxuYW1lOm51bGwsY2xhc3NOYW1lOiIiLGtlZXBJblZpZXdwb3J0OiEwLHN0YW5kYWxvbmU6ITEsbWluV2lkdGg6MjE1LGNvbnRhaW5lcjp0aGlzLmhvdC5yb290RG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50fSx0aGlzLmNvbnRh''@;'; put 'put ''aW5lcj10aGlzLmNyZWF0ZUNvbnRhaW5lcih0aGlzLm9wdGlvbnMubmFtZSksdGhpcy5wb3NpdGlvbmVyPW5ldyBVdXQodGhpcy5vcHRpb25zLmtlZXBJblZpZXdwb3J0KSx0aGlzLnBhcmVudE1lbnU9dGhpcy5vcHRpb25zLnBhcmVudHx8bnVsbCx0aGlzLnJlZ2lzdGVyRXZlbnRzKCksdGhp''@;'; put 'put ''cy5pc1N1Yk1lbnUoKSYmdGhpcy5hZGRMb2NhbEhvb2soImFmdGVyU2VsZWN0aW9uQ2hhbmdlIixmdW5jdGlvbigpe2Zvcih2YXIgaD1hcmd1bWVudHMubGVuZ3RoLGY9bmV3IEFycmF5KGgpLHY9MDt2PGg7disrKWZbdl09YXJndW1lbnRzW3ZdO3JldHVybiBkLnBhcmVudE1lbnUucnVuTG9j''@;'; put 'put ''YWxIb29rcygiYWZ0ZXJTZWxlY3Rpb25DaGFuZ2UiLC4uLmYpfSksdGhpcy5ob3QuYWRkSG9vaygiYWZ0ZXJTZXRUaGVtZSIsKGgsZik9Pnt2YXIgdjtmfHxudWxsPT09KHY9dGhpcy5ob3RNZW51KXx8dm9pZCAwPT09dnx8di51c2VUaGVtZShoKX0pfXJlZ2lzdGVyRXZlbnRzKCl7bGV0IGw9''@;'; put 'put ''dGhpcy5ob3Qucm9vdFdpbmRvdztmb3IoO2w7KXRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobC5kb2N1bWVudCwibW91c2Vkb3duIixhPT50aGlzLm9uRG9jdW1lbnRNb3VzZURvd24oYSkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobC5kb2N1bWVudCwi''@;'; put 'put ''dG91Y2hzdGFydCIsYT0+dGhpcy5vbkRvY3VtZW50TW91c2VEb3duKGEpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwuZG9jdW1lbnQsImNvbnRleHRtZW51IixhPT50aGlzLm9uRG9jdW1lbnRDb250ZXh0TWVudShhKSksbD1CNyhsKX1zZXRNZW51SXRlbXMobCl7dGhp''@;'; put 'put ''cy5tZW51SXRlbXM9bH1nZXROYXZpZ2F0b3IoKXtyZXR1cm4gXzkoVFQsdGhpcyl9Z2V0S2V5Ym9hcmRTaG9ydGN1dHNDdHJsKCl7cmV0dXJuIF85KFRGLHRoaXMpfWdldFNlbGVjdGVkSXRlbSgpe3JldHVybiB0aGlzLmhhc1NlbGVjdGVkSXRlbSgpP3RoaXMuaG90TWVudS5nZXRTb3VyY2VE''@;'; put 'put ''YXRhQXRSb3codGhpcy5ob3RNZW51LmdldFNlbGVjdGVkTGFzdCgpWzBdKTpudWxsfWhhc1NlbGVjdGVkSXRlbSgpe3JldHVybiBBcnJheS5pc0FycmF5KHRoaXMuaG90TWVudS5nZXRTZWxlY3RlZExhc3QoKSl9aXNTdWJNZW51KCl7cmV0dXJuIG51bGwhPT10aGlzLnBhcmVudE1lbnV9b3Bl''@;'; put 'put ''bigpe3RoaXMucnVuTG9jYWxIb29rcygiYmVmb3JlT3BlbiIpLHRoaXMuY29udGFpbmVyLnJlbW92ZUF0dHJpYnV0ZSgic3R5bGUiKSx0aGlzLmNvbnRhaW5lci5zdHlsZS5kaXNwbGF5PSJibG9jayI7Y29uc3QgbD1NRShNPT50aGlzLm9wZW5TdWJNZW51KE0pLDMwMCksYT10aGlzLm9wdGlv''@;'; put 'put ''bnMubWluV2lkdGh8fDIxNTtsZXQgZD0hMSxoPUltKHRoaXMubWVudUl0ZW1zLE09PihNLmtleT09PXhUJiYoZD0hMCksZnVuY3Rpb24gS3V0KGMsbCl7cmV0dXJuIWMuaGlkZGVufHwhKCJmdW5jdGlvbiI9PXR5cGVvZiBjLmhpZGRlbiYmYy5oaWRkZW4uY2FsbChsKSl9KE0sdGhpcy5ob3Qp''@;'; put 'put ''KSk7aWYoaC5sZW5ndGg8MSYmIWQpaC5wdXNoKGJnZSgpW3hUXSk7ZWxzZSBpZigwPT09aC5sZW5ndGgpcmV0dXJuO2g9ZnVuY3Rpb24gSnV0KGMpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpzcyxhPWMuc2xpY2UoMCk7cmV0''@;'; put 'put ''dXJuIGE9U2dlKGEsbCksYT1mdW5jdGlvbiBxdXQoYyxsKXtsZXQgYT1jLnNsaWNlKDApO3JldHVybiBhLnJldmVyc2UoKSxhPVNnZShhLGwpLGEucmV2ZXJzZSgpLGF9KGEsbCksYT1mdW5jdGlvbiBYdXQoYyl7Y29uc3QgbD1bXTtyZXR1cm4gWW4oYywoYSxkKT0+e2Q+MD9sW2wubGVuZ3Ro''@;'; put 'put ''LTFdLm5hbWUhPT1hLm5hbWUmJmwucHVzaChhKTpsLnB1c2goYSl9KSxsfShhKSxhfShoLHNzKTtsZXQgZj0hMTtjb25zdCB2PXtkYXRhOmgsY29sSGVhZGVyczohMSxhdXRvQ29sdW1uU2l6ZTohMCxhdXRvV3JhcFJvdzohMSxtb2RpZnlDb2xXaWR0aDpNPT5QYShNKSYmTTxhP2E6TSxhdXRv''@;'; put 'put ''Um93U2l6ZTohMSxyZWFkT25seTohMCxlZGl0b3I6ITEsY29weVBhc3RlOiExLGhpZGRlblJvd3M6ITAsbWF4Q29sczoxLGNvbHVtbnM6W3tkYXRhOiJuYW1lIixyZW5kZXJlcjpyMHQodGhpcy5ob3QpfV0scmVuZGVyQWxsUm93czohMCxmcmFnbWVudFNlbGVjdGlvbjohMSxvdXRzaWRlQ2xp''@;'; put 'put ''Y2tEZXNlbGVjdHM6ITEsZGlzYWJsZVZpc3VhbFNlbGVjdGlvbjoiYXJlYSIsbGF5b3V0RGlyZWN0aW9uOnRoaXMuaG90LmlzUnRsKCk/InJ0bCI6Imx0ciIsYXJpYVRhZ3M6ITEsdGhlbWVOYW1lOnRoaXMuaG90LmdldEN1cnJlbnRUaGVtZU5hbWUoKSxiZWZvcmVSZWZyZXNoRGltZW5zaW9u''@;'; put 'put ''czooKT0+ITEsYmVmb3JlT25DZWxsTW91c2VPdmVyOihNLEQpPT57XzkoVFQsdGhpcykuc2V0Q3VycmVudFBhZ2UoRC5yb3cpfSxhZnRlck9uQ2VsbE1vdXNlT3ZlcjooTSxEKT0+e3RoaXMuaXNBbGxTdWJNZW51c0Nsb3NlZCgpP2woRC5yb3cpOnRoaXMub3BlblN1Yk1lbnUoRC5yb3cpfSxh''@;'; put 'put ''ZnRlck9uQ2VsbENvbnRleHRNZW51Ok09PntNLnByZXZlbnREZWZhdWx0KCksRiQoKSYmZiYmdGhpcy5oYXNTZWxlY3RlZEl0ZW0oKSYmdGhpcy5jbG9zZSghMCl9LGFmdGVyU2VsZWN0aW9uOihNLEQsWixyZSxjZSk9Pnt0aGlzLmhvdE1lbnUudmlldy5pc01vdXNlRG93bigpJiYoY2UudmFs''@;'; put 'put ''dWU9ITApLHRoaXMucnVuTG9jYWxIb29rcygiYWZ0ZXJTZWxlY3Rpb25DaGFuZ2UiLHRoaXMuZ2V0U2VsZWN0ZWRJdGVtKCkpfSxiZWZvcmVPbkNlbGxNb3VzZVVwOk09Pnt0aGlzLmhhc1NlbGVjdGVkSXRlbSgpJiYoZj0hdGhpcy5pc0NvbW1hbmRQYXNzaXZlKHRoaXMuZ2V0U2VsZWN0ZWRJ''@;'; put 'put ''dGVtKCkpLHRoaXMuZXhlY3V0ZUNvbW1hbmQoTSkpfSxhZnRlck9uQ2VsbE1vdXNlVXA6TT0+eyghRiQoKXx8IUhtKE0pKSYmZiYmdGhpcy5oYXNTZWxlY3RlZEl0ZW0oKSYmKEFwKCl8fFAkKCk/dGhpcy5ob3QuX3JlZ2lzdGVyVGltZW91dCgoKT0+dGhpcy5jbG9zZSghMCksMzI1KTp0aGlz''@;'; put 'put ''LmNsb3NlKCEwKSl9LGFmdGVyVW5saXN0ZW46KCk9PnshdGhpcy5oYXNTZWxlY3RlZEl0ZW0oKSYmdGhpcy5pc09wZW5lZCgpJiZ0aGlzLmhvdE1lbnUubGlzdGVuKCl9fTt0aGlzLm9yaWdPdXRzaWRlQ2xpY2tEZXNlbGVjdHM9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5vdXRzaWRlQ2xpY2tE''@;'; put 'put ''ZXNlbGVjdHMsdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5vdXRzaWRlQ2xpY2tEZXNlbGVjdHM9ITEsdGhpcy5ob3RNZW51PW5ldyB0aGlzLmhvdC5jb25zdHJ1Y3Rvcih0aGlzLmNvbnRhaW5lcix2KSx0aGlzLmhvdE1lbnUuYWRkSG9vaygiYWZ0ZXJJbml0IiwoKT0+dGhpcy5vbkFmdGVySW5p''@;'; put 'put ''dCgpKSx0aGlzLmhvdE1lbnUuaW5pdCgpLEZKKFRULHRoaXMsZnVuY3Rpb24gZTB0KGMpe3JldHVybiB3Z2Uoe3NpemU6KCk9PmMuY291bnRSb3dzKCksb25JdGVtU2VsZWN0KGwsYSl7Y29uc3QgZD1jLmdldENlbGwobCwwKTtpZighZHx8ZnVuY3Rpb24gV3V0KGMpe3JldHVybiBwbyhjLCJo''@;'; put 'put ''dFNlcGFyYXRvciIpfShkKXx8ZnVuY3Rpb24gR3V0KGMpe3JldHVybiBwbyhjLCJodERpc2FibGVkIil9KGQpfHxmdW5jdGlvbiAkdXQoYyl7cmV0dXJuIHBvKGMsImh0U2VsZWN0aW9uRGlzYWJsZWQiKX0oZCkpcmV0dXJuITE7Yy5zZWxlY3RDZWxsKGwsMCwuLi5hP1tsLDAsITEsITFdOltd''@;'; put 'put ''KX0sb25DbGVhcigpe2MuZGVzZWxlY3RDZWxsKCl9fSl9KHRoaXMuaG90TWVudSkpLEZKKFRGLHRoaXMsZnVuY3Rpb24gbjB0KGMpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpbXTtjb25zdCBhPVtdO2Z1bmN0aW9uIGQoWixy''@;'; put 'put ''ZSl7TShyZSkuYWRkU2hvcnRjdXRzKFose2dyb3VwOiJtZW51In0pfWZ1bmN0aW9uIGgoWixyZSl7Y29uc3QgY2U9TShyZSk7Wi5mb3JFYWNoKGJlPT57bGV0e2tleXM6RWV9PWJlO0VlLmZvckVhY2goQmU9PmNlLnJlbW92ZVNob3J0Y3V0c0J5S2V5cyhCZSkpfSksYS5wdXNoKHtzaG9ydGN1''@;'; put 'put ''dHM6Wixjb250ZXh0TmFtZTpyZX0pLGQoWixyZSl9ZnVuY3Rpb24gdihaKXtyZXR1cm4gWj9gbWVudToke1p9YDoibWVudSJ9ZnVuY3Rpb24gTShaKXt2YXIgcmU7Y29uc3QgY2U9Yy5ob3RNZW51LmdldFNob3J0Y3V0TWFuYWdlcigpLGJlPXYoWik7cmV0dXJuIG51bGwhPT0ocmU9Y2UuZ2V0''@;'; put 'put ''Q29udGV4dChiZSkpJiZ2b2lkIDAhPT1yZT9yZTpjZS5hZGRDb250ZXh0KGJlKX1yZXR1cm4gZChmdW5jdGlvbiB0MHQoYyl7Y29uc3R7aG90OmwsaG90TWVudTphfT1jO3JldHVyblt7a2V5czpbWyJDb250cm9sL01ldGEiLCJBIl1dLGZvcndhcmRUb0NvbnRleHQ6bC5nZXRTaG9ydGN1dE1h''@;'; put 'put ''bmFnZXIoKS5nZXRDb250ZXh0KCJncmlkIiksY2FsbGJhY2s6KCk9PmMuY2xvc2UoITApfSx7a2V5czpbWyJUYWIiXSxbIlNoaWZ0IiwiVGFiIl1dLGNhbGxiYWNrOihkLGgpPT57Y29uc3QgZj1sLmdldFNldHRpbmdzKCksdj0iZnVuY3Rpb24iPT10eXBlb2YgZi50YWJNb3Zlcz9mLnRhYk1v''@;'; put 'put ''dmVzKGQpOmYudGFiTW92ZXM7aC5pbmNsdWRlcygic2hpZnQiKT9sLnNlbGVjdGlvbi50cmFuc2Zvcm1TdGFydCgtdi5yb3csLXYuY29sKTpsLnNlbGVjdGlvbi50cmFuc2Zvcm1TdGFydCh2LnJvdyx2LmNvbCksYy5jbG9zZSghMCl9fSx7a2V5czpbWyJFc2NhcGUiXV0sY2FsbGJhY2s6KCk9''@;'; put 'put ''PmMuY2xvc2UoKX0se2tleXM6W1siQXJyb3dEb3duIl1dLGNhbGxiYWNrOigpPT5jLmdldE5hdmlnYXRvcigpLnRvTmV4dEl0ZW0oKX0se2tleXM6W1siQXJyb3dVcCJdXSxjYWxsYmFjazooKT0+Yy5nZXROYXZpZ2F0b3IoKS50b1ByZXZpb3VzSXRlbSgpfSx7a2V5czpbW2wuaXNSdGwoKT8i''@;'; put 'put ''QXJyb3dMZWZ0IjoiQXJyb3dSaWdodCJdXSxjYWxsYmFjazooKT0+e2NvbnN0IGQ9YS5nZXRTZWxlY3RlZExhc3QoKTtpZihkKXtjb25zdCBoPWMub3BlblN1Yk1lbnUoZFswXSk7aCYmaC5nZXROYXZpZ2F0b3IoKS50b0ZpcnN0SXRlbSgpfX19LHtrZXlzOltbbC5pc1J0bCgpPyJBcnJvd1Jp''@;'; put 'put ''Z2h0IjoiQXJyb3dMZWZ0Il1dLGNhbGxiYWNrOigpPT57YS5nZXRTZWxlY3RlZExhc3QoKSYmYy5pc1N1Yk1lbnUoKSYmKGMuY2xvc2UoKSxjLmlzU3ViTWVudSgpJiZjLnBhcmVudE1lbnUuaG90TWVudS5saXN0ZW4oKSl9fSx7a2V5czpbWyJDb250cm9sL01ldGEiLCJBcnJvd1VwIl0sWyJI''@;'; put 'put ''b21lIl1dLGNhbGxiYWNrOigpPT5jLmdldE5hdmlnYXRvcigpLnRvRmlyc3RJdGVtKCl9LHtrZXlzOltbIkNvbnRyb2wvTWV0YSIsIkFycm93RG93biJdLFsiRW5kIl1dLGNhbGxiYWNrOigpPT5jLmdldE5hdmlnYXRvcigpLnRvTGFzdEl0ZW0oKX0se2tleXM6W1siRW50ZXIiXSxbIlNwYWNl''@;'; put 'put ''Il1dLGNhbGxiYWNrOmQ9Pntjb25zdCBoPWEuZ2V0U2VsZWN0ZWRMYXN0KCk7aCYmKGEuZ2V0U291cmNlRGF0YUF0Um93KGhbMF0pLnN1Ym1lbnU/Yy5vcGVuU3ViTWVudShoWzBdKS5nZXROYXZpZ2F0b3IoKS50b0ZpcnN0SXRlbSgpOihjLmV4ZWN1dGVDb21tYW5kKGQpLGMuY2xvc2UoITAp''@;'; put 'put ''KSl9fSx7a2V5czpbWyJQYWdlVXAiXV0sY2FsbGJhY2s6KCk9PnthLmdldFNlbGVjdGVkTGFzdCgpP2Euc2VsZWN0aW9uLnRyYW5zZm9ybVN0YXJ0KC1hLmNvdW50VmlzaWJsZVJvd3MoKSwwKTpjLmdldE5hdmlnYXRvcigpLnRvRmlyc3RJdGVtKCl9fSx7a2V5czpbWyJQYWdlRG93biJdXSxj''@;'; put 'put ''YWxsYmFjazooKT0+e2EuZ2V0U2VsZWN0ZWRMYXN0KCk/YS5zZWxlY3Rpb24udHJhbnNmb3JtU3RhcnQoYS5jb3VudFZpc2libGVSb3dzKCksMCk6Yy5nZXROYXZpZ2F0b3IoKS50b0xhc3RJdGVtKCl9fV19KGMpKSxsLmZvckVhY2goWj0+e2xldHtzaG9ydGN1dHM6cmUsY29udGV4dE5hbWU6''@;'; put 'put ''Y2V9PVo7aChyZSxjZSl9KSx7YWRkQ3VzdG9tU2hvcnRjdXRzOmgsZ2V0Q3VzdG9tU2hvcnRjdXRzOmZ1bmN0aW9uIGYoKXtyZXR1cm5bLi4uYV19LGdldENvbnRleHQ6TSxsaXN0ZW46ZnVuY3Rpb24gRChaKXtjLmhvdE1lbnUuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuc2V0QWN0aXZlQ29udGV4''@;'; put 'put ''dE5hbWUodihaKSl9fX0odGhpcykpLF85KFRGLHRoaXMpLmxpc3RlbigpLHRoaXMuZm9jdXMoKSx0aGlzLmlzU3ViTWVudSgpJiZ0aGlzLmFkZExvY2FsSG9vaygiYWZ0ZXJPcGVuIiwoKT0+dGhpcy5wYXJlbnRNZW51LnJ1bkxvY2FsSG9va3MoImFmdGVyU3VibWVudU9wZW4iLHRoaXMpKSx0''@;'; put 'put ''aGlzLnJ1bkxvY2FsSG9va3MoImFmdGVyT3BlbiIsdGhpcyl9Y2xvc2UoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdO2lmKHRoaXMuaXNPcGVuZWQoKSlpZihsJiZ0aGlzLmlzU3ViTWVudSgpKXRoaXMucGFyZW50TWVudS5j''@;'; put 'put ''bG9zZSgpO2Vsc2UgaWYoXzkoVFQsdGhpcykuY2xlYXIoKSx0aGlzLmNsb3NlQWxsU3ViTWVudXMoKSx0aGlzLmNvbnRhaW5lci5zdHlsZS5kaXNwbGF5PSJub25lIix0aGlzLmhvdE1lbnUuZGVzdHJveSgpLHRoaXMuaG90TWVudT1udWxsLHRoaXMuaG90LmdldFNldHRpbmdzKCkub3V0c2lk''@;'; put 'put ''ZUNsaWNrRGVzZWxlY3RzPXRoaXMub3JpZ091dHNpZGVDbGlja0Rlc2VsZWN0cyx0aGlzLnJ1bkxvY2FsSG9va3MoImFmdGVyQ2xvc2UiKSx0aGlzLmlzU3ViTWVudSgpKXtpZih0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmFyaWFUYWdzKXtjb25zdCBhPXRoaXMucGFyZW50TWVudS5ob3RNZW51''@;'; put 'put ''LmdldFNlbGVjdGVkTGFzdCgpO2EmJnZvKHRoaXMucGFyZW50TWVudS5ob3RNZW51LmdldENlbGwoYVswXSwwKSxbTjIoITEpXSl9dGhpcy5wYXJlbnRNZW51LmhvdE1lbnUubGlzdGVuKCl9fW9wZW5TdWJNZW51KGwpe2lmKCF0aGlzLmhvdE1lbnUpcmV0dXJuITE7Y29uc3QgYT10aGlzLmhv''@;'; put 'put ''dE1lbnUuZ2V0Q2VsbChsLDApO2lmKHRoaXMuY2xvc2VBbGxTdWJNZW51cygpLCFhfHwhZnVuY3Rpb24gWXV0KGMpe3JldHVybiBwbyhjLCJodFN1Ym1lbnUiKX0oYSkpcmV0dXJuITE7Y29uc3QgZD10aGlzLmhvdE1lbnUuZ2V0U291cmNlRGF0YUF0Um93KGwpLGg9bmV3IHFfKHRoaXMuaG90''@;'; put 'put ''LHtwYXJlbnQ6dGhpcyxuYW1lOmQubmFtZSxjbGFzc05hbWU6dGhpcy5vcHRpb25zLmNsYXNzTmFtZSxrZWVwSW5WaWV3cG9ydDohMCxjb250YWluZXI6dGhpcy5vcHRpb25zLmNvbnRhaW5lcn0pO3JldHVybiBoLnNldE1lbnVJdGVtcyhkLnN1Ym1lbnUuaXRlbXMpLGgub3BlbigpLGguc2V0''@;'; put 'put ''UG9zaXRpb24oYS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSksdGhpcy5ob3RTdWJNZW51c1tkLmtleV09aCx0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmFyaWFUYWdzJiZ2byhhLFtOMighMCldKSxofWNsb3NlU3ViTWVudShsKXtjb25zdCBhPXRoaXMuaG90TWVudS5nZXRTb3VyY2VEYXRhQXRS''@;'; put 'put ''b3cobCksZD10aGlzLmhvdFN1Yk1lbnVzW2Eua2V5XTtpZihkKXtkLmRlc3Ryb3koKSxkZWxldGUgdGhpcy5ob3RTdWJNZW51c1thLmtleV07Y29uc3QgaD10aGlzLmhvdE1lbnUuZ2V0Q2VsbChsLDApO3RoaXMuaG90LmdldFNldHRpbmdzKCkuYXJpYVRhZ3MmJnZvKGgsW04yKCExKV0pfX1j''@;'; put 'put ''bG9zZUFsbFN1Yk1lbnVzKCl7WW4odGhpcy5ob3RNZW51LmdldERhdGEoKSwobCxhKT0+dGhpcy5jbG9zZVN1Yk1lbnUoYSkpfWlzQWxsU3ViTWVudXNDbG9zZWQoKXtyZXR1cm4gMD09PU9iamVjdC5rZXlzKHRoaXMuaG90U3ViTWVudXMpLmxlbmd0aH1mb2N1cygpe3RoaXMuaXNPcGVuZWQo''@;'; put 'put ''KSYmKHRoaXMuaG90TWVudS5yb290RWxlbWVudC5mb2N1cyh7cHJldmVudFNjcm9sbDohMH0pLHRoaXMuZ2V0S2V5Ym9hcmRTaG9ydGN1dHNDdHJsKCkubGlzdGVuKCksdGhpcy5ob3RNZW51Lmxpc3RlbigpKX1kZXN0cm95KCl7Y29uc3QgbD10aGlzLmNvbnRhaW5lci5wYXJlbnROb2RlO3Ro''@;'; put 'put ''aXMuY2xlYXJMb2NhbEhvb2tzKCksdGhpcy5jbG9zZSgpLHRoaXMucGFyZW50TWVudT1udWxsLHRoaXMuZXZlbnRNYW5hZ2VyLmRlc3Ryb3koKSxsJiZsLnJlbW92ZUNoaWxkKHRoaXMuY29udGFpbmVyKX1pc09wZW5lZCgpe3JldHVybiBudWxsIT09dGhpcy5ob3RNZW51fWV4ZWN1dGVDb21t''@;'; put 'put ''YW5kKGwpe2lmKCF0aGlzLmlzT3BlbmVkKCl8fCF0aGlzLmhhc1NlbGVjdGVkSXRlbSgpKXJldHVybjtjb25zdCBhPXRoaXMuZ2V0U2VsZWN0ZWRJdGVtKCk7aWYodGhpcy5ydW5Mb2NhbEhvb2tzKCJzZWxlY3QiLGEsbCksdGhpcy5pc0NvbW1hbmRQYXNzaXZlKGEpKXJldHVybjtjb25zdCBk''@;'; put 'put ''PXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2UoKSxoPWQ/ZnVuY3Rpb24gWnV0KGMpe3JldHVybiB5cyhjLGw9Pih7c3RhcnQ6bC5nZXRUb3BTdGFydENvcm5lcigpLGVuZDpsLmdldEJvdHRvbUVuZENvcm5lcigpfSkpfShkKTpbXTt0aGlzLnJ1bkxvY2FsSG9va3MoImV4ZWN1dGVDb21tYW5k''@;'; put 'put ''IixhLmtleSxoLGwpLHRoaXMuaXNTdWJNZW51KCkmJnRoaXMucGFyZW50TWVudS5ydW5Mb2NhbEhvb2tzKCJleGVjdXRlQ29tbWFuZCIsYS5rZXksaCxsKX1pc0NvbW1hbmRQYXNzaXZlKGwpe3JldHVybiExPT09bC5pc0NvbW1hbmR8fE9KKGwpfHxFRihsLHRoaXMuaG90KXx8TEoobCl9c2V0''@;'; put 'put ''T2Zmc2V0KGwpe3RoaXMucG9zaXRpb25lci5zZXRPZmZzZXQobCxhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MCl9c2V0UG9zaXRpb24obCl7dGhpcy5pc1N1Yk1lbnUoKSYmdGhpcy5wb3NpdGlvbmVyLnNldFBhcmVudEVsZW1lbnQodGhp''@;'; put 'put ''cy5wYXJlbnRNZW51LmNvbnRhaW5lciksdGhpcy5wb3NpdGlvbmVyLnNldEVsZW1lbnQodGhpcy5jb250YWluZXIpLnVwZGF0ZVBvc2l0aW9uKGwpfXVwZGF0ZU1lbnVEaW1lbnNpb25zKCl7Y29uc3QgbD10aGlzLmhvdE1lbnUudmlldy5nZXRTdHlsZXNIYW5kbGVyKCkse3d0VGFibGU6YX09''@;'; put 'put ''dGhpcy5ob3RNZW51LnZpZXcuX3d0LGQ9dGhpcy5ob3RNZW51LmdldFNldHRpbmdzKCkuZGF0YSxoPWEuaGlkZXIuc3R5bGUsZj1hLmhvbGRlci5zdHlsZSx2PXBhcnNlSW50KGgud2lkdGgsMTApLE09cXUoZCwoRCxaLHJlKT0+e2NvbnN0IGJlPXRoaXMuaG90TWVudS5nZXRDZWxsKHJlLDAp''@;'; put 'put ''P3h1KHRoaXMuaG90TWVudS5nZXRDZWxsKHJlLDApKTowO3JldHVybiBEKyhaLm5hbWU9PT1zcz8xOmJlKX0sMCk7bC5pc0NsYXNzaWNUaGVtZSgpPyhmLndpZHRoPWAke3YrM31weGAsZi5oZWlnaHQ9YCR7TSszfXB4YCk6KGYud2lkdGg9YCR7dn1weGAsZi5oZWlnaHQ9YCR7TX1weGApLGgu''@;'; put 'put ''aGVpZ2h0PWYuaGVpZ2h0fWNyZWF0ZUNvbnRhaW5lcigpe2NvbnN0IGE9dGhpcy5vcHRpb25zLmNvbnRhaW5lci5vd25lckRvY3VtZW50O2xldCBoLGQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOm51bGw7cmV0dXJuIGQmJihtbChkKSYm''@;'; put 'put ''KGQ9ZC5jYWxsKHRoaXMuaG90KSxkPW51bGw9PT1kfHxfYyhkKT8iIjpkLnRvU3RyaW5nKCkpLGQ9ZC5yZXBsYWNlKC9bXkEtWmEtejAtOV0vZywiXyIpLGQ9YCR7dGhpcy5vcHRpb25zLmNsYXNzTmFtZX1TdWJfJHtkfWAsaD1hLnF1ZXJ5U2VsZWN0b3IoYC4ke3RoaXMub3B0aW9ucy5jbGFz''@;'; put 'put ''c05hbWV9LiR7ZH1gKSksaHx8KGg9YS5jcmVhdGVFbGVtZW50KCJkaXYiKSxUaShoLGBodE1lbnUgaGFuZHNvbnRhYmxlICR7dGhpcy5vcHRpb25zLmNsYXNzTmFtZX1gKSxkJiZUaShoLGQpLHRoaXMub3B0aW9ucy5jb250YWluZXIuYXBwZW5kQ2hpbGQoaCkpLGh9b25BZnRlckluaXQoKXt0''@;'; put 'put ''aGlzLnVwZGF0ZU1lbnVEaW1lbnNpb25zKCksdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5hcmlhVGFncyYmdm8odGhpcy5ob3RNZW51LnJvb3RFbGVtZW50LFtbInJvbGUiLCJtZW51Il0sTjcoLTEpXSl9b25Eb2N1bWVudE1vdXNlRG93bihsKXt0aGlzLmlzT3BlbmVkKCkmJih0aGlzLm9wdGlv''@;'; put 'put ''bnMuc3RhbmRhbG9uZSYmdGhpcy5ob3RNZW51JiYhTG0obC50YXJnZXQsdGhpcy5ob3RNZW51LnJvb3RFbGVtZW50KXx8KHRoaXMuaXNBbGxTdWJNZW51c0Nsb3NlZCgpfHx0aGlzLmlzU3ViTWVudSgpKSYmIUxtKGwudGFyZ2V0LCIuaHRNZW51IikpJiZ0aGlzLmNsb3NlKCEwKX1vbkRvY3Vt''@;'; put 'put ''ZW50Q29udGV4dE1lbnUobCl7dGhpcy5pc09wZW5lZCgpJiZwbyhsLnRhcmdldCwiaHRDb3JlIikmJkxtKGwudGFyZ2V0LHRoaXMuaG90TWVudS5yb290RWxlbWVudCkmJmwucHJldmVudERlZmF1bHQoKX19ZnVuY3Rpb24gSEooYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIGMwdChjKXt2YXIg''@;'; put 'put ''bD1mdW5jdGlvbiB1MHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBu''@;'; put 'put ''ZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmlu''@;'; put 'put ''ZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIGtGKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0''@;'; put 'put ''aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1UbChxXyx5MSk7Y29uc3QgQVQ9ImNvbnRleHRNZW51IixBZ2U9QVQ7U2EuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9u''@;'; put 'put ''cyIpLFNhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVDb250ZXh0TWVudVNob3ciKSxTYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJDb250ZXh0TWVudVNob3ciKSxTYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJDb250ZXh0TWVudUhpZGUiKSxTYS5nZXRT''@;'; put 'put ''aW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJDb250ZXh0TWVudUV4ZWN1dGUiKTt2YXIga1Q9bmV3IFdlYWtTZXQ7Y2xhc3MgREYgZXh0ZW5kcyBGc3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gczB0KGMsbCl7KGZ1bmN0aW9uIGwwdChjLGwpe2lmKGwuaGFz''@;'; put 'put ''KGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuYWRkKGMpfSh0aGlzLGtUKSxISih0aGlzLCJjb21tYW5kRXhlY3V0b3IiLG5ldyBnZ2UodGhpcy5ob3QpKSxISih0''@;'; put 'put ''aGlzLCJpdGVtc0ZhY3RvcnkiLG51bGwpLEhKKHRoaXMsIm1lbnUiLG51bGwpfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBBVH1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiA3MH1zdGF0aWMgZ2V0IFBMVUdJTl9ERVBTKCl7cmV0dXJuWyJwbHVnaW46QXV0b0Nv''@;'; put 'put ''bHVtblNpemUiXX1zdGF0aWMgZ2V0IERFRkFVTFRfSVRFTVMoKXtyZXR1cm5bQ0YsU0Ysc3Msd1QsQ1Qsc3Msd0YsTVQsc3MsTUYsX0Ysc3MsU1Qsc3MsSzJdfWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtBVF19ZW5hYmxlUGx1Z2luKCl7dmFyIGw9dGhpcztp''@;'; put 'put ''Zih0aGlzLmVuYWJsZWQpcmV0dXJuO2NvbnN0IGE9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtBVF07ImZ1bmN0aW9uIj09dHlwZW9mIGEuY2FsbGJhY2smJnRoaXMuY29tbWFuZEV4ZWN1dG9yLnNldENvbW1vbkNhbGxiYWNrKGEuY2FsbGJhY2spLHRoaXMubWVudT1uZXcgcV8odGhpcy5ob3Qs''@;'; put 'put ''e2NsYXNzTmFtZToiaHRDb250ZXh0TWVudSIsa2VlcEluVmlld3BvcnQ6ITAsY29udGFpbmVyOmEudWlDb250YWluZXJ8fHRoaXMuaG90LnJvb3REb2N1bWVudC5ib2R5fSksdGhpcy5tZW51LmFkZExvY2FsSG9vaygiYmVmb3JlT3BlbiIsKCk9PmtGKGtULHRoaXMsZjB0KS5jYWxsKHRoaXMp''@;'; put 'put ''KSx0aGlzLm1lbnUuYWRkTG9jYWxIb29rKCJhZnRlck9wZW4iLCgpPT5rRihrVCx0aGlzLHAwdCkuY2FsbCh0aGlzKSksdGhpcy5tZW51LmFkZExvY2FsSG9vaygiYWZ0ZXJDbG9zZSIsKCk9PmtGKGtULHRoaXMsZzB0KS5jYWxsKHRoaXMpKSx0aGlzLm1lbnUuYWRkTG9jYWxIb29rKCJleGVj''@;'; put 'put ''dXRlQ29tbWFuZCIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gbC5leGVjdXRlQ29tbWFuZC5jYWxsKGwsLi4uaCl9KSx0aGlzLmFkZEhvb2soImFmdGVyT25DZWxsQ29udGV4''@;'; put 'put ''dE1lbnUiLGQ9PmtGKGtULHRoaXMsaDB0KS5jYWxsKHRoaXMsZCkpLHRoaXMucmVnaXN0ZXJTaG9ydGN1dHMoKSxzdXBlci5lbmFibGVQbHVnaW4oKX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdpbigpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWRp''@;'; put 'put ''c2FibGVQbHVnaW4oKXt0aGlzLmNsb3NlKCksdGhpcy5tZW51JiYodGhpcy5tZW51LmRlc3Ryb3koKSx0aGlzLm1lbnU9bnVsbCksdGhpcy51bnJlZ2lzdGVyU2hvcnRjdXRzKCksc3VwZXIuZGlzYWJsZVBsdWdpbigpfXJlZ2lzdGVyU2hvcnRjdXRzKCl7dGhpcy5ob3QuZ2V0U2hvcnRjdXRN''@;'; put 'put ''YW5hZ2VyKCkuZ2V0Q29udGV4dCgiZ3JpZCIpLmFkZFNob3J0Y3V0KHtrZXlzOltbIkNvbnRyb2wvTWV0YSIsIlNoaWZ0IiwiQmFja3NsYXNoIl0sWyJTaGlmdCIsIkYxMCJdXSxjYWxsYmFjazooKT0+e2NvbnN0e2hpZ2hsaWdodDpsfT10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgp''@;'; put 'put ''O3RoaXMuaG90LnNjcm9sbFRvRm9jdXNlZENlbGwoKTtjb25zdCBhPXRoaXMuaG90LmdldENlbGwobC5yb3csbC5jb2wsITApLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGQ9ZkYodGhpcy5tZW51LmNvbnRhaW5lcix0aGlzLmhvdC5yb290RG9jdW1lbnQpO3RoaXMub3Blbih7bGVmdDphLmxl''@;'; put 'put ''ZnQrZC5sZWZ0LHRvcDphLnRvcCtkLnRvcC0xK2EuaGVpZ2h0fSx7bGVmdDphLndpZHRoLGFib3ZlOi1hLmhlaWdodH0pLHRoaXMubWVudS5nZXROYXZpZ2F0b3IoKS50b0ZpcnN0SXRlbSgpfSxydW5Pbmx5SWY6KCk9Pnt2YXIgbDtjb25zdCBhPW51bGw9PT0obD10aGlzLmhvdC5nZXRTZWxl''@;'; put 'put ''Y3RlZFJhbmdlTGFzdCgpKXx8dm9pZCAwPT09bD92b2lkIDA6bC5oaWdobGlnaHQ7cmV0dXJuIGEmJnRoaXMuaG90LnNlbGVjdGlvbi5pc0NlbGxWaXNpYmxlKGEpJiYhdGhpcy5tZW51LmlzT3BlbmVkKCl9LGdyb3VwOkFnZX0pfXVucmVnaXN0ZXJTaG9ydGN1dHMoKXt0aGlzLmhvdC5nZXRT''@;'; put 'put ''aG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJncmlkIikucmVtb3ZlU2hvcnRjdXRzQnlHcm91cChBZ2UpfW9wZW4obCl7dmFyIGE7bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnthYm92ZTowLGJlbG93OjAsbGVmdDowLHJp''@;'; put 'put ''Z2h0OjB9O2lmKG51bGwhPT0oYT10aGlzLm1lbnUpJiZ2b2lkIDAhPT1hJiZhLmlzT3BlbmVkKCkpcmV0dXJuO3RoaXMucHJlcGFyZU1lbnVJdGVtcygpLHRoaXMubWVudS5vcGVuKCk7Y29uc3QgaD10aGlzLm1lbnUudGFibGVCb3JkZXJXaWR0aD4wO1hvKGQsKGYsdik9Pntjb25zdCBNPVsi''@;'; put 'put ''YmVsb3ciLCJyaWdodCJdLmluY2x1ZGVzKHYpP2YrMTpmLTE7dGhpcy5tZW51LnNldE9mZnNldCh2LGg/ZjpNKX0pLHRoaXMubWVudS5zZXRQb3NpdGlvbihsKX1jbG9zZSgpe3ZhciBsO251bGw9PT0obD10aGlzLm1lbnUpfHx2b2lkIDA9PT1sfHxsLmNsb3NlKCksdGhpcy5pdGVtc0ZhY3Rv''@;'; put 'put ''cnk9bnVsbH1leGVjdXRlQ29tbWFuZChsKXtudWxsPT09dGhpcy5pdGVtc0ZhY3RvcnkmJnRoaXMucHJlcGFyZU1lbnVJdGVtcygpO2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGE+MT9hLTE6MCksaD0xO2g8YTtoKyspZFtoLTFdPWFyZ3VtZW50c1toXTt0aGlzLmNv''@;'; put 'put ''bW1hbmRFeGVjdXRvci5leGVjdXRlKGwsLi4uZCl9cHJlcGFyZU1lbnVJdGVtcygpe3RoaXMuaXRlbXNGYWN0b3J5PW5ldyB5Z2UodGhpcy5ob3QsREYuREVGQVVMVF9JVEVNUyk7Y29uc3QgbD10aGlzLmhvdC5nZXRTZXR0aW5ncygpW0FUXSxhPXtpdGVtczp0aGlzLml0ZW1zRmFjdG9yeS5n''@;'; put 'put ''ZXRJdGVtcyhsKX07dGhpcy5ob3QucnVuSG9va3MoImFmdGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9ucyIsYSksdGhpcy5pdGVtc0ZhY3Rvcnkuc2V0UHJlZGVmaW5lZEl0ZW1zKGEuaXRlbXMpO2NvbnN0IGQ9dGhpcy5pdGVtc0ZhY3RvcnkuZ2V0SXRlbXMobCk7dGhpcy5ob3QucnVuSG9v''@;'; put 'put ''a3MoImJlZm9yZUNvbnRleHRNZW51U2V0SXRlbXMiLGQpLHRoaXMubWVudS5zZXRNZW51SXRlbXMoZCksWW4oZCxoPT50aGlzLmNvbW1hbmRFeGVjdXRvci5yZWdpc3RlckNvbW1hbmQoaC5rZXksaCkpfWRlc3Ryb3koKXt0aGlzLmNsb3NlKCksdGhpcy5tZW51JiZ0aGlzLm1lbnUuZGVzdHJv''@;'; put 'put ''eSgpLHN1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gaDB0KGMpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKSxhPWwucm93SGVhZGVycyxkPWwuY29sSGVhZGVycyxmPWMudGFyZ2V0O2lmKHRoaXMuY2xvc2UoKSxwbyhmLCJoYW5kc29udGFibGVJbnB1dCIpfHwoYy5wcmV2ZW50RGVm''@;'; put 'put ''YXVsdCgpLGMuc3RvcFByb3BhZ2F0aW9uKCksIShhfHxkfHxmdW5jdGlvbiBoKE0pe3JldHVybiJURCI9PT1NLm5vZGVOYW1lfHwiVEQiPT09TS5wYXJlbnROb2RlLm5vZGVOYW1lfShmKXx8cG8oZiwiY3VycmVudCIpJiZwbyhmLCJ3dEJvcmRlciIpKSkpcmV0dXJuO2NvbnN0IHY9ZkYodGhp''@;'; put 'put ''cy5tZW51LmNvbnRhaW5lcix0aGlzLmhvdC5yb290RG9jdW1lbnQpO3RoaXMub3Blbih7dG9wOmMuY2xpZW50WSt2LnRvcCxsZWZ0OmMuY2xpZW50WCt2LmxlZnR9KX1mdW5jdGlvbiBmMHQoKXt0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQ29udGV4dE1lbnVTaG93Iix0aGlzKX1mdW5jdGlv''@;'; put 'put ''biBwMHQoKXt0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJDb250ZXh0TWVudVNob3ciLHRoaXMpfWZ1bmN0aW9uIGcwdCgpe3RoaXMuaG90Lmxpc3RlbigpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckNvbnRleHRNZW51SGlkZSIsdGhpcyl9REYuU0VQQVJBVE9SPXtuYW1lOnNzfTtjbGFzcyB3''@;'; put 'put ''MHR7Y29uc3RydWN0b3IoKXt0aGlzLmRhdGE9e319c2V0RGF0YShsLGEpe3RoaXMuZGF0YVtsXT1hfWdldERhdGEobCl7cmV0dXJuIHRoaXMuZGF0YVtsXXx8dm9pZCAwfX1jbGFzcyBDMHR7Y29uc3RydWN0b3IoKXt0aGlzLmNsaXBib2FyZERhdGE9bmV3IHcwdH1wcmV2ZW50RGVmYXVsdCgp''@;'; put 'put ''e31jb21wb3NlZFBhdGgoKXtyZXR1cm5bXX19ZnVuY3Rpb24gWF8oYyxsLGEpe2tnZShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24ga2dlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2lj''@;'; put 'put ''ZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBKMShjLGwpe3JldHVybiBjLmdldChRXyhjLGwpKX1mdW5jdGlvbiBKXyhjLGwsYSl7cmV0dXJuIGMuc2V0KFFfKGMsbCksYSksYX1mdW5jdGlvbiBRXyhjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJu''@;'; put 'put ''IGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIHQ2PW5ldyBXZWFrTWFwLE5KPW5ldyBXZWFrTWFwLERUPW5ldyBXZWFrTWFwLFZKPW5ldyBXZWFrTWFwLEJKPW5ldyBX''@;'; put 'put ''ZWFrTWFwLElUPW5ldyBXZWFrTWFwLFJUPW5ldyBXZWFrU2V0O2NsYXNzIE0wdHtjb25zdHJ1Y3RvcihsKXtsZXR7Y291bnRSb3dzOmEsY291bnRDb2x1bW5zOmQscm93c0xpbWl0OmgsY29sdW1uc0xpbWl0OmYsY291bnRDb2x1bW5IZWFkZXJzOnZ9PWw7KGZ1bmN0aW9uIFMwdChjLGwpe2tn''@;'; put 'put ''ZShjLGwpLGwuYWRkKGMpfSkodGhpcyxSVCksWF8odGhpcyx0Nix2b2lkIDApLFhfKHRoaXMsTkosdm9pZCAwKSxYXyh0aGlzLERULHZvaWQgMCksWF8odGhpcyxWSix2b2lkIDApLFhfKHRoaXMsQkosdm9pZCAwKSxYXyh0aGlzLElULHZvaWQgMCksSl8oTkosdGhpcyxhKSxKXyhEVCx0aGlz''@;'; put 'put ''LGQpLEpfKFZKLHRoaXMsaCksSl8oQkosdGhpcyxmKSxKXyhJVCx0aGlzLHYpfXNldFNlbGVjdGVkUmFuZ2UobCl7Sl8odDYsdGhpcyxsKX1nZXRDZWxsc1JhbmdlKCl7aWYoMD09PUoxKE5KLHRoaXMpLmNhbGwodGhpcyl8fDA9PT1KMShEVCx0aGlzKS5jYWxsKHRoaXMpKXJldHVybiBudWxs''@;'; put 'put ''O2NvbnN0e3JvdzpsLGNvbDphfT1KMSh0Nix0aGlzKS5nZXRUb3BTdGFydENvcm5lcigpLHtyb3c6ZCxjb2w6aH09SjEodDYsdGhpcykuZ2V0Qm90dG9tRW5kQ29ybmVyKCksZj1RXyhSVCx0aGlzLHgwdCkuY2FsbCh0aGlzLGwsZCksdj1RXyhSVCx0aGlzLGpKKS5jYWxsKHRoaXMsYSxoKTty''@;'; put 'put ''ZXR1cm57aXNSYW5nZVRyaW1tZWQ6ZCE9PWZ8fGghPT12LHN0YXJ0Um93Omwsc3RhcnRDb2w6YSxlbmRSb3c6ZixlbmRDb2w6dn19Z2V0TW9zdEJvdHRvbUNvbHVtbkhlYWRlcnNSYW5nZSgpe2lmKDA9PT1KMShEVCx0aGlzKS5jYWxsKHRoaXMpfHwwPT09SjEoSVQsdGhpcykuY2FsbCh0aGlz''@;'; put 'put ''KSlyZXR1cm4gbnVsbDtjb25zdHtjb2w6bH09SjEodDYsdGhpcykuZ2V0VG9wU3RhcnRDb3JuZXIoKSx7Y29sOmF9PUoxKHQ2LHRoaXMpLmdldEJvdHRvbUVuZENvcm5lcigpLGQ9UV8oUlQsdGhpcyxqSikuY2FsbCh0aGlzLGwsYSk7cmV0dXJue2lzUmFuZ2VUcmltbWVkOmEhPT1kLHN0YXJ0''@;'; put 'put ''Um93Oi0xLHN0YXJ0Q29sOmwsZW5kUm93Oi0xLGVuZENvbDpkfX1nZXRBbGxDb2x1bW5IZWFkZXJzUmFuZ2UoKXtpZigwPT09SjEoRFQsdGhpcykuY2FsbCh0aGlzKXx8MD09PUoxKElULHRoaXMpLmNhbGwodGhpcykpcmV0dXJuIG51bGw7Y29uc3R7Y29sOmx9PUoxKHQ2LHRoaXMpLmdldFRv''@;'; put 'put ''cFN0YXJ0Q29ybmVyKCkse2NvbDphfT1KMSh0Nix0aGlzKS5nZXRCb3R0b21FbmRDb3JuZXIoKSxkPVFfKFJULHRoaXMsakopLmNhbGwodGhpcyxsLGEpO3JldHVybntpc1JhbmdlVHJpbW1lZDphIT09ZCxzdGFydFJvdzotSjEoSVQsdGhpcykuY2FsbCh0aGlzKSxzdGFydENvbDpsLGVuZFJv''@;'; put 'put ''dzotMSxlbmRDb2w6ZH19fWZ1bmN0aW9uIGpKKGMsbCl7cmV0dXJuIE1hdGgubWluKGwsTWF0aC5tYXgoYytKMShCSix0aGlzKS5jYWxsKHRoaXMpLTEsYykpfWZ1bmN0aW9uIHgwdChjLGwpe3JldHVybiBNYXRoLm1pbihsLE1hdGgubWF4KGMrSjEoVkosdGhpcykuY2FsbCh0aGlzKS0xLGMp''@;'; put 'put ''KX1mdW5jdGlvbiBEZ2UoYyl7Y29uc3QgbD1bXSxhPVtdO3JldHVybiBZbihjLGQ9PntHYShNYXRoLm1pbihkLnN0YXJ0Um93LGQuZW5kUm93KSxNYXRoLm1heChkLnN0YXJ0Um93LGQuZW5kUm93KSxEPT57LTE9PT1sLmluZGV4T2YoRCkmJmwucHVzaChEKX0pLEdhKE1hdGgubWluKGQuc3Rh''@;'; put 'put ''cnRDb2wsZC5lbmRDb2wpLE1hdGgubWF4KGQuc3RhcnRDb2wsZC5lbmRDb2wpLEQ9PnstMT09PWEuaW5kZXhPZihEKSYmYS5wdXNoKEQpfSl9KSx7cm93czpsLGNvbHVtbnM6YX19ZnVuY3Rpb24gbjYoYyxsLGEpe0lnZShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gSWdlKGMsbCl7aWYobC5o''@;'; put 'put ''YXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBMVChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gVDB0KGMpe3ZhciBsPWZ1bmN0aW9uIEEwdChjLGwpe2lmKCJv''@;'; put 'put ''YmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRp''@;'; put 'put ''dmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVu''@;'; put 'put ''dW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24gWWQoYyxsKXtyZXR1cm4gYy5nZXQoR2QoYyxsKSl9ZnVuY3Rpb24gcDMoYyxsLGEpe3JldHVybiBjLnNldChHZChjLGwpLGEpLGF9ZnVuY3Rpb24gR2QoYyxsLGEpe2lmKCJmdW5jdGlv''@;'; put 'put ''biI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfVNhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlckNvcHlM''@;'; put 'put ''aW1pdCIpLFNhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJtb2RpZnlDb3B5YWJsZVJhbmdlIiksU2EuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImJlZm9yZUN1dCIpLFNhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlckN1dCIpLFNhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJi''@;'; put 'put ''ZWZvcmVQYXN0ZSIpLFNhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlclBhc3RlIiksU2EuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImJlZm9yZUNvcHkiKSxTYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJDb3B5Iik7Y29uc3Qgeko9ImNvcHlQYXN0ZSIsRDB0PVsiZnJh''@;'; put 'put ''Z21lbnRTZWxlY3Rpb24iXSxSZ2U9Wyc8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkhhbmRzb250YWJsZSIvPicsJzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+dGR7d2hpdGUtc3BhY2U6bm9ybWFsfWJye21zby1kYXRhLXBsYWNlbWVudDpzYW1lLWNlbGx9PC9zdHlsZT4nXS5qb2lu''@;'; put 'put ''KCIiKTt2YXIgVUo9bmV3IFdlYWtNYXAsWko9bmV3IFdlYWtNYXAsV0o9bmV3IFdlYWtNYXAsZXc9bmV3IFdlYWtNYXAsSUY9bmV3IFdlYWtNYXAsUkY9bmV3IFdlYWtNYXAsdHc9bmV3IFdlYWtNYXAsTEY9bmV3IFdlYWtNYXAsRmg9bmV3IFdlYWtTZXQ7Y2xhc3MgSTB0IGV4dGVuZHMgRnN7''@;'; put 'put ''Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIEUwdChjLGwpe0lnZShjLGwpLGwuYWRkKGMpfSh0aGlzLEZoKSxMVCh0aGlzLCJjb2x1bW5zTGltaXQiLDEvMCksTFQodGhpcywicm93c0xpbWl0IiwxLzApLExUKHRoaXMsInBhc3RlTW9kZSIsIm92ZXJ3cml0ZSIp''@;'; put 'put ''LExUKHRoaXMsInVpQ29udGFpbmVyIix0aGlzLmhvdC5yb290RG9jdW1lbnQuYm9keSksbjYodGhpcyxVSiwhMSksbjYodGhpcyxaSiwhMSksbjYodGhpcyxXSiwhMSksbjYodGhpcyxldywiY2VsbHMtb25seSIpLG42KHRoaXMsSUYsITEpLG42KHRoaXMsUkYsITEpLG42KHRoaXMsdHcsbmV3''@;'; put 'put ''IE0wdCh7Y291bnRSb3dzOigpPT50aGlzLmhvdC5jb3VudFJvd3MoKSxjb3VudENvbHVtbnM6KCk9PnRoaXMuaG90LmNvdW50Q29scygpLHJvd3NMaW1pdDooKT0+dGhpcy5yb3dzTGltaXQsY29sdW1uc0xpbWl0OigpPT50aGlzLmNvbHVtbnNMaW1pdCxjb3VudENvbHVtbkhlYWRlcnM6KCk9''@;'; put 'put ''PnRoaXMuaG90LnZpZXcuZ2V0Q29sdW1uSGVhZGVyc0NvdW50KCl9KSksbjYodGhpcyxMRiwhMSksTFQodGhpcywiY29weWFibGVSYW5nZXMiLFtdKX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gekp9c3RhdGljIGdldCBTRVRUSU5HX0tFWVMoKXtyZXR1cm5bekosLi4uRDB0XX1z''@;'; put 'put ''dGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiA4MH1zdGF0aWMgZ2V0IERFRkFVTFRfU0VUVElOR1MoKXtyZXR1cm57cGFzdGVNb2RlOiJvdmVyd3JpdGUiLHJvd3NMaW1pdDoxLzAsY29sdW1uc0xpbWl0OjEvMCxjb3B5Q29sdW1uSGVhZGVyczohMSxjb3B5Q29sdW1uR3JvdXBI''@;'; put 'put ''ZWFkZXJzOiExLGNvcHlDb2x1bW5IZWFkZXJzT25seTohMX19aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW3pKXX1lbmFibGVQbHVnaW4oKXt2YXIgbCxhLGQ9dGhpczt0aGlzLmVuYWJsZWR8fCh0aGlzLnBhc3RlTW9kZT1udWxsIT09KGw9dGhpcy5nZXRTZXR0''@;'; put 'put ''aW5nKCJwYXN0ZU1vZGUiKSkmJnZvaWQgMCE9PWw/bDp0aGlzLnBhc3RlTW9kZSx0aGlzLnJvd3NMaW1pdD1pc05hTih0aGlzLmdldFNldHRpbmcoInJvd3NMaW1pdCIpKT90aGlzLnJvd3NMaW1pdDp0aGlzLmdldFNldHRpbmcoInJvd3NMaW1pdCIpLHRoaXMuY29sdW1uc0xpbWl0PWlzTmFO''@;'; put 'put ''KHRoaXMuZ2V0U2V0dGluZygiY29sdW1uc0xpbWl0IikpP3RoaXMuY29sdW1uc0xpbWl0OnRoaXMuZ2V0U2V0dGluZygiY29sdW1uc0xpbWl0IikscDMoVUosdGhpcyx0aGlzLmdldFNldHRpbmcoImNvcHlDb2x1bW5IZWFkZXJzIikpLHAzKFpKLHRoaXMsdGhpcy5nZXRTZXR0aW5nKCJjb3B5''@;'; put 'put ''Q29sdW1uR3JvdXBIZWFkZXJzIikpLHAzKFdKLHRoaXMsdGhpcy5nZXRTZXR0aW5nKCJjb3B5Q29sdW1uSGVhZGVyc09ubHkiKSksdGhpcy51aUNvbnRhaW5lcj1udWxsIT09KGE9dGhpcy5nZXRTZXR0aW5nKCJ1aUNvbnRhaW5lciIpKSYmdm9pZCAwIT09YT9hOnRoaXMudWlDb250YWluZXIs''@;'; put 'put ''dGhpcy5hZGRIb29rKCJhZnRlckNvbnRleHRNZW51RGVmYXVsdE9wdGlvbnMiLGg9PkdkKEZoLHRoaXMsTzB0KS5jYWxsKHRoaXMsaCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJTZWxlY3Rpb24iLGZ1bmN0aW9uKCl7Zm9yKHZhciBoPWFyZ3VtZW50cy5sZW5ndGgsZj1uZXcgQXJyYXkoaCksdj0w''@;'; put 'put ''O3Y8aDt2KyspZlt2XT1hcmd1bWVudHNbdl07cmV0dXJuIEdkKEZoLGQsUDB0KS5jYWxsKGQsLi4uZil9KSx0aGlzLmFkZEhvb2soImFmdGVyU2VsZWN0aW9uRW5kIiwoKT0+R2QoRmgsdGhpcyxGMHQpLmNhbGwodGhpcykpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodGhp''@;'; put 'put ''cy5ob3Qucm9vdERvY3VtZW50LCJjb3B5IixmdW5jdGlvbigpe3JldHVybiBkLm9uQ29weSguLi5hcmd1bWVudHMpfSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLmhvdC5yb290RG9jdW1lbnQsImN1dCIsZnVuY3Rpb24oKXtyZXR1cm4gZC5vbkN1dCguLi5hcmd1''@;'; put 'put ''bWVudHMpfSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLmhvdC5yb290RG9jdW1lbnQsInBhc3RlIixmdW5jdGlvbigpe3JldHVybiBkLm9uUGFzdGUoLi4uYXJndW1lbnRzKX0pLEFFKCkmJih0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHRoaXMu''@;'; put 'put ''aG90LnJvb3REb2N1bWVudC5ib2R5LCJtb3VzZWVudGVyIixmdW5jdGlvbigpe2Zvcih2YXIgaD1hcmd1bWVudHMubGVuZ3RoLGY9bmV3IEFycmF5KGgpLHY9MDt2PGg7disrKWZbdl09YXJndW1lbnRzW3ZdO3JldHVybiBHZChGaCxkLEgwdCkuY2FsbChkLC4uLmYpfSksdGhpcy5ldmVudE1h''@;'; put 'put ''bmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLmhvdC5yb290RG9jdW1lbnQuYm9keSwibW91c2VsZWF2ZSIsZnVuY3Rpb24oKXtmb3IodmFyIGg9YXJndW1lbnRzLmxlbmd0aCxmPW5ldyBBcnJheShoKSx2PTA7djxoO3YrKylmW3ZdPWFyZ3VtZW50c1t2XTtyZXR1cm4gR2QoRmgsZCxOMHQp''@;'; put 'put ''LmNhbGwoZCwuLi5mKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJTZWxlY3Rpb24iLCgpPT5HZChGaCx0aGlzLFYwdCkuY2FsbCh0aGlzKSkpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdpbigpLHN1cGVyLnVw''@;'; put 'put ''ZGF0ZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXtzdXBlci5kaXNhYmxlUGx1Z2luKCl9Y29weSgpe3AzKGV3LHRoaXMsYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOiJjZWxscy1vbmx5IikscDMoSUYsdGhpcywhMCksR2QoRmgsdGhpcyxM''@;'; put 'put ''Z2UpLmNhbGwodGhpcywiY29weSIpfWNvcHlDZWxsc09ubHkoKXt0aGlzLmNvcHkoImNlbGxzLW9ubHkiKX1jb3B5Q29sdW1uSGVhZGVyc09ubHkoKXt0aGlzLmNvcHkoImNvbHVtbi1oZWFkZXJzLW9ubHkiKX1jb3B5V2l0aEFsbENvbHVtbkhlYWRlcnMoKXt0aGlzLmNvcHkoIndpdGgtY29s''@;'; put 'put ''dW1uLWdyb3VwLWhlYWRlcnMiKX1jb3B5V2l0aENvbHVtbkhlYWRlcnMoKXt0aGlzLmNvcHkoIndpdGgtY29sdW1uLWhlYWRlcnMiKX1jdXQoKXtwMyhSRix0aGlzLCEwKSxHZChGaCx0aGlzLExnZSkuY2FsbCh0aGlzLCJjdXQiKX1nZXRSYW5nZWRDb3B5YWJsZURhdGEobCl7cmV0dXJuIHJU''@;'; put 'put ''KHRoaXMuZ2V0UmFuZ2VkRGF0YShsKSl9Z2V0UmFuZ2VkRGF0YShsKXtjb25zdCBhPVtdLHtyb3dzOmQsY29sdW1uczpofT1EZ2UobCk7cmV0dXJuIFluKGQsZj0+e2NvbnN0IHY9W107WW4oaCxNPT57di5wdXNoKGY8MD90aGlzLmhvdC5nZXRDb2xIZWFkZXIoTSxmKTp0aGlzLmhvdC5nZXRD''@;'; put 'put ''b3B5YWJsZURhdGEoZixNKSl9KSxhLnB1c2godil9KSxhfXBhc3RlKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOiIiLGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmw7''@;'; put 'put ''aWYoIWwmJiFhKXJldHVybjtjb25zdCBkPW5ldyBDMHQ7bCYmZC5jbGlwYm9hcmREYXRhLnNldERhdGEoInRleHQvcGxhaW4iLGwpLGEmJmQuY2xpcGJvYXJkRGF0YS5zZXREYXRhKCJ0ZXh0L2h0bWwiLGEpLHRoaXMub25QYXN0ZShkKX1zZXRDb3B5YWJsZVRleHQoKXtjb25zdCBsPXRoaXMu''@;'; put 'put ''aG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7aWYoIWwpcmV0dXJuO2lmKGwuaXNTaW5nbGVIZWFkZXIoKSlyZXR1cm4gdm9pZCh0aGlzLmNvcHlhYmxlUmFuZ2VzPVtdKTtZZCh0dyx0aGlzKS5zZXRTZWxlY3RlZFJhbmdlKGwpO2NvbnN0IGE9bmV3IE1hcChbWyJoZWFkZXJzIixudWxsXSxb''@;'; put 'put ''ImNlbGxzIixudWxsXV0pOyJjb2x1bW4taGVhZGVycy1vbmx5Ij09PVlkKGV3LHRoaXMpP2Euc2V0KCJoZWFkZXJzIixZZCh0dyx0aGlzKS5nZXRNb3N0Qm90dG9tQ29sdW1uSGVhZGVyc1JhbmdlKCkpOigid2l0aC1jb2x1bW4taGVhZGVycyI9PT1ZZChldyx0aGlzKT9hLnNldCgiaGVhZGVy''@;'; put 'put ''cyIsWWQodHcsdGhpcykuZ2V0TW9zdEJvdHRvbUNvbHVtbkhlYWRlcnNSYW5nZSgpKToid2l0aC1jb2x1bW4tZ3JvdXAtaGVhZGVycyI9PT1ZZChldyx0aGlzKSYmYS5zZXQoImhlYWRlcnMiLFlkKHR3LHRoaXMpLmdldEFsbENvbHVtbkhlYWRlcnNSYW5nZSgpKSxhLnNldCgiY2VsbHMiLFlk''@;'; put 'put ''KHR3LHRoaXMpLmdldENlbGxzUmFuZ2UoKSkpLHRoaXMuY29weWFibGVSYW5nZXM9QXJyYXkuZnJvbShhLnZhbHVlcygpKS5maWx0ZXIoaD0+bnVsbCE9PWgpLm1hcChoPT57bGV0e3N0YXJ0Um93OmYsc3RhcnRDb2w6dixlbmRSb3c6TSxlbmRDb2w6RH09aDtyZXR1cm57c3RhcnRSb3c6Zixz''@;'; put 'put ''dGFydENvbDp2LGVuZFJvdzpNLGVuZENvbDpEfX0pLHRoaXMuY29weWFibGVSYW5nZXM9dGhpcy5ob3QucnVuSG9va3MoIm1vZGlmeUNvcHlhYmxlUmFuZ2UiLHRoaXMuY29weWFibGVSYW5nZXMpO2NvbnN0IGQ9YS5nZXQoImNlbGxzIik7aWYobnVsbCE9PWQmJmQuaXNSYW5nZVRyaW1tZWQp''@;'; put 'put ''e2NvbnN0e3N0YXJ0Um93Omgsc3RhcnRDb2w6ZixlbmRSb3c6dixlbmRDb2w6TX09ZDt0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJDb3B5TGltaXQiLHYtaCsxLE0tZisxLHRoaXMucm93c0xpbWl0LHRoaXMuY29sdW1uc0xpbWl0KX19aXNFZGl0b3JPcGVuZWQoKXt2YXIgbDtyZXR1cm4gbnVs''@;'; put 'put ''bD09PShsPXRoaXMuaG90LmdldEFjdGl2ZUVkaXRvcigpKXx8dm9pZCAwPT09bD92b2lkIDA6bC5pc09wZW5lZCgpfXBvcHVsYXRlVmFsdWVzKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp0aGlzLmhvdC5nZXRTZWxlY3Rl''@;'; put 'put ''ZFJhbmdlTGFzdCgpO2lmKCFsLmxlbmd0aClyZXR1cm47Y29uc3QgZD1sLmxlbmd0aCxoPWxbMF0ubGVuZ3RoLGY9W10se3Jvdzp2LGNvbDpNfT1hLmdldFRvcFN0YXJ0Q29ybmVyKCkse3JvdzpELGNvbDpafT1hLmdldEJvdHRvbUVuZENvcm5lcigpO2xldCByZT12LGNlPU0sYmU9dixFZT1N''@;'; put 'put ''O2Zvcig7Zi5sZW5ndGg8ZHx8cmU8PUQ7KXtjb25zdHtza2lwUm93T25QYXN0ZTpCZSx2aXN1YWxSb3c6cWV9PXRoaXMuaG90LmdldENlbGxNZXRhKHJlLE0pO2lmKHJlPXFlKzEsITA9PT1CZSljb250aW51ZTtiZT1xZSxjZT1NO2NvbnN0IHJ0PVtdLHB0PWYubGVuZ3RoJWQ7Zm9yKDtydC5s''@;'; put 'put ''ZW5ndGg8aHx8Y2U8PVo7KXtjb25zdHtza2lwQ29sdW1uT25QYXN0ZTpkdCx2aXN1YWxDb2w6SnR9PXRoaXMuaG90LmdldENlbGxNZXRhKHYsY2UpOyhjZT1KdCsxLCEwIT09ZHQpJiYoRWU9SnQscnQucHVzaChsW3B0XVtydC5sZW5ndGglaF0pKX1mLnB1c2gocnQpfXJldHVybiBwMyhMRix0''@;'; put 'put ''aGlzLCEwKSx0aGlzLmhvdC5wb3B1bGF0ZUZyb21BcnJheSh2LE0sZix2b2lkIDAsdm9pZCAwLCJDb3B5UGFzdGUucGFzdGUiLHRoaXMucGFzdGVNb2RlKSxbdixNLGJlLEVlXX1vbkNvcHkobCl7Y29uc3QgYT1sLmNvbXBvc2VkUGF0aCgpWzBdLGQ9dGhpcy5ob3QuZ2V0Rm9jdXNNYW5hZ2Vy''@;'; put 'put ''KCkuZ2V0UmVmb2N1c0VsZW1lbnQoKSxoPWE/Lmhhc0F0dHJpYnV0ZSgiZGF0YS1ob3QtaW5wdXQiKTtpZighdGhpcy5ob3QuaXNMaXN0ZW5pbmcoKSYmIVlkKElGLHRoaXMpfHx0aGlzLmlzRWRpdG9yT3BlbmVkKCl8fEVwKGEpJiYoaCYmYSE9PWR8fCFoJiZhIT09dGhpcy5ob3Qucm9vdERv''@;'; put 'put ''Y3VtZW50LmJvZHkmJiF2RShhLHRoaXMuaG90LnJvb3RFbGVtZW50KSkpcmV0dXJuO2wucHJldmVudERlZmF1bHQoKSx0aGlzLnNldENvcHlhYmxlVGV4dCgpLHAzKElGLHRoaXMsITEpO2NvbnN0IGY9dGhpcy5nZXRSYW5nZWREYXRhKHRoaXMuY29weWFibGVSYW5nZXMpLHY9R2QoRmgsdGhp''@;'; put 'put ''cyxSMHQpLmNhbGwodGhpcyx0aGlzLmNvcHlhYmxlUmFuZ2VzKTtpZih0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQ29weSIsZix0aGlzLmNvcHlhYmxlUmFuZ2VzLHYpKXtjb25zdCBEPXJUKGYpO2lmKGwmJmwuY2xpcGJvYXJkRGF0YSl7Y29uc3QgWj1xJChmKTtsLmNsaXBib2FyZERhdGEu''@;'; put 'put ''c2V0RGF0YSgidGV4dC9wbGFpbiIsRCksbC5jbGlwYm9hcmREYXRhLnNldERhdGEoInRleHQvaHRtbCIsW1JnZSxaXS5qb2luKCIiKSl9ZWxzZSB0eXBlb2YgQ2xpcGJvYXJkRXZlbnQ+InUiJiZ0aGlzLmhvdC5yb290V2luZG93LmNsaXBib2FyZERhdGEuc2V0RGF0YSgiVGV4dCIsRCk7dGhp''@;'; put 'put ''cy5ob3QucnVuSG9va3MoImFmdGVyQ29weSIsZix0aGlzLmNvcHlhYmxlUmFuZ2VzLHYpfXAzKGV3LHRoaXMsImNlbGxzLW9ubHkiKX1vbkN1dChsKXtjb25zdCBhPWwuY29tcG9zZWRQYXRoKClbMF0sZD10aGlzLmhvdC5nZXRGb2N1c01hbmFnZXIoKS5nZXRSZWZvY3VzRWxlbWVudCgpLGg9''@;'; put 'put ''YT8uaGFzQXR0cmlidXRlKCJkYXRhLWhvdC1pbnB1dCIpO2lmKCF0aGlzLmhvdC5pc0xpc3RlbmluZygpJiYhWWQoUkYsdGhpcyl8fHRoaXMuaXNFZGl0b3JPcGVuZWQoKXx8RXAoYSkmJihoJiZhIT09ZHx8IWgmJmEhPT10aGlzLmhvdC5yb290RG9jdW1lbnQuYm9keSYmIXZFKGEsdGhpcy5o''@;'; put 'put ''b3Qucm9vdEVsZW1lbnQpKSlyZXR1cm47bC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuc2V0Q29weWFibGVUZXh0KCkscDMoUkYsdGhpcywhMSk7Y29uc3QgZj10aGlzLmdldFJhbmdlZERhdGEodGhpcy5jb3B5YWJsZVJhbmdlcyk7aWYodGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUN1dCIsZix0''@;'; put 'put ''aGlzLmNvcHlhYmxlUmFuZ2VzKSl7Y29uc3QgTT1yVChmKTtpZihsJiZsLmNsaXBib2FyZERhdGEpe2NvbnN0IEQ9cSQoZik7bC5jbGlwYm9hcmREYXRhLnNldERhdGEoInRleHQvcGxhaW4iLE0pLGwuY2xpcGJvYXJkRGF0YS5zZXREYXRhKCJ0ZXh0L2h0bWwiLFtSZ2UsRF0uam9pbigiIikp''@;'; put 'put ''fWVsc2UgdHlwZW9mIENsaXBib2FyZEV2ZW50PiJ1IiYmdGhpcy5ob3Qucm9vdFdpbmRvdy5jbGlwYm9hcmREYXRhLnNldERhdGEoIlRleHQiLE0pO3RoaXMuaG90LmVtcHR5U2VsZWN0ZWRDZWxscygiQ29weVBhc3RlLmN1dCIpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckN1dCIsZix0aGlz''@;'; put 'put ''LmNvcHlhYmxlUmFuZ2VzKX19b25QYXN0ZShsKXtjb25zdCBhPWwuY29tcG9zZWRQYXRoKClbMF0sZD10aGlzLmhvdC5nZXRGb2N1c01hbmFnZXIoKS5nZXRSZWZvY3VzRWxlbWVudCgpLGg9YT8uaGFzQXR0cmlidXRlKCJkYXRhLWhvdC1pbnB1dCIpO2lmKCF0aGlzLmhvdC5pc0xpc3Rlbmlu''@;'; put 'put ''ZygpfHx0aGlzLmlzRWRpdG9yT3BlbmVkKCl8fCF0aGlzLmhvdC5nZXRTZWxlY3RlZCgpfHxFcChhKSYmKGgmJmEhPT1kfHwhaCYmYSE9PXRoaXMuaG90LnJvb3REb2N1bWVudC5ib2R5JiYhdkUoYSx0aGlzLmhvdC5yb290RWxlbWVudCkpKXJldHVybjtsZXQgZjtpZihsLnByZXZlbnREZWZh''@;'; put 'put ''dWx0KCksbCYmdHlwZW9mIGwuY2xpcGJvYXJkRGF0YTwidSIpe2NvbnN0IHJlPUlPKGwuY2xpcGJvYXJkRGF0YS5nZXREYXRhKCJ0ZXh0L2h0bWwiKSx7QUREX1RBR1M6WyJtZXRhIl0sQUREX0FUVFI6WyJjb250ZW50Il0sRk9SQ0VfQk9EWTohMH0pO2Y9cmUmJi8oPHRhYmxlKXwoPFRBQkxF''@;'; put 'put ''KS9nLnRlc3QocmUpP2JmZShyZSx0aGlzLmhvdC5yb290RG9jdW1lbnQpLmRhdGE6bC5jbGlwYm9hcmREYXRhLmdldERhdGEoInRleHQvcGxhaW4iKX1lbHNlIHR5cGVvZiBDbGlwYm9hcmRFdmVudD4idSImJnR5cGVvZiB0aGlzLmhvdC5yb290V2luZG93LmNsaXBib2FyZERhdGE8InUiJiYo''@;'; put 'put ''Zj10aGlzLmhvdC5yb290V2luZG93LmNsaXBib2FyZERhdGEuZ2V0RGF0YSgiVGV4dCIpKTtpZigic3RyaW5nIj09dHlwZW9mIGYmJihmPWZ1bmN0aW9uIERydChjKXtjb25zdCBsPVtbIiJdXTtpZigwPT09Yy5sZW5ndGgpcmV0dXJuIGw7bGV0IGgsYT0wLGQ9MDtmb3IoO2MubGVuZ3RoPjAm''@;'; put 'put ''JmghPT1jLmxlbmd0aDspaWYoaD1jLmxlbmd0aCxjLm1hdGNoKHBwZSkpYz1jLnJlcGxhY2UocHBlLCIiKSxhKz0xLGxbZF1bYV09IiI7ZWxzZSBpZihjLm1hdGNoKGZwZSkpYz1jLnJlcGxhY2UoZnBlLCIiKSxhPTAsZCs9MSxsW2RdPVsiIl07ZWxzZXtsZXQgZj0iIjtpZihjLnN0YXJ0c1dp''@;'; put 'put ''dGgoJyInKSl7bGV0IHY9MCxNPSEwO2Zvcig7TTspe2NvbnN0IEQ9Yy5zbGljZSgwLDEpOyciJz09PUQmJih2Kz0xKSxmKz1ELCgwPT09KGM9Yy5zbGljZSgxKSkubGVuZ3RofHxjLm1hdGNoKC9eW1x0XHJcbl0vKSYmdiUyPT0wKSYmKE09ITEpfWY9Zi5yZXBsYWNlKC9eIi8sIiIpLnJlcGxh''@;'; put 'put ''Y2UoLyIkLywiIikucmVwbGFjZSgvWyJdKi9nLEQ9Pm5ldyBBcnJheShNYXRoLmZsb29yKEQubGVuZ3RoLzIpKS5maWxsKCciJykuam9pbigiIikpfWVsc2V7Y29uc3Qgdj1jLm1hdGNoKGtydCk7Zj12P3ZbMF06IiIsYz1jLnNsaWNlKGYubGVuZ3RoKX1sW2RdW2FdPWZ9cmV0dXJuIGx9KGYp''@;'; put 'put ''KSx2b2lkIDA9PT1mfHxmJiYwPT09Zi5sZW5ndGh8fCExPT09dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVBhc3RlIixmLHRoaXMuY29weWFibGVSYW5nZXMpKXJldHVybjtjb25zdFt2LE0sRCxaXT10aGlzLnBvcHVsYXRlVmFsdWVzKGYpO3RoaXMuaG90LnNlbGVjdENlbGwodixNLE1hdGgu''@;'; put 'put ''bWluKHRoaXMuaG90LmNvdW50Um93cygpLTEsRCksTWF0aC5taW4odGhpcy5ob3QuY291bnRDb2xzKCktMSxaKSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyUGFzdGUiLGYsdGhpcy5jb3B5YWJsZVJhbmdlcyl9ZGVzdHJveSgpe3N1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gTGdlKGMpe2lm''@;'; put 'put ''KEFFKCkpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtpZihsKXtjb25zdHtyb3c6YSxjb2w6ZH09bC5oaWdobGlnaHQsaD10aGlzLmhvdC5nZXRDZWxsKGEsZCwhMCk7aCYmWjJlKGgsKCk9Pnt0aGlzLmhvdC5yb290RG9jdW1lbnQuZXhlY0NvbW1hbmQoYyl9KX19''@;'; put 'put ''ZWxzZSB0aGlzLmhvdC5yb290RG9jdW1lbnQuZXhlY0NvbW1hbmQoYyl9ZnVuY3Rpb24gUjB0KGMpe2NvbnN0e3Jvd3M6bH09RGdlKGMpO2xldCBhPTA7Zm9yKGxldCBkPTA7ZDxsLmxlbmd0aCYmIShsW2RdPj0wKTtkKyspYSs9MTtyZXR1cm57Y29sdW1uSGVhZGVyc0NvdW50OmF9fWZ1bmN0''@;'; put 'put ''aW9uIEwwdCgpe2lmKHRoaXMuaG90LmlzTGlzdGVuaW5nKCkpe2NvbnN0IGM9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtpZihjKXtjb25zdHtyb3c6bCxjb2w6YX09Yy5oaWdobGlnaHQsZD10aGlzLmhvdC5nZXRDZWxsKGwsYSwhMCk7ZCYmayQoZCl9fX1mdW5jdGlvbiBPZ2Uo''@;'; put 'put ''KXtpZih0aGlzLmhvdC5pc0xpc3RlbmluZygpKXtjb25zdCBjPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7aWYoYyl7Y29uc3R7cm93OmwsY29sOmF9PWMuaGlnaGxpZ2h0LGQ9dGhpcy5ob3QuZ2V0Q2VsbChsLGEsITApO251bGwhPWQmJmQuaGFzQXR0cmlidXRlKCJjb250ZW50''@;'; put 'put ''ZWRpdGFibGUiKSYmRCQoZCl9fX1mdW5jdGlvbiBPMHQoYyl7Yy5pdGVtcy5wdXNoKHtuYW1lOiItLS0tLS0tLS0ifSxmdW5jdGlvbiBtMHQoYyl7cmV0dXJue2tleToiY29weSIsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UocnEpfSxjYWxsYmFjaygpe2MuY29weUNl''@;'; put 'put ''bGxzT25seSgpfSxkaXNhYmxlZCgpe2lmKDA9PT10aGlzLmNvdW50Um93cygpfHwwPT09dGhpcy5jb3VudENvbHMoKSlyZXR1cm4hMDtjb25zdCBsPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtpZighbHx8bC5pc1NpbmdsZUhlYWRlcigpKXJldHVybiEwO2NvbnN0IGE9dGhpcy5nZXRT''@;'; put 'put ''ZWxlY3RlZCgpO3JldHVybiFhfHxhLmxlbmd0aD4xfSxoaWRkZW46ITF9fSh0aGlzKSksWWQoVUosdGhpcykmJmMuaXRlbXMucHVzaChmdW5jdGlvbiB5MHQoYyl7cmV0dXJue2tleToiY29weV93aXRoX2NvbHVtbl9oZWFkZXJzIixuYW1lKCl7Y29uc3QgbD10aGlzLmdldFNlbGVjdGVkUmFu''@;'; put 'put ''Z2VMYXN0KCksYT1sP2tzKGwuZ2V0V2lkdGgoKS0xLDAsMSk6MDtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKGlxLGEpfSxjYWxsYmFjaygpe2MuY29weVdpdGhDb2x1bW5IZWFkZXJzKCl9LGRpc2FibGVkKCl7aWYoIXRoaXMuaGFzQ29sSGVhZGVycygpKXJldHVybiEwO2NvbnN0''@;'; put 'put ''IGw9dGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO2lmKCFsfHxsLmlzU2luZ2xlSGVhZGVyKCkpcmV0dXJuITA7Y29uc3QgYT10aGlzLmdldFNlbGVjdGVkKCk7cmV0dXJuIWF8fGEubGVuZ3RoPjF9LGhpZGRlbjohMX19KHRoaXMpKSxZZChaSix0aGlzKSYmYy5pdGVtcy5wdXNoKGZ1bmN0''@;'; put 'put ''aW9uIGIwdChjKXtyZXR1cm57a2V5OiJjb3B5X3dpdGhfY29sdW1uX2dyb3VwX2hlYWRlcnMiLG5hbWUoKXtjb25zdCBsPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxhPWw/a3MobC5nZXRXaWR0aCgpLTEsMCwxKTowO3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoYXEsYSl9''@;'; put 'put ''LGNhbGxiYWNrKCl7Yy5jb3B5V2l0aEFsbENvbHVtbkhlYWRlcnMoKX0sZGlzYWJsZWQoKXtpZighdGhpcy5oYXNDb2xIZWFkZXJzKCl8fCF0aGlzLmdldFNldHRpbmdzKCkubmVzdGVkSGVhZGVycylyZXR1cm4hMDtjb25zdCBsPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtpZighbHx8''@;'; put 'put ''bC5pc1NpbmdsZUhlYWRlcigpKXJldHVybiEwO2NvbnN0IGE9dGhpcy5nZXRTZWxlY3RlZCgpO3JldHVybiFhfHxhLmxlbmd0aD4xfSxoaWRkZW46ITF9fSh0aGlzKSksWWQoV0osdGhpcykmJmMuaXRlbXMucHVzaChmdW5jdGlvbiB2MHQoYyl7cmV0dXJue2tleToiY29weV9jb2x1bW5faGVh''@;'; put 'put ''ZGVyc19vbmx5IixuYW1lKCl7Y29uc3QgbD10aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksYT1sP2tzKGwuZ2V0V2lkdGgoKS0xLDAsMSk6MDtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKG9xLGEpfSxjYWxsYmFjaygpe2MuY29weUNvbHVtbkhlYWRlcnNPbmx5KCl9LGRpc2Fi''@;'; put 'put ''bGVkKCl7aWYoIXRoaXMuaGFzQ29sSGVhZGVycygpKXJldHVybiEwO2NvbnN0IGw9dGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO2lmKCFsfHxsLmlzU2luZ2xlSGVhZGVyKCkpcmV0dXJuITA7Y29uc3QgYT10aGlzLmdldFNlbGVjdGVkKCk7cmV0dXJuIWF8fGEubGVuZ3RoPjF9LGhpZGRl''@;'; put 'put ''bjohMX19KHRoaXMpKSxjLml0ZW1zLnB1c2goZnVuY3Rpb24gXzB0KGMpe3JldHVybntrZXk6ImN1dCIsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2Uoc3EpfSxjYWxsYmFjaygpe2MuY3V0KCl9LGRpc2FibGVkKCl7aWYoMD09PXRoaXMuY291bnRSb3dzKCl8fDA9PT10''@;'; put 'put ''aGlzLmNvdW50Q29scygpKXJldHVybiEwO2NvbnN0IGw9dGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO2lmKCFsfHxsLmlzU2luZ2xlSGVhZGVyKCkpcmV0dXJuITA7Y29uc3QgYT10aGlzLmdldFNlbGVjdGVkKCk7cmV0dXJuIWF8fGEubGVuZ3RoPjF9LGhpZGRlbjohMX19KHRoaXMpKX1m''@;'; put 'put ''dW5jdGlvbiBQMHQoYyxsLGEsZCxoKXtZZChMRix0aGlzKSYmKGgudmFsdWU9ITApLHAzKExGLHRoaXMsITEpfWZ1bmN0aW9uIEYwdCgpe3RoaXMuaXNFZGl0b3JPcGVuZWQoKXx8dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5mcmFnbWVudFNlbGVjdGlvbnx8dGhpcy5zZXRDb3B5YWJsZVRleHQo''@;'; put 'put ''KX1mdW5jdGlvbiBIMHQoKXtHZChGaCx0aGlzLE9nZSkuY2FsbCh0aGlzKX1mdW5jdGlvbiBOMHQoKXtHZChGaCx0aGlzLEwwdCkuY2FsbCh0aGlzKX1mdW5jdGlvbiBWMHQoKXtHZChGaCx0aGlzLE9nZSkuY2FsbCh0aGlzKX1mdW5jdGlvbiBQZ2UoYyxsKXtyZXR1cm5gYm9yZGVyX3JvdyR7''@;'; put 'put ''Y31jb2wke2x9YH1mdW5jdGlvbiBZSihjKXt2YXIgbCxhO3JldHVybihQYShjLnN0YXJ0KXx8UGEoYy5sZWZ0KSkmJihjLnN0YXJ0PW51bGwhPT0obD1jLnN0YXJ0KSYmdm9pZCAwIT09bD9sOmMubGVmdCksKFBhKGMuZW5kKXx8UGEoYy5yaWdodCkpJiYoYy5lbmQ9bnVsbCE9PShhPWMuZW5k''@;'; put 'put ''KSYmdm9pZCAwIT09YT9hOmMucmlnaHQpLGRlbGV0ZSBjLmxlZnQsZGVsZXRlIGMucmlnaHQsY31mdW5jdGlvbiBQVChjKXtyZXR1cm4gUGEoYy5zdGFydCkmJihjLmxlZnQ9Yy5zdGFydCksUGEoYy5lbmQpJiYoYy5yaWdodD1jLmVuZCksY31mdW5jdGlvbiBHSihjLGwpe3JldHVybntpZDpQ''@;'; put 'put ''Z2UoYyxsKSxib3JkZXI6e3dpZHRoOjEsY29sb3I6IiMwMDAiLGNvcm5lclZpc2libGU6ITF9LHJvdzpjLGNvbDpsLHRvcDp7aGlkZTohMH0sYm90dG9tOntoaWRlOiEwfSxzdGFydDp7aGlkZTohMH0sZW5kOntoaWRlOiEwfX19ZnVuY3Rpb24gRmcoYyxsKXtsZXQgYT0hMTtyZXR1cm4gWW4o''@;'; put 'put ''Yy5nZXRTZWxlY3RlZFJhbmdlKCksZD0+e2QuZm9yQWxsKChoLGYpPT57aWYoaDwwfHxmPDApcmV0dXJuO2NvbnN0IHY9Yy5nZXRDZWxsTWV0YShoLGYpLmJvcmRlcnM7aWYodil7aWYoIWwpcmV0dXJuIGE9ITAsITE7aWYoIVR1KHZbbF0sImhpZGUiKXx8ITE9PT12W2xdLmhpZGUpcmV0dXJu''@;'; put 'put ''IGE9ITAsITF9fSl9KSxhfWZ1bmN0aW9uIE9GKGMpe3JldHVybmA8c3BhbiBjbGFzcz0ic2VsZWN0ZWQiPlx1MjcxMzwvc3Bhbj4ke2N9YH1jb25zdCBaMHQ9bmV3IE1hcChbWyJsZWZ0Iiwic3RhcnQiXSxbInJpZ2h0IiwiZW5kIl1dKTtmdW5jdGlvbiBZMHQoYyl7cmV0dXJue2tleToiYm9y''@;'; put 'put ''ZGVyczp0b3AiLG5hbWUoKXtsZXQgbD10aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoeHEpO3JldHVybiBGZyh0aGlzLCJ0b3AiKSYmKGw9T0YobCkpLGx9LGNhbGxiYWNrKGwsYSl7Y29uc3QgZD1GZyh0aGlzLCJ0b3AiKTtjLnByZXBhcmVCb3JkZXIoYSwidG9wIixkKX19fWZ1bmN0aW9uIEcw''@;'; put 'put ''dChjKXtjb25zdCBsPWMuaG90LmlzUnRsKCk/InN0YXJ0IjoiZW5kIjtyZXR1cm57a2V5OiJib3JkZXJzOnJpZ2h0IixuYW1lKCl7bGV0IGE9dGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKEVxKTtyZXR1cm4gRmcodGhpcyxsKSYmKGE9T0YoYSkpLGF9LGNhbGxiYWNrKGEsZCl7Y29uc3QgaD1G''@;'; put 'put ''Zyh0aGlzLGwpO2MucHJlcGFyZUJvcmRlcihkLGwsaCl9fX1mdW5jdGlvbiAkMHQoYyl7cmV0dXJue2tleToiYm9yZGVyczpib3R0b20iLG5hbWUoKXtsZXQgbD10aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoVHEpO3JldHVybiBGZyh0aGlzLCJib3R0b20iKSYmKGw9T0YobCkpLGx9LGNhbGxi''@;'; put 'put ''YWNrKGwsYSl7Y29uc3QgZD1GZyh0aGlzLCJib3R0b20iKTtjLnByZXBhcmVCb3JkZXIoYSwiYm90dG9tIixkKX19fWZ1bmN0aW9uIEswdChjKXtjb25zdCBsPWMuaG90LmlzUnRsKCk/ImVuZCI6InN0YXJ0IjtyZXR1cm57a2V5OiJib3JkZXJzOmxlZnQiLG5hbWUoKXtsZXQgYT10aGlzLmdl''@;'; put 'put ''dFRyYW5zbGF0ZWRQaHJhc2UoQXEpO3JldHVybiBGZyh0aGlzLGwpJiYoYT1PRihhKSksYX0sY2FsbGJhY2soYSxkKXtjb25zdCBoPUZnKHRoaXMsbCk7Yy5wcmVwYXJlQm9yZGVyKGQsbCxoKX19fWZ1bmN0aW9uIHEwdChjKXtyZXR1cm57a2V5OiJib3JkZXJzOm5vX2JvcmRlcnMiLG5hbWUo''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKGtxKX0sY2FsbGJhY2sobCxhKXtjLnByZXBhcmVCb3JkZXIoYSwibm9Cb3JkZXJzIil9LGRpc2FibGVkKCl7cmV0dXJuIUZnKHRoaXMpfX19ZnVuY3Rpb24gRmdlKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpj''@;'; put 'put ''LmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1jb25zdCBQRj0iY3VzdG9tQm9yZGVycyI7dmFyICRKPW5ldyBXZWFrU2V0O2NsYXNzIHIxdCBleHRl''@;'; put 'put ''bmRzIEZze2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlvbiBYMHQoYyxsKXsoZnVuY3Rpb24gSjB0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBh''@;'; put 'put ''biBvYmplY3QiKX0pKGMsbCksbC5hZGQoYyl9KHRoaXMsJEopLGZ1bmN0aW9uIFEwdChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gZTF0KGMpe3ZhciBsPWZ1bmN0aW9uIHQxdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRp''@;'; put 'put ''dmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09''@;'; put 'put ''bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9KHRo''@;'; put 'put ''aXMsInNhdmVkQm9yZGVycyIsW10pfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBQRn1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiA5MH1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbUEZdfWVuYWJsZVBsdWdpbigpe3RoaXMuZW5h''@;'; put 'put ''YmxlZHx8KHRoaXMuYWRkSG9vaygiYWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zIixsPT5GZ2UoJEosdGhpcyxpMXQpLmNhbGwodGhpcyxsKSksdGhpcy5hZGRIb29rKCJpbml0IiwoKT0+RmdlKCRKLHRoaXMsYTF0KS5jYWxsKHRoaXMpKSxzdXBlci5lbmFibGVQbHVnaW4oKSl9ZGlz''@;'; put 'put ''YWJsZVBsdWdpbigpe3RoaXMuaGlkZUJvcmRlcnMoKSxzdXBlci5kaXNhYmxlUGx1Z2luKCl9dXBkYXRlUGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSx0aGlzLmNoYW5nZUJvcmRlclNldHRpbmdzKCksc3VwZXIudXBkYXRlUGx1Z2luKCl9c2V0Qm9y''@;'; put 'put ''ZGVycyhsLGEpe2xldCBkPVsidG9wIiwiYm90dG9tIiwic3RhcnQiLCJlbmQiXSxoPW51bGw7YSYmKHRoaXMuY2hlY2tTZXR0aW5nc0NvaGVzaW9uKFthXSksZD1PYmplY3Qua2V5cyhhKSxoPVlKKGEpKTtjb25zdCB2PWVUKHhfKGwpLHtjcmVhdGVDZWxsQ29vcmRzOnRoaXMuaG90Ll9jcmVh''@;'; put 'put ''dGVDZWxsQ29vcmRzLmJpbmQodGhpcy5ob3QpLGNyZWF0ZUNlbGxSYW5nZTp0aGlzLmhvdC5fY3JlYXRlQ2VsbFJhbmdlLmJpbmQodGhpcy5ob3QpfSk7WW4obCxNPT57dihNKS5mb3JBbGwoKEQsWik9PntZbihkLHJlPT57dGhpcy5wcmVwYXJlQm9yZGVyRnJvbUN1c3RvbUFkZGVkKEQsWixo''@;'; put 'put ''LGZ1bmN0aW9uIFcwdChjKXt2YXIgbDtyZXR1cm4gbnVsbCE9PShsPVowdC5nZXQoYykpJiZ2b2lkIDAhPT1sP2w6Y30ocmUpKX0pfSl9KSx0aGlzLmhvdC52aWV3LnJlbmRlcigpfWdldEJvcmRlcnMobCl7aWYoIUFycmF5LmlzQXJyYXkobCkpcmV0dXJuIHRoaXMuc2F2ZWRCb3JkZXJzO2Nv''@;'; put 'put ''bnN0IGQ9ZVQoeF8obCkse2NyZWF0ZUNlbGxDb29yZHM6dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMuYmluZCh0aGlzLmhvdCksY3JlYXRlQ2VsbFJhbmdlOnRoaXMuaG90Ll9jcmVhdGVDZWxsUmFuZ2UuYmluZCh0aGlzLmhvdCl9KSxoPVtdO3JldHVybiBZbihsLGY9PntkKGYpLmZvckFs''@;'; put 'put ''bCgodixNKT0+e1luKHRoaXMuc2F2ZWRCb3JkZXJzLEQ9PntELnJvdz09PXYmJkQuY29sPT09TSYmaC5wdXNoKFBUKEQpKX0pfSl9KSxofWNsZWFyQm9yZGVycyhsKXtsP3RoaXMuc2V0Qm9yZGVycyhsKTooWW4odGhpcy5zYXZlZEJvcmRlcnMsYT0+e3RoaXMuY2xlYXJCb3JkZXJzRnJvbVNl''@;'; put 'put ''bGVjdGlvblNldHRpbmdzKGEuaWQpLHRoaXMuY2xlYXJOdWxsQ2VsbFJhbmdlKCksdGhpcy5ob3QucmVtb3ZlQ2VsbE1ldGEoYS5yb3csYS5jb2wsImJvcmRlcnMiKX0pLHRoaXMuc2F2ZWRCb3JkZXJzLmxlbmd0aD0wKX1pbnNlcnRCb3JkZXJJbnRvU2V0dGluZ3MobCxhKXt0aGlzLmNoZWNr''@;'; put 'put ''U2F2ZWRCb3JkZXJzKGwpfHx0aGlzLnNhdmVkQm9yZGVycy5wdXNoKGwpO2NvbnN0IGg9dGhpcy5ob3QuX2NyZWF0ZUNlbGxSYW5nZSh0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhsLnJvdyxsLmNvbCkpO3RoaXMuY2hlY2tDdXN0b21TZWxlY3Rpb25zKGwsaCxhKXx8dGhpcy5ob3Quc2Vs''@;'; put 'put ''ZWN0aW9uLmhpZ2hsaWdodC5hZGRDdXN0b21TZWxlY3Rpb24oe2JvcmRlcjpsLHZpc3VhbENlbGxSYW5nZTpofSl9cHJlcGFyZUJvcmRlckZyb21DdXN0b21BZGRlZChsLGEsZCxoKXtjb25zdCBmPXRoaXMuaG90LmNvdW50Um93cygpLHY9dGhpcy5ob3QuY291bnRDb2xzKCk7aWYobD49Znx8''@;'; put 'put ''YT49dilyZXR1cm47bGV0IE09R0oobCxhKTtkJiYoTT1mdW5jdGlvbiBqMHQoYyxsKXtyZXR1cm4gVHUobCwiYm9yZGVyIikmJmwuYm9yZGVyJiYoYy5ib3JkZXI9bC5ib3JkZXIpLFR1KGwsInRvcCIpJiZQYShsLnRvcCkmJihsLnRvcD8ocW8obC50b3ApfHwobC50b3A9e3dpZHRoOjEsY29s''@;'; put 'put ''b3I6IiMwMDAifSksYy50b3A9bC50b3ApOihsLnRvcD17aGlkZTohMH0sYy50b3A9bC50b3ApKSxUdShsLCJib3R0b20iKSYmUGEobC5ib3R0b20pJiYobC5ib3R0b20/KHFvKGwuYm90dG9tKXx8KGwuYm90dG9tPXt3aWR0aDoxLGNvbG9yOiIjMDAwIn0pLGMuYm90dG9tPWwuYm90dG9tKToo''@;'; put 'put ''bC5ib3R0b209e2hpZGU6ITB9LGMuYm90dG9tPWwuYm90dG9tKSksVHUobCwic3RhcnQiKSYmUGEobC5zdGFydCkmJihsLnN0YXJ0PyhxbyhsLnN0YXJ0KXx8KGwuc3RhcnQ9e3dpZHRoOjEsY29sb3I6IiMwMDAifSksYy5zdGFydD1sLnN0YXJ0KToobC5zdGFydD17aGlkZTohMH0sYy5zdGFy''@;'; put 'put ''dD1sLnN0YXJ0KSksVHUobCwiZW5kIikmJlBhKGwuZW5kKSYmKGwuZW5kPyhxbyhsLmVuZCl8fChsLmVuZD17d2lkdGg6MSxjb2xvcjoiIzAwMCJ9KSxjLmVuZD1sLmVuZCk6KGwuZW5kPXtoaWRlOiEwfSxjLmVuZD1sLmVuZCkpLGN9KE0sZCksWW4odGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hs''@;'; put 'put ''aWdodC5jdXN0b21TZWxlY3Rpb25zLEQ9PntpZihNLmlkPT09RC5zZXR0aW5ncy5pZClyZXR1cm4gT2JqZWN0LmFzc2lnbihELnNldHRpbmdzLGQpLE0uaWQ9RC5zZXR0aW5ncy5pZCxNLnRvcD1ELnNldHRpbmdzLnRvcCxNLmJvdHRvbT1ELnNldHRpbmdzLmJvdHRvbSxNLnN0YXJ0PUQuc2V0''@;'; put 'put ''dGluZ3Muc3RhcnQsTS5lbmQ9RC5zZXR0aW5ncy5lbmQsITF9KSksdGhpcy5ob3Quc2V0Q2VsbE1ldGEobCxhLCJib3JkZXJzIixQVChNKSksdGhpcy5pbnNlcnRCb3JkZXJJbnRvU2V0dGluZ3MoTSxoKX1wcmVwYXJlQm9yZGVyRnJvbUN1c3RvbUFkZGVkUmFuZ2UobCxhKXtjb25zdCBkPU1h''@;'; put 'put ''dGgubWluKGwudG8ucm93LHRoaXMuaG90LmNvdW50Um93cygpLTEpLGg9TWF0aC5taW4obC50by5jb2wsdGhpcy5ob3QuY291bnRDb2xzKCktMSk7R2EobC5mcm9tLnJvdyxkLGY9PntHYShsLmZyb20uY29sLGgsdj0+e2NvbnN0IE09R0ooZix2KTtsZXQgRD0wO2Y9PT1sLmZyb20ucm93JiZU''@;'; put 'put ''dShhLCJ0b3AiKSYmKEQrPTEsTS50b3A9YS50b3ApLGY9PT1sLnRvLnJvdyYmVHUoYSwiYm90dG9tIikmJihEKz0xLE0uYm90dG9tPWEuYm90dG9tKSx2PT09bC5mcm9tLmNvbCYmVHUoYSwic3RhcnQiKSYmKEQrPTEsTS5zdGFydD1hLnN0YXJ0KSx2PT09bC50by5jb2wmJlR1KGEsImVuZCIp''@;'; put 'put ''JiYoRCs9MSxNLmVuZD1hLmVuZCksRD4wJiYodGhpcy5ob3Quc2V0Q2VsbE1ldGEoZix2LCJib3JkZXJzIixQVChNKSksdGhpcy5pbnNlcnRCb3JkZXJJbnRvU2V0dGluZ3MoTSkpfSl9KX1yZW1vdmVBbGxCb3JkZXJzKGwsYSl7Y29uc3QgZD1QZ2UobCxhKTt0aGlzLnNwbGljZUJvcmRlcihk''@;'; put 'put ''KSx0aGlzLmNsZWFyQm9yZGVyc0Zyb21TZWxlY3Rpb25TZXR0aW5ncyhkKSx0aGlzLmNsZWFyTnVsbENlbGxSYW5nZSgpLHRoaXMuaG90LnJlbW92ZUNlbGxNZXRhKGwsYSwiYm9yZGVycyIpfXNldEJvcmRlcihsLGEsZCxoKXtsZXQgZj10aGlzLmhvdC5nZXRDZWxsTWV0YShsLGEpLmJvcmRl''@;'; put 'put ''cnM7Zj1mJiZ2b2lkIDAhPT1mLmJvcmRlcj9ZSihmKTpHSihsLGEpLGg/KGZbZF09e2hpZGU6ITB9LDQ9PT10aGlzLmNvdW50SGlkZShmKT90aGlzLnJlbW92ZUFsbEJvcmRlcnMobCxhKToodGhpcy5jaGVja0N1c3RvbVNlbGVjdGlvbnNGcm9tQ29udGV4dE1lbnUoZixkLGgpfHx0aGlzLmlu''@;'; put 'put ''c2VydEJvcmRlckludG9TZXR0aW5ncyhmKSx0aGlzLmhvdC5zZXRDZWxsTWV0YShsLGEsImJvcmRlcnMiLFBUKGYpKSkpOihmW2RdPXt3aWR0aDoxLGNvbG9yOiIjMDAwIn0sdGhpcy5jaGVja0N1c3RvbVNlbGVjdGlvbnNGcm9tQ29udGV4dE1lbnUoZixkLGgpfHx0aGlzLmluc2VydEJvcmRl''@;'; put 'put ''ckludG9TZXR0aW5ncyhmKSx0aGlzLmhvdC5zZXRDZWxsTWV0YShsLGEsImJvcmRlcnMiLFBUKGYpKSl9cHJlcGFyZUJvcmRlcihsLGEsZCl7WW4obCxoPT57bGV0e3N0YXJ0OmYsZW5kOnZ9PWg7aWYoZi5yb3c9PT12LnJvdyYmZi5jb2w9PT12LmNvbCkibm9Cb3JkZXJzIj09PWE/dGhpcy5y''@;'; put 'put ''ZW1vdmVBbGxCb3JkZXJzKGYucm93LGYuY29sKTp0aGlzLnNldEJvcmRlcihmLnJvdyxmLmNvbCxhLGQpO2Vsc2Ugc3dpdGNoKGEpe2Nhc2Uibm9Cb3JkZXJzIjpHYShmLmNvbCx2LmNvbCxNPT57R2EoZi5yb3csdi5yb3csRD0+e3RoaXMucmVtb3ZlQWxsQm9yZGVycyhELE0pfSl9KTticmVh''@;'; put 'put ''aztjYXNlInRvcCI6R2EoZi5jb2wsdi5jb2wsTT0+e3RoaXMuc2V0Qm9yZGVyKGYucm93LE0sYSxkKX0pO2JyZWFrO2Nhc2UiYm90dG9tIjpHYShmLmNvbCx2LmNvbCxNPT57dGhpcy5zZXRCb3JkZXIodi5yb3csTSxhLGQpfSk7YnJlYWs7Y2FzZSJzdGFydCI6R2EoZi5yb3csdi5yb3csTT0+''@;'; put 'put ''e3RoaXMuc2V0Qm9yZGVyKE0sZi5jb2wsYSxkKX0pO2JyZWFrO2Nhc2UiZW5kIjpHYShmLnJvdyx2LnJvdyxNPT57dGhpcy5zZXRCb3JkZXIoTSx2LmNvbCxhLGQpfSl9fSl9Y3JlYXRlQ3VzdG9tQm9yZGVycyhsKXtZbihsLGE9Pntjb25zdCBkPVlKKGEpO2EucmFuZ2U/dGhpcy5wcmVwYXJl''@;'; put 'put ''Qm9yZGVyRnJvbUN1c3RvbUFkZGVkUmFuZ2UoYS5yYW5nZSxkKTp0aGlzLnByZXBhcmVCb3JkZXJGcm9tQ3VzdG9tQWRkZWQoYS5yb3csYS5jb2wsZCl9KX1jb3VudEhpZGUobCl7Y29uc3R7dG9wOmEsYm90dG9tOmQsc3RhcnQ6aCxlbmQ6Zn09bDtyZXR1cm4gcXUoW2EsZCxoLGZdLChNLEQp''@;'; put 'put ''PT57bGV0IFo9TTtyZXR1cm4gRCYmRC5oaWRlJiYoWis9MSksWn0sMCl9Y2xlYXJCb3JkZXJzRnJvbVNlbGVjdGlvblNldHRpbmdzKGwpe2NvbnN0IGE9eXModGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5jdXN0b21TZWxlY3Rpb25zLGQ9PmQuc2V0dGluZ3MuaWQpLmluZGV4T2YobCk7''@;'; put 'put ''YT4tMSYmdGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5jdXN0b21TZWxlY3Rpb25zW2FdLmNsZWFyKCl9Y2xlYXJOdWxsQ2VsbFJhbmdlKCl7WW4odGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5jdXN0b21TZWxlY3Rpb25zLChsLGEpPT57aWYobnVsbD09PWwuY2VsbFJhbmdlKXJl''@;'; put 'put ''dHVybiB0aGlzLmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LmN1c3RvbVNlbGVjdGlvbnNbYV0uZGVzdHJveSgpLHRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuY3VzdG9tU2VsZWN0aW9ucy5zcGxpY2UoYSwxKSwhMX0pfWhpZGVCb3JkZXJzKCl7WW4odGhpcy5zYXZlZEJvcmRlcnMsbD0+''@;'; put 'put ''e3RoaXMuY2xlYXJCb3JkZXJzRnJvbVNlbGVjdGlvblNldHRpbmdzKGwuaWQpLHRoaXMuY2xlYXJOdWxsQ2VsbFJhbmdlKCl9KX1zcGxpY2VCb3JkZXIobCl7Y29uc3QgYT15cyh0aGlzLnNhdmVkQm9yZGVycyxkPT5kLmlkKS5pbmRleE9mKGwpO2E+LTEmJnRoaXMuc2F2ZWRCb3JkZXJzLnNw''@;'; put 'put ''bGljZShhLDEpfWNoZWNrU2F2ZWRCb3JkZXJzKGwpe2xldCBhPSExO3JldHVybiA0PT09dGhpcy5jb3VudEhpZGUobCk/KHRoaXMuc3BsaWNlQm9yZGVyKGwuaWQpLGE9ITApOlluKHRoaXMuc2F2ZWRCb3JkZXJzLChoLGYpPT57aWYobC5pZD09PWguaWQpcmV0dXJuIHRoaXMuc2F2ZWRCb3Jk''@;'; put 'put ''ZXJzW2ZdPWwsYT0hMCwhMX0pLGF9Y2hlY2tDdXN0b21TZWxlY3Rpb25zRnJvbUNvbnRleHRNZW51KGwsYSxkKXtsZXQgaD0hMTtyZXR1cm4gWW4odGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5jdXN0b21TZWxlY3Rpb25zLGY9PntpZihsLmlkPT09Zi5zZXR0aW5ncy5pZClyZXR1cm4g''@;'; put 'put ''WW4odGhpcy5ob3Qudmlldy5fd3Quc2VsZWN0aW9uTWFuYWdlci5nZXRCb3JkZXJJbnN0YW5jZXMoZiksTT0+e00udG9nZ2xlSGlkZGVuQ2xhc3MoYSxkKX0pLGg9ITAsITF9KSxofWNoZWNrQ3VzdG9tU2VsZWN0aW9ucyhsLGEsZCl7Y29uc3QgaD10aGlzLmNvdW50SGlkZShsKTtsZXQgZj0h''@;'; put 'put ''MTtyZXR1cm4gND09PWg/KHRoaXMucmVtb3ZlQWxsQm9yZGVycyhsLnJvdyxsLmNvbCksZj0hMCk6WW4odGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5jdXN0b21TZWxlY3Rpb25zLHY9PntpZihsLmlkPT09di5zZXR0aW5ncy5pZClyZXR1cm4gdi52aXN1YWxDZWxsUmFuZ2U9YSx2LmNv''@;'; put 'put ''bW1pdCgpLGQmJlluKHRoaXMuaG90LnZpZXcuX3d0LnNlbGVjdGlvbk1hbmFnZXIuZ2V0Qm9yZGVySW5zdGFuY2VzKHYpLEQ9PntELmNoYW5nZUJvcmRlclN0eWxlKGQsbCl9KSxmPSEwLCExfSksZn1jaGFuZ2VCb3JkZXJTZXR0aW5ncygpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2V0dGluZ3Mo''@;'; put 'put ''KVtQRl07aWYoQXJyYXkuaXNBcnJheShsKSl7Y29uc3QgYT1nMShsKTt0aGlzLmNoZWNrU2V0dGluZ3NDb2hlc2lvbihhKSxhLmxlbmd0aHx8KHRoaXMuc2F2ZWRCb3JkZXJzPWEpLHRoaXMuY3JlYXRlQ3VzdG9tQm9yZGVycyhhKX1lbHNlIHZvaWQgMCE9PWwmJnRoaXMuY3JlYXRlQ3VzdG9t''@;'; put 'put ''Qm9yZGVycyh0aGlzLnNhdmVkQm9yZGVycyl9Y2hlY2tTZXR0aW5nc0NvaGVzaW9uKGwpe2NvbnN0IGE9ZnVuY3Rpb24gejB0KGMpe3JldHVybiBjLnNvbWUobD0+UGEobC5sZWZ0KXx8UGEobC5yaWdodCkpfShsKSxkPWZ1bmN0aW9uIFUwdChjKXtyZXR1cm4gYy5zb21lKGw9PlBhKGwuc3Rh''@;'; put 'put ''cnQpfHxQYShsLmVuZCkpfShsKTtpZihhJiZkKXRocm93IG5ldyBFcnJvcignVGhlICJsZWZ0Ii8icmlnaHQiIGFuZCAic3RhcnQiLyJlbmQiIG9wdGlvbnMgc2hvdWxkIG5vdCBiZSB1c2VkIHRvZ2V0aGVyLiBQbGVhc2UgdXNlIG9ubHkgdGhlIG9wdGlvbiAic3RhcnQiLyJlbmQiLicpO2lm''@;'; put 'put ''KHRoaXMuaG90LmlzUnRsKCkmJmEpdGhyb3cgbmV3IEVycm9yKCdUaGUgImxlZnQiLyJyaWdodCIgcHJvcGVydGllcyBhcmUgbm90IHN1cHBvcnRlZCBmb3IgUlRMLiBQbGVhc2UgdXNlIG9wdGlvbiAic3RhcnQiLyJlbmQiLicpfWRlc3Ryb3koKXtzdXBlci5kZXN0cm95KCl9fWZ1bmN0aW9u''@;'; put 'put ''IGkxdChjKXt0aGlzLmhvdC5nZXRTZXR0aW5ncygpW1BGXSYmYy5pdGVtcy5wdXNoKHtuYW1lOiItLS0tLS0tLS0ifSx7a2V5OiJib3JkZXJzIixuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShNcSl9LGRpc2FibGVkKCl7Y29uc3QgbD10aGlzLmdldFNlbGVjdGVkUmFu''@;'; put 'put ''Z2VMYXN0KCk7cmV0dXJuIShsJiYhbC5pc1NpbmdsZUhlYWRlcigpKXx8dGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCl9LHN1Ym1lbnU6e2l0ZW1zOltZMHQodGhpcyksRzB0KHRoaXMpLCQwdCh0aGlzKSxLMHQodGhpcykscTB0KHRoaXMpXX19KX1mdW5jdGlvbiBhMXQoKXt0''@;'; put 'put ''aGlzLmNoYW5nZUJvcmRlclNldHRpbmdzKCl9ZnVuY3Rpb24gS0ooYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIGwxdChjKXt2YXIgbD1mdW5jdGlvbiBjMXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lk''@;'; put 'put ''IDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51''@;'; put 'put ''bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIEhnZShj''@;'; put 'put ''LGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9Y29uc3QgTmdlPSJkcmFnVG9TY3Jv''@;'; put 'put ''bGwiO3ZhciBxSj1uZXcgV2Vha1NldDtjbGFzcyBkMXQgZXh0ZW5kcyBGc3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gbzF0KGMsbCl7KGZ1bmN0aW9uIHMxdChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXpl''@;'; put 'put ''IHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuYWRkKGMpfSh0aGlzLHFKKSxLSih0aGlzLCJib3VuZGFyaWVzIixudWxsKSxLSih0aGlzLCJjYWxsYmFjayIsbnVsbCksS0oodGhpcywibGlzdGVuaW5nIiwhMSl9c3RhdGljIGdldCBQTFVH''@;'; put 'put ''SU5fS0VZKCl7cmV0dXJuIE5nZX1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAxMDB9aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW05nZV19ZW5hYmxlUGx1Z2luKCl7dGhpcy5lbmFibGVkfHwodGhpcy5hZGRIb29rKCJhZnRlck9uQ2VsbE1v''@;'; put 'put ''dXNlRG93biIsbD0+SGdlKHFKLHRoaXMsVmdlKS5jYWxsKHRoaXMsbCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJPbkNlbGxDb3JuZXJNb3VzZURvd24iLGw9PkhnZShxSix0aGlzLFZnZSkuY2FsbCh0aGlzLGwpKSx0aGlzLnJlZ2lzdGVyRXZlbnRzKCksc3VwZXIuZW5hYmxlUGx1Z2luKCkpfXVw''@;'; put 'put ''ZGF0ZVBsdWdpbigpe3RoaXMuZGlzYWJsZVBsdWdpbigpLHRoaXMuZW5hYmxlUGx1Z2luKCksc3VwZXIudXBkYXRlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe3RoaXMudW5yZWdpc3RlckV2ZW50cygpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX1zZXRCb3VuZGFyaWVzKCl7dGhpcy5ib3VuZGFy''@;'; put 'put ''aWVzPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7bGVmdDowLHJpZ2h0OnRoaXMuaG90LnJvb3RXaW5kb3cuaW5uZXJXaWR0aCx0b3A6MCxib3R0b206dGhpcy5ob3Qucm9vdFdpbmRvdy5pbm5lckhlaWdodH19c2V0Q2FsbGJhY2sobCl7''@;'; put 'put ''dGhpcy5jYWxsYmFjaz1sfWNoZWNrKGwsYSl7bGV0IGQ9MCxoPTA7YTx0aGlzLmJvdW5kYXJpZXMudG9wP2g9YS10aGlzLmJvdW5kYXJpZXMudG9wOmE+dGhpcy5ib3VuZGFyaWVzLmJvdHRvbSYmKGg9YS10aGlzLmJvdW5kYXJpZXMuYm90dG9tKSxsPHRoaXMuYm91bmRhcmllcy5sZWZ0P2Q9''@;'; put 'put ''bC10aGlzLmJvdW5kYXJpZXMubGVmdDpsPnRoaXMuYm91bmRhcmllcy5yaWdodCYmKGQ9bC10aGlzLmJvdW5kYXJpZXMucmlnaHQpLHRoaXMuY2FsbGJhY2soZCxoKX1saXN0ZW4oKXt0aGlzLmxpc3RlbmluZz0hMH11bmxpc3Rlbigpe3RoaXMubGlzdGVuaW5nPSExfWlzTGlzdGVuaW5nKCl7''@;'; put 'put ''cmV0dXJuIHRoaXMubGlzdGVuaW5nfXJlZ2lzdGVyRXZlbnRzKCl7Y29uc3R7cm9vdFdpbmRvdzpsfT10aGlzLmhvdDtsZXQgYT1sO2Zvcig7YTspdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihhLmRvY3VtZW50LCJjb250ZXh0bWVudSIsKCk9PnRoaXMudW5saXN0ZW4oKSks''@;'; put 'put ''dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihhLmRvY3VtZW50LCJtb3VzZXVwIiwoKT0+dGhpcy51bmxpc3RlbigpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGEuZG9jdW1lbnQsIm1vdXNlbW92ZSIsZD0+dGhpcy5vbk1vdXNlTW92ZShkKSksYT1CNyhh''@;'; put 'put ''KX11bnJlZ2lzdGVyRXZlbnRzKCl7dGhpcy5ldmVudE1hbmFnZXIuY2xlYXIoKX1vbk1vdXNlTW92ZShsKXt0aGlzLmlzTGlzdGVuaW5nKCkmJnRoaXMuY2hlY2sobC5jbGllbnRYLGwuY2xpZW50WSl9ZGVzdHJveSgpe3N1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gVmdlKGMpe2lmKEhtKGMp''@;'; put 'put ''KXJldHVybjtjb25zdCBsPXRoaXMuaG90LnZpZXcuX3d0Lnd0T3ZlcmxheXMudG9wT3ZlcmxheS5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudDt0aGlzLnNldEJvdW5kYXJpZXMobCE9PXRoaXMuaG90LnJvb3RXaW5kb3c/bC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTp2b2lkIDApLHRoaXMu''@;'; put 'put ''c2V0Q2FsbGJhY2soKGEsZCk9Pnt2YXIgaCxmO2NvbnN0IHY9bnVsbCE9PShoPWwuc2Nyb2xsTGVmdCkmJnZvaWQgMCE9PWg/aDpsLnNjcm9sbFgsTT1udWxsIT09KGY9bC5zY3JvbGxUb3ApJiZ2b2lkIDAhPT1mP2Y6bC5zY3JvbGxZO2wuc2Nyb2xsKHYrNTAqTWF0aC5zaWduKGEpLE0rMjAq''@;'; put 'put ''TWF0aC5zaWduKGQpKX0pLHRoaXMubGlzdGVuKCl9ZnVuY3Rpb24gQmdlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBYSihjLGwsYSl7''@;'; put 'put ''cmV0dXJuKGw9ZnVuY3Rpb24gcDF0KGMpe3ZhciBsPWZ1bmN0aW9uIGcxdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVj''@;'; put 'put ''dCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBs''@;'; put 'put ''P2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24gamdlKGMsbCxhKXtyZXR1cm4gYy5zZXQocTIoYyxsKSxhKSxhfWZ1bmN0aW9uIHEyKGMs''@;'; put 'put ''bCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1TYS5nZXRTaW5nbGV0b24oKS5yZWdp''@;'; put 'put ''c3RlcigiYWZ0ZXJEcm9wZG93bk1lbnVEZWZhdWx0T3B0aW9ucyIpLFNhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVEcm9wZG93bk1lbnVTaG93IiksU2EuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyRHJvcGRvd25NZW51U2hvdyIpLFNhLmdldFNpbmdsZXRvbigpLnJl''@;'; put 'put ''Z2lzdGVyKCJhZnRlckRyb3Bkb3duTWVudUhpZGUiKSxTYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJEcm9wZG93bk1lbnVFeGVjdXRlIik7Y29uc3QgRkY9ImRyb3Bkb3duTWVudSIsRlQ9ImNoYW5nZVR5cGUiLEpKPUZGO3ZhciBIRj1uZXcgV2Vha01hcCxnMz1uZXcgV2Vha1Nl''@;'; put 'put ''dDtjbGFzcyBORiBleHRlbmRzIEZze3N0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBGRn1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAyMzB9c3RhdGljIGdldCBQTFVHSU5fREVQUygpe3JldHVyblsicGx1Z2luOkF1dG9Db2x1bW5TaXplIl19c3RhdGljIGdldCBE''@;'; put 'put ''RUZBVUxUX0lURU1TKCl7cmV0dXJuW3dULENULHNzLE1ULHNzLHlGLHNzLFNULHNzLEsyXX1jb25zdHJ1Y3RvcihsKXtzdXBlcihsKSxmdW5jdGlvbiBoMXQoYyxsKXtCZ2UoYyxsKSxsLmFkZChjKX0odGhpcyxnMyksWEoodGhpcywiY29tbWFuZEV4ZWN1dG9yIixuZXcgZ2dlKHRoaXMuaG90''@;'; put 'put ''KSksWEoodGhpcywiaXRlbXNGYWN0b3J5IixudWxsKSxYSih0aGlzLCJtZW51IixudWxsKSxmdW5jdGlvbiBmMXQoYyxsLGEpe0JnZShjLGwpLGwuc2V0KGMsYSl9KHRoaXMsSEYsITEpLHRoaXMuaG90LmFkZEhvb2soImFmdGVyR2V0Q29sSGVhZGVyIiwoYSxkKT0+cTIoZzMsdGhpcyx5MXQp''@;'; put 'put ''LmNhbGwodGhpcyxhLGQpKX1pc0VuYWJsZWQoKXtyZXR1cm4gdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtGRl19ZW5hYmxlUGx1Z2luKCl7dmFyIGw9dGhpcztpZih0aGlzLmVuYWJsZWQpcmV0dXJuO3RoaXMuaXRlbXNGYWN0b3J5PW5ldyB5Z2UodGhpcy5ob3QsTkYuREVGQVVMVF9JVEVNUyks''@;'; put 'put ''dGhpcy5hZGRIb29rKCJiZWZvcmVPbkNlbGxNb3VzZURvd24iLGZ1bmN0aW9uKCl7Zm9yKHZhciBoPWFyZ3VtZW50cy5sZW5ndGgsZj1uZXcgQXJyYXkoaCksdj0wO3Y8aDt2KyspZlt2XT1hcmd1bWVudHNbdl07cmV0dXJuIHEyKGczLGwseDF0KS5jYWxsKGwsLi4uZil9KSx0aGlzLmFkZEhv''@;'; put 'put ''b2soImJlZm9yZVZpZXdwb3J0U2Nyb2xsSG9yaXpvbnRhbGx5IixmdW5jdGlvbigpe2Zvcih2YXIgaD1hcmd1bWVudHMubGVuZ3RoLGY9bmV3IEFycmF5KGgpLHY9MDt2PGg7disrKWZbdl09YXJndW1lbnRzW3ZdO3JldHVybiBxMihnMyxsLE0xdCkuY2FsbChsLC4uLmYpfSk7Y29uc3QgYT10''@;'; put 'put ''aGlzLmhvdC5nZXRTZXR0aW5ncygpW0ZGXSxkPXtpdGVtczp0aGlzLml0ZW1zRmFjdG9yeS5nZXRJdGVtcyhhKX07dGhpcy5yZWdpc3RlckV2ZW50cygpLCJmdW5jdGlvbiI9PXR5cGVvZiBhLmNhbGxiYWNrJiZ0aGlzLmNvbW1hbmRFeGVjdXRvci5zZXRDb21tb25DYWxsYmFjayhhLmNhbGxi''@;'; put 'put ''YWNrKSx0aGlzLnJlZ2lzdGVyU2hvcnRjdXRzKCksc3VwZXIuZW5hYmxlUGx1Z2luKCksdGhpcy5jYWxsT25QbHVnaW5zUmVhZHkoKCk9Pnt0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJEcm9wZG93bk1lbnVEZWZhdWx0T3B0aW9ucyIsZCksdGhpcy5pdGVtc0ZhY3Rvcnkuc2V0UHJlZGVmaW5l''@;'; put 'put ''ZEl0ZW1zKGQuaXRlbXMpO2NvbnN0IGg9dGhpcy5pdGVtc0ZhY3RvcnkuZ2V0SXRlbXMoYSk7dGhpcy5tZW51JiZ0aGlzLm1lbnUuZGVzdHJveSgpLHRoaXMubWVudT1uZXcgcV8odGhpcy5ob3Qse2NsYXNzTmFtZToiaHREcm9wZG93bk1lbnUiLGtlZXBJblZpZXdwb3J0OiEwLGNvbnRhaW5l''@;'; put 'put ''cjphLnVpQ29udGFpbmVyfHx0aGlzLmhvdC5yb290RG9jdW1lbnQuYm9keX0pLHRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVEcm9wZG93bk1lbnVTZXRJdGVtcyIsaCksdGhpcy5tZW51LnNldE1lbnVJdGVtcyhoKSx0aGlzLm1lbnUuYWRkTG9jYWxIb29rKCJiZWZvcmVPcGVuIiwoKT0+cTIo''@;'; put 'put ''ZzMsdGhpcyxfMXQpLmNhbGwodGhpcykpLHRoaXMubWVudS5hZGRMb2NhbEhvb2soImFmdGVyT3BlbiIsKCk9PnEyKGczLHRoaXMsdzF0KS5jYWxsKHRoaXMpKSx0aGlzLm1lbnUuYWRkTG9jYWxIb29rKCJhZnRlclN1Ym1lbnVPcGVuIixmPT5xMihnMyx0aGlzLEMxdCkuY2FsbCh0aGlzLGYp''@;'; put 'put ''KSx0aGlzLm1lbnUuYWRkTG9jYWxIb29rKCJhZnRlckNsb3NlIiwoKT0+cTIoZzMsdGhpcyxTMXQpLmNhbGwodGhpcykpLHRoaXMubWVudS5hZGRMb2NhbEhvb2soImV4ZWN1dGVDb21tYW5kIixmdW5jdGlvbigpe2Zvcih2YXIgZj1hcmd1bWVudHMubGVuZ3RoLHY9bmV3IEFycmF5KGYpLE09''@;'; put 'put ''MDtNPGY7TSsrKXZbTV09YXJndW1lbnRzW01dO3JldHVybiBsLmV4ZWN1dGVDb21tYW5kLmNhbGwobCwuLi52KX0pLFluKGgsZj0+dGhpcy5jb21tYW5kRXhlY3V0b3IucmVnaXN0ZXJDb21tYW5kKGYua2V5LGYpKX0pfXVwZGF0ZVBsdWdpbigpe3RoaXMuZGlzYWJsZVBsdWdpbigpLHRoaXMu''@;'; put 'put ''ZW5hYmxlUGx1Z2luKCksc3VwZXIudXBkYXRlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe3RoaXMuY2xvc2UoKSx0aGlzLm1lbnUmJnRoaXMubWVudS5kZXN0cm95KCksdGhpcy51bnJlZ2lzdGVyU2hvcnRjdXRzKCksc3VwZXIuZGlzYWJsZVBsdWdpbigpfXJlZ2lzdGVyU2hvcnRjdXRzKCl7''@;'; put 'put ''Y29uc3QgYT0oKT0+e2NvbnN0e2hpZ2hsaWdodDpkfT10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO2lmKChkLmlzSGVhZGVyKCkmJi0xPT09ZC5yb3d8fGQuaXNDZWxsKCkpJiZkLmNvbD49MCl7dGhpcy5ob3Quc2VsZWN0Q29sdW1ucyhkLmNvbCxkLmNvbCwtMSk7Y29uc3R7ZnJv''@;'; put 'put ''bTpofT10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLGY9ZkYodGhpcy5tZW51LmNvbnRhaW5lcix0aGlzLmhvdC5yb290RG9jdW1lbnQpLHY9dGhpcy5ob3QuZ2V0Q2VsbCgtMSxoLmNvbCwhMCkucXVlcnlTZWxlY3RvcihgLiR7RlR9YCksTT12LmdldEJvdW5kaW5nQ2xpZW50UmVj''@;'; put 'put ''dCgpO3RoaXMub3Blbih7bGVmdDpNLmxlZnQrZi5sZWZ0LHRvcDpNLnRvcCt2Lm9mZnNldEhlaWdodCtmLnRvcH0se2xlZnQ6TS53aWR0aCxyaWdodDowLGFib3ZlOjAsYmVsb3c6M30pLHRoaXMubWVudS5nZXROYXZpZ2F0b3IoKS50b0ZpcnN0SXRlbSgpfX07dGhpcy5ob3QuZ2V0U2hvcnRj''@;'; put 'put ''dXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZ3JpZCIpLmFkZFNob3J0Y3V0cyhbe2tleXM6W1siU2hpZnQiLCJBbHQiLCJBcnJvd0Rvd24iXSxbIkNvbnRyb2wvTWV0YSIsIkVudGVyIl1dLGNhbGxiYWNrOmEscnVuT25seUlmOigpPT57dmFyIGQ7Y29uc3QgaD1udWxsPT09KGQ9dGhpcy5ob3Qu''@;'; put 'put ''Z2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSl8fHZvaWQgMD09PWQ/dm9pZCAwOmQuaGlnaGxpZ2h0O3JldHVybiBoJiZ0aGlzLmhvdC5zZWxlY3Rpb24uaXNDZWxsVmlzaWJsZShoKSYmaC5pc0hlYWRlcigpJiYhdGhpcy5tZW51LmlzT3BlbmVkKCl9LGNhcHR1cmVDdHJsOiEwLGdyb3VwOkpKfSx7''@;'; put 'put ''a2V5czpbWyJTaGlmdCIsIkFsdCIsIkFycm93RG93biJdXSxjYWxsYmFjazphLHJ1bk9ubHlJZjooKT0+e3ZhciBkO2NvbnN0IGg9bnVsbD09PShkPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkpfHx2b2lkIDA9PT1kP3ZvaWQgMDpkLmhpZ2hsaWdodDtyZXR1cm4gaCYmdGhpcy5o''@;'; put 'put ''b3Quc2VsZWN0aW9uLmlzQ2VsbFZpc2libGUoaCkmJmguaXNDZWxsKCkmJiF0aGlzLm1lbnUuaXNPcGVuZWQoKX0sZ3JvdXA6Skp9XSl9dW5yZWdpc3RlclNob3J0Y3V0cygpe3RoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKS5yZW1vdmVTaG9ydGN1dHNC''@;'; put 'put ''eUdyb3VwKEpKKX1yZWdpc3RlckV2ZW50cygpe3RoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodGhpcy5ob3Qucm9vdEVsZW1lbnQsImNsaWNrIixsPT5xMihnMyx0aGlzLGIxdCkuY2FsbCh0aGlzLGwpKX1vcGVuKGwpe3ZhciBhO2xldCBkPWFyZ3VtZW50cy5sZW5ndGg+MSYm''@;'; put 'put ''dm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7YWJvdmU6MCxiZWxvdzowLGxlZnQ6MCxyaWdodDowfTtudWxsIT09KGE9dGhpcy5tZW51KSYmdm9pZCAwIT09YSYmYS5pc09wZW5lZCgpfHwodGhpcy5tZW51Lm9wZW4oKSxYbyhkLChoLGYpPT57dGhpcy5tZW51LnNldE9mZnNl''@;'; put 'put ''dChmLGgpfSksdGhpcy5tZW51LnNldFBvc2l0aW9uKGwpKX1jbG9zZSgpe3ZhciBsO251bGw9PT0obD10aGlzLm1lbnUpfHx2b2lkIDA9PT1sfHxsLmNsb3NlKCl9ZXhlY3V0ZUNvbW1hbmQobCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYT4xP2EtMTowKSxoPTE7''@;'; put 'put ''aDxhO2grKylkW2gtMV09YXJndW1lbnRzW2hdO3RoaXMuY29tbWFuZEV4ZWN1dG9yLmV4ZWN1dGUobCwuLi5kKX1zZXRMaXN0ZW5pbmcoKXtsZXQgbD0hKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdKXx8YXJndW1lbnRzWzBdO3RoaXMubWVudS5pc09wZW5lZCgp''@;'; put 'put ''JiYobD90aGlzLm1lbnUuaG90TWVudS5saXN0ZW4oKTp0aGlzLm1lbnUuaG90TWVudS51bmxpc3RlbigpKX1kZXN0cm95KCl7dGhpcy5jbG9zZSgpLHRoaXMubWVudSYmdGhpcy5tZW51LmRlc3Ryb3koKSxzdXBlci5kZXN0cm95KCl9fWZ1bmN0aW9uIHpnZShjKXtjLmdldEtleWJvYXJkU2hv''@;'; put 'put ''cnRjdXRzQ3RybCgpLmFkZEN1c3RvbVNob3J0Y3V0cyhbe2tleXM6W1siQ29udHJvbC9NZXRhIiwiQSJdXSxjYWxsYmFjazooKT0+ITF9XSl9ZnVuY3Rpb24gYjF0KGMpe2lmKHBvKGMudGFyZ2V0LEZUKSl7Y29uc3QgbD1mRih0aGlzLm1lbnUuY29udGFpbmVyLHRoaXMuaG90LnJvb3REb2N1''@;'; put 'put ''bWVudCksYT1jLnRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtjLnN0b3BQcm9wYWdhdGlvbigpLGpnZShIRix0aGlzLCExKSx0aGlzLm9wZW4oe2xlZnQ6YS5sZWZ0K2wubGVmdCx0b3A6YS50b3ArYy50YXJnZXQub2Zmc2V0SGVpZ2h0K2wudG9wfSx7bGVmdDphLndpZHRoLHJpZ2h0''@;'; put 'put ''OjAsYWJvdmU6MCxiZWxvdzozfSl9fWZ1bmN0aW9uIHkxdChjLGwpe2NvbnN0IGE9bC5wYXJlbnROb2RlO2lmKCFhKXJldHVybjtjb25zdCBkPWEucGFyZW50Tm9kZS5jaGlsZE5vZGVzLGg9QXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbChkLGEpO2lmKGM8MHx8aCE9PWQubGVuZ3RoLTEp''@;'; put 'put ''cmV0dXJuO2NvbnN0IGY9bC5xdWVyeVNlbGVjdG9yKGAuJHtGVH1gKTtpZih0aGlzLmVuYWJsZWQmJmYpcmV0dXJuO2lmKCF0aGlzLmVuYWJsZWQpcmV0dXJuIHZvaWQoZiYmZi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGYpKTtjb25zdCB2PXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVF''@;'; put 'put ''bGVtZW50KCJidXR0b24iKTt2LmNsYXNzTmFtZT1GVCx2LnR5cGU9ImJ1dHRvbiIsdi50YWJJbmRleD0tMSx0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmFyaWFUYWdzJiYodm8odixbVjcoKSxtRSgiICIpXSksdm8obCxbRTJlKCJtZW51IildKSksdi5vbmNsaWNrPWZ1bmN0aW9uKCl7cmV0dXJu''@;'; put 'put ''ITF9LGwuZmlyc3RDaGlsZC5pbnNlcnRCZWZvcmUodixsLmZpcnN0Q2hpbGQuZmlyc3RDaGlsZCl9ZnVuY3Rpb24gXzF0KCl7dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZURyb3Bkb3duTWVudVNob3ciLHRoaXMpfWZ1bmN0aW9uIHcxdCgpe3RoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckRyb3Bk''@;'; put 'put ''b3duTWVudVNob3ciLHRoaXMpLHEyKGczLHRoaXMsemdlKS5jYWxsKHRoaXMsdGhpcy5tZW51KX1mdW5jdGlvbiBDMXQoYyl7cTIoZzMsdGhpcyx6Z2UpLmNhbGwodGhpcyxjKX1mdW5jdGlvbiBTMXQoKXt0aGlzLmhvdC5saXN0ZW4oKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJEcm9wZG93''@;'; put 'put ''bk1lbnVIaWRlIix0aGlzKX1mdW5jdGlvbiBNMXQoYyl7cmV0dXJuIGZ1bmN0aW9uIG0xdChjLGwpe3JldHVybiBjLmdldChxMihjLGwpKX0oSEYsdGhpcyk/bnVsbDpjfWZ1bmN0aW9uIHgxdChjKXtwbyhjLnRhcmdldCxGVCkmJmpnZShIRix0aGlzLCEwKX1mdW5jdGlvbiBVZ2UoYyxsLGEp''@;'; put 'put ''e3JldHVybihsPWZ1bmN0aW9uIEUxdChjKXt2YXIgbD1mdW5jdGlvbiBUMXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmpl''@;'; put 'put ''Y3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2Yg''@;'; put 'put ''bD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfU5GLlNFUEFSQVRPUj17bmFtZTpzc307Y29uc3QgazF0PWNsYXNzIEExdHtjb25zdHJ1Y3RvcihsKXtV''@;'; put 'put ''Z2UodGhpcywiaG90Iix2b2lkIDApLFVnZSh0aGlzLCJvcHRpb25zIix7fSksdGhpcy5ob3Q9bH1zZXRPcHRpb25zKGwpe3RoaXMub3B0aW9ucz1sfWdldERhdGEoKXtjb25zdHtzdGFydFJvdzpsLHN0YXJ0Q29sOmEsZW5kUm93OmQsZW5kQ29sOmh9PXRoaXMuX2dldERhdGFSYW5nZSgpLGY9''@;'; put 'put ''dGhpcy5vcHRpb25zLHY9W107cmV0dXJuIEdhKGwsZCxNPT57Y29uc3QgRD1bXTshZi5leHBvcnRIaWRkZW5Sb3dzJiZ0aGlzLl9pc0hpZGRlblJvdyhNKXx8KEdhKGEsaCxaPT57IWYuZXhwb3J0SGlkZGVuQ29sdW1ucyYmdGhpcy5faXNIaWRkZW5Db2x1bW4oWil8fEQucHVzaCh0aGlzLmhv''@;'; put 'put ''dC5nZXREYXRhQXRDZWxsKE0sWikpfSksdi5wdXNoKEQpKX0pLHZ9Z2V0Um93SGVhZGVycygpe2NvbnN0IGw9W107aWYodGhpcy5vcHRpb25zLnJvd0hlYWRlcnMpe2NvbnN0e3N0YXJ0Um93OmEsZW5kUm93OmR9PXRoaXMuX2dldERhdGFSYW5nZSgpLGg9dGhpcy5ob3QuZ2V0Um93SGVhZGVy''@;'; put 'put ''KCk7R2EoYSxkLGY9PnshdGhpcy5vcHRpb25zLmV4cG9ydEhpZGRlblJvd3MmJnRoaXMuX2lzSGlkZGVuUm93KGYpfHxsLnB1c2goaFtmXSl9KX1yZXR1cm4gbH1nZXRDb2x1bW5IZWFkZXJzKCl7Y29uc3QgbD1bXTtpZih0aGlzLm9wdGlvbnMuY29sdW1uSGVhZGVycyl7Y29uc3R7c3RhcnRD''@;'; put 'put ''b2w6YSxlbmRDb2w6ZH09dGhpcy5fZ2V0RGF0YVJhbmdlKCksaD10aGlzLmhvdC5nZXRDb2xIZWFkZXIoKTtHYShhLGQsZj0+eyF0aGlzLm9wdGlvbnMuZXhwb3J0SGlkZGVuQ29sdW1ucyYmdGhpcy5faXNIaWRkZW5Db2x1bW4oZil8fGwucHVzaChoW2ZdKX0pfXJldHVybiBsfV9nZXREYXRh''@;'; put 'put ''UmFuZ2UoKXtjb25zdCBsPXRoaXMuaG90LmNvdW50Q29scygpLTEsYT10aGlzLmhvdC5jb3VudFJvd3MoKS0xO2xldFtkPTAsaD0wLGY9YSx2PWxdPXRoaXMub3B0aW9ucy5yYW5nZTtyZXR1cm4gZD1NYXRoLm1heChkLDApLGg9TWF0aC5tYXgoaCwwKSxmPU1hdGgubWluKGYsYSksdj1NYXRo''@;'; put 'put ''Lm1pbih2LGwpLHtzdGFydFJvdzpkLHN0YXJ0Q29sOmgsZW5kUm93OmYsZW5kQ29sOnZ9fV9pc0hpZGRlblJvdyhsKXtyZXR1cm4gdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuaXNIaWRkZW4odGhpcy5ob3QudG9QaHlzaWNhbFJvdyhsKSl9X2lzSGlkZGVuQ29sdW1uKGwpe3JldHVybiB0aGlz''@;'; put 'put ''LmhvdC5jb2x1bW5JbmRleE1hcHBlci5pc0hpZGRlbih0aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGwpKX19O2Z1bmN0aW9uIFpnZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gRDF0KGMpe3ZhciBsPWZ1bmN0aW9uIEkxdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJu''@;'; put 'put ''IGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUg''@;'; put 'put ''dmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEw''@;'; put 'put ''LHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgUUp7c3RhdGljIGdldCBERUZBVUxUX09QVElPTlMoKXtyZXR1cm57bWltZVR5cGU6InRleHQvcGxhaW4iLGZpbGVFeHRlbnNpb246InR4dCIsZmlsZW5hbWU6IkhhbmRzb250YWJsZSBbWVlZWV0tW01NXS1bRERdIixlbmNvZGluZzoidXRm''@;'; put 'put ''LTgiLGJvbTohMSxjb2x1bW5IZWFkZXJzOiExLHJvd0hlYWRlcnM6ITEsZXhwb3J0SGlkZGVuQ29sdW1uczohMSxleHBvcnRIaWRkZW5Sb3dzOiExLHJhbmdlOltdfX1jb25zdHJ1Y3RvcihsLGEpe1pnZSh0aGlzLCJkYXRhUHJvdmlkZXIiLHZvaWQgMCksWmdlKHRoaXMsIm9wdGlvbnMiLHZv''@;'; put 'put ''aWQgMCksdGhpcy5kYXRhUHJvdmlkZXI9bCx0aGlzLm9wdGlvbnM9dGhpcy5fbWVyZ2VPcHRpb25zKGEpLHRoaXMuZGF0YVByb3ZpZGVyLnNldE9wdGlvbnModGhpcy5vcHRpb25zKX1fbWVyZ2VPcHRpb25zKGwpe2xldCBhPW4zKHRoaXMuY29uc3RydWN0b3IuREVGQVVMVF9PUFRJT05TKTtj''@;'; put 'put ''b25zdCBkPW5ldyBEYXRlO3JldHVybiBhPUV1KG4zKFFKLkRFRkFVTFRfT1BUSU9OUyksYSksYT1FdShhLGwpLGEuZmlsZW5hbWU9cCQoYS5maWxlbmFtZSx7WVlZWTpkLmdldEZ1bGxZZWFyKCksTU06YCR7ZC5nZXRNb250aCgpKzF9YC5wYWRTdGFydCgyLCIwIiksREQ6YCR7ZC5nZXREYXRl''@;'; put 'put ''KCl9YC5wYWRTdGFydCgyLCIwIil9KSxhfX1jb25zdCBSMXQ9UUo7ZnVuY3Rpb24gV2dlKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQg''@;'; put 'put ''aXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgZVE9bmV3IFdlYWtTZXQ7ZnVuY3Rpb24gVTF0KGMpe3JldHVybiBjLnN0YXJ0c1dpdGgoIj0iKXx8Yy5zdGFydHNXaXRoKCIrIil8fGMuc3RhcnRzV2l0aCgiLSIpfHxjLnN0YXJ0c1dpdGgoIkAiKXx8Yy5zdGFydHNXaXRoKCJc''@;'; put 'put ''dCIpfHxjLnN0YXJ0c1dpdGgoIlxyIik/YCcke2N9YDpjfWZ1bmN0aW9uIFoxdChjLGwpe3JldHVybiBsLnRlc3QoYyk/YCcke2N9YDpjfWNvbnN0IHRRPXtjc3Y6Y2xhc3MgejF0IGV4dGVuZHMgUjF0e2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlvbiBMMXQoYyxs''@;'; put 'put ''KXsoZnVuY3Rpb24gTzF0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5hZGQoYyl9KHRoaXMsZVEpfXN0YXRpYyBnZXQgREVGQVVMVF9P''@;'; put 'put ''UFRJT05TKCl7cmV0dXJue21pbWVUeXBlOiJ0ZXh0L2NzdiIsZmlsZUV4dGVuc2lvbjoiY3N2Iixib206ITAsY29sdW1uRGVsaW1pdGVyOiIsIixyb3dEZWxpbWl0ZXI6IlxyXG4iLHNhbml0aXplVmFsdWVzOiExfX1leHBvcnQoKXtjb25zdCBsPXRoaXMub3B0aW9ucyxhPXRoaXMuZGF0YVBy''@;'; put 'put ''b3ZpZGVyLmdldERhdGEoKTtsZXQgZD10aGlzLmRhdGFQcm92aWRlci5nZXRDb2x1bW5IZWFkZXJzKCk7Y29uc3QgaD1kLmxlbmd0aD4wLGY9dGhpcy5kYXRhUHJvdmlkZXIuZ2V0Um93SGVhZGVycygpLHY9Zi5sZW5ndGg+MDtsZXQgTT1sLmJvbT8iXHVmZWZmIjoiIjtyZXR1cm4gaCYmKGQ9''@;'; put 'put ''eXMoZCxEPT50aGlzLl9lc2NhcGVDZWxsKEQse2ZvcmNlOiEwLHNhbml0aXplVmFsdWU6bC5zYW5pdGl6ZVZhbHVlc30pKSx2JiYoTSs9bC5jb2x1bW5EZWxpbWl0ZXIpLE0rPWQuam9pbihsLmNvbHVtbkRlbGltaXRlciksTSs9bC5yb3dEZWxpbWl0ZXIpLFluKGEsKEQsWik9PntaPjAmJihN''@;'; put 'put ''Kz1sLnJvd0RlbGltaXRlciksdiYmKE0rPXRoaXMuX2VzY2FwZUNlbGwoZltaXSx7c2FuaXRpemVWYWx1ZTpsLnNhbml0aXplVmFsdWVzfSksTSs9bC5jb2x1bW5EZWxpbWl0ZXIpO2NvbnN0IHJlPUQubWFwKGNlPT50aGlzLl9lc2NhcGVDZWxsKGNlLHtzYW5pdGl6ZVZhbHVlOmwuc2FuaXRp''@;'; put 'put ''emVWYWx1ZXN9KSkuam9pbihsLmNvbHVtbkRlbGltaXRlcik7TSs9cmV9KSxNfV9lc2NhcGVDZWxsKGwpe2xldHtmb3JjZTphPSExLHNhbml0aXplVmFsdWU6ZD0hMX09YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9LGg9bGMobCk7cmV0''@;'; put 'put ''dXJuIiI9PT1ofHwoZCYmKGE9ITApLGQgaW5zdGFuY2VvZiBSZWdFeHA/aD1XZ2UoZVEsdGhpcyxaMXQpLmNhbGwodGhpcyxoLGQpOiJmdW5jdGlvbiI9PXR5cGVvZiBkP2g9ZChoKTpkJiYoaD1XZ2UoZVEsdGhpcyxVMXQpLmNhbGwodGhpcyxoKSksKGF8fGguaW5kZXhPZigiXHIiKT49MHx8''@;'; put 'put ''aC5pbmRleE9mKCciJyk+PTB8fGguaW5kZXhPZigiXG4iKT49MHx8aC5pbmRleE9mKHRoaXMub3B0aW9ucy5jb2x1bW5EZWxpbWl0ZXIpPj0wKSYmKGg9aC5yZXBsYWNlKG5ldyBSZWdFeHAoJyInLCJnIiksJyIiJyksaD1gIiR7aH0iYCkpLGh9fX07Y2xhc3MgcTF0IGV4dGVuZHMgRnN7c3Rh''@;'; put 'put ''dGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuImV4cG9ydEZpbGUifXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDI0MH1pc0VuYWJsZWQoKXtyZXR1cm4hMH1leHBvcnRBc1N0cmluZyhsKXtyZXR1cm4gdGhpcy5fY3JlYXRlVHlwZUZvcm1hdHRlcihsLGFyZ3VtZW50cy5s''@;'; put 'put ''ZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fSkuZXhwb3J0KCl9ZXhwb3J0QXNCbG9iKGwpe3JldHVybiB0aGlzLl9jcmVhdGVCbG9iKHRoaXMuX2NyZWF0ZVR5cGVGb3JtYXR0ZXIobCxhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sx''@;'; put 'put ''XT9hcmd1bWVudHNbMV06e30pKX1kb3dubG9hZEZpbGUobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9O2NvbnN0e3Jvb3REb2N1bWVudDpkLHJvb3RXaW5kb3c6aH09dGhpcy5ob3QsZj10aGlzLl9jcmVhdGVUeXBlRm9y''@;'; put 'put ''bWF0dGVyKGwsYSksdj10aGlzLl9jcmVhdGVCbG9iKGYpLE09aC5VUkx8fGgud2Via2l0VVJMLEQ9ZC5jcmVhdGVFbGVtZW50KCJhIiksWj1gJHtmLm9wdGlvbnMuZmlsZW5hbWV9LiR7Zi5vcHRpb25zLmZpbGVFeHRlbnNpb259YDtpZih2b2lkIDAhPT1ELmRvd25sb2FkKXtjb25zdCByZT1N''@;'; put 'put ''LmNyZWF0ZU9iamVjdFVSTCh2KTtELnN0eWxlLmRpc3BsYXk9Im5vbmUiLEQuc2V0QXR0cmlidXRlKCJocmVmIixyZSksRC5zZXRBdHRyaWJ1dGUoImRvd25sb2FkIixaKSxkLmJvZHkuYXBwZW5kQ2hpbGQoRCksRC5kaXNwYXRjaEV2ZW50KG5ldyBNb3VzZUV2ZW50KCJjbGljayIpKSxkLmJv''@;'; put 'put ''ZHkucmVtb3ZlQ2hpbGQoRCksc2V0VGltZW91dCgoKT0+e00ucmV2b2tlT2JqZWN0VVJMKHJlKX0sMTAwKX1lbHNlIG5hdmlnYXRvci5tc1NhdmVPck9wZW5CbG9iJiZuYXZpZ2F0b3IubXNTYXZlT3JPcGVuQmxvYih2LFopfV9jcmVhdGVUeXBlRm9ybWF0dGVyKGwpe2xldCBhPWFyZ3VtZW50''@;'; put 'put ''cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fTtpZighdFFbbF0pdGhyb3cgbmV3IEVycm9yKGBFeHBvcnQgZm9ybWF0IHR5cGUgIiR7bH0iIGlzIG5vdCBzdXBwb3J0ZWQuYCk7cmV0dXJuIGZ1bmN0aW9uIEcxdChjLGwsYSl7cmV0dXJuImZ1bmN0aW9u''@;'; put 'put ''Ij09dHlwZW9mIHRRW2NdP25ldyB0UVtjXShsLGEpOm51bGx9KGwsbmV3IGsxdCh0aGlzLmhvdCksYSl9X2NyZWF0ZUJsb2IobCl7bGV0IGE9bnVsbDtyZXR1cm4gdHlwZW9mIEJsb2I8InUiJiYoYT1uZXcgQmxvYihbbC5leHBvcnQoKV0se3R5cGU6YCR7bC5vcHRpb25zLm1pbWVUeXBlfTtj''@;'; put 'put ''aGFyc2V0PSR7bC5vcHRpb25zLmVuY29kaW5nfWB9KSksYX19ZnVuY3Rpb24gbncoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIFgxdChjKXt2YXIgbD1mdW5jdGlvbiBKMXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZl''@;'; put 'put ''XTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/''@;'; put 'put ''U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNz''@;'; put 'put ''IEhUe2NvbnN0cnVjdG9yKGwsYSl7bGV0e2lkOmQsc3RhdGVsZXNzOmg9ITB9PWE7bncodGhpcywiaG90Iix2b2lkIDApLG53KHRoaXMsImlkIix2b2lkIDApLG53KHRoaXMsImVsZW1lbnRzIixbXSksbncodGhpcywiaGlkZGVuIiwhMSksbncodGhpcywic3RhdGVJZCIsIiIpLG53KHRoaXMs''@;'; put 'put ''InN0YXRlIix2b2lkIDApLHRoaXMuaG90PWwsdGhpcy5pZD1kLHRoaXMuc3RhdGVJZD1gRmlsdGVycy5jb21wb25lbnQuJHt0aGlzLmlkfWAsdGhpcy5zdGF0ZT1oP251bGw6dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIucmVnaXN0ZXJNYXAodGhpcy5zdGF0ZUlkLG5ldyBwUCl9Z2V0RWxl''@;'; put 'put ''bWVudHMoKXtyZXR1cm4gdGhpcy5lbGVtZW50c31yZXNldCgpe1luKHRoaXMuZWxlbWVudHMsbD0+bC5yZXNldCgpKX1oaWRlKCl7dGhpcy5oaWRkZW49ITB9c2hvdygpe3RoaXMuaGlkZGVuPSExfWlzSGlkZGVuKCl7cmV0dXJuIG51bGw9PT10aGlzLmhvdHx8dGhpcy5oaWRkZW59cmVzdG9y''@;'; put 'put ''ZVN0YXRlKGwpe3RoaXMuc3RhdGUmJnRoaXMuc2V0U3RhdGUodGhpcy5zdGF0ZS5nZXRWYWx1ZUF0SW5kZXgobCkpfXNldFN0YXRlKCl7dGhyb3cgbmV3IEVycm9yKCJUaGUgc3RhdGUgc2V0dGluZyBsb2dpYyBpcyBub3QgaW1wbGVtZW50ZWQiKX1zYXZlU3RhdGUobCl7dGhpcy5zdGF0ZSYm''@;'; put 'put ''dGhpcy5zdGF0ZS5zZXRWYWx1ZUF0SW5kZXgobCx0aGlzLmdldFN0YXRlKCkpfWdldFN0YXRlKCl7dGhyb3cgbmV3IEVycm9yKCJUaGUgc3RhdGUgZ2F0aGVyaW5nIGxvZ2ljIGlzIG5vdCBpbXBsZW1lbnRlZCIpfWRlc3Ryb3koKXt0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci51bnJlZ2lz''@;'; put 'put ''dGVyTWFwKHRoaXMuc3RhdGVJZCksdGhpcy5jbGVhckxvY2FsSG9va3MoKSxZbih0aGlzLmVsZW1lbnRzLGw9PmwuZGVzdHJveSgpKSx0aGlzLnN0YXRlPW51bGwsdGhpcy5lbGVtZW50cz1udWxsLHRoaXMuaG90PW51bGx9fVRsKEhULHkxKTtjb25zdCBOVD17fTtmdW5jdGlvbiByNihjLGwp''@;'; put 'put ''e2lmKCFOVFtjXSl0aHJvdyBFcnJvcihgRmlsdGVyIGNvbmRpdGlvbiAiJHtjfSIgZG9lcyBub3QgZXhpc3QuYCk7Y29uc3R7Y29uZGl0aW9uOmEsZGVzY3JpcHRvcjpkfT1OVFtjXTtsZXQgaD1sO3JldHVybiBkLmlucHV0VmFsdWVzRGVjb3JhdG9yJiYoaD1kLmlucHV0VmFsdWVzRGVjb3Jh''@;'; put 'put ''dG9yKGgpKSxmdW5jdGlvbihmKXtyZXR1cm4gYS5hcHBseShmLm1ldGEuaW5zdGFuY2UsW10uY29uY2F0KFtmXSxbaF0pKX19ZnVuY3Rpb24gdzkoYyl7aWYoIU5UW2NdKXRocm93IEVycm9yKGBGaWx0ZXIgY29uZGl0aW9uICIke2N9IiBkb2VzIG5vdCBleGlzdC5gKTtyZXR1cm4gTlRbY10u''@;'; put 'put ''ZGVzY3JpcHRvcn1mdW5jdGlvbiBrdShjLGwsYSl7YS5rZXk9YyxOVFtjXT17Y29uZGl0aW9uOmwsZGVzY3JpcHRvcjphfX1jb25zdCBFMD0ibm9uZSI7a3UoRTAsZnVuY3Rpb24gUTF0KCl7cmV0dXJuITB9LHtuYW1lOndQLGlucHV0c0NvdW50OjAsc2hvd09wZXJhdG9yczohMX0pO2NvbnN0''@;'; put 'put ''IFZUPSJlbXB0eSI7a3UoVlQsZnVuY3Rpb24gZWR0KGMpe3JldHVybiBVYyhjLnZhbHVlKX0se25hbWU6RnEsaW5wdXRzQ291bnQ6MCxzaG93T3BlcmF0b3JzOiEwfSk7Y29uc3QgVkY9Im5vdF9lbXB0eSI7a3UoVkYsZnVuY3Rpb24gdGR0KGMsbCl7cmV0dXJuIXI2KFZULGwpKGMpfSx7bmFt''@;'; put 'put ''ZTpIcSxpbnB1dHNDb3VudDowLHNob3dPcGVyYXRvcnM6ITB9KTtjb25zdCBCVD0iZXEiO2t1KEJULGZ1bmN0aW9uIG5kdChjLGwpe2xldFthXT1sO3JldHVybiBsYyhjLnZhbHVlKS50b0xvY2FsZUxvd2VyQ2FzZShjLm1ldGEubG9jYWxlKT09PWxjKGEpfSx7bmFtZTpOcSxpbnB1dHNDb3Vu''@;'; put 'put ''dDoxLHNob3dPcGVyYXRvcnM6ITB9KTtjb25zdCBCRj0ibmVxIjtrdShCRixmdW5jdGlvbiByZHQoYyxsKXtyZXR1cm4hcjYoQlQsbCkoYyl9LHtuYW1lOlZxLGlucHV0c0NvdW50OjEsc2hvd09wZXJhdG9yczohMH0pLGt1KCJndCIsZnVuY3Rpb24gaWR0KGMsbCl7bGV0W2FdPWwsZD1hO3Jl''@;'; put 'put ''dHVybiJudW1lcmljIj09PWMubWV0YS50eXBlJiYoZD1wYXJzZUZsb2F0KGQsMTApKSxjLnZhbHVlPmR9LHtuYW1lOlpxLGlucHV0c0NvdW50OjEsc2hvd09wZXJhdG9yczohMH0pLGt1KCJndGUiLGZ1bmN0aW9uIGFkdChjLGwpe2xldFthXT1sLGQ9YTtyZXR1cm4ibnVtZXJpYyI9PT1jLm1l''@;'; put 'put ''dGEudHlwZSYmKGQ9cGFyc2VGbG9hdChkLDEwKSksYy52YWx1ZT49ZH0se25hbWU6V3EsaW5wdXRzQ291bnQ6MSxzaG93T3BlcmF0b3JzOiEwfSksa3UoImx0IixmdW5jdGlvbiBvZHQoYyxsKXtsZXRbYV09bCxkPWE7cmV0dXJuIm51bWVyaWMiPT09Yy5tZXRhLnR5cGUmJihkPXBhcnNlRmxv''@;'; put 'put ''YXQoZCwxMCkpLGMudmFsdWU8ZH0se25hbWU6WXEsaW5wdXRzQ291bnQ6MSxzaG93T3BlcmF0b3JzOiEwfSksa3UoImx0ZSIsZnVuY3Rpb24gc2R0KGMsbCl7bGV0W2FdPWwsZD1hO3JldHVybiJudW1lcmljIj09PWMubWV0YS50eXBlJiYoZD1wYXJzZUZsb2F0KGQsMTApKSxjLnZhbHVlPD1k''@;'; put 'put ''fSx7bmFtZTpHcSxpbnB1dHNDb3VudDoxLHNob3dPcGVyYXRvcnM6ITB9KTtjb25zdCBuUT0iZGF0ZV9hZnRlciI7a3UoblEsZnVuY3Rpb24gbGR0KGMsbCl7bGV0W2FdPWw7Y29uc3QgZD1PbyhjLnZhbHVlLGMubWV0YS5kYXRlRm9ybWF0KSxoPU9vKGEsYy5tZXRhLmRhdGVGb3JtYXQpO3Jl''@;'; put 'put ''dHVybiEoIWQuaXNWYWxpZCgpfHwhaC5pc1ZhbGlkKCkpJiZkLmRpZmYoaCk+PTB9LHtuYW1lOnFxLGlucHV0c0NvdW50OjEsc2hvd09wZXJhdG9yczohMH0pO2NvbnN0IHJRPSJkYXRlX2JlZm9yZSI7a3UoclEsZnVuY3Rpb24gY2R0KGMsbCl7bGV0W2FdPWw7Y29uc3QgZD1PbyhjLnZhbHVl''@;'; put 'put ''LGMubWV0YS5kYXRlRm9ybWF0KSxoPU9vKGEsYy5tZXRhLmRhdGVGb3JtYXQpO3JldHVybiEoIWQuaXNWYWxpZCgpfHwhaC5pc1ZhbGlkKCkpJiZkLmRpZmYoaCk8PTB9LHtuYW1lOlhxLGlucHV0c0NvdW50OjEsc2hvd09wZXJhdG9yczohMH0pO2NvbnN0IGpGPSJiZXR3ZWVuIjtrdShqRixm''@;'; put 'put ''dW5jdGlvbiB1ZHQoYyxsKXtsZXRbYSxkXT1sLGg9YSxmPWQ7aWYoIm51bWVyaWMiPT09Yy5tZXRhLnR5cGUpe2NvbnN0IHY9cGFyc2VGbG9hdChoLDEwKSxNPXBhcnNlRmxvYXQoZiwxMCk7aD1NYXRoLm1pbih2LE0pLGY9TWF0aC5tYXgodixNKX1lbHNlIGlmKCJkYXRlIj09PWMubWV0YS50''@;'; put 'put ''eXBlKXtjb25zdCB2PXI2KHJRLFtmXSksTT1yNihuUSxbaF0pO3JldHVybiB2KGMpJiZNKGMpfXJldHVybiBjLnZhbHVlPj1oJiZjLnZhbHVlPD1mfSx7bmFtZTokcSxpbnB1dHNDb3VudDoyLHNob3dPcGVyYXRvcnM6ITB9KTtjb25zdCBYZ2U9Im5vdF9iZXR3ZWVuIjtrdShYZ2UsZnVuY3Rp''@;'; put 'put ''b24gZGR0KGMsbCl7cmV0dXJuIXI2KGpGLGwpKGMpfSx7bmFtZTpLcSxpbnB1dHNDb3VudDoyLHNob3dPcGVyYXRvcnM6ITB9KTtjb25zdCBKZ2U9ImJlZ2luc193aXRoIjtrdShKZ2UsZnVuY3Rpb24gaGR0KGMsbCl7bGV0W2FdPWw7cmV0dXJuIGxjKGMudmFsdWUpLnRvTG9jYWxlTG93ZXJD''@;'; put 'put ''YXNlKGMubWV0YS5sb2NhbGUpLnN0YXJ0c1dpdGgobGMoYSkpfSx7bmFtZTpCcSxpbnB1dHNDb3VudDoxLHNob3dPcGVyYXRvcnM6ITB9KSxrdSgiZW5kc193aXRoIixmdW5jdGlvbiBmZHQoYyxsKXtsZXRbYV09bDtyZXR1cm4gbGMoYy52YWx1ZSkudG9Mb2NhbGVMb3dlckNhc2UoYy5tZXRh''@;'; put 'put ''LmxvY2FsZSkuZW5kc1dpdGgobGMoYSkpfSx7bmFtZTpqcSxpbnB1dHNDb3VudDoxLHNob3dPcGVyYXRvcnM6ITB9KTtjb25zdCBpUT0iY29udGFpbnMiO2t1KGlRLGZ1bmN0aW9uIHBkdChjLGwpe2xldFthXT1sO3JldHVybiBsYyhjLnZhbHVlKS50b0xvY2FsZUxvd2VyQ2FzZShjLm1ldGEu''@;'; put 'put ''bG9jYWxlKS5pbmRleE9mKGxjKGEpKT49MH0se25hbWU6enEsaW5wdXRzQ291bnQ6MSxzaG93T3BlcmF0b3JzOiEwfSk7Y29uc3QgZTVlPSJub3RfY29udGFpbnMiO2t1KGU1ZSxmdW5jdGlvbiBnZHQoYyxsKXtyZXR1cm4hcjYoaVEsbCkoYyl9LHtuYW1lOlVxLGlucHV0c0NvdW50OjEsc2hv''@;'; put 'put ''d09wZXJhdG9yczohMH0pO2NvbnN0IHQ1ZT0iZGF0ZV90b21vcnJvdyI7a3UodDVlLGZ1bmN0aW9uIG1kdChjKXtjb25zdCBsPU9vKGMudmFsdWUsYy5tZXRhLmRhdGVGb3JtYXQpO3JldHVybiEhbC5pc1ZhbGlkKCkmJmwuaXNTYW1lKE9vKCkuc3VidHJhY3QoLTEsImRheXMiKS5zdGFydE9m''@;'; put 'put ''KCJkYXkiKSwiZCIpfSx7bmFtZTpRcSxpbnB1dHNDb3VudDowfSk7Y29uc3QgbjVlPSJkYXRlX3RvZGF5IjtrdShuNWUsZnVuY3Rpb24gdmR0KGMpe2NvbnN0IGw9T28oYy52YWx1ZSxjLm1ldGEuZGF0ZUZvcm1hdCk7cmV0dXJuISFsLmlzVmFsaWQoKSYmbC5pc1NhbWUoT28oKS5zdGFydE9m''@;'; put 'put ''KCJkYXkiKSwiZCIpfSx7bmFtZTpKcSxpbnB1dHNDb3VudDowfSk7Y29uc3QgcjVlPSJkYXRlX3llc3RlcmRheSI7a3UocjVlLGZ1bmN0aW9uIGJkdChjKXtjb25zdCBsPU9vKGMudmFsdWUsYy5tZXRhLmRhdGVGb3JtYXQpO3JldHVybiEhbC5pc1ZhbGlkKCkmJmwuaXNTYW1lKE9vKCkuc3Vi''@;'; put 'put ''dHJhY3QoMSwiZGF5cyIpLnN0YXJ0T2YoImRheSIpLCJkIil9LHtuYW1lOmVYLGlucHV0c0NvdW50OjB9KTtjb25zdCBhNWU9e251bWVyaWM6W0UwLHNzLFZULFZGLHNzLEJULEJGLHNzLCJndCIsImd0ZSIsImx0IiwibHRlIixqRixYZ2VdLHRleHQ6W0UwLHNzLFZULFZGLHNzLEJULEJGLHNz''@;'; put 'put ''LEpnZSwiZW5kc193aXRoIixzcyxpUSxlNWVdLGRhdGU6W0UwLHNzLFZULFZGLHNzLEJULEJGLHNzLHJRLG5RLGpGLHNzLHQ1ZSxuNWUscjVlXX07ZnVuY3Rpb24galQoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIENkdChjKXt2YXIgbD1mdW5jdGlvbiBTZHQoYyxsKXtpZigib2JqZWN0IiE9''@;'; put 'put ''dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3Qg''@;'; put 'put ''cmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxl''@;'; put 'put ''OiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNvbnN0IGFRPSJidWlsdCIsb1E9ImJ1aWxkaW5nIixvNWU9WyJjbGljayIsImlucHV0Iiwia2V5ZG93biIsImtleXByZXNzIiwia2V5dXAiLCJmb2N1cyIsImJsdXIiLCJjaGFuZ2UiXTtjbGFzcyBIaHtzdGF0aWMg''@;'; put 'put ''Z2V0IERFRkFVTFRTKCl7cmV0dXJuIG4zKHtjbGFzc05hbWU6IiIsdmFsdWU6IiIsdGFnTmFtZToiZGl2IixjaGlsZHJlbjpbXSx3cmFwSXQ6ITB9KX1jb25zdHJ1Y3RvcihsLGEpe2pUKHRoaXMsImhvdCIsdm9pZCAwKSxqVCh0aGlzLCJldmVudE1hbmFnZXIiLG5ldyBqMih0aGlzKSksalQo''@;'; put 'put ''dGhpcywib3B0aW9ucyIsdm9pZCAwKSxqVCh0aGlzLCJfZWxlbWVudCIsdm9pZCAwKSxqVCh0aGlzLCJidWlsZFN0YXRlIix2b2lkIDApLHRoaXMuaG90PWwsdGhpcy5vcHRpb25zPUV1KEhoLkRFRkFVTFRTLGEpLHRoaXMuX2VsZW1lbnQ9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVs''@;'; put 'put ''ZW1lbnQodGhpcy5vcHRpb25zLndyYXBJdD8iZGl2Ijp0aGlzLm9wdGlvbnMudGFnTmFtZSl9c2V0VmFsdWUobCl7dGhpcy5vcHRpb25zLnZhbHVlPWwsdGhpcy51cGRhdGUoKX1nZXRWYWx1ZSgpe3JldHVybiB0aGlzLm9wdGlvbnMudmFsdWV9Z2V0IGVsZW1lbnQoKXtyZXR1cm4gdGhpcy5i''@;'; put 'put ''dWlsZFN0YXRlPT09b1E/dGhpcy5fZWxlbWVudDp0aGlzLmJ1aWxkU3RhdGU9PT1hUT8odGhpcy51cGRhdGUoKSx0aGlzLl9lbGVtZW50KToodGhpcy5idWlsZFN0YXRlPW9RLHRoaXMuYnVpbGQoKSx0aGlzLmJ1aWxkU3RhdGU9YVEsdGhpcy5fZWxlbWVudCl9aXNCdWlsdCgpe3JldHVybiB0''@;'; put 'put ''aGlzLmJ1aWxkU3RhdGU9PT1hUX10cmFuc2xhdGVJZlBvc3NpYmxlKGwpe3JldHVybiJzdHJpbmciPT10eXBlb2YgbCYmbC5zdGFydHNXaXRoKHExKT90aGlzLmhvdC5nZXRUcmFuc2xhdGVkUGhyYXNlKGwpOmx9YnVpbGQoKXtjb25zdCBsPShhLGQpPT57dGhpcy5ldmVudE1hbmFnZXIuYWRk''@;'; put 'put ''RXZlbnRMaXN0ZW5lcihhLGQsaD0+dGhpcy5ydW5Mb2NhbEhvb2tzKGQsaCx0aGlzKSl9O2lmKHRoaXMuYnVpbGRTdGF0ZXx8KHRoaXMuYnVpbGRTdGF0ZT1vUSksdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoImRhdGEtaG90LWlucHV0IiwhMCksdm9pZCAwIT09dGhpcy5vcHRpb25zLnRh''@;'; put 'put ''YkluZGV4JiZ0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLHRoaXMub3B0aW9ucy50YWJJbmRleCksdm9pZCAwIT09dGhpcy5vcHRpb25zLnJvbGUmJnRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCJyb2xlIix0aGlzLm9wdGlvbnMucm9sZSksdGhpcy5vcHRpb25zLmNs''@;'; put 'put ''YXNzTmFtZSYmVGkodGhpcy5fZWxlbWVudCx0aGlzLm9wdGlvbnMuY2xhc3NOYW1lKSx0aGlzLm9wdGlvbnMuY2hpbGRyZW4ubGVuZ3RoKVluKHRoaXMub3B0aW9ucy5jaGlsZHJlbixhPT50aGlzLl9lbGVtZW50LmFwcGVuZENoaWxkKGEuZWxlbWVudCkpO2Vsc2UgaWYodGhpcy5vcHRpb25z''@;'; put 'put ''LndyYXBJdCl7Y29uc3QgYT10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0aGlzLm9wdGlvbnMudGFnTmFtZSk7YS5zZXRBdHRyaWJ1dGUoImRhdGEtaG90LWlucHV0IiwhMCksWG8odGhpcy5vcHRpb25zLChkLGgpPT57dm9pZCAwIT09YVtoXSYmImNsYXNzTmFtZSIhPT1o''@;'; put 'put ''JiYidGFnTmFtZSIhPT1oJiYiY2hpbGRyZW4iIT09aCYmKGFbaF09dGhpcy50cmFuc2xhdGVJZlBvc3NpYmxlKGQpKX0pLHRoaXMuX2VsZW1lbnQuYXBwZW5kQ2hpbGQoYSksWW4obzVlLGQ9PmwoYSxkKSl9ZWxzZSBZbihvNWUsYT0+bCh0aGlzLl9lbGVtZW50LGEpKX11cGRhdGUoKXt9cmVz''@;'; put 'put ''ZXQoKXt0aGlzLm9wdGlvbnMudmFsdWU9IiIsdGhpcy51cGRhdGUoKX1zaG93KCl7dGhpcy5lbGVtZW50LnN0eWxlLmRpc3BsYXk9IiJ9aGlkZSgpe3RoaXMuZWxlbWVudC5zdHlsZS5kaXNwbGF5PSJub25lIn1mb2N1cygpe31kZXN0cm95KCl7dGhpcy5ldmVudE1hbmFnZXIuZGVzdHJveSgp''@;'; put 'put ''LHRoaXMuZXZlbnRNYW5hZ2VyPW51bGwsdGhpcy5ob3Q9bnVsbCx0aGlzLl9lbGVtZW50LnBhcmVudE5vZGUmJnRoaXMuX2VsZW1lbnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLl9lbGVtZW50KSx0aGlzLl9lbGVtZW50PW51bGx9fWZ1bmN0aW9uIHM1ZShjLGwpe2lmKGwuaGFzKGMp''@;'; put 'put ''KXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gekYoYyxsKXtyZXR1cm4gYy5nZXQoc1EoYyxsKSl9ZnVuY3Rpb24gc1EoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVv''@;'; put 'put ''ZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfVRsKEhoLHkxKTt2YXIgcnc9bmV3IFdlYWtNYXAsbDVlPW5ldyBXZWFrU2V0O2Ns''@;'; put 'put ''YXNzIGk2IGV4dGVuZHMgSGh7c3RhdGljIGdldCBERUZBVUxUUygpe3JldHVybiBuMyh7cGxhY2Vob2xkZXI6IiIsdHlwZToidGV4dCIsdGFnTmFtZToiaW5wdXQiLHRhYkluZGV4Oi0xfSl9Y29uc3RydWN0b3IobCxhKXtzdXBlcihsLEV1KGk2LkRFRkFVTFRTLGEpKSxmdW5jdGlvbiBNZHQo''@;'; put 'put ''YyxsKXtzNWUoYyxsKSxsLmFkZChjKX0odGhpcyxsNWUpLGZ1bmN0aW9uIHhkdChjLGwsYSl7czVlKGMsbCksbC5zZXQoYyxhKX0odGhpcyxydyx2b2lkIDApLHRoaXMucmVnaXN0ZXJIb29rcygpfXJlZ2lzdGVySG9va3MoKXt0aGlzLmFkZExvY2FsSG9vaygia2V5dXAiLGw9PnNRKGw1ZSx0''@;'; put 'put ''aGlzLFRkdCkuY2FsbCh0aGlzLGwpKX1idWlsZCgpe3N1cGVyLmJ1aWxkKCk7Y29uc3QgbD10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7KGZ1bmN0aW9uIEVkdChjLGwsYSl7Yy5zZXQoc1EoYyxsKSxhKX0pKHJ3LHRoaXMsdGhpcy5fZWxlbWVudC5maXJzdENo''@;'; put 'put ''aWxkKSxUaSh0aGlzLl9lbGVtZW50LCJodFVJSW5wdXQiKSxUaShsLCJodFVJSW5wdXRJY29uIiksdGhpcy5fZWxlbWVudC5hcHBlbmRDaGlsZChsKSx0aGlzLnVwZGF0ZSgpfXVwZGF0ZSgpe3RoaXMuaXNCdWlsdCgpJiYoekYocncsdGhpcykudHlwZT10aGlzLm9wdGlvbnMudHlwZSx6Rihy''@;'; put 'put ''dyx0aGlzKS5wbGFjZWhvbGRlcj10aGlzLnRyYW5zbGF0ZUlmUG9zc2libGUodGhpcy5vcHRpb25zLnBsYWNlaG9sZGVyKSx6Rihydyx0aGlzKS52YWx1ZT10aGlzLnRyYW5zbGF0ZUlmUG9zc2libGUodGhpcy5vcHRpb25zLnZhbHVlKSl9Zm9jdXMoKXt0aGlzLmlzQnVpbHQoKSYmekYocncs''@;'; put 'put ''dGhpcykuZm9jdXMoKX19ZnVuY3Rpb24gVGR0KGMpe3RoaXMub3B0aW9ucy52YWx1ZT1jLnRhcmdldC52YWx1ZX1mdW5jdGlvbiB6VChjLGwsYSl7YzVlKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBjNWUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5p''@;'; put 'put ''dGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIGl3KGMsbCxhKXtyZXR1cm4gYy5zZXQoVVQoYyxsKSxhKSxhfWZ1bmN0aW9uICRjKGMsbCl7cmV0dXJuIGMuZ2V0KFVUKGMsbCkpfWZ1bmN0aW9uIFVUKGMsbCxhKXtpZigiZnVu''@;'; put 'put ''Y3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgZzA9bmV3IFdlYWtNYXAsVUY9bmV3IFdlYWtNYXAs''@;'; put 'put ''WkY9bmV3IFdlYWtNYXAsbFE9bmV3IFdlYWtNYXAsV0Y9bmV3IFdlYWtNYXAsWUY9bmV3IFdlYWtTZXQ7Y2xhc3MgWlQgZXh0ZW5kcyBIaHtzdGF0aWMgZ2V0IERFRkFVTFRTKCl7cmV0dXJuIG4zKHtjbGFzc05hbWU6Imh0VUlTZWxlY3QiLHdyYXBJdDohMSx0YWJJbmRleDotMX0pfWNvbnN0''@;'; put 'put ''cnVjdG9yKGwsYSl7c3VwZXIobCxFdShaVC5ERUZBVUxUUyxhKSksZnVuY3Rpb24gQWR0KGMsbCl7YzVlKGMsbCksbC5hZGQoYyl9KHRoaXMsWUYpLHpUKHRoaXMsZzAsbnVsbCkselQodGhpcyxVRixbXSkselQodGhpcyxaRix2b2lkIDApLHpUKHRoaXMsbFEsdm9pZCAwKSx6VCh0aGlzLFdG''@;'; put 'put ''LHZvaWQgMCksdGhpcy5yZWdpc3Rlckhvb2tzKCl9Z2V0TWVudSgpe3JldHVybiAkYyhnMCx0aGlzKX1yZWdpc3Rlckhvb2tzKCl7dGhpcy5hZGRMb2NhbEhvb2soImNsaWNrIiwoKT0+VVQoWUYsdGhpcyxJZHQpLmNhbGwodGhpcykpfXNldEl0ZW1zKGwpe2l3KFVGLHRoaXMsdGhpcy50cmFu''@;'; put 'put ''c2xhdGVOYW1lcyhsKSksJGMoZzAsdGhpcykmJiRjKGcwLHRoaXMpLnNldE1lbnVJdGVtcygkYyhVRix0aGlzKSl9dHJhbnNsYXRlTmFtZXMobCl7cmV0dXJuIFluKGwsYT0+e2EubmFtZT10aGlzLnRyYW5zbGF0ZUlmUG9zc2libGUoYS5uYW1lKX0pLGx9YnVpbGQoKXtzdXBlci5idWlsZCgp''@;'; put 'put ''LGl3KGcwLHRoaXMsbmV3IHFfKHRoaXMuaG90LHtjbGFzc05hbWU6Imh0U2VsZWN0VUkgaHRGaWx0ZXJzQ29uZGl0aW9uc01lbnUiLGtlZXBJblZpZXdwb3J0OiExLHN0YW5kYWxvbmU6ITAsY29udGFpbmVyOnRoaXMub3B0aW9ucy5tZW51Q29udGFpbmVyfSkpLCRjKGcwLHRoaXMpLnNldE1l''@;'; put 'put ''bnVJdGVtcygkYyhVRix0aGlzKSk7Y29uc3QgbD1uZXcgSGgodGhpcy5ob3Qse2NsYXNzTmFtZToiaHRVSVNlbGVjdENhcHRpb24ifSksYT1uZXcgSGgodGhpcy5ob3Qse2NsYXNzTmFtZToiaHRVSVNlbGVjdERyb3Bkb3duIn0pO2l3KFpGLHRoaXMsbCksaXcobFEsdGhpcyxsLmVsZW1lbnQp''@;'; put 'put ''LGl3KFdGLHRoaXMsYSksdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5hcmlhVGFncyYmKHZvKGEuZWxlbWVudCxbVjcoKV0pLHZvKHRoaXMuX2VsZW1lbnQsW1sicm9sZSIsImxpc3Rib3giXV0pKSxZbihbbCxhXSxkPT50aGlzLl9lbGVtZW50LmFwcGVuZENoaWxkKGQuZWxlbWVudCkpLCRjKGcw''@;'; put 'put ''LHRoaXMpLmFkZExvY2FsSG9vaygic2VsZWN0IixkPT5VVChZRix0aGlzLGtkdCkuY2FsbCh0aGlzLGQpKSwkYyhnMCx0aGlzKS5hZGRMb2NhbEhvb2soImFmdGVyQ2xvc2UiLCgpPT5VVChZRix0aGlzLERkdCkuY2FsbCh0aGlzKSksdGhpcy51cGRhdGUoKX11cGRhdGUoKXtpZighdGhpcy5p''@;'; put 'put ''c0J1aWx0KCkpcmV0dXJuO2xldCBsO2w9dGhpcy5vcHRpb25zLnZhbHVlP3RoaXMub3B0aW9ucy52YWx1ZS5uYW1lOiRjKGcwLHRoaXMpLmhvdC5nZXRUcmFuc2xhdGVkUGhyYXNlKHdQKSwkYyhsUSx0aGlzKS50ZXh0Q29udGVudD1sLHN1cGVyLnVwZGF0ZSgpfW9wZW5PcHRpb25zKCl7Y29u''@;'; put 'put ''c3QgbD10aGlzLmVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7JGMoZzAsdGhpcykmJigkYyhnMCx0aGlzKS5vcGVuKCksJGMoZzAsdGhpcykuc2V0UG9zaXRpb24oe2xlZnQ6dGhpcy5ob3QuaXNMdHIoKT9sLmxlZnQtNTpsLmxlZnQtMzEsdG9wOmwudG9wLTEsd2lkdGg6bC53aWR0''@;'; put 'put ''aCxoZWlnaHQ6bC5oZWlnaHR9KSwkYyhnMCx0aGlzKS5nZXROYXZpZ2F0b3IoKS50b0ZpcnN0SXRlbSgpLCRjKGcwLHRoaXMpLmdldEtleWJvYXJkU2hvcnRjdXRzQ3RybCgpLmFkZEN1c3RvbVNob3J0Y3V0cyhbe2tleXM6W1siVGFiIl0sWyJTaGlmdCIsIlRhYiJdXSxjYWxsYmFjazphPT57''@;'; put 'put ''dGhpcy5jbG9zZU9wdGlvbnMoKSx0aGlzLnJ1bkxvY2FsSG9va3MoInRhYktleWRvd24iLGEpfX0se2tleXM6W1siQ29udHJvbC9NZXRhIiwiQSJdXSxjYWxsYmFjazooKT0+ITF9XSkpfWNsb3NlT3B0aW9ucygpeyRjKGcwLHRoaXMpJiYkYyhnMCx0aGlzKS5jbG9zZSgpfWZvY3VzKCl7dGhp''@;'; put 'put ''cy5pc0J1aWx0KCkmJnRoaXMuZWxlbWVudC5mb2N1cygpfWRlc3Ryb3koKXskYyhnMCx0aGlzKSYmKCRjKGcwLHRoaXMpLmRlc3Ryb3koKSxpdyhnMCx0aGlzLG51bGwpKSwkYyhaRix0aGlzKSYmJGMoWkYsdGhpcykuZGVzdHJveSgpLCRjKFdGLHRoaXMpJiYkYyhXRix0aGlzKS5kZXN0cm95''@;'; put 'put ''KCksc3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiBrZHQoYyl7Yy5uYW1lIT09c3MmJih0aGlzLm9wdGlvbnMudmFsdWU9Yyx0aGlzLnVwZGF0ZSgpLHRoaXMucnVuTG9jYWxIb29rcygic2VsZWN0Iix0aGlzLm9wdGlvbnMudmFsdWUpKX1mdW5jdGlvbiBEZHQoKXt0aGlzLnJ1bkxvY2FsSG9v''@;'; put 'put ''a3MoImFmdGVyQ2xvc2UiKX1mdW5jdGlvbiBJZHQoKXt0aGlzLm9wZW5PcHRpb25zKCl9ZnVuY3Rpb24gdTVlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBPZHQoYyl7dmFyIGw9ZnVuY3Rpb24gUGR0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5''@;'; put 'put ''bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1''@;'; put 'put ''cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9''@;'; put 'put ''KTpjW2xdPWEsY31mdW5jdGlvbiBkNWUoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVj''@;'; put 'put ''dCIpfXZhciBjUT1uZXcgV2Vha1NldDtjbGFzcyB1USBleHRlbmRzIEhUe2NvbnN0cnVjdG9yKGwsYSl7c3VwZXIobCx7aWQ6YS5pZCxzdGF0ZWxlc3M6ITF9KSxmdW5jdGlvbiBSZHQoYyxsKXsoZnVuY3Rpb24gTGR0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fu''@;'; put 'put ''bm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5hZGQoYyl9KHRoaXMsY1EpLHU1ZSh0aGlzLCJuYW1lIiwiIiksdTVlKHRoaXMsImFkZFNlcGFyYXRvciIsITEpLHRoaXMubmFtZT1hLm5hbWUsdGhpcy5hZGRTZXBh''@;'; put 'put ''cmF0b3I9YS5hZGRTZXBhcmF0b3IsdGhpcy5lbGVtZW50cy5wdXNoKG5ldyBaVCh0aGlzLmhvdCx7bWVudUNvbnRhaW5lcjphLm1lbnVDb250YWluZXJ9KSksdGhpcy5lbGVtZW50cy5wdXNoKG5ldyBpNih0aGlzLmhvdCx7cGxhY2Vob2xkZXI6Y1h9KSksdGhpcy5lbGVtZW50cy5wdXNoKG5l''@;'; put 'put ''dyBpNih0aGlzLmhvdCx7cGxhY2Vob2xkZXI6dVh9KSksdGhpcy5yZWdpc3Rlckhvb2tzKCl9cmVnaXN0ZXJIb29rcygpe3RoaXMuZ2V0U2VsZWN0RWxlbWVudCgpLmFkZExvY2FsSG9vaygic2VsZWN0IixsPT5kNWUoY1EsdGhpcyxGZHQpLmNhbGwodGhpcyxsKSkuYWRkTG9jYWxIb29rKCJh''@;'; put 'put ''ZnRlckNsb3NlIiwoKT0+dGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlckNsb3NlIikpLmFkZExvY2FsSG9vaygidGFiS2V5ZG93biIsbD0+dGhpcy5ydW5Mb2NhbEhvb2tzKCJzZWxlY3RUYWJLZXlkb3duIixsKSksWW4odGhpcy5nZXRJbnB1dEVsZW1lbnRzKCksbD0+e2wuYWRkTG9jYWxIb29r''@;'; put 'put ''KCJrZXlkb3duIixhPT5kNWUoY1EsdGhpcyxIZHQpLmNhbGwodGhpcyxhKSl9KX1zZXRTdGF0ZShsKXtpZih0aGlzLnJlc2V0KCksIWwpcmV0dXJuO2NvbnN0IGE9bjMobC5jb21tYW5kKTthLm5hbWUuc3RhcnRzV2l0aChXYykmJihhLm5hbWU9dGhpcy5ob3QuZ2V0VHJhbnNsYXRlZFBocmFz''@;'; put 'put ''ZShhLm5hbWUpKSx0aGlzLmdldFNlbGVjdEVsZW1lbnQoKS5zZXRWYWx1ZShhKSxZbihsLmFyZ3MsKGQsaCk9PntpZihoPmEuaW5wdXRzQ291bnQtMSlyZXR1cm4hMTtjb25zdCBmPXRoaXMuZ2V0SW5wdXRFbGVtZW50KGgpO2Yuc2V0VmFsdWUoZCksZlthLmlucHV0c0NvdW50Pmg/InNob3ci''@;'; put 'put ''OiJoaWRlIl0oKSxofHx0aGlzLmhvdC5fcmVnaXN0ZXJUaW1lb3V0KCgpPT5mLmZvY3VzKCksMTApfSl9Z2V0U3RhdGUoKXtjb25zdCBsPXRoaXMuZ2V0U2VsZWN0RWxlbWVudCgpLmdldFZhbHVlKCl8fHc5KEUwKSxhPVtdO3JldHVybiBZbih0aGlzLmdldElucHV0RWxlbWVudHMoKSwoZCxo''@;'; put 'put ''KT0+e2wuaW5wdXRzQ291bnQ+aCYmYS5wdXNoKGQuZ2V0VmFsdWUoKSl9KSx7Y29tbWFuZDpsLGFyZ3M6YX19dXBkYXRlU3RhdGUobCxhKXtjb25zdCBkPXc5KGw/bC5uYW1lOkUwKTt0aGlzLnN0YXRlLnNldFZhbHVlQXRJbmRleChhLHtjb21tYW5kOmQsYXJnczpsP2wuYXJnczpbXX0pLGx8''@;'; put 'put ''fFluKHRoaXMuZ2V0SW5wdXRFbGVtZW50cygpLGg9Pmguc2V0VmFsdWUobnVsbCkpfWdldFNlbGVjdEVsZW1lbnQoKXtyZXR1cm4gdGhpcy5lbGVtZW50cy5maWx0ZXIobD0+bCBpbnN0YW5jZW9mIFpUKVswXX1nZXRJbnB1dEVsZW1lbnQoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZv''@;'; put 'put ''aWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06MDtyZXR1cm4gdGhpcy5nZXRJbnB1dEVsZW1lbnRzKClbbF19Z2V0SW5wdXRFbGVtZW50cygpe3JldHVybiB0aGlzLmVsZW1lbnRzLmZpbHRlcihsPT5sIGluc3RhbmNlb2YgaTYpfWdldE1lbnVJdGVtRGVzY3JpcHRvcigpe3JldHVy''@;'; put 'put ''bntrZXk6dGhpcy5pZCxuYW1lOnRoaXMubmFtZSxpc0NvbW1hbmQ6ITEsZGlzYWJsZVNlbGVjdGlvbjohMCxoaWRkZW46KCk9PnRoaXMuaXNIaWRkZW4oKSxyZW5kZXJlcjoobCxhLGQsaCxmLHYpPT57VGkoYS5wYXJlbnROb2RlLCJodEZpbHRlcnNNZW51Q29uZGl0aW9uIiksdGhpcy5hZGRT''@;'; put 'put ''ZXBhcmF0b3ImJlRpKGEucGFyZW50Tm9kZSwiYm9yZGVyIik7Y29uc3QgTT10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIFRpKE0sImh0RmlsdGVyc01lbnVMYWJlbCIpLE0udGV4dENvbnRlbnQ9dixhLmFwcGVuZENoaWxkKE0pLGEucGFyZW50RWxl''@;'; put 'put ''bWVudC5oYXNBdHRyaWJ1dGUoImdob3N0LXRhYmxlIil8fFluKHRoaXMuZWxlbWVudHMsRD0+YS5hcHBlbmRDaGlsZChELmVsZW1lbnQpKSxhfX19cmVzZXQoKXtjb25zdCBsPXRoaXMuaG90LmdldFBsdWdpbigiZmlsdGVycyIpLmdldFNlbGVjdGVkQ29sdW1uKCk7bGV0IGE9W3c5KEUwKV07''@;'; put 'put ''aWYobnVsbCE9PWwpe2NvbnN0e3Zpc3VhbEluZGV4OmR9PWw7YT1mdW5jdGlvbiB3ZHQoYyl7Y29uc3QgbD1bXTtsZXQgYT1jO3JldHVybiBhNWVbYV18fChhPSJ0ZXh0IiksWW4oYTVlW2FdLGQ9PntsZXQgaDtoPWQ9PT1zcz97bmFtZTpzc306bjModzkoZCkpLGwucHVzaChoKX0pLGx9KHRo''@;'; put 'put ''aXMuaG90LmdldERhdGFUeXBlKDAsZCx0aGlzLmhvdC5jb3VudFJvd3MoKSxkKSl9WW4odGhpcy5nZXRJbnB1dEVsZW1lbnRzKCksZD0+ZC5oaWRlKCkpLHRoaXMuZ2V0U2VsZWN0RWxlbWVudCgpLnNldEl0ZW1zKGEpLHN1cGVyLnJlc2V0KCksdGhpcy5nZXRTZWxlY3RFbGVtZW50KCkuc2V0''@;'; put 'put ''VmFsdWUoYVswXSl9fWZ1bmN0aW9uIEZkdChjKXtZbih0aGlzLmdldElucHV0RWxlbWVudHMoKSwobCxhKT0+e2xbYy5pbnB1dHNDb3VudD5hPyJzaG93IjoiaGlkZSJdKCksMD09PWEmJnRoaXMuaG90Ll9yZWdpc3RlclRpbWVvdXQoKCk9PmwuZm9jdXMoKSwxMCl9KSx0aGlzLnJ1bkxvY2Fs''@;'; put 'put ''SG9va3MoImNoYW5nZSIsYyl9ZnVuY3Rpb24gSGR0KGMpe3VfKGMua2V5Q29kZSwiRVNDQVBFIikmJih0aGlzLnJ1bkxvY2FsSG9va3MoImNhbmNlbCIpLEIyKGMpKX1jb25zdCBXVD17fTtmdW5jdGlvbiBWZHQoYyl7cmV0dXJuIFdUW2NdLm5hbWV9ZnVuY3Rpb24gZFEoYyxsLGEpe1dUW2Nd''@;'; put 'put ''PXtuYW1lOmwsZnVuYzphfX1jb25zdCBhNj0iY29uanVuY3Rpb24iO2RRKGE2LHJYLGZ1bmN0aW9uIGpkdChjLGwpe3JldHVybiBjLmV2ZXJ5KGE9PmEuZnVuYyhsKSl9KTtjb25zdCBHRj0iZGlzanVuY3Rpb24iO2RRKEdGLENQLGZ1bmN0aW9uIFVkdChjLGwpe3JldHVybiBjLnNvbWUoYT0+''@;'; put 'put ''YS5mdW5jKGwpKX0pO2NvbnN0IGhRPSJkaXNqdW5jdGlvbldpdGhFeHRyYUNvbmRpdGlvbiI7ZnVuY3Rpb24gaDVlKGMsbCxhKXsoZnVuY3Rpb24gWWR0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVt''@;'; put 'put ''ZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBZVChjLGwpe3JldHVybiBjLmdldChwNWUoYyxsKSl9ZnVuY3Rpb24gZjVlKGMsbCxhKXtyZXR1cm4gYy5zZXQocDVlKGMsbCksYSksYX1mdW5jdGlvbiBwNWUoYyxsLGEpe2lmKCJmdW5jdGlvbiI9''@;'; put 'put ''PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfWRRKGhRLENQLGZ1bmN0aW9uIFdkdChjLGwpe2lmKGMubGVuZ3RoPDMp''@;'; put 'put ''dGhyb3cgRXJyb3IoIk9wZXJhdGlvbiBkb2Vzbid0IHdvcmsgb24gbGVzcyB0aGVuIHRocmVlIGNvbmRpdGlvbnMuIik7cmV0dXJuIGMuc2xpY2UoMCxjLmxlbmd0aC0xKS5zb21lKGE9PmEuZnVuYyhsKSkmJmNbYy5sZW5ndGgtMV0uZnVuYyhsKX0pO3ZhciBhdz1uZXcgV2Vha01hcCxmUT1u''@;'; put 'put ''ZXcgV2Vha01hcDtjbGFzcyAkRiBleHRlbmRzIEhoe3N0YXRpYyBnZXQgREVGQVVMVFMoKXtyZXR1cm4gbjMoe3R5cGU6InJhZGlvIix0YWdOYW1lOiJpbnB1dCIsY2xhc3NOYW1lOiJodFVJUmFkaW8iLGxhYmVsOnt9fSl9Y29uc3RydWN0b3IobCxhKXtzdXBlcihsLEV1KCRGLkRFRkFVTFRT''@;'; put 'put ''LGEpKSxoNWUodGhpcyxhdyx2b2lkIDApLGg1ZSh0aGlzLGZRLHZvaWQgMCl9YnVpbGQoKXtzdXBlci5idWlsZCgpO2NvbnN0IGw9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImxhYmVsIik7bC50ZXh0Q29udGVudD10aGlzLnRyYW5zbGF0ZUlmUG9zc2libGUodGhpcy5v''@;'; put 'put ''cHRpb25zLmxhYmVsLnRleHRDb250ZW50KSxsLmh0bWxGb3I9dGhpcy50cmFuc2xhdGVJZlBvc3NpYmxlKHRoaXMub3B0aW9ucy5sYWJlbC5odG1sRm9yKSxmNWUoZlEsdGhpcyxsKSxmNWUoYXcsdGhpcyx0aGlzLl9lbGVtZW50LmZpcnN0Q2hpbGQpLFlUKGF3LHRoaXMpLmNoZWNrZWQ9dGhp''@;'; put 'put ''cy5vcHRpb25zLmNoZWNrZWQsdGhpcy5fZWxlbWVudC5hcHBlbmRDaGlsZChsKSx0aGlzLnVwZGF0ZSgpfXVwZGF0ZSgpe3RoaXMuaXNCdWlsdCgpJiYoWVQoZlEsdGhpcykudGV4dENvbnRlbnQ9dGhpcy50cmFuc2xhdGVJZlBvc3NpYmxlKHRoaXMub3B0aW9ucy5sYWJlbC50ZXh0Q29udGVu''@;'; put 'put ''dCkpfWlzQ2hlY2tlZCgpe3JldHVybiEhdGhpcy5pc0J1aWx0KCkmJllUKGF3LHRoaXMpLmNoZWNrZWR9c2V0Q2hlY2tlZCgpe2xldCBsPSEoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0pfHxhcmd1bWVudHNbMF07dGhpcy5pc0J1aWx0KCkmJihZVChhdyx0aGlz''@;'; put 'put ''KS5jaGVja2VkPWwpfWZvY3VzKCl7dGhpcy5pc0J1aWx0KCkmJllUKGF3LHRoaXMpLmZvY3VzKCl9fXZhciBtNWU9bmV3IFdlYWtTZXQ7Y2xhc3MgUWR0IGV4dGVuZHMgSFR7Y29uc3RydWN0b3IobCxhKXtzdXBlcihsLHtpZDphLmlkLHN0YXRlbGVzczohMX0pLGZ1bmN0aW9uIEdkdChjLGwp''@;'; put 'put ''eyhmdW5jdGlvbiAkZHQoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLmFkZChjKX0odGhpcyxtNWUpLGZ1bmN0aW9uIEtkdChjLGwsYSl7''@;'; put 'put ''cmV0dXJuKGw9ZnVuY3Rpb24gcWR0KGMpe3ZhciBsPWZ1bmN0aW9uIFhkdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVj''@;'; put 'put ''dCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBs''@;'; put 'put ''P2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9KHRoaXMsIm5hbWUiLCIiKSx0aGlzLm5hbWU9YS5uYW1lLHRoaXMuYnVpbGRPcGVyYXRvcnNFbGVtZW50''@;'; put 'put ''KCl9Z2V0TWVudUl0ZW1EZXNjcmlwdG9yKCl7cmV0dXJue2tleTp0aGlzLmlkLG5hbWU6dGhpcy5uYW1lLGlzQ29tbWFuZDohMSxkaXNhYmxlU2VsZWN0aW9uOiEwLGhpZGRlbjooKT0+dGhpcy5pc0hpZGRlbigpLHJlbmRlcmVyOihsLGEpPT4oVGkoYS5wYXJlbnROb2RlLCJodEZpbHRlcnNN''@;'; put 'put ''ZW51T3BlcmF0b3JzIiksWW4odGhpcy5lbGVtZW50cyxkPT5hLmFwcGVuZENoaWxkKGQuZWxlbWVudCkpLGEpfX1idWlsZE9wZXJhdG9yc0VsZW1lbnQoKXtjb25zdCBsPVthNixHRl07WW4obCxhPT57Y29uc3QgZD1uZXcgJEYodGhpcy5ob3Qse25hbWU6Im9wZXJhdG9yIixsYWJlbDp7aHRt''@;'; put 'put ''bEZvcjphLHRleHRDb250ZW50OlZkdChhKX0sdmFsdWU6YSxjaGVja2VkOmE9PT1sWzBdLGlkOmF9KTtkLmFkZExvY2FsSG9vaygiY2hhbmdlIixoPT5mdW5jdGlvbiBKZHQoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVu''@;'; put 'put ''Z3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfShtNWUsdGhpcyxlaHQpLmNhbGwodGhpcyxoKSksdGhpcy5lbGVtZW50cy5wdXNoKGQpfSl9c2V0Q2hlY2tlZChsKXtpZih0aGlzLmVsZW1lbnRzLmxl''@;'; put 'put ''bmd0aDxsKXRocm93IEVycm9yKGdsYFJhZGlvIGJ1dHRvbiB3aXRoIGluZGV4ICR7bH0gZG9lc24ndCBleGlzdC5gKTtZbih0aGlzLmVsZW1lbnRzLChhLGQpPT57YS5zZXRDaGVja2VkKGQ9PT1sKX0pfWdldEFjdGl2ZU9wZXJhdGlvbklkKCl7Y29uc3QgbD10aGlzLmVsZW1lbnRzLmZpbmQo''@;'; put 'put ''YT0+YSBpbnN0YW5jZW9mICRGJiZhLmlzQ2hlY2tlZCgpKTtyZXR1cm4gbD9sLmdldFZhbHVlKCk6YTZ9Z2V0U3RhdGUoKXtyZXR1cm4gdGhpcy5nZXRBY3RpdmVPcGVyYXRpb25JZCgpfXNldFN0YXRlKGwpe3RoaXMucmVzZXQoKSxsJiZ0aGlzLmdldEFjdGl2ZU9wZXJhdGlvbklkKCkhPT1s''@;'; put 'put ''JiZZbih0aGlzLmVsZW1lbnRzLGE9PnthLnNldENoZWNrZWQoYS5nZXRWYWx1ZSgpPT09bCl9KX11cGRhdGVTdGF0ZSgpe2xldCBkPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTphNjtkPT09aFEmJihkPUdGKSx0aGlzLnN0YXRlLnNldFZh''@;'; put 'put ''bHVlQXRJbmRleChhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCxkKX1yZXNldCgpe3RoaXMuc2V0Q2hlY2tlZCgwKX19ZnVuY3Rpb24gZWh0KGMpe3RoaXMuc2V0U3RhdGUoYy50YXJnZXQudmFsdWUpfWZ1bmN0aW9uIG5odChjLGwpe2xldCBhPWM7cmV0dXJuIiI9PT1h''@;'; put 'put ''JiYoYT1gKCR7bH0pYCksYX1mdW5jdGlvbiBHVChjKXtjb25zdCBsPW5ldyBTZXQoYyk7cmV0dXJuIGZ1bmN0aW9uKGEpe3JldHVybiBsLmhhcyhhKX19ZnVuY3Rpb24gcFEoYyl7cmV0dXJuIGM/PyIifWZ1bmN0aW9uIGdRKGMpe3JldHVybiBBcnJheS5mcm9tKG5ldyBTZXQoYykpLm1hcChs''@;'; put 'put ''PT5wUShsKSkuc29ydCgobCxhKT0+Im51bWJlciI9PXR5cGVvZiBsJiYibnVtYmVyIj09dHlwZW9mIGE/bC1hOmw9PT1hPzA6bD5hPzE6LTEpfWZ1bmN0aW9uIHY1ZShjLGwsYSxkKXtjb25zdCBoPVtdLGY9Yz09PWw7bGV0IHY7cmV0dXJuIGZ8fCh2PUdUKGwpKSxjLmZvckVhY2goTT0+e2xl''@;'; put 'put ''dCBEPSExOyhmfHx2KE0pKSYmKEQ9ITApO2NvbnN0IFo9e2NoZWNrZWQ6RCx2YWx1ZTpNLHZpc3VhbFZhbHVlOm5odChNLGEpfTtkJiZkKFopLGgucHVzaChaKX0pLGh9ZnVuY3Rpb24gbVEoYyxsKXtyZXR1cm4gYy5nZXQoYjVlKGMsbCkpfWZ1bmN0aW9uIGI1ZShjLGwsYSl7aWYoImZ1bmN0''@;'; put 'put ''aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9cTJlKCk7dmFyICRUPW5ldyBXZWFrTWFwO2NsYXNzIEtUIGV4''@;'; put 'put ''dGVuZHMgSGh7c3RhdGljIGdldCBERUZBVUxUUygpe3JldHVybiBuMyh7aHJlZjoiIyIsdGFnTmFtZToiYSIsdGFiSW5kZXg6LTEscm9sZToiYnV0dG9uIn0pfWNvbnN0cnVjdG9yKGwsYSl7c3VwZXIobCxFdShLVC5ERUZBVUxUUyxhKSksZnVuY3Rpb24gcmh0KGMsbCxhKXsoZnVuY3Rpb24g''@;'; put 'put ''aWh0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5zZXQoYyxhKX0odGhpcywkVCx2b2lkIDApfWJ1aWxkKCl7c3VwZXIuYnVpbGQoKSxm''@;'; put 'put ''dW5jdGlvbiBhaHQoYyxsLGEpe2Muc2V0KGI1ZShjLGwpLGEpfSgkVCx0aGlzLHRoaXMuX2VsZW1lbnQuZmlyc3RDaGlsZCl9dXBkYXRlKCl7dGhpcy5pc0J1aWx0KCkmJihtUSgkVCx0aGlzKS50ZXh0Q29udGVudD10aGlzLnRyYW5zbGF0ZUlmUG9zc2libGUodGhpcy5vcHRpb25zLnRleHRD''@;'; put 'put ''b250ZW50KSl9Zm9jdXMoKXt0aGlzLmlzQnVpbHQoKSYmbVEoJFQsdGhpcykuZm9jdXMoKX1hY3RpdmF0ZSgpe21RKCRULHRoaXMpLmNsaWNrKCl9fWZ1bmN0aW9uIG93KGMsbCxhKXt5NWUoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIHk1ZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBU''@;'; put 'put ''eXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gam8oYyxsKXtyZXR1cm4gYy5nZXQoc3coYyxsKSl9ZnVuY3Rpb24gbTMoYyxsLGEpe3JldHVybiBjLnNldChzdyhjLGwpLGEpLGF9ZnVuY3Rp''@;'; put 'put ''b24gc3coYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfWNvbnN0IF81ZT0ibXVs''@;'; put 'put ''dGlwbGVTZWxlY3QuaXRlbUJveCI7dmFyIHYzPW5ldyBXZWFrTWFwLHV1PW5ldyBXZWFrTWFwLHZRPW5ldyBXZWFrTWFwLEhnPW5ldyBXZWFrTWFwLG82PW5ldyBXZWFrTWFwLHM2PW5ldyBXZWFrTWFwLHFUPW5ldyBXZWFrU2V0O2NsYXNzIFhUIGV4dGVuZHMgSGh7c3RhdGljIGdldCBERUZB''@;'; put 'put ''VUxUUygpe3JldHVybiBuMyh7Y2xhc3NOYW1lOiJodFVJTXVsdGlwbGVTZWxlY3QiLHZhbHVlOltdfSl9Y29uc3RydWN0b3IobCxhKXtzdXBlcihsLEV1KFhULkRFRkFVTFRTLGEpKSxmdW5jdGlvbiBvaHQoYyxsKXt5NWUoYyxsKSxsLmFkZChjKX0odGhpcyxxVCksb3codGhpcyx2MyxbXSks''@;'; put 'put ''b3codGhpcyx1dSx2b2lkIDApLG93KHRoaXMsdlEsdm9pZCAwKSxvdyh0aGlzLEhnLHZvaWQgMCksb3codGhpcyxvNix2b2lkIDApLG93KHRoaXMsczYsdm9pZCAwKSxtMyhIZyx0aGlzLG5ldyBpNih0aGlzLmhvdCx7cGxhY2Vob2xkZXI6bFgsY2xhc3NOYW1lOiJodFVJTXVsdGlwbGVTZWxl''@;'; put 'put ''Y3RTZWFyY2gifSkpLG0zKG82LHRoaXMsbmV3IEtUKHRoaXMuaG90LHt0ZXh0Q29udGVudDppWCxjbGFzc05hbWU6Imh0VUlTZWxlY3RBbGwifSkpLG0zKHM2LHRoaXMsbmV3IEtUKHRoaXMuaG90LHt0ZXh0Q29udGVudDphWCxjbGFzc05hbWU6Imh0VUlDbGVhckFsbCJ9KSksdGhpcy5yZWdp''@;'; put 'put ''c3Rlckhvb2tzKCl9Z2V0SXRlbXNCb3goKXtyZXR1cm4gam8odXUsdGhpcyl9cmVnaXN0ZXJIb29rcygpe2pvKEhnLHRoaXMpLmFkZExvY2FsSG9vaygia2V5ZG93biIsbD0+c3cocVQsdGhpcyxsaHQpLmNhbGwodGhpcyxsKSksam8oSGcsdGhpcykuYWRkTG9jYWxIb29rKCJpbnB1dCIsbD0+''@;'; put 'put ''c3cocVQsdGhpcyxzaHQpLmNhbGwodGhpcyxsKSksam8obzYsdGhpcykuYWRkTG9jYWxIb29rKCJjbGljayIsbD0+c3cocVQsdGhpcyxjaHQpLmNhbGwodGhpcyxsKSksam8oczYsdGhpcykuYWRkTG9jYWxIb29rKCJjbGljayIsbD0+c3cocVQsdGhpcyx1aHQpLmNhbGwodGhpcyxsKSl9c2V0''@;'; put 'put ''SXRlbXMobCl7dmFyIGE7bTModjMsdGhpcyxsKSxudWxsPT09KGE9am8odXUsdGhpcykpfHx2b2lkIDA9PT1hfHxhLmxvYWREYXRhKGpvKHYzLHRoaXMpKX1zZXRMb2NhbGUobCl7bTModlEsdGhpcyxsKX1nZXRMb2NhbGUoKXtyZXR1cm4gam8odlEsdGhpcyl9Z2V0SXRlbXMoKXtyZXR1cm5b''@;'; put 'put ''Li4uam8odjMsdGhpcyldfWdldFZhbHVlKCl7cmV0dXJuIGZ1bmN0aW9uIGhodChjKXtjb25zdCBsPVtdO3JldHVybiBjLmZvckVhY2goYT0+e2EuY2hlY2tlZCYmbC5wdXNoKGEudmFsdWUpfSksbH0oam8odjMsdGhpcykpfWdldFNlYXJjaElucHV0RWxlbWVudCgpe3JldHVybiBqbyhIZyx0''@;'; put 'put ''aGlzKX1nZXRTZWxlY3RBbGxFbGVtZW50KCl7cmV0dXJuIGpvKG82LHRoaXMpfWdldENsZWFyQWxsRWxlbWVudCgpe3JldHVybiBqbyhzNix0aGlzKX1pc1NlbGVjdGVkQWxsVmFsdWVzKCl7cmV0dXJuIGpvKHYzLHRoaXMpLmxlbmd0aD09PXRoaXMuZ2V0VmFsdWUoKS5sZW5ndGh9YnVpbGQo''@;'; put 'put ''KXtzdXBlci5idWlsZCgpO2NvbnN0e3Jvb3REb2N1bWVudDpsfT10aGlzLmhvdCxhPWwuY3JlYXRlRWxlbWVudCgiZGl2IiksZD1uZXcgSGgodGhpcy5ob3Qse2NsYXNzTmFtZToiaHRVSVNlbGVjdGlvbkNvbnRyb2xzIixjaGlsZHJlbjpbam8obzYsdGhpcyksam8oczYsdGhpcyldfSk7dGhp''@;'; put 'put ''cy5fZWxlbWVudC5hcHBlbmRDaGlsZChqbyhIZyx0aGlzKS5lbGVtZW50KSx0aGlzLl9lbGVtZW50LmFwcGVuZENoaWxkKGQuZWxlbWVudCksdGhpcy5fZWxlbWVudC5hcHBlbmRDaGlsZChhKTtjb25zdCBoPWY9Pnt2YXIgdjtpZighdGhpcy5fZWxlbWVudClyZXR1cm47bnVsbD09PSh2PWpv''@;'; put 'put ''KHV1LHRoaXMpKXx8dm9pZCAwPT09dnx8di5kZXN0cm95KCksVGkoZiwiaHRVSU11bHRpcGxlU2VsZWN0SG90IiksbTModXUsdGhpcyxuZXcgdGhpcy5ob3QuY29uc3RydWN0b3IoZix7ZGF0YTpqbyh2Myx0aGlzKSxjb2x1bW5zOlt7ZGF0YToiY2hlY2tlZCIsdHlwZToiY2hlY2tib3giLGxh''@;'; put 'put ''YmVsOntwcm9wZXJ0eToidmlzdWFsVmFsdWUiLHBvc2l0aW9uOiJhZnRlciJ9fV0sYmVmb3JlUmVuZGVyZXI6KFoscmUsY2UsYmUsRWUsQmUpPT57Wi50aXRsZT1CZS5pbnN0YW5jZS5nZXREYXRhQXRSb3dQcm9wKHJlLEJlLmxhYmVsLnByb3BlcnR5KX0sYWZ0ZXJMaXN0ZW46KCk9Pnt0aGlz''@;'; put 'put ''LnJ1bkxvY2FsSG9va3MoImZvY3VzIix0aGlzKX0sYmVmb3JlT25DZWxsTW91c2VVcDooKT0+e2pvKHV1LHRoaXMpLmxpc3RlbigpfSxtb2RpZnlDb2xXaWR0aDpaPT57Y29uc3QgcmU9am8odXUsdGhpcykuY29udGFpbmVyLnNjcm9sbFdpZHRoLWYwKGwpO3JldHVybiB2b2lkIDAhPT1aJiZa''@;'; put 'put ''PHJlP3JlOlp9LG1heENvbHM6MSxhdXRvV3JhcENvbDohMCxoZWlnaHQ6MTEwLGNvcHlQYXN0ZTohMSxkaXNhYmxlVmlzdWFsU2VsZWN0aW9uOiJhcmVhIixmaWxsSGFuZGxlOiExLGZyYWdtZW50U2VsZWN0aW9uOiJjZWxsIix0YWJNb3Zlczp7cm93OjEsY29sOjB9LHRoZW1lTmFtZTp0aGlz''@;'; put 'put ''LmhvdC5nZXRDdXJyZW50VGhlbWVOYW1lKCksbGF5b3V0RGlyZWN0aW9uOnRoaXMuaG90LmlzUnRsKCk/InJ0bCI6Imx0ciJ9KSksam8odXUsdGhpcykuaW5pdCgpLHRoaXMuaG90LmFkZEhvb2soImFmdGVyU2V0VGhlbWUiLChaLHJlKT0+e3JlfHxqbyh1dSx0aGlzKS51c2VUaGVtZShaKX0p''@;'; put 'put ''O2NvbnN0IEQ9am8odXUsdGhpcykuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZ3JpZCIpO0QucmVtb3ZlU2hvcnRjdXRzQnlLZXlzKFsiVGFiIl0pLEQucmVtb3ZlU2hvcnRjdXRzQnlLZXlzKFsiU2hpZnQiLCJUYWIiXSksRC5hZGRTaG9ydGN1dCh7a2V5czpbWyJFc2NhcGUi''@;'; put 'put ''XV0sY2FsbGJhY2s6Wj0+e3RoaXMucnVuTG9jYWxIb29rcygia2V5ZG93biIsWix0aGlzKX0sZ3JvdXA6XzVlfSksRC5hZGRTaG9ydGN1dCh7a2V5czpbWyJUYWIiXSxbIlNoaWZ0IiwiVGFiIl1dLGNhbGxiYWNrOlo9Pntqbyh1dSx0aGlzKS5kZXNlbGVjdENlbGwoKSx0aGlzLnJ1bkxvY2Fs''@;'; put 'put ''SG9va3MoImtleWRvd24iLFosdGhpcyksdGhpcy5ydW5Mb2NhbEhvb2tzKCJsaXN0VGFiS2V5ZG93biIsWix0aGlzKX0sZ3JvdXA6XzVlfSl9O2goYSksdGhpcy5ob3QuX3JlZ2lzdGVyVGltZW91dCgoKT0+aChhKSwxMDApfWZvY3VzKCl7dGhpcy5pc0J1aWx0KCkmJmpvKHV1LHRoaXMpLmxp''@;'; put 'put ''c3RlbigpfXJlc2V0KCl7am8oSGcsdGhpcykucmVzZXQoKSxqbyhvNix0aGlzKS5yZXNldCgpLGpvKHM2LHRoaXMpLnJlc2V0KCl9dXBkYXRlKCl7dGhpcy5pc0J1aWx0KCkmJihqbyh1dSx0aGlzKS5sb2FkRGF0YShmdW5jdGlvbiBkaHQoYyxsKXtjb25zdCBhPUdUKGwpO3JldHVybiBjLm1h''@;'; put 'put ''cChkPT4oZC5jaGVja2VkPWEoZC52YWx1ZSksZCkpfShqbyh2Myx0aGlzKSx0aGlzLm9wdGlvbnMudmFsdWUpKSxzdXBlci51cGRhdGUoKSl9ZGVzdHJveSgpe3ZhciBsO251bGw9PT0obD1qbyh1dSx0aGlzKSl8fHZvaWQgMD09PWx8fGwuZGVzdHJveSgpLGpvKEhnLHRoaXMpLmRlc3Ryb3ko''@;'; put 'put ''KSxqbyhzNix0aGlzKS5kZXN0cm95KCksam8obzYsdGhpcykuZGVzdHJveSgpLG0zKEhnLHRoaXMsbnVsbCksbTMoczYsdGhpcyxudWxsKSxtMyhvNix0aGlzLG51bGwpLG0zKHV1LHRoaXMsbnVsbCksbTModjMsdGhpcyxudWxsKSxzdXBlci5kZXN0cm95KCl9fWZ1bmN0aW9uIHNodChjKXtj''@;'; put 'put ''b25zdCBsPWMudGFyZ2V0LnZhbHVlLnRvTG9jYWxlTG93ZXJDYXNlKHRoaXMuZ2V0TG9jYWxlKCkpO2xldCBhO2E9IiI9PT1sP1suLi5qbyh2Myx0aGlzKV06am8odjMsdGhpcykuZmlsdGVyKGQ9PmAke2QudmFsdWV9YC50b0xvY2FsZUxvd2VyQ2FzZSh0aGlzLmdldExvY2FsZSgpKS5pbmRl''@;'; put 'put ''eE9mKGwpPj0wKSxqbyh1dSx0aGlzKS5sb2FkRGF0YShhKX1mdW5jdGlvbiBsaHQoYyl7dGhpcy5ydW5Mb2NhbEhvb2tzKCJrZXlkb3duIixjLHRoaXMpLEkkKHVfLGMua2V5Q29kZSkoIkFSUk9XX0RPV04iKSYmKGMucHJldmVudERlZmF1bHQoKSxCMihjKSxqbyh1dSx0aGlzKS5saXN0ZW4o''@;'; put 'put ''KSxqbyh1dSx0aGlzKS5zZWxlY3RDZWxsKDAsMCkpfWZ1bmN0aW9uIGNodChjKXtjb25zdCBsPVtdO2MucHJldmVudERlZmF1bHQoKSxqbyh1dSx0aGlzKS5nZXRTb3VyY2VEYXRhKCkuZm9yRWFjaCgoYSxkKT0+e2EuY2hlY2tlZD0hMCxsLnB1c2goUEsoYSxkKVswXSl9KSxqbyh1dSx0aGlz''@;'; put 'put ''KS5zZXRTb3VyY2VEYXRhQXRDZWxsKGwpfWZ1bmN0aW9uIHVodChjKXtjb25zdCBsPVtdO2MucHJldmVudERlZmF1bHQoKSxqbyh1dSx0aGlzKS5nZXRTb3VyY2VEYXRhKCkuZm9yRWFjaCgoYSxkKT0+e2EuY2hlY2tlZD0hMSxsLnB1c2goUEsoYSxkKVswXSl9KSxqbyh1dSx0aGlzKS5zZXRT''@;'; put 'put ''b3VyY2VEYXRhQXRDZWxsKGwpfWNvbnN0IEM5PSJieV92YWx1ZSI7ZnVuY3Rpb24gS0YoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBp''@;'; put 'put ''cyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfWt1KEM5LGZ1bmN0aW9uIGZodChjLGwpe2xldFthXT1sO3JldHVybiBhKGMudmFsdWUpfSx7bmFtZToiQnkgdmFsdWUiLGlucHV0c0NvdW50OjAsaW5wdXRWYWx1ZXNEZWNvcmF0b3IoYyl7bGV0W2xdPWM7cmV0dXJuW0dUKGwpXX0sc2hv''@;'; put 'put ''d09wZXJhdG9yczohMX0pO3ZhciBDNWUsSlQ9bmV3IFdlYWtTZXQ7Y2xhc3MgeWh0IGV4dGVuZHMgSFR7Y29uc3RydWN0b3IobCxhKXtzdXBlcihsLHtpZDphLmlkLHN0YXRlbGVzczohMX0pLGZ1bmN0aW9uIHBodChjLGwpeyhmdW5jdGlvbiBnaHQoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBu''@;'; put 'put ''ZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLmFkZChjKX0odGhpcyxKVCksZnVuY3Rpb24gbWh0KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiB2aHQoYyl7dmFyIGw9ZnVuY3Rpb24g''@;'; put 'put ''Ymh0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJv''@;'; put 'put ''cigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShj''@;'; put 'put ''LGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY30odGhpcywibmFtZSIsIiIpLHRoaXMubmFtZT1hLm5hbWUsdGhpcy5lbGVtZW50cy5wdXNoKG5ldyBYVCh0aGlzLmhvdCkpLHRoaXMucmVnaXN0ZXJIb29rcygpfXJlZ2lzdGVy''@;'; put 'put ''SG9va3MoKXt0aGlzLmdldE11bHRpcGxlU2VsZWN0RWxlbWVudCgpLmFkZExvY2FsSG9vaygia2V5ZG93biIsbD0+S0YoSlQsdGhpcyxfaHQpLmNhbGwodGhpcyxsKSkuYWRkTG9jYWxIb29rKCJsaXN0VGFiS2V5ZG93biIsbD0+dGhpcy5ydW5Mb2NhbEhvb2tzKCJsaXN0VGFiS2V5ZG93biIs''@;'; put 'put ''bCkpLHRoaXMuaG90LmFkZEhvb2soIm1vZGlmeUZpbHRlcnNNdWx0aVNlbGVjdFZhbHVlIiwobCxhKT0+S0YoSlQsdGhpcyx3aHQpLmNhbGwodGhpcyxsLGEpKX1nZXRFbGVtZW50cygpe2NvbnN0IGw9dGhpcy5nZXRNdWx0aXBsZVNlbGVjdEVsZW1lbnQoKTtyZXR1cm5bbC5nZXRTZWFyY2hJ''@;'; put 'put ''bnB1dEVsZW1lbnQoKSxsLmdldFNlbGVjdEFsbEVsZW1lbnQoKSxsLmdldENsZWFyQWxsRWxlbWVudCgpLHRoaXMuZ2V0TXVsdGlwbGVTZWxlY3RFbGVtZW50KCldfXNldFN0YXRlKGwpe2lmKHRoaXMucmVzZXQoKSxsJiZsLmNvbW1hbmQua2V5PT09Qzkpe2NvbnN0IGE9dGhpcy5nZXRNdWx0''@;'; put 'put ''aXBsZVNlbGVjdEVsZW1lbnQoKTthLnNldEl0ZW1zKGwuaXRlbXNTbmFwc2hvdCksYS5zZXRWYWx1ZShsLmFyZ3NbMF0pLGEuc2V0TG9jYWxlKGwubG9jYWxlKX19Z2V0U3RhdGUoKXtjb25zdCBsPXRoaXMuZ2V0TXVsdGlwbGVTZWxlY3RFbGVtZW50KCksYT1sLmdldEl0ZW1zKCk7cmV0dXJu''@;'; put 'put ''e2NvbW1hbmQ6e2tleTpsLmlzU2VsZWN0ZWRBbGxWYWx1ZXMoKXx8IWEubGVuZ3RoP0UwOkM5fSxhcmdzOltsLmdldFZhbHVlKCldLGl0ZW1zU25hcHNob3Q6YX19dXBkYXRlU3RhdGUobCl7Y29uc3QgYT0oZCxoLGYsdixNKT0+e2NvbnN0W0RdPUltKGgsY2U9PmNlLm5hbWU9PT1DOSksWj17''@;'; put 'put ''fSxyZT10aGlzLmhvdC5nZXRUcmFuc2xhdGVkUGhyYXNlKFNQKTtpZihEKXtjb25zdCBjZT12KGQsTSksYmU9eXMoY2UsZHQ9PmR0LnZhbHVlKSxFZT1uZXcgTWFwKGNlLm1hcChkdD0+W2R0LnZhbHVlLHRoaXMuaG90LmdldENlbGxNZXRhKGR0Lm1ldGEudmlzdWFsUm93LGR0Lm1ldGEudmlz''@;'; put 'put ''dWFsQ29sKV0pKSxCZT1nUShiZSk7ZiYmKEQuYXJnc1swXT1mKTtjb25zdCBxZT1bXSxydD12NWUoQmUsRC5hcmdzWzBdLHJlLGR0PT57ZHQuY2hlY2tlZCYmcWUucHVzaChkdC52YWx1ZSksS0YoSlQsdGhpcyx3NWUpLmNhbGwodGhpcyxkdCxFZSl9KTtaLmxvY2FsZT10aGlzLmhvdC5nZXRD''@;'; put 'put ''ZWxsTWV0YSgwLGwuZWRpdGVkQ29uZGl0aW9uU3RhY2suY29sdW1uKS5sb2NhbGUsWi5hcmdzPVtxZV0sWi5jb21tYW5kPXc5KEM5KSxaLml0ZW1zU25hcHNob3Q9cnR9ZWxzZSBaLmFyZ3M9W10sWi5jb21tYW5kPXc5KEUwKTt0aGlzLnN0YXRlLnNldFZhbHVlQXRJbmRleChkLFopfTthKGwu''@;'; put 'put ''ZWRpdGVkQ29uZGl0aW9uU3RhY2suY29sdW1uLGwuZWRpdGVkQ29uZGl0aW9uU3RhY2suY29uZGl0aW9ucyxsLmNvbmRpdGlvbkFyZ3NDaGFuZ2UsbC5maWx0ZXJlZFJvd3NGYWN0b3J5KSxsLmRlcGVuZGVudENvbmRpdGlvblN0YWNrcy5sZW5ndGgmJmEobC5kZXBlbmRlbnRDb25kaXRpb25T''@;'; put 'put ''dGFja3NbMF0uY29sdW1uLGwuZGVwZW5kZW50Q29uZGl0aW9uU3RhY2tzWzBdLmNvbmRpdGlvbnMsbC5jb25kaXRpb25BcmdzQ2hhbmdlLGwuZmlsdGVyZWRSb3dzRmFjdG9yeSxsLmVkaXRlZENvbmRpdGlvblN0YWNrKX1nZXRNdWx0aXBsZVNlbGVjdEVsZW1lbnQoKXtyZXR1cm4gdGhpcy5l''@;'; put 'put ''bGVtZW50cy5maWx0ZXIobD0+bCBpbnN0YW5jZW9mIFhUKVswXX1nZXRNZW51SXRlbURlc2NyaXB0b3IoKXtyZXR1cm57a2V5OnRoaXMuaWQsbmFtZTp0aGlzLm5hbWUsaXNDb21tYW5kOiExLGRpc2FibGVTZWxlY3Rpb246ITAsaGlkZGVuOigpPT50aGlzLmlzSGlkZGVuKCkscmVuZGVyZXI6''@;'; put 'put ''KGwsYSxkLGgsZix2KT0+e1RpKGEucGFyZW50Tm9kZSwiaHRGaWx0ZXJzTWVudVZhbHVlIik7Y29uc3QgTT10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIFRpKE0sImh0RmlsdGVyc01lbnVMYWJlbCIpLE0udGV4dENvbnRlbnQ9dixhLmFwcGVuZENo''@;'; put 'put ''aWxkKE0pLGEucGFyZW50RWxlbWVudC5oYXNBdHRyaWJ1dGUoImdob3N0LXRhYmxlIil8fFluKHRoaXMuZWxlbWVudHMsRD0+YS5hcHBlbmRDaGlsZChELmVsZW1lbnQpKSxhfX19cmVzZXQoKXtjb25zdCBsPXRoaXMuaG90LmdldFRyYW5zbGF0ZWRQaHJhc2UoU1ApLGE9dGhpcy5fZ2V0Q29s''@;'; put 'put ''dW1uVmlzaWJsZVZhbHVlcygpLGQ9YS5tYXAoRD0+RC52YWx1ZSksaD1uZXcgTWFwKGEubWFwKEQ9PltELnZhbHVlLEQubWV0YV0pKSxmPWdRKGQpLHY9djVlKGYsZixsLEQ9PntLRihKVCx0aGlzLHc1ZSkuY2FsbCh0aGlzLEQsaCl9KTt0aGlzLmdldE11bHRpcGxlU2VsZWN0RWxlbWVudCgp''@;'; put 'put ''LnNldEl0ZW1zKHYpLHN1cGVyLnJlc2V0KCksdGhpcy5nZXRNdWx0aXBsZVNlbGVjdEVsZW1lbnQoKS5zZXRWYWx1ZShmKTtjb25zdCBNPXRoaXMuaG90LmdldFBsdWdpbigiZmlsdGVycyIpLmdldFNlbGVjdGVkQ29sdW1uKCk7bnVsbCE9PU0mJnRoaXMuZ2V0TXVsdGlwbGVTZWxlY3RFbGVt''@;'; put 'put ''ZW50KCkuc2V0TG9jYWxlKHRoaXMuaG90LmdldENlbGxNZXRhKDAsTS52aXN1YWxJbmRleCkubG9jYWxlKX1fZ2V0Q29sdW1uVmlzaWJsZVZhbHVlcygpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0UGx1Z2luKCJmaWx0ZXJzIikuZ2V0U2VsZWN0ZWRDb2x1bW4oKTtyZXR1cm4gbnVsbD09PWw/W106''@;'; put 'put ''eXModGhpcy5ob3QuZ2V0RGF0YUF0Q29sKGwudmlzdWFsSW5kZXgpLChhLGQpPT4oe3ZhbHVlOnBRKGEpLG1ldGE6dGhpcy5ob3QuZ2V0Q2VsbE1ldGEoZCxsLnZpc3VhbEluZGV4KX0pKX19ZnVuY3Rpb24gX2h0KGMpe3VfKGMua2V5Q29kZSwiRVNDQVBFIikmJih0aGlzLnJ1bkxvY2FsSG9v''@;'; put 'put ''a3MoImNhbmNlbCIpLEIyKGMpKX1mdW5jdGlvbiB3NWUoYyxsKXt0aGlzLmhvdC5oYXNIb29rKCJtb2RpZnlGaWx0ZXJzTXVsdGlTZWxlY3RWYWx1ZSIpJiYoYy52aXN1YWxWYWx1ZT10aGlzLmhvdC5ydW5Ib29rcygibW9kaWZ5RmlsdGVyc011bHRpU2VsZWN0VmFsdWUiLGMudmlzdWFsVmFs''@;'; put 'put ''dWUsbC5nZXQoYy52YWx1ZSkpKX1mdW5jdGlvbiB3aHQoYyxsKXtyZXR1cm4ibnVtZXJpYyI9PT1sLnR5cGU/ZzRlKGMsbCk6Y312YXIgUzVlPW5ldyBXZWFrU2V0O2NsYXNzIFFUIGV4dGVuZHMgSFR7c3RhdGljIGdldCBCVVRUT05fT0soKXtyZXR1cm4ib2sifXN0YXRpYyBnZXQgQlVUVE9O''@;'; put 'put ''X0NBTkNFTCgpe3JldHVybiJjYW5jZWwifWNvbnN0cnVjdG9yKGwsYSl7c3VwZXIobCx7aWQ6YS5pZCxzdGF0ZWxlc3M6ITB9KSxmdW5jdGlvbiBDaHQoYyxsKXsoZnVuY3Rpb24gU2h0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhl''@;'; put 'put ''IHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5hZGQoYyl9KHRoaXMsUzVlKSxmdW5jdGlvbiBNaHQoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIHhodChjKXt2YXIgbD1mdW5jdGlvbiBFaHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFj''@;'; put 'put ''KXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJp''@;'; put 'put ''bWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3Vy''@;'; put 'put ''YWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfSh0aGlzLCJuYW1lIiwiIiksdGhpcy5uYW1lPWEubmFtZSx0aGlzLmVsZW1lbnRzLnB1c2gobmV3IGk2KHRoaXMuaG90LHt0eXBlOiJidXR0b24iLHZhbHVlOm9YLGNsYXNzTmFtZToiaHRVSUJ1dHRvbiBodFVJQnV0dG9uT0siLGlkZW50''@;'; put 'put ''aWZpZXI6UVQuQlVUVE9OX09LfSkpLHRoaXMuZWxlbWVudHMucHVzaChuZXcgaTYodGhpcy5ob3Qse3R5cGU6ImJ1dHRvbiIsdmFsdWU6c1gsY2xhc3NOYW1lOiJodFVJQnV0dG9uIGh0VUlCdXR0b25DYW5jZWwiLGlkZW50aWZpZXI6UVQuQlVUVE9OX0NBTkNFTH0pKSx0aGlzLnJlZ2lzdGVy''@;'; put 'put ''SG9va3MoKX1yZWdpc3Rlckhvb2tzKCl7WW4odGhpcy5lbGVtZW50cyxsPT57bC5hZGRMb2NhbEhvb2soImNsaWNrIiwoYSxkKT0+ZnVuY3Rpb24gVGh0KGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0''@;'; put 'put ''aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX0oUzVlLHRoaXMsQWh0KS5jYWxsKHRoaXMsYSxkKSl9KX1nZXRNZW51SXRlbURlc2NyaXB0b3IoKXtyZXR1cm57a2V5OnRoaXMuaWQsbmFtZTp0aGlzLm5hbWUsaXNDb21t''@;'; put 'put ''YW5kOiExLGRpc2FibGVTZWxlY3Rpb246ITAsaGlkZGVuOigpPT50aGlzLmlzSGlkZGVuKCkscmVuZGVyZXI6KGwsYSk9PihUaShhLnBhcmVudE5vZGUsImh0RmlsdGVyc01lbnVBY3Rpb25CYXIiKSxZbih0aGlzLmVsZW1lbnRzLGQ9PmEuYXBwZW5kQ2hpbGQoZC5lbGVtZW50KSksYSl9fWFj''@;'; put 'put ''Y2VwdCgpe3RoaXMucnVuTG9jYWxIb29rcygiYWNjZXB0Iil9Y2FuY2VsKCl7dGhpcy5ydW5Mb2NhbEhvb2tzKCJjYW5jZWwiKX19ZnVuY3Rpb24gQWh0KGMsbCl7bC5vcHRpb25zLmlkZW50aWZpZXI9PT1DNWUuQlVUVE9OX09LP3RoaXMuYWNjZXB0KCk6dGhpcy5jYW5jZWwoKX1mdW5jdGlv''@;'; put 'put ''biBiUShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24ga2h0KGMpe3ZhciBsPWZ1bmN0aW9uIERodChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0''@;'; put 'put ''Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJv''@;'; put 'put ''bCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9QzVlPVFUO2NvbnN0IE01ZT0iQ29uZGl0aW9uQ29sbGVjdGlvbi5maWx0ZXJpbmdT''@;'; put 'put ''dGF0ZXMiO2NsYXNzIHg1ZXtjb25zdHJ1Y3RvcihsKXtsZXQgYT0hKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdO2JRKHRoaXMsImhvdCIsdm9pZCAwKSxiUSh0aGlzLCJpc01hcFJlZ2lzdHJhYmxlIix2b2lkIDApLGJRKHRoaXMsImZp''@;'; put 'put ''bHRlcmluZ1N0YXRlcyIsbmV3IHBQKSx0aGlzLmhvdD1sLHRoaXMuaXNNYXBSZWdpc3RyYWJsZT1hLCEwPT09dGhpcy5pc01hcFJlZ2lzdHJhYmxlP3RoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLnJlZ2lzdGVyTWFwKE01ZSx0aGlzLmZpbHRlcmluZ1N0YXRlcyk6dGhpcy5maWx0ZXJpbmdT''@;'; put 'put ''dGF0ZXMuaW5pdCh0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXROdW1iZXJPZkluZGV4ZXMoKSl9aXNFbXB0eSgpe3JldHVybiAwPT09dGhpcy5nZXRGaWx0ZXJlZENvbHVtbnMoKS5sZW5ndGh9aXNNYXRjaChsLGEpe3ZhciBkO2NvbnN0IGg9dGhpcy5maWx0ZXJpbmdTdGF0ZXMuZ2V0''@;'; put 'put ''VmFsdWVBdEluZGV4KGEpLGY9bnVsbCE9PShkPWg/LmNvbmRpdGlvbnMpJiZ2b2lkIDAhPT1kP2Q6W10sdj1oPy5vcGVyYXRpb247cmV0dXJuIHRoaXMuaXNNYXRjaEluQ29uZGl0aW9ucyhmLGwsdil9aXNNYXRjaEluQ29uZGl0aW9ucyhsLGEpe3JldHVybiFsLmxlbmd0aHx8ZnVuY3Rpb24g''@;'; put 'put ''TmR0KGMpe2lmKCFXVFtjXSl0aHJvdyBFcnJvcihgT3BlcmF0aW9uIHdpdGggaWQgIiR7Y30iIGRvZXMgbm90IGV4aXN0LmApO2NvbnN0IGw9V1RbY10uZnVuYztyZXR1cm4gZnVuY3Rpb24oYSxkKXtyZXR1cm4gbChhLGQpfX0oYXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVu''@;'; put 'put ''dHNbMl0/YXJndW1lbnRzWzJdOmE2KShsLGEpfWFkZENvbmRpdGlvbihsLGEpe2xldCBkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTphNixoPWFyZ3VtZW50cy5sZW5ndGg+Mz9hcmd1bWVudHNbM106dm9pZCAwO2NvbnN0IGY9dGhpcy5o''@;'; put 'put ''b3QuZ2V0Q2VsbE1ldGEoMCxsKS5sb2NhbGUsdj1hLmFyZ3MubWFwKHJlPT4ic3RyaW5nIj09dHlwZW9mIHJlP3JlLnRvTG9jYWxlTG93ZXJDYXNlKGYpOnJlKSxNPWEubmFtZXx8YS5jb21tYW5kLmtleTt0aGlzLnJ1bkxvY2FsSG9va3MoImJlZm9yZUFkZCIsbCk7Y29uc3QgRD10aGlzLmdl''@;'; put 'put ''dE9wZXJhdGlvbihsKTtpZihEKXtpZihEIT09ZCl0aHJvdyBFcnJvcihnbGBUaGUgY29sdW1uIG9mIGluZGV4ICR7bH0gaGFzIGJlZW4gYWxyZWFkeSBhcHBsaWVkIHdpdGggYSBcYCR7RH1cYFx4MjAKICAgICAgICBmaWx0ZXIgb3BlcmF0aW9uLiBVc2UgXGByZW1vdmVDb25kaXRpb25zXGAg''@;'; put 'put ''dG8gY2xlYXIgdGhlIGN1cnJlbnQgY29uZGl0aW9ucyBhbmQgdGhlbiBhZGQgbmV3IG9uZXMuXHgyMAogICAgICAgIE1pbmQgdGhhdCB5b3UgY2Fubm90IG1peCBkaWZmZXJlbnQgdHlwZXMgb2Ygb3BlcmF0aW9ucyAoZm9yIGluc3RhbmNlLCBpZiB5b3UgdXNlIFxgY29uanVuY3Rpb25cYCxc''@;'; put 'put ''eDIwCiAgICAgICAgdXNlIGl0IGNvbnNlcXVlbnRseSBmb3IgYSBwYXJ0aWN1bGFyIGNvbHVtbikuYCl9ZWxzZSBpZihfYyhXVFtkXSkpdGhyb3cgbmV3IEVycm9yKGdsYFVuZXhwZWN0ZWQgb3BlcmF0aW9uIG5hbWVkIFxgJHtkfVxgLiBQb3NzaWJsZSBvbmVzIGFyZVx4MjAKICAgICAgICBc''@;'; put 'put ''YGRpc2p1bmN0aW9uXGAgYW5kIFxgY29uanVuY3Rpb25cYC5gKTtjb25zdCBaPXRoaXMuZ2V0Q29uZGl0aW9ucyhsKTswPT09Wi5sZW5ndGg/dGhpcy5maWx0ZXJpbmdTdGF0ZXMuc2V0VmFsdWVBdEluZGV4KGwse29wZXJhdGlvbjpkLGNvbmRpdGlvbnM6W3tuYW1lOk0sYXJnczp2LGZ1bmM6''@;'; put 'put ''cjYoTSx2KX1dfSxoKTpaLnB1c2goe25hbWU6TSxhcmdzOnYsZnVuYzpyNihNLHYpfSksdGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlckFkZCIsbCl9Z2V0Q29uZGl0aW9ucyhsKXt2YXIgYSxkO3JldHVybiBudWxsIT09KGE9bnVsbD09PShkPXRoaXMuZmlsdGVyaW5nU3RhdGVzLmdldFZhbHVl''@;'; put 'put ''QXRJbmRleChsKSl8fHZvaWQgMD09PWQ/dm9pZCAwOmQuY29uZGl0aW9ucykmJnZvaWQgMCE9PWE/YTpbXX1nZXRPcGVyYXRpb24obCl7dmFyIGE7cmV0dXJuIG51bGw9PT0oYT10aGlzLmZpbHRlcmluZ1N0YXRlcy5nZXRWYWx1ZUF0SW5kZXgobCkpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLm9w''@;'; put 'put ''ZXJhdGlvbn1nZXRGaWx0ZXJlZENvbHVtbnMoKXtyZXR1cm4gdGhpcy5maWx0ZXJpbmdTdGF0ZXMuZ2V0RW50cmllcygpLm1hcChsPT57bGV0W2FdPWw7cmV0dXJuIGF9KX1nZXRDb2x1bW5TdGFja1Bvc2l0aW9uKGwpe3JldHVybiB0aGlzLmdldEZpbHRlcmVkQ29sdW1ucygpLmluZGV4T2Yo''@;'; put 'put ''bCl9ZXhwb3J0QWxsQ29uZGl0aW9ucygpe3JldHVybiB0aGlzLmZpbHRlcmluZ1N0YXRlcy5nZXRFbnRyaWVzKCkucmVkdWNlKChsLGEpPT57bGV0W2Qse29wZXJhdGlvbjpoLGNvbmRpdGlvbnM6Zn1dPWE7cmV0dXJuIGwucHVzaCh7Y29sdW1uOmQsb3BlcmF0aW9uOmgsY29uZGl0aW9uczpm''@;'; put 'put ''Lm1hcCh2PT57bGV0e25hbWU6TSxhcmdzOkR9PXY7cmV0dXJue25hbWU6TSxhcmdzOlsuLi5EXX19KX0pLGx9LFtdKX1pbXBvcnRBbGxDb25kaXRpb25zKGwpe3RoaXMuY2xlYW4oKSxsLmZvckVhY2goYT0+e2EuY29uZGl0aW9ucy5mb3JFYWNoKGQ9PnRoaXMuYWRkQ29uZGl0aW9uKGEuY29s''@;'; put 'put ''dW1uLGQpKX0pfXJlbW92ZUNvbmRpdGlvbnMobCl7dGhpcy5ydW5Mb2NhbEhvb2tzKCJiZWZvcmVSZW1vdmUiLGwpLHRoaXMuZmlsdGVyaW5nU3RhdGVzLmNsZWFyVmFsdWUobCksdGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlclJlbW92ZSIsbCl9Y2xlYW4oKXt0aGlzLnJ1bkxvY2FsSG9va3Mo''@;'; put 'put ''ImJlZm9yZUNsZWFuIiksdGhpcy5maWx0ZXJpbmdTdGF0ZXMuY2xlYXIoKSx0aGlzLnJ1bkxvY2FsSG9va3MoImFmdGVyQ2xlYW4iKX1oYXNDb25kaXRpb25zKGwsYSl7Y29uc3QgZD10aGlzLmdldENvbmRpdGlvbnMobCk7cmV0dXJuIGE/ZC5zb21lKGg9PmgubmFtZT09PWEpOmQubGVuZ3Ro''@;'; put 'put ''PjB9ZGVzdHJveSgpe3RoaXMuaXNNYXBSZWdpc3RyYWJsZSYmdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIudW5yZWdpc3Rlck1hcChNNWUpLHRoaXMuZmlsdGVyaW5nU3RhdGVzPW51bGwsdGhpcy5jbGVhckxvY2FsSG9va3MoKX19VGwoeDVlLHkxKTtjb25zdCBFNWU9eDVlO2Z1bmN0aW9u''@;'; put 'put ''IFQ1ZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gSWh0KGMpe3ZhciBsPWZ1bmN0aW9uIFJodChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0''@;'; put 'put ''Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJv''@;'; put 'put ''bCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y29uc3QgQTVlPWNsYXNzIExodHtjb25zdHJ1Y3RvcihsKXtsZXQgYT1hcmd1bWVu''@;'; put 'put ''dHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06KCk9PltdO1Q1ZSh0aGlzLCJjb25kaXRpb25Db2xsZWN0aW9uIix2b2lkIDApLFQ1ZSh0aGlzLCJjb2x1bW5EYXRhRmFjdG9yeSIsdm9pZCAwKSx0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb249bCx0aGlzLmNv''@;'; put 'put ''bHVtbkRhdGFGYWN0b3J5PWF9ZmlsdGVyKCl7bGV0IGw9W107cmV0dXJuIFluKHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5nZXRGaWx0ZXJlZENvbHVtbnMoKSwoYSxkKT0+e2xldCBoPXRoaXMuY29sdW1uRGF0YUZhY3RvcnkoYSk7ZCYmKGg9dGhpcy5fZ2V0SW50ZXJzZWN0RGF0YShoLGwp''@;'; put 'put ''KSxsPXRoaXMuZmlsdGVyQnlDb2x1bW4oYSxoKX0pLGx9ZmlsdGVyQnlDb2x1bW4obCl7Y29uc3QgZD1bXTtyZXR1cm4gWW4oYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOltdLGg9Pnt2b2lkIDAhPT1oJiZ0aGlzLmNvbmRpdGlvbkNvbGxl''@;'; put 'put ''Y3Rpb24uaXNNYXRjaChoLGwpJiZkLnB1c2goaCl9KSxkfV9nZXRJbnRlcnNlY3REYXRhKGwsYSl7Y29uc3QgZD1bXTtyZXR1cm4gWW4oYSxoPT57Y29uc3QgZj1oLm1ldGEudmlzdWFsUm93O3ZvaWQgMCE9PWxbZl0mJihkW2ZdPWxbZl0pfSksZH19O2Z1bmN0aW9uIFM5KGMsbCxhKXtyZXR1''@;'; put 'put ''cm4obD1mdW5jdGlvbiBGaHQoYyl7dmFyIGw9ZnVuY3Rpb24gSGh0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9''@;'; put 'put ''dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDps''@;'; put 'put ''KyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiB5UShjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJu''@;'; put 'put ''IGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIHFGPW5ldyBXZWFrU2V0O2NsYXNzIGs1ZXtjb25zdHJ1Y3RvcihsLGEpe2xldCBkPWFyZ3VtZW50cy5sZW5ndGg+MiYm''@;'; put 'put ''dm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTooKT0+W107KGZ1bmN0aW9uIE9odChjLGwpeyhmdW5jdGlvbiBQaHQoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9u''@;'; put 'put ''IGFuIG9iamVjdCIpfSkoYyxsKSxsLmFkZChjKX0pKHRoaXMscUYpLFM5KHRoaXMsImhvdCIsdm9pZCAwKSxTOSh0aGlzLCJjb25kaXRpb25Db2xsZWN0aW9uIix2b2lkIDApLFM5KHRoaXMsImNvbHVtbkRhdGFGYWN0b3J5Iix2b2lkIDApLFM5KHRoaXMsImNoYW5nZXMiLFtdKSxTOSh0aGlz''@;'; put 'put ''LCJncm91cGluZyIsITEpLFM5KHRoaXMsImxhdGVzdEVkaXRlZENvbHVtblBvc2l0aW9uIiwtMSksUzkodGhpcywibGF0ZXN0T3JkZXJTdGFjayIsW10pLHRoaXMuaG90PWwsdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uPWEsdGhpcy5jb2x1bW5EYXRhRmFjdG9yeT1kLHRoaXMuY29uZGl0aW9u''@;'; put 'put ''Q29sbGVjdGlvbi5hZGRMb2NhbEhvb2soImJlZm9yZVJlbW92ZSIsaD0+eVEocUYsdGhpcyxOaHQpLmNhbGwodGhpcyxoKSksdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmFkZExvY2FsSG9vaygiYWZ0ZXJSZW1vdmUiLGg9PnRoaXMudXBkYXRlU3RhdGVzQXRDb2x1bW4oaCkpLHRoaXMuY29u''@;'; put 'put ''ZGl0aW9uQ29sbGVjdGlvbi5hZGRMb2NhbEhvb2soImFmdGVyQWRkIixoPT50aGlzLnVwZGF0ZVN0YXRlc0F0Q29sdW1uKGgpKSx0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uYWRkTG9jYWxIb29rKCJiZWZvcmVDbGVhbiIsKCk9PnlRKHFGLHRoaXMsVmh0KS5jYWxsKHRoaXMpKSx0aGlzLmNv''@;'; put 'put ''bmRpdGlvbkNvbGxlY3Rpb24uYWRkTG9jYWxIb29rKCJhZnRlckNsZWFuIiwoKT0+eVEocUYsdGhpcyxCaHQpLmNhbGwodGhpcykpfWdyb3VwQ2hhbmdlcygpe3RoaXMuZ3JvdXBpbmc9ITB9Zmx1c2goKXt0aGlzLmdyb3VwaW5nPSExLFluKHRoaXMuY2hhbmdlcyxsPT57dGhpcy51cGRhdGVT''@;'; put 'put ''dGF0ZXNBdENvbHVtbihsKX0pLHRoaXMuY2hhbmdlcy5sZW5ndGg9MH11cGRhdGVTdGF0ZXNBdENvbHVtbihsLGEpe3ZhciBkPXRoaXM7aWYodGhpcy5ncm91cGluZylyZXR1cm4gdm9pZCgtMT09PXRoaXMuY2hhbmdlcy5pbmRleE9mKGwpJiZ0aGlzLmNoYW5nZXMucHVzaChsKSk7Y29uc3Qg''@;'; put 'put ''aD10aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uZXhwb3J0QWxsQ29uZGl0aW9ucygpO2xldCBmPXRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5nZXRDb2x1bW5TdGFja1Bvc2l0aW9uKGwpOy0xPT09ZiYmKGY9dGhpcy5sYXRlc3RFZGl0ZWRDb2x1bW5Qb3NpdGlvbik7Y29uc3Qgdj1oLnNsaWNl''@;'; put 'put ''KDAsZiksTT1oLnNsaWNlKGYpO00ubGVuZ3RoJiZNWzBdLmNvbHVtbj09PWwmJk0uc2hpZnQoKTtjb25zdCBEPVkyZShmdW5jdGlvbihyZSxjZSl7bGV0IGJlPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpbXTtjb25zdCBFZT1uZXcgRTVl''@;'; put 'put ''KGQuaG90LCExKSxCZT1bXS5jb25jYXQocmUsYmUpO0VlLmltcG9ydEFsbENvbmRpdGlvbnMoQmUpO2NvbnN0IHFlPWQuY29sdW1uRGF0YUZhY3RvcnkoY2UpO2xldCBydDtydD1FZS5pc0VtcHR5KCk/cWU6bmV3IEE1ZShFZSxkdD0+ZC5jb2x1bW5EYXRhRmFjdG9yeShkdCkpLmZpbHRlcigp''@;'; put 'put ''LHJ0PXlzKHJ0LGR0PT5kdC5tZXRhLnZpc3VhbFJvdyk7Y29uc3QgcHQ9R1QocnQpO3JldHVybiBFZS5kZXN0cm95KCksSW0ocWUsZHQ9PnB0KGR0Lm1ldGEudmlzdWFsUm93KSl9KSh2KSxaPVtdLmNvbmNhdCh0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uZ2V0Q29uZGl0aW9ucyhsKSk7dGhp''@;'; put 'put ''cy5ydW5Mb2NhbEhvb2tzKCJ1cGRhdGUiLHtlZGl0ZWRDb25kaXRpb25TdGFjazp7Y29sdW1uOmwsY29uZGl0aW9uczpafSxkZXBlbmRlbnRDb25kaXRpb25TdGFja3M6TSxmaWx0ZXJlZFJvd3NGYWN0b3J5OkQsY29uZGl0aW9uQXJnc0NoYW5nZTphfSl9ZGVzdHJveSgpe3RoaXMuY2xlYXJM''@;'; put 'put ''b2NhbEhvb2tzKCksWG8odGhpcywobCxhKT0+e3RoaXNbYV09bnVsbH0pfX1mdW5jdGlvbiBOaHQoYyl7dGhpcy5sYXRlc3RFZGl0ZWRDb2x1bW5Qb3NpdGlvbj10aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uZ2V0Q29sdW1uU3RhY2tQb3NpdGlvbihjKX1mdW5jdGlvbiBWaHQoKXt0aGlzLmxh''@;'; put 'put ''dGVzdE9yZGVyU3RhY2s9dGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmdldEZpbHRlcmVkQ29sdW1ucygpfWZ1bmN0aW9uIEJodCgpe1luKHRoaXMubGF0ZXN0T3JkZXJTdGFjayxjPT57dGhpcy51cGRhdGVTdGF0ZXNBdENvbHVtbihjKX0pfVRsKGs1ZSx5MSk7Y29uc3Qgamh0PWs1ZSxlQT0i''@;'; put 'put ''ZmlsdGVycyI7ZnVuY3Rpb24gX1EoYyxsLGEpe0Q1ZShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gRDVlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1m''@;'; put 'put ''dW5jdGlvbiB0QShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gV2h0KGMpe3ZhciBsPWZ1bmN0aW9uIFlodChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJk''@;'; put 'put ''ZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJu''@;'; put 'put ''InN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24gWEYoYyxsLGEpe3JldHVybiBjLnNldCgkZChjLGwpLGEp''@;'; put 'put ''LGF9ZnVuY3Rpb24gWDIoYyxsKXtyZXR1cm4gYy5nZXQoJGQoYyxsKSl9ZnVuY3Rpb24gJGQoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVu''@;'; put 'put ''dCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfWNvbnN0IHdRPSJmaWx0ZXJzIixJNWU9d1E7dmFyIE5nPW5ldyBXZWFrTWFwLENRPW5ldyBXZWFrTWFwLE05PW5ldyBXZWFrTWFwLE5oPW5ldyBXZWFrU2V0O2NsYXNzICRodCBleHRlbmRzIEZze3N0YXRpYyBnZXQgUExVR0lOX0tF''@;'; put 'put ''WSgpe3JldHVybiB3UX1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAyNTB9c3RhdGljIGdldCBQTFVHSU5fREVQUygpe3JldHVyblsicGx1Z2luOkRyb3Bkb3duTWVudSIsInBsdWdpbjpIaWRkZW5Sb3dzIiwiY2VsbC10eXBlOmNoZWNrYm94Il19Y29uc3RydWN0b3IobCl7''@;'; put 'put ''dmFyIGE7c3VwZXIobCksYT10aGlzLGZ1bmN0aW9uIFpodChjLGwpe0Q1ZShjLGwpLGwuYWRkKGMpfSh0aGlzLE5oKSx0QSh0aGlzLCJkcm9wZG93bk1lbnVQbHVnaW4iLG51bGwpLHRBKHRoaXMsImNvbmRpdGlvbkNvbGxlY3Rpb24iLG51bGwpLHRBKHRoaXMsImNvbmRpdGlvblVwZGF0ZU9i''@;'; put 'put ''c2VydmVyIixudWxsKSx0QSh0aGlzLCJjb21wb25lbnRzIixuZXcgTWFwKFtbImZpbHRlcl9ieV9jb25kaXRpb24iLG51bGxdLFsiZmlsdGVyX29wZXJhdG9ycyIsbnVsbF0sWyJmaWx0ZXJfYnlfY29uZGl0aW9uMiIsbnVsbF0sWyJmaWx0ZXJfYnlfdmFsdWUiLG51bGxdLFsiZmlsdGVyX2Fj''@;'; put 'put ''dGlvbl9iYXIiLG51bGxdXSkpLHRBKHRoaXMsImZpbHRlcnNSb3dzTWFwIixudWxsKSxfUSh0aGlzLE5nLHZvaWQgMCksX1EodGhpcyxDUSxuZXcgV2Vha1NldCksX1EodGhpcyxNOSxbXSksdGhpcy5ob3QuYWRkSG9vaygiYWZ0ZXJHZXRDb2xIZWFkZXIiLGZ1bmN0aW9uKCl7Zm9yKHZhciBk''@;'; put 'put ''PWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuICRkKE5oLGEsdDJ0KS5jYWxsKGEsLi4uaCl9KX1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbd1FdfWVuYWJsZVBsdWdpbigpe3ZhciBs''@;'; put 'put ''PXRoaXM7aWYodGhpcy5lbmFibGVkKXJldHVybjt0aGlzLmZpbHRlcnNSb3dzTWFwPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLnJlZ2lzdGVyTWFwKHRoaXMucGx1Z2luTmFtZSxuZXcgcUUpLHRoaXMuZHJvcGRvd25NZW51UGx1Z2luPXRoaXMuaG90LmdldFBsdWdpbigiZHJvcGRvd25NZW51''@;'; put 'put ''Iik7Y29uc3QgYT10aGlzLmhvdC5nZXRTZXR0aW5ncygpLmRyb3Bkb3duTWVudSxkPWEmJmEudWlDb250YWluZXJ8fHRoaXMuaG90LnJvb3REb2N1bWVudC5ib2R5LGg9TT0+KE0uYWRkTG9jYWxIb29rKCJhY2NlcHQiLCgpPT4kZChOaCx0aGlzLFI1ZSkuY2FsbCh0aGlzLCJhY2NlcHQiKSks''@;'; put 'put ''TS5hZGRMb2NhbEhvb2soImNhbmNlbCIsKCk9PiRkKE5oLHRoaXMsUjVlKS5jYWxsKHRoaXMsImNhbmNlbCIpKSxNLmFkZExvY2FsSG9vaygiY2hhbmdlIixEPT4kZChOaCx0aGlzLGUydCkuY2FsbCh0aGlzLE0sRCkpLE0pLGY9KCk9PmAke3RoaXMuaG90LmdldFRyYW5zbGF0ZWRQaHJhc2Uo''@;'; put 'put ''dFgpfTpgO2lmKCF0aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfYnlfY29uZGl0aW9uIikpe2NvbnN0IE09bmV3IHVRKHRoaXMuaG90LHtpZDoiZmlsdGVyX2J5X2NvbmRpdGlvbiIsbmFtZTpmLGFkZFNlcGFyYXRvcjohMSxtZW51Q29udGFpbmVyOmR9KTtNLmFkZExvY2FsSG9vaygiYWZ0''@;'; put 'put ''ZXJDbG9zZSIsKCk9PiRkKE5oLHRoaXMsTDVlKS5jYWxsKHRoaXMpKSx0aGlzLmNvbXBvbmVudHMuc2V0KCJmaWx0ZXJfYnlfY29uZGl0aW9uIixoKE0pKX1pZih0aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfb3BlcmF0b3JzIil8fHRoaXMuY29tcG9uZW50cy5zZXQoImZpbHRlcl9vcGVy''@;'; put 'put ''YXRvcnMiLG5ldyBRZHQodGhpcy5ob3Qse2lkOiJmaWx0ZXJfb3BlcmF0b3JzIixuYW1lOiJPcGVyYXRvcnMifSkpLCF0aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfYnlfY29uZGl0aW9uMiIpKXtjb25zdCBNPW5ldyB1USh0aGlzLmhvdCx7aWQ6ImZpbHRlcl9ieV9jb25kaXRpb24yIixu''@;'; put 'put ''YW1lOiIiLGFkZFNlcGFyYXRvcjohMCxtZW51Q29udGFpbmVyOmR9KTtNLmFkZExvY2FsSG9vaygiYWZ0ZXJDbG9zZSIsKCk9PiRkKE5oLHRoaXMsTDVlKS5jYWxsKHRoaXMpKSx0aGlzLmNvbXBvbmVudHMuc2V0KCJmaWx0ZXJfYnlfY29uZGl0aW9uMiIsaChNKSl9aWYodGhpcy5jb21wb25l''@;'; put 'put ''bnRzLmdldCgiZmlsdGVyX2J5X3ZhbHVlIil8fHRoaXMuY29tcG9uZW50cy5zZXQoImZpbHRlcl9ieV92YWx1ZSIsaChuZXcgeWh0KHRoaXMuaG90LHtpZDoiZmlsdGVyX2J5X3ZhbHVlIixuYW1lOigpPT5gJHt0aGlzLmhvdC5nZXRUcmFuc2xhdGVkUGhyYXNlKG5YKX06YH0pKSksdGhpcy5j''@;'; put 'put ''b21wb25lbnRzLmdldCgiZmlsdGVyX2FjdGlvbl9iYXIiKXx8dGhpcy5jb21wb25lbnRzLnNldCgiZmlsdGVyX2FjdGlvbl9iYXIiLGgobmV3IFFUKHRoaXMuaG90LHtpZDoiZmlsdGVyX2FjdGlvbl9iYXIiLG5hbWU6IkFjdGlvbiBiYXIifSkpKSx0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb258''@;'; put 'put ''fCh0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb249bmV3IEU1ZSh0aGlzLmhvdCkpLHRoaXMuY29uZGl0aW9uVXBkYXRlT2JzZXJ2ZXJ8fCh0aGlzLmNvbmRpdGlvblVwZGF0ZU9ic2VydmVyPW5ldyBqaHQodGhpcy5ob3QsdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLE09PnRoaXMuZ2V0RGF0YU1h''@;'; put 'put ''cEF0Q29sdW1uKE0pKSx0aGlzLmNvbmRpdGlvblVwZGF0ZU9ic2VydmVyLmFkZExvY2FsSG9vaygidXBkYXRlIixNPT4kZChOaCx0aGlzLG4ydCkuY2FsbCh0aGlzLE0pKSksdGhpcy5jb21wb25lbnRzLmZvckVhY2goTT0+TS5zaG93KCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJEcm9wZG93bk1l''@;'; put 'put ''bnVEZWZhdWx0T3B0aW9ucyIsZnVuY3Rpb24oKXtmb3IodmFyIE09YXJndW1lbnRzLmxlbmd0aCxEPW5ldyBBcnJheShNKSxaPTA7WjxNO1orKylEW1pdPWFyZ3VtZW50c1taXTtyZXR1cm4gJGQoTmgsbCxRaHQpLmNhbGwobCwuLi5EKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlRHJvcGRvd25N''@;'; put 'put ''ZW51U2hvdyIsKCk9PiRkKE5oLHRoaXMsSmh0KS5jYWxsKHRoaXMpKSx0aGlzLmFkZEhvb2soImFmdGVyRHJvcGRvd25NZW51U2hvdyIsKCk9PiRkKE5oLHRoaXMscWh0KS5jYWxsKHRoaXMpKSx0aGlzLmFkZEhvb2soImFmdGVyRHJvcGRvd25NZW51SGlkZSIsKCk9PiRkKE5oLHRoaXMsWGh0''@;'; put 'put ''KS5jYWxsKHRoaXMpKSx0aGlzLmFkZEhvb2soImFmdGVyQ2hhbmdlIixNPT4kZChOaCx0aGlzLEtodCkuY2FsbCh0aGlzLE0pKSx0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmRyb3Bkb3duTWVudSYmdGhpcy5kcm9wZG93bk1lbnVQbHVnaW4mJih0aGlzLmRyb3Bkb3duTWVudVBsdWdpbi5kaXNh''@;'; put 'put ''YmxlUGx1Z2luKCksdGhpcy5kcm9wZG93bk1lbnVQbHVnaW4uZW5hYmxlUGx1Z2luKCkpLCFYMihOZyx0aGlzKSYmdGhpcy5kcm9wZG93bk1lbnVQbHVnaW4uZW5hYmxlZCl7Y29uc3QgTT1be2ZvY3VzOigpPT57Y29uc3QgWj1YMihOZyx0aGlzKS5nZXRNZW51KCkscmU9Wi5nZXROYXZpZ2F0''@;'; put 'put ''b3IoKSxjZT1YMihOZyx0aGlzKS5nZXRMYXN0TWVudVBhZ2UoKTtaLmZvY3VzKCksY2U+MD9yZS5zZXRDdXJyZW50UGFnZShjZSk6cmUudG9GaXJzdEl0ZW0oKX19LC4uLkFycmF5LmZyb20odGhpcy5jb21wb25lbnRzKS5tYXAoWj0+e2xldFsscmVdPVo7cmV0dXJuIHJlLmdldEVsZW1lbnRz''@;'; put 'put ''KCl9KS5mbGF0KCldO1hGKE5nLHRoaXMsZnVuY3Rpb24gVWh0KGMsbCl7bGV0IGQsYT0tMTtjb25zdCBoPWZ1bmN0aW9uIHpodChjKXtyZXR1cm4gd2dlKHtpbml0aWFsUGFnZTowLHNpemU6KCk9PmMubGVuZ3RoLG9uSXRlbVNlbGVjdDooYSxkKT0+e2NvbnN0IGg9Y1thXTtyZXR1cm4gaCBp''@;'; put 'put ''bnN0YW5jZW9mIFhUP2Q6IShoLmVsZW1lbnQmJiFVNyhoLmVsZW1lbnQpKSYmdm9pZCBoLmZvY3VzKCl9fSl9KGwpLGY9Y2U9PigpPT57ZC5pc09wZW5lZCgpJiZkLmdldEtleWJvYXJkU2hvcnRjdXRzQ3RybCgpLmxpc3RlbihlQSksaC5zZXRDdXJyZW50UGFnZShsLmluZGV4T2YoY2UpKX07''@;'; put 'put ''ZnVuY3Rpb24gdihjZSl7Y29uc3QgYmU9ZC5nZXRLZXlib2FyZFNob3J0Y3V0c0N0cmwoKSxFZT1jZS5nZXRLZXlib2FyZFNob3J0Y3V0c0N0cmwoKTtoLmNsZWFyKCksRWUuYWRkQ3VzdG9tU2hvcnRjdXRzKFt7a2V5czpbWyJUYWIiXSxbIlNoaWZ0IiwiVGFiIl1dLGZvcndhcmRUb0NvbnRl''@;'; put 'put ''eHQ6YmUuZ2V0Q29udGV4dChlQSksY2FsbGJhY2s6KCk9PntjZS5pc1N1Yk1lbnUoKSYmY2UuY2xvc2UoKSxiZS5saXN0ZW4oZUEpfX1dKSwhY2UuaXNTdWJNZW51KCkmJmJlLmFkZEN1c3RvbVNob3J0Y3V0cyhbe2tleXM6W1siVGFiIl0sWyJTaGlmdCIsIlRhYiJdXSxjYWxsYmFjazpCZT0+''@;'; put 'put ''e2NvbnN0IHFlPWQuZ2V0TmF2aWdhdG9yKCk7cWUuZ2V0Q3VycmVudFBhZ2UoKT4tMSYmKGE9cWUuZ2V0Q3VycmVudFBhZ2UoKSkscWUuY2xlYXIoKSxCZS5zaGlmdEtleT9oLnRvUHJldmlvdXNJdGVtKCk6aC50b05leHRJdGVtKCl9fSx7a2V5czpbWyJFc2NhcGUiXV0sY2FsbGJhY2s6KCk9''@;'; put 'put ''PntkLmNsb3NlKCl9fSx7a2V5czpbWyJFbnRlciJdLFsiU3BhY2UiXV0scHJldmVudERlZmF1bHQ6ITEsY2FsbGJhY2s6QmU9Pntjb25zdCBxZT1sW2guZ2V0Q3VycmVudFBhZ2UoKV07cWUgaW5zdGFuY2VvZiBaVCYmKHFlLm9wZW5PcHRpb25zKCksQmUucHJldmVudERlZmF1bHQoKSkscWUg''@;'; put 'put ''aW5zdGFuY2VvZiBLVCYmKHFlLmFjdGl2YXRlKCksQmUucHJldmVudERlZmF1bHQoKSkscWUgaW5zdGFuY2VvZiBIaHx8QmUucHJldmVudERlZmF1bHQoKX19XSxlQSl9ZnVuY3Rpb24gRChjZSl7Y2UuYWRkTG9jYWxIb29rKCJhZnRlclNlbGVjdGlvbkNoYW5nZSIsYmU9PntiZS5rZXkuc3Rh''@;'; put 'put ''cnRzV2l0aCgiZmlsdGVyXyIpfHxoLmNsZWFyKCl9KSxjZS5hZGRMb2NhbEhvb2soImFmdGVyU3VibWVudU9wZW4iLHYpLGNlLmFkZExvY2FsSG9vaygiYWZ0ZXJPcGVuIix2KSxkPWNlfXJldHVybiBsLmZvckVhY2goY2U9PntjZSBpbnN0YW5jZW9mIEhoJiYoY2UuYWRkTG9jYWxIb29rKCJj''@;'; put 'put ''bGljayIsZihjZSkpLGNlLmFkZExvY2FsSG9vaygiZm9jdXMiLGYoY2UpKSxjZS5hZGRMb2NhbEhvb2soImFmdGVyQ2xvc2UiLGYoY2UpKSl9KSxEKGMpLHsuLi5oLGxpc3RlbjpmdW5jdGlvbiBNKCl7ZC5mb2N1cygpLGQuZ2V0S2V5Ym9hcmRTaG9ydGN1dHNDdHJsKCkubGlzdGVuKGVBKX0s''@;'; put 'put ''c2V0TWVudTpELGdldE1lbnU6ZnVuY3Rpb24gWigpe3JldHVybiBkfSxnZXRMYXN0TWVudVBhZ2U6ZnVuY3Rpb24gcmUoKXtyZXR1cm4gYX19fSh0aGlzLmRyb3Bkb3duTWVudVBsdWdpbi5tZW51LE0pKTtjb25zdCBEPVo9PntYMihOZyx0aGlzKS5saXN0ZW4oKSxaLnByZXZlbnREZWZhdWx0''@;'; put 'put ''KCksdV8oWi5rZXlDb2RlLCJUQUIiKSYmKFouc2hpZnRLZXk/WDIoTmcsdGhpcykudG9QcmV2aW91c0l0ZW0oKTpYMihOZyx0aGlzKS50b05leHRJdGVtKCkpfTt0aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfYnlfdmFsdWUiKS5hZGRMb2NhbEhvb2soImxpc3RUYWJLZXlkb3duIixEKSx0''@;'; put 'put ''aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfYnlfY29uZGl0aW9uIikuYWRkTG9jYWxIb29rKCJzZWxlY3RUYWJLZXlkb3duIixEKX10aGlzLnJlZ2lzdGVyU2hvcnRjdXRzKCksc3VwZXIuZW5hYmxlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe3ZhciBsO3RoaXMuZW5hYmxlZCYmKG51bGwh''@;'; put 'put ''PT0obD10aGlzLmRyb3Bkb3duTWVudVBsdWdpbikmJnZvaWQgMCE9PWwmJmwuZW5hYmxlZCYmdGhpcy5kcm9wZG93bk1lbnVQbHVnaW4ubWVudS5jbGVhckxvY2FsSG9va3MoKSx0aGlzLmNvbXBvbmVudHMuZm9yRWFjaCgoYSxkKT0+e2EuZGVzdHJveSgpLHRoaXMuY29tcG9uZW50cy5zZXQo''@;'; put 'put ''ZCxudWxsKX0pLHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5kZXN0cm95KCksdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uPW51bGwsdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIudW5yZWdpc3Rlck1hcCh0aGlzLnBsdWdpbk5hbWUpKSx0aGlzLnVucmVnaXN0ZXJTaG9ydGN1dHMoKSxzdXBlci5k''@;'; put 'put ''aXNhYmxlUGx1Z2luKCl9cmVnaXN0ZXJTaG9ydGN1dHMoKXt0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJncmlkIikuYWRkU2hvcnRjdXQoe2tleXM6W1siQWx0IiwiQSJdXSxzdG9wUHJvcGFnYXRpb246ITAsY2FsbGJhY2s6KCk9Pntjb25zdCBsPXRoaXMuaG90''@;'; put 'put ''LmdldFNlbGVjdGVkKCk7dGhpcy5jbGVhckNvbmRpdGlvbnMoKSx0aGlzLmZpbHRlcigpLGwmJnRoaXMuaG90LnNlbGVjdENlbGxzKGwpfSxncm91cDpJNWV9KX11bnJlZ2lzdGVyU2hvcnRjdXRzKCl7dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZ3JpZCIpLnJl''@;'; put 'put ''bW92ZVNob3J0Y3V0c0J5R3JvdXAoSTVlKX1hZGRDb25kaXRpb24obCxhLGQpe2xldCBoPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdP2FyZ3VtZW50c1szXTphNjtjb25zdCBmPXRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4obCk7dGhpcy5jb25kaXRpb25Db2xs''@;'; put 'put ''ZWN0aW9uLmFkZENvbmRpdGlvbihmLHtjb21tYW5kOntrZXk6YX0sYXJnczpkfSxoKX1yZW1vdmVDb25kaXRpb25zKGwpe2NvbnN0IGE9dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihsKTt0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24ucmVtb3ZlQ29uZGl0aW9ucyhhKX1jbGVhckNvbmRpdGlv''@;'; put 'put ''bnMobCl7aWYodm9pZCAwPT09bCl0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uY2xlYW4oKTtlbHNle2NvbnN0IGE9dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihsKTt0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24ucmVtb3ZlQ29uZGl0aW9ucyhhKX19aW1wb3J0Q29uZGl0aW9ucyhsKXt0aGlz''@;'; put 'put ''LmNvbmRpdGlvbkNvbGxlY3Rpb24uaW1wb3J0QWxsQ29uZGl0aW9ucyhsKX1leHBvcnRDb25kaXRpb25zKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5leHBvcnRBbGxDb25kaXRpb25zKCl9ZmlsdGVyKCl7Y29uc3R7bmF2aWdhYmxlSGVhZGVyczpsfT10aGlzLmhvdC5nZXRT''@;'; put 'put ''ZXR0aW5ncygpLGE9dGhpcy5fY3JlYXRlRGF0YUZpbHRlcigpLGQ9IXRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5pc0VtcHR5KCk7bGV0IGg9W107Y29uc3QgZj10aGlzLmV4cG9ydENvbmRpdGlvbnMoKSx2PXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVGaWx0ZXIiLGYsWDIoTTksdGhpcykp''@;'; put 'put ''O2lmKCExIT09diYmZCl7Y29uc3QgTT1bXTt0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e3RoaXMuZmlsdGVyc1Jvd3NNYXAuY2xlYXIoKSxoPXlzKGEuZmlsdGVyKCksWj0+Wi5tZXRhLnZpc3VhbFJvdyk7Y29uc3QgRD1HVChoKTtHYSh0aGlzLmhvdC5jb3VudFNvdXJjZVJvd3MoKS0x''@;'; put 'put ''LFo9PntEKFopfHxNLnB1c2goWil9KSxZbihNLFo9Pnt0aGlzLmZpbHRlcnNSb3dzTWFwLnNldFZhbHVlQXRJbmRleChaLCEwKX0pfSwhMCksIWwmJiFoLmxlbmd0aCYmdGhpcy5ob3QuZGVzZWxlY3RDZWxsKCksWEYoTTksdGhpcyx0aGlzLmV4cG9ydENvbmRpdGlvbnMoKSl9ZWxzZSExPT09''@;'; put 'put ''dnx8ZD90aGlzLmltcG9ydENvbmRpdGlvbnMoWDIoTTksdGhpcykpOihYRihNOSx0aGlzLHRoaXMuZXhwb3J0Q29uZGl0aW9ucygpKSx0aGlzLmZpbHRlcnNSb3dzTWFwLmNsZWFyKCkpO3RoaXMuaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkKCkmJnRoaXMuaG90LnNlbGVjdENlbGwobD8tMTow''@;'; put 'put ''LHRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkuaGlnaGxpZ2h0LmNvbCksITEhPT12JiYodGhpcy5ob3QucnVuSG9va3MoImFmdGVyRmlsdGVyIixmKSx0aGlzLmhvdC52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpLHRoaXMuaG90LnJlbmRlcigpKX1nZXRTZWxlY3RlZENvbHVtbigp''@;'; put 'put ''e3ZhciBsO2NvbnN0IGE9bnVsbD09PShsPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkpfHx2b2lkIDA9PT1sP3ZvaWQgMDpsLmhpZ2hsaWdodDtyZXR1cm4gYT97dmlzdWFsSW5kZXg6YS5jb2wscGh5c2ljYWxJbmRleDp0aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGEuY29sKX06''@;'; put 'put ''bnVsbH1nZXREYXRhTWFwQXRDb2x1bW4obCl7Y29uc3QgYT10aGlzLmhvdC50b1Zpc3VhbENvbHVtbihsKSxkPVtdO3JldHVybiBZbih0aGlzLmhvdC5nZXRTb3VyY2VEYXRhQXRDb2woYSksKGgsZik9Pnt2YXIgdjtjb25zdHtyb3c6TSxjb2w6RCx2aXN1YWxDb2w6Wix2aXN1YWxSb3c6cmUs''@;'; put 'put ''dHlwZTpjZSxpbnN0YW5jZTpiZSxkYXRlRm9ybWF0OkVlLGxvY2FsZTpCZX09dGhpcy5ob3QuZ2V0Q2VsbE1ldGEoZixhKSxxZT1udWxsIT09KHY9dGhpcy5ob3QuZ2V0RGF0YUF0Q2VsbCh0aGlzLmhvdC50b1Zpc3VhbFJvdyhmKSxhKSkmJnZvaWQgMCE9PXY/djpoO2QucHVzaCh7bWV0YTp7''@;'; put 'put ''cm93Ok0sY29sOkQsdmlzdWFsQ29sOlosdmlzdWFsUm93OnJlLHR5cGU6Y2UsaW5zdGFuY2U6YmUsZGF0ZUZvcm1hdDpFZSxsb2NhbGU6QmV9LHZhbHVlOnBRKHFlKX0pfSksZH11cGRhdGVWYWx1ZUNvbXBvbmVudENvbmRpdGlvbihsKXtjb25zdCBkPWdRKHRoaXMuaG90LmdldERhdGFBdENv''@;'; put 'put ''bChsKSk7dGhpcy5jb25kaXRpb25VcGRhdGVPYnNlcnZlci51cGRhdGVTdGF0ZXNBdENvbHVtbihsLGQpfXJlc3RvcmVDb21wb25lbnRzKGwpe3ZhciBhO2NvbnN0IGQ9bnVsbD09PShhPXRoaXMuZ2V0U2VsZWN0ZWRDb2x1bW4oKSl8fHZvaWQgMD09PWE/dm9pZCAwOmEucGh5c2ljYWxJbmRl''@;'; put 'put ''eDtsLmZvckVhY2goaD0+e2guaXNIaWRkZW4oKXx8aC5yZXN0b3JlU3RhdGUoZCl9KSx0aGlzLnVwZGF0ZURlcGVuZGVudENvbXBvbmVudHNWaXNpYmlsaXR5KCl9Z2V0T3BlcmF0aW9uQmFzZWRPbkFyZ3VtZW50cyhsLGEsZCxoKXtsZXQgZj1sO3JldHVybiBmPT09R0YmJmEuY29tbWFuZC5r''@;'; put 'put ''ZXkhPT1FMCYmZC5jb21tYW5kLmtleSE9PUUwJiZoLmNvbW1hbmQua2V5IT09RTA/Zj1oUTpoLmNvbW1hbmQua2V5IT09RTAmJihhLmNvbW1hbmQua2V5PT09RTB8fGQuY29tbWFuZC5rZXk9PT1FMCkmJihmPWE2KSxmfXNldExpc3RlbmluZ0Ryb3Bkb3duTWVudSgpe3RoaXMuZHJvcGRvd25N''@;'; put 'put ''ZW51UGx1Z2luJiZ0aGlzLmRyb3Bkb3duTWVudVBsdWdpbi5zZXRMaXN0ZW5pbmcoKX11cGRhdGVEZXBlbmRlbnRDb21wb25lbnRzVmlzaWJpbGl0eSgpe2NvbnN0IGw9dGhpcy5jb21wb25lbnRzLmdldCgiZmlsdGVyX2J5X2NvbmRpdGlvbiIpLHtjb21tYW5kOmF9PWwuZ2V0U3RhdGUoKSxk''@;'; put 'put ''PVt0aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfYnlfY29uZGl0aW9uMiIpLHRoaXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9vcGVyYXRvcnMiKV07YS5zaG93T3BlcmF0b3JzP3RoaXMuc2hvd0NvbXBvbmVudHMoLi4uZCk6dGhpcy5oaWRlQ29tcG9uZW50cyguLi5kKX1fY3JlYXRlRGF0''@;'; put 'put ''YUZpbHRlcigpe3JldHVybiBuZXcgQTVlKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24sYT0+dGhpcy5nZXREYXRhTWFwQXRDb2x1bW4oYSkpfWdldEluZGV4ZXNPZkNvbXBvbmVudHMoKXtjb25z''@;'; put 'put ''dCBsPVtdO2lmKCF0aGlzLmRyb3Bkb3duTWVudVBsdWdpbilyZXR1cm4gbDtjb25zdCBhPXRoaXMuZHJvcGRvd25NZW51UGx1Z2luLm1lbnU7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIFluKGgs''@;'; put 'put ''dj0+e1luKGEubWVudUl0ZW1zLChNLEQpPT57TS5rZXk9PT12LmdldE1lbnVJdGVtRGVzY3JpcHRvcigpLmtleSYmbC5wdXNoKEQpfSl9KSxsfWNoYW5nZUNvbXBvbmVudHNWaXNpYmlsaXR5KCl7bGV0IGw9IShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSl8fGFy''@;'; put 'put ''Z3VtZW50c1swXTtpZighdGhpcy5kcm9wZG93bk1lbnVQbHVnaW4pcmV0dXJuO2NvbnN0IGQ9dGhpcy5kcm9wZG93bk1lbnVQbHVnaW4ubWVudS5ob3RNZW51LGg9ZC5nZXRQbHVnaW4oImhpZGRlblJvd3MiKTtmb3IodmFyIGY9YXJndW1lbnRzLmxlbmd0aCx2PW5ldyBBcnJheShmPjE/Zi0x''@;'; put 'put ''OjApLE09MTtNPGY7TSsrKXZbTS0xXT1hcmd1bWVudHNbTV07Y29uc3QgRD10aGlzLmdldEluZGV4ZXNPZkNvbXBvbmVudHMoLi4udik7bD9oLnNob3dSb3dzKEQpOmguaGlkZVJvd3MoRCksZC5yZW5kZXIoKX1oaWRlQ29tcG9uZW50cygpe2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLGE9''@;'; put 'put ''bmV3IEFycmF5KGwpLGQ9MDtkPGw7ZCsrKWFbZF09YXJndW1lbnRzW2RdO3RoaXMuY2hhbmdlQ29tcG9uZW50c1Zpc2liaWxpdHkoITEsLi4uYSl9c2hvd0NvbXBvbmVudHMoKXtmb3IodmFyIGw9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShsKSxkPTA7ZDxsO2QrKylhW2RdPWFyZ3Vt''@;'; put 'put ''ZW50c1tkXTt0aGlzLmNoYW5nZUNvbXBvbmVudHNWaXNpYmlsaXR5KCEwLC4uLmEpfWRlc3Ryb3koKXt0aGlzLmVuYWJsZWQmJih0aGlzLmNvbXBvbmVudHMuZm9yRWFjaCgobCxhKT0+e251bGwhPT1sJiYobC5kZXN0cm95KCksdGhpcy5jb21wb25lbnRzLnNldChhLG51bGwpKX0pLHRoaXMu''@;'; put 'put ''Y29uZGl0aW9uQ29sbGVjdGlvbi5kZXN0cm95KCksdGhpcy5jb25kaXRpb25VcGRhdGVPYnNlcnZlci5kZXN0cm95KCksdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIudW5yZWdpc3Rlck1hcCh0aGlzLnBsdWdpbk5hbWUpKSxzdXBlci5kZXN0cm95KCl9fWZ1bmN0aW9uIEtodChjKXtjJiZZbihj''@;'; put 'put ''LGw9Pntjb25zdFssYV09bCxkPXRoaXMuaG90LnByb3BUb0NvbChhKTt0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uaGFzQ29uZGl0aW9ucyhkKSYmdGhpcy51cGRhdGVWYWx1ZUNvbXBvbmVudENvbmRpdGlvbihkKX0pfWZ1bmN0aW9uIHFodCgpe2NvbnN0IGM9dGhpcy5kcm9wZG93bk1lbnVQ''@;'; put 'put ''bHVnaW4ubWVudTt0aGlzLnJlc3RvcmVDb21wb25lbnRzKEFycmF5LmZyb20odGhpcy5jb21wb25lbnRzLnZhbHVlcygpKSksYy51cGRhdGVNZW51RGltZW5zaW9ucygpfWZ1bmN0aW9uIFhodCgpe3RoaXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9ieV9jb25kaXRpb24iKS5nZXRTZWxlY3RF''@;'; put 'put ''bGVtZW50KCkuY2xvc2VPcHRpb25zKCksdGhpcy5jb21wb25lbnRzLmdldCgiZmlsdGVyX2J5X2NvbmRpdGlvbjIiKS5nZXRTZWxlY3RFbGVtZW50KCkuY2xvc2VPcHRpb25zKCl9ZnVuY3Rpb24gSmh0KCl7Y29uc3QgYz10aGlzLmRyb3Bkb3duTWVudVBsdWdpbi5tZW51O1gyKENRLHRoaXMp''@;'; put 'put ''LmhhcyhjKXx8WDIoTmcsdGhpcykuc2V0TWVudShjKSxYMihDUSx0aGlzKS5hZGQoYyl9ZnVuY3Rpb24gUWh0KGMpe2MuaXRlbXMucHVzaCh7bmFtZTpzc30pLHRoaXMuY29tcG9uZW50cy5mb3JFYWNoKGw9PntjLml0ZW1zLnB1c2gobC5nZXRNZW51SXRlbURlc2NyaXB0b3IoKSl9KX1mdW5j''@;'; put 'put ''dGlvbiBSNWUoYyl7dmFyIGw7aWYoImFjY2VwdCI9PT1jKXtjb25zdCBkPXRoaXMuZ2V0U2VsZWN0ZWRDb2x1bW4oKTt2YXIgYTtpZihudWxsPT09ZClyZXR1cm4gdm9pZChudWxsPT09KGE9dGhpcy5kcm9wZG93bk1lbnVQbHVnaW4pfHx2b2lkIDA9PT1hfHxhLmNsb3NlKCkpO2NvbnN0e3Bo''@;'; put 'put ''eXNpY2FsSW5kZXg6aH09ZCxmPXRoaXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9ieV9jb25kaXRpb24iKS5nZXRTdGF0ZSgpLHY9dGhpcy5jb21wb25lbnRzLmdldCgiZmlsdGVyX2J5X2NvbmRpdGlvbjIiKS5nZXRTdGF0ZSgpLE09dGhpcy5jb21wb25lbnRzLmdldCgiZmlsdGVyX2J5X3Zh''@;'; put 'put ''bHVlIikuZ2V0U3RhdGUoKSxEPXRoaXMuZ2V0T3BlcmF0aW9uQmFzZWRPbkFyZ3VtZW50cyh0aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfb3BlcmF0b3JzIikuZ2V0QWN0aXZlT3BlcmF0aW9uSWQoKSxmLHYsTSk7dGhpcy5jb25kaXRpb25VcGRhdGVPYnNlcnZlci5ncm91cENoYW5nZXMo''@;'; put 'put ''KTtsZXQgWj10aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uZ2V0Q29sdW1uU3RhY2tQb3NpdGlvbihoKTstMT09PVomJihaPXZvaWQgMCksdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLnJlbW92ZUNvbmRpdGlvbnMoaCksZi5jb21tYW5kLmtleSE9PUUwJiYodGhpcy5jb25kaXRpb25Db2xsZWN0''@;'; put 'put ''aW9uLmFkZENvbmRpdGlvbihoLGYsRCxaKSx2LmNvbW1hbmQua2V5IT09RTAmJnRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5hZGRDb25kaXRpb24oaCx2LEQsWikpLE0uY29tbWFuZC5rZXkhPT1FMCYmdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmFkZENvbmRpdGlvbihoLE0sRCxaKSx0aGlz''@;'; put 'put ''LmNvbmRpdGlvblVwZGF0ZU9ic2VydmVyLmZsdXNoKCksdGhpcy5jb21wb25lbnRzLmZvckVhY2gocmU9PnJlLnNhdmVTdGF0ZShoKSksdGhpcy5maWx0ZXIoKX1udWxsPT09KGw9dGhpcy5kcm9wZG93bk1lbnVQbHVnaW4pfHx2b2lkIDA9PT1sfHxsLmNsb3NlKCl9ZnVuY3Rpb24gZTJ0KGMs''@;'; put 'put ''bCl7Y29uc3QgYT10aGlzLmRyb3Bkb3duTWVudVBsdWdpbi5tZW51O3RoaXMudXBkYXRlRGVwZW5kZW50Q29tcG9uZW50c1Zpc2liaWxpdHkoKSxjLmNvbnN0cnVjdG9yPT09dVEmJiFsLmlucHV0c0NvdW50JiZ0aGlzLnNldExpc3RlbmluZ0Ryb3Bkb3duTWVudSgpLGEudXBkYXRlTWVudURp''@;'; put 'put ''bWVuc2lvbnMoKX1mdW5jdGlvbiBMNWUoKXt0aGlzLnNldExpc3RlbmluZ0Ryb3Bkb3duTWVudSgpfWZ1bmN0aW9uIHQydChjLGwsYSl7Y29uc3QgZD10aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGMpO3RoaXMuZW5hYmxlZCYmdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmhhc0NvbmRpdGlv''@;'; put 'put ''bnMoZCkmJmE9PT10aGlzLmhvdC52aWV3LmdldENvbHVtbkhlYWRlcnNDb3VudCgpLTE/VGkobCwiaHRGaWx0ZXJzQWN0aXZlIik6bG8obCwiaHRGaWx0ZXJzQWN0aXZlIil9ZnVuY3Rpb24gbjJ0KGMpe3ZhciBsO2lmKG51bGw9PT0obD10aGlzLmRyb3Bkb3duTWVudVBsdWdpbil8fHZvaWQg''@;'; put 'put ''MD09PWx8fCFsLmVuYWJsZWQpcmV0dXJuO2NvbnN0e2VkaXRlZENvbmRpdGlvblN0YWNrOntjb25kaXRpb25zOmEsY29sdW1uOmR9LGNvbmRpdGlvbkFyZ3NDaGFuZ2U6aH09YztBcnJheS5pc0FycmF5KGgpJiZYRihNOSx0aGlzLFgyKE05LHRoaXMpLm1hcChNPT4oTS5jb2x1bW49PT1kJiZh''@;'; put 'put ''Lmxlbmd0aD4wJiZNLmNvbmRpdGlvbnMuZm9yRWFjaChEPT57ImJ5X3ZhbHVlIj09PUQubmFtZSYmKEQuYXJncz1bWy4uLmhdXSl9KSxNKSkpO2NvbnN0IGY9YS5maWx0ZXIoTT0+TS5uYW1lPT09QzkpLHY9YS5maWx0ZXIoTT0+TS5uYW1lIT09QzkpO2lmKGYubGVuZ3RoPj0yfHx2Lmxlbmd0''@;'; put 'put ''aD49MylpbChnbGBUaGUgZmlsdGVyIGNvbmRpdGlvbnMgaGF2ZSBiZWVuIGFwcGxpZWQgcHJvcGVybHksIGJ1dCBjb3VsZG7igJl0IGJlIGRpc3BsYXllZCB2aXN1YWxseS5ceDIwCiAgICAgICAgVGhlIG92ZXJhbGwgYW1vdW50IG9mIGNvbmRpdGlvbnMgZXhjZWVkIHRoZSBjYXBhYmlsaXR5''@;'; put 'put ''IG9mIHRoZSBkcm9wZG93biBtZW51Llx4MjAKICAgICAgICBGb3IgbW9yZSBkZXRhaWxzIHNlZSB0aGUgZG9jdW1lbnRhdGlvbi5gKTtlbHNle2NvbnN0IE09dGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmdldE9wZXJhdGlvbihkKTt0aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfYnlfY29u''@;'; put 'put ''ZGl0aW9uIikudXBkYXRlU3RhdGUodlswXSxkKSx0aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfYnlfY29uZGl0aW9uMiIpLnVwZGF0ZVN0YXRlKHZbMV0sZCksdGhpcy5jb21wb25lbnRzLmdldCgiZmlsdGVyX29wZXJhdG9ycyIpLnVwZGF0ZVN0YXRlKE0sZCksdGhpcy5jb21wb25lbnRz''@;'; put 'put ''LmdldCgiZmlsdGVyX2J5X3ZhbHVlIikudXBkYXRlU3RhdGUoYyl9fWNvbnN0IE81ZT0iaW50ZXJuYWwtdXNlLWluLWhhbmRzb250YWJsZSIsU1E9e2xpY2Vuc2VLZXk6TzVlLHVzZUFycmF5QXJpdGhtZXRpYzohMCx1c2VDb2x1bW5JbmRleDohMSx1c2VTdGF0czohMSxldmFsdWF0ZU51bGxU''@;'; put 'put ''b1plcm86ITAscHJlY2lzaW9uRXBzaWxvbjoxZS0xMyxwcmVjaXNpb25Sb3VuZGluZzoxNCxzbWFydFJvdW5kaW5nOiEwLGxlYXBZZWFyMTkwMDohMSxudWxsRGF0ZTp7eWVhcjoxODk5LG1vbnRoOjEyLGRheTozMH0sbnVsbFllYXI6MzAsZGF0ZUZvcm1hdHM6WyJERC9NTS9ZWVlZIiwiREQv''@;'; put 'put ''TU0vWVkiXSx0aW1lRm9ybWF0czpbImhoOm1tIiwiaGg6bW06c3Muc3NzIl0sbWF0Y2hXaG9sZUNlbGw6ITAsdXNlUmVndWxhckV4cHJlc3Npb25zOiExLHVzZVdpbGRjYXJkczohMCxmdW5jdGlvbkFyZ1NlcGFyYXRvcjoiLCIsdGhvdXNhbmRTZXBhcmF0b3I6IiIsZGVjaW1hbFNlcGFyYXRv''@;'; put 'put ''cjoiLiIsbGFuZ3VhZ2U6ImVuR0IifTtmdW5jdGlvbiBQNWUoYyl7dmFyIGw7cmV0dXJue21heENvbHVtbnM6Yy5tYXhDb2x1bW5zLG1heFJvd3M6Yy5tYXhSb3dzLGxhbmd1YWdlOm51bGw9PT0obD1jW3cxXSl8fHZvaWQgMD09PWx8fG51bGw9PT0obD1sLmxhbmd1YWdlKXx8dm9pZCAwPT09''@;'; put 'put ''bD92b2lkIDA6bC5sYW5nQ29kZX19ZnVuY3Rpb24gRjVlKGMpe3JldHVybiBPYmplY3Qua2V5cyhjKS5yZWR1Y2UoKGwsYSk9PigiaHlwZXJmb3JtdWxhIiE9PWEmJihsW2FdPWNbYV0pLGwpLHt9KX1mdW5jdGlvbiBKRigpe2NvbnN0IGM9ImVuZ2luZV9yZWxhdGlvbnNoaXAiLGw9cjModzEp''@;'; put 'put ''O3JldHVybiBsLmhhc0l0ZW0oYyl8fGwucmVnaXN0ZXIoYyxuZXcgTWFwKSxsLmdldEl0ZW0oYyl9ZnVuY3Rpb24gTVEoKXtjb25zdCBjPSJzaGFyZWRfZW5naW5lX3VzYWdlIixsPXIzKHcxKTtyZXR1cm4gbC5oYXNJdGVtKGMpfHxsLnJlZ2lzdGVyKGMsbmV3IE1hcCksbC5nZXRJdGVtKGMp''@;'; put 'put ''fWZ1bmN0aW9uIEg1ZShjKXt2YXIgbDtjb25zdCBhPUpGKCksZD0wPT09YS5zaXplP1tdOkFycmF5LmZyb20obnVsbCE9PShsPWEuZ2V0KGMpKSYmdm9pZCAwIT09bD9sOltdKTtyZXR1cm4gbmV3IE1hcChkLm1hcChoPT5baC5nZXRQbHVnaW4oImZvcm11bGFzIikuc2hlZXRJZCxoXSkpfWZ1''@;'; put 'put ''bmN0aW9uIE41ZShjLGwpe2lmKGMpe2NvbnN0IGE9SkYoKSxkPWEuZ2V0KGMpLGg9TVEoKSxmPWguZ2V0KGMpO2QmJmQuaW5jbHVkZXMobCkmJihkLnNwbGljZShkLmluZGV4T2YobCksMSksMD09PWQubGVuZ3RoJiZhLmRlbGV0ZShjKSksZiYmZi5pbmNsdWRlcyhsLmd1aWQpJiYoZi5zcGxp''@;'; put 'put ''Y2UoZi5pbmRleE9mKGwuZ3VpZCksMSksMD09PWYubGVuZ3RoJiYoaC5kZWxldGUoYyksYy5kZXN0cm95KCkpKX19Y29uc3QgVjVlPSJERC9NTS9ZWVlZIjtmdW5jdGlvbiB4UShjLGwpe3JldHVybiJzdHJpbmciPT10eXBlb2YgYyYmImRhdGUiPT09bH1mdW5jdGlvbiBCNWUoYyxsKXtyZXR1''@;'; put 'put ''cm4gT28oYyxsLCEwKS5pc1ZhbGlkKCl9ZnVuY3Rpb24gajVlKGMsbCl7cmV0dXJuIE9vKGMsbCwhMCkuZm9ybWF0KFY1ZSl9ZnVuY3Rpb24gZzJ0KGMsbCl7cmV0dXJuIE9vKGMsVjVlLCEwKS5mb3JtYXQobCl9ZnVuY3Rpb24gejVlKGMsbCl7Y29uc3QgZD1uZXcgRGF0ZShEYXRlLlVUQygw''@;'; put 'put ''LDAsYystMSkpO3JldHVybiBPbyhkKS5mb3JtYXQobCl9ZnVuY3Rpb24gRVEoYyxsLGEpe2NvbnN0IGQ9ZnVuY3Rpb24gdjJ0KGMsbCl7Y29uc3QgYT1bXTtyZXR1cm4gYy5mb3JFYWNoKGQ9Pntjb25zdCBoPXtmcm9tOmQsdG86bH07YS5mb3JFYWNoKGY9PntmLmZyb20+aC5mcm9tJiZmLnRv''@;'; put 'put ''PD1oLmZyb20mJmYuZnJvbT5mLnRvJiYoaC5mcm9tKz0xKX0pLGguZnJvbT49bCYmKGwrPTEpLGEucHVzaChoKX0pLGF9KGMsZnVuY3Rpb24gbTJ0KGMsbCxhKXtjb25zdCBkPUFycmF5LmZyb20oQXJyYXkoYSkua2V5cygpKS5maWx0ZXIoZj0+ITE9PT1jLmluY2x1ZGVzKGYpKTt2YXIgaDty''@;'; put 'put ''ZXR1cm4gMD09PWw/bnVsbCE9PShoPWRbbF0pJiZ2b2lkIDAhPT1oP2g6MDpkW2wtMV0rMX0oYyxsLGEpKTtyZXR1cm4gZnVuY3Rpb24gYjJ0KGMpe3JldHVybiBjLmZvckVhY2goKGwsYSk9PntjLnNsaWNlKGErMSkuZm9yRWFjaChoPT57aC5mcm9tPmwuZnJvbSYmaC5mcm9tPGgudG8mJiho''@;'; put 'put ''LmZyb20tPTEpfSl9KSxjfShkKX1mdW5jdGlvbiB4OShjLGwsYSl7KGZ1bmN0aW9uIHkydChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwu''@;'; put 'put ''c2V0KGMsYSl9ZnVuY3Rpb24gU2MoYyxsKXtyZXR1cm4gYy5nZXQoVTVlKGMsbCkpfWZ1bmN0aW9uIGw2KGMsbCxhKXtyZXR1cm4gYy5zZXQoVTVlKGMsbCksYSksYX1mdW5jdGlvbiBVNWUoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1''@;'; put 'put ''bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciBuQT1uZXcgV2Vha01hcCxjNj1uZXcgV2Vha01hcCxWaD1uZXcgV2Vha01hcCxRRj1uZXcgV2Vha01hcCxUUT1uZXcgV2Vha01h''@;'; put 'put ''cCxBUT1uZXcgV2Vha01hcCxlSD1uZXcgV2Vha01hcDtjb25zdCBaNWU9Y2xhc3MgXzJ0e2NvbnN0cnVjdG9yKGwsYSxkKXt4OSh0aGlzLG5BLHZvaWQgMCkseDkodGhpcyxjNix2b2lkIDApLHg5KHRoaXMsVmgsdm9pZCAwKSx4OSh0aGlzLFFGLFtdKSx4OSh0aGlzLFRRLFtdKSx4OSh0aGlz''@;'; put 'put ''LEFRLHZvaWQgMCkseDkodGhpcyxlSCxbXSksbDYobkEsdGhpcyxsKSxsNihjNix0aGlzLGEpLGw2KFZoLHRoaXMsZCl9c2V0UmVtb3ZlZEhmSW5kZXhlcyhsKXtyZXR1cm4gbDYoZUgsdGhpcyxsLm1hcChhPT57Y29uc3QgZD1TYyhjNix0aGlzKS5nZXRWaXN1YWxGcm9tUGh5c2ljYWxJbmRl''@;'; put 'put ''eChhKTtyZXR1cm4gdGhpcy5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGQpfSkpLFNjKGVILHRoaXMpfWdldFJlbW92ZWRIZkluZGV4ZXMoKXtyZXR1cm4gU2MoZUgsdGhpcyl9Z2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChsKXtjb25zdCBhPVNjKGM2LHRoaXMpLmdldEluZGV4ZXNTZXF1''@;'; put 'put ''ZW5jZSgpLGQ9U2MoYzYsdGhpcykuZ2V0Tm90VHJpbW1lZEluZGV4ZXMoKTtyZXR1cm4gYS5pbmRleE9mKGRbbF0sbCl9c3luY01vdmVzKGwpe2NvbnN0IGQ9YG1vdmUke3AxKFNjKG5BLHRoaXMpKX1zYDtTYyhWaCx0aGlzKS5nZXRFbmdpbmUoKS5iYXRjaCgoKT0+e2wuZm9yRWFjaChoPT57''@;'; put 'put ''aC5mcm9tIT09aC50byYmaC5mcm9tKzEhPT1oLnRvJiZTYyhWaCx0aGlzKS5nZXRFbmdpbmUoKVtkXShTYyhWaCx0aGlzKS5nZXRTaGVldElkKCksaC5mcm9tLDEsaC50byl9KX0pfXN0b3JlTW92ZXNJbmZvcm1hdGlvbihsLGEsZCl7ITEhPT1kJiYobDYoVFEsdGhpcyxsLm1hcChoPT50aGlz''@;'; put 'put ''LmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoaCkpKSxsNihBUSx0aGlzLHRoaXMuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChhKSkpfWNhbGN1bGF0ZUFuZFN5bmNNb3ZlcyhsLGEpe2lmKFNjKFZoLHRoaXMpLmlzUGVyZm9ybWluZ1VuZG9SZWRvKCl8fCExPT09bHx8ITE9PT1hKXJldHVy''@;'; put 'put ''bjtjb25zdCBkPUVRKFNjKFRRLHRoaXMpLFNjKEFRLHRoaXMpLFNjKGM2LHRoaXMpLmdldE51bWJlck9mSW5kZXhlcygpKTtudWxsPT09U2MoVmgsdGhpcykuZ2V0U2hlZXRJZCgpP1NjKFZoLHRoaXMpLmdldFBvc3Rwb25lQWN0aW9uKCgpPT50aGlzLnN5bmNNb3ZlcyhkKSk6dGhpcy5zeW5j''@;'; put 'put ''TW92ZXMoZCl9Z2V0SW5kZXhlc0NoYW5nZVN5bmNNZXRob2QoKXtjb25zdCBsPWBzZXQke3AxKFNjKG5BLHRoaXMpKX1PcmRlcmA7cmV0dXJuIGE9PntpZihTYyhWaCx0aGlzKS5pc1BlcmZvcm1pbmdVbmRvUmVkbygpKXJldHVybjtjb25zdCBkPVNjKGM2LHRoaXMpLmdldEluZGV4ZXNTZXF1''@;'; put 'put ''ZW5jZSgpO2lmKCJ1cGRhdGUiPT09YSYmZC5sZW5ndGg+MCl7Y29uc3QgaD1TYyhRRix0aGlzKS5tYXAoRD0+ZC5pbmRleE9mKEQpKSxmPVNjKFZoLHRoaXMpLmdldEVuZ2luZSgpLmdldFNoZWV0RGltZW5zaW9ucyhTYyhWaCx0aGlzKS5nZXRTaGVldElkKCkpO2xldCB2O3Y9InJvdyI9PT1T''@;'; put 'put ''YyhuQSx0aGlzKT9mLmhlaWdodDpmLndpZHRoO2ZvcihsZXQgRD1oLmxlbmd0aDtEPHY7RCs9MSloLnB1c2goRCk7U2MoVmgsdGhpcykuZ2V0RW5naW5lKClbbF0oU2MoVmgsdGhpcykuZ2V0U2hlZXRJZCgpLGgpfWw2KFFGLHRoaXMsZCl9fWluaXQoKXtsNihRRix0aGlzLFNjKGM2LHRoaXMp''@;'; put 'put ''LmdldEluZGV4ZXNTZXF1ZW5jZSgpKX19O2Z1bmN0aW9uIEU5KGMsbCxhKXsoZnVuY3Rpb24gdzJ0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMs''@;'; put 'put ''bCksbC5zZXQoYyxhKX1mdW5jdGlvbiBWZyhjLGwpe3JldHVybiBjLmdldChXNWUoYyxsKSl9ZnVuY3Rpb24gVDkoYyxsLGEpe3JldHVybiBjLnNldChXNWUoYyxsKSxhKSxhfWZ1bmN0aW9uIFc1ZShjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJu''@;'; put 'put ''IGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIHRIPW5ldyBXZWFrTWFwLG5IPW5ldyBXZWFrTWFwLGtRPW5ldyBXZWFrTWFwLERRPW5ldyBXZWFrTWFwLElRPW5ldyBX''@;'; put 'put ''ZWFrTWFwLFJRPW5ldyBXZWFrTWFwLExRPW5ldyBXZWFrTWFwO2NvbnN0IFMydD1jbGFzcyBDMnR7Y29uc3RydWN0b3IobCxhLGQpe0U5KHRoaXMsdEgsdm9pZCAwKSxFOSh0aGlzLG5ILHZvaWQgMCksRTkodGhpcyxrUSx2b2lkIDApLEU5KHRoaXMsRFEsITEpLEU5KHRoaXMsSVEsITEpLEU5''@;'; put 'put ''KHRoaXMsUlEsbnVsbCksRTkodGhpcyxMUSxudWxsKSxUOSh0SCx0aGlzLG5ldyBaNWUoInJvdyIsbCx0aGlzKSksVDkobkgsdGhpcyxuZXcgWjVlKCJjb2x1bW4iLGEsdGhpcykpLFQ5KGtRLHRoaXMsZCl9Z2V0Rm9yQXhpcyhsKXtyZXR1cm4gVmcoInJvdyI9PT1sP3RIOm5ILHRoaXMpfXNl''@;'; put 'put ''dFBlcmZvcm1VbmRvKGwpe1Q5KERRLHRoaXMsbCl9c2V0UGVyZm9ybVJlZG8obCl7VDkoSVEsdGhpcyxsKX1pc1BlcmZvcm1pbmdVbmRvUmVkbygpe3JldHVybiBWZyhEUSx0aGlzKXx8VmcoSVEsdGhpcyl9Z2V0U2hlZXRJZCgpe3JldHVybiBWZyhMUSx0aGlzKX1nZXRFbmdpbmUoKXtyZXR1''@;'; put 'put ''cm4gVmcoUlEsdGhpcyl9Z2V0UG9zdHBvbmVBY3Rpb24oKXtyZXR1cm4gVmcoa1EsdGhpcyl9c2V0dXBTeW5jRW5kcG9pbnQobCxhKXtUOShSUSx0aGlzLGwpLFQ5KExRLHRoaXMsYSksVmcodEgsdGhpcykuaW5pdCgpLFZnKG5ILHRoaXMpLmluaXQoKX19O2Z1bmN0aW9uIEE5KGMsbCxhKXty''@;'; put 'put ''ZXR1cm4obD1mdW5jdGlvbiB4MnQoYyl7dmFyIGw9ZnVuY3Rpb24gRTJ0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0''@;'; put 'put ''IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/''@;'; put 'put ''bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBPUShjLGwsYSl7WTVlKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBZNWUoYyxsKXtpZihs''@;'; put 'put ''LmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIHU2KGMsbCxhKXtyZXR1cm4gYy5zZXQoanMoYyxsKSxhKSxhfWZ1bmN0aW9uIGs5KGMsbCl7cmV0dXJuIGMu''@;'; put 'put ''Z2V0KGpzKGMsbCkpfWZ1bmN0aW9uIGpzKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmpl''@;'; put 'put ''Y3QiKX1jb25zdCB3MT0iZm9ybXVsYXMiLFQydD1bIm1heFJvd3MiLCJtYXhDb2x1bW5zIiwibGFuZ3VhZ2UiXTtTYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJOYW1lZEV4cHJlc3Npb25BZGRlZCIpLFNhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlck5hbWVkRXhwcmVz''@;'; put 'put ''c2lvblJlbW92ZWQiKSxTYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJTaGVldEFkZGVkIiksU2EuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyU2hlZXRSZW1vdmVkIiksU2EuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyU2hlZXRSZW5hbWVkIiksU2EuZ2V0U2lu''@;'; put 'put ''Z2xldG9uKCkucmVnaXN0ZXIoImFmdGVyRm9ybXVsYXNWYWx1ZXNVcGRhdGUiKTtjb25zdCBsdz1jPT4iVW5kb1JlZG8udW5kbyI9PT1jfHwiVW5kb1JlZG8ucmVkbyI9PT1jfHwiYXV0byI9PT1jO3ZhciBCZz1uZXcgV2Vha01hcCxySD1uZXcgV2Vha01hcCxyQT1uZXcgV2Vha01hcCxLcz1u''@;'; put 'put ''ZXcgV2Vha1NldDtjbGFzcyBrMnQgZXh0ZW5kcyBGc3tjb25zdHJ1Y3Rvcigpe3ZhciBsO3N1cGVyKC4uLmFyZ3VtZW50cyksbD10aGlzLGZ1bmN0aW9uIE0ydChjLGwpe1k1ZShjLGwpLGwuYWRkKGMpfSh0aGlzLEtzKSxPUSh0aGlzLEJnLCExKSxPUSh0aGlzLHJILCExKSxPUSh0aGlzLHJB''@;'; put 'put ''LFtbInZhbHVlc1VwZGF0ZWQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGpzKEtzLGwsVzJ0KS5jYWxsKGwsLi4uZCl9XSxbIm5hbWVkRXhwcmVzc2lvbkFkZGVkIixmdW5j''@;'; put 'put ''dGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBqcyhLcyxsLFkydCkuY2FsbChsLC4uLmQpfV0sWyJuYW1lZEV4cHJlc3Npb25SZW1vdmVkIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1''@;'; put 'put ''bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBqcyhLcyxsLEcydCkuY2FsbChsLC4uLmQpfV0sWyJzaGVldEFkZGVkIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDto''@;'; put 'put ''PGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBqcyhLcyxsLCQydCkuY2FsbChsLC4uLmQpfV0sWyJzaGVldFJlbmFtZWQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJu''@;'; put 'put ''IGpzKEtzLGwsSzJ0KS5jYWxsKGwsLi4uZCl9XSxbInNoZWV0UmVtb3ZlZCIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4ganMoS3MsbCxxMnQpLmNhbGwobCwuLi5kKX1dXSks''@;'; put 'put ''QTkodGhpcywic3RhdGljUmVnaXN0ZXIiLHIzKCJmb3JtdWxhcyIpKSxBOSh0aGlzLCJlbmdpbmUiLG51bGwpLEE5KHRoaXMsInNoZWV0SWQiLG51bGwpLEE5KHRoaXMsInNoZWV0TmFtZSIsbnVsbCksQTkodGhpcywiaW5kZXhTeW5jZXIiLG51bGwpLEE5KHRoaXMsInJvd0F4aXNTeW5jZXIi''@;'; put 'put ''LG51bGwpLEE5KHRoaXMsImNvbHVtbkF4aXNTeW5jZXIiLG51bGwpfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiB3MX1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAyNjB9c3RhdGljIGdldCBTRVRUSU5HX0tFWVMoKXtyZXR1cm5bdzEsLi4uVDJ0XX1pc0VuYWJs''@;'; put 'put ''ZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbdzFdfWVuYWJsZVBsdWdpbigpe3ZhciBsLGE9dGhpcztpZighdGhpcy5lbmFibGVkKXtpZih0aGlzLmVuZ2luZT1udWxsIT09KGw9ZnVuY3Rpb24gbzJ0KGMpe2NvbnN0IGw9Yy5nZXRTZXR0aW5ncygpLGE9bFt3MV0sZD1hPy5l''@;'; put 'put ''bmdpbmU7aWYoITA9PT1hfHxfYyhkKSlyZXR1cm4gbnVsbDt2YXIgaDtpZigiZnVuY3Rpb24iPT10eXBlb2YgZC5oeXBlcmZvcm11bGF8fCJmdW5jdGlvbiI9PXR5cGVvZiBkKXJldHVybiBmdW5jdGlvbiBzMnQoYyxsLGEpe2NvbnN0IGQ9bFt3MV0saD1mdW5jdGlvbiByMnQoYyl7dmFyIGw7''@;'; put 'put ''Y29uc3QgYT1jW3cxXSxkPUY1ZShudWxsIT1hJiZudWxsIT09KGw9YS5lbmdpbmUpJiZ2b2lkIDAhPT1sJiZsLmh5cGVyZm9ybXVsYT9hLmVuZ2luZTp7fSksaD1QNWUoYyk7cmV0dXJuey4uLlNRLC4uLmQsLi4uaH19KGwpLGY9SkYoKSx2PU1RKCk7KGZ1bmN0aW9uIGwydChjLGwpe2wmJmwu''@;'; put 'put ''Zm9yRWFjaChhPT57Y29uc3R7bmFtZTpkLHBsdWdpbjpoLHRyYW5zbGF0aW9uczpmfT1hO3RyeXtjLnJlZ2lzdGVyRnVuY3Rpb24oZCxoLGYpfWNhdGNoKHYpe2lsKHYubWVzc2FnZSl9fSl9KShjLGQuZnVuY3Rpb25zKSxmdW5jdGlvbiBjMnQoYyxsKXtpZihsKXtjb25zdHtsYW5nQ29kZTph''@;'; put 'put ''fT1sO3RyeXtjLnJlZ2lzdGVyTGFuZ3VhZ2UoYSxsKX1jYXRjaChkKXtpbChkLm1lc3NhZ2UpfX19KGMsZC5sYW5ndWFnZSk7Y29uc3QgTT1jLmJ1aWxkRW1wdHkoaCk7cmV0dXJuIGYuc2V0KE0sW2FdKSx2LnNldChNLFthLmd1aWRdKSxmdW5jdGlvbiB1MnQoYyxsKXtsJiYoYy5zdXNwZW5k''@;'; put 'put ''RXZhbHVhdGlvbigpLGwuZm9yRWFjaChhPT57Y29uc3R7bmFtZTpkLGV4cHJlc3Npb246aCxzY29wZTpmLG9wdGlvbnM6dn09YTt0cnl7Yy5hZGROYW1lZEV4cHJlc3Npb24oZCxoLGYsdil9Y2F0Y2goTSl7aWwoTS5tZXNzYWdlKX19KSxjLnJlc3VtZUV2YWx1YXRpb24oKSl9KE0sZC5uYW1l''@;'; put 'put ''ZEV4cHJlc3Npb25zKSxNLm9uKCJzaGVldEFkZGVkIiwoKT0+e00ucmVidWlsZEFuZFJlY2FsY3VsYXRlKCl9KSxNLm9uKCJzaGVldFJlbW92ZWQiLCgpPT57TS5yZWJ1aWxkQW5kUmVjYWxjdWxhdGUoKX0pLE19KG51bGwhPT0oaD1kLmh5cGVyZm9ybXVsYSkmJnZvaWQgMCE9PWg/aDpkLGws''@;'; put 'put ''Yyk7aWYoIm9iamVjdCI9PXR5cGVvZiBkJiZfYyhkLmh5cGVyZm9ybXVsYSkpe2NvbnN0IGY9SkYoKSx2PU1RKCkuZ2V0KGQpO3JldHVybiBmLmhhcyhkKXx8Zi5zZXQoZCxbXSksZi5nZXQoZCkucHVzaChjKSx2JiZ2LnB1c2goYy5ndWlkKSxkLmdldENvbmZpZygpLmxpY2Vuc2VLZXl8fGQu''@;'; put 'put ''dXBkYXRlQ29uZmlnKHtsaWNlbnNlS2V5Ok81ZX0pLChkLmdldENvbmZpZygpLmxlYXBZZWFyMTkwMCE9PVNRLmxlYXBZZWFyMTkwMHx8ITE9PT1OTyhkLmdldENvbmZpZygpLm51bGxEYXRlLFNRLm51bGxEYXRlKSkmJmlsKGdsYElmIHlvdSB1c2UgSHlwZXJGb3JtdWxhIHdpdGggSGFuZHNv''@;'; put 'put ''bnRhYmxlLCBrZWVwIHRoZSBkZWZhdWx0IFxgbGVhcFllYXIxOTAwXGAgYW5kIFxgbnVsbERhdGVcYCAKICAgICAgc2V0dGluZ3MuIE90aGVyd2lzZSwgSHlwZXJGb3JtdWxhJ3MgZGF0ZXMgbWF5IG5vdCBzeW5jIGNvcnJlY3RseSB3aXRoIEhhbmRzb250YWJsZSdzIGRhdGVzLmApLGR9cmV0''@;'; put 'put ''dXJuIG51bGx9KHRoaXMuaG90KSkmJnZvaWQgMCE9PWw/bDp0aGlzLmVuZ2luZSwhdGhpcy5lbmdpbmUpcmV0dXJuIHZvaWQgaWwoIk1pc3NpbmcgdGhlIHJlcXVpcmVkIGBlbmdpbmVgIGtleSBpbiB0aGUgRm9ybXVsYXMgc2V0dGluZ3MuIFBsZWFzZSBmaWxsIGl0IHdpdGggZWl0aGVyIGFu''@;'; put 'put ''IGVuZ2luZSBjbGFzcyBvciBhbiBlbmdpbmUgaW5zdGFuY2UuIik7aWYobnVsbCE9PXRoaXMuc2hlZXROYW1lJiYhdGhpcy5lbmdpbmUuZG9lc1NoZWV0RXhpc3QodGhpcy5zaGVldE5hbWUpKXtjb25zdCBkPXRoaXMuYWRkU2hlZXQodGhpcy5zaGVldE5hbWUsdGhpcy5ob3QuZ2V0U291cmNl''@;'; put 'put ''RGF0YUFycmF5KCkpOyExIT09ZCYmanMoS3MsdGhpcyxpQSkuY2FsbCh0aGlzLGQpfXRoaXMuYWRkSG9vaygiYmVmb3JlTG9hZERhdGEiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0''@;'; put 'put ''dXJuIGpzKEtzLGEsRzVlKS5jYWxsKGEsLi4uaCl9KSx0aGlzLmFkZEhvb2soImFmdGVyTG9hZERhdGEiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIGpzKEtzLGEsJDVlKS5j''@;'; put 'put ''YWxsKGEsLi4uaCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVVwZGF0ZURhdGEiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIGpzKEtzLGEsRzVlKS5jYWxsKGEsLi4uaCl9KSx0''@;'; put 'put ''aGlzLmFkZEhvb2soImFmdGVyVXBkYXRlRGF0YSIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4ganMoS3MsYSwkNWUpLmNhbGwoYSwuLi5oKX0pLHRoaXMuYWRkSG9vaygibW9k''@;'; put 'put ''aWZ5RGF0YSIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4ganMoS3MsYSxMMnQpLmNhbGwoYSwuLi5oKX0pLHRoaXMuYWRkSG9vaygibW9kaWZ5U291cmNlRGF0YSIsZnVuY3Rp''@;'; put 'put ''b24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4ganMoS3MsYSxPMnQpLmNhbGwoYSwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlVmFsaWRhdGUiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFy''@;'; put 'put ''Z3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIGpzKEtzLGEsRDJ0KS5jYWxsKGEsLi4uaCl9KSx0aGlzLmFkZEhvb2soImFmdGVyU2V0U291cmNlRGF0YUF0Q2VsbCIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRz''@;'; put 'put ''Lmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4ganMoS3MsYSxQMnQpLmNhbGwoYSwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJTZXREYXRhQXRDZWxsIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3''@;'; put 'put ''IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBqcyhLcyxhLEs1ZSkuY2FsbChhLC4uLmgpfSksdGhpcy5hZGRIb29rKCJhZnRlclNldERhdGFBdFJvd1Byb3AiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCks''@;'; put 'put ''Zj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIGpzKEtzLGEsSzVlKS5jYWxsKGEsLi4uaCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZUNyZWF0ZVJvdyIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2Zd''@;'; put 'put ''PWFyZ3VtZW50c1tmXTtyZXR1cm4ganMoS3MsYSxGMnQpLmNhbGwoYSwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlQ3JlYXRlQ29sIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3Jl''@;'; put 'put ''dHVybiBqcyhLcyxhLEgydCkuY2FsbChhLC4uLmgpfSksdGhpcy5hZGRIb29rKCJhZnRlckNyZWF0ZVJvdyIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4ganMoS3MsYSxCMnQp''@;'; put 'put ''LmNhbGwoYSwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJDcmVhdGVDb2wiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIGpzKEtzLGEsajJ0KS5jYWxsKGEsLi4uaCl9KSx0''@;'; put 'put ''aGlzLmFkZEhvb2soImJlZm9yZVJlbW92ZVJvdyIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4ganMoS3MsYSxOMnQpLmNhbGwoYSwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYmVm''@;'; put 'put ''b3JlUmVtb3ZlQ29sIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBqcyhLcyxhLFYydCkuY2FsbChhLC4uLmgpfSksdGhpcy5hZGRIb29rKCJhZnRlclJlbW92ZVJvdyIsZnVu''@;'; put 'put ''Y3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4ganMoS3MsYSx6MnQpLmNhbGwoYSwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJSZW1vdmVDb2wiLGZ1bmN0aW9uKCl7Zm9yKHZhciBk''@;'; put 'put ''PWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIGpzKEtzLGEsVTJ0KS5jYWxsKGEsLi4uaCl9KSx0aGlzLmluZGV4U3luY2VyPW5ldyBTMnQodGhpcy5ob3Qucm93SW5kZXhNYXBwZXIsdGhpcy5ob3QuY29sdW1uSW5k''@;'; put 'put ''ZXhNYXBwZXIsZD0+e3RoaXMuaG90LmFkZEhvb2tPbmNlKCJpbml0IiwoKT0+e2QoKX0pfSksdGhpcy5yb3dBeGlzU3luY2VyPXRoaXMuaW5kZXhTeW5jZXIuZ2V0Rm9yQXhpcygicm93IiksdGhpcy5jb2x1bW5BeGlzU3luY2VyPXRoaXMuaW5kZXhTeW5jZXIuZ2V0Rm9yQXhpcygiY29sdW1u''@;'; put 'put ''IiksdGhpcy5ob3QuYWRkSG9vaygiYWZ0ZXJSb3dTZXF1ZW5jZUNoYW5nZSIsdGhpcy5yb3dBeGlzU3luY2VyLmdldEluZGV4ZXNDaGFuZ2VTeW5jTWV0aG9kKCkpLHRoaXMuaG90LmFkZEhvb2soImFmdGVyQ29sdW1uU2VxdWVuY2VDaGFuZ2UiLHRoaXMuY29sdW1uQXhpc1N5bmNlci5nZXRJ''@;'; put 'put ''bmRleGVzQ2hhbmdlU3luY01ldGhvZCgpKSx0aGlzLmhvdC5hZGRIb29rKCJiZWZvcmVSb3dNb3ZlIiwoZCxoLGYsdik9Pnt0aGlzLnJvd0F4aXNTeW5jZXIuc3RvcmVNb3Zlc0luZm9ybWF0aW9uKGQsaCx2KX0pLHRoaXMuaG90LmFkZEhvb2soImJlZm9yZUNvbHVtbk1vdmUiLChkLGgsZix2''@;'; put 'put ''KT0+e3RoaXMuY29sdW1uQXhpc1N5bmNlci5zdG9yZU1vdmVzSW5mb3JtYXRpb24oZCxoLHYpfSksdGhpcy5ob3QuYWRkSG9vaygiYWZ0ZXJSb3dNb3ZlIiwoZCxoLGYsdixNKT0+e3RoaXMucm93QXhpc1N5bmNlci5jYWxjdWxhdGVBbmRTeW5jTW92ZXModixNKX0pLHRoaXMuaG90LmFkZEhv''@;'; put 'put ''b2soImFmdGVyQ29sdW1uTW92ZSIsKGQsaCxmLHYsTSk9Pnt0aGlzLmNvbHVtbkF4aXNTeW5jZXIuY2FsY3VsYXRlQW5kU3luY01vdmVzKHYsTSl9KSx0aGlzLmhvdC5hZGRIb29rKCJiZWZvcmVDb2x1bW5GcmVlemUiLChkLGgpPT57dGhpcy5jb2x1bW5BeGlzU3luY2VyLnN0b3JlTW92ZXNJ''@;'; put 'put ''bmZvcm1hdGlvbihbZF0sdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5maXhlZENvbHVtbnNTdGFydCxoKX0pLHRoaXMuaG90LmFkZEhvb2soImFmdGVyQ29sdW1uRnJlZXplIiwoZCxoKT0+e3RoaXMuY29sdW1uQXhpc1N5bmNlci5jYWxjdWxhdGVBbmRTeW5jTW92ZXMoaCxoKX0pLHRoaXMuaG90''@;'; put 'put ''LmFkZEhvb2soImJlZm9yZUNvbHVtblVuZnJlZXplIiwoZCxoKT0+e3RoaXMuY29sdW1uQXhpc1N5bmNlci5zdG9yZU1vdmVzSW5mb3JtYXRpb24oW2RdLHRoaXMuaG90LmdldFNldHRpbmdzKCkuZml4ZWRDb2x1bW5zU3RhcnQtMSxoKX0pLHRoaXMuaG90LmFkZEhvb2soImFmdGVyQ29sdW1u''@;'; put 'put ''VW5mcmVlemUiLChkLGgpPT57dGhpcy5jb2x1bW5BeGlzU3luY2VyLmNhbGN1bGF0ZUFuZFN5bmNNb3ZlcyhoLGgpfSksdGhpcy5hZGRIb29rKCJhZnRlckNlbGxNZXRhUmVzZXQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtm''@;'; put 'put ''KyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIGpzKEtzLGEsUjJ0KS5jYWxsKGEsLi4uaCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVVuZG8iLCgpPT57dGhpcy5pbmRleFN5bmNlci5zZXRQZXJmb3JtVW5kbyghMCksdGhpcy5lbmdpbmUudW5kbygpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVS''@;'; put 'put ''ZWRvIiwoKT0+e3RoaXMuaW5kZXhTeW5jZXIuc2V0UGVyZm9ybVJlZG8oITApLHRoaXMuZW5naW5lLnJlZG8oKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJVbmRvIiwoKT0+e3RoaXMuaW5kZXhTeW5jZXIuc2V0UGVyZm9ybVVuZG8oITEpfSksdGhpcy5hZGRIb29rKCJhZnRlclVuZG8iLCgpPT57''@;'; put 'put ''dGhpcy5pbmRleFN5bmNlci5zZXRQZXJmb3JtUmVkbyghMSl9KSx0aGlzLmFkZEhvb2soImFmdGVyRGV0YWNoQ2hpbGQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIGpzKEtz''@;'; put 'put ''LGEsWjJ0KS5jYWxsKGEsLi4uaCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZUF1dG9maWxsIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBqcyhLcyxhLEkydCkuY2FsbChhLC4u''@;'; put 'put ''LmgpfSksazkockEsdGhpcykuZm9yRWFjaChkPT57bGV0W2gsZl09ZDtyZXR1cm4gdGhpcy5lbmdpbmUub24oaCxmKX0pLHN1cGVyLmVuYWJsZVBsdWdpbigpfX1kaXNhYmxlUGx1Z2luKCl7azkockEsdGhpcykuZm9yRWFjaChsPT57bGV0W2EsZF09bDtyZXR1cm4gdGhpcy5lbmdpbmUub2Zm''@;'; put 'put ''KGEsZCl9KSxONWUodGhpcy5lbmdpbmUsdGhpcy5ob3QpLHRoaXMuZW5naW5lPW51bGwsc3VwZXIuZGlzYWJsZVBsdWdpbigpfXVwZGF0ZVBsdWdpbihsKXtjb25zdCBhPWZ1bmN0aW9uIGkydChjKXt2YXIgbDtjb25zdCBhPWNbdzFdO3JldHVybnsuLi5GNWUobnVsbCE9YSYmbnVsbCE9PShs''@;'; put 'put ''PWEuZW5naW5lKSYmdm9pZCAwIT09bCYmbC5oeXBlcmZvcm11bGE/YS5lbmdpbmU6e30pLC4uLlA1ZShjKX19KHRoaXMuaG90LmdldFNldHRpbmdzKCkpOyhmdW5jdGlvbiBhMnQoYyxsKXtyZXR1cm4gT2JqZWN0LmtleXMobCkuc29tZShhPT52b2lkIDAhPT1sW2FdJiZsW2FdIT09Y1thXSl9''@;'; put 'put ''KSh0aGlzLmVuZ2luZS5nZXRDb25maWcoKSxhKSYmdGhpcy5lbmdpbmUudXBkYXRlQ29uZmlnKGEpO2NvbnN0IGQ9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVt3MV07aWYoUGEoZCkmJlBhKGQuc2hlZXROYW1lKSYmZC5zaGVldE5hbWUhPT10aGlzLnNoZWV0TmFtZSYmdGhpcy5zd2l0Y2hTaGVl''@;'; put 'put ''dChkLnNoZWV0TmFtZSksIWwuZGF0YSYmbnVsbD09PXRoaXMuc2hlZXROYW1lKXtjb25zdCBoPXRoaXMuaG90LmdldFNldHRpbmdzKClbdzFdLnNoZWV0TmFtZTtpZihoJiZ0aGlzLmVuZ2luZS5kb2VzU2hlZXRFeGlzdChoKSl0aGlzLnN3aXRjaFNoZWV0KHRoaXMuc2hlZXROYW1lKTtlbHNl''@;'; put 'put ''e2NvbnN0IGY9dGhpcy5hZGRTaGVldChoPz92b2lkIDAsdGhpcy5ob3QuZ2V0U291cmNlRGF0YUFycmF5KCkpO2pzKEtzLHRoaXMsaUEpLmNhbGwodGhpcyxmKX19c3VwZXIudXBkYXRlUGx1Z2luKGwpfWRlc3Ryb3koKXtrOShyQSx0aGlzKS5mb3JFYWNoKGw9Pnt2YXIgYTtsZXRbZCxoXT1s''@;'; put 'put ''O3JldHVybiBudWxsPT09KGE9dGhpcy5lbmdpbmUpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLm9mZihkLGgpfSksdTYockEsdGhpcyxudWxsKSxONWUodGhpcy5lbmdpbmUsdGhpcy5ob3QpLHRoaXMuZW5naW5lPW51bGwsc3VwZXIuZGVzdHJveSgpfWFkZFNoZWV0KGwsYSl7aWYoUGEoYSkmJiFF''@;'; put 'put ''M2UoYSkpcmV0dXJuIGlsKCJUaGUgcHJvdmlkZWQgZGF0YSBzaG91bGQgYmUgYW4gYXJyYXkgb2YgYXJyYXlzLiIpLCExO2lmKG51bGwhPWwmJnRoaXMuZW5naW5lLmRvZXNTaGVldEV4aXN0KGwpKXJldHVybiBpbCgiU2hlZXQgd2l0aCB0aGUgcHJvdmlkZWQgbmFtZSBhbHJlYWR5IGV4aXN0''@;'; put 'put ''cy4iKSwhMTt0cnl7Y29uc3QgZD10aGlzLmVuZ2luZS5hZGRTaGVldChsPz92b2lkIDApO3JldHVybiBhJiZ0aGlzLmVuZ2luZS5zZXRTaGVldENvbnRlbnQodGhpcy5lbmdpbmUuZ2V0U2hlZXRJZChkKSxhKSxkfWNhdGNoKGQpe3JldHVybiBpbChkLm1lc3NhZ2UpLCExfX1zd2l0Y2hTaGVl''@;'; put 'put ''dChsKXtpZighdGhpcy5lbmdpbmUuZG9lc1NoZWV0RXhpc3QobCkpcmV0dXJuIHZvaWQgTiQoYFRoZSBzaGVldCBuYW1lZCBcYCR7bH1cYCBkb2VzIG5vdCBleGlzdCwgc3dpdGNoIGFib3J0ZWQuYCk7anMoS3MsdGhpcyxpQSkuY2FsbCh0aGlzLGwpO2NvbnN0IGE9dGhpcy5lbmdpbmUuZ2V0''@;'; put 'put ''U2hlZXRTZXJpYWxpemVkKHRoaXMuc2hlZXRJZCk7YS5sZW5ndGg+MCYmdGhpcy5ob3QubG9hZERhdGEoYSxgJHtwMSh3MSl9LnN3aXRjaFNoZWV0YCl9Z2V0Q2VsbFR5cGUobCxhKXtsZXQgZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06''@;'; put 'put ''dGhpcy5zaGVldElkO2NvbnN0IGg9dGhpcy5ob3QudG9QaHlzaWNhbFJvdyhsKSxmPXRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4oYSk7cmV0dXJuIG51bGwhPT1oJiZudWxsIT09Zj90aGlzLmVuZ2luZS5nZXRDZWxsVHlwZSh7c2hlZXQ6ZCxyb3c6dGhpcy5yb3dBeGlzU3luY2VyLmdldEhm''@;'; put 'put ''SW5kZXhGcm9tVmlzdWFsSW5kZXgobCksY29sOnRoaXMuY29sdW1uQXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGEpfSk6IkVNUFRZIn1pc0Zvcm11bGFDZWxsVHlwZShsLGEpe3JldHVybiB0aGlzLmVuZ2luZS5kb2VzQ2VsbEhhdmVGb3JtdWxhKHtzaGVldDphcmd1bWVu''@;'; put 'put ''dHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06dGhpcy5zaGVldElkLHJvdzp0aGlzLnJvd0F4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChsKSxjb2w6dGhpcy5jb2x1bW5BeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgo''@;'; put 'put ''YSl9KX1yZW5kZXJEZXBlbmRlbnRTaGVldHMobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXTtjb25zdCBkPW5ldyBTZXQ7bC5mb3JFYWNoKGg9Pnt2YXIgZjtjb25zdCB2PW51bGw9PWh8fG51bGw9PT0oZj1oLmFkZHJlc3Mp''@;'; put 'put ''fHx2b2lkIDA9PT1mP3ZvaWQgMDpmLnNoZWV0O3ZvaWQgMCE9PXYmJihkLmhhcyh2KXx8ZC5hZGQodikpfSksSDVlKHRoaXMuZW5naW5lKS5mb3JFYWNoKChoLGYpPT57dmFyIHY7KGF8fGYhPT10aGlzLnNoZWV0SWQpJiZkLmhhcyhmKSYmKGgucmVuZGVyKCksbnVsbD09PSh2PWgudmlldyl8''@;'; put 'put ''fHZvaWQgMD09PXZ8fHYuYWRqdXN0RWxlbWVudHNTaXplKCkpfSl9dmFsaWRhdGVEZXBlbmRlbnRDZWxscyhsKXtjb25zdCBkPWY9Pnt2YXIgdjtjb25zdHtyb3c6TSxjb2w6RCxzaGVldDpafT1udWxsIT09KHY9Zj8uYWRkcmVzcykmJnZvaWQgMCE9PXY/djp7fTtyZXR1cm4gUGEoWik/YCR7''@;'; put 'put ''Wn06JHtNfXgke0R9YDoiIn0saD1uZXcgU2V0KChhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06W10pLm1hcChmPT5kKGYpKSk7bC5mb3JFYWNoKGY9Pnt2YXIgdixNO2NvbnN0e3JvdzpELGNvbDpafT1udWxsIT09KHY9Zi5hZGRyZXNzKSYm''@;'; put 'put ''dm9pZCAwIT09dj92Ont9O2lmKCExPT09UGEoRCl8fCExPT09UGEoWil8fEQ+PXRoaXMuaG90LmNvdW50Um93cygpfHxaPj10aGlzLmhvdC5jb3VudENvbHMoKSlyZXR1cm47Y29uc3QgcmU9bnVsbD09Znx8bnVsbD09PShNPWYuYWRkcmVzcyl8fHZvaWQgMD09PU0/dm9pZCAwOk0uc2hlZXQs''@;'; put 'put ''Y2U9ZChmKTtpZih2b2lkIDAhPT1yZSYmIWguaGFzKGNlKSl7Y29uc3QgYmU9SDVlKHRoaXMuZW5naW5lKS5nZXQocmUpO2lmKCFiZSlyZXR1cm47YmUudmFsaWRhdGVDZWxsKGJlLmdldERhdGFBdENlbGwoRCxaKSxiZS5nZXRDZWxsTWV0YShELFopLCgpPT57fSl9fSl9c3luY0NoYW5nZVdp''@;'; put 'put ''dGhFbmdpbmUobCxhLGQpe2NvbnN0IGg9e3Jvdzp0aGlzLnJvd0F4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChsKSxjb2w6dGhpcy5jb2x1bW5BeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoYSksc2hlZXQ6dGhpcy5zaGVldElkfTtpZighdGhpcy5lbmdp''@;'; put 'put ''bmUuaXNJdFBvc3NpYmxlVG9TZXRDZWxsQ29udGVudHMoaCkpcmV0dXJuIHZvaWQgaWwoYE5vdCBwb3NzaWJsZSB0byBzZXQgY2VsbCBkYXRhIGF0ICR7SlNPTi5zdHJpbmdpZnkoaCl9YCk7Y29uc3QgZj10aGlzLmhvdC5nZXRDZWxsTWV0YShsLGEpO3JldHVybiB4UShkLGYudHlwZSkmJihC''@;'; put 'put ''NWUoZCxmLmRhdGVGb3JtYXQpP2Q9ajVlKGQsZi5kYXRlRm9ybWF0KTohMT09PWZ1bmN0aW9uIHAydChjKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGMmJmMuc3RhcnRzV2l0aCgiPSIpfShkKSYmKGQ9YCcke2R9YCkpLHRoaXMuZW5naW5lLnNldENlbGxDb250ZW50cyhoLGQpfX1mdW5jdGlv''@;'; put 'put ''biBpQShjKXt0aGlzLnNoZWV0TmFtZT1jLHRoaXMuc2hlZXRJZD10aGlzLmVuZ2luZS5nZXRTaGVldElkKHRoaXMuc2hlZXROYW1lKX1mdW5jdGlvbiBEMnQoYyxsLGEpe2NvbnN0IGQ9dGhpcy5ob3QucHJvcFRvQ29sKGEpO2lmKHRoaXMuaXNGb3JtdWxhQ2VsbFR5cGUobCxkKSl7Y29uc3Qg''@;'; put 'put ''aD17cm93OnRoaXMucm93QXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGwpLGNvbDp0aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChkKSxzaGVldDp0aGlzLnNoZWV0SWR9LGY9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEobCxkKTtsZXQgdj10''@;'; put 'put ''aGlzLmVuZ2luZS5nZXRDZWxsVmFsdWUoaCk7cmV0dXJuImRhdGUiPT09Zi50eXBlJiZtMSh2KSYmKHY9ejVlKHYsZi5kYXRlRm9ybWF0KSksIm9iamVjdCI9PXR5cGVvZiB2JiZudWxsIT09dj92LnZhbHVlOnZ9cmV0dXJuIGN9ZnVuY3Rpb24gSTJ0KGMsbCxhKXtjb25zdHtyb3c6ZCxjb2w6''@;'; put 'put ''aH09bC5nZXRUb3BTdGFydENvcm5lcigpLHtyb3c6Zixjb2w6dn09bC5nZXRCb3R0b21FbmRDb3JuZXIoKSx7cm93Ok0sY29sOkR9PWEuZ2V0VG9wU3RhcnRDb3JuZXIoKSx7cm93OlosY29sOnJlfT1hLmdldEJvdHRvbUVuZENvcm5lcigpLGNlPXtzdGFydDp7cm93OnRoaXMucm93QXhpc1N5''@;'; put 'put ''bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGQpLGNvbDp0aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChoKSxzaGVldDp0aGlzLnNoZWV0SWR9LGVuZDp7cm93OnRoaXMucm93QXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGYp''@;'; put 'put ''LGNvbDp0aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleCh2KSxzaGVldDp0aGlzLnNoZWV0SWR9fSxiZT17c3RhcnQ6e3Jvdzp0aGlzLnJvd0F4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChNKSxjb2w6dGhpcy5jb2x1bW5BeGlzU3luY2Vy''@;'; put 'put ''LmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoRCksc2hlZXQ6dGhpcy5zaGVldElkfSxlbmQ6e3Jvdzp0aGlzLnJvd0F4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChaKSxjb2w6dGhpcy5jb2x1bW5BeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgocmUpLHNo''@;'; put 'put ''ZWV0OnRoaXMuc2hlZXRJZH19O2lmKCExPT09dGhpcy5lbmdpbmUuaXNJdFBvc3NpYmxlVG9TZXRDZWxsQ29udGVudHMoYmUpKXJldHVybiExO2NvbnN0IEVlPXRoaXMuZW5naW5lLmdldEZpbGxSYW5nZURhdGEoY2UsYmUpLHtyb3c6QmUsY29sOnFlfT1jZS5zdGFydCx7cm93OnJ0LGNvbDpw''@;'; put 'put ''dH09Y2UuZW5kLGR0PXJ0LUJlKzEsSnQ9cHQtcWUrMTtmb3IobGV0IHZuPTA7dm48RWUubGVuZ3RoO3ZuKz0xKWZvcihsZXQgQ249MDtDbjxFZVt2bl0ubGVuZ3RoO0NuKz0xKXtjb25zdCB0bj1FZVt2bl1bQ25dLE1uPUJlK3ZuJWR0LENyPXFlK0NuJUp0LEdyPXRoaXMuaG90LmdldENlbGxN''@;'; put 'put ''ZXRhKE1uLENyKTt4USh0bixHci50eXBlKSYmKHRuLnN0YXJ0c1dpdGgoIiciKT9FZVt2bl1bQ25dPXRuLnNsaWNlKDEpOiExPT09dGhpcy5pc0Zvcm11bGFDZWxsVHlwZShNbixDcix0aGlzLnNoZWV0SWQpJiYoRWVbdm5dW0NuXT1nMnQodG4sR3IuZGF0ZUZvcm1hdCkpKX1yZXR1cm4gRWV9''@;'; put 'put ''ZnVuY3Rpb24gRzVlKGMsbCl7KGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXToiIikuaW5jbHVkZXMocDEodzEpKXx8dTYockgsdGhpcyxfYyh0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmRhdGEpKX1mdW5jdGlvbiBSMnQoKXtpZihrOShySCx0''@;'; put 'put ''aGlzKSlyZXR1cm4gdm9pZCB0aGlzLnN3aXRjaFNoZWV0KHRoaXMuc2hlZXROYW1lKTtjb25zdCBjPXRoaXMuaG90LmdldFNvdXJjZURhdGFBcnJheSgpO2MuZm9yRWFjaCgoYSxkKT0+e2EuZm9yRWFjaCgoaCxmKT0+e2NvbnN0IHY9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEoZCxmLHtza2lwTWV0''@;'; put 'put ''YUV4dGVuc2lvbjohMH0pLE09di5kYXRlRm9ybWF0O3hRKGgsdi50eXBlKSYmKEI1ZShoLE0pP2NbZF1bZl09ajVlKGgsTSk6aC5zdGFydHNXaXRoKCI9Iil8fChjW2RdW2ZdPWAnJHtofWApKX0pfSksdTYoQmcsdGhpcywhMCk7Y29uc3QgbD10aGlzLmVuZ2luZS5zZXRTaGVldENvbnRlbnQo''@;'; put 'put ''dGhpcy5zaGVldElkLGMpO3RoaXMuaW5kZXhTeW5jZXIuc2V0dXBTeW5jRW5kcG9pbnQodGhpcy5lbmdpbmUsdGhpcy5zaGVldElkKSx0aGlzLnJlbmRlckRlcGVuZGVudFNoZWV0cyhsKSx1NihCZyx0aGlzLCExKX1mdW5jdGlvbiAkNWUoYyxsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjIm''@;'; put 'put ''JnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06IiI7aWYoYS5pbmNsdWRlcyhwMSh3MSkpKXJldHVybjtjb25zdCBkPWZ1bmN0aW9uIGQydChjLGwpe3JldHVybihfYyhsKXx8IWMuZG9lc1NoZWV0RXhpc3QobCkpJiYobD1jLmFkZFNoZWV0KGwpKSxsfSh0aGlzLmVuZ2luZSx0''@;'; put 'put ''aGlzLmhvdC5nZXRTZXR0aW5ncygpW3cxXS5zaGVldE5hbWUpO2lmKGpzKEtzLHRoaXMsaUEpLmNhbGwodGhpcyxkKSwidXBkYXRlU2V0dGluZ3MiIT09YSlpZihrOShySCx0aGlzKSl0aGlzLnN3aXRjaFNoZWV0KHRoaXMuc2hlZXROYW1lKTtlbHNle2NvbnN0IGg9dGhpcy5ob3QuZ2V0U291''@;'; put 'put ''cmNlRGF0YUFycmF5KCk7aWYodGhpcy5lbmdpbmUuaXNJdFBvc3NpYmxlVG9SZXBsYWNlU2hlZXRDb250ZW50KHRoaXMuc2hlZXRJZCxoKSl7dTYoQmcsdGhpcywhMCk7Y29uc3QgZj10aGlzLmVuZ2luZS5zZXRTaGVldENvbnRlbnQodGhpcy5zaGVldElkLGgpO3RoaXMuaW5kZXhTeW5jZXIu''@;'; put 'put ''c2V0dXBTeW5jRW5kcG9pbnQodGhpcy5lbmdpbmUsdGhpcy5zaGVldElkKSx0aGlzLnJlbmRlckRlcGVuZGVudFNoZWV0cyhmKSx1NihCZyx0aGlzLCExKX19fWZ1bmN0aW9uIEwydChjLGwsYSxkKXtpZigiZ2V0IiE9PWR8fGs5KEJnLHRoaXMpfHxudWxsPT09dGhpcy5zaGVldE5hbWV8fCF0''@;'; put 'put ''aGlzLmVuZ2luZS5kb2VzU2hlZXRFeGlzdCh0aGlzLnNoZWV0TmFtZSkpcmV0dXJuO2NvbnN0IGg9dGhpcy5ob3QudG9WaXN1YWxSb3coYyk7aWYobnVsbD09PWh8fG51bGw9PT1sKXJldHVybjtjb25zdCBmPXRoaXMuZ2V0Q2VsbFR5cGUoaCxsKTtpZigiVkFMVUUiPT09Znx8IkVNUFRZIj09''@;'; put 'put ''PWYpcmV0dXJuIHZvaWQoYS52YWx1ZT1mdW5jdGlvbiBmMnQoYyl7cmV0dXJuIGZ1bmN0aW9uIGgydChjKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGMmJiInIj09PWMuY2hhckF0KDApJiYiPSI9PT1jLmNoYXJBdCgxKX0oYyk/Yy5zdWJzdHIoMSk6Y30oYS52YWx1ZSkpO2NvbnN0IHY9e3Jv''@;'; put 'put ''dzp0aGlzLnJvd0F4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChoKSxjb2w6dGhpcy5jb2x1bW5BeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgobCksc2hlZXQ6dGhpcy5zaGVldElkfTtsZXQgTT10aGlzLmVuZ2luZS5nZXRDZWxsVmFsdWUodik7Y29uc3Qg''@;'; put 'put ''RD10aGlzLmhvdC5nZXRDZWxsTWV0YShoLGwse3NraXBNZXRhRXh0ZW5zaW9uOiEwfSk7ImRhdGUiPT09RC50eXBlJiZtMShNKSYmKE09ejVlKE0sRC5kYXRlRm9ybWF0KSksYS52YWx1ZT0ib2JqZWN0Ij09dHlwZW9mIE0mJm51bGwhPT1NP00udmFsdWU6TX1mdW5jdGlvbiBPMnQoYyxsLGEs''@;'; put 'put ''ZCl7aWYoImdldCIhPT1kfHxrOShCZyx0aGlzKXx8bnVsbD09PXRoaXMuc2hlZXROYW1lfHwhdGhpcy5lbmdpbmUuZG9lc1NoZWV0RXhpc3QodGhpcy5zaGVldE5hbWUpKXJldHVybjtjb25zdCBoPXRoaXMuaG90LnRvVmlzdWFsUm93KGMpLGY9dGhpcy5ob3QucHJvcFRvQ29sKGwpO2lmKG51''@;'; put 'put ''bGw9PT1ofHxudWxsPT09ZilyZXR1cm47Y29uc3Qgdj10aGlzLmdldENlbGxUeXBlKGgsZik7aWYoIlZBTFVFIj09PXZ8fCJFTVBUWSI9PT12KXJldHVybjtjb25zdCBNPXRoaXMuZW5naW5lLmdldFNoZWV0RGltZW5zaW9ucyh0aGlzLmVuZ2luZS5nZXRTaGVldElkKHRoaXMuc2hlZXROYW1l''@;'; put 'put ''KSk7aWYoMD09PU0ud2lkdGgmJjA9PT1NLmhlaWdodClyZXR1cm47Y29uc3QgRD17cm93OnRoaXMucm93QXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGgpLGNvbDp0aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChmKSxzaGVldDp0aGlz''@;'; put 'put ''LnNoZWV0SWR9O2EudmFsdWU9dGhpcy5lbmdpbmUuZ2V0Q2VsbFNlcmlhbGl6ZWQoRCl9ZnVuY3Rpb24gSzVlKGMsbCl7aWYobHcobCkpcmV0dXJuO2NvbnN0IGE9W10sZD1bXSxoPXRoaXMuZW5naW5lLmJhdGNoKCgpPT57Yy5mb3JFYWNoKGY9PntsZXRbdixNLCxEXT1mO2NvbnN0IFo9dGhp''@;'; put 'put ''cy5ob3QucHJvcFRvQ29sKE0pLHJlPXRoaXMuaG90LnRvUGh5c2ljYWxSb3codiksY2U9dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihaKSxiZT17cm93OnRoaXMucm93QXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KHYpLGNvbDp0aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0''@;'; put 'put ''SGZJbmRleEZyb21WaXN1YWxJbmRleChaKSxzaGVldDp0aGlzLnNoZWV0SWR9O251bGwhPT1yZSYmbnVsbCE9PWNlP3RoaXMuc3luY0NoYW5nZVdpdGhFbmdpbmUodixaLEQpOmEucHVzaChbdixaLERdKSxkLnB1c2goe2FkZHJlc3M6YmV9KX0pfSk7YS5sZW5ndGgmJnRoaXMuaG90LmFkZEhv''@;'; put 'put ''b2tPbmNlKCJhZnRlckNoYW5nZSIsKCk9Pntjb25zdCBmPXRoaXMuZW5naW5lLmJhdGNoKCgpPT57YS5mb3JFYWNoKHY9PntsZXRbTSxELFpdPXY7dGhpcy5zeW5jQ2hhbmdlV2l0aEVuZ2luZShNLEQsWil9KX0pO3RoaXMucmVuZGVyRGVwZW5kZW50U2hlZXRzKGYsITApfSksdGhpcy5yZW5k''@;'; put 'put ''ZXJEZXBlbmRlbnRTaGVldHMoaCksdGhpcy52YWxpZGF0ZURlcGVuZGVudENlbGxzKGgsZCl9ZnVuY3Rpb24gUDJ0KGMsbCl7aWYobHcobCkpcmV0dXJuO2NvbnN0IGE9W10sZD1bXTtjLmZvckVhY2goaD0+e2xldFtmLHYsLE1dPWg7Y29uc3QgRD10aGlzLmhvdC5wcm9wVG9Db2wodik7aWYo''@;'; put 'put ''IW0xKEQpKXJldHVybjtjb25zdCBaPXtyb3c6dGhpcy5yb3dBeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoZiksY29sOnRoaXMuY29sdW1uQXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KEQpLHNoZWV0OnRoaXMuc2hlZXRJZH07dGhpcy5lbmdpbmUuaXNJ''@;'; put 'put ''dFBvc3NpYmxlVG9TZXRDZWxsQ29udGVudHMoWik/KGQucHVzaCh7YWRkcmVzczpafSksYS5wdXNoKC4uLnRoaXMuZW5naW5lLnNldENlbGxDb250ZW50cyhaLE0pKSk6aWwoYE5vdCBwb3NzaWJsZSB0byBzZXQgc291cmNlIGNlbGwgZGF0YSBhdCAke0pTT04uc3RyaW5naWZ5KFopfWApfSks''@;'; put 'put ''dGhpcy5yZW5kZXJEZXBlbmRlbnRTaGVldHMoYSksdGhpcy52YWxpZGF0ZURlcGVuZGVudENlbGxzKGEsZCl9ZnVuY3Rpb24gRjJ0KGMsbCl7bGV0IGE9dGhpcy5yb3dBeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoYyk7aWYoYz49dGhpcy5ob3QuY291bnRSb3dzKCkmJihh''@;'; put 'put ''PWMpLG51bGw9PT10aGlzLnNoZWV0SWR8fCF0aGlzLmVuZ2luZS5kb2VzU2hlZXRFeGlzdCh0aGlzLnNoZWV0TmFtZSl8fCF0aGlzLmVuZ2luZS5pc0l0UG9zc2libGVUb0FkZFJvd3ModGhpcy5zaGVldElkLFthLGxdKSlyZXR1cm4hMX1mdW5jdGlvbiBIMnQoYyxsKXtsZXQgYT10aGlzLmNv''@;'; put 'put ''bHVtbkF4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChjKTtpZihjPj10aGlzLmhvdC5jb3VudENvbHMoKSYmKGE9YyksbnVsbD09PXRoaXMuc2hlZXRJZHx8IXRoaXMuZW5naW5lLmRvZXNTaGVldEV4aXN0KHRoaXMuc2hlZXROYW1lKXx8IXRoaXMuZW5naW5lLmlzSXRQb3Nz''@;'; put 'put ''aWJsZVRvQWRkQ29sdW1ucyh0aGlzLnNoZWV0SWQsW2EsbF0pKXJldHVybiExfWZ1bmN0aW9uIE4ydChjLGwsYSl7cmV0dXJuITEhPT10aGlzLnJvd0F4aXNTeW5jZXIuc2V0UmVtb3ZlZEhmSW5kZXhlcyhhKS5ldmVyeShmPT50aGlzLmVuZ2luZS5pc0l0UG9zc2libGVUb1JlbW92ZVJvd3Mo''@;'; put 'put ''dGhpcy5zaGVldElkLFtmLDFdKSkmJnZvaWQgMH1mdW5jdGlvbiBWMnQoYyxsLGEpe3JldHVybiExIT09dGhpcy5jb2x1bW5BeGlzU3luY2VyLnNldFJlbW92ZWRIZkluZGV4ZXMoYSkuZXZlcnkoZj0+dGhpcy5lbmdpbmUuaXNJdFBvc3NpYmxlVG9SZW1vdmVDb2x1bW5zKHRoaXMuc2hlZXRJ''@;'; put 'put ''ZCxbZiwxXSkpJiZ2b2lkIDB9ZnVuY3Rpb24gQjJ0KGMsbCxhKXtpZihsdyhhKSlyZXR1cm47Y29uc3QgZD10aGlzLmVuZ2luZS5hZGRSb3dzKHRoaXMuc2hlZXRJZCxbdGhpcy5yb3dBeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoYyksbF0pO3RoaXMucmVuZGVyRGVwZW5k''@;'; put 'put ''ZW50U2hlZXRzKGQpfWZ1bmN0aW9uIGoydChjLGwsYSl7aWYobHcoYSkpcmV0dXJuO2NvbnN0IGQ9dGhpcy5lbmdpbmUuYWRkQ29sdW1ucyh0aGlzLnNoZWV0SWQsW3RoaXMuY29sdW1uQXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGMpLGxdKTt0aGlzLnJlbmRlckRlcGVu''@;'; put 'put ''ZGVudFNoZWV0cyhkKX1mdW5jdGlvbiB6MnQoYyxsLGEsZCl7aWYobHcoZCkpcmV0dXJuO2NvbnN0IGg9dGhpcy5yb3dBeGlzU3luY2VyLmdldFJlbW92ZWRIZkluZGV4ZXMoKS5zb3J0KCh2LE0pPT5NLXYpLGY9dGhpcy5lbmdpbmUuYmF0Y2goKCk9PntoLmZvckVhY2godj0+e3RoaXMuZW5n''@;'; put 'put ''aW5lLnJlbW92ZVJvd3ModGhpcy5zaGVldElkLFt2LDFdKX0pfSk7dGhpcy5yZW5kZXJEZXBlbmRlbnRTaGVldHMoZil9ZnVuY3Rpb24gVTJ0KGMsbCxhLGQpe2lmKGx3KGQpKXJldHVybjtjb25zdCBoPXRoaXMuY29sdW1uQXhpc1N5bmNlci5nZXRSZW1vdmVkSGZJbmRleGVzKCkuc29ydCgo''@;'; put 'put ''dixNKT0+TS12KSxmPXRoaXMuZW5naW5lLmJhdGNoKCgpPT57aC5mb3JFYWNoKHY9Pnt0aGlzLmVuZ2luZS5yZW1vdmVDb2x1bW5zKHRoaXMuc2hlZXRJZCxbdiwxXSl9KX0pO3RoaXMucmVuZGVyRGVwZW5kZW50U2hlZXRzKGYpfWZ1bmN0aW9uIFoydChjLGwsYSl7dmFyIGQ7dTYoQmcsdGhp''@;'; put 'put ''cywhMCk7Y29uc3QgaD10aGlzLmhvdC5nZXRTb3VyY2VEYXRhQXJyYXkoYSwwLGErKChudWxsPT09KGQ9bC5fX2NoaWxkcmVuKXx8dm9pZCAwPT09ZD92b2lkIDA6ZC5sZW5ndGgpfHwwKSx0aGlzLmhvdC5jb3VudFNvdXJjZUNvbHMoKSk7dTYoQmcsdGhpcywhMSksaC5mb3JFYWNoKChmLHYp''@;'; put 'put ''PT57Zi5mb3JFYWNoKChNLEQpPT57dGhpcy5lbmdpbmUuc2V0Q2VsbENvbnRlbnRzKHtjb2w6RCxyb3c6YSt2LHNoZWV0OnRoaXMuc2hlZXRJZH0sW1tNXV0pfSl9KX1mdW5jdGlvbiBXMnQoYyl7dGhpcy5ob3QucnVuSG9va3MoImFmdGVyRm9ybXVsYXNWYWx1ZXNVcGRhdGUiLGMpfWZ1bmN0''@;'; put 'put ''aW9uIFkydChjLGwpe3RoaXMuaG90LnJ1bkhvb2tzKCJhZnRlck5hbWVkRXhwcmVzc2lvbkFkZGVkIixjLGwpfWZ1bmN0aW9uIEcydChjLGwpe3RoaXMuaG90LnJ1bkhvb2tzKCJhZnRlck5hbWVkRXhwcmVzc2lvblJlbW92ZWQiLGMsbCl9ZnVuY3Rpb24gJDJ0KGMpe3RoaXMuaG90LnJ1bkhv''@;'; put 'put ''b2tzKCJhZnRlclNoZWV0QWRkZWQiLGMpfWZ1bmN0aW9uIEsydChjLGwpe2pzKEtzLHRoaXMsaUEpLmNhbGwodGhpcyxsKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJTaGVldFJlbmFtZWQiLGMsbCl9ZnVuY3Rpb24gcTJ0KGMsbCl7dGhpcy5ob3QucnVuSG9va3MoImFmdGVyU2hlZXRSZW1v''@;'; put 'put ''dmVkIixjLGwpfWZ1bmN0aW9uIHE1ZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gRDkoYyxsKXtyZXR1cm4gYy5nZXQoZDYoYyxsKSl9''@;'; put 'put ''ZnVuY3Rpb24gWDVlKGMsbCxhKXtyZXR1cm4gYy5zZXQoZDYoYyxsKSxhKSxhfWZ1bmN0aW9uIGQ2KGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVs''@;'; put 'put ''ZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1TYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVmb3JlSGlkZUNvbHVtbnMiKSxTYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJIaWRlQ29sdW1ucyIpLFNhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZv''@;'; put 'put ''cmVVbmhpZGVDb2x1bW5zIiksU2EuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyVW5oaWRlQ29sdW1ucyIpO2NvbnN0IEo1ZT0iaGlkZGVuQ29sdW1ucyI7dmFyIFpwPW5ldyBXZWFrTWFwLEk5PW5ldyBXZWFrU2V0O2NsYXNzIG5mdCBleHRlbmRzIEZze2NvbnN0cnVjdG9yKCl7c3Vw''@;'; put 'put ''ZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlvbiBRMnQoYyxsKXtxNWUoYyxsKSxsLmFkZChjKX0odGhpcyxJOSksZnVuY3Rpb24gZWZ0KGMsbCxhKXtxNWUoYyxsKSxsLnNldChjLGEpfSh0aGlzLFpwLG51bGwpfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBKNWV9c3RhdGljIGdldCBQ''@;'; put 'put ''TFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMzEwfXN0YXRpYyBnZXQgREVGQVVMVF9TRVRUSU5HUygpe3JldHVybntjb3B5UGFzdGVFbmFibGVkOiEwLGluZGljYXRvcnM6ITEsY29sdW1uczpbXX19aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW0o1ZV19ZW5hYmxl''@;'; put 'put ''UGx1Z2luKCl7dmFyIGw9dGhpczt0aGlzLmVuYWJsZWR8fChYNWUoWnAsdGhpcyxuZXcgZlApLEQ5KFpwLHRoaXMpLmFkZExvY2FsSG9vaygiaW5pdCIsKCk9PmQ2KEk5LHRoaXMsbGZ0KS5jYWxsKHRoaXMpKSx0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5yZWdpc3Rlck1hcCh0aGlzLnBs''@;'; put 'put ''dWdpbk5hbWUsRDkoWnAsdGhpcykpLHRoaXMuYWRkSG9vaygiYWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBkNihJOSxs''@;'; put 'put ''LHNmdCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJhZnRlckdldENlbGxNZXRhIiwoYSxkLGgpPT5kNihJOSx0aGlzLGlmdCkuY2FsbCh0aGlzLGEsZCxoKSksdGhpcy5hZGRIb29rKCJtb2RpZnlDb2xXaWR0aCIsKGEsZCk9PmQ2KEk5LHRoaXMscmZ0KS5jYWxsKHRoaXMsYSxkKSwy''@;'; put 'put ''KSx0aGlzLmFkZEhvb2soImFmdGVyR2V0Q29sSGVhZGVyIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBkNihJOSxsLG9mdCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29r''@;'; put 'put ''KCJtb2RpZnlDb3B5YWJsZVJhbmdlIixhPT5kNihJOSx0aGlzLGFmdCkuY2FsbCh0aGlzLGEpKSxzdXBlci5lbmFibGVQbHVnaW4oKSl9dXBkYXRlUGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1''@;'; put 'put ''Z2luKCl7c3VwZXIuZGlzYWJsZVBsdWdpbigpLHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLnVucmVnaXN0ZXJNYXAodGhpcy5wbHVnaW5OYW1lKSx0aGlzLnJlc2V0Q2VsbHNNZXRhKCl9c2hvd0NvbHVtbnMobCl7Y29uc3QgYT10aGlzLmdldEhpZGRlbkNvbHVtbnMoKSxkPXRoaXMuaXNW''@;'; put 'put ''YWxpZENvbmZpZyhsKTtsZXQgaD1hO2NvbnN0IGY9RDkoWnAsdGhpcykuZ2V0VmFsdWVzKCkuc2xpY2UoKSx2PWwubGVuZ3RoPjA7ZCYmdiYmKFluKGwubWFwKFo9PnRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4oWikpLFo9PntmW1pdPSExfSksaD1xdShmLChaLHJlLGNlKT0+KHJlJiZaLnB1''@;'; put 'put ''c2godGhpcy5ob3QudG9WaXN1YWxDb2x1bW4oY2UpKSxaKSxbXSkpLCExIT09dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVVuaGlkZUNvbHVtbnMiLGEsaCxkJiZ2KSYmKGQmJnYmJkQ5KFpwLHRoaXMpLnNldFZhbHVlcyhmKSx0aGlzLmhvdC52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpLHRo''@;'; put 'put ''aXMuaG90LnJ1bkhvb2tzKCJhZnRlclVuaGlkZUNvbHVtbnMiLGEsaCxkJiZ2LGQmJmgubGVuZ3RoPGEubGVuZ3RoKSl9c2hvd0NvbHVtbigpe2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGwpLGQ9MDtkPGw7ZCsrKWFbZF09YXJndW1lbnRzW2RdO3RoaXMuc2hvd0Nv''@;'; put 'put ''bHVtbnMoYSl9aGlkZUNvbHVtbnMobCl7Y29uc3QgYT10aGlzLmdldEhpZGRlbkNvbHVtbnMoKSxkPXRoaXMuaXNWYWxpZENvbmZpZyhsKTtsZXQgaD1hO2QmJihoPUFycmF5LmZyb20obmV3IFNldChhLmNvbmNhdChsKSkpKSwhMSE9PXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVIaWRlQ29s''@;'; put 'put ''dW1ucyIsYSxoLGQpJiYoZCYmdGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9PntZbihsLHY9PntEOShacCx0aGlzKS5zZXRWYWx1ZUF0SW5kZXgodGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbih2KSwhMCl9KX0sITApLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckhpZGVDb2x1bW5zIixhLGgs''@;'; put 'put ''ZCxkJiZoLmxlbmd0aD5hLmxlbmd0aCkpfWhpZGVDb2x1bW4oKXtmb3IodmFyIGw9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShsKSxkPTA7ZDxsO2QrKylhW2RdPWFyZ3VtZW50c1tkXTt0aGlzLmhpZGVDb2x1bW5zKGEpfWdldEhpZGRlbkNvbHVtbnMoKXtyZXR1cm4geXMoRDkoWnAs''@;'; put 'put ''dGhpcykuZ2V0SGlkZGVuSW5kZXhlcygpLGw9PnRoaXMuaG90LnRvVmlzdWFsQ29sdW1uKGwpKX1pc0hpZGRlbihsKXtyZXR1cm4gRDkoWnAsdGhpcykuZ2V0VmFsdWVBdEluZGV4KHRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4obCkpfHwhMX1pc1ZhbGlkQ29uZmlnKGwpe2NvbnN0IGE9dGhp''@;'; put 'put ''cy5ob3QuY291bnRDb2xzKCk7cmV0dXJuISEoQXJyYXkuaXNBcnJheShsKSYmbC5sZW5ndGg+MCkmJmwuZXZlcnkoZD0+TnVtYmVyLmlzSW50ZWdlcihkKSYmZD49MCYmZDxhKX1yZXNldENlbGxzTWV0YSgpe1luKHRoaXMuaG90LmdldENlbGxzTWV0YSgpLGw9PntsLnNraXBDb2x1bW5PblBh''@;'; put 'put ''c3RlPSExfSl9ZGVzdHJveSgpe1g1ZShacCx0aGlzLG51bGwpLHN1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gcmZ0KGMsbCl7cmV0dXJuIHRoaXMuaXNIaWRkZW4obCk/MDp0aGlzLmdldFNldHRpbmcoImluZGljYXRvcnMiKSYmKHRoaXMuaXNIaWRkZW4obCsxKXx8dGhpcy5pc0hpZGRlbihs''@;'; put 'put ''LTEpKSYmIm51bWJlciI9PXR5cGVvZiBjJiZ0aGlzLmhvdC5oYXNDb2xIZWFkZXJzKCk/YysxNTp2b2lkIDB9ZnVuY3Rpb24gaWZ0KGMsbCxhKXtpZighMT09PXRoaXMuZ2V0U2V0dGluZygiY29weVBhc3RlRW5hYmxlZCIpJiZ0aGlzLmlzSGlkZGVuKGwpJiYoYS5za2lwQ29sdW1uT25QYXN0''@;'; put 'put ''ZT0hMCksdGhpcy5pc0hpZGRlbihsLTEpKWEuY2xhc3NOYW1lPWEuY2xhc3NOYW1lfHwiIiwtMT09PWEuY2xhc3NOYW1lLmluZGV4T2YoImFmdGVySGlkZGVuQ29sdW1uIikmJihhLmNsYXNzTmFtZSs9IiBhZnRlckhpZGRlbkNvbHVtbiIpO2Vsc2UgaWYoYS5jbGFzc05hbWUpe2NvbnN0IGQ9''@;'; put 'put ''YS5jbGFzc05hbWUuc3BsaXQoIiAiKTtpZihkLmxlbmd0aD4wKXtjb25zdCBoPWQuaW5kZXhPZigiYWZ0ZXJIaWRkZW5Db2x1bW4iKTtoPi0xJiZkLnNwbGljZShoLDEpLGEuY2xhc3NOYW1lPWQuam9pbigiICIpfX19ZnVuY3Rpb24gYWZ0KGMpe2lmKHRoaXMuZ2V0U2V0dGluZygiY29weVBh''@;'; put 'put ''c3RlRW5hYmxlZCIpKXJldHVybiBjO2NvbnN0IGw9W10sYT0oZCxoLGYsdik9PntsLnB1c2goe3N0YXJ0Um93OmQsZW5kUm93Omgsc3RhcnRDb2w6ZixlbmRDb2w6dn0pfTtyZXR1cm4gWW4oYyxkPT57bGV0IGg9ITAsZj0wO0dhKGQuc3RhcnRDb2wsZC5lbmRDb2wsdj0+e3RoaXMuaXNIaWRk''@;'; put 'put ''ZW4odik/KGh8fGEoZC5zdGFydFJvdyxkLmVuZFJvdyxmLHYtMSksaD0hMCk6KGgmJihmPXYpLHY9PT1kLmVuZENvbCYmYShkLnN0YXJ0Um93LGQuZW5kUm93LGYsdiksaD0hMSl9KX0pLGx9ZnVuY3Rpb24gb2Z0KGMsbCl7aWYoIXRoaXMuZ2V0U2V0dGluZygiaW5kaWNhdG9ycyIpfHxjPDAp''@;'; put 'put ''cmV0dXJuO2NvbnN0IGE9W107Yz49MSYmdGhpcy5pc0hpZGRlbihjLTEpJiZhLnB1c2goImFmdGVySGlkZGVuQ29sdW1uIiksYzx0aGlzLmhvdC5jb3VudENvbHMoKS0xJiZ0aGlzLmlzSGlkZGVuKGMrMSkmJmEucHVzaCgiYmVmb3JlSGlkZGVuQ29sdW1uIiksVGkobCxhKX1mdW5jdGlvbiBz''@;'; put 'put ''ZnQoYyl7Yy5pdGVtcy5wdXNoKHtuYW1lOnNzfSxmdW5jdGlvbiBYMnQoYyl7cmV0dXJue2tleToiaGlkZGVuX2NvbHVtbnNfaGlkZSIsbmFtZSgpe2NvbnN0IGw9dGhpcy5nZXRTZWxlY3RlZExhc3QoKTtsZXQgYT0wO2lmKEFycmF5LmlzQXJyYXkobCkpe2NvbnN0WyxkLCxoXT1sO2QtaCE9''@;'; put 'put ''MCYmKGE9MSl9cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShScSxhKX0sY2FsbGJhY2soKXtjb25zdHtmcm9tOmwsdG86YX09dGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLGQ9TWF0aC5tYXgoTWF0aC5taW4obC5jb2wsYS5jb2wpLDApLGg9TWF0aC5tYXgobC5jb2wsYS5jb2wp''@;'; put 'put ''LGY9W107Zm9yKGxldCBEPWQ7RDw9aDtEKz0xKWYucHVzaChEKTtjLmhpZGVDb2x1bW5zKGYpO2NvbnN0IE09dGhpcy5jb2x1bW5JbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoZltmLmxlbmd0aC0xXSwxLCEwKTtOdW1iZXIuaXNJbnRlZ2VyKE0pJiZNPj0wP3RoaXMuc2Vs''@;'; put 'put ''ZWN0Q29sdW1ucyhNKTp0aGlzLmRlc2VsZWN0Q2VsbCgpLHRoaXMucmVuZGVyKCksdGhpcy52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpfSxkaXNhYmxlZDohMSxoaWRkZW4oKXtyZXR1cm4hKHRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpfHx0aGlzLnNlbGVjdGlv''@;'; put 'put ''bi5pc1NlbGVjdGVkQnlDb3JuZXIoKSl9fX0odGhpcyksZnVuY3Rpb24gSjJ0KGMpe2NvbnN0IGw9W107cmV0dXJue2tleToiaGlkZGVuX2NvbHVtbnNfc2hvdyIsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoTHEsbC5sZW5ndGg+MT8xOjApfSxjYWxsYmFjaygpe3Zh''@;'; put 'put ''ciBhLGQ7aWYoMD09PWwubGVuZ3RoKXJldHVybjtsZXQgaD1sWzBdLGY9bFtsLmxlbmd0aC0xXTtoPW51bGwhPT0oYT10aGlzLmNvbHVtbkluZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChoLTEsLTEpKSYmdm9pZCAwIT09YT9hOjAsZj1udWxsIT09KGQ9dGhpcy5jb2x1bW5J''@;'; put 'put ''bmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoZisxLDEpKSYmdm9pZCAwIT09ZD9kOnRoaXMuY291bnRDb2xzKCktMSxjLnNob3dDb2x1bW5zKGwpLHRoaXMucmVuZGVyKCksdGhpcy52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpLGYtaCsxPT09dGhpcy5jb3VudENvbHMoKXx8''@;'; put 'put ''dGhpcy5zZWxlY3RDb2x1bW5zKGgsZil9LGRpc2FibGVkOiExLGhpZGRlbigpe2NvbnN0IGE9eXMoYy5nZXRIaWRkZW5Db2x1bW5zKCksY2U9PnRoaXMudG9QaHlzaWNhbENvbHVtbihjZSkpO2lmKCF0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKSYmIXRoaXMuc2Vs''@;'; put 'put ''ZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpfHxhLmxlbmd0aDwxKXJldHVybiEwO2wubGVuZ3RoPTA7Y29uc3QgZD10aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksaD1kLmdldFRvcFN0YXJ0Q29ybmVyKCkuY29sLGY9ZC5nZXRCb3R0b21FbmRDb3JuZXIoKS5jb2wsdj10aGlzLmNvbHVt''@;'; put 'put ''bkluZGV4TWFwcGVyLE09di5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGgpLEQ9di5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGYpLFo9di5nZXROb3RUcmltbWVkSW5kZXhlcygpLHJlPVtdO2lmKGghPT1mKXtpZihmLWgrMT5ELU0rMSl7Y29uc3QgRWU9Wi5zbGljZShoLGYr''@;'; put 'put ''MSk7cmUucHVzaCguLi5FZS5maWx0ZXIoQmU9PmEuaW5jbHVkZXMoQmUpKSl9fWVsc2UgaWYoMD09PU0mJk08aClyZS5wdXNoKC4uLlouc2xpY2UoMCxoKSk7ZWxzZSBpZihudWxsPT09TSlyZS5wdXNoKC4uLlouc2xpY2UoMCx0aGlzLmNvdW50Q29scygpKSk7ZWxzZXtjb25zdCBjZT10aGlz''@;'; put 'put ''LmNvdW50Q29scygpLTE7RD09PXYuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleCh2LmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChjZSwtMSkpJiZjZT5mJiZyZS5wdXNoKC4uLlouc2xpY2UoZisxKSl9cmV0dXJuIFluKHJlLGNlPT57bC5wdXNoKHRoaXMudG9WaXN1YWxDb2x1bW4oY2Up''@;'; put 'put ''KX0pLDA9PT1sLmxlbmd0aH19fSh0aGlzKSl9ZnVuY3Rpb24gbGZ0KCl7Y29uc3QgYz10aGlzLmdldFNldHRpbmcoImNvbHVtbnMiKTtBcnJheS5pc0FycmF5KGMpJiZ0aGlzLmhpZGVDb2x1bW5zKGMpfWZ1bmN0aW9uIFE1ZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3Io''@;'; put 'put ''IkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gUjkoYyxsKXtyZXR1cm4gYy5nZXQoaDYoYyxsKSl9ZnVuY3Rpb24gZW1lKGMsbCxhKXtyZXR1cm4gYy5zZXQoaDYoYyxsKSxhKSxhfWZ1bmN0aW9uIGg2KGMs''@;'; put 'put ''bCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1TYS5nZXRTaW5nbGV0b24oKS5yZWdp''@;'; put 'put ''c3RlcigiYmVmb3JlSGlkZVJvd3MiKSxTYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJIaWRlUm93cyIpLFNhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVVbmhpZGVSb3dzIiksU2EuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyVW5oaWRlUm93cyIpO2NvbnN0''@;'; put 'put ''IHRtZT0iaGlkZGVuUm93cyI7dmFyIFdwPW5ldyBXZWFrTWFwLEw5PW5ldyBXZWFrU2V0O2NsYXNzIHBmdCBleHRlbmRzIEZze2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlvbiBkZnQoYyxsKXtRNWUoYyxsKSxsLmFkZChjKX0odGhpcyxMOSksZnVuY3Rpb24gaGZ0''@;'; put 'put ''KGMsbCxhKXtRNWUoYyxsKSxsLnNldChjLGEpfSh0aGlzLFdwLG51bGwpfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiB0bWV9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMzIwfXN0YXRpYyBnZXQgREVGQVVMVF9TRVRUSU5HUygpe3JldHVybntjb3B5UGFzdGVF''@;'; put 'put ''bmFibGVkOiEwLGluZGljYXRvcnM6ITEscm93czpbXX19aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW3RtZV19ZW5hYmxlUGx1Z2luKCl7dmFyIGw9dGhpczt0aGlzLmVuYWJsZWR8fChlbWUoV3AsdGhpcyxuZXcgZlApLFI5KFdwLHRoaXMpLmFkZExvY2FsSG9v''@;'; put 'put ''aygiaW5pdCIsKCk9Pmg2KEw5LHRoaXMsX2Z0KS5jYWxsKHRoaXMpKSx0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5yZWdpc3Rlck1hcCh0aGlzLnBsdWdpbk5hbWUsUjkoV3AsdGhpcykpLHRoaXMuYWRkSG9vaygiYWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zIixmdW5jdGlvbigpe2Zv''@;'; put 'put ''cih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBoNihMOSxsLHlmdCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJhZnRlckdldENlbGxNZXRhIiwoYSxkLGgpPT5oNihMOSx0aGlzLG1mdCkuY2Fs''@;'; put 'put ''bCh0aGlzLGEsZCxoKSksdGhpcy5hZGRIb29rKCJtb2RpZnlSb3dIZWlnaHQiLChhLGQpPT5oNihMOSx0aGlzLGdmdCkuY2FsbCh0aGlzLGEsZCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJHZXRSb3dIZWFkZXIiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJy''@;'; put 'put ''YXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGg2KEw5LGwsYmZ0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soIm1vZGlmeUNvcHlhYmxlUmFuZ2UiLGE9Pmg2KEw5LHRoaXMsdmZ0KS5jYWxsKHRoaXMsYSkpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX11cGRh''@;'; put 'put ''dGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdpbigpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXtzdXBlci5kaXNhYmxlUGx1Z2luKCksdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIudW5yZWdpc3Rlck1hcCh0aGlzLnBsdWdpbk5hbWUp''@;'; put 'put ''LHRoaXMucmVzZXRDZWxsc01ldGEoKX1zaG93Um93cyhsKXtjb25zdCBhPXRoaXMuZ2V0SGlkZGVuUm93cygpLGQ9dGhpcy5pc1ZhbGlkQ29uZmlnKGwpO2xldCBoPWE7Y29uc3QgZj1SOShXcCx0aGlzKS5nZXRWYWx1ZXMoKS5zbGljZSgpLHY9bC5sZW5ndGg+MDtkJiZ2JiYoWW4obC5tYXAo''@;'; put 'put ''Wj0+dGhpcy5ob3QudG9QaHlzaWNhbFJvdyhaKSksWj0+e2ZbWl09ITF9KSxoPXF1KGYsKFoscmUsY2UpPT4ocmUmJloucHVzaCh0aGlzLmhvdC50b1Zpc3VhbFJvdyhjZSkpLFopLFtdKSksITEhPT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlVW5oaWRlUm93cyIsYSxoLGQmJnYpJiYoZCYm''@;'; put 'put ''diYmUjkoV3AsdGhpcykuc2V0VmFsdWVzKGYpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclVuaGlkZVJvd3MiLGEsaCxkJiZ2LGQmJmgubGVuZ3RoPGEubGVuZ3RoKSl9c2hvd1Jvdygpe2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGwpLGQ9MDtkPGw7ZCsrKWFbZF09''@;'; put 'put ''YXJndW1lbnRzW2RdO3RoaXMuc2hvd1Jvd3MoYSl9aGlkZVJvd3MobCl7Y29uc3QgYT10aGlzLmdldEhpZGRlblJvd3MoKSxkPXRoaXMuaXNWYWxpZENvbmZpZyhsKTtsZXQgaD1hO2QmJihoPUFycmF5LmZyb20obmV3IFNldChhLmNvbmNhdChsKSkpKSwhMSE9PXRoaXMuaG90LnJ1bkhvb2tz''@;'; put 'put ''KCJiZWZvcmVIaWRlUm93cyIsYSxoLGQpJiYoZCYmdGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9PntZbihsLHY9PntSOShXcCx0aGlzKS5zZXRWYWx1ZUF0SW5kZXgodGhpcy5ob3QudG9QaHlzaWNhbFJvdyh2KSwhMCl9KX0sITApLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckhpZGVSb3dz''@;'; put 'put ''IixhLGgsZCxkJiZoLmxlbmd0aD5hLmxlbmd0aCkpfWhpZGVSb3coKXtmb3IodmFyIGw9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShsKSxkPTA7ZDxsO2QrKylhW2RdPWFyZ3VtZW50c1tkXTt0aGlzLmhpZGVSb3dzKGEpfWdldEhpZGRlblJvd3MoKXtyZXR1cm4geXMoUjkoV3AsdGhp''@;'; put 'put ''cykuZ2V0SGlkZGVuSW5kZXhlcygpLGw9PnRoaXMuaG90LnRvVmlzdWFsUm93KGwpKX1pc0hpZGRlbihsKXtyZXR1cm4gUjkoV3AsdGhpcykuZ2V0VmFsdWVBdEluZGV4KHRoaXMuaG90LnRvUGh5c2ljYWxSb3cobCkpfHwhMX1pc1ZhbGlkQ29uZmlnKGwpe2NvbnN0IGE9dGhpcy5ob3QuY291''@;'; put 'put ''bnRSb3dzKCk7cmV0dXJuISEoQXJyYXkuaXNBcnJheShsKSYmbC5sZW5ndGg+MCkmJmwuZXZlcnkoZD0+TnVtYmVyLmlzSW50ZWdlcihkKSYmZD49MCYmZDxhKX1yZXNldENlbGxzTWV0YSgpe1luKHRoaXMuaG90LmdldENlbGxzTWV0YSgpLGw9PntsLnNraXBSb3dPblBhc3RlPSExfSl9ZGVz''@;'; put 'put ''dHJveSgpe2VtZShXcCx0aGlzLG51bGwpLHN1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gZ2Z0KGMsbCl7cmV0dXJuIHRoaXMuaXNIaWRkZW4obCk/MDpjfWZ1bmN0aW9uIG1mdChjLGwsYSl7aWYoITE9PT10aGlzLmdldFNldHRpbmcoImNvcHlQYXN0ZUVuYWJsZWQiKSYmdGhpcy5pc0hpZGRl''@;'; put 'put ''bihjKSYmKGEuc2tpcFJvd09uUGFzdGU9ITApLHRoaXMuaXNIaWRkZW4oYy0xKSlhLmNsYXNzTmFtZT1hLmNsYXNzTmFtZXx8IiIsLTE9PT1hLmNsYXNzTmFtZS5pbmRleE9mKCJhZnRlckhpZGRlblJvdyIpJiYoYS5jbGFzc05hbWUrPSIgYWZ0ZXJIaWRkZW5Sb3ciKTtlbHNlIGlmKGEuY2xh''@;'; put 'put ''c3NOYW1lKXtjb25zdCBkPWEuY2xhc3NOYW1lLnNwbGl0KCIgIik7aWYoZC5sZW5ndGg+MCl7Y29uc3QgaD1kLmluZGV4T2YoImFmdGVySGlkZGVuUm93Iik7aD4tMSYmZC5zcGxpY2UoaCwxKSxhLmNsYXNzTmFtZT1kLmpvaW4oIiAiKX19fWZ1bmN0aW9uIHZmdChjKXtpZih0aGlzLmdldFNl''@;'; put 'put ''dHRpbmcoImNvcHlQYXN0ZUVuYWJsZWQiKSlyZXR1cm4gYztjb25zdCBsPVtdLGE9KGQsaCxmLHYpPT57bC5wdXNoKHtzdGFydFJvdzpkLGVuZFJvdzpoLHN0YXJ0Q29sOmYsZW5kQ29sOnZ9KX07cmV0dXJuIFluKGMsZD0+e2xldCBoPSEwLGY9MDtHYShkLnN0YXJ0Um93LGQuZW5kUm93LHY9''@;'; put 'put ''Pnt0aGlzLmlzSGlkZGVuKHYpPyhofHxhKGYsdi0xLGQuc3RhcnRDb2wsZC5lbmRDb2wpLGg9ITApOihoJiYoZj12KSx2PT09ZC5lbmRSb3cmJmEoZix2LGQuc3RhcnRDb2wsZC5lbmRDb2wpLGg9ITEpfSl9KSxsfWZ1bmN0aW9uIGJmdChjLGwpe2lmKCF0aGlzLmdldFNldHRpbmcoImluZGlj''@;'; put 'put ''YXRvcnMiKXx8YzwwKXJldHVybjtjb25zdCBhPVtdO2M+PTEmJnRoaXMuaXNIaWRkZW4oYy0xKSYmYS5wdXNoKCJhZnRlckhpZGRlblJvdyIpLGM8dGhpcy5ob3QuY291bnRSb3dzKCktMSYmdGhpcy5pc0hpZGRlbihjKzEpJiZhLnB1c2goImJlZm9yZUhpZGRlblJvdyIpLFRpKGwsYSl9ZnVu''@;'; put 'put ''Y3Rpb24geWZ0KGMpe2MuaXRlbXMucHVzaCh7bmFtZTpzc30sZnVuY3Rpb24gY2Z0KGMpe3JldHVybntrZXk6ImhpZGRlbl9yb3dzX2hpZGUiLG5hbWUoKXtjb25zdCBsPXRoaXMuZ2V0U2VsZWN0ZWRMYXN0KCk7bGV0IGE9MDtpZihBcnJheS5pc0FycmF5KGwpKXtjb25zdFtkLCxoXT1sO2Qt''@;'; put 'put ''aCE9MCYmKGE9MSl9cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShPcSxhKX0sY2FsbGJhY2soKXtjb25zdHtmcm9tOmwsdG86YX09dGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLGQ9TWF0aC5tYXgoTWF0aC5taW4obC5yb3csYS5yb3cpLDApLGg9TWF0aC5tYXgobC5yb3csYS5y''@;'; put 'put ''b3cpLGY9W107Zm9yKGxldCBEPWQ7RDw9aDtEKz0xKWYucHVzaChEKTtjLmhpZGVSb3dzKGYpO2NvbnN0IE09dGhpcy5yb3dJbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoZltmLmxlbmd0aC0xXSwxLCEwKTtOdW1iZXIuaXNJbnRlZ2VyKE0pJiZNPj0wP3RoaXMuc2VsZWN0''@;'; put 'put ''Um93cyhNKTp0aGlzLmRlc2VsZWN0Q2VsbCgpLHRoaXMucmVuZGVyKCksdGhpcy52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpfSxkaXNhYmxlZDohMSxoaWRkZW4oKXtyZXR1cm4hKHRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpfHx0aGlzLnNlbGVjdGlvbi5pc1NlbGVj''@;'; put 'put ''dGVkQnlDb3JuZXIoKSl9fX0odGhpcyksZnVuY3Rpb24gdWZ0KGMpe2NvbnN0IGw9W107cmV0dXJue2tleToiaGlkZGVuX3Jvd3Nfc2hvdyIsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoUHEsbC5sZW5ndGg+MT8xOjApfSxjYWxsYmFjaygpe3ZhciBhLGQ7aWYoMD09''@;'; put 'put ''PWwubGVuZ3RoKXJldHVybjtsZXQgaD1sWzBdLGY9bFtsLmxlbmd0aC0xXTtoPW51bGwhPT0oYT10aGlzLnJvd0luZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChoLTEsLTEpKSYmdm9pZCAwIT09YT9hOjAsZj1udWxsIT09KGQ9dGhpcy5yb3dJbmRleE1hcHBlci5nZXROZWFy''@;'; put 'put ''ZXN0Tm90SGlkZGVuSW5kZXgoZisxLDEpKSYmdm9pZCAwIT09ZD9kOnRoaXMuY291bnRSb3dzKCktMSxjLnNob3dSb3dzKGwpLHRoaXMucmVuZGVyKCksdGhpcy52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpLGYtaCsxPT09dGhpcy5jb3VudFJvd3MoKXx8dGhpcy5zZWxlY3RSb3dzKGgsZil9''@;'; put 'put ''LGRpc2FibGVkOiExLGhpZGRlbigpe2NvbnN0IGE9eXMoYy5nZXRIaWRkZW5Sb3dzKCksY2U9PnRoaXMudG9QaHlzaWNhbFJvdyhjZSkpO2lmKCF0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKSYmIXRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpfHxhLmxl''@;'; put 'put ''bmd0aDwxKXJldHVybiEwO2wubGVuZ3RoPTA7Y29uc3QgZD10aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksaD1kLmdldFRvcFN0YXJ0Q29ybmVyKCkucm93LGY9ZC5nZXRCb3R0b21FbmRDb3JuZXIoKS5yb3csdj10aGlzLnJvd0luZGV4TWFwcGVyLE09di5nZXRSZW5kZXJhYmxlRnJvbVZp''@;'; put 'put ''c3VhbEluZGV4KGgpLEQ9di5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGYpLFo9di5nZXROb3RUcmltbWVkSW5kZXhlcygpLHJlPVtdO2lmKGghPT1mKXtpZihmLWgrMT5ELU0rMSl7Y29uc3QgRWU9Wi5zbGljZShoLGYrMSk7cmUucHVzaCguLi5FZS5maWx0ZXIoQmU9PmEuaW5jbHVk''@;'; put 'put ''ZXMoQmUpKSl9fWVsc2UgaWYoMD09PU0mJk08aClyZS5wdXNoKC4uLlouc2xpY2UoMCxoKSk7ZWxzZSBpZihudWxsPT09TSlyZS5wdXNoKC4uLlouc2xpY2UoMCx0aGlzLmNvdW50Um93cygpKSk7ZWxzZXtjb25zdCBjZT10aGlzLmNvdW50Um93cygpLTE7RD09PXYuZ2V0UmVuZGVyYWJsZUZy''@;'; put 'put ''b21WaXN1YWxJbmRleCh2LmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChjZSwtMSkpJiZjZT5mJiZyZS5wdXNoKC4uLlouc2xpY2UoZisxKSl9cmV0dXJuIFluKHJlLGNlPT57bC5wdXNoKHRoaXMudG9WaXN1YWxSb3coY2UpKX0pLDA9PT1sLmxlbmd0aH19fSh0aGlzKSl9ZnVuY3Rpb24gX2Z0''@;'; put 'put ''KCl7Y29uc3QgYz10aGlzLmdldFNldHRpbmcoInJvd3MiKTtBcnJheS5pc0FycmF5KGMpJiZ0aGlzLmhpZGVSb3dzKGMpfWZ1bmN0aW9uIG5tZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMg''@;'; put 'put ''dHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gUFEoYyxsKXtyZXR1cm4gYy5nZXQoaUgoYyxsKSl9ZnVuY3Rpb24gRlEoYyxsLGEpe3JldHVybiBjLnNldChpSChjLGwpLGEpLGF9ZnVuY3Rpb24gaUgoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJl''@;'; put 'put ''dHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfVNhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVDb2x1bW5GcmVlemUiKSxTYS5nZXRTaW5nbGV0b24oKS5y''@;'; put 'put ''ZWdpc3RlcigiYWZ0ZXJDb2x1bW5GcmVlemUiKSxTYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVmb3JlQ29sdW1uVW5mcmVlemUiKSxTYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJDb2x1bW5VbmZyZWV6ZSIpO2NvbnN0IHJtZT0ibWFudWFsQ29sdW1uRnJlZXplIjt2YXIg''@;'; put 'put ''Tzk9bmV3IFdlYWtNYXAsSFE9bmV3IFdlYWtTZXQ7Y2xhc3MgRWZ0IGV4dGVuZHMgRnN7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIFNmdChjLGwpe25tZShjLGwpLGwuYWRkKGMpfSh0aGlzLEhRKSxmdW5jdGlvbiBNZnQoYyxsLGEpe25tZShjLGwpLGwuc2V0''@;'; put 'put ''KGMsYSl9KHRoaXMsTzksITEpfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBybWV9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMTEwfWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtybWVdfWVuYWJsZVBsdWdpbigpe3RoaXMuZW5h''@;'; put 'put ''YmxlZHx8KHRoaXMuYWRkSG9vaygiYWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zIixsPT5pSChIUSx0aGlzLFRmdCkuY2FsbCh0aGlzLGwpKSx0aGlzLmFkZEhvb2soImJlZm9yZUNvbHVtbk1vdmUiLChsLGEpPT5pSChIUSx0aGlzLEFmdCkuY2FsbCh0aGlzLGwsYSkpLHN1cGVyLmVu''@;'; put 'put ''YWJsZVBsdWdpbigpKX1kaXNhYmxlUGx1Z2luKCl7RlEoTzksdGhpcywhMSksc3VwZXIuZGlzYWJsZVBsdWdpbigpfXVwZGF0ZVBsdWdpbigpe3RoaXMuZGlzYWJsZVBsdWdpbigpLHRoaXMuZW5hYmxlUGx1Z2luKCksc3VwZXIudXBkYXRlUGx1Z2luKCl9ZnJlZXplQ29sdW1uKGwpe2NvbnN0''@;'; put 'put ''IGE9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKSxkPWEuZml4ZWRDb2x1bW5zU3RhcnQ8dGhpcy5ob3QuY291bnRDb2xzKCkmJmw+YS5maXhlZENvbHVtbnNTdGFydC0xO1BRKE85LHRoaXMpfHxGUShPOSx0aGlzLCEwKSwhMSE9PXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVDb2x1bW5GcmVlemUi''@;'; put 'put ''LGwsZCkmJihkJiYodGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIubW92ZUluZGV4ZXMobCxhLmZpeGVkQ29sdW1uc1N0YXJ0KSxhLl9maXhlZENvbHVtbnNTdGFydCs9MSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyQ29sdW1uRnJlZXplIixsLGQpKX11bmZyZWV6ZUNvbHVtbihsKXtjb25z''@;'; put 'put ''dCBhPXRoaXMuaG90LmdldFNldHRpbmdzKCksZD1hLmZpeGVkQ29sdW1uc1N0YXJ0PjAmJmw8PWEuZml4ZWRDb2x1bW5zU3RhcnQtMTtQUShPOSx0aGlzKXx8RlEoTzksdGhpcywhMCksITEhPT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQ29sdW1uVW5mcmVlemUiLGwsZCkmJihkJiYoYS5f''@;'; put 'put ''Zml4ZWRDb2x1bW5zU3RhcnQtPTEsdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIubW92ZUluZGV4ZXMobCxhLmZpeGVkQ29sdW1uc1N0YXJ0KSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyQ29sdW1uVW5mcmVlemUiLGwsZCkpfX1mdW5jdGlvbiBUZnQoYyl7Yy5pdGVtcy5wdXNoKHtuYW1l''@;'; put 'put ''OiItLS0tLS0tLS0ifSxmdW5jdGlvbiB3ZnQoYyl7cmV0dXJue2tleToiZnJlZXplX2NvbHVtbiIsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UobHEpfSxjYWxsYmFjayhsLGEpe2NvbnN0W3tzdGFydDp7Y29sOmR9fV09YTtjLmZyZWV6ZUNvbHVtbihkKSx0aGlzLnJl''@;'; put 'put ''bmRlcigpLHRoaXMudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKX0saGlkZGVuKCl7Y29uc3QgbD10aGlzLmdldFNlbGVjdGVkUmFuZ2UoKTtsZXQgYT0hMTtyZXR1cm4odm9pZCAwPT09bHx8bC5sZW5ndGg+MXx8bFswXS5mcm9tLmNvbCE9PWxbMF0udG8uY29sfHxsWzBdLmZyb20uY29sPD10''@;'; put 'put ''aGlzLmdldFNldHRpbmdzKCkuZml4ZWRDb2x1bW5zU3RhcnQtMSkmJihhPSEwKSxhfX19KHRoaXMpLGZ1bmN0aW9uIENmdChjKXtyZXR1cm57a2V5OiJ1bmZyZWV6ZV9jb2x1bW4iLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKGNxKX0sY2FsbGJhY2sobCxhKXtjb25z''@;'; put 'put ''dFt7c3RhcnQ6e2NvbDpkfX1dPWE7Yy51bmZyZWV6ZUNvbHVtbihkKSx0aGlzLnJlbmRlcigpLHRoaXMudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKX0saGlkZGVuKCl7Y29uc3QgbD10aGlzLmdldFNlbGVjdGVkUmFuZ2UoKTtsZXQgYT0hMTtyZXR1cm4odm9pZCAwPT09bHx8bC5sZW5ndGg+''@;'; put 'put ''MXx8bFswXS5mcm9tLmNvbCE9PWxbMF0udG8uY29sfHxsWzBdLmZyb20uY29sPj10aGlzLmdldFNldHRpbmdzKCkuZml4ZWRDb2x1bW5zU3RhcnQpJiYoYT0hMCksYX19fSh0aGlzKSl9ZnVuY3Rpb24gQWZ0KGMsbCl7aWYoUFEoTzksdGhpcykpe2NvbnN0IGE9dGhpcy5ob3QuZ2V0U2V0dGlu''@;'; put 'put ''Z3MoKS5maXhlZENvbHVtbnNTdGFydDtpZihsPGF8fGMuc29tZShkPT5kPGEpKXJldHVybiExfX1mdW5jdGlvbiBhSChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24ga2Z0KGMpe3ZhciBsPWZ1bmN0aW9uIERmdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9''@;'; put 'put ''Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9''@;'; put 'put ''cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxl''@;'; put 'put ''OiEwfSk6Y1tsXT1hLGN9Y29uc3QgY3c9InB4IixvbWU9Y2xhc3MgSWZ0e2NvbnN0cnVjdG9yKGwpe2FIKHRoaXMsImhvdCIsdm9pZCAwKSxhSCh0aGlzLCJfZWxlbWVudCIsbnVsbCksYUgodGhpcywic3RhdGUiLDApLGFIKHRoaXMsImlubGluZVByb3BlcnR5Iix2b2lkIDApLHRoaXMuaG90''@;'; put 'put ''PWwsdGhpcy5pbmxpbmVQcm9wZXJ0eT1sLmlzUnRsKCk/InJpZ2h0IjoibGVmdCJ9YXBwZW5kVG8obCl7bC5hcHBlbmRDaGlsZCh0aGlzLl9lbGVtZW50KSx0aGlzLnN0YXRlPTJ9YnVpbGQoKXswPT09dGhpcy5zdGF0ZSYmKHRoaXMuX2VsZW1lbnQ9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNy''@;'; put 'put ''ZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMuc3RhdGU9MSl9ZGVzdHJveSgpe3RoaXMuaXNBcHBlbmRlZCgpJiZ0aGlzLl9lbGVtZW50LnBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQodGhpcy5fZWxlbWVudCksdGhpcy5fZWxlbWVudD1udWxsLHRoaXMuc3RhdGU9MH1pc0FwcGVuZGVkKCl7cmV0''@;'; put 'put ''dXJuIDI9PT10aGlzLnN0YXRlfWlzQnVpbHQoKXtyZXR1cm4gdGhpcy5zdGF0ZT49MX1zZXRQb3NpdGlvbihsLGEpe20xKGwpJiYodGhpcy5fZWxlbWVudC5zdHlsZS50b3A9bCtjdyksbTEoYSkmJih0aGlzLl9lbGVtZW50LnN0eWxlW3RoaXMuaW5saW5lUHJvcGVydHldPWErY3cpfWdldFBv''@;'; put 'put ''c2l0aW9uKCl7Y29uc3QgbD10aGlzLl9lbGVtZW50LnN0eWxlO3JldHVybnt0b3A6bC50b3A/cGFyc2VJbnQobC50b3AsMTApOjAsc3RhcnQ6bFt0aGlzLmlubGluZVByb3BlcnR5XT9wYXJzZUludChsW3RoaXMuaW5saW5lUHJvcGVydHldLDEwKTowfX1zZXRTaXplKGwsYSl7bTEobCkmJih0''@;'; put 'put ''aGlzLl9lbGVtZW50LnN0eWxlLndpZHRoPWwrY3cpLG0xKGEpJiYodGhpcy5fZWxlbWVudC5zdHlsZS5oZWlnaHQ9YStjdyl9Z2V0U2l6ZSgpe3JldHVybnt3aWR0aDp0aGlzLl9lbGVtZW50LnN0eWxlLndpZHRoP3BhcnNlSW50KHRoaXMuX2VsZW1lbnQuc3R5bGUud2lkdGgsMTApOjAsaGVp''@;'; put 'put ''Z2h0OnRoaXMuX2VsZW1lbnQuc3R5bGUuaGVpZ2h0P3BhcnNlSW50KHRoaXMuX2VsZW1lbnQuc3R5bGUuaGVpZ2h0LDEwKTowfX1zZXRPZmZzZXQobCxhKXttMShsKSYmKHRoaXMuX2VsZW1lbnQuc3R5bGUubWFyZ2luVG9wPWwrY3cpLG0xKGEpJiYodGhpcy5fZWxlbWVudC5zdHlsZVtgbWFy''@;'; put 'put ''Z2luJHtwMSh0aGlzLmlubGluZVByb3BlcnR5KX1gXT1hK2N3KX1nZXRPZmZzZXQoKXtjb25zdCBsPXRoaXMuX2VsZW1lbnQuc3R5bGUsYT1gbWFyZ2luJHtwMSh0aGlzLmlubGluZVByb3BlcnR5KX1gO3JldHVybnt0b3A6bC5tYXJnaW5Ub3A/cGFyc2VJbnQobC5tYXJnaW5Ub3AsMTApOjAs''@;'; put 'put ''c3RhcnQ6bFthXT9wYXJzZUludChsW2FdLDEwKTowfX19LE9mdD1jbGFzcyBMZnQgZXh0ZW5kcyBvbWV7YnVpbGQoKXtzdXBlci5idWlsZCgpLFRpKHRoaXMuX2VsZW1lbnQsImh0X19tYW51YWxDb2x1bW5Nb3ZlLS1iYWNrbGlnaHQiKX19LEhmdD1jbGFzcyBGZnQgZXh0ZW5kcyBvbWV7YnVp''@;'; put 'put ''bGQoKXtzdXBlci5idWlsZCgpLFRpKHRoaXMuX2VsZW1lbnQsImh0X19tYW51YWxDb2x1bW5Nb3ZlLS1ndWlkZWxpbmUiKX19O2Z1bmN0aW9uIGIzKGMsbCxhKXtzbWUoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIHNtZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNh''@;'; put 'put ''bm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gS2QoYyxsLGEpe3JldHVybiBjLnNldChmNihjLGwpLGEpLGF9ZnVuY3Rpb24gemEoYyxsKXtyZXR1cm4gYy5nZXQoZjYoYyxsKSl9ZnVuY3Rpb24gZjYoYyxsLGEp''@;'; put 'put ''e2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfVNhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVy''@;'; put 'put ''KCJiZWZvcmVDb2x1bW5Nb3ZlIiksU2EuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyQ29sdW1uTW92ZSIpO2NvbnN0IFZRPSJtYW51YWxDb2x1bW5Nb3ZlIixsbWU9Imh0X19tYW51YWxDb2x1bW5Nb3ZlIixvSD0ic2hvdy11aSIsQlE9Im9uLW1vdmluZy0tY29sdW1ucyIsalE9ImFm''@;'; put 'put ''dGVyLXNlbGVjdGlvbi0tY29sdW1ucyI7dmFyIFExPW5ldyBXZWFrTWFwLHA2PW5ldyBXZWFrTWFwLGpnPW5ldyBXZWFrTWFwLHNIPW5ldyBXZWFrTWFwLGc2PW5ldyBXZWFrTWFwLGVkPW5ldyBXZWFrTWFwLGxIPW5ldyBXZWFrTWFwLEoyPW5ldyBXZWFrTWFwLHV3PW5ldyBXZWFrTWFwLGNI''@;'; put 'put ''PW5ldyBXZWFrTWFwLGFBPW5ldyBXZWFrTWFwLFA5PW5ldyBXZWFrU2V0O2NsYXNzIEJmdCBleHRlbmRzIEZze2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlvbiBOZnQoYyxsKXtzbWUoYyxsKSxsLmFkZChjKX0odGhpcyxQOSksYjModGhpcyxRMSxuZXcgT2Z0KHRo''@;'; put 'put ''aXMuaG90KSksYjModGhpcyxwNixuZXcgSGZ0KHRoaXMuaG90KSksYjModGhpcyxqZyxbXSksYjModGhpcyxzSCwwKSxiMyh0aGlzLGc2LCExKSxiMyh0aGlzLGVkLHt9KSxiMyh0aGlzLGxILHZvaWQgMCksYjModGhpcyxKMix2b2lkIDApLGIzKHRoaXMsdXcsdm9pZCAwKSxiMyh0aGlzLGNI''@;'; put 'put ''LHZvaWQgMCksYjModGhpcyxhQSx2b2lkIDApfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBWUX1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAxMjB9aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW1ZRXX1lbmFibGVQbHVnaW4oKXt2''@;'; put 'put ''YXIgbD10aGlzO3RoaXMuZW5hYmxlZHx8KHRoaXMuYWRkSG9vaygiYmVmb3JlT25DZWxsTW91c2VEb3duIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBmNihQOSxsLGpmdCku''@;'; put 'put ''Y2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVPbkNlbGxNb3VzZU92ZXIiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGY2KFA5LGwsVWZ0KS5jYWxsKGwsLi4u''@;'; put 'put ''ZCl9KSx0aGlzLmFkZEhvb2soImFmdGVyU2Nyb2xsVmVydGljYWxseSIsKCk9PmY2KFA5LHRoaXMsV2Z0KS5jYWxsKHRoaXMpKSx0aGlzLmFkZEhvb2soImFmdGVyTG9hZERhdGEiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTto''@;'; put 'put ''KyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGY2KFA5LGwsWWZ0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmJ1aWxkUGx1Z2luVUkoKSx0aGlzLnJlZ2lzdGVyRXZlbnRzKCksVGkodGhpcy5ob3Qucm9vdEVsZW1lbnQsbG1lKSxzdXBlci5lbmFibGVQbHVnaW4oKSl9dXBkYXRlUGx1Z2luKCl7''@;'; put 'put ''dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSx0aGlzLm1vdmVCeVNldHRpbmdzT3JMb2FkKCksc3VwZXIudXBkYXRlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe2xvKHRoaXMuaG90LnJvb3RFbGVtZW50LGxtZSksdGhpcy51bnJlZ2lzdGVyRXZlbnRzKCksemEoUTEs''@;'; put 'put ''dGhpcykuZGVzdHJveSgpLHphKHA2LHRoaXMpLmRlc3Ryb3koKSxzdXBlci5kaXNhYmxlUGx1Z2luKCl9bW92ZUNvbHVtbihsLGEpe3JldHVybiB0aGlzLm1vdmVDb2x1bW5zKFtsXSxhKX1tb3ZlQ29sdW1ucyhsLGEpe2NvbnN0IGQ9emEobEgsdGhpcyksaD10aGlzLmlzTW92ZVBvc3NpYmxl''@;'; put 'put ''KGwsYSksZj10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQ29sdW1uTW92ZSIsbCxhLGQsaCk7aWYoS2QobEgsdGhpcyx2b2lkIDApLCExPT09ZilyZXR1cm47aCYmdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIubW92ZUluZGV4ZXMobCxhKTtjb25zdCB2PWgmJnRoaXMuaXNDb2x1bW5PcmRl''@;'; put 'put ''ckNoYW5nZWQobCxhKTtyZXR1cm4gdGhpcy5ob3QucnVuSG9va3MoImFmdGVyQ29sdW1uTW92ZSIsbCxhLGQsaCx2KSx2fWRyYWdDb2x1bW4obCxhKXtyZXR1cm4gdGhpcy5kcmFnQ29sdW1ucyhbbF0sYSl9ZHJhZ0NvbHVtbnMobCxhKXtjb25zdCBkPXRoaXMuY291bnRGaW5hbEluZGV4KGws''@;'; put 'put ''YSk7cmV0dXJuIEtkKGxILHRoaXMsYSksdGhpcy5tb3ZlQ29sdW1ucyhsLGQpfWlzTW92ZVBvc3NpYmxlKGwsYSl7Y29uc3QgZD10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXROb3RUcmltbWVkSW5kZXhlc0xlbmd0aCgpLGg9bC5sZW5ndGgrYT5kLGY9YTwwLHY9bC5zb21lKEQ9PkQ8''@;'; put 'put ''MCksTT1sLnNvbWUoRD0+RD49ZCk7cmV0dXJuIShofHxmfHx2fHxNKX1pc0NvbHVtbk9yZGVyQ2hhbmdlZChsLGEpe3JldHVybiBsLnNvbWUoKGQsaCk9PmQtaCE9PWEpfWNvdW50RmluYWxJbmRleChsLGEpe2NvbnN0IGQ9cXUobCwoaCxmKT0+KGY8YSYmKGgrPTEpLGgpLDApO3JldHVybiBh''@;'; put 'put ''LWR9Z2V0Q29sdW1uc1dpZHRoKGwsYSl7Y29uc3QgZD10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlcjtsZXQgaD0wO2ZvcihsZXQgZj1sO2Y8PWE7Zis9MSl7Y29uc3Qgdj1kLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoZik7ZjwwP2grPXRoaXMuaG90LnZpZXcuX3d0Lnd0Vmlld3Bv''@;'; put 'put ''cnQuZ2V0Um93SGVhZGVyV2lkdGgoKXx8MDpudWxsIT09diYmKGgrPXRoaXMuaG90LnZpZXcuX3d0Lnd0VGFibGUuZ2V0Q29sdW1uV2lkdGgodil8fDApfXJldHVybiBofW1vdmVCeVNldHRpbmdzT3JMb2FkKCl7Y29uc3QgbD10aGlzLmhvdC5nZXRTZXR0aW5ncygpW1ZRXTtpZihBcnJheS5p''@;'; put 'put ''c0FycmF5KGwpKXRoaXMubW92ZUNvbHVtbnMobCwwKTtlbHNlIGlmKHZvaWQgMCE9PWwpe2NvbnN0IGE9dGhpcy5wZXJzaXN0ZW50U3RhdGVMb2FkKCk7YS5sZW5ndGgmJnRoaXMubW92ZUNvbHVtbnMoYSwwKX19aXNGaXhlZENvbHVtbnNTdGFydChsKXtyZXR1cm4gbDx0aGlzLmhvdC5nZXRT''@;'; put 'put ''ZXR0aW5ncygpLmZpeGVkQ29sdW1uc1N0YXJ0fXBlcnNpc3RlbnRTdGF0ZVNhdmUoKXt0aGlzLmhvdC5ydW5Ib29rcygicGVyc2lzdGVudFN0YXRlU2F2ZSIsIm1hbnVhbENvbHVtbk1vdmUiLHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldEluZGV4ZXNTZXF1ZW5jZSgpKX1wZXJzaXN0''@;'; put 'put ''ZW50U3RhdGVMb2FkKCl7Y29uc3QgbD17fTtyZXR1cm4gdGhpcy5ob3QucnVuSG9va3MoInBlcnNpc3RlbnRTdGF0ZUxvYWQiLCJtYW51YWxDb2x1bW5Nb3ZlIixsKSxsLnZhbHVlP2wudmFsdWU6W119cHJlcGFyZUNvbHVtbnNUb01vdmluZyhsLGEpe2NvbnN0IGQ9W107cmV0dXJuIEdhKGws''@;'; put 'put ''YSxoPT57ZC5wdXNoKGgpfSksZH1yZWZyZXNoUG9zaXRpb25zKCl7Y29uc3QgbD10aGlzLmhvdC52aWV3LmdldEZpcnN0RnVsbHlWaXNpYmxlQ29sdW1uKCk7dGhpcy5pc0ZpeGVkQ29sdW1uc1N0YXJ0KHphKEoyLHRoaXMpKSYmbD4wJiZ0aGlzLmhvdC5zY3JvbGxWaWV3cG9ydFRvKHtjb2w6''@;'; put 'put ''dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGwtMSwtMSl9KTtjb25zdCBhPXRoaXMuaG90LnZpZXcuX3d0Lnd0VGFibGUsZD10aGlzLmhvdC52aWV3Ll93dC53dE92ZXJsYXlzLnNjcm9sbGFibGVFbGVtZW50LGg9Im51bWJlciI9PXR5cGVvZiBk''@;'; put 'put ''LnNjcm9sbFg/ZC5zY3JvbGxYOmQuc2Nyb2xsTGVmdDtsZXQgZj10aGlzLmhvdC52aWV3LlRIRUFELm9mZnNldExlZnQrdGhpcy5nZXRDb2x1bW5zV2lkdGgoMCx6YShKMix0aGlzKS0xKTtjb25zdCB2PWEuaGlkZXIub2Zmc2V0V2lkdGgsTT1hLlRCT0RZLm9mZnNldExlZnQsRD16YShRMSx0''@;'; put 'put ''aGlzKS5nZXRPZmZzZXQoKS5zdGFydCxaPXphKFExLHRoaXMpLmdldFNpemUoKS53aWR0aDtsZXQgcmU9MCxjZT0wO2lmKHRoaXMuaG90LmlzUnRsKCkpe2NvbnN0IEJlPXRoaXMuaG90LnJvb3RXaW5kb3cscWU9c3UodGhpcy5ob3Qucm9vdEVsZW1lbnQpLHJ0PUJlLmlubmVyV2lkdGgtemEo''@;'; put 'put ''dXcsdGhpcyktcWU7Y2U9QmUuaW5uZXJXaWR0aC16YShlZCx0aGlzKS5ldmVudFBhZ2VYLXJ0LSh2b2lkIDA9PT1kLnNjcm9sbFg/aDowKX1lbHNlIGNlPXphKGVkLHRoaXMpLmV2ZW50UGFnZVgtKHphKHV3LHRoaXMpLSh2b2lkIDA9PT1kLnNjcm9sbFg/aDowKSk7aWYoemEoY0gsdGhpcykm''@;'; put 'put ''JihyZT10aGlzLmhvdC52aWV3Ll93dC53dE92ZXJsYXlzLmlubGluZVN0YXJ0T3ZlcmxheS5jbG9uZS53dFRhYmxlLmdldENvbHVtbkhlYWRlcigtMSkub2Zmc2V0V2lkdGgpLHRoaXMuaXNGaXhlZENvbHVtbnNTdGFydCh6YShKMix0aGlzKSkmJihmKz1oKSxmKz1yZSx6YShKMix0aGlzKTww''@;'; put 'put ''KXphKGFBLHRoaXMpPjA/emEoZWQsdGhpcykuY29sPTA6emEoZWQsdGhpcykuY29sPWw+MD9sLTE6bDtlbHNlIGlmKHphKGVkLHRoaXMpLlRELm9mZnNldFdpZHRoLzIrZjw9Y2Upe2NvbnN0IEJlPXphKEoyLHRoaXMpPj16YShzSCx0aGlzKT96YShzSCx0aGlzKS0xOnphKEoyLHRoaXMpO3ph''@;'; put 'put ''KGVkLHRoaXMpLmNvbD1CZSsxLGYrPXphKGVkLHRoaXMpLlRELm9mZnNldFdpZHRofWVsc2UgemEoZWQsdGhpcykuY29sPXphKEoyLHRoaXMpO2xldCBiZT1jZSxFZT1mO2NlK1orRD49dj9iZT12LVotRDpjZStEPE0rcmUmJihiZT1NK3JlK01hdGguYWJzKEQpKSxmPj12LTE/RWU9di0xOjA9''@;'; put 'put ''PT1FZT9FZT0xOnZvaWQgMCE9PWQuc2Nyb2xsWCYmemEoSjIsdGhpcyk8emEoYUEsdGhpcykmJihFZS09emEodXcsdGhpcyk8PWQuc2Nyb2xsWD96YSh1dyx0aGlzKTowKSx6YShRMSx0aGlzKS5zZXRQb3NpdGlvbihudWxsLGJlKSx6YShwNix0aGlzKS5zZXRQb3NpdGlvbihudWxsLEVlKX1y''@;'; put 'put ''ZWdpc3RlckV2ZW50cygpe2NvbnN0e2RvY3VtZW50RWxlbWVudDpsfT10aGlzLmhvdC5yb290RG9jdW1lbnQ7dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLCJtb3VzZW1vdmUiLGE9PmY2KFA5LHRoaXMsemZ0KS5jYWxsKHRoaXMsYSkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFk''@;'; put 'put ''ZEV2ZW50TGlzdGVuZXIobCwibW91c2V1cCIsKCk9PmY2KFA5LHRoaXMsWmZ0KS5jYWxsKHRoaXMpKX11bnJlZ2lzdGVyRXZlbnRzKCl7dGhpcy5ldmVudE1hbmFnZXIuY2xlYXIoKX1idWlsZFBsdWdpblVJKCl7emEoUTEsdGhpcykuYnVpbGQoKSx6YShwNix0aGlzKS5idWlsZCgpfWRlc3Ry''@;'; put 'put ''b3koKXt6YShRMSx0aGlzKS5kZXN0cm95KCksemEocDYsdGhpcykuZGVzdHJveSgpLHN1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gamZ0KGMsbCxhLGQpe2NvbnN0IGg9dGhpcy5ob3Qudmlldy5fd3Qud3RUYWJsZSxmPXRoaXMuaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb2x1bW5IZWFk''@;'; put 'put ''ZXIoKSx2PXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksTT1wbyhjLnRhcmdldCwic29ydEFjdGlvbiIpO2lmKCF2fHwhZnx8emEoZzYsdGhpcyl8fDAhPT1jLmJ1dHRvbnx8TSlyZXR1cm4gS2QoZzYsdGhpcywhMSksemEoamcsdGhpcykubGVuZ3RoPTAsdm9pZCBsbyh0aGlzLmhv''@;'; put 'put ''dC5yb290RWxlbWVudCxbQlEsb0hdKTtjb25zdCBEPXphKHA2LHRoaXMpLmlzQnVpbHQoKSYmIXphKHA2LHRoaXMpLmlzQXBwZW5kZWQoKSxaPXphKFExLHRoaXMpLmlzQnVpbHQoKSYmIXphKFExLHRoaXMpLmlzQXBwZW5kZWQoKTtEJiZaJiYoemEocDYsdGhpcykuYXBwZW5kVG8oaC5oaWRl''@;'; put 'put ''ciksemEoUTEsdGhpcykuYXBwZW5kVG8oaC5oaWRlcikpO2NvbnN0e2Zyb206cmUsdG86Y2V9PXYsYmU9TWF0aC5taW4ocmUuY29sLGNlLmNvbCksRWU9TWF0aC5tYXgocmUuY29sLGNlLmNvbCk7aWYobC5yb3c8MCYmbC5jb2w+PWJlJiZsLmNvbDw9RWUpe2QuY29sdW1uPSEwLEtkKGc2LHRo''@;'; put 'put ''aXMsITApO2NvbnN0IEJlPWEuZmlyc3RDaGlsZD9hZmUoYyxhLmZpcnN0Q2hpbGQpLng6Yy5vZmZzZXRYO3phKGVkLHRoaXMpLmV2ZW50UGFnZVg9Yy5wYWdlWCxLZChKMix0aGlzLGwuY29sKSx6YShlZCx0aGlzKS5URD1hLHphKGVkLHRoaXMpLmNvbD1sLmNvbCxLZChqZyx0aGlzLHRoaXMu''@;'; put 'put ''cHJlcGFyZUNvbHVtbnNUb01vdmluZyhiZSxFZSkpLEtkKGNILHRoaXMsISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpLnJvd0hlYWRlcnMpLEtkKHNILHRoaXMsdGhpcy5ob3QuY291bnRDb2xzKCkpLEtkKGFBLHRoaXMsdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5maXhlZENvbHVtbnNTdGFydCks''@;'; put 'put ''S2QodXcsdGhpcyxVMCh0aGlzLmhvdC5yb290RWxlbWVudCkubGVmdCk7Y29uc3QgcWU9emEoY0gsdGhpcyk/LTE6MCxydD1oLmhvbGRlci5zY3JvbGxUb3AraC5nZXRDb2x1bW5IZWFkZXJIZWlnaHQoMCkrMSxwdD1sLmNvbDx6YShhQSx0aGlzKSxkdD10aGlzLmhvdC52aWV3Ll93dC53dE92''@;'; put 'put ''ZXJsYXlzLmlubGluZVN0YXJ0T3ZlcmxheS5nZXRPdmVybGF5T2Zmc2V0KCksSnQ9TWF0aC5hYnMoQmUtKHRoaXMuaG90LmlzUnRsKCk/YS5vZmZzZXRXaWR0aDowKSksdm49dGhpcy5nZXRDb2x1bW5zV2lkdGgoYmUsbC5jb2wtMSkrSnQsQ249dGhpcy5nZXRDb2x1bW5zV2lkdGgocWUsYmUt''@;'; put 'put ''MSkrKHB0P2R0OjApK3ZuO3phKFExLHRoaXMpLnNldFBvc2l0aW9uKHJ0LENuKSx6YShRMSx0aGlzKS5zZXRTaXplKHRoaXMuZ2V0Q29sdW1uc1dpZHRoKGJlLEVlKSxoLmhpZGVyLm9mZnNldEhlaWdodC1ydCksemEoUTEsdGhpcykuc2V0T2Zmc2V0KG51bGwsLXZuKSxUaSh0aGlzLmhvdC5y''@;'; put 'put ''b290RWxlbWVudCxCUSl9ZWxzZSBsbyh0aGlzLmhvdC5yb290RWxlbWVudCxqUSksS2QoZzYsdGhpcywhMSksemEoamcsdGhpcykubGVuZ3RoPTB9ZnVuY3Rpb24gemZ0KGMpe3phKGc2LHRoaXMpJiYoemEoZWQsdGhpcykuZXZlbnRQYWdlWD1jLnBhZ2VYLHRoaXMucmVmcmVzaFBvc2l0aW9u''@;'; put 'put ''cygpKX1mdW5jdGlvbiBVZnQoYyxsLGEsZCl7IXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCl8fCF6YShnNix0aGlzKXx8KHphKGpnLHRoaXMpLmluZGV4T2YobC5jb2wpPi0xP2xvKHRoaXMuaG90LnJvb3RFbGVtZW50LG9IKTpUaSh0aGlzLmhvdC5yb290RWxlbWVudCxvSCksZC5y''@;'; put 'put ''b3c9ITAsZC5jb2x1bW49ITAsZC5jZWxsPSEwLEtkKEoyLHRoaXMsbC5jb2wpLHphKGVkLHRoaXMpLlREPWEpfWZ1bmN0aW9uIFpmdCgpe2NvbnN0IGM9emEoZWQsdGhpcykuY29sLGw9emEoamcsdGhpcykubGVuZ3RoO2lmKEtkKEoyLHRoaXMsdm9pZCAwKSxLZChnNix0aGlzLCExKSxsbyh0''@;'; put 'put ''aGlzLmhvdC5yb290RWxlbWVudCxbQlEsb0gsalFdKSx0aGlzLmhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCkmJlRpKHRoaXMuaG90LnJvb3RFbGVtZW50LGpRKSxsPDF8fHZvaWQgMD09PWMpcmV0dXJuO2NvbnN0IGE9emEoamcsdGhpcylbMF0sZD10aGlzLmhvdC50''@;'; put 'put ''b1BoeXNpY2FsQ29sdW1uKGEpLGg9dGhpcy5kcmFnQ29sdW1ucyh6YShqZyx0aGlzKSxjKTtpZih6YShqZyx0aGlzKS5sZW5ndGg9MCwhMD09PWgpe3RoaXMucGVyc2lzdGVudFN0YXRlU2F2ZSgpLHRoaXMuaG90LnJlbmRlcigpLHRoaXMuaG90LnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCk7''@;'; put 'put ''Y29uc3QgZj10aGlzLmhvdC50b1Zpc3VhbENvbHVtbihkKTt0aGlzLmhvdC5zZWxlY3RDb2x1bW5zKGYsZitsLTEpfX1mdW5jdGlvbiBXZnQoKXtjb25zdCBjPXRoaXMuaG90LnZpZXcuX3d0Lnd0VGFibGUsZD1jLmdldENvbHVtbkhlYWRlckhlaWdodCgwKSsxK2MuaG9sZGVyLnNjcm9sbFRv''@;'; put 'put ''cDt6YShRMSx0aGlzKS5zZXRQb3NpdGlvbihkKSx6YShRMSx0aGlzKS5zZXRTaXplKG51bGwsYy5oaWRlci5vZmZzZXRIZWlnaHQtZCl9ZnVuY3Rpb24gWWZ0KCl7dGhpcy5tb3ZlQnlTZXR0aW5nc09yTG9hZCgpfWZ1bmN0aW9uIEMxKGMsbCxhKXtjbWUoYyxsKSxsLnNldChjLGEpfWZ1bmN0''@;'; put 'put ''aW9uIGNtZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gZHUoYyxsLGEpe3JldHVybiBjLnNldCh5MyhjLGwpLGEpLGF9ZnVuY3Rpb24g''@;'; put 'put ''RWEoYyxsKXtyZXR1cm4gYy5nZXQoeTMoYyxsKSl9ZnVuY3Rpb24geTMoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJl''@;'; put 'put ''c2VudCBvbiB0aGlzIG9iamVjdCIpfWNvbnN0IHVIPSJtYW51YWxDb2x1bW5SZXNpemUiLHVtZT0ibWFudWFsQ29sdW1uV2lkdGhzIjt2YXIgemc9bmV3IFdlYWtNYXAsZEg9bmV3IFdlYWtNYXAsQmg9bmV3IFdlYWtNYXAsaEg9bmV3IFdlYWtNYXAsWXA9bmV3IFdlYWtNYXAsS2Z0PW5ldyBX''@;'; put 'put ''ZWFrTWFwLGR3PW5ldyBXZWFrTWFwLGZIPW5ldyBXZWFrTWFwLHFkPW5ldyBXZWFrTWFwLFVnPW5ldyBXZWFrTWFwLEY5PW5ldyBXZWFrTWFwLHBIPW5ldyBXZWFrTWFwLG9BPW5ldyBXZWFrTWFwLHNBPW5ldyBXZWFrTWFwLGpoPW5ldyBXZWFrTWFwLGxBPW5ldyBXZWFrTWFwLEdwPW5ldyBX''@;'; put 'put ''ZWFrU2V0O2NsYXNzIHFmdCBleHRlbmRzIEZze3N0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiB1SH1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAxMzB9Y29uc3RydWN0b3IobCl7c3VwZXIobCksZnVuY3Rpb24gR2Z0KGMsbCl7Y21lKGMsbCksbC5hZGQoYyl9KHRo''@;'; put 'put ''aXMsR3ApLEMxKHRoaXMsemcsbnVsbCksQzEodGhpcyxkSCxudWxsKSxDMSh0aGlzLEJoLFtdKSxDMSh0aGlzLGhILG51bGwpLEMxKHRoaXMsWXAsbnVsbCksQzEodGhpcyxLZnQsbnVsbCksQzEodGhpcyxkdyxudWxsKSxDMSh0aGlzLGZILG51bGwpLEMxKHRoaXMscWQsdGhpcy5ob3Qucm9v''@;'; put 'put ''dERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpKSxDMSh0aGlzLFVnLHRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYiKSksQzEodGhpcyxGOSxudWxsKSxDMSh0aGlzLHBILCExKSxDMSh0aGlzLG9BLDApLEMxKHRoaXMsc0EsbnVsbCksQzEodGhpcyxqaCx2b2lk''@;'; put 'put ''IDApLEMxKHRoaXMsbEEsdm9pZCAwKSxUaShFYShxZCx0aGlzKSwibWFudWFsQ29sdW1uUmVzaXplciIpLFRpKEVhKFVnLHRoaXMpLCJtYW51YWxDb2x1bW5SZXNpemVyR3VpZGUiKX1nZXQgaW5saW5lRGlyKCl7cmV0dXJuIHRoaXMuaG90LmlzUnRsKCk/InJpZ2h0IjoibGVmdCJ9aXNFbmFi''@;'; put 'put ''bGVkKCl7cmV0dXJuIHRoaXMuaG90LmdldFNldHRpbmdzKClbdUhdfWVuYWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7dGhpcy5lbmFibGVkfHwoZHUoamgsdGhpcyxuZXcgWm0pLEVhKGpoLHRoaXMpLmFkZExvY2FsSG9vaygiaW5pdCIsKCk9PnkzKEdwLHRoaXMsWGZ0KS5jYWxsKHRoaXMpKSx0''@;'; put 'put ''aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5yZWdpc3Rlck1hcCh0aGlzLnBsdWdpbk5hbWUsRWEoamgsdGhpcykpLHRoaXMuYWRkSG9vaygibW9kaWZ5Q29sV2lkdGgiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFto''@;'; put 'put ''XT1hcmd1bWVudHNbaF07cmV0dXJuIHkzKEdwLGwscjN0KS5jYWxsKGwsLi4uZCl9LDEpLHRoaXMuYWRkSG9vaygiYmVmb3JlU3RyZXRjaGluZ0NvbHVtbldpZHRoIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09''@;'; put 'put ''YXJndW1lbnRzW2hdO3JldHVybiB5MyhHcCxsLGkzdCkuY2FsbChsLC4uLmQpfSwxKSx0aGlzLmFkZEhvb2soImJlZm9yZUNvbHVtblJlc2l6ZSIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1to''@;'; put 'put ''XTtyZXR1cm4geTMoR3AsbCxhM3QpLmNhbGwobCwuLi5kKX0pLHRoaXMuYmluZEV2ZW50cygpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdpbigpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWRpc2FibGVQbHVn''@;'; put 'put ''aW4oKXtkdShsQSx0aGlzLEVhKGpoLHRoaXMpLmdldFZhbHVlcygpKSx0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci51bnJlZ2lzdGVyTWFwKHRoaXMucGx1Z2luTmFtZSksc3VwZXIuZGlzYWJsZVBsdWdpbigpfXNhdmVNYW51YWxDb2x1bW5XaWR0aHMoKXt0aGlzLmhvdC5ydW5Ib29rcygi''@;'; put 'put ''cGVyc2lzdGVudFN0YXRlU2F2ZSIsdW1lLEVhKGpoLHRoaXMpLmdldFZhbHVlcygpKX1sb2FkTWFudWFsQ29sdW1uV2lkdGhzKCl7Y29uc3QgbD17fTtyZXR1cm4gdGhpcy5ob3QucnVuSG9va3MoInBlcnNpc3RlbnRTdGF0ZUxvYWQiLHVtZSxsKSxsLnZhbHVlfXNldE1hbnVhbFNpemUobCxh''@;'; put 'put ''KXtjb25zdCBkPU1hdGgubWF4KGEsMjApLGg9dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihsKTtyZXR1cm4gRWEoamgsdGhpcykuc2V0VmFsdWVBdEluZGV4KGgsZCksZH1jbGVhck1hbnVhbFNpemUobCl7Y29uc3QgYT10aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGwpO0VhKGpoLHRoaXMp''@;'; put 'put ''LnNldFZhbHVlQXRJbmRleChhLG51bGwpfXNldHVwSGFuZGxlUG9zaXRpb24obCl7aWYoIWwucGFyZW50Tm9kZSlyZXR1cm47ZHUoemcsdGhpcyxsKTtjb25zdHtfd3Q6YX09dGhpcy5ob3QudmlldyxkPWEud3RUYWJsZS5nZXRDb29yZHMoRWEoemcsdGhpcykpLGg9ZC5jb2w7aWYoaDwwKXJl''@;'; put 'put ''dHVybjtjb25zdCBmPXh1KEVhKHpnLHRoaXMpKSx2PUVhKHpnLHRoaXMpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2xldCBEO2g8YS5nZXRTZXR0aW5nKCJmaXhlZENvbHVtbnNTdGFydCIpJiYoRD1hLnd0T3ZlcmxheXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LmdldFJlbGF0aXZl''@;'; put 'put ''Q2VsbFBvc2l0aW9uKEVhKHpnLHRoaXMpLGQucm93LGQuY29sKSksRHx8KEQ9YS53dE92ZXJsYXlzLnRvcE92ZXJsYXkuZ2V0UmVsYXRpdmVDZWxsUG9zaXRpb24oRWEoemcsdGhpcyksZC5yb3csZC5jb2wpKSxkdShkSCx0aGlzLHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldFZpc3Vh''@;'; put 'put ''bEZyb21SZW5kZXJhYmxlSW5kZXgoaCkpLGR1KEJoLHRoaXMsW10pO2NvbnN0IFo9dGhpcy5ob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpfHx0aGlzLmhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCk7dGhpcy5ob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWQo''@;'; put 'put ''KSYmWiYmWW4odGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZSgpLGNlPT57R2EoY2UuZ2V0VG9wU3RhcnRDb3JuZXIoKS5jb2wsY2UuZ2V0Qm90dG9tRW5kQ29ybmVyKCkuY29sLEJlPT57RWEoQmgsdGhpcykuaW5jbHVkZXMoQmUpfHxFYShCaCx0aGlzKS5wdXNoKEJlKX0pfSksRWEoQmgsdGhp''@;'; put 'put ''cykuaW5jbHVkZXMoRWEoZEgsdGhpcykpfHxkdShCaCx0aGlzLFtFYShkSCx0aGlzKV0pLGR1KGZILHRoaXMsRC5zdGFydC02KSxkdShkdyx0aGlzLHBhcnNlSW50KHYud2lkdGgsMTApKSxFYShxZCx0aGlzKS5zdHlsZS50b3A9YCR7RC50b3B9cHhgLEVhKHFkLHRoaXMpLnN0eWxlW3RoaXMu''@;'; put 'put ''aW5saW5lRGlyXT1gJHtFYShmSCx0aGlzKStFYShkdyx0aGlzKX1weGAsRWEocWQsdGhpcykuc3R5bGUuaGVpZ2h0PWAke2Z9cHhgLHRoaXMuaG90LnJvb3RFbGVtZW50LmFwcGVuZENoaWxkKEVhKHFkLHRoaXMpKX1yZWZyZXNoSGFuZGxlUG9zaXRpb24oKXtFYShxZCx0aGlzKS5zdHlsZVt0''@;'; put 'put ''aGlzLmlubGluZURpcl09YCR7RWEoZkgsdGhpcykrRWEoaEgsdGhpcyl9cHhgfXNldHVwR3VpZGVQb3NpdGlvbigpe2NvbnN0IGw9cGFyc2VJbnQoeHUoRWEocWQsdGhpcykpLDEwKSxhPXBhcnNlSW50KEVhKHFkLHRoaXMpLnN0eWxlLnRvcCwxMCkrbCxkPXRoaXMuaG90LnZpZXcuZ2V0VGFi''@;'; put 'put ''bGVIZWlnaHQoKTtUaShFYShxZCx0aGlzKSwiYWN0aXZlIiksVGkoRWEoVWcsdGhpcyksImFjdGl2ZSIpLEVhKFVnLHRoaXMpLnN0eWxlLnRvcD1gJHthfXB4YCx0aGlzLnJlZnJlc2hHdWlkZVBvc2l0aW9uKCksRWEoVWcsdGhpcykuc3R5bGUuaGVpZ2h0PWQtbCsicHgiLHRoaXMuaG90LnJv''@;'; put 'put ''b3RFbGVtZW50LmFwcGVuZENoaWxkKEVhKFVnLHRoaXMpKX1yZWZyZXNoR3VpZGVQb3NpdGlvbigpe0VhKFVnLHRoaXMpLnN0eWxlW3RoaXMuaW5saW5lRGlyXT1FYShxZCx0aGlzKS5zdHlsZVt0aGlzLmlubGluZURpcl19aGlkZUhhbmRsZUFuZEd1aWRlKCl7bG8oRWEocWQsdGhpcyksImFj''@;'; put 'put ''dGl2ZSIpLGxvKEVhKFVnLHRoaXMpLCJhY3RpdmUiKX1jaGVja0lmQ29sdW1uSGVhZGVyKGwpe2NvbnN0IGE9Um0obCxbIlRIRUFEIl0sdGhpcy5ob3Qucm9vdEVsZW1lbnQpLHt0b3BPdmVybGF5OmQsdG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5Omh9PXRoaXMuaG90LnZpZXcuX3d0Lnd0''@;'; put 'put ''T3ZlcmxheXM7cmV0dXJuW2QuY2xvbmUud3RUYWJsZS5USEVBRCxoLmNsb25lLnd0VGFibGUuVEhFQURdLmluY2x1ZGVzKGEpfWdldENsb3Nlc3RUSFBhcmVudChsKXtyZXR1cm4iVEFCTEUiIT09bC50YWdOYW1lPyJUSCI9PT1sLnRhZ05hbWU/bDp0aGlzLmdldENsb3Nlc3RUSFBhcmVudChs''@;'; put 'put ''LnBhcmVudE5vZGUpOm51bGx9YWZ0ZXJNb3VzZURvd25UaW1lb3V0KCl7Y29uc3QgbD0oKT0+e3RoaXMuaG90LnJlbmRlcigpLHRoaXMuaG90LnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCl9LGE9KGQsaCk9Pntjb25zdCBmPXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVDb2x1bW5SZXNpemUi''@;'; put 'put ''LEVhKFlwLHRoaXMpLGQsITApO3ZvaWQgMCE9PWYmJmR1KFlwLHRoaXMsZiksdGhpcy5zZXRNYW51YWxTaXplKGQsRWEoWXAsdGhpcykpLHRoaXMuc2F2ZU1hbnVhbENvbHVtbldpZHRocygpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckNvbHVtblJlc2l6ZSIsRWEoWXAsdGhpcyksZCwhMCks''@;'; put 'put ''aCYmbCgpfTtFYShvQSx0aGlzKT49MiYmKEVhKEJoLHRoaXMpLmxlbmd0aD4xPyhZbihFYShCaCx0aGlzKSxoPT57YShoKX0pLGwoKSk6WW4oRWEoQmgsdGhpcyksaD0+e2EoaCwhMCl9KSksZHUob0EsdGhpcywwKSxkdShzQSx0aGlzLG51bGwpfWJpbmRFdmVudHMoKXtjb25zdHtyb290V2lu''@;'; put 'put ''ZG93Omwscm9vdEVsZW1lbnQ6YX09dGhpcy5ob3Q7dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihhLCJtb3VzZW92ZXIiLGQ9PnkzKEdwLHRoaXMsSmZ0KS5jYWxsKHRoaXMsZCkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoYSwibW91c2Vkb3duIixkPT55''@;'; put 'put ''MyhHcCx0aGlzLFFmdCkuY2FsbCh0aGlzLGQpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwsIm1vdXNlbW92ZSIsZD0+eTMoR3AsdGhpcyxlM3QpLmNhbGwodGhpcyxkKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLCJtb3VzZXVwIiwoKT0+eTMo''@;'; put 'put ''R3AsdGhpcyx0M3QpLmNhbGwodGhpcykpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoRWEocWQsdGhpcyksImNvbnRleHRtZW51IiwoKT0+eTMoR3AsdGhpcyxuM3QpLmNhbGwodGhpcykpfWRlc3Ryb3koKXtzdXBlci5kZXN0cm95KCl9fWZ1bmN0aW9uIFhmdCgpe2NvbnN0''@;'; put 'put ''IGM9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVt1SF0sbD10aGlzLmxvYWRNYW51YWxDb2x1bW5XaWR0aHMoKTt0eXBlb2YgbDwidSI/dGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9PntsLmZvckVhY2goKGEsZCk9PntFYShqaCx0aGlzKS5zZXRWYWx1ZUF0SW5kZXgoZCxhKX0pfSwhMCk6QXJy''@;'; put 'put ''YXkuaXNBcnJheShjKT8odGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9PntjLmZvckVhY2goKGEsZCk9PntFYShqaCx0aGlzKS5zZXRWYWx1ZUF0SW5kZXgoZCxhKX0pfSwhMCksZHUobEEsdGhpcyxjKSk6ITA9PT1jJiZBcnJheS5pc0FycmF5KEVhKGxBLHRoaXMpKSYmdGhpcy5ob3QuYmF0''@;'; put 'put ''Y2hFeGVjdXRpb24oKCk9PntFYShsQSx0aGlzKS5mb3JFYWNoKChhLGQpPT57RWEoamgsdGhpcykuc2V0VmFsdWVBdEluZGV4KGQsYSl9KX0sITApfWZ1bmN0aW9uIEpmdChjKXtpZighQSQoYy50YXJnZXQpJiYhMCE9PUVhKHBILHRoaXMpJiZ0aGlzLmNoZWNrSWZDb2x1bW5IZWFkZXIoYy50''@;'; put 'put ''YXJnZXQpKXtjb25zdCBsPXRoaXMuZ2V0Q2xvc2VzdFRIUGFyZW50KGMudGFyZ2V0KTtpZighbClyZXR1cm47Y29uc3QgYT1sLmdldEF0dHJpYnV0ZSgiY29sc3BhbiIpO2wmJihudWxsPT09YXx8IjEiPT09YSkmJihFYShGOSx0aGlzKXx8dGhpcy5zZXR1cEhhbmRsZVBvc2l0aW9uKGwpKX19''@;'; put 'put ''ZnVuY3Rpb24gUWZ0KGMpe2MudGFyZ2V0LnBhcmVudE5vZGU9PT10aGlzLmhvdC5yb290RWxlbWVudCYmcG8oYy50YXJnZXQsIm1hbnVhbENvbHVtblJlc2l6ZXIiKSYmKHRoaXMuc2V0dXBIYW5kbGVQb3NpdGlvbihFYSh6Zyx0aGlzKSksdGhpcy5zZXR1cEd1aWRlUG9zaXRpb24oKSxkdShG''@;'; put 'put ''OSx0aGlzLCEwKSxudWxsPT09RWEoc0EsdGhpcykmJihkdShzQSx0aGlzLHNldFRpbWVvdXQoKCk9PnRoaXMuYWZ0ZXJNb3VzZURvd25UaW1lb3V0KCksNTAwKSksdGhpcy5ob3QuX3JlZ2lzdGVyVGltZW91dChFYShzQSx0aGlzKSkpLGR1KG9BLHRoaXMsRWEob0EsdGhpcykrMSksdGhpcy5z''@;'; put 'put ''dGFydFg9Yy5wYWdlWCxkdShZcCx0aGlzLEVhKGR3LHRoaXMpKSl9ZnVuY3Rpb24gZTN0KGMpe2lmKEVhKEY5LHRoaXMpKXtjb25zdCBsPShjLnBhZ2VYLXRoaXMuc3RhcnRYKSp0aGlzLmhvdC5nZXREaXJlY3Rpb25GYWN0b3IoKTtkdShoSCx0aGlzLEVhKGR3LHRoaXMpK2wpLFluKEVhKEJo''@;'; put 'put ''LHRoaXMpLGE9PntkdShZcCx0aGlzLHRoaXMuc2V0TWFudWFsU2l6ZShhLEVhKGhILHRoaXMpKSl9KSx0aGlzLnJlZnJlc2hIYW5kbGVQb3NpdGlvbigpLHRoaXMucmVmcmVzaEd1aWRlUG9zaXRpb24oKX19ZnVuY3Rpb24gdDN0KCl7Y29uc3QgYz0oKT0+e3RoaXMuaG90LnJlbmRlcigpLHRo''@;'; put 'put ''aXMuaG90LnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCl9LGw9KGEsZCk9Pnt0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQ29sdW1uUmVzaXplIixFYShZcCx0aGlzKSxhLCExKSxkJiZjKCksdGhpcy5zYXZlTWFudWFsQ29sdW1uV2lkdGhzKCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyQ29s''@;'; put 'put ''dW1uUmVzaXplIixFYShZcCx0aGlzKSxhLCExKX07RWEoRjksdGhpcykmJih0aGlzLmhpZGVIYW5kbGVBbmRHdWlkZSgpLGR1KEY5LHRoaXMsITEpLEVhKFlwLHRoaXMpIT09RWEoZHcsdGhpcykmJihFYShCaCx0aGlzKS5sZW5ndGg+MT8oWW4oRWEoQmgsdGhpcyksZD0+e2woZCl9KSxjKCkp''@;'; put 'put ''OlluKEVhKEJoLHRoaXMpLGQ9PntsKGQsITApfSkpLHRoaXMuc2V0dXBIYW5kbGVQb3NpdGlvbihFYSh6Zyx0aGlzKSkpfWZ1bmN0aW9uIG4zdCgpe3RoaXMuaGlkZUhhbmRsZUFuZEd1aWRlKCksdGhpcy5ob3Qucm9vdEVsZW1lbnQucmVtb3ZlQ2hpbGQoRWEocWQsdGhpcykpLHRoaXMuaG90''@;'; put 'put ''LnJvb3RFbGVtZW50LnJlbW92ZUNoaWxkKEVhKFVnLHRoaXMpKSxkdShGOSx0aGlzLCExKSxkdShwSCx0aGlzLCEwKSx0aGlzLmhvdC5fcmVnaXN0ZXJJbW1lZGlhdGUoKCk9PntkdShwSCx0aGlzLCExKX0pfWZ1bmN0aW9uIHIzdChjLGwpe2xldCBhPWM7aWYodGhpcy5lbmFibGVkKXtjb25z''@;'; put 'put ''dCBkPXRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4obCksaD1FYShqaCx0aGlzKS5nZXRWYWx1ZUF0SW5kZXgoZCk7dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVt1SF0mJmgmJihhPWgpfXJldHVybiBhfWZ1bmN0aW9uIGkzdChjLGwpe2NvbnN0IGE9RWEoamgsdGhpcykuZ2V0VmFsdWVBdEluZGV4''@;'; put 'put ''KHRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4obCkpO3JldHVybiJudW1iZXIiPT10eXBlb2YgYT9hOmN9ZnVuY3Rpb24gYTN0KCl7dGhpcy5ob3Qudmlldy5fd3Qud3RWaWV3cG9ydC5yZXNldEhhc092ZXJzaXplZENvbHVtbkhlYWRlcnNNYXJrZWQoKX1mdW5jdGlvbiB6UShjLGwsYSl7cmV0''@;'; put 'put ''dXJuKGw9ZnVuY3Rpb24gbzN0KGMpe3ZhciBsPWZ1bmN0aW9uIHMzdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIh''@;'; put 'put ''PXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6''@;'; put 'put ''bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y29uc3QgaHc9InB4IixmbWU9Y2xhc3MgbDN0e2NvbnN0cnVjdG9yKGwpe3pRKHRoaXMsImhvdCIsdm9pZCAw''@;'; put 'put ''KSx6USh0aGlzLCJfZWxlbWVudCIsbnVsbCkselEodGhpcywic3RhdGUiLDApLHRoaXMuaG90PWx9YXBwZW5kVG8obCl7bC5hcHBlbmRDaGlsZCh0aGlzLl9lbGVtZW50KSx0aGlzLnN0YXRlPTJ9YnVpbGQoKXswPT09dGhpcy5zdGF0ZSYmKHRoaXMuX2VsZW1lbnQ9dGhpcy5ob3Qucm9vdERv''@;'; put 'put ''Y3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMuc3RhdGU9MSl9ZGVzdHJveSgpe3RoaXMuaXNBcHBlbmRlZCgpJiZ0aGlzLl9lbGVtZW50LnBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQodGhpcy5fZWxlbWVudCksdGhpcy5fZWxlbWVudD1udWxsLHRoaXMuc3RhdGU9MH1pc0FwcGVu''@;'; put 'put ''ZGVkKCl7cmV0dXJuIDI9PT10aGlzLnN0YXRlfWlzQnVpbHQoKXtyZXR1cm4gdGhpcy5zdGF0ZT49MX1zZXRQb3NpdGlvbihsLGEpe3ZvaWQgMCE9PWwmJih0aGlzLl9lbGVtZW50LnN0eWxlLnRvcD1sK2h3KSx2b2lkIDAhPT1hJiYodGhpcy5fZWxlbWVudC5zdHlsZS5sZWZ0PWEraHcpfWdl''@;'; put 'put ''dFBvc2l0aW9uKCl7cmV0dXJue3RvcDp0aGlzLl9lbGVtZW50LnN0eWxlLnRvcD9wYXJzZUludCh0aGlzLl9lbGVtZW50LnN0eWxlLnRvcCwxMCk6MCxsZWZ0OnRoaXMuX2VsZW1lbnQuc3R5bGUubGVmdD9wYXJzZUludCh0aGlzLl9lbGVtZW50LnN0eWxlLmxlZnQsMTApOjB9fXNldFNpemUo''@;'; put 'put ''bCxhKXtsJiYodGhpcy5fZWxlbWVudC5zdHlsZS53aWR0aD1sK2h3KSxhJiYodGhpcy5fZWxlbWVudC5zdHlsZS5oZWlnaHQ9YStodyl9Z2V0U2l6ZSgpe3JldHVybnt3aWR0aDp0aGlzLl9lbGVtZW50LnN0eWxlLndpZHRoP3BhcnNlSW50KHRoaXMuX2VsZW1lbnQuc3R5bGUud2lkdGgsMTAp''@;'; put 'put ''OjAsaGVpZ2h0OnRoaXMuX2VsZW1lbnQuc3R5bGUuaGVpZ2h0P3BhcnNlSW50KHRoaXMuX2VsZW1lbnQuc3R5bGUuaGVpZ2h0LDEwKTowfX1zZXRPZmZzZXQobCxhKXtsJiYodGhpcy5fZWxlbWVudC5zdHlsZS5tYXJnaW5Ub3A9bCtodyksYSYmKHRoaXMuX2VsZW1lbnQuc3R5bGUubWFyZ2lu''@;'; put 'put ''TGVmdD1hK2h3KX1nZXRPZmZzZXQoKXtyZXR1cm57dG9wOnRoaXMuX2VsZW1lbnQuc3R5bGUubWFyZ2luVG9wP3BhcnNlSW50KHRoaXMuX2VsZW1lbnQuc3R5bGUubWFyZ2luVG9wLDEwKTowLGxlZnQ6dGhpcy5fZWxlbWVudC5zdHlsZS5tYXJnaW5MZWZ0P3BhcnNlSW50KHRoaXMuX2VsZW1l''@;'; put 'put ''bnQuc3R5bGUubWFyZ2luTGVmdCwxMCk6MH19fSxkM3Q9Y2xhc3MgdTN0IGV4dGVuZHMgZm1le2J1aWxkKCl7c3VwZXIuYnVpbGQoKSxUaSh0aGlzLl9lbGVtZW50LCJodF9fbWFudWFsUm93TW92ZS0tYmFja2xpZ2h0Iil9fSxwM3Q9Y2xhc3MgZjN0IGV4dGVuZHMgZm1le2J1aWxkKCl7c3Vw''@;'; put 'put ''ZXIuYnVpbGQoKSxUaSh0aGlzLl9lbGVtZW50LCJodF9fbWFudWFsUm93TW92ZS0tZ3VpZGVsaW5lIil9fTtmdW5jdGlvbiBmdyhjLGwsYSl7cG1lKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBwbWUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlh''@;'; put 'put ''bGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIEg5KGMsbCxhKXtyZXR1cm4gYy5zZXQobTYoYyxsKSxhKSxhfWZ1bmN0aW9uIEZvKGMsbCl7cmV0dXJuIGMuZ2V0KG02KGMsbCkpfWZ1bmN0aW9uIG02KGMsbCxhKXtpZigiZnVuY3Rp''@;'; put 'put ''b24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1TYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVmb3JlUm93''@;'; put 'put ''TW92ZSIpLFNhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlclJvd01vdmUiKTtjb25zdCBaUT0ibWFudWFsUm93TW92ZSIsZ21lPSJodF9fbWFudWFsUm93TW92ZSIsZ0g9InNob3ctdWkiLFdRPSJvbi1tb3ZpbmctLXJvd3MiLFlRPSJhZnRlci1zZWxlY3Rpb24tLXJvd3MiO3ZhciB0''@;'; put 'put ''ZD1uZXcgV2Vha01hcCx2Nj1uZXcgV2Vha01hcCxaZz1uZXcgV2Vha01hcCxiNj1uZXcgV2Vha01hcCxYZD1uZXcgV2Vha01hcCxtSD1uZXcgV2Vha01hcCxOOT1uZXcgV2Vha1NldDtjbGFzcyB2M3QgZXh0ZW5kcyBGc3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rp''@;'; put 'put ''b24gZzN0KGMsbCl7cG1lKGMsbCksbC5hZGQoYyl9KHRoaXMsTjkpLGZ3KHRoaXMsdGQsbmV3IGQzdCh0aGlzLmhvdCkpLGZ3KHRoaXMsdjYsbmV3IHAzdCh0aGlzLmhvdCkpLGZ3KHRoaXMsWmcsW10pLGZ3KHRoaXMsYjYsdm9pZCAwKSxmdyh0aGlzLFhkLHt9KSxmdyh0aGlzLG1ILHZvaWQg''@;'; put 'put ''MCl9c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIFpRfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDE0MH1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbWlFdfWVuYWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7dGhpcy5lbmFibGVkfHwo''@;'; put 'put ''dGhpcy5hZGRIb29rKCJiZWZvcmVPbkNlbGxNb3VzZURvd24iLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIG02KE45LGwsYjN0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhv''@;'; put 'put ''b2soImJlZm9yZU9uQ2VsbE1vdXNlT3ZlciIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gbTYoTjksbCxfM3QpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJT''@;'; put 'put ''Y3JvbGxIb3Jpem9udGFsbHkiLCgpPT5tNihOOSx0aGlzLEMzdCkuY2FsbCh0aGlzKSksdGhpcy5hZGRIb29rKCJhZnRlckxvYWREYXRhIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3Jl''@;'; put 'put ''dHVybiBtNihOOSxsLFMzdCkuY2FsbChsLC4uLmQpfSksdGhpcy5idWlsZFBsdWdpblVJKCksdGhpcy5yZWdpc3RlckV2ZW50cygpLFRpKHRoaXMuaG90LnJvb3RFbGVtZW50LGdtZSksc3VwZXIuZW5hYmxlUGx1Z2luKCkpfXVwZGF0ZVBsdWdpbigpe3RoaXMuZGlzYWJsZVBsdWdpbigpLHRo''@;'; put 'put ''aXMuZW5hYmxlUGx1Z2luKCksdGhpcy5tb3ZlQnlTZXR0aW5nc09yTG9hZCgpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXtsbyh0aGlzLmhvdC5yb290RWxlbWVudCxnbWUpLHRoaXMudW5yZWdpc3RlckV2ZW50cygpLEZvKHRkLHRoaXMpLmRlc3Ryb3koKSxGbyh2Nix0''@;'; put 'put ''aGlzKS5kZXN0cm95KCksc3VwZXIuZGlzYWJsZVBsdWdpbigpfW1vdmVSb3cobCxhKXtyZXR1cm4gdGhpcy5tb3ZlUm93cyhbbF0sYSl9bW92ZVJvd3MobCxhKXtjb25zdCBkPUZvKG1ILHRoaXMpLGg9dGhpcy5pc01vdmVQb3NzaWJsZShsLGEpLGY9dGhpcy5ob3QucnVuSG9va3MoImJlZm9y''@;'; put 'put ''ZVJvd01vdmUiLGwsYSxkLGgpO2lmKEg5KG1ILHRoaXMsdm9pZCAwKSwhMT09PWYpcmV0dXJuO2gmJnRoaXMuaG90LnJvd0luZGV4TWFwcGVyLm1vdmVJbmRleGVzKGwsYSk7Y29uc3Qgdj1oJiZ0aGlzLmlzUm93T3JkZXJDaGFuZ2VkKGwsYSk7cmV0dXJuIHRoaXMuaG90LnJ1bkhvb2tzKCJh''@;'; put 'put ''ZnRlclJvd01vdmUiLGwsYSxkLGgsdiksdn1kcmFnUm93KGwsYSl7cmV0dXJuIHRoaXMuZHJhZ1Jvd3MoW2xdLGEpfWRyYWdSb3dzKGwsYSl7Y29uc3QgZD10aGlzLmNvdW50RmluYWxJbmRleChsLGEpO3JldHVybiBIOShtSCx0aGlzLGEpLHRoaXMubW92ZVJvd3MobCxkKX1pc01vdmVQb3Nz''@;'; put 'put ''aWJsZShsLGEpe2NvbnN0IGQ9dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0Tm90VHJpbW1lZEluZGV4ZXNMZW5ndGgoKSxoPWwubGVuZ3RoK2E+ZCxmPWE8MCx2PWwuc29tZShEPT5EPDApLE09bC5zb21lKEQ9PkQ+PWQpO3JldHVybiEoaHx8Znx8dnx8TSl9aXNSb3dPcmRlckNoYW5nZWQo''@;'; put 'put ''bCxhKXtyZXR1cm4gbC5zb21lKChkLGgpPT5kLWghPT1hKX1jb3VudEZpbmFsSW5kZXgobCxhKXtjb25zdCBkPXF1KGwsKGgsZik9PihmPGEmJihoKz0xKSxoKSwwKTtyZXR1cm4gYS1kfWdldFJvd3NIZWlnaHQobCxhKXtjb25zdCBkPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyO2xldCBoPTA7''@;'; put 'put ''Zm9yKGxldCBmPWw7Zjw9YTtmKyspe2NvbnN0IHY9ZC5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGYpO251bGwhPT12JiYoaCs9dGhpcy5ob3Qudmlldy5fd3Qud3RUYWJsZS5nZXRSb3dIZWlnaHQodil8fHRoaXMuaG90LnZpZXcuZ2V0RGVmYXVsdFJvd0hlaWdodCgpKX1yZXR1cm4g''@;'; put 'put ''aH1tb3ZlQnlTZXR0aW5nc09yTG9hZCgpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtaUV07aWYoQXJyYXkuaXNBcnJheShsKSl0aGlzLm1vdmVSb3dzKGwsMCk7ZWxzZSBpZih2b2lkIDAhPT1sKXtjb25zdCBhPXRoaXMucGVyc2lzdGVudFN0YXRlTG9hZCgpO2EubGVuZ3RoJiZ0''@;'; put 'put ''aGlzLm1vdmVSb3dzKGEsMCl9fWlzRml4ZWRSb3dUb3AobCl7cmV0dXJuIGw8dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5maXhlZFJvd3NUb3B9aXNGaXhlZFJvd0JvdHRvbShsKXtyZXR1cm4gbD50aGlzLmhvdC5jb3VudFJvd3MoKS0xLXRoaXMuaG90LmdldFNldHRpbmdzKCkuZml4ZWRSb3dz''@;'; put 'put ''Qm90dG9tfXBlcnNpc3RlbnRTdGF0ZVNhdmUoKXt0aGlzLmhvdC5ydW5Ib29rcygicGVyc2lzdGVudFN0YXRlU2F2ZSIsIm1hbnVhbFJvd01vdmUiLHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldEluZGV4ZXNTZXF1ZW5jZSgpKX1wZXJzaXN0ZW50U3RhdGVMb2FkKCl7Y29uc3QgbD17fTty''@;'; put 'put ''ZXR1cm4gdGhpcy5ob3QucnVuSG9va3MoInBlcnNpc3RlbnRTdGF0ZUxvYWQiLCJtYW51YWxSb3dNb3ZlIixsKSxsLnZhbHVlP2wudmFsdWU6W119cHJlcGFyZVJvd3NUb01vdmluZygpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxhPVtdO2lmKCFsKXJldHVybiBh''@;'; put 'put ''O2NvbnN0e2Zyb206ZCx0bzpofT1sO3JldHVybiBHYShNYXRoLm1pbihkLnJvdyxoLnJvdyksTWF0aC5tYXgoZC5yb3csaC5yb3cpLE09PnthLnB1c2goTSl9KSxhfXJlZnJlc2hQb3NpdGlvbnMoKXtjb25zdCBsPUZvKFhkLHRoaXMpLmNvb3JkcyxhPXRoaXMuaG90LmdldEZpcnN0RnVsbHlW''@;'; put 'put ''aXNpYmxlUm93KCksZD10aGlzLmhvdC5nZXRMYXN0RnVsbHlWaXNpYmxlUm93KCksaD10aGlzLmhvdC5jb3VudFJvd3MoKTt0aGlzLmlzRml4ZWRSb3dUb3AobC5yb3cpJiZhPjAmJnRoaXMuaG90LnNjcm9sbFZpZXdwb3J0VG8odGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5v''@;'; put 'put ''dEhpZGRlbkluZGV4KGEtMSwtMSkpLHRoaXMuaXNGaXhlZFJvd0JvdHRvbShsLnJvdykmJmQ8aCYmdGhpcy5ob3Quc2Nyb2xsVmlld3BvcnRUbyh0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoZCsxLDEpLHZvaWQgMCwhMCk7Y29uc3QgZj10aGlzLmhv''@;'; put 'put ''dC52aWV3Ll93dC53dFRhYmxlLHY9Rm8oWGQsdGhpcykuVEQsTT10aGlzLmhvdC5yb290RWxlbWVudCxEPVUwKE0pLFo9YV8oTSkscmU9Zi5ob2xkZXIuc2Nyb2xsVG9wLGJlPUQudG9wLSh0aGlzLmhvdC5yb290V2luZG93IT09Wj9aLnNjcm9sbFRvcDowKSxFZT1GbyhYZCx0aGlzKS5ldmVu''@;'; put 'put ''dFBhZ2VZLWJlK3JlLEJlPWYuaGlkZXIub2Zmc2V0SGVpZ2h0LHFlPWYuVEJPRFkub2Zmc2V0VG9wLHJ0PUZvKHRkLHRoaXMpLmdldE9mZnNldCgpLnRvcCxwdD1Gbyh0ZCx0aGlzKS5nZXRTaXplKCkuaGVpZ2h0LGR0PXYub2Zmc2V0SGVpZ2h0LzIsSnQ9di5vZmZzZXRIZWlnaHQ7bGV0IHZu''@;'; put 'put ''PXRoaXMuaG90LnZpZXcuVEhFQUQub2Zmc2V0SGVpZ2h0K3RoaXMuZ2V0Um93c0hlaWdodCgwLGwucm93LTEpO2NvbnN0IENuPUVlPj12bitkdDt0aGlzLmlzRml4ZWRSb3dUb3AobC5yb3cpJiYodm4rPXRoaXMuaG90LnZpZXcuX3d0Lnd0T3ZlcmxheXMudG9wT3ZlcmxheS5nZXRPdmVybGF5''@;'; put 'put ''T2Zmc2V0KCkpLGwucm93PDA/Rm8oWGQsdGhpcykucm93PWE+MD9hLTE6YTpDbj8oRm8oWGQsdGhpcykucm93PWwucm93KzEsdm4rPTA9PT1sLnJvdz9KdC0xOkp0KTpGbyhYZCx0aGlzKS5yb3c9bC5yb3c7bGV0IHRuPUVlLE1uPXZuO0VlK3B0K3J0Pj1CZT90bj1CZS1wdC1ydDpFZStydDxx''@;'; put 'put ''ZSYmKHRuPXFlK01hdGguYWJzKHJ0KSksdm4+PUJlLTEmJihNbj1CZS0xKSxGbyh0ZCx0aGlzKS5zZXRQb3NpdGlvbih0biksRm8odjYsdGhpcykuc2V0UG9zaXRpb24oTW4pfXJlZ2lzdGVyRXZlbnRzKCl7Y29uc3R7ZG9jdW1lbnRFbGVtZW50Omx9PXRoaXMuaG90LnJvb3REb2N1bWVudDt0''@;'; put 'put ''aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwsIm1vdXNlbW92ZSIsYT0+bTYoTjksdGhpcyx5M3QpLmNhbGwodGhpcyxhKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLCJtb3VzZXVwIiwoKT0+bTYoTjksdGhpcyx3M3QpLmNhbGwodGhpcykpfXVucmVn''@;'; put 'put ''aXN0ZXJFdmVudHMoKXt0aGlzLmV2ZW50TWFuYWdlci5jbGVhcigpfWJ1aWxkUGx1Z2luVUkoKXtGbyh0ZCx0aGlzKS5idWlsZCgpLEZvKHY2LHRoaXMpLmJ1aWxkKCl9ZGVzdHJveSgpe0ZvKHRkLHRoaXMpLmRlc3Ryb3koKSxGbyh2Nix0aGlzKS5kZXN0cm95KCksc3VwZXIuZGVzdHJveSgp''@;'; put 'put ''fX1mdW5jdGlvbiBiM3QoYyxsLGEsZCl7Y29uc3R7d3RUYWJsZTpoLHd0Vmlld3BvcnQ6Zn09dGhpcy5ob3Qudmlldy5fd3Qsdj10aGlzLmhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCksTT10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO2lmKCFNfHwhdnx8Rm8o''@;'; put 'put ''YjYsdGhpcyl8fDAhPT1jLmJ1dHRvbilyZXR1cm4gSDkoYjYsdGhpcywhMSksRm8oWmcsdGhpcykubGVuZ3RoPTAsdm9pZCBsbyh0aGlzLmhvdC5yb290RWxlbWVudCxbV1EsZ0hdKTtjb25zdCBEPUZvKHY2LHRoaXMpLmlzQnVpbHQoKSYmIUZvKHY2LHRoaXMpLmlzQXBwZW5kZWQoKSxaPUZv''@;'; put 'put ''KHRkLHRoaXMpLmlzQnVpbHQoKSYmIUZvKHRkLHRoaXMpLmlzQXBwZW5kZWQoKTtEJiZaJiYoRm8odjYsdGhpcykuYXBwZW5kVG8oaC5oaWRlciksRm8odGQsdGhpcykuYXBwZW5kVG8oaC5oaWRlcikpO2NvbnN0e2Zyb206cmUsdG86Y2V9PU0sYmU9TWF0aC5taW4ocmUucm93LGNlLnJvdyks''@;'; put 'put ''RWU9TWF0aC5tYXgocmUucm93LGNlLnJvdyk7aWYobC5jb2w8MCYmbC5yb3c+PWJlJiZsLnJvdzw9RWUpe2Qucm93PSEwLEg5KGI2LHRoaXMsITApLEZvKFhkLHRoaXMpLmV2ZW50UGFnZVk9Yy5wYWdlWSxGbyhYZCx0aGlzKS5jb29yZHM9bCxGbyhYZCx0aGlzKS5URD1hLEg5KFpnLHRoaXMs''@;'; put 'put ''dGhpcy5wcmVwYXJlUm93c1RvTW92aW5nKCkpO2NvbnN0IEJlPWguaG9sZGVyLnNjcm9sbExlZnQrZi5nZXRSb3dIZWFkZXJXaWR0aCgpLHFlPXRoaXMuZ2V0Um93c0hlaWdodChiZSxsLnJvdy0xKSsoYy5jbGllbnRZLWEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wKTtGbyh0ZCx0aGlz''@;'; put 'put ''KS5zZXRQb3NpdGlvbihudWxsLEJlKSxGbyh0ZCx0aGlzKS5zZXRTaXplKGguaGlkZXIub2Zmc2V0V2lkdGgtQmUsdGhpcy5nZXRSb3dzSGVpZ2h0KGJlLEVlKSksRm8odGQsdGhpcykuc2V0T2Zmc2V0KC1xZSxudWxsKSxUaSh0aGlzLmhvdC5yb290RWxlbWVudCxXUSksdGhpcy5yZWZyZXNo''@;'; put 'put ''UG9zaXRpb25zKCl9ZWxzZSBsbyh0aGlzLmhvdC5yb290RWxlbWVudCxZUSksSDkoYjYsdGhpcywhMSksRm8oWmcsdGhpcykubGVuZ3RoPTB9ZnVuY3Rpb24geTN0KGMpe0ZvKGI2LHRoaXMpJiYoRm8oWGQsdGhpcykuZXZlbnRQYWdlWT1jLnBhZ2VZLHRoaXMucmVmcmVzaFBvc2l0aW9ucygp''@;'; put 'put ''KX1mdW5jdGlvbiBfM3QoYyxsLGEsZCl7IXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCl8fCFGbyhiNix0aGlzKXx8KEZvKFpnLHRoaXMpLmluZGV4T2YobC5yb3cpPi0xP2xvKHRoaXMuaG90LnJvb3RFbGVtZW50LGdIKTpUaSh0aGlzLmhvdC5yb290RWxlbWVudCxnSCksZC5yb3c9''@;'; put 'put ''ITAsZC5jb2x1bW49ITAsZC5jZWxsPSEwLEZvKFhkLHRoaXMpLmNvb3Jkcz1sLEZvKFhkLHRoaXMpLlREPWEpfWZ1bmN0aW9uIHczdCgpe2NvbnN0IGM9Rm8oWGQsdGhpcykucm93LGw9Rm8oWmcsdGhpcykubGVuZ3RoO2lmKEg5KGI2LHRoaXMsITEpLGxvKHRoaXMuaG90LnJvb3RFbGVtZW50''@;'; put 'put ''LFtXUSxnSCxZUV0pLHRoaXMuaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKSYmVGkodGhpcy5ob3Qucm9vdEVsZW1lbnQsWVEpLGw8MXx8dm9pZCAwPT09YylyZXR1cm47Y29uc3QgYT1GbyhaZyx0aGlzKVswXSxkPXRoaXMuaG90LnRvUGh5c2ljYWxSb3coYSksaD10aGlz''@;'; put 'put ''LmRyYWdSb3dzKEZvKFpnLHRoaXMpLGMpO2lmKEZvKFpnLHRoaXMpLmxlbmd0aD0wLCEwPT09aCl7dGhpcy5wZXJzaXN0ZW50U3RhdGVTYXZlKCksdGhpcy5ob3QucmVuZGVyKCksdGhpcy5ob3Qudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKTtjb25zdCBmPXRoaXMuaG90LnRvVmlzdWFsUm93''@;'; put 'put ''KGQpO3RoaXMuaG90LnNlbGVjdFJvd3MoZixmK2wtMSl9fWZ1bmN0aW9uIEMzdCgpe2NvbnN0IGM9dGhpcy5ob3Qudmlldy5fd3Qud3RUYWJsZSxkPXRoaXMuaG90LnZpZXcuX3d0Lnd0Vmlld3BvcnQuZ2V0Um93SGVhZGVyV2lkdGgoKStjLmhvbGRlci5zY3JvbGxMZWZ0O0ZvKHRkLHRoaXMp''@;'; put 'put ''LnNldFBvc2l0aW9uKG51bGwsZCksRm8odGQsdGhpcykuc2V0U2l6ZShjLmhpZGVyLm9mZnNldFdpZHRoLWQpfWZ1bmN0aW9uIFMzdCgpe3RoaXMubW92ZUJ5U2V0dGluZ3NPckxvYWQoKX1mdW5jdGlvbiBTMShjLGwsYSl7bW1lKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBtbWUoYyxsKXtp''@;'; put 'put ''ZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIEtjKGMsbCxhKXtyZXR1cm4gYy5zZXQoV2coYyxsKSxhKSxhfWZ1bmN0aW9uIE1hKGMsbCl7cmV0dXJu''@;'; put 'put ''IGMuZ2V0KFdnKGMsbCkpfWZ1bmN0aW9uIFdnKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBv''@;'; put 'put ''YmplY3QiKX1jb25zdCB2SD0ibWFudWFsUm93UmVzaXplIix2bWU9Im1hbnVhbFJvd0hlaWdodHMiO3ZhciAkcD1uZXcgV2Vha01hcCxiSD1uZXcgV2Vha01hcCx6aD1uZXcgV2Vha01hcCxjQT1uZXcgV2Vha01hcCx5Nj1uZXcgV2Vha01hcCxHUT1uZXcgV2Vha01hcCxwdz1uZXcgV2Vha01h''@;'; put 'put ''cCx5SD1uZXcgV2Vha01hcCxuZD1uZXcgV2Vha01hcCxLcD1uZXcgV2Vha01hcCxWOT1uZXcgV2Vha01hcCxfSD1uZXcgV2Vha01hcCx1QT1uZXcgV2Vha01hcCxkQT1uZXcgV2Vha01hcCxfMz1uZXcgV2Vha01hcCxoQT1uZXcgV2Vha01hcCxfNj1uZXcgV2Vha1NldDtjbGFzcyBFM3QgZXh0''@;'; put 'put ''ZW5kcyBGc3tzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gdkh9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMzB9Y29uc3RydWN0b3IobCl7c3VwZXIobCksZnVuY3Rpb24gTTN0KGMsbCl7bW1lKGMsbCksbC5hZGQoYyl9KHRoaXMsXzYpLFMxKHRoaXMsJHAsbnVs''@;'; put 'put ''bCksUzEodGhpcyxiSCxudWxsKSxTMSh0aGlzLHpoLFtdKSxTMSh0aGlzLGNBLG51bGwpLFMxKHRoaXMseTYsbnVsbCksUzEodGhpcyxHUSxudWxsKSxTMSh0aGlzLHB3LG51bGwpLFMxKHRoaXMseUgsbnVsbCksUzEodGhpcyxuZCx0aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVu''@;'; put 'put ''dCgiRElWIikpLFMxKHRoaXMsS3AsdGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpKSxTMSh0aGlzLFY5LCExKSxTMSh0aGlzLF9ILCExKSxTMSh0aGlzLHVBLDApLFMxKHRoaXMsZEEsbnVsbCksUzEodGhpcyxfMyx2b2lkIDApLFMxKHRoaXMsaEEsdm9pZCAwKSxU''@;'; put 'put ''aShNYShuZCx0aGlzKSwibWFudWFsUm93UmVzaXplciIpLFRpKE1hKEtwLHRoaXMpLCJtYW51YWxSb3dSZXNpemVyR3VpZGUiKX1nZXQgaW5saW5lRGlyKCl7cmV0dXJuIHRoaXMuaG90LmlzUnRsKCk/InJpZ2h0IjoibGVmdCJ9aXNFbmFibGVkKCl7cmV0dXJuIHRoaXMuaG90LmdldFNldHRp''@;'; put 'put ''bmdzKClbdkhdfWVuYWJsZVBsdWdpbigpe3RoaXMuZW5hYmxlZHx8KEtjKF8zLHRoaXMsbmV3IFptKSxNYShfMyx0aGlzKS5hZGRMb2NhbEhvb2soImluaXQiLCgpPT5XZyhfNix0aGlzLEwzdCkuY2FsbCh0aGlzKSksdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIucmVnaXN0ZXJNYXAodGhpcy5w''@;'; put 'put ''bHVnaW5OYW1lLE1hKF8zLHRoaXMpKSx0aGlzLmFkZEhvb2soIm1vZGlmeVJvd0hlaWdodCIsKGwsYSk9PldnKF82LHRoaXMsUjN0KS5jYWxsKHRoaXMsbCxhKSksdGhpcy5iaW5kRXZlbnRzKCksc3VwZXIuZW5hYmxlUGx1Z2luKCkpfXVwZGF0ZVBsdWdpbigpe3RoaXMuZGlzYWJsZVBsdWdp''@;'; put 'put ''bigpLHRoaXMuZW5hYmxlUGx1Z2luKCksc3VwZXIudXBkYXRlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe0tjKGhBLHRoaXMsTWEoXzMsdGhpcykuZ2V0VmFsdWVzKCkpLHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLnVucmVnaXN0ZXJNYXAodGhpcy5wbHVnaW5OYW1lKSxzdXBlci5kaXNhYmxl''@;'; put 'put ''UGx1Z2luKCl9c2F2ZU1hbnVhbFJvd0hlaWdodHMoKXt0aGlzLmhvdC5ydW5Ib29rcygicGVyc2lzdGVudFN0YXRlU2F2ZSIsdm1lLE1hKF8zLHRoaXMpLmdldFZhbHVlcygpKX1sb2FkTWFudWFsUm93SGVpZ2h0cygpe2NvbnN0IGw9e307cmV0dXJuIHRoaXMuaG90LnJ1bkhvb2tzKCJwZXJz''@;'; put 'put ''aXN0ZW50U3RhdGVMb2FkIix2bWUsbCksbC52YWx1ZX1zZXRNYW51YWxTaXplKGwsYSl7Y29uc3QgZD10aGlzLmhvdC50b1BoeXNpY2FsUm93KGwpLGg9TWF0aC5tYXgoYSx0aGlzLmhvdC52aWV3LmdldERlZmF1bHRSb3dIZWlnaHQoKSk7cmV0dXJuIE1hKF8zLHRoaXMpLnNldFZhbHVlQXRJ''@;'; put 'put ''bmRleChkLGgpLGh9Z2V0TGFzdERlc2lyZWRSb3dIZWlnaHQoKXtyZXR1cm4gTWEoY0EsdGhpcyl9c2V0dXBIYW5kbGVQb3NpdGlvbihsKXtLYygkcCx0aGlzLGwpO2NvbnN0e3ZpZXc6YX09dGhpcy5ob3Qse193dDpkfT1hLGg9ZC53dFRhYmxlLmdldENvb3JkcyhNYSgkcCx0aGlzKSksZj1o''@;'; put 'put ''LnJvdztpZihmPDApcmV0dXJuO2NvbnN0IHY9c3UoTWEoJHAsdGhpcykpLE09TWEoJHAsdGhpcykuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksRD1mPGQuZ2V0U2V0dGluZygiZml4ZWRSb3dzVG9wIiksWj1mPj1hLmNvdW50Tm90SGlkZGVuUm93SW5kZXhlcygwLDEpLWQuZ2V0U2V0dGluZygi''@;'; put 'put ''Zml4ZWRSb3dzQm90dG9tIik7bGV0IHJlO0Q/cmU9ZC53dE92ZXJsYXlzLnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5nZXRSZWxhdGl2ZUNlbGxQb3NpdGlvbihNYSgkcCx0aGlzKSxoLnJvdyxoLmNvbCk6WiYmKHJlPWQud3RPdmVybGF5cy5ib3R0b21JbmxpbmVTdGFydENvcm5lck92''@;'; put 'put ''ZXJsYXkuZ2V0UmVsYXRpdmVDZWxsUG9zaXRpb24oTWEoJHAsdGhpcyksaC5yb3csaC5jb2wpKSxyZXx8KHJlPWQud3RPdmVybGF5cy5pbmxpbmVTdGFydE92ZXJsYXkuZ2V0UmVsYXRpdmVDZWxsUG9zaXRpb24oTWEoJHAsdGhpcyksaC5yb3csaC5jb2wpKSxLYyhiSCx0aGlzLHRoaXMuaG90''@;'; put 'put ''LnJvd0luZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoZikpLEtjKHpoLHRoaXMsW10pO2NvbnN0IGNlPXRoaXMuaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKXx8dGhpcy5ob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpO3RoaXMuaG90''@;'; put 'put ''LnNlbGVjdGlvbi5pc1NlbGVjdGVkKCkmJmNlJiZZbih0aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlKCksRWU9PntHYShFZS5nZXRUb3BTdGFydENvcm5lcigpLnJvdyxFZS5nZXRCb3R0b21TdGFydENvcm5lcigpLnJvdyxydD0+e01hKHpoLHRoaXMpLmluY2x1ZGVzKHJ0KXx8TWEoemgsdGhp''@;'; put 'put ''cykucHVzaChydCl9KX0pLE1hKHpoLHRoaXMpLmluY2x1ZGVzKE1hKGJILHRoaXMpKXx8S2MoemgsdGhpcyxbTWEoYkgsdGhpcyldKSxLYyh5SCx0aGlzLHJlLnRvcC02KSxLYyhwdyx0aGlzLHBhcnNlSW50KE0uaGVpZ2h0LDEwKSksTWEobmQsdGhpcykuc3R5bGUudG9wPWAke01hKHlILHRo''@;'; put 'put ''aXMpK01hKHB3LHRoaXMpfXB4YCxNYShuZCx0aGlzKS5zdHlsZVt0aGlzLmlubGluZURpcl09YCR7cmUuc3RhcnR9cHhgLE1hKG5kLHRoaXMpLnN0eWxlLndpZHRoPWAke3Z9cHhgLHRoaXMuaG90LnJvb3RFbGVtZW50LmFwcGVuZENoaWxkKE1hKG5kLHRoaXMpKX1yZWZyZXNoSGFuZGxlUG9z''@;'; put 'put ''aXRpb24oKXtNYShuZCx0aGlzKS5zdHlsZS50b3A9YCR7TWEoeUgsdGhpcykrTWEoY0EsdGhpcyl9cHhgfXNldHVwR3VpZGVQb3NpdGlvbigpe2NvbnN0IGw9cGFyc2VJbnQoc3UoTWEobmQsdGhpcykpLDEwKSxhPXBhcnNlSW50KE1hKG5kLHRoaXMpLnN0eWxlW3RoaXMuaW5saW5lRGlyXSwx''@;'; put 'put ''MCkrbCxkPXRoaXMuaG90LnZpZXcuZ2V0VGFibGVXaWR0aCgpO1RpKE1hKG5kLHRoaXMpLCJhY3RpdmUiKSxUaShNYShLcCx0aGlzKSwiYWN0aXZlIiksTWEoS3AsdGhpcykuc3R5bGUudG9wPU1hKG5kLHRoaXMpLnN0eWxlLnRvcCxNYShLcCx0aGlzKS5zdHlsZVt0aGlzLmlubGluZURpcl09''@;'; put 'put ''YCR7YX1weGAsTWEoS3AsdGhpcykuc3R5bGUud2lkdGg9ZC1sKyJweCIsdGhpcy5ob3Qucm9vdEVsZW1lbnQuYXBwZW5kQ2hpbGQoTWEoS3AsdGhpcykpfXJlZnJlc2hHdWlkZVBvc2l0aW9uKCl7TWEoS3AsdGhpcykuc3R5bGUudG9wPU1hKG5kLHRoaXMpLnN0eWxlLnRvcH1oaWRlSGFuZGxl''@;'; put 'put ''QW5kR3VpZGUoKXtsbyhNYShuZCx0aGlzKSwiYWN0aXZlIiksbG8oTWEoS3AsdGhpcyksImFjdGl2ZSIpfWNoZWNrSWZSb3dIZWFkZXIobCl7Y29uc3QgYT1SbShsLFsiVEJPRFkiXSx0aGlzLmhvdC5yb290RWxlbWVudCkse2lubGluZVN0YXJ0T3ZlcmxheTpkLHRvcElubGluZVN0YXJ0Q29y''@;'; put 'put ''bmVyT3ZlcmxheTpoLGJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheTpmfT10aGlzLmhvdC52aWV3Ll93dC53dE92ZXJsYXlzO3JldHVybltkLmNsb25lLnd0VGFibGUuVEJPRFksaC5jbG9uZS53dFRhYmxlLlRCT0RZLGYuY2xvbmUud3RUYWJsZS5UQk9EWV0uaW5jbHVkZXMoYSl9Z2V0''@;'; put 'put ''Q2xvc2VzdFRIUGFyZW50KGwpe3JldHVybiJUQUJMRSIhPT1sLnRhZ05hbWU/IlRIIj09PWwudGFnTmFtZT9sOnRoaXMuZ2V0Q2xvc2VzdFRIUGFyZW50KGwucGFyZW50Tm9kZSk6bnVsbH1nZXRBY3R1YWxSb3dIZWlnaHQobCl7Y29uc3QgYT10aGlzLmhvdC52aWV3Ll93dC53dFRhYmxlLmdl''@;'; put 'put ''dFJvd0hlaWdodChsKTtyZXR1cm4gdm9pZCAwIT09YSYmTWEoeTYsdGhpcyk8YT9hOk1hKHk2LHRoaXMpfWFmdGVyTW91c2VEb3duVGltZW91dCgpe2NvbnN0IGw9KCk9Pnt0aGlzLmhvdC5yZW5kZXIoKSx0aGlzLmhvdC52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpfSxhPShkLGgpPT57Y29u''@;'; put 'put ''c3QgZj10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlUm93UmVzaXplIix0aGlzLmdldEFjdHVhbFJvd0hlaWdodChkKSxkLCEwKTt2b2lkIDAhPT1mJiZLYyh5Nix0aGlzLGYpLHRoaXMuc2V0TWFudWFsU2l6ZShkLE1hKHk2LHRoaXMpKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJSb3dSZXNp''@;'; put 'put ''emUiLHRoaXMuZ2V0QWN0dWFsUm93SGVpZ2h0KGQpLGQsITApLGgmJmwoKX07TWEodUEsdGhpcyk+PTImJihNYSh6aCx0aGlzKS5sZW5ndGg+MT8oWW4oTWEoemgsdGhpcyksaD0+e2EoaCl9KSxsKCkpOlluKE1hKHpoLHRoaXMpLGg9PnthKGgsITApfSkpLEtjKHVBLHRoaXMsMCksS2MoZEEs''@;'; put 'put ''dGhpcyxudWxsKX1iaW5kRXZlbnRzKCl7Y29uc3R7cm9vdEVsZW1lbnQ6bCxyb290V2luZG93OmF9PXRoaXMuaG90O3RoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobCwibW91c2VvdmVyIixkPT5XZyhfNix0aGlzLFQzdCkuY2FsbCh0aGlzLGQpKSx0aGlzLmV2ZW50TWFuYWdl''@;'; put 'put ''ci5hZGRFdmVudExpc3RlbmVyKGwsIm1vdXNlZG93biIsZD0+V2coXzYsdGhpcyxBM3QpLmNhbGwodGhpcyxkKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihhLCJtb3VzZW1vdmUiLGQ9PldnKF82LHRoaXMsazN0KS5jYWxsKHRoaXMsZCkpLHRoaXMuZXZlbnRNYW5hZ2Vy''@;'; put 'put ''LmFkZEV2ZW50TGlzdGVuZXIoYSwibW91c2V1cCIsKCk9PldnKF82LHRoaXMsRDN0KS5jYWxsKHRoaXMpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKE1hKG5kLHRoaXMpLCJjb250ZXh0bWVudSIsKCk9PldnKF82LHRoaXMsSTN0KS5jYWxsKHRoaXMpKX1kZXN0cm95KCl7''@;'; put 'put ''c3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiBUM3QoYyl7aWYoIUEkKGMudGFyZ2V0KSYmITAhPT1NYShfSCx0aGlzKSYmdGhpcy5jaGVja0lmUm93SGVhZGVyKGMudGFyZ2V0KSl7Y29uc3QgbD10aGlzLmdldENsb3Nlc3RUSFBhcmVudChjLnRhcmdldCk7bCYmKE1hKFY5LHRoaXMpfHx0aGlz''@;'; put 'put ''LnNldHVwSGFuZGxlUG9zaXRpb24obCkpfX1mdW5jdGlvbiBBM3QoYyl7cG8oYy50YXJnZXQsIm1hbnVhbFJvd1Jlc2l6ZXIiKSYmKHRoaXMuc2V0dXBIYW5kbGVQb3NpdGlvbihNYSgkcCx0aGlzKSksdGhpcy5zZXR1cEd1aWRlUG9zaXRpb24oKSxLYyhWOSx0aGlzLCEwKSxudWxsPT09TWEo''@;'; put 'put ''ZEEsdGhpcykmJihLYyhkQSx0aGlzLHNldFRpbWVvdXQoKCk9PnRoaXMuYWZ0ZXJNb3VzZURvd25UaW1lb3V0KCksNTAwKSksdGhpcy5ob3QuX3JlZ2lzdGVyVGltZW91dChNYShkQSx0aGlzKSkpLEtjKHVBLHRoaXMsTWEodUEsdGhpcykrMSksS2MoR1EsdGhpcyxjLnBhZ2VZKSxLYyh5Nix0''@;'; put 'put ''aGlzLE1hKHB3LHRoaXMpKSl9ZnVuY3Rpb24gazN0KGMpe01hKFY5LHRoaXMpJiYoS2MoY0EsdGhpcyxNYShwdyx0aGlzKSsoYy5wYWdlWS1NYShHUSx0aGlzKSkpLFluKE1hKHpoLHRoaXMpLGw9PntLYyh5Nix0aGlzLHRoaXMuc2V0TWFudWFsU2l6ZShsLE1hKGNBLHRoaXMpKSl9KSx0aGlz''@;'; put 'put ''LnJlZnJlc2hIYW5kbGVQb3NpdGlvbigpLHRoaXMucmVmcmVzaEd1aWRlUG9zaXRpb24oKSl9ZnVuY3Rpb24gRDN0KCl7Y29uc3QgYz0oKT0+e3RoaXMuaG90LnJlbmRlcigpLHRoaXMuaG90LnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCl9LGw9KGEsZCk9Pnt0aGlzLmhvdC5ydW5Ib29rcygi''@;'; put 'put ''YmVmb3JlUm93UmVzaXplIix0aGlzLmdldEFjdHVhbFJvd0hlaWdodChhKSxhLCExKSxkJiZjKCksdGhpcy5zYXZlTWFudWFsUm93SGVpZ2h0cygpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclJvd1Jlc2l6ZSIsdGhpcy5nZXRBY3R1YWxSb3dIZWlnaHQoYSksYSwhMSl9O01hKFY5LHRoaXMp''@;'; put 'put ''JiYodGhpcy5oaWRlSGFuZGxlQW5kR3VpZGUoKSxLYyhWOSx0aGlzLCExKSxNYSh5Nix0aGlzKSE9PU1hKHB3LHRoaXMpJiYoTWEoemgsdGhpcykubGVuZ3RoPjE/KFluKE1hKHpoLHRoaXMpLGQ9PntsKGQpfSksYygpKTpZbihNYSh6aCx0aGlzKSxkPT57bChkLCEwKX0pKSx0aGlzLnNldHVw''@;'; put 'put ''SGFuZGxlUG9zaXRpb24oTWEoJHAsdGhpcykpKX1mdW5jdGlvbiBJM3QoKXt0aGlzLmhpZGVIYW5kbGVBbmRHdWlkZSgpLHRoaXMuaG90LnJvb3RFbGVtZW50LnJlbW92ZUNoaWxkKE1hKG5kLHRoaXMpKSx0aGlzLmhvdC5yb290RWxlbWVudC5yZW1vdmVDaGlsZChNYShLcCx0aGlzKSksS2Mo''@;'; put 'put ''VjksdGhpcywhMSksS2MoX0gsdGhpcywhMCksdGhpcy5ob3QuX3JlZ2lzdGVySW1tZWRpYXRlKCgpPT57S2MoX0gsdGhpcywhMSl9KX1mdW5jdGlvbiBSM3QoYyxsKXtsZXQgYT1jO2lmKHRoaXMuZW5hYmxlZCl7Y29uc3QgZD10aGlzLmhvdC50b1BoeXNpY2FsUm93KGwpLGg9TWEoXzMsdGhp''@;'; put 'put ''cykuZ2V0VmFsdWVBdEluZGV4KGQpO3RoaXMuaG90LmdldFNldHRpbmdzKClbdkhdJiZoJiYoYT1oKX1yZXR1cm4gYX1mdW5jdGlvbiBMM3QoKXtjb25zdCBjPXRoaXMuaG90LmdldFNldHRpbmdzKClbdkhdLGw9dGhpcy5sb2FkTWFudWFsUm93SGVpZ2h0cygpO3RoaXMuaG90LmJhdGNoRXhl''@;'; put 'put ''Y3V0aW9uKCgpPT57dHlwZW9mIGw8InUiP2wuZm9yRWFjaCgoYSxkKT0+e01hKF8zLHRoaXMpLnNldFZhbHVlQXRJbmRleChkLGEpfSk6QXJyYXkuaXNBcnJheShjKT8oYy5mb3JFYWNoKChhLGQpPT57TWEoXzMsdGhpcykuc2V0VmFsdWVBdEluZGV4KGQsYSl9KSxLYyhoQSx0aGlzLGMpKToh''@;'; put 'put ''MD09PWMmJkFycmF5LmlzQXJyYXkoTWEoaEEsdGhpcykpJiZNYShoQSx0aGlzKS5mb3JFYWNoKChhLGQpPT57TWEoXzMsdGhpcykuc2V0VmFsdWVBdEluZGV4KGQsYSl9KX0sITApfWZ1bmN0aW9uIEI5KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBGM3QoYyl7dmFyIGw9ZnVuY3Rpb24gSDN0''@;'; put 'put ''KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigi''@;'; put 'put ''QEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGws''@;'; put 'put ''e3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBibWUoYyxsKXtyZXR1cm4gYy5nZXQoeW1lKGMsbCkpfWZ1bmN0aW9uIHdIKGMsbCxhKXtyZXR1cm4gYy5zZXQoeW1lKGMsbCksYSksYX1mdW5jdGlvbiB5bWUoYyxs''@;'; put 'put ''LGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXkoNjgxNDYpLHkoNzQ5OSk7dmFyIGo5''@;'; put 'put ''PW5ldyBXZWFrTWFwO2NvbnN0IHFwPWNsYXNzIE4zdHtjb25zdHJ1Y3RvcihsLGEsZCxoLGYsdil7QjkodGhpcywicm93Iix2b2lkIDApLEI5KHRoaXMsImNvbCIsdm9pZCAwKSxCOSh0aGlzLCJyb3dzcGFuIix2b2lkIDApLEI5KHRoaXMsImNvbHNwYW4iLHZvaWQgMCksQjkodGhpcywicmVt''@;'; put 'put ''b3ZlZCIsITEpLEI5KHRoaXMsImNlbGxDb29yZHNGYWN0b3J5Iix2b2lkIDApLEI5KHRoaXMsImNlbGxSYW5nZUZhY3RvcnkiLHZvaWQgMCksZnVuY3Rpb24gTzN0KGMsbCxhKXsoZnVuY3Rpb24gUDN0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRp''@;'; put 'put ''YWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5zZXQoYyxhKX0odGhpcyxqOSxudWxsKSx0aGlzLnJvdz1sLHRoaXMuY29sPWEsdGhpcy5yb3dzcGFuPWQsdGhpcy5jb2xzcGFuPWgsdGhpcy5jZWxsQ29vcmRzRmFjdG9yeT1mLHRo''@;'; put 'put ''aXMuY2VsbFJhbmdlRmFjdG9yeT12fXN0YXRpYyBORUdBVElWRV9WQUxVRVNfV0FSTklORyhsKXtsZXR7cm93OmEsY29sOmQscm93c3BhbjpoLGNvbHNwYW46Zn09bDtyZXR1cm4gZ2xgVGhlIG1lcmdlZCBjZWxsIGRlY2xhcmVkIHdpdGgge3JvdzogJHthfSwgY29sOiAke2R9LFx4MjAKICAg''@;'; put 'put ''ICAgcm93c3BhbjogJHtofSwgY29sc3BhbjogJHtmfX0gY29udGFpbnMgbmVnYXRpdmUgdmFsdWVzLCB3aGljaCBpc1x4MjAKICAgICAgbm90IHN1cHBvcnRlZC4gSXQgd2lsbCBub3QgYmUgYWRkZWQgdG8gdGhlIGNvbGxlY3Rpb24uYH1zdGF0aWMgSVNfT1VUX09GX0JPVU5EU19XQVJOSU5H''@;'; put 'put ''KGwpe2xldHtyb3c6YSxjb2w6ZH09bDtyZXR1cm4gZ2xgVGhlIG1lcmdlZCBjZWxsIGRlY2xhcmVkIGF0IFske2F9LCAke2R9XSBpcyBwb3NpdGlvbmVkXHgyMAogICAgICAob3IgcG9zaXRpb25lZCBwYXJ0aWFsbHkpIG91dHNpZGUgb2YgdGhlIHRhYmxlIHJhbmdlLiBJdCB3YXMgbm90IGFk''@;'; put 'put ''ZGVkIHRvIHRoZSB0YWJsZSwgcGxlYXNlIGZpeCB5b3VyIHNldHVwLmB9c3RhdGljIElTX1NJTkdMRV9DRUxMKGwpe2xldHtyb3c6YSxjb2w6ZH09bDtyZXR1cm4gZ2xgVGhlIG1lcmdlZCBjZWxsIGRlY2xhcmVkIGF0IFske2F9LCAke2R9XSBoYXMgYm90aCAicm93c3BhbiJceDIwCiAgICAg''@;'; put 'put ''IGFuZCAiY29sc3BhbiIgZGVjbGFyZWQgYXMgIjEiLCB3aGljaCBtYWtlcyBpdCBhIHNpbmdsZSBjZWxsLiBJdCBjYW5ub3QgYmUgYWRkZWQgdG8gdGhlIGNvbGxlY3Rpb24uYH1zdGF0aWMgWkVST19TUEFOX1dBUk5JTkcobCl7bGV0e3JvdzphLGNvbDpkfT1sO3JldHVybiBnbGBUaGUgbWVy''@;'; put 'put ''Z2VkIGNlbGwgZGVjbGFyZWQgYXQgWyR7YX0sICR7ZH1dIGhhcyAicm93c3BhbiJceDIwCiAgICAgIG9yICJjb2xzcGFuIiBkZWNsYXJlZCBhcyAiMCIsIHdoaWNoIGlzIG5vdCBzdXBwb3J0ZWQuIEl0IGNhbm5vdCBiZSBhZGRlZCB0byB0aGUgY29sbGVjdGlvbi5gfXN0YXRpYyBjb250YWlu''@;'; put 'put ''c05lZ2F0aXZlVmFsdWVzKGwpe2xldHtyb3c6YSxjb2w6ZCxyb3dzcGFuOmgsY29sc3BhbjpmfT1sO3JldHVybiBhPDB8fGQ8MHx8aDwwfHxmPDB9c3RhdGljIGlzU2luZ2xlQ2VsbChsKXtsZXR7cm93c3BhbjphLGNvbHNwYW46ZH09bDtyZXR1cm4gMT09PWQmJjE9PT1hfXN0YXRpYyBjb250''@;'; put 'put ''YWluc1plcm9TcGFuKGwpe2xldHtyb3dzcGFuOmEsY29sc3BhbjpkfT1sO3JldHVybiAwPT09ZHx8MD09PWF9c3RhdGljIGlzT3V0T2ZCb3VuZHMobCxhLGQpe3JldHVybiBsLnJvdzwwfHxsLmNvbDwwfHxsLnJvdz49YXx8bC5yb3crbC5yb3dzcGFuLTE+PWF8fGwuY29sPj1kfHxsLmNvbCts''@;'; put 'put ''LmNvbHNwYW4tMT49ZH1ub3JtYWxpemUobCl7Y29uc3QgYT1sLmNvdW50Um93cygpLGQ9bC5jb3VudENvbHMoKTt0aGlzLnJvdzwwP3RoaXMucm93PTA6dGhpcy5yb3c+YS0xJiYodGhpcy5yb3c9YS0xKSx0aGlzLmNvbDwwP3RoaXMuY29sPTA6dGhpcy5jb2w+ZC0xJiYodGhpcy5jb2w9ZC0x''@;'; put 'put ''KSx0aGlzLnJvdyt0aGlzLnJvd3NwYW4+YS0xJiYodGhpcy5yb3dzcGFuPWEtdGhpcy5yb3cpLHRoaXMuY29sK3RoaXMuY29sc3Bhbj5kLTEmJih0aGlzLmNvbHNwYW49ZC10aGlzLmNvbCksd0goajksdGhpcyxudWxsKX1pbmNsdWRlcyhsLGEpe3JldHVybiB0aGlzLnJvdzw9bCYmdGhpcy5j''@;'; put 'put ''b2w8PWEmJnRoaXMucm93K3RoaXMucm93c3Bhbi0xPj1sJiZ0aGlzLmNvbCt0aGlzLmNvbHNwYW4tMT49YX1pbmNsdWRlc0hvcml6b250YWxseShsKXtyZXR1cm4gdGhpcy5jb2w8PWwmJnRoaXMuY29sK3RoaXMuY29sc3Bhbi0xPj1sfWluY2x1ZGVzVmVydGljYWxseShsKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5yb3c8PWwmJnRoaXMucm93K3RoaXMucm93c3Bhbi0xPj1sfXNoaWZ0KGwsYSl7Y29uc3QgZD1sWzBdfHxsWzFdLGg9YStNYXRoLmFicyhsWzBdfHxsWzFdKS0xLGY9bFswXT8iY29sc3BhbiI6InJvd3NwYW4iLHY9bFswXT8iY29sIjoicm93IixNPU1hdGgubWluKGEsaCksRD1NYXRoLm1h''@;'; put 'put ''eChhLGgpLFo9dGhpc1t2XSxyZT10aGlzW3ZdK3RoaXNbZl0tMTtpZihaPj1hJiYodGhpc1t2XSs9ZCksZD4wKWE8PXJlJiZhPlomJih0aGlzW2ZdKz1kKTtlbHNlIGlmKGQ8MCl7aWYoTTw9WiYmRD49cmUpcmV0dXJuIHRoaXMucmVtb3ZlZD0hMCx3SChqOSx0aGlzLG51bGwpLCExO2lmKFo+''@;'; put 'put ''PU0mJlo8PUQpe2NvbnN0IGNlPUQtWisxLGJlPU1hdGguYWJzKGQpLWNlO3RoaXNbdl0tPWJlK2QsdGhpc1tmXS09Y2V9ZWxzZSBaPD1NJiZyZT49RD90aGlzW2ZdKz1kOlo8PU0mJnJlPj1NJiZyZTxEJiYodGhpc1tmXS09cmUtTSsxKX1yZXR1cm4gd0goajksdGhpcyxudWxsKSwhMH1pc0Zh''@;'; put 'put ''cnRoZXIobCxhKXtyZXR1cm4hbHx8KCJkb3duIj09PWE/bC5yb3crbC5yb3dzcGFuLTE8dGhpcy5yb3crdGhpcy5yb3dzcGFuLTE6InVwIj09PWE/bC5yb3c+dGhpcy5yb3c6InJpZ2h0Ij09PWE/bC5jb2wrbC5jb2xzcGFuLTE8dGhpcy5jb2wrdGhpcy5jb2xzcGFuLTE6ImxlZnQiPT09YT9s''@;'; put 'put ''LmNvbD50aGlzLmNvbDpudWxsKX1nZXRMYXN0Um93KCl7cmV0dXJuIHRoaXMucm93K3RoaXMucm93c3Bhbi0xfWdldExhc3RDb2x1bW4oKXtyZXR1cm4gdGhpcy5jb2wrdGhpcy5jb2xzcGFuLTF9Z2V0UmFuZ2UoKXtyZXR1cm4gYm1lKGo5LHRoaXMpfHx3SChqOSx0aGlzLHRoaXMuY2VsbFJh''@;'; put 'put ''bmdlRmFjdG9yeSh0aGlzLmNlbGxDb29yZHNGYWN0b3J5KHRoaXMucm93LHRoaXMuY29sKSx0aGlzLmNlbGxDb29yZHNGYWN0b3J5KHRoaXMucm93LHRoaXMuY29sKSx0aGlzLmNlbGxDb29yZHNGYWN0b3J5KHRoaXMuZ2V0TGFzdFJvdygpLHRoaXMuZ2V0TGFzdENvbHVtbigpKSkpLGJtZShq''@;'; put 'put ''OSx0aGlzKX19O2Z1bmN0aW9uIENIKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBqM3QoYyl7dmFyIGw9ZnVuY3Rpb24gejN0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5j''@;'; put 'put ''YWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJp''@;'; put 'put ''bmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiB6OShjLGwsYSl7aWYoImZ1bmN0aW9u''@;'; put 'put ''Ij09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIHc2PW5ldyBXZWFrU2V0O2NsYXNzIFNIe2NvbnN0cnVjdG9y''@;'; put 'put ''KGwpeyhmdW5jdGlvbiBWM3QoYyxsKXsoZnVuY3Rpb24gQjN0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5hZGQoYyl9KSh0aGlzLHc2''@;'; put 'put ''KSxDSCh0aGlzLCJwbHVnaW4iLHZvaWQgMCksQ0godGhpcywibWVyZ2VkQ2VsbHMiLFtdKSxDSCh0aGlzLCJtZXJnZWRDZWxsc01hdHJpeCIsbmV3IE1hcCksQ0godGhpcywiaG90Iix2b2lkIDApLHRoaXMucGx1Z2luPWwsdGhpcy5ob3Q9bC5ob3R9c3RhdGljIElTX09WRVJMQVBQSU5HX1dB''@;'; put 'put ''Uk5JTkcobCl7bGV0e3JvdzphLGNvbDpkfT1sO3JldHVybiBnbGBUaGUgbWVyZ2VkIGNlbGwgZGVjbGFyZWQgYXQgWyR7YX0sICR7ZH1dLCBvdmVybGFwc1x4MjAKICAgICAgd2l0aCB0aGUgb3RoZXIgZGVjbGFyZWQgbWVyZ2VkIGNlbGwuIFRoZSBvdmVybGFwcGluZyBtZXJnZWQgY2VsbCB3''@;'; put 'put ''YXMgbm90IGFkZGVkIHRvIHRoZSB0YWJsZSwgcGxlYXNlXHgyMAogICAgICBmaXggeW91ciBzZXR1cC5gfWdldChsLGEpe3ZhciBkO3JldHVybiEoIXRoaXMubWVyZ2VkQ2VsbHNNYXRyaXguaGFzKGwpfHxudWxsPT09KGQ9dGhpcy5tZXJnZWRDZWxsc01hdHJpeC5nZXQobCkuZ2V0KGEpKXx8''@;'; put 'put ''dm9pZCAwPT09ZCkmJmR9Z2V0QnlSYW5nZShsKXtjb25zdHtyb3c6YSxjb2w6ZH09bC5nZXRUb3BTdGFydENvcm5lcigpLHtyb3c6aCxjb2w6Zn09bC5nZXRCb3R0b21FbmRDb3JuZXIoKSx2PXRoaXMubWVyZ2VkQ2VsbHMubGVuZ3RoO2xldCBNPSExO2ZvcihsZXQgRD0wO0Q8djtEKyspe2Nv''@;'; put 'put ''bnN0IFo9dGhpcy5tZXJnZWRDZWxsc1tEXSx7cm93OnJlLGNvbDpjZSxyb3dzcGFuOmJlLGNvbHNwYW46RWV9PVo7aWYocmU+PWEmJnJlK2JlLTE8PWgmJmNlPj1kJiZjZStFZS0xPD1mKXtNPVo7YnJlYWt9fXJldHVybiBNfWZpbHRlck92ZXJsYXBwaW5nTWVyZ2VDZWxscyhsKXtjb25zdCBh''@;'; put 'put ''PW5ldyBTZXQ7cmV0dXJuIHRoaXMubWVyZ2VkQ2VsbHMuZm9yRWFjaChoPT57Y29uc3R7cm93OmYsY29sOnYsY29sc3BhbjpNLHJvd3NwYW46RH09aDtmb3IobGV0IFo9ZjtaPGYrRDtaKyspZm9yKGxldCByZT12O3JlPHYrTTtyZSsrKWEuYWRkKGByJHtafSxjJHtyZX1gKX0pLGwuZmlsdGVy''@;'; put 'put ''KGg9Pntjb25zdHtyb3c6Zixjb2w6dixjb2xzcGFuOk0scm93c3BhbjpEfT1oLFo9bmV3IFNldDtsZXQgcmU9ITE7Zm9yKGxldCBjZT1mO2NlPGYrRDtjZSsrKXtmb3IobGV0IGJlPXY7YmU8ditNO2JlKyspe2NvbnN0IEVlPWByJHtjZX0sYyR7YmV9YDtpZihhLmhhcyhFZSkpe2lsKFNILklT''@;'; put 'put ''X09WRVJMQVBQSU5HX1dBUk5JTkcoaCkpLHJlPSEwO2JyZWFrfVouYWRkKEVlKX1pZihyZSlicmVha31yZXR1cm4gcmV8fGEuYWRkKC4uLlopLCFyZX0pfWdldFdpdGhpblJhbmdlKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNb''@;'; put 'put ''MV07Y29uc3R7cm93OmQsY29sOmh9PWwuZ2V0VG9wU3RhcnRDb3JuZXIoKSx7cm93OmYsY29sOnZ9PWwuZ2V0Qm90dG9tRW5kQ29ybmVyKCksTT1bXTtmb3IobGV0IEQ9ZDtEPD1mO0QrKylmb3IobGV0IFo9aDtaPD12O1orKyl7Y29uc3QgcmU9dGhpcy5nZXQoRCxaKTtyZSYmKGF8fCFhJiZy''@;'; put 'put ''ZS5yb3c9PT1EJiZyZS5jb2w9PT1aKSYmTS5wdXNoKHJlKX1yZXR1cm4gTX1hZGQobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXTtjb25zdCBkPWwucm93LGg9bC5jb2wsTT1uZXcgcXAoZCxoLGwucm93c3BhbixsLmNvbHNw''@;'; put 'put ''YW4sdGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMsdGhpcy5ob3QuX2NyZWF0ZUNlbGxSYW5nZSksRD10aGlzLmdldChkLGgpLFo9IWEmJnRoaXMuaXNPdmVybGFwcGluZyhNKTtyZXR1cm4gRHx8Wj8oWiYmaWwoU0guSVNfT1ZFUkxBUFBJTkdfV0FSTklORyhNKSksITEpOih0aGlzLmhvdCYm''@;'; put 'put ''TS5ub3JtYWxpemUodGhpcy5ob3QpLHRoaXMubWVyZ2VkQ2VsbHMucHVzaChNKSx6OSh3Nix0aGlzLF9tZSkuY2FsbCh0aGlzLE0pLE0pfXJlbW92ZShsLGEpe2NvbnN0IGQ9dGhpcy5nZXQobCxhKSxoPWQ/dGhpcy5tZXJnZWRDZWxscy5pbmRleE9mKGQpOi0xO3JldHVybiEoIWR8fC0xPT09''@;'; put 'put ''aCkmJih0aGlzLm1lcmdlZENlbGxzLnNwbGljZShoLDEpLHo5KHc2LHRoaXMsVTN0KS5jYWxsKHRoaXMsZCksZCl9Y2xlYXIoKXtZbih0aGlzLm1lcmdlZENlbGxzLGw9PntsZXR7cm93OmEsY29sOmQscm93c3BhbjpoLGNvbHNwYW46Zn09bDtHYShhLGEraCx2PT57R2EoZCxkK2YsTT0+e2Nv''@;'; put 'put ''bnN0IEQ9dGhpcy5ob3QuZ2V0Q2VsbCh2LE0pO0QmJihELnJlbW92ZUF0dHJpYnV0ZSgicm93c3BhbiIpLEQucmVtb3ZlQXR0cmlidXRlKCJjb2xzcGFuIiksRC5zdHlsZS5kaXNwbGF5PSIiKX0pfSl9KSx0aGlzLm1lcmdlZENlbGxzLmxlbmd0aD0wLHRoaXMubWVyZ2VkQ2VsbHNNYXRyaXg9''@;'; put 'put ''bmV3IE1hcH1pc092ZXJsYXBwaW5nKGwpe2NvbnN0IGE9bC5nZXRSYW5nZSgpO2ZvcihsZXQgZD0wO2Q8dGhpcy5tZXJnZWRDZWxscy5sZW5ndGg7ZCsrKWlmKHRoaXMubWVyZ2VkQ2VsbHNbZF0uZ2V0UmFuZ2UoKS5vdmVybGFwcyhhKSlyZXR1cm4hMDtyZXR1cm4hMX1pc0ZpcnN0UmVuZGVy''@;'; put 'put ''YWJsZU1lcmdlZENlbGwobCxhKXtjb25zdCBkPXRoaXMuZ2V0KGwsYSk7aWYoIWQpcmV0dXJuITE7Y29uc3R7cm93OmgsY29sOmYscm93c3Bhbjp2LGNvbHNwYW46TX09ZCxEPXRoaXMuaG90LnZpZXcuZ2V0QWN0aXZlT3ZlcmxheU5hbWUoKSxaPVsidG9wIiwidG9wX2lubGluZV9zdGFydF9j''@;'; put 'put ''b3JuZXIiXS5pbmNsdWRlcyhEKT8wOnRoaXMuaG90LmdldEZpcnN0UmVuZGVyZWRWaXNpYmxlUm93KCkscmU9WyJpbmxpbmVfc3RhcnQiLCJ0b3BfaW5saW5lX3N0YXJ0X2Nvcm5lciIsImJvdHRvbV9pbmxpbmVfc3RhcnRfY29ybmVyIl0uaW5jbHVkZXMoRCk/MDp0aGlzLmhvdC5nZXRGaXJz''@;'; put 'put ''dFJlbmRlcmVkVmlzaWJsZUNvbHVtbigpLGNlPWtzKFosaCxoK3YtMSksYmU9a3MocmUsZixmK00tMSk7cmV0dXJuIHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChjZSwxKT09PWwmJnRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldE5lYXJlc3RO''@;'; put 'put ''b3RIaWRkZW5JbmRleChiZSwxKT09PWF9Z2V0Rmlyc3RSZW5kZXJhYmxlQ29vcmRzKGwsYSl7Y29uc3QgZD10aGlzLmdldChsLGEpO2lmKCFkfHx0aGlzLmlzRmlyc3RSZW5kZXJhYmxlTWVyZ2VkQ2VsbChsLGEpKXJldHVybiB0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhsLGEpO2NvbnN0''@;'; put 'put ''IGg9dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGQucm93LDEpLGY9dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGQuY29sLDEpO3JldHVybiB0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhoLGYpfWdl''@;'; put 'put ''dFN0YXJ0TW9zdENvbHVtbkluZGV4KGwsYSl7Y29uc3QgZD16OSh3Nix0aGlzLE1IKS5jYWxsKHRoaXMsbCwiY29sIiwtMSk7bGV0IGg9YTtmb3IobGV0IGY9MDtmPGQubGVuZ3RoO2YrKylpZihkW2ZdPD1hKXtoPWRbZl07YnJlYWt9cmV0dXJuIGh9Z2V0RW5kTW9zdENvbHVtbkluZGV4KGws''@;'; put 'put ''YSl7Y29uc3QgZD16OSh3Nix0aGlzLE1IKS5jYWxsKHRoaXMsbCwiY29sIiwxKTtsZXQgaD1hO2ZvcihsZXQgZj0wO2Y8ZC5sZW5ndGg7ZisrKWlmKGRbZl0+PWEpe2g9ZFtmXTticmVha31yZXR1cm4gaH1nZXRUb3BNb3N0Um93SW5kZXgobCxhKXtjb25zdCBkPXo5KHc2LHRoaXMsTUgpLmNh''@;'; put 'put ''bGwodGhpcyxsLCJyb3ciLC0xKTtsZXQgaD1hO2ZvcihsZXQgZj0wO2Y8ZC5sZW5ndGg7ZisrKWlmKGRbZl08PWEpe2g9ZFtmXTticmVha31yZXR1cm4gaH1nZXRCb3R0b21Nb3N0Um93SW5kZXgobCxhKXtjb25zdCBkPXo5KHc2LHRoaXMsTUgpLmNhbGwodGhpcyxsLCJyb3ciLDEpO2xldCBo''@;'; put 'put ''PWE7Zm9yKGxldCBmPTA7ZjxkLmxlbmd0aDtmKyspaWYoZFtmXT49YSl7aD1kW2ZdO2JyZWFrfXJldHVybiBofXNoaWZ0Q29sbGVjdGlvbnMobCxhLGQpe2NvbnN0IGg9WzAsMF07c3dpdGNoKGwpe2Nhc2UicmlnaHQiOmhbMF0rPWQ7YnJlYWs7Y2FzZSJsZWZ0IjpoWzBdLT1kO2JyZWFrO2Nh''@;'; put 'put ''c2UiZG93biI6aFsxXSs9ZDticmVhaztjYXNlInVwIjpoWzFdLT1kfWNvbnN0IGY9W107dGhpcy5tZXJnZWRDZWxscy5mb3JFYWNoKHY9Pnt2LnNoaWZ0KGgsYSksdi5yZW1vdmVkJiZmLnB1c2godil9KSxmLmZvckVhY2godj0+e3RoaXMubWVyZ2VkQ2VsbHMuc3BsaWNlKHRoaXMubWVyZ2Vk''@;'; put 'put ''Q2VsbHMuaW5kZXhPZih2KSwxKX0pLHRoaXMubWVyZ2VkQ2VsbHNNYXRyaXguY2xlYXIoKSx0aGlzLm1lcmdlZENlbGxzLmZvckVhY2godj0+e3o5KHc2LHRoaXMsX21lKS5jYWxsKHRoaXMsdil9KX19ZnVuY3Rpb24gTUgoYyxsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9''@;'; put 'put ''PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06MTtjb25zdCBkPW5ldyBNYXAsaD0xPT09YT9jLmdldFRvcFN0YXJ0Q29ybmVyKCk6Yy5nZXRCb3R0b21FbmRDb3JuZXIoKSxmPTE9PT1hP2MuZ2V0Qm90dG9tRW5kQ29ybmVyKCk6Yy5nZXRUb3BTdGFydENvcm5lcigpO2ZvcihsZXQgdj1oLnJv''@;'; put 'put ''dzsxPT09YT92PD1mLnJvdzp2Pj1mLnJvdzt2Kz1hKWZvcihsZXQgTT1oLmNvbDsxPT09YT9NPD1mLmNvbDpNPj1mLmNvbDtNKz1hKXtjb25zdCBEPSJyb3ciPT09bD92Ok0sWj10aGlzLmdldCh2LE0pO2xldCByZT1EO1omJihyZT0xPT09YT9aW2xdK1pbYCR7bH1zcGFuYF0tMTpaW2xdKSxk''@;'; put 'put ''LmhhcyhEKXx8ZC5zZXQoRCxuZXcgU2V0KSxkLmdldChEKS5hZGQocmUpfXJldHVybiBBcnJheS5mcm9tKG5ldyBTZXQoQXJyYXkuZnJvbShkLmVudHJpZXMoKSkuZmlsdGVyKHY9PntsZXRbLE1dPXY7cmV0dXJuIDE9PT1NLnNpemV9KS5mbGF0TWFwKHY9PntsZXRbLE1dPXY7cmV0dXJuIEFy''@;'; put 'put ''cmF5LmZyb20oTSl9KSkpfWZ1bmN0aW9uIF9tZShjKXtmb3IobGV0IGw9Yy5yb3c7bDxjLnJvdytjLnJvd3NwYW47bCsrKWZvcihsZXQgYT1jLmNvbDthPGMuY29sK2MuY29sc3BhbjthKyspdGhpcy5tZXJnZWRDZWxsc01hdHJpeC5oYXMobCl8fHRoaXMubWVyZ2VkQ2VsbHNNYXRyaXguc2V0''@;'; put 'put ''KGwsbmV3IE1hcCksdGhpcy5tZXJnZWRDZWxsc01hdHJpeC5nZXQobCkuc2V0KGEsYyl9ZnVuY3Rpb24gVTN0KGMpe2ZvcihsZXQgbD1jLnJvdztsPGMucm93K2Mucm93c3BhbjtsKyspZm9yKGxldCBhPWMuY29sO2E8Yy5jb2wrYy5jb2xzcGFuO2ErKyl0aGlzLm1lcmdlZENlbGxzTWF0cml4''@;'; put 'put ''LmdldChsKS5kZWxldGUoYSl9Y29uc3QgWjN0PVNIO2Z1bmN0aW9uICRRKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBXM3QoYyl7dmFyIGw9ZnVuY3Rpb24gWTN0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYo''@;'; put 'put ''dm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmlu''@;'; put 'put ''ZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jb25zdCAkM3Q9''@;'; put 'put ''Y2xhc3MgRzN0e2NvbnN0cnVjdG9yKGwpeyRRKHRoaXMsInBsdWdpbiIsdm9pZCAwKSwkUSh0aGlzLCJtZXJnZWRDZWxsc0NvbGxlY3Rpb24iLHZvaWQgMCksJFEodGhpcywiY3VycmVudEZpbGxEYXRhIixudWxsKSx0aGlzLnBsdWdpbj1sLHRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uPXRo''@;'; put 'put ''aXMucGx1Z2luLm1lcmdlZENlbGxzQ29sbGVjdGlvbn1nZXREaXJlY3Rpb24obCxhKXtsZXQgZD1udWxsO3JldHVybiBkPWFbMF09PT1sWzBdJiZhWzFdPT09bFsxXSYmYVszXT09PWxbM10/ImRvd24iOmFbMl09PT1sWzJdJiZhWzFdPT09bFsxXSYmYVszXT09PWxbM10/InVwIjphWzFdPT09''@;'; put 'put ''bFsxXSYmYVsyXT09PWxbMl0/InJpZ2h0IjoibGVmdCIsZH1zbmFwRHJhZ0FyZWEobCxhLGQsaCl7Y29uc3QgZj1hLnNsaWNlKDApLHY9dGhpcy5nZXRBdXRvZmlsbFNpemUobCxhLGQpLFtNLEQsWixyZV09bCxiZT1bInVwIiwiZG93biJdLmluZGV4T2YoZCk+LTE/Wi1NKzE6cmUtRCsxLEJl''@;'; put 'put ''PXYtTWF0aC5mbG9vcih2L2JlKSpiZSxxZT10aGlzLmdldEZhcnRoZXN0Q29sbGVjdGlvbihsLGEsZCxoKTtpZihxZSlpZigiZG93biI9PT1kKXtjb25zdCBydD1xZS5yb3crcWUucm93c3Bhbi1NLUJlO2ZbMl0rcnQ+PXRoaXMucGx1Z2luLmhvdC5jb3VudFJvd3MoKT9mWzJdLT1CZTpmWzJd''@;'; put 'put ''Kz1CZT9ydDowfWVsc2UgaWYoInJpZ2h0Ij09PWQpe2NvbnN0IHJ0PXFlLmNvbCtxZS5jb2xzcGFuLUQtQmU7ZlszXStydD49dGhpcy5wbHVnaW4uaG90LmNvdW50Q29scygpP2ZbM10tPUJlOmZbM10rPUJlP3J0OjB9ZWxzZSBpZigidXAiPT09ZCl7Y29uc3QgcnQ9Wi1CZS1xZS5yb3crMTtm''@;'; put 'put ''WzBdK3J0PDA/ZlswXSs9QmU6ZlswXS09QmU/cnQ6MH1lbHNlIGlmKCJsZWZ0Ij09PWQpe2NvbnN0IHJ0PXJlLUJlLXFlLmNvbCsxO2ZbMV0rcnQ8MD9mWzFdKz1CZTpmWzFdLT1CZT9ydDowfXJldHVybiB0aGlzLnVwZGF0ZUN1cnJlbnRGaWxsQ2FjaGUoe2Jhc2VBcmVhOmwsZHJhZ0RpcmVj''@;'; put 'put ''dGlvbjpkLGZvdW5kTWVyZ2VkQ2VsbHM6aCxmaWxsU2l6ZTp2LGRyYWdBcmVhOmYsY3ljbGVMZW5ndGg6YmV9KSxmfXVwZGF0ZUN1cnJlbnRGaWxsQ2FjaGUobCl7dGhpcy5jdXJyZW50RmlsbERhdGF8fCh0aGlzLmN1cnJlbnRGaWxsRGF0YT17fSksRXUodGhpcy5jdXJyZW50RmlsbERhdGEs''@;'; put 'put ''bCl9Z2V0QXV0b2ZpbGxTaXplKGwsYSxkKXtjb25zdFtoLGYsdixNXT1sLFtELFoscmUsY2VdPWE7c3dpdGNoKGQpe2Nhc2UidXAiOnJldHVybiBoLUQ7Y2FzZSJkb3duIjpyZXR1cm4gcmUtdjtjYXNlImxlZnQiOnJldHVybiBmLVo7Y2FzZSJyaWdodCI6cmV0dXJuIGNlLU07ZGVmYXVsdDpy''@;'; put 'put ''ZXR1cm4gbnVsbH19Z2V0RHJhZ0FyZWEobCxhLGQpe2NvbnN0W2gsZix2LE1dPWwsW0QsWixyZSxjZV09YTtzd2l0Y2goZCl7Y2FzZSJ1cCI6cmV0dXJuW0QsWixoLTEsTV07Y2FzZSJkb3duIjp7Y29uc3QgYmU9dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0KHJlLE0pO3JldHVyblt2''@;'; put 'put ''KzEsZixyZSsoYmU/YmUucm93c3Bhbi0xOjApLE1dfWNhc2UibGVmdCI6cmV0dXJuW0QsWix2LGYtMV07Y2FzZSJyaWdodCI6e2NvbnN0IGJlPXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldChyZSxNKTtyZXR1cm5baCxNKyhiZT9iZS5jb2xzcGFuLTE6MCkscmUsY2VdfWRlZmF1bHQ6''@;'; put 'put ''cmV0dXJuIG51bGx9fWdldEZhcnRoZXN0Q29sbGVjdGlvbihsLGEsZCxoKXtjb25zdFtmLHYsTSxEXT1sLFo9WyJ1cCIsImRvd24iXS5pbmRleE9mKGQpPi0xLHJlPVo/TTpELGNlPVo/Zjp2LGJlPXRoaXMuZ2V0QXV0b2ZpbGxTaXplKGwsYSxkKSxFZT1aP00tZisxOkQtdisxLHFlPWJlLU1h''@;'; put 'put ''dGguZmxvb3IoYmUvRWUpKkVlO2xldCBydD1udWxsLHB0PW51bGwsZHQ9bnVsbDtzd2l0Y2goZCl7Y2FzZSJ1cCI6cnQ9ImluY2x1ZGVzVmVydGljYWxseSIsZHQ9cmUtcWUrMTticmVhaztjYXNlImxlZnQiOnJ0PSJpbmNsdWRlc0hvcml6b250YWxseSIsZHQ9cmUtcWUrMTticmVhaztjYXNl''@;'; put 'put ''ImRvd24iOnJ0PSJpbmNsdWRlc1ZlcnRpY2FsbHkiLGR0PWNlK3FlLTE7YnJlYWs7Y2FzZSJyaWdodCI6cnQ9ImluY2x1ZGVzSG9yaXpvbnRhbGx5IixkdD1jZStxZS0xfXJldHVybiBZbihoLEp0PT57SnRbcnRdKGR0KSYmSnQuaXNGYXJ0aGVyKHB0LGQpJiYocHQ9SnQpfSkscHR9cmVjcmVh''@;'; put 'put ''dGVBZnRlckRhdGFQb3B1bGF0aW9uKGwpe2lmKCF0aGlzLmN1cnJlbnRGaWxsRGF0YSlyZXR1cm47Y29uc3QgYT10aGlzLmdldFJhbmdlRnJvbUNoYW5nZXMobCksZD10aGlzLmN1cnJlbnRGaWxsRGF0YS5mb3VuZE1lcmdlZENlbGxzLGg9dGhpcy5jdXJyZW50RmlsbERhdGEuZHJhZ0RpcmVj''@;'; put 'put ''dGlvbixmPShaLHJlKT0+e3N3aXRjaChoKXtjYXNlInVwIjpyZXR1cm4gWi5yb3ctcmU+PWEuZnJvbS5yb3c7Y2FzZSJkb3duIjpyZXR1cm4gWi5yb3crWi5yb3dzcGFuLTErcmU8PWEudG8ucm93O2Nhc2UibGVmdCI6cmV0dXJuIFouY29sLXJlPj1hLmZyb20uY29sdW1uO2Nhc2UicmlnaHQi''@;'; put 'put ''OnJldHVybiBaLmNvbCtaLmNvbHNwYW4tMStyZTw9YS50by5jb2x1bW47ZGVmYXVsdDpyZXR1cm4gbnVsbH19O2xldCB2PTAsTT1udWxsLEQ9MTtkb3tmb3IobGV0IFo9MDtaPGQubGVuZ3RoO1orPTEpe2lmKE09ZFtaXSx2PUQqdGhpcy5jdXJyZW50RmlsbERhdGEuY3ljbGVMZW5ndGgsZihN''@;'; put 'put ''LHYpKXN3aXRjaChoKXtjYXNlInVwIjp0aGlzLnBsdWdpbi5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uYWRkKHtyb3c6TS5yb3ctdixyb3dzcGFuOk0ucm93c3Bhbixjb2w6TS5jb2wsY29sc3BhbjpNLmNvbHNwYW59LCEwKTticmVhaztjYXNlImRvd24iOnRoaXMucGx1Z2luLm1lcmdlZENlbGxz''@;'; put 'put ''Q29sbGVjdGlvbi5hZGQoe3JvdzpNLnJvdyt2LHJvd3NwYW46TS5yb3dzcGFuLGNvbDpNLmNvbCxjb2xzcGFuOk0uY29sc3Bhbn0sITApO2JyZWFrO2Nhc2UibGVmdCI6dGhpcy5wbHVnaW4ubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmFkZCh7cm93Ok0ucm93LHJvd3NwYW46TS5yb3dzcGFuLGNv''@;'; put 'put ''bDpNLmNvbC12LGNvbHNwYW46TS5jb2xzcGFufSwhMCk7YnJlYWs7Y2FzZSJyaWdodCI6dGhpcy5wbHVnaW4ubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmFkZCh7cm93Ok0ucm93LHJvd3NwYW46TS5yb3dzcGFuLGNvbDpNLmNvbCt2LGNvbHNwYW46TS5jb2xzcGFufSwhMCl9Wj09PWQubGVuZ3Ro''@;'; put 'put ''LTEmJihEKz0xKX19d2hpbGUoZihNLHYpKTt0aGlzLmN1cnJlbnRGaWxsRGF0YT1udWxsLHRoaXMucGx1Z2luLmhvdC5yZW5kZXIoKSxkLmxlbmd0aD4wJiZ0aGlzLnBsdWdpbi5pZkNocm9tZUZvcmNlUmVwYWludCgpfWdldFJhbmdlRnJvbUNoYW5nZXMobCl7Y29uc3QgYT17bWluOm51bGws''@;'; put 'put ''bWF4Om51bGx9LGQ9e21pbjpudWxsLG1heDpudWxsfTtyZXR1cm4gWW4obCxoPT57Y29uc3QgZj1oWzBdLHY9dGhpcy5wbHVnaW4uaG90LnByb3BUb0NvbChoWzFdKTsobnVsbD09PWEubWlufHxmPGEubWluKSYmKGEubWluPWYpLChudWxsPT09YS5tYXh8fGY+YS5tYXgpJiYoYS5tYXg9Ziks''@;'; put 'put ''KG51bGw9PT1kLm1pbnx8djxkLm1pbikmJihkLm1pbj12KSwobnVsbD09PWQubWF4fHx2PmQubWF4KSYmKGQubWF4PXYpfSkse2Zyb206e3JvdzphLm1pbixjb2x1bW46ZC5taW59LHRvOntyb3c6YS5tYXgsY29sdW1uOmQubWF4fX19ZHJhZ0FyZWFPdmVybGFwc0NvbGxlY3Rpb25zKGwsYSxk''@;'; put 'put ''KXtjb25zdCBoPXRoaXMuZ2V0RHJhZ0FyZWEobCxhLGQpLFtmLHYsTSxEXT1oLFo9dGhpcy5wbHVnaW4uaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGYsdikscmU9dGhpcy5wbHVnaW4uaG90Ll9jcmVhdGVDZWxsQ29vcmRzKE0sRCksY2U9dGhpcy5wbHVnaW4uaG90Ll9jcmVhdGVDZWxsUmFuZ2Uo''@;'; put 'put ''WixaLHJlKTtpZigwPT09dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0V2l0aGluUmFuZ2UoY2UsITApLmxlbmd0aClyZXR1cm4hMTtjb25zdCBFZT10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXRXaXRoaW5SYW5nZShjZSwhMSk7cmV0dXJuIDA9PT1FZS5sZW5ndGh8fCgidXAi''@;'; put 'put ''PT09ZHx8ImRvd24iPT09ZD8hRWUuZXZlcnkoQmU9PntsZXR7Y29sc3BhbjpxZX09QmU7cmV0dXJuIHFlPT09Y2UuZ2V0V2lkdGgoKX0pOiFFZS5ldmVyeShCZT0+e2xldHtyb3dzcGFuOnFlfT1CZTtyZXR1cm4gcWU9PT1jZS5nZXRIZWlnaHQoKX0pKX19O2Z1bmN0aW9uIEtRKGMsbCxhKXty''@;'; put 'put ''ZXR1cm4obD1mdW5jdGlvbiBLM3QoYyl7dmFyIGw9ZnVuY3Rpb24gcTN0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0''@;'; put 'put ''IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/''@;'; put 'put ''bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jb25zdCBKM3Q9Y2xhc3MgWDN0e2NvbnN0cnVjdG9yKGwpe0tRKHRoaXMsInBsdWdpbiIsdm9pZCAwKSxL''@;'; put 'put ''USh0aGlzLCJob3QiLHZvaWQgMCksS1EodGhpcywiZnVsbHlTZWxlY3RlZE1lcmdlZENlbGxDbGFzc05hbWUiLCJmdWxseVNlbGVjdGVkTWVyZ2VkQ2VsbCIpLHRoaXMucGx1Z2luPWwsdGhpcy5ob3Q9bC5ob3R9Z2V0U2VsZWN0ZWRNZXJnZWRDZWxsQ2xhc3NOYW1lKGwsYSxkLGgpe2NvbnN0''@;'; put 'put ''IGY9TWF0aC5taW4oZFswXSxkWzJdKSx2PU1hdGgubWluKGRbMV0sZFszXSksTT1NYXRoLm1heChkWzBdLGRbMl0pLEQ9TWF0aC5tYXgoZFsxXSxkWzNdKTtpZih2b2lkIDA9PT1ofHwhdGhpcy5wbHVnaW4ubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmlzRmlyc3RSZW5kZXJhYmxlTWVyZ2VkQ2Vs''@;'; put 'put ''bChsLGEpKXJldHVybjtjb25zdCByZT10aGlzLnBsdWdpbi5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0KGwsYSk7aWYoIXJlKXJldHVybjtjb25zdCBjZT1yZS5nZXRMYXN0Um93KCksYmU9cmUuZ2V0TGFzdENvbHVtbigpO3JldHVybiBmPD1yZS5yb3cmJnY8PXJlLmNvbCYmTT49Y2UmJkQ+''@;'; put 'put ''PWJlP2Ake3RoaXMuZnVsbHlTZWxlY3RlZE1lcmdlZENlbGxDbGFzc05hbWV9LSR7aH1gOnRoaXMuaXNNZXJnZUNlbGxGdWxseVNlbGVjdGVkKHJlLHRoaXMucGx1Z2luLmhvdC5nZXRTZWxlY3RlZFJhbmdlKCkpP2Ake3RoaXMuZnVsbHlTZWxlY3RlZE1lcmdlZENlbGxDbGFzc05hbWV9LW11''@;'; put 'put ''bHRpcGxlYDp2b2lkIDB9aXNNZXJnZUNlbGxGdWxseVNlbGVjdGVkKGwsYSl7Y29uc3QgZD1bXTtpZighYXx8IWwpcmV0dXJuITE7Zm9yKGxldCBoPTA7aDxsLnJvd3NwYW47aCs9MSlmb3IobGV0IGY9MDtmPGwuY29sc3BhbjtmKz0xKWQucHVzaCh0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3Jk''@;'; put 'put ''cyhsLnJvdytoLGwuY29sK2YpKTtmb3IobGV0IGg9MDtoPGQubGVuZ3RoO2grPTEpe2NvbnN0IGY9W107Zm9yKGxldCB2PTA7djxhLmxlbmd0aDt2Kz0xKWZbdl09YVt2XS5pbmNsdWRlcyhkW2hdKTtpZighZi5pbmNsdWRlcyghMCkpcmV0dXJuITF9cmV0dXJuITB9Z2V0U2VsZWN0ZWRNZXJn''@;'; put 'put ''ZWRDZWxsQ2xhc3NOYW1lVG9SZW1vdmUoKXtjb25zdCBsPVtdO2ZvcihsZXQgYT0wO2E8PTc7YSs9MSlsLnB1c2goYCR7dGhpcy5mdWxseVNlbGVjdGVkTWVyZ2VkQ2VsbENsYXNzTmFtZX0tJHthfWApO3JldHVybiBsLnB1c2goYCR7dGhpcy5mdWxseVNlbGVjdGVkTWVyZ2VkQ2VsbENsYXNz''@;'; put 'put ''TmFtZX0tbXVsdGlwbGVgKSxsfX07ZnVuY3Rpb24gZkEoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIGVwdChjKXt2YXIgbD1mdW5jdGlvbiB0cHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1h''@;'; put 'put ''KXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlciko''@;'; put 'put ''Yyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIHdtZXtjb25zdHJ1Y3Rv''@;'; put 'put ''cihsKXtmQSh0aGlzLCJkYXRhIix2b2lkIDApLGZBKHRoaXMsIm5leHQiLG51bGwpLGZBKHRoaXMsInByZXYiLG51bGwpLHRoaXMuZGF0YT1sfX1jb25zdCB4SD1jbGFzcyBucHR7Y29uc3RydWN0b3IoKXtmQSh0aGlzLCJmaXJzdCIsbnVsbCksZkEodGhpcywibGFzdCIsbnVsbCl9cHVzaChs''@;'; put 'put ''KXtjb25zdCBhPW5ldyB3bWUobCk7aWYobnVsbD09PXRoaXMuZmlyc3QpdGhpcy5maXJzdD1hLHRoaXMubGFzdD1hO2Vsc2V7Y29uc3QgZD10aGlzLmxhc3Q7dGhpcy5sYXN0PWEsYS5wcmV2PWQsZC5uZXh0PWF9cmV0dXJuIGF9dW5zaGlmdChsKXtjb25zdCBhPW5ldyB3bWUobCk7aWYobnVs''@;'; put 'put ''bD09PXRoaXMuZmlyc3QpdGhpcy5maXJzdD1hLHRoaXMubGFzdD1hO2Vsc2V7Y29uc3QgZD10aGlzLmZpcnN0O3RoaXMuZmlyc3Q9YSxhLm5leHQ9ZCxkLnByZXY9YX19aW5vcmRlcihsKXtsZXQgYT10aGlzLmZpcnN0O2Zvcig7YTspe2NvbnN0IGQ9bChhKTtpZihhPT09dGhpcy5sYXN0fHwh''@;'; put 'put ''MD09PWQpYnJlYWs7YT1hLm5leHR9fXJlbW92ZShsKXtpZihudWxsPT09dGhpcy5maXJzdClyZXR1cm4hMTtsZXQgZCxoLGE9dGhpcy5maXJzdDtmb3IoO2E7KXtpZihhLmRhdGE9PT1sKXJldHVybiBkPWEubmV4dCxoPWEucHJldixkJiYoZC5wcmV2PWgpLGgmJihoLm5leHQ9ZCksYT09PXRo''@;'; put 'put ''aXMuZmlyc3QmJih0aGlzLmZpcnN0PWQpLGE9PT10aGlzLmxhc3QmJih0aGlzLmxhc3Q9aCksITA7YT1hLm5leHR9cmV0dXJuITF9aGFzQ3ljbGUoKXtsZXQgbD10aGlzLmZpcnN0LGE9dGhpcy5maXJzdDtmb3IoOzspe2lmKG51bGw9PT1sfHwobD1sLm5leHQsbnVsbD09PWwpKXJldHVybiEx''@;'; put 'put ''O2lmKGw9bC5uZXh0LGE9YS5uZXh0LGw9PT1hKXJldHVybiEwfX1wb3AoKXtpZihudWxsPT09dGhpcy5sYXN0KXJldHVybiBudWxsO2NvbnN0IGw9dGhpcy5sYXN0O3JldHVybiB0aGlzLmxhc3Q9dGhpcy5sYXN0LnByZXYsbH1zaGlmdCgpe2lmKG51bGw9PT10aGlzLmZpcnN0KXJldHVybiBu''@;'; put 'put ''dWxsO2NvbnN0IGw9dGhpcy5maXJzdDtyZXR1cm4gdGhpcy5maXJzdD10aGlzLmZpcnN0Lm5leHQsbH1yZWN1cnNpdmVSZXZlcnNlKCl7aWYoIXRoaXMuZmlyc3QpcmV0dXJuOyhmdW5jdGlvbiBsKGQsaCl7aCYmKGwoaCxoLm5leHQpLGgubmV4dD1kKX0pKHRoaXMuZmlyc3QsdGhpcy5maXJz''@;'; put 'put ''dC5uZXh0KSx0aGlzLmZpcnN0Lm5leHQ9bnVsbDtjb25zdCBhPXRoaXMuZmlyc3Q7dGhpcy5maXJzdD10aGlzLmxhc3QsdGhpcy5sYXN0PWF9cmV2ZXJzZSgpe2lmKCF0aGlzLmZpcnN0fHwhdGhpcy5maXJzdC5uZXh0KXJldHVybjtsZXQgZCxsPXRoaXMuZmlyc3QubmV4dCxhPXRoaXMuZmly''@;'; put 'put ''c3Q7Zm9yKDtsOylkPWwubmV4dCxsLm5leHQ9YSxhLnByZXY9bCxhPWwsbD1kO3RoaXMuZmlyc3QubmV4dD1udWxsLHRoaXMubGFzdC5wcmV2PW51bGwsZD10aGlzLmZpcnN0LHRoaXMuZmlyc3Q9YSx0aGlzLmxhc3Q9ZH19O2Z1bmN0aW9uIFU5KGMsbCxhKXtDbWUoYyxsKSxsLnNldChjLGEp''@;'; put 'put ''fWZ1bmN0aW9uIENtZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gdmwoYyxsKXtyZXR1cm4gYy5nZXQoRUgoYyxsKSl9ZnVuY3Rpb24g''@;'; put 'put ''VWgoYyxsLGEpe3JldHVybiBjLnNldChFSChjLGwpLGEpLGF9ZnVuY3Rpb24gRUgoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBu''@;'; put 'put ''b3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciBYcD1uZXcgV2Vha01hcCxKcD1uZXcgV2Vha01hcCxRcD1uZXcgV2Vha01hcCxlND1uZXcgV2Vha01hcCxxUT1uZXcgV2Vha01hcCxUSD1uZXcgV2Vha01hcCxBSD1uZXcgV2Vha01hcCxYUT1uZXcgV2Vha1NldDtjbGFzcyBpcHR7Y29u''@;'; put 'put ''c3RydWN0b3IobCl7bGV0e21lcmdlZENlbGxzR2V0dGVyOmEscm93SW5kZXhNYXBwZXI6ZCxjb2x1bW5JbmRleE1hcHBlcjpofT1sOyhmdW5jdGlvbiBycHQoYyxsKXtDbWUoYyxsKSxsLmFkZChjKX0pKHRoaXMsWFEpLFU5KHRoaXMsWHAsbmV3IHhIKSxVOSh0aGlzLEpwLG5ldyB4SCksVTko''@;'; put 'put ''dGhpcyxRcCxudWxsKSxVOSh0aGlzLGU0LG51bGwpLFU5KHRoaXMscVEsbnVsbCksVTkodGhpcyxUSCxudWxsKSxVOSh0aGlzLEFILG51bGwpLFVoKHFRLHRoaXMsYSksVWgoVEgsdGhpcyxkKSxVaChBSCx0aGlzLGgpfWdldEN1cnJlbnRWZXJ0aWNhbE5vZGUoKXtyZXR1cm4gdmwoZTQsdGhp''@;'; put 'put ''cykuZGF0YX1nZXRGaXJzdFZlcnRpY2FsTm9kZSgpe3JldHVybiB2bChKcCx0aGlzKS5maXJzdC5kYXRhfWdldE5leHRWZXJ0aWNhbE5vZGUoKXtyZXR1cm4gdmwoZTQsdGhpcykubmV4dC5kYXRhfWdldFByZXZWZXJ0aWNhbE5vZGUoKXtyZXR1cm4gdmwoZTQsdGhpcykucHJldi5kYXRhfWdl''@;'; put 'put ''dEN1cnJlbnRIb3Jpem9udGFsTm9kZSgpe3JldHVybiB2bChRcCx0aGlzKS5kYXRhfWdldEZpcnN0SG9yaXpvbnRhbE5vZGUoKXtyZXR1cm4gdmwoWHAsdGhpcykuZmlyc3QuZGF0YX1nZXROZXh0SG9yaXpvbnRhbE5vZGUoKXtyZXR1cm4gdmwoUXAsdGhpcykubmV4dC5kYXRhfWdldFByZXZI''@;'; put 'put ''b3Jpem9udGFsTm9kZSgpe3JldHVybiB2bChRcCx0aGlzKS5wcmV2LmRhdGF9c2V0UHJldk5vZGVBc0FjdGl2ZSgpe1VoKGU0LHRoaXMsdmwoZTQsdGhpcykucHJldiksVWgoUXAsdGhpcyx2bChRcCx0aGlzKS5wcmV2KX1zZXROZXh0Tm9kZUFzQWN0aXZlKCl7VWgoZTQsdGhpcyx2bChlNCx0''@;'; put 'put ''aGlzKS5uZXh0KSxVaChRcCx0aGlzLHZsKFFwLHRoaXMpLm5leHQpfWJ1aWxkRm9jdXNPcmRlcihsKXtjb25zdCBhPWwuZ2V0VG9wU3RhcnRDb3JuZXIoKSxkPWwuZ2V0Qm90dG9tRW5kQ29ybmVyKCksaD1uZXcgV2Vha1NldDtVaChYcCx0aGlzLG5ldyB4SCk7Zm9yKGxldCB2PWEucm93O3Y8''@;'; put 'put ''PWQucm93O3YrKylpZighdmwoVEgsdGhpcykuaXNIaWRkZW4odikpZm9yKGxldCBNPWEuY29sO008PWQuY29sO00rKyl7aWYodmwoQUgsdGhpcykuaXNIaWRkZW4oTSkpY29udGludWU7Y29uc3QgRD1FSChYUSx0aGlzLFNtZSkuY2FsbCh0aGlzLGwsdmwoWHAsdGhpcyksaCx2LE0pO0QmJlVo''@;'; put 'put ''KFFwLHRoaXMsRCl9dmwoWHAsdGhpcykuZmlyc3QmJih2bChYcCx0aGlzKS5maXJzdC5wcmV2PXZsKFhwLHRoaXMpLmxhc3QsdmwoWHAsdGhpcykubGFzdC5uZXh0PXZsKFhwLHRoaXMpLmZpcnN0KTtjb25zdCBmPW5ldyBXZWFrU2V0O1VoKEpwLHRoaXMsbmV3IHhIKTtmb3IobGV0IHY9YS5j''@;'; put 'put ''b2w7djw9ZC5jb2w7disrKWlmKCF2bChBSCx0aGlzKS5pc0hpZGRlbih2KSlmb3IobGV0IE09YS5yb3c7TTw9ZC5yb3c7TSsrKXtpZih2bChUSCx0aGlzKS5pc0hpZGRlbihNKSljb250aW51ZTtjb25zdCBEPUVIKFhRLHRoaXMsU21lKS5jYWxsKHRoaXMsbCx2bChKcCx0aGlzKSxmLE0sdik7''@;'; put 'put ''RCYmVWgoZTQsdGhpcyxEKX12bChKcCx0aGlzKS5maXJzdCYmKHZsKEpwLHRoaXMpLmZpcnN0LnByZXY9dmwoSnAsdGhpcykubGFzdCx2bChKcCx0aGlzKS5sYXN0Lm5leHQ9dmwoSnAsdGhpcykuZmlyc3QpfXNldEFjdGl2ZU5vZGUobCxhKXtyZXR1cm4gdmwoWHAsdGhpcykuaW5vcmRlcihk''@;'; put 'put ''PT57Y29uc3R7cm93U3RhcnQ6aCxyb3dFbmQ6Zixjb2xTdGFydDp2LGNvbEVuZDpNfT1kLmRhdGE7aWYobD49aCYmbDw9ZiYmYT49diYmYTw9TSlyZXR1cm4gVWgoUXAsdGhpcyxkKSwhMX0pLHZsKEpwLHRoaXMpLmlub3JkZXIoZD0+e2NvbnN0e3Jvd1N0YXJ0Omgscm93RW5kOmYsY29sU3Rh''@;'; put 'put ''cnQ6dixjb2xFbmQ6TX09ZC5kYXRhO2lmKGw+PWgmJmw8PWYmJmE+PXYmJmE8PU0pcmV0dXJuIFVoKGU0LHRoaXMsZCksITF9KSx0aGlzfX1mdW5jdGlvbiBTbWUoYyxsLGEsZCxoKXtjb25zdCBmPWMuZ2V0VG9wU3RhcnRDb3JuZXIoKSx2PWMuZ2V0Qm90dG9tRW5kQ29ybmVyKCksTT1jLmhp''@;'; put 'put ''Z2hsaWdodC5jbG9uZSgpLm5vcm1hbGl6ZSgpLEQ9dmwocVEsdGhpcykuY2FsbCh0aGlzLGQsaCk7aWYoRCYmYS5oYXMoRCkpcmV0dXJuIG51bGw7Y29uc3QgWj17Y29sU3RhcnQ6aCxjb2xFbmQ6aCxyb3dTdGFydDpkLHJvd0VuZDpkfTtpZihEKXtpZihhLmFkZChEKSxELnJvdzxmLnJvd3x8''@;'; put 'put ''RC5yb3crRC5yb3dzcGFuLTE+di5yb3d8fEQuY29sPGYuY29sfHxELmNvbCtELmNvbHNwYW4tMT52LmNvbClyZXR1cm4gbnVsbDtaLmNvbFN0YXJ0PUQuY29sLFouY29sRW5kPUQuY29sK0QuY29sc3Bhbi0xLFoucm93U3RhcnQ9RC5yb3csWi5yb3dFbmQ9RC5yb3crRC5yb3dzcGFuLTF9Y29u''@;'; put 'put ''c3QgcmU9bC5wdXNoKFopO3JldHVybiBkPT09TS5yb3cmJmg9PT1NLmNvbHx8RCYmTS5yb3c+PUQucm93JiZNLnJvdzw9RC5yb3crRC5yb3dzcGFuLTEmJk0uY29sPj1ELmNvbCYmTS5jb2w8PUQuY29sK0QuY29sc3Bhbi0xP3JlOm51bGx9ZnVuY3Rpb24gTW1lKGMsbCxhKXtjb25zdHt2aWV3''@;'; put 'put ''OmQscm93SW5kZXhNYXBwZXI6aH09YyxmPWQuZ2V0U3R5bGVzSGFuZGxlcigpLHY9ZC5nZXREZWZhdWx0Um93SGVpZ2h0KCk7bGV0IE09MDtmb3IobGV0IFo9bDtaPGwrYTtaKyspaWYoIWguaXNIaWRkZW4oWikpe3ZhciBEO00rPW51bGwhPT0oRD1jLmdldFJvd0hlaWdodChaKSkmJnZvaWQg''@;'; put 'put ''MCE9PUQ/RDp2LDA9PT1aJiYhZi5pc0NsYXNzaWNUaGVtZSgpJiYoTSs9MSl9cmV0dXJuIE19ZnVuY3Rpb24ga0goYyxsLGEpe3htZShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24geG1lKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhl''@;'; put 'put ''IHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBKUShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gc3B0KGMpe3ZhciBsPWZ1bmN0aW9uIGxwdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9Q''@;'; put 'put ''cmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJp''@;'; put 'put ''bmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1h''@;'; put 'put ''LGN9ZnVuY3Rpb24gcEEoYyxsLGEpe3JldHVybiBjLnNldChrbChjLGwpLGEpLGF9ZnVuY3Rpb24gdGMoYyxsKXtyZXR1cm4gYy5nZXQoa2woYyxsKSl9ZnVuY3Rpb24ga2woYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVu''@;'; put 'put ''Z3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfVNhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVNZXJnZUNlbGxzIiksU2EuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyTWVyZ2VD''@;'; put 'put ''ZWxscyIpLFNhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVVbm1lcmdlQ2VsbHMiKSxTYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJVbm1lcmdlQ2VsbHMiKTtjb25zdCBRUT0ibWVyZ2VDZWxscyIsRW1lPVFRO3ZhciBRMj1uZXcgV2Vha01hcCxlZj1uZXcgV2Vha01h''@;'; put 'put ''cCx0ND1uZXcgV2Vha01hcCxUbWU9bmV3IFdlYWtNYXAsVmw9bmV3IFdlYWtTZXQ7Y2xhc3MgdXB0IGV4dGVuZHMgRnN7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIG9wdChjLGwpe3htZShjLGwpLGwuYWRkKGMpfSh0aGlzLFZsKSxKUSh0aGlzLCJtZXJnZWRD''@;'; put 'put ''ZWxsc0NvbGxlY3Rpb24iLG51bGwpLEpRKHRoaXMsImF1dG9maWxsQ2FsY3VsYXRpb25zIixudWxsKSxKUSh0aGlzLCJzZWxlY3Rpb25DYWxjdWxhdGlvbnMiLG51bGwpLGtIKHRoaXMsUTIsbnVsbCksa0godGhpcyxlZix7cm93OjAsY29sOjB9KSxrSCh0aGlzLHQ0LG5ldyBpcHQoe21lcmdl''@;'; put 'put ''ZENlbGxzR2V0dGVyOihsLGEpPT50aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXQobCxhKSxyb3dJbmRleE1hcHBlcjp0aGlzLmhvdC5yb3dJbmRleE1hcHBlcixjb2x1bW5JbmRleE1hcHBlcjp0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlcn0pKSxrSCh0aGlzLFRtZSxmdW5jdGlvbiBh''@;'; put 'put ''cHQoYyl7Y29uc3R7aG90Omx9PWMse3Jvd0luZGV4TWFwcGVyOmEsY29sdW1uSW5kZXhNYXBwZXI6ZH09bCxoPW5ldyBNYXA7cmV0dXJue2JlZm9yZTpmdW5jdGlvbiBmKCl7fSxhZnRlcjpmdW5jdGlvbiB2KE0sRCxaKXtjb25zdCByZT1jLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXQoRCxa''@;'; put 'put ''KTtpZighcW8ocmUpKXJldHVybiBNLnJlbW92ZUF0dHJpYnV0ZSgicm93c3BhbiIpLE0ucmVtb3ZlQXR0cmlidXRlKCJjb2xzcGFuIiksQUUoKSYmaC5oYXMoRCkmJiFsLmdldFNldHRpbmdzKCkucm93SGVhZGVycyYmKE0uc3R5bGUuaGVpZ2h0PWAke2guZ2V0KEQpfXB4YCxoLmRlbGV0ZShE''@;'; put 'put ''KSksdm9pZChNLnN0eWxlLmRpc3BsYXk9IiIpO2NvbnN0e3JvdzpjZSxjb2w6YmUsY29sc3BhbjpFZSxyb3dzcGFuOkJlfT1yZSxbcWUscnRdPWMudHJhbnNsYXRlTWVyZ2VkQ2VsbFRvUmVuZGVyYWJsZShjZSxCZSxiZSxFZSkscHQ9Yy5nZXRTZXR0aW5nKCJ2aXJ0dWFsaXplZCIpO2lmKEFF''@;'; put 'put ''KCkmJjA9PT1iZSYmIWwuZ2V0U2V0dGluZ3MoKS5yb3dIZWFkZXJzKXtjb25zdCBtcj1NbWUobCxjZSxCZSk7aC5zZXQoRCxtci9CZSl9Y29uc3Qgdm49cWUtYS5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KEQpKzEsQ249cnQtZC5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KFop''@;'; put 'put ''KzE7bGV0IHRuPWEuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGNlLDEpLE1uPWQuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGJlLDEpO2lmKHB0KXtjb25zdCBtcj1sLnZpZXcuZ2V0QWN0aXZlT3ZlcmxheU5hbWUoKTtbInRvcCIsInRvcF9pbmxpbmVfc3RhcnRfY29ybmVyIl0uaW5jbHVk''@;'; put 'put ''ZXMobXIpfHwodG49TWF0aC5tYXgodG4sbC5nZXRGaXJzdFJlbmRlcmVkVmlzaWJsZVJvdygpKSksWyJpbmxpbmVfc3RhcnQiLCJ0b3BfaW5saW5lX3N0YXJ0X2Nvcm5lciIsImJvdHRvbV9pbmxpbmVfc3RhcnRfY29ybmVyIl0uaW5jbHVkZXMobXIpfHwoTW49TWF0aC5tYXgoTW4sbC5nZXRG''@;'; put 'put ''aXJzdFJlbmRlcmVkVmlzaWJsZUNvbHVtbigpKSl9Y29uc3QgQ3I9TWF0aC5taW4oQmUsdm4pLEdyPU1hdGgubWluKEVlLENuKTt0bj09PUQmJk1uPT09Wj8oTS5zZXRBdHRyaWJ1dGUoInJvd3NwYW4iLENyKSxNLnNldEF0dHJpYnV0ZSgiY29sc3BhbiIsR3IpKTooTS5yZW1vdmVBdHRyaWJ1''@;'; put 'put ''dGUoInJvd3NwYW4iKSxNLnJlbW92ZUF0dHJpYnV0ZSgiY29sc3BhbiIpLE0uc3R5bGUuZGlzcGxheT0ibm9uZSIpfX19KHRoaXMpKX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gUVF9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMTUwfXN0YXRpYyBnZXQgREVG''@;'; put 'put ''QVVMVF9TRVRUSU5HUygpe3JldHVybntbQzRlXToiY2VsbHMiLHZpcnR1YWxpemVkOiExLGNlbGxzOltdfX1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbUVFdfWVuYWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7dGhpcy5lbmFibGVkfHwodGhpcy5tZXJnZWRDZWxs''@;'; put 'put ''c0NvbGxlY3Rpb249bmV3IFozdCh0aGlzKSx0aGlzLmF1dG9maWxsQ2FsY3VsYXRpb25zPW5ldyAkM3QodGhpcyksdGhpcy5zZWxlY3Rpb25DYWxjdWxhdGlvbnM9bmV3IEozdCh0aGlzKSx0aGlzLmFkZEhvb2soImFmdGVySW5pdCIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxl''@;'; put 'put ''bmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4ga2woVmwsbCxkcHQpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygibW9kaWZ5VHJhbnNmb3JtRm9jdXMiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcg''@;'; put 'put ''QXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGtsKFZsLGwsZnB0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soIm1vZGlmeVRyYW5zZm9ybVN0YXJ0IixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9''@;'; put 'put ''MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBrbChWbCxsLHBwdCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJtb2RpZnlUcmFuc2Zvcm1FbmQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFto''@;'; put 'put ''XT1hcmd1bWVudHNbaF07cmV0dXJuIGtsKFZsLGwsZ3B0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVNlbGVjdGlvbkhpZ2hsaWdodFNldCIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFy''@;'; put 'put ''Z3VtZW50c1toXTtyZXR1cm4ga2woVmwsbCxtcHQpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlU2V0UmFuZ2VTdGFydCIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTty''@;'; put 'put ''ZXR1cm4ga2woVmwsbCxrbWUpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlU2V0UmFuZ2VTdGFydE9ubHkiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGts''@;'; put 'put ''KFZsLGwsa21lKS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVNlbGVjdGlvbkZvY3VzU2V0IixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBrbChWbCxsLGJw''@;'; put 'put ''dCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJhZnRlclNlbGVjdGlvbkZvY3VzU2V0IixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBrbChWbCxsLHlwdCkuY2FsbChs''@;'; put 'put ''LC4uLmQpfSksdGhpcy5hZGRIb29rKCJhZnRlclNlbGVjdGlvbkVuZCIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4ga2woVmwsbCxfcHQpLmNhbGwobCwuLi5kKX0pLHRoaXMu''@;'; put 'put ''YWRkSG9vaygibW9kaWZ5R2V0Q2VsbENvb3JkcyIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4ga2woVmwsbCxBbWUpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygibW9k''@;'; put 'put ''aWZ5R2V0Q29vcmRzRWxlbWVudCIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4ga2woVmwsbCxBbWUpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJJc011bHRp''@;'; put 'put ''cGxlU2VsZWN0aW9uIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBrbChWbCxsLGhwdCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJhZnRlclJlbmRlcmVyIixmdW5j''@;'; put 'put ''dGlvbigpe3JldHVybiB0YyhUbWUsbCkuYWZ0ZXIoLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJn''@;'; put 'put ''dW1lbnRzW2hdO3JldHVybiBrbChWbCxsLHZwdCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJhZnRlckdldENlbGxNZXRhIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVy''@;'; put 'put ''biBrbChWbCxsLHdwdCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJhZnRlclZpZXdwb3J0Um93Q2FsY3VsYXRvck92ZXJyaWRlIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3Jl''@;'; put 'put ''dHVybiBrbChWbCxsLENwdCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJhZnRlclZpZXdwb3J0Q29sdW1uQ2FsY3VsYXRvck92ZXJyaWRlIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRz''@;'; put 'put ''W2hdO3JldHVybiBrbChWbCxsLFNwdCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJtb2RpZnlBdXRvZmlsbFJhbmdlIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBr''@;'; put 'put ''bChWbCxsLE1wdCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJhZnRlckNyZWF0ZUNvbCIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4ga2woVmwsbCx4cHQpLmNhbGwo''@;'; put 'put ''bCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJSZW1vdmVDb2wiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGtsKFZsLGwsRXB0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFk''@;'; put 'put ''ZEhvb2soImFmdGVyQ3JlYXRlUm93IixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBrbChWbCxsLFRwdCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJhZnRlclJlbW92''@;'; put 'put ''ZVJvdyIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4ga2woVmwsbCxBcHQpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJDaGFuZ2UiLGZ1bmN0aW9uKCl7Zm9y''@;'; put 'put ''KHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGtsKFZsLGwsa3B0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZURyYXdCb3JkZXJzIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVu''@;'; put 'put ''dHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBrbChWbCxsLERwdCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJhZnRlckRyYXdTZWxlY3Rpb24iLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1u''@;'; put 'put ''ZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGtsKFZsLGwsSXB0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVJlbW92ZUNlbGxDbGFzc05hbWVzIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFy''@;'; put 'put ''cmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBrbChWbCxsLFJwdCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVCZWdpbkVkaXRpbmciLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8''@;'; put 'put ''YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGtsKFZsLGwsTHB0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soIm1vZGlmeVJvd0hlaWdodEJ5T3ZlcmxheU5hbWUiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTto''@;'; put 'put ''KyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGtsKFZsLGwsT3B0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVVuZG9TdGFja0NoYW5nZSIsKGEsZCk9PntpZigiTWVyZ2VDZWxscyI9PT1kKXJldHVybiExfSksdGhpcy5yZWdpc3RlclNob3J0Y3V0cygpLHN1cGVyLmVu''@;'; put 'put ''YWJsZVBsdWdpbigpKX1kaXNhYmxlUGx1Z2luKCl7dGhpcy5jbGVhckNvbGxlY3Rpb25zKCksdGhpcy51bnJlZ2lzdGVyU2hvcnRjdXRzKCksdGhpcy5ob3QucmVuZGVyKCksc3VwZXIuZGlzYWJsZVBsdWdpbigpfXVwZGF0ZVBsdWdpbigpe3RoaXMuZGlzYWJsZVBsdWdpbigpLHRoaXMuZW5h''@;'; put 'put ''YmxlUGx1Z2luKCksdGhpcy5nZW5lcmF0ZUZyb21TZXR0aW5ncygpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWlmQ2hyb21lRm9yY2VSZXBhaW50KCl7aWYoIUwkKCkpcmV0dXJuO2NvbnN0IGw9W107bGV0IGE9W107dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24ubWVyZ2VkQ2VsbHMuZm9yRWFj''@;'; put 'put ''aChkPT57Y29uc3R7cm93Omgscm93c3BhbjpmfT1kO2ZvcihsZXQgdj1oKzE7djxoK2Y7disrKWEucHVzaCh2KX0pLGE9Wy4uLm5ldyBTZXQoYSldLGEuZm9yRWFjaChkPT57Y29uc3QgaD10aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGQpO3Ro''@;'; put 'put ''aXMuaG90LnZpZXcuX3d0Lnd0T3ZlcmxheXMuZ2V0T3ZlcmxheXMoITApLm1hcChmPT4ibWFzdGVyIj09PWY/Lm5hbWU/ZjpmLmNsb25lLnd0VGFibGUpLmZvckVhY2goZj0+e2NvbnN0IHY9Zi5nZXRSb3coaCk7diYmKHYuc3R5bGUuYmFja2dyb3VuZD1fRSh2LCJiYWNrZ3JvdW5kQ29sb3Ii''@;'; put 'put ''KS5yZXBsYWNlKCIpIiwiLCAwLjk5KSIpLGwucHVzaCh2KSl9KX0pLHRoaXMuaG90Ll9yZWdpc3RlclRpbWVvdXQoKCk9PntsLmZvckVhY2goZD0+e3ZhciBoO2Quc3R5bGUuYmFja2dyb3VuZD1udWxsPT09KGg9X0UoZCwiYmFja2dyb3VuZENvbG9yIikpfHx2b2lkIDA9PT1oP3ZvaWQgMDpo''@;'; put 'put ''LnJlcGxhY2UoIiwgMC45OSkiLCIpIil9KX0sMSl9dmFsaWRhdGVTZXR0aW5nKGwpe3JldHVybiEoIWx8fChxcC5jb250YWluc05lZ2F0aXZlVmFsdWVzKGwpPyhpbChxcC5ORUdBVElWRV9WQUxVRVNfV0FSTklORyhsKSksMSk6cXAuaXNPdXRPZkJvdW5kcyhsLHRoaXMuaG90LmNvdW50Um93''@;'; put 'put ''cygpLHRoaXMuaG90LmNvdW50Q29scygpKT8oaWwocXAuSVNfT1VUX09GX0JPVU5EU19XQVJOSU5HKGwpKSwxKTpxcC5pc1NpbmdsZUNlbGwobCk/KGlsKHFwLklTX1NJTkdMRV9DRUxMKGwpKSwxKTpxcC5jb250YWluc1plcm9TcGFuKGwpJiYoaWwocXAuWkVST19TUEFOX1dBUk5JTkcobCkp''@;'; put 'put ''LDEpKSl9Z2VuZXJhdGVGcm9tU2V0dGluZ3MoKXtjb25zdCBsPXRoaXMuZ2V0U2V0dGluZygiY2VsbHMiKS5maWx0ZXIoaD0+dGhpcy52YWxpZGF0ZVNldHRpbmcoaCkpLGE9dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZmlsdGVyT3ZlcmxhcHBpbmdNZXJnZUNlbGxzKGwpLGQ9W107YS5m''@;'; put 'put ''b3JFYWNoKGg9Pntjb25zdHtyb3c6Zixjb2w6dixyb3dzcGFuOk0sY29sc3BhbjpEfT1oLFo9dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoZix2KSxyZT10aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhmK00tMSx2K0QtMSksY2U9dGhpcy5ob3QuX2NyZWF0ZUNlbGxSYW5nZShaLFoscmUp''@;'; put 'put ''O3RoaXMubWVyZ2VSYW5nZShjZSwhMCwhMCk7Zm9yKGxldCBiZT1mO2JlPGYrTTtiZSsrKWZvcihsZXQgRWU9djtFZTx2K0Q7RWUrKykoYmUhPT1mfHxFZSE9PXYpJiZkLnB1c2goW2JlLEVlLG51bGxdKX0pLDAhPT1kLmxlbmd0aCYmdGhpcy5ob3Quc2V0RGF0YUF0Q2VsbChkLHZvaWQgMCx2''@;'; put 'put ''b2lkIDAsdGhpcy5wbHVnaW5OYW1lKX1jbGVhckNvbGxlY3Rpb25zKCl7dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uY2xlYXIoKX1jYW5NZXJnZVJhbmdlKGwpe3JldHVybiEhKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV0pfHx0aGlz''@;'; put 'put ''LnZhbGlkYXRlU2V0dGluZyhsKX1tZXJnZVNlbGVjdGlvbigpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp0aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO2lmKCFsKXJldHVybjtsLnNldERpcmVjdGlvbih0aGlzLmhv''@;'; put 'put ''dC5pc1J0bCgpPyJORS1TVyI6Ik5XLVNFIik7Y29uc3R7ZnJvbTphLHRvOmR9PWw7dGhpcy51bm1lcmdlUmFuZ2UobCwhMCksdGhpcy5tZXJnZVJhbmdlKGwpLHRoaXMuaG90LnNlbGVjdENlbGwoYS5yb3csYS5jb2wsZC5yb3csZC5jb2wsITEpfXVubWVyZ2VTZWxlY3Rpb24oKXtsZXQgbD1h''@;'; put 'put ''cmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtpZighbClyZXR1cm47Y29uc3R7ZnJvbTphLHRvOmR9PWw7dGhpcy51bm1lcmdlUmFuZ2UobCwhMCksdGhpcy5ob3Quc2VsZWN0Q2VsbChh''@;'; put 'put ''LnJvdyxhLmNvbCxkLnJvdyxkLmNvbCwhMSl9bWVyZ2VSYW5nZShsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdLGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXTtjb25z''@;'; put 'put ''dCBoPWwuZ2V0VG9wU3RhcnRDb3JuZXIoKSxmPWwuZ2V0Qm90dG9tRW5kQ29ybmVyKCksdj17cm93Omgucm93LGNvbDpoLmNvbCxyb3dzcGFuOmYucm93LWgucm93KzEsY29sc3BhbjpmLmNvbC1oLmNvbCsxfSxNPVtdO2xldCBEPW51bGw7cmV0dXJuISF0aGlzLmNhbk1lcmdlUmFuZ2Uodixh''@;'; put 'put ''KSYmKHRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVNZXJnZUNlbGxzIixsLGEpLEdhKDAsdi5yb3dzcGFuLTEscmU9PntHYSgwLHYuY29sc3Bhbi0xLGNlPT57bGV0IGJlPW51bGw7TVtyZV18fChNW3JlXT1bXSksMD09PXJlJiYwPT09Y2U/YmU9dGhpcy5ob3QuZ2V0U291cmNlRGF0YUF0Q2Vs''@;'; put 'put ''bCh0aGlzLmhvdC50b1BoeXNpY2FsUm93KHYucm93KSx0aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKHYuY29sKSk6dGhpcy5ob3Quc2V0Q2VsbE1ldGEodi5yb3crcmUsdi5jb2wrY2UsImhpZGRlbiIsITApLE1bcmVdW2NlXT1iZX0pfSksdGhpcy5ob3Quc2V0Q2VsbE1ldGEodi5yb3csdi5j''@;'; put 'put ''b2wsInNwYW5uZWQiLCEwKSwhdGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uYWRkKHYsYSl8fChkP0Q9W3Yucm93LHYuY29sLE1dOnRoaXMuaG90LnBvcHVsYXRlRnJvbUFycmF5KHYucm93LHYuY29sLE0sdm9pZCAwLHZvaWQgMCx0aGlzLnBsdWdpbk5hbWUpLGF8fHRoaXMuaWZDaHJvbWVG''@;'; put 'put ''b3JjZVJlcGFpbnQoKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJNZXJnZUNlbGxzIixsLHYsYSksRCkpfXVubWVyZ2VSYW5nZShsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdO2NvbnN0IGQ9dGhpcy5tZXJnZWRDZWxsc0Nv''@;'; put 'put ''bGxlY3Rpb24uZ2V0V2l0aGluUmFuZ2UobCk7MCE9PWQubGVuZ3RoJiYodGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVVubWVyZ2VDZWxscyIsbCxhKSxZbihkLGg9Pnt0aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5yZW1vdmUoaC5yb3csaC5jb2wpLEdhKDAsaC5yb3dzcGFuLTEsZj0+e0dh''@;'; put 'put ''KDAsaC5jb2xzcGFuLTEsdj0+e3RoaXMuaG90LnJlbW92ZUNlbGxNZXRhKGgucm93K2YsaC5jb2wrdiwiaGlkZGVuIiksdGhpcy5ob3QucmVtb3ZlQ2VsbE1ldGEoaC5yb3crZixoLmNvbCt2LCJjb3B5YWJsZSIpfSl9KSx0aGlzLmhvdC5yZW1vdmVDZWxsTWV0YShoLnJvdyxoLmNvbCwic3Bh''@;'; put 'put ''bm5lZCIpfSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyVW5tZXJnZUNlbGxzIixsLGEpLHRoaXMuaG90LnJlbmRlcigpKX10b2dnbGVNZXJnZShsKXtjb25zdHtmcm9tOmEsdG86ZH09bC5jbG9uZSgpLm5vcm1hbGl6ZSgpLGg9dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0KGEucm93''@;'; put 'put ''LGEuY29sKTtoLnJvdz09PWEucm93JiZoLmNvbD09PWEuY29sJiZoLnJvdytoLnJvd3NwYW4tMT09PWQucm93JiZoLmNvbCtoLmNvbHNwYW4tMT09PWQuY29sP3RoaXMudW5tZXJnZVJhbmdlKGwpOnRoaXMubWVyZ2VTZWxlY3Rpb24obCl9bWVyZ2UobCxhLGQsaCl7Y29uc3QgZj10aGlzLmhv''@;'; put 'put ''dC5fY3JlYXRlQ2VsbENvb3JkcyhsLGEpLHY9dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoZCxoKTt0aGlzLm1lcmdlUmFuZ2UodGhpcy5ob3QuX2NyZWF0ZUNlbGxSYW5nZShmLGYsdikpfXVubWVyZ2UobCxhLGQsaCl7Y29uc3QgZj10aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhsLGEp''@;'; put 'put ''LHY9dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoZCxoKTt0aGlzLnVubWVyZ2VSYW5nZSh0aGlzLmhvdC5fY3JlYXRlQ2VsbFJhbmdlKGYsZix2KSl9cmVnaXN0ZXJTaG9ydGN1dHMoKXt0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJncmlkIikuYWRkU2hvcnRj''@;'; put 'put ''dXQoe2tleXM6W1siQ29udHJvbCIsIm0iXV0sY2FsbGJhY2s6KCk9Pntjb25zdCBkPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7ZCYmIWQuaXNTaW5nbGVIZWFkZXIoKSYmKHRoaXMudG9nZ2xlTWVyZ2UoZCksdGhpcy5ob3QucmVuZGVyKCkpfSxydW5Pbmx5SWY6ZD0+IWQuYWx0''@;'; put 'put ''S2V5LGdyb3VwOkVtZX0pfXVucmVnaXN0ZXJTaG9ydGN1dHMoKXt0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJncmlkIikucmVtb3ZlU2hvcnRjdXRzQnlHcm91cChFbWUpfW1vZGlmeVZpZXdwb3J0Um93U3RhcnQobCxhKXtjb25zdCBkPXRoaXMuaG90LnJvd0lu''@;'; put 'put ''ZGV4TWFwcGVyLGg9ZC5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGwuc3RhcnRSb3cpO2ZvcihsZXQgZj0wO2Y8YTtmKz0xKXtjb25zdCB2PXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldChoLGYpO2lmKHFvKHYpKXtjb25zdCBNPWQuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJ''@;'; put 'put ''bmRleChkLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCh2LnJvdywxKSk7aWYoTTxsLnN0YXJ0Um93KXJldHVybiBsLnN0YXJ0Um93PU0sdm9pZCB0aGlzLm1vZGlmeVZpZXdwb3J0Um93U3RhcnQobCxhKX19fW1vZGlmeVZpZXdwb3J0Um93RW5kKGwsYSl7Y29uc3QgZD10aGlzLmhvdC5yb3dJ''@;'; put 'put ''bmRleE1hcHBlcixoPWQuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChsLmVuZFJvdyk7Zm9yKGxldCBmPTA7ZjxhO2YrPTEpe2NvbnN0IHY9dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0KGgsZik7aWYocW8odikpe2NvbnN0IEQ9ZC5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbElu''@;'; put 'put ''ZGV4KGQuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KHYucm93K3Yucm93c3Bhbi0xLC0xKSk7aWYoRD5sLmVuZFJvdylyZXR1cm4gbC5lbmRSb3c9RCx2b2lkIHRoaXMubW9kaWZ5Vmlld3BvcnRSb3dFbmQobCxhKX19fW1vZGlmeVZpZXdwb3J0Q29sdW1uU3RhcnQobCxhKXtjb25zdCBkPXRo''@;'; put 'put ''aXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLGg9ZC5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGwuc3RhcnRDb2x1bW4pO2ZvcihsZXQgZj0wO2Y8YTtmKz0xKXtjb25zdCB2PXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldChmLGgpO2lmKHFvKHYpKXtjb25zdCBNPWQuZ2V0UmVu''@;'; put 'put ''ZGVyYWJsZUZyb21WaXN1YWxJbmRleChkLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCh2LmNvbCwxKSk7aWYoTTxsLnN0YXJ0Q29sdW1uKXJldHVybiBsLnN0YXJ0Q29sdW1uPU0sdm9pZCB0aGlzLm1vZGlmeVZpZXdwb3J0Q29sdW1uU3RhcnQobCxhKX19fW1vZGlmeVZpZXdwb3J0Q29sdW1u''@;'; put 'put ''RW5kKGwsYSl7Y29uc3QgZD10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlcixoPWQuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChsLmVuZENvbHVtbik7Zm9yKGxldCBmPTA7ZjxhO2YrPTEpe2NvbnN0IHY9dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0KGYsaCk7aWYocW8odikp''@;'; put 'put ''e2NvbnN0IEQ9ZC5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGQuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KHYuY29sK3YuY29sc3Bhbi0xLC0xKSk7aWYoRD5sLmVuZENvbHVtbilyZXR1cm4gbC5lbmRDb2x1bW49RCx2b2lkIHRoaXMubW9kaWZ5Vmlld3BvcnRDb2x1bW5FbmQobCxh''@;'; put 'put ''KX19fXRyYW5zbGF0ZU1lcmdlZENlbGxUb1JlbmRlcmFibGUobCxhLGQsaCl7Y29uc3R7cm93SW5kZXhNYXBwZXI6Zixjb2x1bW5JbmRleE1hcHBlcjp2fT10aGlzLmhvdDtsZXQgTSxEO3JldHVybiBNPTA9PT1hP2YuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGwsMSk6Zi5nZXROZWFyZXN0''@;'; put 'put ''Tm90SGlkZGVuSW5kZXgobCthLTEsLTEpLEQ9MD09PWg/di5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoZCwxKTp2LmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChkK2gtMSwtMSksW2w+PTA/Zi5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KE0pOmwsZD49MD92LmdldFJlbmRlcmFibGVG''@;'; put 'put ''cm9tVmlzdWFsSW5kZXgoRCk6ZF19fWZ1bmN0aW9uIGRwdCgpe3RoaXMuZ2VuZXJhdGVGcm9tU2V0dGluZ3MoKSx0aGlzLmhvdC5yZW5kZXIoKX1mdW5jdGlvbiBocHQoYyl7aWYoYyl7Y29uc3QgbD10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5tZXJnZWRDZWxscyxhPXRoaXMuaG90Lmdl''@;'; put 'put ''dFNlbGVjdGVkUmFuZ2VMYXN0KCksZD1hLmdldFRvcFN0YXJ0Q29ybmVyKCksaD1hLmdldEJvdHRvbUVuZENvcm5lcigpO2ZvcihsZXQgZj0wO2Y8bC5sZW5ndGg7Zis9MSlpZihkLnJvdz09PWxbZl0ucm93JiZkLmNvbD09PWxbZl0uY29sJiZoLnJvdz09PWxbZl0ucm93K2xbZl0ucm93c3Bh''@;'; put 'put ''bi0xJiZoLmNvbD09PWxbZl0uY29sK2xbZl0uY29sc3Bhbi0xKXJldHVybiExfXJldHVybiBjfWZ1bmN0aW9uIGZwdChjKXt0YyhlZix0aGlzKS5yb3c9Yy5yb3csdGMoZWYsdGhpcykuY29sPWMuY29sfWZ1bmN0aW9uIHBwdChjKXtjb25zdCBsPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VM''@;'; put 'put ''YXN0KCkse2hpZ2hsaWdodDphfT1sLHtjb2x1bW5JbmRleE1hcHBlcjpkLHJvd0luZGV4TWFwcGVyOmh9PXRoaXMuaG90O3RjKFEyLHRoaXMpJiYobnVsbCE9PWguZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleCh0YyhRMix0aGlzKS5yb3cpJiYoYS5yb3c9dGMoUTIsdGhpcykucm93KSxu''@;'; put 'put ''dWxsIT09ZC5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KHRjKFEyLHRoaXMpLmNvbCkmJihhLmNvbD10YyhRMix0aGlzKS5jb2wpLHBBKFEyLHRoaXMsbnVsbCkpO2NvbnN0IGY9dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0KGEucm93LGEuY29sKTtpZighZilyZXR1cm47Y29u''@;'; put 'put ''c3Qgdj1mLmNvbCxNPWYuY29sK2YuY29sc3Bhbi0xO2lmKGMuY29sPDApe2NvbnN0IGNlPWQuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGEuY29sPj12JiZhLmNvbDw9TT92LTE6TSwtMSk7Yy5jb2w9bnVsbD09PWNlPy10aGlzLmhvdC52aWV3LmNvdW50UmVuZGVyYWJsZUNvbHVtbnNJblJh''@;'; put 'put ''bmdlKDAsYS5jb2wpOi1NYXRoLm1heCh0aGlzLmhvdC52aWV3LmNvdW50UmVuZGVyYWJsZUNvbHVtbnNJblJhbmdlKGNlLGEuY29sKS0xLDEpfWVsc2UgaWYoYy5jb2w+MCl7Y29uc3QgY2U9ZC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoYS5jb2w+PXYmJmEuY29sPD1NP00rMTp2LDEpO2Mu''@;'; put 'put ''Y29sPW51bGw9PT1jZT90aGlzLmhvdC52aWV3LmNvdW50UmVuZGVyYWJsZUNvbHVtbnNJblJhbmdlKGEuY29sLHRoaXMuaG90LmNvdW50Q29scygpKTpNYXRoLm1heCh0aGlzLmhvdC52aWV3LmNvdW50UmVuZGVyYWJsZUNvbHVtbnNJblJhbmdlKGEuY29sLGNlKS0xLDEpfWNvbnN0IEQ9Zi5y''@;'; put 'put ''b3csWj1mLnJvdytmLnJvd3NwYW4tMTtpZihjLnJvdzwwKXtjb25zdCBjZT1oLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChhLnJvdz49RCYmYS5yb3c8PVo/RC0xOlosLTEpO2Mucm93PW51bGw9PT1jZT8tdGhpcy5ob3Qudmlldy5jb3VudFJlbmRlcmFibGVSb3dzSW5SYW5nZSgwLGEucm93''@;'; put 'put ''KTotTWF0aC5tYXgodGhpcy5ob3Qudmlldy5jb3VudFJlbmRlcmFibGVSb3dzSW5SYW5nZShjZSxhLnJvdyktMSwxKX1lbHNlIGlmKGMucm93PjApe2NvbnN0IGNlPWguZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGEucm93Pj1EJiZhLnJvdzw9Wj9aKzE6RCwxKTtjLnJvdz1udWxsPT09Y2U/''@;'; put 'put ''dGhpcy5ob3Qudmlldy5jb3VudFJlbmRlcmFibGVSb3dzSW5SYW5nZShhLnJvdyx0aGlzLmhvdC5jb3VudFJvd3MoKSk6TWF0aC5tYXgodGhpcy5ob3Qudmlldy5jb3VudFJlbmRlcmFibGVSb3dzSW5SYW5nZShhLnJvdyxjZSktMSwxKX19ZnVuY3Rpb24gZ3B0KGMpe2NvbnN0IGw9dGhpcy5o''@;'; put 'put ''b3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxhPWwuY2xvbmUoKSx7dG86ZH09bCx7Y29sdW1uSW5kZXhNYXBwZXI6aCxyb3dJbmRleE1hcHBlcjpmfT10aGlzLmhvdCx2PShNLEQpPT57YS5leHBhbmQodGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoTSxEKSk7Zm9yKGxldCBaPTA7Wjx0aGlz''@;'; put 'put ''Lm1lcmdlZENlbGxzQ29sbGVjdGlvbi5tZXJnZWRDZWxscy5sZW5ndGg7Wis9MSlhLmV4cGFuZEJ5UmFuZ2UodGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24ubWVyZ2VkQ2VsbHNbWl0uZ2V0UmFuZ2UoKSl9O2lmKGMuY29sPDApe2xldCBNPXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdl''@;'; put 'put ''dFN0YXJ0TW9zdENvbHVtbkluZGV4KGwsZC5jb2wpK2MuY29sO3YoZC5yb3csTSksIkUtVyI9PT1sLmdldEhvcml6b250YWxEaXJlY3Rpb24oKSYmIkUtVyI9PT1hLmdldEhvcml6b250YWxEaXJlY3Rpb24oKSYmKE09YS5nZXRUb3BTdGFydENvcm5lcigpLmNvbCk7Y29uc3QgRD1oLmdldE5l''@;'; put 'put ''YXJlc3ROb3RIaWRkZW5JbmRleChNLDEpO251bGwhPT1EJiYoYy5jb2w9LU1hdGgubWF4KHRoaXMuaG90LnZpZXcuY291bnRSZW5kZXJhYmxlQ29sdW1uc0luUmFuZ2UoRCxkLmNvbCktMSwxKSl9ZWxzZSBpZihjLmNvbD4wKXtsZXQgTT10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXRF''@;'; put 'put ''bmRNb3N0Q29sdW1uSW5kZXgobCxkLmNvbCkrYy5jb2w7dihkLnJvdyxNKSwiVy1FIj09PWwuZ2V0SG9yaXpvbnRhbERpcmVjdGlvbigpJiYiVy1FIj09PWEuZ2V0SG9yaXpvbnRhbERpcmVjdGlvbigpJiYoTT1hLmdldEJvdHRvbUVuZENvcm5lcigpLmNvbCk7Y29uc3QgRD1oLmdldE5lYXJl''@;'; put 'put ''c3ROb3RIaWRkZW5JbmRleChNLC0xKTtudWxsIT09RCYmKGMuY29sPU1hdGgubWF4KHRoaXMuaG90LnZpZXcuY291bnRSZW5kZXJhYmxlQ29sdW1uc0luUmFuZ2UoZC5jb2wsRCktMSwxKSl9aWYoYy5yb3c8MCl7bGV0IE09dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0VG9wTW9zdFJv''@;'; put 'put ''d0luZGV4KGwsZC5yb3cpK2Mucm93O3YoTSxkLmNvbCksIlMtTiI9PT1sLmdldFZlcnRpY2FsRGlyZWN0aW9uKCkmJiJTLU4iPT09YS5nZXRWZXJ0aWNhbERpcmVjdGlvbigpJiYoTT1hLmdldFRvcFN0YXJ0Q29ybmVyKCkucm93KTtjb25zdCBEPWYuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4''@;'; put 'put ''KE0sMSk7bnVsbCE9PUQmJihjLnJvdz0tTWF0aC5tYXgodGhpcy5ob3Qudmlldy5jb3VudFJlbmRlcmFibGVSb3dzSW5SYW5nZShELGQucm93KS0xLDEpKX1lbHNlIGlmKGMucm93PjApe2xldCBNPXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldEJvdHRvbU1vc3RSb3dJbmRleChsLGQu''@;'; put 'put ''cm93KStjLnJvdzt2KE0sZC5jb2wpLCJOLVMiPT09bC5nZXRWZXJ0aWNhbERpcmVjdGlvbigpJiYiTi1TIj09PWEuZ2V0VmVydGljYWxEaXJlY3Rpb24oKSYmKE09YS5nZXRCb3R0b21TdGFydENvcm5lcigpLnJvdyk7Y29uc3QgRD1mLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChNLC0xKTtu''@;'; put 'put ''dWxsIT09RCYmKGMucm93PU1hdGgubWF4KHRoaXMuaG90LnZpZXcuY291bnRSZW5kZXJhYmxlUm93c0luUmFuZ2UoZC5yb3csRCktMSwxKSl9fWZ1bmN0aW9uIG1wdCgpe2NvbnN0IGM9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSx7aGlnaGxpZ2h0Omx9PWM7aWYodGhpcy5ob3Qu''@;'; put 'put ''c2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpfHx0aGlzLmhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCkpcmV0dXJuIHZvaWQgcEEoUTIsdGhpcyxsLmNsb25lKCkpO2ZvcihsZXQgZD0wO2Q8dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24ubWVyZ2VkQ2Vs''@;'; put 'put ''bHMubGVuZ3RoO2QrPTEpYy5leHBhbmRCeVJhbmdlKHRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLm1lcmdlZENlbGxzW2RdLmdldFJhbmdlKCksITEpO2ZvcihsZXQgZD0wO2Q8dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24ubWVyZ2VkQ2VsbHMubGVuZ3RoO2QrPTEpYy5leHBhbmRCeVJh''@;'; put 'put ''bmdlKHRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLm1lcmdlZENlbGxzW2RdLmdldFJhbmdlKCksITEpO2NvbnN0IGE9dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0KGwucm93LGwuY29sKTtwQShRMix0aGlzLGwuY2xvbmUoKSksYSYmbC5hc3NpZ24oYSl9ZnVuY3Rpb24gQW1lKGMs''@;'; put 'put ''bCxhLGQpe2lmKGM8MHx8bDwwKXJldHVybjtjb25zdCBoPXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldChjLGwpO2lmKCFoKXJldHVybjtjb25zdHtyb3c6Zixjb2w6dixjb2xzcGFuOk0scm93c3BhbjpEfT1oLFo9ZixyZT12LGNlPWYrRC0xLGJlPXYrTS0xO2lmKCJyZW5kZXIiPT09''@;'; put 'put ''ZCYmdGhpcy5nZXRTZXR0aW5nKCJ2aXJ0dWFsaXplZCIpKXtjb25zdCBFZT10aGlzLmhvdC52aWV3LmdldEFjdGl2ZU92ZXJsYXlOYW1lKCksQmU9WyJ0b3AiLCJ0b3BfaW5saW5lX3N0YXJ0X2Nvcm5lciJdLmluY2x1ZGVzKEVlKT8wOnRoaXMuaG90LmdldEZpcnN0UmVuZGVyZWRWaXNpYmxl''@;'; put 'put ''Um93KCkscWU9WyJpbmxpbmVfc3RhcnQiLCJ0b3BfaW5saW5lX3N0YXJ0X2Nvcm5lciIsImJvdHRvbV9pbmxpbmVfc3RhcnRfY29ybmVyIl0uaW5jbHVkZXMoRWUpPzA6dGhpcy5ob3QuZ2V0Rmlyc3RSZW5kZXJlZFZpc2libGVDb2x1bW4oKTtyZXR1cm5ba3MoQmUsWixjZSksa3MocWUscmUs''@;'; put 'put ''YmUpLGtzKHRoaXMuaG90LmdldExhc3RSZW5kZXJlZFZpc2libGVSb3coKSxaLGNlKSxrcyh0aGlzLmhvdC5nZXRMYXN0UmVuZGVyZWRWaXNpYmxlQ29sdW1uKCkscmUsYmUpXX1yZXR1cm5bWixyZSxjZSxiZV19ZnVuY3Rpb24gdnB0KGMpe2MuaXRlbXMucHVzaCh7bmFtZToiLS0tLS0tLS0t''@;'; put 'put ''In0sZnVuY3Rpb24gUTN0KGMpe3JldHVybntrZXk6Im1lcmdlQ2VsbHMiLG5hbWUoKXtjb25zdCBsPXRoaXMuZ2V0U2VsZWN0ZWRMYXN0KCk7aWYobCl7Y29uc3QgYT1jLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXQobFswXSxsWzFdKTtpZihhLnJvdz09PWxbMF0mJmEuY29sPT09bFsxXSYm''@;'; put 'put ''YS5yb3crYS5yb3dzcGFuLTE9PT1sWzJdJiZhLmNvbCthLmNvbHNwYW4tMT09PWxbM10pcmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShkcSl9cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZSh1cSl9LGNhbGxiYWNrKCl7Y29uc3QgbD10aGlzLmdldFNlbGVjdGVkUmFuZ2VM''@;'; put 'put ''YXN0KCk7aWYoIWwpcmV0dXJuO2wuc2V0RGlyZWN0aW9uKHRoaXMuaXNSdGwoKT8iTkUtU1ciOiJOVy1TRSIpO2NvbnN0e2Zyb206YSx0bzpkfT1sO2MudG9nZ2xlTWVyZ2UobCksdGhpcy5zZWxlY3RDZWxsKGEucm93LGEuY29sLGQucm93LGQuY29sLCExKX0sZGlzYWJsZWQoKXtjb25zdCBs''@;'; put 'put ''PXRoaXMuZ2V0U2VsZWN0ZWRMYXN0KCk7cmV0dXJuIWx8fHFwLmlzU2luZ2xlQ2VsbCh7cm93OmxbMF0sY29sOmxbMV0scm93c3BhbjpsWzJdLWxbMF0rMSxjb2xzcGFuOmxbM10tbFsxXSsxfSl8fHRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpfSxoaWRkZW46ITF9fSh0aGlz''@;'; put 'put ''KSl9ZnVuY3Rpb24ga21lKCl7cEEoUTIsdGhpcyxudWxsKX1mdW5jdGlvbiBicHQoKXtpZih0YyhRMix0aGlzKS5pc0NlbGwoKSlyZXR1cm47Y29uc3QgYz10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLGw9Yy5nZXRWZXJ0aWNhbERpcmVjdGlvbigpLGE9Yy5nZXRIb3Jpem9udGFs''@;'; put 'put ''RGlyZWN0aW9uKCksZD10YyhRMix0aGlzKS5jbG9uZSgpLm5vcm1hbGl6ZSgpO3RjKHQ0LHRoaXMpLnNldEFjdGl2ZU5vZGUoZC5yb3csZC5jb2wpLHRjKGVmLHRoaXMpLnJvdz4wfHx0YyhlZix0aGlzKS5jb2w+MD90Yyh0NCx0aGlzKS5zZXRQcmV2Tm9kZUFzQWN0aXZlKCk6KCJFLVciPT09''@;'; put 'put ''YSYmdGMoZWYsdGhpcykuY29sPDB8fCJTLU4iPT09bCYmdGMoZWYsdGhpcykucm93PDApJiZ0Yyh0NCx0aGlzKS5zZXROZXh0Tm9kZUFzQWN0aXZlKCl9ZnVuY3Rpb24geXB0KGMsbCl7Y29uc3QgYT10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLHtjb2x1bW5JbmRleE1hcHBlcjpk''@;'; put 'put ''LHJvd0luZGV4TWFwcGVyOmh9PXRoaXMuaG90O2xldCBmPW51bGwsdj1udWxsO2lmKHRjKGVmLHRoaXMpLmNvbDwwKXtjb25zdHtyb3dFbmQ6TSxjb2xFbmQ6RH09dGModDQsdGhpcykuZ2V0UHJldkhvcml6b250YWxOb2RlKCk7dj1kLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChELC0xKSxm''@;'; put 'put ''PWguZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KE0sLTEpfWVsc2UgaWYodGMoZWYsdGhpcykuY29sPjApe2NvbnN0e3Jvd1N0YXJ0Ok0sY29sU3RhcnQ6RH09dGModDQsdGhpcykuZ2V0TmV4dEhvcml6b250YWxOb2RlKCk7dj1kLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChELDEpLGY9aC5n''@;'; put 'put ''ZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoTSwxKX1lbHNlIGlmKHRjKGVmLHRoaXMpLnJvdzwwKXtjb25zdHtyb3dFbmQ6TSxjb2xFbmQ6RH09dGModDQsdGhpcykuZ2V0UHJldlZlcnRpY2FsTm9kZSgpO3Y9ZC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoRCwtMSksZj1oLmdldE5lYXJlc3RO''@;'; put 'put ''b3RIaWRkZW5JbmRleChNLC0xKX1lbHNlIGlmKHRjKGVmLHRoaXMpLnJvdz4wKXtjb25zdHtyb3dTdGFydDpNLGNvbFN0YXJ0OkR9PXRjKHQ0LHRoaXMpLmdldE5leHRWZXJ0aWNhbE5vZGUoKTt2PWQuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KEQsMSksZj1oLmdldE5lYXJlc3ROb3RIaWRk''@;'; put 'put ''ZW5JbmRleChNLDEpfWlmKG51bGwhPT1mfHxudWxsIT09dil7Y29uc3QgTT10aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhmLHYpLEQ9dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0KE0ucm93LE0uY29sKSxaPXRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuZ2V0Rm9jdXMoKTtj''@;'; put 'put ''PU0ucm93LGw9TS5jb2wsYS5oaWdobGlnaHQuYXNzaWduKEQ/e3Jvdzp0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoRC5yb3csMSksY29sOnRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChELmNvbCwxKX06''@;'; put 'put ''TSksWi5jbGVhcigpLFouYWRkKE0pLmNvbW1pdCgpfXRjKHQ0LHRoaXMpLnNldEFjdGl2ZU5vZGUoYyxsKSxwQShlZix0aGlzLHtyb3c6MCxjb2w6MH0pfWZ1bmN0aW9uIF9wdCgpe3RoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkuaXNIZWFkZXIoKXx8dGModDQsdGhpcykuYnVpbGRG''@;'; put 'put ''b2N1c09yZGVyKHRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkpfWZ1bmN0aW9uIHdwdChjLGwsYSl7Y29uc3QgZD10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXQoYyxsKTtkJiYoZC5yb3chPT1jfHxkLmNvbCE9PWw/YS5jb3B5YWJsZT0hMTooYS5yb3dzcGFuPWQucm93c3Bh''@;'; put 'put ''bixhLmNvbHNwYW49ZC5jb2xzcGFuKSl9ZnVuY3Rpb24gQ3B0KGMpe2lmKHRoaXMuZ2V0U2V0dGluZygidmlydHVhbGl6ZWQiKSlyZXR1cm47Y29uc3QgbD10aGlzLmhvdC5jb3VudENvbHMoKTt0aGlzLm1vZGlmeVZpZXdwb3J0Um93U3RhcnQoYyxsKSx0aGlzLm1vZGlmeVZpZXdwb3J0Um93''@;'; put 'put ''RW5kKGMsbCl9ZnVuY3Rpb24gU3B0KGMpe2lmKHRoaXMuZ2V0U2V0dGluZygidmlydHVhbGl6ZWQiKSlyZXR1cm47Y29uc3QgbD10aGlzLmhvdC5jb3VudFJvd3MoKTt0aGlzLm1vZGlmeVZpZXdwb3J0Q29sdW1uU3RhcnQoYyxsKSx0aGlzLm1vZGlmeVZpZXdwb3J0Q29sdW1uRW5kKGMsbCl9''@;'; put 'put ''ZnVuY3Rpb24gTXB0KGMsbCl7Y29uc3QgYT10aGlzLmF1dG9maWxsQ2FsY3VsYXRpb25zLmdldERpcmVjdGlvbihsLGMpO2lmKHRoaXMuYXV0b2ZpbGxDYWxjdWxhdGlvbnMuZHJhZ0FyZWFPdmVybGFwc0NvbGxlY3Rpb25zKGwsYyxhKSlyZXR1cm4gbDtjb25zdCBkPXRoaXMuaG90Ll9jcmVh''@;'; put 'put ''dGVDZWxsQ29vcmRzKGxbMF0sbFsxXSksaD10aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhsWzJdLGxbM10pLGY9dGhpcy5ob3QuX2NyZWF0ZUNlbGxSYW5nZShkLGQsaCksdj10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXRXaXRoaW5SYW5nZShmKTtyZXR1cm4gMD09PXYubGVuZ3Ro''@;'; put 'put ''P2M6dGhpcy5hdXRvZmlsbENhbGN1bGF0aW9ucy5zbmFwRHJhZ0FyZWEobCxjLGEsdil9ZnVuY3Rpb24geHB0KGMsbCl7dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uc2hpZnRDb2xsZWN0aW9ucygicmlnaHQiLGMsbCl9ZnVuY3Rpb24gRXB0KGMsbCl7dGhpcy5tZXJnZWRDZWxsc0NvbGxl''@;'; put 'put ''Y3Rpb24uc2hpZnRDb2xsZWN0aW9ucygibGVmdCIsYyxsKX1mdW5jdGlvbiBUcHQoYyxsLGEpeyJhdXRvIiE9PWEmJnRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLnNoaWZ0Q29sbGVjdGlvbnMoImRvd24iLGMsbCl9ZnVuY3Rpb24gQXB0KGMsbCl7dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rp''@;'; put 'put ''b24uc2hpZnRDb2xsZWN0aW9ucygidXAiLGMsbCl9ZnVuY3Rpb24ga3B0KGMsbCl7IkF1dG9maWxsLmZpbGwiPT09bCYmdGhpcy5hdXRvZmlsbENhbGN1bGF0aW9ucy5yZWNyZWF0ZUFmdGVyRGF0YVBvcHVsYXRpb24oYyl9ZnVuY3Rpb24gRHB0KGMsbCl7aWYobCYmImFyZWEiPT09bCl7Y29u''@;'; put 'put ''c3QgYT10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO1luKHRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldFdpdGhpblJhbmdlKGEpLGg9PnthLmdldEJvdHRvbUVuZENvcm5lcigpLnJvdz09PWguZ2V0TGFzdFJvdygpJiZhLmdldEJvdHRvbUVuZENvcm5lcigpLmNvbD09PWgu''@;'; put 'put ''Z2V0TGFzdENvbHVtbigpJiYoY1syXT1oLnJvdyxjWzNdPWguY29sKX0pfX1mdW5jdGlvbiBJcHQoYyxsLGEsZCl7aWYoYSlyZXR1cm4gdGhpcy5zZWxlY3Rpb25DYWxjdWxhdGlvbnMuZ2V0U2VsZWN0ZWRNZXJnZWRDZWxsQ2xhc3NOYW1lKGMsbCxhLGQpfWZ1bmN0aW9uIFJwdCgpe3JldHVy''@;'; put 'put ''biB0aGlzLnNlbGVjdGlvbkNhbGN1bGF0aW9ucy5nZXRTZWxlY3RlZE1lcmdlZENlbGxDbGFzc05hbWVUb1JlbW92ZSgpfWZ1bmN0aW9uIExwdChjLGwsYSxkKXtpZighKGQgaW5zdGFuY2VvZiBNb3VzZUV2ZW50KSlyZXR1cm47Y29uc3QgaD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFz''@;'; put 'put ''dCgpLGY9dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0QnlSYW5nZShoKTtpZighZilyZXR1cm47Y29uc3Qgdj10aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhmLnJvdyxmLmNvbCksTT10aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhmLnJvdytmLnJvd3NwYW4tMSxmLmNvbCtmLmNv''@;'; put 'put ''bHNwYW4tMSk7cmV0dXJuIDA9PT10aGlzLmhvdC5zZWxlY3Rpb24uZ2V0TGF5ZXJMZXZlbCgpJiZoLmlzRXF1YWwodGhpcy5ob3QuX2NyZWF0ZUNlbGxSYW5nZSh2LHYsTSkpfWZ1bmN0aW9uIE9wdChjLGwsYSl7aWYodGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5yb3dIZWFkZXJzfHwiYm90dG9t''@;'; put 'put ''Ij09PWF8fCJib3R0b21faW5saW5lX3N0YXJ0X2Nvcm5lciI9PT1hKXJldHVybiBjO2xldCBkLGg7aWYoIm1hc3RlciI9PT1hKWQ9dGhpcy5ob3QuZ2V0Rmlyc3RSZW5kZXJlZFZpc2libGVDb2x1bW4oKSxoPXRoaXMuaG90LmdldExhc3RSZW5kZXJlZFZpc2libGVDb2x1bW4oKTtlbHNle2Nv''@;'; put 'put ''bnN0IGJlPXRoaXMuaG90LnZpZXcuZ2V0T3ZlcmxheUJ5TmFtZShhKTtkPXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoYmUuY2xvbmUud3RUYWJsZS5nZXRGaXJzdFJlbmRlcmVkQ29sdW1uKCkpLGg9dGhpcy5ob3QuY29sdW1uSW5kZXhN''@;'; put 'put ''YXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChiZS5jbG9uZS53dFRhYmxlLmdldExhc3RSZW5kZXJlZENvbHVtbigpKX1pZighdGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0KGwsZCkpcmV0dXJuIGM7Y29uc3Qgdj10aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhsLGQp''@;'; put 'put ''LE09dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobCxoKSxEPXRoaXMuaG90Ll9jcmVhdGVDZWxsUmFuZ2Uodix2LE0pLFo9dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0V2l0aGluUmFuZ2UoRCwhMCkscmU9Wi5yZWR1Y2UoKGJlLEVlKT0+e2xldHtyb3dzcGFuOkJlfT1FZTtyZXR1''@;'; put 'put ''cm4gTWF0aC5tYXgoYmUsQmUpfSwxKTtsZXQgY2U9MDtyZXR1cm4gWi5sZW5ndGg+MSYmWlswXS5yb3dzcGFuPHJlJiYoY2U9cmUtWlswXS5yb3dzcGFuKSxaLmZvckVhY2goYmU9PntsZXR7cm93c3BhbjpFZX09YmUsQmU9MDtCZT0idG9wIj09PWF8fCJ0b3BfaW5saW5lX3N0YXJ0X2Nvcm5l''@;'; put 'put ''ciI9PT1hP01hdGgubWluKHJlLHRoaXMuaG90LnZpZXcuY291bnROb3RIaWRkZW5GaXhlZFJvd3NUb3AoKS1sKTpFZS1jZSxjPU1hdGgubWF4KGM/PzAsTW1lKHRoaXMuaG90LGwsQmUpKX0pLGN9Y29uc3QgREg9Im11bHRpQ29sdW1uU29ydGluZyIsSW1lPURIO0c0ZShESCxmdW5jdGlvbiBQ''@;'; put 'put ''cHQoYyxsKXtyZXR1cm4gZnVuY3Rpb24oYSxkKXtjb25zdFssLi4uaF09YSxbLC4uLmZdPWQ7cmV0dXJuIGZ1bmN0aW9uIHYoTSl7Y29uc3QgRD1jW01dLFo9bFtNXSxyZT1oW01dLGNlPWZbTV0sYmU9Wi5tdWx0aUNvbHVtblNvcnRpbmcsQmU9KGJlLmNvbXBhcmVGdW5jdGlvbkZhY3Rvcnk/''@;'; put 'put ''YmUuY29tcGFyZUZ1bmN0aW9uRmFjdG9yeTokNGUoWi50eXBlKSkoRCxaLGJlKShyZSxjZSk7aWYoQmU9PT1qcCl7Y29uc3QgcWU9TSsxO2lmKHR5cGVvZiBsW3FlXTwidSIpcmV0dXJuIHYocWUpfXJldHVybiBCZX0oMCl9fSk7Y2xhc3MgenB0IGV4dGVuZHMgYWdle2NvbnN0cnVjdG9yKCl7''@;'; put 'put ''c3VwZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlvbiBOcHQoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIFZwdChjKXt2YXIgbD1mdW5jdGlvbiBCcHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1h''@;'; put 'put ''KXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlciko''@;'; put 'put ''Yyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfSh0aGlzLCJwbHVnaW5LZXkiLERI''@;'; put 'put ''KX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gREh9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMTcwfWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVt0aGlzLnBsdWdpbktleV19ZW5hYmxlUGx1Z2luKCl7c3VwZXIuZW5hYmxlUGx1''@;'; put 'put ''Z2luKCl9ZGlzYWJsZVBsdWdpbigpe3N1cGVyLmRpc2FibGVQbHVnaW4oKX1yZWdpc3RlclNob3J0Y3V0cygpe3N1cGVyLnJlZ2lzdGVyU2hvcnRjdXRzKCksdGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZ3JpZCIpLmFkZFNob3J0Y3V0KHtrZXlzOltbIlNoaWZ0''@;'; put 'put ''IiwiRW50ZXIiXV0sY2FsbGJhY2s6KCk9Pntjb25zdHtoaWdobGlnaHQ6bH09dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtyZXR1cm4tMT09PWwucm93JiZsLmNvbD49MCYmdGhpcy5zb3J0KHRoaXMuZ2V0TmV4dFNvcnRDb25maWcobC5jb2wsb0YpKSwhMX0scnVuT25seUlmOigp''@;'; put 'put ''PT57dmFyIGwsYTtjb25zdCBkPW51bGw9PT0obD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpKXx8dm9pZCAwPT09bD92b2lkIDA6bC5oaWdobGlnaHQ7cmV0dXJuIGQmJihudWxsPT09KGE9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSl8fHZvaWQgMD09PWE/dm9pZCAw''@;'; put 'put ''OmEuaXNTaW5nbGUoKSkmJnRoaXMuaG90LnNlbGVjdGlvbi5pc0NlbGxWaXNpYmxlKGQpJiZkLmlzSGVhZGVyKCl9LHJlbGF0aXZlVG9Hcm91cDpXbSxwb3NpdGlvbjoiYmVmb3JlIixncm91cDpJbWV9KX11bnJlZ2lzdGVyU2hvcnRjdXRzKCl7c3VwZXIudW5yZWdpc3RlclNob3J0Y3V0cygp''@;'; put 'put ''LHRoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKS5yZW1vdmVTaG9ydGN1dHNCeUdyb3VwKEltZSl9c29ydChsKXtzdXBlci5zb3J0KGwpfWNsZWFyU29ydCgpe3N1cGVyLmNsZWFyU29ydCgpfWlzU29ydGVkKCl7cmV0dXJuIHN1cGVyLmlzU29ydGVkKCl9''@;'; put 'put ''Z2V0U29ydENvbmZpZyhsKXtyZXR1cm4gc3VwZXIuZ2V0U29ydENvbmZpZyhsKX1zZXRTb3J0Q29uZmlnKGwpe3N1cGVyLnNldFNvcnRDb25maWcobCl9Z2V0Tm9ybWFsaXplZFNvcnRDb25maWdzKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJn''@;'; put 'put ''dW1lbnRzWzBdOltdO3JldHVybiBBcnJheS5pc0FycmF5KGwpP2w6W2xdfXVwZGF0ZUhlYWRlckNsYXNzZXMobCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYT4xP2EtMTowKSxoPTE7aDxhO2grKylkW2gtMV09YXJndW1lbnRzW2hdO3N1cGVyLnVwZGF0ZUhlYWRl''@;'; put 'put ''ckNsYXNzZXMobCwuLi5kKSxsbyhsLGZ1bmN0aW9uIEhwdChjKXtjb25zdCBsPWMuY2xhc3NOYW1lLnNwbGl0KCIgIiksYT1uZXcgUmVnRXhwKCJec29ydC1bMC05XXsxLDJ9JCIpO3JldHVybiBsLmZpbHRlcihkPT5hLnRlc3QoZCkpfShsKSksITEhPT10aGlzLmVuYWJsZWQmJlRpKGwsZnVu''@;'; put 'put ''Y3Rpb24gRnB0KGMsbCxhKXtjb25zdCBkPVtdO3JldHVybiExPT09YXx8Yy5pc0NvbHVtblNvcnRlZChsKSYmYy5nZXROdW1iZXJPZlNvcnRlZENvbHVtbnMoKT4xJiZkLnB1c2goYHNvcnQtJHtjLmdldEluZGV4T2ZDb2x1bW5JblNvcnRRdWV1ZShsKSsxfWApLGR9KC4uLmQpKX1vbkFmdGVy''@;'; put 'put ''T25DZWxsTW91c2VEb3duKGwsYSl7ITEhPT15SihhLnJvdyxhLmNvbCxsKSYmdGhpcy53YXNDbGlja2FibGVIZWFkZXJDbGlja2VkKGwsYS5jb2wpJiYodGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuaXNDdHJsUHJlc3NlZCgpPyh0aGlzLmhvdC5kZXNlbGVjdENlbGwoKSx0aGlzLmhv''@;'; put 'put ''dC5zZWxlY3RDb2x1bW5zKGEuY29sKSx0aGlzLnNvcnQodGhpcy5nZXROZXh0U29ydENvbmZpZyhhLmNvbCxvRikpKTp0aGlzLnNvcnQodGhpcy5nZXRDb2x1bW5OZXh0Q29uZmlnKGEuY29sKSkpfX1mdW5jdGlvbiBSbWUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIFVwdChjKXt2YXIgbD1m''@;'; put 'put ''dW5jdGlvbiBacHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcg''@;'; put 'put ''VHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVBy''@;'; put 'put ''b3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIEdwdCBleHRlbmRzIEZze2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxSbWUodGhpcywiZHJhZ2dlZCIsW10pLFJtZSh0aGlzLCJsYXN0''@;'; put 'put ''U2V0Q2VsbCIsbnVsbCl9c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIm11bHRpcGxlU2VsZWN0aW9uSGFuZGxlcyJ9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMTYwfWlzRW5hYmxlZCgpe3JldHVybiBBcCgpfWVuYWJsZVBsdWdpbigpe3RoaXMuZW5hYmxlZHx8''@;'; put 'put ''KHRoaXMucmVnaXN0ZXJMaXN0ZW5lcnMoKSxzdXBlci5lbmFibGVQbHVnaW4oKSl9cmVnaXN0ZXJMaXN0ZW5lcnMoKXtjb25zdCBsPXRoaXMse3Jvb3RFbGVtZW50OmF9PXRoaXMuaG90O2Z1bmN0aW9uIGQoaCl7aWYoMT09PWwuZHJhZ2dlZC5sZW5ndGgpcmV0dXJuIGwuZHJhZ2dlZC5zcGxp''@;'; put 'put ''Y2UoMCxsLmRyYWdnZWQubGVuZ3RoKSwhMDtjb25zdCBmPWwuZHJhZ2dlZC5pbmRleE9mKGgpO2lmKC0xPT09ZilyZXR1cm4hMTswPT09Zj9sLmRyYWdnZWQ9bC5kcmFnZ2VkLnNsaWNlKDAsMSk6MT09PWYmJihsLmRyYWdnZWQ9bC5kcmFnZ2VkLnNsaWNlKC0xKSl9dGhpcy5ldmVudE1hbmFn''@;'; put 'put ''ZXIuYWRkRXZlbnRMaXN0ZW5lcihhLCJ0b3VjaHN0YXJ0IixoPT57bGV0IGY7cmV0dXJuIHBvKGgudGFyZ2V0LCJ0b3BTZWxlY3Rpb25IYW5kbGUtSGl0QXJlYSIpPyhmPWwuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksbC5kcmFnZ2VkLnB1c2goInRvcCIpLGwudG91Y2hTdGFydFJhbmdl''@;'; put 'put ''PXt3aWR0aDpmLmdldFdpZHRoKCksaGVpZ2h0OmYuZ2V0SGVpZ2h0KCksZGlyZWN0aW9uOmYuZ2V0RGlyZWN0aW9uKCl9LGgucHJldmVudERlZmF1bHQoKSwhMSk6cG8oaC50YXJnZXQsImJvdHRvbVNlbGVjdGlvbkhhbmRsZS1IaXRBcmVhIik/KGY9bC5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxh''@;'; put 'put ''c3QoKSxsLmRyYWdnZWQucHVzaCgiYm90dG9tIiksbC50b3VjaFN0YXJ0UmFuZ2U9e3dpZHRoOmYuZ2V0V2lkdGgoKSxoZWlnaHQ6Zi5nZXRIZWlnaHQoKSxkaXJlY3Rpb246Zi5nZXREaXJlY3Rpb24oKX0saC5wcmV2ZW50RGVmYXVsdCgpLCExKTp2b2lkIDB9KSx0aGlzLmV2ZW50TWFuYWdl''@;'; put 'put ''ci5hZGRFdmVudExpc3RlbmVyKGEsInRvdWNoZW5kIixoPT5wbyhoLnRhcmdldCwidG9wU2VsZWN0aW9uSGFuZGxlLUhpdEFyZWEiKT8oZC5jYWxsKGwsInRvcCIpLGwudG91Y2hTdGFydFJhbmdlPXZvaWQgMCxoLnByZXZlbnREZWZhdWx0KCksITEpOnBvKGgudGFyZ2V0LCJib3R0b21TZWxl''@;'; put 'put ''Y3Rpb25IYW5kbGUtSGl0QXJlYSIpPyhkLmNhbGwobCwiYm90dG9tIiksbC50b3VjaFN0YXJ0UmFuZ2U9dm9pZCAwLGgucHJldmVudERlZmF1bHQoKSwhMSk6dm9pZCAwKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGEsInRvdWNobW92ZSIsaD0+e2NvbnN0e3Jvb3REb2N1''@;'; put 'put ''bWVudDpmfT10aGlzLmhvdDtsZXQgdixNLEQsWixyZSxjZTtpZigwPT09bC5kcmFnZ2VkLmxlbmd0aClyZXR1cm47Y29uc3QgYmU9Zi5lbGVtZW50RnJvbVBvaW50KGgudG91Y2hlc1swXS5jbGllbnRYLGgudG91Y2hlc1swXS5jbGllbnRZKTshYmV8fGJlPT09bC5sYXN0U2V0Q2VsbHx8KCgi''@;'; put 'put ''VEQiPT09YmUubm9kZU5hbWV8fCJUSCI9PT1iZS5ub2RlTmFtZSkmJih2PWwuaG90LmdldENvb3JkcyhiZSksLTE9PT12LmNvbCYmKHYuY29sPTApLE09bC5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxEPU0uZ2V0V2lkdGgoKSxaPU0uZ2V0SGVpZ2h0KCkscmU9TS5nZXREaXJlY3Rpb24o''@;'; put 'put ''KSwxPT09RCYmMT09PVomJmwuaG90LnNlbGVjdGlvbi5zZXRSYW5nZUVuZCh2KSxjZT1sLmdldEN1cnJlbnRSYW5nZUNvb3JkcyhNLHYsbC50b3VjaFN0YXJ0UmFuZ2UuZGlyZWN0aW9uLHJlLGwuZHJhZ2dlZFswXSksbnVsbCE9PWNlLnN0YXJ0JiZsLmhvdC5zZWxlY3Rpb24uc2V0UmFuZ2VT''@;'; put 'put ''dGFydChjZS5zdGFydCksbC5ob3Quc2VsZWN0aW9uLnNldFJhbmdlRW5kKGNlLmVuZCksbC5sYXN0U2V0Q2VsbD1iZSksaC5wcmV2ZW50RGVmYXVsdCgpKX0pfWdldEN1cnJlbnRSYW5nZUNvb3JkcyhsLGEsZCxoLGYpe2NvbnN0IHY9bC5nZXRUb3BTdGFydENvcm5lcigpLE09bC5nZXRCb3R0''@;'; put 'put ''b21FbmRDb3JuZXIoKSxEPWwuZ2V0Qm90dG9tU3RhcnRDb3JuZXIoKSxaPWwuZ2V0VG9wRW5kQ29ybmVyKCk7bGV0IHJlPXtzdGFydDpudWxsLGVuZDpudWxsfTtzd2l0Y2goZCl7Y2FzZSJORS1TVyI6c3dpdGNoKGgpe2Nhc2UiTkUtU1ciOmNhc2UiTlctU0UiOnJlPSJ0b3AiPT09Zj97c3Rh''@;'; put 'put ''cnQ6dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoYS5yb3csbC5oaWdobGlnaHQuY29sKSxlbmQ6dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoRC5yb3csYS5jb2wpfTp7c3RhcnQ6dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobC5oaWdobGlnaHQucm93LGEuY29sKSxlbmQ6dGhpcy5o''@;'; put 'put ''b3QuX2NyZWF0ZUNlbGxDb29yZHMoYS5yb3csdi5jb2wpfTticmVhaztjYXNlIlNFLU5XIjoiYm90dG9tIj09PWYmJihyZT17c3RhcnQ6dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoTS5yb3csYS5jb2wpLGVuZDp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhhLnJvdyx2LmNvbCl9KX1i''@;'; put 'put ''cmVhaztjYXNlIk5XLVNFIjpzd2l0Y2goaCl7Y2FzZSJORS1TVyI6InRvcCI9PT1mP3JlPXtzdGFydDphLGVuZDpEfTpyZS5lbmQ9YTticmVhaztjYXNlIk5XLVNFIjoidG9wIj09PWY/cmU9e3N0YXJ0OmEsZW5kOk19OnJlLmVuZD1hO2JyZWFrO2Nhc2UiU0UtTlciOiJ0b3AiPT09Zj9yZT17''@;'; put 'put ''c3RhcnQ6YSxlbmQ6dn06cmUuZW5kPWE7YnJlYWs7Y2FzZSJTVy1ORSI6InRvcCI9PT1mP3JlPXtzdGFydDphLGVuZDpafTpyZS5lbmQ9YX1icmVhaztjYXNlIlNXLU5FIjpzd2l0Y2goaCl7Y2FzZSJOVy1TRSI6cmU9ImJvdHRvbSI9PT1mP3tzdGFydDp0aGlzLmhvdC5fY3JlYXRlQ2VsbENv''@;'; put 'put ''b3JkcyhhLnJvdyx2LmNvbCksZW5kOnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKEQucm93LGEuY29sKX06e3N0YXJ0OnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKHYucm93LGEuY29sKSxlbmQ6dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoYS5yb3csTS5jb2wpfTticmVhaztjYXNl''@;'; put 'put ''IlNXLU5FIjpyZT0idG9wIj09PWY/e3N0YXJ0OnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGwuaGlnaGxpZ2h0LnJvdyxhLmNvbCksZW5kOnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGEucm93LE0uY29sKX06e3N0YXJ0OnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGEucm93LHYu''@;'; put 'put ''Y29sKSxlbmQ6dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHModi5yb3csYS5jb2wpfTticmVhaztjYXNlIlNFLU5XIjoiYm90dG9tIj09PWY/cmU9e3N0YXJ0OnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGEucm93LFouY29sKSxlbmQ6dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHModi5y''@;'; put 'put ''b3csYS5jb2wpfToidG9wIj09PWYmJihyZT17c3RhcnQ6RCxlbmQ6YX0pfWJyZWFrO2Nhc2UiU0UtTlciOnN3aXRjaChoKXtjYXNlIk5XLVNFIjpjYXNlIk5FLVNXIjpjYXNlIlNXLU5FIjoidG9wIj09PWYmJihyZS5lbmQ9YSk7YnJlYWs7Y2FzZSJTRS1OVyI6InRvcCI9PT1mP3JlLmVuZD1h''@;'; put 'put ''OnJlPXtzdGFydDphLGVuZDp2fX19cmV0dXJuIHJlfWlzRHJhZ2dlZCgpe3JldHVybiB0aGlzLmRyYWdnZWQubGVuZ3RoPjB9fWZ1bmN0aW9uIGVlZSgpe2xldHtsYWJlbDpjPSIiLGNvbHNwYW46bD0xLG9yaWdDb2xzcGFuOmE9MSxjb2xsYXBzaWJsZTpkPSExLGNyb3NzSGlkZGVuQ29sdW1u''@;'; put 'put ''czpoPVtdLGlzQ29sbGFwc2VkOmY9ITEsaXNIaWRkZW46dj0hMSxpc1Jvb3Q6TT0hMSxpc1BsYWNlaG9sZGVyOkQ9ITEsaGVhZGVyQ2xhc3NOYW1lczpaPVtdfT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e307cmV0dXJue2xhYmVsOmMs''@;'; put 'put ''Y29sc3BhbjpsLG9yaWdDb2xzcGFuOmEsY29sbGFwc2libGU6ZCxpc0NvbGxhcHNlZDpmLGNyb3NzSGlkZGVuQ29sdW1uczpoLGlzSGlkZGVuOnYsaXNSb290Ok0saXNQbGFjZWhvbGRlcjpELGhlYWRlckNsYXNzTmFtZXM6Wn19ZnVuY3Rpb24gdGVlKGMsbCxhKXsoZnVuY3Rpb24gS3B0KGMs''@;'; put 'put ''bCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiB3MyhjLGwpe3JldHVybiBjLmdldChPbWUoYyxsKSl9ZnVuY3Rp''@;'; put 'put ''b24gZ0EoYyxsLGEpe3JldHVybiBjLnNldChPbWUoYyxsKSxhKSxhfWZ1bmN0aW9uIE9tZShjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50''@;'; put 'put ''IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9Y29uc3QgUG1lPVsibGFiZWwiLCJjb2xsYXBzaWJsZSJdO3ZhciBZZz1uZXcgV2Vha01hcCxaOT1uZXcgV2Vha01hcCxuZWU9bmV3IFdlYWtNYXA7Y2xhc3MgcXB0e2NvbnN0cnVjdG9yKCl7dGVlKHRoaXMsWWcsW10pLHRlZSh0aGlz''@;'; put 'put ''LFo5LDApLHRlZSh0aGlzLG5lZSwxLzApfXNldENvbHVtbnNMaW1pdChsKXtnQShuZWUsdGhpcyxsKX1zZXREYXRhKCl7Z0EoWWcsdGhpcyxmdW5jdGlvbiAkcHQoYyl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjEvMDtjb25z''@;'; put 'put ''dCBhPVtdO2lmKDA9PT1sKXJldHVybiBhO1luKGMsaD0+e2NvbnN0IGY9W107bGV0IHY9MDthLnB1c2goZiksWW4oaCxNPT57Y29uc3QgRD1lZWUoKTtpZihxbyhNKSl7Y29uc3R7bGFiZWw6cmUsY29sc3BhbjpjZSxoZWFkZXJDbGFzc05hbWU6YmV9PU07RC5sYWJlbD1sYyhyZSksIm51bWJl''@;'; put 'put ''ciI9PXR5cGVvZiBjZSYmY2U+MSYmKEQuY29sc3Bhbj1jZSxELm9yaWdDb2xzcGFuPWNlKSwic3RyaW5nIj09dHlwZW9mIGJlJiYoRC5oZWFkZXJDbGFzc05hbWVzPVsuLi5iZS5zcGxpdCgiICIpXSl9ZWxzZSBELmxhYmVsPWxjKE0pO3YrPUQub3JpZ0NvbHNwYW47bGV0IFo9ITE7aWYodj49''@;'; put 'put ''bCYmKEQuY29sc3Bhbj1ELm9yaWdDb2xzcGFuLSh2LWwpLEQub3JpZ0NvbHNwYW49RC5jb2xzcGFuLFo9ITApLGYucHVzaChEKSxELmNvbHNwYW4+MSlmb3IobGV0IHJlPTA7cmU8RC5jb2xzcGFuLTE7cmUrKylmLnB1c2goe2xhYmVsOiIiLGlzUGxhY2Vob2xkZXI6ITB9KTtyZXR1cm4hWn0p''@;'; put 'put ''fSk7Y29uc3QgZD1NYXRoLm1heCguLi55cyhhLGg9PmgubGVuZ3RoKSk7cmV0dXJuIFluKGEsaD0+e2lmKGgubGVuZ3RoPGQpe2NvbnN0IGY9eXMobmV3IEFycmF5KGQtaC5sZW5ndGgpLCgpPT5lZWUoKSk7aC5zcGxpY2UoaC5sZW5ndGgsMCwuLi5mKX19KSxhfShhcmd1bWVudHMubGVuZ3Ro''@;'; put 'put ''PjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06W10sdzMobmVlLHRoaXMpKSksZ0EoWjksdGhpcyx3MyhZZyx0aGlzKS5sZW5ndGgpfWdldERhdGEoKXtyZXR1cm4gdzMoWWcsdGhpcyl9bWVyZ2VXaXRoKGwpe1luKGwsYT0+e2xldHtyb3c6ZCxjb2w6aCwuLi5mfT1hO2Nv''@;'; put 'put ''bnN0IHY9dGhpcy5nZXRIZWFkZXJTZXR0aW5ncyhkLGgpO251bGwhPT12JiZFdSh2LGYsUG1lKX0pfW1hcChsKXtZbih3MyhZZyx0aGlzKSxhPT57WW4oYSxkPT57Y29uc3QgaD1sKHsuLi5kfSk7cW8oaCkmJkV1KGQsaCxQbWUpfSl9KX1nZXRIZWFkZXJTZXR0aW5ncyhsLGEpe3ZhciBkO2lm''@;'; put 'put ''KGw+PXczKFo5LHRoaXMpfHxsPDApcmV0dXJuIG51bGw7Y29uc3QgaD13MyhZZyx0aGlzKVtsXTtyZXR1cm4hMT09PUFycmF5LmlzQXJyYXkoaCl8fGE+PWgubGVuZ3RoP251bGw6bnVsbCE9PShkPWhbYV0pJiZ2b2lkIDAhPT1kP2Q6bnVsbH1nZXRIZWFkZXJzU2V0dGluZ3MobCxhKXtsZXQg''@;'; put 'put ''ZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06MTtjb25zdCBoPVtdO2lmKGw+PXczKFo5LHRoaXMpfHxsPDApcmV0dXJuIGg7Y29uc3QgZj13MyhZZyx0aGlzKVtsXTtsZXQgdj0wO2ZvcihsZXQgTT1hO008Zi5sZW5ndGg7TSsrKXtjb25z''@;'; put 'put ''dCBEPWZbTV07aWYoRC5pc1BsYWNlaG9sZGVyKXRocm93IG5ldyBFcnJvcigiVGhlIGZpcnN0IGNvbHVtbiBzZXR0aW5ncyBjYW5ub3Qgb3ZlcmxhcCB0aGUgb3RoZXIgaGVhZGVyIGxheWVycyIpO2lmKHYrPUQuY29sc3BhbixoLnB1c2goRCksRC5jb2xzcGFuPjEmJihNKz1ELmNvbHNwYW4t''@;'; put 'put ''MSksdj09PWQpYnJlYWs7aWYodj5kKXRocm93IG5ldyBFcnJvcigiVGhlIGxhc3QgY29sdW1uIHNldHRpbmdzIGNhbm5vdCBvdmVybGFwIHRoZSBvdGhlciBoZWFkZXIgbGF5ZXJzIil9cmV0dXJuIGh9Z2V0TGF5ZXJzQ291bnQoKXtyZXR1cm4gdzMoWjksdGhpcyl9Z2V0Q29sdW1uc0NvdW50''@;'; put 'put ''KCl7cmV0dXJuIHczKFo5LHRoaXMpPjA/dzMoWWcsdGhpcylbMF0ubGVuZ3RoOjB9Y2xlYXIoKXtnQShZZyx0aGlzLFtdKSxnQShaOSx0aGlzLDApfX1mdW5jdGlvbiByZWUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIFhwdChjKXt2YXIgbD1mdW5jdGlvbiBKcHQoYyxsKXtpZigib2JqZWN0''@;'; put 'put ''IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11''@;'; put 'put ''c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJh''@;'; put 'put ''YmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNvbnN0IEZtZT0iREYtcHJlLW9yZGVyIixCbWU9bmV3IE1hcChbW0ZtZSxmdW5jdGlvbiBIbWUoYyxsKXtsZXQgYT1jLmNhbGwobCx0aGlzKTtmb3IobGV0IGQ9MDtkPHRoaXMuY2hpbGRzLmxlbmd0aDtkKysp''@;'; put 'put ''e2lmKCExPT09YSlyZXR1cm4hMTthPUhtZS5jYWxsKHRoaXMuY2hpbGRzW2RdLGMsbCl9cmV0dXJuIGF9XSxbIkRGLXBvc3Qtb3JkZXIiLGZ1bmN0aW9uIE5tZShjLGwpe2ZvcihsZXQgYT0wO2E8dGhpcy5jaGlsZHMubGVuZ3RoO2ErKylpZighMT09PU5tZS5jYWxsKHRoaXMuY2hpbGRzW2Fd''@;'; put 'put ''LGMsbCkpcmV0dXJuITE7cmV0dXJuIGMuY2FsbChsLHRoaXMpfV0sWyJCRiIsZnVuY3Rpb24gZTR0KGMsbCl7Y29uc3QgYT1bdGhpc107IWZ1bmN0aW9uIGQoKXtpZigwPT09YS5sZW5ndGgpcmV0dXJuO2NvbnN0IGg9YS5zaGlmdCgpO2EucHVzaCguLi5oLmNoaWxkcyksITEhPT1jLmNhbGwo''@;'; put 'put ''bCxoKSYmZCgpfSgpfV1dKTtjbGFzcyBJSHtjb25zdHJ1Y3RvcihsKXtyZWUodGhpcywiZGF0YSIse30pLHJlZSh0aGlzLCJwYXJlbnQiLG51bGwpLHJlZSh0aGlzLCJjaGlsZHMiLFtdKSx0aGlzLmRhdGE9bH1hZGRDaGlsZChsKXtsLnBhcmVudD10aGlzLHRoaXMuY2hpbGRzLnB1c2gobCl9''@;'; put 'put ''Y2xvbmVUcmVlKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnRoaXM7Y29uc3QgYT1uZXcgSUgoey4uLmwuZGF0YX0pO2ZvcihsZXQgZD0wO2Q8bC5jaGlsZHMubGVuZ3RoO2QrKylhLmFkZENoaWxkKHRoaXMuY2xvbmVUcmVl''@;'; put 'put ''KGwuY2hpbGRzW2RdKSk7cmV0dXJuIGF9cmVwbGFjZVRyZWVXaXRoKGwpe3RoaXMuZGF0YT17Li4ubC5kYXRhfSx0aGlzLmNoaWxkcz1bXTtmb3IobGV0IGE9MDthPGwuY2hpbGRzLmxlbmd0aDthKyspdGhpcy5hZGRDaGlsZChsLmNoaWxkc1thXSl9d2Fsa0Rvd24obCl7bGV0IGE9YXJndW1l''@;'; put 'put ''bnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOiJCRiI7aWYoIUJtZS5oYXMoYSkpdGhyb3cgbmV3IEVycm9yKGBUcmF2ZXJzYWwgc3RyYXRlZ3kgIiR7YX0iIGRvZXMgbm90IGV4aXN0YCk7Qm1lLmdldChhKS5jYWxsKHRoaXMsbCx0aGlzKX13YWxrVXAo''@;'; put 'put ''bCl7Y29uc3QgYT10aGlzLGQ9aD0+eyExIT09bC5jYWxsKGEsaCkmJm51bGwhPT1oLnBhcmVudCYmZChoLnBhcmVudCl9O2QodGhpcyl9fWZ1bmN0aW9uIGllZShjLGwsYSl7KGZ1bmN0aW9uIG40dChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFs''@;'; put 'put ''aXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gcmQoYyxsKXtyZXR1cm4gYy5nZXQoam1lKGMsbCkpfWZ1bmN0aW9uIGptZShjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMo''@;'; put 'put ''bCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIGd3PW5ldyBXZWFrTWFwLFc5PW5ldyBXZWFrTWFwLG13PW5ldyBXZWFrTWFwO2NsYXNzIGk0dHtjb25z''@;'; put 'put ''dHJ1Y3RvcihsKXtpZWUodGhpcyxndyxuZXcgTWFwKSxpZWUodGhpcyxXOSxuZXcgTWFwKSxpZWUodGhpcyxtdyxudWxsKSxmdW5jdGlvbiByNHQoYyxsLGEpe2Muc2V0KGptZShjLGwpLGEpfShtdyx0aGlzLGwpfWdldFJvb3RzKCl7cmV0dXJuIEFycmF5LmZyb20ocmQoZ3csdGhpcykudmFs''@;'; put 'put ''dWVzKCkpfWdldFJvb3RCeUNvbHVtbihsKXtsZXQgYTtyZXR1cm4gcmQoVzksdGhpcykuaGFzKGwpJiYoYT1yZChndyx0aGlzKS5nZXQocmQoVzksdGhpcykuZ2V0KGwpKSksYX1nZXROb2RlKGwsYSl7Y29uc3QgZD10aGlzLmdldFJvb3RCeUNvbHVtbihhKTtpZighZClyZXR1cm47Y29uc3Qg''@;'; put 'put ''aD1hLXJkKFc5LHRoaXMpLmdldChhKTtsZXQgdixmPTA7cmV0dXJuIGQud2Fsa0Rvd24oTT0+e2NvbnN0e2RhdGE6e29yaWdDb2xzcGFuOkQsaGVhZGVyTGV2ZWw6Wn19PU07aWYobD09PVope2lmKGg+PWYmJmg8PWYrRC0xKXJldHVybiB2PU0sdi5kYXRhLmlzUm9vdD1hPT09di5kYXRhLmNv''@;'; put 'put ''bHVtbkluZGV4LCExO2YrPUR9fSksdn1yZWJ1aWxkVHJlZUluZGV4KCl7bGV0IGw9MDtyZChXOSx0aGlzKS5jbGVhcigpLFluKHJkKGd3LHRoaXMpLGE9PntsZXRbLHtkYXRhOntjb2xzcGFuOmR9fV09YTtmb3IobGV0IGg9bDtoPGwrZDtoKyspcmQoVzksdGhpcykuc2V0KGgsbCk7bCs9ZH0p''@;'; put 'put ''fWJ1aWxkVHJlZSgpe3RoaXMuY2xlYXIoKTtjb25zdCBsPXJkKG13LHRoaXMpLmdldENvbHVtbnNDb3VudCgpO2xldCBhPTA7Zm9yKDthPGw7KXtjb25zdCBkPXJkKG13LHRoaXMpLmdldEhlYWRlclNldHRpbmdzKDAsYSksaD1uZXcgSUg7cmQoZ3csdGhpcykuc2V0KGEsaCksdGhpcy5idWls''@;'; put 'put ''ZExlYXZlcyhoLGEsMCxkLm9yaWdDb2xzcGFuKSxhKz1kLm9yaWdDb2xzcGFufXRoaXMucmVidWlsZFRyZWVJbmRleCgpfWJ1aWxkTGVhdmVzKGwsYSxkKXtsZXQgaD1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXT9hcmd1bWVudHNbM106MTtjb25zdCBmPXJkKG13''@;'; put 'put ''LHRoaXMpLmdldEhlYWRlcnNTZXR0aW5ncyhkLGEsaCk7ZCs9MSxZbihmLHY9Pntjb25zdCBNPXsuLi52LGhlYWRlckxldmVsOmQtMSxjb2x1bW5JbmRleDphfTtsZXQgRDsxPT09ZD8obC5kYXRhPU0sRD1sKTooRD1uZXcgSUgoTSksbC5hZGRDaGlsZChEKSksZDxyZChtdyx0aGlzKS5nZXRM''@;'; put 'put ''YXllcnNDb3VudCgpJiZ0aGlzLmJ1aWxkTGVhdmVzKEQsYSxkLHYub3JpZ0NvbHNwYW4pLGErPXYub3JpZ0NvbHNwYW59KX1jbGVhcigpe3JkKGd3LHRoaXMpLmNsZWFyKCkscmQoVzksdGhpcykuY2xlYXIoKX19ZnVuY3Rpb24gem1lKGMsbCl7Yy53YWxrRG93bihhPT57bGV0e2RhdGE6ZCxj''@;'; put 'put ''aGlsZHM6aH09YTtpZighZC5pc0hpZGRlbiYmKGwoZC5jb2x1bW5JbmRleCksMD09PWgubGVuZ3RoKSlmb3IobGV0IGY9MTtmPGQuY29sc3BhbjtmKyspbChkLmNvbHVtbkluZGV4K2YpfSl9ZnVuY3Rpb24gUkgoYyxsKXtsZXR7Y2hpbGRzOmF9PWM7aWYoMCE9PWEubGVuZ3RoKXJldHVybiBh''@;'; put 'put ''WzBdLmRhdGFbbF19ZnVuY3Rpb24gTEgoYyl7cmV0dXJuIFJIKGMsIm9yaWdDb2xzcGFuIik9PT1jLmRhdGEub3JpZ0NvbHNwYW59ZnVuY3Rpb24gYWVlKGMpe2NvbnN0e2RhdGE6bCxjaGlsZHM6YX09YztpZighbC5pc0NvbGxhcHNlZHx8bC5pc0hpZGRlbnx8bC5vcmlnQ29sc3Bhbjw9MSly''@;'; put 'put ''ZXR1cm57cm9sbGJhY2tNb2RpZmljYXRpb246KCk9Pnt9LGFmZmVjdGVkQ29sdW1uczpbXSxjb2xzcGFuQ29tcGVuc2F0aW9uOjB9O2lmKExIKGMpKXJldHVybiBhZWUoYVswXSk7bC5pc0NvbGxhcHNlZD0hMTtjb25zdCBoPWEuc2xpY2UoMSksZj1uZXcgU2V0O2xldCB2PTA7aWYoaC5sZW5n''@;'; put 'put ''dGg+MClZbihoLE09PntNLnJlcGxhY2VUcmVlV2l0aChNLmRhdGEuY2xvbmVkVHJlZSksTS5kYXRhLmNsb25lZFRyZWU9bnVsbCx2Kz1NLmRhdGEuY29sc3Bhbix6bWUoTSxaPT57Zi5hZGQoWil9KX0pO2Vsc2V7Y29uc3R7Y29sc3BhbjpNLG9yaWdDb2xzcGFuOkQsY29sdW1uSW5kZXg6Wn09''@;'; put 'put ''bDt2PUQtTTtmb3IobGV0IHJlPTE7cmU8RDtyZSsrKWYuYWRkKForcmUpfXJldHVybiBjLndhbGtVcChNPT57Y29uc3R7ZGF0YTpEfT1NO0QuY29sc3Bhbis9dixELmNvbHNwYW4+PUQub3JpZ0NvbHNwYW4/KEQuY29sc3Bhbj1ELm9yaWdDb2xzcGFuLEQuaXNDb2xsYXBzZWQ9ITEpOkxIKE0p''@;'; put 'put ''JiYoRC5pc0NvbGxhcHNlZD1SSChNLCJpc0NvbGxhcHNlZCIpKX0pLHtyb2xsYmFja01vZGlmaWNhdGlvbjooKT0+b2VlKGMpLGFmZmVjdGVkQ29sdW1uczpBcnJheS5mcm9tKGYpLGNvbHNwYW5Db21wZW5zYXRpb246dn19ZnVuY3Rpb24gb2VlKGMpe3ZhciBsO2NvbnN0e2RhdGE6YSxjaGls''@;'; put 'put ''ZHM6ZH09YztpZihhLmlzQ29sbGFwc2VkfHxhLmlzSGlkZGVufHxhLm9yaWdDb2xzcGFuPD0xKXJldHVybntyb2xsYmFja01vZGlmaWNhdGlvbjooKT0+e30sYWZmZWN0ZWRDb2x1bW5zOltdLGNvbHNwYW5Db21wZW5zYXRpb246MH07aWYoTEgoYykpcmV0dXJuIG9lZShkWzBdKTthLmlzQ29s''@;'; put 'put ''bGFwc2VkPSEwO2NvbnN0IGY9ZC5zbGljZSgxKSx2PW5ldyBTZXQ7aWYoZi5sZW5ndGg+MClZbihmLEQ9Pnt6bWUoRCxaPT57di5hZGQoWil9KSxELmRhdGEuY2xvbmVkVHJlZT1ELmNsb25lVHJlZSgpLEQud2Fsa0Rvd24oWj0+e2xldHtkYXRhOnJlfT1aO3JlLmlzSGlkZGVuPSEwfSl9KTtl''@;'; put 'put ''bHNle2NvbnN0e29yaWdDb2xzcGFuOkQsY29sdW1uSW5kZXg6Wn09YTtmb3IobGV0IHJlPTE7cmU8RDtyZSsrKXYuYWRkKForcmUpfWNvbnN0IE09YS5jb2xzcGFuLShudWxsIT09KGw9UkgoYywiY29sc3BhbiIpKSYmdm9pZCAwIT09bD9sOjEpO3JldHVybiBjLndhbGtVcChEPT57Y29uc3R7''@;'; put 'put ''ZGF0YTpafT1EO1ouY29sc3Bhbi09TSxaLmNvbHNwYW48PTE/KFouY29sc3Bhbj0xLFouaXNDb2xsYXBzZWQ9ITApOkxIKEQpJiYoWi5pc0NvbGxhcHNlZD1SSChELCJpc0NvbGxhcHNlZCIpKX0pLHtyb2xsYmFja01vZGlmaWNhdGlvbjooKT0+YWVlKGMpLGFmZmVjdGVkQ29sdW1uczpBcnJh''@;'; put 'put ''eS5mcm9tKHYpLGNvbHNwYW5Db21wZW5zYXRpb246TX19Y29uc3QgVW1lPW5ldyBNYXAoW1siY29sbGFwc2UiLG9lZV0sWyJleHBhbmQiLGFlZV0sWyJoaWRlLWNvbHVtbiIsZnVuY3Rpb24gYTR0KGMsbCl7aWYoIU51bWJlci5pc0ludGVnZXIobCkpdGhyb3cgbmV3IEVycm9yKCJUaGUgcGFz''@;'; put 'put ''c2VkIGdyaWRDb2x1bW5JbmRleCBhcmd1bWVudCBoYXMgaW52YWxpZCB0eXBlLiIpO2lmKGMuY2hpbGRzLmxlbmd0aD4wKXRocm93IG5ldyBFcnJvcihnbGBUaGUgcGFzc2VkIG5vZGUgaXMgbm90IHRoZSBsYXN0IG5vZGUgb24gdGhlIHRyZWUuIE9ubHkgZm9yXHgyMAp0aGUgbGFzdCBub2Rl''@;'; put 'put ''LCB0aGUgaGlkZSBjb2x1bW4gbW9kaWZpY2F0aW9uIGNhbiBiZSBhcHBsaWVkLmApO2NvbnN0e2Nyb3NzSGlkZGVuQ29sdW1uczphfT1jLmRhdGE7aWYoYS5pbmNsdWRlcyhsKSlyZXR1cm47bGV0IGQ9ITE7Yy53YWxrVXAoaD0+e2NvbnN0e2RhdGE6e2NvbGxhcHNpYmxlOmZ9fT1oO2lmKGYp''@;'; put 'put ''cmV0dXJuIGQ9ITAsITF9KSwhZCYmYy53YWxrVXAoaD0+e2NvbnN0e2RhdGE6Zn09aDtmLmNyb3NzSGlkZGVuQ29sdW1ucy5wdXNoKGwpLGYuY29sc3Bhbj4xP2YuY29sc3Bhbi09MTpmLmlzSGlkZGVuPSEwfSl9XSxbInNob3ctY29sdW1uIixmdW5jdGlvbiBvNHQoYyxsKXtpZighTnVtYmVy''@;'; put 'put ''LmlzSW50ZWdlcihsKSl0aHJvdyBuZXcgRXJyb3IoIlRoZSBwYXNzZWQgZ3JpZENvbHVtbkluZGV4IGFyZ3VtZW50IGhhcyBpbnZhbGlkIHR5cGUuIik7aWYoYy5jaGlsZHMubGVuZ3RoPjApdGhyb3cgbmV3IEVycm9yKGdsYFRoZSBwYXNzZWQgbm9kZSBpcyBub3QgdGhlIGxhc3Qgbm9kZSBv''@;'; put 'put ''biB0aGUgdHJlZS4gT25seSBmb3JceDIwCnRoZSBsYXN0IG5vZGUsIHRoZSBzaG93IGNvbHVtbiBtb2RpZmljYXRpb24gY2FuIGJlIGFwcGxpZWQuYCk7Y29uc3R7Y3Jvc3NIaWRkZW5Db2x1bW5zOmF9PWMuZGF0YTtpZighYS5pbmNsdWRlcyhsKSlyZXR1cm47bGV0IGQ9ITE7Yy53YWxrVXAo''@;'; put 'put ''aD0+e2NvbnN0e2RhdGE6e2NvbGxhcHNpYmxlOmZ9fT1oO2lmKGYpcmV0dXJuIGQ9ITAsITF9KSwhZCYmYy53YWxrVXAoaD0+e2NvbnN0e2RhdGE6Zn09aDtmLmNyb3NzSGlkZGVuQ29sdW1ucy5zcGxpY2UoZi5jcm9zc0hpZGRlbkNvbHVtbnMuaW5kZXhPZihsKSwxKSwhZi5pc0hpZGRlbiYm''@;'; put 'put ''Zi5jb2xzcGFuPGYub3JpZ0NvbHNwYW4mJihmLmNvbHNwYW4rPTEpLGYuaXNIaWRkZW49ITF9KX1dXSk7ZnVuY3Rpb24gT0goYyl7Y29uc3QgbD1bXTtyZXR1cm4gWW4oYyxhPT57YS53YWxrRG93bihkPT57Y29uc3QgaD1kLmRhdGEse29yaWdDb2xzcGFuOmYsY29sdW1uSW5kZXg6dixoZWFk''@;'; put 'put ''ZXJMZXZlbDpNLGNyb3NzSGlkZGVuQ29sdW1uczpEfT1oLFo9ZnVuY3Rpb24gYzR0KGMsbCl7bGV0IGE7cmV0dXJuIEFycmF5LmlzQXJyYXkoY1tsXSk/YT1jW2xdOihhPVtdLGNbbF09YSksYX0obCxNKTtsZXQgcmU9ITE7Zm9yKGxldCBjZT12O2NlPHYrZjtjZSsrKWlmKEQuaW5jbHVkZXMo''@;'; put 'put ''Y2UpfHxyZSlaLnB1c2goe2xhYmVsOiIiLGlzUGxhY2Vob2xkZXI6ITB9KTtlbHNle2NvbnN0IEVlPWw0dChoKTtFZS5pc1Jvb3Q9ITAsWi5wdXNoKEVlKSxyZT0hMH19KX0pLGx9ZnVuY3Rpb24gbDR0KGMpe2NvbnN0e2Nyb3NzSGlkZGVuQ29sdW1uczpsLC4uLmF9PWVlZShjKTtyZXR1cm4g''@;'; put 'put ''YX1mdW5jdGlvbiBzZWUoYyxsLGEpeyhmdW5jdGlvbiB1NHQoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9u''@;'; put 'put ''IG1BKGMsbCxhKXtyZXR1cm4gYy5zZXQoWm1lKGMsbCksYSksYX1mdW5jdGlvbiBxYyhjLGwpe3JldHVybiBjLmdldChabWUoYyxsKSl9ZnVuY3Rpb24gWm1lKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6''@;'; put 'put ''YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgbjQ9bmV3IFdlYWtNYXAsSmQ9bmV3IFdlYWtNYXAsWTk9bmV3IFdlYWtNYXA7Y2xhc3MgZDR0e2NvbnN0cnVjdG9yKCl7c2VlKHRoaXMsbjQsbmV3IHFwdCks''@;'; put 'put ''c2VlKHRoaXMsSmQsbmV3IGk0dChxYyhuNCx0aGlzKSkpLHNlZSh0aGlzLFk5LFtbXV0pfXNldFN0YXRlKGwpe3FjKG40LHRoaXMpLnNldERhdGEobCk7bGV0IGE9ITE7dHJ5e3FjKEpkLHRoaXMpLmJ1aWxkVHJlZSgpfWNhdGNoe3FjKEpkLHRoaXMpLmNsZWFyKCkscWMobjQsdGhpcykuY2xl''@;'; put 'put ''YXIoKSxhPSEwfXJldHVybiBtQShZOSx0aGlzLE9IKHFjKEpkLHRoaXMpLmdldFJvb3RzKCkpKSxhfXNldENvbHVtbnNMaW1pdChsKXtxYyhuNCx0aGlzKS5zZXRDb2x1bW5zTGltaXQobCl9bWVyZ2VTdGF0ZVdpdGgobCl7Y29uc3QgYT15cyhsLGQ9PntsZXR7cm93OmgsLi4uZn09ZDtyZXR1''@;'; put 'put ''cm57cm93Omg8MD90aGlzLnJvd0Nvb3Jkc1RvTGV2ZWwoaCk6aCwuLi5mfX0pO3FjKG40LHRoaXMpLm1lcmdlV2l0aChhKSxxYyhKZCx0aGlzKS5idWlsZFRyZWUoKSxtQShZOSx0aGlzLE9IKHFjKEpkLHRoaXMpLmdldFJvb3RzKCkpKX1tYXBTdGF0ZShsKXtxYyhuNCx0aGlzKS5tYXAobCks''@;'; put 'put ''cWMoSmQsdGhpcykuYnVpbGRUcmVlKCksbUEoWTksdGhpcyxPSChxYyhKZCx0aGlzKS5nZXRSb290cygpKSl9bWFwTm9kZXMobCl7cmV0dXJuIHF1KHFjKEpkLHRoaXMpLmdldFJvb3RzKCksKGEsZCk9PihkLndhbGtEb3duKGg9Pntjb25zdCBmPWwoaC5kYXRhKTt2b2lkIDAhPT1mJiZhLnB1''@;'; put 'put ''c2goZil9KSxhKSxbXSl9dHJpZ2dlck5vZGVNb2RpZmljYXRpb24obCxhLGQpe2E8MCYmKGE9dGhpcy5yb3dDb29yZHNUb0xldmVsKGEpKTtjb25zdCBoPXFjKEpkLHRoaXMpLmdldE5vZGUoYSxkKTtsZXQgZjtyZXR1cm4gaCYmKGY9ZnVuY3Rpb24gczR0KGMsbCxhKXtpZighVW1lLmhhcyhj''@;'; put 'put ''KSl0aHJvdyBuZXcgRXJyb3IoYFRoZSBub2RlIG1vZGlmaWVyIGFjdGlvbiAoIiR7Y30iKSBkb2VzIG5vdCBleGlzdC5gKTtyZXR1cm4gVW1lLmdldChjKShsLGEpfShsLGgsZCksbUEoWTksdGhpcyxPSChxYyhKZCx0aGlzKS5nZXRSb290cygpKSkpLGZ9dHJpZ2dlckNvbHVtbk1vZGlmaWNh''@;'; put 'put ''dGlvbihsLGEpe3JldHVybiB0aGlzLnRyaWdnZXJOb2RlTW9kaWZpY2F0aW9uKGwsLTEsYSl9cm93Q29vcmRzVG9MZXZlbChsKXtpZihsPj0wKXJldHVybiBudWxsO2NvbnN0IGE9bCtNYXRoLm1heCh0aGlzLmdldExheWVyc0NvdW50KCksMSk7cmV0dXJuIGE8MD9udWxsOmF9bGV2ZWxUb1Jv''@;'; put 'put ''d0Nvb3JkcyhsKXtpZihsPDApcmV0dXJuIG51bGw7Y29uc3QgYT1sLU1hdGgubWF4KHRoaXMuZ2V0TGF5ZXJzQ291bnQoKSwxKTtyZXR1cm4gYT49MD9udWxsOmF9Z2V0SGVhZGVyU2V0dGluZ3MobCxhKXt2YXIgZCxoO3JldHVybiBsPDAmJihsPXRoaXMucm93Q29vcmRzVG9MZXZlbChsKSks''@;'; put 'put ''bnVsbD09PWx8fGw+PXRoaXMuZ2V0TGF5ZXJzQ291bnQoKT9udWxsOm51bGwhPT0oZD1udWxsPT09KGg9cWMoWTksdGhpcylbbF0pfHx2b2lkIDA9PT1oP3ZvaWQgMDpoW2FdKSYmdm9pZCAwIT09ZD9kOm51bGx9Z2V0SGVhZGVyVHJlZU5vZGVEYXRhKGwsYSl7Y29uc3QgZD10aGlzLmdldEhl''@;'; put 'put ''YWRlclRyZWVOb2RlKGwsYSk7cmV0dXJuIGQ/ey4uLmQuZGF0YX06bnVsbH1nZXRIZWFkZXJUcmVlTm9kZShsLGEpe3JldHVybiBsPDAmJihsPXRoaXMucm93Q29vcmRzVG9MZXZlbChsKSksbnVsbD09PWx8fGw+PXRoaXMuZ2V0TGF5ZXJzQ291bnQoKT9udWxsOnFjKEpkLHRoaXMpLmdldE5v''@;'; put 'put ''ZGUobCxhKXx8bnVsbH1maW5kVG9wTW9zdEVudGlyZUhlYWRlckxldmVsKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpsO2NvbnN0IGQ9YS1sKzE7bGV0IGg9ITEsZj1udWxsO2ZvcihsZXQgdj1sO3Y8PWE7disrKXtjb25z''@;'; put 'put ''dCBNPXFjKEpkLHRoaXMpLmdldFJvb3RCeUNvbHVtbih2KTtpZighTSlicmVhaztoPSEwLE0ud2Fsa0Rvd24oRD0+e2NvbnN0e2NvbHVtbkluZGV4OlosaGVhZGVyTGV2ZWw6cmUsb3JpZ0NvbHNwYW46Y2UsaXNIaWRkZW46YmV9PUQuZGF0YTtiZXx8Y2U8PWQmJlo+PWwmJlorY2UtMTw9YSYm''@;'; put 'put ''KG51bGw9PT1mfHxyZTxmKSYmKGY9cmUpfSxGbWUpfXJldHVybiBoJiZudWxsPT09Zj8tMTp0aGlzLmxldmVsVG9Sb3dDb29yZHMoZj8/MCl9ZmluZExlZnRNb3N0Q29sdW1uSW5kZXgobCxhKXt2YXIgZDtjb25zdHtpc1Jvb3Q6aH09bnVsbCE9PShkPXRoaXMuZ2V0SGVhZGVyU2V0dGluZ3Mo''@;'; put 'put ''bCxhKSkmJnZvaWQgMCE9PWQ/ZDp7aXNSb290OiEwfTtpZihoKXJldHVybiBhO2xldCBmPWEtMTtmb3IoO2Y+PTA7KXt2YXIgdjtjb25zdHtpc1Jvb3Q6TX09bnVsbCE9PSh2PXRoaXMuZ2V0SGVhZGVyU2V0dGluZ3MobCxmKSkmJnZvaWQgMCE9PXY/djp7aXNSb290OiEwfTtpZihNKWJyZWFr''@;'; put 'put ''O2YtPTF9cmV0dXJuIGZ9ZmluZFJpZ2h0TW9zdENvbHVtbkluZGV4KGwsYSl7dmFyIGQ7Y29uc3R7aXNSb290Omgsb3JpZ0NvbHNwYW46Zn09bnVsbCE9PShkPXRoaXMuZ2V0SGVhZGVyU2V0dGluZ3MobCxhKSkmJnZvaWQgMCE9PWQ/ZDp7aXNSb290OiEwLG9yaWdDb2xzcGFuOjF9O2lmKGgp''@;'; put 'put ''cmV0dXJuIGErZi0xO2xldCB2PWErMTtmb3IoO3Y8dGhpcy5nZXRDb2x1bW5zQ291bnQoKTspe3ZhciBNO2NvbnN0e2lzUm9vdDpEfT1udWxsIT09KE09dGhpcy5nZXRIZWFkZXJTZXR0aW5ncyhsLHYpKSYmdm9pZCAwIT09TT9NOntpc1Jvb3Q6ITB9O2lmKEQpYnJlYWs7dis9MX1yZXR1cm4g''@;'; put 'put ''di0xfWdldExheWVyc0NvdW50KCl7cmV0dXJuIHFjKG40LHRoaXMpLmdldExheWVyc0NvdW50KCl9Z2V0Q29sdW1uc0NvdW50KCl7cmV0dXJuIHFjKG40LHRoaXMpLmdldENvbHVtbnNDb3VudCgpfWNsZWFyKCl7bUEoWTksdGhpcyxbXSkscWMobjQsdGhpcykuY2xlYXIoKSxxYyhKZCx0aGlz''@;'; put 'put ''KS5jbGVhcigpfX1mdW5jdGlvbiB2QShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gaDR0KGMpe3ZhciBsPWZ1bmN0aW9uIGY0dChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEu''@;'; put 'put ''Y2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3Ry''@;'; put 'put ''aW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y29uc3QgZzR0PWNsYXNzIHA0dHtjb25zdHJ1Y3Rv''@;'; put 'put ''cihsLGEpe3ZBKHRoaXMsImhvdCIsdm9pZCAwKSx2QSh0aGlzLCJuZXN0ZWRIZWFkZXJTZXR0aW5nc0dldHRlciIsdm9pZCAwKSx2QSh0aGlzLCJsYXllcnNDb3VudCIsMCksdkEodGhpcywiY29udGFpbmVyIix2b2lkIDApLHZBKHRoaXMsIndpZHRoc01hcCIsdm9pZCAwKSx0aGlzLmhvdD1s''@;'; put 'put ''LHRoaXMubmVzdGVkSGVhZGVyU2V0dGluZ3NHZXR0ZXI9YSx0aGlzLndpZHRoc01hcD10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5jcmVhdGVBbmRSZWdpc3RlckluZGV4TWFwKCJuZXN0ZWRIZWFkZXJzLndpZHRoc01hcCIsInBoeXNpY2FsSW5kZXhUb1ZhbHVlIil9c2V0TGF5ZXJzQ291''@;'; put 'put ''bnQobCl7cmV0dXJuIHRoaXMubGF5ZXJzQ291bnQ9bCx0aGlzfWdldFdpZHRoKGwpe3JldHVybiB0aGlzLndpZHRoc01hcC5nZXRWYWx1ZUF0SW5kZXgodGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihsKSl9YnVpbGRXaWR0aHNNYXAoKXtjb25zdCBsPXRoaXMuaG90LmdldEN1cnJlbnRUaGVt''@;'; put 'put ''ZU5hbWUoKTt0aGlzLmNvbnRhaW5lcj10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy5jb250YWluZXIuY2xhc3NMaXN0LmFkZCgiaGFuZHNvbnRhYmxlIiwiaHRHaG9zdFRhYmxlIiwiaHRBdXRvU2l6ZSIpLGwmJnRoaXMuY29udGFpbmVyLmNsYXNzTGlz''@;'; put 'put ''dC5hZGQobCksdGhpcy5fYnVpbGRHaG9zdFRhYmxlKHRoaXMuY29udGFpbmVyKSx0aGlzLmhvdC5yb290RG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLmNvbnRhaW5lcik7Y29uc3QgYT10aGlzLmNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCJ0cjpsYXN0LW9mLXR5cGUgdGgiKSxk''@;'; put 'put ''PWEubGVuZ3RoO3RoaXMud2lkdGhzTWFwLmNsZWFyKCk7Zm9yKGxldCBoPTA7aDxkO2grKyl7Y29uc3QgZj10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGgpLHY9dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihmKTt0aGlzLndpZHRoc01h''@;'; put 'put ''cC5zZXRWYWx1ZUF0SW5kZXgodixhW2hdLm9mZnNldFdpZHRoKX10aGlzLmNvbnRhaW5lci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuY29udGFpbmVyKSx0aGlzLmNvbnRhaW5lcj1udWxsfV9idWlsZEdob3N0VGFibGUobCl7Y29uc3R7cm9vdERvY3VtZW50OmEsY29sdW1uSW5kZXhN''@;'; put 'put ''YXBwZXI6ZH09dGhpcy5ob3QsaD1hLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxmPWEuY3JlYXRlRWxlbWVudCgidGFibGUiKSx2PSEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5kcm9wZG93bk1lbnUsTT1kLmdldFJlbmRlcmFibGVJbmRleGVzTGVuZ3RoKCk7Zm9yKGxldCBEPTA7RDx0aGlz''@;'; put 'put ''LmxheWVyc0NvdW50O0QrKyl7Y29uc3QgWj1hLmNyZWF0ZUVsZW1lbnQoInRyIik7Zm9yKGxldCByZT0wO3JlPE07cmUrKyl7bGV0IGNlPWQuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChyZSk7bnVsbD09PWNlJiYoY2U9cmUpO2NvbnN0IGJlPWEuY3JlYXRlRWxlbWVudCgidGgiKSxF''@;'; put 'put ''ZT10aGlzLm5lc3RlZEhlYWRlclNldHRpbmdzR2V0dGVyKEQsY2UpO2lmKEVlJiYoIUVlLmlzUGxhY2Vob2xkZXJ8fEVlLmlzSGlkZGVuKSl7bGV0IEJlPUVlLmxhYmVsO3YmJihCZSs9JzxidXR0b24gY2xhc3M9ImNoYW5nZVR5cGUiPjwvYnV0dG9uPicpLHo3KGJlLEJlKSxiZS5jb2xTcGFu''@;'; put 'put ''PUVlLmNvbHNwYW4sWi5hcHBlbmRDaGlsZChiZSl9fWYuYXBwZW5kQ2hpbGQoWil9aC5hcHBlbmRDaGlsZChmKSxsLmFwcGVuZENoaWxkKGgpfWNsZWFyKCl7dGhpcy53aWR0aHNNYXAuY2xlYXIoKSx0aGlzLmNvbnRhaW5lcj1udWxsfX07ZnVuY3Rpb24gV21lKGMsbCxhKXtyZXR1cm4obD1m''@;'; put 'put ''dW5jdGlvbiB2NHQoYyl7dmFyIGw9ZnVuY3Rpb24gYjR0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9m''@;'; put 'put ''IGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShs''@;'; put 'put ''KSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBiQShjLGwsYSl7WW1lKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBZbWUoYyxsKXtpZihsLmhhcyhjKSl0''@;'; put 'put ''aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIEdnKGMsbCxhKXtyZXR1cm4gYy5zZXQoWGMoYyxsKSxhKSxhfWZ1bmN0aW9uIF9zKGMsbCl7cmV0dXJuIGMuZ2V0KFhjKGMs''@;'; put 'put ''bCkpfWZ1bmN0aW9uIFhjKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1jb25z''@;'; put 'put ''dCBHbWU9Im5lc3RlZEhlYWRlcnMiO3ZhciBEbD1uZXcgV2Vha01hcCxDNj1uZXcgV2Vha01hcCx5QT1uZXcgV2Vha01hcCxQSD1uZXcgV2Vha01hcCxGSD1uZXcgV2Vha01hcCxodT1uZXcgV2Vha1NldDtjbGFzcyBfNHQgZXh0ZW5kcyBGc3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3Vt''@;'; put 'put ''ZW50cyksZnVuY3Rpb24gbTR0KGMsbCl7WW1lKGMsbCksbC5hZGQoYyl9KHRoaXMsaHUpLGJBKHRoaXMsRGwsbmV3IGQ0dCksYkEodGhpcyxDNixudWxsKSxiQSh0aGlzLHlBLG51bGwpLGJBKHRoaXMsUEgsITEpLGJBKHRoaXMsRkgsbnVsbCksV21lKHRoaXMsImdob3N0VGFibGUiLG5ldyBn''@;'; put 'put ''NHQodGhpcy5ob3QsKGwsYSk9PnRoaXMuZ2V0SGVhZGVyU2V0dGluZ3MobCxhKSkpLFdtZSh0aGlzLCJkZXRlY3RlZE92ZXJsYXBwZWRIZWFkZXJzIiwhMSl9c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIEdtZX1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAyODB9''@;'; put 'put ''aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW0dtZV19ZW5hYmxlUGx1Z2luKCl7dmFyIGw9dGhpcztpZih0aGlzLmVuYWJsZWQpcmV0dXJuO2NvbnN0e25lc3RlZEhlYWRlcnM6YX09dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKTsoIUFycmF5LmlzQXJyYXkoYSl8fCFB''@;'; put 'put ''cnJheS5pc0FycmF5KGFbMF0pKSYmaWwoZ2xgWW91ciBOZXN0ZWQgSGVhZGVycyBwbHVnaW4gY29uZmlndXJhdGlvbiBpcyBpbnZhbGlkLiBUaGUgc2V0dGluZ3MgaGFzIHRvIGJlXHgyMAogICAgICAgICAgICAgICAgICAgICAgICBwYXNzZWQgYXMgYW4gYXJyYXkgb2YgYXJyYXlzIGUucS4g''@;'; put 'put ''W1snQTEnLCB7IGxhYmVsOiAnQTInLCBjb2xzcGFuOiAyIH1dXWApLHRoaXMuYWRkSG9vaygiaW5pdCIsKCk9PlhjKGh1LHRoaXMsRjR0KS5jYWxsKHRoaXMpKSx0aGlzLmFkZEhvb2soImFmdGVyTG9hZERhdGEiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcg''@;'; put 'put ''QXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIFhjKGh1LGwsSDR0KS5jYWxsKGwsLi4uaCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZU9uQ2VsbE1vdXNlRG93biIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxm''@;'; put 'put ''PTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gWGMoaHUsbCxNNHQpLmNhbGwobCwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJPbkNlbGxNb3VzZURvd24iLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKysp''@;'; put 'put ''aFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIFhjKGh1LGwseDR0KS5jYWxsKGwsLi4uaCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZU9uQ2VsbE1vdXNlT3ZlciIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3Vt''@;'; put 'put ''ZW50c1tmXTtyZXR1cm4gWGMoaHUsbCxFNHQpLmNhbGwobCwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlT25DZWxsTW91c2VVcCIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1''@;'; put 'put ''cm4gWGMoaHUsbCxUNHQpLmNhbGwobCwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlU2VsZWN0aW9uSGlnaGxpZ2h0U2V0IixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBY''@;'; put 'put ''YyhodSxsLEE0dCkuY2FsbChsLC4uLmgpfSksdGhpcy5hZGRIb29rKCJtb2RpZnlUcmFuc2Zvcm1TdGFydCIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gWGMoaHUsbCxrNHQp''@;'; put 'put ''LmNhbGwobCwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJTZWxlY3Rpb24iLCgpPT5YYyhodSx0aGlzLEhIKS5jYWxsKHRoaXMpKSx0aGlzLmFkZEhvb2soImFmdGVyU2VsZWN0aW9uRm9jdXNTZXQiLCgpPT5YYyhodSx0aGlzLEhIKS5jYWxsKHRoaXMpKSx0aGlzLmFkZEhvb2soImJlZm9y''@;'; put 'put ''ZVZpZXdwb3J0U2Nyb2xsSG9yaXpvbnRhbGx5IixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBYYyhodSxsLHc0dCkuY2FsbChsLC4uLmgpfSksdGhpcy5hZGRIb29rKCJhZnRl''@;'; put 'put ''ckdldENvbHVtbkhlYWRlclJlbmRlcmVycyIsZD0+WGMoaHUsdGhpcyxJNHQpLmNhbGwodGhpcyxkKSksdGhpcy5hZGRIb29rKCJtb2RpZnlDb2xXaWR0aCIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3Vt''@;'; put 'put ''ZW50c1tmXTtyZXR1cm4gWGMoaHUsbCxMNHQpLmNhbGwobCwuLi5oKX0pLHRoaXMuYWRkSG9vaygibW9kaWZ5Q29sdW1uSGVhZGVyVmFsdWUiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07''@;'; put 'put ''cmV0dXJuIFhjKGh1LGwsTzR0KS5jYWxsKGwsLi4uaCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZUhpZ2hsaWdodGluZ0NvbHVtbkhlYWRlciIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTty''@;'; put 'put ''ZXR1cm4gWGMoaHUsbCxDNHQpLmNhbGwobCwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlQ29weSIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gWGMoaHUsbCxTNHQpLmNh''@;'; put 'put ''bGwobCwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlU2VsZWN0Q29sdW1ucyIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gWGMoaHUsbCxENHQpLmNhbGwobCwuLi5oKX0p''@;'; put 'put ''LHRoaXMuYWRkSG9vaygiYWZ0ZXJWaWV3cG9ydENvbHVtbkNhbGN1bGF0b3JPdmVycmlkZSIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gWGMoaHUsbCxSNHQpLmNhbGwobCwu''@;'; put 'put ''Li5oKX0pLHRoaXMuYWRkSG9vaygibW9kaWZ5Rm9jdXNlZEVsZW1lbnQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIFhjKGh1LGwsUDR0KS5jYWxsKGwsLi4uaCl9KSx0aGlz''@;'; put 'put ''LmhvdC5jb2x1bW5JbmRleE1hcHBlci5hZGRMb2NhbEhvb2soImNhY2hlVXBkYXRlZCIsKCk9PlhjKGh1LHRoaXMsSEgpLmNhbGwodGhpcykpLHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmFkZExvY2FsSG9vaygiY2FjaGVVcGRhdGVkIiwoKT0+WGMoaHUsdGhpcyxISCkuY2FsbCh0aGlzKSks''@;'; put 'put ''c3VwZXIuZW5hYmxlUGx1Z2luKCksdGhpcy51cGRhdGVQbHVnaW4oKX11cGRhdGVQbHVnaW4oKXtpZighdGhpcy5ob3QudmlldylyZXR1cm47Y29uc3R7bmVzdGVkSGVhZGVyczpsfT10aGlzLmhvdC5nZXRTZXR0aW5ncygpO19zKERsLHRoaXMpLnNldENvbHVtbnNMaW1pdCh0aGlzLmhvdC5j''@;'; put 'put ''b3VudENvbHMoKSksQXJyYXkuaXNBcnJheShsKSYmKHRoaXMuZGV0ZWN0ZWRPdmVybGFwcGVkSGVhZGVycz1fcyhEbCx0aGlzKS5zZXRTdGF0ZShsKSksdGhpcy5kZXRlY3RlZE92ZXJsYXBwZWRIZWFkZXJzJiZpbChnbGBZb3VyIE5lc3RlZCBIZWFkZXJzIHBsdWdpbiBzZXR1cCBjb250YWlu''@;'; put 'put ''cyBvdmVybGFwcGluZyBoZWFkZXJzLiBUaGlzIGtpbmQgb2YgY29uZmlndXJhdGlvblx4MjAKICAgICAgICAgICAgICAgICAgICAgICAgaXMgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQuYCksdGhpcy5lbmFibGVkJiZ0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5oaWRpbmdNYXBzQ29sbGVj''@;'; put 'put ''dGlvbi5nZXRNZXJnZWRWYWx1ZXMoKS5mb3JFYWNoKChhLGQpPT57Y29uc3QgaD0hMD09PWE/ImhpZGUtY29sdW1uIjoic2hvdy1jb2x1bW4iO19zKERsLHRoaXMpLnRyaWdnZXJDb2x1bW5Nb2RpZmljYXRpb24oaCxkKX0pLCFfcyhDNix0aGlzKSYmdGhpcy5lbmFibGVkJiZHZyhDNix0aGlz''@;'; put 'put ''LHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmNyZWF0ZUNoYW5nZXNPYnNlcnZlcigiaGlkaW5nIikuc3Vic2NyaWJlKGE9PnthLmZvckVhY2goZD0+e2xldHtvcDpoLGluZGV4OmYsbmV3VmFsdWU6dn09ZDtpZigicmVwbGFjZSI9PT1oKXtjb25zdCBNPSEwPT09dj8iaGlkZS1jb2x1bW4i''@;'; put 'put ''OiJzaG93LWNvbHVtbiI7X3MoRGwsdGhpcykudHJpZ2dlckNvbHVtbk1vZGlmaWNhdGlvbihNLGYpfX0pLHRoaXMuZ2hvc3RUYWJsZS5idWlsZFdpZHRoc01hcCgpfSkpLHRoaXMuZ2hvc3RUYWJsZS5zZXRMYXllcnNDb3VudCh0aGlzLmdldExheWVyc0NvdW50KCkpLmJ1aWxkV2lkdGhzTWFw''@;'; put 'put ''KCksc3VwZXIudXBkYXRlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe3RoaXMuY2xlYXJDb2xzcGFucygpLF9zKERsLHRoaXMpLmNsZWFyKCksX3MoQzYsdGhpcykudW5zdWJzY3JpYmUoKSxHZyhDNix0aGlzLG51bGwpLHRoaXMuZ2hvc3RUYWJsZS5jbGVhcigpLHN1cGVyLmRpc2FibGVQbHVn''@;'; put 'put ''aW4oKX1nZXRTdGF0ZU1hbmFnZXIoKXtyZXR1cm4gX3MoRGwsdGhpcyl9Z2V0TGF5ZXJzQ291bnQoKXtyZXR1cm4gX3MoRGwsdGhpcykuZ2V0TGF5ZXJzQ291bnQoKX1nZXRIZWFkZXJTZXR0aW5ncyhsLGEpe3JldHVybiBfcyhEbCx0aGlzKS5nZXRIZWFkZXJTZXR0aW5ncyhsLGEpfWNsZWFy''@;'; put 'put ''Q29sc3BhbnMoKXtpZighdGhpcy5ob3QudmlldylyZXR1cm47Y29uc3R7X3d0Omx9PXRoaXMuaG90LnZpZXcsYT1sLmdldFNldHRpbmcoImNvbHVtbkhlYWRlcnMiKS5sZW5ndGgsZD1sLnd0VGFibGUuVEhFQUQsaD1sLnd0T3ZlcmxheXMudG9wT3ZlcmxheS5jbG9uZS53dFRhYmxlLlRIRUFE''@;'; put 'put ''LGY9bC53dE92ZXJsYXlzLnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheT9sLnd0T3ZlcmxheXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LmNsb25lLnd0VGFibGUuVEhFQUQ6bnVsbDtmb3IobGV0IHY9MDt2PGE7disrKXtjb25zdCBNPWQuY2hpbGROb2Rlc1t2XTtpZighTSlicmVh''@;'; put 'put ''aztjb25zdCBEPWguY2hpbGROb2Rlc1t2XSxaPWY/Zi5jaGlsZE5vZGVzW3ZdOm51bGw7Zm9yKGxldCByZT0wLGNlPU0uY2hpbGROb2Rlcy5sZW5ndGg7cmU8Y2U7cmUrKylNLmNoaWxkTm9kZXNbcmVdLnJlbW92ZUF0dHJpYnV0ZSgiY29sc3BhbiIpLGxvKE0uY2hpbGROb2Rlc1tyZV0sImhp''@;'; put 'put ''ZGRlbkhlYWRlciIpLEQmJkQuY2hpbGROb2Rlc1tyZV0mJihELmNoaWxkTm9kZXNbcmVdLnJlbW92ZUF0dHJpYnV0ZSgiY29sc3BhbiIpLGxvKEQuY2hpbGROb2Rlc1tyZV0sImhpZGRlbkhlYWRlciIpKSxmJiZaJiZaLmNoaWxkTm9kZXNbcmVdJiYoWi5jaGlsZE5vZGVzW3JlXS5yZW1vdmVB''@;'; put 'put ''dHRyaWJ1dGUoImNvbHNwYW4iKSxsbyhaLmNoaWxkTm9kZXNbcmVdLCJoaWRkZW5IZWFkZXIiKSl9fWhlYWRlclJlbmRlcmVyRmFjdG9yeShsKXt2YXIgYT10aGlzO2NvbnN0IGQ9dGhpcy5ob3Qudmlldy5fd3QuZ2V0U2V0dGluZygiZml4ZWRDb2x1bW5zU3RhcnQiKTtyZXR1cm4oaCxmKT0+''@;'; put 'put ''e3ZhciB2O2NvbnN0e2NvbHVtbkluZGV4TWFwcGVyOk0sdmlldzpEfT10aGlzLmhvdDtsZXQgWj1NLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoaCk7bnVsbD09PVomJihaPWgpLGYucmVtb3ZlQXR0cmlidXRlKCJjb2xzcGFuIiksbG8oZiwiaGlkZGVuSGVhZGVyIiksbG8oZiwiaGlk''@;'; put 'put ''ZGVuSGVhZGVyVGV4dCIpO2NvbnN0e2NvbHNwYW46cmUsaXNIaWRkZW46Y2UsaXNQbGFjZWhvbGRlcjpiZSxoZWFkZXJDbGFzc05hbWVzOkVlfT1udWxsIT09KHY9X3MoRGwsdGhpcykuZ2V0SGVhZGVyU2V0dGluZ3MobCxaKSkmJnZvaWQgMCE9PXY/djp7bGFiZWw6IiJ9O2lmKGJlfHxjZSlU''@;'; put 'put ''aShmLCJoaWRkZW5IZWFkZXIiKTtlbHNlIGlmKHJlPjEpe3ZhciBCZSxxZSxydDtjb25zdHt3dE92ZXJsYXlzOnB0fT1ELl93dCxkdD1udWxsPT09KEJlPXB0LnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheSl8fHZvaWQgMD09PUJlP3ZvaWQgMDpCZS5jbG9uZS53dFRhYmxlLlRIRUFELmNv''@;'; put 'put ''bnRhaW5zKGYpLEp0PW51bGw9PT0ocWU9cHQuaW5saW5lU3RhcnRPdmVybGF5KXx8dm9pZCAwPT09cWU/dm9pZCAwOnFlLmNsb25lLnd0VGFibGUuVEhFQUQuY29udGFpbnMoZik7KG51bGw9PT0ocnQ9cHQudG9wT3ZlcmxheSl8fHZvaWQgMD09PXJ0P3ZvaWQgMDpydC5jbG9uZS53dFRhYmxl''@;'; put 'put ''LlRIRUFELmNvbnRhaW5zKGYpKSYmWjxkJiZUaShmLCJoaWRkZW5IZWFkZXJUZXh0Iik7Y29uc3QgQ249ZHR8fEp0P01hdGgubWluKHJlLGQtaCk6cmU7Q24+MSYmZi5zZXRBdHRyaWJ1dGUoImNvbHNwYW4iLENuKX1pZih0aGlzLmhvdC52aWV3LmFwcGVuZENvbEhlYWRlcihaLGYsZnVuY3Rp''@;'; put 'put ''b24oKXtyZXR1cm4gYS5nZXRDb2x1bW5IZWFkZXJWYWx1ZSguLi5hcmd1bWVudHMpfSxsKSwhYmUmJiFjZSl7Y29uc3QgcHQ9Zi5xdWVyeVNlbGVjdG9yKCJkaXYucmVsYXRpdmUiKTtwdCYmRWUmJkVlLmxlbmd0aD4wJiYobG8ocHQsdGhpcy5ob3QuZ2V0Q29sdW1uTWV0YShaKS5oZWFkZXJD''@;'; put 'put ''bGFzc05hbWUpLFRpKHB0LEVlKSl9fX1nZXRDb2x1bW5IZWFkZXJWYWx1ZShsLGEpe3ZhciBkO2NvbnN0e2lzSGlkZGVuOmgsaXNQbGFjZWhvbGRlcjpmfT1udWxsIT09KGQ9X3MoRGwsdGhpcykuZ2V0SGVhZGVyU2V0dGluZ3MoYSxsKSkmJnZvaWQgMCE9PWQ/ZDp7fTtyZXR1cm4gZnx8aD8i''@;'; put 'put ''Ijp0aGlzLmhvdC5nZXRDb2xIZWFkZXIobCxhKX1kZXN0cm95KCl7R2coRGwsdGhpcyxudWxsKSxudWxsIT09X3MoQzYsdGhpcykmJihfcyhDNix0aGlzKS51bnN1YnNjcmliZSgpLEdnKEM2LHRoaXMsbnVsbCkpLHN1cGVyLmRlc3Ryb3koKX1fZ2V0SGVhZGVyVHJlZU5vZGVEYXRhQnlDb29y''@;'; put 'put ''ZHMobCl7aWYoIShsLnJvdz49MHx8bC5jb2w8MCkpcmV0dXJuIF9zKERsLHRoaXMpLmdldEhlYWRlclRyZWVOb2RlRGF0YShsLnJvdyxsLmNvbCl9fWZ1bmN0aW9uIEhIKCl7dmFyIGM7Y29uc3QgbD1udWxsPT09KGM9dGhpcy5ob3QpfHx2b2lkIDA9PT1jP3ZvaWQgMDpjLmdldFNlbGVjdGVk''@;'; put 'put ''UmFuZ2VMYXN0KCk7aWYoIWwpcmV0dXJuO2NvbnN0e2hpZ2hsaWdodDphfT1sO2lmKGEuaXNIZWFkZXIoKSYmYS5jb2w+PTApe2NvbnN0IGg9X3MoRGwsdGhpcykuZmluZExlZnRNb3N0Q29sdW1uSW5kZXgoYS5yb3csYS5jb2wpLGY9dGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5nZXRG''@;'; put 'put ''b2N1cygpO2YudmlzdWFsQ2VsbFJhbmdlLmhpZ2hsaWdodC5jb2w9aCxmLnZpc3VhbENlbGxSYW5nZS5mcm9tLmNvbD1oLGYudmlzdWFsQ2VsbFJhbmdlLnRvLmNvbD1oLGYuY29tbWl0KCl9fWZ1bmN0aW9uIHc0dChjLGwpe3ZhciBhO2NvbnN0IGQ9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5n''@;'; put 'put ''ZUxhc3QoKTtpZighZClyZXR1cm4gYztjb25zdHtoaWdobGlnaHQ6aH09ZCx7bmF2aWdhYmxlSGVhZGVyczpmfT10aGlzLmhvdC5nZXRTZXR0aW5ncygpLHY9dGhpcy5ob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpLE09Zj9oLnJvdzpudWxsPT09KGE9X3MoRkgsdGhp''@;'; put 'put ''cykpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLnJvdyxEPXY/YzpoLmNvbCxaPU08MCYmRD49MDtpZihHZyhGSCx0aGlzLG51bGwpLCFaKXJldHVybiBjO2NvbnN0IHJlPXRoaXMuaG90LmdldEZpcnN0RnVsbHlWaXNpYmxlQ29sdW1uKCksY2U9dGhpcy5ob3QuZ2V0TGFzdEZ1bGx5VmlzaWJsZUNv''@;'; put 'put ''bHVtbigpLGJlPWNlLXJlKzEsRWU9X3MoRGwsdGhpcykuZmluZExlZnRNb3N0Q29sdW1uSW5kZXgoTSxEKSxCZT1fcyhEbCx0aGlzKS5maW5kUmlnaHRNb3N0Q29sdW1uSW5kZXgoTSxEKSxxZT1CZS1FZSsxO2lmKEVlPHJlJiZCZT5jZSlyZXR1cm4gRWU7aWYodil7bGV0IHJ0PW51bGw7cmV0''@;'; put 'put ''dXJuIEVlPj1yZSYmQmU+Y2U/cWU+YmU/KGwudmFsdWU9InN0YXJ0IixydD1FZSk6KGwudmFsdWU9ImVuZCIscnQ9QmUpOkVlPHJlJiZCZTw9Y2UmJihxZT5iZT8obC52YWx1ZT0iZW5kIixydD1CZSk6KGwudmFsdWU9InN0YXJ0IixydD1FZSkpLHJ0fXJldHVybiBFZTw9cmU/RWU6QmV9ZnVu''@;'; put 'put ''Y3Rpb24gQzR0KGMsbCxhKXtjb25zdCBkPV9zKERsLHRoaXMpLmdldEhlYWRlclRyZWVOb2RlRGF0YShsLGMpO2lmKCFkKXJldHVybiBjO2NvbnN0e2NvbHVtbkN1cnNvcjpoLHNlbGVjdGlvblR5cGU6ZixzZWxlY3Rpb25XaWR0aDp2fT1hLHtpc1Jvb3Q6TSxjb2xzcGFuOkR9PV9zKERsLHRo''@;'; put 'put ''aXMpLmdldEhlYWRlclNldHRpbmdzKGwsYyk7aWYoZj09PW1YKXtpZighTSlyZXR1cm4gZC5jb2x1bW5JbmRleH1lbHNlIGlmKGY9PT1XM2UmJihEPnYtaHx8IU0pKXJldHVybiBudWxsO3JldHVybiBjfWZ1bmN0aW9uIFM0dChjLGwsYSl7bGV0e2NvbHVtbkhlYWRlcnNDb3VudDpkfT1hO2lm''@;'; put 'put ''KDAhPT1kKWZvcihsZXQgZj0wO2Y8bC5sZW5ndGg7ZisrKXtjb25zdHtzdGFydFJvdzp2LHN0YXJ0Q29sOk0sZW5kUm93OkQsZW5kQ29sOlp9PWxbZl0scmU9RC12KzE7aWYodj49MHx8MT09TS1aKzEpYnJlYWs7Zm9yKGxldCBiZT1NO2JlPD1aO2JlKyspZm9yKGxldCBFZT12O0VlPD1EO0Vl''@;'; put 'put ''Kyspe3ZhciBoO2NvbnN0IEJlPXJlK0VlLHFlPWJlLU07MCE9PXFlJiYhMT09PShudWxsPT09KGg9X3MoRGwsdGhpcykuZ2V0SGVhZGVyVHJlZU5vZGVEYXRhKEVlLGJlKSl8fHZvaWQgMD09PWg/dm9pZCAwOmguaXNSb290KSYmKGNbQmVdW3FlXT0iIil9fX1mdW5jdGlvbiBNNHQoYyxsLGEs''@;'; put 'put ''ZCl7dGhpcy5fZ2V0SGVhZGVyVHJlZU5vZGVEYXRhQnlDb29yZHMobCkmJihkLmNvbHVtbj0hMCl9ZnVuY3Rpb24geDR0KGMsbCl7Y29uc3QgYT10aGlzLl9nZXRIZWFkZXJUcmVlTm9kZURhdGFCeUNvb3JkcyhsKTtpZighYSlyZXR1cm47R2coeUEsdGhpcyxsLmNsb25lKCkpLEdnKFBILHRo''@;'; put 'put ''aXMsITApO2NvbnN0e3NlbGVjdGlvbjpkfT10aGlzLmhvdCxoPWQuaXNTZWxlY3RlZCgpP2QuZ2V0U2VsZWN0ZWRSYW5nZSgpLmN1cnJlbnQoKTpudWxsLGY9W10se2NvbHVtbkluZGV4OnYsb3JpZ0NvbHNwYW46TX09YSxEPSFkLmluSW5TZWxlY3Rpb24obCk7Yy5zaGlmdEtleSYmaD9sLmNv''@;'; put 'put ''bDxoLmZyb20uY29sP2YucHVzaChoLmdldFRvcEVuZENvcm5lcigpLmNvbCx2LGwucm93KTpmLnB1c2gobC5jb2w+aC5mcm9tLmNvbD9oLmdldFRvcFN0YXJ0Q29ybmVyKCkuY29sOnYsditNLTEsbC5yb3cpOihVTyhjKXx8SG0oYykmJkR8fGlmZShjKSkmJmYucHVzaCh2LHYrTS0xLGwucm93''@;'; put 'put ''KSxkLnNlbGVjdENvbHVtbnMoLi4uZil9ZnVuY3Rpb24gRTR0KGMsbCxhLGQpe2lmKCF0aGlzLmhvdC52aWV3LmlzTW91c2VEb3duKCl8fGQuY29sdW1uKXJldHVybjtjb25zdCBoPXRoaXMuX2dldEhlYWRlclRyZWVOb2RlRGF0YUJ5Q29vcmRzKGwpO2lmKCFoKXJldHVybjtjb25zdHtjb2x1''@;'; put 'put ''bW5JbmRleDpmLG9yaWdDb2xzcGFuOnZ9PWgsTT10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLEQ9TS5nZXRUb3BTdGFydENvcm5lcigpLFo9TS5nZXRCb3R0b21FbmRDb3JuZXIoKSx7ZnJvbTpyZX09TTtkLmNvbHVtbj0hMCxkLmNlbGw9ITA7Y29uc3QgY2U9W10sYmU9a3MobC5y''@;'; put 'put ''b3csLTEvMCwtMSk7bC5jb2w8cmUuY29sP2NlLnB1c2goWi5jb2wsZixiZSk6Y2UucHVzaChsLmNvbD5yZS5jb2w/RC5jb2w6ZixmK3YtMSxiZSksdGhpcy5ob3Quc2VsZWN0aW9uLnNlbGVjdENvbHVtbnMoLi4uY2UpfWZ1bmN0aW9uIFQ0dCgpe0dnKFBILHRoaXMsITEpfWZ1bmN0aW9uIEE0''@;'; put 'put ''dCgpe2NvbnN0e25hdmlnYWJsZUhlYWRlcnM6Y309dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKTtpZighdGhpcy5ob3Qudmlldy5pc01vdXNlRG93bigpfHwhX3MoUEgsdGhpcyl8fCFjKXJldHVybjtjb25zdCBsPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksYT1sLmdldFRvcFN0YXJ0''@;'; put 'put ''Q29ybmVyKCkuY29sLGQ9bC5nZXRCb3R0b21FbmRDb3JuZXIoKS5jb2wse2NvbHVtbkluZGV4Omgsb3JpZ0NvbHNwYW46Zn09X3MoRGwsdGhpcykuZ2V0SGVhZGVyVHJlZU5vZGVEYXRhKF9zKHlBLHRoaXMpLnJvdyxfcyh5QSx0aGlzKS5jb2wpO2lmKGwuc2V0SGlnaGxpZ2h0KF9zKHlBLHRo''@;'; put 'put ''aXMpKSxmPmwuZ2V0V2lkdGgoKXx8aDxhfHxoK2YtMT5kKXtjb25zdCB2PV9zKERsLHRoaXMpLmZpbmRUb3BNb3N0RW50aXJlSGVhZGVyTGV2ZWwoa3MoYSxoLGgrZi0xKSxrcyhkLGgsaCtmLTEpKTtsLmhpZ2hsaWdodC5yb3c9dixsLmhpZ2hsaWdodC5jb2w9bC5mcm9tLmNvbH19ZnVuY3Rp''@;'; put 'put ''b24gazR0KGMpe2NvbnN0e2hpZ2hsaWdodDpsfT10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLGE9dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobC5yb3crYy5yb3csbC5jb2wrYy5jb2wpO2lmKCEoYS5pc0hlYWRlcigpJiZhLmNvbD49MCkpcmV0dXJuO2NvbnN0IGg9X3MoRGws''@;'; put 'put ''dGhpcykuZmluZExlZnRNb3N0Q29sdW1uSW5kZXgoYS5yb3csYS5jb2wpLGY9X3MoRGwsdGhpcykuZmluZFJpZ2h0TW9zdENvbHVtbkluZGV4KGEucm93LGEuY29sKTtpZihjLmNvbDwwKXtjb25zdCBNPXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRl''@;'; put 'put ''eChsLmNvbD49aCYmbC5jb2w8PWY/aC0xOmYsLTEpO2MuY29sPW51bGw9PT1NPy10aGlzLmhvdC52aWV3LmNvdW50UmVuZGVyYWJsZUNvbHVtbnNJblJhbmdlKDAsbC5jb2wpOi1NYXRoLm1heCh0aGlzLmhvdC52aWV3LmNvdW50UmVuZGVyYWJsZUNvbHVtbnNJblJhbmdlKE0sbC5jb2wpLTEs''@;'; put 'put ''MSl9ZWxzZSBpZihjLmNvbD4wKXtjb25zdCBNPXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChsLmNvbD49aCYmbC5jb2w8PWY/ZisxOmgsMSk7Yy5jb2w9bnVsbD09PU0/dGhpcy5ob3Qudmlldy5jb3VudFJlbmRlcmFibGVDb2x1bW5zSW5SYW5n''@;'; put 'put ''ZShsLmNvbCx0aGlzLmhvdC5jb3VudENvbHMoKSk6TWF0aC5tYXgodGhpcy5ob3Qudmlldy5jb3VudFJlbmRlcmFibGVDb2x1bW5zSW5SYW5nZShsLmNvbCxNKS0xLDEpfX1mdW5jdGlvbiBENHQoYyxsLGEpe2NvbnN0IGQ9Yy5yb3csaD10aGlzLl9nZXRIZWFkZXJUcmVlTm9kZURhdGFCeUNv''@;'; put 'put ''b3Jkcyh7cm93OmQsY29sOmMuY29sfSksZj10aGlzLl9nZXRIZWFkZXJUcmVlTm9kZURhdGFCeUNvb3Jkcyh7cm93OmQsY29sOmwuY29sfSk7R2coRkgsdGhpcyxhLmNsb25lKCkpLGwuY29sPGMuY29sPyhoJiYoYy5jb2w9aC5jb2x1bW5JbmRleCtoLm9yaWdDb2xzcGFuLTEpLGYmJihsLmNv''@;'; put 'put ''bD1mLmNvbHVtbkluZGV4KSk6bC5jb2w+PWMuY29sJiYoaCYmKGMuY29sPWguY29sdW1uSW5kZXgpLGYmJihsLmNvbD1mLmNvbHVtbkluZGV4K2Yub3JpZ0NvbHNwYW4tMSkpfWZ1bmN0aW9uIEk0dChjKXtpZihfcyhEbCx0aGlzKS5nZXRMYXllcnNDb3VudCgpPjApe2MubGVuZ3RoPTA7Zm9y''@;'; put 'put ''KGxldCBsPTA7bDxfcyhEbCx0aGlzKS5nZXRMYXllcnNDb3VudCgpO2wrKyljLnB1c2godGhpcy5oZWFkZXJSZW5kZXJlckZhY3RvcnkobCkpfX1mdW5jdGlvbiBSNHQoYyl7Y29uc3QgbD1fcyhEbCx0aGlzKS5nZXRMYXllcnNDb3VudCgpO2xldCBhPWMuc3RhcnRDb2x1bW4sZD0hIWw7Zm9y''@;'; put 'put ''KGxldCBoPTA7aDxsO2grKyl7Y29uc3QgZj1fcyhEbCx0aGlzKS5maW5kTGVmdE1vc3RDb2x1bW5JbmRleChoLGMuc3RhcnRDb2x1bW4pLHY9dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChmKTtpZihmPj0wJiYoZD0hMSksbTEodikmJnY8''@;'; put 'put ''Yy5zdGFydENvbHVtbil7YT12O2JyZWFrfX1jLnN0YXJ0Q29sdW1uPWQ/X3MoRGwsdGhpcykuZ2V0SGVhZGVyVHJlZU5vZGVEYXRhKDAsYSkuY29sdW1uSW5kZXg6YX1mdW5jdGlvbiBMNHQoYyxsKXtjb25zdCBhPXRoaXMuZ2hvc3RUYWJsZS5nZXRXaWR0aChsKTtyZXR1cm4gYz5hP2M6YX1m''@;'; put 'put ''dW5jdGlvbiBPNHQoYyxsLGEpe3ZhciBkO2NvbnN0e2xhYmVsOmh9PW51bGwhPT0oZD1fcyhEbCx0aGlzKS5nZXRIZWFkZXJUcmVlTm9kZURhdGEoYSxsKSkmJnZvaWQgMCE9PWQ/ZDp7bGFiZWw6IiJ9O3JldHVybiBofWZ1bmN0aW9uIFA0dChjLGwpe2lmKGM8MClyZXR1cm4gdGhpcy5ob3Qu''@;'; put 'put ''Z2V0Q2VsbChjLF9zKERsLHRoaXMpLmZpbmRMZWZ0TW9zdENvbHVtbkluZGV4KGMsbCksITApfWZ1bmN0aW9uIEY0dCgpe3RoaXMudXBkYXRlUGx1Z2luKCl9ZnVuY3Rpb24gSDR0KGMsbCl7bHx8dGhpcy51cGRhdGVQbHVnaW4oKX1mdW5jdGlvbiBfQShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rp''@;'; put 'put ''b24gTjR0KGMpe3ZhciBsPWZ1bmN0aW9uIFY0dChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJl''@;'; put 'put ''dHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4g''@;'; put 'put ''Yz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y29uc3QgajR0PWNsYXNzIEI0dHtjb25zdHJ1Y3RvcihsLGEpe19BKHRoaXMsImhvdCIsdm9pZCAwKSxfQSh0aGlzLCJkYXRhIixu''@;'; put 'put ''dWxsKSxfQSh0aGlzLCJwbHVnaW4iLHZvaWQgMCksX0EodGhpcywicGFyZW50UmVmZXJlbmNlIixuZXcgV2Vha01hcCksX0EodGhpcywiY2FjaGUiLHtsZXZlbHM6W10sbGV2ZWxDb3VudDowLHJvd3M6W10sbm9kZUluZm86bmV3IFdlYWtNYXB9KSx0aGlzLmhvdD1hLHRoaXMucGx1Z2luPWx9''@;'; put 'put ''c2V0RGF0YShsKXt0aGlzLmRhdGE9bH1nZXREYXRhKCl7cmV0dXJuIHRoaXMuZGF0YX1nZXRSYXdTb3VyY2VEYXRhKCl7bGV0IGw9bnVsbDtyZXR1cm4gdGhpcy5wbHVnaW4uZGlzYWJsZUNvcmVBUElNb2RpZmllcnMoKSxsPXRoaXMuaG90LmdldFNvdXJjZURhdGEoKSx0aGlzLnBsdWdpbi5l''@;'; put 'put ''bmFibGVDb3JlQVBJTW9kaWZpZXJzKCksbH11cGRhdGVXaXRoRGF0YShsKXt0aGlzLnNldERhdGEobCksdGhpcy5yZXdyaXRlQ2FjaGUoKX1yZXdyaXRlQ2FjaGUoKXt0aGlzLmNhY2hlPXtsZXZlbHM6W10sbGV2ZWxDb3VudDowLHJvd3M6W10sbm9kZUluZm86bmV3IFdlYWtNYXB9LEdhKDAs''@;'; put 'put ''dGhpcy5kYXRhLmxlbmd0aC0xLGw9Pnt0aGlzLmNhY2hlTm9kZSh0aGlzLmRhdGFbbF0sMCxudWxsKX0pfWNhY2hlTm9kZShsLGEsZCl7dGhpcy5jYWNoZS5sZXZlbHNbYV18fCh0aGlzLmNhY2hlLmxldmVsc1thXT1bXSx0aGlzLmNhY2hlLmxldmVsQ291bnQrPTEpLHRoaXMuY2FjaGUubGV2''@;'; put 'put ''ZWxzW2FdLnB1c2gobCksdGhpcy5jYWNoZS5yb3dzLnB1c2gobCksdGhpcy5jYWNoZS5ub2RlSW5mby5zZXQobCx7cGFyZW50OmQscm93OnRoaXMuY2FjaGUucm93cy5sZW5ndGgtMSxsZXZlbDphfSksdGhpcy5oYXNDaGlsZHJlbihsKSYmWW4obC5fX2NoaWxkcmVuLGg9Pnt0aGlzLmNhY2hl''@;'; put 'put ''Tm9kZShoLGErMSxsKX0pfWdldERhdGFPYmplY3QobCl7cmV0dXJuIG51bGw9PWw/bnVsbDp0aGlzLmNhY2hlLnJvd3NbbF19cmVhZFRyZWVOb2RlcyhsLGEsZCxoKXtsZXQgZj0hMSx2PWE7aWYoaXNOYU4odikmJnYuZW5kKXJldHVybiB2O2xldCBNPWw7cmV0dXJuIE18fChNPXtfX2NoaWxk''@;'; put 'put ''cmVuOnRoaXMuZGF0YX0sZj0hMCx2LT0xKSxudWxsIT1kJiZ2PT09ZD97cmVzdWx0Ok0sZW5kOiEwfTpudWxsIT1oJiZNPT09aD97cmVzdWx0OnYsZW5kOiEwfToodis9MSxNLl9fY2hpbGRyZW4mJlluKE0uX19jaGlsZHJlbixEPT57aWYodGhpcy5wYXJlbnRSZWZlcmVuY2Uuc2V0KEQsZj9u''@;'; put 'put ''dWxsOk0pLHY9dGhpcy5yZWFkVHJlZU5vZGVzKEQsdixkLGgpLGlzTmFOKHYpJiZ2LmVuZClyZXR1cm4hMX0pLHYpfW1vY2tQYXJlbnQoKXtjb25zdCBsPXRoaXMubW9ja05vZGUoKTtyZXR1cm4gbC5fX2NoaWxkcmVuPXRoaXMuZGF0YSxsfW1vY2tOb2RlKCl7Y29uc3QgbD17fTtyZXR1cm4g''@;'; put 'put ''WG8odGhpcy5kYXRhWzBdLChhLGQpPT57bFtkXT1udWxsfSksbH1nZXRSb3dJbmRleChsKXtyZXR1cm4gbnVsbD09bD9udWxsOnRoaXMuY2FjaGUubm9kZUluZm8uZ2V0KGwpLnJvd31nZXRSb3dJbmRleFdpdGhpblBhcmVudChsKXtsZXQgYT1udWxsO2E9aXNOYU4obCk/bDp0aGlzLmdldERh''@;'; put 'put ''dGFPYmplY3QobCk7Y29uc3QgZD10aGlzLmdldFJvd1BhcmVudChsKTtyZXR1cm4gbnVsbD09ZD90aGlzLmRhdGEuaW5kZXhPZihhKTpkLl9fY2hpbGRyZW4uaW5kZXhPZihhKX1jb3VudEFsbFJvd3MoKXtyZXR1cm4gdGhpcy5jb3VudENoaWxkcmVuKHtfX2NoaWxkcmVuOnRoaXMuZGF0YX0p''@;'; put 'put ''fWNvdW50Q2hpbGRyZW4obCl7bGV0IGE9MCxkPWw7cmV0dXJuIGlzTmFOKGQpfHwoZD10aGlzLmdldERhdGFPYmplY3QoZCkpLGQmJmQuX19jaGlsZHJlbj8oWW4oZC5fX2NoaWxkcmVuLGg9PnthKz0xLGguX19jaGlsZHJlbiYmKGErPXRoaXMuY291bnRDaGlsZHJlbihoKSl9KSxhKTowfWdl''@;'; put 'put ''dFJvd1BhcmVudChsKXtsZXQgYTtyZXR1cm4gYT1pc05hTihsKT9sOnRoaXMuZ2V0RGF0YU9iamVjdChsKSx0aGlzLmdldFJvd09iamVjdFBhcmVudChhKX1nZXRSb3dPYmplY3RQYXJlbnQobCl7cmV0dXJuIGwmJiJvYmplY3QiPT10eXBlb2YgbD90aGlzLmNhY2hlLm5vZGVJbmZvLmdldChs''@;'; put 'put ''KS5wYXJlbnQ6bnVsbH1nZXRSb3dMZXZlbChsKXtsZXQgYT1udWxsO3JldHVybiBhPWlzTmFOKGwpP2w6dGhpcy5nZXREYXRhT2JqZWN0KGwpLGE/dGhpcy5nZXRSb3dPYmplY3RMZXZlbChhKTpudWxsfWdldFJvd09iamVjdExldmVsKGwpe3JldHVybiBudWxsPT1sP251bGw6dGhpcy5jYWNo''@;'; put 'put ''ZS5ub2RlSW5mby5nZXQobCkubGV2ZWx9aGFzQ2hpbGRyZW4obCl7bGV0IGE9bDtyZXR1cm4gaXNOYU4oYSl8fChhPXRoaXMuZ2V0RGF0YU9iamVjdChhKSksISghYS5fX2NoaWxkcmVufHwhYS5fX2NoaWxkcmVuLmxlbmd0aCl9aXNDaGlsZChsKXtyZXR1cm4gbnVsbCE9PXRoaXMuZ2V0Um93''@;'; put 'put ''UGFyZW50KGwpfWdldENoaWxkKGwsYSl7dmFyIGQ7cmV0dXJuKG51bGw9PT0oZD1sLl9fY2hpbGRyZW4pfHx2b2lkIDA9PT1kP3ZvaWQgMDpkW2FdKXx8bnVsbH1pc1Jvd0hpZ2hlc3RMZXZlbChsKXtyZXR1cm4hdGhpcy5pc0NoaWxkKGwpfWlzUGFyZW50KGwpe3ZhciBhO2xldCBkPWw7cmV0''@;'; put 'put ''dXJuIGlzTmFOKGQpfHwoZD10aGlzLmdldERhdGFPYmplY3QoZCkpLGQmJiEhZC5fX2NoaWxkcmVuJiYwIT09KG51bGw9PT0oYT1kLl9fY2hpbGRyZW4pfHx2b2lkIDA9PT1hP3ZvaWQgMDphLmxlbmd0aCl9YWRkQ2hpbGQobCxhKXtsZXQgZD1hO3RoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVB''@;'; put 'put ''ZGRDaGlsZCIsbCxkKTtsZXQgaD1udWxsO2wmJihoPXRoaXMuZ2V0Um93SW5kZXgobCkpLHRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVDcmVhdGVSb3ciLGgrdGhpcy5jb3VudENoaWxkcmVuKGwpKzEsMSk7bGV0IGY9bDtsfHwoZj10aGlzLm1vY2tQYXJlbnQoKSksZi5fX2NoaWxkcmVufHwo''@;'; put 'put ''Zi5fX2NoaWxkcmVuPVtdKSxkfHwoZD10aGlzLm1vY2tOb2RlKCkpLGYuX19jaGlsZHJlbi5wdXNoKGQpLHRoaXMucmV3cml0ZUNhY2hlKCk7Y29uc3Qgdj10aGlzLmdldFJvd0luZGV4KGQpO3RoaXMuaG90LnJvd0luZGV4TWFwcGVyLmluc2VydEluZGV4ZXModiwxKSx0aGlzLmhvdC5ydW5I''@;'; put 'put ''b29rcygiYWZ0ZXJDcmVhdGVSb3ciLHYsMSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyQWRkQ2hpbGQiLGwsZCl9YWRkQ2hpbGRBdEluZGV4KGwsYSxkKXtsZXQgZixoPWQ7aWYoaHx8KGg9dGhpcy5tb2NrTm9kZSgpKSx0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQWRkQ2hpbGQiLGwsaCxh''@;'; put 'put ''KSxsKXtjb25zdCBNPXRoaXMuZ2V0Um93SW5kZXgobCkrYSsxO3RoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVDcmVhdGVSb3ciLE0sMSksbC5fX2NoaWxkcmVuLnNwbGljZShhLG51bGwsaCksdGhpcy5yZXdyaXRlQ2FjaGUoKSx0aGlzLnBsdWdpbi5kaXNhYmxlQ29yZUFQSU1vZGlmaWVycygp''@;'; put 'put ''LHRoaXMuaG90LnNldFNvdXJjZURhdGFBdENlbGwodGhpcy5nZXRSb3dJbmRleFdpdGhpblBhcmVudChsKSwiX19jaGlsZHJlbiIsbC5fX2NoaWxkcmVuLCJOZXN0ZWRSb3dzLmFkZENoaWxkQXRJbmRleCIpLHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmluc2VydEluZGV4ZXMoTSwxKSx0aGlz''@;'; put 'put ''LnBsdWdpbi5lbmFibGVDb3JlQVBJTW9kaWZpZXJzKCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyQ3JlYXRlUm93IixNLDEpLGY9TX1lbHNlIHRoaXMucGx1Z2luLmRpc2FibGVDb3JlQVBJTW9kaWZpZXJzKCksdGhpcy5ob3QuYWx0ZXIoImluc2VydF9yb3dfYWJvdmUiLGEsMSwiTmVzdGVk''@;'; put 'put ''Um93cy5hZGRDaGlsZEF0SW5kZXgiKSx0aGlzLnBsdWdpbi5lbmFibGVDb3JlQVBJTW9kaWZpZXJzKCksZj10aGlzLmdldFJvd0luZGV4KHRoaXMuZGF0YVthXSk7aD10aGlzLmdldERhdGFPYmplY3QoZiksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyQWRkQ2hpbGQiLGwsaCxhKX1hZGRTaWJs''@;'; put 'put ''aW5nKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToiYmVsb3ciO2NvbnN0IGQ9dGhpcy50cmFuc2xhdGVUcmltbWVkUm93KGwpLGg9dGhpcy5nZXRSb3dQYXJlbnQoZCksZj10aGlzLmdldFJvd0luZGV4V2l0aGluUGFyZW50''@;'; put 'put ''KGQpO3N3aXRjaChhKXtjYXNlImJlbG93Ijp0aGlzLmFkZENoaWxkQXRJbmRleChoLGYrMSxudWxsKTticmVhaztjYXNlImFib3ZlIjp0aGlzLmFkZENoaWxkQXRJbmRleChoLGYsbnVsbCl9fWRldGFjaEZyb21QYXJlbnQobCl7bGV0IGE9IShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9''@;'; put 'put ''PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXSxkPW51bGw7Y29uc3QgaD1bXTtBcnJheS5pc0FycmF5KGwpPyhHYShsWzBdLGxbMl0sYmU9Pntjb25zdCBFZT10aGlzLnRyYW5zbGF0ZVRyaW1tZWRSb3coYmUpO2gucHVzaCh0aGlzLmdldERhdGFPYmplY3QoRWUpKX0pLEdhKDAsaC5sZW5n''@;'; put 'put ''dGgtMixiZT0+e3RoaXMuZGV0YWNoRnJvbVBhcmVudChoW2JlXSwhMSl9KSxkPWhbaC5sZW5ndGgtMV0pOmQ9bDtjb25zdCBmPXRoaXMuZ2V0Um93SW5kZXgoZCksdj10aGlzLmNvdW50Q2hpbGRyZW4oZCksTT10aGlzLmdldFJvd0luZGV4V2l0aGluUGFyZW50KGQpLEQ9dGhpcy5nZXRSb3dQ''@;'; put 'put ''YXJlbnQoZCksWj10aGlzLmdldFJvd1BhcmVudChEKSxyZT10aGlzLmdldFJvd0luZGV4KFopO2xldCBjZT1udWxsO2lmKHRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVEZXRhY2hDaGlsZCIsRCxkKSxudWxsIT1NKXtjb25zdCBiZT1BcnJheS5mcm9tKG5ldyBBcnJheShmK3YrMSkua2V5cygp''@;'; put 'put ''KS5zcGxpY2UoLTEqKHYrMSkpO2lmKHRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVSZW1vdmVSb3ciLGYsdisxLGJlLHRoaXMucGx1Z2luLnBsdWdpbk5hbWUpLEQuX19jaGlsZHJlbi5zcGxpY2UoTSwxKSx0aGlzLnJld3JpdGVDYWNoZSgpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclJlbW92''@;'; put 'put ''ZVJvdyIsZix2KzEsYmUsdGhpcy5wbHVnaW4ucGx1Z2luTmFtZSksWil7Y2U9cmUrdGhpcy5jb3VudENoaWxkcmVuKFopO2NvbnN0IEVlPXRoaXMuZ2V0Q2hpbGQoWix0aGlzLmNvdW50Q2hpbGRyZW4oWiktMSksQmU9dGhpcy5nZXRSb3dJbmRleChFZSk7dGhpcy5ob3QucnVuSG9va3MoImJl''@;'; put 'put ''Zm9yZUNyZWF0ZVJvdyIsQmUrMSx2KzEsdGhpcy5wbHVnaW4ucGx1Z2luTmFtZSksWi5fX2NoaWxkcmVuLnB1c2goZCl9ZWxzZSBjZT10aGlzLmhvdC5jb3VudFJvd3MoKSsxLHRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVDcmVhdGVSb3ciLGNlLTIsdisxLHRoaXMucGx1Z2luLnBsdWdpbk5h''@;'; put 'put ''bWUpLHRoaXMuZGF0YS5wdXNoKGQpfXRoaXMucmV3cml0ZUNhY2hlKCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyQ3JlYXRlUm93IixjZS0yLHYrMSx0aGlzLnBsdWdpbi5wbHVnaW5OYW1lKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJEZXRhY2hDaGlsZCIsRCxkLHRoaXMuZ2V0Um93SW5k''@;'; put 'put ''ZXgoZCkpLGEmJnRoaXMuaG90LnJlbmRlcigpfWZpbHRlckRhdGEobCxhLGQpe2NvbnN0IGg9W107WW4oZCxmPT57aC5wdXNoKHRoaXMuZ2V0RGF0YU9iamVjdChmKSl9KSxZbihoLGY9Pntjb25zdCB2PXRoaXMuZ2V0Um93SW5kZXhXaXRoaW5QYXJlbnQoZiksTT10aGlzLmdldFJvd1BhcmVu''@;'; put 'put ''dChmKTtudWxsPT09TT90aGlzLmRhdGEuc3BsaWNlKHYsMSk6TS5fX2NoaWxkcmVuLnNwbGljZSh2LDEpfSksdGhpcy5yZXdyaXRlQ2FjaGUoKX1zcGxpY2VEYXRhKGwsYSxkKXtjb25zdCBoPXRoaXMuZ2V0RGF0YU9iamVjdChsLTEpO2xldCBmPW51bGwsdj1sO2gmJmguX19jaGlsZHJlbiYm''@;'; put 'put ''MD09PWguX19jaGlsZHJlbi5sZW5ndGg/KGY9aCx2PTApOmw8dGhpcy5jb3VudEFsbFJvd3MoKSYmKGY9dGhpcy5nZXRSb3dQYXJlbnQobCksdj10aGlzLmdldFJvd0luZGV4V2l0aGluUGFyZW50KGwpKSxmP2Q/Zi5fX2NoaWxkcmVuLnNwbGljZSh2LGEsLi4uZCk6Zi5fX2NoaWxkcmVuLnNw''@;'; put 'put ''bGljZSh2LGEpOmQ/dGhpcy5kYXRhLnNwbGljZSh2LGEsLi4uZCk6dGhpcy5kYXRhLnNwbGljZSh2LGEpLHRoaXMucmV3cml0ZUNhY2hlKCl9c3luY1Jvd1dpdGhSYXdTb3VyY2UobCl7bGV0IGE9bCxkPWE7ZG97ZD10aGlzLmdldFJvd1BhcmVudChkKSxudWxsIT09ZCYmKGE9ZCl9d2hpbGUo''@;'; put 'put ''bnVsbCE9PWQpO3RoaXMucGx1Z2luLmRpc2FibGVDb3JlQVBJTW9kaWZpZXJzKCksdGhpcy5ob3Quc2V0U291cmNlRGF0YUF0Q2VsbCh0aGlzLmdldFJvd0luZGV4V2l0aGluUGFyZW50KGEpLCJfX2NoaWxkcmVuIixhLl9fY2hpbGRyZW4sIk5lc3RlZFJvd3Muc3luY1Jvd1dpdGhSYXdTb3Vy''@;'; put 'put ''Y2UiKSx0aGlzLnBsdWdpbi5lbmFibGVDb3JlQVBJTW9kaWZpZXJzKCl9bW92ZVJvdyhsLGEsZCxoKXtjb25zdCBmPWE9PT10aGlzLmhvdC5jb3VudFJvd3MoKSx2PXRoaXMuZ2V0Um93UGFyZW50KGwpLE09dGhpcy5nZXRSb3dJbmRleFdpdGhpblBhcmVudChsKSxEPXYuX19jaGlsZHJlbi5z''@;'; put 'put ''bGljZShNLE0rMSksWj1sPmE7bGV0IHJlPXRoaXMuZ2V0Um93UGFyZW50KGY/YS0xOmEpO251bGw9PXJlJiYocmU9dGhpcy5nZXRSb3dQYXJlbnQoYS0xKSksbnVsbD09cmUmJihyZT10aGlzLmdldERhdGFPYmplY3QoYS0xKSkscmU/cmUuX19jaGlsZHJlbnx8KHJlLl9fY2hpbGRyZW49W10p''@;'; put 'put ''OihyZT10aGlzLmdldERhdGFPYmplY3QoYSkscmUuX19jaGlsZHJlbj1bXSk7Y29uc3QgY2U9Znx8ZHx8aD9yZS5fX2NoaWxkcmVuLmxlbmd0aDp0aGlzLmdldFJvd0luZGV4V2l0aGluUGFyZW50KGEpLGJlPXY9PT1yZTtyZS5fX2NoaWxkcmVuLnNwbGljZShjZSwwLERbMF0pLHYuX19jaGls''@;'; put 'put ''ZHJlbi5zcGxpY2UoTSsoWiYmYmU/MTowKSwxKSx0aGlzLnN5bmNSb3dXaXRoUmF3U291cmNlKHYpLGJlfHx0aGlzLnN5bmNSb3dXaXRoUmF3U291cmNlKHJlKX10cmFuc2xhdGVUcmltbWVkUm93KGwpe3JldHVybiB0aGlzLnBsdWdpbi5jb2xsYXBzaW5nVUk/dGhpcy5wbHVnaW4uY29sbGFw''@;'; put 'put ''c2luZ1VJLnRyYW5zbGF0ZVRyaW1tZWRSb3cobCk6bH11bnRyYW5zbGF0ZVRyaW1tZWRSb3cobCl7cmV0dXJuIHRoaXMucGx1Z2luLmNvbGxhcHNpbmdVST90aGlzLnBsdWdpbi5jb2xsYXBzaW5nVUkudW50cmFuc2xhdGVUcmltbWVkUm93KGwpOmx9fTtmdW5jdGlvbiAkbWUoYyxsLGEpe3Jl''@;'; put 'put ''dHVybihsPWZ1bmN0aW9uIHo0dChjKXt2YXIgbD1mdW5jdGlvbiBVNHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3Qi''@;'; put 'put ''IT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9s''@;'; put 'put ''OmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNvbnN0IGxlZT1jbGFzcyBaNHR7Y29uc3RydWN0b3IobCxhKXskbWUodGhpcywiaG90Iix2b2lkIDApLCRt''@;'; put 'put ''ZSh0aGlzLCJwbHVnaW4iLHZvaWQgMCksdGhpcy5ob3Q9YSx0aGlzLnBsdWdpbj1sfX07Y2xhc3MgJGcgZXh0ZW5kcyBsZWV7c3RhdGljIGdldCBDU1NfQ0xBU1NFUygpe3JldHVybntpbmRpY2F0b3JDb250YWluZXI6Imh0X25lc3RpbmdMZXZlbHMiLHBhcmVudDoiaHRfbmVzdGluZ1BhcmVu''@;'; put 'put ''dCIsaW5kaWNhdG9yOiJodF9uZXN0aW5nTGV2ZWwiLGVtcHR5SW5kaWNhdG9yOiJodF9uZXN0aW5nTGV2ZWxfZW1wdHkiLGJ1dHRvbjoiaHRfbmVzdGluZ0J1dHRvbiIsZXhwYW5kQnV0dG9uOiJodF9uZXN0aW5nRXhwYW5kIixjb2xsYXBzZUJ1dHRvbjoiaHRfbmVzdGluZ0NvbGxhcHNlIn19''@;'; put 'put ''Y29uc3RydWN0b3IobCxhKXtzdXBlcihsLGEpLHRoaXMuZGF0YU1hbmFnZXI9dGhpcy5wbHVnaW4uZGF0YU1hbmFnZXIsdGhpcy5jb2xsYXBzaW5nVUk9dGhpcy5wbHVnaW4uY29sbGFwc2luZ1VJLHRoaXMucm93SGVhZGVyV2lkdGhDYWNoZT1udWxsfWFwcGVuZExldmVsSW5kaWNhdG9ycyhs''@;'; put 'put ''LGEpe2NvbnN0IGQ9dGhpcy5ob3QudG9QaHlzaWNhbFJvdyhsKSxoPXRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93TGV2ZWwoZCksZj10aGlzLmRhdGFNYW5hZ2VyLmdldERhdGFPYmplY3QoZCksdj1hLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJESVYiKVswXSxNPXYucXVlcnlTZWxlY3Rvcigic3Bh''@;'; put 'put ''bi5yb3dIZWFkZXIiKSxEPXYucXVlcnlTZWxlY3RvckFsbCgnW2NsYXNzXj0iaHRfbmVzdGluZyJdJyksWj10aGlzLmhvdC5nZXRTZXR0aW5ncygpLmFyaWFUYWdzO2lmKFluKEQscmU9PntyZSYmdi5yZW1vdmVDaGlsZChyZSl9KSxUaShhLCRnLkNTU19DTEFTU0VTLmluZGljYXRvckNvbnRh''@;'; put 'put ''aW5lciksaCl7Y29uc3R7cm9vdERvY3VtZW50OnJlfT10aGlzLmhvdCxjZT1NLmNsb25lTm9kZSghMCk7di5pbm5lckhUTUw9IiIsR2EoMCxoLTEsKCk9Pntjb25zdCBiZT1yZS5jcmVhdGVFbGVtZW50KCJTUEFOIik7VGkoYmUsJGcuQ1NTX0NMQVNTRVMuZW1wdHlJbmRpY2F0b3IpLHYuYXBw''@;'; put 'put ''ZW5kQ2hpbGQoYmUpfSksdi5hcHBlbmRDaGlsZChjZSl9aWYodGhpcy5kYXRhTWFuYWdlci5oYXNDaGlsZHJlbihmKSl7Y29uc3QgcmU9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpO1omJnZvKHJlLFtWNygpXSksVGkoYSwkZy5DU1NfQ0xBU1NFUy5wYXJlbnQp''@;'; put 'put ''LHRoaXMuY29sbGFwc2luZ1VJLmFyZUNoaWxkcmVuQ29sbGFwc2VkKGQpPyhUaShyZSxgJHskZy5DU1NfQ0xBU1NFUy5idXR0b259ICR7JGcuQ1NTX0NMQVNTRVMuZXhwYW5kQnV0dG9ufWApLFomJnZvKGEsW04yKCExKV0pKTooVGkocmUsYCR7JGcuQ1NTX0NMQVNTRVMuYnV0dG9ufSAkeyRn''@;'; put 'put ''LkNTU19DTEFTU0VTLmNvbGxhcHNlQnV0dG9ufWApLFomJnZvKGEsW04yKCEwKV0pKSx2LmFwcGVuZENoaWxkKHJlKX19dXBkYXRlUm93SGVhZGVyV2lkdGgobCl7bGV0IGE9bDthfHwoYT10aGlzLmRhdGFNYW5hZ2VyLmNhY2hlLmxldmVsQ291bnQpO2NvbnN0IGQ9dGhpcy5ob3Qudmlldy5n''@;'; put 'put ''ZXRTdHlsZXNIYW5kbGVyKCk7bGV0IGg9MTE7ZC5pc0NsYXNzaWNUaGVtZSgpfHwoaD0yKmQuZ2V0Q1NTVmFyaWFibGVWYWx1ZSgiY2VsbC1ob3Jpem9udGFsLXBhZGRpbmciKSksdGhpcy5yb3dIZWFkZXJXaWR0aENhY2hlPU1hdGgubWF4KDUwLGgrMTAqYSsyNSksdGhpcy5ob3QucmVuZGVy''@;'; put 'put ''KCl9fWNvbnN0IEttZT0kZyxZNHQ9Y2xhc3MgVzR0IGV4dGVuZHMgbGVle2NvbnN0cnVjdG9yKGwsYSl7dmFyIGQ7c3VwZXIobCxhKSxkPXRoaXMsdGhpcy5kYXRhTWFuYWdlcj10aGlzLnBsdWdpbi5kYXRhTWFuYWdlcix0aGlzLmNvbGxhcHNlZFJvd3M9W10sdGhpcy5jb2xsYXBzZWRSb3dz''@;'; put 'put ''U3Rhc2g9e3N0YXNoOmZ1bmN0aW9uKCl7bGV0IGg9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTtkLmxhc3RDb2xsYXBzZWRSb3dzPWQuY29sbGFwc2VkUm93cy5zbGljZSgwKSxkLmV4cGFuZE11bHRpcGxlQ2hpbGRyZW4oZC5sYXN0Q29s''@;'; put 'put ''bGFwc2VkUm93cyxoKX0sc2hpZnRTdGFzaDpmdW5jdGlvbihoLGYpe2xldCB2PWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXToxO251bGw9PWYmJihmPTEvMCksWW4oZC5sYXN0Q29sbGFwc2VkUm93cywoTSxEKT0+e00+PWgmJk08ZiYmKGQu''@;'; put 'put ''bGFzdENvbGxhcHNlZFJvd3NbRF09TSt2KX0pfSxhcHBseVN0YXNoOmZ1bmN0aW9uKCl7ZC5jb2xsYXBzZU11bHRpcGxlQ2hpbGRyZW4oZC5sYXN0Q29sbGFwc2VkUm93cywhKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdKXx8YXJndW1lbnRzWzBdKSxkLmxhc3RD''@;'; put 'put ''b2xsYXBzZWRSb3dzPXZvaWQgMH0sdHJpbVN0YXNoOihoLGYpPT57R2EoaCxoK2YtMSx2PT57Y29uc3QgTT10aGlzLmxhc3RDb2xsYXBzZWRSb3dzLmluZGV4T2Yodik7TT4tMSYmdGhpcy5sYXN0Q29sbGFwc2VkUm93cy5zcGxpY2UoTSwxKX0pfX19Y29sbGFwc2VDaGlsZHJlbihsKXtsZXQg''@;'; put 'put ''YT0hKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdLGQ9IShhcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSl8fGFyZ3VtZW50c1syXTtjb25zdCBoPVtdO2xldCBmPW51bGwsdj1udWxsLE09bnVsbDtyZXR1cm4g''@;'; put 'put ''aXNOYU4obCk/KGY9bCx2PXRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93SW5kZXgoZikpOihmPXRoaXMuZGF0YU1hbmFnZXIuZ2V0RGF0YU9iamVjdChsKSx2PWwpLHRoaXMuZGF0YU1hbmFnZXIuaGFzQ2hpbGRyZW4oZikmJlluKGYuX19jaGlsZHJlbixEPT57aC5wdXNoKHRoaXMuZGF0YU1hbmFn''@;'; put 'put ''ZXIuZ2V0Um93SW5kZXgoRCkpfSksTT10aGlzLmNvbGxhcHNlUm93cyhoLCEwLCExKSxkJiZ0aGlzLnRyaW1Sb3dzKE0pLGEmJnRoaXMucmVuZGVyQW5kQWRqdXN0KCksLTE9PT10aGlzLmNvbGxhcHNlZFJvd3MuaW5kZXhPZih2KSYmdGhpcy5jb2xsYXBzZWRSb3dzLnB1c2godiksTX1jb2xs''@;'; put 'put ''YXBzZU11bHRpcGxlQ2hpbGRyZW4obCl7bGV0IGE9IShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXSxkPSEoYXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0pfHxhcmd1bWVudHNbMl07Y29uc3QgaD1bXTtZbihs''@;'; put 'put ''LGY9PntoLnB1c2goLi4udGhpcy5jb2xsYXBzZUNoaWxkcmVuKGYsITEsITEpKX0pLGQmJnRoaXMudHJpbVJvd3MoaCksYSYmdGhpcy5yZW5kZXJBbmRBZGp1c3QoKX1jb2xsYXBzZVJvdyhsKXt0aGlzLmNvbGxhcHNlUm93cyhbbF0sIShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFy''@;'; put 'put ''Z3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXSl9Y29sbGFwc2VSb3dzKGwpe2xldCBhPSEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0pfHxhcmd1bWVudHNbMV0sZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJd''@;'; put 'put ''O2NvbnN0IGg9W107cmV0dXJuIFluKGwsZj0+e2gucHVzaChmKSxhJiZ0aGlzLmNvbGxhcHNlQ2hpbGRSb3dzKGYsaCl9KSxkJiZ0aGlzLnRyaW1Sb3dzKGgpLGh9Y29sbGFwc2VDaGlsZFJvd3MobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJn''@;'; put 'put ''dW1lbnRzWzFdOltdLGg9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10mJmFyZ3VtZW50c1szXTt0aGlzLmRhdGFNYW5hZ2VyLmhhc0NoaWxkcmVuKGwpJiZZbih0aGlzLmRhdGFNYW5hZ2VyLmdldERhdGFPYmplY3QobCkuX19jaGlsZHJlbix2PT57Y29uc3QgTT10''@;'; put 'put ''aGlzLmRhdGFNYW5hZ2VyLmdldFJvd0luZGV4KHYpO2EucHVzaChNKSx0aGlzLmNvbGxhcHNlQ2hpbGRSb3dzKE0sYSl9KSxoJiZ0aGlzLnRyaW1Sb3dzKGEpfWV4cGFuZFJvdyhsKXt0aGlzLmV4cGFuZFJvd3MoW2xdLCEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNb''@;'; put 'put ''MV0pfHxhcmd1bWVudHNbMV0pfWV4cGFuZFJvd3MobCl7bGV0IGE9IShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXSxkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl07Y29uc3QgaD1b''@;'; put 'put ''XTtyZXR1cm4gWW4obCxmPT57aC5wdXNoKGYpLGEmJnRoaXMuZXhwYW5kQ2hpbGRSb3dzKGYsaCl9KSxkJiZ0aGlzLnVudHJpbVJvd3MoaCksaH1leHBhbmRDaGlsZFJvd3MobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOltd''@;'; put 'put ''LGg9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10mJmFyZ3VtZW50c1szXTt0aGlzLmRhdGFNYW5hZ2VyLmhhc0NoaWxkcmVuKGwpJiZZbih0aGlzLmRhdGFNYW5hZ2VyLmdldERhdGFPYmplY3QobCkuX19jaGlsZHJlbix2PT57aWYoIXRoaXMuaXNBbnlQYXJlbnRD''@;'; put 'put ''b2xsYXBzZWQodikpe2NvbnN0IE09dGhpcy5kYXRhTWFuYWdlci5nZXRSb3dJbmRleCh2KTthLnB1c2goTSksdGhpcy5leHBhbmRDaGlsZFJvd3MoTSxhKX19KSxoJiZ0aGlzLnVudHJpbVJvd3MoYSl9ZXhwYW5kQ2hpbGRyZW4obCl7bGV0IGE9IShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQg''@;'; put 'put ''MCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXSxkPSEoYXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0pfHxhcmd1bWVudHNbMl07Y29uc3QgaD1bXTtsZXQgZj1udWxsLHY9bnVsbCxNPW51bGw7cmV0dXJuIGlzTmFOKGwpPyhmPWwsdj10aGlzLmRhdGFNYW5h''@;'; put 'put ''Z2VyLmdldFJvd0luZGV4KGwpKTooZj10aGlzLmRhdGFNYW5hZ2VyLmdldERhdGFPYmplY3QobCksdj1sKSx0aGlzLmNvbGxhcHNlZFJvd3Muc3BsaWNlKHRoaXMuY29sbGFwc2VkUm93cy5pbmRleE9mKHYpLDEpLHRoaXMuZGF0YU1hbmFnZXIuaGFzQ2hpbGRyZW4oZikmJlluKGYuX19jaGls''@;'; put 'put ''ZHJlbixEPT57Y29uc3QgWj10aGlzLmRhdGFNYW5hZ2VyLmdldFJvd0luZGV4KEQpO2gucHVzaChaKX0pLE09dGhpcy5leHBhbmRSb3dzKGgsITAsITEpLGQmJnRoaXMudW50cmltUm93cyhNKSxhJiZ0aGlzLnJlbmRlckFuZEFkanVzdCgpLE19ZXhwYW5kTXVsdGlwbGVDaGlsZHJlbihsKXts''@;'; put 'put ''ZXQgYT0hKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdLGQ9IShhcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSl8fGFyZ3VtZW50c1syXTtjb25zdCBoPVtdO1luKGwsZj0+e2gucHVzaCguLi50aGlzLmV4cGFu''@;'; put 'put ''ZENoaWxkcmVuKGYsITEsITEpKX0pLGQmJnRoaXMudW50cmltUm93cyhoKSxhJiZ0aGlzLnJlbmRlckFuZEFkanVzdCgpfWNvbGxhcHNlQWxsKCl7Y29uc3QgbD10aGlzLmRhdGFNYW5hZ2VyLmdldERhdGEoKSxhPVtdO1luKGwsZD0+e3RoaXMuZGF0YU1hbmFnZXIuaGFzQ2hpbGRyZW4oZCkm''@;'; put 'put ''JmEucHVzaChkKX0pLHRoaXMuY29sbGFwc2VNdWx0aXBsZUNoaWxkcmVuKGEpLHRoaXMucmVuZGVyQW5kQWRqdXN0KCl9ZXhwYW5kQWxsKCl7Y29uc3QgbD10aGlzLmRhdGFNYW5hZ2VyLmdldERhdGEoKSxhPVtdO1luKGwsZD0+e3RoaXMuZGF0YU1hbmFnZXIuaGFzQ2hpbGRyZW4oZCkmJmEu''@;'; put 'put ''cHVzaChkKX0pLHRoaXMuZXhwYW5kTXVsdGlwbGVDaGlsZHJlbihhKSx0aGlzLnJlbmRlckFuZEFkanVzdCgpfXRyaW1Sb3dzKGwpe3RoaXMuaG90LmJhdGNoRXhlY3V0aW9uKCgpPT57WW4obCxhPT57dGhpcy5wbHVnaW4uY29sbGFwc2VkUm93c01hcC5zZXRWYWx1ZUF0SW5kZXgoYSwhMCl9''@;'; put 'put ''KX0sITApfXVudHJpbVJvd3MobCl7dGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9PntZbihsLGE9Pnt0aGlzLnBsdWdpbi5jb2xsYXBzZWRSb3dzTWFwLnNldFZhbHVlQXRJbmRleChhLCExKX0pfSwhMCl9YXJlQ2hpbGRyZW5Db2xsYXBzZWQobCl7bGV0IGE9aXNOYU4obCk/bDp0aGlzLmRh''@;'; put 'put ''dGFNYW5hZ2VyLmdldERhdGFPYmplY3QobCksZD0hMDtyZXR1cm4gbnVsbD09PWEmJihhPXtfX2NoaWxkcmVuOnRoaXMuZGF0YU1hbmFnZXIuZGF0YX0pLHRoaXMuZGF0YU1hbmFnZXIuaGFzQ2hpbGRyZW4oYSkmJlluKGEuX19jaGlsZHJlbixoPT57Y29uc3QgZj10aGlzLmRhdGFNYW5hZ2Vy''@;'; put 'put ''LmdldFJvd0luZGV4KGgpO2lmKCF0aGlzLnBsdWdpbi5jb2xsYXBzZWRSb3dzTWFwLmdldFZhbHVlQXRJbmRleChmKSlyZXR1cm4gZD0hMSwhMX0pLGR9aXNBbnlQYXJlbnRDb2xsYXBzZWQobCl7bGV0IGE9bDtmb3IoO251bGwhPT1hOyl7YT10aGlzLmRhdGFNYW5hZ2VyLmdldFJvd1BhcmVu''@;'; put 'put ''dChhKTtjb25zdCBkPXRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93SW5kZXgoYSk7aWYodGhpcy5jb2xsYXBzZWRSb3dzLmluZGV4T2YoZCk+LTEpcmV0dXJuITB9cmV0dXJuITF9dG9nZ2xlU3RhdGUobCxhKXtpZihhLmNvbD49MClyZXR1cm47Y29uc3QgZD10aGlzLnRyYW5zbGF0ZVRyaW1tZWRS''@;'; put 'put ''b3coYS5yb3cpO3BvKGwudGFyZ2V0LEttZS5DU1NfQ0xBU1NFUy5idXR0b24pJiYodGhpcy5hcmVDaGlsZHJlbkNvbGxhcHNlZChkKT90aGlzLmV4cGFuZENoaWxkcmVuKGQpOnRoaXMuY29sbGFwc2VDaGlsZHJlbihkKSxCMihsKSl9dHJhbnNsYXRlVHJpbW1lZFJvdyhsKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5ob3QudG9QaHlzaWNhbFJvdyhsKX11bnRyYW5zbGF0ZVRyaW1tZWRSb3cobCl7cmV0dXJuIHRoaXMuaG90LnRvVmlzdWFsUm93KGwpfXJlbmRlckFuZEFkanVzdCgpe3RoaXMuaG90LnJlbmRlcigpLHRoaXMuaG90LnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCl9fTt2YXIgcW1lPW5ldyBX''@;'; put 'put ''ZWFrTWFwO2NvbnN0IHRndD1jbGFzcyBlZ3QgZXh0ZW5kcyBsZWV7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIEs0dChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gcTR0KGMpe3ZhciBsPWZ1bmN0aW9uIFg0dChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8''@;'; put 'put ''IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBw''@;'; put 'put ''cmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmln''@;'; put 'put ''dXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9KHRoaXMsImRhdGFNYW5hZ2VyIix0aGlzLnBsdWdpbi5kYXRhTWFuYWdlciksZnVuY3Rpb24gRzR0KGMsbCxhKXsoZnVuY3Rpb24gJDR0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxp''@;'; put 'put ''emUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5zZXQoYyxhKX0odGhpcyxxbWUse3Jvd19hYm92ZToobCxhKT0+e3RoaXMuZGF0YU1hbmFnZXIuYWRkU2libGluZyhhW2EubGVuZ3RoLTFdLnN0YXJ0LnJvdywiYWJvdmUiKX0scm93X2Jl''@;'; put 'put ''bG93OihsLGEpPT57dGhpcy5kYXRhTWFuYWdlci5hZGRTaWJsaW5nKGFbYS5sZW5ndGgtMV0uc3RhcnQucm93LCJiZWxvdyIpfX0pfWFwcGVuZE9wdGlvbnMobCl7Y29uc3QgYT1be2tleToiYWRkX2NoaWxkIixuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShEcSl9LGNh''@;'; put 'put ''bGxiYWNrOigpPT57Y29uc3QgZD10aGlzLmRhdGFNYW5hZ2VyLnRyYW5zbGF0ZVRyaW1tZWRSb3codGhpcy5ob3QuZ2V0U2VsZWN0ZWRMYXN0KClbMF0pLGg9dGhpcy5kYXRhTWFuYWdlci5nZXREYXRhT2JqZWN0KGQpO3RoaXMuZGF0YU1hbmFnZXIuYWRkQ2hpbGQoaCl9LGRpc2FibGVkOigp''@;'; put 'put ''PT57Y29uc3QgZD10aGlzLmhvdC5nZXRTZWxlY3RlZExhc3QoKTtyZXR1cm4hZHx8ZFswXTwwfHx0aGlzLmhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCl8fHRoaXMuaG90LmNvdW50Um93cygpPj10aGlzLmhvdC5nZXRTZXR0aW5ncygpLm1heFJvd3N9fSx7a2V5OiJk''@;'; put 'put ''ZXRhY2hfZnJvbV9wYXJlbnQiLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKElxKX0sY2FsbGJhY2s6KCk9Pnt0aGlzLmRhdGFNYW5hZ2VyLmRldGFjaEZyb21QYXJlbnQodGhpcy5ob3QuZ2V0U2VsZWN0ZWRMYXN0KCkpfSxkaXNhYmxlZDooKT0+e2NvbnN0IGQ9dGhp''@;'; put 'put ''cy5ob3QuZ2V0U2VsZWN0ZWRMYXN0KCksaD10aGlzLmRhdGFNYW5hZ2VyLnRyYW5zbGF0ZVRyaW1tZWRSb3coZFswXSk7cmV0dXJuIXRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93UGFyZW50KGgpfHwhZHx8ZFswXTwwfHx0aGlzLmhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVy''@;'; put 'put ''KCl8fHRoaXMuaG90LmNvdW50Um93cygpPj10aGlzLmhvdC5nZXRTZXR0aW5ncygpLm1heFJvd3N9fSx7bmFtZToiLS0tLS0tLS0tIn1dO3JldHVybiBHYSgwLGwuaXRlbXMubGVuZ3RoLTEsZD0+e2lmKDA9PT1kKXJldHVybiBZbihhLChoLGYpPT57bC5pdGVtcy5zcGxpY2UoZCtmLDAsaCl9''@;'; put 'put ''KSwhMX0pLHRoaXMubW9kaWZ5Um93SW5zZXJ0aW5nT3B0aW9ucyhsKX1tb2RpZnlSb3dJbnNlcnRpbmdPcHRpb25zKGwpe3JldHVybiBHYSgwLGwuaXRlbXMubGVuZ3RoLTEsYT0+e2NvbnN0IGQ9ZnVuY3Rpb24gSjR0KGMsbCl7cmV0dXJuIGMuZ2V0KGZ1bmN0aW9uIFE0dChjLGwsYSl7aWYo''@;'; put 'put ''ImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9KGMsbCkpfShxbWUsdGhpcylbbC5pdGVtc1thXS5r''@;'; put 'put ''ZXldO251bGwhPWQmJihsLml0ZW1zW2FdLmNhbGxiYWNrPWQpfSksbH19O2Z1bmN0aW9uIE5IKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBuZ3QoYyl7dmFyIGw9ZnVuY3Rpb24gcmd0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1By''@;'; put 'put ''aW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmlu''@;'; put 'put ''ZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEs''@;'; put 'put ''Y31jbGFzcyBpZ3R7Y29uc3RydWN0b3IobCl7TkgodGhpcywicGx1Z2luIix2b2lkIDApLE5IKHRoaXMsImhvdCIsdm9pZCAwKSxOSCh0aGlzLCJkYXRhTWFuYWdlciIsdm9pZCAwKSxOSCh0aGlzLCJjb2xsYXBzaW5nVUkiLHZvaWQgMCksdGhpcy5wbHVnaW49bCx0aGlzLmhvdD1sLmhvdCx0''@;'; put 'put ''aGlzLmRhdGFNYW5hZ2VyPWwuZGF0YU1hbmFnZXIsdGhpcy5jb2xsYXBzaW5nVUk9bC5jb2xsYXBzaW5nVUl9b25CZWZvcmVSb3dNb3ZlKGwsYSxkLGgpe2lmKHRoaXMuZGlzcGxheUFQSUNvbXBhdGliaWxpdHlXYXJuaW5nKHtyb3dzOmwsZmluYWxJbmRleDphLGRyb3BJbmRleDpkLG1vdmVQ''@;'; put 'put ''b3NzaWJsZTpofSkpcmV0dXJuITE7dGhpcy5tb3ZlZFRvQ29sbGFwc2VkPSExO2NvbnN0IHY9ZD09PXRoaXMuaG90LmNvdW50Um93cygpLE09dj90aGlzLmhvdC5jb3VudFNvdXJjZVJvd3MoKTp0aGlzLmRhdGFNYW5hZ2VyLnRyYW5zbGF0ZVRyaW1tZWRSb3coZCk7bGV0IEQ9ITA7Y29uc3Qg''@;'; put 'put ''Wj1sLm1hcChCZT0+e2lmKCFEKXJldHVybiExO2NvbnN0IHFlPXRoaXMuZGF0YU1hbmFnZXIudHJhbnNsYXRlVHJpbW1lZFJvdyhCZSk7cmV0dXJuIEQ9dGhpcy5zaG91bGRBbGxvd01vdmluZyhxZSxNKSxxZX0pLHJlPS0xPT09Wi5pbmRleE9mKE0pO2lmKCFEfHwhcmUpcmV0dXJuITE7Y29u''@;'; put 'put ''c3QgY2U9dGhpcy5nZXRCYXNlUGFyZW50KFopLGJlPXRoaXMuZ2V0VGFyZ2V0UGFyZW50KHYsTSksRWU9Y2U9PT1iZTtyZXR1cm4gdGhpcy5tb3ZlZFRvQ29sbGFwc2VkPXRoaXMuY29sbGFwc2luZ1VJLmFyZUNoaWxkcmVuQ29sbGFwc2VkKGJlKSx0aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBz''@;'; put 'put ''ZWRSb3dzU3Rhc2guc3Rhc2goKSx0aGlzLnNoaWZ0Q29sbGFwc2libGVQYXJlbnRzTG9jYXRpb25zKFosTSxFZSksdGhpcy5tb3ZlUm93cyhaLE0sYmUpLHRoaXMuZGF0YU1hbmFnZXIucmV3cml0ZUNhY2hlKCksdGhpcy5tb3ZlQ2VsbHNNZXRhKFosTSksdGhpcy5jb2xsYXBzaW5nVUkuY29s''@;'; put 'put ''bGFwc2VkUm93c1N0YXNoLmFwcGx5U3Rhc2goITEpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclJvd01vdmUiLGwsYSxkLGgsaCYmdGhpcy5pc1Jvd09yZGVyQ2hhbmdlZChsLGEpKSx0aGlzLmhvdC5yZW5kZXIoKSx0aGlzLnNlbGVjdENlbGxzKGwsZCksITF9ZGlzcGxheUFQSUNvbXBhdGli''@;'; put 'put ''aWxpdHlXYXJuaW5nKGwpe2NvbnN0e3Jvd3M6YSxmaW5hbEluZGV4OmQsZHJvcEluZGV4OmgsbW92ZVBvc3NpYmxlOmZ9PWw7bGV0IHY9ITE7cmV0dXJuIF9jKGgpJiYoaWwoZ2xgU2luY2UgdmVyc2lvbiA4LjAuMCBvZiB0aGUgSGFuZHNvbnRhYmxlIHRoZSAnbW92ZVJvd3MnIG1ldGhvZCBp''@;'; put 'put ''c24ndCB1c2VkIGZvciBtb3Zpbmcgcm93c1x4MjAKICAgICAgd2hlbiB0aGUgTmVzdGVkUm93cyBwbHVnaW4gaXMgZW5hYmxlZC4gUGxlYXNlIHVzZSB0aGUgJ2RyYWdSb3dzJyBtZXRob2QgaW5zdGVhZC5gKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJSb3dNb3ZlIixhLGQsaCxmLCExKSx2''@;'; put 'put ''PSEwKSx2fXNob3VsZEFsbG93TW92aW5nKGwsYSl7cmV0dXJuISh0aGlzLmRhdGFNYW5hZ2VyLmlzUGFyZW50KGwpfHx0aGlzLmRhdGFNYW5hZ2VyLmlzUm93SGlnaGVzdExldmVsKGwpfHxsPT09YXx8MD09PWEpfWdldEJhc2VQYXJlbnQobCl7cmV0dXJuIHRoaXMuZGF0YU1hbmFnZXIuZ2V0''@;'; put 'put ''Um93UGFyZW50KGxbMF0pfWdldFRhcmdldFBhcmVudChsLGEpe2xldCBkPXRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93UGFyZW50KGw/YS0xOmEpO3JldHVybiBudWxsPT1kJiYoZD10aGlzLmRhdGFNYW5hZ2VyLmdldFJvd1BhcmVudChhLTEpKSxkfXNoaWZ0Q29sbGFwc2libGVQYXJlbnRzTG9j''@;'; put 'put ''YXRpb25zKGwsYSxkKXtkfHwoTWF0aC5tYXgoLi4ubCk8PWE/dGhpcy5jb2xsYXBzaW5nVUkuY29sbGFwc2VkUm93c1N0YXNoLnNoaWZ0U3Rhc2gobFswXSxhLC0xKmwubGVuZ3RoKTp0aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZWRSb3dzU3Rhc2guc2hpZnRTdGFzaChhLGxbMF0sbC5sZW5n''@;'; put 'put ''dGgpKX1tb3ZlUm93cyhsLGEsZCl7Y29uc3QgaD1hPT09dGhpcy5kYXRhTWFuYWdlci5nZXRSb3dJbmRleChkKSt0aGlzLmRhdGFNYW5hZ2VyLmNvdW50Q2hpbGRyZW4oZCkrMTt0aGlzLmhvdC5iYXRjaFJlbmRlcigoKT0+e2wuZm9yRWFjaChmPT57dGhpcy5kYXRhTWFuYWdlci5tb3ZlUm93''@;'; put 'put ''KGYsYSx0aGlzLm1vdmVkVG9Db2xsYXBzZWQsaCl9KX0pfW1vdmVDZWxsc01ldGEobCxhKXtjb25zdCBkPVtdLGg9TWF0aC5tYXgoLi4ubCk8YTtsLmZvckVhY2goZj0+e2QucHVzaCh0aGlzLmhvdC5nZXRDZWxsTWV0YUF0Um93KGYpKX0pLHRoaXMuaG90LnNwbGljZUNlbGxzTWV0YShsWzBd''@;'; put 'put ''LGwubGVuZ3RoKSx0aGlzLmhvdC5zcGxpY2VDZWxsc01ldGEoYS0oaD9kLmxlbmd0aDowKSwwLC4uLmQpfXNlbGVjdENlbGxzKGwsYSl7Y29uc3QgZD1sLmxlbmd0aDtsZXQgaD0wLGY9MDtpZih0aGlzLm1vdmVkVG9Db2xsYXBzZWQpe2xldCB2PW51bGw7dj10aGlzLmRhdGFNYW5hZ2VyLnRy''@;'; put 'put ''YW5zbGF0ZVRyaW1tZWRSb3cobFtkLTFdPGE/YS1kOmEpO2NvbnN0IE09dGhpcy5kYXRhTWFuYWdlci5nZXRSb3dQYXJlbnQobnVsbD09PXY/dGhpcy5ob3QuY291bnRTb3VyY2VSb3dzKCktMTp2LTEpLEQ9dGhpcy5kYXRhTWFuYWdlci5nZXRSb3dJbmRleChNKTtoPXRoaXMuZGF0YU1hbmFn''@;'; put 'put ''ZXIudW50cmFuc2xhdGVUcmltbWVkUm93KEQpLGY9aH1lbHNlIGxbZC0xXTxhPyhmPWEtMSxoPWYtZCsxKTooaD1hLGY9aCtkLTEpO3RoaXMuaG90LnNlbGVjdENlbGxzKFtbaCwwLGYsdGhpcy5ob3QuY291bnRDb2xzKCktMV1dLCExKX1pc1Jvd09yZGVyQ2hhbmdlZChsLGEpe3JldHVybiBs''@;'; put 'put ''LnNvbWUoKGQsaCk9PmQtaCE9PWEpfX1mdW5jdGlvbiBYbWUoYyxsLGEpe0ptZShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gSm1lKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBv''@;'; put 'put ''biBhbiBvYmplY3QiKX1mdW5jdGlvbiBjZWUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIG9ndChjKXt2YXIgbD1mdW5jdGlvbiBzZ3QoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIg''@;'; put 'put ''ZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMs''@;'; put 'put ''InN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIFZIKGMsbCl7cmV0dXJuIGMu''@;'; put 'put ''Z2V0KG0wKGMsbCkpfWZ1bmN0aW9uIEJIKGMsbCxhKXtyZXR1cm4gYy5zZXQobTAoYyxsKSxhKSxhfWZ1bmN0aW9uIG0wKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9y''@;'; put 'put ''KCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1jb25zdCBqSD0ibmVzdGVkUm93cyIsUW1lPWpIO3ZhciB6SD1uZXcgV2Vha01hcCx2dz1uZXcgV2Vha01hcCxUMD1uZXcgV2Vha1NldDtjbGFzcyB1Z3QgZXh0ZW5kcyBGc3tjb25zdHJ1Y3Rvcigpe3N1''@;'; put 'put ''cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gYWd0KGMsbCl7Sm1lKGMsbCksbC5hZGQoYyl9KHRoaXMsVDApLGNlZSh0aGlzLCJkYXRhTWFuYWdlciIsbnVsbCksY2VlKHRoaXMsImhlYWRlcnNVSSIsbnVsbCksY2VlKHRoaXMsImNvbGxhcHNlZFJvd3NNYXAiLG51bGwpLFhtZSh0aGlzLHpI''@;'; put 'put ''LCExKSxYbWUodGhpcyx2dywhMSl9c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIGpIfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDMwMH1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbakhdfWVuYWJsZVBsdWdpbigpe3ZhciBsPXRo''@;'; put 'put ''aXM7dGhpcy5lbmFibGVkfHwodGhpcy5jb2xsYXBzZWRSb3dzTWFwPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLnJlZ2lzdGVyTWFwKCJuZXN0ZWRSb3dzIixuZXcgcUUpLHRoaXMuZGF0YU1hbmFnZXI9bmV3IGo0dCh0aGlzLHRoaXMuaG90KSx0aGlzLmNvbGxhcHNpbmdVST1uZXcgWTR0KHRo''@;'; put 'put ''aXMsdGhpcy5ob3QpLHRoaXMuaGVhZGVyc1VJPW5ldyBLbWUodGhpcyx0aGlzLmhvdCksdGhpcy5jb250ZXh0TWVudVVJPW5ldyB0Z3QodGhpcyx0aGlzLmhvdCksdGhpcy5yb3dNb3ZlQ29udHJvbGxlcj1uZXcgaWd0KHRoaXMpLHRoaXMuYWRkSG9vaygiYWZ0ZXJJbml0IixmdW5jdGlvbigp''@;'; put 'put ''e2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBtMChUMCxsLE1ndCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVWaWV3UmVuZGVyIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1''@;'; put 'put ''bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBtMChUMCxsLHhndCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJtb2RpZnlSb3dEYXRhIixmdW5jdGlvbigpe3JldHVybiBsLm9uTW9kaWZ5Um93RGF0YSguLi5hcmd1''@;'; put 'put ''bWVudHMpfSksdGhpcy5hZGRIb29rKCJtb2RpZnlTb3VyY2VMZW5ndGgiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25Nb2RpZnlTb3VyY2VMZW5ndGgoLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlRGF0YVNwbGljZSIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbkJlZm9yZURhdGFT''@;'; put 'put ''cGxpY2UoLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiZmlsdGVyRGF0YSIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gbTAoVDAsbCxmZ3QpLmNhbGwobCwuLi5kKX0p''@;'; put 'put ''LHRoaXMuYWRkSG9vaygiYWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBtMChUMCxsLHBndCkuY2FsbChsLC4uLmQpfSks''@;'; put 'put ''dGhpcy5hZGRIb29rKCJhZnRlckdldFJvd0hlYWRlciIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gbTAoVDAsbCxnZ3QpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygi''@;'; put 'put ''YmVmb3JlT25DZWxsTW91c2VEb3duIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBtMChUMCxsLGhndCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVSZW1v''@;'; put 'put ''dmVSb3ciLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIG0wKFQwLGwsYmd0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImFmdGVyUmVtb3ZlUm93IixmdW5jdGlvbigp''@;'; put 'put ''e2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBtMChUMCxsLHZndCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVBZGRDaGlsZCIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1l''@;'; put 'put ''bnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gbTAoVDAsbCx5Z3QpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJBZGRDaGlsZCIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBB''@;'; put 'put ''cnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gbTAoVDAsbCxfZ3QpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlRGV0YWNoQ2hpbGQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8''@;'; put 'put ''YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIG0wKFQwLGwsd2d0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImFmdGVyRGV0YWNoQ2hpbGQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1''@;'; put 'put ''bWVudHNbaF07cmV0dXJuIG0wKFQwLGwsQ2d0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soIm1vZGlmeVJvd0hlYWRlcldpZHRoIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3Jl''@;'; put 'put ''dHVybiBtMChUMCxsLG1ndCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJhZnRlckNyZWF0ZVJvdyIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gbTAoVDAsbCxTZ3Qp''@;'; put 'put ''LmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlUm93TW92ZSIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gbTAoVDAsbCxkZ3QpLmNhbGwobCwuLi5kKX0pLHRo''@;'; put 'put ''aXMuYWRkSG9vaygiYmVmb3JlTG9hZERhdGEiLGE9Pm0wKFQwLHRoaXMsZTZlKS5jYWxsKHRoaXMsYSkpLHRoaXMuYWRkSG9vaygiYmVmb3JlVXBkYXRlRGF0YSIsYT0+bTAoVDAsdGhpcyxlNmUpLmNhbGwodGhpcyxhKSksdGhpcy5yZWdpc3RlclNob3J0Y3V0cygpLHN1cGVyLmVuYWJsZVBs''@;'; put 'put ''dWdpbigpKX1kaXNhYmxlUGx1Z2luKCl7dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIudW5yZWdpc3Rlck1hcCgibmVzdGVkUm93cyIpLHRoaXMudW5yZWdpc3RlclNob3J0Y3V0cygpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKTtjb25z''@;'; put 'put ''dCBsPXRoaXMuZGF0YU1hbmFnZXIuZ2V0RGF0YSgpO3RoaXMuZW5hYmxlUGx1Z2luKCksdGhpcy5kYXRhTWFuYWdlci51cGRhdGVXaXRoRGF0YShsKSxzdXBlci51cGRhdGVQbHVnaW4oKX1yZWdpc3RlclNob3J0Y3V0cygpe3RoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRl''@;'; put 'put ''eHQoImdyaWQiKS5hZGRTaG9ydGN1dCh7a2V5czpbWyJFbnRlciJdXSxjYWxsYmFjazooKT0+e2NvbnN0e2hpZ2hsaWdodDpsfT10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLGE9dGhpcy5jb2xsYXBzaW5nVUkudHJhbnNsYXRlVHJpbW1lZFJvdyhsLnJvdyk7cmV0dXJuIHRoaXMu''@;'; put 'put ''Y29sbGFwc2luZ1VJLmFyZUNoaWxkcmVuQ29sbGFwc2VkKGEpP3RoaXMuY29sbGFwc2luZ1VJLmV4cGFuZENoaWxkcmVuKGEpOnRoaXMuY29sbGFwc2luZ1VJLmNvbGxhcHNlQ2hpbGRyZW4oYSksITF9LHJ1bk9ubHlJZjooKT0+e3ZhciBsLGE7Y29uc3QgZD1udWxsPT09KGw9dGhpcy5ob3Qu''@;'; put 'put ''Z2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSl8fHZvaWQgMD09PWw/dm9pZCAwOmwuaGlnaGxpZ2h0O3JldHVybiBkJiYobnVsbD09PShhPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLmlzU2luZ2xlKCkpJiZ0aGlzLmhvdC5zZWxlY3Rpb24uaXND''@;'; put 'put ''ZWxsVmlzaWJsZShkKSYmLTE9PT1kLmNvbCYmZC5yb3c+PTB9LGdyb3VwOlFtZSxyZWxhdGl2ZVRvR3JvdXA6V20scG9zaXRpb246ImJlZm9yZSJ9KX11bnJlZ2lzdGVyU2hvcnRjdXRzKCl7dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZ3JpZCIpLnJlbW92ZVNo''@;'; put 'put ''b3J0Y3V0c0J5R3JvdXAoUW1lKX1kaXNhYmxlQ29yZUFQSU1vZGlmaWVycygpe0JIKHZ3LHRoaXMsITApfWVuYWJsZUNvcmVBUElNb2RpZmllcnMoKXtCSCh2dyx0aGlzLCExKX1vbk1vZGlmeVJvd0RhdGEobCl7aWYoIVZIKHZ3LHRoaXMpKXJldHVybiB0aGlzLmRhdGFNYW5hZ2VyLmdldERh''@;'; put 'put ''dGFPYmplY3QobCl9b25Nb2RpZnlTb3VyY2VMZW5ndGgoKXtpZighVkgodncsdGhpcykpcmV0dXJuIHRoaXMuZGF0YU1hbmFnZXIuY291bnRBbGxSb3dzKCl9b25CZWZvcmVEYXRhU3BsaWNlKGwsYSxkKXtyZXR1cm4hKCFWSCh2dyx0aGlzKSYmIXRoaXMuZGF0YU1hbmFnZXIuaXNSb3dIaWdo''@;'; put 'put ''ZXN0TGV2ZWwobCkmJih0aGlzLmRhdGFNYW5hZ2VyLnNwbGljZURhdGEobCxhLGQpLDEpKX1kZXN0cm95KCl7c3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiBkZ3QoYyxsLGEsZCl7cmV0dXJuIHRoaXMucm93TW92ZUNvbnRyb2xsZXIub25CZWZvcmVSb3dNb3ZlKGMsbCxhLGQpfWZ1bmN0aW9u''@;'; put 'put ''IGhndChjLGwsYSl7dGhpcy5jb2xsYXBzaW5nVUkudG9nZ2xlU3RhdGUoYyxsLGEpfWZ1bmN0aW9uIGZndChjLGwsYSl7cmV0dXJuIHRoaXMuY29sbGFwc2luZ1VJLmNvbGxhcHNlZFJvd3NTdGFzaC5zdGFzaCgpLHRoaXMuY29sbGFwc2luZ1VJLmNvbGxhcHNlZFJvd3NTdGFzaC50cmltU3Rh''@;'; put 'put ''c2goYVswXSxsKSx0aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZWRSb3dzU3Rhc2guc2hpZnRTdGFzaChhWzBdLG51bGwsLTEqbCksdGhpcy5kYXRhTWFuYWdlci5maWx0ZXJEYXRhKGMsbCxhKSxCSCh6SCx0aGlzLCEwKSx0aGlzLmRhdGFNYW5hZ2VyLmdldERhdGEoKS5zbGljZSgpfWZ1bmN0''@;'; put 'put ''aW9uIHBndChjKXtyZXR1cm4gdGhpcy5jb250ZXh0TWVudVVJLmFwcGVuZE9wdGlvbnMoYyl9ZnVuY3Rpb24gZ2d0KGMsbCl7dGhpcy5oZWFkZXJzVUkuYXBwZW5kTGV2ZWxJbmRpY2F0b3JzKGMsbCl9ZnVuY3Rpb24gbWd0KGMpe3JldHVybiBNYXRoLm1heCh0aGlzLmhlYWRlcnNVSS5yb3dI''@;'; put 'put ''ZWFkZXJXaWR0aENhY2hlLGMpfWZ1bmN0aW9uIHZndChjLGwsYSxkKXtkIT09dGhpcy5wbHVnaW5OYW1lJiZ0aGlzLmhvdC5fcmVnaXN0ZXJUaW1lb3V0KCgpPT57QkgoekgsdGhpcywhMSksdGhpcy5oZWFkZXJzVUkudXBkYXRlUm93SGVhZGVyV2lkdGgoKSx0aGlzLmNvbGxhcHNpbmdVSS5j''@;'; put 'put ''b2xsYXBzZWRSb3dzU3Rhc2guYXBwbHlTdGFzaCgpfSl9ZnVuY3Rpb24gYmd0KGMsbCxhKXtjb25zdCBkPUFycmF5LmZyb20oYS5yZWR1Y2UoKGgsZik9PntpZih0aGlzLmRhdGFNYW5hZ2VyLmlzUGFyZW50KGYpKXtjb25zdCB2PXRoaXMuZGF0YU1hbmFnZXIuZ2V0RGF0YU9iamVjdChmKS5f''@;'; put 'put ''X2NoaWxkcmVuO3JldHVybiBoLmFkZChmKSxBcnJheS5pc0FycmF5KHYpJiZ2LmZvckVhY2goTT0+aC5hZGQodGhpcy5kYXRhTWFuYWdlci5nZXRSb3dJbmRleChNKSkpLGh9cmV0dXJuIGguYWRkKGYpfSxuZXcgU2V0KSk7YS5sZW5ndGg9MCxhLnB1c2goLi4uZCl9ZnVuY3Rpb24geWd0KCl7''@;'; put 'put ''dGhpcy5jb2xsYXBzaW5nVUkuY29sbGFwc2VkUm93c1N0YXNoLnN0YXNoKCl9ZnVuY3Rpb24gX2d0KGMsbCl7dGhpcy5jb2xsYXBzaW5nVUkuY29sbGFwc2VkUm93c1N0YXNoLnNoaWZ0U3Rhc2godGhpcy5kYXRhTWFuYWdlci5nZXRSb3dJbmRleChsKSksdGhpcy5jb2xsYXBzaW5nVUkuY29s''@;'; put 'put ''bGFwc2VkUm93c1N0YXNoLmFwcGx5U3Rhc2goKSx0aGlzLmhlYWRlcnNVSS51cGRhdGVSb3dIZWFkZXJXaWR0aCgpfWZ1bmN0aW9uIHdndCgpe3RoaXMuY29sbGFwc2luZ1VJLmNvbGxhcHNlZFJvd3NTdGFzaC5zdGFzaCgpfWZ1bmN0aW9uIENndChjLGwsYSl7dGhpcy5jb2xsYXBzaW5nVUku''@;'; put 'put ''Y29sbGFwc2VkUm93c1N0YXNoLnNoaWZ0U3Rhc2goYSxudWxsLC0xKSx0aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZWRSb3dzU3Rhc2guYXBwbHlTdGFzaCgpLHRoaXMuaGVhZGVyc1VJLnVwZGF0ZVJvd0hlYWRlcldpZHRoKCl9ZnVuY3Rpb24gU2d0KCl7dGhpcy5kYXRhTWFuYWdlci5yZXdy''@;'; put 'put ''aXRlQ2FjaGUoKX1mdW5jdGlvbiBNZ3QoKXt0aGlzLmhlYWRlcnNVSS51cGRhdGVSb3dIZWFkZXJXaWR0aCgpfWZ1bmN0aW9uIHhndChjLGwpe1ZIKHpILHRoaXMpJiYobC5za2lwUmVuZGVyPSEwKX1mdW5jdGlvbiBlNmUoYyl7aWYoIVQzZShjKSlyZXR1cm4gTiQoIlRoZSBOZXN0ZWQgUm93''@;'; put 'put ''cyBwbHVnaW4gcmVxdWlyZXMgYW4gQXJyYXkgb2YgT2JqZWN0cyBhcyBhIGRhdGFzZXQgdG8gYmUgcHJvdmlkZWQuIFRoZSBwbHVnaW4gaGFzIGJlZW4gZGlzYWJsZWQuIiksdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtqSF09ITEsdm9pZCB0aGlzLmRpc2FibGVQbHVnaW4oKTt0aGlzLmRhdGFN''@;'; put 'put ''YW5hZ2VyLnNldERhdGEoYyksdGhpcy5kYXRhTWFuYWdlci5yZXdyaXRlQ2FjaGUoKX1mdW5jdGlvbiB1ZWUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIEVndChjKXt2YXIgbD1mdW5jdGlvbiBUZ3QoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3lt''@;'; put 'put ''Ym9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVy''@;'; put 'put ''bigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0p''@;'; put 'put ''OmNbbF09YSxjfWNvbnN0IGtndD1jbGFzcyBBZ3R7Y29uc3RydWN0b3IobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOndpbmRvdzt1ZWUodGhpcywicm9vdFdpbmRvdyIsdm9pZCAwKSx1ZWUodGhpcywicHJlZml4Iix2b2lk''@;'; put 'put ''IDApLHVlZSh0aGlzLCJzYXZlZEtleXMiLFtdKSx0aGlzLnJvb3RXaW5kb3c9YSx0aGlzLnByZWZpeD1sLHRoaXMubG9hZFNhdmVkS2V5cygpfXNhdmVWYWx1ZShsLGEpe3RoaXMucm9vdFdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShgJHt0aGlzLnByZWZpeH1fJHtsfWAsSlNPTi5zdHJp''@;'; put 'put ''bmdpZnkoYSkpLC0xPT09dGhpcy5zYXZlZEtleXMuaW5kZXhPZihsKSYmKHRoaXMuc2F2ZWRLZXlzLnB1c2gobCksdGhpcy5zYXZlU2F2ZWRLZXlzKCkpfWxvYWRWYWx1ZShsLGEpe2NvbnN0IGg9dGhpcy5yb290V2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKGAke3RoaXMucHJlZml4fV8k''@;'; put 'put ''e3R5cGVvZiBsPiJ1Ij9hOmx9YCk7cmV0dXJuIG51bGw9PT1oP3ZvaWQgMDpKU09OLnBhcnNlKGgpfXJlc2V0KGwpe3RoaXMucm9vdFdpbmRvdy5sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShgJHt0aGlzLnByZWZpeH1fJHtsfWApfXJlc2V0QWxsKCl7WW4odGhpcy5zYXZlZEtleXMsKGwsYSk9''@;'; put 'put ''Pnt0aGlzLnJvb3RXaW5kb3cubG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oYCR7dGhpcy5wcmVmaXh9XyR7dGhpcy5zYXZlZEtleXNbYV19YCl9KSx0aGlzLmNsZWFyU2F2ZWRLZXlzKCl9bG9hZFNhdmVkS2V5cygpe2NvbnN0IGw9dGhpcy5yb290V2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVt''@;'; put 'put ''KGAke3RoaXMucHJlZml4fV9fcGVyc2lzdGVudFN0YXRlS2V5c2ApLGE9InN0cmluZyI9PXR5cGVvZiBsP0pTT04ucGFyc2UobCk6dm9pZCAwO3RoaXMuc2F2ZWRLZXlzPWF8fFtdfXNhdmVTYXZlZEtleXMoKXt0aGlzLnJvb3RXaW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oYCR7dGhpcy5w''@;'; put 'put ''cmVmaXh9X19wZXJzaXN0ZW50U3RhdGVLZXlzYCxKU09OLnN0cmluZ2lmeSh0aGlzLnNhdmVkS2V5cykpfWNsZWFyU2F2ZWRLZXlzKCl7dGhpcy5zYXZlZEtleXMubGVuZ3RoPTAsdGhpcy5zYXZlU2F2ZWRLZXlzKCl9fTtTYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigicGVyc2lzdGVudFN0''@;'; put 'put ''YXRlU2F2ZSIpLFNhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJwZXJzaXN0ZW50U3RhdGVMb2FkIiksU2EuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoInBlcnNpc3RlbnRTdGF0ZVJlc2V0Iik7Y29uc3QgdDZlPSJwZXJzaXN0ZW50U3RhdGUiO2NsYXNzIE9ndCBleHRlbmRzIEZze2NvbnN0''@;'; put 'put ''cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlvbiBEZ3QoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIElndChjKXt2YXIgbD1mdW5jdGlvbiBSZ3QoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2''@;'; put 'put ''b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5n''@;'; put 'put ''Ok51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfSh0aGlzLCJzdG9y''@;'; put 'put ''YWdlIix2b2lkIDApfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiB0NmV9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMH1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbdDZlXX1lbmFibGVQbHVnaW4oKXt0aGlzLmVuYWJsZWR8fCh0''@;'; put 'put ''aGlzLnN0b3JhZ2V8fCh0aGlzLnN0b3JhZ2U9bmV3IGtndCh0aGlzLmhvdC5yb290RWxlbWVudC5pZCx0aGlzLmhvdC5yb290V2luZG93KSksdGhpcy5hZGRIb29rKCJwZXJzaXN0ZW50U3RhdGVTYXZlIiwobCxhKT0+dGhpcy5zYXZlVmFsdWUobCxhKSksdGhpcy5hZGRIb29rKCJwZXJzaXN0''@;'; put 'put ''ZW50U3RhdGVMb2FkIiwobCxhKT0+dGhpcy5sb2FkVmFsdWUobCxhKSksdGhpcy5hZGRIb29rKCJwZXJzaXN0ZW50U3RhdGVSZXNldCIsKCk9PnRoaXMucmVzZXRWYWx1ZSgpKSxzdXBlci5lbmFibGVQbHVnaW4oKSl9ZGlzYWJsZVBsdWdpbigpe3RoaXMuc3RvcmFnZT12b2lkIDAsc3VwZXIu''@;'; put 'put ''ZGlzYWJsZVBsdWdpbigpfXVwZGF0ZVBsdWdpbigpe3RoaXMuZGlzYWJsZVBsdWdpbigpLHRoaXMuZW5hYmxlUGx1Z2luKCksc3VwZXIudXBkYXRlUGx1Z2luKCl9bG9hZFZhbHVlKGwsYSl7YS52YWx1ZT10aGlzLnN0b3JhZ2UubG9hZFZhbHVlKGwpfXNhdmVWYWx1ZShsLGEpe3RoaXMuc3Rv''@;'; put 'put ''cmFnZS5zYXZlVmFsdWUobCxhKX1yZXNldFZhbHVlKGwpe3R5cGVvZiBsPiJ1Ij90aGlzLnN0b3JhZ2UucmVzZXRBbGwoKTp0aGlzLnN0b3JhZ2UucmVzZXQobCl9ZGVzdHJveSgpe3N1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gZGVlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBIZ3QoYyl7''@;'; put 'put ''dmFyIGw9ZnVuY3Rpb24gTmd0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhy''@;'; put 'put ''b3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5k''@;'; put 'put ''ZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBuNmUoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/''@;'; put 'put ''bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfWNvbnN0IGhlZT0ic2VhcmNoIixqZ3Q9ZnVuY3Rpb24oYyxsLGEsZCxoKXtjLmdldENlbGxNZXRhKGwsYSkuaXNTZWFyY2hSZXN1bHQ9aH0semd0PWZ1bmN0aW9u''@;'; put 'put ''KGMsbCxhKXtyZXR1cm4hKF9jKGMpfHxudWxsPT09Y3x8IWMudG9Mb2NhbGVMb3dlckNhc2V8fDA9PT1jLmxlbmd0aHx8X2MobCl8fG51bGw9PT1sKSYmLTEhPT1sLnRvU3RyaW5nKCkudG9Mb2NhbGVMb3dlckNhc2UoYS5sb2NhbGUpLmluZGV4T2YoYy50b0xvY2FsZUxvd2VyQ2FzZShhLmxv''@;'; put 'put ''Y2FsZSkpfTt2YXIgZmVlPW5ldyBXZWFrU2V0O2NsYXNzIFVndCBleHRlbmRzIEZze2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlvbiBQZ3QoYyxsKXsoZnVuY3Rpb24gRmd0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRp''@;'; put 'put ''YWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5hZGQoYyl9KHRoaXMsZmVlKSxkZWUodGhpcywiY2FsbGJhY2siLGpndCksZGVlKHRoaXMsInF1ZXJ5TWV0aG9kIix6Z3QpLGRlZSh0aGlzLCJzZWFyY2hSZXN1bHRDbGFzcyIsImh0''@;'; put 'put ''U2VhcmNoUmVzdWx0Iil9c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIGhlZX1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAxOTB9aXNFbmFibGVkKCl7cmV0dXJuIHRoaXMuaG90LmdldFNldHRpbmdzKClbaGVlXX1lbmFibGVQbHVnaW4oKXt2YXIgbD10aGlzO2lm''@;'; put 'put ''KHRoaXMuZW5hYmxlZClyZXR1cm47Y29uc3QgYT10aGlzLmhvdC5nZXRTZXR0aW5ncygpW2hlZV07dGhpcy51cGRhdGVQbHVnaW5TZXR0aW5ncyhhKSx0aGlzLmFkZEhvb2soImJlZm9yZVJlbmRlcmVyIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5''@;'; put 'put ''KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBuNmUoZmVlLGwscjZlKS5jYWxsKGwsLi4uaCl9KSxzdXBlci5lbmFibGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7dmFyIGw9dGhpcztjb25zdCBhPWZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgs''@;'; put 'put ''aD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIG42ZShmZWUsbCxyNmUpLmNhbGwobCwuLi5oKX07dGhpcy5ob3QuYWRkSG9vaygiYmVmb3JlUmVuZGVyZXIiLGEpLHRoaXMuaG90LmFkZEhvb2tPbmNlKCJhZnRlclZpZXdSZW5kZXIiLCgpPT57dGhp''@;'; put 'put ''cy5ob3QucmVtb3ZlSG9vaygiYmVmb3JlUmVuZGVyZXIiLGEpfSksc3VwZXIuZGlzYWJsZVBsdWdpbigpfXVwZGF0ZVBsdWdpbigpe3RoaXMuZGlzYWJsZVBsdWdpbigpLHRoaXMuZW5hYmxlUGx1Z2luKCksc3VwZXIudXBkYXRlUGx1Z2luKCl9cXVlcnkobCl7bGV0IGE9YXJndW1lbnRzLmxl''@;'; put 'put ''bmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnRoaXMuZ2V0Q2FsbGJhY2soKSxkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp0aGlzLmdldFF1ZXJ5TWV0aG9kKCk7Y29uc3QgaD10aGlzLmhvdC5jb3VudFJv''@;'; put 'put ''d3MoKSxmPXRoaXMuaG90LmNvdW50Q29scygpLHY9W10sTT10aGlzLmhvdDtyZXR1cm4gR2EoMCxoLTEsRD0+e0dhKDAsZi0xLFo9Pntjb25zdCByZT10aGlzLmhvdC5nZXREYXRhQXRDZWxsKEQsWiksY2U9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEoRCxaKSxiZT1jZS5zZWFyY2guY2FsbGJhY2t8''@;'; put 'put ''fGEsQmU9KGNlLnNlYXJjaC5xdWVyeU1ldGhvZHx8ZCkobCxyZSxjZSk7QmUmJnYucHVzaCh7cm93OkQsY29sOlosZGF0YTpyZX0pLGJlJiZiZShNLEQsWixyZSxCZSl9KX0pLHZ9Z2V0Q2FsbGJhY2soKXtyZXR1cm4gdGhpcy5jYWxsYmFja31zZXRDYWxsYmFjayhsKXt0aGlzLmNhbGxiYWNr''@;'; put 'put ''PWx9Z2V0UXVlcnlNZXRob2QoKXtyZXR1cm4gdGhpcy5xdWVyeU1ldGhvZH1zZXRRdWVyeU1ldGhvZChsKXt0aGlzLnF1ZXJ5TWV0aG9kPWx9Z2V0U2VhcmNoUmVzdWx0Q2xhc3MoKXtyZXR1cm4gdGhpcy5zZWFyY2hSZXN1bHRDbGFzc31zZXRTZWFyY2hSZXN1bHRDbGFzcyhsKXt0aGlzLnNl''@;'; put 'put ''YXJjaFJlc3VsdENsYXNzPWx9dXBkYXRlUGx1Z2luU2V0dGluZ3MobCl7cW8obCkmJihsLnNlYXJjaFJlc3VsdENsYXNzJiZ0aGlzLnNldFNlYXJjaFJlc3VsdENsYXNzKGwuc2VhcmNoUmVzdWx0Q2xhc3MpLGwucXVlcnlNZXRob2QmJnRoaXMuc2V0UXVlcnlNZXRob2QobC5xdWVyeU1ldGhv''@;'; put 'put ''ZCksbC5jYWxsYmFjayYmdGhpcy5zZXRDYWxsYmFjayhsLmNhbGxiYWNrKSl9ZGVzdHJveSgpe3N1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gcjZlKGMsbCxhLGQsaCxmKXtjb25zdCB2PWYuY2xhc3NOYW1lfHxbXTtsZXQgTT1bXTsic3RyaW5nIj09dHlwZW9mIHY/TT12LnNwbGl0KCIgIik6''@;'; put 'put ''TS5wdXNoKC4uLnYpLHRoaXMuaXNFbmFibGVkKCkmJmYuaXNTZWFyY2hSZXN1bHQ/TS5pbmNsdWRlcyh0aGlzLnNlYXJjaFJlc3VsdENsYXNzKXx8TS5wdXNoKGAke3RoaXMuc2VhcmNoUmVzdWx0Q2xhc3N9YCk6TS5pbmNsdWRlcyh0aGlzLnNlYXJjaFJlc3VsdENsYXNzKSYmTS5zcGxpY2Uo''@;'; put 'put ''TS5pbmRleE9mKHRoaXMuc2VhcmNoUmVzdWx0Q2xhc3MpLDEpLGYuY2xhc3NOYW1lPU0uam9pbigiICIpfWZ1bmN0aW9uIFVIKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBaZ3QoYyl7dmFyIGw9ZnVuY3Rpb24gV2d0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2''@;'; put 'put ''YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1''@;'; put 'put ''ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3Jp''@;'; put 'put ''dGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBpNmV7Y29uc3RydWN0b3IobCl7VUgodGhpcywidmlld3BvcnRXaWR0aCIsdm9pZCAwKSxVSCh0aGlzLCJvdmVyd3JpdGVDb2x1bW5XaWR0aEZuIix2b2lkIDApLFVIKHRoaXMsImJhc2VXaWR0aHMiLG5ldyBNYXApLFVIKHRoaXMsInN0cmV0Y2hl''@;'; put 'put ''ZFdpZHRocyIsbmV3IE1hcCksdGhpcy5vdmVyd3JpdGVDb2x1bW5XaWR0aEZuPWx9cHJlcGFyZShsKXtsZXR7dmlld3BvcnRXaWR0aDphfT1sO3RoaXMudmlld3BvcnRXaWR0aD1hLHRoaXMuYmFzZVdpZHRocy5jbGVhcigpLHRoaXMuc3RyZXRjaGVkV2lkdGhzLmNsZWFyKCl9c2V0Q29sdW1u''@;'; put 'put ''QmFzZVdpZHRoKGwsYSl7dGhpcy5iYXNlV2lkdGhzLnNldChsLGEpfWNhbGN1bGF0ZSgpe31nZXRXaWR0aHMoKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLnN0cmV0Y2hlZFdpZHRocyl9fWNsYXNzIFlndCBleHRlbmRzIGk2ZXtjYWxjdWxhdGUoKXtjb25zdCBsPUFycmF5LmZyb20odGhpcy5i''@;'; put 'put ''YXNlV2lkdGhzKS5yZWR1Y2UoKGNlLGJlKT0+e2xldFssRWVdPWJlO3JldHVybiBjZStFZX0sMCk7aWYodGhpcy52aWV3cG9ydFdpZHRoLWw8MClyZXR1cm4gdm9pZCB0aGlzLnN0cmV0Y2hlZFdpZHRocy5jbGVhcigpO2NvbnN0IGQ9dGhpcy52aWV3cG9ydFdpZHRoL2wsaD1bXSxmPVtdO2xl''@;'; put 'put ''dCB2PXRoaXMudmlld3BvcnRXaWR0aCxNPTA7aWYodGhpcy5iYXNlV2lkdGhzLmZvckVhY2goKGNlLGJlKT0+e2NvbnN0IEVlPU1hdGgucm91bmQoY2UqZCksQmU9dGhpcy5vdmVyd3JpdGVDb2x1bW5XaWR0aEZuKEVlLGJlKTtFZT09PUJlJiZFZT49X18/KGgucHVzaChbYmUsQmVdKSxNKz1C''@;'; put 'put ''ZSk6RWUhPT1CZSYmKGgucHVzaChbYmUsQmVdKSxmLnB1c2goYmUpLHYtPUJlKX0pLHY8PV9fKXJldHVybiB2b2lkIHRoaXMuc3RyZXRjaGVkV2lkdGhzLmNsZWFyKCk7Y29uc3QgRD12L007bGV0IFo9LTEscmU9MDtoLmZvckVhY2goKGNlLGJlKT0+e2xldFtFZSxCZV09Y2UscWU9QmU7Zi5p''@;'; put 'put ''bmNsdWRlcyhFZSl8fChxZT1NYXRoLnJvdW5kKEJlKkQpKSx0aGlzLnN0cmV0Y2hlZFdpZHRocy5zZXQoRWUscWUpLFo9RWUsYmU8aC5sZW5ndGgtMSYmKHJlKz1xZSl9KSx0aGlzLnN0cmV0Y2hlZFdpZHRocy5zaXplPjEmJnRoaXMuc3RyZXRjaGVkV2lkdGhzLnNldChaLE1hdGgucm91bmQo''@;'; put 'put ''dGhpcy52aWV3cG9ydFdpZHRoLXJlKSl9fWZ1bmN0aW9uIGE2ZShjLGwsYSl7KGZ1bmN0aW9uIEdndChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShj''@;'; put 'put ''LGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gcGVlKGMsbCl7cmV0dXJuIGMuZ2V0KG82ZShjLGwpKX1mdW5jdGlvbiBaSChjLGwsYSl7cmV0dXJuIGMuc2V0KG82ZShjLGwpLGEpLGF9ZnVuY3Rpb24gbzZlKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1''@;'; put 'put ''cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgV0g9bmV3IFdlYWtNYXAsd0E9bmV3IFdlYWtNYXA7Y2xhc3MgJGd0IGV4dGVuZHMgaTZle2NvbnN0cnVjdG9yKCl7''@;'; put 'put ''c3VwZXIoLi4uYXJndW1lbnRzKSxhNmUodGhpcyxXSCwwKSxhNmUodGhpcyx3QSwtMSl9cHJlcGFyZShsKXtzdXBlci5wcmVwYXJlKGwpLFpIKFdILHRoaXMsMCksWkgod0EsdGhpcywtMSl9c2V0Q29sdW1uQmFzZVdpZHRoKGwsYSl7c3VwZXIuc2V0Q29sdW1uQmFzZVdpZHRoKGwsYSksWkgo''@;'; put 'put ''d0EsdGhpcyxsKSxaSChXSCx0aGlzLGEpfWNhbGN1bGF0ZSgpe2lmKC0xPT09cGVlKHdBLHRoaXMpKXJldHVybjtjb25zdCBsPUFycmF5LmZyb20odGhpcy5iYXNlV2lkdGhzKS5yZWR1Y2UoKGQsaCk9PntsZXRbLGZdPWg7cmV0dXJuIGQrZn0sMCksYT1NYXRoLm1heCh0aGlzLnZpZXdwb3J0''@;'; put 'put ''V2lkdGgtbCtwZWUoV0gsdGhpcyksMCk7dGhpcy5zdHJldGNoZWRXaWR0aHMuc2V0KHBlZSh3QSx0aGlzKSxhKX19ZnVuY3Rpb24gWUgoYyxsLGEpe3M2ZShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gczZlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGlu''@;'; put 'put ''aXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBmdShjLGwpe3JldHVybiBjLmdldChidyhjLGwpKX1mdW5jdGlvbiBnZWUoYyxsLGEpe3JldHVybiBjLnNldChidyhjLGwpLGEpLGF9ZnVuY3Rpb24gYncoYyxsLGEpe2lmKCJm''@;'; put 'put ''dW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciBNMT1uZXcgV2Vha01hcCx5dz1uZXcgV2Vha01h''@;'; put 'put ''cCxtZWU9bmV3IFdlYWtNYXAsR0g9bmV3IFdlYWtNYXAsQ0E9bmV3IFdlYWtTZXQ7Y2xhc3MgWGd0e2NvbnN0cnVjdG9yKGwpeyhmdW5jdGlvbiBLZ3QoYyxsKXtzNmUoYyxsKSxsLmFkZChjKX0pKHRoaXMsQ0EpLFlIKHRoaXMsTTEsdm9pZCAwKSxZSCh0aGlzLHl3LHZvaWQgMCksWUgodGhp''@;'; put 'put ''cyxtZWUsbmV3IE1hcChbWyJhbGwiLG5ldyBZZ3QoYncoQ0EsdGhpcyxsNmUpLmJpbmQodGhpcykpXSxbImxhc3QiLG5ldyAkZ3QoYncoQ0EsdGhpcyxsNmUpLmJpbmQodGhpcykpXV0pKSxZSCh0aGlzLEdILCJub25lIiksZ2VlKE0xLHRoaXMsbCksZ2VlKHl3LHRoaXMsZnUoTTEsdGhpcyku''@;'; put 'put ''Y29sdW1uSW5kZXhNYXBwZXIuY3JlYXRlQW5kUmVnaXN0ZXJJbmRleE1hcCgic3RyZXRjaENvbHVtbnMiLCJwaHlzaWNhbEluZGV4VG9WYWx1ZSIpKX11c2VTdHJhdGVneShsKXtnZWUoR0gsdGhpcyxmdShtZWUsdGhpcykuaGFzKGwpP2w6Im5vbmUiKX1yZWZyZXNoU3RyZXRjaGluZygpeyJu''@;'; put 'put ''b25lIiE9PWZ1KEdILHRoaXMpP2Z1KE0xLHRoaXMpLmJhdGNoRXhlY3V0aW9uKCgpPT57ZnUoeXcsdGhpcykuY2xlYXIoKTtjb25zdCBsPWZ1KG1lZSx0aGlzKS5nZXQoZnUoR0gsdGhpcykpO2xldCBkPWZ1KE0xLHRoaXMpLnZpZXcuZ2V0Vmlld3BvcnRXaWR0aCgpO2J3KENBLHRoaXMsSmd0''@;'; put 'put ''KS5jYWxsKHRoaXMpJiYoZC09ZjAoZnUoTTEsdGhpcykucm9vdERvY3VtZW50KSksbC5wcmVwYXJlKHt2aWV3cG9ydFdpZHRoOmR9KTtmb3IobGV0IGg9MDtoPGZ1KE0xLHRoaXMpLmNvdW50Q29scygpO2grKylmdShNMSx0aGlzKS5jb2x1bW5JbmRleE1hcHBlci5pc0hpZGRlbihmdShNMSx0''@;'; put 'put ''aGlzKS50b1BoeXNpY2FsQ29sdW1uKGgpKXx8bC5zZXRDb2x1bW5CYXNlV2lkdGgoaCxidyhDQSx0aGlzLFFndCkuY2FsbCh0aGlzLGgpKTtsLmNhbGN1bGF0ZSgpLGwuZ2V0V2lkdGhzKCkuZm9yRWFjaChoPT57bGV0W2Ysdl09aDtmdSh5dyx0aGlzKS5zZXRWYWx1ZUF0SW5kZXgoZnUoTTEs''@;'; put 'put ''dGhpcykudG9QaHlzaWNhbENvbHVtbihmKSx2KX0pfSwhMCk6ZnUoeXcsdGhpcykuY2xlYXIoKX1nZXRTdHJldGNoZWRXaWR0aChsKXtyZXR1cm4gZnUoeXcsdGhpcykuZ2V0VmFsdWVBdEluZGV4KGZ1KE0xLHRoaXMpLnRvUGh5c2ljYWxDb2x1bW4obCkpfX1mdW5jdGlvbiBKZ3QoKXtjb25z''@;'; put 'put ''dHt2aWV3OmN9PWZ1KE0xLHRoaXMpO2lmKGMuaXNWZXJ0aWNhbGx5U2Nyb2xsYWJsZUJ5V2luZG93KCkpcmV0dXJuITE7Y29uc3QgbD1jLmdldFZpZXdwb3J0SGVpZ2h0KCksYT1mdShNMSx0aGlzKS5jb3VudFJvd3MoKSxkPWMuZ2V0U3R5bGVzSGFuZGxlcigpLmdldERlZmF1bHRSb3dIZWln''@;'; put 'put ''aHQoKTtsZXQgaD0wLGY9ITE7Zm9yKGxldCBNPTA7TTxhO00rKyl7dmFyIHY7aWYoaCs9KG51bGwhPT0odj1mdShNMSx0aGlzKS5nZXRSb3dIZWlnaHQoTSkpJiZ2b2lkIDAhPT12P3Y6ZCkrKDA9PT1NPzE6MCksaD5sKXtmPSEwO2JyZWFrfX1yZXR1cm4gZn1mdW5jdGlvbiBRZ3QoYyl7dmFy''@;'; put 'put ''IGw7cmV0dXJuIG51bGwhPT0obD1mdShNMSx0aGlzKS5nZXRDb2xXaWR0aChjLCJTdHJldGNoQ29sdW1ucyIpKSYmdm9pZCAwIT09bD9sOl9ffWZ1bmN0aW9uIGw2ZShjLGwpe3JldHVybiBmdShNMSx0aGlzKS5ydW5Ib29rcygiYmVmb3JlU3RyZXRjaGluZ0NvbHVtbldpZHRoIixjLGwpfWZ1''@;'; put 'put ''bmN0aW9uIHZlZShjLGwsYSl7YzZlKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBjNmUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIGJl''@;'; put 'put ''ZShjLGwsYSl7cmV0dXJuIGMuc2V0KCRIKGMsbCksYSksYX1mdW5jdGlvbiBLZyhjLGwpe3JldHVybiBjLmdldCgkSChjLGwpKX1mdW5jdGlvbiAkSChjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhy''@;'; put 'put ''b3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIF93PW5ldyBXZWFrTWFwLEtIPW5ldyBXZWFrTWFwLFNBPW5ldyBXZWFrTWFwLHllZT1uZXcgV2Vha1NldDtjbGFzcyByNXQgZXh0ZW5kcyBGc3tjb25zdHJ1Y3Rvcigp''@;'; put 'put ''e3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gZTV0KGMsbCl7YzZlKGMsbCksbC5hZGQoYyl9KHRoaXMseWVlKSx2ZWUodGhpcyxfdyxuZXcgWGd0KHRoaXMuaG90KSksdmVlKHRoaXMsS0gsbnVsbCksdmVlKHRoaXMsU0EsbmV3IFJlc2l6ZU9ic2VydmVyKGw9PntyZXF1ZXN0QW5pbWF0''@;'; put 'put ''aW9uRnJhbWUoKCk9Pnt2YXIgYTtudWxsIT09KGE9dGhpcy5ob3QpJiZ2b2lkIDAhPT1hJiZhLnZpZXcuaXNIb3Jpem9udGFsbHlTY3JvbGxhYmxlQnlXaW5kb3coKSYmbC5mb3JFYWNoKGQ9PntsZXR7Y29udGVudFJlY3Q6aH09ZDtudWxsIT09S2coS0gsdGhpcykmJktnKEtILHRoaXMpIT09''@;'; put 'put ''aC53aWR0aCYmKHRoaXMuaG90LnJlZnJlc2hEaW1lbnNpb25zKCksdGhpcy5ob3Qudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKSksYmVlKEtILHRoaXMsaC53aWR0aCl9KX0pfSkpfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiJzdHJldGNoQ29sdW1ucyJ9c3RhdGljIGdldCBQTFVH''@;'; put 'put ''SU5fUFJJT1JJVFkoKXtyZXR1cm4gMTU1fXN0YXRpYyBnZXQgU0VUVElOR19LRVlTKCl7cmV0dXJuITB9aXNFbmFibGVkKCl7cmV0dXJuWyJhbGwiLCJsYXN0Il0uaW5jbHVkZXModGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5zdHJldGNoSCl9ZW5hYmxlUGx1Z2luKCl7dmFyIGw9dGhpczt0aGlz''@;'; put 'put ''LmVuYWJsZWR8fChLZyhfdyx0aGlzKS51c2VTdHJhdGVneSh0aGlzLmhvdC5nZXRTZXR0aW5ncygpLnN0cmV0Y2hIKSxLZyhTQSx0aGlzKS5vYnNlcnZlKHRoaXMuaG90LnJvb3RFbGVtZW50KSx0aGlzLmFkZEhvb2soImJlZm9yZVJlbmRlciIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1l''@;'; put 'put ''bnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gJEgoeWVlLGwsYTV0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soIm1vZGlmeUNvbFdpZHRoIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3''@;'; put 'put ''IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiAkSCh5ZWUsbCxpNXQpLmNhbGwobCwuLi5kKX0sMTApLHN1cGVyLmVuYWJsZVBsdWdpbigpKX11cGRhdGVQbHVnaW4oKXtLZyhfdyx0aGlzKS51c2VTdHJhdGVneSh0aGlzLmhvdC5nZXRTZXR0aW5ncygpLnN0''@;'; put 'put ''cmV0Y2hIKSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7c3VwZXIuZGlzYWJsZVBsdWdpbigpLEtnKFNBLHRoaXMpLnVub2JzZXJ2ZSh0aGlzLmhvdC5yb290RWxlbWVudCl9Z2V0Q29sdW1uV2lkdGgobCl7cmV0dXJuIEtnKF93LHRoaXMpLmdldFN0cmV0Y2hlZFdpZHRo''@;'; put 'put ''KGwpfWRlc3Ryb3koKXtLZyhTQSx0aGlzKS5kaXNjb25uZWN0KCksYmVlKFNBLHRoaXMsbnVsbCksYmVlKF93LHRoaXMsbnVsbCksc3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiBpNXQoYyxsLGEpe2lmKGE9PT10aGlzLnBsdWdpbk5hbWUpcmV0dXJuO2NvbnN0IGQ9dGhpcy5nZXRDb2x1bW5X''@;'; put 'put ''aWR0aChsKTtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGQ/ZDpjfWZ1bmN0aW9uIGE1dChjKXtjJiZLZyhfdyx0aGlzKS5yZWZyZXNoU3RyZXRjaGluZygpfWZ1bmN0aW9uIHFIKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBsNXQoYyl7dmFyIGw9ZnVuY3Rpb24gYzV0KGMsbCl7aWYoIm9iamVj''@;'; put 'put ''dCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBt''@;'; put 'put ''dXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVy''@;'; put 'put ''YWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBfZWUoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUg''@;'; put 'put ''ZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciBYSD1uZXcgV2Vha1NldDtjbGFzcyBoNXQgZXh0ZW5kcyBGc3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gbzV0KGMsbCl7KGZ1bmN0aW9uIHM1dChjLGwpe2lmKGwuaGFzKGMpKXRo''@;'; put 'put ''cm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuYWRkKGMpfSh0aGlzLFhIKSxxSCh0aGlzLCJzY3JvbGxiYXJzIixbXSkscUgodGhpcywiY2xvbmVzIixbXSkscUgodGhpcywi''@;'; put 'put ''bG9ja2VkQ29sbGVjdGlvbiIsITEpLHFIKHRoaXMsImZyZWV6ZU92ZXJsYXlzIiwhMSl9c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuInRvdWNoU2Nyb2xsIn1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAyMDB9c3RhdGljIGdldCBTRVRUSU5HX0tFWVMoKXtyZXR1''@;'; put 'put ''cm4hMH1pc0VuYWJsZWQoKXtyZXR1cm4gUiQoKX1lbmFibGVQbHVnaW4oKXt0aGlzLmVuYWJsZWR8fCh0aGlzLmFkZEhvb2soImFmdGVyVmlld1JlbmRlciIsKCk9Pl9lZShYSCx0aGlzLGY1dCkuY2FsbCh0aGlzKSksdGhpcy5yZWdpc3RlckV2ZW50cygpLHN1cGVyLmVuYWJsZVBsdWdpbigp''@;'; put 'put ''KX11cGRhdGVQbHVnaW4oKXt0aGlzLmxvY2tlZENvbGxlY3Rpb249ITEsc3VwZXIudXBkYXRlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe3N1cGVyLmRpc2FibGVQbHVnaW4oKX1yZWdpc3RlckV2ZW50cygpe3RoaXMuYWRkSG9vaygiYmVmb3JlVG91Y2hTY3JvbGwiLCgpPT5fZWUoWEgsdGhp''@;'; put 'put ''cyxwNXQpLmNhbGwodGhpcykpLHRoaXMuYWRkSG9vaygiYWZ0ZXJNb21lbnR1bVNjcm9sbCIsKCk9Pl9lZShYSCx0aGlzLGc1dCkuY2FsbCh0aGlzKSl9fWZ1bmN0aW9uIGY1dCgpe2lmKHRoaXMubG9ja2VkQ29sbGVjdGlvbilyZXR1cm47Y29uc3R7dG9wT3ZlcmxheTpjLGJvdHRvbU92ZXJs''@;'; put 'put ''YXk6bCxpbmxpbmVTdGFydE92ZXJsYXk6YSx0b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXk6ZCxib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXk6aH09dGhpcy5ob3Qudmlldy5fd3Qud3RPdmVybGF5czt0aGlzLmxvY2tlZENvbGxlY3Rpb249ITAsdGhpcy5zY3JvbGxiYXJzLmxlbmd0''@;'; put 'put ''aD0wLHRoaXMuc2Nyb2xsYmFycy5wdXNoKGMpLGwuY2xvbmUmJnRoaXMuc2Nyb2xsYmFycy5wdXNoKGwpLHRoaXMuc2Nyb2xsYmFycy5wdXNoKGEpLGQmJnRoaXMuc2Nyb2xsYmFycy5wdXNoKGQpLGgmJmguY2xvbmUmJnRoaXMuc2Nyb2xsYmFycy5wdXNoKGgpLHRoaXMuY2xvbmVzPVtdLGMu''@;'; put 'put ''bmVlZEZ1bGxSZW5kZXImJnRoaXMuY2xvbmVzLnB1c2goYy5jbG9uZS53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlKSxsLm5lZWRGdWxsUmVuZGVyJiZ0aGlzLmNsb25lcy5wdXNoKGwuY2xvbmUud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZSksYS5uZWVkRnVsbFJlbmRlciYmdGhpcy5jbG9u''@;'; put 'put ''ZXMucHVzaChhLmNsb25lLnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUpLGQmJnRoaXMuY2xvbmVzLnB1c2goZC5jbG9uZS53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlKSxoJiZoLmNsb25lJiZ0aGlzLmNsb25lcy5wdXNoKGguY2xvbmUud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZSl9ZnVu''@;'; put 'put ''Y3Rpb24gcDV0KCl7dGhpcy5mcmVlemVPdmVybGF5cz0hMCxZbih0aGlzLmNsb25lcyxjPT57VGkoYywiaGlkZS10d2VlbiIpfSl9ZnVuY3Rpb24gZzV0KCl7dGhpcy5mcmVlemVPdmVybGF5cz0hMSxZbih0aGlzLmNsb25lcyxjPT57bG8oYywiaGlkZS10d2VlbiIpLFRpKGMsInNob3ctdHdl''@;'; put 'put ''ZW4iKX0pLHRoaXMuaG90Ll9yZWdpc3RlclRpbWVvdXQoKCk9PntZbih0aGlzLmNsb25lcyxjPT57bG8oYywic2hvdy10d2VlbiIpfSl9LDQwMCksWW4odGhpcy5zY3JvbGxiYXJzLGM9PntjLnJlZnJlc2goKSxjLnJlc2V0Rml4ZWRQb3NpdGlvbigpfSksdGhpcy5ob3Qudmlldy5fd3Qud3RP''@;'; put 'put ''dmVybGF5cy5zeW5jU2Nyb2xsV2l0aE1hc3RlcigpfWNvbnN0IEpIPSJ0cmltUm93cyI7dmFyIHU2ZT1uZXcgV2Vha1NldDtjbGFzcyBTNXQgZXh0ZW5kcyBGc3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gbTV0KGMsbCl7KGZ1bmN0aW9uIHY1dChjLGwpe2lm''@;'; put 'put ''KGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuYWRkKGMpfSh0aGlzLHU2ZSksZnVuY3Rpb24gYjV0KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiB5NXQo''@;'; put 'put ''Yyl7dmFyIGw9ZnVuY3Rpb24gXzV0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7''@;'; put 'put ''dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVj''@;'; put 'put ''dC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY30odGhpcywidHJpbW1lZFJvd3NNYXAiLG51bGwpfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBKSH1zdGF0aWMgZ2V0IFBMVUdJTl9Q''@;'; put 'put ''UklPUklUWSgpe3JldHVybiAzMzB9aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW0pIXX1lbmFibGVQbHVnaW4oKXt0aGlzLmVuYWJsZWR8fCh0aGlzLnRyaW1tZWRSb3dzTWFwPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLnJlZ2lzdGVyTWFwKCJ0cmltUm93cyIs''@;'; put 'put ''bmV3IHFFKSx0aGlzLnRyaW1tZWRSb3dzTWFwLmFkZExvY2FsSG9vaygiaW5pdCIsKCk9PmZ1bmN0aW9uIHc1dChjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJp''@;'; put 'put ''dmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9KHU2ZSx0aGlzLE01dCkuY2FsbCh0aGlzKSksc3VwZXIuZW5hYmxlUGx1Z2luKCkpfXVwZGF0ZVBsdWdpbigpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtKSF07QXJyYXkuaXNBcnJheShsKSYmdGhp''@;'; put 'put ''cy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9Pnt0aGlzLnRyaW1tZWRSb3dzTWFwLmNsZWFyKCksWW4obCxhPT57dGhpcy50cmltbWVkUm93c01hcC5zZXRWYWx1ZUF0SW5kZXgoYSwhMCl9KX0sITApLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXt0aGlzLmhvdC5yb3dJbmRl''@;'; put 'put ''eE1hcHBlci51bnJlZ2lzdGVyTWFwKCJ0cmltUm93cyIpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX1nZXRUcmltbWVkUm93cygpe3JldHVybiB0aGlzLnRyaW1tZWRSb3dzTWFwLmdldFRyaW1tZWRJbmRleGVzKCl9dHJpbVJvd3MobCl7Y29uc3QgYT10aGlzLmdldFRyaW1tZWRSb3dzKCksZD10''@;'; put 'put ''aGlzLmlzVmFsaWRDb25maWcobCk7bGV0IGg9YTtkJiYoaD1BcnJheS5mcm9tKG5ldyBTZXQoYS5jb25jYXQobCkpKSksITEhPT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlVHJpbVJvdyIsYSxoLGQpJiYoZCYmdGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9PntZbihsLHY9Pnt0aGlzLnRy''@;'; put 'put ''aW1tZWRSb3dzTWFwLnNldFZhbHVlQXRJbmRleCh2LCEwKX0pfSwhMCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyVHJpbVJvdyIsYSxoLGQsZCYmaC5sZW5ndGg+YS5sZW5ndGgpKX10cmltUm93KCl7Zm9yKHZhciBsPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkobCksZD0wO2Q8bDtk''@;'; put 'put ''KyspYVtkXT1hcmd1bWVudHNbZF07dGhpcy50cmltUm93cyhhKX11bnRyaW1Sb3dzKGwpe2NvbnN0IGE9dGhpcy5nZXRUcmltbWVkUm93cygpLGQ9dGhpcy5pc1ZhbGlkQ29uZmlnKGwpO2xldCBoPWE7Y29uc3QgZj10aGlzLnRyaW1tZWRSb3dzTWFwLmdldFZhbHVlcygpLnNsaWNlKCksdj1s''@;'; put 'put ''Lmxlbmd0aD4wO2QmJnYmJihZbihsLEQ9PntmW0RdPSExfSksaD1xdShmLChELFoscmUpPT4oWiYmRC5wdXNoKHJlKSxEKSxbXSkpLCExIT09dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVVudHJpbVJvdyIsYSxoLGQmJnYpJiYoZCYmdiYmdGhpcy50cmltbWVkUm93c01hcC5zZXRWYWx1ZXMo''@;'; put 'put ''ZiksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyVW50cmltUm93IixhLGgsZCYmdixkJiZoLmxlbmd0aDxhLmxlbmd0aCkpfXVudHJpbVJvdygpe2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGwpLGQ9MDtkPGw7ZCsrKWFbZF09YXJndW1lbnRzW2RdO3RoaXMudW50cmlt''@;'; put 'put ''Um93cyhhKX1pc1RyaW1tZWQobCl7cmV0dXJuIHRoaXMudHJpbW1lZFJvd3NNYXAuZ2V0VmFsdWVBdEluZGV4KGwpfHwhMX11bnRyaW1BbGwoKXt0aGlzLnVudHJpbVJvd3ModGhpcy5nZXRUcmltbWVkUm93cygpKX1pc1ZhbGlkQ29uZmlnKGwpe2NvbnN0IGE9dGhpcy5ob3QuY291bnRTb3Vy''@;'; put 'put ''Y2VSb3dzKCk7cmV0dXJuIGwuZXZlcnkoZD0+TnVtYmVyLmlzSW50ZWdlcihkKSYmZD49MCYmZDxhKX1kZXN0cm95KCl7c3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiBNNXQoKXtjb25zdCBjPXRoaXMuaG90LmdldFNldHRpbmdzKClbSkhdO0FycmF5LmlzQXJyYXkoYykmJnRoaXMuaG90LmJh''@;'; put 'put ''dGNoRXhlY3V0aW9uKCgpPT57WW4oYyxsPT57dGhpcy50cmltbWVkUm93c01hcC5zZXRWYWx1ZUF0SW5kZXgobCwhMCl9KX0sITApfWNsYXNzIHRme2NvbnN0cnVjdG9yKGwpeyhmdW5jdGlvbiB4NXQoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIEU1dChjKXt2YXIgbD1mdW5jdGlvbiBUNXQo''@;'; put 'put ''YyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJA''@;'; put 'put ''QHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7''@;'; put 'put ''dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfSkodGhpcywiYWN0aW9uVHlwZSIsIiIpLHRoaXMuYWN0aW9uVHlwZT1sfXVuZG8oKXt0aHJvdyBuZXcgRXJyb3IoIk5vdCBpbXBsZW1lbnRlZCIpfXJlZG8oKXt0aHJvdyBuZXcgRXJy''@;'; put 'put ''b3IoIk5vdCBpbXBsZW1lbnRlZCIpfX1mdW5jdGlvbiBRSChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gQTV0KGMpe3ZhciBsPWZ1bmN0aW9uIGs1dChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9''@;'; put 'put ''PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVy''@;'; put 'put ''KShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3Mgd2VlIGV4dGVuZHMg''@;'; put 'put ''dGZ7Y29uc3RydWN0b3IobCl7bGV0e3N0YXRlQmVmb3JlOmEscmFuZ2U6ZCx0eXBlOmgsYWxpZ25tZW50OmZ9PWw7c3VwZXIoImNlbGxfYWxpZ25tZW50IiksUUgodGhpcywic3RhdGVCZWZvcmUiLHZvaWQgMCksUUgodGhpcywicmFuZ2UiLHZvaWQgMCksUUgodGhpcywidHlwZSIsdm9pZCAw''@;'; put 'put ''KSxRSCh0aGlzLCJhbGlnbm1lbnQiLHZvaWQgMCksdGhpcy5zdGF0ZUJlZm9yZT1hLHRoaXMucmFuZ2U9ZCx0aGlzLnR5cGU9aCx0aGlzLmFsaWdubWVudD1mfXN0YXRpYyBzdGFydFJlZ2lzdGVyaW5nRXZlbnRzKGwsYSl7bC5hZGRIb29rKCJiZWZvcmVDZWxsQWxpZ25tZW50IiwoZCxoLGYs''@;'; put 'put ''dik9PnthLmRvbmUoKCk9Pm5ldyB3ZWUoe3N0YXRlQmVmb3JlOmQscmFuZ2U6aCx0eXBlOmYsYWxpZ25tZW50OnZ9KSl9KX11bmRvKGwsYSl7WW4odGhpcy5yYW5nZSxkPT57ZC5mb3JBbGwoKGgsZik9PntoPj0wJiZmPj0wJiZsLnNldENlbGxNZXRhKGgsZiwiY2xhc3NOYW1lIix0aGlzLnN0''@;'; put 'put ''YXRlQmVmb3JlW2hdW2ZdfHwiIGh0TGVmdCIpfSl9KSxsLmFkZEhvb2tPbmNlKCJhZnRlclZpZXdSZW5kZXIiLGEpLGwucmVuZGVyKCl9cmVkbyhsLGEpe0ptKHRoaXMucmFuZ2UsdGhpcy50eXBlLHRoaXMuYWxpZ25tZW50LChkLGgpPT5sLmdldENlbGxNZXRhKGQsaCksKGQsaCxmLHYpPT5s''@;'; put 'put ''LnNldENlbGxNZXRhKGQsaCxmLHYpKSxsLmFkZEhvb2tPbmNlKCJhZnRlclZpZXdSZW5kZXIiLGEpLGwucmVuZGVyKCl9fWZ1bmN0aW9uIGQ2ZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gRDV0KGMpe3ZhciBsPWZ1bmN0aW9uIEk1dChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMp''@;'; put 'put ''cmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmlt''@;'; put 'put ''aXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJh''@;'; put 'put ''YmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgQ2VlIGV4dGVuZHMgdGZ7Y29uc3RydWN0b3IobCl7bGV0e2NvbHVtbnM6YSxmaW5hbEluZGV4OmR9PWw7c3VwZXIoImNvbF9tb3ZlIiksZDZlKHRoaXMsImNvbHVtbnMiLHZvaWQgMCksZDZlKHRoaXMsImZpbmFsQ29sdW1uSW5k''@;'; put 'put ''ZXgiLHZvaWQgMCksdGhpcy5jb2x1bW5zPWEuc2xpY2UoKSx0aGlzLmZpbmFsQ29sdW1uSW5kZXg9ZH1zdGF0aWMgc3RhcnRSZWdpc3RlcmluZ0V2ZW50cyhsLGEpe2wuYWRkSG9vaygiYmVmb3JlQ29sdW1uTW92ZSIsKGQsaCk9PnshMSE9PWQmJmEuZG9uZSgoKT0+bmV3IENlZSh7Y29sdW1u''@;'; put 'put ''czpkLGZpbmFsSW5kZXg6aH0pKX0pfXVuZG8obCxhKXtjb25zdCBkPWwuZ2V0UGx1Z2luKCJtYW51YWxDb2x1bW5Nb3ZlIik7bC5hZGRIb29rT25jZSgiYWZ0ZXJWaWV3UmVuZGVyIixhKSxFUSh0aGlzLmNvbHVtbnMsdGhpcy5maW5hbENvbHVtbkluZGV4LGwuY29sdW1uSW5kZXhNYXBwZXIu''@;'; put 'put ''Z2V0TnVtYmVyT2ZJbmRleGVzKCkpLnJldmVyc2UoKS5mb3JFYWNoKGY9PntsZXR7ZnJvbTp2LHRvOk19PWY7djxNJiYoTS09MSksZC5tb3ZlQ29sdW1uKE0sdil9KSxsLnJlbmRlcigpLGwuZGVzZWxlY3RDZWxsKCksbC5zZWxlY3RDb2x1bW5zKHRoaXMuY29sdW1uc1swXSx0aGlzLmNvbHVt''@;'; put 'put ''bnNbMF0rdGhpcy5jb2x1bW5zLmxlbmd0aC0xKX1yZWRvKGwsYSl7Y29uc3QgZD1sLmdldFBsdWdpbigibWFudWFsQ29sdW1uTW92ZSIpO2wuYWRkSG9va09uY2UoImFmdGVyVmlld1JlbmRlciIsYSksZC5tb3ZlQ29sdW1ucyh0aGlzLmNvbHVtbnMuc2xpY2UoKSx0aGlzLmZpbmFsQ29sdW1u''@;'; put 'put ''SW5kZXgpLGwucmVuZGVyKCksbC5kZXNlbGVjdENlbGwoKSxsLnNlbGVjdENvbHVtbnModGhpcy5maW5hbENvbHVtbkluZGV4LHRoaXMuZmluYWxDb2x1bW5JbmRleCt0aGlzLmNvbHVtbnMubGVuZ3RoLTEpfX1mdW5jdGlvbiBoNmUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIFI1dChjKXt2''@;'; put 'put ''YXIgbD1mdW5jdGlvbiBMNXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJv''@;'; put 'put ''dyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRl''@;'; put 'put ''ZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIFNlZSBleHRlbmRzIHRme2NvbnN0cnVjdG9yKGwpe2xldHtjdXJyZW50U29ydFN0YXRlOmEsbmV3U29ydFN0YXRlOmR9PWw7c3VwZXIoImNv''@;'; put 'put ''bF9zb3J0IiksaDZlKHRoaXMsInByZXZpb3VzU29ydFN0YXRlIix2b2lkIDApLGg2ZSh0aGlzLCJuZXh0U29ydFN0YXRlIix2b2lkIDApLHRoaXMucHJldmlvdXNTb3J0U3RhdGU9YSx0aGlzLm5leHRTb3J0U3RhdGU9ZH1zdGF0aWMgc3RhcnRSZWdpc3RlcmluZ0V2ZW50cyhsLGEpe2wuYWRk''@;'; put 'put ''SG9vaygiYmVmb3JlQ29sdW1uU29ydCIsKGQsaCxmKT0+e2YmJmEuZG9uZSgoKT0+bmV3IFNlZSh7Y3VycmVudFNvcnRTdGF0ZTpkLG5ld1NvcnRTdGF0ZTpofSkpfSl9dW5kbyhsLGEpe2NvbnN0IGQ9bC5nZXRQbHVnaW4oImNvbHVtblNvcnRpbmciKSxoPWwuZ2V0UGx1Z2luKCJtdWx0aUNv''@;'; put 'put ''bHVtblNvcnRpbmciKSxmPWguaXNFbmFibGVkKCk/aDpkO3RoaXMucHJldmlvdXNTb3J0U3RhdGUubGVuZ3RoP2Yuc29ydCh0aGlzLnByZXZpb3VzU29ydFN0YXRlKTpmLmNsZWFyU29ydCgpLGEoKX1yZWRvKGwsYSl7Y29uc3QgZD1sLmdldFBsdWdpbigiY29sdW1uU29ydGluZyIpLGg9bC5n''@;'; put 'put ''ZXRQbHVnaW4oIm11bHRpQ29sdW1uU29ydGluZyIpOyhoLmlzRW5hYmxlZCgpP2g6ZCkuc29ydCh0aGlzLm5leHRTb3J0U3RhdGUpLGEoKX19ZnVuY3Rpb24gZjZlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBPNXQoYyl7dmFyIGw9ZnVuY3Rpb24gUDV0KGMsbCl7aWYoIm9iamVjdCIhPXR5''@;'; put 'put ''cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJl''@;'; put 'put ''dHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZToh''@;'; put 'put ''MCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBNZWUgZXh0ZW5kcyB0Zntjb25zdHJ1Y3RvcihsKXtsZXR7aW5kZXg6YSxhbW91bnQ6ZH09bDtzdXBlcigiaW5zZXJ0X2NvbCIpLGY2ZSh0aGlzLCJpbmRleCIsdm9pZCAwKSxmNmUodGhpcywiYW1vdW50Iix2''@;'; put 'put ''b2lkIDApLHRoaXMuaW5kZXg9YSx0aGlzLmFtb3VudD1kfXN0YXRpYyBzdGFydFJlZ2lzdGVyaW5nRXZlbnRzKGwsYSl7bC5hZGRIb29rKCJhZnRlckNyZWF0ZUNvbCIsKGQsaCxmKT0+e2EuZG9uZSgoKT0+bmV3IE1lZSh7aW5kZXg6ZCxhbW91bnQ6aH0pLGYpfSl9dW5kbyhsLGEpe2wuYWRk''@;'; put 'put ''SG9va09uY2UoImFmdGVyUmVtb3ZlQ29sIixhKSxsLmFsdGVyKCJyZW1vdmVfY29sIix0aGlzLmluZGV4LHRoaXMuYW1vdW50LCJVbmRvUmVkby51bmRvIil9cmVkbyhsLGEpe2wuYWRkSG9va09uY2UoImFmdGVyQ3JlYXRlQ29sIixhKSxsLmFsdGVyKCJpbnNlcnRfY29sX3N0YXJ0Iix0aGlz''@;'; put 'put ''LmluZGV4LHRoaXMuYW1vdW50LCJVbmRvUmVkby5yZWRvIil9fWZ1bmN0aW9uIHA2ZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gRjV0KGMpe3ZhciBsPWZ1bmN0aW9uIEg1dChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRp''@;'; put 'put ''dmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09''@;'; put 'put ''bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xh''@;'; put 'put ''c3MgeGVlIGV4dGVuZHMgdGZ7Y29uc3RydWN0b3IobCl7bGV0e2luZGV4OmEsYW1vdW50OmR9PWw7c3VwZXIoImluc2VydF9yb3ciKSxwNmUodGhpcywiaW5kZXgiLHZvaWQgMCkscDZlKHRoaXMsImFtb3VudCIsdm9pZCAwKSx0aGlzLmluZGV4PWEsdGhpcy5hbW91bnQ9ZH1zdGF0aWMgc3Rh''@;'; put 'put ''cnRSZWdpc3RlcmluZ0V2ZW50cyhsLGEpe2wuYWRkSG9vaygiYWZ0ZXJDcmVhdGVSb3ciLChkLGgsZik9PnthLmRvbmUoKCk9Pm5ldyB4ZWUoe2luZGV4OmQsYW1vdW50Omh9KSxmKX0pfXVuZG8obCxhKXtjb25zdCBkPWwuY291bnRSb3dzKCksaD1sLmdldFNldHRpbmdzKCkubWluU3BhcmVS''@;'; put 'put ''b3dzO3RoaXMuaW5kZXg+PWQmJnRoaXMuaW5kZXgtaDxkJiYodGhpcy5pbmRleC09aCksbC5hZGRIb29rT25jZSgiYWZ0ZXJSZW1vdmVSb3ciLGEpLGwuYWx0ZXIoInJlbW92ZV9yb3ciLHRoaXMuaW5kZXgsdGhpcy5hbW91bnQsIlVuZG9SZWRvLnVuZG8iKX1yZWRvKGwsYSl7bC5hZGRIb29r''@;'; put 'put ''T25jZSgiYWZ0ZXJDcmVhdGVSb3ciLGEpLGwuYWx0ZXIoImluc2VydF9yb3dfYWJvdmUiLHRoaXMuaW5kZXgsdGhpcy5hbW91bnQsIlVuZG9SZWRvLnJlZG8iKX19ZnVuY3Rpb24gZU4oYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIE41dChjKXt2YXIgbD1mdW5jdGlvbiBWNXQoYyxsKXtpZigi''@;'; put 'put ''b2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0''@;'; put 'put ''aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxl''@;'; put 'put ''bnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIEVlZSBleHRlbmRzIHRme2NvbnN0cnVjdG9yKGwpe2xldHtjaGFuZ2VzOmEsc2VsZWN0ZWQ6ZCxjb3VudENvbHM6aCxjb3VudFJvd3M6Zn09bDtzdXBlcigiY2hhbmdlIiksZU4odGhpcywi''@;'; put 'put ''Y2hhbmdlcyIsdm9pZCAwKSxlTih0aGlzLCJzZWxlY3RlZCIsdm9pZCAwKSxlTih0aGlzLCJjb3VudENvbHMiLHZvaWQgMCksZU4odGhpcywiY291bnRSb3dzIix2b2lkIDApLHRoaXMuY2hhbmdlcz1hLHRoaXMuc2VsZWN0ZWQ9ZCx0aGlzLmNvdW50Q29scz1oLHRoaXMuY291bnRSb3dzPWZ9''@;'; put 'put ''c3RhdGljIHN0YXJ0UmVnaXN0ZXJpbmdFdmVudHMobCxhKXtsLmFkZEhvb2soImJlZm9yZUNoYW5nZSIsZnVuY3Rpb24oZCxoKXtjb25zdCBmPWQmJmQubGVuZ3RoO2YmJmQuZmluZChEPT57Y29uc3RbLCxaLHJlXT1EO3JldHVybiBaIT09cmV9KSYmYS5kb25lKCgpPT57Y29uc3QgRD1kLnJl''@;'; put 'put ''ZHVjZSgocmUsY2UpPT4ocmUucHVzaChbLi4uY2VdKSxyZSksW10pO0QuZm9yRWFjaChyZT0+e3JlWzFdPWwucHJvcFRvQ29sKHJlWzFdKX0pO2NvbnN0IFo9Zj4xP3RoaXMuZ2V0U2VsZWN0ZWQoKTpbW0RbMF1bMF0sRFswXVsxXV1dO3JldHVybiBuZXcgRWVlKHtjaGFuZ2VzOkQsc2VsZWN0''@;'; put 'put ''ZWQ6Wixjb3VudENvbHM6bC5jb3VudENvbHMoKSxjb3VudFJvd3M6bC5jb3VudFJvd3MoKX0pfSxoKX0pfXVuZG8obCxhKXtjb25zdCBkPWcxKHRoaXMuY2hhbmdlcyk7Zm9yKGxldCB2PTAsTT1kLmxlbmd0aDt2PE07disrKWRbdl0uc3BsaWNlKDMsMSk7bC5hZGRIb29rT25jZSgiYWZ0ZXJD''@;'; put 'put ''aGFuZ2UiLGEpLGwuc2V0RGF0YUF0Q2VsbChkLG51bGwsbnVsbCwiVW5kb1JlZG8udW5kbyIpO2NvbnN0IGg9bC5jb3VudFJvd3MoKS10aGlzLmNvdW50Um93cztoPjAmJmwuYWx0ZXIoInJlbW92ZV9yb3ciLG51bGwsaCwiVW5kb1JlZG8udW5kbyIpO2NvbnN0IGY9bC5jb3VudENvbHMoKS10''@;'; put 'put ''aGlzLmNvdW50Q29scztmPjAmJmwuaXNDb2x1bW5Nb2RpZmljYXRpb25BbGxvd2VkKCkmJmwuYWx0ZXIoInJlbW92ZV9jb2wiLG51bGwsZiwiVW5kb1JlZG8udW5kbyIpLGwuc2Nyb2xsVG9Gb2N1c2VkQ2VsbCgpLGwuc2VsZWN0Q2VsbHModGhpcy5zZWxlY3RlZCwhMSwhMSl9cmVkbyhsLGEp''@;'; put 'put ''e2NvbnN0IGQ9ZzEodGhpcy5jaGFuZ2VzKTtmb3IobGV0IGg9MCxmPWQubGVuZ3RoO2g8ZjtoKyspZFtoXS5zcGxpY2UoMiwxKTtsLmFkZEhvb2tPbmNlKCJhZnRlckNoYW5nZSIsYSksbC5zZXREYXRhQXRDZWxsKGQsbnVsbCxudWxsLCJVbmRvUmVkby5yZWRvIiksdGhpcy5zZWxlY3RlZCYm''@;'; put 'put ''bC5zZWxlY3RDZWxscyh0aGlzLnNlbGVjdGVkLCExLCExKX19ZnVuY3Rpb24gZzZlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBCNXQoYyl7dmFyIGw9ZnVuY3Rpb24gajV0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2''@;'; put 'put ''ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1s''@;'; put 'put ''P1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFz''@;'; put 'put ''cyBUZWUgZXh0ZW5kcyB0Zntjb25zdHJ1Y3RvcihsKXtsZXR7Y29uZGl0aW9uc1N0YWNrOmEscHJldmlvdXNDb25kaXRpb25zU3RhY2s6ZH09bDtzdXBlcigiZmlsdGVyIiksZzZlKHRoaXMsImNvbmRpdGlvbnNTdGFjayIsdm9pZCAwKSxnNmUodGhpcywicHJldmlvdXNDb25kaXRpb25zU3Rh''@;'; put 'put ''Y2siLHZvaWQgMCksdGhpcy5jb25kaXRpb25zU3RhY2s9YSx0aGlzLnByZXZpb3VzQ29uZGl0aW9uc1N0YWNrPWR9c3RhdGljIHN0YXJ0UmVnaXN0ZXJpbmdFdmVudHMobCxhKXtsLmFkZEhvb2soImJlZm9yZUZpbHRlciIsKGQsaCk9PnthLmRvbmUoKCk9Pm5ldyBUZWUoe2NvbmRpdGlvbnNT''@;'; put 'put ''dGFjazpkLHByZXZpb3VzQ29uZGl0aW9uc1N0YWNrOmh9KSl9KX11bmRvKGwsYSl7Y29uc3QgZD1sLmdldFBsdWdpbigiZmlsdGVycyIpO2wuYWRkSG9va09uY2UoImFmdGVyVmlld1JlbmRlciIsYSksZC5pbXBvcnRDb25kaXRpb25zKHRoaXMucHJldmlvdXNDb25kaXRpb25zU3RhY2spLGQu''@;'; put 'put ''ZmlsdGVyKCl9cmVkbyhsLGEpe2NvbnN0IGQ9bC5nZXRQbHVnaW4oImZpbHRlcnMiKTtsLmFkZEhvb2tPbmNlKCJhZnRlclZpZXdSZW5kZXIiLGEpLGQuaW1wb3J0Q29uZGl0aW9ucyh0aGlzLmNvbmRpdGlvbnNTdGFjayksZC5maWx0ZXIoKX19Y2xhc3MgQWVlIGV4dGVuZHMgdGZ7Y29uc3Ry''@;'; put 'put ''dWN0b3IobCl7bGV0e2RhdGE6YSxjZWxsUmFuZ2U6ZH09bDtzdXBlcigibWVyZ2VfY2VsbHMiKSxmdW5jdGlvbiB6NXQoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIFU1dChjKXt2YXIgbD1mdW5jdGlvbiBaNXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBh''@;'; put 'put ''PWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIp''@;'; put 'put ''fXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJs''@;'; put 'put ''ZTohMH0pOmNbbF09YSxjfSh0aGlzLCJjZWxsUmFuZ2UiLHZvaWQgMCksdGhpcy5jZWxsUmFuZ2U9ZCx0aGlzLmRhdGE9YX1zdGF0aWMgc3RhcnRSZWdpc3RlcmluZ0V2ZW50cyhsLGEpe2wuYWRkSG9vaygiYmVmb3JlTWVyZ2VDZWxscyIsKGQsaCk9PntpZihoKXJldHVybjtjb25zdCBmPWQu''@;'; put 'put ''Z2V0VG9wU3RhcnRDb3JuZXIoKSx2PWQuZ2V0Qm90dG9tRW5kQ29ybmVyKCksTT1sLmdldERhdGEoZi5yb3csZi5jb2wsdi5yb3csdi5jb2wpO2EuZG9uZSgoKT0+bmV3IEFlZSh7ZGF0YTpNLGNlbGxSYW5nZTpkfSkpfSl9dW5kbyhsLGEpe2NvbnN0IGQ9bC5nZXRQbHVnaW4oIm1lcmdlQ2Vs''@;'; put 'put ''bHMiKTtsLmFkZEhvb2tPbmNlKCJhZnRlclZpZXdSZW5kZXIiLGEpLGQudW5tZXJnZVJhbmdlKHRoaXMuY2VsbFJhbmdlLCEwKTtjb25zdCBoPXRoaXMuY2VsbFJhbmdlLmdldFRvcFN0YXJ0Q29ybmVyKCk7bC5wb3B1bGF0ZUZyb21BcnJheShoLnJvdyxoLmNvbCx0aGlzLmRhdGEsdm9pZCAw''@;'; put 'put ''LHZvaWQgMCwiTWVyZ2VDZWxscyIpfXJlZG8obCxhKXtjb25zdCBkPWwuZ2V0UGx1Z2luKCJtZXJnZUNlbGxzIik7bC5hZGRIb29rT25jZSgiYWZ0ZXJWaWV3UmVuZGVyIixhKSxkLm1lcmdlUmFuZ2UodGhpcy5jZWxsUmFuZ2UpfX1mdW5jdGlvbiBtNmUoYyxsLGEsZCxoKXtjb25zdCBmPVsi''@;'; put 'put ''dmlzdWFsUm93IiwidmlzdWFsQ29sIiwicm93IiwiY29sIiwicHJvcCJdLHY9Zi5sZW5ndGgsTT1bXTtyZXR1cm4gR2EoZCxoLEQ9PntHYShsLGEsWj0+e2NvbnN0IHJlPWMuZ2V0Q2VsbE1ldGEoWixEKTtpZihPYmplY3Qua2V5cyhyZSkubGVuZ3RoIT09dil7Y29uc3QgY2U9T2JqZWN0LmZy''@;'; put 'put ''b21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKHJlKS5maWx0ZXIoYmU9PntsZXRbRWVdPWJlO3JldHVybiExPT09Zi5pbmNsdWRlcyhFZSl9KSk7TS5wdXNoKFtyZS52aXN1YWxSb3cscmUudmlzdWFsQ29sLGNlXSl9fSl9KSxNfWZ1bmN0aW9uIHFnKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBX''@;'; put 'put ''NXQoYyl7dmFyIGw9ZnVuY3Rpb24gWTV0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJu''@;'; put 'put ''IGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09i''@;'; put 'put ''amVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBrZWUgZXh0ZW5kcyB0Zntjb25zdHJ1Y3RvcihsKXtsZXR7aW5kZXg6YSxpbmRleGVzOmQsZGF0YTpoLGFtb3VudDpmLGhlYWRl''@;'; put 'put ''cnM6dixjb2x1bW5Qb3NpdGlvbnM6TSxyb3dQb3NpdGlvbnM6RCxmaXhlZENvbHVtbnNTdGFydDpaLHJlbW92ZWRDZWxsTWV0YXM6cmV9PWw7c3VwZXIoInJlbW92ZV9jb2wiKSxxZyh0aGlzLCJpbmRleCIsdm9pZCAwKSxxZyh0aGlzLCJpbmRleGVzIix2b2lkIDApLHFnKHRoaXMsImRhdGEi''@;'; put 'put ''LHZvaWQgMCkscWcodGhpcywiYW1vdW50Iix2b2lkIDApLHFnKHRoaXMsImhlYWRlcnMiLHZvaWQgMCkscWcodGhpcywiY29sdW1uUG9zaXRpb25zIix2b2lkIDApLHFnKHRoaXMsInJvd1Bvc2l0aW9ucyIsdm9pZCAwKSxxZyh0aGlzLCJmaXhlZENvbHVtbnNTdGFydCIsdm9pZCAwKSxxZyh0''@;'; put 'put ''aGlzLCJyZW1vdmVkQ2VsbE1ldGFzIix2b2lkIDApLHRoaXMuaW5kZXg9YSx0aGlzLmluZGV4ZXM9ZCx0aGlzLmRhdGE9aCx0aGlzLmFtb3VudD1mLHRoaXMuaGVhZGVycz12LHRoaXMuY29sdW1uUG9zaXRpb25zPU0uc2xpY2UoMCksdGhpcy5yb3dQb3NpdGlvbnM9RC5zbGljZSgwKSx0aGlz''@;'; put 'put ''LmZpeGVkQ29sdW1uc1N0YXJ0PVosdGhpcy5yZW1vdmVkQ2VsbE1ldGFzPXJlfXN0YXRpYyBzdGFydFJlZ2lzdGVyaW5nRXZlbnRzKGwsYSl7bC5hZGRIb29rKCJiZWZvcmVSZW1vdmVDb2wiLChkLGgsZix2KT0+e2EuZG9uZSgoKT0+e2NvbnN0IEQ9bC5nZXRTb3VyY2VEYXRhQXJyYXkoKSxa''@;'; put 'put ''PShsLmNvdW50Q29scygpK2QpJWwuY291bnRDb2xzKCkscmU9WitoLTEsY2U9W10sYmU9W10sRWU9W107cmV0dXJuIEdhKEQubGVuZ3RoLTEsQmU9Pntjb25zdCBxZT1bXSxydD1EW0JlXTtHYShaLHJlLHB0PT57cWUucHVzaChydFtsLnRvUGh5c2ljYWxDb2x1bW4ocHQpXSl9KSxjZS5wdXNo''@;'; put 'put ''KHFlKX0pLEdhKGgtMSxCZT0+e0VlLnB1c2gobC50b1BoeXNpY2FsQ29sdW1uKForQmUpKX0pLEFycmF5LmlzQXJyYXkobC5nZXRTZXR0aW5ncygpLmNvbEhlYWRlcnMpJiZHYShoLTEsQmU9PntiZS5wdXNoKGwuZ2V0U2V0dGluZ3MoKS5jb2xIZWFkZXJzW2wudG9QaHlzaWNhbENvbHVtbiha''@;'; put 'put ''K0JlKV18fG51bGwpfSksbmV3IGtlZSh7aW5kZXg6WixpbmRleGVzOkVlLGRhdGE6Y2UsYW1vdW50OmgsaGVhZGVyczpiZSxjb2x1bW5Qb3NpdGlvbnM6bC5jb2x1bW5JbmRleE1hcHBlci5nZXRJbmRleGVzU2VxdWVuY2UoKSxyb3dQb3NpdGlvbnM6bC5yb3dJbmRleE1hcHBlci5nZXRJbmRl''@;'; put 'put ''eGVzU2VxdWVuY2UoKSxmaXhlZENvbHVtbnNTdGFydDpsLmdldFNldHRpbmdzKCkuZml4ZWRDb2x1bW5zU3RhcnQscmVtb3ZlZENlbGxNZXRhczptNmUobCwwLGwuY291bnRSb3dzKCksWixyZSl9KX0sdil9KX11bmRvKGwsYSl7bC5nZXRTZXR0aW5ncygpLmZpeGVkQ29sdW1uc1N0YXJ0PXRo''@;'; put 'put ''aXMuZml4ZWRDb2x1bW5zU3RhcnQ7Y29uc3QgaD10aGlzLmluZGV4ZXMuc2xpY2UoMCkuc29ydCgpLGY9KHJlLGNlLGJlKT0+YmVbdGhpcy5pbmRleGVzLmluZGV4T2YoaFtjZV0pXSx2PXRoaXMuZGF0YS5sZW5ndGgsTT1bXTtmb3IobGV0IHJlPTA7cmU8djtyZSsrKU0ucHVzaCh5cyh0aGlz''@;'; put 'put ''LmRhdGFbcmVdLGYpKTtjb25zdCBEPXlzKHRoaXMuaGVhZGVycyxmKSxaPVtdO2wuY29sdW1uSW5kZXhNYXBwZXIuc2V0SW5kZXhlc1NlcXVlbmNlKHRoaXMuY29sdW1uUG9zaXRpb25zKSxsLmFsdGVyKCJpbnNlcnRfY29sX3N0YXJ0IixsLnRvVmlzdWFsQ29sdW1uKHRoaXMuaW5kZXhlc1sw''@;'; put 'put ''XSksdGhpcy5pbmRleGVzLmxlbmd0aCwiVW5kb1JlZG8udW5kbyIpLGwuYmF0Y2hFeGVjdXRpb24oKCk9PntsLnJvd0luZGV4TWFwcGVyLnNldEluZGV4ZXNTZXF1ZW5jZSh0aGlzLnJvd1Bvc2l0aW9ucyksbC5jb2x1bW5JbmRleE1hcHBlci5zZXRJbmRleGVzU2VxdWVuY2UodGhpcy5jb2x1''@;'; put 'put ''bW5Qb3NpdGlvbnMpfSwhMCksWW4obC5nZXRTb3VyY2VEYXRhQXJyYXkoKSwocmUsY2UpPT57WW4oaCwoYmUsRWUpPT57cmVbYmVdPU1bY2VdW0VlXSxaLnB1c2goW2NlLGJlLHJlW2JlXV0pfSl9KSx0eXBlb2YgdGhpcy5oZWFkZXJzPCJ1IiYmWW4oRCwocmUsY2UpPT57bC5nZXRTZXR0aW5n''@;'; put 'put ''cygpLmNvbEhlYWRlcnNbaFtjZV1dPXJlfSksdGhpcy5yZW1vdmVkQ2VsbE1ldGFzLmZvckVhY2gocmU9PntsZXRbY2UsYmUsRWVdPXJlO2wuc2V0Q2VsbE1ldGFPYmplY3QoY2UsYmUsRWUpfSksbC5hZGRIb29rT25jZSgiYWZ0ZXJWaWV3UmVuZGVyIixhKSxsLnNldFNvdXJjZURhdGFBdENl''@;'; put 'put ''bGwoWixudWxsLG51bGwsIlVuZG9SZWRvLnVuZG8iKX1yZWRvKGwsYSl7bC5hZGRIb29rT25jZSgiYWZ0ZXJSZW1vdmVDb2wiLGEpLGwuYWx0ZXIoInJlbW92ZV9jb2wiLHRoaXMuaW5kZXgsdGhpcy5hbW91bnQsIlVuZG9SZWRvLnJlZG8iKX19ZnVuY3Rpb24gd3coYyxsLGEpe3JldHVybihs''@;'; put 'put ''PWZ1bmN0aW9uIEc1dChjKXt2YXIgbD1mdW5jdGlvbiAkNXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBl''@;'; put 'put ''b2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9''@;'; put 'put ''KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIERlZSBleHRlbmRzIHRme2NvbnN0cnVjdG9yKGwpe2xldHtpbmRleDphLGRhdGE6ZCxmaXhlZFJvd3NCb3R0''@;'; put 'put ''b206aCxmaXhlZFJvd3NUb3A6Zixyb3dJbmRleGVzU2VxdWVuY2U6dixyZW1vdmVkQ2VsbE1ldGFzOk19PWw7c3VwZXIoInJlbW92ZV9yb3ciKSx3dyh0aGlzLCJpbmRleCIsdm9pZCAwKSx3dyh0aGlzLCJkYXRhIix2b2lkIDApLHd3KHRoaXMsImZpeGVkUm93c0JvdHRvbSIsdm9pZCAwKSx3''@;'; put 'put ''dyh0aGlzLCJmaXhlZFJvd3NUb3AiLHZvaWQgMCksd3codGhpcywicm93SW5kZXhlc1NlcXVlbmNlIix2b2lkIDApLHd3KHRoaXMsInJlbW92ZWRDZWxsTWV0YXMiLHZvaWQgMCksdGhpcy5pbmRleD1hLHRoaXMuZGF0YT1kLHRoaXMuZml4ZWRSb3dzQm90dG9tPWgsdGhpcy5maXhlZFJvd3NU''@;'; put 'put ''b3A9Zix0aGlzLnJvd0luZGV4ZXNTZXF1ZW5jZT12LHRoaXMucmVtb3ZlZENlbGxNZXRhcz1NfXN0YXRpYyBzdGFydFJlZ2lzdGVyaW5nRXZlbnRzKGwsYSl7bC5hZGRIb29rKCJiZWZvcmVSZW1vdmVSb3ciLChkLGgsZix2KT0+e2EuZG9uZSgoKT0+e2NvbnN0IEQ9bC50b1BoeXNpY2FsUm93''@;'; put 'put ''KGQpLFo9RCtoLTEscmU9ZzEobC5nZXRTb3VyY2VEYXRhKEQsMCxEK2gtMSxsLmNvdW50U291cmNlQ29scygpLTEpKTtyZXR1cm4gbmV3IERlZSh7aW5kZXg6RCxkYXRhOnJlLGZpeGVkUm93c0JvdHRvbTpsLmdldFNldHRpbmdzKCkuZml4ZWRSb3dzQm90dG9tLGZpeGVkUm93c1RvcDpsLmdl''@;'; put 'put ''dFNldHRpbmdzKCkuZml4ZWRSb3dzVG9wLHJvd0luZGV4ZXNTZXF1ZW5jZTpsLnJvd0luZGV4TWFwcGVyLmdldEluZGV4ZXNTZXF1ZW5jZSgpLHJlbW92ZWRDZWxsTWV0YXM6bTZlKGwsRCxaLDAsbC5jb3VudENvbHMoKS0xKX0pfSx2KX0pfXVuZG8obCxhKXtjb25zdCBkPWwuZ2V0U2V0dGlu''@;'; put 'put ''Z3MoKSxoPVtdO2QuZml4ZWRSb3dzQm90dG9tPXRoaXMuZml4ZWRSb3dzQm90dG9tLGQuZml4ZWRSb3dzVG9wPXRoaXMuZml4ZWRSb3dzVG9wLHRoaXMuZGF0YS5mb3JFYWNoKChmLHYpPT57T2JqZWN0LmtleXMoZikuZm9yRWFjaChNPT57Y29uc3QgRD1wYXJzZUludChNLDEwKTtoLnB1c2go''@;'; put 'put ''W3RoaXMuaW5kZXgrdixpc05hTihEKT9NOkQsZltNXV0pfSl9KSxsLnJvd0luZGV4TWFwcGVyLnNldEluZGV4ZXNTZXF1ZW5jZSh0aGlzLnJvd0luZGV4ZXNTZXF1ZW5jZSksbC5hbHRlcigiaW5zZXJ0X3Jvd19hYm92ZSIsbC50b1Zpc3VhbFJvdyh0aGlzLmluZGV4KSx0aGlzLmRhdGEubGVu''@;'; put 'put ''Z3RoLCJVbmRvUmVkby51bmRvIiksbC5yb3dJbmRleE1hcHBlci5zZXRJbmRleGVzU2VxdWVuY2UodGhpcy5yb3dJbmRleGVzU2VxdWVuY2UpLHRoaXMucmVtb3ZlZENlbGxNZXRhcy5mb3JFYWNoKGY9PntsZXRbdixNLERdPWY7bC5zZXRDZWxsTWV0YU9iamVjdCh2LE0sRCl9KSxsLmFkZEhv''@;'; put 'put ''b2tPbmNlKCJhZnRlclZpZXdSZW5kZXIiLGEpLGwuc2V0U291cmNlRGF0YUF0Q2VsbChoLG51bGwsbnVsbCwiVW5kb1JlZG8udW5kbyIpfXJlZG8obCxhKXtsLmFkZEhvb2tPbmNlKCJhZnRlclJlbW92ZVJvdyIsYSksbC5hbHRlcigicmVtb3ZlX3JvdyIsbC50b1Zpc3VhbFJvdyh0aGlzLmlu''@;'; put 'put ''ZGV4KSx0aGlzLmRhdGEubGVuZ3RoLCJVbmRvUmVkby5yZWRvIil9fWZ1bmN0aW9uIHY2ZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gSzV0KGMpe3ZhciBsPWZ1bmN0aW9uIHE1dChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9Qcmlt''@;'; put 'put ''aXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmci''@;'; put 'put ''PT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9''@;'; put 'put ''Y2xhc3MgSWVlIGV4dGVuZHMgdGZ7Y29uc3RydWN0b3IobCl7bGV0e3Jvd3M6YSxmaW5hbEluZGV4OmR9PWw7c3VwZXIoInJvd19tb3ZlIiksdjZlKHRoaXMsInJvd3MiLHZvaWQgMCksdjZlKHRoaXMsImZpbmFsUm93SW5kZXgiLHZvaWQgMCksdGhpcy5yb3dzPWEuc2xpY2UoKSx0aGlzLmZp''@;'; put 'put ''bmFsUm93SW5kZXg9ZH1zdGF0aWMgc3RhcnRSZWdpc3RlcmluZ0V2ZW50cyhsLGEpe2wuYWRkSG9vaygiYmVmb3JlUm93TW92ZSIsKGQsaCk9PnshMSE9PWQmJmEuZG9uZSgoKT0+bmV3IEllZSh7cm93czpkLGZpbmFsSW5kZXg6aH0pKX0pfXVuZG8obCxhKXtjb25zdCBkPWwuZ2V0UGx1Z2lu''@;'; put 'put ''KCJtYW51YWxSb3dNb3ZlIik7bC5hZGRIb29rT25jZSgiYWZ0ZXJWaWV3UmVuZGVyIixhKSxFUSh0aGlzLnJvd3MsdGhpcy5maW5hbFJvd0luZGV4LGwucm93SW5kZXhNYXBwZXIuZ2V0TnVtYmVyT2ZJbmRleGVzKCkpLnJldmVyc2UoKS5mb3JFYWNoKGY9PntsZXR7ZnJvbTp2LHRvOk19PWY7''@;'; put 'put ''djxNJiYoTS09MSksZC5tb3ZlUm93KE0sdil9KSxsLnJlbmRlcigpLGwuZGVzZWxlY3RDZWxsKCksbC5zZWxlY3RSb3dzKHRoaXMucm93c1swXSx0aGlzLnJvd3NbMF0rdGhpcy5yb3dzLmxlbmd0aC0xKX1yZWRvKGwsYSl7Y29uc3QgZD1sLmdldFBsdWdpbigibWFudWFsUm93TW92ZSIpO2wu''@;'; put 'put ''YWRkSG9va09uY2UoImFmdGVyVmlld1JlbmRlciIsYSksZC5tb3ZlUm93cyh0aGlzLnJvd3Muc2xpY2UoKSx0aGlzLmZpbmFsUm93SW5kZXgpLGwucmVuZGVyKCksbC5kZXNlbGVjdENlbGwoKSxsLnNlbGVjdFJvd3ModGhpcy5maW5hbFJvd0luZGV4LHRoaXMuZmluYWxSb3dJbmRleCt0aGlz''@;'; put 'put ''LnJvd3MubGVuZ3RoLTEpfX1jbGFzcyBSZWUgZXh0ZW5kcyB0Zntjb25zdHJ1Y3RvcihsKXtsZXR7Y2VsbFJhbmdlOmF9PWw7c3VwZXIoInVubWVyZ2VfY2VsbHMiKSxmdW5jdGlvbiBYNXQoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIEo1dChjKXt2YXIgbD1mdW5jdGlvbiBRNXQoYyxsKXtp''@;'; put 'put ''Zigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJp''@;'; put 'put ''bWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6''@;'; put 'put ''YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfSh0aGlzLCJjZWxsUmFuZ2UiLHZvaWQgMCksdGhpcy5jZWxsUmFuZ2U9YX1zdGF0aWMgc3RhcnRSZWdpc3RlcmluZ0V2ZW50cyhsLGEpe2wuYWRkSG9vaygiYWZ0ZXJVbm1lcmdlQ2VsbHMiLChk''@;'; put 'put ''LGgpPT57aHx8YS5kb25lKCgpPT5uZXcgUmVlKHtjZWxsUmFuZ2U6ZH0pKX0pfXVuZG8obCxhKXtjb25zdCBkPWwuZ2V0UGx1Z2luKCJtZXJnZUNlbGxzIik7bC5hZGRIb29rT25jZSgiYWZ0ZXJWaWV3UmVuZGVyIixhKSxkLm1lcmdlUmFuZ2UodGhpcy5jZWxsUmFuZ2UsITApfXJlZG8obCxh''@;'; put 'put ''KXtjb25zdCBkPWwuZ2V0UGx1Z2luKCJtZXJnZUNlbGxzIik7bC5hZGRIb29rT25jZSgiYWZ0ZXJWaWV3UmVuZGVyIixhKSxkLnVubWVyZ2VSYW5nZSh0aGlzLmNlbGxSYW5nZSwhMCksbC5yZW5kZXIoKX19ZnVuY3Rpb24gTGVlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBybXQoYyl7dmFy''@;'; put 'put ''IGw9ZnVuY3Rpb24gaW10KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cg''@;'; put 'put ''bmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZp''@;'; put 'put ''bmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBPZWUoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDph''@;'; put 'put ''O3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfVNhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVVbmRvIiksU2EuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyVW5kbyIpLFNhLmdldFNpbmdsZXRv''@;'; put 'put ''bigpLnJlZ2lzdGVyKCJiZWZvcmVSZWRvIiksU2EuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyUmVkbyIpO2NvbnN0IHk2ZT1uZXcgU2V0O3ZhciB0Tj1uZXcgV2Vha1NldDtjbGFzcyBzbXQgZXh0ZW5kcyBGc3tzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4idW5kb1JlZG8i''@;'; put 'put ''fXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDFlM31zdGF0aWMgZ2V0IFNFVFRJTkdfS0VZUygpe3JldHVybiEwfWNvbnN0cnVjdG9yKGwpe3N1cGVyKGwpLGZ1bmN0aW9uIHRtdChjLGwpeyhmdW5jdGlvbiBubXQoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVy''@;'; put 'put ''cm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLmFkZChjKX0odGhpcyx0TiksTGVlKHRoaXMsImRvbmVBY3Rpb25zIixbXSksTGVlKHRoaXMsInVuZG9uZUFjdGlvbnMiLFtdKSxMZWUodGhpcywiaWdu''@;'; put 'put ''b3JlTmV3QWN0aW9ucyIsITEpLGZ1bmN0aW9uIGVtdChjLGwpe1t3ZWUsQ2VlLFNlZSxNZWUseGVlLEVlZSxUZWUsQWVlLGtlZSxEZWUsSWVlLFJlZV0uZm9yRWFjaChhPT5hLnN0YXJ0UmVnaXN0ZXJpbmdFdmVudHMoYyxsKSl9KGwsdGhpcyl9aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhv''@;'; put 'put ''dC5nZXRTZXR0aW5ncygpLnVuZG99ZW5hYmxlUGx1Z2luKCl7dmFyIGw9dGhpczt0aGlzLmVuYWJsZWR8fCh0aGlzLmFkZEhvb2soImFmdGVyQ2hhbmdlIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1l''@;'; put 'put ''bnRzW2hdO3JldHVybiBPZWUodE4sbCxsbXQpLmNhbGwobCwuLi5kKX0pLHRoaXMucmVnaXN0ZXJTaG9ydGN1dHMoKSxPZWUodE4sdGhpcyxjbXQpLmNhbGwodGhpcyksc3VwZXIuZW5hYmxlUGx1Z2luKCkpfWRpc2FibGVQbHVnaW4oKXtzdXBlci5kaXNhYmxlUGx1Z2luKCksdGhpcy5jbGVh''@;'; put 'put ''cigpLHRoaXMudW5yZWdpc3RlclNob3J0Y3V0cygpLE9lZSh0Tix0aGlzLHVtdCkuY2FsbCh0aGlzKX1yZWdpc3RlclNob3J0Y3V0cygpe3RoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKS5hZGRTaG9ydGN1dHMoW3trZXlzOltbIkNvbnRyb2wvTWV0YSIs''@;'; put 'put ''InoiXV0sY2FsbGJhY2s6KCk9Pnt0aGlzLnVuZG8oKX19LHtrZXlzOltbIkNvbnRyb2wvTWV0YSIsInkiXSxbIkNvbnRyb2wvTWV0YSIsIlNoaWZ0IiwieiJdXSxjYWxsYmFjazooKT0+e3RoaXMucmVkbygpfX1dLHtydW5Pbmx5SWY6Zj0+IWYuYWx0S2V5LGdyb3VwOiJ1bmRvUmVkbyJ9KX11''@;'; put 'put ''bnJlZ2lzdGVyU2hvcnRjdXRzKCl7dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZ3JpZCIpLnJlbW92ZVNob3J0Y3V0c0J5R3JvdXAoInVuZG9SZWRvIil9ZG9uZShsLGEpe2lmKHRoaXMuaWdub3JlTmV3QWN0aW9uc3x8IlVuZG9SZWRvLnVuZG8iPT09YXx8IlVu''@;'; put 'put ''ZG9SZWRvLnJlZG8iPT09YXx8ImF1dG8iPT09YSlyZXR1cm47Y29uc3QgaD10aGlzLmRvbmVBY3Rpb25zLnNsaWNlKCk7aWYoITE9PT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlVW5kb1N0YWNrQ2hhbmdlIixoLGEpKXJldHVybjtjb25zdCB2PWwoKSxNPXRoaXMudW5kb25lQWN0aW9ucy5z''@;'; put 'put ''bGljZSgpO3RoaXMuZG9uZUFjdGlvbnMucHVzaCh2KSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJVbmRvU3RhY2tDaGFuZ2UiLGgsdGhpcy5kb25lQWN0aW9ucy5zbGljZSgpKSx0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlUmVkb1N0YWNrQ2hhbmdlIixNKSx0aGlzLnVuZG9uZUFjdGlvbnMu''@;'; put 'put ''bGVuZ3RoPTAsdGhpcy5ob3QucnVuSG9va3MoImFmdGVyUmVkb1N0YWNrQ2hhbmdlIixNLHRoaXMudW5kb25lQWN0aW9ucy5zbGljZSgpKX11bmRvKCl7aWYoIXRoaXMuaXNVbmRvQXZhaWxhYmxlKCkpcmV0dXJuO2NvbnN0IGw9dGhpcy5kb25lQWN0aW9ucy5zbGljZSgpO3RoaXMuaG90LnJ1''@;'; put 'put ''bkhvb2tzKCJiZWZvcmVVbmRvU3RhY2tDaGFuZ2UiLGwpO2NvbnN0IGE9dGhpcy5kb25lQWN0aW9ucy5wb3AoKTt0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJVbmRvU3RhY2tDaGFuZ2UiLGwsdGhpcy5kb25lQWN0aW9ucy5zbGljZSgpKTtjb25zdCBkPWcxKGEpO2lmKCExPT09dGhpcy5ob3Qu''@;'; put 'put ''cnVuSG9va3MoImJlZm9yZVVuZG8iLGQpKXJldHVybjt0aGlzLmlnbm9yZU5ld0FjdGlvbnM9ITA7Y29uc3QgZj10aGlzLnVuZG9uZUFjdGlvbnMuc2xpY2UoKTt0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlUmVkb1N0YWNrQ2hhbmdlIixmKSxhLnVuZG8odGhpcy5ob3QsKCk9Pnt0aGlzLmln''@;'; put 'put ''bm9yZU5ld0FjdGlvbnM9ITEsdGhpcy51bmRvbmVBY3Rpb25zLnB1c2goYSl9KSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJSZWRvU3RhY2tDaGFuZ2UiLGYsdGhpcy51bmRvbmVBY3Rpb25zLnNsaWNlKCkpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclVuZG8iLGQpfXJlZG8oKXtpZighdGhp''@;'; put 'put ''cy5pc1JlZG9BdmFpbGFibGUoKSlyZXR1cm47Y29uc3QgbD10aGlzLnVuZG9uZUFjdGlvbnMuc2xpY2UoKTt0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlUmVkb1N0YWNrQ2hhbmdlIixsKTtjb25zdCBhPXRoaXMudW5kb25lQWN0aW9ucy5wb3AoKTt0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJS''@;'; put 'put ''ZWRvU3RhY2tDaGFuZ2UiLGwsdGhpcy51bmRvbmVBY3Rpb25zLnNsaWNlKCkpO2NvbnN0IGQ9ZzEoYSk7aWYoITE9PT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlUmVkbyIsZCkpcmV0dXJuO3RoaXMuaWdub3JlTmV3QWN0aW9ucz0hMDtjb25zdCBmPXRoaXMuZG9uZUFjdGlvbnMuc2xpY2Uo''@;'; put 'put ''KTt0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlVW5kb1N0YWNrQ2hhbmdlIixmKSxhLnJlZG8odGhpcy5ob3QsKCk9Pnt0aGlzLmlnbm9yZU5ld0FjdGlvbnM9ITEsdGhpcy5kb25lQWN0aW9ucy5wdXNoKGEpfSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyVW5kb1N0YWNrQ2hhbmdlIixmLHRo''@;'; put 'put ''aXMuZG9uZUFjdGlvbnMuc2xpY2UoKSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyUmVkbyIsZCl9aXNVbmRvQXZhaWxhYmxlKCl7cmV0dXJuIHRoaXMuZG9uZUFjdGlvbnMubGVuZ3RoPjB9aXNSZWRvQXZhaWxhYmxlKCl7cmV0dXJuIHRoaXMudW5kb25lQWN0aW9ucy5sZW5ndGg+MH1jbGVh''@;'; put 'put ''cigpe3RoaXMuZG9uZUFjdGlvbnMubGVuZ3RoPTAsdGhpcy51bmRvbmVBY3Rpb25zLmxlbmd0aD0wfWRlc3Ryb3koKXt0aGlzLmNsZWFyKCksdGhpcy5kb25lQWN0aW9ucz1udWxsLHRoaXMudW5kb25lQWN0aW9ucz1udWxsLHN1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gbG10KGMsbCl7Imxv''@;'; put 'put ''YWREYXRhIj09PWwmJnRoaXMuY2xlYXIoKX1mdW5jdGlvbiBjbXQoKXtjb25zdCBjPWw9Pnt5NmUuaGFzKGwpfHwoaWwoZ2xgVGhlICIke2x9IiBtZXRob2QgaXMgZGVwcmVjYXRlZCBhbmQgaXQgd2lsbCBiZSByZW1vdmVkXHgyMAogICAgICAgICAgZnJvbSB0aGUgQ29yZSBBUEkgaW4gdGhl''@;'; put 'put ''IGZ1dHVyZS4gUGxlYXNlIHVzZSB0aGUgbWV0aG9kIGZyb20gdGhlIFVuZG9SZWRvIHBsdWdpblx4MjAKICAgICAgICAgIChlLmcuIFxgaG90SW5zdGFuY2UuZ2V0UGx1Z2luKCJ1bmRvUmVkbyIpLiR7bH0oKVxgKS5gKSx5NmUuYWRkKGwpKX07dGhpcy5ob3QudW5kbz0oKT0+e2MoInVuZG8i''@;'; put 'put ''KSx0aGlzLnVuZG8oKX0sdGhpcy5ob3QucmVkbz0oKT0+e2MoInJlZG8iKSx0aGlzLnJlZG8oKX0sdGhpcy5ob3QuaXNVbmRvQXZhaWxhYmxlPSgpPT4oYygiaXNVbmRvQXZhaWxhYmxlIiksdGhpcy5pc1VuZG9BdmFpbGFibGUoKSksdGhpcy5ob3QuaXNSZWRvQXZhaWxhYmxlPSgpPT4oYygi''@;'; put 'put ''aXNSZWRvQXZhaWxhYmxlIiksdGhpcy5pc1JlZG9BdmFpbGFibGUoKSksdGhpcy5ob3QuY2xlYXJVbmRvPSgpPT57YygiY2xlYXIiKSx0aGlzLmNsZWFyKCl9LHRoaXMuaG90LnVuZG9SZWRvPXRoaXN9ZnVuY3Rpb24gdW10KCl7ZGVsZXRlIHRoaXMuaG90LnVuZG8sZGVsZXRlIHRoaXMuaG90''@;'; put 'put ''LnJlZG8sZGVsZXRlIHRoaXMuaG90LmlzVW5kb0F2YWlsYWJsZSxkZWxldGUgdGhpcy5ob3QuaXNSZWRvQXZhaWxhYmxlLGRlbGV0ZSB0aGlzLmhvdC5jbGVhclVuZG8sZGVsZXRlIHRoaXMuaG90LnVuZG9SZWRvfWZ1bmN0aW9uIG5OKCl7KGZ1bmN0aW9uIE9hdCgpe0hkKGtfKSxIZChIWCks''@;'; put 'put ''SGQoQnBlKSxIZCgkcGUpLEhkKEtwZSksSGQoUlgpLEhkKHFwZSksSGQoWHBlKSxIZChRcGUpLEhkKGE5KSxIZChlNGUpfSkoKSxmdW5jdGlvbiByc3QoKXtJaChJXyksSWgob1QpLEloKCRYKSxJaChHWCksSWgocVgpLEloKFlYKSxJaChhSiksSWgob0opLEloKHNKKSxJaChBZyksSWgobEop''@;'; put 'put ''fSgpLGZ1bmN0aW9uIGRzdCgpe1k3KGNUKSxZNyhjSiksWTcoS1ApLFk3KHVKKSxZNyhxUCl9KCksZnVuY3Rpb24gQ3N0KCl7RzIoaHN0KSxHMihmc3QpLEcyKGdzdCksRzIobXN0KSxHMih2c3QpLEcyKGJzdCksRzIoeXN0KSxHMihfc3QpLEcyKElwZSksRzIod3N0KX0oKSxmdW5jdGlvbiBk''@;'; put 'put ''bXQoKXtQcyhkVCksUHModGx0KSxQcyhwVCksUHMoT2x0KSxQcyh6bHQpLFBzKGFnZSksUHMoTmN0KSxQcyh1dXQpLFBzKERGKSxQcyhJMHQpLFBzKHIxdCksUHMoZDF0KSxQcyhORiksUHMocTF0KSxQcygkaHQpLFBzKGsydCksUHMobmZ0KSxQcyhwZnQpLFBzKEVmdCksUHMoQmZ0KSxQcyhx''@;'; put 'put ''ZnQpLFBzKHYzdCksUHMoRTN0KSxQcyh1cHQpLFBzKHpwdCksUHMoR3B0KSxQcyhfNHQpLFBzKHVndCksUHMoT2d0KSxQcyhVZ3QpLFBzKHI1dCksUHMoaDV0KSxQcyhTNXQpLFBzKHNtdCl9KCl9bGV0IG5mPSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQp''@;'; put 'put ''e3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1raSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltSYV19KX19cmV0dXJuIGN9KSgpLEN3PSgoKT0+e2NsYXNzIGN7bmdPbkluaXQoKXt9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0''@;'; put 'put ''aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1raSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPUFyKHtwcm92aWRlcnM6W19XLGRoZV0saW1wb3J0czpbUmEsUmMsemMsejAsbmZdfSl9fXJldHVybiBjfSkoKSxNQT0oKCk9PntjbGFzcyBje3N0''@;'; put 'put ''YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbUmFdfSl9fXJldHVybiBjfSkoKSxfNmU9KCgpPT57Y2xhc3MgY3tzdGF0aWN7''@;'; put 'put ''dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1JhLHowLFJhLFJjXX0pfX1yZXR1cm4gY30pKCksRzk9KCgpPT57Y2xhc3MgY3tzdGF0''@;'; put 'put ''aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1JhLFJjLHowLHpjLEN3LE1BLG5mLF82ZV19KX19cmV0dXJuIGN9KSgpO2NsYXNz''@;'; put 'put ''IFBlZXtjb25zdHJ1Y3Rvcigpe3RoaXMucXVldWU9W119YWRkVG9RdWV1ZShsKXt0aGlzLnF1ZXVlLnB1c2goLi4ubCl9fXZhciBGZWUsSGVlLE5lZSxWZWUsQmVlO25OKCksZnVuY3Rpb24gaG10KGMpe2NvbnN0IGw9ISh0eXBlb2Ygd2luZG93PiJ1IikmJndpbmRvdy5qUXVlcnk7bCYmKGwu''@;'; put 'put ''Zm4uaGFuZHNvbnRhYmxlPWZ1bmN0aW9uKGEpe2NvbnN0IGQ9dGhpcy5maXJzdCgpO2xldCBmLGg9ZC5kYXRhKCJoYW5kc29udGFibGUiKTtpZigic3RyaW5nIiE9dHlwZW9mIGEpe2NvbnN0IFo9YXx8e307cmV0dXJuIGg/aC51cGRhdGVTZXR0aW5ncyhaKTooaD1uZXcgYy5Db3JlKGRbMF0s''@;'; put 'put ''WiksZC5kYXRhKCJoYW5kc29udGFibGUiLGgpLGguaW5pdCgpKSxkfWlmKGgpe2lmKCEodHlwZW9mIGhbYV08InUiKSl0aHJvdyBuZXcgRXJyb3IoYEhhbmRzb250YWJsZSBkbyBub3QgcHJvdmlkZSBhY3Rpb246ICR7YX1gKTtmb3IodmFyIHY9YXJndW1lbnRzLmxlbmd0aCxNPW5ldyBBcnJh''@;'; put 'put ''eSh2PjE/di0xOjApLEQ9MTtEPHY7RCsrKU1bRC0xXT1hcmd1bWVudHNbRF07Zj1oW2FdLmNhbGwoaCwuLi5NKSwiZGVzdHJveSI9PT1hJiZkLnJlbW92ZURhdGEoKX1yZXR1cm4gZn0pfShvcyksb3MuX19HaG9zdFRhYmxlPWRKLG9zLl9nZXRMaXN0ZW5lcnNDb3VudGVyPWZ1bmN0aW9uIEJY''@;'; put 'put ''ZSgpe3JldHVybiBZT30sb3MuX2dldFJlZ2lzdGVyZWRNYXBzQ291bnRlcj1mdW5jdGlvbiBadHQoKXtyZXR1cm4gekt9LG9zLkV2ZW50TWFuYWdlcj1qMjtjb25zdCBmbXQ9W0ksTyxVLFksRix3LF8sSyxQLGcseixMXSxwbXQ9W0IsTl07b3MuaGVscGVyPXt9LG9zLmRvbT17fSxZbihmbXQs''@;'; put 'put ''Yz0+e1luKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGMpLGw9PnsiXyIhPT1sLmNoYXJBdCgwKSYmKG9zLmhlbHBlcltsXT1jW2xdKX0pfSksWW4ocG10LGM9PntZbihPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhjKSxsPT57Il8iIT09bC5jaGFyQXQoMCkmJihvcy5kb21bbF09Y1ts''@;'; put 'put ''XSl9KX0pLG9zLmNlbGxUeXBlcz1udWxsIT09KEZlZT1vcy5jZWxsVHlwZXMpJiZ2b2lkIDAhPT1GZWU/RmVlOnt9LFluKFFudCgpLGM9Pntvcy5jZWxsVHlwZXNbY109TVgoYyl9KSxvcy5jZWxsVHlwZXMucmVnaXN0ZXJDZWxsVHlwZT1HMixvcy5jZWxsVHlwZXMuZ2V0Q2VsbFR5cGU9TVgs''@;'; put 'put ''b3MuZWRpdG9ycz1udWxsIT09KEhlZT1vcy5lZGl0b3JzKSYmdm9pZCAwIT09SGVlP0hlZTp7fSxZbihMWGUoKSxjPT57b3MuZWRpdG9yc1tgJHtwMShjKX1FZGl0b3JgXT1XTyhjKX0pLG9zLmVkaXRvcnMucmVnaXN0ZXJFZGl0b3I9SGQsb3MuZWRpdG9ycy5nZXRFZGl0b3I9V08sb3MucmVu''@;'; put 'put ''ZGVyZXJzPW51bGwhPT0oTmVlPW9zLnJlbmRlcmVycykmJnZvaWQgMCE9PU5lZT9OZWU6e30sWW4oZEplKCksYz0+e2NvbnN0IGw9UU8oYyk7ImJhc2UiPT09YyYmKG9zLnJlbmRlcmVycy5jZWxsRGVjb3JhdG9yPWwpLG9zLnJlbmRlcmVyc1tgJHtwMShjKX1SZW5kZXJlcmBdPWx9KSxvcy5y''@;'; put 'put ''ZW5kZXJlcnMucmVnaXN0ZXJSZW5kZXJlcj1JaCxvcy5yZW5kZXJlcnMuZ2V0UmVuZGVyZXI9UU8sb3MudmFsaWRhdG9ycz1udWxsIT09KFZlZT1vcy52YWxpZGF0b3JzKSYmdm9pZCAwIT09VmVlP1ZlZTp7fSxZbihwSmUoKSxjPT57b3MudmFsaWRhdG9yc1tgJHtwMShjKX1WYWxpZGF0b3Jg''@;'; put 'put ''XT1ySyhjKX0pLG9zLnZhbGlkYXRvcnMucmVnaXN0ZXJWYWxpZGF0b3I9WTcsb3MudmFsaWRhdG9ycy5nZXRWYWxpZGF0b3I9ckssb3MucGx1Z2lucz1udWxsIT09KEJlZT1vcy5wbHVnaW5zKSYmdm9pZCAwIT09QmVlP0JlZTp7fSxZbihuSygpLGM9Pntvcy5wbHVnaW5zW2NdPUlFKGMpfSks''@;'; put 'put ''b3MucGx1Z2luc1tgJHtwMShGcy5QTFVHSU5fS0VZKX1QbHVnaW5gXT1Gcyxvcy5wbHVnaW5zLnJlZ2lzdGVyUGx1Z2luPVBzLG9zLnBsdWdpbnMuZ2V0UGx1Z2luPUlFO2NvbnN0IGplZT1vcyx6ZWU9KGMsbCxhKT0+e2ZvcihsZXQgZCBvZiBjKXtjb25zdCBoPWwuZmluZCh2PT52LmRhdGE9''@;'; put 'put ''PT1kLk5BTUUpLGY9YS52YXJzW2QuTkFNRV07ZiYmKGQuVFlQRT1bIkRBVEUiLCJEQVRFVElNRSIsIlRJTUUiXS5pbmNsdWRlcyhkLkREVFlQRSk/Im51bSI6Zi50eXBlKSxoJiZkLkRFU0MmJihoLmRlc2M9ZC5ERVNDKSxoJiZmLmxlbmd0aCYmKGgubGVuZ3RoPXBhcnNlSW50KGYubGVuZ3Ro''@;'; put 'put ''KSksaCYmZC5DTFNfUlVMRSYmKGguY2xzUnVsZT1kLkNMU19SVUxFKX1yZXR1cm4gbH07ZnVuY3Rpb24gVWVlKGMsbCl7aWYobnVsbD09Y3x8IWlzTmFOKGMpJiZpc0Zpbml0ZShjKSlyZXR1cm4gbCYmbCghMCksITA7Y29uc3QgYT0oMCxnZy5pc1NwZWNpYWxNaXNzaW5nKShjKTtyZXR1cm4g''@;'; put 'put ''bCYmbChhKSxhfWNvbnN0IHc2ZT17Q0FTRTooYyxsKT0+e3N3aXRjaChsKXtjYXNlIlVQQ0FTRSI6cmV0dXJuISFbdm9pZCAwLG51bGxdLmluY2x1ZGVzKGMpfHwic3RyaW5nIj09dHlwZW9mIGMmJmMudG9TdHJpbmcoKT09PWMudG9TdHJpbmcoKS50b1VwcGVyQ2FzZSgpO2Nhc2UiTE9XQ0FT''@;'; put 'put ''RSI6cmV0dXJuISFbdm9pZCAwLG51bGxdLmluY2x1ZGVzKGMpfHwic3RyaW5nIj09dHlwZW9mIGMmJmMudG9TdHJpbmcoKT09PWMudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpfXJldHVybiEwfSxNSU5WQUw6KGMsbCk9Pntjb25zdCBhPVVlZShjKSxkPXBhcnNlRmxvYXQoYyk7cmV0dXJuKCFh''@;'; put 'put ''fHwhaXNOYU4oZCkpJiZkPj1OdW1iZXIobC50b1N0cmluZygpKX0sTUFYVkFMOihjLGwpPT57Y29uc3QgYT1VZWUoYyksZD1wYXJzZUZsb2F0KGMpO3JldHVybiEoIWF8fCFpc05hTihkKSl8fGQ8PU51bWJlcihsLnRvU3RyaW5nKCkpfSxOT1ROVUxMOihjLGwpPT5udWxsIT1jJiZjLnRvU3Ry''@;'; put 'put ''aW5nKCkubGVuZ3RoPjB9O3ZhciBaZWU9eSg3ODM3NSk7Y2xhc3MgeW10IGV4dGVuZHMgamVlLmVkaXRvcnMuQXV0b2NvbXBsZXRlRWRpdG9ye2NvbnN0cnVjdG9yKGwpe3N1cGVyKGwpfWNyZWF0ZUVsZW1lbnRzKCl7c3VwZXIuY3JlYXRlRWxlbWVudHMoKX1vcGVuKGwpe3N1cGVyLm9wZW4o''@;'; put 'put ''bCksdGhpcy5pc0NlbGxOdW1lcmljKCk/dGhpcy5odENvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCJudW1lcmljTGlzdGJveCIpOnRoaXMuaHRDb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZSgibnVtZXJpY0xpc3Rib3giKX1pc0NlbGxOdW1lcmljKCl7cmV0dXJuIHRoaXMuY2VsbFByb3BlcnRp''@;'; put 'put ''ZXM/LmNsYXNzTmFtZT8uaW5jbHVkZXMoImh0TnVtZXJpYyIpfX1jbGFzcyBDNmV7Y29uc3RydWN0b3IobCxhLGQsaCxmLHYpe3RoaXMucnVsZXM9W10sdGhpcy5kcXJ1bGVzPVtdLHRoaXMuZHFkYXRhPVtdLHRoaXMuaGlkZGVuQ29sdW1ucz1bXSx0aGlzLnByaW1hcnlLZXlzPVtdLHRoaXMu''@;'; put 'put ''ZXhlY3V0ZUhvdFZhbGlkYXRvcj0oTSxELFopPT57Y29uc3QgcmU9ey4uLk0sdmFsaWRhdG9yOnZvaWQgMCxjb3JyZWN0Rm9ybWF0OiExLHJvdzowLGNvbDowLGluc3RhbmNlOm5ldyBqZWUoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iikse30pLHZpc3VhbFJvdzowLHZpc3VhbENvbDow''@;'; put 'put ''LHByb3A6MH07bnVsbD09RCYmKEQ9IiIpLE0mJk0udmFsaWRhdG9yJiYiZnVuY3Rpb24iPT10eXBlb2YgTS52YWxpZGF0b3I/TS52YWxpZGF0b3IuY2FsbChyZSxELGNlPT57WiYmWihjZSl9KTpaJiZaKCExKX0sdGhpcy5yZWdpc3RlckN1c3RvbUVkaXRvcnMoKSx0aGlzLnNhc3BhcmFtcz1s''@;'; put 'put ''LHRoaXMuaG90SW5zdGFuY2U9dix0aGlzLnJ1bGVzPShjPT57dHJ5e3JldHVybiBKU09OLnBhcnNlKGBbJHtjfV1gKX1jYXRjaHtyZXR1cm5bXX19KShsLkNPTFRZUEUpLHRoaXMucnVsZXM9emVlKGQsdGhpcy5ydWxlcyxhKSx0aGlzLnJ1bGVzPShjPT57aWYoIVplZVt3aW5kb3cubmF2aWdh''@;'; put 'put ''dG9yLmxhbmd1YWdlXSlyZXR1cm4gYztmb3IobGV0IGEgb2YgYykibnVtZXJpYyI9PT1hLnR5cGUmJihhLm51bWVyaWNGb3JtYXQ9e3BhdHRlcm46IjAsMCIsY3VsdHVyZTp3aW5kb3cubmF2aWdhdG9yLmxhbmd1YWdlfSk7cmV0dXJuIGN9KSh0aGlzLnJ1bGVzKSx0aGlzLmRxcnVsZXM9aCx0''@;'; put 'put ''aGlzLmRxZGF0YT1mLHRoaXMucHJpbWFyeUtleXM9bC5QSy5zcGxpdCgiICIpLHRoaXMudXBkYXRlRHFEYXRhKCksdGhpcy5zZXR1cFZhbGlkYXRpb25zKCl9cmVnaXN0ZXJDdXN0b21FZGl0b3JzKCl7amVlLmVkaXRvcnMucmVnaXN0ZXJFZGl0b3IoImF1dG9jb21wbGV0ZS5jdXN0b20iLHlt''@;'; put 'put ''dCl9Z2V0UnVsZXMoKXtyZXR1cm4gdGhpcy5ydWxlc31nZXRSdWxlKGwpe2NvbnN0IGE9dGhpcy5nZXRSdWxlSW5kZXgobCk7cmV0dXJuIHRoaXMucnVsZXNbYV19Z2V0SGlkZGVuQ29sdW1ucygpe3JldHVybiB0aGlzLmhpZGRlbkNvbHVtbnN9dXBkYXRlUnVsZShsLGEpe2xldCBkPXRoaXMu''@;'; put 'put ''Z2V0UnVsZUluZGV4KGwpO3RoaXMucnVsZXNbZF09ey4uLnRoaXMucnVsZXNbZF0sLi4uYX19cmVtb3ZlUnVsZShsKXtjb25zdCBhPXRoaXMuZ2V0UnVsZUluZGV4KGwpO3RoaXMucnVsZXMuc3BsaWNlKGEsMSl9Z2V0RHFEZXRhaWxzKGwpe3JldHVybiBsP3RoaXMuZHFydWxlcy5maWx0ZXIo''@;'; put 'put ''YT0+YS5CQVNFX0NPTD09PWwpOnRoaXMuZHFydWxlc31pc0RxQ29sKGwpe3JldHVybiEhdGhpcy5kcXJ1bGVzLmZpbmQoYT0+YS5CQVNFX0NPTD09PWwpfWhhc0RxUnVsZXMobCxhLGQ9ITEpe3JldHVybiBkP3RoaXMuZHFydWxlcy5maWx0ZXIoaD0+aC5CQVNFX0NPTD09PWwmJmEuaW5jbHVk''@;'; put 'put ''ZXMoaC5SVUxFX1RZUEUpKS5sZW5ndGg9PT1hLmxlbmd0aDohIXRoaXMuZHFydWxlcy5maW5kKGg9PmguQkFTRV9DT0w9PT1sJiZhLmluY2x1ZGVzKGguUlVMRV9UWVBFKSl9Z2V0RHFEcm9wZG93blNvdXJjZShsKXtsZXQgYT1bXTtyZXR1cm4gdGhpcy5kcXJ1bGVzLmZvckVhY2goZD0+e2Qu''@;'; put 'put ''QkFTRV9DT0wudG9TdHJpbmcoKT09PWwuZGF0YSYmbC5kYXRhLnRvU3RyaW5nKCkmJlsiSEFSRFNFTEVDVCIsIlNPRlRTRUxFQ1QiLCJIQVJEU0VMRUNUX0hPT0siLCJTT0ZUU0VMRUNUX0hPT0siXS5pbmNsdWRlcyhkLlJVTEVfVFlQRS50b1N0cmluZygpKSYmdGhpcy5kcWRhdGEuZmlsdGVy''@;'; put 'put ''KGg9PmguQkFTRV9DT0w9PT1kLkJBU0VfQ09MKS5mb3JFYWNoKGg9PnthLnB1c2gobC50eXBlJiYibnVtZXJpYyI9PT1sLnR5cGU/TnVtYmVyKGguUlVMRV9EQVRBKTpoLlJVTEVfREFUQSl9KX0pLGF9dXBkYXRlRHFEYXRhKCl7dGhpcy5kcWRhdGEubGVuZ3RoPjAmJihjPT57Y29uc3QgbD1b''@;'; put 'put ''XTtyZXR1cm4gdGhpcy5kcWRhdGEuZm9yRWFjaChhPT57bC5pbmNsdWRlcyhhLkJBU0VfQ09MKXx8bC5wdXNoKGEuQkFTRV9DT0wpfSksbH0pKCkuZm9yRWFjaChhPT57bGV0IGQ9ITE7dGhpcy5kcXJ1bGVzLmxlbmd0aD4wJiZ0aGlzLmRxcnVsZXMuZm9yRWFjaChoPT57aC5CQVNFX0NPTD09''@;'; put 'put ''PWEmJigiU09GVFNFTEVDVCI9PT1oLlJVTEVfVFlQRXx8IkhBUkRTRUxFQ1QiPT09aC5SVUxFX1RZUEUpJiYoZD0hMCl9KSxkfHx0aGlzLmRxcnVsZXMucHVzaCh7QkFTRV9DT0w6YSxSVUxFX1RZUEU6IlNPRlRTRUxFQ1QiLFJVTEVfVkFMVUU6YSxYOjF9KX0pfXNldHVwVmFsaWRhdGlvbnMo''@;'; put 'put ''KXtmb3IobGV0IGw9MDtsPHRoaXMucnVsZXMubGVuZ3RoO2wrKyl7Y29uc3QgYT10aGlzLnJ1bGVzW2xdLmRhdGF8fCIiO2lmKCJfX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX18iIT09YSl7aWYodGhpcy5pc0RxQ29sKGEpKXtsZXQgaD10aGlzLmdldERxRHJvcGRvd25Tb3VyY2UodGhp''@;'; put 'put ''cy5ydWxlc1tsXSk7aC5sZW5ndGg+MCYmKHRoaXMucnVsZXNbbF0uc291cmNlPWgsdGhpcy5ydWxlc1tsXS50eXBlPSJhdXRvY29tcGxldGUiLHRoaXMucnVsZXNbbF0uZWRpdG9yPSJhdXRvY29tcGxldGUuY3VzdG9tIix0aGlzLnJ1bGVzW2xdLmZpbHRlcj0hMSksdGhpcy5oYXNEcVJ1bGVz''@;'; put 'put ''KGEsWyJTT0ZUU0VMRUNUIl0pJiYodGhpcy5ydWxlc1tsXS5zdHJpY3Q9ITEpLHRoaXMuaGFzRHFSdWxlcyhhLFsiSEFSRFNFTEVDVCJdKSYmKHRoaXMucnVsZXNbbF0uc3RyaWN0PSEwKSx0aGlzLmhhc0RxUnVsZXMoYSxbIlNPRlRTRUxFQ1RfSE9PSyJdKSYmKHRoaXMucnVsZXNbbF0uc3Ry''@;'; put 'put ''aWN0PSExKSx0aGlzLmhhc0RxUnVsZXMoYSxbIkhBUkRTRUxFQ1RfSE9PSyJdKSYmKHRoaXMucnVsZXNbbF0uc3RyaWN0PSEwKSx0aGlzLmhhc0RxUnVsZXMoYSxbIk5PVE5VTEwiXSkmJih0aGlzLnJ1bGVzW2xdLmFsbG93RW1wdHk9ITEpfSJ0cnVlIj09PXRoaXMucnVsZXNbbF0uY29ycmVj''@;'; put 'put ''dEZvcm1hdCYmKHRoaXMucnVsZXNbbF0uY29ycmVjdEZvcm1hdD0hMCksdGhpcy5zZXREZWZhdWx0VmFsaWRhdG9yKHRoaXMsbCksdGhpcy5zZXRDb2x1bW5MZXZlbFNlY3VyaXR5KGwpfX10aGlzLnNhc3BhcmFtcz8uQ0xTX0ZMQUcmJnRoaXMuaGlkZGVuQ29sdW1ucy5wdXNoKDApfXNldERl''@;'; put 'put ''ZmF1bHRWYWxpZGF0b3IobCxhKXt0aGlzLnJ1bGVzW2FdLnZhbGlkYXRvcj1mdW5jdGlvbihkLGgpe2NvbnN0IGY9bC5ydWxlc1thXS5kYXRhPy50b1N0cmluZygpLHY9bC5ydWxlc1thXS50eXBlfHwiIjtsZXQgTT1udWxsO3JldHVybiJhdXRvY29tcGxldGUiIT09dGhpcy5lZGl0b3ImJiJh''@;'; put 'put ''dXRvY29tcGxldGUuY3VzdG9tIiE9PXRoaXMuZWRpdG9yfHwobC5nZXRIYW5kc29udGFibGVWYWxpZGF0b3IoImF1dG9jb21wbGV0ZSIpLmNhbGwodGhpcyxkLEQ9PntNPUR9KSxNKT8obC5nZXRIYW5kc29udGFibGVWYWxpZGF0b3IodikuY2FsbCh0aGlzLGQsRD0+e009RH0pLE0/bC5sZW5n''@;'; put 'put ''dGhDaGVjayhkLGwucnVsZXNbYV0ubGVuZ3RoLHYpP2wuaXNEcUNvbChmfHwiIikmJiEoKGMsbCk9Pntmb3IobGV0IGEgb2YgYylpZih3NmVbYS5SVUxFX1RZUEVdJiYhdzZlW2EuUlVMRV9UWVBFXShsLGEuUlVMRV9WQUxVRSkpcmV0dXJuIGNvbnNvbGUud2FybihgRFEgSW52YWxpZCBSZWFz''@;'; put 'put ''b246ICR7YS5SVUxFX1RZUEV9XG5WYWx1ZTogJHtsfSlcblJ1bGUgVmFsdWU6ICR7YS5SVUxFX1ZBTFVFLmxlbmd0aD4wJiYiICIhPT1hLlJVTEVfVkFMVUU/YS5SVUxFX1ZBTFVFOiJOb3QgZGVmaW5lZCJ9YCksITE7cmV0dXJuITB9KShsLmdldERxRGV0YWlscyhmfHwiIiksZCk/KGNvbnNv''@;'; put 'put ''bGUud2FybihgRFEgVmFsaWRhdGlvbiAtIGludmFsaWQgKFZhbHVlOiAke2R9KWApLHZvaWQgaCghMSkpOnZvaWQgaCghMCk6KGNvbnNvbGUud2FybihgTGVuZ3RoIFZhbGlkYXRpb24gLSBpbnZhbGlkIChWYWx1ZTogJHtkfSlgKSx2b2lkIGgoITEpKTooY29uc29sZS53YXJuKGBIT1QgTmF0''@;'; put 'put ''aXZlIFZhbGlkYXRpb24gLSBpbnZhbGlkIChWYWx1ZTogJHtkfSlgKSx2b2lkIGgoITEpKSk6KGNvbnNvbGUud2FybihgSE9UIE5hdGl2ZSBWYWxpZGF0aW9uIChhdXRvY29tcGxldGUpIC0gaW52YWxpZCAoVmFsdWU6ICR7ZH0pYCksdm9pZCBoKCExKSl9fWxlbmd0aENoZWNrKGwsYSxkKXtp''@;'; put 'put ''ZigoMCxnZy5pc1NwZWNpYWxNaXNzaW5nKShsKXx8bnVsbD09bHx8bnVsbD09YSlyZXR1cm4hMDtpZigibnVtZXJpYyI9PT1kKXtpZig4PT09YSlyZXR1cm4hMDtpZihhPDN8fGE+OHx8IU51bWJlci5pc0ludGVnZXIoYSkpcmV0dXJuIGNvbnNvbGUud2FybigiaW52YWxpZCBsZW5ndGggZnJv''@;'; put 'put ''bSBTQVMsIHJ1bGUgbGVuZ3RoIGNhbiBvbmx5IGJlIGFuIGludGVnZXIgYmV0d2VlbiAzLTgiKSwhMTtjb25zdCBoPU51bWJlcihsKT09PWwmJmwlMSE9MDtpZihhPDgmJmgpcmV0dXJuIGNvbnNvbGUud2FybigicmVkdWNlZCBsZW5ndGggbnVtZXJpY3MgY2Fubm90IGNvbnRhaW4gZGVjaW1h''@;'; put 'put ''bHMgZWxzZSBwcmVjaXNpb24gd2lsbCBiZSBhZmZlY3RlZCIpLCExO3N3aXRjaChhKXtjYXNlIDM6cmV0dXJuIGw8PTgxOTI7Y2FzZSA0OnJldHVybiBsPD0yMDk3MTUyO2Nhc2UgNTpyZXR1cm4gbDw9NTM2ODcwOTEyO2Nhc2UgNjpyZXR1cm4gbDw9MTM3NDM4OTUzNDcyO2Nhc2UgNzpyZXR1''@;'; put 'put ''cm4gbDw9MzUxODQzNzIwODg4MzJ9fXJldHVybiBsLnRvU3RyaW5nKCkubGVuZ3RoPD1hfWdldEhhbmRzb250YWJsZVZhbGlkYXRvcihsKXtzd2l0Y2gobCl7Y2FzZSJhdXRvY29tcGxldGUiOnJldHVybiBjVDtjYXNlIm51bWVyaWMiOnJldHVybiBVZWU7Y2FzZSJkYXRlIjpyZXR1cm4gS1A7''@;'; put 'put ''Y2FzZSJ0aW1lIjpyZXR1cm4gcVA7ZGVmYXVsdDpyZXR1cm4oYSxkKT0+ZD9kKCEwKTpudWxsfX1nZXRSdWxlSW5kZXgobCl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBsP2w6dGhpcy5ydWxlcy5maW5kSW5kZXgoYT0+YS5kYXRhPT09bCl9c2V0Q29sdW1uTGV2ZWxTZWN1cml0eShsKXtpZigh''@;'; put 'put ''dGhpcy5zYXNwYXJhbXM/LkNMU19GTEFHKXJldHVybjtjb25zdCBhPXRoaXMucnVsZXNbbF07aWYodGhpcy5wcmltYXJ5S2V5cy5pbmNsdWRlcyhhLmRhdGEpJiYoYS5jbHNSdWxlPSJSRUFEIiksIkhJREUiPT09YS5jbHNSdWxlJiZ0aGlzLmhpZGRlbkNvbHVtbnMucHVzaChsKSwiUkVBRCI9''@;'; put 'put ''PT1hLmNsc1J1bGUmJihhLnJlYWRPbmx5PSEwKSwiRURJVCI9PT1hLmNsc1J1bGUpe2EucmVhZE9ubHk9ITE7Y29uc3QgZD10aGlzLmhpZGRlbkNvbHVtbnMuaW5kZXhPZihsKTt0aGlzLmhpZGRlbkNvbHVtbnMuc3BsaWNlKGQsMSl9fX1jb25zdCByTj17bnVtZXJpYzoiIixkZWZhdWx0OiIi''@;'; put 'put ''fSxfbXQ9KGMsbCk9PmM/ImF1dG9jb21wbGV0ZSI9PT1jP2wmJmwuc291cmNlP2wuc291cmNlWzBdOltdOnJOLmhhc093blByb3BlcnR5KGMpP3JOW2NdOnJOLmRlZmF1bHQ6ck4uZGVmYXVsdCxXZWU9Yz0+bmV3IERhdGUoTWF0aC5yb3VuZCg4NjQwMCooYy0yNTU2OSkqMWUzKSksQ210PShj''@;'; put 'put ''LGwsYSxkLGgsZix2KT0+KEdlZShsKSxsLmlubmVySFRNTD1gJHtmP2YudG9TdHJpbmcoKToiIn0gPGNkcy1pY29uIHNoYXBlPSJleGNsYW1hdGlvbi10cmlhbmdsZSIgc3RhdHVzPSJ3YXJuaW5nIj48L2Nkcy1pY29uPmAsbCksWWVlPShjLGwsYSxkLGgsZix2KT0+KEdlZShsKSxsLmlubmVy''@;'; put 'put ''SFRNTD1mfHwiIixsKSxTbXQ9KGMsbCxhLGQsaCxmLHYpPT4oR2VlKGwpLGwuaW5uZXJIVE1MPWAke2Y/Zi50b1N0cmluZygpOiIifSA8c3BhbiBjbGFzcz0ic3Bpbm5lciBzcGlubmVyLXNtIHZlcnRpY2FsLWFsaWduLW1pZGRsZSI+PC9zcGFuPmAsbCksR2VlPWM9PntjLmNsYXNzTGlzdC5j''@;'; put 'put ''b250YWlucygiaHREYXJrIil8fGMuY2xhc3NMaXN0LmFkZCgiaHREYXJrIil9LFM2ZT1jPT57bGV0IGw9KCIwIitjLmdldFVUQ0hvdXJzKCkpLnNsaWNlKC0yKSsiOiI7cmV0dXJuIGw9bCsoIjAiK2MuZ2V0VVRDTWludXRlcygpKS5zbGljZSgtMikrIjoiLGwrPSgiMCIrYy5nZXRVVENTZWNv''@;'; put 'put ''bmRzKCkpLnNsaWNlKC0yKSxsfSwkZWU9Yz0+Yy5nZXRGdWxsWWVhcigpKyItIisoIjAiKyhjLmdldE1vbnRoKCkrMSkpLnNsaWNlKC0yKSsiLSIrKCIwIitjLmdldERhdGUoKSkuc2xpY2UoLTIpLEtlZT1jPT4hIS9eLXswLDF9XGQrJC8udGVzdChjKSxNNmU9Yz0+ISEvXlxkK1wuXGQrJC8u''@;'; put 'put ''dGVzdChjKSxxZWU9KGMsbCk9Pm5ldyBGaWxlKFtjXSxsLHtsYXN0TW9kaWZpZWQ6KG5ldyBEYXRlKS5nZXRUaW1lKCl9KTt2YXIgRHU9eSg2MzU3OCkseDZlPXkoOTQyNDgpLEU2ZT15KDgzODM4KTtjbGFzcyBUNmV7Y29uc3RydWN0b3IobCl7dGhpcy5saWNlbmNlU3RhdGU9bC5saWNlbmNl''@;'; put 'put ''U3RhdGV9cGFyc2VTcHJlYWRzaGVldEZpbGUobCxhLGQsaCl7dmFyIGY9dGhpcztyZXR1cm4gbmV3IFByb21pc2UoKHYsTSk9Pntjb25zdCBEPWwudXBsb2FkZXJ8fG5ldyBQZWU7aWYobC53b3JrYm9vayl0aGlzLnBhcnNlRXhjZWxGaWxlKGwsbC53b3JrYm9vayxELGgpLnRoZW4oWj0+e3Yo''@;'; put 'put ''Wil9KS5jYXRjaChaPT57TShaKX0pO2Vsc2V7Y29uc3QgcmU9bC5maWxlO2wuZW5jb2Rpbmd8fChsLmVuY29kaW5nPSJVVEYtOCIpLGQmJmQoYExvYWRpbmcgJHtyZS5uYW1lfSBpbnRvIHRoZSBicm93c2VyYCk7bGV0IGNlPXJlLm5hbWUuc2xpY2UocmUubmFtZS5sYXN0SW5kZXhPZigiLiIp''@;'; put 'put ''KzEscmUubmFtZS5sYXN0SW5kZXhPZigiLiIpKzQpO2lmKCJ4bHMiIT09Y2UudG9Mb3dlckNhc2UoKSl7aWYoImNzdiI9PT1jZS50b0xvd2VyQ2FzZSgpKXJldHVybiB0aGlzLnBhcnNlQ3N2RmlsZShsLEQsY2UpLnRoZW4oYmU9PnYoYmUpKS5jYXRjaChiZT0+TShiZSkpO3tsZXQgYmU9J0lu''@;'; put 'put ''dmFsaWQgZmlsZSB0eXBlICI8Yj4nK2wuZmlsZS5uYW1lKyc8L2I+Ii4gUGxlYXNlIHVwbG9hZCBjc3Ygb3IgZXhjZWwgZmlsZS4nO3JldHVybiBELnF1ZXVlLnBvcCgpLE0oYmUpfX17bGV0IGJlPW5ldyBGaWxlUmVhZGVyO2JlLm9ubG9hZD1mdW5jdGlvbigpe3ZhciBCZT1lZShmdW5jdGlv''@;'; put 'put ''bioocWUpe2NvbnN0IHJ0PXlpZWxkIGYueHNseFN0YXJ0UmVhZGluZyhxZSxhLGwucGFzc3dvcmQpO2lmKCFydClyZXR1cm4gTSgiTm8gd29ya2Jvb2sgZm91bmQuIik7Zi5wYXJzZUV4Y2VsRmlsZShsLHJ0LEQsaCkudGhlbihwdD0+e3YocHQpfSkuY2F0Y2gocHQ9PntNKHB0KX0pfSk7cmV0''@;'; put 'put ''dXJuIGZ1bmN0aW9uKHFlKXtyZXR1cm4gQmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSxiZS5yZWFkQXNBcnJheUJ1ZmZlcihyZSl9fX0pfXBhcnNlRXhjZWxGaWxlKGwsYSxkLGgpe3JldHVybiBuZXcgUHJvbWlzZSgoZix2KT0+e2xldCBNPSExLEQ9W107Y29uc3QgWj1bIl9fX19fREVM''@;'; put 'put ''RVRFX19USElTX19SRUNPUkRfX19fXyIsLi4ubC5oZWFkZXJBcnJheV0scmU9dGhpcy5zZWFyY2hEYXRhSW5FeGNlbChhLGwpO2xldCBjZT1bXTtpZihyZS5mb3VuZD8oTT0hMCxjZT1yZS5mb3VuZC5hcnJheURhdGEscmUuZm91bmQuaGVhZGVycy5pbmNsdWRlcygiX19fX19kZWxldGVfX3Ro''@;'; put 'put ''aXNfX3JlY29yZF9fX19fIil8fChjZT1jZS5tYXAoQmU9PihCZS51bnNoaWZ0KHt2OiIifSksQmUpKSksaCYmaChgU2hlZXQ6ICR7cmUuZm91bmQuc2hlZXROYW1lfVxuUmFuZ2U6ICR7cmUuZm91bmQuc3RhcnRBZGRyZXNzfToke3JlLmZvdW5kLmVuZEFkZHJlc3N9YCkpOkQ9cmUubWlzc2lu''@;'; put 'put ''Z3x8W10sRC5sZW5ndGg+MCl7bGV0IEJlPUQubWFwKHFlPT5gU2hlZXQ6ICR7cWUuc2hlZXROYW1lfS5cbk1pc3NpbmcgY29sdW1uczogJHtxZS5taXNzaW5nSGVhZGVycy5qb2luKCIsIil9YCkuam9pbigiXG5cbiIpO3JldHVybiBkLnF1ZXVlLnBvcCgpLHYoQmUpfWlmKDA9PT1jZS5sZW5n''@;'; put 'put ''dGh8fDA9PT1jZVswXS5sZW5ndGgpe2xldCBCZT0iTm8gcmVsZXZhbnQgZGF0YSBmb3VuZCBpbiBGaWxlICEiO3JldHVybiBkLnF1ZXVlLnBvcCgpLHYoQmUpfWlmKChsLmRhdGVUaW1lSGVhZGVycy5sZW5ndGg+MHx8bC5kYXRlSGVhZGVycy5sZW5ndGg+MHx8bC50aW1lSGVhZGVycy5sZW5n''@;'; put 'put ''dGg+MCkmJihjZT10aGlzLnVwZGF0ZURhdGVUaW1lQ29scyhaLGNlLGwpKSxsLnhsUnVsZXMubGVuZ3RoPjAmJihjZT10aGlzLnVwZGF0ZVhMUnVsZUNvbHMoWixjZSxsKSksIU0pe2xldCBCZT0iIjtyZXR1cm4gQmU9MD09PUQubGVuZ3RoPyJObyByZWxldmFudCBkYXRhIGZvdW5kIGluIEZp''@;'; put 'put ''bGUgISI6RC5tYXAocWU9PmBTaGVldDogJHtxZS5zaGVldE5hbWV9LlxuTWlzc2luZyBjb2x1bW5zOiAke3FlLm1pc3NpbmdIZWFkZXJzLmpvaW4oIiwiKX1gKS5qb2luKCJcblxuIiksZC5xdWV1ZS5wb3AoKSx2KEJlKX17bC5oZWFkZXJTaG93PVosY2U9Y2UubWFwKEp0PT5KdC5tYXAodm49''@;'; put 'put ''PiJuIj09PXZuLnR8fHZuLnc/dm4udjoic3RyaW5nIj09dHlwZW9mIHZuLnY/dm4udi50cmltKCk6dm4udikpLGNlPWNlLm1hcChKdD0+SnQubWFwKCh2bixDbik9Pnshdm4mJjAhPT12biYmKHZuPSIiKTtjb25zdCB0bj1sLmhlYWRlclNob3dbQ25dO3JldHVybiJudW1lcmljIj09PWwuZGNW''@;'; put 'put ''YWxpZGF0b3I/LmdldFJ1bGUodG4pPy50eXBlJiYoMCxnZy5pc1NwZWNpYWxNaXNzaW5nKSh2bikmJiF2bi5pbmNsdWRlcygiLiIpJiYodm49Ii4iK3ZuKSx2bn0pKTtjb25zdCBCZT1jZS5zbGljZSgwLHRoaXMubGljZW5jZVN0YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xpbWl0KTtsZXQgcHQs''@;'; put 'put ''cWU9RHUudXRpbHMuanNvbl90b19zaGVldChCZSx7c2tpcEhlYWRlcjohMH0pLHJ0PUR1LnV0aWxzLnNoZWV0X3RvX2NzdihxZSk7aWYocnQ9Wi5qb2luKCIsIikrIlxuIitydCwiV0xBVElOMSI9PT1sLmVuY29kaW5nKXtsZXQgSnQ9eDZlLmRlY29kZShFNmUuQnVmZmVyLmZyb20ocnQpLCJD''@;'; put 'put ''UC0xMjUyIik7cHQ9bmV3IEJsb2IoW0p0XSx7dHlwZToiYXBwbGljYXRpb24vY3N2In0pfWVsc2UgcHQ9bmV3IEJsb2IoW3J0XSx7dHlwZToiYXBwbGljYXRpb24vY3N2In0pO2xldCBkdD1xZWUocHQsbC5maWxlLm5hbWUrIi5jc3YiKTtkLmFkZFRvUXVldWUoW2R0XSl9aWYoMD09PWNlLmxl''@;'; put 'put ''bmd0aClyZXR1cm4gdihgVGFibGUgaW4gdGhlIGZpbGUgaXMgZW1wdHkuIERhdGEgZm91bmQgb24gc2hlZXQ6ICR7cmUuZm91bmQ/LnNoZWV0TmFtZXx8IiJ9YCk7aWYoIXJlLmZvdW5kKXJldHVybiB2KCJObyByZWxldmFudCBkYXRhIGZvdW5kLiAnZm91bmQnIG9iamVjdCBpcyBlbXB0eSwg''@;'; put 'put ''dW5leHBlY3RlZCBlcnJvciBvY2N1cnJlZC4iKTtjb25zdCBiZT1yZS5mb3VuZC5zdGFydEFkZHJlc3N8fCIiLEVlPXJlLmZvdW5kLmVuZEFkZHJlc3N8fCIiO3JldHVybiBmKHt1cGxvYWRlcjpkLGRhdGE6Y2UscmFuZ2VTaGVldFJlczp7Zm91bmQ6ISFyZS5mb3VuZCxzaGVldE5hbWU6cmUu''@;'; put 'put ''Zm91bmQuc2hlZXROYW1lLHJhbmdlU3RhcnRBZGRyZXNzOmJlLHJhbmdlRW5kQWRkcmVzczpFZSxyYW5nZUFkZHJlc3M6YCR7YmV9OiR7RWV9YCxtaXNzaW5nSGVhZGVyczpEfSxoZWFkZXJTaG93OmwuaGVhZGVyU2hvd30pfSl9cGFyc2VDc3ZGaWxlKGwsYSxkKXtyZXR1cm4gbmV3IFByb21p''@;'; put 'put ''c2UoKGgsZik9PntpZih0aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdWJtaXRfcm93c19saW1pdCE9PTEvMClyZXR1cm4gYS5xdWV1ZS5wb3AoKSxmKCJFeGNlbCBmaWxlcyBvbmx5LiBUbyB1bmxvY2sgQ1NWIHVwbG9hZHMsIHBsZWFzZSBjb250YWN0IHN1cHBvcnRAZGF0YWNvbnRyb2xsZXIu''@;'; put 'put ''aW8iKTtpZigiV0xBVElOMSIhPT1sLmVuY29kaW5nKXJldHVybiBoKHt1cGxvYWRlcjphfSk7e2xldCB2PW5ldyBGaWxlUmVhZGVyO3Yub25sb2FkPUQ9PntsZXQgWj14NmUuZGVjb2RlKEU2ZS5CdWZmZXIuZnJvbShELnRhcmdldC5yZXN1bHQpLCJDUC0xMjUyIikscmU9bmV3IEJsb2IoW1pd''@;'; put 'put ''LHt0eXBlOmR9KSxjZT1xZWUocmUsbC5maWxlLm5hbWUpO3JldHVybiBhLnF1ZXVlLnBvcCgpLGEuYWRkVG9RdWV1ZShbY2VdKSxoKHt1cGxvYWRlcjphfSl9LHYucmVhZEFzQXJyYXlCdWZmZXIobC5maWxlKX19KX1ieXRlc1RvTUIobCl7cmV0dXJuIHBhcnNlRmxvYXQoKGwvMTA0ODU3Niku''@;'; put 'put ''dG9GaXhlZCgyKSl9eHNseFN0YXJ0UmVhZGluZyhsLGEsZCl7dmFyIGg9dGhpcztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oKXt2YXIgZj1lZShmdW5jdGlvbioodixNKXtjb25zdCBEPWgudG9Cc3RyKGwudGFyZ2V0LnJlc3VsdCk7bGV0IFoscmU9ITE7Y29uc3QgY2U9e3R5cGU6ImJp''@;'; put 'put ''bmFyeSIsY2VsbERhdGVzOiExLGNlbGxGb3JtdWxhOiEwLGNlbGxTdHlsZXM6ITAsY2VsbE5GOiExLGNlbGxUZXh0OiExLHBhc3N3b3JkOmR9O3RyeXtaPXlpZWxkIGgueGxzeFJlYWQoRCx7Li4uY2V9KX1jYXRjaChiZSl7aWYoIWJlLm1lc3NhZ2UudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygi''@;'; put 'put ''cGFzc3dvcmQiKSlyZXR1cm4gTSgiRXJyb3IgcmVhZGluZyB0aGUgZmlsZSIpO3tyZT0hMDtsZXQgRWU9ITE7Zm9yKDtyZTspe2NvbnN0IEJlPXlpZWxkIGEoe2Vycm9yOkVlfSk7aWYoQmUpdHJ5e1o9eWllbGQgaC54bHN4UmVhZChELHsuLi5jZSxwYXNzd29yZDpCZX0pLHJlPSExLEVlPSEx''@;'; put 'put ''fWNhdGNoKHFlKXtFZT0hMCxxZS5tZXNzYWdlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoInBhc3N3b3JkIil8fChyZT0hMSl9ZWxzZSByZT0hMX19fXJldHVybiBaP3YoWik6TSgiRmFpbGVkIHRvIHBhcnNlIGEgd29ya2Jvb2siKX0pO3JldHVybiBmdW5jdGlvbih2LE0pe3JldHVybiBmLmFw''@;'; put 'put ''cGx5KHRoaXMsYXJndW1lbnRzKX19KCkpfXhsc3hSZWFkKGwsYSl7cmV0dXJuIG5ldyBQcm9taXNlKChkLGgpPT57aWYoYSYmYS5wYXNzd29yZClyZXR1cm4gY29uc29sZS5pbmZvKCJOb3QgdXNpbmcgd29ya2VyIHRvIHBhcnNlIHRoZSBYTFNYIC0gaGFzIHBhc3N3b3JkIiksZChEdS5yZWFk''@;'; put 'put ''KGwsYSkpO2lmKHR5cGVvZiBXb3JrZXI+InUiKXJldHVybiBjb25zb2xlLmluZm8oIk5vdCB1c2luZyB3b3JrZXIgdG8gcGFyc2UgdGhlIFhMU1ggLSBubyBXb3JrZXIgYXZhaWxhYmxlIGluIHRoaXMgZW52aXJvbm1lbnQiKSxkKER1LnJlYWQobCxhKSk7Y29uc29sZS5pbmZvKCJVc2luZyB3''@;'; put 'put ''b3JrZXIgdG8gcGFyc2UgdGhlIFhMU1giKTtjb25zdCBmPW5ldyBXb3JrZXIoeS50dShuZXcgVVJMKHkucCt5LnUoNDExKSx5LmIpKSk7Zi5vbm1lc3NhZ2U9KHtkYXRhOnZ9KT0+eyJyZWFkaW5nX2VuZCI9PT12LmV2ZW50P2Qodi53b3JrYm9vayk6di5lcnJvcj9oKHYuZXJyb3IpOihjb25z''@;'; put 'put ''b2xlLmluZm8oIldvcmtlciBmYWlsZWQgdG8gcGFyc2UgdGhlIFhMU1ggLSBmYWxsYmFjayB0byBub24gd29ya2VyIHBhcnNpbmciKSxkKER1LnJlYWQodixhKSkpfSxmLnBvc3RNZXNzYWdlKHtkYXRhOmwsb3B0czphfSksc2V0VGltZW91dCgoKT0+ZChEdS5yZWFkKGwsYSkpLDZlNSl9KX1z''@;'; put 'put ''ZWFyY2hEYXRhSW5FeGNlbChsLGEpe2xldCBkLGgsZix2LE09IiIsRD1bXSxyZT1bIl9fX19fREVMRVRFX19USElTX19SRUNPUkRfX19fXyIsLi4uYS5oZWFkZXJBcnJheV0ubWFwKGJlPT5iZS50b0xvd2VyQ2FzZSgpKSxjZT1yZS5yZWR1Y2UoKGJlLEVlKT0+KGJlW0VlXT0tMSxiZSkse30p''@;'; put 'put ''O2ZvcihsZXQgYmUgb2YgbC5TaGVldE5hbWVzKXtkPXZvaWQgMCxoPXZvaWQgMCxjZT1yZS5yZWR1Y2UoKHRuLE1uKT0+KHRuW01uXT0tMSx0bikse30pO2xldCBFZT1bXTtNPWJlO2NvbnN0IEJlPWwuU2hlZXRzW01dO2lmKE9iamVjdC5rZXlzKEJlKS5mb3JFYWNoKHRuPT57Y29uc3QgTW49''@;'; put 'put ''QmVbdG5dLnY7aWYoTW4mJiJzdHJpbmciPT10eXBlb2YgTW4pe2NvbnN0IENyPU1uLnRvTG93ZXJDYXNlKCk7cmUuaW5kZXhPZihDcik+LTEmJihjZVtDcl09dG4sZHx8KGQ9dG4pLGg9dG4pfX0pLC0xPT09Y2UuX19fX19kZWxldGVfX3RoaXNfX3JlY29yZF9fX19fJiZkZWxldGUgY2UuX19f''@;'; put 'put ''X19kZWxldGVfX3RoaXNfX3JlY29yZF9fX19fLEVlPU9iamVjdC5rZXlzKGNlKS5maWx0ZXIodG49Pi0xPT09Y2VbdG5dKSxFZS5sZW5ndGg+MCl7RC5wdXNoKHtzaGVldE5hbWU6TSxtaXNzaW5nSGVhZGVyczpFZS5tYXAodG49PnRuLnRvVXBwZXJDYXNlKCkpfSk7Y29udGludWV9Y29uc3Qg''@;'; put 'put ''cWU9T2JqZWN0LmtleXMoY2UpO2xldCBkdCxydD1bXSxwdD1bXTtxZS5zb3J0KCh0bixNbik9Pntjb25zdCBDcj1hLmhlYWRlclBrcy5pbmNsdWRlcyh0bik/MTowO3JldHVybihhLmhlYWRlclBrcy5pbmNsdWRlcyhNbik/MTowKS1Dcn0pLmZvckVhY2godG49Pntjb25zdCBNbj1jZVt0bl0s''@;'; put 'put ''Q3I9TW4ubWF0Y2goL1xEKy8pLEdyPU1uLm1hdGNoKC9cZCsvKSxtcj0oQ3I/Q3JbMF06LTEpfHwtMSxhaT1wYXJzZUludCgoR3I/R3JbMF06LTEpfHwtMSkrMTtsZXQgX2k9MDtpZihkdClmb3IobGV0IE9uPWFpO09uPD1kdDtPbisrKXtjb25zdCBKbj1CZVtgJHttcn0ke09ufWBdO2lmKGEu''@;'; put 'put ''aGVhZGVyUGtzLmluY2x1ZGVzKHRuKSYmKHZvaWQgMD09PUpufHx2b2lkIDA9PT1Kbi52KSl7ZHQ9T247YnJlYWt9cnRbX2ldfHxydC5wdXNoKHt9KSxKbiYmKHJ0W19pXVt0bl09InN0cmluZyI9PXR5cGVvZiBKbi52P0puLnYudHJpbSgpOkpuLnYpLHB0W19pXXx8cHQucHVzaChbXSkscHRb''@;'; put 'put ''X2ldLnB1c2goSm4/P3t2OiIifSksX2krK31lbHNle2xldCBPbj1haTtmb3IoO3ZvaWQgMD09PWR0Oyl7Y29uc3QgenI9YCR7bXJ9JHtPbn1gLEpuPUJlW3pyXTtpZighSm58fHZvaWQgMD09PUpuLnYpe2R0PU9uLTE7YnJlYWt9cnRbX2ldfHxydC5wdXNoKHt9KSxydFtfaV1bdG5dPSJuIj09''@;'; put 'put ''PUJlW3pyXS50P0JlW3pyXS52OkJlW3pyXS53P0JlW3pyXS53OiJzdHJpbmciPT10eXBlb2YgQmVbenJdLnY/QmVbenJdLnYudHJpbSgpOkJlW3pyXS52LHB0W19pXXx8cHQucHVzaChbXSkscHRbX2ldLnB1c2goSm4/P3t2OiIifSksT24rKyxfaSsrfX1pZihkJiZoKXtjb25zdCBPbj1oLm1h''@;'; put 'put ''dGNoKC9cRCsvKTtmPWQsdj1gJHtPbn0ke2R0fWB9fSk7Y29uc3Qgdm49W107bGV0IENuO3JldHVybiBydC5mb3JFYWNoKCh0bixNbik9PntsZXQgQ3I9ITE7YS5oZWFkZXJQa3MuZm9yRWFjaChHcj0+e3ZvaWQgMD09PXRuW0dyLnRvTG93ZXJDYXNlKCldJiYoQ3I9ITApfSksQ3ImJih2bi5w''@;'; put 'put ''dXNoKE1uKSxDbnx8KENuPU1uKSl9KSxDbj8ocnQuc3BsaWNlKENuLDEvMCkscHQuc3BsaWNlKENuLDEvMCkpOnZuLnNvcnQoKHRuLE1uKT0+TW4tdG4pLmZvckVhY2godG49PntydC5zcGxpY2UodG4sMSkscHQuc3BsaWNlKHRuLDEpfSkscHQubGVuZ3RoP3tmb3VuZDp7ZGF0YTpydCxhcnJh''@;'; put 'put ''eURhdGE6cHQsc2hlZXROYW1lOk0sc3RhcnRBZGRyZXNzOmYsZW5kQWRkcmVzczp2LGhlYWRlcnM6cWV9fTp7fX1yZXR1cm57bWlzc2luZzpEfX11cGRhdGVEYXRlVGltZUNvbHMobCxhLGQpe2lmKGQuZGF0ZUhlYWRlcnMubGVuZ3RoPjApe2NvbnN0IGg9W107ZC5kYXRlSGVhZGVycy5mb3JF''@;'; put 'put ''YWNoKGY9PnstMSE9PWwuaW5kZXhPZihmKSYmaC5wdXNoKGwuaW5kZXhPZihmKSl9KSxhLmZvckVhY2goZj0+e2guZm9yRWFjaCh2PT57Y29uc3QgTT1mW3ZdO2lmKEtlZShNLnYpKXtjb25zdCBEPVdlZShOdW1iZXIoTS52KSk7TS52PUQuZ2V0RnVsbFllYXIoKSsiLSIrKCIwIisoRC5nZXRN''@;'; put 'put ''b250aCgpKzEpKS5zbGljZSgtMikrIi0iKygiMCIrRC5nZXREYXRlKCkpLnNsaWNlKC0yKX1lbHNlIGlmKE0mJk0udiYmLTE9PT1NLnYudG9TdHJpbmcoKS5pbmRleE9mKCI6Iikpe2NvbnN0IEQ9bmV3IERhdGUoTS52KTsiSW52YWxpZCBEYXRlIiE9PUQudG9VVENTdHJpbmcoKSYmKE0udj0k''@;'; put 'put ''ZWUoRCkpfWZbdl09TX0pfSl9aWYoZC50aW1lSGVhZGVycy5sZW5ndGg+MCl7bGV0IGg9W107ZC50aW1lSGVhZGVycy5mb3JFYWNoKGY9PnstMSE9PWwuaW5kZXhPZihmKSYmaC5wdXNoKGwuaW5kZXhPZihmKSl9KSxhLmZvckVhY2goZj0+e2guZm9yRWFjaCh2PT57Y29uc3QgTT1mW3ZdO2lm''@;'; put 'put ''KEtlZShNLnYpfHxNNmUoTS52KXx8TS52LmluY2x1ZGVzKCJFLSIpKXtjb25zdCBEPVdlZShOdW1iZXIoTS52KSk7TS52PVM2ZShEKX1mW3ZdPU19KX0pfWlmKGQuZGF0ZVRpbWVIZWFkZXJzLmxlbmd0aD4wKXtsZXQgaD1bXTtkLmRhdGVUaW1lSGVhZGVycy5mb3JFYWNoKGY9PnstMSE9PWwu''@;'; put 'put ''aW5kZXhPZihmKSYmaC5wdXNoKGwuaW5kZXhPZihmKSl9KSxhLmZvckVhY2goZj0+e2guZm9yRWFjaCh2PT57Y29uc3QgTT1mW3ZdO2lmKEtlZShNLnYpfHxNNmUoTS52KSl7Y29uc3QgRD1XZWUoTnVtYmVyKE0udikpO00udj0kZWUoRCkrIiAiK1M2ZShEKX1lbHNle2lmKC0xPT09TS52Lmlu''@;'; put 'put ''ZGV4T2YoIiAiKSYmLTEhPT1NLnYuaW5kZXhPZigiOiIpKXtsZXQgWj1NLnYuc3Vic3RyaW5nKDAsTS52LmluZGV4T2YoIjoiKSk7Wj1aKyIgIitNLnYuc3Vic3RyaW5nKE0udi5pbmRleE9mKCI6IikrMSksTS52PVp9Y29uc3QgRD1uZXcgRGF0ZShNLnYpOyJJbnZhbGlkIERhdGUiIT09RC50''@;'; put 'put ''b1VUQ1N0cmluZygpJiYoTS52PSRlZShEKSsiICIrKGM9PntsZXQgbD0oIjAiK2MuZ2V0SG91cnMoKSkuc2xpY2UoLTIpKyI6IjtyZXR1cm4gbD1sKygiMCIrYy5nZXRNaW51dGVzKCkpLnNsaWNlKC0yKSsiOiIsbCs9KCIwIitjLmdldFNlY29uZHMoKSkuc2xpY2UoLTIpLGx9KShEKSl9Zlt2''@;'; put 'put ''XT1NfSl9KX1yZXR1cm4gYX11cGRhdGVYTFJ1bGVDb2xzKGwsYSxkKXtpZihkLnhsUnVsZXMubGVuZ3RoPjApe2NvbnN0IGg9W107ZC54bFJ1bGVzLmZvckVhY2goZj0+ey0xIT09bC5pbmRleE9mKGYuWExfQ09MVU1OKSYmKGYuaW5kZXg9bC5pbmRleE9mKGYuWExfQ09MVU1OKSxoLnB1c2go''@;'; put 'put ''ZikpfSksYS5mb3JFYWNoKGY9PntoLmZvckVhY2godj0+e2NvbnN0IE09Zlt2LmluZGV4XTsiRk9STVVMQSI9PT12LlhMX1JVTEUmJiJmImluIE0mJigibiI9PT1NLnQ/TS52PSI9IitNLmY6TS53PSI9IitNLmYpLGZbdl09TX0pfSl9cmV0dXJuIGF9dG9Cc3RyKGwpe2xldCBhPW5ldyBVaW50''@;'; put 'put ''OEFycmF5KGwpLGQ9IiIsaD1hLmJ5dGVMZW5ndGg7Zm9yKGxldCBmPTA7ZjxoO2YrKylkKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGFbZl0pO3JldHVybiBkfX1sZXQgQTZlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuZXhjZWxQYXNzd29yZE1vZGFsU2VydmljZT1hLHRo''@;'; put 'put ''aXMuZXZlbnRTZXJ2aWNlPWQsdGhpcy5saWNlbmNlU2VydmljZT1oLHRoaXMubGljZW5jZVN0YXRlPXRoaXMubGljZW5jZVNlcnZpY2UubGljZW5jZVN0YXRlLHRoaXMucHJvbXB0RXhjZWxQYXNzd29yZD1mPT5uZXcgUHJvbWlzZSgodixNKT0+e3RoaXMuZXhjZWxQYXNzd29yZE1vZGFsU2Vy''@;'; put 'put ''dmljZS5vcGVuKGYpLnN1YnNjcmliZShEPT57dihELnBhc3N3b3JkKX0pfSl9cGFyc2VFeGNlbEZpbGUoYSxkLGgpe3JldHVybiBuZXcgVDZlKHtsaWNlbmNlU3RhdGU6dGhpcy5saWNlbmNlU3RhdGV9KS5wYXJzZVNwcmVhZHNoZWV0RmlsZShhLHRoaXMucHJvbXB0RXhjZWxQYXNzd29yZCxk''@;'; put 'put ''LGgpfXhsc3hSZWFkRmlsZShhKXtyZXR1cm4gbmV3IFByb21pc2UoKGQsaCk9Pntjb25zdCBmPW5ldyBUNmUoe2xpY2VuY2VTdGF0ZTp0aGlzLmxpY2VuY2VTdGF0ZX0pO2xldCB2PW5ldyBGaWxlUmVhZGVyO3Yub25sb2FkPU09PntmLnhzbHhTdGFydFJlYWRpbmcoTSx0aGlzLnByb21wdEV4''@;'; put 'put ''Y2VsUGFzc3dvcmQpLnRoZW4oRD0+e2QoRCl9KS5jYXRjaChEPT57aChEKX0pfSx2LnJlYWRBc0FycmF5QnVmZmVyKGEpfSl9cGFyc2VFeGNlbFNoZWV0TmFtZXMoYSl7dmFyIGQ9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7cmV0dXJuIG5ldyBQcm9taXNlKChoLGYpPT57Y29uc3Qgdj1u''@;'; put 'put ''ZXcgRmlsZVJlYWRlcjtpZighYSlyZXR1cm4gY29uc29sZS53YXJuKCJmaWxlIGlzIG1pc3NpbmciKSxoKHtzaGVldE5hbWVzOltdfSk7di5vbmxvYWQ9ZnVuY3Rpb24oKXt2YXIgTT1lZShmdW5jdGlvbiooRCl7aWYoIUQ/LnRhcmdldClyZXR1cm4gdm9pZCBjb25zb2xlLndhcm4oIkZpbGUg''@;'; put 'put ''cmVhZGVyIGV2ZW50LnRhcmdldCBpcyBtaXNzaW5nIik7bGV0IFosY2UscmU9ITE7Y29uc3QgYmU9RC50YXJnZXQucmVzdWx0O3RyeXtaPUR1LnJlYWQoYmUse2Jvb2tTaGVldHM6ITAsdHlwZToiYmluYXJ5In0pfWNhdGNoKEVlKXtpZighRWUubWVzc2FnZS50b0xvd2VyQ2FzZSgpLmluY2x1''@;'; put 'put ''ZGVzKCJwYXNzd29yZCIpKXJldHVybiBmKCJFcnJvciByZWFkaW5nIHRoZSBmaWxlIik7e3JlPSEwO2xldCBCZT0hMTtmb3IoO3JlOyl7aWYoY2U9eWllbGQgZC5wcm9tcHRFeGNlbFBhc3N3b3JkKHtlcnJvcjpCZX0pLCFjZSlyZXR1cm4gcmU9ITEsZigiTm8gcGFzc3dvcmQgcHJvdmlkZWQi''@;'; put 'put ''KTt0cnl7Wj1EdS5yZWFkKGJlLHtib29rU2hlZXRzOiEwLHR5cGU6ImJpbmFyeSIscGFzc3dvcmQ6Y2V9KSxyZT0hMSxCZT0hMX1jYXRjaChxZSl7QmU9ITAscWUubWVzc2FnZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCJwYXNzd29yZCIpfHwocmU9ITEpfWlmKCFjZSlyZXR1cm4gZigiSW52''@;'; put 'put ''YWxpZCBwYXNzd29yZCwgZmFpbGVkIHRvIGRlY3J5cHQgdGhlIGZpbGUiKX19fWlmKCFaKXJldHVybiBmKCJFcnJvciBwYXJzaW5nIHRoZSB3b3JrYm9vayIpO3RyeXtyZXR1cm4gaCh7c2hlZXROYW1lczpaLlNoZWV0TmFtZXMscGFzc3dvcmQ6Y2V9KX1jYXRjaChFZSl7Y29uc29sZS5lcnJv''@;'; put 'put ''cihFZSl9fSk7cmV0dXJuIGZ1bmN0aW9uKEQpe3JldHVybiBNLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCksdi5vbmVycm9yPWZ1bmN0aW9uKE0pe2NvbnNvbGUubG9nKE0pfSx2LnJlYWRBc0JpbmFyeVN0cmluZyhhKX0pfSkoKX1ieXRlc1RvTUIoYSl7cmV0dXJuIHBhcnNlRmxvYXQoKGEv''@;'; put 'put ''MTA0ODU3NikudG9GaXhlZCgyKSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoeHIoaGhlKSx4cih2YykseHIodTEpKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJv''@;'; put 'put ''b3QifSl9fXJldHVybiBjfSkoKTtjb25zdCAkOT12b2lkIDAsVG10PVsiZW4tR0IiLFtbImEiLCJwIl0sWyJhbSIsInBtIl0sJDldLFtbImFtIiwicG0iXSwkOSwkOV0sW1siUyIsIk0iLCJUIiwiVyIsIlQiLCJGIiwiUyJdLFsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwi''@;'; put 'put ''U2F0Il0sWyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLFsiU3UiLCJNbyIsIlR1IiwiV2UiLCJUaCIsIkZyIiwiU2EiXV0sJDksW1siSiIsIkYiLCJNIiwiQSIsIk0iLCJKIiwiSiIsIkEiLCJTIiwiTyIsIk4i''@;'; put 'put ''LCJEIl0sWyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXB0IiwiT2N0IiwiTm92IiwiRGVjIl0sWyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3Rv''@;'; put 'put ''YmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdXSwkOSxbWyJCIiwiQSJdLFsiQkMiLCJBRCJdLFsiQmVmb3JlIENocmlzdCIsIkFubm8gRG9taW5pIl1dLDEsWzYsMF0sWyJkZC9NTS95IiwiZCBNTU0geSIsImQgTU1NTSB5IiwiRUVFRSwgZCBNTU1NIHkiXSxbIkhIOm1tIiwiSEg6bW06c3Mi''@;'; put 'put ''LCJISDptbTpzcyB6IiwiSEg6bW06c3Mgenp6eiJdLFsiezF9LCB7MH0iLCQ5LCJ7MX0gJ2F0JyB7MH0iLCQ5XSxbIi4iLCIsIiwiOyIsIiUiLCIrIiwiLSIsIkUiLCJceGQ3IiwiXHUyMDMwIiwiXHUyMjFlIiwiTmFOIiwiOiJdLFsiIywjIzAuIyMjIiwiIywjIzAlIiwiXHhhNCMsIyMwLjAw''@;'; put 'put ''IiwiI0UwIl0sIkdCUCIsIlx4YTMiLCJCcml0aXNoIFBvdW5kIix7SlBZOlsiSlBceGE1IiwiXHhhNSJdLFVTRDpbIlVTJCIsIiQiXX0sImx0ciIsZnVuY3Rpb24gRW10KGMpe2NvbnN0IGE9TWF0aC5mbG9vcihNYXRoLmFicyhjKSksZD1jLnRvU3RyaW5nKCkucmVwbGFjZSgvXlteLl0qXC4/''@;'; put 'put ''LywiIikubGVuZ3RoO3JldHVybiAxPT09YSYmMD09PWQ/MTo1fV0sQW10PVsiaW5wdXQiXSxrbXQ9WyIqIl0sRG10PShjLGwpPT4oeyJ3aWR0aC5weCI6YywibWF4LWhlaWdodC5weCI6bH0pO2Z1bmN0aW9uIEltdChjLGwpe2lmKDEmYyYmKGRlKDAsIm9wdGlvbiIsNyksTGUoMSksaGUoKSks''@;'; put 'put ''MiZjKXtjb25zdCBhPVJlKCk7ZmUoKSxJcigiICIsYS5sb2FkaW5nTW9yZT8iTG9hZGluZy4uLiI6IkxPQUQgTU9SRSIsIiAiKX19bGV0IGs2ZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuY2RyPWEsdGhpcy5pbnB1dElkPSIiLHRoaXMucGxhY2Vob2xkZXI9IiIsdGhpcy52''@;'; put 'put ''YWx1ZT0iIix0aGlzLmRpc2FibGVkPSExLHRoaXMudHlwZT0idGV4dCIsdGhpcy5hdXRvY29tcGxldGU9Im9mZiIsdGhpcy50YWJpbmRleD0iIix0aGlzLmVtaXRPbmx5U2VsZWN0ZWQ9ITEsdGhpcy5lbmFibGVMb2FkTW9yZT0hMSx0aGlzLm9uSW5wdXRLZXlkb3duPW5ldyBLcix0aGlzLm9u''@;'; put 'put ''SW5wdXRDaGFuZ2U9bmV3IEtyLHRoaXMudmFsdWVDaGFuZ2U9bmV3IEtyLHRoaXMub25Mb2FkaW5nTW9yZT1uZXcgS3IsdGhpcy5kYXRhbGlzdE9wZW49ITEsdGhpcy5hZnRlck9wZW5Mb2NrRGVsYXk9MTUwLHRoaXMuYWZ0ZXJPcGVuTG9jaz0hMSx0aGlzLmlucHV0Rm9jdXNlZD0hMSx0aGlz''@;'; put 'put ''LmlucHV0Q2xpZW50UmVjdD17fSx0aGlzLnByZXZlbnREYXRhbGlzdENsb3NlPSExLHRoaXMubG9hZGluZ01vcmU9ITF9bmdPbkluaXQoKXt9bmdBZnRlclZpZXdJbml0KCl7c2V0VGltZW91dCgoKT0+e3RoaXMuY2FsY3VsYXRlSW5wdXRQb3NpdGlvbigpfSw1MDApfW9uSW5wdXRGaXJlZChh''@;'; put 'put ''LGQsaCl7dGhpcy5vcGVuRGF0YWxpc3QoImNsaWNrIiE9PWgpLHRoaXMudW5zZWxlY3RBbGxPcHRpb25zKCksdGhpcy5maWx0ZXJPcHRpb25zTGlzdCgpLCghdGhpcy5lbWl0T25seVNlbGVjdGVkfHxkKSYmKHRoaXMub25JbnB1dENoYW5nZS5lbWl0KHt0YXJnZXQ6e3ZhbHVlOnRoaXMudmFs''@;'; put 'put ''dWV9fSksdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMudmFsdWUpKX1vbklucHV0Q2xpY2soYSl7dGhpcy5vcGVuRGF0YWxpc3QoKX1vcGVuRGF0YWxpc3QoYT0hMCl7dGhpcy5kYXRhbGlzdE9wZW49ITAsYSYmKHRoaXMuYWZ0ZXJPcGVuTG9jaz0hMCx0aGlzLmFmdGVyT3BlbkxvY2tEZWxh''@;'; put 'put ''eVRpbWVvdXQ9c2V0VGltZW91dCgoKT0+e3RoaXMuYWZ0ZXJPcGVuTG9jaz0hMX0sdGhpcy5hZnRlck9wZW5Mb2NrRGVsYXkpKX1jbG9zZURhdGFsaXN0KCl7Y2xlYXJUaW1lb3V0KHRoaXMuYWZ0ZXJPcGVuTG9ja0RlbGF5VGltZW91dCksdGhpcy5hZnRlck9wZW5Mb2NrPSExLHRoaXMuZGF0''@;'; put 'put ''YWxpc3RPcGVuPSExfXJlc2V0RGF0YWxpc3RGaWx0ZXIoKXt0aGlzLmZpbHRlck9wdGlvbnNMaXN0KCEwKX1vbklucHV0Rm9jdXNpbihhKXt0aGlzLmlucHV0Rm9jdXNlZD0hMH1vbklucHV0Rm9jdXNvdXQoYSl7dGhpcy5pbnB1dEZvY3VzZWQ9ITEsdGhpcy5zZXRUb0Nsb3NlRGF0YWxpc3Qo''@;'; put 'put ''KX1vbklucHV0TW91c2VlbnRlcihhKXt0aGlzLmlucHV0Q2xpZW50UmVjdC53aWR0aHx8dGhpcy5jYWxjdWxhdGVJbnB1dFBvc2l0aW9uKCl9ZmlsdGVyT3B0aW9uc0xpc3QoYSl7Y29uc3QgZD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGAjZGF0YWxpc3RfJHt0aGlzLmlucHV0SWR9IG9w''@;'; put 'put ''dGlvbmApO2ZvcihsZXQgaD0wO2g8ZC5sZW5ndGg7aCsrKXtjb25zdCBmPWRbaF07aWYoMD09PXRoaXMudmFsdWUubGVuZ3RoKXtmLmNsYXNzTGlzdC5yZW1vdmUoImhpZGRlbiIpO2NvbnRpbnVlfWlmKGEpe2YuY2xhc3NMaXN0LnJlbW92ZSgiaGlkZGVuIik7Y29udGludWV9Y29uc3Qgdj1m''@;'; put 'put ''LmlubmVyVGV4dHx8IiIsTT1mLnZhbHVlfHwiIjsoditNKT8udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLnZhbHVlLnRvTG93ZXJDYXNlKCkpP2YuY2xhc3NMaXN0LnJlbW92ZSgiaGlkZGVuIik6Zi5jbGFzc0xpc3QuYWRkKCJoaWRkZW4iKX19c2V0VG9DbG9zZURhdGFsaXN0KCl7dGhp''@;'; put 'put ''cy5kYXRhbGlzdENsb3NlVGltZW91dD1zZXRUaW1lb3V0KCgpPT57dGhpcy5wcmV2ZW50RGF0YWxpc3RDbG9zZXx8dGhpcy5hZnRlck9wZW5Mb2NrfHwodGhpcy5jbG9zZURhdGFsaXN0KCksdGhpcy51bnNlbGVjdEFsbE9wdGlvbnMoKSx0aGlzLnJlc2V0RGF0YWxpc3RGaWx0ZXIoKSl9LDEw''@;'; put 'put ''MCl9Y2FsY3VsYXRlSW5wdXRQb3NpdGlvbigpe2NvbnN0IGQ9dGhpcy5pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudD8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7ZC53aWR0aD4wJiZkLmhlaWdodD4wJiYodGhpcy5pbnB1dENsaWVudFJlY3Q9e3dpZHRoOmQud2lkdGgsYm90dG9tOmQuYm90''@;'; put 'put ''dG9tfSksdGhpcy5pbm5lckhlaWdodD13aW5kb3cuaW5uZXJIZWlnaHR9b25EYXRhTGlzdE1vdXNlRW50ZXIoYSl7dGhpcy5wcmV2ZW50RGF0YWxpc3RDbG9zZT0hMH1vbkRhdGFMaXN0TW91c2VMZWF2ZShhKXt0aGlzLnByZXZlbnREYXRhbGlzdENsb3NlPSExLHRoaXMuaW5wdXRFbGVtZW50''@;'; put 'put ''Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKX1vbkRhdGFMaXN0U2Nyb2xsKGEpe3RoaXMuc2V0VG9DbG9zZURhdGFsaXN0KCl9b25EYXRhTGlzdENsaWNrKGEpe2NvbnN0IGQ9YS50YXJnZXQ7ImxvYWQtbW9yZSIhPT1kLmRhdGFzZXQ/LnR5cGU/Ik9QVElPTiIhPT1kLnRhZ05hbWV8fHRoaXMuc2V0''@;'; put 'put ''T3B0aW9uVmFsdWUoZC5pbm5lclRleHQsZC52YWx1ZSk6dGhpcy5sb2FkTW9yZSgpfWxvYWRNb3JlKCl7dGhpcy5vbkxvYWRpbmdNb3JlLmVtaXQoe2xvYWRNb3JlRmluaXNoZWQ6YT0+e3RoaXMubG9hZGluZ01vcmU9ITEsdGhpcy5lbmFibGVMb2FkTW9yZT1hfX0pLHRoaXMubG9hZGluZ01v''@;'; put 'put ''cmU9ITB9c2V0T3B0aW9uVmFsdWUoYSxkKXsoYXx8ZCkmJihkfHwoZD1hKSksZCYmKHRoaXMucHJldmVudERhdGFsaXN0Q2xvc2U9ITEsdGhpcy52YWx1ZT1kLHRoaXMub25JbnB1dEZpcmVkKG51bGwsITAsImNsaWNrIiksdGhpcy5zZXRUb0Nsb3NlRGF0YWxpc3QoKSl9b25NYWluS2V5ZG93''@;'; put 'put ''bihhKXtzd2l0Y2goYS5rZXkpe2Nhc2UiQXJyb3dVcCI6dGhpcy5nZXRPcHRpb25zTW92ZUZvY3VzKCJ1cCIpO2JyZWFrO2Nhc2UiQXJyb3dEb3duIjp0aGlzLmdldE9wdGlvbnNNb3ZlRm9jdXMoImRvd24iKTticmVhaztjYXNlIkVudGVyIjp0aGlzLnNlbGVjdEZvY3VzZWRPcHRpb24oKX19''@;'; put 'put ''b25JbnB1dEtleXVwKGEpe3JldHVybiF0aGlzLmRhdGFsaXN0T3Blbnx8KCJFc2NhcGUiPT09YS5rZXk/KGEuc3RvcFByb3BhZ2F0aW9uKCksYS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSx0aGlzLnNldFRvQ2xvc2VEYXRhbGlzdCgpLCExKTp2b2lkIDApfXVuc2VsZWN0QWxsT3B0aW9u''@;'; put 'put ''cygpe2NvbnN0IGE9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgI2RhdGFsaXN0XyR7dGhpcy5pbnB1dElkfSBvcHRpb25gKTtmb3IobGV0IGQ9MDtkPGEubGVuZ3RoO2QrKylhW2RdLmNsYXNzTGlzdC5yZW1vdmUoImZvY3VzZWQiKX1zZWxlY3RGb2N1c2VkT3B0aW9uKCl7Y29uc3QgYT1k''@;'; put 'put ''b2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjZGF0YWxpc3RfJHt0aGlzLmlucHV0SWR9IG9wdGlvbi5mb2N1c2VkYCk7YSYmdGhpcy5vbkRhdGFMaXN0Q2xpY2soe3RhcmdldDphfSksdGhpcy5zZXRUb0Nsb3NlRGF0YWxpc3QoKX1nZXRPcHRpb25zTW92ZUZvY3VzKGEpe2NvbnN0IGQ9ZG9jdW1l''@;'; put 'put ''bnQucXVlcnlTZWxlY3RvckFsbChgI2RhdGFsaXN0XyR7dGhpcy5pbnB1dElkfSBvcHRpb246bm90KC5oaWRkZW4pYCk7bGV0IGg9MDtmb3IobGV0IGY9MDtmPGQubGVuZ3RoO2YrKyl7Y29uc3Qgdj1kW2ZdO2lmKHYuY2xhc3NMaXN0LmNvbnRhaW5zKCJmb2N1c2VkIikpe2g9ImRvd24iPT09''@;'; put 'put ''YT9mKzE6Zi0xLGg8MCYmKGg9ZC5sZW5ndGgtMSksaD5kLmxlbmd0aC0xJiYoaD0wKSx2LmNsYXNzTGlzdC5yZW1vdmUoImZvY3VzZWQiKTticmVha319ZFtoXS5jbGFzc0xpc3QuYWRkKCJmb2N1c2VkIil9b25SZXNpemUoYSl7dGhpcy5jYWxjdWxhdGVJbnB1dFBvc2l0aW9uKCl9c3RhdGlj''@;'; put 'put ''e3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoRXMpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1hdXRvY29tcGxldGUiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGQsaCl7aWYoMSZkJiZxYShBbXQsNSksMiZk''@;'; put 'put ''KXtsZXQgZjtDaShmPVNpKCkpJiYoaC5pbnB1dEVsZW1lbnQ9Zi5maXJzdCl9fSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZCxoKXsxJmQmJkZ0KCJyZXNpemUiLGZ1bmN0aW9uKHYpe3JldHVybiBoLm9uUmVzaXplKHYpfSwwLHFDKX0saW5wdXRzOntpbnB1dElkOiJpbnB1dElkIixwbGFjZWhv''@;'; put 'put ''bGRlcjoicGxhY2Vob2xkZXIiLHZhbHVlOiJ2YWx1ZSIsZGlzYWJsZWQ6ImRpc2FibGVkIix0eXBlOiJ0eXBlIixhdXRvY29tcGxldGU6ImF1dG9jb21wbGV0ZSIsdGFiaW5kZXg6InRhYmluZGV4IixlbWl0T25seVNlbGVjdGVkOiJlbWl0T25seVNlbGVjdGVkIixlbmFibGVMb2FkTW9yZToi''@;'; put 'put ''ZW5hYmxlTG9hZE1vcmUifSxvdXRwdXRzOntvbklucHV0S2V5ZG93bjoib25JbnB1dEtleWRvd24iLG9uSW5wdXRDaGFuZ2U6Im9uSW5wdXRDaGFuZ2UiLHZhbHVlQ2hhbmdlOiJ2YWx1ZUNoYW5nZSIsb25Mb2FkaW5nTW9yZToib25Mb2FkaW5nTW9yZSJ9LG5nQ29udGVudFNlbGVjdG9yczpr''@;'; put 'put ''bXQsZGVjbHM6OSx2YXJzOjE1LGNvbnN0czpbWyJpbnB1dCIsIiJdLFsib3B0aW9ucyIsIiJdLFsxLCJhdXRvY29tcGxldGUtd3JhcHBlciIsMywia2V5ZG93biJdLFsidHlwZSIsInRleHQiLCJhdXRvY29tcGxldGUiLCJvZmYiLCJhdXRvZm9jdXMiLCIiLCJ0YWJpbmRleCIsIjAiLDEsImlu''@;'; put 'put ''cHV0LXZhbCIsMywibmdNb2RlbENoYW5nZSIsImNsaWNrIiwibW91c2VlbnRlciIsImZvY3VzIiwiZm9jdXNvdXQiLCJrZXl1cCIsImlkIiwicGxhY2Vob2xkZXIiLCJuZ01vZGVsIiwiZGlzYWJsZWQiXSxbMSwib3ZlcmxheSJdLFsxLCJkYXRhbGlzdCIsMywiY2xpY2siLCJtb3VzZWVudGVy''@;'; put 'put ''IiwibW91c2VsZWF2ZSIsInNjcm9sbCIsIm5nU3R5bGUiLCJpZCJdLFsiZGF0YS10eXBlIiwibG9hZC1tb3JlIiwiY2xhc3MiLCJsb2FkLW1vcmUiLDQsIm5nSWYiXSxbImRhdGEtdHlwZSIsImxvYWQtbW9yZSIsMSwibG9hZC1tb3JlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7aWYoMSZk''@;'; put 'put ''KXtjb25zdCBmPUxuKCk7c2EoKSxkZSgwLCJkaXYiLDIpLEZ0KCJrZXlkb3duIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksQ3QoaC5vbk1haW5LZXlkb3duKE0pKX0pLGRlKDEsImlucHV0IiwzLDApLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksbWkoaC52''@;'; put 'put ''YWx1ZSxNKXx8KGgudmFsdWU9TSksQ3QoTSl9KSxGdCgiY2xpY2siLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxDdChoLm9uSW5wdXRDbGljayhNKSl9KSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLEN0KGgub25JbnB1dEZpcmVkKE0pKX0pKCJtb3VzZWVudGVy''@;'; put 'put ''IixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksQ3QoaC5vbklucHV0TW91c2VlbnRlcihNKSl9KSgiZm9jdXMiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxDdChoLm9uSW5wdXRGb2N1c2luKE0pKX0pKCJmb2N1c291dCIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLEN0KGgub25JbnB1dEZv''@;'; put 'put ''Y3Vzb3V0KE0pKX0pKCJrZXl1cCIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLEN0KGgub25JbnB1dEtleXVwKE0pKX0pLGhlKCksR3QoMywiZGl2Iiw0KSxkZSg0LCJkaXYiLDUpLEZ0KCJjbGljayIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLEN0KGgub25EYXRhTGlzdENsaWNrKE0pKX0p''@;'; put 'put ''KCJtb3VzZWVudGVyIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksQ3QoaC5vbkRhdGFMaXN0TW91c2VFbnRlcihNKSl9KSgibW91c2VsZWF2ZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLEN0KGgub25EYXRhTGlzdE1vdXNlTGVhdmUoTSkpfSkoInNjcm9sbCIsZnVuY3Rpb24oTSl7cmV0''@;'; put 'put ''dXJuIHd0KGYpLEN0KGgub25EYXRhTGlzdFNjcm9sbChNKSl9KSxkZSg1LCJkaXYiLG51bGwsMSksWXIoNyksaGUoKSxndCg4LEltdCwyLDEsIm9wdGlvbiIsNiksaGUoKSgpfWlmKDImZCl7Y29uc3QgZj1oYSg2KTtmZSgpLE1lKCJpZCIsaC5pbnB1dElkKSgicGxhY2Vob2xkZXIiLGgucGxh''@;'; put 'put ''Y2Vob2xkZXIpLHBpKCJuZ01vZGVsIixoLnZhbHVlKSxNZSgiZGlzYWJsZWQiLGguZGlzYWJsZWQpLGhyKCJsaXN0IiwiZGF0YWxpc3RfIitoLmlucHV0SWQpLGZlKDIpLFRyKCJoaWRkZW4iLCFoLmRhdGFsaXN0T3BlbiksZmUoKSxUcigiaGlkZGVuIiwhaC5kYXRhbGlzdE9wZW4pLE1lKCJu''@;'; put 'put ''Z1N0eWxlIixscCgxMixEbXQsaC5pbnB1dENsaWVudFJlY3Qud2lkdGgsaC5pbm5lckhlaWdodCYmaC5pbnB1dENsaWVudFJlY3QuYm90dG9tP2guaW5uZXJIZWlnaHQtaC5pbnB1dENsaWVudFJlY3QuYm90dG9tOnZvaWQgMCkpKCJpZCIsImRhdGFsaXN0XyIraC5pbnB1dElkKSxmZSg0KSxN''@;'; put 'put ''ZSgibmdJZiIsZi5jaGlsZHJlbi5sZW5ndGg+MCYmaC5lbmFibGVMb2FkTW9yZSl9fSxkZXBlbmRlbmNpZXM6W2JhLG5vZSxBMixrMixxbCxubCwkc10sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKSxSbXQ9KCgpPT57Y2xhc3MgY3t0cmFuc2Zvcm0oYSxkKXtpZigic3RyaW5nIj09''@;'; put 'put ''dHlwZW9mIGEmJmEubGVuZ3RoPDEpcmV0dXJuIGE7c3dpdGNoKGQpe2Nhc2UiZGF0ZSI6cmV0dXJuIE9vKGEsIkRETU1NWVlZWTpoaDptbTpzcyIpLmZvcm1hdCgiREQvTU0vWVlZWSIpO2Nhc2UidGltZSI6e2lmKCJzdHJpbmciIT10eXBlb2YgYSl0aHJvdyBuZXcgRXJyb3IoIkVycm9yIHBh''@;'; put 'put ''cnNpbmcgdGltZS4gVmFsdWUgaXMgbm90IHN0cmluZy4iKTtjb25zdCBoPXBhcnNlSW50KGEuc3BsaXQoIjoiKVswXSksZj1wYXJzZUludChhLnNwbGl0KCI6IilbMV0pLHY9cGFyc2VJbnQoYS5zcGxpdCgiOiIpWzJdKTtyZXR1cm5gJHtoPDEwPyIwIitoOmh9OiR7ZjwxMD8iMCIrZjpmfTok''@;'; put 'put ''e3Y8MTA/IjAiK3Y6dn1gfX1yZXR1cm4ic3RyaW5nIj09dHlwZW9mIGE/YTphLnRvU3RyaW5nKCl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NXBpcGU9bGwoe25hbWU6ImRhdGVUaW1lRm9ybWF0dGVyIix0eXBl''@;'; put 'put ''OmMscHVyZTohMH0pfX1yZXR1cm4gY30pKCk7Y29uc3QgTG10PVsiaW5wdXQiXSxPbXQ9WyIqIl07ZnVuY3Rpb24gUG10KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7c2koMCksTGUoMSwiIC8gIiksZGUoMiwic3BhbiIsNSksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxD''@;'; put 'put ''dChSZSgyKS5vbkNoYW5nZUxhYmVsKCJzZWNvbmQiKSl9KSxMZSgzKSxoZSgpLGxpKCl9aWYoMiZjKXtjb25zdCBhPVJlKDIpO2ZlKDIpLFRyKCJ2YWx1ZS10eXBlLXNlbGVjdGVkIiwic2Vjb25kIj09PWEubGFiZWxTZWxlY3RlZCksZmUoKSx3cihhLnNlY29uZExhYmVsKX19ZnVuY3Rpb24g''@;'; put 'put ''Rm10KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwibGFiZWwiLDQpKDEsInNwYW4iLDUpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS5vbkNoYW5nZUxhYmVsKCJmaXJzdCIpKX0pLExlKDIpLGhlKCksZ3QoMyxQbXQsNCwzLCJuZy1jb250YWluZXIi''@;'; put 'put ''LDYpLGhlKCl9aWYoMiZjKXtjb25zdCBhPVJlKCk7VHIoInNlY29uZExhYmVsQWN0aXZlIixhLnNlY29uZExhYmVsJiZhLnNlY29uZExhYmVsLmxlbmd0aD4wKSxmZSgpLFRyKCJ2YWx1ZS10eXBlLXNlbGVjdGVkIiwiZmlyc3QiPT09YS5sYWJlbFNlbGVjdGVkKSxmZSgpLHdyKGEubGFiZWwp''@;'; put 'put ''LGZlKCksTWUoIm5nSWYiLGEuc2Vjb25kTGFiZWwpfX1mdW5jdGlvbiBIbXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtzaSgwKSxkZSgxLCJjbHItZGF0ZS1jb250YWluZXIiKSgyLCJpbnB1dCIsNyksZWwoMywiZGF0ZVRpbWVGb3JtYXR0ZXIiKSxGdCgiY2xyRGF0ZUNoYW5nZSIsZnVu''@;'; put 'put ''Y3Rpb24oaCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkub25EYXRlSW5wdXRGaXJlZChoKSl9KSgiZm9jdXMiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkuaW5wdXRGb2N1c2VkPSEwKX0pKCJmb2N1c291dCIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS5pbnB1dEZvY3Vz''@;'; put 'put ''ZWQ9ITEpfSkoImZvY3VzaW4iLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChSZSgpLm9uRm9jdXNpbklucHV0KGgpKX0pKCJtb3VzZW92ZXIiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkub25JbnB1dE1vdXNlT3ZlcigpKX0pKCJtb3VzZW91dCIsZnVuY3Rpb24oKXtyZXR1''@;'; put 'put ''cm4gd3QoYSksQ3QoUmUoKS5vbklucHV0TW91c2VPdXQoKSl9KSxoZSgpKCksbGkoKX1pZigyJmMpe2NvbnN0IGE9UmUoKTtmZSgyKSxNZSgiaWQiLGEuaW5wdXRJZCkoInBsYWNlaG9sZGVyIix6OCgzLDUsYS50ZW1wLCJkYXRlIikpKCJjbHJEYXRlIixhLnZhbHVlKSgiZGlzYWJsZWQiLGEu''@;'; put 'put ''ZGlzYWJsZWQpLGhyKCJsaXN0IiwiZGF0YWxpc3RfIithLmlucHV0SWQpfX1mdW5jdGlvbiBObXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtzaSgwKSxkZSgxLCJpbnB1dCIsOCksRnQoImlucHV0IixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS5vbklucHV0RmlyZWQoaCkp''@;'; put 'put ''fSkoImZvY3VzIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgpLmlucHV0Rm9jdXNlZD0hMCl9KSgiZm9jdXNvdXQiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkuaW5wdXRGb2N1c2VkPSExKX0pKCJmb2N1c2luIixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoUmUo''@;'; put 'put ''KS5vbkZvY3VzaW5JbnB1dChoKSl9KSgibW91c2VvdmVyIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgpLm9uSW5wdXRNb3VzZU92ZXIoKSl9KSgibW91c2VvdXQiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkub25JbnB1dE1vdXNlT3V0KCkpfSksaGUoKSxsaSgpfWlm''@;'; put 'put ''KDImYyl7Y29uc3QgYT1SZSgpO2ZlKCksTWUoInZhbHVlIixhLnZhbHVlKSgiaWQiLGEuaW5wdXRJZCkoImRpc2FibGVkIixhLmRpc2FibGVkKSxocigibGlzdCIsImRhdGFsaXN0XyIrYS5pbnB1dElkKX19ZnVuY3Rpb24gVm10KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7c2koMCksZGUo''@;'; put 'put ''MSwiYXBwLWF1dG9jb21wbGV0ZSIsOSwwKSxGdCgib25JbnB1dENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkub25JbnB1dEZpcmVkKGgpKX0pKCJvbkxvYWRpbmdNb3JlIixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS5hdXRvY29tcGxldGVMb2FkaW5n''@;'; put 'put ''TW9yZShoKSl9KSxZcigzKSxoZSgpLGxpKCl9aWYoMiZjKXtjb25zdCBhPVJlKCk7ZmUoKSxNZSgiaW5wdXRJZCIsYS5pbnB1dElkKSgidmFsdWUiLChudWxsPT1hLnZhbHVlP251bGw6YS52YWx1ZS50b1N0cmluZygpKXx8IiIpKCJlbmFibGVMb2FkTW9yZSIsYS5lbmFibGVMb2FkTW9yZSko''@;'; put 'put ''ImVtaXRPbmx5U2VsZWN0ZWQiLGEuZW1pdE9ubHlTZWxlY3RlZCkoImRpc2FibGVkIixhLmRpc2FibGVkKX19bGV0IEQ2ZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5pbnB1dElkPSIiLHRoaXMudmFsdWU9IiIsdGhpcy5kaXNhYmxlZD0hMSx0aGlzLnR5cGU9InRleHQiLHRo''@;'; put 'put ''aXMuZGlzYWJsZVNvZnRzZWxlY3Q9ITEsdGhpcy5lbWl0T25seVNlbGVjdGVkPSExLHRoaXMuZW5hYmxlTG9hZE1vcmU9ITEsdGhpcy52YWx1ZUNoYW5nZT1uZXcgS3IsdGhpcy5vbklucHV0RXZlbnQ9bmV3IEtyLHRoaXMuZm9jdXNpbklucHV0PW5ldyBLcix0aGlzLm9uQXV0b2NvbXBsZXRl''@;'; put 'put ''TG9hZGluZ01vcmU9bmV3IEtyLHRoaXMuc2VsZWN0ZWRMYWJlbENoYW5nZT1uZXcgS3IsdGhpcy50ZW1wPSIiLHRoaXMuaW5wdXRGb2N1c2VkPSExLHRoaXMubGFiZWxTZWxlY3RlZD0iZmlyc3QifW5nT25DaGFuZ2VzKGEpe2EudmFsdWUmJmEudmFsdWUuY3VycmVudFZhbHVlIT09YS52YWx1''@;'; put 'put ''ZS5wcmV2aW91c1ZhbHVlJiZ0aGlzLnZhbHVlQ2hhbmdlLmVtaXQoYS52YWx1ZS5jdXJyZW50VmFsdWUpfW5nT25Jbml0KCl7fWF1dG9jb21wbGV0ZUxvYWRpbmdNb3JlKGEpe3RoaXMub25BdXRvY29tcGxldGVMb2FkaW5nTW9yZS5lbWl0KGEpfW9uSW5wdXRGaXJlZChhKXtjb25zdCBkPWEu''@;'; put 'put ''dGFyZ2V0LnZhbHVlO3RoaXMudGVtcD1kLHRoaXMudmFsdWVDaGFuZ2UuZW1pdChkKSx0aGlzLm9uSW5wdXRFdmVudC5lbWl0KGEpfW9uRGF0ZUlucHV0RmlyZWQoYSl7dGhpcy50ZW1wPWEsdGhpcy52YWx1ZUNoYW5nZS5lbWl0KGEpLHRoaXMub25JbnB1dEV2ZW50LmVtaXQoYSl9b25JbnB1''@;'; put 'put ''dE1vdXNlT3V0KCl7dGhpcy5kaXNhYmxlU29mdHNlbGVjdHx8KHRoaXMudmFsdWU9dGhpcy50ZW1wLHRoaXMudGVtcD0iIil9b25JbnB1dE1vdXNlT3Zlcigpe3RoaXMuZGlzYWJsZVNvZnRzZWxlY3R8fCh0aGlzLnRlbXA9dGhpcy52YWx1ZT90aGlzLnZhbHVlOiIiLHRoaXMudmFsdWU9IiIp''@;'; put 'put ''fW9uRm9jdXNpbklucHV0KGEpe3RoaXMuZm9jdXNpbklucHV0LmVtaXQoYSl9b25DaGFuZ2VMYWJlbChhKXt0aGlzLmxhYmVsU2VsZWN0ZWQ9YSx0aGlzLnNlbGVjdGVkTGFiZWxDaGFuZ2UuZW1pdCgiZmlyc3QiPT09YT90aGlzLmxhYmVsOnRoaXMuc2Vjb25kTGFiZWwpfXN0YXRpY3t0aGlz''@;'; put 'put ''Llx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLXNvZnQtc2VsZWN0Il1dLHZpZXdRdWVyeTpmdW5jdGlvbihkLGgpe2lmKDEmZCYmcWEoTG10LDUpLDImZCl7bGV0IGY7Q2koZj1T''@;'; put 'put ''aSgpKSYmKGguaW5wdXRFbGVtZW50PWYuZmlyc3QpfX0saW5wdXRzOntpbnB1dElkOiJpbnB1dElkIixsYWJlbDoibGFiZWwiLHNlY29uZExhYmVsOiJzZWNvbmRMYWJlbCIsdmFsdWU6InZhbHVlIixkaXNhYmxlZDoiZGlzYWJsZWQiLHR5cGU6InR5cGUiLGRpc2FibGVTb2Z0c2VsZWN0OiJk''@;'; put 'put ''aXNhYmxlU29mdHNlbGVjdCIsZW1pdE9ubHlTZWxlY3RlZDoiZW1pdE9ubHlTZWxlY3RlZCIsZW5hYmxlTG9hZE1vcmU6ImVuYWJsZUxvYWRNb3JlIn0sb3V0cHV0czp7dmFsdWVDaGFuZ2U6InZhbHVlQ2hhbmdlIixvbklucHV0RXZlbnQ6Im9uSW5wdXRFdmVudCIsZm9jdXNpbklucHV0OiJm''@;'; put 'put ''b2N1c2luSW5wdXQiLG9uQXV0b2NvbXBsZXRlTG9hZGluZ01vcmU6Im9uQXV0b2NvbXBsZXRlTG9hZGluZ01vcmUiLHNlbGVjdGVkTGFiZWxDaGFuZ2U6InNlbGVjdGVkTGFiZWxDaGFuZ2UifSxmZWF0dXJlczpbd2xdLG5nQ29udGVudFNlbGVjdG9yczpPbXQsZGVjbHM6NSx2YXJzOjUsY29u''@;'; put 'put ''c3RzOltbImlucHV0IiwiIl0sWyJjbGFzcyIsImNsci1jb250cm9sLWxhYmVsIiwzLCJzZWNvbmRMYWJlbEFjdGl2ZSIsNCwibmdJZiJdLFszLCJuZ1N3aXRjaCJdLFs0LCJuZ1N3aXRjaENhc2UiXSxbMSwiY2xyLWNvbnRyb2wtbGFiZWwiXSxbMywiY2xpY2siXSxbNCwibmdJZiJdLFsidHlw''@;'; put 'put ''ZSIsImRhdGUiLCJjbHJEYXRlIiwiIiwzLCJjbHJEYXRlQ2hhbmdlIiwiZm9jdXMiLCJmb2N1c291dCIsImZvY3VzaW4iLCJtb3VzZW92ZXIiLCJtb3VzZW91dCIsImlkIiwicGxhY2Vob2xkZXIiLCJjbHJEYXRlIiwiZGlzYWJsZWQiXSxbInR5cGUiLCJ0aW1lIiwic3RlcCIsIjEiLDEsImlu''@;'; put 'put ''cHV0LXZhbCIsMywiaW5wdXQiLCJmb2N1cyIsImZvY3Vzb3V0IiwiZm9jdXNpbiIsIm1vdXNlb3ZlciIsIm1vdXNlb3V0IiwidmFsdWUiLCJpZCIsImRpc2FibGVkIl0sWyJ0eXBlIiwidGV4dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsImF1dG9mb2N1cyIsIiIsMSwiaW5wdXQtdmFsIiwzLCJv''@;'; put 'put ''bklucHV0Q2hhbmdlIiwib25Mb2FkaW5nTW9yZSIsImlucHV0SWQiLCJ2YWx1ZSIsImVuYWJsZUxvYWRNb3JlIiwiZW1pdE9ubHlTZWxlY3RlZCIsImRpc2FibGVkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYoc2EoKSxndCgwLEZtdCw0LDYsImxhYmVsIiwxKSxzaSgxLDIpLGd0''@;'; put 'put ''KDIsSG10LDQsOCwibmctY29udGFpbmVyIiwzKSgzLE5tdCwyLDQsIm5nLWNvbnRhaW5lciIsMykoNCxWbXQsNCw1LCJuZy1jb250YWluZXIiLDMpLGxpKCkpLDImZCYmKE1lKCJuZ0lmIixoLmxhYmVsKSxmZSgpLE1lKCJuZ1N3aXRjaCIsaC50eXBlKSxmZSgpLE1lKCJuZ1N3aXRjaENhc2Ui''@;'; put 'put ''LCJkYXRlIiksZmUoKSxNZSgibmdTd2l0Y2hDYXNlIiwidGltZSIpLGZlKCksTWUoIm5nU3dpdGNoQ2FzZSIsInRleHQiKSl9LGRlcGVuZGVuY2llczpbYmEsUzIsY3AsZHMsWXgsSkwsc0csazZlLFJtdF0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKSxTdz0oKCk9PntjbGFzcyBj''@;'; put 'put ''e3NldCBuZ1ZhcihhKXt0aGlzLmNvbnRleHQuJGltcGxpY2l0PXRoaXMuY29udGV4dC5uZ1Zhcj1hLHRoaXMuaGFzVmlld3x8KHRoaXMudmNSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMudGVtcGxhdGVSZWYsdGhpcy5jb250ZXh0KSx0aGlzLmhhc1ZpZXc9ITApfWNvbnN0cnVjdG9yKGEs''@;'; put 'put ''ZCl7dGhpcy50ZW1wbGF0ZVJlZj1hLHRoaXMudmNSZWY9ZCx0aGlzLmNvbnRleHQ9eyRpbXBsaWNpdDpudWxsLG5nVmFyOm51bGx9LHRoaXMuaGFzVmlldz0hMX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZShTbCksR2UoRG8pKX19c3RhdGlj''@;'; put 'put ''e3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsIm5nVmFyIiwiIl1dLGlucHV0czp7bmdWYXI6Im5nVmFyIn19KX19cmV0dXJuIGN9KSgpLEJtdD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuaGVscGVyU2VydmljZT1hfXRyYW5zZm9ybShhLGQ9ImRh''@;'; put 'put ''eXMiLGg9ITEpe2lmKHZvaWQgMD09PWEmJihhPSIiKSwic3RyaW5nIiE9dHlwZW9mIGEmJihhPWEudG9TdHJpbmcoKSksMD09PWEubGVuZ3RoKXtpZigiZGF5cyI9PT1kKXJldHVybiBudWxsO2lmKCJzZWNvbmRzIj09PWQpcmV0dXJuIGg/IjExOjAwOjAwIjpudWxsfWxldCBmPXRoaXMuaGVs''@;'; put 'put ''cGVyU2VydmljZS5jb252ZXJ0U2FzRGF5c1RvSnNEYXRlKGEsZCk7aWYoND09PWEuc3BsaXQoIjoiKS5sZW5ndGgpe2NvbnN0IE09YS5zcGxpdCgiOiIpO2Y9bmV3IERhdGUoTVswXSksZi5zZXRIb3VycyhwYXJzZUludChNWzFdKSksZi5zZXRNaW51dGVzKHBhcnNlSW50KE1bMl0pKSxmLnNl''@;'; put 'put ''dFNlY29uZHMocGFyc2VJbnQoTVszXSkpfWVsc2UgaXNOYU4oTnVtYmVyKGEpKSYmKGY9bmV3IERhdGUoYSkpO2xldCB2PWAke3RoaXMuaGVscGVyU2VydmljZS5hZGRMZWFkaW5nWmVybyhmLmdldEhvdXJzKCkudG9TdHJpbmcoKSl9OiR7dGhpcy5oZWxwZXJTZXJ2aWNlLmFkZExlYWRpbmda''@;'; put 'put ''ZXJvKGYuZ2V0TWludXRlcygpLnRvU3RyaW5nKCkpfToke3RoaXMuaGVscGVyU2VydmljZS5hZGRMZWFkaW5nWmVybyhmLmdldFNlY29uZHMoKS50b1N0cmluZygpKX1gO3JldHVybiBoP3Y6Zn1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZShT''@;'; put 'put ''dSwxNikpfX1zdGF0aWN7dGhpcy5cdTAyNzVwaXBlPWxsKHtuYW1lOiJzYXNUb0pzRGF0ZSIsdHlwZTpjLHB1cmU6ITB9KX19cmV0dXJuIGN9KSgpLGptdD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuaGVscGVyU2VydmljZT1hfXRyYW5zZm9ybShhKXtpZihudWxsPT1hfHwi''@;'; put 'put ''Ij09PWEpcmV0dXJuIiI7bGV0IGQsaCxmO2lmKCJzdHJpbmciPT10eXBlb2YgYSYmMz09PWEuc3BsaXQoIjoiKS5sZW5ndGgpe2NvbnN0IHY9YS5zcGxpdCgiOiIpO2Q9dlswXSxoPXZbMV0sZj12WzJdfWVsc2UibnVtYmVyIiE9dHlwZW9mIGEmJihhPXBhcnNlSW50KGEpKSxkPU1hdGguZmxv''@;'; put 'put ''b3IoYS8zNjAwKSxoPU1hdGguZmxvb3IoYSUzNjAwLzYwKSxmPU1hdGguZmxvb3IoYSUzNjAwJTYwKTtyZXR1cm5gJHt0aGlzLmhlbHBlclNlcnZpY2UuYWRkTGVhZGluZ1plcm8oZCl9OiR7dGhpcy5oZWxwZXJTZXJ2aWNlLmFkZExlYWRpbmdaZXJvKGgpfToke3RoaXMuaGVscGVyU2Vydmlj''@;'; put 'put ''ZS5hZGRMZWFkaW5nWmVybyhmKX1gfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKFN1LDE2KSl9fXN0YXRpY3t0aGlzLlx1MDI3NXBpcGU9bGwoe25hbWU6InNlY29uZHNQYXJzZXIiLHR5cGU6YyxwdXJlOiEwfSl9fXJldHVybiBjfSkoKTtj''@;'; put 'put ''b25zdCB6bXQ9KGMsbCxhKT0+KHtxdWVyeTpjLHF1ZXJ5SW5kZXg6bCxjbGF1c2VJbmRleDphfSksVW10PShjLGwsYSxkKT0+KHtxdWVyeTpjLHF1ZXJ5SW5kZXg6bCxjbGF1c2VJbmRleDphLGlzRGF0ZVRpbWU6ZH0pLFptdD0oYyxsLGEsZCk9Pih7cmFuZ2U6InN0YXJ0IixxdWVyeTpjLHF1''@;'; put 'put ''ZXJ5VmFsdWVJbmRleDowLHF1ZXJ5SW5kZXg6bCxjbGF1c2VJbmRleDphLGlzRGF0ZVRpbWU6ZH0pLFdtdD0oYyxsLGEsZCk9Pih7cmFuZ2U6ImVuZCIscXVlcnk6YyxxdWVyeVZhbHVlSW5kZXg6MSxxdWVyeUluZGV4OmwsY2xhdXNlSW5kZXg6YSxpc0RhdGVUaW1lOmR9KTtmdW5jdGlvbiBZ''@;'; put 'put ''bXQoYyxsKXtpZigxJmMmJihkZSgwLCJvcHRpb24iLDIyKSxMZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7TWUoInNlbGVjdGVkIixSZSgpLmxvZ2ljT3BlcmF0b3JzWzBdKSxmZSgpLElyKCIgIixhLCIgIil9fWZ1bmN0aW9uIEdtdChjLGwpezEmYyYmKGRlKDAsImRpdiIs''@;'; put 'put ''MjMpLExlKDEsIlxuICAgICAgICAiKSxHdCgyLCJwcm9ncmVzcyIpLExlKDMsIlxuICAgICAgIiksaGUoKSl9ZnVuY3Rpb24gJG10KGMsbCl7MSZjJiZHdCgwLCJkaXYiKX1mdW5jdGlvbiBLbXQoYyxsKXtpZigxJmMmJihkZSgwLCJvcHRpb24iLDIyKSxMZSgxKSxoZSgpKSwyJmMpe2NvbnN0''@;'; put 'put ''IGE9bC4kaW1wbGljaXQ7TWUoInNlbGVjdGVkIixSZSgyKS5sb2dpY09wZXJhdG9yc1swXSksZmUoKSxJcigiICIsYSwiICIpfX1mdW5jdGlvbiBxbXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJidXR0b24iLDMyKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEp''@;'; put 'put ''LEN0KFJlKDIpLmFkZEdyb3VwQ2xhdXNlKCkpfSksR3QoMSwiY2xyLWljb24iLDMzKSxkZSgyLCJzcGFuIiksTGUoMywiR3JvdXAiKSxoZSgpKCl9fWZ1bmN0aW9uIFhtdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci1pY29uIiwzNCksRnQoImNsaWNrIixmdW5jdGlvbigp''@;'; put 'put ''e3d0KGEpO2NvbnN0IGg9UmUoKS5pbmRleDtyZXR1cm4gQ3QoUmUoKS5yZW1vdmVHcm91cENsYXVzZShoKSl9KSxoZSgpfX1mdW5jdGlvbiBKbXQoYyxsKXtpZigxJmMmJihkZSgwLCJvcHRpb24iKSxMZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoKSxJcigiICIsYS5O''@;'; put 'put ''QU1FLCIgIil9fWZ1bmN0aW9uIFFtdChjLGwpe2lmKDEmYyYmKGRlKDAsIm9wdGlvbiIpLExlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgpLHdyKGEpfX1mdW5jdGlvbiBlNnQoYyxsKXsxJmMmJkZsKDApfWZ1bmN0aW9uIHQ2dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1M''@;'; put 'put ''bigpO2RlKDAsImRpdiIsNTEpKDEsImJ1dHRvbiIsNTIpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPVJlKDIpLmluZGV4LGY9UmUoKS5pbmRleCx2PVJlKCk7cmV0dXJuIHYuY3VycmVudFF1ZXJ5SW5kZXg9aCxDdCh2LmN1cnJlbnRDbGF1c2VJbmRleD1mKX0pLExlKDIs''@;'; put 'put ''IiBDaG9vc2UgdmFsdWVzICIpLGhlKCksZ3QoMyxlNnQsMSwwLCJuZy1jb250YWluZXIiLDUzKSxoZSgpfWlmKDImYyl7Y29uc3QgYT1SZSgyKSxkPWEuJGltcGxpY2l0LGg9YS5pbmRleCxmPVJlKCkuaW5kZXg7UmUoKTtjb25zdCB2PWhhKDM3KTtmZSgzKSxNZSgibmdUZW1wbGF0ZU91dGxl''@;'; put 'put ''dCIsdikoIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IixwTSgyLHptdCxkLGgsZikpfX1mdW5jdGlvbiBuNnQoYyxsKXsxJmMmJkZsKDApfWZ1bmN0aW9uIHI2dChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsNTQpLGd0KDEsbjZ0LDEsMCwibmctY29udGFpbmVyIiw1MyksaGUoKSksMiZjKXtj''@;'; put 'put ''b25zdCBhPVJlKCkubmdWYXIsZD1SZSgpLGg9ZC4kaW1wbGljaXQsZj1kLmluZGV4LHY9UmUoKS5pbmRleCxNPVJlKCksRD1oYSgzMSksWj1oYSgzMyk7ZmUoKSxNZSgibmdUZW1wbGF0ZU91dGxldCIsYSYmTS51c2VQaWNrZXJzP0Q6WikoIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IixKSSgy''@;'; put 'put ''LFVtdCxoLGYsdixhKSl9fWZ1bmN0aW9uIGk2dChjLGwpezEmYyYmRmwoMCl9ZnVuY3Rpb24gYTZ0KGMsbCl7MSZjJiZGbCgwKX1mdW5jdGlvbiBvNnQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDU1KSgxLCJkaXYiLDU2KSxndCgyLGk2dCwxLDAsIm5nLWNvbnRhaW5lciIsNTMpLGhlKCks''@;'; put 'put ''ZGUoMywiZGl2Iiw1NyksZ3QoNCxhNnQsMSwwLCJuZy1jb250YWluZXIiLDUzKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1SZSgpLm5nVmFyLGQ9UmUoKSxoPWQuJGltcGxpY2l0LGY9ZC5pbmRleCx2PVJlKCkuaW5kZXgsTT1SZSgpLEQ9aGEoMzEpLFo9aGEoMzUpO2ZlKDIpLE1lKCJuZ1RlbXBs''@;'; put 'put ''YXRlT3V0bGV0IixhJiZNLnVzZVBpY2tlcnM/RDpaKSgibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLEpJKDQsWm10LGgsZix2LGEpKSxmZSgyKSxNZSgibmdUZW1wbGF0ZU91dGxldCIsYSYmTS51c2VQaWNrZXJzP0Q6WikoIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IixKSSg5LFdtdCxoLGYs''@;'; put 'put ''dixhKSl9fWZ1bmN0aW9uIHM2dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIsNTgpKDEsImxhYmVsIiw3KSxMZSgyLCJWYWx1ZSIpLGhlKCksZGUoMywiaW5wdXQiLDU5KSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1SZSgyKS4kaW1w''@;'; put 'put ''bGljaXQ7cmV0dXJuIG1pKGYudmFsdWUsaCl8fChmLnZhbHVlPWgpLEN0KGgpfSksRnQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9UmUoMikuaW5kZXgsdj1SZSgpLmluZGV4O3JldHVybiBDdChSZSgpLnNldFZhcmlhYmxlVmFsdWVzKGgsZix2KSl9KSxoZSgp''@;'; put 'put ''KCl9aWYoMiZjKXtjb25zdCBhPVJlKDIpLiRpbXBsaWNpdDtmZSgzKSxwaSgibmdNb2RlbCIsYS52YWx1ZSl9fWZ1bmN0aW9uIGw2dChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsNDYpLGd0KDEsdDZ0LDQsNiwiZGl2Iiw0NykoMixyNnQsMiw3LCJkaXYiLDQ4KSgzLG82dCw1LDE0LCJkaXYi''@;'; put 'put ''LDQ5KSg0LHM2dCw0LDEsImRpdiIsNTApLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgpLiRpbXBsaWNpdDtmZSgpLE1lKCJuZ0lmIiwiSU4iPT09YS5vcGVyYXRvcnx8Ik5PVCBJTiI9PT1hLm9wZXJhdG9yKSxmZSgpLE1lKCJuZ0lmIiwiQkVUV0VFTiIhPT1hLm9wZXJhdG9yJiYiSU4iIT09YS5v''@;'; put 'put ''cGVyYXRvciYmIk5PVCBJTiIhPT1hLm9wZXJhdG9yJiYiTElLRSIhPT1hLm9wZXJhdG9yJiYiQ09OVEFJTlMiIT09YS5vcGVyYXRvciYmIkJFR0lOU19XSVRIIiE9PWEub3BlcmF0b3IpLGZlKCksTWUoIm5nSWYiLCJCRVRXRUVOIj09PWEub3BlcmF0b3IpLGZlKCksTWUoIm5nSWYiLCJMSUtF''@;'; put 'put ''Ij09PWEub3BlcmF0b3J8fCJCRUdJTlNfV0lUSCI9PT1hLm9wZXJhdG9yfHwiQ09OVEFJTlMiPT09YS5vcGVyYXRvcil9fWZ1bmN0aW9uIGM2dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIsMTApKDEsImRpdiIsMzUpKDIsImRpdiIsMzYpKDMsImFwcC1zb2Z0LXNlbGVj''@;'; put 'put ''dCIsMzcpLGdpKCJ2YWx1ZUNoYW5nZSIsZnVuY3Rpb24oaCl7Y29uc3QgZj13dChhKS4kaW1wbGljaXQ7cmV0dXJuIG1pKGYudmFyaWFibGUsaCl8fChmLnZhcmlhYmxlPWgpLEN0KGgpfSksRnQoIm9uSW5wdXRFdmVudCIsZnVuY3Rpb24oaCl7Y29uc3QgZj13dChhKSx2PWYuJGltcGxpY2l0''@;'; put 'put ''LE09Zi5pbmRleCxEPVJlKCkuaW5kZXg7cmV0dXJuIEN0KFJlKCkudmFyaWFibGVJbnB1dENoYW5nZSh2LnZhcmlhYmxlLE0sRCxoKSl9KSxndCg0LEptdCwyLDEsIm9wdGlvbiIsMzgpLGhlKCkoKSgpLGRlKDUsImRpdiIsMzkpKDYsImNsci1zZWxlY3QtY29udGFpbmVyIikoNywibGFiZWwi''@;'; put 'put ''KSxMZSg4LCJPcGVyYXRvciIpLGhlKCksZGUoOSwic2VsZWN0Iiw0MCksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe2NvbnN0IGY9d3QoYSkuJGltcGxpY2l0O3JldHVybiBtaShmLm9wZXJhdG9yLGgpfHwoZi5vcGVyYXRvcj1oKSxDdChoKX0pLEZ0KCJuZ01vZGVsQ2hhbmdlIixm''@;'; put 'put ''dW5jdGlvbigpe2NvbnN0IGg9d3QoYSksZj1oLiRpbXBsaWNpdCx2PWguaW5kZXgsTT1SZSgpLmluZGV4O3JldHVybiBDdChSZSgpLnNldFZhcmlhYmxlT3BlcmF0b3IodixmLm9wZXJhdG9yLE0pKX0pLGd0KDEwLFFtdCwyLDEsIm9wdGlvbiIsMzgpLGhlKCkoKSgpLGd0KDExLGw2dCw1LDQs''@;'; put 'put ''ImRpdiIsNDEpLGRlKDEyLCJkaXYiLDQyKSgxMywiYnV0dG9uIiw0MyksRnQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSkuaW5kZXgsZj1SZSgpLmluZGV4O3JldHVybiBDdChSZSgpLnJlbW92ZUNsYXVzZShoLGYpKX0pLEd0KDE0LCJjbHItaWNvbiIsNDQpKDE1LCJzcGFuIiks''@;'; put 'put ''aGUoKSxkZSgxNiwiYnV0dG9uIiw0NSksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9UmUoKS5pbmRleDtyZXR1cm4gQ3QoUmUoKS5hZGRDbGF1c2UoaCkpfSksR3QoMTcsImNsci1pY29uIiwzMykoMTgsInNwYW4iKSxoZSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1w''@;'; put 'put ''bGljaXQsZD1sLmluZGV4LGg9UmUoKS5pbmRleCxmPVJlKCk7VHIoImludmFsaWQtY2xhdXNlIixhLmludmFsaWRDbGF1c2UpLGZlKDMpLE1lKCJpZCIsInNlbGVjdF92YWxzX3Zhcl9pZCIrZCsiXyIraCkoImlucHV0SWQiLCJ2YWxzX3Zhcl9pZCIrZCsiXyIraCkoImVtaXRPbmx5U2VsZWN0''@;'; put 'put ''ZWQiLCEwKSxwaSgidmFsdWUiLGEudmFyaWFibGUpLGZlKCksTWUoIm5nRm9yT2YiLGYuY29scyksZmUoNSkscGkoIm5nTW9kZWwiLGEub3BlcmF0b3IpLGZlKCksTWUoIm5nRm9yT2YiLGEub3BlcmF0b3JzKSxmZSgpLE1lKCJuZ1ZhciIsIkRBVEUiPT09YS5kZHR5cGV8fCJEQVRFVElNRSI9''@;'; put 'put ''PT1hLmRkdHlwZXx8IlRJTUUiPT09YS5kZHR5cGUpLGZlKDIpLE1lKCJkaXNhYmxlZCIsMT09PWYuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50cy5sZW5ndGgpfX1mdW5jdGlvbiB1NnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiLDI0KSgxLCJkaXYiLDEwKSgyLCJk''@;'; put 'put ''aXYiLDI1KSgzLCJkaXYiLDI2KSg0LCJjbHItc2VsZWN0LWNvbnRhaW5lciIpKDUsImxhYmVsIiksTGUoNiwiTG9naWMiKSxoZSgpLGRlKDcsInNlbGVjdCIsMjcpLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtjb25zdCBmPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gbWkoZi5jbGF1''@;'; put 'put ''c2VMb2dpYyxoKXx8KGYuY2xhdXNlTG9naWM9aCksQ3QoaCl9KSxGdCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS5zZXRMb2dpYygpKX0pLGd0KDgsS210LDIsMiwib3B0aW9uIiwxMyksaGUoKSgpKCksR3QoOSwiYnIiKSxndCgxMCxxbXQsNCwwLCJi''@;'; put 'put ''dXR0b24iLDI4KSxoZSgpLGRlKDExLCJkaXYiLDI5KSxndCgxMixYbXQsMSwwLCJjbHItaWNvbiIsMzApKDEzLGM2dCwxOSwxMSwiZGl2IiwzMSksaGUoKSgpLEd0KDE0LCJiciIpLGhlKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9UmUoKTtmZSgpLFRyKCJpbnZhbGlkLWNsYXVz''@;'; put 'put ''ZSIsYS5pbnZhbGlkQ2xhdXNlKSxmZSg2KSxwaSgibmdNb2RlbCIsYS5jbGF1c2VMb2dpYyksTWUoImRpc2FibGVkIixhLmVsZW1lbnRzLmxlbmd0aDwyKSxmZSgpLE1lKCJuZ0Zvck9mIixkLmxvZ2ljT3BlcmF0b3JzKSxmZSgyKSxNZSgibmdJZiIsZC5pbm5lcldpZHRoPjc2OCksZmUoMiks''@;'; put 'put ''TWUoIm5nSWYiLGQuY2xhdXNlcy5xdWVyeU9iai5sZW5ndGg+MSksZmUoKSxNZSgibmdGb3JPZiIsYS5lbGVtZW50cyl9fWZ1bmN0aW9uIGQ2dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO3NpKDApLGRlKDEsImFwcC1zb2Z0LXNlbGVjdCIsNjIpLGVsKDIsInNhc1RvSnNEYXRlIiksZWwo''@;'; put 'put ''Mywic2FzVG9Kc0RhdGUiKSxGdCgidmFsdWVDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9UmUoKSx2PWYucXVlcnksTT1mLnF1ZXJ5VmFsdWVJbmRleCxEPWYucXVlcnlJbmRleCxaPWYuY2xhdXNlSW5kZXg7cmV0dXJuIEN0KFJlKCkuZGF0ZUNoYW5nZShoLHYsRCxaLE0pKX0p''@;'; put 'put ''LGhlKCksbGkoKX1pZigyJmMpe2NvbnN0IGE9UmUoKSxkPWEucXVlcnksaD1hLnF1ZXJ5VmFsdWVJbmRleCxmPWEucXVlcnlJbmRleCx2PWEuY2xhdXNlSW5kZXg7ZmUoKSxNZSgiZGlzYWJsZVNvZnRzZWxlY3QiLCEwKSgiaW5wdXRJZCIsInZhbHNfZGF0ZSIrZisiXyIrdikoInZhbHVlIix2''@;'; put 'put ''b2lkIDAhPT1oP0RjKDIsMyxkLnZhbHVlW2hdKTpEYygzLDUsZC52YWx1ZSkpfX1mdW5jdGlvbiBoNnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtzaSgwKSxkZSgxLCJhcHAtc29mdC1zZWxlY3QiLDYzKSxlbCgyLCJzYXNUb0pzRGF0ZSIpLGVsKDMsInNhc1RvSnNEYXRlIiksRnQoInZh''@;'; put 'put ''bHVlQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPVJlKCksdj1mLnF1ZXJ5SW5kZXgsTT1mLmNsYXVzZUluZGV4O3JldHVybiBDdChSZSgpLmdldFF1ZXJ5RGF0ZVRpbWUoTSx2KS5kYXRlPWgpfSkoIm9uSW5wdXRFdmVudCIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPVJlKCks''@;'; put 'put ''Zj1oLnF1ZXJ5LHY9aC5xdWVyeVZhbHVlSW5kZXgsTT1oLnF1ZXJ5SW5kZXgsRD1oLmNsYXVzZUluZGV4O3JldHVybiBDdChSZSgpLmRhdGVUaW1lQ2hhbmdlKGYsTSxELHYpKX0pLGhlKCksZGUoNCwiYXBwLXNvZnQtc2VsZWN0Iiw2NCksZWwoNSwic2FzVG9Kc0RhdGUiKSxlbCg2LCJzYXNU''@;'; put 'put ''b0pzRGF0ZSIpLEZ0KCJ2YWx1ZUNoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1SZSgpLHY9Zi5xdWVyeUluZGV4LE09Zi5jbGF1c2VJbmRleDtyZXR1cm4gQ3QoUmUoKS5nZXRRdWVyeURhdGVUaW1lKE0sdikudGltZT1oKX0pKCJvbklucHV0RXZlbnQiLGZ1bmN0aW9uKCl7d3Qo''@;'; put 'put ''YSk7Y29uc3QgaD1SZSgpLGY9aC5xdWVyeSx2PWgucXVlcnlWYWx1ZUluZGV4LE09aC5xdWVyeUluZGV4LEQ9aC5jbGF1c2VJbmRleDtyZXR1cm4gQ3QoUmUoKS5kYXRlVGltZUNoYW5nZShmLE0sRCx2KSl9KSxoZSgpLGxpKCl9aWYoMiZjKXtjb25zdCBhPVJlKCksZD1hLnF1ZXJ5LGg9YS5x''@;'; put 'put ''dWVyeVZhbHVlSW5kZXgsZj1hLnF1ZXJ5SW5kZXgsdj1hLmNsYXVzZUluZGV4O2ZlKCksTWUoImRpc2FibGVTb2Z0c2VsZWN0IiwhMCkoImlucHV0SWQiLCJ2YWxzX2RhdGUiK2YrIl8iK3YpKCJ2YWx1ZSIsdm9pZCAwIT09aD96OCgyLDYsZC52YWx1ZVtoXSwic2Vjb25kcyIpOno4KDMsOSxk''@;'; put 'put ''LnZhbHVlLCJzZWNvbmRzIikpLGZlKDMpLE1lKCJkaXNhYmxlU29mdHNlbGVjdCIsITApKCJpbnB1dElkIiwidmFsc190aW1lIitmKyJfIit2KSgidmFsdWUiLHZvaWQgMCE9PWg/YlUoNSwxMixkLnZhbHVlW2hdLCJzZWNvbmRzIiwhMCk6YlUoNiwxNixkLnZhbHVlLCJzZWNvbmRzIiwhMCkp''@;'; put 'put ''fX1mdW5jdGlvbiBmNnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtzaSgwKSxkZSgxLCJhcHAtc29mdC1zZWxlY3QiLDY1KSxlbCgyLCJzZWNvbmRzUGFyc2VyIiksZWwoMywic2Vjb25kc1BhcnNlciIpLEZ0KCJvbklucHV0RXZlbnQiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9UmUo''@;'; put 'put ''KSx2PWYucXVlcnksTT1mLnF1ZXJ5VmFsdWVJbmRleCxEPWYucXVlcnlJbmRleCxaPWYuY2xhdXNlSW5kZXg7cmV0dXJuIEN0KFJlKCkudGltZUNoYW5nZShoLHYsRCxaLE0pKX0pLGhlKCksbGkoKX1pZigyJmMpe2NvbnN0IGE9UmUoKSxkPWEucXVlcnksaD1hLnF1ZXJ5VmFsdWVJbmRleCxm''@;'; put 'put ''PWEucXVlcnlJbmRleCx2PWEuY2xhdXNlSW5kZXg7ZmUoKSxNZSgiZGlzYWJsZVNvZnRzZWxlY3QiLCEwKSgiaW5wdXRJZCIsInZhbHNfIitmKyJfIit2KSgidmFsdWUiLHZvaWQgMCE9PWg/RGMoMiwzLGQudmFsdWVbaF0pOkRjKDMsNSxkLnZhbHVlKSl9fWZ1bmN0aW9uIHA2dChjLGwpezEm''@;'; put 'put ''YyYmKHNpKDAsNjApLGd0KDEsZDZ0LDQsNywibmctY29udGFpbmVyIiw2MSkoMixoNnQsNywyMCwibmctY29udGFpbmVyIiw2MSkoMyxmNnQsNCw3LCJuZy1jb250YWluZXIiLDYxKSxsaSgpKSwyJmMmJihNZSgibmdTd2l0Y2giLGwucXVlcnkuZGR0eXBlKSxmZSgpLE1lKCJuZ1N3aXRjaENh''@;'; put 'put ''c2UiLCJEQVRFIiksZmUoKSxNZSgibmdTd2l0Y2hDYXNlIiwiREFURVRJTUUiKSxmZSgpLE1lKCJuZ1N3aXRjaENhc2UiLCJUSU1FIikpfWZ1bmN0aW9uIGc2dChjLGwpe2lmKDEmYyYmKGRlKDAsIm9wdGlvbiIsNjgpLExlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtNZSgi''@;'; put 'put ''dmFsdWUiLGEudW5mb3JtYXR0ZWQpLGZlKCksSXIoIiAiLGEuZm9ybWF0dGVkLnRyaW0oKSwiICIpfX1mdW5jdGlvbiBtNnQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiKSxndCgxLGc2dCwyLDIsIm9wdGlvbiIsNjcpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgpLnF1ZXJ5O2ZlKCksTWUoIm5n''@;'; put 'put ''Rm9yT2YiLGEudmFsdWVzKX19ZnVuY3Rpb24gdjZ0KGMsbCl7aWYoMSZjJiYoZGUoMCwib3B0aW9uIiw2OCksTGUoMSksaGUoKSksMiZjKXtjb25zdCBhPVJlKCkuJGltcGxpY2l0O01lKCJ2YWx1ZSIsYS5OQU1FKSxmZSgpLElyKCIgIixhLk5BTUUsIiAiKX19ZnVuY3Rpb24gYjZ0KGMsbCl7''@;'; put 'put ''aWYoMSZjJiYoc2koMCksZ3QoMSx2NnQsMiwyLCJvcHRpb24iLDY5KSxsaSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1SZSgyKS5xdWVyeTtmZSgpLE1lKCJuZ0lmIixhLlRZUEU9PT1kLnR5cGUpfX1mdW5jdGlvbiB5NnQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiKSxndCgxLGI2''@;'; put 'put ''dCwyLDEsIm5nLWNvbnRhaW5lciIsMzgpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgyKTtmZSgpLE1lKCJuZ0Zvck9mIixhLmNvbHMpfX1mdW5jdGlvbiBfNnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJhcHAtc29mdC1zZWxlY3QiLDY2KSxGdCgic2VsZWN0ZWRMYWJlbENoYW5n''@;'; put 'put ''ZSIsZnVuY3Rpb24oaCl7Y29uc3QgZj13dChhKS5xdWVyeTtyZXR1cm4gQ3QoUmUoKS5zZWxlY3RlZExhYmVsQ2hhbmdlKGgsZikpfSksZ2koInZhbHVlQ2hhbmdlIixmdW5jdGlvbihoKXtjb25zdCBmPXd0KGEpLnF1ZXJ5O3JldHVybiBtaShmLnZhbHVlLGgpfHwoZi52YWx1ZT1oKSxDdCho''@;'; put 'put ''KX0pLEZ0KCJvbklucHV0RXZlbnQiLGZ1bmN0aW9uKGgpe2NvbnN0IGY9d3QoYSksdj1mLnF1ZXJ5SW5kZXgsTT1mLmNsYXVzZUluZGV4O3JldHVybiBDdChSZSgpLnNldFZhcmlhYmxlVmFsdWVzKGgudGFyZ2V0LnZhbHVlLHYsTSkpfSkoIm9uQXV0b2NvbXBsZXRlTG9hZGluZ01vcmUiLGZ1''@;'; put 'put ''bmN0aW9uKGgpe2NvbnN0IGY9d3QoYSksdj1mLnF1ZXJ5LE09Zi5xdWVyeUluZGV4LEQ9Zi5jbGF1c2VJbmRleDtyZXR1cm4gQ3QoUmUoKS5vbkF1dG9jb21wbGV0ZUxvYWRpbmdNb3JlKGgsdi52YXJpYWJsZSxNLEQpKX0pLGd0KDEsbTZ0LDIsMSwiZGl2IiwyMCkoMix5NnQsMiwxLCJkaXYi''@;'; put 'put ''LDIwKSxoZSgpfWlmKDImYyl7Y29uc3QgYT1sLnF1ZXJ5LGQ9bC5xdWVyeUluZGV4LGg9bC5jbGF1c2VJbmRleDtNZSgic2Vjb25kTGFiZWwiLCJWYXJpYWJsZSIpKCJlbWl0T25seVNlbGVjdGVkIixhLnZhbHVlVmFyaWFibGUpKCJpbnB1dElkIiwidmFsc18iK2QrIl8iK2gpLHBpKCJ2YWx1''@;'; put 'put ''ZSIsYS52YWx1ZSksTWUoImVuYWJsZUxvYWRNb3JlIixhLm5vYnM+YS52YWx1ZXMubGVuZ3RoKSxmZSgpLE1lKCJuZ0lmIiwhYS52YWx1ZVZhcmlhYmxlKSxmZSgpLE1lKCJuZ0lmIixhLnZhbHVlVmFyaWFibGUpfX1mdW5jdGlvbiB3NnQoYyxsKXtpZigxJmMmJihkZSgwLCJvcHRpb24iLDY4''@;'; put 'put ''KSxMZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7TWUoInZhbHVlIixhLmZvcm1hdHRlZCksZmUoKSxJcigiICIsYS5mb3JtYXR0ZWQsIiAiKX19ZnVuY3Rpb24gQzZ0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiYXBwLXNvZnQtc2VsZWN0Iiw3MCksZ2koInZh''@;'; put 'put ''bHVlQ2hhbmdlIixmdW5jdGlvbihoKXtjb25zdCBmPXd0KGEpLHY9Zi5xdWVyeSxNPWYucXVlcnlWYWx1ZUluZGV4O3JldHVybiBtaSh2LnZhbHVlW01dLGgpfHwodi52YWx1ZVtNXT1oKSxDdChoKX0pLEZ0KCJvbklucHV0RXZlbnQiLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKSxmPWgucXVl''@;'; put 'put ''cnksdj1oLnF1ZXJ5SW5kZXgsTT1oLmNsYXVzZUluZGV4O3JldHVybiBDdChSZSgpLnNldFZhcmlhYmxlVmFsdWVzKGYudmFsdWUsdixNKSl9KSgib25BdXRvY29tcGxldGVMb2FkaW5nTW9yZSIsZnVuY3Rpb24oaCl7Y29uc3QgZj13dChhKSx2PWYucXVlcnksTT1mLnF1ZXJ5SW5kZXgsRD1m''@;'; put 'put ''LmNsYXVzZUluZGV4O3JldHVybiBDdChSZSgpLm9uQXV0b2NvbXBsZXRlTG9hZGluZ01vcmUoaCx2LnZhcmlhYmxlLE0sRCkpfSksZ3QoMSx3NnQsMiwyLCJvcHRpb24iLDY3KSxoZSgpfWlmKDImYyl7Y29uc3QgYT1sLnJhbmdlLGQ9bC5xdWVyeSxoPWwucXVlcnlWYWx1ZUluZGV4O01lKCJp''@;'; put 'put ''bnB1dElkIiwidmFscy0iK2ErIl8iK2wucXVlcnlJbmRleCsiXyIrbC5jbGF1c2VJbmRleCkscGkoInZhbHVlIixkLnZhbHVlW2hdKSxNZSgiZW5hYmxlTG9hZE1vcmUiLGQubm9icz5kLnZhbHVlcy5sZW5ndGgpKCJkaXNhYmxlZCIsdm9pZCAwIT09aCYmInN0YXJ0IiE9PWEmJiFkLnZhbHVl''@;'; put 'put ''WzBdKSxmZSgpLE1lKCJuZ0Zvck9mIixkLnZhbHVlcyl9fWZ1bmN0aW9uIFM2dChjLGwpezEmYyYmKGRlKDAsImg1Iiw3OCksTGUoMSwiIE5vIHZhbHVlcyBhdmFpbGFibGUuICIpLGhlKCkpfWZ1bmN0aW9uIE02dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci1jaGVja2Jv''@;'; put 'put ''eC13cmFwcGVyIikoMSwiaW5wdXQiLDgwKSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7Y29uc3QgZj13dChhKS5pbmRleCx2PVJlKDIpLnF1ZXJ5O3JldHVybiBtaSh2LnZhbHVlW2ZdLmNoZWNrZWQsaCl8fCh2LnZhbHVlW2ZdLmNoZWNrZWQ9aCksQ3QoaCl9KSxGdCgibmdNb2Rl''@;'; put 'put ''bENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1SZSgyKSx2PWYucXVlcnlJbmRleCxNPWYuY2xhdXNlSW5kZXg7cmV0dXJuIEN0KFJlKCkuc2V0VmFyaWFibGVWYWx1ZXMoaCx2LE0pKX0pLGhlKCksZGUoMiwibGFiZWwiKSxMZSgzKSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPWwu''@;'; put 'put ''JGltcGxpY2l0LGQ9bC5pbmRleCxoPVJlKDIpLnF1ZXJ5O2ZlKCkscGkoIm5nTW9kZWwiLGgudmFsdWVbZF0uY2hlY2tlZCksZmUoMiksSXIoIiAiLGEuZm9ybWF0dGVkLCIgIil9fWZ1bmN0aW9uIHg2dChjLGwpe2lmKDEmYyYmKGRlKDAsInNlY3Rpb24iLDc5KSgxLCJjbHItY2hlY2tib3gt''@;'; put 'put ''Y29udGFpbmVyIiksZ3QoMixNNnQsNCwyLCJjbHItY2hlY2tib3gtd3JhcHBlciIsMzgpLGhlKCkoKSksMiZjKXtjb25zdCBhPVJlKCkucXVlcnk7ZmUoMiksTWUoIm5nRm9yT2YiLGEudmFsdWVzKX19ZnVuY3Rpb24gRTZ0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLW1v''@;'; put 'put ''ZGFsIiw3MSkoMSwiaDMiLDcyKSxMZSgyLCJTZWxlY3QgdmFsdWVzIiksaGUoKSxkZSgzLCJkaXYiLDczKSxndCg0LFM2dCwyLDAsImg1Iiw3NCkoNSx4NnQsMywxLCJzZWN0aW9uIiw3NSksaGUoKSxkZSg2LCJkaXYiLDc2KSg3LCJidXR0b24iLDc3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7''@;'; put 'put ''d3QoYSk7Y29uc3QgaD1SZSgpO3JldHVybiBoLmN1cnJlbnRRdWVyeUluZGV4PS0xLEN0KGguY3VycmVudENsYXVzZUluZGV4PS0xKX0pLExlKDgsIiBBcHBseSAiKSxoZSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9bC5xdWVyeSxkPWwucXVlcnlJbmRleCxoPWwuY2xhdXNlSW5kZXgsZj1SZSgp''@;'; put 'put ''O01lKCJjbHJNb2RhbE9wZW4iLGYuY3VycmVudFF1ZXJ5SW5kZXg9PT1kJiZmLmN1cnJlbnRDbGF1c2VJbmRleD09PWgpKCJjbHJNb2RhbENsb3NhYmxlIiwhMSksZmUoNCksTWUoIm5nSWYiLCFmLmlzQXJyKGEudmFsdWUpKSxmZSgpLE1lKCJuZ0lmIixmLmlzQXJyKGEudmFsdWUpKX19IWZ1''@;'; put 'put ''bmN0aW9uIHJ3ZShjLGwsYSl7KGZ1bmN0aW9uIFI5ZShjLGwsYSl7InN0cmluZyIhPXR5cGVvZiBsJiYoYT1sLGw9Y1tlYy5Mb2NhbGVJZF0pLGw9bC50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL18vZywiLSIpLFViW2xdPWMsYSYmKFViW2xdW2VjLkV4dHJhRGF0YV09YSl9KShjLGwsYSl9KFRt''@;'; put 'put ''dCk7bGV0IFhlZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMuc2FzU3RvcmVTZXJ2aWNlPWEsdGhpcy5ldmVudFNlcnZpY2U9ZCx0aGlzLmhlbHBlclNlcnZpY2U9aCx0aGlzLmNkZj1mLHRoaXMuY2FjaGluZz0hMCx0aGlzLnJvd3NfaW5jcmVtZW50PTEwMCx0aGlz''@;'; put 'put ''LmluaXRpYWxfcm93cz0xZTMsdGhpcy5jbGF1c2VBbXQ9WyIiXSx0aGlzLm51bU9wZXJhdG9ycz1bIj0iLCI8IiwiPiIsIjw9IiwiPj0iLCJCRVRXRUVOIiwiSU4iLCJOT1QgSU4iLCJORSJdLHRoaXMuY2hhck9wZXJhdG9ycz1bIj0iLCI8IiwiPiIsIjw9IiwiPj0iLCJDT05UQUlOUyIsIklO''@;'; put 'put ''IiwiTk9UIElOIiwiTkUiXSx0aGlzLm5vdEluPSExLHRoaXMubm90QXJyPSEwLHRoaXMud2FzQmV0d2Vlbj0hMSx0aGlzLndoZXJlQ2xhdXNlTG9hZGluZz0hMSx0aGlzLmR5bmFtaWNXaGVyZUNsYXVzZT0hMCx0aGlzLnVzZVBpY2tlcnM9ITEsdGhpcy5xdWVyeU9iaj17ZWxlbWVudHM6W3ts''@;'; put 'put ''b2dpYzpudWxsLHR5cGU6bnVsbCxkZHR5cGU6bnVsbCx2YXJpYWJsZTpudWxsLG9wZXJhdG9yOm51bGwsdmFsdWU6bnVsbCx2YWx1ZVZhcmlhYmxlOiExLHN0YXJ0cm93OjAscm93czowLG5vYnM6MCx2YWx1ZXM6W10sb3BlcmF0b3JzOltdfV0sY2xhdXNlTG9naWM6IiIsaW52YWxpZENsYXVz''@;'; put 'put ''ZTohMX0sdGhpcy5zZWxWYXI9e2luZGV4Om51bGwsZm9ybWF0Om51bGwsdHlwZTpudWxsfSx0aGlzLmluT2JqPVt7Y2hlY2tlZDohMSx2YWx1ZTpudWxsfV0sdGhpcy5ncm91cExvZ2ljPSJBTkQiLHRoaXMuY2xhdXNlcz17cXVlcnlPYmo6W3RoaXMucXVlcnlPYmpdLGNsYXVzZUxvZ2ljOltd''@;'; put 'put ''LGdyb3VwTG9naWM6dGhpcy5ncm91cExvZ2ljfSx0aGlzLmxvZ2ljT3BlcmF0b3JzPVsiQU5EIiwiT1IiXSx0aGlzLnF1ZXJ5RGF0ZVRpbWU9W10sdGhpcy5jdXJyZW50Q2xhdXNlSW5kZXg9LTEsdGhpcy5jdXJyZW50UXVlcnlJbmRleD0tMSx0aGlzLnBlbmRpbmdJTlZhbHVlc1NldD1udWxs''@;'; put 'put ''LHRoaXMuaW5uZXJXaWR0aD13aW5kb3cuc2NyZWVuLndpZHRoLHRoaXMuaW5uZXJXaWR0aD43NjgmJih0aGlzLm5vQm9yZGVyPSJib3JkZXItbGVmdDogMnB4IHNvbGlkIGdyYXk7Iil9Z2V0UXVlcnlEYXRlVGltZShhLGQpe2xldCBoPXRoaXMucXVlcnlEYXRlVGltZS5maW5kKGY9PmYuY2xh''@;'; put 'put ''dXNlSW5kZXg9PT1hJiZmLnF1ZXJ5SW5kZXg9PT1kKTtpZighaCl7Y29uc3QgZj10aGlzLnF1ZXJ5RGF0ZVRpbWUucHVzaCh7Y2xhdXNlSW5kZXg6YSxxdWVyeUluZGV4OmQsZGF0ZToiIix0aW1lOiIifSktMTtoPXRoaXMucXVlcnlEYXRlVGltZVtmXX1yZXR1cm4gaH11c2VQaWNrZXJzQ2hh''@;'; put 'put ''bmdlKCl7dGhpcy5xdWVyeURhdGVUaW1lPVtdLHRoaXMudXNlUGlja2VycyYmdGhpcy5jbGF1c2VzLnF1ZXJ5T2JqLmZvckVhY2goYT0+e2EuZWxlbWVudHMuZm9yRWFjaChkPT57WyJEQVRFVElNRSIsIlRJTUUiLCJEQVRFIl0uaW5jbHVkZXMoZC5kZHR5cGUpJiZkLnZhbHVlVmFyaWFibGUm''@;'; put 'put ''JihkLnZhbHVlPSIiLGQudmFsdWVWYXJpYWJsZT0hMSl9KX0pfXJlc2V0RmlsdGVyKCl7dGhpcy53aGVyZVN0cmluZz12b2lkIDAsdGhpcy53aGVyZUNsYXVzZT12b2lkIDAsdGhpcy5xdWVyeU9iaj17ZWxlbWVudHM6W3tsb2dpYzpudWxsLHR5cGU6bnVsbCxkZHR5cGU6bnVsbCx2YXJpYWJs''@;'; put 'put ''ZTpudWxsLG9wZXJhdG9yOm51bGwsdmFsdWU6bnVsbCx2YWx1ZXM6W10sb3BlcmF0b3JzOltdfV19LHRoaXMuY2xhdXNlcz17cXVlcnlPYmo6W3RoaXMucXVlcnlPYmpdLGNsYXVzZUxvZ2ljOltdLGdyb3VwTG9naWM6dGhpcy5ncm91cExvZ2ljfSx0aGlzLndoZXJlQ2xhdXNlRm4oITApfXNl''@;'; put 'put ''dFRvR2xvYmFscygpe2lmKCF0aGlzLmNhY2hpbmcpcmV0dXJuO2xldCBhPSIiOyJob21lIj09PUtuLnJvb3RQYXJhbXx8ImVkaXRvciI9PT1Lbi5yb290UGFyYW0/YT10aGlzLnZpZXdib3hJZD9gdmlld2JveGVzLiR7dGhpcy52aWV3Ym94SWR9YDoiZWRpdG9yIjoidmlldyI9PT1Lbi5yb290''@;'; put 'put ''UGFyYW0mJihhPSJ2aWV3ZXIiKSx5YyhLbixhKS5maWx0ZXIuZ3JvdXBMb2dpYz10aGlzLmdyb3VwTG9naWMsInN0cmluZyI9PXR5cGVvZiB0aGlzLndoZXJlQ2xhdXNlJiYoeWMoS24sYSkuZmlsdGVyLndoZXJlQ2xhdXNlPXRoaXMud2hlcmVDbGF1c2UpLCJzdHJpbmciPT10eXBlb2YgdGhp''@;'; put 'put ''cy5saWJkcyYmKHljKEtuLGEpLmZpbHRlci5saWJkcz10aGlzLmxpYmRzKSx5YyhLbixhKS5maWx0ZXIuY2xhdXNlcz10aGlzLmNsYXVzZXN9Z2V0RnJvbUdsb2JhbHMoKXtpZighdGhpcy5jYWNoaW5nKXJldHVybjtsZXQgYT0iIjsiaG9tZSI9PT1Lbi5yb290UGFyYW18fCJlZGl0b3IiPT09''@;'; put 'put ''S24ucm9vdFBhcmFtP2E9dGhpcy52aWV3Ym94SWQ/YHZpZXdib3hlcy4ke3RoaXMudmlld2JveElkfWA6ImVkaXRvciI6InZpZXciPT09S24ucm9vdFBhcmFtJiYoYT0idmlld2VyIikseWMoS24sYSkuZmlsdGVyLmNvbHMubGVuZ3RoPjAmJih0aGlzLmNvbHM9SlNPTi5wYXJzZShKU09OLnN0''@;'; put 'put ''cmluZ2lmeSh5YyhLbixhKS5maWx0ZXIuY29scykpKSx5YyhLbixhKS5maWx0ZXIudmFscy5sZW5ndGg+MCYmKHRoaXMudmFscz1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHljKEtuLGEpLmZpbHRlci52YWxzKSkpLCIiIT09eWMoS24sYSkuZmlsdGVyLmdyb3VwTG9naWMmJih0aGlzLmdy''@;'; put 'put ''b3VwTG9naWM9eWMoS24sYSkuZmlsdGVyLmdyb3VwTG9naWMsdGhpcy53aGVyZUNsYXVzZT15YyhLbixhKS5maWx0ZXIud2hlcmVDbGF1c2UsdGhpcy5saWJkcz15YyhLbixhKS5maWx0ZXIubGliZHMsdGhpcy5jbGF1c2VzPXljKEtuLGEpLmZpbHRlci5jbGF1c2VzLHRoaXMud2hlcmVDbGF1''@;'; put 'put ''c2VGbigpKX1zZXRHcm91cExvZ2ljKGEpe3RoaXMuZ3JvdXBMb2dpYz1hLHRoaXMuY2xhdXNlcy5ncm91cExvZ2ljPWEsdGhpcy53aGVyZUNsYXVzZUZuKCksdGhpcy5zZXRUb0dsb2JhbHMoKX1kYXRlQ2hhbmdlKGEsZCxoLGYsdil7bGV0IE09dGhpcy5oZWxwZXJTZXJ2aWNlLmNvbnZlcnRK''@;'; put 'put ''c0RhdGVUb1Nhc0RhdGUoYSk7IkJFVFdFRU4iPT09ZC5vcGVyYXRvciYmdm9pZCAwIT09diYmKHRoaXMuY2xhdXNlcy5xdWVyeU9ialtmXS5lbGVtZW50c1toXS52YWx1ZVt2XT1NKSx0aGlzLnNldFZhcmlhYmxlVmFsdWVzKE0saCxmKX1kYXRlVGltZUNoYW5nZShhLGQsaCxmKXtjb25zdCB2''@;'; put 'put ''PXRoaXMuZ2V0UXVlcnlEYXRlVGltZShoLGQpO2lmKCIiPT09di5kYXRlKXtpZigiIj09PWEudmFsdWUpcmV0dXJuO3YuZGF0ZT1hLnZhbHVlLnNwbGl0KCI6IilbMF19Y29uc3QgTT1wYXJzZUludCh2LnRpbWUuc3BsaXQoIjoiKVswXSksRD1wYXJzZUludCh2LnRpbWUuc3BsaXQoIjoiKVsx''@;'; put 'put ''XSksWj1wYXJzZUludCh2LnRpbWUuc3BsaXQoIjoiKVsyXSl8fDA7bGV0IHJlPW5ldyBEYXRlKHYuZGF0ZSksY2U9bmV3IERhdGUocmUuZ2V0RnVsbFllYXIoKSxyZS5nZXRNb250aCgpLHJlLmdldERhdGUoKSxNLEQsWiksYmU9dGhpcy5oZWxwZXJTZXJ2aWNlLmNvbnZlcnRKc0RhdGVUb1Nh''@;'; put 'put ''c0RhdGUoY2UsInNlY29uZHMiKTsiQkVUV0VFTiI9PT1hLm9wZXJhdG9yJiZ2b2lkIDAhPT1mJiYodGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW2RdLnZhbHVlW2ZdPWJlKSx0aGlzLnNldFZhcmlhYmxlVmFsdWVzKGJlLGQsaCl9dGltZUNoYW5nZShhLGQsaCxmLHYpe2E9YS50''@;'; put 'put ''YXJnZXQudmFsdWU7bGV0IGJlPTYwKnBhcnNlSW50KGEuc3BsaXQoIjoiKVswXSkqNjArNjAqcGFyc2VJbnQoYS5zcGxpdCgiOiIpWzFdKSsocGFyc2VJbnQoYS5zcGxpdCgiOiIpWzJdKXx8MCk7IkJFVFdFRU4iPT09ZC5vcGVyYXRvciYmdm9pZCAwIT09diYmKHRoaXMuY2xhdXNlcy5xdWVy''@;'; put 'put ''eU9ialtmXS5lbGVtZW50c1toXS52YWx1ZVt2XT1iZSksdGhpcy5zZXRWYXJpYWJsZVZhbHVlcyhiZSxoLGYpfWR5bmFtaWNXaGVyZUNsYXVzZUNyZWF0b3IoYSxkKXtsZXQgaD1bXTtpZih0aGlzLmNsYXVzZXMucXVlcnlPYmoubGVuZ3RoPjF8fHRoaXMuY2xhdXNlcy5xdWVyeU9ialthXS5l''@;'; put 'put ''bGVtZW50cy5sZW5ndGg+MSlmb3IobGV0IGY9MDtmPHRoaXMuY2xhdXNlcy5xdWVyeU9iai5sZW5ndGg7ZisrKWZvcihsZXQgdj0wO3Y8dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmVsZW1lbnRzLmxlbmd0aDt2Kyspe2lmKGY9PT1hJiZ2PT09ZHx8W251bGwsdm9pZCAwXS5pbmNsdWRlcyh0''@;'; put 'put ''aGlzLmNsYXVzZXMucXVlcnlPYmpbZl0uZWxlbWVudHNbdl0udmFyaWFibGUpfHxbbnVsbCx2b2lkIDBdLmluY2x1ZGVzKHRoaXMuY2xhdXNlcy5xdWVyeU9ialtmXS5lbGVtZW50c1t2XS5vcGVyYXRvcil8fFtudWxsLHZvaWQgMF0uaW5jbHVkZXModGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2Zd''@;'; put 'put ''LmVsZW1lbnRzW3ZdLnZhbHVlKSljb250aW51ZTtsZXQgTT0iIjtjb25zdCBEPXRoaXMuY2xhdXNlcy5xdWVyeU9ialtmXS5lbGVtZW50c1t2XS5vcGVyYXRvcixaPXRoaXMuY2xhdXNlcy5xdWVyeU9ialtmXS5lbGVtZW50c1t2XS52YXJpYWJsZTsiQkVUV0VFTiI9PT1EP009YCR7dGhpcy5j''@;'; put 'put ''bGF1c2VzLnF1ZXJ5T2JqW2ZdLmVsZW1lbnRzW3ZdLnZhbHVlWzBdfSBBTkQgJHt0aGlzLmNsYXVzZXMucXVlcnlPYmpbZl1bdl0udmFsdWVbMV19YDoiSU4iPT09RHx8Ik5PVCBJTiI9PT1EPyh0aGlzLmNsYXVzZXMucXVlcnlPYmpbZl1bdl0udmFsdWUuZm9yRWFjaChyZT0+e2lmKHJlLmNo''@;'; put 'put ''ZWNrZWQpe2xldCBjZT1yZS52YWw7InN0cmluZyIhPXR5cGVvZiBjZXx8KDAsZ2cuaXNTcGVjaWFsTWlzc2luZykoY2UpP00ubGVuZ3RoPjA/TSs9YCwke2NlfWA6TT1gKCR7Y2V9YDpNLmxlbmd0aD4wP00rPWAsJyR7Y2V9J2A6TT1gKCcke2NlfSdgfX0pLE0ubGVuZ3RoPjAmJihNKz0iKSIp''@;'; put 'put ''KToiIj09PXRoaXMuY2xhdXNlcy5xdWVyeU9ialtmXS5lbGVtZW50c1t2XS52YWx1ZT9NPSJjaGFyIj09PXRoaXMuY2xhdXNlcy5xdWVyeU9ialtmXS5lbGVtZW50c1t2XS50eXBlPyInICciOiIuIjoiY2hhciI9PT10aGlzLmNsYXVzZXMucXVlcnlPYmpbZl0uZWxlbWVudHNbdl0udHlwZSYm''@;'; put 'put ''KE09YCcke3RoaXMuY2xhdXNlcy5xdWVyeU9ialtmXS5lbGVtZW50c1t2XS52YWx1ZX0nYCksaC5wdXNoKHtHUk9VUF9MT0dJQzp0aGlzLmNsYXVzZXMuZ3JvdXBMb2dpYyxTVUJHUk9VUF9MT0dJQzp0aGlzLmNsYXVzZXMucXVlcnlPYmpbZl0uY2xhdXNlTG9naWN8fCJBTkQiLFNVQkdST1VQ''@;'; put 'put ''X0lEOmYsVkFSSUFCTEVfTk06WixPUEVSQVRPUl9OTTpELFJBV19WQUxVRTpNfHx0aGlzLmNsYXVzZXMucXVlcnlPYmpbZl0uZWxlbWVudHNbdl0udmFsdWV9KX1yZXR1cm4gaH1nZXRWYWx1ZXNMb2FkTW9yZShhLGQsaCxmKXt2YXIgdj10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtjb25z''@;'; put 'put ''dCBNPXYubGliZHN8fCIiO3RyeXtpZih2b2lkIDAhPT12LmNvbHMpe2ZvcihsZXQgcWU9MDtxZTx2LmNvbHMubGVuZ3RoO3FlKyspdi5jb2xzW3FlXS5OQU1FPT09ZCYmKHYuc2VsVmFyLmluZGV4PXFlKTtjb25zdCBEPXYuY29sc1t2LnNlbFZhci5pbmRleF0uRERUWVBFLHtzdGFydHJvdzpa''@;'; put 'put ''LHJvd3M6cmV9PXYuY2xhdXNlcy5xdWVyeU9ialtmXS5lbGVtZW50c1toXSxjZT12LnJvd3NfaW5jcmVtZW50LGJlPVorcmU7bGV0IEVlPVtdO3YuZHluYW1pY1doZXJlQ2xhdXNlJiYoRWU9di5keW5hbWljV2hlcmVDbGF1c2VDcmVhdG9yKGYsaCkpO2NvbnN0IEJlPVsiREFURVRJTUUiLCJU''@;'; put 'put ''SU1FIiwiREFURSJdLmluY2x1ZGVzKEQpO3Yuc2FzU3RvcmVTZXJ2aWNlLmdldFF1ZXJ5VmFsdWVzKGQsTSxFZSxiZSxjZSkudGhlbihxZT0+e2NvbnN0IHJ0PXFlLnZhbHMse1NUQVJUUk9XOnB0LFJPV1M6ZHQsTk9CUzpKdH09cWUubWV0YVswXTtpZih2LmNsYXVzZXMucXVlcnlPYmpbZl0u''@;'; put 'put ''ZWxlbWVudHNbaF0uc3RhcnRyb3c9cHQsdi5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmVsZW1lbnRzW2hdLnJvd3M9ZHQsdi5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmVsZW1lbnRzW2hdLm5vYnM9SnQsMT09PXJ0Lmxlbmd0aCYmIiI9PT1ydFswXS5GT1JNQVRURUQmJiIiPT09cnRbMF0uVU5GT1JNQVRU''@;'; put 'put ''RUQ/YS5sb2FkTW9yZUZpbmlzaGVkKCExKToodi5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmVsZW1lbnRzW2hdLnZhbHVlcy5wdXNoKC4uLnJ0Lm1hcCh0bj0+e2NvbnN0IE1uPSJudW0iPT09cWUuJHZhbHMudmFycy5VTkZPUk1BVFRFRC50eXBlO2xldCBHcj1NbiYmKDAsZ2cuaXNTcGVjaWFsTWlz''@;'; put 'put ''c2luZykodG4uVU5GT1JNQVRURUQpPyIuIit0bi5VTkZPUk1BVFRFRDp0bi5VTkZPUk1BVFRFRDtyZXR1cm4gTW4mJm51bGw9PT1HciYmKEdyPSIuIikse2Zvcm1hdHRlZDpCZT90bi5GT1JNQVRURUQuc3BsaXQoIi4iKVswXTp0bi5GT1JNQVRURUQsdW5mb3JtYXR0ZWQ6R3J9fSkpLGEubG9h''@;'; put 'put ''ZE1vcmVGaW5pc2hlZChKdC12LmNsYXVzZXMucXVlcnlPYmpbZl0uZWxlbWVudHNbaF0udmFsdWVzLmxlbmd0aD4wKSksdi53aGVyZUNsYXVzZUZuKCksdi5zZXRUb0dsb2JhbHMoKSx2LndoZXJlQ2xhdXNlTG9hZGluZz0hMSxudWxsIT09di5wZW5kaW5nSU5WYWx1ZXNTZXQpe2NvbnN0e2Ns''@;'; put 'put ''YXVzZUluZGV4OnZuLHF1ZXJ5SW5kZXg6Q259PXYucGVuZGluZ0lOVmFsdWVzU2V0O3Yuc2V0SU5WYWx1ZXModm4sQ24pLHYucGVuZGluZ0lOVmFsdWVzU2V0PW51bGx9di5jZGYuZGV0ZWN0Q2hhbmdlcygpfSkuY2F0Y2gocWU9Pnt2LndoZXJlQ2xhdXNlTG9hZGluZz0hMX0pfX1jYXRjaChE''@;'; put 'put ''KXt2LmV2ZW50U2VydmljZS5jYXRjaFJlc3BvbnNlRXJyb3IoInB1YmxpYy9nZXRjb2x2YWxzIixEKX19KSgpfWdldFZhbHVlcyhhLGQsaCl7dmFyIGY9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7Zi53aGVyZUNsYXVzZUxvYWRpbmc9ITA7bGV0IHY9IiI7dm9pZCAwIT09Zi5saWJkcyYm''@;'; put 'put ''KHY9Zi5saWJkcyksZi5jbGVhclZhbHVlcyhkLGgpLGYuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1tkXS52YWx1ZXM9W10sZi5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW2RdLnZhbHVlPSIiLGYuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1tkXS5vcGVyYXRvcj0iPSIs''@;'; put 'put ''Zi5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW2RdLnZhcmlhYmxlPWE7dHJ5e2lmKHZvaWQgMCE9PWYuY29scyl7Zm9yKGxldCByZT0wO3JlPGYuY29scy5sZW5ndGg7cmUrKylmLmNvbHNbcmVdLk5BTUU9PT1hJiYoZi5zZWxWYXIuaW5kZXg9cmUpO2NvbnN0IE09Zi5jb2xzW2Yuc2Vs''@;'; put 'put ''VmFyLmluZGV4XS5ERFRZUEU7Zi5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW2RdLmRkdHlwZT1NLGYuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1tkXS50eXBlPWYuY29sc1tmLnNlbFZhci5pbmRleF0uVFlQRSxmLmNsYXVzZXMucXVlcnlPYmpbaF0uZWxlbWVudHNbZF0ub3Bl''@;'; put 'put ''cmF0b3JzPSJudW0iPT09Zi5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW2RdLnR5cGU/Zi5udW1PcGVyYXRvcnM6Zi5jaGFyT3BlcmF0b3JzO2xldCBEPVtdO2YuZHluYW1pY1doZXJlQ2xhdXNlJiYoRD1mLmR5bmFtaWNXaGVyZUNsYXVzZUNyZWF0b3IoaCxkKSk7Y29uc3QgWj1bIkRB''@;'; put 'put ''VEVUSU1FIiwiVElNRSIsIkRBVEUiXS5pbmNsdWRlcyhNKTtmLnNhc1N0b3JlU2VydmljZS5nZXRRdWVyeVZhbHVlcyhhLHYsRCwxLGYuaW5pdGlhbF9yb3dzKS50aGVuKHJlPT57Y29uc3QgY2U9cmUudmFscyx7U1RBUlRST1c6YmUsUk9XUzpFZSxOT0JTOkJlfT1yZS5tZXRhWzBdO2lmKGYu''@;'; put 'put ''Y2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1tkXS5zdGFydHJvdz1iZSxmLmNsYXVzZXMucXVlcnlPYmpbaF0uZWxlbWVudHNbZF0ucm93cz1FZSxmLmNsYXVzZXMucXVlcnlPYmpbaF0uZWxlbWVudHNbZF0ubm9icz1CZSxmLmNsYXVzZXMucXVlcnlPYmpbaF0uZWxlbWVudHNbZF0udmFs''@;'; put 'put ''dWVzPWNlLm1hcChxZT0+e2NvbnN0IHJ0PSJudW0iPT09cmUuJHZhbHMudmFycy5VTkZPUk1BVFRFRC50eXBlO2xldCBkdD1ydCYmKDAsZ2cuaXNTcGVjaWFsTWlzc2luZykocWUuVU5GT1JNQVRURUQpPyIuIitxZS5VTkZPUk1BVFRFRDpxZS5VTkZPUk1BVFRFRDtyZXR1cm4gcnQmJm51bGw9''@;'; put 'put ''PT1kdCYmKGR0PSIuIikse2Zvcm1hdHRlZDpaP3FlLkZPUk1BVFRFRC5zcGxpdCgiLiIpWzBdOnFlLkZPUk1BVFRFRCx1bmZvcm1hdHRlZDpkdH19KS5zbGljZSgwLDJlMyksZi53aGVyZUNsYXVzZUZuKCksZi5zZXRUb0dsb2JhbHMoKSxmLndoZXJlQ2xhdXNlTG9hZGluZz0hMSxudWxsIT09''@;'; put 'put ''Zi5wZW5kaW5nSU5WYWx1ZXNTZXQpe2NvbnN0e2NsYXVzZUluZGV4OnFlLHF1ZXJ5SW5kZXg6cnR9PWYucGVuZGluZ0lOVmFsdWVzU2V0O2Yuc2V0SU5WYWx1ZXMocWUscnQpLGYucGVuZGluZ0lOVmFsdWVzU2V0PW51bGx9Zi5jZGYuZGV0ZWN0Q2hhbmdlcygpfSkuY2F0Y2gocmU9PntmLndo''@;'; put 'put ''ZXJlQ2xhdXNlTG9hZGluZz0hMX0pfX1jYXRjaChNKXtmLmV2ZW50U2VydmljZS5jYXRjaFJlc3BvbnNlRXJyb3IoInB1YmxpYy9nZXRjb2x2YWxzIixNKX19KSgpfWdldGxvZ2ljKGEpe3RoaXMubG9naWM9YSx0aGlzLndoZXJlQ2xhdXNlRm4oKX1zZXRMb2dpYygpe3RoaXMud2hlcmVDbGF1''@;'; put 'put ''c2VGbigpLHRoaXMuc2V0VG9HbG9iYWxzKCl9aXNBcnIoYSl7cmV0dXJuIGEgaW5zdGFuY2VvZiBBcnJheSYmYS5sZW5ndGg+MCYmdHlwZW9mIGFbMF0uY2hlY2tlZDwidSJ9c2VsZWN0ZWRMYWJlbENoYW5nZShhLGQpe2QudmFsdWVWYXJpYWJsZT0iVmFyaWFibGUiPT09YSxkLnZhbHVlPSIi''@;'; put 'put ''LHRoaXMud2hlcmVDbGF1c2VGbigpfXZhcmlhYmxlSW5wdXRDaGFuZ2UoYSxkLGgsZil7dGhpcy5nZXRWYWx1ZXMoYSxkLGgpfXNldFZhcmlhYmxlVmFsdWVzKGEsZCxoKXtsZXQgZj10aGlzLmNsYXVzZXMucXVlcnlPYmpbaF0uZWxlbWVudHNbZF0ub3BlcmF0b3I7IkJFVFdFRU4iIT09ZiYm''@;'; put 'put ''IklOIiE9PWYmJiJOT1QgSU4iIT09ZiYmKHRoaXMuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1tkXS52YWx1ZT1hLnRvU3RyaW5nKCkpLHRoaXMud2hlcmVDbGF1c2VGbigpLHRoaXMuc2V0VG9HbG9iYWxzKCl9c2V0VmFyaWFibGVPcGVyYXRvcihhLGQsaCl7bGV0IGY9dGhpcy5jbGF1''@;'; put 'put ''c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW2FdLnZhbHVlO2YgaW5zdGFuY2VvZiBBcnJheSYmIklOIiE9PWQmJiJOT1QgSU4iIT09ZCYmKGY9ZiBpbnN0YW5jZW9mIEFycmF5JiYyPT09Zi5sZW5ndGgmJiJzdHJpbmciPT10eXBlb2YgZlswXT9mWzBdOiIiKSx0aGlzLmNsZWFyVmFsdWVzT3Bl''@;'; put 'put ''cmF0b3IoYSxoKSx0aGlzLmNsYXVzZXMucXVlcnlPYmpbaF0uZWxlbWVudHNbYV0ub3BlcmF0b3I9ZCwoIj0iPT09ZHx8Ij4iPT09ZHx8IjwiPT09ZHx8Ijw9Ij09PWR8fCI+PSI9PT1kfHwiTkUiPT09ZCkmJih0aGlzLmNsYXVzZXMucXVlcnlPYmpbaF0uZWxlbWVudHNbYV0udmFsdWU9Ziks''@;'; put 'put ''IkJFVFdFRU4iPT09ZCYmKHRoaXMuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1thXS52YWx1ZT1bXSx0aGlzLmNsYXVzZXMucXVlcnlPYmpbaF0uZWxlbWVudHNbYV0udmFsdWUucHVzaChmKSx0aGlzLmNsYXVzZXMucXVlcnlPYmpbaF0uZWxlbWVudHNbYV0udmFsdWUucHVzaCgiIikp''@;'; put 'put ''LCgiSU4iPT09ZHx8Ik5PVCBJTiI9PT1kKSYmdGhpcy5zZXRJTlZhbHVlcyhoLGEpLHRoaXMud2hlcmVDbGF1c2VGbigpLHRoaXMuc2V0VG9HbG9iYWxzKCl9c2V0SU5WYWx1ZXMoYSxkKXtjb25zdCBoPVtdLGY9dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2FdLmVsZW1lbnRzW2RdLnZhbHVlcztm''@;'; put 'put ''Lmxlbmd0aDwxJiYodGhpcy5wZW5kaW5nSU5WYWx1ZXNTZXQ9e2NsYXVzZUluZGV4OmEscXVlcnlJbmRleDpkfSk7Zm9yKGxldCB2PTA7djxmLmxlbmd0aDt2KyspaC5wdXNoKHtjaGVja2VkOiExLHZhbDpmW3ZdLmZvcm1hdHRlZH0pO3RoaXMuY2xhdXNlcy5xdWVyeU9ialthXS5lbGVtZW50''@;'; put 'put ''c1tkXS52YWx1ZT1ofWNsZWFyVmFsdWVzKGEsZCl7dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2RdLmVsZW1lbnRzW2FdLnZhbHVlPSIifWNsZWFyVmFsdWVzT3BlcmF0b3IoYSxkKXtsZXQgaD10aGlzLmNsYXVzZXMucXVlcnlPYmpbZF0uZWxlbWVudHNbYV0ub3BlcmF0b3I7KCJCRVRXRUVOIj09''@;'; put 'put ''PWh8fCJJTiI9PT1ofHwiTk9UIElOIj09PWh8fCJDT05UQUlOUyI9PT1oKSYmdGhpcy5jbGVhclZhbHVlcyhhLGQpfWhhc0ludmFsaWRDbHVhc2UoYSl7Zm9yKGxldCBkIG9mIGEpaWYoZC5pbnZhbGlkQ2xhdXNlPSExLCIiPT09ZC52YWx1ZSYmIk5FIiE9PWQub3BlcmF0b3ImJiJDT05UQUlO''@;'; put 'put ''UyIhPT1kLm9wZXJhdG9yfHxudWxsPT09ZC52YXJpYWJsZXx8bnVsbD09PWQub3BlcmF0b3J8fG51bGw9PT1kLnZhbHVlKXJldHVybiBkLmludmFsaWRDbGF1c2U9ITAsITA7cmV0dXJuIGEuaW52YWxpZENsYXVzZT0hMSwhMX1oYXNJbnZhbGlkR3JvdXBDbHVhc2UoKXtmb3IobGV0IGE9MDth''@;'; put 'put ''PHRoaXMuY2xhdXNlcy5xdWVyeU9iai5sZW5ndGg7YSsrKXtpZih0aGlzLmhhc0ludmFsaWRDbHVhc2UodGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2FdLmVsZW1lbnRzKSlyZXR1cm4gdGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2FdLmludmFsaWRDbGF1c2U9ITAsITA7dGhpcy5jbGF1c2VzLnF1ZXJ5''@;'; put 'put ''T2JqW2FdLmludmFsaWRDbGF1c2U9ITF9cmV0dXJuITF9YWRkQ2xhdXNlKGEpe2lmKHRoaXMuaGFzSW52YWxpZENsdWFzZSh0aGlzLmNsYXVzZXMucXVlcnlPYmpbYV0uZWxlbWVudHMpKXJldHVybiB2b2lkIHRoaXMuZXZlbnRTZXJ2aWNlLnNob3dJbmZvTW9kYWwoIkVycm9yIiwiQ2Fubm90''@;'; put 'put ''IGFkZCBuZXcgY2xhdXNlLCB3aGVuIG9uZSBvciBtb3JlIGNsYXVzZXMgYXJlIGludmFsaWQgb3IgZW1wdHkuIik7dGhpcy5jbGF1c2VBbXQucHVzaCgiIiksdGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2FdLmVsZW1lbnRzLnB1c2goe2xvZ2ljOm51bGwsdHlwZTpudWxsLHZhcmlhYmxlOm51bGws''@;'; put 'put ''b3BlcmF0b3I6bnVsbCx2YWx1ZTpudWxsLHZhbHVlczpbXSxvcGVyYXRvcnM6W119KTtsZXQgZD10aGlzLmNsYXVzZXMucXVlcnlPYmpbYV0uY2xhdXNlTG9naWM7dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2FdLmNsYXVzZUxvZ2ljPXR5cGVvZiBkPiJ1Ij8iQU5EIjoiT1IiPT09ZD8iT1IiOiJB''@;'; put 'put ''TkQiLHRoaXMud2hlcmVDbGF1c2VGbigpLHRoaXMuc2V0VG9HbG9iYWxzKCl9YWRkR3JvdXBDbGF1c2UoKXt0aGlzLmhhc0ludmFsaWRHcm91cENsdWFzZSgpP3RoaXMuZXZlbnRTZXJ2aWNlLnNob3dJbmZvTW9kYWwoIkVycm9yIiwiQ2Fubm90IGFkZCBuZXcgY2xhdXNlLCB3aGVuIG9uZSBv''@;'; put 'put ''ciBtb3JlIGNsYXVzZXMgYXJlIGludmFsaWQgb3IgZW1wdHkuIik6KHRoaXMuY2xhdXNlcy5xdWVyeU9iai5wdXNoKHtlbGVtZW50czpbe2xvZ2ljOm51bGwsdHlwZTpudWxsLHZhcmlhYmxlOm51bGwsb3BlcmF0b3I6bnVsbCx2YWx1ZTpudWxsLHZhbHVlczpbXSxvcGVyYXRvcnM6W119XX0p''@;'; put 'put ''LHRoaXMuc2V0VG9HbG9iYWxzKCkpfWlzSW5IdG1sQ29sbGVjdGlvbihhLGQpe2ZvcihsZXQgaD0wO2g8ZC5sZW5ndGg7aCsrKWlmKGRbaF0udmFsdWU9PT1hKXJldHVybiEwO3JldHVybiExfXJlbW92ZUdyb3VwQ2xhdXNlKGEpe3RoaXMuY2xhdXNlcy5xdWVyeU9iai5zcGxpY2UoYSwxKSx0''@;'; put 'put ''aGlzLndoZXJlQ2xhdXNlRm4oKX1yZW1vdmVDbGF1c2UoYSxkKXt0aGlzLmNsYXVzZXMucXVlcnlPYmpbZF0uZWxlbWVudHMuc3BsaWNlKGEsMSksdGhpcy53aGVyZUNsYXVzZUZuKCksdGhpcy5zZXRUb0dsb2JhbHMoKX13aGVyZUNsYXVzZUZuKGE9ITEpe2NvbnN0IGQ9dGhpcy5oZWxwZXJT''@;'; put 'put ''ZXJ2aWNlLmRlZXBDbG9uZSh0aGlzLmNsYXVzZXMpO2lmKGEmJihkLnF1ZXJ5T2JqWzBdLmVsZW1lbnRzPVtdKSx2b2lkIDAhPT10aGlzLmxpYmRzKXtsZXQgaD10aGlzLnNhc1N0b3JlU2VydmljZS53aGVyZUNsYXVzZUNyZWF0b3IoZCx0aGlzLmdyb3VwTG9naWMsdGhpcy5saWJkcyk7YXx8''@;'; put 'put ''KHRoaXMud2hlcmVDbGF1c2U9aC53aGVyZUNsYXVzZSx0aGlzLndoZXJlU3RyaW5nPWguc3RyaW5nKX19bmdBZnRlclZpZXdJbml0KCl7dmFyIGE9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7YS5fcmVtb3ZlUXJ5PWEuc2FzU3RvcmVTZXJ2aWNlLnJlbW92ZVF1ZXJ5LnN1YnNjcmliZShk''@;'; put 'put ''PT57YS5jbGF1c2VzLnF1ZXJ5T2JqLmxlbmd0aD49MSYmKGEuY2xhdXNlcy5xdWVyeU9iai5sZW5ndGg9MSxhLmNsYXVzZXMucXVlcnlPYmpbMF0uZWxlbWVudHMubGVuZ3RoPj0xJiYoYS5jbGF1c2VzLnF1ZXJ5T2JqWzBdLmVsZW1lbnRzLmxlbmd0aD0xLGEuY2xhdXNlcy5xdWVyeU9ialsw''@;'; put 'put ''XS5lbGVtZW50cz1bXSxhLmNsYXVzZXMucXVlcnlPYmpbMF0uZWxlbWVudHMucHVzaCh7bG9naWM6bnVsbCx0eXBlOm51bGwsdmFyaWFibGU6bnVsbCxvcGVyYXRvcjpudWxsLHZhbHVlOm51bGwsdmFsdWVzOltdLG9wZXJhdG9yczpbXX0pLGEud2hlcmVDbGF1c2VGbigpKSl9KSxhLmNvbHVt''@;'; put 'put ''bnNTdWI9YS5zYXNTdG9yZVNlcnZpY2UuY29sdW1ucy5zdWJzY3JpYmUoZD0+e2xldCBoPWQuZGF0YS5jb2xzOyJob21lIiE9PUtuLnJvb3RQYXJhbSYmImVkaXRvciIhPT1Lbi5yb290UGFyYW18fChhLmNvbHM9aCxhLmxpYmRzPWQubGliZHMsS24uZWRpdG9yLmZpbHRlci5jb2xzPUpTT04u''@;'; put 'put ''cGFyc2UoSlNPTi5zdHJpbmdpZnkoaCkpKSwidmlldyI9PT1Lbi5yb290UGFyYW0mJktuLnZpZXdlci5maWx0ZXIuY29scy5sZW5ndGg8MSYmKGEuY29scz1oLGEubGliZHM9ZC5saWJkcyxLbi52aWV3ZXIuZmlsdGVyLmNvbHM9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShoKSkpLGEubGli''@;'; put 'put ''ZHN8fChhLmxpYmRzPWQubGliZHMpfSksYS52YWx1ZXNTdWI9YS5zYXNTdG9yZVNlcnZpY2UudmFsdWVzLnN1YnNjcmliZShkPT57KCJob21lIj09PUtuLnJvb3RQYXJhbXx8ImVkaXRvciI9PT1Lbi5yb290UGFyYW0pJiZLbi5lZGl0b3IuZmlsdGVyLnZhbHMubGVuZ3RoPDEmJihhLnZhbHM9''@;'; put 'put ''ZC52YWxzLEtuLmVkaXRvci5maWx0ZXIudmFscz1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGQudmFscykpKSwidmlldyI9PT1Lbi5yb290UGFyYW0mJktuLnZpZXdlci5maWx0ZXIudmFscy5sZW5ndGg8MSYmKGEudmFscz1kLnZhbHMsS24udmlld2VyLmZpbHRlci52YWxzPUpTT04ucGFy''@;'; put 'put ''c2UoSlNPTi5zdHJpbmdpZnkoZC52YWxzKSkpfSl9KSgpfW9uQXV0b2NvbXBsZXRlTG9hZGluZ01vcmUoYSxkLGgsZil7dGhpcy5nZXRWYWx1ZXNMb2FkTW9yZShhLGQsaCxmKX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLmdldEZyb21HbG9iYWxzKCksc2V0VGltZW91dCgoKT0+e2xldCBh''@;'; put 'put ''PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiN2YWxzX3Zhcl9pZDBfMCIpO2EmJmEuZm9jdXMoKX0sNTAwKX1uZ09uRGVzdHJveSgpe3RoaXMuY29sdW1uc1N1YiYmdGhpcy5jb2x1bW5zU3ViLnVuc3Vic2NyaWJlKCksdGhpcy52YWx1ZXNTdWImJnRoaXMudmFsdWVzU3ViLnVuc3Vic2NyaWJl''@;'; put 'put ''KCl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2Uoa2gpLEdlKHZjKSxHZShTdSksR2UoRXMpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1xdWVyeSJdXSxpbnB1dHM6e2NhY2hpbmc6ImNhY2hp''@;'; put 'put ''bmciLHZpZXdib3hJZDoidmlld2JveElkIn0sZmVhdHVyZXM6W2RhKFt7cHJvdmlkZTpCZix1c2VWYWx1ZToiZW4tR0IifV0pXSxkZWNsczozOCx2YXJzOjExLGNvbnN0czpbWyJwaWNrZXIiLCIiXSxbIm5vdFBpY2tlciIsIiJdLFsibm90UGlja2VyUmFuZ2UiLCIiXSxbImNoZWNrYm94VmFs''@;'; put 'put ''dWVzIiwiIl0sWzEsImNsci1mbGV4LXJvdyIsImNsci1mb3JtLWNvbnRyb2wiLCJtLTAiXSxbMSwiY2xyLWNvbnRyb2wtY29udGFpbmVyIl0sWyJjbHJDaGVja2JveCIsIiIsInR5cGUiLCJjaGVja2JveCIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiXSxbMSwiY2xyLWNvbnRyb2wtbGFi''@;'; put 'put ''ZWwiXSxbMSwiY2xyLWNvbnRyb2wtY29udGFpbmVyIiwibWwtMTUiXSxbImNsckNoZWNrYm94IiwiIiwidHlwZSIsImNoZWNrYm94IiwiaWQiLCJ1c2VQaWNrZXJzIiwzLCJuZ01vZGVsQ2hhbmdlIiwiY2hhbmdlIiwibmdNb2RlbCJdLFsxLCJjbHItcm93Il0sWzEsInNlbGVjdCIsImNsci1j''@;'; put 'put ''b2wtbWQtMiIsIm1iLTMwIl0sWyJjbHJTZWxlY3QiLCIiLDMsIm5nTW9kZWxDaGFuZ2UiLCJkaXNhYmxlZCIsIm5nTW9kZWwiXSxbMywic2VsZWN0ZWQiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJjbHItY29sLW1kLTEwIiwibWItMzAiXSxbMSwibGluZS1udW1iZXJzIiwibGFuZ3VhZ2Ut''@;'; put 'put ''bWFya3VwIl0sWyJjbGFzcyIsInByb2dyZXNTdGF0aWMgcHJvZ3Jlc3MgbG9vcCIsNCwibmdJZiJdLFsxLCJsYW5ndWFnZS1zcWwiXSxbMSwiY29udGVudCJdLFsxLCJjbGF1c2VzLWNvbnRhaW5lciIsImNsci1jb2wtbWQtMTIiXSxbNCwibmdJZiJdLFsiY2xhc3MiLCJjbGF1c2Utcm93Iiw0''@;'; put 'put ''LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMywic2VsZWN0ZWQiXSxbMSwicHJvZ3Jlc1N0YXRpYyIsInByb2dyZXNzIiwibG9vcCJdLFsxLCJjbGF1c2Utcm93Il0sWzEsImNsYXVzZS1sb2dpYyIsImNsci1jb2wtbWQtMiJdLFsxLCJzZWxlY3QiXSxbImNsclNlbGVjdCIsIiIsMywibmdNb2RlbENo''@;'; put 'put ''YW5nZSIsIm5nTW9kZWwiLCJkaXNhYmxlZCJdLFsiY2xhc3MiLCJidG4gYnRuLXByaW1hcnkgYnRuLWJsb2NrIG10LTEwIiwzLCJjbGljayIsNCwibmdJZiJdLFsxLCJjbGF1c2UtcXVlcnkiLCJjbHItY29sLW1kLTEwIl0sWyJzaGFwZSIsInRpbWVzIiwic2l6ZSIsIjM2IiwiY2xhc3MiLCJy''@;'; put 'put ''ZW1vdmUtZ3JvdXAtY2xhdXNlLWJ1dHRvbiIsMywiY2xpY2siLDQsIm5nSWYiXSxbImNsYXNzIiwiY2xyLXJvdyIsMywiaW52YWxpZC1jbGF1c2UiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJidG4iLCJidG4tcHJpbWFyeSIsImJ0bi1ibG9jayIsIm10LTEwIiwzLCJjbGljayJdLFsic2hh''@;'; put 'put ''cGUiLCJwbHVzIl0sWyJzaGFwZSIsInRpbWVzIiwic2l6ZSIsIjM2IiwxLCJyZW1vdmUtZ3JvdXAtY2xhdXNlLWJ1dHRvbiIsMywiY2xpY2siXSxbMSwidmFyaWFibGUtY29sIiwiZm9ybS1ncm91cCIsImNsci1jb2wtbWQtMyJdLFsxLCJkYXRhbGlzdC13cmFwcGVyIl0sWyJsYWJlbCIsIlZh''@;'; put 'put ''cmlhYmxlIiwzLCJ2YWx1ZUNoYW5nZSIsIm9uSW5wdXRFdmVudCIsImlkIiwiaW5wdXRJZCIsImVtaXRPbmx5U2VsZWN0ZWQiLCJ2YWx1ZSJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwib3BlcmF0b3ItY29sIiwiZm9ybS1ncm91cCIsImNsci1jb2wtbWQtMyJdLFsiY2xyU2VsZWN0Iiwi''@;'; put 'put ''IiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCJdLFsiY2xhc3MiLCJ2YWx1ZS1jb2wgZm9ybS1ncm91cCBjbHItY29sLW1kLTMiLDQsIm5nVmFyIl0sWzEsImNsYXVzZS1idXR0b25zIiwiY2xyLWNvbC1tZC0yIiwiYnRuLWdyb3VwIl0sWzEsImJ0biIsImJ0bi13YXJuaW5nIiwiYnRuLWJs''@;'; put 'put ''b2NrIiwzLCJjbGljayIsImRpc2FibGVkIl0sWyJzaGFwZSIsIm1pbnVzIl0sWzEsImJ0biIsImJ0bi1zdWNjZXNzIiwiYnRuLWJsb2NrIiwzLCJjbGljayJdLFsxLCJ2YWx1ZS1jb2wiLCJmb3JtLWdyb3VwIiwiY2xyLWNvbC1tZC0zIl0sWyJjbGFzcyIsImNoZWNrYm94LXZhbHMiLDQsIm5n''@;'; put 'put ''SWYiXSxbImNsYXNzIiwic2luZ2xlLWZpZWxkLXZhbHMiLDQsIm5nSWYiXSxbImNsYXNzIiwicmFuZ2UtdmFscyIsNCwibmdJZiJdLFsiY2xhc3MiLCJjb250YWlucy12YWxzIiw0LCJuZ0lmIl0sWzEsImNoZWNrYm94LXZhbHMiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1saW5r''@;'; put 'put ''IiwzLCJjbGljayJdLFs0LCJuZ1RlbXBsYXRlT3V0bGV0IiwibmdUZW1wbGF0ZU91dGxldENvbnRleHQiXSxbMSwic2luZ2xlLWZpZWxkLXZhbHMiXSxbMSwicmFuZ2UtdmFscyJdLFsxLCJmcm9tIl0sWzEsInRvIl0sWzEsImNvbnRhaW5zLXZhbHMiXSxbInR5cGUiLCJ0ZXh0IiwxLCJpbnB1''@;'; put 'put ''dC12YWwiLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIl0sWzMsIm5nU3dpdGNoIl0sWzQsIm5nU3dpdGNoQ2FzZSJdLFsibGFiZWwiLCJWYWx1ZSIsInR5cGUiLCJkYXRlIiwzLCJ2YWx1ZUNoYW5nZSIsImRpc2FibGVTb2Z0c2VsZWN0IiwiaW5wdXRJZCIsInZhbHVlIl0sWyJsYWJlbCIs''@;'; put 'put ''IlZhbHVlIiwidHlwZSIsImRhdGUiLDMsInZhbHVlQ2hhbmdlIiwib25JbnB1dEV2ZW50IiwiZGlzYWJsZVNvZnRzZWxlY3QiLCJpbnB1dElkIiwidmFsdWUiXSxbInR5cGUiLCJ0aW1lIiwzLCJ2YWx1ZUNoYW5nZSIsIm9uSW5wdXRFdmVudCIsImRpc2FibGVTb2Z0c2VsZWN0IiwiaW5wdXRJ''@;'; put 'put ''ZCIsInZhbHVlIl0sWyJsYWJlbCIsIlZhbHVlIiwidHlwZSIsInRpbWUiLDMsIm9uSW5wdXRFdmVudCIsImRpc2FibGVTb2Z0c2VsZWN0IiwiaW5wdXRJZCIsInZhbHVlIl0sWyJsYWJlbCIsIlZhbHVlIiwzLCJzZWxlY3RlZExhYmVsQ2hhbmdlIiwidmFsdWVDaGFuZ2UiLCJvbklucHV0RXZl''@;'; put 'put ''bnQiLCJvbkF1dG9jb21wbGV0ZUxvYWRpbmdNb3JlIiwic2Vjb25kTGFiZWwiLCJlbWl0T25seVNlbGVjdGVkIiwiaW5wdXRJZCIsInZhbHVlIiwiZW5hYmxlTG9hZE1vcmUiXSxbMywidmFsdWUiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFszLCJ2YWx1ZSJdLFszLCJ2YWx1ZSIsNCwibmdJZiJd''@;'; put 'put ''LFsibGFiZWwiLCJWYWx1ZSIsMywidmFsdWVDaGFuZ2UiLCJvbklucHV0RXZlbnQiLCJvbkF1dG9jb21wbGV0ZUxvYWRpbmdNb3JlIiwiaW5wdXRJZCIsInZhbHVlIiwiZW5hYmxlTG9hZE1vcmUiLCJkaXNhYmxlZCJdLFsxLCJpbi12YWx1ZXMtbW9kYWwiLDMsImNsck1vZGFsT3BlbiIsImNs''@;'; put 'put ''ck1vZGFsQ2xvc2FibGUiXSxbMSwibW9kYWwtdGl0bGUiXSxbMSwibW9kYWwtYm9keSJdLFsiY2xhc3MiLCJuby12YWx1ZXMiLDQsIm5nSWYiXSxbImNsYXNzIiwiZm9ybS1ibG9jayIsNCwibmdJZiJdLFsxLCJtb2RhbC1mb290ZXIiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1v''@;'; put 'put ''dXRsaW5lIiwzLCJjbGljayJdLFsxLCJuby12YWx1ZXMiXSxbMSwiZm9ybS1ibG9jayJdLFsidHlwZSIsImNoZWNrYm94IiwiY2xyQ2hlY2tib3giLCIiLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7aWYoMSZkKXtjb25zdCBmPUxuKCk7ZGUo''@;'; put 'put ''MCwiZGl2Iiw0KSgxLCJkaXYiLDUpKDIsImNsci1jaGVja2JveC13cmFwcGVyIikoMywiaW5wdXQiLDYpLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksbWkoaC5keW5hbWljV2hlcmVDbGF1c2UsTSl8fChoLmR5bmFtaWNXaGVyZUNsYXVzZT1NKSxDdChNKX0p''@;'; put 'put ''LGhlKCksZGUoNCwibGFiZWwiLDcpLExlKDUsIkR5bmFtaWMgd2hlcmUgY2xhdXNlIiksaGUoKSgpKCksZGUoNiwiZGl2Iiw4KSg3LCJjbHItY2hlY2tib3gtd3JhcHBlciIpKDgsImlucHV0Iiw5KSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLG1pKGgudXNl''@;'; put 'put ''UGlja2VycyxNKXx8KGgudXNlUGlja2Vycz1NKSxDdChNKX0pLEZ0KCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLEN0KGgudXNlUGlja2Vyc0NoYW5nZSgpKX0pLGhlKCksZGUoOSwibGFiZWwiLDcpLExlKDEwLCIgVXNlIHBpY2tlcnMgIiksaGUoKSgpKCkoKSxkZSgxMSwiZGl2''@;'; put 'put ''IiwxMCkoMTIsImRpdiIsMTEpKDEzLCJjbHItc2VsZWN0LWNvbnRhaW5lciIpKDE0LCJsYWJlbCIpLExlKDE1LCJHcm91cCBsb2dpYyIpLGhlKCksZGUoMTYsInNlbGVjdCIsMTIpLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksbWkoaC5ncm91cExvZ2ljLE0p''@;'; put 'put ''fHwoaC5ncm91cExvZ2ljPU0pLEN0KE0pfSksRnQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLEN0KGguc2V0R3JvdXBMb2dpYyhoLmdyb3VwTG9naWMpKX0pLGd0KDE3LFltdCwyLDIsIm9wdGlvbiIsMTMpLGhlKCkoKSgpLGRlKDE4LCJkaXYiLDE0KSgxOSwicHJl''@;'; put 'put ''IiwxNSksTGUoMjAsIiAgICAgICIpLGd0KDIxLEdtdCw0LDAsImRpdiIsMTYpLExlKDIyLCJcblxuICAgICAgIiksZGUoMjMsImNvZGUiLDE3KSxMZSgyNCksaGUoKSxMZSgyNSwiXG4gICAgIiksaGUoKSgpKCksZGUoMjYsImRpdiIsMTgpKDI3LCJkaXYiLDE5KSxndCgyOCwkbXQsMSwwLCJk''@;'; put 'put ''aXYiLDIwKSgyOSx1NnQsMTUsOCwiZGl2IiwyMSksaGUoKSgpLGd0KDMwLHA2dCw0LDQsIm5nLXRlbXBsYXRlIixudWxsLDAsSWMpKDMyLF82dCwzLDcsIm5nLXRlbXBsYXRlIixudWxsLDEsSWMpKDM0LEM2dCwyLDUsIm5nLXRlbXBsYXRlIixudWxsLDIsSWMpKDM2LEU2dCw5LDQsIm5nLXRl''@;'; put 'put ''bXBsYXRlIixudWxsLDMsSWMpfTImZCYmKGZlKDMpLHBpKCJuZ01vZGVsIixoLmR5bmFtaWNXaGVyZUNsYXVzZSksZmUoNSkscGkoIm5nTW9kZWwiLGgudXNlUGlja2VycyksZmUoOCksTWUoImRpc2FibGVkIiwobnVsbD09aC5jbGF1c2VzfHxudWxsPT1oLmNsYXVzZXMucXVlcnlPYmo/bnVs''@;'; put 'put ''bDpoLmNsYXVzZXMucXVlcnlPYmoubGVuZ3RoKTwxKSxwaSgibmdNb2RlbCIsaC5ncm91cExvZ2ljKSxmZSgpLE1lKCJuZ0Zvck9mIixoLmxvZ2ljT3BlcmF0b3JzKSxmZSg0KSxNZSgibmdJZiIsaC53aGVyZUNsYXVzZUxvYWRpbmcpLGZlKDMpLHdyKGgud2hlcmVDbGF1c2UpLGZlKDMpLFRy''@;'; put 'put ''KCJjbHItY29sLW1kLTEwIiwobnVsbD09aC5jbGF1c2VzfHxudWxsPT1oLmNsYXVzZXMucXVlcnlPYmo/bnVsbDpoLmNsYXVzZXMucXVlcnlPYmoubGVuZ3RoKT4xKSxmZSgpLE1lKCJuZ0lmIiwobnVsbD09aC5jbGF1c2VzfHxudWxsPT1oLmNsYXVzZXMucXVlcnlPYmo/bnVsbDpoLmNsYXVz''@;'; put 'put ''ZXMucXVlcnlPYmoubGVuZ3RoKT4xKSxmZSgpLE1lKCJuZ0Zvck9mIixoLmNsYXVzZXMucXVlcnlPYmopKX0sZGVwZW5kZW5jaWVzOltucyxiYSxOMSxTMixjcCxIbCxvdSxLdSxkcyxJZCxCeSxTaCxFNywkeSxBMixrMixxbCxNZCxUMixubCwkcyxENmUsU3csQm10LGptdF0sZW5jYXBzdWxh''@;'; put 'put ''dGlvbjoyfSl9fXJldHVybiBjfSkoKSxyND0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7fW9uQ2xpY2soYSl7YS50YXJnZXQuZm9jdXMoKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBl''@;'; put 'put ''OmMsc2VsZWN0b3JzOltbIiIsImFwcFN0ZWFsRm9jdXMiLCIiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGQsaCl7MSZkJiZGdCgiY2xpY2siLGZ1bmN0aW9uKHYpe3JldHVybiBoLm9uQ2xpY2sodil9KX19KX19cmV0dXJuIGN9KSgpO2NvbnN0IFQ2dD1bInNlYXJjaExpYlRyZWVJbnB1dCJd''@;'; put 'put ''O2Z1bmN0aW9uIEE2dChjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDExKX1mdW5jdGlvbiBrNnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItaWNvbiIsMTIpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPVJlKDIpO3JldHVybiBoLmxpYnJhcmllc1Nl''@;'; put 'put ''YXJjaD0iIixDdChoLmxpYnJhcnlPbkZpbHRlcigpKX0pLGhlKCl9fWZ1bmN0aW9uIEQ2dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci10cmVlLW5vZGUiLDYpKDEsImRpdiIsNykoMiwiaW5wdXQiLDgsMCksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEp''@;'; put 'put ''O2NvbnN0IGY9UmUoKTtyZXR1cm4gbWkoZi5saWJyYXJpZXNTZWFyY2gsaCl8fChmLmxpYnJhcmllc1NlYXJjaD1oKSxDdChoKX0pLEZ0KCJrZXl1cCIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS5saWJyYXJ5T25GaWx0ZXIoKSl9KSxoZSgpLGd0KDQsQTZ0LDEsMCwiY2xyLWlj''@;'; put 'put ''b24iLDkpKDUsazZ0LDEsMCwiY2xyLWljb24iLDEwKSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPWhhKDMpLGQ9UmUoKTtmZSgyKSxwaSgibmdNb2RlbCIsZC5saWJyYXJpZXNTZWFyY2gpLGZlKDIpLE1lKCJuZ0lmIixhLnZhbHVlLmxlbmd0aDwxKSxmZSgpLE1lKCJuZ0lmIixhLnZhbHVlLmxl''@;'; put 'put ''bmd0aD4wKX19ZnVuY3Rpb24gSTZ0KGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsMTEpfWZ1bmN0aW9uIFI2dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci1pY29uIiwxMiksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpLFJlKCk7Y29uc3QgaD1oYSgzKSxmPVJlKDIp''@;'; put 'put ''LiRpbXBsaWNpdCx2PVJlKCk7cmV0dXJuIGgudmFsdWU9IiIsZi5zZWFyY2hTdHJpbmc9IiIsQ3Qodi50cmVlT25GaWx0ZXIoZiwidGFibGVzLlRBQkxFTkFNRSIpKX0pLGhlKCl9fWZ1bmN0aW9uIEw2dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci10cmVlLW5vZGUiLDYp''@;'; put 'put ''KDEsImRpdiIsNykoMiwiaW5wdXQiLDE4LDIpLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPVJlKDIpLiRpbXBsaWNpdDtyZXR1cm4gbWkoZi5zZWFyY2hTdHJpbmcsaCl8fChmLnNlYXJjaFN0cmluZz1oKSxDdChoKX0pLEZ0KCJrZXl1cCIsZnVuY3Rpb24o''@;'; put 'put ''KXt3dChhKTtjb25zdCBoPVJlKDIpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoUmUoKS50cmVlT25GaWx0ZXIoaCwidGFibGVzIikpfSksaGUoKSxndCg0LEk2dCwxLDAsImNsci1pY29uIiw5KSg1LFI2dCwxLDAsImNsci1pY29uIiwxMCksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1oYSgzKSxkPVJl''@;'; put 'put ''KDIpLiRpbXBsaWNpdDtmZSgyKSxwaSgibmdNb2RlbCIsZC5zZWFyY2hTdHJpbmcpLGZlKDIpLE1lKCJuZ0lmIixhLnZhbHVlLmxlbmd0aDwxKSxmZSgpLE1lKCJuZ0lmIixhLnZhbHVlLmxlbmd0aD4wKX19ZnVuY3Rpb24gTzZ0KGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsMjYpfWZ1bmN0''@;'; put 'put ''aW9uIFA2dChjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDI3KX1mdW5jdGlvbiBGNnQoYyxsKXsxJmMmJihkZSgwLCJzcGFuIiksTGUoMSwiIFRvIHVubG9jayBhbGwgdGFibGVzLCBjb250YWN0IHN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8gIiksaGUoKSl9ZnVuY3Rpb24gSDZ0KGMsbCl7''@;'; put 'put ''aWYoMSZjJiYoZGUoMCwiY2xyLXRvb2x0aXAtY29udGVudCIsMjgpLGd0KDEsRjZ0LDIsMCwic3BhbiIsMjUpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgpLm5nVmFyO2ZlKCksTWUoIm5nSWYiLGEpfX1mdW5jdGlvbiBONnQoYyxsKXsxJmMmJkd0KDAsImNsci1pY29uIiwxMSl9ZnVuY3Rpb24g''@;'; put 'put ''VjZ0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLWljb24iLDEyKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSksUmUoKTtjb25zdCBoPWhhKDMpLGY9UmUoMykuJGltcGxpY2l0LHY9UmUoMyk7cmV0dXJuIGgudmFsdWU9IiIsZi5zZWFyY2hTdHJpbmc9IiIsQ3Qodi50''@;'; put 'put ''cmVlT25GaWx0ZXIoZiwiY29sdW1ucy5DT0xOQU1FIikpfSksaGUoKX19ZnVuY3Rpb24gQjZ0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLXRyZWUtbm9kZSIsNikoMSwiZGl2Iiw3KSgyLCJpbnB1dCIsMjksMiksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0''@;'; put 'put ''KGEpO2NvbnN0IGY9UmUoMykuJGltcGxpY2l0O3JldHVybiBtaShmLnNlYXJjaFN0cmluZyxoKXx8KGYuc2VhcmNoU3RyaW5nPWgpLEN0KGgpfSksRnQoImtleXVwIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9UmUoMykuJGltcGxpY2l0O3JldHVybiBDdChSZSgzKS50cmVlT25GaWx0ZXIo''@;'; put 'put ''aCwiY29sdW1ucy5DT0xOQU1FIikpfSksaGUoKSxndCg0LE42dCwxLDAsImNsci1pY29uIiw5KSg1LFY2dCwxLDAsImNsci1pY29uIiwxMCksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1oYSgzKSxkPVJlKDMpLiRpbXBsaWNpdDtmZSgyKSxwaSgibmdNb2RlbCIsZC5zZWFyY2hTdHJpbmcpLGZl''@;'; put 'put ''KDIpLE1lKCJuZ0lmIixhLnZhbHVlLmxlbmd0aDwxKSxmZSgpLE1lKCJuZ0lmIixhLnZhbHVlLmxlbmd0aD4wKX19ZnVuY3Rpb24gajZ0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLXRyZWUtbm9kZSIpKDEsImJ1dHRvbiIsMzApLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtj''@;'; put 'put ''b25zdCBoPXd0KGEpLiRpbXBsaWNpdCxmPVJlKDMpLiRpbXBsaWNpdCx2PVJlKDIpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoUmUoKS5jb2x1bW5PbkNsaWNrKGgsdixmKSl9KSxHdCgyLCJjbHItaWNvbiIsMzEpLExlKDMpLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1SZSg2''@;'; put 'put ''KTtmZSgpLFRyKCJjb2x1bW4tYWN0aXZlIixkLmxpYkNvbHVtbkFjdGl2ZShhLkNPTFVSSSkpLGZlKDIpLElyKCIgIixhLkNPTE5BTUUsIiAiKX19ZnVuY3Rpb24gejZ0KGMsbCl7aWYoMSZjJiYoc2koMCksZ3QoMSxCNnQsNiwzLCJjbHItdHJlZS1ub2RlIiwzKSgyLGo2dCw0LDMsImNsci10''@;'; put 'put ''cmVlLW5vZGUiLDQpLGxpKCkpLDImYyl7Y29uc3QgYT1SZSgyKS4kaW1wbGljaXQ7ZmUoKSxNZSgibmdJZiIsYS5jb2x1bW5zKSxmZSgpLE1lKCJuZ0Zvck9mIixhLmNvbHVtbnMpfX1mdW5jdGlvbiBVNnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItdG9vbHRpcCIpKDEs''@;'; put 'put ''ImJ1dHRvbiIsMjApLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLm5nVmFyLGY9UmUoKS4kaW1wbGljaXQsdj1SZSgyKS4kaW1wbGljaXQsTT1SZSgpO3JldHVybiBDdChoPyIiOk0udGFibGVPbkNsaWNrKGYuVEFCTEVVUkksZix2KSl9KSxzaSgyLDIxKSxndCgzLE82dCwx''@;'; put 'put ''LDAsImNsci1pY29uIiwyMikoNCxQNnQsMSwwLCJjbHItaWNvbiIsMjMpLGxpKCksTGUoNSksaGUoKSxndCg2LEg2dCwyLDEsImNsci10b29sdGlwLWNvbnRlbnQiLDI0KSg3LHo2dCwzLDIsIm5nLWNvbnRhaW5lciIsMjUpLGhlKCl9aWYoMiZjKXtjb25zdCBhPWwubmdWYXIsZD1SZSgpLiRp''@;'; put 'put ''bXBsaWNpdCxoPVJlKDIpLiRpbXBsaWNpdCxmPVJlKCk7ZmUoKSxUcigiZGMtbG9ja2VkLWNvbnRyb2wiLGEpKCJhY3RpdmUiLGYubGliVGFiQWN0aXZlKGguTElCUkFSWVJFRixkKSksZmUoKSxNZSgibmdTd2l0Y2giLGQuaW5jbHVkZXMoIi1GQyIpKSxmZSgpLE1lKCJuZ1N3aXRjaENhc2Ui''@;'; put 'put ''LCEwKSxmZSgpLE1lKCJuZ1N3aXRjaENhc2UiLCExKSxmZSgpLElyKCIgIixkLnJlcGxhY2UoIi1GQyIsIiIpLCIgIiksZmUoMiksTWUoIm5nSWYiLGYuaGFzQ29sdW1ucyl9fWZ1bmN0aW9uIFo2dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci10cmVlLW5vZGUiLDE0KSxG''@;'; put 'put ''dCgiY2xpY2siLGZ1bmN0aW9uKGgpe2NvbnN0IGY9d3QoYSkuJGltcGxpY2l0LHY9UmUoMikuJGltcGxpY2l0O3JldHVybiBDdChSZSgpLnRyZWVOb2RlQ2xpY2tlZChoLGYsdi50YWJsZXMpKX0pLGdpKCJjbHJFeHBhbmRlZENoYW5nZSIsZnVuY3Rpb24oaCl7Y29uc3QgZj13dChhKS4kaW1w''@;'; put 'put ''bGljaXQ7cmV0dXJuIG1pKGYuZXhwYW5kZWQsaCl8fChmLmV4cGFuZGVkPWgpLEN0KGgpfSksZ3QoMSxVNnQsOCw5LCJjbHItdG9vbHRpcCIsMTkpLGhlKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9bC5pbmRleCxoPVJlKDMpO1RyKCJjbHItZXhwYW5kZWQiLGEuZXhwYW5kZWQp''@;'; put 'put ''LHBpKCJjbHJFeHBhbmRlZCIsYS5leHBhbmRlZCksTWUoImNsckxvYWRpbmciLGEubG9hZGluZ0NvbHVtbnMmJiFhLmNvbHVtbnMpLGZlKCksTWUoIm5nVmFyIixkKzE+aC5saWNlbmNlU3RhdGUudmFsdWUudGFibGVzX2luX2xpYnJhcnlfbGltaXQpfX1mdW5jdGlvbiBXNnQoYyxsKXtpZigx''@;'; put 'put ''JmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItdHJlZS1ub2RlIiwxNCwxKSxGdCgiY2xpY2siLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9UmUoKS4kaW1wbGljaXQsdj1SZSgpO3JldHVybiBDdCh2LnRyZWVOb2RlQ2xpY2tlZChoLGYsdi5saWJyYXJ5TGlzdCkpfSksZ2koImNsckV4cGFu''@;'; put 'put ''ZGVkQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPVJlKCkuJGltcGxpY2l0O3JldHVybiBtaShmLmV4cGFuZGVkLGgpfHwoZi5leHBhbmRlZD1oKSxDdChoKX0pLGRlKDIsInAiLDE1KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1oYSgxKSxmPVJlKCkuJGlt''@;'; put 'put ''cGxpY2l0LHY9UmUoKTtyZXR1cm4gdi5saWI9Zi5MSUJSQVJZSUQsQ3Qodi5saWJyYXJ5T25DbGljayh2LmxpYnx8IiIsZixoKSl9KSxHdCgzLCJjbHItaWNvbiIsMTYpLExlKDQpLGhlKCksZ3QoNSxMNnQsNiwzLCJjbHItdHJlZS1ub2RlIiwzKSg2LFo2dCwyLDUsImNsci10cmVlLW5vZGUi''@;'; put 'put ''LDE3KSxoZSgpfWlmKDImYyl7Y29uc3QgYT1SZSgpLiRpbXBsaWNpdDtUcigiY2xyLWV4cGFuZGVkIixhLmV4cGFuZGVkKSxwaSgiY2xyRXhwYW5kZWQiLGEuZXhwYW5kZWQpLE1lKCJjbHJMb2FkaW5nIixhLmxvYWRpbmdUYWJsZXMmJiFhLnRhYmxlcyksZmUoNCksSXIoIiAiLGEuTElCUkFS''@;'; put 'put ''WU5BTUUsIiAiKSxmZSgpLE1lKCJuZ0lmIixhLnRhYmxlcyksZmUoKSxNZSgibmdGb3JPZiIsYS50YWJsZXMpfX1mdW5jdGlvbiBZNnQoYyxsKXtpZigxJmMmJihzaSgwKSxndCgxLFc2dCw3LDcsImNsci10cmVlLW5vZGUiLDEzKSxsaSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUo''@;'; put 'put ''KSxNZSgibmdJZiIsIWEuaGlkZGVuJiZhLmluRm9yZWdyb3VuZCl9fWZ1bmN0aW9uIEc2dChjLGwpezEmYyYmKGRlKDAsImRpdiIsMzIpKDEsInNwYW4iLDMzKSxMZSgyLCIgTG9hZGluZy4uLiAiKSxoZSgpKCkpfWxldCAkNnQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMu''@;'; put 'put ''aGVscGVyU2VydmljZT1hLHRoaXMubGljZW5jZVNlcnZpY2U9ZCx0aGlzLnNlYXJjaExpYklucHV0TGlzdD1uZXcgZmQsdGhpcy50YWJsZU9uQ2xpY2tFbWl0dGVyPW5ldyBLcix0aGlzLmxpYnJhcnlPbkNsaWNrRW1pdHRlcj1uZXcgS3IsdGhpcy5oYXNDb2x1bW5zPSExLHRoaXMucGFnaW5n''@;'; put 'put ''PSEwLHRoaXMubGlicmFyaWVzU2VhcmNoPSIiLHRoaXMubGliPSIiLHRoaXMudGFibGU9IiIsdGhpcy5saWJyYXJpZXNQYWdpbmc9ITEsdGhpcy5saWNlbmNlU3RhdGU9dGhpcy5saWNlbmNlU2VydmljZS5saWNlbmNlU3RhdGV9bmdPbkluaXQoKXt9bmdBZnRlclZpZXdJbml0KCl7c2V0VGlt''@;'; put 'put ''ZW91dCgoKT0+e3RoaXMuc2VhcmNoTGliSW5wdXRMaXN0LmZpcnN0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKX0pfW5nT25DaGFuZ2VzKGEpe2EubGlicmFyeUxpc3Q/LmN1cnJlbnRWYWx1ZSYmdGhpcy5saWJyYXJ5TGlzdCYmdGhpcy5oZWxwZXJTZXJ2aWNlLmRpc3BsYXlMaWJyYXJpZXModGhp''@;'; put 'put ''cy5saWJyYXJ5TGlzdCl9dHJlZU9uRmlsdGVyKGEsZCl7dGhpcy5oZWxwZXJTZXJ2aWNlLnRyZWVPbkZpbHRlcihhLGQpfWxpYnJhcnlPbkZpbHRlcigpe3RoaXMuaGVscGVyU2VydmljZS5saWJyYXJ5T25GaWx0ZXIodGhpcy5saWJyYXJ5TGlzdCx0aGlzLmxpYnJhcmllc1NlYXJjaCwiTElC''@;'; put 'put ''UkFSWU5BTUUiKSxLbi5saW5lYWdlLmxpYnJhcmllc1NlYXJjaD10aGlzLmxpYnJhcmllc1NlYXJjaH10cmVlTm9kZUNsaWNrZWQoYSxkLGgpeyJDb2xsYXBzZSI9PT1hLnRhcmdldC50aXRsZSYmdGhpcy5jb2xsYXBzZVRyZWVJdGVtcyhoLGQpfWxpYnJhcnlPbkNsaWNrKGEsZCxoKXtkLmlu''@;'; put 'put ''Rm9yZWdyb3VuZD0hMDtjb25zdCBmPSgpPT5zZXRUaW1lb3V0KCgpPT5oLmNvbnRlbnRDb250YWluZXIubmF0aXZlRWxlbWVudC5wYXJlbnRFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoImlucHV0IikuZm9jdXMoKSk7aWYoZC50YWJsZXMpZC5leHBhbmRlZD0hZC5leHBhbmRlZCx0aGlzLmxpYnJh''@;'; put 'put ''cnlPbkNsaWNrRW1pdHRlci5lbWl0KHtsaWJpZDphLGxpYnJhcnk6ZCx0YWJsZXNMb2FkZWQ6ITB9KTtlbHNle2QubG9hZGluZ1RhYmxlcz0hMCx0aGlzLmxpYnJhcnlPbkNsaWNrRW1pdHRlci5lbWl0KHtsaWJpZDphLGxpYnJhcnk6ZCx0YWJsZXNMb2FkZWQ6ITF9KTtjb25zdCB2PXNldElu''@;'; put 'put ''dGVydmFsKCgpPT57ZC5sb2FkaW5nVGFibGVzfHwoZigpLGNsZWFySW50ZXJ2YWwodikpfSw1MDApfWQuZXhwYW5kZWQmJmYoKSx0aGlzLmNvbGxhcHNlVHJlZUl0ZW1zKHRoaXMubGlicmFyeUxpc3QsZCl9dGFibGVPbkNsaWNrKGEsZCxoKXt2YXIgZj10aGlzO3JldHVybiBlZShmdW5jdGlv''@;'; put 'put ''biooKXtmLmhlbHBlclNlcnZpY2UuZGVib3VuY2VDYWxsKDUwLCgpPT57Zi5oYXNDb2x1bW5zPyhkLmNvbHVtbnM/KGQuZXhwYW5kZWQ9IWQuZXhwYW5kZWQsITA9PT1kLmV4cGFuZGVkJiYoZi50YWJsZT1hLGYudGFibGVPbkNsaWNrRW1pdHRlci5lbWl0KHt0YWJsZXVyaTphLGxpYlRhYmxl''@;'; put 'put ''OmQsbGlicmFyeTpoLGNvbHVtbnNMb2FkZWQ6ITB9KSkpOihkLmV4cGFuZGVkPSFkLmV4cGFuZGVkLGQubG9hZGluZ0NvbHVtbnM9ITAsZi50YWJsZT1hLGYudGFibGVPbkNsaWNrRW1pdHRlci5lbWl0KHt0YWJsZXVyaTphLGxpYlRhYmxlOmQsbGlicmFyeTpoLGNvbHVtbnNMb2FkZWQ6ITF9''@;'; put 'put ''KSksZi5jb2xsYXBzZVRyZWVJdGVtcyhoLnRhYmxlcyxkKSk6Zi50YWJsZU9uQ2xpY2tFbWl0dGVyLmVtaXQoe3RhYmxldXJpOmEsbGliVGFibGU6ZCxsaWJyYXJ5OmgsY29sdW1uc0xvYWRlZDohMX0pfSl9KSgpfWNvbHVtbk9uQ2xpY2soYSxkLGgpe3RoaXMubGliPWQuTElCUkFSWUlELHRo''@;'; put 'put ''aXMudGFibGU9aC5UQUJMRVVSSSx0aGlzLmNvbHVtbj1hLkNPTFVSSX1saWJUYWJBY3RpdmUoYSxkKXtyZXR1cm4hKCF0aGlzLmxpYnx8IXRoaXMudGFibGUpJiZhPT09dGhpcy5saWImJmQ9PT10aGlzLnRhYmxlfWxpYkNvbHVtbkFjdGl2ZShhKXtpZighdGhpcy5jb2x1bW4pcmV0dXJuITE7''@;'; put 'put ''bGV0IGQ9YS5zcGxpdCgiXFwiKSxoPXRoaXMuY29sdW1uLnNwbGl0KCJcXCIpO3JldHVybiBkW2QubGVuZ3RoLTFdPT1oW2gubGVuZ3RoLTFdfWNvbGxhcHNlVHJlZUl0ZW1zKGEsZCl7YS5mb3JFYWNoKGg9PntKU09OLnN0cmluZ2lmeShoKSE9PUpTT04uc3RyaW5naWZ5KGQpJiYoaC5leHBh''@;'; put 'put ''bmRlZD0hMSl9KX1sb2FkTW9yZUxpYnJhcmllcygpe3RoaXMubGlicmFyaWVzUGFnaW5nfHwodGhpcy5saWJyYXJpZXNQYWdpbmc9ITAsdGhpcy5oZWxwZXJTZXJ2aWNlLmRpc3BsYXlMaWJyYXJpZXModGhpcy5saWJyYXJ5TGlzdCwhMCksdGhpcy5saWJyYXJpZXNQYWdpbmc9ITEpfWhhbmRs''@;'; put 'put ''ZVNjcm9sbChhKXtsZXQgZD1hLnRhcmdldDtkJiZkLnNjcm9sbFRvcD49ZC5zY3JvbGxIZWlnaHQtZC5vZmZzZXRIZWlnaHQtMTAmJnRoaXMubG9hZE1vcmVMaWJyYXJpZXMoKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZShTdSksR2UodTEp''@;'; put 'put ''KX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImRjLXRyZWUiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGQsaCl7aWYoMSZkJiZxYShUNnQsNSksMiZkKXtsZXQgZjtDaShmPVNpKCkpJiYoaC5zZWFyY2hMaWJJbnB1dExpc3Q9Zil9fSxob3N0QmluZGluZ3M6''@;'; put 'put ''ZnVuY3Rpb24oZCxoKXsxJmQmJkZ0KCJzY3JvbGwiLGZ1bmN0aW9uKHYpe3JldHVybiBoLmhhbmRsZVNjcm9sbCh2KX0pfSxpbnB1dHM6e2hhc0NvbHVtbnM6Imhhc0NvbHVtbnMiLHBhZ2luZzoicGFnaW5nIixsaWJyYXJ5TGlzdDoibGlicmFyeUxpc3QifSxvdXRwdXRzOnt0YWJsZU9uQ2xp''@;'; put 'put ''Y2tFbWl0dGVyOiJ0YWJsZU9uQ2xpY2tFbWl0dGVyIixsaWJyYXJ5T25DbGlja0VtaXR0ZXI6ImxpYnJhcnlPbkNsaWNrRW1pdHRlciJ9LGZlYXR1cmVzOlt3bF0sZGVjbHM6NCx2YXJzOjMsY29uc3RzOltbInNlYXJjaExpYlRyZWVJbnB1dCIsIiJdLFsibGliVHJlZU5vZGUiLCIiXSxbInNl''@;'; put 'put ''YXJjaFRyZWVJbnB1dCIsIiJdLFsiY2xhc3MiLCJzZWFyY2gtbm9kZSIsNCwibmdJZiJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImNsYXNzIiwidy0xMDAgdGV4dC1jZW50ZXIiLDQsIm5nSWYiXSxbMSwic2VhcmNoLW5vZGUiXSxbMSwidHJlZS1zZWFyY2gtd3JhcHBlciJdLFsiYXBwU3Rl''@;'; put 'put ''YWxGb2N1cyIsIiIsImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJMaWJyYXJpZXMiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCIsIm5nTW9kZWwiXSxbInNoYXBlIiwic2VhcmNoIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInRp''@;'; put 'put ''bWVzIiwzLCJjbGljayIsNCwibmdJZiJdLFsic2hhcGUiLCJzZWFyY2giXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIl0sWzMsImNsckV4cGFuZGVkIiwiY2xyTG9hZGluZyIsImNsci1leHBhbmRlZCIsImNsaWNrIiwiY2xyRXhwYW5kZWRDaGFuZ2UiLDQsIm5nSWYiXSxbMywiY2xpY2si''@;'; put 'put ''LCJjbHJFeHBhbmRlZENoYW5nZSIsImNsckV4cGFuZGVkIiwiY2xyTG9hZGluZyJdLFsxLCJtLTAiLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siXSxbInNoYXBlIiwicmFjay1zZXJ2ZXIiXSxbMywiY2xyRXhwYW5kZWQiLCJjbHJMb2FkaW5nIiwiY2xyLWV4cGFuZGVkIiwiY2xpY2siLCJj''@;'; put 'put ''bHJFeHBhbmRlZENoYW5nZSIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJhcHBTdGVhbEZvY3VzIiwiIiwiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIlRhYmxlcyIsIm5hbWUiLCJpbnB1dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsMywibmdNb2RlbENoYW5nZSIsImtleXVwIiwibmdNb2Rl''@;'; put 'put ''bCJdLFs0LCJuZ1ZhciJdLFsiY2xyVG9vbHRpcFRyaWdnZXIiLCIiLDEsImNsci10cmVlbm9kZS1saW5rIiwzLCJjbGljayJdLFszLCJuZ1N3aXRjaCJdLFsic2hhcGUiLCJib2x0Iiw0LCJuZ1N3aXRjaENhc2UiXSxbInNoYXBlIiwidGFibGUiLDQsIm5nU3dpdGNoQ2FzZSJdLFsiY2xyUG9z''@;'; put 'put ''aXRpb24iLCJib3R0b20tcmlnaHQiLCJjbHJTaXplIiwibGciLDQsImNscklmT3BlbiJdLFs0LCJuZ0lmIl0sWyJzaGFwZSIsImJvbHQiXSxbInNoYXBlIiwidGFibGUiXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLXJpZ2h0IiwiY2xyU2l6ZSIsImxnIl0sWyJhcHBTdGVhbEZvY3VzIiwiIiwi''@;'; put 'put ''Y2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIkNvbHVtbnMiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCIsIm5nTW9kZWwiXSxbMSwiY2xyLXRyZWVub2RlLWxpbmsiLDMsImNsaWNrIl0sWyJzaGFwZSIsIm9iamVjdHMiXSxb''@;'; put 'put ''MSwidy0xMDAiLCJ0ZXh0LWNlbnRlciJdLFsxLCJzcGlubmVyIiwic3Bpbm5lci1zbSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGRlKDAsImNsci10cmVlIiksZ3QoMSxENnQsNiwzLCJjbHItdHJlZS1ub2RlIiwzKSgyLFk2dCwyLDEsIm5nLWNvbnRhaW5lciIsNCksaGUoKSxn''@;'; put 'put ''dCgzLEc2dCwzLDAsImRpdiIsNSkpLDImZCYmKGZlKCksTWUoIm5nSWYiLGgubGlicmFyeUxpc3QpLGZlKCksTWUoIm5nRm9yT2YiLGgubGlicmFyeUxpc3QpLGZlKCksTWUoIm5nSWYiLGgubGlicmFyaWVzUGFnaW5nKSl9LGRlcGVuZGVuY2llczpbbnMsYmEsUzIsY3AsRWgsUGQsZmcsSGws''@;'; put 'put ''ajAsTDIsWjEsdjcseTcsYjcscWwsbmwsJHMsU3cscjRdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCk7Y29uc3QgSzZ0PVsicmVzaXplQm94Il0scTZ0PVsiZHJhZ0hhbmRsZUNvcm5lciJdLFg2dD0oYyxsLGEpPT4oe2NvbEhlYWRlcnNIaWRkZW46Yyxjb2xIZWFkZXJzVmlzaWJs''@;'; put 'put ''ZTpsLGhlYWRlclBrczphfSksSjZ0PShjLGwpPT4oe3g6Yyx5Omx9KTtmdW5jdGlvbiBRNnQoYyxsKXtpZigxJmMmJihkZSgwLCJzcGFuIiwzNyksTGUoMSksaGUoKSksMiZjKXtjb25zdCBhPVJlKCk7ZmUoKSxVdSgiVG8gdW5sb2NrIG1vcmUgdGhlbiAiLGEubGljZW5jZVN0YXRlLnZhbHVl''@;'; put 'put ''LnZpZXdib3hfbGltaXQsIiAiLDE9PT1hLmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3Ym94X2xpbWl0PyJ2aWV3Ym94Ijoidmlld2JveGVzIiwiLCBjb250YWN0IHN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8iKX19ZnVuY3Rpb24gZTh0KGMsbCl7MSZjJiYoZGUoMCwiZGl2IiwzOCksR3QoMSwi''@;'; put 'put ''Y2xyLXNwaW5uZXIiLDM5KSxoZSgpKX1mdW5jdGlvbiB0OHQoYyxsKXsxJmMmJihkZSgwLCJwIiw0MCksTGUoMSwiIFZpZXdib3ggb3BlbiBsaW1pdCByZWFjaGVkICIpLGhlKCkpfWZ1bmN0aW9uIG44dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRjLXRyZWUiLDQxKSxGdCgi''@;'; put 'put ''bGlicmFyeU9uQ2xpY2tFbWl0dGVyIixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS5saWJyYXJ5T25DbGljayhoKSl9KSgidGFibGVPbkNsaWNrRW1pdHRlciIsZnVuY3Rpb24oaCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkudGFibGVPbkNsaWNrKGgpKX0pLGhlKCl9MiZjJiZNZSgi''@;'; put 'put ''bGlicmFyeUxpc3QiLFJlKCkubGlicmFyaWVzKX1mdW5jdGlvbiByOHQoYyxsKXsxJmMmJihkZSgwLCJwIiw0MiksTGUoMSwiIFBpY2sgdGFibGUgZnJvbSB0aGUgbGlzdCBvbiB0aGUgbGVmdCAiKSxoZSgpKX1mdW5jdGlvbiBpOHQoYyxsKXsxJmMmJkd0KDAsImNsci1zcGlubmVyIiw1MCl9''@;'; put 'put ''ZnVuY3Rpb24gYTh0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiYSIsMTcpLEZ0KCJjbGljayIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1SZSgpLiRpbXBsaWNpdCx2PVJlKCk7cmV0dXJuIHYubWluaW1pemUoZiksQ3Qodi5zdG9wUHJvcGFnYXRpb24oaCkpfSksR3QoMSwi''@;'; put 'put ''Y2xyLWljb24iLDIwKSxkZSgyLCJzcGFuIiwxOSksTGUoMywiTWluaW1pemUgdmlld2JveCIpLGhlKCkoKX19ZnVuY3Rpb24gbzh0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiYSIsMTcpLEZ0KCJjbGljayIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1SZSgpLiRpbXBsaWNp''@;'; put 'put ''dCx2PVJlKCk7cmV0dXJuIHYucmVzdG9yZShmKSxDdCh2LnN0b3BQcm9wYWdhdGlvbihoKSl9KSxHdCgxLCJjbHItaWNvbiIsMjEpLGRlKDIsInNwYW4iLDE5KSxMZSgzLCJSZXN0b3JlIHZpZXdib3giKSxoZSgpKCl9fWZ1bmN0aW9uIHM4dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2Rl''@;'; put 'put ''KDAsImRpdiIsNDMpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoUmUoKS5zZWxlY3RWaWV3Ym94KGgpKX0pLGRlKDEsImRpdiIsNDQpLExlKDIpLGd0KDMsaTh0LDEsMCwiY2xyLXNwaW5uZXIiLDQ1KSxoZSgpLGRlKDQsImRpdiIpKDUs''@;'; put 'put ''ImEiLDQ2KSxGdCgiY2xpY2siLGZ1bmN0aW9uKGgpe2NvbnN0IGY9d3QoYSkuJGltcGxpY2l0LHY9UmUoKTtyZXR1cm4gdi5yZXNldFBvc1NpemUoZiksQ3Qodi5zdG9wUHJvcGFnYXRpb24oaCkpfSksR3QoNiwiY2xyLWljb24iLDQ3KSxkZSg3LCJzcGFuIiwxOSksTGUoOCwiUmVzZXQgcG9z''@;'; put 'put ''aXRpb24gYW5kIHNpemUiKSxoZSgpKCksZ3QoOSxhOHQsNCwwLCJhIiw0OCkoMTAsbzh0LDQsMCwiYSIsNDgpLGRlKDExLCJhIiwxNyksRnQoImNsaWNrIixmdW5jdGlvbihoKXtjb25zdCBmPXd0KGEpLiRpbXBsaWNpdCx2PVJlKCk7cmV0dXJuIHYuY2xvc2UoZiksQ3Qodi5zdG9wUHJvcGFn''@;'; put 'put ''YXRpb24oaCkpfSksR3QoMTIsImNsci1pY29uIiw0OSksZGUoMTMsInNwYW4iLDE5KSxMZSgxNCwiQ2xvc2Ugdmlld2JveCIpLGhlKCkoKSgpKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9UmUoKTtUcigic2VsZWN0ZWQiLChudWxsPT1kLnNlbGVjdGVkVmlld2JveD9udWxsOmQu''@;'; put 'put ''c2VsZWN0ZWRWaWV3Ym94LmlkKT09PWEuaWQpLGZlKDIpLFZmKCIgIyIsYS5pZCwiICIsYS5saWJyYXJ5LCIuIixhLnRhYmxlLCIgIiksZmUoKSxNZSgibmdJZiIsYS5sb2FkaW5nRGF0YSksZmUoMiksVHIoImRpc2FibGVkIiwwPT09YS54JiYwPT09YS55KSxmZSg0KSxNZSgibmdJZiIsIWEu''@;'; put 'put ''bWluaW1pemVkKSxmZSgpLE1lKCJuZ0lmIixhLm1pbmltaXplZCl9fWZ1bmN0aW9uIGw4dChjLGwpe2lmKDEmYyYmKGRlKDAsIm9wdGlvbiIpLExlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgpLElyKCIgIixhLCIgIil9fWZ1bmN0aW9uIGM4dChjLGwpe2lmKDEmYyl7''@;'; put 'put ''Y29uc3QgYT1MbigpO3NpKDApLGRlKDEsImRpdiIsNTMpKDIsImFwcC1hdXRvY29tcGxldGUiLDU0LDApLEZ0KCJ2YWx1ZUNoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1oYSgzKSx2PVJlKCkubmdWYXI7cmV0dXJuIEN0KFJlKCkub25Db2xzZWFyY2hDaGFuZ2UoZixoLHYuY29s''@;'; put 'put ''SGVhZGVyc0hpZGRlbikpfSksZ3QoNCxsOHQsMiwxLCJvcHRpb24iLDU1KSxoZSgpKCksbGkoKX1pZigyJmMpe2NvbnN0IGE9UmUoKS5uZ1ZhcjtmZSgyKSxNZSgiaW5wdXRJZCIsInZpZXdib3gtY29sdW1uLXNlYXJjaCIpKCJlbWl0T25seVNlbGVjdGVkIiwhMCksZmUoMiksTWUoIm5nRm9y''@;'; put 'put ''T2YiLGEuY29sSGVhZGVyc0hpZGRlbil9fWZ1bmN0aW9uIHU4dChjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDYxKX1mdW5jdGlvbiBkOHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItaWNvbiIsNjIpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPVJl''@;'; put 'put ''KCkuJGltcGxpY2l0O3JldHVybiBDdChSZSgzKS5vbkNvbFJlbW92ZShoKSl9KSxoZSgpfX1mdW5jdGlvbiBoOHQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDU4KSgxLCJzcGFuIiksTGUoMiksZ3QoMyx1OHQsMSwwLCJjbHItaWNvbiIsNTkpLGhlKCksZ3QoNCxkOHQsMSwwLCJjbHItaWNv''@;'; put 'put ''biIsNjApLGhlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPVJlKDIpLm5nVmFyLGg9UmUoKTtkcmUoImNvbC1ib3ggY29sdW1uLSIsYSwiIiksVHIoImN1cnNvci1kZWZhdWx0LWkiLGQuaGVhZGVyUGtzLmluY2x1ZGVzKGEpKSgicHJpbWFyeUtleUhlYWRlclN0eWxlIixkLmhlYWRl''@;'; put 'put ''clBrcy5pbmNsdWRlcyhhKSksTWUoImNka0RyYWdEYXRhIixhKSgiY2RrRHJhZ0Rpc2FibGVkIixkLmhlYWRlclBrcy5pbmNsdWRlcyhhKSksZmUoMiksVXUoIiAiLGEsIiAiLCJudW0iPT09KG51bGw9PWguc2VsZWN0ZWRWaWV3Ym94VGFibGV8fG51bGw9PWguc2VsZWN0ZWRWaWV3Ym94VGFi''@;'; put 'put ''bGUuaG90VGFibGU/bnVsbDpoLnNlbGVjdGVkVmlld2JveFRhYmxlLmhvdFRhYmxlLiRkYXRhZm9ybWF0cy52YXJzW2FdLnR5cGUpPyIobnVtZXJpYykiOiIiLCIgIiksZmUoKSxNZSgibmdJZiIsZC5oZWFkZXJQa3MuaW5jbHVkZXMoYSkpLGZlKCksTWUoIm5nSWYiLCFkLmhlYWRlclBrcy5p''@;'; put 'put ''bmNsdWRlcyhhKSl9fWZ1bmN0aW9uIGY4dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO3NpKDApLGRlKDEsInAiLDEwKSxMZSgyLCJDb2x1bW5zIFRvIERpc3BsYXkgKGRyYWcgYW5kIHJlLW9yZGVyKSIpLGhlKCksZGUoMywiZGl2Iiw1NiksRnQoImNka0Ryb3BMaXN0RHJvcHBlZCIsZnVu''@;'; put 'put ''Y3Rpb24oaCl7cmV0dXJuIHd0KGEpLEN0KFJlKDIpLmNvbHVtbnNEcm9wKGgpKX0pLGd0KDQsaDh0LDUsMTMsImRpdiIsNTcpLGhlKCksbGkoKX1pZigyJmMpe2NvbnN0IGE9UmUoKS5uZ1ZhcjtmZSgzKSxNZSgiY2RrRHJvcExpc3REYXRhIixhLmNvbEhlYWRlcnNWaXNpYmxlKSxmZSgpLE1l''@;'; put 'put ''KCJuZ0Zvck9mIixhLmNvbEhlYWRlcnNWaXNpYmxlKX19ZnVuY3Rpb24gcDh0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiw1MSksZ3QoMSxjOHQsNSwzLCJuZy1jb250YWluZXIiLDUyKSgyLGY4dCw1LDIsIm5nLWNvbnRhaW5lciIsNTIpLGhlKCkpLDImYyl7Y29uc3QgYT1sLm5nVmFyO2Zl''@;'; put 'put ''KCksTWUoIm5nSWYiLGEuY29sSGVhZGVyc0hpZGRlbiksZmUoKSxNZSgibmdJZiIsYS5jb2xIZWFkZXJzVmlzaWJsZSl9fWZ1bmN0aW9uIGc4dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci1pY29uIiw4NiksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9''@;'; put 'put ''UmUoKS4kaW1wbGljaXQ7cmV0dXJuIEN0KFJlKCkuY29sbGFwc2UoaCkpfSksaGUoKX19ZnVuY3Rpb24gbTh0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLWljb24iLDg3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSgpLiRpbXBsaWNpdDtyZXR1''@;'; put 'put ''cm4gQ3QoUmUoKS5leHBhbmQoaCkpfSksaGUoKX19ZnVuY3Rpb24gdjh0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLWljb24iLDg4KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSgpLiRpbXBsaWNpdCxmPWhhKDE2KTtyZXR1cm4gQ3QoUmUoKS5z''@;'; put 'put ''ZWFyY2hUYWJsZShmLGgpKX0pLGhlKCl9fWZ1bmN0aW9uIGI4dChjLGwpezEmYyYmKGRlKDAsInNwYW4iLDg5KSxMZSgxLCIgTG9hZGluZy4uLiAiKSxoZSgpKX1mdW5jdGlvbiB5OHQoYyxsKXsxJmMmJihkZSgwLCJzcGFuIiw5MCksTGUoMSwiTG9hZGluZy4uLiIpLGhlKCkpfWZ1bmN0aW9u''@;'; put 'put ''IF84dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci1pY29uIiw5MSksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9UmUoKS4kaW1wbGljaXQsZj1oYSgxNik7cmV0dXJuIFJlKCkucmVsb2FkVGFibGVEYXRhKGgpLEN0KGYudmFsdWU9IiIpfSksaGUoKX19''@;'; put 'put ''ZnVuY3Rpb24gdzh0KGMsbCl7MSZjJiYoZGUoMCwiZGl2Iiw5NSksR3QoMSwiY2xyLXNwaW5uZXIiLDM5KSxoZSgpKX1mdW5jdGlvbiBDOHQoYyxsKXtpZigxJmMmJkd0KDAsImhvdC10YWJsZSIsOTYpLDImYyl7Y29uc3QgYT1SZSgpLm5nVmFyLGQ9UmUoKS4kaW1wbGljaXQsaD1SZSgpO01l''@;'; put 'put ''KCJob3RJZCIsImhvdEluc3RhbmNlX3ZpZXdib3hfIitkLmlkKSgicmVhZE9ubHkiLCEwKSgibW9kaWZ5Q29sV2lkdGgiLGgubWF4V2lkdGhDaGVrZXIpKCJjb3B5UGFzdGUiLGgudmlld2JveFRhYmxlc1thXS5ob3RUYWJsZS5jb3B5UGFzdGUpKCJjb250ZXh0TWVudSIsaC52aWV3Ym94VGFi''@;'; put 'put ''bGVzW2FdLmhvdFRhYmxlLmNvbnRleHRNZW51KSgibXVsdGlDb2x1bW5Tb3J0aW5nIiwhMCkoInZpZXdwb3J0Um93UmVuZGVyaW5nT2Zmc2V0Iiw1MCkoImRhdGEiLGgudmlld2JveFRhYmxlc1thXS5ob3RUYWJsZS5kYXRhKSgiY29sSGVhZGVycyIsaC52aWV3Ym94VGFibGVzW2FdLmhvdFRh''@;'; put 'put ''YmxlLmNvbEhlYWRlcnMpKCJjb2x1bW5zIixoLnZpZXdib3hUYWJsZXNbYV0uaG90VGFibGUuY29sdW1ucykoImZpbHRlcnMiLCEwKSgiZHJvcGRvd25NZW51IixoLnZpZXdib3hUYWJsZXNbYV0uaG90VGFibGUuZHJvcGRvd25NZW51KSgiaGVpZ2h0IixoLnZpZXdib3hUYWJsZXNbYV0uaG90''@;'; put 'put ''VGFibGUuaGVpZ2h0KSgiY2VsbHMiLGgudmlld2JveFRhYmxlc1thXS5ob3RUYWJsZS5jZWxscykoIm1heFJvd3MiLGgudmlld2JveFRhYmxlc1thXS5ob3RUYWJsZS5tYXhSb3dzKSgibWFudWFsQ29sdW1uUmVzaXplIiwhMCkoImxpY2Vuc2VLZXkiLGgudmlld2JveFRhYmxlc1thXS5ob3RU''@;'; put 'put ''YWJsZS5saWNlbnNlS2V5KX19ZnVuY3Rpb24gUzh0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiw5MiksZ3QoMSx3OHQsMiwwLCJkaXYiLDkzKSgyLEM4dCwxLDE3LCJob3QtdGFibGUiLDk0KSxoZSgpKSwyJmMpe2NvbnN0IGE9bC5uZ1ZhcixkPVJlKCkuJGltcGxpY2l0O19kKCJkaXNwbGF5''@;'; put 'put ''IixkLmNvbGxhcHNlZD8ibm9uZSI6IiIpLGZlKCksTWUoIm5nSWYiLGQubG9hZGluZ0RhdGEmJmE8MCksZmUoKSxNZSgibmdJZiIsYT4tMSl9fWZ1bmN0aW9uIE04dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIsNjMsMSksRnQoIm1vdXNlZG93biIsZnVuY3Rpb24oKXtj''@;'; put 'put ''b25zdCBoPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoUmUoKS5mb2N1c1ZpZXdib3goaCkpfSkoImNka0RyYWdFbmRlZCIsZnVuY3Rpb24oaCl7Y29uc3QgZj13dChhKS4kaW1wbGljaXQ7cmV0dXJuIEN0KFJlKCkudmlld2JveERyYWdFbmRlZChoLGYpKX0pLGRlKDIsImRpdiIsNjQpKDMs''@;'; put 'put ''InNwYW4iLDY1KSxMZSg0KSxoZSgpLGRlKDUsImRpdiIsNjYpLGd0KDYsZzh0LDEsMCwiY2xyLWljb24iLDY3KSg3LG04dCwxLDAsImNsci1pY29uIiw2OCksZGUoOCwiY2xyLWljb24iLDY5KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKS4kaW1wbGljaXQ7cmV0dXJuIEN0''@;'; put 'put ''KFJlKCkubWluaW1pemUoaCkpfSksaGUoKSxkZSg5LCJjbHItaWNvbiIsNzApLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoUmUoKS5jbG9zZShoKSl9KSxoZSgpKCkoKSxkZSgxMCwic3BhbiIsNzEsMiksRnQoImNka0RyYWdNb3ZlZCIs''@;'; put 'put ''ZnVuY3Rpb24oaCl7Y29uc3QgZj13dChhKS4kaW1wbGljaXQsdj1oYSgxKSxNPWhhKDExKTtyZXR1cm4gQ3QoUmUoKS5kcmFnTW92ZShNLHYsZixoKSl9KSxoZSgpLGRlKDEyLCJmb3JtIiw3MikoMTMsImRpdiIsNzMpKDE0LCJkaXYiLDc0KSgxNSwiaW5wdXQiLDc1LDMpLEZ0KCJrZXl1cC5l''@;'; put 'put ''bnRlciIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLiRpbXBsaWNpdCxmPWhhKDE2KTtyZXR1cm4gQ3QoUmUoKS5zZWFyY2hUYWJsZShmLGgpKX0pLGhlKCksZ3QoMTcsdjh0LDEsMCwiY2xyLWljb24iLDc2KSgxOCxiOHQsMiwwLCJzcGFuIiw3NyksaGUoKSxkZSgxOSwiY2xyLWNoZWNrYm94''@;'; put 'put ''LWNvbnRhaW5lciIpKDIwLCJjbHItY2hlY2tib3gtd3JhcHBlciIpKDIxLCJpbnB1dCIsNzgpLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtjb25zdCBmPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gbWkoZi5zZWFyY2hOdW1lcmljLGgpfHwoZi5zZWFyY2hOdW1lcmljPWgpLEN0KGgp''@;'; put 'put ''fSksaGUoKSxkZSgyMiwibGFiZWwiKSxMZSgyMywiTnVtZXJpYyIpLGhlKCkoKSgpKCksZGUoMjQsImRpdiIsNDQpLGd0KDI1LHk4dCwyLDAsInNwYW4iLDc5KSgyNixfOHQsMSwwLCJjbHItaWNvbiIsODApLGRlKDI3LCJhIiw4MSksRnQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGg9d3Qo''@;'; put 'put ''YSkuJGltcGxpY2l0LGY9aGEoMTYpO3JldHVybiBSZSgpLm9wZW5GaWx0ZXIoaCksQ3QoZi52YWx1ZT0iIil9KSxHdCgyOCwiY2xyLWljb24iLDgyKSxkZSgyOSwic3BhbiIsODMpLExlKDMwKSxoZSgpKCksZGUoMzEsImNsci1pY29uIiw4NCksRnQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0''@;'; put 'put ''IGg9d3QoYSkuJGltcGxpY2l0O3JldHVybiBDdChSZSgpLm9wZW5UYWJsZUVkaXQoaCkpfSksaGUoKSgpKCksZ3QoMzIsUzh0LDMsNCwiZGl2Iiw4NSksaGUoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1SZSgpO19kKCJkaXNwbGF5IixhLm1pbmltaXplZD8ibm9uZSI6IiIpKCJ3''@;'; put 'put ''aWR0aCIsYS53aWR0aCwicHgiKSgiaGVpZ2h0IixhLmhlaWdodCwicHgiKSgicG9pbnRlci1ldmVudHMiLGEuY29sbGFwc2VkPyJub25lIjoiIikoImJveC1zaGFkb3ciLGEuY29sbGFwc2VkPyJub25lIjoiIiksVHIoImZvY3VzZWQiLGEuZm9jdXNlZCksTWUoImNka0RyYWdGcmVlRHJhZ1Bv''@;'; put 'put ''c2l0aW9uIixscCgzNCxKNnQsYS54LGEueSkpKCJpZCIsInZpZXdib3hfIithLmlkKSxmZSg0KSxWZigiICMiLGEuaWQsIiAiLGEubGlicmFyeSwiLiIsYS50YWJsZSwiICIpLGZlKDIpLE1lKCJuZ0lmIiwhYS5jb2xsYXBzZWQpLGZlKCksTWUoIm5nSWYiLGEuY29sbGFwc2VkKSxmZSgzKSxN''@;'; put 'put ''ZSgiaWQiLCJoYW5kbGVfdmlld2JveF8iK2EuaWQpLGZlKDIpLF9kKCJkaXNwbGF5IixhLmNvbGxhcHNlZD8ibm9uZSI6IiIpLGZlKDMpLE1lKCJ0eXBlIixhLnNlYXJjaE51bWVyaWM/Im51bWJlciI6InRleHQiKSxmZSgyKSxNZSgibmdJZiIsIWEuc2VhcmNoTG9hZGluZyksZmUoKSxNZSgi''@;'; put 'put ''bmdJZiIsYS5zZWFyY2hMb2FkaW5nKSxmZSgzKSxwaSgibmdNb2RlbCIsYS5zZWFyY2hOdW1lcmljKSxmZSg0KSxNZSgibmdJZiIsYS5sb2FkaW5nRGF0YSksZmUoKSxNZSgibmdJZiIsIWEubG9hZGluZ0RhdGEpLGZlKDIpLFRyKCJmaWx0ZXItYWN0aXZlIiwiMCIhPT1hLmZpbHRlcl9wayks''@;'; put 'put ''ZmUoMiksd3IoYS5maWx0ZXJUZXh0KSxmZSgpLFRyKCJkaXNhYmxlZCIsIWQudGFibGVFZGl0RXhpc3RzKGEpKSxmZSgpLE1lKCJuZ1ZhciIsZC5nZXRWaWV3Ym94VGFibGVJbmRleChhKSl9fWZ1bmN0aW9uIHg4dChjLGwpe2lmKDEmYyYmR3QoMCwiYXBwLXF1ZXJ5Iiw5Nyw0KSwyJmMpe2Nv''@;'; put 'put ''bnN0IGE9UmUoKTtNZSgidmlld2JveElkIixudWxsPT1hLmZpbHRlcmluZ1ZpZXdib3g/bnVsbDphLmZpbHRlcmluZ1ZpZXdib3guaWQpfX1sZXQgSTZlPSgoKT0+e2NsYXNzIGN7Z2V0IHZpZXdib3hNb2RhbCgpe3JldHVybiB0aGlzLl92aWV3Ym94TW9kYWx9c2V0IHZpZXdib3hNb2RhbChh''@;'; put 'put ''KXtpZighMT09PXRoaXMubGljZW5jZVN0YXRlLnZhbHVlLnZpZXdib3gmJmEpcmV0dXJuIHRoaXMuZXZlbnRTZXJ2aWNlLnNob3dEZW1vTGltaXRNb2RhbCgiVmlld2JveGVzIiksdm9pZCB0aGlzLnZpZXdib3hNb2RhbENoYW5nZS5lbWl0KCExKTt0aGlzLl92aWV3Ym94TW9kYWw9YSxhJiZ0''@;'; put 'put ''aGlzLnVuc2V0U2VsZWN0ZWRWaWV3Ym94KCl9Y29uc3RydWN0b3IoYSxkLGgsZix2LE0sRCxaLHJlLGNlKXt0aGlzLm5nWm9uZT1hLHRoaXMubGljZW5jZVNlcnZpY2U9ZCx0aGlzLnNhc1NlcnZpY2U9aCx0aGlzLmV2ZW50U2VydmljZT1mLHRoaXMuc2FzU3RvcmVTZXJ2aWNlPXYsdGhpcy5s''@;'; put 'put ''b2dnZXJTZXJ2aWNlPU0sdGhpcy5oZWxwZXJTZXJ2aWNlPUQsdGhpcy5yb3V0ZXI9Wix0aGlzLmFjdGl2YXRlZFJvdXRlPXJlLHRoaXMuY2RmPWNlLHRoaXMuX3ZpZXdib3hNb2RhbD0hMSx0aGlzLnZpZXdib3hNb2RhbENoYW5nZT1uZXcgS3IsdGhpcy5saWJpbmZvPW51bGwsdGhpcy5saWJy''@;'; put 'put ''YXJpZXNMb2FkaW5nPSEwLHRoaXMudmlld2JveGVzPVtdLHRoaXMuZGVmYXVsdENvbmZpZz17aWQ6LTEsbGlicmFyeToiIix0YWJsZToiIix3aWR0aDo1MDAsaGVpZ2h0OjMwMCx4OjAseToxNTAsY29sdW1uczpbXX0sdGhpcy5zYXNqc0NvbmZpZz1uZXcgbWguU0FTanNDb25maWcsdGhpcy5o''@;'; put 'put ''b3RUYWJsZURlZmF1bHQ9e2RhdGE6W10saGVhZGVyUGtzOltdLCRkYXRhZm9ybWF0czp7fSxhbGxDb2xIZWFkZXJzOltdLGNvbEhlYWRlcnNIaWRkZW46W10sY29sSGVhZGVyc1Zpc2libGU6W10sY29sSGVhZGVyczpbXSxjb250ZXh0TWVudTpbImNvcHlfd2l0aF9jb2x1bW5faGVhZGVycyIs''@;'; put 'put ''ImNvcHlfY29sdW1uX2hlYWRlcnNfb25seSJdLGNvcHlQYXN0ZTp7Y29weUNvbHVtbkhlYWRlcnM6ITAsY29weUNvbHVtbkhlYWRlcnNPbmx5OiEwfSxjb2x1bW5zOltdLGNvbHM6W10saGVpZ2h0OiIxMDAlIixzZXR0aW5nczp7fSxoaWRkZW5Db2x1bW5zOiEwLG1hbnVhbENvbHVtbk1vdmU6''@;'; put 'put ''ITEsYWZ0ZXJHZXRDb2xIZWFkZXI6dm9pZCAwLGxpY2Vuc2VLZXk6dm9pZCAwLGRyb3Bkb3duTWVudTp2b2lkIDB9LHRoaXMudmlld2JveFRhYmxlcz1bXSx0aGlzLmZpbHRlcj0hMSx0aGlzLmZpbHRlckxvYWRpbmc9ITEsdGhpcy5udWxsVmFyaWFibGVzPSExLHRoaXMubGljZW5jZVN0YXRl''@;'; put 'put ''PXRoaXMubGljZW5jZVNlcnZpY2UubGljZW5jZVN0YXRlLHRoaXMuSW5maW5pdHk9MS8wLHRoaXMubWF4Vmlld2JveGVzPXRoaXMubGljZW5jZVN0YXRlLnZhbHVlLnZpZXdib3hfbGltaXQ9PT0xLzA/Njp0aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3Ym94X2xpbWl0fHw2LHRoaXMuaG90''@;'; put 'put ''VGFibGVSZWdpc3RlcmVyPW5ldyBZbX1uZ09uSW5pdCgpe3RoaXMuc2FzU3RvcmVTZXJ2aWNlLnZpZXdMaWJzKCkudGhlbihkPT57dGhpcy5saWJyYXJpZXM9ZC5zYXNsaWJzfSkuY2F0Y2goZD0+e3RoaXMubG9nZ2VyU2VydmljZS5lcnJvcihkKX0pLmZpbmFsbHkoKCk9Pnt0aGlzLmxpYnJh''@;'; put 'put ''cmllc0xvYWRpbmc9ITF9KSx0aGlzLl9xdWVyeT10aGlzLnNhc1N0b3JlU2VydmljZS5xdWVyeS5zdWJzY3JpYmUoZD0+e3RoaXMuY2xhdXNlcz1kLm9iaix0aGlzLmZpbHRlckxpYmRzPWQubGliZHN9KSx0aGlzLnNhc2pzQ29uZmlnPXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygp''@;'; put 'put ''LHRoaXMubGljZW5jZVNlcnZpY2UuaG90X2xpY2Vuc2Vfa2V5LnN1YnNjcmliZShkPT57dGhpcy5ob3RUYWJsZURlZmF1bHQubGljZW5zZUtleT1kfSk7Y29uc3QgYT10aGlzLmFjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zLnZpZXdib3hlczthJiYoITE9PT10aGlzLmxpY2Vu''@;'; put 'put ''Y2VTdGF0ZS52YWx1ZS52aWV3Ym94PyhzZXRUaW1lb3V0KCgpPT50aGlzLmV2ZW50U2VydmljZS5zaG93RGVtb0xpbWl0TW9kYWwoIkxpbmtpbmcgVmlld2JveGVzIikpLHRoaXMucm91dGVyLm5hdmlnYXRlKFtdLHtyZWxhdGl2ZVRvOnRoaXMuYWN0aXZhdGVkUm91dGUscXVlcnlQYXJhbXM6''@;'; put 'put ''e319KSk6KHRoaXMudmlld2JveGVzPXRoaXMuZGVjb2RlVXJsRGF0YShhKSxzZXRUaW1lb3V0KCgpPT57dGhpcy5zZXRBbGxIYW5kbGVUcmFuc2Zvcm0oKX0pKSksdGhpcy5yZUxvYWRWaWV3Ym94dGFibGVzKHRoaXMudmlld2JveGVzKX1uZ0FmdGVyVmlld0luaXQoKXt9Z2V0IHZpZXdib3hM''@;'; put 'put ''aW1pdFJlYWNoZWQoKXtyZXR1cm4gdGhpcy52aWV3Ym94ZXMubGVuZ3RoPj10aGlzLm1heFZpZXdib3hlc31jbHJNb2RhbE9wZW5DaGFuZ2UoYSl7dGhpcy52aWV3Ym94TW9kYWxDaGFuZ2UuZW1pdChhKX1saWJyYXJ5T25DbGljayhhKXthLnRhYmxlc0xvYWRlZHx8dGhpcy5sb2FkVGFibGVz''@;'; put 'put ''KGEubGlicmFyeS5MSUJSQVJZUkVGLGEubGlicmFyeSl9dGFibGVPbkNsaWNrKGEpe3ZhciBkPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2lmKGQudmlld2JveExpbWl0UmVhY2hlZClyZXR1cm47Y29uc3QgaD17Li4uZC5kZWZhdWx0Q29uZmlnLHRhYmxlOmEubGliVGFibGUsbGlicmFy''@;'; put 'put ''eTphLmxpYnJhcnkuTElCUkFSWU5BTUUsbG9hZGluZ0RhdGE6ITAsZmlsdGVyX3BrOiIwIixpZDpkLnZpZXdib3hlcy5sZW5ndGgrMSx4OndpbmRvdy5pbm5lcldpZHRoLWQuZGVmYXVsdENvbmZpZy53aWR0aCx5OjE1MH07ZC52aWV3Ym94ZXMucHVzaChoKSxzZXRUaW1lb3V0KCgpPT57ZC5z''@;'; put 'put ''ZXRBbGxIYW5kbGVUcmFuc2Zvcm0oKX0pO2NvbnN0IGY9YCR7YS5saWJyYXJ5LkxJQlJBUllSRUZ9LiR7YS5saWJUYWJsZX1gO3lpZWxkIGQubG9hZERhdGEoZixoKSxoLmxvYWRpbmdEYXRhPSExLGQuZXZlbnRTZXJ2aWNlLmRpc3BhdGNoRXZlbnQoInJlc2l6ZSIpLGQuc25hcFRvR3JpZCgp''@;'; put 'put ''fSkoKX1sb2FkVGFibGVzKGEsZCl7dGhpcy5zYXNTdG9yZVNlcnZpY2Uudmlld1RhYmxlcyhhKS50aGVuKGg9PntsZXQgZj1oLm1wdGFibGVzLm1hcChmdW5jdGlvbih2KXtyZXR1cm4gdi5NRU1OQU1FfSk7dGhpcy5saWJpbmZvPWgubGliaW5mb3x8W10sdGhpcy50YWJsZXM9ZixkJiYoZC50''@;'; put 'put ''YWJsZXM9ZixkLmxpYmluZm89dGhpcy5saWJpbmZvLGQubG9hZGluZ1RhYmxlcz0hMSxmLmxlbmd0aD4wJiYoZC5leHBhbmRlZD0hMCkpfSkuY2F0Y2goaD0+e3RoaXMubG9nZ2VyU2VydmljZS5lcnJvcihoKX0pfXJlbG9hZERhdGEoYSxkKXt2YXIgaD10aGlzO3JldHVybiBlZShmdW5jdGlv''@;'; put 'put ''biooKXtyZXR1cm4gbmV3IFByb21pc2UoKGYsdik9PntsZXQgTT1oLnZpZXdib3hUYWJsZXMuZmluZChEPT5ELnZpZXdib3hJZD09PWQuaWQpO2guc2FzU3RvcmVTZXJ2aWNlLnZpZXdEYXRhKGEscGFyc2VJbnQoZC5maWx0ZXJfcGt8fCIwIikpLnRoZW4oRD0+e00mJihNLmhvdFRhYmxlLmRh''@;'; put 'put ''dGE9RC52aWV3ZGF0YSksZihudWxsKX0pLmNhdGNoKCgpPT57digpfSl9KX0pKCl9bG9hZERhdGEoYSxkKXt2YXIgaD10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtyZXR1cm4gbmV3IFByb21pc2UoKGYsdik9PntsZXQgTT0hMSxEPWgudmlld2JveFRhYmxlcy5maW5kKFo9Ploudmlld2Jv''@;'; put 'put ''eElkPT09ZC5pZCk7RCYmKCIwIj09PWQuZmlsdGVyX3BrfHwhZC5maWx0ZXJfcGspJiZmKCksaC5zYXNTdG9yZVNlcnZpY2Uudmlld0RhdGEoYSxwYXJzZUludChkLmZpbHRlcl9wa3x8IjAiKSkudGhlbihaPT57RD9NPSEwOkQ9e3ZpZXdib3hJZDpkLmlkLHZpZXdib3hMaWJEYXRhc2V0OmEs''@;'; put 'put ''aG90VGFibGU6YUwoaC5ob3RUYWJsZURlZmF1bHQpfSxELmhvdFRhYmxlLmRhdGE9Wi52aWV3ZGF0YSxELmhvdFRhYmxlLiRkYXRhZm9ybWF0cz1aLiR2aWV3ZGF0YSxELmhvdFRhYmxlLmNvbHM9Wi5jb2xzLHplZShELmhvdFRhYmxlLmNvbHMsW10sWi4kdmlld2RhdGEpO2xldCByZT1bXSxj''@;'; put 'put ''ZT1bXTtmb3IobGV0IGJlIGluIFoudmlld2RhdGFbMF0pYmUmJmNlLnB1c2goYmUpO2ZvcihsZXQgYmU9MDtiZTxjZS5sZW5ndGg7YmUrKylyZS5wdXNoKHtkYXRhOmNlW2JlXX0pO0QuaG90VGFibGUuaGVhZGVyUGtzPWFMKFouc2FzcGFyYW1zWzBdLlBLX0ZJRUxEUy5zcGxpdCgiICIpKSxE''@;'; put 'put ''LmhvdFRhYmxlLmFsbENvbEhlYWRlcnM9Y2UuZmlsdGVyKGJlPT4hRC5ob3RUYWJsZS5oZWFkZXJQa3MuaW5jbHVkZXMoYmUpKSxELmhvdFRhYmxlLmNvbEhlYWRlcnNIaWRkZW49YUwoRC5ob3RUYWJsZS5hbGxDb2xIZWFkZXJzKSxELmhvdFRhYmxlLmNvbEhlYWRlcnNWaXNpYmxlPWNlLmZp''@;'; put 'put ''bHRlcihiZT0+RC5ob3RUYWJsZS5oZWFkZXJQa3MuaW5jbHVkZXMoYmUpKSxELmhvdFRhYmxlLmNvbEhlYWRlcnM9Y2UsRC5ob3RUYWJsZS5jb2x1bW5zPXJlLGQuY29sdW1ucyYmZC5jb2x1bW5zLmxlbmd0aD4wPyhELmhvdFRhYmxlLm1hbnVhbENvbHVtbk1vdmU9ZC5jb2x1bW5zLGQuY29s''@;'; put 'put ''dW1ucz8ubWFwKChiZSxFZSk9Pntjb25zdCBCZT1jZVtiZV0scWU9RC5ob3RUYWJsZS5jb2xIZWFkZXJzSGlkZGVuLmluZGV4T2YoQmUpO3FlPi0xJiYoRC5ob3RUYWJsZS5jb2xIZWFkZXJzSGlkZGVuLnNwbGljZShxZSwxKSxELmhvdFRhYmxlLmNvbEhlYWRlcnNWaXNpYmxlW0VlXT1CZSl9''@;'; put 'put ''KSk6RC5ob3RUYWJsZS5jb2xIZWFkZXJzVmlzaWJsZS5wdXNoKC4uLkQuaG90VGFibGUuY29sSGVhZGVyc0hpZGRlbi5zcGxpY2UoMCwxMCkpLEQuaG90VGFibGUuY29sSGVhZGVyc1Zpc2libGU9RC5ob3RUYWJsZS5jb2xIZWFkZXJzVmlzaWJsZS5maWx0ZXIoYmU9PmJlKSxNfHxoLnZpZXdi''@;'; put 'put ''b3hUYWJsZXMucHVzaChEKSxkLnF1ZXJ5PWguaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoWi5xdWVyeSksZC5maWx0ZXJUZXh0PVouc2FzcGFyYW1zWzBdLkZJTFRFUl9URVhULHNldFRpbWVvdXQoKCk9PntoLnVwZGF0ZUhvdENvbHVtbnMoRC5ob3RUYWJsZS5jb2xIZWFkZXJzSGlkZGVufHxb''@;'; put 'put ''XSxkLmlkKTtjb25zdCBiZT1oLmdldFZpZXdib3hIb3RJbnN0YW5jZShkLmlkKTtiZT8udXBkYXRlU2V0dGluZ3Moe21hbnVhbENvbHVtbk1vdmU6RC5ob3RUYWJsZS5tYW51YWxDb2x1bW5Nb3ZlLGFmdGVyR2V0Q29sSGVhZGVyOihFZSxCZSk9Pntjb25zdCBxZT1iZT8uY29sVG9Qcm9wKEVl''@;'; put 'put ''KTtxZSYmRC5ob3RUYWJsZS5oZWFkZXJQa3MuaW5kZXhPZihxZSk+LTEmJkJlLmNsYXNzTGlzdC5hZGQoInByaW1hcnlLZXlIZWFkZXJTdHlsZSIpLEJlLmNsYXNzTGlzdC5hZGQoS24uaGFuZHNvbnRhYmxlLmRhcmtUYWJsZUhlYWRlckNsYXNzKX19KSxiZT8ucmVuZGVyKCksaC5zZWxlY3Rl''@;'; put 'put ''ZFZpZXdib3gmJmgucmVzZXRTZWxlY3RlZFZpZXdib3goZCl9KSxmKCl9KS5jYXRjaChaPT57aC5sb2dnZXJTZXJ2aWNlLmVycm9yKFopLHYoKX0pfSl9KSgpfXJlTG9hZFZpZXdib3h0YWJsZXMoYSl7YS5tYXAoZD0+e2NvbnN0IGg9YCR7ZC5saWJyYXJ5fS4ke2QudGFibGV9YDtkLmxvYWRp''@;'; put 'put ''bmdEYXRhPSEwLHRoaXMubG9hZERhdGEoaCxkKS50aGVuKCgpPT57ZC5sb2FkaW5nRGF0YT0hMX0pfSl9bWF4V2lkdGhDaGVrZXIoYSxkKXtyZXR1cm4gYT4yMDA/MjAwOmF9Z2V0Vmlld2JveFRhYmxlSW5kZXgoYSl7cmV0dXJuIHRoaXMudmlld2JveFRhYmxlcy5maW5kSW5kZXgoaD0+aC52''@;'; put 'put ''aWV3Ym94SWQ9PT1hLmlkKX1yZXNpemUoYSxkKXtjb25zdCBoPWEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksZj1kLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHY9aC5sZWZ0LWYubGVmdCtoLndpZHRoLE09aC50b3AtZi50b3AraC5oZWlnaHQ7cmV0dXJuIGQuc3R5bGUud2lkdGg9disicHgi''@;'; put 'put ''LGQuc3R5bGUuaGVpZ2h0PU0rInB4Iix0aGlzLnNldEFsbEhhbmRsZVRyYW5zZm9ybSgpLHRoaXMuaGVscGVyU2VydmljZS5kZWJvdW5jZUNhbGwoMWUzLCgpPT57dGhpcy52aWV3Ym94Q2hhbmdlZCgpLHRoaXMuZXZlbnRTZXJ2aWNlLmRpc3BhdGNoRXZlbnQoInJlc2l6ZSIpfSkse3dpZHRo''@;'; put 'put ''OnYsaGVpZ2h0Ok19fWRyYWdNb3ZlKGEsZCxoLGYpe3RoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57Y29uc3Qgdj10aGlzLnJlc2l6ZShhLGQpO2gud2lkdGg9di53aWR0aCxoLmhlaWdodD12LmhlaWdodH0pfXNldEFsbEhhbmRsZVRyYW5zZm9ybSgpe3RoaXMucmVzaXplQm94''@;'; put 'put ''UXVlcnkuZm9yRWFjaChhPT57Y29uc3QgZD1hLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksaD1gaGFuZGxlXyR7YS5uYXRpdmVFbGVtZW50LmlkfWAsZj10aGlzLmRyYWdIYW5kbGVDb3JuZXJRdWVyeS5maW5kKCh2LE0pPT52Lm5hdGl2ZUVsZW1lbnQuaWQ9PT1oKTt0''@;'; put 'put ''aGlzLnNldEhhbmRsZVRyYW5zZm9ybShmPy5uYXRpdmVFbGVtZW50LGQsImJvdGgiKX0pfXNldEhhbmRsZVRyYW5zZm9ybShhLGQsaCl7Y29uc3QgZj1hLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2xldCB2PWQud2lkdGgtZi53aWR0aCxNPWQuaGVpZ2h0LWYuaGVpZ2h0O3YrPTUsTSs9NSwi''@;'; put 'put ''eCI9PT1oJiYoYS5zdHlsZS50cmFuc2Zvcm09YHRyYW5zbGF0ZSgke3Z9cHgsIDApYCksInkiPT09aCYmKGEuc3R5bGUudHJhbnNmb3JtPWB0cmFuc2xhdGUoMCwgJHtNfXB4KWApLCJib3RoIj09PWgmJihhLnN0eWxlLnRyYW5zZm9ybT1gdHJhbnNsYXRlKCR7dn1weCwgJHtNfXB4KWApfWZv''@;'; put 'put ''Y3VzVmlld2JveChhKXt0aGlzLnZpZXdib3hlcy5tYXAoZD0+e2QuZm9jdXNlZD0hMX0pLGEuZm9jdXNlZD0hMH12aWV3Ym94RHJhZ0VuZGVkKGEsZCl7bGV0IGY9YS5zb3VyY2UuZ2V0Um9vdEVsZW1lbnQoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtkLng9Zi5sZWZ0LGQueT1mLnRvcCx0''@;'; put 'put ''aGlzLnZpZXdib3hDaGFuZ2VkKCl9c25hcFRvR3JpZCgpe2NvbnN0IGE9d2luZG93LmlubmVyV2lkdGgsZD13aW5kb3cuaW5uZXJIZWlnaHQsTT1NYXRoLmNlaWwodGhpcy52aWV3Ym94ZXMubGVuZ3RoLzIpLEQ9TWF0aC5mbG9vcih0aGlzLnZpZXdib3hlcy5sZW5ndGgvMiksY2U9KGEtNSoo''@;'; put 'put ''TSsxKSkvTSxiZT0oYS01KihEKzEpKS9EO2xldCBCZT0wLHJ0PShkLTI1MC02MCkvMixwdD0wLGR0PTA7Zm9yKGxldCBKdD0wO0p0PHRoaXMudmlld2JveGVzLmxlbmd0aDtKdCsrKXtsZXQgdm49dGhpcy52aWV3Ym94ZXNbSnRdLENuPSEoSnQ+TS0xKTtjb25zdCB0bj1Dbj9jZTpiZTshQ24m''@;'; put 'put ''JjA9PT1kdCYmKHB0PTAsZHQrKyxCZT0wKSx2bi54PTUrQmUrcHQqKHRuKzUpLHZuLnk9MjUwK2R0KihydCs1KSx2bi53aWR0aD10bix2bi5oZWlnaHQ9cnQscHQrK310aGlzLnZpZXdib3hDaGFuZ2VkKCksc2V0VGltZW91dCgoKT0+e3RoaXMuc2V0QWxsSGFuZGxlVHJhbnNmb3JtKCl9KX1t''@;'; put 'put ''aW5pbWl6ZUFsbCgpe3RoaXMudmlld2JveGVzLmZvckVhY2goYT0+e2EubWluaW1pemVkPSEwfSksdGhpcy52aWV3Ym94Q2hhbmdlZCgpfXJlc3RvcmVBbGwoKXt0aGlzLnZpZXdib3hlcy5mb3JFYWNoKGE9PnthLm1pbmltaXplZD0hMX0pLHRoaXMudmlld2JveENoYW5nZWQoKX1yZXNldFBv''@;'; put 'put ''c1NpemUoYSl7YS54PXdpbmRvdy5pbm5lcldpZHRoLXRoaXMuZGVmYXVsdENvbmZpZy53aWR0aCxhLnk9dGhpcy5kZWZhdWx0Q29uZmlnLnksYS53aWR0aD10aGlzLmRlZmF1bHRDb25maWcud2lkdGgsYS5oZWlnaHQ9dGhpcy5kZWZhdWx0Q29uZmlnLmhlaWdodCx0aGlzLnZpZXdib3hDaGFu''@;'; put 'put ''Z2VkKCl9bWluaW1pemUoYSl7YS5taW5pbWl6ZWQ9ITAsdGhpcy52aWV3Ym94Q2hhbmdlZCgpfXJlc3RvcmUoYSl7YS5taW5pbWl6ZWQ9ITEsdGhpcy52aWV3Ym94Q2hhbmdlZCgpfWNvbGxhcHNlKGEpe2EuY29sbGFwc2VkPSEwLHRoaXMudmlld2JveENoYW5nZWQoKX1leHBhbmQoYSl7YS5j''@;'; put 'put ''b2xsYXBzZWQ9ITEsdGhpcy52aWV3Ym94Q2hhbmdlZCgpfWNsb3NlKGEpe2NvbnN0IGQ9dGhpcy52aWV3Ym94ZXMuZmluZEluZGV4KGY9PmYuaWQ9PT1hLmlkKSxoPXRoaXMudmlld2JveFRhYmxlcy5maW5kSW5kZXgoZj0+Zi52aWV3Ym94SWQ9PT1hLmlkKTtkPi0xJiZ0aGlzLnZpZXdib3hl''@;'; put 'put ''cy5zcGxpY2UoZCwxKSxoPi0xJiZ0aGlzLnZpZXdib3hUYWJsZXMuc3BsaWNlKGgsMSksdGhpcy5zZWxlY3RlZFZpZXdib3g/LmlkPT09YS5pZCYmdGhpcy51bnNldFNlbGVjdGVkVmlld2JveCgpLEtuLnZpZXdib3hlc1thLmlkXT10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKGhaKSx0''@;'; put 'put ''aGlzLnZpZXdib3hDaGFuZ2VkKCl9c2VsZWN0Vmlld2JveChhKXt2b2lkIDA9PT10aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlJiZ2b2lkIDA9PT10aGlzLnNlbGVjdGVkVmlld2JveD90aGlzLnJlc2V0U2VsZWN0ZWRWaWV3Ym94KGEpOmEuaWQ9PT10aGlzLnNlbGVjdGVkVmlld2JveD8uaWQ/''@;'; put 'put ''dGhpcy51bnNldFNlbGVjdGVkVmlld2JveCgpOnRoaXMucmVzZXRTZWxlY3RlZFZpZXdib3goYSl9Y29sdW1uc0Ryb3AoYSl7dGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZT8uaG90VGFibGUuY29sSGVhZGVyc0hpZGRlbiYmKGEucHJldmlvdXNDb250YWluZXI9PT1hLmNvbnRhaW5lcj9kMWUo''@;'; put 'put ''YS5jb250YWluZXIuZGF0YSxhLnByZXZpb3VzSW5kZXgsYS5jdXJyZW50SW5kZXgpOmZ1bmN0aW9uIFZGZShjLGwsYSxkKXtjb25zdCBoPUF4KGEsYy5sZW5ndGgtMSksZj1BeChkLGwubGVuZ3RoKTtjLmxlbmd0aCYmbC5zcGxpY2UoZiwwLGMuc3BsaWNlKGgsMSlbMF0pfShhLnByZXZpb3Vz''@;'; put 'put ''Q29udGFpbmVyLmRhdGEsYS5jb250YWluZXIuZGF0YSxhLnByZXZpb3VzSW5kZXgsYS5jdXJyZW50SW5kZXgpLHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGUuaG90VGFibGUmJiJvYmplY3QiPT10eXBlb2YgdGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZS5ob3RUYWJsZS5jb2xIZWFkZXJzKSYm''@;'; put 'put ''dGhpcy51cGRhdGVDb2x1bW5PcmRlckhvdChhLml0ZW0uZGF0YSxhLmN1cnJlbnRJbmRleCx0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlLnZpZXdib3hJZCl9b25Db2xzZWFyY2hDaGFuZ2UoYSxkLGgpe2NvbnN0IGY9aC5pbmRleE9mKGQpO2guc3BsaWNlKGYsMSksYS52YWx1ZT0iIix0aGlz''@;'; put 'put ''LnNlbGVjdGVkVmlld2JveFRhYmxlPy5ob3RUYWJsZSYmKHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGUuaG90VGFibGUuY29sSGVhZGVyc1Zpc2libGUucHVzaChkKSx0aGlzLnVwZGF0ZUhvdENvbHVtbnModGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZT8uaG90VGFibGUuY29sSGVhZGVyc0hp''@;'; put 'put ''ZGRlbix0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlLnZpZXdib3hJZCksdGhpcy51cGRhdGVDb2x1bW5PcmRlckhvdChkLHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGUuaG90VGFibGUuY29sSGVhZGVyc1Zpc2libGUubGVuZ3RoLTEsdGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZS52aWV3Ym94''@;'; put 'put ''SWQpKX1vbkNvbFJlbW92ZShhKXtpZih0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlPy5ob3RUYWJsZSl7Y29uc3QgZD10aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlLmhvdFRhYmxlLmNvbEhlYWRlcnNWaXNpYmxlLmluZGV4T2YoYSk7dGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZS5ob3RUYWJs''@;'; put 'put ''ZS5jb2xIZWFkZXJzVmlzaWJsZS5zcGxpY2UoZCwxKSx0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlLmhvdFRhYmxlLmNvbEhlYWRlcnNIaWRkZW4ucHVzaChhKSx0aGlzLnVwZGF0ZUhvdENvbHVtbnModGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZT8uaG90VGFibGUuY29sSGVhZGVyc0hpZGRl''@;'; put 'put ''bix0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlLnZpZXdib3hJZCksdGhpcy51cGRhdGVDb2x1bW5PcmRlckhvdChhLHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGUuaG90VGFibGUuY29sSGVhZGVyc1Zpc2libGUubGVuZ3RoLHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGUudmlld2JveElkKX19''@;'; put 'put ''cmVzZXRTZWxlY3RlZFZpZXdib3goYSl7dGhpcy5zZWxlY3RlZFZpZXdib3g9YSx0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlPXRoaXMudmlld2JveFRhYmxlcy5maW5kKGQ9PmQudmlld2JveElkPT09YS5pZCl9dW5zZXRTZWxlY3RlZFZpZXdib3goKXt0aGlzLnNlbGVjdGVkVmlld2JveD12''@;'; put 'put ''b2lkIDAsdGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZT12b2lkIDB9c3RvcFByb3BhZ2F0aW9uKGEpe2Euc3RvcFByb3BhZ2F0aW9uKCl9b3BlbkZpbHRlcihhKXt0aGlzLnNlbGVjdFZpZXdib3goYSk7Y29uc3QgZD10aGlzLnZpZXdib3hUYWJsZXNbdGhpcy5nZXRWaWV3Ym94VGFibGVJbmRl''@;'; put 'put ''eChhKV07dGhpcy5maWx0ZXJMaWJkcz1gJHthLmxpYnJhcnl9LiR7YS50YWJsZX1gLHRoaXMuZmlsdGVyaW5nVmlld2JveD1hLHRoaXMuZmlsdGVyPSEwLHRoaXMuY2RmLmRldGVjdENoYW5nZXMoKSx0aGlzLnNhc1N0b3JlU2VydmljZS5zZXRRdWVyeVZhcmlhYmxlcyh0aGlzLmZpbHRlckxp''@;'; put 'put ''YmRzLGQuaG90VGFibGUuY29scyl9b3BlblRhYmxlRWRpdChhKXtjb25zdCBkPWEubGlicmFyeSsiLiIrYS50YWJsZTtsZXQgaD1sb2NhdGlvbi5ocmVmLnNsaWNlKDAsbG9jYXRpb24uaHJlZi5pbmRleE9mKCIjIikpO2g9YCR7aH0jL2VkaXRvci8ke2R9YCx3aW5kb3cub3BlbihoLCJfYmxh''@;'; put 'put ''bmsiKX1yZXNldEZpbHRlcigpe3RoaXMuZmlsdGVyaW5nVmlld2JveCYmKHRoaXMuZmlsdGVyaW5nVmlld2JveC5maWx0ZXJfcGs9IjAiLHRoaXMucmVsb2FkVGFibGVEYXRhKHRoaXMuZmlsdGVyaW5nVmlld2JveCksdGhpcy5maWx0ZXI9ITEsdGhpcy52aWV3Ym94Q2hhbmdlZCgpLEtuLnZp''@;'; put 'put ''ZXdib3hlc1t0aGlzLmZpbHRlcmluZ1ZpZXdib3guaWRdPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoaFopKX1zZW5kQ2xhdXNlKCl7dGhpcy5maWx0ZXJMb2FkaW5nPSEwO2xldCBhPVtdLGQ9W107aWYodHlwZW9mIHRoaXMuY2xhdXNlcz4idSIpcmV0dXJuIHRoaXMubnVsbFZhcmlh''@;'; put 'put ''Ymxlcz0hMCx2b2lkKHRoaXMuZmlsdGVyTG9hZGluZz0hMSk7e2xldCBoPXRoaXMuY2xhdXNlcy5xdWVyeU9iajtmb3IobGV0IGY9MDtmPGgubGVuZ3RoO2YrKyl7Y29uc3Qgdj1oW2ZdLmVsZW1lbnRzO2E9di5maWx0ZXIoZnVuY3Rpb24oTSl7cmV0dXJuIG51bGw9PT1NLnZhcmlhYmxlfSks''@;'; put 'put ''YS5sZW5ndGgmJmQucHVzaCh2KX19aWYoZC5sZW5ndGgpcmV0dXJuIHRoaXMubnVsbFZhcmlhYmxlcz0hMCx2b2lkKHRoaXMuZmlsdGVyTG9hZGluZz0hMSk7dHJ5e2lmKHZvaWQgMCE9PXRoaXMuY2xhdXNlcyYmdGhpcy5maWx0ZXJMaWJkcyl7Y29uc3QgaD17Z3JvdXBMb2dpYzp0aGlzLmNs''@;'; put 'put ''YXVzZXMuZ3JvdXBMb2dpYyxmaWx0ZXJHcm91cHM6W119O3RoaXMuY2xhdXNlcy5xdWVyeU9iai5mb3JFYWNoKHY9Pntjb25zdCBNPXtmaWx0ZXJDbGF1c2VzOltdfTt2LmVsZW1lbnRzLmZvckVhY2goRD0+e00uZmlsdGVyQ2xhdXNlcy5wdXNoKHRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xv''@;'; put 'put ''bmUoRCkpfSksTS5jbGF1c2VMb2dpYz12LmNsYXVzZUxvZ2ljLGguZmlsdGVyR3JvdXBzLnB1c2godGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShNKSl9KTtjb25zdCBmPXRoaXMuc2FzU3RvcmVTZXJ2aWNlLmNyZWF0ZUZpbHRlclF1ZXJ5VGFibGUoaCk7dGhpcy5zYXNTdG9yZVNlcnZp''@;'; put 'put ''Y2Uuc2F2ZVF1ZXJ5KHRoaXMuZmlsdGVyTGliZHMsZikudGhlbih2PT57dGhpcy5maWx0ZXJpbmdWaWV3Ym94LmZpbHRlcl9waz12LnJlc3VsdFswXS5GSUxURVJfUkssdGhpcy5sb2FkRGF0YSh0aGlzLmZpbHRlckxpYmRzLHRoaXMuZmlsdGVyaW5nVmlld2JveCkudGhlbigoKT0+e3RoaXMu''@;'; put 'put ''ZmlsdGVyPSExLHRoaXMuZmlsdGVyTG9hZGluZz0hMX0pLHRoaXMudmlld2JveENoYW5nZWQoKX0pLmNhdGNoKHY9Pnt0aGlzLmZpbHRlckxvYWRpbmc9ITF9KX19Y2F0Y2h7dGhpcy5maWx0ZXJMb2FkaW5nPSExfX1zZWFyY2hUYWJsZShhLGQpe3ZhciBoPXRoaXM7cmV0dXJuIGVlKGZ1bmN0''@;'; put 'put ''aW9uKigpe2Quc2VhcmNoTG9hZGluZz0hMDtsZXQgZj1hLnZhbHVlLHY9ZC5saWJyYXJ5KyIuIitkLnRhYmxlLE09cGFyc2VJbnQoZC5maWx0ZXJfcGt8fCIwIik7Y29uc3QgRD1oLnZpZXdib3hUYWJsZXMuZmluZChaPT5aLnZpZXdib3hJZD09PWQuaWQpO0QmJih5aWVsZCBoLnNhc1N0b3Jl''@;'; put 'put ''U2VydmljZS52aWV3RGF0YVNlYXJjaChmLGQuc2VhcmNoTnVtZXJpYyx2LE0pLnRoZW4oWj0+e1ouc2FzcGFyYW1zfHxaLnZpZXdEYXRhP0QuaG90VGFibGUuZGF0YT1aLnZpZXdkYXRhOmQuc2VhcmNoTG9hZGluZz0hMH0pLmNhdGNoKFo9PntoLmxvZ2dlclNlcnZpY2UuZXJyb3IoWil9KSxk''@;'; put 'put ''LnNlYXJjaExvYWRpbmc9ITEpfSkoKX1yZWxvYWRUYWJsZURhdGEoYSl7dmFyIGQ9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7Y29uc3QgaD1gJHthLmxpYnJhcnl9LiR7YS50YWJsZX1gO2EubG9hZGluZ0RhdGE9ITAseWllbGQgZC5yZWxvYWREYXRhKGgsYSksYS5sb2FkaW5nRGF0YT0h''@;'; put 'put ''MSxkLmV2ZW50U2VydmljZS5kaXNwYXRjaEV2ZW50KCJyZXNpemUiKX0pKCl9dXBkYXRlSG90Q29sdW1ucyhhLGQpe3RoaXMudXBkYXRlSGlkZGVuQ29sdW1uc0hvdChhLGQpLHRoaXMuc2V0Q29sdW1uT3JkZXIoZCl9dXBkYXRlQ29sdW1uT3JkZXJIb3QoYSxkLGgpe2NvbnN0IGY9dGhpcy5n''@;'; put 'put ''ZXRWaWV3Ym94SG90SW5zdGFuY2UoaCk7aWYoZil7Y29uc3Qgdj1mLnByb3BUb0NvbChhKTtmLmdldFBsdWdpbigibWFudWFsQ29sdW1uTW92ZSIpLm1vdmVDb2x1bW4odixkKSxmLnJlbmRlcigpLHRoaXMuc2V0Q29sdW1uT3JkZXIoaCl9fXRhYmxlRWRpdEV4aXN0cyhhKXtjb25zdCBkPUtu''@;'; put 'put ''LmVkaXRvci5saWJzQW5kVGFibGVzLGg9YS5saWJyYXJ5O3JldHVybiEhZFtoXSYmZFtoXS5pbmNsdWRlcyhhLnRhYmxlKX1zZXRDb2x1bW5PcmRlcihhKXtjb25zdCBkPXRoaXMudmlld2JveGVzLmZpbmQoaD0+aC5pZD09PWEpO2lmKGQpe2NvbnN0IGg9dGhpcy5jcmVhdGVDb2x1bW5PcmRl''@;'; put 'put ''cihhKTtkLmNvbHVtbnM9aC5sZW5ndGg+MD9oOmQuY29sdW1uc310aGlzLnZpZXdib3hDaGFuZ2VkKCl9Y3JlYXRlQ29sdW1uT3JkZXIoYSl7Y29uc3QgZD10aGlzLmdldFZpZXdib3hIb3RJbnN0YW5jZShhKTtpZighZClyZXR1cm5bXTtjb25zdCBoPWQuZ2V0Q29sSGVhZGVyKCksZj10aGlz''@;'; put 'put ''LnNlbGVjdGVkVmlld2JveFRhYmxlPy5ob3RUYWJsZS5jb2xIZWFkZXJzO2lmKCFmKXJldHVybltdO2NvbnN0IHY9dGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZT8uaG90VGFibGU/LmNvbEhlYWRlcnNWaXNpYmxlLmxlbmd0aHx8NSxNPVtdO3JldHVybiBoLm1hcCgoRCxaKT0+e2lmKFo8dil7''@;'; put 'put ''Y29uc3QgcmU9Zi5pbmRleE9mKEQpO3JlPi0xJiZNLnB1c2gocmUpfX0pLE19dXBkYXRlSGlkZGVuQ29sdW1uc0hvdChhLGQpe2NvbnN0IGg9dGhpcy5nZXRWaWV3Ym94SG90SW5zdGFuY2UoZCk7aWYoaCl7Y29uc3QgZj1hLm1hcCh2PT5oLnByb3BUb0NvbCh2KSk7aC51cGRhdGVTZXR0aW5n''@;'; put 'put ''cyh7aGlkZGVuQ29sdW1uczp7Y29sdW1uczpmfX0pLGgucmVuZGVyKCl9fWdldFZpZXdib3hIb3RJbnN0YW5jZShhKXtyZXR1cm4gYT90aGlzLmhvdFRhYmxlUmVnaXN0ZXJlci5nZXRJbnN0YW5jZShgaG90SW5zdGFuY2Vfdmlld2JveF8ke2F9YCk6dm9pZCAwfXZpZXdib3hDaGFuZ2VkKCl7''@;'; put 'put ''bGV0IGE7Y29uc3QgZD10aGlzLmVuY29kZVVybERhdGEodGhpcy52aWV3Ym94ZXMpO2QubGVuZ3RoPjAmJihhPXt2aWV3Ym94ZXM6ZH0pLHRoaXMucm91dGVyLm5hdmlnYXRlKFtdLHtyZWxhdGl2ZVRvOnRoaXMuYWN0aXZhdGVkUm91dGUscXVlcnlQYXJhbXM6YX0pLHRoaXMucHJlcGFyZUZp''@;'; put 'put ''bHRlckNhY2hlKCl9cHJlcGFyZUZpbHRlckNhY2hlKCl7Zm9yKGxldCBhIG9mIHRoaXMudmlld2JveGVzKWlmKEtuLnZpZXdib3hlc1thLmlkXXx8KEtuLnZpZXdib3hlc1thLmlkXT10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKGhaKSksYS5xdWVyeSYmYS5xdWVyeS5sZW5ndGg+MCl7''@;'; put 'put ''Y29uc3QgZD10aGlzLnZpZXdib3hUYWJsZXMuZmluZChmPT5mLnZpZXdib3hJZD09PWEuaWQpLGg9YHZpZXdib3hlcy4ke2EuaWR9YDtLbi52aWV3Ym94ZXNbYS5pZF0uZmlsdGVyLnF1ZXJ5PWEucXVlcnksS24udmlld2JveGVzW2EuaWRdLmZpbHRlci5saWJkcz1hLmxpYnJhcnkrIi4iK2Eu''@;'; put 'put ''dGFibGUsdGhpcy5zYXNTdG9yZVNlcnZpY2UuaW5pdGlhbGl6ZUdsb2JhbEZpbHRlckNsYXVzZShoLGQ/LmhvdFRhYmxlLmNvbHMpfX1lbmNvZGVVcmxEYXRhKGEpe2xldCBkPSIiO3JldHVybiBhLm1hcCgoaCxmKT0+e2QrPWAke2guaWR9LSR7aC5saWJyYXJ5fS0ke2gudGFibGV9LSR7aC53''@;'; put 'put ''aWR0aH0tJHtoLmhlaWdodH0tJHtoLnh9LSR7aC55fS0ke2guY29sbGFwc2VkPzE6MH0tJHtoLm1pbmltaXplZD8xOjB9LSR7aC5maWx0ZXJfcGt8fDB9JHtoLmNvbHVtbnMmJmguY29sdW1ucy5sZW5ndGg+MD8iLSIraC5jb2x1bW5zPy5qb2luKCIsIik6IiJ9YCxmIT09YS5sZW5ndGgtMSYm''@;'; put 'put ''KGQrPSI7Iil9KSxkfWRlY29kZVVybERhdGEoYSl7bGV0IGg9W107cmV0dXJuIGEuc3BsaXQoIjsiKS5tYXAodj0+e2NvbnN0IE09di5zcGxpdCgiLSIpO2gucHVzaCh7aWQ6cGFyc2VJbnQoTVswXSksbGlicmFyeTpNWzFdLHRhYmxlOk1bMl0sd2lkdGg6cGFyc2VJbnQoTVszXSksaGVpZ2h0''@;'; put 'put ''OnBhcnNlSW50KE1bNF0pLHg6cGFyc2VJbnQoTVs1XSkseTpwYXJzZUludChNWzZdKSxjb2xsYXBzZWQ6ISFwYXJzZUludChNWzddKSxtaW5pbWl6ZWQ6ISFwYXJzZUludChNWzhdKSxjb2x1bW5zOk1bMTBdPy5zcGxpdCgiLCIpLm1hcChEPT5wYXJzZUludChEKSl8fFtdLGZpbHRlcl9wazpN''@;'; put 'put ''WzldfSl9KSxofW5nT25EZXN0cm95KCl7dGhpcy5fcXVlcnk/LnVuc3Vic2NyaWJlKCl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoV2EpLEdlKHUxKSxHZShHcyksR2UodmMpLEdlKGtoKSxHZShTZCksR2UoU3UpLEdlKExzKSxHZShDdSks''@;'; put 'put ''R2UoRXMpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC12aWV3Ym94ZXMiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGQsaCl7aWYoMSZkJiYocWEoSzZ0LDUpLHFhKHE2dCw1KSksMiZkKXtsZXQgZjtDaShmPVNpKCkpJiYoaC5yZXNpemVCb3hRdWVy''@;'; put 'put ''eT1mKSxDaShmPVNpKCkpJiYoaC5kcmFnSGFuZGxlQ29ybmVyUXVlcnk9Zil9fSxpbnB1dHM6e3ZpZXdib3hNb2RhbDoidmlld2JveE1vZGFsIn0sb3V0cHV0czp7dmlld2JveE1vZGFsQ2hhbmdlOiJ2aWV3Ym94TW9kYWxDaGFuZ2UifSxkZWNsczo1Nix2YXJzOjIzLGNvbnN0czpbWyJpbnB1''@;'; put 'put ''dCIsIiJdLFsicmVzaXplQm94IiwiIl0sWyJkcmFnSGFuZGxlQ29ybmVyIiwiIl0sWyJzZWFyY2hFbCIsIiJdLFsicXVlcnlGaWx0ZXIiLCIiXSxbImFwcERyYWdOZHJvcCIsIiIsMSwicm9vdC1tb2RhbCIsInBvc2l0aW9uLXJlbGF0aXZlIiwzLCJjbHJNb2RhbE9wZW5DaGFuZ2UiLCJjbHJN''@;'; put 'put ''b2RhbE9wZW4iLCJjbHJNb2RhbENsb3NhYmxlIiwiY2xyTW9kYWxTaXplIl0sWzEsIm1vZGFsLXRpdGxlIl0sWyJjbGFzcyIsImxpY2VuY2Utbm90aWNlIiw0LCJuZ0lmIl0sWzEsIm1vZGFsLWJvZHkiLCJkLWZsZXgiXSxbMSwiYWRkLW5ldyIsImQtZmxleCIsImNsci1mbGV4LWNvbHVtbiJd''@;'; put 'put ''LFsxLCJtdC0wIl0sWzEsInctMTAwIl0sWyJjbGFzcyIsIm15LTEwLW14LWF1dG8gdGV4dC1jZW50ZXIiLDQsIm5nSWYiXSxbImNsYXNzIiwibS0wIHZpZXdib3gtbGltaXQtbm90aWNlIiw0LCJuZ0lmIl0sWzMsImxpYnJhcnlMaXN0IiwibGlicmFyeU9uQ2xpY2tFbWl0dGVyIiwidGFibGVP''@;'; put 'put ''bkNsaWNrRW1pdHRlciIsNCwibmdJZiJdLFsxLCJjdXJyZW50bHktb3BlbiJdLFsxLCJkLWZsZXgiLCJjbHItanVzdGlmeS1jb250ZW50LWJldHdlZW4iXSxbInJvbGUiLCJ0b29sdGlwIiwiYXJpYS1oYXNwb3B1cCIsInRydWUiLDEsInRvb2x0aXAiLCJ0b29sdGlwLW1kIiwidG9vbHRpcC1i''@;'; put 'put ''b3R0b20tbGVmdCIsIm1sLTMiLDMsImNsaWNrIl0sWyJzaGFwZSIsImdyaWQtdmlldyIsInNpemUiLCIxOSJdLFsxLCJ0b29sdGlwLWNvbnRlbnQiXSxbInNoYXBlIiwibWludXMiLCJzaXplIiwiMTkiXSxbInNoYXBlIiwid2luZG93LXJlc3RvcmUiLCJzaXplIiwiMTkiXSxbImNsYXNzIiwi''@;'; put 'put ''dGV4dC1jZW50ZXIgdy0xMDAgbS0wIiw0LCJuZ0lmIl0sWyJjbGFzcyIsIm9wZW4tdmlld2JveCBkLWZsZXggY2xyLWp1c3RpZnktY29udGVudC1iZXR3ZWVuIGNsci1hbGlnbi1pdGVtcy1jZW50ZXIiLDMsInNlbGVjdGVkIiwiY2xpY2siLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJkLWZs''@;'; put 'put ''ZXgiLCJjbHItanVzdGlmeS1jb250ZW50LWJldHdlZW4iLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIiwibXQtMTAiXSxbMSwibS0wIl0sWyJjbGFzcyIsImNvbmZpZ3VyYXRpb24td3JhcHBlciIsImNka0Ryb3BMaXN0R3JvdXAiLCIiLDQsIm5nVmFyIl0sWzEsIm1vZGFsLWZvb3RlciJdLFsi''@;'; put 'put ''dHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLW91dGxpbmUiLDMsImNsaWNrIl0sWzEsInZpZXdib3hlcy1jb250YWluZXIiXSxbImNsYXNzIiwidmlld2JveCIsImNka0RyYWdCb3VuZGFyeSIsIi52aWV3Ym94ZXMtY29udGFpbmVyIiwiY2RrRHJhZyIsIiIsInRhYmluZGV4''@;'; put 'put ''IiwiMCIsMywiZm9jdXNlZCIsImRpc3BsYXkiLCJ3aWR0aCIsImhlaWdodCIsInBvaW50ZXItZXZlbnRzIiwiYm94LXNoYWRvdyIsImNka0RyYWdGcmVlRHJhZ1Bvc2l0aW9uIiwiaWQiLCJtb3VzZWRvd24iLCJjZGtEcmFnRW5kZWQiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJmaWx0ZXIt''@;'; put 'put ''bW9kYWwiLDMsImNsck1vZGFsT3BlbkNoYW5nZSIsImNsck1vZGFsT3BlbiIsImNsck1vZGFsU2l6ZSIsImNsck1vZGFsQ2xvc2FibGUiXSxbMSwibW9kYWwtdGl0bGUiLCJjZW50ZXIiLCJ0ZXh0LWNlbnRlciIsImNvbG9yLWRhcmtlci1ncmF5Il0sWzEsIm1vZGFsLWJvZHkiXSxbMywidmll''@;'; put 'put ''d2JveElkIiw0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tbGluayIsMywiY2xpY2siXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzLW91dGxpbmUiLDMsImNsaWNrIiwiY2xyTG9hZGluZyJdLFsxLCJsaWNlbmNl''@;'; put 'put ''LW5vdGljZSJdLFsxLCJteS0xMC1teC1hdXRvIiwidGV4dC1jZW50ZXIiXSxbImNsck1lZGl1bSIsIiJdLFsxLCJtLTAiLCJ2aWV3Ym94LWxpbWl0LW5vdGljZSJdLFszLCJsaWJyYXJ5T25DbGlja0VtaXR0ZXIiLCJ0YWJsZU9uQ2xpY2tFbWl0dGVyIiwibGlicmFyeUxpc3QiXSxbMSwidGV4''@;'; put 'put ''dC1jZW50ZXIiLCJ3LTEwMCIsIm0tMCJdLFsxLCJvcGVuLXZpZXdib3giLCJkLWZsZXgiLCJjbHItanVzdGlmeS1jb250ZW50LWJldHdlZW4iLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIiwzLCJjbGljayJdLFsxLCJkLWZsZXgiLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIl0sWyJjbHJTbWFs''@;'; put 'put ''bCIsIiIsImNsYXNzIiwibWwtMyIsNCwibmdJZiJdLFsicm9sZSIsInRvb2x0aXAiLCJhcmlhLWhhc3BvcHVwIiwidHJ1ZSIsMSwidG9vbHRpcCIsInRvb2x0aXAtbWQiLCJ0b29sdGlwLWJvdHRvbS1sZWZ0IiwzLCJjbGljayJdLFsic2hhcGUiLCJjdXJzb3ItbW92ZSIsInNpemUiLCIxMyJd''@;'; put 'put ''LFsicm9sZSIsInRvb2x0aXAiLCJhcmlhLWhhc3BvcHVwIiwidHJ1ZSIsImNsYXNzIiwidG9vbHRpcCB0b29sdGlwLW1kIHRvb2x0aXAtYm90dG9tLWxlZnQgbWwtMyIsMywiY2xpY2siLDQsIm5nSWYiXSxbInNoYXBlIiwidGltZXMiLCJzaXplIiwiMTkiXSxbImNsclNtYWxsIiwiIiwxLCJt''@;'; put 'put ''bC0zIl0sWyJjZGtEcm9wTGlzdEdyb3VwIiwiIiwxLCJjb25maWd1cmF0aW9uLXdyYXBwZXIiXSxbNCwibmdJZiJdLFsxLCJjb2xzLXNlYXJjaCJdLFsidHlwZSIsInRleHQiLCJhdXRvY29tcGxldGUiLCJvZmYiLCJhdXRvZm9jdXMiLCIiLCJwbGFjZWhvbGRlciIsIlNlYXJjaCBjb2x1bW5z''@;'; put 'put ''IiwidGFiaW5kZXgiLCIwIiwzLCJ2YWx1ZUNoYW5nZSIsImlucHV0SWQiLCJlbWl0T25seVNlbGVjdGVkIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsiY2RrRHJvcExpc3QiLCIiLDEsImNvbHMtbGlzdCIsMywiY2RrRHJvcExpc3REcm9wcGVkIiwiY2RrRHJvcExpc3REYXRhIl0sWyJjZGtE''@;'; put 'put ''cmFnIiwiIiwzLCJjbGFzcyIsImN1cnNvci1kZWZhdWx0LWkiLCJwcmltYXJ5S2V5SGVhZGVyU3R5bGUiLCJjZGtEcmFnRGF0YSIsImNka0RyYWdEaXNhYmxlZCIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJjZGtEcmFnIiwiIiwzLCJjZGtEcmFnRGF0YSIsImNka0RyYWdEaXNhYmxlZCJdLFsi''@;'; put 'put ''c2hhcGUiLCJrZXkiLDQsIm5nSWYiXSxbInNoYXBlIiwidHJhc2giLCJjbGFzcyIsImN1cnNvci1wb2ludGVyIiwzLCJjbGljayIsNCwibmdJZiJdLFsic2hhcGUiLCJrZXkiXSxbInNoYXBlIiwidHJhc2giLDEsImN1cnNvci1wb2ludGVyIiwzLCJjbGljayJdLFsiY2RrRHJhZ0JvdW5kYXJ5''@;'; put 'put ''IiwiLnZpZXdib3hlcy1jb250YWluZXIiLCJjZGtEcmFnIiwiIiwidGFiaW5kZXgiLCIwIiwxLCJ2aWV3Ym94IiwzLCJtb3VzZWRvd24iLCJjZGtEcmFnRW5kZWQiLCJjZGtEcmFnRnJlZURyYWdQb3NpdGlvbiIsImlkIl0sWyJjZGtEcmFnSGFuZGxlIiwiIiwxLCJkcmFnLWhhbmRsZSIsImQt''@;'; put 'put ''ZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiXSxbMSwidGFibGUtdGl0bGUiXSxbMSwiYWN0aW9ucyJdLFsic2hhcGUiLCJhbmdsZSB0b3AiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJzaGFwZSIsImFuZ2xlIGRvd24iLDMsImNsaWNr''@;'; put 'put ''Iiw0LCJuZ0lmIl0sWyJzaGFwZSIsIm1pbnVzIiwzLCJjbGljayJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siXSxbImNka0RyYWciLCIiLDEsImRyYWdIYW5kbGUiLCJjb3JuZXIiLDMsImNka0RyYWdNb3ZlZCIsImlkIl0sWyJjbHJGb3JtIiwiIiwxLCJkLWZsZXgiLCJhbGlnbi1pdGVt''@;'; put 'put ''cy1jZW50ZXIiLCJjbHItanVzdGlmeS1jb250ZW50LWJldHdlZW4iLCJjbHItZmxleC13cmFwIiwidGFibGUtc2VhcmNoLXdyYXBwZXIiXSxbMSwiZC1mbGV4IiwiYWxpZ24taXRlbXMtY2VudGVyIiwiY2xyLWZsZXgtd3JhcCJdLFsxLCJpbnB1dC13cmFwcGVyIl0sWyJjbHJJbnB1dCIsIiIs''@;'; put 'put ''InBsYWNlaG9sZGVyIiwiU2VhcmNoIiwibmFtZSIsInNlYXJjaC1pbnB1dCIsMywia2V5dXAuZW50ZXIiLCJ0eXBlIl0sWyJzaGFwZSIsInNlYXJjaCIsMywiY2xpY2siLDQsIm5nSWYiXSxbImNsYXNzIiwic3Bpbm5lciBzcGlubmVyLWlubGluZSIsNCwibmdJZiJdLFsidHlwZSIsImNoZWNr''@;'; put 'put ''Ym94IiwiY2xyQ2hlY2tib3giLCIiLCJuYW1lIiwibnVtZXJpY19jaGVjayIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiXSxbImNsYXNzIiwic3Bpbm5lciBzcGlubmVyLXNtIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInJlZnJlc2giLCJjbGFzcyIsImNsaWNrLWljb24iLDMsImNsaWNrIiw0''@;'; put 'put ''LCJuZ0lmIl0sWyJyb2xlIiwidG9vbHRpcCIsImFyaWEtaGFzcG9wdXAiLCJ0cnVlIiwxLCJ0b29sdGlwIiwidG9vbHRpcC1sZyIsInRvb2x0aXAtYm90dG9tLWxlZnQiLCJtbC01IiwzLCJjbGljayJdLFsic2hhcGUiLCJmaWx0ZXIiLDEsImNsaWNrLWljb24iXSxbMSwidG9vbHRpcC1jb250''@;'; put 'put ''ZW50IiwidG9vbHRpcC1sb25nIl0sWyJzaGFwZSIsInBlbmNpbCIsMSwiY2xpY2staWNvbiIsIm1sLTUiLDMsImNsaWNrIl0sWyJjbGFzcyIsImNvbnRlbnQiLDMsImRpc3BsYXkiLDQsIm5nVmFyIl0sWyJzaGFwZSIsImFuZ2xlIHRvcCIsMywiY2xpY2siXSxbInNoYXBlIiwiYW5nbGUgZG93''@;'; put 'put ''biIsMywiY2xpY2siXSxbInNoYXBlIiwic2VhcmNoIiwzLCJjbGljayJdLFsxLCJzcGlubmVyIiwic3Bpbm5lci1pbmxpbmUiXSxbMSwic3Bpbm5lciIsInNwaW5uZXItc20iXSxbInNoYXBlIiwicmVmcmVzaCIsMSwiY2xpY2staWNvbiIsMywiY2xpY2siXSxbMSwiY29udGVudCJdLFsiY2xh''@;'; put 'put ''c3MiLCJob3Qtc3Bpbm5lciBteS0xMC1teC1hdXRvIHRleHQtY2VudGVyIiw0LCJuZ0lmIl0sWyJpZCIsImhvdFRhYmxlIiwiY2xhc3NOYW1lIiwiaHREYXJrIiwic3RyZXRjaEgiLCJhbGwiLDMsImhvdElkIiwicmVhZE9ubHkiLCJtb2RpZnlDb2xXaWR0aCIsImNvcHlQYXN0ZSIsImNvbnRl''@;'; put 'put ''eHRNZW51IiwibXVsdGlDb2x1bW5Tb3J0aW5nIiwidmlld3BvcnRSb3dSZW5kZXJpbmdPZmZzZXQiLCJkYXRhIiwiY29sSGVhZGVycyIsImNvbHVtbnMiLCJmaWx0ZXJzIiwiZHJvcGRvd25NZW51IiwiaGVpZ2h0IiwiY2VsbHMiLCJtYXhSb3dzIiwibWFudWFsQ29sdW1uUmVzaXplIiwibGlj''@;'; put 'put ''ZW5zZUtleSIsNCwibmdJZiJdLFsxLCJob3Qtc3Bpbm5lciIsIm15LTEwLW14LWF1dG8iLCJ0ZXh0LWNlbnRlciJdLFsiaWQiLCJob3RUYWJsZSIsImNsYXNzTmFtZSIsImh0RGFyayIsInN0cmV0Y2hIIiwiYWxsIiwzLCJob3RJZCIsInJlYWRPbmx5IiwibW9kaWZ5Q29sV2lkdGgiLCJjb3B5''@;'; put 'put ''UGFzdGUiLCJjb250ZXh0TWVudSIsIm11bHRpQ29sdW1uU29ydGluZyIsInZpZXdwb3J0Um93UmVuZGVyaW5nT2Zmc2V0IiwiZGF0YSIsImNvbEhlYWRlcnMiLCJjb2x1bW5zIiwiZmlsdGVycyIsImRyb3Bkb3duTWVudSIsImhlaWdodCIsImNlbGxzIiwibWF4Um93cyIsIm1hbnVhbENvbHVt''@;'; put 'put ''blJlc2l6ZSIsImxpY2Vuc2VLZXkiXSxbMywidmlld2JveElkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYoZGUoMCwiY2xyLW1vZGFsIiw1KSxGdCgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbih2KXtyZXR1cm4gaC5jbHJNb2RhbE9wZW5DaGFuZ2Uodil9KSxkZSgxLCJo''@;'; put 'put ''MyIsNiksTGUoMiwiIFZpZXdib3hlcyAiKSxndCgzLFE2dCwyLDIsInNwYW4iLDcpLGhlKCksZGUoNCwiZGl2Iiw4KSg1LCJkaXYiLDkpKDYsInAiLDEwKSxMZSg3LCJBZGQgbmV3IiksaGUoKSxHdCg4LCJociIsMTEpLGd0KDksZTh0LDIsMCwiZGl2IiwxMikoMTAsdDh0LDIsMCwicCIsMTMp''@;'; put 'put ''KDExLG44dCwxLDEsImRjLXRyZWUiLDE0KSxoZSgpLGRlKDEyLCJkaXYiLDE1KSgxMywiZGl2IiwxNikoMTQsInAiLDEwKSxMZSgxNSwiQ3VycmVudGx5IG9wZW4iKSxoZSgpLGRlKDE2LCJkaXYiKSgxNywiYSIsMTcpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaC5zbmFwVG9Hcmlk''@;'; put 'put ''KCl9KSxHdCgxOCwiY2xyLWljb24iLDE4KSxkZSgxOSwic3BhbiIsMTkpLExlKDIwLCJTbmFwIHZpZXdib3hlcyB0byBncmlkIiksaGUoKSgpLGRlKDIxLCJhIiwxNyksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBoLm1pbmltaXplQWxsKCl9KSxHdCgyMiwiY2xyLWljb24iLDIwKSxk''@;'; put 'put ''ZSgyMywic3BhbiIsMTkpLExlKDI0LCJNaW5pbWl6ZSBhbGwgdmlld2JveGVzIiksaGUoKSgpLGRlKDI1LCJhIiwxNyksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBoLnJlc3RvcmVBbGwoKX0pLEd0KDI2LCJjbHItaWNvbiIsMjEpLGRlKDI3LCJzcGFuIiwxOSksTGUoMjgsIlJlc3Rv''@;'; put 'put ''cmUgYWxsIHZpZXdib3hlcyIpLGhlKCkoKSgpKCksR3QoMjksImhyIiksZ3QoMzAscjh0LDIsMCwicCIsMjIpKDMxLHM4dCwxNSwxMCwiZGl2IiwyMyksZGUoMzIsImRpdiIsMjQpKDMzLCJwIiwyNSksTGUoMzQpLGhlKCkoKSxHdCgzNSwiaHIiKSxndCgzNixwOHQsMywyLCJkaXYiLDI2KSxo''@;'; put 'put ''ZSgpKCksZGUoMzcsImRpdiIsMjcpKDM4LCJidXR0b24iLDI4KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGgudmlld2JveE1vZGFsPSExfSksTGUoMzksIiBPayAiKSxoZSgpKCkoKSxkZSg0MCwiZGl2IiwyOSksZ3QoNDEsTTh0LDMzLDM3LCJkaXYiLDMwKSxoZSgpLGRlKDQyLCJj''@;'; put 'put ''bHItbW9kYWwiLDMxKSxnaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbih2KXtyZXR1cm4gbWkoaC5maWx0ZXIsdil8fChoLmZpbHRlcj12KSx2fSksZGUoNDMsImgzIiwzMiksTGUoNDQsIiBGaWx0ZXIgZm9yIHZpZXdib3ggdGFibGU6ICIpLGRlKDQ1LCJzcGFuIiksTGUoNDYpLGhl''@;'; put 'put ''KCkoKSxkZSg0NywiZGl2IiwzMyksZ3QoNDgseDh0LDIsMSwiYXBwLXF1ZXJ5IiwzNCksaGUoKSxkZSg0OSwiZGl2IiwyNykoNTAsImJ1dHRvbiIsMzUpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaC5yZXNldEZpbHRlcigpfSksTGUoNTEsIiByZXNldCBmaWx0ZXIgIiksaGUoKSxk''@;'; put 'put ''ZSg1MiwiYnV0dG9uIiwyOCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBoLmZpbHRlcj0hMX0pLExlKDUzLCIgQ2FuY2VsICIpLGhlKCksZGUoNTQsImJ1dHRvbiIsMzYpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaC5zZW5kQ2xhdXNlKCl9KSxMZSg1NSwiIE9rICIpLGhl''@;'; put 'put ''KCkoKSgpKSwyJmQmJihNZSgiY2xyTW9kYWxPcGVuIixoLnZpZXdib3hNb2RhbCkoImNsck1vZGFsQ2xvc2FibGUiLCEwKSgiY2xyTW9kYWxTaXplIiwibGciKSxmZSgzKSxNZSgibmdJZiIsaC5saWNlbmNlU3RhdGUudmFsdWUudmlld2JveF9saW1pdCE9PWguSW5maW5pdHkpLGZlKDYpLE1l''@;'; put 'put ''KCJuZ0lmIixoLmxpYnJhcmllc0xvYWRpbmcpLGZlKCksTWUoIm5nSWYiLGgudmlld2JveExpbWl0UmVhY2hlZCksZmUoKSxNZSgibmdJZiIsaC52aWV3Ym94TW9kYWwpLGZlKDE5KSxNZSgibmdJZiIsaC52aWV3Ym94ZXMubGVuZ3RoPDEpLGZlKCksTWUoIm5nRm9yT2YiLGgudmlld2JveGVz''@;'; put 'put ''KSxmZSgzKSxJcigiIENvbmZpZ3VyYXRpb24gKCIsbnVsbCE9aC5zZWxlY3RlZFZpZXdib3hUYWJsZSYmaC5zZWxlY3RlZFZpZXdib3hUYWJsZS52aWV3Ym94TGliRGF0YXNldD8iIyIrKG51bGw9PWguc2VsZWN0ZWRWaWV3Ym94VGFibGU/bnVsbDpoLnNlbGVjdGVkVmlld2JveFRhYmxlLnZp''@;'; put 'put ''ZXdib3hJZCkrIiAiKyhudWxsPT1oLnNlbGVjdGVkVmlld2JveFRhYmxlP251bGw6aC5zZWxlY3RlZFZpZXdib3hUYWJsZS52aWV3Ym94TGliRGF0YXNldCk6InNlbGVjdCB2aWV3Ym94IGZyb20gYWJvdmUiLCIpICIpLGZlKDIpLE1lKCJuZ1ZhciIscE0oMTksWDZ0LG51bGw9PWguc2VsZWN0''@;'; put 'put ''ZWRWaWV3Ym94VGFibGV8fG51bGw9PWguc2VsZWN0ZWRWaWV3Ym94VGFibGUuaG90VGFibGU/bnVsbDpoLnNlbGVjdGVkVmlld2JveFRhYmxlLmhvdFRhYmxlLmNvbEhlYWRlcnNIaWRkZW4sbnVsbD09aC5zZWxlY3RlZFZpZXdib3hUYWJsZXx8bnVsbD09aC5zZWxlY3RlZFZpZXdib3hUYWJs''@;'; put 'put ''ZS5ob3RUYWJsZT9udWxsOmguc2VsZWN0ZWRWaWV3Ym94VGFibGUuaG90VGFibGUuY29sSGVhZGVyc1Zpc2libGUsbnVsbD09aC5zZWxlY3RlZFZpZXdib3hUYWJsZXx8bnVsbD09aC5zZWxlY3RlZFZpZXdib3hUYWJsZS5ob3RUYWJsZT9udWxsOmguc2VsZWN0ZWRWaWV3Ym94VGFibGUuaG90''@;'; put 'put ''VGFibGUuaGVhZGVyUGtzKSksZmUoNSksTWUoIm5nRm9yT2YiLGgudmlld2JveGVzKSxmZSgpLHBpKCJjbHJNb2RhbE9wZW4iLGguZmlsdGVyKSxNZSgiY2xyTW9kYWxTaXplIiwieGwiKSgiY2xyTW9kYWxDbG9zYWJsZSIsITEpLGZlKDQpLFV1KCIgIyIsbnVsbD09aC5maWx0ZXJpbmdWaWV3''@;'; put 'put ''Ym94P251bGw6aC5maWx0ZXJpbmdWaWV3Ym94LmlkLCIgIixoLmZpbHRlckxpYmRzLCIgIiksZmUoMiksTWUoIm5nSWYiLGguZmlsdGVyKSxmZSg2KSxNZSgiY2xyTG9hZGluZyIsaC5maWx0ZXJMb2FkaW5nKSl9LGRlcGVuZGVuY2llczpbbnMsYmEsSGwsb3UsS3UsajAsUDIsZHMsUTFlLElk''@;'; put 'put ''LEJ5LFNoLFoxLFJkLGw3LEEyLGsyLE1kLG5sLG83LCRzLHlwLFhlZSxEXyx5MWUsYjFlLFRZLHYxZSxrNmUsJDZ0LFN3LHRFXSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpLFI2ZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuZmlsZU92ZXI9bmV3IEtyLHRoaXMu''@;'; put 'put ''ZmlsZURyb3A9bmV3IEtyLHRoaXMuZWxlbWVudD1hfW9uRHJvcChhKXt0aGlzLl9wcmV2ZW50QW5kU3RvcChhKTtjb25zdCBkPWEuZGF0YVRyYW5zZmVyPy5maWxlcyxoPVtdO2lmKGQpZm9yKGxldCBmPTA7ZjxkLmxlbmd0aDtmKyspaC5wdXNoKGRbZl0pO3RoaXMudXBsb2FkZXI/LmFkZFRv''@;'; put 'put ''UXVldWUoaCksdGhpcy5maWxlT3Zlci5lbWl0KCExKSx0aGlzLmZpbGVEcm9wLmVtaXQoaCl9b25EcmFnT3ZlcihhKXt0aGlzLl9wcmV2ZW50QW5kU3RvcChhKTtjb25zdCBkPWEuZGF0YVRyYW5zZmVyO2lmKGQpe2lmKC0xPT09ZC50eXBlcy5pbmRleE9mKCJGaWxlcyIpKXJldHVybjtkLmRy''@;'; put 'put ''b3BFZmZlY3Q9ImNvcHkifXRoaXMuZmlsZU92ZXIuZW1pdCghMCl9b25EcmFnTGVhdmUoYSl7dGhpcy5fcHJldmVudEFuZFN0b3AoYSksdGhpcy5maWxlT3Zlci5lbWl0KCExKX1fcHJldmVudEFuZFN0b3AoYSl7YS5wcmV2ZW50RGVmYXVsdCgpLGEuc3RvcFByb3BhZ2F0aW9uKCl9c3RhdGlj''@;'; put 'put ''e3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoSmkpKX19c3RhdGlje3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImFwcEZpbGVEcm9wIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihkLGgpezEmZCYmRnQoImRyb3AiLGZ1''@;'; put 'put ''bmN0aW9uKHYpe3JldHVybiBoLm9uRHJvcCh2KX0pKCJkcmFnb3ZlciIsZnVuY3Rpb24odil7cmV0dXJuIGgub25EcmFnT3Zlcih2KX0pKCJkcmFnbGVhdmUiLGZ1bmN0aW9uKHYpe3JldHVybiBoLm9uRHJhZ0xlYXZlKHYpfSl9LGlucHV0czp7dXBsb2FkZXI6InVwbG9hZGVyIn0sb3V0cHV0''@;'; put 'put ''czp7ZmlsZU92ZXI6ImZpbGVPdmVyIixmaWxlRHJvcDoiZmlsZURyb3AifX0pfX1yZXR1cm4gY30pKCksTDZlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5maWxlU2VsZWN0ZWQ9bmV3IEtyLHRoaXMuZWxlbWVudD1hfWlzRW1wdHlBZnRlclNlbGVjdGlvbigpe3JldHVybiEh''@;'; put 'put ''dGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuYXR0cmlidXRlcy5tdWx0aXBsZX1vbkNoYW5nZSgpe2NvbnN0IGE9dGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZmlsZXM7dGhpcy51cGxvYWRlcj8uYWRkVG9RdWV1ZShhKSx0aGlzLmZpbGVTZWxlY3RlZC5lbWl0KGEpLHRoaXMuaXNFbXB0''@;'; put 'put ''eUFmdGVyU2VsZWN0aW9uKCkmJih0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC52YWx1ZT0iIil9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoSmkpKX19c3RhdGlje3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIs''@;'; put 'put ''ImFwcEZpbGVTZWxlY3QiLCIiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGQsaCl7MSZkJiZGdCgiY2hhbmdlIixmdW5jdGlvbigpe3JldHVybiBoLm9uQ2hhbmdlKCl9KX0saW5wdXRzOnt1cGxvYWRlcjoidXBsb2FkZXIifSxvdXRwdXRzOntmaWxlU2VsZWN0ZWQ6ImZpbGVTZWxlY3RlZCJ9''@;'; put 'put ''fSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiBFOHQoYyxsKXsxJmMmJihkZSgwLCJwIiw4KSxMZSgxLCIgTm8gZGF0YXNldCBtZXRhIHRvIHNob3cuICIpLGhlKCkpfWZ1bmN0aW9uIFQ4dChjLGwpe2lmKDEmYyYmKHNpKDApLGRlKDEsImNsci1kZy1jb2x1bW4iKSxMZSgyKSxoZSgpLGxpKCkp''@;'; put 'put ''LDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgyKSx3cihhLmNvbE5hbWV8fGEuY29sS2V5KX19ZnVuY3Rpb24gQTh0KGMsbCl7aWYoMSZjJiYoc2koMCksZGUoMSwiY2xyLWRnLWNlbGwiKSxMZSgyKSxoZSgpLGxpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPVJlKCkuJGltcGxp''@;'; put 'put ''Y2l0O2ZlKDIpLHdyKGRbYS5jb2xLZXldKX19ZnVuY3Rpb24gazh0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLWRnLXJvdyIsMTMpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLiRpbXBsaWNpdCxmPVJlKDIpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoZi5v''@;'; put 'put ''blJvd0NsaWNrP2Yub25Sb3dDbGljayhoKToiIil9KSxndCgxLEE4dCwzLDEsIm5nLWNvbnRhaW5lciIsNSksaGUoKX1pZigyJmMpe2NvbnN0IGE9UmUoMikuJGltcGxpY2l0O2ZlKCksTWUoIm5nRm9yT2YiLGEuY29sc1RvRGlzcGxheSl9fWZ1bmN0aW9uIEQ4dChjLGwpe2lmKDEmYyYmKGRl''@;'; put 'put ''KDAsImNsci10YWItY29udGVudCIsMTEpKDEsImNsci1kYXRhZ3JpZCIpLGd0KDIsVDh0LDMsMSwibmctY29udGFpbmVyIiw1KSgzLGs4dCwyLDEsImNsci1kZy1yb3ciLDEyKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1SZSgpLiRpbXBsaWNpdDtmZSgyKSxNZSgibmdGb3JPZiIsYS5jb2xzVG9E''@;'; put 'put ''aXNwbGF5KSxmZSgpLE1lKCJuZ0Zvck9mIixhLm1ldGEpfX1mdW5jdGlvbiBJOHQoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItdGFiIikoMSwiYnV0dG9uIiw5KSxMZSgyKSxoZSgpLGd0KDMsRDh0LDQsMiwiY2xyLXRhYi1jb250ZW50IiwxMCksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxp''@;'; put 'put ''Y2l0LGQ9bC5pbmRleDtmZSgyKSx3cihhLm5hbWUpLGZlKCksTWUoImNscklmQWN0aXZlIiwwPT09ZCl9fWxldCBPNmU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMub3Blbj0hMSx0aGlzLmRzbWV0YT1bXSx0aGlzLnZlcnNpb25zPVtdLHRoaXMub3BlbkNoYW5nZT1uZXcgS3Is''@;'; put 'put ''dGhpcy5yb3dDbGlja2VkPW5ldyBLcix0aGlzLmRzbWV0YVRhYnM9W10sdGhpcy52ZXJzaW9uc1RhYnM9W10sdGhpcy50YWJzPVtdfW5nT25Jbml0KCl7fW5nT25DaGFuZ2VzKGEpe2EuZHNtZXRhPy5jdXJyZW50VmFsdWU/Lmxlbmd0aD4wJiYodGhpcy5wYXJzZURTTWV0YSgpLHRoaXMucGFy''@;'; put 'put ''c2VWZXJzaW9ucygpLHRoaXMudGFicz1bLi4udGhpcy5kc21ldGFUYWJzLC4uLnRoaXMudmVyc2lvbnNUYWJzXSl9cGFyc2VEU01ldGEoKXt0aGlzLmRzbWV0YVRhYnM9W107Zm9yKGxldCBhIG9mIHRoaXMuZHNtZXRhKXtsZXQgZD10aGlzLmRzbWV0YVRhYnMuZmluZEluZGV4KGg9PmgubmFt''@;'; put 'put ''ZT09PWEuT0RTX1RBQkxFKTtkPDAmJihkPXRoaXMuZHNtZXRhVGFicy5wdXNoKHtuYW1lOmEuT0RTX1RBQkxFLHRpdGxlOiJEYXRhc2V0IE1ldGEiLGNvbHNUb0Rpc3BsYXk6W3tjb2xLZXk6Ik5BTUUifSx7Y29sS2V5OiJWQUxVRSJ9XSxtZXRhOltdLG9uUm93Q2xpY2s6aD0+e3RoaXMucm93''@;'; put 'put ''Q2xpY2tlZC5lbWl0KGgpfX0pLTEpLHRoaXMuZHNtZXRhVGFic1tkXS5tZXRhLnB1c2goYSl9fXBhcnNlVmVyc2lvbnMoKXt0aGlzLnZlcnNpb25zVGFicz1be25hbWU6IlZFUlNJT05TIix0aXRsZToiRGF0YXNldCBNZXRhIixjb2xzVG9EaXNwbGF5Olt7Y29sS2V5OiJMT0FEX1JFRiJ9LHtj''@;'; put 'put ''b2xLZXk6IlVTRVJfTk0ifSx7Y29sS2V5OiJWRVJTSU9OX0RUVE0ifSx7Y29sS2V5OiJORVdfUkVDT1JEUyIsY29sTmFtZToiQUREIn0se2NvbEtleToiQ0hBTkdFRF9SRUNPUkRTIixjb2xOYW1lOiJNT0QifSx7Y29sS2V5OiJERUxFVEVEX1JFQ09SRFMiLGNvbE5hbWU6IkRFTCJ9LHtjb2xL''@;'; put 'put ''ZXk6IlZFUlNJT05fREVTQyJ9XSxtZXRhOnRoaXMudmVyc2lvbnMsb25Sb3dDbGljazphPT57dGhpcy5yb3dDbGlja2VkLmVtaXQoYSl9fV19b25PcGVuQ2hhbmdlKGEpe3RoaXMub3Blbj1hLHRoaXMub3BlbkNoYW5nZS5lbWl0KGEpfW9uQ2xvc2VDbGljaygpe3RoaXMub25PcGVuQ2hhbmdl''@;'; put 'put ''KCExKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1kYXRhc2V0LWluZm8iXV0saW5wdXRzOntvcGVuOiJvcGVuIixkc21ldGE6ImRzbWV0YSIsdmVyc2lv''@;'; put 'put ''bnM6InZlcnNpb25zIn0sb3V0cHV0czp7b3BlbkNoYW5nZToib3BlbkNoYW5nZSIscm93Q2xpY2tlZDoicm93Q2xpY2tlZCJ9LGZlYXR1cmVzOlt3bF0sZGVjbHM6MTAsdmFyczo1LGNvbnN0czpbWzMsImNsck1vZGFsT3BlbkNoYW5nZSIsImNsck1vZGFsT3BlbiIsImNsck1vZGFsU2l6ZSIs''@;'; put 'put ''ImNsck1vZGFsQ2xvc2FibGUiXSxbMSwibW9kYWwtdGl0bGUiLCJjZW50ZXIiLCJ0ZXh0LWNlbnRlciIsImNvbG9yLWRhcmtlci1ncmF5Il0sWzEsIm1vZGFsLWJvZHkiXSxbImNsYXNzIiwidGV4dC1jZW50ZXIiLDQsIm5nSWYiXSxbImNsckxheW91dCIsInZlcnRpY2FsIl0sWzQsIm5nRm9y''@;'; put 'put ''IiwibmdGb3JPZiJdLFsxLCJtb2RhbC1mb290ZXIiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1pbmZvLW91dGxpbmUiLDMsImNsaWNrIl0sWzEsInRleHQtY2VudGVyIl0sWyJjbHJUYWJMaW5rIiwiIiwiaWQiLCJsaW5rMSJdLFsiaWQiLCJjb250ZW50MSIsImNs''@;'; put 'put ''YXNzIiwiZC1mbGV4IGNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIHctMTAwIiw0LCJjbHJJZkFjdGl2ZSJdLFsiaWQiLCJjb250ZW50MSIsMSwiZC1mbGV4IiwiY2xyLWp1c3RpZnktY29udGVudC1jZW50ZXIiLCJ3LTEwMCJdLFsiY2xhc3MiLCJjbGlja2FibGUtcm93IiwzLCJjbGljayIs''@;'; put 'put ''NCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImNsaWNrYWJsZS1yb3ciLDMsImNsaWNrIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYoZGUoMCwiY2xyLW1vZGFsIiwwKSxGdCgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbih2KXtyZXR1cm4gaC5vbk9wZW5DaGFuZ2Uodil9KSxk''@;'; put 'put ''ZSgxLCJoMyIsMSksTGUoMiwiRGF0YXNldCBNZXRhIiksaGUoKSxkZSgzLCJkaXYiLDIpLGd0KDQsRTh0LDIsMCwicCIsMyksZGUoNSwiY2xyLXRhYnMiLDQpLGd0KDYsSTh0LDQsMiwiY2xyLXRhYiIsNSksaGUoKSgpLGRlKDcsImRpdiIsNikoOCwiYnV0dG9uIiw3KSxGdCgiY2xpY2siLGZ1''@;'; put 'put ''bmN0aW9uKCl7cmV0dXJuIGgub25DbG9zZUNsaWNrKCl9KSxMZSg5LCIgQ2xvc2UgIiksaGUoKSgpKCkpLDImZCYmKE1lKCJjbHJNb2RhbE9wZW4iLGgub3BlbikoImNsck1vZGFsU2l6ZSIsInhsIikoImNsck1vZGFsQ2xvc2FibGUiLCEwKSxmZSg0KSxNZSgibmdJZiIsaC5kc21ldGFUYWJz''@;'; put 'put ''Lmxlbmd0aDwxKSxmZSgyKSxNZSgibmdGb3JPZiIsaC50YWJzKSl9LGRlcGVuZGVuY2llczpbbnMsYmEsQW0sUWYsUjcsRW0sU3AsTDcsdF8sVG0sazcseG0sRDcsb3UsS3UsSHksX20sQ20seDcsd20seW0sUzddLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCk7Y29uc3QgUjh0PSgp''@;'; put 'put ''PT5bIm51bWVyaWMiLHZvaWQgMF0sUDZlPSgpPT5bImF1dG9jb21wbGV0ZSIsImF1dG9jb21wbGV0ZS5jdXN0b20iXSxKZWU9KGMsbCk9Pih7Y29sOmMsY29sSW5kZXg6bH0pLEw4dD0oKT0+W3ZvaWQgMF0sTzh0PSgpPT5bIlNPRlRTRUxFQ1QiLCJTT0ZUU0VMRUNUX0hPT0siXTtmdW5jdGlv''@;'; put 'put ''biBQOHQoYyxsKXtpZigxJmMmJihkZSgwLCJzcGFuIiwxNSksTGUoMSksaGUoKSksMiZjKXtjb25zdCBhPVJlKDIpO2ZlKCksd3IoYS5nZW5lcmF0ZWRSZWNvcmRVcmwpfX1mdW5jdGlvbiBGOHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJidXR0b24iLDE2KSxGdCgiY2xpY2si''@;'; put 'put ''LGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKDIpLmdlbmVyYXRlRWRpdFJlY29yZFVybCgpKX0pLExlKDEpLGhlKCl9aWYoMiZjKXtjb25zdCBhPVJlKDIpO01lKCJkaXNhYmxlZCIsYS5nZW5lcmF0ZUVkaXRSZWNvcmRVcmxMb2FkaW5nKSxmZSgpLElyKCIgIixhLmdlbmVyYXRlZFJl''@;'; put 'put ''Y29yZFVybD8iY29weSB0byBjbGlwYm9hcmQiOmEuZ2VuZXJhdGVFZGl0UmVjb3JkVXJsTG9hZGluZz8iR2VuZXJhdGluZyB1cmwuLi4iOiJMaW5rIHRvIHRoaXMgcmVjb3JkIiwiICIpfX1mdW5jdGlvbiBIOHQoYyxsKXtpZigxJmMmJihzaSgwKSxndCgxLFA4dCwyLDEsInNwYW4iLDEzKSgy''@;'; put 'put ''LEY4dCwyLDIsImJ1dHRvbiIsMTQpLGxpKCkpLDImYyl7Y29uc3QgYT1SZSgpO2ZlKCksTWUoIm5nSWYiLCEobnVsbCE9YS5jdXJyZW50UmVjb3JkJiZhLmN1cnJlbnRSZWNvcmQubm9MaW5rT3B0aW9uKSksZmUoKSxNZSgibmdJZiIsIShudWxsIT1hLmN1cnJlbnRSZWNvcmQmJmEuY3VycmVu''@;'; put 'put ''dFJlY29yZC5ub0xpbmtPcHRpb24pKX19ZnVuY3Rpb24gTjh0KGMsbCl7MSZjJiYoZGUoMCwiZGl2IiwxNykoMSwic3BhbiIsMTgpLExlKDIsIiBMb2FkaW5nLi4uICIpLGhlKCkoKSl9ZnVuY3Rpb24gVjh0KGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsMzEpfWZ1bmN0aW9uIEI4dChjLGwp''@;'; put 'put ''ezEmYyYmKGRlKDAsInNwYW4iLDMyKSxMZSgxLCIgTG9hZGluZy4uLiAiKSxoZSgpKX1mdW5jdGlvbiBqOHQoYyxsKXsxJmMmJkd0KDAsImNsci1pY29uIiwzMyl9ZnVuY3Rpb24gejh0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLWlucHV0LWNvbnRhaW5lciIsMzUpKDEs''@;'; put 'put ''ImlucHV0IiwzNiksRnQoImZvY3VzaW4iLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9UmUoMykuaW5kZXg7cmV0dXJuIEN0KFJlKDIpLm9uUmVjb3JkSW5wdXRGb2N1cyhoLGYpKX0pKCJwYXN0ZSIsZnVuY3Rpb24oaCl7cmV0dXJuIHd0KGEpLEN0KFJlKDUpLnJlY29yZElucHV0UGFzdGUo''@;'; put 'put ''aCkpfSkoImlucHV0IixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPVJlKDMpLiRpbXBsaWNpdCx2PVJlKDIpO3JldHVybiB2LnJlY29yZElucHV0Q2hhbmdlKGgsZi5rZXkpLEN0KHYuY3VycmVudFJlY29yZC5ub0xpbmtPcHRpb249ITApfSksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9u''@;'; put 'put ''KGgpe3d0KGEpO2NvbnN0IGY9UmUoMykuJGltcGxpY2l0LHY9UmUoMik7cmV0dXJuIG1pKHYuY3VycmVudFJlY29yZFtmLmtleV0saCl8fCh2LmN1cnJlbnRSZWNvcmRbZi5rZXldPWgpLEN0KGgpfSksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1SZSgzKS4kaW1wbGljaXQsZD1SZSgyKTtUcigi''@;'; put 'put ''aW52YWxpZC1kYXRhIixkLmN1cnJlbnRSZWNvcmRJbnZhbGlkQ29scy5pbmNsdWRlcyhhLmtleSkpLGZlKCkscGkoIm5nTW9kZWwiLGQuY3VycmVudFJlY29yZFthLmtleV0pfX1mdW5jdGlvbiBVOHQoYyxsKXsxJmMmJkZsKDApfWZ1bmN0aW9uIFo4dChjLGwpe2lmKDEmYyYmKGRlKDAsImRp''@;'; put 'put ''diIpLGd0KDEsVTh0LDEsMCwibmctY29udGFpbmVyIiwzNyksaGUoKSksMiZjKXtjb25zdCBhPVJlKDMpLGQ9YS4kaW1wbGljaXQsaD1hLmluZGV4O1JlKDIpO2NvbnN0IGY9aGEoMTYpO2ZlKCksTWUoIm5nVGVtcGxhdGVPdXRsZXQiLGYpKCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsbHAo''@;'; put 'put ''MixKZWUsZCxoKSl9fWZ1bmN0aW9uIFc4dChjLGwpe2lmKDEmYyYmKHNpKDApLGd0KDEsejh0LDIsMywiY2xyLWlucHV0LWNvbnRhaW5lciIsMzQpKDIsWjh0LDIsNSwiZGl2Iiw1KSxsaSgpKSwyJmMpe2xldCBhLGQ7Y29uc3QgaD1SZSgyKS4kaW1wbGljaXQsZj1SZSgyKTtmZSgpLE1lKCJu''@;'; put 'put ''Z0lmIixZcygyLFI4dCkuaW5jbHVkZXMobnVsbD09Zi5jdXJyZW50UmVjb3JkVmFsaWRhdG9yfHxudWxsPT0oYT1mLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3IuZ2V0UnVsZShoLmtleSkpP251bGw6YS5lZGl0b3IpKSxmZSgpLE1lKCJuZ0lmIixZcygzLFA2ZSkuaW5jbHVkZXMobnVsbD09Zi5j''@;'; put 'put ''dXJyZW50UmVjb3JkVmFsaWRhdG9yfHxudWxsPT0oZD1mLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3IuZ2V0UnVsZShoLmtleSkpP251bGw6ZC5lZGl0b3IpKX19ZnVuY3Rpb24gWTh0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLXRleHRhcmVhLWNvbnRhaW5lciIpKDEsInRl''@;'; put 'put ''eHRhcmVhIiwzOCwxKSxGdCgiZm9jdXNpbiIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1SZSgzKS5pbmRleDtyZXR1cm4gQ3QoUmUoMikub25SZWNvcmRJbnB1dEZvY3VzKGgsZikpfSkoInBhc3RlIixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoUmUoNSkucmVjb3JkSW5wdXRQYXN0''@;'; put 'put ''ZShoKSl9KSgiaW5wdXQiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9UmUoMykuJGltcGxpY2l0O3JldHVybiBDdChSZSgyKS5yZWNvcmRJbnB1dENoYW5nZShoLGYua2V5KSl9KSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1SZSgzKS4kaW1wbGljaXQs''@;'; put 'put ''dj1SZSgyKTtyZXR1cm4gbWkodi5jdXJyZW50UmVjb3JkW2Yua2V5XSxoKXx8KHYuY3VycmVudFJlY29yZFtmLmtleV09aCksQ3QoaCl9KSxMZSgzLCIgICAgICAgICAgICAgICAgICAiKSxoZSgpLGRlKDQsImNsci1jb250cm9sLWhlbHBlciIpLExlKDUpLGhlKCkoKX1pZigyJmMpe2xldCBh''@;'; put 'put ''LGQsaDtjb25zdCBmPWhhKDIpLHY9UmUoMykuJGltcGxpY2l0LE09UmUoMik7ZmUoKSxUcigiaW52YWxpZC1kYXRhIixNLmN1cnJlbnRSZWNvcmRJbnZhbGlkQ29scy5pbmNsdWRlcyh2LmtleSkpKCJub3QtY2hhciIsbnVsbD09TS5jdXJyZW50UmVjb3JkVmFsaWRhdG9yfHxudWxsPT0oYT1N''@;'; put 'put ''LmN1cnJlbnRSZWNvcmRWYWxpZGF0b3IuZ2V0UnVsZSh2LmtleSkpP251bGw6YS50eXBlKSxNZSgicm93cyIsdi52YWx1ZS5sZW5ndGg+ODA/NjoxKSxwaSgibmdNb2RlbCIsTS5jdXJyZW50UmVjb3JkW3Yua2V5XSksTWUoIm1heExlbmd0aCIsbnVsbD09TS5jdXJyZW50UmVjb3JkVmFsaWRh''@;'; put 'put ''dG9yfHxudWxsPT0oZD1NLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3IuZ2V0UnVsZSh2LmtleSkpP251bGw6ZC5sZW5ndGgpLGZlKDQpLFV1KCIiLGYudmFsdWUubGVuZ3RoLCIgLyAiLG51bGw9PU0uY3VycmVudFJlY29yZFZhbGlkYXRvcnx8bnVsbD09KGg9TS5jdXJyZW50UmVjb3JkVmFsaWRh''@;'; put 'put ''dG9yLmdldFJ1bGUodi5rZXkpKT9udWxsOmgubGVuZ3RoLCIiKX19ZnVuY3Rpb24gRzh0KGMsbCl7MSZjJiZGbCgwKX1mdW5jdGlvbiAkOHQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiKSxndCgxLEc4dCwxLDAsIm5nLWNvbnRhaW5lciIsMzcpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgzKSxk''@;'; put 'put ''PWEuJGltcGxpY2l0LGg9YS5pbmRleDtSZSgyKTtjb25zdCBmPWhhKDE2KTtmZSgpLE1lKCJuZ1RlbXBsYXRlT3V0bGV0IixmKSgibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLGxwKDIsSmVlLGQsaCkpfX1mdW5jdGlvbiBLOHQoYyxsKXtpZigxJmMmJihzaSgwKSxndCgxLFk4dCw2LDksImNs''@;'; put 'put ''ci10ZXh0YXJlYS1jb250YWluZXIiLDUpKDIsJDh0LDIsNSwiZGl2Iiw1KSxsaSgpKSwyJmMpe2xldCBhLGQ7Y29uc3QgaD1SZSgyKS4kaW1wbGljaXQsZj1SZSgyKTtmZSgpLE1lKCJuZ0lmIixZcygyLEw4dCkuaW5jbHVkZXMobnVsbD09Zi5jdXJyZW50UmVjb3JkVmFsaWRhdG9yfHxudWxs''@;'; put 'put ''PT0oYT1mLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3IuZ2V0UnVsZShoLmtleSkpP251bGw6YS5lZGl0b3IpKSxmZSgpLE1lKCJuZ0lmIixZcygzLFA2ZSkuaW5jbHVkZXMobnVsbD09Zi5jdXJyZW50UmVjb3JkVmFsaWRhdG9yfHxudWxsPT0oZD1mLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3IuZ2V0''@;'; put 'put ''UnVsZShoLmtleSkpP251bGw6ZC5lZGl0b3IpKX19ZnVuY3Rpb24gcTh0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLXRleHRhcmVhLWNvbnRhaW5lciIsMzkpKDEsInRleHRhcmVhIiw0MCksRnQoInBhc3RlIixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoUmUoNCku''@;'; put 'put ''cmVjb3JkSW5wdXRQYXN0ZShoKSl9KSgiaW5wdXQiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9UmUoMikuJGltcGxpY2l0O3JldHVybiBDdChSZSgyKS5yZWNvcmRJbnB1dENoYW5nZShoLGYua2V5KSl9KSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1S''@;'; put 'put ''ZSgyKS4kaW1wbGljaXQsdj1SZSgyKTtyZXR1cm4gbWkodi5jdXJyZW50UmVjb3JkW2Yua2V5XSxoKXx8KHYuY3VycmVudFJlY29yZFtmLmtleV09aCksQ3QoaCl9KSxoZSgpLGRlKDIsImNsci1jb250cm9sLWhlbHBlciIpLExlKDMsIkhIOm1tOnNzIiksaGUoKSgpfWlmKDImYyl7bGV0IGE7''@;'; put 'put ''Y29uc3QgZD1SZSgyKS4kaW1wbGljaXQsaD1SZSgyKTtmZSgpLFRyKCJpbnZhbGlkLWRhdGEiLGguY3VycmVudFJlY29yZEludmFsaWRDb2xzLmluY2x1ZGVzKGQua2V5KSkoIm5vdC1jaGFyIixudWxsPT1oLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3J8fG51bGw9PShhPWguY3VycmVudFJlY29y''@;'; put 'put ''ZFZhbGlkYXRvci5nZXRSdWxlKGQua2V5KSk/bnVsbDphLnR5cGUpLE1lKCJyb3dzIixkLnZhbHVlLmxlbmd0aD44MD82OjEpLHBpKCJuZ01vZGVsIixoLmN1cnJlbnRSZWNvcmRbZC5rZXldKX19ZnVuY3Rpb24gWDh0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2IiwzOSko''@;'; put 'put ''MSwidGV4dGFyZWEiLDQxKSxGdCgicGFzdGUiLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChSZSg0KS5yZWNvcmRJbnB1dFBhc3RlKGgpKX0pKCJpbnB1dCIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1SZSgyKS4kaW1wbGljaXQ7cmV0dXJuIEN0KFJlKDIpLnJlY29yZElucHV0Q2hh''@;'; put 'put ''bmdlKGgsZi5rZXkpKX0pLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPVJlKDIpLiRpbXBsaWNpdCx2PVJlKDIpO3JldHVybiBtaSh2LmN1cnJlbnRSZWNvcmRbZi5rZXldLGgpfHwodi5jdXJyZW50UmVjb3JkW2Yua2V5XT1oKSxDdChoKX0pLGhlKCksZGUo''@;'; put 'put ''MiwiY2xyLWRhdGUtY29udGFpbmVyIiw0MikoMywiaW5wdXQiLDQzKSxGdCgiY2xyRGF0ZUNoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1SZSgyKS4kaW1wbGljaXQ7cmV0dXJuIEN0KFJlKDIpLnJlY29yZERhdGVDaGFuZ2UoaCxmLmtleSkpfSksaGUoKSgpKCl9aWYoMiZjKXtj''@;'; put 'put ''b25zdCBhPVJlKDIpLiRpbXBsaWNpdCxkPVJlKDIpO2ZlKCksVHIoImludmFsaWQtZGF0YSIsZC5jdXJyZW50UmVjb3JkSW52YWxpZENvbHMuaW5jbHVkZXMoYS5rZXkpKSxwaSgibmdNb2RlbCIsZC5jdXJyZW50UmVjb3JkW2Eua2V5XSl9fWZ1bmN0aW9uIEo4dChjLGwpezEmYyYmRmwoMCl9''@;'; put 'put ''ZnVuY3Rpb24gUTh0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiksZ3QoMSxKOHQsMSwwLCJuZy1jb250YWluZXIiLDM3KSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoMiksZD1hLiRpbXBsaWNpdCxoPWEuaW5kZXg7UmUoMik7Y29uc3QgZj1oYSgxNik7ZmUoKSxNZSgibmdUZW1wbGF0ZU91dGxl''@;'; put 'put ''dCIsZikoIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IixscCgyLEplZSxkLGgpKX19ZnVuY3Rpb24gZTd0KGMsbCl7aWYoMSZjJiYoc2koMCksZGUoMSwiZGl2IiwyMCkoMiwiZGl2IiwyMSkoMywicCIsMjIpLExlKDQpLGd0KDUsVjh0LDEsMCwiY2xyLWljb24iLDIzKSxoZSgpLGRlKDYsInAi''@;'; put 'put ''LDI0KSxMZSg3KSxoZSgpKCksZGUoOCwiZGl2IiwyNSksZ3QoOSxCOHQsMiwwLCJzcGFuIiwyNikoMTAsajh0LDEsMCwiY2xyLWljb24iLDI3KSgxMSxXOHQsMyw0LCJuZy1jb250YWluZXIiLDI4KSgxMixLOHQsMyw0LCJuZy1jb250YWluZXIiLDI4KSgxMyxxOHQsNCw2LCJjbHItdGV4dGFy''@;'; put 'put ''ZWEtY29udGFpbmVyIiwyOSkoMTQsWDh0LDQsMywiZGl2IiwyOSkoMTUsUTh0LDIsNSwiZGl2IiwyOCksaGUoKSgpLEd0KDE2LCJociIsMzApLGxpKCkpLDImYyl7bGV0IGEsZDtjb25zdCBoPVJlKCksZj1oLiRpbXBsaWNpdCx2PWguaW5kZXgsTT1SZSgyKTtmZSg0KSxJcigiICIsZi5rZXks''@;'; put 'put ''IiAiKSxmZSgpLE1lKCJuZ0lmIixNLmlzQ29sUGsoZi5rZXkpKSxmZSgyKSxJcigiICIsbnVsbD09TS5jdXJyZW50UmVjb3JkVmFsaWRhdG9yfHxudWxsPT0oYT1NLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3IuZ2V0UnVsZShmLmtleSkpP251bGw6YS5kZXNjLCIgIiksZmUoKSxNZSgibmdTd2l0''@;'; put 'put ''Y2giLG51bGw9PU0uY3VycmVudFJlY29yZFZhbGlkYXRvcnx8bnVsbD09KGQ9TS5jdXJyZW50UmVjb3JkVmFsaWRhdG9yLmdldFJ1bGUoZi5rZXkpKT9udWxsOmQudHlwZSksZmUoKSxNZSgibmdJZiIsTS5jdXJyZW50UmVjb3JkTG9hZGluZ3MuaW5jbHVkZXModikpLGZlKCksTWUoIm5nSWYi''@;'; put 'put ''LE0uY3VycmVudFJlY29yZEVycm9ycy5pbmNsdWRlcyh2KSksZmUoKSxNZSgibmdTd2l0Y2hDYXNlIiwibnVtZXJpYyIpLGZlKCksTWUoIm5nU3dpdGNoQ2FzZSIsdm9pZCAwKSxmZSgpLE1lKCJuZ1N3aXRjaENhc2UiLCJ0aW1lIiksZmUoKSxNZSgibmdTd2l0Y2hDYXNlIiwiZGF0ZSIpLGZl''@;'; put 'put ''KCksTWUoIm5nU3dpdGNoQ2FzZSIsImF1dG9jb21wbGV0ZSIpfX1mdW5jdGlvbiB0N3QoYyxsKXtpZigxJmMmJihzaSgwKSxndCgxLGU3dCwxNywxMSwibmctY29udGFpbmVyIiw1KSxsaSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoKSxNZSgibmdJZiIsIkFjdGlvbiIhPT1hLmtl''@;'; put 'put ''eSYmIl9fX19fREVMRVRFX19USElTX19SRUNPUkRfX19fXyIhPT1hLmtleSYmIm5vTGlua09wdGlvbiIhPT1hLmtleSl9fWZ1bmN0aW9uIG43dChjLGwpe2lmKDEmYyYmKHNpKDApLGd0KDEsdDd0LDIsMSwibmctY29udGFpbmVyIiwxOSksZWwoMiwia2V5dmFsdWUiKSxsaSgpKSwyJmMpe2Nv''@;'; put 'put ''bnN0IGE9UmUoKTtmZSgpLE1lKCJuZ0Zvck9mIix6OCgyLDIsYS5jdXJyZW50UmVjb3JkLGEub3JpZ2luYWxPcmRlcikpKCJuZ0ZvclRyYWNrQnkiLGEudHJhY2tCeUZuKX19ZnVuY3Rpb24gcjd0KGMsbCl7MSZjJiYoZGUoMCwiY2xyLWFsZXJ0Iiw0NCkoMSwiY2xyLWFsZXJ0LWl0ZW0iKSgy''@;'; put 'put ''LCJzcGFuIiw0NSksTGUoMywiIERhdGEgVmFsaWRhdGlvbiBFcnJvcnMgLSBQbGVhc2UgUmV2aWV3ICIpLGhlKCkoKSgpKSwyJmMmJihfZCgidmlzaWJpbGl0eSIsUmUoKS5jdXJyZW50UmVjb3JkSW52YWxpZENvbHMubGVuZ3RoPjA/InZpc2libGUiOiJoaWRkZW4iKSxNZSgiY2xyQWxlcnRD''@;'; put 'put ''bG9zYWJsZSIsITEpKCJjbHJBbGVydFR5cGUiLCJkYW5nZXIiKSl9ZnVuY3Rpb24gaTd0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2Iiw0NikoMSwiYnV0dG9uIiw0NyksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgpLm9uUHJldmlvdXNSZWNv''@;'; put 'put ''cmRDbGljaygpKX0pLEd0KDIsImNsci1pY29uIiw0OCksaGUoKSxkZSgzLCJwIiksTGUoNCwiIEN1cnJlbnQgcm93OiAiKSxkZSg1LCJzdHJvbmciKSxMZSg2KSxoZSgpKCksZGUoNywiYnV0dG9uIiw0NyksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgpLm9uTmV4''@;'; put 'put ''dFJlY29yZENsaWNrKCkpfSksR3QoOCwiY2xyLWljb24iLDQ5KSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPVJlKCk7ZmUoKSxNZSgiZGlzYWJsZWQiLGEuY3VycmVudFJlY29yZEludmFsaWRDb2xzLmxlbmd0aD4wKSxmZSg1KSxJcigiICIsYS5jdXJyZW50UmVjb3JkSW5kZXgrMSwiICIpLGZl''@;'; put 'put ''KCksTWUoImRpc2FibGVkIixhLmN1cnJlbnRSZWNvcmRJbnZhbGlkQ29scy5sZW5ndGg+MCl9fWZ1bmN0aW9uIGE3dChjLGwpe2lmKDEmYyYmKGRlKDAsIm9wdGlvbiIsNTMpLExlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtNZSgibmdWYWx1ZSIsYSksZmUoKSxJcigiICIs''@;'; put 'put ''YSwiICIpfX1mdW5jdGlvbiBvN3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiKSgxLCJhcHAtc29mdC1zZWxlY3QiLDUxKSxGdCgiZm9jdXNpbiIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1SZSgpLmNvbEluZGV4O3JldHVybiBDdChSZSgpLm9uUmVjb3JkSW5wdXRG''@;'; put 'put ''b2N1cyhoLGYpKX0pLGdpKCJ2YWx1ZUNoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1SZSgpLmNvbCx2PVJlKCk7cmV0dXJuIG1pKHYuY3VycmVudFJlY29yZFtmLmtleV0saCl8fCh2LmN1cnJlbnRSZWNvcmRbZi5rZXldPWgpLEN0KGgpfSksRnQoIm9uSW5wdXRFdmVudCIsZnVu''@;'; put 'put ''Y3Rpb24oKXt3dChhKTtjb25zdCBoPVJlKCksZj1oLmNvbCx2PWguY29sSW5kZXg7cmV0dXJuIEN0KFJlKCkub25SZWNvcmREcm9wZG93bkNoYW5nZShmLmtleSx2KSl9KSxndCgyLGE3dCwyLDIsIm9wdGlvbiIsNTIpLGhlKCkoKX1pZigyJmMpe2xldCBhO2NvbnN0IGQ9UmUoKS5jb2wsaD1S''@;'; put 'put ''ZSgpO2ZlKCkscGkoInZhbHVlIixoLmN1cnJlbnRSZWNvcmRbZC5rZXldKSxNZSgiaW5wdXRJZCIsZC5rZXkpLGZlKCksTWUoIm5nRm9yT2YiLG51bGw9PWguY3VycmVudFJlY29yZFZhbGlkYXRvcnx8bnVsbD09KGE9aC5jdXJyZW50UmVjb3JkVmFsaWRhdG9yLmdldFJ1bGUoZC5rZXkpKT9u''@;'; put 'put ''dWxsOmEuc291cmNlKX19ZnVuY3Rpb24gczd0KGMsbCl7aWYoMSZjJiYoZGUoMCwib3B0aW9uIiw1NiksTGUoMSksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O01lKCJ2YWx1ZSIsYSksZmUoKSxJcigiICIsYSwiICIpfX1mdW5jdGlvbiBsN3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9''@;'; put 'put ''TG4oKTtkZSgwLCJzZWxlY3QiLDU0KSxGdCgiZm9jdXNpbiIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1SZSgpLmNvbEluZGV4O3JldHVybiBDdChSZSgpLm9uUmVjb3JkSW5wdXRGb2N1cyhoLGYpKX0pLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPVJl''@;'; put 'put ''KCkuY29sLHY9UmUoKTtyZXR1cm4gbWkodi5jdXJyZW50UmVjb3JkW2Yua2V5XSxoKXx8KHYuY3VycmVudFJlY29yZFtmLmtleV09aCksQ3QoaCl9KSxndCgxLHM3dCwyLDIsIm9wdGlvbiIsNTUpLGhlKCl9aWYoMiZjKXtsZXQgYTtjb25zdCBkPVJlKCkuY29sLGg9UmUoKTtwaSgibmdNb2Rl''@;'; put 'put ''bCIsaC5jdXJyZW50UmVjb3JkW2Qua2V5XSksZmUoKSxNZSgibmdGb3JPZiIsbnVsbD09aC5jdXJyZW50UmVjb3JkVmFsaWRhdG9yfHxudWxsPT0oYT1oLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3IuZ2V0UnVsZShkLmtleSkpP251bGw6YS5zb3VyY2UpfX1mdW5jdGlvbiBjN3QoYyxsKXtpZigx''@;'; put 'put ''JmMmJmd0KDAsbzd0LDMsMywiZGl2Iiw1MCkoMSxsN3QsMiwyLCJuZy10ZW1wbGF0ZSIsbnVsbCwyLEljKSwyJmMpe2NvbnN0IGE9bC5jb2wsZD1oYSgyKSxoPVJlKCk7TWUoIm5nSWYiLG51bGw9PWguY3VycmVudFJlY29yZFZhbGlkYXRvcj9udWxsOmguY3VycmVudFJlY29yZFZhbGlkYXRv''@;'; put 'put ''ci5oYXNEcVJ1bGVzKGEua2V5LFlzKDIsTzh0KSkpKCJuZ0lmRWxzZSIsZCl9fWxldCB1N3Q9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMuc2FzU3RvcmVTZXJ2aWNlPWEsdGhpcy5oZWxwZXJTZXJ2aWNlPWQsdGhpcy5yZWNvcmRBY3Rpb249bnVsbCx0aGlzLmZpbHRlcj0h''@;'; put 'put ''MSx0aGlzLnN1Ym1pdExvYWRpbmc9ITEsdGhpcy5oZWFkZXJQa3M9W10sdGhpcy5jZWxsVmFsaWRhdGlvbj1bXSx0aGlzLmN1cnJlbnRSZWNvcmRJbmRleD0tMSx0aGlzLmN1cnJlbnRSZWNvcmRMb2FkaW5ncz1bXSx0aGlzLmN1cnJlbnRSZWNvcmRFcnJvcnM9W10sdGhpcy5vblJlY29yZENo''@;'; put 'put ''YW5nZT1uZXcgS3IsdGhpcy5vblJlY29yZElucHV0Rm9jdXNlZD1uZXcgS3IsdGhpcy5vblJlY29yZERyb3Bkb3duQ2hhbmdlZD1uZXcgS3IsdGhpcy5vblJlY29yZEVkaXRDbG9zZT1uZXcgS3IsdGhpcy5vblJlY29yZEVkaXRDb25maXJtPW5ldyBLcix0aGlzLm9uTmV4dFJlY29yZD1uZXcg''@;'; put 'put ''S3IsdGhpcy5vblByZXZpb3VzUmVjb3JkPW5ldyBLcix0aGlzLmN1cnJlbnRSZWNvcmRJbnZhbGlkQ29scz1bXSx0aGlzLmdlbmVyYXRlRWRpdFJlY29yZFVybExvYWRpbmc9ITEsdGhpcy5nZW5lcmF0ZWRSZWNvcmRVcmw9bnVsbCx0aGlzLmFkZFJlY29yZFVybD1udWxsLHRoaXMucmVjb3Jk''@;'; put 'put ''TmV3T3JQa01vZGlmaWVkPSExLHRoaXMuYWRkUmVjb3JkTG9hZGluZz0hMSx0aGlzLm9yaWdpbmFsT3JkZXI9KGgsZik9PjB9bmdPbkluaXQoKXt9dmFsaWRhdGVSZWNvcmRDb2woYSxkKXt2YXIgaD10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtyZXR1cm4gbmV3IFByb21pc2UoKGYsdik9''@;'; put 'put ''PntoLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3I/LmV4ZWN1dGVIb3RWYWxpZGF0b3IoYSxkLE09PntmKE0pfSl9KX0pKCl9cmVjb3JkRGF0ZUNoYW5nZShhLGQpe2xldCBoPXRoaXMuY3VycmVudFJlY29yZFZhbGlkYXRvcj8uZ2V0UnVsZShkKSxmPWg/aC5kYXRlRm9ybWF0OiIiO3RoaXMuY3Vy''@;'; put 'put ''cmVudFJlY29yZCYmKHRoaXMuY3VycmVudFJlY29yZFtkXT1Jb2UoKShhKS5mb3JtYXQoZikpfWNvbmZpcm1SZWNvcmRFZGl0KCl7dGhpcy5jdXJyZW50UmVjb3JkSW52YWxpZENvbHMubGVuZ3RoPDEmJnRoaXMub25SZWNvcmRDaGFuZ2UuZW1pdCh0aGlzLmN1cnJlbnRSZWNvcmQpfWNsb3Nl''@;'; put 'put ''UmVjb3JkRWRpdCgpe3RoaXMub25SZWNvcmRFZGl0Q2xvc2UuZW1pdCgpfW9uUmVjb3JkRHJvcGRvd25DaGFuZ2UoYSxkKXt0aGlzLm9uUmVjb3JkRHJvcGRvd25DaGFuZ2VkLmVtaXQoe2NvbE5hbWU6YSxjb2w6ZH0pfW9uUmVjb3JkSW5wdXRGb2N1cyhhLGQpe3RoaXMub25SZWNvcmRJbnB1''@;'; put 'put ''dEZvY3VzZWQuZW1pdCh7ZXZlbnQ6YSxjb2xOYW1lOmR9KX1yZWNvcmRJbnB1dFBhc3RlKGEpe3NldFRpbWVvdXQoKCk9PnthLnRhcmdldC52YWx1ZT1hLnRhcmdldC52YWx1ZS5yZXBsYWNlKC9ccyskLywiIil9LDApfXJlY29yZElucHV0Q2hhbmdlKGEsZCl7dmFyIGg9dGhpcztyZXR1cm4g''@;'; put 'put ''ZWUoZnVuY3Rpb24qKCl7Y29uc3QgZj1oLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3I/LmdldFJ1bGUoZCksdj1hLnRhcmdldC52YWx1ZTtoLmhlbHBlclNlcnZpY2UuZGVib3VuY2VDYWxsKDMwMCwoKT0+e2gudmFsaWRhdGVSZWNvcmRDb2woZix2KS50aGVuKE09Pntjb25zdCBEPWguY3VycmVu''@;'; put 'put ''dFJlY29yZEludmFsaWRDb2xzLmluZGV4T2YoZCk7TT9EPi0xJiZoLmN1cnJlbnRSZWNvcmRJbnZhbGlkQ29scy5zcGxpY2UoRCwxKTpEPDAmJmguY3VycmVudFJlY29yZEludmFsaWRDb2xzLnB1c2goZCl9KX0pfSkoKX1vbk5leHRSZWNvcmRDbGljaygpe3RoaXMub25OZXh0UmVjb3JkLmVt''@;'; put 'put ''aXQoKX1vblByZXZpb3VzUmVjb3JkQ2xpY2soKXt0aGlzLm9uUHJldmlvdXNSZWNvcmQuZW1pdCgpfWNvcHlUb0NsaXAoYSl7Y29uc3QgZD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjcmVjb3JkTW9kYWxSZWYgLm1vZGFsLXRpdGxlIik7aWYoZCl7Y29uc3QgaD1kb2N1bWVudC5jcmVhdGVF''@;'; put 'put ''bGVtZW50KCJ0ZXh0YXJlYSIpO2guc3R5bGUucG9zaXRpb249ImZpeGVkIixoLnN0eWxlLmxlZnQ9IjAiLGguc3R5bGUudG9wPSIwIixoLnN0eWxlLm9wYWNpdHk9IjAiLGguc3R5bGUuekluZGV4PSI1MDAwIixoLnZhbHVlPWEsZC5hcHBlbmRDaGlsZChoKSxoLmZvY3VzKCksaC5zZWxlY3Qo''@;'; put 'put ''KSxkb2N1bWVudC5leGVjQ29tbWFuZCgiY29weSIpLGQucmVtb3ZlQ2hpbGQoaCksdGhpcy5nZW5lcmF0ZWRSZWNvcmRVcmw9YX19Z2VuZXJhdGVFZGl0UmVjb3JkVXJsKCl7dmFyIGE9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7aWYoYS5nZW5lcmF0ZWRSZWNvcmRVcmwpYS5jb3B5VG9D''@;'; put 'put ''bGlwKGEuZ2VuZXJhdGVkUmVjb3JkVXJsKTtlbHNle2EuZ2VuZXJhdGVFZGl0UmVjb3JkVXJsTG9hZGluZz0hMDtjb25zdCBkPVtdO2EuaGVhZGVyUGtzLmZvckVhY2goaD0+e2xldCBmPSJDIix2PSIiO2ZvcihsZXQgTT0wO008YS5jZWxsVmFsaWRhdGlvbi5sZW5ndGg7TSsrKXtjb25zdCBE''@;'; put 'put ''PWEuY2VsbFZhbGlkYXRpb25bTV07aWYoRC5kYXRhPT09aCl7KCJudW1lcmljIj09PUQudHlwZXx8ImRhdGUiPT09RC50eXBlfHwidGltZSI9PT1ELnR5cGUpJiYoZj0iTiIpO2JyZWFrfX12PSJDIj09PWY/YCcke2EuY3VycmVudFJlY29yZFtoXX0nYDphLmN1cnJlbnRSZWNvcmRbaF0udG9T''@;'; put 'put ''dHJpbmcoKSxkLnB1c2goe0dST1VQX0xPR0lDOiJBTkQiLFNVQkdST1VQX0xPR0lDOiJBTkQiLFNVQkdST1VQX0lEOjAsVkFSSUFCTEVfTk06aCxPUEVSQVRPUl9OTToiPSIsUkFXX1ZBTFVFOnZ9KX0pLGQubGVuZ3RoPjAmJmEubGliZHMmJih5aWVsZCBhLnNhc1N0b3JlU2VydmljZS5zYXZl''@;'; put 'put ''UXVlcnkoYS5saWJkcyxkKS50aGVuKGg9PnthLnF1ZXJ5RmlsdGVyPXtpZDpoLnJlc3VsdFswXS5GSUxURVJfUkssdGFibGU6aC5yZXN1bHRbMF0uRklMVEVSX1RBQkxFfTtjb25zdCBNPWxvY2F0aW9uLmhyZWYuc3BsaXQoIiMiKVswXSsiIy9lZGl0b3IvZWRpdC1yZWNvcmQvIithLnF1ZXJ5''@;'; put 'put ''RmlsdGVyLnRhYmxlKyIvIithLnF1ZXJ5RmlsdGVyLmlkO2EuY29weVRvQ2xpcChNKSxhLmdlbmVyYXRlRWRpdFJlY29yZFVybExvYWRpbmc9ITEsYS5maWx0ZXI9ITF9KS5jYXRjaChoPT57YS5zdWJtaXRMb2FkaW5nPSExfSkpfX0pKCl9aXNDb2xQayhhKXtyZXR1cm4gdGhpcy5oZWFkZXJQ''@;'; put 'put ''a3MuaW5kZXhPZihhKT4tMX10cmFja0J5Rm4oYSxkKXtyZXR1cm4gYX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZShraCksR2UoU3UpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1lZGl0LXJl''@;'; put 'put ''Y29yZCJdXSxpbnB1dHM6e2N1cnJlbnRSZWNvcmQ6ImN1cnJlbnRSZWNvcmQiLHJlY29yZEFjdGlvbjoicmVjb3JkQWN0aW9uIixsaWJkczoibGliZHMiLHF1ZXJ5RmlsdGVyOiJxdWVyeUZpbHRlciIsZmlsdGVyOiJmaWx0ZXIiLHN1Ym1pdExvYWRpbmc6InN1Ym1pdExvYWRpbmciLGhlYWRl''@;'; put 'put ''clBrczoiaGVhZGVyUGtzIixjZWxsVmFsaWRhdGlvbjoiY2VsbFZhbGlkYXRpb24iLGN1cnJlbnRSZWNvcmRJbmRleDoiY3VycmVudFJlY29yZEluZGV4IixjdXJyZW50UmVjb3JkTG9hZGluZ3M6ImN1cnJlbnRSZWNvcmRMb2FkaW5ncyIsY3VycmVudFJlY29yZEVycm9yczoiY3VycmVudFJl''@;'; put 'put ''Y29yZEVycm9ycyIsY3VycmVudFJlY29yZFZhbGlkYXRvcjoiY3VycmVudFJlY29yZFZhbGlkYXRvciJ9LG91dHB1dHM6e29uUmVjb3JkQ2hhbmdlOiJvblJlY29yZENoYW5nZSIsb25SZWNvcmRJbnB1dEZvY3VzZWQ6Im9uUmVjb3JkSW5wdXRGb2N1c2VkIixvblJlY29yZERyb3Bkb3duQ2hh''@;'; put 'put ''bmdlZDoib25SZWNvcmREcm9wZG93bkNoYW5nZWQiLG9uUmVjb3JkRWRpdENsb3NlOiJvblJlY29yZEVkaXRDbG9zZSIsb25SZWNvcmRFZGl0Q29uZmlybToib25SZWNvcmRFZGl0Q29uZmlybSIsb25OZXh0UmVjb3JkOiJvbk5leHRSZWNvcmQiLG9uUHJldmlvdXNSZWNvcmQ6Im9uUHJldmlv''@;'; put 'put ''dXNSZWNvcmQifSxkZWNsczoxNyx2YXJzOjExLGNvbnN0czpbWyJhdXRvY29tcGxldGUiLCIiXSxbImNoYXJUZXh0YXJlYSIsIiJdLFsib3RoZXJfdGhhbl9zb2Z0X3NlbGVjdCIsIiJdLFsiaWQiLCJyZWNvcmRNb2RhbFJlZiIsMSwicmVjb3JkLWVkaXQtbW9kYWwiLCJwb3NpdGlvbi1yZWxh''@;'; put 'put ''dGl2ZSIsMywiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxDbG9zYWJsZSJdLFsxLCJtb2RhbC10aXRsZSJdLFs0LCJuZ0lmIl0sWzEsIm1vZGFsLWJvZHkiXSxbImNsYXNzIiwiZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIHctMTAwIHB5LTEwIiw0LCJu''@;'; put 'put ''Z0lmIl0sWzEsIm1vZGFsLWZvb3RlciIsInAtMCIsImNsci1nYXAtNSIsImNsci1nYXAtbWQtMCIsImNsci1mbGV4LWNvbHVtbiIsImNsci1mbGV4LW1kLXJvdyJdLFsiY2xhc3MiLCJ2YWxpZGF0aW9uLWluZm8tYWxlcnQiLDMsInZpc2liaWxpdHkiLCJjbHJBbGVydENsb3NhYmxlIiwiY2xy''@;'; put 'put ''QWxlcnRUeXBlIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInByZXYtbmV4dCIsNCwibmdJZiJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLW91dGxpbmUiLCJmb2N1c2FibGUiLCJtci01aSIsMywiY2xpY2siXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1wcmltYXJ5IiwiZm9j''@;'; put 'put ''dXNhYmxlIiwzLCJjbGljayIsImRpc2FibGVkIl0sWyJjbGFzcyIsInBvc2l0aW9uLWFic29sdXRlIGdlbmVyYXRlLXJlY29yZC11cmwiLDQsIm5nSWYiXSxbImNsYXNzIiwiYnRuIGJ0bi1saW5rIGdlbmVyYXRlLXJlY29yZC11cmwtYnV0dG9uIHBvc2l0aW9uLWFic29sdXRlIiwzLCJkaXNh''@;'; put 'put ''YmxlZCIsImNsaWNrIiw0LCJuZ0lmIl0sWzEsInBvc2l0aW9uLWFic29sdXRlIiwiZ2VuZXJhdGUtcmVjb3JkLXVybCJdLFsxLCJidG4iLCJidG4tbGluayIsImdlbmVyYXRlLXJlY29yZC11cmwtYnV0dG9uIiwicG9zaXRpb24tYWJzb2x1dGUiLDMsImNsaWNrIiwiZGlzYWJsZWQiXSxbMSwi''@;'; put 'put ''ZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciIsImFsaWduLWl0ZW1zLWNlbnRlciIsInctMTAwIiwicHktMTAiXSxbMSwic3Bpbm5lciJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiXSxbMSwiY29sdW1uLWVudHJ5IiwiY2xyLWZsZXgtY29sdW1uIiwiY2xyLWZs''@;'; put 'put ''ZXgtbWQtcm93Il0sWzEsIm5hbWUtaW5wdXQtcm93Il0sWzEsImZvbnQtd2VpZ2h0LWJvbGQiXSxbInNoYXBlIiwia2V5Iiw0LCJuZ0lmIl0sWzEsImNlbGwtZGVzYyJdLFsxLCJpbnB1dHMtd3JhcHBlciIsInBvc2l0aW9uLXJlbGF0aXZlIiwzLCJuZ1N3aXRjaCJdLFsiY2xhc3MiLCJzcGlu''@;'; put 'put ''bmVyIHNwaW5uZXItaW5saW5lIGZsZXgtdW5zZXQgcG9zaXRpb24tYWJzb2x1dGUgZW50cnktaW5wdXQtbGVmdC1vZmZzZXQiLDQsIm5nSWYiXSxbImNsYXNzIiwiZmxleC11bnNldCBwb3NpdGlvbi1hYnNvbHV0ZSBlbnRyeS1pbnB1dC1sZWZ0LW9mZnNldCIsInNoYXBlIiwiZXJyb3Itc3Rh''@;'; put 'put ''bmRhcmQiLCJzdGF0dXMiLCJ3YXJuaW5nIiw0LCJuZ0lmIl0sWzQsIm5nU3dpdGNoQ2FzZSJdLFsiY2xhc3MiLCJkYXRlLWZpZWxkIiw0LCJuZ1N3aXRjaENhc2UiXSxbMSwibXQtMTAiXSxbInNoYXBlIiwia2V5Il0sWzEsInNwaW5uZXIiLCJzcGlubmVyLWlubGluZSIsImZsZXgtdW5zZXQi''@;'; put 'put ''LCJwb3NpdGlvbi1hYnNvbHV0ZSIsImVudHJ5LWlucHV0LWxlZnQtb2Zmc2V0Il0sWyJzaGFwZSIsImVycm9yLXN0YW5kYXJkIiwic3RhdHVzIiwid2FybmluZyIsMSwiZmxleC11bnNldCIsInBvc2l0aW9uLWFic29sdXRlIiwiZW50cnktaW5wdXQtbGVmdC1vZmZzZXQiXSxbImNsYXNzIiwi''@;'; put 'put ''bnVtZXJpYy1pbnB1dCIsMywiaW52YWxpZC1kYXRhIiw0LCJuZ0lmIl0sWzEsIm51bWVyaWMtaW5wdXQiXSxbImNscklucHV0IiwiIiwidHlwZSIsInRleHQiLDEsIm5vdC1jaGFyIiwzLCJmb2N1c2luIiwicGFzdGUiLCJpbnB1dCIsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIl0sWzQsIm5n''@;'; put 'put ''VGVtcGxhdGVPdXRsZXQiLCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCJdLFsiY2xyVGV4dGFyZWEiLCIiLDMsImZvY3VzaW4iLCJwYXN0ZSIsImlucHV0IiwibmdNb2RlbENoYW5nZSIsInJvd3MiLCJuZ01vZGVsIiwibWF4TGVuZ3RoIl0sWzEsImRhdGUtZmllbGQiXSxbImNsclRleHRhcmVh''@;'; put 'put ''IiwiIiwzLCJwYXN0ZSIsImlucHV0IiwibmdNb2RlbENoYW5nZSIsInJvd3MiLCJuZ01vZGVsIl0sWyJjbHJUZXh0YXJlYSIsIiIsInJvd3MiLCIxIiwiY29scyIsImF1dG8iLDEsIm5vdC1jaGFyIiwzLCJwYXN0ZSIsImlucHV0IiwibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiXSxbMSwiZGF0''@;'; put 'put ''ZS1waWNrZXIiXSxbInR5cGUiLCJkYXRlIiwibmFtZSIsImRhdGUiLCJjbHJEYXRlIiwiIiwxLCJkLW5vbmUiLDMsImNsckRhdGVDaGFuZ2UiXSxbMSwidmFsaWRhdGlvbi1pbmZvLWFsZXJ0IiwzLCJjbHJBbGVydENsb3NhYmxlIiwiY2xyQWxlcnRUeXBlIl0sWzEsImFsZXJ0LXRleHQiXSxb''@;'; put 'put ''MSwicHJldi1uZXh0Il0sWyJ0eXBlIiwiYnV0dG9uIiwidGFiaW5kZXgiLCIwIiwxLCJidG4iLCJidG4tb3V0bGluZSIsImZvY3VzYWJsZSIsMywiY2xpY2siLCJkaXNhYmxlZCJdLFsic2hhcGUiLCJhbmdsZSBsZWZ0Iiwic2l6ZSIsIjIzIl0sWyJzaGFwZSIsImFuZ2xlIHJpZ2h0Iiwic2l6''@;'; put 'put ''ZSIsIjIzIl0sWzQsIm5nSWYiLCJuZ0lmRWxzZSJdLFszLCJmb2N1c2luIiwidmFsdWVDaGFuZ2UiLCJvbklucHV0RXZlbnQiLCJ2YWx1ZSIsImlucHV0SWQiXSxbMywibmdWYWx1ZSIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzMsIm5nVmFsdWUiXSxbImNsclNlbGVjdCIsIiIsMywiZm9jdXNp''@;'; put 'put ''biIsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIl0sWzMsInZhbHVlIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMywidmFsdWUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXtpZigxJmQpe2NvbnN0IGY9TG4oKTtkZSgwLCJjbHItbW9kYWwiLDMpKDEsImgzIiw0KSxMZSgyKSxndCgzLEg4dCwz''@;'; put 'put ''LDIsIm5nLWNvbnRhaW5lciIsNSksaGUoKSxkZSg0LCJkaXYiLDYpLGd0KDUsTjh0LDMsMCwiZGl2Iiw3KSg2LG43dCwzLDUsIm5nLWNvbnRhaW5lciIsNSksaGUoKSxkZSg3LCJkaXYiLDgpLGd0KDgscjd0LDQsNCwiY2xyLWFsZXJ0Iiw5KSg5LGk3dCw5LDMsImRpdiIsMTApLGRlKDEwLCJk''@;'; put 'put ''aXYiKSgxMSwiYnV0dG9uIiwxMSksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxoLmN1cnJlbnRSZWNvcmQubm9MaW5rT3B0aW9uPSExLEN0KGguY2xvc2VSZWNvcmRFZGl0KCkpfSksTGUoMTIsIiBDYW5jZWwgIiksaGUoKSxkZSgxMywiYnV0dG9uIiwxMiksRnQoImNsaWNr''@;'; put 'put ''IixmdW5jdGlvbigpe3JldHVybiB3dChmKSxDdChoLmNvbmZpcm1SZWNvcmRFZGl0KCkpfSksTGUoMTQsIiBDb25maXJtICIpLGhlKCkoKSgpLGd0KDE1LGM3dCwzLDMsIm5nLXRlbXBsYXRlIixudWxsLDAsSWMpLGhlKCl9MiZkJiYoTWUoImNsck1vZGFsT3BlbiIsITApKCJjbHJNb2RhbENs''@;'; put 'put ''b3NhYmxlIiwhMSksZmUoMiksVmYoIiAiLCJBREQiPT09aC5yZWNvcmRBY3Rpb24/IkFkZCI6IkVkaXQiLCIgcmVjb3JkIGluICIsbnVsbD09aC5saWJkcz9udWxsOmgubGliZHMuc3BsaXQoIi4iKVswXSwiLiIsbnVsbD09aC5saWJkcz9udWxsOmgubGliZHMuc3BsaXQoIi4iKVsxXSwiICIp''@;'; put 'put ''LGZlKCksTWUoIm5nSWYiLCJFRElUIj09PWgucmVjb3JkQWN0aW9uKSxmZSgyKSxNZSgibmdJZiIsaC5hZGRSZWNvcmRMb2FkaW5nKSxmZSgpLE1lKCJuZ0lmIiwhaC5hZGRSZWNvcmRMb2FkaW5nKSxmZSgyKSxNZSgibmdJZiIsaC5jdXJyZW50UmVjb3JkSW52YWxpZENvbHMubGVuZ3RoPjAp''@;'; put 'put ''LGZlKCksTWUoIm5nSWYiLGguY3VycmVudFJlY29yZEludmFsaWRDb2xzLmxlbmd0aDwxKSxmZSg0KSxNZSgiZGlzYWJsZWQiLGguY3VycmVudFJlY29yZEludmFsaWRDb2xzLmxlbmd0aD4wKSl9LGRlcGVuZGVuY2llczpbbnMsYmEsTjEsUzIsY3AsQTIsazIscWwsVDIsbmwsJHMsSngsWWRl''@;'; put 'put ''LFF4LEhsLG91LEt1LGpMLFl4LEpMLHNHLFoxLEdMLEU3LFFMLHdkZSxENmUsd1JdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gZDd0KGMsbCl7aWYoMSZjJiYoZGUoMCwicCIsMyksTGUoMSksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKCksSXIo''@;'; put 'put ''IiAiLGEsIiAiKX19bGV0IGg3dD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5zdGF0ZXNMaXN0PVtdLHRoaXMucHJvY2Vzc2VkU3RhdGVzPVtdLHRoaXMuc3RhdGVySW5Qcm9ncmVzcz0hMSx0aGlzLm1pbkRlbGF5PTFlM31uZ09uSW5pdCgpe31hcHBlbmRTdGF0ZShhKXtpZigi''@;'; put 'put ''e2ZpbmlzaH0iPT09YSlyZXR1cm4gdGhpcy5zdGF0ZXJJblByb2dyZXNzPSExLHZvaWQgY2xlYXJJbnRlcnZhbCh0aGlzLnN0YXRlSW50ZXJ2YWwpO3RoaXMuc3RhdGVzTGlzdC5wdXNoKGEpLHRoaXMucHJvY2Vzc2VkU3RhdGVzLnB1c2goYSl9cmVwbGFjZUxhc3RTdGF0ZShhKXt0aGlzLnN0''@;'; put 'put ''YXRlc0xpc3QubGVuZ3RoPjA/KHRoaXMuc3RhdGVzTGlzdC5wb3AoKSx0aGlzLnN0YXRlc0xpc3QucHVzaChhKSk6dGhpcy5wcm9jZXNzZWRTdGF0ZXNbdGhpcy5wcm9jZXNzZWRTdGF0ZXMubGVuZ3RoLTFdPWF9Y2xlYXJTdGF0ZXMoKXt0aGlzLnByb2Nlc3NlZFN0YXRlcz1bXX1zdGFydFN0''@;'; put 'put ''YXRlcigpe3RoaXMuc3RhdGVySW5Qcm9ncmVzcz0hMCx0aGlzLnN0YXRlc0xpc3QubGVuZ3RoPjAmJnRoaXMucHJvY2Vzc2VkU3RhdGVzLnB1c2godGhpcy5zdGF0ZXNMaXN0LnNoaWZ0KCl8fCIiKSx0aGlzLnN0YXRlSW50ZXJ2YWw9c2V0SW50ZXJ2YWwoKCk9Pnt0aGlzLnN0YXRlc0xpc3Qu''@;'; put 'put ''bGVuZ3RoPjAmJnRoaXMucHJvY2Vzc2VkU3RhdGVzLnB1c2godGhpcy5zdGF0ZXNMaXN0LnNoaWZ0KCl8fCIiKX0sdGhpcy5taW5EZWxheSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpj''@;'; put 'put ''LHNlbGVjdG9yczpbWyJhcHAtdXBsb2FkLXN0YXRlciJdXSxkZWNsczo1LHZhcnM6MSxjb25zdHM6W1siY2xhc3MiLCJtLTAiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJ0ZXh0LWNlbnRlciJdLFsxLCJzcGlubmVyIiwic3Bpbm5lci1zbSIsInZlcnRpY2FsLWFsaWduLW1pZGRsZSJdLFsx''@;'; put 'put ''LCJtLTAiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJihkZSgwLCJkaXYiKSxndCgxLGQ3dCwyLDEsInAiLDApLGhlKCksZGUoMiwiZGl2IiwxKSgzLCJzcGFuIiwyKSxMZSg0LCJMb2FkaW5nLi4uIiksaGUoKSgpKSwyJmQmJihmZSgpLE1lKCJuZ0Zvck9mIixoLnByb2Nlc3NlZFN0''@;'; put 'put ''YXRlcykpfSxkZXBlbmRlbmNpZXM6W25zXSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpLGY3dD0oKCk9PntjbGFzcyBje3RyYW5zZm9ybShhKXtyZXR1cm4gYS5yZXBsYWNlKC9cfC9nLCIgfCAiKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhk''@;'; put 'put ''fHxjKX19c3RhdGlje3RoaXMuXHUwMjc1cGlwZT1sbCh7bmFtZToicGtTcGFjZVNlcGFyYXRlIix0eXBlOmMscHVyZTohMH0pfX1yZXR1cm4gY30pKCksRjZlPSgoKT0+e2NsYXNzIGN7dHJhbnNmb3JtKGEsZCl7cmV0dXJuIHRoaXMuYWRkU2VwYXJhdG9ycyhhLnRvU3RyaW5nKCksZCl9YWRk''@;'; put 'put ''U2VwYXJhdG9ycyhhLGQ9IiAiKXtjb25zdCBoPShhKz0iIikuc3BsaXQoIi4iKTtsZXQgZj1oWzBdO2NvbnN0IHY9aC5sZW5ndGg+MT8iLiIraFsxXToiIixNPS8oXGQrKShcZHszfSkvO2Zvcig7TS50ZXN0KGYpOylmPWYucmVwbGFjZShNLCIkMSIrZCsiJDIiKTtyZXR1cm4gZit2fXN0YXRp''@;'; put 'put ''Y3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwaXBlPWxsKHtuYW1lOiJ0aG91c2FuZFNlcGFyYXRvciIsdHlwZTpjLHB1cmU6ITB9KX19cmV0dXJuIGN9KSgpO2NvbnN0IHA3dD1bImh0Il0sZzd0PVsidXBsb2FkU3RhdGVy''@;'; put 'put ''Il0sbTd0PVsicXVlcnlGaWx0ZXIiXSx2N3Q9WyJob3RJbnN0YW5jZSJdLGI3dD1bImZpbGVVcGxvYWRJbnB1dCJdLHk3dD0oYyxsKT0+KHtsaWJOYW1lOmMsdGFibGVOYW1lOmx9KSxINmU9KCk9PlsiIiwiICJdLF83dD1jPT4oe2hlYWRlckJhckZpbHRlcjpjfSksdzd0PSgpPT5bIi9ob21l''@;'; put 'put ''Il07ZnVuY3Rpb24gQzd0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2Iiw2NCkoMSwic3BhbiIsNjUpKDIsImxhYmVsIiw2NiksTGUoMywiIEJyb3dzZSAiKSxoZSgpKCksZGUoNCwiaW5wdXQiLDY3LDMpLEZ0KCJjaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxD''@;'; put 'put ''dChSZSgpLmF0dGFjaEZpbGUoaCkpfSksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1SZSgpO2ZlKDQpLE1lKCJ1cGxvYWRlciIsYS51cGxvYWRlcil9fWZ1bmN0aW9uIFM3dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIsNjgpKDEsImJ1dHRvbiIsNjkpLEZ0KCJjbGljayIs''@;'; put 'put ''ZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS51cGxvYWRQYXJzZWRGaWxlcygpKX0pLExlKDIsIiBVcGxvYWQgIiksaGUoKSgpfTImYyYmKGZlKCksTWUoImRpc2FibGVkIiwhMCkpfWZ1bmN0aW9uIE03dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImJ1dHRvbiIsNzAp''@;'; put 'put ''LEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS5zaG93VXBsb2FkTW9kYWw9ITEpfSksTGUoMSwiIENsb3NlICIpLGhlKCl9aWYoMiZjKXtjb25zdCBhPVJlKCk7TWUoImRpc2FibGVkIixhLmV4Y2VsRmlsZVBhcnNpbmd8fGEudXBsb2FkTG9hZGluZyl9fWZ1bmN0''@;'; put 'put ''aW9uIHg3dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImJ1dHRvbiIsNzEpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS5zaG93VXBsb2FkTW9kYWw9ITEpfSksTGUoMSwiIFNraXAgIiksaGUoKX19ZnVuY3Rpb24gRTd0KGMsbCl7MSZjJiYoZGUo''@;'; put 'put ''MCwiZGl2Iiw3MiksR3QoMSwiYXBwLXVwbG9hZC1zdGF0ZXIiLG51bGwsNCksaGUoKSl9ZnVuY3Rpb24gVDd0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiYXBwLWVkaXQtcmVjb3JkIiw3MyksRnQoIm9uUmVjb3JkQ2hhbmdlIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChS''@;'; put 'put ''ZSgpLmNvbmZpcm1SZWNvcmRFZGl0KCkpfSkoIm9uUmVjb3JkSW5wdXRGb2N1c2VkIixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS5vblJlY29yZElucHV0Rm9jdXMoaCkpfSkoIm9uUmVjb3JkRWRpdENsb3NlIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgpLmNsb3Nl''@;'; put 'put ''UmVjb3JkRWRpdCgpKX0pKCJvbk5leHRSZWNvcmQiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkub25OZXh0UmVjb3JkKCkpfSkoIm9uUHJldmlvdXNSZWNvcmQiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkub25QcmV2aW91c1JlY29yZCgpKX0pLGhlKCl9aWYoMiZj''@;'; put 'put ''KXtjb25zdCBhPVJlKCk7TWUoImN1cnJlbnRSZWNvcmQiLGEuY3VycmVudEVkaXRSZWNvcmQpKCJyZWNvcmRBY3Rpb24iLGEucmVjb3JkQWN0aW9uKSgibGliZHMiLGEubGliZHMpKCJxdWVyeUZpbHRlciIsYS5xdWVyeUZpbHRlcikoImZpbHRlciIsYS5maWx0ZXIpKCJzdWJtaXRMb2FkaW5n''@;'; put 'put ''IixhLnN1Ym1pdExvYWRpbmcpKCJoZWFkZXJQa3MiLGEuaGVhZGVyUGtzKSgiY2VsbFZhbGlkYXRpb24iLGEuY2VsbFZhbGlkYXRpb24pKCJjdXJyZW50UmVjb3JkSW5kZXgiLGEuY3VycmVudEVkaXRSZWNvcmRJbmRleCkoImN1cnJlbnRSZWNvcmRMb2FkaW5ncyIsYS5jdXJyZW50RWRpdFJl''@;'; put 'put ''Y29yZExvYWRpbmdzKSgiY3VycmVudFJlY29yZEVycm9ycyIsYS5jdXJyZW50RWRpdFJlY29yZEVycm9ycykoImN1cnJlbnRSZWNvcmRWYWxpZGF0b3IiLGEuY3VycmVudEVkaXRSZWNvcmRWYWxpZGF0b3IpfX1mdW5jdGlvbiBBN3QoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDc0KSxHdCgxLCJw''@;'; put 'put ''cm9ncmVzcyIpLGhlKCkpfWZ1bmN0aW9uIGs3dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIsNzUpKDEsInNwYW4iLDc2KSxHdCgyLCJjbHItaWNvbiIsNzcpLGRlKDMsInNwYW4iLDc4KSxMZSg0LCJCYWNrIHRvIHRhYmxlIHNlbGVjdGlvbiIpLGhlKCkoKSxkZSg1LCJz''@;'; put 'put ''cGFuIiw3OSksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgpLnZpZXdib3hNYW5hZ2VyKCkpfSksR3QoNiwiY2xyLWljb24iLDgwKSxkZSg3LCJzcGFuIiw3OCksTGUoOCwiVmlld2JveGVzIiksaGUoKSgpKCl9MiZjJiYoZmUoKSxNZSgicm91dGVyTGluayIsWXMo''@;'; put 'put ''MSx3N3QpKSl9ZnVuY3Rpb24gRDd0KGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsODYpfWZ1bmN0aW9uIEk3dChjLGwpe2lmKDEmYyYmKGRlKDAsImNsci10b29sdGlwLWNvbnRlbnQiLDg4KSxMZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoMyk7ZmUoKSxJcigiICIsYS5kc05vdGUsIiAi''@;'; put 'put ''KX19ZnVuY3Rpb24gUjd0KGMsbCl7MSZjJiYoc2koMCksZ3QoMSxJN3QsMiwxLCJjbHItdG9vbHRpcC1jb250ZW50Iiw4NyksbGkoKSl9ZnVuY3Rpb24gTDd0KGMsbCl7aWYoMSZjJiYoc2koMCksTGUoMSksZWwoMiwidGhvdXNhbmRTZXBhcmF0b3IiKSxsaSgpKSwyJmMpe2NvbnN0IGE9UmUo''@;'; put 'put ''Myk7ZmUoKSxLSSgiICgiLHo4KDIsNCxhLmRhdGFTb3VyY2UubGVuZ3RoLCIsIiksIiAiLDE9PT1hLmRhdGFTb3VyY2UubGVuZ3RoPyJyb3ciOiJyb3dzIiwiLCAiLGEuY29scy5sZW5ndGgsIiIsMT09PWEuY29scy5sZW5ndGg/IiBjb2wiOiIgY29scyIsIikgIil9fWZ1bmN0aW9uIE83dChj''@;'; put 'put ''LGwpezEmYyYmKHNpKDApLExlKDEsIiAoMCByb3dzKSAiKSxsaSgpKX1mdW5jdGlvbiBQN3QoYyxsKXtpZigxJmMmJihzaSgwKSxndCgxLEw3dCwzLDcsIm5nLWNvbnRhaW5lciIsMzkpKDIsTzd0LDIsMCwibmctY29udGFpbmVyIiwzOSksbGkoKSksMiZjKXtjb25zdCBhPVJlKDIpO2ZlKCks''@;'; put 'put ''TWUoIm5nSWYiLCFhLnplcm9GaWx0ZXJSb3dzKSxmZSgpLE1lKCJuZ0lmIixhLnplcm9GaWx0ZXJSb3dzKX19ZnVuY3Rpb24gRjd0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiaDQiLDgxKSgxLCJjbHItdG9vbHRpcCIpKDIsImNsci1pY29uIiw4MiksRnQoImNsaWNrIixmdW5j''@;'; put 'put ''dGlvbigpe3JldHVybiB3dChhKSxDdChSZSgpLmRhdGFzZXRJbmZvPSEwKX0pLGhlKCksZ3QoMyxEN3QsMSwwLCJjbHItaWNvbiIsODMpLGRlKDQsInNwYW4iLDg0KSxMZSg1KSxkZSg2LCJhIiw4NSksTGUoNyksaGUoKSgpLGd0KDgsUjd0LDIsMCwibmctY29udGFpbmVyIiwzOSksaGUoKSxn''@;'; put 'put ''dCg5LFA3dCwzLDIsIm5nLWNvbnRhaW5lciIsMzkpLGhlKCl9aWYoMiZjKXtjb25zdCBhPWwubmdWYXIsZD1SZSgpO2ZlKDMpLE1lKCJuZ0lmIixhLnRhYmxlTmFtZS5pbmNsdWRlcygiLUZDIikpLGZlKDIpLElyKCIgIixhLmxpYk5hbWUsIi4iKSxmZSgpLE1lKCJyb3V0ZXJMaW5rIiwiL3Zp''@;'; put 'put ''ZXcvZGF0YS8iK2QubGliZHMpLGZlKCksd3IoYS50YWJsZU5hbWUucmVwbGFjZSgiLUZDIiwiIikpLGZlKCksTWUoIm5nSWYiLGQuZHNOb3RlJiZkLmRzTm90ZS5sZW5ndGg+MCksZmUoKSxNZSgibmdJZiIsZC5kYXRhU291cmNlKX19ZnVuY3Rpb24gSDd0KGMsbCl7aWYoMSZjKXtjb25zdCBh''@;'; put 'put ''PUxuKCk7ZGUoMCwiYnV0dG9uIiw5NSksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgzKS5vblNob3dVcGxvYWRNb2RhbCgpKX0pLEd0KDEsImNsci1pY29uIiw5NiksZGUoMiwic3BhbiIsNzgpLExlKDMsIlVwbG9hZCIpLGhlKCkoKX19ZnVuY3Rpb24gTjd0KGMs''@;'; put 'put ''bCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7c2koMCksZGUoMSwiYnV0dG9uIiw5MCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgyKS5vcGVuUWIoKSl9KSxHdCgyLCJjbHItaWNvbiIsOTEpLGRlKDMsInNwYW4iLDc4KSxMZSg0LCJGaWx0ZXIiKSxoZSgpKCksZGUo''@;'; put 'put ''NSwiYnV0dG9uIiw5MiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgyKS5lZGl0VGFibGUoKSl9KSxHdCg2LCJjbHItaWNvbiIsOTMpLGRlKDcsInNwYW4iLDc4KSxMZSg4LCJFZGl0IiksaGUoKSgpLGd0KDksSDd0LDQsMCwiYnV0dG9uIiw5NCksbGkoKX1pZigy''@;'; put 'put ''JmMpe2NvbnN0IGE9UmUoMik7ZmUoOSksTWUoIm5nSWYiLCFhLmNvbHVtbkxldmVsU2VjdXJpdHlGbGFnKX19ZnVuY3Rpb24gVjd0KGMsbCl7aWYoMSZjJiYoZGUoMCwic3BhbiIpLExlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSg0KTtmZSgpLFV1KCJUbyB1bmxvY2sgbW9yZSB0aGFuICIs''@;'; put 'put ''YS5saWNlbmNlU3RhdGUudmFsdWUuZWRpdG9yX3Jvd3NfYWxsb3dlZCwiICIsMT09PWEubGljZW5jZVN0YXRlLnZhbHVlLmVkaXRvcl9yb3dzX2FsbG93ZWQ/InJvdyI6InJvd3MiLCIsIGNvbnRhY3Qgc3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyIpfX1mdW5jdGlvbiBCN3QoYyxsKXtpZigx''@;'; put 'put ''JmMmJihkZSgwLCJjbHItdG9vbHRpcC1jb250ZW50Iiw4OCksZ3QoMSxWN3QsMiwyLCJzcGFuIiwzOSksaGUoKSksMiZjKXtjb25zdCBhPVJlKDMpO2ZlKCksTWUoIm5nSWYiLGEucmVzdHJpY3Rpb25zLnJlc3RyaWN0QWRkUm93KX19ZnVuY3Rpb24gajd0KGMsbCl7aWYoMSZjKXtjb25zdCBh''@;'; put 'put ''PUxuKCk7c2koMCksZGUoMSwiYnV0dG9uIiw5NyksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgyKS5jYW5jZWxFZGl0KCkpfSksR3QoMiwiY2xyLWljb24iLDk4KSxkZSgzLCJzcGFuIiksTGUoNCwiQ2FuY2VsIiksaGUoKSgpLGRlKDUsImNsci10b29sdGlwIiko''@;'; put 'put ''NiwiYnV0dG9uIiw5OSksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9UmUoMik7cmV0dXJuIEN0KGgucmVzdHJpY3Rpb25zLnJlc3RyaWN0QWRkUm93PyIiOmguYWRkUm93KCkpfSksR3QoNywiY2xyLWljb24iLDEwMCksTGUoOCwiQWRkIFJvdyAiKSxoZSgpLGd0KDksQjd0''@;'; put 'put ''LDIsMSwiY2xyLXRvb2x0aXAtY29udGVudCIsODcpLGhlKCksZGUoMTAsImJ1dHRvbiIsNDQpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoMikuY2hlY2tTYXZlKCkpfSksR3QoMTEsImNsci1pY29uIiwxMDEpLExlKDEyLCJTdWJtaXQgIiksaGUoKSxsaSgpfWlm''@;'; put 'put ''KDImYyl7Y29uc3QgYT1SZSgyKTtmZSg2KSxUcigiZGMtbG9ja2VkLWNvbnRyb2wiLGEucmVzdHJpY3Rpb25zLnJlc3RyaWN0QWRkUm93KSxNZSgiY2xyTG9hZGluZyIsYS5hZGRpbmdOZXdSb3cpfX1mdW5jdGlvbiB6N3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJidXR0b24i''@;'; put 'put ''LDEwNSksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgzKS5tYW51YWxGaWxlRWRpdE1vZGFsPSEwKX0pLEd0KDEsImNsci1pY29uIiw5MyksZGUoMiwic3BhbiIpLExlKDMsIkVkaXQiKSxoZSgpKCl9fWZ1bmN0aW9uIFU3dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1M''@;'; put 'put ''bigpO3NpKDApLGRlKDEsImJ1dHRvbiIsMTAyKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKDIpLmRpc2NhcmRTb3VyY2VGaWxlPSEwKX0pLEd0KDIsImNsci1pY29uIiw5OCksZGUoMywic3BhbiIpLExlKDQsIkRpc2NhcmQgZmlsZSIpLGhlKCkoKSxndCg1LHo3''@;'; put 'put ''dCw0LDAsImJ1dHRvbiIsMTAzKSxkZSg2LCJidXR0b24iLDEwNCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgyKS5zdWJtaXRFeGNlbCgpKX0pLEd0KDcsImNsci1pY29uIiwxMDEpLExlKDgsIiBTdWJtaXQgIiksaGUoKSxsaSgpfWlmKDImYyl7Y29uc3QgYT1S''@;'; put 'put ''ZSgyKTtmZSg1KSxNZSgibmdJZiIsYS5ob3RUYWJsZS5yZWFkT25seSksZmUoKSxNZSgiY2xyTG9hZGluZyIsYS51cGxvYWRMb2FkaW5nKX19ZnVuY3Rpb24gWjd0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiw4OSksZ3QoMSxON3QsMTAsMSwibmctY29udGFpbmVyIiwzOSkoMixqN3QsMTMs''@;'; put 'put ''MywibmctY29udGFpbmVyIiwzOSkoMyxVN3QsOSwyLCJuZy1jb250YWluZXIiLDM5KSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoKTtmZSgpLE1lKCJuZ0lmIixhLmhvdFRhYmxlLnJlYWRPbmx5JiYhYS51cGxvYWRQcmV2aWV3KSxmZSgpLE1lKCJuZ0lmIiwhYS5ob3RUYWJsZS5yZWFkT25seSYm''@;'; put 'put ''IWEudXBsb2FkUHJldmlldyksZmUoKSxNZSgibmdJZiIsYS51cGxvYWRQcmV2aWV3KX19ZnVuY3Rpb24gVzd0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwxMDYpKDEsInNwYW4iKSxMZSgyLCJGSUxURVIgOiAiKSxkZSgzLCJiIiksTGUoNCksaGUoKSgpKCkpLDImYyl7Y29uc3QgYT1SZSgp''@;'; put 'put ''O2ZlKDQpLHdyKGEucXVlcnlUZXh0KX19ZnVuY3Rpb24gWTd0KGMsbCl7MSZjJiYoc2koMCksZGUoMSwic3BhbiIsMTA5KSxMZSgyLCIgTG9hZGluZy4uLiAiKSxoZSgpLGRlKDMsImRpdiIsMTEwKSg0LCJwIiwxMTEpLExlKDUsIkxvYWRpbmcgdGFibGUiKSxoZSgpKCksbGkoKSl9ZnVuY3Rp''@;'; put 'put ''b24gRzd0KGMsbCl7MSZjJiYoc2koMCksZGUoMSwic3BhbiIpLEd0KDIsImNsci1pY29uIiwxMTIpLGhlKCksZGUoMywiZGl2IiwxMTApKDQsInAiLDExMSksTGUoNSwiTG9hZGluZyB0YWJsZSBlcnJvciIpLGhlKCkoKSxsaSgpKX1mdW5jdGlvbiAkN3QoYyxsKXtpZigxJmMmJihkZSgwLCJk''@;'; put 'put ''aXYiLDEwNykoMSwiZGl2IiwxMDgpLGd0KDIsWTd0LDYsMCwibmctY29udGFpbmVyIiwzOSkoMyxHN3QsNiwwLCJuZy1jb250YWluZXIiLDM5KSxoZSgpKCkpLDImYyl7Y29uc3QgYT1SZSgpO2ZlKDIpLE1lKCJuZ0lmIiwhYS5nZXRkYXRhRXJyb3IpLGZlKCksTWUoIm5nSWYiLGEuZ2V0ZGF0''@;'; put 'put ''YUVycm9yKX19ZnVuY3Rpb24gSzd0KGMsbCl7aWYoMSZjJiYoZGUoMCwic3BhbiIpLExlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgzKTtmZSgpLFV1KCJUbyB1bmxvY2sgbW9yZSB0aGFuICIsYS5saWNlbmNlU3RhdGUudmFsdWUuZWRpdG9yX3Jvd3NfYWxsb3dlZCwiICIsMT09PWEubGlj''@;'; put 'put ''ZW5jZVN0YXRlLnZhbHVlLmVkaXRvcl9yb3dzX2FsbG93ZWQ/InJvdyI6InJvd3MiLCIsIGNvbnRhY3Qgc3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyIpfX1mdW5jdGlvbiBxN3QoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItdG9vbHRpcC1jb250ZW50IiwxMTUpLGd0KDEsSzd0LDIsMiwic3Bh''@;'; put 'put ''biIsMzkpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgyKTtmZSgpLE1lKCJuZ0lmIixhLnJlc3RyaWN0aW9ucy5yZXN0cmljdEFkZFJvdyl9fWZ1bmN0aW9uIFg3dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci10b29sdGlwIikoMSwiYnV0dG9uIiwxMTMpLEZ0KCJjbGljayIs''@;'; put 'put ''ZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPVJlKCk7cmV0dXJuIEN0KGgucmVzdHJpY3Rpb25zLnJlc3RyaWN0QWRkUm93PyIiOmguYWRkUmVjb3JkQnV0dG9uQ2xpY2soKSl9KSxHdCgyLCJjbHItaWNvbiIsMTAwKSxMZSgzLCIgQWRkIFJlY29yZCAiKSxoZSgpLGd0KDQscTd0LDIsMSwiY2xy''@;'; put 'put ''LXRvb2x0aXAtY29udGVudCIsMTE0KSxoZSgpfWlmKDImYyl7Y29uc3QgYT1SZSgpO2ZlKCksVHIoImRjLWxvY2tlZC1jb250cm9sIixhLnJlc3RyaWN0aW9ucy5yZXN0cmljdEFkZFJvdyl9fWZ1bmN0aW9uIEo3dChjLGwpe2lmKDEmYyYmKGRlKDAsInAiLDExNiksTGUoMSksR3QoMiwiY29u''@;'; put 'put ''dGFjdC1saW5rIiksaGUoKSksMiZjKXtjb25zdCBhPVJlKCk7ZmUoKSxJcigiIFRvIGRpc3BsYXkgbW9yZSB0aGFuICIsYS5saWNlbmNlU3RhdGUudmFsdWUuZWRpdG9yX3Jvd3NfYWxsb3dlZCwiIHJvd3MsIGNvbnRhY3QgIil9fWZ1bmN0aW9uIFE3dChjLGwpe2lmKDEmYyYmKGRlKDAsInNw''@;'; put 'put ''YW4iLDEyOCksTGUoMSksaGUoKSksMiZjKXtjb25zdCBhPVJlKDIpO2ZlKCksVXUoIk9ubHkgIixhLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdWJtaXRfcm93c19saW1pdCwiICIsMT09PWEubGljZW5jZVN0YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xpbWl0PyJyb3ciOiJyb3dzIiwiIHdpbGwgYmUg''@;'; put 'put ''c3VibWl0dGVkLiBUbyByZW1vdmUgdGhlIHJlc3RyaWN0aW9uLCBjb250YWN0IHN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8iKX19ZnVuY3Rpb24gZTl0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2IiwxMjkpKDEsImRpdiIsMTMwKSgyLCJsYWJlbCIsMTMxKSxMZSgzLCJN''@;'; put 'put ''ZXNzYWdlIiksaGUoKSxkZSg0LCJ0ZXh0YXJlYSIsMTMyKSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1SZSgyKTtyZXR1cm4gbWkoZi5tZXNzYWdlLGgpfHwoZi5tZXNzYWdlPWgpLEN0KGgpfSksaGUoKSgpKCl9aWYoMiZjKXtjb25zdCBhPVJlKDIpO2Zl''@;'; put 'put ''KDQpLHBpKCJuZ01vZGVsIixhLm1lc3NhZ2UpLE1lKCJkaXNhYmxlZCIsIWEudmFsaWRhdGlvbkRvbmUpKCJ2YWx1ZSIsYS52YWxpZGF0aW9uRG9uZT8iIjoiUGxlYXNlIHdhaXQgd2hpbGUgd2UgdmFsaWRhdGUgIithLmNvbHMubGVuZ3RoKmEubW9kaWZlZFJvd3NJbmRleGVzLmxlbmd0aCsi''@;'; put 'put ''IGNlbGxzLiIpfX1mdW5jdGlvbiB0OXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiLDExNykoMSwiZGl2IiwxMTgpKDIsImRpdiIsMTE5KSgzLCJkaXYiLDEyMCkoNCwiYnV0dG9uIiwxMjEpLEd0KDUsImNsci1pY29uIiwxMjIpLGhlKCksZGUoNiwiaDMiLDgpLExlKDcp''@;'; put 'put ''LGhlKCkoKSxkZSg4LCJkaXYiLDkpLGd0KDksUTd0LDIsMiwic3BhbiIsMTIzKSgxMCxlOXQsNSwzLCJkaXYiLDEyNCksaGUoKSxkZSgxMSwiZGl2IiwxMjUpKDEyLCJidXR0b24iLDEyNiksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9UmUoKTtyZXR1cm4gQ3QoaC5zYXZl''@;'; put 'put ''VGFibGUoaC5ob3RUYWJsZS5kYXRhKSl9KSxMZSgxMywiIFN1Ym1pdCAiKSxoZSgpLGRlKDE0LCJidXR0b24iLDEyNyksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9UmUoKTtyZXR1cm4gaC5jYW5jZWxTdWJtaXQoKSxoLnN1Ym1pdD0hMSxDdChoLnZhbGlkYXRpb25Eb25l''@;'; put 'put ''PTApfSksTGUoMTUsIiBDYW5jZWwgIiksaGUoKSgpKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1SZSgpO2ZlKDcpLFZmKCIgU3VibWl0IGZvciBBcHByb3ZhbCAoIixhLnJvd3NDaGFuZ2VkLnJvd3NBZGRlZCwiIGFkZGVkLCAiLGEucm93c0NoYW5nZWQucm93c1VwZGF0ZWQsIiB1cGRhdGVkLCAi''@;'; put 'put ''LGEucm93c0NoYW5nZWQucm93c0RlbGV0ZWQsIiBkZWxldGVkKSAiKSxmZSgyKSxNZSgibmdJZiIsYS50b3RhbFJvd3NDaGFuZ2VkPmEubGljZW5jZVN0YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xpbWl0JiZhLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdWJtaXRfcm93c19saW1pdCE9PWEuSW5maW5p''@;'; put 'put ''dHkpLGZlKCksTWUoIm5nSWYiLGEudGFibGVUcnVlKSxmZSgyKSxNZSgiZGlzYWJsZWQiLCFhLnZhbGlkYXRpb25Eb25lKX19ZnVuY3Rpb24gbjl0KGMsbCl7aWYoMSZjJiYoZGUoMCwic3BhbiIsMTMzKSxMZSgxKSxlbCgyLCJwa1NwYWNlU2VwYXJhdGUiKSxoZSgpKSwyJmMpe2NvbnN0IGE9''@;'; put 'put ''bC4kaW1wbGljaXQsZD1SZSgpO2ZlKCksVXUoIiBPbiByb3cgIixhKzEsIjogIixEYygyLDIsZC5wa0ZpZWxkc1thXS5yZXBsYWNlKCJ8IiwiIikpLCIgIil9fWZ1bmN0aW9uIHI5dChjLGwpe2lmKDEmYyYmKGRlKDAsInAiKSxMZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7''@;'; put 'put ''ZmUoKSxWZigiICIsYS5jb2wsIigiLGEubGVuLCIpLCAiLGEudmFsLCIgIil9fWZ1bmN0aW9uIGk5dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIsMTM0KSgxLCJkaXYiLDEzNSkoMiwiZGl2IiwxMTkpKDMsImRpdiIsMTIwKSg0LCJidXR0b24iLDEyMSksR3QoNSwiY2xy''@;'; put 'put ''LWljb24iLDEyMiksaGUoKSxkZSg2LCJoMyIsOCksTGUoNywiRXJyb3IiKSxoZSgpKCksZGUoOCwiZGl2Iiw5KSg5LCJwIiksTGUoMTAsIllvdSBjYW5ub3Qgc3VibWl0IGVtcHR5IGNsYXVzZXMiKSxoZSgpKCksZGUoMTEsImRpdiIsMjMpKDEyLCJidXR0b24iLDQ0KSxGdCgiY2xpY2siLGZ1''@;'; put 'put ''bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkubnVsbFZhcmlhYmxlcz0hMSl9KSxMZSgxMywiIE9rICIpLGhlKCkoKSgpKCkoKX19ZnVuY3Rpb24gYTl0KGMsbCl7MSZjJiZHdCgwLCJhcHAtcXVlcnkiLG51bGwsNSl9ZnVuY3Rpb24gbzl0KGMsbCl7MSZjJiYoZGUoMCwicCIsMTM2KSxM''@;'; put 'put ''ZSgxLCIgU29ycnkgdGhhdCBkaWRuJ3Qgd29yaywgdHJ5IGFnYWluLiAiKSxoZSgpKX1sZXQgaU49KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5jbnQ9MH1zdGF0aWN7dGhpcy5ub25Qa0NudD0wfXN0YXRpY3t0aGlzLmxhc3RDZWxsPTB9Y29uc3RydWN0b3IoYSxkLGgsZix2LE0sRCxaLHJl''@;'; put 'put ''LGNlLGJlKXt0aGlzLmxpY2VuY2VTZXJ2aWNlPWEsdGhpcy5ldmVudFNlcnZpY2U9ZCx0aGlzLmxvZ2dlclNlcnZpY2U9aCx0aGlzLnNhc1N0b3JlU2VydmljZT1mLHRoaXMuaGVscGVyU2VydmljZT12LHRoaXMucm91dGVyPU0sdGhpcy5yb3V0ZT1ELHRoaXMuc2FzU2VydmljZT1aLHRoaXMu''@;'; put 'put ''Y2RmPXJlLHRoaXMuaG90UmVnaXN0ZXJlcj1jZSx0aGlzLnNwcmVhZHNoZWV0U2VydmljZT1iZSx0aGlzLnVwbG9hZFN0YXRlckNvbXBMaXN0PW5ldyBmZCx0aGlzLnF1ZXJ5RmlsdGVyQ29tcExpc3Q9bmV3IGZkLHRoaXMuaG90SW5zdGFuY2VDb21wTGlzdD1uZXcgZmQsdGhpcy5maWxlVXBs''@;'; put 'put ''b2FkSW5wdXRDb21wTGlzdD1uZXcgZmQsdGhpcy5tZXNzYWdlPSIiLHRoaXMuJGRhdGFGb3JtYXRzPW51bGwsdGhpcy5jb2xzPVtdLHRoaXMucmVzdHJpY3Rpb25zPXt9LHRoaXMuZGF0YXNldEluZm89ITEsdGhpcy5kc21ldGE9W10sdGhpcy52ZXJzaW9ucz1bXSx0aGlzLmRzTm90ZT0iIix0''@;'; put 'put ''aGlzLnZpZXdib3hlcz0hMSx0aGlzLkluZmluaXR5PTEvMCx0aGlzLmhvdFRhYmxlPXtkYXRhOltdLGNvbEhlYWRlcnM6W10saGlkZGVuOiEwLGNvbHVtbnM6W10saGVpZ2h0OiIxMDAlIixtaW5TcGFyZVJvd3M6MSxsaWNlbnNlS2V5OnZvaWQgMCxyZWFkT25seTohMCxjb3B5UGFzdGU6e2Nv''@;'; put 'put ''cHlDb2x1bW5IZWFkZXJzOiEwLGNvcHlDb2x1bW5IZWFkZXJzT25seTohMH0sc2V0dGluZ3M6e2NvbnRleHRNZW51OntpdGVtczp7ZWRpdF9yb3c6e25hbWU6IkVkaXQgcm93IixoaWRkZW4oKXtjb25zdCBxZT10aGlzLmdldFNlbGVjdGVkUmFuZ2UoKTtpZighcWUpcmV0dXJuITE7Y29uc3Qg''@;'; put 'put ''cnQ9cWVbMF07cmV0dXJuIHJ0LmZyb20ucm93IT09cnQudG8ucm93fSxjYWxsYmFjazooQmUscWUscnQpPT57Y29uc3QgcHQ9cWVbMF07cHQuc3RhcnQucm93PT09cHQuZW5kLnJvdyYmdGhpcy5lZGl0UmVjb3JkKG51bGwscHQuc3RhcnQucm93KX19LHJvd19hYm92ZTp7bmFtZToiSW5zZXJ0''@;'; put 'put ''IFJvdyBhYm92ZSJ9LHJvd19iZWxvdzp7bmFtZToiSW5zZXJ0IFJvdyBiZWxvdyJ9LHJlbW92ZV9yb3c6e25hbWU6Iklnbm9yZSByb3cifSxjb3B5OntuYW1lOiJDb3B5IHdpdGhvdXQgaGVhZGVycyJ9LGNvcHlfd2l0aF9jb2x1bW5faGVhZGVyczp7bmFtZToiQ29weSB3aXRoIGhlYWRlcnMi''@;'; put 'put ''fSxjb3B5X2NvbHVtbl9oZWFkZXJzX29ubHk6e25hbWU6IkNvcHkgaGVhZGVycyBvbmx5In0sc3AxOntuYW1lOiItLS0tLS0tLS0ifSx1bmRvOntuYW1lOiJVbmRvIn0scmVkbzp7bmFtZToiUmVkbyJ9fX19fSx0aGlzLmhvdENlbGxzUHJvcFJvdz1udWxsLHRoaXMuZmlsdGVyPSExLHRoaXMu''@;'; put 'put ''c3VibWl0TG9hZGluZz0hMSx0aGlzLnVwbG9hZExvYWRpbmc9ITEsdGhpcy5yb3dzQ2hhbmdlZD17cm93c1VwZGF0ZWQ6MCxyb3dzRGVsZXRlZDowLHJvd3NBZGRlZDowfSx0aGlzLm1vZGlmZWRSb3dzSW5kZXhlcz1bXSx0aGlzLnF1ZXJ5RXJyPSExLHRoaXMuc3VjY2Vzc0VuYWJsZT0hMSx0''@;'; put 'put ''aGlzLm51bGxWYXJpYWJsZXM9ITEsdGhpcy5wa0ZpZWxkcz1bXSx0aGlzLmZpbGVuYW1lPSIiLHRoaXMuc3VibWl0TGltaXROb3RpY2U9ITEsdGhpcy5iYWRFZGl0PSExLHRoaXMuc2F2ZUxvYWRpbmc9ITEsdGhpcy5hcHByb3ZlcnM9W10sdGhpcy5lcnJWYWxpZGF0aW9uPSExLHRoaXMucGtO''@;'; put 'put ''dWxsPSExLHRoaXMubm9Qa051bGw9ITEsdGhpcy50YWJsZURhdGE9W10sdGhpcy5xdWVyeVRleHQ9IiIsdGhpcy5xdWVyeVRleHRTYXZlZD0iIix0aGlzLnNob3dBcHByb3ZlcnM9ITEsdGhpcy5wa0R1cHM9ITEsdGhpcy52YWxpZGF0aW9uRG9uZT0wLHRoaXMuZHVwbGljYXRlUGtJbmRleGVz''@;'; put 'put ''PVtdLHRoaXMuY29sdW1uSGVhZGVyPVtdLHRoaXMuc3BlY0luZm89W10sdGhpcy50b29Mb25nPSExLHRoaXMuZXhjZWVkQ2VsbHM9W10sdGhpcy51cGxvYWRlcj1uZXcgUGVlLHRoaXMudXBsb2FkVXJsPSIiLHRoaXMuZXhjZWxGaWxlUmVhZHk9ITEsdGhpcy51cGxvYWRQcmV2aWV3PSExLHRo''@;'; put 'put ''aXMuZXhjZWxGaWxlUGFyc2luZz0hMSx0aGlzLmV4Y2VsVXBsb2FkU3RhdGU9bnVsbCx0aGlzLmRhdGE9W10sdGhpcy5oZWFkZXJBcnJheT1bXSx0aGlzLmhvdERhdGFTY2hlbWE9e30sdGhpcy5oZWFkZXJTaG93PVtdLHRoaXMuaGVhZGVyVmlzaWJsZT0hMSx0aGlzLmhhc0Jhc2VEcm9wWm9u''@;'; put 'put ''ZU92ZXI9ITEsdGhpcy5oYXNBbm90aGVyRHJvcFpvbmVPdmVyPSExLHRoaXMuaGVhZGVyUGtzPVtdLHRoaXMuY29sdW1uTGV2ZWxTZWN1cml0eUZsYWc9ITEsdGhpcy5kYXRlVGltZUhlYWRlcnM9W10sdGhpcy50aW1lSGVhZGVycz1bXSx0aGlzLmRhdGVIZWFkZXJzPVtdLHRoaXMueGxSdWxl''@;'; put 'put ''cz1bXSx0aGlzLmVuY29kaW5nPSJVVEYtOCIsdGhpcy5oZWFkZXJDb2x1bW5zPVtdLHRoaXMuY2VsbFZhbGlkYXRpb249W10sdGhpcy5maWxlUGFzc3dvcmRTdWJqZWN0PW5ldyBXbix0aGlzLmZpbGVVbmxvY2tFcnJvcj0hMSx0aGlzLmZpbGVQYXNzd29yZE1vZGFsPSExLHRoaXMuc2hvd1Vw''@;'; put 'put ''bG9hZE1vZGFsPSExLHRoaXMuZGlzY2FyZFNvdXJjZUZpbGU9ITEsdGhpcy5tYW51YWxGaWxlRWRpdE1vZGFsPSExLHRoaXMucmVjb3JkQWN0aW9uPW51bGwsdGhpcy5jdXJyZW50RWRpdFJlY29yZExvYWRpbmdzPVtdLHRoaXMuY3VycmVudEVkaXRSZWNvcmRFcnJvcnM9W10sdGhpcy5jdXJy''@;'; put 'put ''ZW50RWRpdFJlY29yZEluZGV4PS0xLHRoaXMuZ2VuZXJhdGVFZGl0UmVjb3JkVXJsTG9hZGluZz0hMSx0aGlzLmdlbmVyYXRlZFJlY29yZFVybD1udWxsLHRoaXMuYWRkUmVjb3JkVXJsPW51bGwsdGhpcy5yZWNvcmROZXdPclBrTW9kaWZpZWQ9ITEsdGhpcy5hZGRSZWNvcmRMb2FkaW5nPSEx''@;'; put 'put ''LHRoaXMuc2luZ2xlUm93U2VsZWN0ZWQ9ITEsdGhpcy5hZGRpbmdOZXdSb3c9ITEsdGhpcy5nZXRkYXRhRXJyb3I9ITEsdGhpcy56ZXJvRmlsdGVyUm93cz0hMSx0aGlzLnRhYmxlRmlsZURyYWdPdmVyPSExLHRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2U9W10sdGhpcy52YWxpZGF0aW9uVGFi''@;'; put 'put ''bGVMaW1pdD0yMCx0aGlzLmV4dGVuZGVkQ2VsbFZhbGlkYXRpb25GaWVsZHM9e0RJU1BMQVlfSU5ERVg6MCxFWFRSQV9DT0xfTkFNRToxLERJU1BMQVlfVkFMVUU6MixESVNQTEFZX1RZUEU6MyxSQVdfVkFMVUVfTlVNOjQsUkFXX1ZBTFVFX0NIQVI6NSxGT1JDRV9GTEFHOjZ9LHRoaXMuY2Vs''@;'; put 'put ''bFZhbGlkYXRpb25GaWVsZHM9e0RJU1BMQVlfSU5ERVg6MCxESVNQTEFZX1ZBTFVFOjEsUkFXX1ZBTFVFOjJ9LHRoaXMuZGlzYWJsZWRCYXNpY0R5bmFtaWNDZWxsVmFsaWRhdGlvbk1hcD1bXSx0aGlzLmxpY2VuY2VTdGF0ZT10aGlzLmxpY2VuY2VTZXJ2aWNlLmxpY2VuY2VTdGF0ZSx0aGlz''@;'; put 'put ''LnRpbWVzQ2xpY2tlZD0wLFplZVt3aW5kb3cubmF2aWdhdG9yLmxhbmd1YWdlXSYmJG0ucmVnaXN0ZXJMYW5ndWFnZShaZWVbd2luZG93Lm5hdmlnYXRvci5sYW5ndWFnZV0pLHRoaXMuaG90UmVnaXN0ZXJlcj1uZXcgWW0sdGhpcy5wYXJzZVJlc3RyaWN0aW9ucygpLHRoaXMuc2V0UmVzdHJp''@;'; put 'put ''Y3Rpb25zKCl9cGFyc2VSZXN0cmljdGlvbnMoKXt0aGlzLnJlc3RyaWN0aW9ucy5yZXN0cmljdEFkZFJlY29yZD0hMT09PXRoaXMubGljZW5jZVN0YXRlLnZhbHVlLmFkZFJlY29yZCx0aGlzLnJlc3RyaWN0aW9ucy5yZXN0cmljdEVkaXRSZWNvcmQ9ITE9PT10aGlzLmxpY2VuY2VTdGF0ZS52''@;'; put 'put ''YWx1ZS5lZGl0UmVjb3JkLHRoaXMucmVzdHJpY3Rpb25zLnJlc3RyaWN0RmlsZVVwbG9hZD0hMT09PXRoaXMubGljZW5jZVN0YXRlLnZhbHVlLmZpbGVVcGxvYWR9c2V0UmVzdHJpY3Rpb25zKGEpe2EmJih0aGlzLnJlc3RyaWN0aW9ucz17Li4udGhpcy5yZXN0cmljdGlvbnMsLi4uYX0pLHRo''@;'; put 'put ''aXMucmVzdHJpY3Rpb25zLnJlbW92ZUVkaXRSZWNvcmRCdXR0b24mJmRlbGV0ZSh0aGlzLmhvdFRhYmxlPy5zZXR0aW5ncz8uY29udGV4dE1lbnUpLml0ZW1zLmVkaXRfcm93LHRoaXMucmVzdHJpY3Rpb25zLnJlc3RyaWN0QWRkUm93JiYoZGVsZXRlKHRoaXMuaG90VGFibGU/LnNldHRpbmdz''@;'; put 'put ''Py5jb250ZXh0TWVudSkuaXRlbXMucm93X2Fib3ZlLGRlbGV0ZSh0aGlzLmhvdFRhYmxlPy5zZXR0aW5ncz8uY29udGV4dE1lbnUpLml0ZW1zLnJvd19iZWxvdyxkZWxldGUodGhpcy5ob3RUYWJsZT8uc2V0dGluZ3M/LmNvbnRleHRNZW51KS5pdGVtcy5yZW1vdmVfcm93KX1jaGVja1Jvd0xp''@;'; put 'put ''bWl0KCl7dGhpcy5jb2x1bW5MZXZlbFNlY3VyaXR5RmxhZ3x8dGhpcy5saWNlbmNlU3RhdGUudmFsdWUuZWRpdG9yX3Jvd3NfYWxsb3dlZCE9PTEvMCYmKHRoaXMucmVzdHJpY3Rpb25zLnJlc3RyaWN0QWRkUm93PXRoaXMuZGF0YVNvdXJjZT8ubGVuZ3RoPj10aGlzLmxpY2VuY2VTdGF0ZS52''@;'; put 'put ''YWx1ZS5lZGl0b3Jfcm93c19hbGxvd2VkKX1yZXNldEZpbHRlcigpe3RoaXMucXVlcnlGaWx0ZXJDb21wTGlzdC5maXJzdCYmdGhpcy5xdWVyeUZpbHRlckNvbXBMaXN0LmZpcnN0LnJlc2V0RmlsdGVyKCl9b25TaG93VXBsb2FkTW9kYWwoKXt0aGlzLnJlc3RyaWN0aW9ucy5yZXN0cmljdEZp''@;'; put 'put ''bGVVcGxvYWQ/dGhpcy5ldmVudFNlcnZpY2Uuc2hvd0RlbW9MaW1pdE1vZGFsKCJGaWxlIFVwbG9hZCIpOnRoaXMuY29sdW1uTGV2ZWxTZWN1cml0eUZsYWc/dGhpcy5ldmVudFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgiSW5mb3JtYXRpb24iLCJVcGxvYWQgZmVhdHVyZSBpcyBkaXNhYmxlZCB3''@;'; put 'put ''aGlsZSBDb2x1bW4gTGV2ZWwgU2VjdXJpdHkgcnVsZXMgYXJlIGFjdGl2ZSIpOnRoaXMudXBsb2FkUHJldmlld3x8KHRoaXMuc2hvd1VwbG9hZE1vZGFsPSEwKX1maWxlT3ZlckJhc2UoYSl7dGhpcy5oYXNCYXNlRHJvcFpvbmVPdmVyPWF9YXR0YWNoRmlsZShhLGQ9ITEpe3ZhciBoPXRoaXM7''@;'; put 'put ''Y29uc3QgZj1kP2FbMF06YS50YXJnZXQuZmlsZXNbMF07dGhpcy5leGNlbFVwbG9hZFN0YXRlPSJMb2FkaW5nIix0aGlzLmV4Y2VsRmlsZVBhcnNpbmc9ITAsdGhpcy5leGNlbEZpbGVSZWFkeT0hMSx0aGlzLmZpbGVuYW1lPWYubmFtZSx0aGlzLnNwcmVhZHNoZWV0U2VydmljZS5wYXJzZUV4''@;'; put 'put ''Y2VsRmlsZSh7ZmlsZTpmLHVwbG9hZGVyOnRoaXMudXBsb2FkZXIsZGNWYWxpZGF0b3I6dGhpcy5kY1ZhbGlkYXRvcixoZWFkZXJQa3M6dGhpcy5oZWFkZXJQa3MsaGVhZGVyQXJyYXk6dGhpcy5oZWFkZXJBcnJheSxoZWFkZXJTaG93OnRoaXMuaGVhZGVyU2hvdyx0aW1lSGVhZGVyczp0aGlz''@;'; put 'put ''LnRpbWVIZWFkZXJzLGRhdGVIZWFkZXJzOnRoaXMuZGF0ZUhlYWRlcnMsZGF0ZVRpbWVIZWFkZXJzOnRoaXMuZGF0ZVRpbWVIZWFkZXJzLHhsUnVsZXM6dGhpcy54bFJ1bGVzLGVuY29kaW5nOnRoaXMuZW5jb2Rpbmd9LHY9Pnt0aGlzLmFwcGVuZFVwbG9hZFN0YXRlKHYpfSx2PT57dGhpcy5l''@;'; put 'put ''dmVudFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgiVGFibGUgRm91bmQiLHYpfSkudGhlbihmdW5jdGlvbigpe3ZhciB2PWVlKGZ1bmN0aW9uKihNKXtNJiYoaC5leGNlbEZpbGVSZWFkeT0hMCxoLnVwbG9hZGVyPU0udXBsb2FkZXIsTS5kYXRhJiZNLmhlYWRlclNob3c/KGguZGF0YT1NLmRhdGEs''@;'; put 'put ''aC5oZWFkZXJTaG93PU0uaGVhZGVyU2hvdyxoLmdldFBlbmRpbmdFeGNlbFByZXZpZXcoKSk6eWllbGQgaC51cGxvYWRQYXJzZWRGaWxlcygpKX0pO3JldHVybiBmdW5jdGlvbihNKXtyZXR1cm4gdi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpKS5jYXRjaCh2PT57dGhpcy5ldmVudFNlcnZp''@;'; put 'put ''Y2Uuc2hvd0Fib3J0TW9kYWwobnVsbCx2LG51bGwpLHRoaXMuc2hvd1VwbG9hZE1vZGFsPSExLHRoaXMudXBsb2FkUHJldmlldz0hMSxzZXRUaW1lb3V0KCgpPT57dGhpcy5maWxlbmFtZT0iIn0pfSkuZmluYWxseSgoKT0+e3RoaXMuZXhjZWxGaWxlUGFyc2luZz0hMX0pfXN1Ym1pdEV4Y2Vs''@;'; put 'put ''KCl7dGhpcy5saWNlbmNlU3RhdGUudmFsdWUuc3VibWl0X3Jvd3NfbGltaXQ9PT0xLzA/dGhpcy51cGxvYWRQYXJzZWRGaWxlcygpOnRoaXMuc3VibWl0TGltaXROb3RpY2U9ITB9dXBsb2FkUGFyc2VkRmlsZXMoKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtpZihhLmNoZWNr''@;'; put 'put ''SW52YWxpZCgpKXJldHVybiB2b2lkIGEuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKG51bGwsIkludmFsaWQgdmFsdWVzIGFyZSBwcmVzZW50LiIpO2lmKGEudmFsaWRhdGVQcmltYXJ5S2V5cygpLDAhPT1hLmR1cGxpY2F0ZVBrSW5kZXhlcy5sZW5ndGgpcmV0dXJuIGEucGtEdXBzPSEw''@;'; put 'put ''LHZvaWQoYS5zdWJtaXQ9ITEpO2EucGtEdXBzPSExLGEudXBsb2FkTG9hZGluZz0hMDtjb25zdCBkPVtdO2Zvcihjb25zdCBoIG9mIGEudXBsb2FkZXIucXVldWUpZC5wdXNoKHtmaWxlOmgsZmlsZU5hbWU6aC5uYW1lfSk7eWllbGQgYS5zYXNTZXJ2aWNlLnVwbG9hZEZpbGUoYS51cGxvYWRV''@;'; put 'put ''cmwsZCx7dGFibGU6YS5saWJkc30pLnRoZW4oaD0+e2lmKHR5cGVvZiBoLmFkYXB0ZXJSZXNwb25zZS5zYXNqc0Fib3J0PiJ1Iil7aWYodHlwZW9mIGguYWRhcHRlclJlc3BvbnNlLnNhc3BhcmFtcz4idSIpcmV0dXJuO3thLnVwbG9hZExvYWRpbmc9ITE7Y29uc3QgZj1oLmFkYXB0ZXJSZXNw''@;'; put 'put ''b25zZS5zYXNwYXJhbXNbMF07YS5zdWNjZXNzRW5hYmxlPSEwLGEudGFibGVJZD1mLkRTSUQsYS5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL3N0YWdlLyIrYS50YWJsZUlkKX19ZWxzZXtjb25zdCBmPWguYWRhcHRlclJlc3BvbnNlLHY9Zi5zYXNqc0Fib3J0WzBdLk1TRyxNPWYuc2FzanNBYm9y''@;'; put 'put ''dFswXS5NQUM7YS51cGxvYWRMb2FkaW5nPSExLGEuZmlsZW5hbWU9IiIsYS5maWxlVXBsb2FkSW5wdXRDb21wTGlzdC5maXJzdCYmKGEuZmlsZVVwbG9hZElucHV0Q29tcExpc3QuZmlyc3QubmF0aXZlRWxlbWVudC52YWx1ZT0iIiksYS51cGxvYWRlci5xdWV1ZT1bXSxhLmV2ZW50U2Vydmlj''@;'; put 'put ''ZS5zaG93QWJvcnRNb2RhbCgiIix2LHtTWVNXQVJOSU5HVEVYVDpmLlNZU1dBUk5JTkdURVhULFNZU0VSUk9SVEVYVDpmLlNZU0VSUk9SVEVYVCxNQUM6TX0pfX0saD0+e2EudXBsb2FkTG9hZGluZz0hMSxhLmZpbGVVcGxvYWRJbnB1dENvbXBMaXN0LmZpcnN0JiYoYS5maWxlVXBsb2FkSW5w''@;'; put 'put ''dXRDb21wTGlzdC5maXJzdC5uYXRpdmVFbGVtZW50LnZhbHVlPSIiKSxhLnVwbG9hZGVyLnF1ZXVlPVtdLGEuZXZlbnRTZXJ2aWNlLmNhdGNoUmVzcG9uc2VFcnJvcigiZmlsZSB1cGxvYWQiLGguYWRhcHRlclJlc3BvbnNlKX0pfSkoKX1nZXRQZW5kaW5nRXhjZWxQcmV2aWV3KCl7dGhpcy5x''@;'; put 'put ''dWVyeVRleHRTYXZlZD10aGlzLnF1ZXJ5VGV4dCx0aGlzLnF1ZXJ5VGV4dD0iIix0aGlzLmV4Y2VsVXBsb2FkU3RhdGU9IlBhcnNpbmciLHRoaXMudG9nZ2xlSG90UGx1Z2luKCJjb250ZXh0TWVudSIsITEpO2NvbnN0IGE9W107dGhpcy5kYXRhLm1hcChoPT57Y29uc3QgZj17fTt0aGlzLmhl''@;'; put 'put ''YWRlclNob3cubWFwKCh2LE0pPT57Zlt2XT1oW01dfSksZi5fX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX198fChmLl9fX19fREVMRVRFX19USElTX19SRUNPUkRfX19fXz0iTm8iKSxhLnB1c2goZil9KSx0aGlzLmRhdGFTb3VyY2VVbmNoYW5nZWQ9dGhpcy5oZWxwZXJTZXJ2aWNlLmRl''@;'; put 'put ''ZXBDbG9uZSh0aGlzLmRhdGFTb3VyY2UpLHRoaXMuZGF0YVNvdXJjZT1hLHRoaXMuaG90VGFibGUuZGF0YT1hO2NvbnN0IGQ9dGhpcy5ob3RJbnN0YW5jZTt0aGlzLmV4Y2VsVXBsb2FkU3RhdGU9IlZhbGlkYXRpbmctSE9UIixkLnVwZGF0ZVNldHRpbmdzKHtkYXRhOnRoaXMuZGF0YVNvdXJj''@;'; put 'put ''ZSxtYXhSb3dzOjEvMH0sITEpLGQucmVuZGVyKCksdGhpcy5hcHBlbmRVcGxvYWRTdGF0ZSgiVmFsaWRhdGluZyByb3dzIiksZC52YWxpZGF0ZUNlbGxzKCgpPT57dGhpcy5zaG93VXBsb2FkTW9kYWw9ITEsdGhpcy51cGxvYWRQcmV2aWV3PSEwLHRoaXMuZXhjZWxGaWxlUGFyc2luZz0hMSx0''@;'; put 'put ''aGlzLmV4Y2VsVXBsb2FkU3RhdGU9bnVsbH0pfWRpc2NhcmRQZW5kaW5nRXhjZWwoYSl7dGhpcy5ob3RJbnN0YW5jZS51cGRhdGVTZXR0aW5ncyh7bWF4Um93czp0aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS5lZGl0b3Jfcm93c19hbGxvd2VkfSksYSYmdGhpcy5jYW5jZWxFZGl0KCksdGhpcy5m''@;'; put 'put ''aWxlVXBsb2FkSW5wdXRDb21wTGlzdC5maXJzdCYmKHRoaXMuZmlsZVVwbG9hZElucHV0Q29tcExpc3QuZmlyc3QubmF0aXZlRWxlbWVudC52YWx1ZT0iIiksdGhpcy51cGxvYWRQcmV2aWV3PSExLHRoaXMuZXhjZWxGaWxlUmVhZHk9ITEsdGhpcy51cGxvYWRlci5xdWV1ZT1bXSxpc05hTihw''@;'; put 'put ''YXJzZUludCh0aGlzLnJvdXRlci51cmwuc3BsaXQoIi8iKS5wb3AoKXx8IiIpKXx8dGhpcy5xdWVyeVRleHRTYXZlZC5sZW5ndGg+MCYmKHRoaXMucXVlcnlUZXh0PXRoaXMucXVlcnlUZXh0U2F2ZWQsdGhpcy5xdWVyeVRleHRTYXZlZD0iIil9cHJldmlld1RhYmxlRWRpdENvbmZpcm0oKXt0''@;'; put 'put ''aGlzLmRpc2NhcmRQZW5kaW5nRXhjZWwoKSx0aGlzLmNvbnZlcnRUb0NvcnJlY3RUeXBlcyh0aGlzLmRhdGFTb3VyY2UpLHRoaXMuZWRpdFRhYmxlKCEwKX1hcHBlbmRVcGxvYWRTdGF0ZShhLGQ9ITEpe3RoaXMuY2RmLmRldGVjdENoYW5nZXMoKSx0aGlzLnVwbG9hZFN0YXRlckNvbXBMaXN0''@;'; put 'put ''LmZpcnN0JiYoZD90aGlzLnVwbG9hZFN0YXRlckNvbXBMaXN0LmZpcnN0LnJlcGxhY2VMYXN0U3RhdGUoYSk6dGhpcy51cGxvYWRTdGF0ZXJDb21wTGlzdC5maXJzdC5hcHBlbmRTdGF0ZShhKSl9aXNDb2xQayhhKXtyZXR1cm4gdGhpcy5oZWFkZXJQa3MuaW5kZXhPZihhKT4tMX1pc1JlYWRv''@;'; put 'put ''bmx5Q29sKGEpe3JldHVybiB0aGlzLmRjVmFsaWRhdG9yPy5nZXRSdWxlKGEpPy5yZWFkT25seX1pc0NvbEhlYWRlcihhKXtyZXR1cm4gdGhpcy5oZWFkZXJBcnJheS5pbmRleE9mKGEudG9VcHBlckNhc2UoKSk+LTF9cmVtb3ZlUXVlcnkoKXt0aGlzLnNhc1N0b3JlU2VydmljZS5yZW1vdmVD''@;'; put 'put ''bGF1c2UoKX1zZW5kQ2xhdXNlKCl7dmFyIGE9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7YS5zdWJtaXRMb2FkaW5nPSEwO2xldCBkPVtdO2NvbnN0IGg9W107aWYodHlwZW9mIGEuY2xhdXNlcz4idSIpcmV0dXJuIGEubnVsbFZhcmlhYmxlcz0hMCx2b2lkKGEuc3VibWl0TG9hZGluZz0h''@;'; put 'put ''MSk7e2NvbnN0IGY9YS5jbGF1c2VzLnF1ZXJ5T2JqO2lmKGZbMF0uZWxlbWVudHMubGVuZ3RoPDEpcmV0dXJuKCJob21lIj09PUtuLnJvb3RQYXJhbXx8ImVkaXRvciI9PT1Lbi5yb290UGFyYW0pJiYoS24uZWRpdG9yLmZpbHRlci5jbGF1c2VzPVtdLEtuLmVkaXRvci5maWx0ZXIucXVlcnk9''@;'; put 'put ''W10sS24uZWRpdG9yLmZpbHRlci5ncm91cExvZ2ljPSIiKSx2b2lkIGEucm91dGVyLm5hdmlnYXRlKFsiL2VkaXRvci8iK2EubGliZHNdLHtxdWVyeVBhcmFtc0hhbmRsaW5nOiJwcmVzZXJ2ZSJ9KTtmb3IobGV0IHY9MDt2PGYubGVuZ3RoO3YrKyl7Y29uc3QgTT1mW3ZdLmVsZW1lbnRzO2Q9''@;'; put 'put ''TS5maWx0ZXIoZnVuY3Rpb24oRCl7cmV0dXJuIG51bGw9PT1ELnZhcmlhYmxlfSksZC5sZW5ndGgmJmgucHVzaChNKX19aWYoaC5sZW5ndGgpcmV0dXJuIGEubnVsbFZhcmlhYmxlcz0hMCx2b2lkKGEuc3VibWl0TG9hZGluZz0hMSk7dHJ5e2lmKHZvaWQgMCE9PWEuY2xhdXNlcyYmYS5saWJk''@;'; put 'put ''cyl7Y29uc3QgZj17Z3JvdXBMb2dpYzphLmNsYXVzZXMuZ3JvdXBMb2dpYyxmaWx0ZXJHcm91cHM6W119O2EuY2xhdXNlcy5xdWVyeU9iai5mb3JFYWNoKE09Pntjb25zdCBEPXtmaWx0ZXJDbGF1c2VzOltdfTtNLmVsZW1lbnRzLmZvckVhY2goWj0+e0QuZmlsdGVyQ2xhdXNlcy5wdXNoKGEu''@;'; put 'put ''aGVscGVyU2VydmljZS5kZWVwQ2xvbmUoWikpfSksRC5jbGF1c2VMb2dpYz1NLmNsYXVzZUxvZ2ljLGYuZmlsdGVyR3JvdXBzLnB1c2goYS5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShEKSl9KTtjb25zdCB2PWEuc2FzU3RvcmVTZXJ2aWNlLmNyZWF0ZUZpbHRlclF1ZXJ5VGFibGUoZik7eWll''@;'; put 'put ''bGQgYS5zYXNTdG9yZVNlcnZpY2Uuc2F2ZVF1ZXJ5KGEubGliZHMsdikudGhlbihNPT57YS5xdWVyeUZpbHRlcj17aWQ6TS5yZXN1bHRbMF0uRklMVEVSX1JLLHRhYmxlOk0ucmVzdWx0WzBdLkZJTFRFUl9UQUJMRX0sYS5yb3V0ZXIubmF2aWdhdGUoWyIvIl0se3NraXBMb2NhdGlvbkNoYW5n''@;'; put 'put ''ZTohMCxxdWVyeVBhcmFtc0hhbmRsaW5nOiJwcmVzZXJ2ZSJ9KS50aGVuKCgpPT5hLnJvdXRlci5uYXZpZ2F0ZShbIi9lZGl0b3IvIithLnF1ZXJ5RmlsdGVyLnRhYmxlKyIvIithLnF1ZXJ5RmlsdGVyLmlkXSx7cXVlcnlQYXJhbXNIYW5kbGluZzoicHJlc2VydmUifSkpLGEuZmlsdGVyPSEx''@;'; put 'put ''fSkuY2F0Y2goTT0+e2Euc3VibWl0TG9hZGluZz0hMX0pfX1jYXRjaChmKXthLnF1ZXJ5RXJyPSEwLGEuc3VibWl0TG9hZGluZz0hMSxhLnF1ZXJ5RXJyTWVzc2FnZT1mfX0pKCl9b3BlblFiKCl7dGhpcy5saWJkcyYmKHRoaXMuZmlsdGVyPSEwLHRoaXMuY2RmLmRldGVjdENoYW5nZXMoKSx0''@;'; put 'put ''aGlzLnN1Ym1pdExvYWRpbmc9ITEsdGhpcy5zYXNTdG9yZVNlcnZpY2Uuc2V0UXVlcnlWYXJpYWJsZXModGhpcy5saWJkcyx0aGlzLmNvbHMpKX1lZGl0VGFibGUoYSxkKXt0aGlzLnRvZ2dsZUhvdFBsdWdpbigiY29udGV4dE1lbnUiLCEwKTtjb25zdCBoPXRoaXMuaG90SW5zdGFuY2UsZj1o''@;'; put 'put ''LmdldFBsdWdpbigibXVsdGlDb2x1bW5Tb3J0aW5nIiksdj1mLmdldFNvcnRDb25maWcoKSxNPUFycmF5LmlzQXJyYXkodik/djpbdl07c2V0VGltZW91dCgoKT0+e2F8fCh0aGlzLmRhdGFTb3VyY2VVbmNoYW5nZWQ9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZSh0aGlzLmRhdGFTb3Vy''@;'; put 'put ''Y2UpLGQmJnRoaXMuZGF0YVNvdXJjZVVuY2hhbmdlZC5wb3AoKSksdGhpcy5ob3RUYWJsZS5yZWFkT25seT0hMSx0aGlzLmhvdFRhYmxlLmRhdGE9dGhpcy5kYXRhU291cmNlLGgudXBkYXRlU2V0dGluZ3Moe3JlYWRPbmx5OnRoaXMuaG90VGFibGUucmVhZE9ubHl9LCExKSxoLnJlbmRlcigp''@;'; put 'put ''O2Zvcihjb25zdCBEIG9mIE0pZi5zb3J0KEQpO3RoaXMucmVTZXRDZWxsVmFsaWRhdGlvblZhbHVlcygpfSwwKX1jb252ZXJ0VG9Db3JyZWN0VHlwZXMoYSl7Zm9yKGNvbnN0IGQgb2YgYSlmb3IoY29uc3QgaCBpbiBkKXtjb25zdCBmPXRoaXMuY29scy5maW5kKHY9PnYuTkFNRT09PWgpO2Ym''@;'; put 'put ''JiIiIT09ZFtoXSYmIm51bSI9PT1mLlRZUEUmJiFmLkREVFlQRS5pbmNsdWRlcygiVElNRSIpJiYhZi5ERFRZUEUuaW5jbHVkZXMoIkRBVEUiKSYmKGRbaF09cGFyc2VJbnQoZFtoXSkpfX1jYW5jZWxFZGl0KCl7dGhpcy50b2dnbGVIb3RQbHVnaW4oImNvbnRleHRNZW51IiwhMSksdGhpcy5j''@;'; put 'put ''ZWxsVmFsaWRhdGlvblNvdXJjZT1bXTtjb25zdCBhPXRoaXMuaG90SW5zdGFuY2UsZD1hLmdldFBsdWdpbigibXVsdGlDb2x1bW5Tb3J0aW5nIiksaD1kLmdldFNvcnRDb25maWcoKSxmPUFycmF5LmlzQXJyYXkoaCk/aDpbaF07dGhpcy5kYXRhU291cmNlVW5jaGFuZ2VkJiYodGhpcy5kYXRh''@;'; put 'put ''U291cmNlPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUodGhpcy5kYXRhU291cmNlVW5jaGFuZ2VkKSksdGhpcy5ob3RUYWJsZS5kYXRhPXRoaXMuZGF0YVNvdXJjZSx0aGlzLmhvdFRhYmxlLnJlYWRPbmx5PSEwLGEudXBkYXRlU2V0dGluZ3Moe3JlYWRPbmx5OnRoaXMuaG90VGFibGUu''@;'; put 'put ''cmVhZE9ubHksZGF0YTp0aGlzLmRhdGFTb3VyY2V9LCExKSxhLnZhbGlkYXRlUm93cyh0aGlzLm1vZGlmZWRSb3dzSW5kZXhlcyk7Zm9yKGNvbnN0IHYgb2YgZilkLnNvcnQodik7dGhpcy5jaGVja1Jvd0xpbWl0KCl9aG90Q2xpY2tlZCgpezE9PT10aGlzLnRpbWVzQ2xpY2tlZCYmdGhpcy5o''@;'; put 'put ''b3RUYWJsZS5yZWFkT25seSYmdGhpcy5lZGl0VGFibGUoKSwwPT09dGhpcy50aW1lc0NsaWNrZWQmJih0aGlzLnRpbWVzQ2xpY2tlZCsrLHNldFRpbWVvdXQoKCk9Pnt0aGlzLnRpbWVzQ2xpY2tlZD0wfSwyMDApKX1jbGVhbkV4Y2VlZCgpe3RoaXMuZXhjZWVkQ2VsbHM9W119YXBwcm92ZXJz''@;'; put 'put ''VG9nZ2xlKCl7dGhpcy5zaG93QXBwcm92ZXJzPSF0aGlzLnNob3dBcHByb3ZlcnN9YWRkUm93KCl7dGhpcy5hZGRpbmdOZXdSb3c9ITAsc2V0VGltZW91dCgoKT0+e2NvbnN0IGE9dGhpcy5ob3RJbnN0YW5jZSxkPXRoaXMuZGF0YVNvdXJjZS5sZW5ndGg7YS5hbHRlcigiaW5zZXJ0X3Jvd19i''@;'; put 'put ''ZWxvdyIsZCwxKSxhLnVwZGF0ZVNldHRpbmdzKHtkYXRhOnRoaXMuZGF0YVNvdXJjZX0sITEpLGEuc2VsZWN0Q2VsbCh0aGlzLmRhdGFTb3VyY2UubGVuZ3RoLTEsMCksYS5yZW5kZXIoKSx0aGlzLmRhdGFTb3VyY2VbZF0mJih0aGlzLmRhdGFTb3VyY2VbZF0ubm9MaW5rT3B0aW9uPSEwKSx0''@;'; put 'put ''aGlzLmFkZGluZ05ld1Jvdz0hMSx0aGlzLnJlU2V0Q2VsbFZhbGlkYXRpb25WYWx1ZXMoKX0pfWNhbmNlbFN1Ym1pdCgpe3RoaXMuZGF0YVNvdXJjZT10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKHRoaXMuZGF0YVNvdXJjZUJlZm9yZVN1Ym1pdCksdGhpcy5kYXRhU291cmNlQmVmb3Jl''@;'; put 'put ''U3VibWl0PVtdLHRoaXMuaG90VGFibGUuZGF0YT10aGlzLmRhdGFTb3VyY2U7Y29uc3QgYT10aGlzLmhvdEluc3RhbmNlO2EudXBkYXRlU2V0dGluZ3Moe2RhdGE6dGhpcy5kYXRhU291cmNlLGNvbEhlYWRlcnM6dGhpcy5oZWFkZXJDb2x1bW5zLGNvbHVtbnM6dGhpcy5jZWxsVmFsaWRhdGlv''@;'; put 'put ''bixtb2RpZnlDb2xXaWR0aDpmdW5jdGlvbihkLGgpe3JldHVybiAwPT09aD82MDpkPjUwMD81MDA6ZH19LCExKSxhLnNlbGVjdENlbGwoMCwwKSxhLnJlbmRlcigpLGEudmFsaWRhdGVSb3dzKHRoaXMubW9kaWZlZFJvd3NJbmRleGVzKSx0aGlzLnJlU2V0Q2VsbFZhbGlkYXRpb25WYWx1ZXMo''@;'; put 'put ''KX1nZXRSb3dzU3VibWl0dGluZ0NvdW50KCl7dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCkuZGVidWcmJih0aGlzLmxvZ2dlclNlcnZpY2UubG9nKHRoaXMuZGF0YVNvdXJjZSksdGhpcy5sb2dnZXJTZXJ2aWNlLmxvZyh0aGlzLmRhdGFTb3VyY2VVbmNoYW5nZWQpKTtsZXQgYT0w''@;'; put 'put ''LGQ9MCxoPTA7dGhpcy5tb2RpZmVkUm93c0luZGV4ZXM9W10sdGhpcy5kYXRhTW9kaWZpZWQ9W107Zm9yKGxldCBmPTA7Zjx0aGlzLmRhdGFTb3VyY2UubGVuZ3RoO2YrKyl7Y29uc3Qgdj10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKHRoaXMuZGF0YVNvdXJjZVtmXSk7aWYoIlllcyI9''@;'; put 'put ''PT12Ll9fX19fREVMRVRFX19USElTX19SRUNPUkRfX19fXyl0aGlzLmRhdGFNb2RpZmllZC5wdXNoKHYpLGQrKztlbHNle2NvbnN0IE09dGhpcy5kYXRhU291cmNlVW5jaGFuZ2VkLmZpbmQoRD0+e2Zvcihjb25zdCBaIG9mIHRoaXMuaGVhZGVyUGtzKWlmKERbWl0hPT12W1pdKXJldHVybiEx''@;'; put 'put ''O3JldHVybiEwfSk7TT9KU09OLnN0cmluZ2lmeSh2KSE9PUpTT04uc3RyaW5naWZ5KE0pJiYodGhpcy5kYXRhTW9kaWZpZWQucHVzaCh2KSx0aGlzLm1vZGlmZWRSb3dzSW5kZXhlcy5wdXNoKGYpLGErKyk6KHRoaXMuZGF0YU1vZGlmaWVkLnB1c2godiksdGhpcy5tb2RpZmVkUm93c0luZGV4''@;'; put 'put ''ZXMucHVzaChmKSxoKyspfX10aGlzLnJvd3NDaGFuZ2VkPXtyb3dzVXBkYXRlZDphLHJvd3NEZWxldGVkOmQscm93c0FkZGVkOmh9fXZhbGlkYXRlUHJpbWFyeUtleXMoKXtjb25zdCBhPXRoaXMuaG90SW5zdGFuY2UsZD1hLmdldERhdGEoKTt0aGlzLnBrRmllbGRzPVtdO2ZvcihsZXQgTT0w''@;'; put 'put ''O008ZC5sZW5ndGg7TSsrKXtsZXQgRD0iIjtmb3IobGV0IFo9MTtaPHRoaXMucmVhZE9ubHlGaWVsZHMrMTtaKyspRD1EKyJ8IitkW01dW1pdO3RoaXMucGtGaWVsZHMucHVzaChEKX1jb25zdCBoPVtdLGY9dGhpcy5kYXRhU291cmNlLmxlbmd0aDtmb3IobGV0IE09MDtNPHRoaXMucGtGaWVs''@;'; put 'put ''ZHMubGVuZ3RoO00rKylmb3IobGV0IEQ9MDtEPHRoaXMucGtGaWVsZHMubGVuZ3RoO0QrKyl0aGlzLnBrRmllbGRzW01dPT09dGhpcy5wa0ZpZWxkc1tEXSYmRCE9PU0mJmgucHVzaChEKTtpZih0aGlzLnBrRmllbGRzLmxlbmd0aD5mKWZvcihsZXQgTT1mO008dGhpcy5wa0ZpZWxkcy5sZW5n''@;'; put 'put ''dGg7TSsrKWZvcihsZXQgRD1mO0Q8dGhpcy5wa0ZpZWxkcy5sZW5ndGg7RCsrKU08RCYmdGhpcy5wa0ZpZWxkc1tNXT09PXRoaXMucGtGaWVsZHNbRF0mJmgucHVzaChEKTtsZXQgdjtmb3IobGV0IE09MDtNPGgubGVuZ3RoO00rKylmb3IobGV0IEQ9MTtEPHRoaXMucmVhZE9ubHlGaWVsZHMr''@;'; put 'put ''MTtEKyspdj1hLmdldENlbGxNZXRhKGhbTV0sRCksdi52YWxpZD0hMSx2LmR1cEtleT0hMCxhLnJlbmRlcigpO3RoaXMuZHVwbGljYXRlUGtJbmRleGVzPVsuLi5uZXcgU2V0KGguc29ydCgpKV19cmVTZXRDZWxsVmFsaWRhdGlvblZhbHVlcyhhPSExLGQpe2NvbnN0IGg9dGhpcy5ob3RJbnN0''@;'; put 'put ''YW5jZTtmb3IoY29uc3QgZiBvZiB0aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlKXtjb25zdCB2PWYudmFsdWVzLm1hcChNPT5NW3RoaXMuY2VsbFZhbGlkYXRpb25GaWVsZHMuUkFXX1ZBTFVFXSk7aC5iYXRjaCgoKT0+e2NvbnN0IE09aC5nZXRDZWxsTWV0YShmLnJvdyxmLmNvbCksRD10aGlz''@;'; put 'put ''LmRjVmFsaWRhdG9yPy5nZXRSdWxlKE0uZGF0YXx8IiIpO2xldCBaO0QmJihaPXRoaXMuZGNWYWxpZGF0b3I/LmdldERxRHJvcGRvd25Tb3VyY2UoRCkpLFp8fChaPVtdKTtjb25zdCByZT1bLi4ubmV3IFNldChbLi4uWiwuLi52XSldO3RoaXMuY3VycmVudEVkaXRSZWNvcmRWYWxpZGF0b3I/''@;'; put 'put ''LnVwZGF0ZVJ1bGUoZi5jb2wse3NvdXJjZTpyZX0pLGguc2V0Q2VsbE1ldGEoZi5yb3csZi5jb2wsInNvdXJjZSIscmUpLGYudmFsdWVzLmxlbmd0aD4wJiYoaC5zZXRDZWxsTWV0YShmLnJvdyxmLmNvbCwicmVuZGVyZXIiLCJhdXRvY29tcGxldGUiKSxoLnNldENlbGxNZXRhKGYucm93LGYu''@;'; put 'put ''Y29sLCJlZGl0b3IiLCJhdXRvY29tcGxldGUuY3VzdG9tIiksaC5zZXRDZWxsTWV0YShmLnJvdyxmLmNvbCwic3RyaWN0IixmLnN0cmljdCksaC5zZXRDZWxsTWV0YShmLnJvdyxmLmNvbCwiZmlsdGVyIiwhMSksdGhpcy5jdXJyZW50RWRpdFJlY29yZFZhbGlkYXRvcj8udXBkYXRlUnVsZShm''@;'; put 'put ''LmNvbCx7cmVuZGVyZXI6ImF1dG9jb21wbGV0ZSIsZWRpdG9yOiJhdXRvY29tcGxldGUuY3VzdG9tIixzdHJpY3Q6Zi5zdHJpY3QsZmlsdGVyOiExfSkpLHRoaXMucmVTZXRFeHRlbmRlZENlbGxWYWxpZGF0aW9uVmFsdWVzKGYsdm9pZCAwLGEsZCksaC5yZW5kZXIoKX0pfX1yZVNldEV4dGVu''@;'; put 'put ''ZGVkQ2VsbFZhbGlkYXRpb25WYWx1ZXMoYSxkLGg9ITEsZil7aWYoYSl7ZHx8KGQ9YS5yb3cpO2NvbnN0IE09dGhpcy5nZXRFeHRlbmRlZFZhbHVlc0J5Q2VsbFZhbHVlKGEpO3RoaXMuc2V0RXh0ZW5kZWRWYWx1ZXNUb0NlbGxzKGEsZCxNLGgsZil9ZWxzZSBmb3IoY29uc3QgTSBvZiB0aGlz''@;'; put 'put ''LmNlbGxWYWxpZGF0aW9uU291cmNlKXtjb25zdCBEPXRoaXMuZ2V0RXh0ZW5kZWRWYWx1ZXNCeUNlbGxWYWx1ZShNKTt0aGlzLnNldEV4dGVuZGVkVmFsdWVzVG9DZWxscyhNLE0ucm93LEQsaCxmKX19c2V0RXh0ZW5kZWRWYWx1ZXNUb0NlbGxzKGEsZCxoLGY9ITEsdil7Y29uc3QgTT10aGlz''@;'; put 'put ''LmhvdEluc3RhbmNlLEQ9W107Zm9yKGNvbnN0IFogb2YgaClELmluZGV4T2YoWi5FWFRSQV9DT0xfTkFNRSk8MCYmRC5wdXNoKFouRVhUUkFfQ09MX05BTUUpO2Zvcihjb25zdCBaIG9mIEQpe2NvbnN0IHJlPWguZmlsdGVyKGR0PT5kdC5FWFRSQV9DT0xfTkFNRT09PVopO2xldCBjZT1yZS5t''@;'; put 'put ''YXAoZHQ9PiJDIj09PWR0LkRJU1BMQVlfVFlQRT9kdC5SQVdfVkFMVUVfQ0hBUjpkdC5SQVdfVkFMVUVfTlVNKTtjb25zdCBiZT1NLnByb3BUb0NvbChaKTt0aGlzLmRpc2FibGVkQmFzaWNEeW5hbWljQ2VsbFZhbGlkYXRpb25NYXAuZmluZChkdD0+ZHQucm93PT09ZCYmZHQuY29sPT09YmUp''@;'; put 'put ''fHx0aGlzLmRpc2FibGVkQmFzaWNEeW5hbWljQ2VsbFZhbGlkYXRpb25NYXAucHVzaCh7cm93OmQsY29sOmJlLGFjdGl2ZTohMX0pLE0uc2V0Q2VsbE1ldGEoZCxiZSwicmVuZGVyZXIiLCJhdXRvY29tcGxldGUiKSxNLnNldENlbGxNZXRhKGQsYmUsImVkaXRvciIsImF1dG9jb21wbGV0ZS5j''@;'; put 'put ''dXN0b20iKSxNLnNldENlbGxNZXRhKGQsYmUsInN0cmljdCIsYS5zdHJpY3QpLE0uc2V0Q2VsbE1ldGEoZCxiZSwiZmlsdGVyIiwhMSksdGhpcy5jdXJyZW50RWRpdFJlY29yZFZhbGlkYXRvcj8udXBkYXRlUnVsZShiZSx7cmVuZGVyZXI6ImF1dG9jb21wbGV0ZSIsZWRpdG9yOiJhdXRvY29t''@;'; put 'put ''cGxldGUuY3VzdG9tIixzdHJpY3Q6YS5zdHJpY3QsZmlsdGVyOiExfSk7Y29uc3QgQmU9TS5nZXRDZWxsTWV0YShkLGJlKSxxZT10aGlzLmRjVmFsaWRhdG9yPy5nZXRSdWxlKEJlLmRhdGF8fCIiKTtsZXQgcnQ7cWUmJihydD10aGlzLmRjVmFsaWRhdG9yPy5nZXREcURyb3Bkb3duU291cmNl''@;'; put 'put ''KHFlKSkscnR8fChydD1bXSksIm51bWVyaWMiPT09cWU/LnR5cGU/KHJ0PXRoaXMuaGVscGVyU2VydmljZS5jb252ZXJ0QXJyYXlWYWx1ZXMocnQsIm51bWJlciIpLGNlPXRoaXMuaGVscGVyU2VydmljZS5jb252ZXJ0QXJyYXlWYWx1ZXMoY2UsIm51bWJlciIpKToocnQ9dGhpcy5oZWxwZXJT''@;'; put 'put ''ZXJ2aWNlLmNvbnZlcnRBcnJheVZhbHVlcyhydCwic3RyaW5nIiksY2U9dGhpcy5oZWxwZXJTZXJ2aWNlLmNvbnZlcnRBcnJheVZhbHVlcyhjZSwic3RyaW5nIikpO2NvbnN0IHB0PVsuLi5uZXcgU2V0KFsuLi5ydCwuLi5jZV0pXTtpZihNLnNldENlbGxNZXRhKGQsYmUsInNvdXJjZSIscHQp''@;'; put 'put ''LHRoaXMuY3VycmVudEVkaXRSZWNvcmRWYWxpZGF0b3I/LnVwZGF0ZVJ1bGUoYmUse3NvdXJjZTpwdH0pLGYpe2lmKHYmJnYhPT1kKXJldHVybjtjb25zdCBkdD1yZS5maW5kKEp0PT4xPT09SnQuRk9SQ0VfRkxBRyk7ZHQmJnNldFRpbWVvdXQoKCk9PntNLnNldERhdGFBdENlbGwoZCxiZSwi''@;'; put 'put ''QyI9PT1kdC5ESVNQTEFZX1RZUEU/ZHQuUkFXX1ZBTFVFX0NIQVI6ZHQuUkFXX1ZBTFVFX05VTSwiZm9yY2VfY2VsbF92YWxpZGF0aW9uX3ZhbHVlIiksdGhpcy5jdXJyZW50RWRpdFJlY29yZEluZGV4PT09ZCYmKHRoaXMuZGF0YVNvdXJjZVt0aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXhd''@;'; put 'put ''W1pdPSJDIj09PWR0LkRJU1BMQVlfVFlQRT9kdC5SQVdfVkFMVUVfQ0hBUjpkdC5SQVdfVkFMVUVfTlVNKX0pfX19Z2V0RXh0ZW5kZWRWYWx1ZXNCeUNlbGxWYWx1ZShhLGQpe2NvbnN0IGY9dGhpcy5ob3RJbnN0YW5jZS5nZXREYXRhQXRDZWxsKGR8fGEucm93LGEuY29sKSx2PShhLnZhbHVl''@;'; put 'put ''cy5maW5kKHJlPT5yZVt0aGlzLmNlbGxWYWxpZGF0aW9uRmllbGRzLlJBV19WQUxVRV09PT1mKXx8W10pW3RoaXMuY2VsbFZhbGlkYXRpb25GaWVsZHMuRElTUExBWV9JTkRFWF0sTT1hLmV4dGVuZGVkX3ZhbHVlcz8uZmlsdGVyKHJlPT5yZVswXT09PXYpLEQ9dGhpcy5oZWxwZXJTZXJ2aWNl''@;'; put 'put ''LmRlZXBDbG9uZSh0aGlzLmV4dGVuZGVkQ2VsbFZhbGlkYXRpb25GaWVsZHMpLFo9W107Zm9yKGNvbnN0IHJlIG9mIE18fFtdKXtjb25zdCBjZT17fTtmb3IoY29uc3QgYmUgb2YgT2JqZWN0LmtleXMoRCkpY2VbYmVdPXJlW0RbYmVdXTtaLnB1c2goY2UpfXJldHVybiBafWNoZWNrU2F2ZSgp''@;'; put 'put ''e2lmKHRoaXMuZ2V0Um93c1N1Ym1pdHRpbmdDb3VudCgpLDA9PT10aGlzLnJvd3NDaGFuZ2VkLnJvd3NBZGRlZCYmMD09PXRoaXMucm93c0NoYW5nZWQucm93c1VwZGF0ZWQmJjA9PT10aGlzLnJvd3NDaGFuZ2VkLnJvd3NEZWxldGVkKXJldHVybiB0aGlzLmJhZEVkaXRUaXRsZT0iTm8gY2hh''@;'; put 'put ''bmdlcyB0byBzdWJtaXQiLHRoaXMuYmFkRWRpdENhdXNlPSJQbGVhc2UgbW9kaWZ5IHNvbWUgdmFsdWVzIGFuZCB0cnkgYWdhaW4uIix2b2lkKHRoaXMuYmFkRWRpdD0hMCk7Y29uc3QgYT10aGlzLmhvdEluc3RhbmNlO3RoaXMuZGF0YVNvdXJjZUJlZm9yZVN1Ym1pdD10aGlzLmhlbHBlclNl''@;'; put 'put ''cnZpY2UuZGVlcENsb25lKHRoaXMuZGF0YVNvdXJjZSk7Zm9yKGxldCBoPTA7aDx0aGlzLmRhdGFTb3VyY2UubGVuZ3RoO2grKylkZWxldGUgdGhpcy5kYXRhU291cmNlW2hdLm5vTGlua09wdGlvbjthLnVwZGF0ZVNldHRpbmdzKHtkYXRhOnRoaXMuZGF0YVNvdXJjZSxjb2xIZWFkZXJzOnRo''@;'; put 'put ''aXMuaGVhZGVyQ29sdW1ucyxjb2x1bW5zOnRoaXMuY2VsbFZhbGlkYXRpb24sbW9kaWZ5Q29sV2lkdGg6ZnVuY3Rpb24oaCxmKXtyZXR1cm4gaD41MDA/NTAwOmh9fSwhMSksdGhpcy5yZVNldENlbGxWYWxpZGF0aW9uVmFsdWVzKCksYy5jbnQ9MCxjLm5vblBrQ250PTA7Y29uc3QgZD1hLmdl''@;'; put 'put ''dERhdGEoKTtpZihkLmxlbmd0aD4xJiZhLmlzRW1wdHlSb3coZC5sZW5ndGgtMSkmJmEuYWx0ZXIoInJlbW92ZV9yb3ciLGQubGVuZ3RoLTEpLHRoaXMudmFsaWRhdGVQcmltYXJ5S2V5cygpLDAhPT10aGlzLmR1cGxpY2F0ZVBrSW5kZXhlcy5sZW5ndGgpcmV0dXJuIHRoaXMucGtEdXBzPSEw''@;'; put 'put ''LHRoaXMuc3VibWl0PSExLHZvaWQgdGhpcy5jYW5jZWxTdWJtaXQoKTt0aGlzLnBrRHVwcz0hMSxhLnZhbGlkYXRlUm93cyh0aGlzLm1vZGlmZWRSb3dzSW5kZXhlcywoKT0+e3RoaXMuY2hlY2tJbnZhbGlkKCk/dGhpcy5ldmVudFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgiVmFsaWRhdGlvbiBl''@;'; put 'put ''cnJvciIsIkludmFsaWQgVmFsdWVzIGFyZSBQcmVzZW50Iik6KHRoaXMuc3VibWl0PSEwLHRoaXMudmFsaWRhdGlvbkRvbmU9MSxzZXRUaW1lb3V0KCgpPT57Y29uc3QgaD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZm9ybUZpZWxkc184Iik7aCYmaC5mb2N1cygpfSwyMDApKX0pfXNhdmVU''@;'; put 'put ''YWJsZShhKXt2YXIgZD10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtpZihkLmhvdEluc3RhbmNlLmdldERhdGEoKSxhPShhPWEuZmlsdGVyKHY9PiEhZC5kYXRhTW9kaWZpZWQuZmluZChEPT57Zm9yKGNvbnN0IFogb2YgZC5oZWFkZXJQa3MpaWYoRFtaXSE9PXZbWl0pcmV0dXJuITE7cmV0''@;'; put 'put ''dXJuITB9KSkpLm1hcCh2PT57Y29uc3QgTT12Ll9fX19fREVMRVRFX19USElTX19SRUNPUkRfX19fXztyZXR1cm4gZGVsZXRlIHYuX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19fLHYuX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19fPU0sT2JqZWN0LmtleXModikubWFwKEQ9Pnsi''@;'; put 'put ''bnVtZXJpYyI9PT1kLmRjVmFsaWRhdG9yPy5nZXRSdWxlKEQpPy50eXBlJiYiLiI9PT12W0RdJiYodltEXT1udWxsKX0pLHZ9KSxkLmxvZ2dlclNlcnZpY2UubG9nKCJEYXRhIHN1Ym1pdHRlZCIsYSksZC5jaGVja0ludmFsaWQoKSlyZXR1cm4gZC5ldmVudFNlcnZpY2Uuc2hvd0luZm9Nb2Rh''@;'; put 'put ''bCgiVmFsaWRhdGlvbiBlcnJvciIsIkludmFsaWQgVmFsdWVzIGFyZSBQcmVzZW50IiksZC5jYW5jZWxTdWJtaXQoKSx2b2lkKGQuc3VibWl0PSExKTtpZihkLnZhbGlkYXRpb25Eb25lPTAsZC5zYXZlTG9hZGluZz0hMCxjLmNudDwxJiYwPT09ZC5kdXBsaWNhdGVQa0luZGV4ZXMubGVuZ3Ro''@;'; put 'put ''JiZjLm5vblBrQ250PDEpe2Quc2F2ZUxvYWRpbmc9ITAsZC5kaXNhYmxlU3VibWl0PSExLGQuc3VibWl0PSEwO2NvbnN0IHY9e0FDVElPTjoiTE9BRCJ9O2lmKGQubWVzc2FnZT1kLm1lc3NhZ2UucmVwbGFjZSgvXG4vZywiLiAiKSx2Lk1FU1NBR0U9ZC5tZXNzYWdlLHYuTElCRFM9ZC5saWJk''@;'; put 'put ''cyxkLmNvbHMpe2NvbnN0IE09YS5zbGljZSgwLGQubGljZW5jZVN0YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xpbWl0KTtpZih5aWVsZCBkLnNhc1N0b3JlU2VydmljZS51cGRhdGVUYWJsZSh2LE0sIlNBU0NvbnRyb2xUYWJsZSIsImVkaXRvcnMvc3RhZ2VkYXRhIixkLiRkYXRhRm9ybWF0cyku''@;'; put 'put ''dGhlbihaPT57aWYodHlwZW9mIFouYWRhcHRlclJlc3BvbnNlLnNhc3BhcmFtczwidSIpcmV0dXJuIGQucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9zdGFnZS8iK1ouYWRhcHRlclJlc3BvbnNlLnNhc3BhcmFtc1swXS5EU0lEKSwhMDtsZXQgcmU9IlN1Ym1pdCByZXF1ZXN0IGZhaWxlZCI7WiYm''@;'; put 'put ''KHJlKz1gXG4keyJzdHJpbmciPT10eXBlb2YgWj9aOkpTT04uc3RyaW5naWZ5KFopfWApLGQuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKCJlZGl0b3JzL3N0YWdlZGF0YSIscmUsbnVsbCwiU3VibWl0IGVycm9yIil9KS5jYXRjaChaPT57Y29uc29sZS5sb2coImVyciIsWiksYy5jbnQ9''@;'; put 'put ''MCxjLm5vblBrQ250PTAsZC5kaXNhYmxlU3VibWl0PSEwLGQuc3VibWl0PSExO2NvbnN0IHJlPSJzdHJpbmciPT10eXBlb2YgWi5hZGFwdGVyUmVzcG5zZT9aLmFkYXB0ZXJSZXNwbnNlOkpTT04uc3RyaW5naWZ5KFouYWRhcHRlclJlc3Buc2UpO3JldHVybiBkLmV2ZW50U2VydmljZS5zaG93''@;'; put 'put ''QWJvcnRNb2RhbCgiZWRpdG9ycy9zdGFnZWRhdGEiLGBTdWJtaXQgcmVxdWVzdCBmYWlsZWRcbiR7cmV9YCxudWxsLCJTdWJtaXQgZXJyb3IiKSwhMX0pKXJldHVybn19Yy5jbnQ+PTE/KGQucGtOdWxsPSEwLGQuc3VibWl0PSEwKTpkLnN1Ym1pdD0hMSxjLm5vblBrQ250Pj0xPyhkLm5vUGtO''@;'; put 'put ''dWxsPSEwLGQuc3VibWl0PSEwKTpkLnN1Ym1pdD0hMSxkLmNhbmNlbFN1Ym1pdCgpLGMuY250PTAsYy5ub25Qa0NudD0wLGQuZGlzYWJsZVN1Ym1pdD0hMH0pKCl9dmFsaWRhdG9yUnVsZVNvdXJjZShhKXtyZXR1cm4gdGhpcy5kY1ZhbGlkYXRvcj8uZ2V0UnVsZShhKX1jaGVja0ludmFsaWQo''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5ob3RJbnN0YW5jZUNvbXBMaXN0LmZpcnN0LmNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIi5odEludmFsaWQiKS5sZW5ndGg+MH1nb1RvRWRpdG9yKCl7dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiLyIpfWNsb3NlUmVjb3JkRWRpdChh''@;'; put 'put ''KXt0aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXg9LTEsdGhpcy5jdXJyZW50RWRpdFJlY29yZD12b2lkIDAsdGhpcy5jdXJyZW50RWRpdFJlY29yZFZhbGlkYXRvcj12b2lkIDAsIkFERCI9PT10aGlzLnJlY29yZEFjdGlvbiYmIWEmJih0aGlzLmRhdGFTb3VyY2U9dGhpcy5oZWxwZXJTZXJ2''@;'; put 'put ''aWNlLmRlZXBDbG9uZSh0aGlzLnByZXZEYXRhU291cmNlKSx0aGlzLmhvdEluc3RhbmNlLnVwZGF0ZVNldHRpbmdzKHtkYXRhOnRoaXMuZGF0YVNvdXJjZX0sITEpKX1jb25maXJtUmVjb3JkRWRpdChhPSEwKXtjb25zdCBkPXRoaXMuY3VycmVudEVkaXRSZWNvcmRJbmRleDthJiYodGhpcy5j''@;'; put 'put ''dXJyZW50RWRpdFJlY29yZEluZGV4PS0xKSx0aGlzLmNvbHVtbkhlYWRlci5tYXAoZj0+e2NvbnN0IHY9dGhpcy5jdXJyZW50RWRpdFJlY29yZFtmXSxNPSJudW0iPT09dGhpcy4kZGF0YUZvcm1hdHM/LnZhcnNbZl0/LnR5cGUsRD0oMCxnZy5pc1NwZWNpYWxNaXNzaW5nKSh2KTtNJiYhaXNO''@;'; put 'put ''YU4odikmJiFEJiYodGhpcy5jdXJyZW50RWRpdFJlY29yZFtmXT0xKnYpfSksdGhpcy5kYXRhU291cmNlW2RdPXRoaXMuY3VycmVudEVkaXRSZWNvcmQsdGhpcy5ob3RUYWJsZS5kYXRhW2RdPXRoaXMuY3VycmVudEVkaXRSZWNvcmQsdGhpcy5ob3RJbnN0YW5jZS51cGRhdGVTZXR0aW5ncyh7''@;'; put 'put ''ZGF0YTp0aGlzLmRhdGFTb3VyY2V9LCExKSxhJiYodGhpcy5jdXJyZW50RWRpdFJlY29yZD12b2lkIDApfW9uTmV4dFJlY29yZCgpe3RoaXMuY29uZmlybVJlY29yZEVkaXQoITEpLHRoaXMuY3VycmVudEVkaXRSZWNvcmRJbmRleD10aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXg+PXRoaXMu''@;'; put 'put ''ZGF0YVNvdXJjZS5sZW5ndGgtMT8wOnRoaXMuY3VycmVudEVkaXRSZWNvcmRJbmRleCsxLHRoaXMuZWRpdFJlY29yZChudWxsLHRoaXMuY3VycmVudEVkaXRSZWNvcmRJbmRleCl9b25QcmV2aW91c1JlY29yZCgpe3RoaXMuY29uZmlybVJlY29yZEVkaXQoITEpLHRoaXMuY3VycmVudEVkaXRS''@;'; put 'put ''ZWNvcmRJbmRleD10aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXg8PTA/dGhpcy5kYXRhU291cmNlLmxlbmd0aC0xOnRoaXMuY3VycmVudEVkaXRSZWNvcmRJbmRleC0xLHRoaXMuZWRpdFJlY29yZChudWxsLHRoaXMuY3VycmVudEVkaXRSZWNvcmRJbmRleCl9YWRkUmVjb3JkQnV0dG9uQ2xp''@;'; put 'put ''Y2soKXt0aGlzLnJlc3RyaWN0aW9ucy5yZXN0cmljdEFkZFJlY29yZD90aGlzLmV2ZW50U2VydmljZS5zaG93RGVtb0xpbWl0TW9kYWwoIkFkZCBSZWNvcmQiKTp0aGlzLmFkZEVkaXROZXdSZWNvcmQoKX1hZGRFZGl0TmV3UmVjb3JkKCl7dGhpcy5hZGRSZWNvcmQoKSxzZXRUaW1lb3V0KCgp''@;'; put 'put ''PT57dGhpcy5lZGl0UmVjb3JkKG51bGwsdGhpcy5kYXRhU291cmNlLmxlbmd0aC0xLCEwKX0sMWUzKX1hZGRSZWNvcmQoKXt0aGlzLmFkZFJvdygpfWVkaXRSZWNvcmQoYSxkLGgpe2lmKHRoaXMucmVzdHJpY3Rpb25zLnJlc3RyaWN0RWRpdFJlY29yZCl0aGlzLmV2ZW50U2VydmljZS5zaG93''@;'; put 'put ''RGVtb0xpbWl0TW9kYWwoIkVkaXQgUmVjb3JkIik7ZWxzZSBpZighKHZvaWQgMD09PWR8fGQ8MHx8dGhpcy5yZXN0cmljdGlvbnMucmVzdHJpY3RFZGl0UmVjb3JkKSl7aWYodGhpcy5yZWNvcmRBY3Rpb249aD8iQUREIjoiRURJVCIsdGhpcy5ob3RUYWJsZS5yZWFkT25seSYmdGhpcy5lZGl0''@;'; put 'put ''VGFibGUoITEsaCksdGhpcy5jdXJyZW50RWRpdFJlY29yZFZhbGlkYXRvcj10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKHRoaXMuZGNWYWxpZGF0b3IpLGgpdGhpcy5wcmV2RGF0YVNvdXJjZT10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKHRoaXMuZGF0YVNvdXJjZSksdGhpcy5w''@;'; put 'put ''cmV2RGF0YVNvdXJjZS5wb3AoKTtlbHNle2NvbnN0IGY9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZSh0aGlzLmhvdEluc3RhbmNlLmdldENlbGxNZXRhQXRSb3coZCkpO2Zvcihjb25zdCB2IG9mIGYpaWYodil7Y29uc3QgTT12LnByb3A/LnRvU3RyaW5nKCk7ZGVsZXRlIHYucHJvcCxk''@;'; put 'put ''ZWxldGUgdi5kYXRhLHRoaXMuY3VycmVudEVkaXRSZWNvcmRWYWxpZGF0b3I/LnVwZGF0ZVJ1bGUodi5jb2wsey4uLnYsZGF0YTpNfSl9fXRoaXMuY3VycmVudEVkaXRSZWNvcmRJbmRleD1kLHRoaXMuY3VycmVudEVkaXRSZWNvcmQ9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZSh0aGlz''@;'; put 'put ''LmRhdGFTb3VyY2VbZF0pfX10b2dnbGVIb3RQbHVnaW4oYSxkKXtjb25zdCBoPXRoaXMuaG90SW5zdGFuY2U7aC5iYXRjaCgoKT0+e2NvbnN0IGY9aC5nZXRQbHVnaW4oYSk7Zj8oc2V0VGltZW91dCgoKT0+e2Q/Zi5lbmFibGVQbHVnaW4oKTpmLmRpc2FibGVQbHVnaW4oKX0sMTAwKSxoLnJl''@;'; put 'put ''bmRlcigpKTpjb25zb2xlLndhcm4oIlRvZ2dsZSBIb3QgUGx1Z2luIGZhaWxlZCAtIFBsdWdpbiBuYW1lZDogIithKyIgLSBjb3VsZCBub3QgYmUgZm91bmQuIil9KX1keW5hbWljQ2VsbFZhbGlkYXRpb25EaXNhYmxlZChhLGQpe3JldHVybiEhdGhpcy5kaXNhYmxlZEJhc2ljRHluYW1pY0Nl''@;'; put 'put ''bGxWYWxpZGF0aW9uTWFwLmZpbmQoZj0+Zi5yb3c9PT1hJiZmLmNvbD09PWQmJiFmLmFjdGl2ZSl9ZHluYW1pY0NlbGxWYWxpZGF0aW9uKGEsZCl7aWYodGhpcy5keW5hbWljQ2VsbFZhbGlkYXRpb25EaXNhYmxlZChhLGQpKXJldHVybjtjb25zdCBoPXRoaXMuaG90SW5zdGFuY2U7aWYoaC5n''@;'; put 'put ''ZXRDZWxsTWV0YShhLGQpLnJlYWRPbmx5KXJldHVybjtjb25zdCB2PWguZ2V0RGF0YUF0Q2VsbChhLGQpLE09dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZSh0aGlzLmRhdGFTb3VyY2VbYV0pLEQ9T2JqZWN0LmtleXMoTSlbZF0sWj10aGlzLmhlbHBlclNlcnZpY2UuZGVsZXRlS2V5c0Fu''@;'; put 'put ''ZEhhc2goTSxbRCwibm9MaW5rT3B0aW9uIl0sITEpLHJlPXRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2UuZmluZEluZGV4KGNlPT5jZS5oYXNoPT09Wik7aWYocmU+LTEpe2xldCBjZT10aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlW3JlXS52YWx1ZXMubWFwKEJlPT5CZVt0aGlzLmNlbGxWYWxp''@;'; put 'put ''ZGF0aW9uRmllbGRzLlJBV19WQUxVRV0pO2NvbnN0IGJlPShoLmdldENlbGxNZXRhKGEsZCkuc291cmNlfHxbXSkubGVuZ3RoPDEsRWU9IiAiIT09djtoLmJhdGNoKCgpPT57Y29uc3QgQmU9aC5nZXRDZWxsTWV0YShhLGQpLHFlPXRoaXMuZGNWYWxpZGF0b3I/LmdldFJ1bGUoQmUuZGF0YXx8''@;'; put 'put ''IiIpO2xldCBydDtxZSYmKHJ0PXRoaXMuZGNWYWxpZGF0b3I/LmdldERxRHJvcGRvd25Tb3VyY2UocWUpKSxydHx8KHJ0PVtdKSwibnVtZXJpYyI9PT1xZT8udHlwZT8ocnQ9dGhpcy5oZWxwZXJTZXJ2aWNlLmNvbnZlcnRBcnJheVZhbHVlcyhydCwibnVtYmVyIiksY2U9dGhpcy5oZWxwZXJT''@;'; put 'put ''ZXJ2aWNlLmNvbnZlcnRBcnJheVZhbHVlcyhjZSwibnVtYmVyIikpOihydD10aGlzLmhlbHBlclNlcnZpY2UuY29udmVydEFycmF5VmFsdWVzKHJ0LCJzdHJpbmciKSxjZT10aGlzLmhlbHBlclNlcnZpY2UuY29udmVydEFycmF5VmFsdWVzKGNlLCJzdHJpbmciKSk7Y29uc3QgcHQ9Wy4uLm5l''@;'; put 'put ''dyBTZXQoWy4uLnJ0LC4uLmNlXSldO2lmKGguc2V0Q2VsbE1ldGEoYSxkLCJzb3VyY2UiLHB0KSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkVmFsaWRhdG9yPy51cGRhdGVSdWxlKGQse3NvdXJjZTpwdH0pLHRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2VbcmVdLnZhbHVlcy5sZW5ndGg+MCl7Y29u''@;'; put 'put ''c3QgZHQ9dGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZVtyZV0uc3RyaWN0O2guc2V0Q2VsbE1ldGEoYSxkLCJyZW5kZXJlciIsImF1dG9jb21wbGV0ZSIpLGguc2V0Q2VsbE1ldGEoYSxkLCJlZGl0b3IiLCJhdXRvY29tcGxldGUuY3VzdG9tIiksaC5zZXRDZWxsTWV0YShhLGQsInN0cmljdCIs''@;'; put 'put ''ZHQpLGguc2V0Q2VsbE1ldGEoYSxkLCJmaWx0ZXIiLCExKSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkVmFsaWRhdG9yPy51cGRhdGVSdWxlKGQse3JlbmRlcmVyOiJhdXRvY29tcGxldGUiLGVkaXRvcjoiYXV0b2NvbXBsZXRlLmN1c3RvbSIsc3RyaWN0OmR0LGZpbHRlcjohMX0pfXRoaXMucmVT''@;'; put 'put ''ZXRFeHRlbmRlZENlbGxWYWxpZGF0aW9uVmFsdWVzKHRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2VbcmVdLGEsYmUmJkVlKSxoLnJlbmRlcigpfSl9aWYocmU8MCl7Y29uc3QgY2U9e1NBU0NvbnRyb2xUYWJsZTpbe2xpYmRzOnRoaXMubGliZHMsdmFyaWFibGVfbm06RH1dLHNvdXJjZV9yb3c6''@;'; put 'put ''W01dfSxiZT10aGlzLmRjVmFsaWRhdG9yPy5nZXREcURldGFpbHMoRCkuZmluZChFZT0+IlNPRlRTRUxFQ1RfSE9PSyI9PT1FZS5SVUxFX1RZUEV8fCJIQVJEU0VMRUNUX0hPT0siPT09RWUuUlVMRV9UWVBFKTtiZSYmKHRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2UucHVzaCh7cm93OmEsY29s''@;'; put 'put ''OmQsc3RyaWN0OiJIQVJEU0VMRUNUX0hPT0siPT09YmUuUlVMRV9UWVBFLHZhbHVlczpbXSxoYXNoOlosY291bnQ6dGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZS5sZW5ndGgrMX0pLGguc2V0Q2VsbE1ldGEoYSxkLCJyZW5kZXJlciIsU210KSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkTG9hZGlu''@;'; put 'put ''Z3MucHVzaChkKSxoLnJlbmRlcigpLHRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJlZGl0b3JzL2dldGR5bmFtaWNjb2x2YWxzIixjZSx2b2lkIDAse3N1cHByZXNzU3VjY2Vzc0Fib3J0TW9kYWw6ITAsc3VwcHJlc3NFcnJvckFib3J0TW9kYWw6ITB9KS50aGVuKEVlPT57aWYoRWUuYWRhcHRl''@;'; put 'put ''clJlc3BvbnNlLmR5bmFtaWNfdmFsdWVzLm1hcChxZT0+cWVbdGhpcy5jZWxsVmFsaWRhdGlvbkZpZWxkcy5SQVdfVkFMVUVdKS5sZW5ndGg+MCl7Y29uc3QgcWU9dGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZS5maW5kSW5kZXgocnQ9PnJ0Lmhhc2g9PT1aKTtxZT4tMSYmKHRoaXMuY2VsbFZh''@;'; put 'put ''bGlkYXRpb25Tb3VyY2VbcWVdPXsuLi50aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlW3FlXSxyb3c6YSxjb2w6ZCx2YWx1ZXM6RWUuYWRhcHRlclJlc3BvbnNlLmR5bmFtaWNfdmFsdWVzLGV4dGVuZGVkX3ZhbHVlczpFZS5hZGFwdGVyUmVzcG9uc2UuZHluYW1pY19leHRlbmRlZF92YWx1ZXN9''@;'; put 'put ''KSxoLnNldENlbGxNZXRhKGEsZCwicmVuZGVyZXIiLFllZSksdGhpcy5jdXJyZW50RWRpdFJlY29yZExvYWRpbmdzLnNwbGljZSh0aGlzLmN1cnJlbnRFZGl0UmVjb3JkTG9hZGluZ3MuaW5kZXhPZihkKSwxKSxoLmRlc2VsZWN0Q2VsbCgpLGgucmVuZGVyKCksaC5iYXRjaCgoKT0+e3NldFRp''@;'; put 'put ''bWVvdXQoKCk9Pnt0aGlzLnJlU2V0Q2VsbFZhbGlkYXRpb25WYWx1ZXMoITAsYSksaC5yZW5kZXIoKSxoLnZhbGlkYXRlUm93cyhbYV0pfSwxMDApfSl9aWYoaC5zZXRDZWxsTWV0YShhLGQsInJlbmRlcmVyIixZZWUpLHRoaXMuY3VycmVudEVkaXRSZWNvcmRMb2FkaW5ncy5zcGxpY2UodGhp''@;'; put 'put ''cy5jdXJyZW50RWRpdFJlY29yZExvYWRpbmdzLmluZGV4T2YoZCksMSksaC5kZXNlbGVjdENlbGwoKSxoLnJlbmRlcigpLHRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2UubGVuZ3RoPnRoaXMudmFsaWRhdGlvblRhYmxlTGltaXQpe2NvbnN0IHFlPXRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2Uu''@;'; put 'put ''cmVkdWNlKChwdCxkdCk9PnB0LmNvdW50PGR0LmNvdW50P3B0OmR0KSxydD10aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlLmluZGV4T2YocWUpO3RoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2Uuc3BsaWNlKHJ0LDEpfX0pLmNhdGNoKEVlPT57Y29uc3QgQmU9dGhpcy5jZWxsVmFsaWRhdGlvblNv''@;'; put 'put ''dXJjZS5maW5kSW5kZXgocWU9PnFlLmhhc2g9PT1aKTt0aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlLnNwbGljZShCZSwxKSxoLmJhdGNoKCgpPT57aC5zZXRDZWxsTWV0YShhLGQsInJlbmRlcmVyIixDbXQpLGgucmVuZGVyKCl9KSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkTG9hZGluZ3Muc3Bs''@;'; put 'put ''aWNlKHRoaXMuY3VycmVudEVkaXRSZWNvcmRMb2FkaW5ncy5pbmRleE9mKGQpLDEpLHRoaXMuY3VycmVudEVkaXRSZWNvcmRFcnJvcnMucHVzaChkKSxzZXRUaW1lb3V0KCgpPT57aC5zZXRDZWxsTWV0YShhLGQsInJlbmRlcmVyIixZZWUpLGgucmVuZGVyKCksdGhpcy5jdXJyZW50RWRpdFJl''@;'; put 'put ''Y29yZEVycm9ycy5zcGxpY2UodGhpcy5jdXJyZW50RWRpdFJlY29yZEVycm9ycy5pbmRleE9mKGQpLDEpfSwzZTMpLHRoaXMucmVTZXRDZWxsVmFsaWRhdGlvblZhbHVlcygpLHRoaXMubG9nZ2VyU2VydmljZS5sb2coImdldGR5bmFtaWNjb2x2YWxzIGVycm9yOiIsRWUpfSkpfX1jaGVja0Vt''@;'; put 'put ''cHR5Um93V2hlbkZpbHRlcigpe3RoaXMuemVyb0ZpbHRlclJvd3M9ITEsdHlwZW9mIHRoaXMuZmlsdGVyX3BrPCJ1IiYmMT09PXRoaXMuaG90VGFibGUuZGF0YS5sZW5ndGgmJltudWxsLCIiXS5pbmNsdWRlcyh0aGlzLmhvdFRhYmxlLmRhdGFbMF1bdGhpcy5oZWFkZXJQa3NbMF1dKSYmKHRo''@;'; put 'put ''aXMuemVyb0ZpbHRlclJvd3M9ITApfW9uUmVjb3JkSW5wdXRGb2N1cyhhKXt0aGlzLmR5bmFtaWNDZWxsVmFsaWRhdGlvbih0aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXgsYS5jb2xOYW1lKX1leGVjdXRlRHluYW1pY0NlbGxWYWxpZGF0aW9uSWZBcHBsaWNhYmxlKGEsZCxoKXtjb25zdCBm''@;'; put 'put ''PXRoaXMuaGVscGVyU2VydmljZS5kZWxldGVLZXlzQW5kSGFzaCh0aGlzLmRhdGFTb3VyY2VbaF0sW2EsIm5vTGlua09wdGlvbiJdKSx2PXRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2UuZmluZChNPT5NLmhhc2g9PT1mJiZkPT09TS5jb2wpO2lmKHYmJnYuZXh0ZW5kZWRfdmFsdWVzJiZ2LmV4''@;'; put 'put ''dGVuZGVkX3ZhbHVlcy5sZW5ndGg+MCl7Y29uc3QgTT10aGlzLmdldEV4dGVuZGVkVmFsdWVzQnlDZWxsVmFsdWUodixoKTt0aGlzLnNldEV4dGVuZGVkVmFsdWVzVG9DZWxscyh2LGgsTSwhMCl9fWRhdGFzZXRJbmZvTW9kYWxSb3dDbGlja2VkKGEpe3ZvaWQgMCE9PWEuTE9BRF9SRUYmJnRo''@;'; put 'put ''aXMucm91dGVyLm5hdmlnYXRlKFtgL3N0YWdlLyR7YS5MT0FEX1JFRn1gXSl9dmlld2JveE1hbmFnZXIoKXt0aGlzLnZpZXdib3hlcz0hMH1nZXQgdG90YWxSb3dzQ2hhbmdlZCgpe3JldHVybiB0aGlzLnJvd3NDaGFuZ2VkLnJvd3NVcGRhdGVkK3RoaXMucm93c0NoYW5nZWQucm93c0RlbGV0''@;'; put 'put ''ZWQrdGhpcy5yb3dzQ2hhbmdlZC5yb3dzQWRkZWR9c2V0Q2VsbEZpbHRlcihhKXtjb25zdCBkPXRoaXMuaG90SW5zdGFuY2UuZ2V0U2VsZWN0ZWQoKSxoPWQmJmRbMF07aWYoaCl7Y29uc3QgZj1oWzBdLE09aFsxXTtpZihmPT09aFsyXSYmTT09PWhbM10pe2NvbnN0IFo9dGhpcy5ob3RJbnN0''@;'; put 'put ''YW5jZS5nZXRDZWxsTWV0YShmLE0pO1omJlouZmlsdGVyPT09IWEmJnRoaXMuaG90SW5zdGFuY2Uuc2V0Q2VsbE1ldGEoZixNLCJmaWx0ZXIiLGEpfX19bmdPbkluaXQoKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXthLmxpY2VuY2VTZXJ2aWNlLmhvdF9saWNlbnNlX2tleS5z''@;'; put 'put ''dWJzY3JpYmUoaD0+e2EuaG90VGFibGUubGljZW5zZUtleT1ofSksYS5fcXVlcnk9YS5zYXNTdG9yZVNlcnZpY2UucXVlcnkuc3Vic2NyaWJlKGg9PntoLmxpYmRzPT09YS5saWJkcyYmKGEud2hlcmVTdHJpbmc9aC5zdHJpbmcsYS5jbGF1c2VzPWgub2JqKX0pO2NvbnN0IGQ9e307dHlwZW9m''@;'; put 'put ''IGEucm91dGUuc25hcHNob3QucGFyYW1zLmxpYk1lbTwidSImJihhLmxpYmRzPWEucm91dGUuc25hcHNob3QucGFyYW1zLmxpYk1lbSxhLmZpbHRlcl9waz1hLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5maWx0ZXJJZCwiZWRpdC1yZWNvcmQiPT09YS5yb3V0ZS5zbmFwc2hvdC51cmxbMF0ucGF0''@;'; put 'put ''aCYmKGEucmVjb3JkQWN0aW9uPXR5cGVvZiBhLmZpbHRlcl9wazwidSI/IkVESVQiOiJBREQiKSxkLkxJQkRTPWEubGliZHMsdHlwZW9mIGEuZmlsdGVyX3BrPCJ1IiYmKGQuRklMVEVSX1JLPXBhcnNlSW50KGEuZmlsdGVyX3BrKSksZC5PVVRERVNUPSJXRUIiLGEubGliZHMmJihLbi5lZGl0''@;'; put 'put ''b3IubGlicmFyeT1hLmxpYmRzLnNwbGl0KCIuIilbMF0sS24uZWRpdG9yLnRhYmxlPWEubGliZHMuc3BsaXQoIi4iKVsxXSkpLGEubGliZHMmJihhLmdldGRhdGFFcnJvcj0hMSx5aWVsZCBhLnNhc1N0b3JlU2VydmljZS5jYWxsU2VydmljZShkLCJTQVNDb250cm9sVGFibGUiLCJlZGl0b3Jz''@;'; put 'put ''L2dldGRhdGEiLGEubGliZHMpLnRoZW4oaD0+e2EuaW5pdFNldHVwKGgpfSkuY2F0Y2goaD0+e2EuZ2V0ZGF0YUVycm9yPSEwLGEudGFibGVUcnVlPSEwfSkpfSkoKX1uZ0FmdGVyVmlld0luaXQoKXt9aW5pdFNldHVwKGEpe2lmKHRoaXMuaG90SW5zdGFuY2U9dGhpcy5ob3RSZWdpc3RlcmVy''@;'; put 'put ''LmdldEluc3RhbmNlKCJob3RJbnN0YW5jZSIpLHRoaXMuZ2V0ZGF0YUVycm9yfHwhYXx8IWEuZGF0YSlyZXR1cm47dGhpcy5jb2xzPWEuZGF0YS5jb2xzLHRoaXMuZHNtZXRhPWEuZGF0YS5kc21ldGEsdGhpcy52ZXJzaW9ucz1hLmRhdGEudmVyc2lvbnN8fFtdO2NvbnN0IGQ9dGhpcy5kc21l''@;'; put 'put ''dGEuZmluZChaPT4iTk9URVMiPT09Wi5OQU1FKSxoPXRoaXMuZHNtZXRhLmZpbmQoWj0+IkREX0xPTkdERVNDIj09PVouTkFNRSksZj10aGlzLmRzbWV0YS5maW5kKFo9PiJERF9TSE9SVERFU0MiPT09Wi5OQU1FKTt0aGlzLmRzTm90ZT1kJiZkLlZBTFVFP2QuVkFMVUU6aCYmaC5WQUxVRT9o''@;'; put 'put ''LlZBTFVFOmYmJmYuVkFMVUU/Zi5WQUxVRToiIjtjb25zdCB2PXRoaXMuaG90SW5zdGFuY2UsTT1hLmRhdGEuYXBwcm92ZXJzO3RoaXMuY29scyYmKHRoaXMuaGVhZGVyQXJyYXk9KGM9Pntjb25zdCBsPVtdO2ZvcihsZXQgYSBvZiBjKSJfX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX18i''@;'; put 'put ''IT09YS5OQU1FJiZsLnB1c2goYS5OQU1FKTtyZXR1cm4gbH0pKHRoaXMuY29scykpLE0uZm9yRWFjaChaPT57dGhpcy5hcHByb3ZlcnMucHVzaChaLlBFUlNPTk5BTUUpfSksdGhpcy50YWJsZVRydWU9ITAsdGhpcy5saWJkcz1hLmxpYmRzLHRoaXMuaG90VGFibGUuZGF0YT1hLmRhdGEuc2Fz''@;'; put 'put ''ZGF0YSx0aGlzLmhlYWRlckNvbHVtbnM9YS5kYXRhLnNhc3BhcmFtc1swXS5DT0xIRUFERVJTLnNwbGl0KCIsIiksdGhpcy5oZWFkZXJQa3M9YS5kYXRhLnNhc3BhcmFtc1swXS5QSy5zcGxpdCgiICIpLHRoaXMuY29sdW1uTGV2ZWxTZWN1cml0eUZsYWc9ISFhLmRhdGEuc2FzcGFyYW1zWzBd''@;'; put 'put ''LkNMU19GTEFHLHRoaXMuY29sdW1uTGV2ZWxTZWN1cml0eUZsYWcmJnRoaXMuc2V0UmVzdHJpY3Rpb25zKHtyZXN0cmljdEFkZFJvdzohMCxyZW1vdmVFZGl0UmVjb3JkQnV0dG9uOiEwLHJlbW92ZUFkZFJlY29yZEJ1dHRvbjohMH0pLHRoaXMuY2hlY2tFbXB0eVJvd1doZW5GaWx0ZXIoKSwt''@;'; put 'put ''MSE9PXRoaXMuaGVhZGVyQ29sdW1ucy5pbmRleE9mKCJfX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX18iKSYmKHRoaXMuaGVhZGVyQ29sdW1uc1t0aGlzLmhlYWRlckNvbHVtbnMuaW5kZXhPZigiX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19fIildPSJEZWxldGU/IiksdGhpcy5o''@;'; put 'put ''ZWFkZXJBcnJheT10aGlzLmhlYWRlckNvbHVtbnMuc2xpY2UoMSksIiIhPT1hLmRhdGEuc2FzcGFyYW1zWzBdLkRUVkFSUyYmKHRoaXMuZGF0ZUhlYWRlcnM9YS5kYXRhLnNhc3BhcmFtc1swXS5EVFZBUlMuc3BsaXQoIiAiKSksIiIhPT1hLmRhdGEuc2FzcGFyYW1zWzBdLlRNVkFSUyYmKHRo''@;'; put 'put ''aXMudGltZUhlYWRlcnM9YS5kYXRhLnNhc3BhcmFtc1swXS5UTVZBUlMuc3BsaXQoIiAiKSksIiIhPT1hLmRhdGEuc2FzcGFyYW1zWzBdLkRUVE1WQVJTJiYodGhpcy5kYXRlVGltZUhlYWRlcnM9YS5kYXRhLnNhc3BhcmFtc1swXS5EVFRNVkFSUy5zcGxpdCgiICIpKSxhLmRhdGEueGxfcnVs''@;'; put 'put ''ZXMubGVuZ3RoPjAmJih0aGlzLnhsUnVsZXM9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShhLmRhdGEueGxfcnVsZXMpKSx0aGlzLmRjVmFsaWRhdG9yPW5ldyBDNmUoYS5kYXRhLnNhc3BhcmFtc1swXSxhLmRhdGEuJHNhc2RhdGEsdGhpcy5jb2xzLGEuZGF0YS5kcXJ1bGVzLGEuZGF0''@;'; put 'put ''YS5kcWRhdGEpLHRoaXMuY2VsbFZhbGlkYXRpb249dGhpcy5kY1ZhbGlkYXRvci5nZXRSdWxlcygpLHRoaXMuZGF0YVNvdXJjZT1hLmRhdGEuc2FzZGF0YSx0aGlzLiRkYXRhRm9ybWF0cz1hLmRhdGEuJHNhc2RhdGE7Zm9yKGxldCBaPTA7Wjx0aGlzLmhlYWRlckNvbHVtbnMubGVuZ3RoO1or''@;'; put 'put ''Kyl0aGlzLmhvdERhdGFTY2hlbWFbdGhpcy5jZWxsVmFsaWRhdGlvbltaXS5kYXRhXT1fbXQodGhpcy5jZWxsVmFsaWRhdGlvbltaXS50eXBlLHRoaXMuY2VsbFZhbGlkYXRpb25bWl0pO3RoaXMuY2hlY2tSb3dMaW1pdCgpLHYudXBkYXRlU2V0dGluZ3Moe2RhdGE6dGhpcy5kYXRhU291cmNl''@;'; put 'put ''LGNvbEhlYWRlcnM6dGhpcy5oZWFkZXJDb2x1bW5zLGNvbHVtbnM6dGhpcy5jZWxsVmFsaWRhdGlvbixoZWlnaHQ6dGhpcy5ob3RUYWJsZS5oZWlnaHQsZm9ybXVsYXM6dGhpcy5ob3RUYWJsZS5mb3JtdWxhcyxzdHJldGNoSDoiYWxsIixyZWFkT25seTp0aGlzLmhvdFRhYmxlLnJlYWRPbmx5''@;'; put 'put ''LGhpZGRlbkNvbHVtbnM6e2luZGljYXRvcnM6ITAsY29sdW1uczp0aGlzLmRjVmFsaWRhdG9yLmdldEhpZGRlbkNvbHVtbnMoKX0sbW9kaWZ5Q29sV2lkdGg6ZnVuY3Rpb24oWixyZSl7cmV0dXJuIDA9PT1yZT82MDpaPjUwMD81MDA6Wn0sY29weVBhc3RlOnRoaXMuaG90VGFibGUuY29weVBh''@;'; put 'put ''c3RlLG1hbnVhbENvbHVtbkZyZWV6ZTohMSxtdWx0aUNvbHVtblNvcnRpbmc6ITAsbWFudWFsQ29sdW1uUmVzaXplOiEwLGZpbHRlcnM6ITEsbWFudWFsUm93UmVzaXplOiEwLHZpZXdwb3J0Um93UmVuZGVyaW5nT2Zmc2V0OjUwLHJvd0hlYWRlcnM6Wj0+IiAiLHJvd0hlYWRlcldpZHRoOjE1''@;'; put 'put ''LHJvd0hlaWdodHM6MjQsbWF4Um93czp0aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS5lZGl0b3Jfcm93c19hbGxvd2VkfHwxLzAsaW52YWxpZENlbGxDbGFzc05hbWU6Imh0SW52YWxpZCIsZHJvcGRvd25NZW51OntpdGVtczp7bWFrZV9yZWFkX29ubHk6e25hbWU6Im1ha2VfcmVhZF9vbmx5In0s''@;'; put 'put ''YWxpZ25tZW50OntuYW1lOiJhbGlnbm1lbnQifSxzcDE6e25hbWU6Ii0tLS0tLS0tLSJ9LGluZm86e25hbWU6InRlc3QgaW5mbyIscmVuZGVyZXI6KFoscmUsY2UsYmUsRWUsQmUpPT57Y29uc3QgcWU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpO2xldCBydCxwdD0iTm8gaW5mbyBm''@;'; put 'put ''b3VuZCI7aWYodGhpcy5ob3RJbnN0YW5jZSl7Y29uc3QgZHQ9dGhpcy5ob3RJbnN0YW5jZS5nZXRTZWxlY3RlZCgpfHxbXSxKdD1kdD9kdFswXVsxXTotMSx2bj10aGlzLmhvdEluc3RhbmNlPy5jb2xUb1Byb3AoSnQpO3J0PXRoaXMuJGRhdGFGb3JtYXRzPy52YXJzW3ZuXSxydCYmKHB0PWBM''@;'; put 'put ''QUJFTDogJHtydD8ubGFiZWx9PGJyPlRZUEU6ICR7cnQ/LnR5cGV9PGJyPkxFTkdUSDogJHtydD8ubGVuZ3RofTxicj5GT1JNQVQ6ICR7cnQ/LmZvcm1hdH1gKX1yZXR1cm4gcWUuaW5uZXJIVE1MPXB0LHFlfX19fSxkYXRhU2NoZW1hOnRoaXMuaG90RGF0YVNjaGVtYSxjb250ZXh0TWVudTp0''@;'; put 'put ''aGlzLmhvdFRhYmxlLnNldHRpbmdzLmNvbnRleHRNZW51LGN1cnJlbnRIZWFkZXJDbGFzc05hbWU6ImN1c3RvbUgiLGFmdGVyR2V0Q29sSGVhZGVyOihaLHJlKT0+e2NvbnN0IGNlPXRoaXMuY29sdW1uSGVhZGVyW1pdLGJlPWNlJiZ0aGlzLmlzQ29sUGsoY2UpLEVlPWNlJiZ0aGlzLmlzUmVh''@;'; put 'put ''ZG9ubHlDb2woY2UpO2JlJiZyZS5jbGFzc0xpc3QuYWRkKCJwcmltYXJ5S2V5SGVhZGVyU3R5bGUiKSxFZSYmIWJlJiZyZS5jbGFzc0xpc3QuYWRkKCJyZWFkb25seUNlbGwiKSwwPT09WiYmcmUuY2xhc3NMaXN0LmFkZCgiZmlyc3RDb2x1bW5IZWFkZXJTdHlsZSIpLHJlLmNsYXNzTGlzdC5h''@;'; put 'put ''ZGQoS24uaGFuZHNvbnRhYmxlLmRhcmtUYWJsZUhlYWRlckNsYXNzKX0sYWZ0ZXJHZXRDZWxsTWV0YTooWixyZSxjZSk9PntyZSYmdGhpcy5pc1JlYWRvbmx5Q29sKHJlKSYmKGNlLmNsYXNzTmFtZT0icmVhZG9ubHlDZWxsIil9fSwhMSksdGhpcy5ob3RUYWJsZS5oaWRkZW49ITEsdGhpcy50''@;'; put 'put ''b2dnbGVIb3RQbHVnaW4oImNvbnRleHRNZW51IiwhMSksdGhpcy5xdWVyeVRleHQ9YS5kYXRhLnNhc3BhcmFtc1swXS5GSUxURVJfVEVYVCx0aGlzLmNvbHVtbkhlYWRlcj1hLmRhdGEuc2FzcGFyYW1zWzBdLkNPTEhFQURFUlMuc3BsaXQoIiwiKSx0aGlzLmNvbHVtbkhlYWRlclswXT0iRGVs''@;'; put 'put ''ZXRlPyIsdGhpcy5yZWFkT25seUZpZWxkcz1hLmRhdGEuc2FzcGFyYW1zWzBdLlBLQ05UO2NvbnN0IEQ9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhvdEluc3RhbmNlIik7RCYmRC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLFo9Pnt0aGlzLnVwbG9hZFByZXZpZXd8fHRoaXMuaG90''@;'; put 'put ''Q2xpY2tlZCgpLHNldFRpbWVvdXQoKCk9Pntjb25zdCByZT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIuZGVidWctc3dpdGNoLWl0ZW0iKXx8dm9pZCAwO3JlJiZyZS5jbGljaygpfSwxMDApfSksdi5hZGRIb29rKCJhZnRlclNlbGVjdGlvbiIsKFoscmUsY2UsYmUsRWUsQmUpPT57Wj09PWNl''@;'; put 'put ''JiZyZT09PWJlJiYhMT09PXRoaXMuaG90VGFibGUucmVhZE9ubHkmJnRoaXMuZHluYW1pY0NlbGxWYWxpZGF0aW9uKFoscmUpfSksdi5hZGRIb29rKCJhZnRlckJlZ2luRWRpdGluZyIsKCk9Pnt0aGlzLnNldENlbGxGaWx0ZXIoITEpfSksdi5hZGRIb29rKCJiZWZvcmVLZXlEb3duIiwoKT0+''@;'; put 'put ''e3RoaXMuc2V0Q2VsbEZpbHRlcighMCl9KSx2LmFkZEhvb2soImFmdGVyQ2hhbmdlIiwoWixyZSk9PntpZigiZWRpdCI9PT1yZSl7Y29uc3QgY2U9dGhpcy5ob3RJbnN0YW5jZSxiZT1aWzBdWzBdLEVlPVpbMF1bMV0sQmU9Y2UucHJvcFRvQ29sKEVlKSxxZT1jZS5nZXRDZWxsTWV0YShiZSxC''@;'; put 'put ''ZSk7cWUmJiExPT09cWUuZmlsdGVyJiZjZS5zZXRDZWxsTWV0YShiZSxCZSwiZmlsdGVyIiwhMCksdGhpcy5leGVjdXRlRHluYW1pY0NlbGxWYWxpZGF0aW9uSWZBcHBsaWNhYmxlKEVlLEJlLGJlKX19KSx2LmFkZEhvb2soImFmdGVyUmVuZGVyIixaPT57dGhpcy5ldmVudFNlcnZpY2UuZGlz''@;'; put 'put ''cGF0Y2hFdmVudCgicmVzaXplIil9KSx2LmFkZEhvb2soImFmdGVyQ3JlYXRlUm93IiwoWixyZSk9PntpZihaPnRoaXMuZGF0YVNvdXJjZS5sZW5ndGgpe2NvbnN0IGNlPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi53dEhvbGRlciIpO3NldFRpbWVvdXQoKCk9PntjZSYmKGNlLnNjcm9sbFRv''@;'; put 'put ''cD1jZS5zY3JvbGxIZWlnaHQpfSl9fSksdi5hZGRIb29rKCJiZWZvcmVQYXN0ZSIsKFoscmUpPT57Y29uc3QgY2U9cmVbMF0uc3RhcnRDb2w7WlswXT1aWzBdLm1hcCgoYmUsRWUpPT57Y29uc3QgQmU9dGhpcy5jb2x1bW5IZWFkZXJbY2UrRWVdLHFlPSJudW0iPT09dGhpcy4kZGF0YUZvcm1h''@;'; put 'put ''dHM/LnZhcnNbQmVdPy50eXBlLHJ0PSgwLGdnLmlzU3BlY2lhbE1pc3NpbmcpKGJlKTtyZXR1cm4gcWUmJiFpc05hTihiZSkmJiFydCYmKGJlKj0xKSxiZX0pfSksdi5hZGRIb29rKCJhZnRlclJlbW92ZVJvdyIsKCk9Pnt0aGlzLmNoZWNrUm93TGltaXQoKX0pLHYuYWRkSG9vaygiYWZ0ZXJD''@;'; put 'put ''cmVhdGVSb3ciLCgpPT57dGhpcy5jaGVja1Jvd0xpbWl0KCl9KSx0aGlzLnVwbG9hZFVybD0ic2VydmljZXMvZWRpdG9ycy9sb2FkZmlsZSIsbnVsbCE9PXRoaXMucmVjb3JkQWN0aW9uJiYoIkFERCI9PT10aGlzLnJlY29yZEFjdGlvbj8odGhpcy5hZGRSZWNvcmQoKSx0aGlzLmVkaXRSZWNv''@;'; put 'put ''cmQobnVsbCx0aGlzLmRhdGFTb3VyY2UubGVuZ3RoLTEsITApKToxPT09dGhpcy5kYXRhU291cmNlLmxlbmd0aCYmdGhpcy5lZGl0UmVjb3JkKG51bGwsMCkpLGEuZGF0YS5xdWVyeS5sZW5ndGg+MCYmKCJob21lIj09PUtuLnJvb3RQYXJhbXx8ImVkaXRvciI9PT1Lbi5yb290UGFyYW0pJiYw''@;'; put 'put ''PT09S24uZWRpdG9yLmZpbHRlci5jbGF1c2VzLmxlbmd0aCYmKEtuLmVkaXRvci5maWx0ZXIucXVlcnk9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShhLmRhdGEucXVlcnkpLEtuLmVkaXRvci5maWx0ZXIubGliZHM9dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMubGliTWVtLHRoaXMu''@;'; put 'put ''c2FzU3RvcmVTZXJ2aWNlLmluaXRpYWxpemVHbG9iYWxGaWx0ZXJDbGF1c2UoImVkaXRvciIsdGhpcy5jb2xzKSksdi5yZW5kZXIoKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZSh1MSksR2UodmMpLEdlKFNkKSxHZShraCksR2UoU3UpLEdl''@;'; put 'put ''KExzKSxHZShDdSksR2UoR3MpLEdlKEVzKSxHZShZbSksR2UoQTZlKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtZWRpdG9yIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihkLGgpe2lmKDEmZCYmKHFhKHA3dCw3KSxxYShnN3QsNSkscWEobTd0LDUp''@;'; put 'put ''LHFhKHY3dCw1KSxxYShiN3QsNSkpLDImZCl7bGV0IGY7Q2koZj1TaSgpKSYmKGguaHQ9Zi5maXJzdCksQ2koZj1TaSgpKSYmKGgudXBsb2FkU3RhdGVyQ29tcExpc3Q9ZiksQ2koZj1TaSgpKSYmKGgucXVlcnlGaWx0ZXJDb21wTGlzdD1mKSxDaShmPVNpKCkpJiYoaC5ob3RJbnN0YW5jZUNv''@;'; put 'put ''bXBMaXN0PWYpLENpKGY9U2koKSkmJihoLmZpbGVVcGxvYWRJbnB1dENvbXBMaXN0PWYpfX0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjE3Nyx2YXJzOjc0LGNvbnN0czpbWyJodCIsIiJdLFsiaG90SW5zdGFuY2UiLCIiXSxbImZpbGVQYXNzd29yZElucHV0Iiwi''@;'; put 'put ''Il0sWyJmaWxlVXBsb2FkSW5wdXQiLCIiXSxbInVwbG9hZFN0YXRlciIsIiJdLFsicXVlcnlGaWx0ZXIiLCIiXSxbMSwiY29udGVudC1hcmVhIiwiZC1mbGV4IiwiY2xyLWZsZXgtY29sdW1uIl0sWyJhcHBGaWxlRHJvcCIsIiIsMSwicmVsYXRpdmUiLDMsImZpbGVPdmVyIiwiZmlsZURyb3Ai''@;'; put 'put ''LCJjbHJNb2RhbE9wZW5DaGFuZ2UiLCJ1cGxvYWRlciIsImNsck1vZGFsU2l6ZSIsImNsck1vZGFsU3RhdGljQmFja2Ryb3AiLCJjbHJNb2RhbENsb3NhYmxlIiwiY2xyTW9kYWxPcGVuIl0sWzEsIm1vZGFsLXRpdGxlIl0sWzEsIm1vZGFsLWJvZHkiXSxbMSwiZHJvcC1hcmVhIl0sWzEsImNs''@;'; put 'put ''ci1jb2wtbWQtMTIiXSxbMSwiY2xyLXJvdyIsImNhcmQtYmxvY2siLCJtdC0xNSIsImQtZmxleCIsImp1c3RpZnktY29udGVudC1iZXR3ZWVuIl0sWzEsImNsci1jb2wtbWQtYXV0byJdLFsxLCJlbmNvZGluZy1ibG9jayJdLFsiY2xySW5saW5lIiwiIiwxLCJtdC0wIl0sWyJ0eXBlIiwicmFk''@;'; put 'put ''aW8iLCJjbHJSYWRpbyIsIiIsInZhbHVlIiwiVVRGLTgiLCJuYW1lIiwiZW5jb2RpbmciLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIiwiZGlzYWJsZWQiXSxbInR5cGUiLCJyYWRpbyIsImNsclJhZGlvIiwiIiwidmFsdWUiLCJXTEFUSU4xIiwibmFtZSIsImVuY29kaW5nIiwzLCJuZ01v''@;'; put 'put ''ZGVsQ2hhbmdlIiwibmdNb2RlbCIsImRpc2FibGVkIl0sWyJjbGFzcyIsImNsci1jb2wtbWQtMyBmaWx0ZXJCdG4iLDQsIm5nSWYiXSxbImNsYXNzIiwiY2xyLWNvbC1tZC0zIGVkaXRCdG4iLDQsIm5nSWYiXSxbInR5cGUiLCJidXR0b24iLCJjbGFzcyIsImJ0biBidG4tcHJpbWFyeSBtci0w''@;'; put 'put ''IiwzLCJkaXNhYmxlZCIsImNsaWNrIiw0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xhc3MiLCJidG4gYnRuLXByaW1hcnkgbXItMCIsMywiY2xpY2siLDQsIm5nSWYiXSxbImNsYXNzIiwiZXhjZWwtcGFyc2luZyBjbHItY29sLW1kLTEyIiw0LCJuZ0lmIl0sWzEsIm1vZGFsLWZvb3Rl''@;'; put 'put ''ciJdLFszLCJjdXJyZW50UmVjb3JkIiwicmVjb3JkQWN0aW9uIiwibGliZHMiLCJxdWVyeUZpbHRlciIsImZpbHRlciIsInN1Ym1pdExvYWRpbmciLCJoZWFkZXJQa3MiLCJjZWxsVmFsaWRhdGlvbiIsImN1cnJlbnRSZWNvcmRJbmRleCIsImN1cnJlbnRSZWNvcmRMb2FkaW5ncyIsImN1cnJl''@;'; put 'put ''bnRSZWNvcmRFcnJvcnMiLCJjdXJyZW50UmVjb3JkVmFsaWRhdG9yIiwib25SZWNvcmRDaGFuZ2UiLCJvblJlY29yZElucHV0Rm9jdXNlZCIsIm9uUmVjb3JkRWRpdENsb3NlIiwib25OZXh0UmVjb3JkIiwib25QcmV2aW91c1JlY29yZCIsNCwibmdJZiJdLFsxLCJjbHItZmxleC0xIl0sWyJj''@;'; put 'put ''bGFzcyIsInByb2dyZXNTdGF0aWMgcHJvZ3Jlc3MgbG9vcCIsNCwibmdJZiJdLFsiYXBwRHJhZ05kcm9wIiwiIiwxLCJjYXJkIiwiYm9yZGVyLTAiLCJib3gtc2hhZG93LW5vbmUtaSIsInBvc2l0aW9uLXJlbGF0aXZlIiwiaC0xMDAiLCJkLWZsZXgiLCJjbHItZmxleC1jb2x1bW4iLCJiYWNr''@;'; put 'put ''Z3JvdW5kLXRyYW5zcGFyZW50IiwzLCJmaWxlRHJhZ2dlZE92ZXIiXSxbMSwiY2FyZC1oZWFkZXIiLCJjbHItcm93IiwiYnV0dG9uQmFyIiwiaGVhZGVyQmFyIiwiY2xyLWZsZXgtbWQtcm93IiwiY2xyLWp1c3RpZnktY29udGVudC1jZW50ZXIiLCJjbHItanVzdGlmeS1jb250ZW50LWxnLWVu''@;'; put 'put ''ZCJdLFsiY2xhc3MiLCJjbHItY29sLTEyIGNsci1jb2wtbWQtMyBjbHItY29sLWxnLTQgYmFja0J0biIsNCwibmdJZiJdLFsxLCJjbHItY29sLTEyIiwiY2xyLWNvbC1tZC01IiwiY2xyLWNvbC1sZy00IiwiZC1mbGV4IiwiZmxleC1jb2x1bW4iLCJhbGlnbi1pdGVtcy1jZW50ZXIiXSxbImNs''@;'; put 'put ''YXNzIiwiZWRpdG9yLXRpdGxlIHRleHQtY2VudGVyIG10LTAiLDQsIm5nVmFyIl0sWyJjbGFzcyIsImNsci1jb2wtMTIgY2xyLWNvbC1tZC00IGNsci1jb2wtbGctNCBidG5DdHJsIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci1jb2wtbWQtMTIgaW5mb0JhciIsNCwibmdJZiJdLFsxLCJjYXJk''@;'; put 'put ''LWJsb2NrIiwicC0wIiwiY2xyLWZsZXgtMSIsImJhY2tncm91bmQtdHJhbnNwYXJlbnQiLDMsIm5nQ2xhc3MiXSxbImNsYXNzIiwiY2FyZC10ZXh0Iiw0LCJuZ0lmIl0sWzEsImNhcmQtdGV4dCIsImhvdEVkaXRvciIsImgtMTAwIiwiZC1mbGV4IiwiY2xyLWZsZXgtY29sdW1uIiwiYmFja2dy''@;'; put 'put ''b3VuZC10cmFuc3BhcmVudCJdLFsxLCJob3Qtd3JhcHBlciIsImNsci1mbGV4LTEiXSxbImhvdElkIiwiaG90SW5zdGFuY2UiLCJpZCIsImhvdFRhYmxlIiwiY2xhc3NOYW1lIiwiaHREYXJrIiwxLCJlZGl0LWhvdCIsMywibGljZW5zZUtleSJdLFs0LCJuZ0lmIl0sWyJjbGFzcyIsIm10LTIt''@;'; put 'put ''aSB3LTEwMCB0ZXh0LWNlbnRlciIsNCwibmdJZiJdLFsiY2xhc3MiLCJtb2RhbCIsNCwibmdJZiJdLFszLCJjbHJNb2RhbE9wZW5DaGFuZ2UiLCJjbHJNb2RhbE9wZW4iXSxbMSwibS0wIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tcHJpbWFyeSIsMywiY2xpY2si''@;'; put 'put ''XSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1wcmltYXJ5IiwzLCJjbGljayJdLFsxLCJkdXBsaWNhdGUta2V5cy1tb2RhbCIsMywiY2xyTW9kYWxPcGVuQ2hhbmdlIiwiY2xyTW9kYWxPcGVuIl0sWyJjbGFzcyIsImQtYmxvY2siLDQsIm5nRm9yIiwibmdGb3JPZiJdLFs0LCJuZ0Zv''@;'; put 'put ''ciIsIm5nRm9yT2YiXSxbImNsYXNzIiwibW9kYWwgei1pbmRleC1oaWdoZXN0Iiw0LCJuZ0lmIl0sWzEsImZpbHRlci1tb2RhbCIsMywiY2xyTW9kYWxPcGVuQ2hhbmdlIiwiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxTaXplIiwiY2xyTW9kYWxDbG9zYWJsZSJdLFsxLCJtb2RhbC10aXRsZSIs''@;'; put 'put ''ImNlbnRlciIsInRleHQtY2VudGVyIiwiY29sb3ItZGFya2VyLWdyYXkiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1saW5rIiwzLCJjbGljayJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLW91dGxpbmUiLDMsImNsaWNrIl0sWyJ0eXBl''@;'; put 'put ''IiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tc3VjY2Vzcy1vdXRsaW5lIiwzLCJjbGljayIsImNsckxvYWRpbmciXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1vdXRsaW5lIiwzLCJjbGljayJdLFszLCJjbHJNb2RhbE9wZW5DaGFuZ2UiLCJjbHJNb2RhbE9wZW4iLCJj''@;'; put 'put ''bHJNb2RhbFNpemUiLCJjbHJNb2RhbENsb3NhYmxlIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tc3VjY2Vzcy1vdXRsaW5lIiwzLCJjbGljayJdLFsxLCJtb2RhbC1ib2R5IiwiZC1mbGV4IiwiY2xyLWp1c3RpZnktY29udGVudC1jZW50ZXIiXSxbImRhdGEtbHBp''@;'; put 'put ''Z25vcmUiLCJ0cnVlIiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwiaWQiLCJmaWxlUGFzc3dvcmRJbnB1dCIsInR5cGUiLCJ0ZXh0IiwxLCJjbHItaW5wdXQiLCJkaXNhYmxlLXBhc3N3b3JkLW1hbmFnZXIiXSxbImNsYXNzIiwibS0wIGNvbG9yLXJlZCIsNCwibmdJZiJdLFsidHlwZSIsImJ1dHRv''@;'; put 'put ''biIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3Mtb3V0bGluZSIsMywiY2xpY2siLCJkaXNhYmxlZCJdLFszLCJvcGVuQ2hhbmdlIiwicm93Q2xpY2tlZCIsIm9wZW4iLCJkc21ldGEiLCJ2ZXJzaW9ucyJdLFszLCJ2aWV3Ym94TW9kYWxDaGFuZ2UiLCJ2aWV3Ym94TW9kYWwiXSxbMSwi''@;'; put 'put ''Y2xyLWNvbC1tZC0zIiwiZmlsdGVyQnRuIl0sWzEsImZpbHRlckJ0biIsInctMTAwIl0sWyJmb3IiLCJmaWxlLXVwbG9hZCIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLW91dGxpbmUiLCJwcm9maWxlLWJ1dHRvbnMiLCJ3LTEwMCJdLFsiaGlkZGVuIiwiIiwiaWQiLCJmaWxlLXVwbG9hZCIsInR5''@;'; put 'put ''cGUiLCJmaWxlIiwiYXBwRmlsZVNlbGVjdCIsIiIsMywiY2hhbmdlIiwidXBsb2FkZXIiXSxbMSwiY2xyLWNvbC1tZC0zIiwiZWRpdEJ0biJdLFsxLCJidG5WaWV3IiwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3MiLCJwcm9maWxlLWJ1dHRvbnMiLCJ3LTEwMCIsMywiY2xpY2siLCJkaXNh''@;'; put 'put ''YmxlZCJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXByaW1hcnkiLCJtci0wIiwzLCJjbGljayIsImRpc2FibGVkIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tcHJpbWFyeSIsIm1yLTAiLDMsImNsaWNrIl0sWzEsImV4Y2VsLXBhcnNpbmciLCJjbHItY29sLW1kLTEy''@;'; put 'put ''Il0sWzMsIm9uUmVjb3JkQ2hhbmdlIiwib25SZWNvcmRJbnB1dEZvY3VzZWQiLCJvblJlY29yZEVkaXRDbG9zZSIsIm9uTmV4dFJlY29yZCIsIm9uUHJldmlvdXNSZWNvcmQiLCJjdXJyZW50UmVjb3JkIiwicmVjb3JkQWN0aW9uIiwibGliZHMiLCJxdWVyeUZpbHRlciIsImZpbHRlciIsInN1''@;'; put 'put ''Ym1pdExvYWRpbmciLCJoZWFkZXJQa3MiLCJjZWxsVmFsaWRhdGlvbiIsImN1cnJlbnRSZWNvcmRJbmRleCIsImN1cnJlbnRSZWNvcmRMb2FkaW5ncyIsImN1cnJlbnRSZWNvcmRFcnJvcnMiLCJjdXJyZW50UmVjb3JkVmFsaWRhdG9yIl0sWzEsInByb2dyZXNTdGF0aWMiLCJwcm9ncmVzcyIs''@;'; put 'put ''Imxvb3AiXSxbMSwiY2xyLWNvbC0xMiIsImNsci1jb2wtbWQtMyIsImNsci1jb2wtbGctNCIsImJhY2tCdG4iXSxbMSwiYnRuIiwiaWNvbi1jb2xsYXBzZSIsImJ0bi1zbSIsImJ0bi1pY29uIiwiYnRuLWRpbW1lZCIsMywicm91dGVyTGluayJdLFsic2hhcGUiLCJjYXJldCIsImRpciIsImxl''@;'; put 'put ''ZnQiLCJzaXplIiwiMjAiXSxbMSwidGV4dCJdLFsxLCJidG4iLCJpY29uLWNvbGxhcHNlIiwiYnRuLXNtIiwiYnRuLWljb24iLCJidG4tZGltbWVkIiwidmlld2JveC1vcGVuIiwzLCJjbGljayJdLFsic2hhcGUiLCJ2aWV3LWNhcmRzIiwic2l6ZSIsIjIwIl0sWzEsImVkaXRvci10aXRsZSIs''@;'; put 'put ''InRleHQtY2VudGVyIiwibXQtMCJdLFsiY2xyVG9vbHRpcFRyaWdnZXIiLCIiLCJzaGFwZSIsImluZm8tY2lyY2xlIiwiYXJpYS1sYWJlbCIsIlZpZXcgZGF0YXNldCBtZXRhIGluZm8iLCJzaXplIiwiMjQiLDEsImlzLWhpZ2hsaWdodCIsImN1cnNvci1wb2ludGVyIiwzLCJjbGljayJdLFsi''@;'; put 'put ''c2hhcGUiLCJib2x0IiwiY2xhc3MiLCJjb2xvci15ZWxsb3ciLDQsIm5nSWYiXSxbImNsclRvb2x0aXBUcmlnZ2VyIiwiIl0sWzEsIm1yLTEwIiwidmlldy10YWJsZSIsMywicm91dGVyTGluayJdLFsic2hhcGUiLCJib2x0IiwxLCJjb2xvci15ZWxsb3ciXSxbImNsclBvc2l0aW9uIiwiYm90''@;'; put 'put ''dG9tLWxlZnQiLCJjbHJTaXplIiwibGciLDQsImNscklmT3BlbiJdLFsiY2xyUG9zaXRpb24iLCJib3R0b20tbGVmdCIsImNsclNpemUiLCJsZyJdLFsxLCJjbHItY29sLTEyIiwiY2xyLWNvbC1tZC00IiwiY2xyLWNvbC1sZy00IiwiYnRuQ3RybCJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRu''@;'; put 'put ''VmlldyIsImJ0biIsImljb24tY29sbGFwc2UiLCJidG4tc20iLCJidG4taWNvbiIsImJ0bi1ibG9jayIsImJ0bi1kaW1tZWQiLDMsImNsaWNrIl0sWyJzaGFwZSIsImZpbHRlciJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiaWNvbi1jb2xsYXBzZSIsImJ0bi1zbSIsImJ0bi1wcmltYXJ5''@;'; put 'put ''IiwiYnRuLWJsb2NrIiwzLCJjbGljayJdLFsic2hhcGUiLCJub3RlIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xhc3MiLCJidG4gaWNvbi1jb2xsYXBzZSBidG4tc20gYnRuLXN1Y2Nlc3MgYnRuLWJsb2NrIG1yLTAiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4i''@;'; put 'put ''LCJpY29uLWNvbGxhcHNlIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3MiLCJidG4tYmxvY2siLCJtci0wIiwzLCJjbGljayJdLFsic2hhcGUiLCJ1cGxvYWQiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1pY29uIiwiYnRuLW91dGxpbmUtZGFuZ2VyIiwzLCJjbGljayJd''@;'; put 'put ''LFsic2hhcGUiLCJ0aW1lcyJdLFsiY2xyVG9vbHRpcFRyaWdnZXIiLCIiLCJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tc3VjY2VzcyIsMywiY2xpY2siLCJjbHJMb2FkaW5nIl0sWyJzaGFwZSIsInBsdXMiLCJzaXplIiwiMTYiXSxbInNoYXBlIiwiY2hlY2siLCJzaXpl''@;'; put 'put ''IiwiMjAiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1pY29uIiwiYnRuLW91dGxpbmUtZGFuZ2VyIiwiYnRuLXVwbG9hZC1wcmV2aWV3IiwzLCJjbGljayJdLFsidHlwZSIsImJ1dHRvbiIsImNsYXNzIiwiYnRuIGJ0bi1zbSBidG4tcHJpbWFyeSBidG4tdXBsb2Fk''@;'; put 'put ''LXByZXZpZXciLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tc3VjY2VzcyIsInByZXZpZXctc3VibWl0IiwzLCJjbGljayIsImNsckxvYWRpbmciXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1wcmltYXJ5''@;'; put 'put ''IiwiYnRuLXVwbG9hZC1wcmV2aWV3IiwzLCJjbGljayJdLFsxLCJjbHItY29sLW1kLTEyIiwiaW5mb0JhciJdLFsxLCJjYXJkLXRleHQiXSxbMSwiaC03MHZoIiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciIsImZsZXgtY29sdW1uIiwiYWxpZ24taXRlbXMtY2VudGVyIl0sWzEs''@;'; put 'put ''InNwaW5uZXIiXSxbMSwibXQtMTAiXSxbImNkcy10ZXh0Iiwic2VjdGlvbiJdLFsic2hhcGUiLCJlcnJvci1zdGFuZGFyZCIsMSwiZXJyb3ItaWNvbiJdLFsiY2xyVG9vbHRpcFRyaWdnZXIiLCIiLCJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tc3VjY2VzcyIsIm10LTUt''@;'; put 'put ''aSIsMywiY2xpY2siXSxbImNsclBvc2l0aW9uIiwidG9wLXJpZ2h0IiwiY2xyU2l6ZSIsImxnIiw0LCJjbHJJZk9wZW4iXSxbImNsclBvc2l0aW9uIiwidG9wLXJpZ2h0IiwiY2xyU2l6ZSIsImxnIl0sWzEsIm10LTItaSIsInctMTAwIiwidGV4dC1jZW50ZXIiXSxbMSwibW9kYWwiXSxbInJv''@;'; put 'put ''bGUiLCJkaWFsb2ciLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsIm1vZGFsLWRpYWxvZyIsIm1vZGFsLWxnIl0sWzEsIm1vZGFsLWNvbnRlbnQiXSxbMSwibW9kYWwtaGVhZGVyIl0sWyJhcmlhLWxhYmVsIiwiQ2xvc2UiLCJ0eXBlIiwiYnV0dG9uIiwxLCJjbG9zZSJdLFsiYXJpYS1oaWRkZW4i''@;'; put 'put ''LCJ0cnVlIiwic2hhcGUiLCJjbG9zZSJdLFsiY2xhc3MiLCJkLWJsb2NrIHctMTAwIHRleHQtY2VudGVyIGNvbG9yLXJlZCIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItb2Zmc2V0LW1kLTIgY2xyLWNvbC1tZC04Iiw0LCJuZ0lmIl0sWzEsIm1vZGFsLWZvb3RlciIsImp1c3RpZnktY29udGVu''@;'; put 'put ''dC1jZW50ZXItaSJdLFsiaWQiLCJzdWJtaXRCdG4iLCJ0eXBlIiwic3VibWl0IiwidGFiaW5kZXgiLCIwIiwxLCJidG4iLCJidG4tc20iLCJidG4tc3VjY2Vzcy1vdXRsaW5lIiwibS0wIiwzLCJjbGljayIsImRpc2FibGVkIl0sWyJpZCIsImNhbmNlbFN1Ym1pdEJ0biIsInR5cGUiLCJidXR0''@;'; put 'put ''b24iLCJ0YWJpbmRleCIsIjAiLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1vdXRsaW5lIiwzLCJjbGljayJdLFsxLCJkLWJsb2NrIiwidy0xMDAiLCJ0ZXh0LWNlbnRlciIsImNvbG9yLXJlZCJdLFsxLCJjbHItb2Zmc2V0LW1kLTIiLCJjbHItY29sLW1kLTgiXSxbMSwidGV4dC1hcmVhLWZ1bGwt''@;'; put 'put ''d2lkdGgiXSxbImZvciIsImZvcm1GaWVsZHNfOCIsMSwibWItNSIsImQtYmxvY2siXSxbImNsclRleHRhcmVhIiwiIiwidGFiaW5kZXgiLCIwIiwidHlwZSIsInRleHQiLCJpZCIsImZvcm1GaWVsZHNfOCIsMSwic3VibWl0LXJlYXNvbiIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiLCJk''@;'; put 'put ''aXNhYmxlZCIsInZhbHVlIl0sWzEsImQtYmxvY2siXSxbMSwibW9kYWwiLCJ6LWluZGV4LWhpZ2hlc3QiXSxbInJvbGUiLCJkaWFsb2ciLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsIm1vZGFsLWRpYWxvZyJdLFsxLCJtLTAiLCJjb2xvci1yZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXtp''@;'; put 'put ''ZigxJmQpe2NvbnN0IGY9TG4oKTtkZSgwLCJkaXYiLDYpKDEsImNsci1tb2RhbCIsNyksRnQoImZpbGVPdmVyIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksQ3QoaC5maWxlT3ZlckJhc2UoTSkpfSkoImZpbGVEcm9wIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksQ3QoaC5hdHRhY2hGaWxl''@;'; put 'put ''KE0sITApKX0pLGdpKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxtaShoLnNob3dVcGxvYWRNb2RhbCxNKXx8KGguc2hvd1VwbG9hZE1vZGFsPU0pLEN0KE0pfSksZGUoMiwiaDMiLDgpLExlKDMsIlVwbG9hZCBGaWxlIiksaGUoKSxkZSg0LCJkaXYiLDkp''@;'; put 'put ''KDUsImRpdiIsMTApKDYsInNwYW4iKSxMZSg3LCJEcm9wIGZpbGUgYW55d2hlcmUgdG8gdXBsb2FkISIpLGhlKCkoKSxkZSg4LCJkaXYiLDExKSg5LCJkaXYiLDEyKSgxMCwiZGl2IiwxMykoMTEsImRpdiIsMTQpKDEyLCJjbHItcmFkaW8tY29udGFpbmVyIiwxNSkoMTMsImNsci1yYWRpby13''@;'; put 'put ''cmFwcGVyIikoMTQsImlucHV0IiwxNiksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxtaShoLmVuY29kaW5nLE0pfHwoaC5lbmNvZGluZz1NKSxDdChNKX0pLGhlKCksZGUoMTUsImxhYmVsIiksTGUoMTYsIlVURi04IiksaGUoKSgpLGRlKDE3LCJjbHItcmFk''@;'; put 'put ''aW8td3JhcHBlciIpKDE4LCJpbnB1dCIsMTcpLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksbWkoaC5lbmNvZGluZyxNKXx8KGguZW5jb2Rpbmc9TSksQ3QoTSl9KSxoZSgpLGRlKDE5LCJsYWJlbCIpLExlKDIwLCJXTEFUSU4xIiksaGUoKSgpKCkoKSgpLGd0''@;'; put 'put ''KDIxLEM3dCw2LDEsImRpdiIsMTgpKDIyLFM3dCwzLDEsImRpdiIsMTkpLGRlKDIzLCJkaXYiLDEzKSxndCgyNCxNN3QsMiwxLCJidXR0b24iLDIwKSgyNSx4N3QsMiwwLCJidXR0b24iLDIxKSxoZSgpLGd0KDI2LEU3dCwzLDAsImRpdiIsMjIpLGhlKCkoKSgpLEd0KDI3LCJkaXYiLDIzKSxo''@;'; put 'put ''ZSgpLGd0KDI4LFQ3dCwxLDEyLCJhcHAtZWRpdC1yZWNvcmQiLDI0KSxkZSgyOSwiZGl2IiwyNSwwKSxndCgzMSxBN3QsMiwwLCJkaXYiLDI2KSxkZSgzMiwiZGl2IiwyNyksRnQoImZpbGVEcmFnZ2VkT3ZlciIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5vblNob3dVcGxvYWRNb2Rh''@;'; put 'put ''bCgpKX0pLGRlKDMzLCJkaXYiLDI4KSxndCgzNCxrN3QsOSwyLCJkaXYiLDI5KSxkZSgzNSwiZGl2IiwzMCksZ3QoMzYsRjd0LDEwLDYsImg0IiwzMSksaGUoKSxndCgzNyxaN3QsNCwzLCJkaXYiLDMyKSgzOCxXN3QsNSwxLCJkaXYiLDMzKSxoZSgpLGRlKDM5LCJkaXYiLDM0KSxndCg0MCwk''@;'; put 'put ''N3QsNCwyLCJkaXYiLDM1KSxkZSg0MSwiZGl2IiwzNikoNDIsImRpdiIsMzcpLEd0KDQzLCJob3QtdGFibGUiLDM4LDEpLGhlKCksZGUoNDUsImRpdiIpLGd0KDQ2LFg3dCw1LDIsImNsci10b29sdGlwIiwzOSkoNDcsSjd0LDMsMSwicCIsNDApLGhlKCksZ3QoNDgsdDl0LDE2LDYsImRpdiIs''@;'; put 'put ''NDEpLGRlKDQ5LCJjbHItbW9kYWwiLDQyKSxnaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksbWkoaC5zdWJtaXRMaW1pdE5vdGljZSxNKXx8KGguc3VibWl0TGltaXROb3RpY2U9TSksQ3QoTSl9KSxkZSg1MCwiaDMiLDgpLExlKDUxLCJOb3RpY2UiKSxo''@;'; put 'put ''ZSgpLGRlKDUyLCJkaXYiLDkpKDUzLCJwIiw0MyksTGUoNTQpLGhlKCkoKSxkZSg1NSwiZGl2IiwyMykoNTYsImJ1dHRvbiIsNDQpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5zdWJtaXRMaW1pdE5vdGljZT0hMSl9KSxMZSg1NywiIENhbmNlbCAiKSxoZSgpLGRl''@;'; put 'put ''KDU4LCJidXR0b24iLDQ0KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLGgudXBsb2FkUGFyc2VkRmlsZXMoKSxDdChoLnN1Ym1pdExpbWl0Tm90aWNlPSExKX0pLExlKDU5LCIgU3VibWl0ICIpLGhlKCkoKSgpLGRlKDYwLCJjbHItbW9kYWwiLDQyKSxnaSgiY2xyTW9kYWxP''@;'; put 'put ''cGVuQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksbWkoaC5iYWRFZGl0LE0pfHwoaC5iYWRFZGl0PU0pLEN0KE0pfSksZGUoNjEsImgzIiw4KSxMZSg2MiksaGUoKSxkZSg2MywiZGl2Iiw5KSg2NCwicCIpLExlKDY1KSxoZSgpKCksZGUoNjYsImRpdiIsMjMpKDY3LCJidXR0b24i''@;'; put 'put ''LDQ0KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLEN0KGguYmFkRWRpdD0hMSl9KSxMZSg2OCwiIE9rICIpLGhlKCkoKSgpLGRlKDY5LCJjbHItbW9kYWwiLDQyKSxnaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksbWkoaC5wa051bGws''@;'; put 'put ''TSl8fChoLnBrTnVsbD1NKSxDdChNKX0pLGRlKDcwLCJoMyIsOCksTGUoNzEsIkVycm9yIiksaGUoKSxkZSg3MiwiZGl2Iiw5KSg3MywicCIpLExlKDc0LCIgTnVsbCB2YWx1ZXMgb3IgaW5jb3JyZWN0IGRhdGEgdHlwZXMgY2Fubm90IGJlIHN1Ym1pdHRlZCBmb3IgUHJpbWFyeSBLZXkgY29s''@;'; put 'put ''dW1ucyAiKSxoZSgpKCksZGUoNzUsImRpdiIsMjMpKDc2LCJidXR0b24iLDQ1KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLGgucGtOdWxsPSExLEN0KGguYmFkRWRpdD0hMSl9KSxMZSg3NywiIE9rICIpLGhlKCkoKSgpLGRlKDc4LCJjbHItbW9kYWwiLDQyKSxnaSgiY2xy''@;'; put 'put ''TW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksbWkoaC5ub1BrTnVsbCxNKXx8KGgubm9Qa051bGw9TSksQ3QoTSl9KSxkZSg3OSwiaDMiLDgpLExlKDgwLCJFcnJvciIpLGhlKCksZGUoODEsImRpdiIsOSkoODIsInAiKSxMZSg4MywiSW5jb3JyZWN0IGRhdGEgdHlw''@;'; put 'put ''ZXMgaW4gbm9uLVByaW1hcnkgS2V5IGNvbHVtbnMiKSxoZSgpKCksZGUoODQsImRpdiIsMjMpKDg1LCJidXR0b24iLDQ1KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLGgubm9Qa051bGw9ITEsQ3QoaC5iYWRFZGl0PSExKX0pLExlKDg2LCIgT2sgIiksaGUoKSgpKCksZGUo''@;'; put 'put ''ODcsImNsci1tb2RhbCIsNDYpLGdpKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxtaShoLnBrRHVwcyxNKXx8KGgucGtEdXBzPU0pLEN0KE0pfSksZGUoODgsImgzIiw4KSxMZSg4OSwiRXJyb3IiKSxoZSgpLGRlKDkwLCJkaXYiLDkpKDkxLCJwIiksTGUo''@;'; put 'put ''OTIsIiBEdXBsaWNhdGUgdmFsdWVzIGNhbm5vdCBiZSBzdWJtaXR0ZWQgZm9yIFByaW1hcnkgS2V5IGNvbHVtbnMgIiksaGUoKSxkZSg5MywicCIpLExlKDk0LCJEdXBsaWNhdGVzIGZvdW5kOiIpLGhlKCksZ3QoOTUsbjl0LDMsNCwic3BhbiIsNDcpLGhlKCksZGUoOTYsImRpdiIsMjMpKDk3''@;'; put 'put ''LCJidXR0b24iLDQ1KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLEN0KGgucGtEdXBzPSExKX0pLExlKDk4LCIgT2sgIiksaGUoKSgpKCksZGUoOTksImNsci1tb2RhbCIsNDIpLGdpKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxtaSho''@;'; put 'put ''LnRvb0xvbmcsTSl8fChoLnRvb0xvbmc9TSksQ3QoTSl9KSxkZSgxMDAsImgzIiw4KSxMZSgxMDEsIkVycm9yIiksaGUoKSxkZSgxMDIsImRpdiIsOSkoMTAzLCJwIiksTGUoMTA0LCIgVGhlIGZvbGxvd2luZyBjb2x1bW5zIGhhdmUgdmFsdWVzIHRoYXQgZXhjZWVkIGxlbmd0aCBsaW1pdHM6''@;'; put 'put ''ICIpLGhlKCksZ3QoMTA1LHI5dCwyLDMsInAiLDQ4KSxoZSgpLGRlKDEwNiwiZGl2IiwyMykoMTA3LCJidXR0b24iLDQ1KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLGgudG9vTG9uZz0hMSxDdChoLmNsZWFuRXhjZWVkKCkpfSksTGUoMTA4LCIgT2sgIiksaGUoKSgpKCko''@;'; put 'put ''KSgpKCkoKSgpLGd0KDEwOSxpOXQsMTQsMCwiZGl2Iiw0OSksZGUoMTEwLCJjbHItbW9kYWwiLDUwKSxnaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksbWkoaC5maWx0ZXIsTSl8fChoLmZpbHRlcj1NKSxDdChNKX0pLGRlKDExMSwiaDMiLDUxKSxMZSgx''@;'; put 'put ''MTIsIiBGaWx0ZXIgZm9yIHRhYmxlOiAiKSxkZSgxMTMsInNwYW4iKSxMZSgxMTQpLGhlKCkoKSxkZSgxMTUsImRpdiIsOSksZ3QoMTE2LGE5dCwyLDAsImFwcC1xdWVyeSIsMzkpLGhlKCksZGUoMTE3LCJkaXYiLDIzKSgxMTgsImJ1dHRvbiIsNTIpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXty''@;'; put 'put ''ZXR1cm4gd3QoZiksQ3QoaC5yZXNldEZpbHRlcigpKX0pLExlKDExOSwiIHJlc2V0IGZpbHRlciAiKSxoZSgpLGRlKDEyMCwiYnV0dG9uIiw1MyksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxDdChoLmZpbHRlcj0hMSl9KSxMZSgxMjEsIiBDYW5jZWwgIiksaGUoKSxkZSgx''@;'; put 'put ''MjIsImJ1dHRvbiIsNTQpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5zZW5kQ2xhdXNlKCkpfSksTGUoMTIzLCIgT2sgIiksaGUoKSgpKCksZGUoMTI0LCJjbHItbW9kYWwiLDQyKSxnaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3Qo''@;'; put 'put ''ZiksbWkoaC5xdWVyeUVycixNKXx8KGgucXVlcnlFcnI9TSksQ3QoTSl9KSxkZSgxMjUsImgzIiw4KSxMZSgxMjYsIkVycm9yIiksaGUoKSxkZSgxMjcsImRpdiIsOSkoMTI4LCJwIiksTGUoMTI5KSxoZSgpKCksZGUoMTMwLCJkaXYiLDIzKSgxMzEsImJ1dHRvbiIsNTUpLEZ0KCJjbGljayIs''@;'; put 'put ''ZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5xdWVyeUVycj0hMSl9KSxMZSgxMzIsIiBDYW5jZWwgIiksaGUoKSxkZSgxMzMsImJ1dHRvbiIsNDUpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5xdWVyeUVycj0hMSl9KSxMZSgxMzQsIiBPayAiKSxoZSgpKCko''@;'; put 'put ''KSxkZSgxMzUsImNsci1tb2RhbCIsNTYpLGdpKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxtaShoLmRpc2NhcmRTb3VyY2VGaWxlLE0pfHwoaC5kaXNjYXJkU291cmNlRmlsZT1NKSxDdChNKX0pLGRlKDEzNiwiaDMiLDUxKSxMZSgxMzcsIldhcm5pbmci''@;'; put 'put ''KSxoZSgpLGRlKDEzOCwiZGl2Iiw5KSxMZSgxMzksIiBUaGlzIGFjdGlvbiB3aWxsIGRpc2NhcmQgdGhlIHNvdXJjZSBmaWxlIGFuZCBpdCdzIGxvYWRlZCBkYXRhICIpLGRlKDE0MCwiYiIpLExlKDE0MSksaGUoKSxMZSgxNDIsIiBEbyB5b3Ugd2lzaCB0byBwcm9jZWVkPyAiKSxoZSgpLGRl''@;'; put 'put ''KDE0MywiZGl2IiwyMykoMTQ0LCJidXR0b24iLDUzKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLEN0KGguZGlzY2FyZFNvdXJjZUZpbGU9ITEpfSksTGUoMTQ1LCIgQ2FuY2VsICIpLGhlKCksZGUoMTQ2LCJidXR0b24iLDU3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0''@;'; put 'put ''dXJuIHd0KGYpLGguZGlzY2FyZFNvdXJjZUZpbGU9ITEsQ3QoaC5kaXNjYXJkUGVuZGluZ0V4Y2VsKCEwKSl9KSxMZSgxNDcsIiBPayAiKSxoZSgpKCkoKSxkZSgxNDgsImNsci1tb2RhbCIsNTYpLGdpKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxtaSho''@;'; put 'put ''LmZpbGVQYXNzd29yZE1vZGFsLE0pfHwoaC5maWxlUGFzc3dvcmRNb2RhbD1NKSxDdChNKX0pLGRlKDE0OSwiaDMiLDUxKSxMZSgxNTAsIiBQYXNzd29yZCBQcm90ZWN0ZWQgRmlsZSAiKSxoZSgpLGRlKDE1MSwiZGl2Iiw1OCkoMTUyLCJwIiw0MyksTGUoMTUzLCJQbGVhc2UgZW50ZXIgcGFz''@;'; put 'put ''c3dvcmQ6IiksaGUoKSxHdCgxNTQsImlucHV0Iiw1OSwyKSxoZSgpLGRlKDE1NiwiZGl2IiwyMyksZ3QoMTU3LG85dCwyLDAsInAiLDYwKSxkZSgxNTgsImJ1dHRvbiIsNTMpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksaC5maWxlUGFzc3dvcmRNb2RhbD0hMSxDdChoLmZp''@;'; put 'put ''bGVQYXNzd29yZFN1YmplY3QubmV4dCh2b2lkIDApKX0pLExlKDE1OSwiIENhbmNlbCB1cGxvYWQgIiksaGUoKSxkZSgxNjAsImJ1dHRvbiIsNjEpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChmKTtjb25zdCBNPWhhKDE1NSk7cmV0dXJuIGguZmlsZVBhc3N3b3JkTW9kYWw9ITEsQ3QoaC5m''@;'; put 'put ''aWxlUGFzc3dvcmRTdWJqZWN0Lm5leHQoTS52YWx1ZSkpfSksTGUoMTYxLCIgVW5sb2NrICIpLGhlKCkoKSgpLGRlKDE2MiwiY2xyLW1vZGFsIiw1NiksZ2koImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLG1pKGgubWFudWFsRmlsZUVkaXRNb2RhbCxNKXx8''@;'; put 'put ''KGgubWFudWFsRmlsZUVkaXRNb2RhbD1NKSxDdChNKX0pLGRlKDE2MywiaDMiLDUxKSxMZSgxNjQsIldhcm5pbmciKSxoZSgpLGRlKDE2NSwiZGl2Iiw5KSxMZSgxNjYsIiBNYW51YWxseSBlZGl0aW5nIHRoaXMgZGF0YSB3aWxsIG1lYW4gdGhlIHNvdXJjZSBmaWxlICIpLGRlKDE2NywiYiIp''@;'; put 'put ''LExlKDE2OCksaGUoKSxMZSgxNjksIiB3aWxsIGJlIGRpc2NhcmRlZC4gRG8geW91IHdpc2ggdG8gcHJvY2VlZD8gIiksaGUoKSxkZSgxNzAsImRpdiIsMjMpKDE3MSwiYnV0dG9uIiw1MyksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxDdChoLm1hbnVhbEZpbGVFZGl0TW9k''@;'; put 'put ''YWw9ITEpfSksTGUoMTcyLCIgQ2FuY2VsICIpLGhlKCksZGUoMTczLCJidXR0b24iLDU3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLGgubWFudWFsRmlsZUVkaXRNb2RhbD0hMSxDdChoLnByZXZpZXdUYWJsZUVkaXRDb25maXJtKCkpfSksTGUoMTc0LCIgT2sgIiksaGUo''@;'; put 'put ''KSgpKCksZGUoMTc1LCJhcHAtZGF0YXNldC1pbmZvIiw2MiksZ2koIm9wZW5DaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxtaShoLmRhdGFzZXRJbmZvLE0pfHwoaC5kYXRhc2V0SW5mbz1NKSxDdChNKX0pLEZ0KCJyb3dDbGlja2VkIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiks''@;'; put 'put ''Q3QoaC5kYXRhc2V0SW5mb01vZGFsUm93Q2xpY2tlZChNKSl9KSxoZSgpLGRlKDE3NiwiYXBwLXZpZXdib3hlcyIsNjMpLGdpKCJ2aWV3Ym94TW9kYWxDaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxtaShoLnZpZXdib3hlcyxNKXx8KGgudmlld2JveGVzPU0pLEN0KE0pfSksaGUo''@;'; put 'put ''KX1pZigyJmQpe2NvbnN0IGY9aGEoMTU1KTtmZSgpLE1lKCJ1cGxvYWRlciIsaC51cGxvYWRlcikoImNsck1vZGFsU2l6ZSIsInhsIikoImNsck1vZGFsU3RhdGljQmFja2Ryb3AiLCExKSgiY2xyTW9kYWxDbG9zYWJsZSIsIlZhbGlkYXRpbmctRFEiPT09aC5leGNlbFVwbG9hZFN0YXRlKSxw''@;'; put 'put ''aSgiY2xyTW9kYWxPcGVuIixoLnNob3dVcGxvYWRNb2RhbCksZmUoMTMpLHBpKCJuZ01vZGVsIixoLmVuY29kaW5nKSxNZSgiZGlzYWJsZWQiLCIiIT1oLmZpbGVuYW1lKSxmZSg0KSxwaSgibmdNb2RlbCIsaC5lbmNvZGluZyksTWUoImRpc2FibGVkIiwiIiE9aC5maWxlbmFtZSksZmUoMyks''@;'; put 'put ''TWUoIm5nSWYiLCFoLmV4Y2VsRmlsZVBhcnNpbmcmJiFoLnVwbG9hZExvYWRpbmcpLGZlKCksTWUoIm5nSWYiLCFoLmV4Y2VsRmlsZVBhcnNpbmcmJiFoLnVwbG9hZExvYWRpbmcpLGZlKDIpLE1lKCJuZ0lmIiwiVmFsaWRhdGluZyIhPT1oLmV4Y2VsVXBsb2FkU3RhdGUpLGZlKCksTWUoIm5n''@;'; put 'put ''SWYiLCJWYWxpZGF0aW5nLURRIj09PWguZXhjZWxVcGxvYWRTdGF0ZSksZmUoKSxNZSgibmdJZiIsaC5leGNlbEZpbGVQYXJzaW5nKSxmZSgyKSxNZSgibmdJZiIsaC5jdXJyZW50RWRpdFJlY29yZEluZGV4Pi0xKSxmZSgzKSxNZSgibmdJZiIsIWgudmFsaWRhdGlvbkRvbmUmJmguc3VibWl0''@;'; put 'put ''KSxmZSgzKSxNZSgibmdJZiIsaC50YWJsZVRydWUpLGZlKCksVHIoImNsci1jb2wtbGctMTIiLCFoLnRhYmxlVHJ1ZSksZmUoKSxNZSgibmdWYXIiLGxwKDY3LHk3dCxudWxsPT1oLmxpYmRzP251bGw6aC5saWJkcy5zcGxpdCgiLiIpWzBdLG51bGw9PWgubGliZHM/bnVsbDpoLmxpYmRzLnNw''@;'; put 'put ''bGl0KCIuIilbMV0pKSxmZSgpLE1lKCJuZ0lmIixoLnRhYmxlVHJ1ZSksZmUoKSxNZSgibmdJZiIsIVlzKDcwLEg2ZSkuaW5jbHVkZXMoaC5xdWVyeVRleHQpKSxmZSgpLE1lKCJuZ0NsYXNzIixzcCg3MixfN3QsIVlzKDcxLEg2ZSkuaW5jbHVkZXMoaC5xdWVyeVRleHQpKSksZmUoKSxNZSgi''@;'; put 'put ''bmdJZiIsIWgudGFibGVUcnVlKSxmZSgzKSxUcigiaGlkZGVuIixoLmhvdFRhYmxlLmhpZGRlbiksTWUoImxpY2Vuc2VLZXkiLGguaG90VGFibGUubGljZW5zZUtleSksZmUoMyksTWUoIm5nSWYiLGgudGFibGVUcnVlJiYhaC5yZXN0cmljdGlvbnMucmVtb3ZlQWRkUmVjb3JkQnV0dG9uKSxm''@;'; put 'put ''ZSgpLE1lKCJuZ0lmIixoLmxpY2VuY2VTdGF0ZS52YWx1ZS5lZGl0b3Jfcm93c19hbGxvd2VkIT09aC5JbmZpbml0eSYmaC5kYXRhU291cmNlJiZoLmRhdGFTb3VyY2UubGVuZ3RoPmgubGljZW5jZVN0YXRlLnZhbHVlLmVkaXRvcl9yb3dzX2FsbG93ZWQpLGZlKCksTWUoIm5nSWYiLGguc3Vi''@;'; put 'put ''bWl0KSxmZSgpLHBpKCJjbHJNb2RhbE9wZW4iLGguc3VibWl0TGltaXROb3RpY2UpLGZlKDUpLElyKCIgRHVlIHRvIGN1cnJlbnQgbGljZW5jZSwgb25seSAiLGgubGljZW5jZVN0YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xpbWl0LCIgcm93cyBpbiBhIGZpbGUgd2lsbCBiZSBzdWJtaXR0ZWQu''@;'; put 'put ''IFRvIHJlbW92ZSB0aGUgcmVzdHJpY3Rpb24sIGNvbnRhY3Qgc3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyAiKSxmZSg2KSxwaSgiY2xyTW9kYWxPcGVuIixoLmJhZEVkaXQpLGZlKDIpLHdyKGguYmFkRWRpdFRpdGxlfHwiRXJyb3IiKSxmZSgzKSx3cihoLmJhZEVkaXRDYXVzZSksZmUoNCks''@;'; put 'put ''cGkoImNsck1vZGFsT3BlbiIsaC5wa051bGwpLGZlKDkpLHBpKCJjbHJNb2RhbE9wZW4iLGgubm9Qa051bGwpLGZlKDkpLHBpKCJjbHJNb2RhbE9wZW4iLGgucGtEdXBzKSxmZSg4KSxNZSgibmdGb3JPZiIsaC5kdXBsaWNhdGVQa0luZGV4ZXMpLGZlKDQpLHBpKCJjbHJNb2RhbE9wZW4iLGgu''@;'; put 'put ''dG9vTG9uZyksZmUoNiksTWUoIm5nRm9yT2YiLGguZXhjZWVkQ2VsbHMpLGZlKDQpLE1lKCJuZ0lmIixoLm51bGxWYXJpYWJsZXMpLGZlKCkscGkoImNsck1vZGFsT3BlbiIsaC5maWx0ZXIpLE1lKCJjbHJNb2RhbFNpemUiLCJ4bCIpKCJjbHJNb2RhbENsb3NhYmxlIiwhMSksZmUoNCksSXIo''@;'; put 'put ''IiAiLGgubGliZHMsIiAiKSxmZSgyKSxNZSgibmdJZiIsaC5maWx0ZXIpLGZlKDYpLE1lKCJjbHJMb2FkaW5nIixoLnN1Ym1pdExvYWRpbmcpLGZlKDIpLHBpKCJjbHJNb2RhbE9wZW4iLGgucXVlcnlFcnIpLGZlKDUpLHdyKGgucXVlcnlFcnJNZXNzYWdlKSxmZSg2KSxwaSgiY2xyTW9kYWxP''@;'; put 'put ''cGVuIixoLmRpc2NhcmRTb3VyY2VGaWxlKSxNZSgiY2xyTW9kYWxTaXplIiwieGwiKSgiY2xyTW9kYWxDbG9zYWJsZSIsITEpLGZlKDYpLHdyKGguZmlsZW5hbWUpLGZlKDcpLHBpKCJjbHJNb2RhbE9wZW4iLGguZmlsZVBhc3N3b3JkTW9kYWwpLE1lKCJjbHJNb2RhbFNpemUiLCJtZCIpKCJj''@;'; put 'put ''bHJNb2RhbENsb3NhYmxlIiwhMSksZmUoOSksTWUoIm5nSWYiLGguZmlsZVVubG9ja0Vycm9yKSxmZSgzKSxNZSgiZGlzYWJsZWQiLGYudmFsdWUubGVuZ3RoPDEpLGZlKDIpLHBpKCJjbHJNb2RhbE9wZW4iLGgubWFudWFsRmlsZUVkaXRNb2RhbCksTWUoImNsck1vZGFsU2l6ZSIsInhsIiko''@;'; put 'put ''ImNsck1vZGFsQ2xvc2FibGUiLCExKSxmZSg2KSx3cihoLmZpbGVuYW1lKSxmZSg3KSxwaSgib3BlbiIsaC5kYXRhc2V0SW5mbyksTWUoImRzbWV0YSIsaC5kc21ldGEpKCJ2ZXJzaW9ucyIsaC52ZXJzaW9ucyksZmUoKSxwaSgidmlld2JveE1vZGFsIixoLnZpZXdib3hlcyl9fSxkZXBlbmRl''@;'; put 'put ''bmNpZXM6W0k2ZSx3dSxucyxiYSxxbCxiTCxubCwkcyxjMSxIbCxvdSxLdSxqMCxMMixQMixkcyxjRyxFWmUsbEcsUUwsdjcseTcsYjcsRF8sU3csdEUsUjZlLEw2ZSxPNmUscE8sWGVlLHU3dCxoN3QsZjd0LEY2ZV0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKTtjb25zdCBzOXQ9''@;'; put 'put ''W3twYXRoOiI6bGliTWVtIixjb21wb25lbnQ6aU59LHtwYXRoOiI6bGliTWVtLzpmaWx0ZXJJZCIsY29tcG9uZW50OmlOfSx7cGF0aDoiZWRpdC1yZWNvcmQvOmxpYk1lbSIsY29tcG9uZW50OmlOfSx7cGF0aDoiZWRpdC1yZWNvcmQvOmxpYk1lbS86ZmlsdGVySWQiLGNvbXBvbmVudDppTn1d''@;'; put 'put ''O2xldCBsOXQ9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1JhLHpjLmZvckNoaWxkKHM5dCks''@;'; put 'put ''emNdfSl9fXJldHVybiBjfSkoKSx4QT0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbUmEsejAs''@;'; put 'put ''UmEsUmMsbmZdfSl9fXJldHVybiBjfSkoKSxRZWU9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6''@;'; put 'put ''W1JhLHowLFJhLFJjLEc5LE1BLG5mXX0pfX1yZXR1cm4gY30pKCksTjZlPSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1raSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5q''@;'; put 'put ''PUFyKHtpbXBvcnRzOltSYSx6MCxSYSxSYyxRZWUsbzksXzFlLF82ZSx4QSxuZl19KX19cmV0dXJuIGN9KSgpO25OKCk7bGV0IGM5dD0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9''@;'; put 'put ''a2koe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbTjZlLFJhLFJjLGw5dCx6MCxvOS5mb3JSb290KCksRzksbmYsQ3csTUEseEEsXzFlLFFlZV19KX19cmV0dXJuIGN9KSgpLHU5dD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7fW5nT25Jbml0KCl7fW5n''@;'; put 'put ''T25EZXN0cm95KCl7fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLWhvbWUtcm91dGUiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRl''@;'; put 'put ''Y2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiZHdCgwLCJyb3V0ZXItb3V0bGV0Iil9LGRlcGVuZGVuY2llczpbcmddLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCk7Y29uc3QgZDl0PVsic2lkZWJhck5hdiJdLGg5dD1bIioiXSxmOXQ9KCk9PlsiL3ZpZXcv''@;'; put 'put ''dXNlcm5hdi91c2VycyJdLHA5dD0oKT0+WyIvdmlldy91c2VybmF2L2dyb3VwcyJdLGc5dD0oKT0+WyIvdmlldy91c2VybmF2L3JvbGVzIl07ZnVuY3Rpb24gbTl0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiYSIsMTgpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3Qo''@;'; put 'put ''YSksQ3QoUmUoMykubmF2aWdhdGVUb1ZpZXdlcigpKX0pLExlKDEsIkRhdGEiKSxoZSgpfX1mdW5jdGlvbiB2OXQoYyxsKXsxJmMmJihkZSgwLCJhIiwxOSksTGUoMSwiQVBJIEV4cGxvcmVyIiksaGUoKSl9ZnVuY3Rpb24gYjl0KGMsbCl7MSZjJiYoZGUoMCwiYSIsMjApLExlKDEsIkxpbmVh''@;'; put 'put ''Z2UiKSxoZSgpKX1mdW5jdGlvbiB5OXQoYyxsKXsxJmMmJihkZSgwLCJhIiwyMSksTGUoMSwiTWV0YWRhdGEiKSxoZSgpKX1mdW5jdGlvbiBfOXQoYyxsKXsxJmMmJihkZSgwLCJhIiwyMiksTGUoMSwiIFVzZXJzIiksaGUoKSl9ZnVuY3Rpb24gdzl0KGMsbCl7MSZjJiYoZGUoMCwiYSIsMjMp''@;'; put 'put ''LExlKDEsIlN1Ym1pdHRlZCIpLGhlKCkpfWZ1bmN0aW9uIEM5dChjLGwpezEmYyYmKGRlKDAsImEiLDI0KSxMZSgxLCJUbyBBcHByb3ZlIiksaGUoKSl9ZnVuY3Rpb24gUzl0KGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xyLWRyb3Bkb3duLW1lbnUiKSxndCgxLG05dCwyLDAsImEiLDExKSgyLHY5''@;'; put 'put ''dCwyLDAsImEiLDEyKSgzLGI5dCwyLDAsImEiLDEzKSg0LHk5dCwyLDAsImEiLDE0KSg1LF85dCwyLDAsImEiLDE1KSg2LHc5dCwyLDAsImEiLDE2KSg3LEM5dCwyLDAsImEiLDE3KSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoMik7ZmUoKSxNZSgibmdJZiIsYS5pc01haW5Sb3V0ZSgidmlldyIp''@;'; put 'put ''KSxmZSgpLE1lKCJuZ0lmIixhLmlzTWFpblJvdXRlKCJ2aWV3IikmJiJTQVNWSVlBIj09PWEuc2VydmVyVHlwZSksZmUoKSxNZSgibmdJZiIsYS5pc01haW5Sb3V0ZSgidmlldyIpJiYiU0FTOSI9PT1hLnNlcnZlclR5cGUpLGZlKCksTWUoIm5nSWYiLGEuaXNNYWluUm91dGUoInZpZXciKSYm''@;'; put 'put ''IlNBUzkiPT09YS5zZXJ2ZXJUeXBlKSxmZSgpLE1lKCJuZ0lmIixhLmlzTWFpblJvdXRlKCJ2aWV3IikpLGZlKCksTWUoIm5nSWYiLGEuaXNNYWluUm91dGUoImFwcHJvdmUiKSksZmUoKSxNZSgibmdJZiIsYS5pc01haW5Sb3V0ZSgiYXBwcm92ZSIpKX19ZnVuY3Rpb24gTTl0KGMsbCl7aWYo''@;'; put 'put ''MSZjJiYoZGUoMCwiZGl2Iiw3KSgxLCJjbHItZHJvcGRvd24iKSgyLCJidXR0b24iLDgpLExlKDMpLEd0KDQsImNsci1pY29uIiw5KSxoZSgpLGd0KDUsUzl0LDgsNywiY2xyLWRyb3Bkb3duLW1lbnUiLDEwKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1SZSgpO2ZlKDMpLElyKCIgIixhLmdldFN1''@;'; put 'put ''YlBhZ2UoKSwiICIpfX1mdW5jdGlvbiB4OXQoYyxsKXsxJmMmJkd0KDAsImNsci10YWItY29udGVudCIpfWZ1bmN0aW9uIEU5dChjLGwpezEmYyYmR3QoMCwiY2xyLXRhYi1jb250ZW50Iil9ZnVuY3Rpb24gVDl0KGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xyLXRhYiIpKDEsImJ1dHRvbiIsMjYp''@;'; put 'put ''KDIsInAiLDI3KSxHdCgzLCJjbHItaWNvbiIsMzIpLExlKDQsIiBSb2xlcyAiKSxoZSgpKCksZ3QoNSxFOXQsMSwwLCJjbHItdGFiLWNvbnRlbnQiLDMwKSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoMik7ZmUoKSxNZSgicm91dGVyTGluayIsWXMoMixnOXQpKSxmZSg0KSxNZSgiY2xySWZBY3Rp''@;'; put 'put ''dmUiLGEuaXNNYWluUm91dGUoIi92aWV3L3VzZXJuYXYvcm9sZXMiKSl9fWZ1bmN0aW9uIEE5dChjLGwpe2lmKDEmYyYmKGRlKDAsImNsci10YWJzIiwyNSkoMSwiY2xyLXRhYiIpKDIsImJ1dHRvbiIsMjYpKDMsInAiLDI3KSxHdCg0LCJjbHItaWNvbiIsMjgpLExlKDUsIiBVc2VycyIpLGhl''@;'; put 'put ''KCkoKSxHdCg2LCJjbHItdGFiLWNvbnRlbnQiKSxoZSgpLGRlKDcsImNsci10YWIiKSg4LCJidXR0b24iLDI2KSg5LCJwIiwyNyksR3QoMTAsImNsci1pY29uIiwyOSksTGUoMTEsIiBHcm91cHMiKSxoZSgpKCksZ3QoMTIseDl0LDEsMCwiY2xyLXRhYi1jb250ZW50IiwzMCksaGUoKSxndCgx''@;'; put 'put ''MyxUOXQsNiwzLCJjbHItdGFiIiwzMSksaGUoKSksMiZjKXtjb25zdCBhPVJlKCk7ZmUoMiksTWUoInJvdXRlckxpbmsiLFlzKDQsZjl0KSksZmUoNiksTWUoInJvdXRlckxpbmsiLFlzKDUscDl0KSksZmUoNCksTWUoImNscklmQWN0aXZlIixhLmlzTWFpblJvdXRlKCIvdmlldy91c2VybmF2''@;'; put 'put ''L2dyb3VwcyIpKSxmZSgpLE1lKCJuZ0lmIiwiU0FTOSI9PT1hLnNlcnZlclR5cGUpfX1mdW5jdGlvbiBrOXQoYyxsKXsxJmMmJihkZSgwLCJjbHItZHJvcGRvd24tbWVudSIpKDEsImEiLDMzKSxMZSgyLCJUYWJsZXMiKSxoZSgpLGRlKDMsImEiLDM0KSxMZSg0LCJFeGNlbCBNYXBzIiksaGUo''@;'; put 'put ''KSxkZSg1LCJhIiwzNSksTGUoNiwiTXVsdGkgTG9hZCIpLGhlKCkoKSl9ZnVuY3Rpb24gRDl0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiw3KSgxLCJjbHItZHJvcGRvd24iKSgyLCJidXR0b24iLDgpLExlKDMpLEd0KDQsImNsci1pY29uIiw5KSxoZSgpLGd0KDUsazl0LDcsMCwiY2xyLWRy''@;'; put 'put ''b3Bkb3duLW1lbnUiLDEwKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1SZSgpO2ZlKDMpLElyKCIgIixhLmdldFN1YlBhZ2UoKSwiICIpfX1sZXQgaTQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5fcm91dGVyPWEsdGhpcy5ldmVudFNlcnZpY2U9ZCx0aGlzLl9zYXNTZXJ2''@;'; put 'put ''aWNlPWgsdGhpcy5zY3JvbGxlZFRvQm90dG9tPW5ldyBLcix0aGlzLnNpZGViYXJPcGVuPSEwLHRoaXMuc2lkZWJhcldpZHRoPW51bGwsdGhpcy5zaWRlYmFyTWF4V2lkdGg9bnVsbCx0aGlzLnJlc2l6aW5nPSExLHRoaXMuc2FzanNDb25maWc9bmV3IG1oLlNBU2pzQ29uZmlnLHRoaXMuc2Fz''@;'; put 'put ''anNDb25maWc9dGhpcy5fc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLHRoaXMuc2VydmVyVHlwZT10aGlzLl9zYXNTZXJ2aWNlLmdldFNlcnZlclR5cGUoKX1uZ09uSW5pdCgpe3RoaXMuZXZlbnRTZXJ2aWNlLm9uU2lkZWJhclRvZ2dsZS5zdWJzY3JpYmUoYT0+e3RoaXMuc2lkZWJhck9w''@;'; put 'put ''ZW49YT9hLm9wZW46IXRoaXMuc2lkZWJhck9wZW4sdGhpcy5ldmVudFNlcnZpY2UuZGlzcGF0Y2hFdmVudCgicmVzaXplIil9KX1vblRyZWVTY3JvbGwoYSl7bGV0IGQ9YS50YXJnZXQ7ZC5zY3JvbGxUb3A+PWQuc2Nyb2xsSGVpZ2h0LWQub2Zmc2V0SGVpZ2h0LTEwJiZ0aGlzLnNjcm9sbGVk''@;'; put 'put ''VG9Cb3R0b20uZW1pdCgpfWlzTWFpblJvdXRlKGEpe3JldHVybiB0aGlzLl9yb3V0ZXIudXJsLmluY2x1ZGVzKGEpfWdldFN1YlBhZ2UoKXtyZXR1cm4gdGhpcy5fcm91dGVyLnVybC5zcGxpdCgiLyIpWzJdfW5hdmlnYXRlVG9WaWV3ZXIoKXtLbi52aWV3ZXIuY3VycmVudFNlbGVjdGlvbj0i''@;'; put 'put ''Iix0aGlzLl9yb3V0ZXIubmF2aWdhdGVCeVVybCgiL3ZpZXcvZGF0YSIpfXJlc2l6ZVN0YXJ0KCl7dGhpcy5yZXNpemluZz0hMCxkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYm9keSIpWzBdLnN0eWxlLmNzc1RleHQ9InVzZXItc2VsZWN0OiBub25lIn1yZXNpemVFbmQoKXt0aGlz''@;'; put 'put ''LnJlc2l6aW5nPSExLGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJib2R5IilbMF0uc3R5bGUuY3NzVGV4dD0iIn1vbk1vdXNlTW92ZShhKXtpZih0aGlzLnJlc2l6aW5nKXt0aGlzLnNpZGViYXJXaWR0aD1hLmNsaWVudFg7bGV0IGQ9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNz''@;'; put 'put ''TmFtZSgibmF2LXRyZWUiKVswXTt0aGlzLnNpZGViYXJXaWR0aCYmdGhpcy5pc092ZXJmbG93bihkKSYmKHRoaXMuc2lkZWJhck1heFdpZHRoPXRoaXMuc2lkZWJhcldpZHRoPj0zNzU/dGhpcy5zaWRlYmFyV2lkdGgrMTA6dGhpcy5zaWRlYmFyTWF4V2lkdGgpfX1vbk1vdXNlVXAoYSl7dGhp''@;'; put 'put ''cy5yZXNpemluZyYmdGhpcy5yZXNpemVFbmQoKX1pc092ZXJmbG93bihhKXtyZXR1cm4gYS5zY3JvbGxXaWR0aD5hLmNsaWVudFdpZHRofXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKExzKSxHZSh2YyksR2UoR3MpKX19c3RhdGlje3RoaXMu''@;'; put 'put ''XHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1zaWRlYmFyIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihkLGgpe2lmKDEmZCYmcWEoZDl0LDUpLDImZCl7bGV0IGY7Q2koZj1TaSgpKSYmKGguc2lkZWJhck5hdj1mLmZpcnN0KX19LGhvc3RCaW5kaW5nczpmdW5jdGlvbihkLGgp''@;'; put 'put ''ezEmZCYmRnQoIm1vdXNlbW92ZSIsZnVuY3Rpb24odil7cmV0dXJuIGgub25Nb3VzZU1vdmUodil9LDAsJDMpKCJtb3VzZXVwIixmdW5jdGlvbih2KXtyZXR1cm4gaC5vbk1vdXNlVXAodil9LCExLCQzKX0sb3V0cHV0czp7c2Nyb2xsZWRUb0JvdHRvbToic2Nyb2xsZWRUb0JvdHRvbSJ9LG5n''@;'; put 'put ''Q29udGVudFNlbGVjdG9yczpoOXQsZGVjbHM6OSx2YXJzOjEzLGNvbnN0czpbWyJzaWRlYmFyTmF2IiwiIl0sWyJpZCIsInNpZGViYXJOYXYiXSxbImNsYXNzIiwiZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgc3ViLWRyb3Bkb3duIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInAtMTAiLDQs''@;'; put 'put ''Im5nSWYiXSxbMSwibmF2LWRpdmlkZXIiXSxbMSwibmF2LXRyZWUiLDMsInNjcm9sbCJdLFsxLCJyZXNpemUtaGFuZGxlIiwzLCJtb3VzZWRvd24iXSxbMSwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciIsInN1Yi1kcm9wZG93biJdLFsiY2xyRHJvcGRvd25UcmlnZ2VyIiwiIiwx''@;'; put 'put ''LCJkcm9wZG93bi10b2dnbGUiLCJidG4iLCJidG4tcHJpbWFyeSJdLFsic2hhcGUiLCJjYXJldCBkb3duIl0sWzQsImNscklmT3BlbiJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwiIiwicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSIsMywiY2xpY2siLDQsIm5nSWYiXSxbImNsclZlcnRpY2Fs''@;'; put 'put ''TmF2TGluayIsIiIsInJvdXRlckxpbmsiLCIvdmlldy92aXlhLWFwaS1leHBsb3JlciIsInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiLDQsIm5nSWYiXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmsiLCIvdmlldy9saW5lYWdlIiwicm91dGVyTGlua0FjdGl2ZSIsImFj''@;'; put 'put ''dGl2ZSIsNCwibmdJZiJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwiIiwicm91dGVyTGluayIsIi92aWV3L21ldGFkYXRhIiwicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSIsNCwibmdJZiJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwiIiwicm91dGVyTGluayIsIi92aWV3L3VzZXJuYXYiLCJy''@;'; put 'put ''b3V0ZXJMaW5rQWN0aXZlIiwiYWN0aXZlIiw0LCJuZ0lmIl0sWyJjbHJWZXJ0aWNhbE5hdkxpbmsiLCIiLCJyb3V0ZXJMaW5rIiwiL3Jldmlldy9hcHByb3ZlL3N1Ym1pdHRlZCIsInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiLDQsIm5nSWYiXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIs''@;'; put 'put ''InJvdXRlckxpbmsiLCIvcmV2aWV3L2FwcHJvdmUvdG9hcHByb3ZlIiwicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSIsNCwibmdJZiJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwiIiwicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSIsMywiY2xpY2siXSxbImNsclZlcnRpY2FsTmF2TGluayIs''@;'; put 'put ''IiIsInJvdXRlckxpbmsiLCIvdmlldy92aXlhLWFwaS1leHBsb3JlciIsInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmsiLCIvdmlldy9saW5lYWdlIiwicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSJdLFsiY2xyVmVydGlj''@;'; put 'put ''YWxOYXZMaW5rIiwiIiwicm91dGVyTGluayIsIi92aWV3L21ldGFkYXRhIiwicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwiIiwicm91dGVyTGluayIsIi92aWV3L3VzZXJuYXYiLCJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0aXZlIl0sWyJjbHJWZXJ0''@;'; put 'put ''aWNhbE5hdkxpbmsiLCIiLCJyb3V0ZXJMaW5rIiwiL3Jldmlldy9hcHByb3ZlL3N1Ym1pdHRlZCIsInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmsiLCIvcmV2aWV3L2FwcHJvdmUvdG9hcHByb3ZlIiwicm91dGVyTGlua0Fj''@;'; put 'put ''dGl2ZSIsImFjdGl2ZSJdLFsxLCJwLTEwIl0sWyJjbHJUYWJMaW5rIiwiIiwxLCJ1c2VyLW5hdi1idG4iLDMsInJvdXRlckxpbmsiXSxbMSwiemVyby1tYXJnaW4iXSxbInNoYXBlIiwidXNlciJdLFsic2hhcGUiLCJ1c2VycyJdLFs0LCJjbHJJZkFjdGl2ZSJdLFs0LCJuZ0lmIl0sWyJzaGFw''@;'; put 'put ''ZSIsImJsb2Nrcy1ncm91cCJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwiIiwicm91dGVyTGluayIsIi9ob21lL3RhYmxlcyIsInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmsiLCIvaG9tZS9leGNlbC1tYXBzIiwicm91dGVy''@;'; put 'put ''TGlua0FjdGl2ZSIsImFjdGl2ZSJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwiIiwicm91dGVyTGluayIsIi9ob21lL211bHRpLWxvYWQiLCJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0aXZlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7aWYoMSZkKXtjb25zdCBmPUxuKCk7c2EoKSxkZSgwLCJj''@;'; put 'put ''bHItdmVydGljYWwtbmF2IiwxLDApLGd0KDIsTTl0LDYsMSwiZGl2IiwyKSgzLEE5dCwxNCw2LCJjbHItdGFicyIsMykoNCxEOXQsNiwxLCJkaXYiLDIpLEd0KDUsImRpdiIsNCksZGUoNiwiZGl2Iiw1KSxGdCgic2Nyb2xsIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksQ3QoaC5vblRyZWVT''@;'; put 'put ''Y3JvbGwoTSkpfSksWXIoNyksaGUoKSxkZSg4LCJzcGFuIiw2KSxGdCgibW91c2Vkb3duIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxDdChoLnJlc2l6ZVN0YXJ0KCkpfSksaGUoKSgpfTImZCYmKF9kKCJ3aWR0aCIsaC5zaWRlYmFyV2lkdGgsInB4IikoIm1heC13aWR0aCIsaC5zaWRlYmFy''@;'; put 'put ''TWF4V2lkdGgsInB4IiksVHIoImNsb3NlZCIsIWguc2lkZWJhck9wZW4pKCJyZXNpemluZyIsaC5yZXNpemluZyksZmUoMiksTWUoIm5nSWYiLGguaXNNYWluUm91dGUoInZpZXciKSksZmUoKSxNZSgibmdJZiIsaC5pc01haW5Sb3V0ZSgidmlldy91c2VybmF2IikpLGZlKCksTWUoIm5nSWYi''@;'; put 'put ''LGguaXNNYWluUm91dGUoImhvbWUiKSksZmUoNCksVHIoInJlc2l6aW5nIixoLnJlc2l6aW5nKSl9LGRlcGVuZGVuY2llczpbYmEsSGwsSHksTDIsX20sQ20seDcsd20seW0sUzcsUVksdEcsc2csZzcsbTcsYzEscHldLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24g''@;'; put 'put ''STl0KGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsMTMpfWZ1bmN0aW9uIFI5dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci1pY29uIiwxNCksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9UmUoMik7cmV0dXJuIGgubGlicmFyaWVzU2VhcmNoPSIiLEN0''@;'; put 'put ''KGgubGlicmFyeU9uRmlsdGVyKCkpfSksaGUoKX19ZnVuY3Rpb24gTDl0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLXRyZWUtbm9kZSIsOCkoMSwiZGl2Iiw5KSgyLCJpbnB1dCIsMTAsMCksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9''@;'; put 'put ''UmUoKTtyZXR1cm4gbWkoZi5saWJyYXJpZXNTZWFyY2gsaCl8fChmLmxpYnJhcmllc1NlYXJjaD1oKSxDdChoKX0pLEZ0KCJrZXl1cCIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS5saWJyYXJ5T25GaWx0ZXIoKSl9KSxoZSgpLGd0KDQsSTl0LDEsMCwiY2xyLWljb24iLDExKSg1''@;'; put 'put ''LFI5dCwxLDAsImNsci1pY29uIiwxMiksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1oYSgzKSxkPVJlKCk7ZmUoMikscGkoIm5nTW9kZWwiLGQubGlicmFyaWVzU2VhcmNoKSxmZSgyKSxNZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8MSksZmUoKSxNZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg+MCl9''@;'; put 'put ''fWZ1bmN0aW9uIE85dChjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDEzKX1mdW5jdGlvbiBQOXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItaWNvbiIsMTQpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKSxSZSgpO2NvbnN0IGg9aGEoMyksZj1SZSgyKS4kaW1wbGlj''@;'; put 'put ''aXQsdj1SZSgpO3JldHVybiBoLnZhbHVlPSIiLGYuc2VhcmNoU3RyaW5nPSIiLEN0KHYudHJlZU9uRmlsdGVyKGYsInRhYmxlcyIpKX0pLGhlKCl9fWZ1bmN0aW9uIEY5dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci10cmVlLW5vZGUiLDgpKDEsImRpdiIsOSkoMiwiaW5w''@;'; put 'put ''dXQiLDE5LDEpLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPVJlKDIpLiRpbXBsaWNpdDtyZXR1cm4gbWkoZi5zZWFyY2hTdHJpbmcsaCl8fChmLnNlYXJjaFN0cmluZz1oKSxDdChoKX0pLEZ0KCJrZXl1cCIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPVJl''@;'; put 'put ''KDIpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoUmUoKS50cmVlT25GaWx0ZXIoaCwidGFibGVzIikpfSksaGUoKSxndCg0LE85dCwxLDAsImNsci1pY29uIiwxMSkoNSxQOXQsMSwwLCJjbHItaWNvbiIsMTIpLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9aGEoMyksZD1SZSgyKS4kaW1wbGljaXQ7ZmUo''@;'; put 'put ''MikscGkoIm5nTW9kZWwiLGQuc2VhcmNoU3RyaW5nKSxmZSgyKSxNZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8MSksZmUoKSxNZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg+MCl9fWZ1bmN0aW9uIEg5dChjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDI2KX1mdW5jdGlvbiBOOXQoYyxsKXsxJmMm''@;'; put 'put ''Jkd0KDAsImNsci1pY29uIiwyNyl9ZnVuY3Rpb24gVjl0KGMsbCl7MSZjJiYoZGUoMCwiY2xyLXRvb2x0aXAtY29udGVudCIsMjkpKDEsInNwYW4iKSxMZSgyLCIgVG8gdW5sb2NrIGFsbCB0YWJsZXMsIGNvbnRhY3Qgc3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyAiKSxoZSgpKCkpfWZ1bmN0''@;'; put 'put ''aW9uIEI5dChjLGwpezEmYyYmKHNpKDApLGd0KDEsVjl0LDMsMCwiY2xyLXRvb2x0aXAtY29udGVudCIsMjgpLGxpKCkpfWZ1bmN0aW9uIGo5dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci10b29sdGlwIikoMSwiYnV0dG9uIiwyMSksRnQoImNsaWNrIixmdW5jdGlvbigp''@;'; put 'put ''e2NvbnN0IGg9d3QoYSkubmdWYXIsZj1SZSgpLiRpbXBsaWNpdCx2PVJlKDIpLiRpbXBsaWNpdCxNPVJlKCk7cmV0dXJuIEN0KGg/IiI6TS5vblRhYmxlQ2xpY2soZix2KSl9KSxzaSgyLDIyKSxndCgzLEg5dCwxLDAsImNsci1pY29uIiwyMykoNCxOOXQsMSwwLCJjbHItaWNvbiIsMjQpLGxp''@;'; put 'put ''KCksTGUoNSksaGUoKSxndCg2LEI5dCwyLDAsIm5nLWNvbnRhaW5lciIsMjUpLGhlKCl9aWYoMiZjKXtjb25zdCBhPWwubmdWYXIsZD1SZSgpLiRpbXBsaWNpdCxoPVJlKDIpLiRpbXBsaWNpdCxmPVJlKCk7ZmUoKSxUcigiZGMtbG9ja2VkLWNvbnRyb2wiLGEpKCJhY3RpdmUiLGYubGliVGFi''@;'; put 'put ''QWN0aXZlKGguTElCUkFSWVJFRixkKSksZmUoKSxNZSgibmdTd2l0Y2giLGQuaW5jbHVkZXMoIi1GQyIpKSxmZSgpLE1lKCJuZ1N3aXRjaENhc2UiLCEwKSxmZSgpLE1lKCJuZ1N3aXRjaENhc2UiLCExKSxmZSgpLElyKCIgIixkLnJlcGxhY2UoIi1GQyIsIiIpLCIgIiksZmUoKSxNZSgibmdJ''@;'; put 'put ''ZiIsYSl9fWZ1bmN0aW9uIHo5dChjLGwpe2lmKDEmYyYmKGRlKDAsImNsci10cmVlLW5vZGUiKSxndCgxLGo5dCw3LDksImNsci10b29sdGlwIiwyMCksaGUoKSksMiZjKXtjb25zdCBhPWwuaW5kZXgsZD1SZSgzKTtmZSgpLE1lKCJuZ1ZhciIsYSsxPmQubGljZW5jZVN0YXRlLnZhbHVlLnRh''@;'; put 'put ''Ymxlc19pbl9saWJyYXJ5X2xpbWl0KX19ZnVuY3Rpb24gVTl0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLXRyZWUtbm9kZSIsMTYpLEZ0KCJjbGljayIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1SZSgpLiRpbXBsaWNpdCx2PVJlKCk7cmV0dXJuIHYudHJlZU5vZGVD''@;'; put 'put ''bGlja2VkKGgsZiksQ3Qodi5saWI9Zi5MSUJSQVJZUkVGKX0pLGdpKCJjbHJFeHBhbmRlZENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1SZSgpLiRpbXBsaWNpdDtyZXR1cm4gbWkoZi5leHBhbmRlZCxoKXx8KGYuZXhwYW5kZWQ9aCksQ3QoaCl9KSxkZSgxLCJwIiwxNyksRnQo''@;'; put 'put ''ImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9UmUoKS4kaW1wbGljaXQsZj1SZSgpO3JldHVybiBmLmxpYj1oLkxJQlJBUllSRUYsQ3QoZi5saWJyYXJ5T25DbGljayhoLkxJQlJBUllSRUYsaCkpfSksR3QoMiwiY2xyLWljb24iLDE4KSxMZSgzKSxoZSgpLGd0KDQsRjl0LDYsMywi''@;'; put 'put ''Y2xyLXRyZWUtbm9kZSIsMikoNSx6OXQsMiwxLCJjbHItdHJlZS1ub2RlIiwzKSxoZSgpfWlmKDImYyl7Y29uc3QgYT1SZSgpLiRpbXBsaWNpdDtUcigiY2xyLWV4cGFuZGVkIixhLmV4cGFuZGVkKSxwaSgiY2xyRXhwYW5kZWQiLGEuZXhwYW5kZWQpLE1lKCJjbHJMb2FkaW5nIixhLmxvYWRp''@;'; put 'put ''bmdUYWJsZXMmJiFhLnRhYmxlcyksZmUoMyksSXIoIiAiLGEuTElCUkFSWVJFRiwiICIpLGZlKCksTWUoIm5nSWYiLGEudGFibGVzKSxmZSgpLE1lKCJuZ0Zvck9mIixhLnRhYmxlcyl9fWZ1bmN0aW9uIFo5dChjLGwpe2lmKDEmYyYmKHNpKDApLGd0KDEsVTl0LDYsNywiY2xyLXRyZWUtbm9k''@;'; put 'put ''ZSIsMTUpLGxpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgpLE1lKCJuZ0lmIiwhYS5oaWRkZW4pfX1mdW5jdGlvbiBXOXQoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDMwKSgxLCJkaXYiLDMxKSgyLCJzcGFuIiwzMiksTGUoMywiIExvYWRpbmcuLi4gIiksaGUoKSgpKCkpfWZ1bmN0''@;'; put 'put ''aW9uIFk5dChjLGwpezEmYyYmKGRlKDAsInAiLDM2KSxMZSgxLCIgUGxlYXNlIHNlbGVjdCBhIHRhYmxlICIpLGhlKCkpfWZ1bmN0aW9uIEc5dChjLGwpezEmYyYmKGRlKDAsInAiLDM2KSxMZSgxLCIgTm8gRWRpdGFibGUgVGFibGVzIENvbmZpZ3VyZWQgIiksaGUoKSl9ZnVuY3Rpb24gJDl0''@;'; put 'put ''KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwzMyksR3QoMSwiaW1nIiwzNCksZ3QoMixZOXQsMiwwLCJwIiwzNSkoMyxHOXQsMiwwLCJwIiwzNSksaGUoKSksMiZjKXtjb25zdCBhPVJlKCk7ZmUoMiksTWUoIm5nSWYiLChudWxsPT1hLnRyZWVOb2RlTGlicmFyaWVzP251bGw6YS50cmVlTm9k''@;'; put 'put ''ZUxpYnJhcmllcy5sZW5ndGgpPjApLGZlKCksTWUoIm5nSWYiLChudWxsPT1hLnRyZWVOb2RlTGlicmFyaWVzP251bGw6YS50cmVlTm9kZUxpYnJhcmllcy5sZW5ndGgpPDEpfX1sZXQgSzl0PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0pe3RoaXMucm91dGU9YSx0aGlz''@;'; put 'put ''LnJvdXRlcj1kLHRoaXMubGljZW5jZVNlcnZpY2U9aCx0aGlzLmhlbHBlclNlcnZpY2U9Zix0aGlzLmV2ZW50U2VydmljZT12LHRoaXMuc2FzU2VydmljZT1NLHRoaXMudHJlZU5vZGVMaWJyYXJpZXM9bnVsbCx0aGlzLmxpYnJhcmllc1NlYXJjaD0iIix0aGlzLmxpYj0iIix0aGlzLnRhYmxl''@;'; put 'put ''PSIiLHRoaXMuZW5jb2Rpbmc9IlVURi04Iix0aGlzLmxvYWRpbmc9ITAsdGhpcy5saWNlbmNlU3RhdGU9dGhpcy5saWNlbmNlU2VydmljZS5saWNlbmNlU3RhdGV9Y29sbGFwc2VMaWJyYXJ5SXRlbXMoYSxkKXthLmZvckVhY2goaD0+e2guTElCUkFSWUlEIT09ZC5MSUJSQVJZSUQmJihoLmV4''@;'; put 'put ''cGFuZGVkPSExKX0pfXRyZWVOb2RlQ2xpY2tlZChhLGQpeyJDb2xsYXBzZSI9PT1hLnRhcmdldC50aXRsZSYmdGhpcy5jb2xsYXBzZUxpYnJhcnlJdGVtcyh0aGlzLmxpYnJhcmllcyxkKX1saWJyYXJ5T25DbGljayhhLGQpe2QuZXhwYW5kZWQ9IWQuZXhwYW5kZWQsZC5leHBhbmRlZCYmIXRo''@;'; put 'put ''aXMudGFibGUmJnRoaXMuc2VsZWN0TGlicmFyeShhLCExLGQpLHRoaXMuY29sbGFwc2VMaWJyYXJ5SXRlbXModGhpcy5saWJyYXJpZXMsZCl9c2VsZWN0TGlicmFyeShhLGQsaCl7aC5sb2FkaW5nVGFibGVzPSEwO2xldCBmLHY9W107aWYodGhpcy5saWJzQW5kVGFibGVzJiYoZj10aGlzLmxp''@;'; put 'put ''YnNBbmRUYWJsZXNbYV0sdGhpcy50YWJsZT12b2lkIDAsIlBsZWFzZSBzZWxlY3QgbGlicmFyeSIhPT1hKSl7bGV0IE09Zi5maWx0ZXIoZnVuY3Rpb24oRCl7cmV0dXJuLTE9PT12LmluZGV4T2YoRCkmJih2LnB1c2goRCksITApfSk7dGhpcy50YWJsZXM9TSxLbi5lZGl0b3IubGlicmFyaWVz''@;'; put 'put ''PXRoaXMubGlicmFyaWVzfUtuLmVkaXRvci5saWJyYXJ5PWEsZHx8dGhpcy5jbGVhckdsb2JhbHNGaWx0ZXIoKSxoLmxvYWRpbmdUYWJsZXM9ITEsaC5leHBhbmRlZD0hMH1zZWxlY3RUYWJsZShhLGQpe3ZhciBoPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2gubGliVGFiPWgubGliKyIu''@;'; put 'put ''IitoLnRhYmxlLGguc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLEtuLmVkaXRvci50YWJsZT1hLGR8fGguY2xlYXJHbG9iYWxzRmlsdGVyKCl9KSgpfWNsZWFyR2xvYmFsc0ZpbHRlcigpe0tuLmVkaXRvci5maWx0ZXIubGliZHM9IiIsS24uZWRpdG9yLmZpbHRlci53aGVyZUNsYXVzZT0i''@;'; put 'put ''IixLbi5lZGl0b3IuZmlsdGVyLmdyb3VwTG9naWM9IiIsS24uZWRpdG9yLmZpbHRlci5jbGF1c2VzPVtdLEtuLmVkaXRvci5maWx0ZXIudmFscz1bXSxLbi5lZGl0b3IuZmlsdGVyLmNvbHM9W119bGliVGFiQWN0aXZlKGEsZCl7cmV0dXJuISghdGhpcy5saWJ8fCF0aGlzLnRhYmxlKSYmYT09''@;'; put 'put ''PXRoaXMubGliJiZkPT09dGhpcy50YWJsZX10cmVlT25GaWx0ZXIoYSxkKXt0aGlzLmhlbHBlclNlcnZpY2UudHJlZU9uRmlsdGVyKGEsZCl9bGlicmFyeU9uRmlsdGVyKCl7dGhpcy5oZWxwZXJTZXJ2aWNlLmxpYnJhcnlPbkZpbHRlcih0aGlzLnRyZWVOb2RlTGlicmFyaWVzLHRoaXMubGli''@;'; put 'put ''cmFyaWVzU2VhcmNoLCJMSUJSQVJZUkVGIiksS24ubGluZWFnZS5saWJyYXJpZXNTZWFyY2g9dGhpcy5saWJyYXJpZXNTZWFyY2h9b25UYWJsZUNsaWNrKGEsZCl7dGhpcy50YWJsZT1hLHRoaXMubGliPWQuTElCUkFSWVJFRix0aGlzLnNlbGVjdFRhYmxlKGEpLHRoaXMuZWRpdFRhYmxlKCl9''@;'; put 'put ''ZWRpdFRhYmxlKCl7dGhpcy5yb3V0ZS5uYXZpZ2F0ZUJ5VXJsKCIvZWRpdG9yLyIrdGhpcy5saWIrIi4iK3RoaXMudGFibGUpfWdldExpYnJhcnlUYWJsZVN0YXRlKCl7aWYobnVsbCE9PUtuLmVkaXRvci50cmVlTm9kZUxpYnJhcmllcyYmKHRoaXMudHJlZU5vZGVMaWJyYXJpZXM9S24uZWRp''@;'; put 'put ''dG9yLnRyZWVOb2RlTGlicmFyaWVzKSwiIiE9PUtuLmVkaXRvci5saWJyYXJ5KXt0aGlzLmxpYj1Lbi5lZGl0b3IubGlicmFyeTtsZXQgYT1udWxsO3RoaXMudHJlZU5vZGVMaWJyYXJpZXMmJihhPXRoaXMudHJlZU5vZGVMaWJyYXJpZXMuZmluZChkPT5kLkxJQlJBUllSRUY9PT10aGlzLmxp''@;'; put 'put ''YikpLHRoaXMuc2VsZWN0TGlicmFyeShLbi5lZGl0b3IubGlicmFyeSwhMCxhKX19Z2V0RnJvbUdsb2JhbHMoKXt0aGlzLmxpYnNBbmRUYWJsZXM9S24uZWRpdG9yLmxpYnNBbmRUYWJsZXMsdGhpcy5saWJyYXJpZXM9S24uZWRpdG9yLmxpYnJhcmllcyx0aGlzLmdldExpYnJhcnlUYWJsZVN0''@;'; put 'put ''YXRlKCksdGhpcy5sb2FkaW5nPSExfW5nQWZ0ZXJDb250ZW50SW5pdCgpe0tuLmVkaXRvci5zdGFydHVwU2V0P3RoaXMuZ2V0RnJvbUdsb2JhbHMoKTp0aGlzLmV2ZW50U2VydmljZS5vblN0YXJ0dXBEYXRhTG9hZGVkLnN1YnNjcmliZSgoKT0+e3RoaXMuZ2V0RnJvbUdsb2JhbHMoKX0pfXN0''@;'; put 'put ''YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKExzKSxHZShDdSksR2UodTEpLEdlKFN1KSxHZSh2YyksR2UoR3MpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImhvbWUtY29tcG9uZW50Il1dLGhvc3RBdHRy''@;'; put 'put ''czpbMSwiY29udGVudC1jb250YWluZXIiXSxkZWNsczo4LHZhcnM6NCxjb25zdHM6W1sic2VhcmNoTGliVHJlZUlucHV0IiwiIl0sWyJzZWFyY2hUcmVlSW5wdXQiLCIiXSxbImNsYXNzIiwic2VhcmNoLW5vZGUiLDQsIm5nSWYiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImNvbnRlbnQt''@;'; put 'put ''YXJlYSJdLFsxLCJjYXJkLWJsb2NrIl0sWyJjbGFzcyIsInNwaW5uZXItd3JhcHBlci1mdWxscGFnZSIsNCwibmdJZiJdLFsiY2xhc3MiLCJuby10YWJsZS1zZWxlY3RlZCIsNCwibmdJZiJdLFsxLCJzZWFyY2gtbm9kZSJdLFsxLCJ0cmVlLXNlYXJjaC13cmFwcGVyIl0sWyJjbHJJbnB1dCIs''@;'; put 'put ''IiIsImFwcFN0ZWFsRm9jdXMiLCIiLCJwbGFjZWhvbGRlciIsIkxpYnJhcmllcyIsIm5hbWUiLCJpbnB1dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsMywibmdNb2RlbENoYW5nZSIsImtleXVwIiwibmdNb2RlbCJdLFsic2hhcGUiLCJzZWFyY2giLDQsIm5nSWYiXSxbInNoYXBlIiwidGltZXMi''@;'; put 'put ''LDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInNlYXJjaCJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siXSxbMywiY2xyRXhwYW5kZWQiLCJjbHJMb2FkaW5nIiwiY2xyLWV4cGFuZGVkIiwiY2xpY2siLCJjbHJFeHBhbmRlZENoYW5nZSIsNCwibmdJZiJdLFszLCJjbGljayIsImNs''@;'; put 'put ''ckV4cGFuZGVkQ2hhbmdlIiwiY2xyRXhwYW5kZWQiLCJjbHJMb2FkaW5nIl0sWzEsIm0tMCIsImN1cnNvci1wb2ludGVyIiwzLCJjbGljayJdLFsic2hhcGUiLCJyYWNrLXNlcnZlciJdLFsiYXBwU3RlYWxGb2N1cyIsIiIsImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJUYWJsZXMiLCJu''@;'; put 'put ''YW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCIsIm5nTW9kZWwiXSxbNCwibmdWYXIiXSxbImNsclRvb2x0aXBUcmlnZ2VyIiwiIiwxLCJjbHItdHJlZW5vZGUtbGluayIsMywiY2xpY2siXSxbMywibmdTd2l0Y2giXSxbInNoYXBlIiwi''@;'; put 'put ''Ym9sdCIsNCwibmdTd2l0Y2hDYXNlIl0sWyJzaGFwZSIsInRhYmxlIiw0LCJuZ1N3aXRjaENhc2UiXSxbNCwibmdJZiJdLFsic2hhcGUiLCJib2x0Il0sWyJzaGFwZSIsInRhYmxlIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1yaWdodCIsImNsclNpemUiLCJsZyIsNCwiY2xySWZPcGVuIl0s''@;'; put 'put ''WyJjbHJQb3NpdGlvbiIsImJvdHRvbS1yaWdodCIsImNsclNpemUiLCJsZyJdLFsxLCJzcGlubmVyLXdyYXBwZXItZnVsbHBhZ2UiXSxbMSwibG9hZGluZ1NwaW5uZXIiXSxbMSwic3Bpbm5lciJdLFsxLCJuby10YWJsZS1zZWxlY3RlZCJdLFsic3JjIiwiL1NBU1N0b3JlZFByb2Nlc3MvP19Q''@;'; put 'put ''Uk9HUkFNPXBaS2Q2Rjk1akVDdlJRbE4wTENmZEE9PS93ZWI5L2ltYWdlcy9zZWxlY3QtdGFibGUtcG5nIiwiYWx0Iiwic2VsZWN0IHRhYmxlIGljb24iLDEsInNlbGVjdC10YWJsZS1pY29uIl0sWyJjbGFzcyIsInRleHQtY2VudGVyIGNvbG9yLWdyYXkgbXQtMTAiLCJjZHMtdGV4dCIsInNl''@;'; put 'put ''Y3Rpb24iLDQsIm5nSWYiXSxbImNkcy10ZXh0Iiwic2VjdGlvbiIsMSwidGV4dC1jZW50ZXIiLCJjb2xvci1ncmF5IiwibXQtMTAiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJihkZSgwLCJhcHAtc2lkZWJhciIpKDEsImNsci10cmVlIiksZ3QoMixMOXQsNiwzLCJjbHItdHJlZS1u''@;'; put 'put ''b2RlIiwyKSgzLFo5dCwyLDEsIm5nLWNvbnRhaW5lciIsMyksaGUoKSgpLGRlKDQsImRpdiIsNCkoNSwiZGl2Iiw1KSxndCg2LFc5dCw0LDAsImRpdiIsNikoNywkOXQsNCwyLCJkaXYiLDcpLGhlKCkoKSksMiZkJiYoZmUoMiksTWUoIm5nSWYiLChudWxsPT1oLnRyZWVOb2RlTGlicmFyaWVz''@;'; put 'put ''P251bGw6aC50cmVlTm9kZUxpYnJhcmllcy5sZW5ndGgpPjApLGZlKCksTWUoIm5nRm9yT2YiLGgudHJlZU5vZGVMaWJyYXJpZXMpLGZlKDMpLE1lKCJuZ0lmIixoLmxvYWRpbmcpLGZlKCksTWUoIm5nSWYiLCFoLmxvYWRpbmcpKX0sZGVwZW5kZW5jaWVzOltxbCxubCwkcyxFaCxQZCxmZyxI''@;'; put 'put ''bCxqMCxMMixaMSx2Nyx5NyxiNyxpNCxucyxiYSxTMixjcCxTdyxyNF0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKTtjb25zdCBxOXQ9Yz0+e2Zvcihjb25zdCBsIGluIGMpaWYoIl9fcm93TnVtX18iIT09bClyZXR1cm4hMTtyZXR1cm4hMH0sZXRlPWM9Pntjb25zdCBhPWMubWF0''@;'; put 'put ''Y2goL1JcWyhcZCspXF1DXFsoXGQrKVxdLyk7cmV0dXJuIGE/e3JvdzpwYXJzZUludChhWzFdLDEwKSxjb2x1bW46cGFyc2VJbnQoYVsyXSwxMCl9Om51bGx9LFY2ZT0oYyxsKT0+e2lmKGMuc3RhcnRzV2l0aCgiQUJTT0xVVEUgIikmJihjPWMucmVwbGFjZSgiQUJTT0xVVEUgIiwiIikpLGMu''@;'; put 'put ''c3RhcnRzV2l0aCgiUkVMQVRJVkUgIikpe2NvbnN0IGE9ZXRlKGMpO2lmKGEpe2NvbnN0e3JvdzpkLGNvbHVtbjpofT1hO2M9RHUudXRpbHMuZW5jb2RlX2NlbGwoe3I6ZC0xLGM6aC0xfSl9fWlmKGMuc3RhcnRzV2l0aCgiTUFUQ0ggIikpe2xldCBhPSIiO2NvbnN0IGQ9Yy5tYXRjaCgvQ1xb''@;'; put 'put ''XGQrXF06KC4rKS8pO2QmJihhPWRbMV0pO2NvbnN0IGY9Yy5zcGxpdCgiICIpWzFdO2xldCB2PSIiLE09LTEsRD0iIjtpZihpc05hTihOdW1iZXIoZikpP3Y9ZjpNPXBhcnNlSW50KGYpLC0xIT09TSl7Y29uc3QgY2U9bFtNLTFdO2Zvcihjb25zdCBiZSBpbiBjZSlpZigiX19yb3dOdW1fXyIh''@;'; put 'put ''PT1iZSYmY2VbYmVdPT09YSl7RD1iZStNO2JyZWFrfX1lbHNlIGZvcihsZXQgY2U9MDtjZTxsLmxlbmd0aDtjZSsrKWlmKGxbY2VdW3ZdPT09YSl7RD12KyhjZSsxKTticmVha31jb25zdCBaPUR1LnV0aWxzLmRlY29kZV9jZWxsKEQpLHJlPWV0ZShjKTtpZihyZSl7Y29uc3R7cm93OmNlLGNv''@;'; put 'put ''bHVtbjpiZX09cmU7Yz1EdS51dGlscy5lbmNvZGVfY2VsbCh7cjpaLnIrY2UsYzpaLmMrYmV9KX19cmV0dXJuIGN9LEo5dD1bImZpbGVVcGxvYWRJbnB1dCJdO2Z1bmN0aW9uIFE5dChjLGwpezEmYyYmKGRlKDAsImRpdiIsMjgpLEd0KDEsImNsci1zcGlubmVyIiwyOSksaGUoKSl9ZnVuY3Rp''@;'; put 'put ''b24gZXZ0KGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsMzApfWZ1bmN0aW9uIHR2dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci1pY29uIiwzMSksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9UmUoKTtyZXR1cm4gaC5zZWFyY2hTdHJpbmc9IiIsQ3Qo''@;'; put 'put ''aC54bG1hcExpc3RPbkZpbHRlcigpKX0pLGhlKCl9fWZ1bmN0aW9uIG52dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO3NpKDApLGRlKDEsImNsci10cmVlLW5vZGUiKSgyLCJidXR0b24iLDMyKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKS4kaW1wbGljaXQ7cmV0dXJu''@;'; put 'put ''IEN0KFJlKCkueGxtYXBPbkNsaWNrKGgpKX0pLEd0KDMsImNsci1pY29uIiwzMyksTGUoNCksaGUoKSgpLGxpKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9UmUoKTtmZSgyKSxUcigiYWN0aXZlIixkLmlzQWN0aXZlWExNYXAoYS5pZCkpLGZlKDIpLElyKCIgIixhLmlkLCIgIil9''@;'; put 'put ''fWZ1bmN0aW9uIHJ2dChjLGwpezEmYyYmKGRlKDAsInAiLDM3KSxMZSgxLCIgUGxlYXNlIHNlbGVjdCBhIG1hcCAiKSxoZSgpKX1mdW5jdGlvbiBpdnQoYyxsKXsxJmMmJihkZSgwLCJwIiwzNyksTGUoMSwiIE5vIGV4Y2VsIG1hcCBpcyBmb3VuZCAiKSxoZSgpKX1mdW5jdGlvbiBhdnQoYyxs''@;'; put 'put ''KXtpZigxJmMmJihkZSgwLCJkaXYiLDM0KSxHdCgxLCJpbWciLDM1KSxndCgyLHJ2dCwyLDAsInAiLDM2KSgzLGl2dCwyLDAsInAiLDM2KSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoKTtmZSgyKSxNZSgibmdJZiIsYS54bG1hcHMubGVuZ3RoPjApLGZlKCksTWUoIm5nSWYiLGEueGxtYXBzLmxl''@;'; put 'put ''bmd0aDwxKX19ZnVuY3Rpb24gb3Z0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwzOCkoMSwic3BhbiIsMzkpLExlKDIsIiBMb2FkaW5nLi4uICIpLGhlKCksZGUoMywiZGl2IikoNCwiaDQiKSxMZSg1KSxoZSgpKCkoKSksMiZjKXtjb25zdCBhPVJlKCk7ZmUoNSksd3IoYS5pc0xvYWRpbmdE''@;'; put 'put ''ZXNjKX19ZnVuY3Rpb24gc3Z0KGMsbCl7MSZjJiZHdCgwLCJjbHItdGFiLWNvbnRlbnQiKX1mdW5jdGlvbiBsdnQoYyxsKXsxJmMmJkd0KDAsImNsci10YWItY29udGVudCIpfWZ1bmN0aW9uIGN2dChjLGwpezEmYyYmRmwoMCl9ZnVuY3Rpb24gdXZ0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxu''@;'; put 'put ''KCk7ZGUoMCwiZGl2Iiw0MCksRnQoImZpbGVEcmFnZ2VkT3ZlciIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS5vblNob3dVcGxvYWRNb2RhbCgpKX0pLGRlKDEsImNsci10YWJzIikoMiwiY2xyLXRhYiIpKDMsImJ1dHRvbiIsNDEpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChh''@;'; put 'put ''KTtjb25zdCBoPVJlKCk7cmV0dXJuIEN0KGguc2VsZWN0ZWRUYWI9aC5UYWJzRW51bS5SdWxlcyl9KSxMZSg0LCJSdWxlcyIpLGhlKCksZ3QoNSxzdnQsMSwwLCJjbHItdGFiLWNvbnRlbnQiLDQyKSxoZSgpLGRlKDYsImNsci10YWIiKSg3LCJidXR0b24iLDQxKSxGdCgiY2xpY2siLGZ1bmN0''@;'; put 'put ''aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSgpO3JldHVybiBDdChoLnNlbGVjdGVkVGFiPWguVGFic0VudW0uRGF0YSl9KSxMZSg4LCJEYXRhIiksaGUoKSxndCg5LGx2dCwxLDAsImNsci10YWItY29udGVudCIsNDIpLGhlKCkoKSxndCgxMCxjdnQsMSwwLCJuZy1jb250YWluZXIiLDQzKSxkZSgx''@;'; put 'put ''MSwiZGl2Iiw0NCkoMTIsImgzIiw0NSksTGUoMTMpLGhlKCksZGUoMTQsImkiLDQ1KSxMZSgxNSksaGUoKSxkZSgxNiwicCIsNDUpLExlKDE3LCIgUnVsZXMgU291cmNlOiAiKSxkZSgxOCwiYSIsNDYpLExlKDE5KSxoZSgpKCksZGUoMjAsInAiLDQ1KSxMZSgyMSwiIFRhcmdldCBkYXRhc2V0''@;'; put 'put ''OiAiKSxkZSgyMiwiYSIsNDYpLExlKDIzKSxoZSgpKCkoKSxkZSgyNCwiZGl2Iiw0NyksR3QoMjUsImhvdC10YWJsZSIsNDgpLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9UmUoKSxkPWhhKDQxKTtmZSg1KSxNZSgiY2xySWZBY3RpdmUiLGEuc2VsZWN0ZWRUYWI9PT1hLlRhYnNFbnVtLlJ1bGVz''@;'; put 'put ''KSxmZSg0KSxNZSgiY2xySWZBY3RpdmUiLGEuc2VsZWN0ZWRUYWI9PT1hLlRhYnNFbnVtLkRhdGEpLGZlKCksTWUoIm5nVGVtcGxhdGVPdXRsZXQiLGQpLGZlKDMpLElyKCIgIixhLnNlbGVjdGVkWExNYXAuaWQsIiAiKSxmZSgyKSx3cihhLnNlbGVjdGVkWExNYXAuZGVzY3JpcHRpb24pLGZl''@;'; put 'put ''KDMpLE1lKCJyb3V0ZXJMaW5rIiwiL3ZpZXcvZGF0YS8iK2EucnVsZXNTb3VyY2UpLGZlKCksSXIoIiAiLGEucnVsZXNTb3VyY2UsIiAiKSxmZSgzKSxNZSgicm91dGVyTGluayIsIi92aWV3L2RhdGEvIithLnNlbGVjdGVkWExNYXAudGFyZ2V0RFMpLGZlKCksSXIoIiAiLGEuc2VsZWN0ZWRY''@;'; put 'put ''TE1hcC50YXJnZXREUywiICIpLGZlKDIpLE1lKCJtdWx0aUNvbHVtblNvcnRpbmciLCEwKSgidmlld3BvcnRSb3dSZW5kZXJpbmdPZmZzZXQiLDUwKSgiZGF0YSIsYS5zZWxlY3RlZFRhYj09PWEuVGFic0VudW0uUnVsZXM/YS54bG1hcFJ1bGVzOmEueGxEYXRhKSgiY29sSGVhZGVycyIsYS5z''@;'; put 'put ''ZWxlY3RlZFRhYj09PWEuVGFic0VudW0uUnVsZXM/YS54bG1hcFJ1bGVzSGVhZGVyczphLnhsVXBsb2FkSGVhZGVyKSgiY29sdW1ucyIsYS5zZWxlY3RlZFRhYj09PWEuVGFic0VudW0uUnVsZXM/YS54bG1hcFJ1bGVzQ29sdW1uczphLnhsVXBsb2FkQ29sdW1ucykoImZpbHRlcnMiLCEwKSgi''@;'; put 'put ''aGVpZ2h0IiwiMTAwJSIpKCJhZnRlckdldENvbEhlYWRlciIsYS5hZnRlckdldENvbEhlYWRlcikoIm1vZGlmeUNvbFdpZHRoIixhLm1heFdpZHRoQ2hlY2tlcikoImNlbGxzIixhLmdldENlbGxDb25maWd1cmF0aW9uKSgibWF4Um93cyIsYS5ob3RUYWJsZU1heFJvd3MpKCJtYW51YWxDb2x1''@;'; put 'put ''bW5SZXNpemUiLCEwKSgicm93SGVhZGVycyIsYS5yb3dIZWFkZXJzKSgicm93SGVhZGVyV2lkdGgiLDE1KSgicm93SGVpZ2h0cyIsMjApKCJsaWNlbnNlS2V5IixhLmhvdFRhYmxlTGljZW5zZUtleSl9fWZ1bmN0aW9uIGR2dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIs''@;'; put 'put ''NTEpKDEsImJ1dHRvbiIsNTIpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoMikub25TaG93VXBsb2FkTW9kYWwoKSl9KSxHdCgyLCJjbHItaWNvbiIsNTMpLGRlKDMsInNwYW4iKSxMZSg0LCJVcGxvYWQiKSxoZSgpKCkoKX19ZnVuY3Rpb24gaHZ0KGMsbCl7aWYo''@;'; put 'put ''MSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2Iiw1MSkoMSwiYnV0dG9uIiw1MiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgyKS5zdWJtaXRFeGNlbCgpKX0pLEd0KDIsImNsci1pY29uIiw1MyksZGUoMywic3BhbiIpLExlKDQsIlN1Ym1pdCIpLGhlKCkoKSgp''@;'; put 'put ''fX1mdW5jdGlvbiBmdnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiLDUxKSgxLCJidXR0b24iLDU0KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKDIpLmRpc2NhcmRFeHRyYWN0ZWREYXRhKCkpfSksR3QoMiwiY2xyLWljb24iLDU1KSxkZSgz''@;'; put 'put ''LCJzcGFuIiksTGUoNCwiRGlzY2FyZCIpLGhlKCkoKSgpfX1mdW5jdGlvbiBwdnQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDQ5KSxndCgxLGR2dCw1LDAsImRpdiIsNTApKDIsaHZ0LDUsMCwiZGl2Iiw1MCkoMyxmdnQsNSwwLCJkaXYiLDUwKSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoKTtm''@;'; put 'put ''ZSgpLE1lKCJuZ0lmIixhLnN0YXR1cz09PWEuU3RhdHVzRW51bS5SZWFkeVRvVXBsb2FkKSxmZSgpLE1lKCJuZ0lmIixhLnN0YXR1cz09PWEuU3RhdHVzRW51bS5SZWFkeVRvU3VibWl0KSxmZSgpLE1lKCJuZ0lmIixhLnN0YXR1cz09PWEuU3RhdHVzRW51bS5SZWFkeVRvU3VibWl0KX19dmFy''@;'; put 'put ''IHJmPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuTm9NYXBTZWxlY3RlZD0wXT0iTm9NYXBTZWxlY3RlZCIsY1tjLkZldGNoaW5nUnVsZXM9MV09IkZldGNoaW5nUnVsZXMiLGNbYy5SZWFkeVRvVXBsb2FkPTJdPSJSZWFkeVRvVXBsb2FkIixjW2MuRXh0cmFjdGluZ0RhdGE9M109IkV4dHJhY3Rp''@;'; put 'put ''bmdEYXRhIixjW2MuUmVhZHlUb1N1Ym1pdD00XT0iUmVhZHlUb1N1Ym1pdCIsY1tjLlN1Ym1pdHRpbmdFeHRyYWN0ZWREYXRhPTVdPSJTdWJtaXR0aW5nRXh0cmFjdGVkRGF0YSIsY1tjLlN1Ym1pdHRpbmc9Nl09IlN1Ym1pdHRpbmciLGN9KHJmfHx7fSksTXc9ZnVuY3Rpb24oYyl7cmV0dXJu''@;'; put 'put ''IGNbYy5SdWxlcz0wXT0iUnVsZXMiLGNbYy5EYXRhPTFdPSJEYXRhIixjfShNd3x8e30pO2xldCBCNmU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSxEKXt0aGlzLmV2ZW50U2VydmljZT1hLHRoaXMubGljZW5jZVNlcnZpY2U9ZCx0aGlzLmxvZ2dlclNlcnZpY2U9aCx0''@;'; put 'put ''aGlzLnJvdXRlPWYsdGhpcy5yb3V0ZXI9dix0aGlzLnNhc1N0b3JlU2VydmljZT1NLHRoaXMuc2FzU2VydmljZT1ELHRoaXMuY29udGVudENvbnRhaW5lckNsYXNzPSEwLHRoaXMuZmlsZVVwbG9hZElucHV0Q29tcExpc3Q9bmV3IGZkLHRoaXMuU3RhdHVzRW51bT1yZix0aGlzLlRhYnNFbnVt''@;'; put 'put ''PU13LHRoaXMuc2VsZWN0ZWRUYWI9TXcuUnVsZXMsdGhpcy5ydWxlc1NvdXJjZT1Lbi5kY0xpYisiLk1QRV9YTE1BUF9SVUxFUyIsdGhpcy54bG1hcHM9W10sdGhpcy5zZWxlY3RlZFhMTWFwPXZvaWQgMCx0aGlzLnNlYXJjaFN0cmluZz0iIix0aGlzLnhsbWFwc0xvYWRpbmc9ITAsdGhpcy5p''@;'; put 'put ''c0xvYWRpbmc9ITEsdGhpcy5pc0xvYWRpbmdEZXNjPSIiLHRoaXMuc3RhdHVzPXJmLk5vTWFwU2VsZWN0ZWQsdGhpcy54bG1hcFJ1bGVzSGVhZGVycz1bIlhMTUFQX1NIRUVUIiwiWExNQVBfUkFOR0VfSUQiLCJYTE1BUF9TVEFSVCIsIlhMTUFQX0ZJTklTSCJdLHRoaXMueGxtYXBSdWxlc0Nv''@;'; put 'put ''bHVtbnM9W3tkYXRhOiJYTE1BUF9TSEVFVCJ9LHtkYXRhOiJYTE1BUF9SQU5HRV9JRCJ9LHtkYXRhOiJYTE1BUF9TVEFSVCJ9LHtkYXRhOiJYTE1BUF9GSU5JU0gifV0sdGhpcy54bG1hcFJ1bGVzPVtdLHRoaXMueGxVcGxvYWRIZWFkZXI9WyJYTE1BUF9SQU5HRV9JRCIsIlJPV19OTyIsIkNP''@;'; put 'put ''TF9OTyIsIlZBTFVFX1RYVCJdLHRoaXMueGxVcGxvYWRDb2x1bW5zPVt7ZGF0YToiWExNQVBfUkFOR0VfSUQifSx7ZGF0YToiUk9XX05PIn0se2RhdGE6IkNPTF9OTyJ9LHtkYXRhOiJWQUxVRV9UWFQifV0sdGhpcy54bERhdGE9W10sdGhpcy5zaG93VXBsb2FkTW9kYWw9ITEsdGhpcy5oYXNC''@;'; put 'put ''YXNlRHJvcFpvbmVPdmVyPSExLHRoaXMuZmlsZW5hbWU9IiIsdGhpcy5zdWJtaXRMaW1pdE5vdGljZT0hMSx0aGlzLnVwbG9hZGVyPW5ldyBQZWUsdGhpcy5saWNlbmNlU3RhdGU9dGhpcy5saWNlbmNlU2VydmljZS5saWNlbmNlU3RhdGUsdGhpcy5ob3RUYWJsZUxpY2Vuc2VLZXk9dm9pZCAw''@;'; put 'put ''LHRoaXMuaG90VGFibGVNYXhSb3dzPXRoaXMubGljZW5jZVN0YXRlLnZhbHVlLnZpZXdlcl9yb3dzX2FsbG93ZWR8fDEvMH1hZnRlckdldENvbEhlYWRlcihhLGQpe2QuY2xhc3NMaXN0LmFkZChLbi5oYW5kc29udGFibGUuZGFya1RhYmxlSGVhZGVyQ2xhc3MpfXhsbWFwT25DbGljayhhKXth''@;'; put 'put ''LmlkIT09dGhpcy5zZWxlY3RlZFhMTWFwPy5pZCYmKHRoaXMuc2VsZWN0ZWRYTE1hcD1hLHRoaXMueGxEYXRhPVtdLHRoaXMuZmlsZW5hbWU9IiIsdGhpcy51cGxvYWRlci5xdWV1ZT1bXSx0aGlzLmZpbGVVcGxvYWRJbnB1dENvbXBMaXN0LmZpcnN0JiYodGhpcy5maWxlVXBsb2FkSW5wdXRD''@;'; put 'put ''b21wTGlzdC5maXJzdC5uYXRpdmVFbGVtZW50LnZhbHVlPSIiKSx0aGlzLnNlbGVjdGVkVGFiPU13LlJ1bGVzLHRoaXMudmlld1hMTWFwUnVsZXMoKSx0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvaG9tZS9leGNlbC1tYXBzLyIrYS5pZCkpfXhsbWFwTGlzdE9uRmlsdGVyKCl7dGhpcy54''@;'; put 'put ''bG1hcHM9dGhpcy5zZWFyY2hTdHJpbmcubGVuZ3RoPjA/S24ueGxtYXBzLmZpbHRlcihkPT5kLmlkLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy5zZWFyY2hTdHJpbmcudG9Mb3dlckNhc2UoKSkpOktuLnhsbWFwc31pc0FjdGl2ZVhMTWFwKGEpe3JldHVybiB0aGlzLnNlbGVjdGVkWExN''@;'; put 'put ''YXA/LmlkPT09YX1tYXhXaWR0aENoZWNrZXIoYSxkKXtyZXR1cm4gYT4yMDA/MjAwOmF9Z2V0Q2VsbENvbmZpZ3VyYXRpb24oKXtyZXR1cm57cmVhZE9ubHk6ITB9fXJvd0hlYWRlcnMoKXtyZXR1cm4iICJ9b25TaG93VXBsb2FkTW9kYWwoKXt0aGlzLnNob3dVcGxvYWRNb2RhbD0hMH1maWxl''@;'; put 'put ''T3ZlckJhc2UoYSl7dGhpcy5oYXNCYXNlRHJvcFpvbmVPdmVyPWF9Z2V0RmlsZURlc2MoYSxkPSExKXt2YXIgaD10aGlzO2NvbnN0IGY9ZD9hWzBdOmEudGFyZ2V0LmZpbGVzWzBdO2lmKCFmKXJldHVybjtjb25zdCB2PWYubmFtZTtpZih0aGlzLmZpbGVuYW1lPXYsInhscyI9PT12LnNsaWNl''@;'; put 'put ''KHYubGFzdEluZGV4T2YoIi4iKSsxLHYubGFzdEluZGV4T2YoIi4iKSs0KS50b0xvd2VyQ2FzZSgpKXt0aGlzLnNob3dVcGxvYWRNb2RhbD0hMSx0aGlzLmlzTG9hZGluZz0hMCx0aGlzLmlzTG9hZGluZ0Rlc2M9IkV4dHJhY3RpbmcgRGF0YSIsdGhpcy5zdGF0dXM9cmYuRXh0cmFjdGluZ0Rh''@;'; put 'put ''dGE7Y29uc3QgRD1uZXcgRmlsZVJlYWRlcjtELm9ubG9hZD1mdW5jdGlvbigpe3ZhciBaPWVlKGZ1bmN0aW9uKihyZSl7Y29uc3QgY2U9KGM9Pntjb25zdCBsPW5ldyBVaW50OEFycmF5KGMpO2xldCBhPSIiO2NvbnN0IGQ9bC5ieXRlTGVuZ3RoO2ZvcihsZXQgaD0wO2g8ZDtoKyspYSs9U3Ry''@;'; put 'put ''aW5nLmZyb21DaGFyQ29kZShsW2hdKTtyZXR1cm4gYX0pKHJlLnRhcmdldC5yZXN1bHQpO2xldCBiZTtjb25zdCBFZT17dHlwZToiYmluYXJ5IixjZWxsRGF0ZXM6ITEsY2VsbEZvcm11bGE6ITAsY2VsbFN0eWxlczohMCxjZWxsTkY6ITEsY2VsbFRleHQ6ITF9O3RyeXtiZT1EdS5yZWFkKGNl''@;'; put 'put ''LHsuLi5FZX0pfWNhdGNoKEJlKXtoLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbChudWxsLEJlLHZvaWQgMCwiRXJyb3IgcmVhZGluZyBmaWxlIil9aWYoIWJlKXJldHVybiBoLmlzTG9hZGluZz0hMSxoLmlzTG9hZGluZ0Rlc2M9IiIsaC5zdGF0dXM9cmYuUmVhZHlUb1VwbG9hZCx2b2lk''@;'; put 'put ''IGgudXBsb2FkZXIucXVldWUucG9wKCk7aC5leHRyYWN0RGF0YShiZSl9KTtyZXR1cm4gZnVuY3Rpb24ocmUpe3JldHVybiBaLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCksRC5yZWFkQXNBcnJheUJ1ZmZlcihmKX1lbHNlIHRoaXMuaXNMb2FkaW5nPSExLHRoaXMuaXNMb2FkaW5nRGVzYz0i''@;'; put 'put ''Iix0aGlzLnN0YXR1cz1yZi5SZWFkeVRvVXBsb2FkLHRoaXMuc2hvd1VwbG9hZE1vZGFsPSEwLHRoaXMudXBsb2FkZXIucXVldWUucG9wKCksdGhpcy5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwobnVsbCwnSW52YWxpZCBmaWxlIHR5cGUgIjxiPicrdGhpcy5maWxlbmFtZSsnPC9iPiIu''@;'; put 'put ''IFBsZWFzZSB1cGxvYWQgZXhjZWwgZmlsZS4nKX1kaXNjYXJkRXh0cmFjdGVkRGF0YSgpe3RoaXMuaXNMb2FkaW5nPSExLHRoaXMuaXNMb2FkaW5nRGVzYz0iIix0aGlzLnN0YXR1cz1yZi5SZWFkeVRvVXBsb2FkLHRoaXMueGxEYXRhPVtdLHRoaXMuc2VsZWN0ZWRUYWI9TXcuUnVsZXMsdGhp''@;'; put 'put ''cy5maWxlbmFtZT0iIix0aGlzLnVwbG9hZGVyLnF1ZXVlPVtdLHRoaXMuZmlsZVVwbG9hZElucHV0Q29tcExpc3QuZmlyc3QmJih0aGlzLmZpbGVVcGxvYWRJbnB1dENvbXBMaXN0LmZpcnN0Lm5hdGl2ZUVsZW1lbnQudmFsdWU9IiIpfXN1Ym1pdEV4Y2VsKCl7dGhpcy5saWNlbmNlU3RhdGUu''@;'; put 'put ''dmFsdWUuc3VibWl0X3Jvd3NfbGltaXQ9PT0xLzA/dGhpcy5zdWJtaXQoKTp0aGlzLnN1Ym1pdExpbWl0Tm90aWNlPSEwfXN1Ym1pdCgpe2lmKCF0aGlzLnNlbGVjdGVkWExNYXB8fCF0aGlzLnhsRGF0YS5sZW5ndGgpcmV0dXJuO3RoaXMuc3RhdHVzPXJmLlN1Ym1pdHRpbmcsdGhpcy5pc0xv''@;'; put 'put ''YWRpbmc9ITAsdGhpcy5pc0xvYWRpbmdEZXNjPSJTdWJtaXR0aW5nIGV4dHJhY3RlZCBkYXRhIjtjb25zdCBhPVtdO2Zvcihjb25zdCBNIG9mIHRoaXMudXBsb2FkZXIucXVldWUpYS5wdXNoKHtmaWxlOk0sZmlsZU5hbWU6TS5uYW1lfSk7Y29uc3QgZD1PYmplY3Qua2V5cyh0aGlzLnhsRGF0''@;'; put 'put ''YVswXSkuam9pbigiLCIpKyJcbiIrdGhpcy54bERhdGEuc2xpY2UoMCx0aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdWJtaXRfcm93c19saW1pdCkubWFwKE09Pk9iamVjdC52YWx1ZXMoTSkuam9pbigiLCIpKS5qb2luKCJcbiIpLGg9bmV3IEJsb2IoW2RdLHt0eXBlOiJhcHBsaWNhdGlvbi9j''@;'; put 'put ''c3YifSksZj1xZWUoaCx0aGlzLmZpbGVuYW1lKyIuY3N2Iik7YS5wdXNoKHtmaWxlOmYsZmlsZU5hbWU6Zi5uYW1lfSksdGhpcy5zYXNTZXJ2aWNlLnVwbG9hZEZpbGUoInNlcnZpY2VzL2VkaXRvcnMvbG9hZGZpbGUiLGEse3RhYmxlOnRoaXMuc2VsZWN0ZWRYTE1hcC50YXJnZXREU30pLnRo''@;'; put 'put ''ZW4oTT0+e2lmKE0uYWRhcHRlclJlc3BvbnNlLnNhc2pzQWJvcnQpe2NvbnN0IEQ9TS5hZGFwdGVyUmVzcG9uc2U7dGhpcy5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwoIiIsRC5zYXNqc0Fib3J0WzBdLk1TRyx7U1lTV0FSTklOR1RFWFQ6RC5TWVNXQVJOSU5HVEVYVCxTWVNFUlJPUlRF''@;'; put 'put ''WFQ6RC5TWVNFUlJPUlRFWFQsTUFDOkQuc2FzanNBYm9ydFswXS5NQUN9KX1lbHNlIE0uYWRhcHRlclJlc3BvbnNlLnNhc3BhcmFtcyYmdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL3N0YWdlLyIrTS5hZGFwdGVyUmVzcG9uc2Uuc2FzcGFyYW1zWzBdLkRTSUQpfSkuY2F0Y2goTT0+e3Ro''@;'; put 'put ''aXMuZXZlbnRTZXJ2aWNlLmNhdGNoUmVzcG9uc2VFcnJvcigiZmlsZSB1cGxvYWQiLE0ucmVzcG9uc2UpfSkuZmluYWxseSgoKT0+e3RoaXMuc3RhdHVzPXJmLlJlYWR5VG9TdWJtaXQsdGhpcy5pc0xvYWRpbmc9ITEsdGhpcy5pc0xvYWRpbmdEZXNjPSIifSl9ZXh0cmFjdERhdGEoYSl7Y29u''@;'; put 'put ''c3QgZD1bXTt0aGlzLnhsbWFwUnVsZXMuZm9yRWFjaChoPT57bGV0IGY9aC5YTE1BUF9TSEVFVDtpZihmLnN0YXJ0c1dpdGgoIi8iKSl7Y29uc3QgRWU9Zi5zcGxpdCgiLyIpWzFdLEJlPXBhcnNlSW50KEVlKS0xO2Y9YS5TaGVldE5hbWVzW0JlXX1jb25zdCB2PWEuU2hlZXRzW2ZdLE09RHUu''@;'; put 'put ''dXRpbHMuc2hlZXRfdG9fanNvbih2LHtyYXc6ITAsaGVhZGVyOiJBIixibGFua3Jvd3M6ITB9KSxEPVY2ZShoLlhMTUFQX1NUQVJULE0pLFo9KChjLGwsYSk9PntpZigiIj09PWwpcmV0dXJuIGM7aWYobC5zdGFydHNXaXRoKCJBQlNPTFVURSAiKSYmKGw9bC5yZXBsYWNlKCJBQlNPTFVURSAi''@;'; put 'put ''LCIiKSksbC5zdGFydHNXaXRoKCJSRUxBVElWRSAiKSl7Y29uc3QgZD1ldGUobCk7aWYoZCl7Y29uc3R7cm93OmgsY29sdW1uOmZ9PWQse3I6dixjOk19PUR1LnV0aWxzLmRlY29kZV9jZWxsKGMpO2w9RHUudXRpbHMuZW5jb2RlX2NlbGwoe3I6ditoLGM6TStmfSl9fWlmKGwuc3RhcnRzV2l0''@;'; put 'put ''aCgiTUFUQ0ggIikmJihsPVY2ZShsLGEpKSwiTEFTVERPV04iPT09bCl7Y29uc3R7cjpkLGM6aH09RHUudXRpbHMuZGVjb2RlX2NlbGwoYyksZj1EdS51dGlscy5lbmNvZGVfY29sKGgpO2xldCB2PWQ7Zm9yKGxldCBNPWQrMTtNPGEubGVuZ3RoJiZhW01dW2ZdO00rKyl2PU07bD1mKyh2KzEp''@;'; put 'put ''fWlmKCJCTEFOS1JPVyI9PT1sKXtjb25zdHtyOmR9PUR1LnV0aWxzLmRlY29kZV9jZWxsKGMpO2xldCBoPWQ7Zm9yKGxldCBEPWQrMTtEPGEubGVuZ3RoJiYhcTl0KGFbRF0pO0QrKyloPUQ7bD1PYmplY3Qua2V5cyhhW2hdKS5maWx0ZXIoRD0+Il9fcm93TnVtX18iIT09RCkucmVkdWNlKChE''@;'; put 'put ''LFopPT5aPkQ/WjpELCIiKSsoaCsxKX1yZXR1cm4gbH0pKEQsaC5YTE1BUF9GSU5JU0gsTSkscmU9YCR7RH06JHtafWAsY2U9RHUudXRpbHMuZGVjb2RlX3JhbmdlKHJlKSxiZT1EdS51dGlscy5zaGVldF90b19qc29uKHYse3JhdzohMCxyYW5nZTpyZSxoZWFkZXI6IkEiLGJsYW5rcm93czoh''@;'; put 'put ''MH0pO2ZvcihsZXQgRWU9MDtFZTxiZS5sZW5ndGg7RWUrKyl7Y29uc3QgQmU9YmVbRWVdO2ZvcihsZXQgcWU9Y2Uucy5jLHJ0PTA7cWU8PWNlLmUuYztxZSsrLHJ0Kyspe2NvbnN0IHB0PUR1LnV0aWxzLmVuY29kZV9jb2wocWUpO3B0IGluIEJlJiZkLnB1c2goe0xPQURfUkVGOiIwIixYTE1B''@;'; put 'put ''UF9JRDpoLlhMTUFQX0lELFhMTUFQX1JBTkdFX0lEOmguWExNQVBfUkFOR0VfSUQsUk9XX05POkVlKzEsQ09MX05POnJ0KzEsVkFMVUVfVFhUOkJlW3B0XX0pfX19KSx0aGlzLnN0YXR1cz1yZi5SZWFkeVRvU3VibWl0LHRoaXMuaXNMb2FkaW5nPSExLHRoaXMuaXNMb2FkaW5nRGVzYz0iIix0''@;'; put 'put ''aGlzLnhsRGF0YT1kLHRoaXMuc2VsZWN0ZWRUYWI9TXcuRGF0YX12aWV3WExNYXBSdWxlcygpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2Euc2VsZWN0ZWRYTE1hcCYmKGEuaXNMb2FkaW5nPSEwLGEuaXNMb2FkaW5nRGVzYz0iTG9hZGluZyBleGNlbCBydWxlcyIsYS5zdGF0''@;'; put 'put ''dXM9cmYuRmV0Y2hpbmdSdWxlcyx5aWVsZCBhLnNhc1N0b3JlU2VydmljZS5nZXRYTE1hcFJ1bGVzKGEuc2VsZWN0ZWRYTE1hcC5pZCkudGhlbihkPT57YS54bG1hcFJ1bGVzPWQueGxtYXBydWxlcyxhLnN0YXR1cz1yZi5SZWFkeVRvVXBsb2FkfSkuY2F0Y2goZD0+e2EubG9nZ2VyU2Vydmlj''@;'; put 'put ''ZS5lcnJvcihkKX0pLGEuaXNMb2FkaW5nPSExLGEuaXNMb2FkaW5nRGVzYz0iIil9KSgpfWxvYWQoKXt0aGlzLnhsbWFwcz1Lbi54bG1hcHMsdGhpcy54bG1hcHNMb2FkaW5nPSExO2NvbnN0IGE9dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMuaWQ7aWYoYSl7Y29uc3QgZD10aGlzLnhsbWFw''@;'; put 'put ''cy5maW5kKGg9PmguaWQ9PT1hKTtkJiYodGhpcy5zZWxlY3RlZFhMTWFwPWQsdGhpcy52aWV3WExNYXBSdWxlcygpKX19bmdPbkluaXQoKXt0aGlzLmxpY2VuY2VTZXJ2aWNlLmhvdF9saWNlbnNlX2tleS5zdWJzY3JpYmUoYT0+e3RoaXMuaG90VGFibGVMaWNlbnNlS2V5PWF9KX1uZ0FmdGVy''@;'; put 'put ''Vmlld0luaXQoKXt9bmdBZnRlckNvbnRlbnRJbml0KCl7S24uZWRpdG9yLnN0YXJ0dXBTZXQ/dGhpcy5sb2FkKCk6dGhpcy5ldmVudFNlcnZpY2Uub25TdGFydHVwRGF0YUxvYWRlZC5zdWJzY3JpYmUoKCk9Pnt0aGlzLmxvYWQoKX0pfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihk''@;'; put 'put ''KXtyZXR1cm4gbmV3KGR8fGMpKEdlKHZjKSxHZSh1MSksR2UoU2QpLEdlKEN1KSxHZShMcyksR2Uoa2gpLEdlKEdzKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAteGxtYXAiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGQsaCl7aWYoMSZkJiZxYShK''@;'; put 'put ''OXQsNSksMiZkKXtsZXQgZjtDaShmPVNpKCkpJiYoaC5maWxlVXBsb2FkSW5wdXRDb21wTGlzdD1mKX19LGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGQsaCl7MiZkJiZUcigiY29udGVudC1jb250YWluZXIiLGguY29udGVudENvbnRhaW5lckNsYXNzKX0sZGVjbHM6NDIsdmFy''@;'; put 'put ''czoxNixjb25zdHM6W1sic2VhcmNoWExNYXBUcmVlSW5wdXQiLCIiXSxbImZpbGVVcGxvYWRJbnB1dCIsIiJdLFsiYWN0aW9uQnV0dG9ucyIsIiJdLFsiY2xhc3MiLCJteS0xMC1teC1hdXRvIHRleHQtY2VudGVyIiw0LCJuZ0lmIl0sWzEsInNlYXJjaC1ub2RlIl0sWzEsInRyZWUtc2VhcmNo''@;'; put 'put ''LXdyYXBwZXIiXSxbImFwcFN0ZWFsRm9jdXMiLCIiLCJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwiRmlsdGVyIGJ5IElkIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiLCJuZ01vZGVsIl0sWyJzaGFwZSIsInNlYXJjaCIs''@;'; put 'put ''NCwibmdJZiJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siLDQsIm5nSWYiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImNvbnRlbnQtYXJlYSJdLFsiY2xhc3MiLCJuby10YWJsZS1zZWxlY3RlZCIsNCwibmdJZiJdLFsiY2xhc3MiLCJsb2FkaW5nU3Bpbm5lciIsNCwibmdJZiJdLFsi''@;'; put 'put ''YXBwRHJhZ05kcm9wIiwiIiwiY2xhc3MiLCJjYXJkIGgtMTAwIGQtZmxleCBjbHItZmxleC1jb2x1bW4iLDMsImZpbGVEcmFnZ2VkT3ZlciIsNCwibmdJZiJdLFsiYXBwRmlsZURyb3AiLCIiLDEsInJlbGF0aXZlIiwzLCJmaWxlT3ZlciIsImZpbGVEcm9wIiwiY2xyTW9kYWxPcGVuQ2hhbmdl''@;'; put 'put ''IiwidXBsb2FkZXIiLCJjbHJNb2RhbFNpemUiLCJjbHJNb2RhbFN0YXRpY0JhY2tkcm9wIiwiY2xyTW9kYWxDbG9zYWJsZSIsImNsck1vZGFsT3BlbiJdLFsxLCJtb2RhbC10aXRsZSJdLFsxLCJtb2RhbC1ib2R5Il0sWzEsImRyb3AtYXJlYSJdLFsxLCJjbHItY29sLW1kLTEyIl0sWzEsImNs''@;'; put 'put ''ci1yb3ciLCJjYXJkLWJsb2NrIiwibXQtMTUiLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiJdLFsxLCJjbHItY29sLW1kLTMiLCJmaWx0ZXJCdG4iXSxbMSwiZmlsdGVyQnRuIiwidy0xMDAiXSxbImZvciIsImZpbGUtdXBsb2FkIiwxLCJidG4iLCJidG4tc20iLCJidG4tb3V0''@;'; put 'put ''bGluZSIsInByb2ZpbGUtYnV0dG9ucyIsInctMTAwIl0sWyJoaWRkZW4iLCIiLCJpZCIsImZpbGUtdXBsb2FkIiwidHlwZSIsImZpbGUiLCJhcHBGaWxlU2VsZWN0IiwiIiwzLCJjaGFuZ2UiLCJ1cGxvYWRlciJdLFszLCJjbHJNb2RhbE9wZW5DaGFuZ2UiLCJjbHJNb2RhbE9wZW4iXSxbMSwi''@;'; put 'put ''bS0wIl0sWzEsIm1vZGFsLWZvb3RlciJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXByaW1hcnkiLDMsImNsaWNrIl0sWzEsIm15LTEwLW14LWF1dG8iLCJ0ZXh0LWNlbnRlciJdLFsiY2xyTWVkaXVtIiwiIl0sWyJzaGFwZSIsInNlYXJjaCJdLFsic2hhcGUiLCJ0''@;'; put 'put ''aW1lcyIsMywiY2xpY2siXSxbMSwiY2xyLXRyZWVub2RlLWxpbmsiLDMsImNsaWNrIl0sWyJzaGFwZSIsImZpbGUiXSxbMSwibm8tdGFibGUtc2VsZWN0ZWQiXSxbInNyYyIsIi9TQVNTdG9yZWRQcm9jZXNzLz9fUFJPR1JBTT1wWktkNkY5NWpFQ3ZSUWxOMExDZmRBPT0vd2ViOS9pbWFnZXMv''@;'; put 'put ''c2VsZWN0LXRhYmxlLXBuZyIsImFsdCIsInNlbGVjdCB0YWJsZSBpY29uIiwxLCJzZWxlY3QtdGFibGUtaWNvbiJdLFsiY2xhc3MiLCJ0ZXh0LWNlbnRlciBjb2xvci1ncmF5IG10LTEwIiwiY2RzLXRleHQiLCJzZWN0aW9uIiw0LCJuZ0lmIl0sWyJjZHMtdGV4dCIsInNlY3Rpb24iLDEsInRl''@;'; put 'put ''eHQtY2VudGVyIiwiY29sb3ItZ3JheSIsIm10LTEwIl0sWzEsImxvYWRpbmdTcGlubmVyIl0sWzEsInNwaW5uZXIiXSxbImFwcERyYWdOZHJvcCIsIiIsMSwiY2FyZCIsImgtMTAwIiwiZC1mbGV4IiwiY2xyLWZsZXgtY29sdW1uIiwzLCJmaWxlRHJhZ2dlZE92ZXIiXSxbImNsclRhYkxpbmsi''@;'; put 'put ''LCIiLDMsImNsaWNrIl0sWzQsImNscklmQWN0aXZlIl0sWzQsIm5nVGVtcGxhdGVPdXRsZXQiXSxbMSwiY2xyLXJvdyIsIm0tMCIsIm1iLTEwLWkiLCJ2aWV3ZXJUaXRsZSJdLFsxLCJkLWZsZXgiLCJjbHItY29sLTEyIiwiY2xyLWp1c3RpZnktY29udGVudC1jZW50ZXIiLCJtdC01LWkiXSxb''@;'; put 'put ''ImNkcy10ZXh0IiwibGFiZWxMaW5rIiwxLCJtbC0xMCIsMywicm91dGVyTGluayJdLFsxLCJjbHItZmxleC0xIl0sWyJob3RJZCIsImhvdEluc3RhbmNlIiwiaWQiLCJob3QtdGFibGUiLCJjbGFzc05hbWUiLCJodERhcmsiLCJzdHJldGNoSCIsImFsbCIsMywibXVsdGlDb2x1bW5Tb3J0aW5n''@;'; put 'put ''Iiwidmlld3BvcnRSb3dSZW5kZXJpbmdPZmZzZXQiLCJkYXRhIiwiY29sSGVhZGVycyIsImNvbHVtbnMiLCJmaWx0ZXJzIiwiaGVpZ2h0IiwiYWZ0ZXJHZXRDb2xIZWFkZXIiLCJtb2RpZnlDb2xXaWR0aCIsImNlbGxzIiwibWF4Um93cyIsIm1hbnVhbENvbHVtblJlc2l6ZSIsInJvd0hlYWRl''@;'; put 'put ''cnMiLCJyb3dIZWFkZXJXaWR0aCIsInJvd0hlaWdodHMiLCJsaWNlbnNlS2V5Il0sWzEsImNsci1yb3ciLCJtLTAiLCJjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciJdLFsiY2xhc3MiLCJkLWZsZXggY2xyLWp1c3RpZnktY29udGVudC1jZW50ZXIgY2xyLWNvbC0xMiBjbHItY29sLWxnLTQi''@;'; put 'put ''LDQsIm5nSWYiXSxbMSwiZC1mbGV4IiwiY2xyLWp1c3RpZnktY29udGVudC1jZW50ZXIiLCJjbHItY29sLTEyIiwiY2xyLWNvbC1sZy00Il0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tc3VjY2VzcyIsImJ0bi1ibG9jayIsIm1yLTAiLDMsImNsaWNrIl0sWyJzaGFw''@;'; put 'put ''ZSIsInVwbG9hZCJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLW91dGxpbmUtZGFuZ2VyIiwiYnRuLWJsb2NrIiwibXItMCIsMywiY2xpY2siXSxbInNoYXBlIiwidGltZXMiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXtpZigxJmQpe2NvbnN0IGY9TG4oKTtkZSgw''@;'; put 'put ''LCJhcHAtc2lkZWJhciIpLGd0KDEsUTl0LDIsMCwiZGl2IiwzKSxkZSgyLCJjbHItdHJlZSIpKDMsImNsci10cmVlLW5vZGUiLDQpKDQsImRpdiIsNSkoNSwiaW5wdXQiLDYsMCksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxtaShoLnNlYXJjaFN0cmluZyxN''@;'; put 'put ''KXx8KGguc2VhcmNoU3RyaW5nPU0pLEN0KE0pfSksRnQoImtleXVwIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxDdChoLnhsbWFwTGlzdE9uRmlsdGVyKCkpfSksaGUoKSxndCg3LGV2dCwxLDAsImNsci1pY29uIiw3KSg4LHR2dCwxLDAsImNsci1pY29uIiw4KSxoZSgpKCksZ3QoOSxudnQs''@;'; put 'put ''NSwzLCJuZy1jb250YWluZXIiLDkpLGhlKCkoKSxkZSgxMCwiZGl2IiwxMCksZ3QoMTEsYXZ0LDQsMiwiZGl2IiwxMSkoMTIsb3Z0LDYsMSwiZGl2IiwxMikoMTMsdXZ0LDI2LDI1LCJkaXYiLDEzKSxkZSgxNCwiY2xyLW1vZGFsIiwxNCksRnQoImZpbGVPdmVyIixmdW5jdGlvbihNKXtyZXR1''@;'; put 'put ''cm4gd3QoZiksQ3QoaC5maWxlT3ZlckJhc2UoTSkpfSkoImZpbGVEcm9wIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksQ3QoaC5nZXRGaWxlRGVzYyhNLCEwKSl9KSxnaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksbWkoaC5zaG93VXBsb2FkTW9kYWws''@;'; put 'put ''TSl8fChoLnNob3dVcGxvYWRNb2RhbD1NKSxDdChNKX0pLGRlKDE1LCJoMyIsMTUpLExlKDE2LCJVcGxvYWQgRmlsZSIpLGhlKCksZGUoMTcsImRpdiIsMTYpKDE4LCJkaXYiLDE3KSgxOSwic3BhbiIpLExlKDIwLCJEcm9wIGZpbGUgYW55d2hlcmUgdG8gdXBsb2FkISIpLGhlKCkoKSxkZSgy''@;'; put 'put ''MSwiZGl2IiwxOCkoMjIsImRpdiIsMTkpKDIzLCJkaXYiLDIwKSgyNCwic3BhbiIsMjEpKDI1LCJsYWJlbCIsMjIpLExlKDI2LCIgQnJvd3NlICIpLGhlKCkoKSxkZSgyNywiaW5wdXQiLDIzLDEpLEZ0KCJjaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxDdChoLmdldEZpbGVEZXNj''@;'; put 'put ''KE0pKX0pLGhlKCkoKSgpKCkoKSgpLGRlKDI5LCJjbHItbW9kYWwiLDI0KSxnaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksbWkoaC5zdWJtaXRMaW1pdE5vdGljZSxNKXx8KGguc3VibWl0TGltaXROb3RpY2U9TSksQ3QoTSl9KSxkZSgzMCwiaDMiLDE1''@;'; put 'put ''KSxMZSgzMSwiTm90aWNlIiksaGUoKSxkZSgzMiwiZGl2IiwxNikoMzMsInAiLDI1KSxMZSgzNCksaGUoKSgpLGRlKDM1LCJkaXYiLDI2KSgzNiwiYnV0dG9uIiwyNyksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxDdChoLnN1Ym1pdExpbWl0Tm90aWNlPSExKX0pLExlKDM3''@;'; put 'put ''LCIgQ2FuY2VsICIpLGhlKCksZGUoMzgsImJ1dHRvbiIsMjcpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksaC5zdWJtaXQoKSxDdChoLnN1Ym1pdExpbWl0Tm90aWNlPSExKX0pLExlKDM5LCIgU3VibWl0ICIpLGhlKCkoKSgpKCksZ3QoNDAscHZ0LDQsMywibmctdGVtcGxh''@;'; put 'put ''dGUiLG51bGwsMixJYyl9aWYoMiZkKXtjb25zdCBmPWhhKDYpO2ZlKCksTWUoIm5nSWYiLGgueGxtYXBzTG9hZGluZyksZmUoNCkscGkoIm5nTW9kZWwiLGguc2VhcmNoU3RyaW5nKSxmZSgyKSxNZSgibmdJZiIsZi52YWx1ZS5sZW5ndGg8MSksZmUoKSxNZSgibmdJZiIsZi52YWx1ZS5sZW5n''@;'; put 'put ''dGg+MCksZmUoKSxNZSgibmdGb3JPZiIsaC54bG1hcHMpLGZlKDIpLE1lKCJuZ0lmIiwhaC5zZWxlY3RlZFhMTWFwKSxmZSgpLE1lKCJuZ0lmIixoLmlzTG9hZGluZyksZmUoKSxNZSgibmdJZiIsIWguaXNMb2FkaW5nJiZoLnNlbGVjdGVkWExNYXApLGZlKCksTWUoInVwbG9hZGVyIixoLnVw''@;'; put 'put ''bG9hZGVyKSgiY2xyTW9kYWxTaXplIiwieGwiKSgiY2xyTW9kYWxTdGF0aWNCYWNrZHJvcCIsITEpKCJjbHJNb2RhbENsb3NhYmxlIiwhMCkscGkoImNsck1vZGFsT3BlbiIsaC5zaG93VXBsb2FkTW9kYWwpLGZlKDEzKSxNZSgidXBsb2FkZXIiLGgudXBsb2FkZXIpLGZlKDIpLHBpKCJjbHJN''@;'; put 'put ''b2RhbE9wZW4iLGguc3VibWl0TGltaXROb3RpY2UpLGZlKDUpLElyKCIgRHVlIHRvIGN1cnJlbnQgbGljZW5jZSwgb25seSAiLGgubGljZW5jZVN0YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xpbWl0LCIgcm93cyBpbiBhIGZpbGUgd2lsbCBiZSBzdWJtaXR0ZWQuIFRvIHJlbW92ZSB0aGUgcmVz''@;'; put 'put ''dHJpY3Rpb24sIGNvbnRhY3Qgc3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyAiKX19LGRlcGVuZGVuY2llczpbRF8sYzEscWwsbmwsJHMsRWgsUGQsZmcsSGwsb3UsS3UsSHksZHMsWjEsX20sQ20seDcsd20seW0sUzcsUmQsaTQsbnMsYmEsTjEsdEUsUjZlLEw2ZSxyNF0sZW5jYXBzdWxhdGlv''@;'; put 'put ''bjoyfSl9fXJldHVybiBjfSkoKTtjb25zdCBndnQ9W3twYXRoOiIiLGNvbXBvbmVudDooKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7fW5nT25Jbml0KCl7fW5nT25EZXN0cm95KCl7fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7''@;'; put 'put ''dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLXhsbWFwLXJvdXRlIl1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmR3QoMCwicm91dGVyLW91dGxldCIpfSxkZXBlbmRl''@;'; put 'put ''bmNpZXM6W3JnXSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpLGNoaWxkcmVuOlt7cGF0aDoiIixjb21wb25lbnQ6QjZlfSx7cGF0aDoiOmlkIixjb21wb25lbnQ6QjZlfV19XTtsZXQgbXZ0PSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3Jl''@;'; put 'put ''dHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1raSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOlt6Yy5mb3JDaGlsZChndnQpLHpjXX0pfX1yZXR1cm4gY30pKCk7bk4oKTtsZXQgdnZ0PSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUw''@;'; put 'put ''Mjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1raSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltvOSxtdnQsUmMsejAsRzksUmEseEEsbmZdfSl9fXJldHVybiBjfSkoKSxidnQ9KCgpPT57Y2xhc3Mg''@;'; put 'put ''Y3tjb25zdHJ1Y3Rvcigpe31uZ09uSW5pdCgpe31uZ09uRGVzdHJveSgpe31zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1tdWx0aS1kYXRhc2V0LXJvdXRl''@;'; put 'put ''Il1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmR3QoMCwicm91dGVyLW91dGxldCIpfSxkZXBlbmRlbmNpZXM6W3JnXSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpO2NvbnN0IHl2dD0o''@;'; put 'put ''YyxsLGEpPT57bC5jbGFzc0xpc3QuYWRkKEtuLmhhbmRzb250YWJsZS5kYXJrVGFibGVIZWFkZXJDbGFzcyl9LF92dD1bImNvbnRlbnRBcmVhIl0sd3Z0PSgpPT5bImh0RGFyayIsImh0Q3VzdG9tSGlkZGVuIl07ZnVuY3Rpb24gQ3Z0KGMsbCl7MSZjJiYoZGUoMCwiZGl2IiwyNCksR3QoMSwi''@;'; put 'put ''Y2xyLXNwaW5uZXIiLDIyKSxoZSgpKX1mdW5jdGlvbiBTdnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiLDI1KSgxLCJidXR0b24iLDI2KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KGhhKDQpLmNsaWNrKCkpfSksTGUoMiwiIEJyb3dzZSBmaWxl''@;'; put 'put ''ICIpLGhlKCksZGUoMywiaW5wdXQiLDI3LDEpLEZ0KCJjaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChSZSgpLm9uRmlsZUNoYW5nZShoKSl9KSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPVJlKCk7ZmUoKSxNZSgiZGlzYWJsZWQiLG51bGwhPT1hLnNlbGVjdGVkRmlsZXx8YS5z''@;'; put 'put ''dWJtaXR0aW5nQ3N2KX19ZnVuY3Rpb24gTXZ0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2IiwyNSkoMSwiYnV0dG9uIiwzMCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgyKS5vbkRpc2NhcmQoKSl9KSxMZSgyLCIgRGlzY2FyZCAiKSxoZSgp''@;'; put 'put ''LGRlKDMsImJ1dHRvbiIsMzEpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoMikub25TdWJtaXRBbGwoKSl9KSxMZSg0LCIgU3VibWl0IEFsbCAiKSxoZSgpKCl9fWZ1bmN0aW9uIHh2dChjLGwpezEmYyYmR3QoMCwiY2RzLWljb24iLDM2KX1mdW5jdGlvbiBFdnQo''@;'; put 'put ''YyxsKXsxJmMmJkd0KDAsImNkcy1pY29uIiwzNyl9ZnVuY3Rpb24gVHZ0KGMsbCl7aWYoMSZjJiYoc2koMCksZ3QoMSx4dnQsMSwwLCJjZHMtaWNvbiIsMzQpKDIsRXZ0LDEsMCwiY2RzLWljb24iLDM1KSxsaSgpKSwyJmMpe2NvbnN0IGE9UmUoKS4kaW1wbGljaXQ7ZmUoKSxNZSgibmdJZiIs''@;'; put 'put ''YS5zdWJtaXRSZXN1bHQuZXJyb3IpLGZlKCksTWUoIm5nSWYiLGEuc3VibWl0UmVzdWx0LnN1Y2Nlc3MpfX1mdW5jdGlvbiBBdnQoYyxsKXsxJmMmJkd0KDAsImNkcy1pY29uIiwzNil9ZnVuY3Rpb24ga3Z0KGMsbCl7MSZjJiZHdCgwLCJjZHMtaWNvbiIsMzkpfWZ1bmN0aW9uIER2dChjLGwp''@;'; put 'put ''e2lmKDEmYyYmKHNpKDApLGd0KDEsQXZ0LDEsMCwiY2RzLWljb24iLDM0KSgyLGt2dCwxLDAsImNkcy1pY29uIiwzOCksbGkoKSksMiZjKXtjb25zdCBhPVJlKDIpLiRpbXBsaWNpdDtmZSgpLE1lKCJuZ0lmIiwhKGEuZGF0YXNvdXJjZS5sZW5ndGgmJmEucGFyc2VSZXN1bHQpKSxmZSgpLE1l''@;'; put 'put ''KCJuZ0lmIixhLmRhdGFzb3VyY2UubGVuZ3RoJiZhLnBhcnNlUmVzdWx0KX19ZnVuY3Rpb24gSXZ0KGMsbCl7MSZjJiZHdCgwLCJjZHMtaWNvbiIsMzkpfWZ1bmN0aW9uIFJ2dChjLGwpezEmYyYmR3QoMCwiY2xyLXNwaW5uZXIiLDQxKX1mdW5jdGlvbiBMdnQoYyxsKXtpZigxJmMmJihzaSgw''@;'; put 'put ''KSxndCgxLEl2dCwxLDAsImNkcy1pY29uIiwzOCkoMixSdnQsMSwwLCJjbHItc3Bpbm5lciIsNDApLGxpKCkpLDImYyl7Y29uc3QgYT1SZSgyKS4kaW1wbGljaXQ7ZmUoKSxNZSgibmdJZiIsIWEucGFyc2luZ1RhYmxlKSxmZSgpLE1lKCJuZ0lmIixhLnBhcnNpbmdUYWJsZSl9fWZ1bmN0aW9u''@;'; put 'put ''IE92dChjLGwpe2lmKDEmYyYmKHNpKDApLGd0KDEsRHZ0LDMsMiwibmctY29udGFpbmVyIiw0KSgyLEx2dCwzLDIsIm5nLWNvbnRhaW5lciIsNCksbGkoKSksMiZjKXtjb25zdCBhPVJlKCkuJGltcGxpY2l0O2ZlKCksTWUoIm5nSWYiLGEuZGF0YXNvdXJjZSksZmUoKSxNZSgibmdJZiIsIWEu''@;'; put 'put ''ZGF0YXNvdXJjZSl9fWZ1bmN0aW9uIFB2dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci10cmVlLW5vZGUiKSgxLCJidXR0b24iLDMyKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKS4kaW1wbGljaXQ7cmV0dXJuIEN0KFJlKDIpLm9uUGFyc2VkRGF0YXNl''@;'; put 'put ''dENsaWNrKGgpKX0pLGd0KDIsVHZ0LDMsMiwibmctY29udGFpbmVyIiw0KSgzLE92dCwzLDIsIm5nLWNvbnRhaW5lciIsNCksZGUoNCwic3BhbiIsMzMpLExlKDUpLGhlKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgpLFRyKCJhY3RpdmUiLGEuYWN0aXZlKSxmZSgpLE1l''@;'; put 'put ''KCJuZ0lmIixhLnN1Ym1pdFJlc3VsdCksZmUoKSxNZSgibmdJZiIsIWEuc3VibWl0UmVzdWx0KSxmZSgyKSxJcigiICIsYS5saWJkcywiICIpfX1mdW5jdGlvbiBGdnQoYyxsKXtpZigxJmMmJihzaSgwKSxndCgxLE12dCw1LDAsImRpdiIsMyksZGUoMiwicCIsMjgpLExlKDMsIkZvdW5kIHRh''@;'; put 'put ''YmxlczoiKSxoZSgpLGRlKDQsImNsci10cmVlIiksZ3QoNSxQdnQsNiw1LCJjbHItdHJlZS1ub2RlIiwyOSksaGUoKSxsaSgpKSwyJmMpe2NvbnN0IGE9UmUoKTtmZSgpLE1lKCJuZ0lmIiwhYS5leGNlbHNTdWJtaXR0ZWQpLGZlKDQpLE1lKCJuZ0Zvck9mIixhLnBhcnNlZERhdGFzZXRzKX19''@;'; put 'put ''ZnVuY3Rpb24gSHZ0KGMsbCl7MSZjJiZHdCgwLCJjZHMtaWNvbiIsMzYpfWZ1bmN0aW9uIE52dChjLGwpezEmYyYmR3QoMCwiY2RzLWljb24iLDM3KX1mdW5jdGlvbiBWdnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItdHJlZS1ub2RlIikoMSwiYnV0dG9uIiw0MyksRnQo''@;'; put 'put ''ImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSkuJGltcGxpY2l0O3JldHVybiBDdChSZSgyKS5vblN1Ym1pdHRlZENzdkRhdGFzZXRDbGljayhoKSl9KSxndCgyLEh2dCwxLDAsImNkcy1pY29uIiwzNCkoMyxOdnQsMSwwLCJjZHMtaWNvbiIsMzUpLEd0KDQsImNkcy1pY29uIiwzOSks''@;'; put 'put ''TGUoNSksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgpLFRyKCJhY3RpdmUiLGEuYWN0aXZlKSxmZSgpLE1lKCJuZ0lmIixhLmVycm9yKSxmZSgpLE1lKCJuZ0lmIixhLnN1Y2Nlc3MpLGZlKDIpLElyKCIgIixhLmxpYmRzLCIgIil9fWZ1bmN0aW9uIEJ2dChjLGwpe2lm''@;'; put 'put ''KDEmYyYmKHNpKDApLGRlKDEsInAiLDQyKSxMZSgyLCJTdWJtaXR0ZWQgdGFibGVzOiIpLGhlKCksZGUoMywiY2xyLXRyZWUiKSxndCg0LFZ2dCw2LDUsImNsci10cmVlLW5vZGUiLDI5KSxoZSgpLGxpKCkpLDImYyl7Y29uc3QgYT1SZSgpO2ZlKDQpLE1lKCJuZ0Zvck9mIixhLnN1Ym1pdHRl''@;'; put 'put ''ZENzdkRhdGFzZXRzKX19ZnVuY3Rpb24ganZ0KGMsbCl7MSZjJiYoZGUoMCwiZGl2Iiw0NCksR3QoMSwiY2xyLWljb24iLDQ1KSxkZSgyLCJwIiw0NiksTGUoMywiIFBsZWFzZSB1cGxvYWQgYSBmaWxlICIpLGhlKCkoKSl9ZnVuY3Rpb24genZ0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7''@;'; put 'put ''c2koMCksZGUoMSwiZGl2Iiw0NykoMiwiZGl2Iiw0OCkoMywicCIsNDkpLExlKDQsIiBTZWxlY3RlZCBmaWxlOiAiKSxkZSg1LCJzdHJvbmciKSxMZSg2KSxoZSgpLGRlKDcsImNsci10b29sdGlwIikoOCwiY2RzLWljb24iLDUwKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEp''@;'; put 'put ''LEN0KFJlKDIpLm9uRGlzY2FyZEZpbGUoKSl9KSxoZSgpLGRlKDksImNsci10b29sdGlwLWNvbnRlbnQiKSxMZSgxMCwiIERpc2NhcmQgdGhlIGZpbGUgIiksaGUoKSgpKCksZGUoMTEsInAiLDUxKSxMZSgxMiwiIEZpbGUgc2l6ZTogIiksZGUoMTMsInN0cm9uZyIpLExlKDE0KSxoZSgpKCks''@;'; put 'put ''ZGUoMTUsInAiLDUyKSxMZSgxNiwiIFBhc3RlIG9yIHR5cGUgdGhlIGxpc3Qgb2YgZGF0YXNldHMgdG8gdXBsb2FkOiAiKSxoZSgpLGRlKDE3LCJjbHItY29udHJvbC1oZWxwZXIiLDUzKSxMZSgxOCwiRWFjaCByb3cgaXMgb25lIGRhdGFzZXQuIFdlIHdpbGwgYXV0b21hdGljYWxseSBkZXRl''@;'; put 'put ''Y3QgdGFibGVzIGJ5IHRoZSBzaGVldG5hbWUgYW5kIHBvcHVsYXRlIGlmIGFueS4iKSxoZSgpLEd0KDE5LCJob3QtdGFibGUiLDU0KSxkZSgyMCwiZGl2Iiw1NSkoMjEsImJ1dHRvbiIsNTYpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoMikub25TdGFydFBhcnNp''@;'; put 'put ''bmdGaWxlKCkpfSksTGUoMjIsIiBDb250aW51ZSAiKSxoZSgpKCkoKSgpLGxpKCl9aWYoMiZjKXtjb25zdCBhPVJlKDIpO2ZlKDYpLHdyKGEuc2VsZWN0ZWRGaWxlLm5hbWUpLGZlKDgpLElyKCIiLGEuc2VsZWN0ZWRGaWxlLnNpemVNQiwiIE1CIiksZmUoNSksTWUoImFmdGVyR2V0Q29sSGVh''@;'; put 'put ''ZGVyIixhLmFmdGVyR2V0Q29sSGVhZGVyKSgic2V0dGluZ3MiLGEuaG90VXNlckRhdGFzZXRzKSgibGljZW5zZUtleSIsYS5ob3RUYWJsZUxpY2Vuc2VLZXkpLGZlKDIpLE1lKCJkaXNhYmxlZCIsIWEubWF0Y2hlZERhdGFzZXRzLmxlbmd0aCkoImNsckxvYWRpbmciLGEudXBsb2FkTG9hZGlu''@;'; put 'put ''Zyl9fWZ1bmN0aW9uIFV2dChjLGwpe2lmKDEmYyYmKHNpKDApLEd0KDEsImNsci1pY29uIiw1NyksZGUoMiwicCIsNDYpLExlKDMpLGhlKCksbGkoKSksMiZjKXtjb25zdCBhPVJlKDQpO2ZlKDMpLElyKCIgIixhLmZpbGVMb2FkaW5nU3RhdGUsIi4uLiAiKX19ZnVuY3Rpb24gWnZ0KGMsbCl7''@;'; put 'put ''MSZjJiYoc2koMCksR3QoMSwiY2xyLWljb24iLDU4KSxkZSgyLCJwIiw0NiksTGUoMywiIFBsZWFzZSBzZWxlY3QgYSBkYXRhc2V0IG9uIHRoZSBsZWZ0IHRvIHJldmlldyB0aGUgZGF0YSAiKSxoZSgpLGxpKCkpfWZ1bmN0aW9uIFd2dChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsNDQpLGd0''@;'; put 'put ''KDEsVXZ0LDQsMSwibmctY29udGFpbmVyIiw0KSgyLFp2dCw0LDAsIm5nLWNvbnRhaW5lciIsNCksaGUoKSksMiZjKXtjb25zdCBhPVJlKDMpO2ZlKCksTWUoIm5nSWYiLGEuZmlsZUxvYWRpbmdTdGF0ZSE9PWEuRmlsZUxvYWRpbmdTdGF0ZS5wYXJzZWQpLGZlKCksTWUoIm5nSWYiLGEuZmls''@;'; put 'put ''ZUxvYWRpbmdTdGF0ZT09PWEuRmlsZUxvYWRpbmdTdGF0ZS5wYXJzZWQpfX1mdW5jdGlvbiBZdnQoYyxsKXsxJmMmJihkZSgwLCJzcGFuIiw3NSkoMSwic3Ryb25nIiksTGUoMiwiU1VDQ0VTUyIpLGhlKCkoKSl9ZnVuY3Rpb24gR3Z0KGMsbCl7MSZjJiYoZGUoMCwic3BhbiIsNzYpKDEsInN0''@;'; put 'put ''cm9uZyIpLExlKDIsIkVSUk9SIiksaGUoKSgpKX1mdW5jdGlvbiAkdnQoYyxsKXsxJmMmJihkZSgwLCJwIiw2MyksTGUoMSwiIEVycm9yIGRldGFpbHM6ICIpLGhlKCkpfWZ1bmN0aW9uIEt2dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImJ1dHRvbiIsNzcpLEZ0KCJjbGljayIs''@;'; put 'put ''ZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPVJlKDUpO3JldHVybiBDdChoLnJlU3VibWl0VGFibGUoaC5hY3RpdmVQYXJzZWREYXRhc2V0KSl9KSxMZSgxLCIgUmVzdWJtaXQgIiksaGUoKX0yJmMmJk1lKCJjbHJMb2FkaW5nIixSZSg1KS5zdWJtaXRMb2FkaW5nKX1mdW5jdGlvbiBxdnQoYyxs''@;'; put 'put ''KXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiLDY5KSgxLCJkaXYiKSgyLCJwIiw2MiksTGUoMywiIFN1Ym1pdCBTdGF0dXM6ICIpLGd0KDQsWXZ0LDMsMCwic3BhbiIsNzApKDUsR3Z0LDMsMCwic3BhbiIsNzEpLGhlKCksZ3QoNiwkdnQsMiwwLCJwIiw3MiksaGUoKSxkZSg3LCJk''@;'; put 'put ''aXYiKSxndCg4LEt2dCwyLDEsImJ1dHRvbiIsNzMpLGRlKDksImJ1dHRvbiIsNzQpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPVJlKDQpO3JldHVybiBDdChoLmRvd25sb2FkRmlsZShoLmFjdGl2ZVBhcnNlZERhdGFzZXQuc3VibWl0UmVzdWx0LmxvZ3x8aC5hY3RpdmVQ''@;'; put 'put ''YXJzZWREYXRhc2V0LnN1Ym1pdFJlc3VsdC5zdWNjZXNzfHxoLmFjdGl2ZVBhcnNlZERhdGFzZXQuc3VibWl0UmVzdWx0LmVycm9yKSl9KSxMZSgxMCwiIERvd25sb2FkIGxvZyAiKSxoZSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9UmUoNCk7ZmUoNCksTWUoIm5nSWYiLG51bGw9PWEuYWN0aXZl''@;'; put 'put ''UGFyc2VkRGF0YXNldC5zdWJtaXRSZXN1bHQ/bnVsbDphLmFjdGl2ZVBhcnNlZERhdGFzZXQuc3VibWl0UmVzdWx0LnN1Y2Nlc3MpLGZlKCksTWUoIm5nSWYiLG51bGw9PWEuYWN0aXZlUGFyc2VkRGF0YXNldC5zdWJtaXRSZXN1bHQ/bnVsbDphLmFjdGl2ZVBhcnNlZERhdGFzZXQuc3VibWl0''@;'; put 'put ''UmVzdWx0LmVycm9yKSxmZSgpLE1lKCJuZ0lmIixudWxsPT1hLmFjdGl2ZVBhcnNlZERhdGFzZXQuc3VibWl0UmVzdWx0P251bGw6YS5hY3RpdmVQYXJzZWREYXRhc2V0LnN1Ym1pdFJlc3VsdC5lcnJvciksZmUoMiksTWUoIm5nSWYiLCFhLnN1Ym1pdHRpbmdDc3YmJihudWxsPT1hLmFjdGl2''@;'; put 'put ''ZVBhcnNlZERhdGFzZXQuc3VibWl0UmVzdWx0P251bGw6YS5hY3RpdmVQYXJzZWREYXRhc2V0LnN1Ym1pdFJlc3VsdC5lcnJvcikpfX1mdW5jdGlvbiBYdnQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDc4KSgxLCJkaXYiLDc5KSxMZSgyKSxlbCgzLCJqc29uIiksaGUoKSgpKSwyJmMpe2Nv''@;'; put 'put ''bnN0IGE9UmUoNCk7ZmUoMiksSXIoIiAiLERjKDMsMSxudWxsPT1hLmFjdGl2ZVBhcnNlZERhdGFzZXQuc3VibWl0UmVzdWx0P251bGw6YS5hY3RpdmVQYXJzZWREYXRhc2V0LnN1Ym1pdFJlc3VsdC5lcnJvciksIiAiKX19ZnVuY3Rpb24gSnZ0KGMsbCl7aWYoMSZjJiYoc2koMCksZGUoMSwi''@;'; put 'put ''c3Ryb25nIiksTGUoMiksaGUoKSxsaSgpKSwyJmMpe2NvbnN0IGE9UmUoNCk7ZmUoMiksVXUoJyInLG51bGw9PWEuYWN0aXZlUGFyc2VkRGF0YXNldC5wYXJzZVJlc3VsdC5yYW5nZVNoZWV0UmVzP251bGw6YS5hY3RpdmVQYXJzZWREYXRhc2V0LnBhcnNlUmVzdWx0LnJhbmdlU2hlZXRSZXMu''@;'; put 'put ''c2hlZXROYW1lLCciIScsbnVsbD09YS5hY3RpdmVQYXJzZWREYXRhc2V0LnBhcnNlUmVzdWx0LnJhbmdlU2hlZXRSZXM/bnVsbDphLmFjdGl2ZVBhcnNlZERhdGFzZXQucGFyc2VSZXN1bHQucmFuZ2VTaGVldFJlcy5yYW5nZUFkZHJlc3MsIiIpfX1mdW5jdGlvbiBRdnQoYyxsKXsxJmMmJihk''@;'; put 'put ''ZSgwLCJzdHJvbmciKSxMZSgxLCJObyBkYXRhIGZvdW5kIiksaGUoKSl9ZnVuY3Rpb24gZWJ0KGMsbCl7MSZjJiYoZGUoMCwic3BhbiIsODEpKDEsInN0cm9uZyIpLExlKDIsIlNlYXJjaGluZyBmb3IgdGhlIGRhdGEuLi4iKSxoZSgpLEd0KDMsImNsci1zcGlubmVyIiw4MiksaGUoKSl9ZnVu''@;'; put 'put ''Y3Rpb24gdGJ0KGMsbCl7aWYoMSZjJiYoc2koMCksZ3QoMSxRdnQsMiwwLCJzdHJvbmciLDQpKDIsZWJ0LDQsMCwic3BhbiIsODApLGxpKCkpLDImYyl7Y29uc3QgYT1SZSg0KTtmZSgpLE1lKCJuZ0lmIiwhYS5hY3RpdmVQYXJzZWREYXRhc2V0LnBhcnNpbmdUYWJsZSksZmUoKSxNZSgibmdJ''@;'; put 'put ''ZiIsYS5hY3RpdmVQYXJzZWREYXRhc2V0LnBhcnNpbmdUYWJsZSl9fWZ1bmN0aW9uIG5idChjLGwpezEmYyYmKGRlKDAsImRpdiIsODMpLEd0KDEsImNsci1zcGlubmVyIiw4NCksaGUoKSl9ZnVuY3Rpb24gcmJ0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7c2koMCksZ3QoMSxxdnQsMTEs''@;'; put 'put ''NCwiZGl2Iiw1OSkoMixYdnQsNCwzLCJkaXYiLDYwKSxkZSgzLCJkaXYiLDYxKSg0LCJkaXYiKSg1LCJwIiw2MiksTGUoNiwiIEZvdW5kIGluIHJhbmdlOiAiKSxndCg3LEp2dCwzLDIsIm5nLWNvbnRhaW5lciIsNCkoOCx0YnQsMywyLCJuZy1jb250YWluZXIiLDQpLGhlKCksZGUoOSwicCIs''@;'; put 'put ''NjMpLExlKDEwLCIgRGF0YXNldDogIiksZGUoMTEsInN0cm9uZyIpKDEyLCJjbHItdG9vbHRpcCIpKDEzLCJhIiw2NCksTGUoMTQpLGhlKCksZGUoMTUsImNsci10b29sdGlwLWNvbnRlbnQiLDY1KSxMZSgxNiwiIENsaWNrIHRvIGVkaXQgdGhlIHRhYmxlICIpLGhlKCkoKSgpKCkoKSxkZSgx''@;'; put 'put ''NywiZGl2IikoMTgsImNsci10b2dnbGUtd3JhcHBlciIpKDE5LCJpbnB1dCIsNjYpLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPVJlKDMpO3JldHVybiBtaShmLmFjdGl2ZVBhcnNlZERhdGFzZXQuaW5jbHVkZUluU3VibWlzc2lvbixoKXx8KGYuYWN0aXZl''@;'; put 'put ''UGFyc2VkRGF0YXNldC5pbmNsdWRlSW5TdWJtaXNzaW9uPWgpLEN0KGgpfSksaGUoKSxkZSgyMCwibGFiZWwiKSxMZSgyMSwiSW5jbHVkZSBpbiBzdWJtaXNzaW9uIiksaGUoKSgpKCkoKSxndCgyMixuYnQsMiwwLCJkaXYiLDY3KSxHdCgyMywiaG90LXRhYmxlIiw2OCksbGkoKX1pZigyJmMp''@;'; put 'put ''e2NvbnN0IGE9UmUoMyk7ZmUoKSxNZSgibmdJZiIsYS5hY3RpdmVQYXJzZWREYXRhc2V0LnN1Ym1pdFJlc3VsdCksZmUoKSxNZSgibmdJZiIsbnVsbD09YS5hY3RpdmVQYXJzZWREYXRhc2V0LnN1Ym1pdFJlc3VsdD9udWxsOmEuYWN0aXZlUGFyc2VkRGF0YXNldC5zdWJtaXRSZXN1bHQuZXJy''@;'; put 'put ''b3IpLGZlKDUpLE1lKCJuZ0lmIixhLmFjdGl2ZVBhcnNlZERhdGFzZXQucGFyc2VSZXN1bHQpLGZlKCksTWUoIm5nSWYiLCFhLmFjdGl2ZVBhcnNlZERhdGFzZXQucGFyc2VSZXN1bHQpLGZlKDUpLE1lKCJyb3V0ZXJMaW5rIiwiL2VkaXRvci8iK2EuYWN0aXZlUGFyc2VkRGF0YXNldC5saWJk''@;'; put 'put ''cyksZmUoKSx3cihhLmFjdGl2ZVBhcnNlZERhdGFzZXQubGliZHMpLGZlKCksTWUoImNsclBvc2l0aW9uIiwidG9wLXJpZ2h0IikoImNsclNpemUiLCJzbSIpLGZlKDQpLHBpKCJuZ01vZGVsIixhLmFjdGl2ZVBhcnNlZERhdGFzZXQuaW5jbHVkZUluU3VibWlzc2lvbiksTWUoImRpc2FibGVk''@;'; put 'put ''IiwhKGEuYWN0aXZlUGFyc2VkRGF0YXNldC5kYXRhc291cmNlJiZhLmFjdGl2ZVBhcnNlZERhdGFzZXQucGFyc2VSZXN1bHQpKSxmZSgzKSxNZSgibmdJZiIsYS5pc0hvdEhpZGRlbiksZmUoKSxNZSgiYWZ0ZXJHZXRDb2xIZWFkZXIiLGEuYWZ0ZXJHZXRDb2xIZWFkZXIpKCJjbGFzc05hbWUi''@;'; put 'put ''LFlzKDE4LHd2dCkpKCJsaWNlbnNlS2V5IixhLmhvdFRhYmxlTGljZW5zZUtleSkoIm11bHRpQ29sdW1uU29ydGluZyIsITApKCJ2aWV3cG9ydFJvd1JlbmRlcmluZ09mZnNldCIsNTApKCJtYW51YWxDb2x1bW5SZXNpemUiLCEwKSgiZmlsdGVycyIsITApfX1mdW5jdGlvbiBpYnQoYyxsKXtp''@;'; put 'put ''ZigxJmMmJihzaSgwKSxndCgxLFd2dCwzLDIsImRpdiIsOSkoMixyYnQsMjQsMTksIm5nLWNvbnRhaW5lciIsNCksbGkoKSksMiZjKXtjb25zdCBhPVJlKDIpO2ZlKCksTWUoIm5nSWYiLCFhLmFjdGl2ZVBhcnNlZERhdGFzZXQpLGZlKCksTWUoIm5nSWYiLGEuYWN0aXZlUGFyc2VkRGF0YXNl''@;'; put 'put ''dCl9fWZ1bmN0aW9uIGFidChjLGwpezEmYyYmKGRlKDAsImRpdiIsNDQpLEd0KDEsImNsci1pY29uIiw1OCksZGUoMiwicCIsNDYpLExlKDMsIiBQbGVhc2Ugc2VsZWN0IGEgZGF0YXNldCBvbiB0aGUgbGVmdCB0byByZXZpZXcgdGhlIHN1Ym1pdCByZXN1bHRzICIpLGhlKCkoKSl9ZnVuY3Rp''@;'; put 'put ''b24gb2J0KGMsbCl7aWYoMSZjJiYoc2koMCksZ3QoMSxhYnQsNCwwLCJkaXYiLDkpLGxpKCkpLDImYyl7Y29uc3QgYT1SZSgyKTtmZSgpLE1lKCJuZ0lmIiwhYS5hY3RpdmVTdWJtaXR0ZWRDc3ZEYXRhc2V0KX19ZnVuY3Rpb24gc2J0KGMsbCl7MSZjJiYoZGUoMCwic3BhbiIsNzUpKDEsInN0''@;'; put 'put ''cm9uZyIpLExlKDIsIlNVQ0NFU1MiKSxoZSgpKCkpfWZ1bmN0aW9uIGxidChjLGwpezEmYyYmKGRlKDAsInNwYW4iLDc2KSgxLCJzdHJvbmciKSxMZSgyLCJFUlJPUiIpLGhlKCkoKSl9ZnVuY3Rpb24gY2J0KGMsbCl7MSZjJiYoZGUoMCwicCIsNjMpLExlKDEsIiBFcnJvciBkZXRhaWxzOiAi''@;'; put 'put ''KSxoZSgpKX1mdW5jdGlvbiB1YnQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDc4KSgxLCJkaXYiLDc5KSxMZSgyKSxlbCgzLCJqc29uIiksaGUoKSgpKSwyJmMpe2NvbnN0IGE9UmUoMyk7ZmUoMiksSXIoIiAiLERjKDMsMSxhLmFjdGl2ZVN1Ym1pdHRlZENzdkRhdGFzZXQuZXJyb3IpLCIg''@;'; put 'put ''Iil9fWZ1bmN0aW9uIGRidChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO3NpKDApLGRlKDEsImRpdiIsODUpKDIsImRpdiIpKDMsInAiLDYyKSxMZSg0LCIgTWF0Y2hlZCB3aXRoIGRhdGFzZXQ6ICIpLGRlKDUsInN0cm9uZyIpKDYsImNsci10b29sdGlwIikoNywiYSIsNjQpLExlKDgpLGhl''@;'; put 'put ''KCksZGUoOSwiY2xyLXRvb2x0aXAtY29udGVudCIsNjUpLExlKDEwLCIgQ2xpY2sgdG8gZWRpdCB0aGUgdGFibGUgIiksaGUoKSgpKCkoKSxkZSgxMSwicCIsNjIpLExlKDEyLCIgU3RhdHVzOiAiKSxndCgxMyxzYnQsMywwLCJzcGFuIiw3MCkoMTQsbGJ0LDMsMCwic3BhbiIsNzEpLGhlKCks''@;'; put 'put ''Z3QoMTUsY2J0LDIsMCwicCIsNzIpLGhlKCksZGUoMTYsImRpdiIpKDE3LCJidXR0b24iLDc0KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSgyKTtyZXR1cm4gQ3QoaC5kb3dubG9hZEZpbGUoaC5hY3RpdmVTdWJtaXR0ZWRDc3ZEYXRhc2V0LnN1Y2Nlc3N8fGguYWN0''@;'; put 'put ''aXZlU3VibWl0dGVkQ3N2RGF0YXNldC5lcnJvcikpfSksTGUoMTgsIiBEb3dubG9hZCBsb2cgIiksaGUoKSgpKCksZ3QoMTksdWJ0LDQsMywiZGl2Iiw2MCksbGkoKX1pZigyJmMpe2NvbnN0IGE9UmUoMik7ZmUoNyksTWUoInJvdXRlckxpbmsiLCIvZWRpdG9yLyIrYS5hY3RpdmVTdWJtaXR0''@;'; put 'put ''ZWRDc3ZEYXRhc2V0LmxpYmRzKSxmZSgpLHdyKGEuYWN0aXZlU3VibWl0dGVkQ3N2RGF0YXNldC5saWJkcyksZmUoKSxNZSgiY2xyUG9zaXRpb24iLCJ0b3AtcmlnaHQiKSgiY2xyU2l6ZSIsInNtIiksZmUoNCksTWUoIm5nSWYiLGEuYWN0aXZlU3VibWl0dGVkQ3N2RGF0YXNldC5zdWNjZXNz''@;'; put 'put ''KSxmZSgpLE1lKCJuZ0lmIixhLmFjdGl2ZVN1Ym1pdHRlZENzdkRhdGFzZXQuZXJyb3IpLGZlKCksTWUoIm5nSWYiLGEuYWN0aXZlU3VibWl0dGVkQ3N2RGF0YXNldC5lcnJvciksZmUoNCksTWUoIm5nSWYiLGEuYWN0aXZlU3VibWl0dGVkQ3N2RGF0YXNldC5lcnJvcil9fWZ1bmN0aW9uIGhi''@;'; put 'put ''dChjLGwpe2lmKDEmYyYmKHNpKDApLGd0KDEsenZ0LDIzLDcsIm5nLWNvbnRhaW5lciIsNCkoMixpYnQsMywyLCJuZy1jb250YWluZXIiLDQpKDMsb2J0LDIsMSwibmctY29udGFpbmVyIiw0KSg0LGRidCwyMCw4LCJuZy1jb250YWluZXIiLDQpLGxpKCkpLDImYyl7Y29uc3QgYT1SZSgpO2Zl''@;'; put 'put ''KCksTWUoIm5nSWYiLCFhLnBhcnNlZERhdGFzZXRzLmxlbmd0aCYmbnVsbCE9PWEuc2VsZWN0ZWRGaWxlKSxmZSgpLE1lKCJuZ0lmIixhLnBhcnNlZERhdGFzZXRzLmxlbmd0aCYmIWEuc3VibWl0dGVkQ3N2RGF0YXNldHMubGVuZ3RoKSxmZSgpLE1lKCJuZ0lmIixhLnN1Ym1pdHRlZENzdkRh''@;'; put 'put ''dGFzZXRzLmxlbmd0aCksZmUoKSxNZSgibmdJZiIsYS5hY3RpdmVTdWJtaXR0ZWRDc3ZEYXRhc2V0KX19ZnVuY3Rpb24gZmJ0KGMsbCl7aWYoMSZjJiYoZGUoMCwicCIsODYpLExlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgpO2ZlKCksSXIoIiBEdWUgdG8gY3VycmVudCBsaWNlbmNlLCBv''@;'; put 'put ''bmx5ICIsYS5saWNlbmNlU3RhdGUudmFsdWUuc3VibWl0X3Jvd3NfbGltaXQsIiByb3dzIGluIGVhY2ggZmlsZSB3aWxsIGJlIHN1Ym1pdHRlZC4gVG8gcmVtb3ZlIHRoZSByZXN0cmljdGlvbiwgY29udGFjdCBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvLiAiKX19dmFyIHh3PWZ1bmN0aW9u''@;'; put 'put ''KGMpe3JldHVybiBjLnJlYWRpbmc9IlJlYWRpbmcgdGhlIGZpbGUiLGMucGFyc2luZz0iU2VhcmNoaW5nIGZvciB0aGUgZGF0YSBpbiB0aGUgZmlsZSIsYy5wYXJzZWQ9IlNlYXJjaGluZyBmb3IgdGhlIGRhdGEgZmluaXNoZWQiLGMubm90U2VsZWN0ZWQ9IkZpbGUgbm90IHNlbGVjdGVkIixj''@;'; put 'put ''fSh4d3x8e30pO2NvbnN0IHBidD1be3BhdGg6IiIsY29tcG9uZW50OmJ2dCxjaGlsZHJlbjpbe3BhdGg6IiIsY29tcG9uZW50OigoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0sRCl7dGhpcy5ldmVudFNlcnZpY2U9YSx0aGlzLmxpY2VuY2VTZXJ2aWNlPWQsdGhpcy5oZWxw''@;'; put 'put ''ZXJTZXJ2aWNlPWgsdGhpcy5zYXNTdG9yZVNlcnZpY2U9Zix0aGlzLnNwcmVhZHNoZWV0U2VydmljZT12LHRoaXMuc2FzU2VydmljZT1NLHRoaXMuY2RyPUQsdGhpcy5jb250ZW50Q29udGFpbmVyQ2xhc3M9ITAsdGhpcy5saWNlbmNlU3RhdGU9dGhpcy5saWNlbmNlU2VydmljZS5saWNlbmNl''@;'; put 'put ''U3RhdGUsdGhpcy5JbmZpbml0eT0xLzAsdGhpcy5maWxlTG9hZGluZ1N0YXRlPXh3Lm5vdFNlbGVjdGVkLHRoaXMuRmlsZUxvYWRpbmdTdGF0ZT14dyx0aGlzLmhvdFRhYmxlTGljZW5zZUtleT12b2lkIDAsdGhpcy5ob3RUYWJsZU1heFJvd3M9dGhpcy5saWNlbmNlU3RhdGUudmFsdWUudmll''@;'; put 'put ''d2VyX3Jvd3NfYWxsb3dlZHx8MS8wLHRoaXMuY3N2RmlsZXM9W10sdGhpcy5jc3ZTdWJtaXR0aW5nPSExLHRoaXMuYXV0b0RldGVjdGluZ0NvbHVtbnM9ITEsdGhpcy5zZWxlY3RlZEZpbGU9bnVsbCx0aGlzLnBhcnNlZERhdGFzZXRzPVtdLHRoaXMuc3VibWl0dGVkQ3N2RGF0YXNldHM9W10s''@;'; put 'put ''dGhpcy5kYXRhc2V0c0xvYWRpbmc9ITEsdGhpcy51cGxvYWRMb2FkaW5nPSExLHRoaXMuc3VibWl0TG9hZGluZz0hMSx0aGlzLm1hdGNoZWREYXRhc2V0cz1bXSx0aGlzLnNoZWV0TmFtZXM9W10sdGhpcy51c2VySW5wdXREYXRhc2V0cz0iIix0aGlzLmxpYnNBbmRUYWJsZXM9e30sdGhpcy5z''@;'; put 'put ''aG93U3VibWl0UmVhc29uTW9kYWw9ITEsdGhpcy5zdWJtaXRSZWFzb25NZXNzYWdlPSIiLHRoaXMuaG90VXNlckRhdGFzZXRzPXtjb2xIZWFkZXJzOlsiTGlicmFyeSIsIlRhYmxlIl0sZGF0YTpbWyIiLCIiXSxbIiIsIiJdLFsiIiwiIl0sWyIiLCIiXSxbIiIsIiJdLFsiIiwiIl0sWyIiLCIi''@;'; put 'put ''XSxbIiIsIiJdLFsiIiwiIl0sWyIiLCIiXSxbIiIsIiJdLFsiIiwiIl1dLGNvbHVtbnM6W3t0eXBlOiJhdXRvY29tcGxldGUiLGZpbHRlcjohMSxzb3VyY2U6W119LHt0eXBlOiJhdXRvY29tcGxldGUiLGZpbHRlcjohMSxzb3VyY2U6W119XSx3aWR0aDoiMTAwJSIsaGVpZ2h0OiIzMDVweCIs''@;'; put 'put ''Y2xhc3NOYW1lOlsiaHREYXJrIl0sY29udGV4dE1lbnU6e2l0ZW1zOntyb3dfYWJvdmU6e25hbWU6Ikluc2VydCBSb3cgYWJvdmUifSxyb3dfYmVsb3c6e25hbWU6Ikluc2VydCBSb3cgYmVsb3cifX19LG1hbnVhbFJvd01vdmU6ITAsY29sdW1uU29ydGluZzohMH0sdGhpcy5hZnRlckdldENv''@;'; put 'put ''bEhlYWRlcj15dnQsdGhpcy5ob3RSZWdpc3RlcmVyPW5ldyBZbX1uZ09uSW5pdCgpe3RoaXMubGljZW5jZVNlcnZpY2UuaG90X2xpY2Vuc2Vfa2V5LnN1YnNjcmliZShhPT57dGhpcy5ob3RUYWJsZUxpY2Vuc2VLZXk9YX0pfW5nQWZ0ZXJDb250ZW50SW5pdCgpe0tuLmVkaXRvci5zdGFydHVw''@;'; put 'put ''U2V0P3RoaXMuZ2V0RnJvbUdsb2JhbHMoKTp0aGlzLmV2ZW50U2VydmljZS5vblN0YXJ0dXBEYXRhTG9hZGVkLnN1YnNjcmliZSgoKT0+e3RoaXMuZ2V0RnJvbUdsb2JhbHMoKX0pfWdldEZyb21HbG9iYWxzKCl7dGhpcy5saWJzQW5kVGFibGVzPUtuLmVkaXRvci5saWJzQW5kVGFibGVzO2Nv''@;'; put 'put ''bnN0IGE9T2JqZWN0LmtleXModGhpcy5saWJzQW5kVGFibGVzKTt0aGlzLmhvdFVzZXJEYXRhc2V0cz8uY29sdW1ucyYmKHRoaXMuaG90VXNlckRhdGFzZXRzLmNvbHVtbnNbMF0uc291cmNlPWEpfW9uRmlsZUNoYW5nZShhKXt2YXIgZD10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtjb25z''@;'; put 'put ''dCBoPWE/LnRhcmdldD8uZmlsZXN8fFtdO2lmKGgubGVuZ3RoPDEpcmV0dXJuIHZvaWQgZC5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwobnVsbCwiTm8gZmlsZSBmb3VuZC4iLG51bGwsIkZpbGUgVXBsb2FkIik7bGV0IGY9IiI7Zm9yKGxldCB2IG9mIGgpe2NvbnN0IE09di5uYW1lLnNw''@;'; put 'put ''bGl0KCIuIikucG9wKCk7aWYoZnx8KGY9TSksZiE9PU0pcmV0dXJuIHZvaWQgZC5ldmVudFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgiTWl4ZWQgZXh0ZW5zaW9ucyBlcnJvciIsIlBsZWFzZSBzZWxlY3QgZmlsZXMgd2l0aCBzYW1lIGV4dGVuc2lvbi4iKTtmPU19aWYoWyJ4bHN4IiwieGxzbSIs''@;'; put 'put ''InhsbSJdLmluY2x1ZGVzKGYpKWQuc2VsZWN0ZWRGaWxlPWEudGFyZ2V0LmZpbGVzWzBdLGQuc2VsZWN0ZWRGaWxlJiYoZC5maWxlTG9hZGluZ1N0YXRlPXh3LnJlYWRpbmcsZC5zZWxlY3RlZEZpbGUuc2l6ZU1CPWQuc3ByZWFkc2hlZXRTZXJ2aWNlLmJ5dGVzVG9NQihkLnNlbGVjdGVkRmls''@;'; put 'put ''ZS5zaXplKSxkLnNwcmVhZHNoZWV0U2VydmljZS54bHN4UmVhZEZpbGUoZC5zZWxlY3RlZEZpbGUpLnRoZW4odj0+e2QuZmlsZUxvYWRpbmdTdGF0ZT14dy5wYXJzaW5nLGQuc2VsZWN0ZWRGaWxlLndvcmtib29rPXZ9KSksZC5pbml0VXNlcklucHV0SG90KCksZC5vbkF1dG9EZXRlY3RDb2x1''@;'; put 'put ''bW5zKCk7ZWxzZXtpZigiY3N2IiE9PWYpcmV0dXJuIHZvaWQgZC5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwobnVsbCwiT25seSBleGNlbCBleHRlbnNpb25zIGFyZSBhbGxvd2VkLiAoeGxzeCkiLG51bGwsIkV4dGVuc2lvbiBFcnJvciIpO2Qub25NdWx0aUNzdkZpbGVzKGEudGFyZ2V0''@;'; put 'put ''LmZpbGVzKX1hLnRhcmdldC52YWx1ZT0iIn0pKCl9b25NdWx0aUNzdkZpbGVzKGEpe3ZhciBkPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2ZvcihsZXQgaCBvZiBhKXtjb25zdCBmPWQucGFyc2VEYXRhc2V0RnJvbUNzdk5hbWUoaC5uYW1lKTtkLmlzVmFsaWREYXRhc2V0Rm9ybWF0KGYp''@;'; put 'put ''JiZkLmlzVmFsaWREYXRhc2V0UmVmZXJlbmNlKGYpJiZkLmNzdkZpbGVzLnB1c2goe2ZpbGU6aCxmaWxlTmFtZTpoLm5hbWV9KX1kLmNzdkZpbGVzLmxlbmd0aD8oZC5jc3ZTdWJtaXR0aW5nPSEwLHlpZWxkIGQuc3VibWl0Q3N2RmlsZXMoKSxkLmNzdlN1Ym1pdHRpbmc9ITEpOmQuZXZlbnRT''@;'; put 'put ''ZXJ2aWNlLnNob3dJbmZvTW9kYWwoIkNTViBVcGxvYWQiLCJOb25lIG9mIHRoZSBhdHRhY2hlZCBDU1YgZmlsZSBuYW1lcyBtYXRjaGVkIGFuIGFjdHVhbCBkYXRhc2V0LiIpfSkoKX1vbkRpc2NhcmRGaWxlKCl7dGhpcy5zZWxlY3RlZEZpbGU9bnVsbCx0aGlzLnVzZXJJbnB1dERhdGFzZXRz''@;'; put 'put ''PSIifW9uU3RhcnRQYXJzaW5nRmlsZSgpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2EudXBsb2FkTG9hZGluZz0hMDtjb25zdCBkPVtdO2xldCBoPVtdO2ZvcihsZXQgZiBvZiBhLm1hdGNoZWREYXRhc2V0cyl7Y29uc3Qgdj1hLmZldGNoRGF0YXNldChmKTtkLnB1c2godil9''@;'; put 'put ''UHJvbWlzZS5hbGxTZXR0bGVkKGQpLnRoZW4oZj0+e2YuZm9yRWFjaChNPT57ImZ1bGZpbGxlZCI9PT1NLnN0YXR1cyYmTS52YWx1ZSYmaC5wdXNoKE0udmFsdWUpfSksYS51cGxvYWRMb2FkaW5nPSExLGEuYnVpbGREYXRhc2V0c09iamVjdHMoaCkuZm9yRWFjaChNPT57YS5wYXJzZWREYXRh''@;'; put 'put ''c2V0cy5wdXNoKHtsaWJkczpNLmxpYmRzLGluY2x1ZGVJblN1Ym1pc3Npb246ITAsZGF0YXNldEluZm86TSxwYXJzaW5nVGFibGU6ITB9KX0pLGEud29ya2Jvb2tMb2FkZWQoKS50aGVuKE09Pntmb3IobGV0IEQgb2YgYS5wYXJzZWREYXRhc2V0cylhLnNwcmVhZHNoZWV0U2VydmljZS5wYXJz''@;'; put 'put ''ZUV4Y2VsRmlsZSh7ZmlsZTphLnNlbGVjdGVkRmlsZSx3b3JrYm9vazpNLHBhc3N3b3JkOmEuc2VsZWN0ZWRGaWxlLnBhc3N3b3JkfHx2b2lkIDAsZGNWYWxpZGF0b3I6RC5kYXRhc2V0SW5mby5kY1ZhbGlkYXRvcixoZWFkZXJQa3M6RC5kYXRhc2V0SW5mby5oZWFkZXJQa3MsaGVhZGVyQXJy''@;'; put 'put ''YXk6RC5kYXRhc2V0SW5mby5oZWFkZXJBcnJheSxoZWFkZXJTaG93OltdLHRpbWVIZWFkZXJzOkQuZGF0YXNldEluZm8udGltZUhlYWRlcnMsZGF0ZUhlYWRlcnM6RC5kYXRhc2V0SW5mby5kYXRlSGVhZGVycyxkYXRlVGltZUhlYWRlcnM6RC5kYXRhc2V0SW5mby5kYXRlVGltZUhlYWRlcnMs''@;'; put 'put ''eGxSdWxlczpELmRhdGFzZXRJbmZvLnhsUnVsZXN9KS50aGVuKFo9PntpZihhLmZpbGVMb2FkaW5nU3RhdGU9eHcucGFyc2VkLFomJlouZGF0YSl7bGV0IHJlPVtdO1ouZGF0YS5tYXAoY2U9PntsZXQgYmU9e307Wi5oZWFkZXJTaG93Lm1hcCgoRWUsQmUpPT57YmVbRWVdPWNlW0JlXX0pLGJl''@;'; put 'put ''Ll9fX19fREVMRVRFX19USElTX19SRUNPUkRfX19fX3x8KGJlLl9fX19fREVMRVRFX19USElTX19SRUNPUkRfX19fXz0iTm8iKSxyZS5wdXNoKGJlKX0pLEQuZGF0YXNvdXJjZT1yZSxELnBhcnNlUmVzdWx0PVosRC5wYXJzaW5nVGFibGU9ITF9fSkuY2F0Y2goWj0+e2NvbnNvbGUud2Fybigi''@;'; put 'put ''UGFyc2luZyBleGNlbCBmaWxlIGVycm9yLiIsWiksRC5kYXRhc291cmNlPVtdLEQuaW5jbHVkZUluU3VibWlzc2lvbj0hMSxELnBhcnNpbmdUYWJsZT0hMX0pfSl9KX0pKCl9b25TdWJtaXRBbGwoKXt0aGlzLnRhYmxlc1RvU3VibWl0Lmxlbmd0aD90aGlzLnNob3dTdWJtaXRSZWFzb25Nb2Rh''@;'; put 'put ''bD0hMDp0aGlzLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJObyB0YWJsZXMgdG8gc3VibWl0IiwiUGxlYXNlIGluY2x1ZGUgYXQgbGVhc3Qgb25lIHRhYmxlIHRvIHByb2NlZWQuIil9b25EaXNjYXJkKCl7dGhpcy5wYXJzZWREYXRhc2V0cz1bXSx0aGlzLm1hdGNoZWREYXRhc2V0cz1b''@;'; put 'put ''XSx0aGlzLnNlbGVjdGVkRmlsZT1udWxsLHRoaXMudXNlcklucHV0RGF0YXNldHM9IiIsdGhpcy5zdWJtaXRSZWFzb25NZXNzYWdlPSIifWluaXRIb3QoKXtzZXRUaW1lb3V0KCgpPT57dGhpcy5ob3RJbnN0YW5jZT10aGlzLmhvdFJlZ2lzdGVyZXIuZ2V0SW5zdGFuY2UoImhvdEluc3RhbmNl''@;'; put 'put ''Iik7Y29uc3QgZD10aGlzLmNvbnRlbnRBcmVhUmVmLm5hdGl2ZUVsZW1lbnQuY2xpZW50SGVpZ2h0LTE2MCsicHgiO3RoaXMuYWN0aXZlUGFyc2VkRGF0YXNldCYmdGhpcy5ob3RJbnN0YW5jZS51cGRhdGVTZXR0aW5ncyh7ZGF0YTp0aGlzLmFjdGl2ZVBhcnNlZERhdGFzZXQuZGF0YXNvdXJj''@;'; put 'put ''ZXx8W10sY29sSGVhZGVyczp0aGlzLmFjdGl2ZVBhcnNlZERhdGFzZXQuZGF0YXNldEluZm8uaGVhZGVyQ29sdW1ucyxjb2x1bW5zOnRoaXMuYWN0aXZlUGFyc2VkRGF0YXNldC5kYXRhc2V0SW5mby5kY1ZhbGlkYXRvcj8uZ2V0UnVsZXMoKSxyZWFkT25seTohMCxoZWlnaHQ6ZHx8IjMwMHB4''@;'; put 'put ''IixjbGFzc05hbWU6Imh0RGFyayJ9KX0pfWluaXRVc2VySW5wdXRIb3QoKXt2YXIgYT10aGlzO3NldFRpbWVvdXQoKCk9Pnt0aGlzLmhvdEluc3RhbmNlVXNlckRhdGFzZXQ9dGhpcy5ob3RSZWdpc3RlcmVyLmdldEluc3RhbmNlKCJob3RJbnN0YW5jZVVzZXJEYXRhc2V0IiksdGhpcy5ob3RJ''@;'; put 'put ''bnN0YW5jZVVzZXJEYXRhc2V0LmFkZEhvb2soImJlZm9yZUNoYW5nZSIsKGQsaCk9PntpZihkKWZvcihsZXQgZiBvZiBkKWYmJmZbM10mJihmWzNdPWZbM10udG9VcHBlckNhc2UoKSl9KSx0aGlzLmhvdEluc3RhbmNlVXNlckRhdGFzZXQuYWRkSG9vaygiYWZ0ZXJDaGFuZ2UiLGZ1bmN0aW9u''@;'; put 'put ''KCl7dmFyIGQ9ZWUoZnVuY3Rpb24qKGgsZil7aWYoaCl7ImVkaXQiPT09ZiYmKHlpZWxkIGEub25Vc2VySW5wdXREYXRhc2V0c0NoYW5nZSgpKTtmb3IobGV0IHYgb2YgaClhLm1hcmtVbm1hdGNoZWRSb3dzKHZbMF0pO2EuZHluYW1pY0NlbGxWYWxpZGF0aW9ucygpLGEuaG90SW5zdGFuY2VV''@;'; put 'put ''c2VyRGF0YXNldC5yZW5kZXIoKX19KTtyZXR1cm4gZnVuY3Rpb24oaCxmKXtyZXR1cm4gZC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpKSx0aGlzLmhvdEluc3RhbmNlVXNlckRhdGFzZXQuYWRkSG9vaygiYWZ0ZXJSZW1vdmVSb3ciLGZ1bmN0aW9uKCl7dmFyIGQ9ZWUoZnVuY3Rpb24qKGgs''@;'; put 'put ''Zix2LE0pe3lpZWxkIGEub25Vc2VySW5wdXREYXRhc2V0c0NoYW5nZSgpO2ZvcihsZXQgRCBvZiB2KWEubWFya1VubWF0Y2hlZFJvd3MoRCl9KTtyZXR1cm4gZnVuY3Rpb24oaCxmLHYsTSl7cmV0dXJuIGQuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSl9KX1keW5hbWljQ2VsbFZhbGlkYXRp''@;'; put 'put ''b25zKCl7dGhpcy5ob3RJbnN0YW5jZVVzZXJEYXRhc2V0LmdldERhdGEoKS5mb3JFYWNoKChkLGgpPT57Y29uc3QgZj1kWzBdO2YmJmYubGVuZ3RoJiZ0aGlzLmhvdEluc3RhbmNlVXNlckRhdGFzZXQuc2V0Q2VsbE1ldGEoaCwxLCJzb3VyY2UiLHRoaXMubGlic0FuZFRhYmxlc1tmXSl9KX1t''@;'; put 'put ''YXJrVW5tYXRjaGVkUm93cyhhKXtjb25zdCBkPXRoaXMuaG90SW5zdGFuY2VVc2VyRGF0YXNldC5nZXREYXRhQXRSb3coYSksaD1gJHtkWzBdfS4ke2RbMV19YCxmPXRoaXMuaG90SW5zdGFuY2VVc2VyRGF0YXNldC5nZXRDZWxsTWV0YUF0Um93KGEpO2QmJmRbMF0mJmRbMV0/dGhpcy5tYXRj''@;'; put 'put ''aGVkRGF0YXNldHMuaW5jbHVkZXMoaCk/Zi5mb3JFYWNoKHY9Pnt0aGlzLmhvdEluc3RhbmNlVXNlckRhdGFzZXQuc2V0Q2VsbE1ldGEoYSx2LmNvbCwiY2xhc3NOYW1lIiwiIil9KTpmLmZvckVhY2godj0+e3RoaXMuaG90SW5zdGFuY2VVc2VyRGF0YXNldC5zZXRDZWxsTWV0YShhLHYuY29s''@;'; put 'put ''LCJjbGFzc05hbWUiLCJub3QtbWF0Y2hlZCIpfSk6Zi5mb3JFYWNoKHY9Pnt0aGlzLmhvdEluc3RhbmNlVXNlckRhdGFzZXQuc2V0Q2VsbE1ldGEoYSx2LmNvbCwiY2xhc3NOYW1lIiwiIil9KX1vblVzZXJJbnB1dERhdGFzZXRzQ2hhbmdlKCl7cmV0dXJuIG5ldyBQcm9taXNlKChhLGQpPT57''@;'; put 'put ''dGhpcy5oZWxwZXJTZXJ2aWNlLmRlYm91bmNlQ2FsbCgxMDAsKCk9Pntjb25zdCBoPXRoaXMuZ2V0RGF0YXNldHNGcm9tSG90KCk7dGhpcy5tYXRjaGVkRGF0YXNldHM9W10saC5mb3JFYWNoKGY9Pntjb25zdCB2PWYudHJpbSgpO3RoaXMuaXNWYWxpZERhdGFzZXRGb3JtYXQodikmJnRoaXMu''@;'; put 'put ''aXNWYWxpZERhdGFzZXRSZWZlcmVuY2UodikmJiF0aGlzLm1hdGNoZWREYXRhc2V0cy5pbmNsdWRlcyh2KT90aGlzLm1hdGNoZWREYXRhc2V0cy5wdXNoKHYpOmNvbnNvbGUud2FybihgU2hlZXQgbmFtZTogJHt2fSBpcyBub3QgYW4gYWN0dWFsIGRhdGFzZXQgcmVmZXJlbmNlLmApfSksdGhp''@;'; put 'put ''cy5jZHIuZGV0ZWN0Q2hhbmdlcygpLGEodm9pZCAwKX0pfSl9b25BdXRvRGV0ZWN0Q29sdW1ucygpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2xldCBkPSExO2lmKHlpZWxkIGEucGFyc2VFeGNlbFNoZWV0TmFtZXMoKS50aGVuKHY9PnthLnNoZWV0TmFtZXM9dn0pLmNhdGNo''@;'; put 'put ''KHY9Pnt2LmluY2x1ZGVzKCJwYXNzd29yZCIpJiYoZD0hMCl9KSxkKXJldHVybiBhLm9uRGlzY2FyZEZpbGUoKSx2b2lkIGEuZXZlbnRTZXJ2aWNlLnNob3dJbmZvTW9kYWwoIkxvY2tlZCBmaWxlIiwiV2UgZmFpbGVkIHRvIHVubG9jayB0aGUgZmlsZS4iKTthLnNoZWV0TmFtZXMmJihhLm1h''@;'; put 'put ''dGNoZWREYXRhc2V0cz1bXSxhLnVzZXJJbnB1dERhdGFzZXRzPSIiLGEuc2hlZXROYW1lcy5mb3JFYWNoKCh2LE0pPT57Y29uc3QgRD12LnRyaW0oKTthLmlzVmFsaWREYXRhc2V0Rm9ybWF0KEQpJiZhLmlzVmFsaWREYXRhc2V0UmVmZXJlbmNlKEQpP2EubWF0Y2hlZERhdGFzZXRzLnB1c2go''@;'; put 'put ''RCk6Y29uc29sZS53YXJuKGBTaGVldCBuYW1lOiAke0R9IGlzIG5vdCBhbiBhY3R1YWwgZGF0YXNldCByZWZlcmVuY2UuYCl9KSksYS51c2VySW5wdXREYXRhc2V0cz1hLm1hdGNoZWREYXRhc2V0cy5qb2luKCJcbiIpO2NvbnN0IGg9YS5tYXRjaGVkRGF0YXNldHMubWFwKHY9Plt2LnNwbGl0''@;'; put 'put ''KCIuIilbMF0sdi5zcGxpdCgiLiIpWzFdXSksZj1hLmhvdFVzZXJEYXRhc2V0cy5kYXRhLmxlbmd0aDtpZihoLmxlbmd0aDxmKXtjb25zdCB2PWYtaC5sZW5ndGg7Zm9yKGxldCBNPTA7TTx2O00rKyloLnB1c2goWyIiLCIiXSl9YS5ob3RJbnN0YW5jZVVzZXJEYXRhc2V0LnVwZGF0ZURhdGEo''@;'; put 'put ''aCksYS5keW5hbWljQ2VsbFZhbGlkYXRpb25zKCl9KSgpfW9uUGFyc2VkRGF0YXNldENsaWNrKGEpe3RoaXMuZGVzZWxlY3RBbGxQYXJzZWREYXRhc2V0cygpLGEuYWN0aXZlPSEwLHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKSx0aGlzLmluaXRIb3QoKX1vblN1Ym1pdHRlZENzdkRhdGFzZXRD''@;'; put 'put ''bGljayhhKXt0aGlzLmRlc2VsZWN0QWxsU3VibWl0dGVkQ3N2RGF0YXNldHMoKSxhLmFjdGl2ZT0hMH1nZXQgYWN0aXZlUGFyc2VkRGF0YXNldCgpe3JldHVybiB0aGlzLnBhcnNlZERhdGFzZXRzLmZpbmQoYT0+YS5hY3RpdmUpfWdldCBhY3RpdmVTdWJtaXR0ZWRDc3ZEYXRhc2V0KCl7cmV0''@;'; put 'put ''dXJuIHRoaXMuc3VibWl0dGVkQ3N2RGF0YXNldHMuZmluZChhPT5hLmFjdGl2ZSl9Z2V0IG5vdEZvdW5kRGF0YXNldHMoKXtyZXR1cm4gdGhpcy5nZXREYXRhc2V0c0Zyb21Ib3QoKS5maWx0ZXIoZD0+IXRoaXMubWF0Y2hlZERhdGFzZXRzLmluY2x1ZGVzKGQudHJpbSgpKSkuZmlsdGVyKGQ9''@;'; put 'put ''PmQubGVuZ3RoKX1nZXQgaXNIb3RIaWRkZW4oKXtpZighdGhpcy5ob3RJbnN0YW5jZSlyZXR1cm4hMDt0cnl7Y29uc3QgYT10aGlzLmhvdEluc3RhbmNlLmdldFNldHRpbmdzKCkuY2xhc3NOYW1lO3JldHVybiEhYSYmYS5pbmNsdWRlcygiaHRDdXN0b21IaWRkZW4iKX1jYXRjaHtyZXR1cm4h''@;'; put 'put ''MH19Z2V0IHRhYmxlc1RvU3VibWl0KCl7cmV0dXJuIHRoaXMucGFyc2VkRGF0YXNldHMuZmlsdGVyKGE9PmEuZGF0YXNvdXJjZSYmYS5wYXJzZVJlc3VsdCYmYS5pbmNsdWRlSW5TdWJtaXNzaW9uKX1nZXQgc3VibWl0dGluZ0Nzdigpe3JldHVybiB0aGlzLmNzdkZpbGVzLmxlbmd0aD4wfWdl''@;'; put 'put ''dCBleGNlbHNTdWJtaXR0ZWQoKXtyZXR1cm4hIXRoaXMucGFyc2VkRGF0YXNldHMuZmlsdGVyKGE9PmEuc3VibWl0UmVzdWx0KS5sZW5ndGh9ZG93bmxvYWRGaWxlKGEpe3RoaXMuaGVscGVyU2VydmljZS5kb3dubG9hZFRleHRGaWxlKGBzdGFnZWRhdGEtJHt0aGlzLmFjdGl2ZVN1Ym1pdHRl''@;'; put 'put ''ZENzdkRhdGFzZXQ/LmxpYmRzfS1sb2dgLEpTT04uc3RyaW5naWZ5KGEpKX1zdWJtaXRDc3ZGaWxlcygpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2xldCBkPVtdO2ZvcihsZXQgaCBvZiBhLmNzdkZpbGVzKXtjb25zdCBmPWEucGFyc2VEYXRhc2V0RnJvbUNzdk5hbWUoaC5m''@;'; put 'put ''aWxlTmFtZSk7bGV0IHYsTTt5aWVsZCBhLnNhc1NlcnZpY2UudXBsb2FkRmlsZSgic2VydmljZXMvZWRpdG9ycy9sb2FkZmlsZSIsW2hdLHt0YWJsZTpmfSkudGhlbihEPT57dHlwZW9mIEQuYWRhcHRlclJlc3BvbnNlLnNhc2pzQWJvcnQ8InUiP3Y9RC5hZGFwdGVyUmVzcG9uc2Uuc2FzanNB''@;'; put 'put ''Ym9ydDpNPUQuYWRhcHRlclJlc3BvbnNlfSxEPT57Y29uc29sZS5lcnJvcigiZXJyIixEKSx2PUQuYWRhcHRlclJlc3BvbnNlfSksZC5wdXNoKHtzdWNjZXNzOk0sZXJyb3I6dixsaWJkczpmfSl9YS5zdWJtaXR0ZWRDc3ZEYXRhc2V0cz1kfSkoKX1mZXRjaERhdGFzZXQoYSl7dmFyIGQ9dGhp''@;'; put 'put ''cztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7aWYoYSlyZXR1cm4gZC5zYXNTdG9yZVNlcnZpY2UuY2FsbFNlcnZpY2Uoe0xJQkRTOmEsT1VUREVTVDoiV0VCIn0sIlNBU0NvbnRyb2xUYWJsZSIsImVkaXRvcnMvZ2V0ZGF0YSIsYSkudGhlbihmPT5mKS5jYXRjaChmPT57Y29uc29sZS53YXJuKGBF''@;'; put 'put ''cnJvciBmZXRjaGluZyAke2F9YCxmKX0pfSkoKX1zdWJtaXRUYWJsZXMoYSl7dmFyIGQ9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7Y29uc29sZS5pbmZvKCJTdWJtaXR0aW5nIG11bHRpcGxlIHRhYmxlcyIsZC5wYXJzZWREYXRhc2V0cyksZC5zdWJtaXRMb2FkaW5nPSEwO2ZvcihsZXQg''@;'; put 'put ''aCBvZiBkLnBhcnNlZERhdGFzZXRzKXtpZighaC5wYXJzZVJlc3VsdHx8IWguZGF0YXNvdXJjZXx8IWguaW5jbHVkZUluU3VibWlzc2lvbnx8YSYmIWEuaW5jbHVkZXMoaC5saWJkcykpY29udGludWU7bGV0IGY9e307ZC5zdWJtaXRSZWFzb25NZXNzYWdlPWQuc3VibWl0UmVhc29uTWVzc2Fn''@;'; put 'put ''ZS5yZXBsYWNlKC9cbi9nLCIuICIpLGYuQUNUSU9OPSJMT0FEIixmLk1FU1NBR0U9ZC5zdWJtaXRSZWFzb25NZXNzYWdlLGYuTElCRFM9aC5saWJkcztsZXQgdj1oLmRhdGFzb3VyY2U7aWYodil7dj12Lm1hcChiZT0+e2xldCBFZT1iZS5fX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX187''@;'; put 'put ''cmV0dXJuIGRlbGV0ZSBiZS5fX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX18sYmUuX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19fPUVlLE9iamVjdC5rZXlzKGJlKS5tYXAoQmU9PnsibnVtZXJpYyI9PT1oLmRhdGFzZXRJbmZvLmRjVmFsaWRhdG9yPy5nZXRSdWxlKEJlKT8udHlw''@;'; put 'put ''ZSYmIi4iPT09YmVbQmVdJiYoYmVbQmVdPW51bGwpfSksYmV9KTtjb25zdCBNPXYuc2xpY2UoMCxkLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdWJtaXRfcm93c19saW1pdCk7bGV0IEQsWixyZTt5aWVsZCBkLnNhc1N0b3JlU2VydmljZS51cGRhdGVUYWJsZShmLE0sIlNBU0NvbnRyb2xUYWJsZSIs''@;'; put 'put ''ImVkaXRvcnMvc3RhZ2VkYXRhIixoLmRhdGFzZXRJbmZvLmRhdGEuJHNhc2RhdGEsITAse2RlYnVnOiEwfSkudGhlbihiZT0+e1o9YmUuYWRhcHRlclJlc3BvbnNlLHJlPWJlLmxvZ30pLmNhdGNoKGJlPT57Y29uc29sZS5lcnJvcigiZXJyIixiZSksRD1iZS5hZGFwdGVyUmVzcG9uc2UscmU9''@;'; put 'put ''YmUubG9nfSksaC5zdWJtaXRSZXN1bHQ9e3N1Y2Nlc3M6WixlcnJvcjpELGxvZzpyZSxwYXJzZVJlc3VsdDpoLnBhcnNlUmVzdWx0LGxpYmRzOmgubGliZHN9fX1kLnNob3dTdWJtaXRSZWFzb25Nb2RhbD0hMSxkLnN1Ym1pdExvYWRpbmc9ITEsZC5kZXNlbGVjdEFsbFBhcnNlZERhdGFzZXRz''@;'; put 'put ''KCl9KSgpfXJlU3VibWl0VGFibGUoYSl7dmFyIGQ9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7eWllbGQgZC5zdWJtaXRUYWJsZXMoW2EubGliZHNdKTtjb25zdCBoPWQucGFyc2VkRGF0YXNldHMuZmluZChmPT5mLmxpYmRzPT09YS5saWJkcyk7aCYmKGguYWN0aXZlPSEwKX0pKCl9d29y''@;'; put 'put ''a2Jvb2tMb2FkZWQoKXtyZXR1cm4gbmV3IFByb21pc2UoKGEsZCk9Pnt0aGlzLnNlbGVjdGVkRmlsZXx8ZCgiTm8gZmlsZSBzZWxlY3RlZCIpLHRoaXMud29ya2Jvb2tJbnRlcnZhbD1zZXRJbnRlcnZhbCgoKT0+e3RoaXMuc2VsZWN0ZWRGaWxlLndvcmtib29rJiYoY2xlYXJJbnRlcnZhbCh0''@;'; put 'put ''aGlzLndvcmtib29rSW50ZXJ2YWwpLGEodGhpcy5zZWxlY3RlZEZpbGUud29ya2Jvb2spKX0sNTAwKX0pfXBhcnNlRGF0YXNldEZyb21Dc3ZOYW1lKGEpe2NvbnN0IGQ9YS5zcGxpdCgiLiIpO3JldHVybiBkLnBvcCgpLGQuam9pbigiLiIpfWdldERhdGFzZXRzRnJvbUhvdCgpe3JldHVybiB0''@;'; put 'put ''aGlzLmhvdEluc3RhbmNlVXNlckRhdGFzZXQ/dGhpcy5ob3RJbnN0YW5jZVVzZXJEYXRhc2V0LmdldERhdGEoKS5maWx0ZXIoZD0+ZFswXT8ubGVuZ3RoJiZkWzFdPy5sZW5ndGgpLm1hcChkPT5kP2Ake2RbMF19LiR7ZFsxXX1gOiIiKTpbXX1wYXJzZUV4Y2VsU2hlZXROYW1lcygpe3ZhciBh''@;'; put 'put ''PXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe3JldHVybiBuZXcgUHJvbWlzZSgoZCxoKT0+e2lmKCFhLnNlbGVjdGVkRmlsZSlyZXR1cm4gZChbXSk7YS5zcHJlYWRzaGVldFNlcnZpY2UucGFyc2VFeGNlbFNoZWV0TmFtZXMoYS5zZWxlY3RlZEZpbGUpLnRoZW4oZj0+KGYucGFzc3dvcmQm''@;'; put 'put ''JihhLnNlbGVjdGVkRmlsZS5wYXNzd29yZD1mLnBhc3N3b3JkKSxkKGYuc2hlZXROYW1lcykpKS5jYXRjaChmPT5oKGYpKX0pfSkoKX1pc1ZhbGlkRGF0YXNldEZvcm1hdChhKXtyZXR1cm4vXlx3ezEsOH1cLlx3ezEsMzJ9JC9naW0udGVzdChhKX1pc1ZhbGlkRGF0YXNldFJlZmVyZW5jZShh''@;'; put 'put ''KXtjb25zdCBkPWEuc3BsaXQoIi4iKVswXSxoPWEuc3BsaXQoIi4iKVsxXTtyZXR1cm4hIXRoaXMubGlic0FuZFRhYmxlc1tkXT8uaW5jbHVkZXMoaCl9YnVpbGREYXRhc2V0c09iamVjdHMoYSl7aWYoIWEpcmV0dXJuW107Y29uc3QgZD1bXTtmb3IobGV0IGggb2YgYSlpZihoLmRhdGEpe2Nv''@;'; put 'put ''bnN0IGY9ey4uLmgsaG90VGFibGU6e2RhdGE6aC5kYXRhLnNhc2RhdGEsc2V0dGluZ3M6e319LGNvbHM6W10saGVhZGVyQ29sdW1uczpbXSxoZWFkZXJQa3M6W10saGVhZGVyQXJyYXk6W10sZGF0ZUhlYWRlcnM6W10sdGltZUhlYWRlcnM6W10sZGF0ZVRpbWVIZWFkZXJzOltdLHhsUnVsZXM6''@;'; put 'put ''W10sY29sdW1uSGVhZGVyOltdfTtmLmNvbHM9aC5kYXRhLmNvbHMsZi5oZWFkZXJDb2x1bW5zPWguZGF0YS5zYXNwYXJhbXNbMF0uQ09MSEVBREVSUy5zcGxpdCgiLCIpLGYuaGVhZGVyUGtzPWguZGF0YS5zYXNwYXJhbXNbMF0uUEsuc3BsaXQoIiAiKSwtMSE9PWYuaGVhZGVyQ29sdW1ucy5p''@;'; put 'put ''bmRleE9mKCJfX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX18iKSYmKGYuaGVhZGVyQ29sdW1uc1tmLmhlYWRlckNvbHVtbnMuaW5kZXhPZigiX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19fIildPSJEZWxldGU/IiksZi5oZWFkZXJBcnJheT1mLmhlYWRlckNvbHVtbnMuc2xpY2Uo''@;'; put 'put ''MSksIiIhPT1oLmRhdGEuc2FzcGFyYW1zWzBdLkRUVkFSUyYmKGYuZGF0ZUhlYWRlcnM9aC5kYXRhLnNhc3BhcmFtc1swXS5EVFZBUlMuc3BsaXQoIiAiKSksIiIhPT1oLmRhdGEuc2FzcGFyYW1zWzBdLlRNVkFSUyYmKGYudGltZUhlYWRlcnM9aC5kYXRhLnNhc3BhcmFtc1swXS5UTVZBUlMu''@;'; put 'put ''c3BsaXQoIiAiKSksIiIhPT1oLmRhdGEuc2FzcGFyYW1zWzBdLkRUVE1WQVJTJiYoZi5kYXRlVGltZUhlYWRlcnM9aC5kYXRhLnNhc3BhcmFtc1swXS5EVFRNVkFSUy5zcGxpdCgiICIpKSxoLmRhdGEueGxfcnVsZXMubGVuZ3RoPjAmJihmLnhsUnVsZXM9dGhpcy5oZWxwZXJTZXJ2aWNlLmRl''@;'; put 'put ''ZXBDbG9uZShoLmRhdGEueGxfcnVsZXMpKSxmLmRjVmFsaWRhdG9yPW5ldyBDNmUoaC5kYXRhLnNhc3BhcmFtc1swXSxoLmRhdGEuJHNhc2RhdGEsaC5kYXRhLmNvbHMsaC5kYXRhLmRxcnVsZXMsaC5kYXRhLmRxZGF0YSksZi5jb2x1bW5IZWFkZXI9aC5kYXRhLnNhc3BhcmFtc1swXS5DT0xI''@;'; put 'put ''RUFERVJTLnNwbGl0KCIsIiksZC5wdXNoKGYpfXJldHVybiBkfWRlc2VsZWN0QWxsUGFyc2VkRGF0YXNldHMoKXtmb3IobGV0IGEgb2YgdGhpcy5wYXJzZWREYXRhc2V0cylhLmFjdGl2ZT0hMX1kZXNlbGVjdEFsbFN1Ym1pdHRlZENzdkRhdGFzZXRzKCl7Zm9yKGxldCBhIG9mIHRoaXMuc3Vi''@;'; put 'put ''bWl0dGVkQ3N2RGF0YXNldHMpYS5hY3RpdmU9ITF9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UodmMpLEdlKHUxKSxHZShTdSksR2Uoa2gpLEdlKEE2ZSksR2UoR3MpLEdlKEVzKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpj''@;'; put 'put ''LHNlbGVjdG9yczpbWyJhcHAtbXVsdGktZGF0YXNldCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZCxoKXtpZigxJmQmJnFhKF92dCw3KSwyJmQpe2xldCBmO0NpKGY9U2koKSkmJihoLmNvbnRlbnRBcmVhUmVmPWYuZmlyc3QpfX0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oZCxo''@;'; put 'put ''KXsyJmQmJlRyKCJjb250ZW50LWNvbnRhaW5lciIsaC5jb250ZW50Q29udGFpbmVyQ2xhc3MpfSxkZWNsczozNyx2YXJzOjE4LGNvbnN0czpbWyJjb250ZW50QXJlYSIsIiJdLFsiZmlsZVVwbG9hZElucHV0IiwiIl0sWyJjbGFzcyIsIm15LTEwLW14LWF1dG8gdGV4dC1jZW50ZXIiLDQsIm5n''@;'; put 'put ''SWYiXSxbImNsYXNzIiwidGV4dC1jZW50ZXIgbWItMTAiLDQsIm5nSWYiXSxbNCwibmdJZiJdLFsxLCJjb250ZW50LWFyZWEiXSxbMSwiY2FyZCIsIm5vLWJvcmRlcnMiLCJoLTEwMCIsImQtZmxleCIsImNsci1mbGV4LWNvbHVtbiJdLFsxLCJoZWFkZXItcm93IiwiY2xyLXJvdyIsImp1c3Rp''@;'; put 'put ''ZnktY29udGVudC1iZXR3ZWVuIiwiY2xyLWp1c3RpZnktY29udGVudC1jZW50ZXIiLCJ3LTEwMCIsIm0tMCJdLFsiY2RzLXRleHQiLCJzZWN0aW9uIl0sWyJjbGFzcyIsIm5vLXRhYmxlLXNlbGVjdGVkIHBvaW50ZXItZXZlbnRzLW5vbmUiLDQsIm5nSWYiXSxbMywiY2xyTW9kYWxPcGVuQ2hh''@;'; put 'put ''bmdlIiwiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxDbG9zYWJsZSJdLFsxLCJtb2RhbC10aXRsZSJdLFsxLCJtb2RhbC1ib2R5Il0sWyJjZHMtdGV4dCIsImJvZHkiLCJjbGFzcyIsImxpY2VuY2UtbGltaXQtbm90aWNlIG10LTAgbWItMTUiLDQsIm5nSWYiXSxbMSwidGV4dC1hcmVhLWZ1bGwt''@;'; put 'put ''d2lkdGgiXSxbImZvciIsImZvcm1GaWVsZHNfOCIsMSwibWItNSIsImQtYmxvY2siXSxbImNsclRleHRhcmVhIiwiIiwidGFiaW5kZXgiLCIwIiwidHlwZSIsInRleHQiLCJpZCIsImZvcm1GaWVsZHNfOCIsMSwic3VibWl0LXJlYXNvbiIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiXSxb''@;'; put 'put ''ImNkcy10ZXh0IiwiY2FwdGlvbl9jbGVhbiIsMSwibXQtMTAiXSxbMSwibW9kYWwtZm9vdGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tb3V0bGluZSIsMywiY2xpY2siLCJkaXNhYmxlZCJdLFsidHlwZSIsImJ1dHRvbiIsImlkIiwic3VibWl0LXRhYmxlcyIsMSwiYnRuIiwi''@;'; put 'put ''YnRuLXByaW1hcnkiLDMsImNsaWNrIiwiY2xyTG9hZGluZyJdLFsxLCJ0ZXh0LWNlbnRlciJdLFsiY2xyTWVkaXVtIiwiIl0sWyJjZHMtdGV4dCIsImNhcHRpb25fY2xlYW4iLDEsIm10LTEwIiwidGV4dC1jZW50ZXIiXSxbMSwibXktMTAtbXgtYXV0byIsInRleHQtY2VudGVyIl0sWzEsInRl''@;'; put 'put ''eHQtY2VudGVyIiwibWItMTAiXSxbImlkIiwiYnJvd3NlLWZpbGUiLDEsImJ0biIsImJ0bi1wcmltYXJ5IiwiYnRuLXNtIiwzLCJjbGljayIsImRpc2FibGVkIl0sWyJoaWRkZW4iLCIiLCJpZCIsImZpbGUtdXBsb2FkIiwidHlwZSIsImZpbGUiLCJtdWx0aXBsZSIsIiIsMywiY2hhbmdlIl0s''@;'; put 'put ''WyJjZHMtdGV4dCIsImNhcHRpb24iLDEsIm1sLTEwIiwibWItMTAiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImJ0biIsImJ0bi1kYW5nZXIiLCJidG4tc20iLCJtci0xMCIsMywiY2xpY2siXSxbImlkIiwic3VibWl0LWFsbCIsMSwiYnRuIiwiYnRuLXByaW1hcnkiLCJidG4tc20iLDMs''@;'; put 'put ''ImNsaWNrIl0sWzEsImNsci10cmVlbm9kZS1saW5rIiwid2hpdGVzcGFjZS1ub3dyYXAiLCJkLWZsZXgiLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIiwzLCJjbGljayJdLFsxLCJtbC01Il0sWyJzdGF0dXMiLCJkYW5nZXIiLCJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIsNCwibmdJZiJd''@;'; put 'put ''LFsic3RhdHVzIiwic3VjY2VzcyIsInNoYXBlIiwiY2hlY2stY2lyY2xlIiw0LCJuZ0lmIl0sWyJzdGF0dXMiLCJkYW5nZXIiLCJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSJdLFsic3RhdHVzIiwic3VjY2VzcyIsInNoYXBlIiwiY2hlY2stY2lyY2xlIl0sWyJzaGFwZSIsInRhYmxlIiw0''@;'; put 'put ''LCJuZ0lmIl0sWyJzaGFwZSIsInRhYmxlIl0sWyJjbHJTbWFsbCIsIiIsNCwibmdJZiJdLFsiY2xyU21hbGwiLCIiXSxbImNkcy10ZXh0IiwiY2FwdGlvbiIsMSwibWwtMTAiLCJtYi0xMCIsIm10LTEwIl0sWzEsImNsci10cmVlbm9kZS1saW5rIiwid2hpdGVzcGFjZS1ub3dyYXAiLDMsImNs''@;'; put 'put ''aWNrIl0sWzEsIm5vLXRhYmxlLXNlbGVjdGVkIiwicG9pbnRlci1ldmVudHMtbm9uZSJdLFsic2hhcGUiLCJ1cGxvYWQtY2xvdWQiLCJzaXplIiwiNDAiLDEsImlzLWluZm8iLCJpY29uLWRjLWZpbGwiXSxbImNkcy10ZXh0Iiwic2VjdGlvbiIsMSwidGV4dC1jZW50ZXIiLCJjb2xvci1ncmF5''@;'; put 'put ''IiwibXQtMTAiXSxbMSwiZC1mbGV4IiwiY2xyLWp1c3RpZnktY29udGVudC1jZW50ZXIiLCJtdC0xNSJdLFsxLCJkYXRhc2V0LWlucHV0LXdyYXBwZXIiXSxbImNkcy10ZXh0Iiwic2Vjb25kYXJ5IHJlZ3VsYXIiLDEsIm1iLTUiXSxbImNsclRvb2x0aXBUcmlnZ2VyIiwiIiwic2hhcGUiLCJ0''@;'; put 'put ''cmFzaCIsInN0YXR1cyIsImRhbmdlciIsMSwibWwtNSIsImN1cnNvci1wb2ludGVyIiwzLCJjbGljayJdLFsiY2RzLXRleHQiLCJzZWNvbmRhcnkgcmVndWxhciIsMSwibWItMjAiXSxbImNkcy10ZXh0Iiwic2Vjb25kYXJ5IHJlZ3VsYXIiLDEsIm1iLTE1Il0sWzEsIm1iLTUiXSxbImhvdElk''@;'; put 'put ''IiwiaG90SW5zdGFuY2VVc2VyRGF0YXNldCIsImlkIiwiaG90VGFibGVVc2VyRGF0YXNldCIsInN0cmV0Y2hIIiwiYWxsIiwxLCJtdC0xNSIsMywiYWZ0ZXJHZXRDb2xIZWFkZXIiLCJzZXR0aW5ncyIsImxpY2Vuc2VLZXkiXSxbMSwiZGF0YXNldC1zZWxlY3Rpb24tYWN0aW9ucyIsInRleHQt''@;'; put 'put ''cmlnaHQiLCJtdC0xMCJdLFsiaWQiLCJjb250aW51ZS1idG4iLDEsImJ0biIsImJ0bi1wcmltYXJ5IiwiYnRuLXNtIiwzLCJjbGljayIsImRpc2FibGVkIiwiY2xyTG9hZGluZyJdLFsic2hhcGUiLCJwcm9jZXNzLW9uLXZtIiwic2l6ZSIsIjQwIiwxLCJpcy1pbmZvIiwiaWNvbi1kYy1maWxs''@;'; put 'put ''Il0sWyJzaGFwZSIsIndhcm5pbmctc3RhbmRhcmQiLCJzaXplIiwiNDAiLDEsImlzLWluZm8iLCJpY29uLWRjLWZpbGwiXSxbImNsYXNzIiwiZC1mbGV4IGNsci1qdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBwLTEwIG10LTE1IHN1Ym1pc3Npb24tcmVzdWx0cyIsNCwibmdJZiJdLFsiY2xhc3Mi''@;'; put 'put ''LCJlcnJvci1maWVsZCBtdC0xNSIsNCwibmdJZiJdLFsxLCJkLWZsZXgiLCJjbHItanVzdGlmeS1jb250ZW50LWJldHdlZW4iLCJwLTEwIiwibXQtMTUiXSxbImNkcy10ZXh0Iiwic2Vjb25kYXJ5IHJlZ3VsYXIiLDEsIm1iLTEwIl0sWyJjZHMtdGV4dCIsInNlY29uZGFyeSByZWd1bGFyIl0s''@;'; put 'put ''WyJjbHJUb29sdGlwVHJpZ2dlciIsIiIsMywicm91dGVyTGluayJdLFszLCJjbHJQb3NpdGlvbiIsImNsclNpemUiXSxbInR5cGUiLCJjaGVja2JveCIsImNsclRvZ2dsZSIsIiIsIm5hbWUiLCJvcHRpb25zIiwicmVxdWlyZWQiLCIiLCJ2YWx1ZSIsIm9wdGlvbjEiLDMsIm5nTW9kZWxDaGFu''@;'; put 'put ''Z2UiLCJuZ01vZGVsIiwiZGlzYWJsZWQiXSxbImNsYXNzIiwidGV4dC1jZW50ZXIgdy0xMDAiLDQsIm5nSWYiXSxbImhvdElkIiwiaG90SW5zdGFuY2UiLCJpZCIsImhvdFRhYmxlIiwic3RyZXRjaEgiLCJhbGwiLDEsIm10LTE1IiwzLCJhZnRlckdldENvbEhlYWRlciIsImNsYXNzTmFtZSIs''@;'; put 'put ''ImxpY2Vuc2VLZXkiLCJtdWx0aUNvbHVtblNvcnRpbmciLCJ2aWV3cG9ydFJvd1JlbmRlcmluZ09mZnNldCIsIm1hbnVhbENvbHVtblJlc2l6ZSIsImZpbHRlcnMiXSxbMSwiZC1mbGV4IiwiY2xyLWp1c3RpZnktY29udGVudC1iZXR3ZWVuIiwicC0xMCIsIm10LTE1Iiwic3VibWlzc2lvbi1y''@;'; put 'put ''ZXN1bHRzIl0sWyJjbGFzcyIsImNvbG9yLWdyZWVuIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNvbG9yLXJlZCIsNCwibmdJZiJdLFsiY2RzLXRleHQiLCJzZWNvbmRhcnkgcmVndWxhciIsNCwibmdJZiJdLFsiY2xhc3MiLCJidG4gYnRuLXByaW1hcnkgbXQtMTAiLDMsImNsckxvYWRpbmciLCJj''@;'; put 'put ''bGljayIsNCwibmdJZiJdLFsxLCJidG4iLCJidG4tcHJpbWFyeS1vdXRsaW5lIiwibXQtMTAiLDMsImNsaWNrIl0sWzEsImNvbG9yLWdyZWVuIl0sWzEsImNvbG9yLXJlZCJdLFsxLCJidG4iLCJidG4tcHJpbWFyeSIsIm10LTEwIiwzLCJjbGljayIsImNsckxvYWRpbmciXSxbMSwiZXJyb3It''@;'; put 'put ''ZmllbGQiLCJtdC0xNSJdLFsxLCJsb2ctd3JhcHBlciJdLFsiY2xhc3MiLCJkLWZsZXggY2xyLWFsaWduLWl0ZW1zLWNlbnRlciIsNCwibmdJZiJdLFsxLCJkLWZsZXgiLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIl0sWyJjbHJTbWFsbCIsIiIsMSwibWwtNSJdLFsxLCJ0ZXh0LWNlbnRlciIs''@;'; put 'put ''InctMTAwIl0sWzEsInNwaW5uZXItbWQiXSxbMSwiZC1mbGV4IiwiY2xyLWp1c3RpZnktY29udGVudC1iZXR3ZWVuIiwicC0xMCJdLFsiY2RzLXRleHQiLCJib2R5IiwxLCJsaWNlbmNlLWxpbWl0LW5vdGljZSIsIm10LTAiLCJtYi0xNSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpe2lmKDEm''@;'; put 'put ''ZCl7Y29uc3QgZj1MbigpO2RlKDAsImFwcC1zaWRlYmFyIiksZ3QoMSxDdnQsMiwwLCJkaXYiLDIpKDIsU3Z0LDUsMSwiZGl2IiwzKSgzLEZ2dCw2LDIsIm5nLWNvbnRhaW5lciIsNCkoNCxCdnQsNSwxLCJuZy1jb250YWluZXIiLDQpLGhlKCksZGUoNSwiZGl2Iiw1LDApKDcsImRpdiIsNiko''@;'; put 'put ''OCwiZGl2Iiw3KSg5LCJwIiw4KSxMZSgxMCwiTXVsdGkgRGF0YXNldCBMb2FkIiksaGUoKSgpLGd0KDExLGp2dCw0LDAsImRpdiIsOSkoMTIsaGJ0LDUsNCwibmctY29udGFpbmVyIiw0KSxoZSgpKCksZGUoMTMsImNsci1tb2RhbCIsMTApLGdpKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0''@;'; put 'put ''aW9uKE0pe3JldHVybiB3dChmKSxtaShoLnNob3dTdWJtaXRSZWFzb25Nb2RhbCxNKXx8KGguc2hvd1N1Ym1pdFJlYXNvbk1vZGFsPU0pLEN0KE0pfSksZGUoMTQsImgzIiwxMSksTGUoMTUpLGhlKCksZGUoMTYsImRpdiIsMTIpLGd0KDE3LGZidCwyLDEsInAiLDEzKSxkZSgxOCwiZGl2Iiwx''@;'; put 'put ''NCkoMTksImxhYmVsIiwxNSksTGUoMjAsIk1lc3NhZ2UiKSxoZSgpLGRlKDIxLCJ0ZXh0YXJlYSIsMTYpLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksbWkoaC5zdWJtaXRSZWFzb25NZXNzYWdlLE0pfHwoaC5zdWJtaXRSZWFzb25NZXNzYWdlPU0pLEN0KE0p''@;'; put 'put ''fSksaGUoKSgpLGRlKDIyLCJwIiwxNyksTGUoMjMsIiBUYWJsZXMgd2lsbCBiZSBzZW50IHNlcXVlbnRpYWxseSwgbG9ncyB3aWxsIGJlIGF2YWlsYWJsZSBhZnRlciBhbGwgdGFibGVzIGFyZSBzdWJtaXR0ZWQuICIpLGhlKCkoKSxkZSgyNCwiZGl2IiwxOCkoMjUsImJ1dHRvbiIsMTkpLEZ0''@;'; put 'put ''KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5zaG93U3VibWl0UmVhc29uTW9kYWw9ITEpfSksTGUoMjYsIiBDYW5jZWwgIiksaGUoKSxkZSgyNywiYnV0dG9uIiwyMCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxDdChoLnN1Ym1pdFRhYmxlcygpKX0p''@;'; put 'put ''LExlKDI4LCIgU3VibWl0ICIpLGhlKCkoKSgpLGRlKDI5LCJjbHItbW9kYWwiLDEwKSxnaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksbWkoaC5jc3ZTdWJtaXR0aW5nLE0pfHwoaC5jc3ZTdWJtaXR0aW5nPU0pLEN0KE0pfSksZGUoMzAsImgzIiwxMSks''@;'; put 'put ''TGUoMzEpLGhlKCksZGUoMzIsImRpdiIsMTIpKDMzLCJkaXYiLDIxKSxHdCgzNCwiY2xyLXNwaW5uZXIiLDIyKSxoZSgpLGRlKDM1LCJwIiwyMyksTGUoMzYsIiBUaGlzIHdpbGwgdGFrZSBmZXcgbW9tZW50cyAiKSxoZSgpKCkoKX0yJmQmJihmZSgpLE1lKCJuZ0lmIixoLmRhdGFzZXRzTG9h''@;'; put 'put ''ZGluZyksZmUoKSxNZSgibmdJZiIsIWgucGFyc2VkRGF0YXNldHMubGVuZ3RoKSxmZSgpLE1lKCJuZ0lmIixoLnBhcnNlZERhdGFzZXRzLmxlbmd0aCYmIWguc3VibWl0dGVkQ3N2RGF0YXNldHMubGVuZ3RoKSxmZSgpLE1lKCJuZ0lmIixoLnN1Ym1pdHRlZENzdkRhdGFzZXRzLmxlbmd0aCks''@;'; put 'put ''ZmUoNyksTWUoIm5nSWYiLG51bGw9PT1oLnNlbGVjdGVkRmlsZSYmIWguc3VibWl0dGluZ0NzdiksZmUoKSxNZSgibmdJZiIsbnVsbCE9PWguc2VsZWN0ZWRGaWxlfHxoLnN1Ym1pdHRpbmdDc3YpLGZlKCkscGkoImNsck1vZGFsT3BlbiIsaC5zaG93U3VibWl0UmVhc29uTW9kYWwpLE1lKCJj''@;'; put 'put ''bHJNb2RhbENsb3NhYmxlIiwhMSksZmUoMiksVXUoIiBTdWJtaXQgIixoLnRhYmxlc1RvU3VibWl0Lmxlbmd0aCwiICIsMT09PWgudGFibGVzVG9TdWJtaXQubGVuZ3RoPyJ0YWJsZSI6InRhYmxlcyIsIiBmb3IgYXBwcm92YWwgIiksZmUoMiksTWUoIm5nSWYiLGgubGljZW5jZVN0YXRlLnZh''@;'; put 'put ''bHVlLnN1Ym1pdF9yb3dzX2xpbWl0IT09aC5JbmZpbml0eSksZmUoNCkscGkoIm5nTW9kZWwiLGguc3VibWl0UmVhc29uTWVzc2FnZSksZmUoNCksTWUoImRpc2FibGVkIixoLnN1Ym1pdExvYWRpbmcpLGZlKDIpLE1lKCJjbHJMb2FkaW5nIixoLnN1Ym1pdExvYWRpbmcpLGZlKDIpLHBpKCJj''@;'; put 'put ''bHJNb2RhbE9wZW4iLGguY3N2U3VibWl0dGluZyksTWUoImNsck1vZGFsQ2xvc2FibGUiLCExKSxmZSgyKSxVdSgiIFN1Ym1pdHRpbmcgIixoLmNzdkZpbGVzLmxlbmd0aCwiIENTViAiLDE9PT1oLmNzdkZpbGVzLmxlbmd0aD8iZmlsZSI6ImZpbGVzIiwiICIpKX0sZGVwZW5kZW5jaWVzOltE''@;'; put 'put ''XyxjMSxxbCxNZCxubCxvWSwkcyxFaCxQZCxmZyxIbCxycyxvdSxLdSxqMCxQMixkcyxqTCxJZCxTaCxRTCx2Nyx5NyxiNyxSZCxpNCxucyxiYSxlWl0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKX1dfV07bGV0IGdidD0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZh''@;'; put 'put ''Yz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbemMuZm9yQ2hpbGQocGJ0KSx6Y119KX19cmV0dXJuIGN9KSgpO25OKCk7bGV0IG1idD0oKCk9PntjbGFzcyBj''@;'; put 'put ''e3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbbzksZ2J0LFJjLHowLEc5LFJhLHhBLG5mXX0pfX1yZXR1cm4gY30pKCk7''@;'; put 'put ''Y29uc3QgdmJ0PVt7cGF0aDoiIixjb21wb25lbnQ6dTl0LGNoaWxkcmVuOlt7cGF0aDoiIixwYXRoTWF0Y2g6ImZ1bGwiLHJlZGlyZWN0VG86InRhYmxlcyJ9LHtwYXRoOiJ0YWJsZXMiLGNvbXBvbmVudDpLOXR9LHtwYXRoOiJleGNlbC1tYXBzIixsb2FkQ2hpbGRyZW46KCk9PnZ2dH0se3Bh''@;'; put 'put ''dGg6Im11bHRpLWxvYWQiLGxvYWRDaGlsZHJlbjooKT0+bWJ0fV19XTtsZXQgYmJ0PSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1raSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUw''@;'; put 'put ''Mjc1aW5qPUFyKHtpbXBvcnRzOlt6Yy5mb3JDaGlsZCh2YnQpLHpjXX0pfX1yZXR1cm4gY30pKCkseWJ0PSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1raSh7dHlwZTpjfSl9c3Rh''@;'; put 'put ''dGlje3RoaXMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltiYnQsUmMsejAsRzksUmEseEEsbmZdfSl9fXJldHVybiBjfSkoKSx0dGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMubGljZW5jZVNlcnZpY2U9YSx0aGlzLnJvdXRlcj1kfWNhbkFjdGl2YXRlKGEsZCl7cmV0dXJu''@;'; put 'put ''ISEodm9pZCAwIT09ZD8ucm9vdC5xdWVyeVBhcmFtcy5mb3JjZXx8ZD8udXJsLmluY2x1ZGVzKCJsaWNlbnNpbmcvdXBkYXRlIikmJnRoaXMubGljZW5jZVNlcnZpY2UuaXNBcHBBY3RpdmF0ZWR8fG51bGwhPT10aGlzLmxpY2VuY2VTZXJ2aWNlLmlzQXBwQWN0aXZhdGVkLnZhbHVlJiYhMT09''@;'; put 'put ''PXRoaXMubGljZW5jZVNlcnZpY2UuaXNBcHBBY3RpdmF0ZWQudmFsdWUpfHwodGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL2hvbWUiKSwhMSl9Y2FuRGVhY3RpdmF0ZShhLGQsaCxmKXtyZXR1cm4hKGg/LnVybC5pbmNsdWRlcygibGljZW5zaW5nL3JlZ2lzdGVyIil8fHRoaXMubGljZW5j''@;'; put 'put ''ZVNlcnZpY2UuYXBwTG9ja2VkLnZhbHVlKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKSh4cih1MSkseHIoTHMpKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSl9fXJldHVybiBjfSkoKTts''@;'; put 'put ''ZXQgUzY9e2FzeW5jOiExLGJhc2VVcmw6bnVsbCxicmVha3M6ITEsZXh0ZW5zaW9uczpudWxsLGdmbTohMCxoZWFkZXJJZHM6ITAsaGVhZGVyUHJlZml4OiIiLGhpZ2hsaWdodDpudWxsLGhvb2tzOm51bGwsbGFuZ1ByZWZpeDoibGFuZ3VhZ2UtIixtYW5nbGU6ITAscGVkYW50aWM6ITEscmVu''@;'; put 'put ''ZGVyZXI6bnVsbCxzYW5pdGl6ZTohMSxzYW5pdGl6ZXI6bnVsbCxzaWxlbnQ6ITEsc21hcnR5cGFudHM6ITEsdG9rZW5pemVyOm51bGwsd2Fsa1Rva2VuczpudWxsLHhodG1sOiExfTtmdW5jdGlvbiBqNmUoYyl7UzY9Y31jb25zdCB6NmU9L1smPD4iJ10vLF9idD1uZXcgUmVnRXhwKHo2ZS5z''@;'; put 'put ''b3VyY2UsImciKSxVNmU9L1s8PiInXXwmKD8hKCNcZHsxLDd9fCNbWHhdW2EtZkEtRjAtOV17MSw2fXxcdyspOykvLHdidD1uZXcgUmVnRXhwKFU2ZS5zb3VyY2UsImciKSxDYnQ9eyImIjoiJmFtcDsiLCI8IjoiJmx0OyIsIj4iOiImZ3Q7IiwnIic6IiZxdW90OyIsIiciOiImIzM5OyJ9LFo2''@;'; put 'put ''ZT1jPT5DYnRbY107ZnVuY3Rpb24geDEoYyxsKXtpZihsKXtpZih6NmUudGVzdChjKSlyZXR1cm4gYy5yZXBsYWNlKF9idCxaNmUpfWVsc2UgaWYoVTZlLnRlc3QoYykpcmV0dXJuIGMucmVwbGFjZSh3YnQsWjZlKTtyZXR1cm4gY31jb25zdCBTYnQ9LyYoIyg/OlxkKyl8KD86I3hbMC05QS1G''@;'; put 'put ''YS1mXSspfCg/Olx3KykpOz8vZ2k7ZnVuY3Rpb24gVzZlKGMpe3JldHVybiBjLnJlcGxhY2UoU2J0LChsLGEpPT4iY29sb24iPT09KGE9YS50b0xvd2VyQ2FzZSgpKT8iOiI6IiMiPT09YS5jaGFyQXQoMCk/IngiPT09YS5jaGFyQXQoMSk/U3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludChh''@;'; put 'put ''LnN1YnN0cmluZygyKSwxNikpOlN0cmluZy5mcm9tQ2hhckNvZGUoK2Euc3Vic3RyaW5nKDEpKToiIil9Y29uc3QgTWJ0PS8oXnxbXlxbXSlcXi9nO2Z1bmN0aW9uIElsKGMsbCl7Yz0ic3RyaW5nIj09dHlwZW9mIGM/YzpjLnNvdXJjZSxsPWx8fCIiO2NvbnN0IGE9e3JlcGxhY2U6KGQsaCk9''@;'; put 'put ''PihoPShoPWguc291cmNlfHxoKS5yZXBsYWNlKE1idCwiJDEiKSxjPWMucmVwbGFjZShkLGgpLGEpLGdldFJlZ2V4OigpPT5uZXcgUmVnRXhwKGMsbCl9O3JldHVybiBhfWNvbnN0IHhidD0vW15cdzpdL2csRWJ0PS9eJHxeW2Etel1bYS16MC05Ky4tXSo6fF5bPyNdL2k7ZnVuY3Rpb24gWTZl''@;'; put 'put ''KGMsbCxhKXtpZihjKXtsZXQgZDt0cnl7ZD1kZWNvZGVVUklDb21wb25lbnQoVzZlKGEpKS5yZXBsYWNlKHhidCwiIikudG9Mb3dlckNhc2UoKX1jYXRjaHtyZXR1cm4gbnVsbH1pZigwPT09ZC5pbmRleE9mKCJqYXZhc2NyaXB0OiIpfHwwPT09ZC5pbmRleE9mKCJ2YnNjcmlwdDoiKXx8MD09''@;'; put 'put ''PWQuaW5kZXhPZigiZGF0YToiKSlyZXR1cm4gbnVsbH1sJiYhRWJ0LnRlc3QoYSkmJihhPWZ1bmN0aW9uIERidChjLGwpe2FOWyIgIitjXXx8KGFOWyIgIitjXT1UYnQudGVzdChjKT9jKyIvIjpzTihjLCIvIiwhMCkpO2NvbnN0IGE9LTE9PT0oYz1hTlsiICIrY10pLmluZGV4T2YoIjoiKTty''@;'; put 'put ''ZXR1cm4iLy8iPT09bC5zdWJzdHJpbmcoMCwyKT9hP2w6Yy5yZXBsYWNlKEFidCwiJDEiKStsOiIvIj09PWwuY2hhckF0KDApP2E/bDpjLnJlcGxhY2Uoa2J0LCIkMSIpK2w6YytsfShsLGEpKTt0cnl7YT1lbmNvZGVVUkkoYSkucmVwbGFjZSgvJTI1L2csIiUiKX1jYXRjaHtyZXR1cm4gbnVs''@;'; put 'put ''bH1yZXR1cm4gYX1jb25zdCBhTj17fSxUYnQ9L15bXjpdKzpcLypbXi9dKiQvLEFidD0vXihbXjpdKzopW1xzXFNdKiQvLGtidD0vXihbXjpdKzpcLypbXi9dKilbXHNcU10qJC8sb049e2V4ZWM6ZnVuY3Rpb24oKXt9fTtmdW5jdGlvbiBHNmUoYyxsKXtjb25zdCBkPWMucmVwbGFjZSgvXHwv''@;'; put 'put ''ZywoZix2LE0pPT57bGV0IEQ9ITEsWj12O2Zvcig7LS1aPj0wJiYiXFwiPT09TVtaXTspRD0hRDtyZXR1cm4gRD8ifCI6IiB8In0pLnNwbGl0KC8gXHwvKTtsZXQgaD0wO2lmKGRbMF0udHJpbSgpfHxkLnNoaWZ0KCksZC5sZW5ndGg+MCYmIWRbZC5sZW5ndGgtMV0udHJpbSgpJiZkLnBvcCgp''@;'; put 'put ''LGQubGVuZ3RoPmwpZC5zcGxpY2UobCk7ZWxzZSBmb3IoO2QubGVuZ3RoPGw7KWQucHVzaCgiIik7Zm9yKDtoPGQubGVuZ3RoO2grKylkW2hdPWRbaF0udHJpbSgpLnJlcGxhY2UoL1xcXHwvZywifCIpO3JldHVybiBkfWZ1bmN0aW9uIHNOKGMsbCxhKXtjb25zdCBkPWMubGVuZ3RoO2lmKDA9''@;'; put 'put ''PT1kKXJldHVybiIiO2xldCBoPTA7Zm9yKDtoPGQ7KXtjb25zdCBmPWMuY2hhckF0KGQtaC0xKTtpZihmIT09bHx8YSl7aWYoZj09PWx8fCFhKWJyZWFrO2grK31lbHNlIGgrK31yZXR1cm4gYy5zbGljZSgwLGQtaCl9ZnVuY3Rpb24gJDZlKGMsbCxhLGQpe2NvbnN0IGg9bC5ocmVmLGY9bC50''@;'; put 'put ''aXRsZT94MShsLnRpdGxlKTpudWxsLHY9Y1sxXS5yZXBsYWNlKC9cXChbXFtcXV0pL2csIiQxIik7aWYoIiEiIT09Y1swXS5jaGFyQXQoMCkpe2Quc3RhdGUuaW5MaW5rPSEwO2NvbnN0IE09e3R5cGU6ImxpbmsiLHJhdzphLGhyZWY6aCx0aXRsZTpmLHRleHQ6dix0b2tlbnM6ZC5pbmxpbmVU''@;'; put 'put ''b2tlbnModil9O3JldHVybiBkLnN0YXRlLmluTGluaz0hMSxNfXJldHVybnt0eXBlOiJpbWFnZSIscmF3OmEsaHJlZjpoLHRpdGxlOmYsdGV4dDp4MSh2KX19Y2xhc3MgbE57Y29uc3RydWN0b3IobCl7dGhpcy5vcHRpb25zPWx8fFM2fXNwYWNlKGwpe2NvbnN0IGE9dGhpcy5ydWxlcy5ibG9j''@;'; put 'put ''ay5uZXdsaW5lLmV4ZWMobCk7aWYoYSYmYVswXS5sZW5ndGg+MClyZXR1cm57dHlwZToic3BhY2UiLHJhdzphWzBdfX1jb2RlKGwpe2NvbnN0IGE9dGhpcy5ydWxlcy5ibG9jay5jb2RlLmV4ZWMobCk7aWYoYSl7Y29uc3QgZD1hWzBdLnJlcGxhY2UoL14gezEsNH0vZ20sIiIpO3JldHVybnt0''@;'; put 'put ''eXBlOiJjb2RlIixyYXc6YVswXSxjb2RlQmxvY2tTdHlsZToiaW5kZW50ZWQiLHRleHQ6dGhpcy5vcHRpb25zLnBlZGFudGljP2Q6c04oZCwiXG4iKX19fWZlbmNlcyhsKXtjb25zdCBhPXRoaXMucnVsZXMuYmxvY2suZmVuY2VzLmV4ZWMobCk7aWYoYSl7Y29uc3QgZD1hWzBdLGg9ZnVuY3Rp''@;'; put 'put ''b24gTGJ0KGMsbCl7Y29uc3QgYT1jLm1hdGNoKC9eKFxzKykoPzpgYGApLyk7aWYobnVsbD09PWEpcmV0dXJuIGw7Y29uc3QgZD1hWzFdO3JldHVybiBsLnNwbGl0KCJcbiIpLm1hcChoPT57Y29uc3QgZj1oLm1hdGNoKC9eXHMrLyk7aWYobnVsbD09PWYpcmV0dXJuIGg7Y29uc3Rbdl09Zjty''@;'; put 'put ''ZXR1cm4gdi5sZW5ndGg+PWQubGVuZ3RoP2guc2xpY2UoZC5sZW5ndGgpOmh9KS5qb2luKCJcbiIpfShkLGFbM118fCIiKTtyZXR1cm57dHlwZToiY29kZSIscmF3OmQsbGFuZzphWzJdP2FbMl0udHJpbSgpLnJlcGxhY2UodGhpcy5ydWxlcy5pbmxpbmUuX2VzY2FwZXMsIiQxIik6YVsyXSx0''@;'; put 'put ''ZXh0Omh9fX1oZWFkaW5nKGwpe2NvbnN0IGE9dGhpcy5ydWxlcy5ibG9jay5oZWFkaW5nLmV4ZWMobCk7aWYoYSl7bGV0IGQ9YVsyXS50cmltKCk7aWYoLyMkLy50ZXN0KGQpKXtjb25zdCBoPXNOKGQsIiMiKTsodGhpcy5vcHRpb25zLnBlZGFudGljfHwhaHx8LyAkLy50ZXN0KGgpKSYmKGQ9''@;'; put 'put ''aC50cmltKCkpfXJldHVybnt0eXBlOiJoZWFkaW5nIixyYXc6YVswXSxkZXB0aDphWzFdLmxlbmd0aCx0ZXh0OmQsdG9rZW5zOnRoaXMubGV4ZXIuaW5saW5lKGQpfX19aHIobCl7Y29uc3QgYT10aGlzLnJ1bGVzLmJsb2NrLmhyLmV4ZWMobCk7aWYoYSlyZXR1cm57dHlwZToiaHIiLHJhdzph''@;'; put 'put ''WzBdfX1ibG9ja3F1b3RlKGwpe2NvbnN0IGE9dGhpcy5ydWxlcy5ibG9jay5ibG9ja3F1b3RlLmV4ZWMobCk7aWYoYSl7Y29uc3QgZD1hWzBdLnJlcGxhY2UoL14gKj5bIFx0XT8vZ20sIiIpLGg9dGhpcy5sZXhlci5zdGF0ZS50b3A7dGhpcy5sZXhlci5zdGF0ZS50b3A9ITA7Y29uc3QgZj10''@;'; put 'put ''aGlzLmxleGVyLmJsb2NrVG9rZW5zKGQpO3JldHVybiB0aGlzLmxleGVyLnN0YXRlLnRvcD1oLHt0eXBlOiJibG9ja3F1b3RlIixyYXc6YVswXSx0b2tlbnM6Zix0ZXh0OmR9fX1saXN0KGwpe2xldCBhPXRoaXMucnVsZXMuYmxvY2subGlzdC5leGVjKGwpO2lmKGEpe2xldCBkLGgsZix2LE0s''@;'; put 'put ''RCxaLHJlLGNlLGJlLEVlLEJlLHFlPWFbMV0udHJpbSgpO2NvbnN0IHJ0PXFlLmxlbmd0aD4xLHB0PXt0eXBlOiJsaXN0IixyYXc6IiIsb3JkZXJlZDpydCxzdGFydDpydD8rcWUuc2xpY2UoMCwtMSk6IiIsbG9vc2U6ITEsaXRlbXM6W119O3FlPXJ0P2BcXGR7MSw5fVxcJHtxZS5zbGljZSgt''@;'; put 'put ''MSl9YDpgXFwke3FlfWAsdGhpcy5vcHRpb25zLnBlZGFudGljJiYocWU9cnQ/cWU6IlsqKy1dIik7Y29uc3QgZHQ9bmV3IFJlZ0V4cChgXiggezAsM30ke3FlfSkoKD86W1x0IF1bXlxcbl0qKT8oPzpcXG58JCkpYCk7Zm9yKDtsJiYoQmU9ITEsKGE9ZHQuZXhlYyhsKSkmJiF0aGlzLnJ1bGVz''@;'; put 'put ''LmJsb2NrLmhyLnRlc3QobCkpOyl7aWYoZD1hWzBdLGw9bC5zdWJzdHJpbmcoZC5sZW5ndGgpLHJlPWFbMl0uc3BsaXQoIlxuIiwxKVswXS5yZXBsYWNlKC9eXHQrLyx2bj0+IiAiLnJlcGVhdCgzKnZuLmxlbmd0aCkpLGNlPWwuc3BsaXQoIlxuIiwxKVswXSx0aGlzLm9wdGlvbnMucGVkYW50''@;'; put 'put ''aWM/KHY9MixFZT1yZS50cmltTGVmdCgpKToodj1hWzJdLnNlYXJjaCgvW14gXS8pLHY9dj40PzE6dixFZT1yZS5zbGljZSh2KSx2Kz1hWzFdLmxlbmd0aCksRD0hMSwhcmUmJi9eICokLy50ZXN0KGNlKSYmKGQrPWNlKyJcbiIsbD1sLnN1YnN0cmluZyhjZS5sZW5ndGgrMSksQmU9ITApLCFC''@;'; put 'put ''ZSl7Y29uc3Qgdm49bmV3IFJlZ0V4cChgXiB7MCwke01hdGgubWluKDMsdi0xKX19KD86WyorLV18XFxkezEsOX1bLildKSgoPzpbIFx0XVteXFxuXSopPyg/OlxcbnwkKSlgKSxDbj1uZXcgUmVnRXhwKGBeIHswLCR7TWF0aC5taW4oMyx2LTEpfX0oKD86LSAqKXszLH18KD86XyAqKXszLH18''@;'; put 'put ''KD86XFwqICopezMsfSkoPzpcXG4rfCQpYCksdG49bmV3IFJlZ0V4cChgXiB7MCwke01hdGgubWluKDMsdi0xKX19KD86XGBcYFxgfH5+filgKSxNbj1uZXcgUmVnRXhwKGBeIHswLCR7TWF0aC5taW4oMyx2LTEpfX0jYCk7Zm9yKDtsJiYoYmU9bC5zcGxpdCgiXG4iLDEpWzBdLGNlPWJlLHRo''@;'; put 'put ''aXMub3B0aW9ucy5wZWRhbnRpYyYmKGNlPWNlLnJlcGxhY2UoL14gezEsNH0oPz0oIHs0fSkqW14gXSkvZywiICAiKSksISh0bi50ZXN0KGNlKXx8TW4udGVzdChjZSl8fHZuLnRlc3QoY2UpfHxDbi50ZXN0KGwpKSk7KXtpZihjZS5zZWFyY2goL1teIF0vKT49dnx8IWNlLnRyaW0oKSlFZSs9''@;'; put 'put ''IlxuIitjZS5zbGljZSh2KTtlbHNle2lmKER8fHJlLnNlYXJjaCgvW14gXS8pPj00fHx0bi50ZXN0KHJlKXx8TW4udGVzdChyZSl8fENuLnRlc3QocmUpKWJyZWFrO0VlKz0iXG4iK2NlfSFEJiYhY2UudHJpbSgpJiYoRD0hMCksZCs9YmUrIlxuIixsPWwuc3Vic3RyaW5nKGJlLmxlbmd0aCsx''@;'; put 'put ''KSxyZT1jZS5zbGljZSh2KX19cHQubG9vc2V8fChaP3B0Lmxvb3NlPSEwOi9cbiAqXG4gKiQvLnRlc3QoZCkmJihaPSEwKSksdGhpcy5vcHRpb25zLmdmbSYmKGg9L15cW1sgeFhdXF0gLy5leGVjKEVlKSxoJiYoZj0iWyBdICIhPT1oWzBdLEVlPUVlLnJlcGxhY2UoL15cW1sgeFhdXF0gKy8s''@;'; put 'put ''IiIpKSkscHQuaXRlbXMucHVzaCh7dHlwZToibGlzdF9pdGVtIixyYXc6ZCx0YXNrOiEhaCxjaGVja2VkOmYsbG9vc2U6ITEsdGV4dDpFZX0pLHB0LnJhdys9ZH1wdC5pdGVtc1twdC5pdGVtcy5sZW5ndGgtMV0ucmF3PWQudHJpbVJpZ2h0KCkscHQuaXRlbXNbcHQuaXRlbXMubGVuZ3RoLTFd''@;'; put 'put ''LnRleHQ9RWUudHJpbVJpZ2h0KCkscHQucmF3PXB0LnJhdy50cmltUmlnaHQoKTtjb25zdCBKdD1wdC5pdGVtcy5sZW5ndGg7Zm9yKE09MDtNPEp0O00rKylpZih0aGlzLmxleGVyLnN0YXRlLnRvcD0hMSxwdC5pdGVtc1tNXS50b2tlbnM9dGhpcy5sZXhlci5ibG9ja1Rva2VucyhwdC5pdGVt''@;'; put 'put ''c1tNXS50ZXh0LFtdKSwhcHQubG9vc2Upe2NvbnN0IHZuPXB0Lml0ZW1zW01dLnRva2Vucy5maWx0ZXIodG49PiJzcGFjZSI9PT10bi50eXBlKSxDbj12bi5sZW5ndGg+MCYmdm4uc29tZSh0bj0+L1xuLipcbi8udGVzdCh0bi5yYXcpKTtwdC5sb29zZT1Dbn1pZihwdC5sb29zZSlmb3IoTT0w''@;'; put 'put ''O008SnQ7TSsrKXB0Lml0ZW1zW01dLmxvb3NlPSEwO3JldHVybiBwdH19aHRtbChsKXtjb25zdCBhPXRoaXMucnVsZXMuYmxvY2suaHRtbC5leGVjKGwpO2lmKGEpe2NvbnN0IGQ9e3R5cGU6Imh0bWwiLGJsb2NrOiEwLHJhdzphWzBdLHByZTohdGhpcy5vcHRpb25zLnNhbml0aXplciYmKCJw''@;'; put 'put ''cmUiPT09YVsxXXx8InNjcmlwdCI9PT1hWzFdfHwic3R5bGUiPT09YVsxXSksdGV4dDphWzBdfTtpZih0aGlzLm9wdGlvbnMuc2FuaXRpemUpe2NvbnN0IGg9dGhpcy5vcHRpb25zLnNhbml0aXplcj90aGlzLm9wdGlvbnMuc2FuaXRpemVyKGFbMF0pOngxKGFbMF0pO2QudHlwZT0icGFyYWdy''@;'; put 'put ''YXBoIixkLnRleHQ9aCxkLnRva2Vucz10aGlzLmxleGVyLmlubGluZShoKX1yZXR1cm4gZH19ZGVmKGwpe2NvbnN0IGE9dGhpcy5ydWxlcy5ibG9jay5kZWYuZXhlYyhsKTtpZihhKXtjb25zdCBkPWFbMV0udG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9ccysvZywiICIpLGg9YVsyXT9hWzJdLnJl''@;'; put 'put ''cGxhY2UoL148KC4qKT4kLywiJDEiKS5yZXBsYWNlKHRoaXMucnVsZXMuaW5saW5lLl9lc2NhcGVzLCIkMSIpOiIiLGY9YVszXT9hWzNdLnN1YnN0cmluZygxLGFbM10ubGVuZ3RoLTEpLnJlcGxhY2UodGhpcy5ydWxlcy5pbmxpbmUuX2VzY2FwZXMsIiQxIik6YVszXTtyZXR1cm57dHlwZToi''@;'; put 'put ''ZGVmIix0YWc6ZCxyYXc6YVswXSxocmVmOmgsdGl0bGU6Zn19fXRhYmxlKGwpe2NvbnN0IGE9dGhpcy5ydWxlcy5ibG9jay50YWJsZS5leGVjKGwpO2lmKGEpe2NvbnN0IGQ9e3R5cGU6InRhYmxlIixoZWFkZXI6RzZlKGFbMV0pLm1hcChoPT4oe3RleHQ6aH0pKSxhbGlnbjphWzJdLnJlcGxh''@;'; put 'put ''Y2UoL14gKnxcfCAqJC9nLCIiKS5zcGxpdCgvICpcfCAqLykscm93czphWzNdJiZhWzNdLnRyaW0oKT9hWzNdLnJlcGxhY2UoL1xuWyBcdF0qJC8sIiIpLnNwbGl0KCJcbiIpOltdfTtpZihkLmhlYWRlci5sZW5ndGg9PT1kLmFsaWduLmxlbmd0aCl7ZC5yYXc9YVswXTtsZXQgZix2LE0sRCxo''@;'; put 'put ''PWQuYWxpZ24ubGVuZ3RoO2ZvcihmPTA7ZjxoO2YrKylkLmFsaWduW2ZdPS9eICotKzogKiQvLnRlc3QoZC5hbGlnbltmXSk/InJpZ2h0IjovXiAqOi0rOiAqJC8udGVzdChkLmFsaWduW2ZdKT8iY2VudGVyIjovXiAqOi0rICokLy50ZXN0KGQuYWxpZ25bZl0pPyJsZWZ0IjpudWxsO2Zvciho''@;'; put 'put ''PWQucm93cy5sZW5ndGgsZj0wO2Y8aDtmKyspZC5yb3dzW2ZdPUc2ZShkLnJvd3NbZl0sZC5oZWFkZXIubGVuZ3RoKS5tYXAoWj0+KHt0ZXh0Olp9KSk7Zm9yKGg9ZC5oZWFkZXIubGVuZ3RoLHY9MDt2PGg7disrKWQuaGVhZGVyW3ZdLnRva2Vucz10aGlzLmxleGVyLmlubGluZShkLmhlYWRl''@;'; put 'put ''clt2XS50ZXh0KTtmb3IoaD1kLnJvd3MubGVuZ3RoLHY9MDt2PGg7disrKWZvcihEPWQucm93c1t2XSxNPTA7TTxELmxlbmd0aDtNKyspRFtNXS50b2tlbnM9dGhpcy5sZXhlci5pbmxpbmUoRFtNXS50ZXh0KTtyZXR1cm4gZH19fWxoZWFkaW5nKGwpe2NvbnN0IGE9dGhpcy5ydWxlcy5ibG9j''@;'; put 'put ''ay5saGVhZGluZy5leGVjKGwpO2lmKGEpcmV0dXJue3R5cGU6ImhlYWRpbmciLHJhdzphWzBdLGRlcHRoOiI9Ij09PWFbMl0uY2hhckF0KDApPzE6Mix0ZXh0OmFbMV0sdG9rZW5zOnRoaXMubGV4ZXIuaW5saW5lKGFbMV0pfX1wYXJhZ3JhcGgobCl7Y29uc3QgYT10aGlzLnJ1bGVzLmJsb2Nr''@;'; put 'put ''LnBhcmFncmFwaC5leGVjKGwpO2lmKGEpe2NvbnN0IGQ9IlxuIj09PWFbMV0uY2hhckF0KGFbMV0ubGVuZ3RoLTEpP2FbMV0uc2xpY2UoMCwtMSk6YVsxXTtyZXR1cm57dHlwZToicGFyYWdyYXBoIixyYXc6YVswXSx0ZXh0OmQsdG9rZW5zOnRoaXMubGV4ZXIuaW5saW5lKGQpfX19dGV4dChs''@;'; put 'put ''KXtjb25zdCBhPXRoaXMucnVsZXMuYmxvY2sudGV4dC5leGVjKGwpO2lmKGEpcmV0dXJue3R5cGU6InRleHQiLHJhdzphWzBdLHRleHQ6YVswXSx0b2tlbnM6dGhpcy5sZXhlci5pbmxpbmUoYVswXSl9fWVzY2FwZShsKXtjb25zdCBhPXRoaXMucnVsZXMuaW5saW5lLmVzY2FwZS5leGVjKGwp''@;'; put 'put ''O2lmKGEpcmV0dXJue3R5cGU6ImVzY2FwZSIscmF3OmFbMF0sdGV4dDp4MShhWzFdKX19dGFnKGwpe2NvbnN0IGE9dGhpcy5ydWxlcy5pbmxpbmUudGFnLmV4ZWMobCk7aWYoYSlyZXR1cm4hdGhpcy5sZXhlci5zdGF0ZS5pbkxpbmsmJi9ePGEgL2kudGVzdChhWzBdKT90aGlzLmxleGVyLnN0''@;'; put 'put ''YXRlLmluTGluaz0hMDp0aGlzLmxleGVyLnN0YXRlLmluTGluayYmL148XC9hPi9pLnRlc3QoYVswXSkmJih0aGlzLmxleGVyLnN0YXRlLmluTGluaz0hMSksIXRoaXMubGV4ZXIuc3RhdGUuaW5SYXdCbG9jayYmL148KHByZXxjb2RlfGtiZHxzY3JpcHQpKFxzfD4pL2kudGVzdChhWzBdKT90''@;'; put 'put ''aGlzLmxleGVyLnN0YXRlLmluUmF3QmxvY2s9ITA6dGhpcy5sZXhlci5zdGF0ZS5pblJhd0Jsb2NrJiYvXjxcLyhwcmV8Y29kZXxrYmR8c2NyaXB0KShcc3w+KS9pLnRlc3QoYVswXSkmJih0aGlzLmxleGVyLnN0YXRlLmluUmF3QmxvY2s9ITEpLHt0eXBlOnRoaXMub3B0aW9ucy5zYW5pdGl6''@;'; put 'put ''ZT8idGV4dCI6Imh0bWwiLHJhdzphWzBdLGluTGluazp0aGlzLmxleGVyLnN0YXRlLmluTGluayxpblJhd0Jsb2NrOnRoaXMubGV4ZXIuc3RhdGUuaW5SYXdCbG9jayxibG9jazohMSx0ZXh0OnRoaXMub3B0aW9ucy5zYW5pdGl6ZT90aGlzLm9wdGlvbnMuc2FuaXRpemVyP3RoaXMub3B0aW9u''@;'; put 'put ''cy5zYW5pdGl6ZXIoYVswXSk6eDEoYVswXSk6YVswXX19bGluayhsKXtjb25zdCBhPXRoaXMucnVsZXMuaW5saW5lLmxpbmsuZXhlYyhsKTtpZihhKXtjb25zdCBkPWFbMl0udHJpbSgpO2lmKCF0aGlzLm9wdGlvbnMucGVkYW50aWMmJi9ePC8udGVzdChkKSl7aWYoIS8+JC8udGVzdChkKSly''@;'; put 'put ''ZXR1cm47Y29uc3Qgdj1zTihkLnNsaWNlKDAsLTEpLCJcXCIpO2lmKChkLmxlbmd0aC12Lmxlbmd0aCklMj09MClyZXR1cm59ZWxzZXtjb25zdCB2PWZ1bmN0aW9uIElidChjLGwpe2lmKC0xPT09Yy5pbmRleE9mKGxbMV0pKXJldHVybi0xO2NvbnN0IGE9Yy5sZW5ndGg7bGV0IGQ9MCxoPTA7''@;'; put 'put ''Zm9yKDtoPGE7aCsrKWlmKCJcXCI9PT1jW2hdKWgrKztlbHNlIGlmKGNbaF09PT1sWzBdKWQrKztlbHNlIGlmKGNbaF09PT1sWzFdJiYoZC0tLGQ8MCkpcmV0dXJuIGg7cmV0dXJuLTF9KGFbMl0sIigpIik7aWYodj4tMSl7Y29uc3QgRD0oMD09PWFbMF0uaW5kZXhPZigiISIpPzU6NCkrYVsx''@;'; put 'put ''XS5sZW5ndGgrdjthWzJdPWFbMl0uc3Vic3RyaW5nKDAsdiksYVswXT1hWzBdLnN1YnN0cmluZygwLEQpLnRyaW0oKSxhWzNdPSIifX1sZXQgaD1hWzJdLGY9IiI7aWYodGhpcy5vcHRpb25zLnBlZGFudGljKXtjb25zdCB2PS9eKFteJyJdKlteXHNdKVxzKyhbJyJdKSguKilcMi8uZXhlYyho''@;'; put 'put ''KTt2JiYoaD12WzFdLGY9dlszXSl9ZWxzZSBmPWFbM10/YVszXS5zbGljZSgxLC0xKToiIjtyZXR1cm4gaD1oLnRyaW0oKSwvXjwvLnRlc3QoaCkmJihoPXRoaXMub3B0aW9ucy5wZWRhbnRpYyYmIS8+JC8udGVzdChkKT9oLnNsaWNlKDEpOmguc2xpY2UoMSwtMSkpLCQ2ZShhLHtocmVmOmgm''@;'; put 'put ''JmgucmVwbGFjZSh0aGlzLnJ1bGVzLmlubGluZS5fZXNjYXBlcywiJDEiKSx0aXRsZTpmJiZmLnJlcGxhY2UodGhpcy5ydWxlcy5pbmxpbmUuX2VzY2FwZXMsIiQxIil9LGFbMF0sdGhpcy5sZXhlcil9fXJlZmxpbmsobCxhKXtsZXQgZDtpZigoZD10aGlzLnJ1bGVzLmlubGluZS5yZWZsaW5r''@;'; put 'put ''LmV4ZWMobCkpfHwoZD10aGlzLnJ1bGVzLmlubGluZS5ub2xpbmsuZXhlYyhsKSkpe2xldCBoPShkWzJdfHxkWzFdKS5yZXBsYWNlKC9ccysvZywiICIpO2lmKGg9YVtoLnRvTG93ZXJDYXNlKCldLCFoKXtjb25zdCBmPWRbMF0uY2hhckF0KDApO3JldHVybnt0eXBlOiJ0ZXh0IixyYXc6Zix0''@;'; put 'put ''ZXh0OmZ9fXJldHVybiAkNmUoZCxoLGRbMF0sdGhpcy5sZXhlcil9fWVtU3Ryb25nKGwsYSxkPSIiKXtsZXQgaD10aGlzLnJ1bGVzLmlubGluZS5lbVN0cm9uZy5sRGVsaW0uZXhlYyhsKTtpZighKCFofHxoWzNdJiZkLm1hdGNoKC9bXHB7TH1ccHtOfV0vdSkpJiYoIWhbMV0mJiFoWzJdfHwh''@;'; put 'put ''ZHx8dGhpcy5ydWxlcy5pbmxpbmUucHVuY3R1YXRpb24uZXhlYyhkKSkpe2NvbnN0IHY9aFswXS5sZW5ndGgtMTtsZXQgTSxELFo9dixyZT0wO2NvbnN0IGNlPSIqIj09PWhbMF1bMF0/dGhpcy5ydWxlcy5pbmxpbmUuZW1TdHJvbmcuckRlbGltQXN0OnRoaXMucnVsZXMuaW5saW5lLmVtU3Ry''@;'; put 'put ''b25nLnJEZWxpbVVuZDtmb3IoY2UubGFzdEluZGV4PTAsYT1hLnNsaWNlKC0xKmwubGVuZ3RoK3YpO251bGwhPShoPWNlLmV4ZWMoYSkpOyl7aWYoTT1oWzFdfHxoWzJdfHxoWzNdfHxoWzRdfHxoWzVdfHxoWzZdLCFNKWNvbnRpbnVlO2lmKEQ9TS5sZW5ndGgsaFszXXx8aFs0XSl7Wis9RDtj''@;'; put 'put ''b250aW51ZX1pZigoaFs1XXx8aFs2XSkmJnYlMyYmISgoditEKSUzKSl7cmUrPUQ7Y29udGludWV9aWYoWi09RCxaPjApY29udGludWU7RD1NYXRoLm1pbihELEQrWityZSk7Y29uc3QgYmU9bC5zbGljZSgwLHYraC5pbmRleCtEKzEpO2lmKE1hdGgubWluKHYsRCklMil7Y29uc3QgQmU9YmUu''@;'; put 'put ''c2xpY2UoMSwtMSk7cmV0dXJue3R5cGU6ImVtIixyYXc6YmUsdGV4dDpCZSx0b2tlbnM6dGhpcy5sZXhlci5pbmxpbmVUb2tlbnMoQmUpfX1jb25zdCBFZT1iZS5zbGljZSgyLC0yKTtyZXR1cm57dHlwZToic3Ryb25nIixyYXc6YmUsdGV4dDpFZSx0b2tlbnM6dGhpcy5sZXhlci5pbmxpbmVU''@;'; put 'put ''b2tlbnMoRWUpfX19fWNvZGVzcGFuKGwpe2NvbnN0IGE9dGhpcy5ydWxlcy5pbmxpbmUuY29kZS5leGVjKGwpO2lmKGEpe2xldCBkPWFbMl0ucmVwbGFjZSgvXG4vZywiICIpO2NvbnN0IGg9L1teIF0vLnRlc3QoZCksZj0vXiAvLnRlc3QoZCkmJi8gJC8udGVzdChkKTtyZXR1cm4gaCYmZiYm''@;'; put 'put ''KGQ9ZC5zdWJzdHJpbmcoMSxkLmxlbmd0aC0xKSksZD14MShkLCEwKSx7dHlwZToiY29kZXNwYW4iLHJhdzphWzBdLHRleHQ6ZH19fWJyKGwpe2NvbnN0IGE9dGhpcy5ydWxlcy5pbmxpbmUuYnIuZXhlYyhsKTtpZihhKXJldHVybnt0eXBlOiJiciIscmF3OmFbMF19fWRlbChsKXtjb25zdCBh''@;'; put 'put ''PXRoaXMucnVsZXMuaW5saW5lLmRlbC5leGVjKGwpO2lmKGEpcmV0dXJue3R5cGU6ImRlbCIscmF3OmFbMF0sdGV4dDphWzJdLHRva2Vuczp0aGlzLmxleGVyLmlubGluZVRva2VucyhhWzJdKX19YXV0b2xpbmsobCxhKXtjb25zdCBkPXRoaXMucnVsZXMuaW5saW5lLmF1dG9saW5rLmV4ZWMo''@;'; put 'put ''bCk7aWYoZCl7bGV0IGgsZjtyZXR1cm4iQCI9PT1kWzJdPyhoPXgxKHRoaXMub3B0aW9ucy5tYW5nbGU/YShkWzFdKTpkWzFdKSxmPSJtYWlsdG86IitoKTooaD14MShkWzFdKSxmPWgpLHt0eXBlOiJsaW5rIixyYXc6ZFswXSx0ZXh0OmgsaHJlZjpmLHRva2Vuczpbe3R5cGU6InRleHQiLHJh''@;'; put 'put ''dzpoLHRleHQ6aH1dfX19dXJsKGwsYSl7bGV0IGQ7aWYoZD10aGlzLnJ1bGVzLmlubGluZS51cmwuZXhlYyhsKSl7bGV0IGgsZjtpZigiQCI9PT1kWzJdKWg9eDEodGhpcy5vcHRpb25zLm1hbmdsZT9hKGRbMF0pOmRbMF0pLGY9Im1haWx0bzoiK2g7ZWxzZXtsZXQgdjtkb3t2PWRbMF0sZFsw''@;'; put 'put ''XT10aGlzLnJ1bGVzLmlubGluZS5fYmFja3BlZGFsLmV4ZWMoZFswXSlbMF19d2hpbGUodiE9PWRbMF0pO2g9eDEoZFswXSksZj0id3d3LiI9PT1kWzFdPyJodHRwOi8vIitkWzBdOmRbMF19cmV0dXJue3R5cGU6ImxpbmsiLHJhdzpkWzBdLHRleHQ6aCxocmVmOmYsdG9rZW5zOlt7dHlwZToi''@;'; put 'put ''dGV4dCIscmF3OmgsdGV4dDpofV19fX1pbmxpbmVUZXh0KGwsYSl7Y29uc3QgZD10aGlzLnJ1bGVzLmlubGluZS50ZXh0LmV4ZWMobCk7aWYoZCl7bGV0IGg7cmV0dXJuIGg9dGhpcy5sZXhlci5zdGF0ZS5pblJhd0Jsb2NrP3RoaXMub3B0aW9ucy5zYW5pdGl6ZT90aGlzLm9wdGlvbnMuc2Fu''@;'; put 'put ''aXRpemVyP3RoaXMub3B0aW9ucy5zYW5pdGl6ZXIoZFswXSk6eDEoZFswXSk6ZFswXTp4MSh0aGlzLm9wdGlvbnMuc21hcnR5cGFudHM/YShkWzBdKTpkWzBdKSx7dHlwZToidGV4dCIscmF3OmRbMF0sdGV4dDpofX19fWNvbnN0IG1vPXtuZXdsaW5lOi9eKD86ICooPzpcbnwkKSkrLyxjb2Rl''@;'; put 'put ''Oi9eKCB7NH1bXlxuXSsoPzpcbig/OiAqKD86XG58JCkpKik/KSsvLGZlbmNlczovXiB7MCwzfShgezMsfSg/PVteYFxuXSooPzpcbnwkKSl8fnszLH0pKFteXG5dKikoPzpcbnwkKSg/OnwoW1xzXFNdKj8pKD86XG58JCkpKD86IHswLDN9XDFbfmBdKiAqKD89XG58JCl8JCkvLGhyOi9eIHsw''@;'; put 'put ''LDN9KCg/Oi1bXHQgXSopezMsfXwoPzpfWyBcdF0qKXszLH18KD86XCpbIFx0XSopezMsfSkoPzpcbit8JCkvLGhlYWRpbmc6L14gezAsM30oI3sxLDZ9KSg/PVxzfCQpKC4qKSg/OlxuK3wkKS8sYmxvY2txdW90ZTovXiggezAsM30+ID8ocGFyYWdyYXBofFteXG5dKikoPzpcbnwkKSkrLyxs''@;'; put 'put ''aXN0Oi9eKCB7MCwzfWJ1bGwpKFsgXHRdW15cbl0rPyk/KD86XG58JCkvLGh0bWw6Il4gezAsM30oPzo8KHNjcmlwdHxwcmV8c3R5bGV8dGV4dGFyZWEpW1xccz5dW1xcc1xcU10qPyg/OjwvXFwxPlteXFxuXSpcXG4rfCQpfGNvbW1lbnRbXlxcbl0qKFxcbit8JCl8PFxcP1tcXHNcXFNdKj8o''@;'; put 'put ''PzpcXD8+XFxuKnwkKXw8IVtBLVpdW1xcc1xcU10qPyg/Oj5cXG4qfCQpfDwhXFxbQ0RBVEFcXFtbXFxzXFxTXSo/KD86XFxdXFxdPlxcbip8JCl8PC8/KHRhZykoPzogK3xcXG58Lz8+KVtcXHNcXFNdKj8oPzooPzpcXG4gKikrXFxufCQpfDwoPyFzY3JpcHR8cHJlfHN0eWxlfHRleHRhcmVh''@;'; put 'put ''KShbYS16XVtcXHctXSopKD86YXR0cmlidXRlKSo/ICovPz4oPz1bIFxcdF0qKD86XFxufCQpKVtcXHNcXFNdKj8oPzooPzpcXG4gKikrXFxufCQpfDwvKD8hc2NyaXB0fHByZXxzdHlsZXx0ZXh0YXJlYSlbYS16XVtcXHctXSpcXHMqPig/PVsgXFx0XSooPzpcXG58JCkpW1xcc1xcU10qPyg/''@;'; put 'put ''Oig/OlxcbiAqKStcXG58JCkpIixkZWY6L14gezAsM31cWyhsYWJlbClcXTogKig/OlxuICopPyhbXjxcc11bXlxzXSp8PC4qPz4pKD86KD86ICsoPzpcbiAqKT98ICpcbiAqKSh0aXRsZSkpPyAqKD86XG4rfCQpLyx0YWJsZTpvTixsaGVhZGluZzovXigoPzooPyFeYnVsbCApLnxcbig/IVxu''@;'; put 'put ''fGJ1bGwgKSkrPylcbiB7MCwzfSg9K3wtKykgKig/OlxuK3wkKS8sX3BhcmFncmFwaDovXihbXlxuXSsoPzpcbig/IWhyfGhlYWRpbmd8bGhlYWRpbmd8YmxvY2txdW90ZXxmZW5jZXN8bGlzdHxodG1sfHRhYmxlfCArXG4pW15cbl0rKSopLyx0ZXh0Oi9eW15cbl0rLyxfbGFiZWw6Lyg/IVxz''@;'; put 'put ''KlxdKSg/OlxcLnxbXlxbXF1cXF0pKy8sX3RpdGxlOi8oPzoiKD86XFwiP3xbXiJcXF0pKiJ8J1teJ1xuXSooPzpcblteJ1xuXSspKlxuPyd8XChbXigpXSpcKSkvfTttby5kZWY9SWwobW8uZGVmKS5yZXBsYWNlKCJsYWJlbCIsbW8uX2xhYmVsKS5yZXBsYWNlKCJ0aXRsZSIsbW8uX3RpdGxl''@;'; put 'put ''KS5nZXRSZWdleCgpLG1vLmJ1bGxldD0vKD86WyorLV18XGR7MSw5fVsuKV0pLyxtby5saXN0SXRlbVN0YXJ0PUlsKC9eKCAqKShidWxsKSAqLykucmVwbGFjZSgiYnVsbCIsbW8uYnVsbGV0KS5nZXRSZWdleCgpLG1vLmxpc3Q9SWwobW8ubGlzdCkucmVwbGFjZSgvYnVsbC9nLG1vLmJ1bGxl''@;'; put 'put ''dCkucmVwbGFjZSgiaHIiLCJcXG4rKD89XFwxPyg/Oig/Oi0gKil7Myx9fCg/Ol8gKil7Myx9fCg/OlxcKiAqKXszLH0pKD86XFxuK3wkKSkiKS5yZXBsYWNlKCJkZWYiLCJcXG4rKD89Iittby5kZWYuc291cmNlKyIpIikuZ2V0UmVnZXgoKSxtby5fdGFnPSJhZGRyZXNzfGFydGljbGV8YXNp''@;'; put 'put ''ZGV8YmFzZXxiYXNlZm9udHxibG9ja3F1b3RlfGJvZHl8Y2FwdGlvbnxjZW50ZXJ8Y29sfGNvbGdyb3VwfGRkfGRldGFpbHN8ZGlhbG9nfGRpcnxkaXZ8ZGx8ZHR8ZmllbGRzZXR8ZmlnY2FwdGlvbnxmaWd1cmV8Zm9vdGVyfGZvcm18ZnJhbWV8ZnJhbWVzZXR8aFsxLTZdfGhlYWR8aGVhZGVy''@;'; put 'put ''fGhyfGh0bWx8aWZyYW1lfGxlZ2VuZHxsaXxsaW5rfG1haW58bWVudXxtZW51aXRlbXxtZXRhfG5hdnxub2ZyYW1lc3xvbHxvcHRncm91cHxvcHRpb258cHxwYXJhbXxzZWN0aW9ufHNvdXJjZXxzdW1tYXJ5fHRhYmxlfHRib2R5fHRkfHRmb290fHRofHRoZWFkfHRpdGxlfHRyfHRyYWNrfHVs''@;'; put 'put ''Iixtby5fY29tbWVudD0vPCEtLSg/IS0/PilbXHNcU10qPyg/Oi0tPnwkKS8sbW8uaHRtbD1JbChtby5odG1sLCJpIikucmVwbGFjZSgiY29tbWVudCIsbW8uX2NvbW1lbnQpLnJlcGxhY2UoInRhZyIsbW8uX3RhZykucmVwbGFjZSgiYXR0cmlidXRlIiwvICtbYS16QS1aOl9dW1x3LjotXSoo''@;'; put 'put ''PzogKj0gKiJbXiJcbl0qInwgKj0gKidbXidcbl0qJ3wgKj0gKlteXHMiJz08PmBdKyk/LykuZ2V0UmVnZXgoKSxtby5saGVhZGluZz1JbChtby5saGVhZGluZykucmVwbGFjZSgvYnVsbC9nLG1vLmJ1bGxldCkuZ2V0UmVnZXgoKSxtby5wYXJhZ3JhcGg9SWwobW8uX3BhcmFncmFwaCkucmVw''@;'; put 'put ''bGFjZSgiaHIiLG1vLmhyKS5yZXBsYWNlKCJoZWFkaW5nIiwiIHswLDN9I3sxLDZ9ICIpLnJlcGxhY2UoInxsaGVhZGluZyIsIiIpLnJlcGxhY2UoInx0YWJsZSIsIiIpLnJlcGxhY2UoImJsb2NrcXVvdGUiLCIgezAsM30+IikucmVwbGFjZSgiZmVuY2VzIiwiIHswLDN9KD86YHszLH0oPz1b''@;'; put 'put ''XmBcXG5dKlxcbil8fnszLH0pW15cXG5dKlxcbiIpLnJlcGxhY2UoImxpc3QiLCIgezAsM30oPzpbKistXXwxWy4pXSkgIikucmVwbGFjZSgiaHRtbCIsIjwvPyg/OnRhZykoPzogK3xcXG58Lz8+KXw8KD86c2NyaXB0fHByZXxzdHlsZXx0ZXh0YXJlYXwhLS0pIikucmVwbGFjZSgidGFnIixt''@;'; put 'put ''by5fdGFnKS5nZXRSZWdleCgpLG1vLmJsb2NrcXVvdGU9SWwobW8uYmxvY2txdW90ZSkucmVwbGFjZSgicGFyYWdyYXBoIixtby5wYXJhZ3JhcGgpLmdldFJlZ2V4KCksbW8ubm9ybWFsPXsuLi5tb30sbW8uZ2ZtPXsuLi5tby5ub3JtYWwsdGFibGU6Il4gKihbXlxcbiBdLipcXHwuKilcXG4g''@;'; put 'put ''ezAsM30oPzpcXHwgKik/KDo/LSs6PyAqKD86XFx8ICo6Py0rOj8gKikqKSg/OlxcfCAqKT8oPzpcXG4oKD86KD8hICpcXG58aHJ8aGVhZGluZ3xibG9ja3F1b3RlfGNvZGV8ZmVuY2VzfGxpc3R8aHRtbCkuKig/OlxcbnwkKSkqKVxcbip8JCkifSxtby5nZm0udGFibGU9SWwobW8uZ2ZtLnRh''@;'; put 'put ''YmxlKS5yZXBsYWNlKCJociIsbW8uaHIpLnJlcGxhY2UoImhlYWRpbmciLCIgezAsM30jezEsNn0gIikucmVwbGFjZSgiYmxvY2txdW90ZSIsIiB7MCwzfT4iKS5yZXBsYWNlKCJjb2RlIiwiIHs0fVteXFxuXSIpLnJlcGxhY2UoImZlbmNlcyIsIiB7MCwzfSg/OmB7Myx9KD89W15gXFxuXSpc''@;'; put 'put ''XG4pfH57Myx9KVteXFxuXSpcXG4iKS5yZXBsYWNlKCJsaXN0IiwiIHswLDN9KD86WyorLV18MVsuKV0pICIpLnJlcGxhY2UoImh0bWwiLCI8Lz8oPzp0YWcpKD86ICt8XFxufC8/Pil8PCg/OnNjcmlwdHxwcmV8c3R5bGV8dGV4dGFyZWF8IS0tKSIpLnJlcGxhY2UoInRhZyIsbW8uX3RhZyku''@;'; put 'put ''Z2V0UmVnZXgoKSxtby5nZm0ucGFyYWdyYXBoPUlsKG1vLl9wYXJhZ3JhcGgpLnJlcGxhY2UoImhyIixtby5ocikucmVwbGFjZSgiaGVhZGluZyIsIiB7MCwzfSN7MSw2fSAiKS5yZXBsYWNlKCJ8bGhlYWRpbmciLCIiKS5yZXBsYWNlKCJ0YWJsZSIsbW8uZ2ZtLnRhYmxlKS5yZXBsYWNlKCJi''@;'; put 'put ''bG9ja3F1b3RlIiwiIHswLDN9PiIpLnJlcGxhY2UoImZlbmNlcyIsIiB7MCwzfSg/OmB7Myx9KD89W15gXFxuXSpcXG4pfH57Myx9KVteXFxuXSpcXG4iKS5yZXBsYWNlKCJsaXN0IiwiIHswLDN9KD86WyorLV18MVsuKV0pICIpLnJlcGxhY2UoImh0bWwiLCI8Lz8oPzp0YWcpKD86ICt8XFxu''@;'; put 'put ''fC8/Pil8PCg/OnNjcmlwdHxwcmV8c3R5bGV8dGV4dGFyZWF8IS0tKSIpLnJlcGxhY2UoInRhZyIsbW8uX3RhZykuZ2V0UmVnZXgoKSxtby5wZWRhbnRpYz17Li4ubW8ubm9ybWFsLGh0bWw6SWwoIl4gKig/OmNvbW1lbnQgKig/OlxcbnxcXHMqJCl8PCh0YWcpW1xcc1xcU10rPzwvXFwxPiAq''@;'; put 'put ''KD86XFxuezIsfXxcXHMqJCl8PHRhZyg/OlwiW15cIl0qXCJ8J1teJ10qJ3xcXHNbXidcIi8+XFxzXSopKj8vPz4gKig/OlxcbnsyLH18XFxzKiQpKSIpLnJlcGxhY2UoImNvbW1lbnQiLG1vLl9jb21tZW50KS5yZXBsYWNlKC90YWcvZywiKD8hKD86YXxlbXxzdHJvbmd8c21hbGx8c3xjaXRl''@;'; put 'put ''fHF8ZGZufGFiYnJ8ZGF0YXx0aW1lfGNvZGV8dmFyfHNhbXB8a2JkfHN1YnxzdXB8aXxifHV8bWFya3xydWJ5fHJ0fHJwfGJkaXxiZG98c3Bhbnxicnx3YnJ8aW5zfGRlbHxpbWcpXFxiKVxcdysoPyE6fFteXFx3XFxzQF0qQClcXGIiKS5nZXRSZWdleCgpLGRlZjovXiAqXFsoW15cXV0rKVxd''@;'; put 'put ''OiAqPD8oW15ccz5dKyk+Pyg/OiArKFsiKF1bXlxuXStbIildKSk/ICooPzpcbit8JCkvLGhlYWRpbmc6L14oI3sxLDZ9KSguKikoPzpcbit8JCkvLGZlbmNlczpvTixsaGVhZGluZzovXiguKz8pXG4gezAsM30oPSt8LSspICooPzpcbit8JCkvLHBhcmFncmFwaDpJbChtby5ub3JtYWwuX3Bh''@;'; put 'put ''cmFncmFwaCkucmVwbGFjZSgiaHIiLG1vLmhyKS5yZXBsYWNlKCJoZWFkaW5nIiwiICojezEsNn0gKlteXG5dIikucmVwbGFjZSgibGhlYWRpbmciLG1vLmxoZWFkaW5nKS5yZXBsYWNlKCJibG9ja3F1b3RlIiwiIHswLDN9PiIpLnJlcGxhY2UoInxmZW5jZXMiLCIiKS5yZXBsYWNlKCJ8bGlz''@;'; put 'put ''dCIsIiIpLnJlcGxhY2UoInxodG1sIiwiIikuZ2V0UmVnZXgoKX07Y29uc3QgQWE9e2VzY2FwZTovXlxcKFshIiMkJSYnKCkqKyxcLS4vOjs8PT4/QFxbXF1cXF5fYHt8fX5dKS8sYXV0b2xpbms6L148KHNjaGVtZTpbXlxzXHgwMC1ceDFmPD5dKnxlbWFpbCk+Lyx1cmw6b04sdGFnOiJeY29t''@;'; put 'put ''bWVudHxePC9bYS16QS1aXVtcXHc6LV0qXFxzKj58XjxbYS16QS1aXVtcXHctXSooPzphdHRyaWJ1dGUpKj9cXHMqLz8+fF48XFw/W1xcc1xcU10qP1xcPz58XjwhW2EtekEtWl0rXFxzW1xcc1xcU10qPz58XjwhXFxbQ0RBVEFcXFtbXFxzXFxTXSo/XFxdXFxdPiIsbGluazovXiE/XFsobGFi''@;'; put 'put ''ZWwpXF1cKFxzKihocmVmKSg/OlxzKyh0aXRsZSkpP1xzKlwpLyxyZWZsaW5rOi9eIT9cWyhsYWJlbClcXVxbKHJlZilcXS8sbm9saW5rOi9eIT9cWyhyZWYpXF0oPzpcW1xdKT8vLHJlZmxpbmtTZWFyY2g6InJlZmxpbmt8bm9saW5rKD8hXFwoKSIsZW1TdHJvbmc6e2xEZWxpbTovXig/Olwq''@;'; put 'put ''Kyg/OigoPyFcKilbcHVuY3RdKXxbXlxzKl0pKXxeXysoPzooKD8hXylbcHVuY3RdKXwoW15cc19dKSkvLHJEZWxpbUFzdDovXlteXypdKj9fX1teXypdKj9cKlteXypdKj8oPz1fXyl8W14qXSsoPz1bXipdKXwoPyFcKilbcHVuY3RdKFwqKykoPz1bXHNdfCQpfFtecHVuY3Rcc10oXCorKSg/''@;'; put 'put ''IVwqKSg/PVtwdW5jdFxzXXwkKXwoPyFcKilbcHVuY3Rcc10oXCorKSg/PVtecHVuY3Rcc10pfFtcc10oXCorKSg/IVwqKSg/PVtwdW5jdF0pfCg/IVwqKVtwdW5jdF0oXCorKSg/IVwqKSg/PVtwdW5jdF0pfFtecHVuY3Rcc10oXCorKSg/PVtecHVuY3Rcc10pLyxyRGVsaW1VbmQ6L15bXl8q''@;'; put 'put ''XSo/XCpcKlteXypdKj9fW15fKl0qPyg/PVwqXCopfFteX10rKD89W15fXSl8KD8hXylbcHVuY3RdKF8rKSg/PVtcc118JCl8W15wdW5jdFxzXShfKykoPyFfKSg/PVtwdW5jdFxzXXwkKXwoPyFfKVtwdW5jdFxzXShfKykoPz1bXnB1bmN0XHNdKXxbXHNdKF8rKSg/IV8pKD89W3B1bmN0XSl8''@;'; put 'put ''KD8hXylbcHVuY3RdKF8rKSg/IV8pKD89W3B1bmN0XSkvfSxjb2RlOi9eKGArKShbXmBdfFteYF1bXHNcU10qP1teYF0pXDEoPyFgKS8sYnI6L14oIHsyLH18XFwpXG4oPyFccyokKS8sZGVsOm9OLHRleHQ6L14oYCt8W15gXSkoPzooPz0gezIsfVxuKXxbXHNcU10qPyg/Oig/PVtcXDwhXFtg''@;'; put 'put ''Kl9dfFxiX3wkKXxbXiBdKD89IHsyLH1cbikpKS8scHVuY3R1YXRpb246L14oKD8hWypfXSlbXHNwdW5jdHVhdGlvbl0pL307ZnVuY3Rpb24gT2J0KGMpe3JldHVybiBjLnJlcGxhY2UoLy0tLS9nLCJcdTIwMTQiKS5yZXBsYWNlKC8tLS9nLCJcdTIwMTMiKS5yZXBsYWNlKC8oXnxbLVx1MjAx''@;'; put 'put ''NC8oXFt7IlxzXSknL2csIiQxXHUyMDE4IikucmVwbGFjZSgvJy9nLCJcdTIwMTkiKS5yZXBsYWNlKC8oXnxbLVx1MjAxNC8oXFt7XHUyMDE4XHNdKSIvZywiJDFcdTIwMWMiKS5yZXBsYWNlKC8iL2csIlx1MjAxZCIpLnJlcGxhY2UoL1wuezN9L2csIlx1MjAyNiIpfWZ1bmN0aW9uIEs2ZShj''@;'; put 'put ''KXtsZXQgYSxkLGw9IiI7Y29uc3QgaD1jLmxlbmd0aDtmb3IoYT0wO2E8aDthKyspZD1jLmNoYXJDb2RlQXQoYSksTWF0aC5yYW5kb20oKT4uNSYmKGQ9IngiK2QudG9TdHJpbmcoMTYpKSxsKz0iJiMiK2QrIjsiO3JldHVybiBsfUFhLl9wdW5jdHVhdGlvbj0iXFxwe1B9JCs8PT5gXnx+IixB''@;'; put 'put ''YS5wdW5jdHVhdGlvbj1JbChBYS5wdW5jdHVhdGlvbiwidSIpLnJlcGxhY2UoL3B1bmN0dWF0aW9uL2csQWEuX3B1bmN0dWF0aW9uKS5nZXRSZWdleCgpLEFhLmJsb2NrU2tpcD0vXFtbXltcXV0qP1xdXChbXlwoXCldKj9cKXxgW15gXSo/YHw8W148Pl0qPz4vZyxBYS5hbnlQdW5jdHVhdGlv''@;'; put 'put ''bj0vXFxbcHVuY3RdL2csQWEuX2VzY2FwZXM9L1xcKFtwdW5jdF0pL2csQWEuX2NvbW1lbnQ9SWwobW8uX2NvbW1lbnQpLnJlcGxhY2UoIig/Oi0tXHgzZXwkKSIsIi0tXHgzZSIpLmdldFJlZ2V4KCksQWEuZW1TdHJvbmcubERlbGltPUlsKEFhLmVtU3Ryb25nLmxEZWxpbSwidSIpLnJlcGxh''@;'; put 'put ''Y2UoL3B1bmN0L2csQWEuX3B1bmN0dWF0aW9uKS5nZXRSZWdleCgpLEFhLmVtU3Ryb25nLnJEZWxpbUFzdD1JbChBYS5lbVN0cm9uZy5yRGVsaW1Bc3QsImd1IikucmVwbGFjZSgvcHVuY3QvZyxBYS5fcHVuY3R1YXRpb24pLmdldFJlZ2V4KCksQWEuZW1TdHJvbmcuckRlbGltVW5kPUlsKEFh''@;'; put 'put ''LmVtU3Ryb25nLnJEZWxpbVVuZCwiZ3UiKS5yZXBsYWNlKC9wdW5jdC9nLEFhLl9wdW5jdHVhdGlvbikuZ2V0UmVnZXgoKSxBYS5hbnlQdW5jdHVhdGlvbj1JbChBYS5hbnlQdW5jdHVhdGlvbiwiZ3UiKS5yZXBsYWNlKC9wdW5jdC9nLEFhLl9wdW5jdHVhdGlvbikuZ2V0UmVnZXgoKSxBYS5f''@;'; put 'put ''ZXNjYXBlcz1JbChBYS5fZXNjYXBlcywiZ3UiKS5yZXBsYWNlKC9wdW5jdC9nLEFhLl9wdW5jdHVhdGlvbikuZ2V0UmVnZXgoKSxBYS5fc2NoZW1lPS9bYS16QS1aXVthLXpBLVowLTkrLi1dezEsMzF9LyxBYS5fZW1haWw9L1thLXpBLVowLTkuISMkJSYnKisvPT9eX2B7fH1+LV0rKEApW2Et''@;'; put 'put ''ekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KD86XC5bYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8pKyg/IVstX10pLyxBYS5hdXRvbGluaz1JbChBYS5hdXRvbGluaykucmVwbGFjZSgic2NoZW1lIixBYS5fc2NoZW1lKS5yZXBs''@;'; put 'put ''YWNlKCJlbWFpbCIsQWEuX2VtYWlsKS5nZXRSZWdleCgpLEFhLl9hdHRyaWJ1dGU9L1xzK1thLXpBLVo6X11bXHcuOi1dKig/OlxzKj1ccyoiW14iXSoifFxzKj1ccyonW14nXSonfFxzKj1ccypbXlxzIic9PD5gXSspPy8sQWEudGFnPUlsKEFhLnRhZykucmVwbGFjZSgiY29tbWVudCIsQWEu''@;'; put 'put ''X2NvbW1lbnQpLnJlcGxhY2UoImF0dHJpYnV0ZSIsQWEuX2F0dHJpYnV0ZSkuZ2V0UmVnZXgoKSxBYS5fbGFiZWw9Lyg/OlxbKD86XFwufFteXFtcXVxcXSkqXF18XFwufGBbXmBdKmB8W15cW1xdXFxgXSkqPy8sQWEuX2hyZWY9LzwoPzpcXC58W15cbjw+XFxdKSs+fFteXHNceDAwLVx4MWZd''@;'; put 'put ''Ki8sQWEuX3RpdGxlPS8iKD86XFwiP3xbXiJcXF0pKiJ8Jyg/OlxcJz98W14nXFxdKSonfFwoKD86XFxcKT98W14pXFxdKSpcKS8sQWEubGluaz1JbChBYS5saW5rKS5yZXBsYWNlKCJsYWJlbCIsQWEuX2xhYmVsKS5yZXBsYWNlKCJocmVmIixBYS5faHJlZikucmVwbGFjZSgidGl0bGUiLEFh''@;'; put 'put ''Ll90aXRsZSkuZ2V0UmVnZXgoKSxBYS5yZWZsaW5rPUlsKEFhLnJlZmxpbmspLnJlcGxhY2UoImxhYmVsIixBYS5fbGFiZWwpLnJlcGxhY2UoInJlZiIsbW8uX2xhYmVsKS5nZXRSZWdleCgpLEFhLm5vbGluaz1JbChBYS5ub2xpbmspLnJlcGxhY2UoInJlZiIsbW8uX2xhYmVsKS5nZXRSZWdl''@;'; put 'put ''eCgpLEFhLnJlZmxpbmtTZWFyY2g9SWwoQWEucmVmbGlua1NlYXJjaCwiZyIpLnJlcGxhY2UoInJlZmxpbmsiLEFhLnJlZmxpbmspLnJlcGxhY2UoIm5vbGluayIsQWEubm9saW5rKS5nZXRSZWdleCgpLEFhLm5vcm1hbD17Li4uQWF9LEFhLnBlZGFudGljPXsuLi5BYS5ub3JtYWwsc3Ryb25n''@;'; put 'put ''OntzdGFydDovXl9ffFwqXCovLG1pZGRsZTovXl9fKD89XFMpKFtcc1xTXSo/XFMpX18oPyFfKXxeXCpcKig/PVxTKShbXHNcU10qP1xTKVwqXCooPyFcKikvLGVuZEFzdDovXCpcKig/IVwqKS9nLGVuZFVuZDovX18oPyFfKS9nfSxlbTp7c3RhcnQ6L15ffFwqLyxtaWRkbGU6L14oKVwqKD89''@;'; put 'put ''XFMpKFtcc1xTXSo/XFMpXCooPyFcKil8Xl8oPz1cUykoW1xzXFNdKj9cUylfKD8hXykvLGVuZEFzdDovXCooPyFcKikvZyxlbmRVbmQ6L18oPyFfKS9nfSxsaW5rOklsKC9eIT9cWyhsYWJlbClcXVwoKC4qPylcKS8pLnJlcGxhY2UoImxhYmVsIixBYS5fbGFiZWwpLmdldFJlZ2V4KCkscmVm''@;'; put 'put ''bGluazpJbCgvXiE/XFsobGFiZWwpXF1ccypcWyhbXlxdXSopXF0vKS5yZXBsYWNlKCJsYWJlbCIsQWEuX2xhYmVsKS5nZXRSZWdleCgpfSxBYS5nZm09ey4uLkFhLm5vcm1hbCxlc2NhcGU6SWwoQWEuZXNjYXBlKS5yZXBsYWNlKCJdKSIsIn58XSkiKS5nZXRSZWdleCgpLF9leHRlbmRlZF9l''@;'; put 'put ''bWFpbDovW0EtWmEtejAtOS5fKy1dKyhAKVthLXpBLVowLTktX10rKD86XC5bYS16QS1aMC05LV9dKlthLXpBLVowLTldKSsoPyFbLV9dKS8sdXJsOi9eKCg/OmZ0cHxodHRwcz8pOlwvXC98d3d3XC4pKD86W2EtekEtWjAtOVwtXStcLj8pK1teXHM8XSp8XmVtYWlsLyxfYmFja3BlZGFsOi8o''@;'; put 'put ''PzpbXj8hLiw6OypfJyJ+KCkmXSt8XChbXildKlwpfCYoPyFbYS16QS1aMC05XSs7JCl8Wz8hLiw6OypfJyJ+KV0rKD8hJCkpKy8sZGVsOi9eKH5+PykoPz1bXlxzfl0pKFtcc1xTXSo/W15cc35dKVwxKD89W15+XXwkKS8sdGV4dDovXihbYH5dK3xbXmB+XSkoPzooPz0gezIsfVxuKXwoPz1b''@;'; put 'put ''YS16QS1aMC05LiEjJCUmJyorXC89P19ge1x8fX4tXStAKXxbXHNcU10qPyg/Oig/PVtcXDwhXFtgKn5fXXxcYl98aHR0cHM/OlwvXC98ZnRwOlwvXC98d3d3XC58JCl8W14gXSg/PSB7Mix9XG4pfFteYS16QS1aMC05LiEjJCUmJyorXC89P19ge1x8fX4tXSg/PVthLXpBLVowLTkuISMkJSYn''@;'; put 'put ''KitcLz0/X2B7XHx9fi1dK0ApKSkvfSxBYS5nZm0udXJsPUlsKEFhLmdmbS51cmwsImkiKS5yZXBsYWNlKCJlbWFpbCIsQWEuZ2ZtLl9leHRlbmRlZF9lbWFpbCkuZ2V0UmVnZXgoKSxBYS5icmVha3M9ey4uLkFhLmdmbSxicjpJbChBYS5icikucmVwbGFjZSgiezIsfSIsIioiKS5nZXRSZWdl''@;'; put 'put ''eCgpLHRleHQ6SWwoQWEuZ2ZtLnRleHQpLnJlcGxhY2UoIlxcYl8iLCJcXGJffCB7Mix9XFxuIikucmVwbGFjZSgvXHsyLFx9L2csIioiKS5nZXRSZWdleCgpfTtjbGFzcyBhNHtjb25zdHJ1Y3RvcihsKXt0aGlzLnRva2Vucz1bXSx0aGlzLnRva2Vucy5saW5rcz1PYmplY3QuY3JlYXRlKG51''@;'; put 'put ''bGwpLHRoaXMub3B0aW9ucz1sfHxTNix0aGlzLm9wdGlvbnMudG9rZW5pemVyPXRoaXMub3B0aW9ucy50b2tlbml6ZXJ8fG5ldyBsTix0aGlzLnRva2VuaXplcj10aGlzLm9wdGlvbnMudG9rZW5pemVyLHRoaXMudG9rZW5pemVyLm9wdGlvbnM9dGhpcy5vcHRpb25zLHRoaXMudG9rZW5pemVy''@;'; put 'put ''LmxleGVyPXRoaXMsdGhpcy5pbmxpbmVRdWV1ZT1bXSx0aGlzLnN0YXRlPXtpbkxpbms6ITEsaW5SYXdCbG9jazohMSx0b3A6ITB9O2NvbnN0IGE9e2Jsb2NrOm1vLm5vcm1hbCxpbmxpbmU6QWEubm9ybWFsfTt0aGlzLm9wdGlvbnMucGVkYW50aWM/KGEuYmxvY2s9bW8ucGVkYW50aWMsYS5p''@;'; put 'put ''bmxpbmU9QWEucGVkYW50aWMpOnRoaXMub3B0aW9ucy5nZm0mJihhLmJsb2NrPW1vLmdmbSxhLmlubGluZT10aGlzLm9wdGlvbnMuYnJlYWtzP0FhLmJyZWFrczpBYS5nZm0pLHRoaXMudG9rZW5pemVyLnJ1bGVzPWF9c3RhdGljIGdldCBydWxlcygpe3JldHVybntibG9jazptbyxpbmxpbmU6''@;'; put 'put ''QWF9fXN0YXRpYyBsZXgobCxhKXtyZXR1cm4gbmV3IGE0KGEpLmxleChsKX1zdGF0aWMgbGV4SW5saW5lKGwsYSl7cmV0dXJuIG5ldyBhNChhKS5pbmxpbmVUb2tlbnMobCl9bGV4KGwpe2xldCBhO2ZvcihsPWwucmVwbGFjZSgvXHJcbnxcci9nLCJcbiIpLHRoaXMuYmxvY2tUb2tlbnMobCx0''@;'; put 'put ''aGlzLnRva2Vucyk7YT10aGlzLmlubGluZVF1ZXVlLnNoaWZ0KCk7KXRoaXMuaW5saW5lVG9rZW5zKGEuc3JjLGEudG9rZW5zKTtyZXR1cm4gdGhpcy50b2tlbnN9YmxvY2tUb2tlbnMobCxhPVtdKXtsZXQgZCxoLGYsdjtmb3IobD10aGlzLm9wdGlvbnMucGVkYW50aWM/bC5yZXBsYWNlKC9c''@;'; put 'put ''dC9nLCIgICAgIikucmVwbGFjZSgvXiArJC9nbSwiIik6bC5yZXBsYWNlKC9eKCAqKShcdCspL2dtLChNLEQsWik9PkQrIiAgICAiLnJlcGVhdChaLmxlbmd0aCkpO2w7KWlmKCEodGhpcy5vcHRpb25zLmV4dGVuc2lvbnMmJnRoaXMub3B0aW9ucy5leHRlbnNpb25zLmJsb2NrJiZ0aGlzLm9w''@;'; put 'put ''dGlvbnMuZXh0ZW5zaW9ucy5ibG9jay5zb21lKE09PiEhKGQ9TS5jYWxsKHtsZXhlcjp0aGlzfSxsLGEpKSYmKGw9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxhLnB1c2goZCksITApKSkpe2lmKGQ9dGhpcy50b2tlbml6ZXIuc3BhY2UobCkpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3Ro''@;'; put 'put ''KSwxPT09ZC5yYXcubGVuZ3RoJiZhLmxlbmd0aD4wP2FbYS5sZW5ndGgtMV0ucmF3Kz0iXG4iOmEucHVzaChkKTtjb250aW51ZX1pZihkPXRoaXMudG9rZW5pemVyLmNvZGUobCkpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxoPWFbYS5sZW5ndGgtMV0sIWh8fCJwYXJhZ3JhcGgiIT09''@;'; put 'put ''aC50eXBlJiYidGV4dCIhPT1oLnR5cGU/YS5wdXNoKGQpOihoLnJhdys9IlxuIitkLnJhdyxoLnRleHQrPSJcbiIrZC50ZXh0LHRoaXMuaW5saW5lUXVldWVbdGhpcy5pbmxpbmVRdWV1ZS5sZW5ndGgtMV0uc3JjPWgudGV4dCk7Y29udGludWV9aWYoZD10aGlzLnRva2VuaXplci5mZW5jZXMo''@;'; put 'put ''bCkpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxhLnB1c2goZCk7Y29udGludWV9aWYoZD10aGlzLnRva2VuaXplci5oZWFkaW5nKGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksYS5wdXNoKGQpO2NvbnRpbnVlfWlmKGQ9dGhpcy50b2tlbml6ZXIuaHIobCkpe2w9bC5zdWJz''@;'; put 'put ''dHJpbmcoZC5yYXcubGVuZ3RoKSxhLnB1c2goZCk7Y29udGludWV9aWYoZD10aGlzLnRva2VuaXplci5ibG9ja3F1b3RlKGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksYS5wdXNoKGQpO2NvbnRpbnVlfWlmKGQ9dGhpcy50b2tlbml6ZXIubGlzdChsKSl7bD1sLnN1YnN0cmluZyhk''@;'; put 'put ''LnJhdy5sZW5ndGgpLGEucHVzaChkKTtjb250aW51ZX1pZihkPXRoaXMudG9rZW5pemVyLmh0bWwobCkpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxhLnB1c2goZCk7Y29udGludWV9aWYoZD10aGlzLnRva2VuaXplci5kZWYobCkpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxo''@;'; put 'put ''PWFbYS5sZW5ndGgtMV0sIWh8fCJwYXJhZ3JhcGgiIT09aC50eXBlJiYidGV4dCIhPT1oLnR5cGU/dGhpcy50b2tlbnMubGlua3NbZC50YWddfHwodGhpcy50b2tlbnMubGlua3NbZC50YWddPXtocmVmOmQuaHJlZix0aXRsZTpkLnRpdGxlfSk6KGgucmF3Kz0iXG4iK2QucmF3LGgudGV4dCs9''@;'; put 'put ''IlxuIitkLnJhdyx0aGlzLmlubGluZVF1ZXVlW3RoaXMuaW5saW5lUXVldWUubGVuZ3RoLTFdLnNyYz1oLnRleHQpO2NvbnRpbnVlfWlmKGQ9dGhpcy50b2tlbml6ZXIudGFibGUobCkpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxhLnB1c2goZCk7Y29udGludWV9aWYoZD10aGlzLnRv''@;'; put 'put ''a2VuaXplci5saGVhZGluZyhsKSl7bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLGEucHVzaChkKTtjb250aW51ZX1pZihmPWwsdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMmJnRoaXMub3B0aW9ucy5leHRlbnNpb25zLnN0YXJ0QmxvY2spe2xldCBNPTEvMDtjb25zdCBEPWwuc2xpY2UoMSk7''@;'; put 'put ''bGV0IFo7dGhpcy5vcHRpb25zLmV4dGVuc2lvbnMuc3RhcnRCbG9jay5mb3JFYWNoKGZ1bmN0aW9uKHJlKXtaPXJlLmNhbGwoe2xleGVyOnRoaXN9LEQpLCJudW1iZXIiPT10eXBlb2YgWiYmWj49MCYmKE09TWF0aC5taW4oTSxaKSl9KSxNPDEvMCYmTT49MCYmKGY9bC5zdWJzdHJpbmcoMCxN''@;'; put 'put ''KzEpKX1pZih0aGlzLnN0YXRlLnRvcCYmKGQ9dGhpcy50b2tlbml6ZXIucGFyYWdyYXBoKGYpKSl7aD1hW2EubGVuZ3RoLTFdLHYmJiJwYXJhZ3JhcGgiPT09aC50eXBlPyhoLnJhdys9IlxuIitkLnJhdyxoLnRleHQrPSJcbiIrZC50ZXh0LHRoaXMuaW5saW5lUXVldWUucG9wKCksdGhpcy5p''@;'; put 'put ''bmxpbmVRdWV1ZVt0aGlzLmlubGluZVF1ZXVlLmxlbmd0aC0xXS5zcmM9aC50ZXh0KTphLnB1c2goZCksdj1mLmxlbmd0aCE9PWwubGVuZ3RoLGw9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKTtjb250aW51ZX1pZihkPXRoaXMudG9rZW5pemVyLnRleHQobCkpe2w9bC5zdWJzdHJpbmcoZC5y''@;'; put 'put ''YXcubGVuZ3RoKSxoPWFbYS5sZW5ndGgtMV0saCYmInRleHQiPT09aC50eXBlPyhoLnJhdys9IlxuIitkLnJhdyxoLnRleHQrPSJcbiIrZC50ZXh0LHRoaXMuaW5saW5lUXVldWUucG9wKCksdGhpcy5pbmxpbmVRdWV1ZVt0aGlzLmlubGluZVF1ZXVlLmxlbmd0aC0xXS5zcmM9aC50ZXh0KTph''@;'; put 'put ''LnB1c2goZCk7Y29udGludWV9aWYobCl7Y29uc3QgTT0iSW5maW5pdGUgbG9vcCBvbiBieXRlOiAiK2wuY2hhckNvZGVBdCgwKTtpZih0aGlzLm9wdGlvbnMuc2lsZW50KXtjb25zb2xlLmVycm9yKE0pO2JyZWFrfXRocm93IG5ldyBFcnJvcihNKX19cmV0dXJuIHRoaXMuc3RhdGUudG9wPSEw''@;'; put 'put ''LGF9aW5saW5lKGwsYT1bXSl7cmV0dXJuIHRoaXMuaW5saW5lUXVldWUucHVzaCh7c3JjOmwsdG9rZW5zOmF9KSxhfWlubGluZVRva2VucyhsLGE9W10pe2xldCBkLGgsZixNLEQsWix2PWw7aWYodGhpcy50b2tlbnMubGlua3Mpe2NvbnN0IHJlPU9iamVjdC5rZXlzKHRoaXMudG9rZW5zLmxp''@;'; put 'put ''bmtzKTtpZihyZS5sZW5ndGg+MClmb3IoO251bGwhPShNPXRoaXMudG9rZW5pemVyLnJ1bGVzLmlubGluZS5yZWZsaW5rU2VhcmNoLmV4ZWModikpOylyZS5pbmNsdWRlcyhNWzBdLnNsaWNlKE1bMF0ubGFzdEluZGV4T2YoIlsiKSsxLC0xKSkmJih2PXYuc2xpY2UoMCxNLmluZGV4KSsiWyIr''@;'; put 'put ''ImEiLnJlcGVhdChNWzBdLmxlbmd0aC0yKSsiXSIrdi5zbGljZSh0aGlzLnRva2VuaXplci5ydWxlcy5pbmxpbmUucmVmbGlua1NlYXJjaC5sYXN0SW5kZXgpKX1mb3IoO251bGwhPShNPXRoaXMudG9rZW5pemVyLnJ1bGVzLmlubGluZS5ibG9ja1NraXAuZXhlYyh2KSk7KXY9di5zbGljZSgw''@;'; put 'put ''LE0uaW5kZXgpKyJbIisiYSIucmVwZWF0KE1bMF0ubGVuZ3RoLTIpKyJdIit2LnNsaWNlKHRoaXMudG9rZW5pemVyLnJ1bGVzLmlubGluZS5ibG9ja1NraXAubGFzdEluZGV4KTtmb3IoO251bGwhPShNPXRoaXMudG9rZW5pemVyLnJ1bGVzLmlubGluZS5hbnlQdW5jdHVhdGlvbi5leGVjKHYp''@;'; put 'put ''KTspdj12LnNsaWNlKDAsTS5pbmRleCkrIisrIit2LnNsaWNlKHRoaXMudG9rZW5pemVyLnJ1bGVzLmlubGluZS5hbnlQdW5jdHVhdGlvbi5sYXN0SW5kZXgpO2Zvcig7bDspaWYoRHx8KFo9IiIpLEQ9ITEsISh0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucyYmdGhpcy5vcHRpb25zLmV4dGVuc2lv''@;'; put 'put ''bnMuaW5saW5lJiZ0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5pbmxpbmUuc29tZShyZT0+ISEoZD1yZS5jYWxsKHtsZXhlcjp0aGlzfSxsLGEpKSYmKGw9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxhLnB1c2goZCksITApKSkpe2lmKGQ9dGhpcy50b2tlbml6ZXIuZXNjYXBlKGwpKXtsPWwu''@;'; put 'put ''c3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksYS5wdXNoKGQpO2NvbnRpbnVlfWlmKGQ9dGhpcy50b2tlbml6ZXIudGFnKGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksaD1hW2EubGVuZ3RoLTFdLGgmJiJ0ZXh0Ij09PWQudHlwZSYmInRleHQiPT09aC50eXBlPyhoLnJhdys9ZC5yYXcs''@;'; put 'put ''aC50ZXh0Kz1kLnRleHQpOmEucHVzaChkKTtjb250aW51ZX1pZihkPXRoaXMudG9rZW5pemVyLmxpbmsobCkpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxhLnB1c2goZCk7Y29udGludWV9aWYoZD10aGlzLnRva2VuaXplci5yZWZsaW5rKGwsdGhpcy50b2tlbnMubGlua3MpKXtsPWwu''@;'; put 'put ''c3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksaD1hW2EubGVuZ3RoLTFdLGgmJiJ0ZXh0Ij09PWQudHlwZSYmInRleHQiPT09aC50eXBlPyhoLnJhdys9ZC5yYXcsaC50ZXh0Kz1kLnRleHQpOmEucHVzaChkKTtjb250aW51ZX1pZihkPXRoaXMudG9rZW5pemVyLmVtU3Ryb25nKGwsdixaKSl7bD1s''@;'; put 'put ''LnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLGEucHVzaChkKTtjb250aW51ZX1pZihkPXRoaXMudG9rZW5pemVyLmNvZGVzcGFuKGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksYS5wdXNoKGQpO2NvbnRpbnVlfWlmKGQ9dGhpcy50b2tlbml6ZXIuYnIobCkpe2w9bC5zdWJzdHJpbmco''@;'; put 'put ''ZC5yYXcubGVuZ3RoKSxhLnB1c2goZCk7Y29udGludWV9aWYoZD10aGlzLnRva2VuaXplci5kZWwobCkpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxhLnB1c2goZCk7Y29udGludWV9aWYoZD10aGlzLnRva2VuaXplci5hdXRvbGluayhsLEs2ZSkpe2w9bC5zdWJzdHJpbmcoZC5yYXcu''@;'; put 'put ''bGVuZ3RoKSxhLnB1c2goZCk7Y29udGludWV9aWYoIXRoaXMuc3RhdGUuaW5MaW5rJiYoZD10aGlzLnRva2VuaXplci51cmwobCxLNmUpKSl7bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLGEucHVzaChkKTtjb250aW51ZX1pZihmPWwsdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMmJnRoaXMu''@;'; put 'put ''b3B0aW9ucy5leHRlbnNpb25zLnN0YXJ0SW5saW5lKXtsZXQgcmU9MS8wO2NvbnN0IGNlPWwuc2xpY2UoMSk7bGV0IGJlO3RoaXMub3B0aW9ucy5leHRlbnNpb25zLnN0YXJ0SW5saW5lLmZvckVhY2goZnVuY3Rpb24oRWUpe2JlPUVlLmNhbGwoe2xleGVyOnRoaXN9LGNlKSwibnVtYmVyIj09''@;'; put 'put ''dHlwZW9mIGJlJiZiZT49MCYmKHJlPU1hdGgubWluKHJlLGJlKSl9KSxyZTwxLzAmJnJlPj0wJiYoZj1sLnN1YnN0cmluZygwLHJlKzEpKX1pZihkPXRoaXMudG9rZW5pemVyLmlubGluZVRleHQoZixPYnQpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksIl8iIT09ZC5yYXcuc2xpY2Uo''@;'; put 'put ''LTEpJiYoWj1kLnJhdy5zbGljZSgtMSkpLEQ9ITAsaD1hW2EubGVuZ3RoLTFdLGgmJiJ0ZXh0Ij09PWgudHlwZT8oaC5yYXcrPWQucmF3LGgudGV4dCs9ZC50ZXh0KTphLnB1c2goZCk7Y29udGludWV9aWYobCl7Y29uc3QgcmU9IkluZmluaXRlIGxvb3Agb24gYnl0ZTogIitsLmNoYXJDb2Rl''@;'; put 'put ''QXQoMCk7aWYodGhpcy5vcHRpb25zLnNpbGVudCl7Y29uc29sZS5lcnJvcihyZSk7YnJlYWt9dGhyb3cgbmV3IEVycm9yKHJlKX19cmV0dXJuIGF9fWNsYXNzIGNOe2NvbnN0cnVjdG9yKGwpe3RoaXMub3B0aW9ucz1sfHxTNn1jb2RlKGwsYSxkKXtjb25zdCBoPShhfHwiIikubWF0Y2goL1xT''@;'; put 'put ''Ki8pWzBdO2lmKHRoaXMub3B0aW9ucy5oaWdobGlnaHQpe2NvbnN0IGY9dGhpcy5vcHRpb25zLmhpZ2hsaWdodChsLGgpO251bGwhPWYmJmYhPT1sJiYoZD0hMCxsPWYpfXJldHVybiBsPWwucmVwbGFjZSgvXG4kLywiIikrIlxuIixoPyc8cHJlPjxjb2RlIGNsYXNzPSInK3RoaXMub3B0aW9u''@;'; put 'put ''cy5sYW5nUHJlZml4K3gxKGgpKyciPicrKGQ/bDp4MShsLCEwKSkrIjwvY29kZT48L3ByZT5cbiI6IjxwcmU+PGNvZGU+IisoZD9sOngxKGwsITApKSsiPC9jb2RlPjwvcHJlPlxuIn1ibG9ja3F1b3RlKGwpe3JldHVybmA8YmxvY2txdW90ZT5cbiR7bH08L2Jsb2NrcXVvdGU+XG5gfWh0bWwo''@;'; put 'put ''bCxhKXtyZXR1cm4gbH1oZWFkaW5nKGwsYSxkLGgpe3JldHVybiB0aGlzLm9wdGlvbnMuaGVhZGVySWRzP2A8aCR7YX0gaWQ9IiR7dGhpcy5vcHRpb25zLmhlYWRlclByZWZpeCtoLnNsdWcoZCl9Ij4ke2x9PC9oJHthfT5cbmA6YDxoJHthfT4ke2x9PC9oJHthfT5cbmB9aHIoKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5vcHRpb25zLnhodG1sPyI8aHIvPlxuIjoiPGhyPlxuIn1saXN0KGwsYSxkKXtjb25zdCBoPWE/Im9sIjoidWwiO3JldHVybiI8IitoKyhhJiYxIT09ZD8nIHN0YXJ0PSInK2QrJyInOiIiKSsiPlxuIitsKyI8LyIraCsiPlxuIn1saXN0aXRlbShsKXtyZXR1cm5gPGxpPiR7bH08L2xp''@;'; put 'put ''PlxuYH1jaGVja2JveChsKXtyZXR1cm4iPGlucHV0ICIrKGw/J2NoZWNrZWQ9IiIgJzoiIikrJ2Rpc2FibGVkPSIiIHR5cGU9ImNoZWNrYm94IicrKHRoaXMub3B0aW9ucy54aHRtbD8iIC8iOiIiKSsiPiAifXBhcmFncmFwaChsKXtyZXR1cm5gPHA+JHtsfTwvcD5cbmB9dGFibGUobCxhKXty''@;'; put 'put ''ZXR1cm4gYSYmKGE9YDx0Ym9keT4ke2F9PC90Ym9keT5gKSwiPHRhYmxlPlxuPHRoZWFkPlxuIitsKyI8L3RoZWFkPlxuIithKyI8L3RhYmxlPlxuIn10YWJsZXJvdyhsKXtyZXR1cm5gPHRyPlxuJHtsfTwvdHI+XG5gfXRhYmxlY2VsbChsLGEpe2NvbnN0IGQ9YS5oZWFkZXI/InRoIjoidGQi''@;'; put 'put ''O3JldHVybihhLmFsaWduP2A8JHtkfSBhbGlnbj0iJHthLmFsaWdufSI+YDpgPCR7ZH0+YCkrbCtgPC8ke2R9PlxuYH1zdHJvbmcobCl7cmV0dXJuYDxzdHJvbmc+JHtsfTwvc3Ryb25nPmB9ZW0obCl7cmV0dXJuYDxlbT4ke2x9PC9lbT5gfWNvZGVzcGFuKGwpe3JldHVybmA8Y29kZT4ke2x9''@;'; put 'put ''PC9jb2RlPmB9YnIoKXtyZXR1cm4gdGhpcy5vcHRpb25zLnhodG1sPyI8YnIvPiI6Ijxicj4ifWRlbChsKXtyZXR1cm5gPGRlbD4ke2x9PC9kZWw+YH1saW5rKGwsYSxkKXtpZihudWxsPT09KGw9WTZlKHRoaXMub3B0aW9ucy5zYW5pdGl6ZSx0aGlzLm9wdGlvbnMuYmFzZVVybCxsKSkpcmV0''@;'; put 'put ''dXJuIGQ7bGV0IGg9JzxhIGhyZWY9IicrbCsnIic7cmV0dXJuIGEmJihoKz0nIHRpdGxlPSInK2ErJyInKSxoKz0iPiIrZCsiPC9hPiIsaH1pbWFnZShsLGEsZCl7aWYobnVsbD09PShsPVk2ZSh0aGlzLm9wdGlvbnMuc2FuaXRpemUsdGhpcy5vcHRpb25zLmJhc2VVcmwsbCkpKXJldHVybiBk''@;'; put 'put ''O2xldCBoPWA8aW1nIHNyYz0iJHtsfSIgYWx0PSIke2R9ImA7cmV0dXJuIGEmJihoKz1gIHRpdGxlPSIke2F9ImApLGgrPXRoaXMub3B0aW9ucy54aHRtbD8iLz4iOiI+IixofXRleHQobCl7cmV0dXJuIGx9fWNsYXNzIHJ0ZXtzdHJvbmcobCl7cmV0dXJuIGx9ZW0obCl7cmV0dXJuIGx9Y29k''@;'; put 'put ''ZXNwYW4obCl7cmV0dXJuIGx9ZGVsKGwpe3JldHVybiBsfWh0bWwobCl7cmV0dXJuIGx9dGV4dChsKXtyZXR1cm4gbH1saW5rKGwsYSxkKXtyZXR1cm4iIitkfWltYWdlKGwsYSxkKXtyZXR1cm4iIitkfWJyKCl7cmV0dXJuIiJ9fWNsYXNzIGl0ZXtjb25zdHJ1Y3Rvcigpe3RoaXMuc2Vlbj17''@;'; put 'put ''fX1zZXJpYWxpemUobCl7cmV0dXJuIGwudG9Mb3dlckNhc2UoKS50cmltKCkucmVwbGFjZSgvPFshXC9hLXpdLio/Pi9naSwiIikucmVwbGFjZSgvW1x1MjAwMC1cdTIwNkZcdTJFMDAtXHUyRTdGXFwnISIjJCUmKCkqKywuLzo7PD0+P0BbXF1eYHt8fX5dL2csIiIpLnJlcGxhY2UoL1xzL2cs''@;'; put 'put ''Ii0iKX1nZXROZXh0U2FmZVNsdWcobCxhKXtsZXQgZD1sLGg9MDtpZih0aGlzLnNlZW4uaGFzT3duUHJvcGVydHkoZCkpe2g9dGhpcy5zZWVuW2xdO2Rve2grKyxkPWwrIi0iK2h9d2hpbGUodGhpcy5zZWVuLmhhc093blByb3BlcnR5KGQpKX1yZXR1cm4gYXx8KHRoaXMuc2VlbltsXT1oLHRo''@;'; put 'put ''aXMuc2VlbltkXT0wKSxkfXNsdWcobCxhPXt9KXtjb25zdCBkPXRoaXMuc2VyaWFsaXplKGwpO3JldHVybiB0aGlzLmdldE5leHRTYWZlU2x1ZyhkLGEuZHJ5cnVuKX19Y2xhc3MgbzR7Y29uc3RydWN0b3IobCl7dGhpcy5vcHRpb25zPWx8fFM2LHRoaXMub3B0aW9ucy5yZW5kZXJlcj10aGlz''@;'; put 'put ''Lm9wdGlvbnMucmVuZGVyZXJ8fG5ldyBjTix0aGlzLnJlbmRlcmVyPXRoaXMub3B0aW9ucy5yZW5kZXJlcix0aGlzLnJlbmRlcmVyLm9wdGlvbnM9dGhpcy5vcHRpb25zLHRoaXMudGV4dFJlbmRlcmVyPW5ldyBydGUsdGhpcy5zbHVnZ2VyPW5ldyBpdGV9c3RhdGljIHBhcnNlKGwsYSl7cmV0''@;'; put 'put ''dXJuIG5ldyBvNChhKS5wYXJzZShsKX1zdGF0aWMgcGFyc2VJbmxpbmUobCxhKXtyZXR1cm4gbmV3IG80KGEpLnBhcnNlSW5saW5lKGwpfXBhcnNlKGwsYT0hMCl7bGV0IGgsZix2LE0sRCxaLHJlLGNlLGJlLEVlLEJlLHFlLHJ0LHB0LGR0LEp0LHZuLENuLHRuLGQ9IiI7Y29uc3QgTW49bC5s''@;'; put 'put ''ZW5ndGg7Zm9yKGg9MDtoPE1uO2grKylpZihFZT1sW2hdLHRoaXMub3B0aW9ucy5leHRlbnNpb25zJiZ0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5yZW5kZXJlcnMmJnRoaXMub3B0aW9ucy5leHRlbnNpb25zLnJlbmRlcmVyc1tFZS50eXBlXSYmKHRuPXRoaXMub3B0aW9ucy5leHRlbnNpb25z''@;'; put 'put ''LnJlbmRlcmVyc1tFZS50eXBlXS5jYWxsKHtwYXJzZXI6dGhpc30sRWUpLCExIT09dG58fCFbInNwYWNlIiwiaHIiLCJoZWFkaW5nIiwiY29kZSIsInRhYmxlIiwiYmxvY2txdW90ZSIsImxpc3QiLCJodG1sIiwicGFyYWdyYXBoIiwidGV4dCJdLmluY2x1ZGVzKEVlLnR5cGUpKSlkKz10bnx8''@;'; put 'put ''IiI7ZWxzZSBzd2l0Y2goRWUudHlwZSl7Y2FzZSJzcGFjZSI6Y29udGludWU7Y2FzZSJociI6ZCs9dGhpcy5yZW5kZXJlci5ocigpO2NvbnRpbnVlO2Nhc2UiaGVhZGluZyI6ZCs9dGhpcy5yZW5kZXJlci5oZWFkaW5nKHRoaXMucGFyc2VJbmxpbmUoRWUudG9rZW5zKSxFZS5kZXB0aCxXNmUo''@;'; put 'put ''dGhpcy5wYXJzZUlubGluZShFZS50b2tlbnMsdGhpcy50ZXh0UmVuZGVyZXIpKSx0aGlzLnNsdWdnZXIpO2NvbnRpbnVlO2Nhc2UiY29kZSI6ZCs9dGhpcy5yZW5kZXJlci5jb2RlKEVlLnRleHQsRWUubGFuZyxFZS5lc2NhcGVkKTtjb250aW51ZTtjYXNlInRhYmxlIjpmb3IoY2U9IiIscmU9''@;'; put 'put ''IiIsTT1FZS5oZWFkZXIubGVuZ3RoLGY9MDtmPE07ZisrKXJlKz10aGlzLnJlbmRlcmVyLnRhYmxlY2VsbCh0aGlzLnBhcnNlSW5saW5lKEVlLmhlYWRlcltmXS50b2tlbnMpLHtoZWFkZXI6ITAsYWxpZ246RWUuYWxpZ25bZl19KTtmb3IoY2UrPXRoaXMucmVuZGVyZXIudGFibGVyb3cocmUp''@;'; put 'put ''LGJlPSIiLE09RWUucm93cy5sZW5ndGgsZj0wO2Y8TTtmKyspe2ZvcihaPUVlLnJvd3NbZl0scmU9IiIsRD1aLmxlbmd0aCx2PTA7djxEO3YrKylyZSs9dGhpcy5yZW5kZXJlci50YWJsZWNlbGwodGhpcy5wYXJzZUlubGluZShaW3ZdLnRva2Vucykse2hlYWRlcjohMSxhbGlnbjpFZS5hbGln''@;'; put 'put ''blt2XX0pO2JlKz10aGlzLnJlbmRlcmVyLnRhYmxlcm93KHJlKX1kKz10aGlzLnJlbmRlcmVyLnRhYmxlKGNlLGJlKTtjb250aW51ZTtjYXNlImJsb2NrcXVvdGUiOmJlPXRoaXMucGFyc2UoRWUudG9rZW5zKSxkKz10aGlzLnJlbmRlcmVyLmJsb2NrcXVvdGUoYmUpO2NvbnRpbnVlO2Nhc2Ui''@;'; put 'put ''bGlzdCI6Zm9yKEJlPUVlLm9yZGVyZWQscWU9RWUuc3RhcnQscnQ9RWUubG9vc2UsTT1FZS5pdGVtcy5sZW5ndGgsYmU9IiIsZj0wO2Y8TTtmKyspZHQ9RWUuaXRlbXNbZl0sSnQ9ZHQuY2hlY2tlZCx2bj1kdC50YXNrLHB0PSIiLGR0LnRhc2smJihDbj10aGlzLnJlbmRlcmVyLmNoZWNrYm94''@;'; put 'put ''KEp0KSxydD9kdC50b2tlbnMubGVuZ3RoPjAmJiJwYXJhZ3JhcGgiPT09ZHQudG9rZW5zWzBdLnR5cGU/KGR0LnRva2Vuc1swXS50ZXh0PUNuKyIgIitkdC50b2tlbnNbMF0udGV4dCxkdC50b2tlbnNbMF0udG9rZW5zJiZkdC50b2tlbnNbMF0udG9rZW5zLmxlbmd0aD4wJiYidGV4dCI9PT1k''@;'; put 'put ''dC50b2tlbnNbMF0udG9rZW5zWzBdLnR5cGUmJihkdC50b2tlbnNbMF0udG9rZW5zWzBdLnRleHQ9Q24rIiAiK2R0LnRva2Vuc1swXS50b2tlbnNbMF0udGV4dCkpOmR0LnRva2Vucy51bnNoaWZ0KHt0eXBlOiJ0ZXh0Iix0ZXh0OkNufSk6cHQrPUNuKSxwdCs9dGhpcy5wYXJzZShkdC50b2tl''@;'; put 'put ''bnMscnQpLGJlKz10aGlzLnJlbmRlcmVyLmxpc3RpdGVtKHB0LHZuLEp0KTtkKz10aGlzLnJlbmRlcmVyLmxpc3QoYmUsQmUscWUpO2NvbnRpbnVlO2Nhc2UiaHRtbCI6ZCs9dGhpcy5yZW5kZXJlci5odG1sKEVlLnRleHQsRWUuYmxvY2spO2NvbnRpbnVlO2Nhc2UicGFyYWdyYXBoIjpkKz10''@;'; put 'put ''aGlzLnJlbmRlcmVyLnBhcmFncmFwaCh0aGlzLnBhcnNlSW5saW5lKEVlLnRva2VucykpO2NvbnRpbnVlO2Nhc2UidGV4dCI6Zm9yKGJlPUVlLnRva2Vucz90aGlzLnBhcnNlSW5saW5lKEVlLnRva2Vucyk6RWUudGV4dDtoKzE8TW4mJiJ0ZXh0Ij09PWxbaCsxXS50eXBlOylFZT1sWysraF0s''@;'; put 'put ''YmUrPSJcbiIrKEVlLnRva2Vucz90aGlzLnBhcnNlSW5saW5lKEVlLnRva2Vucyk6RWUudGV4dCk7ZCs9YT90aGlzLnJlbmRlcmVyLnBhcmFncmFwaChiZSk6YmU7Y29udGludWU7ZGVmYXVsdDp7Y29uc3QgQ3I9J1Rva2VuIHdpdGggIicrRWUudHlwZSsnIiB0eXBlIHdhcyBub3QgZm91bmQu''@;'; put 'put ''JztpZih0aGlzLm9wdGlvbnMuc2lsZW50KXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoQ3IpO3Rocm93IG5ldyBFcnJvcihDcil9fXJldHVybiBkfXBhcnNlSW5saW5lKGwsYSl7YT1hfHx0aGlzLnJlbmRlcmVyO2xldCBoLGYsdixkPSIiO2NvbnN0IE09bC5sZW5ndGg7Zm9yKGg9MDtoPE07''@;'; put 'put ''aCsrKWlmKGY9bFtoXSx0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucyYmdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMucmVuZGVyZXJzJiZ0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5yZW5kZXJlcnNbZi50eXBlXSYmKHY9dGhpcy5vcHRpb25zLmV4dGVuc2lvbnMucmVuZGVyZXJzW2YudHlwZV0uY2Fs''@;'; put 'put ''bCh7cGFyc2VyOnRoaXN9LGYpLCExIT09dnx8IVsiZXNjYXBlIiwiaHRtbCIsImxpbmsiLCJpbWFnZSIsInN0cm9uZyIsImVtIiwiY29kZXNwYW4iLCJiciIsImRlbCIsInRleHQiXS5pbmNsdWRlcyhmLnR5cGUpKSlkKz12fHwiIjtlbHNlIHN3aXRjaChmLnR5cGUpe2Nhc2UiZXNjYXBlIjpj''@;'; put 'put ''YXNlInRleHQiOmQrPWEudGV4dChmLnRleHQpO2JyZWFrO2Nhc2UiaHRtbCI6ZCs9YS5odG1sKGYudGV4dCk7YnJlYWs7Y2FzZSJsaW5rIjpkKz1hLmxpbmsoZi5ocmVmLGYudGl0bGUsdGhpcy5wYXJzZUlubGluZShmLnRva2VucyxhKSk7YnJlYWs7Y2FzZSJpbWFnZSI6ZCs9YS5pbWFnZShm''@;'; put 'put ''LmhyZWYsZi50aXRsZSxmLnRleHQpO2JyZWFrO2Nhc2Uic3Ryb25nIjpkKz1hLnN0cm9uZyh0aGlzLnBhcnNlSW5saW5lKGYudG9rZW5zLGEpKTticmVhaztjYXNlImVtIjpkKz1hLmVtKHRoaXMucGFyc2VJbmxpbmUoZi50b2tlbnMsYSkpO2JyZWFrO2Nhc2UiY29kZXNwYW4iOmQrPWEuY29k''@;'; put 'put ''ZXNwYW4oZi50ZXh0KTticmVhaztjYXNlImJyIjpkKz1hLmJyKCk7YnJlYWs7Y2FzZSJkZWwiOmQrPWEuZGVsKHRoaXMucGFyc2VJbmxpbmUoZi50b2tlbnMsYSkpO2JyZWFrO2RlZmF1bHQ6e2NvbnN0IEQ9J1Rva2VuIHdpdGggIicrZi50eXBlKyciIHR5cGUgd2FzIG5vdCBmb3VuZC4nO2lm''@;'; put 'put ''KHRoaXMub3B0aW9ucy5zaWxlbnQpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcihEKTt0aHJvdyBuZXcgRXJyb3IoRCl9fXJldHVybiBkfX1jbGFzcyB1Tntjb25zdHJ1Y3RvcihsKXt0aGlzLm9wdGlvbnM9bHx8UzZ9c3RhdGljIHBhc3NUaHJvdWdoSG9va3M9bmV3IFNldChbInByZXByb2Nl''@;'; put 'put ''c3MiLCJwb3N0cHJvY2VzcyJdKTtwcmVwcm9jZXNzKGwpe3JldHVybiBsfXBvc3Rwcm9jZXNzKGwpe3JldHVybiBsfX1jb25zdCBLOT1uZXcgY2xhc3MgUGJ0e2RlZmF1bHRzPXthc3luYzohMSxiYXNlVXJsOm51bGwsYnJlYWtzOiExLGV4dGVuc2lvbnM6bnVsbCxnZm06ITAsaGVhZGVySWRz''@;'; put 'put ''OiEwLGhlYWRlclByZWZpeDoiIixoaWdobGlnaHQ6bnVsbCxob29rczpudWxsLGxhbmdQcmVmaXg6Imxhbmd1YWdlLSIsbWFuZ2xlOiEwLHBlZGFudGljOiExLHJlbmRlcmVyOm51bGwsc2FuaXRpemU6ITEsc2FuaXRpemVyOm51bGwsc2lsZW50OiExLHNtYXJ0eXBhbnRzOiExLHRva2VuaXpl''@;'; put 'put ''cjpudWxsLHdhbGtUb2tlbnM6bnVsbCx4aHRtbDohMX07b3B0aW9ucz10aGlzLnNldE9wdGlvbnM7cGFyc2U9dGhpcy4jZShhNC5sZXgsbzQucGFyc2UpO3BhcnNlSW5saW5lPXRoaXMuI2UoYTQubGV4SW5saW5lLG80LnBhcnNlSW5saW5lKTtQYXJzZXI9bzQ7cGFyc2VyPW80LnBhcnNlO1Jl''@;'; put 'put ''bmRlcmVyPWNOO1RleHRSZW5kZXJlcj1ydGU7TGV4ZXI9YTQ7bGV4ZXI9YTQubGV4O1Rva2VuaXplcj1sTjtTbHVnZ2VyPWl0ZTtIb29rcz11Tjtjb25zdHJ1Y3RvciguLi5sKXt0aGlzLnVzZSguLi5sKX13YWxrVG9rZW5zKGwsYSl7bGV0IGQ9W107Zm9yKGNvbnN0IGggb2YgbClzd2l0Y2go''@;'; put 'put ''ZD1kLmNvbmNhdChhLmNhbGwodGhpcyxoKSksaC50eXBlKXtjYXNlInRhYmxlIjpmb3IoY29uc3QgZiBvZiBoLmhlYWRlcilkPWQuY29uY2F0KHRoaXMud2Fsa1Rva2VucyhmLnRva2VucyxhKSk7Zm9yKGNvbnN0IGYgb2YgaC5yb3dzKWZvcihjb25zdCB2IG9mIGYpZD1kLmNvbmNhdCh0aGlz''@;'; put 'put ''LndhbGtUb2tlbnModi50b2tlbnMsYSkpO2JyZWFrO2Nhc2UibGlzdCI6ZD1kLmNvbmNhdCh0aGlzLndhbGtUb2tlbnMoaC5pdGVtcyxhKSk7YnJlYWs7ZGVmYXVsdDp0aGlzLmRlZmF1bHRzLmV4dGVuc2lvbnMmJnRoaXMuZGVmYXVsdHMuZXh0ZW5zaW9ucy5jaGlsZFRva2VucyYmdGhpcy5k''@;'; put 'put ''ZWZhdWx0cy5leHRlbnNpb25zLmNoaWxkVG9rZW5zW2gudHlwZV0/dGhpcy5kZWZhdWx0cy5leHRlbnNpb25zLmNoaWxkVG9rZW5zW2gudHlwZV0uZm9yRWFjaChmPT57ZD1kLmNvbmNhdCh0aGlzLndhbGtUb2tlbnMoaFtmXSxhKSl9KTpoLnRva2VucyYmKGQ9ZC5jb25jYXQodGhpcy53YWxr''@;'; put 'put ''VG9rZW5zKGgudG9rZW5zLGEpKSl9cmV0dXJuIGR9dXNlKC4uLmwpe2NvbnN0IGE9dGhpcy5kZWZhdWx0cy5leHRlbnNpb25zfHx7cmVuZGVyZXJzOnt9LGNoaWxkVG9rZW5zOnt9fTtyZXR1cm4gbC5mb3JFYWNoKGQ9Pntjb25zdCBoPXsuLi5kfTtpZihoLmFzeW5jPXRoaXMuZGVmYXVsdHMu''@;'; put 'put ''YXN5bmN8fGguYXN5bmN8fCExLGQuZXh0ZW5zaW9ucyYmKGQuZXh0ZW5zaW9ucy5mb3JFYWNoKGY9PntpZighZi5uYW1lKXRocm93IG5ldyBFcnJvcigiZXh0ZW5zaW9uIG5hbWUgcmVxdWlyZWQiKTtpZihmLnJlbmRlcmVyKXtjb25zdCB2PWEucmVuZGVyZXJzW2YubmFtZV07YS5yZW5kZXJl''@;'; put 'put ''cnNbZi5uYW1lXT12P2Z1bmN0aW9uKC4uLk0pe2xldCBEPWYucmVuZGVyZXIuYXBwbHkodGhpcyxNKTtyZXR1cm4hMT09PUQmJihEPXYuYXBwbHkodGhpcyxNKSksRH06Zi5yZW5kZXJlcn1pZihmLnRva2VuaXplcil7aWYoIWYubGV2ZWx8fCJibG9jayIhPT1mLmxldmVsJiYiaW5saW5lIiE9''@;'; put 'put ''PWYubGV2ZWwpdGhyb3cgbmV3IEVycm9yKCJleHRlbnNpb24gbGV2ZWwgbXVzdCBiZSAnYmxvY2snIG9yICdpbmxpbmUnIik7YVtmLmxldmVsXT9hW2YubGV2ZWxdLnVuc2hpZnQoZi50b2tlbml6ZXIpOmFbZi5sZXZlbF09W2YudG9rZW5pemVyXSxmLnN0YXJ0JiYoImJsb2NrIj09PWYubGV2''@;'; put 'put ''ZWw/YS5zdGFydEJsb2NrP2Euc3RhcnRCbG9jay5wdXNoKGYuc3RhcnQpOmEuc3RhcnRCbG9jaz1bZi5zdGFydF06ImlubGluZSI9PT1mLmxldmVsJiYoYS5zdGFydElubGluZT9hLnN0YXJ0SW5saW5lLnB1c2goZi5zdGFydCk6YS5zdGFydElubGluZT1bZi5zdGFydF0pKX1mLmNoaWxkVG9r''@;'; put 'put ''ZW5zJiYoYS5jaGlsZFRva2Vuc1tmLm5hbWVdPWYuY2hpbGRUb2tlbnMpfSksaC5leHRlbnNpb25zPWEpLGQucmVuZGVyZXIpe2NvbnN0IGY9dGhpcy5kZWZhdWx0cy5yZW5kZXJlcnx8bmV3IGNOKHRoaXMuZGVmYXVsdHMpO2Zvcihjb25zdCB2IGluIGQucmVuZGVyZXIpe2NvbnN0IE09Zlt2''@;'; put 'put ''XTtmW3ZdPSguLi5EKT0+e2xldCBaPWQucmVuZGVyZXJbdl0uYXBwbHkoZixEKTtyZXR1cm4hMT09PVomJihaPU0uYXBwbHkoZixEKSksWn19aC5yZW5kZXJlcj1mfWlmKGQudG9rZW5pemVyKXtjb25zdCBmPXRoaXMuZGVmYXVsdHMudG9rZW5pemVyfHxuZXcgbE4odGhpcy5kZWZhdWx0cyk7''@;'; put 'put ''Zm9yKGNvbnN0IHYgaW4gZC50b2tlbml6ZXIpe2NvbnN0IE09Zlt2XTtmW3ZdPSguLi5EKT0+e2xldCBaPWQudG9rZW5pemVyW3ZdLmFwcGx5KGYsRCk7cmV0dXJuITE9PT1aJiYoWj1NLmFwcGx5KGYsRCkpLFp9fWgudG9rZW5pemVyPWZ9aWYoZC5ob29rcyl7Y29uc3QgZj10aGlzLmRlZmF1''@;'; put 'put ''bHRzLmhvb2tzfHxuZXcgdU47Zm9yKGNvbnN0IHYgaW4gZC5ob29rcyl7Y29uc3QgTT1mW3ZdO2Zbdl09dU4ucGFzc1Rocm91Z2hIb29rcy5oYXModik/RD0+e2lmKHRoaXMuZGVmYXVsdHMuYXN5bmMpcmV0dXJuIFByb21pc2UucmVzb2x2ZShkLmhvb2tzW3ZdLmNhbGwoZixEKSkudGhlbihy''@;'; put 'put ''ZT0+TS5jYWxsKGYscmUpKTtjb25zdCBaPWQuaG9va3Nbdl0uY2FsbChmLEQpO3JldHVybiBNLmNhbGwoZixaKX06KC4uLkQpPT57bGV0IFo9ZC5ob29rc1t2XS5hcHBseShmLEQpO3JldHVybiExPT09WiYmKFo9TS5hcHBseShmLEQpKSxafX1oLmhvb2tzPWZ9aWYoZC53YWxrVG9rZW5zKXtj''@;'; put 'put ''b25zdCBmPXRoaXMuZGVmYXVsdHMud2Fsa1Rva2VucztoLndhbGtUb2tlbnM9ZnVuY3Rpb24odil7bGV0IE09W107cmV0dXJuIE0ucHVzaChkLndhbGtUb2tlbnMuY2FsbCh0aGlzLHYpKSxmJiYoTT1NLmNvbmNhdChmLmNhbGwodGhpcyx2KSkpLE19fXRoaXMuZGVmYXVsdHM9ey4uLnRoaXMu''@;'; put 'put ''ZGVmYXVsdHMsLi4uaH19KSx0aGlzfXNldE9wdGlvbnMobCl7cmV0dXJuIHRoaXMuZGVmYXVsdHM9ey4uLnRoaXMuZGVmYXVsdHMsLi4ubH0sdGhpc30jZShsLGEpe3JldHVybihkLGgsZik9PnsiZnVuY3Rpb24iPT10eXBlb2YgaCYmKGY9aCxoPW51bGwpO2NvbnN0IHY9ey4uLmh9O2g9ey4u''@;'; put 'put ''LnRoaXMuZGVmYXVsdHMsLi4udn07Y29uc3QgTT10aGlzLiN0KGguc2lsZW50LGguYXN5bmMsZik7aWYodHlwZW9mIGQ+InUifHxudWxsPT09ZClyZXR1cm4gTShuZXcgRXJyb3IoIm1hcmtlZCgpOiBpbnB1dCBwYXJhbWV0ZXIgaXMgdW5kZWZpbmVkIG9yIG51bGwiKSk7aWYoInN0cmluZyIh''@;'; put 'put ''PXR5cGVvZiBkKXJldHVybiBNKG5ldyBFcnJvcigibWFya2VkKCk6IGlucHV0IHBhcmFtZXRlciBpcyBvZiB0eXBlICIrT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGQpKyIsIHN0cmluZyBleHBlY3RlZCIpKTtpZihmdW5jdGlvbiBSYnQoYyxsKXshY3x8Yy5zaWxlbnR8fChsJiZj''@;'; put 'put ''b25zb2xlLndhcm4oIm1hcmtlZCgpOiBjYWxsYmFjayBpcyBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gNS4wLjAsIHNob3VsZCBub3QgYmUgdXNlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuIFJlYWQgbW9yZSBoZXJlOiBodHRwczovL21hcmtlZC5qcy5vcmcvdXNpbmdf''@;'; put 'put ''cHJvI2FzeW5jIiksKGMuc2FuaXRpemV8fGMuc2FuaXRpemVyKSYmY29uc29sZS53YXJuKCJtYXJrZWQoKTogc2FuaXRpemUgYW5kIHNhbml0aXplciBwYXJhbWV0ZXJzIGFyZSBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMC43LjAsIHNob3VsZCBub3QgYmUgdXNlZCBhbmQgd2lsbCBiZSBy''@;'; put 'put ''ZW1vdmVkIGluIHRoZSBmdXR1cmUuIFJlYWQgbW9yZSBoZXJlOiBodHRwczovL21hcmtlZC5qcy5vcmcvIy9VU0lOR19BRFZBTkNFRC5tZCNvcHRpb25zIiksKGMuaGlnaGxpZ2h0fHwibGFuZ3VhZ2UtIiE9PWMubGFuZ1ByZWZpeCkmJmNvbnNvbGUud2FybigibWFya2VkKCk6IGhpZ2hsaWdo''@;'; put 'put ''dCBhbmQgbGFuZ1ByZWZpeCBwYXJhbWV0ZXJzIGFyZSBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gNS4wLjAsIHNob3VsZCBub3QgYmUgdXNlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuIEluc3RlYWQgdXNlIGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL21hcmtl''@;'; put 'put ''ZC1oaWdobGlnaHQuIiksYy5tYW5nbGUmJmNvbnNvbGUud2FybigibWFya2VkKCk6IG1hbmdsZSBwYXJhbWV0ZXIgaXMgZW5hYmxlZCBieSBkZWZhdWx0LCBidXQgaXMgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDUuMC4wLCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuIFRv''@;'; put 'put ''IGNsZWFyIHRoaXMgd2FybmluZywgaW5zdGFsbCBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9tYXJrZWQtbWFuZ2xlLCBvciBkaXNhYmxlIGJ5IHNldHRpbmcgYHttYW5nbGU6IGZhbHNlfWAuIiksYy5iYXNlVXJsJiZjb25zb2xlLndhcm4oIm1hcmtlZCgpOiBiYXNlVXJsIHBhcmFt''@;'; put 'put ''ZXRlciBpcyBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gNS4wLjAsIHNob3VsZCBub3QgYmUgdXNlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuIEluc3RlYWQgdXNlIGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL21hcmtlZC1iYXNlLXVybC4iKSxjLnNtYXJ0eXBh''@;'; put 'put ''bnRzJiZjb25zb2xlLndhcm4oIm1hcmtlZCgpOiBzbWFydHlwYW50cyBwYXJhbWV0ZXIgaXMgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDUuMC4wLCBzaG91bGQgbm90IGJlIHVzZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLiBJbnN0ZWFkIHVzZSBodHRwczovL3d3dy5u''@;'; put 'put ''cG1qcy5jb20vcGFja2FnZS9tYXJrZWQtc21hcnR5cGFudHMuIiksYy54aHRtbCYmY29uc29sZS53YXJuKCJtYXJrZWQoKTogeGh0bWwgcGFyYW1ldGVyIGlzIGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiA1LjAuMCwgc2hvdWxkIG5vdCBiZSB1c2VkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4g''@;'; put 'put ''dGhlIGZ1dHVyZS4gSW5zdGVhZCB1c2UgaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvbWFya2VkLXhodG1sLiIpLChjLmhlYWRlcklkc3x8Yy5oZWFkZXJQcmVmaXgpJiZjb25zb2xlLndhcm4oIm1hcmtlZCgpOiBoZWFkZXJJZHMgYW5kIGhlYWRlclByZWZpeCBwYXJhbWV0ZXJzIGVu''@;'; put 'put ''YWJsZWQgYnkgZGVmYXVsdCwgYnV0IGFyZSBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gNS4wLjAsIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZS4gVG8gY2xlYXIgdGhpcyB3YXJuaW5nLCBpbnN0YWxsICBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9tYXJrZWQtZ2Zt''@;'; put 'put ''LWhlYWRpbmctaWQsIG9yIGRpc2FibGUgYnkgc2V0dGluZyBge2hlYWRlcklkczogZmFsc2V9YC4iKSl9KGgsZiksaC5ob29rcyYmKGguaG9va3Mub3B0aW9ucz1oKSxmKXtjb25zdCBEPWguaGlnaGxpZ2h0O2xldCBaO3RyeXtoLmhvb2tzJiYoZD1oLmhvb2tzLnByZXByb2Nlc3MoZCkpLFo9''@;'; put 'put ''bChkLGgpfWNhdGNoKGJlKXtyZXR1cm4gTShiZSl9Y29uc3QgcmU9YmU9PntsZXQgRWU7aWYoIWJlKXRyeXtoLndhbGtUb2tlbnMmJnRoaXMud2Fsa1Rva2VucyhaLGgud2Fsa1Rva2VucyksRWU9YShaLGgpLGguaG9va3MmJihFZT1oLmhvb2tzLnBvc3Rwcm9jZXNzKEVlKSl9Y2F0Y2goQmUp''@;'; put 'put ''e2JlPUJlfXJldHVybiBoLmhpZ2hsaWdodD1ELGJlP00oYmUpOmYobnVsbCxFZSl9O2lmKCFEfHxELmxlbmd0aDwzfHwoZGVsZXRlIGguaGlnaGxpZ2h0LCFaLmxlbmd0aCkpcmV0dXJuIHJlKCk7bGV0IGNlPTA7cmV0dXJuIHRoaXMud2Fsa1Rva2VucyhaLGJlPT57ImNvZGUiPT09YmUudHlw''@;'; put 'put ''ZSYmKGNlKyssc2V0VGltZW91dCgoKT0+e0QoYmUudGV4dCxiZS5sYW5nLChFZSxCZSk9PntpZihFZSlyZXR1cm4gcmUoRWUpO251bGwhPUJlJiZCZSE9PWJlLnRleHQmJihiZS50ZXh0PUJlLGJlLmVzY2FwZWQ9ITApLGNlLS0sMD09PWNlJiZyZSgpfSl9LDApKX0pLHZvaWQoMD09PWNlJiZy''@;'; put 'put ''ZSgpKX1pZihoLmFzeW5jKXJldHVybiBQcm9taXNlLnJlc29sdmUoaC5ob29rcz9oLmhvb2tzLnByZXByb2Nlc3MoZCk6ZCkudGhlbihEPT5sKEQsaCkpLnRoZW4oRD0+aC53YWxrVG9rZW5zP1Byb21pc2UuYWxsKHRoaXMud2Fsa1Rva2VucyhELGgud2Fsa1Rva2VucykpLnRoZW4oKCk9PkQp''@;'; put 'put ''OkQpLnRoZW4oRD0+YShELGgpKS50aGVuKEQ9PmguaG9va3M/aC5ob29rcy5wb3N0cHJvY2VzcyhEKTpEKS5jYXRjaChNKTt0cnl7aC5ob29rcyYmKGQ9aC5ob29rcy5wcmVwcm9jZXNzKGQpKTtjb25zdCBEPWwoZCxoKTtoLndhbGtUb2tlbnMmJnRoaXMud2Fsa1Rva2VucyhELGgud2Fsa1Rv''@;'; put 'put ''a2Vucyk7bGV0IFo9YShELGgpO3JldHVybiBoLmhvb2tzJiYoWj1oLmhvb2tzLnBvc3Rwcm9jZXNzKFopKSxafWNhdGNoKEQpe3JldHVybiBNKEQpfX19I3QobCxhLGQpe3JldHVybiBoPT57aWYoaC5tZXNzYWdlKz0iXG5QbGVhc2UgcmVwb3J0IHRoaXMgdG8gaHR0cHM6Ly9naXRodWIuY29t''@;'; put 'put ''L21hcmtlZGpzL21hcmtlZC4iLGwpe2NvbnN0IGY9IjxwPkFuIGVycm9yIG9jY3VycmVkOjwvcD48cHJlPiIreDEoaC5tZXNzYWdlKyIiLCEwKSsiPC9wcmU+IjtyZXR1cm4gYT9Qcm9taXNlLnJlc29sdmUoZik6ZD92b2lkIGQobnVsbCxmKTpmfWlmKGEpcmV0dXJuIFByb21pc2UucmVqZWN0''@;'; put 'put ''KGgpO2lmKCFkKXRocm93IGg7ZChoKX19fShTNik7ZnVuY3Rpb24gUmwoYyxsLGEpe3JldHVybiBLOS5wYXJzZShjLGwsYSl9Umwub3B0aW9ucz1SbC5zZXRPcHRpb25zPWZ1bmN0aW9uKGMpe3JldHVybiBLOS5zZXRPcHRpb25zKGMpLGo2ZShSbC5kZWZhdWx0cz1LOS5kZWZhdWx0cyksUmx9''@;'; put 'put ''LFJsLmdldERlZmF1bHRzPWZ1bmN0aW9uIG50ZSgpe3JldHVybnthc3luYzohMSxiYXNlVXJsOm51bGwsYnJlYWtzOiExLGV4dGVuc2lvbnM6bnVsbCxnZm06ITAsaGVhZGVySWRzOiEwLGhlYWRlclByZWZpeDoiIixoaWdobGlnaHQ6bnVsbCxob29rczpudWxsLGxhbmdQcmVmaXg6Imxhbmd1''@;'; put 'put ''YWdlLSIsbWFuZ2xlOiEwLHBlZGFudGljOiExLHJlbmRlcmVyOm51bGwsc2FuaXRpemU6ITEsc2FuaXRpemVyOm51bGwsc2lsZW50OiExLHNtYXJ0eXBhbnRzOiExLHRva2VuaXplcjpudWxsLHdhbGtUb2tlbnM6bnVsbCx4aHRtbDohMX19LFJsLmRlZmF1bHRzPVM2LFJsLnVzZT1mdW5jdGlv''@;'; put 'put ''biguLi5jKXtyZXR1cm4gSzkudXNlKC4uLmMpLGo2ZShSbC5kZWZhdWx0cz1LOS5kZWZhdWx0cyksUmx9LFJsLndhbGtUb2tlbnM9ZnVuY3Rpb24oYyxsKXtyZXR1cm4gSzkud2Fsa1Rva2VucyhjLGwpfSxSbC5wYXJzZUlubGluZT1LOS5wYXJzZUlubGluZSxSbC5QYXJzZXI9bzQsUmwucGFy''@;'; put 'put ''c2VyPW80LnBhcnNlLFJsLlJlbmRlcmVyPWNOLFJsLlRleHRSZW5kZXJlcj1ydGUsUmwuTGV4ZXI9YTQsUmwubGV4ZXI9YTQubGV4LFJsLlRva2VuaXplcj1sTixSbC5TbHVnZ2VyPWl0ZSxSbC5Ib29rcz11TixSbC5wYXJzZT1SbDtjb25zdCBIYnQ9WyJtYXJrZG93bkNhcmQiXTtmdW5jdGlv''@;'; put 'put ''biBOYnQoYyxsKXsxJmMmJkd0KDAsImNsci1zcGlubmVyIiw4KX1sZXQgVmJ0PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5zYXNTZXJ2aWNlPWEsdGhpcy5hZ3JlZUNoZWNrZWQ9ITEsdGhpcy5hZ3JlZUJveExvY2tlZD0hMCx0aGlzLmFncmVlQ2xpY2tlZD0hMSx0aGlzLmV1''@;'; put 'put ''bGFfbWFya2Rvd249J1xuTGljZW5jZSBBZ3JlZW1lbnQgZm9yIERhdGEgQ29udHJvbGxlciBmb3IgU0FTXHhhZVxuPT09PT09PT09PT09PT09PT09PT1cblxuQ29weXJpZ2h0IChjKSBCb3dlIElPIEx0ZFxuXG5EYXRhIENvbnRyb2xsZXIgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgYnkgNEdM''@;'; put 'put ''IEFwcHMsIGEgYnJhbmQgb3duZWQgYnkgQm93ZSBJTyBMdGQsIGEgVUsgTGltaXRlZCBDb21wYW55IGhlYWRxdWFydGVkIGluIDI5IE9sZGZpZWxkIFJkLCBDdW1icmlhLCByZWdpc3RlcmVkIGF0IENvbXBhbmllcyBIb3VzZSB3aXRoIGNvbXBhbnkgbnVtYmVyIDA4Nzc3MTcxLCBWQVQgbnVt''@;'; put 'put ''YmVyOiAyMDM5MTQyNDBcblxuVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgYXBwbGljYWJsZSBjb3B5cmlnaHQgbGF3cywgaW5jbHVkaW5nIGludGVybmF0aW9uYWwgdHJlYXRpZXMsIGFuZCBkdWFsLWxpY2Vuc2VkIFx1MjAxMyBkZXBlbmRpbmcgb24gd2hldGhlciB5b3VyIHVzZSBm''@;'; put 'put ''b3IgY29tbWVyY2lhbCBwdXJwb3NlcywgbWVhbmluZyBpbnRlbmRlZCBmb3Igb3IgcmVzdWx0aW5nIGluIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbiwgb3Igbm90LlxuXG5JZiB5b3VyIHVzZSBpcyBzdHJpY3RseSBwZXJzb25hbCBvciBzb2xlbHkgZm9y''@;'; put 'put ''IGV2YWx1YXRpb24gcHVycG9zZXMsIG1lYW5pbmcgZm9yIHRoZSBwdXJwb3NlcyBvZiB0ZXN0aW5nIHRoZSBzdWl0YWJpbGl0eSwgcGVyZm9ybWFuY2UsIGFuZCB1c2VmdWxuZXNzIG9mIHRoaXMgc29mdHdhcmUgb3V0c2lkZSB0aGUgcHJvZHVjdGlvbiBlbnZpcm9ubWVudCwgeW91IGFncmVl''@;'; put 'put ''IHRvIGJlIGJvdW5kIGJ5IHRoZSB0ZXJtcyBpbmNsdWRlZCBpbiB0aGUgImxpY2VuY2Utbm9uLWNvbW1lcmNpYWwtZGF0YWNvbnRyb2xsZXIubWQiIGZpbGUgYXZhaWxhYmxlIGhlcmU6ICBodHRwczovL2dpdC5kYXRhY29udHJvbGxlci5pby9kYy9kYy9zcmMvYnJhbmNoL21haW4vbGljZW5j''@;'; put 'put ''ZS1ub24tY29tbWVyY2lhbC1kYXRhY29udHJvbGxlci5tZFxuXG5Zb3VyIHVzZSBvZiB0aGlzIHNvZnR3YXJlIGZvciBjb21tZXJjaWFsIHB1cnBvc2VzIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGluY2x1ZGVkIGluIGFuIGFwcGxpY2FibGUgbGljZW5zZSBhZ3JlZW1lbnQuXG5cbkluIGFu''@;'; put 'put ''eSBjYXNlLCB5b3UgbXVzdCBub3QgbWFrZSBhbnkgc3VjaCB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSBhcyB0byBkZXZlbG9wIHNvZnR3YXJlIHdoaWNoIG1heSBiZSBjb25zaWRlcmVkIGNvbXBldGl0aXZlIHdpdGggdGhpcyBzb2Z0d2FyZS5cblxuVU5MRVNTIEVYUFJFU1NMWSBBR1JFRUQgT1RI''@;'; put 'put ''RVJXSVNFLCA0R0wgQVBQUyBQUk9WSURFUyBUSElTIFNPRlRXQVJFIE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBBTkQgSU4gTk8gRVZFTlQgQU5EIFVOREVSIE5PIExFR0FMIFRIRU9SWSwgU0hBTEwgNEdMIEFQUFMg''@;'; put 'put ''QkUgTElBQkxFIFRPIFlPVSBGT1IgREFNQUdFUywgSU5DTFVESU5HIEFOWSBESVJFQ1QsIElORElSRUNULCBTUEVDSUFMLCBJTkNJREVOVEFMLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT0YgQU5ZIENIQVJBQ1RFUiBBUklTSU5HIEZST00gVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhJ''@;'; put 'put ''UyBTT0ZUV0FSRS5cblxuXG4nfW5nT25Jbml0KCl7Y29uc3QgYT1SbC5zZXRPcHRpb25zKHt9KTt0aGlzLmV1bGFfbWFya2Rvd249YS5wYXJzZSh0aGlzLmV1bGFfbWFya2Rvd24pfW5nQWZ0ZXJWaWV3SW5pdCgpe3NldFRpbWVvdXQoKCk9Pnt0aGlzLm1hcmtkb3duQ2FyZCYmdGhpcy5tYXJr''@;'; put 'put ''ZG93bkNhcmQubmF0aXZlRWxlbWVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgic2Nyb2xsIikpfSl9dGVybXNBZ3JlZUNoYW5nZSgpe3RoaXMuYWdyZWVDaGVja2VkJiYodGhpcy5hZ3JlZUJveExvY2tlZD0hMCx0aGlzLmFncmVlQ2xpY2tlZD0hMCx0aGlzLnNhc1NlcnZpY2Uu''@;'; put 'put ''cmVxdWVzdCgicHVibGljL3JlZ2lzdGVydXNlciIse1NBU0NvbnRyb2xUYWJsZTpbe0FDQ0VQVEVEOiJ5ZXMifV19KS50aGVuKGQ9PntkLmFkYXB0ZXJSZXNwb25zZS5yZXR1cm4mJmQuYWRhcHRlclJlc3BvbnNlLnJldHVyblswXSYmIlNVQ0NFU1MiPT09ZC5hZGFwdGVyUmVzcG9uc2UucmV0''@;'; put 'put ''dXJuWzBdLk1TRyYmbG9jYXRpb24ucmVsb2FkKCl9KS5jYXRjaChkPT5kKS5maW5hbGx5KCgpPT57c2V0VGltZW91dCgoKT0+e3RoaXMuYWdyZWVCb3hMb2NrZWQ9ITEsdGhpcy5hZ3JlZUNsaWNrZWQ9ITEsdGhpcy5hZ3JlZUNoZWNrZWQ9ITF9LDFlMyl9KSl9b25DYXJkQmxvY2tTY3JvbGwo''@;'; put 'put ''YSl7aWYoIXRoaXMuYWdyZWVDbGlja2VkKXtsZXQgZD1hLnRhcmdldDtkJiYodGhpcy5hZ3JlZUJveExvY2tlZD0hKGQuc2Nyb2xsVG9wK2Qub2Zmc2V0SGVpZ2h0Pj1kLnNjcm9sbEhlaWdodC0yMCkpfX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxj''@;'; put 'put ''KShHZShHcykpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLXRlcm1zIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihkLGgpe2lmKDEmZCYmcWEoSGJ0LDUpLDImZCl7bGV0IGY7Q2koZj1TaSgpKSYmKGgubWFya2Rvd25DYXJkPWYuZmlyc3QpfX0sZGVj''@;'; put 'put ''bHM6MTMsdmFyczo2LGNvbnN0czpbWyJtYXJrZG93bkNhcmQiLCIiXSxbMSwiY2FyZCJdLFsxLCJjYXJkLWhlYWRlciJdLFsxLCJjYXJkLWJsb2NrIiwzLCJzY3JvbGwiLCJpbm5lckhUTUwiXSxbMSwiZC1mbGV4IiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciJdLFsxLCJhY2NlcHQtY2hlY2ti''@;'; put 'put ''b3giXSxbImNsckNoZWNrYm94IiwiIiwidHlwZSIsImNoZWNrYm94IiwzLCJuZ01vZGVsQ2hhbmdlIiwiY2hhbmdlIiwibmdNb2RlbCIsImRpc2FibGVkIl0sWyJjbHJJbmxpbmUiLCJzbWFsbCIsNCwibmdJZiJdLFsiY2xySW5saW5lIiwic21hbGwiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxo''@;'; put 'put ''KXtpZigxJmQpe2NvbnN0IGY9TG4oKTtkZSgwLCJkaXYiLDEpKDEsImRpdiIsMiksTGUoMiwiIEVuZCBVc2VyIExpY2Vuc2UgQWdyZWVtZW50ICIpLGRlKDMsInAiKSxMZSg0LCIgV2VsY29tZSB0byBEYXRhIENvbnRyb2xsZXIgZm9yIFNBUyEgUGxlYXNlIHJldmlldyBhbmQgYWNjZXB0IGFn''@;'; put 'put ''cmVlbWVudCBiZWxvdyBpbiBvcmRlciB0byBwcm9jZWVkLiAiKSxoZSgpKCksZGUoNSwiZGl2IiwzLDApLEZ0KCJzY3JvbGwiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxDdChoLm9uQ2FyZEJsb2NrU2Nyb2xsKE0pKX0pLGhlKCksZGUoNywiZGl2Iiw0KSg4LCJjbHItY2hlY2tib3gtd3Jh''@;'; put 'put ''cHBlciIsNSkoOSwiaW5wdXQiLDYpLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksbWkoaC5hZ3JlZUNoZWNrZWQsTSl8fChoLmFncmVlQ2hlY2tlZD1NKSxDdChNKX0pLEZ0KCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLEN0KGgudGVybXNBZ3Jl''@;'; put 'put ''ZUNoYW5nZSgpKX0pLGhlKCksZGUoMTAsImxhYmVsIiksTGUoMTEsIkkgaGF2ZSByZWFkIGFuZCBhZ3JlZSB0byB0aGUgdGVybXMgb2YgYWJvdmUuIiksaGUoKSgpLGd0KDEyLE5idCwxLDAsImNsci1zcGlubmVyIiw3KSxoZSgpKCl9MiZkJiYoZmUoNSksTWUoImlubmVySFRNTCIsaC5ldWxh''@;'; put 'put ''X21hcmtkb3duLFY0KSxmZSgzKSxUcigiZGlzYWJsZWQiLGguYWdyZWVCb3hMb2NrZWQpLGZlKCkscGkoIm5nTW9kZWwiLGguYWdyZWVDaGVja2VkKSxNZSgiZGlzYWJsZWQiLGguYWdyZWVCb3hMb2NrZWQpLGZlKDMpLE1lKCJuZ0lmIixoLmFncmVlQm94TG9ja2VkJiZoLmFncmVlQ2xpY2tl''@;'; put 'put ''ZCkpfSxkZXBlbmRlbmNpZXM6W2JhLE1kLG5sLCRzLGRzLElkLFNoLFJkXSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIEJidChjLGwpezEmYyYmKGRlKDAsInAiLDI5KSxMZSgxLCIgTGljZW5jZSBrZXkgaXMgaW52YWxpZC4gV2UgY2FuJ3QgcHJvdmlkZSB5b3Ug''@;'; put 'put ''bW9yZSBkZXRhaWxzIGF0IHRoZSBtb21lbnQgIiksaGUoKSl9ZnVuY3Rpb24gamJ0KGMsbCl7aWYoMSZjJiZHdCgwLCJwIiwzMCksMiZjKXtjb25zdCBhPVJlKDMpO01lKCJpbm5lckhUTUwiLGEubGljZW5zZUVycm9yc1thLmtleUVycm9yXSxWNCl9fWZ1bmN0aW9uIHpidChjLGwpe2lmKDEm''@;'; put 'put ''YyYmKGRlKDAsInAiKSgxLCJzdHJvbmciKSxMZSgyLCJEZXRhaWxzOiIpLGhlKCksTGUoMyksaGUoKSksMiZjKXtjb25zdCBhPVJlKDMpO2ZlKDMpLElyKCIgIixhLmVycm9yRGV0YWlscywiIil9fWZ1bmN0aW9uIFVidChjLGwpe2lmKDEmYyYmKHNpKDApLGd0KDEsQmJ0LDIsMCwicCIsMjcp''@;'; put 'put ''KDIsamJ0LDEsMSwicCIsMjgpKDMsemJ0LDQsMSwicCIsNCksbGkoKSksMiZjKXtjb25zdCBhPVJlKDIpO2ZlKCksTWUoIm5nSWYiLCFhLmtleUVycm9yKSxmZSgpLE1lKCJuZ0lmIixhLmtleUVycm9yKSxmZSgpLE1lKCJuZ0lmIixhLmVycm9yRGV0YWlscyl9fWZ1bmN0aW9uIFpidChjLGwp''@;'; put 'put ''ezEmYyYmKHNpKDApLGRlKDEsInAiLDI5KSxMZSgyLCIgVGhlIHJlZ2lzdGVyZWQgbnVtYmVyIG9mIHVzZXJzIHJlYWNoZWQgdGhlIGxpbWl0IHNwZWNpZmllZCBmb3IgeW91ciBsaWNlbmNlLiBQbGVhc2UgY29udGFjdCAiKSxHdCgzLCJjb250YWN0LWxpbmsiLDMxKSxMZSg0LCIgb3IgeW91''@;'; put 'put ''ciByZXNlbGxlciB0byBhcnJhbmdlIGFkZGl0aW9uYWwgbGljZW5jZXMgZm9yIHRoaXMgcHJvZHVjdC4gIiksaGUoKSxsaSgpKX1mdW5jdGlvbiBXYnQoYyxsKXsxJmMmJihzaSgwKSxkZSgxLCJwIiwyOSksTGUoMiwiIFVwZGF0ZSB0aGUgbGljZW5zZSBrZXkgYnkgdXBsb2FkaW5nIHRoZSBs''@;'; put 'put ''aWNlbmNlIGZpbGUgb3IgYnkgcGFzdGluZyBhIGxpY2Vuc2Uga2V5IGFuZCBhY3RpdmF0aW9uIGtleSBpbiB0aGUgaW5wdXRzIGJlbG93LiAiKSxoZSgpLGxpKCkpfWZ1bmN0aW9uIFlidChjLGwpe2lmKDEmYyYmKGRlKDAsInNwYW4iKSxMZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1w''@;'; put 'put ''bGljaXQsZD1sLmluZGV4LGg9UmUoMik7VHIoIm1pc3NrZXkiLGgubWlzc21hdGNoZWRLZXkmJmgubWlzc21hdGNoZWRLZXk9PT1hKSxmZSgpLFV1KCIgIixhLCIiLGQ9PT0obnVsbD09aC5zeXNzaXRlLnZhbHVlP251bGw6aC5zeXNzaXRlLnZhbHVlLmxlbmd0aCktMT8iIjoiLCIsIiAiKX19''@;'; put 'put ''ZnVuY3Rpb24gR2J0KGMsbCl7aWYoMSZjJiYoZGUoMCwicCIsMzIpKDEsInN0cm9uZyIpLExlKDIsIkFsbG93ZWQgdXNlcnM6IiksaGUoKSxMZSgzKSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoMik7ZmUoMyksSXIoIiAiLGEubGljZW5zZUtleURhdGEudXNlcnNfYWxsb3dlZCwiICIpfX1mdW5j''@;'; put 'put ''dGlvbiAkYnQoYyxsKXsxJmMmJkd0KDAsImNsci1zcGlubmVyIiwzMyl9ZnVuY3Rpb24gS2J0KGMsbCl7MSZjJiYoZGUoMCwiZGl2IiksTGUoMSwiIERyb3AgLyBCcm93c2UgbGljZW5jZSBmaWxlICIpLGhlKCkpfWZ1bmN0aW9uIHFidChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIpLExlKDEs''@;'; put 'put ''IiBTZWxlY3RlZCBmaWxlOiAiKSxkZSgyLCJzdHJvbmciKSxMZSgzKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1SZSgzKTtmZSgzKSx3cihhLmxpY2VuY2VmaWxlLmZpbGVuYW1lKX19ZnVuY3Rpb24gWGJ0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IikoMSwic3Ryb25nIiksTGUoMiksaGUoKSgp''@;'; put 'put ''KSwyJmMpe2NvbnN0IGE9UmUoMyk7ZmUoMiksd3IoYS5saWNlbmNlRmlsZUVycm9yKX19ZnVuY3Rpb24gSmJ0KGMsbCl7aWYoMSZjJiYoc2koMCksZ3QoMSxLYnQsMiwwLCJkaXYiLDQpKDIscWJ0LDQsMSwiZGl2Iiw0KSgzLFhidCwzLDEsImRpdiIsNCksbGkoKSksMiZjKXtjb25zdCBhPVJl''@;'; put 'put ''KDIpO2ZlKCksTWUoIm5nSWYiLCIiPT09YS5saWNlbmNlZmlsZS5maWxlbmFtZSksZmUoKSxNZSgibmdJZiIsIiIhPT1hLmxpY2VuY2VmaWxlLmZpbGVuYW1lKSxmZSgpLE1lKCJuZ0lmIixhLmxpY2VuY2VGaWxlRXJyb3IpfX1mdW5jdGlvbiBRYnQoYyxsKXsxJmMmJihkZSgwLCJidXR0b24i''@;'; put 'put ''LDM0KSxMZSgxLCIgQ29udGludWUgd2l0aCBmcmVlIHRpZXIgIiksaGUoKSl9ZnVuY3Rpb24gZXl0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2Iiw1KSgxLCJkaXYiLDYpLExlKDIsIkxpY2VuY2luZyIpLGhlKCksZGUoMywiZGl2Iiw3KSg0LCJkaXYiLDgpLGd0KDUsVWJ0''@;'; put 'put ''LDQsMywibmctY29udGFpbmVyIiw5KSg2LFpidCw1LDAsIm5nLWNvbnRhaW5lciIsOSkoNyxXYnQsMywwLCJuZy1jb250YWluZXIiLDkpLGRlKDgsInAiKSg5LCJzdHJvbmciKSxMZSgxMCwiU1lTU0lURToiKSxoZSgpLGd0KDExLFlidCwyLDQsInNwYW4iLDEwKSxkZSgxMiwiYSIsMTEpLEZ0''@;'; put 'put ''KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPWhhKDE0KSxmPWhhKDE2KSx2PVJlKCk7cmV0dXJuIEN0KHYuY29weVN5c3NpdGUoaCxmLHYuc3lzc2l0ZS52YWx1ZXx8W10pKX0pLEd0KDEzLCJjbHItaWNvbiIsMTIsMCksZGUoMTUsInNwYW4iLDEzLDEpLExlKDE3LCJDb3B5IHRv''@;'; put 'put ''IGNsaXBib2FyZCIpLGhlKCkoKSgpLGd0KDE4LEdidCw0LDEsInAiLDE0KSxkZSgxOSwiY2xyLXRhYnMiKSgyMCwiY2xyLXRhYiIpKDIxLCJidXR0b24iLDE1KSxMZSgyMiwiVXBsb2FkIGxpY2VuY2UiKSxoZSgpLGRlKDIzLCJjbHItdGFiLWNvbnRlbnQiKSgyNCwiaW5wdXQiLDE2LDIpLEZ0''@;'; put 'put ''KCJjaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChSZSgpLm9uRmlsZUNhcHR1cmUoaCkpfSksaGUoKSxkZSgyNiwiZGl2IiwxNyksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChoYSgyNSkuY2xpY2soKSl9KSgiZmlsZURyb3AiLGZ1bmN0aW9uKGgpe3Jl''@;'; put 'put ''dHVybiB3dChhKSxDdChSZSgpLm9uRmlsZUNhcHR1cmUoaCwhMCkpfSksZ3QoMjcsJGJ0LDEsMCwiY2xyLXNwaW5uZXIiLDE4KSgyOCxKYnQsNCwzLCJuZy1jb250YWluZXIiLDQpLGhlKCkoKSgpLGRlKDI5LCJjbHItdGFiIikoMzAsImJ1dHRvbiIsMTUpLExlKDMxLCJQYXN0ZSBsaWNlbmNl''@;'; put 'put ''IiksaGUoKSxkZSgzMiwiY2xyLXRhYi1jb250ZW50IikoMzMsImZvcm0iLDE5KSgzNCwicCIpLExlKDM1LCJMaWNlbmNlIGtleToiKSxoZSgpLGRlKDM2LCJkaXYiLDIwKSgzNywidGV4dGFyZWEiLDIxKSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1SZSgp''@;'; put 'put ''O3JldHVybiBtaShmLmxpY2VuY2VLZXlWYWx1ZSxoKXx8KGYubGljZW5jZUtleVZhbHVlPWgpLEN0KGgpfSksRnQoIm1vdXNlbGVhdmUiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkudHJpbUtleXMoKSl9KSxoZSgpKCkoKSxkZSgzOCwiZm9ybSIsMjIpKDM5LCJwIiksTGUoNDAs''@;'; put 'put ''IkFjdGl2YXRpb24ga2V5OiIpLGhlKCksZGUoNDEsImRpdiIsMjApKDQyLCJ0ZXh0YXJlYSIsMjMpLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPVJlKCk7cmV0dXJuIG1pKGYuYWN0aXZhdGlvbktleVZhbHVlLGgpfHwoZi5hY3RpdmF0aW9uS2V5VmFsdWU9''@;'; put 'put ''aCksQ3QoaCl9KSxGdCgibW91c2VsZWF2ZSIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS50cmltS2V5cygpKX0pLGhlKCkoKSgpKCkoKSgpKCksZGUoNDMsImRpdiIsMjQpKDQ0LCJidXR0b24iLDI1KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKCku''@;'; put 'put ''YXBwbHlLZXlzKCkpfSksTGUoNDUsIiBBcHBseSBsaWNlbmNlIGtleXMgIiksaGUoKSxndCg0NixRYnQsMiwwLCJidXR0b24iLDI2KSxoZSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9UmUoKTtmZSgzKSxNZSgibmdTd2l0Y2giLGEuYWN0aW9uKSxmZSgyKSxNZSgibmdTd2l0Y2hDYXNlIiwia2V5''@;'; put 'put ''IiksZmUoKSxNZSgibmdTd2l0Y2hDYXNlIiwibGltaXQiKSxmZSgpLE1lKCJuZ1N3aXRjaENhc2UiLCJ1cGRhdGUiKSxmZSg0KSxNZSgibmdGb3JPZiIsYS5zeXNzaXRlLnZhbHVlKSxmZSg3KSxNZSgibmdJZiIsYS5saWNlbnNlS2V5RGF0YSYmYS51c2VyQ291bnRMaW1pdGF0aW9uKSxmZSg5''@;'; put 'put ''KSxNZSgibmdJZiIsYS5saWNlbmNlRmlsZUxvYWRpbmcpLGZlKCksTWUoIm5nSWYiLCFhLmxpY2VuY2VGaWxlTG9hZGluZyksZmUoOSkscGkoIm5nTW9kZWwiLGEubGljZW5jZUtleVZhbHVlKSxmZSg1KSxwaSgibmdNb2RlbCIsYS5hY3RpdmF0aW9uS2V5VmFsdWUpLGZlKDIpLE1lKCJjbHJM''@;'; put 'put ''b2FkaW5nIixhLmFwcGx5aW5nS2V5cykoImRpc2FibGVkIixhLmRpc2FibGVBcHBseUJ1dHRvbiksZmUoMiksTWUoIm5nSWYiLGEuaXNBcHBGcmVlVGllci52YWx1ZSl9fWZ1bmN0aW9uIHR5dChjLGwpezEmYyYmR3QoMCwiYXBwLXRlcm1zIil9dmFyIHE2ZT1mdW5jdGlvbihjKXtyZXR1cm4g''@;'; put 'put ''Yy5rZXk9ImtleSIsYy5yZWdpc3Rlcj0icmVnaXN0ZXIiLGMubGltaXQ9ImxpbWl0IixjLnVwZGF0ZT0idXBkYXRlIixjfShxNmV8fHt9KTtjb25zdCBueXQ9W3twYXRoOiI6YWN0aW9uIixjb21wb25lbnQ6KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLnJvdXRlPWEs''@;'; put 'put ''dGhpcy5saWNlbmNlU2VydmljZT1kLHRoaXMuc2FzU2VydmljZT1oLHRoaXMuYXBwU2VydmljZT1mLHRoaXMuYWN0aW9uPW51bGwsdGhpcy5saWNlbnNlRXJyb3JzPXttaXNzaW5nOidMaWNlbmNlIGtleSBpcyBtaXNzaW5nIC0gcGxlYXNlIGNvbnRhY3QgPGEgY2xhc3M9ImNvbG9yLWdyZWVu''@;'; put 'put ''IiBocmVmPSJtYWlsdG86IHN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8iPnN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW88L2E+IGFuZCBlbnRlciB2YWxpZCBrZXlzIGJlbG93LicsZXhwaXJlZDonTGljZW5jZSBrZXkgaXMgZXhwaXJlZCAtIHBsZWFzZSBjb250YWN0IDxhIGNsYXNzPSJjb2xv''@;'; put 'put ''ci1ncmVlbiIgaHJlZj0ibWFpbHRvOiBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvIj5zdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvPC9hPiBhbmQgZW50ZXIgdmFsaWQga2V5cyBiZWxvdy4nLGludmFsaWQ6J0xpY2VuY2Uga2V5IGlzIGludmFsaWQgLSBwbGVhc2UgY29udGFjdCA8YSBjbGFz''@;'; put 'put ''cz0iY29sb3ItZ3JlZW4iIGhyZWY9Im1haWx0bzogc3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyI+c3VwcG9ydEBkYXRhY29udHJvbGxlci5pbzwvYT4gYW5kIGVudGVyIHZhbGlkIGtleXMgYmVsb3cuJyxtaXNzbWF0Y2g6J1lvdXIgU1lTU0lURSAoYmVsb3cpIGlzIG5vdCBmb3VuZCBpbiB0''@;'; put 'put ''aGUgbGljZW5jZSBrZXkgLSBwbGVhc2UgY29udGFjdCA8YSBjbGFzcz0iY29sb3ItZ3JlZW4iIGhyZWY9Im1haWx0bzogc3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyI+c3VwcG9ydEBkYXRhY29udHJvbGxlci5pbzwvYT4gYW5kIGVudGVyIHZhbGlkIGtleXMgYmVsb3cuJ30sdGhpcy5saWNl''@;'; put 'put ''bmNlS2V5VmFsdWU9IiIsdGhpcy5hY3RpdmF0aW9uS2V5VmFsdWU9IiIsdGhpcy5hcHBseWluZ0tleXM9ITEsdGhpcy5zeXNzaXRlPXRoaXMuYXBwU2VydmljZS5zeXNzaXRlLHRoaXMuY3VycmVudExpY2VuY2VLZXk9dGhpcy5saWNlbmNlU2VydmljZS5saWNlbmNlS2V5LHRoaXMuY3VycmVu''@;'; put 'put ''dEFjdGl2YXRpb25LZXk9dGhpcy5saWNlbmNlU2VydmljZS5hY3RpdmF0aW9uS2V5LHRoaXMuaXNBcHBGcmVlVGllcj10aGlzLmxpY2VuY2VTZXJ2aWNlLmlzQXBwRnJlZVRpZXIsdGhpcy51c2VyQ291bnRMaW1pdGF0aW9uPXRoaXMubGljZW5jZVNlcnZpY2UudXNlckNvdW50TGltaXRhdGlv''@;'; put 'put ''bix0aGlzLmxpY2Vuc2VLZXlEYXRhPW51bGwsdGhpcy5pbnB1dFR5cGU9ImZpbGUiLHRoaXMubGljZW5jZUZpbGVMb2FkaW5nPSExLHRoaXMubGljZW5jZWZpbGU9e2ZpbGVuYW1lOiIifX1uZ09uSW5pdCgpe3RoaXMubGljZW5jZUtleVZhbHVlPXRoaXMuY3VycmVudExpY2VuY2VLZXl8fCIi''@;'; put 'put ''LHRoaXMuYWN0aXZhdGlvbktleVZhbHVlPXRoaXMuY3VycmVudEFjdGl2YXRpb25LZXl8fCIiLHRoaXMucm91dGUucXVlcnlQYXJhbXMuc3Vic2NyaWJlKGE9Pnt0aGlzLmtleUVycm9yPWEuZXJyb3IsdGhpcy5taXNzbWF0Y2hlZEtleT1hLm1pc3NtYXRjaElkLGEuZGV0YWlscyYmKHRoaXMu''@;'; put 'put ''ZXJyb3JEZXRhaWxzPWF0b2IoYS5kZXRhaWxzKSl9KSx0aGlzLnJvdXRlLnBhcmFtcy5zdWJzY3JpYmUoYT0+e2xldCBkPWEuYWN0aW9uO2QmJk9iamVjdC52YWx1ZXMocTZlKS5pbmNsdWRlcyhkKSYmKHRoaXMuYWN0aW9uPWQpfSksdGhpcy5saWNlbnNlS2V5RGF0YT10aGlzLmxpY2VuY2VT''@;'; put 'put ''ZXJ2aWNlLmdldExpY2Vuc2VLZXlEYXRhKCl9dHJpbUtleXMoKXt0aGlzLmxpY2VuY2VLZXlWYWx1ZT10aGlzLmxpY2VuY2VLZXlWYWx1ZS50cmltKCksdGhpcy5hY3RpdmF0aW9uS2V5VmFsdWU9dGhpcy5hY3RpdmF0aW9uS2V5VmFsdWUudHJpbSgpfWNvcHlTeXNzaXRlKGEsZCxoKXtjb25z''@;'; put 'put ''dCBmPWguam9pbigiXG4iKTtuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChmKS50aGVuKCgpPT57YS5zZXRBdHRyaWJ1dGUoInNoYXBlIiwiY2hlY2siKSxhLnNldEF0dHJpYnV0ZSgiY2xhc3MiLCJpcy1zdWNjZXNzIiksZC5pbm5lclRleHQ9IkNvcGllZCEiLHNldFRpbWVvdXQoKCk9''@;'; put 'put ''PnthLnNldEF0dHJpYnV0ZSgic2hhcGUiLCJjb3B5IiksYS5yZW1vdmVBdHRyaWJ1dGUoImNsYXNzIiksZC5pbm5lclRleHQ9IkNvcHkgdG8gY2xpcGJvYXJkIn0sMWUzKX0pfWFwcGx5S2V5cygpe3RoaXMuYXBwbHlpbmdLZXlzPSEwLHRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJhZG1pbi9y''@;'; put 'put ''ZWdpc3RlcmtleSIse2tleXVwbG9hZDpbe0FDVElWQVRJT05fS0VZOnRoaXMuYWN0aXZhdGlvbktleVZhbHVlLExJQ0VOQ0VfS0VZOnRoaXMubGljZW5jZUtleVZhbHVlfV19KS50aGVuKGQ9PntkLmFkYXB0ZXJSZXNwb25zZS5yZXR1cm4mJmQuYWRhcHRlclJlc3BvbnNlLnJldHVyblswXSYm''@;'; put 'put ''IlNVQ0NFU1MiPT09ZC5hZGFwdGVyUmVzcG9uc2UucmV0dXJuWzBdLk1TRyYmbG9jYXRpb24ucmVwbGFjZShsb2NhdGlvbi5ocmVmLnNwbGl0KCIjIilbMF0pfSkuZmluYWxseSgoKT0+e3RoaXMuYXBwbHlpbmdLZXlzPSExfSl9b25GaWxlQ2FwdHVyZShhLGQ9ITEpe2xldCBoPWQ/YVswXTph''@;'; put 'put ''LnRhcmdldC5maWxlc1swXTtpZih0aGlzLmxpY2VuY2VmaWxlLmZpbGVuYW1lPWgubmFtZSwhaClyZXR1cm47dGhpcy5saWNlbmNlRmlsZUxvYWRpbmc9ITA7Y29uc3QgZj1uZXcgRmlsZVJlYWRlcjtmLm9ubG9hZD12PT57aWYodGhpcy5saWNlbmNlRmlsZUVycm9yPSJFcnJvciByZWFkaW5n''@;'; put 'put ''IGZpbGUuIiwhdnx8IXYudGFyZ2V0fHwyIT12LnRhcmdldC5yZWFkeVN0YXRlfHx2LnRhcmdldC5lcnJvcnx8IXYudGFyZ2V0LnJlc3VsdClyZXR1cm47dGhpcy5saWNlbmNlRmlsZUxvYWRpbmc9ITEsdGhpcy5saWNlbmNlRmlsZUVycm9yPXZvaWQgMDtjb25zdCBNPXYudGFyZ2V0LnJlc3Vs''@;'; put 'put ''dC50b1N0cmluZygpLnNwbGl0KCJcbiIpO3RoaXMuYWN0aXZhdGlvbktleVZhbHVlPU1bMV0sdGhpcy5saWNlbmNlS2V5VmFsdWU9TVswXX0sZi5yZWFkQXNUZXh0KGgpfXN3aXRjaFR5cGUoYSl7dGhpcy5pbnB1dFR5cGU9YX1nZXQgZGlzYWJsZUFwcGx5QnV0dG9uKCl7cmV0dXJuIHRoaXMu''@;'; put 'put ''bGljZW5jZUtleVZhbHVlLmxlbmd0aDwxfHx0aGlzLmFjdGl2YXRpb25LZXlWYWx1ZS5sZW5ndGg8MXx8dGhpcy5saWNlbmNlS2V5VmFsdWU9PT10aGlzLmN1cnJlbnRMaWNlbmNlS2V5JiZ0aGlzLmFjdGl2YXRpb25LZXlWYWx1ZT09PXRoaXMuY3VycmVudEFjdGl2YXRpb25LZXl9c3RhdGlj''@;'; put 'put ''e3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoQ3UpLEdlKHUxKSxHZShHcyksR2Uob0wpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1saWNlbnNpbmciXV0sZGVjbHM6Mix2YXJzOjIsY29uc3RzOltbImNv''@;'; put 'put ''cHlJY29uIiwiIl0sWyJjb3B5VG9vbHRpcCIsIiJdLFsibGljZW5jZUZpbGUiLCIiXSxbImNsYXNzIiwiY2FyZCIsNCwibmdJZiJdLFs0LCJuZ0lmIl0sWzEsImNhcmQiXSxbMSwiY2FyZC1oZWFkZXIiXSxbMSwiY2FyZC1ibG9jayIsMywibmdTd2l0Y2giXSxbMSwiY2FyZC10ZXh0Il0sWzQs''@;'; put 'put ''Im5nU3dpdGNoQ2FzZSJdLFszLCJtaXNza2V5Iiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwidG9vbHRpcCIsInRvb2x0aXAtbWQiLCJ0b29sdGlwLXRvcC1yaWdodCIsMywiY2xpY2siXSxbInNoYXBlIiwiY29weSIsInNpemUiLCIxNSIsMSwiY3Vyc29yLXBvaW50ZXIiXSxbMSwidG9vbHRp''@;'; put 'put ''cC1jb250ZW50Il0sWyJjbGFzcyIsIm0tMCIsNCwibmdJZiJdLFsiY2xyVGFiTGluayIsIiJdLFsidHlwZSIsImZpbGUiLCJoaWRkZW4iLCIiLDMsImNoYW5nZSJdLFsiYXBwRmlsZURyb3AiLCIiLDEsImRyb3AtYXJlYSIsMywiY2xpY2siLCJmaWxlRHJvcCJdLFsiY2xhc3MiLCJzcGlubmVy''@;'; put 'put ''LXNtIiw0LCJuZ0lmIl0sWzEsImNsci1mb3JtIiwibGljZW5zZS1rZXktZm9ybSJdLFsxLCJjbHItY29udHJvbC1jb250YWluZXIiXSxbIm5hbWUiLCJsaWNlbnNlLWtleS1hcmVhIiwicGxhY2Vob2xkZXIiLCJQYXN0ZSBsaWNlbmNlIGtleSBoZXJlIiwxLCJjbHItdGV4dGFyZWEiLDMsIm5n''@;'; put 'put ''TW9kZWxDaGFuZ2UiLCJtb3VzZWxlYXZlIiwibmdNb2RlbCJdLFsxLCJjbHItZm9ybSIsImFjdGl2YXRpb24ta2V5LWZvcm0iXSxbIm5hbWUiLCJhY3RpdmF0aW9uLWtleS1hcmVhIiwicGxhY2Vob2xkZXIiLCJQYXN0ZSBhY3RpdmF0aW9uIGtleSBoZXJlIiwxLCJjbHItdGV4dGFyZWEiLDMs''@;'; put 'put ''Im5nTW9kZWxDaGFuZ2UiLCJtb3VzZWxlYXZlIiwibmdNb2RlbCJdLFsxLCJjYXJkLWZvb3RlciIsImQtZmxleCIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiXSxbMSwiYnRuIiwiYnRuLXByaW1hcnkiLCJhcHBseS1rZXlzIiwzLCJjbGljayIsImNsckxvYWRpbmciLCJkaXNhYmxlZCJdLFsi''@;'; put 'put ''cm91dGVyTGluayIsIi8iLCJjbGFzcyIsImJ0biBidG4tc20gYnRuLWxpbmsiLDQsIm5nSWYiXSxbImNsYXNzIiwia2V5LWVycm9yIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImtleS1lcnJvciIsMywiaW5uZXJIVE1MIiw0LCJuZ0lmIl0sWzEsImtleS1lcnJvciJdLFsxLCJrZXktZXJyb3IiLDMs''@;'; put 'put ''ImlubmVySFRNTCJdLFsiY2xhc3NlcyIsImNvbG9yLWdyZWVuIl0sWzEsIm0tMCJdLFsxLCJzcGlubmVyLXNtIl0sWyJyb3V0ZXJMaW5rIiwiLyIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLWxpbmsiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJmd0KDAsZXl0LDQ3LDEzLCJkaXYiLDMp''@;'; put 'put ''KDEsdHl0LDEsMCwiYXBwLXRlcm1zIiw0KSwyJmQmJihNZSgibmdJZiIsInJlZ2lzdGVyIiE9PWguYWN0aW9uKSxmZSgpLE1lKCJuZ0lmIiwicmVnaXN0ZXIiPT09aC5hY3Rpb24pKX0sZGVwZW5kZW5jaWVzOltucyxiYSxTMixjcCxsNyxxbCxubCxvNywkcyx5cCxIbCxqMCxQMixfbSxDbSx4''@;'; put 'put ''Nyx3bSx5bSxTNyxSZCxjMSxWYnQscE9dLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCksY2FuQWN0aXZhdGU6W3R0ZV0sY2FuRGVhY3RpdmF0ZTpbdHRlXX1dO2xldCByeXQ9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhk''@;'; put 'put ''fHxjKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W3pjLmZvckNoaWxkKG55dCksemNdfSl9fXJldHVybiBjfSkoKSxpeXQ9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7''@;'; put 'put ''cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1JhLFJjLHowLHJ5dCxDd119KX19cmV0dXJuIGN9KSgpO2NvbnN0IGF5dD0oKT0+KHtzdGFuZGFsb25lOiEwfSksWDZlPShjLGwsYSk9''@;'; put 'put ''Pih7YWRkZWRSb3c6YyxkZWxldGVkUm93OmwsdXBkYXRlZFJvdzphfSksSjZlPWM9Pih7ImNoIHRvb2x0aXAgdG9vbHRpcC1tZCB0b29sdGlwLXRvcC1yaWdodCI6Y30pO2Z1bmN0aW9uIG95dChjLGwpe2lmKDEmYyYmKGRlKDAsInRkIiwxOSksTGUoMSksaGUoKSksMiZjKXtjb25zdCBhPVJl''@;'; put 'put ''KCkuJGltcGxpY2l0LGQ9UmUoKTtNZSgicm91dGVyTGluayIsIi9zdGFnZS8iK2QuanNQYXJhbXNbYV0pLGZlKCksSXIoIiAiLGQuanNQYXJhbXNbYV0sIiAiKX19ZnVuY3Rpb24gc3l0KGMsbCl7aWYoMSZjJiYoZGUoMCwidGQiLDQpLExlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgpLiRp''@;'; put 'put ''bXBsaWNpdCxkPVJlKCk7ZmUoKSxJcigiICIsZC5qc1BhcmFtc1thXSwiICIpfX1mdW5jdGlvbiBseXQoYyxsKXtpZigxJmMmJihkZSgwLCJ0ciIpKDEsInRkIiw0KSxMZSgyKSxoZSgpLGd0KDMsb3l0LDIsMiwidGQiLDE3KSg0LHN5dCwyLDEsInRkIiwxOCksaGUoKSksMiZjKXtjb25zdCBh''@;'; put 'put ''PWwuJGltcGxpY2l0O2ZlKDIpLHdyKGEpLGZlKCksTWUoIm5nSWYiLGEuaW5jbHVkZXMoIlRBQkxFX0lEIikpLGZlKCksTWUoIm5nSWYiLCFhLmluY2x1ZGVzKCJUQUJMRV9JRCIpKX19ZnVuY3Rpb24gY3l0KGMsbCl7aWYoMSZjJiYoZGUoMCwidHIiKSgxLCJ0ZCIsNCksTGUoMiksaGUoKSxk''@;'; put 'put ''ZSgzLCJ0ZCIsNCksTGUoNCksaGUoKSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1SZSgzKTtmZSgyKSx3cihhKSxmZSgyKSx3cihkLnN1Ym1pdERldGFpbHNbYV0pfX1mdW5jdGlvbiB1eXQoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItdGFiLWNvbnRlbnQiKSgxLCJkaXYiLDIyKSgy''@;'; put 'put ''LCJ0YWJsZSIsMykoMywidGhlYWQiKSg0LCJ0ciIpKDUsInRoIiw0KSxMZSg2LCJOYW1lIiksaGUoKSxkZSg3LCJ0aCIsNCksTGUoOCwiVmFsdWUiKSxoZSgpKCkoKSxkZSg5LCJ0Ym9keSIpLGd0KDEwLGN5dCw1LDIsInRyIiw1KSxoZSgpKCkoKSgpKSwyJmMpe2NvbnN0IGE9UmUoMik7ZmUo''@;'; put 'put ''MTApLE1lKCJuZ0Zvck9mIixhLnN1Ym1pdEFycil9fWZ1bmN0aW9uIGR5dChjLGwpe2lmKDEmYyYmKGRlKDAsInRyIikoMSwidGQiLDQpLExlKDIpLGhlKCksZGUoMywidGQiLDQpLExlKDQpLGhlKCkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9UmUoMik7ZmUoMiksd3IoYSksZmUo''@;'; put 'put ''Miksd3IoZC5qc1BhcmFtc1thXSl9fWZ1bmN0aW9uIGh5dChjLGwpe2lmKDEmYyYmKGRlKDAsImNsci10YWJzIikoMSwiY2xyLXRhYiIpKDIsImJ1dHRvbiIsMjApLExlKDMsIlN1Ym1pdHRlZCBUYWJsZSBEZXRhaWxzIiksaGUoKSxndCg0LHV5dCwxMSwxLCJjbHItdGFiLWNvbnRlbnQiLDIx''@;'; put 'put ''KSxoZSgpLGRlKDUsImNsci10YWIiKSg2LCJidXR0b24iLDIwKSxMZSg3LCJCYXNlIFRhYmxlIERldGFpbHMiKSxoZSgpLGRlKDgsImNsci10YWItY29udGVudCIpKDksImRpdiIsMjIpKDEwLCJ0YWJsZSIsMykoMTEsInRoZWFkIikoMTIsInRyIikoMTMsInRoIiw0KSxMZSgxNCwiTmFtZSIp''@;'; put 'put ''LGhlKCksZGUoMTUsInRoIiw0KSxMZSgxNiwiVmFsdWUiKSxoZSgpKCkoKSxkZSgxNywidGJvZHkiKSxndCgxOCxkeXQsNSwyLCJ0ciIsNSksaGUoKSgpKCkoKSgpKCkpLDImYyl7Y29uc3QgYT1SZSgpO2ZlKDQpLE1lKCJjbHJJZkFjdGl2ZSIsITApLGZlKDE0KSxNZSgibmdGb3JPZiIsYS5r''@;'; put 'put ''ZXlzQXJyYXkpfX1mdW5jdGlvbiBmeXQoYyxsKXsxJmMmJihkZSgwLCJwIiw3MiksTGUoMSwiIFRoZXJlIGFyZSBubyBkZXRhaWxzIHRvIHNob3cgIiksaGUoKSl9ZnVuY3Rpb24gcHl0KGMsbCl7aWYoMSZjJiYoc2koMCksZGUoMSwiZGl2Iiw3MykoMiwic3BhbiIpLExlKDMsIlRhYmxlIElk''@;'; put 'put ''OiIpLGhlKCksZGUoNCwic3Ryb25nIiw3NCksTGUoNSksaGUoKSgpLGRlKDYsImRpdiIpKDcsInNwYW4iKSxMZSg4LCJTdWJtaXR0ZXI6IiksaGUoKSxkZSg5LCJzcGFuIiw3NSksTGUoMTApLGhlKCkoKSxkZSgxMSwiZGl2IikoMTIsInNwYW4iKSxMZSgxMywiU3VibWl0dGVkIG9uOiIpLGhl''@;'; put 'put ''KCksZGUoMTQsInNwYW4iLDc1KSxMZSgxNSksaGUoKSgpLGRlKDE2LCJkaXYiKSgxNywic3BhbiIpLExlKDE4LCJTdWJtaXR0ZWQgUmVhc29uOiIpLGhlKCksZGUoMTksInNwYW4iLDc1KSxMZSgyMCksaGUoKSgpLGxpKCkpLDImYyl7Y29uc3QgYT1SZSg1KTtmZSg0KSxNZSgicm91dGVyTGlu''@;'; put 'put ''ayIsIi9zdGFnZS8iKyhudWxsPT1hLnRhYmxlRGV0YWlscz9udWxsOmEudGFibGVEZXRhaWxzLlRBQkxFX0lEKSksZmUoKSxJcigiICIsbnVsbD09YS50YWJsZURldGFpbHM/bnVsbDphLnRhYmxlRGV0YWlscy5UQUJMRV9JRCwiICIpLGZlKDUpLElyKCIgIixudWxsPT1hLnRhYmxlRGV0YWls''@;'; put 'put ''cz9udWxsOmEudGFibGVEZXRhaWxzLlNVQk1JVFRFRF9CWV9OTSwiICIpLGZlKDUpLElyKCIgIixudWxsPT1hLnRhYmxlRGV0YWlscz9udWxsOmEudGFibGVEZXRhaWxzLlNVQk1JVFRFRF9PTl9EVFRNLCIgIiksZmUoNSksSXIoIiAiLG51bGw9PWEudGFibGVEZXRhaWxzP251bGw6YS50YWJs''@;'; put 'put ''ZURldGFpbHMuU1VCTUlUVEVEX1JFQVNPTl9UWFQsIiAiKX19ZnVuY3Rpb24gZ3l0KGMsbCl7MSZjJiYoZGUoMCwic3BhbiIsNzYpLEd0KDEsImNsci1pY29uIiw3NyksTGUoMiwiIE9ubHkgdGhlIGZpcnN0IDEwMCBpbnNlcnRzLCB1cGRhdGVzIG9yIGRlbGV0ZXMgYXJlIGRpc3BsYXllZCAi''@;'; put 'put ''KSxoZSgpKX1mdW5jdGlvbiBteXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiLDQ5KSgxLCJkaXYiLDUwKSgyLCJkaXYiLDUxKSxndCgzLGZ5dCwyLDAsInAiLDQ1KSg0LHB5dCwyMSw1LCJuZy1jb250YWluZXIiLDgpLGhlKCksZGUoNSwiZGl2Iiw1MikoNiwiZGl2Iiw1''@;'; put 'put ''MykoNywiZGl2Iiw1NCkoOCwiZGl2Iiw1NSkoOSwiYnV0dG9uIiw1NiksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9UmUoNCk7cmV0dXJuIEN0KGguZ29Ub0Jhc2UobnVsbD09aC5qc1BhcmFtcz9udWxsOmguanNQYXJhbXMuVEFCTEVfTk0pKX0pLExlKDEwLCIgVmlldyBi''@;'; put 'put ''YXNlIHRhYmxlICIpLGhlKCksZGUoMTEsImJ1dHRvbiIsNTcpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPVJlKDQpO3JldHVybiBDdChoLmdldFRhYmxlKGgudGFibGVJZCkpfSksTGUoMTIsIiBWaWV3IHN0YWdlZCBkYXRhICIpLGhlKCksZGUoMTMsImJ1dHRvbiIsNTgp''@;'; put 'put ''LEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPVJlKDQpO3JldHVybiBDdChoLmdvQmFjayhudWxsPT1oLmpzUGFyYW1zP251bGw6aC5qc1BhcmFtcy5UQUJMRV9OTSkpfSksTGUoMTQsIiBFZGl0IGJhc2UgdGFibGUgIiksaGUoKSgpKCkoKSxkZSgxNSwiZGl2Iiw1OSkoMTYs''@;'; put 'put ''ImJ1dHRvbiIsNjApLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoNCkuYXBwcm92ZVRhYmxlKCkpfSksTGUoMTcsIiBBQ0NFUFQgIiksaGUoKSxkZSgxOCwiYnV0dG9uIiw2MSksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSg0KS5yZWpl''@;'; put 'put ''Y3RPcGVuPSEwKX0pLExlKDE5LCIgUkVKRUNUICIpLGhlKCksZGUoMjAsImNsci10b2dnbGUtY29udGFpbmVyIiw2MikoMjEsImNsci10b2dnbGUtd3JhcHBlciIpKDIyLCJpbnB1dCIsNjMpLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPVJlKDQpO3JldHVy''@;'; put 'put ''biBtaShmLmZvcm1hdHRlZFZhbHVlcyxoKXx8KGYuZm9ybWF0dGVkVmFsdWVzPWgpLEN0KGgpfSksRnQoImNoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoNCkuZm9ybWF0dGluZ0NoYW5nZWQoKSl9KSxoZSgpLGRlKDIzLCJsYWJlbCIsNjQpLExlKDI0KSxoZSgpKCkoKSgp''@;'; put 'put ''LGRlKDI1LCJkaXYiLDY1KSxndCgyNixneXQsMywwLCJzcGFuIiw2NiksZGUoMjcsImRpdiIsMzEpKDI4LCJkaXYiLDY3KSgyOSwic3BhbiIsNjgpLExlKDMwLCIgQ2hhbmdlZCBSb3dzICIpLGRlKDMxLCJzcGFuIiw2OSksTGUoMzIpLGhlKCkoKSxkZSgzMywic3BhbiIsNzApLExlKDM0LCIg''@;'; put 'put ''QWRkZWQgUm93cyAiKSxkZSgzNSwic3BhbiIsNjkpLExlKDM2KSxoZSgpKCksZGUoMzcsInNwYW4iLDcxKSxMZSgzOCwiIERlbGV0ZWQgUm93cyAiKSxkZSgzOSwic3BhbiIsNjkpLExlKDQwKSxoZSgpKCkoKSgpKCkoKSgpKCl9aWYoMiZjKXtjb25zdCBhPVJlKDQpO2ZlKDMpLE1lKCJuZ0lm''@;'; put 'put ''IiwhYS50YWJsZURldGFpbHMpLGZlKCksTWUoIm5nSWYiLGEudGFibGVEZXRhaWxzKSxmZSgxMiksTWUoImNsckxvYWRpbmciLGEuYWNjZXB0TG9hZGluZykoImRpc2FibGVkIiwhYS5sb2FkaW5nVGFibGV8fCJOTyI9PT0obnVsbD09YS5wYXJhbXM/bnVsbDphLnBhcmFtcy5JU0FQUFJPVkVS''@;'; put 'put ''KXx8YS5ub0NoYW5nZXMpLGZlKDIpLE1lKCJkaXNhYmxlZCIsIWEubG9hZGluZ1RhYmxlfHwiTk8iPT09KG51bGw9PWEucGFyYW1zP251bGw6YS5wYXJhbXMuSVNBUFBST1ZFUil8fGEubm9DaGFuZ2VzKSxmZSg0KSxwaSgibmdNb2RlbCIsYS5mb3JtYXR0ZWRWYWx1ZXMpLGZlKDIpLHdyKGEu''@;'; put 'put ''Zm9ybWF0dGVkVmFsdWVzPyJGb3JtYXR0ZWQiOiJVbmZvcm1hdHRlZCIpLGZlKDIpLE1lKCJuZ0lmIixhLmRpZmZzTGltaXQpLGZlKDYpLHdyKGEubGVucy51cGRhdGVkKSxmZSg0KSx3cihhLmxlbnMubmV3KSxmZSg0KSx3cihhLmxlbnMuZGVsZXRlZCl9fWZ1bmN0aW9uIHZ5dChjLGwpezEm''@;'; put 'put ''YyYmKGRlKDAsImRpdiIsNzUpKDEsInAiLDgxKSxMZSgyLCJMb2FkaW5nIHRhYmxlIiksaGUoKSgpKX1mdW5jdGlvbiBieXQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDc4KSgxLCJzcGFuIiw3OSksTGUoMiwiIExvYWRpbmcuLi4gIiksaGUoKSxndCgzLHZ5dCwzLDAsImRpdiIsODApLGhl''@;'; put 'put ''KCkpLDImYyl7Y29uc3QgYT1SZSg0KTtmZSgzKSxNZSgibmdJZiIsIWEubG9hZGluZ1RhYmxlKX19ZnVuY3Rpb24geXl0KGMsbCl7MSZjJiYoZGUoMCwicCIsNzIpLExlKDEsIiBUaGVyZSBhcmUgbm8gY2hhbmdlcyB0byBzaG93ICIpLGhlKCkpfWZ1bmN0aW9uIF95dChjLGwpe2lmKDEmYyYm''@;'; put 'put ''KGRlKDAsInRoIiw0KSxMZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoKSx3cihhKX19ZnVuY3Rpb24gd3l0KGMsbCl7aWYoMSZjJiYoZGUoMCwic3BhbiIsODYpLExlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgpLmluZGV4LGQ9UmUoMikuaW5kZXgsaD1SZSg0KTtm''@;'; put 'put ''ZSgpLElyKCJPcmlnaW5hbCB2YWx1ZSBpczogIixoLmFyck9mQ2hhbmdlc1tkXVthXSwiIil9fWZ1bmN0aW9uIEN5dChjLGwpe2lmKDEmYyYmKGRlKDAsInRkIiw4NCksTGUoMSksZ3QoMix3eXQsMiwxLCJzcGFuIiw4NSksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9bC5pbmRl''@;'; put 'put ''eCxoPVJlKDIpLmluZGV4LGY9UmUoNCk7TWUoIm5nQ2xhc3MiLHNwKDMsSjZlLDE9PWYuYXJyQ2hhbmdlZFtoXVtkXSYmInVwZGF0ZWQiPT1mLmNoQXJyW2hdKSksZmUoKSxJcigiICIsZi5kaWZmVGFibGUuZGF0YVtoXVthXSwiICIpLGZlKCksTWUoIm5nSWYiLDE9PWYuYXJyQ2hhbmdlZFto''@;'; put 'put ''XVtkXSYmInVwZGF0ZWQiPT1mLmNoQXJyW2hdKX19ZnVuY3Rpb24gU3l0KGMsbCl7aWYoMSZjJiYoc2koMCksZ3QoMSxDeXQsMyw1LCJ0ZCIsODMpLGxpKCkpLDImYyl7Y29uc3QgYT1SZSgpLmluZGV4LGQ9UmUoNCk7ZmUoKSxNZSgibmdGb3JPZiIsZC5yb3dLZXlzW2FdKX19ZnVuY3Rpb24g''@;'; put 'put ''TXl0KGMsbCl7aWYoMSZjJiYoZGUoMCwidGQiLDQpLExlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPVJlKDIpLmluZGV4LGg9UmUoNCk7ZmUoKSxJcigiICIsaC5kaWZmVGFibGUuZGF0YVtkXVthXSwiICIpfX1mdW5jdGlvbiB4eXQoYyxsKXtpZigxJmMmJihzaSgwKSxn''@;'; put 'put ''dCgxLE15dCwyLDEsInRkIiw0NyksbGkoKSksMiZjKXtjb25zdCBhPVJlKCkuaW5kZXgsZD1SZSg0KTtmZSgpLE1lKCJuZ0Zvck9mIixkLnJvd0tleXNbYV0pfX1mdW5jdGlvbiBFeXQoYyxsKXtpZigxJmMmJihkZSgwLCJ0ciIsODIpLGd0KDEsU3l0LDIsMSwibmctY29udGFpbmVyIiw4KSgy''@;'; put 'put ''LHh5dCwyLDEsIm5nLWNvbnRhaW5lciIsOCksaGUoKSksMiZjKXtjb25zdCBhPWwuaW5kZXgsZD1SZSg0KTtNZSgibmdDbGFzcyIscE0oMyxYNmUsImFkZGVkIj09ZC5jaEFyclthXSwiZGVsZXRlZCI9PWQuY2hBcnJbYV0sInVwZGF0ZWQiPT1kLmNoQXJyW2FdKSksZmUoKSxNZSgibmdJZiIs''@;'; put 'put ''InVwZGF0ZWQiPT09ZC5jaEFyclthXSksZmUoKSxNZSgibmdJZiIsInVwZGF0ZWQiIT09ZC5jaEFyclthXSl9fWZ1bmN0aW9uIFR5dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIsMjkpKDEsImRpdiIsMzApKDIsImRpdiIsMzEpKDMsImRpdiIsMzIpKDQsInNwYW4iLDMz''@;'; put 'put ''KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKDMpLmdvVG9BcHByb3ZhbHNMaXN0KCkpfSksR3QoNSwiY2xyLWljb24iLDM0KSxMZSg2LCJCYWNrIHRvIGFwcHJvdmFscyBsaXN0ICIpLGhlKCkoKSxkZSg3LCJkaXYiLDM1KSg4LCJoMyIsMzYpLExlKDkpLGhlKCko''@;'; put 'put ''KSxkZSgxMCwiZGl2IiwzNykoMTEsImEiLDM4KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKDMpLmdldERldGFpbHMoKSl9KSxHdCgxMiwiY2xyLWljb24iLDM5KSxoZSgpKCkoKSxkZSgxMywicCIsNDApLExlKDE0KSxoZSgpKCksZGUoMTUsImRpdiIsNDEpLGd0''@;'; put 'put ''KDE2LG15dCw0MSwxMSwiZGl2Iiw0MiksaGUoKSxndCgxNyxieXQsNCwxLCJkaXYiLDQzKSxkZSgxOCwiZGl2Iiw0NCksZ3QoMTkseXl0LDIsMCwicCIsNDUpLGRlKDIwLCJ0YWJsZSIsMykoMjEsInRoZWFkIikoMjIsInRyIiw0NiksZ3QoMjMsX3l0LDIsMSwidGgiLDQ3KSxoZSgpKCksZGUo''@;'; put 'put ''MjQsInRib2R5IiksZ3QoMjUsRXl0LDMsNywidHIiLDQ4KSxoZSgpKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1SZSgzKTtmZSg5KSxJcigiICIsbnVsbD09YS5qc1BhcmFtcz9udWxsOmEuanNQYXJhbXMuVEFCTEVfTk0sIiAiKSxmZSg1KSxJcigiICIsbnVsbD09YS5qc1BhcmFtcz9udWxsOmEu''@;'; put 'put ''anNQYXJhbXMuVEFCTEVfREVTQywiICIpLGZlKDIpLE1lKCJuZ0lmIixhLmxvYWRlZCksZmUoKSxNZSgibmdJZiIsIWEubG9hZGluZ1RhYmxlKSxmZSgyKSxNZSgibmdJZiIsYS5sb2FkaW5nVGFibGUmJmEubm9DaGFuZ2VzKSxmZSg0KSxNZSgibmdGb3JPZiIsYS5yb3dIZWFkZXIpLGZlKDIp''@;'; put 'put ''LE1lKCJuZ0Zvck9mIixhLnJvd0tleXMpfX1mdW5jdGlvbiBBeXQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDI3KSxndCgxLFR5dCwyNiw3LCJkaXYiLDI4KSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoMik7ZmUoKSxNZSgibmdJZiIsYS5sb2FkZWQpfX1mdW5jdGlvbiBreXQoYyxsKXsxJmMm''@;'; put 'put ''JihkZSgwLCJzcGFuIiw3OSksTGUoMSwiIExvYWRpbmcuLi4gIiksaGUoKSl9ZnVuY3Rpb24gRHl0KGMsbCl7MSZjJiYoZGUoMCwiZGl2IikoMSwiaDMiKSxMZSgyLCJMb2FkaW5nIHByZXZpZXciKSxoZSgpKCkpfWZ1bmN0aW9uIEl5dChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsODcpLGd0''@;'; put 'put ''KDEsa3l0LDIsMCwic3BhbiIsODgpKDIsRHl0LDMsMCwiZGl2Iiw4KSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoMik7ZmUoKSxNZSgibmdJZiIsIWEubG9hZGVkKSxmZSgpLE1lKCJuZ0lmIiwhYS5sb2FkZWQpfX1mdW5jdGlvbiBSeXQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDIzKSxndCgx''@;'; put 'put ''LEF5dCwyLDEsImRpdiIsMjQpLGRlKDIsImRpdiIsMjUpLGd0KDMsSXl0LDMsMiwiZGl2IiwyNiksaGUoKSgpKSwyJmMpe2NvbnN0IGE9UmUoKTtmZSgpLE1lKCJuZ0lmIixhLmxvYWRlZCksZmUoMiksTWUoIm5nSWYiLCFhLmxvYWRlZCl9fWZ1bmN0aW9uIEx5dChjLGwpezEmYyYmKGRlKDAs''@;'; put 'put ''InNwYW4iLDc2KSxHdCgxLCJjbHItaWNvbiIsNzcpLExlKDIsIiBPbmx5IHRoZSBmaXJzdCAxMDAgaW5zZXJ0cywgdXBkYXRlcyBvciBkZWxldGVzIGFyZSBkaXNwbGF5ZWQgIiksaGUoKSl9ZnVuY3Rpb24gT3l0KGMsbCl7MSZjJiZHdCgwLCJkaXYiLDQ5KX1mdW5jdGlvbiBQeXQoYyxsKXsx''@;'; put 'put ''JmMmJihkZSgwLCJkaXYiLDc1KSgxLCJwIiw4MSksTGUoMiwiTG9hZGluZyB0YWJsZSIpLGhlKCkoKSl9ZnVuY3Rpb24gRnl0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwxMDQpKDEsInNwYW4iLDc5KSxMZSgyLCIgTG9hZGluZy4uLiAiKSxoZSgpLGd0KDMsUHl0LDMsMCwiZGl2Iiw4MCks''@;'; put 'put ''aGUoKSksMiZjKXtjb25zdCBhPVJlKDQpO2ZlKDMpLE1lKCJuZ0lmIiwhYS5sb2FkaW5nVGFibGUpfX1mdW5jdGlvbiBIeXQoYyxsKXtpZigxJmMmJihkZSgwLCJ0aCIsNCksTGUoMSksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKCksd3IoYSl9fWZ1bmN0aW9uIE55dChjLGwp''@;'; put 'put ''e2lmKDEmYyYmKGRlKDAsInNwYW4iLDg2KSxMZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoKS5pbmRleCxkPVJlKDIpLmluZGV4LGg9UmUoNCk7ZmUoKSxJcigiT3JpZ2luYWwgdmFsdWUgaXM6ICIsaC5hcnJPZkNoYW5nZXNbZF1bYV0sIiIpfX1mdW5jdGlvbiBWeXQoYyxsKXtpZigxJmMm''@;'; put 'put ''JihkZSgwLCJ0ZCIsODQpLExlKDEpLGd0KDIsTnl0LDIsMSwic3BhbiIsODUpLGhlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPWwuaW5kZXgsaD1SZSgyKS5pbmRleCxmPVJlKDQpO01lKCJuZ0NsYXNzIixzcCgzLEo2ZSwxPT1mLmFyckNoYW5nZWRbaF1bZF0mJiJ1cGRhdGVkIj09''@;'; put 'put ''Zi5jaEFycltoXSkpLGZlKCksSXIoIiAiLGYuZGlmZlRhYmxlLmRhdGFbaF1bYV0sIiAiKSxmZSgpLE1lKCJuZ0lmIiwxPT1mLmFyckNoYW5nZWRbaF1bZF0mJiJ1cGRhdGVkIj09Zi5jaEFycltoXSl9fWZ1bmN0aW9uIEJ5dChjLGwpe2lmKDEmYyYmKHNpKDApLGd0KDEsVnl0LDMsNSwidGQi''@;'; put 'put ''LDgzKSxsaSgpKSwyJmMpe2NvbnN0IGE9UmUoKS5pbmRleCxkPVJlKDQpO2ZlKCksTWUoIm5nRm9yT2YiLGQucm93S2V5c1thXSl9fWZ1bmN0aW9uIGp5dChjLGwpe2lmKDEmYyYmKGRlKDAsInRkIiw0KSxMZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1SZSgyKS5pbmRl''@;'; put 'put ''eCxoPVJlKDQpO2ZlKCksSXIoIiAiLGguZGlmZlRhYmxlLmRhdGFbZF1bYV0sIiAiKX19ZnVuY3Rpb24genl0KGMsbCl7aWYoMSZjJiYoc2koMCksZ3QoMSxqeXQsMiwxLCJ0ZCIsNDcpLGxpKCkpLDImYyl7Y29uc3QgYT1SZSgpLmluZGV4LGQ9UmUoNCk7ZmUoKSxNZSgibmdGb3JPZiIsZC5y''@;'; put 'put ''b3dLZXlzW2FdKX19ZnVuY3Rpb24gVXl0KGMsbCl7aWYoMSZjJiYoZGUoMCwidHIiLDgyKSxndCgxLEJ5dCwyLDEsIm5nLWNvbnRhaW5lciIsOCkoMix6eXQsMiwxLCJuZy1jb250YWluZXIiLDgpLGhlKCkpLDImYyl7Y29uc3QgYT1sLmluZGV4LGQ9UmUoNCk7TWUoIm5nQ2xhc3MiLHBNKDMs''@;'; put 'put ''WDZlLCJhZGRlZCI9PWQuY2hBcnJbYV0sImRlbGV0ZWQiPT1kLmNoQXJyW2FdLCJ1cGRhdGVkIj09ZC5jaEFyclthXSkpLGZlKCksTWUoIm5nSWYiLCJ1cGRhdGVkIj09PWQuY2hBcnJbYV0pLGZlKCksTWUoIm5nSWYiLCJ1cGRhdGVkIiE9PWQuY2hBcnJbYV0pfX1mdW5jdGlvbiBaeXQoYyxs''@;'; put 'put ''KXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiLDkzKSgxLCJkaXYiLDk0KSgyLCJkaXYiLDMxKSgzLCJkaXYiLDMyKSg0LCJzcGFuIiw5NSksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgzKS5nb1RvU3VibWl0TGlzdCgpKX0pLEd0KDUsImNkcy1pY29u''@;'; put 'put ''Iiw5NiksTGUoNiwiQmFjayB0byBzdWJtaXR0ZWQgbGlzdCAiKSxoZSgpKCksZGUoNywiZGl2Iiw5NykoOCwiaDMiLDk4KSxMZSg5KSxoZSgpKCksZGUoMTAsImRpdiIsMzcpKDExLCJhIiwzOCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgzKS50YWJsZUZsYWc9''@;'; put 'put ''ITApfSksR3QoMTIsImNsci1pY29uIiwzOSksaGUoKSgpKCksZGUoMTMsInAiLDk5KSxMZSgxNCksaGUoKSgpLGRlKDE1LCJkaXYiLDUwKSgxNiwiZGl2Iiw1MSkoMTcsImRpdiIsNzMpKDE4LCJzcGFuIiksTGUoMTksIlRhYmxlIElkOiIpLGhlKCksZGUoMjAsInN0cm9uZyIsNzQpKDIxLCJz''@;'; put 'put ''cGFuIiksTGUoMjIpLGhlKCkoKSgpLGRlKDIzLCJkaXYiKSgyNCwic3BhbiIpLExlKDI1LCJTdWJtaXR0ZWQgb246IiksaGUoKSxkZSgyNiwic3BhbiIsNzUpLExlKDI3KSxoZSgpKCksZGUoMjgsImRpdiIpKDI5LCJzcGFuIiksTGUoMzAsIlN1Ym1pdCBNZXNzYWdlOiIpLGhlKCksZGUoMzEs''@;'; put 'put ''InNwYW4iKSxMZSgzMiksaGUoKSgpKCksZGUoMzMsImRpdiIsNTIpKDM0LCJkaXYiLDUzKSgzNSwiZGl2Iiw1NCkoMzYsImRpdiIsNTUpKDM3LCJidXR0b24iLDU2KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSgzKTtyZXR1cm4gQ3QoaC5nb1RvQmFzZShoLnN1Yk9i''@;'; put 'put ''ai5iYXNlKSl9KSxMZSgzOCwiIFZpZXcgYmFzZSB0YWJsZSAiKSxoZSgpLGRlKDM5LCJidXR0b24iLDU3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSgzKTtyZXR1cm4gQ3QoaC5nZXRUYWJsZShoLnN1Yk9iai50YWJsZUlkKSl9KSxMZSg0MCwiIFZpZXcgc3RhZ2Vk''@;'; put 'put ''IGRhdGEgIiksaGUoKSxkZSg0MSwiYnV0dG9uIiw1OCksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9UmUoMyk7cmV0dXJuIEN0KGguZ29CYWNrKGguc3ViT2JqLmJhc2UpKX0pLExlKDQyLCIgRWRpdCBiYXNlIHRhYmxlICIpLGhlKCkoKSgpKCksZGUoNDMsImRpdiIsNjUp''@;'; put 'put ''LGd0KDQ0LEx5dCwzLDAsInNwYW4iLDY2KSxkZSg0NSwiZGl2IiwzMSkoNDYsImRpdiIsNjcpKDQ3LCJzcGFuIiw2OCksTGUoNDgsIiBDaGFuZ2VkIFJvd3MgIiksZGUoNDksInNwYW4iLDY5KSxMZSg1MCksaGUoKSgpLGRlKDUxLCJzcGFuIiw3MCksTGUoNTIsIiBBZGRlZCBSb3dzICIpLGRl''@;'; put 'put ''KDUzLCJzcGFuIiw2OSksTGUoNTQpLGhlKCkoKSxkZSg1NSwic3BhbiIsNzEpLExlKDU2LCIgRGVsZXRlZCBSb3dzICIpLGRlKDU3LCJzcGFuIiw2OSksTGUoNTgpLGhlKCkoKSgpKCkoKSxkZSg1OSwiZGl2Iiw1MykoNjAsImNsci10b2dnbGUtY29udGFpbmVyIiwxMDApKDYxLCJjbHItdG9n''@;'; put 'put ''Z2xlLXdyYXBwZXIiKSg2MiwiaW5wdXQiLDYzKSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1SZSgzKTtyZXR1cm4gbWkoZi5mb3JtYXR0ZWRWYWx1ZXMsaCl8fChmLmZvcm1hdHRlZFZhbHVlcz1oKSxDdChoKX0pLEZ0KCJjaGFuZ2UiLGZ1bmN0aW9uKCl7''@;'; put 'put ''cmV0dXJuIHd0KGEpLEN0KFJlKDMpLmZvcm1hdHRpbmdDaGFuZ2VkKCkpfSksaGUoKSxkZSg2MywibGFiZWwiKSxMZSg2NCksaGUoKSgpKCkoKSgpKCksZGUoNjUsImRpdiIsMTAxKSxndCg2NixPeXQsMSwwLCJkaXYiLDQyKSxoZSgpLGd0KDY3LEZ5dCw0LDEsImRpdiIsMTAyKSxkZSg2OCwi''@;'; put 'put ''ZGl2IiwxMDMpKDY5LCJ0YWJsZSIsMykoNzAsInRoZWFkIikoNzEsInRyIiw0NiksZ3QoNzIsSHl0LDIsMSwidGgiLDQ3KSxoZSgpKCksZGUoNzMsInRib2R5IiksZ3QoNzQsVXl0LDMsNywidHIiLDQ4KSxoZSgpKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1SZSgzKTtmZSg5KSxJcigiICIsYS5z''@;'; put 'put ''dWJPYmouYmFzZSwiICIpLGZlKDUpLElyKCIgIixhLnRhYmxlRGVzY3JpcHRpb24sIiAiKSxmZSg2KSxNZSgicm91dGVyTGluayIsIi9zdGFnZS8iK2Euc3ViT2JqLnRhYmxlSWQpLGZlKDIpLElyKCIgIixhLnN1Yk9iai50YWJsZUlkLCIiKSxmZSg1KSxJcigiICIsYS5zdWJPYmouc3VibWl0''@;'; put 'put ''dGVkLCIgIiksZmUoNSksSXIoIiAiLGEuc3ViT2JqLnN1Ym1pdFJlYXNvbiwiICIpLGZlKDEyKSxNZSgibmdJZiIsYS5kaWZmc0xpbWl0KSxmZSg2KSx3cihhLmxlbnMudXBkYXRlZCksZmUoNCksd3IoYS5sZW5zLm5ldyksZmUoNCksd3IoYS5sZW5zLmRlbGV0ZWQpLGZlKDQpLHBpKCJuZ01v''@;'; put 'put ''ZGVsIixhLmZvcm1hdHRlZFZhbHVlcyksZmUoMiksd3IoYS5mb3JtYXR0ZWRWYWx1ZXM/IkZvcm1hdHRlZCI6IlVuZm9ybWF0dGVkIiksZmUoMiksTWUoIm5nSWYiLGEubG9hZGVkKSxmZSgpLE1lKCJuZ0lmIiwhYS5sb2FkaW5nVGFibGUpLGZlKDUpLE1lKCJuZ0Zvck9mIixhLnJvd0hlYWRl''@;'; put 'put ''ciksZmUoMiksTWUoIm5nRm9yT2YiLGEucm93S2V5cyl9fWZ1bmN0aW9uIFd5dChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsOTEpLGd0KDEsWnl0LDc1LDE2LCJkaXYiLDkyKSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoMik7ZmUoKSxNZSgibmdJZiIsYS5sb2FkZWQpfX1mdW5jdGlvbiBZeXQo''@;'; put 'put ''YyxsKXsxJmMmJihkZSgwLCJkaXYiKSgxLCJoMyIpLExlKDIsIkxvYWRpbmcgc3VibWl0dGVkIHRhYmxlIiksaGUoKSgpKX1mdW5jdGlvbiBHeXQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDEwNSkoMSwiZGl2IiwxMDYpKDIsInNwYW4iLDc5KSxMZSgzLCIgTG9hZGluZy4uLiAiKSxoZSgp''@;'; put 'put ''LGd0KDQsWXl0LDMsMCwiZGl2Iiw4KSxoZSgpKCkpLDImYyl7Y29uc3QgYT1SZSgyKTtmZSg0KSxNZSgibmdJZiIsIWEubG9hZGVkKX19ZnVuY3Rpb24gJHl0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiksZ3QoMSxXeXQsMiwxLCJkaXYiLDg5KSgyLEd5dCw1LDEsImRpdiIsOTApLGhlKCkp''@;'; put 'put ''LDImYyl7Y29uc3QgYT1SZSgpO2ZlKCksTWUoIm5nSWYiLGEubG9hZGVkKSxmZSgpLE1lKCJuZ0lmIiwhYS5sb2FkZWQpfX1sZXQgUTZlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy5zYXNTdG9yZVNlcnZpY2U9YSx0aGlzLmV2ZW50U2VydmljZT1kLHRoaXMucm91''@;'; put 'put ''dGVyPWgsdGhpcy5yb3V0ZT1mLHRoaXMuZGV0YWlsc09wZW49ITEsdGhpcy5yZWplY3RPcGVuPSExLHRoaXMubGVucz17bmV3OjAsdXBkYXRlZDowLGRlbGV0ZWQ6MH0sdGhpcy5sb2FkZWQ9ITEsdGhpcy5sb2FkaW5nVGFibGU9ITEsdGhpcy5zdWJtaXRSZWFzb249IiIsdGhpcy5pbnN0YW5j''@;'; put 'put ''ZT0iaG90SW5zdGFuY2UiLHRoaXMuYWNjZXB0TG9hZGluZz0hMSx0aGlzLnJlamVjdExvYWRpbmc9ITEsdGhpcy5zdWJtaXR0ZWQ9ITEsdGhpcy50YWJsZUZsYWc9ITEsdGhpcy5yb3dLZXlzPVtdLHRoaXMuY2hBcnI9W10sdGhpcy5zZWNvbmRPcGVuPSExLHRoaXMuZm9ybWF0dGVkVmFsdWVz''@;'; put 'put ''PSEwLHRoaXMuY2hhbmdlc0Fycj1bXSx0aGlzLmRpZmZUYWJsZT17ZGF0YTpbXX0sdGhpcy5kaWZmc0xpbWl0PSExLHRoaXMucmVjb3Jkc0xpbWl0PTEwMH1nZXQgbm9DaGFuZ2VzKCl7cmV0dXJuIDA9PT10aGlzLmxlbnMubmV3JiYwPT09dGhpcy5sZW5zLnVwZGF0ZWQmJjA9PT10aGlzLmxl''@;'; put 'put ''bnMuZGVsZXRlZH1nb1RvQmFzZShhKXt0aGlzLnJvdXRlLm5hdmlnYXRlQnlVcmwoIi92aWV3L2RhdGEvIithKX1nb1RvQXBwcm92YWxzTGlzdCgpe3RoaXMucm91dGUubmF2aWdhdGVCeVVybCgiL3Jldmlldy9hcHByb3ZlIil9Z2V0VGFibGUoYSl7dGhpcy5yb3V0ZS5uYXZpZ2F0ZUJ5VXJs''@;'; put 'put ''KCIvc3RhZ2UvIithKX1nb0JhY2soYSl7dGhpcy5yb3V0ZS5uYXZpZ2F0ZUJ5VXJsKCIvZWRpdG9yLyIrYSl9Z29Ub1ZpZXdlcigpe3RoaXMucm91dGUubmF2aWdhdGVCeVVybCgiL3ZpZXcvZGF0YSIpfXNob3dEZXRhaWxzU2VsZWN0KGEpe2EucHJldmVudERlZmF1bHQoKSx0aGlzLnRhYmxl''@;'; put 'put ''RmxhZz0hdGhpcy50YWJsZUZsYWd9Z2V0RGV0YWlscygpe3RoaXMuZGV0YWlsc09wZW49ITB9b25Ib3RTZWxlY3Rpb24oYSl7dGhpcy5ob3RTZWxlY3Rpb249YS5zbGljZSgwLDQpfW9uSG90RGVzZWxlY3QoKXtzZXRUaW1lb3V0KCgpPT57dGhpcy5ob3RTZWxlY3Rpb249bnVsbH0sMTAwKX1y''@;'; put 'put ''ZWplY3RpbmcoKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXthLnJlamVjdExvYWRpbmc9ITAsYS5zdWJtaXRSZWFzb249YS5zdWJtaXRSZWFzb24ucmVwbGFjZSgvXG4vZywiLiAiKTtsZXQgZD17U1RQX0FDVElPTjoiUkVKRUNUX1RBQkxFIixUQUJMRTphLnRhYmxlSWQsU1RQ''@;'; put 'put ''X1JFQVNPTjphLnN1Ym1pdFJlYXNvbn07eWllbGQgYS5zYXNTdG9yZVNlcnZpY2UucmVqZWN0aW5nKGQsIkJyb3dzZXJQYXJhbXMiLCJhcHByb3ZlcnMvcmVqZWN0aW9uIikudGhlbihoPT57YS5yb3V0ZS5uYXZpZ2F0ZUJ5VXJsKCIvcmV2aWV3L2hpc3RvcnkiKX0pLmNhdGNoKGg9PnthLmFj''@;'; put 'put ''Y2VwdExvYWRpbmc9ITEsYS5yZWplY3RMb2FkaW5nPSExfSl9KSgpfWFwcHJvdmVUYWJsZSgpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2EuYWNjZXB0TG9hZGluZz0hMDtsZXQgZD17QUNUSU9OOiJBUFBST1ZFX1RBQkxFIixUQUJMRTphLnRhYmxlSWQsRElGRlRJTUU6YS5w''@;'; put 'put ''YXJhbXM/LkRJRkZUSU1FLExJQkRTOmEucGFyYW1zPy5MSUJEU307eWllbGQgYS5zYXNTdG9yZVNlcnZpY2UuYXBwcm92ZVRhYmxlKGQsIlNBU0NvbnRyb2xUYWJsZSIsImF1ZGl0b3JzL3Bvc3RkYXRhIikudGhlbihoPT57YS5yb3V0ZS5uYXZpZ2F0ZUJ5VXJsKCIvcmV2aWV3L2hpc3Rvcnki''@;'; put 'put ''KX0pLmNhdGNoKGg9PnthLmFjY2VwdExvYWRpbmc9ITF9KX0pKCl9Z29Ub1N1Ym1pdExpc3QoKXt0aGlzLnJvdXRlLm5hdmlnYXRlQnlVcmwoIi9yZXZpZXcvc3VibWl0dGVkIil9Y2FsbENoYW5nZXNJbmZvKGEpe3ZhciBkPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe3lpZWxkIGQuc2Fz''@;'; put 'put ''U3RvcmVTZXJ2aWNlLmdldENoYW5nZUluZm8oYSkudGhlbihoPT57ZC50YWJsZURldGFpbHM9aC5qc3BhcmFtc1swXSxkLmpzUGFyYW1zPWguanNwYXJhbXNbMF07bGV0IGY9W107Zm9yKGNvbnN0IHYgaW4gZC5qc1BhcmFtcylkLmpzUGFyYW1zLmhhc093blByb3BlcnR5KHYpJiZmLnB1c2go''@;'; put 'put ''dik7ZC5rZXlzQXJyYXk9Zn0pLmNhdGNoKGg9PntkLmFjY2VwdExvYWRpbmc9ITF9KS5maW5hbGx5KCgpPT57ZC5sb2FkZWQ9ITB9KX0pKCl9Zm9ybWF0dGluZ0NoYW5nZWQoKXt0aGlzLmNhbGNEaWZmKCl9Y2FsY0RpZmYoKXtpZighdGhpcy5yZXNwb25zZSlyZXR1cm47bGV0IGE9dGhpcy5y''@;'; put 'put ''ZXNwb25zZS5uZXcsZD10aGlzLnJlc3BvbnNlLnVwZGF0ZXMsaD10aGlzLnJlc3BvbnNlLmRlbGV0ZWQsZj10aGlzLnJlc3BvbnNlLm9yaWdpbmFsczt0aGlzLmZvcm1hdHRlZFZhbHVlcyYmKGE9dGhpcy5yZXNwb25zZS5mbXRfbmV3LGQ9dGhpcy5yZXNwb25zZS5mbXRfdXBkYXRlcyxoPXRo''@;'; put 'put ''aXMucmVzcG9uc2UuZm10X2RlbGV0ZWQsZj10aGlzLnJlc3BvbnNlLmZtdF9vcmlnaW5hbHMpLHRoaXMub3JpZ2luYWxzPWYsdGhpcy5yb3dLZXlzPVtdO2ZvcihsZXQgZHQ9MDtkdDxkLmxlbmd0aDtkdCsrKXtsZXQgSnQ9T2JqZWN0LmtleXMoZFtkdF0pO2ZvcihsZXQgdm49MDt2bjxKdC5s''@;'; put 'put ''ZW5ndGg7dm4rKylkW2R0XVtKdFt2bl1dIT09ZltkdF1bSnRbdm5dXSYmdGhpcy5jaGFuZ2VzQXJyLnB1c2goe2luZDpkdCxmaWVsZDpKdFt2bl0scHJvcDpkW2R0XVtKdFt2bl1dLG9yaWdpbmFsOmZbZHRdW0p0W3ZuXV19KX10aGlzLmxlbnM9e25ldzp0aGlzLnBhcmFtcz8uTlVNX0FEREVE''@;'; put 'put ''fHwwLHVwZGF0ZWQ6dGhpcy5wYXJhbXM/Lk5VTV9VUERBVEVEfHwwLGRlbGV0ZWQ6dGhpcy5wYXJhbXM/Lk5VTV9ERUxFVEVEfHwwfTtsZXQgWj1bXSxyZT1kLmNvbmNhdChhLGgpO2ZvcihsZXQgZHQ9MDtkdDx0aGlzLnJlc3BvbnNlLmNvbHMubGVuZ3RoO2R0KyspWi5wdXNoKHRoaXMucmVz''@;'; put 'put ''cG9uc2UuY29sc1tkdF0uTkFNRSk7bGV0IGNlPXRoaXMubGVucy5uZXc+dGhpcy5yZWNvcmRzTGltaXQ/dGhpcy5yZWNvcmRzTGltaXQ6dGhpcy5sZW5zLm5ldyxiZT10aGlzLmxlbnMudXBkYXRlZD50aGlzLnJlY29yZHNMaW1pdD90aGlzLnJlY29yZHNMaW1pdDp0aGlzLmxlbnMudXBkYXRl''@;'; put 'put ''ZDt0aGlzLmRpZmZzTGltaXQ9dGhpcy5sZW5zLm5ldz50aGlzLnJlY29yZHNMaW1pdHx8dGhpcy5sZW5zLnVwZGF0ZWQ+dGhpcy5yZWNvcmRzTGltaXR8fHRoaXMubGVucy5kZWxldGVkPnRoaXMucmVjb3Jkc0xpbWl0LHRoaXMuYWRkQ291bnQ9Y2U7bGV0IEJlPVtdLHFlPVtdO2ZvcihsZXQg''@;'; put 'put ''ZHQ9MDtkdDxaLmxlbmd0aDtkdCsrKXFlLnB1c2goe2RhdGE6WltkdF0scmVhZE9ubHk6ITB9KTt0aGlzLmRpZmZUYWJsZS5kYXRhPXJlO2ZvcihsZXQgZHQ9MDtkdDxyZS5sZW5ndGg7ZHQrKyl7bGV0IHZuPU9iamVjdC5rZXlzKHJlW2R0XSk7dGhpcy5yb3dLZXlzLnB1c2godm4pfWxldCBy''@;'; put 'put ''dD1bXSxwdD1bXTtmb3IobGV0IGR0PTA7ZHQ8dGhpcy5kaWZmVGFibGUuZGF0YS5sZW5ndGg7ZHQrKyl7aWYoZHQ8YmUmJjAhPT1iZSl7cnQucHVzaChbXSkscHQucHVzaChbXSksQmUucHVzaCgidXBkYXRlZCIpO2xldCBKdD1PYmplY3Qua2V5cyh0aGlzLmRpZmZUYWJsZS5kYXRhW2R0XSk7''@;'; put 'put ''Zm9yKGxldCB2bj0wO3ZuPEp0Lmxlbmd0aDt2bisrKXtsZXQgQ249SnRbdm5dO2ZbZHRdW0NuXSE9PWRbZHRdW0NuXT8ocnRbZHRdLnB1c2goITApLHB0W2R0XS5wdXNoKGZbZHRdW0NuXSkpOihydFtkdF0ucHVzaCghMSkscHRbZHRdLnB1c2gobnVsbCkpfXRoaXMuYXJyQ2hhbmdlZD1ydCx0''@;'; put 'put ''aGlzLmFyck9mQ2hhbmdlcz1wdH1kdD49YmUmJmR0PGJlK2NlJiZCZS5wdXNoKCJhZGRlZCIpLGR0PmNlK2JlLTEmJkJlLnB1c2goImRlbGV0ZWQiKX10aGlzLmNoQXJyPUJlLHRoaXMucm93SGVhZGVyPXRoaXMucm93S2V5c1swXSx0aGlzLmRpZmZUYWJsZS5kYXRhPXJlfW5nQWZ0ZXJWaWV3''@;'; put 'put ''SW5pdCgpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2lmKGEuX2RldGFpbHNTdWI9YS5zYXNTdG9yZVNlcnZpY2Uuc3VibWl0dERldGFpbC5zdWJzY3JpYmUoZnVuY3Rpb24oKXt2YXIgaD1lZShmdW5jdGlvbiooZil7YS5zdWJPYmo9Zi52aWV3RGF0YSxhLnRhYmxlSWQ9Zi52''@;'; put 'put ''aWV3RGF0YS50YWJsZUlkLGEuc3VibWl0dGVkPWYudmlld0RhdGEuc3ViLGEuc3VibWl0RGV0YWlscz1mLmRhdGEsYS5zdWJtaXRBcnI9W107Zm9yKGxldCBNIGluIGEuc3VibWl0RGV0YWlscykic3ViIiE9PU0mJmEuc3VibWl0QXJyLnB1c2goTSk7bGV0IHY9e0FDVElPTjoiU0hPV19ESUZG''@;'; put 'put ''UyIsVEFCTEU6YS50YWJsZUlkLERJRkZUSU1FOihuZXcgRGF0ZSkudG9VVENTdHJpbmcoKX07YS5zYXNTdG9yZVNlcnZpY2Uuc2hvd0RpZmZzKHYsIlNBU0NvbnRyb2xUYWJsZSIsImF1ZGl0b3JzL3Bvc3RkYXRhIikudGhlbihNPT57YS5wYXJhbXM9TS5wYXJhbXNbMF0sYS5yZXNwb25zZT1N''@;'; put 'put ''LGEuY2FsY0RpZmYoKSxhLmNhbGxDaGFuZ2VzSW5mbyhhLnRhYmxlSWQpfSkuY2F0Y2goTT0+TSkuZmluYWxseSgoKT0+e2EubG9hZGluZ1RhYmxlPSEwfSl9KTtyZXR1cm4gZnVuY3Rpb24oZil7cmV0dXJuIGguYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSksdHlwZW9mIGEucm91dGVyLnNu''@;'; put 'put ''YXBzaG90LnBhcmFtcy50YWJsZUlkPiJ1IilyZXR1cm47YS50YWJsZUlkPWEucm91dGVyLnNuYXBzaG90LnBhcmFtcy50YWJsZUlkO2xldCBkPXtBQ1RJT046IlNIT1dfRElGRlMiLFRBQkxFOmEudGFibGVJZCxESUZGVElNRToobmV3IERhdGUpLnRvVVRDU3RyaW5nKCl9O2Euc2FzU3RvcmVT''@;'; put 'put ''ZXJ2aWNlLnNob3dEaWZmcyhkLCJTQVNDb250cm9sVGFibGUiLCJhdWRpdG9ycy9wb3N0ZGF0YSIpLnRoZW4oaD0+e2EucGFyYW1zPWgucGFyYW1zWzBdLGEucmVzcG9uc2U9aCxhLmNhbGNEaWZmKCksYS5jYWxsQ2hhbmdlc0luZm8oYS50YWJsZUlkKX0pLmNhdGNoKGg9PnthLmFjY2VwdExv''@;'; put 'put ''YWRpbmc9ITF9KS5maW5hbGx5KCgpPT57YS5sb2FkaW5nVGFibGU9ITAsYS5zZXRGb2N1cygpfSl9KSgpfW5nT25EZXN0cm95KCl7dGhpcy5fZGV0YWlsc1N1YiYmdGhpcy5fZGV0YWlsc1N1Yi51bnN1YnNjcmliZSgpfXNldEZvY3VzKCl7c2V0VGltZW91dCgoKT0+e2xldCBhPXdpbmRvdy5k''@;'; put 'put ''b2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYWNjZXB0QnRuIik7YSYmYS5mb2N1cygpfSwyMDApfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKGtoKSxHZSh2YyksR2UoQ3UpLEdlKExzKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlw''@;'; put 'put ''ZTpjLHNlbGVjdG9yczpbWyJhcHAtYXBwcm92ZS1kZXRhaWxzIl1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxkZWNsczo0Mix2YXJzOjEyLGNvbnN0czpbWzMsImNsck1vZGFsT3BlbkNoYW5nZSIsImNsck1vZGFsT3BlbiJdLFsxLCJtb2RhbC10aXRsZSJdLFsxLCJtb2Rh''@;'; put 'put ''bC1ib2R5Il0sWzEsInRhYmxlIl0sWzEsImxlZnQiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsIm1vZGFsLWZvb3RlciJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXByaW1hcnkiLDMsImNsaWNrIl0sWzQsIm5nSWYiXSxbMSwiZm9ybS1ibG9jayJdLFsxLCJm''@;'; put 'put ''b3JtLWdyb3VwIl0sWyJmb3IiLCJmb3JtRmllbGRzXzgiXSxbImlkIiwiZm9ybUZpZWxkc184Iiwicm93cyIsIjUiLDEsInctMTAwIiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCIsIm5nTW9kZWxPcHRpb25zIiwiaW5uZXJIVE1MIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4t''@;'; put 'put ''b3V0bGluZSIsMywiY2xpY2siXSxbInR5cGUiLCJzdWJtaXQiLDEsImJ0biIsImJ0bi1zdWNjZXNzLW91dGxpbmUiLDMsImNsaWNrIiwiY2xyTG9hZGluZyJdLFsxLCJjb250ZW50LWFyZWEiXSxbImNsYXNzIiwiY2FyZCIsNCwibmdJZiJdLFsiY2xhc3MiLCJsZWZ0IGxpbmstaXQiLDMsInJv''@;'; put 'put ''dXRlckxpbmsiLDQsIm5nSWYiXSxbImNsYXNzIiwibGVmdCIsNCwibmdJZiJdLFsxLCJsZWZ0IiwibGluay1pdCIsMywicm91dGVyTGluayJdLFsiY2xyVGFiTGluayIsIiJdLFs0LCJjbHJJZkFjdGl2ZSJdLFsxLCJvdmVyZmxvdy1hdXRvIl0sWzEsImNhcmQiXSxbImNsYXNzIiwiY2FyZC1o''@;'; put 'put ''ZWFkZXIgZC1mbGV4IGZsZXgtY29sdW1uIGp1c3RpZnktY29udGVudC1jZW50ZXIiLDQsIm5nSWYiXSxbMSwib3ZlcmZsb3ctYXV0byIsIm1yLTEyIl0sWyJjbGFzcyIsImgtNzB2aCBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtcy1jZW50ZXIi''@;'; put 'put ''LDQsIm5nSWYiXSxbMSwiY2FyZC1oZWFkZXIiLCJkLWZsZXgiLCJmbGV4LWNvbHVtbiIsImp1c3RpZnktY29udGVudC1jZW50ZXIiXSxbImNsYXNzIiwibXQtMCIsNCwibmdJZiJdLFsxLCJtdC0wIl0sWzEsImNhcmQtaGVhZGVyIiwicC0wIl0sWzEsImNsci1yb3ciXSxbMSwiY2xyLWNvbC1t''@;'; put 'put ''ZC00IiwiYXBwcm92YWxCYWNrIl0sWzEsImJ0biIsImJ0bi1vdXRsaW5lIiwibS0wIiwzLCJjbGljayJdLFsic2hhcGUiLCJjYXJldCIsImRpciIsImxlZnQiLCJzaXplIiwiMjAiXSxbMSwiY2xyLWNvbC1tZC00IiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciJdLFsxLCJtdC0w''@;'; put 'put ''IiwiZm9udC13ZWlnaHQtMzAwIl0sWzEsImNsci1jb2wtbWQtNCIsImFwcHJvdmFsSW5mbyJdLFsxLCJ0b29sdGlwIiwidG9vbHRpcC1zbSIsInRvb2x0aXAtdG9wLWxlZnQiLDMsImNsaWNrIl0sWyJzaGFwZSIsImluZm8tc3RhbmRhcmQiLCJzaXplIiwiMjgiXSxbMSwidGV4dC1jZW50ZXIi''@;'; put 'put ''LCJtdC0xMCJdLFsxLCJjYXJkLWJsb2NrIiwicC0wIl0sWyJjbGFzcyIsImNhcmQtdGV4dCIsNCwibmdJZiJdLFsiY2xhc3MiLCJoLTI0dmggZC1mbGV4IGZsZXgtY29sdW1uIGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIiw0LCJuZ0lmIl0sWzEsInRhYmxlQ29u''@;'; put 'put ''dCIsIm10LTAiXSxbImNsYXNzIiwidGV4dC1jZW50ZXIgZm9udC1zaXplLTE4Iiw0LCJuZ0lmIl0sWzEsImQtZmxleCJdLFsiY2xhc3MiLCJsZWZ0Iiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImNsYXNzIiwiZC1mbGV4IiwzLCJuZ0NsYXNzIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiY2Fy''@;'; put 'put ''ZC10ZXh0Il0sWzEsImNsci1yb3ciLCJmb250LXNpemUtMTUiXSxbMSwiY2xyLWNvbC1tZC01Il0sWzEsImNsci1jb2wtbWQtNyJdLFsxLCJjYXJkLWJsb2NrIiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciJdLFsxLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwi''@;'; put 'put ''bXQtMCJdLFsxLCJjbHItcm93IiwiY2xyLWdhcC01IiwiY2xyLWdhcC1zbS0wIl0sWzEsImJ0biIsImJ0bi1zbSIsImJ0bi1vdXRsaW5lIiwidGV4dC1jZW50ZXIiLCJtdC01IiwibXItNWkiLDMsImNsaWNrIl0sWzEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzLW91dGxpbmUiLCJ0ZXh0''@;'; put 'put ''LWNlbnRlciIsIm10LTUiLCJtci01aSIsMywiY2xpY2siXSxbMSwiYnRuIiwiYnRuLXNtIiwiYnRuLWluZm8tb3V0bGluZSIsInRleHQtY2VudGVyIiwibXQtNSIsMywiY2xpY2siXSxbMSwiY2FyZC1ibG9jayIsImQtZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiLCJjbHItZmxleC1j''@;'; put 'put ''b2x1bW4iLCJjbHItZ2FwLTUiLCJjbHItZmxleC1zbS1yb3ciLCJjbHItZ2FwLXNtLTAiLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIl0sWyJpZCIsImFjY2VwdEJ0biIsInR5cGUiLCJzdWJtaXQiLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzIiwibXItNWkiLDMsImNsaWNrIiwiY2xy''@;'; put 'put ''TG9hZGluZyIsImRpc2FibGVkIl0sWyJpZCIsInJlamVjdEJ0biIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuIiwiYnRuLWRhbmdlciIsIm1yLTVpIiwzLCJjbGljayIsImRpc2FibGVkIl0sWzEsIm0tMCIsIm1sLTIwaSJdLFsidHlwZSIsImNoZWNrYm94IiwiY2xyVG9nZ2xlIiwiIiwiY2hlY2tl''@;'; put 'put ''ZCIsIiIsMywibmdNb2RlbENoYW5nZSIsImNoYW5nZSIsIm5nTW9kZWwiXSxbMSwiZm9ybWF0dGVkLXZhbHVlcy10b2dnbGUiXSxbMSwiY2FyZC1ibG9jayIsImQtZmxleCIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiLCJjbHItZmxleC1jb2x1bW4iXSxbImNsYXNzIiwicm93cy1ub3RpY2Ui''@;'; put 'put ''LDQsIm5nSWYiXSxbMSwiZC1mbGV4IiwiY2xyLWZsZXgtY29sdW1uIiwiY2xyLWdhcC01IiwiY2xyLWZsZXgtc20tcm93IiwiY2xyLWdhcC1zbS0wIl0sWzEsImxhYmVsIiwibGFiZWwtd2FybmluZyJdLFsxLCJiYWRnZSJdLFsxLCJsYWJlbCIsImxhYmVsLXN1Y2Nlc3MiXSxbMSwibGFiZWwi''@;'; put 'put ''LCJsYWJlbC1kYW5nZXIiXSxbMSwidGV4dC1jZW50ZXIiLCJmb250LXNpemUtMTgiXSxbMSwibXQtMTUiXSxbMSwibGluay1pdCIsMywicm91dGVyTGluayJdLFsxLCJtdC0xMCJdLFsxLCJyb3dzLW5vdGljZSJdLFsic2hhcGUiLCJleGNsYW1hdGlvbi10cmlhbmdsZSIsMSwibWItNSIsImNv''@;'; put 'put ''bG9yLW9yYW5nZSJdLFsxLCJoLTI0dmgiLCJkLWZsZXgiLCJmbGV4LWNvbHVtbiIsImp1c3RpZnktY29udGVudC1jZW50ZXIiLCJhbGlnbi1pdGVtcy1jZW50ZXIiXSxbMSwic3Bpbm5lciJdLFsiY2xhc3MiLCJtdC0xMCIsNCwibmdJZiJdLFsiY2RzLXRleHQiLCJzZWN0aW9uIl0sWzEsImQt''@;'; put 'put ''ZmxleCIsMywibmdDbGFzcyJdLFsiY2xhc3MiLCJsZWZ0IiwzLCJuZ0NsYXNzIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwibGVmdCIsMywibmdDbGFzcyJdLFsiY2xhc3MiLCJ0b29sdGlwLWNvbnRlbnQiLDQsIm5nSWYiXSxbMSwidG9vbHRpcC1jb250ZW50Il0sWzEsImgtNzB2aCIsImQt''@;'; put 'put ''ZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiLCJmbGV4LWNvbHVtbiIsImFsaWduLWl0ZW1zLWNlbnRlciJdLFsiY2xhc3MiLCJzcGlubmVyIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImQtZmxleCBmbGV4LWNvbHVtbiBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiw0LCJuZ0lmIl0sWyJjbGFz''@;'; put 'put ''cyIsImNhcmQtYmxvY2siLDQsIm5nSWYiXSxbMSwiZC1mbGV4IiwiZmxleC1jb2x1bW4iLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIl0sWyJjbGFzcyIsImNhcmQgbS0wIiw0LCJuZ0lmIl0sWzEsImNhcmQiLCJtLTAiXSxbMSwiY2FyZC1oZWFkZXIiXSxbMSwiYnRuIiwiYnRuLW91dGxpbmUi''@;'; put 'put ''LDMsImNsaWNrIl0sWyJzaGFwZSIsImFuZ2xlIiwiZGlyZWN0aW9uIiwibGVmdCIsInNpemUiLCIyMCJdLFsxLCJjbHItY29sLW1kLTQiXSxbMSwibXQtMCIsImZvbnQtd2VpZ2h0LTMwMCIsInRleHQtY2VudGVyIl0sWzEsIm0tMCIsInRleHQtY2VudGVyIiwiY29sb3ItZGFya2VyLWdyYXki''@;'; put 'put ''XSxbMSwibS0wIiwibWwtMjAtaSJdLFsxLCJjYXJkLWJsb2NrIiwicC0wIiwib3ZlcmZsb3ctYXV0byIsIm1yLTEyIl0sWyJjbGFzcyIsImgtMjV2aCBkLWZsZXggZmxleC1jb2x1bW4ganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXIiLDQsIm5nSWYiXSxbMSwidGFi''@;'; put 'put ''bGVDb250Il0sWzEsImgtMjV2aCIsImQtZmxleCIsImZsZXgtY29sdW1uIiwianVzdGlmeS1jb250ZW50LWNlbnRlciIsImFsaWduLWl0ZW1zLWNlbnRlciJdLFsxLCJjYXJkLWJsb2NrIl0sWzEsImxvYWRlciJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGRlKDAsImNsci1tb2Rh''@;'; put 'put ''bCIsMCksZ2koImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIG1pKGguZGV0YWlsc09wZW4sdil8fChoLmRldGFpbHNPcGVuPXYpLHZ9KSxkZSgxLCJoMyIsMSksTGUoMiwiQXBwcm92YWwgRGV0YWlscyIpLGhlKCksZGUoMywiZGl2IiwyKSg0LCJ0YWJsZSIsMykoNSwi''@;'; put 'put ''dGhlYWQiKSg2LCJ0ciIpKDcsInRoIiw0KSxMZSg4LCJOYW1lIiksaGUoKSxkZSg5LCJ0aCIsNCksTGUoMTAsIlZhbHVlIiksaGUoKSgpKCksZGUoMTEsInRib2R5IiksZ3QoMTIsbHl0LDUsMywidHIiLDUpLGhlKCkoKSgpLGRlKDEzLCJkaXYiLDYpKDE0LCJidXR0b24iLDcpLEZ0KCJjbGlj''@;'; put 'put ''ayIsZnVuY3Rpb24oKXtyZXR1cm4gaC5kZXRhaWxzT3Blbj0hMX0pLExlKDE1LCIgT2sgIiksaGUoKSgpKCksZGUoMTYsImNsci1tb2RhbCIsMCksZ2koImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIG1pKGgudGFibGVGbGFnLHYpfHwoaC50YWJsZUZsYWc9diksdn0p''@;'; put 'put ''LGRlKDE3LCJoMyIsMSksTGUoMTgsIkFsbCBEZXRhaWxzIiksaGUoKSxkZSgxOSwiZGl2IiwyKSxndCgyMCxoeXQsMTksMiwiY2xyLXRhYnMiLDgpLGhlKCksZGUoMjEsImRpdiIsNikoMjIsImJ1dHRvbiIsNyksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBoLnRhYmxlRmxhZz0hMX0p''@;'; put 'put ''LExlKDIzLCIgT2sgIiksaGUoKSgpKCksZGUoMjQsImNsci1tb2RhbCIsMCksZ2koImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIG1pKGgucmVqZWN0T3Blbix2KXx8KGgucmVqZWN0T3Blbj12KSx2fSksZGUoMjUsImgzIiwxKSxMZSgyNiwiUmVhc29uIE1lc3NhZ2Ui''@;'; put 'put ''KSxoZSgpLGRlKDI3LCJkaXYiLDIpKDI4LCJmb3JtIikoMjksInNlY3Rpb24iLDkpKDMwLCJkaXYiLDEwKSgzMSwibGFiZWwiLDExKSxMZSgzMiwiUmVhc29uIGZvciByZWplY3Rpbmc/IiksaGUoKSxkZSgzMywidGV4dGFyZWEiLDEyKSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24odil7''@;'; put 'put ''cmV0dXJuIG1pKGguc3VibWl0UmVhc29uLHYpfHwoaC5zdWJtaXRSZWFzb249diksdn0pLGhlKCkoKSgpKCkoKSxkZSgzNCwiZGl2Iiw2KSgzNSwiYnV0dG9uIiwxMyksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBoLnJlamVjdE9wZW49ITF9KSxMZSgzNiwiIENhbmNlbCAiKSxoZSgp''@;'; put 'put ''LGRlKDM3LCJidXR0b24iLDE0KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGgucmVqZWN0aW5nKCl9KSxMZSgzOCwiIE9LICIpLGhlKCkoKSgpLGRlKDM5LCJkaXYiLDE1KSxndCg0MCxSeXQsNCwyLCJkaXYiLDE2KSg0MSwkeXQsMywyLCJkaXYiLDgpLGhlKCkpLDImZCYmKHBpKCJj''@;'; put 'put ''bHJNb2RhbE9wZW4iLGguZGV0YWlsc09wZW4pLGZlKDEyKSxNZSgibmdGb3JPZiIsaC5rZXlzQXJyYXkpLGZlKDQpLHBpKCJjbHJNb2RhbE9wZW4iLGgudGFibGVGbGFnKSxmZSg0KSxNZSgibmdJZiIsaC50YWJsZUZsYWcpLGZlKDQpLHBpKCJjbHJNb2RhbE9wZW4iLGgucmVqZWN0T3Blbiks''@;'; put 'put ''ZmUoOSkscGkoIm5nTW9kZWwiLGguc3VibWl0UmVhc29uKSxNZSgibmdNb2RlbE9wdGlvbnMiLFlzKDExLGF5dCkpKCJpbm5lckhUTUwiLGguc3VibWl0UmVhc29uLFY0KSxmZSg0KSxNZSgiY2xyTG9hZGluZyIsaC5yZWplY3RMb2FkaW5nKSxmZSgzKSxNZSgibmdJZiIsIWguc3VibWl0dGVk''@;'; put 'put ''KSxmZSgpLE1lKCJuZ0lmIixoLnN1Ym1pdHRlZCkpfSxkZXBlbmRlbmNpZXM6W3d1LG5zLGJhLGw3LHFsLE1kLG5sLG83LCRzLHlwLGMxLEhsLHJzLG91LEt1LGowLEh5LFAyLGRzLElkLEJ5LFNoLF9tLENtLHg3LHdtLHltLFM3XSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpO2Nv''@;'; put 'put ''bnN0IEt5dD1jPT4oe25vQm9yZGVyOmN9KSxxeXQ9KCk9PlszLDUsMTAsMTVdO2Z1bmN0aW9uIFh5dChjLGwpezEmYyYmKGRlKDAsImRpdiIsMTApKDEsImRpdiIsMTEpLEd0KDIsImNsci1pY29uIiwxMiksZGUoMywiaDMiLDEzKSxMZSg0LCJUaGVyZSBhcmUgbm8gYXBwcm92YWxzIHJlbWFp''@;'; put 'put ''bmluZyIpLGhlKCkoKSgpKX1mdW5jdGlvbiBKeXQoYyxsKXsxJmMmJihkZSgwLCJoMyIsMTQpLExlKDEsIiBSRVZJRVcgIiksaGUoKSl9ZnVuY3Rpb24gUXl0KGMsbCl7aWYoMSZjJiYoZGUoMCwicCIsMTUpLExlKDEsIiBZb3UgaGF2ZSAiKSxkZSgyLCJzcGFuIiksTGUoMyksaGUoKSxMZSg0''@;'; put 'put ''LCJhcHByb3ZhbHMgcmVtYWluaW5nICIpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgpO2ZlKDMpLElyKCIiLGEucmVtYWluZWQsIiAiKX19ZnVuY3Rpb24gZV90KGMsbCl7MSZjJiYoZGUoMCwic3BhbiIsMTgpLExlKDEsIiBMb2FkaW5nLi4uICIpLGhlKCkpfWZ1bmN0aW9uIHRfdChjLGwpezEm''@;'; put 'put ''YyYmKGRlKDAsImRpdiIpKDEsImgzIiksTGUoMiwiTG9hZGluZyBhcHByb3ZhbHMgbGlzdCIpLGhlKCkoKSl9ZnVuY3Rpb24gbl90KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwxNiksZ3QoMSxlX3QsMiwwLCJzcGFuIiwxNykoMix0X3QsMywwLCJkaXYiLDkpLGhlKCkpLDImYyl7Y29uc3Qg''@;'; put 'put ''YT1SZSgpO2ZlKCksTWUoIm5nSWYiLCFhLmxvYWRlZCksZmUoKSxNZSgibmdJZiIsIWEubG9hZGVkKX19ZnVuY3Rpb24gcl90KGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsMzYpfWZ1bmN0aW9uIGlfdChjLGwpezEmYyYmR3QoMCwiY2xyLXNwaW5uZXIiLDM3KSwyJmMmJk1lKCJjbHJTbWFs''@;'; put 'put ''bCIsITApfWZ1bmN0aW9uIGFfdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci1kZy1yb3ciKSgxLCJjbHItZGctY2VsbCIpLExlKDIpLGhlKCksZGUoMywiY2xyLWRnLWNlbGwiKSxMZSg0KSxoZSgpLGRlKDUsImNsci1kZy1jZWxsIiksTGUoNiksaGUoKSxkZSg3LCJjbHIt''@;'; put 'put ''ZGctY2VsbCIpLExlKDgpLGhlKCksZGUoOSwiY2xyLWRnLWNlbGwiKSgxMCwiZGl2IiwyNCkoMTEsImEiLDI1KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKS5pbmRleDtyZXR1cm4gQ3QoUmUoMikuZ2V0Q2xpY2tlZChoKSl9KSxHdCgxMiwiY2xyLWljb24iLDI2KSxkZSgx''@;'; put 'put ''Mywic3BhbiIsMjcpLExlKDE0LCJHbyB0byByZXZpZXcgcGFnZSBzY3JlZW4iKSxoZSgpKCksZGUoMTUsImEiLDI4KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKSxmPWguJGltcGxpY2l0LHY9aC5pbmRleCxNPVJlKDIpO3JldHVybiBDdChmLnJlamVjdExvYWRpbmc/IiI6''@;'; put 'put ''TS5yZWplY3RpbmcodikpfSksZ3QoMTYscl90LDEsMCwiY2xyLWljb24iLDI5KSgxNyxpX3QsMSwxLCJjbHItc3Bpbm5lciIsMzApLGRlKDE4LCJzcGFuIiwyNyksTGUoMTksIlJlamVjdCIpLGhlKCkoKSxkZSgyMCwiYSIsMzEpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEp''@;'; put 'put ''LiRpbXBsaWNpdDtyZXR1cm4gQ3QoUmUoMikuZ2V0VGFibGUoaC50YWJsZUlkKSl9KSxHdCgyMSwiY2xyLWljb24iLDMyKSxkZSgyMiwic3BhbiIsMjcpLExlKDIzLCJHbyB0byBzdGFnZWQgZGF0YSBzY3JlZW4iKSxoZSgpKCkoKSgpLGRlKDI0LCJjbHItZGctY2VsbCIsMzMpKDI1LCJidXR0''@;'; put 'put ''b24iLDM0KSxGdCgiY2xpY2siLGZ1bmN0aW9uKGgpe2NvbnN0IGY9d3QoYSkuJGltcGxpY2l0O3JldHVybiBSZSgyKS5kb3dubG9hZChmLnRhYmxlSWQpLEN0KGguc3RvcFByb3BhZ2F0aW9uKCkpfSksR3QoMjYsImNsci1pY29uIiwzNSksaGUoKSgpKCl9aWYoMiZjKXtjb25zdCBhPWwuJGlt''@;'; put 'put ''cGxpY2l0O2ZlKDIpLHdyKGEuc3VibWl0dGVyKSxmZSgyKSx3cihhLmJhc2VUYWJsZSksZmUoMiksd3IoYS5zdWJtaXR0ZWQpLGZlKDIpLHdyKGEuc3VibWl0UmVhc29uKSxmZSg4KSxNZSgibmdJZiIsIWEucmVqZWN0TG9hZGluZyksZmUoKSxNZSgibmdJZiIsYS5yZWplY3RMb2FkaW5nKSxm''@;'; put 'put ''ZSg4KSxNZSgiaWQiLGEudGFibGVJZCl9fWZ1bmN0aW9uIG9fdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIpKDEsImNsci1kYXRhZ3JpZCIsMTkpKDIsImNsci1kZy1jb2x1bW4iLDIwKSxMZSgzLCJTVUJNSVRURVIiKSxoZSgpLGRlKDQsImNsci1kZy1jb2x1bW4iLDIwKSxMZSg1LCJCQVNF''@;'; put 'put ''IFRBQkxFIiksaGUoKSxkZSg2LCJjbHItZGctY29sdW1uIiwyMCksTGUoNywiU1VCTUlUVEVEIiksaGUoKSxkZSg4LCJjbHItZGctY29sdW1uIiwyMCksTGUoOSwiU1VCTUlUIFJFQVNPTiIpLGhlKCksZGUoMTAsImNsci1kZy1jb2x1bW4iKSxMZSgxMSwiQUNUSU9OIiksaGUoKSxkZSgxMiwi''@;'; put 'put ''Y2xyLWRnLWNvbHVtbiIpLExlKDEzLCJET1dOTE9BRCIpLGhlKCksZ3QoMTQsYV90LDI3LDcsImNsci1kZy1yb3ciLDIxKSxkZSgxNSwiY2xyLWRnLWZvb3RlciIpKDE2LCJjbHItZGctcGFnaW5hdGlvbiIsMjIsMCkoMTgsImNsci1kZy1wYWdlLXNpemUiLDIzKSxMZSgxOSwiSXRlbXMgcGVy''@;'; put 'put ''IHBhZ2UiKSxoZSgpLExlKDIwKSxoZSgpKCkoKSgpKSwyJmMpe2NvbnN0IGE9aGEoMTcpLGQ9UmUoKTtmZSgyKSxNZSgiY2xyRGdGaWVsZCIsInN1Ym1pdHRlciIpLGZlKDIpLE1lKCJjbHJEZ0ZpZWxkIiwiYmFzZVRhYmxlIiksZmUoMiksTWUoImNsckRnRmllbGQiLCJzdWJtaXR0ZWQiKSxm''@;'; put 'put ''ZSgyKSxNZSgiY2xyRGdGaWVsZCIsInN1Ym1pdFJlYXNvbiIpLGZlKDYpLE1lKCJjbHJEZ0l0ZW1zT2YiLGQuYXBwcm92ZUxpc3QpLGZlKDIpLE1lKCJjbHJEZ1BhZ2VTaXplIiwxMCksZmUoMiksTWUoImNsclBhZ2VTaXplT3B0aW9ucyIsWXMoMTAscXl0KSksZmUoMiksVmYoIiAiLGEuZmly''@;'; put 'put ''c3RJdGVtKzEsIiAtICIsYS5sYXN0SXRlbSsxLCIgb2YgIixhLnRvdGFsSXRlbXMsIiBhcHByb3ZhbHMgIil9fWxldCBzX3Q9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYpe3RoaXMuc2FzU3RvcmVTZXJ2aWNlPWEsdGhpcy5ldmVudFNlcnZpY2U9ZCx0aGlzLnJvdXRlPWgs''@;'; put 'put ''dGhpcy5zYXNTZXJ2aWNlPWYsdGhpcy5jZHI9dix0aGlzLmxvYWRlZD0hMSx0aGlzLml0ZW1zTnVtPTEwfWdldFRhYmxlKGEpe3RoaXMucm91dGUubmF2aWdhdGVCeVVybCgiL3N0YWdlLyIrYSl9Z2V0Q2xpY2tlZChhKXt2b2lkIDAhPT10aGlzLmFwcHJvdmVMaXN0JiYodGhpcy50YWJsZUlk''@;'; put 'put ''PXRoaXMuYXBwcm92ZUxpc3RbYV0udGFibGVJZCx0aGlzLnJvdXRlLm5hdmlnYXRlQnlVcmwoInJldmlldy9hcHByb3ZlRGV0LyIrdGhpcy5hcHByb3ZlTGlzdFthXS50YWJsZUlkKSl9cmVqZWN0aW5nKGEpe3ZhciBkPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe3ZvaWQgMCE9PWQuYXBw''@;'; put 'put ''cm92ZUxpc3QmJihkLnRhYmxlSWQ9ZC5hcHByb3ZlTGlzdFthXS50YWJsZUlkKTtsZXQgaD17U1RQX0FDVElPTjoiUkVKRUNUX1RBQkxFIixUQUJMRTpkLnRhYmxlSWQsU1RQX1JFQVNPTjoicXVpY2sgcmVqZWN0aW9uIn07dHJ5eyhkLmFwcHJvdmVMaXN0fHxbXSlbYV0ucmVqZWN0TG9hZGlu''@;'; put 'put ''Zz0hMCwoeWllbGQgZC5zYXNTdG9yZVNlcnZpY2UucmVqZWN0aW5nKGgsIkJyb3dzZXJQYXJhbXMiLCJhcHByb3ZlcnMvcmVqZWN0aW9uIikpLmZyb21zYXNbMF0uUkVTUE9OU0UuaW5jbHVkZXMoIlNVQ0NFU1MiKSYmKChkLmFwcHJvdmVMaXN0fHxbXSlbYV0ucmVqZWN0TG9hZGluZz0hMSxk''@;'; put 'put ''LmFwcHJvdmVMaXN0Py5zcGxpY2UoYSwxKSxkLnJlbWFpbmVkLS0sZC5jZHIuZGV0ZWN0Q2hhbmdlcygpKX1jYXRjaChmKXtkLmV2ZW50U2VydmljZS5jYXRjaFJlc3BvbnNlRXJyb3IoImFwcHJvdmVycy9yZWplY3Rpb24iLGYpfX0pKCl9bmdPbkluaXQoKXt2YXIgYT10aGlzO3JldHVybiBl''@;'; put 'put ''ZShmdW5jdGlvbiooKXthLmZldGNoQXBwcm92YWxzKCl9KSgpfWZldGNoQXBwcm92YWxzKCl7dmFyIGE9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7YS5pdGVtc051bT0xMDtsZXQgZD17U1RQX0FDVElPTjoiT1BFTl9BUFBST1ZBTFMifTt0cnl7bGV0IGg9eWllbGQgYS5zYXNTdG9yZVNl''@;'; put 'put ''cnZpY2UuZ2V0QXBwcm92YWxzKGQsIkJyb3dzZXJQYXJhbXMiLCJhcHByb3ZlcnMvZ2V0YXBwcm92YWxzIik7YS5yZW1haW5lZD1oLmZyb21zYXMubGVuZ3RoO2xldCBmPWguZnJvbXNhcy5tYXAoZnVuY3Rpb24odil7cmV0dXJue3RhYmxlSWQ6di5UQUJMRV9JRCxzdWJtaXR0ZXI6di5TVUJN''@;'; put 'put ''SVRURURfQllfTk0sc3VibWl0dGVkOnYuU1VCTUlUVEVEX09OX0RUVE0sYmFzZVRhYmxlOnYuQkFTRV9UQUJMRSxzdWJtaXRSZWFzb246di5TVUJNSVRURURfUkVBU09OX1RYVH19KTthLmFwcHJvdmVMaXN0PWYsYS5sb2FkZWQ9ITB9Y2F0Y2goaCl7YS5ldmVudFNlcnZpY2UuY2F0Y2hSZXNw''@;'; put 'put ''b25zZUVycm9yKCJhcHByb3ZlcnMvZ2V0YXBwcm92YWxzIixoKX19KSgpfWRvd25sb2FkKGEpe2xldCBkPXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLGg9ZC5zZXJ2ZXJVcmwsZj1kLmFwcExvYyx2PXRoaXMuc2FzU2VydmljZS5nZXRFeGVjdXRpb25QYXRoKCk7d2luZG93Lm9w''@;'; put 'put ''ZW4oaCt2KyIvP19wcm9ncmFtPSIrZisiL3NlcnZpY2VzL2F1ZGl0b3JzL2dldGF1ZGl0ZmlsZSZ0YWJsZT0iK2EpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKGtoKSxHZSh2YyksR2UoTHMpLEdlKEdzKSxHZShFcykpfX1zdGF0aWN7dGhp''@;'; put 'put ''cy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLWFwcHJvdmUiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjksdmFyczo4LGNvbnN0czpbWyJwYWdpbmF0aW9uIiwiIl0sWzEsImNvbnRlbnQtYXJlYSJdLFsxLCJjYXJkIl0sWyJjbGFzcyIs''@;'; put 'put ''ImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiw0LCJuZ0lmIl0sWzEsImNhcmQtaGVhZGVyIiwzLCJuZ0NsYXNzIl0sWyJjbGFzcyIsImNlbnRlciBjbHItY29sLW1kLTEyIHRleHQtY2VudGVyIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInRleHQtY2VudGVyIGZvbnQtd2VpZ2h0LTcwMCBj''@;'; put 'put ''b2xvci1kYXJrLWdyYXkiLDQsIm5nSWYiXSxbImNsYXNzIiwiYXBwcm92YWxzLWxpc3Qtd3JhcHBlciIsNCwibmdJZiJdLFsibmctaWYiLCJsb2FkZWQiLDEsImNsci1jb2wtbWQtMTIiXSxbNCwibmdJZiJdLFsxLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIl0sWzEsImNhcmQt''@;'; put 'put ''YmxvY2siLCJub2FwcHJvdmFscy1pbmZvLXdyYXBwZXIiXSxbInNoYXBlIiwid2FybmluZy1zdGFuZGFyZCIsInNpemUiLCI2MCIsMSwiaXMtaW5mbyIsImljb24tZGMtZmlsbCJdLFsxLCJ0ZXh0LWNlbnRlciIsImNvbG9yLWdyYXkiXSxbMSwiY2VudGVyIiwiY2xyLWNvbC1tZC0xMiIsInRl''@;'; put 'put ''eHQtY2VudGVyIl0sWzEsInRleHQtY2VudGVyIiwiZm9udC13ZWlnaHQtNzAwIiwiY29sb3ItZGFyay1ncmF5Il0sWzEsImFwcHJvdmFscy1saXN0LXdyYXBwZXIiXSxbImNsYXNzIiwic3Bpbm5lciIsNCwibmdJZiJdLFsxLCJzcGlubmVyIl0sWzEsImRhdGFncmlkLWNvbXBhY3QiLCJkYXRh''@;'; put 'put ''Z3JpZC1jdXN0b20tZm9vdGVyIl0sWzMsImNsckRnRmllbGQiXSxbNCwiY2xyRGdJdGVtcyIsImNsckRnSXRlbXNPZiJdLFszLCJjbHJEZ1BhZ2VTaXplIl0sWzMsImNsclBhZ2VTaXplT3B0aW9ucyJdLFsicm9sZSIsInRvb2x0aXAiLDEsImQtZmxleCIsImp1c3RpZnktY29udGVudC1hcm91''@;'; put 'put ''bmQiXSxbMSwiY29sdW1uLWNlbnRlciIsImxpbmtzIiwidG9vbHRpcCIsInRvb2x0aXAtbWQiLCJ0b29sdGlwLWJvdHRvbS1sZWZ0IiwiY29sb3ItZ3JlZW4iLDMsImNsaWNrIl0sWyJzaGFwZSIsImNoZWNrIiwic2l6ZSIsIjI0Il0sWzEsInRvb2x0aXAtY29udGVudCJdLFsxLCJjb2x1bW4t''@;'; put 'put ''Y2VudGVyIiwibGlua3MiLCJ0b29sdGlwIiwidG9vbHRpcC1tZCIsInRvb2x0aXAtYm90dG9tLWxlZnQiLCJjb2xvci1yZWQiLDMsImNsaWNrIl0sWyJzaGFwZSIsImJhbiIsInNpemUiLCIyMiIsNCwibmdJZiJdLFszLCJjbHJTbWFsbCIsNCwibmdJZiJdLFsxLCJjb2x1bW4tY2VudGVyIiwi''@;'; put 'put ''bGlua3MiLCJ0b29sdGlwIiwidG9vbHRpcC1tZCIsInRvb2x0aXAtYm90dG9tLWxlZnQiLCJjb2xvci1ibHVlIiwzLCJjbGljayJdLFsic2hhcGUiLCJjb2RlIiwic2l6ZSIsIjI4Il0sWzEsInAtMCIsImQtZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiXSxbImFyaWEtbGFiZWwiLCJE''@;'; put 'put ''b3dubG9hZCBhdWRpdCBmaWxlIiwxLCJidG4iLCJidG4tc3VjY2VzcyIsMywiY2xpY2siLCJpZCJdLFsic2hhcGUiLCJkb3dubG9hZCJdLFsic2hhcGUiLCJiYW4iLCJzaXplIiwiMjIiXSxbMywiY2xyU21hbGwiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJihkZSgwLCJkaXYiLDEp''@;'; put 'put ''KDEsImRpdiIsMiksZ3QoMixYeXQsNSwwLCJkaXYiLDMpLGRlKDMsImRpdiIsNCksZ3QoNCxKeXQsMiwwLCJoMyIsNSkoNSxReXQsNSwxLCJwIiw2KSxoZSgpLGd0KDYsbl90LDMsMiwiZGl2Iiw3KSxkZSg3LCJkaXYiLDgpLGd0KDgsb190LDIxLDExLCJkaXYiLDkpLGhlKCkoKSgpKSwyJmQm''@;'; put 'put ''JihmZSgyKSxNZSgibmdJZiIsMD09PWgucmVtYWluZWQpLGZlKCksTWUoIm5nQ2xhc3MiLHNwKDYsS3l0LCFoLmxvYWRlZCkpLGZlKCksTWUoIm5nSWYiLGgubG9hZGVkJiYwIT09aC5yZW1haW5lZCksZmUoKSxNZSgibmdJZiIsaC5sb2FkZWQmJjAhPT1oLnJlbWFpbmVkKSxmZSgpLE1lKCJu''@;'; put 'put ''Z0lmIiwhaC5sb2FkZWQpLGZlKDIpLE1lKCJuZ0lmIixoLmFwcHJvdmVMaXN0JiYwIT09aC5yZW1haW5lZCkpfSxkZXBlbmRlbmNpZXM6W3d1LGJhLEFtLFFmLFI3LGNPLEp5LFh4LHVPLEVtLFNwLEw3LHRfLFRtLGs3LHhtLEQ3LEhsLFJkXSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9''@;'; put 'put ''KSgpO2NvbnN0IGxfdD1jPT4oe25vQm9yZGVyOmN9KSxjX3Q9KCk9PlszLDUsMTAsMTVdO2Z1bmN0aW9uIHVfdChjLGwpezEmYyYmKGRlKDAsImRpdiIsMTMpKDEsImRpdiIsMTQpLEd0KDIsImNsci1pY29uIiwxNSksZGUoMywiaDMiLDE2KSxMZSg0LCIgWW91IGhhdmUgbm90IHN1Ym1pdHRl''@;'; put 'put ''ZCBhbnkgdGFibGVzICIpLGhlKCkoKSgpKX1mdW5jdGlvbiBkX3QoYyxsKXsxJmMmJihkZSgwLCJoMyIsMTcpLExlKDEsIiBTVUJNSVQgUVVFVUUgIiksaGUoKSl9ZnVuY3Rpb24gaF90KGMsbCl7aWYoMSZjJiYoZGUoMCwicCIsMTgpLExlKDEsIiBZb3UgaGF2ZSAiKSxkZSgyLCJzcGFuIiks''@;'; put 'put ''TGUoMyksaGUoKSxMZSg0LCJzdWJtaXNzaW9ucyB3YWl0aW5nIHRvIGJlIGFwcHJvdmVkICIpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgzKTtmZSgzKSxJcigiIixhLnJlbWFpbmVkLCIgIil9fWZ1bmN0aW9uIGZfdChjLGwpezEmYyYmKGRlKDAsInNwYW4iLDIxKSxMZSgxLCIgTG9hZGluZy4u''@;'; put 'put ''LiAiKSxoZSgpKX1mdW5jdGlvbiBwX3QoYyxsKXsxJmMmJihkZSgwLCJkaXYiKSgxLCJoMyIpLExlKDIsIkxvYWRpbmcgc3VibWl0dGVkIGxpc3QiKSxoZSgpKCkpfWZ1bmN0aW9uIGdfdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMTkpLGd0KDEsZl90LDIsMCwic3BhbiIsMjApKDIscF90''@;'; put 'put ''LDMsMCwiZGl2IiwzKSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoMyk7ZmUoKSxNZSgibmdJZiIsIWEubG9hZGVkKSxmZSgpLE1lKCJuZ0lmIiwhYS5sb2FkZWQpfX1mdW5jdGlvbiBtX3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItZGctcm93IiwyOCksRnQoImNsaWNrIixm''@;'; put 'put ''dW5jdGlvbigpe2NvbnN0IGg9d3QoYSkuJGltcGxpY2l0O3JldHVybiBDdChSZSg1KS5nb1RvRGV0YWlscyhoLnRhYmxlSWQpKX0pLGRlKDEsImNsci1kZy1jZWxsIiksTGUoMiksaGUoKSxkZSgzLCJjbHItZGctY2VsbCIpLExlKDQpLGhlKCksZGUoNSwiY2xyLWRnLWNlbGwiKSxMZSg2KSxo''@;'; put 'put ''ZSgpLGRlKDcsImNsci1kZy1jZWxsIikoOCwiZGl2IiwyOSkoOSwiYSIsMzApLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoUmUoNSkuZ29Ub1N0YWdlKGgudGFibGVJZCkpfSksR3QoMTAsImNsci1pY29uIiwzMSksZGUoMTEsInNwYW4i''@;'; put 'put ''LDMyKSxMZSgxMiwiR28gdG8gc3RhZ2VkIGRhdGEgc2NyZWVuIiksaGUoKSgpKCkoKSxkZSgxMywiY2xyLWRnLWNlbGwiLDMzKSgxNCwiYnV0dG9uIiwzNCksRnQoImNsaWNrIixmdW5jdGlvbihoKXtjb25zdCBmPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gUmUoNSkuZG93bmxvYWQoZi50YWJs''@;'; put 'put ''ZUlkKSxDdChoLnN0b3BQcm9wYWdhdGlvbigpKX0pLEd0KDE1LCJjbHItaWNvbiIsMzUpLGhlKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgyKSx3cihhLmJhc2UpLGZlKDIpLHdyKGEuc3VibWl0dGVkKSxmZSgyKSx3cihhLnN1Ym1pdFJlYXNvbil9fWZ1bmN0aW9uIHZf''@;'; put 'put ''dChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIpKDEsImNsci1kYXRhZ3JpZCIsMjMpKDIsImNsci1kZy1jb2x1bW4iKSxMZSgzLCJCQVNFIFRBQkxFIiksaGUoKSxkZSg0LCJjbHItZGctY29sdW1uIiwyNCksTGUoNSwiU1VCTUlUVEVEIiksaGUoKSxkZSg2LCJjbHItZGctY29sdW1uIiwyNCks''@;'; put 'put ''TGUoNywiU1VCTUlUIFJFQVNPTiIpLGhlKCksZGUoOCwiY2xyLWRnLWNvbHVtbiIsMTMpLExlKDksIkFDVElPTiIpLGhlKCksZGUoMTAsImNsci1kZy1jb2x1bW4iLDEzKSxMZSgxMSwiRE9XTkxPQUQiKSxoZSgpLGd0KDEyLG1fdCwxNiwzLCJjbHItZGctcm93IiwyNSksZGUoMTMsImNsci1k''@;'; put 'put ''Zy1mb290ZXIiKSgxNCwiY2xyLWRnLXBhZ2luYXRpb24iLDI2LDApKDE2LCJjbHItZGctcGFnZS1zaXplIiwyNyksTGUoMTcsIkl0ZW1zIHBlciBwYWdlIiksaGUoKSxMZSgxOCksaGUoKSgpKCkoKSksMiZjKXtjb25zdCBhPWhhKDE1KSxkPVJlKDQpO2ZlKDQpLE1lKCJjbHJEZ0ZpZWxkIiwi''@;'; put 'put ''c3VibWl0dGVkIiksZmUoMiksTWUoImNsckRnRmllbGQiLCJzdWJtaXRSZWFzb24iKSxmZSg2KSxNZSgiY2xyRGdJdGVtc09mIixkLnN1Ym1pdHRlckxpc3QpLGZlKDIpLE1lKCJjbHJEZ1BhZ2VTaXplIiwxMCksZmUoMiksTWUoImNsclBhZ2VTaXplT3B0aW9ucyIsWXMoOCxjX3QpKSxmZSgy''@;'; put 'put ''KSxWZigiICIsYS5maXJzdEl0ZW0rMSwiIC0gIixhLmxhc3RJdGVtKzEsIiBvZiAiLGEudG90YWxJdGVtcywiIHN1Ym1pc3Npb25zICIpfX1mdW5jdGlvbiBiX3QoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDIyKSxndCgxLHZfdCwxOSw5LCJkaXYiLDMpLGhlKCkpLDImYyl7Y29uc3QgYT1S''@;'; put 'put ''ZSgzKTtmZSgpLE1lKCJuZ0lmIixhLnN1Ym1pdHRlckxpc3QmJjAhPT1hLnJlbWFpbmVkKX19ZnVuY3Rpb24geV90KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiw2KSxndCgxLHVfdCw1LDAsImRpdiIsNyksZGUoMiwiZGl2Iiw4KSxndCgzLGRfdCwyLDAsImgzIiw5KSg0LGhfdCw1LDEsInAi''@;'; put 'put ''LDEwKSxoZSgpLGd0KDUsZ190LDMsMiwiZGl2IiwxMSkoNixiX3QsMiwxLCJkaXYiLDEyKSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoMik7ZmUoKSxNZSgibmdJZiIsMD09PWEucmVtYWluZWQmJmEubG9hZGVkKSxmZSgpLE1lKCJuZ0NsYXNzIixzcCg2LGxfdCwhYS5sb2FkZWQpKSxmZSgpLE1l''@;'; put 'put ''KCJuZ0lmIiwwIT09YS5yZW1haW5lZCksZmUoKSxNZSgibmdJZiIsYS5sb2FkZWQmJjAhPT1hLnJlbWFpbmVkKSxmZSgpLE1lKCJuZ0lmIiwhYS5sb2FkZWQpLGZlKCksTWUoIm5nSWYiLGEubG9hZGVkKX19ZnVuY3Rpb24gX190KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiw0KSxndCgxLHlf''@;'; put 'put ''dCw3LDgsImRpdiIsNSksaGUoKSksMiZjKXtjb25zdCBhPVJlKCk7ZmUoKSxNZSgibmdJZiIsIWEuc3ViUmVhZHkpfX1mdW5jdGlvbiB3X3QoYyxsKXsxJmMmJihkZSgwLCJkaXYiKSxHdCgxLCJhcHAtYXBwcm92ZS1kZXRhaWxzIiksaGUoKSl9bGV0IGU4ZT0oKCk9PntjbGFzcyBje2NvbnN0''@;'; put 'put ''cnVjdG9yKGEsZCxoLGYsdil7dGhpcy5zYXNTdG9yZVNlcnZpY2U9YSx0aGlzLmV2ZW50U2VydmljZT1kLHRoaXMucm91dGVyPWgsdGhpcy5yb3V0ZT1mLHRoaXMuc2FzU2VydmljZT12LHRoaXMucmVtYWluZWQ9MCx0aGlzLmxvYWRlZD0hMSx0aGlzLnN1YlJlYWR5PSExLHRoaXMuZGV0YWls''@;'; put 'put ''c09wZW49ITF9Z29Ub1N0YWdlKGEpe3RoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9zdGFnZS8iK2EpfWdvVG9EZXRhaWxzKGEpe3RoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9yZXZpZXcvc3VibWl0dGVkLyIrYSl9Z2V0RGV0YWlscyhhLGQpe3RoaXMuc3ViUmVhZHk9ITAsc2V0VGlt''@;'; put 'put ''ZW91dCgoKT0+e3RoaXMuc2FzU3RvcmVTZXJ2aWNlLnNlbmREZXRhaWxzKGEsZCx0aGlzLnN1Ym1pdERhdGEpfSwwKX1uZ09uSW5pdCgpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2NvbnN0IGQ9YS5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMudGFibGVJZDthLml0ZW1zTnVtPTEw''@;'; put 'put ''O3RyeXtsZXQgaD15aWVsZCBhLnNhc1N0b3JlU2VydmljZS5nZXRTdWJtaXR0cygpO2lmKGEucmVtYWluZWQ9aC5mcm9tc2FzLmxlbmd0aCxhLnJlbWFpbmVkPjApe2Euc3VibWl0dGVyPWguZnJvbXNhc1swXS5TVUJNSVRURURfQllfTk07bGV0IGY9aC5mcm9tc2FzLm1hcChmdW5jdGlvbih2''@;'; put 'put ''KXtyZXR1cm57dGFibGVJZDp2LlRBQkxFX0lELGJhc2U6di5CQVNFX1RBQkxFLHN1Ym1pdHRlZDp2LlNVQk1JVFRFRF9PTl9EVFRNLHN1Ym1pdHRlcjp2LlNVQk1JVFRFRF9CWV9OTSxzdWJtaXRSZWFzb246di5TVUJNSVRURURfUkVBU09OX1RYVH19KTtpZihhLnN1Ym1pdHRlckxpc3Q9Zixh''@;'; put 'put ''LnN1Ym1pdERhdGE9aC5mcm9tc2FzLHR5cGVvZiBkPCJ1Iil7Y29uc3Qgdj1hLnN1Ym1pdHRlckxpc3QuZmluZEluZGV4KE09Pk0udGFibGVJZD09PWQpO3Y+LTEmJmEuZ2V0RGV0YWlscyhhLnN1Ym1pdHRlckxpc3Rbdl0sdil9fWEubG9hZGVkPSEwfWNhdGNoKGgpe2EuZXZlbnRTZXJ2aWNl''@;'; put 'put ''LmNhdGNoUmVzcG9uc2VFcnJvcigiZWRpdG9ycy9nZXRzdWJtaXRzIixoKX19KSgpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuX3JlYWR5U3ViPXRoaXMuc2FzU3RvcmVTZXJ2aWNlLnNldFN1Ym1pdC5zdWJzY3JpYmUoYT0+e3RoaXMuc3ViUmVhZHk9YX0pLHRoaXMuX2JhY2tUb1N1Yj10aGlz''@;'; put 'put ''LnNhc1N0b3JlU2VydmljZS5zZXRTdWJtaXRMaXN0LnN1YnNjcmliZShhPT57dGhpcy5zdWJSZWFkeT0hdGhpcy5zdWJSZWFkeSx0aGlzLmRldGFpbHNPcGVuPSExfSl9ZG93bmxvYWQoYSl7bGV0IGQ9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCksaD1kLnNlcnZlclVybCxmPWQu''@;'; put 'put ''YXBwTG9jLHY9dGhpcy5zYXNTZXJ2aWNlLmdldEV4ZWN1dGlvblBhdGgoKTt3aW5kb3cub3BlbihoK3YrIi8/X3Byb2dyYW09IitmKyIvc2VydmljZXMvYXVkaXRvcnMvZ2V0YXVkaXRmaWxlJnRhYmxlPSIrYSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXco''@;'; put 'put ''ZHx8YykoR2Uoa2gpLEdlKHZjKSxHZShMcyksR2UoQ3UpLEdlKEdzKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtc3VibWl0dGVyIl1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxkZWNsczozLHZhcnM6Mixjb25zdHM6W1si''@;'; put 'put ''cGFnaW5hdGlvbiIsIiJdLFsxLCJ3LTEwMCJdLFsiY2xhc3MiLCJjb250ZW50LWFyZWEiLDQsIm5nSWYiXSxbNCwibmdJZiJdLFsxLCJjb250ZW50LWFyZWEiXSxbImNsYXNzIiwiY2FyZCIsNCwibmdJZiJdLFsxLCJjYXJkIl0sWyJjbGFzcyIsImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2Vu''@;'; put 'put ''dGVyIiw0LCJuZ0lmIl0sWzEsImNhcmQtaGVhZGVyIiwzLCJuZ0NsYXNzIl0sWyJjbGFzcyIsImNlbnRlciBjbHItY29sLW1kLTEyIHRleHQtY2VudGVyIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInRleHQtY2VudGVyIGZvbnQtd2VpZ2h0LTcwMCBjb2xvci1kYXJrLWdyYXkiLDQsIm5nSWYiXSxb''@;'; put 'put ''ImNsYXNzIiwiaC03MHZoIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGZsZXgtY29sdW1uIGFsaWduLWl0ZW1zLWNlbnRlciIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItY29sLW1kLTEyIiw0LCJuZ0lmIl0sWzEsImQtZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiXSxbMSwi''@;'; put 'put ''bm8tc3VibWl0dGVkLXRhYmxlcyIsImNhcmQtYmxvY2siLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwiZmxleC1jb2x1bW4iLCJhbGlnbi1pdGVtcy1jZW50ZXIiXSxbInNoYXBlIiwid2FybmluZy1zdGFuZGFyZCIsInNpemUiLCI2MCIsMSwiaXMtaW5mbyJdLFsxLCJ0ZXh0''@;'; put 'put ''LWNlbnRlciIsImNvbG9yLWdyYXkiXSxbMSwiY2VudGVyIiwiY2xyLWNvbC1tZC0xMiIsInRleHQtY2VudGVyIl0sWzEsInRleHQtY2VudGVyIiwiZm9udC13ZWlnaHQtNzAwIiwiY29sb3ItZGFyay1ncmF5Il0sWzEsImgtNzB2aCIsImQtZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIi''@;'; put 'put ''LCJmbGV4LWNvbHVtbiIsImFsaWduLWl0ZW1zLWNlbnRlciJdLFsiY2xhc3MiLCJzcGlubmVyIiw0LCJuZ0lmIl0sWzEsInNwaW5uZXIiXSxbMSwiY2xyLWNvbC1tZC0xMiJdLFsxLCJkYXRhZ3JpZC1jb21wYWN0IiwiZGF0YWdyaWQtY3VzdG9tLWZvb3RlciJdLFszLCJjbHJEZ0ZpZWxkIl0s''@;'; put 'put ''WyJjbGFzcyIsImN1cnNvci1wb2ludGVyIiwzLCJjbGljayIsNCwiY2xyRGdJdGVtcyIsImNsckRnSXRlbXNPZiJdLFszLCJjbHJEZ1BhZ2VTaXplIl0sWzMsImNsclBhZ2VTaXplT3B0aW9ucyJdLFsxLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siXSxbInJvbGUiLCJ0b29sdGlwIiwiYXJp''@;'; put 'put ''YS1sYWJlbCIsIkdvIHRvIHN0YWdlZCBkYXRhIHNjcmVlbiIsMSwicm93IiwianVzdGlmeS1jb250ZW50LWFyb3VuZCJdLFsxLCJjb2x1bW4tY2VudGVyIiwibGlua3MiLCJ0b29sdGlwIiwidG9vbHRpcC1tZCIsInRvb2x0aXAtYm90dG9tLWxlZnQiLCJjb2xvci1ibHVlIiwzLCJjbGljayJd''@;'; put 'put ''LFsic2hhcGUiLCJjb2RlIiwic2l6ZSIsIjI4Il0sWzEsInRvb2x0aXAtY29udGVudCJdLFsxLCJwLTAiLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIl0sWyJhcmlhLWxhYmVsIiwiRG93bmxvYWQgYXVkaXQgZmlsZSBmb3IgdGFibGUgcmVjb3JkIiwxLCJidG4iLCJidG4tc3Vj''@;'; put 'put ''Y2VzcyIsMywiY2xpY2siXSxbInNoYXBlIiwiZG93bmxvYWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJihkZSgwLCJkaXYiLDEpLGd0KDEsX190LDIsMSwiZGl2IiwyKSgyLHdfdCwyLDAsImRpdiIsMyksaGUoKSksMiZkJiYoZmUoKSxNZSgibmdJZiIsIWguc3ViUmVhZHkpLGZl''@;'; put 'put ''KCksTWUoIm5nSWYiLGguc3ViUmVhZHkpKX0sZGVwZW5kZW5jaWVzOlt3dSxiYSxBbSxRZixSNyxjTyxKeSxYeCx1TyxFbSxTcCxMNyx0XyxUbSxrNyx4bSxENyxIbCxRNmVdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCk7Y29uc3QgQ190PShjLGwpPT4oe3JlamVjdGVkOmMsYWNj''@;'; put 'put ''ZXB0ZWQ6bH0pO2Z1bmN0aW9uIFNfdChjLGwpezEmYyYmKGRlKDAsImRpdiIsMTIpLEd0KDEsImNsci1pY29uIiwxMyksZGUoMiwiaDMiLDE0KSxMZSgzLCJUaGVyZSBpcyBubyBoaXN0b3J5IHRvIHNob3ciKSxoZSgpKCkpfWZ1bmN0aW9uIE1fdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1Mbigp''@;'; put 'put ''O2RlKDAsImEiLDE3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSgpLiRpbXBsaWNpdCxmPVJlKCk7cmV0dXJuIEN0KGYuZ2V0VGFibGUoZi5hcHByb3ZlRGF0YVtoXSkpfSksTGUoMSksaGUoKX1pZigyJmMpe2NvbnN0IGE9UmUoKS4kaW1wbGljaXQsZD1SZSgpO2Zl''@;'; put 'put ''KCksd3IoZC5hcHByb3ZlRGF0YVthXSl9fWZ1bmN0aW9uIHhfdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIpKDEsImEiLDE3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSgpLiRpbXBsaWNpdCxmPVJlKCk7cmV0dXJuIEN0KGYuZ2V0QmFzZVRh''@;'; put 'put ''YmxlKGYuYXBwcm92ZURhdGFbaF0pKX0pLExlKDIsIlZJRVciKSxoZSgpLGRlKDMsInNwYW4iKSxMZSg0LCIgLyAiKSxoZSgpLGRlKDUsImEiLDE3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSgpLiRpbXBsaWNpdCxmPVJlKCk7cmV0dXJuIEN0KGYuZ2V0RWRpdFRh''@;'; put 'put ''YmxlKGYuYXBwcm92ZURhdGFbaF0pKX0pLExlKDYsIkVESVQiKSxoZSgpKCl9fWZ1bmN0aW9uIEVfdChjLGwpe2lmKDEmYyYmKGRlKDAsInNwYW4iKSxMZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoKS4kaW1wbGljaXQsZD1SZSgpO2ZlKCksd3IoZC5hcHByb3ZlRGF0YVthXSl9fWZ1bmN0''@;'; put 'put ''aW9uIFRfdChjLGwpe2lmKDEmYyYmKGRlKDAsInRyIikoMSwidGQiLDYpLExlKDIpLGhlKCksZGUoMywidGQiLDYpLGd0KDQsTV90LDIsMSwiYSIsMTUpKDUseF90LDcsMCwiZGl2IiwxNikoNixFX3QsMiwxLCJzcGFuIiwxNiksaGUoKSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1s''@;'; put 'put ''LmluZGV4O2ZlKDIpLHdyKGEpLGZlKDIpLE1lKCJuZ0lmIixkPDEpLGZlKCksTWUoIm5nSWYiLGQ8MiYmZD49MSksZmUoKSxNZSgibmdJZiIsZD49Mil9fWZ1bmN0aW9uIEFfdChjLGwpezEmYyYmKGRlKDAsInNwYW4iLDIwKSxMZSgxLCIgTG9hZGluZy4uLiAiKSxoZSgpKX1mdW5jdGlvbiBr''@;'; put 'put ''X3QoYyxsKXsxJmMmJihkZSgwLCJkaXYiKSgxLCJoMyIpLExlKDIsIkxvYWRpbmcgaGlzdG9yeSIpLGhlKCkoKSl9ZnVuY3Rpb24gRF90KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwxOCksZ3QoMSxBX3QsMiwwLCJzcGFuIiwxOSkoMixrX3QsMywwLCJkaXYiLDE2KSxoZSgpKSwyJmMpe2Nv''@;'; put 'put ''bnN0IGE9UmUoKTtmZSgpLE1lKCJuZ0lmIiwhYS5sb2FkZWQpLGZlKCksTWUoIm5nSWYiLCFhLmxvYWRlZCl9fWZ1bmN0aW9uIElfdChjLGwpezEmYyYmKGRlKDAsImgzIiwyOCksTGUoMSwiSElTVE9SWSIpLGhlKCkpfWZ1bmN0aW9uIFJfdChjLGwpe2lmKDEmYyYmKGRlKDAsInAiLDI5KSxM''@;'; put 'put ''ZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoMik7ZmUoKSxJcigiIFRvIHVubG9jayBtb3JlIHRoYW4gIixhLmxpY2VuY2VTdGF0ZS52YWx1ZS5oaXN0b3J5X3Jvd3NfYWxsb3dlZCwiIHJlY29yZHMsIGNvbnRhY3Qgc3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyAiKX19ZnVuY3Rpb24gTF90''@;'; put 'put ''KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLWRnLXJvdyIsMzMpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoUmUoMykuZ2V0QXBwckluZGV4KGgpKX0pLGRlKDEsImNsci1kZy1jZWxsIiwzNCkoMiwiYSIsMzUpLEZ0''@;'; put 'put ''KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoUmUoMykuZ2V0QmFzZVRhYmxlKGguYmFzZXRhYmxlKSl9KSxMZSgzKSxoZSgpKCksZGUoNCwiY2xyLWRnLWNlbGwiLDM2KSxMZSg1KSxoZSgpLGRlKDYsImNsci1kZy1jZWxsIiwzNCksTGUoNyks''@;'; put 'put ''aGUoKSxkZSg4LCJjbHItZGctY2VsbCIsMzQpLExlKDkpLGhlKCksZGUoMTAsImNsci1kZy1jZWxsIiwzNCksTGUoMTEpLGhlKCksZGUoMTIsImNsci1kZy1jZWxsIiwzNCksTGUoMTMpLGhlKCksZGUoMTQsImNsci1kZy1jZWxsIiwzNykoMTUsImJ1dHRvbiIsMzgpLEZ0KCJjbGljayIsZnVu''@;'; put 'put ''Y3Rpb24oaCl7Y29uc3QgZj13dChhKS4kaW1wbGljaXQ7cmV0dXJuIFJlKDMpLmRvd25sb2FkKGYudGFibGVJZCksQ3QoaC5zdG9wUHJvcGFnYXRpb24oKSl9KSxHdCgxNiwiY2xyLWljb24iLDM5KSxoZSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoMyksd3IoYS5iYXNl''@;'; put 'put ''dGFibGUpLGZlKCksTWUoIm5nQ2xhc3MiLGxwKDcsQ190LCJSRUpFQ1RFRCI9PT1hLnN0YXR1cywiQVBQUk9WRUQiPT09YS5zdGF0dXMpKSxmZSgpLHdyKGEuc3RhdHVzKSxmZSgyKSx3cihhLnN1Ym1pdHRlciksZmUoMiksd3IoYS5zdWJtaXR0ZWRSZWFzb24pLGZlKDIpLHdyKGEuc3VibWl0''@;'; put 'put ''dGVkKSxmZSgyKSx3cihhLnJldmlld2VkKX19ZnVuY3Rpb24gT190KGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xyLWRhdGFncmlkIiwzMCkoMSwiY2xyLWRnLWNvbHVtbiIsMzEpLExlKDIsIkJBU0VfVEFCTEUiKSxoZSgpLGRlKDMsImNsci1kZy1jb2x1bW4iLDMxKSxMZSg0LCJTVEFUVVMiKSxo''@;'; put 'put ''ZSgpLGRlKDUsImNsci1kZy1jb2x1bW4iLDMxKSxMZSg2LCJTVUJNSVRURVIiKSxoZSgpLGRlKDcsImNsci1kZy1jb2x1bW4iLDMxKSxMZSg4LCJTVUJNSVQgUkVBU09OIiksaGUoKSxkZSg5LCJjbHItZGctY29sdW1uIiwzMSksTGUoMTAsIlNVQk1JVFRFRCIpLGhlKCksZGUoMTEsImNsci1k''@;'; put 'put ''Zy1jb2x1bW4iLDMxKSxMZSgxMiwiQVBQUk9WRUQgLyBSRUpFQ1RFRCIpLGhlKCksZGUoMTMsImNsci1kZy1jb2x1bW4iKSxMZSgxNCwiRE9XTkxPQUQiKSxoZSgpLGd0KDE1LExfdCwxNywxMCwiY2xyLWRnLXJvdyIsMzIpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgyKTtmZSgpLE1lKCJjbHJE''@;'; put 'put ''Z0ZpZWxkIiwiYmFzZXRhYmxlIiksZmUoMiksTWUoImNsckRnRmllbGQiLCJzdGF0dXMiKSxmZSgyKSxNZSgiY2xyRGdGaWVsZCIsInN1Ym1pdHRlciIpLGZlKDIpLE1lKCJjbHJEZ0ZpZWxkIiwic3VibWl0dGVkUmVhc29uIiksZmUoMiksTWUoImNsckRnRmllbGQiLCJzdWJtaXR0ZWQiKSxm''@;'; put 'put ''ZSgyKSxNZSgiY2xyRGdGaWVsZCIsInJldmlld2VkIiksZmUoNCksTWUoImNsckRnSXRlbXNPZiIsYS5oaXN0b3J5KX19ZnVuY3Rpb24gUF90KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiYnV0dG9uIiw0MCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChS''@;'; put 'put ''ZSgyKS5sb2FkRGF0YSgpKX0pLExlKDEpLGhlKCl9aWYoMiZjKXtjb25zdCBhPVJlKDIpO01lKCJjbHJMb2FkaW5nIixhLmxvYWRpbmdNb3JlKSxmZSgpLElyKCIgTG9hZCAiLGEucm93c0xlZnRUb0xvYWQsIiBtb3JlICIpfX1mdW5jdGlvbiBGX3QoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYi''@;'; put 'put ''LDIxKSgxLCJkaXYiLDIyKSxndCgyLElfdCwyLDAsImgzIiwyMykoMyxSX3QsMiwxLCJwIiwyNCksaGUoKSxndCg0LE9fdCwxNiw3LCJjbHItZGF0YWdyaWQiLDI1KSxkZSg1LCJkaXYiLDI2KSxndCg2LFBfdCwyLDIsImJ1dHRvbiIsMjcpLGhlKCkoKSksMiZjKXtjb25zdCBhPVJlKCk7ZmUo''@;'; put 'put ''MiksTWUoIm5nSWYiLGEubG9hZGVkKSxmZSgpLE1lKCJuZ0lmIixhLmxpY2VuY2VTdGF0ZS52YWx1ZS5oaXN0b3J5X3Jvd3NfYWxsb3dlZCE9PWEuSW5maW5pdHkpLGZlKCksTWUoIm5nSWYiLGEubG9hZGVkKSxmZSgyKSxNZSgibmdJZiIsYS5saWNlbmNlU3RhdGUudmFsdWUuaGlzdG9yeV9y''@;'; put 'put ''b3dzX2FsbG93ZWQ9PT1hLkluZmluaXR5JiZhLnJvd3NMZWZ0VG9Mb2FkPjApfX1jb25zdCBIX3Q9W3twYXRoOiJhcHByb3ZlIixjb21wb25lbnQ6c190fSx7cGF0aDoiYXBwcm92ZURldC86dGFibGVJZCIsY29tcG9uZW50OlE2ZX0se3BhdGg6InN1Ym1pdHRlZCIsY29tcG9uZW50OmU4ZX0s''@;'; put 'put ''e3BhdGg6InN1Ym1pdHRlZC86dGFibGVJZCIsY29tcG9uZW50OmU4ZX0se3BhdGg6Imhpc3RvcnkiLGNvbXBvbmVudDooKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdil7dGhpcy5saWNlbmNlU2VydmljZT1hLHRoaXMuc2FzU3RvcmVTZXJ2aWNlPWQsdGhpcy5ldmVudFNlcnZp''@;'; put 'put ''Y2U9aCx0aGlzLnJvdXRlcj1mLHRoaXMuc2FzU2VydmljZT12LHRoaXMuaGlzdG9yeT1bXSx0aGlzLnRhYmxlVGl0bGVzPVtdLHRoaXMuaGlzdG9yeUFycj1bXSx0aGlzLmxvYWRlZD0hMSx0aGlzLml0ZW1zTnVtPTEwLHRoaXMub3Blbk1vZGFsPSExLHRoaXMubm9EYXRhPSExLHRoaXMuYXBw''@;'; put 'put ''cm92ZURhdGE9e30sdGhpcy5zYXNqc0NvbmZpZz1uZXcgbWguU0FTanNDb25maWcsdGhpcy5oaXN0UGFyYW1zPXtISVNUOjAsU1RBUlRST1c6MSxOT0JTOi0xfSx0aGlzLmxvYWRpbmdNb3JlPSExLHRoaXMubGljZW5jZVN0YXRlPXRoaXMubGljZW5jZVNlcnZpY2UubGljZW5jZVN0YXRlLHRo''@;'; put 'put ''aXMuSW5maW5pdHk9MS8wLHRoaXMuc2FzanNDb25maWc9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCl9Z2V0VGFibGUoYSl7dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL3N0YWdlLyIrYSl9Z2V0QmFzZVRhYmxlKGEpe3RoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi92aWV3''@;'; put 'put ''L2RhdGEvIithKX1nZXRFZGl0VGFibGUoYSl7dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL2VkaXRvci8iK2EpfWdldEFwcHJJbmRleChhKXtjb25zdCBkPXRoaXMuaGlzdG9yeUFyci5maW5kSW5kZXgoaD0+aC5UQUJMRV9JRD09PWEudGFibGVJZCk7ZD4tMSYmKHRoaXMuYXBwcm92ZURh''@;'; put 'put ''dGE9dGhpcy5oaXN0b3J5QXJyW2RdLHRoaXMub3Blbk1vZGFsPSEwKX1nZXQgcm93c0xlZnRUb0xvYWQoKXtjb25zdCBhPXRoaXMuaGlzdFBhcmFtcy5OT0JTLXRoaXMuaGlzdG9yeS5sZW5ndGgsZD10aGlzLmhpc3RQYXJhbXMuSElTVDtyZXR1cm4gYTw9MD8wOmE+ZD9kOmF9ZG93bmxvYWQo''@;'; put 'put ''YSl7bGV0IGQ9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCksaD1kLnNlcnZlclVybCxmPWQuYXBwTG9jLHY9dGhpcy5zYXNTZXJ2aWNlLmdldEV4ZWN1dGlvblBhdGgoKTt3aW5kb3cub3BlbihoK3YrIi8/X3Byb2dyYW09IitmKyIvc2VydmljZXMvYXVkaXRvcnMvZ2V0YXVkaXRm''@;'; put 'put ''aWxlJnRhYmxlPSIrYSsiJl9jb250ZXh0bmFtZT0iK3RoaXMuc2FzanNDb25maWcuY29udGV4dE5hbWUpfWxvYWREYXRhKCl7dmFyIGE9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7bGV0IGQ9e1NUQVJUUk9XOmEuaGlzdFBhcmFtcy5ISVNUK2EuaGlzdFBhcmFtcy5TVEFSVFJPV307YS5s''@;'; put 'put ''b2FkaW5nTW9yZT0hMDt0cnl7bGV0IGYsaD15aWVsZCBhLnNhc1N0b3JlU2VydmljZS5nZXRIaXN0b3J5KGQsIkJyb3dzZXJQYXJhbXMiLCJhcHByb3ZlcnMvZ2V0aGlzdG9yeSIpO2EubG9hZGluZ01vcmU9ITEsYS5oaXN0UGFyYW1zPWguaGlzdHBhcmFtc1swXTtjb25zdCB2PWguZnJvbXNh''@;'; put 'put ''cy5zbGljZSgwLGEubGljZW5jZVN0YXRlLnZhbHVlLmhpc3Rvcnlfcm93c19hbGxvd2VkKTtpZih2Lmxlbmd0aD4wKXtjb25zdCBNPXY7YS5oaXN0b3J5QXJyPXYsZj1PYmplY3Qua2V5cyhNWzBdKSxhLnRhYmxlVGl0bGVzPWY7bGV0IEQ9di5tYXAoZnVuY3Rpb24oWil7cmV0dXJue3RhYmxl''@;'; put 'put ''SWQ6Wi5UQUJMRV9JRCxzdWJtaXR0ZXI6Wi5TVUJNSVRURVIsc3VibWl0dGVkUmVhc29uOlouU1VCTUlUVEVEX1JFQVNPTl9UWFQsc3VibWl0dGVkOlouU1VCTUlUVEVELHN0YXR1czpaLlNUQVRVUyxyZXZpZXdSZWFzb246Wi5SRVZJRVdfUkVBU09OX1RYVCxyZXZpZXdlcjpaLlJFVklFV0VS''@;'; put 'put ''LHJldmlld2VkOlouUkVWSUVXRUQsbnVtT2ZBcHByb3ZhbHM6Wi5OVU1fT0ZfQVBQUk9WQUxTX1JFUVVJUkVELGJhc2V0YWJsZTpaLkJBU0VfVEFCTEV9fSk7YS5oaXN0b3J5LnB1c2goLi4uRCksYS5sb2FkZWQ9ITB9ZWxzZSBhLmxvYWRlZD0hMCwwPT09YS5oaXN0b3J5Lmxlbmd0aCYmKGEu''@;'; put 'put ''bm9EYXRhPSEwKX1jYXRjaChoKXthLmV2ZW50U2VydmljZS5jYXRjaFJlc3BvbnNlRXJyb3IoImFwcHJvdmVycy9nZXRoaXN0b3J5IixoKSxhLmxvYWRpbmdNb3JlPSExfX0pKCl9bmdPbkluaXQoKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXthLmxvYWREYXRhKCl9KSgpfXN0''@;'; put 'put ''YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKHUxKSxHZShraCksR2UodmMpLEdlKExzKSxHZShHcykpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLWhpc3RvcnkiXV0saG9zdEF0dHJzOlsxLCJjb250''@;'; put 'put ''ZW50LWNvbnRhaW5lciJdLGRlY2xzOjIwLHZhcnM6Nixjb25zdHM6W1sxLCJjb250ZW50LWFyZWEiXSxbImlkIiwibm9EYXRhQ29udGFpbmVyIiwiY2xhc3MiLCJjYXJkLWJsb2NrIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGZsZXgtY29sdW1uIGFsaWduLWl0ZW1zLWNlbnRlciIs''@;'; put 'put ''NCwibmdJZiJdLFszLCJjbHJNb2RhbE9wZW5DaGFuZ2UiLCJjbHJNb2RhbE9wZW4iLCJjbHJNb2RhbFNpemUiXSxbMSwibW9kYWwtdGl0bGUiXSxbMSwibW9kYWwtYm9keSJdLFsxLCJ0YWJsZSJdLFsxLCJsZWZ0Il0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJtb2RhbC1mb290ZXIiXSxb''@;'; put 'put ''InR5cGUiLCJidXR0b24iLCJhcmlhLWxhYmVsIiwiQ2xvc2UgbW9kYWwiLDEsImJ0biIsImJ0bi1vdXRsaW5lIiwzLCJjbGljayJdLFsiY2xhc3MiLCJoLTcwdmggZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgZmxleC1jb2x1bW4gYWxpZ24taXRlbXMtY2VudGVyIiw0LCJuZ0lmIl0s''@;'; put 'put ''WyJjbGFzcyIsImNhcmQiLDQsIm5nSWYiXSxbImlkIiwibm9EYXRhQ29udGFpbmVyIiwxLCJjYXJkLWJsb2NrIiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciIsImZsZXgtY29sdW1uIiwiYWxpZ24taXRlbXMtY2VudGVyIl0sWyJzaGFwZSIsIndhcm5pbmctc3RhbmRhcmQiLCJz''@;'; put 'put ''aXplIiwiNjAiLDEsImlzLWluZm8iXSxbMSwidGV4dC1jZW50ZXIiLCJjb2xvci1ncmF5Il0sWyJjbGFzcyIsImN1cnNvci1wb2ludGVyIHRhYmxlLWxpbmsiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWzQsIm5nSWYiXSxbMSwiY3Vyc29yLXBvaW50ZXIiLCJ0YWJsZS1saW5rIiwzLCJjbGljayJd''@;'; put 'put ''LFsxLCJoLTcwdmgiLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwiZmxleC1jb2x1bW4iLCJhbGlnbi1pdGVtcy1jZW50ZXIiXSxbImNsYXNzIiwic3Bpbm5lciIsNCwibmdJZiJdLFsxLCJzcGlubmVyIl0sWzEsImNhcmQiXSxbMSwiY2FyZC1oZWFkZXIiXSxbImNsYXNzIiwi''@;'; put 'put ''Y2VudGVyIGNsci1jb2wtbWQtMTIgdGV4dC1jZW50ZXIiLDQsIm5nSWYiXSxbImNsYXNzIiwidGV4dC1jZW50ZXIgZm9udC13ZWlnaHQtNzAwIGNvbG9yLWRhcmstZ3JheSIsNCwibmdJZiJdLFsiY2xhc3MiLCJkYXRhZ3JpZC1oaXN0b3J5IGRhdGFncmlkLWN1c3RvbS1mb290ZXIiLDQsIm5n''@;'; put 'put ''SWYiXSxbMSwibG9hZC1tb3JlIiwiZC1mbGV4IiwiY2xyLWp1c3RpZnktY29udGVudC1jZW50ZXIiLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIl0sWyJjbGFzcyIsImJ0biBidG4tc3VjY2VzcyIsMywiY2xyTG9hZGluZyIsImNsaWNrIiw0LCJuZ0lmIl0sWzEsImNlbnRlciIsImNsci1jb2wt''@;'; put 'put ''bWQtMTIiLCJ0ZXh0LWNlbnRlciJdLFsxLCJ0ZXh0LWNlbnRlciIsImZvbnQtd2VpZ2h0LTcwMCIsImNvbG9yLWRhcmstZ3JheSJdLFsxLCJkYXRhZ3JpZC1oaXN0b3J5IiwiZGF0YWdyaWQtY3VzdG9tLWZvb3RlciJdLFszLCJjbHJEZ0ZpZWxkIl0sWzMsImNsaWNrIiw0LCJjbHJEZ0l0ZW1z''@;'; put 'put ''IiwiY2xyRGdJdGVtc09mIl0sWzMsImNsaWNrIl0sWzEsInZlckNlbnRlciJdLFsxLCJidG4iLCJidG4tc20iLCJidG4tbGluayIsIm0tMCIsMywiY2xpY2siXSxbMSwidmVyQ2VudGVyIiwzLCJuZ0NsYXNzIl0sWzEsInZlckNlbnRlciIsInAtMCIsImQtZmxleCIsImp1c3RpZnktY29udGVu''@;'; put 'put ''dC1jZW50ZXIiXSxbImFyaWEtbGFiZWwiLCJEb3dubG9hZCBhdWRpdCBmaWxlIiwxLCJidG4iLCJidG4tc3VjY2VzcyIsMywiY2xpY2siXSxbInNoYXBlIiwiZG93bmxvYWQiXSxbMSwiYnRuIiwiYnRuLXN1Y2Nlc3MiLDMsImNsaWNrIiwiY2xyTG9hZGluZyJdXSx0ZW1wbGF0ZTpmdW5jdGlv''@;'; put 'put ''bihkLGgpezEmZCYmKGRlKDAsImRpdiIsMCksZ3QoMSxTX3QsNCwwLCJkaXYiLDEpLGRlKDIsImNsci1tb2RhbCIsMiksZ2koImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIG1pKGgub3Blbk1vZGFsLHYpfHwoaC5vcGVuTW9kYWw9diksdn0pLGRlKDMsImg0IiwzKSxM''@;'; put 'put ''ZSg0LCJBcHByb3ZhbCBkZXRhaWxzIiksaGUoKSxkZSg1LCJkaXYiLDQpKDYsInRhYmxlIiw1KSg3LCJ0aGVhZCIpKDgsInRyIikoOSwidGgiLDYpLExlKDEwLCJOYW1lIiksaGUoKSxkZSgxMSwidGgiLDYpLExlKDEyLCJWYWx1ZSIpLGhlKCkoKSgpLGRlKDEzLCJ0Ym9keSIpLGd0KDE0LFRf''@;'; put 'put ''dCw3LDQsInRyIiw3KSxoZSgpKCkoKSxkZSgxNSwiZGl2Iiw4KSgxNiwiYnV0dG9uIiw5KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGgub3Blbk1vZGFsPSExfSksTGUoMTcsIiBPSyAiKSxoZSgpKCkoKSxndCgxOCxEX3QsMywyLCJkaXYiLDEwKSgxOSxGX3QsNyw0LCJkaXYiLDEx''@;'; put 'put ''KSxoZSgpKSwyJmQmJihmZSgpLE1lKCJuZ0lmIixoLm5vRGF0YSksZmUoKSxwaSgiY2xyTW9kYWxPcGVuIixoLm9wZW5Nb2RhbCksTWUoImNsck1vZGFsU2l6ZSIsInhsIiksZmUoMTIpLE1lKCJuZ0Zvck9mIixoLnRhYmxlVGl0bGVzKSxmZSg0KSxNZSgibmdJZiIsIWgubG9hZGVkKSxmZSgp''@;'; put 'put ''LE1lKCJuZ0lmIiwhaC5ub0RhdGEmJmgubG9hZGVkKSl9LGRlcGVuZGVuY2llczpbd3UsbnMsYmEsQW0sUWYsUjcsSnksRW0sU3AsTDcsdF8sVG0sazcseG0sRDcsSGwsb3UsS3UsajAsUDJdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCl9XTtsZXQgTl90PSgoKT0+e2NsYXNzIGN7''@;'; put 'put ''c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1raSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltSYSx6Yy5mb3JDaGlsZChIX3QpLHpjXX0pfX1yZXR1cm4gY30pKCksVl90''@;'; put 'put ''PSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1raSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltSYSxSYyxOX3QsejAsbzkuZm9yUm9vdCgpLG5m''@;'; put 'put ''LEN3XX0pfX1yZXR1cm4gY30pKCksQl90PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt9bmdPbkluaXQoKXt9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJh''@;'; put 'put ''cHAtcmV2aWV3LXJvdXRlIl1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmR3QoMCwicm91dGVyLW91dGxldCIpfSxkZXBlbmRlbmNpZXM6W3JnXSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9''@;'; put 'put ''KSgpO2NvbnN0IGpfdD0oYyxsKT0+KHtyZWplY3RlZDpjLGFjY2VwdGVkOmx9KTtmdW5jdGlvbiB6X3QoYyxsKXsxJmMmJihkZSgwLCJzcGFuIiw2KSxMZSgxLCIgTG9hZGluZy4uLiAiKSxoZSgpKX1mdW5jdGlvbiBVX3QoYyxsKXsxJmMmJihkZSgwLCJkaXYiKSgxLCJoMyIpLExlKDIsIkxv''@;'; put 'put ''YWRpbmcgc3VibWl0dGVkIHRhYmxlIiksaGUoKSgpKX1mdW5jdGlvbiBaX3QoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDQpLGd0KDEsel90LDIsMCwic3BhbiIsNSkoMixVX3QsMywwLCJkaXYiLDMpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgpO2ZlKCksTWUoIm5nSWYiLCFhLmxvYWRlZCks''@;'; put 'put ''ZmUoKSxNZSgibmdJZiIsIWEubG9hZGVkKX19ZnVuY3Rpb24gV190KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiYnV0dG9uIiwyOCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgyKS5hcHByb3ZlVGFibGVTY3JlZW4oKSl9KSxMZSgxLCIgQXBwcm92''@;'; put 'put ''ZSAiKSxoZSgpfWlmKDImYyl7Y29uc3QgYT1SZSgyKTtNZSgiZGlzYWJsZWQiLCJBUFBST1ZFRCI9PT0obnVsbD09YS50YWJsZURldGFpbHM/bnVsbDphLnRhYmxlRGV0YWlscy5SRVZJRVdfU1RBVFVTX0lEKXx8IlJFSkVDVEVEIj09PShudWxsPT1hLnRhYmxlRGV0YWlscz9udWxsOmEudGFi''@;'; put 'put ''bGVEZXRhaWxzLlJFVklFV19TVEFUVVNfSUQpKSgiZGlzYWJsZWQiLGEucmV2ZXJ0aW5nQ2hhbmdlcyl9fWZ1bmN0aW9uIFlfdChjLGwpezEmYyYmKGRlKDAsImNsci10b29sdGlwLWNvbnRlbnQiLDMxKSgxLCJzcGFuIiksTGUoMiwiIFJldmVydCB0aGlzIGFuZCBhbGwgc3Vic2VxdWVudCBj''@;'; put 'put ''aGFuZ2VzICIpLGhlKCkoKSl9ZnVuY3Rpb24gR190KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiYnV0dG9uIiwyOSksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgyKS5yZXZlcnRDaGFuZ2VzKCkpfSksTGUoMSwiIFJFVkVSVCAiKSxndCgyLFlfdCwz''@;'; put 'put ''LDAsImNsci10b29sdGlwLWNvbnRlbnQiLDMwKSxoZSgpfTImYyYmTWUoImNsckxvYWRpbmciLFJlKDIpLnJldmVydGluZ0NoYW5nZXMpfWZ1bmN0aW9uICRfdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIpKDEsImRpdiIsNykoMiwiZGl2Iiw4KSgzLCJoNCIsOSksTGUo''@;'; put 'put ''NCwiU3RhZ2VkIERhdGEiKSxoZSgpKCkoKSxkZSg1LCJkaXYiLDEwKSg2LCJkaXYiLDExKSg3LCJkaXYiLDEyKSg4LCJkaXYiLDgpLExlKDksIkJhc2ljIFN1Ym1pdHRlZCBEZXRhaWxzIiksaGUoKSgpLGRlKDEwLCJkaXYiKSgxMSwic3BhbiIpLExlKDEyLCJUYWJsZSBJZDoiKSxoZSgpLGRl''@;'; put 'put ''KDEzLCJzdHJvbmciKSgxNCwic3BhbiIpLExlKDE1KSxoZSgpKCkoKSxkZSgxNiwiZGl2IikoMTcsInNwYW4iKSxMZSgxOCwiQmFzZSBUYWJsZToiKSxoZSgpLGRlKDE5LCJhIiwxMyksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgpLnZpZXdlclRhYmxlU2NyZWVu''@;'; put 'put ''KCkpfSksTGUoMjApLGhlKCkoKSxkZSgyMSwiZGl2IikoMjIsInNwYW4iKSxMZSgyMywiU3VibWl0IERhdGU6IiksaGUoKSxkZSgyNCwic3BhbiIsMTQpLExlKDI1KSxoZSgpKCksZGUoMjYsImRpdiIpKDI3LCJzcGFuIiksTGUoMjgsIlJldmlldyBTdGF0dXM6IiksaGUoKSxkZSgyOSwic3Bh''@;'; put 'put ''biIsMTUpLExlKDMwKSxoZSgpKCkoKSxkZSgzMSwiZGl2IiwxNikoMzIsImRpdiIsMTIpKDMzLCJkaXYiLDgpLExlKDM0LCJBY3Rpb25zIiksaGUoKSgpLGRlKDM1LCJkaXYiLDE3KSgzNiwiZGl2IiwxOCkoMzcsImJ1dHRvbiIsMTkpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3Qo''@;'; put 'put ''YSksQ3QoUmUoKS52aWV3ZXJUYWJsZVNjcmVlbigpKX0pLExlKDM4LCIgVmlldyBiYXNlIHRhYmxlICIpLGhlKCksZ3QoMzksV190LDIsMiwiYnV0dG9uIiwyMCksZGUoNDAsImJ1dHRvbiIsMjEpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS5nb0JhY2soKSl9''@;'; put 'put ''KSxMZSg0MSwiIEVkaXQgYmFzZSB0YWJsZSAiKSxoZSgpLGRlKDQyLCJidXR0b24iLDIyKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSgpO3JldHVybiBDdChoLmRvd25sb2FkKG51bGw9PWgudGFibGVEZXRhaWxzP251bGw6aC50YWJsZURldGFpbHMuVEFCTEVfSUQp''@;'; put 'put ''KX0pLEd0KDQzLCJjbHItaWNvbiIsMjMpLGhlKCksZGUoNDQsImNsci10b29sdGlwIiksZ3QoNDUsR190LDMsMSwiYnV0dG9uIiwyNCksaGUoKSgpKCkoKSgpLGRlKDQ2LCJkaXYiLDI1KSxHdCg0NywiaG90LXRhYmxlIiwyNiksaGUoKSxHdCg0OCwiZGl2IiwyNyksaGUoKX1pZigyJmMpe2Nv''@;'; put 'put ''bnN0IGE9UmUoKTtmZSgxNSksSXIoIiAiLG51bGw9PWEudGFibGVEZXRhaWxzP251bGw6YS50YWJsZURldGFpbHMuVEFCTEVfSUQsIiIpLGZlKDUpLElyKCIgIixudWxsPT1hLnRhYmxlRGV0YWlscz9udWxsOmEudGFibGVEZXRhaWxzLkJBU0VfVEFCTEUsIiAiKSxmZSg1KSxJcigiICIsbnVs''@;'; put 'put ''bD09YS50YWJsZURldGFpbHM/bnVsbDphLnRhYmxlRGV0YWlscy5TVUJNSVRURURfT05fRFRUTSwiICIpLGZlKDQpLE1lKCJuZ0NsYXNzIixscCgxNyxqX3QsIlJFSkVDVEVEIj09PShudWxsPT1hLnRhYmxlRGV0YWlscz9udWxsOmEudGFibGVEZXRhaWxzLlJFVklFV19TVEFUVVNfSUQpLCJB''@;'; put 'put ''UFBST1ZFRCI9PT0obnVsbD09YS50YWJsZURldGFpbHM/bnVsbDphLnRhYmxlRGV0YWlscy5SRVZJRVdfU1RBVFVTX0lEKSkpLGZlKCksSXIoIiAiLG51bGw9PWEudGFibGVEZXRhaWxzP251bGw6YS50YWJsZURldGFpbHMuUkVWSUVXX1NUQVRVU19JRCwiICIpLGZlKDcpLE1lKCJkaXNhYmxl''@;'; put 'put ''ZCIsYS5yZXZlcnRpbmdDaGFuZ2VzKSxmZSgyKSxNZSgibmdJZiIsIllFUyIhPT0obnVsbD09YS50YWJsZURldGFpbHM/bnVsbDphLnRhYmxlRGV0YWlscy5BTExPV19SRVNUT1JFKSksZmUoKSxNZSgiZGlzYWJsZWQiLGEucmV2ZXJ0aW5nQ2hhbmdlcyksZmUoNSksTWUoIm5nSWYiLCJZRVMi''@;'; put 'put ''PT09KG51bGw9PWEudGFibGVEZXRhaWxzP251bGw6YS50YWJsZURldGFpbHMuQUxMT1dfUkVTVE9SRSkpLGZlKDIpLE1lKCJkYXRhIixhLmhvdFRhYmxlLmRhdGEpKCJjb2xIZWFkZXJzIixhLmhvdFRhYmxlLmNvbEhlYWRlcnMpKCJjb2x1bW5zIixhLmhvdFRhYmxlLmNvbHVtbnMpKCJtYXhS''@;'; put 'put ''b3dzIixhLmhvdFRhYmxlLm1heFJvd3MpKCJoZWlnaHQiLGEuaG90VGFibGUuaGVpZ2h0KSgibGljZW5zZUtleSIsYS5ob3RUYWJsZS5saWNlbnNlS2V5KSgiYWZ0ZXJHZXRDb2xIZWFkZXIiLGEuaG90VGFibGUuYWZ0ZXJHZXRDb2xIZWFkZXIpKCJjZWxscyIsYS5ob3RUYWJsZS5jZWxscyl9''@;'; put 'put ''fWNvbnN0IEtfdD1be3BhdGg6Ijp0YWJsZUlkIixjb21wb25lbnQ6KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSl7dGhpcy5saWNlbmNlU2VydmljZT1hLHRoaXMuc2FzU3RvcmVTZXJ2aWNlPWQsdGhpcy5ldmVudFNlcnZpY2U9aCx0aGlzLnJvdXRlPWYsdGhpcy5yb3V0''@;'; put 'put ''ZXI9dix0aGlzLnNhc1NlcnZpY2U9TSx0aGlzLmxvYWRlZD0hMSx0aGlzLnJldmVydGluZ0NoYW5nZXM9ITEsdGhpcy5saWNlbmNlU3RhdGU9dGhpcy5saWNlbmNlU2VydmljZS5saWNlbmNlU3RhdGUsdGhpcy5ob3RUYWJsZT17ZGF0YTpbXSxjb2xIZWFkZXJzOltdLGNvbHVtbnM6W10saGVp''@;'; put 'put ''Z2h0OjUwMCxzZXR0aW5nczp7fSxsaWNlbnNlS2V5OnZvaWQgMCxtYXhSb3dzOnRoaXMubGljZW5jZVN0YXRlLnZhbHVlLnN0YWdlX3Jvd3NfYWxsb3dlZHx8MS8wLGFmdGVyR2V0Q29sSGVhZGVyOihELFoscmUpPT57Wi5jbGFzc0xpc3QuYWRkKEtuLmhhbmRzb250YWJsZS5kYXJrVGFibGVI''@;'; put 'put ''ZWFkZXJDbGFzcyl9fX1zdWJtaXR0ZWRUYWJsZVNjcmVlbigpe3RoaXMucm91dGUubmF2aWdhdGVCeVVybCgiL3N0YWdlLyIrdGhpcy50YWJsZV9pZCl9YXBwcm92ZVRhYmxlU2NyZWVuKCl7dGhpcy5yb3V0ZS5uYXZpZ2F0ZUJ5VXJsKCIvcmV2aWV3L2FwcHJvdmVEZXQvIit0aGlzLnRhYmxl''@;'; put 'put ''X2lkKX12aWV3ZXJUYWJsZVNjcmVlbigpe3RoaXMucm91dGUubmF2aWdhdGVCeVVybCgiL3ZpZXcvZGF0YS8iK3RoaXMudGFibGVEZXRhaWxzLkJBU0VfVEFCTEUpfWdvQmFjaygpe0tuLnhsbWFwcy5maW5kKGQ9PmQudGFyZ2V0RFM9PT10aGlzLnRhYmxlRGV0YWlscy5CQVNFX1RBQkxFKT90''@;'; put 'put ''aGlzLnJvdXRlLm5hdmlnYXRlQnlVcmwoIi9ob21lL2V4Y2VsLW1hcHMvIit0aGlzLmhvdFRhYmxlLmRhdGFbMF0uWExNQVBfSUQpOnRoaXMucm91dGUubmF2aWdhdGVCeVVybCgiL2VkaXRvci8iK3RoaXMudGFibGVEZXRhaWxzLkJBU0VfVEFCTEUpfWRvd25sb2FkKGEpe2xldCBkPXRoaXMu''@;'; put 'put ''c2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLGg9ZC5zZXJ2ZXJVcmwsZj1kLmFwcExvYyx2PXRoaXMuc2FzU2VydmljZS5nZXRFeGVjdXRpb25QYXRoKCk7d2luZG93Lm9wZW4oaCt2KyIvP19wcm9ncmFtPSIrZisiL3NlcnZpY2VzL2F1ZGl0b3JzL2dldGF1ZGl0ZmlsZSZ0YWJsZT0iK2Ep''@;'; put 'put ''fW5nT25Jbml0KCl7dmFyIGE9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7aWYoYS5saWNlbmNlU2VydmljZS5ob3RfbGljZW5zZV9rZXkuc3Vic2NyaWJlKGQ9PnthLmhvdFRhYmxlLmxpY2Vuc2VLZXk9ZH0pLHR5cGVvZiBhLnJvdXRlci5zbmFwc2hvdC5wYXJhbXMudGFibGVJZDwidSIp''@;'; put 'put ''e2EudGFibGVfaWQ9YS5yb3V0ZXIuc25hcHNob3QucGFyYW1zLnRhYmxlSWQ7dHJ5e2xldCBkPXlpZWxkIGEuc2FzU3RvcmVTZXJ2aWNlLmdldENoYW5nZUluZm8oYS50YWJsZV9pZCk7aWYoIWR8fCFkLmpzcGFyYW1zKXRocm93IG5ldyBFcnJvcigianNwYXJhbXMgcHJvcGVydHkgaXMgbWlz''@;'; put 'put ''c2luZyBmcm9tIHJlc3BvbnNlLiIpO2EudGFibGVEZXRhaWxzPWQuanNwYXJhbXNbMF19Y2F0Y2goZCl7bGV0IGg9e307ZC5NRVNTQUdFP2g9ZDpoLk1FU1NBR0U9ZCxhLmV2ZW50U2VydmljZS5jYXRjaFJlc3BvbnNlRXJyb3IoInB1YmxpYy9nZXRjaGFuZ2VpbmZvIixoKX10cnl7bGV0IGQ9''@;'; put 'put ''eWllbGQgYS5zYXNTdG9yZVNlcnZpY2Uub3BlblRhYmxlKGEudGFibGVfaWQpO2lmKCFkfHwhZC5zdGFnZXRhYmxlKXRocm93IG5ldyBFcnJvcigiU3RhZ2V0YWJsZSBwcm9wZXJ0eSBpcyBtaXNzaW5nIGZyb20gcmVzcG9uc2UuIik7bGV0IGg9ZC5zdGFnZXRhYmxlWzBdLGY9W10sdj1bXTtm''@;'; put 'put ''b3IobGV0IEQgaW4gaCloJiZmLnB1c2goRCk7Zm9yKGxldCBEPTA7RDxmLmxlbmd0aDtEKyspdi5wdXNoKHtkYXRhOmZbRF19KTtsZXQgTT1mdW5jdGlvbigpe3JldHVybntyZWFkT25seTohMH19O2EuaG90VGFibGUuZGF0YT1kLnN0YWdldGFibGUsYS5ob3RUYWJsZS5jb2xIZWFkZXJzPWYs''@;'; put 'put ''YS5ob3RUYWJsZS5jb2x1bW5zPXYsYS5ob3RUYWJsZS5jZWxscz1NLGEubG9hZGVkPSEwLGEuc2V0Rm9jdXMoKX1jYXRjaChkKXtsZXQgaD17fTtkLk1FU1NBR0V8fChoLk1FU1NBR0U9ZCksYS5ldmVudFNlcnZpY2UuY2F0Y2hSZXNwb25zZUVycm9yKCJhdWRpdG9ycy9nZXRzdGFnZXRhYmxl''@;'; put 'put ''IixoKSxhLmxvYWRlZD0hMX19fSkoKX1yZXZlcnRDaGFuZ2VzKCl7dGhpcy5yZXZlcnRpbmdDaGFuZ2VzPSEwLHRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJlZGl0b3JzL3Jlc3RvcmUiLHtyZXN0b3JlX2luOlt7bG9hZF9yZWY6dGhpcy50YWJsZV9pZH1dfSkudGhlbihkPT57ZC5hZGFwdGVy''@;'; put 'put ''UmVzcG9uc2UucmVzdG9yZV9vdXQmJnRoaXMucm91dGUubmF2aWdhdGUoWyIvc3RhZ2UiXSkudGhlbigoKT0+e3RoaXMucm91dGUubmF2aWdhdGUoW2Avc3RhZ2UvJHtkLmFkYXB0ZXJSZXNwb25zZS5yZXN0b3JlX291dFswXS5MT0FEUkVGfWBdKX0pfSkuZmluYWxseSgoKT0+e3RoaXMucmV2''@;'; put 'put ''ZXJ0aW5nQ2hhbmdlcz0hMX0pfXNldEZvY3VzKCl7c2V0VGltZW91dCgoKT0+e2xldCBhPXdpbmRvdy5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYXBwcm92YWwtYnRuIik7YSYmYS5mb2N1cygpfSwyMDApfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8''@;'; put 'put ''fGMpKEdlKHUxKSxHZShraCksR2UodmMpLEdlKExzKSxHZShDdSksR2UoR3MpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1zdGFnZSJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6NCx2YXJzOjIsY29uc3RzOltb''@;'; put 'put ''MSwiY29udGVudC1hcmVhIl0sWzEsImNsci1jb2wtbWQtMTIiLCJjYXJkIl0sWyJjbGFzcyIsImgtODB2aCBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtcy1jZW50ZXIiLDQsIm5nSWYiXSxbNCwibmdJZiJdLFsxLCJoLTgwdmgiLCJkLWZsZXgi''@;'; put 'put ''LCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwiZmxleC1jb2x1bW4iLCJhbGlnbi1pdGVtcy1jZW50ZXIiXSxbImNsYXNzIiwic3Bpbm5lciIsNCwibmdJZiJdLFsxLCJzcGlubmVyIl0sWyJuZy1pZiIsImxvYWRlZCIsMSwiY2FyZC1oZWFkZXIiXSxbMSwiY2FyZC10aXRsZSIsInRleHQtY2Vu''@;'; put 'put ''dGVyIl0sWzEsIm10LTAiXSxbIm5nLWlmIiwibG9hZGVkIiwxLCJjbHItcm93Il0sWzEsImNhcmQtYmxvY2siLCJjbHItY29sLW1kLTYiLCJuby1ib3JkZXJzIl0sWzEsImNhcmQtaGVhZGVyIiwicHktNSJdLFsxLCJiYXNlVGFibGVMaW5rIiwzLCJjbGljayJdLFsxLCJtdC0xMCJdLFsxLCJt''@;'; put 'put ''dC0xMCIsMywibmdDbGFzcyJdLFsxLCJjbHItY29sLW1kLTYiLCJjYXJkLWJsb2NrIiwibm8tYm9yZGVycyJdLFsxLCJtdC0yMCJdLFsxLCJyb3ciXSxbMSwiYnRuIiwiYnRuLXNtIiwiYnRuLW91dGxpbmUiLCJ0ZXh0LWNlbnRlciIsIm1yLTVpIiwzLCJjbGljayIsImRpc2FibGVkIl0sWyJp''@;'; put 'put ''ZCIsImFwcHJvdmFsLWJ0biIsImNsYXNzIiwiYnRuIGJ0bi1zbSBidG4tc3VjY2Vzcy1vdXRsaW5lIHRleHQtY2VudGVyIG1yLTVpIiwzLCJkaXNhYmxlZCIsImNsaWNrIiw0LCJuZ0lmIl0sWzEsImJ0biIsImJ0bi1zbSIsImJ0bi1pbmZvLW91dGxpbmUiLCJ0ZXh0LWNlbnRlciIsIm1yLTVp''@;'; put 'put ''IiwzLCJjbGljayIsImRpc2FibGVkIl0sWzEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzIiwidGV4dC1jZW50ZXIiLCJtci01aSIsIm1pbi13LTAiLDMsImNsaWNrIl0sWyJzaGFwZSIsImRvd25sb2FkIl0sWyJjbHJUb29sdGlwVHJpZ2dlciIsIiIsImNsYXNzIiwiYnRuIGJ0bi1zbSBi''@;'; put 'put ''dG4tZGFuZ2VyIHRleHQtY2VudGVyIG10LTIwIiwzLCJjbHJMb2FkaW5nIiwiY2xpY2siLDQsIm5nSWYiXSxbMSwiY2FyZC1ibG9jayJdLFsiaG90SWQiLCJob3RJbnN0YW5jZSIsImlkIiwiaG90VGFibGUiLCJjbGFzc05hbWUiLCJodERhcmsiLCJzdHJldGNoSCIsImFsbCIsMywiZGF0YSIs''@;'; put 'put ''ImNvbEhlYWRlcnMiLCJjb2x1bW5zIiwibWF4Um93cyIsImhlaWdodCIsImxpY2Vuc2VLZXkiLCJhZnRlckdldENvbEhlYWRlciIsImNlbGxzIl0sWzEsImNhcmQtZm9vdGVyIiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciJdLFsiaWQiLCJhcHByb3ZhbC1idG4iLDEsImJ0biIs''@;'; put 'put ''ImJ0bi1zbSIsImJ0bi1zdWNjZXNzLW91dGxpbmUiLCJ0ZXh0LWNlbnRlciIsIm1yLTVpIiwzLCJjbGljayIsImRpc2FibGVkIl0sWyJjbHJUb29sdGlwVHJpZ2dlciIsIiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLWRhbmdlciIsInRleHQtY2VudGVyIiwibXQtMjAiLDMsImNsaWNrIiwiY2xy''@;'; put 'put ''TG9hZGluZyJdLFsiY2xyUG9zaXRpb24iLCJib3R0b20tbGVmdCIsImNsclNpemUiLCJsZyIsNCwiY2xySWZPcGVuIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1sZWZ0IiwiY2xyU2l6ZSIsImxnIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYoZGUoMCwiZGl2IiwwKSgxLCJkaXYi''@;'; put 'put ''LDEpLGd0KDIsWl90LDMsMiwiZGl2IiwyKSgzLCRfdCw0OSwyMCwiZGl2IiwzKSxoZSgpKCkpLDImZCYmKGZlKDIpLE1lKCJuZ0lmIiwhaC5sb2FkZWQpLGZlKCksTWUoIm5nSWYiLGgubG9hZGVkKSl9LGRlcGVuZGVuY2llczpbd3UsYmEsSGwsajAsTDIsUDIsdjcseTcsYjcsRF9dLGVuY2Fw''@;'; put 'put ''c3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCl9XTtsZXQgcV90PSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1raSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPUFyKHtp''@;'; put 'put ''bXBvcnRzOltSYSx6MCx6Yy5mb3JDaGlsZChLX3QpLG85LmZvclJvb3QoKV19KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIFhfdChjLGwpe2lmKDEmYyYmKGRlKDAsInAiLDE3KSxMZSgxLCIgVmlld2VyIHJvd3MgbGltaXQ6ICIpLGRlKDIsInNwYW4iLDcpLExlKDMpLGhlKCkoKSksMiZjKXtj''@;'; put 'put ''b25zdCBhPVJlKCk7ZmUoMyksd3IoYS5saWNlbmNlU3RhdGUudmFsdWUudmlld2VyX3Jvd3NfYWxsb3dlZCl9fWZ1bmN0aW9uIEpfdChjLGwpe2lmKDEmYyYmKGRlKDAsInAiLDE3KSxMZSgxLCIgRWRpdG9yIHJvd3MgbGltaXQ6ICIpLGRlKDIsInNwYW4iLDcpLExlKDMpLGhlKCkoKSksMiZj''@;'; put 'put ''KXtjb25zdCBhPVJlKCk7ZmUoMyksd3IoYS5saWNlbmNlU3RhdGUudmFsdWUuZWRpdG9yX3Jvd3NfYWxsb3dlZCl9fWZ1bmN0aW9uIFFfdChjLGwpe2lmKDEmYyYmKGRlKDAsInAiLDE3KSxMZSgxLCIgU3RhZ2Ugcm93cyBsaW1pdDogIiksZGUoMiwic3BhbiIsNyksTGUoMyksaGUoKSgpKSwy''@;'; put 'put ''JmMpe2NvbnN0IGE9UmUoKTtmZSgzKSx3cihhLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdGFnZV9yb3dzX2FsbG93ZWQpfX1mdW5jdGlvbiBld3QoYyxsKXtpZigxJmMmJihkZSgwLCJwIiwxNyksTGUoMSwiIEhpc3Rvcnkgcm93cyBsaW1pdDogIiksZGUoMiwic3BhbiIsNyksTGUoMyksaGUoKSgp''@;'; put 'put ''KSwyJmMpe2NvbnN0IGE9UmUoKTtmZSgzKSx3cihhLmxpY2VuY2VTdGF0ZS52YWx1ZS5oaXN0b3J5X3Jvd3NfYWxsb3dlZCl9fWZ1bmN0aW9uIHR3dChjLGwpe2lmKDEmYyYmKGRlKDAsInAiLDE3KSxMZSgxLCIgU3VibWl0IHJvd3MgbGltaXQ6ICIpLGRlKDIsInNwYW4iLDcpLExlKDMpLGhl''@;'; put 'put ''KCkoKSksMiZjKXtjb25zdCBhPVJlKCk7ZmUoMyksd3IoYS5saWNlbmNlU3RhdGUudmFsdWUuc3VibWl0X3Jvd3NfbGltaXQpfX1mdW5jdGlvbiBud3QoYyxsKXtpZigxJmMmJihkZSgwLCJwIiwxNyksTGUoMSwiIFRhYmxlcyBpbiBsaWJyYXJ5IGxpbWl0OiAiKSxkZSgyLCJzcGFuIiw3KSxM''@;'; put 'put ''ZSgzKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1SZSgpO2ZlKDMpLHdyKGEubGljZW5jZVN0YXRlLnZhbHVlLnRhYmxlc19pbl9saWJyYXJ5X2xpbWl0KX19ZnVuY3Rpb24gcnd0KGMsbCl7aWYoMSZjJiYoZGUoMCwicCIsMTcpLExlKDEsIiBWaWV3Ym94ZXMgbGltaXQ6ICIpLGRlKDIsInNwYW4i''@;'; put 'put ''LDcpLExlKDMpLGhlKCkoKSksMiZjKXtjb25zdCBhPVJlKCk7ZmUoMyksd3IoYS5saWNlbmNlU3RhdGUudmFsdWUudmlld2JveF9saW1pdCl9fWZ1bmN0aW9uIGl3dChjLGwpe2lmKDEmYyYmKGRlKDAsInAiLDE3KSxMZSgxLCIgTGluZWFnZSBkYWlseSBsaW1pdDogIiksZGUoMiwic3BhbiIs''@;'; put 'put ''NyksTGUoMyksaGUoKSgpKSwyJmMpe2NvbnN0IGE9UmUoKTtmZSgzKSx3cihhLmxpY2VuY2VTdGF0ZS52YWx1ZS5saW5lYWdlX2RhaWx5X2xpbWl0KX19ZnVuY3Rpb24gYXd0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2IiwxOSksTGUoMSwiIFJlZnJlc2ggRGF0YSBMaW5l''@;'; put 'put ''YWdlICIpLGRlKDIsImJ1dHRvbiIsMjApLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoMikucmVmcmVzaERhdGFMaW5lYWdlKCkpfSksTGUoMywiIFJFRlJFU0ggIiksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1SZSgyKTtmZSgyKSxNZSgiY2xyTG9hZGluZyIsYS5y''@;'; put 'put ''ZWZyZXNoaW5nRGF0YUxpbmVhZ2UpfX1mdW5jdGlvbiBvd3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtzaSgwKSxndCgxLGF3dCw0LDEsImRpdiIsMTgpLGRlKDIsImRpdiIsMTkpLExlKDMsIiBSZWZyZXNoIERhdGEgQ2F0YWxvZyAiKSxkZSg0LCJidXR0b24iLDIwKSxGdCgiY2xpY2si''@;'; put 'put ''LGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkucmVmcmVzaERhdGFDYXRhbG9nKCkpfSksTGUoNSwiIFJFRlJFU0ggIiksaGUoKSgpLGRlKDYsImRpdiIsMTkpLExlKDcsIiBEb3dubG9hZCBDb25maWd1cmF0aW9uICIpLGRlKDgsImJ1dHRvbiIsMjEpLEZ0KCJjbGljayIsZnVuY3Rp''@;'; put 'put ''b24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS5kb3dubG9hZENvbmZpZ3VyYXRpb24oKSl9KSxMZSg5LCIgRE9XTkxPQUQgIiksaGUoKSgpLGRlKDEwLCJkaXYiLDE5KSxMZSgxMSwiIFVwZGF0ZSBMaWNlbmNlIEtleSAiKSxkZSgxMiwiYnV0dG9uIiwyMiksTGUoMTMsIiBVUERBVEUgIiksaGUo''@;'; put 'put ''KSgpLGxpKCl9aWYoMiZjKXtjb25zdCBhPVJlKCk7ZmUoKSxNZSgibmdJZiIsIlNBUzkiPT09YS5zZXJ2ZXJUeXBlKSxmZSgzKSxNZSgiY2xyTG9hZGluZyIsYS5yZWZyZXNoaW5nRGF0YUNhdGFsb2cpfX1jb25zdCBzd3Q9W3twYXRoOiIiLGNvbXBvbmVudDooKCk9PntjbGFzcyBje2NvbnN0''@;'; put 'put ''cnVjdG9yKGEsZCxoLGYpe3RoaXMuYXBwU2VydmljZT1hLHRoaXMuc2FzU2VydmljZT1kLHRoaXMubGljZW5jZVNlcnZpY2U9aCx0aGlzLmFwcFNldHRpbmdzU2VydmljZT1mLHRoaXMuYXBwSW5mbz17YWRhcHRlclZlcnNpb246IjQuMTIuMCIsYXBwVmVyc2lvbjoidjYuMTYuMiIucmVwbGFj''@;'; put 'put ''ZSgidiIsIiIpLGJ1aWxkVGltZXN0YW1wOklvZSgpKHBhcnNlSW50KCIxNzQ5MjA5NzYyNDgyIikpLmZvcm1hdCgiREQtTU1NLVlZWVkgSEg6TU0iKX0sdGhpcy5odHRwPSJodHRwOiI9PT1sb2NhdGlvbi5wcm90b2NvbCx0aGlzLnJlZnJlc2hpbmdEYXRhQ2F0YWxvZz0hMSx0aGlzLnJlZnJl''@;'; put 'put ''c2hpbmdEYXRhTGluZWFnZT0hMSx0aGlzLnJlc3BvbnNlPSJObyByZXNwb25zZSIsdGhpcy5yZXNwb25zZU1vZGFsPSExLHRoaXMuSW5maW5pdHk9MS8wLHRoaXMubGljZW5jZVN0YXRlPXRoaXMubGljZW5jZVNlcnZpY2UubGljZW5jZVN0YXRlLHRoaXMuc2VydmVyVHlwZT10aGlzLnNhc1Nl''@;'; put 'put ''cnZpY2UuZ2V0U2VydmVyVHlwZSgpLHRoaXMubGljZW5jZUluZm89dGhpcy5saWNlbmNlU2VydmljZS5nZXRMaWNlbnNlS2V5RGF0YSgpLHRoaXMuZW52aXJvbm1lbnRJbmZvPXRoaXMuYXBwU2VydmljZS5nZXRFbnZpcm9ubWVudEluZm8oKSx0aGlzLnNldHRpbmdzPXRoaXMuYXBwU2V0dGlu''@;'; put 'put ''Z3NTZXJ2aWNlLnNldHRpbmdzLnZhbHVlLHRoaXMuZW52aXJvbm1lbnRJbmZvLkFVVE9FWEVDJiYodGhpcy5lbnZpcm9ubWVudEluZm8uQVVUT0VYRUM9ZGVjb2RlVVJJQ29tcG9uZW50KHRoaXMuZW52aXJvbm1lbnRJbmZvLkFVVE9FWEVDKSksdGhpcy5hcHBTZXR0aW5nc1NlcnZpY2Uuc2V0''@;'; put 'put ''dGluZ3Muc3Vic2NyaWJlKHY9Pnt0aGlzLnNldHRpbmdzPXZ9KX1uZ09uSW5pdCgpe31zZXR0aW5nQ2hhbmdlKGEpe3RoaXMuYXBwU2V0dGluZ3NTZXJ2aWNlLnNldEFwcFNldHRpbmdzKHRoaXMuc2V0dGluZ3MpfWRvd25sb2FkQ29uZmlndXJhdGlvbigpe2xldCBhPXRoaXMuc2FzU2Vydmlj''@;'; put 'put ''ZS5nZXRTYXNqc0NvbmZpZygpLGQ9YS5zZXJ2ZXJVcmwsaD1hLmFwcExvYyxmPXRoaXMuc2FzU2VydmljZS5nZXRFeGVjdXRpb25QYXRoKCk7d2luZG93Lm9wZW4oZCtmKyIvP19wcm9ncmFtPSIraCsiL3NlcnZpY2VzL2FkbWluL2V4cG9ydGNvbmZpZyIpfXJlZnJlc2hEYXRhQ2F0YWxvZygp''@;'; put 'put ''e3RoaXMucmVmcmVzaGluZ0RhdGFDYXRhbG9nPSEwLHRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJhZG1pbi9yZWZyZXNoY2F0YWxvZyIsbnVsbCkudGhlbihhPT57dGhpcy5yZXNwb25zZT10aGlzLnBhcnNlUmVzcG9uc2UoYS5hZGFwdGVyUmVzcG9uc2UpLHRoaXMucmVzcG9uc2VNb2RhbD0h''@;'; put 'put ''MH0pLmNhdGNoKGE9Pnt0aGlzLnJlc3BvbnNlPXRoaXMucGFyc2VSZXNwb25zZShhLmFkYXB0ZXJSZXNwb25zZSksdGhpcy5yZXNwb25zZU1vZGFsPSEwfSkuZmluYWxseSgoKT0+e3RoaXMucmVmcmVzaGluZ0RhdGFDYXRhbG9nPSExfSl9cmVmcmVzaERhdGFMaW5lYWdlKCl7dGhpcy5yZWZy''@;'; put 'put ''ZXNoaW5nRGF0YUxpbmVhZ2U9ITAsdGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoImFkbWluL3JlZnJlc2h0YWJsZWxpbmVhZ2UiLG51bGwpLnRoZW4oYT0+e3RoaXMucmVzcG9uc2U9dGhpcy5wYXJzZVJlc3BvbnNlKGEuYWRhcHRlclJlc3BvbnNlKSx0aGlzLnJlc3BvbnNlTW9kYWw9ITB9KS5j''@;'; put 'put ''YXRjaChhPT57dGhpcy5yZXNwb25zZT10aGlzLnBhcnNlUmVzcG9uc2UoYS5hZGFwdGVyUmVzcG9uc2UpLHRoaXMucmVzcG9uc2VNb2RhbD0hMH0pLmZpbmFsbHkoKCk9Pnt0aGlzLnJlZnJlc2hpbmdEYXRhTGluZWFnZT0hMX0pfXBhcnNlUmVzcG9uc2UoYSl7cmV0dXJuIm9iamVjdCI9PXR5''@;'; put 'put ''cGVvZiBhP0pTT04uc3RyaW5naWZ5KGEpOmF9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2Uob0wpLEdlKEdzKSxHZSh1MSksR2UoJFIpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1zeXN0ZW0i''@;'; put 'put ''XV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjEzOCx2YXJzOjM2LGNvbnN0czpbWzEsImNvbnRlbnQtYXJlYSJdLFsxLCJjYXJkIiwicC0xMCIsImQtZmxleCIsImNsci1mbGV4LWNvbHVtbiIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiLCJjbHItanVzdGlmeS1j''@;'; put 'put ''b250ZW50LWNlbnRlciJdLFsxLCJ0ZXh0LWNlbnRlciIsIm0tMCJdLFsxLCJ3LTEwMCIsImxpZ2h0Il0sWzEsImNvbnRlbnQtYm94IiwiZC1mbGV4IiwiY2xyLWZsZXgtY29sdW1uIl0sWzEsInN5cy1pbmZvIiwiZC1mbGV4IiwiY2xyLWp1c3RpZnktY29udGVudC1jZW50ZXIiLCJjbHItZmxl''@;'; put 'put ''eC1jb2x1bW4iLCJjbHItZmxleC1sZy1yb3ciXSxbImNkcy10ZXh0Iiwic3Vic2VjdGlvbiIsMSwibWItMTAiXSxbMSwiZGFyayJdLFsiY2RzLXRleHQiLCJsYWJlbCIsMSwibS0wIl0sWzEsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtbGctY2VudGVyIl0sWyJjbGFzcyIsIm0tMCIs''@;'; put 'put ''NCwibmdJZiJdLFs0LCJuZ0lmIl0sWzMsImNsck1vZGFsT3BlbkNoYW5nZSIsImNsck1vZGFsT3BlbiJdLFsxLCJtb2RhbC10aXRsZSJdLFsxLCJtb2RhbC1ib2R5Il0sWzEsIm1vZGFsLWZvb3RlciJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXByaW1hcnkiLDMs''@;'; put 'put ''ImNsaWNrIl0sWzEsIm0tMCJdLFsiY2xhc3MiLCJhZG1pbi1hY3Rpb24iLDQsIm5nSWYiXSxbMSwiYWRtaW4tYWN0aW9uIl0sWzEsImJ0biIsImJ0bi1pbmZvIiwiYnRuLXNtIiwzLCJjbGljayIsImNsckxvYWRpbmciXSxbMSwiYnRuIiwiYnRuLWluZm8iLCJidG4tc20iLDMsImNsaWNrIl0s''@;'; put 'put ''WyJyb3V0ZXJMaW5rIiwiL2xpY2Vuc2luZy91cGRhdGUiLDEsImJ0biIsImJ0bi1pbmZvIiwiYnRuLXNtIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYoZGUoMCwiZGl2IiwwKSgxLCJkaXYiLDEpKDIsImg0IiwyKSxMZSgzLCJTeXN0ZW0gaW5mb3JtYXRpb24iKSxoZSgpLEd0KDQs''@;'; put 'put ''ImhyIiwzKSxkZSg1LCJkaXYiLDQpKDYsImRpdiIsNSkoNywiZGl2IikoOCwiaDYiLDYpLExlKDksIiBFbnZpcm9ubWVudCBEZXRhaWxzICIpLEd0KDEwLCJzcGFuIiw3KSxoZSgpLGRlKDExLCJwIiw4KSxMZSgxMiwiIFNZU1NJVEU6ICIpLGRlKDEzLCJzcGFuIiw3KSxMZSgxNCksaGUoKSgp''@;'; put 'put ''LGRlKDE1LCJwIiw4KSxMZSgxNiwiIFNZU1NDUEw6ICIpLGRlKDE3LCJzcGFuIiw3KSxMZSgxOCksaGUoKSgpLGRlKDE5LCJwIiw4KSxMZSgyMCwiIFNZU1RDUElQSE9TVE5BTUU6ICIpLGRlKDIxLCJzcGFuIiw3KSxMZSgyMiksaGUoKSgpLGRlKDIzLCJwIiw4KSxMZSgyNCwiIFNZU1ZMT05H''@;'; put 'put ''OiAiKSxkZSgyNSwic3BhbiIsNyksTGUoMjYpLGhlKCkoKSxkZSgyNywicCIsOCksTGUoMjgsIiBNRU1TSVpFOiAiKSxkZSgyOSwic3BhbiIsNyksTGUoMzApLGhlKCkoKSxkZSgzMSwicCIsOCksTGUoMzIsIiBTWVNQUk9DRVNTTU9ERTogIiksZGUoMzMsInNwYW4iLDcpLExlKDM0KSxoZSgp''@;'; put 'put ''KCksZGUoMzUsInAiLDgpLExlKDM2LCIgU1lTSE9TVE5BTUU6ICIpLGRlKDM3LCJzcGFuIiw3KSxMZSgzOCksaGUoKSgpLGRlKDM5LCJwIiw4KSxMZSg0MCwiIFNZU1VTRVJJRDogIiksZGUoNDEsInNwYW4iLDcpLExlKDQyKSxoZSgpKCksZGUoNDMsInAiLDgpLExlKDQ0LCIgU1lTSE9TVElO''@;'; put 'put ''Rk9MT05HOiAiKSxkZSg0NSwic3BhbiIsNyksTGUoNDYpLGhlKCkoKSxkZSg0NywicCIsOCksTGUoNDgsIiBTWVNFTkNPRElORzogIiksZGUoNDksInNwYW4iLDcpLExlKDUwKSxoZSgpKCksZGUoNTEsInAiLDgpLExlKDUyLCIgQVVUT0VYRUM6ICIpLGRlKDUzLCJzcGFuIiw3KSxMZSg1NCks''@;'; put 'put ''aGUoKSgpKCksZGUoNTUsImRpdiIsOSkoNTYsImRpdiIpKDU3LCJoNiIsNiksTGUoNTgsIiBEYXRhIENvbnRyb2xsZXIgRGV0YWlscyAiKSxHdCg1OSwic3BhbiIsNyksaGUoKSxkZSg2MCwicCIsOCksTGUoNjEsIiBBcHBsaWNhdGlvbiB2ZXJzaW9uOiAiKSxkZSg2Miwic3BhbiIsNyksTGUo''@;'; put 'put ''NjMpLGhlKCkoKSxkZSg2NCwicCIsOCksTGUoNjUsIiBCdWlsZCB0aW1lc3RhbXA6ICIpLGRlKDY2LCJzcGFuIiw3KSxMZSg2NyksaGUoKSgpLGRlKDY4LCJwIiw4KSxMZSg2OSwiIEFkYXB0ZXIgdmVyc2lvbjogIiksZGUoNzAsInNwYW4iLDcpLExlKDcxKSxoZSgpKCksZGUoNzIsInAiLDgp''@;'; put 'put ''LExlKDczLCIgSFRUUDogIiksZGUoNzQsInNwYW4iLDcpLExlKDc1KSxoZSgpKCksZGUoNzYsInAiLDgpLExlKDc3LCIgREMgQWRtaW4gR3JvdXA6ICIpLGRlKDc4LCJzcGFuIiw3KSxMZSg3OSksaGUoKSgpLGRlKDgwLCJwIiw4KSxMZSg4MSwiIEFwcCBMb2NhdGlvbjogIiksZGUoODIsInNw''@;'; put 'put ''YW4iLDcpLExlKDgzKSxoZSgpKCkoKSgpLGRlKDg0LCJkaXYiKSg4NSwiaDYiLDYpLExlKDg2LCIgTGljZW5jZSBkZXRhaWxzICIpLEd0KDg3LCJzcGFuIiw3KSxoZSgpLGRlKDg4LCJwIiw4KSxMZSg4OSwiIFZhbGlkIHVudGlsOiAiKSxkZSg5MCwic3BhbiIsNyksTGUoOTEpLGhlKCkoKSxk''@;'; put 'put ''ZSg5MiwicCIsOCksTGUoOTMsIiBVc2VycyBhbGxvd2VkOiAiKSxkZSg5NCwic3BhbiIsNyksTGUoOTUpLGhlKCkoKSxkZSg5NiwicCIsOCksTGUoOTcsIiBTaXRlIElEczogIiksZGUoOTgsInNwYW4iLDcpLExlKDk5KSxoZSgpKCksZGUoMTAwLCJwIiw4KSxMZSgxMDEsIiBGcmVlIFRpZXI6''@;'; put 'put ''ICIpLGRlKDEwMiwic3BhbiIsNyksTGUoMTAzKSxoZSgpKCksZ3QoMTA0LFhfdCw0LDEsInAiLDEwKSgxMDUsSl90LDQsMSwicCIsMTApKDEwNixRX3QsNCwxLCJwIiwxMCkoMTA3LGV3dCw0LDEsInAiLDEwKSgxMDgsdHd0LDQsMSwicCIsMTApKDEwOSxud3QsNCwxLCJwIiwxMCkoMTEwLHJ3''@;'; put 'put ''dCw0LDEsInAiLDEwKSgxMTEsaXd0LDQsMSwicCIsMTApLGRlKDExMiwicCIsOCksTGUoMTEzLCIgVmlld2JveGVzOiAiKSxkZSgxMTQsInNwYW4iLDcpLExlKDExNSksaGUoKSgpLGRlKDExNiwicCIsOCksTGUoMTE3LCIgRmlsZSBVcGxvYWQ6ICIpLGRlKDExOCwic3BhbiIsNyksTGUoMTE5''@;'; put 'put ''KSxoZSgpKCksZGUoMTIwLCJwIiw4KSxMZSgxMjEsIiBFZGl0IHJlY29yZDogIiksZGUoMTIyLCJzcGFuIiw3KSxMZSgxMjMpLGhlKCkoKSxkZSgxMjQsInAiLDgpLExlKDEyNSwiIEFkZCByZWNvcmQ6ICIpLGRlKDEyNiwic3BhbiIsNyksTGUoMTI3KSxoZSgpKCkoKSgpLEd0KDEyOCwiaHIi''@;'; put 'put ''LDMpLGd0KDEyOSxvd3QsMTQsMiwibmctY29udGFpbmVyIiwxMSksaGUoKSgpKCksZGUoMTMwLCJjbHItbW9kYWwiLDEyKSxnaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbih2KXtyZXR1cm4gbWkoaC5yZXNwb25zZU1vZGFsLHYpfHwoaC5yZXNwb25zZU1vZGFsPXYpLHZ9KSxkZSgx''@;'; put 'put ''MzEsImgzIiwxMyksTGUoMTMyLCJSZXNwb25zZSIpLGhlKCksZGUoMTMzLCJkaXYiLDE0KSxMZSgxMzQpLGhlKCksZGUoMTM1LCJkaXYiLDE1KSgxMzYsImJ1dHRvbiIsMTYpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaC5yZXNwb25zZU1vZGFsPSExfSksTGUoMTM3LCIgT2sgIiks''@;'; put 'put ''aGUoKSgpKCkpLDImZCYmKGZlKDE0KSx3cihudWxsPT1oLmVudmlyb25tZW50SW5mbz9udWxsOmguZW52aXJvbm1lbnRJbmZvLlNZU1NJVEUpLGZlKDQpLHdyKG51bGw9PWguZW52aXJvbm1lbnRJbmZvP251bGw6aC5lbnZpcm9ubWVudEluZm8uU1lTU0NQTCksZmUoNCksd3IobnVsbD09aC5l''@;'; put 'put ''bnZpcm9ubWVudEluZm8/bnVsbDpoLmVudmlyb25tZW50SW5mby5TWVNUQ1BJUEhPU1ROQU1FKSxmZSg0KSx3cihudWxsPT1oLmVudmlyb25tZW50SW5mbz9udWxsOmguZW52aXJvbm1lbnRJbmZvLlNZU1ZMT05HKSxmZSg0KSx3cihudWxsPT1oLmVudmlyb25tZW50SW5mbz9udWxsOmguZW52''@;'; put 'put ''aXJvbm1lbnRJbmZvLk1FTVNJWkUpLGZlKDQpLHdyKG51bGw9PWguZW52aXJvbm1lbnRJbmZvP251bGw6aC5lbnZpcm9ubWVudEluZm8uU1lTUFJPQ0VTU01PREUpLGZlKDQpLHdyKG51bGw9PWguZW52aXJvbm1lbnRJbmZvP251bGw6aC5lbnZpcm9ubWVudEluZm8uU1lTSE9TVE5BTUUpLGZl''@;'; put 'put ''KDQpLHdyKG51bGw9PWguZW52aXJvbm1lbnRJbmZvP251bGw6aC5lbnZpcm9ubWVudEluZm8uU1lTVVNFUklEKSxmZSg0KSx3cihudWxsPT1oLmVudmlyb25tZW50SW5mbz9udWxsOmguZW52aXJvbm1lbnRJbmZvLlNZU0hPU1RJTkZPTE9ORyksZmUoNCksd3IobnVsbD09aC5lbnZpcm9ubWVu''@;'; put 'put ''dEluZm8/bnVsbDpoLmVudmlyb25tZW50SW5mby5TWVNFTkNPRElORyksZmUoNCksd3IobnVsbD09aC5lbnZpcm9ubWVudEluZm8/bnVsbDpoLmVudmlyb25tZW50SW5mby5BVVRPRVhFQyksZmUoOSksd3IoaC5hcHBJbmZvLmFwcFZlcnNpb24pLGZlKDQpLHdyKGguYXBwSW5mby5idWlsZFRp''@;'; put 'put ''bWVzdGFtcCksZmUoNCksd3IoaC5hcHBJbmZvLmFkYXB0ZXJWZXJzaW9uKSxmZSg0KSx3cihoLmh0dHA/IllFUyI6Ik5PIiksZmUoNCksd3IobnVsbD09aC5lbnZpcm9ubWVudEluZm8/bnVsbDpoLmVudmlyb25tZW50SW5mby5EQ19BRE1JTl9HUk9VUCksZmUoNCksd3IobnVsbD09aC5lbnZp''@;'; put 'put ''cm9ubWVudEluZm8/bnVsbDpoLmVudmlyb25tZW50SW5mby5BUFBfTE9DKSxmZSg4KSx3cihudWxsPT1oLmxpY2VuY2VJbmZvP251bGw6aC5saWNlbmNlSW5mby52YWxpZF91bnRpbCksZmUoNCksd3IobnVsbD09aC5saWNlbmNlSW5mbz9udWxsOmgubGljZW5jZUluZm8udXNlcnNfYWxsb3dl''@;'; put 'put ''ZCksZmUoNCksd3IobnVsbD09aC5saWNlbmNlSW5mbz9udWxsOmgubGljZW5jZUluZm8uc2l0ZV9pZF9tdWx0aXBsZSksZmUoNCksd3IobnVsbCE9aC5saWNlbmNlSW5mbyYmaC5saWNlbmNlSW5mby5kZW1vPyJZRVMiOiJOTyIpLGZlKCksTWUoIm5nSWYiLGgubGljZW5jZVN0YXRlLnZhbHVl''@;'; put 'put ''LnZpZXdlcl9yb3dzX2FsbG93ZWQhPT1oLkluZmluaXR5KSxmZSgpLE1lKCJuZ0lmIixoLmxpY2VuY2VTdGF0ZS52YWx1ZS5lZGl0b3Jfcm93c19hbGxvd2VkIT09aC5JbmZpbml0eSksZmUoKSxNZSgibmdJZiIsaC5saWNlbmNlU3RhdGUudmFsdWUuc3RhZ2Vfcm93c19hbGxvd2VkIT09aC5J''@;'; put 'put ''bmZpbml0eSksZmUoKSxNZSgibmdJZiIsaC5saWNlbmNlU3RhdGUudmFsdWUuaGlzdG9yeV9yb3dzX2FsbG93ZWQhPT1oLkluZmluaXR5KSxmZSgpLE1lKCJuZ0lmIixoLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdWJtaXRfcm93c19saW1pdCE9PWguSW5maW5pdHkpLGZlKCksTWUoIm5nSWYiLGgu''@;'; put 'put ''bGljZW5jZVN0YXRlLnZhbHVlLnRhYmxlc19pbl9saWJyYXJ5X2xpbWl0IT09aC5JbmZpbml0eSksZmUoKSxNZSgibmdJZiIsaC5saWNlbmNlU3RhdGUudmFsdWUudmlld2JveF9saW1pdCE9PWguSW5maW5pdHkpLGZlKCksTWUoIm5nSWYiLGgubGljZW5jZVN0YXRlLnZhbHVlLmxpbmVhZ2Vf''@;'; put 'put ''ZGFpbHlfbGltaXQhPT1oLkluZmluaXR5KSxmZSg0KSx3cihoLmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3Ym94PyJZRVMiOiJOTyIpLGZlKDQpLHdyKGgubGljZW5jZVN0YXRlLnZhbHVlLmZpbGVVcGxvYWQ/IllFUyI6Ik5PIiksZmUoNCksd3IoaC5saWNlbmNlU3RhdGUudmFsdWUuZWRpdFJl''@;'; put 'put ''Y29yZD8iWUVTIjoiTk8iKSxmZSg0KSx3cihoLmxpY2VuY2VTdGF0ZS52YWx1ZS5hZGRSZWNvcmQ/IllFUyI6Ik5PIiksZmUoMiksTWUoIm5nSWYiLDE9PT0obnVsbD09aC5lbnZpcm9ubWVudEluZm8/bnVsbDpoLmVudmlyb25tZW50SW5mby5JU0FETUlOKSksZmUoKSxwaSgiY2xyTW9kYWxP''@;'; put 'put ''cGVuIixoLnJlc3BvbnNlTW9kYWwpLGZlKDQpLElyKCIgIixoLnJlc3BvbnNlLCIgIikpfSxkZXBlbmRlbmNpZXM6W2JhLGMxLG91LEt1LGowLFAyXSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpfV07bGV0IGx3dD0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1m''@;'; put 'put ''dW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbemMuZm9yQ2hpbGQoc3d0KSx6Y119KX19cmV0dXJuIGN9KSgpLGN3dD0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlz''@;'; put 'put ''Llx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbUmEsbHd0LHowLFJjXX0pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gdXd0KGMsbCl7MSZjJiZH''@;'; put 'put ''dCgwLCJjbHItaWNvbiIsMTIpfWZ1bmN0aW9uIGR3dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci1pY29uIiwxMyksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9UmUoMik7cmV0dXJuIGguZ3JvdXBTZWFyY2g9IiIsQ3QoaC5ncm91cExpc3RPbkZpbHRl''@;'; put 'put ''cigpKX0pLGhlKCl9fWZ1bmN0aW9uIGh3dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci10cmVlLW5vZGUiLDcpKDEsImRpdiIsOCkoMiwiaW5wdXQiLDksMCksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9UmUoKTtyZXR1cm4gbWkoZi5n''@;'; put 'put ''cm91cFNlYXJjaCxoKXx8KGYuZ3JvdXBTZWFyY2g9aCksQ3QoaCl9KSxGdCgia2V5dXAiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkuZ3JvdXBMaXN0T25GaWx0ZXIoKSl9KSxoZSgpLGd0KDQsdXd0LDEsMCwiY2xyLWljb24iLDEwKSg1LGR3dCwxLDAsImNsci1pY29uIiwxMSks''@;'; put 'put ''aGUoKSgpfWlmKDImYyl7Y29uc3QgYT1oYSgzKSxkPVJlKCk7ZmUoMikscGkoIm5nTW9kZWwiLGQuZ3JvdXBTZWFyY2gpLGZlKDIpLE1lKCJuZ0lmIixhLnZhbHVlLmxlbmd0aDwxKSxmZSgpLE1lKCJuZ0lmIixhLnZhbHVlLmxlbmd0aD4wKX19ZnVuY3Rpb24gZnd0KGMsbCl7aWYoMSZjKXtj''@;'; put 'put ''b25zdCBhPUxuKCk7ZGUoMCwiY2xyLXRyZWUtbm9kZSIsMTUpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPVJlKCkuJGltcGxpY2l0O3JldHVybiBDdChSZSgpLmdyb3VwT25DbGljayhoKSl9KSxkZSgxLCJwIiwxNiksR3QoMiwiY2xyLWljb24iLDE3KSxMZSgzKSxoZSgp''@;'; put 'put ''KCl9aWYoMiZjKXtjb25zdCBhPVJlKCkuJGltcGxpY2l0LGQ9UmUoKTtUcigiYWN0aXZlIixhLkdST1VQVVJJPT09ZC5ncm91cFVyaSksZmUoMyksSXIoIiAiLGEuR1JPVVBOQU1FLCIgIil9fWZ1bmN0aW9uIHB3dChjLGwpe2lmKDEmYyYmKHNpKDApLGd0KDEsZnd0LDQsMywiY2xyLXRyZWUt''@;'; put 'put ''bm9kZSIsMTQpLGxpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgpLE1lKCJuZ0lmIiwhYS5oaWRkZW4pfX1mdW5jdGlvbiBnd3QoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDE4KSgxLCJzcGFuIiwxOSksTGUoMiwiIExvYWRpbmcuLi4gIiksaGUoKSgpKX1mdW5jdGlvbiBtd3QoYyxs''@;'; put 'put ''KXtpZigxJmMmJihkZSgwLCJkaXYiLDIxKSgxLCJkaXYiLDIyKSgyLCJ0YWJsZSIsMjQpKDMsInRib2R5IikoNCwidHIiKSg1LCJ0ZCIsMjUpKDYsInAiLDI2KSg3LCJiIiksTGUoOCksaGUoKSgpKCkoKSxkZSg5LCJ0ciIpKDEwLCJ0ZCIsMjUpKDExLCJpIiksTGUoMTIpLGhlKCkoKSgpKCko''@;'; put 'put ''KSgpKCkpLDImYyl7Y29uc3QgYT1SZSgyKTtmZSg4KSx3cihhLmdyb3VwTmFtZSksZmUoNCksd3IoYS5ncm91cERlc2N8fCJubyBkZXNjcmlwdGlvbiIpfX1mdW5jdGlvbiB2d3QoYyxsKXsxJmMmJihkZSgwLCJoNSIpLExlKDEsIk5vIE1lbWJlcnMgUHJlc2VudCIpLGhlKCkpfWZ1bmN0aW9u''@;'; put 'put ''IGJ3dChjLGwpezEmYyYmKHNpKDApLGRlKDEsInRkIiwzMSkoMiwiYiIpLExlKDMsIk5BTUUiKSxoZSgpKCksZGUoNCwidGQiLDMxKSg1LCJiIiksTGUoNiwiRU1BSUwiKSxoZSgpKCksZGUoNywidGQiLDMxKSg4LCJiIiksTGUoOSwiQ1JFQVRFRCIpLGhlKCkoKSxkZSgxMCwidGQiLDMyKSgx''@;'; put 'put ''MSwiYiIpLExlKDEyLCJVUERBVEVEIiksaGUoKSgpLGxpKCkpfWZ1bmN0aW9uIHl3dChjLGwpezEmYyYmKHNpKDApLGRlKDEsInRkIiwzMSkoMiwiYiIpLExlKDMsIklEIiksaGUoKSgpLGRlKDQsInRkIiwzMSkoNSwiYiIpLExlKDYsIkRJU1BMQVkgTkFNRSIpLGhlKCkoKSxkZSg3LCJ0ZCIs''@;'; put 'put ''MzEpKDgsImIiKSxMZSg5LCJVU0VSIE5BTUUiKSxoZSgpKCksbGkoKSl9ZnVuY3Rpb24gX3d0KGMsbCl7aWYoMSZjJiYoc2koMCksZGUoMSwidGQiLDMyKSxMZSgyKSxoZSgpLGRlKDMsInRkIiwzMiksTGUoNCksaGUoKSxkZSg1LCJ0ZCIsMzIpLExlKDYpLGhlKCksZGUoNywidGQiLDMyKSxM''@;'; put 'put ''ZSg4KSxoZSgpLGxpKCkpLDImYyl7Y29uc3QgYT1SZSgpLiRpbXBsaWNpdDtmZSgyKSx3cihhLk1FTUJFUk5BTUUpLGZlKDIpLHdyKGEuRU1BSUwpLGZlKDIpLHdyKGEuTUVNQkVSQ1JFQVRFRCksZmUoMiksd3IoYS5NRU1CRVJVUERBVEVEKX19ZnVuY3Rpb24gd3d0KGMsbCl7aWYoMSZjJiYo''@;'; put 'put ''c2koMCksZGUoMSwidGQiLDMyKSxMZSgyKSxoZSgpLGRlKDMsInRkIiwzMiksTGUoNCksaGUoKSxkZSg1LCJ0ZCIsMzIpLExlKDYpLGhlKCksbGkoKSksMiZjKXtjb25zdCBhPVJlKCkuJGltcGxpY2l0O2ZlKDIpLHdyKGEuSUQpLGZlKDIpLHdyKGEuRElTUExBWU5BTUUpLGZlKDIpLHdyKGEu''@;'; put 'put ''VVNFUk5BTUUpfX1mdW5jdGlvbiBDd3QoYyxsKXtpZigxJmMmJihkZSgwLCJ0ciIsMzMpLGd0KDEsX3d0LDksNCwibmctY29udGFpbmVyIiw2KSgyLHd3dCw3LDMsIm5nLWNvbnRhaW5lciIsNiksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9UmUoNCk7TWUoInJvdXRlckxpbmsi''@;'; put 'put ''LCIvdmlldy91c2VybmF2L3VzZXJzLyIrKGEuVVJJTUVNfHxhLklEKSksZmUoKSxNZSgibmdJZiIsZC5zZXJ2ZXJUeXBlPT09ZC5TZXJ2ZXJUeXBlLlNhczkpLGZlKCksTWUoIm5nSWYiLGQuc2VydmVyVHlwZT09PWQuU2VydmVyVHlwZS5TYXNqcyl9fWZ1bmN0aW9uIFN3dChjLGwpe2lmKDEm''@;'; put 'put ''YyYmKGRlKDAsInRhYmxlIiwyOSkoMSwidGhlYWQiKSgyLCJ0ciIpLGd0KDMsYnd0LDEzLDAsIm5nLWNvbnRhaW5lciIsNikoNCx5d3QsMTAsMCwibmctY29udGFpbmVyIiw2KSxoZSgpKCksZGUoNSwidGJvZHkiKSxndCg2LEN3dCwzLDMsInRyIiwzMCksaGUoKSgpKSwyJmMpe2NvbnN0IGE9''@;'; put 'put ''UmUoMyk7ZmUoMyksTWUoIm5nSWYiLGEuc2VydmVyVHlwZT09PWEuU2VydmVyVHlwZS5TYXM5KSxmZSgpLE1lKCJuZ0lmIixhLnNlcnZlclR5cGU9PT1hLlNlcnZlclR5cGUuU2FzanMpLGZlKDIpLE1lKCJuZ0Zvck9mIixhLmdyb3VwTWVtYmVycyl9fWZ1bmN0aW9uIE13dChjLGwpe2lmKDEm''@;'; put 'put ''YyYmKGRlKDAsImRpdiIpKDEsImgzIiksTGUoMiksaGUoKSxndCgzLHZ3dCwyLDAsImg1Iiw2KSxkZSg0LCJkaXYiLDI3KSxndCg1LFN3dCw3LDMsInRhYmxlIiwyOCksaGUoKSgpKSwyJmMpe2NvbnN0IGE9UmUoMik7ZmUoMiksSXIoIk1FTUJFUlMgKCIsYS5ncm91cE1lbWJlckNvdW50LCIp''@;'; put 'put ''IiksZmUoKSxNZSgibmdJZiIsMD09YS5ncm91cE1lbWJlckNvdW50KSxmZSgyKSxNZSgibmdJZiIsMCE9YS5ncm91cE1lbWJlckNvdW50KX19ZnVuY3Rpb24geHd0KGMsbCl7MSZjJiYoZGUoMCwiaDUiKSxMZSgxLCJObyBNZW1iZXJzIFByZXNlbnQiKSxoZSgpKX1mdW5jdGlvbiBFd3QoYyxs''@;'; put 'put ''KXtpZigxJmMmJihkZSgwLCJ0ciIsMzMpKDEsInRkIiwzMiksTGUoMiksaGUoKSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7TWUoInJvdXRlckxpbmsiLCIvdmlldy91c2VybmF2L3VzZXJzLyIrYS5NRU1CRVJJRCksZmUoMiksd3IoYS5NRU1CRVJOQU1FKX19ZnVuY3Rpb24gVHd0KGMs''@;'; put 'put ''bCl7aWYoMSZjJiYoZGUoMCwidGFibGUiLDI5KSgxLCJ0aGVhZCIpKDIsInRyIikoMywidGQiKSg0LCJiIiksTGUoNSksaGUoKSgpKCkoKSxkZSg2LCJ0Ym9keSIpLGd0KDcsRXd0LDMsMiwidHIiLDMwKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1SZSgzKTtmZSg1KSxJcigiTUVNQkVSUyAoIixh''@;'; put 'put ''Lmdyb3VwTWVtYmVyQ291bnQsIikiKSxmZSgyKSxNZSgibmdGb3JPZiIsYS5ncm91cE1lbWJlcnMpfX1mdW5jdGlvbiBBd3QoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiKSgxLCJoMyIpLExlKDIpLGhlKCksZ3QoMyx4d3QsMiwwLCJoNSIsNiksZGUoNCwiZGl2IiwyNyksZ3QoNSxUd3QsOCwy''@;'; put 'put ''LCJ0YWJsZSIsMjgpLGhlKCkoKSksMiZjKXtjb25zdCBhPVJlKDIpO2ZlKDIpLHdyKGEuZ3JvdXBOYW1lKSxmZSgpLE1lKCJuZ0lmIiwwPT1hLmdyb3VwTWVtYmVyQ291bnQpLGZlKDIpLE1lKCJuZ0lmIiwwIT1hLmdyb3VwTWVtYmVyQ291bnQpfX1mdW5jdGlvbiBrd3QoYyxsKXtpZigxJmMm''@;'; put 'put ''JihkZSgwLCJkaXYiKSxndCgxLG13dCwxMywyLCJkaXYiLDIwKSxkZSgyLCJkaXYiLDIxKSgzLCJkaXYiLDIyKSg0LCJkaXYiLDIzKSxndCg1LE13dCw2LDMsImRpdiIsNikoNixBd3QsNiwzLCJkaXYiLDYpLEd0KDcsImJyIiksaGUoKSgpKCkoKSksMiZjKXtjb25zdCBhPVJlKCk7ZmUoKSxN''@;'; put 'put ''ZSgibmdJZiIsYS5zZXJ2ZXJUeXBlIT09YS5TZXJ2ZXJUeXBlLlNhc1ZpeWEpLGZlKDQpLE1lKCJuZ0lmIixhLnNlcnZlclR5cGUhPT1hLlNlcnZlclR5cGUuU2FzVml5YSksZmUoKSxNZSgibmdJZiIsYS5zZXJ2ZXJUeXBlPT09YS5TZXJ2ZXJUeXBlLlNhc1ZpeWEpfX1sZXQgdDhlPSgoKT0+''@;'; put 'put ''e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2KXt0aGlzLnNhc1NlcnZpY2U9YSx0aGlzLmhlbHBlclNlcnZpY2U9ZCx0aGlzLnJvdXRlcj1oLHRoaXMubG9jYXRpb249Zix0aGlzLnJvdXRlPXYsdGhpcy5ncm91cFNlYXJjaD0iIix0aGlzLnBhcmFtUHJlc2VudD0hMSx0aGlzLnBhcmFt''@;'; put 'put ''VVJJPSIiLHRoaXMuZ3JvdXBVcmk9IiIsdGhpcy5ncm91cE5hbWU9IiIsdGhpcy5ncm91cERlc2M9IiIsdGhpcy5zYXNqc0NvbmZpZz1uZXcgbWguU0FTanNDb25maWcsdGhpcy5pc1ZpeWE9ITEsdGhpcy5sb2FkaW5nPSExLHRoaXMuU2VydmVyVHlwZT1CMC5ZLHRoaXMuc2FzanNDb25maWc9''@;'; put 'put ''dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCksdGhpcy5zZXJ2ZXJUeXBlPXRoaXMuc2FzU2VydmljZS5nZXRTZXJ2ZXJUeXBlKCksIlNBU1ZJWUEiPT09dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlJiYodGhpcy5pc1ZpeWE9ITApfW5nT25Jbml0KCl7S24udmlld2VyLmN1cnJl''@;'; put 'put ''bnRTZWxlY3Rpb249InZpZXcvdXNlcm5hdi9ncm91cHMiLHZvaWQgMCE9PXRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLnVyaSYmKHRoaXMucGFyYW1QcmVzZW50PSEwLHRoaXMucGFyYW1VUkk9dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMudXJpKSxLbi51c2VybmF2Lmdyb3VwTGlzdCYm''@;'; put 'put ''IXRoaXMucGFyYW1QcmVzZW50Pyh0aGlzLmdyb3Vwcz1Lbi51c2VybmF2Lmdyb3VwTGlzdCx0aGlzLmdyb3VwU2VhcmNoPUtuLnVzZXJuYXYuZ3JvdXBTZWFyY2gpOih2b2lkIDA9PT1Lbi51c2VybmF2Lmdyb3VwTGlzdD8odGhpcy5sb2FkaW5nPSEwLHRoaXMuaXNWaXlhP2ZldGNoKHRoaXMu''@;'; put 'put ''c2FzanNDb25maWcuc2VydmVyVXJsKyIvaWRlbnRpdGllcy9ncm91cHM/bGltaXQ9MjAwMCIse2hlYWRlcnM6e0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiJ9fSkudGhlbihhPT5hLnRleHQoKSkudGhlbihhPT57bGV0IGg9SlNPTi5wYXJzZShhKS5pdGVtcy5tYXAoZj0+KHtHUk9VUFVSSTpm''@;'; put 'put ''LmlkLEdST1VQTkFNRTpmLm5hbWUsR1JPVVBERVNDOmYuZGVzY3JpcHRpb259KSk7dGhpcy5sb2FkaW5nPSExLHRoaXMuZ3JvdXBzPWgsS24udXNlcm5hdi5ncm91cExpc3Q9aH0pOnRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJwdWJsaWMvZ2V0Z3JvdXBzIixudWxsKS50aGVuKGE9Pnt0aGlz''@;'; put 'put ''LmxvYWRpbmc9ITEsdGhpcy5ncm91cHM9YS5hZGFwdGVyUmVzcG9uc2UuZ3JvdXBzLEtuLnVzZXJuYXYuZ3JvdXBMaXN0PWEuYWRhcHRlclJlc3BvbnNlLmdyb3Vwc30pKToodGhpcy5ncm91cHM9S24udXNlcm5hdi5ncm91cExpc3QsdGhpcy5ncm91cFNlYXJjaD1Lbi51c2VybmF2Lmdyb3Vw''@;'; put 'put ''U2VhcmNoKSx0aGlzLnBhcmFtUHJlc2VudCYmKHRoaXMubG9hZGluZz0hMCx0aGlzLmlzVml5YT9mZXRjaCh0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCsiL2lkZW50aXRpZXMvZ3JvdXBzLyIrdGhpcy5wYXJhbVVSSSsiL21lbWJlcnM/bGltaXQ9MjAwMCIse2hlYWRlcnM6e0FjY2VwdDoi''@;'; put 'put ''YXBwbGljYXRpb24vanNvbiJ9fSkudGhlbihhPT5hLnRleHQoKSkudGhlbihhPT57bGV0IGQ9SlNPTi5wYXJzZShhKTt0aGlzLmxvYWRpbmc9ITE7bGV0IGg9ZC5pdGVtcy5tYXAoZj0+KHtNRU1CRVJOQU1FOmYubmFtZSxNRU1CRVJJRDpmLmlkfSkpO3RoaXMuZ3JvdXBNZW1iZXJzPWgsdGhp''@;'; put 'put ''cy5ncm91cE1lbWJlckNvdW50PWgubGVuZ3RoLHRoaXMuZ3JvdXBVcmk9dGhpcy5wYXJhbVVSSSx0aGlzLmdyb3VwTmFtZT10aGlzLnBhcmFtVVJJfSk6dGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoInVzZXJuYXYvdXNlcm1lbWJlcnNieWdyb3VwIix7aXdhbnQ6W3tncm91cGlkOnRoaXMucGFy''@;'; put 'put ''YW1VUkl9XX0pLnRoZW4oZD0+e3RoaXMuZ3JvdXBNZW1iZXJzPWQuYWRhcHRlclJlc3BvbnNlLnNhc21lbWJlcnMsdGhpcy5ncm91cE1lbWJlckNvdW50PWQuYWRhcHRlclJlc3BvbnNlLnNhc21lbWJlcnMubGVuZ3RoLHZvaWQgMCE9PWQuYWRhcHRlclJlc3BvbnNlLnNhc21lbWJlcnNbMF0m''@;'; put 'put ''Jih0aGlzLmxvYWRpbmc9ITEsdGhpcy5ncm91cFVyaT1kLmFkYXB0ZXJSZXNwb25zZS5zYXNtZW1iZXJzWzBdLlVSSU1FTXx8dGhpcy5wYXJhbVVSSSx0aGlzLmdyb3VwTmFtZT1kLmFkYXB0ZXJSZXNwb25zZS5zYXNtZW1iZXJzWzBdLkdST1VQTkFNRSx0aGlzLmdyb3VwRGVzYz1kLmFkYXB0''@;'; put 'put ''ZXJSZXNwb25zZS5zYXNtZW1iZXJzWzBdLkdST1VQREVTQyx0aGlzLmdyb3VwTmFtZXx8KHRoaXMuZ3JvdXBOYW1lPXRoaXMucGFyYW1VUkkpKX0pKSl9Z3JvdXBMaXN0T25GaWx0ZXIoKXt0aGlzLmhlbHBlclNlcnZpY2UubGlicmFyeU9uRmlsdGVyKHRoaXMuZ3JvdXBzLHRoaXMuZ3JvdXBT''@;'; put 'put ''ZWFyY2gsIkdST1VQTkFNRSIpLEtuLnVzZXJuYXYuZ3JvdXBTZWFyY2g9dGhpcy5ncm91cFNlYXJjaH1ncm91cE9uQ2xpY2soYSl7dGhpcy5sb2FkaW5nPSEwO2xldCBkPXRoaXMucm91dGVyLnVybDt0aGlzLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZSh0aGlzLnBhcmFtUHJlc2VudD9kLnNsaWNl''@;'; put 'put ''KDAsZC5sYXN0SW5kZXhPZigiLyIpKSsiLyIrZW5jb2RlVVJJKGEuR1JPVVBVUkkpOmQrIi8iK2VuY29kZVVSSShhLkdST1VQVVJJKSksdGhpcy5pc1ZpeWE/ZmV0Y2godGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwrIi9pZGVudGl0aWVzL2dyb3Vwcy8iK2EuR1JPVVBVUkkrIi9tZW1iZXJz''@;'; put 'put ''P2xpbWl0PTIwMDAiLHtoZWFkZXJzOntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24ifX0pLnRoZW4oaD0+aC50ZXh0KCkpLnRoZW4oaD0+e2xldCBmPUpTT04ucGFyc2UoaCk7dGhpcy5sb2FkaW5nPSExLHRoaXMuZ3JvdXBVcmk9YS5HUk9VUFVSSSx0aGlzLmdyb3VwTmFtZT1hLkdST1VQTkFN''@;'; put 'put ''RSx0aGlzLmdyb3VwRGVzYz1hLkdST1VQREVTQztsZXQgdj1mLml0ZW1zLm1hcChNPT4oe01FTUJFUk5BTUU6TS5uYW1lLE1FTUJFUklEOk0uaWR9KSk7dGhpcy5ncm91cE1lbWJlcnM9dix0aGlzLmdyb3VwTWVtYmVyQ291bnQ9di5sZW5ndGh9KTp0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgi''@;'; put 'put ''dXNlcm5hdi91c2VybWVtYmVyc2J5Z3JvdXAiLHtpd2FudDpbe2dyb3VwaWQ6YS5HUk9VUFVSSX1dfSkudGhlbihmPT57dGhpcy5sb2FkaW5nPSExLHRoaXMuZ3JvdXBVcmk9YS5HUk9VUFVSSSx0aGlzLmdyb3VwTmFtZT1hLkdST1VQTkFNRSx0aGlzLmdyb3VwRGVzYz1hLkdST1VQREVTQyx0''@;'; put 'put ''aGlzLmdyb3VwTWVtYmVycz1mLmFkYXB0ZXJSZXNwb25zZS5zYXNtZW1iZXJzLHRoaXMuZ3JvdXBNZW1iZXJDb3VudD1mLmFkYXB0ZXJSZXNwb25zZS5zYXNtZW1iZXJzLmxlbmd0aH0pfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKEdzKSxH''@;'; put 'put ''ZShTdSksR2UoTHMpLEdlKGZoKSxHZShDdSkpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLWdyb3VwIl1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxkZWNsczo3LHZhcnM6NCxjb25zdHM6W1sic2VhcmNoTGliVHJlZUlucHV0''@;'; put 'put ''IiwiIl0sWzEsInNpZGViYXItaGVpZ2h0Il0sWyJjbGFzcyIsInNlYXJjaC1ub2RlIiw0LCJuZ0lmIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJjb250ZW50LWFyZWEiXSxbImNsYXNzIiwibG9hZGluZ1NwaW5uZXIiLDQsIm5nSWYiXSxbNCwibmdJZiJdLFsxLCJzZWFyY2gtbm9kZSJd''@;'; put 'put ''LFsxLCJ0cmVlLXNlYXJjaC13cmFwcGVyIl0sWyJhcHBTdGVhbEZvY3VzIiwiIiwiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIkZpbHRlciBieSBHcm91cHMiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCIsIm5nTW9kZWwi''@;'; put 'put ''XSxbInNoYXBlIiwic2VhcmNoIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayIsNCwibmdJZiJdLFsic2hhcGUiLCJzZWFyY2giXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIl0sWzMsImFjdGl2ZSIsImNsaWNrIiw0LCJuZ0lmIl0sWzMsImNsaWNrIl0sWzEsIm0tMCIs''@;'; put 'put ''ImN1cnNvci1wb2ludGVyIiwibGlzdC1wYWRkaW5nIl0sWyJzaGFwZSIsInVzZXJzIl0sWzEsImxvYWRpbmdTcGlubmVyIl0sWzEsInNwaW5uZXIiXSxbImNsYXNzIiwiY2xyLXJvdyIsNCwibmdJZiJdLFsxLCJjbHItcm93Il0sWzEsImNsci1jb2wtOCJdLFsxLCJjYXJkIiwiZ3JvdXAtZGF0''@;'; put 'put ''YSJdLFsxLCJ0YWJsZSIsImdyb3VwLWluZm8iXSxbMSwibGVmdCJdLFsxLCJncm91cC1pbmZvLXRleHQiXSxbMSwidGFibGUtY29udGFpbmVyIl0sWyJjbGFzcyIsInRhYmxlIG1lbWJlci10YWJsZSIsNCwibmdJZiJdLFsxLCJ0YWJsZSIsIm1lbWJlci10YWJsZSJdLFszLCJyb3V0ZXJMaW5r''@;'; put 'put ''Iiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwid2lkdGgtMjUiXSxbMSwiIl0sWzMsInJvdXRlckxpbmsiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJihkZSgwLCJhcHAtc2lkZWJhciIsMSkoMSwiY2xyLXRyZWUiKSxndCgyLGh3dCw2LDMsImNsci10cmVlLW5vZGUiLDIpKDMscHd0''@;'; put 'put ''LDIsMSwibmctY29udGFpbmVyIiwzKSxoZSgpKCksZGUoNCwiZGl2Iiw0KSxndCg1LGd3dCwzLDAsImRpdiIsNSkoNixrd3QsOCwzLCJkaXYiLDYpLGhlKCkpLDImZCYmKGZlKDIpLE1lKCJuZ0lmIixoLmdyb3VwcyksZmUoKSxNZSgibmdGb3JPZiIsaC5ncm91cHMpLGZlKDIpLE1lKCJuZ0lm''@;'; put 'put ''IixoLmxvYWRpbmcpLGZlKCksTWUoIm5nSWYiLGguZ3JvdXBNZW1iZXJzJiYhaC5sb2FkaW5nKSl9LGRlcGVuZGVuY2llczpbbnMsYmEsYzEscWwsbmwsJHMsRWgsUGQsSGwsWjEsaTQscjRdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gRHd0KCl7fWZ1bmN0aW9u''@;'; put 'put ''IGF0ZShjKXtyZXR1cm4gbnVsbD09Yz9Ed3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yKGMpfX1mdW5jdGlvbiBuOGUoYyl7cmV0dXJuIG51bGw9PWM/W106QXJyYXkuaXNBcnJheShjKT9jOkFycmF5LmZyb20oYyl9ZnVuY3Rpb24gUnd0KCl7cmV0dXJuW119ZnVuY3Rp''@;'; put 'put ''b24gcjhlKGMpe3JldHVybiBudWxsPT1jP1J3dDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwoYyl9fWZ1bmN0aW9uIGk4ZShjKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXRjaGVzKGMpfX1mdW5jdGlvbiBhOGUoYyl7cmV0dXJuIGZ1bmN0aW9uKGwp''@;'; put 'put ''e3JldHVybiBsLm1hdGNoZXMoYyl9fXZhciBQd3Q9QXJyYXkucHJvdG90eXBlLmZpbmQ7ZnVuY3Rpb24gSHd0KCl7cmV0dXJuIHRoaXMuZmlyc3RFbGVtZW50Q2hpbGR9dmFyIFZ3dD1BcnJheS5wcm90b3R5cGUuZmlsdGVyO2Z1bmN0aW9uIEJ3dCgpe3JldHVybiBBcnJheS5mcm9tKHRoaXMu''@;'; put 'put ''Y2hpbGRyZW4pfWZ1bmN0aW9uIG84ZShjKXtyZXR1cm4gbmV3IEFycmF5KGMubGVuZ3RoKX1mdW5jdGlvbiBkTihjLGwpe3RoaXMub3duZXJEb2N1bWVudD1jLm93bmVyRG9jdW1lbnQsdGhpcy5uYW1lc3BhY2VVUkk9Yy5uYW1lc3BhY2VVUkksdGhpcy5fbmV4dD1udWxsLHRoaXMuX3BhcmVu''@;'; put 'put ''dD1jLHRoaXMuX19kYXRhX189bH1mdW5jdGlvbiBZd3QoYyxsLGEsZCxoLGYpe2Zvcih2YXIgTSx2PTAsRD1sLmxlbmd0aCxaPWYubGVuZ3RoO3Y8WjsrK3YpKE09bFt2XSk/KE0uX19kYXRhX189Zlt2XSxkW3ZdPU0pOmFbdl09bmV3IGROKGMsZlt2XSk7Zm9yKDt2PEQ7Kyt2KShNPWxbdl0p''@;'; put 'put ''JiYoaFt2XT1NKX1mdW5jdGlvbiBHd3QoYyxsLGEsZCxoLGYsdil7dmFyIE0sRCxFZSxaPW5ldyBNYXAscmU9bC5sZW5ndGgsY2U9Zi5sZW5ndGgsYmU9bmV3IEFycmF5KHJlKTtmb3IoTT0wO008cmU7KytNKShEPWxbTV0pJiYoYmVbTV09RWU9di5jYWxsKEQsRC5fX2RhdGFfXyxNLGwpKyIi''@;'; put 'put ''LFouaGFzKEVlKT9oW01dPUQ6Wi5zZXQoRWUsRCkpO2ZvcihNPTA7TTxjZTsrK00pRWU9di5jYWxsKGMsZltNXSxNLGYpKyIiLChEPVouZ2V0KEVlKSk/KGRbTV09RCxELl9fZGF0YV9fPWZbTV0sWi5kZWxldGUoRWUpKTphW01dPW5ldyBkTihjLGZbTV0pO2ZvcihNPTA7TTxyZTsrK00pKEQ9''@;'; put 'put ''bFtNXSkmJlouZ2V0KGJlW01dKT09PUQmJihoW01dPUQpfWZ1bmN0aW9uICR3dChjKXtyZXR1cm4gYy5fX2RhdGFfX31mdW5jdGlvbiBxd3QoYyl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBjJiYibGVuZ3RoImluIGM/YzpBcnJheS5mcm9tKGMpfWZ1bmN0aW9uIG5DdChjLGwpe3JldHVybiBj''@;'; put 'put ''PGw/LTE6Yz5sPzE6Yz49bD8wOk5hTn1kTi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmROLGFwcGVuZENoaWxkOmZ1bmN0aW9uKGMpe3JldHVybiB0aGlzLl9wYXJlbnQuaW5zZXJ0QmVmb3JlKGMsdGhpcy5fbmV4dCl9LGluc2VydEJlZm9yZTpmdW5jdGlvbihjLGwpe3JldHVybiB0aGlzLl9w''@;'; put 'put ''YXJlbnQuaW5zZXJ0QmVmb3JlKGMsbCl9LHF1ZXJ5U2VsZWN0b3I6ZnVuY3Rpb24oYyl7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yKGMpfSxxdWVyeVNlbGVjdG9yQWxsOmZ1bmN0aW9uKGMpe3JldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3RvckFsbChjKX19O3ZhciBv''@;'; put 'put ''dGU9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiO2NvbnN0IHM4ZT17c3ZnOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIseGh0bWw6b3RlLHhsaW5rOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIix4bWw6Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFj''@;'; put 'put ''ZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvIn07ZnVuY3Rpb24gaE4oYyl7dmFyIGw9Yys9IiIsYT1sLmluZGV4T2YoIjoiKTtyZXR1cm4gYT49MCYmInhtbG5zIiE9PShsPWMuc2xpY2UoMCxhKSkmJihjPWMuc2xpY2UoYSsxKSksczhlLmhhc093blByb3BlcnR5KGwp''@;'; put 'put ''P3tzcGFjZTpzOGVbbF0sbG9jYWw6Y306Y31mdW5jdGlvbiBjQ3QoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUoYyl9fWZ1bmN0aW9uIHVDdChjKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGMuc3BhY2UsYy5sb2NhbCl9fWZ1bmN0''@;'; put 'put ''aW9uIGRDdChjLGwpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlKGMsbCl9fWZ1bmN0aW9uIGhDdChjLGwpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlTlMoYy5zcGFjZSxjLmxvY2FsLGwpfX1mdW5jdGlvbiBmQ3QoYyxsKXtyZXR1cm4gZnVuY3Rpb24o''@;'; put 'put ''KXt2YXIgYT1sLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1hP3RoaXMucmVtb3ZlQXR0cmlidXRlKGMpOnRoaXMuc2V0QXR0cmlidXRlKGMsYSl9fWZ1bmN0aW9uIHBDdChjLGwpe3JldHVybiBmdW5jdGlvbigpe3ZhciBhPWwuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PWE/dGhp''@;'; put 'put ''cy5yZW1vdmVBdHRyaWJ1dGVOUyhjLnNwYWNlLGMubG9jYWwpOnRoaXMuc2V0QXR0cmlidXRlTlMoYy5zcGFjZSxjLmxvY2FsLGEpfX1mdW5jdGlvbiBsOGUoYyl7cmV0dXJuIGMub3duZXJEb2N1bWVudCYmYy5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fHxjLmRvY3VtZW50JiZjfHxjLmRl''@;'; put 'put ''ZmF1bHRWaWV3fWZ1bmN0aW9uIG1DdChjKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGMpfX1mdW5jdGlvbiB2Q3QoYyxsLGEpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkoYyxsLGEpfX1mdW5jdGlvbiBiQ3QoYyxsLGEpe3Jl''@;'; put 'put ''dHVybiBmdW5jdGlvbigpe3ZhciBkPWwuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PWQ/dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShjKTp0aGlzLnN0eWxlLnNldFByb3BlcnR5KGMsZCxhKX19ZnVuY3Rpb24gRXcoYyxsKXtyZXR1cm4gYy5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKGwp''@;'; put 'put ''fHxsOGUoYykuZ2V0Q29tcHV0ZWRTdHlsZShjLG51bGwpLmdldFByb3BlcnR5VmFsdWUobCl9ZnVuY3Rpb24gX0N0KGMpe3JldHVybiBmdW5jdGlvbigpe2RlbGV0ZSB0aGlzW2NdfX1mdW5jdGlvbiB3Q3QoYyxsKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzW2NdPWx9fWZ1bmN0aW9uIENDdChj''@;'; put 'put ''LGwpe3JldHVybiBmdW5jdGlvbigpe3ZhciBhPWwuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PWE/ZGVsZXRlIHRoaXNbY106dGhpc1tjXT1hfX1mdW5jdGlvbiBjOGUoYyl7cmV0dXJuIGMudHJpbSgpLnNwbGl0KC9efFxzKy8pfWZ1bmN0aW9uIHN0ZShjKXtyZXR1cm4gYy5jbGFzc0xp''@;'; put 'put ''c3R8fG5ldyB1OGUoYyl9ZnVuY3Rpb24gdThlKGMpe3RoaXMuX25vZGU9Yyx0aGlzLl9uYW1lcz1jOGUoYy5nZXRBdHRyaWJ1dGUoImNsYXNzIil8fCIiKX1mdW5jdGlvbiBkOGUoYyxsKXtmb3IodmFyIGE9c3RlKGMpLGQ9LTEsaD1sLmxlbmd0aDsrK2Q8aDspYS5hZGQobFtkXSl9ZnVuY3Rp''@;'; put 'put ''b24gaDhlKGMsbCl7Zm9yKHZhciBhPXN0ZShjKSxkPS0xLGg9bC5sZW5ndGg7KytkPGg7KWEucmVtb3ZlKGxbZF0pfWZ1bmN0aW9uIE1DdChjKXtyZXR1cm4gZnVuY3Rpb24oKXtkOGUodGhpcyxjKX19ZnVuY3Rpb24geEN0KGMpe3JldHVybiBmdW5jdGlvbigpe2g4ZSh0aGlzLGMpfX1mdW5j''@;'; put 'put ''dGlvbiBFQ3QoYyxsKXtyZXR1cm4gZnVuY3Rpb24oKXsobC5hcHBseSh0aGlzLGFyZ3VtZW50cyk/ZDhlOmg4ZSkodGhpcyxjKX19ZnVuY3Rpb24gQUN0KCl7dGhpcy50ZXh0Q29udGVudD0iIn1mdW5jdGlvbiBrQ3QoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD1jfX1m''@;'; put 'put ''dW5jdGlvbiBEQ3QoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGw9Yy5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy50ZXh0Q29udGVudD1sPz8iIn19ZnVuY3Rpb24gUkN0KCl7dGhpcy5pbm5lckhUTUw9IiJ9ZnVuY3Rpb24gTEN0KGMpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuaW5uZXJI''@;'; put 'put ''VE1MPWN9fWZ1bmN0aW9uIE9DdChjKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbD1jLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLmlubmVySFRNTD1sPz8iIn19ZnVuY3Rpb24gRkN0KCl7dGhpcy5uZXh0U2libGluZyYmdGhpcy5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHRoaXMpfWZ1bmN0''@;'; put 'put ''aW9uIE5DdCgpe3RoaXMucHJldmlvdXNTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMsdGhpcy5wYXJlbnROb2RlLmZpcnN0Q2hpbGQpfWZ1bmN0aW9uIEJDdChjKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbD10aGlzLm93bmVyRG9jdW1lbnQsYT10aGlzLm5hbWVz''@;'; put 'put ''cGFjZVVSSTtyZXR1cm4gYT09PW90ZSYmbC5kb2N1bWVudEVsZW1lbnQubmFtZXNwYWNlVVJJPT09b3RlP2wuY3JlYXRlRWxlbWVudChjKTpsLmNyZWF0ZUVsZW1lbnROUyhhLGMpfX1mdW5jdGlvbiBqQ3QoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3duZXJEb2N1bWVudC5j''@;'; put 'put ''cmVhdGVFbGVtZW50TlMoYy5zcGFjZSxjLmxvY2FsKX19ZnVuY3Rpb24gZjhlKGMpe3ZhciBsPWhOKGMpO3JldHVybihsLmxvY2FsP2pDdDpCQ3QpKGwpfWZ1bmN0aW9uIFVDdCgpe3JldHVybiBudWxsfWZ1bmN0aW9uIFdDdCgpe3ZhciBjPXRoaXMucGFyZW50Tm9kZTtjJiZjLnJlbW92ZUNo''@;'; put 'put ''aWxkKHRoaXMpfWZ1bmN0aW9uIEdDdCgpe3ZhciBjPXRoaXMuY2xvbmVOb2RlKCExKSxsPXRoaXMucGFyZW50Tm9kZTtyZXR1cm4gbD9sLmluc2VydEJlZm9yZShjLHRoaXMubmV4dFNpYmxpbmcpOmN9ZnVuY3Rpb24gJEN0KCl7dmFyIGM9dGhpcy5jbG9uZU5vZGUoITApLGw9dGhpcy5wYXJl''@;'; put 'put ''bnROb2RlO3JldHVybiBsP2wuaW5zZXJ0QmVmb3JlKGMsdGhpcy5uZXh0U2libGluZyk6Y31mdW5jdGlvbiBRQ3QoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGw9dGhpcy5fX29uO2lmKGwpe2Zvcih2YXIgZixhPTAsZD0tMSxoPWwubGVuZ3RoO2E8aDsrK2EpZj1sW2FdLGMudHlwZSYmZi50''@;'; put 'put ''eXBlIT09Yy50eXBlfHxmLm5hbWUhPT1jLm5hbWU/bFsrK2RdPWY6dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGYudHlwZSxmLmxpc3RlbmVyLGYub3B0aW9ucyk7KytkP2wubGVuZ3RoPWQ6ZGVsZXRlIHRoaXMuX19vbn19fWZ1bmN0aW9uIGVTdChjLGwsYSl7cmV0dXJuIGZ1bmN0aW9uKCl7''@;'; put 'put ''dmFyIGgsZD10aGlzLl9fb24sZj1mdW5jdGlvbiBYQ3QoYyl7cmV0dXJuIGZ1bmN0aW9uKGwpe2MuY2FsbCh0aGlzLGwsdGhpcy5fX2RhdGFfXyl9fShsKTtpZihkKWZvcih2YXIgdj0wLE09ZC5sZW5ndGg7djxNOysrdilpZigoaD1kW3ZdKS50eXBlPT09Yy50eXBlJiZoLm5hbWU9PT1jLm5h''@;'; put 'put ''bWUpcmV0dXJuIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihoLnR5cGUsaC5saXN0ZW5lcixoLm9wdGlvbnMpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihoLnR5cGUsaC5saXN0ZW5lcj1mLGgub3B0aW9ucz1hKSx2b2lkKGgudmFsdWU9bCk7dGhpcy5hZGRFdmVudExpc3RlbmVyKGMudHlwZSxm''@;'; put 'put ''LGEpLGg9e3R5cGU6Yy50eXBlLG5hbWU6Yy5uYW1lLHZhbHVlOmwsbGlzdGVuZXI6ZixvcHRpb25zOmF9LGQ/ZC5wdXNoKGgpOnRoaXMuX19vbj1baF19fWZ1bmN0aW9uIHA4ZShjLGwsYSl7dmFyIGQ9bDhlKGMpLGg9ZC5DdXN0b21FdmVudDsiZnVuY3Rpb24iPT10eXBlb2YgaD9oPW5ldyBo''@;'; put 'put ''KGwsYSk6KGg9ZC5kb2N1bWVudC5jcmVhdGVFdmVudCgiRXZlbnQiKSxhPyhoLmluaXRFdmVudChsLGEuYnViYmxlcyxhLmNhbmNlbGFibGUpLGguZGV0YWlsPWEuZGV0YWlsKTpoLmluaXRFdmVudChsLCExLCExKSksYy5kaXNwYXRjaEV2ZW50KGgpfWZ1bmN0aW9uIG5TdChjLGwpe3JldHVy''@;'; put 'put ''biBmdW5jdGlvbigpe3JldHVybiBwOGUodGhpcyxjLGwpfX1mdW5jdGlvbiByU3QoYyxsKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gcDhlKHRoaXMsYyxsLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9fXU4ZS5wcm90b3R5cGU9e2FkZDpmdW5jdGlvbihjKXt0aGlzLl9uYW1lcy5pbmRleE9m''@;'; put 'put ''KGMpPDAmJih0aGlzLl9uYW1lcy5wdXNoKGMpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LHJlbW92ZTpmdW5jdGlvbihjKXt2YXIgbD10aGlzLl9uYW1lcy5pbmRleE9mKGMpO2w+PTAmJih0aGlzLl9uYW1lcy5zcGxpY2UobCwxKSx0''@;'; put 'put ''aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxjb250YWluczpmdW5jdGlvbihjKXtyZXR1cm4gdGhpcy5fbmFtZXMuaW5kZXhPZihjKT49MH19O3ZhciBsdGU9W251bGxdO2Z1bmN0aW9uIGlkKGMsbCl7dGhpcy5fZ3JvdXBzPWMsdGhpcy5f''@;'; put 'put ''cGFyZW50cz1sfWZ1bmN0aW9uIGc4ZSgpe3JldHVybiBuZXcgaWQoW1tkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdXSxsdGUpfWlkLnByb3RvdHlwZT1nOGUucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjppZCxzZWxlY3Q6ZnVuY3Rpb24gSXd0KGMpeyJmdW5jdGlvbiIhPXR5cGVvZiBjJiYoYz1h''@;'; put 'put ''dGUoYykpO2Zvcih2YXIgbD10aGlzLl9ncm91cHMsYT1sLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhOysraClmb3IodmFyIEQsWixmPWxbaF0sdj1mLmxlbmd0aCxNPWRbaF09bmV3IEFycmF5KHYpLHJlPTA7cmU8djsrK3JlKShEPWZbcmVdKSYmKFo9Yy5jYWxsKEQsRC5fX2RhdGFf''@;'; put 'put ''XyxyZSxmKSkmJigiX19kYXRhX18iaW4gRCYmKFouX19kYXRhX189RC5fX2RhdGFfXyksTVtyZV09Wik7cmV0dXJuIG5ldyBpZChkLHRoaXMuX3BhcmVudHMpfSxzZWxlY3RBbGw6ZnVuY3Rpb24gT3d0KGMpe2M9ImZ1bmN0aW9uIj09dHlwZW9mIGM/ZnVuY3Rpb24gTHd0KGMpe3JldHVybiBm''@;'; put 'put ''dW5jdGlvbigpe3JldHVybiBuOGUoYy5hcHBseSh0aGlzLGFyZ3VtZW50cykpfX0oYyk6cjhlKGMpO2Zvcih2YXIgbD10aGlzLl9ncm91cHMsYT1sLmxlbmd0aCxkPVtdLGg9W10sZj0wO2Y8YTsrK2YpZm9yKHZhciBELHY9bFtmXSxNPXYubGVuZ3RoLFo9MDtaPE07KytaKShEPXZbWl0pJiYo''@;'; put 'put ''ZC5wdXNoKGMuY2FsbChELEQuX19kYXRhX18sWix2KSksaC5wdXNoKEQpKTtyZXR1cm4gbmV3IGlkKGQsaCl9LHNlbGVjdENoaWxkOmZ1bmN0aW9uIE53dChjKXtyZXR1cm4gdGhpcy5zZWxlY3QobnVsbD09Yz9Id3Q6ZnVuY3Rpb24gRnd0KGMpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBQ''@;'; put 'put ''d3QuY2FsbCh0aGlzLmNoaWxkcmVuLGMpfX0oImZ1bmN0aW9uIj09dHlwZW9mIGM/YzphOGUoYykpKX0sc2VsZWN0Q2hpbGRyZW46ZnVuY3Rpb24gend0KGMpe3JldHVybiB0aGlzLnNlbGVjdEFsbChudWxsPT1jP0J3dDpmdW5jdGlvbiBqd3QoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJu''@;'; put 'put ''IFZ3dC5jYWxsKHRoaXMuY2hpbGRyZW4sYyl9fSgiZnVuY3Rpb24iPT10eXBlb2YgYz9jOmE4ZShjKSkpfSxmaWx0ZXI6ZnVuY3Rpb24gVXd0KGMpeyJmdW5jdGlvbiIhPXR5cGVvZiBjJiYoYz1pOGUoYykpO2Zvcih2YXIgbD10aGlzLl9ncm91cHMsYT1sLmxlbmd0aCxkPW5ldyBBcnJheShh''@;'; put 'put ''KSxoPTA7aDxhOysraClmb3IodmFyIEQsZj1sW2hdLHY9Zi5sZW5ndGgsTT1kW2hdPVtdLFo9MDtaPHY7KytaKShEPWZbWl0pJiZjLmNhbGwoRCxELl9fZGF0YV9fLFosZikmJk0ucHVzaChEKTtyZXR1cm4gbmV3IGlkKGQsdGhpcy5fcGFyZW50cyl9LGRhdGE6ZnVuY3Rpb24gS3d0KGMsbCl7''@;'; put 'put ''aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIEFycmF5LmZyb20odGhpcywkd3QpO3ZhciBhPWw/R3d0Oll3dCxkPXRoaXMuX3BhcmVudHMsaD10aGlzLl9ncm91cHM7ImZ1bmN0aW9uIiE9dHlwZW9mIGMmJihjPWZ1bmN0aW9uIFd3dChjKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gY319''@;'; put 'put ''KGMpKTtmb3IodmFyIGY9aC5sZW5ndGgsdj1uZXcgQXJyYXkoZiksTT1uZXcgQXJyYXkoZiksRD1uZXcgQXJyYXkoZiksWj0wO1o8ZjsrK1ope3ZhciByZT1kW1pdLGNlPWhbWl0sYmU9Y2UubGVuZ3RoLEVlPXF3dChjLmNhbGwocmUscmUmJnJlLl9fZGF0YV9fLFosZCkpLEJlPUVlLmxlbmd0''@;'; put 'put ''aCxxZT1NW1pdPW5ldyBBcnJheShCZSkscnQ9dltaXT1uZXcgQXJyYXkoQmUpO2EocmUsY2UscWUscnQsRFtaXT1uZXcgQXJyYXkoYmUpLEVlLGwpO2Zvcih2YXIgdm4sQ24sZHQ9MCxKdD0wO2R0PEJlOysrZHQpaWYodm49cWVbZHRdKXtmb3IoZHQ+PUp0JiYoSnQ9ZHQrMSk7IShDbj1ydFtK''@;'; put 'put ''dF0pJiYrK0p0PEJlOyk7dm4uX25leHQ9Q258fG51bGx9fXJldHVybih2PW5ldyBpZCh2LGQpKS5fZW50ZXI9TSx2Ll9leGl0PUQsdn0sZW50ZXI6ZnVuY3Rpb24gWnd0KCl7cmV0dXJuIG5ldyBpZCh0aGlzLl9lbnRlcnx8dGhpcy5fZ3JvdXBzLm1hcChvOGUpLHRoaXMuX3BhcmVudHMpfSxl''@;'; put 'put ''eGl0OmZ1bmN0aW9uIFh3dCgpe3JldHVybiBuZXcgaWQodGhpcy5fZXhpdHx8dGhpcy5fZ3JvdXBzLm1hcChvOGUpLHRoaXMuX3BhcmVudHMpfSxqb2luOmZ1bmN0aW9uIEp3dChjLGwsYSl7dmFyIGQ9dGhpcy5lbnRlcigpLGg9dGhpcyxmPXRoaXMuZXhpdCgpO3JldHVybiJmdW5jdGlvbiI9''@;'; put 'put ''PXR5cGVvZiBjPyhkPWMoZCkpJiYoZD1kLnNlbGVjdGlvbigpKTpkPWQuYXBwZW5kKGMrIiIpLG51bGwhPWwmJihoPWwoaCkpJiYoaD1oLnNlbGVjdGlvbigpKSxudWxsPT1hP2YucmVtb3ZlKCk6YShmKSxkJiZoP2QubWVyZ2UoaCkub3JkZXIoKTpofSxtZXJnZTpmdW5jdGlvbiBRd3QoYyl7''@;'; put 'put ''Zm9yKHZhciBsPWMuc2VsZWN0aW9uP2Muc2VsZWN0aW9uKCk6YyxhPXRoaXMuX2dyb3VwcyxkPWwuX2dyb3VwcyxoPWEubGVuZ3RoLHY9TWF0aC5taW4oaCxkLmxlbmd0aCksTT1uZXcgQXJyYXkoaCksRD0wO0Q8djsrK0QpZm9yKHZhciBFZSxaPWFbRF0scmU9ZFtEXSxjZT1aLmxlbmd0aCxi''@;'; put 'put ''ZT1NW0RdPW5ldyBBcnJheShjZSksQmU9MDtCZTxjZTsrK0JlKShFZT1aW0JlXXx8cmVbQmVdKSYmKGJlW0JlXT1FZSk7Zm9yKDtEPGg7KytEKU1bRF09YVtEXTtyZXR1cm4gbmV3IGlkKE0sdGhpcy5fcGFyZW50cyl9LHNlbGVjdGlvbjpmdW5jdGlvbiBvU3QoKXtyZXR1cm4gdGhpc30sb3Jk''@;'; put 'put ''ZXI6ZnVuY3Rpb24gZUN0KCl7Zm9yKHZhciBjPXRoaXMuX2dyb3VwcyxsPS0xLGE9Yy5sZW5ndGg7KytsPGE7KWZvcih2YXIgdixkPWNbbF0saD1kLmxlbmd0aC0xLGY9ZFtoXTstLWg+PTA7KSh2PWRbaF0pJiYoZiYmNF52LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGYpJiZmLnBhcmVudE5v''@;'; put 'put ''ZGUuaW5zZXJ0QmVmb3JlKHYsZiksZj12KTtyZXR1cm4gdGhpc30sc29ydDpmdW5jdGlvbiB0Q3QoYyl7ZnVuY3Rpb24gbChjZSxiZSl7cmV0dXJuIGNlJiZiZT9jKGNlLl9fZGF0YV9fLGJlLl9fZGF0YV9fKTohY2UtIWJlfWN8fChjPW5DdCk7Zm9yKHZhciBhPXRoaXMuX2dyb3VwcyxkPWEu''@;'; put 'put ''bGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7KytmKXtmb3IodmFyIFosdj1hW2ZdLE09di5sZW5ndGgsRD1oW2ZdPW5ldyBBcnJheShNKSxyZT0wO3JlPE07KytyZSkoWj12W3JlXSkmJihEW3JlXT1aKTtELnNvcnQobCl9cmV0dXJuIG5ldyBpZChoLHRoaXMuX3BhcmVudHMpLm9yZGVy''@;'; put 'put ''KCl9LGNhbGw6ZnVuY3Rpb24gckN0KCl7dmFyIGM9YXJndW1lbnRzWzBdO3JldHVybiBhcmd1bWVudHNbMF09dGhpcyxjLmFwcGx5KG51bGwsYXJndW1lbnRzKSx0aGlzfSxub2RlczpmdW5jdGlvbiBpQ3QoKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzKX0sbm9kZTpmdW5jdGlvbiBhQ3QoKXtm''@;'; put 'put ''b3IodmFyIGM9dGhpcy5fZ3JvdXBzLGw9MCxhPWMubGVuZ3RoO2w8YTsrK2wpZm9yKHZhciBkPWNbbF0saD0wLGY9ZC5sZW5ndGg7aDxmOysraCl7dmFyIHY9ZFtoXTtpZih2KXJldHVybiB2fXJldHVybiBudWxsfSxzaXplOmZ1bmN0aW9uIG9DdCgpe2xldCBjPTA7Zm9yKGNvbnN0IGwgb2Yg''@;'; put 'put ''dGhpcykrK2M7cmV0dXJuIGN9LGVtcHR5OmZ1bmN0aW9uIHNDdCgpe3JldHVybiF0aGlzLm5vZGUoKX0sZWFjaDpmdW5jdGlvbiBsQ3QoYyl7Zm9yKHZhciBsPXRoaXMuX2dyb3VwcyxhPTAsZD1sLmxlbmd0aDthPGQ7KythKWZvcih2YXIgTSxoPWxbYV0sZj0wLHY9aC5sZW5ndGg7Zjx2Oysr''@;'; put 'put ''ZikoTT1oW2ZdKSYmYy5jYWxsKE0sTS5fX2RhdGFfXyxmLGgpO3JldHVybiB0aGlzfSxhdHRyOmZ1bmN0aW9uIGdDdChjLGwpe3ZhciBhPWhOKGMpO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7dmFyIGQ9dGhpcy5ub2RlKCk7cmV0dXJuIGEubG9jYWw/ZC5nZXRBdHRyaWJ1dGVOUyhhLnNwYWNl''@;'; put 'put ''LGEubG9jYWwpOmQuZ2V0QXR0cmlidXRlKGEpfXJldHVybiB0aGlzLmVhY2goKG51bGw9PWw/YS5sb2NhbD91Q3Q6Y0N0OiJmdW5jdGlvbiI9PXR5cGVvZiBsP2EubG9jYWw/cEN0OmZDdDphLmxvY2FsP2hDdDpkQ3QpKGEsbCkpfSxzdHlsZTpmdW5jdGlvbiB5Q3QoYyxsLGEpe3JldHVybiBh''@;'; put 'put ''cmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKChudWxsPT1sP21DdDoiZnVuY3Rpb24iPT10eXBlb2YgbD9iQ3Q6dkN0KShjLGwsYT8/IiIpKTpFdyh0aGlzLm5vZGUoKSxjKX0scHJvcGVydHk6ZnVuY3Rpb24gU0N0KGMsbCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2go''@;'; put 'put ''KG51bGw9PWw/X0N0OiJmdW5jdGlvbiI9PXR5cGVvZiBsP0NDdDp3Q3QpKGMsbCkpOnRoaXMubm9kZSgpW2NdfSxjbGFzc2VkOmZ1bmN0aW9uIFRDdChjLGwpe3ZhciBhPWM4ZShjKyIiKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcih2YXIgZD1zdGUodGhpcy5ub2RlKCkpLGg9LTEsZj1h''@;'; put 'put ''Lmxlbmd0aDsrK2g8ZjspaWYoIWQuY29udGFpbnMoYVtoXSkpcmV0dXJuITE7cmV0dXJuITB9cmV0dXJuIHRoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIGw/RUN0Omw/TUN0OnhDdCkoYSxsKSl9LHRleHQ6ZnVuY3Rpb24gSUN0KGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMu''@;'; put 'put ''ZWFjaChudWxsPT1jP0FDdDooImZ1bmN0aW9uIj09dHlwZW9mIGM/REN0OmtDdCkoYykpOnRoaXMubm9kZSgpLnRleHRDb250ZW50fSxodG1sOmZ1bmN0aW9uIFBDdChjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2gobnVsbD09Yz9SQ3Q6KCJmdW5jdGlvbiI9PXR5cGVvZiBj''@;'; put 'put ''P09DdDpMQ3QpKGMpKTp0aGlzLm5vZGUoKS5pbm5lckhUTUx9LHJhaXNlOmZ1bmN0aW9uIEhDdCgpe3JldHVybiB0aGlzLmVhY2goRkN0KX0sbG93ZXI6ZnVuY3Rpb24gVkN0KCl7cmV0dXJuIHRoaXMuZWFjaChOQ3QpfSxhcHBlbmQ6ZnVuY3Rpb24gekN0KGMpe3ZhciBsPSJmdW5jdGlvbiI9''@;'; put 'put ''PXR5cGVvZiBjP2M6ZjhlKGMpO3JldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbigpe3JldHVybiB0aGlzLmFwcGVuZENoaWxkKGwuYXBwbHkodGhpcyxhcmd1bWVudHMpKX0pfSxpbnNlcnQ6ZnVuY3Rpb24gWkN0KGMsbCl7dmFyIGE9ImZ1bmN0aW9uIj09dHlwZW9mIGM/YzpmOGUoYyksZD1u''@;'; put 'put ''dWxsPT1sP1VDdDoiZnVuY3Rpb24iPT10eXBlb2YgbD9sOmF0ZShsKTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnNlcnRCZWZvcmUoYS5hcHBseSh0aGlzLGFyZ3VtZW50cyksZC5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fG51bGwpfSl9LHJlbW92ZTpmdW5j''@;'; put 'put ''dGlvbiBZQ3QoKXtyZXR1cm4gdGhpcy5lYWNoKFdDdCl9LGNsb25lOmZ1bmN0aW9uIEtDdChjKXtyZXR1cm4gdGhpcy5zZWxlY3QoYz8kQ3Q6R0N0KX0sZGF0dW06ZnVuY3Rpb24gcUN0KGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMucHJvcGVydHkoIl9fZGF0YV9fIixjKTp0aGlz''@;'; put 'put ''Lm5vZGUoKS5fX2RhdGFfX30sb246ZnVuY3Rpb24gdFN0KGMsbCxhKXt2YXIgaCx2LGQ9ZnVuY3Rpb24gSkN0KGMpe3JldHVybiBjLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24obCl7dmFyIGE9IiIsZD1sLmluZGV4T2YoIi4iKTtyZXR1cm4gZD49MCYmKGE9bC5zbGljZShk''@;'; put 'put ''KzEpLGw9bC5zbGljZSgwLGQpKSx7dHlwZTpsLG5hbWU6YX19KX0oYysiIiksZj1kLmxlbmd0aDtpZighKGFyZ3VtZW50cy5sZW5ndGg8Mikpe2ZvcihNPWw/ZVN0OlFDdCxoPTA7aDxmOysraCl0aGlzLmVhY2goTShkW2hdLGwsYSkpO3JldHVybiB0aGlzfXZhciBNPXRoaXMubm9kZSgpLl9f''@;'; put 'put ''b247aWYoTSlmb3IodmFyIHJlLEQ9MCxaPU0ubGVuZ3RoO0Q8WjsrK0QpZm9yKGg9MCxyZT1NW0RdO2g8ZjsrK2gpaWYoKHY9ZFtoXSkudHlwZT09PXJlLnR5cGUmJnYubmFtZT09PXJlLm5hbWUpcmV0dXJuIHJlLnZhbHVlfSxkaXNwYXRjaDpmdW5jdGlvbiBpU3QoYyxsKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5lYWNoKCgiZnVuY3Rpb24iPT10eXBlb2YgbD9yU3Q6blN0KShjLGwpKX0sW1N5bWJvbC5pdGVyYXRvcl06ZnVuY3Rpb24qYVN0KCl7Zm9yKHZhciBjPXRoaXMuX2dyb3VwcyxsPTAsYT1jLmxlbmd0aDtsPGE7KytsKWZvcih2YXIgdixkPWNbbF0saD0wLGY9ZC5sZW5ndGg7aDxmOysraCko''@;'; put 'put ''dj1kW2hdKSYmKHlpZWxkIHYpfX07Y29uc3QgcTk9ZzhlO2Z1bmN0aW9uIGN0ZShjKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGM/bmV3IGlkKFtkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGMpXSxbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XSk6bmV3IGlkKFtuOGUoYyldLGx0ZSl9ZnVu''@;'; put 'put ''Y3Rpb24gd3MoYyl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBjP25ldyBpZChbW2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYyldXSxbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XSk6bmV3IGlkKFtbY11dLGx0ZSl9dmFyIHNTdD17dmFsdWU6KCk9Pnt9fTtmdW5jdGlvbiBtOGUoKXtmb3IodmFy''@;'; put 'put ''IGQsYz0wLGw9YXJndW1lbnRzLmxlbmd0aCxhPXt9O2M8bDsrK2Mpe2lmKCEoZD1hcmd1bWVudHNbY10rIiIpfHxkIGluIGF8fC9bXHMuXS8udGVzdChkKSl0aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgdHlwZTogIitkKTthW2RdPVtdfXJldHVybiBuZXcgZk4oYSl9ZnVuY3Rpb24gZk4oYyl7''@;'; put 'put ''dGhpcy5fPWN9ZnVuY3Rpb24gY1N0KGMsbCl7Zm9yKHZhciBoLGE9MCxkPWMubGVuZ3RoO2E8ZDsrK2EpaWYoKGg9Y1thXSkubmFtZT09PWwpcmV0dXJuIGgudmFsdWV9ZnVuY3Rpb24gdjhlKGMsbCxhKXtmb3IodmFyIGQ9MCxoPWMubGVuZ3RoO2Q8aDsrK2QpaWYoY1tkXS5uYW1lPT09bCl7''@;'; put 'put ''Y1tkXT1zU3QsYz1jLnNsaWNlKDAsZCkuY29uY2F0KGMuc2xpY2UoZCsxKSk7YnJlYWt9cmV0dXJuIG51bGwhPWEmJmMucHVzaCh7bmFtZTpsLHZhbHVlOmF9KSxjfWZOLnByb3RvdHlwZT1tOGUucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpmTixvbjpmdW5jdGlvbihjLGwpe3ZhciBoLGE9dGhp''@;'; put 'put ''cy5fLGQ9ZnVuY3Rpb24gbFN0KGMsbCl7cmV0dXJuIGMudHJpbSgpLnNwbGl0KC9efFxzKy8pLm1hcChmdW5jdGlvbihhKXt2YXIgZD0iIixoPWEuaW5kZXhPZigiLiIpO2lmKGg+PTAmJihkPWEuc2xpY2UoaCsxKSxhPWEuc2xpY2UoMCxoKSksYSYmIWwuaGFzT3duUHJvcGVydHkoYSkpdGhy''@;'; put 'put ''b3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrYSk7cmV0dXJue3R5cGU6YSxuYW1lOmR9fSl9KGMrIiIsYSksZj0tMSx2PWQubGVuZ3RoO2lmKCEoYXJndW1lbnRzLmxlbmd0aDwyKSl7aWYobnVsbCE9bCYmImZ1bmN0aW9uIiE9dHlwZW9mIGwpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlk''@;'; put 'put ''IGNhbGxiYWNrOiAiK2wpO2Zvcig7KytmPHY7KWlmKGg9KGM9ZFtmXSkudHlwZSlhW2hdPXY4ZShhW2hdLGMubmFtZSxsKTtlbHNlIGlmKG51bGw9PWwpZm9yKGggaW4gYSlhW2hdPXY4ZShhW2hdLGMubmFtZSxudWxsKTtyZXR1cm4gdGhpc31mb3IoOysrZjx2OylpZigoaD0oYz1kW2ZdKS50''@;'; put 'put ''eXBlKSYmKGg9Y1N0KGFbaF0sYy5uYW1lKSkpcmV0dXJuIGh9LGNvcHk6ZnVuY3Rpb24oKXt2YXIgYz17fSxsPXRoaXMuXztmb3IodmFyIGEgaW4gbCljW2FdPWxbYV0uc2xpY2UoKTtyZXR1cm4gbmV3IGZOKGMpfSxjYWxsOmZ1bmN0aW9uKGMsbCl7aWYoKGg9YXJndW1lbnRzLmxlbmd0aC0y''@;'; put 'put ''KT4wKWZvcih2YXIgaCxmLGE9bmV3IEFycmF5KGgpLGQ9MDtkPGg7KytkKWFbZF09YXJndW1lbnRzW2QrMl07aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eShjKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIitjKTtmb3IoZD0wLGg9KGY9dGhpcy5fW2NdKS5sZW5ndGg7ZDxoOysr''@;'; put 'put ''ZClmW2RdLnZhbHVlLmFwcGx5KGwsYSl9LGFwcGx5OmZ1bmN0aW9uKGMsbCxhKXtpZighdGhpcy5fLmhhc093blByb3BlcnR5KGMpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK2MpO2Zvcih2YXIgZD10aGlzLl9bY10saD0wLGY9ZC5sZW5ndGg7aDxmOysraClkW2hdLnZhbHVl''@;'; put 'put ''LmFwcGx5KGwsYSl9fTtjb25zdCB1dGU9bThlO3ZhciBwTixBQSxUdz0wLEVBPTAsVEE9MCxiOGU9MWUzLGdOPTAsWDk9MCxtTj0wLGtBPSJvYmplY3QiPT10eXBlb2YgcGVyZm9ybWFuY2UmJnBlcmZvcm1hbmNlLm5vdz9wZXJmb3JtYW5jZTpEYXRlLHk4ZT0ib2JqZWN0Ij09dHlwZW9mIHdp''@;'; put 'put ''bmRvdyYmd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZT93aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KTpmdW5jdGlvbihjKXtzZXRUaW1lb3V0KGMsMTcpfTtmdW5jdGlvbiBkdGUoKXtyZXR1cm4gWDl8fCh5OGUodVN0KSxYOT1rQS5ub3coKSttTil9ZnVuY3Rp''@;'; put 'put ''b24gdVN0KCl7WDk9MH1mdW5jdGlvbiB2Tigpe3RoaXMuX2NhbGw9dGhpcy5fdGltZT10aGlzLl9uZXh0PW51bGx9ZnVuY3Rpb24gXzhlKGMsbCxhKXt2YXIgZD1uZXcgdk47cmV0dXJuIGQucmVzdGFydChjLGwsYSksZH1mdW5jdGlvbiB3OGUoKXtYOT0oZ049a0Eubm93KCkpK21OLFR3PUVB''@;'; put 'put ''PTA7dHJ5eyFmdW5jdGlvbiBkU3QoKXtkdGUoKSwrK1R3O2Zvcih2YXIgbCxjPXBOO2M7KShsPVg5LWMuX3RpbWUpPj0wJiZjLl9jYWxsLmNhbGwodm9pZCAwLGwpLGM9Yy5fbmV4dDstLVR3fSgpfWZpbmFsbHl7VHc9MCxmdW5jdGlvbiBmU3QoKXtmb3IodmFyIGMsYSxsPXBOLGQ9MS8wO2w7''@;'; put 'put ''KWwuX2NhbGw/KGQ+bC5fdGltZSYmKGQ9bC5fdGltZSksYz1sLGw9bC5fbmV4dCk6KGE9bC5fbmV4dCxsLl9uZXh0PW51bGwsbD1jP2MuX25leHQ9YTpwTj1hKTtBQT1jLGh0ZShkKX0oKSxYOT0wfX1mdW5jdGlvbiBoU3QoKXt2YXIgYz1rQS5ub3coKSxsPWMtZ047bD5iOGUmJihtTi09bCxn''@;'; put 'put ''Tj1jKX1mdW5jdGlvbiBodGUoYyl7VHd8fChFQSYmKEVBPWNsZWFyVGltZW91dChFQSkpLGMtWDk+MjQ/KGM8MS8wJiYoRUE9c2V0VGltZW91dCh3OGUsYy1rQS5ub3coKS1tTikpLFRBJiYoVEE9Y2xlYXJJbnRlcnZhbChUQSkpKTooVEF8fChnTj1rQS5ub3coKSxUQT1zZXRJbnRlcnZhbCho''@;'; put 'put ''U3QsYjhlKSksVHc9MSx5OGUodzhlKSkpfWZ1bmN0aW9uIGJOKGMsbCxhKXt2YXIgZD1uZXcgdk47cmV0dXJuIGQucmVzdGFydChoPT57ZC5zdG9wKCksYyhoK2wpfSxsPW51bGw9PWw/MDorbCxhKSxkfXZOLnByb3RvdHlwZT1fOGUucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp2TixyZXN0YXJ0''@;'; put 'put ''OmZ1bmN0aW9uKGMsbCxhKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgYyl0aHJvdyBuZXcgVHlwZUVycm9yKCJjYWxsYmFjayBpcyBub3QgYSBmdW5jdGlvbiIpO2E9KG51bGw9PWE/ZHRlKCk6K2EpKyhudWxsPT1sPzA6K2wpLCF0aGlzLl9uZXh0JiZBQSE9PXRoaXMmJihBQT9BQS5fbmV4dD10''@;'; put 'put ''aGlzOnBOPXRoaXMsQUE9dGhpcyksdGhpcy5fY2FsbD1jLHRoaXMuX3RpbWU9YSxodGUoKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuX2NhbGwmJih0aGlzLl9jYWxsPW51bGwsdGhpcy5fdGltZT0xLzAsaHRlKCkpfX07dmFyIHBTdD11dGUoInN0YXJ0IiwiZW5kIiwiY2FuY2VsIiwiaW50ZXJy''@;'; put 'put ''dXB0IiksZ1N0PVtdLEM4ZT0wLHB0ZT0yLHlOPTMsZ3RlPTUsX049NjtmdW5jdGlvbiB3TihjLGwsYSxkLGgsZil7dmFyIHY9Yy5fX3RyYW5zaXRpb247aWYodil7aWYoYSBpbiB2KXJldHVybn1lbHNlIGMuX190cmFuc2l0aW9uPXt9OyFmdW5jdGlvbiBtU3QoYyxsLGEpe3ZhciBoLGQ9Yy5f''@;'; put 'put ''X3RyYW5zaXRpb247ZnVuY3Rpb24gdihaKXt2YXIgcmUsY2UsYmUsRWU7aWYoMSE9PWEuc3RhdGUpcmV0dXJuIEQoKTtmb3IocmUgaW4gZClpZigoRWU9ZFtyZV0pLm5hbWU9PT1hLm5hbWUpe2lmKEVlLnN0YXRlPT09eU4pcmV0dXJuIGJOKHYpOzQ9PT1FZS5zdGF0ZT8oRWUuc3RhdGU9X04s''@;'; put 'put ''RWUudGltZXIuc3RvcCgpLEVlLm9uLmNhbGwoImludGVycnVwdCIsYyxjLl9fZGF0YV9fLEVlLmluZGV4LEVlLmdyb3VwKSxkZWxldGUgZFtyZV0pOityZTxsJiYoRWUuc3RhdGU9X04sRWUudGltZXIuc3RvcCgpLEVlLm9uLmNhbGwoImNhbmNlbCIsYyxjLl9fZGF0YV9fLEVlLmluZGV4LEVl''@;'; put 'put ''Lmdyb3VwKSxkZWxldGUgZFtyZV0pfWlmKGJOKGZ1bmN0aW9uKCl7YS5zdGF0ZT09PXlOJiYoYS5zdGF0ZT00LGEudGltZXIucmVzdGFydChNLGEuZGVsYXksYS50aW1lKSxNKFopKX0pLGEuc3RhdGU9cHRlLGEub24uY2FsbCgic3RhcnQiLGMsYy5fX2RhdGFfXyxhLmluZGV4LGEuZ3JvdXAp''@;'; put 'put ''LGEuc3RhdGU9PT1wdGUpe2ZvcihhLnN0YXRlPXlOLGg9bmV3IEFycmF5KGJlPWEudHdlZW4ubGVuZ3RoKSxyZT0wLGNlPS0xO3JlPGJlOysrcmUpKEVlPWEudHdlZW5bcmVdLnZhbHVlLmNhbGwoYyxjLl9fZGF0YV9fLGEuaW5kZXgsYS5ncm91cCkpJiYoaFsrK2NlXT1FZSk7aC5sZW5ndGg9''@;'; put 'put ''Y2UrMX19ZnVuY3Rpb24gTShaKXtmb3IodmFyIHJlPVo8YS5kdXJhdGlvbj9hLmVhc2UuY2FsbChudWxsLFovYS5kdXJhdGlvbik6KGEudGltZXIucmVzdGFydChEKSxhLnN0YXRlPWd0ZSwxKSxjZT0tMSxiZT1oLmxlbmd0aDsrK2NlPGJlOyloW2NlXS5jYWxsKGMscmUpO2Euc3RhdGU9PT1n''@;'; put 'put ''dGUmJihhLm9uLmNhbGwoImVuZCIsYyxjLl9fZGF0YV9fLGEuaW5kZXgsYS5ncm91cCksRCgpKX1mdW5jdGlvbiBEKCl7Zm9yKHZhciBaIGluIGEuc3RhdGU9X04sYS50aW1lci5zdG9wKCksZGVsZXRlIGRbbF0sZClyZXR1cm47ZGVsZXRlIGMuX190cmFuc2l0aW9ufWRbbF09YSxhLnRpbWVy''@;'; put 'put ''PV84ZShmdW5jdGlvbiBmKFope2Euc3RhdGU9MSxhLnRpbWVyLnJlc3RhcnQodixhLmRlbGF5LGEudGltZSksYS5kZWxheTw9WiYmdihaLWEuZGVsYXkpfSwwLGEudGltZSl9KGMsYSx7bmFtZTpsLGluZGV4OmQsZ3JvdXA6aCxvbjpwU3QsdHdlZW46Z1N0LHRpbWU6Zi50aW1lLGRlbGF5OmYu''@;'; put 'put ''ZGVsYXksZHVyYXRpb246Zi5kdXJhdGlvbixlYXNlOmYuZWFzZSx0aW1lcjpudWxsLHN0YXRlOkM4ZX0pfWZ1bmN0aW9uIG10ZShjLGwpe3ZhciBhPUMzKGMsbCk7aWYoYS5zdGF0ZT5DOGUpdGhyb3cgbmV3IEVycm9yKCJ0b28gbGF0ZTsgYWxyZWFkeSBzY2hlZHVsZWQiKTtyZXR1cm4gYX1m''@;'; put 'put ''dW5jdGlvbiBzNChjLGwpe3ZhciBhPUMzKGMsbCk7aWYoYS5zdGF0ZT55Til0aHJvdyBuZXcgRXJyb3IoInRvbyBsYXRlOyBhbHJlYWR5IHJ1bm5pbmciKTtyZXR1cm4gYX1mdW5jdGlvbiBDMyhjLGwpe3ZhciBhPWMuX190cmFuc2l0aW9uO2lmKCFhfHwhKGE9YVtsXSkpdGhyb3cgbmV3IEVy''@;'; put 'put ''cm9yKCJ0cmFuc2l0aW9uIG5vdCBmb3VuZCIpO3JldHVybiBhfWZ1bmN0aW9uIENOKGMsbCl7dmFyIGQsaCx2LGE9Yy5fX3RyYW5zaXRpb24sZj0hMDtpZihhKXtmb3IodiBpbiBsPW51bGw9PWw/bnVsbDpsKyIiLGEpKGQ9YVt2XSkubmFtZT09PWw/KGg9ZC5zdGF0ZT5wdGUmJmQuc3RhdGU8''@;'; put 'put ''Z3RlLGQuc3RhdGU9X04sZC50aW1lci5zdG9wKCksZC5vbi5jYWxsKGg/ImludGVycnVwdCI6ImNhbmNlbCIsYyxjLl9fZGF0YV9fLGQuaW5kZXgsZC5ncm91cCksZGVsZXRlIGFbdl0pOmY9ITE7ZiYmZGVsZXRlIGMuX190cmFuc2l0aW9ufX1mdW5jdGlvbiBsNChjLGwpe3JldHVybiBjPStj''@;'; put 'put ''LGw9K2wsZnVuY3Rpb24oYSl7cmV0dXJuIGMqKDEtYSkrbCphfX12YXIgU04sTThlPTE4MC9NYXRoLlBJLHZ0ZT17dHJhbnNsYXRlWDowLHRyYW5zbGF0ZVk6MCxyb3RhdGU6MCxza2V3WDowLHNjYWxlWDoxLHNjYWxlWToxfTtmdW5jdGlvbiB4OGUoYyxsLGEsZCxoLGYpe3ZhciB2LE0sRDty''@;'; put 'put ''ZXR1cm4odj1NYXRoLnNxcnQoYypjK2wqbCkpJiYoYy89dixsLz12KSwoRD1jKmErbCpkKSYmKGEtPWMqRCxkLT1sKkQpLChNPU1hdGguc3FydChhKmErZCpkKSkmJihhLz1NLGQvPU0sRC89TSksYypkPGwqYSYmKGM9LWMsbD0tbCxEPS1ELHY9LXYpLHt0cmFuc2xhdGVYOmgsdHJhbnNsYXRl''@;'; put 'put ''WTpmLHJvdGF0ZTpNYXRoLmF0YW4yKGwsYykqTThlLHNrZXdYOk1hdGguYXRhbihEKSpNOGUsc2NhbGVYOnYsc2NhbGVZOk19fWZ1bmN0aW9uIEU4ZShjLGwsYSxkKXtmdW5jdGlvbiBoKFope3JldHVybiBaLmxlbmd0aD9aLnBvcCgpKyIgIjoiIn1yZXR1cm4gZnVuY3Rpb24oWixyZSl7dmFy''@;'; put 'put ''IGNlPVtdLGJlPVtdO3JldHVybiBaPWMoWikscmU9YyhyZSksZnVuY3Rpb24gZihaLHJlLGNlLGJlLEVlLEJlKXtpZihaIT09Y2V8fHJlIT09YmUpe3ZhciBxZT1FZS5wdXNoKCJ0cmFuc2xhdGUoIixudWxsLGwsbnVsbCxhKTtCZS5wdXNoKHtpOnFlLTQseDpsNChaLGNlKX0se2k6cWUtMix4''@;'; put 'put ''Omw0KHJlLGJlKX0pfWVsc2UoY2V8fGJlKSYmRWUucHVzaCgidHJhbnNsYXRlKCIrY2UrbCtiZSthKX0oWi50cmFuc2xhdGVYLFoudHJhbnNsYXRlWSxyZS50cmFuc2xhdGVYLHJlLnRyYW5zbGF0ZVksY2UsYmUpLGZ1bmN0aW9uIHYoWixyZSxjZSxiZSl7WiE9PXJlPyhaLXJlPjE4MD9yZSs9''@;'; put 'put ''MzYwOnJlLVo+MTgwJiYoWis9MzYwKSxiZS5wdXNoKHtpOmNlLnB1c2goaChjZSkrInJvdGF0ZSgiLG51bGwsZCktMix4Omw0KFoscmUpfSkpOnJlJiZjZS5wdXNoKGgoY2UpKyJyb3RhdGUoIityZStkKX0oWi5yb3RhdGUscmUucm90YXRlLGNlLGJlKSxmdW5jdGlvbiBNKFoscmUsY2UsYmUp''@;'; put 'put ''e1ohPT1yZT9iZS5wdXNoKHtpOmNlLnB1c2goaChjZSkrInNrZXdYKCIsbnVsbCxkKS0yLHg6bDQoWixyZSl9KTpyZSYmY2UucHVzaChoKGNlKSsic2tld1goIityZStkKX0oWi5za2V3WCxyZS5za2V3WCxjZSxiZSksZnVuY3Rpb24gRChaLHJlLGNlLGJlLEVlLEJlKXtpZihaIT09Y2V8fHJl''@;'; put 'put ''IT09YmUpe3ZhciBxZT1FZS5wdXNoKGgoRWUpKyJzY2FsZSgiLG51bGwsIiwiLG51bGwsIikiKTtCZS5wdXNoKHtpOnFlLTQseDpsNChaLGNlKX0se2k6cWUtMix4Omw0KHJlLGJlKX0pfWVsc2UoMSE9PWNlfHwxIT09YmUpJiZFZS5wdXNoKGgoRWUpKyJzY2FsZSgiK2NlKyIsIitiZSsiKSIp''@;'; put 'put ''fShaLnNjYWxlWCxaLnNjYWxlWSxyZS5zY2FsZVgscmUuc2NhbGVZLGNlLGJlKSxaPXJlPW51bGwsZnVuY3Rpb24oRWUpe2Zvcih2YXIgcnQsQmU9LTEscWU9YmUubGVuZ3RoOysrQmU8cWU7KWNlWyhydD1iZVtCZV0pLmldPXJ0LngoRWUpO3JldHVybiBjZS5qb2luKCIiKX19fXZhciBfU3Q9''@;'; put 'put ''RThlKGZ1bmN0aW9uIGJTdChjKXtjb25zdCBsPW5ldygiZnVuY3Rpb24iPT10eXBlb2YgRE9NTWF0cml4P0RPTU1hdHJpeDpXZWJLaXRDU1NNYXRyaXgpKGMrIiIpO3JldHVybiBsLmlzSWRlbnRpdHk/dnRlOng4ZShsLmEsbC5iLGwuYyxsLmQsbC5lLGwuZil9LCJweCwgIiwicHgpIiwiZGVn''@;'; put 'put ''KSIpLFQ4ZT1FOGUoZnVuY3Rpb24geVN0KGMpe3JldHVybiBudWxsIT1jJiYoU058fChTTj1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpKSxTTi5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsYyksYz1TTi50cmFuc2Zvcm0uYmFzZVZh''@;'; put 'put ''bC5jb25zb2xpZGF0ZSgpKT94OGUoKGM9Yy5tYXRyaXgpLmEsYy5iLGMuYyxjLmQsYy5lLGMuZik6dnRlfSwiLCAiLCIpIiwiKSIpO2Z1bmN0aW9uIHdTdChjLGwpe3ZhciBhLGQ7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGg9czQodGhpcyxjKSxmPWgudHdlZW47aWYoZiE9PWEpZm9yKHZhciB2''@;'; put 'put ''PTAsTT0oZD1hPWYpLmxlbmd0aDt2PE07Kyt2KWlmKGRbdl0ubmFtZT09PWwpeyhkPWQuc2xpY2UoKSkuc3BsaWNlKHYsMSk7YnJlYWt9aC50d2Vlbj1kfX1mdW5jdGlvbiBDU3QoYyxsLGEpe3ZhciBkLGg7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGEpdGhyb3cgbmV3IEVycm9yO3JldHVybiBm''@;'; put 'put ''dW5jdGlvbigpe3ZhciBmPXM0KHRoaXMsYyksdj1mLnR3ZWVuO2lmKHYhPT1kKXtoPShkPXYpLnNsaWNlKCk7Zm9yKHZhciBNPXtuYW1lOmwsdmFsdWU6YX0sRD0wLFo9aC5sZW5ndGg7RDxaOysrRClpZihoW0RdLm5hbWU9PT1sKXtoW0RdPU07YnJlYWt9RD09PVomJmgucHVzaChNKX1mLnR3''@;'; put 'put ''ZWVuPWh9fWZ1bmN0aW9uIGJ0ZShjLGwsYSl7dmFyIGQ9Yy5faWQ7cmV0dXJuIGMuZWFjaChmdW5jdGlvbigpe3ZhciBoPXM0KHRoaXMsZCk7KGgudmFsdWV8fChoLnZhbHVlPXt9KSlbbF09YS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KSxmdW5jdGlvbihoKXtyZXR1cm4gQzMoaCxkKS52YWx1''@;'; put 'put ''ZVtsXX19ZnVuY3Rpb24geXRlKGMsbCxhKXtjLnByb3RvdHlwZT1sLnByb3RvdHlwZT1hLGEuY29uc3RydWN0b3I9Y31mdW5jdGlvbiBBOGUoYyxsKXt2YXIgYT1PYmplY3QuY3JlYXRlKGMucHJvdG90eXBlKTtmb3IodmFyIGQgaW4gbClhW2RdPWxbZF07cmV0dXJuIGF9ZnVuY3Rpb24gREEo''@;'; put 'put ''KXt9dmFyIE1OPTEvLjcsQXc9IlxccyooWystXT9cXGQrKVxccyoiLFJBPSJcXHMqKFsrLV0/KD86XFxkKlxcLik/XFxkKyg/OltlRV1bKy1dP1xcZCspPylcXHMqIixjND0iXFxzKihbKy1dPyg/OlxcZCpcXC4pP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pJVxccyoiLE1TdD0vXiMoWzAtOWEt''@;'; put 'put ''Zl17Myw4fSkkLyx4U3Q9bmV3IFJlZ0V4cChgXnJnYlxcKCR7QXd9LCR7QXd9LCR7QXd9XFwpJGApLEVTdD1uZXcgUmVnRXhwKGBecmdiXFwoJHtjNH0sJHtjNH0sJHtjNH1cXCkkYCksVFN0PW5ldyBSZWdFeHAoYF5yZ2JhXFwoJHtBd30sJHtBd30sJHtBd30sJHtSQX1cXCkkYCksQVN0PW5l''@;'; put 'put ''dyBSZWdFeHAoYF5yZ2JhXFwoJHtjNH0sJHtjNH0sJHtjNH0sJHtSQX1cXCkkYCksa1N0PW5ldyBSZWdFeHAoYF5oc2xcXCgke1JBfSwke2M0fSwke2M0fVxcKSRgKSxEU3Q9bmV3IFJlZ0V4cChgXmhzbGFcXCgke1JBfSwke2M0fSwke2M0fSwke1JBfVxcKSRgKSxrOGU9e2FsaWNlYmx1ZTox''@;'; put 'put ''NTc5MjM4MyxhbnRpcXVld2hpdGU6MTY0NDQzNzUsYXF1YTo2NTUzNSxhcXVhbWFyaW5lOjgzODg1NjQsYXp1cmU6MTU3OTQxNzUsYmVpZ2U6MTYxMTkyNjAsYmlzcXVlOjE2NzcwMjQ0LGJsYWNrOjAsYmxhbmNoZWRhbG1vbmQ6MTY3NzIwNDUsYmx1ZToyNTUsYmx1ZXZpb2xldDo5MDU1MjAy''@;'; put 'put ''LGJyb3duOjEwODI0MjM0LGJ1cmx5d29vZDoxNDU5NjIzMSxjYWRldGJsdWU6NjI2NjUyOCxjaGFydHJldXNlOjgzODgzNTIsY2hvY29sYXRlOjEzNzg5NDcwLGNvcmFsOjE2NzQ0MjcyLGNvcm5mbG93ZXJibHVlOjY1OTE5ODEsY29ybnNpbGs6MTY3NzUzODgsY3JpbXNvbjoxNDQyMzEwMCxj''@;'; put 'put ''eWFuOjY1NTM1LGRhcmtibHVlOjEzOSxkYXJrY3lhbjozNTcyMyxkYXJrZ29sZGVucm9kOjEyMDkyOTM5LGRhcmtncmF5OjExMTE5MDE3LGRhcmtncmVlbjoyNTYwMCxkYXJrZ3JleToxMTExOTAxNyxkYXJra2hha2k6MTI0MzMyNTksZGFya21hZ2VudGE6OTEwOTY0MyxkYXJrb2xpdmVncmVl''@;'; put 'put ''bjo1NTk3OTk5LGRhcmtvcmFuZ2U6MTY3NDc1MjAsZGFya29yY2hpZDoxMDA0MDAxMixkYXJrcmVkOjkxMDk1MDQsZGFya3NhbG1vbjoxNTMwODQxMCxkYXJrc2VhZ3JlZW46OTQxOTkxOSxkYXJrc2xhdGVibHVlOjQ3MzQzNDcsZGFya3NsYXRlZ3JheTozMTAwNDk1LGRhcmtzbGF0ZWdyZXk6''@;'; put 'put ''MzEwMDQ5NSxkYXJrdHVycXVvaXNlOjUyOTQ1LGRhcmt2aW9sZXQ6OTY5OTUzOSxkZWVwcGluazoxNjcxNjk0NyxkZWVwc2t5Ymx1ZTo0OTE1MSxkaW1ncmF5OjY5MDgyNjUsZGltZ3JleTo2OTA4MjY1LGRvZGdlcmJsdWU6MjAwMzE5OSxmaXJlYnJpY2s6MTE2NzQxNDYsZmxvcmFsd2hpdGU6''@;'; put 'put ''MTY3NzU5MjAsZm9yZXN0Z3JlZW46MjI2Mzg0MixmdWNoc2lhOjE2NzExOTM1LGdhaW5zYm9ybzoxNDQ3NDQ2MCxnaG9zdHdoaXRlOjE2MzE2NjcxLGdvbGQ6MTY3NjY3MjAsZ29sZGVucm9kOjE0MzI5MTIwLGdyYXk6ODQyMTUwNCxncmVlbjozMjc2OCxncmVlbnllbGxvdzoxMTQwMzA1NSxn''@;'; put 'put ''cmV5Ojg0MjE1MDQsaG9uZXlkZXc6MTU3OTQxNjAsaG90cGluazoxNjczODc0MCxpbmRpYW5yZWQ6MTM0NTg1MjQsaW5kaWdvOjQ5MTUzMzAsaXZvcnk6MTY3NzcyMDAsa2hha2k6MTU3ODc2NjAsbGF2ZW5kZXI6MTUxMzI0MTAsbGF2ZW5kZXJibHVzaDoxNjc3MzM2NSxsYXduZ3JlZW46ODE5''@;'; put 'put ''MDk3NixsZW1vbmNoaWZmb246MTY3NzU4ODUsbGlnaHRibHVlOjExMzkzMjU0LGxpZ2h0Y29yYWw6MTU3NjE1MzYsbGlnaHRjeWFuOjE0NzQ1NTk5LGxpZ2h0Z29sZGVucm9keWVsbG93OjE2NDQ4MjEwLGxpZ2h0Z3JheToxMzg4MjMyMyxsaWdodGdyZWVuOjk0OTgyNTYsbGlnaHRncmV5OjEz''@;'; put 'put ''ODgyMzIzLGxpZ2h0cGluazoxNjc1ODQ2NSxsaWdodHNhbG1vbjoxNjc1Mjc2MixsaWdodHNlYWdyZWVuOjIxNDI4OTAsbGlnaHRza3libHVlOjg5MDAzNDYsbGlnaHRzbGF0ZWdyYXk6NzgzMzc1MyxsaWdodHNsYXRlZ3JleTo3ODMzNzUzLGxpZ2h0c3RlZWxibHVlOjExNTg0NzM0LGxpZ2h0''@;'; put 'put ''eWVsbG93OjE2Nzc3MTg0LGxpbWU6NjUyODAsbGltZWdyZWVuOjMzMjkzMzAsbGluZW46MTY0NDU2NzAsbWFnZW50YToxNjcxMTkzNSxtYXJvb246ODM4ODYwOCxtZWRpdW1hcXVhbWFyaW5lOjY3MzczMjIsbWVkaXVtYmx1ZToyMDUsbWVkaXVtb3JjaGlkOjEyMjExNjY3LG1lZGl1bXB1cnBs''@;'; put 'put ''ZTo5NjYyNjgzLG1lZGl1bXNlYWdyZWVuOjM5NzgwOTcsbWVkaXVtc2xhdGVibHVlOjgwODc3OTAsbWVkaXVtc3ByaW5nZ3JlZW46NjQxNTQsbWVkaXVtdHVycXVvaXNlOjQ3NzIzMDAsbWVkaXVtdmlvbGV0cmVkOjEzMDQ3MTczLG1pZG5pZ2h0Ymx1ZToxNjQ0OTEyLG1pbnRjcmVhbToxNjEy''@;'; put 'put ''MTg1MCxtaXN0eXJvc2U6MTY3NzAyNzMsbW9jY2FzaW46MTY3NzAyMjksbmF2YWpvd2hpdGU6MTY3Njg2ODUsbmF2eToxMjgsb2xkbGFjZToxNjY0MzU1OCxvbGl2ZTo4NDIxMzc2LG9saXZlZHJhYjo3MDQ4NzM5LG9yYW5nZToxNjc1MzkyMCxvcmFuZ2VyZWQ6MTY3MjkzNDQsb3JjaGlkOjE0''@;'; put 'put ''MzE1NzM0LHBhbGVnb2xkZW5yb2Q6MTU2NTcxMzAscGFsZWdyZWVuOjEwMDI1ODgwLHBhbGV0dXJxdW9pc2U6MTE1Mjk5NjYscGFsZXZpb2xldHJlZDoxNDM4MTIwMyxwYXBheWF3aGlwOjE2NzczMDc3LHBlYWNocHVmZjoxNjc2NzY3MyxwZXJ1OjEzNDY4OTkxLHBpbms6MTY3NjEwMzUscGx1''@;'; put 'put ''bToxNDUyNDYzNyxwb3dkZXJibHVlOjExNTkxOTEwLHB1cnBsZTo4Mzg4NzM2LHJlYmVjY2FwdXJwbGU6NjY5Nzg4MSxyZWQ6MTY3MTE2ODAscm9zeWJyb3duOjEyMzU3NTE5LHJveWFsYmx1ZTo0Mjg2OTQ1LHNhZGRsZWJyb3duOjkxMjcxODcsc2FsbW9uOjE2NDE2ODgyLHNhbmR5YnJvd246''@;'; put 'put ''MTYwMzI4NjQsc2VhZ3JlZW46MzA1MDMyNyxzZWFzaGVsbDoxNjc3NDYzOCxzaWVubmE6MTA1MDY3OTcsc2lsdmVyOjEyNjMyMjU2LHNreWJsdWU6ODkwMDMzMSxzbGF0ZWJsdWU6Njk3MDA2MSxzbGF0ZWdyYXk6NzM3Mjk0NCxzbGF0ZWdyZXk6NzM3Mjk0NCxzbm93OjE2Nzc1OTMwLHNwcmlu''@;'; put 'put ''Z2dyZWVuOjY1NDA3LHN0ZWVsYmx1ZTo0NjIwOTgwLHRhbjoxMzgwODc4MCx0ZWFsOjMyODk2LHRoaXN0bGU6MTQyMDQ4ODgsdG9tYXRvOjE2NzM3MDk1LHR1cnF1b2lzZTo0MjUxODU2LHZpb2xldDoxNTYzMTA4Nix3aGVhdDoxNjExMzMzMSx3aGl0ZToxNjc3NzIxNSx3aGl0ZXNtb2tlOjE2''@;'; put 'put ''MTE5Mjg1LHllbGxvdzoxNjc3Njk2MCx5ZWxsb3dncmVlbjoxMDE0NTA3NH07ZnVuY3Rpb24gRDhlKCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0SGV4KCl9ZnVuY3Rpb24gSThlKCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0UmdiKCl9ZnVuY3Rpb24gSjkoYyl7dmFyIGwsYTtyZXR1cm4g''@;'; put 'put ''Yz0oYysiIikudHJpbSgpLnRvTG93ZXJDYXNlKCksKGw9TVN0LmV4ZWMoYykpPyhhPWxbMV0ubGVuZ3RoLGw9cGFyc2VJbnQobFsxXSwxNiksNj09PWE/UjhlKGwpOjM9PT1hP25ldyBRZChsPj44JjE1fGw+PjQmMjQwLGw+PjQmMTV8MjQwJmwsKDE1JmwpPDw0fDE1JmwsMSk6OD09PWE/eE4o''@;'; put 'put ''bD4+MjQmMjU1LGw+PjE2JjI1NSxsPj44JjI1NSwoMjU1JmwpLzI1NSk6ND09PWE/eE4obD4+MTImMTV8bD4+OCYyNDAsbD4+OCYxNXxsPj40JjI0MCxsPj40JjE1fDI0MCZsLCgoMTUmbCk8PDR8MTUmbCkvMjU1KTpudWxsKToobD14U3QuZXhlYyhjKSk/bmV3IFFkKGxbMV0sbFsyXSxsWzNd''@;'; put 'put ''LDEpOihsPUVTdC5leGVjKGMpKT9uZXcgUWQoMjU1KmxbMV0vMTAwLDI1NSpsWzJdLzEwMCwyNTUqbFszXS8xMDAsMSk6KGw9VFN0LmV4ZWMoYykpP3hOKGxbMV0sbFsyXSxsWzNdLGxbNF0pOihsPUFTdC5leGVjKGMpKT94TigyNTUqbFsxXS8xMDAsMjU1KmxbMl0vMTAwLDI1NSpsWzNdLzEw''@;'; put 'put ''MCxsWzRdKToobD1rU3QuZXhlYyhjKSk/UDhlKGxbMV0sbFsyXS8xMDAsbFszXS8xMDAsMSk6KGw9RFN0LmV4ZWMoYykpP1A4ZShsWzFdLGxbMl0vMTAwLGxbM10vMTAwLGxbNF0pOms4ZS5oYXNPd25Qcm9wZXJ0eShjKT9SOGUoazhlW2NdKToidHJhbnNwYXJlbnQiPT09Yz9uZXcgUWQoTmFO''@;'; put 'put ''LE5hTixOYU4sMCk6bnVsbH1mdW5jdGlvbiBSOGUoYyl7cmV0dXJuIG5ldyBRZChjPj4xNiYyNTUsYz4+OCYyNTUsMjU1JmMsMSl9ZnVuY3Rpb24geE4oYyxsLGEsZCl7cmV0dXJuIGQ8PTAmJihjPWw9YT1OYU4pLG5ldyBRZChjLGwsYSxkKX1mdW5jdGlvbiBFTihjLGwsYSxkKXtyZXR1cm4g''@;'; put 'put ''MT09PWFyZ3VtZW50cy5sZW5ndGg/ZnVuY3Rpb24gTFN0KGMpe3JldHVybiBjIGluc3RhbmNlb2YgREF8fChjPUo5KGMpKSxjP25ldyBRZCgoYz1jLnJnYigpKS5yLGMuZyxjLmIsYy5vcGFjaXR5KTpuZXcgUWR9KGMpOm5ldyBRZChjLGwsYSxkPz8xKX1mdW5jdGlvbiBRZChjLGwsYSxkKXt0''@;'; put 'put ''aGlzLnI9K2MsdGhpcy5nPStsLHRoaXMuYj0rYSx0aGlzLm9wYWNpdHk9K2R9ZnVuY3Rpb24gTDhlKCl7cmV0dXJuYCMke2V2KHRoaXMucil9JHtldih0aGlzLmcpfSR7ZXYodGhpcy5iKX1gfWZ1bmN0aW9uIE84ZSgpe2NvbnN0IGM9VE4odGhpcy5vcGFjaXR5KTtyZXR1cm5gJHsxPT09Yz8i''@;'; put 'put ''cmdiKCI6InJnYmEoIn0ke1E5KHRoaXMucil9LCAke1E5KHRoaXMuZyl9LCAke1E5KHRoaXMuYil9JHsxPT09Yz8iKSI6YCwgJHtjfSlgfWB9ZnVuY3Rpb24gVE4oYyl7cmV0dXJuIGlzTmFOKGMpPzE6TWF0aC5tYXgoMCxNYXRoLm1pbigxLGMpKX1mdW5jdGlvbiBROShjKXtyZXR1cm4gTWF0''@;'; put 'put ''aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZChjKXx8MCkpfWZ1bmN0aW9uIGV2KGMpe3JldHVybigoYz1ROShjKSk8MTY/IjAiOiIiKStjLnRvU3RyaW5nKDE2KX1mdW5jdGlvbiBQOGUoYyxsLGEsZCl7cmV0dXJuIGQ8PTA/Yz1sPWE9TmFOOmE8PTB8fGE+PTE/Yz1sPU5hTjpsPD0w''@;'; put 'put ''JiYoYz1OYU4pLG5ldyBTMyhjLGwsYSxkKX1mdW5jdGlvbiBGOGUoYyl7aWYoYyBpbnN0YW5jZW9mIFMzKXJldHVybiBuZXcgUzMoYy5oLGMucyxjLmwsYy5vcGFjaXR5KTtpZihjIGluc3RhbmNlb2YgREF8fChjPUo5KGMpKSwhYylyZXR1cm4gbmV3IFMzO2lmKGMgaW5zdGFuY2VvZiBTMyly''@;'; put 'put ''ZXR1cm4gYzt2YXIgbD0oYz1jLnJnYigpKS5yLzI1NSxhPWMuZy8yNTUsZD1jLmIvMjU1LGg9TWF0aC5taW4obCxhLGQpLGY9TWF0aC5tYXgobCxhLGQpLHY9TmFOLE09Zi1oLEQ9KGYraCkvMjtyZXR1cm4gTT8odj1sPT09Zj8oYS1kKS9NKzYqKGE8ZCk6YT09PWY/KGQtbCkvTSsyOihsLWEp''@;'; put 'put ''L00rNCxNLz1EPC41P2YraDoyLWYtaCx2Kj02MCk6TT1EPjAmJkQ8MT8wOnYsbmV3IFMzKHYsTSxELGMub3BhY2l0eSl9ZnVuY3Rpb24gUzMoYyxsLGEsZCl7dGhpcy5oPStjLHRoaXMucz0rbCx0aGlzLmw9K2EsdGhpcy5vcGFjaXR5PStkfWZ1bmN0aW9uIEg4ZShjKXtyZXR1cm4oYz0oY3x8''@;'; put 'put ''MCklMzYwKTwwP2MrMzYwOmN9ZnVuY3Rpb24gQU4oYyl7cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5taW4oMSxjfHwwKSl9ZnVuY3Rpb24gX3RlKGMsbCxhKXtyZXR1cm4gMjU1KihjPDYwP2wrKGEtbCkqYy82MDpjPDE4MD9hOmM8MjQwP2wrKGEtbCkqKDI0MC1jKS82MDpsKX1mdW5jdGlvbiBO''@;'; put 'put ''OGUoYyxsLGEsZCxoKXt2YXIgZj1jKmMsdj1mKmM7cmV0dXJuKCgxLTMqYyszKmYtdikqbCsoNC02KmYrMyp2KSphKygxKzMqYyszKmYtMyp2KSpkK3YqaCkvNn15dGUoREEsSjkse2NvcHkoYyl7cmV0dXJuIE9iamVjdC5hc3NpZ24obmV3IHRoaXMuY29uc3RydWN0b3IsdGhpcyxjKX0sZGlz''@;'; put 'put ''cGxheWFibGUoKXtyZXR1cm4gdGhpcy5yZ2IoKS5kaXNwbGF5YWJsZSgpfSxoZXg6RDhlLGZvcm1hdEhleDpEOGUsZm9ybWF0SGV4ODpmdW5jdGlvbiBJU3QoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRIZXg4KCl9LGZvcm1hdEhzbDpmdW5jdGlvbiBSU3QoKXtyZXR1cm4gRjhlKHRoaXMp''@;'; put 'put ''LmZvcm1hdEhzbCgpfSxmb3JtYXRSZ2I6SThlLHRvU3RyaW5nOkk4ZX0pLHl0ZShRZCxFTixBOGUoREEse2JyaWdodGVyKGMpe3JldHVybiBjPW51bGw9PWM/TU46TWF0aC5wb3coTU4sYyksbmV3IFFkKHRoaXMucipjLHRoaXMuZypjLHRoaXMuYipjLHRoaXMub3BhY2l0eSl9LGRhcmtlcihj''@;'; put 'put ''KXtyZXR1cm4gYz1udWxsPT1jPy43Ok1hdGgucG93KC43LGMpLG5ldyBRZCh0aGlzLnIqYyx0aGlzLmcqYyx0aGlzLmIqYyx0aGlzLm9wYWNpdHkpfSxyZ2IoKXtyZXR1cm4gdGhpc30sY2xhbXAoKXtyZXR1cm4gbmV3IFFkKFE5KHRoaXMuciksUTkodGhpcy5nKSxROSh0aGlzLmIpLFROKHRo''@;'; put 'put ''aXMub3BhY2l0eSkpfSxkaXNwbGF5YWJsZSgpe3JldHVybi0uNTw9dGhpcy5yJiZ0aGlzLnI8MjU1LjUmJi0uNTw9dGhpcy5nJiZ0aGlzLmc8MjU1LjUmJi0uNTw9dGhpcy5iJiZ0aGlzLmI8MjU1LjUmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxoZXg6TDhlLGZvcm1hdEhl''@;'; put 'put ''eDpMOGUsZm9ybWF0SGV4ODpmdW5jdGlvbiBPU3QoKXtyZXR1cm5gIyR7ZXYodGhpcy5yKX0ke2V2KHRoaXMuZyl9JHtldih0aGlzLmIpfSR7ZXYoMjU1Kihpc05hTih0aGlzLm9wYWNpdHkpPzE6dGhpcy5vcGFjaXR5KSl9YH0sZm9ybWF0UmdiOk84ZSx0b1N0cmluZzpPOGV9KSkseXRlKFMz''@;'; put 'put ''LGZ1bmN0aW9uIFBTdChjLGwsYSxkKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/RjhlKGMpOm5ldyBTMyhjLGwsYSxkPz8xKX0sQThlKERBLHticmlnaHRlcihjKXtyZXR1cm4gYz1udWxsPT1jP01OOk1hdGgucG93KE1OLGMpLG5ldyBTMyh0aGlzLmgsdGhpcy5zLHRoaXMubCpjLHRo''@;'; put 'put ''aXMub3BhY2l0eSl9LGRhcmtlcihjKXtyZXR1cm4gYz1udWxsPT1jPy43Ok1hdGgucG93KC43LGMpLG5ldyBTMyh0aGlzLmgsdGhpcy5zLHRoaXMubCpjLHRoaXMub3BhY2l0eSl9LHJnYigpe3ZhciBjPXRoaXMuaCUzNjArMzYwKih0aGlzLmg8MCksbD1pc05hTihjKXx8aXNOYU4odGhpcy5z''@;'; put 'put ''KT8wOnRoaXMucyxhPXRoaXMubCxkPWErKGE8LjU/YToxLWEpKmwsaD0yKmEtZDtyZXR1cm4gbmV3IFFkKF90ZShjPj0yNDA/Yy0yNDA6YysxMjAsaCxkKSxfdGUoYyxoLGQpLF90ZShjPDEyMD9jKzI0MDpjLTEyMCxoLGQpLHRoaXMub3BhY2l0eSl9LGNsYW1wKCl7cmV0dXJuIG5ldyBTMyhI''@;'; put 'put ''OGUodGhpcy5oKSxBTih0aGlzLnMpLEFOKHRoaXMubCksVE4odGhpcy5vcGFjaXR5KSl9LGRpc3BsYXlhYmxlKCl7cmV0dXJuKDA8PXRoaXMucyYmdGhpcy5zPD0xfHxpc05hTih0aGlzLnMpKSYmMDw9dGhpcy5sJiZ0aGlzLmw8PTEmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0x''@;'; put 'put ''fSxmb3JtYXRIc2woKXtjb25zdCBjPVROKHRoaXMub3BhY2l0eSk7cmV0dXJuYCR7MT09PWM/ImhzbCgiOiJoc2xhKCJ9JHtIOGUodGhpcy5oKX0sICR7MTAwKkFOKHRoaXMucyl9JSwgJHsxMDAqQU4odGhpcy5sKX0lJHsxPT09Yz8iKSI6YCwgJHtjfSlgfWB9fSkpO2NvbnN0IHd0ZT1jPT4o''@;'; put 'put ''KT0+YztmdW5jdGlvbiBCOGUoYyxsKXt2YXIgYT1sLWM7cmV0dXJuIGE/ZnVuY3Rpb24gVjhlKGMsbCl7cmV0dXJuIGZ1bmN0aW9uKGEpe3JldHVybiBjK2EqbH19KGMsYSk6d3RlKGlzTmFOKGMpP2w6Yyl9Y29uc3Qga049ZnVuY3Rpb24gYyhsKXt2YXIgYT1mdW5jdGlvbiBWU3QoYyl7cmV0''@;'; put 'put ''dXJuIDE9PShjPStjKT9COGU6ZnVuY3Rpb24obCxhKXtyZXR1cm4gYS1sP2Z1bmN0aW9uIE5TdChjLGwsYSl7cmV0dXJuIGM9TWF0aC5wb3coYyxhKSxsPU1hdGgucG93KGwsYSktYyxhPTEvYSxmdW5jdGlvbihkKXtyZXR1cm4gTWF0aC5wb3coYytkKmwsYSl9fShsLGEsYyk6d3RlKGlzTmFO''@;'; put 'put ''KGwpP2E6bCl9fShsKTtmdW5jdGlvbiBkKGgsZil7dmFyIHY9YSgoaD1FTihoKSkuciwoZj1FTihmKSkuciksTT1hKGguZyxmLmcpLEQ9YShoLmIsZi5iKSxaPUI4ZShoLm9wYWNpdHksZi5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24ocmUpe3JldHVybiBoLnI9dihyZSksaC5nPU0ocmUpLGgu''@;'; put 'put ''Yj1EKHJlKSxoLm9wYWNpdHk9WihyZSksaCsiIn19cmV0dXJuIGQuZ2FtbWE9YyxkfSgxKTtmdW5jdGlvbiBqOGUoYyl7cmV0dXJuIGZ1bmN0aW9uKGwpe3ZhciB2LE0sYT1sLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPW5ldyBBcnJheShhKSxmPW5ldyBBcnJheShhKTtmb3Iodj0wO3Y8YTsr''@;'; put 'put ''K3YpTT1FTihsW3ZdKSxkW3ZdPU0ucnx8MCxoW3ZdPU0uZ3x8MCxmW3ZdPU0uYnx8MDtyZXR1cm4gZD1jKGQpLGg9YyhoKSxmPWMoZiksTS5vcGFjaXR5PTEsZnVuY3Rpb24oRCl7cmV0dXJuIE0ucj1kKEQpLE0uZz1oKEQpLE0uYj1mKEQpLE0rIiJ9fX1qOGUoZnVuY3Rpb24gRlN0KGMpe3Zh''@;'; put 'put ''ciBsPWMubGVuZ3RoLTE7cmV0dXJuIGZ1bmN0aW9uKGEpe3ZhciBkPWE8PTA/YT0wOmE+PTE/KGE9MSxsLTEpOk1hdGguZmxvb3IoYSpsKSxoPWNbZF0sZj1jW2QrMV07cmV0dXJuIE44ZSgoYS1kL2wpKmwsZD4wP2NbZC0xXToyKmgtZixoLGYsZDxsLTE/Y1tkKzJdOjIqZi1oKX19KSxqOGUo''@;'; put 'put ''ZnVuY3Rpb24gSFN0KGMpe3ZhciBsPWMubGVuZ3RoO3JldHVybiBmdW5jdGlvbihhKXt2YXIgZD1NYXRoLmZsb29yKCgoYSU9MSk8MD8rK2E6YSkqbCk7cmV0dXJuIE44ZSgoYS1kL2wpKmwsY1soZCtsLTEpJWxdLGNbZCVsXSxjWyhkKzEpJWxdLGNbKGQrMiklbF0pfX0pO3ZhciBDdGU9L1st''@;'; put 'put ''K10/KD86XGQrXC4/XGQqfFwuP1xkKykoPzpbZUVdWy0rXT9cZCspPy9nLFN0ZT1uZXcgUmVnRXhwKEN0ZS5zb3VyY2UsImciKTtmdW5jdGlvbiB6OGUoYyxsKXt2YXIgZCxoLGYsYT1DdGUubGFzdEluZGV4PVN0ZS5sYXN0SW5kZXg9MCx2PS0xLE09W10sRD1bXTtmb3IoYys9IiIsbCs9IiI7''@;'; put 'put ''KGQ9Q3RlLmV4ZWMoYykpJiYoaD1TdGUuZXhlYyhsKSk7KShmPWguaW5kZXgpPmEmJihmPWwuc2xpY2UoYSxmKSxNW3ZdP01bdl0rPWY6TVsrK3ZdPWYpLChkPWRbMF0pPT09KGg9aFswXSk/TVt2XT9NW3ZdKz1oOk1bKyt2XT1oOihNWysrdl09bnVsbCxELnB1c2goe2k6dix4Omw0KGQsaCl9''@;'; put 'put ''KSksYT1TdGUubGFzdEluZGV4O3JldHVybiBhPGwubGVuZ3RoJiYoZj1sLnNsaWNlKGEpLE1bdl0/TVt2XSs9ZjpNWysrdl09ZiksTS5sZW5ndGg8Mj9EWzBdP2Z1bmN0aW9uIGpTdChjKXtyZXR1cm4gZnVuY3Rpb24obCl7cmV0dXJuIGMobCkrIiJ9fShEWzBdLngpOmZ1bmN0aW9uIEJTdChj''@;'; put 'put ''KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gY319KGwpOihsPUQubGVuZ3RoLGZ1bmN0aW9uKFope2Zvcih2YXIgY2UscmU9MDtyZTxsOysrcmUpTVsoY2U9RFtyZV0pLmldPWNlLngoWik7cmV0dXJuIE0uam9pbigiIil9KX1mdW5jdGlvbiBVOGUoYyxsKXt2YXIgYTtyZXR1cm4oIm51bWJl''@;'; put 'put ''ciI9PXR5cGVvZiBsP2w0OmwgaW5zdGFuY2VvZiBKOT9rTjooYT1KOShsKSk/KGw9YSxrTik6ejhlKShjLGwpfWZ1bmN0aW9uIHpTdChjKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZShjKX19ZnVuY3Rpb24gVVN0KGMpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVt''@;'; put 'put ''b3ZlQXR0cmlidXRlTlMoYy5zcGFjZSxjLmxvY2FsKX19ZnVuY3Rpb24gWlN0KGMsbCxhKXt2YXIgZCxmLGg9YSsiIjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdj10aGlzLmdldEF0dHJpYnV0ZShjKTtyZXR1cm4gdj09PWg/bnVsbDp2PT09ZD9mOmY9bChkPXYsYSl9fWZ1bmN0aW9uIFdTdChj''@;'; put 'put ''LGwsYSl7dmFyIGQsZixoPWErIiI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHY9dGhpcy5nZXRBdHRyaWJ1dGVOUyhjLnNwYWNlLGMubG9jYWwpO3JldHVybiB2PT09aD9udWxsOnY9PT1kP2Y6Zj1sKGQ9dixhKX19ZnVuY3Rpb24gWVN0KGMsbCxhKXt2YXIgZCxoLGY7cmV0dXJuIGZ1bmN0aW9u''@;'; put 'put ''KCl7dmFyIHYsRCxNPWEodGhpcyk7cmV0dXJuIG51bGw9PU0/dm9pZCB0aGlzLnJlbW92ZUF0dHJpYnV0ZShjKToodj10aGlzLmdldEF0dHJpYnV0ZShjKSk9PT0oRD1NKyIiKT9udWxsOnY9PT1kJiZEPT09aD9mOihoPUQsZj1sKGQ9dixNKSl9fWZ1bmN0aW9uIEdTdChjLGwsYSl7dmFyIGQs''@;'; put 'put ''aCxmO3JldHVybiBmdW5jdGlvbigpe3ZhciB2LEQsTT1hKHRoaXMpO3JldHVybiBudWxsPT1NP3ZvaWQgdGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhjLnNwYWNlLGMubG9jYWwpOih2PXRoaXMuZ2V0QXR0cmlidXRlTlMoYy5zcGFjZSxjLmxvY2FsKSk9PT0oRD1NKyIiKT9udWxsOnY9PT1kJiZE''@;'; put 'put ''PT09aD9mOihoPUQsZj1sKGQ9dixNKSl9fWZ1bmN0aW9uIFhTdChjLGwpe3ZhciBhLGQ7ZnVuY3Rpb24gaCgpe3ZhciBmPWwuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmIT09ZCYmKGE9KGQ9ZikmJmZ1bmN0aW9uIHFTdChjLGwpe3JldHVybiBmdW5jdGlvbihhKXt0aGlzLnNldEF0''@;'; put 'put ''dHJpYnV0ZU5TKGMuc3BhY2UsYy5sb2NhbCxsLmNhbGwodGhpcyxhKSl9fShjLGYpKSxhfXJldHVybiBoLl92YWx1ZT1sLGh9ZnVuY3Rpb24gSlN0KGMsbCl7dmFyIGEsZDtmdW5jdGlvbiBoKCl7dmFyIGY9bC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGYhPT1kJiYoYT0oZD1mKSYm''@;'; put 'put ''ZnVuY3Rpb24gS1N0KGMsbCl7cmV0dXJuIGZ1bmN0aW9uKGEpe3RoaXMuc2V0QXR0cmlidXRlKGMsbC5jYWxsKHRoaXMsYSkpfX0oYyxmKSksYX1yZXR1cm4gaC5fdmFsdWU9bCxofWZ1bmN0aW9uIGVNdChjLGwpe3JldHVybiBmdW5jdGlvbigpe210ZSh0aGlzLGMpLmRlbGF5PStsLmFwcGx5''@;'; put 'put ''KHRoaXMsYXJndW1lbnRzKX19ZnVuY3Rpb24gdE10KGMsbCl7cmV0dXJuIGw9K2wsZnVuY3Rpb24oKXttdGUodGhpcyxjKS5kZWxheT1sfX1mdW5jdGlvbiByTXQoYyxsKXtyZXR1cm4gZnVuY3Rpb24oKXtzNCh0aGlzLGMpLmR1cmF0aW9uPStsLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19ZnVu''@;'; put 'put ''Y3Rpb24gaU10KGMsbCl7cmV0dXJuIGw9K2wsZnVuY3Rpb24oKXtzNCh0aGlzLGMpLmR1cmF0aW9uPWx9fXZhciB5TXQ9cTkucHJvdG90eXBlLmNvbnN0cnVjdG9yO2Z1bmN0aW9uIFo4ZShjKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGMpfX12YXIgSE10''@;'; put 'put ''PTA7ZnVuY3Rpb24gdTQoYyxsLGEsZCl7dGhpcy5fZ3JvdXBzPWMsdGhpcy5fcGFyZW50cz1sLHRoaXMuX25hbWU9YSx0aGlzLl9pZD1kfWZ1bmN0aW9uIE10ZShjKXtyZXR1cm4gcTkoKS50cmFuc2l0aW9uKGMpfWZ1bmN0aW9uIFc4ZSgpe3JldHVybisrSE10fXZhciBYZz1xOS5wcm90b3R5''@;'; put 'put ''cGU7dTQucHJvdG90eXBlPU10ZS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnU0LHNlbGVjdDpmdW5jdGlvbiB2TXQoYyl7dmFyIGw9dGhpcy5fbmFtZSxhPXRoaXMuX2lkOyJmdW5jdGlvbiIhPXR5cGVvZiBjJiYoYz1hdGUoYykpO2Zvcih2YXIgZD10aGlzLl9ncm91cHMsaD1kLmxlbmd0aCxm''@;'; put 'put ''PW5ldyBBcnJheShoKSx2PTA7djxoOysrdilmb3IodmFyIHJlLGNlLE09ZFt2XSxEPU0ubGVuZ3RoLFo9Zlt2XT1uZXcgQXJyYXkoRCksYmU9MDtiZTxEOysrYmUpKHJlPU1bYmVdKSYmKGNlPWMuY2FsbChyZSxyZS5fX2RhdGFfXyxiZSxNKSkmJigiX19kYXRhX18iaW4gcmUmJihjZS5fX2Rh''@;'; put 'put ''dGFfXz1yZS5fX2RhdGFfXyksWltiZV09Y2Usd04oWltiZV0sbCxhLGJlLFosQzMocmUsYSkpKTtyZXR1cm4gbmV3IHU0KGYsdGhpcy5fcGFyZW50cyxsLGEpfSxzZWxlY3RBbGw6ZnVuY3Rpb24gYk10KGMpe3ZhciBsPXRoaXMuX25hbWUsYT10aGlzLl9pZDsiZnVuY3Rpb24iIT10eXBlb2Yg''@;'; put 'put ''YyYmKGM9cjhlKGMpKTtmb3IodmFyIGQ9dGhpcy5fZ3JvdXBzLGg9ZC5sZW5ndGgsZj1bXSx2PVtdLE09MDtNPGg7KytNKWZvcih2YXIgcmUsRD1kW01dLFo9RC5sZW5ndGgsY2U9MDtjZTxaOysrY2UpaWYocmU9RFtjZV0pe2Zvcih2YXIgRWUsYmU9Yy5jYWxsKHJlLHJlLl9fZGF0YV9fLGNl''@;'; put 'put ''LEQpLEJlPUMzKHJlLGEpLHFlPTAscnQ9YmUubGVuZ3RoO3FlPHJ0OysrcWUpKEVlPWJlW3FlXSkmJndOKEVlLGwsYSxxZSxiZSxCZSk7Zi5wdXNoKGJlKSx2LnB1c2gocmUpfXJldHVybiBuZXcgdTQoZix2LGwsYSl9LHNlbGVjdENoaWxkOlhnLnNlbGVjdENoaWxkLHNlbGVjdENoaWxkcmVu''@;'; put 'put ''OlhnLnNlbGVjdENoaWxkcmVuLGZpbHRlcjpmdW5jdGlvbiB1TXQoYyl7ImZ1bmN0aW9uIiE9dHlwZW9mIGMmJihjPWk4ZShjKSk7Zm9yKHZhciBsPXRoaXMuX2dyb3VwcyxhPWwubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7KytoKWZvcih2YXIgRCxmPWxbaF0sdj1mLmxlbmd0aCxN''@;'; put 'put ''PWRbaF09W10sWj0wO1o8djsrK1opKEQ9ZltaXSkmJmMuY2FsbChELEQuX19kYXRhX18sWixmKSYmTS5wdXNoKEQpO3JldHVybiBuZXcgdTQoZCx0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfSxtZXJnZTpmdW5jdGlvbiBkTXQoYyl7aWYoYy5faWQhPT10aGlzLl9pZCl0aHJv''@;'; put 'put ''dyBuZXcgRXJyb3I7Zm9yKHZhciBsPXRoaXMuX2dyb3VwcyxhPWMuX2dyb3VwcyxkPWwubGVuZ3RoLGY9TWF0aC5taW4oZCxhLmxlbmd0aCksdj1uZXcgQXJyYXkoZCksTT0wO008ZjsrK00pZm9yKHZhciBiZSxEPWxbTV0sWj1hW01dLHJlPUQubGVuZ3RoLGNlPXZbTV09bmV3IEFycmF5KHJl''@;'; put 'put ''KSxFZT0wO0VlPHJlOysrRWUpKGJlPURbRWVdfHxaW0VlXSkmJihjZVtFZV09YmUpO2Zvcig7TTxkOysrTSl2W01dPWxbTV07cmV0dXJuIG5ldyB1NCh2LHRoaXMuX3BhcmVudHMsdGhpcy5fbmFtZSx0aGlzLl9pZCl9LHNlbGVjdGlvbjpmdW5jdGlvbiBfTXQoKXtyZXR1cm4gbmV3IHlNdCh0''@;'; put 'put ''aGlzLl9ncm91cHMsdGhpcy5fcGFyZW50cyl9LHRyYW5zaXRpb246ZnVuY3Rpb24gUE10KCl7Zm9yKHZhciBjPXRoaXMuX25hbWUsbD10aGlzLl9pZCxhPVc4ZSgpLGQ9dGhpcy5fZ3JvdXBzLGg9ZC5sZW5ndGgsZj0wO2Y8aDsrK2YpZm9yKHZhciBELHY9ZFtmXSxNPXYubGVuZ3RoLFo9MDta''@;'; put 'put ''PE07KytaKWlmKEQ9dltaXSl7dmFyIHJlPUMzKEQsbCk7d04oRCxjLGEsWix2LHt0aW1lOnJlLnRpbWUrcmUuZGVsYXkrcmUuZHVyYXRpb24sZGVsYXk6MCxkdXJhdGlvbjpyZS5kdXJhdGlvbixlYXNlOnJlLmVhc2V9KX1yZXR1cm4gbmV3IHU0KGQsdGhpcy5fcGFyZW50cyxjLGEpfSxjYWxs''@;'; put 'put ''OlhnLmNhbGwsbm9kZXM6WGcubm9kZXMsbm9kZTpYZy5ub2RlLHNpemU6WGcuc2l6ZSxlbXB0eTpYZy5lbXB0eSxlYWNoOlhnLmVhY2gsb246ZnVuY3Rpb24gcE10KGMsbCl7dmFyIGE9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mj9DMyh0aGlzLm5vZGUoKSxhKS5vbi5vbihj''@;'; put 'put ''KTp0aGlzLmVhY2goZnVuY3Rpb24gZk10KGMsbCxhKXt2YXIgZCxoLGY9ZnVuY3Rpb24gaE10KGMpe3JldHVybihjKyIiKS50cmltKCkuc3BsaXQoL158XHMrLykuZXZlcnkoZnVuY3Rpb24obCl7dmFyIGE9bC5pbmRleE9mKCIuIik7cmV0dXJuIGE+PTAmJihsPWwuc2xpY2UoMCxhKSksIWx8''@;'; put 'put ''fCJzdGFydCI9PT1sfSl9KGwpP210ZTpzNDtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdj1mKHRoaXMsYyksTT12Lm9uO00hPT1kJiYoaD0oZD1NKS5jb3B5KCkpLm9uKGwsYSksdi5vbj1ofX0oYSxjLGwpKX0sYXR0cjpmdW5jdGlvbiAkU3QoYyxsKXt2YXIgYT1oTihjKSxkPSJ0cmFuc2Zvcm0i''@;'; put 'put ''PT09YT9UOGU6VThlO3JldHVybiB0aGlzLmF0dHJUd2VlbihjLCJmdW5jdGlvbiI9PXR5cGVvZiBsPyhhLmxvY2FsP0dTdDpZU3QpKGEsZCxidGUodGhpcywiYXR0ci4iK2MsbCkpOm51bGw9PWw/KGEubG9jYWw/VVN0OnpTdCkoYSk6KGEubG9jYWw/V1N0OlpTdCkoYSxkLGwpKX0sYXR0clR3''@;'; put 'put ''ZWVuOmZ1bmN0aW9uIFFTdChjLGwpe3ZhciBhPSJhdHRyLiIrYztpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKGE9dGhpcy50d2VlbihhKSkmJmEuX3ZhbHVlO2lmKG51bGw9PWwpcmV0dXJuIHRoaXMudHdlZW4oYSxudWxsKTtpZigiZnVuY3Rpb24iIT10eXBlb2YgbCl0aHJvdyBuZXcg''@;'; put 'put ''RXJyb3I7dmFyIGQ9aE4oYyk7cmV0dXJuIHRoaXMudHdlZW4oYSwoZC5sb2NhbD9YU3Q6SlN0KShkLGwpKX0sc3R5bGU6ZnVuY3Rpb24geE10KGMsbCxhKXt2YXIgZD0idHJhbnNmb3JtIj09KGMrPSIiKT9fU3Q6VThlO3JldHVybiBudWxsPT1sP3RoaXMuc3R5bGVUd2VlbihjLGZ1bmN0aW9u''@;'; put 'put ''IHdNdChjLGwpe3ZhciBhLGQsaDtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZj1Fdyh0aGlzLGMpLHY9KHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoYyksRXcodGhpcyxjKSk7cmV0dXJuIGY9PT12P251bGw6Zj09PWEmJnY9PT1kP2g6aD1sKGE9ZixkPXYpfX0oYyxkKSkub24oImVuZC5zdHls''@;'; put 'put ''ZS4iK2MsWjhlKGMpKToiZnVuY3Rpb24iPT10eXBlb2YgbD90aGlzLnN0eWxlVHdlZW4oYyxmdW5jdGlvbiBTTXQoYyxsLGEpe3ZhciBkLGgsZjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdj1Fdyh0aGlzLGMpLE09YSh0aGlzKSxEPU0rIiI7cmV0dXJuIG51bGw9PU0mJih0aGlzLnN0eWxlLnJl''@;'; put 'put ''bW92ZVByb3BlcnR5KGMpLEQ9TT1Fdyh0aGlzLGMpKSx2PT09RD9udWxsOnY9PT1kJiZEPT09aD9mOihoPUQsZj1sKGQ9dixNKSl9fShjLGQsYnRlKHRoaXMsInN0eWxlLiIrYyxsKSkpLmVhY2goZnVuY3Rpb24gTU10KGMsbCl7dmFyIGEsZCxoLE0sZj0ic3R5bGUuIitsLHY9ImVuZC4iK2Y7''@;'; put 'put ''cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIEQ9czQodGhpcyxjKSxaPUQub24scmU9bnVsbD09RC52YWx1ZVtmXT9NfHwoTT1aOGUobCkpOnZvaWQgMDsoWiE9PWF8fGghPT1yZSkmJihkPShhPVopLmNvcHkoKSkub24odixoPXJlKSxELm9uPWR9fSh0aGlzLl9pZCxjKSk6dGhpcy5zdHlsZVR3ZWVu''@;'; put 'put ''KGMsZnVuY3Rpb24gQ010KGMsbCxhKXt2YXIgZCxmLGg9YSsiIjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdj1Fdyh0aGlzLGMpO3JldHVybiB2PT09aD9udWxsOnY9PT1kP2Y6Zj1sKGQ9dixhKX19KGMsZCxsKSxhKS5vbigiZW5kLnN0eWxlLiIrYyxudWxsKX0sc3R5bGVUd2VlbjpmdW5jdGlv''@;'; put 'put ''biBBTXQoYyxsLGEpe3ZhciBkPSJzdHlsZS4iKyhjKz0iIik7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXJldHVybihkPXRoaXMudHdlZW4oZCkpJiZkLl92YWx1ZTtpZihudWxsPT1sKXJldHVybiB0aGlzLnR3ZWVuKGQsbnVsbCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGwpdGhyb3cgbmV3IEVy''@;'; put 'put ''cm9yO3JldHVybiB0aGlzLnR3ZWVuKGQsZnVuY3Rpb24gVE10KGMsbCxhKXt2YXIgZCxoO2Z1bmN0aW9uIGYoKXt2YXIgdj1sLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gdiE9PWgmJihkPShoPXYpJiZmdW5jdGlvbiBFTXQoYyxsLGEpe3JldHVybiBmdW5jdGlvbihkKXt0aGlzLnN0''@;'; put 'put ''eWxlLnNldFByb3BlcnR5KGMsbC5jYWxsKHRoaXMsZCksYSl9fShjLHYsYSkpLGR9cmV0dXJuIGYuX3ZhbHVlPWwsZn0oYyxsLGE/PyIiKSl9LHRleHQ6ZnVuY3Rpb24gSU10KGMpe3JldHVybiB0aGlzLnR3ZWVuKCJ0ZXh0IiwiZnVuY3Rpb24iPT10eXBlb2YgYz9mdW5jdGlvbiBETXQoYyl7''@;'; put 'put ''cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGw9Yyh0aGlzKTt0aGlzLnRleHRDb250ZW50PWw/PyIifX0oYnRlKHRoaXMsInRleHQiLGMpKTpmdW5jdGlvbiBrTXQoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD1jfX0obnVsbD09Yz8iIjpjKyIiKSl9LHRleHRUd2VlbjpmdW5j''@;'; put 'put ''dGlvbiBPTXQoYyl7dmFyIGw9InRleHQiO2lmKGFyZ3VtZW50cy5sZW5ndGg8MSlyZXR1cm4obD10aGlzLnR3ZWVuKGwpKSYmbC5fdmFsdWU7aWYobnVsbD09YylyZXR1cm4gdGhpcy50d2VlbihsLG51bGwpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBjKXRocm93IG5ldyBFcnJvcjtyZXR1cm4g''@;'; put 'put ''dGhpcy50d2VlbihsLGZ1bmN0aW9uIExNdChjKXt2YXIgbCxhO2Z1bmN0aW9uIGQoKXt2YXIgaD1jLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gaCE9PWEmJihsPShhPWgpJiZmdW5jdGlvbiBSTXQoYyl7cmV0dXJuIGZ1bmN0aW9uKGwpe3RoaXMudGV4dENvbnRlbnQ9Yy5jYWxsKHRo''@;'; put 'put ''aXMsbCl9fShoKSksbH1yZXR1cm4gZC5fdmFsdWU9YyxkfShjKSl9LHJlbW92ZTpmdW5jdGlvbiBtTXQoKXtyZXR1cm4gdGhpcy5vbigiZW5kLnJlbW92ZSIsZnVuY3Rpb24gZ010KGMpe3JldHVybiBmdW5jdGlvbigpe3ZhciBsPXRoaXMucGFyZW50Tm9kZTtmb3IodmFyIGEgaW4gdGhpcy5f''@;'; put 'put ''X3RyYW5zaXRpb24paWYoK2EhPT1jKXJldHVybjtsJiZsLnJlbW92ZUNoaWxkKHRoaXMpfX0odGhpcy5faWQpKX0sdHdlZW46ZnVuY3Rpb24gU1N0KGMsbCl7dmFyIGE9dGhpcy5faWQ7aWYoYys9IiIsYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IodmFyIHYsZD1DMyh0aGlzLm5vZGUoKSxhKS50''@;'; put 'put ''d2VlbixoPTAsZj1kLmxlbmd0aDtoPGY7KytoKWlmKCh2PWRbaF0pLm5hbWU9PT1jKXJldHVybiB2LnZhbHVlO3JldHVybiBudWxsfXJldHVybiB0aGlzLmVhY2goKG51bGw9PWw/d1N0OkNTdCkoYSxjLGwpKX0sZGVsYXk6ZnVuY3Rpb24gbk10KGMpe3ZhciBsPXRoaXMuX2lkO3JldHVybiBh''@;'; put 'put ''cmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIGM/ZU10OnRNdCkobCxjKSk6QzModGhpcy5ub2RlKCksbCkuZGVsYXl9LGR1cmF0aW9uOmZ1bmN0aW9uIGFNdChjKXt2YXIgbD10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goKCJm''@;'; put 'put ''dW5jdGlvbiI9PXR5cGVvZiBjP3JNdDppTXQpKGwsYykpOkMzKHRoaXMubm9kZSgpLGwpLmR1cmF0aW9ufSxlYXNlOmZ1bmN0aW9uIHNNdChjKXt2YXIgbD10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goZnVuY3Rpb24gb010KGMsbCl7aWYoImZ1bmN0aW9uIiE9''@;'; put 'put ''dHlwZW9mIGwpdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpe3M0KHRoaXMsYykuZWFzZT1sfX0obCxjKSk6QzModGhpcy5ub2RlKCksbCkuZWFzZX0sZWFzZVZhcnlpbmc6ZnVuY3Rpb24gY010KGMpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBjKXRocm93IG5ldyBFcnJvcjtyZXR1''@;'; put 'put ''cm4gdGhpcy5lYWNoKGZ1bmN0aW9uIGxNdChjLGwpe3JldHVybiBmdW5jdGlvbigpe3ZhciBhPWwuYXBwbHkodGhpcyxhcmd1bWVudHMpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBhKXRocm93IG5ldyBFcnJvcjtzNCh0aGlzLGMpLmVhc2U9YX19KHRoaXMuX2lkLGMpKX0sZW5kOmZ1bmN0aW9u''@;'; put 'put ''IEZNdCgpe3ZhciBjLGwsYT10aGlzLGQ9YS5faWQsaD1hLnNpemUoKTtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oZix2KXt2YXIgTT17dmFsdWU6dn0sRD17dmFsdWU6ZnVuY3Rpb24oKXswPT0tLWgmJmYoKX19O2EuZWFjaChmdW5jdGlvbigpe3ZhciBaPXM0KHRoaXMsZCkscmU9Wi5v''@;'; put 'put ''bjtyZSE9PWMmJigobD0oYz1yZSkuY29weSgpKS5fLmNhbmNlbC5wdXNoKE0pLGwuXy5pbnRlcnJ1cHQucHVzaChNKSxsLl8uZW5kLnB1c2goRCkpLFoub249bH0pLDA9PT1oJiZmKCl9KX0sW1N5bWJvbC5pdGVyYXRvcl06WGdbU3ltYm9sLml0ZXJhdG9yXX07dmFyIFZNdD17dGltZTpudWxs''@;'; put 'put ''LGRlbGF5OjAsZHVyYXRpb246MjUwLGVhc2U6ZnVuY3Rpb24gTk10KGMpe3JldHVybigoYyo9Mik8PTE/YypjKmM6KGMtPTIpKmMqYysyKS8yfX07ZnVuY3Rpb24gQk10KGMsbCl7Zm9yKHZhciBhOyEoYT1jLl9fdHJhbnNpdGlvbil8fCEoYT1hW2xdKTspaWYoIShjPWMucGFyZW50Tm9kZSkp''@;'; put 'put ''dGhyb3cgbmV3IEVycm9yKGB0cmFuc2l0aW9uICR7bH0gbm90IGZvdW5kYCk7cmV0dXJuIGF9cTkucHJvdG90eXBlLmludGVycnVwdD1mdW5jdGlvbiB2U3QoYyl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe0NOKHRoaXMsYyl9KX0scTkucHJvdG90eXBlLnRyYW5zaXRpb249ZnVuY3Rp''@;'; put 'put ''b24gak10KGMpe3ZhciBsLGE7YyBpbnN0YW5jZW9mIHU0PyhsPWMuX2lkLGM9Yy5fbmFtZSk6KGw9VzhlKCksKGE9Vk10KS50aW1lPWR0ZSgpLGM9bnVsbD09Yz9udWxsOmMrIiIpO2Zvcih2YXIgZD10aGlzLl9ncm91cHMsaD1kLmxlbmd0aCxmPTA7ZjxoOysrZilmb3IodmFyIEQsdj1kW2Zd''@;'; put 'put ''LE09di5sZW5ndGgsWj0wO1o8TTsrK1opKEQ9dltaXSkmJndOKEQsYyxsLFosdixhfHxCTXQoRCxsKSk7cmV0dXJuIG5ldyB1NChkLHRoaXMuX3BhcmVudHMsYyxsKX07dmFyIHpNdD1bbnVsbF07Y29uc3QgeHRlPXtjYXB0dXJlOiEwLHBhc3NpdmU6ITF9O2Z1bmN0aW9uIEV0ZShjKXtjLnBy''@;'; put 'put ''ZXZlbnREZWZhdWx0KCksYy5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX1mdW5jdGlvbiBZOGUoYyl7cmV0dXJuKChjPU1hdGguZXhwKGMpKSsxL2MpLzJ9Y29uc3QgS010PWZ1bmN0aW9uIGMobCxhLGQpe2Z1bmN0aW9uIGgoZix2KXt2YXIgcnQscHQsTT1mWzBdLEQ9ZlsxXSxaPWZbMl0s''@;'; put 'put ''YmU9dlsyXSxFZT12WzBdLU0sQmU9dlsxXS1ELHFlPUVlKkVlK0JlKkJlO2lmKHFlPDFlLTEyKXB0PU1hdGgubG9nKGJlL1opL2wscnQ9ZnVuY3Rpb24oTW4pe3JldHVybltNK01uKkVlLEQrTW4qQmUsWipNYXRoLmV4cChsKk1uKnB0KV19O2Vsc2V7dmFyIGR0PU1hdGguc3FydChxZSksSnQ9''@;'; put 'put ''KGJlKmJlLVoqWitkKnFlKS8oMipaKmEqZHQpLHZuPShiZSpiZS1aKlotZCpxZSkvKDIqYmUqYSpkdCksQ249TWF0aC5sb2coTWF0aC5zcXJ0KEp0Kkp0KzEpLUp0KSx0bj1NYXRoLmxvZyhNYXRoLnNxcnQodm4qdm4rMSktdm4pO3B0PSh0bi1DbikvbCxydD1mdW5jdGlvbihNbil7dmFyIENy''@;'; put 'put ''PU1uKnB0LEdyPVk4ZShDbiksbXI9Wi8oYSpkdCkqKEdyKmZ1bmN0aW9uICRNdChjKXtyZXR1cm4oKGM9TWF0aC5leHAoMipjKSktMSkvKGMrMSl9KGwqQ3IrQ24pLWZ1bmN0aW9uIEdNdChjKXtyZXR1cm4oKGM9TWF0aC5leHAoYykpLTEvYykvMn0oQ24pKTtyZXR1cm5bTSttcipFZSxEK21y''@;'; put 'put ''KkJlLFoqR3IvWThlKGwqQ3IrQ24pXX19cmV0dXJuIHJ0LmR1cmF0aW9uPTFlMypwdCpsL01hdGguU1FSVDIscnR9cmV0dXJuIGgucmhvPWZ1bmN0aW9uKGYpe3ZhciB2PU1hdGgubWF4KC4wMDEsK2YpLE09dip2O3JldHVybiBjKHYsTSxNKk0pfSxofShNYXRoLlNRUlQyLDIsNCk7ZnVuY3Rp''@;'; put 'put ''b24gdHYoYyxsKXtpZihjPWZ1bmN0aW9uIHFNdChjKXtsZXQgbDtmb3IoO2w9Yy5zb3VyY2VFdmVudDspYz1sO3JldHVybiBjfShjKSx2b2lkIDA9PT1sJiYobD1jLmN1cnJlbnRUYXJnZXQpLGwpe3ZhciBhPWwub3duZXJTVkdFbGVtZW50fHxsO2lmKGEuY3JlYXRlU1ZHUG9pbnQpe3ZhciBk''@;'; put 'put ''PWEuY3JlYXRlU1ZHUG9pbnQoKTtyZXR1cm4gZC54PWMuY2xpZW50WCxkLnk9Yy5jbGllbnRZLFsoZD1kLm1hdHJpeFRyYW5zZm9ybShsLmdldFNjcmVlbkNUTSgpLmludmVyc2UoKSkpLngsZC55XX1pZihsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCl7dmFyIGg9bC5nZXRCb3VuZGluZ0NsaWVu''@;'; put 'put ''dFJlY3QoKTtyZXR1cm5bYy5jbGllbnRYLWgubGVmdC1sLmNsaWVudExlZnQsYy5jbGllbnRZLWgudG9wLWwuY2xpZW50VG9wXX19cmV0dXJuW2MucGFnZVgsYy5wYWdlWV19Y29uc3QgRE49Yz0+KCk9PmM7ZnVuY3Rpb24gWE10KGMse3NvdXJjZUV2ZW50OmwsdGFyZ2V0OmEsdHJhbnNmb3Jt''@;'; put 'put ''OmQsZGlzcGF0Y2g6aH0pe09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRoaXMse3R5cGU6e3ZhbHVlOmMsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9LHNvdXJjZUV2ZW50Ont2YWx1ZTpsLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSx0YXJnZXQ6e3ZhbHVlOmEsZW51bWVy''@;'; put 'put ''YWJsZTohMCxjb25maWd1cmFibGU6ITB9LHRyYW5zZm9ybTp7dmFsdWU6ZCxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0sXzp7dmFsdWU6aH19KX1mdW5jdGlvbiBKZyhjLGwsYSl7dGhpcy5rPWMsdGhpcy54PWwsdGhpcy55PWF9SmcucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpKZyxz''@;'; put 'put ''Y2FsZTpmdW5jdGlvbihjKXtyZXR1cm4gMT09PWM/dGhpczpuZXcgSmcodGhpcy5rKmMsdGhpcy54LHRoaXMueSl9LHRyYW5zbGF0ZTpmdW5jdGlvbihjLGwpe3JldHVybiAwPT09YyYwPT09bD90aGlzOm5ldyBKZyh0aGlzLmssdGhpcy54K3RoaXMuaypjLHRoaXMueSt0aGlzLmsqbCl9LGFw''@;'; put 'put ''cGx5OmZ1bmN0aW9uKGMpe3JldHVybltjWzBdKnRoaXMuayt0aGlzLngsY1sxXSp0aGlzLmsrdGhpcy55XX0sYXBwbHlYOmZ1bmN0aW9uKGMpe3JldHVybiBjKnRoaXMuayt0aGlzLnh9LGFwcGx5WTpmdW5jdGlvbihjKXtyZXR1cm4gYyp0aGlzLmsrdGhpcy55fSxpbnZlcnQ6ZnVuY3Rpb24o''@;'; put 'put ''Yyl7cmV0dXJuWyhjWzBdLXRoaXMueCkvdGhpcy5rLChjWzFdLXRoaXMueSkvdGhpcy5rXX0saW52ZXJ0WDpmdW5jdGlvbihjKXtyZXR1cm4oYy10aGlzLngpL3RoaXMua30saW52ZXJ0WTpmdW5jdGlvbihjKXtyZXR1cm4oYy10aGlzLnkpL3RoaXMua30scmVzY2FsZVg6ZnVuY3Rpb24oYyl7''@;'; put 'put ''cmV0dXJuIGMuY29weSgpLmRvbWFpbihjLnJhbmdlKCkubWFwKHRoaXMuaW52ZXJ0WCx0aGlzKS5tYXAoYy5pbnZlcnQsYykpfSxyZXNjYWxlWTpmdW5jdGlvbihjKXtyZXR1cm4gYy5jb3B5KCkuZG9tYWluKGMucmFuZ2UoKS5tYXAodGhpcy5pbnZlcnRZLHRoaXMpLm1hcChjLmludmVydCxj''@;'; put 'put ''KSl9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuInRyYW5zbGF0ZSgiK3RoaXMueCsiLCIrdGhpcy55KyIpIHNjYWxlKCIrdGhpcy5rKyIpIn19O3ZhciBJTj1uZXcgSmcoMSwwLDApO2Z1bmN0aW9uIFJOKGMpe2Zvcig7IWMuX196b29tOylpZighKGM9Yy5wYXJlbnROb2RlKSlyZXR1cm4g''@;'; put 'put ''SU47cmV0dXJuIGMuX196b29tfWZ1bmN0aW9uIFR0ZShjKXtjLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfWZ1bmN0aW9uIExBKGMpe2MucHJldmVudERlZmF1bHQoKSxjLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfWZ1bmN0aW9uIEpNdChjKXtyZXR1cm4hKGMuY3RybEtleSYmIndo''@;'; put 'put ''ZWVsIiE9PWMudHlwZXx8Yy5idXR0b24pfWZ1bmN0aW9uIFFNdCgpe3ZhciBjPXRoaXM7cmV0dXJuIGMgaW5zdGFuY2VvZiBTVkdFbGVtZW50PyhjPWMub3duZXJTVkdFbGVtZW50fHxjKS5oYXNBdHRyaWJ1dGUoInZpZXdCb3giKT9bWyhjPWMudmlld0JveC5iYXNlVmFsKS54LGMueV0sW2Mu''@;'; put 'put ''eCtjLndpZHRoLGMueStjLmhlaWdodF1dOltbMCwwXSxbYy53aWR0aC5iYXNlVmFsLnZhbHVlLGMuaGVpZ2h0LmJhc2VWYWwudmFsdWVdXTpbWzAsMF0sW2MuY2xpZW50V2lkdGgsYy5jbGllbnRIZWlnaHRdXX1mdW5jdGlvbiBHOGUoKXtyZXR1cm4gdGhpcy5fX3pvb218fElOfWZ1bmN0aW9u''@;'; put 'put ''IGV4dChjKXtyZXR1cm4tYy5kZWx0YVkqKDE9PT1jLmRlbHRhTW9kZT8uMDU6Yy5kZWx0YU1vZGU/MTouMDAyKSooYy5jdHJsS2V5PzEwOjEpfWZ1bmN0aW9uIHR4dCgpe3JldHVybiBuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHN8fCJvbnRvdWNoc3RhcnQiaW4gdGhpc31mdW5jdGlvbiBueHQo''@;'; put 'put ''YyxsLGEpe3ZhciBkPWMuaW52ZXJ0WChsWzBdWzBdKS1hWzBdWzBdLGg9Yy5pbnZlcnRYKGxbMV1bMF0pLWFbMV1bMF0sZj1jLmludmVydFkobFswXVsxXSktYVswXVsxXSx2PWMuaW52ZXJ0WShsWzFdWzFdKS1hWzFdWzFdO3JldHVybiBjLnRyYW5zbGF0ZShoPmQ/KGQraCkvMjpNYXRoLm1p''@;'; put 'put ''bigwLGQpfHxNYXRoLm1heCgwLGgpLHY+Zj8oZit2KS8yOk1hdGgubWluKDAsZil8fE1hdGgubWF4KDAsdikpfWZ1bmN0aW9uICQ4ZShjKXt2YXIgbD17fSxhPWMubm9kZSgpLm5vZGVOYW1lO2wudGFnPWEsIiN0ZXh0Ij09YT9sLnRleHQ9Yy50ZXh0KCk6IiNjb21tZW50Ij09YSYmKGwuY29t''@;'; put 'put ''bWVudD1jLnRleHQoKSksbC5hdHRyaWJ1dGVzPXt9O3ZhciBkPWMubm9kZSgpLmF0dHJpYnV0ZXM7aWYoZClmb3IodmFyIGg9MDtoPGQubGVuZ3RoO2grKyl7dmFyIGY9ZFtoXTtsLmF0dHJpYnV0ZXNbZi5uYW1lXT1mLnZhbHVlfXZhciByZSxEPWMubm9kZSgpLnRyYW5zZm9ybTtpZihEJiYw''@;'; put 'put ''IT1ELmJhc2VWYWwubnVtYmVyT2ZJdGVtcyl7dmFyIFo9RC5iYXNlVmFsLmNvbnNvbGlkYXRlKCkubWF0cml4O2wudHJhbnNsYXRpb249e3g6Wi5lLHk6Wi5mfSxsLnNjYWxlPVouYX1pZigiZWxsaXBzZSI9PWEmJihsLmNlbnRlcj17eDpsLmF0dHJpYnV0ZXMuY3gseTpsLmF0dHJpYnV0ZXMu''@;'; put 'put ''Y3l9KSwicG9seWdvbiI9PWEpe3ZhciBjZT0ocmU9Yy5hdHRyKCJwb2ludHMiKS5zcGxpdCgiICIpKS5tYXAoZnVuY3Rpb24oSnQpe3JldHVybiBKdC5zcGxpdCgiLCIpWzBdfSksYmU9cmUubWFwKGZ1bmN0aW9uKEp0KXtyZXR1cm4gSnQuc3BsaXQoIiwiKVsxXX0pLEVlPU1hdGgubWluLmFw''@;'; put 'put ''cGx5KG51bGwsY2UpLEJlPU1hdGgubWF4LmFwcGx5KG51bGwsY2UpLHFlPU1hdGgubWluLmFwcGx5KG51bGwsYmUpLHJ0PU1hdGgubWF4LmFwcGx5KG51bGwsYmUpO2wuYmJveD17eDpFZSx5OnFlLHdpZHRoOkJlLUVlLGhlaWdodDpydC1xZX0sbC5jZW50ZXI9e3g6KEVlK0JlKS8yLHk6KHFl''@;'; put 'put ''K3J0KS8yfX0icGF0aCI9PWEmJigocmU9Yy5hdHRyKCJkIikuc3BsaXQoL1tBLVogXS8pKS5zaGlmdCgpLGNlPXJlLm1hcChmdW5jdGlvbihHbil7cmV0dXJuK0duLnNwbGl0KCIsIilbMF19KSxiZT1yZS5tYXAoZnVuY3Rpb24oR24pe3JldHVybitHbi5zcGxpdCgiLCIpWzFdfSksRWU9TWF0''@;'; put 'put ''aC5taW4uYXBwbHkobnVsbCxjZSksQmU9TWF0aC5tYXguYXBwbHkobnVsbCxjZSkscWU9TWF0aC5taW4uYXBwbHkobnVsbCxiZSkscnQ9TWF0aC5tYXguYXBwbHkobnVsbCxiZSksbC5iYm94PXt4OkVlLHk6cWUsd2lkdGg6QmUtRWUsaGVpZ2h0OnJ0LXFlfSxsLmNlbnRlcj17eDooRWUrQmUp''@;'; put 'put ''LzIseToocWUrcnQpLzJ9LGwudG90YWxMZW5ndGg9Yy5ub2RlKCkuZ2V0VG90YWxMZW5ndGgoKSk7cmV0dXJuInRleHQiPT1hJiYobC5jZW50ZXI9e3g6Yy5hdHRyKCJ4IikseTpjLmF0dHIoInkiKX0pLCIjdGV4dCI9PWE/bC50ZXh0PWMudGV4dCgpOiIjY29tbWVudCI9PWEmJihsLmNvbW1l''@;'; put 'put ''bnQ9Yy50ZXh0KCkpLGx9ZnVuY3Rpb24gbnYoYyl7dmFyIGw9JDhlKGMpO3JldHVybiBsLmNoaWxkcmVuPVtdLGN0ZShjLm5vZGUoKS5jaGlsZE5vZGVzKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGQ9bnYod3ModGhpcykpO2QucGFyZW50PWwsbC5jaGlsZHJlbi5wdXNoKGQpfSksbH1mdW5jdGlv''@;'; put 'put ''biBBdGUoYyl7cmV0dXJuIiN0ZXh0Ij09Yy50YWc/ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiIpOiIjY29tbWVudCI9PWMudGFnP2RvY3VtZW50LmNyZWF0ZUNvbW1lbnQoYy5jb21tZW50KTpkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixj''@;'; put 'put ''LnRhZyl9ZnVuY3Rpb24ga3RlKGMpe3ZhciBsPUF0ZShjKSxhPXdzKGwpLGQ9Yy5hdHRyaWJ1dGVzO2Zvcih2YXIgaCBvZiBPYmplY3Qua2V5cyhkKSlhLmF0dHIoaCxkW2hdKTtyZXR1cm4gbH1mdW5jdGlvbiBLOGUoYyxsKXt2YXIgYT13cyhjLm5vZGUoKS5wYXJlbnROb2RlKSxkPWt0ZShs''@;'; put 'put ''KSxoPWEuaW5zZXJ0KGZ1bmN0aW9uKCl7cmV0dXJuIGR9LGZ1bmN0aW9uKCl7cmV0dXJuIGMubm9kZSgpfSk7cmV0dXJuIGMucmVtb3ZlKCksaH1mdW5jdGlvbiBEdGUoYyxsKXshZnVuY3Rpb24gaXh0KGMsbCl7Yy5kYXR1bShsKSxjLmRhdGEoW2xdLGZ1bmN0aW9uKGEpe3JldHVybiBhLmtl''@;'; put 'put ''eX0pfShjLGwpLGN0ZShjLm5vZGUoKS5jaGlsZE5vZGVzKS5lYWNoKGZ1bmN0aW9uKGQsaCl7RHRlKHdzKHRoaXMpLGwuY2hpbGRyZW5baF0pfSl9ZnVuY3Rpb24gT0EoYyxsPTApe3ZhciBhPXdzKHRoaXMpLGg9Yy5hdHRyaWJ1dGVzLGY9YS5ub2RlKCkuYXR0cmlidXRlcztpZihmKWZvcih2''@;'; put 'put ''YXIgdj0wO3Y8Zi5sZW5ndGg7disrKXt2YXIgTT1mW3ZdLEQ9TS5uYW1lO2lmKCJ4bWxucyIhPUQuc3BsaXQoIjoiKVswXSYmTS5uYW1lc3BhY2VVUkkpe3ZhciBaPU0ubmFtZXNwYWNlVVJJLnNwbGl0KCIvIik7RD1aW1oubGVuZ3RoLTFdKyI6IitEfUQgaW4gaHx8KGhbRF09bnVsbCl9Zm9y''@;'; put 'put ''KHZhciBjZSBvZiBPYmplY3Qua2V5cyhoKSlhLmF0dHIoY2UsaFtjZV0pO2MudGV4dCYmYS50ZXh0KGMudGV4dCksZnVuY3Rpb24gYXh0KGMsbCl7dmFyIGE9Yy5zZWxlY3RBbGwoZnVuY3Rpb24oKXtyZXR1cm4gYy5ub2RlKCkuY2hpbGROb2Rlc30pLGQ9KGE9YS5kYXRhKGZ1bmN0aW9uKHYp''@;'; put 'put ''e3JldHVybiB2LmNoaWxkcmVufSxmdW5jdGlvbih2KXtyZXR1cm4gdi50YWcrIi0iK2x9KSkuZW50ZXIoKS5hcHBlbmQoZnVuY3Rpb24odil7cmV0dXJuIEF0ZSh2KX0pLGg9YS5leGl0KCk7aD1oLnJlbW92ZSgpLGE9ZC5tZXJnZShhKTt2YXIgZj17fTthLmVhY2goZnVuY3Rpb24odil7dmFy''@;'; put 'put ''IE09di50YWc7bnVsbD09ZltNXSYmKGZbTV09MCk7dmFyIEQ9ZltNXSsrO09BLmNhbGwodGhpcyx2LEQpfSl9KGEsbCl9ZnVuY3Rpb24gcThlKGMsbCl7dmFyIHYsYT1sP2wubGVuZ3RoOjAsZD1jP01hdGgubWluKGEsYy5sZW5ndGgpOjAsaD1uZXcgQXJyYXkoZCksZj1uZXcgQXJyYXkoYSk7''@;'; put 'put ''Zm9yKHY9MDt2PGQ7Kyt2KWhbdl09TE4oY1t2XSxsW3ZdKTtmb3IoO3Y8YTsrK3YpZlt2XT1sW3ZdO3JldHVybiBmdW5jdGlvbihNKXtmb3Iodj0wO3Y8ZDsrK3YpZlt2XT1oW3ZdKE0pO3JldHVybiBmfX1mdW5jdGlvbiBveHQoYyxsKXt2YXIgYT1uZXcgRGF0ZTtyZXR1cm4gYz0rYyxsPSts''@;'; put 'put ''LGZ1bmN0aW9uKGQpe3JldHVybiBhLnNldFRpbWUoYyooMS1kKStsKmQpLGF9fWZ1bmN0aW9uIHN4dChjLGwpe3ZhciBoLGE9e30sZD17fTtmb3IoaCBpbihudWxsPT09Y3x8Im9iamVjdCIhPXR5cGVvZiBjKSYmKGM9e30pLChudWxsPT09bHx8Im9iamVjdCIhPXR5cGVvZiBsKSYmKGw9e30p''@;'; put 'put ''LGwpaCBpbiBjP2FbaF09TE4oY1toXSxsW2hdKTpkW2hdPWxbaF07cmV0dXJuIGZ1bmN0aW9uKGYpe2ZvcihoIGluIGEpZFtoXT1hW2hdKGYpO3JldHVybiBkfX1mdW5jdGlvbiBseHQoYyxsKXtsfHwobD1bXSk7dmFyIGgsYT1jP01hdGgubWluKGwubGVuZ3RoLGMubGVuZ3RoKTowLGQ9bC5z''@;'; put 'put ''bGljZSgpO3JldHVybiBmdW5jdGlvbihmKXtmb3IoaD0wO2g8YTsrK2gpZFtoXT1jW2hdKigxLWYpK2xbaF0qZjtyZXR1cm4gZH19ZnVuY3Rpb24gTE4oYyxsKXt2YXIgZCxhPXR5cGVvZiBsO3JldHVybiBudWxsPT1sfHwiYm9vbGVhbiI9PT1hP3d0ZShsKTooIm51bWJlciI9PT1hP2w0OiJz''@;'; put 'put ''dHJpbmciPT09YT8oZD1KOShsKSk/KGw9ZCxrTik6ejhlOmwgaW5zdGFuY2VvZiBKOT9rTjpsIGluc3RhbmNlb2YgRGF0ZT9veHQ6ZnVuY3Rpb24gY3h0KGMpe3JldHVybiBBcnJheUJ1ZmZlci5pc1ZpZXcoYykmJiEoYyBpbnN0YW5jZW9mIERhdGFWaWV3KX0obCk/bHh0OkFycmF5LmlzQXJy''@;'; put 'put ''YXkobCk/cThlOiJmdW5jdGlvbiIhPXR5cGVvZiBsLnZhbHVlT2YmJiJmdW5jdGlvbiIhPXR5cGVvZiBsLnRvU3RyaW5nfHxpc05hTihsKT9zeHQ6bDQpKGMsbCl9ZnVuY3Rpb24gWDhlKCl7dmFyIGM9dGhpcyxkPXdzKHRoaXMuX3NlbGVjdGlvbi5ub2RlKCkucXVlcnlTZWxlY3Rvcigic3Zn''@;'; put 'put ''IikpO2lmKDA9PWQuc2l6ZSgpKXJldHVybiB0aGlzO3RoaXMuX3pvb21TZWxlY3Rpb249ZDt2YXIgaD1mdW5jdGlvbiByeHQoKXt2YXIgcmUsY2UsYmUsYz1KTXQsbD1RTXQsYT1ueHQsZD1leHQsaD10eHQsZj1bMCwxLzBdLHY9W1stMS8wLC0xLzBdLFsxLzAsMS8wXV0sTT0yNTAsRD1LTXQs''@;'; put 'put ''Wj11dGUoInN0YXJ0Iiwiem9vbSIsImVuZCIpLEVlPTUwMCxCZT0xNTAscWU9MCxydD0xMDtmdW5jdGlvbiBwdChPbil7T24ucHJvcGVydHkoIl9fem9vbSIsRzhlKS5vbigid2hlZWwuem9vbSIsQ3Ise3Bhc3NpdmU6ITF9KS5vbigibW91c2Vkb3duLnpvb20iLEdyKS5vbigiZGJsY2xpY2su''@;'; put 'put ''em9vbSIsbXIpLmZpbHRlcihoKS5vbigidG91Y2hzdGFydC56b29tIixHbikub24oInRvdWNobW92ZS56b29tIixhaSkub24oInRvdWNoZW5kLnpvb20gdG91Y2hjYW5jZWwuem9vbSIsX2kpLnN0eWxlKCItd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3IiLCJyZ2JhKDAsMCwwLDApIil9ZnVu''@;'; put 'put ''Y3Rpb24gZHQoT24senIpe3JldHVybih6cj1NYXRoLm1heChmWzBdLE1hdGgubWluKGZbMV0senIpKSk9PT1Pbi5rP09uOm5ldyBKZyh6cixPbi54LE9uLnkpfWZ1bmN0aW9uIEp0KE9uLHpyLEpuKXt2YXIgRHI9enJbMF0tSm5bMF0qT24uaywkcj16clsxXS1KblsxXSpPbi5rO3JldHVybiBE''@;'; put 'put ''cj09PU9uLngmJiRyPT09T24ueT9PbjpuZXcgSmcoT24uayxEciwkcil9ZnVuY3Rpb24gdm4oT24pe3JldHVyblsoK09uWzBdWzBdKyArT25bMV1bMF0pLzIsKCtPblswXVsxXSsgK09uWzFdWzFdKS8yXX1mdW5jdGlvbiBDbihPbix6cixKbixEcil7T24ub24oInN0YXJ0Lnpvb20iLGZ1bmN0''@;'; put 'put ''aW9uKCl7dG4odGhpcyxhcmd1bWVudHMpLmV2ZW50KERyKS5zdGFydCgpfSkub24oImludGVycnVwdC56b29tIGVuZC56b29tIixmdW5jdGlvbigpe3RuKHRoaXMsYXJndW1lbnRzKS5ldmVudChEcikuZW5kKCl9KS50d2Vlbigiem9vbSIsZnVuY3Rpb24oKXt2YXIgJHI9dGhpcyx3aT1hcmd1''@;'; put 'put ''bWVudHMsZWE9dG4oJHIsd2kpLmV2ZW50KERyKSxmYT1sLmFwcGx5KCRyLHdpKSx2dD1udWxsPT1Kbj92bihmYSk6ImZ1bmN0aW9uIj09dHlwZW9mIEpuP0puLmFwcGx5KCRyLHdpKTpKbixOdD1NYXRoLm1heChmYVsxXVswXS1mYVswXVswXSxmYVsxXVsxXS1mYVswXVsxXSksSHQ9JHIuX196''@;'; put 'put ''b29tLEhuPSJmdW5jdGlvbiI9PXR5cGVvZiB6cj96ci5hcHBseSgkcix3aSk6enIsdHI9RChIdC5pbnZlcnQodnQpLmNvbmNhdChOdC9IdC5rKSxIbi5pbnZlcnQodnQpLmNvbmNhdChOdC9Ibi5rKSk7cmV0dXJuIGZ1bmN0aW9uKGFyKXtpZigxPT09YXIpYXI9SG47ZWxzZXt2YXIgSHI9dHIo''@;'; put 'put ''YXIpLHFyPU50L0hyWzJdO2FyPW5ldyBKZyhxcix2dFswXS1IclswXSpxcix2dFsxXS1IclsxXSpxcil9ZWEuem9vbShudWxsLGFyKX19KX1mdW5jdGlvbiB0bihPbix6cixKbil7cmV0dXJuIUpuJiZPbi5fX3pvb21pbmd8fG5ldyBNbihPbix6cil9ZnVuY3Rpb24gTW4oT24senIpe3RoaXMu''@;'; put 'put ''dGhhdD1Pbix0aGlzLmFyZ3M9enIsdGhpcy5hY3RpdmU9MCx0aGlzLnNvdXJjZUV2ZW50PW51bGwsdGhpcy5leHRlbnQ9bC5hcHBseShPbix6ciksdGhpcy50YXBzPTB9ZnVuY3Rpb24gQ3IoT24sLi4uenIpe2lmKGMuYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgSm49dG4odGhpcyx6ciku''@;'; put 'put ''ZXZlbnQoT24pLERyPXRoaXMuX196b29tLCRyPU1hdGgubWF4KGZbMF0sTWF0aC5taW4oZlsxXSxEci5rKk1hdGgucG93KDIsZC5hcHBseSh0aGlzLGFyZ3VtZW50cykpKSksd2k9dHYoT24pO2lmKEpuLndoZWVsKShKbi5tb3VzZVswXVswXSE9PXdpWzBdfHxKbi5tb3VzZVswXVsxXSE9PXdp''@;'; put 'put ''WzFdKSYmKEpuLm1vdXNlWzFdPURyLmludmVydChKbi5tb3VzZVswXT13aSkpLGNsZWFyVGltZW91dChKbi53aGVlbCk7ZWxzZXtpZihEci5rPT09JHIpcmV0dXJuO0puLm1vdXNlPVt3aSxEci5pbnZlcnQod2kpXSxDTih0aGlzKSxKbi5zdGFydCgpfUxBKE9uKSxKbi53aGVlbD1zZXRUaW1l''@;'; put 'put ''b3V0KGZ1bmN0aW9uIGVhKCl7Sm4ud2hlZWw9bnVsbCxKbi5lbmQoKX0sQmUpLEpuLnpvb20oIm1vdXNlIixhKEp0KGR0KERyLCRyKSxKbi5tb3VzZVswXSxKbi5tb3VzZVsxXSksSm4uZXh0ZW50LHYpKX19ZnVuY3Rpb24gR3IoT24sLi4uenIpe2lmKCFiZSYmYy5hcHBseSh0aGlzLGFyZ3Vt''@;'; put 'put ''ZW50cykpe3ZhciBKbj1Pbi5jdXJyZW50VGFyZ2V0LERyPXRuKHRoaXMsenIsITApLmV2ZW50KE9uKSwkcj13cyhPbi52aWV3KS5vbigibW91c2Vtb3ZlLnpvb20iLGZ1bmN0aW9uIHZ0KEh0KXtpZihMQShIdCksIURyLm1vdmVkKXt2YXIgSG49SHQuY2xpZW50WC1lYSx0cj1IdC5jbGllbnRZ''@;'; put 'put ''LWZhO0RyLm1vdmVkPUhuKkhuK3RyKnRyPnFlfURyLmV2ZW50KEh0KS56b29tKCJtb3VzZSIsYShKdChEci50aGF0Ll9fem9vbSxEci5tb3VzZVswXT10dihIdCxKbiksRHIubW91c2VbMV0pLERyLmV4dGVudCx2KSl9LCEwKS5vbigibW91c2V1cC56b29tIixmdW5jdGlvbiBOdChIdCl7JHIu''@;'; put 'put ''b24oIm1vdXNlbW92ZS56b29tIG1vdXNldXAuem9vbSIsbnVsbCksZnVuY3Rpb24gV010KGMsbCl7dmFyIGE9Yy5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsZD13cyhjKS5vbigiZHJhZ3N0YXJ0LmRyYWciLG51bGwpO2wmJihkLm9uKCJjbGljay5kcmFnIixFdGUseHRlKSxzZXRUaW1lb3V0''@;'; put 'put ''KGZ1bmN0aW9uKCl7ZC5vbigiY2xpY2suZHJhZyIsbnVsbCl9LDApKSwib25zZWxlY3RzdGFydCJpbiBhP2Qub24oInNlbGVjdHN0YXJ0LmRyYWciLG51bGwpOihhLnN0eWxlLk1velVzZXJTZWxlY3Q9YS5fX25vc2VsZWN0LGRlbGV0ZSBhLl9fbm9zZWxlY3QpfShIdC52aWV3LERyLm1vdmVk''@;'; put 'put ''KSxMQShIdCksRHIuZXZlbnQoSHQpLmVuZCgpfSwhMCksd2k9dHYoT24sSm4pLGVhPU9uLmNsaWVudFgsZmE9T24uY2xpZW50WTsoZnVuY3Rpb24gWk10KGMpe3ZhciBsPWMuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LGE9d3MoYykub24oImRyYWdzdGFydC5kcmFnIixFdGUseHRlKTsib25z''@;'; put 'put ''ZWxlY3RzdGFydCJpbiBsP2Eub24oInNlbGVjdHN0YXJ0LmRyYWciLEV0ZSx4dGUpOihsLl9fbm9zZWxlY3Q9bC5zdHlsZS5Nb3pVc2VyU2VsZWN0LGwuc3R5bGUuTW96VXNlclNlbGVjdD0ibm9uZSIpfSkoT24udmlldyksVHRlKE9uKSxEci5tb3VzZT1bd2ksdGhpcy5fX3pvb20uaW52ZXJ0''@;'; put 'put ''KHdpKV0sQ04odGhpcyksRHIuc3RhcnQoKX19ZnVuY3Rpb24gbXIoT24sLi4uenIpe2lmKGMuYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgSm49dGhpcy5fX3pvb20sRHI9dHYoT24uY2hhbmdlZFRvdWNoZXM/T24uY2hhbmdlZFRvdWNoZXNbMF06T24sdGhpcyksJHI9Sm4uaW52ZXJ0KERy''@;'; put 'put ''KSxlYT1hKEp0KGR0KEpuLEpuLmsqKE9uLnNoaWZ0S2V5Py41OjIpKSxEciwkciksbC5hcHBseSh0aGlzLHpyKSx2KTtMQShPbiksTT4wP3dzKHRoaXMpLnRyYW5zaXRpb24oKS5kdXJhdGlvbihNKS5jYWxsKENuLGVhLERyLE9uKTp3cyh0aGlzKS5jYWxsKHB0LnRyYW5zZm9ybSxlYSxEcixP''@;'; put 'put ''bil9fWZ1bmN0aW9uIEduKE9uLC4uLnpyKXtpZihjLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIHdpLGVhLGZhLHZ0LEpuPU9uLnRvdWNoZXMsRHI9Sm4ubGVuZ3RoLCRyPXRuKHRoaXMsenIsT24uY2hhbmdlZFRvdWNoZXMubGVuZ3RoPT09RHIpLmV2ZW50KE9uKTtmb3IoVHRlKE9uKSxl''@;'; put 'put ''YT0wO2VhPERyOysrZWEpdnQ9W3Z0PXR2KGZhPUpuW2VhXSx0aGlzKSx0aGlzLl9fem9vbS5pbnZlcnQodnQpLGZhLmlkZW50aWZpZXJdLCRyLnRvdWNoMD8hJHIudG91Y2gxJiYkci50b3VjaDBbMl0hPT12dFsyXSYmKCRyLnRvdWNoMT12dCwkci50YXBzPTApOigkci50b3VjaDA9dnQsd2k9''@;'; put 'put ''ITAsJHIudGFwcz0xKyEhcmUpO3JlJiYocmU9Y2xlYXJUaW1lb3V0KHJlKSksd2kmJigkci50YXBzPDImJihjZT12dFswXSxyZT1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmU9bnVsbH0sRWUpKSxDTih0aGlzKSwkci5zdGFydCgpKX19ZnVuY3Rpb24gYWkoT24sLi4uenIpe2lmKHRoaXMuX196''@;'; put 'put ''b29taW5nKXt2YXIgd2ksZWEsZmEsdnQsSm49dG4odGhpcyx6cikuZXZlbnQoT24pLERyPU9uLmNoYW5nZWRUb3VjaGVzLCRyPURyLmxlbmd0aDtmb3IoTEEoT24pLHdpPTA7d2k8JHI7Kyt3aSlmYT10dihlYT1Eclt3aV0sdGhpcyksSm4udG91Y2gwJiZKbi50b3VjaDBbMl09PT1lYS5pZGVu''@;'; put 'put ''dGlmaWVyP0puLnRvdWNoMFswXT1mYTpKbi50b3VjaDEmJkpuLnRvdWNoMVsyXT09PWVhLmlkZW50aWZpZXImJihKbi50b3VjaDFbMF09ZmEpO2lmKGVhPUpuLnRoYXQuX196b29tLEpuLnRvdWNoMSl7dmFyIE50PUpuLnRvdWNoMFswXSxIdD1Kbi50b3VjaDBbMV0sSG49Sm4udG91Y2gxWzBd''@;'; put 'put ''LHRyPUpuLnRvdWNoMVsxXSxhcj0oYXI9SG5bMF0tTnRbMF0pKmFyKyhhcj1IblsxXS1OdFsxXSkqYXIsSHI9KEhyPXRyWzBdLUh0WzBdKSpIcisoSHI9dHJbMV0tSHRbMV0pKkhyO2VhPWR0KGVhLE1hdGguc3FydChhci9IcikpLGZhPVsoTnRbMF0rSG5bMF0pLzIsKE50WzFdK0huWzFdKS8y''@;'; put 'put ''XSx2dD1bKEh0WzBdK3RyWzBdKS8yLChIdFsxXSt0clsxXSkvMl19ZWxzZXtpZighSm4udG91Y2gwKXJldHVybjtmYT1Kbi50b3VjaDBbMF0sdnQ9Sm4udG91Y2gwWzFdfUpuLnpvb20oInRvdWNoIixhKEp0KGVhLGZhLHZ0KSxKbi5leHRlbnQsdikpfX1mdW5jdGlvbiBfaShPbiwuLi56cil7''@;'; put 'put ''aWYodGhpcy5fX3pvb21pbmcpe3ZhciB3aSxlYSxKbj10bih0aGlzLHpyKS5ldmVudChPbiksRHI9T24uY2hhbmdlZFRvdWNoZXMsJHI9RHIubGVuZ3RoO2ZvcihUdGUoT24pLGJlJiZjbGVhclRpbWVvdXQoYmUpLGJlPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtiZT1udWxsfSxFZSksd2k9MDt3''@;'; put 'put ''aTwkcjsrK3dpKWVhPURyW3dpXSxKbi50b3VjaDAmJkpuLnRvdWNoMFsyXT09PWVhLmlkZW50aWZpZXI/ZGVsZXRlIEpuLnRvdWNoMDpKbi50b3VjaDEmJkpuLnRvdWNoMVsyXT09PWVhLmlkZW50aWZpZXImJmRlbGV0ZSBKbi50b3VjaDE7aWYoSm4udG91Y2gxJiYhSm4udG91Y2gwJiYoSm4u''@;'; put 'put ''dG91Y2gwPUpuLnRvdWNoMSxkZWxldGUgSm4udG91Y2gxKSxKbi50b3VjaDApSm4udG91Y2gwWzFdPXRoaXMuX196b29tLmludmVydChKbi50b3VjaDBbMF0pO2Vsc2UgaWYoSm4uZW5kKCksMj09PUpuLnRhcHMmJihlYT10dihlYSx0aGlzKSxNYXRoLmh5cG90KGNlWzBdLWVhWzBdLGNlWzFd''@;'; put 'put ''LWVhWzFdKTxydCkpe3ZhciBmYT13cyh0aGlzKS5vbigiZGJsY2xpY2suem9vbSIpO2ZhJiZmYS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fX1yZXR1cm4gcHQudHJhbnNmb3JtPWZ1bmN0aW9uKE9uLHpyLEpuLERyKXt2YXIgJHI9T24uc2VsZWN0aW9uP09uLnNlbGVjdGlvbigpOk9uOyRyLnBy''@;'; put 'put ''b3BlcnR5KCJfX3pvb20iLEc4ZSksT24hPT0kcj9DbihPbix6cixKbixEcik6JHIuaW50ZXJydXB0KCkuZWFjaChmdW5jdGlvbigpe3RuKHRoaXMsYXJndW1lbnRzKS5ldmVudChEcikuc3RhcnQoKS56b29tKG51bGwsImZ1bmN0aW9uIj09dHlwZW9mIHpyP3pyLmFwcGx5KHRoaXMsYXJndW1l''@;'; put 'put ''bnRzKTp6cikuZW5kKCl9KX0scHQuc2NhbGVCeT1mdW5jdGlvbihPbix6cixKbixEcil7cHQuc2NhbGVUbyhPbixmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fem9vbS5rKigiZnVuY3Rpb24iPT10eXBlb2YgenI/enIuYXBwbHkodGhpcyxhcmd1bWVudHMpOnpyKX0sSm4sRHIpfSxwdC5zY2Fs''@;'; put 'put ''ZVRvPWZ1bmN0aW9uKE9uLHpyLEpuLERyKXtwdC50cmFuc2Zvcm0oT24sZnVuY3Rpb24oKXt2YXIgJHI9bC5hcHBseSh0aGlzLGFyZ3VtZW50cyksd2k9dGhpcy5fX3pvb20sZWE9bnVsbD09Sm4/dm4oJHIpOiJmdW5jdGlvbiI9PXR5cGVvZiBKbj9Kbi5hcHBseSh0aGlzLGFyZ3VtZW50cyk6''@;'; put 'put ''Sm4sZmE9d2kuaW52ZXJ0KGVhKSx2dD0iZnVuY3Rpb24iPT10eXBlb2YgenI/enIuYXBwbHkodGhpcyxhcmd1bWVudHMpOnpyO3JldHVybiBhKEp0KGR0KHdpLHZ0KSxlYSxmYSksJHIsdil9LEpuLERyKX0scHQudHJhbnNsYXRlQnk9ZnVuY3Rpb24oT24senIsSm4sRHIpe3B0LnRyYW5zZm9y''@;'; put 'put ''bShPbixmdW5jdGlvbigpe3JldHVybiBhKHRoaXMuX196b29tLnRyYW5zbGF0ZSgiZnVuY3Rpb24iPT10eXBlb2YgenI/enIuYXBwbHkodGhpcyxhcmd1bWVudHMpOnpyLCJmdW5jdGlvbiI9PXR5cGVvZiBKbj9Kbi5hcHBseSh0aGlzLGFyZ3VtZW50cyk6Sm4pLGwuYXBwbHkodGhpcyxhcmd1''@;'; put 'put ''bWVudHMpLHYpfSxudWxsLERyKX0scHQudHJhbnNsYXRlVG89ZnVuY3Rpb24oT24senIsSm4sRHIsJHIpe3B0LnRyYW5zZm9ybShPbixmdW5jdGlvbigpe3ZhciB3aT1sLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxlYT10aGlzLl9fem9vbSxmYT1udWxsPT1Ecj92bih3aSk6ImZ1bmN0aW9uIj09''@;'; put 'put ''dHlwZW9mIERyP0RyLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpEcjtyZXR1cm4gYShJTi50cmFuc2xhdGUoZmFbMF0sZmFbMV0pLnNjYWxlKGVhLmspLnRyYW5zbGF0ZSgiZnVuY3Rpb24iPT10eXBlb2YgenI/LXpyLmFwcGx5KHRoaXMsYXJndW1lbnRzKTotenIsImZ1bmN0aW9uIj09dHlwZW9m''@;'; put 'put ''IEpuPy1Kbi5hcHBseSh0aGlzLGFyZ3VtZW50cyk6LUpuKSx3aSx2KX0sRHIsJHIpfSxNbi5wcm90b3R5cGU9e2V2ZW50OmZ1bmN0aW9uKE9uKXtyZXR1cm4gT24mJih0aGlzLnNvdXJjZUV2ZW50PU9uKSx0aGlzfSxzdGFydDpmdW5jdGlvbigpe3JldHVybiAxPT0rK3RoaXMuYWN0aXZlJiYo''@;'; put 'put ''dGhpcy50aGF0Ll9fem9vbWluZz10aGlzLHRoaXMuZW1pdCgic3RhcnQiKSksdGhpc30sem9vbTpmdW5jdGlvbihPbix6cil7cmV0dXJuIHRoaXMubW91c2UmJiJtb3VzZSIhPT1PbiYmKHRoaXMubW91c2VbMV09enIuaW52ZXJ0KHRoaXMubW91c2VbMF0pKSx0aGlzLnRvdWNoMCYmInRvdWNo''@;'; put 'put ''IiE9PU9uJiYodGhpcy50b3VjaDBbMV09enIuaW52ZXJ0KHRoaXMudG91Y2gwWzBdKSksdGhpcy50b3VjaDEmJiJ0b3VjaCIhPT1PbiYmKHRoaXMudG91Y2gxWzFdPXpyLmludmVydCh0aGlzLnRvdWNoMVswXSkpLHRoaXMudGhhdC5fX3pvb209enIsdGhpcy5lbWl0KCJ6b29tIiksdGhpc30s''@;'; put 'put ''ZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIDA9PS0tdGhpcy5hY3RpdmUmJihkZWxldGUgdGhpcy50aGF0Ll9fem9vbWluZyx0aGlzLmVtaXQoImVuZCIpKSx0aGlzfSxlbWl0OmZ1bmN0aW9uKE9uKXt2YXIgenI9d3ModGhpcy50aGF0KS5kYXR1bSgpO1ouY2FsbChPbix0aGlzLnRoYXQsbmV3IFhN''@;'; put 'put ''dChPbix7c291cmNlRXZlbnQ6dGhpcy5zb3VyY2VFdmVudCx0YXJnZXQ6cHQsdHlwZTpPbix0cmFuc2Zvcm06dGhpcy50aGF0Ll9fem9vbSxkaXNwYXRjaDpafSksenIpfX0scHQud2hlZWxEZWx0YT1mdW5jdGlvbihPbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGQ9ImZ1bmN0aW9uIj09''@;'; put 'put ''dHlwZW9mIE9uP09uOkROKCtPbikscHQpOmR9LHB0LmZpbHRlcj1mdW5jdGlvbihPbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9ImZ1bmN0aW9uIj09dHlwZW9mIE9uP09uOkROKCEhT24pLHB0KTpjfSxwdC50b3VjaGFibGU9ZnVuY3Rpb24oT24pe3JldHVybiBhcmd1bWVudHMubGVu''@;'; put 'put ''Z3RoPyhoPSJmdW5jdGlvbiI9PXR5cGVvZiBPbj9PbjpETighIU9uKSxwdCk6aH0scHQuZXh0ZW50PWZ1bmN0aW9uKE9uKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD0iZnVuY3Rpb24iPT10eXBlb2YgT24/T246RE4oW1srT25bMF1bMF0sK09uWzBdWzFdXSxbK09uWzFdWzBdLCtPblsx''@;'; put 'put ''XVsxXV1dKSxwdCk6bH0scHQuc2NhbGVFeHRlbnQ9ZnVuY3Rpb24oT24pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmWzBdPStPblswXSxmWzFdPStPblsxXSxwdCk6W2ZbMF0sZlsxXV19LHB0LnRyYW5zbGF0ZUV4dGVudD1mdW5jdGlvbihPbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/''@;'; put 'put ''KHZbMF1bMF09K09uWzBdWzBdLHZbMV1bMF09K09uWzFdWzBdLHZbMF1bMV09K09uWzBdWzFdLHZbMV1bMV09K09uWzFdWzFdLHB0KTpbW3ZbMF1bMF0sdlswXVsxXV0sW3ZbMV1bMF0sdlsxXVsxXV1dfSxwdC5jb25zdHJhaW49ZnVuY3Rpb24oT24pe3JldHVybiBhcmd1bWVudHMubGVuZ3Ro''@;'; put 'put ''PyhhPU9uLHB0KTphfSxwdC5kdXJhdGlvbj1mdW5jdGlvbihPbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KE09K09uLHB0KTpNfSxwdC5pbnRlcnBvbGF0ZT1mdW5jdGlvbihPbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEQ9T24scHQpOkR9LHB0Lm9uPWZ1bmN0aW9uKCl7dmFyIE9u''@;'; put 'put ''PVoub24uYXBwbHkoWixhcmd1bWVudHMpO3JldHVybiBPbj09PVo/cHQ6T259LHB0LmNsaWNrRGlzdGFuY2U9ZnVuY3Rpb24oT24pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhxZT0oT249K09uKSpPbixwdCk6TWF0aC5zcXJ0KHFlKX0scHQudGFwRGlzdGFuY2U9ZnVuY3Rpb24oT24pe3Jl''@;'; put 'put ''dHVybiBhcmd1bWVudHMubGVuZ3RoPyhydD0rT24scHQpOnJ0fSxwdH0oKS5zY2FsZUV4dGVudCh0aGlzLl9vcHRpb25zLnpvb21TY2FsZUV4dGVudCkudHJhbnNsYXRlRXh0ZW50KHRoaXMuX29wdGlvbnMuem9vbVRyYW5zbGF0ZUV4dGVudCkuaW50ZXJwb2xhdGUoTE4pLm9uKCJ6b29tIixm''@;'; put 'put ''dW5jdGlvbiBsKHYpe3dzKGQubm9kZSgpLnF1ZXJ5U2VsZWN0b3IoImciKSkuYXR0cigidHJhbnNmb3JtIix2LnRyYW5zZm9ybSksYy5fZGlzcGF0Y2guY2FsbCgiem9vbSIsYyl9KTt0aGlzLl96b29tQmVoYXZpb3I9aDt2YXIgZj13cyhkLm5vZGUoKS5xdWVyeVNlbGVjdG9yKCJnIikpO3Jl''@;'; put 'put ''dHVybiBkLmNhbGwoaCksdGhpcy5fYWN0aXZlfHxSdGUuY2FsbCh0aGlzLGYpLHRoaXMuX29yaWdpbmFsVHJhbnNmb3JtPVJOKGQubm9kZSgpKSx0aGlzfWZ1bmN0aW9uIEl0ZShjKXt2YXIgbD10aGlzLl90cmFuc2xhdGlvbixhPXRoaXMuX3NjYWxlLGQ9Yy5kYXR1bSgpLnRyYW5zbGF0aW9u''@;'; put 'put ''LGg9Yy5kYXR1bSgpLnNjYWxlLGY9Uk4odGhpcy5fem9vbVNlbGVjdGlvbi5ub2RlKCkpO3JldHVybiBsJiYoZj0oZj1mLnNjYWxlKDEvYSkpLnRyYW5zbGF0ZSgtbC54LC1sLnkpKSwoZj1mLnRyYW5zbGF0ZShkLngsZC55KSkuc2NhbGUoaCl9ZnVuY3Rpb24gUnRlKGMpe3RoaXMuX3pvb21C''@;'; put 'put ''ZWhhdmlvci50cmFuc2Zvcm0odGhpcy5fem9vbVNlbGVjdGlvbixJdGUuY2FsbCh0aGlzLGMpKSx0aGlzLl90cmFuc2xhdGlvbj1jLmRhdHVtKCkudHJhbnNsYXRpb24sdGhpcy5fc2NhbGU9Yy5kYXR1bSgpLnNjYWxlLHRoaXMuX29yaWdpbmFsVHJhbnNmb3JtPUlOLnRyYW5zbGF0ZShjLmRh''@;'; put 'put ''dHVtKCkudHJhbnNsYXRpb24ueCxjLmRhdHVtKCkudHJhbnNsYXRpb24ueSkuc2NhbGUoYy5kYXR1bSgpLnNjYWxlKX1mdW5jdGlvbiBteHQoYyxsKXtyZXR1cm4gZnVuY3Rpb24oKXtjb25zdCBhPWMubWFwKGZ1bmN0aW9uKGQpe3JldHVybiBMTihbZFswXVswXSxkWzBdWzFdXSxbZFsxXVsw''@;'; put 'put ''XSxkWzFdWzFdXSl9KTtyZXR1cm4gZnVuY3Rpb24oZCl7cmV0dXJuIGQ8MT8iTSIrYS5tYXAoZnVuY3Rpb24oaCl7cmV0dXJuIGgoZCl9KS5qb2luKCJMIik6bH19fWZ1bmN0aW9uIEo4ZShjKXtyZXR1cm4iZWRnZSI9PWMuYXR0cmlidXRlcy5jbGFzc3x8ImEiPT1jLnRhZyYmImciPT1jLnBh''@;'; put 'put ''cmVudC50YWcmJiJlZGdlIj09Yy5wYXJlbnQucGFyZW50LmF0dHJpYnV0ZXMuY2xhc3N9ZnVuY3Rpb24gUThlKGMpe3JldHVybiBjLnBhcmVudCYmSjhlKGMucGFyZW50KX1mdW5jdGlvbiBlN2UoYyl7dmFyIGw9dGhpcy5fdHJhbnNpdGlvbixhPXRoaXMuX29wdGlvbnMuZmFkZSYmbnVsbCE9''@;'; put 'put ''bCxkPXRoaXMuX29wdGlvbnMudHdlZW5QYXRocyxoPXRoaXMuX29wdGlvbnMudHdlZW5TaGFwZXMsZj10aGlzLl9vcHRpb25zLmNvbnZlcnRFcXVhbFNpZGVkUG9seWdvbnMsdj10aGlzLl9vcHRpb25zLmdyb3dFbnRlcmluZ0VkZ2VzJiZudWxsIT1sLE09dGhpcy5fYXR0cmlidXRlcixEPXRo''@;'; put 'put ''aXM7dmFyIGNlPXRoaXMuX3NlbGVjdGlvbjtpZihudWxsIT1sKXt2YXIgYmU9dGhpcy5fam9icztpZihELl9hY3RpdmUpcmV0dXJuIGJlLnB1c2gobnVsbCksdGhpcztjZS50cmFuc2l0aW9uKGwpLnRyYW5zaXRpb24oKS5kdXJhdGlvbigwKS5vbigiZW5kIixmdW5jdGlvbigpe0QuX2FjdGl2''@;'; put 'put ''ZT0hMSwwIT1iZS5sZW5ndGgmJihiZS5zaGlmdCgpLEQucmVuZGVyKCkpfSksdGhpcy5fYWN0aXZlPSEwfW51bGwhPWwmJmNlLnRyYW5zaXRpb24obCkub24oInN0YXJ0IixmdW5jdGlvbigpe0QuX2Rpc3BhdGNoLmNhbGwoInRyYW5zaXRpb25TdGFydCIsRCl9KS5vbigiZW5kIixmdW5jdGlv''@;'; put 'put ''bigpe0QuX2Rpc3BhdGNoLmNhbGwoInRyYW5zaXRpb25FbmQiLEQpfSkudHJhbnNpdGlvbigpLmR1cmF0aW9uKDApLm9uKCJzdGFydCIsZnVuY3Rpb24oKXtELl9kaXNwYXRjaC5jYWxsKCJyZXN0b3JlRW5kIixEKSxELl9kaXNwYXRjaC5jYWxsKCJlbmQiLEQpLGMmJmMuY2FsbChEKX0pO3Zh''@;'; put 'put ''ciBFZT10aGlzLl9kYXRhLEJlPWNlLnNlbGVjdEFsbCgic3ZnIikuZGF0YShbRWVdLGZ1bmN0aW9uKHFlKXtyZXR1cm4gcWUua2V5fSk7cmV0dXJuIEJlPUJlLmVudGVyKCkuYXBwZW5kKCJzdmciKS5tZXJnZShCZSksZnVuY3Rpb24gcmUocWUpe3ZhciBydD13cyh0aGlzKTtpZigic3ZnIj09''@;'; put 'put ''cWUudGFnKXt2YXIgcHQ9RC5fb3B0aW9ucztpZihudWxsIT1wdC53aWR0aHx8bnVsbCE9cHQuaGVpZ2h0KXt2YXIgZHQ9cHQud2lkdGgsSnQ9cHQuaGVpZ2h0O251bGw9PWR0P2R0PTQqcWUuYXR0cmlidXRlcy53aWR0aC5yZXBsYWNlKCJwdCIsIiIpLzM6KHJ0LmF0dHIoIndpZHRoIixkdCks''@;'; put 'put ''cWUuYXR0cmlidXRlcy53aWR0aD1kdCksbnVsbD09SnQ/SnQ9NCpxZS5hdHRyaWJ1dGVzLmhlaWdodC5yZXBsYWNlKCJwdCIsIiIpLzM6KHJ0LmF0dHIoImhlaWdodCIsSnQpLHFlLmF0dHJpYnV0ZXMuaGVpZ2h0PUp0KSxwdC5maXR8fChydC5hdHRyKCJ2aWV3Qm94IixgMCAwICR7MypkdC80''@;'; put 'put ''L3B0LnNjYWxlfSAkezMqSnQvNC9wdC5zY2FsZX1gKSxxZS5hdHRyaWJ1dGVzLnZpZXdCb3g9YDAgMCAkezMqZHQvNC9wdC5zY2FsZX0gJHszKkp0LzQvcHQuc2NhbGV9YCl9MSE9cHQuc2NhbGUmJihwdC5maXR8fG51bGw9PXB0LndpZHRoJiZudWxsPT1wdC5oZWlnaHQpJiYoZHQ9cWUuYXR0''@;'; put 'put ''cmlidXRlcy52aWV3Qm94LnNwbGl0KCIgIilbMl0sSnQ9cWUuYXR0cmlidXRlcy52aWV3Qm94LnNwbGl0KCIgIilbM10scnQuYXR0cigidmlld0JveCIsYDAgMCAke2R0L3B0LnNjYWxlfSAke0p0L3B0LnNjYWxlfWApLHFlLmF0dHJpYnV0ZXMudmlld0JveD1gMCAwICR7ZHQvcHQuc2NhbGV9''@;'; put 'put ''ICR7SnQvcHQuc2NhbGV9YCl9TSYmcnQuZWFjaChNKTt2YXIgdm49cWUudGFnLENuPXFlLmF0dHJpYnV0ZXMsdG49cnQubm9kZSgpLmF0dHJpYnV0ZXM7aWYodG4pZm9yKHZhciBNbj0wO01uPHRuLmxlbmd0aDtNbisrKXt2YXIgQ3I9dG5bTW5dLEdyPUNyLm5hbWU7aWYoInhtbG5zIiE9R3Iu''@;'; put 'put ''c3BsaXQoIjoiKVswXSYmQ3IubmFtZXNwYWNlVVJJKXt2YXIgbXI9Q3IubmFtZXNwYWNlVVJJLnNwbGl0KCIvIik7R3I9bXJbbXIubGVuZ3RoLTFdKyI6IitHcn1HciBpbiBDbnx8KENuW0dyXT1udWxsKX12YXIgYWk9ITEsX2k9ITE7aWYoaCYmbCl7aWYoKCJwb2x5Z29uIj09dGhpcy5ub2Rl''@;'; put 'put ''TmFtZXx8ImVsbGlwc2UiPT10aGlzLm5vZGVOYW1lKSYmcWUuYWx0ZXJuYXRpdmVPbGQmJihfaT0hMCksKCJwb2x5Z29uIj09dm58fCJlbGxpcHNlIj09dm4pJiZxZS5hbHRlcm5hdGl2ZU5ldyYmKGFpPSEwKSwicG9seWdvbiI9PXRoaXMubm9kZU5hbWUmJiJwb2x5Z29uIj09dm4mJnFlLmFs''@;'; put 'put ''dGVybmF0aXZlT2xkKXt2YXIgT249JDhlKHJ0KTtpZighZil7dmFyIEpuPU9uLmF0dHJpYnV0ZXMucG9pbnRzLnNwbGl0KCIgIikubGVuZ3RoOyhEcj1xZS5hdHRyaWJ1dGVzLnBvaW50cykuc3BsaXQoIiAiKS5sZW5ndGg9PUpuJiYoYWk9ITEsX2k9ITEpfX1pZihfaSl7dmFyIGVhPUs4ZShy''@;'; put 'put ''dCxxZS5hbHRlcm5hdGl2ZU9sZCk7ZWEuZGF0YShbcWVdLGZ1bmN0aW9uKCl7cmV0dXJuIHFlLmtleX0pLHJ0PWVhfWFpJiYodm49InBhdGgiLENuPXFlLmFsdGVybmF0aXZlTmV3LmF0dHJpYnV0ZXMpfXZhciB2dD1ydDtpZihsJiYodnQ9dnQudHJhbnNpdGlvbihsKSxhJiZ2dC5maWx0ZXIo''@;'; put 'put ''ZnVuY3Rpb24oWm4pe3JldHVybiIjIj09Wm4udGFnWzBdP251bGw6dGhpc30pLnN0eWxlKCJvcGFjaXR5IiwxKSx2dC5maWx0ZXIoZnVuY3Rpb24oWm4pe3JldHVybiIjIj09Wm4udGFnWzBdP251bGw6dGhpc30pLm9uKCJlbmQiLGZ1bmN0aW9uKFpuKXt3cyh0aGlzKS5hdHRyKCJzdHlsZSIs''@;'; put 'put ''Wm4mJlpuLmF0dHJpYnV0ZXMmJlpuLmF0dHJpYnV0ZXMuc3R5bGV8fG51bGwpfSkpLHYmJiJwYXRoIj09dm4mJnFlLm9mZnNldCl7dmFyIEh0PXFlLnRvdGFsTGVuZ3RoO3J0LmF0dHIoInN0cm9rZS1kYXNoYXJyYXkiLEh0KyIgIitIdCkuYXR0cigic3Ryb2tlLWRhc2hvZmZzZXQiLEh0KS5h''@;'; put 'put ''dHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitxZS5vZmZzZXQueCsiLCIrcWUub2Zmc2V0LnkrIikiKSxDblsic3Ryb2tlLWRhc2hvZmZzZXQiXT0wLENuLnRyYW5zZm9ybT0idHJhbnNsYXRlKDAsMCkiLHZ0LmF0dHIoInN0cm9rZS1kYXNob2Zmc2V0IixDblsic3Ryb2tlLWRhc2hvZmZz''@;'; put 'put ''ZXQiXSkuYXR0cigidHJhbnNmb3JtIixDbi50cmFuc2Zvcm0pLm9uKCJzdGFydCIsZnVuY3Rpb24oKXt3cyh0aGlzKS5zdHlsZSgib3BhY2l0eSIsbnVsbCl9KS5vbigiZW5kIixmdW5jdGlvbigpe3dzKHRoaXMpLmF0dHIoInN0cm9rZS1kYXNob2Zmc2V0IixudWxsKS5hdHRyKCJzdHJva2Ut''@;'; put 'put ''ZGFzaGFycmF5IixudWxsKS5hdHRyKCJ0cmFuc2Zvcm0iLG51bGwpfSl9aWYodiYmInBvbHlnb24iPT12biYmUThlKHFlKSYmcWUub2Zmc2V0JiYicGF0aCI9PXFlLnBhcmVudC5jaGlsZHJlblszXS50YWcpe3ZhciB0cj13cyhydC5ub2RlKCkucGFyZW50Tm9kZS5xdWVyeVNlbGVjdG9yKCJw''@;'; put 'put ''YXRoIikpLGFyPXRyLm5vZGUoKS5nZXRQb2ludEF0TGVuZ3RoKDApLEhyPXRyLm5vZGUoKS5nZXRQb2ludEF0TGVuZ3RoKHFlLnRvdGFsTGVuZ3RoKSxxcj10ci5ub2RlKCkuZ2V0UG9pbnRBdExlbmd0aChxZS50b3RhbExlbmd0aC0xKSxvbj0xODAqTWF0aC5hdGFuMihIci55LXFyLnksSHIu''@;'; put 'put ''eC1xci54KS9NYXRoLlBJLHluPWFyLngtSHIueCtxZS5vZmZzZXQueCxwbj1hci55LUhyLnkrcWUub2Zmc2V0Lnk7cnQuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIreW4rIiwiK3BuKyIpIiksdnQuYXR0clR3ZWVuKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9u''@;'; put 'put ''KFpuKXt2YXIgc3I9dHIubm9kZSgpLmdldFBvaW50QXRMZW5ndGgocWUudG90YWxMZW5ndGgqWm4pLE5yPXRyLm5vZGUoKS5nZXRQb2ludEF0TGVuZ3RoKHFlLnRvdGFsTGVuZ3RoKlpuKzEpLE1yPTE4MCpNYXRoLmF0YW4yKE5yLnktc3IueSxOci54LXNyLngpL01hdGguUEktb247cmV0dXJu''@;'; put 'put ''InRyYW5zbGF0ZSgiKyh5bj1zci54LUhyLngrcWUub2Zmc2V0LngqKDEtWm4pKSsiLCIrKHBuPXNyLnktSHIueStxZS5vZmZzZXQueSooMS1abikpKyIpIHJvdGF0ZSgiK01yKyIgIitIci54KyIgIitIci55KyIpIn19KS5vbigic3RhcnQiLGZ1bmN0aW9uKCl7d3ModGhpcykuc3R5bGUoIm9w''@;'; put 'put ''YWNpdHkiLG51bGwpfSkub24oImVuZCIsZnVuY3Rpb24oKXt3cyh0aGlzKS5hdHRyKCJ0cmFuc2Zvcm0iLG51bGwpfSl9dmFyIHByPWQmJmwmJiJwYXRoIj09dm4mJm51bGwhPXJ0LmF0dHIoImQiKTtmb3IodmFyICRuIG9mIE9iamVjdC5rZXlzKENuKSl7dmFyIGRyPUNuWyRuXTtpZihwciYm''@;'; put 'put ''ImQiPT0kbil7dmFyIERyOyhEcj0ocWUuYWx0ZXJuYXRpdmVPbGR8fHFlKS5wb2ludHMpJiZ2dC5hdHRyVHdlZW4oImQiLG14dChEcixkcikpfWVsc2V7aWYoInRyYW5zZm9ybSI9PSRuJiZxZS50cmFuc2xhdGlvbilpZihsKXt2YXIgVXI9dnQub24oImVuZCIpO3Z0Lm9uKCJzdGFydCIsZnVu''@;'; put 'put ''Y3Rpb24oKXtELl96b29tQmVoYXZpb3ImJnZ0LnR3ZWVuKCJhdHRyLnRyYW5zZm9ybSIsZnVuY3Rpb24oKXt2YXIgWm49dGhpcztyZXR1cm4gZnVuY3Rpb24oc3Ipe1puLnNldEF0dHJpYnV0ZSgidHJhbnNmb3JtIixUOGUoUk4oRC5fem9vbVNlbGVjdGlvbi5ub2RlKCkpLnRvU3RyaW5nKCks''@;'; put 'put ''SXRlLmNhbGwoRCxydCkudG9TdHJpbmcoKSkoc3IpKX19KX0pLm9uKCJlbmQiLGZ1bmN0aW9uKCl7VXIuY2FsbCh0aGlzKSxELl96b29tQmVoYXZpb3ImJlJ0ZS5jYWxsKEQscnQpfSl9ZWxzZSBELl96b29tQmVoYXZpb3ImJihSdGUuY2FsbChELHJ0KSxkcj1JdGUuY2FsbChELHJ0KS50b1N0''@;'; put 'put ''cmluZygpKTt2dC5hdHRyKCRuLGRyKX19YWkmJnZ0Lm9uKCJlbmQiLGZ1bmN0aW9uKFpuLHNyLE5yKXtLOGUoZWE9d3ModGhpcyksWm4pLmRhdGEoW1puXSxmdW5jdGlvbigpe3JldHVybiBabi5rZXl9KX0pLHFlLnRleHQmJnZ0LnRleHQocWUudGV4dCksZnVuY3Rpb24gWihxZSl7dmFyIHJ0''@;'; put 'put ''PXFlLnNlbGVjdEFsbChmdW5jdGlvbigpe3JldHVybiBxZS5ub2RlKCkuY2hpbGROb2Rlc30pLHB0PShydD1ydC5kYXRhKGZ1bmN0aW9uKHZuKXtyZXR1cm4gdm4uY2hpbGRyZW59LGZ1bmN0aW9uKHZuKXtyZXR1cm4gdm4ua2V5fSkpLmVudGVyKCkuYXBwZW5kKGZ1bmN0aW9uKHZuKXt2YXIg''@;'; put 'put ''Q249QXRlKHZuKTtyZXR1cm4iI3RleHQiPT12bi50YWcmJmEmJihDbi5ub2RlVmFsdWU9dm4udGV4dCksQ259KTsoYXx8diYmSjhlKHFlLmRhdHVtKCkpKSYmcHQuZmlsdGVyKGZ1bmN0aW9uKHZuKXtyZXR1cm4iIyI9PXZuLnRhZ1swXT9udWxsOnRoaXN9KS5lYWNoKGZ1bmN0aW9uKHZuKXt2''@;'; put 'put ''YXIgQ249d3ModGhpcyk7Zm9yKHZhciB0biBvZiBPYmplY3Qua2V5cyh2bi5hdHRyaWJ1dGVzKSlDbi5hdHRyKHRuLHZuLmF0dHJpYnV0ZXNbdG5dKX0pLmZpbHRlcihmdW5jdGlvbih2bil7cmV0dXJuInN2ZyI9PXZuLnRhZ3x8ImciPT12bi50YWc/bnVsbDp0aGlzfSkuc3R5bGUoIm9wYWNp''@;'; put 'put ''dHkiLDApO3ZhciBKdD1ydC5leGl0KCk7TSYmSnQuZWFjaChNKSxsJiYoSnQ9SnQudHJhbnNpdGlvbihsKSxhJiZKdC5maWx0ZXIoZnVuY3Rpb24odm4pe3JldHVybiIjIj09dm4udGFnWzBdP251bGw6dGhpc30pLnN0eWxlKCJvcGFjaXR5IiwwKSksSnQ9SnQucmVtb3ZlKCksKHJ0PXB0Lm1l''@;'; put 'put ''cmdlKHJ0KS5vcmRlcigpKS5lYWNoKHJlKX0ocnQpfS5jYWxsKEJlLm5vZGUoKSxFZSksdGhpcy5fb3B0aW9ucy56b29tJiYhdGhpcy5fem9vbUJlaGF2aW9yJiZYOGUuY2FsbCh0aGlzKSxELl9kaXNwYXRjaC5jYWxsKCJyZW5kZXJFbmQiLEQpLG51bGw9PWwmJih0aGlzLl9kaXNwYXRjaC5j''@;'; put 'put ''YWxsKCJlbmQiLHRoaXMpLGMmJmMuY2FsbCh0aGlzKSksdGhpc31STi5wcm90b3R5cGU9SmcucHJvdG90eXBlO3ZhciBOQSxGdGUsU3h0PUFycmF5QnVmZmVyLEl1PVVpbnQ4QXJyYXksT049VWludDE2QXJyYXksTXh0PUludDE2QXJyYXksUE49SW50MzJBcnJheSxMdGU9ZnVuY3Rpb24oYyxs''@;'; put 'put ''LGEpe2lmKEl1LnByb3RvdHlwZS5zbGljZSlyZXR1cm4gSXUucHJvdG90eXBlLnNsaWNlLmNhbGwoYyxsLGEpOyhudWxsPT1sfHxsPDApJiYobD0wKSwobnVsbD09YXx8YT5jLmxlbmd0aCkmJihhPWMubGVuZ3RoKTt2YXIgZD1uZXcgSXUoYS1sKTtyZXR1cm4gZC5zZXQoYy5zdWJhcnJheShs''@;'; put 'put ''LGEpKSxkfSxQQT1mdW5jdGlvbihjLGwsYSxkKXtpZihJdS5wcm90b3R5cGUuZmlsbClyZXR1cm4gSXUucHJvdG90eXBlLmZpbGwuY2FsbChjLGwsYSxkKTtmb3IoKG51bGw9PWF8fGE8MCkmJihhPTApLChudWxsPT1kfHxkPmMubGVuZ3RoKSYmKGQ9Yy5sZW5ndGgpO2E8ZDsrK2EpY1thXT1s''@;'; put 'put ''O3JldHVybiBjfSx4eHQ9ZnVuY3Rpb24oYyxsLGEsZCl7aWYoSXUucHJvdG90eXBlLmNvcHlXaXRoaW4pcmV0dXJuIEl1LnByb3RvdHlwZS5jb3B5V2l0aGluLmNhbGwoYyxsLGEsZCk7Zm9yKChudWxsPT1hfHxhPDApJiYoYT0wKSwobnVsbD09ZHx8ZD5jLmxlbmd0aCkmJihkPWMubGVuZ3Ro''@;'; put 'put ''KTthPGQ7KWNbbCsrXT1jW2ErK119LEV4dD1bImludmFsaWQgenN0ZCBkYXRhIiwid2luZG93IHNpemUgdG9vIGxhcmdlICg+MjA0Nk1CKSIsImludmFsaWQgYmxvY2sgdHlwZSIsIkZTRSBhY2N1cmFjeSB0b28gaGlnaCIsIm1hdGNoIGRpc3RhbmNlIHRvbyBmYXIgYmFjayIsInVuZXhwZWN0''@;'; put 'put ''ZWQgRU9GIl0sZTA9ZnVuY3Rpb24oYyxsLGEpe3ZhciBkPW5ldyBFcnJvcihsfHxFeHRbY10pO2lmKGQuY29kZT1jLEVycm9yLmNhcHR1cmVTdGFja1RyYWNlJiZFcnJvci5jYXB0dXJlU3RhY2tUcmFjZShkLGUwKSwhYSl0aHJvdyBkO3JldHVybiBkfSx0N2U9ZnVuY3Rpb24oYyxsLGEpe2Zv''@;'; put 'put ''cih2YXIgZD0wLGg9MDtkPGE7KytkKWh8PWNbbCsrXTw8KGQ8PDMpO3JldHVybiBofSxBeHQ9ZnVuY3Rpb24oYyxsKXt2YXIgYT1jWzBdfGNbMV08PDh8Y1syXTw8MTY7aWYoMzEyNjU2OD09YSYmMjUzPT1jWzNdKXt2YXIgZD1jWzRdLGg9ZD4+NSYxLGY9ZD4+MiYxLHY9MyZkLE09ZD4+Njs4''@;'; put 'put ''JmQmJmUwKDApO3ZhciBEPTYtaCxaPTM9PXY/NDp2LHJlPXQ3ZShjLEQsWiksY2U9TT8xPDxNOmgsYmU9dDdlKGMsRCs9WixjZSkrKDE9PU0mJjI1NiksRWU9YmU7aWYoIWgpe3ZhciBCZT0xPDwxMCsoY1s1XT4+Myk7RWU9QmUrKEJlPj4zKSooNyZjWzVdKX1FZT4yMTQ1Mzg2NDk2JiZlMCgx''@;'; put 'put ''KTt2YXIgcWU9bmV3IEl1KCgxPT1sP2JlfHxFZTpsPzA6RWUpKzEyKTtyZXR1cm4gcWVbMF09MSxxZVs0XT00LHFlWzhdPTgse2I6RCtjZSx5OjAsbDowLGQ6cmUsdzpsJiYxIT1sP2w6cWUuc3ViYXJyYXkoMTIpLGU6RWUsbzpuZXcgUE4ocWUuYnVmZmVyLDAsMyksdTpiZSxjOmYsbTpNYXRo''@;'; put 'put ''Lm1pbigxMzEwNzIsRWUpfX1pZigyNTQ4MTg5Mz09KGE+PjR8Y1szXTw8MjApKXJldHVybiBmdW5jdGlvbihjLGwpe3JldHVybihjWzRdfGNbNV08PDh8Y1s2XTw8MTZ8Y1s3XTw8MjQpPj4+MH0oYykrODtlMCgwKX0scnY9ZnVuY3Rpb24oYyl7Zm9yKHZhciBsPTA7MTw8bDw9YzsrK2wpO3Jl''@;'; put 'put ''dHVybiBsLTF9LEZBPWZ1bmN0aW9uKGMsbCxhKXt2YXIgZD00KyhsPDwzKSxoPTUrKDE1JmNbbF0pO2g+YSYmZTAoMyk7Zm9yKHZhciBmPTE8PGgsdj1mLE09LTEsRD0tMSxaPS0xLHJlPWYsY2U9bmV3IFN4dCg1MTIrKGY8PDIpKSxiZT1uZXcgTXh0KGNlLDAsMjU2KSxFZT1uZXcgT04oY2Us''@;'; put 'put ''MCwyNTYpLEJlPW5ldyBPTihjZSw1MTIsZikscWU9NTEyKyhmPDwxKSxydD1uZXcgSXUoY2UscWUsZikscHQ9bmV3IEl1KGNlLHFlK2YpO008MjU1JiZ2PjA7KXt2YXIgZHQ9cnYodisxKSxKdD1kPj4zLHZuPSgxPDxkdCsxKS0xLENuPShjW0p0XXxjW0p0KzFdPDw4fGNbSnQrMl08PDE2KT4+''@;'; put 'put ''KDcmZCkmdm4sdG49KDE8PGR0KS0xLE1uPXZuLXYtMSxDcj1DbiZ0bjtpZihDcjxNbj8oZCs9ZHQsQ249Q3IpOihkKz1kdCsxLENuPnRuJiYoQ24tPU1uKSksYmVbKytNXT0tLUNuLC0xPT1Dbj8odis9Q24scnRbLS1yZV09TSk6di09Q24sIUNuKWRve3ZhciBHcj1kPj4zO0Q9KGNbR3JdfGNb''@;'; put 'put ''R3IrMV08PDgpPj4oNyZkKSYzLGQrPTIsTSs9RH13aGlsZSgzPT1EKX0oTT4yNTV8fHYpJiZlMCgwKTtmb3IodmFyIG1yPTAsR249KGY+PjEpKyhmPj4zKSszLGFpPWYtMSxfaT0wO19pPD1NOysrX2kpe3ZhciBPbj1iZVtfaV07aWYoT248MSlFZVtfaV09LU9uO2Vsc2UgZm9yKFo9MDtaPE9u''@;'; put 'put ''OysrWil7cnRbbXJdPV9pO2Rve21yPW1yK0duJmFpfXdoaWxlKG1yPj1yZSl9fWZvcihtciYmZTAoMCksWj0wO1o8ZjsrK1ope3ZhciB6cj1FZVtydFtaXV0rKyxKbj1wdFtaXT1oLXJ2KHpyKTtCZVtaXT0oenI8PEpuKS1mfXJldHVybltkKzc+PjMse2I6aCxzOnJ0LG46cHQsdDpCZX1dfSxE''@;'; put 'put ''eHQ9RkEobmV3IEl1KFs4MSwxNiw5OSwxNDAsNDksMTk4LDI0LDk5LDEyLDMzLDE5NiwyNCw5OSwxMDIsMTAyLDEzNCw3MCwxNDYsNF0pLDAsNilbMV0sSXh0PUZBKG5ldyBJdShbMzMsMjAsMTk2LDI0LDk5LDE0MCwzMywxMzIsMTYsNjYsOCwzMywxMzIsMTYsNjYsOCwzMyw2OCw2OCw2OCw2''@;'; put 'put ''OCw2OCw2OCw2OCw2OCwzNiw5XSksMCw2KVsxXSxSeHQ9RkEobmV3IEl1KFszMiwxMzIsMTYsNjYsMTAyLDcwLDY4LDY4LDY4LDY4LDM2LDczLDJdKSwwLDUpWzFdLG43ZT1mdW5jdGlvbihjLGwpe2Zvcih2YXIgYT1jLmxlbmd0aCxkPW5ldyBQTihhKSxoPTA7aDxhOysraClkW2hdPWwsbCs9''@;'; put 'put ''MTw8Y1toXTtyZXR1cm4gZH0sT3RlPW5ldyBJdShuZXcgUE4oWzAsMCwwLDAsMTY4NDMwMDksNTA1Mjg3NzAsMTM0Njc4MDIwLDIwMjA1MDA1NywyNjk0MjIwOTNdKS5idWZmZXIsMCwzNiksTHh0PW43ZShPdGUsMCksUHRlPW5ldyBJdShuZXcgUE4oWzAsMCwwLDAsMCwwLDAsMCwxNjg0MzAw''@;'; put 'put ''OSw1MDUyODc3MCwxMTc3NjkyMjAsMTg1MjA3MDQ4LDI1MjU3OTA4NCwxNl0pLmJ1ZmZlciwwLDUzKSxPeHQ9bjdlKFB0ZSwzKSxIQT1mdW5jdGlvbihjLGwsYSl7dmFyIGQ9Yy5sZW5ndGgsaD1sLmxlbmd0aCxmPWNbZC0xXSx2PSgxPDxhLmIpLTEsTT0tYS5iO2Z8fGUwKDApO2Zvcih2YXIg''@;'; put 'put ''RD0wLFo9YS5iLHJlPShkPDwzKS04K3J2KGYpLVosY2U9LTE7cmU+TSYmY2U8aDspe3ZhciBiZT1yZT4+MztsWysrY2VdPWEuc1tEPShEPDxafChjW2JlXXxjW2JlKzFdPDw4fGNbYmUrMl08PDE2KT4+KDcmcmUpKSZ2XSxyZS09Wj1hLm5bRF19KHJlIT1NfHxjZSsxIT1oKSYmZTAoMCl9LFB4''@;'; put 'put ''dD1mdW5jdGlvbihjLGwsYSl7dmFyIGQ9NixmPWwubGVuZ3RoKzM+PjIsdj1mPDwxLE09Zit2O0hBKGMuc3ViYXJyYXkoZCxkKz1jWzBdfGNbMV08PDgpLGwuc3ViYXJyYXkoMCxmKSxhKSxIQShjLnN1YmFycmF5KGQsZCs9Y1syXXxjWzNdPDw4KSxsLnN1YmFycmF5KGYsdiksYSksSEEoYy5z''@;'; put 'put ''dWJhcnJheShkLGQrPWNbNF18Y1s1XTw8OCksbC5zdWJhcnJheSh2LE0pLGEpLEhBKGMuc3ViYXJyYXkoZCksbC5zdWJhcnJheShNKSxhKX0sRnh0PWZ1bmN0aW9uKGMsbCxhKXt2YXIgZCxoPWwuYixmPWNbaF0sdj1mPj4xJjM7bC5sPTEmZjt2YXIgTT1mPj4zfGNbaCsxXTw8NXxjW2grMl08''@;'; put 'put ''PDEzLEQ9KGgrPTMpK007aWYoMT09dilyZXR1cm4gaD49Yy5sZW5ndGg/dm9pZCAwOihsLmI9aCsxLGE/KFBBKGEsY1toXSxsLnksbC55Kz1NKSxhKTpQQShuZXcgSXUoTSksY1toXSkpO2lmKCEoRD5jLmxlbmd0aCkpe2lmKDA9PXYpcmV0dXJuIGwuYj1ELGE/KGEuc2V0KGMuc3ViYXJyYXko''@;'; put 'put ''aCxEKSxsLnkpLGwueSs9TSxhKTpMdGUoYyxoLEQpO2lmKDI9PXYpe3ZhciBaPWNbaF0scmU9MyZaLGNlPVo+PjImMyxiZT1aPj40LEVlPTAsQmU9MDtyZTwyPzEmY2U/YmV8PWNbKytoXTw8NHwoMiZjZSYmY1srK2hdPDwxMik6YmU9Wj4+MzooQmU9Y2UsY2U8Mj8oYmV8PSg2MyZjWysraF0p''@;'; put 'put ''PDw0LEVlPWNbaF0+PjZ8Y1srK2hdPDwyKToyPT1jZT8oYmV8PWNbKytoXTw8NHwoMyZjWysraF0pPDwxMixFZT1jW2hdPj4yfGNbKytoXTw8Nik6KGJlfD1jWysraF08PDR8KDYzJmNbKytoXSk8PDEyLEVlPWNbaF0+PjZ8Y1srK2hdPDwyfGNbKytoXTw8MTApKSwrK2g7dmFyIHFlPWE/YS5z''@;'; put 'put ''dWJhcnJheShsLnksbC55K2wubSk6bmV3IEl1KGwubSkscnQ9cWUubGVuZ3RoLWJlO2lmKDA9PXJlKXFlLnNldChjLnN1YmFycmF5KGgsaCs9YmUpLHJ0KTtlbHNlIGlmKDE9PXJlKVBBKHFlLGNbaCsrXSxydCk7ZWxzZXt2YXIgcHQ9bC5oO2lmKDI9PXJlKXt2YXIgZHQ9ZnVuY3Rpb24oYyxs''@;'; put 'put ''KXt2YXIgYT0wLGQ9LTEsaD1uZXcgSXUoMjkyKSxmPWNbbF0sdj1oLnN1YmFycmF5KDAsMjU2KSxNPWguc3ViYXJyYXkoMjU2LDI2OCksRD1uZXcgT04oaC5idWZmZXIsMjY4KTtpZihmPDEyOCl7dmFyIFo9RkEoYyxsKzEsNiksY2U9WlsxXSxiZT1aWzBdPDwzLEVlPWNbbCs9Zl07RWV8fGUw''@;'; put 'put ''KDApO2Zvcih2YXIgQmU9MCxxZT0wLHJ0PWNlLmIscHQ9cnQsZHQ9KCsrbDw8MyktOCtydihFZSk7ISgoZHQtPXJ0KTxiZSk7KXt2YXIgSnQ9ZHQ+PjM7aWYodlsrK2RdPWNlLnNbQmUrPShjW0p0XXxjW0p0KzFdPDw4KT4+KDcmZHQpJigxPDxydCktMV0sKGR0LT1wdCk8YmUpYnJlYWs7dlsr''@;'; put 'put ''K2RdPWNlLnNbcWUrPShjW0p0PWR0Pj4zXXxjW0p0KzFdPDw4KT4+KDcmZHQpJigxPDxwdCktMV0scnQ9Y2UubltCZV0sQmU9Y2UudFtCZV0scHQ9Y2UubltxZV0scWU9Y2UudFtxZV19KytkPjI1NSYmZTAoMCl9ZWxzZXtmb3IoZD1mLTEyNzthPGQ7YSs9Mil7dmFyIHZuPWNbKytsXTt2W2Fd''@;'; put 'put ''PXZuPj40LHZbYSsxXT0xNSZ2bn0rK2x9dmFyIENuPTA7Zm9yKGE9MDthPGQ7KythKSh0bj12W2FdKT4xMSYmZTAoMCksQ24rPXRuJiYxPDx0bi0xO3ZhciBNbj1ydihDbikrMSxDcj0xPDxNbixHcj1Dci1Dbjtmb3IoR3ImR3ItMSYmZTAoMCksdltkKytdPXJ2KEdyKSsxLGE9MDthPGQ7Kyth''@;'; put 'put ''KXt2YXIgdG47KytNW3ZbYV09KHRuPXZbYV0pJiZNbisxLXRuXX12YXIgbXI9bmV3IEl1KENyPDwxKSxHbj1tci5zdWJhcnJheSgwLENyKSxhaT1tci5zdWJhcnJheShDcik7Zm9yKERbTW5dPTAsYT1NbjthPjA7LS1hKXt2YXIgX2k9RFthXTtQQShhaSxhLF9pLERbYS0xXT1faStNW2FdKigx''@;'; put 'put ''PDxNbi1hKSl9Zm9yKERbMF0hPUNyJiZlMCgwKSxhPTA7YTxkOysrYSl7dmFyIE9uPXZbYV07aWYoT24pe3ZhciB6cj1EW09uXTtQQShHbixhLHpyLERbT25dPXpyKygxPDxNbi1PbikpfX1yZXR1cm5bbCx7bjphaSxiOk1uLHM6R259XX0oYyxoKTtFZSs9aC0oaD1kdFswXSksbC5oPXB0PWR0''@;'; put 'put ''WzFdfWVsc2UgcHR8fGUwKDApOyhCZT9QeHQ6SEEpKGMuc3ViYXJyYXkoaCxoKz1FZSkscWUuc3ViYXJyYXkocnQpLHB0KX12YXIgSnQ9Y1toKytdO2lmKEp0KXsyNTU9PUp0P0p0PTMyNTEyKyhjW2grK118Y1toKytdPDw4KTpKdD4xMjcmJihKdD1KdC0xMjg8PDh8Y1toKytdKTt2YXIgdm49''@;'; put 'put ''Y1toKytdOzMmdm4mJmUwKDApO2Zvcih2YXIgQ249W0l4dCxSeHQsRHh0XSx0bj0yO3RuPi0xOy0tdG4pe3ZhciBNbj12bj4+MisodG48PDEpJjM7aWYoMT09TW4pe3ZhciBDcj1uZXcgSXUoWzAsMCxjW2grK11dKTtDblt0bl09e3M6Q3Iuc3ViYXJyYXkoMiwzKSxuOkNyLnN1YmFycmF5KDAs''@;'; put 'put ''MSksdDpuZXcgT04oQ3IuYnVmZmVyLDAsMSksYjowfX1lbHNlIDI9PU1uPyhoPShkPUZBKGMsaCw5LSgxJnRuKSkpWzBdLENuW3RuXT1kWzFdKTozPT1NbiYmKGwudHx8ZTAoMCksQ25bdG5dPWwudFt0bl0pfXZhciBHcj1sLnQ9Q24sbXI9R3JbMF0sR249R3JbMV0sYWk9R3JbMl0sX2k9Y1tE''@;'; put 'put ''LTFdO19pfHxlMCgwKTt2YXIgT249KEQ8PDMpLTgrcnYoX2kpLWFpLmIsenI9T24+PjMsSm49MCxEcj0oY1t6cl18Y1t6cisxXTw8OCk+Pig3Jk9uKSYoMTw8YWkuYiktMSwkcj0oY1t6cj0oT24tPUduLmIpPj4zXXxjW3pyKzFdPDw4KT4+KDcmT24pJigxPDxHbi5iKS0xLHdpPShjW3pyPShP''@;'; put 'put ''bi09bXIuYik+PjNdfGNbenIrMV08PDgpPj4oNyZPbikmKDE8PG1yLmIpLTE7Zm9yKCsrSnQ7LS1KdDspe3ZhciBlYT1haS5zW0RyXSxmYT1haS5uW0RyXSx2dD1tci5zW3dpXSxOdD1tci5uW3dpXSxIdD1Hbi5zWyRyXSxIbj1Hbi5uWyRyXSx0cj0xPDxIdCxhcj10cisoKGNbenI9KE9uLT1I''@;'; put 'put ''dCk+PjNdfGNbenIrMV08PDh8Y1t6cisyXTw8MTZ8Y1t6ciszXTw8MjQpPj4+KDcmT24pJnRyLTEpO3pyPShPbi09UHRlW3Z0XSk+PjM7dmFyIEhyPU94dFt2dF0rKChjW3pyXXxjW3pyKzFdPDw4fGNbenIrMl08PDE2KT4+KDcmT24pJigxPDxQdGVbdnRdKS0xKTt6cj0oT24tPU90ZVtlYV0p''@;'; put 'put ''Pj4zO3ZhciBxcj1MeHRbZWFdKygoY1t6cl18Y1t6cisxXTw8OHxjW3pyKzJdPDwxNik+Pig3Jk9uKSYoMTw8T3RlW2VhXSktMSk7aWYoenI9KE9uLT1mYSk+PjMsRHI9YWkudFtEcl0rKChjW3pyXXxjW3pyKzFdPDw4KT4+KDcmT24pJigxPDxmYSktMSksenI9KE9uLT1OdCk+PjMsd2k9bXIu''@;'; put 'put ''dFt3aV0rKChjW3pyXXxjW3pyKzFdPDw4KT4+KDcmT24pJigxPDxOdCktMSksenI9KE9uLT1Ibik+PjMsJHI9R24udFskcl0rKChjW3pyXXxjW3pyKzFdPDw4KT4+KDcmT24pJigxPDxIbiktMSksYXI+MylsLm9bMl09bC5vWzFdLGwub1sxXT1sLm9bMF0sbC5vWzBdPWFyLT0zO2Vsc2V7dmFy''@;'; put 'put ''IG9uPWFyLSgwIT1xcik7b24/KGFyPTM9PW9uP2wub1swXS0xOmwub1tvbl0sb24+MSYmKGwub1syXT1sLm9bMV0pLGwub1sxXT1sLm9bMF0sbC5vWzBdPWFyKTphcj1sLm9bMF19Zm9yKHRuPTA7dG48cXI7Kyt0bilxZVtKbit0bl09cWVbcnQrdG5dO3J0Kz1xcjt2YXIgeW49KEpuKz1xcikt''@;'; put 'put ''YXI7aWYoeW48MCl7dmFyIHBuPS15bixwcj1sLmUreW47Zm9yKHBuPkhyJiYocG49SHIpLHRuPTA7dG48cG47Kyt0bilxZVtKbit0bl09bC53W3ByK3RuXTtKbis9cG4sSHItPXBuLHluPTB9Zm9yKHRuPTA7dG48SHI7Kyt0bilxZVtKbit0bl09cWVbeW4rdG5dO0puKz1Icn1pZihKbiE9cnQp''@;'; put 'put ''Zm9yKDtydDxxZS5sZW5ndGg7KXFlW0puKytdPXFlW3J0KytdO2Vsc2UgSm49cWUubGVuZ3RoO2E/bC55Kz1KbjpxZT1MdGUocWUsMCxKbil9ZWxzZSBpZihhKXtpZihsLnkrPWJlLHJ0KWZvcih0bj0wO3RuPGJlOysrdG4pcWVbdG5dPXFlW3J0K3RuXX1lbHNlIHJ0JiYocWU9THRlKHFlLHJ0''@;'; put 'put ''KSk7cmV0dXJuIGwuYj1ELHFlfWUwKDIpfX0sQnh0PSh0eXBlb2YgZG9jdW1lbnQ8InUiJiZkb2N1bWVudCxmdW5jdGlvbihsPXt9KXt2YXIgaCxmLEJlLGQ9bCx2PW5ldyBQcm9taXNlKChaZSxsdCk9PntoPVplLGY9bHR9KSxEPU9iamVjdC5hc3NpZ24oe30sZCkscWU9Y29uc29sZS5sb2cu''@;'; put 'put ''YmluZChjb25zb2xlKSxydD1jb25zb2xlLmVycm9yLmJpbmQoY29uc29sZSk7T2JqZWN0LmFzc2lnbihkLEQpLEQ9bnVsbDt2YXIgZHQsdG4sTW4sQ3IsbXIsR24sX2kscHQ9ZC53YXNtQmluYXJ5LEp0PSExO2Z1bmN0aW9uIENuKFplLGx0KXtaZXx8cXIobHQpfWZ1bmN0aW9uIE9uKCl7dmFy''@;'; put 'put ''IFplPWR0LmJ1ZmZlcjtkLkhFQVA4PXRuPW5ldyBJbnQ4QXJyYXkoWmUpLGQuSEVBUDE2PUNyPW5ldyBJbnQxNkFycmF5KFplKSxkLkhFQVBVOD1Nbj1uZXcgVWludDhBcnJheShaZSksZC5IRUFQVTE2PW5ldyBVaW50MTZBcnJheShaZSksZC5IRUFQMzI9bXI9bmV3IEludDMyQXJyYXkoWmUp''@;'; put 'put ''LGQuSEVBUFUzMj1Hbj1uZXcgVWludDMyQXJyYXkoWmUpLGQuSEVBUEYzMj1uZXcgRmxvYXQzMkFycmF5KFplKSxkLkhFQVBGNjQ9X2k9bmV3IEZsb2F0NjRBcnJheShaZSl9dmFyIHpyPVtdLEpuPVtdLERyPVtdLE50PTAsSHQ9bnVsbCxIbj1udWxsO2Z1bmN0aW9uIGFyKFplKXtOdCsrfWZ1''@;'; put 'put ''bmN0aW9uIEhyKFplKXtpZigwPT0tLU50JiYobnVsbCE9PUh0JiYoY2xlYXJJbnRlcnZhbChIdCksSHQ9bnVsbCksSG4pKXt2YXIgbHQ9SG47SG49bnVsbCxsdCgpfX1mdW5jdGlvbiBxcihaZSl7cnQoWmU9IkFib3J0ZWQoIitaZSsiKSIpLEp0PSEwLFplKz0iLiBCdWlsZCB3aXRoIC1zQVNT''@;'; put 'put ''RVJUSU9OUyBmb3IgbW9yZSBpbmZvLiI7dmFyIGx0PW5ldyBXZWJBc3NlbWJseS5SdW50aW1lRXJyb3IoWmUpO3Rocm93IGYobHQpLGx0fXZhciAkbix5bj1aZT0+WmUuc3RhcnRzV2l0aCgiZGF0YTphcHBsaWNhdGlvbi9vY3RldC1zdHJlYW07YmFzZTY0LCIpO2Z1bmN0aW9uIGRyKFplKXtp''@;'; put 'put ''ZihaZT09JG4mJnB0KXJldHVybiBuZXcgVWludDhBcnJheShwdCk7aWYoQmUpcmV0dXJuIEJlKFplKTt0aHJvdyJib3RoIGFzeW5jIGFuZCBzeW5jIGZldGNoaW5nIG9mIHRoZSB3YXNtIGZhaWxlZCJ9ZnVuY3Rpb24gWm4oWmUsbHQsTHQpe3JldHVybiBmdW5jdGlvbiBVcihaZSl7cmV0dXJu''@;'; put 'put ''IHB0P1Byb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PmRyKFplKSk6KHZvaWQgMCkoWmUpLnRoZW4obHQ9Pm5ldyBVaW50OEFycmF5KGx0KSwoKT0+ZHIoWmUpKX0oWmUpLnRoZW4oJHQ9PldlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKCR0LGx0KSkudGhlbihMdCwkdD0+e3J0KGBmYWlsZWQgdG8g''@;'; put 'put ''YXN5bmNocm9ub3VzbHkgcHJlcGFyZSB3YXNtOiAkeyR0fWApLHFyKCR0KX0pfXZhciBacixhYSxCYT17MTczMDY0OihaZSxsdCk9Pnt2YXIgTHQ9djAoWmUpLCR0PXYwKGx0KTtZdC5jcmVhdGVQYXRoKCIvIixRby5kaXJuYW1lKEx0KSksWXQud3JpdGVGaWxlKFFvLmpvaW4oIi8iLEx0KSwk''@;'; put 'put ''dCl9fTtjbGFzcyBJb3tuYW1lPSJFeGl0U3RhdHVzIjtjb25zdHJ1Y3RvcihsdCl7dGhpcy5tZXNzYWdlPWBQcm9ncmFtIHRlcm1pbmF0ZWQgd2l0aCBleGl0KCR7bHR9KWAsdGhpcy5zdGF0dXM9bHR9fXZhciBabz1aZT0+e2Zvcig7WmUubGVuZ3RoPjA7KVplLnNoaWZ0KCkoZCl9O2NsYXNz''@;'; put 'put ''IHBze2NvbnN0cnVjdG9yKGx0KXt0aGlzLmV4Y1B0cj1sdCx0aGlzLnB0cj1sdC0yNH1zZXRfdHlwZShsdCl7R25bdGhpcy5wdHIrND4+Ml09bHR9Z2V0X3R5cGUoKXtyZXR1cm4gR25bdGhpcy5wdHIrND4+Ml19c2V0X2Rlc3RydWN0b3IobHQpe0duW3RoaXMucHRyKzg+PjJdPWx0fWdldF9k''@;'; put 'put ''ZXN0cnVjdG9yKCl7cmV0dXJuIEduW3RoaXMucHRyKzg+PjJdfXNldF9jYXVnaHQobHQpe3RuW3RoaXMucHRyKzEyXT1sdD1sdD8xOjB9Z2V0X2NhdWdodCgpe3JldHVybiAwIT10blt0aGlzLnB0cisxMl19c2V0X3JldGhyb3duKGx0KXt0blt0aGlzLnB0cisxM109bHQ9bHQ/MTowfWdldF9y''@;'; put 'put ''ZXRocm93bigpe3JldHVybiAwIT10blt0aGlzLnB0cisxM119aW5pdChsdCxMdCl7dGhpcy5zZXRfYWRqdXN0ZWRfcHRyKDApLHRoaXMuc2V0X3R5cGUobHQpLHRoaXMuc2V0X2Rlc3RydWN0b3IoTHQpfXNldF9hZGp1c3RlZF9wdHIobHQpe0duW3RoaXMucHRyKzE2Pj4yXT1sdH1nZXRfYWRq''@;'; put 'put ''dXN0ZWRfcHRyKCl7cmV0dXJuIEduW3RoaXMucHRyKzE2Pj4yXX19dmFyIFFvPXtpc0FiczpaZT0+Ii8iPT09WmUuY2hhckF0KDApLHNwbGl0UGF0aDpaZT0+L14oXC8/fCkoW1xzXFNdKj8pKCg/OlwuezEsMn18W15cL10rP3wpKFwuW14uXC9dKnwpKSg/OltcL10qKSQvLmV4ZWMoWmUpLnNs''@;'; put 'put ''aWNlKDEpLG5vcm1hbGl6ZUFycmF5OihaZSxsdCk9Pntmb3IodmFyIEx0PTAsJHQ9WmUubGVuZ3RoLTE7JHQ+PTA7JHQtLSl7dmFyIERuPVplWyR0XTsiLiI9PT1Ebj9aZS5zcGxpY2UoJHQsMSk6Ii4uIj09PURuPyhaZS5zcGxpY2UoJHQsMSksTHQrKyk6THQmJihaZS5zcGxpY2UoJHQsMSks''@;'; put 'put ''THQtLSl9aWYobHQpZm9yKDtMdDtMdC0tKVplLnVuc2hpZnQoIi4uIik7cmV0dXJuIFplfSxub3JtYWxpemU6WmU9Pnt2YXIgbHQ9UW8uaXNBYnMoWmUpLEx0PSIvIj09PVplLnN1YnN0cigtMSk7cmV0dXJuIShaZT1Rby5ub3JtYWxpemVBcnJheShaZS5zcGxpdCgiLyIpLmZpbHRlcigkdD0+''@;'; put 'put ''ISEkdCksIWx0KS5qb2luKCIvIikpJiYhbHQmJihaZT0iLiIpLFplJiZMdCYmKFplKz0iLyIpLChsdD8iLyI6IiIpK1plfSxkaXJuYW1lOlplPT57dmFyIGx0PVFvLnNwbGl0UGF0aChaZSksTHQ9bHRbMF0sJHQ9bHRbMV07cmV0dXJuIEx0fHwkdD8oJHQmJigkdD0kdC5zdWJzdHIoMCwkdC5s''@;'; put 'put ''ZW5ndGgtMSkpLEx0KyR0KToiLiJ9LGJhc2VuYW1lOlplPT57aWYoIi8iPT09WmUpcmV0dXJuIi8iO3ZhciBsdD0oWmU9KFplPVFvLm5vcm1hbGl6ZShaZSkpLnJlcGxhY2UoL1wvJC8sIiIpKS5sYXN0SW5kZXhPZigiLyIpO3JldHVybi0xPT09bHQ/WmU6WmUuc3Vic3RyKGx0KzEpfSxqb2lu''@;'; put 'put ''OiguLi5aZSk9PlFvLm5vcm1hbGl6ZShaZS5qb2luKCIvIikpLGpvaW4yOihaZSxsdCk9PlFvLm5vcm1hbGl6ZShaZSsiLyIrbHQpfSxhZD1aZT0+KGFkPSgoKT0+e2lmKCJvYmplY3QiPT10eXBlb2YgY3J5cHRvJiYiZnVuY3Rpb24iPT10eXBlb2YgY3J5cHRvLmdldFJhbmRvbVZhbHVlcyly''@;'; put 'put ''ZXR1cm4gWmU9PmNyeXB0by5nZXRSYW5kb21WYWx1ZXMoWmUpO3FyKCJpbml0UmFuZG9tRGV2aWNlIil9KSgpKShaZSksenM9e3Jlc29sdmU6KC4uLlplKT0+e2Zvcih2YXIgbHQ9IiIsTHQ9ITEsJHQ9WmUubGVuZ3RoLTE7JHQ+PS0xJiYhTHQ7JHQtLSl7dmFyIERuPSR0Pj0wP1plWyR0XTpZ''@;'; put 'put ''dC5jd2QoKTtpZigic3RyaW5nIiE9dHlwZW9mIERuKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50cyB0byBwYXRoLnJlc29sdmUgbXVzdCBiZSBzdHJpbmdzIik7aWYoIURuKXJldHVybiIiO2x0PURuKyIvIitsdCxMdD1Rby5pc0FicyhEbil9cmV0dXJuKEx0PyIvIjoiIikrKGx0PVFv''@;'; put 'put ''Lm5vcm1hbGl6ZUFycmF5KGx0LnNwbGl0KCIvIikuZmlsdGVyKGNyPT4hIWNyKSwhTHQpLmpvaW4oIi8iKSl8fCIuIn0scmVsYXRpdmU6KFplLGx0KT0+e2Z1bmN0aW9uIEx0KEdvKXtmb3IodmFyIEhzPTA7SHM8R28ubGVuZ3RoJiYiIj09PUdvW0hzXTtIcysrKTtmb3IodmFyIGFsPUdvLmxl''@;'; put 'put ''bmd0aC0xO2FsPj0wJiYiIj09PUdvW2FsXTthbC0tKTtyZXR1cm4gSHM+YWw/W106R28uc2xpY2UoSHMsYWwtSHMrMSl9WmU9enMucmVzb2x2ZShaZSkuc3Vic3RyKDEpLGx0PXpzLnJlc29sdmUobHQpLnN1YnN0cigxKTtmb3IodmFyICR0PUx0KFplLnNwbGl0KCIvIikpLERuPUx0KGx0LnNw''@;'; put 'put ''bGl0KCIvIikpLGNyPU1hdGgubWluKCR0Lmxlbmd0aCxEbi5sZW5ndGgpLFJyPWNyLFhyPTA7WHI8Y3I7WHIrKylpZigkdFtYcl0hPT1EbltYcl0pe1JyPVhyO2JyZWFrfXZhciBrYT1bXTtmb3IoWHI9UnI7WHI8JHQubGVuZ3RoO1hyKyspa2EucHVzaCgiLi4iKTtyZXR1cm4oa2E9a2EuY29u''@;'; put 'put ''Y2F0KERuLnNsaWNlKFJyKSkpLmpvaW4oIi8iKX19LEpjPXR5cGVvZiBUZXh0RGVjb2RlcjwidSI/bmV3IFRleHREZWNvZGVyOnZvaWQgMCxxcz0oWmUsbHQ9MCxMdD1OYU4pPT57Zm9yKHZhciAkdD1sdCtMdCxEbj1sdDtaZVtEbl0mJiEoRG4+PSR0KTspKytEbjtpZihEbi1sdD4xNiYmWmUu''@;'; put 'put ''YnVmZmVyJiZKYylyZXR1cm4gSmMuZGVjb2RlKFplLnN1YmFycmF5KGx0LERuKSk7Zm9yKHZhciBjcj0iIjtsdDxEbjspe3ZhciBScj1aZVtsdCsrXTtpZigxMjgmUnIpe3ZhciBYcj02MyZaZVtsdCsrXTtpZigxOTIhPSgyMjQmUnIpKXt2YXIga2E9NjMmWmVbbHQrK107aWYoKFJyPTIyND09''@;'; put 'put ''KDI0MCZScik/KDE1JlJyKTw8MTJ8WHI8PDZ8a2E6KDcmUnIpPDwxOHxYcjw8MTJ8a2E8PDZ8NjMmWmVbbHQrK10pPDY1NTM2KWNyKz1TdHJpbmcuZnJvbUNoYXJDb2RlKFJyKTtlbHNle3ZhciBHbz1Sci02NTUzNjtjcis9U3RyaW5nLmZyb21DaGFyQ29kZSg1NTI5NnxHbz4+MTAsNTYzMjB8''@;'; put 'put ''MTAyMyZHbyl9fWVsc2UgY3IrPVN0cmluZy5mcm9tQ2hhckNvZGUoKDMxJlJyKTw8NnxYcil9ZWxzZSBjcis9U3RyaW5nLmZyb21DaGFyQ29kZShScil9cmV0dXJuIGNyfSxCbD1bXSxlcz1aZT0+e2Zvcih2YXIgbHQ9MCxMdD0wO0x0PFplLmxlbmd0aDsrK0x0KXt2YXIgJHQ9WmUuY2hhckNv''@;'; put 'put ''ZGVBdChMdCk7JHQ8PTEyNz9sdCsrOiR0PD0yMDQ3P2x0Kz0yOiR0Pj01NTI5NiYmJHQ8PTU3MzQzPyhsdCs9NCwrK0x0KTpsdCs9M31yZXR1cm4gbHR9LEUxPShaZSxsdCxMdCwkdCk9PntpZighKCR0PjApKXJldHVybiAwO2Zvcih2YXIgRG49THQsY3I9THQrJHQtMSxScj0wO1JyPFplLmxl''@;'; put 'put ''bmd0aDsrK1JyKXt2YXIgWHI9WmUuY2hhckNvZGVBdChScik7aWYoWHI+PTU1Mjk2JiZYcjw9NTczNDMmJihYcj02NTUzNisoKDEwMjMmWHIpPDwxMCl8MTAyMyZaZS5jaGFyQ29kZUF0KCsrUnIpKSxYcjw9MTI3KXtpZihMdD49Y3IpYnJlYWs7bHRbTHQrK109WHJ9ZWxzZSBpZihYcjw9MjA0''@;'; put 'put ''Nyl7aWYoTHQrMT49Y3IpYnJlYWs7bHRbTHQrK109MTkyfFhyPj42LGx0W0x0KytdPTEyOHw2MyZYcn1lbHNlIGlmKFhyPD02NTUzNSl7aWYoTHQrMj49Y3IpYnJlYWs7bHRbTHQrK109MjI0fFhyPj4xMixsdFtMdCsrXT0xMjh8WHI+PjYmNjMsbHRbTHQrK109MTI4fDYzJlhyfWVsc2V7aWYo''@;'; put 'put ''THQrMz49Y3IpYnJlYWs7bHRbTHQrK109MjQwfFhyPj4xOCxsdFtMdCsrXT0xMjh8WHI+PjEyJjYzLGx0W0x0KytdPTEyOHxYcj4+NiY2MyxsdFtMdCsrXT0xMjh8NjMmWHJ9fXJldHVybiBsdFtMdF09MCxMdC1Ebn0sZDQ9e3R0eXM6W10saW5pdCgpe30sc2h1dGRvd24oKXt9LHJlZ2lzdGVy''@;'; put 'put ''KFplLGx0KXtkNC50dHlzW1plXT17aW5wdXQ6W10sb3V0cHV0OltdLG9wczpsdH0sWXQucmVnaXN0ZXJEZXZpY2UoWmUsZDQuc3RyZWFtX29wcyl9LHN0cmVhbV9vcHM6e29wZW4oWmUpe3ZhciBsdD1kNC50dHlzW1plLm5vZGUucmRldl07aWYoIWx0KXRocm93IG5ldyBZdC5FcnJub0Vycm9y''@;'; put 'put ''KDQzKTtaZS50dHk9bHQsWmUuc2Vla2FibGU9ITF9LGNsb3NlKFplKXtaZS50dHkub3BzLmZzeW5jKFplLnR0eSl9LGZzeW5jKFplKXtaZS50dHkub3BzLmZzeW5jKFplLnR0eSl9LHJlYWQoWmUsbHQsTHQsJHQsRG4pe2lmKCFaZS50dHl8fCFaZS50dHkub3BzLmdldF9jaGFyKXRocm93IG5l''@;'; put 'put ''dyBZdC5FcnJub0Vycm9yKDYwKTtmb3IodmFyIGNyPTAsUnI9MDtScjwkdDtScisrKXt2YXIgWHI7dHJ5e1hyPVplLnR0eS5vcHMuZ2V0X2NoYXIoWmUudHR5KX1jYXRjaHt0aHJvdyBuZXcgWXQuRXJybm9FcnJvcigyOSl9aWYodm9pZCAwPT09WHImJjA9PT1jcil0aHJvdyBuZXcgWXQuRXJy''@;'; put 'put ''bm9FcnJvcig2KTtpZihudWxsPT1YcilicmVhaztjcisrLGx0W0x0K1JyXT1Ycn1yZXR1cm4gY3ImJihaZS5ub2RlLnRpbWVzdGFtcD1EYXRlLm5vdygpKSxjcn0sd3JpdGUoWmUsbHQsTHQsJHQsRG4pe2lmKCFaZS50dHl8fCFaZS50dHkub3BzLnB1dF9jaGFyKXRocm93IG5ldyBZdC5FcnJu''@;'; put 'put ''b0Vycm9yKDYwKTt0cnl7Zm9yKHZhciBjcj0wO2NyPCR0O2NyKyspWmUudHR5Lm9wcy5wdXRfY2hhcihaZS50dHksbHRbTHQrY3JdKX1jYXRjaHt0aHJvdyBuZXcgWXQuRXJybm9FcnJvcigyOSl9cmV0dXJuICR0JiYoWmUubm9kZS50aW1lc3RhbXA9RGF0ZS5ub3coKSksY3J9fSxkZWZhdWx0''@;'; put 'put ''X3R0eV9vcHM6e2dldF9jaGFyOlplPT5CbC5sZW5ndGg/Qmwuc2hpZnQoKTpudWxsLHB1dF9jaGFyKFplLGx0KXtudWxsPT09bHR8fDEwPT09bHQ/KHFlKHFzKFplLm91dHB1dCkpLFplLm91dHB1dD1bXSk6MCE9bHQmJlplLm91dHB1dC5wdXNoKGx0KX0sZnN5bmMoWmUpe1plLm91dHB1dCYm''@;'; put 'put ''WmUub3V0cHV0Lmxlbmd0aD4wJiYocWUocXMoWmUub3V0cHV0KSksWmUub3V0cHV0PVtdKX0saW9jdGxfdGNnZXRzOlplPT4oe2NfaWZsYWc6MjU4NTYsY19vZmxhZzo1LGNfY2ZsYWc6MTkxLGNfbGZsYWc6MzUzODcsY19jYzpbMywyOCwxMjcsMjEsNCwwLDEsMCwxNywxOSwyNiwwLDE4LDE1''@;'; put 'put ''LDIzLDIyLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDBdfSksaW9jdGxfdGNzZXRzOihaZSxsdCxMdCk9PjAsaW9jdGxfdGlvY2d3aW5zejpaZT0+WzI0LDgwXX0sZGVmYXVsdF90dHkxX29wczp7cHV0X2NoYXIoWmUsbHQpe251bGw9PT1sdHx8MTA9PT1sdD8ocnQocXMoWmUub3V0''@;'; put 'put ''cHV0KSksWmUub3V0cHV0PVtdKTowIT1sdCYmWmUub3V0cHV0LnB1c2gobHQpfSxmc3luYyhaZSl7WmUub3V0cHV0JiZaZS5vdXRwdXQubGVuZ3RoPjAmJihydChxcyhaZS5vdXRwdXQpKSxaZS5vdXRwdXQ9W10pfX19LFZBPShaZSxsdCk9Pk1hdGguY2VpbChaZS9sdCkqbHQsVU49WmU9Pnta''@;'; put 'put ''ZT1WQShaZSw2NTUzNik7dmFyIGx0PVc3ZSg2NTUzNixaZSk7cmV0dXJuIGx0JiYoKFplLGx0KT0+e01uLmZpbGwoMCxaZSxaZStsdCl9KShsdCxaZSksbHR9LCRhPXtvcHNfdGFibGU6bnVsbCxtb3VudDpaZT0+JGEuY3JlYXRlTm9kZShudWxsLCIvIiwxNjg5NSwwKSxjcmVhdGVOb2RlKFpl''@;'; put 'put ''LGx0LEx0LCR0KXtpZihZdC5pc0Jsa2RldihMdCl8fFl0LmlzRklGTyhMdCkpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNjMpOyRhLm9wc190YWJsZXx8PXtkaXI6e25vZGU6e2dldGF0dHI6JGEubm9kZV9vcHMuZ2V0YXR0cixzZXRhdHRyOiRhLm5vZGVfb3BzLnNldGF0dHIsbG9va3VwOiRh''@;'; put 'put ''Lm5vZGVfb3BzLmxvb2t1cCxta25vZDokYS5ub2RlX29wcy5ta25vZCxyZW5hbWU6JGEubm9kZV9vcHMucmVuYW1lLHVubGluazokYS5ub2RlX29wcy51bmxpbmsscm1kaXI6JGEubm9kZV9vcHMucm1kaXIscmVhZGRpcjokYS5ub2RlX29wcy5yZWFkZGlyLHN5bWxpbms6JGEubm9kZV9vcHMu''@;'; put 'put ''c3ltbGlua30sc3RyZWFtOntsbHNlZWs6JGEuc3RyZWFtX29wcy5sbHNlZWt9fSxmaWxlOntub2RlOntnZXRhdHRyOiRhLm5vZGVfb3BzLmdldGF0dHIsc2V0YXR0cjokYS5ub2RlX29wcy5zZXRhdHRyfSxzdHJlYW06e2xsc2VlazokYS5zdHJlYW1fb3BzLmxsc2VlayxyZWFkOiRhLnN0cmVh''@;'; put 'put ''bV9vcHMucmVhZCx3cml0ZTokYS5zdHJlYW1fb3BzLndyaXRlLGFsbG9jYXRlOiRhLnN0cmVhbV9vcHMuYWxsb2NhdGUsbW1hcDokYS5zdHJlYW1fb3BzLm1tYXAsbXN5bmM6JGEuc3RyZWFtX29wcy5tc3luY319LGxpbms6e25vZGU6e2dldGF0dHI6JGEubm9kZV9vcHMuZ2V0YXR0cixzZXRh''@;'; put 'put ''dHRyOiRhLm5vZGVfb3BzLnNldGF0dHIscmVhZGxpbms6JGEubm9kZV9vcHMucmVhZGxpbmt9LHN0cmVhbTp7fX0sY2hyZGV2Ontub2RlOntnZXRhdHRyOiRhLm5vZGVfb3BzLmdldGF0dHIsc2V0YXR0cjokYS5ub2RlX29wcy5zZXRhdHRyfSxzdHJlYW06WXQuY2hyZGV2X3N0cmVhbV9vcHN9''@;'; put 'put ''fTt2YXIgRG49WXQuY3JlYXRlTm9kZShaZSxsdCxMdCwkdCk7cmV0dXJuIFl0LmlzRGlyKERuLm1vZGUpPyhEbi5ub2RlX29wcz0kYS5vcHNfdGFibGUuZGlyLm5vZGUsRG4uc3RyZWFtX29wcz0kYS5vcHNfdGFibGUuZGlyLnN0cmVhbSxEbi5jb250ZW50cz17fSk6WXQuaXNGaWxlKERuLm1v''@;'; put 'put ''ZGUpPyhEbi5ub2RlX29wcz0kYS5vcHNfdGFibGUuZmlsZS5ub2RlLERuLnN0cmVhbV9vcHM9JGEub3BzX3RhYmxlLmZpbGUuc3RyZWFtLERuLnVzZWRCeXRlcz0wLERuLmNvbnRlbnRzPW51bGwpOll0LmlzTGluayhEbi5tb2RlKT8oRG4ubm9kZV9vcHM9JGEub3BzX3RhYmxlLmxpbmsubm9k''@;'; put 'put ''ZSxEbi5zdHJlYW1fb3BzPSRhLm9wc190YWJsZS5saW5rLnN0cmVhbSk6WXQuaXNDaHJkZXYoRG4ubW9kZSkmJihEbi5ub2RlX29wcz0kYS5vcHNfdGFibGUuY2hyZGV2Lm5vZGUsRG4uc3RyZWFtX29wcz0kYS5vcHNfdGFibGUuY2hyZGV2LnN0cmVhbSksRG4udGltZXN0YW1wPURhdGUubm93''@;'; put 'put ''KCksWmUmJihaZS5jb250ZW50c1tsdF09RG4sWmUudGltZXN0YW1wPURuLnRpbWVzdGFtcCksRG59LGdldEZpbGVEYXRhQXNUeXBlZEFycmF5OlplPT5aZS5jb250ZW50cz9aZS5jb250ZW50cy5zdWJhcnJheT9aZS5jb250ZW50cy5zdWJhcnJheSgwLFplLnVzZWRCeXRlcyk6bmV3IFVpbnQ4''@;'; put 'put ''QXJyYXkoWmUuY29udGVudHMpOm5ldyBVaW50OEFycmF5KDApLGV4cGFuZEZpbGVTdG9yYWdlKFplLGx0KXt2YXIgTHQ9WmUuY29udGVudHM/WmUuY29udGVudHMubGVuZ3RoOjA7aWYoIShMdD49bHQpKXtsdD1NYXRoLm1heChsdCxMdCooTHQ8MTA0ODU3Nj8yOjEuMTI1KT4+PjApLDAhPUx0''@;'; put 'put ''JiYobHQ9TWF0aC5tYXgobHQsMjU2KSk7dmFyIERuPVplLmNvbnRlbnRzO1plLmNvbnRlbnRzPW5ldyBVaW50OEFycmF5KGx0KSxaZS51c2VkQnl0ZXM+MCYmWmUuY29udGVudHMuc2V0KERuLnN1YmFycmF5KDAsWmUudXNlZEJ5dGVzKSwwKX19LHJlc2l6ZUZpbGVTdG9yYWdlKFplLGx0KXtp''@;'; put 'put ''ZihaZS51c2VkQnl0ZXMhPWx0KWlmKDA9PWx0KVplLmNvbnRlbnRzPW51bGwsWmUudXNlZEJ5dGVzPTA7ZWxzZXt2YXIgTHQ9WmUuY29udGVudHM7WmUuY29udGVudHM9bmV3IFVpbnQ4QXJyYXkobHQpLEx0JiZaZS5jb250ZW50cy5zZXQoTHQuc3ViYXJyYXkoMCxNYXRoLm1pbihsdCxaZS51''@;'; put 'put ''c2VkQnl0ZXMpKSksWmUudXNlZEJ5dGVzPWx0fX0sbm9kZV9vcHM6e2dldGF0dHIoWmUpe3ZhciBsdD17fTtyZXR1cm4gbHQuZGV2PVl0LmlzQ2hyZGV2KFplLm1vZGUpP1plLmlkOjEsbHQuaW5vPVplLmlkLGx0Lm1vZGU9WmUubW9kZSxsdC5ubGluaz0xLGx0LnVpZD0wLGx0LmdpZD0wLGx0''@;'; put 'put ''LnJkZXY9WmUucmRldixsdC5zaXplPVl0LmlzRGlyKFplLm1vZGUpPzQwOTY6WXQuaXNGaWxlKFplLm1vZGUpP1plLnVzZWRCeXRlczpZdC5pc0xpbmsoWmUubW9kZSk/WmUubGluay5sZW5ndGg6MCxsdC5hdGltZT1uZXcgRGF0ZShaZS50aW1lc3RhbXApLGx0Lm10aW1lPW5ldyBEYXRlKFpl''@;'; put 'put ''LnRpbWVzdGFtcCksbHQuY3RpbWU9bmV3IERhdGUoWmUudGltZXN0YW1wKSxsdC5ibGtzaXplPTQwOTYsbHQuYmxvY2tzPU1hdGguY2VpbChsdC5zaXplL2x0LmJsa3NpemUpLGx0fSxzZXRhdHRyKFplLGx0KXt2b2lkIDAhPT1sdC5tb2RlJiYoWmUubW9kZT1sdC5tb2RlKSx2b2lkIDAhPT1s''@;'; put 'put ''dC50aW1lc3RhbXAmJihaZS50aW1lc3RhbXA9bHQudGltZXN0YW1wKSx2b2lkIDAhPT1sdC5zaXplJiYkYS5yZXNpemVGaWxlU3RvcmFnZShaZSxsdC5zaXplKX0sbG9va3VwKFplLGx0KXt0aHJvdyAkYS5kb2VzTm90RXhpc3RFcnJvcn0sbWtub2Q6KFplLGx0LEx0LCR0KT0+JGEuY3JlYXRl''@;'; put 'put ''Tm9kZShaZSxsdCxMdCwkdCkscmVuYW1lKFplLGx0LEx0KXtpZihZdC5pc0RpcihaZS5tb2RlKSl7dmFyICR0O3RyeXskdD1ZdC5sb29rdXBOb2RlKGx0LEx0KX1jYXRjaHt9aWYoJHQpZm9yKHZhciBEbiBpbiAkdC5jb250ZW50cyl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig1NSl9ZGVsZXRl''@;'; put 'put ''IFplLnBhcmVudC5jb250ZW50c1taZS5uYW1lXSxaZS5wYXJlbnQudGltZXN0YW1wPURhdGUubm93KCksWmUubmFtZT1MdCxsdC5jb250ZW50c1tMdF09WmUsbHQudGltZXN0YW1wPVplLnBhcmVudC50aW1lc3RhbXB9LHVubGluayhaZSxsdCl7ZGVsZXRlIFplLmNvbnRlbnRzW2x0XSxaZS50''@;'; put 'put ''aW1lc3RhbXA9RGF0ZS5ub3coKX0scm1kaXIoWmUsbHQpe3ZhciBMdD1ZdC5sb29rdXBOb2RlKFplLGx0KTtmb3IodmFyICR0IGluIEx0LmNvbnRlbnRzKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDU1KTtkZWxldGUgWmUuY29udGVudHNbbHRdLFplLnRpbWVzdGFtcD1EYXRlLm5vdygpfSxy''@;'; put 'put ''ZWFkZGlyKFplKXt2YXIgbHQ9WyIuIiwiLi4iXTtmb3IodmFyIEx0IG9mIE9iamVjdC5rZXlzKFplLmNvbnRlbnRzKSlsdC5wdXNoKEx0KTtyZXR1cm4gbHR9LHN5bWxpbmsoWmUsbHQsTHQpe3ZhciAkdD0kYS5jcmVhdGVOb2RlKFplLGx0LDQxNDcxLDApO3JldHVybiAkdC5saW5rPUx0LCR0''@;'; put 'put ''fSxyZWFkbGluayhaZSl7aWYoIVl0LmlzTGluayhaZS5tb2RlKSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcigyOCk7cmV0dXJuIFplLmxpbmt9fSxzdHJlYW1fb3BzOntyZWFkKFplLGx0LEx0LCR0LERuKXt2YXIgY3I9WmUubm9kZS5jb250ZW50cztpZihEbj49WmUubm9kZS51c2VkQnl0ZXMp''@;'; put 'put ''cmV0dXJuIDA7dmFyIFJyPU1hdGgubWluKFplLm5vZGUudXNlZEJ5dGVzLURuLCR0KTtpZihScj44JiZjci5zdWJhcnJheSlsdC5zZXQoY3Iuc3ViYXJyYXkoRG4sRG4rUnIpLEx0KTtlbHNlIGZvcih2YXIgWHI9MDtYcjxScjtYcisrKWx0W0x0K1hyXT1jcltEbitYcl07cmV0dXJuIFJyfSx3''@;'; put 'put ''cml0ZShaZSxsdCxMdCwkdCxEbixjcil7aWYobHQuYnVmZmVyPT09dG4uYnVmZmVyJiYoY3I9ITEpLCEkdClyZXR1cm4gMDt2YXIgUnI9WmUubm9kZTtpZihSci50aW1lc3RhbXA9RGF0ZS5ub3coKSxsdC5zdWJhcnJheSYmKCFSci5jb250ZW50c3x8UnIuY29udGVudHMuc3ViYXJyYXkpKXtp''@;'; put 'put ''ZihjcilyZXR1cm4gUnIuY29udGVudHM9bHQuc3ViYXJyYXkoTHQsTHQrJHQpLFJyLnVzZWRCeXRlcz0kdCwkdDtpZigwPT09UnIudXNlZEJ5dGVzJiYwPT09RG4pcmV0dXJuIFJyLmNvbnRlbnRzPWx0LnNsaWNlKEx0LEx0KyR0KSxSci51c2VkQnl0ZXM9JHQsJHQ7aWYoRG4rJHQ8PVJyLnVz''@;'; put 'put ''ZWRCeXRlcylyZXR1cm4gUnIuY29udGVudHMuc2V0KGx0LnN1YmFycmF5KEx0LEx0KyR0KSxEbiksJHR9aWYoJGEuZXhwYW5kRmlsZVN0b3JhZ2UoUnIsRG4rJHQpLFJyLmNvbnRlbnRzLnN1YmFycmF5JiZsdC5zdWJhcnJheSlSci5jb250ZW50cy5zZXQobHQuc3ViYXJyYXkoTHQsTHQrJHQp''@;'; put 'put ''LERuKTtlbHNlIGZvcih2YXIgWHI9MDtYcjwkdDtYcisrKVJyLmNvbnRlbnRzW0RuK1hyXT1sdFtMdCtYcl07cmV0dXJuIFJyLnVzZWRCeXRlcz1NYXRoLm1heChSci51c2VkQnl0ZXMsRG4rJHQpLCR0fSxsbHNlZWsoWmUsbHQsTHQpe3ZhciAkdD1sdDtpZigxPT09THQ/JHQrPVplLnBvc2l0''@;'; put 'put ''aW9uOjI9PT1MdCYmWXQuaXNGaWxlKFplLm5vZGUubW9kZSkmJigkdCs9WmUubm9kZS51c2VkQnl0ZXMpLCR0PDApdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoMjgpO3JldHVybiAkdH0sYWxsb2NhdGUoWmUsbHQsTHQpeyRhLmV4cGFuZEZpbGVTdG9yYWdlKFplLm5vZGUsbHQrTHQpLFplLm5v''@;'; put 'put ''ZGUudXNlZEJ5dGVzPU1hdGgubWF4KFplLm5vZGUudXNlZEJ5dGVzLGx0K0x0KX0sbW1hcChaZSxsdCxMdCwkdCxEbil7aWYoIVl0LmlzRmlsZShaZS5ub2RlLm1vZGUpKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDQzKTt2YXIgY3IsUnIsWHI9WmUubm9kZS5jb250ZW50cztpZigyJkRufHwh''@;'; put 'put ''WHJ8fFhyLmJ1ZmZlciE9PXRuLmJ1ZmZlcil7aWYoUnI9ITAsIShjcj1VTihsdCkpKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDQ4KTtYciYmKChMdD4wfHxMdCtsdDxYci5sZW5ndGgpJiYoWHI9WHIuc3ViYXJyYXk/WHIuc3ViYXJyYXkoTHQsTHQrbHQpOkFycmF5LnByb3RvdHlwZS5zbGlj''@;'; put 'put ''ZS5jYWxsKFhyLEx0LEx0K2x0KSksdG4uc2V0KFhyLGNyKSl9ZWxzZSBScj0hMSxjcj1Yci5ieXRlT2Zmc2V0O3JldHVybntwdHI6Y3IsYWxsb2NhdGVkOlJyfX0sbXN5bmM6KFplLGx0LEx0LCR0LERuKT0+KCRhLnN0cmVhbV9vcHMud3JpdGUoWmUsbHQsMCwkdCxMdCwhMSksMCl9fSxaTj1b''@;'; put 'put ''XSxqQT0oWmUsbHQpPT57dmFyIEx0PTA7cmV0dXJuIFplJiYoTHR8PTM2NSksbHQmJihMdHw9MTQ2KSxMdH0sWXQ9e3Jvb3Q6bnVsbCxtb3VudHM6W10sZGV2aWNlczp7fSxzdHJlYW1zOltdLG5leHRJbm9kZToxLG5hbWVUYWJsZTpudWxsLGN1cnJlbnRQYXRoOiIvIixpbml0aWFsaXplZDoh''@;'; put 'put ''MSxpZ25vcmVQZXJtaXNzaW9uczohMCxFcnJub0Vycm9yOmNsYXNze25hbWU9IkVycm5vRXJyb3IiO2NvbnN0cnVjdG9yKFplKXt0aGlzLmVycm5vPVplfX0sZmlsZXN5c3RlbXM6bnVsbCxzeW5jRlNSZXF1ZXN0czowLEZTU3RyZWFtOmNsYXNze3NoYXJlZD17fTtnZXQgb2JqZWN0KCl7cmV0''@;'; put 'put ''dXJuIHRoaXMubm9kZX1zZXQgb2JqZWN0KFplKXt0aGlzLm5vZGU9WmV9Z2V0IGlzUmVhZCgpe3JldHVybiAxIT0oMjA5NzE1NSZ0aGlzLmZsYWdzKX1nZXQgaXNXcml0ZSgpe3JldHVybiEhKDIwOTcxNTUmdGhpcy5mbGFncyl9Z2V0IGlzQXBwZW5kKCl7cmV0dXJuIDEwMjQmdGhpcy5mbGFn''@;'; put 'put ''c31nZXQgZmxhZ3MoKXtyZXR1cm4gdGhpcy5zaGFyZWQuZmxhZ3N9c2V0IGZsYWdzKFplKXt0aGlzLnNoYXJlZC5mbGFncz1aZX1nZXQgcG9zaXRpb24oKXtyZXR1cm4gdGhpcy5zaGFyZWQucG9zaXRpb259c2V0IHBvc2l0aW9uKFplKXt0aGlzLnNoYXJlZC5wb3NpdGlvbj1aZX19LEZTTm9k''@;'; put 'put ''ZTpjbGFzc3tub2RlX29wcz17fTtzdHJlYW1fb3BzPXt9O3JlYWRNb2RlPTM2NTt3cml0ZU1vZGU9MTQ2O21vdW50ZWQ9bnVsbDtjb25zdHJ1Y3RvcihaZSxsdCxMdCwkdCl7WmV8fChaZT10aGlzKSx0aGlzLnBhcmVudD1aZSx0aGlzLm1vdW50PVplLm1vdW50LHRoaXMuaWQ9WXQubmV4dElu''@;'; put 'put ''b2RlKyssdGhpcy5uYW1lPWx0LHRoaXMubW9kZT1MdCx0aGlzLnJkZXY9JHR9Z2V0IHJlYWQoKXtyZXR1cm4odGhpcy5tb2RlJnRoaXMucmVhZE1vZGUpPT09dGhpcy5yZWFkTW9kZX1zZXQgcmVhZChaZSl7WmU/dGhpcy5tb2RlfD10aGlzLnJlYWRNb2RlOnRoaXMubW9kZSY9fnRoaXMucmVh''@;'; put 'put ''ZE1vZGV9Z2V0IHdyaXRlKCl7cmV0dXJuKHRoaXMubW9kZSZ0aGlzLndyaXRlTW9kZSk9PT10aGlzLndyaXRlTW9kZX1zZXQgd3JpdGUoWmUpe1plP3RoaXMubW9kZXw9dGhpcy53cml0ZU1vZGU6dGhpcy5tb2RlJj1+dGhpcy53cml0ZU1vZGV9Z2V0IGlzRm9sZGVyKCl7cmV0dXJuIFl0Lmlz''@;'; put 'put ''RGlyKHRoaXMubW9kZSl9Z2V0IGlzRGV2aWNlKCl7cmV0dXJuIFl0LmlzQ2hyZGV2KHRoaXMubW9kZSl9fSxsb29rdXBQYXRoKFplLGx0PXt9KXtpZighKFplPXpzLnJlc29sdmUoWmUpKSlyZXR1cm57cGF0aDoiIixub2RlOm51bGx9O2lmKChsdD1PYmplY3QuYXNzaWduKHtmb2xsb3dfbW91''@;'; put 'put ''bnQ6ITAscmVjdXJzZV9jb3VudDowfSxsdCkpLnJlY3Vyc2VfY291bnQ+OCl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcigzMik7Zm9yKHZhciAkdD1aZS5zcGxpdCgiLyIpLmZpbHRlcihhbD0+ISFhbCksRG49WXQucm9vdCxjcj0iLyIsUnI9MDtScjwkdC5sZW5ndGg7UnIrKyl7dmFyIFhyPVJy''@;'; put 'put ''PT09JHQubGVuZ3RoLTE7aWYoWHImJmx0LnBhcmVudClicmVhaztpZihEbj1ZdC5sb29rdXBOb2RlKERuLCR0W1JyXSksY3I9UW8uam9pbjIoY3IsJHRbUnJdKSxZdC5pc01vdW50cG9pbnQoRG4pJiYoIVhyfHxYciYmbHQuZm9sbG93X21vdW50KSYmKERuPURuLm1vdW50ZWQucm9vdCksIVhy''@;'; put 'put ''fHxsdC5mb2xsb3cpZm9yKHZhciBrYT0wO1l0LmlzTGluayhEbi5tb2RlKTspe3ZhciBHbz1ZdC5yZWFkbGluayhjcik7aWYoY3I9enMucmVzb2x2ZShRby5kaXJuYW1lKGNyKSxHbyksRG49WXQubG9va3VwUGF0aChjcix7cmVjdXJzZV9jb3VudDpsdC5yZWN1cnNlX2NvdW50KzF9KS5ub2Rl''@;'; put 'put ''LGthKys+NDApdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoMzIpfX1yZXR1cm57cGF0aDpjcixub2RlOkRufX0sZ2V0UGF0aChaZSl7Zm9yKHZhciBsdDs7KXtpZihZdC5pc1Jvb3QoWmUpKXt2YXIgTHQ9WmUubW91bnQubW91bnRwb2ludDtyZXR1cm4gbHQ/Ii8iIT09THRbTHQubGVuZ3RoLTFd''@;'; put 'put ''P2Ake0x0fS8ke2x0fWA6THQrbHQ6THR9bHQ9bHQ/YCR7WmUubmFtZX0vJHtsdH1gOlplLm5hbWUsWmU9WmUucGFyZW50fX0saGFzaE5hbWUoWmUsbHQpe2Zvcih2YXIgTHQ9MCwkdD0wOyR0PGx0Lmxlbmd0aDskdCsrKUx0PShMdDw8NSktTHQrbHQuY2hhckNvZGVBdCgkdCl8MDtyZXR1cm4o''@;'; put 'put ''WmUrTHQ+Pj4wKSVZdC5uYW1lVGFibGUubGVuZ3RofSxoYXNoQWRkTm9kZShaZSl7dmFyIGx0PVl0Lmhhc2hOYW1lKFplLnBhcmVudC5pZCxaZS5uYW1lKTtaZS5uYW1lX25leHQ9WXQubmFtZVRhYmxlW2x0XSxZdC5uYW1lVGFibGVbbHRdPVplfSxoYXNoUmVtb3ZlTm9kZShaZSl7dmFyIGx0''@;'; put 'put ''PVl0Lmhhc2hOYW1lKFplLnBhcmVudC5pZCxaZS5uYW1lKTtpZihZdC5uYW1lVGFibGVbbHRdPT09WmUpWXQubmFtZVRhYmxlW2x0XT1aZS5uYW1lX25leHQ7ZWxzZSBmb3IodmFyIEx0PVl0Lm5hbWVUYWJsZVtsdF07THQ7KXtpZihMdC5uYW1lX25leHQ9PT1aZSl7THQubmFtZV9uZXh0PVpl''@;'; put 'put ''Lm5hbWVfbmV4dDticmVha31MdD1MdC5uYW1lX25leHR9fSxsb29rdXBOb2RlKFplLGx0KXt2YXIgTHQ9WXQubWF5TG9va3VwKFplKTtpZihMdCl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcihMdCk7Zm9yKHZhciAkdD1ZdC5oYXNoTmFtZShaZS5pZCxsdCksRG49WXQubmFtZVRhYmxlWyR0XTtE''@;'; put 'put ''bjtEbj1Ebi5uYW1lX25leHQpaWYoRG4ucGFyZW50LmlkPT09WmUuaWQmJkRuLm5hbWU9PT1sdClyZXR1cm4gRG47cmV0dXJuIFl0Lmxvb2t1cChaZSxsdCl9LGNyZWF0ZU5vZGUoWmUsbHQsTHQsJHQpe3ZhciBEbj1uZXcgWXQuRlNOb2RlKFplLGx0LEx0LCR0KTtyZXR1cm4gWXQuaGFzaEFk''@;'; put 'put ''ZE5vZGUoRG4pLERufSxkZXN0cm95Tm9kZShaZSl7WXQuaGFzaFJlbW92ZU5vZGUoWmUpfSxpc1Jvb3Q6WmU9PlplPT09WmUucGFyZW50LGlzTW91bnRwb2ludDpaZT0+ISFaZS5tb3VudGVkLGlzRmlsZTpaZT0+MzI3Njg9PSg2MTQ0MCZaZSksaXNEaXI6WmU9PjE2Mzg0PT0oNjE0NDAmWmUp''@;'; put 'put ''LGlzTGluazpaZT0+NDA5NjA9PSg2MTQ0MCZaZSksaXNDaHJkZXY6WmU9PjgxOTI9PSg2MTQ0MCZaZSksaXNCbGtkZXY6WmU9PjI0NTc2PT0oNjE0NDAmWmUpLGlzRklGTzpaZT0+NDA5Nj09KDYxNDQwJlplKSxpc1NvY2tldDpaZT0+ISg0OTE1MiZ+WmUpLGZsYWdzVG9QZXJtaXNzaW9uU3Ry''@;'; put 'put ''aW5nKFplKXt2YXIgbHQ9WyJyIiwidyIsInJ3Il1bMyZaZV07cmV0dXJuIDUxMiZaZSYmKGx0Kz0idyIpLGx0fSxub2RlUGVybWlzc2lvbnM6KFplLGx0KT0+WXQuaWdub3JlUGVybWlzc2lvbnM/MDpsdC5pbmNsdWRlcygiciIpJiYhKDI5MiZaZS5tb2RlKXx8bHQuaW5jbHVkZXMoInciKSYm''@;'; put 'put ''ISgxNDYmWmUubW9kZSl8fGx0LmluY2x1ZGVzKCJ4IikmJiEoNzMmWmUubW9kZSk/MjowLG1heUxvb2t1cDpaZT0+WXQuaXNEaXIoWmUubW9kZSk/WXQubm9kZVBlcm1pc3Npb25zKFplLCJ4Iil8fChaZS5ub2RlX29wcy5sb29rdXA/MDoyKTo1NCxtYXlDcmVhdGUoWmUsbHQpe3RyeXtyZXR1''@;'; put 'put ''cm4gWXQubG9va3VwTm9kZShaZSxsdCksMjB9Y2F0Y2h7fXJldHVybiBZdC5ub2RlUGVybWlzc2lvbnMoWmUsInd4Iil9LG1heURlbGV0ZShaZSxsdCxMdCl7dmFyICR0O3RyeXskdD1ZdC5sb29rdXBOb2RlKFplLGx0KX1jYXRjaChjcil7cmV0dXJuIGNyLmVycm5vfXZhciBEbj1ZdC5ub2Rl''@;'; put 'put ''UGVybWlzc2lvbnMoWmUsInd4Iik7aWYoRG4pcmV0dXJuIERuO2lmKEx0KXtpZighWXQuaXNEaXIoJHQubW9kZSkpcmV0dXJuIDU0O2lmKFl0LmlzUm9vdCgkdCl8fFl0LmdldFBhdGgoJHQpPT09WXQuY3dkKCkpcmV0dXJuIDEwfWVsc2UgaWYoWXQuaXNEaXIoJHQubW9kZSkpcmV0dXJuIDMx''@;'; put 'put ''O3JldHVybiAwfSxtYXlPcGVuOihaZSxsdCk9PlplP1l0LmlzTGluayhaZS5tb2RlKT8zMjpZdC5pc0RpcihaZS5tb2RlKSYmKCJyIiE9PVl0LmZsYWdzVG9QZXJtaXNzaW9uU3RyaW5nKGx0KXx8NTEyJmx0KT8zMTpZdC5ub2RlUGVybWlzc2lvbnMoWmUsWXQuZmxhZ3NUb1Blcm1pc3Npb25T''@;'; put 'put ''dHJpbmcobHQpKTo0NCxNQVhfT1BFTl9GRFM6NDA5NixuZXh0ZmQoKXtmb3IodmFyIFplPTA7WmU8PVl0Lk1BWF9PUEVOX0ZEUztaZSsrKWlmKCFZdC5zdHJlYW1zW1plXSlyZXR1cm4gWmU7dGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoMzMpfSxnZXRTdHJlYW1DaGVja2VkKFplKXt2YXIgbHQ9''@;'; put 'put ''WXQuZ2V0U3RyZWFtKFplKTtpZighbHQpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoOCk7cmV0dXJuIGx0fSxnZXRTdHJlYW06WmU9Pll0LnN0cmVhbXNbWmVdLGNyZWF0ZVN0cmVhbTooWmUsbHQ9LTEpPT4oWmU9T2JqZWN0LmFzc2lnbihuZXcgWXQuRlNTdHJlYW0sWmUpLC0xPT1sdCYmKGx0''@;'; put 'put ''PVl0Lm5leHRmZCgpKSxaZS5mZD1sdCxZdC5zdHJlYW1zW2x0XT1aZSxaZSksY2xvc2VTdHJlYW0oWmUpe1l0LnN0cmVhbXNbWmVdPW51bGx9LGR1cFN0cmVhbShaZSxsdD0tMSl7dmFyIEx0PVl0LmNyZWF0ZVN0cmVhbShaZSxsdCk7cmV0dXJuIEx0LnN0cmVhbV9vcHM/LmR1cD8uKEx0KSxM''@;'; put 'put ''dH0sY2hyZGV2X3N0cmVhbV9vcHM6e29wZW4oWmUpe3ZhciBsdD1ZdC5nZXREZXZpY2UoWmUubm9kZS5yZGV2KTtaZS5zdHJlYW1fb3BzPWx0LnN0cmVhbV9vcHMsWmUuc3RyZWFtX29wcy5vcGVuPy4oWmUpfSxsbHNlZWsoKXt0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig3MCl9fSxtYWpvcjpa''@;'; put 'put ''ZT0+WmU+PjgsbWlub3I6WmU9PjI1NSZaZSxtYWtlZGV2OihaZSxsdCk9PlplPDw4fGx0LHJlZ2lzdGVyRGV2aWNlKFplLGx0KXtZdC5kZXZpY2VzW1plXT17c3RyZWFtX29wczpsdH19LGdldERldmljZTpaZT0+WXQuZGV2aWNlc1taZV0sZ2V0TW91bnRzKFplKXtmb3IodmFyIGx0PVtdLEx0''@;'; put 'put ''PVtaZV07THQubGVuZ3RoOyl7dmFyICR0PUx0LnBvcCgpO2x0LnB1c2goJHQpLEx0LnB1c2goLi4uJHQubW91bnRzKX1yZXR1cm4gbHR9LHN5bmNmcyhaZSxsdCl7ImZ1bmN0aW9uIj09dHlwZW9mIFplJiYobHQ9WmUsWmU9ITEpLFl0LnN5bmNGU1JlcXVlc3RzKyssWXQuc3luY0ZTUmVxdWVz''@;'; put 'put ''dHM+MSYmcnQoYHdhcm5pbmc6ICR7WXQuc3luY0ZTUmVxdWVzdHN9IEZTLnN5bmNmcyBvcGVyYXRpb25zIGluIGZsaWdodCBhdCBvbmNlLCBwcm9iYWJseSBqdXN0IGRvaW5nIGV4dHJhIHdvcmtgKTt2YXIgTHQ9WXQuZ2V0TW91bnRzKFl0LnJvb3QubW91bnQpLCR0PTA7ZnVuY3Rpb24gRG4o''@;'; put 'put ''UnIpe3JldHVybiBZdC5zeW5jRlNSZXF1ZXN0cy0tLGx0KFJyKX1mdW5jdGlvbiBjcihScil7aWYoUnIpcmV0dXJuIGNyLmVycm9yZWQ/dm9pZCAwOihjci5lcnJvcmVkPSEwLERuKFJyKSk7KyskdD49THQubGVuZ3RoJiZEbihudWxsKX1MdC5mb3JFYWNoKFJyPT57aWYoIVJyLnR5cGUuc3lu''@;'; put 'put ''Y2ZzKXJldHVybiBjcihudWxsKTtSci50eXBlLnN5bmNmcyhScixaZSxjcil9KX0sbW91bnQoWmUsbHQsTHQpe3ZhciBjciwkdD0iLyI9PT1MdCxEbj0hTHQ7aWYoJHQmJll0LnJvb3QpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoMTApO2lmKCEkdCYmIURuKXt2YXIgUnI9WXQubG9va3VwUGF0''@;'; put 'put ''aChMdCx7Zm9sbG93X21vdW50OiExfSk7aWYoTHQ9UnIucGF0aCxZdC5pc01vdW50cG9pbnQoY3I9UnIubm9kZSkpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoMTApO2lmKCFZdC5pc0Rpcihjci5tb2RlKSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig1NCl9dmFyIFhyPXt0eXBlOlplLG9wdHM6''@;'; put 'put ''bHQsbW91bnRwb2ludDpMdCxtb3VudHM6W119LGthPVplLm1vdW50KFhyKTtyZXR1cm4ga2EubW91bnQ9WHIsWHIucm9vdD1rYSwkdD9ZdC5yb290PWthOmNyJiYoY3IubW91bnRlZD1Ycixjci5tb3VudCYmY3IubW91bnQubW91bnRzLnB1c2goWHIpKSxrYX0sdW5tb3VudChaZSl7dmFyIGx0''@;'; put 'put ''PVl0Lmxvb2t1cFBhdGgoWmUse2ZvbGxvd19tb3VudDohMX0pO2lmKCFZdC5pc01vdW50cG9pbnQobHQubm9kZSkpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoMjgpO3ZhciBMdD1sdC5ub2RlLCR0PUx0Lm1vdW50ZWQsRG49WXQuZ2V0TW91bnRzKCR0KTtPYmplY3Qua2V5cyhZdC5uYW1lVGFi''@;'; put 'put ''bGUpLmZvckVhY2goUnI9Pntmb3IodmFyIFhyPVl0Lm5hbWVUYWJsZVtScl07WHI7KXt2YXIga2E9WHIubmFtZV9uZXh0O0RuLmluY2x1ZGVzKFhyLm1vdW50KSYmWXQuZGVzdHJveU5vZGUoWHIpLFhyPWthfX0pLEx0Lm1vdW50ZWQ9bnVsbDt2YXIgY3I9THQubW91bnQubW91bnRzLmluZGV4''@;'; put 'put ''T2YoJHQpO0x0Lm1vdW50Lm1vdW50cy5zcGxpY2UoY3IsMSl9LGxvb2t1cDooWmUsbHQpPT5aZS5ub2RlX29wcy5sb29rdXAoWmUsbHQpLG1rbm9kKFplLGx0LEx0KXt2YXIgRG49WXQubG9va3VwUGF0aChaZSx7cGFyZW50OiEwfSkubm9kZSxjcj1Rby5iYXNlbmFtZShaZSk7aWYoIWNyfHwi''@;'; put 'put ''LiI9PT1jcnx8Ii4uIj09PWNyKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDI4KTt2YXIgUnI9WXQubWF5Q3JlYXRlKERuLGNyKTtpZihScil0aHJvdyBuZXcgWXQuRXJybm9FcnJvcihScik7aWYoIURuLm5vZGVfb3BzLm1rbm9kKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDYzKTtyZXR1cm4g''@;'; put 'put ''RG4ubm9kZV9vcHMubWtub2QoRG4sY3IsbHQsTHQpfSxzdGF0ZnMoWmUpe3ZhciBsdD17YnNpemU6NDA5NixmcnNpemU6NDA5NixibG9ja3M6MWU2LGJmcmVlOjVlNSxiYXZhaWw6NWU1LGZpbGVzOll0Lm5leHRJbm9kZSxmZnJlZTpZdC5uZXh0SW5vZGUtMSxmc2lkOjQyLGZsYWdzOjIsbmFt''@;'; put 'put ''ZWxlbjoyNTV9LEx0PVl0Lmxvb2t1cFBhdGgoWmUse2ZvbGxvdzohMH0pLm5vZGU7cmV0dXJuIEx0Py5ub2RlX29wcy5zdGF0ZnMmJk9iamVjdC5hc3NpZ24obHQsTHQubm9kZV9vcHMuc3RhdGZzKEx0Lm1vdW50Lm9wdHMucm9vdCkpLGx0fSxjcmVhdGU6KFplLGx0PTQzOCk9PihsdCY9NDA5''@;'; put 'put ''NSxZdC5ta25vZChaZSxsdHw9MzI3NjgsMCkpLG1rZGlyOihaZSxsdD01MTEpPT4obHQmPTEwMjMsWXQubWtub2QoWmUsbHR8PTE2Mzg0LDApKSxta2RpclRyZWUoWmUsbHQpe2Zvcih2YXIgTHQ9WmUuc3BsaXQoIi8iKSwkdD0iIixEbj0wO0RuPEx0Lmxlbmd0aDsrK0RuKWlmKEx0W0RuXSl7''@;'; put 'put ''JHQrPSIvIitMdFtEbl07dHJ5e1l0Lm1rZGlyKCR0LGx0KX1jYXRjaChjcil7aWYoMjAhPWNyLmVycm5vKXRocm93IGNyfX19LG1rZGV2OihaZSxsdCxMdCk9Pih0eXBlb2YgTHQ+InUiJiYoTHQ9bHQsbHQ9NDM4KSxZdC5ta25vZChaZSxsdHw9ODE5MixMdCkpLHN5bWxpbmsoWmUsbHQpe2lm''@;'; put 'put ''KCF6cy5yZXNvbHZlKFplKSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig0NCk7dmFyICR0PVl0Lmxvb2t1cFBhdGgobHQse3BhcmVudDohMH0pLm5vZGU7aWYoISR0KXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDQ0KTt2YXIgRG49UW8uYmFzZW5hbWUobHQpLGNyPVl0Lm1heUNyZWF0ZSgkdCxE''@;'; put 'put ''bik7aWYoY3IpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoY3IpO2lmKCEkdC5ub2RlX29wcy5zeW1saW5rKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDYzKTtyZXR1cm4gJHQubm9kZV9vcHMuc3ltbGluaygkdCxEbixaZSl9LHJlbmFtZShaZSxsdCl7dmFyIFhyLGthLEx0PVFvLmRpcm5hbWUo''@;'; put 'put ''WmUpLCR0PVFvLmRpcm5hbWUobHQpLERuPVFvLmJhc2VuYW1lKFplKSxjcj1Rby5iYXNlbmFtZShsdCk7aWYoWHI9WXQubG9va3VwUGF0aChaZSx7cGFyZW50OiEwfSkubm9kZSxrYT1ZdC5sb29rdXBQYXRoKGx0LHtwYXJlbnQ6ITB9KS5ub2RlLCFYcnx8IWthKXRocm93IG5ldyBZdC5FcnJu''@;'; put 'put ''b0Vycm9yKDQ0KTtpZihYci5tb3VudCE9PWthLm1vdW50KXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDc1KTt2YXIgYWwsR289WXQubG9va3VwTm9kZShYcixEbiksSHM9enMucmVsYXRpdmUoWmUsJHQpO2lmKCIuIiE9PUhzLmNoYXJBdCgwKSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcigyOCk7''@;'; put 'put ''aWYoIi4iIT09KEhzPXpzLnJlbGF0aXZlKGx0LEx0KSkuY2hhckF0KDApKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDU1KTt0cnl7YWw9WXQubG9va3VwTm9kZShrYSxjcil9Y2F0Y2h7fWlmKEdvIT09YWwpe3ZhciBncz1ZdC5pc0RpcihHby5tb2RlKSx4bz1ZdC5tYXlEZWxldGUoWHIsRG4s''@;'; put 'put ''Z3MpO2lmKHhvKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKHhvKTtpZih4bz1hbD9ZdC5tYXlEZWxldGUoa2EsY3IsZ3MpOll0Lm1heUNyZWF0ZShrYSxjcikpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoeG8pO2lmKCFYci5ub2RlX29wcy5yZW5hbWUpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3Io''@;'; put 'put ''NjMpO2lmKFl0LmlzTW91bnRwb2ludChHbyl8fGFsJiZZdC5pc01vdW50cG9pbnQoYWwpKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDEwKTtpZihrYSE9PVhyJiYoeG89WXQubm9kZVBlcm1pc3Npb25zKFhyLCJ3IikpKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKHhvKTtZdC5oYXNoUmVtb3Zl''@;'; put 'put ''Tm9kZShHbyk7dHJ5e1hyLm5vZGVfb3BzLnJlbmFtZShHbyxrYSxjciksR28ucGFyZW50PWthfWNhdGNoKFhzKXt0aHJvdyBYc31maW5hbGx5e1l0Lmhhc2hBZGROb2RlKEdvKX19fSxybWRpcihaZSl7dmFyIEx0PVl0Lmxvb2t1cFBhdGgoWmUse3BhcmVudDohMH0pLm5vZGUsJHQ9UW8uYmFz''@;'; put 'put ''ZW5hbWUoWmUpLERuPVl0Lmxvb2t1cE5vZGUoTHQsJHQpLGNyPVl0Lm1heURlbGV0ZShMdCwkdCwhMCk7aWYoY3IpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoY3IpO2lmKCFMdC5ub2RlX29wcy5ybWRpcil0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig2Myk7aWYoWXQuaXNNb3VudHBvaW50KERu''@;'; put 'put ''KSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcigxMCk7THQubm9kZV9vcHMucm1kaXIoTHQsJHQpLFl0LmRlc3Ryb3lOb2RlKERuKX0scmVhZGRpcihaZSl7dmFyIEx0PVl0Lmxvb2t1cFBhdGgoWmUse2ZvbGxvdzohMH0pLm5vZGU7aWYoIUx0Lm5vZGVfb3BzLnJlYWRkaXIpdGhyb3cgbmV3IFl0''@;'; put 'put ''LkVycm5vRXJyb3IoNTQpO3JldHVybiBMdC5ub2RlX29wcy5yZWFkZGlyKEx0KX0sdW5saW5rKFplKXt2YXIgTHQ9WXQubG9va3VwUGF0aChaZSx7cGFyZW50OiEwfSkubm9kZTtpZighTHQpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNDQpO3ZhciAkdD1Rby5iYXNlbmFtZShaZSksRG49WXQu''@;'; put 'put ''bG9va3VwTm9kZShMdCwkdCksY3I9WXQubWF5RGVsZXRlKEx0LCR0LCExKTtpZihjcil0aHJvdyBuZXcgWXQuRXJybm9FcnJvcihjcik7aWYoIUx0Lm5vZGVfb3BzLnVubGluayl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig2Myk7aWYoWXQuaXNNb3VudHBvaW50KERuKSl0aHJvdyBuZXcgWXQu''@;'; put 'put ''RXJybm9FcnJvcigxMCk7THQubm9kZV9vcHMudW5saW5rKEx0LCR0KSxZdC5kZXN0cm95Tm9kZShEbil9LHJlYWRsaW5rKFplKXt2YXIgTHQ9WXQubG9va3VwUGF0aChaZSkubm9kZTtpZighTHQpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNDQpO2lmKCFMdC5ub2RlX29wcy5yZWFkbGluayl0''@;'; put 'put ''aHJvdyBuZXcgWXQuRXJybm9FcnJvcigyOCk7cmV0dXJuIEx0Lm5vZGVfb3BzLnJlYWRsaW5rKEx0KX0sc3RhdChaZSxsdCl7dmFyICR0PVl0Lmxvb2t1cFBhdGgoWmUse2ZvbGxvdzohbHR9KS5ub2RlO2lmKCEkdCl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig0NCk7aWYoISR0Lm5vZGVfb3Bz''@;'; put 'put ''LmdldGF0dHIpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNjMpO3JldHVybiAkdC5ub2RlX29wcy5nZXRhdHRyKCR0KX0sbHN0YXQ6WmU9Pll0LnN0YXQoWmUsITApLGNobW9kKFplLGx0LEx0KXt2YXIgJHQ7aWYoISgkdD0ic3RyaW5nIj09dHlwZW9mIFplP1l0Lmxvb2t1cFBhdGgoWmUse2Zv''@;'; put 'put ''bGxvdzohTHR9KS5ub2RlOlplKS5ub2RlX29wcy5zZXRhdHRyKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDYzKTskdC5ub2RlX29wcy5zZXRhdHRyKCR0LHttb2RlOjQwOTUmbHR8LTQwOTYmJHQubW9kZSx0aW1lc3RhbXA6RGF0ZS5ub3coKX0pfSxsY2htb2QoWmUsbHQpe1l0LmNobW9kKFpl''@;'; put 'put ''LGx0LCEwKX0sZmNobW9kKFplLGx0KXt2YXIgTHQ9WXQuZ2V0U3RyZWFtQ2hlY2tlZChaZSk7WXQuY2htb2QoTHQubm9kZSxsdCl9LGNob3duKFplLGx0LEx0LCR0KXt2YXIgRG47aWYoIShEbj0ic3RyaW5nIj09dHlwZW9mIFplP1l0Lmxvb2t1cFBhdGgoWmUse2ZvbGxvdzohJHR9KS5ub2Rl''@;'; put 'put ''OlplKS5ub2RlX29wcy5zZXRhdHRyKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDYzKTtEbi5ub2RlX29wcy5zZXRhdHRyKERuLHt0aW1lc3RhbXA6RGF0ZS5ub3coKX0pfSxsY2hvd24oWmUsbHQsTHQpe1l0LmNob3duKFplLGx0LEx0LCEwKX0sZmNob3duKFplLGx0LEx0KXt2YXIgJHQ9WXQu''@;'; put 'put ''Z2V0U3RyZWFtQ2hlY2tlZChaZSk7WXQuY2hvd24oJHQubm9kZSxsdCxMdCl9LHRydW5jYXRlKFplLGx0KXtpZihsdDwwKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDI4KTt2YXIgTHQ7aWYoIShMdD0ic3RyaW5nIj09dHlwZW9mIFplP1l0Lmxvb2t1cFBhdGgoWmUse2ZvbGxvdzohMH0pLm5v''@;'; put 'put ''ZGU6WmUpLm5vZGVfb3BzLnNldGF0dHIpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNjMpO2lmKFl0LmlzRGlyKEx0Lm1vZGUpKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDMxKTtpZighWXQuaXNGaWxlKEx0Lm1vZGUpKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDI4KTt2YXIgRG49WXQubm9k''@;'; put 'put ''ZVBlcm1pc3Npb25zKEx0LCJ3Iik7aWYoRG4pdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoRG4pO0x0Lm5vZGVfb3BzLnNldGF0dHIoTHQse3NpemU6bHQsdGltZXN0YW1wOkRhdGUubm93KCl9KX0sZnRydW5jYXRlKFplLGx0KXt2YXIgTHQ9WXQuZ2V0U3RyZWFtQ2hlY2tlZChaZSk7aWYoISgy''@;'; put 'put ''MDk3MTU1Jkx0LmZsYWdzKSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcigyOCk7WXQudHJ1bmNhdGUoTHQubm9kZSxsdCl9LHV0aW1lKFplLGx0LEx0KXt2YXIgRG49WXQubG9va3VwUGF0aChaZSx7Zm9sbG93OiEwfSkubm9kZTtEbi5ub2RlX29wcy5zZXRhdHRyKERuLHt0aW1lc3RhbXA6TWF0''@;'; put 'put ''aC5tYXgobHQsTHQpfSl9LG9wZW4oWmUsbHQsTHQ9NDM4KXtpZigiIj09PVplKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDQ0KTt2YXIgJHQ7aWYobHQ9InN0cmluZyI9PXR5cGVvZiBsdD8oWmU9Pnt2YXIgTHQ9e3I6MCwicisiOjIsdzo1NzcsIncrIjo1NzgsYToxMDg5LCJhKyI6MTA5MH1b''@;'; put 'put ''WmVdO2lmKHR5cGVvZiBMdD4idSIpdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGZpbGUgb3BlbiBtb2RlOiAke1plfWApO3JldHVybiBMdH0pKGx0KTpsdCxMdD02NCZsdD80MDk1Jkx0fDMyNzY4OjAsIm9iamVjdCI9PXR5cGVvZiBaZSkkdD1aZTtlbHNle1plPVFvLm5vcm1hbGl6ZShaZSk7''@;'; put 'put ''dHJ5eyR0PVl0Lmxvb2t1cFBhdGgoWmUse2ZvbGxvdzohKDEzMTA3MiZsdCl9KS5ub2RlfWNhdGNoe319dmFyIGNyPSExO2lmKDY0Jmx0KWlmKCR0KXtpZigxMjgmbHQpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoMjApfWVsc2UgJHQ9WXQubWtub2QoWmUsTHQsMCksY3I9ITA7aWYoISR0KXRo''@;'; put 'put ''cm93IG5ldyBZdC5FcnJub0Vycm9yKDQ0KTtpZihZdC5pc0NocmRldigkdC5tb2RlKSYmKGx0Jj0tNTEzKSw2NTUzNiZsdCYmIVl0LmlzRGlyKCR0Lm1vZGUpKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDU0KTtpZighY3Ipe3ZhciBScj1ZdC5tYXlPcGVuKCR0LGx0KTtpZihScil0aHJvdyBu''@;'; put 'put ''ZXcgWXQuRXJybm9FcnJvcihScil9NTEyJmx0JiYhY3ImJll0LnRydW5jYXRlKCR0LDApLGx0Jj0tMTMxNzEzO3ZhciBYcj1ZdC5jcmVhdGVTdHJlYW0oe25vZGU6JHQscGF0aDpZdC5nZXRQYXRoKCR0KSxmbGFnczpsdCxzZWVrYWJsZTohMCxwb3NpdGlvbjowLHN0cmVhbV9vcHM6JHQuc3Ry''@;'; put 'put ''ZWFtX29wcyx1bmdvdHRlbjpbXSxlcnJvcjohMX0pO3JldHVybiBYci5zdHJlYW1fb3BzLm9wZW4mJlhyLnN0cmVhbV9vcHMub3BlbihYciksWHJ9LGNsb3NlKFplKXtpZihZdC5pc0Nsb3NlZChaZSkpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoOCk7WmUuZ2V0ZGVudHMmJihaZS5nZXRkZW50''@;'; put 'put ''cz1udWxsKTt0cnl7WmUuc3RyZWFtX29wcy5jbG9zZSYmWmUuc3RyZWFtX29wcy5jbG9zZShaZSl9Y2F0Y2gobHQpe3Rocm93IGx0fWZpbmFsbHl7WXQuY2xvc2VTdHJlYW0oWmUuZmQpfVplLmZkPW51bGx9LGlzQ2xvc2VkOlplPT5udWxsPT09WmUuZmQsbGxzZWVrKFplLGx0LEx0KXtpZihZ''@;'; put 'put ''dC5pc0Nsb3NlZChaZSkpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoOCk7aWYoIVplLnNlZWthYmxlfHwhWmUuc3RyZWFtX29wcy5sbHNlZWspdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNzApO2lmKDAhPUx0JiYxIT1MdCYmMiE9THQpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoMjgpO3JldHVy''@;'; put 'put ''biBaZS5wb3NpdGlvbj1aZS5zdHJlYW1fb3BzLmxsc2VlayhaZSxsdCxMdCksWmUudW5nb3R0ZW49W10sWmUucG9zaXRpb259LHJlYWQoWmUsbHQsTHQsJHQsRG4pe2lmKCR0PDB8fERuPDApdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoMjgpO2lmKFl0LmlzQ2xvc2VkKFplKSl0aHJvdyBuZXcg''@;'; put 'put ''WXQuRXJybm9FcnJvcig4KTtpZigxPT0oMjA5NzE1NSZaZS5mbGFncykpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoOCk7aWYoWXQuaXNEaXIoWmUubm9kZS5tb2RlKSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcigzMSk7aWYoIVplLnN0cmVhbV9vcHMucmVhZCl0aHJvdyBuZXcgWXQuRXJybm9F''@;'; put 'put ''cnJvcigyOCk7dmFyIGNyPXR5cGVvZiBEbjwidSI7aWYoY3Ipe2lmKCFaZS5zZWVrYWJsZSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig3MCl9ZWxzZSBEbj1aZS5wb3NpdGlvbjt2YXIgUnI9WmUuc3RyZWFtX29wcy5yZWFkKFplLGx0LEx0LCR0LERuKTtyZXR1cm4gY3J8fChaZS5wb3NpdGlv''@;'; put 'put ''bis9UnIpLFJyfSx3cml0ZShaZSxsdCxMdCwkdCxEbixjcil7aWYoJHQ8MHx8RG48MCl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcigyOCk7aWYoWXQuaXNDbG9zZWQoWmUpKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDgpO2lmKCEoMjA5NzE1NSZaZS5mbGFncykpdGhyb3cgbmV3IFl0LkVycm5v''@;'; put 'put ''RXJyb3IoOCk7aWYoWXQuaXNEaXIoWmUubm9kZS5tb2RlKSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcigzMSk7aWYoIVplLnN0cmVhbV9vcHMud3JpdGUpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoMjgpO1plLnNlZWthYmxlJiYxMDI0JlplLmZsYWdzJiZZdC5sbHNlZWsoWmUsMCwyKTt2YXIg''@;'; put 'put ''UnI9dHlwZW9mIERuPCJ1IjtpZihScil7aWYoIVplLnNlZWthYmxlKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDcwKX1lbHNlIERuPVplLnBvc2l0aW9uO3ZhciBYcj1aZS5zdHJlYW1fb3BzLndyaXRlKFplLGx0LEx0LCR0LERuLGNyKTtyZXR1cm4gUnJ8fChaZS5wb3NpdGlvbis9WHIpLFhy''@;'; put 'put ''fSxhbGxvY2F0ZShaZSxsdCxMdCl7aWYoWXQuaXNDbG9zZWQoWmUpKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDgpO2lmKGx0PDB8fEx0PD0wKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDI4KTtpZighKDIwOTcxNTUmWmUuZmxhZ3MpKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDgpO2lmKCFZ''@;'; put 'put ''dC5pc0ZpbGUoWmUubm9kZS5tb2RlKSYmIVl0LmlzRGlyKFplLm5vZGUubW9kZSkpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNDMpO2lmKCFaZS5zdHJlYW1fb3BzLmFsbG9jYXRlKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDEzOCk7WmUuc3RyZWFtX29wcy5hbGxvY2F0ZShaZSxsdCxMdCl9''@;'; put 'put ''LG1tYXAoWmUsbHQsTHQsJHQsRG4pe2lmKDImJHQmJiEoMiZEbikmJjIhPSgyMDk3MTU1JlplLmZsYWdzKSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcigyKTtpZigxPT0oMjA5NzE1NSZaZS5mbGFncykpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoMik7aWYoIVplLnN0cmVhbV9vcHMubW1hcCl0''@;'; put 'put ''aHJvdyBuZXcgWXQuRXJybm9FcnJvcig0Myk7aWYoIWx0KXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDI4KTtyZXR1cm4gWmUuc3RyZWFtX29wcy5tbWFwKFplLGx0LEx0LCR0LERuKX0sbXN5bmM6KFplLGx0LEx0LCR0LERuKT0+WmUuc3RyZWFtX29wcy5tc3luYz9aZS5zdHJlYW1fb3BzLm1z''@;'; put 'put ''eW5jKFplLGx0LEx0LCR0LERuKTowLGlvY3RsKFplLGx0LEx0KXtpZighWmUuc3RyZWFtX29wcy5pb2N0bCl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig1OSk7cmV0dXJuIFplLnN0cmVhbV9vcHMuaW9jdGwoWmUsbHQsTHQpfSxyZWFkRmlsZShaZSxsdD17fSl7aWYobHQuZmxhZ3M9bHQuZmxh''@;'; put 'put ''Z3N8fDAsbHQuZW5jb2Rpbmc9bHQuZW5jb2Rpbmd8fCJiaW5hcnkiLCJ1dGY4IiE9PWx0LmVuY29kaW5nJiYiYmluYXJ5IiE9PWx0LmVuY29kaW5nKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCBlbmNvZGluZyB0eXBlICIke2x0LmVuY29kaW5nfSJgKTt2YXIgTHQsJHQ9WXQub3BlbihaZSxs''@;'; put 'put ''dC5mbGFncyksY3I9WXQuc3RhdChaZSkuc2l6ZSxScj1uZXcgVWludDhBcnJheShjcik7cmV0dXJuIFl0LnJlYWQoJHQsUnIsMCxjciwwKSwidXRmOCI9PT1sdC5lbmNvZGluZz9MdD1xcyhScik6ImJpbmFyeSI9PT1sdC5lbmNvZGluZyYmKEx0PVJyKSxZdC5jbG9zZSgkdCksTHR9LHdyaXRl''@;'; put 'put ''RmlsZShaZSxsdCxMdD17fSl7THQuZmxhZ3M9THQuZmxhZ3N8fDU3Nzt2YXIgJHQ9WXQub3BlbihaZSxMdC5mbGFncyxMdC5tb2RlKTtpZigic3RyaW5nIj09dHlwZW9mIGx0KXt2YXIgRG49bmV3IFVpbnQ4QXJyYXkoZXMobHQpKzEpLGNyPUUxKGx0LERuLDAsRG4ubGVuZ3RoKTtZdC53cml0''@;'; put 'put ''ZSgkdCxEbiwwLGNyLHZvaWQgMCxMdC5jYW5Pd24pfWVsc2V7aWYoIUFycmF5QnVmZmVyLmlzVmlldyhsdCkpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBkYXRhIHR5cGUiKTtZdC53cml0ZSgkdCxsdCwwLGx0LmJ5dGVMZW5ndGgsdm9pZCAwLEx0LmNhbk93bil9WXQuY2xvc2UoJHQp''@;'; put 'put ''fSxjd2Q6KCk9Pll0LmN1cnJlbnRQYXRoLGNoZGlyKFplKXt2YXIgbHQ9WXQubG9va3VwUGF0aChaZSx7Zm9sbG93OiEwfSk7aWYobnVsbD09PWx0Lm5vZGUpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNDQpO2lmKCFZdC5pc0RpcihsdC5ub2RlLm1vZGUpKXRocm93IG5ldyBZdC5FcnJub0Vy''@;'; put 'put ''cm9yKDU0KTt2YXIgTHQ9WXQubm9kZVBlcm1pc3Npb25zKGx0Lm5vZGUsIngiKTtpZihMdCl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcihMdCk7WXQuY3VycmVudFBhdGg9bHQucGF0aH0sY3JlYXRlRGVmYXVsdERpcmVjdG9yaWVzKCl7WXQubWtkaXIoIi90bXAiKSxZdC5ta2RpcigiL2hvbWUi''@;'; put 'put ''KSxZdC5ta2RpcigiL2hvbWUvd2ViX3VzZXIiKX0sY3JlYXRlRGVmYXVsdERldmljZXMoKXtZdC5ta2RpcigiL2RldiIpLFl0LnJlZ2lzdGVyRGV2aWNlKFl0Lm1ha2VkZXYoMSwzKSx7cmVhZDooKT0+MCx3cml0ZTooJHQsRG4sY3IsUnIsWHIpPT5ScixsbHNlZWs6KCk9PjB9KSxZdC5ta2Rl''@;'; put 'put ''digiL2Rldi9udWxsIixZdC5tYWtlZGV2KDEsMykpLGQ0LnJlZ2lzdGVyKFl0Lm1ha2VkZXYoNSwwKSxkNC5kZWZhdWx0X3R0eV9vcHMpLGQ0LnJlZ2lzdGVyKFl0Lm1ha2VkZXYoNiwwKSxkNC5kZWZhdWx0X3R0eTFfb3BzKSxZdC5ta2RldigiL2Rldi90dHkiLFl0Lm1ha2VkZXYoNSwwKSks''@;'; put 'put ''WXQubWtkZXYoIi9kZXYvdHR5MSIsWXQubWFrZWRldig2LDApKTt2YXIgWmU9bmV3IFVpbnQ4QXJyYXkoMTAyNCksbHQ9MCxMdD0oKT0+KDA9PT1sdCYmKGx0PWFkKFplKS5ieXRlTGVuZ3RoKSxaZVstLWx0XSk7WXQuY3JlYXRlRGV2aWNlKCIvZGV2IiwicmFuZG9tIixMdCksWXQuY3JlYXRl''@;'; put 'put ''RGV2aWNlKCIvZGV2IiwidXJhbmRvbSIsTHQpLFl0Lm1rZGlyKCIvZGV2L3NobSIpLFl0Lm1rZGlyKCIvZGV2L3NobS90bXAiKX0sY3JlYXRlU3BlY2lhbERpcmVjdG9yaWVzKCl7WXQubWtkaXIoIi9wcm9jIik7dmFyIFplPVl0Lm1rZGlyKCIvcHJvYy9zZWxmIik7WXQubWtkaXIoIi9wcm9j''@;'; put 'put ''L3NlbGYvZmQiKSxZdC5tb3VudCh7bW91bnQoKXt2YXIgbHQ9WXQuY3JlYXRlTm9kZShaZSwiZmQiLDE2ODk1LDczKTtyZXR1cm4gbHQubm9kZV9vcHM9e2xvb2t1cChMdCwkdCl7dmFyIGNyPVl0LmdldFN0cmVhbUNoZWNrZWQoKyR0KSxScj17cGFyZW50Om51bGwsbW91bnQ6e21vdW50cG9p''@;'; put 'put ''bnQ6ImZha2UifSxub2RlX29wczp7cmVhZGxpbms6KCk9PmNyLnBhdGh9fTtyZXR1cm4gUnIucGFyZW50PVJyLFJyfX0sbHR9fSx7fSwiL3Byb2Mvc2VsZi9mZCIpfSxjcmVhdGVTdGFuZGFyZFN0cmVhbXMoWmUsbHQsTHQpe1plP1l0LmNyZWF0ZURldmljZSgiL2RldiIsInN0ZGluIixaZSk6''@;'; put 'put ''WXQuc3ltbGluaygiL2Rldi90dHkiLCIvZGV2L3N0ZGluIiksbHQ/WXQuY3JlYXRlRGV2aWNlKCIvZGV2Iiwic3Rkb3V0IixudWxsLGx0KTpZdC5zeW1saW5rKCIvZGV2L3R0eSIsIi9kZXYvc3Rkb3V0IiksTHQ/WXQuY3JlYXRlRGV2aWNlKCIvZGV2Iiwic3RkZXJyIixudWxsLEx0KTpZdC5z''@;'; put 'put ''eW1saW5rKCIvZGV2L3R0eTEiLCIvZGV2L3N0ZGVyciIpLFl0Lm9wZW4oIi9kZXYvc3RkaW4iLDApLFl0Lm9wZW4oIi9kZXYvc3Rkb3V0IiwxKSxZdC5vcGVuKCIvZGV2L3N0ZGVyciIsMSl9LHN0YXRpY0luaXQoKXtZdC5uYW1lVGFibGU9bmV3IEFycmF5KDQwOTYpLFl0Lm1vdW50KCRhLHt9''@;'; put 'put ''LCIvIiksWXQuY3JlYXRlRGVmYXVsdERpcmVjdG9yaWVzKCksWXQuY3JlYXRlRGVmYXVsdERldmljZXMoKSxZdC5jcmVhdGVTcGVjaWFsRGlyZWN0b3JpZXMoKSxZdC5maWxlc3lzdGVtcz17TUVNRlM6JGF9fSxpbml0KFplLGx0LEx0KXtZdC5pbml0aWFsaXplZD0hMCxZdC5jcmVhdGVTdGFu''@;'; put 'put ''ZGFyZFN0cmVhbXMoWmUsbHQsTHQpfSxxdWl0KCl7WXQuaW5pdGlhbGl6ZWQ9ITE7Zm9yKHZhciBaZT0wO1plPFl0LnN0cmVhbXMubGVuZ3RoO1plKyspe3ZhciBsdD1ZdC5zdHJlYW1zW1plXTtsdCYmWXQuY2xvc2UobHQpfX0sZmluZE9iamVjdChaZSxsdCl7dmFyIEx0PVl0LmFuYWx5emVQ''@;'; put 'put ''YXRoKFplLGx0KTtyZXR1cm4gTHQuZXhpc3RzP0x0Lm9iamVjdDpudWxsfSxhbmFseXplUGF0aChaZSxsdCl7dHJ5e1plPShMdD1ZdC5sb29rdXBQYXRoKFplLHtmb2xsb3c6IWx0fSkpLnBhdGh9Y2F0Y2h7fXZhciAkdD17aXNSb290OiExLGV4aXN0czohMSxlcnJvcjowLG5hbWU6bnVsbCxw''@;'; put 'put ''YXRoOm51bGwsb2JqZWN0Om51bGwscGFyZW50RXhpc3RzOiExLHBhcmVudFBhdGg6bnVsbCxwYXJlbnRPYmplY3Q6bnVsbH07dHJ5e3ZhciBMdD1ZdC5sb29rdXBQYXRoKFplLHtwYXJlbnQ6ITB9KTskdC5wYXJlbnRFeGlzdHM9ITAsJHQucGFyZW50UGF0aD1MdC5wYXRoLCR0LnBhcmVudE9i''@;'; put 'put ''amVjdD1MdC5ub2RlLCR0Lm5hbWU9UW8uYmFzZW5hbWUoWmUpLEx0PVl0Lmxvb2t1cFBhdGgoWmUse2ZvbGxvdzohbHR9KSwkdC5leGlzdHM9ITAsJHQucGF0aD1MdC5wYXRoLCR0Lm9iamVjdD1MdC5ub2RlLCR0Lm5hbWU9THQubm9kZS5uYW1lLCR0LmlzUm9vdD0iLyI9PT1MdC5wYXRofWNh''@;'; put 'put ''dGNoKERuKXskdC5lcnJvcj1Ebi5lcnJub31yZXR1cm4gJHR9LGNyZWF0ZVBhdGgoWmUsbHQsTHQsJHQpe1plPSJzdHJpbmciPT10eXBlb2YgWmU/WmU6WXQuZ2V0UGF0aChaZSk7Zm9yKHZhciBEbj1sdC5zcGxpdCgiLyIpLnJldmVyc2UoKTtEbi5sZW5ndGg7KXt2YXIgY3I9RG4ucG9wKCk7''@;'; put 'put ''aWYoY3Ipe3ZhciBScj1Rby5qb2luMihaZSxjcik7dHJ5e1l0Lm1rZGlyKFJyKX1jYXRjaHt9WmU9UnJ9fXJldHVybiBScn0sY3JlYXRlRmlsZShaZSxsdCxMdCwkdCxEbil7dmFyIGNyPVFvLmpvaW4yKCJzdHJpbmciPT10eXBlb2YgWmU/WmU6WXQuZ2V0UGF0aChaZSksbHQpLFJyPWpBKCR0''@;'; put 'put ''LERuKTtyZXR1cm4gWXQuY3JlYXRlKGNyLFJyKX0sY3JlYXRlRGF0YUZpbGUoWmUsbHQsTHQsJHQsRG4sY3Ipe3ZhciBScj1sdDtaZSYmKFplPSJzdHJpbmciPT10eXBlb2YgWmU/WmU6WXQuZ2V0UGF0aChaZSksUnI9bHQ/UW8uam9pbjIoWmUsbHQpOlplKTt2YXIgWHI9akEoJHQsRG4pLGth''@;'; put 'put ''PVl0LmNyZWF0ZShScixYcik7aWYoTHQpe2lmKCJzdHJpbmciPT10eXBlb2YgTHQpe2Zvcih2YXIgR289bmV3IEFycmF5KEx0Lmxlbmd0aCksSHM9MCxhbD1MdC5sZW5ndGg7SHM8YWw7KytIcylHb1tIc109THQuY2hhckNvZGVBdChIcyk7THQ9R299WXQuY2htb2Qoa2EsMTQ2fFhyKTt2YXIg''@;'; put 'put ''Z3M9WXQub3BlbihrYSw1NzcpO1l0LndyaXRlKGdzLEx0LDAsTHQubGVuZ3RoLDAsY3IpLFl0LmNsb3NlKGdzKSxZdC5jaG1vZChrYSxYcil9fSxjcmVhdGVEZXZpY2UoWmUsbHQsTHQsJHQpe3ZhciBEbj1Rby5qb2luMigic3RyaW5nIj09dHlwZW9mIFplP1plOll0LmdldFBhdGgoWmUpLGx0''@;'; put 'put ''KSxjcj1qQSghIUx0LCEhJHQpO1l0LmNyZWF0ZURldmljZS5tYWpvcj8/PTY0O3ZhciBScj1ZdC5tYWtlZGV2KFl0LmNyZWF0ZURldmljZS5tYWpvcisrLDApO3JldHVybiBZdC5yZWdpc3RlckRldmljZShScix7b3BlbihYcil7WHIuc2Vla2FibGU9ITF9LGNsb3NlKFhyKXskdD8uYnVmZmVy''@;'; put 'put ''Py5sZW5ndGgmJiR0KDEwKX0scmVhZChYcixrYSxHbyxIcyxhbCl7Zm9yKHZhciBncz0wLHhvPTA7eG88SHM7eG8rKyl7dmFyIFhzO3RyeXtYcz1MdCgpfWNhdGNoe3Rocm93IG5ldyBZdC5FcnJub0Vycm9yKDI5KX1pZih2b2lkIDA9PT1YcyYmMD09PWdzKXRocm93IG5ldyBZdC5FcnJub0Vy''@;'; put 'put ''cm9yKDYpO2lmKG51bGw9PVhzKWJyZWFrO2dzKyssa2FbR28reG9dPVhzfXJldHVybiBncyYmKFhyLm5vZGUudGltZXN0YW1wPURhdGUubm93KCkpLGdzfSx3cml0ZShYcixrYSxHbyxIcyxhbCl7Zm9yKHZhciBncz0wO2dzPEhzO2dzKyspdHJ5eyR0KGthW0dvK2dzXSl9Y2F0Y2h7dGhyb3cg''@;'; put 'put ''bmV3IFl0LkVycm5vRXJyb3IoMjkpfXJldHVybiBIcyYmKFhyLm5vZGUudGltZXN0YW1wPURhdGUubm93KCkpLGdzfX0pLFl0Lm1rZGV2KERuLGNyLFJyKX0sZm9yY2VMb2FkRmlsZShaZSl7aWYoWmUuaXNEZXZpY2V8fFplLmlzRm9sZGVyfHxaZS5saW5rfHxaZS5jb250ZW50cylyZXR1cm4h''@;'; put 'put ''MDtpZih0eXBlb2YgWE1MSHR0cFJlcXVlc3Q8InUiKXRocm93IG5ldyBFcnJvcigiTGF6eSBsb2FkaW5nIHNob3VsZCBoYXZlIGJlZW4gcGVyZm9ybWVkIChjb250ZW50cyBzZXQpIGluIGNyZWF0ZUxhenlGaWxlLCBidXQgaXQgd2FzIG5vdC4gTGF6eSBsb2FkaW5nIG9ubHkgd29ya3MgaW4g''@;'; put 'put ''d2ViIHdvcmtlcnMuIFVzZSAtLWVtYmVkLWZpbGUgb3IgLS1wcmVsb2FkLWZpbGUgaW4gZW1jYyBvbiB0aGUgbWFpbiB0aHJlYWQuIik7dHJ5e1plLmNvbnRlbnRzPUJlKFplLnVybCksWmUudXNlZEJ5dGVzPVplLmNvbnRlbnRzLmxlbmd0aH1jYXRjaHt0aHJvdyBuZXcgWXQuRXJybm9FcnJv''@;'; put 'put ''cigyOSl9fSxjcmVhdGVMYXp5RmlsZShaZSxsdCxMdCwkdCxEbil7aWYodHlwZW9mIFhNTEh0dHBSZXF1ZXN0PCJ1Iil0aHJvdyJDYW5ub3QgZG8gc3luY2hyb25vdXMgYmluYXJ5IFhIUnMgb3V0c2lkZSB3ZWJ3b3JrZXJzIGluIG1vZGVybiBicm93c2Vycy4gVXNlIC0tZW1iZWQtZmlsZSBv''@;'; put 'put ''ciAtLXByZWxvYWQtZmlsZSBpbiBlbWNjIjt2YXIgWHIsa2E9WXQuY3JlYXRlRmlsZShaZSxsdCxYcj17aXNEZXZpY2U6ITEsdXJsOkx0fSwkdCxEbik7WHIuY29udGVudHM/a2EuY29udGVudHM9WHIuY29udGVudHM6WHIudXJsJiYoa2EuY29udGVudHM9bnVsbCxrYS51cmw9WHIudXJsKSxP''@;'; put 'put ''YmplY3QuZGVmaW5lUHJvcGVydGllcyhrYSx7dXNlZEJ5dGVzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb250ZW50cy5sZW5ndGh9fX0pO3ZhciBHbz17fTtmdW5jdGlvbiBhbChncyx4byxYcyxBMSxUMyl7dmFyIFdoPWdzLm5vZGUuY29udGVudHM7aWYoVDM+PVdoLmxlbmd0aCly''@;'; put 'put ''ZXR1cm4gMDt2YXIgQTM9TWF0aC5taW4oV2gubGVuZ3RoLVQzLEExKTtpZihXaC5zbGljZSlmb3IodmFyIGszPTA7azM8QTM7azMrKyl4b1tYcytrM109V2hbVDMrazNdO2Vsc2UgZm9yKGszPTA7azM8QTM7azMrKyl4b1tYcytrM109V2guZ2V0KFQzK2szKTtyZXR1cm4gQTN9cmV0dXJuIE9i''@;'; put 'put ''amVjdC5rZXlzKGthLnN0cmVhbV9vcHMpLmZvckVhY2goZ3M9Pnt2YXIgeG89a2Euc3RyZWFtX29wc1tnc107R29bZ3NdPSguLi5Ycyk9PihZdC5mb3JjZUxvYWRGaWxlKGthKSx4byguLi5YcykpfSksR28ucmVhZD0oZ3MseG8sWHMsQTEsVDMpPT4oWXQuZm9yY2VMb2FkRmlsZShrYSksYWwo''@;'; put 'put ''Z3MseG8sWHMsQTEsVDMpKSxHby5tbWFwPShncyx4byxYcyxBMSxUMyk9PntZdC5mb3JjZUxvYWRGaWxlKGthKTt2YXIgV2g9VU4oeG8pO2lmKCFXaCl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig0OCk7cmV0dXJuIGFsKGdzLHRuLFdoLHhvLFhzKSx7cHRyOldoLGFsbG9jYXRlZDohMH19LGth''@;'; put 'put ''LnN0cmVhbV9vcHM9R28sa2F9fSx2MD0oWmUsbHQpPT5aZT9xcyhNbixaZSxsdCk6IiIsVXM9e0RFRkFVTFRfUE9MTE1BU0s6NSxjYWxjdWxhdGVBdChaZSxsdCxMdCl7aWYoUW8uaXNBYnMobHQpKXJldHVybiBsdDt2YXIgJHQ7aWYoJHQ9LTEwMD09PVplP1l0LmN3ZCgpOlVzLmdldFN0cmVh''@;'; put 'put ''bUZyb21GRChaZSkucGF0aCwwPT1sdC5sZW5ndGgpe2lmKCFMdCl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig0NCk7cmV0dXJuICR0fXJldHVybiBRby5qb2luMigkdCxsdCl9LGRvU3RhdChaZSxsdCxMdCl7dmFyICR0PVplKGx0KTttcltMdD4+Ml09JHQuZGV2LG1yW0x0KzQ+PjJdPSR0Lm1v''@;'; put 'put ''ZGUsR25bTHQrOD4+Ml09JHQubmxpbmssbXJbTHQrMTI+PjJdPSR0LnVpZCxtcltMdCsxNj4+Ml09JHQuZ2lkLG1yW0x0KzIwPj4yXT0kdC5yZGV2LGFhPVskdC5zaXplPj4+MCwoWnI9JHQuc2l6ZSwrTWF0aC5hYnMoWnIpPj0xP1pyPjA/K01hdGguZmxvb3IoWnIvNDI5NDk2NzI5Nik+Pj4w''@;'; put 'put ''On5+K01hdGguY2VpbCgoWnItKyh+flpyPj4+MCkpLzQyOTQ5NjcyOTYpPj4+MDowKV0sbXJbTHQrMjQ+PjJdPWFhWzBdLG1yW0x0KzI4Pj4yXT1hYVsxXSxtcltMdCszMj4+Ml09NDA5NixtcltMdCszNj4+Ml09JHQuYmxvY2tzO3ZhciBEbj0kdC5hdGltZS5nZXRUaW1lKCksY3I9JHQubXRp''@;'; put 'put ''bWUuZ2V0VGltZSgpLFJyPSR0LmN0aW1lLmdldFRpbWUoKTtyZXR1cm4gYWE9W01hdGguZmxvb3IoRG4vMWUzKT4+PjAsKFpyPU1hdGguZmxvb3IoRG4vMWUzKSwrTWF0aC5hYnMoWnIpPj0xP1pyPjA/K01hdGguZmxvb3IoWnIvNDI5NDk2NzI5Nik+Pj4wOn5+K01hdGguY2VpbCgoWnItKyh+''@;'; put 'put ''flpyPj4+MCkpLzQyOTQ5NjcyOTYpPj4+MDowKV0sbXJbTHQrNDA+PjJdPWFhWzBdLG1yW0x0KzQ0Pj4yXT1hYVsxXSxHbltMdCs0OD4+Ml09RG4lMWUzKjFlMyoxZTMsYWE9W01hdGguZmxvb3IoY3IvMWUzKT4+PjAsKFpyPU1hdGguZmxvb3IoY3IvMWUzKSwrTWF0aC5hYnMoWnIpPj0xP1py''@;'; put 'put ''PjA/K01hdGguZmxvb3IoWnIvNDI5NDk2NzI5Nik+Pj4wOn5+K01hdGguY2VpbCgoWnItKyh+flpyPj4+MCkpLzQyOTQ5NjcyOTYpPj4+MDowKV0sbXJbTHQrNTY+PjJdPWFhWzBdLG1yW0x0KzYwPj4yXT1hYVsxXSxHbltMdCs2ND4+Ml09Y3IlMWUzKjFlMyoxZTMsYWE9W01hdGguZmxvb3Io''@;'; put 'put ''UnIvMWUzKT4+PjAsKFpyPU1hdGguZmxvb3IoUnIvMWUzKSwrTWF0aC5hYnMoWnIpPj0xP1pyPjA/K01hdGguZmxvb3IoWnIvNDI5NDk2NzI5Nik+Pj4wOn5+K01hdGguY2VpbCgoWnItKyh+flpyPj4+MCkpLzQyOTQ5NjcyOTYpPj4+MDowKV0sbXJbTHQrNzI+PjJdPWFhWzBdLG1yW0x0Kzc2''@;'; put 'put ''Pj4yXT1hYVsxXSxHbltMdCs4MD4+Ml09UnIlMWUzKjFlMyoxZTMsYWE9WyR0Lmlubz4+PjAsKFpyPSR0LmlubywrTWF0aC5hYnMoWnIpPj0xP1pyPjA/K01hdGguZmxvb3IoWnIvNDI5NDk2NzI5Nik+Pj4wOn5+K01hdGguY2VpbCgoWnItKyh+flpyPj4+MCkpLzQyOTQ5NjcyOTYpPj4+MDow''@;'; put 'put ''KV0sbXJbTHQrODg+PjJdPWFhWzBdLG1yW0x0KzkyPj4yXT1hYVsxXSwwfSxkb01zeW5jKFplLGx0LEx0LCR0LERuKXtpZighWXQuaXNGaWxlKGx0Lm5vZGUubW9kZSkpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNDMpO2lmKDImJHQpcmV0dXJuIDA7dmFyIGNyPU1uLnNsaWNlKFplLFplK0x0''@;'; put 'put ''KTtZdC5tc3luYyhsdCxjcixEbixMdCwkdCl9LGdldFN0cmVhbUZyb21GRDpaZT0+WXQuZ2V0U3RyZWFtQ2hlY2tlZChaZSksdmFyYXJnczp2b2lkIDAsZ2V0U3RyOlplPT52MChaZSl9LEU2PSgpPT57dmFyIFplPW1yWytVcy52YXJhcmdzPj4yXTtyZXR1cm4gVXMudmFyYXJncys9NCxaZX0s''@;'; put 'put ''ZTU9RTYsb3Y9KFplLGx0LEx0KT0+RTEoWmUsTW4sbHQsTHQpLFpoPShaZSxsdCk9Pmx0KzIwOTcxNTI+Pj4wPDQxOTQzMDUtISFaZT8oWmU+Pj4wKSs0Mjk0OTY3Mjk2Kmx0Ok5hTixrdz1bXSxZRHQ9WmU9Pnt2YXIgTHQ9KFplLWR0LmJ1ZmZlci5ieXRlTGVuZ3RoKzY1NTM1KS82NTUzNnww''@;'; put 'put ''O3RyeXtyZXR1cm4gZHQuZ3JvdyhMdCksT24oKSwxfWNhdGNoe319LFl0ZT17fSxVQT0oKT0+e2lmKCFVQS5zdHJpbmdzKXt2YXIgbHQ9e1VTRVI6IndlYl91c2VyIixMT0dOQU1FOiJ3ZWJfdXNlciIsUEFUSDoiLyIsUFdEOiIvIixIT01FOiIvaG9tZS93ZWJfdXNlciIsTEFORzooIm9iamVj''@;'; put 'put ''dCI9PXR5cGVvZiBuYXZpZ2F0b3ImJm5hdmlnYXRvci5sYW5ndWFnZXMmJm5hdmlnYXRvci5sYW5ndWFnZXNbMF18fCJDIikucmVwbGFjZSgiLSIsIl8iKSsiLlVURi04IixfOiIuL3RoaXMucHJvZ3JhbSJ9O2Zvcih2YXIgTHQgaW4gWXRlKXZvaWQgMD09PVl0ZVtMdF0/ZGVsZXRlIGx0W0x0''@;'; put 'put ''XTpsdFtMdF09WXRlW0x0XTt2YXIgJHQ9W107Zm9yKHZhciBMdCBpbiBsdCkkdC5wdXNoKGAke0x0fT0ke2x0W0x0XX1gKTtVQS5zdHJpbmdzPSR0fXJldHVybiBVQS5zdHJpbmdzfTtZdC5jcmVhdGVQcmVsb2FkZWRGaWxlPShaZSxsdCxMdCwkdCxEbixjcixScixYcixrYSxHbyk9Pnt2YXIg''@;'; put 'put ''SHM9bHQ/enMucmVzb2x2ZShRby5qb2luMihaZSxsdCkpOlplO2Z1bmN0aW9uIGdzKHhvKXtmdW5jdGlvbiBYcyhBMSl7R28/LigpLFhyfHwoKFplLGx0LEx0LCR0LERuLGNyKT0+e1l0LmNyZWF0ZURhdGFGaWxlKFplLGx0LEx0LCR0LERuLGNyKX0pKFplLGx0LEExLCR0LERuLGthKSxjcj8u''@;'; put 'put ''KCksSHIoKX0oKFplLGx0LEx0LCR0KT0+e3R5cGVvZiBCcm93c2VyPCJ1IiYmQnJvd3Nlci5pbml0KCk7dmFyIERuPSExO3JldHVybiBaTi5mb3JFYWNoKGNyPT57RG58fGNyLmNhbkhhbmRsZShsdCkmJihjci5oYW5kbGUoWmUsbHQsTHQsJHQpLERuPSEwKX0pLERufSkoeG8sSHMsWHMsKCk9''@;'; put 'put ''PntScj8uKCksSHIoKX0pfHxYcyh4byl9YXIoKSwic3RyaW5nIj09dHlwZW9mIEx0PygoWmUsbHQsTHQsJHQpPT57dmFyIERuPWBhbCAke1plfWA7KHZvaWQgMCkoWmUpLnRoZW4oY3I9PntsdChuZXcgVWludDhBcnJheShjcikpLERuJiZIcigpfSxjcj0+e2lmKCFMdCl0aHJvd2BMb2FkaW5n''@;'; put 'put ''IGRhdGEgZmlsZSAiJHtaZX0iIGZhaWxlZC5gO0x0KCl9KSxEbiYmYXIoKX0pKEx0LGdzLFJyKTpncyhMdCl9LFl0LnN0YXRpY0luaXQoKSwkYS5kb2VzTm90RXhpc3RFcnJvcj1uZXcgWXQuRXJybm9FcnJvcig0NCksJGEuZG9lc05vdEV4aXN0RXJyb3Iuc3RhY2s9IjxnZW5lcmljIGVycm9y''@;'; put 'put ''LCBubyBzdGFjaz4iO3ZhciBRTixsSXQ9e2E6KFplLGx0LEx0KT0+e3Rocm93IG5ldyBwcyhaZSkuaW5pdChsdCxMdCksWmV9LGk6ZnVuY3Rpb24gR04oWmUsbHQsTHQsJHQpe3RyeXtpZihsdD1Vcy5nZXRTdHIobHQpLGx0PVVzLmNhbGN1bGF0ZUF0KFplLGx0KSwtOCZMdClyZXR1cm4tMjg7''@;'; put 'put ''dmFyIGNyPVl0Lmxvb2t1cFBhdGgobHQse2ZvbGxvdzohMH0pLm5vZGU7aWYoIWNyKXJldHVybi00NDt2YXIgUnI9IiI7cmV0dXJuIDQmTHQmJihScis9InIiKSwyJkx0JiYoUnIrPSJ3IiksMSZMdCYmKFJyKz0ieCIpLFJyJiZZdC5ub2RlUGVybWlzc2lvbnMoY3IsUnIpPy0yOjB9Y2F0Y2go''@;'; put 'put ''WHIpe2lmKHR5cGVvZiBZdD4idSJ8fCJFcnJub0Vycm9yIiE9PVhyLm5hbWUpdGhyb3cgWHI7cmV0dXJuLVhyLmVycm5vfX0sZjpmdW5jdGlvbiBFMyhaZSxsdCxMdCl7VXMudmFyYXJncz1MdDt0cnl7dmFyICR0PVVzLmdldFN0cmVhbUZyb21GRChaZSk7c3dpdGNoKGx0KXtjYXNlIDA6aWYo''@;'; put 'put ''KERuPUU2KCkpPDApcmV0dXJuLTI4O2Zvcig7WXQuc3RyZWFtc1tEbl07KURuKys7cmV0dXJuIFl0LmR1cFN0cmVhbSgkdCxEbikuZmQ7Y2FzZSAxOmNhc2UgMjpjYXNlIDEzOmNhc2UgMTQ6cmV0dXJuIDA7Y2FzZSAzOnJldHVybiAkdC5mbGFncztjYXNlIDQ6dmFyIERuPUU2KCk7cmV0dXJu''@;'; put 'put ''ICR0LmZsYWdzfD1EbiwwO2Nhc2UgMTI6cmV0dXJuIERuPWU1KCksQ3JbRG4rMD4+MV09MiwwfXJldHVybi0yOH1jYXRjaChYcil7aWYodHlwZW9mIFl0PiJ1Inx8IkVycm5vRXJyb3IiIT09WHIubmFtZSl0aHJvdyBYcjtyZXR1cm4tWHIuZXJybm99fSx4OmZ1bmN0aW9uICROKFplLGx0KXt0''@;'; put 'put ''cnl7dmFyIEx0PVVzLmdldFN0cmVhbUZyb21GRChaZSk7cmV0dXJuIFVzLmRvU3RhdChZdC5zdGF0LEx0LnBhdGgsbHQpfWNhdGNoKCR0KXtpZih0eXBlb2YgWXQ+InUifHwiRXJybm9FcnJvciIhPT0kdC5uYW1lKXRocm93ICR0O3JldHVybi0kdC5lcnJub319LGs6ZnVuY3Rpb24gS04oWmUs''@;'; put 'put ''bHQsTHQpe1VzLnZhcmFyZ3M9THQ7dHJ5e3ZhciAkdD1Vcy5nZXRTdHJlYW1Gcm9tRkQoWmUpO3N3aXRjaChsdCl7Y2FzZSAyMTUwOTpjYXNlIDIxNTEwOmNhc2UgMjE1MTE6Y2FzZSAyMTUxMjpjYXNlIDIxNTI0OmNhc2UgMjE1MTU6cmV0dXJuICR0LnR0eT8wOi01OTtjYXNlIDIxNTA1Omlm''@;'; put 'put ''KCEkdC50dHkpcmV0dXJuLTU5O2lmKCR0LnR0eS5vcHMuaW9jdGxfdGNnZXRzKXt2YXIgRG49JHQudHR5Lm9wcy5pb2N0bF90Y2dldHMoJHQpLGNyPWU1KCk7bXJbY3I+PjJdPURuLmNfaWZsYWd8fDAsbXJbY3IrND4+Ml09RG4uY19vZmxhZ3x8MCxtcltjcis4Pj4yXT1Ebi5jX2NmbGFnfHww''@;'; put 'put ''LG1yW2NyKzEyPj4yXT1Ebi5jX2xmbGFnfHwwO2Zvcih2YXIgUnI9MDtScjwzMjtScisrKXRuW2NyK1JyKzE3XT1Ebi5jX2NjW1JyXXx8MDtyZXR1cm4gMH1yZXR1cm4gMDtjYXNlIDIxNTA2OmNhc2UgMjE1MDc6Y2FzZSAyMTUwODppZighJHQudHR5KXJldHVybi01OTtpZigkdC50dHkub3Bz''@;'; put 'put ''LmlvY3RsX3Rjc2V0cyl7Y3I9ZTUoKTt2YXIgWHI9bXJbY3I+PjJdLGthPW1yW2NyKzQ+PjJdLEdvPW1yW2NyKzg+PjJdLEhzPW1yW2NyKzEyPj4yXSxhbD1bXTtmb3IoUnI9MDtScjwzMjtScisrKWFsLnB1c2godG5bY3IrUnIrMTddKTtyZXR1cm4gJHQudHR5Lm9wcy5pb2N0bF90Y3NldHMo''@;'; put 'put ''JHQudHR5LGx0LHtjX2lmbGFnOlhyLGNfb2ZsYWc6a2EsY19jZmxhZzpHbyxjX2xmbGFnOkhzLGNfY2M6YWx9KX1yZXR1cm4gMDtjYXNlIDIxNTE5OnJldHVybiAkdC50dHk/KGNyPWU1KCksbXJbY3I+PjJdPTAsMCk6LTU5O2Nhc2UgMjE1MjA6cmV0dXJuICR0LnR0eT8tMjg6LTU5O2Nhc2Ug''@;'; put 'put ''MjE1MzE6cmV0dXJuIGNyPWU1KCksWXQuaW9jdGwoJHQsbHQsY3IpO2Nhc2UgMjE1MjM6aWYoISR0LnR0eSlyZXR1cm4tNTk7aWYoJHQudHR5Lm9wcy5pb2N0bF90aW9jZ3dpbnN6KXt2YXIgZ3M9JHQudHR5Lm9wcy5pb2N0bF90aW9jZ3dpbnN6KCR0LnR0eSk7Y3I9ZTUoKSxDcltjcj4+MV09''@;'; put 'put ''Z3NbMF0sQ3JbY3IrMj4+MV09Z3NbMV19cmV0dXJuIDA7ZGVmYXVsdDpyZXR1cm4tMjh9fWNhdGNoKHhvKXtpZih0eXBlb2YgWXQ+InUifHwiRXJybm9FcnJvciIhPT14by5uYW1lKXRocm93IHhvO3JldHVybi14by5lcnJub319LHY6ZnVuY3Rpb24gcU4oWmUsbHQsTHQsJHQpe3RyeXtsdD1V''@;'; put 'put ''cy5nZXRTdHIobHQpO3ZhciBEbj0yNTYmJHQsY3I9NDA5NiYkdDtyZXR1cm4gJHQmPS02NDAxLGx0PVVzLmNhbGN1bGF0ZUF0KFplLGx0LGNyKSxVcy5kb1N0YXQoRG4/WXQubHN0YXQ6WXQuc3RhdCxsdCxMdCl9Y2F0Y2goUnIpe2lmKHR5cGVvZiBZdD4idSJ8fCJFcnJub0Vycm9yIiE9PVJy''@;'; put 'put ''Lm5hbWUpdGhyb3cgUnI7cmV0dXJuLVJyLmVycm5vfX0saDpmdW5jdGlvbiBYTihaZSxsdCxMdCwkdCl7VXMudmFyYXJncz0kdDt0cnl7bHQ9VXMuZ2V0U3RyKGx0KSxsdD1Vcy5jYWxjdWxhdGVBdChaZSxsdCk7dmFyIERuPSR0P0U2KCk6MDtyZXR1cm4gWXQub3BlbihsdCxMdCxEbikuZmR9''@;'; put 'put ''Y2F0Y2goY3Ipe2lmKHR5cGVvZiBZdD4idSJ8fCJFcnJub0Vycm9yIiE9PWNyLm5hbWUpdGhyb3cgY3I7cmV0dXJuLWNyLmVycm5vfX0scTpmdW5jdGlvbiBjbyhaZSxsdCxMdCwkdCl7dHJ5e2lmKGx0PVVzLmdldFN0cihsdCksbHQ9VXMuY2FsY3VsYXRlQXQoWmUsbHQpLCR0PD0wKXJldHVy''@;'; put 'put ''bi0yODt2YXIgRG49WXQucmVhZGxpbmsobHQpLGNyPU1hdGgubWluKCR0LGVzKERuKSksUnI9dG5bTHQrY3JdO3JldHVybiBvdihEbixMdCwkdCsxKSx0bltMdCtjcl09UnIsY3J9Y2F0Y2goWHIpe2lmKHR5cGVvZiBZdD4idSJ8fCJFcnJub0Vycm9yIiE9PVhyLm5hbWUpdGhyb3cgWHI7cmV0''@;'; put 'put ''dXJuLVhyLmVycm5vfX0scjpmdW5jdGlvbiBncihaZSl7dHJ5e3JldHVybiBaZT1Vcy5nZXRTdHIoWmUpLFl0LnJtZGlyKFplKSwwfWNhdGNoKGx0KXtpZih0eXBlb2YgWXQ+InUifHwiRXJybm9FcnJvciIhPT1sdC5uYW1lKXRocm93IGx0O3JldHVybi1sdC5lcnJub319LHc6ZnVuY3Rpb24g''@;'; put 'put ''UWkoWmUsbHQpe3RyeXtyZXR1cm4gWmU9VXMuZ2V0U3RyKFplKSxVcy5kb1N0YXQoWXQuc3RhdCxaZSxsdCl9Y2F0Y2goTHQpe2lmKHR5cGVvZiBZdD4idSJ8fCJFcnJub0Vycm9yIiE9PUx0Lm5hbWUpdGhyb3cgTHQ7cmV0dXJuLUx0LmVycm5vfX0sczpmdW5jdGlvbiBYYShaZSxsdCxMdCl7''@;'; put 'put ''dHJ5e3JldHVybiBsdD1Vcy5nZXRTdHIobHQpLGx0PVVzLmNhbGN1bGF0ZUF0KFplLGx0KSwwPT09THQ/WXQudW5saW5rKGx0KTo1MTI9PT1MdD9ZdC5ybWRpcihsdCk6cXIoIkludmFsaWQgZmxhZ3MgcGFzc2VkIHRvIHVubGlua2F0IiksMH1jYXRjaCgkdCl7aWYodHlwZW9mIFl0PiJ1Inx8''@;'; put 'put ''IkVycm5vRXJyb3IiIT09JHQubmFtZSl0aHJvdyAkdDtyZXR1cm4tJHQuZXJybm99fSxqOigpPT5xcigiIikseTooKT0+MSx6OihaZSxsdCxMdCk9Pk1uLmNvcHlXaXRoaW4oWmUsbHQsbHQrTHQpLGw6ZnVuY3Rpb24gc3YoWmUsbHQsTHQsJHQsRG4sY3IsUnIsWHIpe3ZhciBrYT1aaChEbixj''@;'; put 'put ''cik7dHJ5e2lmKGlzTmFOKGthKSlyZXR1cm4gNjE7dmFyIEdvPVVzLmdldFN0cmVhbUZyb21GRCgkdCksSHM9WXQubW1hcChHbyxaZSxrYSxsdCxMdCksYWw9SHMucHRyO3JldHVybiBtcltScj4+Ml09SHMuYWxsb2NhdGVkLEduW1hyPj4yXT1hbCwwfWNhdGNoKGdzKXtpZih0eXBlb2YgWXQ+''@;'; put 'put ''InUifHwiRXJybm9FcnJvciIhPT1ncy5uYW1lKXRocm93IGdzO3JldHVybi1ncy5lcnJub319LG06ZnVuY3Rpb24gekEoWmUsbHQsTHQsJHQsRG4sY3IsUnIpe3ZhciBYcj1aaChjcixScik7dHJ5e3ZhciBrYT1Vcy5nZXRTdHJlYW1Gcm9tRkQoRG4pOzImTHQmJlVzLmRvTXN5bmMoWmUsa2Es''@;'; put 'put ''bHQsJHQsWHIpfWNhdGNoKEdvKXtpZih0eXBlb2YgWXQ+InUifHwiRXJybm9FcnJvciIhPT1Hby5uYW1lKXRocm93IEdvO3JldHVybi1Hby5lcnJub319LG86KFplLGx0LEx0LCR0KT0+e3ZhciBEbj0obmV3IERhdGUpLmdldEZ1bGxZZWFyKCksY3I9bmV3IERhdGUoRG4sMCwxKSxScj1uZXcg''@;'; put 'put ''RGF0ZShEbiw2LDEpLFhyPWNyLmdldFRpbWV6b25lT2Zmc2V0KCksa2E9UnIuZ2V0VGltZXpvbmVPZmZzZXQoKSxHbz1NYXRoLm1heChYcixrYSk7R25bWmU+PjJdPTYwKkdvLG1yW2x0Pj4yXT0rKFhyIT1rYSk7dmFyIEhzPXhvPT57dmFyIFhzPXhvPj0wPyItIjoiKyIsQTE9TWF0aC5hYnMo''@;'; put 'put ''eG8pO3JldHVybmBVVEMke1hzfSR7U3RyaW5nKE1hdGguZmxvb3IoQTEvNjApKS5wYWRTdGFydCgyLCIwIil9JHtTdHJpbmcoQTElNjApLnBhZFN0YXJ0KDIsIjAiKX1gfSxhbD1IcyhYciksZ3M9SHMoa2EpO2thPFhyPyhvdihhbCxMdCwxNyksb3YoZ3MsJHQsMTcpKToob3YoYWwsJHQsMTcp''@;'; put 'put ''LG92KGdzLEx0LDE3KSl9LEE6KFplLGx0LEx0KT0+KChaZSxsdCxMdCk9Pnt2YXIgJHQ9KChaZSxsdCk9Pntrdy5sZW5ndGg9MDtmb3IodmFyIEx0O0x0PU1uW1plKytdOyl7dmFyICR0PTEwNSE9THQ7bHQrPSgkdCY9MTEyIT1MdCkmJmx0JTg/NDowLGt3LnB1c2goMTEyPT1MdD9HbltsdD4+''@;'; put 'put ''Ml06MTA1PT1MdD9tcltsdD4+Ml06X2lbbHQ+PjNdKSxsdCs9JHQ/ODo0fXJldHVybiBrd30pKGx0LEx0KTtyZXR1cm4gQmFbWmVdKC4uLiR0KX0pKFplLGx0LEx0KSxjOigpPT5EYXRlLm5vdygpLHA6WmU9Pnt2YXIgbHQ9TW4ubGVuZ3RoLEx0PTIxNDc0ODM2NDg7aWYoKFplPj4+PTApPkx0''@;'; put 'put ''KXJldHVybiExO2Zvcih2YXIgJHQ9MTskdDw9NDskdCo9Mil7dmFyIERuPWx0KigxKy4yLyR0KTtEbj1NYXRoLm1pbihEbixaZSsxMDA2NjMyOTYpO3ZhciBjcj1NYXRoLm1pbihMdCxWQShNYXRoLm1heChaZSxEbiksNjU1MzYpKTtpZihZRHQoY3IpKXJldHVybiEwfXJldHVybiExfSx0Oiha''@;'; put 'put ''ZSxsdCk9Pnt2YXIgTHQ9MDtyZXR1cm4gVUEoKS5mb3JFYWNoKCgkdCxEbik9Pnt2YXIgY3I9bHQrTHQ7R25bWmUrNCpEbj4+Ml09Y3IsKChaZSxsdCk9Pntmb3IodmFyIEx0PTA7THQ8WmUubGVuZ3RoOysrTHQpdG5bbHQrK109WmUuY2hhckNvZGVBdChMdCk7dG5bbHRdPTB9KSgkdCxjciks''@;'; put 'put ''THQrPSR0Lmxlbmd0aCsxfSksMH0sdTooWmUsbHQpPT57dmFyIEx0PVVBKCk7R25bWmU+PjJdPUx0Lmxlbmd0aDt2YXIgJHQ9MDtyZXR1cm4gTHQuZm9yRWFjaChEbj0+JHQrPURuLmxlbmd0aCsxKSxHbltsdD4+Ml09JHQsMH0sZzooWmUsbHQpPT57KFplPT57KChaZSxsdCk9Pnt0aHJvdyBs''@;'; put 'put ''dH0pKDAsbmV3IElvKFplKSl9KShaZSl9LGI6ZnVuY3Rpb24gbkl0KFplKXt0cnl7dmFyIGx0PVVzLmdldFN0cmVhbUZyb21GRChaZSk7cmV0dXJuIFl0LmNsb3NlKGx0KSwwfWNhdGNoKEx0KXtpZih0eXBlb2YgWXQ+InUifHwiRXJybm9FcnJvciIhPT1MdC5uYW1lKXRocm93IEx0O3JldHVy''@;'; put 'put ''biBMdC5lcnJub319LGU6ZnVuY3Rpb24gaUl0KFplLGx0LEx0LCR0KXt0cnl7dmFyIGNyPSgoWmUsbHQsTHQsJHQpPT57Zm9yKHZhciBEbj0wLGNyPTA7Y3I8THQ7Y3IrKyl7dmFyIFJyPUduW2x0Pj4yXSxYcj1HbltsdCs0Pj4yXTtsdCs9ODt2YXIga2E9WXQucmVhZChaZSx0bixScixYciwk''@;'; put 'put ''dCk7aWYoa2E8MClyZXR1cm4tMTtpZihEbis9a2Esa2E8WHIpYnJlYWs7dHlwZW9mICR0PCJ1IiYmKCR0Kz1rYSl9cmV0dXJuIERufSkoVXMuZ2V0U3RyZWFtRnJvbUZEKFplKSxsdCxMdCk7cmV0dXJuIEduWyR0Pj4yXT1jciwwfWNhdGNoKFJyKXtpZih0eXBlb2YgWXQ+InUifHwiRXJybm9F''@;'; put 'put ''cnJvciIhPT1Sci5uYW1lKXRocm93IFJyO3JldHVybiBSci5lcnJub319LG46ZnVuY3Rpb24gYUl0KFplLGx0LEx0LCR0LERuKXt2YXIgY3I9WmgobHQsTHQpO3RyeXtpZihpc05hTihjcikpcmV0dXJuIDYxO3ZhciBScj1Vcy5nZXRTdHJlYW1Gcm9tRkQoWmUpO3JldHVybiBZdC5sbHNlZWso''@;'; put 'put ''UnIsY3IsJHQpLGFhPVtSci5wb3NpdGlvbj4+PjAsKFpyPVJyLnBvc2l0aW9uLCtNYXRoLmFicyhacik+PTE/WnI+MD8rTWF0aC5mbG9vcihaci80Mjk0OTY3Mjk2KT4+PjA6fn4rTWF0aC5jZWlsKChaci0rKH5+WnI+Pj4wKSkvNDI5NDk2NzI5Nik+Pj4wOjApXSxtcltEbj4+Ml09YWFbMF0s''@;'; put 'put ''bXJbRG4rND4+Ml09YWFbMV0sUnIuZ2V0ZGVudHMmJjA9PT1jciYmMD09PSR0JiYoUnIuZ2V0ZGVudHM9bnVsbCksMH1jYXRjaChYcil7aWYodHlwZW9mIFl0PiJ1Inx8IkVycm5vRXJyb3IiIT09WHIubmFtZSl0aHJvdyBYcjtyZXR1cm4gWHIuZXJybm99fSxkOmZ1bmN0aW9uIHNJdChaZSxs''@;'; put 'put ''dCxMdCwkdCl7dHJ5e3ZhciBjcj0oKFplLGx0LEx0LCR0KT0+e2Zvcih2YXIgRG49MCxjcj0wO2NyPEx0O2NyKyspe3ZhciBScj1HbltsdD4+Ml0sWHI9R25bbHQrND4+Ml07bHQrPTg7dmFyIGthPVl0LndyaXRlKFplLHRuLFJyLFhyLCR0KTtpZihrYTwwKXJldHVybi0xO2lmKERuKz1rYSxr''@;'; put 'put ''YTxYcilicmVhazt0eXBlb2YgJHQ8InUiJiYoJHQrPWthKX1yZXR1cm4gRG59KShVcy5nZXRTdHJlYW1Gcm9tRkQoWmUpLGx0LEx0KTtyZXR1cm4gR25bJHQ+PjJdPWNyLDB9Y2F0Y2goUnIpe2lmKHR5cGVvZiBZdD4idSJ8fCJFcnJub0Vycm9yIiE9PVJyLm5hbWUpdGhyb3cgUnI7cmV0dXJu''@;'; put 'put ''IFJyLmVycm5vfX19LExsPWZ1bmN0aW9uIE1yKCl7YXIoKTt2YXIgTHQ9ZnVuY3Rpb24gTnIoKXtyZXR1cm57YTpsSXR9fSgpO3JldHVybiAkbj8/PWZ1bmN0aW9uIHByKCl7dmFyIFplPSJncmFwaHZpemxpYi53YXNtIjtyZXR1cm4geW4oWmUpP1plOmZ1bmN0aW9uIGJlKFplKXtyZXR1cm4i''@;'; put 'put ''IitaZX0oWmUpfSgpLGZ1bmN0aW9uIHNyKFplLGx0LEx0LCR0KXtyZXR1cm4gWmV8fCJmdW5jdGlvbiIhPXR5cGVvZiBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZVN0cmVhbWluZ3x8eW4obHQpfHwoWmU9PlplLnN0YXJ0c1dpdGgoImZpbGU6Ly8iKSkobHQpfHwiZnVuY3Rpb24iIT10eXBlb2Yg''@;'; put 'put ''ZmV0Y2g/Wm4obHQsTHQsJHQpOmZldGNoKGx0LHtjcmVkZW50aWFsczoic2FtZS1vcmlnaW4ifSkudGhlbihEbj0+V2ViQXNzZW1ibHkuaW5zdGFudGlhdGVTdHJlYW1pbmcoRG4sTHQpLnRoZW4oJHQsZnVuY3Rpb24oUnIpe3JldHVybiBydChgd2FzbSBzdHJlYW1pbmcgY29tcGlsZSBmYWls''@;'; put 'put ''ZWQ6ICR7UnJ9YCkscnQoImZhbGxpbmcgYmFjayB0byBBcnJheUJ1ZmZlciBpbnN0YW50aWF0aW9uIiksWm4obHQsTHQsJHQpfSkpfShwdCwkbixMdCxmdW5jdGlvbiBsdCgkdCl7IWZ1bmN0aW9uIFplKCR0LERuKXtyZXR1cm4gZHQ9KExsPSR0LmV4cG9ydHMpLkIsT24oKSxmdW5jdGlvbiB2''@;'; put 'put ''dChaZSl7Sm4udW5zaGlmdChaZSl9KExsLkMpLEhyKCksTGx9KCR0Lmluc3RhbmNlKX0pLmNhdGNoKGYpLHt9fSgpLHg3ZT0oZC5fd2ViaWRsX2ZyZWU9WmU9PihkLl93ZWJpZGxfZnJlZT1MbC5EKShaZSksZC5fZnJlZT1aZT0+KGQuX2ZyZWU9TGwuRSkoWmUpLGQuX3dlYmlkbF9tYWxsb2M9''@;'; put 'put ''WmU9PihkLl93ZWJpZGxfbWFsbG9jPUxsLkYpKFplKSxkLl9tYWxsb2M9WmU9PihkLl9tYWxsb2M9TGwuRykoWmUpLGQuX2Vtc2NyaXB0ZW5fYmluZF9Wb2lkUHRyX19fZGVzdHJveV9fXzA9WmU9Pih4N2U9ZC5fZW1zY3JpcHRlbl9iaW5kX1ZvaWRQdHJfX19kZXN0cm95X19fMD1MbC5IKSha''@;'; put 'put ''ZSkpLEU3ZT1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfR3JhcGh2aXpfMj0oWmUsbHQpPT4oRTdlPWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9HcmFwaHZpel8yPUxsLkkpKFplLGx0KSxUN2U9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X3ZlcnNpb25fMD0oKT0+KFQ3ZT1k''@;'; put 'put ''Ll9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfdmVyc2lvbl8wPUxsLkopKCksQTdlPWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9sYXN0RXJyb3JfMD0oKT0+KEE3ZT1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfbGFzdEVycm9yXzA9TGwuSykoKSxrN2U9ZC5fZW1zY3JpcHRlbl9i''@;'; put 'put ''aW5kX0dyYXBodml6X2NyZWF0ZUZpbGVfMj0oWmUsbHQsTHQpPT4oazdlPWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9jcmVhdGVGaWxlXzI9TGwuTCkoWmUsbHQsTHQpLEQ3ZT1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfbGF5b3V0XzM9KFplLGx0LEx0LCR0KT0+KEQ3ZT1kLl9l''@;'; put 'put ''bXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfbGF5b3V0XzM9TGwuTSkoWmUsbHQsTHQsJHQpLEk3ZT1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfYWN5Y2xpY18zPShaZSxsdCxMdCwkdCk9PihJN2U9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X2FjeWNsaWNfMz1MbC5OKShaZSxsdCxM''@;'; put 'put ''dCwkdCksUjdlPWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel90cmVkXzM9KFplLGx0LEx0LCR0KT0+KFI3ZT1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfdHJlZF8zPUxsLk8pKFplLGx0LEx0LCR0KSxMN2U9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X3VuZmxhdHRlbl80PSha''@;'; put 'put ''ZSxsdCxMdCwkdCxEbik9PihMN2U9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X3VuZmxhdHRlbl80PUxsLlApKFplLGx0LEx0LCR0LERuKSxPN2U9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X2dldF9sYXlvdXRfcmVzdWx0XzA9WmU9PihPN2U9ZC5fZW1zY3JpcHRlbl9iaW5kX0dy''@;'; put 'put ''YXBodml6X2dldF9sYXlvdXRfcmVzdWx0XzA9TGwuUSkoWmUpLFA3ZT1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfc2V0X2xheW91dF9yZXN1bHRfMT0oWmUsbHQpPT4oUDdlPWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9zZXRfbGF5b3V0X3Jlc3VsdF8xPUxsLlIpKFplLGx0KSxG''@;'; put 'put ''N2U9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X2dldF9hY3ljbGljX291dEZpbGVfMD1aZT0+KEY3ZT1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfZ2V0X2FjeWNsaWNfb3V0RmlsZV8wPUxsLlMpKFplKSxIN2U9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X3NldF9hY3ljbGlj''@;'; put 'put ''X291dEZpbGVfMT0oWmUsbHQpPT4oSDdlPWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9zZXRfYWN5Y2xpY19vdXRGaWxlXzE9TGwuVCkoWmUsbHQpLE43ZT1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfZ2V0X2FjeWNsaWNfbnVtX3Jldl8wPVplPT4oTjdlPWQuX2Vtc2NyaXB0ZW5f''@;'; put 'put ''YmluZF9HcmFwaHZpel9nZXRfYWN5Y2xpY19udW1fcmV2XzA9TGwuVSkoWmUpLFY3ZT1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfc2V0X2FjeWNsaWNfbnVtX3Jldl8xPShaZSxsdCk9PihWN2U9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X3NldF9hY3ljbGljX251bV9yZXZfMT1M''@;'; put 'put ''bC5WKShaZSxsdCksQjdlPWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9nZXRfdHJlZF9vdXRfMD1aZT0+KEI3ZT1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfZ2V0X3RyZWRfb3V0XzA9TGwuVykoWmUpLGo3ZT1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfc2V0X3RyZWRfb3V0''@;'; put 'put ''XzE9KFplLGx0KT0+KGo3ZT1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfc2V0X3RyZWRfb3V0XzE9TGwuWCkoWmUsbHQpLHo3ZT1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfZ2V0X3RyZWRfZXJyXzA9WmU9Pih6N2U9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X2dldF90cmVk''@;'; put 'put ''X2Vycl8wPUxsLlkpKFplKSxVN2U9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X3NldF90cmVkX2Vycl8xPShaZSxsdCk9PihVN2U9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X3NldF90cmVkX2Vycl8xPUxsLlopKFplLGx0KSxaN2U9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6''@;'; put 'put ''X19fZGVzdHJveV9fXzA9WmU9PihaN2U9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X19fZGVzdHJveV9fXzA9TGwuXykoWmUpLFc3ZT0oWmUsbHQpPT4oVzdlPUxsLmFhKShaZSxsdCk7ZnVuY3Rpb24gWTdlKCl7TnQ+MHx8KGZ1bmN0aW9uIHdpKCl7Wm8oenIpfSgpLE50PjApfHxmdW5j''@;'; put 'put ''dGlvbiBaZSgpe1FOfHwoUU49ITAsZC5jYWxsZWRSdW49ITAsIUp0JiYoZnVuY3Rpb24gZWEoKXshZC5ub0ZTSW5pdCYmIVl0LmluaXRpYWxpemVkJiZZdC5pbml0KCksWXQuaWdub3JlUGVybWlzc2lvbnM9ITEsZDQuaW5pdCgpLFpvKEpuKX0oKSxoKGQpLGZ1bmN0aW9uIGZhKCl7Wm8oRHIp''@;'; put 'put ''fSgpKSl9KCl9ZnVuY3Rpb24gc2YoKXt9ZnVuY3Rpb24gZVYoWmUpe3JldHVybihaZXx8c2YpLl9fY2FjaGVfX31mdW5jdGlvbiBHdGUoWmUsbHQpe3ZhciBMdD1lVihsdCksJHQ9THRbWmVdO3JldHVybiAkdHx8KCgkdD1PYmplY3QuY3JlYXRlKChsdHx8c2YpLnByb3RvdHlwZSkpLnB0cj1a''@;'; put 'put ''ZSxMdFtaZV09JHQpfWQuVVRGOFRvU3RyaW5nPXYwLEhuPWZ1bmN0aW9uIFplKCl7UU58fFk3ZSgpLFFOfHwoSG49WmUpfSxZN2UoKSwoc2YucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoc2YucHJvdG90eXBlKSkuY29uc3RydWN0b3I9c2Ysc2YucHJvdG90eXBlLl9fY2xhc3NfXz1zZixzZi5f''@;'; put 'put ''X2NhY2hlX189e30sZC5XcmFwcGVyT2JqZWN0PXNmLGQuZ2V0Q2FjaGU9ZVYsZC53cmFwUG9pbnRlcj1HdGUsZC5jYXN0T2JqZWN0PWZ1bmN0aW9uIHBJdChaZSxsdCl7cmV0dXJuIEd0ZShaZS5wdHIsbHQpfSxkLk5VTEw9R3RlKDApLGQuZGVzdHJveT1mdW5jdGlvbiBnSXQoWmUpe2lmKCFa''@;'; put 'put ''ZS5fX2Rlc3Ryb3lfXyl0aHJvdyJFcnJvcjogQ2Fubm90IGRlc3Ryb3kgb2JqZWN0LiAoRGlkIHlvdSBjcmVhdGUgaXQgeW91cnNlbGY/KSI7WmUuX19kZXN0cm95X18oKSxkZWxldGUgZVYoWmUuX19jbGFzc19fKVtaZS5wdHJdfSxkLmNvbXBhcmU9ZnVuY3Rpb24gbUl0KFplLGx0KXtyZXR1''@;'; put 'put ''cm4gWmUucHRyPT09bHQucHRyfSxkLmdldFBvaW50ZXI9ZnVuY3Rpb24gdkl0KFplKXtyZXR1cm4gWmUucHRyfSxkLmdldENsYXNzPWZ1bmN0aW9uIGJJdChaZSl7cmV0dXJuIFplLl9fY2xhc3NfX307dmFyIFpzPXtidWZmZXI6MCxzaXplOjAscG9zOjAsdGVtcHM6W10sbmVlZGVkOjAscHJl''@;'; put 'put ''cGFyZSgpe2lmKFpzLm5lZWRlZCl7Zm9yKHZhciBaZT0wO1plPFpzLnRlbXBzLmxlbmd0aDtaZSsrKWQuX3dlYmlkbF9mcmVlKFpzLnRlbXBzW1plXSk7WnMudGVtcHMubGVuZ3RoPTAsZC5fd2ViaWRsX2ZyZWUoWnMuYnVmZmVyKSxacy5idWZmZXI9MCxacy5zaXplKz1acy5uZWVkZWQsWnMu''@;'; put 'put ''bmVlZGVkPTB9WnMuYnVmZmVyfHwoWnMuc2l6ZSs9MTI4LFpzLmJ1ZmZlcj1kLl93ZWJpZGxfbWFsbG9jKFpzLnNpemUpLENuKFpzLmJ1ZmZlcikpLFpzLnBvcz0wfSxhbGxvYyhaZSxsdCl7Q24oWnMuYnVmZmVyKTt2YXIgRG4sJHQ9WmUubGVuZ3RoKmx0LkJZVEVTX1BFUl9FTEVNRU5UO3Jl''@;'; put 'put ''dHVybiAkdD1WQSgkdCw4KSxacy5wb3MrJHQ+PVpzLnNpemU/KENuKCR0PjApLFpzLm5lZWRlZCs9JHQsRG49ZC5fd2ViaWRsX21hbGxvYygkdCksWnMudGVtcHMucHVzaChEbikpOihEbj1acy5idWZmZXIrWnMucG9zLFpzLnBvcys9JHQpLERufSxjb3B5KFplLGx0LEx0KXtMdC89bHQuQllU''@;'; put 'put ''RVNfUEVSX0VMRU1FTlQ7Zm9yKHZhciAkdD0wOyR0PFplLmxlbmd0aDskdCsrKWx0W0x0KyR0XT1aZVskdF19fTtmdW5jdGlvbiBsZihaZSl7aWYoInN0cmluZyI9PXR5cGVvZiBaZSl7dmFyIGx0PWZ1bmN0aW9uIHgzKFplLGx0LEx0KXt2YXIgJHQ9THQ+MD9MdDplcyhaZSkrMSxEbj1uZXcg''@;'; put 'put ''QXJyYXkoJHQpLGNyPUUxKFplLERuLDAsRG4ubGVuZ3RoKTtyZXR1cm4gbHQmJihEbi5sZW5ndGg9Y3IpLERufShaZSksTHQ9WnMuYWxsb2MobHQsdG4pO3JldHVybiBacy5jb3B5KGx0LHRuLEx0KSxMdH1yZXR1cm4gWmV9ZnVuY3Rpb24gdDUoKXt0aHJvdyJjYW5ub3QgY29uc3RydWN0IGEg''@;'; put 'put ''Vm9pZFB0ciwgbm8gY29uc3RydWN0b3IgaW4gSURMIn1mdW5jdGlvbiBybyhaZSxsdCl7WmUmJiJvYmplY3QiPT10eXBlb2YgWmUmJihaZT1aZS5wdHIpLGx0JiYib2JqZWN0Ij09dHlwZW9mIGx0JiYobHQ9bHQucHRyKSx0aGlzLnB0cj1FN2UoWmUsbHQpLGVWKHJvKVt0aGlzLnB0cl09dGhp''@;'; put 'put ''c31yZXR1cm4odDUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoc2YucHJvdG90eXBlKSkuY29uc3RydWN0b3I9dDUsdDUucHJvdG90eXBlLl9fY2xhc3NfXz10NSx0NS5fX2NhY2hlX189e30sZC5Wb2lkUHRyPXQ1LHQ1LnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz10NS5wcm90b3R5cGUuX19kZXN0''@;'; put 'put ''cm95X189ZnVuY3Rpb24oKXt4N2UodGhpcy5wdHIpfSwocm8ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoc2YucHJvdG90eXBlKSkuY29uc3RydWN0b3I9cm8scm8ucHJvdG90eXBlLl9fY2xhc3NfXz1ybyxyby5fX2NhY2hlX189e30sZC5HcmFwaHZpej1ybyxyby5wcm90b3R5cGUudmVyc2lv''@;'; put 'put ''bj1yby5wcm90b3R5cGUudmVyc2lvbj1mdW5jdGlvbigpe3JldHVybiB2MChUN2UoKSl9LHJvLnByb3RvdHlwZS5sYXN0RXJyb3I9cm8ucHJvdG90eXBlLmxhc3RFcnJvcj1mdW5jdGlvbigpe3JldHVybiB2MChBN2UoKSl9LHJvLnByb3RvdHlwZS5jcmVhdGVGaWxlPXJvLnByb3RvdHlwZS5j''@;'; put 'put ''cmVhdGVGaWxlPWZ1bmN0aW9uKFplLGx0KXt2YXIgTHQ9dGhpcy5wdHI7WnMucHJlcGFyZSgpLFplPVplJiYib2JqZWN0Ij09dHlwZW9mIFplP1plLnB0cjpsZihaZSksbHQ9bHQmJiJvYmplY3QiPT10eXBlb2YgbHQ/bHQucHRyOmxmKGx0KSxrN2UoTHQsWmUsbHQpfSxyby5wcm90b3R5cGUu''@;'; put 'put ''bGF5b3V0PXJvLnByb3RvdHlwZS5sYXlvdXQ9ZnVuY3Rpb24oWmUsbHQsTHQpe3ZhciAkdD10aGlzLnB0cjtyZXR1cm4gWnMucHJlcGFyZSgpLFplPVplJiYib2JqZWN0Ij09dHlwZW9mIFplP1plLnB0cjpsZihaZSksbHQ9bHQmJiJvYmplY3QiPT10eXBlb2YgbHQ/bHQucHRyOmxmKGx0KSxM''@;'; put 'put ''dD1MdCYmIm9iamVjdCI9PXR5cGVvZiBMdD9MdC5wdHI6bGYoTHQpLHYwKEQ3ZSgkdCxaZSxsdCxMdCkpfSxyby5wcm90b3R5cGUuYWN5Y2xpYz1yby5wcm90b3R5cGUuYWN5Y2xpYz1mdW5jdGlvbihaZSxsdCxMdCl7dmFyICR0PXRoaXMucHRyO3JldHVybiBacy5wcmVwYXJlKCksWmU9WmUm''@;'; put 'put ''JiJvYmplY3QiPT10eXBlb2YgWmU/WmUucHRyOmxmKFplKSxsdCYmIm9iamVjdCI9PXR5cGVvZiBsdCYmKGx0PWx0LnB0ciksTHQmJiJvYmplY3QiPT10eXBlb2YgTHQmJihMdD1MdC5wdHIpLCEhSTdlKCR0LFplLGx0LEx0KX0scm8ucHJvdG90eXBlLnRyZWQ9cm8ucHJvdG90eXBlLnRyZWQ9''@;'; put 'put ''ZnVuY3Rpb24oWmUsbHQsTHQpe3ZhciAkdD10aGlzLnB0cjtacy5wcmVwYXJlKCksWmU9WmUmJiJvYmplY3QiPT10eXBlb2YgWmU/WmUucHRyOmxmKFplKSxsdCYmIm9iamVjdCI9PXR5cGVvZiBsdCYmKGx0PWx0LnB0ciksTHQmJiJvYmplY3QiPT10eXBlb2YgTHQmJihMdD1MdC5wdHIpLFI3''@;'; put 'put ''ZSgkdCxaZSxsdCxMdCl9LHJvLnByb3RvdHlwZS51bmZsYXR0ZW49cm8ucHJvdG90eXBlLnVuZmxhdHRlbj1mdW5jdGlvbihaZSxsdCxMdCwkdCl7dmFyIERuPXRoaXMucHRyO3JldHVybiBacy5wcmVwYXJlKCksWmU9WmUmJiJvYmplY3QiPT10eXBlb2YgWmU/WmUucHRyOmxmKFplKSxsdCYm''@;'; put 'put ''Im9iamVjdCI9PXR5cGVvZiBsdCYmKGx0PWx0LnB0ciksTHQmJiJvYmplY3QiPT10eXBlb2YgTHQmJihMdD1MdC5wdHIpLCR0JiYib2JqZWN0Ij09dHlwZW9mICR0JiYoJHQ9JHQucHRyKSx2MChMN2UoRG4sWmUsbHQsTHQsJHQpKX0scm8ucHJvdG90eXBlLmdldF9sYXlvdXRfcmVzdWx0PXJv''@;'; put 'put ''LnByb3RvdHlwZS5nZXRfbGF5b3V0X3Jlc3VsdD1mdW5jdGlvbigpe3JldHVybiB2MChPN2UodGhpcy5wdHIpKX0scm8ucHJvdG90eXBlLnNldF9sYXlvdXRfcmVzdWx0PXJvLnByb3RvdHlwZS5zZXRfbGF5b3V0X3Jlc3VsdD1mdW5jdGlvbihaZSl7dmFyIGx0PXRoaXMucHRyO1pzLnByZXBh''@;'; put 'put ''cmUoKSxaZT1aZSYmIm9iamVjdCI9PXR5cGVvZiBaZT9aZS5wdHI6bGYoWmUpLFA3ZShsdCxaZSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyby5wcm90b3R5cGUsImxheW91dF9yZXN1bHQiLHtnZXQ6cm8ucHJvdG90eXBlLmdldF9sYXlvdXRfcmVzdWx0LHNldDpyby5wcm90b3R5cGUuc2V0''@;'; put 'put ''X2xheW91dF9yZXN1bHR9KSxyby5wcm90b3R5cGUuZ2V0X2FjeWNsaWNfb3V0RmlsZT1yby5wcm90b3R5cGUuZ2V0X2FjeWNsaWNfb3V0RmlsZT1mdW5jdGlvbigpe3JldHVybiB2MChGN2UodGhpcy5wdHIpKX0scm8ucHJvdG90eXBlLnNldF9hY3ljbGljX291dEZpbGU9cm8ucHJvdG90eXBl''@;'; put 'put ''LnNldF9hY3ljbGljX291dEZpbGU9ZnVuY3Rpb24oWmUpe3ZhciBsdD10aGlzLnB0cjtacy5wcmVwYXJlKCksWmU9WmUmJiJvYmplY3QiPT10eXBlb2YgWmU/WmUucHRyOmxmKFplKSxIN2UobHQsWmUpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkocm8ucHJvdG90eXBlLCJhY3ljbGljX291dEZp''@;'; put 'put ''bGUiLHtnZXQ6cm8ucHJvdG90eXBlLmdldF9hY3ljbGljX291dEZpbGUsc2V0OnJvLnByb3RvdHlwZS5zZXRfYWN5Y2xpY19vdXRGaWxlfSkscm8ucHJvdG90eXBlLmdldF9hY3ljbGljX251bV9yZXY9cm8ucHJvdG90eXBlLmdldF9hY3ljbGljX251bV9yZXY9ZnVuY3Rpb24oKXtyZXR1cm4g''@;'; put 'put ''TjdlKHRoaXMucHRyKX0scm8ucHJvdG90eXBlLnNldF9hY3ljbGljX251bV9yZXY9cm8ucHJvdG90eXBlLnNldF9hY3ljbGljX251bV9yZXY9ZnVuY3Rpb24oWmUpe1plJiYib2JqZWN0Ij09dHlwZW9mIFplJiYoWmU9WmUucHRyKSxWN2UodGhpcy5wdHIsWmUpfSxPYmplY3QuZGVmaW5lUHJv''@;'; put 'put ''cGVydHkocm8ucHJvdG90eXBlLCJhY3ljbGljX251bV9yZXYiLHtnZXQ6cm8ucHJvdG90eXBlLmdldF9hY3ljbGljX251bV9yZXYsc2V0OnJvLnByb3RvdHlwZS5zZXRfYWN5Y2xpY19udW1fcmV2fSkscm8ucHJvdG90eXBlLmdldF90cmVkX291dD1yby5wcm90b3R5cGUuZ2V0X3RyZWRfb3V0''@;'; put 'put ''PWZ1bmN0aW9uKCl7cmV0dXJuIHYwKEI3ZSh0aGlzLnB0cikpfSxyby5wcm90b3R5cGUuc2V0X3RyZWRfb3V0PXJvLnByb3RvdHlwZS5zZXRfdHJlZF9vdXQ9ZnVuY3Rpb24oWmUpe3ZhciBsdD10aGlzLnB0cjtacy5wcmVwYXJlKCksWmU9WmUmJiJvYmplY3QiPT10eXBlb2YgWmU/WmUucHRy''@;'; put 'put ''OmxmKFplKSxqN2UobHQsWmUpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkocm8ucHJvdG90eXBlLCJ0cmVkX291dCIse2dldDpyby5wcm90b3R5cGUuZ2V0X3RyZWRfb3V0LHNldDpyby5wcm90b3R5cGUuc2V0X3RyZWRfb3V0fSkscm8ucHJvdG90eXBlLmdldF90cmVkX2Vycj1yby5wcm90b3R5''@;'; put 'put ''cGUuZ2V0X3RyZWRfZXJyPWZ1bmN0aW9uKCl7cmV0dXJuIHYwKHo3ZSh0aGlzLnB0cikpfSxyby5wcm90b3R5cGUuc2V0X3RyZWRfZXJyPXJvLnByb3RvdHlwZS5zZXRfdHJlZF9lcnI9ZnVuY3Rpb24oWmUpe3ZhciBsdD10aGlzLnB0cjtacy5wcmVwYXJlKCksWmU9WmUmJiJvYmplY3QiPT10''@;'; put 'put ''eXBlb2YgWmU/WmUucHRyOmxmKFplKSxVN2UobHQsWmUpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkocm8ucHJvdG90eXBlLCJ0cmVkX2VyciIse2dldDpyby5wcm90b3R5cGUuZ2V0X3RyZWRfZXJyLHNldDpyby5wcm90b3R5cGUuc2V0X3RyZWRfZXJyfSkscm8ucHJvdG90eXBlLl9fZGVzdHJv''@;'; put 'put ''eV9fPXJvLnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz1mdW5jdGlvbigpe1o3ZSh0aGlzLnB0cil9LHZ9KTtmdW5jdGlvbiBaeHQoKXtyZXR1cm4gRnRlfHwoRnRlPWZ1bmN0aW9uIE54dChjLGwpe2Zvcih2YXIgYT1bXSxkPSshbCxoPTAsZj0wO2MubGVuZ3RoOyl7dmFyIHY9QXh0KGMsZHx8bCk7''@;'; put 'put ''aWYoIm9iamVjdCI9PXR5cGVvZiB2KXtmb3IoZD8obD1udWxsLHYudy5sZW5ndGg9PXYudSYmKGEucHVzaChsPXYudyksZis9di51KSk6KGEucHVzaChsKSx2LmU9MCk7IXYubDspe3ZhciBNPUZ4dChjLHYsbCk7TXx8ZTAoNSksbD92LmU9di55OihhLnB1c2goTSksZis9TS5sZW5ndGgseHh0''@;'; put 'put ''KHYudywwLE0ubGVuZ3RoKSx2Lncuc2V0KE0sdi53Lmxlbmd0aC1NLmxlbmd0aCkpfWg9di5iKzQqdi5jfWVsc2UgaD12O2M9Yy5zdWJhcnJheShoKX1yZXR1cm4gZnVuY3Rpb24oYyxsKXtpZigxPT1jLmxlbmd0aClyZXR1cm4gY1swXTtmb3IodmFyIGE9bmV3IEl1KGwpLGQ9MCxoPTA7ZDxj''@;'; put 'put ''Lmxlbmd0aDsrK2Qpe3ZhciBmPWNbZF07YS5zZXQoZixoKSxoKz1mLmxlbmd0aH1yZXR1cm4gYX0oYSxmKX0oZnVuY3Rpb24genh0KGMpe2xldCBsPWMubGVuZ3RoLGE9W10sZD0wLGg9MCxmPS0xO2ZvcihsZXQgdj0wO3Y8bDt2Kyspe2xldCBNPSdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZ''@;'; put 'put ''WmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSEjJCUmKCkqKywuLzo7PD0+P0BbXV5fYHt8fX4iJy5pbmRleE9mKGNbdl0pO2lmKC0xIT09TSlpZihmPDApZj1NO2Vsc2V7Zis9OTEqTSxkfD1mPDxoLGgrPSg4MTkxJmYpPjg4PzEzOjE0O2Rve2EucHVzaCgyNTUmZCksZD4+''@;'; put 'put ''PTgsaC09OH13aGlsZShoPjcpO2Y9LTF9fXJldHVybiBmPi0xJiZhLnB1c2goMjU1JihkfGY8PGgpKSxuZXcgVWludDhBcnJheShhKX0oJ3Y3I2FTWFVuYERAUTwsejNeWCZrVTJodHo4ey9wWURtbj97JEpqejJyXz9KbF4rNm5Gbz14STwmQjlGQlYrd2I7WGF8cW9SemdiZUtzQlNefl14enY+''@;'; put 'put ''PXwucT8oTTw4R0Q1R0wjS3tzW1M0IV5DNEx5ck5hTEtvUmtFSmtMTGx7ZjBWOTA8O15RcHVneTVBJSkmKVo6c2c6aC59YDh1dVRbV0JBKHkpdXl8QlVIJTghRSpgZjF3Ql94WyZANXFHNSViJn5qZSY3RGJKJExselVDPldeLztmaHs8fEdCeSIpfmwlc18xYThtPmQwWFBBc1Q5TGJXKGlqQmVO''@;'; put 'put ''V1dbQF5tJCg6dn1ve1FrLnRofj07KDFhOF4xbX1Nfns8NT9TUCheKVsyTHNgTWB1OSl5Wn1iL0pEfjZGTHRac21eRmx8a0hYLDRGVXpxKk9hej1CXzZzNylTZDRMXUxjfGx4enZoaD82dEQ4JU5dQCY/OGlPPFVQc1s1SnEjWlJnWn1rM0RxSD0lMlFEe0R0Zn1vd0VKNklkcllHPlZ1RSRNVndd''@;'; put 'put ''LCZ+TyxxTGlCJjVtPyFZR2dpKmlXKyJRUHkkP1Vaa2NhPjBnRG8hN0d8fmc1ZEt8WzMvezV+byQwdiVKbDE4MkFxfj16ZTh+RXpIZV9bUURjWTF9KGUsS0h1MVU7KVhYV0B9MSZndCx+YDJwLzp9WGRZbiFOSGZdaTc2XlgjUXF5b2dwPyU3JFhzeSxaJnpfIzJnOyUsJW45XnlyTl92eSgrMVNx''@;'; put 'put ''YGRofV0mbGFraEx9ciZ4MzUqYnN6W1t3XXd+N3xRNWxyK3J2a3lpNVR8PVohSzl9SDw9cjZTX0Y4ak5TKX09Ul9TXy9PZ346L2o8ZjhEP0JfbX0iNDN0aCpnIVUmSlczJFFkQD11WyptWE5jcHs7dWMmSl1PUFEhMCRmVzgpY0pRNmU6azVAIiMkNHM2PFA2TmIwMEFxJG9jW00mQ2pIQ19iN3Nh''@;'; put 'put ''YFtoRi8kdzVXdkczdEgoLmIoS2VIUndYdy8qdT49XXIjcExXPDdfbFFUbigxPmhvQWV6Ynl1Pnx6P3YySnI9RSVjImZAOC5dTSpZVSJPR34xY2IwQDgzKlswMTl3JTtdbW90aT51RHM/cD1FJmNIUXdPMj95JnFZI2QjY35xbkRSd09AYTteeVN1Qi9fajVJSFp4YSRpRXMoMGptPFlzRUhtMF1p''@;'; put 'put ''V3tjMnJBLih5KXNATl9jOmdOal1KazMmWikjX1sjTl5FWmJPIyJgQnw3eEtmPl42VHhMdzdEL155anJZVTdiaWcyc1RATEBBW21hRXM7TSxiP202dlUxUnd4b3ouWnxBYStgfnFUXUAvO25eeSpkMiNwQ0s5MWdYTkdQbSJuWUFWIWp7Snk1YXx8cHZvX0RqN1FwNDB8K05mUVZaN0R4fj93bFFw''@;'; put 'put ''IUNVTmtscEU7YVo6b2NATSEkOy8/YVMoaDJvbkBFNGNIUUpEOHNRUStDcTUsTjg6SWZye09uPjZeJUpuO1UzPC8uPG00JlhPVz03T1NbLEpVNTdSKC8mYjA3XVsyQUZaeGFIcDM1YXg7SWVzVEBGMnNTaVtoRyY6fntJcHNMWUUuejZUfEU1eGE/RntPV1EqOF5EJSUyZF1oWEI2RSZtVTV9aWtN''@;'; put 'put ''Xyt2Zmp6LnYwd1c3fmBwV19tJElTInw9VCM+L1pWfkI4Rkw8NkBOUH0uZ1cxK0w8NipjWGdTYnNjRUpWN3hvbFNFNiRjI3gocD8kSExOKUJ8bjZhaDlQX2orKiUqJG9dM1ghdkVMXV0kWF93NmQ2SWwhZEBTNjNIJnsvZEYzM2U/OSpkeElXN2hkVUQ4Xl56XXQmM0o/YzA2ImI/bUMoQyg1c1lV''@;'; put 'put ''biJ2fVE6Om58YSF0bFY8M0BOU3tdI0I0eT55NV5bfi5eeUhqOSpge0M4SkwrI3JuK3ZLfS9mP1M+QCY8NEAxT0JXSFduZy50fU83d3AwVDlMNTxQMTh3WzJtOj04XV8hOy8rbC90RVppaDghVlQzKkBDM0hQUH5IaVovcV17cDRlO0tvP0B1Wj0zeSNlenM9cFpNU0M1W0J+KGA3XiRqQG5UZ2Vq''@;'; put 'put ''MzkzaD5DeWMlVi9ReSVuREpRYUIzeykwdkMzOyNLa2kuQTZuOEc/VyMobCR8Ijxhflh+SlhtTzY5eUw7dF9ZdD9Xd1laeGE5PUt3ODkiYDR5QXs7PWMmZy5tQFRlc0dTbm0iZ2Q6WTV4OXxCNUJNYVlYNTVMYEhBRC5mUzJga2N2JWxzI19rXXRNUXtzc1klIn53Uzp0fFs4U05+SE44WDU3OXxx''@;'; put 'put ''fjhlbGwiVj1XezsraCxELjRiVmdAe2lVci5YOUNoO0luezp7O0leLmFaR0xTWjlwVGdTfCpVU35FS1E5KV9fTF55K1tBL2g6UlVRNU5MRXlxXjFjbWRSUzp9Vi9DOEZqMSF0PlZLe3l8Xk5eXV9ORyl3SXZJQ09vOztsOVgpWyZkfm5wREZmPU95LkNmOWIpIj08Zzttbjlfa0NuT31aOWFZSXI2''@;'; put 'put ''OXVoNHVfU1Q6aDdkN24+Tm01NkBmLkJkIT5ZWjx9a0tAMTxfYTw1SDhiazdkI29KM2JwKjlMZS9TXSNuJChWbmczJkxbTXFjWFZUczdEUUdwU1A4SSQlMlJMPVBTWlIkSHplJXc/LGBFfHt8bCM6TyV9e0NzTXpBcF96I25qeypzYmtITWRLfmttOEFMODdLOSNoTV5wWiIrYHlVYUl7Oy9oR0Uo''@;'; put 'put ''VTtlW3VhRFZuOn5xeytkOEVXJGVYVVE1bzI1WHBHIXxIMlBwMzgjLExkLnRqcFhNPDp8YykwLC9wR19kNk1DUzp9KEs4e2RZY3t7KTlUSFQ7ZFYrOF9qTDZ+YUlEKGQ7V2VocmQ7V2VxJCpBXTokSCJvPGJsO3N9amdIL2Q4XWV4aVNVY2R6I3tAVmVpX2Jkb0RmPnlabFoxbGN+M1Y+OGF+aCl7''@;'; put 'put ''JiZWZlFuXVt2KUtHfDRJJEcpYHp3QSRIZyFvL08jVktYNnJmdExFMDhdRXdtVDZWcl0yIzV0O0dZTT1hWD0vJEhgNyUyUiFzOVl+ZjIpTVZnXl8/JiVDZyo8blJaZUoyIS9dSFVadklbeW9uUXIuVUM+fExAQ1RVQHxgTCo3QGJ1P14qY35nM1JVV2pUUXJXRjcoMyVzXj54JWNGZz4mQ2c3OWg2''@;'; put 'put ''ZWwlY2lUQmVhRnEqWzBCflYrRFszcmgsX3Z5ZTV+fD9uWltHX3gkPk0lbkdXVEIwezhDLyw6c0lSSzYpUll8IUlBXVRGZz8vbVpYNEltWjp1U1Yub1czMDxGTD0kZEJMX0xlcFdtQjo6eGV4NVROZUY5OTZ1RCMrOFU0NXxMd1tJcklaPlR5JVU7XWB1JShKK2U8ZFsja3k1YEQ+VEhTe3B2THJ4''@;'; put 'put ''ckhwfElWNztUQW5bTEtmckVhOV5leVBkXU05Pmo6cTMsSGw0bTcyOUlxYUIwVy5kOF9teiFbSzE+ZCEoPXNldjpgKnZ5R30rbTc9emxhOHg3JTA1VD1rXSZKSzYyMyJKcy9SZzIvW3Z3cVluMmpmfj55ZWx5SmYvKUQ4WzNbZV1lYj5TbStGcVVJPGQiYjtHOEQ4eH5Zd1R2UVpEWW81K0lWcUtz''@;'; put 'put ''UVZ+SFJ9OmpsU2hfTFtiTDZITTl3bHlORiVScyxzJiw0K0YoQUZHJXR9alpPcCN2UVpfWGs2ZFBiJXJtInpoMzNqQXgjWUp9cCxsOCpLeWZxa1Y9cjk5TFc3ISNhJX1QUD0lY25tMzdUVC9kfjhsKXdvMl1lXVJ7bDVfSm08KlA+V20pYSomN1R9WXclbH5vblF5O2poXzIyRE9iPkclNSJJODVT''@;'; put 'put ''MHk9ZWtwVS89NlddJkZGeWk+OXhyKnk2di9TW11NXWNwS3pfXUhMdFkmaGYkK0d4KWd+Kmc5JjRyU211WkhQfDw0NWZ3UUBxKX1gdU05cVlkfEM+eFV7ImczPWwwW1AjfjJNSnVPZkp1MkgqVEZneXI+XUtfK3ZadTA6K2xCV0s1dVhiWDNTfGF9e2xdQ1EmbyFNd35SM1phOipbKnpmX2E4NUE5''@;'; put 'put ''WnMhQ1VAMk5+eHkuNWBkemk3VVs6Tz1pO0NwckZTWkRCUnojXTg2LEZMXSRFK0RXMSs+dHo7Rlk3OS5sJEVwZCs1JTwocGtETWRMc0RRZCRSZm5fXW1UfnkmSm93elJmcFQyV0sxLyMsfShuU2o+WCQyVUR9TlAxNlZgKTQrZzYlPHkuNHVzZDdvVyFhKSVKOCU4Uk5ZJV40ak1LYGJkQEAvUW9I''@;'; put 'put ''XVFES3EhYUB0SFo8WmtdWXZjNHM2cWldPzpjJTpteHxDe3ApSmRGVz1VS0lvfDxyT2lhdH0/YkokOmNTYmY3WEtzZzd7KH5zP0pEc2NmMDs7QHFsciVzLlp9JC8oaFdDQC5UWllpaztVfigrKjhzRFFdbHl6bDcmKEpbU2VtKGd0b14xK0Qxd3RxRnhsRDhzKHs4VmF4cjVPYjd4alJjYWxBSzt7''@;'; put 'put ''d29IUGh9LiNLOHRLbTlmOXQzP1lQKlVUcGddW3p+SSZhKWUodEtHXkZfYCpqNzI+P09dNipeL3lnW2U8USF8cFdqIXhGJVZ1cCUxcyMsPzVtN2UreXF7aWBTRDl1fGBmPjNbUFU6S35NakR0Ul9veTNvVnZAcH1QdjVWWEU+MX1gayhLeypXPXlyQn1eWUJkNjVObGx9YGsuZk09S3hZWkp5eXdX''@;'; put 'put ''JHJtUWQlOixQNDlYJTwpP0dLe00jKCJ2PVBYJithfn0kXnkmJnkzQSV7LiRKZ2BHSmMyRXFkcmArSUpiWjgye1pbVEE+OV9aK2I6Ki5DMjx2fVo8XSZ3WisiYTJ+RStfXlp2UlpqTTFTckIoNTdUU18uZH4hQzE3Xj42cEQzfTtCfXhGLEQ/a3hNamljWk5mZChucHVRR2N9Z192bT9UcHo9PXNj''@;'; put 'put ''cW9KKjJta1hrMVQxTCo+bFpofWkjOkN4eSYzb0g0dnh8PEplKWIvZCE6bVYzXXJAfU5eN0J4KGJGbzhWbTxnT0tRNDl4M10zailTfjlPR3Qme0lKYyY/KlY9Zz4pYGNYL0E5I1E5JVpTOTF9MSVlakNlX2JoVmZbbm90aU41Qjo5ZVtQU1pPZG4uPWpMayI/Vkw1Y0RfNlY5T2swYE5mLElGWmFm''@;'; put 'put ''RyRwPGNBOFBFMiVfW1FEelZYXTo9fU5YN3A0YFBqYFh5dFkwPndseT0jPlVmP1M2TT4/UGcqTjE+KU5wYVhZOiQoVkZXTGRvWzUsXWhSLmNIIiUwQlJFNEw8byZpPSY0TDdyc1Z+W3IubH1EYlUsOD10ZTZRaGlaayp0K1k9QHk4N2I0eiovdmFnXWtUJFlkJCxeOiIoMCwvRUZLI20iJiw2KSks''@;'; put 'put ''RmdQdn53dyY5KzhuMHlmdz5hdVlKY19bUncqbF1eOmNIJGY3ND00SUkzayhzVjJxVj02Ui94QU9nLGlXLjJWa0pqPW1NXkt8JUYlaGJAa2dKcX1sWm9DNnJGOW0jezQ9MDBUMVZ3VC5kOEV9bko1NUQkNi9IZFQwPSNuLkd7Wzhdfm0kLzoyQGgyR0woJn4kZmVCJjtUXU9wMm0/ZjF9eylLQyht''@;'; put 'put ''aUBmZ3NhZjk6WjpIfixHXTgmVnNpREksNiF5VDlyRiNTITovbVp4Ji5pQG5lVi5hfihLfT4/ZDFyN2w8XnQmLG5NSnk1bDdoXSE9IT5PI2g8KHA9RSNjak8uXmpbO1RUXW5+cCwzZWJaPFRIUTEuYjd4JSZ4OmVKcVs1WHBuLkwjbTdJNVU8dV8/R0wqbUxYOTBKcFJtU1dlLmgiQURJNjZ1MltR''@;'; put 'put ''ZCJbd2plImhCQj9FYj97ZTkoRkJqSXFxczgyKEtDfUtGQl1ReXRpeF1QT0d8ZVN0SUQkLkx2fDkxdGNEOjpnWS9ofUFXSGlDQlAwKSZ3YXEiQXtIdW1wSVl0SkVpJiJdNihLQ1dpZXVdOTJ0d0RmN1Z4NyhvQztSR3UiO0RpRUQ6Ol02YFE0IkNGL0gzUDsjcTFjdFtFeiNWbFZFOSh1QzBvdTJf''@;'; put 'put ''OSEibUYrcDU3YzwpeSp3aWU+aTMhKytGTiJEOCZjPHorR3VoUnBOU2p5elhDPWtrRWFqdClqRiZAYmYxK1d1d1UlKm94IlEiKHJCIldoTlRqYk1jRmlLfGUuKFdDJk1pYV1RbiJrRCUxfmxOdCN0JFBzPFk7OnkjQy4oO0g3UjJMMEYwIl1hYmpmTTxGdGZJVFRqWFhTTX5SNCE2TF5JQi5WQjNS''@;'; put 'put ''Xig7QzR6cUNUajt0OEZsM3JDVGplWHdTXWcmKlRqZ1gsTlZkZjw9eXdEdztwTlVqX3RzTD9qL0k/eSt4Q2V8alVqcVh4UG4sM1IpTERJYG5jZlt5TkVgPDJ7VWowWGJSc29mPF15bEU/IWJyZWZeeXRFRT9UdlZqOFhgVDU3ZDxfeSpFcEBmO1ZqJVgxVEt1NSE/TEZLYS5QbUUhc3VacEkkPjF8''@;'; put 'put ''eVdGOV83UFF0dlh2VklvZDxnInZYLzM4cDpjOlYiKDRkRFA7ViQ/T1BvaTpWYmB9REdvOlZEKTllaEI2ckhCKEp5fF4zOHxTQ0guXUtGP3VQQixfS0c/PlAqNzpWdil1eDAldFtafHFDdkBdS0k/bEtAKXNGPHI2QHpRW3xfS0o/KktoQl8yYFR8X3lGY0d7M2M/KipgV1ZaYnxiLDZYb1k4cnV1''@;'; put 'put ''I3dxeTFfWEcpTytINV9+STJMXzNQP0VOKW8/Vl4/VU5BMD9WaClnbHRkOHJddSYzcEY0X01IaiVyRjNfbUo4Wl8zVT8vT0ApP1ZyKUNmUylKN0I/IVA1NThyQnZ+JnBGOF81SVldM1JNekN4Y1VTOnY4aSFwdjpSPVJ1UGlpeEVqL0xQRCF0diNTJml1UGppL0UzPTZdRCF0Kj9KbCoqMEdpR0Ze''@;'; put 'put ''b0dlQ2YqaVNGYF4/REYhOENDcjsjQ2ZpJXsiQUp0ZUZ4cWdab3tCXzUxbFJRQz9UUXU6V1FDaW9nUilLUmk8UmR5bixDLyE6OiphSylFUSh4d143RntnPGlqfTM7SCFJUExJfiRzdVcxfiR3dWhle2djKUJNO0RUOU9pb3B9cXxgWTxJV3shMztmL1Mpb0p4aj1aRzwxOz9UKXpLIV0vVyFDPFkh''@;'; put 'put ''aiNCJElRSCVBSVZ1YEo8RSIoLkR9UGBmbSF5U3BuKCheIi5CaVB9Z0JnTkZFRy8uYHZLMnV1U1AraUxJMmdpKT9TW240OzZuaEUmZE84e3FrfHZpLkY2KlFQTzpUOVM/ZEgkcTNlN25uYTBJIlYkfX40SXdmTUBDIT92O1JYNDA/TGlHWCFedmdNSkRPWmlTRGdpRyV6aXFDTUt3ZVhaSixldzJB''@;'; put 'put ''USN4fk5YWFdSYHZgaSNKTCV0Y2B2blh4SkhlQUlgdXpQTWY2OnQ/TFJHRklbdSt9WCtMO3hOUkJ4MVglSkFqdjtSWDxJfSE+JkM5aUJPP3gxKCpKUnRFL0gzUGhoZkR5MTR1MGJjOU4pfnd7SGZJZlglR1c8Y3soXjs3UmRLd1FNSWF2SG5lNiFzYzBpKUZEdU5nKkNkPixqbWc3WH0wLFR8Zmw2''@;'; put 'put ''Tj9dSUMpY1A9JEErI1MraWtOYG4vRTQ9NSo1OyFucyxfVDd6VTl1UiZ4Xm9PZW5nOil1Uz89SkklbmVGRnsvbDQxOHVqUE1pPVp0Z2gpI1NCWEsxM24kREQ4Ol06JHt1TGdQO2xnfT9xSVQlR3gxMVE2RVpKeVFLaFVLLitlflg7TDZFdGxra35YWEdvdjNUOzdBen12IylASlpvezJIMHBxT0JN''@;'; put 'put ''TGI7ejouRllOVEZEcTppNipBRyJ2PFgrSzE7QCRRVjQiPkJ1ZVZ4P2hddClEL0heT1hyW1FaIjREfkhYcl45cSI4RCk4Il01KHxCcW0hR15RNHRfREFTelhfOTIifkUqbChIPGh+IkxDJmkmYTEofEJtUUtdfDtQdDdDbUhDZSZxc1BbaCNBO0lwOW9vXVE4Ik9GWSQqJV5RUSl0SDFWZzd9QFJq''@;'; put 'put ''SVh6Sj8/ZTwseTNDRjheRDNSUnoyeDRjVHY9SV15eEUwI2g1PFZhYEpJKnVxRjBfL0lEVV5LYT9JUk1AeThKKU1LdF5JOEwxYCRFdWNkYnAwLHJnUyk4TE5kVDl8bmcsZlNqUjNlM25fRCMuRUU+JFhOSUNuQGR4cz92blBDbWp6LF52QUA2SX0hNjpZIUUqekw0Q2FWdEIiNC9GKFl5RzsxKlt9''@;'; put 'put ''KSRML0RzZkhedD9ARk12YnFvZ3JpLFciQmxrZHhaIWw0c1leYn5Kci9qLEIhZUNSUC4rMzs0bk1CaUVlakU4M1J3dHtCSi5edmlsTW9dUiRTcylSI0s1XWBZdSRRSWl6QVI6a2FsX25LPU46JlN1KEchYUNmS3RAPXRKa25XSz9GbGgraThCYzVPc1R8Q0lNTmdJbTssPkdmYDElOWkhOnRMc3Zt''@;'; put 'put ''VHx7RXpaJTltPF0oZm86UzVyZkNWQyRRbSFmKTtrR2UxMzZObWhIKVJEaSNqP05nc0l7RUZDdyQoKVQpdiJ2QlksX09RKjM2Ky55VXoxfShAYkd7bm5+aDc5VGQ6bUV5UTMlZSIraktNOX1wSit+S3d8Qzp+LnJVQS45dz17PExhdS55QWVCOCJnPWNBbiFFdjIkZUFuKUZlOFgvel0pZWpKPmNB''@;'; put 'put ''UHlDTjhBIT06dSRebDNENGk9YnE/I0FjUiZ8YElFMkxpWSVtN3A2M0xCPGxsWmcocWVSdE4iYSg3ZUg5aTpVPGFhMWNIMXdjSH5TQiZiZ2YydyYlazFjNEwhbX5hO2VIN2FfRUx+Uy5IbCVJe3M6LDN8ZCY3ZmgxNiQ7d00xNmI6MlN+KV5halEoO1BdbnBrLDFqNk46aGM2Z2c5aT46V2wxY21x''@;'; put 'put ''Q1Y9PFIuUWhjOmMyJklQbC4yJDZkKCE7Z2R0e11iMTY1I1QkQWU+Tj8wOUlnKkt8cmQ0aGgybT55ciw0OU5jW0k4NVE4VGIyPDp7S2l1el8pLEpGQTI6biUyeUZmfilVUndBRDsqeHc5QU5YeHJyQHJfLiUldE0lLmNBOClfZ2dlbDkwO0EzVyxjUT0mRVh9RV4lPSp8ejhgXXUkaHU3L2BVSjEo''@;'; put 'put ''XU13SUB1QFBqVWMkPyQ1R0dOL0o7XzdQIT9FTlUjO3QkOy5Rcko4SVBjW0E+JltNOHloYzdgbXNhLjtwaldCSDhHajBwW04yRC8saVsqSjpdRG00Q1M6MWFRNU1FKUI4b3M0Szs9TktpYj52MDxsM3d8cGhLQV93VjF0YCh3PXslQVtdVXwkaUpDJHJZLCYuXlFHQUd5ezsmRis4TkNXNWpGQjJ7''@;'; put 'put ''cF4iLGdFVlo1KzQ+SXxEJXl8TFNLfDA0LkJFJSIodV8mVj1iUHxpPkxANjl6Jih5bDwxJWs8QkJHOD1Ad21XXmd4JGkzSFo8b0RYdXwuX3ZEZyQ5aGxjJGhsdX0lJVJLUV0xKVFpNjY+O3lubj5CbXNbamgiIyw+eEY2QSR3KSU9V0lQI1VdIytPNnladTp5fFcwczIuM217anl8VVhXT1Mud2dw''@;'; put 'put ''WUU/SkUrd2RFelczQ1gpcUFPdU5BYnJbS34lKlNGNF5tWCRDZSYoMjZiPUl5TkUyO1hpNW0qaSglWUpgQFcvLkxpREdAeShjO01tJTV+WFVxWHZCS2xfSCwmQGlPWV5HYCo/ZVlkOGRFS1ZFSjc1eSZLfEtHX2Y2IV87RzNoc1paej5WU3ozVEAiUSFATmZERnpSZVB7XjlvK0txXUYjNnV2PVRI''@;'; put 'put ''TUEmOnB1ZWFNSCpCLGJVMENeM2BYRXBLU09AaTxEYW9SSFksMls8YS5vMFJuRyQ5a25bblNoKU1NVSteek16THh7WGt4eF4hW258LnJ7eXJCdGh7fGZrS2xGL3prKlF8ZV8laj1nMGwwcE5wbm9nOXp1aHNLM0hFZCo7XkRGOjQ9OnNTLy81UFo+MzR+ZF90WioqaERYVn40YWxgRjEkPXp9RXwr''@;'; put 'put ''LH0uJlZrcCpsLnQhT0JASTlVIUJuUiJeTTx9fChsei5DcVVxLFV5QCppKnQ5eHwpfEZ3RkFTM1p7RCUmb1RfIzZSSys7S2BOcnksIzlucDEpSDFWI3ZSc3shQ1h8NDcsRyJ2IlF3JklTL3BeO3pMNWpeJEc0ISh3WGB7UjNyb2grXUV1NTFMfT0jVXpDP1IwUi5WJXk7b1kmeyMuZ2x3OkhZK1lC''@;'; put 'put ''R2BKcllWfThnQl9LRiVlPUt8ZSQscD1DRythRGd0UCh3eWcxR0BueW5gLDEhPTQ1bl4ob25MaVZvVF5TMSFseV96ekhpdW5dL2MhS3VHelJINC4lNUtTX2ExeHFbdDpqaXFTTFM/X04zXi8zaD1YfCFsKWF2RzNEVHQkQkd8JVklTnB3aj0pJDp3aD1XcWx2aD0oVEJ1aD1zSXVYZkdtRDZrVHN5''@;'; put 'put ''S2ZUJF4zQ2ZiQ3E2dE90JEI/PHsoPnRRaiZCbURlZ090JEIlbX4+YChYITxbMDdXS2gwQ106NkdxbEB7TUxPcWxKOzs6UThWS2gwMjRgN3ovNGIxQ2NxVG8/Ik52RGRgKztCTWIkT3phfFc5RVJjczJacF50MyVgY0x2SU9nM1VhTWJdIndHM24jOHtvWTIjQjokT0NHWkNmJVdMeVFhaDJbJUxh''@;'; put 'put ''TjVUUURhS05VPG9VTmR0VSJbL0JmSC9CIU41RyZXRF1dWmRFUjhKT2teMk5rKV5XN11dU1p3eTVFZDY5PEhpNHZEUGZLNWE7NGJfWlQmKCEsLywrbHc+JFdLXVt7U3pdZHBmYlg9RWdNeVY3c096YXtkKCEubkw2UWIsOXlHO3pkdzI/aTxVYSFONUcqMk4qcDBTbz1BajZ6dEImKkZ4QjNpdT9k''@;'; put 'put ''REV2X25lbixeNCo2RnlnfnEvdC5VJX5xXjJMbSpWdDlidGd1aGVKbjVSNnc5PlMmLz4zZlAueCYvc3FEIXo2TFQ2cW8jJH0oTUE2Q0xCMHReKXh0O3glP115aigvWlQ8Ojkkb0wrRllGeXw1fHVfeXJzO2NfPGpvd1dwe0xzTClicTtoMXxMJDU8XTVYW2p2YExjVT0lOlYrdzFGRDslSzBzJEYm''@;'; put 'put ''WWB+KChILyZWLEtSLlNmN2h8bWcscVE4M3diOXlqTXJ9aDM/NSN1Yih3LlJlTCYwPXloXTo4KiZ5WWA8O1R+MElQbDI+Tyh1cUtUbHxWZ0BJbHs8U3Q8cl9KV1kiNysjUlExflJSV00oV0EyKykzO2pQTHI0SVU/SW91XlNXJV4wS1gsLjBDRlBZYGk6b2sjQlBUdjFANDRsWkZpVjdESVs+TmY+''@;'; put 'put ''OD5adSwxUlZSXW1iInt3MVFSWjN1dj4oVGtiMXU1NnZfS0BaeGRIVGlZWF1VaW4iVkFWcEVEPHh1KkYvWFdkMSNSYHteWmYqdElFVz1dd2c0Vlo8YTA3JTovUmx5OlJtZlVeX0hYTiJhUjFEdktCbk11fCxXPEFnQFB9SnxDeEpfU1JtbkpdY0RCNns+TyhiTFhDUVM0QzpSbEUvYX1YTnIhU081''@;'; put 'put ''aU9OSDF3fFdOSDEkaEp9SyR7UTckcUIrZlNSJlgpdi43SUJMSVJKSU5lWnY1PXcpbWNpVk1FYD9yQDErNyIhZEs6NDUiL2c+WiF9Vnl9O2Y8ODovL0c2eV9uKStgXllDdXk8V01ZbzJFQT1mIkRSd2h7S3xOYnl0IXh8Ljc9Q1MkZkczQnQyU0k5NmxWb0UiWCRMJWpCW3I3IiYjcGo7V1c3Nk54''@;'; put 'put ''Q0JYSTMjMzY0czJlS1FFLDpxPiNUYjNLVTxoUXB8KTZCa2FaIlR7cHc/TSZONDt5Uj5uQEc4ZXZaPXdKI1VPSkRNVUpYaFBHYnlWZTV6TWxwUWQ4bF9ieV97W1p8VHBUOSZwT29FalRARjlNbWdATDlHc1laQExGc3docEwwM3RHIU5ENDRKLyVtLkpvIzgubjNTOTBfMVA9dWFHc29saChJckdi''@;'; put 'put ''OT4hXSVleW9ofTNOR35Kc0VIZyxndlZ1PS5fdjckcUwlPjRdW15NdEkkPy9meCh7dCZOamNRL3UrbT0jM3VYOUZZfnYlO3pXeTVxaitsSm9vdzFxQEdbeFRESGhbdFsoWHFUNlNjOE0jLjUlbmlWN29MVV0zTlNaKEpUPU5ebEpPcG4oPEVhTkFqU1MydXdgRVVRLlQxUD0kRDltTzVjVkx5TUtG''@;'; put 'put ''ZjZeIjJyRGsyUGNUe3E3ZFU+PElKNXE1N3dDNWRdLll6QT5feyhNUH1ofHJFK15zS3NiamtlS2N4bDZ2fDc5T2kwN2s/MDdweU5rYylLZCwpTGREX19pRTIxdzdyI1NgMlR7Q2hsXTp6cVRdejtoODkwVUUhKTQ6SVc4IXw2fWpoOnZzWl48bl40Tls0PDw7VTlxVFg6JSMrOXRkYzF5fElwTDZT''@;'; put 'put ''bz04MXwvaEQ7ZSspNCk7VGpSKl9gayN1bjxAZVZ3fTo0dnVhX3oqe3ZONWRSXXZFJkYwVTsydl1qcy5dPFZUREp9Lz1QLkEzamVQPDAuRDdQKTpWYytxVFklV35rPWdrb2IsKFBRSXtud2FZKmM/PWY5WncrJmNbdjt9QlRpZyRwJSQqVi8/Kl5rWD5CZXt0dDRadTQubnBGODhzc1l2ekM4bT4l''@;'; put 'put ''PnlycSN3R0xGO1Z0WywxU0AuR0YqPmo1dHwsMElMPSU6VzRjWUlEMXZmWU81UDlhTz0sYU8pMk9LOUkpTnovdHwreEhTflspbEh5c1d6Vl9wY1tMKDkubSVLfD8zQ3pMWzRzPyM6TnA7K1FANmc7a2Y/TSI4QTRvKX5RR19kP041K1BEdCVZZVohTCpLbi5oan0yQmJIWjxaX1MxaVZlKGI8YnM2''@;'; put 'put ''QUUpdXFsU3BLUCpgdjB3NzhiWVhVMDBdbE1kNFRkSytXMDBdVmJxZDEoP0RZQDk7IWIwMmBRSTZUNVlgeW87NVdFW0loVDtrdG5NbzpTYCJjRmg3fEJ4Tm5CIkJeKFhdYDgiTT5LMDdrP0ZGK3sqdDMvSm87O2M0Z2tPNyxucSNxZW4/YUZXN2trVXBLUHVkcH1VZVQjfDkveDFMXTc3djpucWVg''@;'; put 'put ''MFh+WHRrM2M2VTh9LlhZZUJWOE8rITpsZj9JMFY4MChWcGUxc2Naayp6NixPLEJWZjkzPDRNYiFiL0hGISNTZCMxQzYrUmZfW2dEUzBpIUBKYktpdSk0LkhTSltlSzt6TCZ2aVFlcE4lM1F1aWx7JEh8bU1YUnJ4NVJqP3dLK11WeD01Pl0kZXIiMkx2PyxPZz9NVTtBZSxmUytXQEJucitFWGxy''@;'; put 'put ''UWY1MkNzfClCOCM5QiUpeWg+KVE/P0RzIVplPSZnWSpoK3NVN0MpOn5xIVJwcjYvX1RrQl04RXZmR306M3k2JHRILm01MitTbH4oIXk0ayt1O3ZWWjNvNlhXbHhQbU5nQCMiSDJGL3tCfmp2YGROOGdDaFptV1crSDs5Wj49ejsuRywqZH0xUm5SfU5YQHk4YXNae2tnSTE0d1RpOVJ+TSZNfUY8''@;'; put 'put ''bVloT19udkprJVNVbFFvckwhTGZHZlA2OWElPExSNCpaMD4wSktKflk7cWdAT3pBNDlDK3BTQHk4V3NaZWBfYE5SYEtYI2pJOEBoeDMhMS87anQ3PSlgSnwiV1YqNz5TX302eHo3SGhKKEklbGVTY1hxYkEye2NGVzRtdSUsVnlmZ25Pb29sMzRVelQ8NHp5Nl00QWg8L3wmPElQcFJTTktWd0dK''@;'; put 'put ''VU99e3k9WzJqSUZVUkUsJDElKFUjX3gmLCUoTCRDS2Q9ZTAwWH4memxwOUgwdiNNaWUjTSNFeGxzSEF4b3VDTlJ2VChGd3NORGJyIzF2VnY2ZTBHKDdjfXpObSQoblNqUGt6JmJ+UjtxMkhKbGFCLzRVYHRoOjx+RFZbN11TUFN2MTM3aHxEfih9PmgoKSt6OWgjYzNWMnd0NGguJTFfTzpNcyF4''@;'; put 'put ''Yj4+KG8odXozazV3bykiQzN2R11wKSIsSTBpPUdkWSZ1ejN0Yk5oeURXMD5xJXkuWzFeYzNxczdUPDpfYmRZWDJIKjliTDBlQFdoeShYXXV4TlAzVGErVVAzVFVuUDl9WVYwSSV2PnVfVD4xQCttX0tWPHV5JW4hdUpeaGN5eEFEUXMwNGt4L19ZdUJuZDNlIVIoL31+S2xhUytdfEl3Lm9sYGVO''@;'; put 'put ''az5zKH09WHMyREI8S3AhWW9ffCVMamJERCVebypCen1ISkJHMTU3dFJeTWpiREB9KlVTTz55I1YpNzk2YDYqcnFdLnd8WU83bTRDPl4hbTV6ejQ+RytDLEBLZ2M5LzZxMzxoLkxfe1heR1tjO0o+bWhzb1I4dVBYVEVPRjRfYTUzRGtuQHAxNHtBPkVBJnFdRCwrfW1WJDRuLDd+VGZTUTw1N3RB''@;'; put 'put ''V3ZRcWU3VHNjO1dTZHFBZygwZG1zbHE0RGZ5TiwoKWdkcUFwa0YhYTR3eCZ1eUs8ZFpiMXpHc204cFRVWGJPfWgwcF8vczB8MiFXUj9wQnc6fWsvakpfZnpRY1ZZTXYsKnx6V3BoYmQvSCxmZiNgSFFMUlskaCVud2txUzBfYmc5O15lOTReQGJyeCwxMHdKMkdhQT9ZfigyYTlmT3QrVXxPPE17''@;'; put 'put ''ZWF6amVNdmo9T0UwLzhrMCheQGJ0WWZVYTJsJlpTMUBgK2d9TGshMSM/Tz55ZnBUMldJN0E8Sjo6YUQ5VUlsbDFrYEo4MEc8WkE8XXtRMFhMdnwsK1BPRnBDSyR6dXFWKXd0QSwkNVZoeCw4PXk4ZHdJZEk+RjxPSlJvWnBaZChtWHE0RWJBL3xuOkwxa1o6YHtkX0hlVHQ4cUV4KHkjaTwrRzk2''@;'; put 'put ''azIlXSw7dS90N2YrbmlbJSVdPyhvQ3goeWZfIko/RmlqP1UkeXAyRWcrL3ExaCxeQ2U/altxKXEzLEp4fXJhRFNqZWhYQ1lEWjN1VVsvc2lAZmFzRWxnX11eSj1NVVpRMW9EVT5qQDIlLzp3RTkqZmpRbzdNOlFQciZRPD9BLl47SjwkcSZsdlM/SHorMX04RWt2OEBUanxJaUAzQVE7ImFdcDZq''@;'; put 'put ''Q25kUHY8JHlXUHBaISRgXXVrPi4oSj1ARW8mTEExUjNDS348aXoubCtDJDtQbmMwJUZJelckOGJSYGhdS0shWjxGTiRxUlZvOS9BWUF3b09wO0d7JUYiRm4vcFoiMkNLcDsyWUxtbXNRajxMNXBkLyVqfENlTDo5QVk+PzhNM1lBd3YvLntrKXtkQCw7VD97JCR3SDF8OlRkQlsmXzhVeilMMnR9''@;'; put 'put ''RCQ7dGx7WzJaVGZue0ckLmdMOW97RyQ5eFk1VnJaZXxwenU4OXQhe0AscjciVXAhXixKQUI8JVklfCpoN2clZm8kI2U/MzdjKUNXLkwhOiRgIkdLN0h6fis6KmJVM1g8czcicjBqWVM3X2x1Z18zMG91eWE4bU1KPXFRTSkzVWI9Ri4pVDJZR2xAe19GenlZczlSdkZpenVWO2hoIT8qfmxXPXpz''@;'; put 'put ''d1JfeXtvJiVYZyN4cTllfG1QVmd4eTUrK3A/IX5fejc3Qj1FfSkjbllIY3BPZzwqXjljTTM7U3QxSC9yZ2UsXjxSciVTaTFINzZMQjVXbnpkeFttenxKc0FWT0QjSlosPXtzSXFMSCI/M21Fajc7eV5BLF5TW3tIXXtoVU5FXVYoRj9LQGwoXi5fOGhbTGVBVyYzVyt5WmRdYSFyV3xVY1dwOiQ/''@;'; put 'put ''W2NFbHxtRnpEbDJAbXd5P3woNX07SFpqPkYlU0FzXWNFZzJzKzNuNCFJVjMxLy9UP1RqO2NGYW5AKzh+KVtWVXd0YT5xfjBLS3I9YzxoVnR9bVQ5UmQ3cEo0VS5RX0h8aTRjKUo1Q1ZgX2tAVDk6M3l9d1s3dlUzcWtdRig6eTl+Pi9qfFdmTzcxPnkzPSlFSVR2Zmp9RnkoMlgmKTw2VShbQzJM''@;'; put 'put ''aXVscWB2OWI6Lz1IOn09ZS5TUHs0VFE/flpBXlJkfVgoJWh8T0k5QFVAZ0gpVFJrfUh5JSRoWGJNRlNifjFQM2Y4TD9jKnZpPmFFRlB+Q3l3amorLD1VbUQoSm9ZZCZaQUshRGs1M2hfOTFnRVNkQyZkakw5PktpfUY9aUBdVnwuZCsjI1ZEanoqd3dabSo8O21BWnspISVpJEd3S3kkPnk7PFBi''@;'; put 'put ''ZEBTRjdiOkh8TFI8XkZ2I2hoOE1VY1t4Rnx4LjJEK2wuM1c3Snp8VlhuWz8zd3BCLzM1WVo8R0NwSnl6aGIqeW5vZ1RvXzN7eTxOQn4yVFFvInZ7ez86a358VTl7cFd4cksjZmhvXnYkWlVtc14yIzl9bl5FT0A3cGhRWGZgW0RWKWBnRF9hRz0iY2skZ2FncGE2M2A9RkxVSm8xeTFQZXNwdVNH''@;'; put 'put ''SUUsZi5wYkc2QS5DMl8yQ0hpZV5jPFtnKkZGJTshPCZOdi5hdkB7dE8veTlod2I5fjM5VzRVOjJxRHslc1Z3V2pUW09nYD95YSs7SXdlfls1PllrSWw5OGFYYXFdQ1EoPkY8JnEsZCNtPlF4IS98Ql9Gfj8wKz9dRC58MnJ2IURAQmN8I2FoeF9IMXdTWTl3W1M3dW4jVGI0NnIsMk1iZjRFUFdx''@;'; put 'put ''eT02THw3fjI1b1ZpOzZ7LFQyXkY/O3t2MShWW2lxJGs+LzJubFl7QjRvJFJdW1dXcDYkeVUsVTg3VUBiWUs1dyZLfCglKFU1e0lOPUddOClMJEpROGFiRT9SOkpidllPNUdzQHVVO0JlU3ZUZVluRGVTNVowPTVOYjM2TkhMR1dNSWxrO3h1ZTArVnEpVltxKVFfOG4rKU9GbE1CW0J0V2l6SEBC''@;'; put 'put ''X3wrQVFZTyR5V1UwY2VrfiNoMklsMnJzMVk/ejoqIlFKMmNeZCxLWy9PKHVkfik6V01hKCsuImkxVT1XV3Nad1dTUFVHJUwlU2VqezssPz1wWkJ0QT59VDFtNSUlQSpnSjtgNH4pSihLakQhMzp2Nlh8fTpRJVNZa0hrXjN2SW1Hcl1BJTZoXkwkRStxVDEmQj1tVCJmb1prVz4pRCZiKEdKeTEo''@;'; put 'put ''MTZMNFZtaCZ7fGc5JlkoSVNEYnA1JDpnOjoqbEppYW09SDssX0J2PVs9Qk5FMHUyJVY9Q3pwcjVwT2Q+OT96OD1Cay4wPWxGcUR+RTNFTjtdUV02NmBjLC4/bWNmITticD0yTjUqSFFYZGMxbTtzcmxLUVE+fiRbb1JTSCYyfmk7LlspbD8zNFpbKXpvLmYhKWVbRCV6KSU6fW9CNlBrMTx5N2wh''@;'; put 'put ''cj0vRDdoOSxYZVlGY1olJk58MW1SX25lVF9RcEY+PzY7L0w9UFI1MVVlXjsiKVB5PXhyTV17KWxLN3N1eVc8clJYQ29KS1FFXV0wTXNVK0l7WytxVTsiMnE6e3lATGlHQ2J0VjBRMjRWZU9efEZOYlFdfjFuaHZpYkV6WiU2aUYsM2xgQGIvTHNeUkBkdn19R3xNWEVNTjJVMV96dVtBUEAxOVc7''@;'; put 'put ''c0BWT19jMChSUEZNS28/QHdFYjgqMXQrIioiK1d2TGxFNHI9THUjS2tlflVMY1VAODpWWXhveHUxfitzKTlUTGl+cTB8L0BJcEV6dHckajBOUEU6Ti9Bdjo1dVg4KU5rWmxgR1pqOWxRbG9gc3FPYiVCd1JPdislOnxyUyt+bHhrSSRpdEo4VmlOezFgajJINEAoenZpdStSQWd+azk9S2V1SGF3''@;'; put 'put ''VzpwWkcjTVlrVzRuNTNdOHQpZF5VfXEwUW9INml+Y15VakZqZHtIK0IjM21FO1VbQ01zO1dbVTI6d3ZaRyNEIyVJQjlyY344L3dCOD8qXl8qKXZVI19qPzw/UkIrWDVePmhRSDI+N1YxTDQudXFOak0iIkcudzpKKn5kPSYoM1pkKSpaUCtncXR+QHJ9ZVJXYWdDUUFXbXlkMFsiW00zdjI7X2JM''@;'; put 'put ''UCNGbl1oRmVMJUx8M1dlO1h2bkY7YUtLSnRNWF1AYiY1d2ohO1M/WW1HNG5lJnh8QCt9QSMrXn4hdl9paTslNyxXeVorbEZ3cWQiWGN+b3p0VEUlVSxXPkVOSC9na08lTllJdHZbbnN1Qk5DNThbc2pJc083SEhgUzc5Yn15Jm5NQCJEXzM/fVtwfDg4Zn1hPGBsXSV2PDQhUjErMl9LenhXRShf''@;'; put 'put ''RGVQeV5jVT83OUAvKitdZDdja0o9V2lQYnJ3fCttaEtATSQ3Myw2KlJPU0BbSiEhUjxxJT96Okk5Zz5eJjJbYVBeR0xiLjNCLjNuPCRiflVVXiZQeD1oRUhnS0k/b2lOeUNfXjhSPVhUOXNobkQ7WHk1WzRzOiszP2QsTFUoT0pgXXpUdCUvKTttMmszTDRrcHUkYzhyWnhULiplS2JmODFFdGc5''@;'; put 'put ''d086ZkN0Yj4+ejwyWCk6MSZdb2M9LEdFamdWbyQ5L2Y6THFuV1Z7eGd6clpaRkAyKlU1JCVPfTg9b3tiMkFdSVFfb1J7JDtbdzgyLz9JeHhbWnVAcThuTVV1MHM9RkZXYyliNWVrTlolUFI/R3wlZ085VTRMIWQqZzl3dUtYOVBgLlM5LzFsYkprSmxZMWxeP1VAaTU7cV9eIlZvOz5nXllPcl1J''@;'; put 'put ''JmdPTCtKVT1fcnkuXyM9XWBiMyUrWkpjV2xeRjZnZEVRQFtXI1VwTzYhImdzTDIzVDtxOHxwJGlQaCxNWDhreSFaJWBrdzJvT3xMUEAxLn40PEZzOC9SX2l1Tl4/VE5eKjEyb308RVc/bSVVQW4uXX17UjNzVTxkUkliejBbMHMlMGFiNV9mM1Q3OGRrZShSL1tUWnZANVVGU1RjPyU3aEFGeTZE''@;'; put 'put ''SUAxcldXbkMjOTNkViw4eFRzYmRybiNzKlRDJXk9diQ4UHFdTStXemp3WFEqY1tZNV1aMS83PUJZWEszemd2eUdqJFpNfDxvYURkWykhTUguaXc/VyR9c15JYEtGW14xPncvTUsvWzRofFJMKjVNKkN2NWAyRHVPOjxUQ3lpLkRwN1IkTWxwLlZBMUJidj87L1ZFblIkSCxeWU4ofiNyMUZHJXdm''@;'; put 'put ''Zzd3RXwycn1hS1IuSnBdXnlyX2NoX0s8OD0yKzR6TX0icjhuMmMuVFQ6MSNXJCI+NTVrMWM8JnhbRmlAbnJbP2Z2UVk5VEkkPW1VXkpWYj81QFc6aHleeipzc2pibihsWVFsbElgZlNmZiMrMGl4ZjlGWy9LXUU1RXpRejdqWiwja1QjUGhDUzM1KTBaL3NdVV1bKnx6fTl8ZSE0M0JON1hFPkhZ''@;'; put 'put ''SEglaFk6KjwyPys+eVQ0REFxW0pIWUhIJVJZYkNldltbJFduX14/fHlHRVZMTklUT3pVT2RvcC9GeCZjYitSazpMe2ozUlNjfTZWSXRURyNYK207Mjk8OXg0UChmRjlmQW5NQyg9eyRPOVt8PGA9VFFoQE06aEdhWn44RXJaQyZsc2xmUVR0VDFRIkYuUi80K1p8YHBWL1lDPDJ5ckVLLkx+OFBB''@;'; put 'put ''OllTcFZaLFRPP0p8I2ExYU9pJk07RCFUbns/eltwQkxlTn5ZQDdBcWhsazJVbixWKXkkQl5tY0xZRjk1MiVWZ2dsQExmcCYuITkxNnQyVC5TazJNMGhDSDVhJFkjKldNcWhXTVNQUCVNS2p5LGRIUj45VC5vQ0tvTV5TWFg1akpDZWw5aDsrIypxTjV7dDVEVGdJJVFTbTtEW1s8aVY0Z2pkKiRe''@;'; put 'put ''VXlUVm9UPiZ2Pz96fFE2TzheNDM6N3EpMHJsfHZHdmQ9ajgrTittdFEpZzByIkQoWFJrMDxGLlVtMVVZVzpXbU1YQmFLWzkhNHduY11VZTxDPUU1IS5nW1NMRlJvUmZ2ZzBKRExaPDdYIkw1Y1dEOS5qQ3RGWUt6ME1iWCpRdGF+KjdhaWY+KDNpIXAqLHZjJHMpbWFxe0pEUnRdeEdCYH1eaU5S''@;'; put 'put ''Om0vTTxDSFc5LHJDQF06T3dIdnE6PXxvSkB3UFVXJVpgOiV3fXd7Z1ZwTm1JPDJhLiliLztyKW9NWFA8Tip4fE5iZV5ZZG9lbDAmNDF8dy9BbVlhbmQwLHZIeDcjWkw2TF5PfktMYDB5eDlpO1UzPCF4TF4yKDsvW0d3ZldnKSQ0WXU/YHhxYXF4cGAyVW5SR1NwV3Y8UDJIV2I9dHAwNXtvRyF4''@;'; put 'put ''fUNzS3NEKFdrVks9IV8yKCEydHQufUs/bkxsci51SStGQExQWlc2PFR+JEVgaHxBITNuVF5ZOE05PE05b2dDUDtEenhlXTc3JHBaL09WZ3pnYll0cXRQOWkmW2VhIVMwZjNMN1RbSHkufWVTUlZjKTVTOC5eIXhoeCNCPVladmw9I01bZHldL1tpa2BbWDl3JGlNfjZkP313fm51Kkw6Nz02L2Zb''@;'; put 'put ''aGk6NSxKRXNncGk7TVBtc3dwKl5ITW1wWGtXcEpdVnc3Py43QVVvMj5YVUgvJCVTOy9ISnAjX3tnMnVFIysmOm9jfl1ULjlAPm5aVUB7KEtWNy4hfUVsMl14SCEsWjc3LDMzWE41dEtPc0ApcmBAL1dGNyhUOVk7PDxUNTcqK01nN2FtVlJpZUp6WklsbmBPM25YXTVAJC83TitdfD99fEkzRCEs''@;'; put 'put ''UWJtOCYzSTEydnFJYFsrU3pRPDRUfXhtfG1lZzc8dl9BbVYlK2dWMDJZRENVX3kpJWxWX09TM2pNIVc5e1dtd0MwRTQuR0hjanIwfCQ0PHw0eFh1Yk9gcTk8KnkmMXAxNC9STW8qNUJoYi9Qc2U/c3dETEhxLGYmbHsuTXVTQ1YwNClfaj5TZHV5JjFaaSt8UnNrM15CLzZSVHZPUlhrc1kpIUQw''@;'; put 'put ''OCU7cmx6ZmJXcDYsWGNzW1RpNS91Y0FWRXhkN3B6Q1BCWj1sdytALHRdMTc1OmFaaFJYNUxtUGlzWTpbbk5vaHNZL1tGVE1WTEcqPXNrP2Z+dyVWUmBOfDtbLjJYNlV1XVMxKTI3R0pBRnJGbF1Ic05FaXdLWVZLTU5iUTlbV1JuRmBxdXtEfkgmSzo3M2Y8PS9oMTl2JjM8NDxiNVpMUnAwP3El''@;'; put 'put ''Qi9QYVMwZzk5TnlbZEJJSTs6N29wfXlnWTFkVjJQY2BPXXl+TFFsa1MrUS80ZHBTeTNZIzN5TDcwUnVxQWkkbVRCdjpAK2gien5lQzQvbGxaViUuZ1F3cHltVDB9TFc3cmhpQjI4PXFXaF1kJDhnLykvelY5L1spZG46c0l1NH0lWmtkVUhRQE12UytkZyV+RkhgNWMuTjRbdztBPjNse29xJF8w''@;'; put 'put ''Vn5EV2p5QzZIWlk4YypuSnBlZFhjVzksNDtGelckdTZTdGNnRVZeYXZvUnMlOmMleiRnMixuVllCNlhwfWhAPEtHJmExYGdSTi44QHF1IV4leWxGNjcucEBvcU1rcFU9WXBbbj1TUlMzIzw9ZTA6ZSRoUD85WHYuVWw5OGZzSyQiOjZgdiNgL1clZCRnMms/X11reSxkNFgqdn1gJmEhKFlFT0Ra''@;'; put 'put ''ZWhyWmAxKlljTkV3SDhxO3F0eGlJQG4jUyJ3eTd0JmtTJE1rbXxmIzpUbF5bWlY/fG0jK0dFbVNZYyxRZn5JcVglRU5IbEQqaSw8Nn55fnl+eX55fnl+eX5iPkRiJXc2NV5NT0lAQis2SV18PzhyX3MjN0BWLjElcVthQ1VdYWciPEBGYFArUlI0RmNWcT8kPzlZbnFSUndGY1YuNGRvTlYoNy5P''@;'; put 'put ''SG9EJVomUjc2Q3dIL2VsMHh8LH09byJ6fktSO3A2bXl5MTBqPjhKfSEjN2ZRcChfRXQ7XkhWZF1zVmJeLzlmQFNVZSVkOH0waj8jTlJqQ0RAbX0yYmptPip0OUZXTEBwflgwckpLdkUlVUEmdTpTT0M3O0BJU0IvQl85djVYYjdDRD1RKVssNDlgb2k+bzFVXktuMSt2S3ZNe0d8fkkmWSh1LH1e''@;'; put 'put ''e2coKDMsYDFSe3wwVVlMJixSQCw0SjZkUE0xQjpWUExJPkVKXjB3MVVrQzBLRjl1VjxVaHxvSXBUYVI3YiVyK0Noa2BzZl44djRxXylmdWI5RX1lYGgoQmQjPmUjZCxzfU5bcCVfZ31bZXJ+Ml0+YClWPUB6NHJwXSk4eVkuRUEraG07UDw7UHNobTdQZVZAaW1MNV9IakJLW3ZsRnIvT3hwfSwx''@;'; put 'put ''fUxvYCJ5SGB4fENyLl1QW1pJLjE8TmxLSCUoUmFeRmAxSi94VGx3Q2tdR2R2Z203LCk8OyFgOWoueFs4dntORnohOTwmU0xvYGlgRWFmVj8ucHJIe3VDdikzfD5mJSxucyhhKSRQeD1MOzlUXTA1OG9IUjNXOXFfQVV6Rjo4VzlwSEV4JHhxZV44ZyVsJllVJns9W0M4YX04PUI7Z2w1cnReOH1V''@;'; put 'put ''emFwTltgXjAuYjdpfTA9KSFmYkgrPFBOVElscWJRPnVYJmA5dmw3WilaRkBPRmA0LmR5dSlrXTI8JkNwMDQ9UVYid3k3ZmtySTkzay9FXWlkcUZ4eVorISN9SXIhb056RXwlfUFzVmd5JkNDdXVuUlF3WWRPWSF3Xi53bDxNSDszMlVAUEZIRUx4dlJgX0BIbyZuLDEiTGVCaShsVkZMR1gycUtA''@;'; put 'put ''SG94cUNTKU0sWShSd35QSnhyP0h7NUB6SHsuMSIxTjN1Nn5Lb2FwP2o1XkBdal1WUTJvP3NmLEpDWVlrdjpud3ApaHowLDRrZHQrbmB4X3l8SFc1filkSmJWPjh6bUFRPExJKFMhZzlFNCxGfl1OXjN3UXtea1skXnRHeD1xPFEzfV04eHpOVGFoMTxmM2EyVXV3MlNwNiREKExUJVAuOj49VmZV''@;'; put 'put ''aUF4MkFdN08zTXV9bXIuTGgvNSQ8P3opSDEyXTB4RUM+MlMkI3BZRnIuRVk2KSZVTnpLJSJMQV46M0NqNU95SylpY0hRSHgyQWtsPmlSekNxSClpN0RJK1ZoUntMSnN4LCR1aG9NTGtGZmVzWnMya2VDJEd0TV5POClMMl5oNzliaDd8MlNoLl08Vy5rfTdTclJ4LE45XXhSJmBoKEM6eytEUGwz''@;'; put 'put ''ZXB3cWlWTVNARzl9dmI0X2JZL3hGJTFHL25KNWZdKV1qKX10RjZHI3g8V2ZFM1BLfiEpfVtfTzkoO2hLdWkhSVpVSHtzanZbdTBuRV8lQ3lkcGQ/OVQifGEhaiMrRzpwMDtnbGk5JCUpdVpXJldTV007OUY4fHBZO21gb3w6fiZOVHkpZ3g1Ql48OkhjZmtFY3R0WSs7dCRpKVJqQHdAV15vO3lq''@;'; put 'put ''KylFUWkmUm9ZO3l7OU1HcVluRWE5SiEoIyxWU1p1X0s1XV1SOyhNKiNlXm95JUpAKmwyP2tXOHMlJEUmeVFEcDtHc00wWmR5JHddJj81NSQ5PzFzMmBmVFl6PHI3e1AmKV4lRCVCS0IjJlklcUFrcXg4R0EvLzhiSGxTTjRkZSZpW1hRZTJSdkQ7ZC5+Ly8kek5HQzhNZUNlVil8V0hyNTFJMyVk''@;'; put 'put ''M3NxZUpsd0guXjcuL3lHd3s2dFk5NnB7NmEyMS86e11GZTFELFJIKk1oSStlNj9kdmgpUSVxPThSejZJaisrZnVdcihWYDRndn06OnJqaT5zYChSUm5yRXFIXTUzMXhJQDElSypxQDFnOWhrQHFLRCk6TCl3c05EanooWklBWj84Wy83Y0xzU31IZFlQNH5GJk5rND1FLFgsTG83RVo4PzZbaXpT''@;'; put 'put ''YlQ5XXMrbSQzY3F5UH11RX5GQXdnRltWXnNEQj42Tz1odmc7LF87WiU5LkB2YlFraW5GU1E6YTY2SVRHZC9FSywmaUFPRV1VWVNnZGE5fVhFa3U2MERKTlR5IWhvVCoqayxHRmB9QDk8JSlUQ2R6YF8/ckQmPFRsJnAvb0QwKDRYOSo0TEZ2NGMpJE1FfGlAem5HSzlSNmVzWXYiKG9lPlB4O3E1''@;'; put 'put ''MEsvemZVT0NOayVNKlo3VWZ0fC9zdjFkNElnRyx0OEtSI20zVVM/OzZ9WUxRKzJYN1ZhPDxgZUYze2l5Km1lSTRtOVEvRlllYk9BZSlEVyl0SHF1VF9Ue3FIJUtsK3AydmdkVmUoWV1ESVgrQFh1K29kQ1djend7blc+ITJiQFhsKVBkfHdWMHIwMERsNkNTNiRUL2hdRUp9R3d+M0ZGajwzSCtP''@;'; put 'put ''KkQrP043KCFhSy9rbEAwSSxySWwjVGQmVzhbVHtALjxoTUY0eXs4S1VyXStLJUlESkBHPHMreFlybV82ZGZZNmpTbCwlX1tsd3d5SlMlQiUuTjlmaVJrRzJVOFNhSURadyEzcXg0SW1PYE9oTUZOeCF6UTZMMFdCeVo8YnU3eThwLm5uV2BHUGlfQ1FkSis9Y2tLMXtII1l7S31zMWwjQlRZMyhy''@;'; put 'put ''e3loMyhyZTZ2Rjl8YjE7S1p5M21XVmdLSmV7P3sleyY/Kk0xT2Z7P3J5VnJCZGV1ZXlaaUFlNDxRbC51SShJZFIrTF9tJTpsISg+bTtEV251MXhiPkltO35AfTM5VFRhQDFnViJeRHhWeGBhd3lbM31vQCttLjxNKT0rdV08Qit8KnBgV19xaHU+RlB1TDhBOzZaKDN2KWFUe1VjKDczd3BoNyhr''@;'; put 'put ''Z1VwWihhYm5kTVsjWDU8JFVTKjNlPSphOUtbaGYvb01VIWJ9OlAyRShOVEZkMnxgPFNhZjFIT09XdjwleCJHOFVVO1Yuc3pBPlBvaD91W1QzITAwPFtOUXBGW30rUX1AME5zeGZ2MU93MyZDXSQwJSNuMFZ+ZkduRk44LklWaktAUj49dm84KHM+T0o6MEVwfVNqPyx0K1gmbEsiMDxfP1A7bEEr''@;'; put 'put ''bWFzWXowTm9kVyNlPHVRLDYpWHtGKTFOVD99JlNMI3lbSV15ND5ELDduRGpwRld8Rnw5fHBma3F0Jn5zXTYvL2osK3RzZ1tIUUdMOyg1QzV8VlQ+RWw8NDAmQWU5aXtrejY0aD9QeX17d1tWd3o0XS4pdFlqJGpOSmB1JTMlYllHLGRdPlhlWGgwOj5YWjp0SiY/MDpPb0dmUCh5dytwbUdNfXc+''@;'; put 'put ''UzhtTCg6LEVSXjlFajElLkp7XyZkP3lAIjpSQ0xBeE47ZTMsSUAybk92ZTlwcD1JTmI8TT86ezs9WHlWVX5RZXY1QkwqQE1QOUlodzkja3s8IWBqSVZ3NV0qZXpCPHk6czIsJXwuO2hddk5rOl1beThNfWl5KCx7Q09oMC9PPTNaKThFYlJwTHU0c244a1FxOFhSUn4qYmgsT01qWT1VZlU0aTsj''@;'; put 'put ''PTs5WGc2WlVjUkwsTFsxL0lvdVRqVGNIOFk7KWc8TUtxODcxe1h0OUIhVyR3L1pFSDhOby9MKm5GdCpvMkJXOTIsOlRrR3g9MU9xM0lsS35gazJWZEZRRGhDbzt7PEdFKkY6U1Q5QUg2MVtJeTo+PVBkMEZsLGQ3LDg7NlZ1cmI7NFo5N3ZyOEZfQWNLPld2aSt8bzd7cV9lbn1vPmlLSn1tZjh4''@;'; put 'put ''PW1zdn1oUGhTKF52UGdNZ31iSDIhOH5oMzh3fk09L1E3VmY5YVd7ezZIZzQyYHZUKEMrUE1JYTBKPnJwTS8mYWtBL19+cnJqOmpROzRTP3xbNClKUihSe11hJixObDZxNC9UTms/I3k1JVJ7PHByKExIb2VqUkF6L0ZnclYlVlh6KU0kc0hgdVdwVn4uPkNAc0BxSDQiazxeM2dsYHx5WUY9Yntt''@;'; put 'put ''bVZrcFUoVTQ0Kj0uZF5YX21XPDQjNCR+VTQzZz5RenpXQFVAOFYoZz9JVDE3az9geHAwNDVDYXhuRWJ1VTgwQ3YyfGRiYzB9NmNobGUre31iejhWfi5+NDQ8fklARyRxQSZKSnAwZ1Y7QHErdF8uQFNkaSwsWUUqVXZGQHE5Oy52NzJDeDAlK0NRYE5JSi5EVyxddmVANCk5KFp2RkAiSX1HU1V5''@;'; put 'put ''Qy9AdlJMbytVZ0tZRkBPSSg2OzAsbS9+PjAsOUM9Lloyeyt9Ll0yZnx0L11JWUQ/SVt5ViJML3w0IitVOExEXVQ5X2R1WixLYWNvYG5weCRmVWRLeS5qWiwoS3I0JnpLbW81W0BVKXYvUDA+L0NVNEA4M31HeU9uRzxIaTtFc007dCpnWlYrYjlQViNKbV0xeT4hIThAVCJkSFlsU3lSXXtdYiNi''@;'; put 'put ''eTVKU1h8a2xaeFJpcUhUaG1NaHgjTmhMfCU8T0lkZDhSanU+L3dUaV0lW017Jk05Zj4uNG1lLC5WWDRPaC85fDIubkNJSW9NVTd4JTM+dnJ6X3lSaU8yX2hSWDVmZCl1NXQjNmJdVHtPUyxGdHVSeF1RYT43NlJxfVB4ciZnVXZNe3BbM3B3QkpwLFRVWCIkM2BWUnZsNjE2PSQ5MSZtKDc1fFU8''@;'; put 'put ''YFg1WzhuSiUrTjp6IVRHX3VIJCx0Qn5UR0BVV3xIUEBVUVoxJiU6djs2S2U9c2lUKy5HXkBQOXhhcDpiMkRoTUtIRmZ9V0g8fFQ7UHNZNWFXT0lPSEkrWGckWXFpdE9ZXyM3PFZZWiQ6ejtmIjBPfDNNMUVoWVV5fk4lLHk5e1g+TnlFM2ElbFE/TXk+T1UwP3NxeTYvW0c4ZTBDV0FORmJBTj85''@;'; put 'put ''TVNjUndXYD95Qlg3VjB+P3dPOyNYOS42YVAvTk81az84KyZmNmJdU1hRYUgsbmU9OV9GQHNWYl5qP1IuMW82OzJ2ZCY7NHdLZCZZJTMxVmtrJFkldjdIV15yOSsrOX1SKE0iJk40Omo2d2tTaHlMKnNMMF1LNCxtU2pqVSMjU2RpODprPHA5fC5sVzpnYTolPk07PH5MdVRMSnIrWEE1TFZbMDQ7''@;'; put 'put ''b0lTcTZTRzB2bn5CbjxFMykqRmBIWUJrYyFoTlhRN2QpRFZyUXdXVz9SVz0yajpwcGBDTnhsL3V4ZHAwYjlpSTJ3KyNVVCtPU0t7Vn1HVl5Ta3BhOTtOfV5yYmpqaCElK2VFdHpVOWwiPTYuYFV6MG9nUkk8SSVbenl2O207RE5YPyhoMlhgUy5FZ3ZgRXEiLCJqPT5oRyxTUTtoKVZhMUhASl4r''@;'; put 'put ''UHl4dlg4LytnfXtyZHp2ay4hNGN3OUpZTSVxTUQ7VithTnhdRU56NndLOzBCY1RnaT9McjFuXVhCYnNyejtSXTc7bDp+bDBydHo6K3FdUjNFem0wZ01aX2YpeWRSVFQ3fCthXSU+JDBSbkJxKiY6cC9WeC9BPmxjNVNue3d2ZTMmK2VFUHlHfThFYGswYi5eTVs6cnEuRnB2fnNTRFNSc2QlTEc3''@;'; put 'put ''ZlVQNixFVX0wcj87Z0RUPGNRaGRKK3Z8TVtWfltZIkAjQkdSUzI4Ym4hWXc2bHBbQjttUUNGc1l5YWNrKj53PEZ5UFRUM0MkPnd4UEc2T0pBUXtTY2M2WDFvPnVMQWg1dXpKZ2Bgel0mUGxLPGtdW0dRemVyd3EwM0B8RmRkfSVzS1B+UHg9M3l8RGhxJG89N14jJmFkdVs4dU1obyNmZUFSVjoh''@;'; put 'put ''cjA9bnV0dzBERzB0UCFsS3Q0NV5xVlhdV3BFdTRXSWJYcnd+PSVBb2h6ckkzeTl6QlZedlJ6QXEsIk03RElpW0ltbi9UOFpsKUV6RXF9PXdrbmF5VC5oLGJGeHo7Q3MzXWovPWJLaXtAQHQ0RTw9UGU4bVZPQ2ErMFhDdzQ2eD9RNitIVWk2bng/NEBDJDElWG4peS5QcGhMe25UMTxUK2hvOWxn''@;'; put 'put ''QytdUXBWdVFfXU8sUmZbTXxtSVRBe0tyKyZ5XlspbGZhMzUyMnFaWT45c0RXKGYiVlZiP0ppUHd6dDtPIiF8Szxrd0BwdzYpZzI1aEN0Rn1eQHZDTmVoNkZIJSE7RnZdRlVpcGFeKys+Izp7ZEV0KGNEIjc7ZzI+UllAOUJJb2x6OUhtfklZYj9hQ0Y4SFo2X3lMaTNmbT0qVXphbWt4YFpPJHIw''@;'; put 'put ''UksqYnU9WkFAJD9ILF44SV4kbz06JGQ4bEx1W2NoVVg6TD43IV0sQntwVWVvKHEkJXkvV1N+Kn0/aWhAL0M6fXYwJUtJRCFzRG9Xal0zYFU4fVhoMl8vWTJDSV5LI09pTSlFZEI2JkxgeW92WS5gPXhFM1E3VDd1RGpPQEVaLjU+TylGK2MuM0RnPDxuWmB1aVdLbEFLTi5XSysiUXdzNCN4O21G''@;'; put 'put ''NGFKQGZ9ITlGOj9iMUorWmdaaDdFKXJsYHAyQixIc3JtQUY1VHdxfWxMV2xWTl4zTi5mJnJeWnE7NCYid3g1a34iZEAjMVZXTWdWbjh6WkhWSzhObzUkNXFzO198QXg1L3U7Oy9YdXdLcEBffD4kW3RJNk9nJVprcEF2MTooUFd1Y0s9W0FweVsjdGxyKXJlamJFO3tfXXNmI0g/Z203TWpRKzlO''@;'; put 'put ''ez9zKj9fITBLaC47bnFLaCY/WjphWmtOZzI7flZbVmMwNSZkbGhXRmlfOlJVO246PXp9ZHljPW5VMHI9RjY0ZUNkb3ImbCEvdHc/d0tHSVNWLCU4TiF+b1ImTiFFM2MrTmN0MDB2eUhtKD02UWI/ZHU1blhBSG9IbCN0SEthMzohYjk7bE9oYz5dJkdzcG8hZUtLank8Tjwid0skelpLWE5NPHJi''@;'; put 'put ''KEIobFQwYyMja3hKdkR4InQlU2BEQDp5Z09TUFNXR2xXdHhUbCJnc0xDVGxdLkVOZlg4YF1+aGghNGVFTmcpMHdlZV0wYjspdltjQ3JjKWN4U2IiJTNaZTlQMUk7W3djb11NNFUze2Q3eDM3aiEvWSEsKDhmOSptJWNNaD1YcUJ0eEIpKVpGNnl8L0ZbMHc2dyQ6N2l6dSF8PEFqeipZN2UxI1o5''@;'; put 'put ''LFZRViZteUJVO2hrIyEsUFk5cXcoRktYa3s+JH1vVkdaUlt5dzN5STVPdGliTnczfXsqYnk1SiVQd248RnNUX1RIUSUxI25xaHlnek98QE8xZS8vYz9NV342OUlFPSI6cGNBLixuemlbSHNSZ2dVTn1efW9fOSk3U0xZYkZuOlglYjZ5NlRUR3F9bnc3IVZZPmgieFhMT0xUYVtSd0xTIzh5LjNO''@;'; put 'put ''b1plUShUZUNDeXtbcV8uRThnZW5GY2wsJSpkdlthRlc3SmBULD5jNFNyK0leT3deNSxPKzxUeXtOZWV4fVJAZltwd3cvIlkzY1BLYDB3T1o4Xy5ObC9CRE1pNW9OUjUmLmhGO18zNjY4QS5gbyFZV2coVWQ8KStRVGchQE5ocVQjakApMGZ4d0M/UGNPP1s/Okp6R1VlWU1tMiV5SDhLJl8sI2Rg''@;'; put 'put ''NmpbT0VkUSg3cXlTQGEjWC46QEhZXnIrJGs6bVRHK3hKMG1baiNiRFhOT2lGK0ZVVEZCWVAsUS5+T180KE5BLzo5P3BydCQ/LlkoMGIubS5+T24/YDBGUE1kb2RqWWtdVWVTU3AwSjxQcGsqbmVTKjFLRGw5M0U+aj4oNzEzJmZnIzhLIkp0fSRgN3Z8SmZ5T3xTMGRlX2lHPzI1ZWBfT0M3cl1R''@;'; put 'put ''LHRTNkBhYD0qY3BNNnhkOHc+ZD8ufStZOGlDI2N9WyYoTjNfYnRJLFIkSjg5ZnA1N2h2ejckOkpie3hCRlEpUXR9M0AvSFg5WVVdeGw7QlhWOHQmWCxselpqQXw2W0QsImY8aVFzayRjVVhPY3JkfEtULjFgW29RTTQ7bXlYVU97PFleUFo5OEwoZmRXfmAifXcvaERQbj9uV05oWlBfTXhiWm9G''@;'; put 'put ''dWUyeGlhanIpQH07V2ZGLn07XWtNSHFlVG5Hc0JZR3gvRF54SHF3QzYrRXthR2oha1lTfXAsbkc3aU03bHRyZEduYzR7Nntjfjc5NG91Wm97eTFsM3hPOWpTeXlGS1hAO0p8M1ZjSnBMJU9uY1VgeysqfldoeDI1V3xKRV4kLlM3aWhzPFZQfDFnYG8wQGhpY0s2WmNufjU3VFRIRzwlVWJgQSUx''@;'; put 'put ''Q3I9K3Y4Qy4sXVdYSHRsKS4uMHpxSVFzcjBwVDpZb0l1QU9OJkt8eFg7IlJxN2RSfCJQIzVbNkk8K0N5dnIzUEIkTHBkdGV6O1N4NHB6eVckVTF7e0BfZnpRTjVjQWQ8U0VLZ0tDWW0jZ2RLS19IaiFjb11bc3ZpVmhVfSRUKkxEN2E/YVdwX2lrXTt5MV1GWnJtWl1SKVQpOjFkVHJnWkdYITh5''@;'; put 'put ''QXFDIl12T3BoK2xJbmRZKm1bUjdsW1ljaUZxdWxfW0R7T2F9MiV4OUJPdlJnemRxW0B1YWVfazlHMy5fOV5Eb3U8Qj08MEFPeTBqRmtXK1VZc2Q0OThTVmN3WFJzMUFHdnFUNDBuJUJZYzg1JUJwWll6bmMua2FXR1tnOG58e3goeXNkRFh+TTJEKDU3VGFPRj8udDwpKkdlWEd0M0NEXjdidSRd''@;'; put 'put ''KWQ2RyVeISlqKkdsMihHWitxU1opMC5MKis5UV1ucUc1RHgkPlFrMD9MVjtvUGIsVF17YF5vXWwuMSx5ZityN3VNIzx2JiNHPG5VPiR1dkszcDRKKyQ4QVBrSik4JHgveEs8M3YvTV43UCNITz9gSmh3S3FIbyhsVj5zU2RiJjlLWDxFRnFAfm9tVUdAVGxHSmtDZEYvakBUaiZLdjBDNnh7LEFo''@;'; put 'put ''QTRzVX5weTx1SkQlPmwuU2VXQnAqRUhULkx7KEBwO3FFQEVvMy82YHBgRytIQCt4L0BIYjMvVl9WWjJiSytUV15sTFZYMT02eTl9Ui5FRyttJUFLI2ZDWnVDRmlCbSlFJmNJSGpLN3ZPNyRbYWMzWlI7PlpPVkhgMSs7bysxIz8jc1daMmI8QCRnLj1yb05PWVZzISwxXzQwcXdxLilKaiZ3dz1y''@;'; put 'put ''Pj8rMXF4fE1fdF99ZzsvL0dUVVIxOkwxciRVRkw6TDJAdHBsVldfemFIWlZAPnxOWDIqIjpiL2V0M1E4W1JNPFppKmFbRXxGcG8pKXp1b3x3YVMrI34+bXlHfDxmLGc+VUw6dF0/I2c7K1ldUDJzJD58Wz8jKEtNQFFwfXF3W0VxaVMrbWtWSTR1bktpS0c/ST5lKFJdNkB6bnVqP3pib0FzdGNd''@;'; put 'put ''eUs3NE90eHcsYitOdF1gQTBMQE88Tih3QG1yNWpNMGNDJl5TK20xWWU4bV07d0FlJTBuRSp3QixyQHc+JmdHV25nI01gbWkzYUtAbXhIXWdLOj4qRXRkOE1IaFhDczxxMUQwSnJ0QHokckBUOV8uPW1uPjQrcS5lQXJFeEdzVGxDWXkxZ3dSPy8wezhpc3w8Nik1JFM3QTVpcz0qIjQiOGshPSpa''@;'; put 'put ''UzFjODR5Jip2Lz0rNDRLWnZsaGB9RlNoWlpBeSx4I0BdSi9vO243T0tzXiFzOmVoa0NVT0hKMnl5MUxnSH1QMTsxZFNqbERjbChsRGV4Zj86LCN2UzQsJjd5TERqQ3BpcH5CVl97JVhzYCZtX21ZPyMwaiwmX3B9Z01lb0RuR35rbH1maiZNXVJNSUhGX15eSV02QWEmamliTyFgUT0xZUxQMjVE''@;'; put 'put ''bX5+cUUuSTcwY0MoVTsiOXFeajUsN0sjfltDUDFYMD4xeyh6KHY0ZVpNTjg0T2pTPX1XRkhXNG1fPShNOzojbnU9VS5mWiw9fHl4Z0R5UGVtNlhPOSFiZUM+YiglQjR3ay5IMVdmYl1AR21Pbi50REpkO1dOMD86ZSFSKEZFVDFSImtUa1leIStoPngzY1MlazNRT0AwOWY8Nj1PM1REN29SayJg''@;'; put 'put ''OiVJeD9wKW5aK1h7dHRzXyQ0JV8kbCZua3haeyV2PitNZlRJM11he2J8VDoxZk4wMzFtYE8mPmBXcjMvMkVaSGEzPHZ7M1Q7dTRgMkl4Yzp1aDo2SFBvRnF+KHQhbS4hdTdkLi9TVk9qYkRPbmQzciQ5VElYTzB3OGJ+LCZiR3Q1fSgxWlV8Vl9jSCZpWU9STXt9PW4wO1VbfCojImwuMkh0VC9L''@;'; put 'put ''azU3XioqMGMoTlc6UG8zUjNTaFhaM3x3bkRTKjh0VXc8cXIwTldtNVVdIVkwVVJwM1Q0SHRUNXZ1cyNjRk4lJG1wVz99aW1WekAxd0BNZlR1JCVeRnouVDoxdFQjdXtNMiVPNi89PkNPNWcpKHNbTHJjbDdfTjRuOzQxdj9NNyxebG13PXlwJHZWJU45RiNOXUMsUiRqXzsxbS46SCtubF4vfDdw''@;'; put 'put ''aTw0JTtUNzJFNyJyJE5EJSUqUVdbTXFgYWIqc0tucW8pYH13Nnl7eWM9PSxpWU9STSYyRUojNXFHe2Qpdz5fN0JdVCk+dytLb0NhMzx1Qis8VHlPPCJUTCVmTis8JGJBIVhdOEhuWiN1VztFOkxncFhFY3NZdXxNNT9TJmxbKDQrP1ZUK0VBIk5CXlQ3MC9nT3toNlgxNGpGPlNPXztCUUBGKF1C''@;'; put 'put ''dDwlbCtLbFcyezdwITZQLGNGbjRRZkdwN2VTaSowPjBFRjMqWUxQc0tAUF1FZWtFMjc7WU8hbDxSSjVKRWcsSFNQcm1YSkoye3BNKSsoPko8NTh3V0hpUEk2Y2JjXndrVGdTRkUqQWgmTi5uM3Boek5RPFglUEw8TDE0Xj5TR2xoaz8jNmQkLnglNlJJJENpPzh4VT1tPCEuMElvXWJNbikzSFt6''@;'; put 'put ''XXRjPDZtKF1pJmwvISJLK2dBMyoxd3pdU3BXSVJpei5zbEVTcFMrfmxMIjJKbDNAUFc6eCZGcixNbTYwVVFYKWlxIXNZYColXk4oK3JCYExQTTtGRn42WEZLZFhZaV1TUntkTEoiWz0uOmNhcnl6QTZ3aEwvWiEjT1dNejZBQmVOQmJYNWk4VFtALixUKmNbPE52cHMxQmE5TiFkIXg/a2cpQlF2''@;'; put 'put ''NmxwO0JiPyNPUW47I2g+ODg3UmNNTFBZdSM8XyxLUlleb1U7QXB7OzJWYXNFJTZjUWlRcjgkTkw4NVMoZ3NVUW87SH5waj44XS8hNClXSng3cH06QFheSmpjInkyN3xmN3s2Kz4rVEciOGZ6Ny9qS0QpJm9zWX4vUFI9MyFmLz0paXBCI0NtfkxWflVkPyVKeCFmQFhSSysvPTprZjpnQl5AXlEw''@;'; put 'put ''U31GO0kjdU5qY0VZTCR0WExCdG93dStAOFFiIkNlTStBQFEsUTJZPUY1PTtrejZfYlFlPG80PGxgcGRpUXtjbzFBW3UjOy4/XVlJSkVCR21BbmZZLHJDOls6a1NwLjJVNj5TY1I1O29nSFU+M1ZQV1AmP3w/SEZWMXVVfVRjUChSZ01tRT5uODcpWTQjS2hjM28kXVM8NmNCVUVuRmJWbDdwbzM8''@;'; put 'put ''MnhJcVJdTU8sNTJ3dz5tPk46YiowJVAwJC50aU0iUltkeUlOVzVScFlzZlhOTXs9bjNBKk9hMGNvMCFdRSgsOjBEenUydWFZVzgzJHl1X0RvT2FDYzVUNT9XSVFtVj8jNzowRFc9Jmx6ZzxrZjowP2kubVtbPjw4LzxXLmElLHRhVzliNy5wUURGIU1HJjo9P0ZXRSV1Y3pGYFZKUV8meUZgQEl8''@;'; put 'put ''Rn04e2RvRU9iX1hDODtEVldDM11GdldqI3VXSUFuTCZ0SEZeeT52VVIzWEFTYUxkR2Z4M0lxSS4xQi5+YGF5V15KRjBaflZQITcsaVliMnRFOjJ1eDBgfGBvNzdAUXouaW5ndDAhO2ZAMmcheHRPU0VUe1klVTs+Xl1qbFoodmkoUlhuI1FdWFl1VWIsSD8oUz1QMTosPV9rQV9PbXpuXkh3L2Q1''@;'; put 'put ''ND5URz0/dmV1cDhxWj9vYDIrRVhtWWp7JFc+QDdjPllDQmcoVDtFRmxOcyNMZn1Gc3l2X0QoRERwclBGUHZBTy9NRnRnT25IbCgmeSh2akdEPDcmOkBlZmwsM2FedmJHMlFdOkkhYXJJbFpjSEZJYnh1MDsrNUZTP1BiO0IpajF0O3F5Mih2Ly5TZkZAWVdkPmU6dFVWcE4hJWd6dFo3eGwhPVR7''@;'; put 'put ''W1BTTWBOaSVgZDQ5MzFfUzZwNjlSJFpsUWZsPmlgZEc1eTpoJj5Tdzt1ImRwRD5ZYXNaNktFKlFpbzJEbXpkYCksKltMdDtjfSFLWERkSUFGVm5ON0FQZ0ZLUmA+dXByNGhqI2ltN34pP11NcUZZNjopO2xNM3V2Z01XPmdrZSVFbjNuez1mP3RXOEd3MURnaitBbC48TTVkV0AvWnRCQTsyI005''@;'; put 'put ''dVd2bkFxbWc9Z09vaXIpWzhTL2o5UjBOP11OMXN2Tm1+P25HbilJMi4lc1pCNT8vc3paclc5TltZcDY3dzMqOFUwUlNEV2JkSFg/eVV6LyNUI1haPFpBWSxTKHtwcS43RyEwOVlaMXBkO3BheTU4K3IycWpGSTlZS3A4OUpYUTo6IkwxSlNxTz9DbFEzLHRpMTpsM0FPcEoyQjY6Ri9+W15tZm1i''@;'; put 'put ''PnBaSUNlRzNFbUJjcGY4R2A2RThNRk4rVjZUK0Q6aG1GbWNfOXEpZFY0O3h8L0RFZEdKXzl8dFljTEB0Jl1XNTsyVlJ8eT5VenNrQmRUa3IlYyxyRlNbUTZGclthckplVm0kIjBVXTdpKlpiQGp2PGYrNjNkW1NkYCF6QXdVSnJRMU9wO2t7VUQoNzFsbEU6fSsqV00lZktPck9bdkM9Yks2aDxr''@;'; put 'put ''aEBgc1Y1fHE0IjtVJjdweXpjPG1jam0jdCxxOUxgOz1BZXIiJCNNdklfKmhPeWRuXmNmKjdtKDZheCgsckNacXJnSDM7U29PPSlCJSxScCpBUSlFfl9xJTlZb3g0IyNyb2k3NTw3V1dlU1svK19paVhPNi86W0hHT1Z4Tj10TjBKWmpSZWorbXsqTFglc3NgZGB7ZjcjOSpFQWQlKlV5ey9IcUpd''@;'; put 'put ''KiE1c1ksY2NuNSM1OV49TSF8OSV4RzJNUGZvXkpqL2BIJSl4YEdpeVczcCVqY2pmYH48MjJCUVJVWDV8eVdSMllMa1UjezlFXz1sM1RZIzBndE1YNSU7WmpRTWVZfmhKYjhHM1hrTXwhOCErOTYuM19wMT1sMVRXUyldUGIjZkY5JWJRbnhsO0BXZG5KXV5IRXAzM3BGOjhTeXhRX2NvNjVkYD9p''@;'; put 'put ''REo2OF1tMDdZRjZMJW5ZRU9wbSt9cD8hVyx3TSQuKzorIjoqSyJ4PntMcjJdeERJa2U8NjAlN0lMRyFEfiRqSU16fEU2WUUqbjo8PT48ZjV6JTJIQlNZIV1tUyI4R0I/RSlKZVFCbVZkNDNVUitrdkpqcTA/Iz43NioqZjlWXUQhZTdsPEljMllhMEduTTtEZVVxYmJKR3FfMls4ej1tN19bfjlT''@;'; put 'put ''elViQUY8QzJhMEpkdTMxfiQoV197Li9nXXVncDYoW0t5dTAoWyt1JmxEYCZ4dlJAI1lLTlh3Sk55S05GO2BLWUtKZV8yS35XJVJ5NkprXkoxOz8mIilGWVQufUBUelZbTllZZkx9NX5fWTA5JHdEMkBVP3E9LGkmeCtOU19xI0F5QF5lJUVaWjh3Pl8zd3giT304SXIyYnw1NURteWFZM3VLLmEq''@;'; put 'put ''KTdwRnlVQ2wlU0VaWSEwK3JpTEd9bFc6a3AzNH17ZTIjWipLWSs0K0M4OjRJcCFjWUh0XShURnNnazBNK3N1eDBrOVcsJTU6Y1hdbVFdMTZgUTVsKXJ0YzAvPjp0ZyV3RThPJUQ4ZT91e05sJXJVPFE7aDhOMCNwUiNATStTSkx2PCVBXSokLmRVKXB0bVU7WX5ZPEo0SUJPWlE/eH5eXig1akFH''@;'; put 'put ''b0V5W3U9d0lsenlFJV1FO2xgYlcsMjpUISl5RyZkMnljJVBZL0AybmxaRHB3LEJ9KCxtNyVbIUVeWVhrRl5ZQFE6SzxlMmhEMn4qNCNYSiFKMFFjMk5OdCVjJSt5JihTayh1MnUkP3gqLldUNztTPDBtTVU2Oy86eSgjTH0pdVt1MntxXil3T3BvQkBDY05xPj8wNiR+RWU1R31EL19UbFt8SjhZ''@;'; put 'put ''WCZ0djdjVWRlKyk7UUx8L3h6W3xuW0FweVsjPEFjITBSfllfKCU+dX1vTDI3WFNbR35vc3xPZmxwZUEvbiMrd00ybztrPjMrRy5DJmB8K1lSdXlIdkNKb25JRV46bSVaO0lRaisrNktMI1JJfn1rYmFteVlwfnZOYW0yKXMuITRoTzNlIjphbSRHJD5VbGFtIjR8LnNnPltheD9yQjc5IkVrZEZm''@;'; put 'put ''WGBdLFhvUnAhRXluLC4xWzBrOSlgfFg3QGtzQDF8OkFMZUhMSzglMjYlMnE2WlFVW3EuKjFBYks1RXNZd2tzRGhqIXNpZEo0M3NZQnR4W2koX05YTF18OjIjK2hKeXAqXnd4ITolKnJePU5UVjJPX3Q0M1pGfiZESFopKDgsRDhuOjlnLGM3OmxPc0d7a0IrSG88cjFob3whLGVsaj5KTlQoaWRe''@;'; put 'put ''SWBkeWAqemY5UFtGWSVfMS9+c2Y4alpiOFtJJVtJWF9oWkFpNEB1dng0Y0VYL28paVh7QmI0JFspbHtyOEU5WiZaOkhuKzNkYys1cElMQzNeZl5mJG8hK1dFIVZ6WUApUTJJYF0wV0sxOmNXb2kiMUlgRWswLiElUDcrMVZNXkkic0d5O1Jxdzx8Pl1zbyN0NGdAMUVrQWtNX1hSMXVzKXlBVjdU''@;'; put 'put ''X0Jsa3xqbEFrSHdwSWNLZzcqSTRVUU9BaW5eS0hpRD4jIVs3VE0jSDIwPCl3ZnxJYik4ZnwmT29KMXdCLmZrZy8yYDc0VjxnI2khPzx6U1s9elBBQ2hmPjY+Zy9NUzxmSihJLzVveFVJTjMiMkZyT3kzaFdaUUNySTEuUFY/UihMZ2w+aWd3eH1OM2ZxIjRkb2ZmT0BxP359JX1DNjZJWzckRC59''@;'; put 'put ''TlQ4QUQmXik8LmlTMVJUU3QzdTZqLiNuKTtfRSQud1VeLCN5PiVGOmVGfWoxejQ6NUgjL2heZnp2cU1MO3NzdCIkb2VnNS92azI2LjlMeEkxMkQzeEYpWyR0W2pAP3xGcDAoXy9DIiVha2cvVEFXQjZ0XTo7UjRDRixLTHY3P15WTClkIUt4MldPezc1WioocVc5O1o0L3lFYjtASTNfVEVsfm9n''@;'; put 'put ''X2RqZCU+blU1I3MrciRpM3BnXzRQV013SCFrflV6VjV2ISF0MzkoM2Q3OV9lZClwSi5mT3leQ1lDJS4wd2o3I1o6WU07YCFBSSw6XmNXa0tMNF1nKVMyZEJONTF3VFUuLiROfH46LC84Py9QK29Bal18ZjYlNCMxVThhPVBZe3ZJd0VZSFFITXpZJlM0c1lFYEM0PVBVeWFiNTldMFdrODE3VSN3''@;'; put 'put ''Yi5aJjxxOlQ8ZDV5NSRYOXBCbVQ/N0xwIj02e3JFS0hDY2AuLE9yIVF7ckk7ZWt5IVozYmVGWUcwVmsrSkRHKFpVMTIoX2okIktjMVVERyhzISpxLlcrYXRJWUFidkB6WHVzSDldKktQLmNSL3V1Jn1Vd2dgRzpubHxdYHBnMmE6Qz0uLjEqIjV0T2FQdEx0KkI5Zk12S0FpaXJqdTJiNFpMbExq''@;'; put 'put ''RSIyM2leP2ZLOyxoO35CYDUlY0IifVJPXUlgVVJSMlZMci8ka1BwNjR8QHFWUDFOVDNAYVZMamJUO2QzSmF5OXQ2eUloUnZ1JGcrOUZXby9ZbzsvPUBHUXR4RHJOVUxEdHArdWBAciNUa24vPjBSYHE8WDpLL3I8XyVndCs9WGpRVjlDQih2P1gyU3ZBKGs/YGB8WFg9W0NEI1pYWUF3QWNSaEFj''@;'; put 'put ''RUlBSHI/KHEkaytHXkdxP0pgLmBzP0tgV08vOHVNcVgmMyZLNkEpOHVNaWBZWzwsJUdPQ29BJnRZNC8uY0F1P0FKMTN4YiltbnV4QitPfExSSjtFKF00Qzc2ekZyWXJqeFZwMUhVbGNARlZhcmpFc2U/eTYlYyRYWDU0Q0FIYFlWYVNSTlQ/fCxPfXJzalZGd05KNVNWV09gfGdEKU5beyJhJE9z''@;'; put 'put ''amk+NmdOMj1UL0k0bCVYUH4/ciYjLElSbytyUi44bkNlXV51OTMvVThJPWYlb2ZPdFFQJWY6a3VsY3pnNjJ0eHwpSEtMJlFrMThSZUl3cVNaS0tBcSRWfV06LzxWQ2FVUk5lS1JQZmlyVnMqKmd5JDk6S1ImP1V7UjMjZVZwUGRvIillK1YrXnlMKnRLb1pCfUxrY0VxeSklRVIvVkBJRUVHM0E5''@;'; put 'put ''Wn13Zj9TbXlPZiMpKStodj9tNz9vSFRSMDFLOXBeRXx3QDVvXkoyNDRDSzlSIWoxU3I4bFIkPkB5TE96NV9vTjtIdTkxaTB4UFN4L2VwM2VYK3dsaTluc0E+Oyx7aHpCUHlMeUVVa3Q7ZWdGMjQsbmZ5dDIoUm1fazguJWNWM2VtU25nO3VLO1tDVkY6bygrMDt+cTpxN2FhaklIcyZUcXtHIXZW''@;'; put 'put ''TEpsfTcoXzRbOCgyMyZuRVVqfDh2UGR9Lzg1Lk5bYldCcUFPSkl+OjpPQjxQKkBSMnBpNypyNi4xUUw1Y0dyNSw+alh6JldwaC9RO1lxXUBiOXtDOk55KHY/TndPeV82ITdSWGo5RU15b0J3ITprQUYvak9IcSosdnVIS3UmV2hMYjEqZCNGRy8sZGdLNmhYNWV1Xnh8Lmp2IWNrNlg2Iyo+PztU''@;'; put 'put ''KWVIWm1MaExnV1AlTTJKfWA7ZDtWSlBGeWdwdXo7dk9ILmlQKFJweUByIyl+QHJXfjM4bilxNEZzRn4yQyFeIyZOMTlXUX4yYSYiJEFvVkBiaFJ7amEwcihFXn1gSi5TdG1fd1QuLDAzdFc5S18rPH13NiR5RjN9b0pOVG4hX3ZKaiRmYWhjcFZ9Y2dEN2ZzXVNZZUI4QjtCOHlZQlkmWSxsUyU5''@;'; put 'put ''I0F2UyM0ZHEzaTA1NGhibXhSW3BkRF9OQi40RGBsJXA8Uz1LfVJ8K3V7YSFaPypfYlZKVWFKYktwU112JitsL0JjM3s8fkdKImx+ISRsZ0dGbCVoWElAOVhmI0BHaXcpbTUyUThWVGAwZV8kS11Tdz5Ka0guN0ghTFNuPFR6cUtmJnUkRSFxNilLW2F4aVAuU2xlV2lLYE58Z2hmN1RfO1Q0bkFl''@;'; put 'put ''TTkwRyR5Xlo1MjRRMmAveVV6OW8zdGBzYStgKXMvbUxdLG51OENgSn1AXil0T3N+e35pOjA8MlMxIzpFYSZlemIuQXMuLEw3fk8qTlFASG96fFlWQkpAR3I/VEtSVlMrX0AzQDd5fVYofntSYE5BIkk0OEMkfTRGI0BSQktPK2RZenlPUVdjY14xQDNLZV1jQlReOFJ6NzEiODxXaU1qL0t9ezhu''@;'; put 'put ''JTQ8XikmR1EyX1RjVz0/a0thel4iaGw1VSsuNHV3KEI8VkpYcDt2cWVFandbRyg7b1orV0VqZEtbZ2tMUDsxTCVaflovKEcqRiVZfFhTWUVHLEdgPmsjen5dTTBsL1VKUjk1L2YrLEE3ZHJZa3A1eVl1XVEybTNCNDt1SXQlI0hCOTBSQHdDcCsyJW5NPWsvZk0qOWYicVc1ODF8aFtSJU4mbTp5''@;'; put 'put ''T285KUtbeX0mL1FwUTZsVCRrOVNOI3BBNGRkVSt1VChMWzFCOWNpVE4mOD1HZTspbDxOM2IuZEwldT1icV9BblskcExrJEojbUMsdWpqPTZNNSJZb0htenQ1bEYmSksyMygkTCZRW29xZTZ2Zm0me2hNQyVzTSwzTnI/dDldajopbn1nM0QzdSJYVUs0SCoudldOdnxlOz1LZVdAM2pIXWJdaysp''@;'; put 'put ''PTdSQkc/OVhzPU91fVM1NFlSeEpZY30qSSUqSCZDZTI2eDE0Nk9DJWRIaChQdGhYWCRlUyFnXWhGPCVaPyE/JkkhTDMmNm9Ye0FlSTpAV2x0MDVbYy5icUpBM0QhS3JAVFUqTH1eUGZCPzpTKk9bQjJaPDx9QlMyNEleQjImVncyciY5S0xAJVsxVVFefi5XWSJVenF5PnpiZDUoZH0rWko2KiYq''@;'; put 'put ''djpGViJLQF9zVixfMTslPXBZflZ2TUAxTl9JWl5rQUswSXhCfD9ERk1WJCRBRkVkaF1BZT5TTShdMGFbWjVXTzkuZFUhY2hdQVZoJkBHJVRsb3wxQ3VVUUhZX3d3MGZEWk8iWUhrUkRna11LQE4xZG5TIUxiN0AvcVN9R1NAen15TWJTUUBZX1EzSXgkK20oK1c0MSN+JXxDVW9kaWtJOGJ3Y1NE''@;'; put 'put ''REN1bDRaWVFJIm5KSzlVV1VxWUgmPmMwPTJ0Zl01Zk9VbmZkeGV8TmI6alYoanNdLEFoRmp1UTg3Rm5qODozYDtzJk4oIixxKDMyT25FPCxvV1UxfEBTX218JkB5PzlEXTNYMGJPI1haPGpTUjNuVy9YYSI0IVB0OGZmc3JEeipWLHdpY05lbWQjYmNqZGQjYmY6YlVOMWRBI3JQP3A2SkA3cn5I''@;'; put 'put ''W1Q1P3c2YylUTCttQSNAeWErSUFEeTcxdF03SVY2dlgqS1hYQGFkTT9OSlguJld+OF9oTFBXNnB5TDRUZ0c1YlF1TlZATkRjdiQzIT18c05RMmVHblE5JVRJMnFZZDN8VD4sR25QLF59Q3xFZj57WzYpIytdTDtUW3ApNV92TFNoVH45UWw7bFI5UWpSb0xJZkVWQzp9O1oiLmtRT28oL3BHNUg3''@;'; put 'put ''O204czl6VX5IaVI4QiJkbGs2MjMhX1NCZUQ4MDZ4dilgKXVzNkhTXSZLOXhFUTdtclZBVSR3TEk5XzdXOCgpVlBTP1NEQmNLeCRNMjtKQmd6d05bXnpMMHp0Wjpvfmt7ZlVSYD1+JCozNDUuJUJfKFZgK1BYU3tmTldNQkwhWmdFfkNbXkRXKyp+OCp6P2JMRzYvUXl7PHBHbk07c3g1KXtzOksx''@;'; put 'put ''UW9STXEwPyNSXTM2QUwzYUhrTzxqJlsmSW8pdzVlamhNPTBDN1swWCttaDhUOUs2ayRSbl4oe08vcmtab2RbQzlgKVgoKyIzWEZUdkYqIjNZXUB+aClodXNZIz9OV3kydkMwP28qV3JjWUJVeXMyfFBCPzRzU0dzN0VzI0U8a2h8WCY2OXlEV3ZLV2JBei9baEYqTW92QUhFbTZZdyVPMkNOaTks''@;'; put 'put ''Y009TipKay91fGp4JFA5TFNgdihqVzVTcExUcEdxN3UzITVUfS9rPUZgY3xZNXh9MCNqZko+OFFiez02ajttS1tBaEFUSE4pZ0FmR2g+L2JHLHJKUy5uL2NMKGcuMTZiOmxqNmh7RmZNaGlwS3VaLjk5UzhNa0lWLEclYlJSOG5oU19FQ3pxQllOPDF8QjN0UURHakVaTE5XRDJ4fWBMZHNGdEBN''@;'; put 'put ''NUZfXlNffXZ9WkBdOFc+Q3Z1TSNhRis5PWQlb2ZIYXhveFAjZntwMC9uYG5Oe0RPJkk2ISlTUFV1WntkaDcvOXQ3ZkQ/SVVXSnpweTFxbHpGKDhuZVkxWShpZ2t6O2t2M3giTHomT28lN21wNTdsRXR3NktFUG16UCZbODQzNklKMj02NHFEVihSblFzaj89fWpkMW5lY3p7Xn0mXzg3K31PJk8k''@;'; put 'put ''eDQ2Wj5kMmglJCtdMnQ9Ni8qM1RoeCFXUj1qJiw+YylsbztWU0Emd3NyQ3N2WzNQez80JFMlY3o/a09SKCpVQmNKIUhtZzZPbGZkNXU5ZjUyLGxScjEkVmEkSCxhUnUwW1Mwb2wiQWtiRS9zT15CWXZTNF55VWxhd0QoPmpvN0AjW28jJX5wcSRWaFVpVj93JWJIdTRJYmg2OD5vUHs9Z2B3SHMz''@;'; put 'put ''X0h+Z2EufXdhMCFqPFQmMDtbeEVfMUN5R3ciOTxrNGV2TU46SWRtcFhNMW08STkqZ0BGS2skQXZNaWJURzA8NjcpT3B0JXdERGNGOUFNQDklc3ZUTUlEZSt5VThzXWRyJmx5THJtI3M/IyZobzIzXzhuQ0tWcW1NKVJ6TEk5Yyw8U2NLNT5EfGUhY1MibnFIImlJWUgmN2VkYGxMVkdrMDJFY0RT''@;'; put 'put ''RlVFNXEzQ0tDUHxDc0FdOFJ+Nm1UfHRwPVlfVHBXZyFvW3s5T0pfRH4pM1UiJm9rTlMwTHQmb3BPTW9WcUNdMHIlRCl5MkU2cU1UdT9oRjpuVmlSXnlaWiFqdFQobll8N1dzTDchMFh+OUQrOS9FQURNTy5MTmUhViUwU2JgJEs4WHBoZUZqT2xkc09mfk8iQTQ9UHJ7OiRqJEhQeSRmJGZKMVUq''@;'; put 'put ''U3JFamQ3S013SEFYKTJIamx7biM3ZDRVQilWdXJdUSRKVmZkbmVfSE8+NSU8NyFmKV4lNVV4eW8iNHRdZVkmdVt+TCh0U344LlZ1TntNTih1U3JtVU4+cGJaPnpMOjM2MVBpT3RpdEozdFJSWXhmbWcuSXwqZX5PIW8iQ3opWCIsTz9EX3Qjbj1dKlhJRHwpWUlnWUtSLixnVFJVLCp1THMlRVVe''@;'; put 'put ''REJgKW1CN353X2szWTFsX21EfWpuZHU/OE1YOmQ8OllpdXU/SVBQRVVlZmVaZzE1ai5ydUZYa3lOfVk4MSVUXkJwd0VxU1k7RkxxRDl3RUZHcWc9fV9aeHJIZiR5RlN2YkhnSm89UC5ePWU7PTRsTFQvRz1FPGRsXTAyQUQoNUF3bywlai93Iyt2PmFRNU5+RCZOdH5sOHQlNTw0L3duWFoqO3db''@;'; put 'put ''dFFhT11DekBbcTMsW0I8WishL355Mn1HIlUhOjNrUl8pP3M/KW1ARnRpZzRNcUgvJGxvX2FQSSJbQkBBRnhKZz1KfEg+JGpIIkReKGBIbnZyOSZSR3kyc2QqViQ6b2I+bDk1L2hCK2p3OzhrOzIhNSZEX0tiZiEqTCU7QkA6KEsyX15eVHd8YiIhKGZ5O1heQEpde1ZVPjh4dz1bbUNlW1t2ZHM5''@;'; put 'put ''RS4sTV1tejFCP2AmZkgwV3NTT1tXIi54WFE3N3YmRi45M0VKd2A0eH4ieXc3WG88MG8rXkAxTGZCNWNtQzB7dVZAMV8pUXdDKm43QUw8bCFLayR1KiJhZnVlYWRNbmJ1a1U/K2ghXl1JTHEsUWR4NG1pOX17dW5ZSXRdP2JBWyR3ejEuT2drWDZPN2lraj9QN2pbbiozdmk/ZUYlWCIlSFp4YUtH''@;'; put 'put ''YVNScz43d2I+NHREV1IkTSRoWlBgbUhZN1pGc2o5bCJvZDk+ST9tZkFPJiUrU1g1OW9VX0k7Q1NjM0JvfSxTdSU0aV5ZQTNbeUxOS2BPTUBgTCtwPG1QVUxxKEIzOnNAczYoWDJGKjNPfm1ZUjJwN0wmKGQjaUFlQjhBZUI4KWliYGojSmxhWzlOOzwuenpAflA1XzQ/YmRlQjZjN0ROSE5dLFZH''@;'; put 'put ''Vj5JMihCJF5IaiFPVldNRTUjMT9jX0cvcilpJmYjOnVjYD8hdzw8XjFUYVYqcjZhVnU0MERuUnJ1JFMyRUNBMFdCQTNuRU1MQ11EXko6a3BgLkJOSmU4ejdDV2QydUM0Tz5pY0VWRUFBQUFBQUFBQyJlRzwheUcuKl4/RmdRZVpVNmlyNyNuQVU8b25HWXVNIyElLF5iOTZPemBea0QpSDhYdXY2''@;'; put 'put ''M0hgOUhueSpxT1I/aSFmSXtsQ3c2OXdqVUpudndXbFd1T05ONHJicDN+ZjRsdlpORlZiPEgufEBNW09+LHFvc1hWJF1sdG02fEZZfCtBdU5vNnFSSUBGfmVIeVJifEo3bzpsQzNaWGc3K3NgcW40PFY9SmFGdVQpMnNYSm1qNltbSiIxNFMkK0Q/ZVZQKlpyLGpvTU81a1Nfa1pXeTIjOFVHOzdz''@;'; put 'put ''OXBkYl9nYkJaZ0hZeE9ZYUU6RWlZQjJYOHlzQGk7KmZWLCNZVjtaSlZyTFVNOW5zSHBoaDNgb1k8T21ne0NZTlcjJi5gRU4wT2pgQUMoI3lndSN5L0oiIyF+XVgkZndVO1tATDdEXVF3OUsvSU4sT0I8LGhKUVM+WG9FW0NQSmk9JkZJKklgfi8rRTNHSVtVQixjbUhYRj8hUXpDRyxsSWM+Kjp4''@;'; put 'put ''RlMofkNLNHl7Uk5bRCFteDksX053W0lbUUg+MylvbCx4U3NfYW1odWY0c2BGYlozZTNhJSZaUz5QO3l+JDRaV09PSU56RHVCP1BsOEZmRiFgeHxpR3V3IyEkeW1vTzUwWDwxLHhrTiU8UjlWbVFmMD0jNFBVVWllRjNTUTRbKzZxZy4vYllwJV9PU3dqRVtJYik4MEkmNFklTkduPk5GeWhlVlJ8''@;'; put 'put ''MDwiKipJPGs7JG41bSRsfm9qT1pvW08xelVWRUA1WG96WnFQLmtVW0ZqeHYxQUhpbStOfVs1RHdVIkVKNFZ1PShwQm9MU0F+dGdGdVE1Tj8vM3hmJXt4KWp1ekowPWxSaythRmFFcCRYPTszfnw+YFppUnZWc2tRMFVgODp4WXAlX1A6SW4iUWZjckUwL0t4LFlyJkovN000VV55Jj94XWRpLnRu''@;'; put 'put ''Wmh7KntPc2pdSkl8JVhzMF8hTXl4clZHV2E7OEZafSNfRk02aGV4NThHS1hJSE06YiRZd2k2a1lkKig1Wk5TL0ZbTXksJTl9SXgiTUBbUEc5NXpuPyo8ezo5ZHt5SlskUChbQkYxRkVURXhHTDFqJjlIIm9QIXJ3IUVKXVtjd1U1XSslN2BHRDZYSEwwelQjXXVtNCVhXSlFSHZCKz5XVGB4SSMk''@;'; put 'put ''Tj0pQDpzNXFMa1JoVFJ2NlNJNVBYKDwsTTNANTBdc1Mlfl54WmhYQkx5XyJrWEVhVTBjRlZ5YXFAIz8lRFdUW09UakxSQkVoR2RKT01tTlBuXUd7cz9jTH1yfT4+YDgxfF1vKmVvbntDcnF5PHJ6em0ua189I1B2YlR+ZiFWZDp4a0MuO3diaTE2UWpzVSU5a2dAVnVPeThJWysqfis+Sy47ZnVu''@;'; put 'put ''KkwlQEp3YDBxX2p5dEg0WGE5TVpLV3BUXXhgaGNVdHpRey9FZzheJXcyRTdzQGJ8LzdXOjIjbmZhKmFMOGJCfj53XSZPVEVMeV9fVl5dKkpeZXhaRXlWWGdVIkg5V1RqSEtJTUheXTkvfWkjW2FsQyYwKCVOPE08SXszTDNPdnxRTSZIK10zIzttSVt7dklWdmNvbklqZj9gTUJzYnUwcmdFZ2Aq''@;'; put 'put ''N2pLNWIkd1MuT3o6YDRnJDQwKXxic2IwdFYoT1hrejE4LCVOb34sQjBpOyE6KnEyOzl5RSE6fW0udnl1NDoyTUtuUUMwU0VBdCtoSnZ1Pjk9QyZUYm51I31XJD54fmpBdzUudGx+cG9QdEB2Z0puX0VwYEdCQDYkTk0/RC8pKXJ0NXhzS1spJTpNKm57aE5uUnZ3ZVBCbHJmdzNackohYHlucSI+''@;'; put 'put ''cmx7MjQ1L3B3byJHQTwic1MxfCt5ZmA1KXUjR25pYzNNPWpmcTkvLHU7d0csUDcvZT5bfUdbPVd7XSlQb3wxPlpBL1VVQHclT30uRiVielhhM0wlbXdwbzxFUiNqRTFEfCFFXkVvayZ3SGpVYF9SdEtvSXlwUzFLfD0qRXhUVVlKc1JoP2ZpZ3RZTjlSPWtNIlZ9X3JNS1Z7bXtDbi5mRkhsdns9''@;'; put 'put ''b3Z0QyF7cSF5dU1wM05QP2V2bytTV0IzVHJ8eS9xU3hGYG1jVFtbTXh6NlE5OnJDeVQoPV44TWttQH5UfUkvUGM6d35hcmldb1ZeOWEiYyJMUk4vVGR9QSJVWTVwPT87eFRTSl1+UGw2IlgiKCI+WWc8XylISjh0KixPbD53SEQmOkBxe0Z2PktkX2okJlRZQTtEV1c/Yz9EYVBiOzNFVm94Rl5P''@;'; put 'put ''Vk9DSjNMKD9EZmNlRHxtU2ZCcSkldE4wQ3BYKF5ARVFHUD1ZaD1wSDFBWHlRLDN6Sz04XT92UT55LGUsZG8vIzJaR2RjVk5CLE1geWliIyk/TUxMV3IjVXUsSjp4KF1ASkpQdGNEKWo+IytuVlV4PD5JNyEzaWF7XTB7K2RsMy9hd2tYJWolVCI7Lys3fGxiL0pgeG5rZmAvfHs0VzZzP0FgJXs5''@;'; put 'put ''UjUqXVImfk8xNDosO2J3R0pHc0paZ1k8YSM8TU49KDddIjVpbXFOSV5sa34lT09rdk1fLnlMTy5WeShFd0BBOGdHYSM9S2hzNDUsdyNBcEZ0TmcoT3VlNyhmdnlSY21DeXkvYnpqWDJGUDlQaihYUGhUPzclWE4xVWp2YG5OPWgwNFk/TysqTGxjIlJuRnJIR2pCKERFWEQyPTFkbzp0X08qUEBm''@;'; put 'put ''KVo3WWFuPUR7ViFhTy9hd2Q1JGU8MFdIKHRePnR1VmE4b002R2IyMSJgc2oiNGV+cjAmMiFLUHZwYVQ6amAvLnFFL0dRRz5MXUlkaio4KFQvPVJHZkhNNEI4cCpUTzNRLH1peTpaK1RnLzpAInhwc3pTYHt9T0lbWX1XKUxCTntQfk4jMjQ3O3FTSTxoUWN6elYoQWo1ZSxPZVEjU3V+OVNjcmw/''@;'; put 'put ''VlN3THYjWyVhQ2NSeGlgVSxTS28kJiUkazpgO2AvZD08NTwxLkBYYyxqNyszQkshbDo7P1pHeSsqSCZKTV8vZnJye0ByXzsqSyVqOU4vcmB4bTR8Nk9xUCElTShzX3oyRzIjR2V7Qzc4Q2xyJmdRJWddalVGVVhnQjtiIlclJWc4PCxAJCp4d3dTcjhoLiwmNDspOlUuXTpQailOYzNvImdmX0Yj''@;'; put 'put ''dyU0KyV+QTBuNWoxa1BsR2JXKmtRZ3hKMj52RWYyQ0pONVkzeTN4VWtJMzgjR1BRPG9lS3NpRGE2WyFhX2U6OXM9M0hyREgzY05qcEg2d3IqbHRvX2dEZlR5bHUsViYiQUAqbWI1W2g4SCxrOXZpYiVneUNWaU9xODYqWHorQU9bP0trYjBiSyRVeFpjbGxDZSF5fHkyUX1WNDZrcFByVzQ4eEU7''@;'; put 'put ''SmNidmJPPm8xVVQjWXdHOUJMKy5wX2w9flNxPlo5NVBfQFt1Kzk0Izc2QjxiUkFZWCh1NGVLeUBddENLRiVXbkZLYEdGemozLlhHZTV+eikwQkd8VSVXVkEsOURASHQpUEM+eV4vQ0hjPmMuZUh8ME90eTFUfFg4UVRjSFlYUSx3d1QzdzFTWlViN0dDZWJuV15scGpNZCE9I1NMTXt2LnJIYnds''@;'; put 'put ''Q0RMKXxVI09PVDo6L1pCVUZ3KVRgOFEkND5sanYpO05nXU9VY31yZi81bWNbTEFyfG9hPV42bnpmRCZvOWV4MWtJXnBWOTdHXUR2I0EqNVcoNDtiTldabUd3QiF3cU9nTH0qZHYyUWB9Q2RxKVoqOm1aSU58QUN3PHVDMyhhZkIuRkR1ZmhtWEBhN0Yrc04vTFRjU3BkKzZhcEFSQ3BpV0E/OXFO''@;'; put 'put ''WlU6Y0cye3t4SjRNOmMoQC4pXnxraEIreHgzfTpgeDhdKk9SQztLTihbVzF7NFFFSTBHQy84LkBOIkUrR0E1OHcoa2tXRVlSNmRkT1Y6MUkiW2ZjemQ3WjRKbEV0TlMvJFMkYXptT3l8fUd1K0pQc355ZT5XO307c2tvJWwoYHBuLjFMLDdPZT9hcmVZVTQscUw1JSFyLEhrYmdrPFcjTnB7YD5n''@;'; put 'put ''YDx2X0QhSnhnJGxYRjNzJltoI0BRQ2JoVz42QDVLVnF5VVtrcDdpcjt+RyNYbSYyZG9VYlNbTDNdT1dJLlYwdV05XWRBJnkrKlAjWEchKGg4YixnbEg+MmNEQn05Sl1ZRDcjbGBEUTJXd1k8VjVncUtEW2slNUpjcEdNYXpuNk4kSWohe0BnU2IpMzBsISMjRl82RzdudShXUDdkR2xYP10pbzE2''@;'; put 'put ''bGNkQjk9eDp2R1csfWlSJnEudXNVPEwwXndXISw9NnUkd30qI2MuK2pZQTZLNHY0WTglKloxOFJgbyMsSGo0biYqdEFSVXNZeTpGN1NbN21se29ZeEgvdzdsN25db2p7NnF5fm5IXWsrRmxXM0cqW0x3Q2VyU1RIY09wdmd+OFNsaGdJSyNtbVRYd2NqJUZbbWFvcTpmX0kzUkVJRn1UUGpxKk4j''@;'; put 'put ''dyF3W1RtS344KV5Idmg7UmE5bGRBQ0Q/L0lvek5XJEhSP25RUWQ6XnlZfVBxSU8oYjVdZjdtcHchMyY9Qz1bLyV8Znk1amFYTSV8Yn1FTGhwWzciTTU5USNBYGI3bT5HX0RmdTdoYSZYTFRjNlE8VzxSLyFnOl9bOG1VajosVUhuWUBXKmJ5bm1iW01ROWRQRzFOOn0+Rm1nQUNmT3kvUjNJejlw''@;'; put 'put ''RGRpTGlgUUBmcFgzOE1WIVo0VElyc2A/Y0RxLFBScFQ+KTshRXkxMTM/L140XSZIe3BTYW53MUI/RkYrXj9HV0hbakx5MlY8WGNBZHFIc0shMEQ7SXUzfHFtXXcxQ1QuU106ZVh1aXY0L3Rzcm9pXjN2QHFrUTkhZWI5JnE1dklbRzROYnoxQ09UXylXWGR9TSJAQ2BTVClNUldTZCVfOTZ3Xkck''@;'; put 'put ''VUVoeT9VS2Q9Zil0QUttSV5GXXVeciRJPjZOK0BEPGVzLyModmwqU2V+Sj9WRGhydSlLZ3E/LGRyJW1rO1h3fWc3MzBSTXhKMzRuJkdMUX1FcSZtTihrRUlXIlUrUHQqfFZhZUMrOW4lYWc6dm09e1kofDozUWRkIXRHRS55Pk9ONVc4U0subTJLdXBQQGRJME5uI1YhbFZkaXFeOTJaKWE4Ojtw''@;'; put 'put ''XkYofVJgfkcmIW1XV1h6OkhUMnw1QmBndkpRZnwoSDNFUzNqM3spUXUoZH1BPHFnV0BxQUwqbExsaUVrJWxlPzZOSERrJnF4TlA9eTFCb31xZlVfdUJjZUc0Qk9JdXZ8WCg7fWxCdWVpT1g/RTVqIVA7ZUpRJWoyUEApY34/aEJQX307cUY1fVh2b1U9Lncha189OTswS3pPMmwoSEQyTkZ9S2hq''@;'; put 'put ''fWhBZzJpdjs4Iz4zVHtFYENJbWEwbEA3XTtlcWVXeGt9KnM8QSo+V2EjUW8wLy5rQCFmZXcmL2A4OVlqcmJ+OHtqPDtOYHZ9dTV9eWFbPzEmeFQze0NRT3JSbjxWOn19QmlpO1tLRSYxW29GUjhRa3FIdzd+K2E5LHdnbDhVRzsuQmdHVi9abns4RkxHXnIyNzFlQ184Q3RjKn1jbTFWZXdFISNk''@;'; put 'put ''anlgPEk3bmUuU00rMVE+MDdAaztlX3hde2pMRTlrZnYkQV58MC5ORzNUYyozaClnfiJAeC4kJnJqbnsqXSQ5eW46OC5eQ0tjSHRWaTFbVEVAZ3lvWVhHKFojbihUSlZ+JEN2Tl5JeVZ7X1EkJTN0PU45SHxqaSssR113PitETHw/ZkV8VSYqLkh8aC9NNzVAaHA2bixdSmg0KnYsPV0sL0dpRHp+''@;'; put 'put ''ZyF7SVApMlJ7MmNJcWdLdH1ZTjEqbDwwYjZMR1YhUGAkNGdyakwzZnZXNU5sXkBDZ1s2eWZze0wxe1pEaE9bL2ZoQm5xL1AiUlhwSzg/R297L0Z0OzlqJEpJdGJGKD8/JHBmTWJUYXhheG1kK2NEYWY1TWIvTzxETnIsY0FpYUZZUV9jam44WCRePkZeNUJVdUA/PzcrZHtPSE9yOnQoKTlwPiI/''@;'; put 'put ''dGFmXmRNYzRCMnBNX00qeHt+SHMqPiRkMHFzVVN+bGU7MjMoRiVsVHdsTGh0RntUXiR4fTQlPiY7fT9NUztNJEtaUnMkRG04dVh0bTNGP2l+RFdFIzRZXnhkOmkmd1dubHVeI1huVDhsIT83MzZaYiFKRndnK2tAdHNsREk7NHdnOmwhNEQ8T2d4LDJHaEo3SU1yZj48WWdiODh9LEExUmRraHxo''@;'; put 'put ''MSJJMGBaYXVYJixwe3smbD1uWVJuSWtoQGcuXnhuVD8jZm5iY3VkJHwyWChwYzwje2EubShxZChdIS5CKHA6V11UMV1JbXx9bm4hW3QpK0FLYHBCXzRBfGJ9K15NIihhSCRUOHw3JjJoNmwrYzQxJCwxbVgsJG5jT3NXeSpKMmNtPm42LmF1ZSYrO15MUD5YeFR9NTFaVmNFZ0l0an11L2FsMDhC''@;'; put 'put ''M0M8ZWgzZyl+LDByYElYUygmdkskS1tsMEdGZX5gXlpYMjwsc2owc0MmVE0sUXFvXl5PfGt1JEtlQH1+JHcrVnskODZfaGtxJjQ4cFA7T3tgUF92cGpZSHVdYXskI2RRZ0EsJFksS2lNencjcV1GRHN1JGF5eUlaWjx9L0xVMWksMEAuI1pWOkBOP0RgRXVkNHVNZlFPNnYkP1JzI3tMX2svQEc2''@;'; put 'put ''fWMhJkwreXsoPFFLI2o3MUciInMjMGlDWVRuPGhLTmdNcUlNRSRGTiMmMnBxb1F1OmBgU3F1L3A8akd2U0MmfVYiL154VnJvaiQqZUttO3YpYjd1KXpmP2M0dn4/RSI3L3RsR200dFtrPzp+V2VYbVlvNSlLMWBnZCozRVoxfk5Ed1s8eWpVM1pbWFg5WjQqUiMzWn0sViprSGoiIzQvYkVQPj0w''@;'; put 'put ''NyFxYGZgOk0rSX0lbk1UYj5aWzV+Wk9vUDZ5OVVWaCFiMFZOT2x9RnUzfTFhSSolWyxqUTJGVW14bjNsbzRGVXFgQlR+Vzw7fCMoSC5TM1pGMTdTKyZoc1R1ZlAre1pFNEclTTd1ZiY0fEBodnoyNU1UfExMd0ZCTy9uLkYxZENzXSklTFlXOnNhXW92ZzkuNHhMYGFffiVTSTRuLCUhJGQrbkdw''@;'; put 'put ''WDg7VEtmOWJNantAWzlCOzcvPGRhUlZtIVU8OlVDMiRbNEAyTFEifDIzKldDeGpvKmB4ZDlER1IvVUs3NWdeN1RAOF5zfVRHWDI2Q2FEfkEuSXR4QjVVY1JofU83QjRwQDs0YSh6JEhbJEcwXSM+SH0/YlElQjAoOStaWU9EQlFlTGdVZ0pIMntpbDMrNXZLT05fKE4uNkdyYnY4djFwdisvZnEp''@;'; put 'put ''MX1oV1BdTHRbNyZjbTE/X1MvUjgjflI/RVNGfSsuJDp4MjBwayh1Xyx1QWtQZWF8azZRd2R4KWkmQlVdQGNDUFV4cT5MQCZRVmtDOUVMNSg/SFlXQFBAeEA4IXFwPE1lU297WUJ4RTZXWkNga0dLeyM7W11ZL2J+KC9lb2k9MCoqY2t7alZ0MmZrT05SXihrbklZVWdZNGJoemF2O2ZSL1RRczcl''@;'; put 'put ''UDd5XTVYbXpYWEcueWkqX084SHtmaTEpWUtmOmY7YiZWJjAvWUtFWWZ6JGNmIVVkRF9kcFdxeHQldX4zdkpnXjVHdXVQaDZpc0oody4/YWtHMmhtKy5+UWQvNXcyR0BvKHJedj4wI1R4ODZ0RW4zamhXVXJzXk4lO1pdYHpxUlo9bnB4YyE9IVRKaWUyTXBpdiEmayk3Ml4mQlIlPn5LTEA7UWVZ''@;'; put 'put ''MXpAeFtySjpsXzhtZW92ZkZEWi5SOj1VfSw0fiEmUkMoN3NBTlFQfigmNkBUaX5SYStLPV5qPVplPkU+OHA7eiE0bSJ8R2ZFS3ViR15PfVFnLkJGWyZCQWRheExNdCZQO3k+Yng2VWgqWE1CMUFzZDt2Unx0cDtZND9Mdl1LMDpTfWIoYzV0MyZsfiR2bjk6PjkwJEpYQiRgN2lMMywqdUNJMCVG''@;'; put 'put ''NzZVWlpTWH54YSkqfGdzISxbZWB9cDxNK2plOVs3JlZ+emdMYSFfKTtGR1tdRUlFfE9xME9qM3tHV3ZDaXd7VD5dezEzdTVLdkg1JnM6fkJASE9KRiE/XzFEMVBzOmZ6NmVZKjVZaGN+KlQpW1pKZCNIaGQ6NCFBOm02OFVNPVNeSnJRLjwyeWsudFkrPWxLRWV4YW51dmo9Z3xAdSY1Yik5Lytk''@;'; put 'put ''Y2pRVnBDTkUwTVgpMVc7NHwvN3RSNnUiZiohMDtkZUxJYHI7ey9oQWlDN2VOVnlnQylTN3lMTj0vTyR+U1N3b0NLWlF8NDh0JFZtT181Zlc1MV81S0xWW15Ad0s2aCRNWF8mfl1nU09AQyFvfVo8R3lXITF2XWRYRG1mRm8oVSlLIzk0LCVueTAidU46ViZiKylGMSU7akZWT1tiYXE/OWI6SlZM''@;'; put 'put ''OH4vXV1UNjAiIzRlPjIuMGtOWmNxWDxLaUJnZSlCWS9iITg+K1hzcTsoU3s+JTNuQi5rZzk0IkxjcnExYyZNKi5RbmFIdFFlZmdRejhWM2xzVVQpJXYlMyswR2QlSWJtbDxpcTIhOCh2V3V2V21CUkc3di90cUVaci46YWtUcC9lN3lifj9fc01nRVQvTlVGUFlhMzNMMlZWSzJVUnpbMGJLSDw+''@;'; put 'put ''Kk89b3AoR24lWV9Oej8veTk1VG8qSHRhXjFWWEY0eHA+MmlLMFhScTkjTXx5eyZ7SGBpcXQ8RmRoPjJuMlR6In1gakwwVTlaNlBmY2ZocSI5dGQkdDExRXZYN1hbJFhMNDY+eShXQ1MsaWVVZTA5TFBGWUduX3dRJlk/OFU2WCZIMFF2fHxqPyQrSDRnTUhdQklfLj17VF9jTlcldiV9Y1RJc3Iq''@;'; put 'put ''fCl8fEZ9V2tdInRWcnA7RmQ5dE01NVZ4IjxoPFc0QG1vYTEpdz5JaTQmQSpwUFF1ekN3QXtzMnMuakQ0ayl+OnN2P0U3TTg1QldNSn5FekBoREZ6UC9tOGJieDs4RFlKdHw+ZSUyQjxwcCRPa24oKno7SlFFQ1IpO0VxaUFUbE5UYGxvdSNDekQ2JChRY21jYnZVJUxLVk5yQk9aJHAuNEx1MUxr''@;'; put 'put ''JlhjPVJmM1Z1VEN0aDNLJH1bLDVJQ0JpZ0xHN2Vqdi9eUmgzNlBlZWdgWixoQSg1UXkxMzY/OGN8SS8+QC5XImhwVlE/e1RkezBPfVgjL1U2PGNKIXB5OjJfSUpXVnM6XnJlPlB0YDZ0USpTLmguWV5PTCFxbGRDZ0EhfUIrVDZUYm5bVCFaVm4uSVhYO25+azskTi5dLngjRGVXISteRiZCRjgs''@;'; put 'put ''QERUTnJxMldfOS8qWj8qXWNpXkxkcF4oVVl6ZyR6NFIwIS5xMzp7OnFvfjlkanp2c00hbi5RaTZrUXojOkU3PnBwR3MpemV4Jn0uMWd2U2kkdkhSI2QrVDNCMFYsW0AoNklbNCNmQzRZS0lVKmNfQiE3cSNhZUBQI3lnR0xVP09SKWFdJCx9dl4rZyR6PnYxeH5ROSo0OnRYdHgyTSF9R0BbW0ZL''@;'; put 'put ''aHVGOCJsPEcpQVpVLk5je0oxZlNxfCN5W0JlWltVTl9uXVUicHdEQ35PYEcvIiYmWyJ+biUuNCQoYk0jMEkoaTwxLDU2IT0ia1JKQzdva2h3Mk9+ViguV0p3MjZkeC5XRG1mV0JOdkd+YCkjNGJoZWl6STNLTSVGKCp0bzZXPUpmN1YiKFYzNWRLNypJM1YiTj5QezwxQGwvaiNGUFMrfk8qIz06''@;'; put 'put ''OjVfKDNbJiRZcmImcF5wfGdUbzpTPD1MYVtjQERUMm5BaTxhdTRBUjY6SSErVG8pYFVzMWZpMH41fU18YDQsVmpFWXs3dzRYQ1FfbCFWYE89RTA3MF45ZSFsIlg9QGA+Wy5sWEx1NVRuWWpCT3Uidnk6VlpVOHUqIkoka21+N30/QThjUkVnUXl2ZXdIKmJyKEdfeyI7cUIwSVEqPGl5XjdUKHpM''@;'; put 'put ''a19TPHxjMTdxVHFfP2gqQ3BhaVRYZT1+R1l6T0ZXWW8lMUVKWW1eXi9STGA1Lz9qLnZ6QVJwciFUVjR0JHBiRTw5JHh+KT5vJmo8VFZSMHJNSVRVIjskbEFKcklBVlsrPkhgeHAvU3EvejtaKlIyJiVTayliJFdeKH1EbyVvJDVWLEkiRGNWM21QITcue0dbIVchR3hAdF04eHFEQERyY3BmME44''@;'; put 'put ''eHl2JkBmOF0ydUlDajl4djIidUBHR1R8ODJBS0JpUXBWOShpbVglPkwvRm89Y253N34ld0V0dTZWTEhQfnhWfk99SmkiSTs+az0pTkNDMWBmZS93L1dVSSgpbkx4cCtHTitTJHZ1WWBBaFkjUHIrIyJAa0FifEtZPFosTmhZaWpUT0lYKE5mP2UsfiswWE57aUh4IjBVSEkwPEc7Wnl0KH5SLzpe''@;'; put 'put ''UHUyWFl9Zl0/VVhaYkhuW0t8ZGJ5Q1JhI3k3PnIlY35IaW0yXTFPX0xKPSVBI2s6a2JmVXtwNzRmdFlBYTcjO11AbGdnb21EWTkoXlo/a0VCPVFNNzRka2F0MlM2OU9FLipNI0JYUzBsaWZYJn4saHBbX1lIQVA4R0dvcT8hVml1WD1MIiZZPkRsNDZ0OkJBd1dSYC5XdE1scF1zRS9YI3Y6diJ8''@;'; put 'put ''cm5aNkZPREk1ejNidl1ZUilRWjxMbXBZdlI0c18vLExZREB5bjQ/VmdvMXhkXytxKHZmYzR6RlBWSXcxSGlqcVh7WjBbQktQKmY6KiV2Sm49N3pCdTBUYXgyTklZR3s4b1lgOWBRPFNwTkpheChJMHp+WjRecGJvUGJEUmBHbTwidjV9Lm50W088Z1dMIVoqWkUsclg1Y3xEbTpgeFAzQkdHUmQ4''@;'; put 'put ''I3AqS1M5ZmpAK1peIVkrND17PVVyJWckakE3cX1qOnw3VS9QTmh9O0UuU1VJYXU/emQySUZjWDgjNFFYWlJ1fXtpdFJnSUBfWFRnNTFyQHhdIV10byM+RHJQWytdSltVenIzVCp9KVo4Llk2TUUufmxQQ3BWTDtKNEEibmxjfUhPYzhScDw8bGNUSXhKSGA4JiZmPUc0ajsmNy9JNFIjfDR0VD1r''@;'; put 'put ''enRZNjhzJDFydGtsV0w4LHJOW11+dGNoKEpIL1cqSjljMTttPXFedDdRZ0FSRn5pMVR1Q0NmX3VaY2JSSnR2SFRANDdPZmEhImtRUTNnWSZ8cVIxcihbXyIxOGs6W1ZSUVt8RnRafXpdXnRDPGNLPVojPiZGTDNEMXtiMWJuT0wwVmQjVWxMbUQiejpuPlk6VklaNTlKPn1VVT49aENoc3A6e0Q8''@;'; put 'put ''VEMmPkcsPW8le2w+TTtxN1hiTFp8OiF8fEM7Q1A1ZC84fFZQcSh5cn11biRLLylZbiQoRkR+cllSMzgjN3MqdSxMa1JiMjpfXVUpOFlOdjBhO30uZWo3bVYkJUl6SlhxdXJuJi5ucCpXUCErPC5Mant8b1FjLGIrfElfbCpAck48fCN+XlVrVW9ReDA3SD1eNGx+fXxHYmNRQGdvRm9MRCxIaEs8''@;'; put 'put ''fnJsZjdFWjRSdWVPK3xXJj5nVmQkZjJhd29UZkJYcXgpa1JBamp4QSsmWyR+XmpuPHtnTSRhYXg+P3t2KWpOUCI+UCVHVH0vYEAwRFY4Sm5PQltCcUgwJns3OHJ7IyxVfldTQkl5PU5hNG1OLyRveCY2XW4wJTN1dTczR0ZxcFgpSGQzRXJzfUUrdEFfMU9QMEsuX11ZV2dMaHpEQHlTfEYvXyN+''@;'; put 'put ''RDQlUnssb29tLk4idCZnV3BBImhNe1pRXjpZTnt8I20sPHklVlMhSEA0KlM+TUt0e3tdcl9afCJYJnI7eWxMTX4yYyl8NVluY2l3Q2BSJjkpQip1eTdkXkVgaStHVE8oO2d2QFA9TWFNQHg/YlFFTjZ6IV4kJm94Z2FCaEJPV05vZyV2cDMuSW1zNjliKi83Oi9hZD1VZnUjLCVsWmImfC98aWR8''@;'; put 'put ''N2xOOCl0TFFyc1tHUDhAdHpgMElPVz5XYz1KYDFtPmZiNm9FeCM4RzQuWi44Ln5oNnA8dUZYIWpBOk5nPWpnYTtnNiM1eGAkdF5WWE42dWd3eW5Xc2ZPezZuKWo1e3hmOjckOm5IJGMrLylJWWZaUHo4Ml0mUiptMVZHKSlpOVY1RjFufnY0Q3EqRjE6bmZlP0JLanN5MitVNkc6NkM+QD5DUWYp''@;'; put 'put ''RFZ2XVgxXSsrdn1RV0FfQmFQZDpnVDY/MGkvJSs8Imo4RigwMiVELns8UG1SIUdOMCFJRkA7cTs5QUkkZG1uU0smbzRKQX1QPF5zc0Rrb0ZVPFIhbEdpcElkYDRecG94OVA9MlUzN35GSmsoeVV3dCVTZE01Izd0QnAmbStvNCV0W2czWzAreFg0Pmg0Nzl8QlE1Nn1lYWo8aDhsOjZ8UlRZVmVE''@;'; put 'put ''b1BkLlZiJV4odW1EJSQpYFR8VmN0YCg0RHwhYU11WzJGZzRIcixjI19kXXhJczp1Q05vbFVJYVAoWCsmVUV7P1c8ZmB+I3ZrZiZEcCV0Mi4zIS5vfjxzSzVdSChtN3coQU1nY2xAPU9zbyY6Uj87ZkVmelRIXW9yV1dVeHhSdTlsdUxtdi9KR3pIUmIpeCtGeylyd3NKS3xxZXc4SnllXk9idjxe''@;'; put 'put ''dVcja0ZrdDl5SCoqRi9+QGR5PHNvVUVkOWtvLylYK2RMdkdIIjRHX2htMDY8JGlvMHtPTEhKNFl3IiQxWH08PXVjYjokZz92YUlPfixJVX09bT03TWwoS011T1NZW0ImLmpjeCVMfG9tdCJnRyFfWz1RKjMkcFhDVyl9cDgoWmE0RF18eXRGK04zTDpRdkIwK2VtP2t7SXdIKXkxRkpJVD5RMiss''@;'; put 'put ''QEQxaGYkKVF6ekVyNUc6ZkR0fFJGYHpySShIJEdfU2pvQE9gZT0lO1lTd0BIMzh1Xythcz8lIzpDZENpLzs2b3F6ZFhAKHwzPStFKmAmTj80M1g3Pz9ZUj1qRG5wM3cicURddVA+VkdlWDxsMXI2QWRPQkNrZldBNDRhcHV5JEsjZSQjdWRFe014a05sZXNpPH5kckg9NGBBPnVfKjFzdV1AQn58''@;'; put 'put ''WmwoL3hxLERmdlM7XzhXcWVAaD9XIyNkI0RDMDxDQnNPZGRnP0sqOV9hYV5tNnR5PkRuY09PVnx8TiFaWiNmJHVEQnFEQUpfS3ooIn5FUUBPdVRPR0VEL3ZHRTxlXnBrejtoTmUje3h8Q20ieF8sM2ltP3Y/REU4ZV9MdUF0cVVgal5CV114c0l7I3pjbCw6Tld2aXImYVpyIm9sc3g9dDVFNygx''@;'; put 'put ''WShaPHJ+OiNwVmFLZXZ8TTF4ezZFcmUiYFB0I1E/N0BPQGA6MEMufisjbDhBYEdLPlhzeCx6NUY1UkghXypIT2U7IUojPkdONEBKSHBhMiFLXigwJU8pWFo6Li8ybEB1bEJUSTFyNSM1dDs9akwzRHEwRUVFIWg9Y2lrPkZeeEEsZCxoXlc2IXtaVDhONXdyeEZ1XzdAO1IyYSpKcyNJSUVadFV2''@;'; put 'put ''WHckQ3EiYG5ge1p2P2VkL0xZXTM2WD16RDMxeF8vNXViIm9GJWU+aVJQVX0+Ql4vP1AzLCJ6Kj92QVh4Sjx9Kjs0PmwsbF46bTYqZnBabmBAcSxkcUxyRzVUVykhQmVkZVM0QnQ+Zl9WeyxXV1IkQmIsY3gpdyErTClwQ3Rqe0Zjdj06ZG9lXU9SMlFPNTUlSEw4R29mUlp1LFlke0wwMXolfSo7''@;'; put 'put ''ZDIlNz5mOH5+UHJ7RUNPTkNyVzFxOkhWTGkpSHJraHkvISRvTG0udWlQUzVfJiN9dmZfeU1sTXtpKl9deW08WlA2ITpdaCtYMFpDTTxsVG1VOktkP2VeSDQqJG40dHd3dTxENCVvcSkiWzl8WV1uT3V9MWsrL2VoJGgsMDBsOD4sdEkrfnpJfnwicDw5O3pIVWRrfU9uMDpTSyFDXldWY0RhYDpg''@;'; put 'put ''KVNFLF1bWzRkTEpZRU82b3ZUZ0tPTSRTaHglQlU5cHhORzR7XiUsNU87PEs0cFE5M1pNdHRLOU0jIypoKSxwbi99JkJCYy9IZmpgNkM6W1YxIVV3OGYsT25TSjtRZ2A7SyFnS1VPU198Nmg3Z1RpVE1APnh6Q0EjOWJZaV5aRj9ZNDFwTyUmNWBeZl1lYWUsU2Z5dmYoYndUYEAjamZFJnsiU1dX''@;'; put 'put ''OXsuXztDZ2NVN1NpVHRvJHI2bDMhdGlMLGNgQl1EVEM8Sil3Ol1ndT82fD0zVn14dk1vW0s5YGFGMExgSjpNeEdzJCheW1c0aihbNlYhayEmSDkuLGspOTRDLDNWRlghRygybj42P2IqZTk6WUhwaUA4VzhBO1ViXiYqQzpdZ1YxPWdsNVlHdlNIeGpjVnwpO3MjYF1ebz1PTi9MLntEKEt5SUkz''@;'; put 'put ''Vzl1VDRAa2E2QHk4Z1hKMSo0OkNAMT09TThvbT1NVCJDN28qbnlASVlWRWY9blMxTTUlMV92Wi42TUswbGBOaGF4QVE5bWJxbnFeJjpWUXBgQ140bj8qOllvNVhfP01dfGtNMDwsXT1TaE5Ue1N2UnVVYjFjckxuTiRHcEFvdVZvTXVFMFlPRDNLPDlCcHhdTE9YR29YazJoY0U4TVVuOEp4NHE7''@;'; put 'put ''W3BYQSgmSSNPdjcuV0R8M1M+dzg5blRMcUo2JUFAOmBoTkY1THZ5U2dzPXJyTkgmcCxRKEhRRih4RFJgbntXL2N1IixPIUNHNykzQncyPD0mLm9OeHE9PGVnOVtnMDIvekptMFpOKFtPQD9EMC8rZE1aOXg0OCtFbjBvODxWW15UNjk6RGx1O3VYNSM/aHZ2XzBfYlJVLipBOClbSjRTaXxoVThm''@;'; put 'put ''VCJOQ0pwRklnKyl5OTc2dS9vMm5lIilVKGZLUm46MTg5P1ZzdTg1WlNzaUFuIUtuK1BEWykyZGErKSZ+NEx9KV5bdEModGVJdztxSWpRN0ArY1k4UDdfQ1A3USw5WCtvTTlNRWQ/aFJedko3akxiIyZkPUw6dVA6fSZ0b0c0TVhaUiEvRDBFKD5aQEc5RkJrRFIsIy9pajtbcUwqRFZ8SFchPkkr''@;'; put 'put ''VXNbcmdbL0lZYztudT0lNXFPO2VsN3V9cCR2MjRxJGdYMW9YUm5+KVpOO2NHUWxFPm1IdWFAZ0N4VC9Tb1N2QC4qbiN9akEyTD0wSlVxYTBCcCVQcjRwcEJKe2xxNkdgaDdlaEl1bzM2MTt3e0BWQnIpVSE9X1dlRCttOC4vME5VN0J7JXUzdDR1TGBFcT5SPSR4fDRtcWV2SSJHPk1JYS5xNChb''@;'; put 'put ''ZzdKSFN9RTBqMSQkJCVbNF5ddEppXnw1ZSNSJVtBUGtUYHRybyxqQHpfVyhAfCJdUF0pbSZ3KFZZVT1OWUBEPlRdfEJeSnc/M3RISSElOEtZbXRZI0dZWFMqQDpzOEheX2tdXkRNPTk3VUhWZjZnKVk6WldRMGJIUG5yO3tJViFYcV5TZWB8c1B3USImdWZ5KytFcHI7RTVxM2owP1kldU88RGtd''@;'; put 'put ''XWZ0VTh2WEREfkwzIUQpbC9nNGkqbHRyKmc0amg8fHU5cF1IUH5kN05zWC9jUFguJF5nZkJ2Ois4XWpHSyo/KnJZVkxdX1NOXkg2cUFpMXt7eFZvQmFASEx1K2NPdmkqZDpQWEc+dUpkNUx5cjUpLjc5bm87dzJNTFFoTlJzRWBMLG5HWFdPSDVkYjI7JndvXXxCPEIhK1d9ezdPUzU2KFBrNSQv''@;'; put 'put ''Kjw9OVN5QWBMR1drPXdKMHwuTXZQT25aLCFQOnFBYCJ6YS42c1BwRVY3M152MSQ4aDIyTko2ZlVmaSttW0d0c3xQPSU+eEdobG9lXVlTPDpqZ2x5e0tZM1hkaC5pb0xrXzBLLFhKS0Vxdz5rYXs3SGxyfH5He3VYVX5OR2hLN2BKVnMibGwjOSZoakBMJHV1aXE2KUI1TWkrLGEkNDguekk0QkQw''@;'; put 'put ''TVB0a20/dH1yMDlmTyplKlsmPWtKKnMvLkY4ektQX1kocDk4LEdNQkErUFhWLylIXndCYXd9Li9iMWV+Wj59fTosI1tiRDlsUmNiO15zLmNUQFszZyt3LCQ3eVQ4e1loUkoqOkAzbjJaa0sheypafGV4T2kzeG1lK1tqemVvW0U6OlVnQTlqVC59XSRsSlYuQ1V2e05AZF5pIVFZW3JaIyQqdFNN''@;'; put 'put ''XkUiSDtRUjRbUFYodDlnLm9VZCNHdE0vbzk6QUB8Q1RgV30zPlE8bUhnWHtARShMZHlhWWtdPitPYzRIfDtCN01WVilKNl1sK14pXlMhczJEc0dkR00rej9EVyZbYEZGTjJacXNBd0piVHdqTnMpdXlxZHlETClka2wjbmJ+NTl2aWYzZXYsTkZzN1NwN3xJcDdGVT5Jb0tnZ0FmPV9RdShBK19B''@;'; put 'put ''U345Q29TQWJQeyxSWEMrYltNQkdPV1hpMW9hRzBxanhKcFlsWlRuQ2U+ODt4O1oqLEAmOiU1SWI6JD88Jm10STJ8I0Z7O3gjLjw+cS8iWDY2Z1BqNnNEIT1WPlU8SlBAdipebFFVQztrLjxwX20kJGtILlZfW2RGODBzYX5wJk9eOyIuOFdQNHIhUy8mWF83X3BpZiQuKH0rZz5NT3NIWyRZIy56''@;'; put 'put ''NS5FMD1ZYVYkVkxCc0RCW11HOTw9PzBmK1hZbVYzTG0rdF9nMD9fbiQvazZ5TjdlKERnXnlYT1dDWjdOYTspIzFYaykuMkVIUF9SIXJoZEF9R1kjWDFBViNzKkoyJj00Nz5DTj1YZlNpa2orKE17R2I9XlQ2UzFZOntVLFZQN2RuNjJGbHEwIkRLeihBbjh6bDIzQEBGWHtdVGowRno2eFNUJltr''@;'; put 'put ''TEU4TXd2ImtMVTRmVWE4P182YlNdNC91bi9OQ0VsalR4SXE6OmFTRGY2QXx8Si5MJSp0ei9GImJ5PjFYey4kTkZxMmRQPSFhLHR0cyo1RGg6dSI4T2khVHdzPHFlTT8xd31KPy8xdnpETnVqVXAjbDw0I2NycFomIXk+fGIuZDcxJTg9YkR5MEtCdXBMKk5nZml+LzBrIiooV097a29xUkIsP3ZV''@;'; put 'put ''LFg1UmU8PHxsNCY2S29ePHR7TWAoOlNbPExPQS87MkIqaXhneiFjMCh0eVA7MkwyaVJiYUIreEVrPDF0SUJncnlwMm5xX3EpZEVGLFNTXXEzJjIwVGJ4Sk9APT5LNG0/MT9vSFErU3xbeGQuLjVXQUdmKG89NDpMdGByY1BseFVRYTtuPlFdKGwiUGV7JikiYX1GXmR1VDUjQmB8KE9UW3lDZ31R''@;'; put 'put ''S1duPTREQWUsVCI3W2gkWHcmNiE9K3BkRUZTYnx0aEprYmp9Nk98MF5CUiR7cypgTjd9U2NfendJcUhZPDx2JiJtW0pdTlh0QGtfUDFhKlghJTNBWWU6cStrPWEheEpAJExBP0xyKTo4UjooQi5dfWtnPlhUcUxXNioqcE9oTztPPWY/QT16PGJSZD0qI3Y/UC5AQ3BJOl1kKiVKeFdJMkxuO002''@;'; put 'put ''MC48PT9dSHF2MixgLlcrWFhWalBaOXxZd1pAT2VWeHl5LE46KDs2NEJuSj1YU3k8MGp4RzkuNUd3dXJHbUltL0hOKSYpRUh3UDkyTU5XTWYuejFOYzREc0MuV2wzaCNgK1YjITR1MTlWLHAuMn1Odn1uZT9BLzdmMUc4cSlzbH0veE1leExhMDF0YSR6JF97KCU8fH49RVs9V0QqcjV0UEliX0B4''@;'; put 'put ''JUQjUCJWRVlqK0E+aHRNbF10Pnc9bUJ5ZHQ4eDJJMksxaDxTXjgmQC5KYndQSzk0IU4rfH0uflp+VEl+WUwpNHtRPWsqN2VZWFQwKH5qfF00UXN5YCZNeEErdil0RTAsVGE+bGd+NUdNI3skYVc7I0dIYSN7IjlScnM6Y3ZRPERAZHJhaTZiZC9zTX0rfmZGI31xX3E+ZjNGMEB4RiplKnUuPj5d''@;'; put 'put ''cXQ2Lz01bmwrZyxiZmMxQzNIWUpARCFwPi5PZV1rL1VhUlVARlQ+fmtzcmRtb2ZCdHlTYGclfCovVU9YeFY0UD5IY0hOV0lpOU1EY2MwPzw9dSFpKmk1PDokb1FySjZ+UVdkNEkrXn5Ma01RJnZrZTxCRThxSXVTcF14JV5lJCElIjNVSzI7PnheJDU8UDVQYGJEVFRydSpeKiEudCFVOTVVTkFo''@;'; put 'put ''VGByfCRyeUwicTNfMl9HLktGelRVMkc/RGIlIUtsTWpnWCRUc11YPy59M0xTRF9MJElXTkVMUWM2YSUhX0kxImdgOElKRkB+OEJgRjpNTCpdN0IkQ2pfOGRjIlE2NUJOMmVgSWpDWy4rfWN9Iz4/dHsrSyIvOm5aOHAmO0k0RTVESShmQU5GIlZaeWZ7SCx6aypVJVIyWTIxSU5+UD81RT5IPTYi''@;'; put 'put ''O14qZSNRVzszTzFZJV5MMjFiSkVGMHp1cGxVIkRiRVMvZytMX3ozdkxnZ1FiMEJNaDlxTmJoLEciVHJVZCpfK1NQVE8qQTU3Z2B5UVh+XWQ6WiYoaj0lflNNczUhRyJqX0h8X3FHM0kmSTwmckhzfDtLZyovdSxzYkNBXlpTa2RZW3lvJiV0SERaRntEJClpRmZ9XzZvaDAzUCxdfmskMjBPenRB''@;'; put 'put ''eGpTa2t4MzJnXjRYVF19QGN3XitpOEU9Q3oheSs4bURDLnRkfFZ0XldTNnh0ez94LkNoRFdVQk44LjtyX1drXnsoVlltMlZLKE5vVEYzXl9nWzJlZk5faksyVDpAMjg4R14/dmpRNTF7IywzLHAobFFeN2k5TmZEQHkzOzh5YzZTI2ZBJiEjMSZ3ekNPPEhgWm19bWJgPzRJfFhBaWJeYFpNbkoq''@;'; put 'put ''OE0vOXw1WHJNazYzM2c9PThnQDRAbWVCdUYlaVJ5VU9VdC9bQCRJZmJMUFpsMkw9UjF6WV0kfltjSEZBYVNoQX43T3doTUtbXmR3by4jbV1CPVpKNnNdRU1aKyUpeWkzflMkdTZBUCs6VVFwWSYrVjh6XUNiWXZld0huLmdEdG5JMF5XOVNwfD5Ga3gvc2VlKCxiVDwjVUltJmE3SG9ANl93KUUl''@;'; put 'put ''TmcqQGI+OHIzdSxSbUVEPGtGJmU1NX51JnYqK2FXN15GLnR3VEdAMCRgR0giWmFFJnopWW0sI0U5dWk8aT8rOkhKSzJJbH1mZ1clN0A8WUAmaXAxaGBIME1HQ117Qj5dNEpbO1F3ejQvTilgM3VLPnJPJVUwY0cjOmNkN2M9cTA8Sik1Nj1sWzNwal1lO0JUXmVzLjo3VT94M1klcFgoUVpiaTZO''@;'; put 'put ''PjN7dCJKVDI/RH5VTkhmfHZ8PSNWYCNqXi5VKGQzNlJBbjJHaTE3YHRkZyg2VmVNK0Bxczd4eCVxS305R2hWMyxyMFFqZHheY1ooNH5Ve2NpOT5MU3EvLmtxJV94bTVzak5PRElVM29gbGp3XVFUQDtvfTgqVmxZXihKX2Y8Pi4kfUkwPGBkcW4veEB4SkNJVz9aSmIuV3QhI3VgbkJFdD9+cWQv''@;'; put 'put ''YXRGeTZ+fkJeVzBOUmN9Rl9wQVNGZz8xYlR6e0A0JHYkTTU7OSwjRDdRZGMvJHtjJGF9Q1NvSjROP0A4QH5kNks/JEg5dWU9Ii88UHN1QS9MX04+JWAscjFsdVNqImlrTEAqQms+UTxoYislQGtFaDkwbURiYjI9PlgsXzNGcHJjVVBEY3YhVmBUenJ1eFR1dUwhX2lMQWF0fSZuVGxJKTI0b016''@;'; put 'put ''azdtdDglV1pIJTBiRUtsSHN7aCZhLy5LIm9WODBHbGw7WmN5QG1NfXYodTIsJig9Tkt2JlhbU3VhI0Quei5eZ2tdY0lTS342Syt9S29oNUVlQWFYPDRMfWhGKEs+Pi9aa0Bxc0Q7ZU1mUnlTYmZlVEluIVZsLHBPSE03aCszaCJXMEJrbDMlalJSWFtlR09vRXBmKEJeR3koaHp4PTFbTzJsRH1h''@;'; put 'put ''PWxONmZDNXMkWG9ISjA8czhEeSt0WExzRSpLZWA2TChHdGNjVnlbU0JwPmxJSXpgcDlaW1J6dGV+SXNXR0RyKG9Ga0RqL0JDNnooeFFqdmNxLyQ4aSEsRlVnP0JqLCxGdStpaD9TSEFCWW5DIm11YVFCU199WSF5OWElTWFbMlpHRVM5QGE9VkN4WFdJaDE/ZS5+eiVRTCZwLiwkMT1LWTo/VEBr''@;'; put 'put ''NFtuaGkwV1c7YElfViRsIWx1W3hUOix2MHBnKU5bNFRVJFcvOjUoQk9DdF9FLnpqLi4reEg6Ml13cWpne1VZNHxbNXB9IWBGKHw9TjhfRmBDVW5GbUdoeHN5NEZtZHY8P3ZQVnNKSUsxZT1rWiR2X3l+ZHBddk5DZnpuSnA1ISpYb01XfTJxQSg5W304KlB2RjxvZyMxPDs1dCVxQjBTOjdNUV97''@;'; put 'put ''fUZQenNDTCFvJShjdExpcSh2ZCMrTEorSHpWQV8kVWw3KT86NEVROXhLMXV7VVJHW1VqOX1JZGJRKlo8U2J6MWJeKiQpbCV8d1p9e19FbGJ3InVFaHpCOyRRVm4iQ3ciSEowaWZMQlJyWGJ6ZC8sTUtgMD1RdGBOUDN4UUt1aTpIZWY2THg8aSlyOVIhS1o9NG4jLG90Y0dLeTt8dDBdeWhLd3d1''@;'; put 'put ''SU9RRDZqKTI9Y2FrOGNDQjsvQjU5eGcpMXN9a3Z1d0ksW3xafV9ETytaLmZRLyEyO1g7Nk5VKHVYaUcyQWRubUpnel4uQjdVeVFnQSRON2lzPTpOeUVFV0p2WXEkRUlFRShSRlhdYCFWJD8ifTkuIUNvZUFETzdQOyM/SUN8TnduRiZKdSlQNHczeD04eiFjSWRGMGcjcGptP1pwfm1LSCZHPi5r''@;'; put 'put ''Olc1RWVRPzFIKGh0RHg4IjduWEQoKy9Ed2Rue25VcVJSLiZYZTRYeVdgZHNnX19aXy5rcUspbE1bPmxqNEh7OF18fT43P3MlT240Qzd3OzFIOmFRVVVpWlM8YyZMNk9lXWNYUX1lc1t5Vy9KTEpPZztZYFpOZmo2Yz0/NCMsOXZqbkpITW1YVF1vP1ZrLktZOHEwN0Y5NTIme2BbcVFWdClyRjlx''@;'; put 'put ''Pk16SlFEcSxxZVtlelFEe09beHJ7RWZ6TDpkWiY7XmNpSUM9Q09ETFFvWFQyfHZ3IVhtOEx5JF8rdTRkQigkTCohTmV0S0tONHZDSUA/SnY5cVJAZVpfIzJMN2t9bSx7R30zOzw2czZ0fDlqWUA3K3BCeUEsSngwUGBRe3luODU/e2k4JFo4Y1ZHJk1GaDVaa1A5bExuMD8oRURGM3c2JjB8ZDtr''@;'; put 'put ''TkYvY00qJlM3VHBRUGAwRnh+PllGd3syS1kvJE88ZjMhNGpSR24rZDgmPSVOdFloNmwpfCpxaF4uQlhHPnJAZVcyIyg/Z05oTCk8PypCKV5lMm4/NnRGckdNUnRoPGgwfEY1YEx3KTNlWUpeWCU0RG0+VyooVXpqIz0wenYwQTNUOU0kcGE0bFdQXUhlLFNqajhKc0JCOlo6JTNEPUBVTWB1OHMy''@;'; put 'put ''MXIsIjxLPkB3TCE9WzRFTUZzTVFJVC87MUFyMURnNlZvWGdkdDVGTm5jai56OCpDQGw/T0FtL2E4QiEuPFtudkQoKzdxfmBkdEZfVjZOXU9rPnNvYTpeZj5LIVNLI19kWzJ8eHtZWW9KbjEqdHFlMHVoZE46dVMzST5xQzZKT1B9Vl5HZ2hQbE5JZTszT1tJUTxaV3IwLyFuNTVpQD5gMD5JZ3Em''@;'; put 'put ''JSUsTHs+MTJ1MngyJlNmKyFpJjtOZ3pya3MhIS42dXsuRDcxOVVVL1gkVyQuRS9xdlE6I0FZP3EzdjIsZU5xWXVCbDFEXWo1eFlhWyI6UiRDUSU8NX1YKkJZMGkxaTBVQUpQWGJAQUkoSFtsOGd2WEJMbEp7alhsSDpjI2ZkfHlfSklfOVdkazNRIzQsQGNMMyMpNDNnPDlVRShMNU8kOilBL2sp''@;'; put 'put ''ai8kTHE4SX14dCNlZG19NXEmakAjS09ZLkhoTURQL2A+fV8rWjt0XXomJE88PldDUSJ4fWFIT0slLGU4QnF1ZS5VWDQ+KVA+ZntrJk9TV1FUMkdxOVZ8eGJZOyFQakQ6MmZRK2Z1O1pRdSg6KiVuZ3VTY3RaenROKUZIXypYNlBKTWZlRjouLi9uajcvQVFnJmk1MzBPQn14fG1QbX1xR30zcko6''@;'; put 'put ''fDhoJFtHRiN1TSwhIks6UWZhZGkrJVZZP3tRcTZQdkp6fkJtP25FYTRZNURiTyldcj12eGUjYik+WkJkUkJpVUJ7QCxpcHdlLDJkSExmO0U3WXg8P0N3eXV0eDReL1NiNzozNkR+YGY/UTRzWFMiWkNNeCZxITtSI2x9OChdMDt4bWdkNnFocEwjaTomRiYkc3kzN1RKfmwoLmU3ZTtPQzcvPDoj''@;'; put 'put ''PHpvfCRtaXYlZzZuUWBKXSFASlhffnxxWW0jP0NxO3Y8dmxnXj5XYj1QLFVtdXQvZDB8aWZ0a1tvYypSRUMyezZJclVLdyRnKChIYV9ZSXFeMTtyKXRUVD0pRGArb3FZYXhWNy5rX3tea1sqM2F3cjxpTllwYlZuQ0Nta0BfS3hWNUk3PmNSQW0uX0N6Imw6JU5FIj85OlJCPHt6MXR4Kk5jd0VU''@;'; put 'put ''Pl1mczJNL15RMz5uWVk5L19DWzxSTzdUPn50KSxib0AjKng3KGJJMDcxJVgkZ3pDdEAhaVZJNDIkR1kyYlVzT1E1OihZeDFPY2RmPmtWXncoUjpudCpaUSxTN15rU0ZRKWMjfn1hKmJ8eV0sZHBGVnRKeTkzQjUlUD0jYnFFckJIMHJwIVA0ZEVVSz0jN3RndjglIXFAKG9pP2U6TnBNMHt7YkIv''@;'; put 'put ''KG9PWFohUj84I25GZDJVUCt6T3tSO2xGXXdufn1ibC5FV0gwbHpnOCx2OVlfW0tXPEN0aEk8TEh1M0Q0TkdhQW8ma0AvV3E6W35zYGM5KT1xRWU6Tl1dPCJoWEdtRSskRTRPY2VwMz51Z2hUPEVyInsuYkRWUSg5amdgOz1DRiFwMVdWQyVrSkdYRUEiMWIiaHBobiFqaXJkWWBNNzl6KjtRR0E+''@;'; put 'put ''bUpmUFkjWT4oQHBuNChYNVMhTCJ3XjE6XkFqVy87ei9ZSUlKZD87UiM1fld5bX1ebjhpWChaXSxsRW0xeX05VlZSfUdtbnpPSCU8Zit6akMvRGFPSFk4WEQmYzM1OSQuYDhhTGhPbDRfQmIrNTNScXZDQlV2RFNHYmlqPj1Na0FyRjpkP1hDTjllaFY8Rns+JUwyJWdwZld3fX1KbzQpM3AyPFZM''@;'; put 'put ''bD95UGZraiZRO0B8PmlpaSRiYXRsaUIzNXNRK2NBSkY9by5TZW86MH1lPCEjOzxnMGxTKXglYmd2OHRFIllJcEtBKTUqZVVsYjVnb1l9alA0UVs5R3tVZjB5Uj5qRVVjJD5CKCNuPW5UcFlMJVJSIjsrVHtSSVRLan1qSWBTRDE/P2J4Li86Q35BN1lYWHNSd3RQMVZRdCk/NSsjMyJ2KSRHKnE2''@;'; put 'put ''JXcrbSo3Sl9NX3hVdCM6MkQ7QTZoLlpTW1lpUC9LKnAkKWooUihsVl8vMmVMeD8rPFM1Oz4sV2N6U3xScUJOKnY/SVpyUCZ9KURkRSM5XW0/fHkldlVOJG1PVHs5QnYobU5LT2w6SmhDMX1RTnVpYEdSel1od0tGXVMvW3ZlT0E1RC87Sml8Ok09dlNDUm1fK1BAWyQ+KTBsY21+PDtZWiYkdCZ9''@;'; put 'put ''W1Q2Ij1aSDI6ZDhfOyNqNkxJa0VnR2lsazZjWzddVVl+Y34kI1JOcCxhLnx0RnRaVksrbHwpMCNTWmtVNGNUUzx5UiZFQXJ0RnRyVyM2OEFadzw2Q0tFeEYoKiUkRkBONSs8TGdjQ2pmJGAyayMvY2tBcERTZXlPc14qdSNldWRfcnRdb1olaz8kaV5qTTRdcFRzYygjMy5yVEo6bEcjXSgsR2J0''@;'; put 'put ''eCRJPVcsIn1MVXt7MD9rZT5eVnFNIkBxPSV3KUAjJVdXbVozLmxMVj1uNVh8OF8xR2VnQkVgaj5DY1BOWHExR25wRSIscjthY1JBaDkoYnRrZ21vTD9UJnArbUlKNzBIUV4vYFlWJWZlVSF5TD4mcClSL3RlK2s/T3UhI109fihmeUhlcXNGMVkyN0NQKWFbMTlRKHdEYDNgRCJJcllNLGEwV2sv''@;'; put 'put ''OE17T0YlUChRPUspfUJ2dVckTFIpI2dkNXh4UlgzVCosZV5kUVU7eEtMeGtCLlh1PlRFL1F+fCpXN1UlXyU+QmJMfHwkQkVqOCFgO3FfK1koej5rek1dIyMqYmddSVQ0d2IvKkksPU5JPEBnSWVVM047L2BSYlQvK2p6QSokL3ZfYTVqT3JRVlQ4Qzt9Z317b18yTVU7YH04XU5sWGMiK308PWk7''@;'; put 'put ''Y1dFdnIsRUNnODgqZXB2TG5DMGt7Vjolai81fElpLkR5VkckYGdpK0FIX3JXK0VzN2A/XTc1V0d+ayFrMCteQzVNdHg2eDc1UXB1JkMhKFs1KnQvdz1qNV8mLzJEY2VAaF0mVi9VRy4iemI/NWkwUUQiYChhdmBiOVtydWd3b0p+Y0lyPU9mP2VgbFU1e3c4bSx6Wzw7ME5wfn05UDtvQ31VInZ8''@;'; put 'put ''amhVaXtgN2t0cHFndHYyZ3ZfIXZqYj43cWV6Rn5NdWp8LkclN3tiQkU9bipsfHUlJWd3cnFvSy5aI2p7YFVudlExOCI4WyxpdVBPbzlbfD5YR0YhLi5VdCMxPGJwOWREKmJEWGpmbXtXUnR3aWJuIipAUzZUJEMkX3NqK0IrX2RDJjBvZzxve00wcU5CfTM5cDgxNGd0OmljO304XmR1bUFHMFpN''@;'; put 'put ''UlU3JHs8VThyX08+W3FMd3p3YDYuNSY2M1glNy8rSzJvWW8+fjIxUV1wMEtCPSt6TW5FOnVONnkvbCFseSh9XU51Y0cmfnJXYCVQZ0ReRiQ1WU5GPzJVRWRSP100SFE9ViZXQGA3X0xIJUYzN3UjZFlrO0BAVSgxJTdEWSl3NSppPUpANDExQnRNe24iSDk9ISMmUTQ1NDxxK2YvYiF0bm1abylA''@;'; put 'put ''LFFOcTAmS1F9QDJLcSZ2aUpXbnB6JXhKMis6UX1kP11kfX0hZTMsMCYqUDh+eyw5P2pRUXc9WFZHdCxYcCIuclpAQUdyZjZfalFGMVZJZXxCIS9hZmVeNkU4P2puaF1fen4pLzFBZiYkLiNgJn1hKUBOcmFRTiNFO1NeY3B1UmhEV3pEMkdfJV9MNVBsVXdkV3M2WnRVV3h0eFFranFfRiNwU0dX''@;'; put 'put ''SUVePGdgRnpLc1hrfCwrdTd7LEMqbVk6fVE6K2x8fE1hcDpYKXZgWW8ybVtOLCheQmgmcSt2e3dae0olSXJEW0ducnVZLkhmOWdkQyV1Z0lUd1pecV1dcGpEcS8+fSEuUyVYKV8ucGYoIy4ycV1HaTUvI2gyfDIkOGF1VDZVfDV3SkNTZV93TXAzak93dlovNFhFTj9pXmQ8RDU/K2w5dFIwWlVM''@;'; put 'put ''YH11alkpYEZtJFFjMUFpfiZRPltLUmpoMVA4LjQ4fWtPLmdkKXRsfXJFempoaTFNYUFmX0tRSTArODAqbjZdK2xmSzdYbjwwaGZfVjpDXml0dTBOcSl+W1AodXk8aj8lT2lwZkBFaTx1UWFvfitAYjNuWzg5RW0iPWtubS41fDRLfipnPWQ+WjBhWDEpa3NhKDkkTkBaMyVtOklGcEZCWyNuT3pa''@;'; put 'put ''RS5VKC4uXikicmN2S3BCJWFNbnxbeyQ1fFckLntGOnZeP3NLfj4wMyFUemNWfGxMeSFOe0UkXjRbIWx6NGxeW1FuWywxQUh7dXomS11DO204XWI9UDxhMVN2ekJ6OiVTbzcuN1NPKkFyUHU6cWFsMEkyWyZXVmkxVzw0aE1daEh9TVJodWUjfVlCc28zfk5nXnJsIVV5PnE7Z2VaJnQ2eVNGOFJW''@;'; put 'put ''SyEkKWF8VFJeL0U9MyNAKzNQV15ZZSt+QkR4VjU2Z2ZUQ2x1OiFJQUxAfXpuaW56PTdYNWZSIktPLGVNOHM3P2IlIksmT1JoUGhZbUxBLko6JH1BImcoUiNgVk8pMFthalMkJFUiPDRUYWh3aFJlVkp5aUxUYXBocURCJHRuSEtlZnkqVDZfQ3BsMWNte3trfEx0JCl7SF9kO04jSEJONlsyLnpi''@;'; put 'put ''RHlkSFVPRElzUHkoRTF1KmB8KHlveHgqLnZwWUtdVGRCXSJrYFIzQSFye012fHsyX0F3X1VFKGlZXSV6ZyRjamdxaj8ieG1aRDY8PkYwQEgoP1o0dzR2Tl4pVkR1M0VlVmcxQz9qZDEwSkw3S3Y4ckg8fmhsWnd1NDNQIWNhSXdBbWFMIk08b0dPQzVNYm9vfGhyMWNvK0xxLERDZ0V5R0RHQTFY''@;'; put 'put ''KXZjdCVbYlZZWFpFQz1jLlQwezAmLEcjNlQ7VV0hXSViKDpkUFVGU3AwUjcwSyRnY2dxcmouayJ5QiosU0cjLCpJbEBNVk5JSUl9dUpnU0RXent8K1FpYDRJQWZxWExXN00pbFVudX1rfjB8T15RcDdJbW8yVDRnYWtROGk9d2QjPE1JZjN0VjNubDMybkovVHhqZlRWLGl6c3VCV2ApX2U0IS4q''@;'; put 'put ''elhhZHNoa215OVdYQV1zdHI4VWliWm9rO3g3ZWhebmMrQj47Pz8xTCNLZ0JQJm5uYWB5Ok5vNC4mIUB0JCZnXmZUYz4qLkVOakRkXjlfSWphRkRYc1dhen0raCMzKjg1QC93L2d1eEIoa3xJdmlZYThZQihMeUVJTGIpLjAsWUdJMnM+MlN1e3ByMHlmfXA9aHpILFRbYVMhdW5GSHg9fmxaSTQk''@;'; put 'put ''d2dnIms1Wyk5XmoqSiNPR0ckP1VvN3pxbHsjYW8kUTdiPSlvSmk+cihnVEFRTTRfdS5kOlt1O3wrWylUe0RbKm88VlIxYX0pWUJMZnNkbUIufXFpZG9fN2M+V0ckbXYiQiJOMCxVPXxSaldlfUhkU3VWUVA0YS95ZG9tT2JTV3N9PS9xO35fSHxOMEJgTzJkSiFlYWY3SGxoQnVZVUt5I0QvfHNb''@;'; put 'put ''ZU9lTHBuYF14NjlAdDYweDlMYFl+RGtBKjpfa1lSfW4+Y3tkYFJLc3pWUn4pRWdZPD5KaGNud2x3PFFEV0wueU4qdkc1aFZCLFA/WF5GV3AqTzFQZHFrWDQoc2UuJHQ5dzs5RWFOUVM4dk5IcVtoNVRhWXZST2pfP000YVIkY0xbR0djbmVBVVRZYSJ9fjd5fTg1LGZTcXgzUFpzKCR2W0V1Nk9H''@;'; put 'put ''MTEqc3hscEFLVWNdNnJ5XWkoUTJGa18vVSEjfn5tL1J2c2ZbPEg3cCx8RmFmc08wSlgsVntQZy9ETksvJXxraSImLEkiIi8sQ0MiYjR6S0F0fH5MXjY6IngyaGZ9Yk4lQDZ6c2BORW1JbzN7dyNfJUkhUSg3djZbbUp7NCt1K0R4YlcsQlt9cVRhdT8oN1l6QllzYSoudDZDQD9LRztAUlRNbTt8''@;'; put 'put ''RSZaTjk/ZCM6YEJyR1B9Nl0udkUmbk5zfjNSMHc0eXhET3d0ZUlzN3FsUXovPlV4alhRMEFCVUw8RD4vc0ouUFpkVUhQKjQ/JjM2UnlwVnpZOkVFXyxyIyY/Q2tHMSxoKVdTZSlyejVGOV9LVDlvclhrcD0ubjMmaEp0OkYkLyNFPmhxW1BmQnJIXjNPRlhTdXg1Qm14QGdFInxNW2c6KGBDL1Y6''@;'; put 'put ''UGp0VEQ2KCRRKTB+UDRrQCJTTH0xLCtRVHZzUk5WLiR9ZSNkT3B7NjUrQk9PKz1OdDszfSl0KjlQfllMfEFFejNbYV1lZCpBVWEuMiEvYE1xQjRMNzdCJXtrXTEpNy9vQCM6USg+V2RMJVYuSCM2Iz9RQCtTU1Y9ZlpmQn1+fSRVNlIpIjx4a0B9cXo5L3Yrc0AuSypSVT1MOUpHMVM/UUp6UkpE''@;'; put 'put ''NzVua3pGbXVOJCQlZV1lXXF5KUErV29uLntdVHxoXmQ+TEdrT0skSzAvRFFBP0ZmfU9BZHIxMEA/PHhta3FJP0xPMWt9UWVDKiNgTnFkeHI9KXxeWEZrRXE6V1ZiVz0qISwuPFIwPGpidUl4WnFSfkYrV2VRKlNvM2c/Qn46eklzU1RpUEpjRnRTQHlPNS40IUBZTj41YTtFS2xuRndWfHBQdnox''@;'; put 'put ''PUo+WytKc2R8alV4dXxKcEArdWdPVVp2X1o0QUoxPDwsYFpyaFJTaCZxJWEiZVpgMnAmODUwMSxsZl5pQ3l1aj56YnUjSHxsWTUzJDI3TD5pck9LTltUaE5fSXJKRGNfY1VIRVEmW0l8NT4jVD9PYF0sZlF0KGFyU1BGQmhmTTgyeTVSZy8vUj0sOk5lU3NDVUUiRVk9WlJ4JUhfSUxMbyMhaldj''@;'; put 'put ''dDtKYCJZO3NMK00jVy9JUkFLK0k6a2pTemNETHZxTWtGLCYraSF4JGU+RGxDbWR7MWJUWntdXUArQjZJJXFyTnpXKToodV1VdjhhOExxM2h3bi4hQWw4WGU6WSxuPGBQVHYrd156IStXPF1DXUg3Nks3eio4WG5gIjVybCV3bFV9Z2tGQ2xdLnhmI0gmRnpaS3QmcyxpdXo9bSE7N3MmYChiI1Eo''@;'; put 'put ''ayhRYmZDOzkjJilCXSFlbzRmekxyPTxjcGFaIlAkL0dFenhpdXcuYV9SL3NYcVFzWSRYQzpgM15aWz45byxnKjN6PFQ0TXtWaTZfTyYxdiFTRTo0dnp0amlgS0BaWURFOUwpRk86ISp8fUJmUilFcHtQYSl7aHRQVXNnfDZlPzU/P1BZL2VGLi5SXSQ6dVdBP1RNczNjOjBWLld7R09pUCp5MnZu''@;'; put 'put ''MXRZZlBXaE9OS00lMV1gbzs6VlRDSm53UlZ3PEtSWCt1cC9GZ0R+Mz9PaDZ4UjNvdTB5LHpIVXJNfDJnImsvRyZLRGNMRml1bEEkQjN7YW1gVWJLXUchNGVKakQqTzdDMyQxJncmMi9xaylnSShuR09UK3VNbHdOUWtUQm4sfGg2emNnaEAqaCplcyg2QXtUX18xeWZpNU9ebjsyN2d8aipLNllX''@;'; put 'put ''LDw8MVYzM3pUVGhmTUVMKzFDfX5wIWB3e3pjVmxdVEghPV9PWyU2TFFUaGhMNFFyRG8pUnJIRzN1PCMpVypefGpWY0dFcHw8USJ2TkNKMnZJITRrTjN8ZUU3ImRnenhHaSZ5RjM4VTNIJi8jJF1XWUlNIm9WWUJoJH5RakZpT18hPzNUU0RbekppWDUlT08wbGxxbThTKksxWHdqJSxFYDgiQGlu''@;'; put 'put ''TT9sMFRdLCkxUUZ0T2w5VT1AIWM/cm5sd1giPm5POm50KiMsWWAvRWx2OXx4VXF1KGZLN1I9YHA7Vnl2TU44ezRxXjlEM3JeTStnKGJqSmd4IjVsZz1AXVhHUG1tNSJZQiN4UGVoOXN1SUlKXzBbeU1gI2tOKEA3eTp5eiFHbHZefUI0R3BEKThEKF9QIkxkVE84M3MmNlRCMiVBZUY3W2RZUkM7''@;'; put 'put ''am5sclBBMXlQLitiWm9FIkBjbjZJS2prIUZ3QVh4Wmd2ZVkqRSgoJnRec1UvNk9fJCFxTDNMbyRmTy5oaXIqcSQ8VWZEKGM1REtAb2UyUVk0PWBXWkkobGJbUmlrKylxRlM6dFYsWE1AK2Fydk5gfGZGWWRfOGNwVHZEUzJqemFiby9DUUJHW3FlSzxnZmlqIz9beCkzTno2SSpQaGh3R1F1djRS''@;'; put 'put ''Rig9dn1de283JWVXY0M/QiVrXU15M3BOYm11UDVibTN3Wz45blZLaSp9OCF5QjQzPD5IUUAofm1+YXpTbF5CfXZjeSUyS1Uke0JUOmB5Lnc2am1AczxIPXJOaXB1RmAhSXMwW2pEJi42SGZRPnN+TD9sKD1mQVBjTzF9N1JLQUk5PkVUN2Z2bFNhVWdwVmlkSWtMTGRXaCslWk9LfFJnYTtrPT55''@;'; put 'put ''e21RRyY0SnlHSFtsU3g4ZFMhSylmKjdefnZ4ZnNhRjJIY2B2eToxMEdKYFJ4cnZXNzZ8MH1GRGJtd2M9Sm8zOV4xZTg4e186V1tzKzYxJDdgayU4MGNoVmU7Ujx0KjZnQk1QPUp+MDpFITFuSGdpOmU5PVN8S3d9LDZ8MV83NDpUMi5BWGFyJVFxcDhlV1t4PWxNfTJIcz9ydUokYSwwNmMjQmFm''@;'; put 'put ''dDpYN0M2eEUoTSk0R1N8UVh7R1Ixan17ejRhcn13NkhDaHFQQ0I8WDZjT01fIVhNN0lRZS5JI0chQ1hrcHFGLjY7YCZ8NVlOT19WRT5jbmg5KDppQGsvfFBSSyxielZ7LEkmTWFnLFk0aFtgTUUuPE5lTSVMRkgla2Z7K2VQemxnOCZyazF+SWFYYnIxRktwTTZvNzo4V2YpZzIwK0R2YFYxOVhr''@;'; put 'put ''Tl40bXx0O0NhI0F1MnBtQldOfDQkNGMicmV1ZlYlSntJRnkse1lWXkI8TXZjZmxlWkpUdkdNLndEUDc6PkIxN3k1JktOUk4+Xjc/dyR9Slg5QjhnRzU5PFlVbE1QZlFQdG8iSSU9PD07NFNqTG93fmNbaTxoNmdhJVFGXzpBd11uR0Jee2cmYkBbMFd7dzJJKGlWKzhvRl9QW2g9byNVbihUSkcs''@;'; put 'put ''bGUiTmw+akxxR2BXLGt1MGVvRyxpVmNbJUptPDFIZFhnRnhpQXRbI1QzXSt5SWRhXmJvS0NKYkxiKlVKXjl7L2FRfThVXy83UG1jVWMrUzRvTyFSdFNuV1V8VzZPWWssS2NpZjRzX2taUl16SWcsYjk5WnMyblRTKHp6cHtmTk0hQkM7InxgMTl3RVBwWUtNRn1FY24/OmBmQlpAam09RmIqZyl5''@;'; put 'put ''M30pez13VzVNcmZQRExkK2NgR3hpeTtvTyJramBzNmVoPk5ZMW9JQlN0NilXK1IhX1N9bnR0aFQ0Rn18c2gvLmR2ejZjczJXbTVUbnU8MzlNdV56dWB8N3xQTls/fnxUWE1jMSkpYyU0RmpJcys/WzMyanBGRUUxcTxDczZGdERlOWtDYE18Qn5wJW5pZjgwdl5JPDNuc2c2X1JAY05XL1kkUzdy''@;'; put 'put ''S1Z7cygvMkI9T35AJEJLMy9Nbmd8elJpNj1eaVZ9PG9hP2w9IyV4UmlMXy9xeWgwalZ0TTNgRCMkJlImYyRaMnRRaGFPRVdfall1dFh8S2pOJnlnTW0hdz4hSEM+KUUsRkllPDYoYntfWGl2d1o9P2t5Vzt6OE40TzptNHthcFtJN2hfWHU3Lk9TNEA4aWU4Uy5eLD82KzJIXUQ5RyJ1Z1BIM1Nq''@;'; put 'put ''VDcpcW08aD5nUz4wdChJSlg0NElFNmJZNCVHXmAxfkQwODs/LixRQSZ5cWZFMTNbaG4maGJwaXxHcDpLK0ZIKyVuVmRibFhPamlhPHJHNiZyOCVOeUFaMWo4Uj4pSX0kYH45bm80ITNNYG9bNUN9VzRsJGxdejY1az9qP3s5JGwjd3tkdUwoTUI4cCJWMnBlWm0pdEUjRkIyazdlSncxez97dE94''@;'; put 'put ''b1hyS1g+W3EpcTYqPWpWYiJYQHomL2NJdys6dz0rZ18lRypdZHMsMEpjL3lGJSk6M2Y1cT99TFZvbjdQV3RraENTaUhgVU96VD9yUHZBaXhHSXNiPFhqZHE4aiVTeDp8MXcrUHc9fHdMTyQsckchISRka0RmbSshVGV5Wy4kXkg9dHZhIVd0ZTk0diRdPlZnOW8oRl8qIj9HTkZ7YEguM19UclJx''@;'; put 'put ''cnFOa3FlVFlbaD0xc0tZcHcwPzlNfVRkRVBPYn07ayYhWE56SSlbdik9fClebjBgcmUmMSZCPDZDUjQyQlppQXY3YGR7ck0mfXB2ciQuV2hmS1ZpZEw5fHFQWWpYdlJTbFRuK1ZPPWxpSiopbDVEZnUsUj1sWHxyOSxfXk5ARndNQ2NWPF4vY3JfV1IrIkh4b0hjJk1vKlU5Knc5UF1RKFhoRSN7''@;'; put 'put ''PTx+bWh6K05kJHNRfUAqQlpVPVZ0TltxeWcwZkghdkU9UylZQyp5WnVYalJFXnVHUS5objFuZVBuMjsmQzJQPVhTYGl5ezo/RHwqK35BKE4wRTVxZ2NbX2Y7RDN7Ty9oPXk3WnZFRCI1dj0/NDtIaGVsKldRaU50KWFtVlhJRlZnT3MuSE5nIThaVzNNdExzN3whMSpBUzo8SSx8TCoxflNLZ0hm''@;'; put 'put ''TVlzdSZxdFApdkVeeWRoPjwkKE1qa21DdmUmNG1gfSx0MTdSeHx2XzV3ST5VbV9LaUcmPXYwM1ksbVY7Z2I4UHFTW2FJJkp+cC9fOmBuT21JKm43QSg6T2AqbjBvLFpVYClUK1klQmYjXmJjVXtBNkQsL1NYTiNnPDNRLFZ6e0ElIUlEbjZoMnsyaUI+ZEY0WDxZR3xEVXdMT2FPWEFULGJIQ3Rx''@;'; put 'put ''VmBpSm10ez1BaWkkT3FPM1p4XWZacEVvO1kkSDFOQyEsJHlVMG9RS14kX0VDXjUmR2o5K3NVNSNhMV0/RURWQ25KemkvSitJPUA3RFRMNWBLMDZldkk2bks9YkliUnFLX2Rvd31hZCVfaTY8TUNsV2p1b3V3VSRXcV1aLEk9PEp+OGJ7a19wPWhrWjVOeDU5RlV5aiJzPW5fU0F4QFQlYXdVL2tD''@;'; put 'put ''dWNNdHNtVEhbMUZRek19KntAWV1WPUovUDFNJiY9emQhVEZwVWdrIVR1aSs7KWwzQkFTZHAzJXlrMDNSY0w5Wl01K2hORDxsfFNJelo9PUQiODUrKFVQY1hJdXd3bkMxb1koYUJafDdgXlhYMG4ycjBhQ0p0WnNTOHAuXn5PUXgofTpzPFciMXdkWj18aGtMdHEueSVuT11GQkBOYl9rVFYmJHo1''@;'; put 'put ''YEJ2JWduZUQ0MkdhbG9JPyYhZHNdfjJYc25uTFZyWSNxP2ouVENOZyE8OnQ4Xz8jcF5DbDZsTUJnfTNEc2dSdyhAI3w0Z0N8MWtgPXY4Mi5LX1dpYl87VnlfWVMqamVmOjNQMkwrVXJPbFltfk05eHRZMF5CQ2ViVGFyVDMwUWE6L24wP3BmQ3NZdm92VENSW2QvNjlVbilVKy5eWyxhXz9PMjox''@;'; put 'put ''M1JBSltAOTJNczAseyRfXy5LSHAhRzRLX31oR3tTZ2wjRm1DajpEWmY+OE1OZl85cFJuQVE/aU59XnRaMDZLejk1fkxlQyhqRTguKmJ1bm4pTio4cUk6fHlOWFN1QGZKZmxzMz5jako0PlZvQlpRe3tvZTBmQVA2czgyLk8xRHZTN0wjTE9WOy53MEBKOExyPCwuXis8ZTFeIVBPcWE8QTVgakpw''@;'; put 'put ''cTNnYltaUkd4SkgvN0N7bjpNdnc1Tm4pcyhsRVhDWXw2Z3pTP04sTVpleW5hZnJoVGssP1Y6YFpALjBAW291PHQuTTErYUt1fjc+NmhhTjY2JVplOk5mTjZ8Zz59OXVATmQxRTVJW1FXR3dUeGJrajpgSG13TTs4P3pyRyx+LHYoZmxaOyg9XWxKZCxQP2FMQns0VS87dy87L11ycCJyVmBAQng0''@;'; put 'put ''NjNjN1AqO1spUVBPTyFbUUZPY0s8V0l7Kzcld1BQN3ZvL09qdyhaLHZWbFFFXSg8UiQmcnIoOzxgRipfZml2QzhLST5UIXMxdkh2X3IkbG9FUkFdVXJvRyk6MShxSDJ6Mk5xPV5hWyxwNFZocl0xIyVENkI/NkYicV95TTcwezxQQC54cC85Xk9fQz9bYm9IbEt0ZntmTEpkKWZ2fm5ARyh7c2lD''@;'; put 'put ''R0xFVkRBInA2bjdEKzI3aTtEfGMoP20xOT1+QCRvJmV+NmA5NV1FTiNPNGI+cll2ImBRVlp0IVFgdnplZU1NT00hcGZAcTYoKEpxS0ZFNCssYXZueHRhXSZMQHZBKkxzJjkzVyhELnltendhMzt7eG9GSEJXSGJgKjVpX01bRnheVXxrTERIPCsqKUJ9fnZHMlZ2OEojO0QmSmlII048VC5mLzZm''@;'; put 'put ''aD9gOlRkKjouNDMmNWV5MzQ4RXh1RXFoXWYxUlFITTQ3RXpuMTpRclVsMzJgeiRBRyZYakxjJSN6bGZtQChMPE1gNHBNYDNgRDFlPGBvX2ZbIz1hPUJIRCRJVmBTLy9kZS5CXjsvKkA2N3JuQC9BV0hLX1E4VENiRWt2bW1sM0YyUSZUcW9WKVMqUXYkKWUwODBTIz47ZEV5Imd4RG1nYmF8eG03''@;'; put 'put ''Nz8vWlMrRl18ITdEJHNgW31Qd3NvYWFPdCFBRUVKR103czhSbFhwODs1Xm15TzMuVD53PCR9NiFGWTFDJEwkMy93PVB2azA4Ymssb3daLEdsWnB0fDd3Mk88KnVZLD59Rl9yJiRmS1QwKWpMW2FvMFZFW1YxRzRMfWBNTXZsV3wzdERkTkhBNXxrcUsoTTNTaUJ+Ri5MPHo0O086YlE5dnlPL2Jt''@;'; put 'put ''KSVsRCEvejFucEhzI2BkTD92KVlxW35FVlg6UisyNXYuYE1dMHkyeThJazw1blMsfG5kaHhKPVZsLHdGOXNqOl89bCs9Q3hPUl9sUEZRU3FobTt5WDF4YFlYel1qRyN5MVcsSTV1YigjY0JQKFBqTFk8RSZlX34uWFdkNk4kZkN4IWNmK3tfK1FQKk9ibFZnIXRjPSNhL1ghOXhPYWFOZWFITlZW''@;'; put 'put ''JXk3dENMOGRCcHErbEZxJTwzMjl4YD43RTo1RjltT3A2YmZKfWNkYiFwbHgqTWF4NlpJcX06XXZGeFVGJHc3QH1NVlNGY0ghMGQ2c0AqYzZ5KTFbcDEuQT5LcHgiKEkyRT19OV8qfG5zNVFqTCl+MT5+KnVaSkAkXntBbilMKVlfZD4rclUzclN5e3Y1LyRXUClgfkg4ZWxPdUdiZT5rJTkmW1Ml''@;'; put 'put ''V1paZShZKiFVPng4c2BXeElnKUxyZmV4NFooXzZBVWtEM0J3cGtQT1VbLjFzTGtyK19YenA6alhyOE9fUzZNWWpuaVBJVCRYZFlESjQ0W0hZRDFxTHlJaX08XS9TN2NRUEU0OGo7YDEzOiEoImF6Uyp3JkpVQy41eGIoPGV+N3xtZlFbPVsvPmN5PT9mdVdaRUQ9Y3ZTKy5IV2B3XWMlITdWV3l5''@;'; put 'put ''Ry5OSiJHRjpjPjhRaSJJNkxuWyx2PmNtcXgqRU16bDRTQnBEakVIUjticVEwPjB1RmVFMzJGQCFLV3gzW0p2UGdzV3omJDZzN1ZTWCw6KFlVYT13TiNEIn0sQGEyWjs8UDVPel5fP2xHKCR4YkIvJUNdaU5wJkV3L35FX2wiUVN+UEdfKCt2NkE/OHZhQXhSP25MOnYrVU1oVWc0Z1MofnxRZXc1''@;'; put 'put ''ZCJVZ0JlYTd7Qnd7QXFxaUc4SGxeQyJwPEU2YU1tayVEdEk3WCl0SnQjQjpLfnheRmVrb2RWMiY6Rktaeyg3fDIzJXJzZmVaRCJlUiJVSn44OkZAVi9vTDxxNDJ0JCszSVM9aD02XiRFQDpVXUNsRHV2JjxDQlMwN3JQcjZeYHFKYDgsZkdUPyUpX1d4ZnsiST1XTF5qfjhvaUBicX16XkZzSDdu''@;'; put 'put ''P1pNeSY4dVMkJFU2dGNgSF8wcUxHemNMaHcxPDxTM3JeYnh4eGFZZ1JvelNtZn1nNzU7aXNFLnBreDgwTnRfR3ohaGcpTV8jQm5zbnJZZEhtLnVkajRwTmg0dkhGOVM3ZixKPkQyWj9fSkw6RDQ/M14/RV5QQ01rOXtCWCIobSNfOTIqXV5FJFdwNTdPUjNlQDMzISQjMCt+WlU/VyZPMUxrNz1V''@;'; put 'put ''Mis7V0ksTWNvRz1dSUZQcSRZQlNsXTU9aXxUQjMlTVc3IkZKaH46WjEsbyJrY2swTDFbaWx6OHZuMWZzMXF6SFhaNVZZMFtLNSZaaTI/PHt7U2k2cm0iT2RxRXVDOSFHLndKZXExMEFCPDUqSDlkI0IvPCNRIVg2V24hdik7PChfeDl4I19XW0s7dUliOzJYbE9DSDk1TWdzUzRjdiVQWSljdFZq''@;'; put 'put ''OTcveVYmdEosOm9uIkxtPCV1QjQ2UzBFUGRHLGs0UDJrMFo1NCsqMWJWazVWQ0V6LyU1PV96cTo0dUw8NDRHcTN0ZlNsW0lNZlRpLj5qLD5zVFphN0g3anJwVFB0fTpaOm9oeEBEO002Mk47ND8oXypJaSRQeWpUQnc+OT9YJW1SVDFgMG4iTEx3cmYpP2d3SE1NMzJsa01sMio3I35deWc5UV5K''@;'; put 'put ''YGB+cDEzcmVvcDZSRnpgV3sjXlhvfl5Nd2dZQ3YmXmlZeD5IKHh2U1tpb34lRSN8Pz9scWk6W2s9aCRTZipYejZWP209Vnp+MmNJSyl1JSV2TDU5Pjp1U0UjLkFdOEEwITwrcS43RXYzJFA2OEA5RFg1cHpvXiN1fkk+eGEvcjZLTzdRImJ9cnAzL3VfcFVkMFNXO1h3V0FXWF5JUnVXbjBbNnk2''@;'; put 'put ''MXBkTHddfkJyfXc6X0lPQCJPLENQVUtdIyFwVWF0Qkk5RHE9ZTh2NEZCemcxQHVROWAvV2pFMitVQHdJNVdRRXREbjY/Tj1oaHluT0JMKltqOjElSlFCbGx3NkhoYSUkU2ZARC4mMUg2RnxBZDE7PSQ1TlBQNUUwZm5OYl9+SWo1dV4rVFo0bkdfVzxJZFB3U1o2NGsidkVsRXt5NmdvIWs9WXJO''@;'; put 'put ''dDBMJHRyRWt+P0J3Uz9sUE5USmRxTnZiaUI5Xkd5eCNGXnd9fm58LGFURGt8KCQzdHordzIyeyV+Qkh2RnpvMD9dTXkmREBTY2tTSXdLX3tlaSM4VGVieVYxeCZaUFQqNXAqQmpwR1AhfDckRHp7XWs2RFNpXUBkPXI4YDU+cER5blhZPlhYOVJpSj9gVCRNbFd+MXdIbUErJDh8RmEqaXROQns+''@;'; put 'put ''YTFkRkVhWGs6MEMmX1d3dSRNOEJII2RgVFcwQk1XUWZ2Tz9QdV9lSGU5O3F2XlAjfH0zOmI7WDhJOk5zRHJweHQ2ZU47b3N0eFpfaE4oLDBNezg+amN2ZkNjNUBmeyRRQTBGaWdVZTNaZGBOVT1eQXtDVjVdMmB4N3p3Wj1bME0yXWcxVk1WbHhgN3xOOWF2cEZifmlTL0JCaDw5PVFoYD03fl5u''@;'; put 'put ''fiU2V3pMOXJDIl85PH1edmFbb01aUV5DX2ZXaVFffF0kKGZdQ2hWXyhLOEd4Z2JYfHwjOEtFJS9mfStUU2Q7KD9EQUVUOXlxJlQjI0YvMl83VSthfTNuLmgwPT0iIVEiRSpCKTJOcW1sJVFpQ0l1SERQVjJJbWpeeHk4fT1lKldncTE5Vy4+PypLI09AMC8wKUNeM0tuP2Byd2l+akhRUEBFSWl7''@;'; put 'put ''c3szJT5uNnx5QihKT1JhfmpQS2kzdmFfQVIkTGlVLFtde3peW2srSGB4S1dVTD8xcFs8SUt0N35CMVs1NzAmVnpURCl+dyh1N1AmT3toUFFMbzZ9SSVhJUBmbHgkbTN6UUMhTE94REJ0d2dEfjM7bC9PQC40Mj1rS2dWWTl2S3xCVF80O05kb3JmOnEpOis9Nnosez9jR01aKnpLdTEuLjJEI3N2''@;'; put 'put ''OXZTKlopcWprW3AmR3Z+QHMhRnZ+ZU1GSD9xN2Y8fFBZc1oqNEY6fn1kISZyX0Q5fmhSfDRoblVALFQ2Im8+JDNKcn5Gd1UvTyFpKTAwKzJzU2dYcGF5P2tWXSo1XXNNP0QoRHg1Z15eTSpncGA4d0wqRjd6UVUmWDR8fEAwYGt0OG8qSkVAYykvNTRXejFBUXAoK1liRUVjZU9jayZ2SjxxfE41''@;'; put 'put ''KyhtUCt2OCpVKmgmPl1IJVNsSkpXeVo4I3YvWl9GWWx4bjloJnIlfH11JjxyRnNCcyo9S1IucnhVVTR3VjBddFByYUBVI3kydGxHS0IyeHIqMGBvaS8xbG5AVENTe3toJXclWkZ7L0hJRGxhWjM3ejRJdyRILnN0YGBsPDkwRWJJYjJyJDNEZ0l0WGRBRkJ1ZG89IzV7RT9GST9wZ3A2KW9TQmo1''@;'; put 'put ''e1NjTiVuL2AyKHI0QjRbWWFGcCtHfmU6QTJdbDg+L0pgYmZHempGeDhpKSV5ZlVUaCU7c3wyeWUlcXA9KGRrMH0jSjF4djwzeDdHJWtKWSUlV3NwSTVOQlRxRE1BYDsyPzNzV2kjc1RrL24sdjtZPmcsemlDWjopVENFRDpkSD1OV2VLMHB3Xj11fXIxN3NXMSgxQnhYRWkuPHciYjY2S0N+TEUq''@;'; put 'put ''LGEyRHNjZTFMM0EkeS8ib1cuZSRbVmFFZ25hNCM7S2QiY3dtV3BKRWlVMksyRnBMJnhwU05BM1Y1ZWVCfj5GS15TIi4yZjUpVm5pWyt9KilOL2lvbUBpeE1+eE44OkJJZkBFfjk5dzJUMzltaF9FSVJLei8zPXR4dnlwUkAsZjR5SlAvJiFvS0F4dFtsfX1xdWJmRENIUUBDIW9pe2B6Sjx6XWY0''@;'; put 'put ''VF0qNWtgQkNAdFN+O3x9LHY2Ui4laHRVLzVQTkxVOWNWfS5pbi5rfjcqQl53PmVLOnZGXXdqa25GLD9LPjg6XU5VZW18MkFLPT5mM2NOLzIib2RsQWh8UVttdWc6WXZrazBkaC5Je1tJYkAwa0BRVnpndXVXfCJtXykvW3AmQzBGeT5RL1M+N0tjaF58TGgqMjlGI2RMX0Rtdz9aQlcuQFUqVX4x''@;'; put 'put ''Zl1XblV5Q1lqek1Ydlo6U1lbZkUsMHJTUXdsdmpDQHlVKHAjcnAxMEg/cHRKa1pvemhqRCgqN297M1hpOWVTSUcpbXUjMzRHfWh3flEzbDA9dTFnXktoQVcyKjAvRndUcE08QG00ZHxdZFYiPkk8cXpVPGs1fHZtVFZ7LiVge3hzV1s9fEhIIT8pPlBpPiVfbWA+ejN9THtiSTNnK1EhYG11aSsw''@;'; put 'put ''cyw3WENgeldeYSNBWUNGKHcsLCZgYkBUK2wuL20mVDpdZF4ie055dkUhZHMySFNvOiZ3JmclMy5qZnxKK1lbckIsVW0wQ3d0TXEoL09uUT5XSWs+R19jLDZkajQwQzg2bCY6Z2MmVUh1QEFlMGovQWJ5WEVhYFJKLmU8fFkheHZCdHtHXWE3YS8iM2pDL3p8SG0mKkl4PXElZ3NHTDo/V2t2Ulpy''@;'; put 'put ''Zi9WQ0U6MmgoLG9rZmVwQ3tfVF9mSj9OZyF2R0xnJSorUmE4QyVlR0c6QHlDRixrRDBoVl1qaGo5eElFflFScFZ6YStmTHFKMj9DUjUrV0ZUTkIsK2VwME12LHEvWVZtKFRbVHF5TnslMHheMHs0VyhgVTlUN20qZWlBNnIzVC57P04sc0NGdWkyZSx2XShGWi5YQkYrVnp2YTJrcGE4fGpgO1NE''@;'; put 'put ''Ti9tUX4kJmBsK3dzLlB+e19xMm4jMzpyOzA2Q0xPVVIwMihjN319Wl5jUEkmIyQwcyZ+OyR5MilXdXFJPEUsSXRNcE9qfT9rTjBXOVdsSitSbll1e1tlZylFYWx6MlhWUFNHVEA/Lm9MRCw3JEJkbj8sTioiZTVgRXcjQDZ4Xk9EPmlDdGJpVClJSjdAYDJmLl5uO3NZT19vNixBPD1vOlk3P2Rx''@;'; put 'put ''LjZ0Q1FzIipqZmM6ZWAvODk5SWR+MlVOQ2xyYi5MUCh1cS5rMVJBQnB0RjchNEJJWEFIVU9tJDorMWJxNEdiKHNCY1pNKHxvMjwmcTUhIj8sMGFsPVVHa0dIcD4landNX1lwKDtxRWlPc3AlIk1jSmMxej47RTFLfSUmfUhzJHdieUVCSSJbOjFFLj1OK2tWdy9HOj98aW1nJlphWlFFIjVMQT1O''@;'; put 'put ''PllEfXxZKFRTRTVrTXhJOUcrZW5hajElfXJIc0JCXUdCOyhOSTNGJGg+SShrJnw7OWNhS1QjfEFrN2xWMnVzVWskbEpLQlAxZH5KZHQsbGV1KTJ4KDh8SWFbSmdVMmMhOHJxc1sjSjFMV1Iqe0VNaEd5ekhedl92cjg+LkUuQXMiRS4mWiFlSk14cWB5UUUpViYxOWpRUm5fbiMlSyh1fUkwWDJs''@;'; put 'put ''RT5fYCp2VVdZe2FCcTAjO11uSCsrLjFrXV96QlksKjthcitAP29kWDZyTk1nflVudmsrYDNIZzszOV0jRGJrVU1ERTJDYnpveGA4dyJSKVZRcVB5bC5wT2R1NWlAaShBalMoJkdraz1yU2YhVX0lSTcmR11fImdnR30vflNBe3ZLeVNfQmg2LllyKnFANSM0MnlNZHxhRDB5emQqaHRyKzBnaDY8''@;'; put 'put ''KisuakVBfFgkQF9rRnRQc1s3OUlJIjFrbGkrO1AlKkZxRCJsbikuSihCRHtDbkMsXi9gI3Y2JiNXT1QlfjgpdVlhRiRyZ0RRUVF0d2ApP15XVThPSjRoUjkqIipBI2xXQn1DcFBqbkQ2ZF9VOEFmR2RQKys4R0klWllHRjtebyJHdk42WVhFTHVINlN2bHV1T2BWb14hc251Ryp1JjlQNWZrJHVi''@;'; put 'put ''Y2gqXTBZfmN4PH5WazNjZzpSKVs6NzElPmw6W243O29JLllZXnpwdnpMSEpqfHo5WyxPZS58QXtwY24mY3FxRFkwJWpveFZLfmZba0wvcTRAfTU5LCxCNEhKfmRGOFdMZGhkSVpfUmlSLmFLfk4+LDkrMSF6TkgzdSFrXnpEIjQwNlUpbkducktkdGVnazZTbS4lL0VjPyltMTxUMXEqc3tEQEBi''@;'; put 'put ''SkddQzFBIytpTSsmPXZXJjpzOHFLTDhiaDs3VlpYYWNFcWxPQHl4I3R6d1ZveHdgOWAwS1U2OkIxbi9nTXtvKn1xPiFEP0JVeVt5eUtQSGwhbzx6OTBzWlteVCJ+eXNHZFVHcH49NnIsQCU3ZkYvOSR5VXlxYTZWIXxDLFh8aGw9eW57b1RYITdgPj5Lc0VWdW96KypQMi9AIXchT1JoOl1LZXxu''@;'; put 'put ''REw3ajchYlN2LmJMLl56eFI7NmZ1TDMzbStKWyFTdUBQbyVBeXI+eHZvc0wvPWNuOiMmPUVZbzhzJGAsRihzTDIkRzQhIi9MPE1RTS5iZTIvWEo3TXxkY0BXdHh9ZlFBPH0jLlZ7KDxSWHc4UyIzfGFLcTFSdVJxaH0hKXNJTG5KTGhUbWZRL3k5ZGlAR1MucnJyIl5meTxwZmlIeXIpOyF9dSYs''@;'; put 'put ''OVB5L0t9L1BVe1BuJUMiLkooVzhwJSZrfTRYOltRPmV+X3pgLiJlVTJhKzVAcyxFRjBkWiwqPnhvdV8pLytrcHsmcDw4MEI3P3RxS0dNU1J4angubHExfXlQPnU5LyQ+OiF2KFNebi40eXouQj5GQVFEciRuJF5AKnJnWn5TOCUwS247eyZyaVpvLkFSNXlqVj98TEk2SClhX1tgbCQpc1NYaS9G''@;'; put 'put ''MjQpMFpSS0xLMUUod1Y9eCU0WlQ4ZilfLHxvSXdMVVdXNC9zQGJmKTBZLipGS3t9a3FTIjBpMHl9T2UmcmQpdUMyVk9DaF9obmkmdD5KXSYhOWZ3LDBdVz4raz15PkVYJWI0elNKUzYyX299fjJLPihpPWtLRmJDNzc0VFRII2I5eDdEOH1yeHlmLyVFIW0/fCw6dTErOH16QnAuTHdVTjFicWFt''@;'; put 'put ''XT48U1VpNFtUYilrc3UwNjg/KEpZMyo+d35vWjQ6Jlc5O0I2LndkOHZveW0uO1FWMSVlVGl0Qzp2cC80QSRZcVZGVHYleUgxJiJDTm8pIi4mLm1ZeVddRSVWWXJ6X2U3am46SEcpXWcxe2llb0l5WXxtZ0xHaGdvX2pudjZbfk5OVFVLXV84I3tmdjU/PC5ZITRsfiplbVN3bTVUX3tmRkI2K2Ex''@;'; put 'put ''Yk0uI1o4dHpgfGp3cnBXfDExPGQ/VlBLN1FKc0skUDVWVkNzNGZ9dk9ofGxkflZ5PU4zbUJ8fSl0WEhLcmB7YU5yMF0qKmpJXXpKSClrdWA2TDVIcTdyTFBtcHc3PEhuVkl5YWtaM2t+ayYiVGJ0cjwwTHVFWGB4eGtCdG9rLDIocVAjfUg/VmtUQiQueDtCeDMrKzFIb1MrK3xwPiZaSjlESElK''@;'; put 'put ''ckF0RTVLJHFLQTxeZWMuMi9EMiJ4Njs5fSxjTWpRbEYzczFteFVIPHlrOW1sQlVwP1Y0bCZ4JkI1QSYubXxNekg2V2o/LnwqOWlbKlEjNzdQWGlCMzJqLl1xcTZzOFt1YXQoN1tFZmEvJT4lOzJMPUFVQm4sfCo3fkg5NHlXTG5XOEM8UCJMJF1vM0lIX1kvZzFCV09ROEBGYVN+dTZmRWVsdyMw''@;'; put 'put ''Tjc7YGVQI2VLWH1sPHBPWGcsdW1pJih0QmwwciFUXndMRUNROzE8fEhpK0Ildm99X1F+ZTlDajdHXUFOUHZCZyVbO0I+V3NPVU0vSkd2emV9Q3sqcXZuYn44Q28/UXZxN0J4bz1bWWw7b0hmXmxzaCw0P356Y2FfNSYhUDF5KGhhKShXKkUwTjx+Xyl9MU1SZUosMSIra3hfZnV+ZywuRkNhSFdL''@;'; put 'put ''aCJ7Q1EsdDFMMGxeT19XRkZCeTtrdHloVWtjPVg9Lz5GRXJ1aC48O0UhOmolQXoofitUMGZ8fiV+UWNUWC8+aVQ8MnssPChXSC40aVchR3A+cVQjfUFiRCV7M1pdaUhfOytyTjM2PmBAdFZ2czB2OU9wL2NFaHlgWTlDTXB1L3xFaEVzYSx4cnhqcW1kV1BKTCNZIk9vPDtPSjxhe35xJHE1MkJf''@;'; put 'put ''W2k7dXBxMWQqTGBjbSFwMkduQ3Z3L20mTlI2TCgxSXF8b25+aWZKfHFuTSFGbzszIk8uIlI9RGZ1IltKIn03VT1gI2Y6aEApU0VzXU5xO28vcF42OGIlOkNFKl1FQnlqbiM+fCp6RFklPmYuZ1lBVFhqMit9MGNqKDFWfXo0N3VCXj4hZ09dTGl9TittLDwzMi96NSpCZiN9Mlc/XzNaYTklOy47''@;'; put 'put ''JmN4QGIhSndYNlopMjMzaXR6Kng8JEwjIk49ZS9DLix3MGlPNnRtRWtZQDloblMpQ1k8V3ghUTlKUEVwTDNPaXFHPVdLcWZUdFF4PSUpekhvYysuNUtOIXBzTlpLQXh5cnYxVUdKVVk0QXB1KDRDPlloNlpQdixTYHdFKHNNMjE8TSshVCZzQlFXZk1MZkk/QWwmV3wlbFsjOHU6R1ZYMntIMUVW''@;'; put 'put ''TVpPV0Jea3xRPj9bdCZdb2RZZ2VQI2VhTEMud0psTGIyTyRJVCNfby8hI3xhUS5oInRmMmBuTT9RMyhQeWAmaEFzJHFIY11WPmdjVVpJX0psN31PPylmdjUpTEp1d0k8Nyk/M1VLJTx0JlhIN2g0WkR+OFs2Um0xRDNBTHY+cFZGQUxSQ3JCZ08+VHZpM0olRDVMa0M1K1A2dyRFPU5CNDx1KGtP''@;'; put 'put ''a0NaTW80SyVGInk3Q1M4e2NsNjoqP01HPWFpbmpaMG5Rajs2UWh5MDs0VnAhO1kzTilWMyt2eCxMQ01UbH5yeWd6PWJgRnZoTSJ7c2h7JkwsOTkmO3MlTGomZiZwcEdnKyYlVUQuciMxe3pmMjtjJnxBUmxlNCtTNz12YzxDY2ZpSllDZjNWXUI5NVE8RVVQWiwqVWFvTEMoLyVUIXBPcSxKWmwy''@;'; put 'put ''L1pyLlouKSF9NiRNXkBGOEcxQGkxMnVTKEwoZ0FjKExyVnRTN1NzQmQzcSVwUWV6X0A9fD94YE1uMmAxSDM9LmN3VkAoLko4TCw5VVgwe2B6PmR6YXFjOXtqMXFHIT1IRDAuXkNfR2RiNX0vbVQsJShVLiV0Ty8vVzI6dUE0NzZOKjwsKzlBNmw8ODVrJXM8Siw7I1J6ZmkqMC5EO1tRJUE2dF9Y''@;'; put 'put ''QFlLMXZuZkVhKWR6alUjaixDYSlkeGZwUEdeNHV3SVkyNmU2JnFAekhTUmVJOHo5bCspJkBtIVElenZxLDRILj8rbVtMYkB3cEZNPEZFbD4wYWU2Y2csLEgmJX1NbUo+cjZZSWY7P1khWU1AbSFsQX02bVs0VGJfVkZTdyErOHZYXmZXWlEud2NKal1DdzhpIVJSa294Z01Hc2dOMShAaSFZTX0k''@;'; put 'put ''P2JZREszZFkkT2l0RyF4Ryg9KVROQ350U3psZjlxb1p8d0ZOWWlbaHxLK05aRSlAc1ZHTkF9eS58WyNxNyhTVWEiTlZNQ3x0QnUqNHhVV3I6cGAiLDFKNypVVFklbCFaPlJybG9VUSZiRiRMWDJfIiQ6bV15XltNbUp1Wns1aDQwMXBvXWNUdEd4bU0jeElIezBvKiRLell0ZSR1azddRjxqUm1Q''@;'; put 'put ''bWsqIX0xfVcpZCl8S1BLQHldTXBJVlgxZktjaFNXcjxlXjF+ZWRCKTA4R010MlJURD9NYjJiRURiMFNCdT1nNEAuI3dwfkxqTntCd3AzUkMkIihAZ2IuPE0hVkNeM0I5VylIcWs9WSEmPiQ7YWp0IjFoYCNyeHpnUiMoPGNjaVkqTm9aRXdZbWc0WGdPd21mNDNGTFg7K1pyOUAsaiJKaTFCKkhR''@;'; put 'put ''XlVWMWkuPFE8UXV9cDNCWWdsfSJrIkZSZVpfWE8hQkAickQvdkk9NjpMaWVgZzBOVVFMLFFqOUBWTnJgLnZLPHhYfFQ7QCZWVl1lP15qSmZzcn1SM0syMFNPcllIZitqfUYlZiVGJGBeaUlYN3VCaXN9VjNxWiE4fURmQ0FNJioiOyVLbD89aSQqQGBBeToicEl5IkFEVzNwOG5lSkdHMFRiUk80''@;'; put 'put ''KzEjK0d5MmlmSztSMT5EVS9kWWdWRVN9cEAsZWFNKDgmTG4oaUpkUiY3VkxuKT86ZnFWfm5VWXpwejF0PHZ8PmtzL15rKDBPTD4/ZiR5VnohQmVTPkk6c3lISkFZN18lPWsyQFBpUD5uMz0lOEAubiQsfERreVtCUDJbP01VKUE2PV9bMitIQHNmek9kTGBMQzNMTWFpVTU5RktSMX5xNUI3TH19''@;'; put 'put ''P00xNUphcU1uXVdEXltiNnhJbXVlTzNaVGl2cyl3W1laaExbP3M8QFtsZ0JlfFs+PXZENUQ+XnpgVDpDUi9+VyxXWC5TVSM5JmRVYXA5Pkg0aml4XiRncDNIKFk/fGVbdGZqXlgxZzssI1peOVZ4YiViI04lbSsycDluYD1GVGgsJSkyJWI7LHhpLFFGS2pack9qbUpEUHNdZ1dmSyVxLjFbPk0k''@;'; put 'put ''SV1xMkNNJSI/cUsjKipoblVyVDZ4TXBTVzcrMHN1fXRrPFMhVTZEUiMxMWJ+aldPZENLRTQoVnYyNnNFYlhrRDxNVzReNilTMV5GdnJueVZdUjpDVTNTRC9VcEpuY3hKNkdSVywzbXQmVlBlfVJ2anxyQCxqTms/bFVzSFNOelt7VnNncltbLixEOUQ6UF9Tc3gzO3gvSDoxS1gkfVZ9LGcrWy5g''@;'; put 'put ''TXBCTSVIOV05YDopKSVuSyg7eXAmJSRiMV4+Nz9yXzs8MkBMZjNJeUQlQiYjIytecVJpJD9ESnlAeEN1Liwwc040JEpzRS5Gd10mfGFsbVNNITR8dU9BWmRxODAmLnxAajJLS0lZTSwhfH1SYW4+dkhlTSNpSGRqP2BxMTpqPnUvNFdjcFpMKVtqdkxaRmRsaGU1QllHN3JwRnYwdnxtTHVMXzVy''@;'; put 'put ''UCkzeS9veDhEKXR7MlNDOk5TMntHKmNTL315W09dUSN2dnw8KSZLZD8rbD1PQ2VGWDB6ek1fRCUqckl7NT9OIURaYHVXMEVVRU9jMUJAWElrZEUscnVLbU93KFZSZys9Q1Z0NTtpRn18LDtmQ2ZQeiIoQWtDS0NVfD1ORFZqS0xDPDFOKzhCfUxySl8/YWVNfHB3Y04vMEpHbXcpV2RAfjRdaHlq''@;'; put 'put ''SjFHY2EzcWpOfiVqRkp1NE1OU3JRI0ByUDNiMTUsPUUqKn59KW98WGNYc3M/ZEIqRXBuVTVRQnJDZGF3aEszNjJeMGQmXiJrRiFpKldvekRGbEVeflhKIkBMVDBYM0ZXcylZaW0raihRNk4hV19dNU4hXSQyenkpT0BvIWcxQVVlLF0/S2k4Y3A0fkQzS0t3WDE8Ykl7XSVHJmEsLkpAV2pLNik3''@;'; put 'put ''aj0kWCR5PiojajhmUWJlcCY2XjxEOG9dL00/YTAwJTBaIkJoXiVVcSNddVJ5R1d+KE96S0IyWGcoZnE4a0NAPGJ8a2hiLlQhPXFBbk5GJnMqdktTOEJHNmgpalZRZ1h2cFU6NHd7UDp5YSo1RlsoXUQsSURHcmhfKDNJQCVBVyFwYVY+NXErYmI3M3R6NDlqUV4yNT0vaEJbfTF1e0tiYHJHLDp5''@;'; put 'put ''ZnJfNlQ2PztLakdeOFd3QVRAOjAqV1ZoKC5YUSJgVy8la0xgLmNnM3ovV3ptI0RNdWRyREgqRn1bWnAlVmYxMDpbayxiQF9zVUIxK01mXVBBL21ZfUAkLiJYRVA9UkpCV3hiOlcydls2Y05NYUFWKld5WFJlK3t8OTFBKk5HQnNmeCR7LyVYUik5fE4pelY5ME0qR3I6VUBhMiJ5OExDIyp0W1Y0''@;'; put 'put ''KyxaMHV3RXg9MzNPb2dTfU5qTWJ9L05CeyNOM0EpO01DcTtCNilfPkZJSTlfRU1WQ0J1VGo+ZUFBY0IjbEl1UjBlcV1bZ0pLXz14W3hmTHhUV2swdVt4dkx4VE9ZQHk9OXV4fEJ6TT1iTzpWKi9QNXtrRU4yTSN8fFlVLylgYVF4Rjo5JHMrLyp2e2MxI3NZRGc3bippPUUzXT9wWls6Ml5CaWx5''@;'; put 'put ''WUpfQ0xpdkM9cE8+QSZyPH1mIVgjW2dTSWIhYyJKOygyKzFpSm07UWozJVZ2VCIybDtXeGkiQCg3NUR5Nm9FU254bjViP3wyLkhxPW87fE5Yej98JVI8U3FKdCQ6Izd3XzJvUFNKTHhYJVR6KSthQzNCLG5MaHUrMytjd29naUk7TXJzY3t6Q2JGakpRYFcyVVchMHVHUVBIMnVPV2hrd0RiXmJd''@;'; put 'put ''R0gyPk99YllralZNZncuL3glKipSIUhJTSF8O0Q8R1svVGpOJD9ZJjcmU2t7MyNSZUhNekxgZ1ImVzhIQmA4ZU8qOC9EeTlAIWs4YFRkTkFvVloqbEU7bHZyTWIyPnIwMVMvblN7a3FAKTMwMU98UFpocTN4SkJkZnE7ezxjW2UmV2dDN1A1PkRGWU5GbltZSGIxaFB9dFFFUXgyaXxUdGYhO3xx''@;'; put 'put ''VDpkenNLXjEld19DNExxdSpJR3I9S0poKD09JCQ8VTFVQEZ2YywmayZ9ZiE3a1UmUSY0e3FHfC8zfDloeFN6TnI6JUliIXIjI0k0Nyp4KlJGZ2g1eVl0XjZ7fEg+RnJoQTBMXlV9el49eU1AWFcja1N6RzZPS31lUCo9dDtyYVo0SyZfQTAuai8vWypZZCtCTE9GJVhHbVIjKmBKRnpxaEwwZT9I''@;'; put 'put ''MWU/QUA1SUUzaSo+WmN5dy5EVGImc1Bxd1t4aVhIVzszTF5NPHtYdk5QTlVCQ2J6IWVESDJwTjEkWWphcHZnWDJIOzNIUlkkdXZLWlB0UzolQ3U8MTswV0JfJndxTW97USlmeS5LdTxTdXRVZWZlTlo2LFcwekhSS3c4UFBPd2lkLihRJm0iR3s5eCxDSzslYzM3Y1BtSmhMQHV8aSN7NyNfJX08''@;'; put 'put ''JXs8STpZdVowL0oyPjxnYylaKVB6ez42Iiw5XkY5VV40LC4lJjBGai86IWMjaF8kSDYzMFN6IWJiaUJsaS5eQkl6P1VCXys0SzA8diV2K1Z4QkR9c3xUSSNGPDQqN1VjTFlyTio8YSh3QnRxOHwpR1E7Q3tAN0Isa1d+QUZpXUUyeGlPKlMvVmZsYnlAcH54NnlZXThGZ0ExM2JfQiUlWntFcm5R''@;'; put 'put ''ekReZ1BNUDU0bD11Tz8qTD9odjI+d0AoY0p3JTwueEI6Y21wI1tDSGVVXyg1RXxoR2MpZzRVdWhyfi5ESzlRa3VnclArT3cqNn5gPVtSKSlLZTNeYXZjNl10KUgpYWpwZ0plfUxkaHpBeDw4X3Z9RGFtfjNYQlcsdUwqaTppWT4pSTxmIVRJV05bdzwmcTZZMCRdK2ZnWX5yQjchLkQ7OikyTUFP''@;'; put 'put ''O357U3B1UEw+O0ImYkRIKlE2KiF+Z0pxdV5BSzpFKWxlUHo8ciIyOEIyXi5DPXt1NT1vcE05QTl0US49Q1paOV9WWWo3MUVeRFEuTmRMZzxDbGRYM0xIPDNRY05sVT11VlpyR3FRVU5Sd2tqL1A+NilwI2IiOUhsJG5zQTF9KVdkTkswKFp+PiFvZFghUmo7WkVNYnF5ZypXaUcyakQkaXgvTVdk''@;'; put 'put ''R1JfczFKZkE9fjRYI0V9V2MlbTloUz53cU05c2IlLjwsIT5eLGk7fjJLS3RvQ0crIVtPOWUiY35iPyYjMG9vQyFOb1Yxak5KUyRMcjs9WyYoan5bRC9MfFZ1UmBmcylVSmRFMiE8KCk6UGYuOU9ITSphaWpLZWZVZlRGbjBdOlBqWmFwbHFpaHhwUSNlcylId1hILE93RWBdPjA/ZzdCLyJCNEIj''@;'; put 'put ''WCk+dWsmRSV+Jm41e013JmAhRHI0K0MmVGJCJlB3Wl18akgvOSxTNzJ8ZWZZJkx4WEUrWSFFPTJgPEpfTzEiL31WTnlHeXBDUFdkNjFqTyxZLjd2PiZkNnIqL35ONX1XbVFdWiE4NmxgO1k/YT81bjwuek92Ki5bVzlvM2FWX2JCZWZKI08oXXYxe3JfYF8kLyNKJWR4XTp8OVI4ejdTL3JWRE9L''@;'; put 'put ''OEVeTlJ8OGEoUmxMMGhmYWRmYSNSRiNsJDFJViRzWUdnJkU1X3h0YXo8MUdCSUJ5WC4rUGRaITh2YU97dV9Cd2JecV1Rakh3cDltYDJ1ZUxwa15XTlJvQSs+KDE/UCQ8RjFzfHlhamshJCFrclBhcG13eXpSRFhPWH5rWFQscCEwZFBfZiZJaHwucDcsKm5LSnZGWVFDUVZGTHxAWDB1IjE8eFV2''@;'; put 'put ''MXU/K3diemBFMlhUKUMjYE83UHNybGFrajMqWyxtUTowcCQqTStbKnQzKy5fW0RiU0VxJkF3cWMpWkJAai94MC5lMj1dMHxTfWM/KTI+ZFQ8LHVpOHs+JDRbZm5TOCkmTDxCd1BbMT9jOEF3ci9uTSFMUH58OWtiY0V2ImhGR1ZGfTg5JWdHLyE7NHk7N3ElJTh5WnpOaWtsWXNTNk5hO0hCX0cj''@;'; put 'put ''NSRDZXNMQDZAVTd9Ty9jV0tBT0N3ZXwsY0Azbi48LCElLiV+YV5qNVV8PGdxeV4jWGIzJS96Syt7dWg6aT4rKkMmPlUhOlRRVkEpTkx0dWNxemZqfSEvWXVfcno+OVVYVGhQI2IxRnt3WGZEPE9AVSgyMCRDal4/JnRLP2kjSGVgZWBlK0FKajM4Y2goZXh8OlhyUGpjX0E4XUs/R0IyIkskJmNF''@;'; put 'put ''bjpJKiZuOXojdTteNyl5T2ZDVnlsUk9aKypFTSZ7JHg2ZUl9Mj5NQyUrUEtzKTFaVERZeCgjbkVCT0E/UlNEWVpWbEVpfFN3cGM1QmFHN3JoTj9YYHJnTHFMaXVwP3ZdWmVvRE4jUk8mWGE8PGprakRQIitvd0dkJiQ+Q2gia05GQipHYUQhLzdkOUxFfltbNFlmVmMyYXl1Q2JSKkpsRTBCaSIw''@;'; put 'put ''KWspMihPQkd1REhHb21gWmBuTihefCh8Tm1nclYoKDY8Jk8ob0sxZFJmano4Xk5jaTVfaDV4dllAO0tVNnpiIXZRVj1FdEJJT0g1LC5+PlA+fEdMTWFuTUh+Q0VQR2RxaERVXihGWTRLJl8+Q2VxRyJsQjBDeD9wTCN2dkh3MEd6YiEueWJ5VyFbNz5DQ3omRnRNYXl4N2s6Pn18eF02MXpfcWUl''@;'; put 'put ''NVFSRjddbW5nbEZzY1U0KU56RCs5dXgrMjMhcT5PT1JTbzcoTlR8YnVNL0pFcSFfOW86WXVAPTBAPVNkUFZWMUZLWDxuLGNgKSM8YnJ4UFhMe0JeYTMsKkBEOjcwXzlgNUJAV1BWalRdQjF5V3YyTGtAV21GOm5FU2Q0WDchbGxsT2x+ZVY0aWQ7OT52eVg8MkBvdWcuZUZnN24sci4sK1pgJjQ4''@;'; put 'put ''bUY6IVBlcEhKKTY0d3R4XSNPb0BbJksuJDNFWn13VChKOTIqM01BPjZgcFUreEZ5PEkvYEwiT10lRC95I0M9XmpFOD1qOys+SXUucVd9JEtGeXoiem5NLCRLRjB6MHZ1QHNVYE42dlNvczU9JkhUTDpQJERufUAuclYpV20sWGxATkVoPnFVT2FeeGxSe19RP1EwUFMuMXwhXVFfTlosb3gsUjcq''@;'; put 'put ''Wyw7X2IxUzgpQHA9V19qPCxCNEosQT5bc0wuWXlIXWA8Tm5YZnkxN2BYJVlCY0hMK1ZCNzpZbWJAZCwwWy9+cWRONipAb1lnLDBbLzUyOUNhV3BAaFE0Qm4rTV1zbGIsVlpmdFF8Ly9Fej5DZF9zbEgoNTVyKXE5dmYjRkk8ZHlEYXU0emFAdTtUezNYdSUsKzgwUWUqcFpWRSp1IWxqU29Mek49''@;'; put 'put ''TjNoanRMT0QwbXhEYl4sQS48eTR0djY+aCp0N0svMjg4SypbX1RIPU5kZkFKSVF9eXtrdz5XMiZJLE57dyQoVHhnVTxlMyUxTk8kS1hzdUtsU0xbdHBaaHJLUyk8d3BKdzZbT1o9P2g8WWckaCp4UzV7OXhncy47eFJ1bFopQnlUJCReUSVHNUw5UUAmW3VzUSN7WS5YY21JUig0Lj8vKCU6TDBB''@;'; put 'put ''JnFwRmgoVyskLlR7LFVSI0tHT3dpRTFCP1ZXQyEkbC5QQzwkYGhLdXg+TGd7ODljZXZMQ1V6fkQzRlFVbWFgLisxMF82eTVXZisuPmlLZEZjemw9TUUlR3YxNEtIQ2VIIlN8YHtiTElUayJKWylrb04/fnlbNGtoaj95PytPa0FVSTk7N0hTQG5vdyUlZ205Ol5qODYqZyxdW0ErWWprUHwqTzFN''@;'; put 'put ''VHxgWmE4eTV+MilBeSJUI1I8Tkk7cXJxcHIybG9BU29QfD8mQ3tFMjhASjdxJkZmTExxRDg1PTZ+Zn5vVU0wamhaIkRUVkxvS2lscVcwKUF5TVQiWSIoaG0hbiVbPjM1c1QhdnNuJj9LdF9fP1hiTEkiU3VnbXp+VF1oWypPL2hLL2lLcFJ2ODFbPH5QaXpeRjtpP0xPXkEmI1FxdWZEXzhpS1hR''@;'; put 'put ''aTt0UilqTFNJWyokRm07KGQ/UEV5KD9ES2A9ZW8sIWJUX0pFeFg6d08xTVRiL0ZDKng8YHZZaixVeU9kenJDQlsqQV5tKExufUUjRjskfVZPXnJYZDZpaVAhdWZXNH1Ddl4wWTsqKEZ+ZTJNfkhMRnV6Ly5WJHx5KiwvOklsQ3Q3Xyw8MiMrM3FCP2NrRWhtO2Y7aVg9KHZ8UEtvbFJzZEc1fiVu''@;'; put 'put ''LHg1d1h2JWAmIzY0dmtOIz1ydVp3QVlba31gY2ZmVSQwbmZHc3dlLk4xekl3ZS9gaUxQQHJuTVdoQjoqX1B9JmxZUyltNEU8Z3V3O2lfWHRMbUJ5TE90N2ZLQHYxbTsid2QxKWVncCtAUVVnNEQmemw5amwkYVA0S3JJTGhHQi5OUWh8dS8vdHl0JUM6eTJ7LkIzSXA4cFUqT3Y5VjpqRTxtbzIk''@;'; put 'put ''Qm9TfXRGRjc8MSk1dXZSVVMxISwoZF8yIllsQGNDRDZ0X04hZi9ZTj8kOXNBUTViK2N7SHpIaSVyUyNqKTN+cT0jaW91WzRWelJROjchfDlNelRuPS9XKFpERkMyeillempuMn4lOncoXldueSxdcFtAfmY1byZARiFkaltIMDYhPWU9KH1fcDYyb0pwVCxTQlQxSVlMbm0lMUwhcmYqalcsPEc+''@;'; put 'put ''JDslfVRiLF5JVzF0LGdwNFdkOVJ5bU1CdmRqIiR0JGs9amB6bzg7eS8uazdlZXZnOlFGYTJsLyUkNWswbU1SPWVCMFl2bTslKVdtKVUsVXwsR20wIzZKZi9EamlUMkIofUdaKHAle3w9KVIuR1J2VDt1Z148Q1plVkh5MiRYU2E7Q0ZGOC9yPGpXQ2ZaWixKNSt6ZEkzV3ZPXzEuaGxsTypGfDY7''@;'; put 'put ''ZSQhT2xSfGJBNkw2OzxKWGAxejJtYFBicWp0Ul8lKE9iPE00ISY/JCJwMkU9LzRTNCZDNCV0eHFpOVhZTWFsYzopfTZwT2l6JFY9M1I+KykwT0xyOVY0JE9iU3ddKFJ3Slp+JWZ0PytQekoqRm9TQFFePTs4ImM2KDE7LHJ+eyFmO0tjOFJEcGRmelcvTGd6YTFvflRAYDNXJlZKeWR6fT96Sk1T''@;'; put 'put ''Kj9PaVA8WiokJkQ/Tz0xYWV7bTgqUiphfWRbWno4bThwTHNqKktQW2hxKzhdXmo7IWlBY1QocVJlNSlFKUU1V2xfQk53WGx7I1ZJZTQ8OTc1O1E5IWglMXljOSVgPDNNNDUqKyFgOkY6YFdHVzByN3AxflQ6MmpeMHEzIytIbld6Q30yNkt9QTc2RHNuSWVBYzViZ28yZDYhW09UNHplNGc0NS9Z''@;'; put 'put ''UHcwdTNJfXhCKyswQFV3NXU7T2p6TzxfVTk/dF49RjtpOEllOVY7UUwkSzp0VSM3Ui8xNz89cG8jfSNdZTJCTTpiNTMuPG5DXnBefmFhNXx6OyZfOCUjUCxkITxNVnAkVztkWVNRXkMiYWtpQV04JX41W3xdaC5DQyMwW2w8KWVCY31kNGFCXTNVPFFvfilVMnA1fCRfcTluSH4vKCVWPl1aTntf''@;'; put 'put ''elM1dTMhOWQ2akA+ZzpYP09TNEZdPVZrS1J2bGc7QiMmPCUkUE4hUilUI0ImcXQ9RFt7NmJge2Zyc1Y4RlFuLilEdkxLRUZzYHslVV5HZSQiS2Q/aEZGPnBlImJeSWVmLCVMfDs3TkllcmIje2EpJnFFfmxZPEs1cCk4Jjs6QVJ2KFkjSyFZJUh+eHFFPlk5Vmw0MTdKRCVNTlU6KWxSSWVGdGdE''@;'; put 'put ''azdzfC9oZlg+L3hYKVtzbFcjRnt3SnAsW3EzQzc0LnApZ3B6cU1nRVh3InxXZ1QwW1tmaGo3Z29pJjYqKEdGLlQhNkRvRXV2Sj4zRkVtQm1rO3hYe2d0SFR3YHlnWDJeJUQkey83KW5+bVVBWTZCJl9bNE1maGl5emE7ITZEQSQ4SSwvfWQqUmUsMCwiITMvUF8jUk5FVDEqIzhjSmpybzYoQ0to''@;'; put 'put ''VzRROWwvQ0VOem8ibHlNQ01ZZFpSOyxGQl9HXmosYkN6V3p3LHckUWh8MlZJTkRxS09SWUVYU2heKF1feXA9dHJCWSNjNjc4OStuIl5kOTlxJCsqSFA9VzFtcCJfd0BoOFNXPG89LyVkUnkkPCV7R2YuKSZMaSJZTWp9cVc7V35yLFs8MmtQOy9eUUNzO1doXj4vZ0BzYFpLYDxTP01tYDwvPDIs''@;'; put 'put ''TGcybUQ1VmpBQjpZciQpUkk8aDgrTmNAfnx3cz9FL0BkLnNqbzMwe11LdF5lbyhaLzloXz9NIW5Uajp+XnVKbyVXOUIiQ10vcExbP1V6WEV0QiZuNjQjcnNrJkMiKzFxLF8/Vy4qM1MwcSxfOmFYR0csYiFlPiJJSG40PVpQciNtXi87aiNtXnZbYiEqazpmaX53b2FFfHVIPSlsPS8pWm9NcCVg''@;'; put 'put ''bkJhKSs8c1d+UThUdkpda3V2emBxdD0veWJAVz58JXo7SlNCQ2o4ZnJYYjZSY2dkKCp6ZnxIRzVeOC9KP3lCWEgwL1VsOTgySjw2SWlxaHtSdUZHNDV6cXA+T2oyfHJEJDcyIStIPCorIT9mM0JrIV5BVHhJaDteTDlTTkB2OD5wRm1SNnJwYnJDVkJXLGpWXUU2bHE4YFdOUEVDY2RoQD1yXkdo''@;'; put 'put ''TyF2MEU6RntSMm49YCldTzdRPksifTJYLHsqRWBPdVtWRiYsOW5qUFtmdFFQV2pQdlowNmsxQnp+K0xkNlsmRDdAY0tPXXFMRUd2OlhgPUZ8OXlxait3SFtweSteZWBbVCRLV3MkYyw4Uk5FT3NxeSNQQHpDWk57bU42RkFIKipHM3grY2w2ZllnR0pKejwxXU54aX5EJmomTUJtOz9EMyhAbGJD''@;'; put 'put ''YCEvciF7P1RmSFNuSyZjU2NMYE92RzxpL3BYP3IxaXNmdVsrcXx6ZllXSWZeJlRUT0FAUzJKNyY5S0w5ZixkcitmVjtTWGI4WzlTXkF2PmBMaXF5KDcrXmFQRikiUDxgWHNgQUVtX3F5RFBOaVkzSF5LcEZiV1VrJEtnPXJqTCJTSmFoUTlsUCFebzNwRio/KD9WR0VgQ31SPDVpJVE4PT8uSC5K''@;'; put 'put ''W2hDWjQ8cjAzVjlETXoqNmFLcX1FUVA4WGVydyt4NDpQYiQhWjlmXlNDXkRiPHBBWjxxK35lMCtWXWlDWCw4cS41IXkmRiN0Pl9hVkpYMm8vVkJad0UyS3xOTkNeSz4mMSJPYSFjb01sbHplVFluMSNpd2lyb1lqX0UpSWQ/M2VLWWteOWlOfkQsNH5Rdm9abFImLiZ0PXBARShKUSFufmNrR2VD''@;'; put 'put ''c2hbXnZaPTMsZ2IkUlpzWypoWH5WRiwkZGhvPUZQejxufFFMQzF5Uj5fZ20/KWJPJjJbXzN7RWBdNV8/KkMrfFZVQDI2djMySiZDZ3JURj58IktbanIkW1EsTDcrcnludHNiZ2pzSD1oKnNKRVpISHc4VD5qSiFtK1RUOEBWaWh1KkErMFNXVU5GOzwsX01aLHdobVJSN0xmUkh2e1ptVW08L3w5''@;'; put 'put ''e3Q4O18hajMwPEp1ekliKDU9SXU6fmk7amQwMEdke2QxdjRzYmNgaVtQNzYqd0tNamtHdyUzfXR0SnkzPVtfcXM3V0N4WXtdLCFxMDNLIlpWa2R6Imo7aSEmInFMQHleMUZFOXZIYlhqfnN1e2FzSUhGMTF8TilbZyxkIV0zdVYyWn0oaXNuMUBBaXdqRjsxOjsqTHojcXo6aVQjP2xpcFh6N149''@;'; put 'put ''aEtIX1hlRCJfQFJMem1lKSZUYSk6flllOC5xSlt7YWJWNFZgQzxoRlV+I0A1aVg9Zk1OVkQ/Z3NWNDBfYHorX11GIzU1X2BZUGQ+cSxQcTEuOTBKWXJWVj1qVkFHIkd1QEJiITh5bHRsIWwqRHtrZEgsJiYlTipJMmhFPzBEK2FrRXhDXzd9ZH0qUXV2OiV4cGY6eWF7TE8jO1VXd1s8Uj5INFI+''@;'; put 'put ''SSY3LzR0ZVdGLiImSCZ9XWQkcnM4KiI4XTdncFlYIjs1dkpOQyN+e2dbLE0rdmV3cGlMNWwhTyxbMEBbLlNhZ3QlS2h7YD1yVSguISJyVShhIl1bI3x3UFdbam9PKn5AWm8vfUx4ODEuTkUyeClAMFJPLmY0XmR6KjdWMnImSS9sW30lPDUjd0h7aWAhclE4UHRsQG1mSHxUUCpXTGJ2TTRNTGJY''@;'; put 'put ''Xzldc11LV0FXQGpOSFByO1JRdXVxTEshOTtAJU5wLD11L2UsMj1dJCJVI0Nob0NTYGx6WkZ7KGNhM1VOdXlUITt5SkhteT91L1kyZVVWelpNVj5eL3ErXVRZeDJ4JHskNFpGWWB8aHA+VGpeT2VTVlgsdVFnJlMpVVpNVlhNQU1lMT97MkU0QUhKYTMyKUtwOykxPVZkaEZpZjB1QDxrYSFlTm1S''@;'; put 'put ''Kl59Y0BMI1I7PUBjK0g1KHx5JlhxMSJye01iU0IkI1d+PlVCbWwsV0x9NU14Tk5bYlN6SzVrX2l1SFsqJCo1S0k3NlhNN1Bze21RPlhuajNCREgiO1dZIV9GeHdqQVZGZXhKWWh1XUxoXlY4V18zK1F8XjJEUDpkVHg7VyV5Oyxzd1pWPTlkZXMzXmFjND8sU3o+JWgiZD9RfmsmLG44WGt9WW5h''@;'; put 'put ''Nj09YVphRXxYITZxcEciLkwrVVNNMWl4MXNgRD9iRDdCTjgmRyJWcz9JQUdqVToxRyMyPTtSQU0rMH41cUhEaXUmaWQjSiJGMS9uPDo4IStRMHN3Z0Y9VHYvKH5WbVMvRUVYPTd7N3VKN3N8eTchbzBgYiF9WE8vXyFSb01FfEsjT0ZXNTkoMHFkS29ZWFYrYUF4aGMmIl1xZU58a3FnY1MlRWVE''@;'; put 'put ''TSFTI3lYNSluVi56SFBWXWYhdDZvQjwwV0dBYE91LHVVcjRhfDA9MFslQFpbbTB1TDBxa04hKCkrc187NUUsMDpWbiY2Y2EmVEgrSnNRWWMoZjU7Yz9vcX5aIXp8eHh7ImVKJEJdQTBYY0hsLFc8WzF3RjZXMmhiNmk5THB3Kyh1Y3A3JFV4Z1FgUi4jOGtpbjkmemBIWVY+cDBMTUVwJSM1aHRr''@;'; put 'put ''VVN0aUtSLyRrT3VYOndhMU8iJCE4W0VtcSJXRjAxQzNTczQ1MnFFb3hAI3Q7fW03aCkzSzhlYSl7TlhKKUAsYmx6MnFFQXg2M29vZWFzZV4vYnJBI3N4cUUwKiFNPSk0UT1de21iODUpU2llclpWdnhgTmghV1RgSU49blk6Zj1dSnwzWEs7Vz1AJWtNc3pzZTw6TX5iUFlUdVpLcmY1TGJ8XT50''@;'; put 'put ''aSQ7WG1zdk1iLDFMWSlebT0zPXRhaX4kdn1lfSg7TihZeSssLCNufS5Ibj1iRm9BM3s8JDNLW3QuWFolIys1R04hLGZeTDVFPGJvIT5TMiU1KSsuYj92U0VJOVdrSGNQWVQkeDQjOTt8ay9IbU5YMnpqW1s4IVM4b3EzRDo1SEd5Wj5aNTdVSE1pa3JYXTUmanlxbEVsKFBNK1FnXkxRUGlbUWch''@;'; put 'put ''IjEsVzJObGs4MTFNcldJRHgpNU82ZGdxRUs7YkZ8KE1XWGd2JHFeXmxQK3pnd1Y5cj08VHduRy9NXzYwUH1MPi9YVXNDWy5NdyxfN2cyRCwsW0RWU1pKUEhzKiJ9d1B5RH17eHdLTTZYO0lXd3tQeU5vdVhqYjJaRksqSVVrYTJLN3lFVWU8JlslJmNKUW4jaCp7cThIZnhTSVQzbF1qWn06NVNg''@;'; put 'put ''TlI6NVJJZ2FdaihLd1BXLHtFTEJ2aSZXXStVWXtNfTFGeikrZGFpaksoKkchQllAMz8mWXE6NnFNU1Jdfj9YZkRJS01qZmBxSCFSN2t9NStFaVJ6ei9oPiM4YSpWaSg4Nmw/XTozQWNiaT5rMlRvZkhPKFByZHhJXkVnNFt1Sy50Y2MoYmpqZT1bTi5bRXk4TDdTT155UG57UnFHRUpGJTJbbjcw''@;'; put 'put ''VTQhUlA6a0xifX1eL1IvMVAyWiVXSmEjQnZ4QHZrbW8lYDRqZn1pVG1ZJmJ8PiM5e1YwRGV4ZkJTX35CSSMyd0pUOSpMTENoME1EbWB8T3h2cU1JQypaPWNdYUd2Wi9+cWc7elJEIXR5Wm5QM0tLTDk0SDlzc2YjdmQoUFVSSjY9N2ZPTUY3ZVBfYChLbyVXbG1LO2wua2RDMDFxKjtMPDA2XUsi''@;'; put 'put ''akRtSl9tQVlnQ1QyInlVelhHPFMhcTA2Zkw8U194JEUsTSNIV2w0UGc0MitXUlJRPUtsd2BLOnVqPFpUSyRoV29qSkZHbkpCVGxIbkRhIl1kPVE6WmZXbTdzdCpebkc5dCJwTDhMaH45TGUqX1tAJCQpOT82YSpEJHAyLnxWbFB2O2NlJSRHfVhsMEpFa0chIXY1KXorZG04dS5MYUR7Uk51VmZd''@;'; put 'put ''P0gzJmROLHY3KlAkR1lwMDtZRFZ2VnRXVkpKLk1RWzdIWWI7NTIqPDE4eGAvJlVvQ2xHNEJETS5yQEU6aSQhZDh0LyMpeCs6P2hANk0vRl81QHQibnxLI1doPTtDfSl+MH4qUk1TIkxdOnZSMHBHcEBJUjxDT1ooencuO1A7M2d0WUBlbn0hW1AxTChOVV83TGdpTmE3UDtDeldBT0hUMkNXfjZM''@;'; put 'put ''IVhPVC9aO0ZvWGBZM05fdmBXKjQjISooU2o+ZVpRRGZvUVF1PFF5MDV1THw+Pk5WNVgiKUchRG85XmRzdElTMlo1OSN7PGB1aUVnN10qRWxaOVIpNmJMcXNbIiM6MmlmOi5qZktoUTo9L0xmcWlhVkBjYkZgKStfc2JydmpSMmQ8WDo6fldzK3Mpeit5Zz0wTEBHI0spLEJFTnsrclkqK1t+TCxg''@;'; put 'put ''TjAjdklWRU8mOnNBMEA9VXspOSg9Tlk8W0deYSI8aEluV2ViS2lZb0NFLmA8TFBmJWAmTTJRSXRJY0shVUl2XzRROCpRcUkkemd4SmlQU1klPHg5VnhiZmxmZWclMlBUPUF9fHxpa20zL1oiOylSOmQ/JWNASU1oL35WdXdARUt3OmgyZy93OVBkNmMhSWZlZTArUGJ6V0RaODM3amxFdClHVXl3''@;'; put 'put ''JXgwY2lZWmFlbzUuZThQUDNUYiw/IU0mIndaa1pnJmdTK0d6Q0pARFo9UG80WnIlfC9zeSYwTU5CKUtYeHV+Qkc7Y2FKVnM6TUYlX1hrZmZ8RkBzN3o0KWpyZl0iNDgvdUBvJURVdGpPeGNXTFpVNl9jZz45ZTBRPTM9OSRLTn42ZWlgNE9JSWhvRFc6WkBkfHhDP0tvM0U5WCY4TVBPKF4oImFq''@;'; put 'put ''OWJfUDBBeyExIkdIY3FPJCV+NTlWLnxMWnpNOWksU15OfTJwe3ExOWUhQDJPWkFgKnc1V0hJPTRhd0JDNSsreSRTPWZAMHFnSXo8YmxxZXY6dT5XKUNwX3t4Qn0uKSU9biZgeChFXm5jbyxtfEBbVV0+SzNSfiE1VmR2dCN7VFglPjVmWVkqVm4xPnR6QWVOIkZXRzNaQSojVUFkQlI5QCNPODFg''@;'; put 'put ''bV5mJWNoM002WFpZcHY1eDBxTWBPe08+LHJya3EmNHg2LmFzKSM5S241W15ZZSU8fjIiYTlhQjdqfTFeez1xWiQrT2s9azg8QyZBaGs/dG0jIVJwLjlEcXRXNDVJVUs/YTxTcF8/WGBtdXZ1XipzSl9wKyUiT2A7bnsxfTVzRSVYfUcreVg7c1ReUzJ3UCZTZGNxNEQsck9edHtOUWhnQ30vQldW''@;'; put 'put ''QUUxemo/ZVdWNDxlQGldVlBWYnBqdHJeTj1XRUg9NTR3Y15ZXkpJYkZIWVBvaDVyZSg0c3p6Mnt1Z3hTZjh8X3l2XyQxUDopPyE4N21XI1QzNl5ySk5vPklKMFo3dy5ROD9xL0BobzQqQDBmbylVNj1waWssIjNjaCpuQUdeOmVZKnt6VSpxIjxxJUkyVSNDI0dzSTJAUmdpUFNUZ19rKFVvRy58''@;'; put 'put ''L1FXKkovbDVyfX46eDgjWyN8OGJ5dks8cEE+fW0sdGl2ISZqWCxUOWM/TmZnby9+TyJJY2k0WzZmbWU2TEBFcHllNHs4eF8qbm9SZ050R2BgUH15NUwwXzVdRHlSfTtzcEp7RHRXIko/US8mY1Ajal0qREBYP15AP1NwZkNgPkh2biJrSU8xLDAsI3ghamokKildIT85cXlBPWtvdlgsR3p2aC5M''@;'; put 'put ''Yil4YzVLVUElM1R0Uy8pfX1ee3B7W154eUVhPn1KMFlrV3IqLl4oV30wL2dqR0pMMCpxKl4jdGJnNmMxbmgmRlpQO0soUEIqfDpRdkhZUTJeOWlUfixnPUhXdnJPKSp3enVTWWk0Y2JQQEl5LERPRlBSPm89TTUpK0s0cH1qU1QxOmdKSW0/blBPZDJoISZ9UFQxbUVLR0l6diVpUmkqUm9EN2F1''@;'; put 'put ''KjNhSSN2aTt3fmFtKkpDK1V4elBmaCl9NGVVeGIrSF5SQnhZajs5RDA1az08U09FKntCaXQ+R0Y1Kjc3VEg2dTdKLHsqM0RIflRPJGEqXXlwPi8vaHZ2fF80UyxeM09DfHk7Lk5ZKWE4L3kpNihGVURoLypvUUI3LmZBRUNgbFhGQy5MQFZDfWw5OT9Obz05SiFuIVp8R1VRMnBvbl5gOHFJMnxZ''@;'; put 'put ''UUFPUmlZKnE4QSxUPWlyeylaYWdmK29gQ0YwfEdiVFFjcVlFSUFILkhBSFF2PjNLQ3deemldR24yQiJGcixjQDx9NWA6V0xyXVZmRV4waTB3TkJZa21rNlReLj9WfkkyIi8xMiM2bWIkTz0wbWIkTz0wbWIkTz0wbWIkVE9IW2VhakxDRmpXKzVyeztpImNeYUF2JGtNe0lZZz5taX5WZ3J9dEIs''@;'; put 'put ''ZUxkPykjaD1jUDU5VnhSWHVqOGljUEFPQmJKXTpbUkJfOmxuJmZyZ0V+PjdXOUYuRSVDX1Ihaih5WGtJbVlNcCU8InJ2fkkyIncxckFlXX1uOj5uSHU0TzprKiF9W3Q0QHQ2OWZyPWYjXloqViFzbFVucmxwSX5PPlJTPDwvdE9CVC4lWXI0O1M2aVhwWVU7cDhCXSRFWixKMntadjZkUiNIbDJQ''@;'; put 'put ''PERUWWI1QT1JeSlwJjNmdjhCakxrQW1AJU5TLCp9VCpPcnpCQHkrP091LmBrUmFpQ35wQmxZZWNTVjsiflkwNl1bU2NhclhJW3ZtLHZPLlovLHx5NEB6SGJBSnRnQSV9blZfVTg5cDVYIyomYVY/ez88W0MoLlFJQ0hsTDFyaFQqfkwjKiRJTz8ieFIpM2heYkZMfTZIfVkhYTNlbCNZOVAmNT1G''@;'; put 'put ''and+cD9Da3p0dV5IRFBJQj9GQyQxbSw1NClATkd3clRpL2R1W3l+VyR2SV52cGFFdnpZUiFLQkcySXVNbFJKd2hsY1J7QE97a1ZxdS9GfSY4WVhpY0Z9OzldZnJuTCJhP2dsZEcwOiVfYy5Pb1AlMCpVYjxaUXlnXmwlaUAoZUlYVU54UGA1OXRRU3crcnFZUDxHUW12ejJhRCs5KCxocEJwaSpH''@;'; put 'put ''RyVdVioxOF9xanU3XjdQRmN2OD1VWSRUdTM3UVo4dSZAKi5CY3EmNW1CNmVrS3ApYkM0b0dhflJjeT16KS95b3AlYSlCSF9SfCF4alouXjMxQixKXyM5KVJyQyI9Q0I1ZXJyO2lvS1pVaSooenRETEw5Qy5iaGZUTlFuRFckajF3VDpTaDJtUU0qODsjNkZXNW1yQnlbP19rK0ddbyFBZGZSWj0o''@;'; put 'put ''WjxXfX5ZSWxGO047MTcwTW5LWTlrbHQlbExGTDBVeXxIbnRtUTcldS5oNjorKlhlKDxMSUErcUlbQ2ZnVEMrYHxrfXAwPmEmLyUrXXtBL29QeHtSWmB4eCUhal5dYGZxTmhdZ1YlJEMzWyZAY0lxXz5MRl1kKGtqSUtaVWlgd3JFcGYhd1lBY15MLytGcW9UYkxQUiwsYmY7Ylk8al52dWRdciVS''@;'; put 'put ''LklGN2Fwdip3diE9LEpHdm5kd34vRHMlYT5MNXR0QDxUQCt6Y09zLntpUS9FRVt1cEBbVGttSW1qTmhuW0Z1VlUpSDUjSFpMQEd1JS99LDlneiksOm9IYlk7WiskRXBjUFZKZnhoVHFZXSxoVTJ6UlNnNWIzUlF4SG5NRy5Tam8pdDVfNTBJU1I/LD07Rj9Mbll2aFF0RGshXTcqZ2Qzal51ZHRz''@;'; put 'put ''ZDFrdWN5MzFtYHJxYXhPM3R4YEt2Til3Ky89aG1dM0k8cFJhXyVvI2MqI3wiVVV4bjBFRjY3KVthKVNdR2V0PClUMncuKGRjLkUmY2k2a2w/cCYlP1tSZGpnUU5NSU56cW5OT1JIajZQMylbK0AwfEF+aHgzUlNvOylOVClxTmhCajRuVE4mJWA6am9bcHFLQzVuci5kUEhPZGNQJTE2K20zIXJq''@;'; put 'put ''T3lAa1pdX0BtTEpVZSskL04mVTQjYG09aFtJT2RzeEFXbkMqK318bE59IU1JIWN3WTVTZXBwcDR0JmA/c29Ub1V0biN7NFFOMS5iVzNSeTxpYHR6e2xTWD1iSlpKfkYuelE7aHxKXzlqQzo2elNoeSRtalRRbXJ5dnkkfGZASndVWWlqZ2BvNCNAJHt7QlovOlAzaXosc0lJdWRya2QkMS5kVSN3''@;'; put 'put ''Ymd7b25taFVbaXVvbTZhVGM2K2M9P242XTdaeUFXcVssLDV4YnR5Rk9kaEdOb3tRMyhPcm1SVEImXj83aThPPmQwNm41Sy5vbm04Tn1hTi9HTlU5aUJ4bm9QQU88azRlIWZoXjsmUFl5cmdyfTE3b3g/YHhIP0k6V303KjY+cilrUTlJdzYxNylNOy9gd1pEIiZmWmAqN0p5OGJQQnFkR2NhcTYw''@;'; put 'put ''T3daNVVfdThXIU9yZkdlLm9SLjdpWEJINyEvb0xPKW42N3dVZURzcXdMQU9kI3ZjREJNfHshJndyI3k5VjNUIlY6TjcuL2tMcyU8L0dTZk0hLzhOM2VPdVdfMmNqWD5YU2pEJEFqLFM/RSFnMDc1Qi5tU1IyXlsxeHBgXzJ8cGhKLjBgWz15YHAkNVRlMk0iVlN4UFNQVWheRShZPl55ZDM+dD1g''@;'; put 'put ''YTRjKkZxdl4kMGpZPXtdUWZGbEJuYiw9OjZCcD84YSprdDxIU1IzJFFJbUZNYUwkUGIpSmE9Y0Iid1k8KEMjSDgmOHdZcjYoNlo6YC8kYjQrMzk/JlgsajVQfH1qbGM2OkVuT21yeSUiRmZ1dXREPDNSQiE0aTx7SHBzaVVGfGApbUJkbWtvJmtyUn03YmZrVFErM0pfSTpUWyRTNSpGaC5tTXhl''@;'; put 'put ''SWxSN3ZGIk9uIjExN1g5Si5gViI/QjN6UkdPJjh2SlJubGtYPnlYKXkkaCxiXTBUanZXWEwkJFo0W09RIjE3NksoTDlERE9QWmJIM1J6K3BsUkY6NFl0WkckbEJONF5DNV05fXxrUUpsb0xocFduRF0wTkcuQm14KC9ZZXF6RiRiWiF2fXxPRy9iVSFuS11ybE59Jl8vS292I0R4IV5UNDJmfHE3''@;'; put 'put ''K1RPRXFERlojMjFQemJsc3BJV3wxJkM0YmRtUjlJVWQ/RzhDRDxKLnhXej9VdE9YNnosVUZKLkdOTVZ4eVZFU3pCbFJid0pKR2hKOlVwOzx1UDRPelR0RCUxL1Q1Kl93e2gueTx8PDpPL2hBSiMlM2xqP3MlT1osSCRlYTAlZT0qVXl8Q2oxMj82JWBURzZZeH1nXmU6fDovLl8lKjorVH5ea3U5''@;'; put 'put ''P11ESCt5NUZvS2A6PkgqVX1CTFtbQTNYeiI5Pis9U0xQU3ZbSj1wPkM4WkEkTmFEXW5OdFh0eT1FZ2ZAd3QvamdQL3wmcllbOk1NcCVVJHQhQTQwbVc9dUZtZnElWzUwPUZ4JkJ0SjRGWGpCfGhRbEF0dEE0YnA5VkJYZmhxZyNIVUt0LnZCZjBKPCkwTlhwMVhCeGlSZChBRUF0RWFTJilHfHdw''@;'; put 'put ''e3VRUC8rRVM+aypeU2p4Tm1nKlp7MTdhI2VqKVJWSHUwKCpBcy80Z1MlIVBCeXUuXzMrLEJvYkU3eENEWVhCKzF0MDc2R3FecVJUaltrQktUYjtbPC9GOChQTnZxWHZeRHtLcTtzOWE+N0AlIXwoZSJ8MnEjOSluOmVNdX0rPSghdWM2fSJod0dxKnoiPDRvT3lHMU80bjQ+cUludjRZY0o6bWkw''@;'; put 'put ''e0xxOFU8SzMkfjVbXldUbUUoMG5jTWo0c2RjNzspKkteXVBEejhdczN9a0E8ZTJySSJoPEtlIXpkLitwSGRsZjw3NnhKPSklJlJsImxdSD58bHhVVTsvR1dgUj4mXmBWJT58Xj9DKzxoSCp0R2swIW91RngyczNXY0lUOXZyNmJtfG43VS4xV15TdSMyX3Jrc2F9bXtSM3pSPVU3Z2gmZ2s9XXVk''@;'; put 'put ''N2dibVM6MUwuPEd2ZmcoSHdAQlhfTW1PVyY6aT1GX2JWd2RuNSYqL05UYzExSXUvPHs8XWd2aT4vP0xpKnohe2F7PjM8eSk7ZyF8YXZKZS56SiVHN3E3XT0uN1B8JXM5fjUzZzNOdERre3VaZD9WSWhja2F1cVJZR3ljeGpPdzcsSEZufW1Kd0JARiN0Jit1N0g8QkQ9MVR+XThTU1A4O2s3fXl7''@;'; put 'put ''cEh7S05LXjd9YEBIWX5ydTdVaSJVamlLdntuUDRdZVhYODgifVFmPkVjeDwxajJtfCtjTFl5MkFXa2o4MTdTdms4aFUrMWNoYjo2fkN1SD11KWldXzRIdzouc0cxMm9hNVNZSFIjdyJ7Y1tKRWksaUVKVVZZSlBXdkEkN0x8Uj05ckx5WEtgIzMkOU1dXjJfPXBLOlBnPjBndVo6aFpKJHBOXml1''@;'; put 'put ''KWojTXZGP0ZPMF17NExISy5ecXdMPnNqOltuS2lZRFV6e11NS099I046byMxS0ErQ2xeX1BbPmxlYl9ZayFBJVIhJSJtfXVOfD0raiNiUGQjNTFhK083O3I1cVYsXmxMQUg1OWpFeih0ckZGXXAhX01vaFtfOWFqO2F0MTErcSY7QCJDVUl3TD1kWi8+KF5gMi9BNnJ6ZVJ8cWZlOSZ+UnI2Ykgk''@;'; put 'put ''SGgzazhJcX53fS9tXkY9MiRWUUI0Wj9aTjlRO1FMMy8ucCtsSURCQTQ1PHF7SGF4PWJtISZyQHVOUjU7PDgzSmEmVSRIOUg5SF9DcXIxbFV8L3BYMHxYdSNfWlQpfH0kIS99OHM8S3dsSFkoPz16MVRaIi4kaFlgXUtVPUBFZTluSTg1PH1tJHt9ZyxxKThCQDsjWyhxcyhPPTM3RVp7OXd0TkF5''@;'; put 'put ''aWVVdlpqNSUpIXRwT3dUbTZJbkQva1FOMVBWOX5TTjd6ZDc7dzRTYFc9Ii8oJSpNIz0wbS9lbW9mK2FpMSNkZFFDb3o2akJDSj0uXW46NHU+e1A7L3A9VF91JiNuTWc3UUxbVCFSUmJwbyFMOHU9MDh3MzZUdms4PGV4Xn1rXUh+OUVYVSpgaktLQjZgNFVXPStsajkmXkRebEU3JmpkLndHXmAq''@;'; put 'put ''PF5xJnAhIyxvWVIvd1VMVzkrPTJpWDArVUE2JnQicGE9OTBfQzM9bk9AMSMmZF9yYm9UQjx6Pl0lOEk3JD1hIWdRYUUyfVlKbktXM09rVFZzKU9XLmpefkA8VFk6QChbakB9RXZgPDFeVkZrP35jPyVjJE89dF4kMn1hbjNnRWNsejxxJVMublBwV3NSNHB2Tl18ZWZ0OlhiWkp7Rj0zTiRnRnli''@;'; put 'put ''MU4yanNPKElfMlpPJmp8ciRpRlA4QDJqKnpUWkFoJTsoejooMytxUlB6VX1KUWhvUjZWeyJdI0lAQ0ZVXlosd21KUVMmfXhkY2kxMiUrU0t4cyh1SU8oPzxsVTpZLn0lOE8zQHdrQnx4SCRuK0Qve2kyP0tKNk01byE3VXZ8PTFCRENjKENEJEk5aDt4KHxWfXoqZldyeXB0OGo1TjVycEwkU3tU''@;'; put 'put ''Tlh6ajhrOFg5YSRud1BLOGg0czEpKHolKWVvOU5GXiNiWSh2PFM1N20sP31oT2RTIUk8P3IvKUleZj8vTlp7QXtSSVhdOnVRblBkSWNhM2NidDxkWTtdWHY/Z2BGXWRnMD5uYjk+TzxLOGgqdE89Yyo7O3QqdDl+clQxUyRKJSwqUmQkc0xYUURRQ0NdQXA0KT8qUmQ5bE9kUDxgUypURUsiNVFD''@;'; put 'put ''bnomaldHRSpgKDFebWxCYCo8d1smeSVaKHh+NFo5Z3RgWVdkbWFhOThCVEBtT3VkN0VMTUcoellqMHJ7OVFCNzgvWF0hP281TFk0Y0klfk4zN0RQODN5Vyh5MHQqPzpXaDx6SSY4Q0AlalNUQntpKzY+cnhHPXpEUDoidmhWfnF4a3p9YSkiYV9Abm0sYHh9LjNrdTUhIV9hfGdyNW03bngheDd9''@;'; put 'put ''T0g6OyYoWWc/VkkodEVlQjI1MWZjMjNgK3RofGtUWnJOcW88ZUQuSWgxNldbUjVDczJpVGlqKEojUlNDZVB2O0cuTkJ5dENfU0o8cDo4X0YyaTM5anRJfm4+Nl5Xe1Q0aWleW259IVBWODUoUUk8WktHaTBmbHo2cDszYktaPzlkLCV9TyN9d2p6NFUifH51WytYbX4sUD0rcHJKJGM+bXtoLHB9''@;'; put 'put ''dz5tel5wW3tKUFd+e0B6NG0rUGJbPkQ1dUluVk9FPGwmeEB7US5sJn41SWQoMTZadEpAVmQoMn07VEZEMT84VGE8fkFqaEQ+OTBiJk8zUGVUdGw9SXZCaEU8YElTbnE/JXwpbTRLPSkyeXMiMD5PT19iOE92PWheT2ghPl9JcF41IU5lInwsfE1Fam54aUgqfFklNmxeOXlweHB4cHw3OyxLJjQq''@;'; put 'put ''Izg1eyo3cSZLZFlFQVFVRVMzV2tNIjovODM9WTJ+dE89ZmswaDtUT1F0ZSNCQyQmZGlLPUl2TUd3SXNKVyJII1t9S2ZuPWxoPiJRNF40PjRPYzxUNEVZTWlmOiMuSSgzVmI1YUp3UktvbUZ9Q3xtJVIiPEU3JTBMcEY1RXdCdGtyS1k4c2VpSComZGFpWHVIQjIpdjMxOzlNVnhkcDlqP21SKGZy''@;'; put 'put ''ZEl+WWwhQl42UithelAzXWZaXSh8Wk4qKFVsRFJCOThBXnB3Kz9VfDhRYW49S0hHSG12LFkudzJmLFVpXktOQyp4V34zfHRvSSQjInNJRXRLYSJDQjRAS1picGptUVRDfXw+XSQqUjh+JGAxJms7eyxQTWFZQ0JXXiZ3KWI/dThyKEcvbHUuektXTSRTNlN8ZjpDQzArKXJ7ZXBAInA7JStpMSpp''@;'; put 'put ''OGhGeHpyZ2NoalR7XX1dWWg8SzdiLzJQYlhSNW9yYH4pSXxwOmtoMEBMcz9JMnJNSTlRbT9lOXVbQkZ1XkQ6JFUicF1PPCRURX5dR1MpMXFVcmh9KS5haHIxaGdyfTxHdnFYKnVsSXhZWnYrOTpbMFQxJG4sJiV5ZWYoaiYzaDtFZXBmJWdgfHtyXXY9Ing7Xn14XS59fElFZkFOOjp5Vl1IWmdm''@;'; put 'put ''cEAsO1Nra3BObHg1IXQ7P2Y/eDVIfX08Yjo6bilwPyhVS3I/c0ZrWjFmcylyRnRVNiJDXVZGKy9LQ05iZ0Ivb0chIlVoPnZJMW06I3BdIVY7NUgvdGFiaClCb1cjZ1ZiS2ptdWoyeDRFTigiQGdhV2MoTWx5aHpGSkthdVdJMzh2cEtEW0RGXjBiMlBxO0N9IjMlYERadDp4M0FMUD87KCI8QHAh''@;'; put 'put ''UWQkXXUoKHtrSWZhMyIjJFVzZmNMSEJ7dnpJVi9SaVdyWnNFaDNUWl9ycE9kWXIuVmYoO35wMzdSO1hSUDcpMGQ7WDp9PD9eSyhIQWFJYXJSOVBCeT5Yb2NueVc0QCVGMDB2dX0yYX0/bUtOQ05QOT5RPj0rVXVBY15mL0k0KkY2dlkpVXVeTShVOz0sNyxFVmdueC9tcERjLHB7bUQmMlFOLi85''@;'; put 'put ''NV1JYiltY1gkUUIrc3haQyMhdUk/TT8iayF2UzpgSUYhbGhCaEZVTE98YnNRXyteTmwjUTpMRU5qImA8XTthODlla3AwNSwjSHNaS255WmZtTV9Je2dINXE5QG9OYXUmc05yR2Z7cX1EfF5WJU5dOUJAS0Q9NkZ1Kz9uT3tuQmxCRHg6ZDBEcSM7d3h8TUBNO01RKX1bU0QjcjtqYyQxNTJhQnVB''@;'; put 'put ''UF5DYjNpJmssOVZKakxpSSpgfEk2M1hnT1FteVA4VDlzQjBQIUxlVz40SiFJRXRfO1o8JD9HZSUuTHs+IVVJQnlPdiYlI2p3bCJXTzR+VlQzezQkJWQsOkRhNSxvJWlaZ3tyVj0hSChZJD1PUTF5Yj8ybCokNTBFRDE0QkN5WXJWQHN0XiFsLjAuJFZKMi43Xj07K29+XVgyeTxBY0FMZjh5JiRF''@;'; put 'put ''XjVbOWNoaGE8bnJaQ0kvPEVqZE9CRWczR2xoLkhuenJeJmhsWEkrNlo8JmpQZi9FW3VjcmJFMjNdIXxjJHA0d2c/YFZ7dX5nYkQ6aSJLMVlKSzdnaCZ1T2UqNyIzN1BMbTxvUyF4fXYsUkIwVjFueE1aZk9YayR3dVBrTlVhLyxpcSVxZ3JVXUtXdj5hV09vdnsvP2M3enN7KilJWU5NP0hPd1FP''@;'; put 'put ''QmFeVWk5dTJafisxdFF8Yl53ZXhUeUFrazxBUVFnWCVnZ2YrW184bCpIeEM4VzMuK15WSUc/SEFSV1BVMy4rS2FhKUwpUUkxWTx1eXUlaXAuSGJHKFdFSWJ2NChrfDpPUCNpL0lydWBpX2YuIyhsXntFbi9AYG5BaSh2fSRRMFFnXnVyL0ladGVlOkZCOlAmLDNdcFBreEs7Y3lZPzJbXktZIihi''@;'; put 'put ''eTBHaU57fWpfLig4fUQwdjJ0SzFYKTg5ODgrK1owb3BHandwMlczUCg5JkluSzJZZDZfcXgxWDpgcUk1Xm9vUXRfRThDSnpFaWVpRjY1XSMvO1lnVFVTPnxbfF8kaStJQDBzZ08memx9SFFoXlEzMVFaRGtnJDRHMEsmWDpbYGtKOTlYMXVbLCNGYThvQFM8QUR9JEg2STBAb1lhNGxJbmFwR25s''@;'; put 'put ''WUduW1kvXTJJYTA3MU0jPz9oIU45NG5OOSZLak50PEFrMjE1MDU5Jjl4bCpAfXJMZV4+aWNEaV80bHskTUtGKyx0LGg8R01pZTJQKVtQVU42WU5jRk1QdXhfYEQhRkNDNiU0KVIueiJCbVV1Uyk/Xmw1fk9gb31xR3ExJSYzPEJbX2ZAPWg5W3UoKlNxYE5HTlldS2EhcG87UGs5OyE5YjBpK3E4''@;'; put 'put ''KjludmEvVCMqbWIwYDliTTY/MVA5e3BOPFNCYG15S017PzU8aHFESihQMytYZUY8K2F8eEElKjREOTU1RiZ9OEs6SkxHdVZRPHhpO1ZQKVtLekdJXUl1PXJlKjQ9Iyl1SUVEXVM1azlfcTA4KDRFTmFqdyJdMHtqSGFqOFZmYmhBOiJ0eCRvOFZmPlkmLGhvamluUG0rfCVeTEM/KEApPV9eZm9y''@;'; put 'put ''fGtgM2dhMGswISpbKXRVI1JXUT1IbD54ZWBwYHM1R11SRkxPZyJ9MjkoPUchKTo+IXx0ZClDOixIUj5NJiQyd1hkRUxQcyx5bDlAcyYmL3RVM3Z2V0pOJHxgUCRMWFphUFAjWEQsKEdYQVJ8ODNiYk57cExlTjZGe0FpUlJBOm8lKyNNUXw4KWk3YWI4d3ZHeCYwOXVtRlZxfEt1OXZsYkMjbH1I''@;'; put 'put ''dD1SJiYvSDRQMnAzKiR6RyNsczsuJE07TG5sMFEodElKOVFmR0ldSXt3WmswZltYYTp+SHJ6Tmw3cjU0R355cl1yTFd2WCx6bGZmTmBxKX1fQ087LFslZ34lXjthUVMoJSwxI3x0MGxydXVYX0RaTWlleDF+cVlpJj07ejJXfiRvUTJdfXopK2dPRjBRaXF2XyNQaC92ODFaaW4yMV8pUyY4alhw''@;'; put 'put ''YXV5dF4oPWQsRzBqOzArSUp5UTZEQlFCTkBWbXg+ZCtKcElWXk5Sd18mKyxXLFQ0ZnQjPDk9U203KnttLjwse1RTX2xCajVteEkzNDs7XUtTV0kqalRlQmtBVVRxMmZiWn0qWFA3KUx7LG5FSjhkL0xjZGdXZGs4e3A5QVkuK1BiOmgvYl1GKVBtW1MjT2wrIzo8NSouVE0/fSl7cEJgIlY2bVZb''@;'; put 'put ''NUJVWHxeKzhCb3ckfElXQkkrNipCLy8udDpQM116dEN6TVNvSWQlOVhAPXBXdS80MT1eYio8QUh0LkIjSFdUYDg6O0I1ZkhdJE9IbHY4M3o1VjRhLDw1UEhtfCNDPVo1blE8YVZLOldpUE1kYjwsPGlFRnt2IXpzci49M0shZTF6aT9HKFFQM2QoOVRJXUJteV53fFpwd1s1TX4jeyNkazNKPVRS''@;'; put 'put ''JnxOKmlGZyJgcWt7ek9sZWNlckJyLlIqeFIjMmpkY0xzeFNpcTM2SGlmeSRlS1sqc3NzWHA5PDM/clR1ZERbKnd8RyU2QSx7W0BWW3ZmciRXOXhSVCojfWB2XTZhOFcyKVBvfTc1ck9hWHE/ZXdJNiFJJE0mL2kuLHgkQWVEXy47cV86ZSlDbEw/LF44biF8MHN1cXtgSiphKW9QTHAmZSp5P1tI''@;'; put 'put ''WF8qbklQQlZ9MTFLQDtrJUFudWw8OXVzd3M7KEpmIUlkRDtKZERiRiVRb2EvRHYkeT9XPDBwMHooKTBGXUxYOV13OV9XKWNXZ0s1O3xsOH1pOFJUdWkwPlE9aT9JaGp+JHBlX15qfG1CKnNqKkpeaXIoVlZHSnkwZF8jcGBHJmo4cElVPzBJVV1MJVJDZU1lKDVjUFtHaTMhcXh2KHlkP1JZcUV5''@;'; put 'put ''OT9jIilGUndgKy9xTiw2ZFZpZXtOOWJKMyt8THxYJlt4bFJvdmh3NmArLyFaR1RiKSwoNj9ieFBtWypZekJ5Pkt8el96Xnsublp4YClWVX0rL0w+YShVTmtaeFd4SV5JYFZdaSQqNHRqOmJhcnsyVDA8NSx9OmJhW3Z1OzFLMy52O1BZWjEufGtoS0hlTGwlSTE6SXM0dURLMHM+IU9Dek1GLC8o''@;'; put 'put ''WXF9OyZbRmhvQSF8QkgiX09TZUdNXUMhRXkhdGVWTGY3LGZPdHBjR0g8Vyt9KHg/VEpfKTEsN090UGhMOzQ/aFQ4ITgxNVQ4R3pFYEloW3RzRShLfjhbdEFvLmFRRCpCVjUmZm1mYlNwSnh6KEZtdF1rUCt7PlFjJUZDImlMO2BaRlNpdW59TElUUkI/V3EjJT8zT2pEISgjWUtAMltvO2dlY3c+''@;'; put 'put ''PkFEPHRgUV1xPyNjeXhxJDVaQmtYUHpda09aZkE6NCpLMEMyVl5kVCxHODNLbms/JjQsQT97Zi5EVD9+cT5TUGdlOG5xc3dqWGNmLitecT8jMUhXR2ZvLEd0dCo0JmZKdHJMXWp0Qm91X0w1WzBISVI/MjFrdkRhMkFtaXlQRktTTUV3UjFrQlF4WnQrTztJRyVJTnVSOzI4c2V+ODlCKyhNSDAz''@;'; put 'put ''Mi9UfHBWYGZqInFUaUNlWEVEVDlpeSIwaE5kdS8oc0lKLjtbenFxPVooMjtUVld1PT5UcXlLNkNBd11rOGpjTHhOcFpaMktDZEI6LyZBOlhmLHtkaiwiYEE0M0tvPyhLJUlEdTV6bGc6WjZJRUgkMzl0czZwW2RxaFFGTjokZnJGWGBoNixDWjZqO0s2aXYlUyZiMWZyLlloKmxTJVBqXnxDPEB8''@;'; put 'put ''aDR2dWVuVGpEKkljcGlAWVFxOnBPbUYob0dGJHtISlo6YWp9VEVybTgzWFI2KTBDKiIySXkkLmA5IjI3M013LGNPQ3w7e1smUHl6QmpeWkJRL3JmUH5GOStPYCRRPEtUWjoyMVQ7VVNWXihUbGhSWj5bPCtIc2Q5VmhSMilOPUNETWFtUVcxOVNsb0RJZlZmTlVWNVIjcT0wQ15hRnJTanE4WT5N''@;'; put 'put ''IShhaXZxUTgjfEBhIklSWS5DPjRmc2l3JltxVnQxcyUmPXVzOWBvJCUva2AjT1kzcCYocCYlTHEybGtLaDt3d0NfKDRONCxvTWFzZlg1Xzt5aFolNy9ycGVuNkdaeF5DYn0kNEteNXQjOj8yc28jbnYqaCxDZzRWfEdWYGM2e0ZwQDArPzB9WWlvXTFHeUBwQlo/NXIpOUJabV5OaWAhTkE6RE80''@;'; put 'put ''UGNDUzc9Q3J2KXJ2MlBmMkY5OTp6eTEmaXFIR1ZdVHRmfFFENT1yOH1gQHRzOm5aVzJ9ezVWfjEwPSp3M2p+UUo9MjhVQTUmOTBkW3svdkN2PEptckRFbj0iQkRuYHchW0Fgan50MyR4NzBYMl4/QVhhZHA+IjYlMzlATT9APTxuUFUrfUE/XjUoLG4hKGR1OnVxXmhgXns/QilSUik4NVNhTUBa''@;'; put 'put ''Oz9XPDsoIXEwPEh1Un1XUjJEIXMhVWk/QDF4JiZuQ1duMnp+c2RxdE9qSyVYZXkhKV1tSTJISyZNPjtWYGpgQHxufmhqbmdwOFUrfCxjXWdGXyhSUnlOPG51KndAO201KW02ZmFIW3lwcDt6Sl8kT2AuYn5BVHxGcEApMyI/KmpSYzw8QWgxUF9nSyRmeSR8bFF9SEx6IzskJilSZklySzFFdGVs''@;'; put 'put ''MCZ+cC5HPkZCRTMiKnZNUSFdN2Z9U3pvcDUlPmJFPTU9OUZLdEAsZ2N1WTN7N315cz9yOX1IZEp8VVUuR3xRVml7QzU+Xm9bfVNrckU1VmQ5QCpgX2pPaFBxcVMsamgjSE9ARGVQU1dsQiYyKmg9YTlqT2k4KF95czBoLnY3MFU2b3I8Wz5qclAiSkB4ckt5cH4wOT5eQEl+aD1GfGM1VkN7QGw6''@;'; put 'put ''YTZyUytgJTZAX3BvfElAd1ZfWDJAcSxOe18sJl86KDEwfiw7Ino9NC47VkNMWnR7VHoydF5dLHNEdlM5PD1eQHxuU3xydUQmW09KYUBARzVxZlViQ05xP1EuaU9GMHF6WmxuWlJPQH1aTjVXRHkvIXwkUVAzQllXe1NiSkVoOHZIaUBgRV4wWmA6U0c6OyhfbW47RD9uWn57aiF+bDczRkBGPlki''@;'; put 'put ''Sm5kOFNBQD9oXz94dF1sfUEvKFg/YDpXJUk6THI0Z2ZWRGI7ZGcoRGtXSjpFPjk5PkptN0lFOSRFKn0oUWdXPmpxfj5eZzs1fjIsI14oLFMzOCFFKz9faUtbfEl2ZEQ9b0ElemIwOSJucVh7KipVbXQ1ZVl9ImZwMS4sRnxgVl4/W2ZRRSFqIjg2T3ElMjByOSY7P11VXVV9M2YpOz9dbnAmJT5n''@;'; put 'put ''bzlfbG85Z35ULE5XIy4yPV1II00/MCVZe1lWXlBgOCFfLktZe1l0THBAQDAwMDpMaHpEYkR3RmBZazN4cE5PWHVAJVIzK1VmNCteeV1xcD53LkJWZGZ9Kl12d0U2R01TSnd3LlhUfi47XlV2UGA/Vjl7ZVs5M0U4bl4oTkRafF5zJSY/KVJ1O2lhTSIpci9IIzNkTiQ4eUY6LEtuIWxLdXIpIiwq''@;'; put 'put ''TStvPS4zfWYsIihSYkQ7XlZ4JmYlLmVLPHBBL35lb215Omw5b2csbmp3bXldZiw+fih2Y0UqSz4qW1MlUGwvWWdZekdubU5Kbmo+dDFoe25fezh1bE45QyJgX2BQdXFrX2cmSXB1cVg4NW5pPlR9eSVvVHwhVkJhRHVVfH4hfj97Oixye31pVEIhMk0xaEp4UzNWYWQjcyJMNT50fGY2OjFHbmQ5''@;'; put 'put ''T0pFSmB9IjFtPy5gJiFNPn1SSnZ9PTRXV041USZAXnl2JlR2X3J7dUEsSm8jZ2BaYUF+ZVZzalNDKyo1Q1Fdez0uLHJKJXFrMi49KUk/U2kmMjBRXXtdaXNjb3VGKVs9eFglMXVIek5ecyVVY2J5cCxzYFlRKS8zSl5uM2Y3TD4rJVczQ1JIUEcwNi9NYGI/M1IwL3ZMJkkkPCI0Ni8zeCR6bCNX''@;'; put 'put ''OTBjPEtRM1Y1YmkuPW17UzU2L2xtI3sqdCR7UkovPipyPiFdaTJ1KVpMbmJ+QUhEYT1ybFM7aFI0VWM5alhhdjptIyU8LGsqRihDcFhvJjRQR0N2ITZEQyNBdnI0TTdeLEQ8WjtseFQqZVtsRDx1PnFuY2VZZmw3KiV0W1E3M0ZPU0lVNV5fO0NaPj46OXRtc09TPyZMZCZAc3A5ck5hUEVUbW95''@;'; put 'put ''d0VkZCtbc1N5UzxnIXZdKCwlIkpUfCorIVBMYzdaZlZreDM7NSM1cU1vU2MoWlIxWiUmPE0oXy43aTgwKzwhUCx7ITtQNkM6QTZ5ZytLK0pOTWxIVT9aSV4vdk0qZElhOVAqT1F7NjpQPD9LUDFoW1lYdFBaejNjMHNRe24sWzYjUS5+WHlnRUVmLjxLPGRBPU1SdEJYfVhPR2RpNChxVk11eXp5''@;'; put 'put ''PnZAUSJNRHg3cVhjSiR6YDVVZGlHZUdBQXgyQUFNT3t5JmliQ1l4NUspV1E0RHRfQ0g5WWhHYlIwQisvRm5SQU1nQUFBQUFBQW5CJEFDZmFSfl1HaFdrLmw4ITNHQEl+bzxCamVPT0hUOlVLO3h4az5waypAUWtgP3p8O2VWfHNbPi50RD9hMXYrfSlsRzVvIXhkJnlKW3NSJSp4dzo7fGZZVFFT''@;'; put 'put ''NSU6RXhtfj9mKT9sOD1iM35DTDRWSVJ+OTN2STZ3Llc4MVV2WWB2NVdmdHYyWnMlISg9PzpIKD5pTSVqM3RvJi9BQlN0c3UvVFkhQ1UlfTd7UGg4PXolfkZSbVUuNiYwN1NsejVzREQ+ZClNZyw0NGgoc2kiTnJkUnxsbnMhXnN8MnxmcDQ8QFssUV4sUVd2MjQkZUd1aSVaW2pbT3lGVlgpUi52''@;'; put 'put ''UGNgKT1pIWwwPjYjcylfOls2IkpSdGM1UHRTXS47Qk8vZFdvSio9VUYmY0wxczxVOFtyTFtzTz5OZ0dWa1c6Tjg2ZVpHOlFNZndMXWNLSjVrIihdIVpye18iQ2pkQUJfbDohLGwrMEFHVCNSMXBOIV8yTmg1cHtxYlpefipqJTRfekRCSWh4OT1FRU9SZDZ1bS42fkwqfGx8cEQjXWpUV0tOcUpC''@;'; put 'put ''KltqfkFuO0ZJTUlkOi5nNlFJTmNlU219aHo9WnFgLE10eXp2Q1JNLjRDMnolSkFWQSkhXStfL2ZqUGl5NXBELCYja2k6KF5RWVRfRUZDVFdXYWVQZzhwOS9NQ2dTdlI3fTx0QUl7OCY4NDFrPnUsW0w4fj5UJS5mWSx+cWRSNjtfdnI/TnslYENEOEBDNkt9clRmYklrdUslNEo8W3gqPTF6NVBu''@;'; put 'put ''Z3liSGRmN2BqbnNuQ006ZmIzZklqKHYqTmlGQDE7bCxrRlooOUhEPjNWej8hJE5TLmg0UEdfMUFFVDhRU3lzVlVfd19JQToxM1c2enl2SGV6VEZvSyRpbWNQVTpATDFRdS8/RDBUblNbL0dWcCM/SFppYHVURXU3KGlWPXo9fkBZY0JZTj1Wb3RDWikzYTNvJi5AOFlKWSE9Jj5JSVlVMjw5S2VK''@;'; put 'put ''TmU4W15nMSM8fStsJFtmOz5QaWFEQH5HWntaYU55d3RfVENFYWBVVlBzJTt3ZFhWcDxxZ20pVX1paDJjKjpoaTFYNFErT0Q7bCY8YSU6JFclNFl3O3VAPTl+eWEwWSY7TixiKXx4cSt6QCxqSCF9fSNVOTchOF13cnc1I1NnfForUFZydURFWFdeclFzIXomNyRoTnViI00vNTJxKGYrOH40ZmVp''@;'; put 'put ''bWthbDBsW2AxKVcxZkhDPlJ8R2xHYFN5eDJ8Iz13SlpZWnR0Qkt2WEdQSiEjZ09pOiwyIypuWEdyMj5KbSxtJCJIbCtxbG8vNGdCZnZ+Yjt6WDI+TzxiS0UhWntjaVM5PWZ6fjxHYnl0NVUxaT9bYmFUSSIpOkhCWGJNd2gzdFUsWSZwNWUjYi4sWDdnciZrM0J1cnE1KGNbcyspW01MP3FHTiJm''@;'; put 'put ''aEo1MTBuQXdDLlhbb3g1QlVtbjdKYkJoNF96MlppP0NTJUVZNTVNS1t2OVkuOnV1IXkyTVdzMUJeL3R6SndSMnhsNn1HdV9FRkZRUT8+fEQ0dlRrenpYfkc5WkpdTmlxKytUMzZxWm9GZHU8eSx8c3loX0MkeCVdcSojXyR6dzNaIXs4b2VzcCVAcWV2ZnEiMFNZW15XU007S11Pc3plWjQjVFt6''@;'; put 'put ''WDpJYHAyUEJiZGNXeigzbkRdcUxXSzZhMGtgMDUjfUpzQE9+W1picC9uRSVYZXlgQG5JO2hwZS5XWmkqbkdXSiJ2IiliOmlpfUUwMGZ8ejp4KiRYbXUuW3dyaVBXJDtKPkJET007OzYsSF5iaHs5WEI9TDshTXFmSWFII2FTYVtAS2JMMEwsbXw2LDpnb0tMNT1VdVcpQltZd0R3dStEd2BkYFNJ''@;'; put 'put ''bjdLTWRXOUNuJSFsaEZ9N0s0VkBTJUpCaFEvTH1eLDhmQDFWJmt5O3Y+RGFHV2JvPVRZfHo7UXZjUDt0MEZ+P1djNF02JDNSUSZodUFhJEJIPnxhQkdGQDRMYyVwfUlrNnZlP1tHbjR3YC4sJmlQYVRRaVRbNiN1I30uK09tVzlIJjxtdktUZD89Qj43K2FmLHtTLipme3h2YltvPHpQJnVPZFsw''@;'; put 'put ''WTBBZSNPezNTYWFxbkFDXyw0VyhbNnV9VkFESEojMmZHTWFTO01GVilpKHA2JkM8d0x3TUJyL1R3RUglLjpDQm5pd0A8ZDRHUSkkOFIoKU1rUjJaSGxiJXR2enN0MXVrcj83MUxgRyI7cV58VG82SmszPlBdKnUvbXBDLFpaclolPUQoZHJOZlcxRTlJL0kwPVR7aVhNSTltX1R2bFN3bTZlLmAs''@;'; put 'put ''aTMiQFE/XXY3UFAvVVBZaz1DUCFPQFJ7IkZ0Zil8XiomZCF6al9wW2QjYD0jd35kbyZSOmwxfj01Vl5sP2cpcn5lOjpiWi85al1Ib1chUSleRDZ9RFQkcTM/Mn5rInBNdXBlR2o7OGR8fG1jYWBebyNELHpoeD16c3w4Qn1qak13OyIoMX42eVBCW3AhK3l5PDoycXI4fkMiZUxUS2Q8QSFTVkA4''@;'; put 'put ''VTJsOz1dPCo1LyVGQlooS2xFX08jZ2RiYENUNHI/XjhLQFVGIUxvLnklL2M/eFNKPlZqe2lZeD9XJSspLjBDPFg+QWBrT2t2NkQzfD5qNFkyRCVnN3ozdFs6aT03e05rcDNpJitsKVtyZFdiRGw0c3ZyYGJnUV5KZlZEVGdHcncqa3NSRFo4LjsjZ0x6PmshRXFeLzxxRVNwVyhKVUhUInFkUmZv''@;'; put 'put ''dD9+R0c0e2hrbjtJI3VFXWRfZH1neS40QHZ4dnFjYTlfdFApJCxxPSN2eV90MFJkczg0bDVdUFBbTSRhcSJeO143OSpNWXtRaD9PQzZZQ19FbyNHIXk1KiZxdjxUQTM/Zy5DPXhhWXFWU3pQfmM3RmtKUi5kKT0jK0c9KzBaMzdjO3JmRWJbKCs2fjJdY1o7OHkkOGtGMks8bHc2Om9FVEtGN30o''@;'; put 'put ''SXVQdVhqNCJQYn4hTWI3Q050fipIJFpVdnB0M3ReSi5dSEIqRE49bCFiITFUVzZ5fmRleXh0TWExXm8+akc+JCpCXnt5dGdBQyF3VXZCSXpNb3RiKX0jMjY4e25UWlZGai9IRyQ2ekghfik7P0s3MCs1T3RRQVhWVFUsNWlVVC8vLyZ0dCJEe3o+LlN6REtMPzpfbX56fElfeC4yd0ZDbGE8fXdR''@;'; put 'put ''RU8pRiNtJHMqamZweypCKjclb08vJls1UHhBbXhiQmtoI3Eyc0g+fkVHe1lXYUZJNTspaHs0XUB8SnJQKF5ScUshakB8Y3VvemxkOSo8OzdVZFFFIXhNcGxVa3NDXXl4e2NvZ0k8eXNIWjAsPTx0N1lxNU0/IjFvWS54YXVLX3VweVA8ZTIiej5PdG18OGp2fXVtSlEzdG5dOXsqNHdCWDUoanJu''@;'; put 'put ''QnhDPmgzTSRrMHlDPzlpIi9jZTNoVVhbWkNOKnBuIytiP1N7XlBGK3oiSmRFQkRudCNpQmQoO3ZDJl5UNk0xTmMlW2kkQW00an4sWlJDOG86VEYvMUtVTSU0M1Yqa2hSeD1AY3xGOy9wU3RGND14aVVUcH06cWVdImpAan5HT2lFXltWOF5eOWFvKD1yKmhFfHMvOXx6V3cvYGhmKko3T29YVzU1''@;'; put 'put ''YHYvd1E4cF8uc3M8XTJhLkB3UTA6TCV5ZU00TWklb2x4TjVqRkd+bjRTbmVKR3xUMXNkSE8/XUdaZFNrVjlncSwyT3YiN0VPMz5PQisqMnpZM11DV2ZRWUtAQjdhLn1TbltsMmQjPztQNzdAcHhWZzkkJSxWYXU9bmh8bDl4ZUZvPEZkYEJmbjhDaE5gcVFaOns5O1FlfGtFfXQ/IkF6IVBAQ1M9''@;'; put 'put ''KnIhYjQ4Ym5IRmo1b3VddHpkVWVMRXs9dmVbKHpWbVZze20wUGw0SXlQeyJUeyVOdjlfKzsqWWBkajhhMjcrMEhYeG9MQztxSH4rMjkzNkFnLEJkRnJMLlNxNWB3WkthQyEqXUtrMjs0TD8rWHR6JEZLSWltb0AqWSRGU3IyWWtYa2IvaC5vVjdtb0liNllmXjJWXnhUfndVMjo4e2NLIjA0JGdt''@;'; put 'put ''N2R+IUYsJT03QkchTUl9VmdtNCxWeHgrLDlyfDJPKVo7YGs7JiZDKmpRSz8rLCtnRnFwLl80MFRXYGJYQCsqc1JJKzIsVT80fEo9K0BWa3BdMCRTW2EvPnRgeiNeOXQhb25dcFJFUHpET2c6MHo8ZSEuZyw4TGxzYGZvO09qfiZtYlBBYnNMc29GYUxnRUR1OyQ3UW1+S1BVdUFMVk9EW0dRN1RO''@;'; put 'put ''QklIaWk4TCJnQi9LViJaSW89dztyP1I4YWo+X0c8XkBhK0x7NjJaNCgqLnhTXiZHVk95JkRDOngoeSlUJkJSR3A9bkRwRD1Efj5GaXpDUiolOFhDJmdTUCpvOUdTdXp3YyY9R2kyYiNmMkhTcSpoMHU/VncxdUorQShgP24kXWNvMCtkbTR6PXw4K1NZMFIkOC5tfXEsPHAzdFlma3lMQG5Lb2tK''@;'; put 'put ''RGlZWksiMkddKDUlTmNCY3soZlUqYUNdO3dwMkYjfnV+PC5aXnY7KUxQP1dVKjx0fExSOSRVWGpaVm8pd21mSC9Sc3okXz55PFhGU1MxPW9aXjdCQSR5Xyg0anZHXlpbakxkfk8vNTg+NihRR0MhMSpMflhWRzdtezIxPGJRUHM0bTNoVj9PeU1TYHw4UjoxLyo/NUBrYlZQIVsiQWciP1o/YWVj''@;'; put 'put ''cVtEKi9vPztLfFQ+YTdFMWk3TDRlWyZVNSxGVCZwIjY+aEwiXW5SejohdT9pbVJ7NnIoQCJeVkVLRCRvLHBHbEhbU1hVUnJHfjNJRkJoSH1JKWdEPE1wRlZnKWM2JHEuLzlkOCU/cCo2Sl4oYHY/VWhUZiRXWkZ+bG1UYj9XZUl4cyRqWUFmSjo+UHVjUiJZRVpEfilYXnpbeGYlekFJaWlafSNb''@;'; put 'put ''U3UjUl57UjVWaWI/MXdwMXt2W212ZiM9QGJdXXM7c2J7WiUzRkNbRiEoRi9ieG1bUVA8SUdKKUxbUWxwOW1nZyF1ZHxdbUBtaHssTWNpIlR3aWFEeytMaFBIKGhxXWFKcnF3JWE/eEZtV0pHUnV0T2JbKEZpJjs0Q2YsKjJhIzJRUzwxV2JeRG4jV2ZkbSZ5ODZNRS9ZYDUsal5YfXg5QkQxT00y''@;'; put 'put ''W0BkOCpWTVZNayt3bF4oI0NJdXEsSDUxUUBkbS9RaTR9NSNWOjw3UTF0L0tLPyQyRSZQVktFRjxZQDFhL0hjMkpZfUt1dTZgZCxJWmNheEFdSFVmKjxGYiR2eEg8WkZSdl5we3psaj12ZFEjb2xJPVJ5PTJrJjpyOF5Cc1MmZEJpUmdCaWR9YSVYWjtTZ0tTKGt3WFEvXmpNaz4wdEIuY19pWVhp''@;'; put 'put ''dWZtMDlpK35LOiZ1fFFjJG1TKDlHJT8oezM6SFk9eSNDfXl8MSQhPl9DSSohNSFXelh0P2VIbHooai9JTGc7eD9gUU9wVFt5Vlc8JWdhOEQjbF9pZjhoYHRhK3g6LldFYV9WQUt9N0VOJFd4W25hbF9bQUA8JlZaV1M4JF9sdHp8NXFHbn5Tan04WkdkJkJaXV9mZWgyTjAoVXBKZSlNcyNFQGRp''@;'; put 'put ''c3JtXTxAeXBgTmlFWGd1QF5zfC9vOEFpZS9jbFY+M3VPfG9UOTUkYm9iKXp6fUdDNntkdG88fHA7XjFEYyRzMmt2JHdpbX41YFVAKTdNZzJeZVVEUi5OSTp8Vy9TPHNmKkpoS3YwMGhOaGtDWFNAXUp8I2YxUlB0TmZHPDhmemswIio9LFhPcXhxKk5KNTRJL2I9MTgpcGtQWSxofXJlXSlEcGJP''@;'; put 'put ''eChsZCNQbUlEfjxNZUJ2SEIzQn00K206LnhkSEJTUUJKY157L3RGTmxgP3gmNHJUMVdjK2RiIndsZUBWSk89ZylfJGZzdTdSUmdsX2N+filqJiFlKFF4Zz1hXWxJUFE7eSR9bik2IVciOChVYlh2bElNPkZqaCpzZEMxZXAldnZKaFAwQ3tFeiQ7ckcrc3FxPS9keF1sZUVWMyZDOGI7RW4iK3dq''@;'; put 'put ''NkwwQk53PkUiSjU6UUVBTDAlQGx7TC5+N0s7V05qKT8xXXdda1ljbysrIzVkY1c2K2J3L3V7QEAwV2Z3IS9lcDlNaygwbnV8YiNPbnpjOSExU0A4PzUsYUo9WmVXJXFNfSlyUTJ7Zjo8bGt0cGxmb0MpPmJycjBvZDVXRFRtZXRoVmJ5T2R1Ozh4c3YsWGdjUnkwbmZpR0J4aW1CQyYiQnBfbFpl''@;'; put 'put ''Ul5PMVd8bVdCYkVVWnZTelNJS11oU0tiMUA6SXRMZiR9ZUkzNCVUUz9WNnpTUSxfYFQvI099PzJXWyxRNzgiMTheMCZjJSVqUywuPWxYMTw5ZzYxMWt4Sm9UYkNpRGVmQ1AlU04/PUghWzB8VGJ5KW1gQz5LVT1iS3J3TkNuOT1aWHk/ZiYkX3lAJSQ7YVM+PFRuVzV1Y0VWTXtnO0hjYSw1TDVV''@;'; put 'put ''amR7aGEiRS55R3IvRkdjR2ZWSF1tMnQmQTtZZ0B6eiZlTSpWbCIvITU6W0JEJFFLcDdIcTYxMTZFI2gxSiVzM0BBZ29uRiFRbVdwcE9KPGl4PXd0QDxEXUdvTiUsZzozcXE4Z2Q8OW1bOi5EXkYubXRJai4uUiVbNnxaTCl+dCIoSHpYflp5QDEkPF1YfFhgVVRFVjEsITxfSms9SWN3NmRtZ3NH''@;'; put 'put ''LGtvNEYqVCJnJik+ZTYlTWhwbiEmd0xTQX1rKU1qV2BqNV9uX1FZbEchKnVUQ0Y1bT44RWkoWjt7LDZyOWo5andqWk1JKXEvfiMqUi9mZmRPPlBXbEBYSnxuOSR9bEYwOjZhN0h5SXM7amZ3LHRkcHl0TERNezM9Sj8rJmxYN1tXemNwdXNOSXkoa3s9fTp+ZDMpanJiT3tIbmg/JGRUJGpMI3Bx''@;'; put 'put ''WGQhIU5sLypuQWNbfV8qYVdeanxlL0JgT2w9SWNXPzJqfmxENV92Z3MoP0xibzEwWVdreGNKdF88W0B6SVlIZSFLKmdPSS5SIWFeblleSUJVcDE8QkgkSTxNa2xgSEc3Y2IzQD45Tzd1UChINmtmNzF2SXxyZ1RFZUIye2psZDNxKz9vKCxtMlRLLl1+XUNtT09jPDk+Ji8wP2heOyQ4Z3QiOWsw''@;'; put 'put ''UTBeTj95YT9CQ01OKC9NXTptfSg+fWZlZVFVdGAyWEAjc2s/SjpNYmR1OyFwZismOiklU3pdNTI3cWRPb3NYMnAuMjtXSTlQZHw4a1osTkQrSFZWLHNlPjhaNWpGLnsmW3IrPypAfD1UOXR6ZDUqWlRjTllsb1Y2bW9OYTRmZDtCRz4jLHEic1Y9UCJIUzlwVD9BMSRmfEQkbHx9flUuNChnWz9V''@;'; put 'put ''Y2VBWFtSZGJ2VysvYF9ObkNAVFUve2Uyd11eS3V7QHMuQVdfdWZ6XXBELl9SQTpuJkpxIjhRKWw3YGVUZjFDLFMiRW8vYTBzTFIvMTYsMkVOd3JdKTBqTTROdCJARyskfCE4altgT2dpP3dbQjttNiZBaV06Mn1wJW5qTlledno6dE9vSyhXczdSTkxacFpoOTx2L29OfUcuPlhRS21pcW49VHp7''@;'; put 'put ''NU1UKWR+a0llbWRtS3BgPHdxNyM5USZFRG4kYD1aKllfJCpLRTxTdmJWaCModUY2aXYqZ0lRUDd+WDdBL1JgNWN8LjFrTCRfKi93ZDkwRHoielgwfUtVazkhX248Kk1oNTx3UmRVI3tTJUhsQT4hfndEQ01yN2tPcnlmMld0cm40N11idD1SaVpJaVtYeSpqUz96bSNXRksseiNKOzB+flptSVFo''@;'; put 'put ''YkoxT2BiVTooNkclbXQkKjYsK1Z3eWBBI1t3aFVSSzJfYDleK0h0PmlVeTZPKnhjakxnOikqXmRUdTFEcih5e3JYfDh9NSRVbUEuYn5rZnY2YGI7V3E2Q2h2PmdYcy4sVFkhcz1ASnFwWVolXyQzdlB+TkY+Ukt5eFBbWEF5Z2RHaUJmRT06fnpATHxzXzgyJCZjTmA5SjpofG5DZ0dGfjw/K0ks''@;'; put 'put ''VmVSU3xgKTJiREZvKll3NkgiImV5ck5sVlFJWU8oRXpwL2IxXUlNTVRNTUMkenNQdWxzfWA6bz4+PyRqIjlgJXhkI3UlUTUqUEwjfGluTWJLa2lpOUthMlteKklfMShdWXo4OFZtcyFDPkVGPGJOKVpeW29rUXEsfXUyak1yY1QlbXNGImd0NzRQfX0yaUdtYS9tQiljRTNQQClmIThfIWZWb051''@;'; put 'put ''dXByOlltNlhZTD44eFp6djxUMlA0P2R1fH5jNkJGcCpmKVJfWFJgYkZHInNEdWg8ZnMyM3xELG86Kk9sTkZzMFdmLlJdZkA8aVIkOHo1ZVhla2MpQGtYOm1AV2pReU9ZJEsjQTIqdDIyTHVQWlF4PXo8YzF3JSoybCR6LnYlLFMpayh8ZkVLIUxiK0tlNkxme1VxK1Q8NT0jSnswbzs9QDwqYUBw''@;'; put 'put ''LjRNT0lJSThSMzlMZDVIbDpaPU1DJUY9MjMhUTsrNiJFT1A/cHVVbEVIYUlWUE9uS2V3bzBnb0QqPFVaaShzbldXMTBzU30sTC4rU1RpUEp1Qix5K1ZmQGFySyZNR09CayEuSTtCQjJ7d2ZkY2x4VjwwTE9bYCpxNUNDdS8qOXAkSTJbdVIhRlkuOz02NWJEQTIuOzc2KlhVLmFUIlRfX3NURH4r''@;'; put 'put ''Z3k2c2NEZEhBKntRZnRBSEQpbDJhTjtzOHJmUiVJYVd1eGBeMj1MRT9qLnhXaUAieV5FXXZNOEcqLE4kbjRlS3JFP09GS0ZrU0dBVUl2fitVRngrMlQzPEJqSCViMlU/QVRsWmFSRGZ8WiF2MXZob05iR2JVVClOS1dZTURrMGs1P2prbSxPKGthdEF4djJCWGtnIUg9SHh5TiNtLz1wRUJ9P0lj''@;'; put 'put ''NHtGQE1YQ3FZMGB7b0MvM0V8cCVuJWFAY1MsSSRzMk16cVNHfVk4RSpIY1Z5OjVLL1R4Ri90Nil6XiRdN2BHYn1zSlowKGgrW1VKUkNJJVZeKiNfQUQoIl1CfVo2dEA6Mk1tIlJWTEVMLl1zZWwwQWQyUHxfbl1BTFcqekA0RUIofnx6YCo7MkR0LkR5dipzT1phOVRoRTVRfUdXcFQ+N31bSGtD''@;'; put 'put ''P2pkNHp+Zz9qdk0qP2d2R1o8Unx5LjMuQixOYTFyPzU7Vi9RclF0IylBX0RkfD58bmBZd1VWJl9TTCRkeE05M3VEOzkjQm9fUVtzIz8lN1UjRVN9MG5OXUJYRVQyazx2OGN0RjZCMCl9N0RqTF8zfjIrQ3NgdSEpI1MseH1bcT8uaGBpQkd1N3NiSXRjPVNqRWB6P1Y4ISNZVHtULDxDLkwjMjU3''@;'; put 'put ''OGBdVitbbysvQHxjbXpJZSpeTDlLYksvVDByM3w6S3F1K0lYWT9HMExmSmBgeytrVFluO0FUMG94RzIoQyo6JDcpSXl6eUQ3NVE3Q1IrQDpRJmk7aUUkYDZCMnpYLFtSdUEpbFovUHBrVVUmIypNM34kfHp8b2UqXUJESlg8ZlMiIT9gLGtDRiN6KzhndllMfEo4KmFVVXZrenojbzxLUkNWQUhZ''@;'; put 'put ''Ol0/OzMiS1tWckM3RTZiYX52KmQvJiFTfDpnRltRZWQ2L0t+Y0VQQlNjKnh7KHhsZ2omUjdAVzc4aSFGeEtmLzYxcU55WEtOQio/VjRhVWYxell2KDNONVBgd2QhLFpzYWMjUVQofkM6KSYiKzlTZzZAWSR4akd0Vm5ZU0VQe3twSy9LYzFIPS43Jm9SL2w4ajVXZUs0TjF8L352NEkzfW1HNE46''@;'; put 'put ''fD9TblRPT2kwVGdXbi99KipLc3U6PTNEIz5SXW5GJk5MMTNicE1PIVpFN2lwQ2RhZiJ6MG9bNV9hej1GeWRSNlM5fixoJGxCViEseCV3M0Q7dSQ2OHZ7I3ViIiFiOGZ8N3AjZXYzZlU0JWxHZlh2V1Nnd3YhWXhgPFBJZXAkInJQXy9YOmI5fix8OEUmKCZoW1tlR1I+IXw7fmk/QDIqTF5hNksk''@;'; put 'put ''aXwjck14R1R8Wz5uSF0pbW9KVkIhWU5JeWZ9X0ZMTT9VT3UkdCtrJnNCbkFme2Z7bWJlOFJdbio+KSlhRyhefXNVWHZUeiFrK2tVZHo+ZFt0fm9Wd1dWXUxRcThlKXZ1Vz56NWZ7fVl4ZUQ5PyM8MDJ3bkM6ZU0wSD16Il9HM2tHTkU6V1hmKTVURjl4dTp0WTdmJTd5YSssVm9LfUdoX3RmT3Bg''@;'; put 'put ''RF10RyFYbkpoank0MmNyPThwJTFJWHV+ckxQVjs/c20wXmZ4ekl5b0V0YkdnemtpL3x8UVg4NlpoNWE1Q2tMVFFQV1Q+ejtpWiouVEJYKVJJdiNvZVtqfH5bUihHYE9KUmFnXzpLJDdMY0FkMF46MzMqYz5CU3kzOm8wN3NAOEQvKi5XLy4uJC9NOlUjOSZ4S0VAOFQhRTM1WFZJJTxhRDtKQCYs''@;'; put 'put ''VW5wbUw7RiJTZWEucWBSMC5BSVkmYEpCTykmdWNDfSE1eCVwQztLeGooJV12M1ZwJTwqO2RxR3NsPHVydiJIdFFGVHEpYGQ2S0orXylvPT17NDo2S0pSL151OWtxMVN9ZyRBO25leCJBOHUkb15aNUYmTn52Km5VPGgqWGlUNWFKMGhBVlIxV0h2Vnc5R35FI306X3VlW0gqImMjUlJRRFYhQEt6''@;'; put 'put ''R00wYGldKnFyQ14vZV1BWkxgLkQrbUFSOzxIXXRYR3BOXk45aHBNWnFiJExzaDU/VDtyOkhFVlhFO3hsZzpuPkc3cyE9L0tiKWVpNXJuPGJsbykuMF8rcj5paytvTHIvci9rMFIsKVZmWl9gRnhQISZTZlVofiNDXmZLN0o9X2l+RUoiPWE0aXB2PUdPZzdRSkMlKEY9cW5FU3pSbSxXNTtLa2Eu''@;'; put 'put ''aEBJLns0JiN0RD4wIzddUGIpfV1pXj9VXkE9SVRzNWNFJHdJKXZia1hPbHJncjxYcC5+TVheK2B8W1BLdENJK0tEOz57OyorPz1CN1R7Rz5JNGZaRSZTX2h5bX4iMm12dTImImBUZD9PLkdnOjtDbUBqNnJodCRGfkFsfFRfWXlrLmdZYCN+Sl5Ue0Qqe3pmMGYsNTNVPGB3e2BuZl5OWDxnSDF+''@;'; put 'put ''QF9tQUxUdn0hUihgPThfdUJDQXlPX0MpbFBfY2VKI1gzal9FJUxESW9fdGskcm9PTU5ONVE7SUA6WDB0Z0Y3dVR2eH5LTyRvOFlaVmRQcmAoXmZYbXN5PTxaY01jVVlDQ1s+WzhGPnYsZUgzXk07WkEqdTQpTUY3TnEuKVd9MllmSiFKVG8sKDN6K1B2aVQrN2h+Q1RVV3shKkRpXjE2WD0+QHQo''@;'; put 'put ''PmBsMiRabHNwXyNbOUVIPD1KVms7cFQ/TSRzZHxAeHVVU09gTy5ufjosd01zfDdRdy8kLzFvXzgqVkghRTBRYTsoUmssX0g5fT1rSkleI2RTYmdhSGZORzlnL2JFMD8zTGBXSS9rQl91WSRvYHY5dzx7aUt1U3UkJDhTOm0pRTNPOH59diZkQHBpfkozTyl+NFsiSU05aXRFYHQ4fCFbMjVLKyE1''@;'; put 'put ''PCFNWl16fT8mPjsidDA0XSN3SyFqLkkyMHx9YFhrdkc/ODE5anBjZ1NfODpEJj5LSlNwIWA6Ol05LypLfU57Q3Y3d3RWXS5CMm8zOGxydlpBIzNNIUxjWjBaUVFyVD90fWE6R3h0eEl9Ryh7ZH5MTDkpITk7dlMoLFNXWnM+ejNsKWJINTIiQXBlOjY0JCNWTT1fSkhtXzc/bGh4JCg5PnVgbU91''@;'; put 'put ''QCg0OyEwc2lAdXdvRWdWMVpMXkFNJElffEJUZHFsZ2NBTzh+XlE5aC4xMn5FIjVfS0N0d2BSaU9SPmI4XnZFKlF2ZXlqK2lXQ0pvaFFiazxZQ1lxflZjanY9TSQiJllRYEx5dT4jWSlQTyw/bnRjTm1aZltEWGJQaHA+cVJRPzg5TndKa0tpQWYwfkE4SXdjRT1eYH0uazdvQHtmO0I/cyMme1Qm''@;'; put 'put ''X19bWWRFZk1aM1Q9OXZIKGw2TFd7VGBqOC9aO3xXOUQ/YVkrWi8yKyNOR3lndHpMVCJmV2xlX2NdXVBUWHZVWW9YOClMTHptY2ZgNUJlPWslNEY8bkJzWypeUzhZVF8pfGFPIXV3JlNoIzBpflQ7SiQmQ3lbZTAiLnkyNCJuST1WeTRiS213SUBHPHl8XmMsR0V1SlFMc2k1MU9kJVhkZGhvNXBv''@;'; put 'put ''KFtnMEcxfSpGQnE/TCswNXpjY3F7Unp0W3g1UCtqbjZqdSlrc0ZvPWtQfCMvbH50ODtPZ0RsQDx4O0tdbT1lWGc3MVtPUEojUDskfnJCMGkzYG8lfkZtQn4vR0NDPGtaUVs7fVtqMXo0e1UmW1hxeTFVXktVQ15MWjAzUzdPQEdgVChXITpFTWdzJllsfjksQjJeLDd2Sm8jdWk1JEI/VnJMQUpY''@;'; put 'put ''TDB0dSgmV2EhJHsiNylgdE0xOHY3MXFJTz1LTVp1Z11zPDghdXgjQVchUnZuX0koQW9vfVFWQEdFTF5UUV0ld1FwYFo6VyQ6UEpyQUZNYXVYRnQkLEdmJiIzejl4NUUiUTIqckZBaTJ0SVc6XTZ4WipGfjgiZURnMWdVXlkvWzdBI2QoRHgsRDVoY0o2Zjl0NDJ1bTElWnd1KC84aElCOUNobmxz''@;'; put 'put ''dj1iJEwqRUEwV017enU6SUNlVjJgLDZILzsmSzJ9Q2pVNF9ISmRGdE11dTYlNGBpN0NvX0VKP19SI0RZbEprd1lpdWVeWiRzTl0wPG1BQi5Kb0JoUVtqREdCWmd5ZHhNfUpDfFNpRzJRUzEhYVtpYGxmIzZgXX1eITwuK0VkMXZEajZOYCtjMlE7RyJdL3ZfYHo4R2MpYCJ8OVFqTklxJituU3Iw''@;'; put 'put ''SSFxI05yZDZweG99XWNVNTVxRDE7a1hPXWl1RClCYnxaYjhOWSNKLjk3aT88LG1ZLmU3KikvTGJMWV1iWHMwKjNrQVo0T2sueGUiV3srbkIsKHY2YT10SWNTUzI0cn0oWTdUY3dIK0BRZXJ5bl4sJnFpRCR0a3ckRjc+WUk6K1dJZnshIzg3Mkw1aDBQPXl9ekh7WnplLE54S3NPQGNDdjpCUStF''@;'; put 'put ''Znl1Q30rZCkwU2NNXzRqYWY5UHJfX18pamx5RFlbXjE7YWtBfCxeJmk4bnNrPW8yP00sWytbL0phUG1FUGBFV2QmdTxDcnI3fVRnYjM6Y3FxdTlHRFVbeGA8dGM3dF5VKUMqVnBOcCIzVXwqNl5FY1lgKTFENWIvPnFfS01OQlI2Z1pVeVpGeV1xO2QkOil9UGIxQzNuYGokX09Pd2w/Ujt1XkJO''@;'; put 'put ''YiV5KyE7RkBDY3l8dnd5dXpgU1k1aS9xJiFBWEsoYSZPciY1Vmc7K1VGMXFFMDd7YjR3PHYlZ0RvZ1dzREpBRWt1eENfV0J9RSNXRyEudEMvSEd6QVFIL0k/VTdIMiV3djZfcENTaUpdNW5LWHB9YF17XmB1ayFHbShKTktgWmFXSjEjLl1fcjRmNFBrI1JjN3A+WlVUQyhmPyUlTE9JY0phQlN8''@;'; put 'put ''Ryw+Ri55LjViQ3FOOjgjOyhpT287a3RDXkhkdklfOHVMeE5LemF5bHprR251UztLcV0oaEVXPClKN3JmSVpmMm03LiMxZnBiQF1tWW8je0V9eWMvIz9eJDEpVTQrXkJiRHhMQEsoMm9wYjYvcEFkXV1Bfl5yI3IrQDZjbHxvKWxrZSEyYFZfP2YvRHRnXj48LnphLE1EYSwlc1g6ZShJXVVnUGYz''@;'; put 'put ''Mj1WMDVbdjk+WntqfVhqX29KJkViMFg1RCZQTixPPG1LRGskL1BAWzJfJm5Wb0Y5SjxHZFlQVyFsI1chcFYlT2lJQng0WlRPTk5SeV1RYlNUUyZvVnFOLi4xc15uRl9PSithJjIxO2gkaXI+JiFzcWg+QixVbTNjKXZCR246X1cxfFMmYlRzT3NiWmhfYUNyVDJoKTNIO3lDeDAqI1kpNEZkN1p2''@;'; put 'put ''X1tNUERzY1dRX3JPfCQpRE4obUZCIi5xY2YxPTt7KGNDNHd2X1RdfjB7I1ZhNkYjI1JGfiZYQUBIbnM8MiVwTDtHRiskX3NMak5nOXdQdWlfWFImSGZ9WzVwVCY9S0U5YyhuQFVxcjZSZWxYPSlrS2FdIy5QRCxqKEIzaU1rWyZsRF0uan1tTltbIz1APDFrXTozYWJAcFtZUDJuUXhVaUtGcjo0''@;'; put 'put ''UGp+VmdSVT11M3ErKyo7IUVILG13R2UjZHcyYHsjd0JvdzNyR1ZSI3JJW1I8aF9MMil2VFEqUltRfUZhbEVzMGVaOjBKT2ErdH1kOVNoVCtGdD9XX2wkMG9YPkxlfWUwTSU8TzBHYWkxSkUqPjpQN0pbTHF1X00lNDIqLFVZSXZucj51VmZJUmtfSTlSMFAwI19ad1hAYURMTX5SNXJDb0ZlPiY5''@;'; put 'put ''Pm07SjUlaF1GZ09EdD5zIzN0Y25kNnAoWWJ1dktbKjtCXT8wbUQ1K1JFKXdjfFFsUkJeOEYoPyJvXT1UJVd5eH0pO3x5LFZWeyNGfDxEeyFjNTJmRldQZ3V5UUZkRz5eL14/XnB5RDVbOXUxW0Ujd2w8O3N5LzA1MjB8dHhoPXQ3U3RsVn0pLyh3TV9fP2IlJlZVPSQmN2d1e31iZ2dIMl06Xig7''@;'; put 'put ''S0AiN1RreWBrPT9+VEckOU4yPytCfilkPkY0dldbaFQ9QkxDOEQ4RGRZJSsuOEt8VzJ0SjxDNm88SFtbdW1rZzU+P25vQ2oqcERecW18fWFXJml6a2JbY35INkZWd1lXKToyVGM0JmZAPCNYOmJqd2pFKXxKOGNsa24hUHs4QHVTSno9SXtlUVZiWllLMlJ+JSxJWyxvbEQ6aGgod1I2O1BiPz1n''@;'; put 'put ''RTxNe1R1PSZdX158Xm9oSHJEPmwzNSFgckRPZHdkayJwUSp5TGlPZDVpLywrOFI3Y3ZLNWQhRUh9dkIlY1A4fUl3VUl5QEA8Wy59S1pbI05yeyFPIU9RdHc7RTEvfTpucFRIK21ieWpURCtHbVsoNCtnRSoxeHdDOlNDWmYiN3ReK1Y+Y0I9R3hNcnVzSl13eXdbIWo1Pj89V3VZMiJETHRtOyhb''@;'; put 'put ''TEBaM2M1WFosSlVFczM6K3BEQlB0Y2ptTjxHJGtUQGhXck8zVytYdCZFVU5VMDJ9YWByMDBkYFt4Uis9IkxQfCJ3e2s7SkVyXSJpRjQoP0xAWm9OUUp6T0pDYU9pL15rPjEwJjkpMHFXVC5WKjRoZTolNEtnSXcoUDh5XUNwSiRHVVckeXcwPnlQaEIhdXlUdmFFZURWWSt1P1hXNTVxby49dC9T''@;'; put 'put ''M2VRN2Q2NjJ6a3VpVmldNmp4cW5tYCtmWElTJEBjVmB0LDc1dWhZZn09ZG4uIWkqbipRTGkqPzdCezRGJTxETTlzbWZQS3JFQFJNMFVxMGk2IS5CQj5BMTs7InpyVDUoaWdpcTpfVygwIy95Kn4sclNlKnZiTFJ2SFN+KVE/ZHB5OEY0cnZgc19FQz1zPjczZ01LKHEuNCFISltYbjVic048b08y''@;'; put 'put ''STdDJDlFNz1iIXNQNWNETEI8a0VfWlFgP3h0WXB2OyhuJiVaZ2dyMDY/ez54SkZiMHZ4bClwVVQmayo9VlVAKll6PnN3Zz4/YH5TdEVZK0gsZUsrX01yRy8wcjRmIkxdWVpvOFE0XT9WQl9xSiFWME9BXj9VZ2UmZTp2dDlYRGVgXWQjQnYwQix8fjpWIk9dbFdoVTR4U2ZKIlVsc1BgOztWT3x2''@;'; put 'put ''eFtNeCZJUnB+ZDJkK0cuIW8md2ZySUJ9MSpRUDdNYjJ5NDhPI1ZSZ0ReZWkkeVRROD9TRG44Tit8cnA8d15GRHFJTUVMX2dEWylPVGNwWXdmaFR1YC4vUV5+b29aczg7O2lQJC9fZEVJZ0FLWDs9dy5bWDMoUzRVW2ZaYihrJGhGUGhqSzYlTltnP0JrW14vMkZLfm1NdkMsamE/TV01QDFfY3Q7''@;'; put 'put ''LEdPKGQ8V3o/V3V5Oi54ckFYPVc2NGkqOGl+Y3pQaFhvNmYyQmlFVnMyTUhaMyVJPGJyXyk6V11kcCRaOHxOdkNGK3VvfHUwYWxRJn5hZ0lpb3VYW1cuS0BHWWo0ZW80LDpJOn0pPVQ2Y3tFbGg/K2dWRFp7NSFzYCs6SntwXVFlLDlLT3x8ZXlCJmhuaE9CK1IpNXElWXFvVHpjWSFuNWVHaDR7''@;'; put 'put ''Ok5VVW1ub3hYQ2tlLEM+Kms5TXNKeHx+In5KMUVBKmxoNl4lQFFdNTdQOyk0empxcHxfaixNKmApe0dtOSwxVHk8IkpicTs9fXwlT0hkZiE4Vy5hOCt8e1NXfj5ScWZYOndeYDNkOkxvTnk/YC45LHVuVklqMjxIYFR7azdGUFNHKTBiOj88KEdyVGRSUWIxV1Z7KzxiZXwkXmx+SHckNUIwSlFK''@;'; put 'put ''IkswPjZXQGFfVWZHR1N9bSJIMVp7UD94USVJZF0vTElXY0Z3em1gSEdWO05kSmZGdHVpXixPcUZAY2BsTSwoJns/JVkpMkc9NEYmI3RKSF9QVC51IUxLOjNiMjZSczk2PSp7OS9qcU5PdklsVWpjcjgvWENPJDlDRUhLKyZMIkxeUStFQF15aTl6MCxvXU46VENuI3Z1Q1FqbEU0T0dAVVY/fCV0''@;'; put 'put ''Ljt2eCxzL0pMXyIvQENpN3EkMjEqdnV7Yi9wbjBacyRyKkopQzFSVD9meiQ1czk+JTgrZ08jdnhtQ2QxQ3kubWF7KUZyR0QsbTtKQXZIe15uUS9KPmRnQ2p2dDM+V1djYUgqZVRAaVR0NjxQc1ovTiFPO2VEUXUwe2V7LD9bWil9eiVXKyl5OT9kUn5VQiNVQCJEI35rdG9RPElGQ3RqZkdoMWlF''@;'; put 'put ''KEpkT08yN0ZDMT8zYlBTRF46aUQwfkZrLFQmK3VXP1JtJkdRal1WMnV3TmZzKil+UFEiZEIkeyhtbUdNQGlsXi4wTWljSil8QWV7Ky84fGVIant6KCNAdF1JQWtASFkrUmdYXWImdTVqNSMjX2MwRyR5Rlg2Z1gsXjBjXT9hfit0RjNAZCQuO0xKbmU0U1l0Q3t0RVY5aWVJQmdZLmdxMWg6RHov''@;'; put 'put ''YzVXdXthYUNuIl5+WFlVKD8uYzM6QDROM1ZALyV6VT0sXX1CWEY4MXV6LnFkby5efndDZn5FRDtDMTtCViVmeGgzRS5LQ1ojXVFGPDZxKylMUCEhZnV+O31OfFFzdTxiQ1g0I3pgZn1IX3xnIytPQER9ekArNWppZ3FwIzwrVF86QiFrKTh5N1t6NCUpWGN3b3pmJVFlU31bVykybGFHOi5gQnR7''@;'; put 'put ''PjRgR25eM2AzKCF4LzxyMEopOihOUyRlJWs7YSEyTlokNmtZO30kaitvdSRQbFg/IjpyfVdqNmB4Y316QUModGZSIWcseDFncjMoYjxkPGRXJG0iX3FOY09zJFYuNjRxbm8hIUw+REp+X3I1MGdWaUpHeDRYTTtfUyNmSi9IKmF1VDNEbDM+Qz01ZEtIYXBrXzRwfStiXixiVldicWU+ViZQW0su''@;'; put 'put ''fEJUaD1EUjtiVHYxSXkpVWN9ISh4NjtIRy9JRE4hSm46KW56NVtybWRGQDFbN1p0P2xQRypjPm1hKkpAZkN5fnV3bz0xND9uX0hnfjcoeVVvcGtTNjtsQ1Z9Szh3ZHF+MjJxXUgwS2FNYUJkX3FCT25eL2tJK3ZOTDlmRTFEe1JmUys7KyIxITE5MkEhTip4LlZdWTckcT8hdX0rUiZ6ezMsYnpw''@;'; put 'put ''VEJyaVdPYGtUXkNbSyRgc1k0WlhnIWQzVXJCZTxva0w0JV5NJC5ieHdpYDhFMldgcEpQc2hDUnFgPT1HWnhbdHl9YUpQL0ZDQEVQeWdYcUlDRENzMlpaQzNXL0thWWkkOG9UMzU/YDcreGtVSFAuTV1lcFV2ZUNLaio7PkpZbUhINWpwXilqSmIvPGhjNFJWUHtJamxpaXJRTlo+a040byooMFtT''@;'; put 'put ''WFZSUjUlK1F4NDluNjMsXV5RSj19dmAoLyghQ05SSyVlekM7NEN8QCg3IldFNCR0IkFLYVJmVTdfSk94V2U7VW5rSD1rYjpfbEc0JmZCeT1KZnN7OUA5aHA6fj4zVX53aWFYbFlxR3BtO0R5Z0B9YWl0QCsvblZmLkRvVn5LVnFQe0U3eyQ1PldAMmBrLkcsaFVZaX1le1FnMTxOMz13XW5WTU5v''@;'; put 'put ''SHxoOGshcXdaOzZQOj0yNyg1bVhld15Jb1dqNFEmbVJ9VGhnRlc+OEpEdT1uRXUpY2wxTUNsJTBoTUFYOUhHRkdDXkYpaFR6e2lfayFCfT8wSVB+a2l+RGUvKDNCeGwseEJKIktjeD9GZGYvdHdhNXpDKERlSWtmczM/MTY3UmVlcWFdI30hInZPVSFre3xIL3F3KEdiRiVZa0Q3bTB6YDgyeHw8''@;'; put 'put ''fDE0fk0uWGA9V19SW0hkPHQzUjRPWTsldzpfUWd3KFA1WS97V2o5eGBeQTtmTTxGRVcmIzpLTHJeUjxNPyMyfUlERyhaTEZHbEFJLjQ0MF0kLE1qazw/RVB2aF1YOndRYGNobyxCeDg/JUcmLyhqJCExfWMwTjkyOD0/V3BqOlJzRGEidkU7b2NSTz5EalBxbCFsNE57MCliKDxYbnNaNS5tIT9k''@;'; put 'put ''YkVvbVJiOS5wIyJVd0tzRzN6Q10vMndsLD19MTQsbD5OX3liIVBwXUs4My93OUZDI2c5d3g9WHNiMyRKXnNHPUwyVElVVUZiV1lTY2VtUUN+TDhEZ0VRSDN+Wzs9RmFXTEQofEl2ZX0ucjo9L0xmOHtNUiNhVVpaXzhzUC9GOzp6PXpmW0lvSmNJfnhnMEs9b1tCQT0rYWssVnFVbSMpQj93ek9q''@;'; put 'put ''MWhOQTJ4ZWVwTW9GIWNtSDxTNUF6VGN6fHJdS1VyeTVDUy9qUENaMlY0T35fTWQ+P20kKER3SV8lbS4xMDhgOFl0ckg8WGU3KWt4eyxVOkteWVRKJmdYU3E9WislODVeS1d0bz40VmlfVGQ3OmxHeGR5bWhFbFNWbEkqPmBjRXo1MVIrWkdfKDQlV2EjLGV0Zn4/PVBWSls5fnZ3Ol04MWlRYXUk''@;'; put 'put ''MCswWDxWNUM4MUg+T302WFBEMzw/VUFGMEJWWyRQdGRDKW5vRDZYd11AczlaIUclYFVTeGw+XjA8N2V5KD80VXJhcVdsYUtuOElHR2BFOmtJV180djJWSCM3ZnRJRHRWaUE8YHpRQSFzMjxOcTF0THppNUldPlchQyNuI0JAVTNUb2l0dG4+dUlnYUJDZ3x6SU1mdnQoPzZrJEMpJT1yRmJQfEJ1''@;'; put 'put ''NyxKPkYiYVZbVSt6VG0zZDl0OGx7Q3diUmlpQzomMWU0ZE09SngidWBvX11RaH4kYzVCWiFVRD9aPlksKSxFVVpMfGs6OiZLSUxTKHZqLzdRWSZzOkNvVk1kK0ZwZSIqMW0jQnRwZmVWM08lVVlNODJFZUYrQDMzcik1MFhrJUcoMXw/NlcxTEtdZDx3c1FxWCsuIj1ETEYpbWZ8Qko4RVpMaXNB''@;'; put 'put ''UDpCXz16RUEqRWIjTT03PkllPVRReV4uTi9rSkRSRHRUanhmOzZ7OjhCTyopZ0wxcDRGUklEcip7IXVmeygsZDRJdldBaSxhWzpLXnltQVZUbUVpRzUsUkV1YV59Rlk2KGVtKDtLeilAbHpLXWNuU1ZXVyk7Pyp5Q1IjXXtPUyN4aXNAWiQ6W2AhYU9pKzM7PUNMcHQ3bkVqXVZpXnBePnVRdltv''@;'; put 'put ''VH5ERWp+and5Tjt6S1JpVEQmO1tMOTIxRnQ3MVdlWz5xJSZLeWE3PFR6cEBQXVBxNyZmL31wcT5DMFtdJWBjb3pCej52XSxFbVZfUyk0KztAVmF3aUdOP0Q8NnlfN1pxaipxNnU/Mi97bkY/UC5sfTZGPXIrcmpgekF2ezxoT2RFTD8mWjA0aFRYZzgoX3BdcCJrVSlHanQvKzlONz9VYzhkSGFT''@;'; put 'put ''KW5laUA9ZUY2bzJXWiRje2QqIiVraCErZiFbalVNXlcjT2hnSypEKitUZFQzVWhiXztod1JDbjg7bDMiZ2BuazUyPFZDU01Aeyw3a2QvXyM3dVI3O1llI0hmXiZPbn54elhHYG1RUmU+UTJ2Tkc1PyJQVlFza2d5Yil+QXZCSmM7L3wqbStZfXpmYV1UT3c4NVVsXSs8LnMoMmBpZnBEKlNJez9F''@;'; put 'put ''TDxAVWNEbmRXYWhaVGIlOmtYYiE1UEEhWSlbO3swNTZdI0IhSHFEQztfJjE3V1t0UEYsP3pDflpfWWU9Xz5QVTQ+QD5gaGl4M115TzpuQ090MmEjbH1VfFg+Myl9VFkkW2BDWCMpQUVzKU9YKk1fYld0OUo1Tm5SNFtJXmJbdTBJYz8jTGJKZE4kT21Jd2E1Mng9MlM5N0lxU1J0YytmNldgKWdm''@;'; put 'put ''cjdORXEiXjQyWzd3OEZhQn5ES3E5OThsQjM4RlkiIlV4V3h9aUZodF84RjB6KGZQZyhlWVdJJCM5L1shME1mUCxdNmZSa3FsUVEvJmJGQEhZZmx0PlM/TDsoUWROQ2pncm1CJik9b1VpX2ooSzI7NiJ3S2RfNnY2MExqdTghJH58Zi9gN0AlMXMjTUZhLD0icDBDOHIpVlhGS3pQXjlacjVEfUU3''@;'; put 'put ''PTtxLGtDI0pCb1ZJYiNKW1kiUlNaejciVEJ9KGF5VClQNCQ3XWcuN0M8M0JCQWdkdiU0fmowNnB3IU9GfCxPejdqSGRLKE5UYWhpODhqRGY2JTZyWlJQWCNlMCtrfWBwV09OTnBnJVE5JmpIQ3J8czVhIXQqN258ZT14dC9RPjQhdGMlO198YHVVaGJwQyksSTx9KTNVUn17SGB6TT5JfE04JFFR''@;'; put 'put ''OW5ue3pzPSM9WnZDViM7SDd1aigoNGlRdHVWa3k/WFZMNm8vbGQ8c15RdEF+UlJeWXkkR2JMdD5VRX0odkBNL3plOn5oXW5ePn5BdiNnNTNVK0B6XzJfc008MHg8NC5PNVhAMUZaIjRXQiNua1I0ez1lITo6NU0mR0MpSFFmTE0pNHJUXUM+RHdwdFghT18keUBkOmxsU3ZxVlNuanxMWX07JVhE''@;'; put 'put ''ZVNYOWA1QHcoVl9qWnwrTmZoRS4mVHEvPUB9OFgwL0RUYHV0PSlnQmhVd3o/ayZjOTZ6fj9MKmoiL01tYj8xJDRgdGA1TyJpblBYUHg8ZWwpU2hRPTdSZHo/b3dzIzJHJkt0U3YlZVhHZUQ9PDZoYSN8bWxyKUc/QEdJb145UnF6WVh5blF0RlZuOmlAK20ha3Z2bmBjLiI2XmV6M25remNqMitl''@;'; put 'put ''KSFPcV5KTzZhUFVuOGhQYCIwP0c7UVAkNFVYbldjaGs9Wj5qKHRLLFFJbkd6a3RoQiFkcVJ5fj49RzV+Llp0cGxaZVhSWHgvNlBPcGJdWl5YP2o3UF9yOH03LGxiNj5HYTZya3hqZDA/dG5rIWZaPkprNyxWPT5LOl5DL09vfGN1XXMhVC5kOGxyPllGQ14/MDd2VjlyW35PP2lSUk1FcnUjSkFo''@;'; put 'put ''VlhHNFBrMU9wLzgjOk4+LDRUfXxHInsqX1VLTWc3bEhCdzQoJHptTzNISW49dSx6NH5UQE1NbHV1WSE9cWw2JXpqcXsvJkUoaUx7bmxOWz8/RnV2ZUJOfWZsflYjcHZbJXtSYE1afnt2ImZFPXRqNEpadHc9WHd5O1dIKiFhSSZaclImclBdUS88Y3gqNCxaU2MwLkM0WTAlWTJ1bFNrWUV7ZChJ''@;'; put 'put ''LjNGPi92LiQjM0ErIio0U3JIek4rX19jJVo1cmpdWCNxd2dNUWBCY1NXazY2JElwek17eSxuPDx9K2xhQXFTb3kuQSFBdz1zfkl3PlcoQnc3Z097PUAoJSRaMyo5ZnIpPCVFR0poemdOT3B3M3wxXyNpS1B4fTRIOUZ+OW9ucU1YSDRjXTU5SWo2OUNddHsxfFVGal0xUU0oNHBSeFA4PEthMVMh''@;'; put 'put ''dDA6LGA4Z294fE9EQ3dSfksmckgjRW5pYWB4ekhzRU5BYXQmUkF4TyZIdCFob1NLKEcyI0oqe2xtQnNIMGd3X0I2NyJBZT54MjpPK35mI3E3dG1ITHA9ZnIxaTg2dj98NjN1bl9BN3Q0NnxQdlMpSjFDKlYqVCpxXyRbNX59W3JlcUVHcEF2d01bU0FiXUZnOnt5U2siODpKYm5Sfm9tMlAyNigo''@;'; put 'put ''fD5TTGgkM3wwPiZGRDtCSXpbMVNjby9rWmtAPlZ1SCxKZkkzYHJoUigrTlNwUlJ7S0tnQzgrSCRRJnRpYVp2SW5tfDVxM20+RkkwenxHRVtCeyFNWHBRSkh7NkshekRRVV1gQ1ttbXZidm81dD03VHxqa01bPXtQYytKcmJZaTxAPDg9cXBoZWZdJl9+fTp2b2YuTkopOUgzNnlEQCtZfnM/eCl7''@;'; put 'put ''MDI+Z3ZkMj4xfEZrWltJSTU6WyV0UipaPSJAKjUoRz42WSRUP1liMSl0ZjlaKSQ0OXBMOllXaEJ0Zy4rS3VlTGE7bjNfRVRUTl8mVCF0Z01YO1Z6RS52KntORER6S3V5WnlSckxAeTxzfEJWYHFHcF8rVFosXVNtRlNOQ3cpamw0aEtfU1YpOyJ8IThwRH5dVkk0Z1sqKVZaaVlKMWUxbU0pe0Z2''@;'; put 'put ''b0p9LD8zWiNgJjNUQUsiQXpeaVZ0MnBTfXskOTQxNTtIVWZoUmYjWih4Wk8sRiM5ZlMjeyFIJnpELy57JnByPW16eWhqfEZsLCtzcDV5P3NZLzsreVcxOWwlPmpndmslQz81Z14lU28oL1dVOHRfX35lM1JFQHx3Lik5cDxrVERzVHZSQj1AJmV5fD5udDlxdGRDcHBIbkhKYmcvPzcxVGIhTDwk''@;'; put 'put ''XU8yQ3d6b0w3ZEFvJGFHQU0zI1lKcn54RVpLYUg7P2xIZS84QmshQGZIY25gXTxbKWFBVm50ViFHL08iVjBmLGp5PkpWRmVIZHs8NV9qeF1JX14xfSo4MnQ/a3tIRm5Eeih0LzApSGBqRSJrTC9VSTBfSylMTEZiLkxmfjF9RmsuMXJVW0RvUVU+d3BxZT0oZDF0LjBZYVJhLEBxMmpSfXBSSC9J''@;'; put 'put ''KGdMWTwuQnJPKnwjNF55ci5CQ0wxLEkuOlFuZylmT0xgTj4vWUopQiQhcDM9R05Udmt2LGJONm5Eai4kODE2Vm8ycjRVYkU5STd3I3g0dztaPW9CUX52RUNJXX1scCRmZVNIYStPS2o6S3k4PTk/LkQqVSkxKVpmKF84a2tlbnBLSjlVJnZpMGN0bmk8Nnx5ZDc6Y3ZDYSRFV3Y7MjUsZj9OUTRm''@;'; put 'put ''VDRKalQvYE57LnNHKylTQmMyV258Xm5eWGlaQmd4LC9vR1VKWWFnR1VANzxOfXYoa2RlemZgW0FoKl5uM3gxdGl1QmkoTnJHeE0qb14hdUM/OkI5QSUqQ2MqNS92aylYZ15aWjUoMjBCbio2KUlNNio6XkNTYyZYJS94KE5pbytAZCZIdCh9JkV0PVdqT3ssW1E/PX5fazZAK1pJVFYvJl1sY21o''@;'; put 'put ''bjImOFl3LnsqfTtqVU5gXT1xZWVoLiNdNXZQdSViJThddTxvQF4uW280OTZMK3xeKV5YfmVUJCtZJGVObU98fGMsdjEqL08mKGgsL01JNClxWVcsJmpOPWdbZ0VRU0JldS9rPnxxXTYyPDt7T1JUW3o8c3w2ME1hST5lbGlwfkFvN1p0eHc/SXxMeSVYdHBDJGdoSCtkSyhXRlpLUGU0Vkl3PVZX''@;'; put 'put ''Y0dkN3B3a1M4TDVrT2t8PVMrZSN4V3FYbio6cS5iJX4sIWJQMDxET0NEWmVCUDhLJCJXVXh3IkwzVD08P1Y+eSwpeD1JMSY+XlM7UiJ3Z1YiQyZRYV1KTT52RDdoR352SHM0O3hkIlArelkpW20jPXVDNVB9JVNySDhmaCpbXzxDKGJpK19Ye0lfJX5FO3d9X1IoQ1spXVdDXlpRMi8+YUVgKCNr''@;'; put 'put ''ISlCPmVhPG0zU0l9OzteLFRoLFckcyVUdFJ9N1lAQ3VJdy9LZD8wQylULzdbaW9oeW1WNzkuek5vQXN7TCN3Oj9sPnBlPUJETEA6OzIlTHY3NVQ3ZzUuXyVwJSlLXmcrUEBUdDw2V2hhTHhYTThbLypySjVkeC5Zfi92Qkk+MlsxYiRUalFTWipHLGxYKCZrdkBdZHcyLFQ7MV1hOnBHQ1FZT3tg''@;'; put 'put ''diE5cCxTUDF5fFdQaC8vaEsqI0RwTVIpanY8Vy9HeFUyKmh0RUhUSThzajRPPjpkWCVScSZzY2whOVsqQF09O00zeSpCayE9O2wmTW1mfDw0bWRTYklMT0RmOSJoWF9IUjJBd3x4cjQsbT5fLlIvMGNYX2lwI2cpQFRNVV9HYnZnX0pDdGQxKy9wZmRUPn1qQnVTZF9BKCQ/Lz0mayhHVzQ6S3Uq''@;'; put 'put ''cygrTUtOKWBbdyEmKGcpeVN7IXdZUEgkeEJJb3IsTys1N1o3IjdNakFTMG9GRGg/WVY1PnY5cjZ8N3JsLClbOlV4PGYjKylUWl0lNnVqOEJFLipUOW0wKXF2Q0dvaWNfSGsrKUp0TD5NbVdMPDhTLy52M2JiJnB0RklUbzhkemkuXjlEImwlLmBTVFZWTkVUWXJVWHEoeWBUQ1ZxVCZEakZadzxf''@;'; put 'put ''QjdNVUdQLzhfQEJFZCtSfChCTUxqfGJ7a0BfMyp6PGpwd0o/TC9YaWcpNFNGMTAwdEBjTj1ZZ3A+d2t0bzRmeiw4RHMlZnw8bGBEOyouYkNqVlA1IShpWDg4eV5HczQmREw8cXEiX3E2aD08d1gpZjMqLFJ8IkdPbF5BYW9FY1UkaixyXUcoXVtjW3EsYEsyOnM7eE5dP3syX1p0WCwza15NbWFq''@;'; put 'put ''cWFmRHlnNmI5Z3BqV1NnbmkiIkErLzZvZ10xOWFqcCpDI3MlLFY1P0skak54PF8oYnRlYHxmUktSXUsiPnBWTlFOUDNzMXlaOmV6aHN3LmZwJDAwW2JZYXI7d3hkMmIxTy5oT2pZbWssdmhiXmA4MlJfdGQ0UjlYQmltTUZ8KHBoYVAjcTM4XipbSXhZNn5hPypkIWBQeyQkMyssJGQzeV5fLCsl''@;'; put 'put ''dVpVWVIwO2dFRFlrJGkrSHh8em9zM2M9Jj9tYWl3SVYhUktVJVFoInNGaFRJPS8zMkomNHxbRStQal5gODgsbHY0fmNnRixAYCV7eyVfbGQ6Yj1JQCo7IiFvcVpqXj07IVhdfD1DRyNGV19NO2xueWMsYCR+PWdNaSQmNTh1cXJMK19xVF0jZyl0bWJGSWdiRiExfk8/XipJKDgwTCRUMjlZTCU9''@;'; put 'put ''eS5+eXV7KFlwWz5DT0l2N2Q9LzdpckxEVmkiZygqVVo7I0lGSFYvPEFydkF6IXxIeSpZSUdPcGR8KnllbjooaWpHTmxdfmljfHJfeShURDQxK102RHc7NkJSb01IZVZyP3lLVVVIdyV6Nzs0TERfXkZIRE1WLkVIcypkailUW3pEQlZpVGJqOCZKVD9GP2FDLEU0MWR2UHRtLlUsRyhpZko2T1Rs''@;'; put 'put ''eDw2TTFhak4/dkhocCl5ayshVzRuSFZYeFtOMTJ7Ym42MWdYUmM2NUVUSitjaCtfSmhUPGdyPUAxMGJMeUg+dFA6dHw5R0VEOSpROCt7L0FdZVtqJVs5Ol1WMVNqSkJQQCRySERpJmdULlRuciYrWjlyZ3p9VEBGOGJIeTZlTEhiZF4sa2clK3pAYy82QmtUbmVSS01xUkteQEtfNGx2N3A4JndX''@;'; put 'put ''V09TZzsxKylya1RYJl9gOTZ+ZFIjW0ZCXm8ieEdHYFk2cGsmLjNWRX5FNCxOUUVbWXhlezRwX20qZ3gye1FVNHdQSGM7fm5fYWhsQz1wSXhxOyssan1jLmxpez0iTiQ6cXg1PUZJQHJZN1JpZHVXcU0sKy47Vl18TTJ1MiNISDFnZ013XlVWOSFER3ZicUJXVyp7RFJ7biZ8UzppZWkjXUVUaEZd''@;'; put 'put ''N0dCRHRHWVFpZSteenk+PX1eLiJDM3Y+dm5qYV0kVE1+TFp6UUBkJEpwVGk1XkRzQ0VFfVpHcGhRIVNlUT9XfnAyfTV6YWtCW0x1ai5BMStYP19dInMycy9hYE9gJU9IQCx6Wzg2NlhTW1VrZEd4XzA/Wng8QiN6cTBWKDYiW1BXPnc1OCFRWzh2dF5EK1MuIVgkYSpFSHt6VDB0ISY1PmVLSkpm''@;'; put 'put ''ZVVwOkJQMmY9WHlaODtJRlspUyp5KjpDTld8cyQ2fElKRnkofmBQY2chZjV6cDFHdmU4IytITkVIZSV6djFxTSRAPUA8MzRQKEdpO0VXdjVMIjxjL0xRZDReND46WC9wOVl+SGZzckNbVmw5cnNESTJ8fTFiY2M9N1k0WW46bD08ZXBPPmZqNEUqR2wyWDVwR21kSjhDWkJ7U3dsPnl5e24rMWEu''@;'; put 'put ''cHMvImU2Z1ZqanYrczQlY3F3R2sxKmJuNzwkUnR3cVs1aV1+bDFMQmgwdDZwdV1+bWNHMFJ4aXdZZShPT1p3UlFFVmJAbCRyfTQkKCg+aFtFSzN5S3t7Qml3RyQ0Vnw6KEc9P10uPDRxVixidjV+aTwmaWNOMlVEUFFuTyZ7Q3pxW2IlOz1pU0Uwd0k/YT8vIVNDT19UWDRBd1NNTTlhJXoiKkdd''@;'; put 'put ''QmxaYEU+MDU+NXAkWGtuZWl4eExefFFEPzFVOm5VO35bT3p7QW1eakdgSGx2Mi87dCU6bXlSaVBzOWZzeF9hcUwhbCRIe2R6XVM0MGRxJC5DYkpZTFVUWypCPFkoKnwxKEZIRk1obFZjfkRAOHp7NWx0W0R8KF0oVjplPFFGdG1GcHtQYHFfJElfZSsvYEhIdV9qQUNxZk4uayFYd0dWaTYqVEYq''@;'; put 'put ''VHVrSkdmL0gzLGFvQk9CXlBBOjdwKz5xRWRvVk0mP2IiWDdCIUArPHkoSGRuRz01a1EhOm9HNiQvdltAMTpHeXE+UDlMbiNPMlJVOTEme30rRXF9fGd6Uj9rdjFHNyxWUGQvQj90dCM4InM3djE4IzJhW19NZExoeDx7Ol9oV11JSzNaMHkrJmE/MjxuRCxXOUBoSVs9UEZvWTRZbSIvVThXYUtU''@;'; put 'put ''bmJvfitrdnFZNjgyTy5XKXZNc0xXQlROQ0lpLz1YPC51S2xmeT8lNyZvOnI9ZHN+WWFyJDkrTGF6elROX3JwI01vaWNpRFV5ViNAOyR3VHUwWHRZe1lVNGFaVXlsW30uSFg8TnNpLlZnR0x6bkdEQC5jU3pFWEZHTl4hVHZTPzVQbml0O0w6ZyJySTBQaX5CaixiPTluXUpMNm89Iy9teWExaWZW''@;'; put 'put ''OmZaMHk2P2VPN3xaQ3JqKjhPI05NXnk8a0teM1ViZERpOldCSXcuQHlzbCRCRV5Zb2FbRTo8MkI/UHpgdzYsUU5JMWJpczQ+ZHN5fUluO1gvLGt7UDt3KX0kNWp+MmNlYVh+aGxXZ3whU0QsUUBpeVU3dDx2fj5fYDgvcTZdWjg8IURjPGU+dXZPJDk7T0ZPTEo1c2MqbGVFJW9hejwxaSpwXXtP''@;'; put 'put ''RjZNQCU2UGY4V3NMPkVJTjV4Z3dyMz9bWXFacVQ3Si51NXwoW3E7USxoW0wyaWZpcnBAZXZtXVRyWXJ5d3laTjI3OktCRVFlND5wZjhRQlFLU0hoQl5dT0MzUjo6b1o+WUE6JW9DUT4wYXp5bi9dIm01fHdaTlA+YmlIZUhgVkpibz8sNH1aVHR6enU/UTJwWHlRUyhxfHd+YH4xTD9EYnFFIiV3''@;'; put 'put ''KCE/enJ5fEk+d1EmVTk2OS4/fEJReC9YcCtDWVkhMzArNFpSOH43RTAsRD9pWylbZWZBW25xZjVdUSQpZShTTU9VfiZMPjMiOUtkVC8ha1FZT3BXUng2ZDReVFgsX1plSFhwT10pfj5NbztQSyQwUUt4L2Q0aGxQcXRHcVpLamI8LzY4RCwrTSQ7R1A/dEZVc2NXdXZSMjBqUmV2WCZKUlg4U2ku''@;'; put 'put ''d1MxaG9pZ1taL11Bcm8vPHNGX1pOOE4rPTtFRmhzVC9DTzh+QXclKGEhKDlqVzkqWXI/bXVOUypgYSYrR3hmWmtgRHJaLFpRITV3KHtDezRHTkk1X0g7fFFJWiF2VVpxX1pnRE9VJTlOdCFKPntlZlQlfWExcGYwX3w1RFlpS1d+OyhOYD1TZWJtKX1jUDoqUnJpRVZiTFZGREY3blh4MiZiQCla''@;'; put 'put ''fFUvYW9hLH5+OGg3WyJiV3dLTmNAQm8+Rjwqd0BQLj5TNVs4RTE7Ljw+TigwemFJKF00eD1Nekx4djFjNU0iY1R9PHdPTWZ4RUdxLmF5eVtuKmx1OClTX3dHa0MocWFWQUUyfEooKkZyOjs4eF0xekBEOmE8bFlKYnJqX0tiOD58SEJvbWRpYXNnNmRXbzokMmZhNHJITSkrTnxCdHJaNkcjczk3''@;'; put 'put ''JnAoT19fdSIyL2Y+dkN8Z1MqWXZsdXFxdEVYXSF0cXQpbFpXPTFLS2JYNjNRYSgvZy8/KCVzMHFUfUFWO0xvd3w+R0Urcy5ZJkhJaWdkP21aTF9ddVU6Wmk+ZkY1KDl6dk05O1taNzU5Sn0vRCt3fmVKIUFnNyE/LjRJUVBnVmt0RHplVVVgYk03Z1dyIjY/cVoxeD5FZUU9PWFmZWQicz5hYWxY''@;'; put 'put ''NXcwfE5scyIrOGFWYTdwN2MufiokcFt1TkVeX101LjUvbTpdaTZ+T3JxU3UrPk19JSJDMyhLXlQ8fnwraEosZEtEbigrY3FBWm9weyZFNTQ7ZUg/fkp0RTB7RyQkY1EzXj4+QncuLitGY31WYWYydzBJVC9mTnRTWHM0XVE5TUJtOCJIRiZzanV7M11XIWEucSJSVWRLVnNdVGcuNFNwNU0vSmpF''@;'; put 'put ''U102ejZmQ2MlKiYzL2U1b1o5Qn48KS84R2Qib2I/QDlwc1IyMDU6P3dRQElBfCMjcy49fiI3eGIhXlVDI31fTnc9STw3fiJVd0BmTG98R3lbcmUzVG1mZnw6RDFFWX06aUs7X1tOIlEzPjExamlWPXR2YypUIXRpbS9FdzdmIUQlI04lSmdGSGR0NGxjYFlqOkk/JFJYfjF6cns3KEs5KUB0YktD''@;'; put 'put ''LCVjO11najAhJls/I2gyeGV+Y1ZQTWQ2bzN7UmJXYE53anw+R0B4RGd7VVlRVVsxT186fCxoRWVuRjR4NUUkaVtFd1FFIzQ0R1JXUHBBLGVXMD02UVZoOWhtaEl9XzEyQCV8ZStsN19AdypdS3suIVF9Mk95UCNyS2MjZGRQMjJYU3BabjF1cWNFUy5jUUhQdENZT0YjRDZkYTJyeCgwNlBhSVFU''@;'; put 'put ''X2d+TntYO3VNdmVVJilUcD48L3Z5Rl9MS0Vmeio0RiVCR0FrOiVFRzVMdF97LDN3KzImbkxfZiouLn19T0lAcyFodjVBalF9emlgYDFYck0uVT98MjVgY35IeU5KalNsSDpxZWVMaTxJXU1pdUhodnBvMSpHYjdQUkwzdndFODdZYXV0YWh8WEhYQVk6O2hoU3g8Tmx4fENLOkQ0STRGLEBDeWY+''@;'; put 'put ''MU4zZFc2W0hILnVCRkdtMig0XnsjO14kOVtoU198cV0xI0duNTRGQkYuWjdXO0JrTVE6O19GQTwrJSE6M3FsT2lIYjxHUC5nIyluVlslWUphSXwmO0FRMSUjQChuZmU7Q0p4clAmdTw6Qn5GUWw3Plh8ajtpRChBd0ZWSVR0K3NXaUMwUGJwN1NASF56NTw7L3Y7WjR+SGtffU0iKyhJNG1gXiQ9''@;'; put 'put ''IUJvNTMufUslSmpYTjxMe3IkPWtVPFVwIyowSWBmYyhrNzkhdnd1Wzo3ZTFWVGhzSiRGKTs1VnxRPSZ5ajNaVjtzaF87Pzd9fHdjaVd7OGwjSC5FLnpOc0kqOm9OTG4vYSIxJWFCa25hQSUvUno9LFk9Pzh0NT10V1I9PShEW3JXbV06KlgzdzUqP25YVX0zKXxgYSFGPTIpN1c2P0p0RFBmczE3''@;'; put 'put ''YXhEaFAlKCg4ZFg9U1BYT0t4U01KaVovemNyR14oMzc+MnpSbyI8QDcuX2NFb3kiWm9AJl1KbyViV081YFhOTUhGYFted0xkUWg0SHBjbTM8KHVWOTxqeyx7aXY0VFhWP2FCYHs9RktQZllQLyxXMXxrZjZrPnAhciZ7aVFwP0R1cD1oPUUhVTIiaTw+NzV3NDo7JFhKLHRdaW0scGVYNkV4TX4r''@;'; put 'put ''UT5Zal9EZWpRa1pMVE4sTUtfe3JQMHpqPT96bXt4Z3Y1X19DOjp0WGx7a0dBTzVIKzVJanhQZG5yXko6MHs+Zy46L1ZdZEVAUCkzUnNlTlhXVjV1OCQyT1VtfXU0TEhJIS5GTS80aEchLHdXRlYvbFc8fXhMY0ZEWyF1YDgoUTJ9SlJCJm95TGo2JDo+IldoU28qUUJwZjBxR1E/TkA8T3VQWVk1''@;'; put 'put ''Ojc9JUBsaDk9JWgzblh+O15rMzlaKkczc105TzJbYyZyW29IMSxhVVBabGUvSSJEeVZXJUBjTDI/TDkvQHQ6PlN8djNDfmAhaS84MyNISTxBW1lfNypCZi5qe25qSnBgbT5DcVRNIT81ZmQiY14zbk5bV2NqVlZ9RnAhOD0uR0gqeDI+U245YD1lN3paL2pNWlV5fkBiSl1wNSZidmNwSCR1NVtR''@;'; put 'put ''Pl1XTz5ibVN5KDA+M2paMDhCRTpeNWIzLGRvKUw/IXt8TFEycjQlJEg7K3VHYEghTSVbNn1id1A5Qndockg8TiMjVEZGQW1AckwzKy4rK0RyZVE3P2p0SW9kOD5HNWRlTyh3Mld0SXxQPDAzXz9WPlNSXn43T2VRZ349V1g3S2UrX0B+SXI4aWIrJUkwPVdZJCRaLksqQCo7JUAwbVtRNXlzQEpn''@;'; put 'put ''ZTs5aVR1SXRpYl0hLGg6VC5vMjtQcHE/KDN5SGQoJH51eTdjNG4qOF9bb3hFbnIhc3wlaF1GR013dXZ3RGtRPD0vYSI1aiRqOzJjamZ4PDhmSGJWNDooUX1UdllkSkM7VEs+QyFvWyFGfDxwUkw1TWVqTihAZDJlWmY9eTteWmEuPSU7Nyg1KUJuc35qRXhlKUt+R1FmLnZ3NEpMP1tmNW9STm1M''@;'; put 'put ''L05gRkJDaW92clV2cFRTcHovZzF4dV1jXUk0MXp0MEBNJn0vMHhGSyRSZjR+UXtuTEBKbilvUkpwLiZBdHwqOElFWnBmS0lIZ3teLElEKzNZOHh5IV5gdlp9aj5fUSEhWUlZKk8vdlVrTjxnMV1pIU5GbnMuNTEzbWtNRVMvazwvQ0dkNyNTeGs2ZTU7RWs7Pj8yfiNMRD5xNyRdMUxjUTNPe2BB''@;'; put 'put ''Wnp4RiljI2k3U3YlV0ooR0M4IUBzRlNDMCJYKVklVSZIdmFpalBaOCVjPCxpa3skKH1eLDxQNDlAYiolYnJ8Xz5XdE1OeVEqdmMjSVBSYjlJTCUiKltmT21CbnB8SDZPSXoxR1l5OUZhZFdDSlpPYkZmU250WC8mTSNveDk8SFYwMkw+Zzg7ZUB5Qmk7Q2RTRGNoQTdeKDcmKGVZME82QzE9Ikpq''@;'; put 'put ''X0cmcipYWSpebjQqKEp2ayRERjBpO1I+fCFaRCZiZTV1QFFSMDB1WFdaWThVWk8xMl1ISSZ6c3FqfG9KKytDbDk+bTg3RUs+emZzaHlCbFJYI2F4UHcyfTlEYEhHemI1Q2JjVj0qMmU6KUdXfn43SVNJTVZicEV4IVRYTUk2MzRafitXJUBqVWtCbTI7JFZGVzpvaiRgfSFITDsweE9dX1guMHtR''@;'; put 'put ''MEQ3fUVROWFpYXxkU0Fme2d0Z3h7fnVfSHBTVTNJSC94Y1YlZmVBV0NgYHB9OCJLSVNzVmp6bTBZZ057VUNkJDxnLmZXN340ZVVKW2Q2ZHxQImxxcGhnN3A/OSFmX1hBdnBjcHlTUVZlK2pdbyg7dFl6IVEwY3tGSzpgUnUkQnN5dERtbnlZRDsuLkZ4TG44ZFdjX01gb3Z0NFksal9ZbklQMjxM''@;'; put 'put ''Uj5oaUM3Wjk9SVFhRCQ6ZFssV2BtTzhdYj1IPGhJNEwqY2JGdywoKmohOE9tNEBtfilIaE4/Ml5Yb1ZjQzpvNl8oN1cuUnJ6UzlkLj9te2B7RkxSL0MvJD1MeE1oaHYqRGlAWF9iXyRhVTMmVXsoL1hTWHU8KHAwZWV7UHQ2VDlDUyJaNm1jdGVeOy93UUtNTmh1JiMpfEVhSlpPemlmRDRqWFRn''@;'; put 'put ''Pyl+fUpIaHUlXmJ2RkFSP114TSx8XzdGPWR+QjlffWRVQUM2a01HZk1GZy5DdmBeby5Uczc0N1g1c1BTJTBKdnJYb0VBKDQsNjFec25VRndsIzNYRVhnVnBLKVJIZkA7NlFkVSNlM2dsYyYrLEohWzZnVUokRUBkVTQkQ2k3PFA4Lz1JaXg9ezFXbS9oUHtRWC9NSVgrXkhxa2hWM3d8NV5xYDIw''@;'; put 'put ''UW0hb0tUQjlVd1UreCN5am51eDBHO0FzYlV0b0BHeFFwYUc9enRkemtbKHxRajsjMF0vdiZoZkM/TVg3ZV1xM29PIn0vQlQ4YntSZU5kKX1iaGpBdEEiI1Vwc35SSF1ga0YqSGJSezlaJTpEZSYoa0B9P2IxL1lEfExXfSVOI0xdR0ByZm5oSXJ6QEl5Zjlwek9FaVtPPHFyeXZqY2d5Ok5KTjxx''@;'; put 'put ''cEhIfTUzMFEyIWtxZzRHY31icXEweXBzW35eR2c9Kit2Tm1YJllSfiNAUXN2dHMoODtrLklWNTRQWUsyOTgsPWtgIT9WfFZ6Vz9YYTszNH1ALFszQ2ZTekwxcWFrLzZ4PSVAfFAjek43LnJVRlRRPjtNayt7S2NgPywsTzN2fmZjaD1tdG9GQz5yNV87VjlKVmh9U1l2JEw5X3VUJl9bSj4qe1p6''@;'; put 'put ''T216SXQrJTxUNmheJEtOZiJrJCJNZHRWc2RDLiI2NGp1PigjeV05cUZWSDsidiN4YTxkWzNkKUA0TFplO0tDQzp9YTRnPnMsL3k+aVhLWksvQ2x4LENAbyU/OlkwcF5ybksqayJnQzUxVSs4cyFUQCRxT3BXd1ExKGhRLjQ3OFJ6PGBjPHFFaTJ7KFRxTkx5OTt8fiZWS3lxVzJEJTJFWnc+WjMh''@;'; put 'put ''YCxaOGJPTiF2NEF2K3VGOlJAMUE2TFQ6MHYxLm9jJGQjV0BrJFhmRlB9Szl1YGZGXjdjaG5VQCs3WmU2Z3VFbykvTmI5N2QxQjghMDBmKFtJM0JWMUVkbCg7RjxpO1c7Q1c2XjxjbnNJR2kkX0tgJl5LSFlqTTZgc21lU2hdbSQwS2E0SD1oeX5QcUR6eTRgZ2JkUyJYSVhmSiIyPT5bdGFgLD1J''@;'; put 'put ''SHpJb1JOPkY0bz8zREI8XWhJTFF3Lm1JP0pOWUI1dj14WmdXOyI7NDlGXz5fV1poeWtWeH1WOm8+aUN5akN3T3M1SytgMD5DWiQuRFpkQEQ7eHliPUJiMVlwaitVWT9GYFIwfU0lITNTW1EsdlZLUmFvYnp9MSglNCQ9VmcwTkQvSyZlKHMueDxKJF1BYFthQT9IIiFHIW17KnVxNUZTQEZkSks2''@;'; put 'put ''TCxQZDpJTDRHV2ovdVAlRCg5Rk40V1hOLFJmNjRRNjB6PUNaRjZ0Z35URHRkanJAdzxIeDo0cn02YlpYc2NTR2w1XiRVVC9RUXxqa2NTR0BHR15qO1hhKEkwZ1F7flArMjREQjVBWlAqfn5DLmZ6R1JtI1MpZjU+Plc+Lnx7WkdyNylKTGF2I2ZJfVM3MUA/Q0pCU1pMSmo5MTQkfiNEdig2Tzpr''@;'; put 'put ''O0YzOHVHb1J0Z0lZK0hlX0tPdUYoLiZWc2t5fjBJX3pkRTA+ZFVAOz1ZbC5OWil6UmM6TFVyXVdfV1NUVkNjVCE0TlU/MDhwRzNhRERUemooYWFsOGQ6VVo2RGtjQCgyKDRUVD83PDgsPWkzZj90PUdsTHJpM2NJV01uR0JjQXVpfkdAISgpP11ibE1QZW59Rl17LkFfTTEqMSI8MExaYlI/Xjpf''@;'; put 'put ''NTxWQXR6VzlLLntMZD0mM3RsJFBxZG8uQlpVdkNZMVBaX3twei5FU3pjWThtclRENiZyWT16dH5qUWU/RSZkfW9AdHFjN2YvYWQzby9XZVg5VkEsfWtaKWlZWWxHb1BfITo4W3F1d00/aG8me2AoRiFpcFd9XUpIO2oxPVpoLjFgIiFIJkZZXlopJD5fKVV5ZFZQP1RmbVRNbWoxczciZHd5JDJQ''@;'; put 'put ''TT4ifVRTTiVjJT5SRFB3UFldT3hfZjBFPjRCU1VUPEpqJSJ+ZE51ajdkNWJBSUluM0AheTtibGQpfUMpMX5jVV9YeURAVE13X19yeGA8cyh4UEtwM2A5QDh1Vz9HckE4dj9KYT1CJDdzQm1ncmUpWyl1KjQxPj1wMzBLJjE1JTR5S0B0KUguNGI8eWs5THZ9JlUpYmRYR1Nfbkh5U35CRT1pTEgi''@;'; put 'put ''PnA3fDcieSxYbVppPiE8eiwucnErZUU6eVRWbEY7b3VtfT4kXXVEe3EmQF1oRXBRa1g1dzVSSkRGfGVGPUc1Q3hObSElUmEiLGJDaGFGZypiJnlfVk54REhvYG4iancuNTp5O045akJ6dkJxX3ZhNGxdRygoUX1WfTR3Syo2OkV7SDBPeGJDTz5IRDtnMTt6fHlhPTAqIVhmUEkpSz47Z0VmMEVR''@;'; put 'put ''c2hHdlFSbiMmbSNaXXtfRlY/XkxfVWIjRyFZQ0o0aGlNblI0Wkd1Y3JVMCNWO0BoSENATFQ7ezEkLzxzRXVvaXJedmc5KyRrJENaKlVMYHZPe3NhTWZXdlB6Yzh9ZXNGSnd8RD1RIzVFfkpeeWxUVHZCREhAQW9PW3VaeHdZWHZKal98WnJHTk8kTzl4d31KU2JGXTJgVyRYbkxsI15memZ6d0d0''@;'; put 'put ''QldEITk/VFNUVkdVfjRpXUQlb0Upey5TbnpdLHskRChGfiVnOTlxY2FjKXtbKDA1PjE3RklCZntoQDQqcW1PViNxbU5yeitDfER3IngoeiQ1emw1YUsmNWZmdlIkPDpIPU1+b2UyMXRwYGEweiZxWGM+UHc2YzNscTwidnVaanUofW8xQno9ZnE1KmxEX1dOVjBjLk12SF8/YUlVZH5lOSV7MUVC''@;'; put 'put ''I0Q3WGJBMWNqbG4wXkQmS2IzOVh4L2E0R30uT0g+fDJaWV1OWDtedyYhPUVfISpiKkIjIigyMV1CSypbQXVvcWUxMiYlYVBCQFdOVk4yKGosQHphWUBWVm5JZ1pUcnRdJktbWWdCZDxZX1o5OEN2KyFYLChRPFJgTT8+Mmx7PmtDQG1sKUxQR2xLZDJLKT5gdnl5NU87YHw3QjlCeU9kUmpzLG9g''@;'; put 'put ''SkV3cGU0cGsoK0U5eUZYYl5uKyw/JStvbitbcWtWUm1TeiUubzt5bXBNKlkkbzZecExkRWI3QTVjcFRJVV55d2E1SURMajF3RHYuO3o6TFY/dmx4RVpIOFErT0RRWGIkXlJiPk1QSU5sVyY6fiNGV0FtXj9lP3MvSEd6dkp4QCooKk50eW5NeTNMRGRsclhPPlE+IWdRdytWQGYheEtIdWtZYFFt''@;'; put 'put ''VHpvWiVlaipofmJrVnFyfTBwOGlwfWQ4OzUkdCVIZG1tRDwlRkx5enRPK2F5fkYveXlgT3pISi9QbWY7N1BNYmoyI1gpaEQ8Y0whMmxzKUxGXV1ZP0g+RXdQTlV+T259OXNAaVg2Yzd9fEllezpsNl1rPkZTIlgwc0U3STxATFRPOltYWEVCVFBvWXZFc3hJdFZ3I3AyNilNJVtdb35hM1ldaDBn''@;'; put 'put ''eDtNdC4lZj9AXnMoeEk8LG9eMz1VX2ppLHJmejhie0oxTHJCPkJpSHUpeSI1Y3Y1SmZVZCNWXSltS1FBb2R8UUtrOzdaakhDYjAsLFRwen54KktgKiFvJHdoWVJbL3E8T0w3QSEhJWxaaXYxPm93fC93K3dBZVthUmQlciFYNEpJM1ZOc01wMm0mTShSPihFNnkmbDZPOlI9QWl3VnJmUHQoZFlK''@;'; put 'put ''YC99Rz4jfnFHMmw1YVt7MClxcHJFWkQubElsWys3L01WfTcqY3g5KTRHO088YTk7MDh0OzFNUk1gVjA7PWltOmw1S2hEQSVCcHVERkhVMiVKcGdIVUUlVnJ3WCt9MmFDZHxqN3J1OnVxPzJZSERFMGVOPklFU2Q3QDxja0crY29XMTlETCMrK0N7RUtNWnElOCFuIURLXXY6aTVVVDV6a3lrQ1dy''@;'; put 'put ''UHloaEZ+PSVdcit3YCV4SmRraSNjUntwYH59ZylSX3VNXnAwOVsoSUQuTEg1eCQyeEZDZGRCLlVaLl8zTXFVKHwqfS5OJk1kfHpyQnB8YWRFTGJdZEI5dUJMLig5bXx9PVtydm1ga1d3eF5gVlJsIzpjVi5wYDRTRTpybHU0U3ovUSppPyJsQzheSkFVI1dRMyFrW1loLz5hSUBgJkMkVENFWTZE''@;'; put 'put ''b1dFXSpvMXAuP0pmOUJwOUNtOCZoVXFIRVI2X15Ib3p0aUdBSkBXYCFJW2I6OSZOV248KFQ9Wm9eOGBBZGg0dlZvP0V8Sk5bbmhyTFtoIWwhZjVlbHIzemtnQHJ0YyIiM0FNYFJzIjc3JGp5IWVDd05EJTp9SFt0dHJ0UWBQe256cDJ3YDhhdzldaTFjakQyVFRsNDFDJTspPlBrckZLKWVaWzNz''@;'; put 'put ''cTUvMiREQC9mfSZ+fkJPQGw1UmxiW2RCL1MvYkwySCZIYnZCS1BIWiFLLmtwZCR6OzBrQEJjOyJlXy9eZHtuUTRlRSZ+WG5NUCskbzZJNCVuMDEvcXc/XnZNdWh2d0BnXUBwbT1YfEBCbSYiVXw7NFc/ZUY+bDV1QitseExeaXVKOlZ0WG1OKF1LbjkmKXhOc3NQVWE8dn1FVjtsXmMxNXQ0Tlk5''@;'; put 'put ''RT5IZVVtb11WU31gciUvZ01fLD09e253cGM2WEFHPn17VENnaSRfXXVlI01JK3x5SFF5TEhoW3NdUj5KYUxYO1p9LExOWExkLltlVSVIZjNCOSlHe2BWeUdQcX1QUXBleUomVWhaYzxLaD1tKjxMLHRoUFNnYDc5Ijd3VlV1fHZvZlgrVnBuWl13UElVJFl7OUddaWorTHB6UUx6T1BLIXt3S11t''@;'; put 'put ''MiwpLF8+RC9Eb1YrPFs3KGNFSE9sQHA5eGBfSXBybEZWMXx1THUoQS5NfDRFYnVDTFtwU1h4PVBLYyVmeHYjU25UNithJEhZLyJBdWJxUGtdRlJaVVVsSERFcSZGSDhVT3JjfVl+Vz9KajkkdkIvWWQ6KFgzPj4mdWU3RyQ/WjUpTXVufVZFTWI2Iis/Y1dyMTJRcWw+OFojOVliRStQb0pjM008''@;'; put 'put ''L0Uofm1weiVER0Y2NDp+ND8hNkdtOjNMMWU6eVh9LEBATnF+bW9QVyM0KENySGtxPElRU1BjaVlfVEhLYytGNlU9TS5WPHklVHtbei8jXndSJTlEalJucUJSZTNwTEVrMXFTblloQF1JYmtbU2tfPEVpVE53RVpSJk0+QiMpNXBSamUwNjxRRXNfLm1IWCRfYGAxZVJYdCQ/dHpAT0omUjo0am9S''@;'; put 'put ''dEVXKT9zUDpjcHolSHZ+WGFnVE9JWk1qPzBmcnxmSnt5akA7bHxeNyRKTzZLdnFWSzpsJTddK1UhW2V9MzRnYjJHOU85fiUkYXZhd043KGd3I0l3TC8oZCkwMWh4Jkx+QFFPNiUiNGdQP25JSXs+P2lMVVtYNnlPe0NmUC5KOndmLmskWCs3fV46Wyk9ZShYZDVJLFNkLzx0WS5SV10qL0VYLmcq''@;'; put 'put ''bkdgN0N3YFd2Qzp4cEZzVTJCTEwrSlAveTdYWWMsZ3hQbVErL3RVT0lka24lMD4odi87NkI7W1JHNjRNKDIleFdbImc2bSx6XmcqbV5oR0Y/IXZ8dnBkPWROVjhBM1tDYU5PVHY7YENnRV1xW2wuWzVMO3ZCWlQkS0w0O2lIantXOihrMWx5ZipjWUNeJjVPIlpHaUg4NlpAOWtFbWVnel93Sy5A''@;'; put 'put ''I2p0MGx8bnYqN1pHSnt7SzdTLG1hLEklfEd1N1g8PmEqYU84JDhsJDglPDY5JmlDR2tZIVQ5XylCZj1ibS9bfFR9U3MpZHIuSyN4blt7WkVnTX5OfmJkYCYuKUFlWlYhO1BAPFNpdHwod2U1aCNkZD1EPXNRbEVbfVg7WGUscXR3bGReJm86N0wvISgmM0VYanpsOkhjNkYvSH5GWWlDbTlxUCpA''@;'; put 'put ''L25bX08oJEtSJlRlMzJCSV0+UnhbOE1dJV5vS1dnLFg0M2Are1FaJTgqZ0pBS2gpT1U2OmElIVt6X3QpZ3tKWkowSjAkdkspanpvRXFWVFJ+I3JuQmF5YkIsREg/dUgvWnxbdDtjVXc2NyRCbEoxeSIkTF8+TVZnPlR0R2s3JHJSRHpCMU4iPndjbFZqQiFEPllYUjAhVWFLM3MrXjRKfEQ1THRF''@;'; put 'put ''eX4makglVENIZGpdMl1EIkx9UlVJKShJdnxkIigyKWluKm9hMElueCVBbyV6Pz5yeVIhX1o3T3d7Xz1RPzk3RS9NYUpEayp6ZlFbVzk4LCJxdiZUO08wKE5wPEY/MWt1flp9YWF8Si81SVpSNy5sSDhgOXxGT09yUiNMTHwmMkRVSzc0SWZsOWVQejZCZU45KkV6OnVHd102cWdAWGImKi98Q0wu''@;'; put 'put ''KzdFaiMvUWBILDJebnBDcUMhVkRSMl5fViRgNXhNPnRWL3tSd1JHP348Omk4YF9GWn05MCtvZyEmXWg3bHwibF8oRHp7cC4xWXNbaTFPakBxbFF3cHw4fCJuOHl8S2FuXzM/eXZ5NCU7YF8uN0xjTFtSKER+VVZiZVdCfiVeJH5VQllOMTtkWXYkOV5qcmRWNHRENlRKQXQ5WTJ8cEtQXUMmJksu''@;'; put 'put ''cUJtRm1HKXBIY04wI0VeJExVfGc4NCwsZXVMYyZVNCVwSGFmdlNDfCR7KDpkUXA3Sk5gPEZjMnx3clFIP09QVCsyNGlWZytxMCsmcTl0RnZ5K30rQkc2PFduayRmNHlmIUh7Yl9wO1VFUylLSFlEZm1LdXZ4MlVIYTRzWTc2PEtUPEVRZTloQTpzZTU1Mjx8QEl+cUZMV1I2KT5OYl0saTVLPHBx''@;'; put 'put ''Mj83UWZSbSkhfkhIM2ouYDZDPyZONCg/dSxWZk8rOUt7aDVFN0VMQWZ4UzxWI20/PjNZRmFSXitZRkQxZVdxU0smWnxiSmhwND0sLlBTZDhoRS5lO0dvWlNqLHtxPkY5X2xPe118SzlJayFLMy5mV25hQGplPSNwbnVQL0NrMyovT2ZyOV9CLnJXcVgvLjs8OHpvbSpMaiMsTkFuclI3WzRoRXxL''@;'; put 'put ''V2ZTZmU3V0JkRUdRPktlT1JaO08rS3c1fG86QSU8Mzp6V3hFYGNOMWB5OWhqZ3A0WDl6XlQrREBWR1JdJkY4XUZFbC5UTlJhcXdwJEpdYyZ0UTFAfj5oPyFWUjx+SW13QEd3UjMxKCRZKGArRiYzYF8lJCJ1IS9vLkRZa0NhTUphQmc+IkA+cjx0e1Q2eiFuWmY0JHN8WUheQkhiUCROZ0BDK3dk''@;'; put 'put ''ZG04I2RrXiUxWixXeV1ufmtmZyRAfT96Zmt6QGEkW2pec2FkTl11OEhscnx7Rjp3ZXQ2OGM4UlY7NltHfGxJdU9dLzc2IkplTEtEWiU9Pk0zRHl9SzJua3QwbE8zQGA8QCtVWE4zPHkje1tyPVN5MmUxO05yZ3tROGwrdEB9VmhJP00qbnFRKEQoInk9Wz1EIV1FaD1BU0IrSlAhalUsdW40PEV2''@;'; put 'put ''KCIpM0pESkxIc2RvO0MiK0dmUGNDe1NZLmVNPUA0T31tJnJVd15TelVLUio6TyoociZffUw6Rmx+aHc2b3xmdFRbTl53YFhnNXQ1XTc8dXtDdHluTiRpLE99KWt4LD10c2hgTDB0eE1AR0ZfczR3Oj0pcDdYckwueGArRDVSYnMxdntAJVs9fGpFK0ZVYyt0X3lOeE0wYEhyKm4oOWB3MjJKNlB3''@;'; put 'put ''eHYpOEIkdE8mbWk8USJUfUsvfn1nIT9HUVBLXS5CK3VYY1BzP2g1dTl0Ql0xUG8oJFpXQEN9Q2g/KV07SmwwYSlVP35VMnkmcVgvOXMmZDY5KzdOfSRvT15NIyw2I1E1PnwibDYrKmheVHk/Kz47Jn4kZCFOWUtTeVhLb3FffWlwbzBHVyJSRGooS3RhaSRBR2JRJGQjcFNfaTRQbk1hIW9LYnJI''@;'; put 'put ''SGtKI0VVZz9oLmZnendZfm9MMztRY086SzwpW1pecT5GREp1fmR9Z04wTDR2aXZJWipKbkV+ZTI3MWlFTyw3bl1wSSwqLC8+Y0paYm84QXVHQD05KVpLeCNbe0Q6I2N4VG9vJXxUSzBudC89K2t8WnBaUkhVY2w5R0h2VWVLRz86biQwMEhPQTxBXktjLj54dURtZ3RXKTUpNCldNGwkJCojP145''@;'; put 'put ''d0NreHBmPD9MU0FtZihpSDg9VGJzTkBiSyE6VypUPFErbllqaG5FPTl2SiM/cWhLOEVPUHJ0cmkzUzFXKko2R0hzYzJgMG1xYix6VFgvPW5QL2ZCbTY2Y1JGbU5ldHUpcyZjXVs/TVh5VFpQOVQ1ISlqV2dtRFcxJHRkLyk8fixASzR4aFk/Uyw1OF1dVFYlNj0wYTs9KCtBIihbJT91Llt1ZTZ9''@;'; put 'put ''ampFSTsrVWFxRFYrR2o4QVpsSDgrIyJeQ153PWdmd1hIaUxkYFhOWFJMbiZDWl5+eCJtd3ZdZktbOTpqYzF9QFYjVHwxOmxSRW9HOSU1M1RhejBIVHhBJGR5JDsoVDgxR3olRnxFdTVbMypLaTVGQ1R7azs5W1N3Jk1FKnU+cmdXP3ViLEZmRmwxd3RORmlYIX16dmZoQzlkPms2ZS8vOXhRaytG''@;'; put 'put ''XjU2UW1ZPClHM3kuXzRJeUZSUi51MEcxfDVDNm0xPVY4dDJaKGxxNmFlKiZqKypgW15hJWw8eW1rVCtKUndWeVU9WV9LelhZYD15Jj9PazxxdHEoKyFRJlEmN3lwWjBoeTNZcGBKIStrWyR7Xl1qSVp7ajR5SDQ4fW0xQ2EvbSNsMnV7JF80PngqeyEzYmFsPXs3dXc3dzhvdXM2WVV7YW9mdW5D''@;'; put 'put ''I1pYPXd+VSMiR3FmWGUqPlgpZHtxUHoyL0N2YiZ2YH1IKEJmMkw9cC49MX1ZQzRPSX5paGB6MjJmYmZbZyxRditPW18lMUxEKiVJTkwqbEcrYlB2TTxafj9pRDFATjE6PVE5YTV5byM/YClhXkMhSVVQPVdsbkI3JStZJmtBd1pOQy9Gckk4SSRFZjdCNHdiVGsmUThzOSUzIXlFO2NYYWB4LlA0''@;'; put 'put ''OzFSeSp8dFRfcXB4dDB0LiZJZXFlITNeWHxIPzpFIy4waHkkTClQKUZvbSxUfi5Rcm5jfE1aUUc1bz8uMDtwUGkmWCZ9KER+UzdROHVXOV9uQ0FjJHNZe013fk9tbjI4JHg5SmAlaF80Ky5ZeTlrKGNGbTt3ZitUXllMVmc/QGBtKyUlPTJyMTVvU3c6dCVVMXhYakFrekJ8LkorSjo4N20kSjsy''@;'; put 'put ''REc4bSxNSXIqW1FaYCNsdlMmNFQ/eD5rcl9STndKOkRLSHszVFQvY0g+TmJ5LnZfdFRXfXx4aElYIzhPY3JyLlpjNCghdkVsRSNqMTFwOUE2P19iZz89IUJFYkw/I003PkdPWXwxeGo7SDdlR28pJW8+cDZmU15KUT0qS3E/RlNTWURLO3suNHRYeVFTS00keXN8Ilske0huciRubV5AZC5gLGZ3''@;'; put 'put ''SHdyejBuOU8ick86Xno2PzV5SXIuQyV1ZG8heFBsTnwhR28xbHlJMS89RFVMZUBENWZuVV46MzlBOGJxREcxZ0tRXkBrU3UueWFAQWYxZE9Ce3FbIShnSTFPUU9CWERUSiZEbyxkeHkqUj12fk9sNiNHZjFwW3N4MkBQTVdiPXdmZ2JHSGxGL3NddWR5R1lJWTEueWQ0c0xYIzZZPGg9aGouUFdJ''@;'; put 'put ''fls7ailYUHNqcyQhXVZPeCMhZkl2YlliRTFZIStGbEhaPXtGN288Ii8xU1ZxITl8NTJXOz41LiVhREgpTTFNTD0oIl59NH11enRJXTRnS2c/NlNmVlcxP2BlOFZCSDwoWX5TK0wmX1p+YDVGTCxSTTQlXn1gPU9xVVFqJXZwNCQqQ1ZeYFI8fGpwbiFMUHsiWW1kY3U+Ni4wNmx+My89eHZALzBx''@;'; put 'put ''N0RmLmx8ZT06SD1PNm1ZdURlSXk1Xn1maVtVUVtkOklhcCIxQDxSQlgvZ0J5IXd7USslTXIrOyhhaDYlWGVzb28ob2F4e3ZOfVZ9UDdLPXk/ei8zPFoseyE7N34hb2hKWHkiUXJKaixfTjk8ImFJdjFoQjQ8ciJHRTV1IkQqeEN7JitoK3tdeGZfTE9nTShqSUA0SyV9anR9Kzg4QFVPWnhDfWMh''@;'; put 'put ''JWk1Zl4va101TXw9JmFYSytbJjZYPCY8WlhPR017fV49a2FQbG9dcEpjanBXeVJ7WngjbztQenRJejBJZDNENEE8O201e2Y6ajohPUd8b2B2RmlaKywhaikiQy44Vn1OQillbyx3c15dYERRT11ZKTwlPEo+O1JdUlV0byQzVzd2NSIoalkySCF4N044a1BFbU9LcGBWPl5mOkFyKj1LeH4uTVY6''@;'; put 'put ''S2diQGcud1dRaHRJXiFVZWlBeDpPTC50JFF4RlJXJC93bCRAQmhbTFJ5cj55YEEmI0goUVt1JjEkWFtNajlWb1ZUNTFaV2NgTmJbV1lkNnM3YllARUxVc0lTYUM+ey9+KSsreW1GPHBpW09eQmclbSEhPSpEcCJOOURQMSQjOE9DLCo1dGx3LzAjWClrY3IoLmYlbGlfX0tmfiZdVi9PSnRiUlVG''@;'; put 'put ''OHxdMUsmW2IzSz13eGNNTTIveiQ3LEhPREk3azxfdnRSaUR8ZCh4a0YuUURMTnc7YltaKXwiP357RiNPblRxc3xfNmYjWX1MRCojUnQwTkxta2c7ZnNDVzteJWtdaldYJXokVVBJRFNoJCoxZD9nVj03cC9uInZNVGl2THs8fWB3ZlFQX1YuW0tIXWtfbW5AJTA5MjA0ZXs5JXJXYTB4UGY8UypO''@;'; put 'put ''NjU7VTQ2RGxHZWosen45X24wOnVTP2UseGovPUlkXj9wWGE+LC90PjUrZ099TjtSQ095aCZTNnRQSUQjL0dPLH51O1lAPyUsU2FkbSE5aTNiJSRFQDFgSjJLXyxpRWM5RVRtbjwxO1N1YzZFZUtkTDpCJixlWDNCLklBRUtla1JLam4rNTlMelIkL25MUT0jI2lfIWJuUmc9dlFnK3xqUTgjOUxa''@;'; put 'put ''NW9NRjE6Ll43cktCdy4pNVN7S0ltMkZHdyRNcipoVDZKdz0xZFlFW0UlM30+Jk9mSihuaHddb1BpMlA6RCtlbChTdCF+Lj5CRWYze0FObFcmKVZ4ck04UmBmKz8pNG9gfDtifVYwQ2t9UV8rU1s2dV9WYyorVSFXenIxPm1JNnRfNFlOVlolbzg0cF83YTAqfT93XklfLmxEeDUqYk5Jb3EociY/''@;'; put 'put ''KDIpSzAle0FMdW1fTHZKWisma1BRZClNdE5fPlZbSlZQXXIsTWohWHk7Q1JDSH03PyFrdSNZdk1vOikzU2lRZV9IQ2k+XStqZ1JmRTJSWnBUXVAlQ3RuRF9AXkcvRy4ocjJJI25sNTMkZCI6Ljg4OkN6elRtVkZCYE1TaD4+UD1EXSJ0YDouUzwlXjxNL28mYjl5ansrL0VSSCUycVhifVN2MF1q''@;'; put 'put ''dGAsPz1eOEJCc2UwWk8lV31bZzBTQi5PIyZre1FtVEdNbjlwTThUY3IwfiIiNTw1MGFGKCNDJEwoK3c7OldjTFh9MWFTaTpaVShQN21KMEB4SUN5dDVqQ24sQGJ3JERTTHohKHBlVFZyR00sIVo3W0hiX359c2FmOFdTN2EiMCwmTzB6eTIvJFJoe2lYI2orZjd2PFB+Wi50Knl+XWgsQXp5VTd4''@;'; put 'put ''OUxsJCs0OGpGTnNhIUNOTCFfV2wpPHMqI15OYV0rQTdSVyNubDwyfGZmIk8rODBJSmR0eGZkZVZFRkMwWWt5PiY9SkRFckZrdzQhcE0kQTJdZDB9SklIdTxVUldpTFUmZFZONzxFTWVAZ3srM1RMXWYpZjYiWCokMld4NlYjcWckSENIJSYwZGZvTGVxY0FAUnlAJm11RkUhfEF3LlhHeyR8cE9B''@;'; put 'put ''e0c8WTRyWSlIZCI8QC4yNEJOMStFejclQUNbVl5fViFmd3Z5OnIoZGlvNk88OGQqI08/Zl1TPCt4PzxWREg3ZV1PQipAb114elcrNGZjUEdWOEQlTEtRWlI5fkJKXmN7YmU8aSlbJG9QMCR6WEh3enAoRktZZlpjNVR0N0NjPjhDPVo8TVJUYUtBeV9gWm9BW1F8UmNeQmhabnoyQXJKZ0lee0Fr''@;'; put 'put ''RltST3QrSDpnOFFCQDojazJHMHhhZH1PflpSX0VDTUI5VVY3KVJOXi8iYGohSUE7a3JHNWtaanpXL3ZyTygyMjB5MFpXUj9pVmowWHxnWXchOTt1NGEoR1JuclpHOkJtOXNXJFJyZTd7eF1xVS9gaT9dZytiIXYycyJDcnp4Y3RCSnZGLkxefit0KmBCSjVJc2k2OyhRLDRzUkJPOkdlfilVVyNo''@;'; put 'put ''Z21VcSwrZ3BneFNyeHY2Wm5Vd3pRMl82Zm9rdWl4XXFwYn5Jc0hIOUlfUEpmUiRbO3JxTmJVYFh1Qnl4V0V5RCNYdG8sd2RoPyNPSUkoKTFhYnBncC93M1koRn1NdjpgMUFUMD1Bdmh0Mz11SSxEIkR+dGYhc1oyTW0ocnB6In4lVUZ3YT1MVTckUjFJVS5AREJSTHlfNlRsKEQkMlJ0fGchK2Ek''@;'; put 'put ''QSkkW2BdNGB+VnNXdzVaMFQzKHpobjd4PmIiLjg4bk5fTmE4d1JXbiVXSW9MaityWDY4JkpZeEUsdWlUP2c4dHkhVFZ4fllqL1N5bShDJiRnJDYoQm80N3UrVjk/SF85TVgkcXMrRXd+N35Ge29xdWk6WHJPdy9GfGNKWitybDVEM15Ufkxod05lPGUpaSthYU1zfEJQcWFNRCVpUWVqd3JISSJB''@;'; put 'put ''ajIleDdHW30kTHUxZjRIMSJuenZXJnZVbEkzUz9kT3RTWzl0Zl0rJkFKYk02M2MwV1hIYDwlSU9KX2N8OiFaZnAvZ35NcWhyYlVhPDByeVpoLyQsZD8+UDVhOyk+ZTdYSDVNPixhUG5UaklCPWNYRUssIVpIVDcsK2hQRkFQOF9Ie3c6XX59WT5XZUh+W11ZfEE9SmY5VUZYK2puTGJ9XmtOKD9X''@;'; put 'put ''L0lWTXV2Ul5LTGgheX1pSGhqd2pQdU50YXpqdU89LlhhOH50YnR2TVhFUSFZX1BVJXhITT0rIXksUHhFTnU8Zm47QTQ3OS5VQXJOL0J3OENbX1oyVi5zS3hTKUN9Z3ZFVEQ2dFpnJU4hWUNnYzF+YXVaODVWQkN4XSNzNHVDemopVXsxam4xN1teV15GeUxBKS5YbSl8a3p5I2ApfWY3a3ZRe19R''@;'; put 'put ''MllkLnVzX35yOmlzWFB7Xn41aD9IUXhEeUFZekhwUV9KOlQzPUZJYzZvWiFEc2h+JlcuO2JIIUkjKnMuW11KeEk+KT80Wz1NQyxXPUxHV2ZvP0t6XkVYXzlXPVNnZTEzYS9WLDJMfEQuIT06YDxnPVRWQjQ9aEJDPTZ0R310QD9IbHVqQW5hbyRLJWQme15FKyp4ZUFRNTxadUg7QiVbT2ZlSV50''@;'; put 'put ''T1VGNVpJQHR4aHVjZj8jc0MxPjcxdzkvbTZLSm1lSDR2SzM1TVFkK1FbIV4qWGBaQHpNQ29yPyQsMHA9JiVRKFZ5RnUrNys5OHk7fG9RMyhedno5O1V1M1UkbVMjMzZYcEpwL0syfUBAbEVxQmlYRko4fFFAd0ROKkdJMVM6aDFLPVh5OWAxMy56dzMjPXhFKmxsa1BYZz88L3ZZSmx2WkA2SFB7''@;'; put 'put ''KVAodX1ZJjgifVRBZ2NsPEZiNW5YLGFCXTJHWVpvNlBLZHBVemc1KCRPa1lkQzR3N3BJVF11I3xlZD4/elFgeFh1eX5vZmp3ZWt1bl8+Qm4za3FHYUE/LEk1Wn53MXJzZHpTOmhwXys3dnE+R0k+Xik+NHlQRlo/PXVzSXgpMzlwVXBxRHU3SU9+aDBAOXlCdllfN0JydE9FSVNpPW5Ac1FDcSpB''@;'; put 'put ''NSZTXyt5TG02XWM6aHo3PnI1ZVldJUwhcj1dU0koVEZQKE4lIlZlVlEsUEBRN1k8X1dVcSZ4ZikvPXhnNE5OR04sJUchRT8uZTwveD16ZmcmWnpjVFN6ZyI5MXc4YU5nKjFHbUZzTHVvPDpJZWZyIT9ZVDI5QHtdMl9hYzdRLnkqbWFfLjw9dmYvWXk7WWdZbGtlTElkNW1nKEpMNz5iQHxFPmpC''@;'; put 'put ''KmY7UU1lZlNmTCxCd348fVVENmhxSC49aU9VXzc9fkVidSFlSXNffSlsZihJaHZZJTA+Mn5CKltsRUEvPUNYQkl4UyhKR1sjLF9mOmoiOCZPP1N6JTVJJkY1VDt9diVsVyRDSWBdI3lARjYoeGQyX3lSfSJKTk5nWiJIW2kkNHRFdyt1UikpNkpPYihFL1hlNylvZ299eFVRUXIrXXgqX1B5aUlx''@;'; put 'put ''SGRpPXBNfjRZdkohdytGYkVSe3hKOzttcExQUmB3MnhVaXFgcl44LGRNKz1TeFJUKzRZOmA2NCYhJF4ja09Me1N3UGFqKHpiMVAwMzdUaV1IfmlufkIrKmFALykjczlrfmNyZzVSZnJaWWhYO3J5JighRGJHKCltOSFAN2dxYnxzXWoyOl0jKzZnUWRiUnl9alFbZWBpeVF3Z2VhYX1eWklERV0z''@;'; put 'put ''Lz1KIm1NIkp6VUpMUW9DXUlUdS4oUSZLYVhmN3p2YUYuQH57JHN3ajt0MGp8U0U9QyFhMWZ9cUFhSl96cT91TnloKzg6ZFdpSiQwPT9lQ15GellHXSplQHRYbXQjcUNJRC4lJGV5MjtuPHJ6U15zWTJbLEU8LFNsQSVtMjt0NSEuUH1IemhzaVUuZDEmOVg4TDZrMVByNjIxd21GMVEwdEg1M0FP''@;'; put 'put ''YEYjUnxAZCZOaTI/O3J8SFY+SHwudFg6a2ElNnlKXXMpQFcjd2ZWS2hsZ3oiYDoqSE1nbmwjWDVBR1g2OlI+IjE8Pkk5bGVBQGtscE04aHdgJWZaayUpYWteZHxQW1o4W25RU3ZHfmRzcyl8bzI1RHY9USpRTHFRMEtbMmYuKSRWOXFsN35lUXRTUTtyQmNmXj46TWxQVjdRQmltPTxhNXAsNzRe''@;'; put 'put ''KzRZWUR7K3MzIz4wVix4WDlJK3tEM11lTkFHPnJOai56T19maHR5dSZHPn1aOiVlMzg6W0pwTUhlLHxfTm58fDRRKEpyNiFaJGtkWkBkST50a1pbQzU3XTBvaE9CNDlNKW1VYHg3VyQzQEBMKEFqKyR7JmhaaSUmS25XVUZFKnJvMDJVUXBNcnJ0ZFE6ODdOUnY8eXhCPXhFZE1GaGxOOnBOK0lV''@;'; put 'put ''ZiNpaUtUczlyR2ZQZT9JbU1jVE9tMDM/e31WREgkZyRGPzY2c2BfOFsuMmcia1tbJSZRTGU7PDxWTXAzJkFJSzcyNlBRO1YvaXIlJjJfZXU0UzV8InlCLFl1Ny5kTiJSaVpMLm52ZnR1IXphflYwV2VpNWJrQ2tnU2k5NHReWztjZys8aWZZemR0fjMpWyY8LlQyS3UzTlJ2dDZuUVVwWTM0JEsi''@;'; put 'put ''WTE9aDxuX2tlPEs1cGw+X29YRmNYdSRqTDZCNypdJmFMcjBRK2Y0P0x2YDJ1L1F8Y0xuK0l5Rk9db0JtbHFYSE9gLjtQWyJwfjtuRUB+WnN+X1dYKEZyKl88O0Z1KX5LXXEyKzclS1JIaSIiLE5+fV9JakRZYDAmJnUsfHZfJks4ejh1YzhbNlFTQEZ1QCoqSVpTLntiNlQ1WHRZLz1YWVhuc18w''@;'; put 'put ''OV9hTWlAVTFtMDRYKzZ0Ylc0QXpXLG5ZO0ZrYDJiVFspdXg2WEVNQD0yWTFaP3F7KGYsWCw9ZkNAOkZNMGNOUXw+a3BERzdWRnFXdVloMm5JJnJRZUpGeWZHSEU3Mzd9I1RGSW5HMn58az88NStXQlk4QUdERHwoQ3tMOyh3RW49Q3RKXlpDMXhpRG88REJzLmpZZTt6SnN6TmAuP0g6P28ubVk6''@;'; put 'put ''PmhpW3krNjBeITRfJl1OV0NaSU5LRklaZ188KkZdYGcxJXRnQ2kodmduS0l7dSV3XXY/Vnh5KGBCYypwayNhaUQ8OGVLQDFyaFsqdlczbFJ6OSliRlkzYztCQykrVzY/SE5XQ0pSeDR8JkVPWXV1an5yMyJZaEA9bHVrVEhycmE+UXhENy9McTY3Xk9dcG4uSWJuMiZycC5iJXpjNl8vMH5vN0B7''@;'; put 'put ''RjdoPyhbWFtqZyttfWwmeyZMRWZAMWlZY1BtIUN1QzM0YUw/czsjbmQxUVd2YiViOVZwOiMrc1ZTO3tUYEpLRypHVlFmaE0/Qis8TUZ1OGRANC9ZSWRxJWNgNnk9UTVLbH0yQnw1ZH5CVVB1QVlJOjQ4STZXMU9uR2toW29ATSlDdHddRTIoNWF+RnciSzNqNyV9TU08cWQ8NSwhVjFiNlcsYGBL''@;'; put 'put ''KDw5NFsoTjRoenVxKHRLdUhlYHtGKXkvKFFCO0IvW3wlZ1M+NWl5QTFJaXMsViYoJUl0LDg/XSlNZUVuPGxud0Y7Ly5fIzl6K0sidilKIygjdmh0L25CLyQ4OU1HVUhzLHA1RV81NHwoOWtOXT5NdSpxdjZvQyhQW2V9I1FKels5XVQmVzBxNVMwKHM+XWd0WF9eU0A3IUdzY1t5YCwvSmhbbERm''@;'; put 'put ''Z094KUx6YmlxSkEhL0ZIMiVkMHlHR2dQIjYvMnRfRERtO1NUWTUqMTdNWjE+RkRfZGdCbixjQkNTZUVCP3g6SUdMOD1EMnt3ejYjPXtNcnNwZGxgM2NWKjlZPm1gQGo2Kk4xQF9DejdWPVZkeEZiS0g/fDxsV1JFfXZIRzNkSU5TTSY8O01efUVROjJjVGt4X2JZPSZ3ND8mXUQ+WTIyVTVpJnN7''@;'; put 'put ''UShyeEhJOy8sSzQleDhDXkc5cX03aU0iRyJyL1B3Ij18W2hEZUc1QEBGNDFFbHpSNCxOeCJyPCJtc1pYMCMibSZhenpSeiFyX1N2M2RVezNbITE1VU0yMFlCR28zWWN+VWN4UHBeRj1CM3hZbEBCTW1xYnxeVU1Ve3hMVklkN2FPQ3N7fXU9KGtSUSJ0bXJLbGVuW3dOVSJXW2RCVEcwXTBAfTx2''@;'; put 'put ''PndXIkNON1dLblpfejk4JEV1OzAhWTBwUENhayp+YyxDR0pjTXh6ZWsuVFk5eWIldTZZXlNPU2pJKDZrI3tBalU3Vi9uVnIpRjg5W0lbRTRoVFtkdzZCdTBjR0JQUC9EInFxL1QmOXo+UyxKJiVGQnB0eCUjbHdCNjckZyZxe0RtKD01VlEqcV19N2FtdFE6IW9NMEl3fSs+dFM9RyhWeTloSnJT''@;'; put 'put ''SFBeIWttWkdkPyMheytNRWp4WGtwRW0xVWx1PixZW2YpX2FrNyVlNXhiJWVPKGlDZDxHdEwmOEtQTWRCZTRpZHxqdS5KS3tmXkQjV2JLYVFBKEldPiheOkl5aWhMdDkqWjJEKFMlRHsvTyZEIyVaM19nbWIwPC8jNiRETG9YdzJuak17eVhfTiFiSGgzPTRwIypNeEIsI3JJbTZGV21rPGQxfGVU''@;'; put 'put ''bGhKfXhyN30ifDJ+Inxea1tTVlhKRDRMYnIvbTY9LF9NRGpaanJBRDdmbnp3ImxnWllJSWVHMnYqNUBYXk4qa2RLYlY4JWIuNX1qfDRdfURMUW1YZEs0ZTcyV3x8T09UfTlFTThwMyVnaiE7PXlERCNgZEBmJSwqYFBFKyEhcmRLW0VENyVWVVpmI3hJOEplKlp5IVNNT2cqcXh9aHNCKDkvVzdA''@;'; put 'put ''YkN9cH5fMmZ4LHJWVWwsME03QmNgfDxsNk0hJXw8YW9fb2xzaFcleDFnKFB4JHU/QUlIZzVsXnJRS3QzbTJ+QHc+ZXl7N2ZVUCV2UFl6aT8kRWZlIX05cD0qJmwxWSg9VGIhTWhmWyhOJXZYe3QqJX11KlNWLzo8XT9qXkQhWTdoMFM3MjV8SiEvKnI3WTBhLnMpJntERX58OkA5b19NK3csbXVE''@;'; put 'put ''ZXw9Y1pyNDRRUThINlZYYiJNeHZ7OT8+aGpGNWRnYUJtJCsldVU1dXlGemlkcks9MG1iJFlQajJAXkhEe3Q5LjlvR1R5R1pONlZWJWMkU0JwYnNUa2NVTTBDRER0RG9dODY9VUVbMV5+aypnP1lrQm94eUZkNz9nZSRyWkZaWzV0ZFhVaioxdUBVIVk1Lmk4aV4iLjtaT1AyXmhrW3QvNXlPUERX''@;'; put 'put ''TS4sc2l3TWZTUDJLeTNhWnBgdHRhVHIrRDgjS0t5eFF7aX1CY1k2VXR2Sj9pXWlDOWBjKTRDWWx0VWI3UihFalg7VShERTgiSm5TZ08jKituYCk9fGB9VFYyMEFdPltfalh3b1NmeHQ8b3A5Y0osZTszK1NKJHpkbV13ek4xMV1QR1lXQnUjcXE5aSkyI2omSzVIT2FYXjcxfCxyKn1jd2lHZExu''@;'; put 'put ''PCUqISJqMDdSRitCSVpJYF9hUkxSTFYuVmUpP0JdOnhsdD50fCkra3BPKC4pTHF1eWVwIV9mMFRiMjQ5NDIkKS9wej46Sy8vfD1CKnlFQ3BKcj83QXMrdnl7b3MxeUheKjgiTHpGbTw4R1Z3Xk4sTm1JM0JDVjAhJUR8bSN8em5yPT5UaU43VFNNLnJYI1JMQnxWSyoucnNJc2ErZWs3JDQsUH4w''@;'; put 'put ''eSErWFJlVTI0bj9VJEhZbF0pX2xmM3ljKFpJJD5GckkvNWo9e1IhbjU4SlVkd28kQkFrU2RdIlovLnAmS0BeQ2lRMll4L0ZhSVR3LixzRlZGI3dqUjJRQUBoM3o4WlR9cjV3VnQkalcpJEljTlNhRT9VaXJlPz5ZIURpN3VPRURBTHNQRCJ7M3ZDTCoxKEg9S2pHeC8yaWlCaDRYI1MwZ2gjZWpg''@;'; put 'put ''W3tIUyliVVdZeXBjMF1RX1NpUzRyWyxiM1oub0F2bWU7VV08Mz90LG44ZnpHXlgmV1VAc3xCPTgidGc1SmUhNFg2bj8qdnkhMHk3JDZ2ZGh9XilDVWBPfnlgPE0pTXMsK3Y5bXhJdihhRXI/WWxoYWJwUTk7cldTb2lrNUNYTGk8Sip2TWwie2lObUJGXSoxR1M0R2FxWT43az92OEQ2bjgweDlX''@;'; put 'put ''Ul1AejxvOSp5cW9qNitAX3dDQ3lXIU9tTzhdNjtFKmZbXkZMP2w5R0RGY2Q2IW8zc1owVWRxKEo8Z1RQYntvaVtTV2N8KG49W3c2L1hJPCVjVyRiOD9uPHBwTTdKW2YwXS9WUyZgMF9dIyJJXjNic0UsLzNDLiF2bHxufHFlU21Zcn1OOHVGQ2VKLCZ7XkApQzxJOSlnRXwyX2EofUpoTEsrOHdX''@;'; put 'put ''PSgjZzwobkVDOElaZ1NHbGVlQ1NRQysjRkc5M2BoPGs8L1dXWFt4Qjd4VnpPRj1Oel0yS3ByWm4kUHk+aWlFOFQ7KXowU25taEEmIz9BK24rKDh2L0BeVEFLNWkqIVBAODpGckZqKiF2JDJ9d3JeOCZwOS9zZSIzWEJvbFJIQ0xhMV5HWWo1Sy8kb2gvdHtOYnJ+fCRbYS96JlV9UDYhU2pheE5I''@;'; put 'put ''fDQjb0l2dmBoUlJoaTZDLFN4eFpST3YrNGlCayNMLzBDW1hSdmsvU2ZWREg/RENtaDpGIjAwRUtOInY3a1ZKT1JuKzJFYUYvLmBWQUpfQ1JYQFZqflFlYXoiPCtYXkMxQ0FtSmk9Qi9JdDtAaF14VCE3VWRLV0o4d2EvZWFOUmpQdm4lKT8zaVZHcVBXUEp2R3FPLl98L2Q5ZzgyMTAhPmlxZl0r''@;'; put 'put ''VFFoaWVzZVMyWTF1RDUkX19gVGBbbzV4TXlDSyRmQ0xySFRxcF9YSjhMQlV1MVc5WF5yRzlkOmVsRjB3S1p7RXA9fUxeTUVNbC9kcEBSXi5xLFU3MChwMVkwRGQ8aTZJWXFGW0UpPGBKaiVJPWlRMCQpNHV6Syx8ckh5RiwrTjdMUDE0Ii8iJFYuIjJDJWR6QUpJQjI0bGVwa0sqTFAlMHxYeWpa''@;'; put 'put ''JUo4S2klcG4qMnhINXxPfENzdGtjQEJxbzxSTkQhZEs9VmAjUntQX2RzOlhkbyZkRWZdM2kwY2ZFcyJhLjRzPWN9dyxPOmVuUngxUi55Si51WzN5RCVrPExuLzc5R1RedjcvbWVnKithaCpCclNzYllpWjRkUG0xZVN0LyRTPjxMKn1zMDdnVzxeVz57dXArXUVmPyZAMjsqJlFOO1tlQkhgNyg5''@;'; put 'put ''RkJSbCouWC4pQykvbldrO0gkOjlfd1c2KTgpISN4fjB1R0hzUDlbMUc5QGZiZlVVSTFbTWBRMkx1QEY1SlB3UUdDUCFrT0hMVUJdYGwrd1FwdFYkWWFRNVhuZVshSSNgJDs5IS9PdkdXITV0W1Qxa3pXXkRaKlkmTERISFs4eGNnR1hEUnR9eTZLO0JaTT8jSn5QbWshTCR3R3B6alBDRWdIT2lM''@;'; put 'put ''WF53OWlCdktZYWdkW3ImaiJUWF8vOWlFISVlQDNUQE1zXl59OXhxQTV1YTZkZUg5Y1RmbnpPe0NhRG1NLm07YmpIXkg1Zk9JeGI6PEJiUV5fRUlOQ3dYN2xPdjlpVWhOXm89N2B9JG5qfmd9XS5aLkY9aU5SY0VPdnZpQUlLRE92ZztRdzBeITxZWiNmPF47TjBPSCNXPk0kKmBrNzp5eFhVLFBk''@;'; put 'put ''Z0hZMzRVaVpCNjNqQl12JklIJThUXns6Qkc3byk2RDl5YCo9cDBXV0s2MVFSPHUlbk5+dyVvK0FPbENNfTYxUTcjNVFpa151WEZxflFePyElcyM7IyYxUVN9TzUhZChnYUp+NnptJSk9eEh6OyxWMEBbVU9jTiYveXNhOk5sdiheOTAhR0ZFOl1Yd3BYOjRhNFhFMjJRe08yRXwwSz1xSV4jJVhz''@;'; put 'put ''VlRJJmpyejd4KjxdP0lnaG1AMG8qYUEmYUdsRipTdEtKPyklVThQa2hzVmBAe3UiUiV2bmRteVgrQ1UjU0I6UlNqPDphfEZtYnJ0bSw0Xkl3I2k2P0tNOWxhIXUyWEBfJFl4JjVQQEx5ZCtOeT99NjMsTntwWn5ZSXJ9TCs8PHhMYS4vXVN2IVMoPXp2PXg5L2cmMS80aWw7cmd1cTRHaE1WeWRn''@;'; put 'put ''cmVEKHp2QUMxKCIvW2dbIzU8d3Q7M1Q1IXF6Qn0+L05iR1ZVQTBTaUY/JVpFWng3RzohL2ZtZDlBcE4+N2g8cCFLZ0MzdnVsLE9LYVlGfSNhNFlONlVsRm99bEVLYj9pT3pRR1IpJncxPCpJSWJiSSM8cUl0SjVJVEV5e2ZybDFIXn53XllgR116KlQpXm9tYVpAJURNRStoZWtgYVlyais1Ni5X''@;'; put 'put ''NkwzXWxkKV1bP1RHTDB6cWFyd1dsYitrZUQ4IzFtfHhGSV5hRlgqZF5HZWtLam9ISmw6PjxzOHc2N1U0aj5fNWZLP3UyZCFvPUoqdXFzeF45RGA4bUUheGVxQkV8QntdNzlPSDRWVVlobVZgQCMzUkolWkI7Izc5VSQ3Ni58dWdNWnJaWiRALl9bWj58PlNvWm46cG09RUIheC8lYD0+PjhMLGVl''@;'; put 'put ''MyplZTghfU9iLDxbbkNnRDNNS3p4QyVmTWFkYWkvNmZjcV5te218a2l5OEA9YVFEMHw2PGRpbzBTNSYvVnM9LCg7MUw+My84Kik7OiI4TU89diwyIzQ5ISZRczphZX16ZllfS1RSfW5Kei9hd2I+L1UxVj0sZWVhdls0cEpQeWpJPDNuMDAvLjlXdEBlO09XTG5PMS80NnMpZWxHWixxUH4sKVpa''@;'; put 'put ''PEJtWD5rQkohITFXfCIoZiFmN3U5en1qbDdOTTd5VGFZZFdIMj10Sy9Dc2U9PmBlRjteeTNgZi9rQSh8MURrcX5Lb2J2XSJ7LDQ5R1l5KEZbSjlXXlFnMHxldD14QUdsPFkuJDM3ZUA2RDsqIyY7X2orZzRRYmxpSnVIKGNJYTlUL15LayMuWm9rVGFRYilifHZqczxDUmxXUz0yKiomQS5Ba34j''@;'; put 'put ''S15rRytFQVUqOF93ITQsRnJKY0NBS01GNDswRUw8QWopd25TIXU9JGZDdk05NF9gPVg1TDk1Un1KLlExb29hPktfMENmT19xbE8hWV12TT8uV0h1JVdDZjdYNHFHazdhJFA7WTVoIWxoWithQm4/MyFPOXg6YW5gSklLb2VWaWR6SExgUThqYiF3WllTW1Zkei9BLyI5WjV9aFR5OmFTeVZHQ3dJ''@;'; put 'put ''XltydyEsa31TPm8kRzx1e01UZFJUb29wMkFpfjBfcSI0T3h1Ri5mdGx0R11XZykuNn1EWmMhTzVjYklkS0NSazFfajUiQF59XXNRXUNvKiUxQ2haLEB7ZUsmUGBqZyhwSU8paVkvOXxOQzomLmdSbXdXPWQqajs8enFvQ2JjU144YiRXPWddfm5jVHI5cndlYDU/XyQ4bnFnX3R4WEhERnVGPHVL''@;'; put 'put ''SGRjWUshQDhvUEZNKyk1W2kvOyxjSXU4fmtVRmElfHd1TDYjIUwkR0N3UD4xSlYlezFGb20kYSkjenh1VUdpV0UuTHlbK040fE4iYns8aCVFcC40QlFUaWVQOyEqJSx8Ni5kZ2MqPkkzPz5HK2N4eC8sJj8mUjRnaz9qU2o8Ii9EPkZbVzpLcE4zeCVHbCFadCM6KyxSPE13PS9eTiw2Iytwbm83''@;'; put 'put ''SlI6PnNOKGB7QHlFb0I+ZmFFdmAsQkpdNSlwQiZBMXleSiwie11teTFhMVY9QltzIS4sJTFCLjlJc09ZeFF6RW8pM0YhKytjaTpoYD9OSEV3RjxVbjQ7OXg/fX1bRnwuUSlMfXpEZCspXm5oeEIuKlIpPXpKMVJiVF5sNVAoJD4yTFgzKyJ7WCk8biUpWGNkMXRdcDcpKywrczRwSzYxakkrQiNx''@;'; put 'put ''dHo7ITNPallfVj1MTCl9WUxuZVZpZHBKYHJANGcuVj1vJCsvVj1jOkJ3Y3wkTkZmY3ZjKTQwYDt5NTBjR2p3IzZ8VEJ2XjcuQ0xKV348IzhtTHh3QTlnbCJGRiMuS3x5c20xZk81MEdXbT98bnJmLj0sKXojMWhER3dZPmg7PDdORV9LMyRXUWJ4X0doens/K156X0hMXTxOQGJ4OjNUSkMvfEdD''@;'; put 'put ''Rz1iPjpfaUVNbGxOTW5TclV0KSpITWFHTitmdlhLNSZRZ3ckN1ZqZTIxRXAwd2wjWGVSOGFQaFJ6dk9VfVF3KG09cjNjKEA1VmthUUgsU1JPRlNgWUpSYjdqIld4UThXWTF1OWt2dT1gJTVWTmJMWVlTPCoiPTVHOkNYMSZ2Vy9dTj5salgye3R+MzdnVUdaJVNpc3VDLlMhNEl3TVBxNHhrbjxa''@;'; put 'put ''fjJ5SyhnYHhZWVl1ai8kVXNrdHVdaVo/PkdaJUQrIjFmTUtucm41cy41NVpDJWF4UEdQYEp6ZXlJJGRNc1Fiak5mW1dGPCZgL2cqMXhdQUZlR3x7JUBgbUUmZzVYZkNmZ3ZRPCh6Ny9XKmBQJUM5RnldVlhdQzdASGZCPDRJdUZsMW9wJDE/fCJ7UEVtLHwrelRfT21TaVlwNThrYllGfiVAZzV1''@;'; put 'put ''UlJJNzgxND8ufTlBK2AqTkg9YURUP185NkYzc1N1WmEsWl4+OEgwY0kuZmt7bEVUfXRwSnM3ekNMblIqXkdmPFNzPXxQXWBpZihAejdWIVVCcz9scHJePmZAYnpQY3IzITQpQS85b1pWTERlbndYZyJUSGJoL0Y8OS4kRFBuTChfMzhmJFVCYWxZMXRpYSh6SVpLdkhHU1JJJTBORjlEPDomYH0r''@;'; put 'put ''TyJGPCMsLnl5JHZmJHUhSFY2d1BGP19tfD40Ulg6ZzJJeFpRYHJoUCZWXyRZVWhmSU9rMTxqWEJXKWp1OzMyZG1pZVMmYHZlRGJNMl9SP0ptKmd3SCs6bkMialh2MWBRKGxWPXZ5eExTcD9Pfio/K0M/YDVgdmRLRnomUU1LKWRKLj8rPFtFYk5bb0Beb2dAIyg0WSZ6Oyp7e005e3R3VUBhOHUu''@;'; put 'put ''bjVhTlNXMyhIJE8iN1dPY15oaSZwTG5UXlVqQGApbXVha1ojTzRRQzt7ZUdbb0BrI29aUmRrWiREU1E4ZlAuVGBhSTEvR2k6aWNTJDFUdCY3KFQyQkh5ayN3byYvPWNWRGxQX1A2ZyM6e0cwYjdSVTBWWX0lIUoqL3N2RE1ZenE3XiVEOmYsazBKdk44MkxheHQ/TTZIW25aKFlnZH15bFoyYDUy''@;'; put 'put ''R0wxO2RXaGQidCtPdGMkTyVubTx4RzFIV1hPOXwoSiZ4cmd5MThCN3F3Tn1bWEMjaTY5OXhMZVMmP31ZMihzQEZaWktPdzo2QittYV1jIjRSWmRYdVNFSkJQJFk9e1Y1MnopLz4vT3tYJixoQjY0XkpGPWZ3XiJtQlplQEN5WDxLNmViJWtNdW1Fclo4diJgXnZxSFMpZ0Q9YSl1LjVnKTZlMXQy''@;'; put 'put ''ZSRbVkAwWFlgbHE3ZWpWS2VmdnVYZTtFaSs1MkdxSzhtJD95MS53Kno0Ly8rVkBuPj5JT2FlUFBUQ2lCcjdVPUtZKFleWFo4ZDpleT1Lc2AxTDtIOmZYfHF7QkFwR1t8WzNOUDxKUXRTLnpgMEh5eTFkMW4rJWxgNnpGelBAfF5uPiI+U0lSOSk9STwjV0o/WkNqRE58Lzsod299Y3tkTUshUHhv''@;'; put 'put ''JiE/UDY1Om9PfW0qMERlP2laVC8wN1M7VW4iREU2Sl8/QyIwbVR8e3ZjbGpVeEpASE1TUSIzV0gqfGwvTXcwLFtTb04/ZzdoTiFyZ1t8WGh4N10pSzZSc1JKVywvRE1hWFkyQmtXX2JTWUl4W2pNNFR2PU0/PjFUQGRMWUcrOiNIa2xGK3J6NXZ4MXRXL2ZXJXJXRyVCPFR1OHEmWiV3UWBBOlsv''@;'; put 'put ''OXshUjNxb1pSI0IwRVlmeUImI2pFaGo/RmJmcUVubFt5ayxqSCt3OjFmMiVkIU9ZUVsyWHhuKS9VSWQhb0dbRWo9W2JMI3VhQnlNciU6R0RSJUYjVndJbElNeD0vR21QdykrQlAyZHAwIUNpfUFkV0pwVyU0RyRFMD5XcWkpdzpoYHdWR35LS2dDSEE8S3xtcEtOek89KmNpeDxNUF5MZi9PU2Nx''@;'; put 'put ''dUJYYk9DOVlgRDJtdjZVLjs1RF4sJUd2JGZndEEsX1BFP0ZkWlZrKy5JeFJnb3ZuWmpyZmFpN0RxSEJmS1JWP0shJn01ITNWdFt9Ui54aTd3eEo8Y1VnS21QWSEvR2lebCZbKF8vRD4scU0yZztjXT9KcyFHYTx4YHF6T1lmPi4mZi45eVFpWDUqIywzL2xsKzFLOn0/PW9DNyJwdiM9Ni56Q1FA''@;'; put 'put ''Rk9hfT1uJSxVZDNTKz8pfClIP2pkbyY8V3w8VjMpKyF4MTs7W0ZVIzlUY3s4OFtYdElGLkddYGo8WD1dcltPcUopOU1MKDtwQ1EzQi5hL11dKT1dUzM9LlF+LDFCRl1yW3U9cl9ZbTxAITZFQHdPP0JZLj0rWDIweTFTfi89QlkueSU7bVhaQ3p+N3JIODxVJTU1WDgyLz5tRUZOU0deQn0iO0Fv''@;'; put 'put ''fWBGRyZmamYqeG9oSFlVa0JIMVYiajxtJFNgP0BrKSYiRSFTfl8yR0lFfW5OVEk/ez8vcWtKfW5wI3ssQWtXVnl3czd6YVlhP2w4Z0tVeiwsL3tTODdiN0laPVVuNWJZbTh7cDNtMGN4XXIjVTh1P15le0ZUT3JsK2g0aGYuSWwySGg0KE1GMTpAMGdyYFJNd245PVF5cDAyal08M1RIWSolMmZT''@;'; put 'put ''aVU9dyE+bW12N0oyTTQhUFd7fFA8QmBhTyNkRXd0cG1damRBMntFRmpqaVNVPjFHOHcoPVNxZnVKP3dZZFQpRy5zWFQpb2EwSk8zd1BAMFd2d3J2UCp8MmM8TjxsP0BDTl1eTSg6Sj9mVVpXNypXaEYlY04uNnUqZSRENTtBKnxgZTF3S2d8USFPSjh9RFNMLnIyOV9aKDA2MCs2TGhnd104fiQ/''@;'; put 'put ''MUY3R01jInQ4eikveE12Jil3SUcuLzd2WnlNP1EmcnNjfU1xM2pIdG9eQGdobWRTRzhGY2YwX3tkUi9CfjhRYW15Izh0QndoSX47R31HZkgjb1tDVihnWDxePzRUTl1hbVg+eDxPPF5eYTdIJGNJXmlGYHtjXm17ODxLSXxXIj53ckBLPWomX1slLksvanBjSH4oMER6OllnT0h8clkweSFLOVRY''@;'; put 'put ''eTo6NT5MWW4uNEI8SlpEYEBDclN2RSFqTzRkVTNZJWs3WXhMeUJuNzkzTlp4S14/YCFFUj9zW29dKklCWCFvJTh2YSlBXU1+dGF1N3JhNF9FODdzYCR+b3BzMz4oMUszPmo4amxJcEd1cDY1PGMsTWlKKjhLW0JzRXFIYDl8MSs9P2E+OlV1X2FBb2RxbkcpWVQ3eVc8K1dCaGtZIUk7Lj9KaC5U''@;'; put 'put ''bHd4KVIqSTBDUHp6LDZePzJUYE1BNU1QMU8xQDtUZ2ZgIywpcW8uaF1AQkdXKihFQkxQTFgpNzo+aHc6Mlh2R11RaGNNc196XjkqYUpGUERpQVFyTEpSXjR4JmlVJkJIWjhIdEZjUTFZWChuQXdHUkBDJGtBUlNGRDZSPmZaMFgwbGlOQHBiKnhSJXFlSSRveklBPk8kbnc6YFJtWldFRyJ0cUpQ''@;'; put 'put ''Y0RMTCZETWhgfE9VfWVHbXlUKVQxQyosRE00JEVDYkNPIykqZX5LRHc9Qjk8ZT9rQG9kaVB+MCsuQFBxXip1a31pZj9VRHcvPGZoYl9QYmBOUixeMmhFYyR5ZkAvaVhqUDRMeHAlWThKN1U2SWFFeGU0XWx+eUwmLzFIYHJvN0ZFeGZsW1hKIVZga0Ujb10+bnhNYnN7eUtmNzA+eUx9cW4mayll''@;'; put 'put ''NDBVZTVlU1A9ME1MbVBKYng1IUxGMUZHeF0qbU1fe3NZOklNKmpGJHZMLmEyKTF8aUdHZnQrZltqZzwoZ1tmcFc+UnQqWFgpcWhvOXhaQSkhL21qX0R7fSlGJUcpIUc6WStxfDloX19sa3VPYGsuVDNfK2lRSFdJXX0zNnpIS0JweGYvNWtLKzVrUERNZDspKWV4OEl3czFZNSVQcHtJamQ4QSk4''@;'; put 'put ''YDNMQXkmOyVZYFYyU29tJUckSjlOcVRkREwrLGo3aiU4Xi57Z0Q4N2osZkhhVFJ6cHBqQHluNmk5Zz8zPHhRWTc4eUZsfk9tWkwuYFlMRG0ibXZLJlZkVmRTb3wvVDhwaj8yWiV5RCtabEZIeSRuYnFYbj1MOntvLlBXJFZFUSkhMUs/b3tUPDMmYHo6d29EZkU1VTNHVVJIZ0hBb0UhIUhfanx7''@;'; put 'put ''M0YhIURvWC8xMldDMGpAQzRMcXVSWWd3LENnfFpPODkkWX47IXZtNVtTJSxHXlYscjZ8aiFvUy5iYyRGeW9hS3tIdzVdVnhvYkVtbkRGU3ZbeH5GaE9DVypkR3lPNklieEVyakpuXWQrQn45c2ArQmJpb29mZEM7d0AzcW8sKVM2JUw5eTFTRjdvUS5KM1Nqazk6TTNVRStVamo5aCZKKkxEPkIl''@;'; put 'put ''RHcwK043THM3ZU1bO044WXdlMEB3b01eKnhvMUpnaUNUU3VNZWw6bXYqakB+YiVmMmk3cGIlVWwuQ2x1SDBpXzwiW0xFfmJtamlfVSh0enpiWml9VixuYyQpRCsjKm9xM1ZOMWlwTzFAMW9vLywxL3xnci48WVlSMmVURVFiPWVtT1tTWmwpWlBLTn5YSElrUyxYWG5LW1luR1tzUmcyPEs9U2Vi''@;'; put 'put ''ZiYjd0ZbRXNXOTRURjxYSDBpOmMzdnBNKWpneERkOk1rUlt9ImxdXnJ7L3Fdc2lPaU93RzNNWWE7clVaYXdYXWh3dyFkZUleanlMYUFOVWEpVV5gRDA+T3t4eVQsNnpwUWFbZFR9TzVAWypTS3ZFNm5HLnFtbF9WMD90Yik5IjNPaTo7blBdRTxLOFZrbXtpOjshe2A1Z15od2dtU3A5LH1qJDpM''@;'; put 'put ''WWF3aj5oI2oyMFtqYGFZKnFaV0QqdXAoUmw6blBLTldnNGQ9XURNYlsjaCQlfXo4YyxYQTssMXA8LzlxO2ljOVZXdzZVWEwyblQxWmNZd1s0fktDRVJXTjhFNn5LXl1vez9KOHxsOmV6fV0pVD9AV1o7Z0RFb3dPdj1dcEQjW0dQfXFqJWZbdVkvUFshJEpdNCwxQ2B1VStLYDZLSy93SF8wYzJ5''@;'; put 'put ''JGEwKjpyb0R+a3ZPJCNrY25TTC5WdlleQmBkdHVwdWVteXI6JVdBVDpRWnpFRkxJIixqWEV8MDRvY0guWHVVK3gvYmNKLjV1TilPZ1A+amksfTcqRlt3NlllQ1ZneUFTbDZ0Yj8mWV9+Z285VG84b0kxUjg6Inxdam0hVUc0JWMqc2lhQiV2RzBsXXhXKm5tQzImMT5+JHMpNmAzPVlWP0shYENW''@;'; put 'put ''XmlkRThPelhKeCE8Okp4PFtyZEUuO047JWUmZF5deF86Z0VRMkY5eXtOWzpLSUg+WE9eVGFack5qdmdPPFgwJls/LDk4Wk94Ym9ONzk3RVB5WDJELk0zfVN6VD1TZi5OKWN7PDR6a0NdIVgyYFA/KzxzYDlWc09ueTJKPEs2N0wzLnN6Yk80cW9Pc3tAISFrSWtJLyE8OlorQnpGSFA8LmghbTB7''@;'; put 'put ''KDdnWEA0RVk9Onp4eGpnPGVSak0pd1hyMC5HK1R4XmRyN2lFdSpyeE17WXBUeF1WeW88OUJpV2dWWSUxVmp5ZzVwJSRGa358dWB0Xi5wZ2tDWHQlKC9QN3g+QnxgYF1EaDhrIX5xPWM7OVkxY3JDeE1nZ30uSHJfbEAqREE8cW1wQ01lOSheSkNbOUU9S1osNHt9T2R1c0sxd0hUUS5eIilVKT1u''@;'; put 'put ''Q3NmSShRakhLWGJYfVksI3B+N0dEN2w9RlckQmQsJUV1Lm1yJUBBQUZeK1JhOVNTcHlUPiJaRk9YbFhlOnZUZyVzbmkqKVRPYiYuRjZENHRgXXApenA+UG0xe3s1b2khNz12dm97L1VvdnppVG9wQTwjU1FEdHcsPFFQLlVxOTkwImdRa0AxQWJzZ0YyaEBOczpyKihDU2Z5KDJOOCVqVVg6amN6''@;'; put 'put ''aFFYLiJiK3dVZHFUIzhORDUsd2BWQkpVKWtkZlhyQHloYVM4WFVqIT9NWTl5VDYhaEw+fS9nNSxxLHJ0IV1zN0Y8WTlUcyZaI2ZMK1FnJShBajFWNlpJRz9hYm5SPmF6TX06Z15kflhYSy8rblQycEBJaCE6S0xbbixPeXEsSWs/OmQhfnxgdz0zNysheGNeRUQpd0pGMVgkRjR4azcieSRIfjlq''@;'; put 'put ''S1tlRlhsKkpGOSpiL0NQcG5GI0o7dWx+XXlMR2VEZXIlPzJPSzFqMU5nVjhBZGY4bD9bOVpPT11KSHZPdVVIUUtkbC96OUtJaWIiVFhzcTFONTU5MWUydGJhNVpJR0UlI2w/Q30jISEoeFlaMyUlPkNJVnEhdEY2TmwkZUV5O00sODJFJD9dXyt+N1JTKn1nIUJHe20wUW1EISxoKTU9c0B0eDFZ''@;'; put 'put ''JG1CJUQhR05eJGk4Lz86TTRwZXVEPGdxNUx5dVc+PlpgdHV7REYyS1BoN1plVkVvTzhnbzVRaiMkZH1wISZAW1gwamFbIz9VSzIwaXJ5R2VpfVs8RHE9Wk15SGlBe2tqRDNMfTopVFEuYzsoRFMjL1tpZUBWcD9od0cjMGcsR2dLKD4qZmk0SzIpOWplVmVWM0x2M1FnLGhlM2trfj5sdDVWV3Ul''@;'; put 'put ''MEIlTDtARC9KTXUwOmVhI0U7OyhBaUwpQUFpUm82M3ExM3I5dDlCaCVIeCh0aD5pdWVsaVtGPSRRMzlqfVRaWl5UeVhYdEord3g0cFE7Ln4xSmtlKWllYVtsSkJ3WUcuOSpKVWNeVXVEO31kSTltLjFYZVtjRVBDZU99WFImKCMhblo5QnZfNGBtQk9EKF43MlZSYEY3SjNNQiEpdTQvTWR1PWVQ''@;'; put 'put ''KG1KYGJEJXF6P1NEVkNscl1FN2hMdGg+S2EiKFpRMEgoaXdrYGZaTDNdLnciKCkjIU8wUCFPTlVuTkVEbmh7KTFQT3NoVT4ySyJ8TClDIyF0QyoueTVXPngoYkdoTVFlcCJ8TGY9SShdSzBeISw6WihmQ2FuTD5XWHBtX0x0O0h7XlVUQF57ZVchaFQ1Zz8oUkVwJWp9Mk1GLGpGdGNBflZxdElp''@;'; put 'put ''clpFZUpyaVp4cypzMHp3O2MpOVQrKn50cDFFN1VOI2dqQENzTFRseT5hY0Z1OkcpWWFOYClyL2liaFdwIXZIcTJZdyR4bDd5MUllUDhiITwuLkFaO2xrd0Rbc3g5ekhoQDRwOFdZS207Z2t8YURUL0hSSmJsVyFNPDlNRUA5MEJIMip3I3V5OHBgTnN3OGU8eWloPllOMCxHJks+X2htWGV4NSQo''@;'; put 'put ''ODNYejxDaERIcDQ8KUZgfmRCMz5TOFRKeS59SUNAPClxI2xnaTlxaVVLOG4/Z285MlA9aW4seHFrX005Sz8/KnE6Iyp9JClJaCZtUlcpfElaYkdiWWY3ZThQTjI3Tn5AdFEqbSVnMCRyKi9DRVtVPSUkTk5RWVZ8UTs2VWZ8OzxYVyMoQGpNKXN3eXo9ZElLIzMjN1d0QS9qZFdoQH0xdHFgYmR1''@;'; put 'put ''eE0pNm8iUSlsR2tRSiV6ZSF3OmpWZyRaSkF2SUFCYCQxWjF2SFtoez57KWpkbmV5XW9BcEddQiNMTHR9ZTwweCxDfGBoVGhUJWB3eyNIWUhvX1s7bmkvPz5yWEdNUEtQSCFQP30vMGtaUnZMXSRuSlFWR2loL2FCMVo8KUY1fnIlNSxBJG9vL2MhUUpZZTVfTVo8RzVQMnJRYklsPWkmUXdjKS5a''@;'; put 'put ''WlJ0Y1RGNFpnKWRuO1l2fUlHXVVbQ2BAWm41VSRKaCNVMnNvSX47JSY7dTk3aSgpVlZCYTFUQlV1T21uMDs8aFBmZ3QuTTRZcEk6aGI3XmRwKioobitsL3NOSTRHK1BFK1ZRMlhFYHE3dUUrcGM9OWwvY048NCFMa0txQmppNkNac1VLLHNFYyx8JHUqUD5DPXVoPn1AOiwqIUNgNExBRnlNeTV8''@;'; put 'put ''Yl5wYUIpRkEpUEZVPXtBJSN0QT88UzsrO1IsNntkeDslQzwrYWh4K2FQO0M5Wj97LEx7amYsOT5MZzdPfX5SbCM8NV9eJj85SSR9e2htVVNkck5aLDIpeHBGTGwpSGlAR1NqTUlxTyFtUjZmSVZtbzNrVEYxVzVCMCUwQ3U4c0VpRFI5MDFUS1hrWissS34hU31RS1UwMTlTNnsrO0ZtNyRLdyRu''@;'; put 'put ''czZaWnEsXj9jaVQ9fV1gS2hyPTVSdHBhRlNKfTREVyUjJEprZm83ZS5ZU258bjUoPlp7VmpTSkYxan0pO0RXJWFIfiFhZntad2V7Pj80XSlNXld5U3woRzM5O3NNVTw4e1g/eWgjIiZeQiMveGw+K0dCN2thRSUjOGVxUT9JOnFTPT4rZjVFc3x5bSpMVFdaKkhlY1g3TG5teSNMOkNgTDtPZjtZ''@;'; put 'put ''Ly5ZPFY3Wjp1dyFZZVREfXhzeV8jdU1FSDc5cmliN10xOVk8ZntZYW9HUlFZVn1JZzN6fiNfZENYVHRSM2lLOk9iTlNTZDgjc2VTOn1xV1NwT3FAY2tNJWxvMXQkakhSWkJ1WC8+a3IlUkpeRlNZQlBVKWclXXZNUHVMUUReQ3RyJkFyan1IQ2VVI35RaCVmMlZSYj1xdUx5ezZPUnhyZ1pIUUl6''@;'; put 'put ''Pl1LI1NsazAofj0xM2R5YDx6KDUmPS9oMW4uWWExKyhAemV4QGo5U0Y9eWVPN0Zwak53dj1DMEVtZS5qaClqVCR6JEJddktCTXYuXiE5ViJrRT5CdWJFbW1OYXwyUFdIOClEMTReOEtgRmBCfjtidk5MTzA9cntQc3R3MkVsQVlCKWxHant0aWRCIjR5c1BEcz8yUThVY1BUWHI7Tm1eS3tXZ0xt''@;'; put 'put ''a3VXNjp6Rj4oeEdVYlJBR0FedlN9REtwQnQ/LmFTU0V0Kls7MF5EaCI3U0BodGNRaGpEbFhuWnlONilYQXRjUWhKeDpQcG8pRUB9OkM8ZkRCYXE8UyFDTzJxSTVGOSMwWUI/Om9PQXVML2FZTE5gYFgiQUBvRlYwS1FAMDBKPWxdYnI3Y0UkTlA5ZlM5ZWFvfjEvZjF8Wlg4dyxPSGMoRykxZ1Qm''@;'; put 'put ''Xk5mLHlaMltGd11TbFpiWCR8T3tTb0IqQEw9JGRQOys3dSJBPGVVdTxqM2MkTT0qT1V6aXl1XzlbVGhbL3wxWnBoMnFQVT9bb09leCNCNzpoNDxVUzE2PHMoYSE4OWY9I05CYkhRSSU+bmJAMExFQjEvbGlpL2BSI3U0QTt0XSFyYD83ZTp0SHJQaGUzS3pbKnZFMyJnN0dPWm9dO35lQGE+I1ZN''@;'; put 'put ''e3ZiIkxeUjlgdmJqZUlWamQ1SyQ3UX42STd0bC9sVWpZM0tRQ004WlQoL0U1UVtdaUBCUTM8SGBxSEw8NDpvW299XVgraV10WmZ3NHxLRj0pVGl4eU88KkFLTGQyNiome3VXN0BGaXQ/TWNqYHkvbWBKeiQ8eCRzTzlnY0lWNkdMMio5bE07WnIlYGwxWzdsWWxNMEB3JSV5di9iYztxUGYkJTgw''@;'; put 'put ''V1c0QEIqJW5ZUDBHLEM1XzI/YkpmOFkwZnB1N0I2Xz8kKi4qWCptWWZgZXBrOklLP1kwQGlQOzVnKlAzUzs4Q0okNjpSODp2VytiZE8zKm5gSHMjP1VSJDdrQ1gxejZFVDkrQ1Y5OitSOjBAP11QRVcpbT1OSGFFMGl2eikyMV9rOiJRanJ+PDI9eGhYb1E/cyo5LjcqUHllJjZVKlJicHdAV0lk''@;'; put 'put ''WD5hdFs6KTgkUE1kU25uaUdBUTlrPlFjTXpUIilSeT88d0hyNCVpViQ2NChDQl5JTTpLTE1hMUwhaTRzfGtPaHBHZXo0PnV5NTFnbGV9bkc8USgmNiFdM0h3XUFPZypvXj4rK3JVOS53dyZnRGg2c1JrSmtJPjpiOzk4NFBBK0d4YG5kITsvfkAqdiNYSy4zQ3whTjxVPyFpUHFORTxdd1JDWTop''@;'; put 'put ''aXpwSWZscWh0MSNiXzAjcX0ocVlRdGgyTyEoO0ZCJC9rRipEcjBMTyssLEJBS3t2TXJdUSJAMiRXZUZZP1Q8V2UzYFt8dFtpXXd1RiYpb1IrJS9GcUhfNT0wKF5rdyNQdUpuTzZoJSF1MUtSfmpBUlJzYkdkc3BiTm94QUUqLGJNSyJ6dj9YMm1mMkxgVFhrS3U2c3RCI2BaQD18bWVoZGA6bHNw''@;'; put 'put ''Ylo4RzNnZSx3eiN0aGdjbFB4SWhNW1ZWOk95XT0+Vm58OGNeRkJyamRoKiRnPDQmV0UpZ1JrSW46O2ErMnB0QisiIypYIU9IPzdoRzwpaT8kQj87bVozSTR5WlFddzhWOmN8ZypmSFVEMjNxbzBRUTkzUlUoR3V4WylDfnBhIXwqPVoiKmg+di84SWo+OTBqdXdie1FMLl5xOnQ8bTk4cU88Yzt5''@;'; put 'put ''U1UseyJGPiVaYVReM11YSDFdQXdQO0U7SjtyXVFDL309SUxZWS9Rdk51QHAlMks/OnkyeCUlbUt5fVBHM3ZXejJ2LDtFWHo6KHZXaHhnOGN3UVJicWNVUzJVWXg6VUAwKkkueHxqM1l+TVtYaiYsSW14R2tkV2x6Mlo0cXdfNShfJlR0OWU2OWJ8ZHBLJSJaNT1wVUFNK19SV3JvfltXd2dbQU8k''@;'; put 'put ''LFN6NC8rN1o6Qk9uZU8qaWtCNzR5RE4mKl48YHh2dVA+aWhEJSo7c2VeKG9eNWlVLkdLMDcqRHZAcl98L3RoYikrOWdJR1JlN3xbPV4zXVZGflU0ZDt5U19gZGNwKjVFVn5+eTBXVz51RyxobEw9b09qaEZWVGYyQlVwWSxNd2g0Sy45Z0ZJZ25dOH18QHUlaSxFeC4+QElCbGxGUSk7YXdyal40''@;'; put 'put ''RExkbStCSjJbI0xHLEMlOF80VE1xJj9XajZpPkQoIiF3X3xjLEptU2Zncmo6QCNxRmpUJXV6eSZdNyMxSmVCVHksQjBkbFZMMkwiRikud0ZWSGQ1Zn0payIzZEMmMHlHaENgPTFwSypUdmlTTjFBWyl0SWpMNXRxUmMiWDw0PnJ7P0FvMkVmNnJaXnBnYixYUkp0LHlYPDQzPT0ufTs4YnZgMi8i''@;'; put 'put ''dzdYRkd8Q1VXXVJ6Yyp9JlpXK31qMGVEWXp3Yl1SSk1demNgUkc5W2ZILDFVOTFNcC86U1shS1hhW0ouWH1kNzJAL1Vkem1KZnwxQT5nMEw1aDc0UlNSeGFDQm5HYFl7Rl43ZS56U3VsTzN0Iy5gUGQqMml6JHkmaDZIfFU9SCFGK3o7JCx6ei4maXhQPzBFKG1TR143Kkc4d2wrLmFyIyUlaHFz''@;'; put 'put ''TmJqLiNPeDRuIyN2ak5QY0daVzd9M1V2a3hLeyRpYExpJk0+TV1VJVI+KTowIXEwJm1LZ1UlIzp9YXRlTGd8ZHs8OGFWJDZ0Rzk+azNtS2clfFdwYlU7U0c5OjpoLlQmbF1XJExkfXBZQkFOZkRTdz1AQj0wbTg9JDp4cEs8SDlJfn50UlViUUZLSTQvNm5TZiU+PWs8PWFWJTVhVlIvYShHUHp7''@;'; put 'put ''QFkzWnM9dkZzKjAvKV8vbldiZV5dJFQjaWNbbTlec1ZNbHg4a3R7Mlc6VUF5N1o6Kzh7OG5uNTpyRV82fj86KGdwamkoOjxYd1VyeFJ0IzhkdDZbKT1ePUhuZzkwRl0uPGFkIUhdbjdlLlkwNHhAbyNgSSJ0JlJYbzlObG5WaEwzJlcofno8bihLS0B4fG5gLEtMZnI/MU0uNXIqKktMZD1yKmA2''@;'; put 'put ''UmhGT2p7NmhUPT5JP2lAVEc/RzIqUndqTE1HZ1FtKk08T2Y3TFBMSVNNa1lwOW45bVEiKFMuXnB7SWVMUWJxRVlhPXprelNKS3BkKEFvfjVsMjIsLmoqU2VhO3xUW2IkTS5ab1EuNismOXNvajcrSkpbWmZiakRmRGxNdXo4aU8uamdFUEsmbmlrUGk0bj1eZE4xbEoxSyt7NGJ0VnkiZm5sYDJF''@;'; put 'put ''JChqOFtjZytpOVVZOCklbTtbazprMklGXzAjPk1mcEBEcX1oQmwuODVqZjc6VS9bZnA/YlVDTUNVIXBGVmQzZUMuY3hZeWBPYiEmfG9nJjtAWmEveTspUFkzWXB8U15OS2xQWDt1MSlbVl9Vc1lZT01GbztfOlZVWS5VV29QKnxgajg1b0tbQUZLNzQuZSVSPGxLOUdrSnNoLjs8RmFWMkMkbi9+''@;'; put 'put ''aUsjQi47bWFRRm4uU0JidW1sbTpNcz5dJFFua1dLPXoifDd1cWIlRyZfKS97WlFYNF5TS0dFV1ZmUXxuMngqMjg9enYsZC5sWyZNMU9YMV1uPjVvIXRaUE5RQyl0Vk1ZTnNHS0dsNHI0cnxmeVtwckRMKVFNRU1AVmBUUUUwWVdrL0JwVkRRUSQkcVdRWXMxRXAsW2xHNWFHb0FdO3FEdCRkPlhG''@;'; put 'put ''OkZNSy44W0IhQ3Q4JTNTYCFsTEV2NWIrPk5LI1l2ODRDZnlDdjgyT3Y4djVDTzZJITdRN3VvezRgaW83SWR8XVZDMF5wOk1IL156PV5OTyFEa3hgSiJjLnUvdVt1P3VKNlZOckcqKUM5RnhHb081S1laWVl3dEduQGwjNXpZT1lgOVl4by5uajNVb2o7KksmZmt1Iyphd2o/Q1V8OSFPN24pNiNm''@;'; put 'put ''MFAsNTEzVXhlbEBhJjhfOVlKO3tjLyFGd2NALipeejY8bSNabm5DR3M0USVpd3VKREMicnJPV3hEbFpPZkMpLHEzYlshU1ZvWVVKWTRhMmo3YXwuSTtRTiVMKHxhRUl+dW95I1tSUCNmPTVoQn15NjFyMGpDWzY+fDNgeVdaMFR3Iil+NiZKW2dSTzAsKmQ9RGBSTShbN2hPdW99T2I1aEZMT3VM''@;'; put 'put ''NTorR0FlVklnQWVDKVNXa3V0VzNyVE99PmJUX2lwdFQodztCQCgsWmNtLzVTaTkzbVF1RU9XSm5WP15PMiwpMTdJakxIOnU2byU0ITNnOW8yUDhDRmxXMHNeOnhRW1s9LnJVVFBKQFRVOWh4bnhuKnJucU5ZQ0hbZUIzSVt0a2MuSkdfNlo+JmBDRilSLCRVMUVSeyRTfjwqUl9FdyQvak08bT1q''@;'; put 'put ''VFJ6Nkd3JC9WR2pNKzszPmk+R30kX3dHS0Jfc0cmRTZzMzBGUHhiOWF3ZCVSdj9sbCNHKm5lRWhib2MsUzU4ZHhIWlVSTFBmT0ghSEBUS1deZHh6U2FCcytuWzdHYkpdVVI3UzNHfWMqbnFLUDBgSjt+OyNmZiV5M0Y2elFDeUpnQiJ6YEpANms/SlJQQHkodFlwLy9KKVhMfStkOU00NUVbVVI+''@;'; put 'put ''MTtjK3gld1BhfUV3Rjl+PXNWNVolbTNjUTFDQVdkZEdBQ0J0PD4mU0ZMMWxjd3xQJEE9SXRNPyNsMEZFQ1AvfVglYEtGMTRDMmkoc3tmdCpTVitySWxbe0xfZ0Uib1BeQ35wOEJ5JlBlYzFNPS5peGxha09iWDBlS19fbmY8aHo8VWVoMk0/JSxubGRSI14vOmt0QUZEbVhgbE83VmBhVU5zbHVM''@;'; put 'put ''LCVHYS8lM3lSYFgjeCZtOj9kSFlbM3pVMCtsckIxTW5VQWVmTGdrYDJwbmtgKGgvPDNydmg8LmxaXVlVT2xbUCpWQl1FfHg5VTY8IzouImNZbHtAYGAjaVssK1teOH5xbjRie25ya09aWkA8O0U3OmFJRWBpOV9eK3V7KEhQM3AxU2lSJV10VjU1Zz0zZFk3P1gxX0txRlYyY14vPSZIX24+fE9Y''@;'; put 'put ''cVdhXktNNik4OT85MUU5fUwhb2NnNVFnLH0sbFVkJFp1T2c4W1pubyRFcCJUVnldfWYyb2NjVjd2UU49KWYyUnk2Z0JVeW9fSjg3O29KRmdsc0M4N1owIWZnT0tILlpaZXchcDphaTMufS82by48XzVxW0ZLSlJQS2x3ZiVqL0Yha2B7TnhwS1FuJEgwWTlfSF0qeHhnQ0JsQWxQK2UqOXBsVktn''@;'; put 'put ''JUh+dXRvInpxNmhuU0R7akUvZksrPSM9fV9vb2Q2RXBEKD46IWBCZGl8NTpQX15dT3BPJHpsJHYiVlJUNDVwOmhZamQkZGliblprYDdTMzFZcE0zd3hdb1JWRjt0IUBWVSRAKTZkWVtyXU5WZVFvQCtUZTl0UDJ2dVRXSX1bX0giTF9AYFJQRHYiTlolRT4pbnssN3lgIXgrRlArPSlLX3BgNVA7''@;'; put 'put ''Y240KiZrSHRRSkVOLmVMWVRCVW9SJVVuUHZGSmlydEQ9Pl1vOCtHVntLfVcqKTRnaCxlQlFWPTl0c2FbMkB7MTRoNzU9cC46OX59ImxhPTw4cFJpV0g2dDU0M2JjXV81NUIyaCY8QDFRJXFwb0VgLDxtI2hMJSxRaG5gUTJoJnNzPDRKaWRDQVNZJT8sQWs9XkMyQi5idiZzfn1FTX48Y3pydH1n''@;'; put 'put ''TTpidk43Qi5MLGpjQmJIMnEhOWs9eWh8OUxwYyNnUjJmV3cxXXBqUlozUDtaRjhuUS50NU5jSHlBJFpUR2lULiE9cm9qWyZTTVQxSFFQTzhESD56VGE8T2MsPXh2T20lMk9YekhhY09JKEJGYGs8biJualttXTBtdiMjfT9bRk1hfj9rU2dfTCJYSF0/N3d3OEQzcjs3PXMqJSYyKXNIdEldMlNb''@;'; put 'put ''cldsWWByYUwuVCF3JVNNIXdjbFJuXmY2aFRKdFliJG46M1gpWjxweWJWPWwiLCVNSV5NUV5sYEZrdzoqPEJhK3Fie3JyWFViNm1Ofj5vY2YlNGI2PkFMXy5bNXpRJXFkVW4mPEAvcDcsbCg3VENlJmVDLEJ8bS8uWz8uRnEpJkxZZDN3VF1URjpPZCR7KnwqWCJQXzZZMjReS2FKXSpnZjJCTyZw''@;'; put 'put ''fXEofD1VTC5fO05OfFE8PHBveVVgUkZZXjlWcVZ4Oyk3VDh0Z2p8YTIxWUIqaEgqWG47VTMjbHJ0eUo2MSlTPUY5TVR2JCtwQ1hZc31baCEpK1IudSRvVHs4IS9mMiYuKjRsXSptSkt9fHRzTih+TV5saz46ZHNwVz0mUnhzeGkxdnxbJiUhWGNUNiN0a0RsTmJ2aVBDPlc0VzFFSSNMMnlTJE04''@;'; put 'put ''NFQ+Jnt2YyRNKk5kdjJ1ZiMmYCU/MVUuKyU0LDFAKn45eFU7PVg2dzpLUTN3dzpoNzVTUnN8R31IUXRxJTtHJisyKHAvL3t6S345cyU0OmYyYzd7SmdsfCprPzQkJlA0ejRxfHtAbXgxUjsiVH48ZC5AUWQrWDUxKVtfRnc1dGppNDoxLC9Kdk0sKTk9Tzhpb0wzMzE1Jk4/eSQqYGlpezg/d1A6''@;'; put 'put ''bFEmZEEzeyxbLC9TOV4kUHgwITFCe1pocD4jO19GQn4+LDNVKFNKckEzUztyYVM1c1U7em1vckZCcXJbazkmOz9dbnBUcGspXjFVaX5QJEN9e3lkPixiXTk6eVhNNUYzeXdPUzNuIlEzdz0jJjZwYFJNMFBOayZWR2NlWSRWIUVOZnBwaGVUNiZiM1VFITIsJWliVm9HKk09ZjRtRH5MaFNfQWBB''@;'; put 'put ''fC86dXxKem06TDJXV1YuR2t6YWB3O0c5RnJKbCQ2ViljKm4wKXdHV0JXbiZiYSR1NX1vTDNINk52NVtgQSZfL1l8WyguNmd5SGF5TityJmU8fTdgQE5wbDcpaWw7SkdiJVpuSjhuTkI9YltTXWI3PFUvWlcvd1BaLnBvWFZyRHZsZ2k9XmVrUUpmdkdKOiQ6SDMoOiF+Kk5BK086IVVkSTYyKDZD''@;'; put 'put ''IUthKiUobDZwb09nT2J9cERlamRndHAzTGRIbytqdi5IX25wLmdQVndLfH05emVgNWZKfXAja3dZXVpWblQuNlVDeTUxYEtUTVs/Q0shSlQ6LH5nR2U5N2VLLnVyPWxmTjUiXixiM2lUMkNEYlJ6NHlKL1A2SGU5KWZlOTE4dkQvMGJ7aWZjbDheP1JWMWJqbHRqWXxoQGQidH1mRFNnZkFAPD5T''@;'; put 'put ''ZCk/RF06eG0vZDIhMXtJOkB3c2xZRDt5RUdsR2U3N2IkTnolJlJEKmw8L10lQkg2eiNwcGpja3wmXk81bUR6VEpPYEQvKmVBTH0/ZlZdYGQhYCskUHVbXUBXWnBia3lCdmFYaEZLfCRMOy9mclNLS0k5dHExbFsoN1Qpc3I1NDdHXjNiX2pGfiUjUEMxPjpzTH49Nm90OVpxK3RMUTorPyopI1Zb''@;'; put 'put ''M2dnS291RVZRa3AjeCNmVkguYjMydlkyYWQ5U3RvbDl7fGVbMnNab3M5SXJfcFpPWm8jPHRTfU53MC5URE5TbzVgV3MzN0k2TEUsQzBsaCZ5anw6fHkye25kej5ML3I+RUA0fk5nQlBiPkJuTWp1c2BTWixyPk86bClBZFN5YHJZd0MrLDl4bld9ejkofWBAODtzTHcyP11ObDgsVztYI2l9TGor''@;'; put 'put ''c2F9bEMwOjMwbX1iUW5ZY3NUd000SChpTSxANGxIMUwzOy9XOy9KJiVuej9lfTg5Ozh7dGQlK2oqcC8iYlcmaDY1djkyLmlxKjt8U08zUyVfWEpOPns6RiF0VUlFJnAkZC5oZ1hpWD5xdHtucX57QSgiKix3JiUpZU9GPnIyKG9daHtDXiFbO2xBO05wOW9fIyxAK3x8e3hYazlzK08+JU1xUzY3''@;'; put 'put ''YylUVVJNSG0hOWVKUzRhb3Yze0VNSzE2QCorOkZ4YzlUUW0/eD8oNSFkWip9W1RkOU0zaUUoaTd4aVVdd016QSYlPngoWyQuZ3E2Q2hxakJaezcrUEFHQiZRflhgdlZ4Ykx+Sm1SZ0EsV3pkLzVzZ1tkSCozUE5NVDNhRmFhUW1eRk84JCI3Vl1OTVk2ZGpIOitIUiR6ImtXX2ZMP3kheFg4MCxu''@;'; put 'put ''UF0xbi9PQ0tpfEpMYV5jUTM7Vzs2c0g9RHY2ZGxFU0U9XSpmMkIyYWxiTj5vXTtdN1FiT2I+b219Rmp6YD9NT2RKZ15PayRTKDl6anptOmA4WjxgWGQ+RTc1NitnUzEjeyIhXXA3YUN8TTMobFdXcDlSLlFkVCklLF9WVXlDKCE9YWN7L3NvfEBPWEpZWyN5ckxnNitqZEdiKXAxPmpLfiUmfCYv''@;'; put 'put ''ZDkhTk9FM0I3PHo2a3ViMlN2a3UrMUwzZVE/YFNePGtxbSlRcUhBL0dPRmpBOmpkK3xySGUhZDomYmhhR3cybSpQfWRnSihWbCk8OkYhMGBsL2tSKnsuW0Q8cCIsJUQufT8/NCt4SHBBMmQwSlg2WTdKfm4kOnIlbXZXJDVvVVQwPCp4YVhTTmdpWVtocDI3dWo/QDAvKiFHciRrbG0iPDV3IjlT''@;'; put 'put ''NCtTInc2Jit5Mj9mZUFAQT17KmloJTZDTnF+UD03UGA9UVFCYkkkamJtNTNnRUU3PVBgeHgoOGd6cGNDMH5hKnIkMCIzYEAyK0cySChHX2c6WUkhX1A1Ik54XllILzE8cEZCL0hoT2ZFRHRAbmxmNSprQn5MPFE8RDVIPlhKajAlTHBtZCpqNWFgdFFnIl5qaGJOYnhOQ00qYThSdmVYP2tjTGcw''@;'; put 'put ''e1NHTSxYamgweTpJLjswOXdhT1NEWlJlTEBSLnUjYldVKzQyWlZfUEtHeWxRMGc7WEpMOCtfODZaPVZeKGJQLkBeOXc3JXxvW3JzJWlAYXdTTX1YSiVYWCxnP110TiNKZlQ4MXROdkhsZjN5OUw3UzUsbSRhZXYydWkvWiosR2xeR0x1REM7fX5KT0M0TFB2ekt2bDlKeV1+MTBqamo8fURMc1Q8''@;'; put 'put ''Ojs3NGtmTlRXekBDUjNCdTs7X0ApOXI+XigmTUppNU1YWERrVGE/bFNCMkNaL3RYdEx1XUI2M3kqa0AkRyk+UiwhYF0kMnVAJkJ3KTd0fG0/L09JXk12Q0JVeWE2I2lXPSM8dSRmPU5fSFVifCVvcUZFS3pHe2BxbERZbjAsfndqOWU+ZkleP3JPZSpuOWUiWEReIzxzRyFwUyMxPFZPKiZzOlRa''@;'; put 'put ''bGQwbz07OHFhVUN1MXxsSEJgdVJUbVY1KUdkd3NpNXU2NkdrVUtxckY2IUIrJHR1bz0lNH1IdEY6cm5XKkBYYC9yYkRGdnBkditbMlo7KWEzVE4wUl5+QT58aWRxWVgjLkApcUNFOUtNSkJmS3g6aEdlZGhNNkdleWxBO11KYiF1YnlpWndGbz5jV2Q8LHhRSV4qOFMlITZLTHxNJXYkI34wXkBa''@;'; put 'put ''WjgjQ300PEowJjJqZkFheVgiZ3FhYkVuYStmUCVNYUdLL21JRzcufmI/cl5SMigxdkgsWmtmPSY0a1N8aCJoJDEhV3FDU29zY0JLKyttQl5lRlgzdGBKc3NRdkR1aHVEZDVEPG5Icl5QJVZ3T3U0IVdBQHkwLCp5MGV3Umk9WWhPZ2ZNYS5UcDdfOUUjelpNXzBDVUlhYHRgLiNNUTJoR2VuWHNi''@;'; put 'put ''NlV8TDkxMTtvfn47O09DQkd4VD1BNkYyYWlnYm1lcEZMQ0ExRC5+ImhkMEljSzhgVVVTN0BhNy51TSJyVzp3KmNraz8iaD1ZWjNuNkYhY2pBWTU+ZTwwWHA3fSttaTF2WDU3MUNeXzRiaG4xWmVtW2w2WGVdUHEhITFnfiNrI0hoKjtAUlVST2chZThoZCZPUVVeQFYxfmsyeGRYdmNSbUowLE10''@;'; put 'put ''YDd9cS50aEtIfUdINV45QkxkYVFoT0A5I2RWZ0VIdnJwalBddXQjbUBFZnZ5ZENoUnNYWG9xb1g8dHV5ekQ6blspNHRVQD5xfC51amA2SUc8fGtAaXFwOjohYW8vcXkyPyspXSFwMF5QYkVrKmgpL2dRMURyY1FLZFZNUTxzMWNLNmJpb1teVVEmLEJzKmAiO3dpXkdub2FIcmFSPk9NMTdKTksx''@;'; put 'put ''O0AmfG9aLlhxb25oJGUqNCJMZjYyRHp7eEZzdGZNJXY0VVsveG8kYSxdZnljI2IxRmY5MT0mc0hjYTAuIWBzWDdhcW8zVkswOFhzWGRjcCp9aGszTHJkQkBUa1hjYzY0PVZJXm83Lj5KW0Z3eiFrRGR4JUV1W18vXkNRN1dKPF9BUWRsdyFMaE48UGMwaWghPGgqZEk7Lmp7OUthc1UpZHUqZSJA''@;'; put 'put ''d2ZGZypxKWhkKm5oM2kqZls7PWAwVFhLMWBVRDxYZlQvP0V1SEp5UiU9XkhlTUVvaWR6OVRrKXF7MntOUDtFalFZWChFP3MiWXRoVlh8VVlwWHVDJSZpaUpieGM6KUAiU11vTHlbQl9gRjh8WWojKSVGRlYoM1Mjb0E/Rl5HZTo/NHQpX28ucWVJakZXL1hjbCY5TDNGRl4za0UyTSIocyZPOHIz''@;'; put 'put ''IU9GN2NqPGJvWVp1SVcxSDcvMX5jakFmRGozSCk0Vn10U0p6Xm9gOGZTIz9QOj1vK1NpZC82ZT5rOzd3L19JTS5Ke0kyRmgwWVVPT14ocHBPaDAhcEBvYmJpIzhsTHVTWV5wayt8WU9HOGc7VzhAKFsofUlwTURQSj9OOCx4Si4hO18udmBmU0crcDZ9dTUuVjUlSXlnbm9ZV0dlcl5pWXdtdU0s''@;'; put 'put ''eHBUK2h1bEAxUk1vYj4lakxSUmYuL083WlVPT1I5MWNdJHY1M01fVSZeQEdAViJgcSJbO0lCZiVjdl9NLkpLdjhSRHV3Ok5CUCo2I11gYHxRcilSP30wYSokTXRIMjo/cTpSOTF9YlJaXj9qUzJeWXpKS20lYnZ8cVllJHp7K3oqVWk4cjU9VjBDUUY4cDwran1GdzAqdXdKcWB3IUEvNjxpJGIs''@;'; put 'put ''Nj87LjllbWw5I2ZTXXtEKyZpNmo3XTk8QCNzbDZob3FnS2ddL1k8Z2p+MW1fKmB9Xy5NbUUxKklYfUZqZVBgaGY4TlJyNUskW0BDODVPXXJ8cSIuQzlNOHVNPDREWk44d2MuSlJoNzhFSSYjRDgrV3IuPm0/K29Jd01wLzFoQSUwRSJQfkIqKDRlJTleSEQ7P2FTaVM1T0NXI0shTD1tRUQpYGBJ''@;'; put 'put ''ZXJSfGdVdmRUWlohWHZTUk9VK0xhWnJtJmEhXmNAVEk6QWZvfEtLZlhKIVI3KTROISw1R0JKbGV7fTshM0wzcjNMMzFaUGNtUiMqe2FkMHkiS00+aGchMCEjaWlCTWFteTx5Zk56R2FwclA7eS5RO1pyRXddOGR7MEszdFBBZ0NlYCREWGYqX19+Xzw3R3hTR2hIPGBzb1Y+YjxnSj47YEgsKEcm''@;'; put 'put ''amkmbH1QdGVTZHZbd2BKK095YksxNklbLz1JNng7UmhBL3g7dDJFW2hLfFsjfEI0Zm0mZHNYfFowVHlUeVQxNkNJNlEzU0c5fU88ZnVPb3IpfFFtMXZ0JVFoQVpSJD83fHwsT2VdTTMuWFQlZS4ycDVicDd+diVzZEUiW00uXUhUXXYmUU19blttXmxhOk5sODR2Qn4zL2FfVkkxfiZHOktkNGxh''@;'; put 'put ''WUlEMC4rKVM2XmRtNixAaVI9QCo6RmRjeD1VYDcyZi5nSWciS2w6U1I3N0wzdHpjYHFVT31FVFUrTjUrTX4ze3JjUXp3SnopZCtSOzE7QDB3eDdGN3JzfVNKZCI3TiVJay80VSUkayFke2B1MUQ4Z3puMW16I34zJXI9SV5vNywqVipRZFEscDYzT0wxZkQ8QiosXW4pZn15UHVEVjptTmEzT0tK''@;'; put 'put ''KCx8RDFJZGFMMU5wMkJrRVQjcUpsPV1rVz1ZYUxMI1hQQWlWREc5RFtoJnBrMDN2d1YpV1V9bDt5P1ppTllgTHA5MHlEc05WeEUwVjEzc3smO3pucFRoKUBoO29ZYWEhPz54KnZzJnRXZ1Blb0VwW2xxbFFBL09zTGx1JDU9ISRnNVt7fUAwKD1ffmt4KHohUS5dKFMiIT8yTWdBZyo5Rz46O0Vb''@;'; put 'put ''MjVZMXRNRko/WmZXIUIya2Q5OjZ1MF9iYDpfQFpSVW8zSExHJndiI0ckdVZHKFVmMkhsUFFKdT5TJltAdmcyRVsxS3Y4WERlfkdDKjB9TE5DIjN1RjkvQk87OyFbLnZHZXBKcnVtfk1lQk9+Qnc0ciFUYCIyXmlFUnZILD4kST1pampaZVtMPyE6JGl0dFhuYHcxbFJkIXVfXnFQTjM6eV1ALHVI''@;'; put 'put ''eERJTkxDOkhWUG9vXXc7MVRYZ0cxSF1CfWNFaU90dTh6SFNNa00+NClmcTFyUlN2ay9MNihbT3ZIS3RgbHp3eVt0OEhxd2Y+UjZmVk5hMkk9TD46fDJxd3l6K3A0SX1ANz4jRFswRzo3NCxPUlVBQD0/VzgueG4/SyFvPExbaDdae2VrYCFsUCxUWUske2FwTTsvLnssWSohIzBdbXkke2cyPFlW''@;'; put 'put ''OCQjTVttcSM3fEUpN2VoUHdraDpfdzE+M3gmSCwsdUp6SitqeERqSl0wTzlmOlUhenxURGFmYWFPJGEiZnxHaUkxd0t6eSs0LCt2fl1mcElfTltFNXx8LE8ibUVFU3hZNk85Xi5LTTgsXTRRbmBVRihqQilgcz82VUBObEkrTnRHMXdxZjxCeHk8NmEmM3dgM0ZdMjBXV0VZYkdWVVFVYEdvLGNI''@;'; put 'put ''X100dUEjfXloWkUjUyQwbW8razVIKDMyKTZgbzlEOCxzNX0lVDY9bUpmO1o7PFMhN2J9R31kZiUra30yb3U/WkJgJU1SPTNQMDRsZT0+bFc/I1laZlU1dj9tOjBgcUY1U2g4Xlg1IVc4L1Q7VCZSb0Y4Y3J6PyRaXUBYK1Q4cklzRE4wVTlKaExLVzw5MDA6KTN1KzIsWn57Nm51VCE6M0AkKDEh''@;'; put 'put ''TFtnSUkzIVNNYU86LDJ4ZjpVaTF7TUBLTGZYW1czay4pP0Y4VjVqajY9OGZDNUliZ0JjLHJpSyk1QE1UZWdRQ10pJHZ5RiE5IShOWlhaZUUmUylGKykzRDNyU0RWMUgwLzc0TVBiR35UOXkpR0p8bD9AJGdxKjFQenp4OHs5SVA1bkJWISxCUWRoYTR4dTh5bGx4bCpqU2dTTzZGZ25iNXZeXV5O''@;'; put 'put ''ZEo1VDlMXXgsKyJMSC5SX2w3VlkxKHllQnVBKW9jd3kmMDtGJGVrI2hiQEU+bUFOajVYRFpZWy4wMltZeWpeMGlbZGFWQ0AjclJ6OGhKbGJtdUhnOX0xMyZKKHBtYzV2NWU8L1ZwZmBfQD9qYiQ7ZEZGajtBR3wjWzdgQElvSFJrOTIoX1BJOzN1MWVNbj1rQjNIW3EmM106aXcwJGBxbzgiNH42''@;'; put 'put ''MjVMaVJyXyRRYlRPaSxKeF5XVnFvdHtydDFNZHJXdVhAUGpRNmhmdj9CLjx3ZWYqKVcwUENuLzFSfT8mWyxHMWFIYTo5M3paV2lDWkw+OlsmVW9SeFF6c1hjcjl0aGQ/VGNgIlQqWkZ5UGp+KkpDdGBeSVE1SGZjQ113Qmc3WHUuVCg2O212IlRVQHV2SFBidTp1YWVSfVZxWkVXQjB8fVJYKWgx''@;'; put 'put ''PVghTzE1TlBTImhkYCUwIW0zamYpPzY4NiMkKjdkSipVSVh4RkNQOHo1Oi5WZW1CUWZ3Ql4sIWpPYXxvZ0lme2J5OWt3fWpyVUljeEd0Y3ZHTXlzdy94ZC5XXT1wKSRpdzZldWo9VFtKbSs5X0kmMUc/eStQSiRtOHksYUBEYnZze3VQJiMoXU9KQkR4LH1RLndZYVtHd3UzZGtOZy9rWEpYY2x7''@;'; put 'put ''KCZGUWpXTkQpc1MvLiJjVlV+YjxBel9RY1pyRU1sRTNzPitnRlFhSFZQTWdTPnEwaVomOTF8LzgpNjd5e0JWKllWaVZQSnp1NytseEgxNElicVNfeXJ1KEZmS0pDYHE1dWshW3ZKKVkrRXNINmElcWdidm4pNEU+VDJkOFkxSyZ3PWtgdHRwPT09NEJpdGhlY09heHtdXXRFXzk1cUlPdkdbY28w''@;'; put 'put ''QkZmcXwxMnU1QmRENkc1TkFRYHQxcFB8JFtqR25wXVVtRVMyZU1IKkUzZlt4Zms0a0g5RDQ0YnlVUU08SEVlM212UTUjazZhYU5Db3YlK1liaTdrX2NZKDhHKCtvcEtOUDUuT3E4PWBhRVFSb01wPDNhN1JYKSliOGkpYnwhSWJdOkozQ0lUQ0RsODBTNV1vRFszYUFdX3EweHt2LmlDeylZeUxJ''@;'; put 'put ''LGJIalg9LGZtaUQ8QlkvSGV7IyU3SU9mP2EqZkREa3VwSHYiXXx6eFFHbXxHR0M2SkEzO05BI2hiOFtQJXNLbGtJQyhjbndxMEVkNyFoTWVPW1dOYHJPfXQ5Kkl3NlJgKkoqUjtjUD9gWGpaVz0pLEZwZjsjWDBOWXMheHEmOG15SSRgPHpGKmo4Vn55fE9qSyNZX0l9TEJydERAL3VYTFI2QmIm''@;'; put 'put ''MTk0L2lHVElZYW4sNUNkKS5aZyQhNzpKSHxvcHpdM3Y0JVdKN20jeVIyelFDbXBiLG0iKG8vS1dVVUNidG8jN1Mob2xRVjlTUEVoNT0hSTlVa0h8fThhWWUoNXJPJlNBNlVnV2Rmb3N4T3d8LnZ5e2F5QFRZIVN2UXc6S3g/OHlqWHhYb0ZxQjZCLFpGZztpTV84Qk1OeiQ7UHA9VHpEenZucHp+''@;'; put 'put ''dTM0eHk+TS85L2Rudm1nMHFsZzRjO1toVTljPmA5aiE9YWkhW3lbb2w5a3B1ciYuTiJiRGJRSWNFWWY7b1EzOFg7cz84JXN4OUMyV21SNFVoN21NN3cyPnh0SThmIS5eVUJCSGBJIjxQN2NBYz9rYEo5QkNoNERUIz4yXVF6eWZweHFEYSVJZzVUXnxjaDt0U1ZmJUMmVDMrVjFjclhkQnghKkNY''@;'; put 'put ''fXFCJnFxU11+RjokQmJVck5OeW92fT8mOjYrfEU4YXJuaFUrWChZeTA8XnBvPDdwNGZALGlOcjhYa2FwbiFMLEdNPjp7YEc7aD1JYTw1fFh4b3clXmJGNXw9MDs0SE53KmF6L3MmRDtIREwuMERFbDQlUDh+fDRlUlo6P21TSWM7NEcyPylWMFtOMzVaaXYmNHRIUEwoTH1KK2VSNEV5dSlORntl''@;'; put 'put ''ZERALiQ7ZmhlNDdpZGNjLj5EcEx1P1JnUXR4KTU4UyM7TmxlMjssQHwjSDptU0JtJEluO14mQ2MkQiM2a1BOM3ZgdDVVPF1GQSgkdipBe3pNfWZWUzhVPFoheH1DPzRHISwve0YzOHlVfk45TEZreFImKUgpNWpnVihNWnJqYDpNVDt1dGtuIWZYR1ZVWjdVYEVNJEM/XXVRPl55QHFVMCR0OGY5''@;'; put 'put ''UHc7M3YifHQxKW5GR2UvdDQlZWtPVnJvdEdTWi4xdjg9SHRKTklEKHdBbShWMS95aUc+OkpKPWQxblBUJVAmJFNSfmc7QmNYcn1mIVFgaG1ge1cqXWtGK0wyPFk7TCEkXXZoJGU8MTdofW5OUV5ZJC4lR1FkM1NPJl9SSjZ9IktiVlNYIUsxWT03Ljskeiw/b1EzRGYhPSJaeHhsSFZqVkVFTXdF''@;'; put 'put ''ZEpKM3h1N2xxI2B5KnNVY3goZHoyUmhxP3UlZkZ5e2NNcGtwbWBVQUxPPHleQn5WOSxbTzd+NWZZTExuWHxadlE5TXIlZS9BOiYjSDUzNFt6PTdBc2QhQ2ZaJnoqRlp1eTBmOExocU96VjlaZV5feFd+LjZNdlBLLCEhTj5OaHAoT0QwLEw6R2BTcDg3SjMmfnRke3MlNSl3W3JpRj8lUjVMZHp1''@;'; put 'put ''TEBLZC9NIWcoT2FrMzRsenlsezp9UUx0aHEkNFhjdSFyQjJ9Q0FRJUwrSyFxNWhvekhHRml3PCshTk5HZH1oOVUxN2gpcHdSL1pAe2AjLGshZTFncWNENWBrMXt3akguaWlnKHcme2tJREdsS3ZKej9tZV9bTTZVRztMaSgyT0ZWOFV5XTZ4WSxZQykkKyojYFBkRTxjJVt3IUl4enh9d2s/cWwo''@;'; put 'put ''WVB6LCNoOE84P1tiMmJ3cmd2YmQpXig0QWt7SzY8RHVsMmElemlFRmtnTUFBKmh7R0J0VkUoTWVjInlzKTx2LCxHfCpCSUlUUFtPenRLVShGUHZweG1SflhBQUFBQUFCdCZGKmhEbHFpMit6I2x2VEhKRkE9IThDS1c7M2dTKnByeEM4SUkoZDU4V3ZQe3luNFR4YjlSRjdzajVFK2BNKSQiP2J6''@;'; put 'put ''K184T2E1WyRNKUddMkJybzN8fDF8ZiJfemJVVlpDSiFYNzw/TD83fTslUExEcm1KTzZrKGlFbDVwOyMwLzYjQFVzP3h4fUM1Y0BrN2I+RXliZmplaG14TlZUbEk5Y25XcVpMOXhRVTBsTkkjJigkaHY4L20mYSxzMSllKEhPdFJybTRTYXhicT4mYD92ITZIeHcmanN2VE5sZ28pUHBUMVp1Tzto''@;'; put 'put ''XzQvM35oNX1sW3FiIVFAKWNPZ3BsZTR4MSoqWFdwYjxkWXswW0BqUUA8O0BjITF4e0xZfWFeWENDayNwNFYkcDxKUlh7VVl1VjQ+c3llMklhfHhleUg9SjBeWGh3PC4yUSohaXZVTGcyJn0mS3E2OShZKGpgMyVseV0mMjtyM3JuJUtKJnVCSilOJjBefj9QWGswJT9BO1sjRS98YjJifTIsVzdd''@;'; put 'put ''ISJqUiJNR3dMYix3X0U4JDwjeWdzOXA2NH59bElFai9HdmZ2YUVIYzIjdz9FUklOJElHUXc/Q08mZ35rXk40KD5DcCQ6YGV7aFllLChnIWJqPjR8IXNZbU86fik6fkNrPSNAcyR1SGJqTmZhSVl3SzdRVXg6fVNJMyhofV0uWDMvaCskKUVbYkA2T2ZSMz9BdE1nNzZAIzpmeipPTEFzSkowIlFe''@;'; put 'put ''YiVwYHdpUUBzblQrdWthayxncixRXXFaeXZsJkU0UTpCO3JfMHsuSnBkZ096KDdUMyFkSmw3V2JqY3J8PnQoMVk6RyFXNlJ+fW5STUFgJTJHQnJ6ZDNafFt7QVQ/O1VyOS81S21GLEpPbXVSMyImKE1rPTB4QW43OGB2Mk4lej1IQCpbKTBpUFtfPUNfdnUzSVlSaT18PTl5OVhiUj40ejEpeSJW''@;'; put 'put ''NkdsQnplZVs1R35aQFV4JkUqIzZaRllNOiNYcSpYOzlZPV98ZXtMYixDeTh9VXFMN2c7JWtoRGF3KkBJN3Ekek5zbm9hN3svKEI+RjZdSDtwPXhsTnY4XyZWUzJ5OXtzPCVKXnRfd2pTVFV9UFo8LCxsfiRSbS5uTG5JMClzTnV+JmZuYWMvOWRJQjgxWz18TStFUTB1c1ZVPz5rQmFvOzcqSG19''@;'; put 'put ''ZWEudWtZeTJOR0sjPFtPR1ohM1A0UDVLbk1SMWNpMVpKPXUialg6SktmUGh7KCQ3XWc0ZTJibyU6cUhTYjxdWjxnY2wyMyhpOD5PZjRCN2NqbTg6akgmMkskNHRUKGpzY0pwUVA7P0EqWlNuaVFMZ3crL3p1JGI4NmE4QmlOYUh0ZS5LPipYSCMvW25xP1tEa19Mcj0iPllSVlYpITs6bEcqUzNf''@;'; put 'put ''PXx8Q0RDT0gkTSJwX0V5X25Aaj4/fXUkcjE9cEVjXWEmMjp+e0piZHd0JTA1I1NtKFRpUWskNStiS0w0PF0sZzhbRTNHQU5RcW49XVhvXVUuKlR2YCVtSnF7d0BUcyp0TGVuJkQ7Vk5pZig7Xi92fVsqfF9vZmhLJDlHeGo4OHZtcmwoLi9TWTtbTy8hcE5fWj9sPi9vVD41OiY2LEs7c2JbSX04''@;'; put 'put ''K2htJFBIe0V6LnNLd05bLDBvMjBWaXZidnNXLkxpNClWPDc7YlNjWDdpd35xVC5WSHVpTF01fjt4NCJGKXU8TFVwUjRDPltASiF0ViExTCg3c3FrTH54NXZwODdaSnh5Ump7ZDAqXlg6U04pflE3ey5HKzl0aWM+JVsoO1Z6P3sxTX1NPHJQPE1aUlpCPitNWyUmZklfPkBzRFYpRSFmKzlVdUBp''@;'; put 'put ''MmFEMnZAVz4keDZAYGhkLHRxQixWQGAzUWpXMC95VT8vfUNAKTJDe2hxXkpkUUJlIkdUTTVDMlIuOFI7NUVKOX02bWtKd19XWF0lYH10KzMrbTlDVGAheDIoYDMhdll9e152a3BwLCwxaUJVQD0vL0IoY2p5dVJRXiQjSDtlUykiY05vNUJJQHpELHJTcFlWM1hpI2haUmNoY0AlUDAqaTcoSjRm''@;'; put 'put ''TE9aPz5uIVlnOTIsfHh1WiF9eVpiOmk7Tkl4dFJ5R1JlMipbd351fkFWWXJmeTd4TGRMJVR2Umk8dmRYaSUxSXYuQzVAWmMsLDFKMUA/Vzh0RGIyNUt3bHhYNn5ObGwlOzthQ1pBRUshKHZqelZxYG9NJFl6PSxYQCsrVCpfKnBUWS4wUzZ6MWwyZ3hjMzs8eEA3cUx7akE2MDt9V3t5byxUPTFj''@;'; put 'put ''LFUySWpRUC5mJW0yYzlxISNbWmNZY0NmOX0sfktpR3RyeDpwbCMjeipBYjdpOHIoeSl7e35fIV4wZXhnSm9YX1h3YjUpXVtRQGFzZGBQaT4+ZzlQMWZUZXtMOF0kQzp0Vm9gdCM4Vn5KRTpAbHJPP19qTWYxZyMmK0xGPC5VIjp7ZUpYKz9iLyxILl5hVl1RWjssITRgeCoiUHI2Vn0/PnIlRiM7''@;'; put 'put ''VHdSbUdtcnlBWSI3aH1vfFJQJEUiLnoxdkUvQy49cl8sV249RE5bLD5QaDtKMEFucUtSNSNNbk86Yyw0ejExWF43LEx5d0JUYVFsMzE1MChtd2o6YnwsP0o8TH1tcVZEWV1vRWlNOWtqUnomV1V9aVV5QThVMzE+K05TOjVCWmMydi9GeEQjYSw2PHk/P0wkZ108ejwuIVBIMyRifSF5NzpGJntW''@;'; put 'put ''XXZTTVp4NSsqPXMmRzhSUF09bXdKdTciMVVsfCwpRXsuJXhbKSVARUZyZXJYOGM0O1hqUnZORCROUmM6dnNjMXVHZ2p1VE50Xi99R00lbEB+UEI6XUdeeWB4a2pxYihBZzxnRXp8PntTQkNBQ0AmV2tqUVlSJVNSIUNLcjxSPTwuZHMkcmlsRmJuRzB2K1lRJjEofF5TUXI4SX1EUH1ecE4qY2Nb''@;'; put 'put ''R08/XUl2T1svPlAoWGhBJG5oZG1zU2lUR0ZeNypaVj8sUGk/fE8uXltHeDc2Ll4/WEQ6THRya1FkIi9FWyp8c0sxK01jOE42dSwrQEVgInpCP2NCbFJmQGJHKlJjcV9sY0dIITUuYnQwVXElb0YyOjJoMkg2UURWe1Ngd2ZIWyxMWyR3SnZnWiJwMTErSD9AT0t5N314bXFOe3NkVyJ7akB+N0pP''@;'; put 'put ''ZGEvO0olZ2dxWyg4WGVyMjk8dnE4OUc9K1NvTm1wQTlxLixaPjxAW1F4dTlqKjhqUUNxenB6VzJCdzA9aFEhW317UUhHQyYvMnMpYSNsVWRZUVVPQ1EjOno8TD83OyxEMCJiQURdNXc0O19gajx6fW5TMExyTHF4aTJzXVVBIm8+eGhYW1kyIShTS3YxV0coRnpqYzsiO1A5XkNkbmtddGwjNUNv''@;'; put 'put ''TzU7flNjcGspRXNKYjFgKUhZM09lSUsiPlkofG5gUkoiaX1YX2I0Z2pxSE0wPGs9L2UpVE9xPXR9ImdvfCtXdl1AZlg0TUIudXlSQ003I1cqQy9OZGFWV0E0aFVKbzBhb1Q2ZENHdzlBaEZScyU0Z1VSMzFoOF15LHZIUWdEXUIrSHB0Zk9JWT9FQzt8VWRWIlRJcHs9JStXdEliRls+Q2dLLmUv''@;'; put 'put ''e3VAYytLJik1b2FfMXMjSFImPSRfYG1rcipgXkBJSCMjS0tHImF9bW0kSzB2MEFCPkB8VXRsXiZ5aXFULCRuYj1kbkEhYnxVbHAzPzl0JCFRREJ4dV4jM0R1Sm82ISpTLD4pOTNtdXQsMkY5VVFUSyhtY1haKlJ0VS82ZHBJKDMvS0JZSU5GVyU/TWY6aCNIXTJ4RlREKlR9SlpifDYmdXdDOVhz''@;'; put 'put ''QF8rQ3pWVXU2aFJCaVIvZkFgKjw0YV05WW9YbytEUU1ffW19NnVSJCg7Rk9QcTBTUi8pa2s7THltW1R7ZWZ3KlI0MUBnbVVLJnpSO11tNV0vclVbSzMqdSUpa2hzdDZlT1RRbEFXMClyfWlCKC9zWExXRENtM0tHZV1oZi9UYFRtQEIleEV3VHxeXmUzUnIiOGI4e0hNNVBrZ0AkNktARDZFRilz''@;'; put 'put ''bGUvan1OcyVxUVBGVX5LZ0dVMls0biFRSlp1TyV4XzV5NmxXNGolSnwvaCx0I0UubjlDYkFtNmQ1JEBzKy99K1AqcytrL1padjZZc19fWCkkeClXemcuUExbT2FpV0F9MDVlOl1UbkAlSTZRPGY7U3RFMlBYK319dyxvUW8kelpHKyhJPUcwY2RtP0daMyhJMiF9NX10NGo4PD5zeVtmVnA0KFch''@;'; put 'put ''WUx5WT9NbileP01+YTs/VTA6V1AuOFQ6SllmYyVFUEFNbSE9diM6Wj9SJT4hfTJ8USp4TndjS2pUXVJdLG9eWXA3OmNqTklGZXMjeHpjUCoibEhWaldSOlM+Y01PRGAhTzxyKHtjR1k1N0whTCsmdD5idikxPTV0KFF8O2leNUxpN2luTFdQaT5TeDE/YG9LOl06UV8rS1BmaCxSVUxJIUlmJV1D''@;'; put 'put ''OFRLcnA/ajJuXkZpZGdgbzV5PENPWnFDQmJfc311MWUzNClZX3c9b0doaWk9TWEiSVRtaCtONGFsXyZdayghUEJWZSV3MFNkUGYrXkE8MCk+KiNMempvZz4wMXtEeXxKLzdIISlKdlk4fUE8cy5VUmlEd0Y7P2FwJmkyUlVmWExHcz1LIz94bStGMSsufSQhVjk3TjpCaHkzTy4jfVtVZF19d3tf''@;'; put 'put ''fEZ4V2JHWkJ1Y01Teml+W2pFSiUpQEt1eU5MYXp8SE8yZmlWUVY1eyFwWjRZO1VgQmlqczA4OH01e3x4aGYsQVhMWngqanQ7cGYzNG4rQl5bP1Y+bXFOQ3UxX1QsU2NZR2xsS3BFO0VHdyY6XVhUITNNTlYydi97S2clfXt3ZTdRNW9GNXkxcE9fcmR1OTJLOC8sbjg4NER3JEo0K1UoRWJtMExa''@;'; put 'put ''NjFbQD1geVQlNlFVLjcjRGUsQ2tKQ3szcmAhTn43aTZvM2BQcGtGVypuWTNxa3g5T0FYTDBHKmYpPm1ZQHB+X0lhUlFacj0iPCZ9P0dDWCl0Pk0hSnI9YCZ1PyM8U2pJdChxbCMud0dEOkFCLnFyVHV1QUR7aDN7c19nXn1eSVMhOHxYZzhpMSM+SXUsb2o/JmQ2NV8qMSI3LH1xOV9ASWUwOWs8''@;'; put 'put ''ZShIZldGUlVvQzlgal17aEMyT1pNOD81fTtAUTVXPStVT2MkcmZXZXpXM01lJDs8ZktNclo5QWg8cGEyVUQ7fXhPMmcmciNLJFJ6bzBhNEsuZGZscDJDT3Ypczg3V0VbWkI3OCkuKWV4RTxiO21OQixtWXY9NVk8YGJAeCI/QjBvPGVvcmpfPlFedWs9InI7eHVXZE4oYiVzclgqfVpOSS5+Q2p2''@;'; put 'put ''PFEufVZZXX1JK11oSyxpYVQle1owRXFIJUZrL3AmWUpJciI/Vj88R3d8eHpvfiI7NkorXTRyUGI6dk9ybFA5WXtsL20yUy9QXlZSUTx4fVZua3F8OUZmfT13VWJjM11PWlNzWzZBXW9sTGNxZGdtP1FJRFdkN3xGcmtqXTJ3LkUlKXR3SSEkQ1FgbSw1Yzd4XiF4alJgblRIMmV+ZihPQGI8WGk0''@;'; put 'put ''LyhOclZVLntGVD9CK0A/enssTm5QUGEoVGBfRE1HImxya18+UFVSSmB3L2tRIlIjTjZsJixLREY2eG5rIV9UTDZvXWVHeWY/RlVnXW4hMix3T1ZZJH5bO0dtIzN3dWEqVCYpU2Vjd25tRkluUDlnQ3Ffc08+SSZTazV0IUAiUzt0eHdeVi8jXzpsK3RxMlRWTSQhdTRjVnBvJkhrWz5vSD1OfGpb''@;'; put 'put ''RkI4dTAiaWl3VldgZkdpWlMqdy47ZF5hQm0rSHUoMlhXPW1gMmQ9X2s6UFdTbnZLQSRXKS9waWQ0VndRMFdmbCQmRiEwZXY4R348ejxic1NFXUg4YzFrX09ZUT17TFlAeiJWPnE2SHBxMjpjM0ZBP2FDaTo1dDF0cmxueEE4Jk5vKjYmL21zOFoqUkNkKm9jXT1QOkw5Ym9mUjY4Wn00QDQuZnx9''@;'; put 'put ''UnI6ZVU/KmlPLmF7d3NxbFB8Yj9sVVVYeFJZZCheNH5zJlRDRVBlL0hZO3V+e3FYZ2FVTU5FZCJhUW08XmpJQTxwTDkuLHJoM2hQbmZ4dyZbRH4ra0JjbyNROTJHO2QjKTB1dn54amMsV19FPGhSPkhVc0E2QGZndENZKyVuOytodC41KVtBb2FFJHF2OWtuLzVHWHxfcS5iRXchX2V7V0A9OmNe''@;'; put 'put ''XVcjN3AwaCYodFh6OzEiLG97ZWhJZmh0XmZnOSo/USMiNixmN0pkIjJZN3hLLGosR0ZGRSx0RzQ3biMiIiZCSi50RDVzYnRuVz0/Wz1rZ09dPjssUEhOOnc/cm5gOzkwcU5RcjU0eFooNXdpUylWOiZhbUBOWWZZYyI3Vix2flM2cDlLci4zP2N6e25HRFdaY3w4RDJmZ1poNVpROVskeEE5TyZC''@;'; put 'put ''RHNqIWBqSXddTnkkeTBxSy5jV1lZVTF2L1RhPjkjNShoTmA3PzRYYkt2LlY+fEdPQy48SUw6XlpLVkMiWHslWj9kPlFGXWUqS0gkbkNSZihaNE1yP1R4XjdfdHg6PztyP3YyeEtGJnA/aTIkZyVUOHhnPWpVYT97XjwuKWEkSSYwXntSVVJJfn11VV9lRD5DXzx4MlZ4KSJBeyl0PCl8aSQiOURw''@;'; put 'put ''PnlgPm17elgsPWF8eFslLCtKQ1AhalJGRjRsX2NCZEIzIl1FVz17PC4oWE0yUTpvcn4pemtJLCJGdXtLKSRyNkxLfHMiNkdMQyg5UzlJbzhVdix5OV5WdSl+Y29VMzE5SXAjIkFTa351fD8qYzhWVVlpXjs3NXE1REx8UHZ5WG8jZU5sfjZ7bHYvYC4lRH18I01GPmwpa143M05CZDtRY3tuW11I''@;'; put 'put ''REZVYFRJXVlyaVVpUmpscU52STgkVFRIYzN+YCxnMiI0dC88U0w3P1J5NE8jQmVrImB1ZHNYLHZnQVE1QjdUOUYvclo8XTdIPGZrRCxTdENlN01JOWRwWH1GT0R1aWMpVV9nYE9gXm1FX2tzMCJedzFHPSFhKXdHUD15e11MZV86K3RURFpgVyUsQFhEe0FvKFtIM3tdKSt0JjtHdX5iLDx4UFZj''@;'; put 'put ''fDk+N14mPUM/UT5qVSNpNzRbRFdtK3lyJTp2NU5EWX04Z2RUK1pfL1d2Yy5YQiRKRjxEaWYkaF1QUWM0Ql4qNXhEc3kvJkQwZU9RXWVoa01BQixebWEqOF1HfGdgeWBYSWBmWnpMInkvREoqVzZ+JGZMdkBCWnxPW150UVgsYm1UWytvXj0sd0R1fHtmfl1AI00wNiNgXlsjPz59IjNLKDVXOU9k''@;'; put 'put ''ZFdnfTNWSEV9fEV1dVEzPkJbVyI/PTU1aUN4Z1N0W1dnOU5sQmpQNT1sN1J2VEQ6QTYqfHRaJmoxO2xTXWNKSW5RLENGZ0NDPilMPUM/M3R2SGJsQiJAMW9OfHhbXXdDSFFdI3VwRWp4emd2ZDBEcDgxKiZxIUU3Rkh+JmxlOENOcz40T05vZz9sblNyT1JeS2MhUX4rJWBPWFhlSV1FPXtbY1kq''@;'; put 'put ''fT49RzltXyl1dnRMdCFhbFUyKGJMNF9JYz5aOTxrLy9UNXpvdGY4W0ZDOUk3VGFGTW0/bkZMe3ghViY8ZyZ4I2UlTWF9b0ZdKFNnRzZiPjZaTVI8STpZcFEqXWlnc0coOkNnMURlSiVbS2wmSjxBT3tsNE9sNUdfQ0NRfVllb0dbUHgwQ0dIXyNHKiU2WTEqMX5Tay9QWnFlTWcvP0pdNXpHYDVv''@;'; put 'put ''bCh6VEpJIjMmU3xIXkJIOE80ZXs1ZSo3WXhVIiNrRzZOb3lEQHdFMzE2WkQsMEVGVVQ+bGJ6TiRWIVg3YEtAdHJtOCI3WlEzeXB1MUY+SzAvNj5kNC5hJjJDN2MuYnxiM2ZuMFU4KVQsb15eey9FOTQ/ayNSVkJLMjltU35beEBhVjBURCh+S2ZTX3ZYXzF0aSNWezc2e2gwVXVaPkBMJVs1IX0k''@;'; put 'put ''e0IiK0ZkJnE3ekYvV3tRaE11Rz1YbiJwW3thWXgkUkBPNzpbbntRS1BrdEteZHNTfkVfNTtfNmN+R0xAI0xpInZkT1ped3t2PTNII1B1LDkpbixyIzJzcldEdEUmOm5wOiQpUmdIW2AicnoyTVQ0SHpvJiZzQ2F9dWdhTmMpRlReJSsrYUVRYXdJIV46PHpaV1N1QmFGTkxtfmh6bU9ockw7WTIr''@;'; put 'put ''TntUbS8lYip4KkhZV0E+Iz0obEM1JUZNaGd4TE08ZmpUfGtSeSIkX0kvdVpgNF5zU2hVQz46cFRJVGB6c2crQD0uKF1GI3E5RkUhMmhLK0pGTzIxZDdTRk1XfE0vVlMxL3xWTXt+WFNEWClpMWgpVG0wJFFwdT51UiliTnZGfDxpdlRJWWFgQDRMYXNyLDBOYV5AVzw9TDR0WjFCaFcwZjpsVEVF''@;'; put 'put ''TWNqRm1fMHRyVS8/QXBvIXk+OjY8TU5SajFNJk9beWVnK0dPQD9nNVJqYD0wb3pCRW1jbnh5TSFtLnBVWy5IVEw/Q2khTSpHNGdEJj4wfHFjcCN2Tyx1fDE1LGc1VD1ncHU6QHlRZWIhdUE5XTNnVUZhIUQwWlVOZl12biZYJlgiRVNjTUZJcHRaP01IfWBySUJ9SHdXPGY7cy9XOzR3VE41QGN9''@;'; put 'put ''e3lIT1hEZ3JfN3lHImA6KEhvUnkoK0E9Tz9QdDssK15Rd3ZQI3xjdFFMWiIpQ2tKOUpYI2xye0BRKVp7el4qNkc5L0kzKnttdjl8c0csaUNTMWBPRlskI2lid3NlO1dqQi9CeVV8dSs+eVtaU0txeGBbej03VGIyLkhAPG1aUEBdO1BCIXVQMEpoUktIcyhBcERsOUxdMjM2R15UYThvRz45bnBx''@;'; put 'put ''JiUzMGB4ZD1tVn5IdktAe1dIK0Y2M2FNaC4uWH0yYVYhRkFWZXVoZGEmXSt7RUBORl1FPD5gUnY7QiVTZ0taOTJ5QU9IOjVMPE43PGkuTFFGKFZFb0lCOlFRRTVjU202aSQyVWVKZ2cuU2BLbm0jWT1vb1Q/Pm4jOG5aLmdkOFUzT0NGUnJpWFljVVM6I15+bHU5bko6PkMvUT1gJGNfTHdmbjku''@;'; put 'put ''dV5PZD5EWVZmNy9fL2xLbEFIaksrc2hvNXs1R00qYSJqXW1aWD9fL1I7XXsyaF9oIW85PlZQKUZpdyRmVVIsPSR3TSJiVDVLXyN4NT8rcjV5dWtDbHJLLFllKCl0Mi83OjB9Jk1Eanh+NTpZZE8lUUJDW3Q5dEx3TVRMK2JtLlhgKUQmJS5jd3pOJUBdSDgvdFNQe0ckQ2F4biQoSUpMR1gqQ3NL''@;'; put 'put ''azliK1NLPU5IQyRsQUZjNzZfd1JRVTZAWUA9ZiFiPD4mOTRjc0tsPCtBKHE4PHEpVWQkaHNiVlV1bHUxdFdsdHpTYGpWeUhfU0YpPkk8NDRoMW86Sy5QUGhNb3lzbU1aQ1ZuW198fEMoSkhgR3l+UHEwX11vWEFnT1BTZT5HQXpmbDlYOlhKL1kmRGF6STc+ZnJ6WGU1VUFoX3xeeGU5bmB8SFtC''@;'; put 'put ''VUhnMlhxfVk0ayF0WE92JjcvUUFCTlE1LiYmTFo1SUAmcGAhSl0odHNlYyJPIk1wK3dDfWwlOER3ajtYSlt1TkhHdWdjdjklQHQpPT9GcCtecFAvYiNNJn5Re21QdGcqQzw2azBgeV1xfnFgQXJPIyN8NCx7aCxOMlQlS1UxXj4vWndhUWx1ZWlIR1BCeHpFRGQ1Ym9fanZ7LFc/MG0uOX5iM21F''@;'; put 'put ''PlB0ditJeCRKSmpUcVFfSV5bQlIpLz1NcitLKHB7OGJ7ITE6aCN3aUtGclhxbjRZZUM5S0phOkAsaTgmTEArQTlrNUdYTmMvY3V6bThNVXVKLkUmc2ArV0BecndxbDxldH0pd3J0OyNLSSFZfUxZOG9NTV5aOiVsT100bihoYVhZZXkwcnpeLkZWIWtdfnxTSj5tcjFiJHVeajYxTVY8QVdGWzxv''@;'; put 'put ''cFI+MFVoSzNXV1U5c0g4NVpyU3lmKHtnfjA1eTBJZnVbe3tvJCh8dT81YE1qP11DZ2NIWT9IdCQjL1ZLdDVDUnxVaW4yPGBKZ2ouQmRkWkIvYm9paF1BOUw1b2hre2kxQ3x3VDFge3NURCsmRj5vV2JELHU3e357Qm5TOnhyOCk9REUpRVEjJWhpOXhCTCtTWzZ5S3ZJeG8pLkxEdTE/bWdBeTNv''@;'; put 'put ''QTtoOjM0NSE9RmlGS0d9a05MWDJNIVd2IWNYSnYhPnpsN3ZkU3gjLmA/VSNCXmpQcXlUOEZlby4jO1dNUjVYWXZ6UCx0alZne1pmLml4dyF1RS4xK2ttb3lvMywpKXpWcSE1LmRKNHFyS2g/d3dXajU0YTMwe1VvRUg1TzkpfGhLU2ZDPVJFRnx5RztpTzFIX1BOS3p9WSkpeklLXiY/THBsQSYs''@;'; put 'put ''QjR7d2t0X3w1cnlOPVZIQHlEWXE1W0h+c1pTNTksPmAqL0N7JX52fVoiOXJ4Uy44RHFMLD1aK0AxUlRIXmhucDZEbyFFLF5QbVdwOV5KX1AqT0BDYmgqJlQ1bldONCx3eHdacyN6dFB6MFhEZ2ZhdWwsNXgrN19DNU1NVHJeIyNqXUtNaHxJcFtCcnBYI0shTH44Nm97QjxKMGI4d0hPZV5LeCZD''@;'; put 'put ''JWVHVUpyTVskK0lgYn5AMCVhWEJPW0hNP2BuaS9+QmF4KURHYDZVK21nVjk6ajk7I0pbNng0TEhlbSU6PT1aeWshKCR0WzpTR3hbSDpgPiFDd2lOOXdaWUZNO1F+cHsyfCJRVU5sUS5KKiZHZEVwb2RFImx5bURYVEVhbCJveGtbKkhgMWssVmtvOCpTL3lrczc7Wns2TEZpRzlGRSFFKl80YTxz''@;'; put 'put ''UlFHR2hBQXc4fW1kbXl8Q3ZuKC99Nk9aSGpeZFA8NGtXQXJ0Uj1UTWNhNmBFenU8Yz45PC8uX2tfM2RBeHNOcCNAaHNYWTY7I2R9LlFFeVs5eF9YOUJHImc5SndWWlJCSnpKWVRNbjZXcDgqTGg5JV42MixGL2Q/WVZkfmxBejVPIyFfbzo5ZDhNcG5bezRCQHBUcSppQHJwfTxmZWVkRUJec1pv''@;'; put 'put ''XkF6QTROaCElTGFjMVFAN3o0fTNGQl9icUNYJWN2cjVuPktEfSF3JipKfTVpW01wfCZDPzREISFBNVV3dXdwM0V8c1ZHQmBLQVNXdjZXW1cwSjlHNndWTi8wIT4mM0ZwbTJgQkx5VFNCYiVsS3ooZVBrMyRAb3pSMXJMZ34jNWd5Vyk/T1B8XXcjYktfISpUR1A+eDlgJGEyfnNQdmI6NlJIXUcw''@;'; put 'put ''NzpLdHV4dygxQFpHUkQucmkqTEpPbyR6VCwsQF96ISQ6VzRmYnBjKlQqRixLJWhENE95PUpzNFhEeVRCNlAlW0M8dWs0W0hfPEczTmFHaHRKLF0jLzI5VShiU3BJcDlTeTVCQGVJckpGOVNUfWsxUjMuOj1uVzpge3B9YGMpbzliWF9NJDthQD5GTjglUkgxZlp1IndbV1E+d2xzSVlHN0Y+IyR6''@;'; put 'put ''aHE2aX0qTjI/LjBeViRrU15VaXlfOCQ3VldHMWc3WUE5e0lzUW46YTokTFglSm9sSTYqel1Tcml3fkckRH5rTGJzIzVwTGBjVUYvQFMzK3ZPOjBwajJOUSgzTXhfcE4lZVBmZVlbSkE6N0MrI01fNl1fPjt2RzgpP11PVjBvW2ZxSVZsYDMldF1uKjBjTDEkcSVUeG5tbjRHTyxweDtoYDJKLGh+''@;'; put 'put ''Y3YyQzczPG05eykuOiZgaXZEMVdaOWNlVVV7TzRjUkpgL2loIUtyNz51WEx5KURrKHB8V35FfU9hSXJvWEwyNTUhNTR6Tih9QC83Kjx8JDUrYjJ1RFl9UWZhUGEkdCU2cV1sMW1Ea085UmNrXzBMckk7YFhVQ2tnYFJvdVN2My5wSkIxJWZ9JGchLypkMkBfKWY0XVdmMGRKYGZDSHtfPkxhQ3xT''@;'; put 'put ''VnZIVkhGcTopbyV9OX1LW30+cHU5KWBXXnJZa3d3X1pqaCNwOUY1eVZjOnNgSzBPOGF9NTE5Tyt+KHRiOiFXQFlPJTw+bUNfMH1vOjZmU0F6eDNoQEJuKHNwImkwajskL1paeG0jREpUQyEqamQ+elswJWt1Ll5FYHkkMGpMVixnM2tuaWpQW1IpZmFZa2NfQCEuISNleCsmMypjREtFVV5vL3sx''@;'; put 'put ''TCRwSzNWNkE2cDo6fGpkMTQoNiYxWiZeakhARHZSc19pQ0Q4YlZ3d1VTenpsREdyeDE4YzVMNW4he1pnUCkmNjtBOjdVKTQ0MWNFXmxMYHwyS1Q5P3FtTkNROmhiMyt0OFFsP2I/TW9gb09xfDd4NGdyJiJQIjpNPmp2LC9+OHVUT04sLGZeIyosaU56bDRyVi9jOCgmMkdkQm5+UzhLIjRrZ356''@;'; put 'put ''N0xxPGt5Xiw4SjgjKCtGV2VIUjAwODtGUWF7KyhYNlpNcHJwQzw5dkM3alg8N3ooWEcqQDI1SGxmZjtQWVRiZXgoXnI2RWNRcz9IMCoifE8iS0FtYEszal1YfTJJaTpeb19RVjI4PnM+bHNsSkRpOG1ta0shQDlwO1NeRHJ6ek8sXWwkXVcrR2M6PyhbcUk7M11WR144SjRHdXxYS1F3Pi9sNyxd''@;'; put 'put ''NHx1KyMkTkghUWkyQjBdcDdie19tJiZDWTp7cmoxJWhKZUNIeiJ9XmdDUntKKWMuKSxaMVApVWEmYjJsREZAXl18cTZ8e25tI2VON0kiXlModmRoUGJuYEovLnZVZE5XK3s6SDU+L0o1SUVkel42RD9jIzRdVFNtM2hzciN+USw/RSJkMWlkcVorMWVTcFl8fFdobXE4WFJHdEh0N3ZlRHVGM2Rx''@;'; put 'put ''dTNyVy5ncEwlYEhrOG95dWcjJUBSNUwzRXcwb1MvQFhuXzo4MjRscXx9Q3w1UHR1O0c3ZzJiQjVsP0I1Sn5fSzNSVTpRdFBvaCUjNDtmb3huT1toPXZza2NfZXR4Yk1DamUyeHp0QH5MZzpuO2MoP0pXLGdSeClSW0E/Ql1uKEtqT25+QXg/XlMzN2xVdlk4L25laWFOdE0hKFR8cUVXOz47PGM+''@;'; put 'put ''XVtQLDxlLEZ6eS9lNXVHWmAzb2NrfntHb3kjV3AlWVt7ZjNULFZ2TzxWY2FZfFRrYT8wK1VwQCxbaCtpLDRKVjZ9ZTJsYl5mU31fUU1wbH48PVZ4UWhzeitObl96XW9rRFJFYSFCY2xRfmA1WClVbXoyRSZjNiYxNkwjd3BtMH1ucEY1anVRIy8kXjlUb1BpVnR5OjFDO05EdH42Nn1FclNDUz8h''@;'; put 'put ''JUomRiFoSW54fDJffW08OHpWN3NnRUdYWjlXY1lHYUcySGBvQnsmOD5belV+YF08fS5eRVp+bzJQS2ZMMSFWN1NoRkQzPn00SzY4bzJWTiF+LiU4LlkjfisuI0s4JT5dRy9dWXZ6QWdRQCEuTUo+fl1tJlcvJVVART5XNzRATj9JeDpVUCtWSClYQ0h6XVkhUDRGSSE1SFl+XUVYKn1IVzVDTGA9''@;'; put 'put ''Sjoke2d8Sl9HeEFPT1FxTXNuYDt2aE1LSTs1OX1fOzVQKV0lU2Y9QmYyKWp1ISx2USVtXmdlMXMvZjpmfTM8P0AkLGApdU9HOHUmajYmVTZ3X1hyJEJ5YSN0OV58LzJOeiJPR195R2o5IXo4OGVhLixuK1U+LylhTlNhUixMcHdYZ10oLEpWYHhzdTwrK3I7RiU0PixvSSlXYV89JnNCNHlDbz8r''@;'; put 'put ''c2RPYlc5aWgoa3VLcU0mIit2YTp5SG87NUFza28vY31efEUyLmVPKEVfUGN1Z2lEQlBLW2lHaCI4MUchPUVSM10lazFjck5zdE5XX3JaQSxDKjF9SXklP04/RE05RHIpV1AqIzwmVVZqT1lPS2x1dCxmKVpkQC9DRWAhV2chflUoaktNPGMhUlVETnQ5Tjc6SHlkIyQwV0wqaFIkMmB4LHNkOGpM''@;'; put 'put ''Ki5aXTZNOXVfJXsvSH0pRTMsanExK0UoYF9wcCRPYEBhMExpUk1JZSw0L0A1cj9nMDFMYGIsJmFSalJEfX1XPCt7Uzs+dGY9eFpwP1Z5ez1WW0ZsTGlhTGJ3ZU1kQz8jOUEpdzF9cyR3KHRUWGpNOSZDNlZYfjReMzlxalhIfT4lP0ZuN1kraUNec3RUWXJbJnlHc2J1NE5KZ3RvSzpJc1t3PWVw''@;'; put 'put ''fnY9bHExb1AvRTY0OGRMMXBtNGB4cnQiOFleaE9HQzJ6ZzMvI0c3cDhEdElGdTBaQ2lsMFlDWzgpIyNCOyUkSTtPT2lBM3UiWmphMjRtLFg1bSk9XllsKG8sP0F1QktRb0RvVjNVLHM3RF0kbkt6QjVLbzhndnhxUHx3KytWQiFLZzQ5X2NjSFVSNlh0LDxdRCl4XjdbS2QlNThieyQpN0d3SmpK''@;'; put 'put ''VyswNl9Gczc6PEVNXVEuPUtDKk1TJV5MPmpUTyRRQmZleC9HKmlJX2ZTTjlqQi9ZNDBgcylyM3VaM2R8bW1QKWM6bjUqdXZ4XUp0YERzPlpRaSJwZTp3OGQ5fDVndHlpIWs4ZGE2VWZ2N0kwIWUjam17fktSaT1JXiJldE5BXzRKSS8mSlcvKmtEOn1bVGhfWWpndk9fdH50YXFwXm19NF04fkV6''@;'; put 'put ''QSY1PF1UI29sNCx3OytORWt0amYpNExmeVc0LnVdciMkcCZ8Jmo+WzU7QCgjRktDVm1ZV24/PTdeVCNGOHs0TSE1XjE9YT0/KTw6YENTJipsOUNLQkJwNkxeImU9RCtbNlt2QjtNWDhQTTI1RmJzSCpQLjs5dzl2Km4jaSs1dW18e3cyL1suYEZrMF96ezdLbmg0YypAflprZFZ1PTk7b3t0Qig4''@;'; put 'put ''dV8pelU6WjFWNldsR2dSTz42OE4lTSNAbFZRYWRPbkBDJSg1XSFaRig/SUBMUkxsQV04NS5KcVRPQ2duNTxhSjldT0BALDIrN3tyP1JAJGN9L3s0TyR8ezxSP15zZ1MjY01oJE9vK0JQUSEyX1JvVXhZS1UheWRydmNORVlII15DQVFLfi9Zb0FreXcuNCgjYmNjPXFUKD5GeGBMT2VOU35bXTBU''@;'; put 'put ''QGYiazA4aU1Pe2l6SFE8dyNdSi5Tfi5rfUxbLDhZYm5TOG0kRW55PitRV2heXWp+XmBGTGU0dTNAI1VjIn1KWSZiSj5xLj86V3A6b3hLa1ljWXlzbWprc0MuNjFRQkVJYWs8W3VrIkUmKilKQ3NGO05xb0B+dzl5LDx1RmR1Wzw8T3F6ND1iaEByRDBCLllHO0ZJUUtHU2BQalZQISRNSExYLEFE''@;'; put 'put ''KVFCQmVvVU06Z0ltVStTfEA5aUJyJlkjeSJGczcwMENhXmBWYT1WOytQIVYlcz5TO0RRQH4pciUhYSgsWyY9K3lkRTEqIlJROUlyRklQKDVbJDlXS21fcS48SFUiRjApNWcwYlA5dXpoalpFNDcuM1RtZndoaVZLQ19mJSEwMj4+dzJOcjBmLGRMP3syL3NDTloqd31XR21me0BZaGg8TUg/NCVm''@;'; put 'put ''IXFjTTBUR3Q2bX1gKX4peVY3alZ8UG9rWW5iJlJpYy99OztoI3xzLjlDMHRpMFszRjplMzk1Z0BCVjhXPixIKTo7JkV+USFgeFNFOHJmZzpyImhTT1VRPUFgUXhbNVM3WVN0Om9sR1NGRFZlKXYpYStZQUNRem4rck4wLERPMyhRNildMiRrKy8iKm9ZTn4oXmc9Olpgflp4KXFoOHQlOiJGfnli''@;'; put 'put ''WyVbclpAP2ZULEMmQ0hnKXI3ckk6QHo+eHZNUnZdLFtbTypEVWklQFklYGxJPG5HLyhRPTgyQVQzLEc2cnRtUmsvOSVPU2VfREBoOytdU0ZLe0R4VEpUan50P0hmdiRBTTZ1Jj5La1UoaUVCJj92YnREQ104SVllJmt7NiE9UHZ2Un1OZyl7UVtLW2gmfiRuaSFlWyxQMSVxIlcvR2cuVDpoWkFQ''@;'; put 'put ''Il5FWk1rZGk0ZCVzUE08WDlLN0ZKODFaclRqR2Qla0guZHlhNnp2dW9JejohW25bYzY0YCZvQWtvbT84bFFBYXQ/LEReUFJJS3pAWH0qWnEiV25yNFlPfUxbS3tEckREc0N5fTJuKks4RkB6UCh9ZyosL116bjxhMkw0Q049Yy5mbXREViQrZXVuTGFHenhmTCtbZ0xgPzcvKz0paExUVE8oZnJW''@;'; put 'put ''P2ArWlh+Lm16eTk6QWBrO1duXmskOGguKVVDfkdRSSNSRWAmb0IqcTNhP2VfX3k9ZHspR0xXbUNrRkBsbyFeIW05cFB4azklZzw3cGc0dz54MllIdk91e1N0aj5tJX1jaShsMFZ3MCJFNUFoUkdXKV8/N1dSZlM5K1dzRzJzZTglXjo2PlpLOjFbQ1t8empeaihMNEVHVmxzMnFPVEpPMz0oJWJG''@;'; put 'put ''dGReRGxLTCswcV8scWhnZF83ZCgkPWAhPDZySiptQSwxWElkTmh3ZyNIVVA0Y2dhN0IiM3EuT3FMVGQzQV44QkAuRDdSLy9SSEl2OzYrU3BgdTE7c2J3TCRUb2ckU0VaTlo1KChuWiFyI0tzVXBYUWVmOnEjbC9aRmt+WlMxX3MjajNvSHFRIWE8Wkljd2NpO2woXzhDN1RgYlk1Q1YpSUYmSUJL''@;'; put 'put ''fEFKcG9NamhUVGR9TkYvcDd+bVJ8b01TRHEvVkg+NGhBNGc6cWVFaTEiUGtpa19UKSNpRloiP0l+aUo9fiM2YyMrKHhfXSRJZCkySXpXWTJCcjgzNyZdQUUhZFdWbTJUaU99JVVEZGAwVl1FNCwoUTUmUi5YZDAiTz9CNCNrZXYrbnkkMWslZmpTLnRSayE6Rn1jdHFFQFY+dlJwWGxRVD4wQyVs''@;'; put 'put ''bz9dZCgrbCYkU2VBVG1FInFjRH1ZJGNGXz49Vm85YEVdZj5wPyN5WVddODBsJmI8OD5DTk56NDUmNjpKM080XTs+SlBnXnVjSXk9OFYwMGZMN04hbkdhMixtW3IkdU1bLC5SIj9YUShzWSNeKnlEZl4yUERbRiQ8YWRrV3pxUEhnSFskM3pZSXtYIm8qfmovNSlWb2YrSl10Oix9R34oJmkrPHlG''@;'; put 'put ''QHROaGtXIWxJLFdSYnEqQ0ExeHEoNnZJa3pWK0F3QGN2P3JvK3Y5ZH5wVC9XLFQ6SXosKURGWGx5YjA6eT1Ecm5xOztkMV0+YGRaIXdtVllxdl8kbnhLWkZJUzJFKSgkd1V+e1l8OVZlT0JgUXVda2VsQF1PeHs0VG9Jc0lpPyNUOU9uO1tIeXxmOClVKSM1M0plW3cmZXhAWSZVN1krWlJ+KmNG''@;'; put 'put ''biFAZkNvejsucENdR1U6QzVHLlNaRiJkdj0meF5pdEVMPlsrQVh5XkojaTdoaDU6Sl1STS40eFdYVDJdNjYoU0BZOFooVzt2a2Z3amc/QEt+YUEwKndpVG44Zm83REopTlAsTjVSKDtUNEFpLmlQISg7TU89c2osTHdwampkXit4LD1eT2EjeVsyW2dYZmkwO05xfWUpOW5INF0yI313bUF1XjZU''@;'; put 'put ''JlZXVWhQd3ZhM3NsOE50KV5LU3lRUm91NW9beE1COS9jMzQrPHk2d09LLD5sXlpYNGRlOCl+ZWRNckd5V3IpYC5JfH09PWVYMHAuI2NxT0p3LHVAUDEkUXY2TjZQUkFjYDEwMmUje29WWGUqNUUhamdRYiR0djdnVnQvO2h4bk9BNnhyO3tXKiRAYnRkaj8mW0hVOkJnPXRNV3dHWyRAa2RWVV4m''@;'; put 'put ''aHE3Mi40IW1ZZUVLQTRwYF1meDFINU50NTwuNUl8RmxIWTdgSXAyYHlLKFlxazNDYkAzOkcmNlFhZi9IIVh+P29+blI7UWgoKGNiKmgsT345Ti5dYDBJYSZFOHA/aGFSXTFiQE0lYXNsY1h6UX4qU3hZeE9aOCw2QT5GfGNhKD5kOz0weWxfJDh6TCNmSjhlX3M5P2hNcCFKNC9LWmBiNkleQEs1''@;'; put 'put ''eyJjbV1wIWtKMHBRK0xSK1paOHYuLjRHTzN6ZSEkN2hpYkdTfTZ7N2pOc2coWW1nNj87engueSlBQDJWZ11OXXRDby9McDMxZjBGTGQxI1g5KWp3cXRPL2QpOztLayVeaTUkQUdFQ1QkeSMxI1dTP3YjRjBxajpTd0x8TiJyKGsjejk9KjlDKnl+V2s8K1tbRzpRYl15IVpAbF93NnJMNGh+aWhZ''@;'; put 'put ''QSEyclVwNEY/N05ad0ZgQz1CXVtNWzM9LEYqNntlRjY/JUVVS0kybyVbVD1tWUNpYmE5fEdobjBGP3gsYF5ITEI6L0NGc0lWN251UlpOWl0sbz1BbXkkclNhITZjeXpqTDlXQHdCUy59MnR4JEJiMitMK1MjRjBXJnRSdyIiUzZ4dzBrekV3em0qPywlO3RWIj8oOjlgXk01O0R5eiN3ND4ufnls''@;'; put 'put ''SVllWVJgay9UMU0uZXxmMHkwVU91Wmd+US4wJE1CaUhybGJFWEFIeSxwTFgqTHxgJXpGSlM+aEZOVlVnSCpuRm5CeUpeeFJfSF5YUDx4L2gvUlBgcGFgdXc8MipYZU1jRVVrcDlmbUpQZnFCRkIkSWJkV35GMS9lfFt+anRZZ3J2fGIqVF5FXVZZPix0VFh8RixlNWF1WGZ4Vn45dnQzd15BUnAw''@;'; put 'put ''aWMqJF0oZDNPbTd3PDpATVZAaXJpPW17OX0zfT9FNHQzPStxQy91X1NgJHBIMD8vKyE5OGMqIiYmfUVeIihtdix7Mnw4OT57ZlVsMHolWHwqeVNhT0tpUz4rcDdoLzwoNT9ZfjohakxeWXQoeVVLeFtANV4kMFNmVFU8JFBKeThFTms8NEEvW2V1NWhGVXtqWDJjXVE0RCxfXkxhaTd7Ol1KMEQw''@;'; put 'put ''dFMsUj1iW2tXJXk6Y1hYPGAldmgpSzRdQGw2PnpVJE1dOTtBWjh8T2QwNFd5PG8kYjA1TC5bVXhCO3xMUyhdPW01fXRCOFVrI1lNS1Z3S2gkY3JzejdUO29OTTVaX2VsLyV0dVg+SzdEbF1xanZwLmA8fm11VkRPJHc0RHFtanApQFU/TEFvP053ayVJZWBzZTMpJmJ8Pnk9aE5veVQ7X0ImOSFt''@;'; put 'put ''KWs/R0R6KDE+XTNNNFQxQ3FyWTI8ITojcF1mNDZ8V1F5bU49c1gpcDRQYj54KT1ZRjYzb3dubGwrVUZ3JEZQMzc1M09pSX58M0wlXk03bDosKmY/LlVVVVFfSmFIcT0vXnBUZGRKRHk6YERMRzAiaG5eRj03V2NTWzdiMWZhNnwyL2IwKTV0TiQ4ZHNWSyE5ZyQ/aVJ0Qjw/RislKyE2OGlIdEMh''@;'; put 'put ''bSYmJCVnNzxqLlFualZyczlEM1ZJWHA0RHo1blgrdDZnaiR+P1BfQ1hpTDc6cE9LVzZ+Xn4rem52YjBWfm1OPUczLj5Sd0JTKFNRZ2hfRmBsVnlyPSY/WSs7a280JUIrNS9yaD1hcTg8YVApdX1VSWtobGxUciFya1cvdDhRaCRSRGJkOU4jI3VsS0JuUiJ7QjQ1c3c9WUBHQCJ4PV10R3QyInFT''@;'; put 'put ''N1NxNFU3cmlMS0RHYkxDL0xLTHV2YThIcWFzaG5IZWs8LGZQTnV4LiY4XUM4NWdmUzNKcEBGeXpPTnI0dktLOF9vaTIkTSpXfCt3ZjB7MypmKDp0Wjo8ZihTKyQ/LDIwMXssYl5rLysoSVlSbjEmSDJdQSs3ZU5EPD19TVs8MU5ya2ksO0AlciVfdH4jRzhbclhmP05gRFd1ZDJWelcxO19RXjkw''@;'; put 'put ''emRpRyVecnhSRHFWPiwsWUlySTY1ajJZVzpSZ2oscSJOK3dgXi9lM1pbblRkd1k7TFJZS1BoW25bTSVgNzJvOlVAJjFpPGhSeCEubyRTJkZDZVBTOHo7OF8hREx+ez16LDR1UjZSRlNId2l6bEZ6VHBDa2oybTJ1PiJwQ2QrdDlkbj93LiFldWB4KytEdCtlQ0JUdzc0KStAdF5TSSpLQGFNISo0''@;'; put 'put ''JCh5alJKZmVScigrJWVoQlJdM2g2b1RAZCx3aldNaUMqP0F1el9DJG1ke04pcFNWdEpfNC9tVkB9XjF5YFh6fkIySUV5KVM1c3g9MjJtSjxuPEtKdElUbHJgKkF1cnVeKCtAPjhLey8mITVFaWldYFh4U0BZWnZrOVRiUT1hKHF7Mnc/K0lkamZDb2I/T0RzQyloOipgcil3NEtNZmt3O0kpeihk''@;'; put 'put ''O3xGR3JjeUBrMnViW2krakZ5ZyJaNylidD9WMGM5JD8uKXltMnQqJXUrNFhYViZyWyVGQSFqTUUuZjpyXzwhPVYkQXpxPWhERzh+dld+TUtCZ1dKQyRkT01RKXJ2fTB5VyI1S1A9Z21yK0MsOXQ2TVpNUiYyKTVSQTtfJSosW2x+UFU6USU4R343dS9uWi8sOXR7REcqSyN8XUxZdmsmUi91Xj46''@;'; put 'put ''Qm5SMDVGX2B4b0IjZH5DXVVZZnA0XmtkYGMlci85cnJzbWdReHlCRCYpUDB6amhUU2JzfGc+fGx6MldxcEYoOEoiKX1EWDwlRGArdG8mL0lVKHUuZDk2W2gwV2BQK0M+bk19TExDSXQ7PC9zVn45UGQ+PGNWTVJfc2ZAV1Yyd0BYPi9JVWEySnp7MUZPU2V8U15gL0Q1ezdbJEIkKUk0cTFRdV5l''@;'; put 'put ''ZkVzU2c1bVF1PyNpOTlLZH45dWxUXlg3ZlhaeGxeSWFYJlkuVEAvfTc5blpKcGtLUTd8N18oPE9NeXs0cClITUldPV5GSnVJXTc0WXBEQDlYTD4/cSIoIU9LeFYlUWlPOmtgMURMLixLMThDT0NHNjdKcD1uJnZZKSZfZXEleD5PeERkMXQ4dWEldW1+aDY6UWkmMF0+bjwhSUEoO1FebWBjSEF6''@;'; put 'put ''en1lPCFjQSx8L28oK3MmIVo0KmZhdzNKWlZqQ3RQP0s8RXpwM1ZucFE1Rkg3NlAqZ2hKS3pxPTFdb11sfTZoKXcjfVljMkdbMmdGYXZBNncpY1pNMFtUI00jP3xOVXRWWjhSUCRAKHROKVc5UWx3V1NReHAhc3Y5QigyNDhmW2J1JTJRPUpiOUdSbCMvTm5mYkspYy47aFhfQTNkJXVDN18kM3Qo''@;'; put 'put ''S2FPRSVDLFpAMjJmKFFgVS5iYUgpOT9JOGt3Il07aihnVjMmY1ZEZXdoM3FTSm99Si54fU86TXcuZ113MiFFIn5zU1JRcEwiI0p7Y2RVTkppYUtFZkdNTEJ6cnUyMU5wN3t4JiR4ZVQqQnlKQFolNSQ1KExmL2MvOikmOmhVKVpSYUYsX2ZlenJSX3lHaTFKWTVOUm03LjE/Szk1TFVHJD9lYnN8''@;'; put 'put ''eklrO2wvcVtMUkt0SEdLbCY6Xn0rKj5lfVMiSVZicWV8REcyOU5fdzU9aDR8bTVgVDV3di5SaChLOEQ0VS88QENhKVkrK3tMa3o7JkR4XktQVTpJNkAsUzcvMGV7NHBCTz9mfFVRZS8zXnQ4Ln5ybl5aaUVgU2B9eFZUZnlZaSw0antFSyU6Z2NZZVc1ZlteIkM1X3IrKzVdPm8qbmpTRT1PTipg''@;'; put 'put ''az15bWkzTypSalJjdFoqZ21yTXIhQ35YQWZbOm06ZjxpRnVuYTp0QDRvKGtFYjZLIj10XnFgQE1de3ZsTCUkPldFSWRicTQmJkxSMUVqcH1AIzUjd2I1MiZNKTl8UGBHdChkT3c9Vz90Iz9gMlk1QzxiWjc3aD14MC9rfWpafHE2azEycjFETX0hfV1vQzJpUmEoendZNitrJG0sIUNkb1M/WyhY''@;'; put 'put ''bip2QkI9WVFIXSZdOVMlKEk6bi5xKm8kYztISnppejxQWGVJRGdGXiI4PmZ0ZD5xIzVaZHdOWX1nJlgzMF9CcGFZRkRWWHFXXUU9RT0uJGoraUZoQyphZUM0WT03dDB4VEFHaG1TblU9KG00Mj5tfTtQNkZyPk0qWH1oTXRhUXtANEt5JXpRWmlKLF8qOUU6bmF0diQzSkxwKytxfiJ6bXpBOk1+''@;'; put 'put ''aDxRcFkoNmVSSGQ7fkYuMElpSkI+TDYpKz9yQlNeazNue0p+R01pJmNWeWFERyNiTHlkekZpJUhOck1xdkkhO0U6ZiFoIz19SWFCWHh+Zj1ELlJ8TmssYUA1RGFPUmdnUTAjNEpaY3FYKyw7WXg8I1BVcSNpYWYwbUhOIktIOyQ/YTl2SHhGdXNQP3h5fTRRWSg1WDJjNlpOUWR7Y2RpV0JiIjFF''@;'; put 'put ''IjMrYDVlNlpRaGB9ImI8RSxdLzQkWF91Sl16c0N1UzhOWl1bflY1P1prMSY1JlV0eDZSOGw8RFt2aDM6bj8iQTNbPDRWRmlOKjk5NyYlLCVuP1dLM1cmZ0EjblJ+fTxoKkc1b00uLC9XV25uTVRIQE4vTiZtdHRVcDM4NkxdWilkLy41cGc4SGZTSmtddUJ3SGI6Mj1DIS5hfkJMRlkjUjE8Q3tj''@;'; put 'put ''M0NJfHY/aCJkIkxKODxHfUhZcjJpd3U1XyVYPWE8dFUjUFlAb1J2RytbaDI+OnRZTURyNUJjKzo+OyJ3Sms4dzVpLyNReTlWOFFeQmQud1U/fl95e3ttO1VtTX4hO14zfV00Xl5BY3ZCWDYidiQmX2IuUkN4Sz1wTVUrPTV8MktWUENpOkJdT2JCW0JjcTQpeTApb1NYSCVrPlRgISNAKyROXlEu''@;'; put 'put ''TTMsRipPcDZOc1FpIX0rMzdCNF5zJVhAazZKfD5hcF4kSCgiKlA1UW1HS3pKRGo0YSg2a3k4YUYjMU5XOHlaalV8XXd6cWcsdzdpM3pDWyFkTGJddzxOTiFuLE5gO0VrVCJEKkpVNz9bdWxtbUc8ZD0pWmQ3UG5DTDMwP2JifC8+SWViYj9KOV9mVD8wXXMrfShnRE9JT3skS0tZfSlrLkczXl1m''@;'; put 'put ''fSZGM2FQMm8waWB+fEhnLCUsRWZZJC5TLisyaiI8YTVxJHFNLGM8OyhFfD1VaUVNY1BFcysxOXAxODFkM0FhQlk6YnVgeFAmKT9XfWZ4SlF6MzdTWmV6M29DPyRfT3NzVFI4cUBaYFE4PVBHQl1fckoyKC8oUHlGcktwXjt0dFhMSiNMN0kmUi8scShRSE15X2pZdHhDRyhDXlhPX3FrVz9DSylD''@;'; put 'put ''ZnQ9PnBKQT17UzdQL0JUeldlMHJ4ayIhO1dicShhfDc9XyFdbF58dHRxa1hKb3lHMVcsYiFaNTtycU42QH4wfEBCbTtuTHsuIT59cGhZKSxJfT0xMVNJcCE4STZZYTdXTWVvPytKPU80UFBxOVFmRmh3Q3JZen1yZ3s+ekRBIVZxQWtDPSpEUF1yVE56ZHcoaWlQJUFaMXtZemRwW29nL0RWc3F2''@;'; put 'put ''LlR9VXhJMn0xe1pvUHAmVEZrZH5+NlI8VHkyK2lFRCNUbTtYe19VWDNaMDFgVmozVl0vPGUxLzxtWU8hOyRDYmFpfmJ1PSpRVGt0flRLQFN2JCsoNjEoJGJFIltWSGI4M1k5OXt4biwmJHhVOzZQWUMkeENxbU9qLCoyWVJgaTdqNl04T0RIKjxHO000Kyx+WnxyJmovVz1BW0gmQUFlJjgoSUN2''@;'; put 'put ''XmwkQyM3NFN7bz1QMy5NekZRNEFJXzl5Z0ROekhGK3BlK1R9RHhKLiY5WW19fVd0Vzt3Z3IsfF53UTdnTXxhd0B3O1k8clolfGd3JXd4bz9SN3EuWmt6K3xjNGZhUzxiczlVQkV0PzNabWQ0Yz90Q29pZFlMSXUlQkpaIkxWaztjO0c2VlBuKjFIXVE6VlJPQC8wLHFxbXQrfE5UJHVJWixwRGpo''@;'; put 'put ''K20vcCJHd3IwPnZEOFl3TFQ+Y0lUP3UiVWgvJX4mPGZxVXk6VSIkO1ZXc3lreC5tTDwkPElUbmNUdkZYKS9UI2glNUJ2fTc/bUQ5QTpXZSpmJm9CTXQxOCsvMG5pZG5QfFlpaSR0X21oOSE3V1BpTGdaTiJsOS9IKXR8Zz1PKl0lYTdSRTlgPG5YT09FXiE6OWt7aGR0LFtFb2wjRD48OSQ1S1cq''@;'; put 'put ''VT5zX3dReXYiSzhaPSpKfCpKJntOLEkwJmIkczcsX2hwbHYxK3NAYHh2PnBlRj9OImN7KS40SD89XzFRKClyR3g3bltaX3Rrb159fUA9SWh6eUQrQ3hLNiU5flhwUnRIOXUuWlcoSFJTN2d8JHh4M0JVd0V1e3lrX3hJVUVoJSNmMD5yQ2k6KDdlM3IyczdgaXp4XlFsKj5yVjEiIjNvUj4zXyFN''@;'; put 'put ''MkEjZV0hTVdmP1dmOVBMXmBbQnJJLE0qJGwqXTduS2d6fW1HOHYjPChjI2YwNiQvdVRpPGJ7ZExoMWJFQH5NIV8sN2E7IWNsJWBXeCZlTCNecFJ3bHRWdj9GRS5QR1l0UGgmZFpIQTJwVDdKcHlGeUEobyxFakdnKUlBTUxURXVMfm0zVjhmVFZrb2VbJXUjKkw7aitxMG55IzxISVJtX2QzNjQ+''@;'; put 'put ''JFpHbkRAImdIP2tvImUufWpyLFtJYyN6XjhHdWNMTVZHM1EkQysxWSt4KTFIYmJATUswIVZCYk41JSxgLlo+TUsra2dvQiZYcSwzP3pGKWtyby9SLy5xZnl7ITd6NkohOjxhbHhPbCUuZng+NV9jMGhKL24ydU8oLkl4ODxkJnhteiVYQyFKSi9YOEtnYipsaFlFaTVqImxGNn0qZUx5allWPXoo''@;'; put 'put ''cUVMNkQhKlAlUHNlcHApOURrVyNQdV1fVFlmKWlxZUR6VEpdcWJGeTt8O3p8OHEpcX0vPHhGdylMOGMsQ0EhR2Q4a1gqdEJPQ3lDIXdTSlFhSVVlVytPbmkjUFRsM2kmQ3thQjdfcHt8R0hSXml5O3xSME9ndHhoR0BqeXd8fiF1QlhLakE6bWd5e080WmBuI3FTIkQ5SCV4OSoybnNHVX1EUVU4''@;'; put 'put ''bzImSyhKKWglMyRjXzkuUkFwaUl2KkBXUDcmWkxrUkxjbzpDKnVCQlcmdj9penY/PyZaelAkPXI5PG5CVH1DKUNqVk8mP1c/JkZKJTZJViQ4bGwsMzp6RFdpWShfWi4hNGEpJl83dXc3bSVfN3p3M0lbTCY7SXdWOEV0JkFHNnlIYTFBRn4zNyRIRGdUNS5JSzxyPF5ocXZXJEFNLiwvRnB9MlY6''@;'; put 'put ''ZlUhIj9hdTA0XS9vNXl+VTI6MlcjT044eFdGWFF7Mj8yOX1HOFFjeiozKXY8Vmg4dSNMUSwhazlqPzh5YEZDV3VrJFF5aEkheVQvLnlfQ2VEYGEpNiIoUz8lT1FOV2w7OlZgQE4uSC9FS2xsIXF0YjEzX145IXtxcSxORVVUO2ZzYzpeXkwxTWx2T1RMYkA9Tm1TdlRbcHY8LlViNkJuSXtbTXEp''@;'; put 'put ''MXQldmRjKns4XnZrSV9ANCMlXXVyRkd4IVpkVXBfJEx6Kk9QKmthWDk+W3IkPTYuekxVb2tOIW9ZJlM3bFIoOTxpdihtXiszQFdFcFszdU83eGVgIztrOjNNRiQlcEEkN0MsKjJPPHFJNlp0UWB7Qjt2bHdbayRAdjVTSHFuaXdfeWZacWBNdjtBU3VDOUZtb3oocVZWaGFicXomQmF3SSF1QGhY''@;'; put 'put ''RG9nblV5TU1ofTtDdGFZa0tJOGZJPz1XQG5Pc10+dHIkKGQld1VER28oYz9PO2U+JEF4PmAjY34wSTM3XlZ2aihlaF9AU1JjSWBOQjk+X20keGFRe0BkMkJRJmsqdE0sYjpJKjM6XytYb14ydUQ0dmpCSGAoeUQyWWIzeGo8ODV+PXdffnI4ZVZVTyRJJTd5NUE3MzhKazh4TyZQSHpQVGBTV0Q4''@;'; put 'put ''SDI4QFhOY1Y9WzFuJT03M2BgfjRqfUQrNX4+X31bYz49PkYsdWRqZEgzVVJwNCFHOWdSbXJ9Vjo8YnlFUEpMdkgyQX1CZD9eeGk/TngjPlV6RUA7OXoxJC4oKmtoLjI/eCVwIXdgYHRJSjBdfGR2Pl8mZlJGRjVrY1V3aU55ZnRVd05JP1hgKT41W0d7KDdyZ0Y7Kk14UVZmeHoiSihOfG1CemIs''@;'; put 'put ''bFQhWFlYVmZ0fG5pUnI1P14ubHl5YEQrOUc9a1BXcyx6PVd+XTM8SClmPTJGQlBuVGprSmpPU047MG1qKXc+JnJVOkw/UW8ydENCP3JkZHguPSpweTBufiorXjt7THpYSHJnakAzIildRSwkZXQ/TTJaQDFwdFIrbDRPKmRDaD13OkkmSzlnSXxUO3d5azJpZSMmfXxnZWRffihiJTdufmg7R1Ru''@;'; put 'put ''a3FSO1VrPVJhMCljSzQ1MFVdUFgiKVJZWDtbZFdPQUBPL3NSTHlnP3lqL2J0SUQpRzkuU0ZjanN4XiIuS1NWYFglJUJvJkRNckNfOztRJkdBJTV9P284SitVe2JZbnIsb00pNkhKW3ZLfW8mPmIhciUsJmpjWUI1LmRWTF9qP151YSFqVUNnPHNXWTxicXFpdXpCYmc/XmEhWzFkY3lsT1lRP2Uw''@;'; put 'put ''e3Iud2osUzpqIWYvYnpgKTEyaWAvJW5QIUB9NFhTRGhsQmNaRmdMJExAeFF6TCJPYmE6c111Ykd5d0g2WCtwS2t3KUx1YTxpMz5CVnp6fntNZEE1PSVOIjBSJTFaNmYkLjYkIyFlTSYicUtISnFCL2IqKFU/PUxOPnx9Oyo3fldldCoqfU9MYmxQJWNMUjw/QDd7VWNYIiRGfUBgfTl3VylBbXZw''@;'; put 'put ''S183Yio7PSt4Iy5sPXVtTHBsYz9LRjdRbUVESzJXIlppOytTTzJbfl5dLyZLayQ0ODxWYnkjdUg4bD51MihfbFghZXQsZT9MKjExR2k2Q05yYCZrUjxoU0FOPV56IX4+K21CPH0ySHRSVUF3JjNtQ0JUIWM0TXEzU0ltY2tob1BSQmg4Um00eyMuflJ+SDlhUjJYMHEhOFMiWTBqS24vUnpUND1I''@;'; put 'put ''P0kuKnFMQzk1cVc2Inl8azE2QXZdUkldPyQ6PHFNZDlZPitOenBiejUxfVh9eypyaHNPTk8qfFEvKTYyVWd1bmArY1l2c0ZzSitiaXZGTHdaSmErMl4oREFGKURQZVtbKl5dZCVEbWlSXV9Ea1RqfiVoQSs1PERIW1B3WzRBNX5idF5pQGp1fEAhcTphe0hEJjJYMkRmNiwrI0BlcUhlNSFxcFhk''@;'; put 'put ''Mj5MJHQ6VTJ0fFc6M0hOQHBAV05QMU1efFIqKm1MZGcyYF1zUGUyVHR4RmVhaWskWGlmNXFPXTI7Y1krdHRBPE9HQUJsQyJnJUByZkZlNmUheDcqdH5HRHs+R00lZzlybFhwK1hlRmx0TmNvWUozTk9VUVYpU2RNZUVgWDJHcFlgeTdiRz1NWkJjPihZP2psTUI2PDRpNF1dLzU9Rk98dHRCOk5a''@;'; put 'put ''Ri8hTzduOnpITSZZTTU3TEpmNWtrfnFKMClISTBNfiNAUmQ+WFRmdFglIVE+ZHYrO0pNe1lEYTJHekhNbWl0MzMufXpNSWo1KXZFMm83MHRLJDhGOGZwT3EwcEBSZVFMdDZsMHRPbyQ3VGUifFo3RjkmWFN8L3V3NSxCaFs8Y1Q8TXBNYmlVKFspSzRPOHk/aSw0OE94a0N5XTc3KSFycVZ0UTwq''@;'; put 'put ''LnZBIjN3KUgsLHtnaCEzaUA2Ql9uWikzRjZTKDIhPEw5QmJMOmI0VnB3QCo9cjhLVWIqb0xVKGtVS3VmeDtdJk5kd3lOYm9tQy53TXBaW2A+WlNkTlgqa2NVZzR7KFUsK2h9RjA4PnU5JSYleXtIdCFmKX1QWyVgJnZHeG1xIXQhIW5WV0BgNXZzPVgkNjk4TWs6OyY3NyRwcHIhem1+UXgsdTJW''@;'; put 'put ''fUd+bEhnPFYkU0ZfbjEmZCNlPDR6VUhdeVBSMipCYH5RI18sXyspYk07NDVsOFhtcGI0V0NNSlZnZmEkbD1RJiJDeVA0XThjNnkhPnh8NDdbb24mVX5XOGMqeDBONT5+R3wzWHZbKDY0TkRjfmxjbkVMKC96RSxAbVt1S0NabEFeQl0keEhMRzpMIjhJdHFAJW5iSiwlKTxKaUZBQ0VxXSp6WHQv''@;'; put 'put ''Pyo/VXZKTTVrcW5BRVBmVDFCSSpoa3hZNFFMRERaRHJVPyJSWTF1O3skdkwiPjhlKXpAaGZFPXh2VGhiLHJIT3JAQV4vKTpYZC5bV307TX1OfU8sK2JZW1VPJSNvLEUlOHloXSIjZFdBYyk+LmMkXn1JRmkxQW8sLjArSWxQXitRXW1zX3wkcSM8VCohVDVaQz9EKV1hOGZOdDcpK2YvMEh+TSxg''@;'; put 'put ''ajgpWW16Mj9UeGdnMUwmImtlUFgvOkNXXndQPX5VQlp5TE0/ZSZGdTNNSndsTTxmNTRnSzhRejsobXVuXVZNXjQ+SiNYbklpUkExUTxyJFpqNnczLztzZigoNGVkS0FXK2poJVZ+LHlbW3FFazgvIkBfLzVqUlU4RUBCT2hLOUcrTTQldWNEIVFUUm9bZ2dLPzVCfS5WU1tUOjF3JSRsaG4oWEw0''@;'; put 'put ''QSwsZ1k8PjF3bWBYYmtXTCF7QFdnZzNaWnpAfigrVyk1aktwfHB8VGpnZ2B+PSJ8Ozwufkklc0UoYCJMb0oyZmFpWiQ7ZUp3QmdOOFpzKn5VVWRVaFh7RmlnRCsqP2BNP014SXtybEFqaXxdbiU8JG5VXnZQfnI3KWZtKiFmX3w4TjE9X2MlVltbQGk1UHElRnxRM2JYYFY5S0RnWkR4ek5YN31p''@;'; put 'put ''KT1gLHxWclJINFlGKUp4P00hJD44bjgyMVkveWM5fT5bNy9sYHNtUCNdbCo4JHcjVmkpNm18aGgkI319JEhSQylQfGVHbENWXzNnV3YmPGhQQDxicEpUZkQuPiNsflFHMktiO3x0UW44ektHKzs5dSZ2KzElb0pLYE8kSmx8X1VeITQzdF55QEIxcXp9UjtbN30yez56X2pMTmhPKjs9OGJWNF9M''@;'; put 'put ''XXghUFVjIn0vYV1KVkVXKl19a3xKYTF1eH50S1BTWExTPjcrMmRqQk8+Y3x8XmorZmorN3hZQ1QiTWF3ZmlaXTVHfUd6Vit5dG81JSxuXTtPXi94Rn1LUztpWnVZdTVNPF8jVW5GNWNobWo+OEp6O3JxaHN4Z0xKNWlHc2BMYW1qNGZCOGRaTkpVaE4ia2k/UUhdQzxhVFRdS31gPS5yeCU+dCZu''@;'; put 'put ''LjhHSEZLZWRNXy9KOn5uK0olOHN4Xi91JiI2MUNEMDlWQDIjeiFUSGwrbU1ycipoOiwzNi5YKnYsOCtOOGJnaGp4VyhhK3MpQX4oOE0zYGclL3VePlQjJnpyWH4pTWFLTGFCdnRjcj13TV9KMDheWDlJeilaIW1+Y24xS1Q4cE5OM2J+dTBZN2YoPjo+bmJTRTUjQjtuc21pam9fL0g2d2smcFE/''@;'; put 'put ''ZlIkY2l2L2Y7S1ZsTHx2OnZmUzlIXXskeFY6aVtlPjBKPUtDY0BSUiJvWD5DUFM6XX5RN1JTQT5HK0NoZ3ZuIXs6P2tYfiwlSCxnUzNuLDE3YmY8PjdiNTNHXyV0V1RXR200OmFIKS55QzJxRmxRO1hbPzJbbVFgVWdiRzQ4R1o1ZSxTc0RnU1FjYkN2I2J9Zk1wSW8mP1JGfCNTSl5BVSxPcSFr''@;'; put 'put ''cHxCNVQxZDBZaD9EVl1PVXZTYkpaLFJfOGFRVU0qP3tvSC5JeChzaXEjLzUrfntldHV0LlFMfEN7O3lQeHZpSDAxbitxbTY2OX0sfWFmPzxwUjNTZkc6JF0vZktkQzdhO2hmXTtWQ2EkMnlhLnc0Ly84bE5USzFxRyY3VjxjIytRbGdHV0BuVFprbV5iUyFzemRbImYofnlPXz1ZNjEmaSY8Vls5''@;'; put 'put ''dUdGa10/WVo6TFRkW1ZvUktadldLcFV+Mi4hdUA9dVBkfDtjW3AzaXJGJGBrd1Q1WTBXUmt5S2dOS2dMN3V9RjtbfEBdUFNHJH5HLlJeS1I/SFhtbE42PnA6djwmSng3UF1XIzxaXmVMdDorRShPczl7RyYyfVpgVTQxcFlZJGxkMWgkS3QleFkzJS9aNilPbSRQW1ZNQy9Fal1RamksbCMsazUm''@;'; put 'put ''Mkc2LGRlTGdNelJkITwuRG53Jlo9M11DNnYvYXV6N0UxW19xNUd7JkYuVUk9KUh5ZD0rXWF3bXM4JTY7QklKUyMqOWRyOywjJS9HQnhDOWsoQGIhZy9DVn1lcDRJQnJFMjpaNDlTKm9yMlYxb0R3fUB3eF4sbio/bnYmKHwxYmNCcTI+W0M5SWlOZCtHWVttaiIwaGJeRVFbUiVNRUEjbm9GJHV1''@;'; put 'put ''T108R0dQVE0qckUsb2Q2UDRjM3tGdmhaPy5AVDxPciE3OmF2XSNeITFVPiVua1FUfDpAa3V+LjA/aER4fl9qflUjeHlIQFRacyUjdVNYO2s2elRWST5yfWNnVzpWeHxaMypUR3AyVVdINTM/fjRLKjBQZ2pCVmIwQi53TjAobFt3a0tnO25SX1g/PTUwJCJrPnE1TVEjQ1c7QjdtYjdgMjs6eUEq''@;'; put 'put ''JVdnZl56N2JaN3p8NUttakBXfHk1I2RUT3VJSXA1R2xlTkNEMTAmcC9qfT9FQmEqVkksNkRdKz5QOF9QSShjZzlPfU9Ha20oI30oVV4oM0lIWiRzcCVUJkpaQD5gWF8ma2JfIiRNK2d4ZlQmeyQuKy9bW1E4SmxvRUBVSCNzc2k/d0UlK3lzTUtrQlF+aVdKPmlYeCloMUkraiEwYUg6SSpxWW8r''@;'; put 'put ''UDIuRWQ6NmhvMDdrPyMpbE5sWlcsNTN+aSUudnNbZTJyRiVdZmxFW1k4KF4+PVQ3aU5AcTQ1Z0VKPU1bMHcuQ3lbcXhBaSU8bWBeekZ8VzRVWEMoJG1UI15KYlBaMDIlakUwdnJfbm1nPVV7Kik8Q0hUNGhTXlJQXkZ2a3kqeilYNFYydmdtMHBJQzlDI2daKFIje3ZYPERRak9wRUlkZjNsMCxi''@;'; put 'put ''cXVOKDpHOG0jYlN8YUg0LHZtSi9nYHM8bExAZHoqUGx3Kl51QCU4bHFyXSQuL2RpQHx1IV49SkAmdlFnIkI7SV5pcH15P3s3TmxFO3ReUjV3RWpxaGw2ST40TiREQXQjQj42YHwpQW0qbC9AMXcraGBoJCtSfTVeYGxJMjA6WmFNZXM5byVtYm4iW3l6LkZZMUUvWGtpJDx9Mit5TXswK0EzR3p5''@;'; put 'put ''czp5c1BpOm5EVVZyUGQ0Yz19YXFiSC5XNUx9YGBpQFIjOjtndjwyeHRkT2YuW2AsWmoiUkVFZ1ptMjVNcGM7NDMofjA2emBMeV1OOGc3KEk+dCEsdnNTeyZbJmc7X000QWFGVVQscUJ8S1AqS3tuVFFuTHVGTEsjPHwyRVV5NztxSUN9M1FXK2FMKms1Y2lCcHY7aTx7RGk4Sz1IbzRzSUYwZCV8''@;'; put 'put ''M0h3aGx3N0wmalZbKHxuPWQyQHcvdltOMHhyXUdBYTxxZU1vKHNNN0J4eTsqb0dxLj8wOlI5SVVNLkxkN2c5eWZUUFspVyUlZmJrMU5bMmJDVjBNJjB6YEJSJi48LzQ9OXd2XlB8WjM/O0piY1hGcSIuM0U9eCh0PlJhKUBvNmh3MD5tbz5rVmVuWl5gTyUqfj0wN0JNUm1EOlE7dnd9XThrVU0l''@;'; put 'put ''NGV6IVB4fSwpUF9dLyJVdEMqcEg4UGlUIl81LH0iLjQjazp5STlrRHo/cGZ2VFNHZmVAZzJoV3Q+YDlrXSJJISJrTF06NVdFdzg5ekEkcWhzUkYyWSg4RDN4T0toQlloTGdVQUZXaTVwcTdmSTR9el4oVHR4WEtwano0QUZ2M1gqcmJoXXx5dE5uWTJffjk1c1dCUUVXZixuI0FaNUw8Y1kkTkI2''@;'; put 'put ''PF94SDI3KD1nZWAxUHRnOlg1eURMa25TfkBibXB7Tm5sNXdde3FtSC8jPVIoajVQbnkkS2NNSyIhTFpXXSYqYCNHUTNPVmJGVjI6fm4pMnAmVUUsKE93aXZvTllqSChmXXxeMGteTyZ0TW1PaTJ7PUtsJT46XTFhckUlQFNealZDUzoqJC9GTUA4KldEZnZrOW0hdWhnUm5tVjZYPztyezphRG9a''@;'; put 'put ''UkdIYytsMUVXeDFuRF01SCptQkNVI3RSZjR2e0xHVlojMnRoX20zVWRXVTJpRyorWHM/KG4xZiMhcSNJOVpwVXVQbFpVQzpKKksvfDVhJVZ1NkF8TDkhTCZ1eVZEMTc9O2ZeenBWP1p4JXcye2QzSD1zWyY9KDZVOHRLTFtjV1ZnQWVbWFMqeCp+Oktdc2VuMjxiW2kmOD1nJFJzbn0pMk5qI0Zd''@;'; put 'put ''VmN5c2ZsVG5rI2dDQFNPZkVYJkFaNkd6Kjk/PGJ1NV08SHpbXiQjRyRUZjFnbmc7R1I5RHl9KWgrdH5MLCYkLGV+PT9OMFNWRlJNbkU2SXovYzduR2AkMHhjOWFgPTlwNEJWIiNqKFJOaUY1Y1dITEc+Z3FMQVAyOFlwMmxkSkU3QWcqV0VzWCMsflRZUzhoNVZxIno5MipMITEzc015SCp8XVV1''@;'; put 'put ''eUU3Lls1c0FbQT5kP2lQd2hSPDlFKykrS3J+dkRzWnJEI1FiLF0jOWcmfTVsfGJMbTIsbGA2V3dMTSt2K1koXjlwPnl+V1J2NkFrdENiRE5sOWpbP3xpaWo0QFo+PzFXPzJ3SFpeKTw5SWtWIyFuUDNhWDQzRXZKRkhVcyhiP2tnW3VKUjBIaDZDK1JOYU9lSkopVitoYlQ3dGZpIS59S00rayU/''@;'; put 'put ''d3VEPHdhXSxTUXFwXip6bGUkMl9WMiVCNWxWXVNzIVhxfTQ3V1B1c3E7bDlLSzFFYmdYXTlRdiVVQkFKRE9xQSM0MEx9IW88SDhaZVtiIkMkejV+enw7fTFMQG9tWlZHQHo/Tn49dTo5TixXMyp4P114RlZdO35edylTcFQsVDcrdy8zIVYmTGN7PmZMQ29yNzk5eT5SRmw/a3tHKHMxOUtwKio9''@;'; put 'put ''S2p2Mmo0WTluLj1oPThrXmU4PjY4JXFgandWa2VJQnhhS31NJF1dYXVaUUR7TiU1em5uUlhJIXVWTSZwSVE4UXBOKF8oM2ZJJm42TEttTWN6MmNQTCp8bUdqKnp+KEpPXjdaNlIhXVBCJSwqSVdoWTY3JS9iN3k5NktHYkRDbnkia1MuNWpUclNidWQzbDZJJl1MXWYpKlBrPkdXWmpNX04yRFZa''@;'; put 'put ''Q29vTTFqPFBFR3kkU14oNk5dQzAzX05CX2IyKi4oUD4jOCJ6U1EsPl8pNWxCYnRuYHxbMnckTlVEelddd3w8ZGMyPWVQLH46K01wQzdaYilaYTB5Mk9wOSZgeV08WkVpaFRPMFM8N3tsd0Z1fEx4P09KX3B6PHk5Qlc5K3FBKVEoaCZ0aVRaVylEV2AhIWlNSWJ7YjFgcUhEPnFaNjk4LnhlYD1r''@;'; put 'put ''JmI1OS8wOi8/aXBHL146dGIxe0RTU2JrLzxDbEhAWDIhO0lqOlNzNlNoYTlmKkded0AoOSg7UU0vP0g5SyYqLDRMTFJjbSEsSjVbcns6djA7anFNUTptWlckVWh3JkwjIU9CbjY9cihKRGJ4O3hSTT0rNmwyRT8qKD9CLnVGYVZ1UCVOeUQiN1B9aHUvdFpNVl1jb1UpJXM0TCxVa2tDQ1tNbk90''@;'; put 'put ''d291KDV5RENMInsrNUA5b2l7QzBKS3BbaGl+XkRBVVFAKmYoZF5kJS4lNENLe2E5dytuSjBKN1dZNC9ASFhwKlgpKDpOcENDWzBZKmBhSn0yaHh9ZWNKfCsmI31gQSY1dDlUdVJnekBZVWYrM18rI19RKypAJXE7a0chXj5adCN8fGA9SEVeM0lqWDE2PWpaa0M2dUV9KHJgLi95T14sPiU7KldH''@;'; put 'put ''dHFyV3Mwb2d6e3YoRy5MWE1oYCpXRV5RbT96UXFXYyxwLiQ4alkxIyF+RVJiKHI3fVh9XzZCcjMqKERFdFh2WltlbFY/KFltL3loSk8mImlgWjV6L3k6JTR+UFBtNSNQfk5EYXU6MVtRcV17Iz4rUWlmci9HaSxVJkQ4KTo7fGldUk4iLmVqfntleCI5OXsmXjw2NTlYay94SD9bYy9nT0wsVS9Y''@;'; put 'put ''LiFwbCp9fC9sWmNZdURafm9xMytbPllAKVNpSTRwN3oreXwpe09QR0UlRU5RX1gyO2JRXXtHSFsuQ3AuMiUqVUl5cjoxa3l+SHs0PV1JakJ0VnNRTDohdGpkKDFee1lPXXkmVkttOGVedVY9L3MxelpYcyM2Qms1OytDP3dQIVEhRmtVXTNvaz56NCxtaGxPTVgyK0YiQ1hLKSEveklNYVFtY0lO''@;'; put 'put ''dDNQO15RdlBfMz1YZTwpK3djWG8kJFgvdlUwYztzaHdaMSh6ZWxieX57VFo4b0ArWTsjTT0xV3twKT5bLkBYK3IvQDsiRihiQCs1XjpxZzlpPH5sUk8sX0Z3YHNuZUFORmBIOUZscHU9U0IuTDQmR0xFOk5CMCRxNmAraCY0QFZwPVs9ZFsoLnVUOHhJLno9PWxyWEoqZG41ZT1pUjp7Q1c1MFY9''@;'; put 'put ''QjhfKn09MWY/QnZSUllnUnome3FZM3I1Z3cjUFk4NThAKmYhbS93VGlxZzBGcl49MUZKT3Q5PEtEPzwlWytQNkZQUlshPD97QmgkcENkYD53IkkyT3U9PWpeIl0hIisqL1Q3cCw/cDhORktwdnB4dl15Zzxsd0BoUlM2MkQpMEFQP0JeWEwkSlpONUplUj1LO2plPyw5KUpzYlFYejMySjVdcCF7''@;'; put 'put ''Ul8+b0J2RjgvQE9fPjl+VGpvaFIueGg4JDA5YS9LTTU/ZC47N1lrTD9QRlVEbVJ9emJKd1YzflE5dHY/OHJBbk1DKTp3dEkiaVpwcTosZTN6KjlQWW4sU1hMWkpHOEp3JXYyaElXU05BbzM5ZS9XLn1VeD8uQihdYSVfMGhlSUA9Z1tkJDRYNSZdUU1aUSZkamRMS1VyT3B8Xlc/QSVrWXkqVnln''@;'; put 'put ''U2ZRKDBCaDF5bCFsWzJFZlZUL3ksbiZ4MkNjMWZieSE8bC9CIURIPS8uLzokUSlncC5ZbVBoZlp2UktffTxeSlJAI0FFeTtHJTVuMGApTC9JY1dMNi4yaE0pdWpULkpNOUY0bVQkL2VnQ3UldlRzayFBV1Z+YTY9UV1Lfm4xbzFiMFpjbi87eXR7LndpOmVDYSY7SytVfD8yQFVrbX4zZy80QChN''@;'; put 'put ''IU05d3pYSnwsQHY6O0srTWRyVHhrZS5NS3VhJGN7KmFvW1tHVWRsU242Rk5+Ri9hUSNOJWpOMU9BQE0uP15ob1BFZmBpeSF0LiV7dVtyaDopdWt4bzxNKVAuL2JGWDphRTw2Snt3W1EmQGIlS1hbR0BSSmoxNzRCY1IpKlskN0QuUkdYWGIjUS9UfHA6LDJbNyhIYSg1KnhLOSRGVEhfNVBHOUBI''@;'; put 'put ''LmpLQD5OeDpNbSNwMmdDIXcmbWdDcCJqWTI6PkhPIzxvaDNLNm1ZYlkuMUlLWmhAYks0ZHJ3T0cxa05AOlpmPl18LE42OypfImYhXzI6fU4uRW8lLmhQS0MpN2Z1JFc4TCt0VFBUI28zaF1bZiN1TmQkOFZCQCV1UD9oI0c3WTR3aUg2ajFlLHNfWUsuMXlfQWh1c2Y6RC4saHZwfT1iLmVBRjlH''@;'; put 'put ''X21qenEqQ0k+bV0wOF50dT5vfmU1U0FSNGc7I2hMQ3ZJQFFpLGlSRkIpOVVYbE8zOkU4NnVJP0QuNkAkfks+Q3hEXVMpRn1KWjFPUURaYyZnVEY8dF9weD9Cc0U2LjNqWzsyVVVKaS5Mej1RP0RXUFNmNl0kXkolU0BEP2tIPiNuYGp3RjdWVUdadiFWYzUodF1panE1Ylg1Um9NSTdAXzA8SypA''@;'; put 'put ''bHg5WVksX0g/WCw4NFIxRG96fFMzR3hsSy5SRlB0RX00eH45LypUSS5QVnhdKTorYWQ5ZU5eYiVUYG1UZlJpK0cpQk1VUzJlVFd8NTU7TnA3WlhaQk8lODx7RGk7Vl9TYmEvMT0mSkxAW0RBITxWUGk6W3xFRktPYjdOXiZJYTg3I2pyLCokKzloZz9SI0Jge0lmNVksdS9GOEpMQ2xIKnphK2A7''@;'; put 'put ''T2lrQF5Rel1IRmN+TTE3bU06P0hSLzZ4KylzTG80d00qeTZpQEx8SUhNaFJYNUF+QTE1LCghNXElYExlbyFfRWoqb3tgbmUsc3t+fnRUcTNsZDYzXiFNZWo0SE8kfXsiYT9fe0JSfCg6UiRac1dwaDtSJHlRXkFmYFVTX0EpfnRaJGxLTix9RDh9KG56KVNiPnlXSEMzdkExVVc5IjI0ZSFHUSs5''@;'; put 'put ''PkNld3BKUDAzJFclOzQ/U29uSjx+THNWVWo1QSZBXnlIRVJCNTUoZi4xekZda0dmJix0czouTmckNFBGJTxEK3ZCRUtaU1MrT3VbVWFwVkE8L25VIUFIemE6RFI6fG90SntqL3dBZyx2cUlzRChObS9tSWMqZk89dHlMXiZrNnAiUV9BIlZyQjN2c2JIIS40KjEiVmo+XShYPVpmN0c7SlhFSjlC''@;'; put 'put ''NnV1TGtKbUMhcnR1U20zY2d5bl5tUkYqLEgsWEhuZTRdQS9wOEwwV18vLl1iNzxwQ2tRd0FKS3VkSVNqNStpNzYlYWlKQHIxbVAlaHI/UUwhdnlZUjg6SCFuIWksQCNgPl9MVn5OW3Y7VWpPdHZCMV1kZy5UPEg0d3JHaEJJXTkhcWNpIzlkJGI4ZDhfYCVRQ28+OlFIamlidm0qVmd9a21ZOzQz''@;'; put 'put ''TlEwPUwoeG1WQEgsVTVUY3BOOG5oInZDVzlOd2ErYD5YQUdBZ0RCdnBlOCJkUlZBbWdqP1JRa3BhRj10Wm52bERVWU8mX01tbj1VZVkqNkp+UDYiLlRSRCFTSWNVPXV6dklWZyllZG5Kfjl+WlZOK2VNbjVeI0N3YHtON0J7eE17RVIrMDVkOWspa0MpQ3JbMjh+UTZmQyl5O1dNQ2BEPEAxNyZg''@;'; put 'put ''UmsoeXA1X211ZGxgWzZPKk48dXQ8bzA4eEtkbSQ/M2p8N2shISVYPzN0SHhicXl5OiMucDgxPCNVVntMU3ImT2dOUkhnbGlvPylRY1sqZm0vVmlMIWd7VHZtYFpmQEEzXWlQaiVmNzgyY11hTz1xLllyK2EseEt+NDxDNSkoTCNJN2hmLkQyR0MhJD9jXykoQ1ZJVylBPGNOUyw7QDplSk5ncHlX''@;'; put 'put ''JG1nW0dZXWola3U3IkchMyNOSGlTUiJnQGxoX1BjI0Z3UTR5Mz1qeVFiI2R4czNVIy5nTSZadG09InVRLk1BdV5+P31jJlVoOThIQjZ5ZmdZeU9KLyx4S2J4bVI+RU9OPUBnMlIsNmk4UTJjdGJzPTNiQ3w/Y34xdixOUUJKIV1LL1tGUktTYFZmVFMyfl10aSZEemxfbmQ9Njx1YUM3OGcvOSM4''@;'; put 'put ''LltRVD4xUSYpOldsc286Z1IvemVKKmxwSzswNEpmYVk4dHgzUVV0JjMraW9XRU5adTJ8IVFqMFd0dy80TW4uMDBLIyRJZkMyXnJhWlZ4KyFGV11SUiVdd0BVP2pFKDQkMlZ2JmN3cyRFYjwxTDdhNSJnPis9dDdVQy8vPiZSZDVIYWBJRCIuMkxTVVRofTRkZ2RLN2dKaVU0WFJAUHl1PSFXWHlU''@;'; put 'put ''NTNTRmIvOitZalBjLHg/WERVNCRjNTtXZmN2fnhULC98UyFNJCFAIWh5eWg9P3BTc04qYyVOUXtedERPLE9vcFRFUi9WOkp6dypdZVJELDt+PzQ/bzZEdlIrdVgoJihnXn5PaEtyLE4jbzF2bDNJSWhpUHQmSEZMV1pbYHg4SE1tX3xOUSE4RENsTkYzQCtndFIwVSZdK1s1PlpRLFE0c1Z9QjZx''@;'; put 'put ''WmU4LjdkQztWTGJ9PHhUY0pxN0JSdTZxIjlIbG1mflNfKCN1LkYlZT0hKjVDUFlYXjp0fkwmMWkhZ2QlQDtWSXo0W2ZvXlQ5SV47WHl1PnMiXiFeYltCVHxZUDJZJkpQMHhYP1VOZGhqNFFTQT13fDIhSUhTNVV3bDtNd1QpSSRAaStgSl06PGBDRklYPTFDeXNoWiZ0PnlwQDJkMF18Yzp4ZWdU''@;'; put 'put ''ZHtDLz4+fH4xV04vdytvXlRuTC98MSE/QHliej9lMSR8bi9zOXxLUkoiQnVbISNQX0xwNEloO0BMNTAkX2U2SEJJZTRRVnVYUypmRW4sRVo2VSFZJls1NGNYbklSb01YTTM4UlIrSk51b10rcUJ5MV1YcjZmWSh7KzcxIkVOZkg8NHshcmwwImBAM1R5NExVQ3tDLnwkVEBoWDBvQXElUCp1WGBd''@;'; put 'put ''VXJCSW4uOiNFdHJSJDVTPFhqflZmKTgzI2xnRUlrTHM3JXt5P250UHRjeS5+O35LQzc+UigkMURyWFNjTUA5NUQjLyQuZXljJS9LWG1sI3Aibz1rZTxSKXc1alFFIS9MX0teOSp0KW57eCVMS1VxWCw0cEJbI3xnWGc4RWwjJC8iVWJ+Wn5jTmluPXYzN3toVk88WXwwO0RfczhMOXcwKTRlOEpf''@;'; put 'put ''aUIzfUI6KSZiYWI+NWxCZWl8RSRTK0Q8KTkjaDJ0W3lnUUdYcHc2NyR6LDhHaigqIU9dZWNJRXlhYlJZWkpAd1hAND5NeF9KXW5KalUxLEVAcj5FSlQqI1I9Ym5SbSNOVFJnS1FqUSg/KWtVSXdlfERhNi8mbT1UT1pgO1JUWFgzZzRrcTFpcXxJVGM9Typ6Sj0rPyJEVG9dYHwkdHB4K3t6djNJ''@;'; put 'put ''dHpCPiEyImJDQWlxZn10QzI4aSghRiUmVXVzb217OSVZeWU3U05oW1kyTGREWHhoVyZHJERhbktmZ2gsREhkcEk2Y0xdeERCUzoyMDh7bGJiVChtRnMlOThTViVAO3l3SVF3R3UrK2VEWmlAS2opVmhocH18bzl+I1ksbkx2czhQUmU0Rk5JRDxQYSQ2aXt3QHdBcDRMPkZRVFZdfXAqMUxiak41''@;'; put 'put ''RiJtdzYqS3l5JHI7RDVPI2ZuQy49RXx1PS5md2FDWCFSOntWckFtWT5gZT52dkYzRDY2RUVCbDZvKzRRWmBTRUsjclp3dF1uPV1tX31UQkxFcHpqNyQ9TGp+RmlBT2coXVh7TUxfQ0hfQkloZmlpeTN0IypFJighdDRePj5SPk5Sb2J4VE8xV0crWzh4KjNUfGJ7Vkt5WTZkJWZEOV5nVHZkW2JB''@;'; put 'put ''cmA7XWFNWipBMiJxdzxLQHcwWyt5bH0vdHtvV090LDlKfTRUZGo8LylMZWhOa3tVa1kjKX07IWlfRFBBajxtSkxfZzhZTlRwa3VlOlpERDk7OFdJUC9qeV9jYlVtcGA+bSlXTiRtYF9mRkAsPFNCQ2ZeOGt+eFkhbUcoO2RpK3ZSY2Bmay5LfDptJWJvZWFSKWNwSys8dUwsQXMyO2JjandRRj01''@;'; put 'put ''MFMrZi4mNGlyPnpKPnBSJW82KDVTZHxAdUw0QUluQ1EoSDwwZiVKLj8lSi9JTkViZDt6RkllTmQ5bylvOVF8R2ZMJWwrLHd7STI+VitoYVJsMnIxYE00cSRicXNjPl9oQzAwRXskMk53JFVrdlddbjRJcVokVUNQbXtsRmk6bTYpKj8oXmVnZEpCdnd1c2RuN2NDSiIpcGNobjh1TCN1Ui57PjFf''@;'; put 'put ''VU1vU19HdCt9eU18X3x3M1JIVHQoO0FEPnllP0lgaVBUdFBhZTV3UXBiS1hgWHRWaGxgNjx3V1g1WD1NJiVEPSxacClfdG80S3AifSghZHtpY1lebHsoRkMhODJFWWE3XUQkOWdJL0BMZDR9NCZnZ2EsNVZkTDBQeEZ4JC83b3xXZ2UwalVKc1okei5pOUhrL3U9UnR1Pm5ba2dkJChWMFNxVXdv''@;'; put 'put ''KTB1Kjt9c2l5SnkoVyRjPSxLJVA2TSw3bUolfF9bWHdaW2d7cz0wV0UzUVlFVDQkeHkxX0VwdTQ1WF58KitiUD0hTXE7IWsxfCNDbEQ6NE9OdDZzWS5dJllCd1s2MSN1PlNvS0E7UiV0Q0VWdlMjRj0uOlQ4dWxjJX1zfXxTd0VPRF9aKixodVd+P007ODc1LFpEKzxYM0AxfVZZfGJMa04lLEcx''@;'; put 'put ''MX1sfk1eNXdtOFsickglYHJ+Sm1Oa0F1LCooVE1eSSlxZUNudytDW0goY0UmVnJyWCp5WF1WNklRej5MJCtgRiozeUw7LD4mIT54PkdKZTR8S3M4P1kpMXNUaio1VzxZY3Z0KHp8NSJYWEU2VXVWbDVGUG9dcyguSFl+TG1pPF9KZT8payg4RlNqUWhnOlJta3tifWE+Rm85cDk0bGYkMWw8dkk5''@;'; put 'put ''R2siZ1Y8Om5RPXV4LEQ4LCFxQVZqNiNvLzYsS1U2MipvQUNUQTUsRmF8QyRmSHJjZWxyZzBmWUd6JTpGZ29jYSt9Jl1rNFsjOUdXZGxlXyNYM2BvN19yUHRpW0s4ZWBaPEkrXzxIcVo7OzE+VXxfPmdEM0k/UktBT0Flfi88e21LNUVRclh5MDg2UFs3d1k/LnVrNSUxMjtENFJlKHo9NThyP3p1''@;'; put 'put ''eF1gdXVyKGxmYllONHxRRSFTRnw2Xk5rRztVaFZPazIuPC9PW349VFV1fWwqXSw9KTRjR3o4eTpNWzQxIjEyc0x+QWw6fDlFZjRXPXhtVVhoZHdbfGloY0ZKfEhwWDM3fDA8UVhuPER1cUd+TUkyP0tnQlo2Nlg9MCFSVi8yO0pqPEEpX2p2M1pTJSxqMGlHZzE1ekcqazZNPGEqMCwjIUhOXilQ''@;'; put 'put ''T345PFZjNj1YI3VKVVVdfFpXe3IidT1VLGE0Q3hGfVpjS3kvZEA7KUduekNacGtHTX1uTComNUcmLGpbN0pzUGJARmxYb2xobVt0O2F2SVssTiZaZiNDSFJpdEVISEQ5PUxFWStHQFElI0NpOjU5JEx4dDQjNnExeEJFO2EuXWhvJF4/JXVEYWBxaXpEKHd6ITBDVz5KRF0+WFQ6V10qbVhtVlIv''@;'; put 'put ''cUNOUFhMOl1aVkYpSCooS3A5K1JCMVo6W3g8PHtpX3hOWzJdW0dTJGBVbmNqVDpNdWFySyVhNGQmMHtuYVlUXVV0OEdxfSwiX2tySWRoXWY9U31aIlgiOHZYfDJyQ19RIjI2U0QpXSh1QyJZWSpWdzkvYCQqOyV6Nn10bH0zRWxJIUBNQiR6c34kMHxyck0sV0p4Ym1qWVZtakJXamFqZiZpd3c+''@;'; put 'put ''SUxpUEs/OkRLIWZCakhBUTdaI2chamdaRiw4eGEzPWQmdkk2O1BPTFVQYXhNWn5nNj11UmRybThIc0tgcGQua2ljWC5mVjJzLzkhUXluQm9fT3IxYCZnVHQ7eT0/eSVVeGU9RDxWWXptVFpwfE1yWXlYOlJoQXNTMyZ9cDdaMjUqOnlDY1g4TVckV0R1I2NiQyIpYVVbbmY2MyxYKV8jXlJ9Wiw4''@;'; put 'put ''JlpnR3AsSWRnOyskJEAiUihqWTpQOndkcThablJwaXY5YypiMjdBVUkuZ1puOkUwS044PT80VkZAKDRyMjtGQnlwSU9xaD97VzBrTFc5eHt0fE89TWAsTFUybGlAVE5uW05qeUBlNDUrYEYkaHcjTT5EMihPUEUzIjpXOnk3X15WPWkiNlYrPUpFeXcvQyIkRTMlKWtgIVRNJkNsPHxkaDpzJGs/''@;'; put 'put ''PnR+UnFxI11KP0pwIUYye0hGI1BYNjZPW2JobTcrZUkkZz8mcT9wSTRmQ3AzWC9xQ1ZpSklZe29pJEdAYDQmfW44RFRsNX4ubjJ5eyV4OC57Zz5bdSJqM3FrflE8Rld7bnQ9ZzEobVt0RTdKSDk8ZDQ+USlJNXgyZU1uUH5GdypKIixdR1t2aVIvN1pQXSpEY3VPPEY+SCtCNFd5IXtMIjJDJjZh''@;'; put 'put ''LCR6UGNid3t2fEBHIjcuWiV3JnFiNUNZJSYvPU59di5LbyFte184d2JUUVN3SHx0MDhjNjZnK2Rrb11mYCMxOGhaRl1NJD1ld2pKeTIrP2d2LF81RUUvb1ZNW255UVJ9eTpoMUhsOmA+fDE+TVs3LHFSfGJdRWgwcnQjQ1tRbnMoP1B9TjVFfG1jTyp4SmNZVHYocF15fi5nQS8uMmlmKWIrQWdI''@;'; put 'put ''XmNMJFRqcyIkdHVQRnFufXt9SXNXU0o8VjNzJCMoQ0x7ZVZdZXNXJkV1fmBQOyNTXyNMdE0ibDlReUlmS3xKXXpQSFc0d2BDXTFASmNaeVRgZmF5SXlYRTZORGcrZF4qT3tuQmxAanF9WmFOcnpBamZTdVAvXWc2V3VvKGJRd245QE82JGtXc0xJdUdyTEUyJUVMPmhFeDU8XmR3JmxYNDcoTF5Z''@;'; put 'put ''NUpWWj4hSVZUWUkoRlEkQCZJZVE0QmpjU1AjJlJKOmxrMmB8KiVaSWk9P0ZKUT5nbChoRUwyYTV0QXVTb3JmdixuNilwXytUajRGMzYsLk48bF1QeldlKDsrNlZXJVgqRSgpRzREYU1aN1g2dERkfUA/XmFEdUA9dyNpPC8sbWNANzFDQ0h1S2hZKnc7NWkoKys5Uk9sTT1Gc0kjW2I7ZGVHMyhM''@;'; put 'put ''XWc+ZEciK29ASClNSnw8Qm4wNzxbVnM/T1NmWWpDV3RgaXQ+ZWExL0pPc2l1MS8+Kkk+NkY1NCRjXSxiM3giJi56UmhZVzFOPmZDYWRrUEVoMGY+bnMrTTsxJSR8SU9DOlRIOGNUUTtPckw1MTowaig7PCVpTShAX2RAMFJ6OnZAR1J8YCw8P3JnYnpvQkIlTFlnIk9zYERydWQ+MmZqPkdHQkNV''@;'; put 'put ''blZnImshYHc/QVFPMitMeTsxci9fbjlCWDQqSSpCYmYhXyJFVTxfMWx2dSs8JkZoSTVFW0pGNjZnYnhGWGxfJk04KjhMIX47Ji8pbEExdSs+TTg2QEYjI35Ge3hHdz4oLGlIbC9pZTJCKjo9Y2xOL0k+WmpPb1A2OCokNnR+PG4iMyxJR1IkUGZVWWpRd18rQXkxfjYiUkA3bl5Od0MlI005US98''@;'; put 'put ''dyRbbU1PL09iNjBzR2ovUyhhVF86M3RGcSlWZ0d9NXZyVF1LTGs8fEsueT0+aEl9cE1jQjIjNSVgKjtXTXxyUj53e2BiTE86VHFEZnAvYUM2WGlSaUw8OztXZHlfPlBGM35HV1I4Vyl9L0Z+bVkoT1ApME0zPnswN354SF1jWk0qWnhVbnVRZGVgRzp2Unx7NiNRTmFeQipacjFvcjo7RigyOCpU''@;'; put 'put ''ei4maDlzIjp0cW9HWmM3ZGpydGxbdEdtOStUcjV1SkMkRFM5TT4mMTBEeXNBZzN5aX5nVFNLMV15cGUuaDskVWd0JmlgTDpNTW1zQCV9RT9taVNZMThaKj0wNG9qaGFTUmlkPD56WUM3ZURYSjYpOF1rbDBBaWFEPFJyaHtPfT9yJW1CWClLU0M9YkN9fiU0Z1F1WV9fPjRgaDpDQ2k7P3V9aSIm''@;'; put 'put ''TDcqMnBjTW1ZNyZ6YF1lV28pS0dTbG1lKzkyKF1MeUdVTnk0KjVjRTdMfn1KWWEmOXgxa0xQREAjUT1rOF0vQ35AeUkkK0BWfF5tLHE7dF8qcjYuY3s9aSFtZVksMmBTdilQKGUscDxUeSpFJShDZy5GWjFle3B1QHVGSThbbWRuYXpNT2YrPz1iSilyZEcxdjdPY1VmJklmIz5CV1cvK1V8ZyEl''@;'; put 'put ''MmRFP0RAdkhhaTYldzJjeERqTjJza2pTKiUpKHkoRUZXT2BoPz9tI092KVt0UkNDfi5fUjdXJnxWdFRXTnhkTlAyOSo1ZmM5bkM7UmwrPUpaZ0Y0SFBMeyg3RjouUTZGL30kR3FSUSkyR0VFcUdAcXZuPjFCc1ApMiYmRF5jTCpGVEY7VEJxX3pERTo7fVddVyI2In4wITRLaTRqeUA3fXx6W3gp''@;'; put 'put ''WV0hezpMaVdFcl9BPCZTVWJZQD5KYUV7QSlON1BEdkU6S1dMeTMqPlB2fCZhdixvTVpYP0YrMyQwP0ZXekk8UlBQL1pwUENgPCxiX1tlL1I4T3VnSl1Xa31NT3ZwLitEb0JZOTZIbjpDfCwkSUF8T2BtKUd7OFI3LyFAQUdhSXU4VkpNQkBNQ2hnOTxoVzolTUQufjh8WVtlQiFkOU57cFV0KX1O''@;'; put 'put ''VGQ3Mj1Rc0BKWlJXcksmWnR6KUVqUWJfUUh7d2YhNjA2O3dFLz5wIVIqY3o5XmhFPmxofHdoPj5eeTBkejRgazB6aipBTm9mOjo5P0p4SlhMTS4kSDVxU0giYiRgbGtRLCZyJmU5QHJwYExEPDYyKGt8dCxiN35dOFN4Z2BrZlkzM3I+bDZQYSVIWlVBWV9edStjSXt8OXlQeCJ8L2czX0FEOV51''@;'; put 'put ''ajIqazk1ZVs4Xm1+aTtBTTdIWE9hS2xSMXxhVnMvOis4eG1hIyEqREtGVUdAejZyNFo4YX0xRkVrbkkxa0FTMmI3XW0pRCVKTV9pXj1VRnE4dVY7L21kfHlwcF5Vd0YobSQ1ITFhKSxOXm5ydU9HZzgrWENGLHhsZkVLSXJlNEtHWWlDPnhCLDQ3djdiUnJjK1NNRnVeOGVPVF1mcmAqWWBOJUFm''@;'; put 'put ''S3ZzZilXb0RRKG4uNXk5SFprTjBtSWdDQD1wXlNjeHhBJH1SPGpaJkJ3dztecl1WcSpse1JhOShvfj5JVSV3bWg1LGBxc0tMNWw8OzVgdltUeHY4WEx9Q293LnNaUDpOb1A1PU9GL1kzVkl1JXpud11eMSZIW21aUUd3bjg3cjY5KzJOVDt6anZsRTomOz96PFlbQzd5WDV5cDJYRXgkOnRSeWlb''@;'; put 'put ''TUx0UERfNT81ODdfUTV3PTNEWHl7VTEoMCR7WFgyaC5QVX4qfj8jLEdGaj01SyFqTHI6Lj4ufVArflY6aDh6ajxeekAyQ2kjbX1EUTpCdDouRU1gJislYDhlMkR3an0+RUVhbEdeI3FSaVcxWWYwZVU5XlhIeXV7Ul4qNE13VTVqIyx7XyZ8VEBNYmYyfm5Rey5Ab0E3XkVMJko5czY2dCxaTzAh''@;'; put 'put ''UU8wJjhoOUR1Lz47QEdfTC5+djk3O2JLMHVXdjtLZiMiPXpZIS9jNntwXyxmXU19flc+M0JiQDo/antzPHlZUHt+MElxJlpBfE9dYV17VXFCYykySFdUZz9WTCl5SVg+Q00kc0paaS5gbFM4b2NXNDhebStlVCNCVkgvfjdORVUmTUhadDF1JjRGe2ljYGUycjtiJShLTTMvcEhbRylYcGV5Zjs4''@;'; put 'put ''KWZbQjllSW5IYk4jXnh8bGUqYDs0Q1RmbVNgOSw9S1hsWmc2UXldPTZZQDFabkZEdjJVWU5tJjlwPjQqLD1xWjoqYHooaCwyISJNPFM6OylNJHM7M1MjX2QoYkhhZHNCPysvMVZEWDpDX1luLDF5QXVVd2ooPT9NSnNCcT1aempEOWlxaEYjXVZIQkNaclYmVF8zc3Q5TXQhMVkxW20jR1hBeHZU''@;'; put 'put ''SF0pWkByIkkjbTtEVVFOcUNvKzBfITM9Y2NvO1YuW1U5U1ZnWXZtTWhsRmRNZHl2KURJVkhuYiE4PH5yb2MmdTRRbjxDJDA1bEA8WjcuIlZTNkMuNzIsWV4reUR1dHVhPXRPYXg+fVREYEdaQjBUTiNQNXxlP3AqMSRyNFFyZVh+KSNKbzZQMTolNilFJmlRQD5FVDtLZiQiSXl0PmJodFhSYDIw''@;'; put 'put ''XihYcWNbKUR3XSY1dTh6LyRtPjQ7UilgJV5sdlhUUCU+X14+K3ZaPSZfYE8oT0FwWV5zPz5wI08rSmRKRjkhOzZZMlt4TTwhfm9TLjlpeWFFfn0+W2hTSm5FQzVhZWlPSURvUkg9a3k2RkZKfHxoQFV6QD9jTFdVelM1JmZVNVBlblgxWyhWSSU0bXBiJlowIU9ZM1tOKEVIPn1Ab2IicFB7eHw2''@;'; put 'put ''QlNWRj1SPzcyZXIxV184ITovPXQ0b1V5WWlldz4yJVdhW2xmaUVOYT8zUSE3Vn1KN3ssO0khNlptY3dAYmh9R3A+ODkmLytlMFhPJiQ/N00/RzxuX2U5RVk3WSsrIz1PLmxLflMmY2BGS21WMnBTOSVZIWcze0NxZUJxNi5AOiMobz5OQ08qc3BiOzsuY2EmInBLKVN7dD8qfmpLcCNba3hufHw9''@;'; put 'put ''KF44KFdnbilfaXBWP0NRW3M2a3hhRTlMQFR4dF8jbEo6PStCVFl+ciFsYGcqfXhxSlk9dFtzMkxCfiFRN3tDdCVab0xtOSFIMGxLIUtxTGIrb2MyUz9IUHlQRHpSN09JUlFBNU4+anZIcFJpLjduMmhFLlBEc2JOQF19TFlTTXN8QjIxPTh9YUZ8eEd8eTdtdnpXbU53bWMsKF11PkFJM1B+YHFK''@;'; put 'put ''VHxsY21uX0xRUCVpd3c5dilrImVqS2FLTTYqSVtjSEZ1NHhEO2gmcCFtXmRjRGZoRmwvQzU3WHxDdFB2VkwvMzxCcSNPRzc/THB5NnZxJFUheCFdPntmNmw0TF8kSCFISDVAIU5BU2dFXmw7WFkoYW0lUGFacjVgV019b20pRzNuanx3fnlbPF9RMFttO1tNa2spKVlkZnAkWitVb3g8SG8seW11''@;'; put 'put ''I3wpX0IoTHhVQzUiZHp7QFJ5dkpQY3FuJH1VYSk1cS5Xan1SaG9kRlBBOTNdQz8vNDs0ditWSENAc19gPWZ8V1lARzxsdXQ5Ol5jP3NzVHEyQEwqU0U/XWdhMEdoPnd9JWM2Tj9yQkZyIVZIN28ucyYyO0YoIzlvJCZuayxGZHJIZzN5Lj1VZHMxaHBAWGMlNDQud0NmOmRfTWNyVltpN3svJTtH''@;'; put 'put ''bk1+WF0hSlRaXjkuRHsjcitFQnk9ZmFFVVlQQHs0c3RsUEVJZ3AoNExvKn1MdSkiM211Y3s0fFBSU3ZrUl9UcDtfb1N2W3JJOGRnOmNLaWRPTHxwOlF4WTVkWEUwOzdPaSgmLFtPazhtdHUhSkhqKWlIQl5yZjxPPkVXeCwjNEM7Z0B5KGVRYi8lSkJlP0haTkEkTmw6WmQ6KU1rUTAveFFzZihj''@;'; put 'put ''OFBHJWV+LGVkRkZJOTFNL21RQU1fRThBd2tfM0dwcDJiVk0henRMXjpeSkFufX12aVFFaHBHNypweUs7bVRsXSVUPCkyN3R1LGZaMT99LHEjcyFdTVhuXlBCbShjXVpkIXgjZjMhazg7ZDs0ailxWDdNUVlQZT87dG9eJWp3KTZ1Z1NjRGx9NF9bSEZ3IjFCaHF5THlVd1IpdCE0XnFWJklPJSov''@;'; put 'put ''S0JLfWZeXy9TVj44TGBqZm9NW3F7VCo0ZVpnQkZ4Jnl8TzpRbV1eIU1AcTY+IT19I2UhcyIoIXZPK3ZAT2VzKSxqR0x5fUZ4QSIhb3tCSHdlWkM3R3xSUi4lXXRtMlduW3l5SGF9UXdrIUpScD9MXzpPUEQpbzw+anhvdGF6JltCRXk5Z0lvdElxdk5RZUlZcjdYYWUrUUMwMTlSVGs+Pi43NF1x''@;'; put 'put ''e1k2KXQqblUkIzwibz5JZXd2YmgsWyFyTkU9PSo5aDlydjU1WTo+ZiokQ2MxUXd4YjlLN2lxVHA5clRdTTlwN0dmZTUic2tiWkE4cDgreXMvckUkKSFXWzd7XjpKZSkjaVhHYTZdOHVOKDdhMmMib2pyVi9JZCQxTWF7Xko9ZnpOeldbRERCVzohTCtsJmlNJE5OMUdMQXlEeHAudXZjXUR8RGdR''@;'; put 'put ''PHZ1e3FiN3B4R2NJZC84NDJqSGo8P3k1cUV6bz0hcEs7YnB9UjEvQF4wIlNXQmEvZWJxKGxbd3FWPTpNZj5GQjBlY2BSJFRUITF6YT5vOn1kfjNqI1BZK0BbP1Ihamk2SDBPdGU2b2VWeHlPaG9wbD9YS3RVMiJOKVcpLDQ4WklrKFFnWkMvYzBxN1pWUHBKL3wmSldOTjthV3xrNSh+e1RPaDdT''@;'; put 'put ''ZkZGUk45WzFBbHRjPEJoWzJEfCI0LCZqQlZicj09aDZkbEB+NF9aTjkoOCYqKlQ2ZENzVkVjNGw3KF5GVW0mJTk6eEBJRltUcm8/c0hlPlRVJGRrVl5DWiNZaExtfmQ3QCRjJkkhPk0lL1RRS3dudklxdHEzOV9vMk4wYERuXT15U2o1fXZUQXpgdzV2YTtBXy9Db30lS3BEa2xIIXlyNTYqTDI3''@;'; put 'put ''eS5JbmI8SF5Tel9jJC5SLnB+SGhddlZ2VDZYYE9sdkZXcztDLE8/diklYzV3ZUd3MmlkUyRGfk80ViJrSUVFP1ZZZFkyW1ZZWzsybEA3S1B2SSo8Qmpvan5delk4SSJqVVpwT0Z2cSU2Mio9alQwcihPa0IkXT0kS0Y3PXpAQjB7TztzVmw8fV09fDxhRjtXa1dIWkl9W0d3WnlOOEVqKGJkQ25g''@;'; put 'put ''TDx3fT5OckBxIV08OCs5PG5pb3llfT90IWdkLmw5VF1nV0YheCFjRGEwTGtiND8pKUh+d2wrLEY6RSZMdHdCOTdwbFs2ZjB1LGQpS1lzR3s1Xkc8UG8+TStzZ216LmBnZ1JPUFJmRz1MViMpeFB8WE1fPiI/NnpEK1hdM3RqfHM6d3ZMQisrPCUuJE5rWSM/XUglXTlrdVUqIlYraE1YJX5zVEM8''@;'; put 'put ''SXVBaWg8O1gxbjFjX2BDR0NFKHk5XSltcTIqcUlaW1VabldSaF1XMDN+cElTNTpILkp+I09NKTR+ISRLfGZsRHl2PSNDMjk7UFRiUz9ORGVvTmFYQzYidkZrNGxsTDp+X3hUNToyU300Xk8qQDkvT3lmPmdQREh8RmFjKiV+Q1tTVkgzKl4pdX4zb3goWERNfWEqdmA5UzA3Nk95MHNEfTFEVnBv''@;'; put 'put ''fUwpKkF5e1s6WTFJbEVBQGwvVkpUVllbZUoraWhabShzXTs0fixHYnZ8dSJeai9tRldsI0M5RnQ3cHhrN1E+aGtOUFlIUUMrOVdSci5VRTU8fDhsc0FDTTZAJF5mNit2cHtieXV+LEdCW19ZaSovR0UyIXdvPXl6WDZIYlFfc2NFY0dgbyh1fUEzMV5xcyJueH0lJnRAZGk4VzlUYFZSY1djcUFS''@;'; put 'put ''dkRVejx+VTFNanNbY1ppRX52UGxrK3BgVTM1akpGQEY3MVordWo1THYsajUpKjhRekdZNSQmIU5FQEB9cT0+c0BlWW8hZS5kX1NAbVdbbHtyLHFzbHslJUYuXWBaJkFdXnV8XVpPfCtrZ1FwQ2BTXSpISzJmLmRKLkgrZFFRRWJsOzUrcjs5YyU7RkchY0VnMllVbiUyb3JqMz0ufDs7MUgyd0RK''@;'; put 'put ''aCRUJmRjY0NHbXY+WFl2cDszJn5HazsuOmYufGhVLH0saitfRTZjPz0vXS81OkhGYHQ0RSZROT8+XT86V3FCaSRBeVomSjklWV1nd21bW0ZzbH5fPSUhPHM0LldTUzN4Q3FfaFMqNjl1cVdNaFIsIiNKRW9JKXU9VUdhMFRDOGdINnVyNiJdYCRUYSlbUXI9RV5efVE7NSJ0WjBgbmJyJn0/N0U5''@;'; put 'put ''UEheQ2dXKVovOngpT1E/KWtHKDUmRjxkdj5+RW8uQnI4Vzl7JDJMc1l6O1lwbigpdyJ1MCpmdl1wPXFyNE5VcXxwY2g6OT4zNiRDSXM4fSx3VltkRiN1LE1KOmBSYzxaQjxbMShdKilQKDhOR1FaZjtPWTNFT29fXyg5KDptY2tXYmFoSjR8Q2xMbUxCRCpjJDh8PS9jZ0xoIk5jZiQ2LChraz8w''@;'; put 'put ''JmM7RGc4YSs4dTpzendrIWdyQGRGJmglfXJNP3Q5UXF3N2Vxey9iQGJGbF43L3RRaH5BPWIrVUtAOXk7K3smKmJBdSgkP1k3NE5zNj19T1VVTGd7dyUoeFhfKmgpYT85bjUsWV9uSU1hVUozXlguYSpEQmdOWUxuNHFfZFVzamhCJkFHcHI/XlRCRzsoXUBwSz40fmklTG5nSm1zZ3M2dkNjbiN3''@;'; put 'put ''RnlZRDN2JkFsby4uJjo/KH53RSQ9eDZUSDQ/bHE5OVFafV17OD9sN04ubVhdMDtJSVcwcS51NF0yIzZUJTJGN18zTDl0dl5EfCh4fmxqPFFsO3xpU1BXTlY8fkZKYjpQKSlvayJZR1IvPGhDM1tYXzptc3dPJCwyQDFtTWE5XUpSO3F7UWo1cWRRLyssL19ZMzN8ViwmZUlxVTUweU9WaSg2aVZ2''@;'; put 'put ''RDEvI2RgUkc3Z3pncjgwYmp3YjAqM1QpY2tUKEpCcHx2K1ZseSQ9aD5lVE1rcCFrOmo1RWJ0MCYwO3QkfFBbTFIlZ1BkLE1SWTo+Sk50PWAqYTh0MTN6bUh5fWN2eFdsRy4+XnUkVEghbS4sYmsvI0MrKX5vYlRJQTZLSGUxfkxSVSEsQzdUU01MUEZWenk1fmN+MmhhK002fGc7d3clNml+bjhO''@;'; put 'put ''e1BVdyUuPmh5KCRAdC9kQkVSbkgpfVlWYC5yREtreUAvUWV1MyhYfVQqcX5YZUk/aWYrYURKKXJtaUh8PkNwYTlkd293ZUx0Unh7K1lGW24+UUEpam4zY0pKXkxRbkErdWN+aSJoTkVBXSlfdDhofmNLSzY1Z1J0K3M/XzhlZyFePCtgRlUlaiIscm8yUEEjR0pgdz1bdCkmI0R2MSZEV1YqbDsx''@;'; put 'put ''LktRP3FVOVtaMGZXJFg9QmthND42KXZBKUQhLz1dUGRjKGI1eFM1QylCSEBnYn57X348Izx0XlUlXmIvN3oleGVnMG8iIip2Yy55Qih6VEdTdSEmNlR5Um87fnhVYWY9JC9mOWh8dUJ+K05oMzd+c105NlVvL2t0R1JDVVZUeUckNkUyJiM/Z3soNDEhbzJ2RnQyKVtxUj1HP0ZqTz1uZUZMNjxr''@;'; put 'put ''Ozs2WSwmNXJKIWosWT40VnFvdGtyKCldNDJNblUvJD8wK2NmPTlFQHxAX0Y4Qll7YWdQdzIoeG9oPyo6TFM2dmw8NGdTbTd9WCxHKG90WlF9Y1duT2BMVm0oQiM9YjQyaiJvX1Y3eyIjbWh4eGZySnNlNDB1N2xVelh1Z2ghZ2FqODpNe2I/L0JWQyl4PyY1SEZZRHRmO0wiSlFDd0MkSUpiU0Fb''@;'; put 'put ''czc3Xi8pN3VYR2JqRlFOX2oiVlc8dzJ1QV1bYVs8Ql8pfiMzMjkxe3kxay50P1QxKT5rQ2FGJiJEIlNXakx8V0gpZD0ieVE7U1QhOGsscjFaflV4cVlrQHk/SilOb19JaFB1Y2pudF5obU5Jb2U6d19ITmV5Mjc9MVtIQXVkaH5mLHBkNkBWRWZ9QyNgKXI6WV9rTFFHKUdyRio1KWtzLC9qIUdo''@;'; put 'put ''ZGlsS21BW1NpRClefjc8PndBIzYqNyokVTJfU2JMeENFMTs9YzRAdCssKFBLOUNsJkUmOns7WCV8cGh0RytgfkBsNH14PjZlOnpkJDFAJlgpOSQuOmwlZmRyOiZIIndCVE9dfkkjWGZAZjNlQUpHTTlhOkdwVTp7b1A1fWQ8VXw+T1t6TztwX05WRXxTUiFGS1pObD5nd3VFfn5PSiUqSVpMVGdm''@;'; put 'put ''ZSVTcj9HUExPOmlkSkhjRi59WThtVmJdRmtHMUZ9e3ArJCQkUTJ4Ik9Sbk9hPmNBcjAvVWRzV34hUCFjcUtoKmtefiJ+YFloYlBiJE0uVWckVzdXQmRLRDlsOGMxZz9uJnVhUzh7Xi47eXA3Ik5VcHUwXyxGQ2tRcGsvZFVSJmMxSTtybyVQL201P1pnY1tXWT9OSitDRT1tNkV2R19XdUs2LCom''@;'; put 'put ''QT5tOEVhRF1oNVcmUTBUMERkZFh8RG5Ve1Rhcj1Tem5qUC8hInUxUllbOUZBcWBJSVpWKThVQ2hOWG5EK0pvLDZ4JkBRcV9KODclfitNanhiXjtUUno/aVE8KGhaNk8jQzE9dkxoWjBVUnZPInY8UjZoUCNuZiRnKkoyTzcpLlpxVz9kYUt+V344bFFXKWtaTT9saTByR0xAIS5nNDBoJndxIipS''@;'; put 'put ''Rm0wQF1MbWkiR1RINDBjWyo1S1BPZHVoVjklQiZwLzNIM3t5YmliSlp8VFcjW2k4KkdKYFMhdk48bnddODg4QFNEbzlmLHVVa0NtPT1pem0xakozVG54Ny8vTXhwaEVjZEchIXhQcFZdZ0pKVHUmW3xoQjwmUTBEfGZtajopd08hYGtCYU45dzlLPit4IX15RUcoXk5EKFlDPHxEbX1GSF4oTW0y''@;'; put 'put ''ZD83MEJqSytMQmdPSkcyayFpN14+NFpZYC58c2A1K14/cUomVj5TUj9NSWJ1TUQ3d1ZnejIoOkwoRHdFUjUkfW9rY0BJNyM0T2NuYCtfcUwvWDpXVkUreHU0SEh3VF4vTU0vQm0iXkpSUUV3KUJ2R0p2QUo4KUo8eXd3fXJzUipZcSxJeyhVakQ8NEFYSDd2aj8hfmdBWVJWcWBKaVlJJmZHeGNU''@;'; put 'put ''PW1bKCtaV100UWVQfVIqVytxI0xeWFddMmRnczJ1YzhZQTRzSV8wPCwpeVhXIVgxVEh4MUQyNFg8Y0xaeCQpPWpjbik9SGB0bUwscXR+LFMvNjkuMHRabTpvQnsxbVg2Pn1yQXs5Xz0xJTM+UWwjMmlZWUR+JEVEdWgxenZQWU97dylLTFA6MURzKmhRUUhYZGk4NC9NdX0je1IlKCR2a21dOGwu''@;'; put 'put ''YjFgMC9vd20scT19eTIxOHwlZTpHcj13KTwoZWhKKm9ZeTM3Ol0/Z1BeMS5zNjtASTU4TjxxP0Jia1U6TXBMV0wpOm9GUl9JaGopMC9ZZFVtNUk4YkRueEosIjU3UX5vQmt8YnBueVJEQTp5b2Bxa1Vqd2c7ZzRdP0ouQjlGO2U/JkBxIjNdPnxYS2hwc1UqJjNsZHRdJS5UKzI2MSM9UERRSGEh''@;'; put 'put ''VkJ9KVA/Un0ucWdvamtLZj0+SHpTY057ZXB3XmdwWVs9XyFoKjc3QGF0XSZgKTc/dUEjcjFVMjRnM0BNZ0Y6bC5iLGI0dyZlQEZVLDZTVV14IT8hT0ZvbnZiUSRNPngwKmtUdVExQ0c+YV1lWT4zV3RSJXc8UDM5bH49KDUvJSs9RCEjIX1aKUpfSXE5UC5XSFRQMmRGejFxLzZdZUA1eio2dUpA''@;'; put 'put ''WnNlMXNKVHxVcUkzOmJfTzR7KTouJCwmZmYvRGtDY0dxM2x5Yj4ybHZYMWJkMXlIOmxRZCI5QixBPDxYIkd6IWR7VE51d2AzejliP1tNKTI0Vm1tTHt0UWZTbHNzTlNFTU11ckgoNzt5dmBZfE1pdkJ0T3FTKEdPbWsyT3N1ZUFHMWtFUUB6cHgkMnpVNUtBQ2BOXT5MIUNaZ2dFWmdrSSJNYndv''@;'; put 'put ''PH53QExeNHVKPn1TRVljej1KTH04UUVZY254cXgqK3BWYjRGPCJ7cmtaQ299eCFNQnIzPFAqeEx6Z1IuJnF8JUI+MipidSYoU1tielQkZXVyenBsVm5DcHVrO3dSIyVsITJKPjEhcCt6cFkrU146TDlrMUZfJT55clZodHBkTTBdcEg+fVRycix9KEhKdyNmfEZdSC8/IWRuTVR3ZGVNSSRncWt2''@;'; put 'put ''Wk1+OkZHLFohRFtLTWQzWmpEPDZ9aExfdSROZ312cExBd1tTUXYkLFRuQyFoWGEhTDYqX3M6JDNzcVI0Nm90akExNGJFISlWdzNNJTI1P2k/cWFFdHF9JHk4PXEoaiRxJGN0elY6MGMmZU0xYWphRWoub0QzKyQ3e0lSMHNZJTBDTkQoaFt8WCQsPSNKSEh1R2FrQFM1WU9sc2d8SjBUKGRDbXdp''@;'; put 'put ''QH41QE0vJiomQHhDTmRVLmM6fXFNWjVhNk5wNlc0OzBUSTdpYlhbJi5xUm1xNjRIekN2fTR9YldPMjoiOV41PipQLkJ2LHdnKk9ib01DcVJ1aSssbCpaRnpLSGRGdVJ3dX1nR0dFblFjTTRvX09YQz4oT3lRUmRobCROK35TVntbVWwvdCxaYlZJdGw/RkdOSHBLOEBodiRXWE9zdUAkKUJrWF00''@;'; put 'put ''SVhTQCNyeFcwLzF9KnRzVT9teVM7PUZZcEppTWo4cHVWKT8qJWNoKkhQT3BtaX1rSlsyOTI9IkkidyopZTZmOyhqTGF0azFVZnc9MVQ7OFAmSGImQV8+Yz5DTmgza1I1K2sjP1A6WS4vRUNge2xXIU5ZQVs8alJ3aXQlaW9qcW1qYj1MPGdPUGYzb2VUZW5vYiNKMDdRJDk6ey9icHtsdjhdKXEq''@;'; put 'put ''eFovKX50XmJoP2l4TXQre21zLzkmI0ZCKj1bd1RsfGtYZUloekdXX3duMCYifX1WLyY9ZU9PODBOQD85MTMrPm9AKE5INV5zeklZdkZET353SENhcUl8KXYsblBIXUZBM0dnMkdXSm98X11lWU5LNCtPWihkWFZReTVfeHolSVkkQHg0K0Jmcms4dG4rJD1BXk5MfV5kdzgpRHhbWU8+cEpMZTM9''@;'; put 'put ''QCY7SF86RE9dTC5pRF5QMSJ7JTttbSVxJlNERl9oTGBlSUVUenVMdGUhMSZWRm5ieGdYeFZzOStjSiY+dEFdRksjKSwxaUpuQlVqVHxReiRqJjRHKnEzMFghWlF6V2ZGenIxdDxGaFg0RXUpb1o/MHAwT0tHekBQW0lDPCo0Yl5VRipnRl5FdH17ZU04QCxVcCssUW5ZeCtMd0gmSz4lamQ0Imdu''@;'; put 'put ''Vmg8dDM3b310IiUlbUopdVV9am01VjhFbkopZVVaZj1AKitpay5VT0skKENgQ3lBRWp3N3BrOFhaRCl4LHshcHtzW1V9eX1bI3pxWE1uWXhLI2BDfEtOST9FaUJeYTlgIz5TaUpqd2lDKlZnPyEuS2M2YVgsRyhOPTJIIj0wV0QxSVReVVFkKFlRPipqL05TazA2QUpTMT5xYCFOZj5mdUl0WTUh''@;'; put 'put ''QmMvUiVrXSE2UWlgUjtKXjBdQGk4XzlrMk9xTW5zOTtQM3U7cWZwJmBMP1ljWzxpXnp1V0lXXlVjW0hhXTgjcT0wVXgxM15tWnZfM217X1VyWzo3e2RCM2x5NWNVVj0wTmA5UE4ybSYqWltAT2I3eFtbPiksSl5ONUpUPXIrZzl6OFV6VSwyZ2pkbztIcSREOGJzJD99Z0MzdHNVfTlUcy4lZTtB''@;'; put 'put ''LHV7KTc3NXNQQCl0OHYjK3d0dV41fjVhb0l8dVtaUj5xWzZUN21BXTVoTDZvUXhxRVZeVFtrNm1JT1JmcWMoIW8jS3sxKWRMPF17dDt7bWwjezV2K19HZUBDN3B6cFcvdyxAJlQ9cXZ5LnE5KiR2UDBCJkEwTUBab3VoLCV1MkI9aUtwUX5qfWYiXkgmLlkjSEg2aVd7bTRoXVYsJVJoUihAP10h''@;'; put 'put ''dUZIZT1nTE5ue0UjK3dRbElwWkFYPV1lOjtKI297Ri9GVTdpSC56bX52fFFFTnJOWV0zZFNgQ08+Z3tWT1EveF5kUW1FblQuWjJAZ2dPeFN7Y3Y5L2JWfTtLWko/UnI8MkV0L2w1OXo3ZyhqSiNDXiVGbTpBYmpfQEc7PVBDfXApPVl9cyRfSXM2KSZkLHVQakd3JTA6Qj5ddU51Znl+YF0zZyN5''@;'; put 'put ''PXc8dCkxM0pzMnBXN2FiNk9ndkJyLEdtOT08SDtdSSFMamgrNFcsWmsmbnQ/TkluYlJWNGM7Z11nZ09fcGVrJl0/ViowVy9zdzMmOkAiS0JPMGQvfXJKODEmbk42RDloQygyamBEQj9FRlksbSgrTzNqQEtpIkJARChGPUxQRFo7PVhkT2Q6KmtgVVlgUDZBY30lL20lb257Olp5K2hfRSZETyFX''@;'; put 'put ''KSouVFJDKGpeMyUiKXIzSE5YY3VzSDdYMG1IezBFOi5FKUw5UV5VIXxEeF4qUjs3XU5AdHN8MTNtT2skflQ/OFEmVThoUUo1S28jRVlpKlQsbSYvaVRrRUs5eThVOFNOdClxPXFTQk43V35JbzVubl9LNXZRRzIoUWpzRUNCM19lUzBIZnZvTFZAakpuKVlYK21+XyRmcVpuZXZjTDtESCxTWzVe''@;'; put 'put ''WSl4akp4WEA2UVQ0RW9rIit2X3s5eHgoO2BuZXNgUj9CKittdXVAVkooKnt5OHl7UjRFbnRkfFAyKERRTSt5QTBSOk9HSnY4Vy99ZHZxfFAvUUlrNSMhWjk6Zj1CaSpNM21SLEQ+MWU8KWo6dVJSb258T2IqTDwxfDVFPF8vOzFKeU9NYG9KNT8zOlZKTUIkIStXV2poU2tLKkZgYnJIPXQ2QXs5''@;'; put 'put ''b0lfdSxXfVFOKSFSc0lhXzJOZkwveD5FSHZSekppem5+TEwwV1smdXVHY09nWzZrP1ddJi9PUTxeWH1ARHRQXlgxTjoyZDB8U1JgNj8rbWg3O08/fFh6R2ljfnRkP1RyKERRTTdARnZENyYkXWRrc2MpXkNQaVh5UH5UcWtzRXh4Sl9tRFJNYEB4bkQ+cDphaDxAZ3AwYXZHemtoTSpAM0RpV0Zi''@;'; put 'put ''Z15IUW1FRT9UXVkra1JZaU9KeD1OJjViZm8jLjx2enYzWnYwWDQrU18xMXdoQjNRXmx2YXR2WTUsJnx+RWhYSnBiSXhjeSRQXlQ9bl5zN0JUOkRfZygzZHYmRF5OfG41KSJvWlYmRigiTzhWKX5oJWswU14oVCQjOkZDU3Vjdz15Wkk9ZFFOIiF9JSYjbHk+NjoqcXh4W0pqM1F4NlVyTzIvfWBm''@;'; put 'put ''bzV7JUxgQm1dQ1pZT3skSUZjeyNQRU1rY2YiK3RjKzZXa2xoV086aXl2dkA1Qz8/e1pWPmtjcFVdRG8pQlI8N2RKdkR7PlJqST1vWHkrPiR1QHJCekx+QzV0N29HUU9NO0A+THFDXyMvM1g/cUdYPzt1XW5Pb31Vdzs+fSlVRk9UIUYhUSs6dU96IU4qYjdVSFMiOSxXMU5bZ25zWz1PdzczcFND''@;'; put 'put ''Sz4pLl1qYkhCN11eWyJJLldzK2pxU0pCRl1GOjcqMFlAVUpCRlR5KlRMb0lHfHY7MWxebGpKJC4hcHV1dDpGTWFdQzRMeXV8Yll4aTl0bnhnZDQrNl9LOG90VERDRGZoMTFsaVlxQ2ZZRXdCentFa2U1QHUud09VTVF1JlRCXSx5RVhdQ1dbWWJTZUNjbzx+NUtYPmFKUG1kaSlZSS5VYj9yK3c2''@;'; put 'put ''TD9xdW8rTG9kPmxWLDR+OzZfNztlfEd4WFFnT1NteG9aOWdkKGoibTQzO2tVZjcvQCtOKHRwQnRpcHVPV3UoOyI7KT53SmBeVmxCXWhRT3lITyF3K1VEUHl3Jih0dTJDSUxJN2JWekt4Yz5NbTBYRHhXPnQyXS5FN1NhbFdXMi5RRCFMM0l0P3A0cWtQN1ZjK0JzRGN1JD9kInlyQClgVzlMR1Zp''@;'; put 'put ''OVUzMHVDalNxTVkjazVyb3VSKldGRk8iQlhEZ1h3elczfmxaTj95KSJbQjZQe3VTTDpeRG5Dayt9ZGZoSEU+MX0hXUNYUiopbkJvKmZISXJDKCs4dDZfLEdZfjVBO0FtZyEjSk9VQkI8KENGMDxxMyZEKV4/Y0UxOUpuM3A9NGkqKUxqYmxpQz4zI1MqOV0zcyhGVykoXSVYS10pVVRMdCJjSkEh''@;'; put 'put ''Mz12eWBday9AK1hXVyNZd1lPc1ZQeVlPd3ozUyozZWtrKklkeGNETmhvSWFNWX5APCxROnNsaTAxaElCS2BmZlc5Mmk9SVNFUUg8RkdgVTtOXikxRjw5PjhfNihyQHA6YE1ZTXxWOz9GNyMhRWNxUzhYWTtBPnI6Mk9AXkJhPmNedCxvclAwM2UkdnM5UExpTXN+JWthbyZDaHtWaGZ+JVtyNnll''@;'; put 'put ''M0RKJD81NDg+RCVOfW4yVSFIYDRTVVFKdXN0UlFSeF9JN2V0RiVfZzpNbWV2RkVZTW9sRVU3cl5GbUQ6TD53UUNnYlkwMlZUeD42WiFsbmxMKS5zQkB7UF9+e2Qmeig0b30od1IrdXBHMypuLDA5JmtRJmNMNWZWc05kZzprQkFNe0dWNW89KFpHRzhxfTIqc3ZWUWZ6QWc6Y2AsSSZhVjVDQSQk''@;'; put 'put ''TlZNTWNvSiFCSzNGMG5wTHsiaWNtT3lAUHk+eyltRE5HXjMwM0AkOUpvLjksP3p4SE8yY1hHSiFsZTxzdXU5M2o9S0xBPy9QUFdSdD1XJUc7LEkiZyt7R1opVllUZGFTN0JWelFjK3VER2k0JEBYRkZNfDZzSDZCNFA+cEkkLHRzNGFBSENLWFFmWU9GKiVNLmIsZn5PYXc0X2UjQlFWRlpYNUhr''@;'; put 'put ''WldSbDN8eilaM101cXpOcHF0QkFEfU9HWEI2Wlo/ejQ0Mmt7QkdZR097RXJrSTw/e3Jab085ZVJKJU52UCIoYy9MaDh1XUwuTkY1R2FQViosdEo1QVpHJGdWXVBrTEhkPzJYJjV2Q3t1ekBMSnB2PWRpR1RLPWxfWi51fEQmTkVIaF5HbHtGP3BUdHNpM3VoRmBvbFhDTWVzT2NuenJEcSprdGN1''@;'; put 'put ''QDZ0QWlRSDZdNmAweU1tb3hgZnw+W0pOQU1SLzEvfXkxaHVhNHRKfCt5a0FqLlJFZTJTdFM2N284YzcuLk0oeHsjQk8lNXlMWW9aKFVCM2JeIkgmNHh3e3U5KzUuSTJYYnxjSER1PkZ0dmYkIVd9X3hHSFR2dj1kYUdhR1AvZTNhdTFbWV9CMUJfREI9LzBNcjcwTWVpcUwiQ29ERnMsV2o8bE1e''@;'; put 'put ''NmcpZEQybWEzdXA+amBDVUBhUipGUFIyKD5DJE0pez5rJGZReTA/PmsxQFA2Z2Z1XikrPEY9JEVmLjxrRD12SU5FcV1gSTl4OWliLjQvRzlGOkFETz8wZDZVWEk8T2xVWHdJRDBKaFRYW0Nya2NNZzg2T2RweD9odGBwOT5sOkVnO29gX3FRLmc6WnBHQnY5QntYem5nWHBfeEcvTl9neHtoXlMh''@;'; put 'put ''fkchTHFkLmJFWC4jWFIjKndPYmt4MG9qcnM/bl5+ZnJFPCYqVWZldWshYnYxdWF4XjVscUsyQGczZD02IWQzJGhWMTJ7dSJhcyk0cEgxOVkvKCVpTmVtUigrQC92UFVMOHJ2Zj8xI11ya2R6NXhMVkpaZk8qdVN6Qj5kd0c5QDpPQ3Q7cj53anN4V1YiR3NZeUUjQ248Ni9ueWlGO3s0PG1GKEZE''@;'; put 'put ''fjZZTWUiZkYsbSM+NFtHTmlHT3lxJUlIKG52VVhxZUNHT1FGZWB2KyUjI1Vmb2VyKUFPIUNUU2UwQz09SyhMXTIzdERjc2R8W2poSlY0KWZ3fWFGIW95UlVyUCVoOUQrUXJiO28pTEo1K053cUMpYWo4LmNFbDpCfEImczZrPzJgVl10OVhIdlo0OU1XQ14hKl56QmtuNSwlYFNoZXhlLjk/U1Fy''@;'; put 'put ''eCl9XTxGejlpSzhpb0BnMDdfNWx0KSRkSChwSjtZYEB6fHVGT0QoTlRqVW9weCJWOnMkY2AwTipzPzJNVFIidnZKRksmMzk9Pz18NUI4TDpIWCghNEx8WClqSXNES2h1dXEqS0tMTWQ6eEhDUzU8UnhJVkhzMV0jW2lDYV15YWl5aV9Fc1t0T1A/Rm5yc0gxS3UkKVhOemd9bSlSRWQyUXxdeXAp''@;'; put 'put ''bE8xKjJhUXt8ZHJXPjtkUiUlW1NNaEAhTnowJCV4ZS5dJT04Yml8V1E7b1ZtV2J+MDBsLHNDdiRBaEdva1JffGV0TnVNO28mS2QsQSxhZyxOLmExUX4lYzE+PWRVWXFsUH57clB0TnVNeTNYcUE6ZFV0T3lwYmk9W21GcnU3YXtaV2pEJHZ3OmxKcyw9JXhRT29rZE94MSgzI0ptcnNRTCVpVU5Y''@;'; put 'put ''PFttZD8zfltad3JVIzt7YTVeK11yNVZLMmFAWkNiQEwsL2dQYXg2RGU1KCtna0NYZSpQYWpJd2FAOzAuYmFxaDtfU29eey4oKDxaV1d8L2BQbkIhTFJlcTtoZi9odUxXcFY9cWpgVEJLTVpDcUd7RSxfUikpKXxiSUdqXjslPDs+Q0IyIlo0cSlVLHhgZjpaXUM8UEBJY2ZoZiIiIS57a3Z7Sk5X''@;'; put 'put ''Sll8R0tUOS8vUlpeQzU0P0NfP3BodTJlOF47YGl7aUx6VGZrWVAqZmtkMDo7JXB7Zn51Y11NLD1nbCR2VHdnO1peL0U4T0JGNVJKbnFzSGk0bClLIm4mfE5tNWY1UzFibmsjfkdPXT9ablo4QD9ablpKTjM6c2laWD1AKnklY2NPNktvKUUxP1d5YV55VUA/WXI2Z0xNYCU+OixBQmwrcHlzLDUl''@;'; put 'put ''eWIucmowR2F4LCtoJm5ZdlF1ZEBSNXcsOG84VU5YNyhPTFJ2KDtpczklL2gwWHEmbl84Ml16WzB1WiF8P1AuVStGZXUwcU5bSUN5I0lNOWJDPmZVOTtEW1glNTJ+ZzROOTB9U3F4KzpDZE1hQikkV1BVL0xgJiFxI2dZVn5ULkwvbW5SK2oocDghVkBBXiFPNSVTZllgZ2Z1eF8pV0lOWHVLInFg''@;'; put 'put ''e3l1Sj4pLDE/JD50PjBkJV5tcSwwdlFoW0poXzgwX204PkYoZnohKExJPHJ7OlkhNVUsKihXZzcjMDBgVX43Nis2LnZpRHBqQnZNT2ZHXlVpZC5jTV5iIVc4WFhpeGNWR21zaXIpYX4uU3ZjfVhvezlTVUosKm5EZD1SQklPR1NOd1lqcWpLYG8xQHMlbCFsIWBMZjY8NVZIcS84d0BiazZjYyg1''@;'; put 'put ''LEpWfTEqJEkwREVuUEtMOXdKYj5KRD5mVGYjO0NaP21VPjEmI0F3IVNMTk4pe1BfPWtKQykmamEvNkRKMF9JZkhKOloycVpsem9keG5XPC5aZVAjPks2fjJ8fTNeYXpScSwlaj8hOTlGVT9mS19nWWhSRlR2UH48cyU8O21ybVorb1VhIXI+YDBQcCg6U2FxXjhGYTdzZX5pfm8/S3BeNWlRb1tg''@;'; put 'put ''MDpXVXg7RFhQPHtEOTtrKEo7LFZUeTY4eDcvQ1goTGAjTWRfZEg2KUVaTT5xLlg9X2tTRj4oRnlbUHk3cG5gR3l6OyxlK3FxbmEzVld2TWwoQF9tNCxhYFghalRoYTB2Jno/U3klaFR4YHc2LiVHK1ZNSjQ/PCgrXTxTRUNhO3ElOml6P1gpLy9OJX4sUkpYPzxweyFVNFdsd3ovaitGWmNMXzVW''@;'; put 'put ''L3VlRz84KyFpO3AzSXdFO2xGTjEqIWpSMW8mZ2Z1M0gwLD1mWyRBcXYsSGd1Zn5JZSpeSEZeWHt8KV88MyYzPjA7O2x3KjN2bWBsam41Sm59Zip4SVZwcGtsNSVCUV1NWVZTc1tFL0VHY3U0RjNkL0x5QnNpeV1UWV92OyxmdmtvOTMuKSU9TnJwbXBXe2lsU0dtMXU6TXVHOTdnXzVOOWpYbVFh''@;'; put 'put ''W3wjdil1TURMe2AoMSUwOVgvN0tbLFthYGAkJl8xPzk5VyV1SlcpbXpzcWthK10ycy5iSFNTeWJDZmh8JE9TQ1ZTW3h4Y2BHcU8zPDZWZn5Ke2BdUCtVPFltJSM7aW1lNEdZMGY2X3JnPyQvWSw0d3ReeiJxfEN9WlhubkJ7OGMjTj85PTImO1UxeVk+YXB6QlVdK2pAUnJEX10vLCVOR0NDWDY2''@;'; put 'put ''XSheQzB0NF10OUJ1cjJONl9WbTkscXI1NUcoNmxgL1dSRiQlQ0N2ODViTWF1T0ZNSmNTXnpwaTlfUHFmKnhRfX1tYm9eT3IyMFF3dGJAVSY5LC94Jm8jOmBTSlovYkBiU0RuJWphVGcraSxpUDguV01ZPk1fQnprUXJpcXlyOElWXjxTfWpMUlJNZl5ecUcqKiMvJjxoQWdiRWA8Q0tRJlZnN1Ao''@;'; put 'put ''ZXAsZXhAY2RadioiUVVVdjM4RyxSQCF3JGVyciQ1dksvfmYiblFmVlBMMSo2IjJVbjxUMDd1TmJ+UHhoUTslPjFoN2J3IS43QkNsNHpDfDNhUjsmJiw0KiQ3e1ghfGNwWSIpOGZ4a24peWFCYylDX15zO3BiPCkzZkUjcUI7Kk1KOmJIMV9wQ2Y5K153T0BIaSU+K19UXzhOckdNSnNOWF0zWT5L''@;'; put 'put ''OCwuKj9aXmAiQlJmaih7OWR4Oyk2X1QmbT1MNHx9emo7LnFPPEt8fXlpQV13fj4mVlcxY0FdT1hoVl9DPVYifmt3YGk+KEV4a0dge21LNW9vaXcrdFZyeXR1VSlvX1Y1U3xuL3lVaGlFJEZSRlJGUlU1WWJGUkZNeCFUNyo5MCRaQHcudkchTCh5TXA+aWlpfH1NKXREOnRENztJY0Z3W0FGdmsj''@;'; put 'put ''JWNORC9lNiUofV03by9mJVB6SXREOnRENztJbUhzW0NmY30rcndAOXMuX0c0WXpQTCRyJDd8RClRIkczQkZjOFJnU0U0dWpHV0gmKkNhfS9WPmo2S2p2UjU6QCM4JDAyT25VKzN5cHFWKEQoTkEkVn1lfnRRZ1FXfkNjQ1tJZSVDWEVeSyFRd2lUTFIwel9sNTFWfFFaNihSZVVlcHFvVyZZSm5h''@;'; put 'put ''cVQpR2B9L3Zmb0xzYXE1T0BgajFFbUNsSzpKLDNbYCtNSVl0Pnc6L11VY1s5PSJ4LiFINlkwRTo2KmN1fjxIOiZKZVVmfDxdNnhFQzU0dixYKm5jaElwM0N1O3tfYUMsQjx2NkV9dUB5cig5dkBncD9ec11zW2YzIVlLSzpXbFpecUYhdTV5cldieDBKPW1wOT4yLnkqUFlba0w4W0NxbFtDRF8m''@;'; put 'put ''KWZGKVBHZ0Q2Nm8+JFJaXzd7bTVKTnxRM2JAMz4oenJnPT9mXVQsKzpFYXZPOXEoTnRELk49OmVVW2dhb2RYTnxrPjEmZiZMfnhKaXJ5OTZzcztONmZZaipFe1tiTEl5OXt1Z1Z6X0VzbTVnS3QzWDl7W1h5L0IsVmQyWFRoL2diWHdhZ1dReSxTPiNoe3FSPjRQLFtRfCt0elNVWUheNE8yaGVX''@;'; put 'put ''dWRyZHV1K2A3ZFE2TmQsd2MleVNyZHsxOzo1NzF0L0ZWWF1DTWQuJk18amgvJjs1SWRSKExxXiZ3OVBfbmkqdjB6Wk5NfGhbVTF3UW1SazRNNE9TWEUpQENzRFpoYDx9d01+UFJdZjl5UERQKnBHPUtUJWNnZlBfOlFSVUxYVzBFcGhfTiE9OjU3TmVoYmYlWzlBZHkwRVs1ZGkwRVssaD9ld0Fg''@;'; put 'put ''JkpMTF1ZM21OOHdGZXJKYilleD94LHRJNnhaY2BEZEBPWn01OWh3JGo6LzU2NXN4WmJgRGQ6UU5ZQWppeSFkSWcySk4kUXF0ajFJKjc1LGRxWipmPEw5ejh8Wyx1c0dtPHxafkMjXSVnXmskOEFwcyVKZmRYTylkSF0sc0s4YFBtZSVmVWNbOGd7cFBOV2N3OV1SXVlkfX1LdztbKURWVyNwNSNX''@;'; put 'put ''KXB5Zlp5ajthaU5SMWBhSTlGZkwlZERkVTZofUJZbCU2RTB3S0osMEJqT1VGXixaK1p4ISwhL1o0cWJsRnQpZjxTVDFjZzE1SXIqMEchQGRnNWg3aDFlaVA6aCpoam97bz85YmZsMS4zb2g6e1pNaUdyRzl6NlV9OTlmUD9NWyRzW2k+MnJFfnUzayFgSTZEPENPdkRPY3RVKXJmUFJ0LGxqPiN2''@;'; put 'put ''SCx3cTkwW11xKTxHbD5iMjZETyV1Py9IWFRjdDdQV2RpQ0g7YkxqQjp2dVhTbE1GeUgxZ09NTmsmbzlTX257WylzIUNfblFfZillL1lMcTE2SCFHWU5WRDBFJGZ7R1lWPURNQUQoLl94JklTc0VwNzcldyMxRTxhb2YmK3h8eGsoLFkzRlZdSERvWlMyWXpJPWtwMDNObSIsLlslM2Z8Tk5DP2RR''@;'; put 'put ''MGlvYENGdjBye3FePEBbaF5RMjlDNCxDMXAsMlh7YElAaEMrZD5VST1ZNlI6MXdsPzMhNXVQcnV2PiNoblZXS2VLLCxmMXZ8SSVBI09aO35yVStRRCltK2U9X2FtaVFucipaSE1aOmM0PEFmRUcvZWdoQ0B6KSZeeS9EKz02Nzc0Pk9zOFJAUnc/RShWI341WTBaclZeP1ZVdlJZTSRXdV1TQGoz''@;'; put 'put ''Ui9TJFYzd3dxdXxoUXJ1M3UmcU9xc28oPnY8MiZLNEh6cDBNa1ImPnMzb0IhSmNzJD5nTVs/XV9TYmsxbFRlXXxpTChlI0x1cUNCVjgqdDcmJGlqUDJuNiY3VStdfFcrIzFAa1N9WiVJRF5DUDR6NW8hWSVJLzhEJl1mZkxkZjRnfiwwYltdK2NDYiQwN3FDd0JPMXJFO0FAQVMxUUg2MGdkMGdU''@;'; put 'put ''Qmh6aShQJSFbZk15Y0BYZ1lnaWU/K2UoZHBKUjJCMTxgRGFEYm9scT9lIWptc2QvZFU/MFpFWUIxajwwfHYyel5tdjlPKV1DIzZfRCJyKDpCdXAhIlIuTjFWUn18IzJmZ29uVnBZN0RBJFNxK3VecDMxOWtySn46ODVJMllFbiIhciFXNF5SLjg1PCY7VixGRlQqR09HUWNuJWU5cHVleHUkfS5C''@;'; put 'put ''bHQ9Si44cVQ3WSJ8UHssQHZMfl8sPSxhb2cxRzw0aXFKXXBCaXFIOCxyPHQpelh1cntDc2RTNiZPVThBMzk/ezw9X3QpZSlYeTxDYF4kcUp6JmMkcWsqUTtsYCV4UiE7THJ4c20kcT8qJCw3TyhpPT89UjBdIlpvOmYyZ1trbyNSfTplNnNwOy5ZaF1sazJzUmohbSQscDs7NE1CJXspa0QrYGEl''@;'; put 'put ''aFVOdyRlP3siNiVTUmFiJlAxYG0jNVEoKC9Zd2A/M3smeElhSDNQVyYvWXdAOmxKVzVtcnBNOTpnT04hb3krZ3VAWGhuJEA6Pys2KV00VnMwVnclVmdNMTc0KUU5QDNneCUiKzlxOz0hN2BKezd5JWRjfF5dXVUoM2gkcXY6XlJjcUtsN3RyUFtGRXM+PXQ8P1NZMX46fFdCJXB3WiRab3MzKzld''@;'; put 'put ''TkE+RFl5VV5wWmgvOSUlYWkkY1gzLj1PelBFOFVOT1c6enp7W0VrfkZmM2ooZT8wYXlCP0VieH4vMnhdYWAjSTxUMlpWQCoienJMNj9oPzVFezE7KGhTP1I2N0Jde2IyND1kZV4yL1R4Yzp0SlplZ3thbz5NYn1IfkJyaTg4MWNgOHFZSjJCYDY2RWU7T2EzVHA1RlZPdi4pPldPMC51fWNdaFIs''@;'; put 'put ''bG9BIS5obG9hSFVqP31IeiolYzFhcFZeS1J5PE44V0ddZ1t1NmouWTMrMFQ1MHd3PE9XIy86V1VMNnxxfCVJPEdVNW09aFRfPkghZCJVR1hUN2ReS2Q7e0QsblN1P1R9VCVQU3g1aEA8LCV9ZSZ8Om55LH5gc0FDcX4wTkspdy86ey8qUnNJaWN8U2h9JS9eUjExZjAmZ2t7OTRTWzdOM3VhbDpo''@;'; put 'put ''U2YufHVwdWMsbG9FaSxvSD5kYDglTSZdYCI+aHg8W29pfk55YDo2KnNaPS5FeXBKWTY2PCpVOiFlKCYiVXM8SD5SKFtuZz9MekRtYDpIfjsrR3JPQG1IZTkuezMqNkRDZU51dGpTNVU6bWZ0XjRIUzhkd2J1LzBmd0xpNzsiLHNqcGgxWDMrTk1+OnxWNiZQdlB6ajBfRSQ3Q0V5K0JjVCsjOnVb''@;'; put 'put ''IzRNRSE7KF82UUNnJDA9OWkjTVhLaV86MExNJF9KQT5oY0VuOHRpMX4lVDErMj4sMmhoUztAMVRrby9PdE4sRltQOkh7JF1wOkRhVjZtPDdxXj0jQ2JUNWQ+N2U9d3ZUWW0xT19dakdFbk47Imd8JERuJHFkZ0Y7YnVKbEg+Q3Uubl5oJCZYc3tfdiZLOHJKe2IsUjpATHBkbkQ3Mz1HYDs9NmIi''@;'; put 'put ''NkFpODRQZTdFJUg7ZS9ARStZam44ayFtJlI2MCR9OkhLVXBHUiEsTlJdXnU2KmZrdSZwZyZLMG1OUDFTVkZjcnc7TzNURmx1QE5FUms3cShyQWtoU2ApLzE5OWNeVXIzVWhmWnBrKjxGfDhOfkFxRD57YG1gRmNxfmBLTzM0d1ZGM3NnNkcoRUptYFs6OEBMb2gmXX1TUDtYIXclJkBMbFddSWhn''@;'; put 'put ''cmRFO04uX3RaJU9ORlJhJVZgbUhHSXJSQHsiWGRgWyhVVGFuPylxRE9bfTZHVDV5PDYvfVdhNT9+OElVZDZKTV03elBGL3I9PF5hLDt7Z3VRblFJP2xsYVFhVHJnTHt7SVUlPjErS2Q3dHpTcE5PLHlCZytpYzs2bW5rTXpzfTpDWTk4c11kdjhlOi85NUw6Ont7NndWfG5RPD5DWEVFeDIiWUBU''@;'; put 'put ''V3JMczsiWXs3VTNAWzJAUDF6K0glOndMej9nQztwKVNNWmpnMSVSV2dfWkFdM2J1R1NDOUZ2WnVUcyx6M09TYEJSSGw1bmhiay5LayZQQGtOSH5oUzdFMTtPZ1ZwUEVvezN4bnBVNzRTWXlxJHwhfl9eaGI5V3B0OmA6XVhsOnFXYiVMbSRBMUV3eXB1ZVpXTlIwWHM8dGNCYm9denJJM3F5OjVY''@;'; put 'put ''SjQ/eW9SazU3ME4odyIiPXBRTDhYfnFkQl5WPzgpSTRoY11Senl8RUpyeSpfNz9rd0kwND5tPThnOHp6Y2d6Km5kYiN0I3ZGbjg0Vj9wKSV3aG5RPEErU25TOyNSfERWdUNuV15IezVeQGdnayR1I0RyJWxkaEo4SGFsTU0wSE51Vjpnd1BZJVEkPCghV0hwTXVCZ3s9fjcpWkRiN2h3R092eTU1''@;'; put 'put ''XnJdaFluL1E4QmoqLnBBcTlMdF9BTHRQLzQxRWZXdD51cEAwRHgxbiEwP0VHYT96LzIueSp9elg2ajxeKkZpOV07al5uSSNeXWgudmh3JVs9e0dXck5fei5FXShTQSxEZD8oSHhpUVRHPGdpa2gmPTQoekMpS3x9TVBiQ1FtXV53Q0Zzejg5TU5wL0N5UUhlQHZbamgudDgrLGpddDF8fk0jSDt6''@;'; put 'put ''YE1kVnYhNUNpaWNSalV6U2xWajY5aGhoJCYpK2V7Nz55K11jfFV+Nmg3Ryh+Xl91UiJxaWl8Jm4lYnJSMmFMaUNlMDFIcWhlI3ZmQE0/RSVJeTpiNjhSPjVVfGN3SU49TDV1MWAhYS5yd1U9Jm1JbXk5MjxoXytWbSZiZlZxez8hPTVeJCh1KWU8bSlMP3lAZ1NQNi5bcVZoL1gpWkt3N193PSln''@;'; put 'put ''Q0R+TTF5UDZRbWA6U2lOZXBfXyVnbUZkez5LKWpRfl0qcncwI1QmODE/d2BxNkg7bU4zND85OVZUSWg9QHlPWmEwOVBSQWZCPCVqcTVCSWgscn4uRGdJNTM6W3h9MDpeYDRZNiRFMi5NKi9NfjRHZDF6OTxfbTwqcz5OYWt9XzM1elkvcyx2STBXP2cvXS9ydEchd3BTemJgRlI3YDVua3lzaEE2''@;'; put 'put ''fDZuaSxdcXVZSFp6eGd3alg/MDl1RzhNLFhpN2BBYHtScmJVYG5ZRyt2cWNTfklMOmVWWl56WzMrV0d7PWk8dmlLR0BFSDxXXjpwSj9DQHB3STcoVylGOUteKz10KytubTZUPi5AOT5GMm9PXz94cFZ1aC9bNWNZPXZ5L1FudGsjdlpQOElmTGY8U3JINTZEI0dUOXVEXk5vMDsvbUYlNF9sVztB''@;'; put 'put ''bkRkRU1vfEZ2a0Z8ekc0V3R4dEpdQnY2XU04ZilgSi5ZYnBnTSomYyExNUIkcUMsS0kuK3lSbEdYa3FXK1NMfH05JU40TXs+Q3pyTXN6TDptUndiejZLeSk9S2B+KVE2I0RpT1crV0AsPTVWVzhUO35xIXJzbT55P1tbdUZydThITHNbUG5MW3QwTCVbKHdRb1Nkd0lebE0qISlpMEBPK2RebHcu''@;'; put 'put ''NyUhb1BxaWsvcTE4K1hLV2A8b2BYbEsqanE9ZkNiWVRIYnZfXigibm19fkJWPUMoeyQxPFQ9KzNNeylANzxwJWVsRTlfYD1XMDhVZFhOI1o8OWdbcEpJLGdXMz1vPnIjYV5bI21YV2JGXSJCPCExLFNefU1WQ2hNcilSdjEpM2w1KTI8VTJeZyx8dWp5LDtffWFjfXwwe1BTZiJ1cGduJW8kQ1Ap''@;'; put 'put ''S35dSHBEJixpYkVBZWtQX086WU5JQTRaW1skeWlJVU5RWl1TJWo0Sz5iU0tobHJNJV1eQ0ZUdzdvaHw5ZUxYUVkpLyVvODdla104WjNye3s2SWN2RXo9eDNIMTpxJGZtSW1QbGBUPHN0I3M3JmhUdzoqaUh4Inh9b0xuJTVIe2s5eyNeYTFUfFE0OVVDdHood08laWpBMUZzcEUmWV9PIjBRXj9S''@;'; put 'put ''Tz9uRjdqMVI8XT0wYmpnMW9lfDU1NGw/OyM6aT09ejgzYkBTLipGWnRROix6MjBwQSgxYEJwcHsicCYvPWl4Yi9qTWFdTiYlX3F3PDp1OGBdVihDJnwqejQpPCVlPjUmKUo+P2hZN343I1loUz9xdUJfSFZPaF1Xdjo2JFs/Q0lpeHZnPXEvMCNmaCMkS2V4PEtHbEIyUjxNUExuPnlnfUpFRGs7''@;'; put 'put ''PFhdL3R3dyMpPEFuX2JjU2JXKDB4X0l0eCQoTTpHVVYoPjsoXUBmfDB5dSY4THo2amBSZTh2blBgcXJnT04hTitGbEgpV30oS35qX1IuN0MvcDJxM0tYd0BfOTd2OyJyK35QOUNifVVqbzt1IiRwb186Sl1JMyp+TnVqIVcmRngoMyoiU15ienslUl9mWTJZIzMsKmlXMEZ7WVIvPUVnbGEkVl0w''@;'; put 'put ''eHNsPGQuL0U3bngmSDJ9Xmh7UWUsWjtwRH47SDMma0RROHU5Tk0zdVFsQlZ7bEQ1Tj5EflVjPWxzMX10NnRDYGpxUy9HMWwkSDMxT2RwIVdQZClVTTU4LENgeEZvbiMiZF9QI003QCN6UkA4dGorI1UxNiM3VTpAez4qS2hRPCZ0S05Ee2ttPlgkQUptSmRoWWEpM3djQlMuS2EzYTtEJmJHWWpl''@;'; put 'put ''RlJVclAlIURJMXZ6MVVYOGFVVjJYNWZCM1R2Jj1tJjtUMyZHRylHYz9EViMqdSY/KDw9IjtAbHpsYlYpdWBbbmMkbk1rbGpuVFMrZE80TE5RQXNhS0tRKFteXjFZYzN9VEcoWl8oVH5kSUVhN2E8REdYe0ZFejVfYEg8YjkkRzVIImhOISVlUzEhLkl6byxUTntNQz1QIyR5Jko/IkgmNDViMFQ1''@;'; put 'put ''RSo/WkZYKDBkIXZZY3B2eEg3a0JEZlp9KC8qLjV1LFFHYDxkQ3ErY2Ewd3U7cVpfRzwlP0o4PiMsS2c0dT9qIWgsb3pAbkwuVTY0cWszRUdkYiJER2ArVn44PmApeyVqLmxZXylmYiROZzNZbHkhQDc6LlVGfThdKjksIUswK2k/UmIxVGNjT3NadiNqJmFmU2ZEZFBoQiZJU2JnYyZLbCI+eXsv''@;'; put 'put ''WXAuJUl9ZkFTS1R2dXohV2Y4NSZ8dnJ3bCI1PyEhJC4lbiopbnM1QSlBcVMjKjhWUS46OFI5UURDUmM8WVZDW0djUmY8cXxAVzlwKWFTTnQvdWdQcGUxPVNjS2J9TTI3XStpQ246dzxAMFNadkwyeSFfSVZeTyE7dz4qRT5HXyV8XlF8OUZuZldvLnBGTUNnaUFtR2g/RCU1U0hTbX1vIWNJZmNS''@;'; put 'put ''bShIYTNneyM5bVUqNmBeU0tncDVQbHBlWG5eWWYkaHNiJHtWSXVjR0RbO0ZBQ3U5cmBJSGx4akJNLCx3czo4RjVbTDQkZ0ZuJj1ncms3WDJQdmB8PUgpNUVubkBDTEN8dUAwPz9pPiY+Z1skMioicG87PTErXU56WSgjJnE2Niw+Z05ocDkoYy8zUCFCfnchPW1LZjImX1BBWkReZVsuaj9abmxt''@;'; put 'put ''R1FjY0VHempLa3drLFR5SXRIeXZ8Ozc3MzV5K1d2T0g2KGo1T3NiSHYyent6cnlsMSRoeTo1dD03fEUwMW9HMF9lVyZRWzFJdmAwUXoxRERkKDtFXjMrcHt7TSRVK2ZPW0YoXyxpJkp3SU0uR0tEPUBYUzpZW0BAQG0iTkpYcXoiMUQ8ez8hN3ZsNXZIPFAjIzg4c1M6dzNOfWFzZX5ENykveCw1''@;'; put 'put ''RHNQNSwhOj9aQVRJaHs5PWpXPV9mQmJ3aWgqMk8lYXR+LEtUPEMoai5pWyk2dWBmWDNFXl4uZFlNZk9TL2ZUekRkTUVsaW4vPUZEfilGIjw8T0h4ZWciWU8oTUVFMG52KD5oOGlTJTtQM2lmUzQsIzROJGZyeV93R3EpS05fcXBFOz8rRFpibktpYm1zZl5odiNTTjdjezpUXytWaUlBSS9ZVXJt''@;'; put 'put ''bCVaSiwuSmZqb1h2WnhhSn4wRCgoJHZgeWAhaG1RP0RCJmFeaEtvcDVEbHtoXiFSPiRHS0wrdFNbIXV7XTR+LEZgbT1WaDcuZFo9YHROLnxJeyM7VVFJTUghTWBjRF1DVHlBeDFjbjh0WjF6cHY5SGYvclBgeFspTDtwJUR7d0xuR1pUd3ZUNHY6U2dTJH52Lzo0JW8qZkxTK0h7fGpKRDldenFV''@;'; put 'put ''eVBJbUZQW0h4PGtsU3pTJHxSW0Q9U2leOnlLWShTX1BWJjUiaUcoeXx8YVlWQzZyL1gqa31UZCFzenBjRF9hTWFbPmw1ekdSNEswLDRiOkBzJXAheXR4dCorPFlzP11DTGl3JUdmJkMyPCpvNVhJbVU2fl5laWBDNlhQJS5wYmBbQnVPQCJWKV5DY089RDZeJndbL35ufkx+Sz5HJS5UK3hbLzIy''@;'; put 'put ''ZjcvPD1gfSIlWmJUaDxHZ1IoT0JvP302dDlnQkt4YX5JPG5WSCorfF4hMigsQXFIPi5EMi4jLH0oUjVUT34/SC9vNT8wZDphcCMuXkM5Z0RzOzVsNWspUDliWTB7bnR7eit8amQsTDd1RVlZRm9WUDp+OCN3XVRzLCZPWz9qT2tZYDBVSHsxY3hyZXZlWmx+MDx5SnxrPkhzQ3sxWTtDRFFNNEE4''@;'; put 'put ''MnJ9I2g6OyMyOG9EaWR8VmZeS01jaDtVOW5Da1c5ZFZAVGJVeVkyPUw5b3UqQChdTVR2LnsrYDYpPS8yYiNoLmtSTT5kVStwe29tVWNbaT4icnM1NW84MG97ImpBI0p+Z01efGJ7U3E8XSE9KjxhLHhmdndxOGZ1WDFQXylmOXJiKlJHZUNtVlBxOzhHT1lAMEpzdz1kXXVlcFZoL1pzbXpzbkxQ''@;'; put 'put ''Nzl5UV5FdXk5YmBnPEgrSiRNNF5ibVFbbjAsR0dhKSFvPG0kYzs9U3AkJWlhKmdNPE0oPUl7YHxlckV7QkI/Mk1LIVoxKz0iZ3JKWDJYdzpley82emFOL1hANzJ6cixLMjplX0kwdm50TyFlZnRVckQ8dWVqYGR2WmBNLE12WlczIXFxe3kyUlchJXVqLlJaejl0XXEqa25MVWMqWDtrVFd3Ozp3''@;'; put 'put ''MSl4OTRUIUk/S1JDbj47I3kuM2oyOXFlZT4+ZWE6fWJ8XklASiFwPzpSdTRBNWJTO2Y2fF59dyREblUlLDZQZX0jKz14UFZQOzx0Z3cmQlQqXlJGP306KSZjIm59en48e3U6LDU5ZHAjOi9eZ09AXjZycGQ8REN2XXhJQjJSM1hdeSt2d0xeeVgkRCh5T11ESEM5THxAc0IvTDhbKCMsZmIvVFNr''@;'; put 'put ''JDZYbkJWN0s3UVE9Qkd0SEdNYG1NSz4iLjlaPl84a0Y7RypqLFMlTF4jMVljIUs9Qzs3O29eOFhwanUiclcwUz9BNCIhbmZ2UGxIXm1vbEY7KWx1QWl5VGZkZlkldWNdaH4/Z3xCYGZoIU0oQmtBWTw3QUErSipSST4+ViYiKl09K21HNyVuOTlYZ085aTtaIShUZEdYJiIqNlRwcjhhISp5c2oq''@;'; put 'put ''b3JTQmAlT1FyNCU7Mzl2KDs9fn0mfDs2WyFgO0coMEleSkxYfFhwKjxFZWc8aW1WNV9gX29Le0pXN3pVR3lAcCEsaWlxLjgsTFJ9VEx0UVZ2R3NiV3tSV0JrPCJ1THViXXtJNGlVSyZ3XWg1OFBbXTM0S0kubD9IVlJkIWNnSEJVM1BIfEt3RkBFeDg4MUdMN2MyRF8leChlRHhOVUUsO01xMy5k''@;'; put 'put ''VWNbaXFmJmRCUUFXVCZxPj44Ym9GOU9CUy4la25ZQlJqSytiVX1JOHRZQVpLYTwzXWooRyJRTXNBQUZTND5nLEZoRGdIXV1rKytAIkE/T24lYTJVPDp7QHcjMl5AcjVvKEAkMSZUTGVBQXE6UW8/YnB8KXF4T0E4OEp6LyNjLmVTJFg4Pi9ZeyppQl41dDhgJnslM2ZSVjkwLm47YHEheGw8PUdl''@;'; put 'put ''THJGL0lHd2tOZSwjQ1lpM2MlalciQ2c4WDJGQnpLUzJecV1CS0JoWVtHY1JiNDVxZWNTYzM0SkNaNF1mIVd5SHVsKTl1MUUyaG48c2p8UjUxSmNrXldocUI/ZzNob0l4KTpES3JpZTlAVnorRDlSWk1GWH1MRyNAPzw5ZDlIYURISzVqO08wKCp9dzBJMWc7fmhwMl9tSUhLJClqNT9xSywsWFdF''@;'; put 'put ''bkRzKVRebkFVdyQ/PEhtdzx7NntrZ28sMnUkPCg0RFU/eF1iPmQufl1fTGdfSWY5M3lmNiNVZix1RWFZWFR3U0crMW5xOV1sVHtUfV9AITJvJTI0VTRIMiRuakpqKyY/T2h2JlV5P1R9Lkt0TSVYVUIuZnYhZzk7I3JTUj47fCRdZCUxd0h9bWBWXnlUUWZBPF9SOik1K1pFV3VuQFVXdTl3bzpe''@;'; put 'put ''dV9BVkZSXz1QKHQ4eDluYFRoc3tzJDlUY0dsZCJKPjpOXmV0d0EkRmxtYmFNIVZbIzdwO3dtWS9yY0xQLlU3JnVYVzttQHBwRlErenhvXyZjW0l8eHhiXWhmP2UwYExbTFt7bGIyJmkhMEIyaEtNYVRsfiE3cE5TUFd0KVteT2d8d3RfOUhvez0obVFkSkxyYWg8O1l8ZnNrYk0hZkgsPjIra3xw''@;'; put 'put ''czZydkIxQiUoLyJVcmN4KiVYRkdpZD52KzxdbWtASXAwSztLTk1qaklre0swPjYiO3U9MzRAbWtmfl11I1d0PkJvQTs+YyZ1UXJMLk0zYFpOME5BRXtXNDRNSCFXNFUwdl5BbnUsTlRlUFNLaXNVZFFANUoqJVddeVRsOl0+L201eX1FVzwxOmVLfEVLK0JqQCp7RlV0RDNMPzQpOmUuNEB+TkBZ''@;'; put 'put ''K3p8UltiLF4qTEZhQVtZRF8qazw1K0tgYnQ8YypOcS9sI2VxfjVdamAwIVtBc156YW81Yl00O2s7OkFwLlFHdV8wRHk5XzomTjhXW3NqbEtxT0tQVFk2OHtdPUEpOUlCVlkweDBlbm1YOTBlKDIlSz5kfXg6enV+NSVCPkJvdypPS2FIPm0oRnJ4NUhDYVF+L1UvS2o8UltqSlFITW5CbHhaPUdV''@;'; put 'put ''VUZ5SHNeIXplNFRzcysxMVBEZkImZHs+bFcjWi49KF9eaWtuUVcsWTwhPExsWys8UHxAJnAqMnA3Rll7a1kwIlYkLz9dV1Y4WVk9KXMhdFU7VE9gSX16aGJAQDVUTW4mLzAiXWdrcCQ4cXdEd2lHfSNOb29PTGE8UWpHVTssW1dRUHhiSF1gbFBOXXMmdGoqIWp7RWdhLj9ieCZ0amJvUH5QV0JJ''@;'; put 'put ''T1cpP11dZ1BBdSk7QiZsKjZ2SXlxK19CQntnVU5gWmI/Zy99UGhCanFVbURvLERucWYsTnFpcng7KjRBUUBKblchTCpLI0suRXE0N3kyOipZeS5DM0xwKC9AZmFbYEprcVpvP2FEITJDRHtDWjxdUUZ0NnlxPUAhPHlOOVBHXTZwREo5cjw9aDEpMlMlOEhANmBMRzJqbiJbT1VpN0J5ZTFMbHxt''@;'; put 'put ''LnlmME1xL3Q4Oy4iOEJ5PTIvXXQ4VnFoTzE7TEk6RzI+QVVVc0Q8LEpeaElIWkxPcnN8N0U5MF9kTXd0QzhKfUxCSz5iP108XmRReG4pd0xVQ2N4bGBiOF9VSF1sczJHRHsuZFFIdDZdZEdPUDRJVSkvVDJUIjY4PU5oYCE3Z199MzIyQmNAL3E9bkVHUHpZWzo8SU0hMkRVR0AzOz8zSn5eRCRa''@;'; put 'put ''cnN2ZHVQY2V7T0VZTyJ+VkdyK2lWJTkoS1cpLno7NTg4PUp6JVUlM0VNVW5ldEFUfSU9QHdxLHlxSFlkbm5tRnQ7QSptNlVKUTE3ZCMyWVtMfmdaMCl4ZChELG5PSz5odnF0RlJ5ZURbVH0mOFk8MkRFejkvcWs3QnlZck9SRSksOFI+Jk8wOCNZQX55YyNZPnImTSZ3QTMxXWA9cylnKGEpLFh8''@;'; put 'put ''UTAxd1BxSSJ0flVtb15QeCpITTdyWzkqXXA4cD5vOjIwWXlwYFYxRX5ALjJJQXJxZDB5WDFkaUppcDoxTS9UM0J4NV57Z1RbRExAYz8mXyM7amZqZG5oVFJUSDQmbjByPX08e1ZgWGs3fXFaUyM+QClXZF00ZzVjaG9wRWtIfGtfRiJyPkdFLGJ9TCQka0c5eyNEOD49ZCE2QjwmeGxnNW9sVkps''@;'; put 'put ''ZGA7JDQrNW80TTVJfldgJDpWcVpOOUIlJkokN1B6UHd0Q29oJGBRKTY7cWhbY1VuXkNHSTtdam95QlVzb0QzRDYpWjZnXWBOcH15KDdAYEQjMkIyYUZkRnwlLENKUHdDSjR7IkY3elE8czgsOC91cVg9Jl43NyZJaVczbF4rYzJqJCp2ckVTcVQrUm1TW19AcEZ5IzFVUVhRayM6WShYJDFVVCE4''@;'; put 'put ''OzwyY24kfG06d3UldnFIX3xkUXQ0eT9SRTdzNFRBYHhIVGc+TStGOGZRSVQiQD5XZSNMUjl6TWhyYyhaa2heOlJGSiQ3KzJuRmBPb3V8WUtwLD55LDg3MVUkdlUxZ11NNGFNWUJgKjJ3Kz15ODJmKjtGfjxiJHZJOEtzPSVXZ2NSdDtISF9Da35hPCpWOmc1MG8yZVhfTW1SeF0xQXJyOSpSXlBi''@;'; put 'put ''N3J7N0Ijbik3Z2chVER8eiR9fT5+Wn4qWEZueUpBZXZiaWpBQj1bPHdUOUdIVSUoWXoiUztsXzMxUCNKcmomJnBPUSw1O184STg1Ml03PGllQXddUiw2LyJtK1NEZHMrPlg6O3tDIUlud3dUNl95Z3BkM051Yk8+b3t+LnpJOmIoKHBzdkIqdjQ3SUNFbj09OSU9RTMmS0E1NV5AYWFzT2dybXtm''@;'; put 'put ''dHxnOFU2bno7YT9ASFssempyeDsqUyZFLCVlQF0mWT8pPVExO21udDk4NUpeaEZvRipKfkUoVys8b08saS4rJF1FJWgudz1gRigpXktmclk5dX5vY18jKSwkImtKZEEwNDVnK3JZQlNAdWtePDBiYCxHQ0RrPS57JWVCIis/OHIlTkB9I3I/VCVqblZzNWMoQXMvdW5gNm9PL0ZTdHxeP1MjXj5z''@;'; put 'put ''cGR5NlUxQyp2XXI+T2VnVmIlPT9VVz9wT09xfX49eGA+VEAkQUF+VXVpVEJTOit9JT9lZUtyaHcrflJOJVdlcVV2JCNiakg9TTo1WDJYIXJdKzxiSSwqXUxoTHAzOip6I0paJiFKezchI2NIVHxFbX1FU09ZcjRpUCoyZnNlZ3FZQkU5ZVZNVz1yZVkuW15peEFjJVNYPTtkaGZpV1dTIWteJXg3''@;'; put 'put ''OWomVTJVWjw7YUNneGU+IS8wTDZXW0NVQipJIUk0Jmc1MV8keStORDkoX20mXypUO2oySzhrQm46ZnRVZnFSSXE1aDZUcDkwNUluTz5za0lhR25dNj4mdS9tcWI5Yzk+UkpZRztHYXhZTmtnI1BuVmVTVGVQPGJYZU5QaGE7PUJRfGtxYkJlZiwzLyh6WDZyO3xCRyNrXXhpWyVtJGRlVjltcDxH''@;'; put 'put ''O1Q4MF54ImpmT2l4dksxaCQycHs5KF54dXwjKHVpK0MkYiRKYG0rLzp7Pit2WTBiL2VvZ2heTXs8WWd+TENkWUloczNULjkzdCxiX1ZnIm4sNjlxUmJxck42bFYidXZZYj5yZVowLHE2UWZQWWAydHU5VnM3Ji83NCo9RF19entHPDxRPGVKW2IlWiUxVGw7bUNFSDpUTTJlVkI+a1VhRFhnKDs4''@;'; put 'put ''UztbJj0rRzklY05rZykjZHA1YURmVStBPkZnOSVjTnFrR0BvM0dwXiEvbSJgNyYyXUpldWs0eEMwZzNpI2ApSDJZeipfZWxXNGpwX2c4RyVvNCEwfWR8ZkRTaE8ve2lUXUdkVn1GWzAmaFNaImtzcFl2MzxHPnh9blUlMU9faGAhK3ZBXyN8WlohVlJpX0VOdkUrLzdbdSEqdlpJTCMjPmB8KkZ8''@;'; put 'put ''eG9eNnFEQWg2RUdJWVVHck4meSEsTXxWfDROKWx4b2ojMUJreGE3ajxmMVBIUzxuYyVqLndIO3w8Xm9XV3VIdV8oQm88c1VFMTY1UUVJfnEoRmUpIzhLPjRlLlk9Nyh4PE91WH1IfVBaJTtjYVpZQCY/MilmViozSDFKIUBhWEc6N2JKZG80QFZYVkpNUUxyKURZOG1DWnhdTkF9Q155YnYjUU4q''@;'; put 'put ''d3M3I0pKNmkyfXNGbF5OJGU2JXJ6IkslfDFLRGc8JFl5dXF2LDJGK1FvVkNNRldNYDxdZnNULFU3eVU4N1gsQkAqNCw1XjE6Z2B7biRxTkR9NUR2JDR5Y2RbbDkpLzdmNzEjfmRuN0svKXJvQ1F5W0lHX28ufkJsQ2JbTSl5Q3AvTmh8bTh0Qm9JZE9wJDlGLHcrcSIlUDV7V2NlfThRPVA4MW8s''@;'; put 'put ''OT18YXlvNSZGWGxRazVVYXAwOWRRWDhvM1hRRTVfaWMxWWE4RCFFeXRYK1c6R1lFITpDMnxQe2RoMGQpYCVPMEB1OVkjOFtiYWwzdEVQV1RhN2RnfFljOGcuaFlRZmVNVkdUTFZbLH1gRHU/L2Ayb0dCPyhbWEkuOWcvQ3Zuc0YuNygpN1o2IUcqQyo+PixJIUpWRW1nbjApTjZ9IkxGR0JSdkpI''@;'; put 'put ''Szl8ZFFGUm9mQVFhUkVzZHVRVVlaNTJCdXlzRX08I0BManAzNW9IRV08a1NgWW9QRiprQUFBQXdBRkE+V0xDOUYqTVJmXkxXcDolbjR2KGdaUGFGJH1PU0hVd3ZPPmlnRUN0bEJBQUFBQUFBQXYoWkp2LmMwc3xAcEVGYjo7OURKUkNCeU1jMlNdQyFrfCRbcnZNTjFxPHl5dX4+JiRsd3o7Vj4i''@;'; put 'put ''ZjJ1QmpgM3VeVSshMmhxQlMvYz4lOSFSQnRpcGt1RiVAKGJWTi8rN1IkNEFCVG1nck1MJTh5TFBbKFdaNGZYUGw/ZGw1Jl1ZW0M7YSJbe11JKFl3WzNqNihwSEo1PDFaL25IR3ouMTRQenohfT13M1UmaWFeNUUwNk9dSStzOC9pdTpOaCEqO3hqQ3xfOCpRLiRXVGklS2BQTGs0b0pTI19ILiYm''@;'; put 'put ''bD8yJW5OWFI9Yk8kZ0kkKkpIJVZSXjEjZSQvWU1+UjZ1c05SMGAwRkJMOUJXT09HT05KMmZbYj5VMylMa0AjTDBsLncrVzl7PjJzPE40fHpHIXRudj5YNFUkbEhUOUgha3paREpyLDlsdGoqLHF+L2ltKC8lWjV8RWZCaXBWb3kmKyEufmovcDNXVGNQXzBacm4/RyRuVkU8SEN0Qlk0Vk1BSUU8''@;'; put 'put ''enVoLGR8R3ovYzNaZDp+K11kKD5wTl0qO1YqfX16Zko0ZjRWbyt1cT5sfXF2PHw2blBSdktpMzElSzlZei9+d0N5XnshMz9RY1tab3pPIiwwMD1URWIlQCo4X3sqenZraUFFVGFfKEJDZzdzdHJASDlTTXVTdU5xc29RdFE3cS4ocUIwZFtla2s0eztZJUtnX149OW1NIVkyU19hdzJ3Lnk6RXVb''@;'; put 'put ''M1RfR3FqQDpnd2VLOEFDOkJvbmgiVHxLbncoXnQvKXtWZzQ3Knt1MFdNQzczfiZgJVF6NDRpUC4hTzNPPixLZGZ+PlBWZU1KV3Z5akg5QCgzJWppN2d0fmxocDFeUVFPOjsuV2BuXnAwdWg4PDhRKnZjcyhHcE4uNi9YcW0uZipXUVVJfmUqfmhJWndmPzZsNDQ3cDJNKyE3NGBCeVdPVD9UbSQu''@;'; put 'put ''OntVK3NzeFhgTD5RR3dbYixCXl9eUT1dey9GSytWS3YpUDQmbGMpPio6YlMkd21fY0ZVbCt1THUxQ3tsLC5FSFVFdltbbCpQUF58W35EWH1gIWQ1KTJrW0VnbzZlMFlVQ3IsUll4I1ZecGwrY2JHa1VocSVeVGpgWUhEXi4oLno6SCw/NkdaUnhUakNZRixURCtKdkM1dlVmLlNUZGw6Jjp2Qk45''@;'; put 'put ''N1BfTHZSQ1NeaFVrXzokamhzXSV0QkxXb3hRYlA0TlowMHR4PDg4PyxAU0dNc2k+dSVpUHZsIUR0VSFUYHY0dWI+QzJrJFR4Om1lcF42VTNgXlg4YU5SRmN+WnNWX1clfj9oQkExTUswTCpvb2o0MVRtTkVucTU2U2F4TlFsTzN7K1E8WV0oTXxSPD5ZMHJiWElXR1NBPjRGV1hKK3NsXVZXKURy''@;'; put 'put ''ZntHLDosbFl3VTFxQFtER0plZ0NHK3l1X0pxZGV0LD9PJkBzdFJDRlMsdih3bnp6RGM0YUN3ZEdKTEIiK1Y4XT1XdkdiWXlpKzB6QWdRaVlfSE56QTcrSUdxWzZPVFB8SCtOaD4oODk6NH5BdjdMTXUkbld9RklMfC5YIX56cWJbamtLeUVBVzdbYVNqJkFJRStRUjQxLEhfNDspPGUzLEBAYjlo''@;'; put 'put ''X3svLk5YdGU8ZElldUM+KjwjbH5De2gzbShvRXJAZ2pZKlpUZFI1d1c3LllHTT4jRFF4YV4+OWhmNEJxfV12L2FuQnFQLjVZcXBHR00uTnsuZTNfXXBJSVs/eG07LiZqNFE/Pyl7aVsiZCFSTV1yeHJnWXhqOytsc2YvNnY7UDVMbWVrOT05fVJdamJoUElXM2NWelNfKXgmYlJQMTlFMFFVezdt''@;'; put 'put ''b0R+fTVPLCYqUH1qaDgvcSJQNCNpY0VHaTgsI0xbRzlZeG9+QGgjXVI2NGJsSkRmNlEhJXAoLHwlIzlUfUJnQm8ue147U2FGdWpnJGtpYmgya1puSTF9LHpWaTpZaSJmcj5Qak45XixqKi84SWdDdj8hYGxtKm9CPG1ZT3giRVk1P052aUVvVEtqUn4uSU8reCY7Six6O3pxYCtNOyZ4dmtVeUR0''@;'; put 'put ''b3UxOG14PWQ7aXN0OGEjWF05cC96Oj5CWmh2MC8yR2c7VldLeW1rdmZ5LEUsOTpnTX01e3FaRl1+KDFGLjJAalRLYlhgQjd9KD91PlAhRmJgcDt+P35pRHglYyY5ZnRYfjBuRDV6K15oQUt2UUJ2eilQYDhKeCNOMnNmXjFYS2AuTykvZl1AdTBkN3U+JlsxQ1FnMmAxXm9saVkyVktEdjdHRipP''@;'; put 'put ''Sy9JXyJaPzpFSEQ/P2owUlNObn0lL3lLTXFlI1s2fCskYyFyOD5sa31xcWtCaiZXWXZFZzw7fHZ9Vy44NVZEWEM6WkVYVGdjWHYhTSk7WzJeWT19X1s5Ny5AV09bQUAwcCtRejAvVmwkcjlBZEYmPjRnZThvZlFiKWpIIlE/JDNIaEs4QitYbH0oLzshQTpuZFVVYmcpWk0sZFtrN0c4I2hEKlZb''@;'; put 'put ''WlJ+MjsqIz9sI3QlX1JzcyNyS0ZOWyFuRzArMnI/XSJyUzRnZlZfKSY4Rzc9MmZzLnh5RWNuMGkyK1RJRWkkQnUzfXR1fVkmVDZtSHVRNH1tOU4lKm9jIm9rUHcoUVdlNU5zTSttdCNwSDdhOTNkclQ6TU11anJCOV5KaGR3OUpYQCxeKDlCcDEsKV1qfnhUYiooZWJrPi5EekppdmNfbkJMU08p''@;'; put 'put ''eT4oNnh4b3NRWVhvUX1LTytDJH0qSClnRmwqbjpUflg8ZnJkPj0qWks3MGBsVCpiXzZeZDlYU1BiYCk/ciw7Njg4LDB9M3hpX0xqRz9iWXFYVDRERy9oeWh5fCwjM3U6KmkvPCh7RWMlc3VsayFiZkQ2LyxpWn40MFprQTdxO1gucywvclppVEtzdnpUYyhyXnY8RlshNiVIKHJ3bjxmQX19cipS''@;'; put 'put ''QnU4JmRCWHBfQ0hCUVN9QX5vRlRfXm11QFVpfkFXSHpzU2V8UTlbaFhnUkEsQm8sO21sYmY9S3QoLmA6JGxOIVRBK100ajQkal02TVVQIXM2TV1WUi5TTjw8X34oTUYrZ2NvMS5BenlyOT1laGJofGEzXz1GcD9KS353ImQlKTwqa2l9Z1BsYF5FRlJFTCZ5MF48OHZeQGZpb0VTY1JtcjNTITdD''@;'; put 'put ''L0BQdWp6a05rO31eODNjdz0vd3d0UENhcXJWLEk1X0VCJSk0W3BsO2pPT1duKGx4WjlbbEdSMjxzRmYqVV5aSm4qO0VIXlpwM08iZzQ8Vnl8Ji4vdyxOXW4leUBKfHAjOysxN1psRm9gOWU5YGo5ODw8ZGQkLywxQm5FbF1XYFRKeFJGJkgmN28/N15NbD1KUjtgJStUNX0xKCgkQTtrfm4/KFZu''@;'; put 'put ''UzAwdCZfKDgoTGRCQSFBVENdJWdCfChMSn1vYy9mITZxKHFacEUuTWEubEhOJHxnKm9SbytrdEBJcTxIT30lREdnOzVBQEJgZD9aQiMiYWl7Ink3PEs3Yld0MWJPIlVAbm5SUEI3NGhqTGZXUiJPcWZoRXEpK3dJIXdEOSldRCF+NitOcngoYy5PIVlENjFdUUtsIy8xP2Y0PEpuRlFnQlBRYiVJ''@;'; put 'put ''YzdEIyQuNkRyVS8kRCh4KkQuKFdgJjB4aExmZFY9V0d9KF5zNylZWVRrLjZ1Nix+byFhQGMzJWgpXzVASCVKMG9kRHpSLltqR1RLJmQrcH4zRF5MbGokL108MUYsYTkxTVowUmx6KH1ZK2czfTFoYWNWaCxVYSo7L3p+MEdvQWgufmhyKnJ7e1UuclVSUmdnQU1qVWBdJFhVZGtjNT0rOVBFZmlu''@;'; put 'put ''QmV7SV5KVV9pZmYmYU9jSDw1LyQqTnFrRjhHI0p3Y0ZMaSMrVX5eKDFkXU5bMiNFbTRTa1E9MEtdeSg7NiM9SGp9JVdrMVFmXX0iWHJbSVYjLnhuYGVzYmdrL0IqS1ZMdzM3eUNYLzpkYUw4P0BpbU8lU1VKX3I8VmIyTWB0M1VRU0JRM3BUdUsrRi4hal9LJTRjNHJIOH5eX1AmJkUzSXUhRjNz''@;'; put 'put ''Kn09S2hAZSxRZ044U046Vyw+XVYsTUhqYCN7aHNAbVk5a04xdEN0YFhZYXIrdVJ3dl9oNjBhbkRGXXVoTShmMXJjS1Iwdjp+I3dmSGZkYntoMk0/UzopbH14dlBGbWRLJkckOitIbFltUWVCUDZPS2JLOj5uYEc9WyhmXl9ISz9mKWx5cVFuW04wbGZMLCNiNHU6PXdDKDdMS2JYUjU1VGdhQ3Vr''@;'; put 'put ''U3R9el9eeTBKVjxFImxMSnx6ciZDKVhYfmh4NUVebVhDPFtrQWcsd2U8W0tUdDduI2hVNmI0LjA4T2giTV1RXWB3MGIwUm0/WitXfGJGe1JePWhlIU4/X21JOUBNL0N2UE5WJURJTEoqJl5ffUhGXnI0MVV9MFY9aG51cFQ0aFoheHJPSCtxTi4mKTRsWStnaWp1M1dCbClxUUw+P1BRbn5We0I0''@;'; put 'put ''OkkuKnpqTkhgK2R4bCx4MShUR3ZZPj8lJmgsaVlGSz5QI2cvU0tuKCRkJCs3KXIyMjh8K0tlL0VmUzJZI35SLyVre1tucWZjJE5dZ09jbD1XTi4sXj02PkpVO2NdfkRlJDdlMUF3ZyIzZ0VwLykqMWZRckBhZU5SX34qKHgkeWw3eHNgeClddzdEJmUuTGV6YS5MPFhbRzV+QiVjVkAwd10+IX1H''@;'; put 'put ''MG0vPl1zUmh8PjRtcykmYyV+TmE7aVImNlgmV3RTZzBtN34mMjBJd2AvcEpEKFFMQjoyTkZrbngrVFdORXdiTF1DTWxTO0lWLzo7ekxuKEskOn0pRWw9V1FNcm41alRVW1hZeTB2XWYpaUgmPD8mO1lBNkV0LFskOV1YKkJ1KnpkdkdPaXUmQH1hQE5IKnZOfXplQzRucjsocHRZOnlBQTFdZjRR''@;'; put 'put ''Rm5FYmxkRn5wO0FJRHp4PWlwbllFOHtzeG18aVJEaU1mcE5qWVNkLFYpPE98aFYlRytiQDtRITBPK1FOUWI8S2JOeToqfEU6WUBqOS9KQHdURVVofWV7cWVkQXUlI3xFQj1gSSg0bjxCcj5PTkNhYlhHbF0qQFsybSxFZD90MUN8VXJiUG9xdDFke0Z7QSxzQ2ZAM2k+KS8zIVBnandmcGV7LCF+''@;'; put 'put ''MlRfPUF+QkFXJW5VPn01aGh1Iz1WPik6eS4xY3ZxRlQ8SkZUezJyfVBnLnFBYkM1S2VMRjRnPG4lNEN9bHFhM3dDIzx7bXo5RHskUUdbb1dEWkdQRmtnW3xyQl1xez1AX2pNZXVNNF8lPCpGVSJ9bUtPJHRPZyY0O3FiYU13b0RRcmJfPW1wZEcwLllAN29sMjZ7YVJWYH5+VDg4VnJoKTNOOF9K''@;'; put 'put ''ajJybUJiMG1eMWAuREh+Skt2RHBoSUBLaFd9eiIlVG0iSWlDKzVMK2x5c3RKaCRKTFA2KXB8O1IhdChvejg5OzJPNEBkfVt8MUpraXljWjNVOiRJSGJEbTE3K1RhYyVVSyZ8UXZEc2k7ZGxTOUloPCF4SHk8VXgxbll1WGtCRCEzTlpeLFssQFRXeSN4UzwrNn1ocEFiYSN1VGVDOEwuNCE2JnJG''@;'; put 'put ''Oyl5T3E9Ql5CKVdXI29AaFN0SmkpPFZLMmZFdnRKfHlfLDBiUWFwa2VAPTxiPzg0KnlYYWVrSVpERSVdeks1QGxmaFZXSj41PXtfeylwKF5VeHdmRHssQldANipTfSpeNEo+QiorLz42T0UpIXAlbmpyUmhCbEQ/cFdERF9vPngyUyx3PGNyL3gzeFM+LiRdRkUmOF8kNmUrQ35ASyxtVjUweiI9''@;'; put 'put ''RDZbM1s/eiNxRnNsV301c3RXKDwxbyo4dCV1V29ZVXw+Lno1WF4iZD4rem1IVmdeRTB7bC9dIm1DM1pyYSg9SSgoSkspWmo7bV1+bEFHZFVvNmwjYSl3NT5rVSRCcm9IRSM4I1NgInQsVj4iPkQhaiVSeW9nNDoiPilrQGtmO0dzZGRNOTt+Y0E7dlovNkxFUDJOWDlFSlhOazdXWCxKPGs6MVRG''@;'; put 'put ''PV1YNiQ3bHBCV0tAWz5vRSNVWnxxTnQpPTd2KnB3dmlBTyIsPEJRUGoycE0wOzx4a2p+SU8weFVkJkN2Rn0uQVBNZ0F4MTxVbHtNMVhQUVUpTFJPP0U2Y3hzbnpeckU5JT9PSjxSYiJwQ2Y8SlkkI1JTYU1YYC5jVDAmIUU7dlhhdDElNHwpTD9+XjN2b1ZtRHVCbGdVeHZEMkErOE05XntEZUt3''@;'; put 'put ''OnFyN3pDOyRsaDljfnIzYT1xSygiMmpjajB5cn0zR2ZuU35kfWlkWm17JCpNajB0SiM5Wix3ckxSJk9fIngrWDdqOHdNS3hzNUdJXXJbfE82YX4qL0h8TVV2WGtAazNrSSU6YzIhPkM/QHI0QSUuNVBfPzd1cTFEQXR2cXp4VWV4bmg1TztKLyskTyk3fkovcSZdPCY1MF5BZzAvcWYuN09faDRO''@;'; put 'put ''byN+IzxISy5rdmJhTCZIKSF0az0kYU4xTyl3RUBYKU9PanBiMlNAVD9oVCtuXW1WZz0wenN+fmJ7d2gqdUNKOT1qUENfPTR9XU5nZnpuUVYyUWlidkUkMktOOUxFJGtZSXV3IjZFd3pxeTVmSH1fSSpiW3YqPSklVjZIWmtrfkImV245Kkt2bUh4IyF9TWZvKW1FdVFpS05jXitzXmkseUxNOnJD''@;'; put 'put ''QVZxU2hpY1E7IXFJOFhxK154RUR3WDFJZW06fVB1TixvJV93OUwmYVRTZn1gTjhnVSlAKWs8SyQ7RzhARlsxLl1IMFFDSSowdHJAVyUzaitKfGQ2O1pHKEk2XXB6W2h9cTRUMWEuVFkpUmg6KjdSaEZDZFkvKWhFYyt9Jm9meDFJI31QIkF9Kyo0fWJaKzloJUh9KSxHQXNHS2RxaWBlWW9LQVUy''@;'; put 'put ''IWEqKiRUIklzQFFIcUNDcSVqXjMlODxBcVkrUVQ+Nn5zNHdNOmFVZFJ1fjNlNHdVRUdrQix6PzpkPlpWMC8uJVJESCYldG9VLzpseXdWQDNvQ2doOG4wU3VgbXJhQnhNVUJySmhBZyI9czZkd2p1WiNrV1tza0U8bmp5IVp7ZUVgckciUTR+MVsqRmc0SzZyZFVjdTE0dngyZkg3cjZ1JFNsVntE''@;'; put 'put ''K3kjb35rMUZ+USZick0lZzJPIWRJOS99Pi9UbW5gP010VTQuS18/RTpRJDBbaCI6SmdTej1PUykjRT53Vy9vTiFNfn5RP1EjVzRmYDQ9V18rZ1owPUkqbUdQMSt2O29FOnNVMTdbQ11HOGc+N2puY3A4PiJuPmRST2Uqd35FKlpkU3RiS2V9XSExWDRfOVB7Xl8qUWlnVGNfayJ7fn1jK3xDXmYx''@;'; put 'put ''dkw8fEl3WSNMbEwvP1YqS2lsdSNLWUp2OnZwKkM9NjlRYlomTSRVWFg+LFNdNSlxWn5HNXpbNG5YO2RnfS87NiVseTBNLG9KMGdZTntVbVc/UXs1NH00LFtbPmZ3JEdNQDFrV0xYWGErOWYrciFnM0xPPFQzRW1sY0dPUWxGTCNiQy9hTkUzIUt4bGk+YjtWWTRiTS5pKD1JJTlJQVEudkZyMFV+''@;'; put 'put ''SDdVPE8ibn0lJT9+TUhXfWFrKVApN2QiS19BTEtUcCsxfGIlPDB2ZWw8TS9meTAsZWYzQGhNeE01IyJLRGszaDxOcj1TYHJLP09SUl1zX2pRVVBCTSwuMTgkcUx+YDhVKl4+ZUhkUWVkRWQvR0tGOSQ9MGh4dDQmb3NsRl8pPk82WkU5cm5IW1dPckZ+OXApUXFpUSF9dTtPTEN1ZihjemxIVnhf''@;'; put 'put ''WUo8Rl9uWixGdF9mT1kiJUlRYzNwPE9oKCNuXlBIRUhhfV5OOkByREIwRE59Wyoqfl4vdlFSN0l6LFo/MSkuNHtnJWd1TnZPSXFrT1hjMkRCYkIvQjlxOHk/KjElW3Qufmd9IiR6IUpoJXpOW300Oj9yW3l4N3dWPTt8cmxjP0RSVm1HKSN0IzF9N0QmbGY8Tkx1MTZGTFFwdjhEZHwuZSJ2S0Jw''@;'; put 'put ''U0NXMCpIPFkzS2Z5PWxfP2Y2IiQ0KFpJcmojWVszOTZtfFp6PjUvX1dIPUs5Mn4sTXNUdD1Wbn0kNytzdDJ+aV93PkRbXjk+Z2RsbFslUj55NEsqc21BMGdiZTgvdDpvWiV0dUZYW09QQlRvNTF7UFAuTUltMFlhPSl1cHVxcjwlMHpJTip0aFRrImV+L316ZXIpflA9UHI9STY8PFs6fHpDRiMh''@;'; put 'put ''fEoxMjFHZk47N14xKCp2a0lALHNCfXVGPHtse24ydWlHaCV4c2B7WDRBST14aVNbLHJMZmheMEdNOEo0LyYvTF4vY0YkTiN4IXFuTSE7IUUvR0V2WDhgNi9qViVRZzF+OlZtTUNpS0pKNXlTJlldQ1spS0lzNEYjaXIlfVthMkdrNmpNa1tsZmIwaEByYlg4dz99P1M/Ti9nNF43VHhkdlIrQChw''@;'; put 'put ''dmcia1c3WzwsTndAJmZJXzFvfns7OTEzdXdBJS41WTxqVkBILDhrVyRWTiN4V2srdGtddUI5U0RWOVMjQUxdeih+VlVrYj5yO2xPSUQhUWBBej02NjA4PnlGV0U7ImJDPmlRdE0/TDRqbWMocik2XUJOQFJ4eyM7TyIuO29XWiklVDwyTTA7RkZEVjM1aDE2UmU7QlJfMzs3I1h1aT5fRFJDdSEv''@;'; put 'put ''RkxIe2tYLGBFRHclYyVjM1MzPGVZVWtMKm5WTytya1RQL1NISH0mcnd0bUM3MExPW3JlaVR5cUkwWls5R155O0RmZSRTImZwQ1J7TVdHQnw6PTN6eDdWa0NjXmsiQkldWlIjUmBKQmRnWSpYKk9MInJFJWw6aFc7Sioud3h7Q28jJmY2V29sVXtdJWZqRXw3OkVOM28jVjZub2N0ZCojc1BuZFR6''@;'; put 'put ''NCp7KyhsZ01ScXxaeVhJbzU/I2lUTCFLQnNDX2VkYi4/TmFbRWJ6MnJHRTZwNGlnZlJmZDF5aU8oKTEzTD9EN0FzRyNHdW5CaUJNVWEkaTIyP3lbZkJhW0ZXLitgPjtPOlQpUW1LVlpySUZWY2Q/JlpzaD0+IyNLRiEkUGV7eHZnPX45JTdffV0xMHUwYnlrWyh+aDdxLnZYQjxoTEs2cFlUek1t''@;'; put 'put ''Qn1ZYl1WSVptfGRXQD8mcU5EOTU+YTB4Ny5qd2RdYDY5a2hDaTl1REdbdjRodEVGR1BXaip7IVpZUWQmaUFMXS9fdEJCOzA3bF13KDcoa1VmKHIobDZmaHNmNTp5a0ZlY0hGZztHVjF+XzVMZVFAPH04c0FaLzRgUjYweWxdZ0VyQG1jbnRHKiFneHxYVV8uUzFbTGRSSEcwL0B5YipJPF1KXytJ''@;'; put 'put ''fCZqaFdqYHg7PjpMbGcuVWRFfVU2bV1oaExgP3duZHRMPE9kVzNaVWFuMWR9NE17T1ZTZTs9a2k4Im0jXmMlWF4yMzYkdGdLQ3oscHcsYVUwJltFdzR5diNDJDAjZSVdcD1QIzpAZHkhb256fT8/JTQ8ZktqMzRUdmpdZS9AaFJnM11GNj1yI19dTDY8QFhiW0csP1czJXNLZ2VRd3AlWzpIcigo''@;'; put 'put ''bXgwZSVVYDR6MmVbWFliOy9ZT2N7bGdJcUNfLmxsUz5KYCJOXlJBL11iemc7YTBxM29wMUkyI3xrPE1HPj0paSQkeT0vUXFuSSZvXyElJkxIeE9DT1BbK1k9bChtRUZ6XnhnJTNvIiVwPXh5diR5SSRJTV9mSU1teVdPN3p8UT9UZCVTakBTantlPXxIZ3NHWV5ueVA3e3h6OkhpLyx9ZlNCPl5R''@;'; put 'put ''b2pvLDZYKGBUTnFZQUVvOlV4YUs6cVEvNlgqX1FQP09JPzlOSiVkc3FtdU4lcVZEXzJNQClLbCNsWnhRZ31OOV97PEZGKWE6ImE5WE8xNklpWVpGZyVwRzMrMztQLyFXLnxWYXV8XzJIOjxIUVBZZ3Q1WkN4U2RYKERifF12WFpRK115QX1FaSMySE0+QDJIY0lbMElfQC98RVVkQCV6Q3x6Sn53''@;'; put 'put ''LlApJl1xcXdUM2RzT2FzcDNCQGImdmQqX1h9R0wlZiIwOnkpN20rRW5vXjRxcW85akhEe29eO3p7LE1eZTEoQSkjW3ZALiNPK1hIbTJlTkdrTFEsZSEmX25ROjBhT3Q9dXVFfk01R0t3ZzdeSjRfOFNKUk1pU29SVz0/LnhZJmJ8a1NvJUlRYjFKWF4qbzlHPkJBVGowRyZhKUxXcXFJMEgzOiM9''@;'; put 'put ''c1QxakRvPUBndiVjcEFrUl1dX182V3VkWSVybWpYO3BGenshai4qOGxsdXs9XkBrb1JHPyNaQTo/JkdXVXxFZ1lbUXc1emBRbXxpV25rQFo8QnAjPHNYITg2dC8jZSlNIUlVaVQwSHN3clVlc1NwUz99O1MubHBdaXVBaHJ6QlZpQnZYZnAxUmRbOCVWcEs7YV1yN0AuMUArZCt4Uj1MKTY7am17''@;'; put 'put ''cFImaSlgIWEwfSNrXkFXYWJWK0kyU1JDdjliMFZ5T08yNWx0NShgO2VvSExNXzMkJWlbQWNdMUYyQnpLOz5EP1BbeHNvN3Nual55UW8/SS9XbkUqJXNdZWxkUG04RFpRIUVLX2N0UDRQdHRrI2gxKlpQbzJgQ3hrQn4wPVpeQ0hlQnhtZDxAIzVvSDRfSl5sQkFEfV5hR2Zddy95VSZoOG4iTXxd''@;'; put 'put ''XjIkRmBOKWtvIUxMR3MpTmNRKT59ekEod1dJYTpXdzMlNFpUNkUobzJbQWJSdFF5QXc6dVJkU1AvL0ZMZkJ7TD5qQ3ZMcnQ3TVlaY25DQUlzfG4pcGdfIylnNztZUmpUe09vUGNuQyxzUnYvRnN+aCl8WlYpZGckLn0qM1BpOjRBbTlFUlFVJjRQMmMlYWA/P1dIZDVZWjFzWm5vYGV4JFhjQ1lP''@;'; put 'put ''TV88JHNzUnU3bjIhMnNzfEl+NH5iQ0QmeFBfMD9pZFtKInRNOmtPdHBMYTQ2LHZVP20wP00jSVp8aFM1YDJaaVMsU0h1REZQYTA2Q04wPismc1EsW2omKylvaU0jTExhNl5RQWU6S0Z4NSJFZDFUNV1TbSRMYj9PbEF0NGs8USYrUnJHe0dVb2tGWjp5ZzE2KDBacmwjSmdMc3ovSnFqQFtHTjZM''@;'; put 'put ''R3Q0NyJLaVZOOHUjUnswaiMqPjU7dy9ZbnlEKkA7WTojL0NMQHtYMiJEflhhSF1QeilMV2svVyV2STdATj5PSTNRK19vcmdVYmVdSEMreiYyMHB3aHF7QTRFcSQ0c2cxWlMzK0dmaHdOTVpPSDJefmYxMXF8S288RWUiR30hSEQsTll0a1BBeWJ5Z198fkAsYmsyWDJ5cUdNWGA2blFuVXpKOTBA''@;'; put 'put ''b2k1IiFKSXBhcD5EdjJaL2k+SEVSd1J7QnM4Tnw4ZSpuYTNdLnY+RkwvNTxIOilzfCs5ZEUzVDxyUSxuX2kwRUY1Y2hEVT9AcE9pQVA1UzIwOEheIlMmd099WyNKSzZLTyRReVFaVUpCcjU8eTRyZUdWbzhCIV0sLyZ+UWQkMzZPa1FOL2BiZUVOdjVwOkxBfHsmTlIkQFlsOzddPnx5I1hha0t8''@;'; put 'put ''YT9WTXhlZDJuNkJ0I2BtWGJQPUtleHBfb1o5Ml5LNlI+RlFsYklfaVtvM3ApQylrMEE9Qi9UeWNkXThDUTx9NT5ffDEqNjVGITp4U1pCWEsrRFsiKHNbOkhhR0hRJE5BJk5+YlIyJFlCbUJBPWA1cUU7JiVVQV5hUUt5Z2lCQGFicVExL1V2UVohQlFHN2YwY09UKz9xUH5KZllDVGlFflVJYz58''@;'; put 'put ''O1EwPn44Km9FfUhJbCk3Xl0+ZDRDT2IjIXxua0hsI0VnKDJaJCY8SlNdNHo9NWJZUjV1MHxjU3kwZEZEL3R+OWI6b0YrbSYqIiRzL310PV8pODhKO3ZVNV0rUHpHIV4rX11yW1ZlRXN6JlRCJjZOfCZpem5Pb2YyWXEuJi9Wc0RPSS4mWFU0NEV5Q1ZbT0I6LnolY3cuYl4mdnlFXkVmQVgjcSpy''@;'; put 'put ''N3NDXmA1RFBNY1AlKzA7RFlselRxVWlOaz08fW83cktBIWNIe00xYEZfSlt5Tmk0cjVYQCxpKmE4Lmc6OCg0I21kXW41TFpAYkBKdHlbcUtqZGNMTkxSb2M6UWEwYFk/c3Z6MjtOckhCTVV9andpe2I/PWhbRVpAT0UrQmFbTFpDbm1CJS55REg/KFN3OkVoNCpNO0FHSlU3U3gjeGFZeHZiSkhF''@;'; put 'put ''ZFlFXkcid0ZNPnRqNzN0WSNldjJRKnxJM2YlK1VoL111amJPLkspJVdkbnFleXBOKUJXQTg5IXJMM1NTPTIpbHY+Pi9XTUo5SEkoPHBBI05ILG80JG1OQCl1WUxWLjBGc0MsOXhQfWZxXkkwezRzRjhwRTBRaTBQOz47cVp8WkBvN1kjJHlia0o+L2FtLG5XM3smMEVOeXBGNExeel8uQmw+bDA1''@;'; put 'put ''W15VYGw3IkJmeyErel4sUC9nJXtGeksyVVpvaj90e0Z8dUAoa1MmcTBrUklCKTp0ZVVKe2xGeD9YMlV5akBdSzlIaiVKS0JmbTMvMCkyOkhZSCZrZDA/Z31JL2hQYFhKZyhkMjFqbF50clVMcmpSdztofUElMEUjSF5PInRwN3xpM3xEY0NwQ2lMKEE3ZzsuSD5KRyZQKEVBT0VQeTNmKTZ8ZFp8''@;'; put 'put ''XV4uPkdQUSUuK3crO0B6aENjRFNZaW47JmUvMiRNWW9iUSV1KzQ6MVdXL0ZdUX5KOSljb0tmJiFgQHciVWUrJWhPMFYkLHpmJiFhKV0oJjYvIWZmd1l8Xk1qOihCL1A+VDVEPUw7KU52OGhBbi9CaiRyazlsL05uTWdJcHU5TWZLTihDNSohO2IyT3tiYXlaW1YyazNYVkcwPzNdc2RNe10wQGVN''@;'; put 'put ''ZE0kbTpuLnlZOk59SCFveGI1MiY6VVciNFkpL3d1czJfYE04QEpAQl5Za3VXTEpeaCttPm9oeXI8Y3tjVXNPREMqKGFGLys4R1FqdjIrYnkpUTF4X04wPiVub3BaLyhAbSFPd28xY0MhcnRSLjNmbD91L1N5WGRsbj9DODRpYCJFJCx1QldUZWVFITUrPUxJMCVHOnsyO3QpS0A6RXc8TmhBZkNe''@;'; put 'put ''eioubH56RC5tXUwuSHlUYlglKj49Kl9JaSQwIz14e2UrbCQzaT9fPlhhd3NlJlhXSHsqfj5RVE9TLExHbThsYWA1UTsraW0/JmJ0WnxnNjRVLzRIYEBqc0YxbVlLVyJoRDVwOVM8RVh6SjhJNTdmUlJzTGY9Tj5wWjluKWNvR1llOVlVNmJ4MFooR3R3KVkkVXReaSxWdV9BNS8rZlhodylNYWI4''@;'; put 'put ''bl1jOyRKeGtYLn1YRXNCe3RBLCs9UiZCIUU+WHBbSHJZTFRZIzdwW3ZfeSlPUHZmRyFfYVJLLFtjYz9mUmBPfWg9Uzc6Nj01V1hOe0RCcmVCNktgeXhLR2w+QEB1b2hXP0N8RjU6JHFzYktXXTg4cG1VI19uZTtmV0hAI040T0JeKD1Nck4qX3NVJEpRMDhtSTM8JUVAcmBubXttUGRpIiZGRXMj''@;'; put 'put ''aG0uXjImYGtheVpPUE1uU3p+O1YhcmJ0M2svZjE2OkhyIkFhT3M7RS5NWlovUmAiJkY9Qj9rI0tOU1ZYTVNKZntfclpjamR2JklOd0YuRS9gUVJHZVE1TXM8NU5pbTEpeWg5SzdLYGNMLFhORmVLYDBMSz9NJmdzfDROY0JqX0Q9bSVdITU/XVRtK11dKkJ8UzVES3Mke11ZV2lGRUBsQGpSdS5M''@;'; put 'put ''REpPR0J8RkEmIl1+JSMlYGBIRmZyRDomTzI/dUVOdXN7TER7dDlpKHhaZWUoVyZ4Xz0sNyM2XjRMejZNOFdAVkgkNyQhQD57ZTZAKz5EUk4/e3JVKjVDSio8Yjh7Q2psbCp9QDNAdyJ6JHhrZkd6YS8mezhzfTdWY2ZbITJjUjs7N2xCfTtTVH5JQzdXSlJubnEwNEh3OywkJFI6dmh9ejxXWEB1''@;'; put 'put ''RkYiJDhFL05yUnNNeVh+Pz40SGptJnRCeTJxO0ZnbHZvN0NPKWJ0QVVMfmUwPCM5Vzwqfk11TXJRaSRrYWZkUWgmZChqVFYoU3xXNmZ9Qj40KkJwKDNET0s3VkddUVBqWCl1VXxEMFVWdnR1VzdHXyg0YkB7NVk4ZzNddUM7PUNaZEhUbVQ8US8iWW16ZFdZfmw2WyhUfU47SHxVMylPQ08oTTFX''@;'; put 'put ''RHgsQEhFeWBzNEIxRWpiMCZXRnB5My5sOl4hXUBPTjtbWWxmRmR+WWJSJTJfS2IhQF1yLGJTV2ZZKEVjT0gjaVl4bH1jSFI2MEBvWTp6MnsxOC5WSTIpU3VvcCNoazJOfkNTZDlwRVc2WiMyZDFkOXlCMUR7QjdJU2RnVztyclpXNG1udHd4WWtxfVNBcDxnQEZsUFRpfXdIMFpPYH5dPjQxbkBz''@;'; put 'put ''Li89RWBbfj5FN080L2tofT9dbi5gWEZ3T2Jlbjo0UjtGX3lFV3A6OWUre0wrS09COTJoKlJyK0tDKiJMWV5LPCRKI0gpPTw9KXF4dVF2dVsqQWE1WWJYT11+RTM6QH5wS2c1P1Y5NF47QXEoPDp9R3ksUmkkcGJLMjwyZiF+MClfKChDWiNLZlpNNHxEW1c1cjA4eGRSWTA7RER1eSNwTHBNdyk6''@;'; put 'put ''U00iVWYicCNtOC5CV0JDK3JXZ0AsInVZWHsofkwlRDx6LiZ5al17fmlCN35GQmVIU0ZbJVlfdEdWaitKakc2dSJxTyNVS0E0I3cvPUpjU3JvPkozKF0pJFo9eXJvWUdIckxBYW0iPTJvWkBCOFosOkdncUtOMnolT25zQS4kMn0yaCUoc2YsNUNqa3UqeEI7Y0xXOFtRUVYsJGl8KDJkJFRHVDc4''@;'; put 'put ''WXoqZSpSSjYwbkAoc1ZDMVA5RX1OQCJIMTVGfDx2UkFNSEhpMi8xbkt2RFApXW9WZzhOUzklYUJKdlQ7W3ZxSVBCYnN9PGh4eE5gXjZkTm84Oj1QYj1oQzRHIW15cDxxTVtRZSMrNyMlUSNhRyleYHw7RzR4MDk1NEt7ejwxWzpxWUA+PV5DNlRDe0UuTVdtaVBjOClEazQpeT5kN2RkbEhTR358''@;'; put 'put ''eWxPcl1tKmhjd1RZIW5HRWs0fDRkezh7OnUzT2tMOVM9I048aTRYMFBRMVMySEI6MHk9ZntwTF1mdXwkZixTKGlOb2RIYHsqXldqYk0pWTg9bDJCayx5K1tjWURydiYsWEQ3Kk5EcktDSj9NOzF+eFgqe2MmRWolVzVDVURtRXo6I3koSkgrKGhzSlt7c085QEQ6cGd8M1lWc2VlV3VDalFhO0g/''@;'; put 'put ''LFpDO0hKKjZDeH18OT46c2o3UyIwWlFdUnFlSDYrXWh1USNhUCJRLj1xQ3JoMkNXe3c6fSJXc1k3JG03eWl1RyFEZE5TPHteKDdvNGJNTzJHXkxUUnRdRVAuM0lVMmo0T0c8OElrYCYjRHp0byl6MztBM1p+aH02PjU5WG80Umc7WmNQa3whckdEXiVdT000dGRWVlEqS3h5R3hEKXt7LDBAWzgx''@;'; put 'put ''ej1idVFOSzN9TGxYJV5dRlAmUXU+XzhaUT5WOmVfcD4uaGtncExDLmFXbFVLTSpRP2VFQihoTGRzSXE6UVRFcWpELE5YOD04fkc6ZyZ6dUpANzdtR0w3eHFkbylAaUN8R3EyLDtWVkF+ZF9FVVhETXksYzV8WHJoXitGfSVscEpgfj5mInNgX2RlQzolX0BnKH5WW0tILjlQdWY3cjdCRCJRaWo3''@;'; put 'put ''TDs0W1gwRUljc1hIOmhbUFBuTCRAP0I6UC92Y3Y7d2lHNl5JKiYsVypTaFpMVTEsMyptQldgYll9YnA9cT1HWEBDKXQ3eVpzP1hCeipEbmh8SW5BPiRrQV9ROHxoeCpEMTtLSX4yLjFjTGowPzg0fnRJaFs4Q1tHIyV+LGE9IUR3USp9aFFjPEp8XTB6NTw7S2ZhQiRqVVExW1ExP1RgbEl4eiFG''@;'; put 'put ''bkJQZDBgL3pFdExVWSE5YTdpSTJ5TkM0Zl5IIVNUTVZDO0IycT8qaXkoZUI6bSxEcXZEU1lzLllmV1Y7Vn4+Q2tnTXg1SCtCSng5aUNWN1okVnRFYC4kJiR2cVsrRyI3fUhWcWQ6aFZiKX1UYkl9KC41Z0tqSzpiRGQmYSs9fXRkbmlhZCVYWmF8anosTGdweFB8bD0qeUIseVp6ZWlPK1d0SHQz''@;'; put 'put ''aX46UDpYc3dATiQ5cWZDQEFoLjBIOEYkKW9JWm1fKyNIY1MwKzZSRnwuRShFcyMiaTMmWyNHTlVqPUhgXUdqTE85LF5hRzxtNEg/aEpxZCJGdGc5JHh9VGFqJmpuUns3YXpKXl9uW2huQ2wlTGRVYFZKWm03aVM6LkxVX2UyNjZ0YURLMGJmI3ZaMz1Jcm53YCNFRmkjYFpvZ3lfblV5WT8lNS9u''@;'; put 'put ''SHVeUTtiI1AuJCUzayt9P3wuZHNbe2F+MWcuPmRbVkhOcHYoYi9DS0kqRnZxajZVd1BKJEs5b3g9MUMxNEh7T05hKSx2OGMpYmlPe29SV2okR2pXdm5GWyZ1dlQ6cVEyPDd4Sz9ieiFEa3BHKjoyNlh5SEZYRWlfRGVeOVtLaWJEX25TQmAkRDJZLCl7T04qLio6KCZeQSQvK0MmVX1aTHdsKXVC''@;'; put 'put ''TH5aSiFhQEovSmQqSGJPe0JqNj1CZEZJLGNtVHh0ZGU+NmNjbTt6eT16dWBHXVN6YTR5ZSE+YmJ7bEE6aGN1bEY7X18vRlB2cXh+OmhTSk10W1slMmVYayViKW9ZY1t3WXxTfCZWNm0ydV9FI0YlYF4qfjhuQi5UIjhQYVU0L3ZNPUVPd0QmNn49XyFNT0Yua0tAUFpgPXRpVGU+KyxAdEJ8WGF8''@;'; put 'put ''dm8kO19AKlFsUVB4NntYSHtQXmNTcj1eWGlqUypGflFJJGlYLmkxZzNrbWZuQlArYURJXnhpKEJBaChDU1sxT3JUS1IpVTFoSlFFPCYrITM1JXMycXxRNnIlcSNpNCpSa0Zbe08xNGJXcDFjQD9hUCV2T1p0ZnlGNnhkJDE4PGE9SlBMXkpDVEMsJSU+Y0t0NF8sayldNkpkJHE6aWVJKExWLj5Q''@;'; put 'put ''JjJnN0ZxUV8pdFNuYktqVm0kJnxeY0t3PlBrbEJkNCZPK2FvJCVVKmxpJkM8LmFHcTIxLzB2Qns8a0xJM3smMitRVTRGaGhPQ1BONDhRJSh6fiRgdCREen5rbExAcWghIjdnI3FgV0NYcXBHXj47fkhWUF9QJDhLMXFOTGozLz4pZDdHX2BDbGwjLzt9UGk5KzAqUUJ6Ym1QTT91UTw0OkhOIT5K''@;'; put 'put ''fHBuMmVjeExCJHpfOUA8bCNpdk5JOUwhQikjU25FeDZFYF1EP2s+WDM4MnZFXkUwJGJ3P2FUa1h5JXsweWFwYSpjQCwhL28xYzNHRnM6dXRWVzY2eClzUiMkaU5sOSRZU0goO24oQzFpPlokTDR4L3pnQ2NuUVc+YFtnTGokLit5Uyw5UVFtVUJnYXc9bkUpYjh9K0B3VX4xYlM/cVpGcikoZTti''@;'; put 'put ''dWtMVWE/P3F5PyYkK1RxfHBbeSxdfmc+ez1kNmFIVXUqJVZEOllXYWduQ2ddUmNDWEhuZ0tsWWdiVmh2ZT56bVo9WjpFUzV6Pnlse2s8Y30lIi58NXlEang2bT1laCYzQXd8cGQ1THRbajpAMSh3TmBGWV1zY087bzoqLkFqW1QxP0tNbzZLd1laelolK0w/SiRvTzY3TlUvZyNNRkFVKVhIZCh8''@;'; put 'put ''eTFxQ0IwKjojMjgzQFNmVV9zRWEyZytlKSRRK3ErYSlTNTMudzZ+aHxeOjFUTExQeUBgRSx+RCkhO0xoS1tMfGVrLjdYdXdfOWNDS3cjZE4pUDklNkdLaFI3RVQlO0d+dUJfUVh3YSRoeF5XRE5JSSZYQzg8e3hRXXBeND5TI3okOjQzQ0spIkkkX3MlV0w3e1dkRmRoUF50blBdTVh+a3tuUUF2''@;'; put 'put ''YzxCd0pvLnBaJDVtMk1ZMEAiI1QkOUJEMXU4ZioyUklxIzN6KyUjKzJqRX1Td2RWKUddfntGXkVpYjs2K0g+Zi5YTTw4WjtwWWFvblp9UHEhNGEjSWxtXnY7SjQ/XmNPJHR2JSpaQG1kZGBNMj43X2lEX0ReI0U5KXt5dDR5cT4qOXo8Y3BaLEVlZFJJQG4ocnRQJWdPV3xzST5BTzBvfHV9dDJd''@;'; put 'put ''PUt9OmpdY2IofV9MeT88VSRhd0lhPzVbM3sjSWpeRUZufD9KeFFjISUvIz92QHpRdyV4LiEoViY9c3p8ZE5FPzxgaj0hdTFtVn5BW3Uxflddb2ldO1V8czRlWV9uYmhwd1J+fDVFPSRMV2g2YEIwfj5LKWZRP2pYc05Lbm94Wn4qeUE5XTw/IyszaS5FNVJHXyhmeGZ7fGAhOWd4bVZnLCslZ2Jh''@;'; put 'put ''ZV4waG5ZN3YwTy9me29nUVQmVylNSXQ7bmMqTjgpVGlONFJVUSwxeGxPKi5OMm5kWU5gQSp7ekZTQjRGI1MmVihzc0NaOHRFS3t3OTVQeEt1eTtaX21bSXVWZD0vUU9CXSsxeFhnOnB1LGRvS1ohKClsV0NmfVUiSkN9USFiKVpnODs3bXdmQGkveyZ7VzkkcXB2Ik9HPkFATWJ8KE1yQF1zSi9p''@;'; put 'put ''NlJNLlVwO0trO2BDQT82P0JSJVpHUmNZK3VwVlJfel9FNHZaMkBFVCpHW2ZfPFhsIXR+SEk7KTUwdHU0WktKdiw0eDRWPmJlP1JQNUk0aG1BMm06ZzQ4P0ZZTTdXXzRmTnMqUVRPUzcsNWhVI0Y4WmMwZWIqTTAwK1Z0W1ZjfEAqWWx7dWdBZkJuKHRHWDgzJTJrOzAkTm1+VldhdiRQe2ptS0hS''@;'; put 'put ''OnE8ITh7OFQ7ViJrKypoKGAsNF1QTnIqSyk3STJ0fVM7JGEjYDtIUzBdOTMkcE1gQ0I9dzQuTUBNQCQuUzIsRzZPIlk+PyZFdjIsYFkjMDFhcVZQTkc0dDA8ZWp2NGdBb25HIT1za094Rzkyb15Len0yJEMxJjklNG9bdnk4YzBfb103RUQoc24/b0kyR3hzczt3NSE9VnUkQWtITE9XP3VITnFF''@;'; put 'put ''Lzg0bipZN1tnTilIQUhic0g2SWhMNS4+OnNRPUI3cnxIZ3lrYWEwKjdfPjRFbl9OVChzYVYyYTRJLldMNk8kOj5QNTk/T3RhdnheT2M8LF1LT15pM21VNHZmPlRyJW41UjBVRWVWW31NZHZtazpxK0wkeSVhI3hFaSkrR0JDdnVwQDcsbk82ODplSjdmejNZekQ0N2pjdGt3X2lLU3dgYztoLkZy''@;'; put 'put ''VXUhaE1nTjhbW092fGQkZGM/Ul0xO2M3fV1ybltdPDp5Y29nRShOQ081UkBTanY8YSt+bFo7MGxNKSllS2JsTisvcFgoQCZ0JCFGTiZbU340ZGtlbTxQbX1LIVUkKnBmcHI0TnQpYEN6PkUyRzk7TUBHdmVFW20yVX5STClgP3pHdj9WPUA8fjIoO1k3IzMzOmFeWiRIKjlqaTRncGBbaTVmbX5o''@;'; put 'put ''a2NuYkBNI0I7M3RqPCtrPWRjK0RMJFNGe09rPXNybWlVPWFkajRaRlR9O0pBfTJCIjRqV2xiO0J4QmVbMkVtQSNFSkVhJWEkPkVaYENaU1JkP19YLG0zTiEqMjhwUz9WNypIIypsK2NXKnhAX1VuMjd8Q19XVTlAMmhjNHd8TnRCbmBJcTlqPk9hQXYyc3tgJklMZmt8ejtVWCI1Xkl7MUIqY0xp''@;'; put 'put ''ejUlNypXSk5VQyQ/M34pU2AjbG08NVtlWSheTV4+MlVjLzAvY2A1R1hMZnJdREdIYHssWi58ZnclQWZZZTIrfkdnKTR7c31MPzIwfVp3UUVoQURLIldrWyxvZVZ9NDA7YF1POEpATkptO0cwSlNGWzxibDtyX3I1XiNXPj5QM0pqezlwRm1dKjtzSihpd11XSC9yOXhNVShTT2kqNE5ILlg8YzQ4''@;'; put 'put ''YitLKT1Pc0x6dHo/aSQ1THE5bjN2a2s2VzQuNnBsfipyWj55UlkwZmhEQDVVeSMvUC41M1VHaFh6cXs1YWMqPTpAPXdpOlJdPnxSI1tvKTxAYWElSD4jLyRuQjE0el5qN3YsX0NbdWdrLmpdbkROM2Q8djl+eDtzcF0hXnQyQjUsI3A2cXk9fGBtam11dShpSj5KPVFUenRwXjh9VXp9WiszalAr''@;'; put 'put ''VjkmUF1NclE5alMzUF9pdWMuQHAjLGZaTS46bTR6QXcvRWtNKCE3YGEyO2VeYDVNYGxXRE8weyprdVA/ckhXNExLWVtXL2ZEPGFgT3xXQ0hmZzRUQUswbWh2UnM5QmQ6TnNZUnBFSy9xL3lyL1c8aGVrKlB5YlRlO2p6QE9bejM0Xlg/K2woWnVofl5bKUFYVjZ6VkM7Jm9NYDFiMGRnfE1QTTt1''@;'; put 'put ''fDAjbDFvZ0lATjBMIXtTY3hFZjFSWzhfdndVZix5LGYuSGpQIW9iZVdVInI+az53YT5SO2dhMyVMVihaaGM/VzBJVHNEMyVkXnlJMl9BTHNMdnx2OnNwLDF0P1RiYn1GOl5HZDhjKlNVXSFlL0VaS2lbVUQ6IWglL2F8KjZtRCZxLC41c01AcFkld3VAO1Bfc3YvWHBJMzVDUElIUFYsWiMqcSZe''@;'; put 'put ''NFl7SSMzfSlsSVZBOWtkVFVTVEh+O1l2WFYsL1VhSXElTl9ZbH1AaDRnVFVSajVuNWBuYiZFfjBnalU9M3pKRl1yPDBbInQ4UUB8QF4xSFRZRWxWPDptaTdrbX0pOGxOflRgYFd4dW0+JSIkNzxYfCZuPmk8REk7fVBsPV8rRDJoVXFVJTs8O0w7KEtjKTxtX25kVDlJMmVaWy9jOCVdVEBFQkt5''@;'; put 'put ''QCw0ditRPXRHKzlYPlZtOnZdK0MrbW0kXm1zbVdERV0xc2BoUHkyUlQhVSlRay43dk5fa3Q2Wyl9ImV3YmlRS1pTWjl+V3B9el51eXQwbHsxIns8UnYoN2QqN3FaLy9wTGJdS0R0P1JzdU1yWWwoLHw8aXhHRjRUS2pYWTMldGJIVyEuSltMY0dvSH1xfVZLfHU7SWlMZHQoXkIkX3EuZUZpWnVe''@;'; put 'put ''OEEoUllaUDM7Iz1iL3FkUkpSa0h6an47b3VoUFE7JSV3LjhuL2YuPkhdQkZRQUFzKWtTMj9uP19YXz1XXTI4alNRLzVOKWY8OUNsVXljRWNpIn0yZlhSeSkkWjZ4O0Qkc0tDNjpgNVJ2bUs3fVZLbnBHPVdLUjxjPF1rZ10wLDJ8Q1MuQ28jZ1t+dzJTVnh3TitgQmF0SlU4aiYkOnxxb1lTYyk1''@;'; put 'put ''UjJhb09ROitZMldiZCVTZFdCNll2Pz4zfnFMQl54S3clSj9AVG5BaSE9UjlgYXBJJHo1TFBbJVgyUGx9KFRbJkd6aipVMEZdcEVQJl5IVSRaOGUwazU4XW19Z3Zod2lYeXw/XVFOezRALl5pVlcmImU6bjAycz5NN2ldUDclWio8KERCRlYlUitnbXdVNEVxVVhCdikhUmlSRHZKQGpTazlGbVkq''@;'; put 'put ''QjdwcjUlYSpBKVAqUEB6a0E0IzhifmNUSS5ze10+M2l2dTFJY35jJXkvWkJ5d3xIJSxVVz4pWEV9cnQ7MVgmMDZsYy97WTxiWUZxa0R1WlY0eDVOKjJXaHI2dihSKT4maHJxZHx5JGR9eFdMPFBhMGBiVS9PUVE+SEBRPzRBVCN8dkc/eFQsazFjVFYvIUJrelUmaGM7RXdwMFAlUWMzMEJYfEp4''@;'; put 'put ''T35JQU5YYS85NDF6RVRKTD0ycCNVVGVbMVJDSXdTMHNSSGxNeSpKOSMhKkpCeSJxfEd8WiN5OFdvdUlwODU2MUFoalFEVlR6ZXNreXVJRiYpUU53Yy86RCgjfl1lfChXM1FeIShGb3tycjpgTTB4elhXYWtYR3VdNEMvaHlaJUVbQnAmKCRGUTNRL3NZOSwoVmZAUjtyLkljU31aSndWVERrZ2xF''@;'; put 'put ''N2dxZjVsJlVgNnM/R0g/QFcpYmc0OVkiTipGYl4oUk54S3pFZnVKTXtCYWN7UXI7eCxLPWFHWThJbkNgcXk+WDciRlo+N2JQQiF1R1REQ2QxMkJTdjk1eGs8bWBUVH5XOlgxTFc4Uj5lOC5PeXxFdmgibDY/WllXQ3wwPVZVdDl7OTl1OnBpdUhLclFmLnBJZkVvYk5JJjZ7YTd0WFF8RGdlSFpr''@;'; put 'put ''Y158NmJneHo0SVJfMSxKZnQ8OFBlWCsxPFJeaFg1TShDVGVtMG03dXJ2akohejgsIml2JnJZJi99XkMobnVOMWM/Mz1PK2NMYnleV3lYKVkob0dHVFZ2RDxNZXhWJm4sfEN9SVl6SVhEflsqLkJuXUkpLztxPXVEYVQwQkFrPC5RRnl0PGIiXX14YjEsa3hRKUM0MzhPLH5afTA6S2kzVDN4NlNj''@;'; put 'put ''Ql5mM2JuUEBZX1opViM6OyhnZ3pMSmA4YDdxOkUuX144NjskUkI6UlYyO2Q1WllSe1Jkb3NYbmBkSzIkR2RXI3UxM31TIXhvT1QyOCNVe3w4aThxWlp1V1thaDE/YF1QdzJCZ1ZJQGhAYk49bGsvbm5gI0ZjRXhsMVZ7UXMzNmxyOnR6aSVMI29EL08oNFBJZG5dTm5vNWh9aD86fihkXi4jPmJ3''@;'; put 'put ''fiFsfm09QkNzbGpOezNfZDFhMUlbN05XQDhpekVhQkhlZUE+eGJpLnNyY35lVm8+I3BYNTw0RUV2an5ATV1aZDgwT3p9YG0ybDF6IXosRjouUilUP2hrdWJGOTkjejNmI0Recj16PyM9K0tgYmMqPDNFRTxGWilja11LMXxGZHlncSRgQS5iXzcuPDReYCZKJCFuRExuXXhBaTo3Lk9iJk1qP3Mk''@;'; put 'put ''PWB8RXk+KGwoWW5HNV5ZPTY/Ok9de2xjUTBXTmIoQVhjVXZ4In18Si5WcShTLmVEcEtrQX06TCt9aVIjV2w8a2FeKGVuJjxqPGpvL3Q4JCkhbUtnRE45O35SVCpTYUJrMDo3Oz85RXtxQj8mMUp1Zm86K0Nrcj5XT0AhdkBaKFRUMGlxYVgqK0c+JmZac0J7UWNMWVFxZ3VEVXE1UWVPXigqNjFn''@;'; put 'put ''L0RNeVcjLn1eL1ZAZThOe3BxXiJ9RW5vNkBleitmb0habFYjQW9lXS90RUN3R1soPDdDRXwmRDNpbHcoYlVkbGA4bnxkUDdUQUEqW3N2S1p5RGFIZiRzfDNJNyxdRVhlNHpncitaeyh4fHJZKVhCMEpDdV1GIj9hTmZLL1dEP0dMQjdjLkU8dnI/TVBaZSUkcElYanREbUwjNXExc3c5QEZkVUd8''@;'; put 'put ''UltPbFpqL1pdXTsucz9IaWlEIjxiS0k1Ln4pOnN9UHhdY0ZoPWZoPXJbPWRxNzpSTUE1KFA5YWImdGpYIzI7UDBhTUU9KUoqLEJgfC5bUjNaS3VpSVgxVF1UbG1sYGgrLGwqfjg6emgpWHFRU1ZDI1deYiwoUSQ/KHdFfjB2bmJecGZ7Sz8zN3g8byQhWj9fb0w4QVNWOmJjVzZOWWk3ZjBscSRC''@;'; put 'put ''dDFhbDVqYDNeVDB9aWdDP3JqW2lDNy9Sa3JYWHZhdm0kdFNDQi8kPDZHcl8jYiZKfn02aGJmPyRLZzc5PUxdKFRhYW9mZXVqPFJGOW1iQHQ5WiVVczBiT2BBZ088T2VdZUlFO2g4TiZ8UW1DdTssMFh8PjdjMys3RiJwP0koRXxeU1ZqIjI1bj9iLD1PNyN2LitCLFpqeklZPnZRZF89NktTWGZL''@;'; put 'put ''a0x3bGc7SkhPWTosRzhDZD01aVI6UixJKExNM11aXWhFRTw0KEMwamsqSGpdOWRtZ2tBK05BNTgxeWhDP0dzPUl7dkoycTFlfCZ4PDZSLytFIk16VXd2bEY3YTZ2fnJYMzVkOVl3WkFra3BgW3p5SyFXX3B2UU1vTDRvVmkjQ3pENV1WW3FwVD5WcTdXezhadCtOJDVoI09UUnJLTipqM3lGejpp''@;'; put 'put ''VV5bZDsmM19UfGpaPk1seVlVWFQmKjdvNWJ3UXNyWGRLSzpreiFfSTZeQ3c5cVZTcnB0TTdCSmpkb0BDS0gic15zeXx0QzlSelNVelVpRyxvcD8lPWkucUZCSiNVa3xocnhUMj8xWDFjMjp1VWl0bjh5d1VUTCosXjpyY0dOSD0sKV5ZIlFzeDB0KE4zayF9eyk9MGMyMyh6YURjNF9vWGlPUikr''@;'; put 'put ''ezokRnh8Jil9Nzd1S3BVNmdabyo6OENSU30mOCY1KHg8Rkl9PVQjVmMoa29vV0lzQTdhdWh7b2RNTlZDTmtDeGk1cD4sZWB6KDQsXVE3a2ZIIWJGezp9LjtRSjxRUG5UdUghZypFdGRVaT5VSU5mQzpHeiEzIU14RFtUKkE/PHhpRWJxWjpkQVNIWEBkQiQ+KnpvK3l+X1hmYzgrNlpJVigsLy9Q''@;'; put 'put ''UGkoR2BGeilIKWVHXlFRa0wkMnRGIUxlTXZebThBZkA1TXsjOzwidjEyVyJEYExyXl1mNi40SHslRSV+L3VvRUYmT2JxL0RPPjVNQTopYjM7TC8ie09NXn50NjZoLmdnSSV4UyxMOnloImV2SHp0WSU9WCthUV5RTVFTTnlkM1RrSiVoU0QzUilONStjSV4kXV87bGdiR3QuYCFLPEo2TmokL2FC''@;'; put 'put ''YislPUtmU3tuMUBJYV9nd3xeUVpHa3coV3ppU0JKSzZqViZySm4iNjx4VFFwMCpiZ3F1cjF8PTc5QCI/S1M9eUVvdU03Ky5ANkl7YUBpeXlDK3RfSm5hOmB+Kk01JHVlcWBDZTtaRVJwRVVxJjI1S3AuTTJuVDYmcVBsbzZ9SDB5a3NmenFZYD5jZ1U2ZTVQO2NpRGolUjZ0JU1yKzxPUyVjNE95''@;'; put 'put ''SURpb1VFdV9UP0wlfj4yRVQqS3prSV50IUdlaXtFO2l9Q1dHSyE1fi5nRClAc0BvZW9YKiNoInZ3XmEmKzZTbSFKSjxGV0VobEI8X1tMLn0wYDN9KGtZQC9lQCZLYDJxcFNmJD9fY3RvJDVHJitXd3BuejNOL0B5cFFHWjhMVm8xRStDN3opaTwwSDE0P1U9IVpRREhxPk9dZDVRcS8pJFJ7eCwh''@;'; put 'put ''M0lON21DYi82UiFGRUR2MD1ZLF9pUE5kc2RYSUlBaXU7M181JnVNIkFeQVJHM3QmKSRJJHloQnpHIi5gTSwuMT5HWnZSSTZ6VW1kXSZrVy58VXR5eDhkazROfFNAZlpbdGo4LCFXeylVWXpDVzRCI2R2WXFfeFdseTk7XzJSI2dmOGpDKWhZWn4qR1ZJaTttZX19bD1eND4rRn0jM2ZSNjBneTJn''@;'; put 'put ''PGIvRT41RGIpaUFRIVF5OD46SFl2Ijt8OUpNUDdiWE1VWDl8anpXIVtHW2ksIWhvSmchLk8saWN9ajZ5RzxjYiNGb0RKOlA2UDchRjwqLFR4M2JoRix1R2F2dXhaY04/NSVxSls6cFkoTWE2Jjh8QHtsWltgd1RtWURaL2wpXiErMW53LlpLMjM5NFpGbUFzMzs6cDRuMlElKzE9KDVmPUMkNypQ''@;'; put 'put ''UV0hMUdRTHNvRSlufkRANlklQG9rciw8USQlU2F0cSZLYjpMZWBGfjldMkdmJW5mS0dVemI3XTJxcC5bXj9NTjdKZl4rSyUrNDAmSmlhWzFLImpoKD1pbl1+LjBzdXBvT2cvZTIqKDQsMV9EPSNSUVhDfmBTWjc7SW94UFNCOzBrSThwRV8sfEVAYTt4dCspO2I7bGsuRHBBbVYjRURKMT5sLDwy''@;'; put 'put ''JCl1YE5vKDMxOn19c3lCfTcuaiEyeVt5KTROSERCXjNKZCpMcHo6b1MlQDtUOlJxangwdVU+JW8rJGxAT2F4eW4kOnR3KG4uKkdeNDpXe1IwK0U8QVJ7VWBHaGQ8cCpfR1ohbFhTdl8pKSg4KSlQSXllUCRjP2ZyI1g8YXZOYUk6WzVxPUpPXXt3K2tgYCFHNmk8MTo2MSlWQzU9fkd8RD40Pz9m''@;'; put 'put ''UksqV1Y3Z10/YXk0TWBScnM2RnVGdjJLTUZLV2hiQEQ0RkVbQ1QhLileXj8kQjFYM0BPbkUjTz1IQTZBbCVKTEVVfldyPVIxdWIkT2RoakNnbCsoc2haOzpQT34zV1V1JENUNmcvYFBbKFhTaE5SJnF1YilyYixAdWdMa2QsQzojQWBLY2YsPyNfYzk3MipnWCh0fD4kXkZKLDgiVVR7LixQZyxh''@;'; put 'put ''NGN0Ri80NFgkOVVRKDBFey9LeC9MZ1lqcTpxXXEuYFtMIzVSMj1IWnwvdnhUP1Awb2UobS9MJSJLKVFYQEhoWFt4fW5WbWdsfTdEYUlrQkAmK0JdSUJIMFo3TXxXUG1KbTRfQEU/fTYqI2huPiw6OUsqaTMsKGZYbmQ/YmQiKmMyV2ZUakR0RDxOfUVaNyZKbDlARnJoXXwoOGQ8LnYzaHRpO1hN''@;'; put 'put ''MUlpPzBtODZlbWVSeChdU2giNlh+cTEzfkxUJXE6N0kxfFFsdUZZJlovQj1KZCV7dXk1Si8kIVZbVD03V2FAWDlsQkQlKV1yK1dNRH4jNjxZOk5qdXZJK3xSX1Iye1tufmRDbkclLnd8KHMjNy9WSGchRX12M2pda1JAPHxrQ3FqX0tWMndVNiRHLitKd1F+QzJsK0tkekVrXnpqdWNxdzFKSj8/''@;'; put 'put ''N1l4bnhrUDNKRl9hUXt5YjNpISVHdkBXMFcmLyx1PUgwfjxGVzw+V1VZfkt0em8sMHlLUyQ1IXQ/OVlJXzIjNTIiL1YvZ1Ika2RXXWN6OUNyJCpLJH4pOTc4RXRVbjpwcyhBby9EJTZyUCVzfClUQlc7YXN1SCk8I2tLdU0pS182KjhpT3pAbGJ5eVs1MTlqXmt+SU90TyFRRVE3WT5hPyQ8SWYs''@;'; put 'put ''PSZNJSV9Tk81IzI4QnFkQnY8UEV0QUZ7XWN1XU1DWG9wNjo6ZSsuN1R+ekI7QFVVakpeX1RPOGx4bjpPIkY+eTVCVz53akB6Mlc9TS5eTGo4ZytEJWR0Yjs2aiEqdUxuWXFtO145WWRocH1SbGJWQy5EZXU+JHp9O0N1WVprW24qY0s8fX5HTTprPi9sdmRAYDlXakAwfCIyWjg2ZGUxalpqRSZB''@;'; put 'put ''WVlOXTBNR1FxITwuanRTYjY2ekJDUzMxXyhxPlQoV144bXJFNiVONVNRUGlnKXd3U0gqNFRRYXI2N1pRWG1NdWkhJi5vJDxidSFOMVpVcWJkLjFeS1gyZWBdU3tUYlFdXlcoLHxTb0h9VXI4PSxBTXM6Wk5WcFY6VCV0WXJ3Yltnc2Q8Om1fYXs8eVhXVCVSb2BOTCUhZkp0NWttMXpFY094K3U0''@;'; put 'put ''XSt1ekNzV35TS2FULEpeZTQ1YWVjNEwlcDxicT5kTnBxOntQdWNkInNje35+TjViZkM2Q2tCVnxvKSQyNjJpN3hNKil0QX1vNipHTHhYSE0qU30vQn1TdCkvLmRycXtxKCVJbFRSeVU2Q19RQk5ePHo+RV1nZTl8Y09FKSFgKC55REleayVfSDdfY1VXbnxxaWlncFYiUiw2eSpCKCNpVnp8VHI9''@;'; put 'put ''elY4TFpnMH1Pcm9ocSJlTy90OzZzInVgZ3BkfSFNSS5RT3BiS0xwVylhUUNaeX5QITFBUVtsbGlCZF9WcDhjOV92JCVIR2BYd0c7eXdxLmVLQUVJTGFtWlF3ZF9bUjRndXEhNTZAM3UlPkZnci5wSEVVenhARkNoNCF4bklQaWhZZD9PIl81Qj9NWSQkZm47aW5FMEFqbygrcTpaYkFFYU5sbU1e''@;'; put 'put ''UnB9TWBXIjxPVENeQ2ovYnplXXRCbykwVFh9enNRbVV4fSEiLjM+ZTZ2bVpBP25laTVJIURQLHs1Li4iKzU3ZVAhQz5lPGFuTyFKezowUT0mLzBRcjhpVng/fHhPXXJoOV59M2BueD5eKzB4NEo8MyFOSUx2VV43dV44RD9QaD40elFReUMzJTl4W0JoaFM4UUI6U0c1QyIyeEJWRHA5aUMuN0pd''@;'; put 'put ''byxzIV11PjsjOl80TVM7bDdfLEtCdlU2N2lnJS56OWhMQD1OelB3RDZodjlPRzNJTHFjSmRdSmAzezNWSmthUXxkRVVRZz5OME56b3pSTlIhXUIwPnUse15ic2tufHcxSCMqd3NRQUE8bW8ifWMhZyIzRyh8PyFVZVt6emNPfWpwbmNhYGR5PTJQQlRsYiE8QlFicFBhL1dQc0VRQjJfe1plL2Q6''@;'; put 'put ''TSIpXntXVXM2WkBKMUBVPy5FMGYwQURVVFJaLyRaZmxPI0pnQVh1Vit2I1NLV3JnXWNALEtkODhxLip5YFUsc2lLd29pMzQiaDs+V0AzPG9+ZXZeNVdeKnRBT2J4bzxEN0tkTXFeOkZzOk9KSGZXb3QiUnJzIjk3Ol1xOEB+MVo6K0dsNyxbSE99bEpVcy8kOEZAT2JBPzZKeX1lRnZsVXFsQkV9''@;'; put 'put ''bXw8PU83OWFGfUV4ckthaU51Z11KOjF3M3A8e200OXRQdiRSSThCfW1gVGwoKGRsOldZdDxSUCM8PEs7YXEvJHY3JGk8IXA0SXZQbkVVaW9WXihiVCRZYjY9d1EiQ0VLTmRjMUQ0fD9bQWUzIypLYWNTVSVYaF9iTm14Z3dOdl9hWEV7YTYxSCE2T3heR3VtTyZ1akt1TSpld0lhYThON0Q+PkA/''@;'; put 'put ''bilQRl5pIT9sJnRNMkNUJkh1dTI5P3VySSxfK0wvMXhOYSZNRiR7ezN5NjMvc2FMQU9iNHNLWmoxZEZVPERtQ1FUcFB3PGVQUmtDTjdmTHQrbFNbSkpzLHxQeERNZDRzJihuMWJ7Vjx4ZyZLODh7QGR0dFlzW3l8RDFZRVJ5SjZCeG9EQ3NPSF1ZfTNVeHRHUiE5JD82RlJvI15DX1QpW09rfF9X''@;'; put 'put ''bWFkIThNfXl7Mm9qWE9ONTFCNUZdJGgxOXlDOVB2b3N0ais1Zyxzekl0S0lEIV43em43Z0E5czE1LzRHOiMpRU1PUTl7N2lHZ1Q0OihEQkJ7XXomciM7WC9XfXJXR2MwMFY6eG9yejU9VUBGe1g6N1ElfHZALyJ0WnVDWjtlVyRQbV46QXFERUA4KWdKSUpQKigvZUJuZVkjUitAeyVeaiNuWTBL''@;'; put 'put ''QjNgKzt0cTlDNU9CYl5sbTcpJmBxa1QqOk4vVHRLOUZFUXFnR1ApdkZvQiVtb19BXXMhV0BxdDQveUsmQkZtKTk2TXZTbGV6TUhsUUh8ZzImI0dueTAwVFU/Tlh1JVNtLD55W0NkSjZ7b1laXzJtK3gvT1ldMXZdZkNvSzNmNXhUZT1+VzF1N3heI1BAbmtXOn4wLHx+Nzs6RkJBYlA8eFg9S2po''@;'; put 'put ''YCVpM1FOSXh9NDsmYzBSailjZW1KdXd+M0xiVChQLC9DMiFRYXl7Rz5RXndCSmIhXj49TCFKa3IqOS9XVngiQCI6bV1XUHJ4UEpwQmJULCwzUm1NRXp6cHxYO2tvXkBJNj8pcHlZL1VMZCM+fmd2UX1CcEA7LkxmOyVyc3UuTy9xaH1MelsqK3h0ZF5MTkE2K14iUWZXQm0kMyVRQz1OMFtVaVVN''@;'; put 'put ''NSZxRms4KGdZKFQ6Sn1CNlRIdipmU1BkaEkxS3xGUlltSlkrcWUiTztwdUpaJHlVZlUvd01OSzgrN3oiY0l2MVZacElHJnkwUj90Mk5mWmMkNFZOWy9DIWx1Qnc+PCFNPyJycERpL19Mb097Tmk6RDRPdkdqem4jMTg3QztJVzNgaUNpWSlmImxfUzRyJkZwWVVtJnkue1VMOSwxQ3R+Qz4ofWdn''@;'; put 'put ''JCl9R3xxY3p7PCE6QFQ4O3kkK1pqRWgjQWBeYj5dQV01ImxQZT9bcXghMChtfmNFNi5vOTAxS2RrYiNOM00xNVcwcmZEcGskUCRIO1d5b3pTQT4kKV5fRlJSZT48UTNYQH1NdG02Q21TYlZ0LkgkaiM7JGwqbz1fOWo9V1hrUzNMaHA7LD9TfWQlUWV0bG9pX19sUTdFTVtBZTM9O3k/ZjQsQTpd''@;'; put 'put ''UXVHLGQuW2BnJnV+a2M9RCphUWc1M2NNMiFjd2xYIV5SOGduemBRQ1F2SWN9alkhRkgsdldUOCZXYDUwRVFKd0M7SHI1MkcqIXNjMl5+bjR7ODp6U2RmeVE2bUtHMSVPemBmLHNsXVtMJiNAVzJtWnleJG1oeEtrcDhLflUkZnxJOWkuaFlxcS5VaTxnWyw+S35wN1QwVElHK0Z2YmBoQDFGPCk+''@;'; put 'put ''Z15RaThmPG5He2IuO09iO2JxMn1VLEVKQ25MaT4yYUp7QzIuM21ZJmRdaWRHaE5+ejZMMWV2dlZLR0ohelJPN1IjIjRvXnF6Q0NDeiY2SElXXUk5OHA1Uy83RGchXVBebjsoPlB6KjRodHk6L11gMGMsK255JjFrMXB+MWdMO2t8LypkIzVXNXtzNXpMQ2xqdio1dlpWX1NFW2JEQ3MsQD5JPnpR''@;'; put 'put ''PjttUTFKfltZNT58SVI5Skdyclh8TlVjVFZlYl8+anBNamk/JXJfRkQzQlNVJDlHREYxK1VMXiguQU9zQkBnTGUjJi4lN1o2NWU1ajMvVHBdN2NDRDQjPjN2LG5rL1hUZEVFYXQ8MEdkQDh7VGp8OCx6eU1PTy9wO19LOUI5M2hzKyhhY2lEdlEyaDZLMnY/fiFaOWZPKXReSnhqWi9JbkchU1pj''@;'; put 'put ''NVk9KnxtWitzdSRwezJkaGZYNHUyfDU1SE4hdTkoZzsmMUU6V1ZPOE1GV0pJNTZOMy9keTY1Xk0oeDY6S0JnTGpqUlkvcDxVNXI3NlcpSWBFP0RlUUp8Tkl0TzFxRG1HPWg8dzY1M05RPWkrL2hCQnBpK35UVWlBVmw9N0x+NDV0OVQ8QiVkQEhffk4hR1BvS3M+MGhZZTRXbERlWFM7JTw8YEMw''@;'; put 'put ''YTk6Sy5RYmtLMzlZeFdoTC5NZntkM09GKz91U2R2alk3K2I8XWFbPyZ0KkFQeys8eV00RnBfY0ozb0VuND0jKEl7dmd+STREREpgKSYzeXFtRyRHUntrSkZtJTB4Z3lyQkAzY0o2IlpsUk0xK2kjYUpmYlQ+QUJuKHdKOigofHRvdWl5ez9uMGFSXz5WS0UrTUIvZD1hQXQ2cjBRSkR5NU58TlQu''@;'; put 'put ''cn1DPkpDTVZtKixDfWgsbF8jcz8+e194WVVxQFs6Sj1eWiFoaDxCU2MsbndKL1Z5bkhPI2NrZkJBa1tRKzN9JWYqPk9PZSt3NlVWRk8wITs/IzJTQ25+JT09Y2tMfkldWTpXe3w+JjEmWktCTXdpe1dgdiI9QGBrYWdOIiYvT0ReRzlJOXB1Z3ojZUsoO1lsaW5JU0Z0TzJ7OV5nM2s2aSIjdGVo''@;'; put 'put ''RVQwUzg0NC57JEckdXhdQVRJfnF8JWgwfE44SWNGZVJ2eTBrI1MwdzUuOCxpbiM2QCxRfH1rXSRBIzY2bipXWmMlQlo8ZWZxIjR0TExJO3pTKUE3YX0zbXZKKDApUiwyfjBFP0RPczolPWgpO3lJVGU6On1jNlFbWSVFKTxAfEd1bjNUb2woQ2dZWktxJmlMITJbNmJMOWouaD5jOCluS0IjemAh''@;'; put 'put ''Pk8sOU4lakJPfiw2Kj9ROT93ZixXIXJDc3tbTCpYKmpjUWpgYn4uNGRQaSY1UXBSSzhlLmAiQnhGITArNGolTnFrfXJnWiIwL1J2ITJTe21AL3Y1MzpdRiNCPV9dNXhyOlBKK1FycG9pYlZSRCYycT0/UVZzJkdwXSh0WF1xU1J4Zl4+VHBmbTJefTV+Yj82eUpnLmRARmRNJWtrdEFIQEc/OGpZ''@;'; put 'put ''dXxbUTcrdyZCTHFhO0o+RT9peXw3LD0/cCgjP2tvKGNOPyZFRDE0SGhUa187cjZnYGRlRThyezx0cCZ4JWh3W1MvOmZxdT87WHI3QWRDXTU2JU9QT358QTlsdGxmcVtaMC4kfS9KPFZKL15oNnM9Vj0yQncmSD9jQj5oa24mdSxNd04qcD96d1V0aWEpUFRaWWksX2QuLDJ3XzFxYUNNKHIwVDc3''@;'; put 'put ''Yys7SD5qOWkuYzxJRkF0NCh4PCw8VGUmJTEyRjdiPUQ3fkRgWU4mMFRGSzYkZHE3eTRzVyNgXS8mSHpTMCYzN2N+YXFLZ2V4OlJrU1ElPjZxUG1rbUBSX0EvN1YzZEJJUVl4cW45LDdWXis3XyokZTg7YVklNjdKfGcoSFpNOnY+eW01USJVUzFsIVsjKDN+TnVDdHApV303fmghbH5RWmNDL1lv''@;'; put 'put ''RUtMRSFDQjd6M1VvOVN6NitCMkFFfDciLFFAa0wrJXlXVi9bL0RrUCxEWSRqdjokImZ1dUEmM2ZmVCEmIXUyRU1LemAqOW57e3ZAeEAjN25fQnxhUHtvZEpoJUE/SClQKld4YXYjW0Jfc1dsJDp2JUhNY1Z7bjF8aS5NRH01YD04eURMO0RvaTN6M0QxKzBGbU9bV1U5QFtYcDcqTih5ZklffE5z''@;'; put 'put ''ZD8vdFZNTlRqcjxkby5LVHkkNk1iX1hHPHUpaCF2LEMwKWJYeT1nezFJR2MxeX51cjNTR2Bwei9lRjN3dWxnNE8zfm9sSi9tUzBReXdeUXVbPlpeOX1OKzN5TipsNF1QRD1sLHN3QVhYLkNHRStzZlRaX2E6QyMvdWFENkFbbyJPRGN9ZnM6RE9uNDlaJGB4ZXI2a3lnX0YhfDRQYC94Y3Q0L296''@;'; put 'put ''Xz5Sey5VQiFjOE9odmc3US8+TEp6Zy5oRHUmYnt4elpwaS4zZHBTSTdZeixwQSo1eD9yREpMdVFjUEdbTD48cjppYyk+aEI9VDdGSS87SkFpdWk1dFs9eig5JGUySnpdRi91Kkl6dCw7eGRid0lgRXpQe1lJeyxXaUA4cWJ2OnQoOWpHZlBWU2s4TmJOTzhWKzx4VFFdVDh3PWxlNzJbU1RqbypB''@;'; put 'put ''TlZ9QllNJF9keDF5SlV9Zjw7VU1eOHJdRz1pfCFSQmJuKiQ1S0xrS3gwNChofHpjOmNXaXFlWW9ke3xlWnA6ViVFX1QiZDA6Si4xN3trKGxAZjM1akg5W3g4JiUxaFRPeCxPMFFYKyF1eU5LSz8kXUdtNjo9WDAlalgreWBAUW5eYHVEOCE5LjRIVW57eEIjW2s4aTJ7SEtYaDV7SmVbW2MpNHE7''@;'; put 'put ''Tn1bRU55QnRxWk9YWXV+NUJBQGBPK3ssdk46RlRrZEBFLFAocSYpYDUyVWI5V1V4fUNeIkNkUEZ5SWZKQippZ0JDVyUpUlpVYDBPUTZZZXhUaHE3IzYxO0Jpa3Bpan5FZE41PVlOXWpqbzNRTWVAbHBbX21NQjpuLFdhQn50dm5TUihmOjZrV0NRPUhkRHl8Iz86dylBIkpsLDUlaUk1N3A/Nl90''@;'; put 'put ''RnVsRTRoMmZUfjNTNi9rdDMvbmQrJFBAQTdqOGNUYlV6JmQ3eUV2OHhjakdMbjttJUVTQ3I8Tlg1YCllVDN+d1FKOXNRZ3sjUXd1aVtvVnQlIW46Wi9KRlA2cmxZakcoVV06REt3X0F9bEA0JGp+UlJ2SEFxNys/PktfTG1HWHgoVGM7UHRhZTBEOk4uWyhae1UySmJ3dnY6NlkpJTtZMDExaWdm''@;'; put 'put ''RHp9S2pjfjksUzFQPmd8R1MmfFpCRHMvNFo8ZEdsbG5ONnJ+TCtJTXpocy5rKmZHdHQmNEtrI3xLZyh8XSxXKHBvKEpRXW0mW1RFMmRuJDs+cnk3cGNCeDJ5ZndVdmJ3dW1bY1tga0xGIVpTeWpEJSZubEhebjwyTHJJYDx2dGVYUyF+Q0NLaHEuV3hVYHAkdUtNYC9KY3RSKVtva1Y6biVbLCJ3''@;'; put 'put ''WUMjckYjZmgoaTwkPSJMTT9zdzQwRFtUISgjKDw0SU1eKWJDP29LXnRNNns0OF5KNVF7RClTKXdvKjkqcVI0am5peG5OQW9WM2hwbmtIaX1xXUVKclYyNFh2JjswfGs1W1I5QHwlKWxTdTk0di56bTtpPCxiLjJrfDJ+djhyUDYwUCRTM11gWix3eFQ8VmJiZjI4SXVgKDsiQWNJMk9TLEtXNGtS''@;'; put 'put ''RW8vTTxiZyJse3hRUXMma0dQR0Y3Ly9IcSUhIzluUHVnJF09I0wjVnsyMXhrdm1Xc2BGTUlxZy95WEtsbnI5MT40NWM6Sl5XLnMzJCVtQFAja19Ic3x7fVtzbTRAZU5FX0YyfXJSYFVeKSguITI6UCZ6ZkZ2QWNCfDQzPFtfWE84MFhuWjJfZnlfTFV0ckFdKVFWJmspVkI6M0l9ZmQvdyRJLyE3''@;'; put 'put ''ZUhNSXdWI0lbc3YldUBWKjJyS2QjSWQrdjJHWXJjX25NNitJPTw3L1ZVYEZQOGVpX0AhUiI+YGRDNjxmd2N+emthXlt5ZywvKlFvVTVMZ016I2Z0JDdyWEJ4YWlfRjcoTG93a0dxNHgjanBWYFhsIUh+I2lsLlROaGNAbFtjazVocV1ydn4hNz9naCZiJXRlXiorZXc9K10kOXAieE5vNlg8RTZk''@;'; put 'put ''U0R8JVZeJFlabSosfUZfUjsqekZiZTF1RnN6cnFpS1tkfkhxWWNlSz0ofTlaTXxzUWBUQ1Q9L1g3Uj9mfj9bTXxJTS5NQzQxRF5OVl89MSRvcXo1Q3R7X3UmQjhvZnVPX34/bns3ei9qY2tJSjpIcHdyUG9NQmNeIzdhPUpMdiRyYjZ+NzdxPCRCbl9fKHJ3NSZ8NFhXQzYxJixSd0EsQTtLZE4j''@;'; put 'put ''azBLeWpWSixOKS5xImB4WVhqMCwiIj59Z0VdRXFfXkNQL1BVTW9RLllTPDVzYmUvXiYoeSEqMFFEWH1KO3VRL3AkZ0JZZThmaDRPfjN0e2FXJGpIflZMVG1pX1BbbUcoMV1EaEx7PkBsajohLlteTWd0W3JbVDVhWWU4S0VeZCZgWyg6MkZAO1t+eiV2eFA2alg7XWN5MCsoPzx2Z2NwMWQ7cWdf''@;'; put 'put ''cTlzYGRvfUoxemU3KVA6cW5RaD9AfE4scXlhLk09TFJ7XS5rIj83VntUJTp5ZDsxZ0BVVmltK3E6P3t4IVluL2JiXWlLJjldYjRYW1EsYUcwRGQwWT8qbjJTQHI+SGsiQXZ4VUsqaWh4ekRQLCg2XmE0ZnpKaU1IKSFvcH4mdWdJZnVab0pOWGFwaj4ueVgwNVo0b0Niem9oNEV1QkR+c2R5bGww''@;'; put 'put ''d0R4cUJzOCZEejU3fWxkY01IeFtTQkVpKyZ5aT1VbnRjOExfNTFFViZvdkZ0dTlRLyEzRDUucCZOQyt8TDUxKVIqLH4uelVqfD9SNF9gVnBaa3tsMlZlXU9CSDB8P0dLPmJvdjxLWSpnKixNO2grTVduLzFObWB8fix7ZU4uIipXaWIldiRrTyRbZVh5XUBaPkM2LFh+Z35vbEchW0xQKDgmeDUy''@;'; put 'put ''MzQ3a2VQMX14YiFheGd0ey87bjIlVH5dQEY8JnFtcFtedHAiXlVwV0Z1dkpVelNSPFZwVnkqJl4mVlIsKjljfmh5MSJpO3d0KjM7TH0xe2BeSzk4Q0hUSmVOQkBEOkJffVhDWil1dkdbVjAsVSp7eGlfYEsqaihYSnlTaWJeKng6c2lKbko5cWBgcDpbbWVIS3VpPTNDZ1c6ZGJYUUswTS9eRmx5''@;'; put 'put ''ZCFKSkRZJi5IN1gpIlU7UCFiQTE6aFlgUTU3MWZNc1tkSDUsT0dlWTg4YyNPMGRLW09dOCIibHB5JmFlIm9aXlIrJjJDT297UnZNe2ZZdSE4JCk1Y0UoQkQmPG5WNyQqelllb1IoWTAxS25TLm8yaFRgI11uJi5ELkNwfm9KZktRQk9YI2MyfnZ0d0ppcmUyWFRMO3lUaXpsfW1WTVUvdXBoYTw8''@;'; put 'put ''WDxHYipWVCEzSWAyWWBtNHEoZFIsRVlDPHRIWCE7ZWBDdmwwbHRFQSNsLG5sVDsvTCJOI3JCOyVzSHs1KjF+RVJqP1F7JkZrW2RhTit1R2gvOGIpTWc7bjFpOHRpc3NGJislWC85W3g/VEwxLCpbSWM6TmJSbG46TCNaTGFdPzwhbDtaRFVISGd7UWhNPjA3SiJlcHsqUjlkPTl0MklnXWlmPn5Z''@;'; put 'put ''ITE1c15bSSY2PXA0ZUxeKm89fDJ+QCphUFguSjApRmxuKihYMWtObDdlP1dPaitwLCkxaTZmbH1FQz90S1JtW00mTXEqUXU7a1okRSJuentsRWZgcWBpfTUsQVVKdVFJVC9DT306a09KUDxVI0hmJSpmOzZbb2txJnxlTi9Sciw/KmdMXW17cFk5KDBwfXhTTmBYVUVJcGl8OCtVRHxhOkU/OTZo''@;'; put 'put ''QGlYZ19eO0I+dTkqWiYoZDZyRHFNJiJQX1FKRnthUj9lRj9TUWcmcGQkZmUqMilxXW5PUmFKMjB7RzZJaSVgSiY/dT0qaWNUaWMrMFhoWFRFRFA6dXdbI1FRNWgoP05VeG1FI0xsMVBgcmVJO19pUz5JM2Qvdy4lKHRNVWpgbltSJDNmVUczMCZpcVpYbyhGKiNHcWJ2L0E8OnNlYTRiMD1jZXtJ''@;'; put 'put ''IlRafHg+L3E/fmkvaCh3dGx4InBHLl9tKW92SiFTMTA2akJfOShzfm8+MU9rSW1sRHY1Tm99US92YmM3LipVbG5pdUYpb2I/IUUjOWl1WE4jOSZSc1RtTm0sTShOKyp5MTh0XU1xQ2diJSlDcUN3KyVoeColaUU7R3okQnNMOXJAO3NAL0tuSmBKckFmfkBeaGo1I3UpZkhpdHlEcTBeMW9zWmR9''@;'; put 'put ''YHJhOCVJbi49MWU6Nkc1STx+SjYhKH5OZypIPTN0Xl55dFQ/IzJoMlJ0eG1+U2FJUSpfVlFqXzAjSCF7bixAYFU2dDBBTnRkRCNMW19COSVFTE59WHMvMHJiW25KSGN+VnBKRVhIPW97JWdmTGMrP1V4Y0JnVGtPPiR4Y2ZUY3ZlJlRiKlEkeEhnQF85Uk9xfShoLjg+VkBXQC9CczxgOCRFUEsy''@;'; put 'put ''KlIuSHAkb3ZdLDsxfHQzPX5Vdn1iT0FdPlFbP2BjQjchdTV0KmRmayZyJnNaVilNX29DQDN4Q3BPY1ZHLkp3Tzd5b3MsTkZ1X2xlLyRJPWQpbmQheTk0Km1haTV9QylMRTFraXNOYX5qaTN9JW8/ZjdZbCUzKkZ0ZCozUFhxcmAmMDdmPylrRDl+X29IYDlRYzllNSJidGE0Pnl7VHRuT0VFQmRH''@;'; put 'put ''PXJZcE4hfj9HSWYpRD83LF1XZXBvPSZGQmJJIj1bPTU7K09gUkVSQVljLFdxQyQ7aUZJeSpnYGo7cCoodkEpa1BJbEljOGFzPHsxLkkiSEhFN3ZzWWs7ZWoxdCo9KzJhZ0g7JVNPMjs7JjsrIyRhOSxaOSxTLDhBTUZlLmQ+Xjl+ZS5zKyk5VVJQPlZvR35kRXpRbDZATXN9akdxaUcxaTR8Tylg''@;'; put 'put ''Xn19OTY/Jm9RbzsvX3dkMi9PSSJzZDZxXSxLYiQ5OHRDIXFtLmFwWmN+SyVCJjNeblMhWWFxKEUrZ1VjK0ZBLjxVZ0E+SSJOImVWdCJuXTpTRXduJm5rKjtHTUhicD1oODhaLCY2ZUchJXtKfEUwantMZUJ2aWhwPVlqJW4/IXMmRzpefSEyRUEjaTB0OS4xKzFMJG1AYCNvOTlzUkhZbmVTISJD''@;'; put 'put ''Y1pMd3VqISI6KFVUWER6QWp8ODluSTV9OihPM3RgRjdYN3xKQl1MLFp3ZDVbU1B1Vjo1QkV+YVMxb0JocGxjOTJefm8qUVlse2JNLm11eXJhdkg9VEl9MCVIRz9gbDRNe0VhQW5ETktIUG4xMituLm07WzJ5Uz5vamE2NlJTZmdMOj0lc2k/WF1qNnhQV09VNU9UMXolL2dFI04pTiJ7dXtTTWBU''@;'; put 'put ''RUhGXjhJSzw5ZCs+Ml4rK3dqYygoN0sveyshIVNWITp5ajQxOHpYM2VLRUZDdz9Vc1tqTW9VNjRVYEJDRW0kfkNhLngxb1lpe15ZJXFRbl1lRUk8fHNlckxJIUtbVVlBdUAjRFNkezleZWFKV31gJlpkdjFMRDEqe3dWfVFoN0NvISgscFdvYHFMLHg/PGlZWVZ6blphdlloTmorXlVuOkY7aVVH''@;'; put 'put ''TkMmTihSZkheb1kxT0lHfEZhIm5pUVZ3VkVjXUg2bmFqa15gVXdTWm84bSZ+WiYzQGdgdXcrOlZUVlc8UTVDSk5QfEhXYTNXRC5hamA9RVgwSiEobDM6VncpL2xVXiMpWyZJJSgpJWREV3MpYEt3NyFtWnlXWSpOTk1SQHczb0xqKj4uOFUpdH5Aal8zWDVqRV9xcyRzb0JPPnh2cnRlaWV0VCRS''@;'; put 'put ''PC9yUVYxcjRWZzo8fnUoV2ZVYSVMLiZ8WipOcD5JZyFfJUxnSlVqZGUzRjhhYnV3Vk9PJXJRczN6TntUPWh6X3QrMGgkN3BEaFQhSEh6UDwkQTMsQTteUG18YiQvRHJFK0c/RCxGO2l9bWJ4YEtxeV1qcDIuantsQ1pTNXlBfj9eZHFbK3pdVTBrVy9YSEhxZ2kpNipRUXcoOmF9WjdFYHI0RGpV''@;'; put 'put ''JTI1Xi51UXxOPmkuSW17QjJLU2BYYUBiXnplWEtOPSNdW1VfI04vLlBXXkhob2Z9JU07RDV8Zmp9dzRbcyY5VlR3X3sydV1JRWBnLypQaiwoc3N2Y01JcGxKPkBhRkZhLFRLfVJPfmdnbXR6R0RTRDsjY2tseDFseikjMF51MHBML1tlYWdiYkgqIWAudlAhaHhdVExEfG0kcD5UZSI4MENaY2V2''@;'; put 'put ''Yj17LDUvO11tWno+R2RdKXxYWkZSdzdze09rIzhpcnd3UGVjdmJJaDBUfjp8dSliQGxlem00IUlILyg3ZCgpfDpPJlc2UCVkbj9PTVQ3Wy90Y3JyJTNLWz0hPiNHMitGS2MqcEJzZ1dJRGg3aE4qVktEcnRsQ0N4NjsoO2sve0YoYUgzQUJRNjQxa0dWeCFoV0RdUEtiOy54WDMjZixMay9TQEwr''@;'; put 'put ''eyxIcVk8OCs8O3FkWkdBKHN0Um8/SCZUMnx5RFNnL1ldc2ZIajYxT2ReZzJ+Z1lLdHthc1UvNn55LkE8VUJjOkwxM2E+eCQ6a3AzYTZRRVJSQTQxOVMvbk5dYUwqSjU4TCRSOU55eTd8cVlOZCFhW3Q0I2xQJVRPayI0OWQ1O3BZMUVyJV0qfDdwSDEsa354WUJLLkt4UHRudipzcGJFRUlUNTtU''@;'; put 'put ''SDJfN0ghdndoNWIwXWVHaWpIMSwjIz8xN1VBKCNMfVNdNTZ1MHthJEBpcTkidjRHJCx0YDI9SzEhTWVMSnBTTk49e2A6Wlt4aGVwe3MrT0RNdD8oIWlJO2EsWWMxQXRWbVl5SGRrc0J5WDZYT0ZHSlZrKnc7SkRUM0glTWNOZl9VWHBmcmBeeSVwOC4kZjxAa3JqYlNfWCR4R0oqNHVRYHRkM2pW''@;'; put 'put ''PUxxQG1PUmRHdGg/X2dIKllKOlI0ciIyZiVuMTFXWmd4fF80VCpnUVowQF9Ce1N1Tm81akpeS1JiKDFxYyNxN3RGdzpuWHFQV09+TW1FJm9hanoxWDZrSy4wcSwxJSUzM3tqeXY4eTNRWil0Lkd0ajMrbjo0Imd0QWhuRCgwLGlRY05sMUFsLFkxMT5AK2RlIXBPQm58MVo4dDYqb1gieiEjYlRJ''@;'; put 'put ''PjEpYEAlPVp+KUklVmJpV3tjLmpKKFdiNDBFYThfYSxOKDAqe0ZZc2pfMlM4Qz5RJkl9Y19eQF5OYkZdbkNPLiVMWD81U0lRKXt4TDY7MCxoWXxscGxDb1M2cT4lc04uOXMpPXsuYjwldkhSakpsZkJnU3krfE5wZmkyaTpHR3xkJkcxKC4pSShrNl4jYC5ESUA+bjdQS2s8YGUjQEMoPElKWFQi''@;'; put 'put ''Z2EzX0gpQHA5emtaUUw/cHw9d3doZTVrI1RCOlFMU2hwWSRjcl8sOC58WiR3Nm5jW2whSzZyOnBnak80P3RHNlJpIWIrbWksUHRJYlN5SyNYX0V5N3pBMFhzO3BWV21BV2N7flU+aGMzflYuZlMoRDhEJm9OKCYzbGUjaEhXdVRoaGcqM1dJNSo4MD97YFZrcDlIKlh0KG1UJEI9MTA2PWFaS3x4''@;'; put 'put ''SGJDWW50Vmx8SnQ2QnxzPDhkQnNibUpwV0UuV3RnfDQyfnM6Jng5Z15RVmdUdEBNUkhfXSFrTiNMYyhNLDw5Z3dTJGQ7K1JxYyhnXUM5RlgsV21uP244Nmd+IV5Qez9DaCtrSVVXSiQpUT5GSnF0YnRITGhJRC5LKkBhP2NpOE5YXkc1U0NYb2BJUCE1QjxibyZvYnowajFDOltiUWhlfE10LEVu''@;'; put 'put ''XUtEdnEscjFOZlN4MGVpUnluWmxSYnM0Uj1uLjNuWGBKTTciNGx7amlLPmJ9THdAKVtpKlteWUgmUSp7STlkO1ZRWX5hS3lIOnVqdmM/Si4pdkVPfjI8d0xlRk4xcWJdQGI/cXJEXkszSyZtcmFFP2R9WTcsVCw7MH4kSjpfPUFfTipbeyswRD58QzVMUzlHNENlJVRSKHBEXWpGIUJrYj0xZlUm''@;'; put 'put ''IU1rcTIxK2Yre3lvZjFofH1ec2g+JlBndSlIN3hUYFd0czFMbTdfRWNXL3IjSV9hRmB3Ij5oQX10OGksdzNbOnJtenw3ZF4scSRpKWJ9dElCbTkoOjV7djJ8TkRCQ189U0RsK3d8dmNITW1iKV4jbHA9QS5EYDxXUGojUlNVRj0wYmFhW3RKJjIpXzRgOzJzQ2pOLHRkcTpLdEV0TiQzVW9tSkZ1''@;'; put 'put ''eXY8RkdyUElXfjRsJm1HPn0zblVHP3s3eCo/JkciJHtNfnAxZHN0aHBmbCVFc2ZMeC9rUHlyKF91Lj4wSiMwUXldJnZ7ZFc4cmZBYWxKPTt5cH49a1IuPjslJTZ6eG1Ye2lTJkJpYjtJT2M/ZjlyVixXVFUwb3RFejM3ZShfbityekxhTFQ7W11sVyQ0MzAvKyMpJHMxM3p1RjFXRnpDR2UhWio4''@;'; put 'put ''I24pIjBqX1pSIU1jMEc9N0diLihWLCQvaWdjcz5RQEY0PVtCRl57JCtKZTpnSShKN2Vab2RPT30qJSxvW3R8Y1FGVG5QL0lAb2hNTjZaVmxXME4lJTJ1YCUkNjJkZVhGRC9SLkFVWjRpU2ZjX35iRSUxQT1sKSU0UGtsd1dKIjlNQnAvSyZiXkIqbjlrZm1AcHN3K0RTU1k1XnFPK3FRNjx2UEUr''@;'; put 'put ''WE4qRTVEZm5VPCg4XSxeRlhHN3d5I3RSRzQhI0JFLnM8Tk4hJipOZ2tNJiZhTihwTzUmSCpvIy9UY2xCRk5CVlg5d3tTakRBdURMbDtYXXwwYnJvSi9ycitUP1I3em9YUiQyLDRJKF1leTtKe3ZqdzdaSCsmXkErITBUdzVBbWB1V3c3UHZdW0xwfVBMTD1icjozKW0iJWNzZ3lDSCsrbUMuO3VQ''@;'; put 'put ''ZyREfXlaMHVoS2I4JiFiX2NRZCNUVnRRciZWeUE4cypeZHc7KjYqKm1mNC4xdi9nYCl0YENRNCxYWEVfYVFPaFNsLzFmeVQ7XSNlL2xFa0ckQyx5KUkqezQ2e3FGbyhQQW5rIjZ7PjwrTmtuUl4oMT4zL2tWMVNlaTpYa0VxMWUqQzZMUFl3KGxETDg9eWJ9NEk7KWZ0OmgiQm1HMk92QW1STkQm''@;'; put 'put ''cDpGKW1JRFkzaGcqaCY/ZD9uNGguaHRJZn1EckNJNzZZQmQicWBRR0ciS1dya2ZeJH4hZ0dCJlNSeGZRYV1udy9BPFZ3YVFpIVdpdFkwZk9LM0p4IzhmQ012RUI6eDdNW0s4WWYzYSR4dUp7e1t+RXZWZjd0cUE/QCQwTlZiaXZNVH5yRl16eDY+MFZ7OChELn11QHJqbnJtYmxPdHZzPmFsNDV2''@;'; put 'put ''MlNOQ2pRbVJkZmF3ZGRuYn48KnEkfiEubW5zK1ljel5RL14/VUZ4Vy89VnZ1Tz90bWlPQmhjSCx3aD04SV5iQnYveD98cT1+PU90dWA+Zk5nWT4+YV93M2Fgd3RhLng4QGQpP1dPcihMUiojXyVFfGZBem09LFdEXkxuQjgpP30zTHhfTHZZVWsyIm9+K1dRQl4vcEY6LiQ6OUxDMXxFTjlMe1FC''@;'; put 'put ''I15uR3B4THNjISlNaWc1QmJQZ0c1NHYsLHhFaHZUX15oSDZmSFF2Nns0RTdxRXBMdXFaN3BZNloySF8qVWZBNW1Ncz0wb30rTFN0M1s6QClTLil1RWc8JHdjOyhQX1VsRlp4diZfX19IdDtTSDNfM102Q1EoXlJwJCkmfTowenRBfD86ciQqXX1EISJIOkIpNVM2XiwicVBVfnshMUl0SW9HNFMj''@;'; put 'put ''WlF7KDkwaUV9M29BRkUoNTA6QntmJVBWK1Z4Xi4hKCxJViFXZHA/fnljSypjZz4uSGptfnVIIS8yRF9yJSgkcCMwTyV+W1YueElyXWdYN2UvZjpeWkN+aXZnPVkvUCZGRWh3Q0MqUDhrVWE7aD0xNXt5TUVwMVZFTkRQVFRIPz89Q35UV2N6WlA1fChYcChLXj82eHNWfFJKJlVpUHRbRERXLk1X''@;'; put 'put ''O11pfXh9YnolLnRRcVdWdyNpVks/RytLN2U/dktiNzc4Zj1XOEs0YHxAOzFpTSokTShrVWlgen5fRVg1LmhhVy57PyEsYkc6KE1YeGVbKE8iXURDQjNmYyFoL0BAV1pOSjdZVTI8W1oyLkFdQy82dEAzZGE7dSt0Smk2fFBnJnZIdForKGswSk0oUGFDLjF3XTlvNGhBJHd+JTBZI2R9UCVRZXBK''@;'; put 'put ''NV9xUkZPUHMhcFUreFo5Nj5ONTsianpobjNEZkJ9fV9IXjJVZDxfRHBKIkBvdytrdV1JeTN3I0cjJUR6PCFjISx1el9kNGsmLyQxWzdEVX5ebGp+fXwlWUh6V29vW2VDWHllTHVSel1pW30za1MhaTplMzJ4LkY5cDA7TUI8Vy5+QUZ7TnF4QmVFSnFTZiF3NVdXaXlvR3EyJipPQlBQKCY3cCN9''@;'; put 'put ''TjM0L09LSERNfDlVXXxqIWpwJnshNXB1Ql0jbnt7dU1BdkVbLmkjRS5wQkMwP1JoK3FbVWttPWtNOThjWTMhVmxnYFtqZFouUCF8RX15X1VoSCooWE9WInY/dF9FZ29fQiJvbFk5K0x7Q2teb319ezBJZ11hIjI2QjZVKywkKT8hRz5jeTBlcURpV01HWUc0NzhRe2xVSDspKV03K2ldfDwibD8o''@;'; put 'put ''R11ULzQ3SFdAdUtNZWAreTh7cHJGMyR8KjpvOls0NFowOGxNRXBsQy5vPng2ZEQyOVVvL24pYH1HOVMjI2Zrb3NmREoiZz5MNCVOQj49VmJRPXo2MWxTNSJNYnpEdXFUUyt1e1RbOSZeOkdgMUI+aHV8Snc+SUtKdiE3V3BtS1ZoQlhUJkZgIlR1Y0lVdEB2U21oUD1SK2VeW3xwcntPMEc5ZXdK''@;'; put 'put ''bmI4elBAcCIxNTJxPm4zRyxWfjJZbmg2UTkyYVdvWkh0Inl3bTw0PTI1ITozeDFyRHxETWxoSkJ5JVFQXjZaJDlfWiM/Sy5LeX1EVj5RdE1mbDIoW0h2TnFoI3oycVg8PXUyeVR+a2t9eXZ9PHRdSXpNbTlzZkUyel5iYE1LKEx3IWQlPSw1MU5GWk5WSFAuQSFXLHhOIn5ZZ0omYGd+My51b0pz''@;'; put 'put ''SH0qaTw/aEJPP2spUyhFWEYrKTYzV0ZSJn1BUyoobEFAd34id34yYlE7UkdoJSJwJWFDbnQ+T2pVI0c/fGdTa1dofDxRb0N4SzEyR2g3JEZTWkJfKHUsKGc7Tm0+ImJ6eV9aVSo/fCY4anQvNGFQZEArXkZ1dyJDOFQxKWQmc2kpWyp3UyV3UFMuNEArK0xYSiVGKF5nJntTVTtQamM8a15VeiRW''@;'; put 'put ''VGFQbU80QSF5fDczdjZLeGNxez5IQD5JTUVGRkc3SW42Rk85QmwpOSFXWC9xO1hbKlFQNXEpRl9TN1BXJSg2OXhrOG59QixiJDN2WW9SWihMZVl0QTZvPT91QyhFSFg2RU46cSVhOndLayI0OGY5IUxEXk1RKT1zT0VpSG4lb3w5PHQ7a05ZZFV2TV59c0YuYX5HKTRvRT8qT0tdJXU7NEk3OEdy''@;'; put 'put ''czk8RiYzTnc+NkhHWWtkYEhDYko2e29NdkwhSUJxb2d6VlBZRVpRIiF+UGQ4L0BZVlAmOVptZzJKfV16RHtqNnJWe1QsY0Z1PUhHTXtlXllNOVtyKClUWj0xNHIkVHJ6JWwhWEtpRyRHNyMjLnl4IT50dFltNTJGJlc4VV12e34pZXx7el5DaD88PFRxMTByJUdKWF8wbkozRCtQOXtqaz0heGh1''@;'; put 'put ''WyJJc1p0dUZKZ3tFdn19MXAvV096VFJ3VCgpVCVdQ04zYEpURVo0Q0NGLGl1eERyMj9Ic3cxJlsmWXtpRH4jXV82bEFrSGNeJX5aPSx9SF5MQnFfZjtwelMsTUVMcyUmIytLXzt9dC82Iy5lcl9mXkc+ZV02VUdCJmRmT3t9eEpyNTwkfEEpNkw7XV0jYUVVcS9YTU8vVkUqeXB+bSFec18sSF89''@;'; put 'put ''YlRFclFndHZLbTI1N01wamNaN1RoJmpJRnBwbnBacmIoP1EhcD9hcltuKFdCck9LLkBld3hUN2I2a3NQd25GWiFROyMsaiV9ImZTRWJMcy5+T3UjcTkjaVEyQV1ALDMiNz5TLzJ1VUpnY006fX5PR2FYey5AeDwmS3dQT0pgYFp9JGAlJnBmeUU0d0o0LiE3dmIvS3g8KlVWciZFZGUvSG8pRyQ7''@;'; put 'put ''JkRGXzIjaFRyL2gjU11SJDhJXjpKbzw+ZylwaiY2UTU8TUBhQGVlMnVIe1JUaTMjZSZmOypkaHhnRSUzLl1Vdz5xMz4jZGtfXWlUNGIrWURSMmlfLHs7WTlMbGRhIWExTTdIXzshIz9WNDU8bV83WVhLeU5+TEZMVFs/ZVdRRFopeHpIJUBHQ2UlRjM4RmAoTGd9OltwazdIMCp7T1chZVFpWUJK''@;'; put 'put ''TVNzNFdaeUpOcW56dDFAfn12PnduQFNKLz1mMn0lYDp8diVdNXcrcFNAZkxFS3cyOmR6VkY/fSRHIzZmYjxDYXthQn44enxdPUBbYTVeTTlqdnY9SzFhY0prRERHamQ+PSopPH5TUX43Qn1qclZORVtCRUVTcSlzOzxaYFQuWUYoQC42cj9YT2NJPChoaChudlJKLkBlT089UElIfChoeWtWcipT''@;'; put 'put ''OiZpQUdaYTtqc2QjcFE8LmkpLFNuM2ZYLFF3N00rME9EZ1AjMz5HfCM3KH5UZkxgWWZaaW9GZEhhQk5yIyp0PCN0Vl0lPjRpfGlAYkx5L1JxPjBIWWw5UVtBPWo5aS4kQGJkQX5HNXJedHBSKEJjbTc4dkk8MFp5Xj1YI2ZVUFI9aT1mJHppdWU8Wm14Uy4oWkcwPjtnTUVOcm5KMEF5SFteLHpI''@;'; put 'put ''UDcmPnJJWyU9ImtGd1prUmJlcjpZbX0lREp+QXAjL3o7IyJrTzVTT1pxOzghRzBUMmQ1UnlhRm49fjhSey4yW2A1djQuTUNEfW9QdDJYM0hbSHFudF06VjtgMCt4eUFmdiVHYWhFVGNsQCFwRnxUbWY8TEdsJG4hfV4qaTlqeU5HYj1UWnRvXUZ6YHBsLiQ2WXVpe3BpJFZ9Ui9aW3BxYkNnK1ZW''@;'; put 'put ''YnQ7byhBejY3IjRRVCk+TCRmKFJ3MjAkM1R0cilraUZAbHtjWURXRThGNmhAQl5SNX1aTnQ8RiI4OzhSREtbZjtgakxMejVDLndHWmBiPl5UR21tN2txV351eHdhRHhXK3lDfEclTSZlPF1wVSZCREJpfHxmP0Z8dipANmRDQH5MLiV6blBsLlQ1VVsxbCUzUypkd2Z3UTlVcEhON14vXkBFKjFS''@;'; put 'put ''aUo9cCFoPj1ESShMdXI1InMhaWxhIldkWjZmZStTSWR1I3ZqcEZDMWN6a2VpdWtedEo3YVUpQW5dTmRTM2JQJD9iZH1OUV15Y1VjNnNORDRRWEQ8PnIxIXtZOjl3JHB4JUthZko/PV9uaC4rVlsqdFVyKGYrKU80e0U8QW4xTltXOXpxUnNgalNONWk0TiVjZDErJDp+bHA0KyJEUnlZNFYoZz52''@;'; put 'put ''fTVNNl43Kzg6MGM5K2NIcCt8cnR7eyYmXVUyLGAsQTRoJWpsImooXWhfQGJMbXVjOkw8cy8mc3ZIYFE4biVFRDVrY2d9LlhqeEtiSmYmPUlFQmVqREU/fTR7P1JCSmV1azVeTTA6ZX1qSTJVeDJZNyxWMW8hbVYjfmB+KClhQ15+WXtXQitAfGp0RXJmL1Y6YjgxVX5YU3NzazYoPXFROmluc2tR''@;'; put 'put ''THdkN1ZMKSo3Zj0jekcjPnRPZzpyfnNyNjgobmAuOlUiU1kjPUkzUml6ZzA0TnswanYqPjVGXUswTz5GTXlubS4hXyFzKHpEKXdJVGB+P0JwU09MfDMycXRfPjFNYzZuN0BBN1B6aChMS1VMSileN0xWV2N0Q3JbU1ghSEUwbiltSUNbdTFUQ0ZtXXA3fWMjcXoobGB3LFJZY25bU00ibT1YZ1NA''@;'; put 'put ''elpOc1VZMFFyQUkqPklYUWgufEpDZnBOI0xsIktCUl9uaHBKPDs5akBRKj1dOnxFTV91YVE8LG1CWU4sUC5CfW1iPjh6SW9IdVgzbCE1dShGUz9SezxFfGNOLlNgSilWWGQ5YEEkPE4rSlNBJUF4b2RxNS9VbyZnUEs2fSkmTk1FfGZCYTZoTjB2Z1VrS2IjXkxXOVswTXdVOVE/e2MpUT5QU0cv''@;'; put 'put ''PT5qWkBKTHA9NiJxbyw8YVdmcWAmMFQ1MXYjPSRqRUViXW9EfG8wU2Y0V0tvd0NTLE5CaytTMGQ1a0dbdXRbSzY5eSYpY1l+P3BBOEVibDU0UFVRPF4sLFtoZUdKS11KbExwSHhdPlBnfXlrV2pTdGgjW3hdUztIe1FSUj9QaUc3bS4oLm9FPz9JPDJnL0teVDg8bDw/Jk94dC5DaFAvY243SSM3''@;'; put 'put ''fWFOe34jLzI/TDBMXllRVTB4L0JvUGx4Qko1d2EiWXFJSHY0WmghLmByU11NLl8ve3BgLCt4fC58KyN1UXpPJDdZcl9tfnQ/SXR0SVQ9P00uW0A6LGxvQF5xYEN5eEN+Knc4ZjhrflY7dCZnRTlsKWokKWN6ekRHYWBnel0iPCpDIXUpM3ZHIVEma2xAOFk8V0V3RHtPJF0+Uk1fJG11IW04aT59''@;'; put 'put ''UnNQKG9tdl1uV3BWcHhjSFNxI0FsRWFyYHw8TUY4UHtte2RUfDVAdUNIb2NsTWhxOipSRnI4KXBFVS4kQV88cGddMSk/RyxjOlRJbUBhW2xrYUZ3RFBqWG17ISk6JmAjKFRIaTd9SFYwPyFwTkUoektmImdbWC9yaG5lQjwhSmsxdFVJYih1Yj1oSzVRUEBgOmdMRnlmR25nSFRuVkleWkZnQV8j''@;'; put 'put ''diN2RSMvMGFvKGIlYHdbRDArZWlzVzNzcVAhJl1jbiFLOFR5Pi5KOCZ8X1dNMFdjO0JwQS9hVk4qZUtyMCpre1JOaEVWUU4hTVQ1a3lpelVQMzY4V2MvQjZrb0kjIiNubnM0QSpjYW51TjIqdH5UbD5GLkZpJm15WnkzN29rdV5AZTEyfmV2VUB0NixyN3x8NHFEWUtUYW9iYmZ5RlNyOSY2VjAm''@;'; put 'put ''eH0vbUFYNXhqenwhcVE6WENfWHZxa1plX1hCZSokIil+eVBqYyZTXy82N359M3Y4W05UTWklJSFHJDkvfHckSzJxNWFjZihjUylzRkp8KG97YElTMlZzXnZBaT1ucE49QC9RXz5uZX1oZWRyN0xqUGZvUkxhRWI2dEd5RExOKW1ZcDRnXWR4b2tFNmo5QmZDaEMvUF8oalVGaS42XzZ1KV01KDdU''@;'; put 'put ''e1h+U1M6VG4haDl3TU9jeFAzUiZNNS52S1BLQDUhTWUzOXF1aUhDNzhXdU97Iy9PVGUsM0NYeTNSMDJ9Qnt9P0UsYlBVaSFqWzVoITNfbTQuKyVAbjgqdFZJTTBFbE1fOF12MzRhUzduXXJUZjA6SyhrITd0M31KPEtnamppUyZnZVkyZCF5WWl+PEMlalZDZEQxfTNYaXNJQSQ0dX55OTtZZktW''@;'; put 'put ''enBpXTdJdyUvem91Ok8/RXRJWCU+LCs/dyordkJ3R2BLfHd7Z348YUJpc1dHQCVCP3BwUEcobXQoR0JTNFhOeHZIa1RoOihrcTZ0bHpaLDNPeE5aV29URls9YFIvOkF2NWswdCZmNH42MSp5TWlwTV5GTW4ydnhuOjtLQGkuWWBdVDU8YGpaciM7aSxXYDR9T2Z3L2wjbm9ZUHUzbzNDe3ZTRj4h''@;'; put 'put ''XlZ0ZHlSOH0qc2t8SDU2W0UzPFRQSHpmMz5bTjEjbHlxSHNrTkEsJkErInp0Rio0YEFackBoXXl6Ym8jbUtpJXFUZkYqVzJPZERyRFlAbnVQTCxFZmMqSlsoO1hjO0luLDVdKnl2MUF8Z21QPH1vdEFXTUltIzkrNiE9bUpjVj9CSXc5di5gblJxaiE8PWFpQUQsPCQyW29UbXpwR01LfX1FSi49''@;'; put 'put ''ejclOi86fnpEa1JuZSQvTz4scWg9VjN0P3M7RiNbPGBCejpFNSs3LD1hXVdLYjxyMkl+Yi9zMkx2KTQ/R2IwX2QsNzM0b2YwM0QwXkhne11eajJBYyJpelNFOjRZUTciR3FxWDhKVUVDayVQcFZfbyk/WX4+e1IjM2w6Smk3QjAxRjZLYSx9JXc8ZytvW2tEOz0wVF0/MTgkbTtNNE5OUUVzQFU9''@;'; put 'put ''bSVIYzYrbzgiXUZHcU1BalBCQUkyUXohJj9KQWg6YWB4JURbOyoscXApOEdnU1VSZ1EqRnR4dDRvRGk+RCs7cmRVPkhMVkhdI10xdzJkb3tjREh3cmEsfjQwYEx6Y3EqanRCLjB7IiIqNjcoYyUpIjFZWlRPTkB2fFFKNmYoLE4rdTV1YUh2SiZEe2EqQWo3cFtbZUZELkUrU05iNDRbV29WND9S''@;'; put 'put ''SmZAYyxnQmVeYXUuJjNETF4sSDh2KlBjcUxiKjY0ZDZecWpVfUlLZD80YjJ5aHM3bj1PRC5bL1VjVDZTNWdhdTFOImo8TSloLzhjXUh4NkcwKXkqX040c1BjK0AyMUpVXSZtVU9zMjFVfjRPTDFSTEI5IXt0PVVqYHE5KEZLNE9hOEBPKnxJaSEpbk9qUzdsZDp9dTI3JClNQyVoYkw0SFloOTM9''@;'; put 'put ''LCJwbHA+anRlPGp5Pk58UURCMUoueV0xQi89fVA3eTp9cWxwJElPUXhxLyFndGhFQiI2Q1hpbEYydD47USJbU19IZDl7aEUsb2A2L2AwVzNiQFNmLGM0SSYvYm1zfj5AYyFOWXk3RiRTXzZIIiRSfnl1VmAmYjY3YFNZUkJuXiJHbUpLZyEpeUhOdVlJS2E9TEQzR3M6WmNWPUhuKHxAZnVmflB3''@;'; put 'put ''JiUxaEpIb2EyUUZ2MjdjLyVIJCxMO2ZoSk1MN3lOKDhjV08sbEdRRWZERXJJQ0FbViN6VzFkIUcvaig+eW97QUEyNi4oI2YoNy9fVFZfMXlYI0E2bS5ucWRMKj0mUTpQRmJdWV1AO3J2RT0pJSxKR2wqK31hdjUjaGxyIj9AYEtTZEx5ayZlUm0pVU1bdXR4X3M6TzFnQHpzSF5+alkhNGlGMD9h''@;'; put 'put ''QV1iPDx3QnthbXdZPkxOVDFPK1lqWnU7LlNhXTpnUE16akUjfHx8b0x5e0Qib2YiWlNqIV9OOmxFNGlzdiF3SlVHMGZiQ2Y9MVkqcFtnLmYxImVKOnN6NFJUOCVlbyVPTy9SOlkmbmwvT2h3e2M7LDZ2MCxfSzpWSlM/Yk4zIkFGeUtvKXQhYFZCKmMzYFdHdDF6c3V7KTxyUEhZZEtwPE1bJjx5''@;'; put 'put ''VCpWbVdBJG9MMnZfZ31Oe3t7OC5IWGN9T1d5djp7THwvKFk/R11OZCM0Y0YwZFheai4wbEh0JmEjLmRGd1pUSnk+aEBJPH5DPUV9QCp2V3wvX3hofj15L1h8Q2o4VFclcjh+X01kX1FbLFg+WTJtUGJwbUFST1R0Z2E2T01lcXhKQzY8ankxZHAoTnhXdT1vNnJeRVFGeGo/OytMVjElaSZgLHBS''@;'; put 'put ''VCI2WVJdOk9SYU92Sk9qVnREPWVdMVBTWThOYVNASnQiPEpsXmtjSEhrezp1QUNiRTU8e1Ymc3RNVWNqJFNJOSY6Y1d5T0A+dlYjUUE3fCJQVUNNV2NbJDZLTVpwflhkNTdHRDZrMC4kSVdAUElNLm5rYiluNztfbXBISUlyNmJZWHgzbUYsX1JAc1Y0aXQvfVFOP0RuTEBrRCtQISZhPnN+NzFp''@;'; put 'put ''cDxpamEvRFIoSFJSOk9FZGNEOTMoYzZYJkxOZyhmYlg9diQ0WjsoaWAvIVpbbmBxUzIqZSt1Ijt5XyNaVFdbUmNgU211V3U6OUN6M1Y5IVtUTD1oV1tPVjJVKkVyYEtDIm1VdE9wM1pxUWM4Zj9ZfH1fNz1BRjpYVG4xQkBRV2JgL3BQTT1qYD90WThDW3N3R2J1c1ppZEJNZTNaQjlnSkgkdjZ+''@;'; put 'put ''PDUxaG8/ITBhb1RkNThIY2llNlAhJmU1X25xLEJETVVENHpQc2NCJDR+KUdkb1JrZ0U9bTFPP2tYO2xXeyp2YSlZVUk3TCY5Tmo+SzlvTFptQSZ3I3d3W3JjOXBgfXRIYm1Fal1KUS8rKihnR1JRci53Typ4dGYyKXA7M0ZMcmZ3dmVKKlMhOnhtMExud3lJX0FGYHl1eGBETX5wciNCP3x5Rilb''@;'; put 'put ''NUlfL25KXUJfVCh0dH5LJTB1eiJiaF4seSN2aT80bH4yJHxlJCNqPnleaV5hL01tNEFrcilyNnVIY3F1MWVtSDEmTSF1VldVTU89NnE+WildaHdwQTM7WGQwTGcwV2UrbUpPL0VHMHFeIWp8bmQ+W1Q3VSgvWUQ6WmtMREJyN2VrSlQocCg/ZSUoNWF5dmR3XyE8QjokNX5zJDh2M2FDbWtbbiox''@;'; put 'put ''Uip8Nl05djpwMENlQ0IkQmEsM15xXnY6VjM2cnYjLjJ+b0d9NjkiR15GfG59Mjd+SDBnPiQ5MW81OkMjSSZibnFPUUxDU2dyTSYuOllycDFZci8sR1RRP3Z0O2k3YHJZWDFNdEo9MHJ8WTlVJGgsfHImTENsJEokLFcmVyhqQnwoS34ydH1EViopYkFgcTR1ITsxeDssLEJLWyJVRjowQjZwX1VN''@;'; put 'put ''S2xnNVBmYCt2OnRmLF9XbDE+YVEmZTdqZj0kcGxLRUxOSSZmcmxvaGV6flkkOVVIfi53cl07fD9oUlpfUHwmKzJpLlJCUDkycD02KEE+SzQ6cW48a1JzOHd2U1JMbmZfYzxIPTsyT29mJj9IR3Eqem4pNmt3bDxvTDZzKTFELCFTKWBPWkV8dGJzWCVnPnVXLiNBYHdUVCQyKk0jMFJRYWA8b35k''@;'; put 'put ''PllqamZuZnVlaElXNVFDZFhYI00qdXAudlliVzoxNV05JDxNRCtSW31tMn57WmlzZU10L2tLQWM8dCtnMiRnI3E1RGt7VTNGR3prX3g5IlVZKGV4RCY3SkQsT30pVGlfdF0rJnQ5IzokSzV6OmU8YTlJYkRNUnJ3RHpGZDo4R3gicEdocGlBX2lYZkkjTlBgdDhOX15HXm8sTH5hZzsvajFeMy9w''@;'; put 'put ''SXtlXll8KlJtajlDZmZ+QjAzRVA2Q1lkOF9eeFsxS2k9Xih7Y3s1YX1qI2doJGtCL09aPCQ4RVIhWERuXSRpXzN9Pk47T0ZvdDdyQ29eI1ZnLGhfd25OcEF0dlElOFFtPHFYR218NG11RFBgNTc8PWc2NyEvIlZtZHlUanRsNGpKPT56XzVIVj9qdkAkWFEkakUkTzc0JWdgbjZOT3pWOXUreVVa''@;'; put 'put ''ay9XcGwpTVVYRC57XyU1SGc2Zz9HZTF5dGxCSyhiTWtrZXwub3UoXV9Icj9ZKTFsOiV2dGF1bGJ1S2VQaVRpSm5qRi5oVjoxOmBOfWF9VzBiRHpQQFF0YVNnPUBsdSEzfDpSYltiZndKR1lQJCVMIlFTZSNjMkdgS0ZYTlg2RiQwSkg0eF4sUm52Yk5xZnY4b3thMkBJeX5gRkRyUFZDczNVSEY+''@;'; put 'put ''K0FrSyVtMT50WldKbHkjZ098bmFhPV04NnJSOkNNS2pvYSRXVksvW3pWdjV8fltOcCZnXXMzVWQhWXJ+Y3E3Ny9PTzpgXmBJW3V0Ik1OfV92dnd1UkxRUXh9d0NjKVtsVTN4NWBRRkUsVHh8eWttOkgvUkx5I1h+PDx0XWc+Ujp9fTt9P2Q5WjNNRV5ZMGcwZS8lZEd9JlEmSiUyPjJCZjc4L1s8''@;'; put 'put ''LFV7WC40MlVoK05VMi41JkxFQU9CW2pkQFshZ1J2Wy9kMzBrYyN4O3BTYyZTRXlDZFBLWGJGQGJaJF9eYTFLU01SPlhaWHZ7NG4rOX5nTChfTTJWMmI1OCgqXXprZ08wNik+SnBzLilLbUE7NEtjbURTa0Y0JDJKbzwlL0xKWzU6OnFNUSUqUmYieGNHNm13OSlmc2xqQF5ZSyl9P19kTk5CVmdk''@;'; put 'put ''QFJtVmk3b0cuTEtHVyxAL0hsU1FhKnNyVy9+K3NMZG58djBfITVucksmT1ZKPUcyL1IlPnp0NUVsKV86IytqXXFAOlRHZkpaZCVhYHRMb2pWfkwodTA2Izg3JHNkUExAdShyTCUwPV9xYWUhTWN7QHVCXl8iK01eYWpqR1hreE8mLyJeN1dNOWVmbEQiSEBxfntuTmRCWH1nfXk2aSs/blg4Mi4q''@;'; put 'put ''IWckWFRXKmp6bDNXMShzSWROd0tGbEpuTShafGgyKkZzKXNxKF1qIjxgdkBdYTpNbjtmYUZpUUBYV2tFeENsPDpOaHZwcWp1VT1qQzhAT2A/JDdSb3d6ZXd3K2daImRvUWVSczpubV1OdnUlLjUvWF9PUSpEbSZvdTJbZCRdaClMRGxLZURDajc8WWczYGkoNXhWWTh3X31EQHhPVmpsQkhOZzJf''@;'; put 'put ''az1GRiN0IWdsY018SztNNW1nYElNazF7NU9fPTxBTkhkISssMigkNmRqTSZwezJ2Z1gvV2hDaE9taSgoWChNclhRQjlXazQkJFVQJjJXRkVreEgiaERIdlU9LFhPdzhCWil2b0RrNm9ISGMkI1hDQER6UiI1MnsxZCM8NTU5dFZMaUczVEdAYWFtN1g4SFNEUjBOOUkuWFRhNyJSWSRVQ31UUGdP''@;'; put 'put ''cWJmSkVJRjZ9Vz15fWxZIjdgSjQ0UEFMUk5wMnVDSEU1MUY+aF9kREsmYltsdWl9NnV4PyokQk1fd2EqaTlOb3MwJilVYXNxVjM3dVh2dy9lVEYrb09NQWBpKX1LIXE7b3ZodU9ANGs/bnpHMzRxTXh6JDApZmNtSTB+fVtVWzMuSW4vM1ZKPClqSyRiJSs4UW4ofkEqfGt2NTBdL1RtMWB2bXtm''@;'; put 'put ''LzBBbkRUPzs9PDVTaFhvPDw2cVJNcUJUKjc5WGpwI0lddUcleHw0P2ZFcGtESTwoYClTbShER1c7L3JFTzsmTUYxcjRFTj0lSCFDNjhjWHpPKz1HMyo4WTN9bDU8eyUhIjpJKDxgV3xJJmIwKmhnQjU0al5nPTVXcC9qZnU4OHNid300PyM4dSwkZzV+dylGWXpwaWkrVE1oZmkubWpqc1RFOD4p''@;'; put 'put ''LkxwKTZwPlFFRGJUNTBYekQya0Q4dFUsaDpQWHplImd1S2BlbzJ1Y1VqUDtoLGh4PSYuIm49Q2JtYSZBQjpxKzN7aXNGQEx9MXohNDEzeFAlTHtoKXVKOChjLDRaZkkqSylsK35dI0AjZiNbMDp5LCYxQDpNfkwvRn10OWh1NjxAejQlaF1WV1QvQDBFV3gja1BjdGthMVRmVVVicm9vOVJxM0t8''@;'; put 'put ''LzVVNmhGfldjbVBfeVIqdzlTPjYlLip0WXJMY2h8SHlpTzJ1anBlUDo1K1hjbTZlS2NyPzFKdU0pdTMqb3hdTjMpZCl6dlRxWSpHUlRXMmY6aX4sdlordUpTTzJfajVFbU8sZCQyeDF5eih6X0ZwdXJ5Ij19dlYpZjskT1JGRzRHJnplVFF2RTdfMSI1diI9QmszYGVAI1csV3BGRmllQ0lYYjJ5''@;'; put 'put ''c0xTXj8kZ1YwYENLPzZyPm1RSTFtKypSOFlKTjNKZWRESCZdLFpSZVJVNmxkeDdGZEw2Z294Ny4wUlQ5VD1mc1U0QlVkTyNAJk4jcG5ENi9obnpFRTFmKnxWd1pdTmZ4STQ6N3hXOntSSGZ5MSRzb0xfKzgsOTRHYD5neWt8WkZHQSRlMXF2Kn0xYDxESHdkOCksQCFUXnUrXjBNc1BxbGBPaVh9''@;'; put 'put ''QUxAIXxadFZCbjZHZDcuKl95fWw5PUQhVG9fTDFVSkh4UEhWQFRrYzRnUWNFNU0pRVlmciRFPSUvOGREKm1sOWxgQiZGSGJfX3VLYXtycEs/dk5dJXp4L3d+dX4mTiliKylgcEVxYVspc3hvMmZVS0tPRyxUIW4qZFo8Izl2PVBuNDM9ZXt2alNyL0Ayan44QFpeNUVeRXF9I05gPSJ9bCI5PFp1''@;'; put 'put ''Q0lXbWVTfVsqbXQyRXRHNmkiKFgmfS44dTRbeTtjJlgxVVhzbCl6dy8sSCFwVEBCa0lueVpTejZDMDA2cUtVd3UqY3tkWE8qMkRtR3BSIWg6Nlh9LkZKJXRHRW9CRmEmcldRc2crc1hqYEpAM3gzRi9QR249b3wyY15TSTM/bFFpPDZ8WnBeXzNmRzZpT29IX3B1dVlAZz5NNkR+LFBwSGY1LCt6''@;'; put 'put ''MVM2U05hP1kkNmhlIVBSYyEjW1VZUHQpfFVlWypacmklMz9iZDI2X1Fbbj9KQn1LLFN5dCxWNiVeRndUfDZ3cSYjY2k2a2lMei5KXig6XWUwNzMmImszIUAwZjpvJC5sayNrazBmPVFadDlQekVXdmFJMmBneC5tdXkqLEgpRFdYI35oUV5ZfEg8WyguUzZNW00waj0hKzohMWZeenFqd1IkNCg4''@;'; put 'put ''c0BeWWdrLjs/ck5UP1pnay5BUTZEQlBQNmBwYis3KTo0NHc3WnVjM2BSYzBQc3Y8ckdvU3JoXmVhWjhxaFZzKFAzIiksJSYkI34wZzk+JDYkKEAxQmoseTtAUFQjXyRIdkt2MXYwbUtkImcxUG09QHRoVjpOcEx1UTpOKUs7Xkw0fU1ePD9wRlVofUZ9fFE1YzE2NTBTW0R+WiFsdVplQnVGUCVQ''@;'; put 'put ''dElYTXxeIkpCTylmfWFneEtvfmo0T2kwOzphMylPTGIpVmNvWmRoTWFGPjIwaXt6ISVQcGVjNTdUOFs1O0AlcWVYYWcpMG4xO0BSXUc0PzpHJTgrS31VQDtYfC5NdzJDSFY5dmFJV3ZbXi4hYD1iNk0+VUdKR3MkZ10qJj08YkZ6Nn1EVD5qTEEmKzFLQlIobSpnXURrS1I1ZUxPeTRZUDBkdjUx''@;'; put 'put ''enNWcWMvTFlWdHR0cE81SkA7Jj4hREljNUlzMHlkZSFofiU2LjZpQm1iRjBATkhdcktYeHUjUixsTmtrJE55QEcyLjhTez4hL2ZpXTdYU0YoYURIc2hGSHNHc3IqJEl5aihrYTNSLCkhUi5EO1QqMF9AQy5FQyx5bk1mdWFsWSI+NnV5O0NmVH02dTlnLjV4YXgwTmx6NF4vRGdpT1QlS2EpNF9y''@;'; put 'put ''ZmdWdU85Ylldb05PZSFzY0lYQmhBcS9xX28kM0chQFc+cl44Vi9TeDJCLzc7RU1UTWdGTVpgXmtgUXgyPyNDY08sNyxCWFI0cCJwZitSZzRhWntwT2k8S3U7KD1nailqNyE+eXUxYTViKXRMcVpXTSRKO1YkfHQqWTVqLiVtWiY8ciI5PkNGKSRYZl5uLm1tNVdFMVokb2ZGallGOyUiJWllUGN8''@;'; put 'put ''MkRDalFSeV1DSDlTMFtqRUZUb0xLMSs4K2AkWSFaQCtPayFFRSNKdl88YkU8WiZVOjokTWlwaWk5QmcoaEQlVj86JGFdMkE0THl1VGFnfS9GVylJUXVAXSticFQ+RyVeWyt+UikqQ1ZYJElwPihAU1lIfSNRdlssJkt8Lz8+LGt7LGN7dj5wclIxVkF9OEBhVnF1PyFvem1GLDJWJFJzTk5BYEFK''@;'; put 'put ''ZUNeUykzMyRfYlY+PERYcyZlYnoxPkV+TXg6cHVGP3dmTmBTX1FlNGxAQWo4PDYwfVVpNDczKmo7Jms7c3l+JUxRbUJ+XnRUeE5hSC4scHxmTDNpJmU+W05uQ051OXZZZHUiSC8pZ2t5OUlCQlhSIXNYb007fTtiQT5OSEtjfVUxSj1pIkd0UTdSNUlGKlEuT2JLaUFwfFE5aDUqTFtscSs/ZGVO''@;'; put 'put ''e2l4akpqRUpIMjJPTCFVYSluW01tT2U+VHYlR0hyLGFgQy5SUjphV3ZKb2F6UHp1UiZHYnk5IWpJZU8jTDx4SmB7JGA9ZCM+VEQodEZ8NTBgZmIiZ1g9SCl2RWlyMmtiLnVHXl9rPnNOYmlFS0gkIX55cUVHd3FFbylHQ0RTT1h5TlcpPTBESmF7ejA9UkNiaSIuKkJrQzRrX1t1PmEicX14fEtw''@;'; put 'put ''Z3xCfW46Z1gpNlh3Wy52ZDdHT2lJandARj55IyMoXXs1PEN7ViorST4sY2lSWyorfnwoPT9tOyZVOnY1d0BIKShIRlV3eVhqYDJMOjV2dDxoeEBeUVlGdUQvUmpvT3Y+SzRnRVZNIiZDN29EWU09KHNOST5JPHZid0BSP2ImSU10eDBJJVBPdmJtXl5BcXZ9MTJBVHxwfEloeHIrYS5HeCxyJUhV''@;'; put 'put ''NV1MZkdJVSJEK0FqIUI/XVs+I0VfOHNeb0pNeShCdUN2JVtHdiZ0c25OWTIwfiUqaiVuL0NfWmR1QGdufH0+bk1EWTY/dWNuTyN7dlVCMkByTE41N21ZaGJCcXVya3pLQkJuNzd3KzAvTjt3ezN6Q1omPTkjfXA/Xzx0WEBkK3xdQT5hZVspN2kqPVFURmFAbEpXPF4jMEw4I3FxOjpLbnc2KmY8''@;'; put 'put ''c3xCdldqXV8vcllZZHpGZ1FtbFN0ZU9PflJ8VUEhTFBka3YiRGhHSGE6IztWQjJTenxaVSYqSiVFKzJSRF5CZ0FFKkNCLlU0d25AaVIqaWEqLmEhLiFVYWxKPWlYeXtyOSlFMCtMcjRMXjhRMUxAKmJoYTdrIT14RDYwYDBAaWBCW3JCL1hAMEZDTXg5anpkUlhJRUVHcmg6PTFaeiN2WlR0dixd''@;'; put 'put ''amcpXXt8XWpWZUk8fXdTM2VTcUZgWj9CZX5Vb0F3cXVtJnJGQTQ4OkFrLkc+Tk9mJGB0e3A6eTkrWFAqaEdXZGk4am5bKV86WUFSYmluW2grTk9RUzd4QGNzT0s7XV4kQnU+SCZIIXw6YDR7b0o8bEQlbn1CeEpUP0xANnhCP1k2TElIYDpjb3tKLmVWSH1uUk90LCU6Zi5JYl53Q2BGSDQ4X209''@;'; put 'put ''UTRbPkskakQlSW5FK2drL1k2MUp8NU9qL2pPP2RrfXZWKShQZjBEZE4sWzFsa014fG5IQVo4Y0JBPzYwPWx5WX4+ZDppVnN2P3J1NClbaDMkZSFbLHN4JSFeOEJmTXV5Xlc5VXdAayVFXzAxVD11cW06JiVdQmF4fSRgbDZjN3BdMElMey9wKmhSSihDWFtLSWBQRXouYiNaQ2w2ZHNGYTU2WlEw''@;'; put 'put ''fWBgPD8jSEpTb2QvPUIkZWNKI2FTWmY3KEZ1IklrNCQsVEVQRT9mLll4ZW1EZzFDRWxCK2JJYkk8PjopPEsxVDBeNFBnYiQmZEUmKDl1fm8uLls5ZWlXdnRGMklwdWI3dVs3XW1UZjUwYWlnTyJwLFFGalh5M2o7ZDBlT19dN2swUy4rVTJ5Z0JpMntVMkNzVHMoeDBjbiQzNmpqWXg7K3o9bHss''@;'; put 'put ''aU9mUWVaTVtDQlp0ZSt8b0deVXFfNGU1eEBqNCNMQE84YlBEW15KbCsodkU4T1NtX1E4MEg5Lk5pS3Ald3AlPWRqdW8vcTdre01GcS8qQltJaS5Gb2kzQyY3cDs0NnhOPV1DVlYjSmJ8MUN6YChKMlQ1Ll43O3hzbmpVfUh2Z14zWykhWkU1Xjk8MkVbNjt1SWdwTTpuJF5SIkpGUW9AP185SjFY''@;'; put 'put ''cS93OHRFPi5OKDwwWD99c1IxdlNFeWc5O1FJWG9mIzVXJWkrQDtOaSxaeFQ/T3dtIn1sRkhsYCpVVD80Pjkpc2dPQDU4blBESEsxTEA4RCkpfCRYemxYa2gzSmVAU1lmbUd1YHQzdE9vMUojTEtLMF89aDhXZUVHSHspVkVrZSN9TlY9diRKaSMqKTp6TnYyKSh7OTt7MF8qQkAvNEJ5MUNzKDYk''@;'; put 'put ''QDZRWChudSlBb2Vnd08jZD1yXlBlXiE5UVUjZF1mW0hieEBuXUY+UlN9ens/THZTb01YeVVseV0kO3hbOERrO041NW05JkMye0YpdVhpZEV1TVFZWCZXNjI5VSxgSDArc3E8fFR9Z1MhfEdma29Oclk2IUAlY0xZYCYyMDJITSoyOG08VW10YXZdejclfF03UWhSMll7aU4zZFhLRVFRRkI7JWlJ''@;'; put 'put ''ai5nO0o8eGNLI1BRRlQxXyprQiJZL1VkMWhDdWczdjUlei5kRz9UaiE0JkU4ISlfaS5PVEk2RDUpcSxfSTttdT5VOShjcTUxSDllKFdsUjJreVQ1a2xCZC9nNFtoKTRtZVZUdCVIa1IvPE9LS1RMYyN6Q3wpY11qeD8iJkNZX1hfTDppKHxyOlBjeUdUd3RFQ1NtQnVtJTdjIUcjOSRFMEs2LilY''@;'; put 'put ''N3MoUm1edE19JWw+O3IwLDN3UStvLD90Qk1JSmRRYCo1cEMvWWkvWSNtXysuZEROeCkqJDwzMHd3WTxRbyFKITJuWnRvdUojI1Y4eUZdM2N+L0ckO2VaUiJ4VyxKfSh3SSx2KkJJZXhnZDFqa11ITF54aVEwSntwaGQmOyEhKGo2dzRDUGV1RX1fISV2VVhPQHp4THc2bzRhMkQsUmhAXmlhLlI4''@;'; put 'put ''UDJHcGY6YXElRH5pVERBX2dAbDolPXFKU3BlVnhoZSpGTFQ/Sm19b01ESlNPUClwZjsuITEvRSJAflhbeGdGWUZMJkM5bXN6T0g2a30hR35pZyZRc0pTalFeMVNAbj1hY0pSQCs+PD8iQTJVNVNwUU9RMGgkMV1MJTd2VWIlZzwpTFtoY0F2VWplbWFKRXYubDZ3ZXxNZ1MjbDtgPFk0MSM5Xmhl''@;'; put 'put ''VkZBRnNZdzwkfmVAI0Z5UEg0Uk1MZF5ZNVZJZyhlYGhwbUh8K2EvQCwrT0J3PFZBMSlGQTtySFdNTV9CSlN2YTw1VWxBNT1rPkZVeWc2MWtVcy4qSSlfJGlYYl9ze0QkbyUiUkBVLF5pS0gvWjQrYHpZQXVQPUFDKW4uaUp3ej1kNXtQaDRuWVBYbm1YemhlOVZ7VXwiKnRHdHElOXxiXkkhaXZI''@;'; put 'put ''MXREW08rZEI3ejdweHBZTW5hd2AsT05ZaEFPSjpuOixxS2xxKm8kKjkiSztGa1Y4WTdIO3suTHkuKE5iRF85Pi5IZksxVWwobl5wPUwwWHRkJWw9KFpDUy9lUktoOUNyfCRYIWlOc0FKRFRgPiJ2QjI5WUF3NSJIJEF9cndLNndXS01gTHg3NUZHUGgqaC9HU3B0fnZDRDtKKiV8QkIqdnVvSHc/''@;'; put 'put ''cDJAYEchUE1USnVKa1YjZmxZfEh4UW8mZjRSMWtlVVoiW2g0OiJlRWQ8a0JqI0lmJUJEWipNajlGQCk/Ui8zOVlCXVlnW2ojVCQvME0lQ35nPDVTanFHelpEMXZTRFgvTXpbbXltK191RCksbkxGeCU9JCtyNTtHRnFyYCUzN2VJelUme0c+Xyg9ImBQYTU7XjN9Y3B4MmZAWlJRaiQlfXBCV2B5''@;'; put 'put ''SSUqQy8/JC5UOyY1Ui9zWCptUUldb15WVnQzQlBmXTpNLGRgUHtZSE1EcX5yPlAiYCZCb2BlW2Z4cUh4SSN+fE8xdzxNZik3b0ZsajlTVktRYVpbX1cqdGd1b1lxOm5MSU9RSnZgUntFTXVjP213Q1YhSiRgaVJ7REs/MUg2NSVxWHFbK05EdWZgYWtKIlFjTEY2WFVgLjMzfStOQypWVkdaamVT''@;'; put 'put ''NF5nKGtvfCt8XVpRc34xLFFJYVFWPiNzI0MuaC4/VUhzQGFzX2Msek5xOUxOY1tOZnQ5ImArMHI2UEdaP3p2ayxNJCIzWT5dd3AjISxEPilocXJQKHlpVDYib0dsJUZIczRHdGhmd0BrUEZuck5gKm9bMSw4O1J0OnExTGA7ZkUodktAeFIjNWkrdXVIKj9dI3MvQDBhcmdLJV5Mb3s+L2RjVj0q''@;'; put 'put ''S2sxTDxRRnc4fldIKGEiMG59VStLajhHXiY7bU5+cXBvQk1eY3ZOdUN4R3M0YzxsdChzWzwvV0lqM3UyYyRNZkdCKiZgTGlAQi5rUlU2U21gc3dsOixsci9KekR3fUJbaSJ2PTM0W1omeENXTVszSzdqcUlGMj1TL0RVTEVzWTk9UmMrbldJMUoqJSxxXjNwPTVkeVNgPkh3Y0sjS2B+cl1SMn05''@;'; put 'put ''JU1QcCNyZW9rfXV7PnZPRi5McSRmRkpXY2RbTHdMYXgzRFN0TjteL3tuTWxAbVdPWTJTd2g8cWdRdW1MTHxbQEZHcElYTVN4QEdiXmA0eltEPVVdSU1na2YoeWojKXY1JCJ+blU2a3tSfFA5Z2QzS1I+YHwqN25fWD9LJigyfS8mQmU2XkUveC5oIyZNd0FsRTw+Nk8jeCY+T2pUYWVzKzAjOjhH''@;'; put 'put ''ZSlwU302Uz1Lc0tqUygiO1ZzO05iNW1nUnJvZltnOXtTbjQuWjQjajlBd1NtIywhJkpKI147LjwyZ2pYVj5qYlsrLDIwTEBleGJXdj9Gb10wc310RDxCR041XnAhIkR6Kk02K09zfTopUG4vfVZLPD97YHxreVU7V2lCWl9+dmt9RGtyPktkcj42Yl44IUBNdyp1K0JyTmNtS09tfH5PT0RyTlk2''@;'; put 'put ''YntWdnhnSkgoLyRIail1WmVqfV57ZEh4Ii8qM0x5QzZZMFhoTXE7TFopMSlSblIwQ2RIXTNjeltBO2gjN2s+SUxJVSJtKy90cS9iXUd5dEA1RUVMIU1tKzNyQEEkNDE6NW16V0NXRjZvR3BHVS5YaVc/Z01JVWB6RjI2YVc/QmtGbVAmUyo+Pz4pU2tvaiVQWGs/IW5mXSt8MzxSUD1lOHZUbHFa''@;'; put 'put ''SFsxcUspTXBVcjJ7JEc8akJNcVdgUGhiNEpHbk9wWSwjakdDK2FyQXJHJCtnfVprRCxqM1ZUdG10RSRQfF0zWDdfM01SN3pmPW4kajF5e1dFQjxPPU99XiVbUEpIU3d3WWspdGdlSU5HR09QUUVHcTN8QE1AMyxiMGFQPld7S3swYWplaEFReURQfDBtdj9nbWtSR2w/PXI/Y3dHciRyfFQlIUNt''@;'; put 'put ''VDo8YFBLYXh6LGd3SHxvYkUsTlgwZ2l0UE5vJDNhYyN9ajp7VTpzJl5VO15sZ01Pbi5VWGliPnZVTiMlYz1leDMjVyoiV3IpMCx3QGRxelk/fUNwRDx4eWo5TDxaUWdqYiMucEFyflF+L0N3QTBNXiR6VF8+JUFNL1FGfEQjS3xVITZKcTM2LHlDPi9RTGJ0cX0zXjkvIjoiZ0RFOSleMjF0P0xg''@;'; put 'put ''M01fWy9BayUsdjpqMyhmYTtAYzs3S15AYz1gOEsjOFVYbD5iIixWQzswcjEsZ1BVWHopTHVFPlttXVRKSXkpWG9fTD9BWS9sbmgkYVRhPV4vXTh7YXdpRDNpRnZuVFFTZXIyIUU1S3QrO1UwSXcoZF5BYDBNVnlmPUBDNU08Ji9NSUVLdXwkS11wZnl1e1s3KmJiJSQ1Sj1gSikkZ1BlUVFTYko7''@;'; put 'put ''MCluZEFKUkhydUVpMShYeGUkO1AlQk5IWGVdeTJuQDtYdiQreTt7KUJOLDtXQ25RZmMrLE1jLGorUGVvQmsvRlNEMm5WPlFeQy5vNGsxL3F7ZkFJbX15NFtbPkBjUEU2Qz8iZVcpV0d5dVghT1dsKlF1ZjVqNDFnVFB1PmZvNSROZ24uWEZIW2duKTVsdC4iLk5VfUJkNyplPUEudzNNZTh6IiZE''@;'; put 'put ''di9GaEQ7PzxkJGVITUVaU1BjKVVzZkc0XyxSV1FoISQqVXNeV3hLTWFPIU8vdCsrdVIvQmZRQF9FfX1mIVtpZHVOIz4/JU9FTzNOXildeF42Qk1AciIxUlRnWnBmWnp8fVlMMmJCbjoyZUcqPVopTEshcTlVREBYJSwxWmA7JFtfQD82bkVIeVd2dDVLYEg2SyE1MCo1V3REaS9KIW80QyF6dzB7''@;'; put 'put ''Z0xyMk99Zlp2fUEoKyhDYilBbllXKVo4MVNRc2VGeHFMJlMqTXBUQEwwZDZYXW5VcTVDc3E2cy9mOW8oL1gkP1VdeUguN2s6NV5pe0hLeyhUS0B7VmFwMFNvcH1OTFNJMkZgfXk2cS9lfWpWK14pK2lXQXhbZGBzenYpIXVefDc/WDY+R31UflArOmJ0PTloYXl7akg2MWV9NVFlcTR8fV9nVURi''@;'; put 'put ''cFtNMFUjb2k4RHpmJVU9U3NeZ1J3QyhlPSohbTs1JWdHLz0rOmdYRjh2akkpUzR8aCQ2L15RZy84dz12PnlVQSwma2Y9XzcxN3k8T0RtMFJiaG5PQCkzcDxKQi4oR24qVDBUSlNbRnZUQ15mcH1wIm1OPi47ZmFYdWhRJHhZWGZHKyFbUH4hcz1tKCg1dXx5VXhgci9Tflk6USp3Pnd4JmtHJjlk''@;'; put 'put ''Z1RvQz89TUVUazZdLzI4WF52emlfNjVLcXFZa2hSWT4iO0dyOXRiYU9NdCpMbFAhQWthQ2o/Lk4wbmosL2lJfWNGalt7LypXdlExQGVIIXVoSHVjOmtgX2RMJntYeCVaJHtQWm5GcGxfJj4mKkJmaFZWLltJU1E6ZDQzL0ImP3lhV1Ekd29RSlR4bVI6MDNeQHdlKnpQRyRYWlIkRU51TSk2dkVz''@;'; put 'put ''Ri9uJTVqYj5MYml3RzdZOkBDbixNP1diVkQve2c7QzFnSlBoUHZaJVpmWFRuaC9WMExKZndlOFYvU1F7MmNCcj1mOVdfKVt5dCJRWTcqZnt6SDkhOGQvcTJDVWZ5JEZ+VixwTEkrVWxudilIMSozfjthYGlBNEBmTX5LLGdZRF09XkJoWi5afFZpbTd3S1pBTEwrVmQ7enFedHlseUtEck5IIXp3''@;'; put 'put ''IX1yKEVdLj09Vys/WVJ6YUkhRVlMKmZvbiMjPC87Rn44OSlJRURDSSVlUj5POEBlPyVBRltgczteIUJlKk0/NmhQZ2B9O3IiRT5qNDl4UmB7OkRwUWtEaX4kPj9Xb203ellaSXpUTHYkeHJ1QnA5T1MjRjZSdVtVLGlISzJibFdvaTUvejVmalFjPXJYMHJ0SEN1RGJvIkJzP21DJlkmX3k3YXtW''@;'; put 'put ''SmdHWUcqUnFGc0Nra05hSmFBVlJrJWNiOV5+PE1fSXQ8M3dCVEFHbiNnV15baTBGMkNdLEZSLGR5IU9ie2hRXmJRXkJsRF1FIXFCYVJHMHI/R0NxQlhGY3FrQlo4LjVrJERXdCwzZWh8YHozbjRFXjxrXVZQcy8xUCZyRmhmZW5IcWIyKXJSWnZbZT00R09NY0ljSUVDdUZMKEZ3PnZ9Z20/WWZP''@;'; put 'put ''P2M+aW5tVkoyVEx2ZCJLMWR5ZCojU0VmYSlvSHthRlYoZ3xQazAkUG9fOShLaVRYT0pbZEd7Sm9qNFRfJmRfUTcxKCtCZ0wofV5+V04mT205Sm95akJ8dFh2LklMJmptQXZwdk98aWNPRDUrJFlZb3FPMylHVm53Um10ZW8+Wj91d2FsVXMpcGxpO0hGTjprKTQ3bSpOMCk5I3dJc3UhSXlAc3s6''@;'; put 'put ''aytMWnw+ez1RISx4b3Z6dHpLSjUqTXo9amsiPnJ3ZGlnXSRebyNLMm5KKXVXVXN4Q1dgRTN4KVhbKVNbMSpiY0lzQClUNWVLakAqX3txL00yWE9iXy50M1dAazI3JWZLQVl1T3w6MXtPVXNUOCRGSjZqfSRkUU9sYToxMztbKWomSXExdCovQT4rQzQ/JCoqOjdjX1pIKXJ6bShnMElFPXVjaXZb''@;'; put 'put ''aEBAa3E4Ll83fiwxY3N3W0QvPHpxQkEjMyExayErez5edzJlP2xjWCVoUyRVY0RMd3VPPEN4bWhMKHNCLFhaXj9VOEldWFR5NGZ5IU4+IUk8dU5xUk81KUIvOGhwYC5eMH0yUmxlUG4wWC4oRDVFN3l6X2tbTTt0aSNNTmdeJkw+L2pLXmdSd0BtdWo8RFlqYlg1bVM4fHAieypSPFJeNERmS0g9''@;'; put 'put ''dy9YN3Y0Nik9R0pbW0xKd0QmeDJ4cnEoaEd9R0Vndk0/LFYyWW5XXVEoPC5hVmhkSVo4MUMxbypLS0sxfWRwQzE0IX5ZVXNeZi5sLkBGPi5ocD8hQmt4Xm1mRXwoMS5QbXRoI3xHR2RgXjRSVEVmSE00USIwXnxqLHo4UTN+NCkud0xiOWIvUF1Mb0hvTDRwME1zVkxCMkclSUY0bSR4cGJuT2po''@;'; put 'put ''RUEwcjJeeVcmNVApW1M9dXk9bihFb0dsUH4uNmQvfCwkTCled0JOSmpVYXhhezYmNyZreCguLEVXZTxZemhIJiF8QGdEPnc2NXd2azAlIXVQfjp5JEwpXmZISSlzNCRedXYvOEc0UlAzfnlXT2o+NCNELFFOR298bnFtUyhtTWNuPUFsJUpUdXkwV1NRPFZ0dzhMLE9WNHBhNExgdmM+S3MzIT9I''@;'; put 'put ''XnoxZUZZcz93UC49ZSkuPG5MPm5lMzdka1FQczx6WCQrZzh6ekFuOVsiO3gyNUZMO0psLHR5TSMsXntWTF58ci9qPms7KlJEWTVZUU1reTsuQjQ7bSpnSk9HTiQpbU1KTkNtQjFiYGtHITE1KXdjUlVOS2NjTUhLTipmWWopNVs2JjJLZ1YlLjgiK0BdODJlVjEkbFIiUEBvMlQ1Wz50ciN1aG9D''@;'; put 'put ''cVFIK31WKV9AMmM4NEk7RWwkNzxEPSJXdyFxSC5FM1dBfV9ZZm10JXlXcG92MzRrUjJsJjpbTyZIMzJrY2crcXd3V19JWz9WPT1FK3g0V2Z3JWRoTDN3PT14TkdWTXgkPHxHR1Y4c0RiXzFZSml8VlU3S3E0OFYlR3E9TEhvJDBfIilde0lSKkxKNmtVKzNLO2c0Zm5UMkMmUEVuOUpbUl1WRFBo''@;'; put 'put ''OUF5ST1FKkQlOVloVGxgfTMxKUc2fCNjeEdOMV5PcCFWU0xBMUVKVzF7TVUuNUh2JTxDVk84KnRGU3pNRU1EOVU4RTlqPHIrOiJHVnV6TDghYFIuQE5hWFZsJWt4TFZTRCNuaTF6SFFPOE8qKlRlb0Y/VlA3MyFRIURGLjclX2xJcGxVR3xyQWAwVWtFLm9KZT1ySClrdXdMQm5EMENMT0x0e0tq''@;'; put 'put ''Ky51ejg8R3w8OGBeQEtIb1c2eCY+PShtSSEzR2dCdT5XNzJOQ042dW9lIkk6NDQpWkthMC9yZUE+K3NYKyxFfGcjVXN0UThrLmlJZU1GfHJSVS4+RUhCZzB1PTBsP1puZHskZSN7d1ZnbUcmZypiXjFbYF5BdT93MVdTT2s1aX53V0VYZHAvd3VtTWR9VVBwQl09YCMxa1JRfnVMRGE8aUFuSlBO''@;'; put 'put ''Qz5SVD1XeGJvTGVBUlo2Mkg9KUI1ajwhMmlPI19KIXxoeyxLMzd4TGdTVHpWWE1EcXM9NnNrJGtDfmdPdSZjQSwvKnEsTl5eXlNXQnNDNjVuI0s6RmpNekxLSyZ4M0hFa1UkT2wzOn5LNDt6TFNfLnhZJHk8U3dGVzB9IzRrdlYuMXhFeDd1ZV51ZV9lW3tyXWp+cFkiJXQqNTo6QGt2cFpBJmhg''@;'; put 'put ''SiElV0dwXXVFWGcvdHhHSk8jQlIrJFJRM2NlIzB2UzQ7akVzOSVDIiRLbGlGQVY9ZXJMaEV5RjBISS8raHVGfkNxZDQ1fnJsR2h1Umspdyo8IjBsblBzaEFoa285Lil4LGR0NGllK2k7IU01cytsNCQzUmwydVl1UnopeCxAZDNhW1FPT1NLV11VO3RiZU8xTVpUJixQOUd9bkUoRU4hKVF1ZD89''@;'; put 'put ''ckphInVXLD9sSGVFUEpJPDlKZEBJIWslNDUxXSFTd19TJWNqTm91OU4jOkZjfjdFV0g4NDBnXnRpQGpwUk1BOXB5UElwSkxDfEZFWW9bZ0pIPUQjWGA9QEtmUlIxaiZsZ082IiMjYl4lbyQ8TjU1IVchfkpYenAvdTpDV0p9eGMpJDFPQF9Hejg/e35NV3RsRFlfQDV0Yy5zVUlJWU03VFdlfVYm''@;'; put 'put ''L00+VjYpYGImQGwhYDNpd208QGhAODRnMVBLKmpZYTB6IXlvSTkxPUQmVWg0SXh5bFghL3k0IiZudFdfcklZX2ZmX3xBOjZXNFhDbmpEYHRkOipjQHdTN2tTIzZWJDAwKHh7U3hFVC8+TUQsKldAbGtFMD5peFtJJWRLaSZZTitDYk1gfGs6MGthJVptJHgrOFZia2xeUSJ8VjpVeU1iUil8WFZK''@;'; put 'put ''P3d8cCNmPW1Se1VpSyJNYXRre1Z5KkhxZTY1VFUjKm9RMnZuPTNRPVsmUShKcnp9QWhrISV0MnI8UkJ+MX5nOixBcixHWFMrMzddXT97Z1Q0XyldKn10ZmFtYEE1fjx5NS56RDZ6Qy4lJDdXbzs4Nk9TXnBna3pLWmoyT2VockZINGYqJnRdI0tdYkNzMW0hcltDLyladWNZbXZxX3xQKG4/dGBa''@;'; put 'put ''XVpyc3I/bmo5Q0xPMGMrQ3hGYClhKkxda2sqXy9rby8qQj9DWXxsX2hpcnlxS0FheW0/dGgiL3k1S3owIWduJihTbyxFN05IbFlVOn03ISFHcFJyJkA/ZDpwdV1VNE1PMiI7I3xIbFgyb09sV3p+SSUwb1ZtflA3fWckRF1SM08mNUwwLD0kdiZRRyZyVzZxZ2hsZ1MjcWdTPWY8ZilzVUg9TXlM''@;'; put 'put ''WiZ6JXMsVlQuTl54JjBmamVMT1l4K2c3YjspRU1qZXRNXjxkJmEvOD1BVkBCYCQ5Jmtye3RxZ3Q9PVRXMU13OXAlP3VIbiVhYm0zRjxDNkhXb3pQUm9mUVNpOUQmYUlEZHdgXVFxI0JlVTxRP1A4I3xhV3s1XWVLUi5fdDc9RUVRbFFLPW15U197emt4dDRUfW4hNi8hfEVKc3xyaEFYTmhwZTR7''@;'; put 'put ''YVc1aS8pOldTaCl6Qzs2NGUzdElZKjd7T2VaRXcxZTsvUUUzZjw2NDBWTnZsIUooSndRND4hMElbaURYXjJAQWR6NT1LdSxlSjgmRWRnVFVqOGA/dDklOzRAMyMuIWdbVigkOzhAQ34rZ3wwZn15JXhQIjpOcGoxYzI+NiQ7UnBdTzswSVAyMk46dj5VIj44bTpEZDVhMV5xOSxwYVdEPk1nPWQy''@;'; put 'put ''c15PNWEkXSlxfGBrITNPLmt8aTpgTDZ0LF8jTjloW1g1U1JxSig7TWdsIT8vXiEkQDhqejcvSng8O1ImTCxpMDBiZFpldCUjMGYmMF51ZSQhbGtjeCFkcVozWFNROTQ4THU5e1NXYDhLK2d2PEAzKSFiP210RiNAPEhQLyQkNFtoVjtqbWwoRW9tIX1XUyohano6PTNIe1Y7TWdLXTs1fiE/Lyli''@;'; put 'put ''UWhKNyhTLiZXd2Q9bHdRRGtTd2duN0VSYjpsd3c0T3RqQm8jci9VekJFJjJLPm8vRVFTPURdO3Mlaz58L080I3peLm4vdDc8OF4lMlVUNzI1R2AsQSZNVU1sM1MiXiYlcVVAKzN2S3BGWmhDblQyZns0bGksL1QhaFhzMkRUKUd7Jj1WMmY1VzsoVzY4Xmd+SD5JTDpLezIkUFdoTCNvRyJfXm0s''@;'; put 'put ''MG9BQ3FZfXFncWhPZWY6SWI/Tjp7aF4mfFl7ZU59TDo5a2VIQDwoQ0FNWik7UWpgKmsuXiNVXSsjeT5DIUcoRGlKb3s3e2pPYyZDZGNvZEAzRV1WJEBlOW9rI2Z3c3cjdkJ8PCZGImt7e284ViVETCVALy58cFNgJiswSFllRT1LVlpKI0wlSFBKSGspYn1IYys5UUlIc2FHWH02KUJLR18mPC5f''@;'; put 'put ''YXVsZWpzSVcsMXFRej5mfHd3X0h8aUJWaUtgXTVQPHp5LnheciI9bEE0X2p+LkZuOD9YOWt7JDpQeDEsSmB0aUJacD5ES0F3a1doZEk2NUhDcmRrWCE2aTpOKkBTJUZgJTRbSCtFXyZuWXJpMy9sd3dENV4vJlZiTDZVPEJfQThbT3UwM1srfS46PVd7WHtUcWZlTkhYMyxxZztgcXAxMFtuL3co''@;'; put 'put ''K0tOe3ooY0slbCo+TTs4P1BbVXVgbkNaMCsvR3w6KWR5VkxQdmVsOE59aHJWWF0pJjlfMnszVGE3PVU1aWdRXWVXXSRnZ311UHt7OUUuOT0kamtXe1MwbDd8Y1tlang8VVc5S1hVPFguQCx7S3s0MmkqI0gwayNqeWxGfVcobiIpTHsqWFBidExxc3I/ZkhrM2FTY05bTzdhdkwqLiFda11XX1Yw''@;'; put 'put ''LkZgSj5VWTBFejsyNX0zYl02P31ncWJ6e0ZdWjFjbTlOeWRQeTVndVVdM2IsOSlJNW9LcHc2IzBoYjN6a2M+MExPV3w6MT1eYz9ldHtMN21tanRISFlkdUVSJmolemVlP3xIPlV8NUxCKFhebTwqTUZEQz4hcDUjN1ZURnlGWEZYRltsKFdCVl4zRFdLJm5fQSkidkIrUHZXVys6SXJlS29HXTB4''@;'; put 'put ''MXx5Qnx5OnR5PEYiYWxRPFtaTUgvQXdSJltPdURwNkAla1NFMX1vSnEiNzk6PCtNcEM+WjB4YzsyQ1ZNal4rVzpWaER+eTJsTkhNTSR0JWdCW2Jje28/dmp5dnFLPmw/VC9nfClWay4/QDpHU3FOXmtsVzpnNzN9OiZ2OkxTXlBVYTM9Z1ozenhNMXhiTyhUKVszcjYidlJ2LFZSPDxXaiZWT1I4''@;'; put 'put ''Rjh+dClxOHhGX09lIiVxSHUrNlcjU2xmNGc1QDpfR2RXcHslcHp0W21lV0lqOGJ6ZyViZCxIdFVkS3EzOmciV0lPLms8RGsjKGomOzo2T1g3JTxgJj1CJDF+RTBBXmssam1VYCN7PVVkckd8ciwrdXdGcUpSPF52RmhndjkpPWw4Y0dwcTQqUkl3K0N7V3hTW3FGOmMmKEpHJUZrRXJZVnNVcT9m''@;'; put 'put ''XlhRXlFMYSJjQ0BgWl0xWjw/ZSI3fCk/KyE8ZzpMclsxMkAsYDJAWXs2KTtDXng8eFd5SE5rMG5KOV9AS3s5LEJ4RE9DNkZpNComMWl+NC5ybTc+PTZTIXowOysxJkxfKmBbVmIvb1gkPyFid1FYQT5yQGVPQ19oblFsXiVlRjtpVCgmNyZTfWpqJW00cSMpVno0TmxrTXsmejRtUiFZRyVQZW51''@;'; put 'put ''NmNPVGRXa01xWlBRdn4rSXVldVovPGsxMjdHdyJ1I3tnJlltOHdPPmE4WlQpRz9FYG8+NlFuUWwlNz5TfnBCJjlAK2pQIXNSPTFpImg/XTt4NURAJHZJeXdGYVNnQz5nITAqO3I/RC9SeFpBUn4wTU9NKV5LakwzYkkmSCxdbTpDYlN8dns5eHV6fDZkcWsyPStYUF02Lz8rMkwmImsvLnBYdD1W''@;'; put 'put ''K1BpKzU7ciRqRnRXc1sxYWN8OU83QT8kbTw9filGRXQrKi8yMS4sZWhxSV9uRjYsan1hV1h2WVhGM2JRSEhUTjdFd2V6b190a0p3OUhQJGB1WHw/K2hAIVhTd2NTI2BvQDxVZCl4RHRUIzFLL2xUNCokSS4lelJuRXxfajtwZiFGZCNfMzR9IldBPG13Lk9fc0lJbltQL1pyTUFvalkjI21CaTBL''@;'; put 'put ''PF0vSGhKSCZaSSYuUD5kWHFiPzE7LkNiOWtZRXRPMUVgbmVYcWJIbEBJenVGRToqJVdIWCpeYCRdNDM+RW5JUTFFQl0oTGFRUnhTUnBwQEhUdmg/OURtJV5VQTRRIWtnPWpaUjJMdk5+Wl47UjxSRGAuRnplR2RVNHs6Ojo/PCElXmkzX0tVcmI2aCgjVlRSfEY+QE9FJDZLdktAZm0oU0VaMGdH''@;'; put 'put ''Vl5PMVRrZjtkbkAsISNic0JRKyFyXjAyZzUwUj43YEtkZm8wZmVvU04wSyRneyQraSxpR1AqSGIoU2ZfPH5lckh8QnIvOjQ+V25nLDBvSG8kb0ghZU59ZnRGWCZkMHBwSShAZ3htUjt0MCxbJUpnaHNNYXZPXXA8UzNtLzlJWUl5dzw8PiNre25nNHU2a0tZdkA7N08vRW0lP2dnNTVHYHkqXiY7''@;'; put 'put ''N3Y2eiI+QzVxU3dhbVhfJGwpYTdaYFNPKC5RZ2ZtPiU6ZjApYWlsM2MuOH43VnlvYVs6YS5XR1JXNC9PaFViKURddiZ3elFaNiVWfm46XVBMPXBhdWouenxOYEVBLH52PVNTRitsNWIuYDJAcXd0JGVeS2U3a0khLkVPOV5YI2BsT2UzWmM5LEpYbTVseUh8ZUcqTT42QVdrbDNWXlsjXms6QT5M''@;'; put 'put ''aioyNV03aE1dcmw7UCtgUWBhfUMrZH1UJjc8JX1RT0s9JjtTNk1gbEU1RjA9cix6VV9LJWUzc1dzU1MkeDl7bXtNRS9tbCpWJDU+VixNbntxUysyNzt7Qj8oSX06Z25JY1gkUVl0JUQ/Qy9OS34/aTFue0txMz9jeT4qbWZoOmZhNzg7bCt1SiZiSyRoTGs1IyUwLyp+JHldWVZGeE9kS3FuV1hW''@;'; put 'put ''V0RGMEZeXWcxcUB1LFlyN0tefFQsX0FTdEdPTDExT0NXYHFGcj9DRnNSNjsjTXxWWzszUSVrNVpqTzMzcXFZQmIvZGU8MlpZWGtpPnZyNjc7ZlRBO3tHZCI3PnQmfCI6UiF3cTFoK011Y1YmPCNCTWU+elF1PWBWUHx4dnd4dzt8M3NSSiMkKnIzYDEiay4qLzhNNThJZWM3XkZmIXBiIz9vfjZU''@;'; put 'put ''L28vfVVWUnMqcEd5Rn1ITks6ZWxkW194M2tzTnxWWVlAK1RQSHN9Y3dKaCxwa1IyVztMckQyQEVET3Z5bEJLL1Jkfng/N2ZvSGlHUGdNYSk4PkJPKkB7S2h7UjA2cHt4NDUvXnhzbTEjOzBzbVpIZm0sL2FwSihhY2MhVk9RIUU+fiVZU0hwRyhKSkBNP2E9JjgxXmpbKzJpKXc6VCJYMCxATmJ5''@;'; put 'put ''TDdwXkFlYDRwezddMk9PMVkvc1JqW0tOU0deezREdG5JTkdFTXFUa1Q1Q3VFK3RvN1RXUU5XWzsuPUc9MSs1a1skdTMwME8oMTksTHk+dk85XztTImp9ejJ+TzZgUy99Wls0PndVcjliWH1KMCR2XX5QSmgkbjZWIWs5Q281ODB9cjdfbU5wSyleTTFXUToydHk5T0BrbnVtUkouJDErbipLayZ0''@;'; put 'put ''VDh4Y0t1Z0BUMTdsN2pGLns0PHcjbHtlQChGT1JIT2xxOHsyV1MqbkdhRFpPVi9tZyZtUStTaWt4MDx3cTxUYlJIT1syc1RCVTBPUnE/VDtnNFM/VDZjMkY/ZEhxWiV2ZVVyc3ZvfltEW0UmO1AwJXNpKjNkbUl3PjledEkmO1dQeX50LEZ9Q2M+ZmA7XyYqb3BQcVBZblIyLDkpSWFbRCNiW1d7''@;'; put 'put ''OFJacEtZKmlLJSVRViRbM0g3dDpBbzJ4cS9fd3tGLjlSRl83UkZgVW5LMSN5NFpKTk9dTF0wRiwlKj9ZYkcqUlgjR08pbClBTGhCIzlYSEVdZFRITkxxM1hkUl9Ye2s+dGFsWiZMWiVtZThrMD54bTJsOVdeX1BDUEYoUV04clU1W2V9PWw8X1ZGI3N5REEjLzhMOC8jOEo4Omc6OGxZUTJEcGsy''@;'; put 'put ''aCQ7KjM/V1RJTUBCOkA6Mjh4T1NmPGchcS9wJT9dbCRtdVpea3A5bTk2MEJuIlV+R1pQWSxJSjcwYD9oMGRhNV9hX00kWDolak5mdS5JaSptYyFBOEpkRSxnfTlXPWsxZThCaDsmSkBJY1FDfT0mXnk7NipSK1hRSjEsUCM5JW8pcDJ9SVFjSTZVYWFUSSFELFNUVXFJN1gjYV5EenBKTFYqMnFL''@;'; put 'put ''WHAvPDshRH5ISyk9NGwpcEpaNzdbT1FWdW5oYCZlS3hScmpCQStbTUZsUTZofGVWMXlfKWMsOFZmTD1UXjQmXVUmbnNVXTFzLlcjbjl7L1czI3J2Z3Bval1SJV9OJUQoVXNtWlMsITArY2kseSVbN2IvU2ZWZiZlPGdZSygyWmZsPjs2dVZHWXlBSmNMYyx9WnJaJlE/fSFQNVIxaiNEZ2tqNkJK''@;'; put 'put ''Y09mV0p1SS9belosLj4senRUJSZJaDs2N05EQEkoZVFiUzVEbDNhTE8rLCl6XTheejBRS05LRG99IXAjIXoodkVfR0M2SkQ7dlkmRGl4I1VsfG9WL2U0fThQNTFgfT9oO31nKywifHVrbFRuVmVqYCpDRGNjNTs+YnQ9I2dmVDxXaEJGV0VvYEsyfFJ6d1BRT3tXeHd1WS51PXg/a0BYL2o2KXte''@;'; put 'put ''bnorOGQ3NipLfHg7fEgheihMM1cuQEtZOllPOGF6QkhHSDZPRHg8VUVCSzFULip2fiUvYn5wR3AuVWdRSiQwXlk6TWd5VFcjaFI/IS40bGkrO0F3PEl7PGshVVImPEY/WXZFJUBRcnpbQjN+cHVwRkgiUz1qY21IeHlmRWJqKkY2eGhlfSlHdShnWT9XKUdHL2o8TFZedjFbTl4kOjUoZD1mZU4z''@;'; put 'put ''dmRVQSVKNGtvQiVhZDJmSX1GZmpgNzpFbzUlN1QobGJUQWUvYXp7Qjg1SEUmVnIhaFhkN29LVFpdTzhoKEE6S01+by46QihqZHtkQ2hBISlDeFg1eltFfCw/RXwsTC5aMiVrQT5LVzxFMjEhbih+W1gqMVJ8LEZvPVU1Z0dRYXNoRG8hNjlITDhjcGJwaX4wdjUkOUh+UzdKOzg/X29gdHFXcEYk''@;'; put 'put ''cT9kNmhyW09xa205RXdYcmM5dFF1alIuX2VLK303OFR2aDdKP1MzMXM6RDh6VjQ2dTBhXTQmP2I0dnVVSTp0MilRbjllN2B9cz1xPVFkdiFOe1NedFpMa1Vybns8XVVeQn5jYiNFJjssPGwoRHI0alVyOiUqczlAU3k+OSlJYVtzMDAkfTBdME4zInJwMFNjS194Nzp8WWE2JVc3ZDY1PEFpImRI''@;'; put 'put ''MC5yVzttanxYWjQud3A+anwsJSx3XW5kPE43S0k0eSZGLk1mKW9QcjZDRzs2e0p5dVoyJkV2SCQ/PF1MQFtrVENXdzhuRVA0RGAkdz0vMitaUjdEdmsoOndtVyZPQjl4c2gxe1kmPXZTREl6KjxvdlVFdzI+aGxgfHNLQEI2YGEkWnNgb042PW4uRnp9eU8kZVBUT0VNcVNyOz9Pby9XdCY9eCI9''@;'; put 'put ''aCRISC9bXyZxT24lT01iZUZke3tTPW5POT9gRD8vfkA+LEhucTlHPXltYSRWYnx9UWNxNGtVZXk6YzVeOzJuOUsqY01Nbk5ZcDdpR0w2NWJSYjo9cz9JNHFaJDs0MFpiRDQ6cWtobDxlLngxSDQiR0ZgeixqdUV1NCEqOmF5LCRoNE5iO1lbITR3KHxqZG5ifjR8JEhZS3F0JWUhdSVlWStNOz5+''@;'; put 'put ''aDZLLH06XV9VSG5QYG8hLz1dQj9PZ21iOjB1MXY9RnByUTBjZ3RRVSt2Lzg8ITJmO19iflp2ISUycj8lW0hLcTduUDF7THIkaTF1Sl5HIVN1YUMmWUxkbyJHKWtld3BeSnh6QzJ+WX1FcC9BSzEjUG9GVlI6ZzBGeE9eenJRP15GZGsuSjBNL3QpLCJRZj4vWDZqTCgpNjFkUmEiOUhQNixKUUQ4''@;'; put 'put ''aip6KmEsLGkzXW9LdmhRI2VDanlla3FkOUdpIV1fSGMhJS57LDp9ZmNEKSs2OTF+VnBtKiYwZk1rMVg4XyhxT29Lc109M0JbLnBZUTJyQTJTUFVXL2IhQz9eR11WNmJOSzpOI0JoWGt+dytrJWVPPCh2ZGBWXll3ZyZ5ODs1X2klbEhQWSk1Oyp9eUp5LHkuNHNQKkEzcj4iRmU8PCxdMDcsIz4z''@;'; put 'put ''R2ohaGlPZCFoZ2lpakZ+Q1dvMEAqNTomUCpRNVVaZGRYYVt2R2MzUU5AZV1saigwTjZ1eS4xRy84R3chNTBleiZGMFpAI2AwZFQwUzBLLytrMGZQTilpKiZNTmB0aXcyZjlmTk9eJEVOLiE7bUo2WSVsTzEwVntfKFMscWNJYXAqVHBFejgmJERMZWdtT0JLQihHZm04VWMuZC84PH4qMDkweUxw''@;'; put 'put ''UFRbIlJ7VC8mPGpxSzJZQHJCan5UJlk5QCZxPFNkKVZvakw4S2NpPEI4elZvajVhQnNAK3ZkO3svaiE3aHJdUkUxZC9OW3k4Z3RRXSZGbXl9YENmOUc9M3Bab0ZvRS9YRGl4XVV2PWxabGIvbDQ+dFhycnMseixBTFN0RmApZDg0dkpyYyZnbyJoPTlZPHkuXlpkYE9LVDZSWEIuVDU/XlJHb1Mh''@;'; put 'put ''TT05TkYoKzNjenZWSHFEZjRyNGJkU2klL1AmZSIuOUg2YHAhWVk1fVtsNV9WYUlgS1VtbnRdKU5IMllSUTt6VVltSHFXRnhJVXE5djkmUVUjWnBhfC9XLihLNyhlX1NNdXs0U2tfayhuM2B5RVlvY2NuTlY9b1ZmbjJVdGRxP3xXQShWK0dMVzdufCkjWjQ1Yzxud1slPU8lNzZMKEJNfkwlOVQ+''@;'; put 'put ''O1QjQlF+cTlyIkU+Pj1rRCRnKn1RYzBQNHciaipuQWZkbXVUaUt9cmc9cz4hL0UwYENXc09qQHI2NnxyZ00vJFI2TSV5Z1lJQ3V5Z3pSPFtiZ2ExQ3Z7bllUNURfZ003S0VfQGciXktRamxIT3ghSHRJPyJwIiw5JTt8IyJ2LHRZMDJfQWQxKnl4UEdeQHZpVlZAKzooY0VzbXZUQygpW0dJUGkl''@;'; put 'put ''WjhpWTA2SXkxN3hAOC8lYVp9VSo4PCRKXTNlSihLenEvZDQ0Und9U1U2azV5REZncjJTZU0weHhPSEQieTEiQ094UjdWPXomRW4uYilsZX5fYFJ7UTx4eG0sfD0ycH5OMUYwdV5RaFBkZz1le21oYHlhRlZ6JUApSHFucUN7byYsZWs5PHk2M1FVeGYxNnZkQ1BbUmsjfVprYEBDJmJwdTRTaE9e''@;'; put 'put ''Vjd3SFQmaGlbKWo4SldoXWl8Y3tGO0BgJWJ8Kn5ub2guIz5FIlQ+bmh5JmJlTng0XTx9P3NSUFBkS0JfKmd1cjNtWyp+JT99dVYmKzF4bjkmPzAxbiZZL297W2o6WGJNSSg8TUNJLE89Z25bZF5GcWl+RV4rPVl8MFpmd0B2Rk58TUZsalJDRitpYDBtSSw8floqUTdMSXZ+PCY/UGR7YDJbUFVs''@;'; put 'put ''ekt1VTJtSSQ7JmslVT1RXy5TfSQsWF1VJVRVaCFpMT9meHA0QF9WRSUpQlBtL15LJGJ8Y3taPHF5JD9PKi41b3Q6QDEsTzFXO2IxbUl5YjksTzFbT3FQZTFtSTtOPjlJaiJVKVEsZDAmNSVkXVRGU3hTSj1nJTkqKX1CdXZRISMhUThxck4hXyZPclZ3UFVdKH1Wb0k/ZmJDeUN2OTVaQ05gSlB2''@;'; put 'put ''X3pFWDNRU2Z9Vz9jOUo6T1drZFtJM35wRUgpdXBuK0tJa1UzMyNGQmZ6cWNuYmZURXduQk5CIVc6WGYvI0d0QW11VEtrRTlLNlIzciNqIzU4Yz1vXW9rX0JGNUIwLylnL1pDRzxoOmhVOVNLfWF+dDQxfUxIUD1QV3VAUTNkSnRxPWtVQm9lTWVBR2h8ImNxMjNuQm5PP2JuNEZLeHQ5cmdeeC56''@;'; put 'put ''SE5CaGx+bz5FVTN7eTNlRytPMFVPKjBITHxEQHEhPzZbPVpTIUd0elgodC5MPGhaSXhkI00wRWl5O1dMVVtXPUZzPyxMO1dXQShBZkRUL1RAYV1DK0VmTk1TQ2RScEJoeCIofVhkW0NEL04+YlB2NVBGUiIpTTdvSU5aKTN3QXF1MzE0RTJqPlpsYzFIcyJxYi8/Ti9WKTNiTDViSGo0c3UvQlBp''@;'; put 'put ''dzF5KSpkJk5vQ3RAMHdpTzlFYHlfSDdJUWphInxRP3Y2NEczL244SGxnSUlyKWA+NSF4RnooS086b1Iqd181RlNlR3QjR0pOMVdqaTF3dUd7L1czUyF0SmJIcVh5WDZ6dTR7WHZMQV5UMyxQVVh3P145Wz58ZV1MKEYodGlDXVsuKVRGSEJlIkVLezQ9Q2hFJV9YWyVULilwaGpEPGMsaHtBV0gw''@;'; put 'put ''bkRnTEhnNXhJa1VqaUUsWWdVSGp0b25JN3FDYGBoK3VddnZlNFllUkZ9PnRuTnpwVmJ0I1c7JC9OOkghR1hkZ0pNdzxCRSFjNGtISUVdVy9hVipIN3FpVkI3K2xVPVo+dX15YklqYz9qVDNMRHxDOEE2ST9ENTRXfCMxfUEkKFk0PXZeemZNQ0I/LC5ifkZxIlRodkdMN1dSMihlNGtOOHR7UVBQ''@;'; put 'put ''ekRrUjQuWDgrb0l1fV98OXNjckRFcF9NeDFfcSxiMF86aUpGcnpTP0ZBUlEuQTkxNGJ8VjhNYnRKQlJ0bS9MJlg4TTJTQ1pYbHgmYVNhTy8jRz9ofGpRQ2giZXVUaCI4SC8pSGspb3NpQ11MTUZHMzBrPUJUSmlDKkJuJnZsLE1DQEJaVUFqcUYsQk5tdDMxXiM6aHpYZGMuSVpCKGs/TWB5XWV6''@;'; put 'put ''aSVNVU10UWJocSUjWiZNXmt7MyQ8d0I7ezklbyUvOFByYyx5IihaNSxYdz07fUdbaGFNVD8jXVVPJWhSaElzUjNsKn0lZl5sKFpGcjtvbz9yVz14bDc+PDw9eF8qSlRWO0o8YEJHPktBd2B0SyFLeTpGcHcxRiJjS1dGPi4xdnZ2OVY1bXteI3pNby5NeFE0MUBCdTVfZjRnbFhTKnMpUXtUaUlz''@;'; put 'put ''N1gsdVs+diVjPDEsX1soKk9DUlFBWSMwJThIN1l+c3FCJiJGaHE3L2E1KVZQaVF7Wn41V0RJbUQ7a0RJVEVsIWdtUG18R3xwfU9PVVJoXkZwdUJRIikrdUYrYGYwfElSMChLXVFAIUl9VT10OlVxPjlkcyVwe2RaYHE+WHdsPGZqSilsLGExazV5T3BhOkYlUEM6fnk1Ikk7WzQrPk1eWkkqUiI9''@;'; put 'put ''bFBiYDZyLz00WmFDNnh0JkZoaDY8OyJOTFJAcmw4MCV8TUBMajFEP2crZFJiI0dpa3QhbmZZMmFVZWRgNE9YMUk2VyJYKTU3dH1HfGRVamVSLGZTRD8hejdtLFU2NHVdL0JEQUcsem84XWovKUpkQElVPHAyaSM4YltdVEZ9aVJIWldZLCNJLmFsNiJaIj4+WkpVUkRUdTJDcWN+QHFUX2U+eUo8''@;'; put 'put ''JmNuJnJdLHghalRRQVV2blsqWEpFO0VTXVVrdlAjWiNsOzZfZ0piV092X1N1U1NPdHh5bWliQWxMJHMjMSkwZWgkbkU2RFd2VVhsWkwxL280M2JIZlIjKl91TiJuKkMoUXJdVTNKUU94ZTBZW0V1WDRVWiQrTT5VIjV5M01nIjR8W0FuXz8xYi9bUGxIMChsdk96MkBvVV5HfkFEV2tVOF5AZThe''@;'; put 'put ''QFdRNDFRZWA0WHYkKXB2fUg7Ynw5ZEB+QEViIitkfnx6NHIkW35AKklxMy5uMzNPYUxiU1QlUn01dkxPNy4vek9HWTZdeWtdLiheKzprTj9pIVMvVXFeWWVteSwySFciVip5dU1yMVZJYmI2W2suOT9VMVkrJG15UEpYdDNiaEdPbD5xIXhoMGt6emFEdUImQnREcHh9RXlHQEk6TntiSj9ZMj8q''@;'; put 'put ''JGd6RyovVShXPztbV0lSY2lORUkvUkc+SG9ab0p4JERKKEE4dUFMaVdTUDd2aVhjI2sjbVl8dn1RSnM0JGdZOG4oPDRLdExYdl0lXl8+b3BZfGR2Uj83aG4va2ckaUw2VWF2OktlMmNSYnlyaW5Le0I4cjBtaVYwQEAydWVdfVtTeUZSTkM2Qjg2e1g0a1NUT00yMmovRnludFFdMXFDYCV8VDxZ''@;'; put 'put ''KitmZ3U6b2p5amJtTjhZUzV9V0U/Iks+N3U9VUUlW1cmZzgkUEowZ2J6cnpWbXRDYDE7aF4qLDNPP3d7Sz1VdC9jUkB1OVdlfnsqSnU2VVNHKThuQmhNPGJERmUjZUV7KWxjJSh8TChhbkxNbWdfan5PfSphNCx5OEtUQnRPRnRdP3hyJkJqI1Asfl5AJmNAYF8qczV9Q2pzb2g2JTdKL2FKRUde''@;'; put 'put ''UFVsenE0LnA+PDVpYSl9SWddKzhhIjdJaEVsUmNldHdYYl4zTko6Vnc7aDByP2xwb2hLL3lKOixkbVJGVDY1Kikyb1E8SG0/dVQzdlZaKlI7czhqelkqUk4rKyVmZjF+djo/KmNBQDxZYG9LX2lPZ2NCTWNrRmFSPVlWTGN1JXM1LkRxMGwlfl46byFkW2E2UG97IyJyJClpL0QyalhCX2ZhJDRO''@;'; put 'put ''cXRvJnE1ZStvKUZRMXNOPk94SlhORS47fG5EXUV8IWlKT3cuLEg+XT5ieX1VP08kb0RGWkZ6MDcwIUp4RHpLJDt1Q1lWcGRnWVhjcD1FIUk8RilXXmJtY0xrS1ZTWmMxLz0+WSNNQz5CekojcXolKlBhR2YmVml5X2lNKzchU3VHMX5KYkE+b3BJZ2E1dTRoOUcmLmdaPnRQMHlSZ3VrITZLfXI1''@;'; put 'put ''PkZien1PfEtdRnxQc0tsRTYqclZxZjIrXVhASDEkKSNNUWVVNSM9RF9sKUlGOT08bmhwfTY8ek9TM3srImBkYGAkM1JGOUFLanZhVHhyWjxBbnxte21fOCU6LnRFLEVTUV97anIhMmpedTp5fCFuZmtmMEcmOEZkayN5RzZwLG0/ST98eHdRel1jXy4lajBqX2YyKGpSSGZhRVZDYmk9UkhmYUVl''@;'; put 'put ''NGxFNlQ6RmEkSiNnRFN5LH5+VVZEPH0qfUFxQiZCPkJfQXFCJnVKX1MsLEFuOGVrYCpVIihPe29MdHpbKnVCKW5oal5HUildblt3RzQkWDIvOX1WWD9UOiIjPmJ5KG5bZlVYYCkqRXxNX0khSjUiYForMFN0PCJZYiswU3QqdClxUVY0dXFJcGxkbHNjQiNoZU9PTHVJUyhtXkg4WV1DUiFWT1FA''@;'; put 'put ''b0k2VyJSOXFGejkqUG10eCQsQH5bP14+ITBDZCZZLGYkVTk8P3RaaT5MQ20+NnQiO0FPdn12bnYxKWdpb1FmMTRnMVBmUG5jQl9QPTxWfE0xRn12MW96QmlsZ1hjUGlCPFoxdS84IyFAPVYwMERudW9AdD55N2tDfUhrW19AWEUlNDlaPj5+a3NuVGtsPk09aTFWZyQsaGc/NGQ4KG9KMWZlTE8x''@;'; put 'put ''cVttQHs3MGBobS50Qlt2KjpgS3hxVCp+Jnpve1pvSCk+Ij9sUGQuek4sOndqbDcja0teSDBlJSU7MlBuOXRlVXUmdz9dMmQrXiguOl83b1dxL3V0aFkqVUZHPjFKdEtlTFYuZkM/IW5mUSpiMFN9WG4+YmZOXSRFfXlNR3h5aGJwM3tOSWVbfSZrJFswbXshQ2o6bjlWMzxndmkuem1Rd1NJajtG''@;'; put 'put ''ZFgxMUZqWl5xI1o9Tk17Vykvc3lDcSN6dkBCXTJJS0dqaGdReG1AQjx9cmA4QV8vc0BDMiEmbiRbeU9lR2NfWlBzeSpMe2ZoVy5ZaEgwNkk6ZT55OnAuI1AjaFRVMV1jNGYzWlUpK2N3MTF0LnFWMml2eTRkL1hbTTZ9VmpPYX5rITRafHxmdiJUYjojNitpOUlxazlJV3dhbDw8LjEvVVVtYjlk''@;'; put 'put ''cjBFO2oidjR0QkpxfDprXVVJL1tHRHgjM3d0dHBeOFY+fiRmZjk7R25zZ2lRTDZDSWAhQCY1cS5tIShNaVFjUDg3VEtiY0NfISV2KjszLmNGYC8rWENeLj1GaWZWUHJpeSNGMGgmXWxFdC96SEFQXU5CUi9pOndXb3tbPTpFKH5ydSZNNyFFQSNDdi9nMW1JVz09NVRUUXdHRUx0LFp3UDVXN35r''@;'; put 'put ''PVlGNF5MLmRdMDAqRzBoQHZ7SXRjQnZdeXdRYEFzT085cXNTNSREIzIhKiwhQWVoR09RZEExa3N2N2Q2fCVLe1dPZ2MpNEtlLzBdUCtKSD5rfHtbSzx0I3c+QyE1NFYxRCN3P158KzxaXXV7eH5rX0gqSzsxN2N7RCx6RG5lfm9jeDpfXWMvemhQXTFtOUNXe1Z0WmhhfE0qTmFHRCN7TGJTUHMi''@;'; put 'put ''L0tMSm9jNGw0VGFiKTp6NUJ4YlJAX1VBI0pPQiNXJXtjIlc5QDIvQEJ5UG45ImhSJntjQVBYUE1FdFBkNDJWTiVdYXErfj5XIThdQ2JYSE9hVyF3Kl1BI01xJUVHWkRDR3xIO2ZsJTF4S3UuIldNO29MQ31EMVpvTyhZU3daeEReaW0xWlZ5ayxEI2AxPzZzUGclfkpQNGwzTWcjUn5QTkkrSUMh''@;'; put 'put ''X2NlQ2F2MnVlbXUyQEBtdUAiWyI8TyVRVHowbkN1P3RMSSJHNU4/VEMpbnR6dEBmV3BockpAeTpYYlQzL1ZiU2QjaUZHeUs6OWVKUjUoTnBxfFo9ZnhFNWNMS01PNV0kKG4udXZqekI4NkFOWkRiYmhPX0M4Nn5NWjdCIVskcmd1MD0mMzovImBaMlpObmt0enRmWShPIjZMPVhqXXZRSFRUMmtl''@;'; put 'put ''dklPbHpuUk0+MWxfbk1MMypHNlp4KD0iWm5KcUJLQiQvPU5aKXZqVG5MQ0k7MnNhYUdqajs1JT52Ui9OcnJnYXFdVXxHXSgjbjJrZXZ1TUpTK3JuY3dAODN2amdNXjxDRk9kQ1ZlMWJ2W081NyVIJj8xSD8rR1c5dkF5XSFYUlY8JFdMOzBmTEBBbjxyJmJlbXhgOFk2MldZMC9fKVluOEVoQlJ3''@;'; put 'put ''NyVrb1QxQU9vb0tDKXZyPyt1K3xWLHlYPjlrTTBtNzdzXXhEcGdiMzlEU0puOkV5TTZQb3QxSUBEcVdRSWMldmNpSFNFWk1NdjU7PXxqIi5hOkQyI0E2W3ZadFd2RGkuJmVae0NyLyY+fVMyKjtiMVJ+QSlVZik1fDVtOSQxI2pbYDt9ezx2RVhkOVhPVWM5WHBxKi58c2MqYHxvWTlocipxVn0w''@;'; put 'put ''XVBoenNsXVtLP11VJEgwQklGOXVmQER8cjJUT11MJkBPS31+YztZflQ7YkhUO3hTSnhtNGNtbV53MEtpTixKT0huYEJ4ayswKzAjO1NsYVshbXpDK2xKcGpARypnXmttJVZuR1tXa2Q7PDNVIW5wKzthO3pdYyN9N0kvV0hJJk1aR2spNThUKlJSTl1MOVFxL0Z2aXpLeFdxWGFdNU4sZFNhWWUs''@;'; put 'put ''RHVifjRFbD9+YixMSltKOHI1ZUZKUyFLXyxnenJHeyxwSzRjWmBwdS49UEBjdT9+UGpDZipFSltjIThDQSNpUT9OMHpaK2lbXWBacHovQE9HOzRsUWZJcH1JM0JYPnopWVY2UlVzL3BtOHJlSmxdfT8rWzNCcFFYbGMwNjFGKlY4eiguNjk4Yi9he2w6JWNZLD1CTVBuKDUsMT1YOlkiWVN3anp0''@;'; put 'put ''YmdCI1IjNX1CLzxWOyJuQmJEYjBTYzJdOE5PXk9BVUFLQE8xI3gjMVc9UyM1blZCTltXJCs8Q1pPKjBwKiRpVDd0YXxYWHNaTlVhTV4rPU96VTY0JHxaNDFWUDIxTWVyR0J6ezQ/fXphU1FVPERHZ1dIaXU0Uz5pdXU8KTw5Ny5nJXFkT3ZaITd4em11SEAyfkVfTnhDflksTStdIkNxekQ7JlQp''@;'; put 'put ''WkdedT1sWCh7fD9iRnM0eSJ8V1VuVHlKSj5lfip5VDMjZ2k5WmR+eVZiZVswWml2OWBKSG9aaDhWYWg4UjZ3KypmYTFZU1NWMUxCKDA/djZMZVAiYFtaXl9oXTdAJVtCRE4hT2NgQFFhNEJqJEYrQXZ4U0NeQWxjO3tXNjIwKntSbU1oen5FX3F5VyRpSHR2Rn5bbDttW2UzYXlVNz94SV16Zz5k''@;'; put 'put ''XXRRVWZdNC9ybntBY0Z3L0lDLkJ0QkFBQThfRUFEWHJDfUUqTWVjeSIyaSNdKUNAQUR2YixFYT1OUmJTQDJPcXVoeDZGQUFBQUFBQUFFQTk8ITNGcElybkUmLlkvbjtkZHlYMk13M2I+STsoNT9tbWJYQVJfQWJIJV9sRl9aRixtRWNaXztJYEhDR0lCSFcpfC9TPGxUbnlQQ28jNnFXPCtXNipf''@;'; put 'put ''XVZLJTF2floxUkJKImdPQntvcjhJeVQwaSNOYilmR0cuMTJ2QyI6Szd9LCFKIXJwZS4sOCRPP316O0ZSe2poIWJSU09PcHw5JVYlfUlYfHc/JVgudHBlaDhLRXBjJEgvYHFANyZdLnNGR3cjP3kpVkhbTVEkW2VkaW9tSG4rKmdYWT5KM1d7MTllUGFSPTczP2s/RUhKRD5nd3s7V0haRVIsO0da''@;'; put 'put ''cHt1YVQqZVZwa3xKaUJdTyJFR1d6aWspdzVqIWd9S2QsbXg4UTZfZFlmN1MzdFRkeWZyejtKJHowODZGd3ArMjxrWDt8NypoZmdtdXohWjRPT0VXYnk2fnJmJX5JTG4zV1YzLjM3MzZueX5COVtZM0A4RDV+c3JAPTJzRilgTE9APjUuQixxWjhTREZHMF5mIzpCTGM6YSRGNl1MWkB5dU5QQ290''@;'; put 'put ''O2RPLFolWSxRYT4iaE5TKTxKbS4zKXglcWhjZnJCJmY6PkNddDBCRCVeXk42MnJzYF5vKWQ2SVhxalgqKkFFVUVhUzoxXVdaL0x+dXVxbzIrLDl9Xn4wKTBvOU57b0RiYms0V2NsWGdMV19qekBiZDxzOitLZyg8bG83ci5ZaT0ze0h0YyklOGdfQ05+VFhbTTBZS3gzOXwmUXVdMFhbZnNmSCpE''@;'; put 'put ''akVHQ3EpY0Q7JH5HSnBFJFEpZzlGayFfXlp3UCxiaEY8ez1GdmlLIk9yN1RzUlR8Kk5Fayp5M1Iwako7QmciLnF6N3ZpSF46SnpgOlBQZTcvNWR6JjZTeVNdNjNObWN8UXNvLCpsYT8xa3thfCpdcDk3UD4hPCw+KiZZIks2Q2hAO0ReQkpWdjxuQT5vTFNbO0xeTU1mWXNULmp1bCpPbWVCajp5''@;'; put 'put ''cUVjX24oKzRiQCZxOW1vRkQseS97S3QrXT1AT3pKY0VhbGJ1YzdXRTBMal4pMlB4c0IueFt6Y2p8LjE7OXpeRFheeS8oWTI3RUMrez9bfDp5YnciOFFkPmpoPXJiXSRIW0VfbFVQYzwialRVZTFSemBjbmo7e1t8ez9rfkhAYXJtM3g9IytHe3hDWTMiPF4lJFVFTC5JQmhfU2g9N0w3KSl4Umtk''@;'; put 'put ''Q2k5OmpGfHN+RDNATD9oYXcwL3ZCejBHdTFVQCRwKy53UC41Ty5qM25PMHtJO3hBJFViTXM9LnlwU3gvJjphMjB+ZDd3QCpoWE8lW34uMmM3VmdsJHVdWF9AWmMpPVtvVzckNlREXV18PTc6IVlCfDoyenN1ai9obG09JjdFYXRpbkN1LDp7U0pXZDdoLkouXSEuXSF9QXJAWko8RkRiXUc3dz9f''@;'; put 'put ''aC9+Mzx5NCRAPGFJdD57QlFCQlsxNTJ1b3lve19TK0J0XyZMQlQ2KDN7a3lGM3ViNnNbL2lBampXQlpoPiE3ITU6OFdsR2JHeWJkNWlvMUUoWHh6PGhJfTdXXS9meUVRaHRWMikhejtzVzk8emBWKigvOGY4X0NmZnhTM2A7O3Ioa0M5dEBLKUhfK21pNmRoUyh5YTBXXWJpPTJSMTkrQnA2IUl4''@;'; put 'put ''NzdfK3BRYn5MJk9jM2JTdG5xVkQ+RXdyXXA3eH1VMlFkQ0JjdTBAciR5WDxfb2JpIX5OZTR0OWw0LiphRVs5ZklCS0hVU1pMKyEoVGBjOzVVclgpOnZQdDlLS2U7dE8hTUshNGx1NV1CejZncihfezdjZyI6e3EoVURaN3V0Kik7ejAuN1lNNDhqI3FXZnhCdShXO3pZcUl1VkszKkhZJF1rYldm''@;'; put 'put ''MUB9NyJ1KXB4KUt0YnJGaXNXV1NSRWpTN3ZQWXBgJHQiPytCYHBwQCZSMm9DemFAbDFLdEd8KlMrOFh5LyxlUX4iWCZMKGZlMjoqcktFcyosaGJsJnNGcXs5TTxPZlh1U3xebl5DUklBIW1+eGIlN0VkNVRNN1YoVmZIdDtlZD4uMTpTampNeSh0Kms7QVFAUkJNVWNhO2IvVSMoVCVQYWV0ZClh''@;'; put 'put ''UCVqXU46Q1F5OjQjOis5R3IjTVpifD9KUGlLIzpiR1pxOCYoPXZlfDhrWF51Un14dVNaZVdjO2E5KiMpNmBbL2NfJVVFPltIQT5TRzNYOSY6dUc0bFt2LEx7bDA8KDJPaUNOaTlLXUVPcXJJOlRta2Y3ZElsMVptTWYwOW9yb0F5TyhMT1ZwSGJHYWVuJml5dyw6fSQpSlNHMz5bczlycGA0fXJ3''@;'; put 'put ''MX5+R1I9KUhYOmJfUz91YG57L2FwOlFANnRwS0dBVSk7YXhHYjM3RDhLUXUhPGtKezUyKyZBPGQ9bDNZej0/dEJnImxLP0p1NVtofSZ8aWI7aU1DL1R+fmhjei5nTWZmXVVGaipHbm9jeG97Y306bU1XTFdIP0J4TFN0Yk1TeDNZdHA1ZX50MDwwVlFkdD1RbC40RThEaklwdVcyeDQ8PkNqTmhm''@;'; put 'put ''eT9kZjNafHtDJTtMaTJsRXM7O2EjWi5RdyVOcC4hKihDIXM2PnklMHQodFdYeVMySFFjaVNgQD9EUHE0Tyt1SyF2TVtEIUpKQTxDPW5FKElFe00hKG94cUdkQ35IWWIpWGAiTGshdzhiMDtnPnldIXlqfEZHS0RuR0okd0tZbDp1LHUsMyFgfCVBME5qXj1tME5pTWVtJDlQXlp5LmVpdVR0bmFs''@;'; put 'put ''WT8kQkNnMFg3aFQrP2toYj8lWC41WjBfVVY7QG8wOS5VMkgrZzpLbSVQODY7Zz5nb2JWNGhnaC9ZVmooTkdtPSU4PitVPngxUVpJa3k5PkZlTDFOfVFsdiJyZHojMzouPGRWTEwrWEd9SyFJeVpydTZQaGdsMipGfmZ1PH1oLCMrZ3dFPiRAOkVkNXJyPkQoUGpyQTlHPypFejAvMjQjZlZYck9M''@;'; put 'put ''Qy5jbiFmXkx4PiVzKE81NWZpWjV3bn1yIStyW0lLIUMkNE9oS11EZDo8dDd0eiEiX2oqOTBZPi45PWJdVVgxY3w8K1I9NHZTRT55SmNNfnV2L08ibGYpdUpnS0o7NSRfSE1xR3BsVSVLUCpATVhPYEttMVQ9bWlGeDs1WFZjdl1dKU1+cUo/M3ZtQGAkPDRMQ3dIfTAsJStHIjx9ZUBjP15YSCl6''@;'; put 'put ''USlpfTBQVTEhKno4MmRDSTZbOX4uI2pKZDA+Vj9kNTxEI19HYkM0LDswbX18RURGWj4pUD8ySlQ8N1gxNT8+aCNfRW04Mn1pbH1QRlVQYFooYEJCUGJ0VzN5bVdVVnc6fFFCTi9VKjZleyZHfTMpNlNQQUxtVWdTdjJVZXosbl94RGhffHghYHB+JiNeQVt0UmZCKjs+Kk1xNlFYV0hPdSxrWyJF''@;'; put 'put ''Y1tjdDdgTnlDUmd3OTYwOGJNey45YV4hJEFVbkMxTy4rJFNKNWpjJTk8IzJ+KEdYLDB5LytdZ0VAbzhhX1AzdjR+ITJDPiI2XzlDOylKVnJTST50eUt7WztbR11LWX4jWSZxdkteXWJadWdYNihGJVA2a2RlMV1NJFVaXWBZbyFxZjRmKFIxJi5KM0RmRzZiIXVtXVYoZnYoLnt6TTJqPENSOXx+''@;'; put 'put ''IUVfY2s1NldRTEpbTUU5KkVnX2FYWDxyWUtSJFUrRzNXQkIocEllWiolcm9DbyRFfEB2fjw1bWU9Tix6d2hPd0M0fGpeMjVCXyojMHpRdDMzVTJ6LFRbSSopXUQhUElJbE4pe3YlSSwzSithJXY+eEo5VHlLYXw7MS5DXWFTNHd8VWl1JmEwenlEYnJubmpSd2pBWilJUTBtYCZKYnpURSV9bnBC''@;'; put 'put ''SS9DQ3s8cC9zUSpVRHwjYTd9bUhrU0xAeWlge113L1BqclhNYlAzR25YWXg+KkJ0L3xfRUxCaVJ+bjF0KSomOWdBfDo5PTJ6aE9PIV5Ke2lbZkc/P3pYdEp2dTpJZWlSajx7IkA6cjtSL1VLcWQ6bSsxZykoPnx9UmJpPGx5bjZhU2lTfVNmanx6WStHcFtOSmEpPVohaH46e2FVO1c7QFAuQ09z''@;'; put 'put ''eWY6biFePThrNW16RiNIRj5LMilrT1R0ZHJ0fWUkbzJmWnhRVUk8elBBRUIzOV97Vkw+YnBHdilQWEJeK1VlLmp4YTpOSkowczRucUxRNjw5V3AvTVZOTXpoOjFWSURLbHR6Un4/XklIUDx8bEdnaD5bZ01SWCl9MVp8SHJ7fkR9cmFLbzsyQDtKJEZXRHtsIiM/ZGAlPXkxWj5nWXcxYj1mX31w''@;'; put 'put ''bm0kV0lpZnhWZW1SYGx7OyJCSHhvPDUye1sxLER6Ll16VyElZ29yMyhHTExOalR8eihEVnAsRzNzZEtFd24vZU8kNHh8K14wOiI1WUcxdEMrOV03RzFnTW0rZk01c3lMeWFTaGkhOllvamZoVzJhQGxPNzVbSHBoNXouRV86MG9QYShJcHt+akhxJWdmT1B0LkdaNmBxbHZwcWkzSm90SnUjQSgo''@;'; put 'put ''cnxxUCQzRTdxen0uMkY3cFRqJU5lOVtJOCNIa2EjIW1HL35PZn13OjYpVT89L1BvKzFDZy54YjxoaDUiX05uOlJ2WVg/e0s5OkNiW1hhTjJOKzloZmYjaGIoQXwlWD9DTD5XJihbPDMoUUJ+ZDhTTjU2PFF0Vk8zX2Y4PD55XjZLVWRheiRhdTM6Y2VKYShzIU5qYygzbmNTfndRQVlKbF9KclN7''@;'; put 'put ''SyxbOjNwS0VFLmdOUFE/KHZAZUFdbD9lZ1g4NjJiTlJeUnR0Y3BjdDkoUW1gaVNSeVgwT0pkRmZbMndPOHgiRHVbMjRQT1tUM3xyO20obSszfURjU1t6Xm1Uak9TV3VXRl0uUDZMLC93XUM2ITl5W0hyS2NvUE1BTUMkXzprSSUlfExfUXkwWnNBM28ydktPeWlzIT9vZjhpaiVeciFwXWNTTWRM''@;'; put 'put ''e0tANE4iMzRPNlZ4T1ZVezkkMEVaalJ5cnc3TShtcnRpMkwyZHRCXSlFYmpxdS41ek8/Tn5MNV14PzZZPlZOanImVWN7elhYc0dvb2FeImwwNzpRSz48N3Q0aXM9Z1dTMS8leSx5PnUsPFMofj1UfD1YI1lrNkoyeV5vOCZMZm9wbCNKcUkiYU91eF5fW25afHw1YjVeV2RdQDNHaD0mcjFUbDV2''@;'; put 'put ''QnpMTFc3S3Y2cS8peEo/QHBQb20oOiNgYiJiY2RwczJtL3tdd1d7eHFkUFdSckJxRSVkZSRgciN+dElZVjRFQ2Q4NEkodUR9cW1FZ2xVVih2ZDYuRllLeW0pKXsqP3NJJUFhXkZ5Sn1tbDFsUjpWLz9vI0UmRig1RHd5ZjZaN35yKzRvYHJTLF14YGd4KilLb0dfWmZpVHFwI1JxRCxqTnVrdlcu''@;'; put 'put ''OmBaKl5PSi9BXlBZcSVwQjAhVlk5JEFPcSpfaXtfYzdZJkcybi8uOmEzU3ZSSj1zYnM4VDdCXkBreSg3TzxaY1RbNkIwI0cpNFoxUU54TVFHJSFfK0g9ZklbXSxbaixgT006Wyx3SEA9dVB7ITcrRGF0OV9YLDk5MjlAOF5acFReX19uPzZhQ3ZiQyFpZV9SOEQmIT18ZGlKOTJtaXMqQ1lVZF81''@;'; put 'put ''W1U1WmVXOkBnK1JnOyJQYDpmaG5VS2ZnZEpFTFpbYSoqKEciei4/Qy96S0FKR1M8YWgxblRddD51OkU+PEthVjoxXyIvYk1eeXpGNld6ND9WOCxyflVMZDBgSVA0My9qI3ZLY05SVE5MemR9dTlxMUJaWW1jaX1HPlpwaTA5YWFVaEhwbnowKCo6dzwwS1h0P1MuSjlgLEFDb05KZnw3fkVLMjhp''@;'; put 'put ''JS84MjE0WHI3anRzLCVsXXdRZyNUczZBTWlhPER4R1lrVkspSng5IXtnbXVTKEJgXncsdXVsKV1tQXJYW2wjXSZ2MHVpM3NkMiZPXzVvWmhDczIjdXUiYilSQmJGWnNDMlA6eFM4THJUO3ZxJWlbITwhdW9XLnRlK2BAUD51Wz98RzV2NSU/JjhObCN2NWN6MClLRD5idn1AOHw0WFRsUXUjeFBA''@;'; put 'put ''PG8icTxFJWM+Ky51U3F8aWIrS1coZERGKm5xW15ETywscUs/X1tjeFpzREVULn0hQTRJOHxQRVU4aGJ6aF5VL3V0blZ1JWFUP3AzbVpZJjMjekVMQVQmM2U8eSs/S15dK0NLeHs6TnosYX5fJGwyeDR7M0liU3J+M00xV0ZwdURmcjIqc05KVXhjU0QxcD8rZiRiOy9ZLz82b3ovaWtfQ0I6Zipf''@;'; put 'put ''VjhHYHo0WyEqXT9uXkBBUS85Xi8ycl90QnpLJDBqP3JDS2l+Lmh1ejAsOk16PVhvTW8kOD5DIkx+OlJbXzdFSTA7akIzeH5ZWS9XLkRoLl1hNHxeNEZlZUlHTWZjKiNWW2F6RGlleVJkSnF8Y3c/Yyp7ek4xMU45cHNCYF0hQEBMWnouKntuQn50fCNqek86NV5FIWo3N0ZYeTJbTj9tKmFBaHxC''@;'; put 'put ''PEEid31aVm1NQVVrfT9JYEhkY3I3L0gpUlpUNktbYV9QO1RhTXNeLnwuOCJSdEdPanJqKV04dHowOURDVVt4W3cjbVpxJF4mdlddcDh6dHNbdlYuNDJpM1osUFI1bEpDYygybF1pV3NpU3koQy98S0wqMDt0bkcxSkpJUTcvRkM4Z3xSMV4uZltwflp6dlNaJSpxQGNBRXJbWEx5UjMuUUgpYXpY''@;'; put 'put ''MmpwJVhNU0ZBcUxwI2lWfTMoLyFOTk59IipyOkNTU0d5SC4wdzxFaTZPYXlbQTAkbFokLmA8UGdBZmd0WkwpamkiaElgRD11SnI2JX1SIitaNF5zOFJyfiR5RjR7TFN7QWUpNHpPUj5waiRTR2ArNVslOmd8OV9oPkFDSnZxOmAwLixqPkldVk11NGpdZHwpPjlSUklQaXgqPCp+XT1JeEM/PFUw''@;'; put 'put ''RzR8MUlPQmEuKyR9WmxlVUhgW3BuciN5QCRYfS5sT0h5JWVfWGwqfDY2Z2oqUmlRKkM9I2haMERiRkVpcXIrc3UzQGZfMWhWNmBVPUhsN1d5SSFmRWRJIU1WPDMveEYsYjhQRE9SaG5Sbn1bOmwsOT1dLlt8UnU6Uj49RW4xQXk+Rjo1bThqNTJIKENoMmUqRmpwbmRaQHtiYEVNcT1Pa19HRVBj''@;'; put 'put ''eEx0QGlwNEQhX2AqQyxdb3crNnwqMylHZSo2U210TTlBNFlXTVEqVjo8Qkk2dzI+L3hXdDQjd3htXnlkdVowOH5hUk1JRyl3KnVsd3MxNmgpeDpzMnh+IzA0VWJSTTd3YGldI3N6MTQ0bC5YUl51ZSExV3lXMXBTU2kvXXtxPnRuKCJJYXI8S3M7TzUmL1YsezZYZEYuSUpTeTg8Q2ZubiVie2t9''@;'; put 'put ''aCYuUmF5bEp7VzlFOHNCajFIRFM6KWV9RDNkNUdoKzpCay9CUjVbWmhLU3ZyQEROPCg/XzpEa3xWOnY3X1F0PltTZThqREFiYDhYQV1HfjhEXXtqJC9jP2IwdX5AeFVuIU1gMj4maVoka0dxa1RqNlJ9Ky5bXVlfV1pkT2slVn0lQyE0elJnWHJXQlMqNkBpfS4pSn1eWiJ2KDNLVm0hOFRbNkRG''@;'; put 'put ''QXdNfkhrYlFZdGs+dDA7TWw/MUwsP31eLn5FZEtzdzVhZUt8OTpRdjh9Mmt+dSI7ek9GMV8iQTFOcko+LiYianguJDc+bkFudkhxcEB3VWxFbjNwVCQ+e05LUiJ0fmh0byRRUEEsZzU5cXJ9dU5eP0FLc0khe1FienJeUUYiPnwvcllzIlEvNTdRTHg2PylRJWlMcGFTd0IjKlA7OjUxclopKiFo''@;'; put 'put ''UXNnYWhaMy8sZGBPW0BDQSZlTk8sI054NHxLLDomfUtuQmNzVklJe35oIXVfQXAoV3w1Kkt6LDUmeyY5KEpReFVBYFFueU5OKmxpd257MF5TMkBvKDY3PWZIY1skKWR+PTJoSWZoOW9nN2Ryd0VlWkxobmg1eiNnaWFIPloxWVo7dkx4UVd0MC9xWncmTFZZRGloJTFSLDZlYmteaWxiPlVkWC81''@;'; put 'put ''cXlVWG9ZK180PjhhMU89Z3ZFT1J0OzJtJk1GKlBETFA7ZXdxN3JtTD8oWkRFd1s8ZGU/UVdFSmA8XklyM2MsYUBLSGZrcWFvN015KiVaWkRHTHQwQn5sV0RNQGw/YyFpIk13Ynk+UV95Tm50eEBhRWEqeVF4LkQ/dG8oTCQpfDY6VVltTEo9TCNNTGckPEsiQkJCeVo7YiFsOGFUQlUqQyQlI3to''@;'; put 'put ''T2hZTz8hOkg5S15feVhESUpHZXYjaVl4Z2kvJnQuI3N+YCJ9JFlJOz5ub0UuS0okQ3ZRKl5nJWM0KDZKRm9OVSkrYSpSWjchdE14T3MxK3V9XVNVeyxuTmcrTEZZSzNxI3k1QTJ5aj1TcSR6bTNOJW00Ojd6blg5I1c5TCRQUU1NL2wwJllTKC9Xfn1vamA3eENtLm5Pa098IkM3MH1CWjp8V1h5''@;'; put 'put ''T2s2dFR4V0tMK3p5QzR7Kz1uXWQwUU89cDE6RWolT1kxNj9dV3pQX1U5cU5LVDIkaWlOPDgiUTshJitGcHhgenpEZTFoeWdUbVspViMqeG9yTlY+clZgXWRWY2BrQltsLzYwSHxbYlJMJnksfCt1IXJlWyZBb2h1MzRfTmE2P0ROOjlQIV5qbUpKR2VyRztrai5DWDZpOj5FSShIUUlaMUgoWjEk''@;'; put 'put ''b35+ekd1YT5BdCpGRWY1UnA4QyVgSm0iKCtUWTJaNj5FdCQsclR8WFR5WWFaY2VGKll0JHY2T2JTNk8kZHpwemJye2VFPkdHSld5Q3l1OFlHfjFTcjlSKlU2V1pYX2dxXW8ySyx6Pm93fTVtKCJMXlNlaVBHd3pAU2tDZyVLaX0ubE8rdzF6eksvQSRZeCtIQyhpc2V4W15LRDM7fHwyOEsoYits''@;'; put 'put ''WlFwOWBhRih4Ijp2OSwmRFNYbj8mTl57KV8se0NdcCgzdzhKPF1gVV1WbStGYlZSajl6OnJRRF5nO0dTdVdkcT9oPC9DQVpuYVthXWlWTkoqPT1idDhIIjR9KUEjWHpHWjRKdG4qblgmSyVxQypoOVBeV211NV1zOWhwSmV9VFU3bTs4ZzJOPC9ueHZPdUYmUXFhU3poZSNHQ1lOWEEqYVNARC5H''@;'; put 'put ''RXd5aXRSIT9KNiVfK2xBREs2Y11iQVQ/JU9YKUF2PFk3S0FfTl4rcHVGPF5ReWJGe3tqSF40SyFnS3UmKTIvZ2JRSXN5TnosSUVkUVM8c3tzdXVIRjJIS2xQSSJCZVdVP0tLZ3MjdltpJVpbLmRgblVoVHl3fjFPdXQ1VHZaYGYsSF9ULkZtdW5FdzszPnd+dkA6Rn1iI1R8OFozbF1yekRFeVs7''@;'; put 'put ''fVBhWC5KOC5iLDRMNFFsZW9+a1orW3Q7PlQ1ZiV7KjlaZSJFM0RFSUlZL01lZVtoJXkjc2xCfCEvfGA7MHxQXiRoazlGQlJjSG9iZUxSWjdxZTFjaD1FTmdfLHVYMEoqMXlbOW1FKzhCWTpbRTE+L0hAUiZ7b0g4S0ApcDpSTTJULD5NbGk9ZnpncjlqdC4xaC88IjhSUzs/fH1mP0NxYSFWN0ln''@;'; put 'put ''amNBZGtYODUpRl47SGAzKFFNKj8keGtZV090Kj1Jb1FKJTFIaSxsbShrLDZyQDk3PzN4aE55bWEudXgvPSpeIW9HV3svPndKZk5GKj5FeEA+RD89TU96XyQsTU4qejVFS0B2THhUYyFQMDY8P244UVhFVE0oXWk2P3lCYTBgcyswNngoRkE8NWUjeTU+I01+ZTslbGk1alFZSH5HPFFMQXRQYTQ2''@;'; put 'put ''QlU8X11dSXYwSDh5MCkofnVpMUk0d0A2Wz5Ub0Y9bXxDQ1g0Wmd6bmZKfkc7bVYhVldqSCo8fERaT3cxQXxLcGo3ejRNcEZ0aE93XTh9fSUlVyJgI3JWPEx8O3QvZ0IzNU5gNHdsYUpCYm9uTn4kQHFaOzF7NVlyLm96JltfRmxtWXJ5Nmw4Q0NaQiliT3taM016fEs+ZGhyPm5QdVVxIWxwdEI+''@;'; put 'put ''KixOXTZ8OW1nYXd7SSIoLkUuTHB9bygvVGZLS2ZQekZoJkFAXjUlNj97OkFaKyZaWThwQSMua3x4Pk9xNlZmTUtkVkhpWTdIME5sRWc6OX1ldXplXj9vLy9GRHE0Vz4xJTV1dl5NUl1taVVRSXN6SVlfU1VyPCVeaEVBKGBQKFEmYWFBTVciKDFJdTNjLC9DU3dzdXVmRVNSRG4jfXhDQ1VzS348''@;'; put 'put ''TEh1UTpBKHY7UzBSYypZd25bKWJkazRFYEdEJjR8WjBpeV0wIzxeQU5kRWllLlluZFR7QEx7b3xfTCpDVjJ4KzBMOFk9YjlCUy9UZWN6cVB5dEc/W3FbOEJIMjk8IXJqcSkuYkBDOyJ0Oj5pfVlJI2hffGxDQ1Bqa1VmJTg2cigxRnNMRlluXnhvflV2ITkvOnk5Ml01SWgkXUFidUt4TlReUnR9''@;'; put 'put ''XVlTPiZSVClVdXpnKW5qYyJMWnZ3Mip2bWt1XTgudH4pUHRQYC9NVD1LfUt2Q0J1L2k7OkN9Zlk6TFRESnt9IklVYl59ezA9RTx+d2Y4X11xcXRILER6W2gpMjVxMWF4fSF6b1RyJUw5byxIV2pUJTc2UDdzY3JuIVhMYEQ2NCNPY2lXeEYxem0vXyJMe35DNG5Ta2p7MjV9eUwhSyM5L2o+YUlg''@;'; put 'put ''aHJNOHFyaEQjI196cTdtTF8oaE1oMT43cHNKYTxrUEtsUVBCOl1uL2FiWGosMVgqMElINVlfL2pPUDlfdFVuOjsueDgxfnEmPSlpaTRgW29vN35wRU00KSkkZykxPTlLPnNgel1ndV5NYmgmK1RGUk4/Ilk7PCJ+Xi5YZmxQImYlJWBbOEh8T188QStRTWdFVF4uNnImdlY+WChYZGRsV2skblt4''@;'; put 'put ''VzwpNXMvJCoqWjxuI0lLbEAjdnI0e2hMMy8xTkR+Qkh7InFKajc+WTdLJF1CMltmMjEpfHh3K1tCR31lWiJQV1FGZko/ZmpUbWBIa0RUfilHc3hoYjpefVZSbnNIMDwhI05QWzklXmJ1eS47Rz0hLC90MipwYEcxOzJ1Z1V3LiJkSnZhb2QwKEtJeDRxSDQidkVAdnR0aTdkWFkqZCJgUDpwcCFQ''@;'; put 'put ''SUkwd3EkQ0lDSCJHNnlsbloxJmtmeHtFbHJbYHJqMzBlfC5HY3ZXU2VYSlcsLEU3dioobVAycjFfX2k0VTBMV0BUKUx5eTJ5N25rVT5hcmVOaFVOZmg0UXs4VDMzQ1NmOCg1RU8uRHVAMX5kJkdyUSZGUnBnIzwoPlB+WzxMdDY6Z1AqQH4sQVAzJXgxeHlwKWt8bTduNkYhb3krLG1JRllFVlZC''@;'; put 'put ''TTB9WUVoSF9oaSFTel1JYz9KNEtKQnpZQ0pEYHgyeHgyMTlhZjFhUC8qQktGM04mV1p6N1Q2ciV+PnpLYTdETVRGWE1Lc2tld2d7VFApPno9c1dySX54TDdUWGpARjs3QGkvUyVHJXBAOkhVWFApUlZHQiZwZWQ4IlR+dW14OkZ8QjZNcWI/bjVqNnx1JUxrfEMwekFheHp1IWxAL2taT2p2e3By''@;'; put 'put ''Ympzd2dQZmJlWkomJF8iVUAwPmhRdTlrWXkrOVd9TEdYWEBZejEwVDx4U0M4XTk/PXx+a0R8OFc7cGVeZyRKS1VqOHZmeWpIX3dJRT1vRGo5MCRNaF5qZGBONHR5VSFTNVhqc3AoOzEvcjZpbUx2VzNQeyMxaE43Wn1QTSRUQiJnRUxuK3IsKnZSfFhWTiY5PSNKVlhgPC5gdnk/NmR0Mj1PYiho''@;'; put 'put ''MHdFbVBvbHhlSDsoOzhobTJmL2lCOHVGdj51eVFJbiYpbT9xW2toeGFLLktIM3J8ZS5iS0pqYmR9dTA4aXdkfDVoNE48YChNaV5IY3tROV9AK2pbe0hlVyFFQG89Mik9eXwkUiNEbTA0Zn5sYzVIP1hReFZSX3p1LCZwInNIO1NqbndbZCRXXnwjJVVKZCFKTDAwbk97XkBARl51bEomU2JQXXB6''@;'; put 'put ''QEN1TThRbWhGaFM+UT9fbHdaN3RvVl9sLEMvPGFHMFZYdS5UZ2t1KjU5ZWVfcHlkNlZtP2d7XW8wITkwZlc7byg3RUlreFc5YWZxZUBVOGFETlhaOXIzflEmTWc8RzZ5S21PKihGcElFZi5fVnQ/ZiUhT3tVfTJPSHtiPnxXcy85SntlUHojQERkKWYzKTlQV3x1YyFsd1EhZTZSQj1aKmZ9JVhi''@;'; put 'put ''RkQsdT1AWnF6WUkoUj5GUn1qaU5+aGAsUD0+aUoyJn43dG9Zai9wNiVBZH0uVnQpSV9JJkpZNy9nfTJ1KFR+biNhZ3N8fD1OVSFpb0hHd2B7LF96TkxBdlZyTyxPd2svTi4ucTQka0lebnR0MW9MI1s6VCFScHlod1RYcjN+InMsaGNLS2cwRWA9LExRSldMckNnQVE/eE9GQzRUen1yaGY7aVM0''@;'; put 'put ''cFR6K1l1YERqWj03QFcyRXxlb25AQl1NVCNITyVVTUNYe1ROd3V3PCtfaFJrYF1TY0YuP2h1TE4yTnhfaV5QMChvaGlGWjd4ci45KnVHO3lCZ2ghNS9ObWpjUVVlbFV5b1pOTjV2PVopQT5ubTVvWEhYKE5WIl9lTGhHNlMoVUhmcldYSD43TFR9XVRZOUZwT0NbPjRebEttRGpILj95aiFuTUou''@;'; put 'put ''RFl0NiJgbChyZlAsPUg7d0tZPWFgYVdIMEhFRG1WYEpNSStlM1kveGRDJjAkbkRwRiRAdDB8PnIrS31jLGlJSlVsUn5sPjxEdDNbezZvSnAzMl5sJHw6flVAbTV1SSMjR0xZY2hEImQ8IWs0QSNZTiM3Z100KTN3KSFScXRPOXNgPmd3YXAwbVQ1PEZmTmNWWm9ES1AlUyQ2a0c0OjVCekEmWXZk''@;'; put 'put ''NEhpcilaRVp5Vkc+bzkrUF0zZz87XkZVe0B6Q2U0YXU7UyhQVW8mNm4pP1NdNkUpQiRFRWpDUCRfekZmZ2tfZ2Y6Ok1Od0ZPSCskdGpjfCtfJG4uPSwvajdATGFaeD8+eyh4Y21iNH44LlsveHBBWWZxSj0vfU9XcH43bSwmWVhTdEJLYFpqbjU5YG1TZ3JORGZUXWBtWVZ9aXl6MHo9LiImZjss''@;'; put 'put ''Zz5IJSo3aFc3bGBON2lrcV04SlcrIUdKIl9mOCQxUHk8XSM+e1UkX1BDQyheKFNUWTx8WGJSMiQ1V1IiOUJlWWgxPCl2NiYkJDR0ImRCW3o2ay96Qz1FWi9bZl1SJDgiKS9pQmZwZjM2amhDdkJ+OzEuWGJ6bSs/eDY1eC9ZNHZtTDJCP3ohM0d8X2Y7ZlZqPUhiSGJwKUAzOFY+IVpzMEVscVEw''@;'; put 'put ''a21PSSo5NkxwNltiI1NZQ204NlYlRHdwZkBlZiw/dXshQ18lLk9DKTIwXzksWloqPy5SOVpYLCUkNWpDKzNLPEwidV9RPEdrVmMxQCZPKn5MRHEzN3U5dGttbEEmYWJMPU1WOks2fXBFKitmM1A4fDFnNlhWS14vbFhzKGBzUmoibVEwK31HM1tOPWRtU2NIe3xZWWk3fTpkNk4vSl89fEBvRHpB''@;'; put 'put ''RGtXaTM8dWVsKj1YZm9ILFs0PHVTLjpmfj80fSpvV1NxSiUvaGl1UUFhb3VQTWhXQD5XLDl3NHN1U1V1OFM/Tz0/QD9sRUplbVZ7aSVzSUQjfX54Y0olWGZsTXsvbFQiIil1YUp3a19oTllDcDxUQFk8d2Q2eDJLLm1wY2dMV2V4OGlNUFRkLkN2IytXPmNGcU1wOilRVk1oVSQxcy9HSD9XSiMr''@;'; put 'put ''XX4qM15KVypgWFJGPEtDUip2UkxObTp7Nj0pMTgiU3o/WjlNYjFBVytNc01gMU5rQ35qRzRuIzgpeHt7M10hUTFyR2NqRFYxWVNvQ31sZUtEczdCdUh3YC8oNz8jPWZIJllgbnEsYltGeU5NLHZKZUsqOSNwR042JUpKSjJCdXxTR2E2XXRRJE1aUUdbZ2RUTWl8e2puMlc8TVJVIWgzVmtxdHRa''@;'; put 'put ''VVV8Onh2LD93ZUdAYXI1a10/KGE6WVc9ZzEhdCp+R0xuLExdUzpbTSxDI3ZQUl55TWNPJXUjbmt+YCR6UShofkN1KCQvdWw/bkRjeS91N1Z7dXBgUVRodVl6Vn19VTU1SGJkfipeUnwqfT1UZDF7UVFDTkE/Qn1xUSs6XmVgbEszUmFmeiQhIUhYUEt3fk9xJn1aUnYha11HQUglTVMzWEtseUYw''@;'; put 'put ''bXE0OzJkei9EKD5XT1VAdndzYUMlUm0vNHF1QGltaV1yVXgkYztjfCJnPG5DaltfPlFvSUhLOWN3bkJbJHQrOGUubEd+cXw0aSRTRCZqfChAdD4mNnZoXi5eWkVFPUQwPEYodH09czVVeV4wL34qTDBDRSM8fmRidjxxcFZ8ekFJd0Zoc3UqNGVUM2o5TXE7MEtxZ1pBSHFkeFl6P0RyXypiYixN''@;'; put 'put ''QjpFeGNyVF5wP1dBdyU0P0VjNWZaa3dEKCxibyVwdiheUnx6OEk5Tl04K0FINlBGLl1EKy5dKG9ie2hxWnRmeDN5Li84IXVARktoImxvcH5mZFNTNCQ3XXE7YT1aSXwhdWssNix9MDZEK3s8b0RfPTVMK2pLd0FUJXMlYTptUlhJNWArPzdESkZSYHV4b3k8KmhIbG18dkAxKT1iVlY9aV5kJiVJ''@;'; put 'put ''UDReLDZ8eEdRbWpwQDYlJGlrK0chLGM8dH0meHFPfX1Gam8wI0VrNTs0OGYhOUlaaEFhYjdVVkdMITpOV0lsK0RtLjkmN30zX1JlXk5eempkQTdEa1pDV1MrUmVJNk5QSzk8X3AyTz9pJXNKZn1HNW9peCk6cnY7THFUbTo7SSNZKXRbQnU4I0BCelBlMCw4dl0mOi5fe0I5fkxyTkIoSVopPD1H''@;'; put 'put ''fEQrRHhgKkY7ZSlUUzBlfjxkLHFqRXp3TyVsVFVgP0dXUzhMdX18RC81N1N4NHVDWEg7REpQPXxUe2xaazUuSzd6SlZAcjNCYShgSVd7I21PIVpXdWY+dWxFez83QkNpWCImKWYoQGs3SFB3aiYhP1ZaNV14X104MmRlMkAodGcrRnU+Uyh9IV84b0YsbVo0Q21hfGQmWDBLN3A/Q1B4Y1EoY15H''@;'; put 'put ''YlVOWUVaMkZfejVFd1JdRk55P0xZbSY2Mj4+RlQzK18oKyU1R0hoPmZwbWRWUGZOXXJodHs8ZkpoPmpnczwyIVIxRjtFNHgjXnJSd25GTWBxR35eSG16Y3VUe2diKkgzUkhkOUlXOk4rKEEsMUNUOF1QcCFIWns9PTs1L2U9d2ZXTkNsWm84djdNWUhXMUBWdSlmLE40cyxnN0p6LFNTOUBRfDhd''@;'; put 'put ''KGJ3Vj8yQ2ZHYX0kIlp4Wn1gLytkLzVeSC4/PFZtb0U3JEBeMzI2ZUxXUDAoWlBaMGZue1BQO1t5O3JnSCQ9KCxNSWtkVTUpKVJUZS97bWhgNHN+eXtbKiVqXiFoRWk0fFgpPTMueX0jZ3sufltvSj9INCFZQnRuSng/KmhpJjFsLjYsYiNWRiV4OWxMIWN+Pk8zdk0xS0hMe0I7M1EkdVFGVD5i''@;'; put 'put ''W0JHLCxVLkY0L209czZPKVNfP3YlWSRmaTtEe1BtL3NwQGV2Q3BLW3dIPDxlMXJXYzovPjh6OiZ+Qi4hfWlEWixSXzwzVzI7PzxsMHhSLjp7WD0+eGkxfkB3JEkpbmEsRllXbWxdLDUlO0xgPyhsKyJmMGxdLjp3MmprY3d+PX52RUhaYU5ifHo/R1s6JDg/dzo1KjBlRUEhfCQyTkRiazFeVzd8''@;'; put 'put ''fCwiNXtlcXgvVWlyV0BNKHw1cEgjOV8+cGFdcHg5OHMpQzQ9ZkQuZXBIRFo6cG15M149SUdTVFJCbDIqfHRWKzhER1RuJiFiKWNiNmV2bXplendidGlVcE1XUmo2R1U9K09BQ3s9dWZCa3wyZU8ofFhaOF82P2V4RSxGenlBM05STU5MO2Jgbi5zLmpKIV5UR3ZXI20uVSlvbUdoVUBDbG80PVFH''@;'; put 'put ''JiU/IyFuLGs/fCo1PjlmWkI4UEFjQkJCLytkUzwxSDVSXUp6NGZEVUx4aVE4Onk9JDZLYFtAOGRWIXFaWEJmWXg1cUsyPkR8QXNySCFGTzBvWEU/Mz1hXV12TS9pUURgfigmRWd2IyhrcVVEQ3JyYjtIcUNQVyI2ZSZZNXR1VV5wUTVPQSFRPz10ekVlWSY8LjNiRjc+IXRjJn5JJlEmOU0ycExI''@;'; put 'put ''QmtzIjVHeVtDdFJgYSVzVEpkQmdTUGIoVDQoWmszN2NTWHJlYVJQQVRfdXxJNDVIS2EyREQwTls3bDtEUjZzbzY9WW1pa2V9T2UkNXZSLj9qQllbWUVqIX1VRDd9I2ZWZEBtfE1WTDQpLEBhLzRIbi9hZyZSWlpzSmA+bDByXU5yZktAbT40NDd7S2c2UEo6ejYrU1hDQzRsPCoiclFaXTRmZEdq''@;'; put 'put ''Ty5CZ3sjO3RvMV0jR2xTPVQ1YlMkRSVtd2BITzQvTSFEQ35kOnU6elUzTTV6fGVYVlpZd211USJ+OFFMTGQoO2ldcUgzIit5Z2swUitNbE9AdGVbajVHWWhgc2RSV0pAR0MmWEJhUitlYT1oOElRT0s1T21NYmBFZWkoVD5zWTRANU9sSGZTSmA1RjR0ZCVLXmZzfVQjdnJ7MElyRTo9OnQ0XkZp''@;'; put 'put ''USpLP3ghJEFneiYxJHhwckk4KTFEZDFWUFFkUyUpNUJiKk0jRWslZWdDfGRnRnlVPyI8YVR3PC5fc1tiKSFKUUwiNmQ1dF1rXjhNSkRVaiM7TUQ9U1s1Ql1qIXNpLmk5cjMoKyhec1RpWHdYY1kpKH4laF8oJjtnIipFfTpZS3h7PnZAKjpFdW84a2p4c2lAP1RiMUlZOC5Yfm1ldipUV2pnSE16''@;'; put 'put ''dmlNIlo6SVpKPmhxRDpZJXE1ZVNuQnNDTDVhfFg/Yy94MHRhWGRwUmVPb0MlPHAwNXEjY2c/PGtfYzlUR15laklMJXZHUXYxX282XzZYZTp2aXR2RF85WyRjWkJ1Umw/JTFJS1IyQERbSFMyWnRNZUpNe15JJSxEeV5SI2x+PnRTfDgyOzEoOF9rOl09dFAiITFpX1B0MH0zLFUqdzAzIVcseWdh''@;'; put 'put ''Y3FNMXhnbllPRmglQl80Llt6ZytIWjFyd2N9MWRYTF1UM1JKWCopQUZCOjdfV05wdldgUE0zRSFJcEZ3ckdUb0Q6SnUpVCt7V1BwVHFpcX5CJi9HKyFSST5yOWRHW3E7b21OejVZXyJXbEZaaFJXOllKQmYhJjBbXkI1ZmZBOjoqUigwWFpIYjpVfFQiVSVjcGticC5rWzB3S0k1P2FuZlolNXgw''@;'; put 'put ''ZlRpbm5RX2xmekNVdk4iPmlSLlB+NnZGOys4Tyg8SEp6WlU3YylIb0UzIj80VypfMkMiOClGRUIzP1R9dXVNRHxgM2dgLzNnNi9uXiZ7PSopPC4jd3FLbHg9PVtSPVBRcyI1X19ofHI6STVNISQie1hPQmtGLHA7RTBXaHYuTjkxa3s7NyVvJipXKiVkMmRoPGxjMmRtPGwkPUkkeGNQJkxtQlJt''@;'; put 'put ''M1VfRVJaL3ksfS5mNjNGUURnLj48ZjNHWUVKT2AuTnordmJLYyk/dXo8c1tjbD9TO2N3NGtnQk83Q1JebChGb11xcUBUNTs3aUAjdl9UI3MyZWRUT3pQcTxlKCtnYjV2fHRoTV9OKlt8M34qZCI2dW42OG9sQF1NPHMyVWB6TSFGOEQ6c21RIVM6byh9e3NDR053VGRxZDEpNCFZWThebnAoQF43''@;'; put 'put ''ZG07JFc8ND1fNWAyZ1VkOk1LWEsjc3BaSy94OU1pJThZXVUySGRSaTJWQTBNOjkoPHJpUDchbVNtUHFpIWUpRj1XVkc9aGchbCk9TjZDMGFDeGJDfEwlOlpHVntbUVFObkQ6cmR7TVpVc31KdiZxPHBgbTpwLkV9c1ZzOWZKdj1qPlYyZSV9QG12QW9NfV9PaTkyPUArfUp5MDNoSS4yTlg9STtT''@;'; put 'put ''d1VmfjVrRWNuXjMmJCkrXTE8WCo7TnRiXiFTPUFqLlN1dEpoKFhId0RZIUU3X34pemg7c2EiRH1yVUgqPCwmW3lWXV57JSM3dzdjXUdjcSlJPjB8I1NKbG9Ne0tCNlAlWGclT1EoOy9fd3RbdUl8OVVAPUpUTytyeXUxVHU9UGhDdCpdfV9yXzVDRjw6SlY4al9fQ2ovN0c2Vl5MfT1ea2tjK1Rp''@;'; put 'put ''PiJYNWRzMSNZY057QzE+WXtjUj8+Wms3WFliVSlWZGFkZmB+NVFVJHNSUmNDLEohJld+TCFleUhaU3l6ImR+VVp9TEBLS0RoMCwmL2dUclM0NW9LOiNzWVFNTkpWQHxjJlBRYXZiXkNaJFguMmoldnhHc2pjLypyZzFhRkQ3cDdhXUpwW1tFVVRuREk2P0U5b0VaTEFPUUwzNEgkdG9qejF0QGo7''@;'; put 'put ''Y3kvdnFndzdwck5ocUFCY25SXWJHfGt9ak1pQyl2LG87Wi5WMD8mJnUwZk9ueXkpdVQ2Vi5HKUspNVpacmp4czZiMSRPaWtCb2pvLHVXQG5WKUwpP15YR3peMDdWPEYhMUg1X19ZSXtjVHo5RFJTV1FDXytyQH5oITZjYDl3IS9fKkxaPiJkc10oQmFMZjgufU1GTzt2VnpyWnkiSClDYjlgOyg3''@;'; put 'put ''Zj82fVhqW1NtKyl8RUg3fnQrc3xYVkA8VVFuZnRIaGEqa3JDWWt2PGdhaSw7dCRSNHRmcTk7RnZ8a10xOkVZM0c8Q1hMZkx1QjFUKHxJd1RPK0RqM3w4Vjg0dm1TSFhiLDwjKnood19SSnJrTW5GTCpQVGI3VTwrTXpJUnMrP1E1ZGI8ckUlJWVxcHhOS0AzOVBkV0ZFTl9lTVhTbzxJWUVEL2k7''@;'; put 'put ''OGxCZnVnQUN7XmR4fHg1Kj4zRiVuSyF4aGREfEshWzV1eTg4dz8ueEtLX0M3Z0YqejkyWnRHOmE+cUk4a1I/KVE5TGU6dEs6UTohXSZxQE5rRkY9Zi9VfVNNPyI1YlkzcDc/STc7RWZ7Z3B4SnN+cyM2K0s/TEF8e3VoJTRgWFMqeXsoNHhqRiEmd1claTt+Z1Eyfm5TW2wyJWM/XmdDMGd+aG9Z''@;'; put 'put ''WylDfThFJTkmZyo/cmM6W3xIcioyekBXSXkhZFBdSnFwVmgwei9FbG9WS0tIKHF2OGMwOy9PTmlxTkcuQ0Z+KEIlLiJ4NSRfe0VweGJlJTRKUU51M2Q2ZWAodyQkTTxxVEwuMENsJndrIVMjYDJIIzBKcGR6TEAhOTMray9AMHUoU3o/PlUrTGJPKlJ0SCoxRTtsQjdEWWJXUjxHNlNBckJLP0Uh''@;'; put 'put ''ZVdgbWd4OSJSMlAxU3JtRG5vQytHbWNTTXBwdENDSlBhY2twOWhpTUE5VSEhWkJxL3EhYkdXSzR6PEFxVUd+NShqckZSPHVPLGM3REB5NDxtZ0VDK0IrcCo7d1RMNE9gOylMTkd1PEhQVmZ7KTc1LCNxb0FLOn0raEw9TEJ3Lm5zTH1oU1RJYlhVVlErZC9KM343KUsuZz0/JnFEUD1fVjdQWGop''@;'; put 'put ''VERzPl5iOVgmJjNydjxATDhseHE/IVByLyYpOnE9cGYwTDgseERIRG5jeDNwY1tQbTsmTXRhWEJ1dDBYZWhkOSE/RGZVSzZNQkV1Z3huaU9APkxhPDV9TURIMT1ZUzMoKCNkdlVVaHRTczx1eVB6YU9WVjYicTNxLDticyYhc3lmLlAqdHpRQ3x2UXddQVdYTFIyW295eUd3NTJbMHg+JSlMcTlf''@;'; put 'put ''aHJgfD8vISpDcXdKTmx6UjFlI2h8S3VhWEY9LGUkWmVkNEtLOVZ4dnh5SlFDblErWUkwd3E+KWZORyxRKD92Xko9NjF0e1MwaDpoKUZgXVNfNiRWTyNAZis5K1ojQDhofDU6bE0sOUVQR3BGb2NJcFsjKVhfMTl9Tj0qSz18e2dDUWE4PkEmdXRaJFFITE4sIWdYNnUlTEBOKS9MYUMrJHE8bj4y''@;'; put 'put ''JVtJRlZXREZyZWdLOzI4QypZaElWb0BBMVRiZkBJfF07JDpTZkI/d2dHR3VjOVNkSTcyVFVWVnhVMEpAPStIMyNCemN+XShVKDZPaHMvb2tFbEFocF5IYHY7ejJTXm1VfSFzYC5pMiNUUSJIciFEQm1XMSJ1bVIoQnhGImF9dFowM1AwRHAkR0Vxc3ckYVtjXkVjP3ded052cVglYklOfF5wLyND''@;'; put 'put ''TSYqaCImRVo3SVp+RX5YKHglNlpHO3Fzd0JUIntUX2k1cmAxXi9bIT8hU0c+WmxuPHhqVT80ayJgP295dCQqbV48bjZFWjllL2g5P2NlXihMXys6P3g3biV3XmRENX04eDRWRDcpXVcpbF0wYSJtYU83WEBwZHc8fWQ8bF96dk16clZoWzZWSzgrRVI8W1YlV0woWEc9PG9FWUNoLylhODE1bFBD''@;'; put 'put ''KH03fH5ybDU7PnwrSjRaQEV0Im54KSJQUG48K2M4fjthSWV8MHQzZV8ocDkja1YyOEN0c3kxKzpEZGNoYlhtcDgoaEooO0ZpY3FaPUVIMmVzYCtNOT98XjN6PkVSNkBeWGQhdm5mWVpVbzF3VyVyOlE7SXJkaEEyRj5JYy5QOXkhO3cjMTAmKCpJRykqOmI9TH1AXVdoXTFTfDdjXj91cjs+VmVQ''@;'; put 'put ''WCNvdShYN3g+QyhpYUZAd0k7L3U/Uy4mMX1SSkRSNTcqJmVeOV8/WV0/JHt1WllHI2csWDJnMTd4a3kyO0FiSzsxMXBTSXZOTChXSFh+ZTs2fXx6e1guLnc1Pns+O00uTz5CPFd+M0NMZixwayo9Uy8lKlFDM3NpN3w+cSZhZ0t1IjJAfW8zQT9nTW57eS9IX2J5WjxJdUdAQzNIQ15mbUY7PnFy''@;'; put 'put ''WkZvX0dNc3tfLDdRV1R8THYkcztjTTJoTmJ1dWNXN0UsZG5iNz8vaTVMcSQ/UzEiSG9samIhfCRjRj87azosVnN4QHthSGUseHVoOUpwWzhnMW5fS1g0JVV6VjgsaUpsPy94bT47SCk1YF91ejJuNTJAMUoxPUxfM1QsOi5LOWxiRkUkbnk9PG1sQDJ6KCwrVSlvajlSO20kRytaNS5jLD5ZRCU9''@;'; put 'put ''RFtifEU3fUUvOXhVcXdKTWs3VmYkPlBvYmQhRHk/RHtpVDEzfXoveGNJQDFSIyVifXJIb1NgMHUzcT5WSCt+Z3wjcnQ7UjkoVHhJM3BfJT4zSF5BWTNXQU97W0V4N0trcE4wcFhnV1RPcmYvW31yQGFOOHNtbSoqam1sNzc7Y1JAVTlgQVt5RlNJOENgRkt4cnZzb31jV2pzeTZTckpLaHJDZVQ/''@;'; put 'put ''QXRmPiQ8WUleV1FPTCEpclp+ZjlYNWBvSjgkTGFiejJSSGF2L1tYfU8lQnx8RHIwVFdYWUxhL3NhPU0kUGY0WldpLzJkVWEpeVkvUTQ5WmJ9OWdkIz5gbHgjaWJGMXBAZUJEOTpTPG9NeVVIbmluIzJ5fWdedU1ZYVNWbXkuSl1HP2ErT3VXdVl3aWltezBYblUsK0o+Vl5tYlQpS1ZucVc1UFs6''@;'; put 'put ''IjdLYyUmYEg6InhQYFUqWjlaXSpkb3cpSzAyVCNyaz5AYDF1dmQ5ZCRqOmZVT1ZtLkF3K35qKTYmSCk4al9seltkTDVBWHdlcks0KWxYfHUmemxnKW5PUz5Ke29Ac3tHRXlMciR8I0FSInZ4cHsqN009RmJjb2N4cis9OFc9STBqUzBMUXpuNnJEJWxXbz5JUCRQWCM4MU57O2E4TCRtRltXPExv''@;'; put 'put ''OzlSPThVKllKIzBMPypBcCkqSVhmYVNoLjx+Mzt8ak54NXhNVGg4Jl09IURMNSg8MnciMXtKfjFEcFQ1bGNILHohTVMxd0lQRzBERlswQ2N7emN0TnRESW0yMX0wayVaUH5PeERWLkJUOTosKC4pSkhASSllJW53JWY3XnV7VW46JE9Zcy5UeTJCQUZnQTMkdHB3fFc2R2tVXm1BQXdSV09TbmdM''@;'; put 'put ''NHhpW1hKNEdTS1VfVWZYRmBRRiVpPlVCTCFgZyxWeixwM0xFcSZPSHI2aiJeVSlSVGMkYDM+U2Rzd2tWPzlLals+eHNtLnlaKn5xbjBXMzBAS1t8MWp6YWY2RiREPzxIRGBeTmBLOXlHYiEiPUlDdWNOT2psJToxZ3g/YW59OVUhYTJ4cFMkWlJhbk1LIWVtQUoofHtaZ2IxMlsydGM7RyI/NH14''@;'; put 'put ''aU9DZ3N6dSx3WUdYPmlRK00/XyhgSkReOHdwPXtndT4kJUAlRzlYUSFgOlg1cyF8ckZoRVFZXXtbYyRnV09TbWk+N2cmZFJjUDg0PmVnRTI1bG1eJkouIWU2XTkwP3NWUDNTTT1eUTVCNikkZWxebjlkM2J7YylvckN5ITRVKX1BVCh3SDQ5cjdDNXluaGd5aEpbTWpvbXxHMDRwZDFRaEYyYFku''@;'; put 'put ''djEuRmswYSp2RVd+P11gYldidVdwVC40UVhxRHFxPThTWkZofHpjKTx3bXxgZ2N7VzlYeEZyN0toWk0zcGJIRlJ0UmVVZSR7eEpFe1tla1pVUCszYiJ3e0p4c21IYlAiQThYNTVrOE9KKFFKWnBPYF9GcCZGNG1LWl0kNTdZbD8seHhnI3NNV19zcDEhKnR0RHBUVjdPQEo9KHM9dl5WKnpjWldi''@;'; put 'put ''YV40a3tyL1pUbXwxTFdWbiQkeW5aakA1N0pPeD9TJTt7S21za1ltYDNiJXlPW2hVJmdsQjhLMi5gMis7PC9eNXNycjJHTWhlOVhuPVBfalUrUWBHYElYNncrWjZLdz1jTW40am0vMEVfUl0pejlyb3E9WDE4TDpLejRrNHgyWCQ2YDx4fThAdjhidlUibDdYLkpAZCkwRnpHbSZyUkcqSmZ1Jj5i''@;'; put 'put ''JXg3V3VMX3BDOmhnSVJTPShhKzY/L2F3JXQsSUg0c14ie353MWBsTj1UJU1kUTleJH1FIWZQME4rMmxkYWkhLl8+QzRAWCxhPFc8S3UrSVswMSo/KHI/LjsmbCxqK2VLKjMmXmdvREI+YDsocWRLK3VvX0NCP18vUC9GZ29kUzl6dXhUTHx2Nm9sLjNaWyVFLDFKPCQkRSVaYSFCZVViZS5aYCQ/''@;'; put 'put ''d3k/LmhLI1cqREQ5S2lHd108PSo8U3YuY2NHbFBPKSJ5a3lQb1UrfEI5cXY+T3xhdVVGWUJ5KTBVUWk4eigkSzAvcCooPyNKQ34jcUY4Y2xSU1RmcHNxNF5KMC5UTCImez5PQ0Y7PFh+T2xnc0gxOnN8bTZ7d2pRR3grP0xmKkVzOnt4cT1GSS8pSXI9cHslWmhDYylmMmpReWRoNkFvYjNORFVM''@;'; put 'put ''IWQ1OFNHI1RlWyw0Q2VOSEYkSGVDPVhgVXdBOCV1OGE9JjJzO35EcGxxUVYiSERoeHhOMitPYGolczhaZyxFdGsuNVdhUTdMKEhlUVN9azV+XlokQjE2UndbZlMqXjEqN0hCcnwhcHBDaC8jZFpSKDFTMWJiRjtWbWswd3tNYi91eixOaX5aNTZ6OUAuX3ZuR3NIU2l6XSV3VTBzYHwwI11geSJZ''@;'; put 'put ''OHl4RGYxVHp+akV4KzMsazojKjIsO2w9R0t9eGVoeFE/YUwjfj47VyEkPVRmInp+dHpFTWNETS96SCtSPnYjSHhUV2E8IVdNdjZqNmRXJUUzdyRib19DUDB2RGhsQlVxODhDYl5YK0olfCheWHl0bnJTOG1yXWo/IkBJTWd5anhgYVNPQyF8d15sQTdlN2ozLEZQfE9nV1h7Njt4XlczfiFrL1Rh''@;'; put 'put ''UDBeViY4Qnhlb2xhYXoxP05ZeEQmNy5tcD5ILlg9eE9Vdm98PlZBUEZtOiJiNlJ2WkF9bz50MGJJQVo6UWFuP0lpT3hmfURBOjEuN3M/TWB+WWQuWHFtX11BODxDZCYwJnJJUGkqQFVDWCM3bGZ+PCxkel51SHs0JHM1P3tffkJvUSN0RTFgJncvVXlUbWVOMHtQJlZiPjh+dz8jZ1E+QEhpM0Vd''@;'; put 'put ''TSt9YixEek06WlVsfT5tU1lHOUVGZmp6eXRBZiEsfm8kSiZWQzMybGdHYVFVW0ZZd1NNTGo8Uik0Yl1rYyRdVSpHVkRYKlQqbCZGOjVbNl84MH1hMlcxXnEuUTUiKVohc1VoI2x4RShMMiFObUwiZ1s3dF5fPyowUytxamxMOXFTSCwme0hbV2J4SV96eFVhdl56bT4wfmFAWnFqRGo5eCE+b0lA''@;'; put 'put ''VStuSW1eTjgySHZYaHpbXj4ucFAvIi9rKTBOL0Vae2VUV2BEZF1yW31WR0JzTT1SITtPQnkuQDlRVT5GbVRqa28hNF1VbnM9X2d4JlFndS9AQ3lUN0x2SiRIekJ8REVfdVVWRzc8VVFbfmpyKUtLfFBxdTtMOGd+ZHxvI3slUnRmWlFSPiJwRXc0RnUsQXdrdV9zWVNwdUIoZ0AwJjsxJVIofT0r''@;'; put 'put ''Ln1TUms/c1IhZUFHYShXUG0xdlFlWmpCKltBc2hwWFkwamIuJDVEcmhUPy41OiRhND5BbH13fVQsZSshZHs7TWcvaFZfPj1hT2BFS3xfdS4pc3MxIzVSQGFgMWM2X2ZNOmZJNDZEUDYja1N6W0Z1T2VQbmBISzAybFU3ekZjOkc2IXRdP0lPLDVkUkpPODd2JDZ5SUEidix2N0s4SGtrPyZDX1B2''@;'; put 'put ''VFQmamZpcjhPTixCZHB2KSJMcn5UWWosdWE5TnhBckltYiUpYHNrWXBndCFkWjt1IiJZZiptY0xUL1hWaD1Qay82THQ2IjIyOG5fWiUkY0dzQzt5cUB5UUI6SW9mJipWcyoqSnFMJWVhRmwreltxYm9vYzZeP3h+TTUpOmRSX0l0Ll1GK0ljU24zR2FXKnd4RixsWloxLFcodklELjpJQUcqSVdH''@;'; put 'put ''YWs/RUBlXz82eDQ5cW59Rj9LQU9DWCE2WDc5LyU2JCVxJiZiNy5qYnt4TmQkaWx6fCpLOzMyV2YkZSlTbz85IXs/KX13Y0glM15gWDBnWiw3N2NEZm9DSDNtZU88OCptOz9NPngvcyV9Ni5eMVBbPEc3VlBUcnFgPUJPImVfS01XPFs/eyt1PXFaYGMzQDRZO358cChISjlte3Y0ImU0SkF1Zz83''@;'; put 'put ''cj4rQHVPfSlFMWcucCMzd0gzPkZIK2c9e0soP2RKd0x3I0NtfjZQfjtdUXArWWIzNj44Zj42QkUzcUhzciFmZihiUVdMdnkwfSpDUy86OWxkc34+eSRSJmQ6N28iLi8hajRCdnY9PU13bUArXmhHN1g2MX1SaUUkfCI2bWd6ajBQSU1zdzw9UndAQCMkVVFURGQqWHJJXzBiP0RbMDojbXl1Iiha''@;'; put 'put ''NnFHSGlhaGhVVTF0MGxjN01TKkBvdyNnTjlGST0weF4/JiJaYjd5NEkxRHolWlBsJnVnNWpSNnRTNH1WVmMuZkE5NkdnJG9bJGVJc2Q5QigodmxqPmVpZVRQfkopbktnSUsyK19GX0F2Skw9bTBSa35kblB0Kj13NUgwXXQpNGFpQzd9KT8xRzp4RCR0REZXfWZxfEsuOlpVUXdMbS9YUXZrfkI4''@;'; put 'put ''eHhyUGRUVUVKZl1tYj9EeH4oOCgkPilmJTV+fG5xaDhVKTBZJDZJeDduRF50UFddWWlQVSxqMFEobzxgMUlZU1BVITdVUHhUVShYV1dbJGBdRm0wI1E8IUV8ZXY7UjNTfHlpbkNtSHk7K3RDSEApIVN+QkczSjhIbCo4T3slUm9aUllBIiEoOjpFJWdYVSZwJjUmbmxleihdfitvQm09JXkiMjJ6''@;'; put 'put ''L3tvclhjalJ8eC8kOSFVWSMrMEwyJmlnVGg2blppOjooaV14Ui9UXzNweXBmPTo5WGtJRnJJYHQxRn4rd19qWiRbbHZnS1FJSyRNKV1WeE9UXXwkeDI2a1Fqcy4qWSwlUV9YYlkoQnY4QmwlSlkhTjkza2ZTVFNZRkwsVCxbU1AzZUswXkVOMVkuLCFsKDNhMEttfHd6OU48Zi9UPWtKNUQmSSI0''@;'; put 'put ''RjhUKnxVfiVOWkxEN1tGeFQ+S2w9TmkrQEhCP0wjb2hFKlIydyxlcl8+a0Z+blZuKmdJUmwvaSpSRD57S0RHWG4qJEBHaDV7ZSJuVm1icGRIeXNjYmdYVWRJSnRLc2AyPVsqeihGIX51NC9OajtZWEdDKFVVLE5hTWZHLmt3NDMrREJlQ1QzZjkpT0hTQ1MpZD5tXixkUFdQeDRgXzAsMXhQOCUz''@;'; put 'put ''QWBZTWVfWTI9PCU4ZjliM3g5ZDMrfnhaJEh9WExiSUc5Iz9yYn5dUUc+Nz8+NG41JkFZNkBdeiZXMyNIfl5pN0tSd04xREJQS1QkRWJFRl0kMVQkc2YxPSJmN3pbZGtuSm9MRFtlOz9ZbUgpKnM6RFZ8WHJeTCsmbUgvc0RpaUc1Ml5YLjovKVQlLyV6aGEmOmlbMlFIUDheJFhTfGVuSFVefjdO''@;'; put 'put ''WWVpeHopYDRrMWRxQ2dSUUkxSFJvODddKEJpbm0uNUFSWTkiczYlL0BePjooWGpTc0oiaDljenxNWWs7RXMsRjFUSDJIeHY3NTdyYzx5aTYiLjxfLixFPTV7SUlUR0U1P1NlTWp6VDVUPG1fMGtRNllHUlokO1NuUUtJS2JoMyFodz5VRVlFdnY+bFpsOmkheUtzYVhoWStYNzUiam9NMW82ZTU+''@;'; put 'put ''bV9RVzBTV0JtOEd6OXByVlljO0tdRH5JZGN9Uks/N19DL1VoWWlTYjNSV1s/a2gxSGV1RF56RmIiMnssNXthb0lBKV8jbG1hZz9QKnlvYlM7K2V5dCgsPF9qSGhfXlVRYTAoSltJfml2QEY9aDk4OWV8bWtHfT87b04lQ3Bgc0pUU2hTSShfdUd2LzJPIVB0dFlva10yQkxfSi9EblgoY2RdOjZx''@;'; put 'put ''SHIkZy5RZmZmX3UlIX46KkosNXg0SVJRemRqUHU5MDRjaVBkT0FlWCREd2BNSGVhXXFYdT0+aUxfOHRMdzFvb3U0ZWpgViYqZEZ2KkglMUZFd2dsJSVDTHBjdTBbLilCUSFCdjxoN01vUTl+SU5YaVRqVEZYX3NAQGkyOSkhb0ZMQ11IZF98bzg+SkdYb1cwZH13VnFpbENUYyZDVXdEN3w2TW18''@;'; put 'put ''W3ZLWjx7cU9hRUJHQnM9akdKa1JRcnFWdGc2KlJDd0ZWX2EoWnhRNW5HVntaP2JXaFltW2dQRT1JbEBRLHRLMCxYXj9CZUNYJnM8byllMkJ1KXMoYDBnWUJZdzVXWUJjJkpqbi9hKmdXRSpANF1mV2kkSk42RC90UkJLWHheWjloYDJ5flZhOk8wJER9WDl6QE5OWHtVaUY0QXgzT2x4ZGMpLHFZ''@;'; put 'put ''YXE6JVIlW0lGOzZ9RVd7YVg8Rk4+SHl9aTl5PVVGMmtMQnxbeClNV0wxVHFZXTo8cS9MKlNHdEtiLmhLVD5CTXtVZiMma2YmL0A8Y2E6bzM3OyMqeUNEc2VaaHdGUjgqNH1UJS90SFNKYi8uUmJwazU5Tk5bZ3ZoaTpEZF11Mj1xPWVtaFpEM3lddUdIQ11LOCxbWCg/dS4wOis6XWFzKSg3SFJA''@;'; put 'put ''N0h8UW9+cU5xKCJKI2R0djVEMjt2MDAyWVJoJi9oeEh5Mk9tfktaPW46X0BZRksjfj00I0w7Y0gsfSwmJmJtZFMhPkguJU05NXw2aUBZYnBTdkkwUWo1MTYxQzBWUFV3VDxaMEZGRWciWDpqOi9NQXlDKiwiQ2ZKNV0zTC4/IiFbNUQhdXFfSUIqeHJtPSNGYi9AV11OTzBqOCM6MEMzQl5KOT0+''@;'; put 'put ''Pz9qYzdSKF10SlB3RnZ9QiNoX1NlaiM/Jm5NR216flZgWV95WXk5dldOUVVuT2w9az5kX19DNyE3Y1kqNHRvQSp4WEtpODpmczZ5dWVbbDNIXz9DcHs1JmlqPyQqU1IuN1hZVVtYcj1wT0RRbTR4fFM3N0YpQSY+aEw0dlBiKyo4fnRHQX4pWDgzYG1leE45UT0rNU4wKVNuMHFWdiFyMCR+YEg3''@;'; put 'put ''RkxuZypxbyQybXZgOUowJWImQEtCWmZINlI3aGNNPGY8R1lLcEpXLClkOT5YTGdfJjRuZktYQmJbOkleaShPaCNCVzVrJHNka1phYXI3Mk5RTGlsTDFEQ1R6MGM2eT4uUUxCe1EodWI1Zi4peHRJSVBTc3B4ezpvOFlSeiNOYHhPfmBCMUsicjMpRFo6UmpnajY9dCpYfS4vfVNxZCwlSiJ5PUl3''@;'; put 'put ''dU0qMy52YGY+fDxLWXVyZyhkdDBHeU9qRnJDQ3hvRV1hcjV7UiJMTk55dHRwRXNgOjosNyt8NEI4bFY0Sj0hWWQ7YlVIUzF1NVYlO0VLOEVoY0BMPWFZUTA6e3EvNExZbzFzZ2R6YmxvajpkRCNZa01pLnsySiR6bDllPFlxPCMqTC92PiRDVy8jNER4fjg5P0NOTV5pZkkzKmMpLCJHcDwmYEJ9''@;'; put 'put ''QkttdH4zazhEWiFoUlc9RSFOe3tgLzZyWXlbSmFSUTkranU6WmxOQWFAfiJddU9ATE8+Sl1xX3FBWCZxbXBpZS98YEw9XyxKNk1ITW9RaWIla2Z1NW1bM3FIUXhiPzE7cztqUn5mXUVkVG4lOX1XVHIzVCh2OnBsU3svXmxIWFB3KnQrMjNfdFoyT3J7cVh2fkshZ1BPd1c4aH5FV2JtbWppbU0o''@;'; put 'put ''bFlrOUQleHhMZmF5NWMiTWNMRVpZWjVodEQwKWVlIkhEVjJUMnVLLE9ucnt+MlsjcDgsQiUkZz02NipkITR9ODxNQDh7Ry5CKjw4X0U2TyJmKmRSSk8zeTo+Z145U3VaYE0wSF5CVVNQRCYxPHhGe1ZrdFE/Qk9ZW1hVVjBuYz9YeDZxeihsZml+YT9bdUZmUEgmW3VdeChUbFNjUks/KHooWzxj''@;'; put 'put ''P294endFR2spaldhYDV1dktmazA7d0N0KXU4VVVpU2lwTF56M1B9XVpgLi9CTjFxfiYsPlpHMU9LcFFFPElLVlMhRlRhd2pNTmJYPFhqdFhTVTJJJC9FdD58fVlmKyNPQj9dUGthPTdhQ0UuYyo/clFIV3k2d0BySEt6dkJRPyFBRDFAbUhnZjA0ZjomfSpBVD84Klh3bmNAQChRKlZYKCYyRHF1''@;'; put 'put ''MDpjZ3hhbCNvOmlZOHU6Sj9PNT0/MDsySjAsfEleeTdodDE8OCZnWTNUVUpVTWJMZ1ZPSVQ2LzBJY15dfTtSJD1UZmA6MV58ZkFETnxid3A+czpURSlmLyZgTW0hbkRFTDIqO2s/WSQ8IX01by5VRltOL0RVPiN4NTFFOWtwJnB6ezA0ZH5QKmF1dzYmXTVlRTBPdUw2dTNsKEw3RHBEQyZCSld0''@;'; put 'put ''eUxmOXdoU11bTFdSYTBvelU9UDg1YFAuWi86NXJNbnliIlFuKz5TP2UkTEJ1Xnl8IXt1U0RYSS45Jj1xRm9wQyVZYlRxcCZbJVQrNSpdInJSaitLP2J0WyRITzRXRTpKMFEpSlpSOFZdYFU6JUVhZzdxK3FdPipYS0dZUksvMUNifDYvVmRAKWgrR1UucFNTdzx+cEpWaDRqWH4/cThRUXhXb1lI''@;'; put 'put ''dDpEKlFwTlcjUHRsYGJNXU00PVJnaiJ+ci8uWGwmcVtsKH4oW0pjMjI5RyxCN1IzWnJ4Zillbi4oMihzSX45ZmtMOnNQfV97X1txXWdwWUNtLk8hZ2FZUTtHazdNSChDUTsoZjJReWxIZSNvc10/QDljS3ZTaDE/LjtiMVJoLlciZ1pOQSV0UklCRjp7WGtZVm16QEdBaXM/X2FycVRiSHJSYDpA''@;'; put 'put ''QTEoL2RhQVpsJVhJRldxY2krKXBiSytPeD0vbTgmWiszTUFyRlEjNns7fXtqQCJWfF1yWTM6WS93emYwYEIhcWVrLF4oakxYJTZydFBVZHt8ZSR9W1Qsd3dEY0Vbb0J5Q2V9U2h0QzUlQU9+fko7YkhqP1Y+OD58SWRpOUN2VzQuLnd0YmoudXRib0xMfWUkK2Bvcy4+TzNneG9IXnh4Z1NTSVZM''@;'; put 'put ''RXx2dGJuKnFqfXs4P301cFZXUjU4YTR8Pk5ib1t2bjBeaiwob3YsR2d8TWV1Lz5VSiVQSTNNPiZtdnNtdjo9PzIhci42Slp0JXJEUXRlTEpbNkNkaSwyKkNkLCFaU25TaiNEYUQ0P3cxYi5OTkw1LnxXRE1mUE1nbmJvaUVeOmRJV0FuPl9mLEJARSoyOT83KClyemhWUWNPQ0E2PWVMRiZteU5O''@;'; put 'put ''Rj1KfHFyJTche2NIfUpvak9jLCpSOj5sIWo3QmRscXMwbU8pcFRvUTUkeUZCXkhvSkJ4VVsoRmt0OVNIVCg5I1ZAejhJIUl5bDkySW82RkdgVTVQaVYvUCtxJH1IXmg5NUJqRzQ2cj4zWS5Xb04vYDprOE58dlNLVks+Jj50TTQ5YyQkSSQzTDVjSz8+N3pbPDwiWEZAby8hPXhNb31vS3dhPEU1''@;'; put 'put ''VFJBXyN2Rl4weWE1V2R3QUB+ckZ9b2tMeHZJUEZ+TERnVEo/M2tWZnNTVkdGWiRjL0kmJkolRWw/cG0rVV5KaXJYUlBkeFlde3pLYHo9ZGlsZXNCY1dFYjF0eCY7NWgjYTF+Mk1rTjkyISplNmwuJkZqLkErLFNqQD9gLFhteiFkTkwmKnxbdjRkSUB7d2NnPihBeDJtUGhSOGciI0RlWjhQVkBs''@;'; put 'put ''UiopRiIuMDZhVXcxfkNFKlNCMHJRSmVddzQ5Tm92eHJsV0tgTGoiRzVBPTV+TUBaPnZHJEpIQHM1Yj5wUjt6PCUpXkRWb0Jzamt4PUlVRyh4RVFUd3t3dEE9U19dcW0ld1NVdWJVSzB4QHVzWjRfM3x0Rl1zUnYkdWddOzd7I1hAbXd+Y2EySm4kIiYhRXJOKWFyaiNHXmxMZVREeXhDLDFzcj8x''@;'; put 'put ''JnRpZnh8ayhGU2NzaXhCSVV1ZVhuOV1qQSl7akdYdjtnYGwpe1V+YX1fcjlGLEIxLiZCclpWUC5Tfj87X3NHKzEzeltWRSRuZ0hld2EzfjFeZC5vX2VlUCMlJWZXS3Z4JUYmb3pONG1Zbzw2cFVHdUt2YzFbOFRAXy93L1Vpb3RFSEN1LnBJailqfihlfGgpT3whKEM5TjojZ0dFRTE0SiRKNSN6''@;'; put 'put ''I1V1bjkwZExSVnpGaCR4UXQvaSh5WW9RSiE7bjJzQSx1eT8iMz9uMipaMCRjLll+OnEjNFMuYEI+KjAhaGBSOVl3a15tIW1HKWJfMXs1TXU8UzN8RSVqMTlkU29XNU0kWm9Qa0VnaFtxNF51ZHNHIT9xYT1nU11iXj1xZTNON00hSHFqODQhSUxTJmhhbDhkI0B7JCgoPzRVSyklX0JjNGxEOGE2''@;'; put 'put ''VWlWQGx7WSRHbCVKVyNlbEtxYypPPTF8R1k9fDIjY15LcXNjT0VXZzwkaUBmPUNRXltEOXFJdyEzMGxGZiY0cVNTJDwsPD1xTkdKSE9iKXx8QWVWUyhNWDZ+PjcxPTNvVkw9a0UhXykyYnV8SGIsK0taTGN2PnZZdGtAbT41amZdY30vZU11fV92cyRrcjdwYSEkcjtMMk0/OWxUfGpofjlONktT''@;'; put 'put ''IStofkwkcU03eF9IfEFBQzlxW1pRL2JpYVIuUiNQJj9PVSsoMnhVRUNwb3xgOm5DR1NYSkpJKk1yO3tQYWs2cT1NT2V3QFpmTDZwelJYXl0sQCNNeDpmKEErMi8wKVovI1lVLmM/THBjamhHa29kX0FLci9nNVVDUyghZyVMbjV9VTo8JlRCcj09JShRKXs3LEVHdWssWU1qMDQoIUZhdVVlWyI/''@;'; put 'put ''aDE6MCx1Lk98e2IhY3F5V05Rezk/bH05NyUoMWd6X2MzXm1KWCpLW2tXLDMiVzApdEo9aGJkdE46KiE9TmspZn1uelY4M1ROXjJ2Q3QhYko3QnswWHtlWyl+Z2wuQ2xhR1VxZURPVylSZ2pvcHBuOkdFVyNnL1FJemBePSR2M0NFdS5ZKnReJl1mclJjUDswXSRYMzs4NU9gKDZnU09WWil3fT14''@;'; put 'put ''e1lBPVlCbzk2JEUoM3NmfFY4PWxWKkhBJT0wMDJoMXBePy5fZmBRZSJfRlBVL2hKNyFVIU9wSVhyIV4qe3V4LnArXy89MXkqOkYhNjMkPUYmI2dAV0JGZl8iTXg5aC96PGchK0A9XT1WNjp8Y3MqaXhlZDddTTJGYiVhe2pOM2EmWUMkO0tUfVZ7UmxfRDRfYT5eO0tDYlJhTkdlIj1Dd3hmcT9J''@;'; put 'put ''dCFtYX4qV1VxWF89b3hqMTN8dV9iTTtFNGI1TyxGR2FeJkVudipiTl4sRVRGMzQzI2Vsb1lvUyJGKjhLbDlNeChHLCtqI29VckUzN0wlbk82SSlfYX51eiJVZGdNKlZEN3lQbWJIYl9EcUJhKm5yOlVHdHo3JUNAVmJLPyNAZ3sxKkhCaTFGVD8hd3R+WiZGSG5FRkIyMyhAUEx8Ti9vSDQ8Q3s/''@;'; put 'put ''JERAKHEsTD5ENkpNK3lHYXRDLyNzMjBXQHM5JHgvMFcpP25oUSQ+LyImT05XLE9PRyRzVlErNUwuQjBKSU00M0xwYy85UEt1IjZ0eCk+aT9HaCI/QFJ3dndJIlAuaUNSfC8xazpZUSl4JXBXRkN9STttc0ZeOWJaajUxQixOd2IkMV4hYj1KJX5BcyhddklqV3YhPkhjTFB4K2tHKmk9OChtTzpE''@;'; put 'put ''OFFRa0RMLE5IcHxKSyJSNG1SVmNiXkEseXQhX0tXZG47NWQkOyMkeVkzSE1JWXUjWmx+PWNhOGMjI3h0TEZiN24qZyk5Q0pGcTpRdHtTaWM1PW9ffDtKOWFGeEA7R1N3bWltKFIsRUcsNCU5M3tnOXticVhlfFkyOWlVI0gsVUs7JmxyXyEoWlV5NTNDRXVyTnpVLnNqeC80eF5aUCRSflF9Nixn''@;'; put 'put ''c35ObkwyUkRKViIicVJwaEBCJi5pJUh9WDtMVTxJPT4/OShhOHlTK3lGbHhFIm5oRW1aUmwiNVp3KVBTemhpU3o/fm08dDJXQi9+dih5e3JvLitjYFtBXyszUypNJlcrUFhaN2NlQkhyL0VsOSM9UEF+ZSNKPSgjOiIraygiISVVNVYwWWRgbzJsQHpWKWAlRis4NkJkMU4ha1tzMylVSy9xZFFl''@;'; put 'put ''c1tLcGFbZCFJOmRXelZwelRiNG1OR0k9PTlQNm9SK1R5Tn5iXmhWQkgqQ0F6XlVQQX0sOHlpTHlGfnVNbzcxcX13UDB3USN2Ymo7K3k3K09gam0veTswRVkuSW1aenJiPV9VZV58Lko2bEA4ayNiWXtyO2xAanYjRmcvbFJAIT9kVDtpUG9NfCEoO3JWeWg7WnVtIXIvLzQ9akxCTXR1QCNjU2l1''@;'; put 'put ''WWsrcUoqTld9NEt6Z11QX0g0WDdkXlNjRXhReiJhYDF7X2krOlFGZHZxfERuK31YLjg+Zlt3SWs9UEVTQFlkTE8hWWZWQlV9WXwwX1NvcmBwd1JZZmJYKGtUQ1JwaCFqZzV1fUUlSVt3THBPN2hZV24yJU5nLGMsZzEzbyo1NDVbQ2A6VlREQylqY3U3JC5xRnNgXlEsblQ8XXJAdnAlaiRHQl98''@;'; put 'put ''SXhWYkw7TDQoUE07IVNAaTsiTF85QlVaem1CaGU2O1Q5RHQmTVlzaU1IZypNQllvP2ldeXRrOXRbcV5hd14/dURwVHJtN1ltc0MieDBwYW1zP0UvZmo6MWdyLjBeJC8kLmpLaShVNntxKFNUTyMjWix6OT0ye1lkODdmP3kyUzZ6enNwOzZVUmVQcDJlWWY4Kz1KTV1ZLjFuOkxpeGA7emM5QT9D''@;'; put 'put ''ZV5dWk8pO09OYXhMfnp2RlYxV1RVOV1rRn18Iyt+U358cGJ0Q3RZR1RYejBJcHsuZy9QOVZHZjJbc1VETiVvLChWTlR4XjVjZ308cz0sJHE/L3B5Jm9iMmNqYVUlL19sNyQvdD9se0prR05je0VFeTNpc2tMd30pb3pQR0RbeDo8MkVYSWQ1TWlWPF5PRU49WEI5KDAkel9XWilPUERlWV4pSjBl''@;'; put 'put ''ZTlNLndyW0tqU3hgWjYrbFE4WStRamoyMnJlTz0vfCxKUi88LGM3ejQqQnglflQoNGFfVCQhNCtAclRGJiRFbFVZeHhwbDpgKGEjXTEqZn4vOT0zNXdOKiJ0W1ZrZEl2KHhHPkApcH5veWd2VlNxVXEjOnJKM0o/byI9LmhNWiFKOX4vSlVHQWVQKjpDKlpnTFR+OHsvSjVORm00a21pUWkpRW5U''@;'; put 'put ''Kls+ZjpjJThQeU1DJXliJi5KLGYlL2B9VUpFeitHLHpKLl16RSh3MmxxfW5iaCpUdDRFLmJLVVdzYH09JXZ1LjouM0tNSSNvZDUsUkc8Vnw8Vk4uJiU+IXJ7JWJBJTc+SUt1bT5aKz9ZUjhSWU9pe1U1Z2NMVEloK2ZDayZ1eXFZOFRkcExhfWxnYmEySmAwKXwlUktvNld2JkE9RCs4UzZEbHti''@;'; put 'put ''LiRnIkBEYkpScHs4KTRjS3loP1hyNF9oL2A6Xlo7JF4zQWt0S0AyOHNGJXZdI2FjVFkoWF5ZcXU1TCMrZ0t6Q3lfSyFbTVIjM24kQnJ7U2MuNDNbJnswPz84VE1kWTUzNXt4ZUhCZGxwW1VzOmZ3bzRJYXBqW3R0PmM3MGo1YCx+aitVc3oxYzk9SioiNyJAPjBMN1kmL0VBb25PY3pmaXpKRWRS''@;'; put 'put ''ISQ1RUh1Ym81RD0wLjFrez81SF5qUzE1NUZHRUlMMkBSPXpac01BYnkjNF5iNkhaWyxgQVlLOWpVZ2NEXyZyQztiZFhmUzZlNj1HZTA9I1VZRGdJdndqbTptS2kuWFRmUDsxVTNgIzg3ZVFmQ1khcHBMSmtVUWNYQzZre2pHfSFIa147OHRKT2J5dnVwR28uUnd5V05veEh6O2w1PXh1IUFqVE44''@;'; put 'put ''Lz4jPWpkLGtNQXJZVVFoOWdpJnFZUCYjZWNfVT11JCJUeTB0aEIpMypOTDovcTgudkV0VW5OXjhsYnRBIixycXNNcWJlPktacDhEPHMkN1ltO0w4Ln1NdzkjIW1WNVZZQ0lTQWJDY0dnZltEVFlXIVAucE9mU2NJMH5HQ20ieH01XiRHZlFJVTBrJWZ4UTQ/Y1IkODl2N3EiMTB+PSEsdWElI2hp''@;'; put 'put ''c0MhPkQjXytjWkd2bm8zdUUyQEUoOUZodU8sZWdzfVNZJl1jKyEoe2E7WkxAJV1WS09PekxTa0pZU10lcCFBXXczJmpCQFdvOFkoZDU7IjVPdFRrJTRDZG1URzMzV0F0Iit4Z1s/Nik4VzBOX3F8cFcwZjZQdnNZaW8jPFE2MHpkNi93PUIvaVtwPUk7bFFfU2o2VFEyV0IqbUQlXVNuaDpsfG1J''@;'; put 'put ''cUojSS5SfC9QJl1KLzMhW2cofVtDJVd1KDB4ZDQyJShNQDVpOF1hQW1+Tz1WKHoleiQoTCZZamxJM1hKOG4rZzxMRUZFV2hXY1V2UUEmTSl1UjNtMDk6U1E8JH1razQvayJYOVtRd1tXZC5JXiRVbj10LDFHU0hHcX5uKF94U3JVQH5lY3VJYiUhUDY0ZGVgXXFMdyZGLFRKak5bYy9qUmlXPWo8''@;'; put 'put ''ZilwaHMhaDJBSjBFb2JkSiheRFR+S1VRVilucCJ+SXBTVjN8ZlRPUnw8QjcscHtYVGdeT0R3fnIpVF0rTTxaOU9zPWhJUHtFU2dHPCEyX1hKRHt6UzgpWjp6YiZtfCoxdHFXclpKek8/O1pNd0xhNG4vNWpLNFI3dEN2cyE1ZEcoVltmWFJDVyM1Ik8/LHZvcGlEa3R5OTgiKVh4b3AsXz5IU0t1''@;'; put 'put ''PHF6fllWMVQmOi5jVXtbMEZVOiR+WHcsWmExLl5zQWo8aSpKSHE/N2N9RVZ6YkNeN3lRM2pGJWMhOzl4b2xgLHImNWVuOTRNRDN1YkRnNVgzW0Zfcj5rQ3xaPVZYfXM9XUhydihPUUE+NGJeYSh8Kls8YX5BT1tBXSEmMUw3dVBDLGZJMyxPKVMsZ3M1LnVlNyY2PV9SVmBmK0oiW05jMWQwe0g4''@;'; put 'put ''VEhlU0dwSFVVYyhQIjpZWUVkQ15pRnAkNSp5VjBaUl5ROmN8dnhDU1k2SUVIS3kmUVM3T35dUk9YVmlYVT1mMUwxd09yWU45TyUwdS9Nfj8ieTVibClbXU08alJpYWpZdCoqWSRYNltwbUxIQ3cvU1NvaDZnRW4iQWNVd3FnWHY3YkBuY1ZyZURgKWVIVmBqdExyT28qbWxqV0BRV2F4NGxqJVVp''@;'; put 'put ''U3l3aEI5eDRITEtSeXMpaDBbWDJaSGRuW3VtP1pHQG1wbjsyW14sXV8mKiQxPWt+QSMqMkBUZUVmbmNGa3Y/RVMrd2NGMW9CTi9ASyVkKHFjd05BP2VkSkN8RWptVnQkWjw3O15RKGg2Uzo3ZlFiSV5uQHgwTWs0Y309W09lfEUqSltRIWMrcSNrTWN0T0p9bk9OI3tnektVN2RWWXNvNiQkKC41''@;'; put 'put ''LDxIJEFgOENTcy9kcU4xN0NTaC5ZaW9ETGcqZ2U1RTBrc0hkajd3d1hiRTopLzh3KUFeNTxKZkNgZDFDX352fEs8fGEpUWQxSmc5NnRaPD8jdnE0QkRWUn0pWTJCXSMjb11id15xOSxvY1hwYDdecT53bnM5bGFTUm44V2I8NDt3c21QZmFBNTt7SXIkMUEvR1ordDtgc1VoP1ppZis5QE5USWgp''@;'; put 'put ''SGN0PXpiMT04LFd0QktnMnkoKnIpP1hgekRYZ0FdWDZKSmZVPT9bZXFtOkdZR1diZEU9UTh5SzBteGJBNzQlfFBOVV18fFtkLm59MUI9SzV5RUchMX5dcSpnPERUSGljcT5qaTNSdn0rLitCU1o2clFFXjw8OjJSOG9EcD42Q0BabWdFfX5eeW5sWXYoKmdCP24/ISoreEBsQFROY3orMCoxSikr''@;'; put 'put ''TTRkTD1dNyx6RWtsLGRbLFQwVldDVjZfQikjbHRCWiQhVnFXR1BLX2FYWkdIR0x4TH1xbF4kJCswMDspZHQoSld3c0RmNW9fJDxSVnlwSEVjdTdCNG9xQmtkQyxEYndaS3Y2RFJkS2AoaCo+WzQwRWFheDAmaVVDMTdtQzd4VDlCaWJKWD5LJnVAMWsreDo2KVFHO1hjKnc1KD11UDtYOigmPW4i''@;'; put 'put ''YCNwV2JGSSRSPzo8bF1RQUpMOGh8NCNkTEg6WGtUUHMrMWZNPSxpLyRgPXRTNE4hcGhSaEYwST0rVCswRyh4QXgiWmwjM2VfejNlRkkrPkNhZzF4Ji8ueTg4fHFGeVNqYEQuIy9MMWgqZihBaTtzTjRBLiFbJWlDIXt3KilTPlo/fkNEdTQpYzFgI2VBQE1ST2ZJVyZoUlgobGtTPjlHMFQ9S08r''@;'; put 'put ''cSZ8UjB2Z01tUXMyOHd2bDh5fDN1dyVod2Isc110IUBiek9obGdafjdUXyVKRDJvOSN8ZHhYZXFuZSVaWUR5TjpbUzwrSFZRUitUVU4sfktmIUh8SkJ5bGBpdj1eMWppNUdUUUdkPXgieFZIQGFQW1dvKUlUdUVmVXdlNVJqS0Z0ZWNIcFg3cypDdz9SWEFvU2RKK2F4ZDR7W1JgJG9DdCg1Tj5s''@;'; put 'put ''KUg0UkdFMHJXWk8qLlghXSpyVjU6anYmYD1oazY4KjpvcS8wX0JsMl9OJVRGclVoSDAqdnopW1lUPVtCcFgmTm5TflFTWnY+dlc9eW5CWTFVTF9HIXNXcj96Zn5JLGpuSlJjKGs/OyFkIXlBLjclVWtMcXBVWTNiI3kuXjFORGpyNmVhcVdNenE/PlFpeGRpTC5iSXZCWilpOHJCa0V9LmNHZ09p''@;'; put 'put ''JmhBbWhEWGtIYS8lTV8rcElRTFRYckVMLnVdYHpyJSNFQ3p1Y10mKzNkQk52VE9FIjx+TXM8W3VSI0MxPj59SVhYa3tDWi50QXMwSWhERmVOKnxGQFhISXksZXZQT1lrSmJyfismbC5kQT15WztNJEYuMGkiYV46UHtYbURLQylSQmRTZlBCUSNxfVRBdW54JW0hMHZuaE87OyswIXNkSnA/WUVz''@;'; put 'put ''b1NhZCpZcy5GUF8wTy8ve1lKTSVnRH4qKFdOZV4hYjBxbzo7UXIjbkYiI11LdzQ2LEN3dkJXK2NaIyNdSW1XNUZjOFdqQUZ6c3omKHdqbENjbStGR0hLXyNlY3h5MW1YLjF2O1tDMkFEXWgpcU8lUGlyKmt8fC9gfjBoYlMwckEiPU9KS3hPPDF6diRZdFRGYSkyeGZMcWxON0pjRlpvcmMrNUZK''@;'; put 'put ''ekBEQ0ZIfmFUKFdZXntzSHNVIk5JY1p+L0lTR354RTBvJFQqWUwwMDprTFtxZG48LFZedy8qQkZvWXVENCU0WGNWNSFhY0Aud1FwZD5+cl5nMEVnfEZTVXVgOix1TWQkVEZgSXYzeDxUbFMpTUUrTTErSEtvKGkzS1J+O2ZfKyo4VF19cGxrbmg5bkttI3hsUlpFNyhpN3skKTooWlopREdjSGlt''@;'; put 'put ''JWZoXzZ1SVYsNDhtQyVsPUR2ekJiay5zRVRjdE83LyJlcWwlZS4wMjtATEZsdFtZaiRVPWlWWFB2OHlCTFl1UjpXbC9ENDApcWxIXTt9UjEkYlhSYikpQkFyRC8yQ0pweUYsZSQhP3tnQXQoZkV+dEghVyZHdEc4SDV9TTpVTEx6ITUkdyl5blk2L1JWd3sxKEpldjNCczBdWTExKWtqS3Jlb31s''@;'; put 'put ''eU59SGg0YFAre05FbDlDVjpiQ05IeGIxW3ZMK09SVC9VeH5rYGwlUUJjTmBrcls1en5uIXshbEpKTE1MJXZkVFEsdmtOcVkjJmQoazc7eDxjZTIwYGM0bUk9bkUhan1pI0l8OEVhbDImdnp+X0o7SihkNVZYSlFGRiJ5ZVNyQFVCMGRtOH5Jezp0SXUvQVkxb0dAVkdyREhySCJRbWYsQjwzckp3''@;'; put 'put ''InIkNV9TRUtMZVhaUiokS29qbTd3RDtGTHtoTzdaY31EZ0pkWGF4YDx2ZGJSUlY4RCpYJXJRcHspITY3fUZuZkJeUDtzKV8qazRVMGp8bmM2flZIUzhFPSQyKFo2LkA3JCliZG1xK0U3diVSMnlqcn40UEtAQylDaVJJMjM/OzlvOHw4SDhZOVk0MWtBc1U2NlhneC5IIU5NZDY9YCQxImFCeSF5''@;'; put 'put ''fHd+Vlc6PCY9ek54b056SWxzWTsodjV0fFhTKXJkPS9rYz9CQiFwY3FSLitBUmBbJFtmUFl2bHk/I1BkI3UyayJOQ1syVjleUV5+MUUpLC5jfSFOKnhBWyl2Tz8sOj9Ya34kRGRBK2JmdnpUdyorRk4oSnEvIXZvP2lYPTcxRE1OJVleXnwxaCZjZHkzWV4yI3loM0UsSD1JckE6ZVZDJX09eCNA''@;'; put 'put ''K21WS3RKXn48QVlIT08mJXc7bi42bEhwN0ltTW86diJfTXB4SDRqLDpERkhnMjZkW1kvVHVkWl80QXhoQjk0ITAibGA/NURIVHAsMlVtUlcuai8lVE1KRkRaNUZvdWViJX16Ik1POEkzfXRtMmEzLktpckhZbipPYnU/WFsrLGc8PSEsV2luSnFVLnRCaS4jWzZHKGVhWmp9MmdVdTQ1NT1JdiEq''@;'; put 'put ''aXI9SDNPTmBFMCpzQiwvbjRMe1Y2S317XyQjb1REN29fMT8+Vm9LZkZhLkcvXjsvc3c6NmAjKXJsSFE6NT9NclpPQ04wOUY4UmJHRHglbj02fSMuOkRhfHprelJAP2NkRElofnVndzJvNlQ3UnFCKVpVL0tSL2ttJU8hTzhyVHRLWj1aKmIrVG1kQGdXeXdiLzxZSG1sNU43Z2I1LFNKLElzbHEq''@;'; put 'put ''aERjREA6NTF1VW4uZFBheTlyfWs0KldsUHltNiU8Sj55Q1ArTl50YXEkRU9xPUQiMz17WUpRRThzcSVhMVM0YlpZUklKamg0SDImTVZPeE9ENihIKSIlODJHWUZtPWBPLHNTejtVeyhCd1ZTc2hJKD9BfHNBRkM+MWImRT9vSjAoRUV6XVRdaGg7LihXY05GNjFVNXlZITY/KWZ4Qj07SVRIfFZQ''@;'; put 'put ''ITlXXnlvYyJ5M0x1YmdtKU5fJERVT0c+b245JkovaGFoayNtWDRpXSFEKzM0fXRNKFhaSS9EaS5bWDhHPC5yRlJza1AkTlhuPk5Nbi9PdWRiS18rWmJWY1I0IiE1P05pOW46c29WSi4yIyVSSDNKTFFPfCQlKmBFdmw8UlMqYipeIkUye1VDcGQ7IkFQYWxBT25QVyFUaS9zS11nYSlzPjtRYEsk''@;'; put 'put ''TUtkVUhicl9mNHUpT3AlWW9WOnM3JERtTWVUK3AzNURpLjthKVNzfVRJQzNbMjVvSXovSktXOX4oPV18fVUoZjlTfTQ0MD9bNS82SjNAUVt8QzdfIjc4ZTp0SENtMm8rZ089KmIrQmQ5ISFiP25RdTBeQ2tyeGhsQ1Y0UzZiaSpsZz52W3JqJFYhUGV3U0AqYjNmQzwiU1g7Tk9CIXFMaGJWfGFb''@;'; put 'put ''OVFpWDQlZWt4ek07Xmptd1ptUVFaVExYbzVkeXI/LDBSdGs8USkjM2VdUzJlWztgLEsxYEI8em4oXntLM0NmOWhaMjBGP2E+ZVJFdGlrK0J4R3BwfCRzVGtedURvb0ZEQW8hZURhbn5sW29jTDQ4QEJxQkVZUSFsbX5MPXdIYVQ0fGxpQTwpZjNSI3c0ZS9AIWwsZkl8JjBufDleIi92fD0sQztC''@;'; put 'put ''Lmp2XShGUlg6bnolITgiaCM9TXZQPFpOZXBwKDVaNzdCZGQ7QGM0fFRTKFptSzxpMSl0PFU4czBeMHU3TmZffngxKT9CfTw1RnxJSn0lX155UX5JOHg9cko7LCYvK0QuK1Q7bGovJEZqUnJiWHZ+aVsuYHZmZktoTXdvYFJ4X1sjQ1U5bSx5aWZsJCNEMTpTN0h6Xmk+bltqRVQucU1XOywsTFVF''@;'; put 'put ''cFhlRFk4Xn1pcDtlalFIV0wrckBCRjV+N31ZMCx9b1dneFVeTWt7V1oqTWo5b3olcFM8PDtFe2A0RXxNVW4jXilvVmRWR3ZKPn5STmJRNmxRQk98eU9AQEU8OTgrWl4lWiR6cEJzP0NqMmNSQVJlI2ZVWGtpN2AhSzF5T3pSXS9nXnlRe1VJTzFrUXNSW31PdC4iW2k3KDU3Wi84QUU9dyhqSUQ8''@;'; put 'put ''YVhsRlEsSVpHeE8sU10jLj9Ed1lnYzFaaWZML2Y7JTg6MCs2VlI3YyVibn48K1dvJkU+dj8sVX1Gb1M5M3g4JUZySXw+WkUzY3tuSEJFbzByMiM/bjQwYDZYRzI1cjFqVmx1X1glbFJuKnQpbzN2RTt3bXI9JiNLT1JgSzI9RjVMYyprUjR4ZzFCTjdjKXlVPHhfaz1GVyg8Q2hOOkckV3srQ2Zp''@;'; put 'put ''THdvY1NLczFGcVFPY1UqMTdYOVN9aG9UXm06N3QjYHEvWThnKzdVQFMxKlViOVlsLk0mNGBAXkZtKlBRZ2V6WmxTJE1aPnxvRl8leX5mZGVVMWFOP2hyZTcrbG9eV1N3VU9GPW9Fc1JTQDlLQCt1KT8+dCFURyZmZGFwKm9hN3g2SVQmZHZQImg9WjV4eXouWks4LH1QMH5fYXxgITcucjsqUT0q''@;'; put 'put ''aSwxdF1vSTZlUiI8a2h6ZmlOfU1bWipTYEZ7bih1Q3lLRGJ9bClyQ3YuZ0RKO05DdkZraTIhKHYhKFlFNmRYSGt5aEdlJD4qcFNYanhJSkEpTGB4JUZFYkoxQ190NGtmK0tpPG9SdEYiPXc5XUxSJl9qdGsyRnxXd3RHYHtmczZDcSReeSZDbWJfLDxVc1lTQEJnXWJAV1Fddmoza21sK0AxPUU9''@;'; put 'put ''VUkhNllWcEBPcHdZLHIjakRGUXtNKzcoTSswZ3NqIk1IKTJIWyNqX3ZJdjtQYmpfSktxJHslPjp5aWZKNiFYL0hFci8/eCthfn1FRyZ8Tn05NCI6IiZrKVF1X01fRlopc0ghWTkuTFVeMHE6VFhTQnhMPlZXdG1COGdCKkIheDwhJDhhaGFta3pZYEo7JGhFamFRKEovNHZ3d2cjailKOj5dWGNd''@;'; put 'put ''Mj1fVXFQfnlWMWxUMWxwP1FCUW1GeFk8d2krVVVMV3kvZFpZOmJRQ3k0SzZ4RDxsPTp9Nm5EfX1RUz5IczRfKndPKTR+biNuVVpObkx7cn5CPyQwcyFoViFzUk1RLmYuUntLYiNNWm9gVT44NjkqMlUzKEJ0MS85Ykk3RHV4QFo4Ul1OUDp9fWAvV2dVLkxkI097M0BwTSpFPS9EV01ARFMiNiFT''@;'; put 'put ''VDNaPFR1QVhLVVR5ZDwrWFticVB8JjptNTlOMyxVZ0BSKXYrMHkkXlc5N3B1WFYuW0B4MXt4NDo7SGF3VnNsTnJbTkdDNihyMHdyPSM3NWBDTytPWWFRMFJtYjUxaHdleVp9OjZeNF81IXtgMzp6THIxY1Y2c3l+d3V4QihediwmNzA/YC5jekgwVzZ+RSFoZ0xwL0UsWT9xVyNDO0daQ2ZTaXRk''@;'; put 'put ''bDJebFEmTTpmRTZ2SCRVRHovRVhYIlJPIVpHT3dEfD1vQUF7OX1WRzMsfTltL2gsJTJdKUozVUYkZnNYVUQvWTUwMUZfQ3p4cFliPXQzU3xNOm1oR0RbQWIkbjIzXnNRRDNiIXxANDJsd3RzQ1ErU0pWQjcpLHVmclIzY3kiWnt6YDBLKUE8RFQ7NV1WUSt2JEVPclBwRiJPdXQxN2JtSlg/Q2xS''@;'; put 'put ''U0dWKTEoJDUhXSpOUDkleT5KLzFAKDtSbEcrXT99L253U1csNzRBUTBSaTt3NVRYSyZBUVNWUFt9Sks/ZWF3cmtib04sVix5b2p8I0hxN1poUDJYTmhhdzBPUDJHQjFYfWZRKktkdFh4YzxFLyRDLjQpLHNWKUJteG9gc1ZTUjdbK3pZamZMRyZvI3lhdTd4WjFpQTtZcjNhNFtGd15LZEZuRGpu''@;'; put 'put ''MEJ4Jm9Wb2B8bU9QVkkpOW4zOXF1dnVJOiZbantobENIfiZyYUxMckA5Kz1fQDtSQCIzRUhwTHZ4VnF6JXZvdTJtKWs7WlYxMTNQRy5FKUNaSikmeUlNKiYjbzRJbnAyOSVzdl1XKElFZmhZZjA+cSN5dlVsJmx5XmkmUENLQH0yKjVJLHFNInEyb11meSEvJGt1RURTdD09ITFUVUxkQmV3OjB4''@;'; put 'put ''WE5sJSVQfEY3fnlWTlowR31OVDBmMXxjVzI/SHxNfCMlO0E9aE9gREVdQ2pvYllFVkVMaTFRQXdAcVAoeXhbRzpSRDlNOnJJUCUkKGI+KyxQcXBjQX1jYDcvSlB5VCtndSNfUmByRyo/ViJOOUZgYG14JS9XP0ZIKEFpZDw1fjE3IzFARnZ3NjlwWyJyMypdQT9wIjZlOVJhPnBpOFokb1hWLzc4''@;'; put 'put ''TDNLfWVAM1BKKipTPC9bd19Ye15RdWU6MFh5Pl91fT9QWiUqXVZScUpWeDh4RGFdfj0sQU1QM2gsPHBtdU8pXiMqfklgQj5OKGZ3WX1ocTE6KXB0Ky5XUDc7bW5OYyQpRj16SDc7RDhda3t+LmxsbkpEPXx4R2tdUzY6ZFB5YmNiOlVLSGB+ZXE4PnAybyp6NT5qInBZSjRaVHx1PGAxPG00LzdY''@;'; put 'put ''ODQ/LkhIITk0aiI/dlBHJVErQGpqRko1aTxfMW5CODJ9VXc5UnFMZVNeTE9vNl9kYF5ZV2Q7JHpyflc6dGdCOm9NT051TT1XTUJmWmxoUCFPMWM7KFZqdkxqZyFWSmNCdH49eDQ/WHdOJXNHQEdiVVg0I20jcWlJZnk6P0RVO1cqJVRaWXxTJjFKTEMsSE98SEhAfjMiKlQieEBUKCYyYzVUVVg/''@;'; put 'put ''eiMpTyklXjBscUMzVUMwI0MxLFUjWTNoSG8vejAyJFlUOSgrZmdmJH5OYVtFYkopYzVEMnw5PzY4cE1pczM5OW9JdWkxR3BkVippe1BXbTFzUjtiRXtWNUM7YW9zR0ZHKF8jPHwhQnQ4OERobEw6QnphZktrOT0lYF08c1d9Vk8/JkB1PyxAczU/UzFhaF5oX3g3LyszVz5TZzZdJkhPSm4yRjNV''@;'; put 'put ''MzR1SixvR1pgbHZeKEQsTEZXRlR6T0E2NWtxanlOcmFfan5bLl85IjNmeyM3LFpSJV5jT3h5O0BHPSRaKCFYWkRFYFAqKC82bkM/OU1TVnRkN3ssPXo3U1ZtfkZuYnlEflc5REs+dkNpcUhyMyJNKDgxZ11eKUp3QytlZ1FoSlFiaHZYWk5qS2RCKkdDMl0pdGNFMlszZXo/SGNRaj4rTztiVX0/''@;'; put 'put ''VEpudl8sbT01SU1FakZebiVaW0lJWDBlbFBWIXBqOTpQSDAwSlkuLHtAPHlQTm4xN3A+OEBRPzhUQHxyfGl7MGxidXM8ODFEM11bW0RSJm1dSTFAPW09Q1NzRXApeHhPIzRiIWFXclQ9Nzt3JmolV28+RU1KXXdTaDxQWkUrRloofVpycHFyM3JgNjVsbn5yMUk0M200Sj5DZTpuUVl1Yjp8YitU''@;'; put 'put ''dldPfDYuP3VjYSJze25UYXd0Un48RkYrNl5xWSZhMEJ1QUFDfWM0dnYqdV8hXTcpbk1rRzt4Zy5HTDNGQz0+P1RVVjNrI3BeNmV4ZUU/fjlZbSE9Ul5ScS9ZJXNsJUtmV1BvQE5GOiNVSk5AQndlPCQmPVsiai5mOkBLUyp1aDlZWU9GMiRuJG8kbjgzJX5FJD0jXjBAQ3psWU0wdUQ0PiMiSTEv''@;'; put 'put ''ZUNvam5sQSY8T24uSWRzW2xGej5jSG4hKnBHWTl+YW91UDhwK2UyeFF4VjNjdVpmSDF1MSUvRmpDOEhEU11qdkU4fFl3Uz0pRWU/e0tTfWVybVMzREpROUBoOiV6W0AxbH5gUyx7SER+Xmt8JjssWWlHS05PfVZpcmFaLDgjMS5hK19DKyRONko3JDtSczcuWWZPQCM2fHxFNWgyYmJNN2Y8JFM4''@;'; put 'put ''dTVwcUE8XSVIKStJV0tRVGZQZHBDTlI5N2RkR28sZjEhQitsIXJXJV45KXFhNmAvODhgRUhYTU0uMkJtM3M3cS5AeCZzaX0lcnk8Ln0qP2pWTWJVQHIpcyJ+TSYqUnU8RnI6QmMja2t2alVLVVAqSCo1PTFfbCJ8cH54Q2dATSx9blVpayFuZVhwJHB+NTxsfEsiajZwXjV0Oj13NUxDV1Y2NU9n''@;'; put 'put ''V2FQQiR0QyNQfUt6PUlQXik0cSxmImUqIWdKO2FnWm5RVUVVS2Q0VzYxMExISyFINy5yOlNYZn18RzUxbSQhdDZ1TVV0UDgpOFpqUnNLdDtBPV1nIWBfdzdBPCQhWU8kT0BmSTp2eWs7JVlhRy8pXkZ0PXA8c2czdzNRaDdgdGJYZGNhfSUqXzRQfnQrVXk9ZyJCUSNaU1MzTDlLd3NNOUM5Z3RQ''@;'; put 'put ''NG5bX2pJODY0K2NkTntgKXRZYXY0Q2N6Sm8mcyV1Ulk4RmtQZT9WS1BFMHFWWnFeczIsJU51SCVDZV1QSVB5eH5YM0lOR3RqbkpqKEZSL0ZvezlwenFQajhZcjIoO34yelUyc2x6OXtuXlRgcjx1YUFDaS4hRnErRkRjSlBSPWh+TmdLJVZ2L1EjZkQhYmJ9VGckYE5hO1ghdFFNNCkjTVc4Vmxk''@;'; put 'put ''bVIyNU1kazBTTmErPDJUPHokakpmT1o6L3s4djxhPCVVLll5TjNkO2BXKyFjfXciS1d8RVMpdCRhRjg1Z2tVbCpbRHZrQGA0KTlWSE9RJiNHPTNSTVZPRXN7Sj1VOEglN1NTWipWRFchJSkiRnVUeXQ+L1dCP0kxSSZmezVPdlk6U25lfHJ3STZNYGkqdmRGSmYlOkk9UUc3U2NGfilidE9xLmcu''@;'; put 'put ''QS9jSihBZ00sfT9beVEuQXJybTIrbFNvMyRdY3M5bGosbURpVWRiJiV2fDA5WCVlc3ArXjE4OEN3Umw3cD5rPyhrMDFrQWxabjxgTTE1XVRjI25abyZYdis+PHxmdXlVQUxKJClYeitqJVZTPmQlJXhgVUVFWj1pN2B1Wm4lWlg7dX4lalQrSiJXfWElaCxNflouV3c8SmopW195XVhaUzpjYW8r''@;'; put 'put ''JTVBdC57RVZVMmBXdno/MGFweDIhfCZyUCV+NEhAc0tzLGlZY303fV1eRSoyckN8S1dse0g+M0xqIldQNUQ5YF5oPk0+bVRLTnVGa1B3RyNNWDhgSzxCMSRMWFFYUEUyNnVVdVZlTE1XUDc8Q3kuWmxbIXBqclF6Y2ZRIk9WQ1Y8M2VhVjNYSmlfI0B4NklbRm8kPFQ2Ym9CZGglRiEjemxuNDRy''@;'; put 'put ''P0leXVJXZFFPSyUmfFt4Z2pCWHVLQjh5fFlZNHE+REVHd2dGWCl8OV05TT1TayEmeFNEdysvZnFueFQmTG1FVjYkLC94LFdFVH05bmFdZSpCWzRGLDM8KElELDNtQUhUKVY/U3FAJEU2I31VKHp0UWFtPHZ1S1JmRkFhRFlHMDV6YDhIb219TUV8dTZbUGRqPSRvJDFGNSlHN0loVFN5dkpWYih9''@;'; put 'put ''T2JMZS8ydztPdlJvQyQxXUskVTU/WGs9JDE+aHR5djZhTyY9QDwkMShSXkNyZ3wlYHlqUEFLaF8zbkpIW1FhUXJxd2IxbSViO0Foe3VnNUpXcFB6eVMmPUI/QntySV5IR3N8eW11YjlqYUR8X2JEKk5zcXMqN1hRfTFMajdNaUNSeGs6bntIRnVmWktFIjBrNTsuPkd9KGhxeXFbJClIMiVHVUh6''@;'; put 'put ''eXFMYVcseFs6MHM3Z2JgcSojdnp5Xk1eMnkwQ0l1PT0rNHEzQDZwJWNneX5zO29hQFJvKE5neHQzWT0jYWBpcD1NWFEkRlVSMF1uWTZwJkI1Ozg+X35MR082KWRQSjdpZ2JkLzI3JFVeSUQ0Tkhgdm9uOD8+Rm5dVz1xUSt2IU4zezdtO3phWDhgWXs+cUBwZDViZXEpOmF6OWpHbCMrTWpZYitp''@;'; put 'put ''cDJgd2cua3trfFpPcUJURjddPlkrZ3dLUCMqfjhzL2hGcTxvTm15KTlEODgrY3NMfVt0cTJ0cy4rUi9oe3dNOkove29SZSxLWnFXdGBjXXJCZE1VaDtsKztZVzY/a3dudG8mLGp2NGc3QXNdeXI3Qi9sTzxZJDpXdil1TFA+TEVjXjpNQ0BMPVtqTWkjfUMvaU1vYGo8Qiw2fG5gdEJrVHV1cFk8''@;'; put 'put ''d2F6QDJGM3pbMnEkVkhKYCJiSXl2Ylo0Rz1kOUhnJkdGTnNtS2QmJj4sfS5ZYnw8bzE6PUkwJi9xYCxjIUsucHAxM1RrcWE0MjQyQjtneVo7YFVnKzs7KzBqY09xQyhnYHgpWz4hPUtXInRNQTBeZTw4TDYkUGphM3ZFXzgvfTdVbjxILENtVk5AajN1fFgwM1BhcDRgRGMrWl1sLEQwalhEczJu''@;'; put 'put ''JW9ndFZGWEpfc0hmfGhHOGl4Ui98L3pqWUdQUXZtWkJaJioyTyVqZT1LcyN8TGVFdU53K05mKUYmImxoXyp8JklWek0yMDFrJFdPNF5IXnFzX2B7bWgvc2Y6JVZbP1hkbk9oRjJYX2xGVjZga1lXOmpCW2lGYDVHezU2T1Nuej4rPHl0cWA3eXsyYHJOeXhfPT8jJn51YjdgQWwkPTRdOGxqfmcm''@;'; put 'put ''TyJSMk5wfVt8Vm1+O2M1KU87ZXBNbyVVX3guL2shSX5ga0RuR3FBYjg5fnBXckd4fGYucVcxZHV4am81dlVKbG9FMFspd1loNSQ2KTNRNVZ0SiZ0cGdQb1sxRTdlTWhoZFQjVS9ed2lpdEZiNTVMOCMrZ0gsaz9zYU9uJDB1UWFldSFVPVA+PkpHY2E+bSFFU3NQUChAPD5lS1t9M2Y5OHRmJjNb''@;'; put 'put ''LzFrQzxKIUxEN2NTfWpNeEEyU3I6MT9dWXpXPTddNCpMI29oT188LzRRRzQvRl1YT3VbMEBRaUcrXXJtaGtWbSV3PVVPZGFrL1prUEtmYTklXnRzY05kJlg9MXRSfGpaZl0yQFs3V3hRVn5HLzl3RXhkV2NLX1s8OjBeWU5qXik2Vks/JiM5KVQibFBmcmI3Z1k3KzdZRUF+TFdFb3w7MWF5RkdJ''@;'; put 'put ''L0RfL3t2eW1TOnRdRDYkKV9DNnd0QTcyLCFBazhAP09DcnpSfkdKNTYybm1vZHtSISl2ZStePkdMdFImSGQiUzR3WFoiPzsqKnlpemFRYlRjVFBSU3pkKXN0bChoKmRZI2lvek53eTVBcV9eMkNhUzFmPHdvPSkqVHdvTWNELyhXNj9TPD1MPTYhQmAkImRjPCpPR0x5JHBMZiZoQWowejtWcVZf''@;'; put 'put ''dj4kWVsqNDJ0UUkqX0NrMXdGaVdQQGIpRXYpLjkiI1YlfDE+ZyEyZk5LKV1mVWRUIi83YW8xUilzby9tT2pIOD58YikrPntxekhFeTNQRFd6WHJEZHJJXj0sRCo9YXp6OzFUQD5xYztuJkFoJjVUWyNXMnMjJFIvXTF2RkQrS34/MUA5bFN9NkQ9eDt9b3UuLk9DUWUrIzUye0d8MkU+PWA9R2lQ''@;'; put 'put ''XjZifj8jfGM2d01pUkZjdE4mK346YD04O2Epd1ViOlNBO24wKXNzJjRpVENAN1NwSnVVPz1zaT0vSVArd3Y9PHZTaD9XNGguUyZTZlZgSn4peH4iXjQqM0xQfHJLT1U5YTJLKEIian0rfmAreUZEfk5bYiwhRmtoYT5FKms6VTtQUzlPMz5EdTdLTUxhK0o0OF9SK0xNYm5aYFNQbUVTdmYrTihf''@;'; put 'put ''bE5sKFRlQnZeanwzUy81JFkjMn5vcjVMajpHWFNSRzVxSz87STJ4ND4sT0p9YVJZViNuL19DMUZ6fFhdazE4aGtuOWdVSj5ZNypSdmx5P31sK2xlMEtBKyJeR04jaS5MKS46IiY/T1dQeXtibi94JDkvLGJPTWR5Un1fSFhzWSpscGQ5fTUwWk1fWUg2SCVyQy5CRWt4NCsjaTA+Yk18O30uflFR''@;'; put 'put ''XiM2fiY1flBjKTF5PXg+Ri9Mfl1XTmFISERoMGE7c3h5KEA6SW9IWUo+dzpwclhvQDhmYUEyNyllfU1OelE3fTxCWDZHYVpSJk1CclQyTyVOPGNZZjdYSmY6XzgmSlBXX1Erc1BuZ1dmOUt6ekd7N0N1Vl1lIVJlaE4oWkREWjYqM25CRFEhTjY/VFB+Pl1dOFlPKmMqa2M6O1UhYEt7JEZKYDgo''@;'; put 'put ''fkNeJSFVPSZkVVJlX0tNJU1WPXNeUSZaI2JNbTo1blt4bnNbYHUyRSx0QHV9ZEJHLD8oa0k9a2p+bTorbWBaY0tyT3MvKTNSQj5+VCYqPjduL0YwTnNTJXpqOyxheX0yPXU/cypDREdNSD9IZGgmKl4sITwzNDB9PDJuLH1zW3hvJEdDRkF1fC48fXp6WFNXZ0Y3X1FeJmY3InBzZXhGfiRMbyxw''@;'; put 'put ''SnpDMilqMG8hUVhpaGhGSGdNOzZBQS5DPyZwOmdjemJDZW8zTUF2PkooWE9wSXJrW05XLjwvL2tQVURbSVRnd2FKL21mJi8lbntwNnFpS0Z+bjwwN08lUiJVUnpuWU9NUSEpeiZOeFBpdHF0P0QqZ3E2L0NCSUQ1VExTXWhAVEdhME1YIjk/N0V7YnFGSlZlQWUzP2t8XXM5UVlfSlM9T1NoM0ds''@;'; put 'put ''YjUxek57KixDe3R2W2UhJC9kL09gPVYpWF9pZm1HbXlQXUIjJCVTQEp6azBxe3NWLkQhVUp9Z1g7KyUrOWouZCtkMyl8VTxIV1VxMFc0bz11O0Y/OVkhI0RxUW0rZj85MFFqXmQ8JFJ7XS9RK1pVbS9OIl1RS2ZUJCJEM3lqPVtZPj53UmxoZjUlTEdwLCpFR11sRkspcGA8ckpHS14mWU5yMUw/''@;'; put 'put ''L3subTcoWVZkR2UjXTRsL1ErQ0lCN0JLQm5ae28+V0dFb1t2JFhLNWJ0S0VgeVE5PkAob0VqOUE0aEcyeUlUVz51NmYqOm0lVnhucHtXMTdUbXBjKW1YOGh9XnltTXUrbGEyfDEmWlVNWFFVeFM3fWp2diE8ZmohXXk9VkZ3TFd2UEsrWmE6NmBGVkckRHI9Z3NaYmtSa2x4dks1Q3Y7YEdhY3Bu''@;'; put 'put ''XjRreURHNXY7SjAjfll5IWtBeyx1QHBWeGEhJDQrQiJ+empBIWdpcV43NDx7OERuK2tsOGMiPkVSJX0zSz1oNzx4czl4LHY7VVV8KlNzbklxbkpyOWxVdy9PdnlkbUUifDVrMy4odVVfeSM3fCo1Sm1zRnV+QGcjNVZfZF4+dVh1cWwoKzF6RDNedlh1LC9zW21OOTcqdmNEb3VAIXp0cj4wfml3''@;'; put 'put ''fiZmNXd7I0JbQjt6UV1tT2U1WTxYVEI7LipZMjowZXJwfG0xZ0UqV054KCZqQV1EUC5BKjZ5KT1xOEQkeWM/JTRNWE8uQnxzNWlJVX5XWVl6ZEVaYHEqZj9wS1NzLz5nRURwNnB8VUNeKEVRVHskcXZRQTI8b09OUWt7UD04YFd2LEhqMncmbiR+T1hPZ2Y0ZCxEI2NGWTpkdjh+ZmY3LHhtOzlS''@;'; put 'put ''RUEkLjVZJCQhVFVBNltRflN1T0Q8YjBSLkFhWGlaZnkuMVZTX0NGbHssPzYrbFc1el5zK3o6LlRGLDdpal8kUihfRX1xV0M4JlQyOlNmdGJZT0tRJFVKN1lVLytbe1VWSFs/eUFmcSF7QXw5Zlh4aF4+UnJjWzVDRXU1KktHVCM/YSR0cFc7OmchTU8zXV5AYTJUTl9NNGszemlJKjVWOntwJXMw''@;'; put 'put ''ajoyTUoqX0Y3ZzZmK0w3M1QkRmpuWl9oTGleKCxLTSN+PCtZLzc0VX5TQCNwfFFHd2AsNClAdVBdSzxfeGZ1UCQ9TFhnN14ienduK2NeQ0JGJHVsfEtEPldSfClpPk43VGxuJipuRG8pQ2lHcVFLdjU9aDJWfE4+PDtkRSZrMl9UKHpmVUcrVmRJaWdtTEZTTTAkTTExLj9RTFVmZ0VPTnI5ZUou''@;'; put 'put ''RlIsZCVTYHdUImxHSiYudl4xaHhCZTgrV2o3T2c/QlJ3RUcqfUNqZHlwTUw3IWJ0NnxFZDM1PlJNIkUibnwpP0IrIXlONnNqUCZgTXZ3Nz1UW0RsPkJJJmEmakFeJkNmOCVBSn0+UjdnMVEsVkIwIkdBMnJvIVEuT1BHKXdAcFV0NTpqInlTZztpaGtHNCxgXUg+InQiYjV4O30hYUJwL0w4MUor''@;'; put 'put ''LGB2NzU6WDptOEIiXlIwdm17VDdhVS8oRF42MDdUPzhWOih4b09zXlIlP2M0Nio3NXcxQDBxQSF4aFtbcmciNF5JKnM3bzVCVTFLbVQkUyRab1NidzMuQ20mSCJaQUVlbWw7WUd5SV9zLGc7VSNkLGY+bnFpO0U+aG58YjdyWil9Lzo9N0x9dXREZTRjXkY5UEpQcEcvYjNpQDxtI3ltNmFkMWUo''@;'; put 'put ''S3R6YXNJYStPM3JdakdMMU4uPWhaamMwTClTc3t6MSFZcTxzLD5ZfTtqP0pWY1pqRlg3Z1Z9RFBqbzpRITEwJFI8WzUoMCNXRipbRnBoV3w0M2I+WyhoS3csQXpvUmAuQCZAcUM/SDU0OlFhdlcqYXZxJlZWeHhzPlk5QnJQUXxobDE8W1VzX2N4N1lNSTZyKVdgXVBgPz5JL0IxdSFBNzQ4Py8w''@;'; put 'put ''Knx4Rz5+dUh6fSh0d18zQ0ZYVy5wdXNVYFFSWDxSfjEoVT49KWUzPylDJDp6I0NNb3VwJGRddjN2cj5xJXs5d0M0X3I6T240bXd9PzQ9TEFaQW5zX00uN2A1aj1HLDlIU2ZZVHwoans0NTxrIXk0LFEkWGNCcjZgQUNJIzQrOUR4RFEkODgmYEVtSk15On1XfFNPZSVuaiRxZDtgeU5oREp0aV1L''@;'; put 'put ''VGg9LyZ5OT40WUpLVGh5L3NRd09QKUtgW30peiQ9TEcrL0ZGfSJpdS9bQHxNQzJfS01BJjVTTXpVJVt6NURzIXEoV1NJOjE9R2x3M29gZylpVTtqNE5jQnh8QEReLjI7UjI1U3B1cD5uPltRaWFUU1gzS1kwK2E1bXNRdyN5Q114ZTFxeWJEXj1LM1pOMFFJbiRnbSFVeDVEd2N8WVMhXyMyaVQ+''@;'; put 'put ''QnZMZzVgS0JPdmpub1okREhiOHl9ckpHJmUyLmhSTjk/ND9ATjo+QXorQ0c6YURLYSJqRnN2e3JacjFIWUMuJkVYa04/QnEufTJ4NU5VNT0qKSowInQxX2osNWBAX15KYGxPeVJWRmk+OF9JVW9iUSlzVVhWLmAqYUElZDF1QCkvYltkOkJZXjZoJlA7My5JLD5HVWVffHFFXllyPlNre3hmNCFe''@;'; put 'put ''Q2Q8eXI6XmRBJE5vUylYcGd2RyJ4cildYzZHOkV6WVI4SG5XKXlnOkhqYj43ZUxtdzI5X05pIk0zaWRGSlt5dD9XPmZJOm1KZiF8JDtqU2N4WnV6b0lLeSlnPz9waDJubEhjR2NTdzs7eW1tb0BtWiFNPiw1IVRRYVRBM0RLQn1gVD1wMHRVJTtbb0tFMTdPMXkvb2BWYTNpUixyMkZRTXhtWEkk''@;'; put 'put ''XU9Odn16cURDMVdmLik5SyoxM1haRkp7am9mSC5YcHQkWWYqR0taVkVbRFAlbl9Ac3dyOkhlbj9YKDwsPjM8e0FQUlRbd2IrYmpgSmsqNHhYU288YXhdRFtEOzZMO3VPWlQzSEwwQkR0VEA8cyNuXU1OYkVrbEIkZz4mdlczRyVteT9gPDszYUxOPndVKldEczhiOTNCMGF8JUpBQlBzcDEwNF1w''@;'; put 'put ''MC9OfFRWKnsoUk5IaTQ5M2hySyIjPGBQZzh7RmlwU1Y9M0UpOnFNWk43MjwofCU0JTtCczkvQ2IpOVI1Ul5vPGswaDtbTHh9L0toN11SVDY0QldUW0NZNWJTSks9Lll8azdnR1dePUNmdClCRjN5QkdeVDNaQC41NSgkfEZJJjJ3OzZdS0sqaVMvc1BSYUdeYmNIR3ZiYXltcDNKUDRia3JOQCx6''@;'; put 'put ''V2gya1ptPFtYaGg0PzxgUnhQL29MPUgwYmBReX18SVojQzNLO3tqezBDYltgJX1oXSVqbFsuRnJvcG9RZGlGSihbOmVIfGtNUWUyb2xKSy9bb10wbkU/QHskSUVoQ0pHJGEmI2dUdkxQK0BQUldCY3tvPDYuaThhWz0yVSp3N0JlfHt6a24/YGxkMTddcVFOZ20vZUNtal80IXV7XnlIbWNaSChk''@;'; put 'put ''R31MYUlrVTIwSSpEdSR3WjxaMGFWVChkYj07O1k4TlU5Ui50Xk9SYG8xUHkvSjwkLG9ReDBBSjdCYD1IcGtTUixFRCk4aFVMO05bMXh7eW52MTUpLFtIbU5ZT1d2MCx3b3BoQm81c3pLcX1rJkBxZT0+bFkxQ1Q0XVg9fWpdVXY1O0cmOSYxb1UufClVb3h5eiE0KFIuJXtsUWthcm1WVkYwWn5T''@;'; put 'put ''OlE9fW5wcXhzVUchQC9ETVFIaktSb3hVP104X2BTWjsvZ0kqSmw+XXM5ezVPblUxU1c+NlIkTXZ3OWVsQilpSnMpT0xIVTVEOkhHKEc8dy9NRVldNyJyZFFbTTRHczAwU2ZvbWs5ZjpJO309Iml9WSVQQjciZ2UoV341bG1JUnY+cDZua1puPlBEX05hV0lybz9tdUtYeTRFbTQ7KEdPe2NdL2Qk''@;'; put 'put ''ODxJeyJnLChwJCV4T3VtVjNFblc4d0JZfUZkWnl6bUBLc0hwMFJMaGB6R2RwRShDTyNFWX1KUGZ4eVtQOSg5MTdPcilVJGRIIXk8Ti5UKzNmK2U4OzNYU1VRVW87aUZ0RSVxIXpXP1RKdkUmM1ZiRSsvaGVdUG9+dCI9PDcyV054SUcsUk1OPFpDPVBveShIUGkuPTZGKl5OTDgqSHdDZzY5RDhd''@;'; put 'put ''UltVZ1ZZN0kzQjd8aFVdTEl2KCsxPl5LWHBndWZbZF96N3tEK3dHZ3h6RyVQd1ZzK1QsbWNXRHRMKGBxdU1PTEtTI3ZNakRaOU4xYC5KQ0osRE9SOVszIW9HIzRlcTFkdWs4cEFpdF5Pc2EzdnBeOjxgU0ZXTFNGZVJCIT5JOVtiay9ML0twU2pvO15yM2ElfVJ7NUI6dGBSYHcueSswal1YU1ok''@;'; put 'put ''NHY9aTNbXjFOPnY/VWJkInRDVlZdSlJyMzlEIjdfcFpUbyFeJHMhNlM3O3pKVSFsSlNwaEtydn1kL1UjVWh4NWJgYU92OHc4P2xyWGA8Ym84MF5XPXtsMipNOkpvfSM8RHQ4bzhFIVtmZGE+TCVgTzhnMkg8Yl1iUk9hfGw3ZzB8em1Qdk56NSFeKigzcW0kayFsSEJqajNpSUluMk5SSlUpXml4''@;'; put 'put ''bkxbcS5yNzZoRzF0Nis6IjhMQ1g1TFVoVmQkRUdDIyFGXmZtR3xNcVpUe09hSzF2eFtlbDdsQnApO0lRa1VRdXxhSl12WjB2RE5hR0ZaJnl2Q1BleGVsITVud2clPDJRY1EwO0xZZGFlYmQqQWc0bSMvSTo8ek1SYWxtSUs9S0VAQllvQkVdaHdlV3NYVFN3YjokfTdwK01kZSF8IXdHQ2ZlQ3Mv''@;'; put 'put ''YXJoM3gvOUZwO1NHKlo+VE9ndG1taDAwTEslVWdgRzZCNUw3ay4jUE1WYWBmZ0QwYCVVenExWFosVkAwZzwvRFlnTTZYWDh9PipZIWJPXTNRalRjUHRIWis7SW8mNzMlOCp6cE44bmJAcHc8Zkc+czYlSzpEazl8cCRpbCRlTUt5fGFRWStNJCtWUGhWdVpCUGVOSU1VaGwqKj02UjZDc1hRJT15''@;'; put 'put ''S045QE5Fdit3Lm1lM1ZALHFbYWRNemghYk9JUGBNYXlrWXUmLFo7O1teUWErelZiKVlXWVArITNZKmJEQzFmIXw5SW4yIUluXS8rPSNJL1luPHtnQElmRF8jLkV8S0NKKl1rK15mU01PLDFSTz5LPSFtKmc3OmBEeG18Kk86KXppUV5WKmpqMUtNeGVQaXNPQW55N0huU2k2MGshNW46cTZYQ3NI''@;'; put 'put ''XXFEJUVfMWMrU1ozRSZgVD8/amVSWypATiFTN2o4YSVvIUxtIWhEeFNFPUtFL01rK0hxRl1KIyxRcStlVlhQbWA+cUk7aFg6aUdkO1l7XWhZbyY/JHtXYHJyPSU6c3dbX1BGKWxpK2MxP3tSVyQpPHdJLm18UzJeeXlkI2t9Y2c3VS9BWWcvVEo7ZDBTVTI0RC9gbGl5KWs6TWFmZm4vYnZeSiVr''@;'; put 'put ''bDU1KTcvJkNJRDhKL0YwVlZkakxKan1QSiRbU2E9NTAxfDlZbCY8OzZoaHlORlU+PHlqeXlUMzpJPzZzdlFCS0MhITh8IWkwXWFRJTFtJiZCb3FLQ2s/WnU5Y2hxMzkpZFpgYWM/S2ImbnVRej1DW2dCY0pYTlc4eUMwVDpXanpGRj5xL31gJSMoa3NlT0UlRkhaUn1BSE1BJUYqYn4yZCt2TU1g''@;'; put 'put ''VCttJilhdWFGSi5pV3g1VDI/LkFtWDo0bFNRS01CKEtreUxId35BdUVFeShQTEtqbTFyMXRVXSIxa3Q7bnNAW1hkWktvUHRKbkBxTFJCR1VYWlZfejgxZUZ6QHNeK1VgJiI8NXh7Ty5WPlc+YlBAaDtHWiRON3o/LmEuUTxDKlpKYCtlPnN3UHJmbXZUbCh7JX03Oj9MQD0pY1kwRFYySVI3Um4/''@;'; put 'put ''fXoqKW4wRlY8QG51dlc9LjVELn0wPG9dPUlVZSYySSVaakklN2RJJWtTbXMwPU90XUtqNVpRS21zY3BzNkozKz9ZXVB0RW9vZzBYX1peLlRAPTw8TTdJUn45STQ+czRgXiZ4ezMxfmVuV3ZPSl0iaCt2M2IpU1kuM2tNO0hCMGUwJFdFd1lKQ2RCYy5+WVFhP098d102cmUlZG1FWWd4LiFPMjd3''@;'; put 'put ''Tih1VE8yOnc0WioqNClUJHl3RV9HN1tVdispOEZBUXRSJjZgeFVIKnBZbz1KbW4qZjNPNl1CZztdfloiNFBVLm1jVnFYMERoU01vZ24pREFgQ2VNTl9KdFVfWj1UOmYzdnBwOTRMUCkvPC4yK3VjLk92JjMoZ2twVytRSTwmUCFMZDc4YE80cy5CaHM4PHRiLHg0dzI2Pl42NlJffXZVRG0uaStS''@;'; put 'put ''b1F0bW9FfWFsLChqa1JsIVdAT2xoJjEpIW9nMVQxVyFzOX5weW4sQyMxMm5XQEdtNWQ3L3omUlNvRXk+aWF8STM8RDc8NiRnQzxQXytAdTtjeUdUP3BkUW1ZOTZtIyoiblcxfj9EfX4pSGpkR19yMmJAND1HV0RMNjgvaGFGaktCPTpWbHNZViJsdTs6SSJ3TEgqcGNjNFF4Snw/N2d5bXVZRmFZ''@;'; put 'put ''RUBnPFs5JkQqd3tdKXdEKy9kOiVuMiFjPCpTYjI5YkFtP0lLdSJXbChfSjdQQjl4LmJmUF5halt5fDJEKFdyTFhLQnlTOEU2X0JFV15SW1piQzIiViVldUpsUEBdfnJ1KzhJSkd9MEQkO0c1PHEzMjNPIWBdJmcvTmp2KmJ0UD45Ik4iOmMlKyJIXUVmQG1xU1RNPmc8W0t4LiE8X0hhdk9FST1M''@;'; put 'put ''YlR1UHtscm5KN25+VFY4ck5XNmEiTlE/RkM0OnFzPWZkSkJYdCJVYDV0b2YiO1ROKmt4THBpYz5aISh8Pz1fZHxDYmptcU1RL0lsN3dxYU1zQjdSRlZwNDQpY346LzRFO1Jkey8jOTlwTEltamNDc1hRW20+VD1YdlZrL314cjpbPj1RRzhST3c0T3VNYi8sKyV0UWppbyVUb2dvNWFKZlg4Q2g/''@;'; put 'put ''MkZyNiJBUWFReyI9eSsiVjIvRCZ1OUYxNT91MGdMdkRleDlfdFZBSit0SjpFZkVfdTZKQmloJENpSX5rKyMrRUZPOUMpfSJwTl88ZUxFQyVPcylCUD5Hb19zTVVxKi9GJFoxLmtTNktJQjVEdGRdPylaNEtUTng4dkFiUUlaYE9DTnFkUnMpN1lDPVV1UCZqelV9PEVgOSg9SlVKWnVYYl54PiFO''@;'; put 'put ''IjtyXURfR3ZuMkp8SWo/dyF7SmlRUjVDN14vOmdpW0BrcXk+WDhJMHRQIk8/KngvQTtvW0k2RWVWM3BeTVkpL35CTCY+L0E7ZE9hTWNoZzgsbjVCLnk5RDlrbi5GISUrPUtCbTVxM3xzVUB2RUhSbyhhdXBxaTE4MmBLOEE8SmY0JjpgWi4kYnAsezlEbCsoPyU2bSsoNkA/JUllI2pofT8wLDla''@;'; put 'put ''YUd3SmkhOWdUNS5acEBEb2A7TytzQEA+Pno2MFYuMGghZGIxLlkmN0QvLytLWktVJStWMDQ6UkNXbCtYdWU3Vz4pW0JxKGFBXkw8NC5ifUJtV3tvdispfDI/dDA7QTs+M1tESGQkQE5zWC5qNWl1OzRGKz9NZV5Ue3IkR0lFTV1gIVh8LkEkdCt5Uil5ejNkQHk3dEosYzVKcGVBVDFeYUJSJTFD''@;'; put 'put ''KnBfbn5sbDJVfSk7XTlsbzc7fG9mIlAmK2tJcHVaPSNGVyk8VEpZeX4paj4wK0AjfVNtKzshWDBIJVBkeW1saCVxTjFtR2lJNzksKFJYRkp2U0MhT1tjO21kIWhGdVA2RkIxWXRNNl86aE8hNCtXTz5UeipNIXQxRHI+Tn40TXBaN0c4RThTZTtPKj1YZy9ZZyFXM10vRUx6aV9YRHpda2EpU3dr''@;'; put 'put ''R3N2IjxbQC9ZNHhtWVdSMXhZVlMhJmc7SC9kTkhJdSg0enpMNilQUnBCPChXal0wVF1oLCk8Jip1OHI7OHd7N0c6Y0ZmRkpTYXRjTXNWemgwZX13UW9Ia31LZU1zIS91Mjtmd2pRfjpOZWFXczlXW05NTjZgRzBbSylyU3lBOjJGa3soPWo4W3B9byJUfFtGKGVMQCk+QEdjdGo3Wn5OW1I5JjJj''@;'; put 'put ''fVU6bzBLaH1vRy8kPC9uYXJoQkM8XWgoIVsoPVt5fmhndE1dM1FgVWpRcEt1dzt7aCxfMyolfSNLP31ofmc8W0xNL05EL1huVHlUbj9gXWshMCwxQU9nM0JaQU9IKGEhc1FAQjAxNW1FUGRXJUB5ME1Oa0IofmosSVB8MjgwTkt2ZSpyPlIrN3shRmxVYy5CWGkhaiJoVFlDI2g1WX1tLm5keSV5''@;'; put 'put ''KHo0Xk5CYV5DY1JXeU1mbkJZSH05YmBxZTklZ1FaLnd7Z0QiXy4raFNzKVk9N3pCR0EhMiFAWHRSKTRZY1MxZih8T3JHKTRWZF8oVlBlI2Y7VUNOei9pITBCZy8lfTRYZV5Jc1lkOygvMSppQG8ocXE9TW4yPGsvNzRJREIjIWJSIXV4TFBFWE0vR1BjcCo9RlBjRTBsd31MQEVWc1JMVUZ7SHV6''@;'; put 'put ''bHddTlgpOUlYeF17ckxOb153XU5AIlcpaUAsRkhOWjYkUSNKand7VCE4ZXguV2d4ZUpOeDwhYlJAdTFuMmQzT24yJTEjWiN6JExnZjdJXyJzSTVJOT9hajNpSEQ6eWNFVHchOE0sMiteZGh4TnpdWitKMHUzcWI0OWxdQTdZYkhLZFR2KCt8NTpDbFg/YDlsYmAzazhQS2huelRiYjkmSzR3MGdl''@;'; put 'put ''WjxTVT9UZFglP2IzTnNiV3M8ZyVHXzhbZlApeGIzQnVROFd4eSlIeDlLXkYlQHpQREJ7OVpQVXx6WVJ9eGFdJmFVNj5TZ2Z6SV90M2szT3h6QXZbUXspNjBSeGAqOz9halhpTngublJeSSxnUT0jYj9BZj1NZWhASSxCUUN3emVuY1E6TSJEIWZJRU16OSJ2QytTOjQlOFpFSj8hUkohcmZ6SVVN''@;'; put 'put ''LlJCJFhJdFJrfXVaTlgmKyw7MjI/RDA9dz1DJE9eNyokTzwoak5TI3ZeTU5nQj8xaXcrbEldWzZIbXlQKUpXdm96V1JKIWwmM3pOOVNCeiRrcyIxS0JqaklpZEpnY0ppOG5VajhqN0g/WDl9IzglcWZFX006digxW0tEU3FFZCQkMWt2SHV5aFI1KnBAUkZWX0lnIk0zczElTTtmRyFLVURNd1VY''@;'; put 'put ''Ry9VNS59LlFiUjNjXjRrZF5zLy5MamBzLkRDb0V7TD9SKW9eQjh2QWtTPWt8QDhQMyFPOGo8JCx1dGhDQDVJcnV2ansrT1pkRkcwVms5e2VubUV3ZilwKXEjKXdXO18pZjlVZSVFMG5LWVN8WlElUEVPY1F5V291TSVdLk46VToxUXpxfVhHdWw7WHdveDV2TTVLIjEscT1YMjFlNGVFbj5NPH1G''@;'; put 'put ''QmJYaykkZXQmVmsxSWYvYG90KDFFfmReI2BWKiNtPk41Pk8mVy5vRDNROSxnWz0+YHlOVy5OXTJiaWVpYSIvQTA1PkEsbDoobmxiQDtYPWIoMU51eylrNj1DQ1dLVXZ3NyYwaEQzNDAsKSNmOV9SRUNHTVczRyZ7UlZiO1IuVj5eMVlSbjlKeWVAX0k2OD9HYypZaWpPV35deT5xeTU6TFlVY1Iq''@;'; put 'put ''ZjxYZS4yYlJbKFhGVUo/QGIwe2VFWldpIm5AMTVZWzhiR1lELCsvbXg4ek92cFNwUXV5Jlc3OG5bNzt4eThGXmxUZnFIdCs8KiNWJjRKOzN9SHNkWFt0ZnB4NTpMam9BNkw7OEs+Y2ByQ2tHT0VaOFJxcE1fTVZ0KXNfOVpyQmcyPDJYIUM2O2JWMXtZYH1deWVxfXk7UzdgMDNMekZVXSgrM3Er''@;'; put 'put ''c3Z3VmRVR003WTgzIVhvJnBGUyZ6TSV5djJVRnVlSEZRY1dAd0RTK11JdVFDM0FEN0ZlR1N8Km5tYDpwVD8/ank9cFN4WXdJRmN8UVFaSWBXKWpKJis4ekQkRTlDdCshRGQ2JkgqIkBga1dHRTglfi5pYFN8aGx1anVbZypwJmlOIXdtKyw2Okl3Vz17OTpTPmxHPEpmZGJpY0UoOkVtRjVKd0Nk''@;'; put 'put ''ck9XIUc0NVROcn1JXVdpcVBfWDtHRi5fXWE+TSE7c3dPUDJ8ZEs4OitEN0k7I2Y5dls7bERhfW4xPVlIKV82NTBbOyJfbF9jVHkoR0AjSikqMTM3RW81eDNVKzBLX1YqMHtkOjhmaChJQjxQU3U3QWYoSyp1LComZStUWyFmbixuYUV7Py9rPTpGL35OIm00Jl9KYTE4Qmx0X09bOWBUa3x+OWdv''@;'; put 'put ''QTBAL1c0YnIjSEVKdU57JXZxUj0/VU5yeWkvc1s0Qnt4Yjg7Mj9nOjVteW9FYlE6RXAsKWB2W0dQS1tHNypjKS5sUzZCYCI5alBBQDpbfmhIbyFadDl8Zzd6Oyhbbll4czkjWSF9XT5mZllDdHpGXz1xalYyX312RjpeMjwuMWlHUEBNOGZyUEFFJmBZM1E6VnpQIVNiKXVqT3Y7Zio3SkZmLFN5''@;'; put 'put ''VHVTP0QmQD95ZEt4RllUfmJxLHI6Uz9zTExQYWFXYXlkQSlOZ1dLeyVTWSowbTAlc15qYihDKnY/RCs2M00lQ3Z3I3NqZDtRXXE+PHYiK3EkfGVBSVZuKTZiSG1EfjQzdyVuWG54ZDtOTWVEaFNEdkZAbHg0K0hPKTYzQHZsdS9obD5he3V8Q2ZxdFp9VyRZRCwjUF9UbCs7XzV+eV0wRjR2QT5v''@;'; put 'put ''ZiJjUntXZ3pNYGZFQlBCTCgvYWokLCgvVnpIbH1lVW10UENoRiVELiE/bnQmTmZKYEB9XWJoeitkJFJbR2U4JiZ8dlBJTlNPdC5XRTo1OyVpKiVxPzhiJFQuI0NwZztiWzdnRysodDg+Y11rUD9FRGVbYj5MbixVJUs1di8vJE5DNHtfO3EsVz1AeSZOcGZ5SCxFTUFiS3MwNGBsNnU8JHBVLnwo''@;'; put 'put ''eCs8TlAmUG9YJGI5SHtldX4salQzaDtac0UzZ1RmN2s2bXYrIVtUeEQ6Z19TQjlpPDcwOlBlNlovemdoJG0mfkpBemR1fWRUKHMqZn5UQ0EsWEliNlFCa0ZRODJxZzhgX1ROJTJCSiQyYjFCZjJzfWY6NV0sNy8sZi94SDZZMEU6M0RAUlVhIkZVJnIvUF9MKikoK1UuYUNtWkJ9TC4vcSVJSisl''@;'; put 'put ''LzAxKVhSK2ZieHVQTCRvIWNFQFZyLkVlSXNZczkwKl5gU11ZPDFscko9bF5WTVNKOil2UG4oYTBiTSpxN0xbWHp1cS4kUkJbWmcrVmFuI1dMcFFCKlF7WUdyKmBNe31+JHJ5e18/eHw+JlB3RDApYCglcDp2VDRIK29SNz5XaEZLR2pobkc1TF9XfW9vKWdYQDZgW0NxKXlScn5DOUJ7WFFlM0hS''@;'; put 'put ''aFUrYkkuI2QsbCpFJTF2S2k4djIlU1Z2K0MlIVl8OGVvOSo3RmA6JVZwKnkhLn1EVCw+YiF0X3dLRU0kMzB1ZVhHKmxvR3VZdWgqYjA/RCVRXyh8QiZqdmhdT1Vgb0YuQio9Lm1WZ2BjSXImLFpBZk5XK0w5XnphJl17K24hTD0rK2VgWjk2cHVpKUR6TSViJXVlUSYlS3IxOjF6RCt4X3tZUmkp''@;'; put 'put ''V2NTajtLbC9CfXVGQWFsQ3JaRVphP3RVPipjRENiXzglRWNxRXEqfDAsV09ZWm8qaWpGYjhrMGRNfXU9dykwSzQhJntIY0FnOXo9Um5TRkIjMElYYSMqJkRnJVNtc0NgXm8vVHZnNjtoSCRbVkBCMS4sdEdsQkhfP1suYn1RXVU3YWVtVHcvVUZnPik/bU5wJGV5bXU+VTVLcnZaUEIoO2FUMTVU''@;'; put 'put ''dT1Ie0xaVDVYa0AwTT1NWlQrcUtve11jO30oJjt4OFBvInM2Inp5c1YiWjk2QjZLcmRWaCo3bCs2MGxMPnxKUi5bYnJEdnEqYzI5fTswY0plQXBiYG00OklSTSlNWHxgWCh0T3oqJlQzT1csNTBUaCppVEpkKEM6Zj9XWSYoT1VDN1tzK3EiYXUzdkBrWEBPTzBqZDdrUi5lT1pweHE0PV1qPmpq''@;'; put 'put ''R2NwWjQpa0c7Pm08K1thYVd3Vzx9QUdvZ0gySDs+VGB9bVV6dy8xMDU1Z2dkfWgyNzE5UklNIi9lKzYzaV0jJkF9VV1PbDUmUGA5NTlTQEtjUHFiZTxwPlFYdkdnZGY/akx+akZEPS9ofGN8TWkwS00waiZxX0c2Vy9kPztfIzVfMzpdR1JoXnJ5czNDQn5nRG8+JVZsQW14eGJ6XzcyOl1hIXxu''@;'; put 'put ''OEBiSSx9KWJMT2g8WG9sZnhqLG9QfHduUClvUCMiOyF4e3tqdkZGSEA2czB2fU5NfSFxQUU+Kng/T1ohUT0oJCIiTVZES1kyWkozTzE2P0xPVFBDTSE7el1POnVsMz07M1pOK1IkcTlLWSpHNWNAb1RvUCw9ZzRJUURIRkNNWT5bJUZqak9STV1TYj0hcGFYKkFySnZpamw8YlY7MWlHWWo3UUBO''@;'; put 'put ''bm9ydXJHUW9wKypMWlkzW29aKytRbTVGKXVlb0lgJUo+P29UQ2hRMF9bRTBSX0U2bixMb04pNX1HeW1iLEUldDxGMT17MWhvSDZmSDdxUj4lWT0wKTVCXmJxZERkXlYwOVBURUg8MU1qIUM+Xy43SThqNSQoYjpuczNYb0E8PHJWRFtUPTAxWFBGXTFuenFoQXImPFRHcCspb2t5JiU0bz5HVFVs''@;'; put 'put ''MDMpaih0djRAIis6O1E3e3k2XmNvbVl+WnI2ZjcxMUdeYmkmLE5SXWJiamlrczNdcXw4KS5MRyJSb3RzPlEwQEk6OSkuXW4uME5EK2xSLFkwZk8zRyFGSjdASURyOU9YS3Zhblo0JHMmMSZkOVk5c1JpQCNkTkl8S10rVEZOU2NPaUBMSCQ4dy98eV8zZz82cFgxPUk2PUNMWnE9PEd4SUhvXVla''@;'; put 'put ''TUQrM3J7U0ZSZDRIUSVTMTR3W0JdI01dOUwrW003U2RwQl8xQ3EudTQ4czJCdH49QXcwOi5ffG1hT0BJWUBkdFNjRyU0XjphfkgjOFpNdCQ/MFZNPXdgTHc9OFdMaW1aQ2NWSW5xaGtvLFN9bndkV0U1d0BEUko+QEBbZ01pIUUyaXZ+djV2NC5hbmVfdXlMSH5wZjJvYmYpeyhuZzFILH5afVpF''@;'; put 'put ''eFNjJnYyMXo9QTpkNFJ4Qmw+V01ISDMiS1IoSU0jekElL09gR35MYDwqNEp4QEkhaDh0OX11Y2VZQD59b29hUDBLV0BtX3pUekthTzt6PypoXzFKMS9WQHp0QWpGa3pSLEt0VHRYUF4kIylxKT5deSJuZSw9WGpeUz5IPVB4R3NQaURtTCJAKGYrUm5HaE0idmA5czdjeVsxQ0doTTdNeGo8Ln1P''@;'; put 'put ''W09YT31CR3svblAvZzh9O1I1Y0A4SitSbWt1UG4/YGglJlNiT1lvRFhNI3ohOU5DRWc5QDUoLm1PMFYwJmI+NXl6LD02SFJFW3h7cHlQbndVYXRUMn5+dE5HLjc4RzZvcHR7XW53Ul1eZCgwfTUqS0VpQD5VajMjaTpGdntGaWZQVnMuWklrV0Y4Ll58WF1MdGJXYFZnMEg1TCZJVjxmb2NCXWZn''@;'; put 'put ''YjMmI1JyVVFGX25gWHJwK003MjYzdGJXYFNKQE5pYVtxMDt7Mk50NDYzLDgmYnw5WX0hLDE4TXp5QSpibnY6ZXwxZ3Nke2F2YiEpI3Y3SlJ1ZUYjNjpEWSpHNU0kNnkmKHciWkw3fHVjeEJXUEV9bXNEVjdIO1R0STVEaS9sWUIuc0dmZiozYz5Obm46bWBmJkI2IjU+NUJDP154VEZpYUI1b2s6''@;'; put 'put ''Oy4yPmExaWJNczEmckB0cGw0RDFUPVJ5WHIlXl1fQzVILFM+bCRENkNOcTNqLExWanplS1ElYCpUNUJbMCVPWnhqZipUdmY3ZDRJXmZvNDVNQD9paCFNJjBOJXh5a1loQ0dHNVMxPj5zNi4lN3Q7WGF5VjVkbjFNI3hpYClNcHFNOFtXTlohcXFZO2ZdMGxNV0tTOiN1KVRXQEx5QSR4ajNCKWZD''@;'; put 'put ''WEUsTFYiKFZ3QTJHXmd6Z0UrR0lSLnJvM2VWXmBSNy4yQzAyKCU1PC4yPU5lITlqcmghTChSTTxCW0JiTUFtXkxhT3w7VlBCVmM4SEt0SzsxIjF5QWM5PHlacj1DZDx4MmliaVtVZTYvLjU1cXglOHRfMWgsZThPMFhtL0A9TXpCXTc3IyYpVD1VcUUkWmtLOTtofXRhNXxlVCFFdFtmfmc9VEE8''@;'; put 'put ''c0dxZmBNZXRXUGZjR29JJSFeMVZZPz1sZiVvVyo7ZCo3XzIkekJlWklFPV0uLHU9TFc3R2hnPmRwImdIeCkhS3JLPVNQPW9McHJnbFNnUHl0enhxbHAybEYpSzg4MFZQImEpKV5hXiVAc1ZLTHt5YSgwcjV2VHAwLGM/YF91MS9bNEc+NjBkOi5IKEdhZ0leIj4oXV9ML1Yyezc/W3VRaUVHdG9s''@;'; put 'put ''LmVbRUdDZkF5SEZvVVNoWVU4Z2hYSEZTL2BHe3UyRGhTIitdRjlmd0AySVlNIm5SVjJDMCs0MzdpQFEyOj9lanF6bGwuPXE7MWZnRShGQU5ZcVpRMjtQd3d+aENmM2lwN3lsK0lXKUQmUE13ZVduWjdnRH1gInBNeH00QSN6YG17PkdPUjkhc01QUUVfdnRKcDc1WWo7LHx4KUk+P14+KVgwPSI/''@;'; put 'put ''cERHVytaMDpOfClQRVkpNV02VEd8I0lme14ufSU3M2glUyJlYH5pIj9oUG8iWEUsQTN2YyshX1RQSmpZb012MyVTdlBgU0lvdT1uJSZ8cVszbEs0WThwRX5lLzJRcWMoSVVEVWxJMnciWCRWMFkjezRJfEskUHsuKD8xS2RqLFFeU3hlMkxEOEJFPHY9clRlYCZeQnZ7UHgibSJxKl5ibHJRK1k8''@;'; put 'put ''QGV8WCJHW0xzeyNEaSYsNz91L01+eVlHXndeeUs7Zl1GfDlhdjpqeXYmfCkwYFNxMjlEcHtgLiZFJksyc2ssSmkmJXFrSHdkeUszbWgjdDd7ZnwwOyY7JHE7bCNqMkNyLE5zbHk7e1B8KlNnSFVtb3BIWXVuSzVFWTJdZGJHdnxtK15qfDh5MEQsVFBIRlYja0tgVmdVOV53WVpkR1o/TFpyOUsm''@;'; put 'put ''MWc5Xl5kNiRJKnd2TWgpe1hoIj0hSXo1O0AsPU8wdC5GRVBab3pXPygvKnkxb01nT1I0Tmh2QVJbJGZuRV4uKzs+XnViRnE1aXJJeHdsNm9DKSxjMTJeJXhnUF4oVFBLSzEkPURtJlZIJXQsZCJVODVuKUpCTkVaU20kZmdxI2ZAZy9sMm85VDNxUzsqMHxnellFRG5meyNtLDM2VG10bSwwUl8i''@;'; put 'put ''Kks9dVA3ZiQmbEozPzA6PTtsRHxTLDQoUXJYIXxZUTFwSzlOMDVANWBddXtdQy97PCw6UjxVMWYsQD5sIyU4cy5oLGdlcFglaX1QTiQsJTBxZTVlbzFnSDNjTEBCZ1o3ZV1OdEsjNmF6Knk1YztxWmwkP2R0Z2clM19uL3E+akpoOkV0UCEqIzY1WH0hNjVTfiltVGNAO3ZdSD9mQnpJVk1gRz9K''@;'; put 'put ''QDtRJT0ofWpVOyxPOF99XlVgL15oOGthNkhzPlRiPzAvQDUpclQ7Lz9qLENiTDU1VHk0NG1gcGhiVSRPKDtCYDcsTj9lWHZedU01XSEiZCxyUUN3VWdgIUY1cFpZenoqYl55QEJSVmFYW1dqWEBRQHM5TyRrNWZaa0U4dnlLYWs+O1EjIWczPjhGZm95bVBuQF1MeDlfczw4RmdWQDspXmxQWUU5''@;'; put 'put ''OTIsO3xuRH4hVn5qRm57dD9veSUjO1Y8OjJ2L3AjdmVxSkVfOzdnWCgpdz9ZcSxpWzRScls6NnA3WDI+PFomM188dm4oY35uVHx1cix4MEtHJCwhM0NlRio9R1hCKzlLdDd4QFsjansyY0ZbcGZva19FU18pc3FAQXRCOC90RTE2WDo+aV1qeiNJPHBPYWV4UExORmlub1N4Ji9JVlVFWjFWSzol''@;'; put 'put ''XktVN2ZrdEJmdm1JZy9meXVJeVk9b3VAVmhgZ2NFNl43LHRGNTw7SUtVIT0vTkhPSVAxezc0TSY8MUgoKlFVOmopfmNBVzhhb21yVW8oVmAvaig+O2c3PW5dITNlTj86PnEvJTl6cyQhQVhyZGtoXUZTaEgsbVhmQzw0JldLOHFsN19KU3hmXyJbLG1zVShVTURaRSxZX3VvSkk8Kn5CMXkwKSUr''@;'; put 'put ''MHV5OjxKIm06QmFQPjtKdWtdNUhNT1VnY0BqPF1uSEVQV0QuLiw1fFl8UTo/el1Xcyo/cH09TWNvTEY4SFFUWU91VU1uXVdRZXF5NnUkQj1xTnJkdF0mbntQY3w4RHAmX2BoYHt9aWJfPHYoUixGSFU5ZV9HdWZEZnpCY09CRypzfDhERGh8Kj05O0pWcElLZTJuZUQxK3hiLkc8WG1ZYCV8P0t8''@;'; put 'put ''I1greUliK20oYio1Z1V3MEZGQVJrbC9BWHFIZDYqQk0vbXgvU1FjKSVPSVBhLDx6JGF2WUY5InFyfVFeXyt9cCVDTUk2KVIiUlEjZjFyfiEveiFWY1d2ekExZUYxPDdUZHhvY0YlRlRuc01oPn1LYnFzI1EjT1hSaWA5IktkLCxPc0JleH09IzNQTld1cW8qP2dyayV9XWtFZWJzY2Y2PnV1eFFG''@;'; put 'put ''WSJtPyVYUmJGWFF1S19oJSokc0JfZEJtbk4oXWE7fXZ6ZTdKcX1Jb2lsVi40fHNiIyZGVjxQRjJSWG9zW29UIV0vJWNrJGtnOEYxSVN0VHRGemE7dlpwRUQrUUkqZXheTHNaPDg6UmtlXUM6JVo7YGZAJUk6X0Y4OWJAXk83Z2YpVW94OEFMTHsvcGJ6MHwqRWE9VEl4VCE6O0AhYDdpSXl1K2x8''@;'; put 'put ''YX0mO31RNmNrW1pRbUVPKFR2KztHMXM8O3JEZHt3PyFgMVkwb2pXdzZMLktlYzBeWWdMb25sfCU7KHZqTkVgMEkvL3pRP3NeeyF1JnFGUns5eT4xP0U2VnBLPytVTD5SXmpmQ2gsbDohW1V0V1ZZeWZ0S0xKTDlyT10wfEdWd1JFYn1BKSxkM3M4enJJIkl1ZGc/JkdvYkdyWFhHR1dHXUdVQ2ZA''@;'; put 'put ''RjRicFV1aHhYdUxJYEJafHYzfDh2OzFhR2ZpK3UvRHRLTGpyb1d6QWRTKWBqXWR8WClQUVV6OG0oOHc0entEcmhNISJtOl5AS0d4SlZQXzZAbFdBaU1HVlRDO3tsKnFRaTRFS2lhMDg8SWF5bWx0SU5pMDo2ZV91TTA1UWM+Pz5sUGxCJk5PfFU2JDVZWWNlbkRXQkIqdnxBWylvJiNINH1KaD01''@;'; put 'put ''VyYiK10vOXR8Q3peOCFTUndpOFFPN3lXJl9PdD1WW0VSVmtxd0RRbXpkd1dsP2JBMHZCVj50fngzM2dnKlFdO1s/LDVbJkU5WSltYFoxVzJQRD4kWnxVR2k1cWBNMEByJnpda2YlR2p0UF9gcGFCTXx6UmopO0Y1US5SYip+PG8kXzQrK1tFODpjUjlfZyJbd0pXOWloW3RFVUpmWWo2U1ZaKiVk''@;'; put 'put ''T2o+REduKHcjSE1LNUsmc0xGekNHczhaRk0qQXthOlRHXU1dTkRxI0JuK0FgN3AjQl1gYEc/Jk9zbWIydUxudjMwV3p9UWB2U3Yzb096KyQ0Mj8qSU1INGw7VSIveTpgJih5U11ne1FgJTg8ZXYzcDdweW19Mm5WMFQlME5PdGFxZllyJVpldDlIeDcvIyZkR056ajFCcmhGayNmTVFgTllTSEw4''@;'; put 'put ''KHk9W04/Z0hIPkhHISxbNldKL0YqYiZkTmk6VlVLaVhvMF9XZjV0dW9kLEg5K0lkaU4mJCYuN3BHWWRlKD1DeUcrQE9TSGJQbUx+amxiYyJAWD56PD5dJnR2LkI7RDZNWU1sfF0mL0RSSGJQSiFhVnEmcnlvOEhSYVZebnk4QF8vZk1pW0ZSSGJQImhFRyJSLGNCem5nYnVzXltaRiIvK1s2KHk9''@;'; put 'put ''cFQmaCsxKVdZQi5UUU94IjRLUiQoSTN+WnhLXy41bklPQ0JzXzVXRjAlVGBRRXlOOXE+RGFiYXZKWEdZZlV6Ujl8Wnhqcz5WZ2ZndVo9KzpnVHdkZ3ppfFtUKX1MKEhNdWQmaUo1KzJCTThWWnUvK01vTTlXKztXbHQkNVFLVCklM0ZOcF5LSWI2O0MiYWdEKEYsXihLTjF1SyooY2IpRU1tKFYk''@;'; put 'put ''bk1naGokQXxMTzBjemxNRGt0eVF7V3I/MG1BVSRFR0hTbSJ4SWs0fEF8NzpCTyxYIVgrW1A3TnpKdUlIOHZMYHMhJk1WRCYwVExKSCshInZwOmNjR187TFhGL1s9JitCWi8rTT5lYmI4fks+QypONXQ+NXNYMyt4K0J+fkR0OlhZOEAlO1ZtKj0mPGFXOGciP1ldS2Vse0F3UVNxNSZJaUssQXJ+''@;'; put 'put ''KSosbCU7SkRtLCMwTk1SeTdvXW1Wb1lJZ05ESEsoKFpmcm86PD5uNDBkKkoya2N2P3x5bGgiViJNSmxGdytCPmgsd29WdF9sUXVLZEVpWiFtM3FVJiF2O181UCgoMWhoMn46eTxEKjdARzRhRWc8KyNzJF03JXF7dzlwJUN0ISNiXmx4OGJGPGh3MSpVVl1XP0s2b11UOm99eF9CJE00SiU3Z0Vj''@;'; put 'put ''cCN+VXhFSHdSKmZLYFtSOTcjfG83ZjY1PnIpMko4Y0UiPGRiSEdkVD9OXz1zIlshN3coU288dzd2UktUVnYpVncufSF7IUgmNSV9VHs5T21NM0YqKDQrVkdpW0BVT0s/U2s/XWVdP3R1MWhvJUArXm82dnNLcGg6bC5EbSkmYSpTbHhvY1VNPCZ9JXx0bmZIal9tTmt7dTVwS2U5O1AwM0k+JXxj''@;'; put 'put ''NkJgTEZ5T3YmZntjfSohTTAmO1FgJWJMcy9iN2NGIVh9Lng0dE1QU1ZPfUx5aj4rK1FgOi9WTE53PF12W3JVeUBhNHx9THlYREZvdF9xTjpwJnI8Xy4rIkU+dnRSWWF6OS5fbzlHYW5oeXQkQFd9MDhGPWM/JW5zeCVAJFF1fmkhaEZjVCVQK2RFb2p6dT4/fWxQTyh3eXNSWWF7S1FOa3w7X0xT''@;'; put 'put ''PTR+Nj5DezVid2UuRUZjVHImY3Z1ajYudj9janNGVCFucSM8KEFOOFEraUxHXTQ5aWgiaFAhcnNBUEhNSlB8T1Z3fj9gLkokM1F7QGhbb2Esdi9iInlwdyZWOnh4RVhVckJGaSZ+dyFTJGQ3PVlDRmsjeWVxaEFRTiMiI01eLks4QCJkckZfQzQhIUVhUl59K3UzTDMpfGJsfnslXyxOTS9Yfjg+''@;'; put 'put ''VFN2XiNDPG8rIjtGLyRgMnthVCVRIl1SPks0TyF4Vz0oXyZLKl5WTGhRYFJdbi46YU8zWzZPUig0cWxnPiY3S3JCZHA5KEhfe3RKW0t5PnEqT091Q0Y4WSY+Y2hIWk9+ayZXL0w2Sm5mVnZgOzJSNWdbXlpOfi90d0w+OEV0OlspJUR8ZyZafTIkYk9MKmUlLHBySH5MeVNpVnN8dFspKDlGKkxs''@;'; put 'put ''TXEoYFIsNHNvVDswJjJvWzRLP21tZnwrOGlNIWdVPlhmOTp7Tk5fL0txandsOm1mL2c0XmssZ2BVI1Y5X1kibVBkbnRnKWZmU1FLPXpYS1U3em10fWNDKl8iN1AvQCEiM2hdazk1Tm9ER0NyNyFvcyp7a3UyXWFMQG5ucGdycSFyY3k4aShkeEB4YVUvNm86OSY4MForQFB+NmdJWGs3L15ASHYm''@;'; put 'put ''MEJPOFVpL1ZdYVRoaVlNSHdSZWgmWyowL1NqLl9BVDJ7S1Y8MGAyXVFZanlwNHRScmJpT2VDZlBlV1UsKHp9dyssUmFlImlOSiIrPXEsSnRwdTQidjRvcGB2VX4wY1ZFXSwhdEp1fDVOJEU5X05bfXMmc2ozc1cxfkNeOjNyNmJmNCl1aiYzI2RKckguJkRZK1BrXkM8MWgsME1wdmJCclh4eEV5''@;'; put 'put ''Z1h8eTB6PC9nN2p0MSl7Y29yTH5Xc1dXS2wwRXNbajxrQl93InomNSEiX35rKUU0Ry5zYEcvKDchOytgM1gkR3RLYnU9TiZQW3ddKmRyRkY1emdIKUl9TXE/OFFMe1Mkb15NZkFqQk5YX2ImLFljVVNjaXdCNltLJX09VnxObVZrcm1oQ1A/JTUjLDwxNjEpV1UpSEhzc1EjXiNfPykwbT80NVdg''@;'; put 'put ''TFtoOXpiJF0lV3lPQ2s+TjkqVXMvJUUmNztiekZHVlQ9YC51fUJwYT15XkRRKEl2cnJReTN3eU5fK1tXX1dbLEV1RHV9QGE/KV9nZD5dM0RVW21JZmsxLGxTeTcvJUVxeiJRJDtmaChlOy57aXB0WzAoRzlQSHNAXUdmMExKPjNhb2YzcS9lV1A/Rm9mQzs9enFofTB5NTBVQnUyKkl+T0w8KW88''@;'; put 'put ''ViYwbUIlezEhVi9VTCs3XWosPlJReE4oU0VhXkxdYT4yZFA+Y3dzLztQI31fUHBLQHtiWjhVPiEjTHUkfTAmSSxrPDwiLjUjaiMlK0VxIW5gbTReQGIzOGRnQ2YxXi88JCx3Jm9TVV1PaXQkeyxIcCkhPmRCdnVVRWZnKmU9MyZjfG1kQSlbbWVRMz07KFV9K2Q+JDdiUz1gO28/UndtSlYreDYo''@;'; put 'put ''SDw5dnMjPU1GLCtkXlVsT3dgI0gkT11fSzN2Wy9xfDwqY3RDLFM3Y2gsIVM8KWohY3djWzU7TEQhQFs3TGZhJlBzdmRCaFRVXjswZFVCRFYmKEs2d0Q6cDojJi5gJHNbWHslQXpWTng3dWMkNDNHdl9SeFAlVSUlcWJ5azg9ZDd+WFAlQDh4PVo8eDJ6KE1SeFIlVCFONkUlYHI4LHZVaDg+XSFF''@;'; put 'put ''QjBpZk0rZ31eT2F3IUpJfm15TXdeP2Z8USUxOFR4UTgycVJoX3BkZFY9fWpYaGI4aywxZ1ttKzV0OkpmTj1mIUx2QUNDbEtyZSU0Pm09fCFmMndzciptPm0/LDx2YElsVFlleDBEXTszaXFgWWBCJHssUEc6XlttSEdOYXo0ZHJUTEttLzVvPCN3Unw7ZmRmJEA2fCx2Qjw9T3EsdWRWLGdgO1kx''@;'; put 'put ''e2cmKVFUOkR9ZWNVLEFyODhIUG4wY28mUGAwTXBoYi49IUNzLEh9fGh4LkkhV2VhaWB0Rys8ZmRmK3UpYGMxWitNNGxSfnlYMWlRQF1uWHtRLk1KIWgmbCppR15KIndbaH55JUgqS3twdntMXTYvUE8jNCgwdzpeKXF9KUBaRFFYLilCPFZXKU9iK0lOJDBZWkI8aihAQndbQFZQVTpORTQ+fXlQ''@;'; put 'put ''R1dRJTpmWGIlMXhoLFozblR+OkpTOENuR0lkQ1IpV2ssfkAvZClAcUxTUFNQUjBZOF8+MCZKajk1X2B6VCFBcltHamkrXzRPZExHMWQvNmIzVChfQTNWXz5VRzlURWFybWpbQE9nLCxLOHdqRztxdnE7YiV6amIsPHc1KS5tNkoiSnFFNTJVP3JPdWp+Ok9STV5VYE5UYTxIOWNdYzMuK2wsOFA0''@;'; put 'put ''cFNtZjZqbHRWfF1gZ1N2TUNAeHw8PHJtISRxRUhHQnVsaiNEIUYxKmQkaEV9S2BXa2dvMz13flpUXXN3VEd9eGIvZHBbUCMyeUBCP3hOeipzRDV9dEoyN3ZOYHBoNHQ/QjFCSjNBIVAoRkpLK2AlMV9KKmN3QUdsITghM25QP0RSQntuTVZGOUtbWX5jQyxhfTM4REssdEZIfVVMOyhsWkVLSDZP''@;'; put 'put ''Nj1SX25LcTRyXjE9PSRDRj1oaGF6K0tZIjZ1LzkjL14yPTNDb285OnA4akkidiRhSyRTbVohJiUzPVNHcG0hNDQqI3VgJUF6I3xNbn5nUVl3RWRnM1Y/VHt8azlDdzs0cSxYQ1drTG5KNG15XyVvOWVdWEBOS3poUStEd0phYjslVmJQJjcvMyN4UjAjOUUpVTZ5LnBmZHl4aV1oUCVyKVhyNiFY''@;'; put 'put ''dzxmdlB3PjkmVDVSJSEzbko0TDwlbyNUPm8vSEhFeWVHemlEeEROIU1WU1BeUjxKfHJmVVV3c3Z5a0BecDtJPVg+cmoqTXhqTykxeVBRZT1YZDZ9OFphPlk9MDJnZHczSTR+In1LJCNAeGlZNyp7WSsudlRaP0g7cnB5PExbczlXQkw8I0whYEJaK3RJLzIuRH1dK0tlJH48UnM/KXM5ITkrK2Fy''@;'; put 'put ''diNKU35gSWBiXWwuNmlFJUdXRD1ed1BZdz8vX1NrfnRsLlRySlNOIXZnJEBnJjNoMXs2KTZ9Uk49REB5UlVtST9OMWFaJm8zRyVJPykpemdtOGlMYDJrOFJSeSNBNTdAdz14SVFWVk1OOX5PSjg9Ym01ek1oXzMvSzg/Lz9iQ2ZsemJeb3Z7NiZhfWUlPDJRPCUxXnptRExjTyI9OSp6fS9iUzws''@;'; put 'put ''MDZKfFZjTVB9M0Q1aUNHbWslWit9NVlPQGpCb2FmZUt4Rj1zWmxDSHhiXjxXUVtSRUIscEA0LjVYMHp2VHhCMGZ7XT47fTUxPWpUQE9gK1IwLm17X1UoIlZraTJvOnFUX0QpPz9TbjpfSWBsRVB8aU0lOitgWHhsLl0mUlk3VFRrRV9kUDtjcFpkKn41V0hmYzlkPFhhMz5nYTMofnYlYjlOblth''@;'; put 'put ''PF8mKWBfKz9gcSFbYTNuJW85bFhaYVJpQF5ZbmFhcCY3XyY+PiZsUldoKkg5QE16UCVpMyNaX2NZblBlZ1d1KTIwTzNLVDFQOWJvclZDWyJeL1BsJEwqR29iRDN9PzZNRSs+elErOVgqajBRU04kXTVNNyVnWzhNcW9VNUgoYDcsY3ghW1V7ejBVLH4wLER1d3tpRkxFRC9DaGMrZVsxUU4ldnxV''@;'; put 'put ''em94KSouYHIxVkNDYz8kKX1CU21JRTRxKDJ5NmIhS2koKUl3W29GRDhdP3ZbelI6LEJjaXxzSms/JH5gVTB7OCxzYHVidkkwUiM3MXtJcEM2N0BlYDNbeUZGRkB+KipdP0B8YUZnRk0vQiI2Q0RMcnE+VHdfRGtdS3dbVSh1XkhTS3Ntb0pLOTs4UiQ6NTI2YnlWfDRMVndAM2hYcVNWSUF1e3lG''@;'; put 'put ''ISgjdGRfWFNNMT5+JkMmc3p5WFNIX307dz1LTEpKJEl3X1JleDA3YktoR19qK19oRkxhPm5fPG5BU0M8Tk9mSDt4RzJxZHBJRExoJjM7KVVKcSw5S0ZvXXc5WzJWaEMzS3llNS9YOmNSUHpLRE1Da0s4Q0dCU3pFUzZERndEa3E8OEcyVFN0TW5HWWRCNn5CVk5BOl9OTFNCMm1lYiwpdSVCUDdG''@;'; put 'put ''YWs/K3JrKThjV2tBU0dMQmkuUVdrSm5EbV9qK196NHYzZSNZZXxSanF0TEpxJWdFR1lGW04oVWptQWJHTmBEQltNQ3heNDFuNW92XmohNEx7Q3NTTGNlTCZGSlZeLGZbKyYyZzp6fXJ5YlFbe094bnNIND99dC57dVpraDRtSS9KWWZJSUY+bG5kcy5ReFhhNUZqXWowO1RJNHxjNTtubzR8NyFe''@;'; put 'put ''YGRSSEdaYG9NWTpLRWEpVFVjUD95cUlEXXZ8dld1aT5dcDo5W2g4VSRRTGkzUzlib3NmQCUuL0g0cX16MXFrbzFNODswYlcmT2paVFppWWt7NzJgKEwwSjNbQzVGPS9MZn1ubUFKOCIsME1QLE0+SEpVeCFlLml2RGJpYlEhWHYidG5pJDs+Q2VWPlJ8elR3S2BhUnBoZTtiJUlYPkB6UTNoUGsu''@;'; put 'put ''eCNHRFd5KTErTTt6Y11nRyI/eWNvSXFoek5IKGRxMGcqaHp+ajdLcX14QUZCWWlXQGR4YlZjSU1dTyphTTVdOjRNez19bzB9JCEqUGIkeCpJdEtQOHZLeVJmbHpsNEV9Tz9pJCp4YyJQSWElST1pMHBLK05ePGtdJXtvInt7YFNJWWFsT0xONjV1eXc+THtSclB1e31BRSRIamRjblchODFFMzZM''@;'; put 'put ''ZVlJemRSTWFKWVAlM0tmNkUrelFgQ31XRUBeUDhQYyFyc149QGBZd01zQzBafWBWWHMiSyhFK3ZzMjUxaHxhUTlbfVtdJEd9Xlc4QkQvVGs8LDgsW0NDYy5bcW1CWDlWaX1rXkcoZiM0KksrPDJFelprWWoxe35ER3VBXz1dW3J8M0VuTGZEYndFVzY1TFo8PSZKSyF8e3xddiZrR1dJYGMzLlEs''@;'; put 'put ''Km5gMCF8TmVbb2Ffd112aHxDT0ReMXFfLk1zZ0t+MkxdfDRHV1tULCosLFt6XUV3W2Z4UT9BT0NCPSEyMEZXVTxxeCYwQCpwTXcwdT9AbU1aQTkkSmskK0hwOl8zeXxofmwuQEBTKSV8eXx2PzJUQUpzcEppVTxELl0+JVhhIVExe3pTPUlwfiRBKVVJQDBhWlJdKEo7MV9iMk1fSjF5MWhWe2U4''@;'; put 'put ''Tj92XzliIlpQWUdZO2o0X0RmSW5dVTN0JUwyM31xfG9KRFtddkhvPGYhYyRGMXEpLiVVOShpOiw9KGMmLF4vOi8iMzMmck1zdnpQKSUrUHFWWGZ3emlZQWFhKEx1eTpIOHY/amBKT09uezM1azwyNWhSZW9xfH52cnVvaVNpNTQlP10mSno0cWVUaiFsSjhjeGohX34yN2xDYU4wJDs+MllPdnM2''@;'; put 'put ''SFg6Ji8udClnRzpaY3hsVzVGMURkJillLipTXllJenBsczNoXyRubX44b2xxL1JPX0NRNDFOYFpfKSVlLlJpNFZRS3lQNHBKMEF6eW1kNWxkLlBNeHdodl4qJSxee3peel17Ynl5bXVvOSs6RTdabCR0WV5ZaT53P2lHdUJ6PCJbZXhSbz1UXSRqWT11Ll8vSFl9YCV4SGIrblNnT3pCRTV2NVpw''@;'; put 'put ''JGNwU0pEP2t5bVR6MVRfU0RNbHdnQCV1X2VpQGB6ZFF3dE1pcFZ4UCwwTC9hand9MFlZYVRaJVl7R3pMOWkpd2V1bUVINjExKVZ6eVdqLzRLR2R9QCNKXXl3OU1BPUBMcTUkUzZKKTlqXUJfTFoicTUpbCxXcFMuRSR7LFNUb3VEND5zcHlUW0JVPlR8UTpHPnwuYHhKIj9QeGNfd1RnS3A/W1tM''@;'; put 'put ''cl05OElLRWpLRXYoP1UzJGVmN2s8LmQiKTo0PF50aFFKL1N8TEM7fFdUXipbckxsLnhnbCRLPF9eW0lNP01JTzgqcTM1PFhaPW1aOCR6OFpRVW9mKTdTLFY/TyY5SWhNIXx2T1s1ZmIlMT0qTzUhZXdQIn4pS29WdlhJMUUmdVEjXzhuUWFnUkJCMSg5QXhtJSowUGh3T0lubT4qX0NULk5kN3FM''@;'; put 'put ''PDthTTgmPTJ4Y24hRzJzRSklWGE/Qk44Ok8mX01mUGh7VSNLSXMxdzRtZTNHZC5tSDguOCxSc05rMTFdczc0MDw1JGNfJndpJDEreV9yZE5lbE1AfkVPVl14fj1dMVZUX0pRVU4sNywzJkFuezEscy9Lc2YzQEtxVkddUDFAUFZ3ZFt4VTFPIUhXRD1ZKmE1W0t9TkopIz09XlV1cjw3dUwuV0pj''@;'; put 'put ''Q1IsMiYkMW1mUnAsW3RpYkFeSWxPNyIwLiVJYFU5LHhPe2U+KV5rVjNmITJDN1NdRXk8bHkxKWJkNzI8VS4xYSJNOGQuMTUzNTQofF5sOERNI0Z5Vk13PyEkSX1bPDlhSnZtUCt9IWhSdGIjT1RzfCojb1l9cU9INlkwRGQrPDZ0LDpgTFl1KDVmbjJoaj8zb0htdT9AaF9SfCNnSCMxVEV4S0Q/''@;'; put 'put ''enohP0V9YmtxKlJZOCRzYCw/V3k9JDV7VGRrcE1PViRLcl88e1FHZjgsd2E4VzdMNjBHe2U3P0R7TFl1cVUkdnpRJCpSQkgoTXp0b2ljYml5KF4lW0IpMVYyMFBwTVBWO3l1N19KViVtTEhsQ2ZidHZKS2wuWVdgeD5YS0NmSltrMz9oR1dTeWYyXVg0P0lpW3NnLDlEVGg3cWopaUlaO0JGRTJx''@;'; put 'put ''VVl8SHAoRihVdl4venwpQ2ZEYiVKeT51bD9rWm07TF0zY0FnbXszUXpIcyFZKmI8LlB5VHVYJkNOMXNKaWY+YmkiVFd8WlJwRyoyNmBbamhzb2lRPTlwcUReZEheTG9CaXRAfHM5dntEYDs+MWVGanVZdik1N29geiEveXQkQnU2KThxZEJGKjVZUUR0UjhIfUF5dig+KVUucD0udiheWFJqcV5B''@;'; put 'put ''JC4rM3FZeyVNfD9FXmlmYjlgXmplflFHVm5WMyElUzY0OGUjYE9SJHZHNkpoNDJgTCpXPTdualQ2e1ZCKHA9IVRMcnojfHdDdE10aTVUXmtqYHo2Njt4PUVgSE42P0lOWlQ3X2RqTlpbPU1Tc1E+KkpseiNud0Zpa00uT09fVl9BdjZ8b0R2ejFNSkBDWks8WmhVeHpDRDZsIz9hYGZUTiMuTmd9''@;'; put 'put ''Y14xN0A0YT92QHd9WElMaU9zO01deVhvNyxuOUJ9eXBeWFt6OmJ7THlvTVVeUndXKX49JFUqUz00dUpDYFQ1fEMrXyJOUiRKQUxNVj5nOk4lX10vPypIXnBOUkRHWFhRWTw+VkUkYihZOzVlZHxVL1ZPWlNeKVh6cHIyQ0BEaW5NfDk4QjFdSlt6dlFvI2FaVCI6PFhLVV56NF49U1FCdn1TXzNF''@;'; put 'put ''KFooRWJROUVaVF8kRjZbInslJGJ+OiUhUz1CUXFYXVVgZiolMCZqe1ZCdkJwUzwzQz1vSyxLKVFFcGcmPTM4JmJlSXhUWkVmMXtze3wkLlo4O0JyI2FyM0EhdUldbFpLc1c3O1U5QXtSd29gRm4+Q05OUFkiSChnfSE5LDBJLjY1QyhLX19zZztocGZaPyxMbmRKMzdlXVpPITthQHBmYzsyek98''@;'; put 'put ''Zj9lN1p7JShueVkmI05kPEZQIUAkUU1TcUAkVGBLTCluQChJRD82ajdrX35QRGQkJFFNJCRwemhTX0lnZzR8OkZyWDVsV1EyTHMyNCpuY3BMczJeb0BPfCkmcHMxbmZAJFhdJkZhM0d9T0RGRUFeNnJleGJ1fTNTaW80I3Y5djE+JUNNQlAkUlJhd21qJmlWTShXWDEoN3BNQkRXdnBFR2Apbm1E''@;'; put 'put ''eC5dMU1sfitddmh0Q0gyS25uMXUpMHB4PjNQSWFFUk8iWF5OYGpCdXxJPzQ0Lyk3STZ0ZFZ7bEx3YT86d2s6c1VzOzZLXyZedlVdL3hvUjpdMXFVam5qdT95RD9mJn0xSG9XekBEP0YvOWFlKlVtUl5DQzJyeGQ3TTtNOi9eNTBWXSJPelY0e0xPIkQ9KW1GMC5KT0xtbmYiMEU1OTlsUHNfcG8z''@;'; put 'put ''JWFSRk8lfC9dPmxvcG5pIjZGSnI9XSVzbU8hKUxoVmw9Rz0mY3MiXWx9cWhWRCRVKzMxKClMUnpFTj15L3kvREd0X3NVTn1DO3k/Q14kO01HQjRJTEB9JV5rTSoyaDNmd2pCQ2p9Z0BdJmdUYC4qRlV1c2MudHgyMUpjQ1MwPm94SWRUTyhlTGU+NTAxbG9xYGNwM0QqMj8obVdWJW1pa0A0Uygs''@;'; put 'put ''bk9baFRSIlR4bSJyfElwdjpKNXZUOnwrflg9WHFLY3xQeDpMZT1kKWNUbzhEakRpYFpQRypwQmQ0KXxrVU80K0NORzBtMFc4eD1vIyN4bjU5UEN7M3AmJUNlcTh1LH1YbT9mX3E8NWIiPUJPNHNLUXB9Lm1sTCteLD07KGg3XmR5aiRqJml9MSJyd1Q1Qjk7KSxKZjxhYik/Ozg/JDo0dlUoR0NX''@;'; put 'put ''dnp7byFOOk1IOjMqUF5BU0QjTFlJIlIuTlZGMl1JLDh3MnwiRjVWKU8iRldXW3Eod2p3ZGNQN2t0ZVZyYDNOOkIhInx0U1lTKjhocnNxWVReXSZ0XWp2eFhCcywyWF9eJnBxYHZUMltLeSVWWl9ObE9INi5lKG0wSGpxNTdbNUZkOypDRTlXdU97KT5lcl1DREddPCNbJWJvVipZLl5DM1FUeXNN''@;'; put 'put ''c1VRNU9mSSw/QnRgSmBBQFokbWw5Lzo2PmdIZlpIdzNZdk47eDB5KSklYUksaWVoamVHLDVYdDUmO001QEYoKWtjUzxKIVYlJURBXVhlIjwxPkA1KGdVX0BnTEo6dXQmZE1dMll1JCxVcG9HVlhwZGcqXiZsZCNub2QrfSlrbCYkeXxUQU1dNzhLPmRXXXtGPmRuP2l0Ly8yS1N6MVpxYzREWWJI''@;'; put 'put ''V0MpcitVR1Z1UytpdmpaNU8jMCZMJUsqJjNSIzNwSDB8NEhUJDN1ZWN4WjUoYFcyKGBXSiJQYkF4MW1tUGpGZElVZDVJNUhVKnp3WTl7MyRPPGFIZy51VjNNNG1icXVFb0VuP3M/Nnt1QSRTSE1qfSZnaS5jPDZpdTw5eilVcHxKWV1dYC94PjpKUFpNLm90OUQ+em4+UiFxJiU6UzFvdCxvYT86''@;'; put 'put ''bFZrJDZiKGkpUVB3PyxFZntHTz18Y1ZQSlR2MT1oczUsdWdndDhpcUJgV18uMW9kb3dNSHIxUG1aPXRdWj92SnNpZjxxaGMscG1LPml5YFBVR3M1O2N1bCRDWzFHWTsmPyRYJiREM3JVK3UuJlNNKiZ3Kl5pRjV5Tl56Pz9qVm04dChGKz5VVWpuRD9nIjpxaV0yN09IZGpTey4oTDJFfEJbcz9A''@;'; put 'put ''WlFfdWAmbiREYTQhP2s0bUw/aGU1IkAmRC9lSEQqKT1kS0Mqe3lDRj97M017S1dfe0cvaF8wW3hGUz44MXxAWV1XfkAsYUJ4X2lGaWMjbUFBSHQ+TS9sW2BfQCR0SWo1UFh2ZkEkSjsiVUwxYUBKSHRtcEthX2hXNG1Hcyl7eWx5YDdbZkJNWEZ3RDg2PVZVVUZGIj16dlZnNExAS0ZpcW9UIyJZ''@;'; put 'put ''JjAjKCtBWnxKYTJ9WERHeX5pcWA0I19oLEw/aGdCUiskVTFyWmUofnlkT0N3W2AzV2tPaWMrIU58UUM7LjQkOVFnUEg0IWlZKjZJT0I1UklfOjVoQH17KlVSVGZ4eGxeI311NWlucnNqJnxRNEZ4NnlyPTNoUm89fjZAVih8c2dWd307Kn5vfSRKNj1BTnRwdS5JaF0/fTZCU1AuazV9M3B9Rng0''@;'; put 'put ''R3wuIXJ7UT1IdnIkL0Z8Qlt7bk1yOGVicVJGPk1yezQ9KG5PNWV+THlwdFhlMEszMWlMYGJMU2YxZDgvb1A5Sy9KOTpjKUslbiZfZz4zNVhYUGIyajQxVHNwYChfPUpQODs3Qj92LjszIXJxX0ZyUC4mXk5teHh1ZExTVDVldDI1cD4oTC9fYGpHYV9PfCopfS9jTHVWc0d1anV0LkBVUz5MNClO''@;'; put 'put ''cEkhS0xTNH5HMno+Z281K35idC45KnMpfip5XUYvX2hbM3N8KX18Ll9odl5ObVhrKm55eENMP25QYHtuNDV+RHoudnN4eHRkNH5nbzVVLipPRkl6SFI/fiNzOUxWUzVqNF5gUi9tVDpWcXUhLFVkOVF8XUtvVipWWjUjNV9KLlYpSV8qMyslbjh2S15PaFZMXURKcTI3Q1Y1MEAlTF1xZT1ePXZu''@;'; put 'put ''bHd2NF5CQUdMdH1NTilSaj1UbkB5Iy91bCZufnUwZyJUYi5WUVp5Myx0XXFlUXFXVm05JmQiand2YUhxdDljTio2MVMuQjdOb04kMipGQkxSYj88SEY6Vzh1MVR9az5UWXJDWTojc2dTVExLS15AbUFMQG9WeH1HYFRlXk4qOXg9blNiMlg5YTxpeHg3QVA0SFRvRTNhQGVgYXcjaTlMdzlKUC5R''@;'; put 'put ''ZW9zeVp8LismMyImQlMkNmEzcTFOQ21IflIzMS4qSHU2UHpNZVJuOUBeYDA1b3ohQyNCNnJsIm8wTiRtQyRiNUBgMy9ESkgwMj16ekFNXyF1UC81clMpbX1uVlQxKyFOYF1GXiMhdCFTJk1aYmE5LEUhcjx9VXI2OTEsYS4md3BwKFVJWyRxQEAkUHd3RF5GcUswI2o8P0FlPHMpZlBRZVtUV3d7''@;'; put 'put ''cUVEcURUfWg5P1tXWUIuZzFUcnd0JlsmJU0lTGhlREUvdTs2JHd2VXE6My9Vcnh1SGRncXg1NkN3UVBlKmFpdVMvPG01RGZfWUwpQlZ2OzYzY2x8UTVVWGgyLyQsQCFJOUF3W3chTzBFS15+fVshM14yKSFBK11vJWMuc3klIyo3I0guXSMqRShwZUJvWlQvPFRaY3ckP3RnOVkmcHFnXndlM0B7''@;'; put 'put ''aCxmIzspNFAlN3FkTCg1OzQoTF43biRIQjomaTIpcCpxM3ltdT5BfiU+ZjB2RzxWU1s/OmNOK15IOl9mbkV+Z1lBJmlxamRKUUFhXihRPTpIJThIbk8xPlVsIW9pPj9nQWAyPTRWMilRcVlyOkg1Jkt8TmRWe2spVnJmJktIRl5Se34oaj5oWUk8UkR9Wyg9YylnS2R5b2QmUW13NzhaXWgwcmI1''@;'; put 'put ''TWV3Y0ZKanY7SkUmckohZT5eR1M8ZClfZ1okTHlbMEwoZDgrOyJvaVFzJVJqQn1ZWlRzYypAbkorL1lEekxaNVZpWDcoaTBlKX5sRjw7OCNhK1FJKCh6Sz1OYmIkRFNPaCUuRCpgMUQlV0Zka2BhK3IpfWsoLFBGQzJqQSFye3wxfDcyIyE5SHxbblR+T2hdJDguclF2Z2cybWchemxMQzN0RFJj''@;'; put 'put ''fHo3UTYvbF95Ml9nN1U1PXswbCZnMTRdN3kwQG16UHcmMkZMVE1vVUF3OEdqeUNtRzdRKGxqUml5aCtjJWIwej9FRmZ5OGBWKHUoNmxkZGJCcGFnInRpYEZ2YHEuSzByWndUbmRPcjo+TkJjPlE0TjR+amF8ZmszOyNdU182dlV1fUVlQTA0enpQR0YlakNzZjEscywmKkdMMTROPStUSUtJVHhb''@;'; put 'put ''PG44SiYsIWxye2JvZz0zUnQpTHF1RmwxJjBtRHNzJGgwZHpBYWFPWDZwMGJKeHJ+THNON2NuU0Y2SWJjSGN8M3xxaG1hakxOIUhddmNOYVsrYDEwWWAhJUM7d1M2RkM2d1doSSxEcCIqNzNfSjc0fiZvKlI8bmVvNUszM0tZJjQ8Xmd+KzRuNWJvM000OHcmQEdWaWtPWkFKaHpxTEBsQWxpN0hQ''@;'; put 'put ''KztZZ1BhXUY+RmJgOWduSEAyL0Z5UUlFP0dJZnhTKEY+KUV0PX09STh5MSpHODwsJllFb0leOFlpeDMhJCw8LylVQERoS11PTmx5SDEkci5MR15FPEhGT3EqNmE5em9OaEt3cHNiSGYoKmBaXTNqbnwhNFE3Y0JiPkBpUj5IRFM6TmpyIjVXaU5SfkpqeDw8eG1zXkw0LzlEaHw2XzV9PXd4I0Au''@;'; put 'put ''XVt4Iiw8LCxlT2hvTi4le1t6W3x5UnZXJX08e1t9Tl5nWlhNRzdZKilMe21kOCpeIUhKd1s5YTkpPltgXXs3fSlaTUxmNTEpXno5YmkkTGEwRiFWNyg5I1E6YyxgSzhKPkwlbWRFTDVOVV4/ZGMod0MhfEIxRz9ucyt4Mkw9OTgqUSFmMUttOEVOJXZhVH0hJWVeLH49UmAxe2xtLzhsbS9jfD1Y''@;'; put 'put ''MUpESS5bTDtiNUApUGhKeGJGUVQwSWQ9Z2FAXjliejI+Y2QjTWo8c11uSGA1ST02ZFIyc0JwajMrOzFjT3ttM3dDMTghNnAiNy4oOSE2Qyg7bFYjfS8uLDZ0e2VCSEVHdF0ifGNnRndORiQoTVcrWW8qOyFhc1RzKSRye1lPYjxMUFRWMG0pPTZKY2VJTDY5LD17aypIIkVvPT9fQXk9aDU9O3dg''@;'; put 'put ''QzspKXEwKSZRaHtLUV5mPDNrfV5sRSFUVUdAcSpKdkFENyshX159Xi8+YlpLZ2VEMXFydyx6e2FrI2ZhaU5SMEk9O1Ajez9zVUA4NjV9JVlmd1EibUIoRypkTjIkMCY+ZzE+LFp2PigwRW51U0QubSFvXXZbVyo4VX5rbGdkcG8jOml+PUxucyR1Xm1kZEhKMVo2WTFFMSxNbW9jbzR1Uj5YeFBC''@;'; put 'put ''bW83Ykw3P0BOYHY1Z3ckTXhjS190WXw1cU42UXA3IkwyUUMzUG5IUCY3N3BPaGF2TWBMMUBFSGFOaGxkLDRRcDFlVSVOYHhqaGBOMGp4MntKQG5yU3hqRHM9eD53OFleWWFBcXR5VlZ3VSoyaWlPeHJGIzl5dm8lVDkwYHg0fSk7Tzt5VTw5fUNVImhhUHhVezRgSzlXaWB7NCJySkBRRHxHW10y''@;'; put 'put ''P2pYWDVmOkpkR0M4L1AmV095KXZfdWNIdjxfTlBaTWdlMEdgSD86cTtgNXNCVSRzLC41RWZTKyNOVGJEYmBGR0Q8RC4iKkBQOTlYWE1VUSh0Zi9zTDZYdlhadl91VE89KHU+P0xDXW5YWU1mUGxkTlJqL0ZERGFdaF9bVUR2T29keH0peEA3KXBBTEB7MmdoSlNEYT55JGlPSU09cStSQ10iQ0U0''@;'; put 'put ''QnkwfV0vTGJeZlA+bTxad0tfRXo0MSRxSG0rMGRPVVJaczNfUSZtZFVLellXWlZeRSYkanNwNFNuPXh3WihyNngzQjB7ckohWStZK3ckMWdVITM9NzBnIVY9cUI8fTsvVklDSWRfUSV3WFpNeTNsJCRbYkBqODxAN0p7JDBtPElNT3A6Ik1LdjBARSpzcXZ6W0tDSTtTWVl3RFdjbWV3WHd6W0tT''@;'; put 'put ''STtTMmVvRkhPOkB6bDYvRWltX04zYjteUHpOaClqVnAjZn1lLGZ5Qkd1SGxNOGZpL3M6XytRcSxTUSRpbWBLJGIjdyJbLzRJQEJXZyFlJlhUfEZEZHUkLkt2YWtZYlFBOXosTGVpOV9IXjt1PCEpdEl1LGpyXjhrKztzUHFfeVNXOlo0Pm5LK35IT0gkbEw/KnRRMFBHNkRyeipDUW9hVSs8WWpD''@;'; put 'put ''eEdxQiF8LG5lOCkieTpeLy5xJSslTXFkVj0re1VSdDoyTGIoV0pafV9vYCpDY1lqJmErOkJfVmIvPCtnaGIpcENVKD1CX04+dSEsWWBPWnZkMTd+bTVEfVJWI0glUzVIVDY5M2FQVSFdL35pQE1YXz1LeGh+SlZ9b2ssMykzcmJVXXFrWnhMKnpVeGpQaGRvWFNdLmJ8clViKnIwfVU4YXM1TUUw''@;'; put 'put ''XiJXfVh5WWoyNmNJV2hiKXgwS0gsSHcpLyIuWj4wYTFlZTppK2JmOCEpb1UoajpFWkI2bVJlKSpKIXF+SldaLnBMPTdHQSk/cWEsbyUxaSokb0NvRFYrdS4zM0E2QCUyUj0sRHp2ei5tQV1SRDBYW3RuQkkwV1Y1Ym87SltFNm5RWzsuJkx2MlZwcSQ1d35CKno0dE94dVRyY3c9PXUrMlAkQDY4''@;'; put 'put ''IjdYJWZ7LDw5Vmc6eW0paTc8Znk+JWgzP0VAXVhKejl1aVgmakxnQ25OTV9rbl44X0gvM0sxLyg7Jn52ITEhOWZGM3ZlMjIjKUxhPiJtfG44KChTNEtGdyE4UEd5cnFVP09QJS50JjJ2P2NAQmdsWW1TLng1SXV1XiUuUz4jO1NrT2leSmRjSkEwYl5aPUFAfm9FU0QkfnI4RzJGRGZUUD80Nitw''@;'; put 'put ''cEBfKTxoZjF2W2opZTxIek9da1YoNFJIJCU3cWRsMWFUKHFsYkQ8flA2UkRjYkVjK3gpd1goUEdSI0hVekNeNCxRJnVjdG4wfERWIkBLeHJVJU1zcTB3enQxZCNQQTA+bnt1UylDRGd0T1lTRmk5eCRsUC43PmdZMERkdUVOJj5KKTZ5eEtGKUhwflQrNF59MkQ4JkRzWmJrWzt0NjI8QTh0XV5M''@;'; put 'put ''ZXdpeSwqZ3FgUSFLMDRgRld1biZRMHAhfDBUOntbPk8+WkpbO2lFIVgseEVeaVBpL0hjbzFXZF5DU3RGVlpOeURRPlhMeF0vJFEjKl1dOGE1OTc0fnAqMkAxbEc4PltOd3twcUE1R1A1RE19K1tOP3IvfTRWK0dJXlk9dUM9VjhaVFR5V2xmaGlUTno7QXcvOHwubWJAZmR6QEBrfiMpc0g6U2Ep''@;'; put 'put ''aSJPRHw2c1dheWRxdEpUKyk0aXQvUi5vfnlZVn03XmtUcykhTGxILnBPXz1mOjVPNVMpcyksKFlEKFVeVT5rQm17b0c8LCFPfltaNysrVHhPO2pMdFZAM3ZoeSpKQWFDZ0hZbVdZRz1JUyZJTDUuJV9nKTNrNlpARTFfPEhYc3lGY05NbSM1dy5BQC9NVCZlL2FGfkdWdWxpcWdJSHVPYk0+WTha''@;'; put 'put ''Tio/W0FpSHczImAiNjxKbCgzbTcuc1NzeHsse1c+eV59cm0/KDZLYUBFby9eT0RbWkVVRnxaOXI0OFp9YSF0Ym89WSFdY1JSZDJVYVY8M24lM3pQV0YlanRUNXhgd3BLZEA8RUA1RTNUZlJnPXYmbXI3W0U3ZFRpUC8iXUtAIkpAVEZxfTJuR0g1RDxWaTw5TnQwcnZRe08lYHlRdmJUV0AwOXxy''@;'; put 'put ''VVdDW2hgSkBUJl46LysmSnFJenZdQkciPzVANylLM1Z2WCQzVSZKPTNQTndPcnYhYjhWNzdPSHdbclVoRng6fG9ILCxFWEoyKUFhUV5xTmExUGZxOjl4ZDMzeHUwVz5gcShbLHVXfTBRTHhdVU5bVFJJNSgwe3E2OXxtZkBQc0d9aiwpNkk9MnxiZjU1SnJUU1RHMCt0VWVZO0lKQUBRaUR2KCt1''@;'; put 'put ''OEZRT2djbSExNUdFdDZRdER0ZHxGUWlqIVpSMCo2PnltUkFNQ0FBQUFBQUFBQSRBTkoie0p0ZnJHbDVIfU5gakJpOHtKYX40OmBMKCUkX0lkQ0lOVkRkZl9laVQuYUdaMjJwfndPc1g4N2ZDQ21XY05rR2E4Ui85bkVYcmU0Pnp0JiVsJDZmW2IuWEs5aS5gN2d4dmJIS1RfJmlUeVdXYGlTWzRt''@;'; put 'put ''U2lZQ21hbTdhTnl9eT9ITjAmP3g0O2dXUWV+b11zfGtKVmxtN1FoKlppWlM+UzkrVnBNfFBQWktXbCRXMWNqIixhUiYmT00qMns/ZDRiQEx4YDpbZkk4Qm17RDN8VSsyIV1OSldqVmFoQjY2YDlxbGMhTVVba0hPWDkmM1lrQCR6IltpRzhxUT5lO2s5clNZcitEWVk/LykxRFpkVTI+PVIpZSMz''@;'; put 'put ''eFRDOjwoKmRFQmhpQEo+W2Y/X3lrWjMmOGdXKmVdcjFfJE9iZksvQEIyRm1IYmt3aE1ieDVfQDIjc00raHJtR3BgYiNmY34xVjJvYXErdlhxV0VRZkRedUpTcXF3ZVIsc1dyMkw2ZihFcXRLe2EqOip3eCMiejlkQVgidnt8QE1vfmVqIl99PkdXb1ErT3d1NGs2JWQwY2wmM0BKKG99T1V4b3tb''@;'; put 'put ''OHpHez5OZmNsK3Zba1kyb1V7QFBXSnhVP3AvRzJZQl80WG1OZl1TInE9OFFKR20wMVlBbWhraSM/IUwpISJNcEw8QFttOjhHM3tiNFJ9VmNZNDgrcykjYSRTdEE6ZyxpXiNfW09RSzVURns0c3xOW2ppem90QS9NIU1CRGddKmZlOkNvN3w8QnBRPjxefXRyRnFgNipAK3BROH1rQztROjxLeS5w''@;'; put 'put ''b14pS3klc0pqLCJhWDE5WDEpXkB3ajBLdFNdJVcpWGYhZlFAYXl2OX0vO3U+bF8hKkdbJFBINUJWfSFOZnJESCwwYi8kRlN4SV8sYDZFS3JTYU4rZkZKfEY4NVBuci9kQlspWS5jNFV3VnJEVGt1IkIjbkJfYnhlR0QwUEhlbyZwXXNVflNeK3tkRkZNIUcyMmp4Kilib3hCalpQRF58bEsiXUxm''@;'; put 'put ''QVhYWCRfa0tNfGpsQCNpKitBNUJwfT4zTj1tJXo1dXZyZCkxd1QqblloT1khJTJpbilWN11rfFdyV0UsIVZKSG4zSUQ/OmlYenokXzBrSDNVbXdyKjZLRGR+JVsuKXBGNV1ZKEdVJHVdfS46T2NZYWwyfE1WK05XMDxeMjM4enBQRFhqOkUkS3UmTDBCJS9vNTZCYUIsfTJBMGdicUU9Y3tATTJL''@;'; put 'put ''WjRKR2x6PEsjdkQ/UUNQRStWaztYcyE/cH0ifCUkSGh4I3lZYixecT4uYElCIlQ2IzBmLmp1a2lPN0R2WTBFY2xAaG1OcjhbVH53VngjV3N3Qzx7L15ffnhrNXtQZHlKOjNFbzVLVGVJa21Be000Xzx9Y0x9PG50KXZYazZYMndZWyVobjRkRlpSfUMmX1ZANFdAKlJTSWRRPnpbMlswQzN8bEhu''@;'; put 'put ''Slt2PUVuP3IsbEsxQWtvVzxDfXM4JXt4PmckfSk7Q2gyX3gxWG5DUmhlc3ZzTEdiWHQmSyIvYmkuSyF5Wi9udGcia2U2QyExQmFoe0QiPXEjMVR7antZVkhiOCtpOVFAdns7NmBhSV1iUENudC92VkQ1fGcrYTlFezgwPmxBKipWVnZJeF8sWVs7dStMUVt3VnUvKndNUjBAX2BbQnYwQCZIb31R''@;'; put 'put ''P11DbmBxbGtiN3hOOD1XKDRjUV8iL3YjU3FpKFNTOiQ5Jko/MlBDNT9AWD0+XUpDY3pifG87MUtzY1gvWHl+ISUjaHR5NCY/YitBP1dHSX0hSDhuRl4sIyhjTmYwdTdSbUpWKUJHTmo5O3BJJiMjVDFSdytnR2t9WXN1S31ES0hUNUAoWW5OJXEpc3JqZz9waX1PKVtRImteS0N1T2tJZkE3RUde''@;'; put 'put ''UmE/eEFafnExeUg+KjRXO3ZobUBjfT9hU0FtTiUmUG1CZjRWcCZNLH5tPShbNWwxaU0qWmt2UiZIKjhEODcyc2kxcG05Rkg8Lyx1WWZOZyNuPFY5WHI7WSNKfFBncUVrMn0oc11DTTlMVksibFBPSUZuWVIlJEg2MyxVSWx9Si5lKiUsXXMie3s+ZGdaL2hFLGFgeGFGKSx7QmshXU1FVWZqbTx7''@;'; put 'put ''MXhqXV90QkxXRkQ8UDpwWCN0NTFLZDdbMV99NWN3MHJlSGtmNDVZXl1DYl54TF81fWg1RlMzfWYzcFNXJHpUfHIlTT4vOEk8SXRXZjF8Zi5YLmhmM3kudWlfUnR6ey5vbEVPLzhfQkBiJklheFEuL1heLkFKaHdEN04pdEllU0NiXTFae1JNQCpKWU9ZJjt9cD9xJDxbPzR9Z20pbDJfc1RJQTxO''@;'; put 'put ''WHFqNExDeWkiYCF5YSsvZlNuTChQKWhyRXxyLilnSlMoeEl3TiM9cXg7UmFtWVAuYy5QX2w5Nnc5fHpoTmhvWD41RjU/eEQjI3RTdmZhfDhlbVpHMzdjOCYyXzM/fVp+P0A1M3RzTXNofT5GcTU6cCx3WE0qIjtTXmdHezZGcjFsQT9OYDZqaT5BdVpUZjRuP2g6LEc/VC80R2hxcU0jRT5DW1lH''@;'; put 'put ''ZF5hMmE7SXNFJTZvMChgPXdvKThATihjOHZ2dT0xRDw9L1o2P1N0dzQmUUNYcCNKIlF3V3l0VDJiYSU7SnpyI0Bqd1tLZDleWiNAJVpCcV58c3I4fHRFcCVYOkJiNnBPaSo/aEY7QThad35sVU9rPHxlY0QzPj5JTnciOiVRZ0BtaFApK1ZjfGRQK2FgJHJ9cDZ6dE5pZ2psdHYofC9ENG9hKHRT''@;'; put 'put ''REZNLFJ5TUE1bURBfVheSEY4dm5keGZEYCtATy84ZDw7VUBYfDB0YEllXTk5W35TYC97W1BuIkE0ZVRZMl1HJS9zajNpNFJfVkxoV3FFR113I1BbIWZUWUdTI3IjYl16bkFHNiFEYnpGKjpzVi9WSnJCSkh+LEgiRjc7fi96azlzVG8/LFE+fkEjdkdtQ1BmXnVFVi4ufDxyVms2Z1dNJkZVP2Ym''@;'; put 'put ''d3w7KXl4SkRgb3d9M0RkUEAjUlhKJGEkfixtWiRCOU4rTml+akhzP3AiLD1TS05pNDFMd1thITJ2KlFhT0w4RV5WbGlYO1ImfDd6JjJZbURFITByfmN8MHYoTm5pbyhwN1Z5ZzoyZHJJbnB0WkVRTT4+ckR3KilGXTBtN2Jnbj9MJTQmVVZyK0FXQ1UsS3dsY0dxK2FvQS8vIzRwI0NMSHB+L0Zw''@;'; put 'put ''b2RUQ3taTjxqcjhGZW1TbSlkbDhNWlkwKFIhTzA1TyJBfjpqQ0grSVQ1Zj9OOjtWNTtsT19+WkBWK3p+USlPdzFQVnZZQVZgI21fJlFvcXJELl0ycS9bJkBgdT0ya3RuRlomJTZRQkVSfmQ9KG1WN35NbGw/TXJLOm15Vl1PUD9CblswbVI9YU5IbUB6PiE6ejNDL35fMCZmfDJ0QV9AclsvPnpj''@;'; put 'put ''eiNxXz5jfntKcGNYPkoiTWBoPFNOYUhCdlIkITJUKjJIZEs8ZHQxYE4sYFlPQ18sZkpJbF5QPzgwSCNYeTZGe2QlakVdTFFnUFFMU0hhRWJTKkBZUSRHPlZIU0tmLlNad0xMTSh0KzBCM29Ie2sxbXN+KzhUVDx2I0EsMURsY0c4MVsvU1AzKkowVyY1L2JGUyZIfktqaCVfQFsielJZOWM1N1JE''@;'; put 'put ''RCtJK1NVI1BvL358MFFMcXN1Ik1OSEdVUyZaeEddamZfI3U7a3thSmxIVSJEXzN1XVZAKy8iRz9zUlIuNjNufHViNTZnUFojdDYyVHRvI2QwK29xL2YoWmtYRDRvOEcvWXZzZC9gaFJ1WWxiJENXPWR1Zip0PmxPKyVIJmhoeEdeSlpwTHhMa3N8JjFBIXA9eFtpfGEhZEFqUjk/ZXhKW19FZDc0''@;'; put 'put ''dGZubj95RClyS2o1Wi5CUXc6bjhHemx1cUd0KW8+e2Z3Pih9ITRoLH0xQiEufFB2ZDdETjxtLilqR0Jldlhyck5dOmlBcWB+di9VL2dmOSFzM15UWEJ0VzZISHRpUE9gcyYlJC58YVojfWBPTSp1aCxfal1rMWEuX3JNbHkye1haNDtTLiNGMihAMytSRzZuQlcmaT4+MzY5LHcrQ05bTC5LSzxH''@;'; put 'put ''MWRXXl9UOz1yVjtleTNhaGwvIlI/JkU+PENQTyEqfCROInFCXVZQJXg3RXxjSVhLPTp6eVZ3Lmw5SXMlayVJb1hHaHBITDB5eHJ5djtTRkAqSzRKO3M2I0BOTnBfe3MxMSIlZVBrW3pOaDpEL2QvZUsxN1BWP0JVJlpQP1B3S2hlUyRbfCssVmM0Q3xfZGBWdlE4KSVhU2UrfkspfFg9cEJ6I3dn''@;'; put 'put ''RCRAeSpyaENtWko4Skohdl1RfWl+cnV+a2VqYyFdJGc2V2NFQTYvfTQ9fWNEKn0kK0tvPi9WK0JrfFB9KExkQm1pPD4oWCowJE9ZczVmQl5RfSNYaDI8Ln5ycEBncGFoXUEkS2tKbH1GJHtffSFHRSVdYSpOKnFVU2VdNTRwd0BTe1YsXiQyNkR3L2dpRGBOPG1kais3Un5tREZ1bmJzSWQxZ0pp''@;'; put 'put ''UiJHbTJ7PmJvZT9LNylpcDpqQXomNj5UYmBBbGg4VVlyPyg6cWV9dCkrclp3VyVIRy5eRmVBKD9BI2pPT3UqXm1nQkdRUm0rIWU4M3lXVXlWT05qKyYzRjUjR1ZKamRhc2YwSVRUV1hqX2FCaTNrQiJncGx4dyFtW2M4JEU3SiJ6UC9GUilnPkdUTixePFhFdjg2RnlJT1loOk54KFR9Q0lqTjgk''@;'; put 'put ''SmR7eTVuVl1jWkJdWk9BNS4+S1lTLjpgK2VYeip5UUt0VVtaeEZXPlE2NGdPRjVeKVA2Y01sM3JRdH0yTSV0eldnNih6LENpbSJNVFEiPHVvSC5Ca0Z5dVptMkM/XU1KdW0zeD5DTXczIkgvaU0kNS4veGVVKV4zM2l5eGYmQkdAMChVInhlK1c7IWZ5Z3NSWiR2JlUxWkgkYFRhOCVzS2ljeGR3''@;'; put 'put ''eTtmTndhVHBgL01sazVkPXtIaFghbHdLYlJxXiQrditfe0A1Yn1XQkhXQ0VhcklRQz19Xl90I2JoUTdJNzpUdEFUdUpaMSpHIkt2KSRybSJ3dShAVyRWTWllVDgpOjwoaXw6cGg4K2RuUXFOVVpmJnYvb0VuaHtWVyksSkxvKE1iIypHJGdEQEkpbD91ci46LDA0Jnh7QWR+eyhUczZVPihVKVVu''@;'; put 'put ''RHBta0gkKyN8P08qY3xISSVvR2I9ZTg5YVN9LFJ6WD5mdm1TfkRxLlBCWyZPaUNhV0UrNk5pPkdWel5IOXomOmIxez1+TE5aPjZWVntKKnRBQ29gLHVxKiVYN2k9bjlQSlhSM1dEKXJgOilRXz1ZKCNGakVsUV5fQXA8TyJfZkc7JW5CeWhJRW9XeE1Uam1kM0RlKCUpe2YlSDo1NzpVVUphXW1H''@;'; put 'put ''TUs1T2VwfTBSOSpoS0hlY0NAamo/ckthTF9LYXVQczBvPHE+Wk8zLmN8WX5HTCo3SnI9ZjFEVTFwdn1fNWtETiw4WWByb2J7QXZHX0pwa1puQmlYb0NEP2FsTSM5Kk9AelRuQVQ2Mi5oSyFbZVNOfGdOMkp2aFIvTCYyOFc9MGVlaXpoN0ojMEo8MX5qYipobTk5YkpCNjgqWF1JNjU6N3xJT1Fx''@;'; put 'put ''a2xlQFJvUXBxPHh6NUpQKHNCJn1jaU19azUoWGM8V2ZIK0d8UzA3OTRhYHM4O145YHVGSEw3RiFQVmJmO3UvbFdXMURHQ21FIlVQfE09ZCF1S21Yby5YP05SRV5QcEs4QGQ5JVNmRHZhMTp2KWF+cnZ2dXB4MnxNYFpBQGhtZzojUmc7JmJDVXV7aj4sI3k2ZWN8LCtRKm1fTyh0RGtkKVFKXlcp''@;'; put 'put ''dSkpYy94TmBZMHpBc3NGc1Mycks0Vjh9VDciXlQ3TndpeSRVP3JeX1dBRndGLkApcm87PkZKXSJyeEZkW2pwa2sxLixTPD5FJH0lM1p6SyE0JFc8bn5vdGU2QGpzRUIxY30oQVBrYjZIdT5gZCIscnNfPGtyQj9WNWguaEN3Lz9FY1JaJGh4ZDNAQTUqIldWUjhTZVo9TVBdYltOU0VFTlNTW1ox''@;'; put 'put ''TV10bHBXWW00LH0wSTxkNypaX0BLRCNEcWBPYFNLalAhellUIS9ANilgZTlwaHowQmYzaUA2OTFVeS5EImE8ZjlYVEhoVEFJfiIiN1Qkc1ZLMnsiQFhdWzU8YERRT0dhLllXO3xJMk57M0khXSp5XnVHeCklTGxeY3J7TTN2I356Mi5QMEY4T35IUGombyRVcDJjVCZATVRVX3BUOV8iTy5nRlFM''@;'; put 'put ''OiRiNFE5cE5vVE5pUnNyXz5Jc3pdcl1XfSlxb3c9PiFDQGF2TWg2VyUlWiRYNTBjR1t+Z0drVVhFVDl3NU1lVy5JRCQ6dSopcXZzO01tMU9PT0svPVF6b0NvOUlScXlDLisre2pPZUxhWytBL3ROVEkrKVdtQHkjbiVbUzhPbyZTYjRnbVI3JCJIfW83JTBgZWo7cG5uNUJYOUlvNiovOHpTQ3p6''@;'; put 'put ''aE9oU0kzcFNSNmZ3XX54Mi5KMF9BfiNNKGErTT1dYTlgS1IxNCY2fSk2cE11ZX5TMk5IZCFANWsyN0I7PF5fUVc8RiNGL1t3fVFmcV9+YG0zODJEIkB8JEk2bHRkRWNaVFEicTQ9Z0VPbTZYMVdVRmtJWDB0Kkt6OEZFTEdKSGspenJOPiNlaDo5UGxuZyNMIyZTO1Mib3RSQlcyT3lJWDhZdmIo''@;'; put 'put ''eURfOSRtNVQxTWtLL2grKzxJPVhIfE9idElHaU87PiZZcCRZO0ptNy9KeUFGcmBbUT55U3YiR1leRFhGMEdjdHhTKllyP3QqUnJheWlKJkhPej9nWGF+Nlc8MUVdbzFIJWFmJlEpb08ve1A0I09gSz4wOjg/RHVYbF9nNDhvcDg6U0E9N2JZaHM2YnhTJSR8OjwrQT56U1swOCw6e3c3fTx6WDRS''@;'; put 'put ''QEo0RG0/cilNKnxkKCRoK3FbO35wQzFZVW8mOmsyOmEkIX5BPSQ0Y0coMXllN2p9ZSVIRkEsYSldZ3ArKyJ1b11BSmlYWkBTZ3p2NEI2OHZ9dSFjSFNBeG5VQVt5TiNbL2UuKj4+YG9ocCJFRi95S3JoQCZ9PzRvZEtaIyEoUDp1YlQkdDRJWDBGKiUiO1pjWD40bGlAc2csbTwhbllgdXY2eF0j''@;'; put 'put ''K1JIJVhCJC9xTWNjU1hnU0tvd2x0UmArL0xXeU5iRDZ1IXh3aEU3d05uPj1bZTx8LislImlhWigpPk9ZR0VYUFkrSDlHYHVrUypVRXtyIXNhK0NkeWdCNzxVIzhTfiZ4JUpEZzpUa0lqd1YvbFMsfldyMzcqWjYsZlI2QUtgNDc+e3dNdU1lXm53eG9iTlZKPlNqak9iTTo6fnJyXUZLXn0rMWM9''@;'; put 'put ''UjkseEN8QW0kREA8ekM9UjpNQDNOJWxgUi5kW0o+KDVqSmZ7NTt5cT8wemhuYERGP197IX0hcWxTe0RHZUY+b21Pc3oqdldKSHpALGluKTh9aD9ULElEQ1JJcXNsMi5PbV87MCN2ZjI7eChAP3FxaF8wS0ZrSy42L2JQRmY3fT5SN3dvd3xlc1VSa0x+cVp1SjVbR34yfURrKFg2ODJUbE9+X0B5''@;'; put 'put ''dXxVUkdyMXM3PTB3MCN8ZXRXZFAoSHlDNmZxUCwwbytkUmNBV2IrXVYqcWhAOiR2Wnl0XUJpYD1GQFM9fjNKd3NGYTwobWd9JlR+RWw/RUtsXi9jLHJ2OHQ2U29WdDNQWCIpezNJOHs2dFh2OUBva2xpajAzVl8lW0lHRT13dHg/blN8eUdmLkp1JD9aWzlfXzxvRnRVTytrd3p5UlQ0aFFNcWNL''@;'; put 'put ''MmRFVUFudF1vNUBjPnlPfGVMSUsuJWtbUiwwcDN5LlYsNUBgTFc9U24hWU9ueiRmMG4mXnJoc1k5enVmfip9P1dvdz9ib2Q1QXN3MDtydjlobm1QVyFoIkU5cnZKWzt9NnhifT9ncSo9bV9mfCV5WDIxPWI0OjNAMmJUY2tPfTFvKSVXTHVhPTFufiF9Pns5Z1krMmlxJSVEL3tQODlmRzNAdHBr''@;'; put 'put ''W1EsK0RLKkBYQU0hRU5ESXVIe3ZNcFN9TTVaN3B9L01gP2dXS19jT1BBempfPzQwbmBJXmw1bipVN092OWcrT3ZYZTp4NntxVj1VUmkvXnZIdGJNbHovWCozaiQlYDAwR1YpUk9ofnY5Uys2KjYlWU51SHl+QiRTV2gqPTl9fFZdZ25lPjR1SXg0TyJKNShJSlgvO0dpdDM3eHx7SzVOcD0oKl9Z''@;'; put 'put ''IldmYGJ9QyoyKzwlL0gpaH4uSmk2b3UzaWEhe0xgKXRdcjNnSCwsZUZ6alFwckxNSFtsOjhhT300OEFkPXRIVEpdb0N+dVl6VVQ9NiVgPi9PVyMqMlJTRiVhOWEibys2LEAueHswdyxNVihTSHB3Zzw0LiMkXzVKWllSQUtgQGpHUWdlfjZIcWl+bn1nWX45eSY9Ry9fbUhHd0Vbflslb2NIc0pq''@;'; put 'put ''S3lFfEMjI09SIzB1VzQkNXhmcztaLjE+KjJlfCNeO05JY1MqUnYzTEIwfSU+YT4kSClyPTF1XSZ3Ii54KDN6TmROPHRQdXMwIl9WaU0rKmhzIXx3RSFlajRxbndWdFpacCZXX1ElcCVIdTlyN3NoLC4uSjwkYV5lPHJSWj5wVjplIzM9Yz0/PEsobyovejV7QFcjZDpbLjE6cE9MOmtIUU0yOnoj''@;'; put 'put ''dCRMXiNKTiRoM19WJk5uWz5xQiRgR35KPTBMOV1uUHQ+UGxQQGReVnNranY6XiJaOXNRXSx0eWAhQjpIKTx2fUxhKlI/LkZwKi5MckF0OX02Nn5NQHM+SmFWLEQ+QFdtdmBhWUYuY1d7Q308b0dKIj1Eamx5ZiZJWj5henN9JCJeS1UxPDB6KEsqfmwjSW5eVHlKPEVAIkhjQnN3LnhIeGVmXV5n''@;'; put 'put ''bltsRGNEN0NbVypFVlcvUHBjfHt0QSZNQDo/NGpXZVFkeHFheXNHM0NuRGA8Ol06Q3FOXX5yOTk2dEdGPl9mME9Nb08hXm1NQSk1dm08O0Y8M1h2OUUkK0Y8IkwiP3lGckBdISUucGdyKTZqdm9rWlEsNT98ZHVhWlg+JFdPQ2R1TWlKcipfS3hSP1pzZVU3NiUpLitzKj5pfVozPV1zP0ExU0Iu''@;'; put 'put ''O18lfSsmMHA5MGVpdkBSd1E6K1ZXQjsjX0M6RS99azZPLCtDdm8oPF0sPzVHK307N2h0T19ERnQkRDl5MTE8QGo4YTgzRkE4UGglOGdAXiUqMFRYfDNlUk5iRUgqSTg/PltefUc1cGJVJHpUN3x7bUJ+VnJLY2pAYDtOP1N8Wk97RDtZXTMpYmciUk4+KjJITnZNdEJJcSlkV1kxdDRialU0PU1D''@;'; put 'put ''Rm8jV0ZFcSFdbTQxK3U/VmpLSEhYclYwVHtgL2BLeXhlRnZldEd2O1s3Y3JVRT1ObCU2PGcvYyppQmNra3RwciNGdFV6dWt9dWtHTUghJXJ3QHBAQyF5JS5VRjB+amU2PTRHLDdkbXZgLisjLDt5TDA0IlZOLyxfaUFvQyJbaHUhfihlVSs6Pm4+YG1scXhfWzNiTD85QGplTm1VdTtVYSlAXnd9''@;'; put 'put ''PSxfcVEkZGtwNEkidCluNHp3cXEvMkY+S0ZlQXtkejZgUHIxUS5PKnRFNXJmWkRULyYqQT9TZEFxUV1ANlI0NThQQ3EvLFlYSltlYVJdM0dmNXteYVpsfGh9KHd7dTltP2RofkJUR1VYMUkvVCF5MkVKfWZGVll+KjUlPXpVZkcrOUlXLEB8eXg0TVAkTXA/OiVfXjg/Q0ZSOSpnSFFoNyMsZUAw''@;'; put 'put ''ajVueylCYSN5ezRNcHRiKiJYRjsoe0lfYEBYXi4ucG9XJlB6cHs8UVh+NygwKEVeZXc0JSJUbHdedlBBdyp1IlQxVTUuUGU1OVFYWEIyQDdDeXBZX3lCWDxTS14ybzRjZU10Z1Z3LFtiSHZRYXk3JDIpaCJpNEV0UEtJQypwKmhJeXZFKF4xUFJvZ11XTEc/PS52dEklSkxMKy56RWR4WitbdnEy''@;'; put 'put ''Y0lbL1hjWU1gRVouI2c5Q3A7M21XMXdyVigoXkwlfk5LQ1IhPC8mMktJeHJlNUhGNTowSEgzeXoiQVpYOnZIYWB6NjQxSyU5LFJCdl90Viw/I1skXT1MMnpuZFJPeDh4alJ8LE0zKUJYYjNgNUw5ZTQuYDpVOEBmP0ZvT3Y4dilpMS5RKz86RDdea1BbaUZfXUJZNVJjRmg9e21uQ1gwbVtsVlBb''@;'; put 'put ''NCppb0RZS1V2dk9JaFlCdWJwb1pjaGxidyxldHlGKFBtSnp8SjMsTFVBM01UdT1vezZxKC9zPUh7TyZIe1ZgITdvRjBPNztqZEMsZXJCTyZraCMjVHVEdl95VUA6MlZ4VTghY0tSRTQzTiVLSEZgRXpmUmhnU3ZJOiM/NnV3VFhrd2Y3QW8vQWwqWHYuIWxqZ3FeRDJEJT54OjRKUF0zJF13ZSFY''@;'; put 'put ''Py5SczNdMWhKOHdYJGNQS2BSfHZQSTppTy9rOTowdCt2WSNMWnReVSM8amp1WHQ1NCUvKiNPPm4wJkc0Ti9PKSk+Zm0md2ZKalckUm5LZWdBbTpDT29yJlBMQnMoKEFUPnhbdWAlNSElYiRnSnh3SntNU3x9JmNIQC9hfiErOj9PeG5jZ2V0IXRUPTRNSDsseFcuR3R1TFtxZVZPODFKflRmZ2Nm''@;'; put 'put ''QXw0Km43ZjRYa2JeVE1XdDomP2NMbDJCTTs/dCYjT0VuVSxSWno9emBgKkU+SCh3RTRjenxAJFBQSm8zXnNffEN7JFk0P0hTaUdFXSNlUls3VCxUXnImdE11dVRaNEtvKmBESjBLJTgkWFgqYHZbekpfeEchRllkOVY7b0Z2W1paYXAjVEtjWUh6PFM4MVMhdCpdPU18Iy9yYDQ4QyE8TERHMkJE''@;'; put 'put ''cDEreFJ0XzY8LjdFWCZqNlttSyxyYFZhQmk6PzM3V1tyUWwoc0pLciw4OixgTUc6MSRoS2FfIUk4OEZRNWFZQ35eTCtEK3slY0NhYkdROEcwaV9Zb145Rzx9IlR+UG85ZXApdHVtfHUuMFtUKG0lSixmTHVvdEhXdE9oUm48em9DMiFhSEdzfCJxUmN3RHAvNFpCWzduMWY5TWF2VHpMWXhKIih1''@;'; put 'put ''P2Y2YFpTI0VsPjkyaHlWaE8jWCJiNlFhSVp5XzNSTTRCPE5OeDRfQCh8cDw8WT53azQpK0Y7cThqez5vWVgsO1RYYUchQ3AhVTJKNCZBMUxbaUQrRnl+b1F5cFk/XXlFclMsNX5RYEpZSS8kQVQqbDs3YXMhSjtOLFBebjIuW2R7N29obChJVlBPekZXLH5PI3xnZjE/W250blhpXWVYWExhWWpg''@;'; put 'put ''QlFsWHBGUEl0ZV1UXmB+TCZePGh4XlR8O0t9NnBXPClrUkk8RWdkRTdZXlpoT18+M2NKcDgwO2ovI0BENWBwelQ/PVZNMWFhR09bKVM4SitfejtueyY9RT1QTCZSKCs3YipxdmtVZilCfiR3QjBLeSNDWlNAWytLR1VdYHRbLyx2az9ALl8qYzh3WnUmL3UxZz5SWm9ATSEsa15DKDpOUSFiLGRP''@;'; put 'put ''TWFmXmw1UXR2NCo/Py5KMikoeXFiImIxInZQJFEqZHFPcXpqVDhLNSxkazsufG50IWVTSlRVWk4wPmJZdG9DQE9aRVclTzpwIyRaPkRqSkpnLn44N2lSajVUfkdFRlBXaztNRWsldXlfL1NKYTxRXUc8ekkwcWAmUl9GIUBJU1khL1M1NV8iVGtAL1ZQIUZUaSlEei5lQ2oqSWUjelk1LzV7PUtl''@;'; put 'put ''Uy5GcT4xW1AwInY3QDhNLyJHcHxSfENkd0BUQmF8Sy9pS0dLL1RGeGddRX02fG1VL3QxUF5KV3wjeS5dcyRERHIjKlk8K3dsVEheSDlgTSwlZ3Y0QGMrQUZnQ31+bjFiI3AiTWgrTXNrWWg4K3wvT0tuQTpLfF0pVnx5VX46JjdFcmspRDZITT5xeVhHUmQvTVN1cjlNOnVWZDhlcWZuOyFocUow''@;'; put 'put ''M35nX21QWHJ6Y3xlfSY4bU4/ZF40ZFppKnF6Ki9EKC8xLzk0LD9+dj9lbyZ5bT1vWlZkUWl6K2dffEQ2bkhaPX47SzxJKy4sd2klR01Yc0A/eTAramBLLG5YPC9ASGIvZCN4KSVxZzc2SiZvTHdxOHUsYDp0XzMpMHoyUFojKzllWDIqZHsyRW9ORjMwUGh0KHJvUX0qfD8wK1ksYz9WPWkxX0Zn''@;'; put 'put ''cVpFPV9TSGB7WFIuRjtocTxGOiRPO15FP3lbL2RQdEtnIVpZOUhPRlM4c1U8OVM4OFo1LDIqYDdWcWo3Zk5XIXN5SnpFZ29fT05LQ2c2LmJFSFoyPk97dVh7d3huSSE+Xl95O25JczJhS0hrXVgmdj04MVdxfFpSQDc6YCRWbjlyT0FjOyNBWGhwJCFbXjt5QUAvLihlcW5MNSpOYHEvWS8oMnRb''@;'; put 'put ''MW99JjZMIj1fU1l0akE5PixhTUNEbElsdyRKIll3WFZOL0FRSj9rYFQsT2ZqPm0xTmVTWTU6OEc3TWYjfjBCan1RR1U+IzkpLHV4Ik1+WVBaU05uIXlsOns6LEBHbEUlX0lASGw5SGQ+PEQhJGtxKSM+cV1Yey5WJSMyRkshNFBhN291O2p9UmVqL3RMIXZHT2JgaV8uTGlTYUI6bzI9VVg3dG9y''@;'; put 'put ''O1tYZFEmMmQ+ajAkRSJ2JGU8dS5BWn1scWIxNVdMcUE6Qz9gd1M7Q1hvSDc/I1t5Q1ltTVlrXXl2OmVyKV42JEw4dCxfLCU5OX0pZypGSzp6RXMoYkxTey9dUmtnUi8rRUFXfl9sdHh3cH1VY08pfXJubixWWCw2I2V2VjFHbj99cW5xaGVHUCU/QEp+KzwjN2JoakZ7QUN0P19FejNLPCZsP01w''@;'; put 'put ''Nm9EX2RBT2hwVDgpTz5VU185fCgpbFJkSTtCUj1+SnJGKjhMcjB1M2xCVDlIbTpXTWRsRkZdfDx+MkolPWZ4aXpefFt9YkNwZTVfK1FDL0taTHtbS0l1MSxwdG9YXi82cUF6IU4wbDtDck47QHs4OnFQQkouQCRNKzkyTDNwO0I8ZGtgUm14TWM5fnJnOz1HRVg/aGJyazpUU1Vhb2ZJWlEmS1Nd''@;'; put 'put ''dlpNUzYxcFtZZzZ2RiFtcEZXTGllVXgwSGUwdmtjUCU6Y0FITytOZFE6RkhCfnFfPlUmWzRab149JE5DWE5RIXhGLlBFOSxrQyZPVlgjIm9BIiVvcHwmIyxuayQrfFpBK2ElfjVxcSRTN2xaTSIxYms9ejQ6bEExQDlrUH5sQyNVOyNsaiRzUnc1ZGgzNCpZOU9WUzl0O1YvVV0zdnA9Q3QoekJr''@;'; put 'put ''ViVKVmE8eypeYHRbLy5DXWxrRkVwYjVlfUosMDIyay51en5WKVA7KWtKakglcl8zcU5fNT5bVmdaZk9qemk/ZHdjXiNAZztSdDxzTVdPZ3woSmpRY3I8JkYwfDcuXiIuR0JEb2djcWVtRyxXVHZgazcxNSpmWD1USjwjRDJhWk0sdEIzVnNTfk5jeS5hVVFTN05LeWojPjoxVyYvIzttZUxnNUt3''@;'; put 'put ''TC8+XVolW209TGRpP0cxRmtoOXRkbyp5eT9yWjtqaEMyLEdkajEkQipOYjZxdTludmliMW1TaS9CTSVGLlFoOlg8ZFtXNDA3MCpsUzkzRzQ8SDQxTm1+Tjt9R3g7Mzc1WnhYZFs1MilqKyhde05LPzdEKEEqdzcuQjtlT1g3XnhrWXlhdnhsUisoVj5bPS5pWCtgSkA8JC9XLi5gcmtMbj81Olhx''@;'; put 'put ''Pn0+L3VHMXFxIlZAIWQqWzBsN3VSMUszW0k0PSgmVjokPkUkQHJSOnIqQGpXQn5icUo3KVJ8WjpodThfKlMjVUFgRHQ8VFF1azwifDBaY3NhWE1IMmR1ZEwoR3JxSSZGKixDTSk3XUxmUEVpWCk8aXlTJEE9SWJbNWNRNUlDQlpwQDtjJEhEIy8+VUtAZ2BvYDZSTGNVe1NTdDU3eV4ueVNbNmY2''@;'; put 'put ''SWdheFordV5HUEhuNjt5ayxDSi50fk5KZXBOVl8qPzhpaDtbWngrY35Gb1BZdUFkaig7NCtLRnhkeT1oMSEjdElYOUtpbDdpNjw3cUxMNm5RQVlPfT1GOGJidTBHSXBAX1BQOz9iYXNUdiJHVl16NWdvPWpHLGolalU0OlREJWIzQk1IUipQYGBMQGpPKD4uVl0vXT98PTc9fFRIQDlIaGt9OUV2''@;'; put 'put ''X0JGJmVIeXEmSGAzNit8VDsqbDROWCM8Q0w9I3Epcz00LkVMOEteJGl4MFkmY2FFdHQkfSVBLFJvSWtBJFJeW3lEXSl1RSkybV5xaDcsbGFaXyVOd086VVJ4RFdTYTxdUyJaJV9BdFhINm5eYXA7bWplcjZhVmovbHw8c29YXUIseUokUCxSXXtSI0ZrNltRKEZUWVdnRlRCdHRiRmtMIWw7aVdC''@;'; put 'put ''Wkt+fm4vYDg4ZjNTYU19Ymo5WCE3PHgyUnkrY0M6JWp7ZERhWD5kKnd0UEciPCt9YWE6cVskZjlzWTdBbCE3JSooMSQ9eD16QXUmXiIkQi4zVltgdkosIylfRiNCL18jImRbeWlibDdINmA0VzlUIW4+YGtWNDxdMkQkdCg2ZCxnQlA+QTlIPE1kU2g6Z2xbayxCW3AmRHdfJjh3dFU4ITpaImUy''@;'; put 'put ''JXtXejFDTVpsYFR8UG5QTWA4RyRdJlM6dCxPKjowelRPNyhOUHFxV0tRamROakA2bWNVKGRJQHdMTVE+RC4vfDZeTnJ4eTZ5KHNePj1+b0tlemNGMV16WkNoUUslQSJ9cTx+bGBdUWciaFM3Um9OWUh5VFhpdyF8fXB5eHElKGZ2bCUyOyU3Plo4Z3h1dW9CYiJjUTdjeGwhUCJmKz8hfnZqPHde''@;'; put 'put ''c05Xa2U2dVdWR0BTSCxDbndqKl1bSHh2d3U+XnRfUjhBTlF3UToiMzV5ZF9EOEBkYCk7MVdhTGYrSjQsIW9INjQlcFhRSjMpRm82Uz1rLGN2TiwjWn5tVWMqRTNfS1RQUGRrbUZmJT8rKzZ2YnRUUS88JHNOQWFyIW0uJmZ4TDdbc28wZ2pGMEJTbHhBcjtqSmZze2V9KGF6Qik/THAyRlJfZ14/''@;'; put 'put ''UyY3ITUhLE0jMWBreThFUCVLSXs9NExKTVkhNTtgeTwxJXQoL3AvZjtESi9GNn5MKEkvMygzd3tbYWN3N3s3aEhbMiptPnp4bG8kbTRIITxKJCV6cWYyIypYVEdEd10renchIzc/eHskWV4wKjo4dlpzQWV7WWFPdmUmNXY/On1TSlV3RVZaO3dJQ3loIzZ8SEgmLFspdHosJEM4WSQvN2ZIW354''@;'; put 'put ''ZHpiV0dmZVIzXyR6emhzSTcpLihlS0dxL15EZnNsZVlbZk8vWEdxVUolaU1RKT5yWiltfE1GZTkrSG99ej4yRSJ5LEQ8OVpkfD1dM2wzXXxfdD47SVBjVFVHVmIlK0x7bmJFbmRNQyVrdCZhXlJlb3dHY3Z6VDNfMkJNVzJee0dKbURQbCZFTypLIkUvVElWcih3QmBMe21lMC5uX0hLYlFuOGB4''@;'; put 'put ''QzF1L3s1aUtFJm4pVU1gJiZQdD9CKUZQdSZmISxZdjQ1QH1qT3xZN0IvRT1XeGEuYTZrVm12N0Z+XUp2WmVMTFZLLmRuVWd9emJnajpeR0JhNHpKanNjW3slYElAU3kzNHNoX0taO1V6d1B6e10vVVthSE99dlRJVD9kPF1BWGlVZSxDe0FCOzRmeFY5ZUYyd0tmZThLaz91OCFqNXYjSXB6fCwi''@;'; put 'put ''ZUh7SG9qd2AkPDpkP1o5T0BbMmJjS2R3WEVqeGJ6P15XVnpaTyxYOzBwWi5YcE4ifUwpVyptMF1lcHVSWihzQDQ9MWZDdH0sZDdiR0p+b19SJE5lRmFbKD1uZ1NCJHdlTHZ5M0tmcmhiemhMOCF6SCV7Rks/aHB0TCZIUj4vPFBXWnVJeiYzRyg1cD1sQD5DbFUsTlkwQkdTOWZVeldCTEJqJCN3''@;'; put 'put ''IXtmW3AmayEkK1tVJjp1SFg2bFhQalJLSlt2fHdKNDxEbUtNTXJNY2gxOkk3KT8kblYwOFQxWnRPVkpVX2d0aTxaV280N08wRGhpbkkwWzlaL2kuSSsvdGc3L3k0LF0yX21fMl97VyNzbTc3TF80M1N9OixsWXVnJGRvcjlWKWlCcGBtNThvTl1waiI3K1dxQC5RWCpMaV8mb2I7Jk5dbi9CRzx7''@;'; put 'put ''d20re3MlU2dLQVRNS108Vn1HfWxLUFlWfCh1bV9GRzlsYkRmalc/QTd1Kj1nVkZLPiI7M3RJMm9vZ0Y/Oy4lQ2FaUmIwbjhkRH00LkVDMk4jb1Bte3MmWUE8OCUyJjhNNiMiMlVlaVF8MjpLeTAvVjNdaVh3NjZjd0c8bnEse2ZudShrZjtnbUR0QXRfR1A9YVd+RlQxbmpeO1hRZkMvWXVQLF07''@;'; put 'put ''MGgvWFBwcyJyZ0k4RyJPdlR2NyomR1lwZyk2fH0pLl0zM2JGeH08LmlkI159WjBXdEpuKFtJaW5sIT50aWZYWnF0L1ApdWtYLGdlI0VmNjcxaHpjUkNQSSNUNVc7ZnxjaFRvbm5hT1RZXXQlNnFINH1TbylEay9AQk1LaEd6XTFoWmEob3FBOG1BcVY4VVEobz4sbjx1di8xLjw6ZlRrKT81cShC''@;'; put 'put ''d3dOTjsxN2sveXp2RCFmTXUwOnw6aEFHRn0kdTd1JmhCemVVbmh1O1okPGlCRHlKPk1XdiNQNnImOTN3TFlTW01EXzNWW1VCKjN6U1JbZCZVOl1Ye3B5e0prezJePFZobCRyQnY6M0FHPy9gUH1wfCFwPU8+PWRzfGguPnRNbDU8RHYjMk8xXSRMeXt8eD5eNFBNQ0BtXjYiPVVjLjZ7Xm8yUkdS''@;'; put 'put ''fFcqYndRPVVYUEdeUjBBSDFdOVZtdVAxSnN1aFp8NTtAVUkhaSZQMDZWPlRCTkVma0lNJXo2dn1tJT1GWDIoMjszUi8sS1ddXXsmIywrS3g1VCs+YU1zJWFxekx6aF50eEFtOEEyNVUkVmxrWnxseWJ7cUhRKzs3NkRvbnVnMzQvW2M9X10hQzJJWmdzUD8jODp1JHVWYiFbaWFRcGwmLmthSX50''@;'; put 'put ''Z3k0JURrJjJ6Vld8JlhbT2I0czNIKjM4WjB7PkwoLEZZYEpyfSV6YmQlUiJhclZNU2FSfkAuNmAld3taNihOaEhGPCQ5LjR9TyRBRSRtRmQ3KT0rW1FxTHgkZnoxOzB+YCU5RGRLSCVSUmtWQ14hZ2BJVF9Uc3BUYDMoQFQvVHRIP2UjdzlAKFVJIzFac3hNaEddZzZRKnVhR0VtcH5dfCRxaHgp''@;'; put 'put ''VX0zUG47akl5ekgiWGNqeW96bTZPQH1ERl9rc0JWQjFRTTc2QXklPGhQVXRTey8weUM0QEl+WFgxZEY3KXZsaTRsI1NRVmxjLFd9Xl9aWUVfe0RsbXY3PkNGN0hxWTAvZjJ3aF5gY0RNbER0WTRIfE0zUTIrQ0J8RTA1bUZXfX4mdFFES11xYFdtX2tgOjQ9ci9kYForXTg3dS4pQEdZL2Q+JlFQ''@;'; put 'put ''SEtlWE8sajFGTG5NdnhtU0htWX5xKVBnSUpedHRYMz1SaH1OKkI9SmpOaSQrdihnWz4wLzpJXSUmUmQ0dVBLKWVjcn52NFkqS2ZDT1AjXmZ+R2UvTlFkUDdPbSN0TUUhRGhFNU9vcEFGKnlJPkBqPSRKQFMkZkZGMjBwMXc+a0k6cWdKRz5CbzdqKnlrXiRdbU1CUHhnM1d0Xz10fllxe0J3OnVI''@;'; put 'put ''fkFuRSokSn1sWEttRHJ2M1E8RityIjdhQjpMKDBiRkJgNnIiSXx+SGE9Kzh9Y0hKUHZgYVVCMjRGZSNMSWE4RzhCLGxZM3haWm86ZUI4UEl2Jks5JWksJFdjYjoqSzxHWixpYDZRYy8rXWh2SFlnOy8vOFh6UTBxT0d6eW9OX1smZTxAXm9Oa0ZQI21aKkxre0Z6eDhkZTRfO0EvPWM8MnpKUmQm''@;'; put 'put ''OUlwRW5PLkRaYHBDaHd7XW10JVF+X3MkdTY7SGVAMG96JjVAUU00WWFxfEJgJjtfNj5LKlVwb0NwWiovZGwzYTI6X3dRZk9TPmg3Y09iInNiYC8oOl13Xk1DJmUwOmxIYEhPUVEpX3YmYj1jSTssdHBbQlQwOVR2anp4OXIxZXNPeilkZk1jYTZGK25GUGBQK2U3dXF7NzRtUS88Ql4iTFtOcU9w''@;'; put 'put ''eChrTGJPI0NJWVlNaEMmRCxNOVt2KCFlRmp0R2c4MCl2UGVbJVV2PEcrNXEpYS5ZJCFbUF9DclFWT2lfS3gmSk1kKlIvaDJQKTtjUHJQcWxdTnM8W0ZvYkhFMVV6P2BZJU9oKjs1fFpUYn1wbX5Jb0dWPmNRbGF+dCg+KCk3LiZCOlJxWWA8QUNOUyYvTXxmfC5eaiU8M1pOWDdncUMjYkIjNlpp''@;'; put 'put ''M2sxKWNuMywjOyNQUSZYJEYpVTczQy5vIT9SY0UpL3RnOjdXcFROKFAsdkdbKE8uUi51NE1FVXFNViRkLHc6ZCg6RzFnIzpDMmxibTJgYmIjdmkqV1NwcTN7MWl3ZjFqKm1RfD9dSF8iKUFxcl5oTEZpWEljPFdlOkt3QDk/KmFxKngzY3lOV21TbHRQQ2R0eDteZV9XWVQmKCVlWzJfJm9bcyFg''@;'; put 'put ''eUhYcTgpRjdDaGdINkJTJkNOWGZbcGI6Qz9ud11PLENmPGZSX3lQbzEmbDVRYlNbRURvIUhAaFcqNnZVNyo2XVQ4WV46RGoobFAwRkUhW2xkK05WYD9ORzdAP3daZjppVlJabHdiY012NTRoI2lbMCpoKyU9Q1ZwTlJoZ2xDTUNSNjh3dmExMklMNzNQKEgvNFhxMmxhISt2bTgpdnRqJEkjX3Q7''@;'; put 'put ''Z3JgW3grX3l7PXslfHxZeSg5YEZIVHRWRFFsL0g7QUtSN3Vib356MDNTNCNfPmR0YiUxRTp7LH4/XWZPSkksMTJHUCQwJUp5ayU0PEo+W058I21gK2h8dE1aekxhKigjcFE1P2MrO2A1MTtnI00wR1hrPjQjO1tUenwoeChbUVUhdmhgQW1eOmlqZHZoTns9dCNAbjxMcVp9fGFEPSwyRmpWXS88''@;'; put 'put ''MXlHK1N8UHphajdFMVdhR2t4aFZBYDI7bU1IMXA6e19UJX5LSl9kK1RJYXAyW0NPVn5EZD54YEUpdkN6TSksbFJOV1I1ISRlQTN1I3s4QFRidSJCPF1EKmZUSDFwXSppPUxuNmdUcmI2NWFCVDdWaEJGdEBiZU82cjBzQ0w5QSZHVm4vTmI+I1JfPzIlLjdrfFYkI3B8eTNXeGk7SmRbT3NBWnFS''@;'; put 'put ''KGlwZzAzYHJZckN0IStyP3VMQ0M5aTFNQj5lQkhxO3BmWWk6ODRIN2YjZjRbfT4sRmRNKmZzYFpQNDxvfEc5Xzo/b254amA/OjliX3M9W2hzdiUyNXpXb2RZej9KJXtXNmJuKWp0RF8qM3czPG9sSDliNjt1JndAWFl0LzdmR3ciIXVQdnF9bkkycnY9Xnp6a0wmLntgWn08TVVJV1d7eSM0MEkr''@;'; put 'put ''JnVlWFlpYStgeWdnOkJdRlswLztSWHtUK1tsaG55Q202fnxGZi4uS24wZXpqKyslLFtTenhCckI4P3xHRmo0dikhRkwoJG1qZy4vcUw5eFp9VCszVFswQWtYO3Y4aH01U0YvS2IwT3c+Y345dDgrSUNUeUtMXTBmUX58dltXX2RddUx+VVoqQnpoPkltRTBBUH5+WDxWYkYwR3NHbEhFbjsraSpV''@;'; put 'put ''R0RjOXApYFZZZHdNRlVNeiFrdnxpT1tJe2hhe3YxMGR9XWRWaClRdmtOKHQvL1RGX29AWH0wN1tFfXYkIjRxWF5ZSncsY19BJVh2MipUdi9NSUN7SGBZRUFZPS5oPHFlaktOTEJ6I2RCQkBJYVdPKHZMXi8vN1JRJitISiJFVTAsUDcpdTlodUp5fjYyc2htMjFDQTdnQit4QHsoWz4wUyx0RmxS''@;'; put 'put ''SURiNkllTzx+OCw1dWljZ3d7Ij5eMVZbY3R3dHlPXzBvZG0/SWdxRGJIdWdTYDMyVHdPQGJwaEpwQTdiVWlVPHYzLzBHZ3gyZChpVWRaQV91ZW1gY2lDX2tgN3VIbCs3W0QuTHBrQmBbZjZQUFYhQi5YQCpTVEZ4aXxxOStfUEM2QTM7Vz8sTENia1Znclk7dU4wfjZUKUIkNmpEUD16bktLelss''@;'; put 'put ''VCYhUStXayolOWJUSTE9WU1XKW0iQEplZGc2fDFMP1R7b01WNipWaWFLM3ZdclBjVExMa1JgWnsqO1ZYOFVLNX5FSGc6dU1iJFtwNEpEMlBLKiw+fUFwQDJNOD50VC55RlFvbWIxNlhIQDchdSk0IzhYSjBbIzhFWkJRP3I0QEBIZCxiMUt7aktSbWptSnksajZHQ3suLylRVWA+ZH4qKS53aG00''@;'; put 'put ''bSlDOXwxTDR+ZjlyaDMxV2p2V1ErNWNXN05paXMlU2VFdEo8cCR3QXBYNGdUR191cFZVcFJsSDxWVSxIc2wqYHB6O097blpOSVF0JT9gUUxLdUowZWZ8dlhQODg0IjRVU0gwQ3VndUZyKjBmPmd7NW05O3FPYi48UXpvVXdqWCtAQDQlPyh0Sy9zNmEsJHkkZHt7WEw2bSJDZyFVTls5L0Q4Pltn''@;'; put 'put ''WEhIeFE4VDQzNzs+flV0XnlAbF5aNmYiMS5qdEdGVyQ3fWAoUyFSRyQlcHhxT3EpeFdMYi9YaEouNWEjZXlUX3c1JmQ6W3AjYVB4WXhJOXZjRyhuZSx8LHU/QlF+cn0qdnR9TDorNWRiQ2xFT2YmOHsmVzR4eld9SEVgOSx+OTh0P1R6Qkl5a3x2JVVDJVkseHk0NDwoXj0iTHxDbHxWcT4kKkZJ''@;'; put 'put ''dVh6aDV8SUNHMylqd2BWPztUNVQpW0ZNMllLJUd7SkhROFkxdzpGdCxtdVltMTwlcldOUW07S2BvPl80eSpMTDFUIT1VcT97OCt0Ty5jUGhlT19XJHAzRU5xTGMqcU1wMFhHeSw7ZFF5dUg5ZkNISGouITs/dm5mIWleX1llIyN5KGM2VCI6ZERuemV3S2hBOF9USEo9VU0rfjx+Rz5PZG1RX3pG''@;'; put 'put ''ezs+fkVYcncpaVMkJWhwUT5jYVFMbUxkcTVGdj8yKU0xMHtgdCU0RkBuInxebENlb1NQdiZNJnNyK3AlQk51dllVJEJkR29hRHJsQjtuLnBuX15EM2dJQnEoN0V8OVg6XStUKykvdDA1fFVgKFtYaF4xVEh7VDxXSmBJJG9DK2A+UGVxcFs+KWl9a0g6NVRTa1NRQmo2Ik5qU0JYNkRdZDxfeVAr''@;'; put 'put ''fG9rY2F4KWwsNi85Z1NJZlhJJVMmcFoxJmoyPEZBZHV0ezkyYzhRa18zKE10QipeU0pXbHAxfW1Ze0c9OSY+SSp2M3lUYjVeNilJKUBaUjJFYVdLS2p9VCtaOj0/YGlafVtnRkspSnVCbHZzeVs5bD1feHx8ODY6d0gvRmN3SE9ialFedl05TjZNJnRsSkZ+O2xFWSUhcF9qM1oqZSUlXnhNUihV''@;'; put 'put ''aXFNKlYxJVpBeFk2Z1d1bFRObHxbQyZVVlRPXTFEamFuc2B6IXtHYUdNOWlZVldtNS5DRyx1SnwlYXR0Un5fOCF4VUQ6IX0sSzVyYlF2PG84ejY/IjxFPj02Q0Azb3NrNF01MGl4PmtJfVs9Rl92REkza1U/bStJOmFWaFh6S2lBTH1HfXVAUU91ZGxhLEErTn05X3wpQVVneE86SykwNlBnTFYr''@;'; put 'put ''XSRHQkRxdmYvNGxzWmQxPmgiS358fGlfSSZxNCFVQixfO3Q2NSgzKWN2YGM8PzwyfGJHWDR9OHoheCVlInQ/K214VD52fTAsY1hvUllyO3EodDFAZjd9UUhPSDl3LlkqUG5uMmdydD1WT0ZSSEdaXmgqTno9SyU7NDROITx3NGt3MWtmdXFJJnxTRi9nNlZLIV89JW00O3U0LiZyPXV3OmxiXitD''@;'; put 'put ''JERfOlJeZUU+My5Sbzl6bXRWMXBvTjd6KUZAbG05WX52azprJCRbPC5AMHkiRGolUUUlRzpoPDp5YVJFJjUmUzhFNCRobCVaaFdlPUBsblNKOTxpQ2tbOkJRTndnUiFgcittYE4rKHw7SmhVOS85XT8/V2VgWGF0RXA5RjhVPFNLVmh2UDFLaTEjZjRkajdKRUNrYElCY2MvS3s/c1ZpUn5QVyI+''@;'; put 'put ''UEkvO1t3U00pc1p4TyJMdntHOGt6KjxWRU0iZDA4bENObVh2LmQ3ZWlBNzJ5flpbUWRFR15hS0BHPFshRzN9Nml0NkJtakthT0c1S158YzN8fT9PXmh7RFlgTDNCa3RaNis/OkZgZ0pbNlNZRXJJPn1pZzNZeUY8N0Y8aitgS293TkxANCQpdk0mNkJYYHtxczhQbFRYJig5fjVOI1QqNVlrdF5m''@;'; put 'put ''Zjo7SDorX0FQKDF4Sl1CVTtATXpCfml4aU1ZJmdZd2tfUG8xWkJsRj0haklGdU9KNz1FRzhrSWBmTC9tXUpJRSQ8Ui9nP1g5LEllZTt7YzxLWig3NyU5VGFRVDY+SSJwTiE1YCZUJEZObS4lQiJgM0kzZ3RrPTopPnY0XkpwL1BjWWkhdSgqMVlsdk9MOCJXUitvLjkxQ1pVaExMKUJ7cGVKZzg2''@;'; put 'put ''Mk9eOmpmaGhQczdGI0JXSEZWcXxpOXxadUJwLkpBaVVzVWh8OW42YFd+QFRZNjYxdiYmQ1pdKkYjenJNRS4jJnBdcDBQM3MzeHopZUVYWEp1aktZZGFuZGJhMi9seCZBdExJUSlRQlkvQm80R3lkPytKTGN0eE8kO3NSRTg2LFY5cEVGcW48fTp0R0xJZVhTPDZ4WW1eZ1JNQEombFpbW2ojMWIs''@;'; put 'put ''SUcuO0Jga1pKWGpjP0NUQVd5Z1JsdF4mOy5pUkJCIkhwXko3aFpBZjZSaXlAaTxlOEciIzNeTCN8PCt9NGRvJS5DPDpNITMlcnY3ZnxTK1dPX0tlYzUhNj1OSSF2QzBHWUJOOSlTWDBPX1EqNClZXm9mcjpLRkpRXi44SXdffD5nLkNJWk1RLjIjJmJNKE9bMnM9bVovWG47TSxWb1dseSUxUCUv''@;'; put 'put ''Wz9tZ1RJQzNdcCFteFhTclJXNVgwLDYrTTtEbFYlQH1gMUJLISpNU352PFBHbk9LX2FVUHJUYm4/ViojQDF3M2UjV0NAT210I3VnSTZHYHlTNkNTNUgsdF48eG94NndLM0hmV306JX0+emsvR0RyVWplX1FLWXRSR1VGRV9kdFY5OXRRfTk5JD9mbmN4XmhASkQ1P0RVaC59SlYzaSNFK3hOZCFp''@;'; put 'put ''TWUyPnxGbUQpfHVzX1FwPE41LkJoWUokUDBwL0xuLDY4dEpQXi9tQFdDREBRNzdGdj89endxeXY1d1IqMWd6N0tLW3VbfnQpK05yKzB2VX1QXTFaLlp2JUtPIl1DRG11XkZ5NSRrVm5yUEd4OylAMTMmRmZGNEIwKTJqNEZmb3dlZCU6NzE8d2RPcnwqLF4kcGI9UDhSRltVME97Li9dZiYpR09Q''@;'; put 'put ''I0p1cUQkISw2QHooRSpPLy51WloyPGNCQDFOLGBoOzR8RHslcTJ0bTBpP3dOcmNAbj9BbHZRNEJxKH42L1MuVT46TV0mfmZUcG8qY1VrJiQqUDZwaDtJN31Rdy5rVVdFcEM0fiRpTzMlWEZsRzhrK3ckTik9U2lpT0MwOnRDeTtLWnVAUl9wRnFVVj9zNVFdNkRZUE88LEtaQXBZTFF6JUVfYVFA''@;'; put 'put ''RlZ9T0w3UixUeGBTWSk7KHZZVW0uPSxqTDIwJTBMaEN2aFt1SlRRdWVhYG4hU3U6PzQ4bG0mMiFyeHZmbS9OciFYYnklM3RKKFhKIWZ3fnEhei5OZSx9dUJTQH0pUVUrU0J+aFIuSkl7U3ghc2RBdnJzdH5rKUthNXQkOlVxQC8uUnQzKTtXKDdHMnk7b2EmfTksbiJVekR7Pyw3VjhrPmxwdlpd''@;'; put 'put ''OT1tSnouWUhQQHZrdHw2WzhtR0ZCR3o5b3VDbzgzUl42TSFIMCV2a3dRWzFjUV47NHFKU1pTRihhdCN4a3Q7cWVhcm17a09eZjRESGlpc2h0bWczYzJQPTs4NDhaI0VhIThrWTBSQnJXYzl3ejpZdFtXZGZ+X0d9Wm9nXkYiQ2ZdL2xSYlNYSTJ9ayF4azNzYU1kZXgoLnVsfCEpJSp3RSQpMHtQ''@;'; put 'put ''OmxaYkVHPzElWS9iWDojYjUiWCtsKy5JQyFhdj9CdkNYRCI2PntJd2t9Kl8xPV9DWXpSY3I+cjF1cDEpI3JJZmpIVGRSQGhNN3ZTMnBCY3tsOilKTU96cGc4RlcvXUlRWHUme201JTxtLzNNXUdxL0d3Vn1FOGc7LGBPWnZFNFY+VWB0ZyxjOEw0dDpSYCFAWygxMlFLZG5gNn1kP287aj8hYmBC''@;'; put 'put ''SFdAdG9UTjFGYy45OyorUFg8JDwwX1QpeT9pZDxDWy9Mbj0wTCR9eHBNW0dkPShATl1GYCNSbn1rMDtlWXJVJFFAVjEhLGkiJlVNVV9rQ2FFZEtsL3Vdd2YlLzN4TG5vJXJqOEVbMC42WlM/LFkufTtZIjtrbHxRVWVXenxGb3psMzdNO24rTmFfV2ZFVDhRZFolbiYsamIkR01YMExPLDo6Yzd1''@;'; put 'put ''KG4kWHNnZkMyOmNMVWQsNC55OCI1dk1YQmhQRnIrQz56XzJrc0lWNWhZWGBZcDxAc2MxNTBlTXRTPmpJOClPan4wUEprc2k1VXFRR1hueFBbZzQkaztjd2FiIXQkeF5fbGdGbXxkSVdYfGJIUGQ+JDFfXXVmKlZAUGJ3anI2dEZxI0RYPmxJSywjMUNkQTlbNGMlbWBFYUhXPjsjQk50PERYR2c+''@;'; put 'put ''aDg4eXQ3flE3ek5gfEVwTSRvSURhYl1bYFYxOSxhOU8lVUpDVSJ6ZD0xSz57U3d3TVNLRjUwVilLI1d0T1U5T2pzaWZNOHk1RTRwVT94Wzx8e2A6d0AxSGpnSXs4b0wxQkVFdDYyWHteSkowb2NaOkJuNDBKSURLKzYlMyF+QWFeZ1U+cXtmRGF3ck85aG95IVNHOXYmU1BdKz18dW5tUz1NTD5C''@;'; put 'put ''Q213VDFJakJSMHxSI3Jmak9MbVI8ZHImYUJCYilkLEhAMilJMzF2WHtOTnZsVStARTBvMmE8d0x+V3xPaFp4emhNUGkiRjp7QjJKKjhlWnpOYlZUKnttRndtV2lETVk2ZjpfeDBRISl4b1cjYE5Ze1J5LjUyXzI5IzF6XkgkfFNkfGprJm8sY3VieUNxKXE1PUk1RCosemhoTmt0Kz5LJSU9YEZg''@;'; put 'put ''Myg9e0g+Q3lsalhlcGJmbDdnI1V5IWIzfnIwW0dJZFRUNVhCJD46Si5hZHRdPHUxcXZDcHUrTn1ZYF1Ec0w4SHQiIUpHMF58QTp1ak94M3V3T2NoYU9fQztwI1U8Z1dCYCFaU0tkWiVTVHc/aEt7X0JxWEg9Iz5CNiUqMDBiMVNlYTNYQ0M6JDYrMjdTS09+RCtHXVBiJkVBbXNpSC5zUSFwRUsu''@;'; put 'put ''YlpEZl8sbFIqMlB5PjlHME4pOXVFIzgmdFIiQ0JtX2tybHcqbSl2eVk4WCFwaGBmazt0QXA9b1leUjddVUROOHcpNXV5dGtiKDJTP24jVCgwKjp8QTs+TGpWQHIyd1dUbUBkKWskViFjNyMmTDElIlo9WlFVVSV3NTYuWls2YDFfYzwmYX5oNE0+Q1tnbDhNYVFVQF1oQEBCcjpefVpoaE84flZi''@;'; put 'put ''YHNIYixWO3RfclRXPFtIQ1g2bVdJej1VdXpgbDFXQExaQlIhSnFIa3Zda2kyQlA8UjU7Uj1BS0laamBNJl1MTXZqQipiSVNDUXlpQ0R8ME1XSWh4VHZGSDlfT3ozWlhgPFtoenosJkFdQWQkY3dpR0FbalAvUWA/XmZld0M9OGxlYGA0Y2huemB1YV9nPHRPWE52QDdPOSMoK0ltZV8yMElWfkBi''@;'; put 'put ''aVdefDBOWE5LajJ0RnQxKGF1fUtZLE1WenU0OmhWOSN7cXIwLE5afWYoQD9ARix+Vk9Nby9Ia25hcV9oQ09eREJ+e3AoLjxgR112I3gvRCkvNlYsImYiQDomWClKPCReSCVHIiw9WkB8bktFLHV5RUp6dT4zPGtDd09lJHhdK1VJe0A3YXNNblNWcE9BVmN3Sjg3e3YkSFlgT0QvKCssWCNMI29f''@;'; put 'put ''bkEzLlNnaSV0T1R6Q1cwZS8waTRBXVY5Z2xHPHM+U2Y2Mz0wKlNRblVHK3s+NGp+fHBGfDpAaGA9OTQyWXM0dS9YLyw5aFlFSGshJXJle11ZZGolOkFyelNTUVc+Vj9KaGsyRDBGbDh8bVFWUXRCZl5gM0BRQT1UfStvdjxBWSF8VGowY2JPenlTc21XMj9pfWdLRklZQEU5MUUpYGh3W2IhZjkq''@;'; put 'put ''WVpMVDc0KHExfH06cFh9cjZKcl81dyp3NlRnQjA0Pn1iSD1JNUJMYnZeIyhFMVdWIl5XRWlBYjdCU2w1RjIrL3RJY3xsL3dYR1tYM3ZbUi5AMm4vNVgrWStPI2E0bkB+Nm9aTVpWRHN7a2AxQUtZXzRWRC8/Km8vRDNFfVd2ZXw5b000SnoibixCbl1gKVNIeFssWDNJY0V4QSphI1loZW1tY0Ij''@;'; put 'put ''Z0omPVgzWmVAOzkkZyxZLDIhQHw9fW1uM3A/Wj5eJChxPnBxdERjXTplSzZMd2lbZFlUVUgpVHpwQ24/el1HN31HNSwvVjRBXjlyX25BeD5jZUsxRzlbLi4pajAyMG06Y1kxIWEqckNTbTY7dikzVXh7O3pBTnkmL2ZzdnYsSDFUR3MvU0I9Pn59eVJvQFs3QUlwdGF2e1E9QCV0VTIpPi8vbCxt''@;'; put 'put ''aUM/Zk82W1YhVFErX0siKXMkfkIjVGp1WV9bR3csU0o/Y3xjJU5AW34uRC5Mdn5uVDY8KGkzYlc7WFR1aCg7Rm9FLCEhbj89cGh2c25WWTtkZj0uIjdweG10Vjs2alZkfUBvNSNFTztqWGIobm45RktEZDMmdUlZKCFqdnw1VG9xVlpVW1BEWzIrPS9pa2QoR3hMfVdnXTtrRmBTbU1QMEBgKltg''@;'; put 'put ''KTlLMVozdUBRdS5YW35gVEt9THVnTldxPip1dlosMzQ7OlorPndOWih7ZHRxI215OkRMa2A8XU44flBxVFtdMWNPXjo7O3BMcjcoLzUlcixpcVJfcExyT35tTjxiSHJUdzZeKHxENzVxaVN2JXw5WCFAKzsrfVQsK0M4UUozI30xO1AmRyx0ezU9RVI+KnVYZWtvdWFhfi8mPzZ1ITdbIVtCUHds''@;'; put 'put ''aXJlbVIueyZNRjtpME9DSUdSeCIrdVcmfmJ5QmJPSFF1XmIhQ1oubGJDImpWXixdQmk+O11xYSNzI2Amc1tHZEZKVixpO3BOQkc1fWRIODM7OHFjKW5UIUF1bm9ISWp+WGhpcjZsXkxUQixaOXNyL3dYbnpBU2Q1PjdbMjdtNzZ4OFhCWClUSiY6X1IlKC5FKlpmQ1psNjMxeyZsL1tVV2kjP2c5''@;'; put 'put ''ckBMdVM3L1c4UVo+YzZbb04oQlB4WmokfVszZXFCWkQuNXpONHhLKUJnY1FsW3RsVU5dSUd2PjNydj5lWVlgKV9IfUxvKmpQdERke0k/dDtVSSR0a0RydCZnXzl9SFRSYUVhQlcoRERXey5xQkI3eyEyRUM9QTB+Pjo6OjtqNTc6SkZCe3ZTJWZWKEFfZ3x3c1MvcmVAfFpQMVNiMDdiJTBKU0dp''@;'; put 'put ''VSwyYyF1YjNzTn1AZW4xKlNWTGVMRHBGR3dNfVUuYFVsZmZ+ZWdfMz1PQ2QuOF1NNVp2MDAsfDI9OCpnZ3B9TnZiWX4sNDNLVzpBZW1QamRONU4mJnF5RCspcGI7OTNgTHZLazY/PCxYJDdiLH0jeWs8XyV9ZyJoTWIiJC89bFgyb01jOkcxVHA1SUB4OW5VZk1aWzEufkkldE4+ZjJHM1clOmR9''@;'; put 'put ''Q0sqcHJyck8pcVIxLCk+cjN7LldzTjJ7T04sKlYyWFBEZ2BDK1N5MEBucmB7PikjeCNWY1oycTxCJTZ0dlZPOEUzRUdpbT07MGIvTiROZ2U5dSVIXi5SJTFbTz9AOHcudSwwbmxze3N5I29IeTtCX0JyWmJ3bjl5K3tifW9yRUhQWz4zeVNpZTdiLCkuLnVld05lcDleNCx7NTlHSEB3fD4keGIk''@;'; put 'put ''clBnSkIqKTZ0XWk+eHJPRnZ4Tj81PWNaZ3hIVm16YDFFSGA8cFpXXUBHfW4hYFYsOTRUS2d4e2VgOm9fdT91Zm46ckI8NWx9eVZYRSF6M0R7NmMlX3JGSjttPW16RVkzW2VEOksrYXouLHtSI1Ayd31zQCQkNG8lNX45IXY3JU48YjQ7VEd6fUU2OmAsREdhPnY0fC4qJV8vZjsqenB2dkhjdmFw''@;'; put 'put ''YSFHVnhNXkhMezheWUV1aiZpTDp3eX5OXmxaV2dgQHdjSEgpeHVuayM8Y2wzYzIhbXA1Q155K0hjWSM3aDw/U0ZzMEEmb0A4UW4uMV4wbTo1VE80LitlWkBbX1A1S051YVFZOnhKe2V9XjFQfktjbzl1JU1GaTFHV1lGeUNjOE1mPihdLFQ+cG5WZXNGODBnKllRbS5RbEtAZFl3YitPbUxeMWRM''@;'; put 'put ''dE8/YXEhXm9Abyp3ZTV9NFV6UnJGeU5VO3djeWVVRTxRNCtvP01ZXXJ4LkF4Z1RqPTtMeiFYNlJCJmooe1QsPlE9V0QwdFFDJFByRjB9eUxEMWdBMDxnYkEvJWJAMlsxKChRSyNeOjs2WzkkPmtGX3QuQGhoKEVKbmpdS043LyojVGNaXlJuaC90LHN9JWo3TDtRTklIbV94MyRNX0NAPlUsXXZI''@;'; put 'put ''cCwreXduRkZxLHxMd1A4cCN6M0tET0VbOzRyOXBhYS5NdmNEK3h8VzZSOVhKKDtnRGB5M2ZsR2U+SyJsaC5yXXhaVn5YPF8iMChhU1J+SzlRNTptTUwwZXM1bV4mRHIoSUVaPjQ2KzkkW1giRz1FYClXK1hHXVM/UmJre2tDTHckd19vcmpOKG4wdVVFQzdvW3txUG5WTXRpO3BeaiFZaV0jfDFU''@;'; put 'put ''cXk1fCRpMmtEfHVXaDc2TCtCPWlfKHFaPDw0OnBeYTQ/W1QjVnZ+SzlSYjojbGtFb08wbT93WiVGM2NVJSFzI3d6b2N9fUIvclpAbyIyTFgicUFEUEB3TWZYUSNzSmdDcH1mQ01keTM9Q0tZYkJna1NofmtTQGlsLndQcXk4dnQhdGtzSlZgclJWKzh2cXlOTWM2US8ibixgS1tyZ1N8KkIxOSJX''@;'; put 'put ''JWJNMUMqcTohN15YcDdNL3ckIUkvajxLPi5Nd1JUPmJqTSJNR2pbI3Jubj91IypWI1o9aEdoW05MNHA6VixIJVU4JiZ9PSV7WDUzOkV0PT1YMUZ3cFY6TE1UcXUvaCpHXnNZSzV8UkxueFdJdzVXYmhnd2U7Yi5Hck8wYjs9WF4vRHZneltNSW1vfiZkM0kyck5EY1orTmVra25jZjVWfCNZfnI8''@;'; put 'put ''YWVfKTM3b0c6P1I+UTZHO0VTJXZQNypiNy9mSSo3VXsjZUhSU3coMU8rNlpONyRtM3x9ITo7Kld2KTViUSZfYFRkcSJZMW5YNS5GYVJRM3E9SzVlM3VaM2VQVXNfT3I3azl8UUBHJE9aTXgoWXk8ZV8xPSNYen4sPGYhVCJlfUMySiYyXykpI340OXZqVldFbzRCe2IvOHtrSkQ3RHx6Okp+R2A4''@;'; put 'put ''NiJhTyVZdG5oeUVpSz1DLFRXa3thRTcwTiRLRlJCKlo9cFJfMVo5ci5mP3ZvSD9tX1QibFZwb008Wj5ZN2tiW2FIMklAW0A8UWd0KUhAS10ydVteMmNpI3F+IVMqK3plTltdJkxuM3NSI1YifEVpKHtqRWthLDkuNj0zWCo3bTNCdDtjNmtjQE8qfCo+ZX5GKE1LWnw3O2JMdlJkcGkrRzFPUEI3''@;'; put 'put ''JFtwbW1tamNgVn5QT01rRDBBbnM/dVVFdipmMVJkTHU3KCZPZHJRUipSW2Z3MzNob3lFPn5yTU0qO1pTXkdwNWZqLFVRMl06OTd9dVpRLj54XXUuUEMrP3AvMmpofi41c1diSmMmaGtmeCRmdTdaS0pHQjtwd0pBMXUyRUYsUTxLdnYmeGJmMD9icH5aVXxGNDZzWTNTPj8/IUE0ZUVvVGR1SX1j''@;'; put 'put ''KWZMNTp+NXR1U2VqSnlkTGczW1lMbkpWYEkxbTNmI0BvM0w8Wz9UUFNKI2RIbTNBLCFlMjpWUzY3RnpYVmdXR2Y7YU9VXy9QIks5LG1UTlZGWyQ5P2h8V2RrRW9wdFooVTRMOHgsfmY6WWltUitwPl10QjU5VVNvX0ZJNEh4UDNWXS8oNUt+STZ8RnhiImokVHgjWHV9TEAoKkomNDBdd3VkR3Z2''@;'; put 'put ''a3BCTnJIKEdkZzVWKXtzIlA1MUJER2h0bC84Y0d8ZWdQJD1aODYkcVU9JnY3QigsRE4xNz8hYWlrfElNVzNgX0g5OGQ9bTU2QllyW3d9VS5kVjthODk9ZzpYbkhOYjc2e00rdk9eeUhLV1JeJXI6STsqbXh3UitdPzVDW35sPiRnYU0lPEdxLn5AYFlWTlNsPjVOPjVpNHcpYjpPNFBrJjtTfX19''@;'; put 'put ''SkM6cWxVbUBoczs/SWU8KmNKSkdWYW9hc0h0JmJQOmVYeEt3djxDUklYaE1nSzJ4XzxWcDdQa1ZuOV8mS09YLGxOMTxfWE1eYSt9LHA4TXBkek0kVnI0T1NXRFlPVVlGRStYU1NlWzVKREZrMWJ6VE5wdVQjLHxvLGRUNT95TG8xYDE3OUh2YlgvIXZXa2UzdmhDY1UkaHF6Sl4hJHY1PlskIWBy''@;'; put 'put ''K1QpRUMwUlZIVyFaMGFSektXKCh0aTZ5Yk87Z2NuTWg5ZDJ6WU1FaytCaGJGfjxvQ2FFUVdgWm5La0ZfMjw+K00/KDZ0dzhaUTBNTT9PUCxucTlwVTUjc1hYZEJ6RyY8Vj9kR1hTMEMrU0xgVFdgQ1R7ZmNIYiJhdisjfmAkPSt7eEg8US8yWjx9ekJ3MSVbUVo+VnExay5jLyFQTjxMUnVjZVMo''@;'; put 'put ''Xm5MaWI/Vj1mNEYyMyVSYD51OllKWmVAWlFRQF1wR15fSDV4a34obnZ7NzRYXzxrMj0+QGtpOCtNOmlqLitsVVldMzx4WlczQkpPLktGajo4dyE9MSFwVGtGZm9wa00hQnZEbmhXKWwqSWEoITcvSlIyeCQ9NlJuVFFieFIkaS4pWCZrSEB0XiFrdC4xP1MjciVxSTRyWmxjImhEMS9pTHh7a0cq''@;'; put 'put ''IVEiZE0+bmxbaF0kbjpbU31vUDU+LCJaV3I5IzNVcUp1VTk3ZFUmTTRIQy44ak48RSsyN0UzZmU9YGwoYlBCVSx7MjlhSUt3KDhHWi9kZytRQSYrKXUlI2Q+MipmTSN5IjcvPG8lais1Zi96ZGp8ITEsVGkrQ3RYNFcrQmVzdTBSRHhFRT5Jb1NbRGQ8SlkoJm1kTD83VXVVTiYkPGVqWDlZQzp8''@;'; put 'put ''eUcoZmA7SV4sP2glWipzNWQvQGluPFB0KWphUnQ+R1BxUUZuVSFrSnUzR1NddSp4bF5fZ1lScCR7QmJ0KDJBKSMyZ2dZKG1JRGFaIUxxWyR2ISE9M3cyXjEja2FuN0V1VyRPPmNJOVgjNH1lIjluKktKfTFURjxLN21he3FweS8zXVQoSGB+MURxez5gQi4lLjxAVDt+My9saSRHTChtLzxwT2xW''@;'; put 'put ''ZTRFRmQwKUB+NDpKNiFFaGQ1W3w7JStaPEQyQCMjMDdBdWFvR0hte0QzPUFVVUVEfnRURi5rUjgzPEY3b2EqMGI7Zzs+cTg0UzBrZiwwUCokKXkvPmleTiNePCQ+VSt1IUgzX3pMKlM1bHIkaDwpa1lOOSJkV3JtbkxWTip7b01WI21XdDFASHJaOV9WRzBnMVsyYnlZS0libCNUcHZDRzk/bTdV''@;'; put 'put ''ZVEkNkk6LHpYSn5FI1tkPHRFJGtRKnslUVppdzIuP2R3dTovTFhCMGB4ZyRRKS9KVW1EWVdXeFljbGs0cV1keTNpMSYxWyNESkppfFZHZDt8JmpOO3V3S31lN2BtRTtVPD8jI188JDkobCMqJV5JdF55bCQud3k8UGpePGRuXn5KO1hhODYvKEsqU3RHWFRfRVB6QU9mVTsrQWpxKjRNKXR8M01N''@;'; put 'put ''TDp8OX45PihjM3YxIXZDXzt0fTVKZjg1RlA4PyZqbl5iSlU3I2slfHRFK3ZyNEhpM3NWQlgjMXgiOUwzeVE/dzc/SHxaKHBaTDJtNkYxOSxfWWM/bmNYX1B2KFRKTnZxU1pgTkcjbCJ8U00kanA3V2tzX2ZSe0hVPEIiMzosclUzOmIqKHJ5TEYufWZYXkxAcTVzWDpwPlQ9c2daR2JXZmp2ZG92''@;'; put 'put ''dlhYMWdWaURRflkqeV5qeTU3Om1MSW9+VSRDeUd2dDJAM1pDSXBXaFlFOjM0QHRdeGAocDI7VzR+VDRVKVgvKjMrYj1uOFlTRyV9KnkldDVpL1QxWGFfO2cvM1BUJmZnSjV3RDloajFFfTFNcEIlL215MlhwP0NnLyNWeG1wZEhiIjRSNWpkLDA1d1ZvbSNfX3c/KUFbOEFbUE1hIz19SS5PO31E''@;'; put 'put ''cC9yKWAjLCJ+WlJ4IzAlK21dZXlIQ3QhLzM/anxlYSU3cylIMVhEVXArVl9WVz53UEVUUUokN3lXTlFBdXdZUyhHPU01ZlFPNl5nakk5c1NbeThteGlJYV9FPVVYQSpLblE5PVgoYyleM0F4R0BEanVPcT58W31ncypAIlFtcDVhKD5JcUNwKG02L35tbGFXSzwuWGo9ZiYiI1JsTGF1d2R2U0R9''@;'; put 'put ''Pm90YHlWUmZDOElrckNVeVpZJHBoeHszPy5pR01hekV9X3B5Wjg6bktyKG5Gb2Jba0gkfjtsIXxvaFlSdXc0d1osMk54PjV+MHB9K3lnbzMwNGg2WFZOYHZ3YjdmMW5fbWdacTdQdzJoTmtAVWdqRyVWPyVMbUR6UVtRUkhUNXBTclIzKnsudmt1PCYsPDs2XTU+e2d9VCtdP01ZOX5DWWJPRWxX''@;'; put 'put ''QDcjV3dXUUozJmklOVpJMSE1flJFeXRDNHpONU52O2xyQTRhSm9lO0VIQklDPGozIX5icWhZcjg/fGlhUi9wMmVwR0FMZmxJI2tiMlFHXX1VeUR0WDZyNUw6T3JBIkxQPig6XklkRClbcTZob3UhNyRoXnxLOnFhaG01cXNRZS8mKGclPjZIMV86a0U5O2t9VTVfO0N5dHxdMDNGIzFsaFlLV0x3''@;'; put 'put ''d0F4blp+bFNLNDgjemZoLFp0Tit0UUg7VihhPEojOk9IM3hKVGBMbkZVMktWQS5BSEtyOjZxWXYmQ1Z6PFtRRClEd3RHfGo0U3w9aGBTIz1SIiVrUz1OYTFjUGl0dTo4VGg7dWNnLCUhMTk+IWkuUzxGXUd1bVc/Qzt+PD1TT1ldQ2lzaSR7XUU1Vy55KnpEWGJJLzojIXAkVT1KbS9zfUZrNiVZ''@;'; put 'put ''UXJ9RnRkJjcreWZpMmQoaWZ5eWVeW2ldbCEjPF98PzphVH5iSHp8QDZORDNYXllUNG5+ejhrKzF0MyNSUnx6N3hoeUw5bVBOKkwjNVlTNGxWV1VSIkM2UzArR3BvU0hDVHZmNWMvO2tsWmtqZWkqYT94ZCk5T291KzZ1Z15YMFN8cj9KPkclJk5DMGhGU0BsOH1qd2BxfD84cjJYW1FmZ1tsYHo1''@;'; put 'put ''YTIiMkg/c2I8VXZsIzFgczNyPD5KWk0zUSImKyI/VUFqbEBnO3AvST1PNDtrUjM6eE1PSy5MLHQpcXVSTzd9I2wqNmVvMXBWNFRXMjFEd3NaQURyJW1uKUBsOFB8K0xFRU5RL1BkcD4sOUg5Qk9nXSZVdlUwMEJLPE9uK3VzZilze2p0b28+VXIje3Z4VzZeWGROOkV4Z2x7PyNzSiNtL0ROREhP''@;'; put 'put ''YEdhJDIpWn0lZCZ5bik8YTtNSFV8Un5EJVc9PU8zaVZuJV5Ya1F0NEg9eitidzU7fGBITTRWT30iMElTQVlfX0p3VHN1NWkvNWQlR317fmoiM2RPMkM+d1Vucnwla0RAW3I/SjE6IzlLXVFJMUZ2Oz50OlgyODdGUl9yfT1vZ0QkTipIZjJaLjNiYzw0TEtEV0gwQCR+Xk1pYlVRTDNTNCpibU1F''@;'; put 'put ''T0hmZjg3Izc8JE0vLiwuaXQwcEpgPz1tXms/SHRTVVNZNiomZlB8JV9YaDk7Sl5EQ0BNb1J5Z2RGeGtjRldxb1JUfF5DbnVkfmFHKTI2M0p9TWx6Z1pFSFAiL2JnW0REcHxZKXtOeG16Lyw9Q0BCK0xacX06VksmdlY+UmVrTFZ1MndFRDlWWHJ5JmAxcUg+I0JeXT0jb0xEYjJ0bitCPChhVkBI''@;'; put 'put ''VCRtVmM0SipxYVdIZTZSY0tjM2ppTEwpYFZVMmZqXjwkPXtQMDNsTVczLyEuQXNMOkt5RGhPMy5eWmgyOUNQN3pQUkd9fU9acXV4cE5QYVAqNmV0aVchaDJBZFNwd0U6c35LXU49UC9vSS5RNVl0OH5BfT85V0VPcUBjSEkpR05jazUyJVMoSGU+dWgoOTJ9TE5fbipaOyhobnZhRTNGKndPIV5r''@;'; put 'put ''NU9QSnYvdHxHSnpLbUl6NDFNWGokeG93W0BwZSUvY3RpUSxvXSxCYE89UkhjNSNJeHlFZ3dyWUFMbHN1cSNxKmopdFBQVko0aGdKaFBJMHIwTE99cSIwSCVtIyFyUn1PRFp5VnZQVXV2Nz5qMW09d0tQUSVmPVczWzZoZCpFZlsoR2FqVkRJWlhnSWE/STx1VVowcmZ2QyNHeyhXL2RPTFhkZiMw''@;'; put 'put ''MEY0aSRjXmQ1OXYlL1dlWVhwcURhXVJKKm1mTlt7V3UiZmVYVz8iWklqa31rUDVlWmRxI0c/WWEyZmJ4T2cpYVd4SnE2TXBbWj9bK0UyckkwblRsfWI6Ki46WVg4djNoYm9QWDFaXU5vKXQuNXA0UndfdilgJGg8fEdKOVpWcFFLY01YKVRzLmc8JiVVXmBnPXdDMz54eSpiVT5bcmNDVmlAYSor''@;'; put 'put ''eCFIOjFybXdHJTl9MSZRKSs4JU5IKVdwJERIUXBkTGAqNj8xOXAibkpwUG10InxUVCVRJShROnUuUy51QVtDUjN+TFNLfTVaa0EkZTNhO2BYMWV7QDklMT4zRGpEMktIWDk9Inc4RFkybXQ6NWNILGhATmU0JlZ0ZTMpYXVke1V8RyMiam1Cfm90R3wudS8sYUxsZ11ycmpUIyRCIWhkVUxaX0tH''@;'; put 'put ''WXQyRVNYbyZ2e0gvJStacnVOXlpEJlY5Mzs+akFpX0l9W1oiQCEjJWAhez4+TTh+UCw7TkQ2bXRtODlNVFN6MW8zKDlJZGdMe188VGgyYFI3MHRickNTfXAwd3BPWmJNV3pSLlpMbTkuaGFpOTJ+cSRbNnE6b1BXUyJ5KiFAclpCdHBqWGo3OyRZTFRvTiltS2UpfG17OlovX1tHaC9DLldtLFNW''@;'; put 'put ''bmtQLEUudSpDKWJBSCk6LjwweVg0TVI2WHBZTmM9VSs1YSZaLnZwIy4yJndOVls9PT8+Q2EuQVBUJGYycCt9S2ZsOTpwPylTVnw9UFRIfClqJTVVNzI/RFhmfihbIjRkamZdYT9dLkYzd1pxK2dCbjhhYWpIOHdLO0lbby5bckYrIlBJO2ZTXzJqIUY7WkVmUmlOckdBN0t1MCtOYlpMazYpTTht''@;'; put 'put ''JjIqalg+IUs9SHEjZS9OZG5IZkt+K1hiRCE3JCwhdStnPCVbZmFJKnV9a0lGbSUjckFnQi5JNVhAb2g4U20kaiFjfDVke2E0fFI/bj9ZZ0VULjp4K2JqOXkqVjhnMzg+Py42bEJnfjFdZlM5N2hBJFlRNVRJZCliL01ndHxXKTcuRFlfJjg2K3MqWkg3KGF5ZFlDRW43RTl5SEIvR3FKVWZvcj5Q''@;'; put 'put ''WU5wbmwpIUcmLlcuc2xwYktWL0doLnk5bDMpPjJtSWNRKSpJMFJYMXt9VUFtOCM1cXpaSGh+PntiRHdGMFBNMyx1RkExWCRPdTZGWzF+OHlUVm4rSm11LnRpcF5Oe1J1ejQ4Nlg6LDteIWssc2h2aGAjclo0eWRBbVZBSnVhSHp+N2wreEBRT3Q9d3p+ITt1cEo8WV5xanRUIyJacGZMIyFubFA9''@;'; put 'put ''SVd0QUdBKnd8d2Y6cGxTb3F+eT5VUEYmKFkvVGc+djUmUiVSZDNtXlcyJWlZVShRSjBXUHVtQ2M7dl5qQ01+L2s4I00iWSkpO2R9bSZZJj8kSElJcD5Gdk50MC99Ly9XUVNCJUxKY2xke0BBZ3hwX3l0Qj1lVzBGLnlyeTQ0Y3BMeF9JNT43bDgqc3NxMloweTdeNCspPGRGZVovXz1HYmloTTxE''@;'; put 'put ''aF9qQW53WTNxaW9dKGElb2NJSjp9VDYldDl4WllPfXxNbihRKnd5X21nNmtrUGRQaU4uXk8oajdmUDJCUENNSW9AS1MwQFN3PmpNVXN8WT43W1VJOz1yci5PZlsyK1hfdzNRTj9hRC9FZmc2RzIyeSMqOUloRzhRJl9YO2JnditGTTU4M1RJbURfVGovOSRNVCh4V0BiYVBuJEtAb2xfIUFjNXsq''@;'; put 'put ''clhoS2RlY1o2dGJRQypXTStbaHF1dEAwLzR9TjBvd2o+TSM6anpDRzowZzN6eDx6OjBOflhxbTA0VCEwVWY1NXIsVT5rOnIibnc7KGYyOnlYdnpkOmNkLl1AbmhiY1YzISIlM2JWQ0REe10qWGRrYGxXVk4wbVlDWG9rQT1BSEpOPkRyTkBAPk5hYypxT2wlbGV4eFF4W0wlI3VWZU1XanphYVlO''@;'; put 'put ''NHU2NChVbnRnVnd8dkUrKGc0QmdKWnhrNExKXU1WWzYsKHlpOVZ5XTxEPX5LWnA8cUJpNSQ7REFxQ1kjSFQ/MGM9QkxUWDVSckk5VlhXRXhyanZlYUhyTUQyMGc8bGsoSzI3cS8jM1hZeD4iWkhMWkN0LzshekEiez9XYnF2eE86UChETWFhUkJmJn40OkxUVWE3LzghJEdIaD9YUDtSez9QIUFU''@;'; put 'put ''XyYuTD56X3AqWU5peSs0ViU/YFE5YT51OG9JPjgkImx+WDJPIW14K0h+NCNCSGY2U0VWN104eGczTSVTOnlTQildXi4obkJxdWVlTUs9TD8+N19nJiU7NiRAUj1iRik2OlpzcGlLcisyTkd6TlBmczN+NmZvUHJCMVhUZEtPKmFYNTF3UFBEKW98WW9DWmYrfT88c0pmTnl3c05ycXk1YTFkKTpi''@;'; put 'put ''fm9ebHBdRUtSNTpvQkdkRXoob2BzcFJ2VClgfDxgT1VUMjU4Lms4YDprQmpdUGFxa1pkUHZhbCgvVFJOK1JUOTMydnl5fGJ2eShVcVhSI1RURk5GInRtfkV0aWgkLzRTKlEySmRWN34vYHlmKmk2YT9ySWFEQk0yKzM+fnlJIVBLPEdoWEIrPUlQM0VTKVtbXit5UzAiMEJJYDs3KVFdJSIyVSJ8''@;'; put 'put ''NDNFKlo6dFU7Z1dmd1ZYWWdVSmR7XV1Cb19MVUBmbHZiJWVKeD1URVU0dE1XOXJiJC51VCZ8YyRhWSRaR205Z3NVO1puXU5HLCRzVSY2O0t1cTs3WWZ4LnZ6OEk2X0ozTHthKykhVV88PGVYRGFKNnxIMVhPbipYUj4vaCtISF5BMExSIiV7PmdqYUl2JD50WmQyTUUhT3BLTXtCeDhXOThGYFcp''@;'; put 'put ''WTcvNWVJfS4mKlVvTnREd1F1dl5DQ11XKjwuKnNnZCNhUiljbDZ9OFVSal43VFYze1N3TU8jZTA9Yzh5QE1YekQ8aF9vaWVoIUs+Li83PmFrT0BhZzBMT2dAb2l1SjRsfUsuOHRlaShieHo0YyV9RjU7WVQodERDOmc+OGZaIVhhYXI6T3FHJE96cW9weVt3TTE/Kj0/W3laUkJ3NV8hKz0mdm13''@;'; put 'put ''fEBhJCZAN1tofGdSUU0vSmdEfUY0QkhBLywseC9SS20lVH4/MXRrSV1raywzLiN9OiwrYlBUc2B4amQ+dF9YI35ffWZaJCU8VyZXKzVeO1QxVHkrPV5gKiQ8KiEhUFZWfGplNHVobTB8L058SGlRRHhkSX1nUk1rWCZsS2d5THAlKHdSVkJxZkB4Rk81RXx3MjFMLlkhT1RBIS9lRXMmUUYyQltm''@;'; put 'put ''bzhud1suWGE1ck5lY1NFRVE7T1l1UWxEUD9SJDAxaylXIl5fSzl1cm5oYksyJioqUVJJJCt7JmhqdW5kWCJuXUxhbzdvPSt4SU14b0VqZltZI0tBQG9KfWozUnh5WGY8MnRCTm8xMDhLPmJZVDBoUCo3Xj9PLEV7YztTTlJJTyZUZUVqZkUiPkpNUlYsJl5KZmx4SWJnfD9DXmlgV0RtZHdhayw8''@;'; put 'put ''ZUciVWs8ZEc8NUowJkltZSFNZ2o/Pyt3aT0/V1dYMzAiV3B6WW9uS3NFT2s4L25CcTokV1dqVz0xfVZEZCFxejhOOj8mOG0sSykuI1ZXRi88VT9kImlFMX4zeEZ1OitWX3MmcGIyXXtDMnhfen5rSXt4bFQvejB5N1NgL1FxQn07NnM8Z0E7biE+RVJZRVE8NVNQbVIoQmxqcjxCQ2s+eSQzOmJi''@;'; put 'put ''bnZyN3thWiJSOmc2TiU5KFdlbzlrdTE9aWtRMj5KTnZfdH0rTl8mN1B0RWFoK3BsRWl5YmVhekM0X2csRi4seHxiWnh6cTpuVzNiIUtMZndGYWxyMkZxSkQlLnd1SylGYTFeTz9JTXwpdTw+TmlbOlA6Lm5xKiRlam1vMCMsfSR0dTdfUCEjOy98RzlhK3F6YFZfJixxUDtKYl4wN3ZxM1IoW3ki''@;'; put 'put ''YEIpUSloP2dyZHN+NmgpZnVXXi5eT213bHRNej5tXWFyQTJHXTw/LC5iZ2xRTnRCJkhQcHNvbVRjIWJ9dzlESFldK3YwUVUzL1kySHcvTTl+bkZoJW9bKj5zT19wd3JhPz9VNzN1ZFMuKVR5PEdmOzE6MDwlUDlGNGgsQChEJFk+RzIpaFpKaWgufl5kK1JiWyouZjQlOH1FM0Z5YkokQn1hdlhB''@;'; put 'put ''PzlkPE9ueE9ge3x+N3FOQXkvekI7LEtaNlAwb1pWRU9CRG8paGtfWVV7JFJeMGclcUxuTSRWeDNhSVguR3ElLEZQen1Za2xvPG4wXmZMNWxFNmhsRVhAQCtJMDd1X2E8OzEvailYdH5+SWxUTj5QLkJXamIxXThYTXhWXTBEZTAlcTpWY3ZGUEhkNlgkcTR7T3ojUEBbOXZwNys7OyMyPmZENW5y''@;'; put 'put ''MEVqZjJkPFgpdjVkTU1ZeXBubVIvUGRjTCZ9MG9mJEVjdV5jKm9KQHFYejBySlYpaTMhT2NDb3dwI1dnUi4kUzZofVZmOyFVZExPX1RBcEJRO1pTbl1gKTtzdDc9I1JnOHEifSJfMn14PFJHTFZiNTBIIUpJKUNyQyt0RkFWOWJUXiRZJk4yfX1tUG9XeVZQYiFuJWVGI3MvYD9RLjFaZllLMHVe''@;'; put 'put ''a31XX0UldVV9Py5AVEJ6KzorL0VMIm0ka3pQKWRSZX05VERLMjFJRHBEVWMmRHwiL0JOTTlFVEJ5cDV9XWBgJTU9Inl9fERsVDx9K34uVz9DX2ZkdTsqbjEwWCJ7ODd4TDdgUmZlMmhjX0p5JmJnVipWPnVDQ2IoOWw0NUF9YV5rXVQrV2k1KCovMnk4IyErX0Awd0J0WjJnWkdAeS9FIlNRNVBq''@;'; put 'put ''UlR1Pm4oOSVrOWJHSUd0W3s1MmxgeTNdQCRebGp2NklrKylvQFhgcmltN05kajBkMzN0dHZUWEJZSl1WVnZmKG94bjowLiRUKXFEUnxpUXltRyM2YXBkWS94PVNeWC5fZSJxclprNF82fiV0KVA/V2tfUzZNPXtZZFE6ZEdJWCVJQ1JMM3ZqT2ZEYmJZJWozb1k6cHRrSHM/PmgvPzByUzp0aU40''@;'; put 'put ''QmBtS3w3ZkZVS0k+TU1FJGJCSWMkfChGX2NeLzFYJE47MVBYP2dDPm8hdHZVWSt8UWIqe3BCXlF8aUhyeUpZJEFFOWNZYzYmM1l1WkQ4YFhWYUc7WXMoSzB0fFJTYmAqUCJqJm97PzdleXowPVBxXXg1YiwyLkple2k4c1VaKll2cnRpc3h9Wmd5fFJFakApUC9qI0l+bUM/WFNKLyFrM3UwNEVR''@;'; put 'put ''OnZCQyw8IkRXfTR5LzdxXmFRInlCdXBUcWhtMn1ScFRJSy5tfUVZK3F5LmZVMkdCQCpRR3xxYzI0IzA9QlUyVShSdjk7WXdVVXc9VXBraFs2TjE0PnBJdiFoLkVOLlsoSkd9IyJRS0JuVSVzTWpsPmAwel1lVnh6QWI1Kit0TzRnQDM2dltuXyxISSo3OWZbI3pQQiMyT3Y/dlkuKzAiRzBnbkRn''@;'; put 'put ''IV4hK3p7TyVLWlNvRSNmXV9RQiJjUHEsSnc9WURrMjRhb3gqMS9xSF1AOEBOR0d4M1E8aitUbjJMWFprSTRjWXJUWUtFd0kqX1QzKUVDeDQ7aXt4b2s1VEZZeEBwQjlFYG5ZSTQ1bytjSCUqR0RWdlhzI2RoakM5L0Z1eklLWXBiflcsTHNfQG1hSGxHanpxUWtxR3pfOkUwdGNqJVNNV3x1ISYm''@;'; put 'put ''M1hrUlcpXTRXayxKPjYiekZkKTpgaGFTP1tmY2ZQXTJMamQ2dEorRHE9O3pPcHx7SCp0Qy5iMERVOnMoJlJbTmh4djJmZ1IlVDF5NV5lO29ZOF97fWArdU55Wn1lWXtpQGc3WH1pJTl0PTZAfFtPSzY+dCRZQnMlbDlfM3MlbGRAeCxdZyw6PFRXal5tV0dYK0xteXtBR1U4YFh8MVFUPkhITzJn''@;'; put 'put ''PG49bTB0bGhabnU/cE5LSWtIRS88KXNDKS4/RmBLL3tXanZsNXc9OXVGT1N4LlRpWl5uVkc6RyYkSUU1QEJfWjZ0I1AveCZEKVJaZ0RpPVFvMXUuN3V9N1BqKTkrI3Z0bGo1ITB6NjdITU41KXY0KToseUZnWDFqUmxDaExgVXYwaEkwbU08a1pZSzluM2taNCIlQVpxKmAwKjUsQzJtfX0qflNv''@;'; put 'put ''LjwkfGd0VVlWfVl8fGVaNDs3LmtuSUVILiM2NntxenhrJXRKciNtVktaLCpqJUJ3S2trVVl8NHBRfDVmY0dwazZ2ZTJaSitRUW5iR1RIaWRjKCJQQjdSSiVib1UxYXRLRTQreD12dlV6ST83QSJEQjsiOWUpI0hka2tjUipiREVBLl5kM0UweUVoN2sqO1dCblJePEBUMzZVNWY/b1E2SXAwJHRe''@;'; put 'put ''Myw0W11nTzAyNGAqPUFdb0dhalQpTCUrT0FCbCglJjhtfl5SV2VXN3AjdmRUVl18YWI/UHhYcz5lbzEzZSJuMXAlbGh6ZGpMXn1iTyNuVUolLkd6NWw6N3ApJjdRRnR7RHBfcyouJjdzYF9HTnNoYFlrdDN+d35rbVQqSkprTnVvfC5AUUFyMEA5Z2tlJGs9PU9IWiNNTT53KFAxUEwkZmZ4RypE''@;'; put 'put ''dSxsP1RLPXw5eS84czE+e2hxdmpiTVtaXTZ8LzB7T3RqWzErY0BzYGtadyE7PzY4UVgjJmNkcDUpfks/ZVFTUEhpZShHemglQDdvJXRfQDtCbzZxMktpeSJUWkwvbllJIiVhL1lAMFY9Kl93QE97S0xlZHAmISFmeXJoNlltR0NCTSFRVyVoWm9gSDdCfCp9Ukk9aj8mZVE5ZHg0RjVvZ3Z+VEdn''@;'; put 'put ''cD9bRzImX3RXOSYoOVloMl87e1V8dD9IS283QWcpWC9yT3ljW2JZTGFyeHQ/Kn5zdSU8eD9gTFhAZjJ+P1syMEJVdjpea1gkaEYpTD4/KXpmKkJBdS5MLyhvLyFuYHpFYihVIjo0ZWJxUF5TbGYkIilpLmw8MXFbTjxoWjB8VE1TbEMzYkVwVE9Ee1dNXloweTRYSC5uSGtIIVNFbUNZdFFXbzd7''@;'; put 'put ''YE9YOSpPPyo3X2tDO2lXcSJeY3xEe3RaVyglPCI9cTpJJkxAYHZRKUkkZSo9Pmc6SkYlZiMzNVR+aCwzOTwmR1N5KXM0WVVFcSkzIWVlJlBqbks2UTNQZFdnSzxDamU0b1FBPyxDZk9wdE0vV1pmTyJIKFtjQlhSQ15NOiVTPSZYdl4/ZjxqTipkbkYoY3ZKNDozP1A7aXdrUyEvZDolSDhyM3ds''@;'; put 'put ''e0xrZWJ4SD1mY0JsPHNSW09KVjFmLFg9ejJgbVJ7NnVnezx8XzR3LHQqbStmTCx4Mm8jVH04PF1KIVk+QyEkNWZOR1EzV3FveyF0JnMwKDhKaU1nYHBTYUFCd2M8Nk11ejRKe1huLjhZM1hAZ01IV1lxImJWSGB5aTRjMSkhT3VoRXd2VzUyS2N1dVBhI1QuMTFvUSZdJWN1cXl1KW43Y3Vqc146''@;'; put 'put ''Iz9NZlR9XzBde1p7KSlGKHNIPlNmKVVAeT1NTVNOPldHc0lYO0NNU3N6cUkmeC4sWk9MTnlVXVNXRTcjekU8YXQ8RGV3ciwsPHJ2WnMsbn15fUg0VVcjbVVSU3Vybkx5cW1RZmUpKDhxUEs5Ui5EIkx2Kmt2YkJqJSt9LmVdJkBda2VXPz14dmxua0EzRX5Qfj5vUzVsdldIfFUwcDwmUU0hZTJG''@;'; put 'put ''JkNCUmQiTitTV3cwJitnQWRELksifk9SckRvVXpvTnxaNjgmTlY2PWAhcSUrXyVwTntjJk8wR10yUjljZGZMQUI/NDA2N0QmTixtR2YjYnIrR2pwfW5mS3pBOGxKeE03UXUuV2ose21KLjBKfnZxUGd7VVsrKSQmPyQ+bH5ocD48cGhlPHtnYn0qLH43YFd4SWBxQmlNa0JZKkl0USNVXWo6SUJT''@;'; put 'put ''VG59bElCajMwXzoqLlp4aWcoPHJSMk1QX3d6Szo5K1o+V2k2SkwubUl1Qkt5dCFAQ1kzZVRLWk0ucnxxQy8oeSlnRSErbXJSfEFEOjV4RFMqZ21IfDRYPGIxazxWempqQTpIZGFUJkwlRHkhMig6MHhQZE4+PGQ8ZWFgcUdSJElPOEI5PnByRWc/bS8zSWpXSHRlPEl3bEN9PWNheEIod35bcjNq''@;'; put 'put ''OjZ5Qj5MKnR8XmklNWxZMz9yPmowIjRyXW1HIn1CRTV6cU9tM3htek17UWoqO2VHdm1TSEIiJHFyNn1Yb0J8WTtZOXkiXVE1RkVsNT8xdXdePSFBZFNeWjdQQ2BYbFBuZ3w2N099VmJ8Yy4oMDUqZSs8RU5Pc0A3cCkoPFEzOz4qdUl+OkQ9b0RZbVhnWW08RDFVMGIhYSQuP1hxb31AJnNGUV1y''@;'; put 'put ''Qm9aeSNzPntUazR5ci4wP21ATHc4OzJSail4ZEFqI182LiNjNkJfNyQ4RDUifWBlZmdLL2QldT9tY25GcnZVd1RFMXBsflhGIV9xNjlyNHU+MWpFcClSVTouWFJuOzRSPzlAM3I3Ml50MEJrXz4pbTZSLEgjLDlEO0YzL2AmZVYmPnZELGltalpTVDIpZV0yO1dHUEJPTHVyUiMyIi4jW3xVNjdg''@;'; put 'put ''Nn1XSlUqSnZ9WSoqa2hMWXFGQiE3eixKTzJYZUVJYiVOLHxldGlEPHciTDAhW3VyIjAwNXZlcmxHKEIhRk0xdl4xeTFvNHwsaDJYPGAjN3Jyb3J1YD05TXdCRytiMW0wUiQoNSp4dF85UD9YZVAkdDlea2BkRTtFcl4+SWhIO2dQT25SRFU3cldiZCFmZyxDKUZFNFk+aTJoX1pPQjJZe003VS4l''@;'; put 'put ''QCp3MjUrO1YjLj5sNkU0UzVkb2RqLE5fM313cyQoZntJOT1FKV52SVBCKkVbejZrLEBhe0VldGomNmloU2BYckdVLjlFW2Y0cFRAYF5GbHFMOChmSDA8ZCJDeWdpPVVGbWBDNFJJODc7cz53bmh1QTJ2cVcqRGdJSXp3QXdnP3olfnRzKTdMNzI2U0hRRSh8T0l8Rm9EKzteUF9qTShzaCRuVkAo''@;'; put 'put ''KCxYS1I3MUxCV3VAR2ptcG5FfW45Znw+aX18NjdMbmI0RDYjYztuT0dVOzpUeV86akNiPDY2Kis1fWJJYHgxVWsqX0kmTHJ5djdeR0VzKTpUOmwxM2o1KSl0VDMpUTNtZyFXNi9lU1F3NSx9SjwqOXIjIz9vSG8rWHIrQEpbS2ZsMjk/RVhZXzBEXTEscn5oOXNvTjh0Rnk1VW9daEc6U3puMHh2''@;'; put 'put ''eFZbcypOJCFmMUNUYDJjKlEoLjRSe3VHd2pENXF1Izg8dWpPWkB6cyRYLFUpMFsxQS5aZnxibCpwQ1ldLmwuPGZnPXxMUiZ0UTkoYGNRZCVfTiV9ODlEWFpNd0AzJn4oUyNxLHlsT3N0aDZnNUs2OUJjeVRkOSo0fS9AUl85ZyFLOHA4eSNncDNFZG43amkrKn51aF8kOGBxT1o4P2o2d2cuUCFv''@;'; put 'put ''N3JCaFReLHt4Un4lSm4pd0FLLytKWHsrZXllbytBTmJuVE9YVj1VUFdyQ2g1dzQ7JF0sZXBxTWpCIlJPSG1HKkI8TTxeLl1uO3trOHB+ZjRYMzVEIltuRF9MIUc2Q0tbcXZlMkFrNjJLNGJALj5dcXBbbih0JF9VK3E1NGxlV15+VUVaaT93Zj1WWTAkc197czgwS2RIOSx1ITU8OCNdfD1dKzVJ''@;'; put 'put ''RiY6Jlk4e1F8QmxDK203bTpDLyJfRFhVSUpXS2UzPV9ORjVGOWJYNjpmX25ZWk5fOiYoZndnZFcyT3IvJXQ6Pn5RSi9KXyRUQSlXYSw0amReNCY/NnltTWZaSmcjbGRra2o6fGM9blVXfUFAeklfOHtJcEx6MVRDZTU/IUxjdjJ7fUV3XTJyZHo/fnpAIVAuaWl2PEp7bEIkYEA1emRucztEfXsj''@;'; put 'put ''e11DM2tZR2ZDMXJqUzlqMSVXSi4xY0UiWDk3b3hKa1NQTE9gQHo/JWpAciNlRiRoVVE9Ii5MVCt0WWVyP0pIKUMyQTM9cFchd0w2eDZ0dn5xMEw3X3khdH5VW2M3PkJJZk0+cElbUUwhTX1WK2k2Kk1wYisve2lbQDt8LnxQPipnTE5QaUUiS2dBJSpHdDVCfXIxRTBtcTFsWTJDMTxtdWc1ZSoo''@;'; put 'put ''V0VgMHY4Um16KWZOY0NgaE1CQF4lY3AlKDA9Nm9SVmBST29JTXVbKC8ycTJ3VV5QMnw2eGMpdkg/aDp6MCxhWTNqfV8sQnJicEpPImEvV3h+NXpIVH1kTWlbe3lvcUB4cGddOmF8ZVZ3K0VKfjFWWEtLImE1PnRzNWNVWVRzUTN2LyUyKmQpe092LEgsSWZudixve1hvJE9VRXVfXno8TUlWQDgi''@;'; put 'put ''TlhXQ3M9LzBVMWJMNDs/I28kbmk7QTl5eTw2ZnhRPDpOaklkaD08UGtKLE8kWFNrWEpbIlYme2EjO1M5TElUajI5YHwpNT5HUH49YEdjQWhNTDo7cDs+eXI7NyRVKDUpMztJSVo3Q0JpNmdyelJhPj0jO0F5RVZCNU9WPktMdXppQnFVK1YqV0J+MUdQTm85ejw0Mm1UfVM7Q0NgQDBMPjpAeiV5''@;'; put 'put ''RzZXOy5dLjxMZE4hKX1pdUJWVzRpJHJwbGddczkyMXFgOT84KWNFZlpeWjImTilWQSJ1e3J1M2M3RTZyIS86JFlOVDhOPD5FTUUpdkZHSSE9Zi40ITUlTHx4QTJJdzVscE4/UHk5XlZrPWs5b25tPWxMUEBjQEdFRnIkV05jTzB3L0p5OmlDS0ZSa10hYWgqKTkhKlNWW1A6eExSIjFlI0JKQUx0''@;'; put 'put ''dDY7bltTTTspZ3ZKM25TNT9ZKEpiSFAuQixOV217TyNbODgxK1opRTZ0TFlkR2hHUC8selUxPUc+R3ZJdXlgNF1vTyh7OEpLOHRLPDRhS2AhLCQ9REBGUm1CfDQrWFFBfCwzKj5sYDlhdG45Qz1pOHwzbChVIUwrakNvSzhRcV10VEtOY2lAYUA/Ky8kaC4+eHB4YXNyRnF8Y0lSMSFSUz4iUCNb''@;'; put 'put ''PC9tbXBCaE1qKmhXfjkyYWpDRGNST0oxPHRXSyF1YG94NnMyKDBNaUcyMmRKSEdjQCw5JXpPTFRWKmY8bihSc25zRV1GUjRQZG8xOWl6JT14Tj8pZnMsL2Q2WyZINmV7X1NUKGdEQXJ7aHUrOmNIcHdnT2UrXysrdnVic1ZFY1BMeVl+JkdXK0ZFfU93TS4wfGg+Z31gaG9Zem1zdShyWitvITB1''@;'; put 'put ''UTROIU5JUFg6WzBbSj1DLkVJe1kpbTdoUXRaW0JeYngxWF5OSFY9P292dHVDJSF+ME0sVCsyfn5rLll9WXlfODFVTnxDQDRHZlF4fE0zYkBZPzd+YDI5aXYlKjQ/P2toQGosTkcmZXFZZ2FmJVspPzw8UWFlRSk/W3Z2Z0tacktRVSxgUTFQcCRrUFQ+YEpqdFI+XmZ5WmlHWUVBdCxONnhNWy44''@;'; put 'put ''UHVVZmdPVDdVTmlBeWk8Pi8mbGp1aEB3W2FOTGN+fCZFY25We0xeUXFMQEZ9RSR4MDd2IUEkUUgmQGZdUSRxMXp+UTBxWWhLXkZTKmpFcjI7QzJlL1UyKTxqRSEvZHJTel5OYko0LEhwVWR4aC8+K3ZUXWpuX3piQTlNdz9XRFBldG5WKnUoWFVEX3l4KzNdcltkVFc4Z2UpaTlnUS41UDlhTT4j''@;'; put 'put ''Skk3YXJjNExAQXsidC4ven1uOUJKO2psZkJsLDZRSFglXXZeWUtKVDw7UHtkfSMvNk0jZDZfYV1Ka1lvT3VSeGlJN3NmKHZzPSJGa3k4M10zTGk8QnB9WkkzY0p4fFZWSTYqVS9bNTZJOXh3TntlX2MuQVkiVkgpV1F8Ql0sfTxJQnh+MDFweSJdfXcmQnNoWE55NGUzN2VRaHJDZzZHSyZGLktl''@;'; put 'put ''P3w3JVorKnBvRTxQdG9ZSU4yWDw9PEJ6SldgMWwvYkxXNCt1QVg+TWRJZjs/bjBaV0dZdmdedSN2YD93TDRoXnMsYXgoVlo6WF1Td2wmXXk/RH1DcWgsZGx1LmEvL0ZiWnQpaUt3LiRIRF57SV8uUD0zNVhub2RUaEYoSzEzSilrVD9XSEhLMmthaH5tRnRkdlZJNz0kfkkoNVFbfnRdW0dAJTJD''@;'; put 'put ''Si4qNmBaPmRvZTksXWM+XXh6fW0sbz4/cDM/K2cmTHRULi9+PT1WIXcye29yRGpUYksweX5iTFUqR31kYmpEWnY0NUtMVV5iYWtBZTBnInJAVjlkUEcjK1BKRDVkb2AoW28+RCtxSzR3S2xUKWFNSi9nZjVFc11XSCEjZFl5JiRieylBOjhzWUU6OnRPfitYWWUoP09HVChVUHxqZXxjUVF3KTVu''@;'; put 'put ''XXl1T3chVGF9eCNMZ0NRUzUhbW1AJE0yIkZyTXFvLFRtJGt0UTt3ZHNTUnUwX2psXSFsdVJSZUdwSFJjOXI1YV8zKV42ZD1ub2k9VnhSJHZWOD1GYGtkPj1mcltdYjQ7QERlKzw+LytwZEAueVczWV9vZTw4MHxMQ305ZHcrW0JUfG1Ee0JjP3t7c1JITVIuQkxIcCZtZkpuJkUuJkd6JGl1clBz''@;'; put 'put ''dH5bJnhadHl2PVlzLlp4bWpYbytxYkxPd3NDZnVJYTwoemp7YlpjYU5wLkpnOCZWbCJDQTQ7OTZHWTVmJCx4dGYlWmNAJTokWDgmJDljfCUyWk9NaVMlaStvWXgzIjReVmIvK3I0SHp8c2ZlUXVlbVhVRWt9ZzNld2RpQytLQmkrV3htSGZSaGUiJlQ3U11vfDRwVCFCN1d1O0N2Pld2ZnR2QDpQ''@;'; put 'put ''fWZUY3loIlRXR0ZqYF4peThVeXFuWkpQX2VvKFF5bjckNjskKyE/ZXJuTnlNVWAlXjk7JGAvUyg3a2U6THw/QyJSdCkiMzpgaHc8RVg4emNzX2U/RWkoY3A5YyVTW3pqRVl4eXwwTHUhOHA1PnRwMyJjWlVZZWYycGIxKl00KkIpRTVzT1IpQ19MSU1Icj93SGZtenl8U14+c15AUF9JYW16Wjs1''@;'; put 'put ''bSNudF8xJHVsWHVaeih0Zit7SUk4cV9vMy5KWFsmRVd1ZU16X2dvRzxARVE1amVGLF9pI2dYeSg2NTF0I2srQlM1a2Qjajtbdm4hMFVDJlMwUlU0NTw5YGdNbEd1WkRxYzIpNDkoW1E9M1dGaCt0aXRmfnd+W3A/d1BrUz03SF1fT0JSV0R3IUZYRGF9bVpzVF19TzE2dmNmIVQsLCFlfCUwaGBY''@;'; put 'put ''SSopeGI3TWxoU0U4dUYsNCM4QTppTTtiW1dsSz1AcDZZcn1dSk1bTWI5OE4yZVt1QkRBSFQ8VmFoSn03K3p0V1BwKWhkaC4sVG1rRE5LclUiOngkSnFgTV1pdUBgW08ydUwseEREMWsmS0xjKD0uQkRkV1VMUy4lblRmeDtae3A7fUp4IVltIjVOcEQoWT4/aHhPWG84TFIxN05nNWsjaSJxIXh+''@;'; put 'put ''allvZiU3X3UiY3B5Sz5pdD1RKjV1PWlzZG9fcjt5SEFSPUlzX3ZLRy56bSFuc255UVs3cDYjdkdgRHUzQUFGbmczUmhQbW1TYUd3LERQbGorO2wjY05JUS90KWd3QT1QQC4wfXFqYCRqbyIzVy5iZHoxUCMoQjk9UXpvQihnOSQuXnA1LltVdSh8emVvQGJLLn0qTyRmcTkpUWEmZH14RCshLiMz''@;'; put 'put ''T2daelQ4aSFWSl9JNSp1JXc7MnpUcixsbEYjKm9nWmJhLmI0aTVLQygsX3pRfiMvXk1FX11WV2g6bCNyPys1LkE+XzUiKnxYMDBNdWA1JXw5PlNZanhPJFd2MWZKfUMsM3RQd2w9L3xjPENIfEA8IzB6bVYreUFWTz5Qc09INixBT2ozSFFVQj9rIlczW1FgXy9QPT95MkBBfmE4QXBYOFk9UTpI''@;'; put 'put ''VU5APCJiM2o0dXFvN0wuLlE0REt8fmxFTVk2d2I0bTE6OzciRU17XXVWa21IY019WUk6RiZMfkNeXixhKzBJbXhtOFZtV1Z4PTNxRjNtLiolQUVwSVszKWBMTUhYSGgxaUU/Y0d9dV1fIVckfWNvYC52LDFsRWlvbk9PQ3E1bjF+Pj5gJXdQPWd0P2RsXm5lfnFwS0JMKEI/JWZ+PnZQcT84WXlp''@;'; put 'put ''R0h5ZEdoQkwpMFQpPEVBRWV4dTR0LjRTY1JjcSQkayMvdjVGQmFKVDZXLkc7aWlVOXs0Ki8sZCErISQ5eihiQ3Q4eHtgOVJpRnczaTg0Mm8pWkhDUXdJNj06MXhoT29kZ3REXmAyQiUwKFR5I2lCUCpsT1IsdEImW0R0WVByYClUdC8wPilZNzQ6TGosbjNYeypOLkkuOUs+Rmg0fGVda21lbEc0''@;'; put 'put ''Y3BMPHNPOklHRUguemVYdWRTajE1PjZJLDRJdzg6QlRbO09JRTFCeTk1QG5pQ0NNJnw2UjN3SE1vNTBLWD5lMUJEWTg+IiZDWXFDQiMjQ31GVDRvQDhMM3QlQUo8VEFVdiFvO0guNHFWJWplIW1uSndgfUYxODk5MlQpUE9RPGFSZSE3IT9OcFpYITRbPnUwTDJ1JUNJJXolZlJAOSpBTnNXVkF6''@;'; put 'put ''IzBqSjElQ0BmITo1JihdWW1pSjFpTnt7R1ZQVE8lfSlEPV5MQHxweiVkMyg6dnl9UlNUQSYhWnNIfiRlZ2Ihek9zUCFldEA5T0ZsTEJZPmgseFFaKzxNPVp8WDFLNGhmWm47dHk5M0l+T01gP0Q+WXxKY1lFKVhiUntiamlESWhtaihtb0V7T11Za2RuQloxSzp4Q0xMclBARXQ3Plh0NnlqTUFl''@;'; put 'put ''Q3R4XVp3IlBQQ0JbX304d3lqU3dVfmFCUWM1RyNdaFN0bUdiVDZKflJQNTdRT0ZdciY7aVlgZ3JvMjBaaVQjfGN0IjFmVylBLks9cHRaNEh2S00iPEdOeypUc0VqcSUobmlsU053JDBtZD5YazM9MU1jXkVYbThUJF0zPlhAJlVNbnUxdTRSKTpUIUcmRXdLYUUpIk9mQjcwdkFATExIVlNsbFMk''@;'; put 'put ''cF5GLmksPHIwPW5pMl0zPmFseCppNXM8Wj8yKV0obm9NXUhZa0tiNDpzI2kqV2RReDBpa2ptIS5lP0RyPn1FVXgufH57MntNYiVkc1I+R14qZ2glNjk3Ni9tVSYhNXI4UCFaTlpYby4sbl5JVT1PRGM8aE9PQlYxXk1tMEB5QyxYezBZJE0lWzFCU2xdVS5wNE5yejUhckZmbn5eUEtuSkpgODgx''@;'; put 'put ''WDUse2xQOSEyazNTXmo8Rk9kTGRgYmcrQmMrLHU6eD19cnopSEhMSS43LEdfeGhKOGZVNCRKaVhORV82c05nako8ckYkY2IleTBRZH0oVi4xZWNZPjRsajNFUj42fERbLjRZMWE5S11NU1REbS9ZQ1AieGl1TnJPNj4lJX5fTkpWU0lHZVV7bShKYV0qemAhO2k+WStUYTEyPz9RXmVlaUg0TSF2''@;'; put 'put ''LmRVN2l0O3lRMkt2Xjd1RE1sRy5TJlR8THpoWE5lMXgzK2shXlB7MDAxdzh7PWFtbCVScWlMZypDPHlSYz44VHRGLjVoZkFDancxMkMzd3o1Y2FwO3k+YWhzaUx8cGVSLi81blZZQEJEN1szV25BRVdwJkVFfTU1K2QsU0BCMS5JJlg0PlF3W2l6R25SQ35HNjU2SXJ9QXIlKVtOYy5+LnZqODA4''@;'; put 'put ''YjNDP0doVjJ+IU90XltGdnJgZ1ZgZTVxMyNZRj00fSlDZHw6LHBuQmk1dm5+KEtQN2BsT3lJYCJLe014bTR3LD5lSVVXRkxPKTg+YFZdcHsmbiElUTQmeSRgdUBLPk03R2F8a24jdVZfWS85VnBbb0tRVU8wRlshOz06NFs8REglTTNbL3Q0JDdWVCFjTzVdLHw0fGNaQH0qdk5YRUFVLEZ2L2xW''@;'; put 'put ''Umtnd1hxTEhJU1t0c01oYDFMMS80VDkrcGtYMjYwOillZyElQVlFJSZ0c35JMiZrKyouUEhCTjtLfko8X3w+UzckT1c/bVc8fVM1JTxKd0wuSm0kclRnV20kTDtXKDhfcVtubmZEbCxddnJmSml3NVorLmtuKUw6VllIeEQzW2t2Ky5fMVhHZEYsTGhoNStldUNiWShZY2R4Sm1HXTtvcEB6ODIm''@;'; put 'put ''TXh6NDQ+Jns/LCY+Jlh+NUJgSz9Pe0RmbEB2OT9vL1VjT0drVkQqcEl2cFRASitdIWFFemhJNE00YGptVDRMMDZYXUc2Im5iZWhOcVBQJWo7W3VCNGpVKERhS1tuRndzdHFwQCxramsmZSEhWTdFSUdFcVNGOFtdVG1GdFc5W1shKm5AOHNqaDo1c1VXMnZZWnBLTHE7IkBafFJIT1R6RyN0WG1d''@;'; put 'put ''UT0/fUBkVj5bcXhYRXdwbS4ofHFrOyFXVzU0KFJpfStFPSNZfDZibUs6SlUkZWJPR1ZsR05YZ0JwVyZ5OUhJS1UxfXxjR08/ci9fbzJCOFIlKzMqP259Xj5ldkd+c3JecTJJLGpmMU5HSWFPLy9ONEVwOFg/bUl3Jnw1RmkkMV8rbFA+K2RJWExoanlGSSlCQFl4K3xrWHdYYi4jNkc7I0difT1Z''@;'; put 'put ''KjZ5Y08leXhodGo0NndIaEMvRHlIMlYyc1t7U3dgay9FKSF7WVtCSS9PXVtkYzVaLFM8WUhCTT4hQEoyeSUlUkx6Pio6JkBQMnZGK2hWWGhGdF0kfkcrWUwzd1lDajVhQix2JGQvZHJ2aTBrO1ZLUlNVLyYqTXA4Tyo1VjdTLlYrZnJGfH0hNjp3djMrZUIkR0pUOjciSSJTTzJZOUg3M2RoYzlX''@;'; put 'put ''MGRldz1oL3J0X0grN24xSGFZOmA/bT9CekVuKCNsXUt2NjxMZWYkJkU8bV5XMEEkemlwWHdzWERDdW5jWX5NUXNlTy86WFtbW3JEZHx+I3xMdkozQHw/UFI7YV5CeDs2cWlfKVdRRmZzfXNWSkZsVnZyWVZyXyp1SlJZPCM3ZG0uXjI1JjJAUXBbRGBJZzBlSFZYKFAwOU1VI25FbTI9eixOPjtb''@;'; put 'put ''dlAzdTh0R1E0aW06UT57a1hdTGtmSCZwQyhoaSlne0svLmYlcixySHtqP0F1PTkpKyIzcWV7K3tkeCtkXzladU9VMilCQHhQdj9gKHhXXTwzKX4pe2RmVnJKaHheUyxzMzNqMDdAdnR3WlNucktUW2tkPH5GYEddc0dWemc9aSxqfG5maTg6ejJjUXp3PkRpVyxwNitmT2Q6cmcpfjFKYlZUaE88''@;'; put 'put ''KlpNQGtpW0ckfTR0dnh+Km5gdTJuPk49T2M1PlVrfkRQcy4xWl0zRUAjfCtASyg8VVIlR2xaXWxzeD1KaUZjOyYibk44WSJeSHhvY35QaHA1V2I4PXA4Qiw6Pj5CN208aHZ6fT1EPVQsd35oQ2lNbm14b3NJbmI/c35vOTl5O21FckFtdUhHcTp4QDkiTllGIlpTMSlZPiU4IVNaQUs4MFJpKmFu''@;'; put 'put ''c2UuSSpBcjBCajE/TEosLEM0fmkydksuMUZtKnByWXI/ZlI6XkwxNndyK3FIZ31vPixIJUE+azAqVipQJGZMfX5vRE9bejMlYDNmJCk5TDRXUWMxaGNNek5qWX0uTWZHSlMyMkgmVD1LPn1jdS9rXTRTNmFFd3YvVStFZl1xK140fnIjc0hmSEVBPUpVZ1FDVihBInRVbWg/aXJLPzVdLytdXXcj''@;'; put 'put ''Z3cuRkk3QUdMLCVpND5Hb2klM0ZOW3MxQj4/JF0ma1tfKCQsb1taKFB4O3QybnZEMTl1XlJ5JCh9YmZbSmZ7dTpNejZHSDAxODZOUztVPC51Q29RbClFNCVgN1M4Xz8zbTVfLis/QyZROyk4NjoicixkZW83cDB+LFkuZ0tpKDNXbisue2lYeG5IaUJYWE51e2U0KzpkPUl7V09xX1h1ezxOZFtz''@;'; put 'put ''VGl9a2dDXV0jQjI4RE91TGkiQipoJGF9TV9UMkZiSHg4MjtybUBhVCMsbSVAMC4yJDlkVUFHNmkyT0AkfS5vUUh+QSZRY01CSmVJWy8+ZFBdeG1SZTtdPjkoRnojby50Jm9vSkIvZ0Y+I3FeV2VpRF9Ve1clIVg/S20vT3AvTik+VEd9MDVUYTBgUStAUyQoQFF4Oyp3QlYoc0BmLyR2Mk5ObGtR''@;'; put 'put ''VHpGI3d8RUZDb3E7NFRWN05NfGV8bUdMVSV7cGZ1Yi8pKlp0OXVjajVgVW1lcTNtOW9KP1JOeTc+Nm80KlpUMzpKMVo1e3JSe3B+eGRmXlF1cndhLDdgQzZPOz49fCw+YCVHRT5qZCxzTH5aTiQxWVZUOWxHeWkoITlMPTZSSjF8MEZieGA+ZDQ1MXQ+MlNXXjFqQ3g0ZXdZdjE4OVo+L350JX1Q''@;'; put 'put ''O2MwLj4yc0FUS2tkXzxDT3xZPiNgSUguMSkpOXl0UmkwO1BYcC9JWzUwdCJNN2Z2bUE3eioyK2F8LGpTN09iNyhfJl1kNlptPStWckdwWEh3e2RKPF11TWlxak9mQ1hZQH45U2Nban5LKDU0OSVIXyxRbHklYnw6Q2Q1T18mKW81QUBsMVRddlFmdj9bbjA7cjczbFlBc2ljL01EKiltVXd4Sm5C''@;'; put 'put ''KWw7Lkw/fX43Om0heTc7fCZPPWw/YGx4UiZnRzBwKz9iVikiXXAjQ2JmOm43X10mbD1+eD40dz1DT2Nrb2hwQlpRSn41cj44Rmd9bT8xUGpDREB5RkhfRlQpOWkmeWJnaVsvMjt7KENlKVlaKzEyVkImWGcpejkzX1VUdngyRmEjKSgybm9WPCZ4QlpKekR2Q2Z1KEwpP2xpQlZiNyYxXjAwSnt5''@;'; put 'put ''PVtNdjokImx+KmFpezR9Q3dWZUspRmxCeyR8eFM0Iyl8c2IuNGtZKyM5JXkoWkd4V3J1MDR0RVRlcE5ndENXdihTe2l6KCtPNzBHLFNfPTshY1AxWkUlazduZkpnXjB6aHBkdGkjRFF8QGdXQlVIeWtGekk4I0p0T2Jhd0RPTWphRixYfSQ5SjN6TjQvKi9QYztUQlViYiRLO0VOPU5XIjokakd0''@;'; put 'put ''c3R7KF02N2czWVVIPD11QWhDSXd2bWM9PiE1Nm88YnhdM1VKZS9bS2h7SWZXZ0p3Vl5zTmEhI1ZacjpmNE1XbixlSnZGRVh+dnd3fVcyZ3Z7XXoxNyUpWXYpZnFXWipSLHl0TCU8LDg4LFVdcjRfMF9YKl4kOnt8MF5ab34xM21rV1NRQltqNXcoP3cyTmskZ3liZ0Usdm4pTkBFNCl0WUpFQkE/''@;'; put 'put ''VD0+JEZzLz8xTltLKDtvPyl6X01GLyRVaFA4bTlYK19jL2VAMTYkQ3NZMG9fJklDaixoP1J2RGdRPyV7QyU3TnVhelhnWHpTNW9jMzVEIVhmOzh+RjEwTWBPKjo6IVYlOW0ue0YkZ1YmTEdyWy5STjs3dFRCYHM2VVduRl0rVk0se3BfYUo+UzBvPDd7YXVlZ2wyN0Nlb0I+RFpuQExNQn0/d1Br''@;'; put 'put ''PkQ4diZWIX0paEpIP3VQQWZ2UVRoWV8xdis5fG1Jc31Ha1cuejM3T2wlLyE8ZF46PFg1KnMjQDRsZCUhc0QuWkltWTN7UiRaV1NyNk9SZyxqXSIhViU1UFcpZ3Q1XzVBTzpGWyshcVBSIT1yUzY6Lm1oNk4kSX0rKTgxakdyV3dYSH5bIy9KOUArQWEvU0Z+V1dETTNdVEZOKFEhKGJAdkl8VlM7''@;'; put 'put ''L3ZvVl9+WHorZEQ8NVl2dk1lPl4pRiwlTFc/NTk0fSsuI2BLN1lgeVBbfF42ZjAwaDI1TGZNMlt3dWYxSFFoXWZpZCQ7UTg1PWA1ZmZKNFs0SDFxYzR0bj40MTVVbmBqbn0hYHhJTkl1SzckQSsjdFU5dmE0MWVMdHcse2lOcCtkcEgvM0BPLnRiQyozdGFSbGZdRHt9JSovQS46IyVdIjlTdGMo''@;'; put 'put ''Kig8OHA7eXxJMUBlOElzQlVORHdRbkhgcTdAeEheLl1gWW0rOUwldVFfUyU6WHJDOlQ5JVo0NzIpU3BWW2VHLzhVPDg8TXd7TiNJSSxlZVBEMGV5QmlxVHwrYiV7Ymd1LyEsX2U1QnoyPUZWZUh2T0t+bmE6VDVEIXxTVkkqUnIxY0c8ITg6W0EvODlXInwzOnZ5RXF+I3p7NWAuQXdmdjJGKlR6''@;'; put 'put ''Y0lqcXxKW1l1fUJaPFRpayssJW5ne2xNaiM6UGZAITtlUWY0LzghP2IyVmdDclhrdT5SXWo/NngmfTBmVV5wU3haeixwVlBDOz5xTD05Q35DemImYGplOEtEYj1oO0UuXWQ/UmZqMXtQd0hIa1ZTVXpGZyZqPyFvV01zdzt7QmNkfTV9IzZkaypCbXM2IXFAfUxsUG8kdkN1LiwzfkBsKXA5aV4+''@;'; put 'put ''NDpjZjwwPHo6eEIqZFZyT3BkeWMpNTJHdDd8fTl3cj89YjxFc1lIUlhlN0QhdFk0aCZaVTtYUGhgNno7TTh6YDk0RCZKOjFsPms8ITNtb1lTIVYyLjxbS3lgMzlIdXZkJXg8QixyejgiLlh7WzpVQipvKSYkOXo4I3xKcHpyfEM8UChSJGNmTXBMO2FHVTtVYjkrZi9ZM3hDdUlPTDIzWjNrTVlb''@;'; put 'put ''LmkrIno/LGR4b2tbMzNYPWZCPkxYITFDOVpRQSlBLGxxVkJ8OC4wcnFSYEdnNWh6UV1DQV53V19ZX2AzPEI7eitjMn1WMCpZYks9fGJVSCtIPiVaJVc/VjJuWWl6cmhuQ1pqIWtBcV11Zm4rdTNwKXshWUdRVXhLbG9iT05lLHRuNHt5WXJkYzI2fVBlJkUiN2BCZkUlMFQ9MF5zRnxjW0hmSERj''@;'; put 'put ''T30xPXg2fWtgalhmbkhmRUw5ZDBaT2w4KF0ybTZxTlpmOnxIQzpxOWE6TmwjZyxjZmgjJiw2XyNSLilsX2loMlc8MjYqVHZkLHdtWSVDfFFMQF42QFNZVmBPLE1pLjN7ME1HY09YQHxlM1hYd1gxNWgoVE89fTdiM21FZURvbCZTby58XjJUKmMkUjAxO2c+Zy5DW09LZj4oejNgViQpbnpuRzx8''@;'; put 'put ''QyEyOD1rO1RCUz0uNns9Jjk4bzhUNm5vSzVDcT40cjhUajgjSVEvVHNgSmxURG0idzhPWG5gRys8aC9dPXpTYmI/VyluI2lpd00lMjJuJWlxVWUmfjNKZGQ6WX5CWzVCZ3Z2QDpNSUBMSTNQUmxtVnBIMVNbPm5+bjooPG4wPDdXfG47VHNiZjQqaXdMSVJCWytyVEA6JSlwdGJRVH5MP0AzPS9b''@;'; put 'put ''cVtQJWpRYFsqZTgsJmd+V0djQVZiVXVne1s1L3JtXzhfQHU/WjspMHYoXTQxRSVrZmBZaGE/SDMpISV3PFQhbmg/JClpKltQLFo2VnRZcUQzSFk4fm9zVGh9P1hZe086b2x3REFmZlZldkcuJHZgPyZKNFdERC9RWkNDRDUrR3xMKHJ6YEZDVz5mQ2FFWzVFVGdvayZAflZFdmlTbndmMnxzMTco''@;'; put 'put ''ZjBQXl89ei9IMi8iTUBgR19AMS84eVtBL3lQMFtFczcvY1J5MFloelVLcFVdYnBHY1lPXy5NdDp8c0AwUFNXbmA4PSJYX2Z3Jnl4V09AJU4lZmx8K3pUO3JpQHRjTFs3OiFKdzB8LyttcHY4YmVoLDFDZkxGPXZiNSM3VG8uKSRnTHs7VERtQit7JWdiKTJBSyoyIW5fWkdCMkZ3W1RlSEUoMmVr''@;'; put 'put ''WlBeMEB8a1JvNiV1VyxVc209e1Y7T0dVWHhRPTJvR2Rvdk5dOzFxTVZ2WDRve0koJDJ+amE/ZlZ4YyFNbUclR25wPjZQMURNL01JK25sfjFsTiN2W3x+O2UzRDw6VH5rSVVJRVM9M3p5MGVIaWVrIzZuNElYRzJxeVcpTVddfjtebEd7MWNJYkU+aC54b25QWDNlYEA1VypnejxdTltud1EyNEpY''@;'; put 'put ''PF9ZOzsqJU8jOGVXTjBMLz0wbTBwLmMoSTsuOCVjbmRweGAjV09YaEdFPFE7fmAheEVEcn1Ra2pabn5IMXN+S2ZfISM7OWYvfTU5O21FZV50SUIlOmMhPWA7VUp4a0kmWHJ5eVBPQzo5Rn1rWWJ3RVRPMWVmPjNNLC5aLCtpMC4hSU4yOWJta184e2IkOjVeVUw9Nmo+aGEoZ3Z0K2JUaGRzPHRi''@;'; put 'put ''VGdMNEhuVnJ9JUs7ND9YTExIcjFxVm11KW5pKDdXNyU+SnhgKlBmMklbaGNqLjNdbWdSWylaQnBEN1cudWxNaC9lUHhUZD18TktxYm01NDBFTWJ4TSsvaUMhS3IrXk88SFBGUi4sRlQlOk0rek09SXJSP2RKKlQjdXZqSnsuaGRzLy9JdCk5PUh1eEcvVUVEcjBDZHVxbVZbQHllLnw8NjQqWUFW''@;'; put 'put ''QiNUdEkuUzVhb20pT0lHMTF9UVpDZ2dFQTd2RWtDaVsoZ0tyLlFeUiZNIiE/e345SmV5aHt8NzU1LmIiaCtQPTp5RUo2SHtBZEFvNEMpN25kKTl9KS9pYFZHN20kWi5lTmdgWCs4ZXAwbyN1bHJKZUtKTTQ8dzJ5TzMxeWkueXJ8X1Z2PTRKMkt4b0d0XXZITVclSkdzPHFyMzFnNTtPPmU+PkZm''@;'; put 'put ''X3VHPlo8JFVfdTlgUT5uY0BGTiF8OVVmO1U8MnB0MnQqLltvanNsSHxwaGgkRDN2d25rYlRePVovbWNsZjg0Rzc9Q00xL35Lbi8uYyhJJl5lM0JIOWJ7VkQqO2t5by9pUmhDIVZoWFRrUjBvU0lQbUIkcGk6O2oxZWRpR25DY2Q9OngoYzcvPFFLMDVQbCZePihbaj81SSRMQmg9a2F1VkxYXnxP''@;'; put 'put ''WCYraU9VYWxpOFZPaldAMj1zcSgvWnk1MkNyM280MVE8VXNBN2lLQU5sMjk3bUxldyErZztNTVQofEBDdyQxcks7MXl6NkB5NkJGWFNgP2paXko9W34/X0NNdzRLc3o3SGFgOkFKKnBJRkp+WDtVZDJ+bVVjO2MpOXI1YFE+cHdzZUNpRHBzcSVJLj1nIzZEIW9PKnswZ3R7KmQqVztUPjE+WmYm''@;'; put 'put ''PzdAVmcqJTU5UnRyfV0rPzovbUs1aDpLPl57e1c5Lm0qZnpbdiY1OjVbXW8oPDB1NmUiIWsrZW5jQWMwJkA/QzJHSkUxVnR7PHE/Z1F1MDdHOm9sOSw8bEw6dClXVjk/UCtLcnh7bCRwY1JqLlAvLj03XTB4PXZlRF00PkRAdU83V1AuKXpzYURlRmwqKmczcG5FUzd2KiprNTMhe3E1WlkiJjNC''@;'; put 'put ''VT47MypvYEt+cn1nXXpoNkdrIz1uKCZxWEhsb1BnYzwwZlg1JnIvI0dmfk04LzNfNm5CZnM7R3NuISVpR34pTk9gMmVreE9SVVBFMzZwO3EoaERRRHFtKkdkUGJVXTBTfX51UE1iMUZlRUl4T0c9I2glLDdxLDNaMl9ScldrVmxROHFeNnFVXVsqJEt2QSE2MmNvYzc1NUAycG9yQEpIdT1JfU9d''@;'; put 'put ''NXtsQjZZITc9QkMoKCUqOXxtY0s2YW9DW3pue0BZYmlsTS5dUC8+OTo/dmQsbzdtYVRIL2Z5IyhsRjJfXzR1OzRJY2NGSUFHZWo9WSpjbk9WLGQkYWFALklaRXt5SDhgU1M/NH49VWFPJWdxaispVmtjcmhrW3pJMWtMfVBTezlwbGozc3QwYk8oWmlhQEVra0BmSVtjOGBRSnFFTDVPTTBIc1hd''@;'; put 'put ''Q1ZNVTN2cjNfLF1gMHBlfV1qSyZgXSp1I0s4VXJ0ekclUDtDe1tASnA/OiM5NyteVDkuSmQocWdhY3xHNlReNjBsUj9WO1RSZ3wwLzJWUWQ/LkpZVioraXFRPiZMd34wdzldW3kyVl80ejguOEtrcEwzJDZMb1t5cDw/eWl9RFZYTUVUaG85MGBRbTg5OElhRX51SS83W09uNlFlfDF4cEBMQmcp''@;'; put 'put ''ZFVlcnFrWTBXVTs6VjdjInQlNEs3UkJQbW42aHNaTTsyOGolVjtHfHcxNEdKRUpaX3NiMFUlV1NkOV9fSmkqfEElbiQzSTtFXlEySWprK3RCQG9KbzF8PD8hITovd2xSan5uR0lgfmZ1UFhsTF54aG5gYjEiZkJtJWhuMWsxLzY7VU46MzxnJltsLC4oKHtVUmg0STcxcWBTdWclWj5BNnBSSD0x''@;'; put 'put ''bSozaUh7P2hER31sOkBlJnNeIWBgd1EzZnQmXVJFdmo6WSo5cTsuSTN9ITEqanhqS24+YjltbWJWSmN3LF5se0Q5XTxTam1ddzw1NjpGejxnNy88flVTVCVWV0J9cTZlPDd4Oy8hOls/TGNBV1ZmZGIjfHh4TDAxSEpKNjZpSDdHYTtUX1Ixam1zJm5aJmd4I2ZlLm0xQGJoWixkKyxqKHJWO2Ek''@;'; put 'put ''cjEve0N9OlIzMWdoaSx6WXcpYVBoYHpSOHhWSXR1S25iTlFdIm0jUihZKX1HXjRScH47RXUxSXBTSlF2VmpXeTg2VytIXmwwfXk7RzQzdHRHKlJLJGgzemJHfkc3d0Y1P111I3w0aShtSWc9MEBEfTx9WHJCZ1Bza0s1e248YWpgTD4jM1lyOzRBOURmJiJWOStuKU0rL1lwPEhsaiRIdFsqUUIj''@;'; put 'put ''QG5RK1kwKUZ8JVFPOD46Xio4XnZCMWQoJkRCT1NqfHB3Lj99QFJffmgsTn5nNDZGKioiNj0ibm5SV2skKk0jeXV8Nj18UisjVTZWRDwmT31LR1c5dEdOTS9tKmUpJHJDKCJQZVY4eE5RSl1dSXJDZWR1KmhkYmI5SSZ3MWd4IzgzbFhwVmgvb0pXYyIpIVcqfCowai8zPC55XmBwWnlIfSNaSHtl''@;'; put 'put ''NS5+N3QuXV9RR3hFRFY/cCpBR1g4Wys3KDZldWljJisqNiMjeng8WWFkYTFSRFhHQTJeemE4aG8saXFkMy9gdGwsMHolRFR+cmJTIyVOSix9YGlrYiZTeVR1VzUiZkdXRWdNIWYsVE8xVV95IT11RzpgN1sqV19ZOXEiMTtqUSw/TCE9SjZKYyoqJFgsOjJFWlA/bXkhXjokbVpHPWVUVCZgWnk3''@;'; put 'put ''TklGWHV6eG1UKWV6PDQhV2BJd31XaG1+ZSgjbHVwLlVQP2d3cmshQCN0OzB5eSZ0fVFmMCQjO2VgeVBNcV9HJnxWWXROe20+JT1uaCZoODV6azhlRXJTVzgpd0Q2PzNCZDVWQ3x9fUo+ZWl1RWp9SEd3WnNTdlt9VHpVJl9LPlhWMTdtWVs1PjpoVyExL0JZW1BXI3w/YT5xSDZadyo5JUsiMno4''@;'; put 'put ''NTwhVjRbUCUpMnZ1byUsKyJEK3YkMEFOfXQqaVZ3YV0rLCozPnBdO09AVFJjNyghPHBnbFNefmd4IzxISmFCZzYhOFYibGJWMDlibXtjeHoiLiQsTyViZiVPR2xmaHxJUEcjeCI8KW5yUDtCISE7bE1CTGxMZUM7KjVNbGZ9eVEvP1c5JFhIQ2tNI1d3eElBezVbNjxJK1EwW0ZJciw/eHRxVFQh''@;'; put 'put ''WSk2Oz9fbX1AKiNTez9WdG9jSF8sfDF7WnpVJER+QCxWKihyTntAIzZ5Kzs6UyxMbzlUZXdoMk5TfHEhKipzczF6PzAvMyx5TFBGUW4uPz0hWyVyUW5seTd3Wk5GLEh3a3hNbytbUkFAUnpTPSY/fj00eiJUa19fXXYoU3hMXX1dRV1aYTw9PmV+Kz10OkowIX1Kc2RuI0hBQmEiTTZCQnQvaXdV''@;'; put 'put ''ZzA2eEIrRzlZJF48RTs0YW17YCx2XVdRRnEwP0AmJEp9XzcsOywxPnliMWJyeFskMWhNMT87cF15NHAmLFIyKWhZdEVDVDFkQ0dSLH0hPHcjfWh5TFImcXFXVCFtbTNbYiFXeWdpPXhJRWRpNkc6MWZvRlZjWTtqSEtYOm5vQSxeIzhAcGY8WHFYYSkwKGhlXl1zPUE3KS5aISJia1BTeDE9bmZt''@;'; put 'put ''ZixKWSpUaShwOUJRYCN8IkpYRVVtcVZdMiUpNFJAT01zOk1iO086cX11UVVval9SJT4ifmwjM3I2KWlwfHA1QV8rUjtofVtodilEU3x1JiVzOGRjXzppQVA9QH5tTXh0bT5hZFZ+WiYpfjc1YmFnRWVqPk4jSTgwaSFoRWUlX1FoPSM8amo5aXg0ckdmemhWYm1SdG19dXMpUToycXwjVmN8Kllp''@;'; put 'put ''LlJIQ0dbZ209SG9yOWsuUio4fSNzSUM8KihyUnA6IURXNWJsUiVmVTc6Y1RXfV95N0w9IWpeR2VKenRYPCt1c0tZPzo8RGBnUyUqI2ROLyhjbSFreWc2UlFrdzg8MHE7d2hBX35gNiU8KmtlXW5zcUljP1tpfn47IypMLHc5Xj99Xz1Fb0hFUF44fl4rUkw5dV0vUDNoWEZONitIP1YpTj1RW2Ei''@;'; put 'put ''Wk5lejhSPiRIKl4zOldJQ2UjfTU7Qz1TUixsZDpqYUUmP0AxdnF4fEBTPWVjNVkiMjhJNiwsdSl9SiUxZDB0UnEuUStJfjZpXz9nVmJtUnp+S0lEKltSIjhHY09hZUY6cH1bTFcoZVA/biZ8I2BDZUQxZ3JKeTk0T2BqQWg8aW84L1dPeEA5OHYrNEpGKHJMaFMoT3pBXTdJNCtJSCV8cz0kKmpy''@;'; put 'put ''dD0uKmF4VTF9L2QpOFV4dE1CQXBEdWArYEoxIVZCeU1fcnFkL2Y7U0FxcGA1X15fNlFuTmVIIk1HO3kkWTxxNEwmJEo1XU0+RTdncS5OPGY3SmhSNTw0XzN8VEQ7YmRlVChhSyFxOGJ6KzdjJmZjbW8rZTxoL0c2fG9vYHRnKFovUSMsNztwb2BNQVlBRj9IXUI/NGJifG1AcHkxW2AxPT16OE8y''@;'; put 'put ''ZiNSISp9JE89W1BacGxdOjtAPjdlc3JtPTtmLzcsQEp6VU9SOzV1bF1VNzk0JncqOVRCO08yX3BUQzo9USN3WU1RM0ldUyRLV282RT5JSDxxN25MPjBtPGRQZT43V0h8N0VOUGVKYUVxPUpwemJNRyE2QEdEbm5heVdrL2BkM0l6XllTNm5RIUtHXTF3Rm5+KiM2b29pdXR0bCRvcjRNVitpWkcl''@;'; put 'put ''JG18LiskQU40XlkuWiVkQyUrJD1VWjJCRH1gOF44Xjg4eGUzVnQrMj0/SllORilLMlgwSyEqTW8pWlhKcyk3QG8zbCR5JCJAW2dxVCVjWyMmJSZVakZUUHNNUWFQaCY5fUMrd1FdYFBgWUQ6PGFuaHl9PHU3bXhkNz9eMm1fV1F2SGl4SklQOC4kLiUkOSRaR0Q2OmtIOHlNMSlnTGgmKUp6OEdw''@;'; put 'put ''JHt1NzMzfCpKaDBLVkhkfmxTS3RpL2FXaXx5QEtMNDFHdFZwSGg1RmxWOTBMU0hVZDFVc1VTMXd0VUQ9NldLQHkjOTx9NDAlK0AvVDl4bFhdWX49PStVVCpYXlN0aiFoUHN0WTV5JSpSK0l4W3okU1opOyZ9Ik4+MT1WWisrNkVeR1JObX16bWV6RnVIdyN8NiZPcyYvV2ozMXsjKkx5LnJuZiVQ''@;'; put 'put ''QUtCeXV2dCkpXURzY1trJV1UN2V+JTIwJThBQEFvdFZFe1lRJWZfbk9ve0hYZyhiUGU7M1h5SylqQHF6Rkh1aE4uX1R6aVFhVkMvY14ucykqK3FraUteekZMKk15T25kTnZtRUA1UllGYjhiaUA0Ti9RNFpaLF07UDMySFgyWjkhSmNLS3pDKyguRE1iJiMyXSY2Mj8/RF5vODMxa3N2UnlnNlRH''@;'; put 'put ''UUk8ZmllPjJeSXJ6MUdVIypyLEN5NmUwTER5Wk0wTjEwLlZpeFF6ejlsP3NLME1NKCwwUjYsMHVycCQiZ2tNbVI4MV1wdSUsVWFFYFN2NUFzOWw9aSxYakdLOH1acCZjREc7T0o0XmckMjJbfDtOP3JKbkI+dDNTXyVIei5FOmYpezhzVUVmZTsrYVErSm8xbEImTlVLdzJ4TVFFfENxYDUmSH4+''@;'; put 'put ''anJoNjNkfTM5SHFrR2omZjljfjdtWVkwdiViUFJOVVR5PjQ9OWM6WU06KCZEcHApSl1xOFUqZkc+K2dxLGhQRHx2eigiVXx7Zl14bHpHcCxDclImbCxsZ3NQO0RYUHFlZiQwMUFycCQ8aEdJYnU4b05SSVQ5KEEma3kvVVNSIzh+dG9qOWFvPTw8dXdWLjNHXmA0VXh0QUJTSjglZkcqcippYEFJ''@;'; put 'put ''UF05KHwsNUZ7R204TmlRNHtoSDw5IltBZyg0OE9KdlAzLywzJmpmQig0QjN6Yj9AaGpvOCVFSE9xQl0lako2KEAqPWgwR2VYM08mJTVoK3p9cFRqWCJnbkN1X3lVQDBpa3YhclpNeDs9aG95WjYsLDxDX1MlQXNReGc4S2dUKGFLUT9ebVlZJko1fFNlYk9nYkB4WVI5YkdmfkVNd2hwY056ZU4h''@;'; put 'put ''SjE5NV56ImNlTCRxe3A3YXojMXlFcDM9OFdoYDYuYjEsNXcla1ImTVlPYkpCcipURVcvMl0sQztPYDswN2RRRTFVInFJcT15IjgkLnZJZGVJOl89MEtDQHdIbntmXVBEa1t4L0xOOU43YVFZZGIhYyJaX3UzWl5zfHtyN1Y5TTAqKyYjSHZlWl57V2wqe2AsY1B6VzxdYj1gZl4uTmkme1RhYUAm''@;'; put 'put ''LjdaZUhHbi4vL2YqUiwpL3lzLEJ8eGMqUkJafVNwPCZiPm55RFAwYC51NXk/WWl3UyJsdV9SYFQrQXFCJkhjbUtdOWc9P3hUNlFgWmp+O18+NTwrR18vK2dFNTEpQ3piYFFHI1p5Z3lhUE4zMm1AP0NrUCglVWl6PV1dVXZVYHw/aUE4IzoxNWRPTSklVC8wdHRNS0ooUDh0dnJBcylNQV9pO3gq''@;'; put 'put ''PHk4VmlmQ01CMnAwSlQxMmtWOiNLZUkvSTksSUY6Pi8pLyUxfiYkSDNaZUh5fT5gcjoqWzNkKGZXMktFW3VOYk92eX46YipvUyk9U0I5e2M3ISRGUm9MeFd1bzhyK1hhaVl+WHIxdnZ8L2YrcyQrOGJ7N2ZVLjNwIVovWDUvU3piMUgzIkpmaCEjUl9GNEpXX3hzVVdQOUQqSkdlYmJIZC5ZSE5U''@;'; put 'put ''eiUxT1EwTX5IJWk/fUghNTFDdFQ6a1l9NTQ/X0UqMXtPTUVZZT8lMWQwMyVrNTZZIyIvUUFDdzd0W0pYN3xFZHhGazM1WFYhWXdoViZRYH1tWGByKzpuUmpPT0psVUU7JCU8Rj0rZ1p0ektMbH1oLGt+Plh0VDVtbD82Q34zLDEjPmdpPiQyQlc4WXMrOGM2XSgzI3VZcj5CQ1hFQCMyZl9JQEwl''@;'; put 'put ''IzJVVjUrcW8iWzV2L1UhcTMkQV8kQCNxe3B5UEZsNF5Xdz8rImNJcVV+WlJpPHclPVE5KiFdUV5xUztIbWs7PUlVVyNpMl5vLltMS0RTKTNKSUNYPEBQbm1YWCRzenYkTz0wbVVWVjkmO0g6RUwvdFk1dm9QSzo4c1BJPH57YnpJXng4cmFRI3cuIk1mfUtvOik6KD8+Xj5mZldDKGlrKyZ8RG0v''@;'; put 'put ''SnRKQ24lSyI/Qj5YeSM6X2BnJHkrMn5Gdnx5TWRLdW4ldy4sbEcjdi5IYnFDS0pPITVfSFd6cCZiOyg+Sm1lO2pObU1pckg5VTdkTiNCRGVCNzQxM1lDLDk+dFopLixUflg+dE9qbjhJV3xrUGJpWk83MVA8WlZfOEwhPCV8a095OHtUWTN7QVg5NmFOaVlPaCkzSFZWaVN2L2leN0tnNzs+NnU8''@;'; put 'put ''NUBiaXQ0SypNK2dJISNqeDxLYn1gZmZrUWZxUGVxcGFpS1F7UntPIW1Nczp8Wz9NZFhlVXY5WkZrNXFSSls3O1g5LjNwZjdCSk1heCZHQ1ZMVGdnM2g2RyJOM0d6Yn5AX09tJGh4QiU7JG9oMCt2dUlQR3VNMHZRJllFLHUybWhYXXs1YFg8fXtJbD4iUFQ1SGYuLHtXK1VLJjwmd3MxXVQ+M0Uh''@;'; put 'put ''Lj5VR0BhJXBwQzhTbFY7SCppJjEybi41NF1sJjBtbE91MW9TVnRtNmN3U1guPUF3U2s4SkdIMEk3R2lJSjF0dGNWSzc4d1ApI0RsaVsua3kqcj1TWFMufXVEZWcwOzArVF9Eb2xxJkdeWVJZOnJoU1slY2Fwd0oqbGw6bzhdfVJQXX1GVEQyeCE7N1RZVHl0S3VsczIyRC5QVGF8Olc4Um18Jksu''@;'; put 'put ''eWBUbVVlemdoU2YudXowaWdsRWU9NGtSL0ghPyZwYXl1bWh4Q1tsOj8hL1kiMGddSkYwYjBgd1t3Lk1bQDZWKFNsQXFRdW0qUHF2WHBgb1BDK0wrQVAvYWleYm5FZSp8cHNhQD89cVhBfFVwS0VQQzpMNCpBem9rW1hvOUVWNC8leyN6YFhfYUE9QklQR1VgI1lGU1s3OkIuQSozciY6RWJ5T01m''@;'; put 'put ''MU42YmxYN0c3KHhmdUJrYjpzdVNrUVoxNmI6Z29DbDFhKCUmKSRTaGQvZTt4UUlSKE5Nay9mTGcvdGhlJllpK2E1WkNzQSFZakgvemwpOXdNVVEseEtVMDZsWUY5W2pAeHUwN3BHQHw4U00hbVU9blAhT05FTUx1P0VgdlV1Pzh0QSpTeGh3O10scCxTUDlxX2QvI0ghYWlzInd+P19feUlpLHEl''@;'; put 'put ''JWN0Rz9LXXIhMVJDM0A4LFZ6PjxGUVAxbyMyPy46PEVBMCglKWFMYihWPjtJe0szZzJ+cEVDIl8/ISZocEhiNDghR0BaTkJUPSNWIlM7YnFHVFAueSVzUUUhfW9ZYU08aC8raSk9Mzl8MG15MW94LGxbUys6YnV9VE5gR2pxZ2krW3gycHhmUkRKfClpXz9tOlM2KnF4fSRGbEE3OztRYjNFLiNn''@;'; put 'put ''NCNXei9CMnIwVnlpJmd6W1k0NnZTY1k8QEpLMHpTYythJkttd0cudDZIKDY7X3trVCZ2SWJRXjdYSX5RRVI0RywqdzdkMjxueXchPkU0X0clNTNyK1AwSW4mflVqImFWU2p8XSVqIU00fVZwJlN9dylML3NCRTdNOldpQ1JdMHRlS1lTMyZnWVR7YCNJIjdZUjhtQk1zfEtCIiNlUmtrK2Y5Xjw7''@;'; put 'put ''YEtOP0JJQUIwTVErYklFajs7M1lrNzZ+KUtBLzxtODtzeX0yW0QkQzNzLCV+RUxoK3MmJVN5QUhnWndjLiNsJWVMRmxHYFAjJiJGYCVgYGZAbixAeU57PXRhQXN2Ym1bbjlUL3pva0wwVS8jRCpGQD8lYDFncCNLQHhjSXYvKitLIWJifihXbU1Pem5XOGtedW1sczNYfnk/VWwmLzM7bFEzKTdo''@;'; put 'put ''ODFiTjMpNnx8PV8kPmQqIz0iRWA2QUByZkFiYiZUK0g7flNafEdXSGdAOn54SjR7LFM1U2wxaD5hQnRLQk92cm9zfCIqe0w3UmI/P1UlQC85ckdbOWwqRHRuPH06W2xeejoxalkub2l1bCVBajBzKyVbaH5yKGg6OXIsKWwpZW53NDd8ZSI7Y3RiU2BucmVzfD0rW1J0YEFSSlBzMTY5Pnh7eCow''@;'; put 'put ''aTkjSm5KNHRfdDYqIzc1UCM3ZEVIVWRCdj18OWFPKW1jOVIxUVB6TSQuYGYpbGx9b2BlLjU7SnloVSxdP2tFZWRrSFc4cCJWKnFwZkpZSXE0U259LjJJR218aywvI2BYcm0vOHc1XlUqbzNWdFFAfDUsaWJUezs7Yn03PThsO2lBe1dVX3xjdX50dHV7d3ZUazRkVT81JUNgS3FVWGhHOmxYIUA9''@;'; put 'put ''bXMrR3s4UFtFbUxpZHF0e3JiYCRqdSp3QztHQ35yfX1xPitveyxeME1WKGMrJWpQUH5EfD92UWQ4Wzh5c2w3ZFNZKndvOlRuYXFiZTUxRSVrZXdGOi5TPF4rfXJyJHF7PU5bK3FwellxYk8wbz82Qzt1aGNEJDN4S0Q4d3wpU3N+ZTk5fGMlZTlkWGJUUjYiPW5gJkE+QUVNZU4wOX0pMGBfJGBD''@;'; put 'put ''dUtsSnY7KjFQaHpvZSNwVGwpN11COWxwaCtMJmYxfnx6ekR5OThoPih6cCNLKEFlIV4sZHYkVnIhOUE9JHdpYF5+WXU9VjhMSmBWcjxAMn1uUVZTSWRYc0JwVkozaH0seFQkdndjaF0mI34mPyU8PXd3I0ZFan14bEhNWjBefmU9d3ZTNEkyfF1sMFpCQm1Se19LN35tfGkqPWpCWG5fcFl+NVZZ''@;'; put 'put ''PURAYGJlTHAmVkxNZy5GSSZsXm9xbD08diE7b3lIYVJqdWs1d2lkOCNoYip5TFo+ITlsYmI6a3p4MEp4I2g3TDZnR21SRnxHK3k4TXk2NTFbIlRKZk1ySWZvSHdJPHZRencqcFJfe0woMlZgUilKXUo0STJ8XmxNWm1SPjwzZFM+MSVtJH15NkA7TDVLfj9Sd2EhTjhlbXs+SX0raTBqTHQzWG9r''@;'; put 'put ''flpCXkhFSCN8V1Uma1ViKkx6eTlpajdhdExKdFlyVWRAK2s6PTFmTElZd0UobjFra3hQR3BnRV8+djhwOSEwIXFwaypIR2lWISpJd1ghKzN9OXAyJjN1ZnAsPHElJU9Wano4WzsuNWVyVDVFQll2T3YmMih+ZTBwX3JVKVRfKmEvaTZRMWA6Mz1fY2BjSG4+MUtaRiZRMj0+bVtwI0taRjhBL3l7''@;'; put 'put ''PUhpYVt8dEF6cy5BSX51bDA5RChDJkc3Wk04UXxhVCklKm5SLH0uREtSej8rQHNUelp8TTpHY1lQfUc/OCtAZ3JGYGI7ajBIVVpqW3ssJF16XjlCX341fDtEVklHTTNLRzBGZ3V8YW1SbFtRalEwbCIhd2JvMUpjamFwIVUuNGgmPyV9SVVlJG1UWHBPanBWWTk4e2NveTNRNTNRaGlJY0Yhd0J4''@;'; put 'put ''M2EuRHMpL1hyQkMvdm06aHdiLHNrUiZnUWBHKE15bT1SeTx3RE1mSHVaMj07LlsrZjgpLlU3RiFXU2Z1IlZSKDh5WVZzYVByMkshKikpN0I+Vjt4Yz8yUTljSz9iIT1RJD1CWHZALlMvc3ZtO0M7bzhFU3Z7cVYveC9sWjVkVGpiMkdWIzA3cDpqMiNob148bSVoPnF9U2cuXUk3PyJSMz5neSop''@;'; put 'put ''LD9fWCxHLnhQZmk8YThOQjM1LDpKVW0lV2hQKlA6a29ab1s5ViZeMSMoRiteS2c3JnJlTi50OExfYTIiO0lGbmslQnRMSFo/WHh5YUsudmckd2M2QmhQQV5hST5NMiZBTnZ2bStXT1Feb1BffDE1Jk1OST5NNCYrTGRYK0k5RDBHQi9HXyRGJUd5fVBCbVJ1LzokN1MzUWM3U2U0WEM6WDF+Omh9''@;'; put 'put ''OUtjcmE8b1JdcysiSmhOczVAJCNMdDAkfnk2WlNAOGlnWnllcj1JfXhnJCNjV21vIyEicjRAZEdwV3B0UFRkLzM0dT0lUVE6XTdTZzkibH4ufVFEQGM9dk1MbjlUfUBEelBPbjJgVm5sMXE7YDciO35eeT9rYGtMVW4yNWpCVEJKTGM+MkR6PztRMSRQd1BnIj9iSGBNYGRMLz1pYmBlMDE9OVFn''@;'; put 'put ''cjAuOzZiNXZ2QDoxSypYc1twJmc/c2MvfXF7dFtbcEhvdC9GOGVwMiYoMDVQeFt3TVF5KW9xfSI8IzZsSHpMalZBNj1wI0EyMGY5dilJMnY7XXpwXVMud1BZJFdgPzNAJTIjUWhwXltYeHJJJCpNNjJRL09aO0toOWxvZz1tdTsqQH0kVy5zYF1TOUZKVSgoIWY6bklhNi82am83OUwoOm1gOXNl''@;'; put 'put ''PlJfYEkhSipZPGk+d3k5elRIPEhaQC43bD1bREZnOV5iJC9zT3lVMWokXzYmNmVVVSgsbEs6aXY6fnZbJUVLXmZpTmlHXTtpUVJTPDtpI3N2PV83KTMrSl0qcXFyMy57TSR9JSxUPHt4azdlbFpuYj1oRkwrNjpKOkpfTzpheDRKQyRjN1owJDU5YmhPZ1RiOjFkP25UMlRvTCpOQkQ5RmZMZkhB''@;'; put 'put ''RGgudW4zOEdaSUFUP0NtOGtRTVJ9JENSTSw8L1cmbzF5JHJVVFAzeCZjPj9nVl1BfCZxOkMwcipOKXBKYFR+eEZQVWFOPEUwOHN+e3V2TyE2NVtVYiZ9PGkqYlpNPERpM3BHUkYjIl1nQj43OWloejxKOm57OTBwI1dySmF9QzRXUH4weVpXVE5sRX4mKW0pdDdGTStSSHpuJD1JfWBFfUBrP3te''@;'; put 'put ''OlpYcm1SMmJhLCRYSX1BXlFaYitDLz1DQ2NGJU0yX1FrSXNgMyMiJUtyLzhXV1c7VmdRZkBgbjlqd1EjayZ4OEs7bWQhNmhhKDxXKFZLITlVPT1nOyFSNnleRyhXM0Y0IWJXZzJzUSM/WEo/fXlzXlhoJkljRlZiL01KfT57XixZKCQrVzxaY1tpazF2dGcvZT0ic3plSShUVW5LNmE3W2NedVU9''@;'; put 'put ''RjMzUCE8JXBFPkhMOSgzbVojVy9eLlBtNVMjfSRbI2coemIvM2dBYWMlK3M6ZWg+Z0BTSUsjLzBeYjF5ezpUY2IyWT5ANm58LyYuOl5hSUBfbnB4KVRpRGBTOjdDTnl3MVhWRnBRKX5UPGJTK0phYSw9Okk6OTpsJDRSRDltUVMsdS5bKmpkViYzam0qNFJfJiQmNl5UJlc4eFtdZi5dQ1FAZFAq''@;'; put 'put ''JWVdT0FZWFRWdENDeVk1dXx1UVczUF8kY3hJSCh2fHVTUVsmOEkvRUg4Z0dLeU9ILkFJWS5MMGF7VD9bU01fIWUxQztBUk5nKHJ4NSUxVm1UVUc5SGpfW1JzZFV4b2VDalVjYFQxfm0+PXE8KU03NTdyKGpmdGdiP2drT3w6QlplZk5hfDhCM01efCViSSIyJEk9aWh4TzVBeGcyIWVGXiokWllG''@;'; put 'put ''LDJAWk8oO3lNOlFxZy9ia1s5dzlSO3F0b3gmVFU0cF0xaUI1Z1tpZ29qRGp0ZnNtTCFXaHQmIiYibCViVERdPTZeWjxQOmR4Ny9bK3RiMUJjdiVUOzdlKmYrWlowPE1ZKkFRaWVELyZMczxMOSVDYSVEdlg1QW9CLkBnQXE5QnVRa1FEOHt5SlEoT3UpKWdFZVs2e1RWMHhYRyUvTFdDOF1seEU9''@;'; put 'put ''PjQsPF04IW1FNWxdbWMyWzlAdWgxUSEoKExndDVJUXpwTCQqLzZlNVZwSk9HTVZ5cCMuOTMwbChAZlR2W2RaNDdCZFhPWSlyPCJfUEJ6Y1hWKHZFL1ZnUHxWZzBUTDVwcUp3MkA9RColN2EoQjlIc0FJOG5mazd7fEg1aWJAaDJyW2ZjI2c3alc6JjhlM0wqLCshcXdIKFlBfTohP0BydnQyXWMk''@;'; put 'put ''dWAqOGh4UEYpcDZvT1M8JlFzVVI8VV97RVVxfER7QCZdSlE+Jj5jfkl6L1N6WE9ASUA4Pzo9Py58TjVne0o7TlA4aiZdIk1DKkd2ZEpkXj8obX0jKDNZWjxjOHBULCErYVYoT1A5SCopay4vN0IkeEdVQDBvfHo7RFcjRWB1cHFHU3kkaTZ1KVpQMz5BIUorKFMvd1dnSXZ2Ij5lTDIhTilhQFND''@;'; put 'put ''b2tzb2lHKi5paTIwS2sibSRYN2lIcyIlOiVqMm48T24wTXA7NDpTYF4mb3AvN0IkYk1DOlJqLjE9Jk9tdmkzP2IuWGVTe0ROMXsydEZiWC8/aFtRa3MlUmRtRSE6SUMwTTdMby9raWpmXm5jJkw6WyxZXjtsUjRkOHc4e0E7JFNuWntVUzd3Y2BQQndbTC5iMV9RUyM6enFORX4iZT1bZG1lRE5s''@;'; put 'put ''ej1pbm9NSV50OCRfdjZJbHN5THBTQiRkaXpPVjJvb1lRcjFbbWhWQ1dTZldQUXs0Lks6WTlSUXd9Zm1yVkBYP3pEXjE8QVVWMWx1KXg5RkR5ZFtteVJTYDtzJD5sL08jfnhkMkVAQkhZM2w7YTk6MUUvT2V4QUwxS3lkO093YkcuOGFyLCI8JGB9bW5DVX5qdnFmb0dVZEpoPVZ8UjAuPT1DbzVC''@;'; put 'put ''IVJuOWFDYiM7RzopdmE6Jk9BRTlgTVAhUE9nekk4aFo6NEVLUkQwRygrT04xVUdjfmIseGwwMiFqVC9XNyE+TWE5KUVyWTBiNkBKaS4hREJFJEo4NnUpV3FfOT1SKTE9e2wiJEZ4ODAhN19rWEdKeEBAPFllTyFgaDg9KU1VLzRZI3VhezhTLEh3cFs4MTlrLDZne1Umb3tHZiM0dHVxaFo6cFNq''@;'; put 'put ''RmU3Ji4oelQkXVYjL0deajNVOXlpTjpRe3kqJllPQjomODJnfS57SE5qMzIpL1J1P09BX05peE0sO1YpajxyZD5RWT5pXmZRWXZgRmBYM1RfWGYrMTE6UH0oaihjKCp8enl1dVIiVSMqfl5gMSNddCx7PF1+PHd+PX1tRTxQYVRpU01iMi9VcnVdVn4pKSwuInMxX1JvP2YhJG1QYjwoOlVeTCJ4''@;'; put 'put ''ITcxPDNuZHhaVkVvbz55JFkvJGd2Pz9qL01xNkBUfWdsXytlSU1EcUROZ1twK1RdOHtGa3prL1tTPVF0XnxILGBMZzRKRkhocUIzW3NGKn4kVUouLE12WiVKV3M6IXs5TzRMc2F2bmAkY18kZVoqfml1MEZafWhYRldMRmRLZVYjdkdhKCYlZy9rM35QbHVTaC9CRDBMKEx5PihDSVp1eTxpe1d+''@;'; put 'put ''YU5+Zjh3Lzwvb1kmZ3MkezlgNlBHMCopLEchKElSIyhIRU82ZHNKZX0ySkVqU1BaYTUwIWU/ZXBWcWghTixYLzl5ZXV+KCZOMFI3OmA/Xks1QV9sQlFjdXV5NVdFelc4VXZPcDtrR1lqNmxeJHs/RFUvWCgrX2szXzlib0xnc3I9THNAcU1uQEJefEYrNX0wSHgxPz57b1t8MCs9fGFDdnozdyIx''@;'; put 'put ''T01wTEo+KzA9R2U7IzRHYVglfUAwcTJmPUpIWUwySyhidCs7b3RXaj4zfHU4dk13ZC5rTmpVaVVRR3U7MC9PYF43UHM0IixveEpaPlY6I0koJFlEdH47Qzw1KEMkMHJpVnY+QjNPMWkhOTl6dnRCME8rUG15USFSOFk+TXtiOVpTc3M/Jn5OPz9GWFBhL05vT1YociJZcHJUSTtNNFp9XSxXSU1y''@;'; put 'put ''ZkVXeU55dTdbKWFtYSsoLiZ1d056P2d+ZE1tNCV4IUJDU1ZILE4ldXdbTClwP0ZXKUFPWzV0RGRveGd2ISpJd1hhWkwidVlDRVMyfXImJFBHTSJyTT1YIWI9YEN5JHBkISg5aTpRKVdAaTM0Ultsbi9qMW8sJWpCQG5mLEtAfVM0dzE/aTZbXVRiTzwjUmN7elRYJkhQYCl1c0VfcTxGKlV1Lz9N''@;'; put 'put ''PGI8WDxSbnplJjtgOk5dcVtUZS9YKWt0eXt+Vm0laSlLdEZgRjFmY1BlNVZOT157T2xuSEM1Jj1LfCl1bHh2R1IrOkwpcU05c04uekt8cEJlQFUpPkEyRT1kSUtpKm9kY2g4Z2d7X1M3O1NlVHc3N0dLOzE3dTU2aWR4cDw/Y3MiPHQxUV08TFgwTEQ4QHE6a090MG90X3IsS3xHJC4vJmtaSDZf''@;'; put 'put ''NG5hPy9pP1d2a3hpKiIsfXU9ZzQ2V2k6V248YChjdyUpU1ZVQit2NVk1QUI0e3V1XiJXO1BTbzxlKCttVWp9NSgoYD5VUCNjbXxPYj1xVmFULiRyOm8mRTlLL1tIaVVIUkAmfnVLNWBLTUJ8RlZYO01JMDFJNTQpNShAT2luJjFpYU43XWROaT1BR1ZYJC5uflhwNiw8fispMEJ7JT4lbk1qSndS''@;'; put 'put ''QjtFcShiOl4xYjRXZiNdRkE2RVo8JnN9QXBVbFgkZiJ1VVMlb35vSn0xJiJXVHoyZF0ufUosKj15X1gzbCR8KTxjSGhuQ11vLFgxZmxMOn1uW0t+YWc+Y1Z9WGI6NHorPTtyWXg2dFV0aVlyfWUhMWtzOFhpajN2WXtFfUhYaWpBWHtRe3ViJEFOXz11RytMUUIqdCVfTnZFTEhoLEFPKD9zUlRD''@;'; put 'put ''MWpuI2tSbT5oP3E2Zk5KMltyYiVqN25bPm5eYjFPdippbFNneUl5PztzTSM4ZWwwU0l3M2skOV9UbEIwP3BWMnx9ZU8hJmhmWV1DbzciaG9gcFcsdStlJWdoL3pNQ3chTTk0P0N8QjxDOk92T3YmOnVMekBaamEsXnFYKFdiQHpJYmchdTwkL2g4NSowa0UwQkdrR21QVnhUVkBHalkqQ3RpbDhy''@;'; put 'put ''JiQwKHUkN09lcHJURUk3Tn5ONV84M1EpKjQqT3pRaCRQVE1MPSIicHQyQ3t8cDBwQiY8OVhsbXRaME1eSl5PVD5TYmlIIWA5Ql94eTEpOlNwfGAldHUiaDZsPUR0QChDYV8wX2kpXUJHZCpEIl9UX348Okk1RG9tNGlpMk1iKjpbP0BoeGltRXZBOEBLP0BoQjYxUnFDbXQ3dXQ4JWhMZlJtO1VU''@;'; put 'put ''KGhdOCMmMCVENUh2XjsoXn4iQSJeZmQpMyNle2U5dW5YP2RiYmIpRWE9ZGROSCovL2hJOHluby9DXypMNHYhdEpVN1JzdFZXfEQ8e0hdNWJieCFufVlNQSZRUnt3OE96Ukg8SktnNVpjKDR8LEIjKVBzTkg2WTAybkRZTD98ZU8/QHY9KTtMQCpHREhVMlNrQHoxKDVga18pZyleVkVhLFkmX10i''@;'; put 'put ''VV9Sb1NdVmxoWm1XXUNPPzYvQyEmajBuJW5GYX02Qj1gbmI1JmRHa3BlVW0jKltJZXJseXFxPS5YJGxxfjRSb0F8YX1LQ056eFFgNjpKZD9IX2NNOV9ET34rN3ZZdW5jeUlCTmxXXXQmdDp+aCwoV3MwUEo7QnhZZjBqPX1lSzdUX1RfKTNMfDlsUVpna1FUSGEpRj1hZFJbKnVsd1B0Pz9DZCFR''@;'; put 'put ''diF2UGZzKS9tZXs8enRxJFVmI3U+djt+QElIQm02dSpBQE9dZEpuIT80MC5mTmslUGFeeTE9T2tCQ21gV3FrcGxLSj9mcTBtajpzUS4kLCsvZipTLEMreyhJPm91blFUUGQ/LktQPEJeMUpDVCluPGgpfmhbYSY4T2RLd3VmfDNRX0VTTXR7biNaOXp3LHJpanVNRGQhfm98Jjs/XTh6ST5vNmBY''@;'; put 'put ''XkQ/RUJ6QElkZSpGWm8mPm9KdEJUP0lVP3BrZDdsWEhjOk1pVEwxfXxUTFJVPkt+a2JOPUJRZzVlNmY6Ung6fipNV2I3NGNdR0N9OyJleXtCT1tIQCIjP1tZNTVxXyQpVXk9ek1BSUFxU0pTWVZSdGZMZUtZSXc4X351VzZ5MlEsUStoXypeYV41KXBudU9GXnMuXWl9REs0M2NwY0NgfGFFdzhP''@;'; put 'put ''JGBtMFtZU25DdXxTbWUsTmU4V0VbXSVrQHE8IzcsUW1hV01RM3J4Kzx+Z1MvWzwpIVZIZzhyM2daNypqKmA5cz1vW1BlanUzdW1uMDVAMztvUl9KUXFbKiNMLks4ejU3XUg7NHk+JEQ0PHw0cGtUUkh9L3JqRWI5OncxdUVjUGAzKz56bzNGQ1I6fVVXKjQ7cn5iWGwhTjhgRzxMfDpHKElFallG''@;'; put 'put ''cyU8big1VW9POj43WXNlXUNDSEhZWmh4PFFPS19MWkNQWGhmcTA8YGB3I2J6cFF4OzJBaVJ0MjpyOlhlNTJgZDc+M0xpdXZMYERPdnlwJV1eWXc7UyNpcjMpeihgXjQpPiJ7cll6ZjQxfCRYN20vL3xHOXsiU0BQN1kzQlVVJGkjSHNLNmwvQ2V8YXw4R1tCQj0vRjcqVXlMa0srSSZrSDR3WFB2''@;'; put 'put ''aE8hX0h9cEsrTl5BYW94WVRIWmVMWUY3RWlIZk1XW21UZnQmVjhAcy88TS87OHIrTEo+dDF2TCFJWnhPR1pYO0s6fFJWYHk9WjJlTFByb2cjTj9sRmVIbDQmNV8hSExVUzIvW1szK3Q2MEJMXn1rcUwwK1VwWCw3UjR6MTFPQkx6eFFgRl9rPXx1dWt3T1Q8aG14dEs4UCtEYEp4a0hXP0JMYl5M''@;'; put 'put ''UVFfRSE9WG1rc2ZqUERvb3IqJjNidkcwLmIwRj0zOWxKXXo4NDk8PHBdJV0mJXh8NS9VU1FFOE95UkhmMykmU1pKN3gyKT1aLEYsVXJ1OV9LQF09UX0/X0w5XlVYJntLVX5MOnFtZ1l4T3dfe0Y9dWdyTGZEPXo5YSZyRTdRSjw7eTlfOCM/RzZJbFBkJFpZIS84T1VndDxuJFtfNUMkfX14Wn1C''@;'; put 'put ''bmhQdWBIN0E8ZVYxO05lMTBlMGpqelNGUE82M2ZhSTRbV3k0cCZ+cjY+aiJ0PjUibTRmI1JCJnkoLyVnS09JO1RFeTV7WGg3IjdlaG9fdClQfX05byVwLy9hLl45Knwxdy55ZiFmZXk4T0dIWGB1TyFda25YMFQzcTp9Rzp7N01RbHs1WjI0OHFSZ19wTEssQS9ITkRxODJfMFNjb2tNbVJ+KDBt''@;'; put 'put ''Kix9KDhMUnVBOkBaXyN8Vi9QVVM8RGswWWg7TyxBMU5wQFZtOzpUcDkxeGlEfls+KmQmcU9TQkU0Q1IlLlZOSUIjcTZtbz99TlghN2h1UTpncnVJaVB9Zng2d1smfEJiZzEoZjdhVF86Oys2dnJub0B4bjFBIy9tRS9KSF1mbEd9I0dkU0pQR11XYX1gIWUybF5RZmM3cjFVR2hGJHAkWCtgVEkl''@;'; put 'put ''WDolaiE4JlZ9JDBURiFbLy9XNT88Ij5CWWZQYWUqcnh7NyxZTT9vTEByPiVlPUBeNnJKL1V5ZEA7P11CO0NAaVF1RkwhYXFzP1okc0g3WTZCQiFgdkpgVT5DLnxla2dUIkdANjFJL0hHRXUoLHhNKCxnXmZGdlYxfl4zMT00NG5kYXApPTBtWmBwKXRPe1JFZkc7NUo+NjElQHFqbH07QmJydTBJ''@;'; put 'put ''bVFJOktZVilPJWtYRmNwR15WdDBFWndZInFwJS8waytJWmVKaHE8ZmJvRmF4YjFJQzxwRlckKSFjaCg8YyplfU1XQFglK1ZPVH1zVF05dnlNUmFuL010OFd8fWVbay5RQm1zRXNpcVpYaSwhIlhwZz5oJVB3X3ZMQzxjY0hzfG9qUyQ3fmVKYlFAKERNOHw1REFnO0J1cyk8JSMiOHBaIlBhb0o7''@;'; put 'put ''NVlRU0ErWFlSdTdeI3k7X3pbVzI0dEZNbjs+UVJaPllmMHw4Tyl8aEpKNjYhLiVxNG8qVUwpfGI3N15ZPkhOYWlNOjk2JE1dKSwraTB5eUleUXh9QDJdLktIWjVsVENtLytoWy4/amJIcyNgbHwsdXpKaUw5c2wyRnNPJUxiQThlSHJrRishVCs1L3I/VCJWKzRxZFA2UFkhR204Qy5tL25BbFpP''@;'; put 'put ''ZDd6YUwzS3VoRjVAMkBHayFKRnY+KDlpJk5mOk45YENROzB8VUwzVC5IN2JVU14wM1pvXUBEODhWWiI2KUB+SHxNan0iUyY0MSNhZFR2TytgY2cwaG12eFJUcHMkc3EuejZyVjpMNG85M0JLclY6OzxgZ0plZEZ1TXMqUU9Pa2Q9OntMQWF3TnxaIkdNJT5pLDo8Z1c1RXJLZjwuI1lNJX1NXloy''@;'; put 'put ''fWBoMzJQQl01RXIuWEVbYztpTklJeVJZRnVRL1EiTjZkYEAsYUhmfnRML1JfI3tNS1cvXzdQYHFXITc2K3okITd8NXRgTWBNQCg0LmtaPlouMy5BV3NoZCxuVHl3YGBxeH0iNlVKXikqSjVXMzYmRHpOaD55enZzOFdTT0dlb2t0dXl8MUxiNjt1elJ0enpGSiFiU1ExSEZsLG5YOTF1ZnlzLm17''@;'; put 'put ''Zkxaaio5djN0ZFBaKDlJTmRBKXkoQWEpbyk6d19AO11Gdj1nbCxpdm9zQ3lJeyFLQjBONW5nQS5pVWIuVFNbOXgxOW93KyVNbnoxZGsqUWlnYyQlVyolWVVXU1N+OFkjWE5YTDRjIVU7ciU9bHZkI3Z0MlF1RV13YChgQjprQl4xSGZpc1gjKm1eQU08bSpaKUlyUl5vaHZVMyoqRVowaT5PNUw5''@;'; put 'put ''KmhtRTdjbSElcXAjaGl7ISVlaDFpMzI+OF9WeyNofEtnSzsiO3F4JVNUensocn5sRS5YTUdOUmhlP2xHcjkmbERmJjQ4Tll8amV4SDYyJnxCOGgkSnRIU3ZUZWI4cmhkT0w+MzF8cUpId1I4S1N5NGtvdnZbP3R2MklrbmNDUGQ3fW1NQEZEL01NPlU6MVokTV5oRUc9QkgoJV1Sd05fPGg4WS81''@;'; put 'put ''UWMiXTZUWVFeTk1JYWBeSyJXWzAxdyU8dDFHMHR7ZyZxPD50WCF0W2EzelhBbH1oW0h5P2J5VyJKMEMkeFV3e1UoNGNUWTpocXBieWReUyk2P0x9bF1QYjAoPCY4OVhieDlQazBwL04yMVtnLER7dURzV01UfUlKT3ViRFByWmA6b3YsQEtrfUZ2JGYjfXUrYXMjVURTJXB7THhxInlvWW4vfDl1''@;'; put 'put ''IlVYNjZyO2tEcmJ4OVB1fUNAMGV0TVlzLCVqO1hWW1kwPy8jR2JsNUkxNFQpY1lHdmdGV1AsMHpZMnJFbSRZOTd6T3UwYXImZ1AhIm0/eyF7bS9JcXMmeHskOnxbWD08c0BNZn5LRmd+KjBBcDFuM3c4NUBQQSlTUjlEfTloe018dSUuUFRMLzt8KSViO1Y8N2M4e1RQS1VTaVhRTmx8NmNpOzVH''@;'; put 'put ''WT5sXWd7NGNOUmpxP0sse3pyWEkiby9NKXluZk8hbHlhc25gbWlvOVVJcl9IUzY0QCVTfjU1ImBxNF9rbzJtfC9qbyw8Z0N+eWMoNU8mJTVMd1g+OFs7YFUxJFBncHM7VTFbMCYlN2puUW48bSZ3ZTBsJWVvRXVIXV19e2MkO21RWzBtKnpOOGpkZTJpRys1fDx7W253eF5rWjZhWH5tbTVRYnk8''@;'; put 'put ''aV5QWy4zeUZsRmohN2ZPYykyUX5KKk17PHxIRnpLSzV3PyhZJmlHJU16Wn1DfG98KT5gMzB2I3NnUVlTfkZ5N09TM3JZXVdgT1huQVUrZD1fIUdZREpiQnxAPyZlTyRCWTI8amJeISIweGNre2YlbTVZKlRpKVJ2RkBYTTsjOm5xWD4uV3lXY1BMSE8oX2JNKWtkKFlQMWpWd3E+cVNaWTNVNz5A''@;'; put 'put ''QT8+MCJeJGV1SF8yd2VOZWcme24lUE0he3VVKGhkJFBHZGxhKzxobVpnT114bHchSHArU1lmeFVbZl0/bmYmJWgzPXd1RnQqS2lec1ldaEhDY0JMdDNpa2s/XU0pVXw8IiU2Y0hmKCtFOm04LCU1OSFRJV0hY3I5VlFKXW1JeSNfMFtuLHQ1Lz9aTSEvL1Nfcyk3IS8qZSYrQDxMdzxJZSFqXT18''@;'; put 'put ''d1FvJWdYcHNlaXEwOF07VHBadTBfSHxSOCU1JW9sPihWI1VKbWdFJCNoYFYrKEBANnUxMD9tP2cwOytHezk4Omchb285bT06cHM7MlZRI34yXklCUEppbmN1L2tAMFlZN35BYEA6elgydDJ+L2RVOXddNH0jQWUmSFtdJWAjSyQwdHJ8UEM4cFBofClYODxtfUM0Z0JAe3cjRlcrb2VuJD1scWRL''@;'; put 'put ''M0NJUCE5KF9xJmwla3skNiUxejg1QCFwaXJDcEM4dGVYfTZ1a08/L3IvODk7Ll48RHhTIzRHLzhTc3NkK2VJUER8MGUlYyg/VVQkMGxeUHcrZWAkMjRZNXMkKG9WIjpwWVhkT14uUW4saFIpbT9WOys1L1dCJEdfTGUhSHIxOVEvKnNlPiZsO0sjcSNTKHJ7I116ZCQhbnYrY2IvIS9qTEFBdihL''@;'; put 'put ''T0Mid0RfSnRaSHpHdWYrUFA4PTxCPUoiK0BPPExxYD1aNzFsWCUqXXk8dklBQUFBQWxCQFFaMHYqfThicD9dXmkhXTV+KTBMV09AVE09fGI5KW1xUHtkQVlBeFJmTUFFZ183RFJOOGd4e0ZvVWIyfTV9JUdvIzh5SV43fks1SCZoc0YzcS5DaVlRWzhvSWNiJWYsT0JfMDsqVWxAe05nNWNlVkhM''@;'; put 'put ''VzBrLHpGSFdMdm1JPXRzbmdPRVI2aT9QUDFKZW5wTy43IS4iKFpTS1JvMiFmbi5YUWV6UCRhfDk6cVBnUkNBMCs1eyFMQUQ0aCt3YmhIQ1M/RShtdnQrdjFWV3RUMjooeGpMI0R9aVF0PUlbTHlkZ0JzKkkkYW5iMl4/WFY9RG51Jkw2dVE8Tm05SVBeNSR6Yn1FIjNjW0h9djdaW2Z4eGdIckk1''@;'; put 'put ''VWMycmpDbil+fX0yTEsmSkwwbTE0cFBLXnlPeDx7UlZKOFlaUmJkXX0jVFUmJjV5Uk9JPz9YLjZsO0R3b0FVVFJjcHsxUD1fV1h2R0phPU9HVy51cH5eQC59ISRxd2RrbSIqezFRKSFbP2BANGRjZFtIdyNKdk1pLlZlZkp6SloxR0g9V1NUV3I5azwrS0h8Xz8hWCViaSQwd0s/Yil4Y0V4LG9H''@;'; put 'put ''X2xsKGt3MShLcEBUZDAsfXUjSUtOdCswWkZLSU9BZ0w3VC5rT2c5elBqM1I5S2F9WGE0VTZaeDQ9RWV+RD4jLEhWUV9UTnpmUi9yPik4SmxPNXtCX11aYkpNW0hTK2tkMztWZyUySW9xTEZmPGtqLDI7NTNffl1dKENTV29AaTBiJHNwKmBicT9CQ0NRR3BfWiVwJUhPOXR4KSFkfWNUMk97Wn1K''@;'; put 'put ''IT1QKiowXzRrY3ldU1RKJC5oWj1uSSsmQWNQKG82VExLb0hGSFQuajQzWFkjKE80PSV0a2ZPQykuSHU2Q3lJZSN9eHlJSzZINyxjUUZ5R0ZSPVU3UDx5akdoZyJHV3FTOUEqbV4leHo6R2JoUVcvTDtRb2d8b30lNDFifnNdYDdWa0JpcHRCa1FkSXh9SEI2NC5jXilYWjd5Ky9qaTZgPD96R3Rb''@;'; put 'put ''KTVkWDYheDliPk9HXzNCNT9QbTVne05QPnpWY2N+N05QZClrJF1sOmRFN21daSg4bSt6Tjk/XXtxdz0yRnplJW8kWkg0WXM8cH1KKiVSVS9dJDF2b0A4WkN+aHs3M21Gb2Rdd0tGazxGXm8wbzc+QHQ0XURFQ2s2c3J1RyUvSWIjSDI0KjB5ZHJeSTQ1PjZZRDM5Wlt2OmZOailGJFVxX011XWxL''@;'; put 'put ''dU8/IV5RbXc7XUM4OS5oeHMpIWR6aWNeTjROJm0rSmF7Vkw2NldMYEhlVFVXaCFQdHFEdFlbM34lbG1fcG91PUxgYmJeWU4+KmhkST87Un1vMFokeWkxSUM1WUV2IyNYbndhQHclNV5xXT9lSytae0g8L0dJcCQueHk0Wzx+OnJMbjBaSmVmaT9eI1V1JEtAVmp5QFhfcW1WOj48fnNCMyh3OnhY''@;'; put 'put ''LypYJCU6aGI5UnNbRSkhaE5lUmQyR1ppZ2cqUD5XJVhKUCZQXVl8RHJGe3V8SngzZ0RSdSp3Y1Rec0tKQCtAMypgd000diNGUnhPVHZtbilEMktvfUdaWlNhJSY8N1tAeT1VRWElXT0zNCxeVGh5P2tyaEhnL2d+LlB4L3gvZVl+TVMjK0h+W3laI0ViX11uSTJ+Vy42Nm81Q11DV1VUSW1zSHkw''@;'; put 'put ''QDpYQSxWeip+VGxbYkxpTkQsbD9PZXdPSCNAL1duayMvYilpfGZ6NmcvMVM5ZDJfRH0+Zzo0Im9KajxUQldvdjoxYCQ+bmhRTlYiWX1hfHBGRU09Vy8pdnwrQ09jelgwIzJuZyJ4eHhFZUxPT34uXSpfOz9nd053W3ppTVVaV15rbHIoa3F6XnpBWk10K09MeCNJS2gkU0R3RFlAJDBGckU4dSJw''@;'; put 'put ''SzMpfm9ZeHluej9+TWdiSEkyWSU0c2d7eUZHWnQpQikqOEhWM1BdR2duW29MeTVvYnplKVVrTEVbU3FsWHtHT1hIZnlDNzlVZ2BSLz9Kd0EpeWc3WU51dm87KDtCS0xaNGNtVFZrLzdBfk93Z2VqNkNPeEI2Vlt2KWx0PHJdXnBOa2tdWnEpWFI4QlslWjNoW0k9QnlZa3AsbFpEMn59eXt6SUt4''@;'; put 'put ''WTl6NVN0cSF5SWVMK11qcEx5UXUrSjNxYVR3OU8sIyxGOmk0cEN2SXUiT1ZMSGIvQyJIPlZzLnZ8UD4vWV5AQE90Ll9GL1UoKE1RZXJbPlkmRz1oOXVNP09XR1g5I21BRGtOR19LWEx5WWt0elFSQXhsRmJqOGRdfixuLHFWW3EhRDtUVVReflN2STJzIWRuREREYTdAbDY+KW04JUIuZTgjeGZG''@;'; put 'put ''VyFPcFMrUGk1ZjE6MjFJPDJkdzZINXQ0V0VYeC9DLkVXR2pWKWwjeiJOWlg2M1RpLCxEUUdFTTFTSCQzQ2wwQlVgTGhRanpwXXJqWGRbNWppMSY0M1N+KD1PMXgqOGB+RndHO108ZV1IS1VRS3ppOTgySlUpcWkpfEZbX1RsMXkpP2IzR3grajIsYWAuTWIrbzJuNUxqREYyelEkdSpfYSw9L343''@;'; put 'put ''WHlpTFAlRypvWFVxV3w+QmpoQjlueWlnQCg9TlZ4P2Q+WSklcXszYCooMGFTTEkmSSlZT1Z2VnspTHZbQiJJZW53Jk8uKyk1KislfDZmM34uWTgiamNYMkd3LjcrU1FEdk1aOHdOY1BhfV0iKEVHKFFOUTRKLDEucnBCZSYpXWkrOk87fUY2YlMoZFVwcUNwfF5WITZRTSlfUkswSXNAUloiQDRz''@;'; put 'put ''QHg/QFM3bkZERHMoa2EpeWU2NkAsd2ZjamdBOF06QzY2bHU8KjloMitja28wKEdieDl8Qn45czQlNUUsaWwyT2VSRXd9QzMpVWROQWRGL1FKXi4kQk5kPGtFKGt5O0lhJiRQUWo9Ii8xfjVWQXJgSStYd10pP0A0NEgkOUswejV0ciguLHVse2Q7b04kKSQ1QXZba0ZXQGl2NkVJT0lUWUslfXJb''@;'; put 'put ''Rys8bTtxNj1DKT5XTz9aJUZTaldGM0JpbWFCUWd2M2hxYFhmWkV3IixIV0dfflRmdit1djFkKFJEb2xEX194UTJ2c3Y/cXosd3s5cklCYG5vRTRBKWslVzQ2N146fTIya1ZgWiole3d4QTc0MkhnZjg8WG9PSmhMbXM7OTgjS256W3FwS2JAWiwrIVg0b1FfZDUqYTRqMn4kdmpsYmhHREhWeyZ+''@;'; put 'put ''KWA5eEFWRT42Rl5OSClTNVF3O2BUajl2YGA+dkwqO1FgZStqdFY/dVJVczo6aUUyPjEsKGkxV0xHWztgVmdVPDlJVkpFNyViYWkxI3ohOH5QW19AKCxPRkZtRlMmc0xtKVJeY2lpPzpWbl4jZ2UrJmRQWVF1e051QzZtc1YyXjNgdjwrIVV5cSRhNXczdD9eYihPaHBrXjExelBNJWZZUT9lbzQ7''@;'; put 'put ''KSV+IipCRH40d0AhblsjLkBmaSVVKCxqUkMveUxrU1N2RysuWCpWUUc9K3BNKXBZTWJiZD5HdmshfFo6ZDduL0BUeUdyU3V4PDdQSk9MSjJ1SikoPXd3Tz4wZiE/RXgzeTkzU3h5dlV5ZC8jKElRfFUmZWpAKi5sekFTUF1SaCtJc3pVWXpvKipdYWBoX0NbN24lOksiQTpqdzBgZD1ZSCE4PzhD''@;'; put 'put ''bzpvXXlDYVJne0p8K19WS3hKRUZnNGltJF5NVFpRW00jST14fmpDYzkyP0hzZ15LUmE8U3Y6QiN+QGAxKEtsWX0iO0FJeFhBaEpYTXQ/RzNzeE8kK0xaTEBCX1RMVGdWUmJReWRzfTIiPDNdPkxPdjhCfXxrS3MwcHUpISxTaSI5KUhVY0d5XlRfQD1abWtUUnQibSZSb0REd3ZqPVU+djp9cWR0''@;'; put 'put ''SXtyenk9Ll84V0Q3WnB0SW5OP2dqeExrIlAySzY+XV48MyVqNj9lLGJpP2RMKHNRWzVEYD5uZjlFdHdXeTNFJVp8cz1waV0+TEttU2NiZ3EmSWV0enpAdnllakQhZTV+Vlh2eGF3PV84ZW47bHJYOWtAbnxyJUpFVyh6bUh9YThbekVialdWPVpbYCgpQFlfT1E9KFtSKUk7XjRoRlNEYTZQMkZZ''@;'; put 'put ''Zkx7Mjdufnp3WGtlO3JiaDc3QG58RXppNXdlNVlEdTBHJiJTOjw3OGEzL2NbeC9YdT9XV095Oy8jcllkdyFNTTIvPH5eei5LQjI0dn12SzVvPiQubH0xcyVGaSZ6YmhTTHdUNCFaenpJeFQxXVdQLzNhdDZsIWB0Q0dTdHZkRDwrKU95RCNXWCQjW1hCQiJifVspRV1SJW98WnoqaylCYTpfIiZ+''@;'; put 'put ''QllySmFjPHYpMUJnP1lvSDA7UXhnezg0YEFvJUg+ZUhoNGsiSXRCZVtmN2htV3k/cSZDI1heK2VTVll5WU5FJjtLImU7Pmx4ViRVeW4sP2IpIzMzdk8vXz5eJG5ZVEQiIlpwY1NebFVffFY9MXhDbGI1QDRLZE87WihyXykxRix6RSlZPnYjREZVUDIxaC87bmhhL0tLYyM5KkMxbXpBIzRkaCxz''@;'; put 'put ''Vkp5WXR3SE00RmBKOE8uel93WWx7ZFN5WCF8TCpZQUpvKE85fjJoWiw0elBGPyYqYz86LzxSLkVSZloxcHVDMiQpKTFjWFg4I3slOkJUWTNlIWA5O0shQD9gJVkvSkN9QmtacDxGLj04ITlrPVtPfTpWNUpyWT5JSDFXV25wZkByNCI8MChCYXxKfVNdUlN3ZlcmR0okNVZzaXFpMWRMYzxyX0RS''@;'; put 'put ''d11fWWpNTXcyfngueGpVbEZLNykpcjsufVR8V3JscXY9JVJacHlAVHdWdSF+RkxPYEskQHhHZChrZj5UJkFhSThSWG1hTDxkczlzaVpHRytoIUJKYjROZVE4R2N4RlhwRDEzc1ErOnxCM18hYzc2VH4sYV5Ud257QE9ddHJ5THliN1ZFQnNmWlZfKTR+aG1WJGU7QmcxUj9lQDpfLGc0RmlbWFFq''@;'; put 'put ''b294dXR7Ll5rITIjUmpnWUloaitzSk5qdHQxVDVUImFybSFsNSp7KldmbWAsPnRtYihLQCw0emQyVCQ1RTswQyJHXXRiMkVMPHByZztvJWpxamlUbVVGLm9yfEc/WjAlSHJ8fH10biN9TG5VUXJ6X0d5OW06Y1p6bGxRM1dofHJbQjNvX3tlSClaT1BaYWczVWZpV3dYSTdYN0A2IkMyZi40QFV1''@;'; put 'put ''SEsxITVVViZRQ1RqTjhfK31UYWp5YWwhWzQ2TDdXL0dXUi9TekcjTmE4e3NOM0o/L3xYPFt8QiVFVnFtT2kuP0MqR0xwbFg/aHYlMlEwZW9SZWhCQj5Ec2R1OHBZPGssO0J8NF9WNFQqPndWT3Z4KVIxKFM9NjZMO1FdfjdMUmdlY1hgdF8sNlR2MmR4UDBOLzFlfVUjfUE7VUQ1YkErcklxWk5j''@;'; put 'put ''JUpaRXFxPVIhJjxZOH5ETCxveV5oaHZJeGt8JnNjLHVAVj1dO1suWVR3YHFecTJpenYrWmJ2PFR7L2NVU0FCdGswTCpgZk9remRtSnhxNEZvaSpIb0BfJD8uKWRMRkRRM0sqWnl7V0ZBVnMxe2JxNj01cy58cldwdF1tbjhsamx4dXc/cCNze0ZEUH4idyldM1YoODU+TWViNik1Q3peaz88Y01g''@;'; put 'put ''USRZU0NHXkRDNHliUnB9Tmk+KypYdmBhck5sUzcpLDJPeVBDZEY0NytkbUVQP292YkMzQyZbUHh7cz9iLj0rX0kvN29xejlMdEY+Z01FOGQ/OkpKTyhdbmllNH5NX2J9RXQ0MHUkJVgvfndmLnFWOmZ2Sl1xQCQ3SXJeeEh7ODlIIyNqcFQ7JFIiOFtzJjoiMlorIzxlcD4qL2VIL1I6ZmpadCMp''@;'; put 'put ''KEZuNWNSRCliQExofDoqUkRyZChGelZfaV1HRihOMV07dDJtYEJuNjJsS11GS3F5KV9bZHxRXmpFSjJrPTEuUT4zNm5hekFrKilGQC92ezJtaXZxYDMveUNaVih9d1VSc1JWLyJlN3gsVyVLPSpEaTlxPUBDWGc5d3AoJjM6Tj9bUmtdOHVrWlRqLD5OLERZK0lXUVtrV2FNamQyUUgrfEdlKnc3''@;'; put 'put ''VT5kTWFQfEllRTZ3LyJQK1cmZkBlOT9YZEFUYmN5Sjl6SCRdTGhOMUZ2PU4qN30uSFZRWTZFSiZTOS9NYHp3NnkqNipdYjtpKzNfUlslW3Y2QzY8Z3gjTFVrc1t6SzRhaGxFfl5lJXM7a2p0UEc+Jkl1KDxCRy9haX55X08zYlhFOC9ZRVFMREN2bEM4TXA2cmN5dz8qTWQsRSlzemJMT3UvRWw7''@;'; put 'put ''O09KWzxjdHc0NS5kdTlkelMuWjlVN20wczB7K0NsZ1pBbCYoTy5LIjxgTk9ZMmF4RWUyM1duVV1yKnFPIk0xPUczRH4+dEZ8VT9AYyghIzhQaHBaeH55d0J3THFkbm8veGlQWysvaDhiYCRxUFFPOF08fC9CbGIjKnZQdzopXTdyLFEqfjdHOlpDbS88Q3t0R1FYbk1Rby5scmwlc1hvJk9JV3FG''@;'; put 'put ''TWdLSDcqVkwsWEhwWTFpSF15dVVoSFFscUNCQGQhKiJgWnZNalVpNSJeayVleG92QlpXZyJ4VHMpQGloeUVvfU0pVXFdInMyOGxHSTI/OzJddkRxT1FjTCp7cyIqIWw1P0hONH1rbH4kNHlLQ2MuQkJXWl5xUzxIJGUlP1ZlQ0JmZyJ9azJPZjhsPih3JlFTRXZiPDs1bUEoU2pGKUhzMzJmL15l''@;'; put 'put ''dURCVyU3dFUqWShzI3lFSlhuPExMbUlLYjpBcStecDBubDp1dkxfazFrQXF1KWgsd1p8IytQO2VMek5HRzRFYzVCVVc9Wm08enc2Wk91NlYjVExKa1RkMTw7NFdkKTBveEtBQVNqVFdTYk5bMGx8cVE1NmY0O1ZpO2AiQ29ATXZ0IlJqYWo4fkFhRyNXYDNOKjBuYk1PdEtxXisraSZCPTtWdzs1''@;'; put 'put ''N2E8X1o2Six6dj06PGc5Xnxbb21HY2ljPGwsOikrOWZdTGYmTzFLM2deb0g6L3R6Lzk6OFVJYyR9JSFZMEtPLnM0Z2hVNS8pQFYlPSNwNF4/aXwrZ0h4PjZXaVZELEcqcmZfWlU4Z1opdF17VHQ/UHtqcGFqeVc+WVI7cmVfZlluQjZgSy9qUHdhP0hzdnJzSjc8em9HWGl0aSoxX0g2UlJNd2Rd''@;'; put 'put ''YiR+NmNTbGh0dj1fQ1d5VE5ARmR7SFIrQUNgTEVlMUd5K2t+Lj1LbiY0NDMlbFYwN2pyT0FLKVA0XTwpPSNBN2YrImMzUUsqJnM6LF5PTCJ+MF9jdmUmZlBdXUMpZlZMZVF3UGlPcUxJKW0/THtqR1NqXSk2N2tdJFFZXzVJcWphKTIhPE17K2poekNBMEFIUXxGPDhgWWNgKyYhJlRCalViIU1i''@;'; put 'put ''eyNEW0gxOmVPIltiKippNn5UdHoqeyZMYXZ1eTg2LlhWRmJXbERGISFdJFVONTVsdE8pP3A3U0hXOFltL0Z8PD4qTEFyZ35WR19zeGEpaWYqNmc9aGAzNU89TGZTL2N6SyY4Qyo4ZVNaNXkqZF1wN1pkRzk6dT01ayNUXm8sPW0raChyMSV3U0lTISx8czBILkIydSZpRCwmfV1zIm1xNl9IQ2pG''@;'; put 'put ''ejp0eVJuYl9rMEAhQkRmXjIucV0/X0kuPWNCIk8+PlVASylGPWdlL3JnLnoybWdHT15JKjNbMFdyUEwkMU8jJHBtTG9xQ2hDJDlXaH1DZk5FJWQ7PlN7JXIoeEYlOl5kNTU0SmB+T1IuOy5BfX4pVyNIXjcyVHJkeURrLz02WUA2WH09KnVNZ2o9PUdLLGdVPnFJPFtgcldodl5LVDJ7PFlNLHRM''@;'; put 'put ''dllWLHc1blA4eyw6NnJhUSR7ZTQuMyQwK3V3SkZGfmNIVG9WRDxiWjZfXWUrKU9tMV15dXxBSzExc1B+Q3J4Ol9CbEc1Nys7Rj9JWCpEaDBXcU5AUEwkezczayVoKU9HKztPdFFVSlttfFR0Nl1NR3EmU28+JWFXWSw3YVBSanowIil8Ql5EOHc1Iyw4a18lalBFNCYyd18vX3M/RiJ3Y0hCRllj''@;'; put 'put ''OH1MNDdMV2h3aHNQdi9Fdm5rT3UjWTZqbjlwSHV5cTFSN0U5UXdBbUx7d0Nhe2UqUEldY3VEKndIe2s4fT5URV1BSjAsOiokYXNmMkgwO0lSemU8WmM4NVcrVXM2eyN2fEYlY1R+LzxvPiEqY1dPJkBGJHVMd14vVU9iKCV2T1Azbit3MX5LNSpyYTJxVWJbMDVDU0d1fDQ6MWF1IllWfHRXYGZr''@;'; put 'put ''UlRNPDBXJTx3X1JUYz59ZUUlVyhZc0NPRmhBW09eTTYrUEhxKkdxSEgqRlpJa01IaityfmRiajZdRzJTe2pSPW4/aWx1RyVMUCxoMnlKeGhCIjJpeip2Ij8mTDloUCU1MU5Ae21JPGo3QXplQWR3cmhHKEo2b00/Km1oMkMhR2RCQ187YitMIkVEdmNMaVQvYWBFT0xYTFE9UiF7fWFQK15Iai80''@;'; put 'put ''YENbMUZPUVpleVU6VFI6eGNjKX1PeytGeHd2UHRvV2VrRVdvJnB5Z0ZyLzp9UC8yaEhSanQuRk0uelk2MCt1MlJtWmBRLmc3YUBtOy5EQTNfRT04eXU2RUFnUHtqTDgkYFdOSHwyfF5WP0pFW25aZURTMEdjd1laU1FKITJFVW5QOE87ZWgxNX1gMD8yVFg1emRbJiZMciQ+UypRREkoMDY5UVdg''@;'; put 'put ''NzhoM1ZwP2tdakQidzBwMV07cnMzOz1bPU9JM2koMmxYeWpRKUQ2dEliQi8uYV18VzY5OF80Iz9eSyk3cURxXzldJmFiPFJNO21jO0kmaT1XXTheX2o5ZzMyOUJ8aGhqO2wsT0cuWXtiOHszWFVLSk92N3p9OGsyL3BuYThxc2NHXTFgKiZmS1Rqdiw7JUJocF9xKltRbm4xW08iPFN6fFg4Lm9Z''@;'; put 'put ''eF5hRVdDMm1id05WI0kiLHp3bW5pS3taTCgrdjxSSmRiVG1AJXplal9rOjxSWmFWQVVsNVR7QFclKSU9TiFDX19senZ9UkN1VU0kck5ddT09KmdwRFl3RFBPXT8laVJpQEJGeWdDVDUhZFJ3OWM5LGByeF8hLC88fGkuP2FhakNyUCJTNFZvdCw6LnxZQEdWXl91fX1CZ0NOfnM5PX1yNlJKd192''@;'; put 'put ''bkg9aDEwS0swQDAzMl99W3c1YEBiPjRxYXM7VGAkUGldOkVEMTl0VD8qQVQzREAzSCpneUp6fkk5XXpvMioiR3s1bTpJQTNecyQ8R2tWLmkqZW9POHNqNWMzT0ZuLi4pP3tbVFk+em8uQ3E/Y2loMSFyTUApdzg3YE1dSkFZblJKOixLQnd5WTpTVnJNako5JFt3RCNzLnx4Jlo8Q2FkPmh8KSov''@;'; put 'put ''LyI0QltzWl9KRkI1OU88Jk9kP2o3VzAqNnRwYHg5R2p2JG84bEB4dW1ORywoNjhPbWg8bzc4WUJaOn0mSDtbQE8xWnkjSHxLLCgvamplRjRSYnpGO3ZKVlUmKEA7QUFGWW1YImFQYnVveWBnLiZbYTEqd1gkWkE4OHlpaDxxe3ciYEFrODw8Q00weDsobTE+fFomR0ZjOHc/PSRHREYxXV5zbk96''@;'; put 'put ''dmxMJlBMakxqbEs4cGNRcS5GX35JayR8YGx9N1ZyMWR0SSNRcyJKOEJzfWQ5ezwlcEBedTVXK0s0ZSJzVGoofXMoSlREI2lBSmlMLDEuUH5hJX5dQzs/QExvK3lbZip7TGBhSTtLPlozSVBxXTlvezRZYzB6Uz9oTFJwTkI7WCwjIlNgYjFUQFRSSUtranNoNShmeilvIXhrM2ptYn1jcChNK2Qu''@;'; put 'put ''KmtMMDtPM2czajc4UlE0TlFqS0ZATDhUOVNCVHhTNzAhJlB9bVFpdTkqdzd0dXFRTlM0VyJWJTR+MGMqJH1xVyxtMkRPKThTNEdCVDdwQ0VkPHI+aGJuWiEmViMpREkjU1I8O3E2cjEiQXVZbjxUaH18VXp3PV1jY1VoJj02dHMkMnJDaiJFPEc/Nk8hKXh8aktSbHYuMUVNPHZTS0s9TGRmPm4q''@;'; put 'put ''biQsJXx3dmtHJV46JithYiJtaERqTjx0RmdTWllAfGc8R1t7cVBBXj1bNCUucXZpLFM+dTVNb1ZYbSVCYSlNNjJxRWB4dnM5QkdWP3lsNiw7ImV4NT5VOHZFW316cHRuTnYjNDlUM3BzZnRHQi9wNltUIntmTV4lMHRGNG0uIShNSXFkWXtnRlEhM3s3US8lMF9FNE11ZiUwSVhFYVB6V3dbPmlI''@;'; put 'put ''W0RTOFdFd3J0dV5FcUomLzc/JSFmTUk3IT9NLkU5Lmc1SlFxVTVtKlZxTXhmcXspWihtXj9jNk5UPCZHclVSbSVNfEA5OnNwcy52SEtNalB2bCFEPmovYVpqL3BDYXxOdEU9KVNzZUpIbiVEPV1obSpycG5xdk9KN15XXmttPj53MXlOUDFdYmIjWnskQlc5aTcvQSlbY3QpfkUkW3Aqa103KnQ9''@;'; put 'put ''Lm1iTjIqLk1bSXVCZ2NZfH1rY1ZVbjc2W1p+e0d3cWFhQG9JeDU3V3hyXnh6JVVGeDhENTgqPVRQUHRiaVc6e0lAQStZb2RKI0pBeFJeXy9jJFRRcm1ILDhjKT9NOTN9KF18dlQpQTM2PnFjXWBhfXRgaioidnduOSprS3Y/TEI2NDhHPFQ3OSFSa1F4OXBxVFR8RiU1JWMhOT02MyV1cipII198''@;'; put 'put ''ckg9OUxNODZyfm1uWT81NWp8Kkdee2VfJE1sJG8rd2VaMj1pYERJTkF4LCpnaCZ3YlVsOnY3fFViMXRYc2cvRTNdaz4mNGopdWZETCkvMlFPZj8wSCR6TixRL3pEc1dxNjo7JmptbVRHLlNpTEM7cyVUYz0hYy94em8zSD0ySnpSXkRMJjllTnpLbHtvIVFvfSQkfG15KVpYJXhwUnpQPnQ0d3Uq''@;'; put 'put ''T0N6ellvXmlwKDNJTlZQMUxfanw3Y3hoVm9oVnZZYX4kNTwkXVdadytRPmhOVCJYTXVFZEpHWUdqeC5XL1ZIP2FNXWd9Inw1N0FDVzJYUV8qWm9laHMvIVpEalZQUCNuImtUYXpJK21aIl5gZipfVnpabDtoeFZ5d1JaSCE3PVppbUBSYiRIIkFBNXs+WnIuRltkalRAP1V3dUUxPENKWV1gXSVX''@;'; put 'put ''MyhrUV4/S0A8OmsiSlkxOD5TW30rZGdzNEg+XSpXXlJKOGBIITdGQGJRbVU6Nmt2bzsoYiQ0eTZBT3NdMnN2dml2aXlBemI5Pl1kXSw3JHs5dSY0O1ZfUFtIO3xXbD49YSwpZ104Z3tKSCZkYGNedWxlcDAkNF9xOnt4by5ZRG06MUdAIXU5X21lPnJxMzZGYnhPfU8lIVNtXWNYRXxETlRaY11O''@;'; put 'put ''RXB6MSxyN3k1RVVQUEA3fEF9Y2JmQ2h3NFNqPzhUUn0hbEdzTH1aRWJJeUxrM3c2KnQ/ZSlLS1pyblFqIk1IOl1jUiZtUDIrak1hIVdSRlRGMWoiL08we0wlaDpaU1s1MHplPmJ7d1ozTU5gXnlHJnghNEN0SF9ZYix9ZlEoK3g7SC82W2QuTWB7ZHAiYzxFMTxqPEZ1MzF2NF1QUH43S1NSY1th''@;'; put 'put ''eXQ1dkxwPDQzSzYybm99Ry4yTDdqREJmbl05XltbbUIvQ2dhVzpHdDczQEh2XWxQQGd9dH0hTEN+JUBVNiQqZENnK1lpemsmfVNAQiskRTVicyZlaWNaNmZKMlMjUiQzfGkxSEJmYUgwX1pobUoheEIpTFRiJkhHe1NWUSV0Q2pGdFZaTyRqSCZ5W2tQIWFMXnYpTWxSLElkSXg0cnRbSGAsNSpD''@;'; put 'put ''PzZHbyhreUBhVGc/cT5xaiRwdlpmIzNIfExiYjpIdmEqbytCbj9zLjA3RD4hYFhvL213SWxDU3c/aEZUbn5CdCxQJXUqLEIoRm0yZm5oTDojfkNoejUoOFh8MiE1R2MkW2JadHxiR2ZBQGRYYV50Oz9GN3E4NHs4RiFbP3FPV0NeOypkQmlCWEthTEBgQD1ENnxYQyIjM3F3WWNofmIhOyh6Yjpx''@;'; put 'put ''MVQ5LDtfY0xJRS44UWdzOyRHVn54R0w6KGt4KEw4Kl0/SWYlXktDLG4ia3F4SSJ6V0N5SVBCcXlDaj5+MkM0VURHSWZqXyo6SyQ+PSksP3xvdncpITgjUkc/bixHanxoQUM+NE9KSVZPe0dBeVV9THdbfXtQSX5gfF9FWlVHbEhJXjdyUCt2Zix8dVJ7b0Z9bmVbc10pKkwwN2V6WjhgcyJKT1g9''@;'; put 'put ''Ul5KMjhwWSU1fTlFbHxRdj06MHwkXmhMaEpFcktoKHNlZTByJXxLdGgkWVM2WEZoK2tlLG8lJUoxey92XV9UeWRNMUFlaWI5IUcscG0oOGBtTWZOLDA0VC9kfV9eYnVOaFFxV3RiTzZgdXM3cX55YjR9RT41U0dsOVRIVk1jeDAxVk45bDA7KW4oa0hsVT59L2ppdFAqV1c1JlZBQ2Z3PGFHRDF5''@;'; put 'put ''fDFXL1ckdDRRLyZvQGdRP0cwZV5yT2t2OHlpO0hJdClnW09fOzg2b3tQbUpvTCpAKTpVNnlMN30oWyVRUnk9OjZyMSt9TUZYdTEvSEd9YWQ+YSsvKktgZ3tKWCYkTTJsfF9keU03Uk41eXd6Q2sqOmpYWHhCZCJZMHZaVig3RGFwNigjV2hRP3ozamlQQTUlVSZ0IiFWTGtPVywpKXhpdHJfYTRx''@;'; put 'put ''aj8sZH41el8valA3RkMqKW5fI35EcDhnPlImYithQ3tDcFpsR2oqT0MjKXR2PzhiMyEwYCoxbihkdHh4IjxdcHF0ZmV8YVhTJjhGVXtqWXVYT15mXS42YztLOntXUUxnNy43I01aTld0fUkrT3RrR2puRDRzTmU1PjdiUCpHSjY9M0owTWd9K3hzZThqVT9MLn13ZVc2LDQ8PypaYEBAR15YO0dq''@;'; put 'put ''c11gWnAsOmd+NDpPZUQobklTQVk/aTF8b29OSSxvQjhXUEhIOnZ0UmxJeywvVHtVflZ+dUk3PVlWa2A0PzJIUTMvbS9MZ11pYk5jbXFXUFF3emlfM1VQNS5yMWlyRCUwajp+aCtaZ152NzZ1KSl3TCFCWVdDUUxZXkxpbUVnJGxkT0xxYF1+LzFWUmZ7dTJoSV99JkYxaCFuRzUveiVnUkIxcUBB''@;'; put 'put ''S3luUHl5RlRSR3R9ISwleCtMYCxvTmVQYzNUTE5jLCgxcjVHOSkqKEFwJSVTKk4xSyw8fSZrOSImUjxDVHZ4OW0kemMqMzdCY1U8SWZDOD8rYWV0dyp4c3kwMFFlSjhtKHxkSCM2OCk6P20ofWNKSDwuZSphakdTfCE+Myg1eExWS2E+UGUsOlY8V25PWS5WZlMweXJXcXh0ZDdHUWtrfkwwP2ZH''@;'; put 'put ''b0cye2ZYZzh3Q1RdYk9zL2lKMXFmWlFuMjJlOmN3RldSPVpZbmw7bkNRZmVQbGQka1M4WHJ5cn1IM2gpX0BVW2M9Wl53YW5Ael1fMDhmcVhbR3luQDMvfkR8WDZfIXZmM35MOWIiZSosY3l7UChCYElEWVkqZWczbT9nZlZCOjpvLi5yPVZ5KmMub1lsays+IUUidmxDcU4oIXZVdXhbXXwwYGpj''@;'; put 'put ''Tk8vSF4qV3VrS1pIXSpgMWB7LlBbQnRgcGRFejApaVF8ak85fUJBQ0wpVGRiL3puaDopa0pkXTZWWjYuWkplU2VDVFRLSVRodlBhUVR0W2xhMDdMITtCK1U6RDs6IXlhVXgmTCEqVEgqOHgmO3Vscz9rNDtZSVZBMThDIWpOdV81PDRkWW93ZHRzZTc5RmxJfm5vO2x0cF1LL048PCtuXTxvSjg4''@;'; put 'put ''YDtIRGdbbHJxTn5dI3EwTH4zdnU1Qmx9akxULih2VnkoIVpzfUBMcyZHS3Z8TTI8WSwmUkhQIktGfG8uPDsxRkpGWXV8SXk3NlRaKmVfPDI0YVdXekl5a3U0MEJXZE1lV0g8bGghQ2QuYztGb0NuMjxdMC5CSnxabzE6R0Q/ako8Sn1daWx5I0kxOlF4ZDAmXX47d2VpOCY5al9DQ015RW5Qdzcl''@;'; put 'put ''cUEpPFU3eGBOUGRucFd+RkZfQms0fEp9Ri9KbHp6MU8mQXVHRz9KUFY2eWJAUkhUPytqfTtLT1ZOUj9lQ0Y7RUlqJitvVTs8d1YzSEMjclE/M1BKYD06JVdjNDxsImNlNXJmLk1aTHczV3d+Qm5zeWdvUjsxUCliW0ImbSxxLmoyOTJyZ3U3L0BVTDZSTT0zPnZTeXwhJU9DIXRdSmRrMDN0MU8r''@;'; put 'put ''elJXRVA+dTwidlQwY2w/YV5uRjtMYVEleDlfdD9sNDFlRUVOfHlJNCoxNmoiQFpIZjVnWlpUeCZhZmJIJFVTWSpJTSFvIn0xfkF9dXFAWTpiQT9+RXZJM212UE8uMGI6TSRuRzdGZiFkY2E6NjRkdG5GdXBUdDFgPFIjan5OLik/azxWNXIpdF48VzU/PjJ2UUlFWFtGWzRmbSk/cnA2JDVEOTlD''@;'; put 'put ''QV9WRk5sUnIzOnIzYGZzV0dwOExbem15THY9TXtLeXgmI21VVHdaZUp1NFFzN097K1tONHxaQFgyeG5CcTwpRkVsYyUyUyhSVX44cVleeXl1VitZOjVvNCR8cnsiLkxqNiJ6d0Y4ZithZ1JLd2woNXA/dHRjbmBJT3MkR1NmR140OyUhYE1gR1I1fHVAUFtKaUlRcCxaM21AMCt9aGZSSDMhNEpq''@;'; put 'put ''bUQ3ak5YXWtCPTI9PUZ3VyJxeihzWmFrc3svRWI0XnRnanI9eXZ1M1ckejQ4XSZdZkNAOGU0Q0VlVlApYUlOJEwjaVQ0VzJVc3V7JltkTitUal8lbWNxRjNJdzIpJDJ2bj1HPD4yQDA9XnpUPCxqSjdIXm1tTCJGbjw5QzhwIy8lMDF1dCROajRlKjNWTyFtIzQ7P29weT9XPTpRJSxgXyRaOm1+''@;'; put 'put ''JH5oIV1MaSNmYyFvcXtnez8jeXh+Rm9TNnRDKkZ8UHRuKEYpa0ohKSNbPiYkNmA6IWU4V0JvaFI/XiphOkh6ZUxQSitNSSIzOjY2fENdREVMfGpdUjxkNkU/YjgjMmJGRTxuUkBILG94MyI7Qiw4KWR4Z1J9eypxRSgxQGQ2JFJ6NUZNOnRFdmt0S3VIXW8jM0FBRGg5Q0grY29NL1F+dTk4TjZ7''@;'; put 'put ''TzVrdGE2Wk1EaiQueDArJCEyRi9RVHVbbzZOS1UyMm9NPFA6JFM+SisvSjAwLkhOISt9KE9XSU1JdUBlKE9aI1V5Z21oQVEmN2kmXkJuVV9ESCoyfiYmVCp3OGR3YlMsYDxmQjliNyNHVWg+QGlsSyEuayZTJWRkXS5dVUdhNHo9Wj1MSEpPY29ZZmxtZ2xXQkB7WnNhU1AqJktVdUMjMWlCTShy''@;'; put 'put ''b2coNUVqX3Y+YCUmQ0MiXzk3P1Q3MHE6YEJ2RnJ0ZEF8ZUdLQHkrV0BOZzA1Xjp8bipSeytNNUZIfVtnTFJJdnx4bSVCb1IsZiRubzVKYX5kMHsoQG1MblluYTl5MT1sT1F5L0IuQndWMUVUZV0xIzZZPW03TjBvWSJnaCJ4bVJSUFpgI010ZSxTSEw6Y2hzITFYMFFbUzFjTmtmMDdFWlY4PG9S''@;'; put 'put ''dCNGYlE9QSp8Q19kN2o5Jls2eD9eTyIqbDxmN19dOitUbVFnOHl0Omkuc2k7QTB4b0hSQCxEQitHTENkbH5sPGF2VHlbZTJzdVNnWms2b1AsNTQ0eGg7YiJxWWpANVouK1deLnAvJFFxIyspPnsldktZX2EjQUcrbSZWWXxuRUM7KnpQTCNKZHYhfEExeW5RQkp9KnQuUU5kPSlTUjwuY0ZKVERn''@;'; put 'put ''P28he205WCQlcklkOWo5b2R5ckwzO31VKDlVeEdwM1pqcFAqcmVWP0IiUFllL3khNCRaPWpPakwjYDU8aTcxR1IiclhYQXN9dG8rS25QKU8hXis0OCspW3ZOS3orMH08YzkhOiRSRjVYYC9aWypGZDBNTlBQMnxUclVOUm01VTNCSnNwMVRgWCVkZmVSQWE3SFBYa09OXnh7XjNNayJsTjhjNUhs''@;'; put 'put ''RltjW29AOCo0P3AmS3omYz0oO3lSd0xkXnNoZWMkU0N1NEtSNWsxSHRpeDd7NC58LiVSVk9mKVQhQzlNIUIvKFpmO31YM1hxIikpc1EiNGs0R0gyKmg+e3kmZnpzZlUjKGF8JH4kKT5xWlNTOTVzbHZaOXl7WzcoUy5gJElVSzoxRD9gMVdrXUhgfiY1dnVJfnBTb3tJazBuVz1LYE8mYiYlMjQ3''@;'; put 'put ''KjpKfWBAS11Ybzg3cXFhODQxfURePSR5K0w0cypPWEA6aHZuNmt1IWd7L3cyKjpady5jMDVLR2RNZz1yYldDOi5GcWVudmYzISM8Ry9BYDBCd0t8P1QheyFoSSs2STRGQHdUJUlWUlA6Pi9IR3VoYjU0dDwzNkImOj80RnBjcDssMiFkczpSS308MExde0w1b1pVKSVnTylaRmdEdC9FbDAlMUhh''@;'; put 'put ''enFiaE5saXdIST9MPD88L2pCQjBhTTZZOTprTT5KfS9ZKTx2LiM9JngmRTRFKU19W2Qvcz1kSURfek0jN2VSUl9SSmZNaVI1M2VxfTNqPWgvJUJjP31iZjVEKXM0SXY5LkEuZW8rQlY1RnRQMXE8S0IiYi9kKHtXUTBKQF01JjU2M2paZE9neztzQSI6RSh8O2ppPTBEeC48P0l4NDpZYERKYGhD''@;'; put 'put ''djJhN1hicSVEI31ZVTk/dS5ebVt9OyxEZ2o/YWMwb3hFWDN2eCpeMWp3LjA4KDtOUkh1WW02RSUiYSpjNEZMZEJGI3A8V0FRI18lJGxqOXEzdDY7ZnVxNmwrK3JTd0l7eWUvaHF0ZGhKOlpEZylkNVtOMldSeDpOLFsyPkxEd1FtWj1PKlgxYV13RjBvT1tjRWFFajdRa0RWOSxnKj5GJFplO0ZZ''@;'; put 'put ''QXwpZTdfaU8oVF8lQnwrRSNJIVAiWUJFSis5TW8iYW02Ky9NUVU6dVNOLEt3NHNQJGxHbiF1SX04N0pLcnsrQHIyaStreCtVL2EmcThkdUB9US4rVWc7bGtjLCt4bThJfjc+V1M9fGUkU2NESXB7JF1ETFRMXWg8cW5OUV9AZXx9YyFiXnA/enlWSCw0KWVGPCNXSEJWLzdNaT5wSHdqaGVtLFkx''@;'; put 'put ''KDI2d2B6UXxKaCN7RyV9ckp0WFdiVkt+ezBdY14haHB7X3d3SkRiPUVRJm1MRDchfF4mQU0hcGleVVtaJm14YmdYV29ISkp+UmFFTkZOLzVyKSxGXjhjc2QwJj19TFhiSWIsOnFeMVFVNkU+PFRzQ2F2ZTVmUjhhZls8dmkmL2BTNHIwfmF8cy5hSTFRSEtdVS5MNXAxQlVrWF5WXm8wSCNJcFB+''@;'; put 'put ''XzcraTwzaUQ+dHJZUjtealNjNj1wY0x3NSNvMHwsXTIxP1AvOmVVSHwjSTdLKURYdGEmcjtjN3pGMzkmPm8kMCt1Mm4rLk9VRkFKSD8xLnBPeT94aitVWllNKmgoRTAqUjlNLDd8OSkoXl5LXXtFMTwvKi9rWm5kYU1JdiN1OltbMUxFVVJHaCJsK09bNkd6ZiVPYyxePHxFaV1lZlAra1J1YCou''@;'; put 'put ''UGlOdTdyJXI9TnhkQE5DbkxrejlnYnRdKF0oaSgqQi5rL3I8T3M6T2Z1eXdwLzpzXm55Q3QyUXZ3b1s8STZ3VT9LQ2R8JUM0V0xveTpPMSM2OVQ/KCZUcFM5YzdMXSx+eUFXYV9LWnpbS2dMWUkhLkd3Z1tGckxuYUIidX05TiU1fSx2dFYqNXtjZEcqO2dNLjRtQm00eVRTdz5eSyNnfE9wQnlw''@;'; put 'put ''S2NnL25VQ0NadVt1L2srUFcmalIyZk01QyRaSkZNR0IiLEU9PD96fD8ueENHOnc8WiVFe3FWaW1iITEoNmh7fSw2NnhoVTwleiF1KWVvVlkheiZTbnglSmtWPnIqIyExLCh3Uys/eCY2c09qRyxhZ3V3VDQ2dG5JMXJdajI0OUErQHdFUURFcUUvWyNwTlJPNkRUV29UUWhEaEt4b2sudFosOzBg''@;'; put 'put ''bTFkdz9gcVM9d30qSk0xSkt3fSxnInhQJDZOVUA8TU85Tj9paHVoUC5LVn51Ui8wXzlvUi9yJXJ+OytSIUdiXzw6VXxDbTU1L1RrbXUubEBiLzpbZlBiPDNoZWhxbnYoLldmTltbRmFobGJScD5EWktEOFluK0kiP2lLUXlINlliPTd+c1Y/I2B0WkBtfjsrMUYpaFl6Y29vY2FiR2xoJSleImxx''@;'; put 'put ''MiEycysraUNzVldbOk0zc2FLKzE8KzFTZCNvKkVYKXh0YmtAMj54XTJuWVBdYTY0QUU1c21JOF1UZEFHSXx+PlFvUU8iWD85TDBnQ140LmNLKk5GUmV6S3JlSGI9cylJMDUzOG5AMFojciErJT1IKms6PkUpT281MnZyb3VUI0lSc1VTNzptdnZYbjtKcm9rcXwlQHZHTWEjbyN6SmpIVHQwNCFo''@;'; put 'put ''d1s/Ikhjb0p8MC5EUSV5OEcyKjY6ZEg7L3VxYyxJVF5henh7OTIyX0xoOWB3aDpDZlY9aHlPeCl6MFtSUnZiay5dN0hVQFN0W2k5Ymdsflp+fD8vaU9aLi8sTnVncUk6KVs/Ky5MeVYsIVkwfTZlIzNULFVacENtejYxZmY5Uil2UWFbRj5SNEpyfVVOT2N9eFFpN00xRU4/P0JHdWoqS1gmK1VQ''@;'; put 'put ''eUlyPHpnRlt4OExrbGkwVWNoai50e3VCa19fTyI5PWtpYEUvKEJpfUB3KSk6P3R5dHxMUWFwb3BTODlqLmxiVk8wNTJIaEolNkRBUEt7JGc5Vik8Li8pcndPPGorIyo9eH4xdkhpbkZYTmFxbXdrezI+Q2hBPix3aWldc3UoMUVlSVZIdTYzJjE/YjNQfk97QnttOFo8ZG5GR01PJDs1Um44O3tF''@;'; put 'put ''dCVYd010PkYwTjF+RHFOSSImJHMsbCQ4VWBDWm91MjV+V1FYKzc4VG92Z3d7M0A+YT5McCh7VjlMOmt3ZllYSTIoNH5+LiVtTDIjMWdmX34vNTs8RXNIIkNEZER5Pl1JXlo3dVBwLGV3OWh8fVtsLDAhZn1RdF17KGdTQ3VWMWowWU5GKnZ3RDp4a0I7MG5bMUFzLFtgQVMpLEpuKUB2KShVQCJV''@;'; put 'put ''JjF7WTVIT1lpM3NhMztsaUIyNV8iIy9ISnMjSm4/W0VQVE9OalhLeXteS1s3Y0k5JFhLXiZEdj5FTk1DeSUze2opaj83cUs3fUl+bGxeXV14fkJYeCV6RGx1QllHM2lHSDZlL3orYX13NnNESmNRb3IpVV8pVVJtQTZ4L2FzS2NwUltZPGJnPHxeZmBAZVc3O2RdeSFkU2x1OC43MEYoZGtBb0ko''@;'; put 'put ''eXxbVV9JWFYkPDF6e3pkLlF2b3R5dzFlWzJsUTtySTQmRDpRYVFuVFQ3NiJ0enNKMTl8Jmo0Z2Z9W2BGbU15eTpoUWpHPm0yOjdpRV07XjxHKXRwQmRmL20idX58TGQwaG5GYUckbT5aUHosI0g5PDM0Ny96L19rWHpTPXJMLGx2ZEZhSH5Bc3MjJEdtMXppdUoxcGZnTHNVSVEuKDBrIyxrMnV4''@;'; put 'put ''UnxYRi49UjkrdzxOWUkrdzRFQm8kPCQ0ekxJTjhQXjUwbTc2VSZ4O1EyWF5dXmNAbypUI2deQi4pYnxoa0EvPW93UCV9YD0oKVlDR1Nxaj5+a0pTSCtHfn0uPFIjP1p2ZSFLT0VGUXh6cXA6JDlSYT4/KC95OjslI3szJVl6My5fdS8zNWdNcVUxN0A1JGV4fmNqMk5gezVdSTY+dEYzVy8mO3M3''@;'; put 'put ''bmE8OUJrJU9QJTV+LnFVYGZdWlBBOmtDYWV2ZCQkaz5eUj1ZZCRMSGAhYU1ILy90QVZuKil1OyprLENpW1lacDlSdEgpeEtXayRKIkN0VX0sMktrZW1tOD1Fbnckdnh+c35kbiNtMzBlSVk6N1BMYCFPPWhbdncxMz5CcVhvQG07fSsoOWZqNncmKG9bQ1dvU3RBU0l1LjhhYjdpMn1HVCVGYm12''@;'; put 'put ''KzFbMHs3O04/SDE+emBWYV4zV0NWbzdsazQ5ciZIK1ZhKmgxa2x4YTZbengobmgiQ31ffFQrWTZLQDNAWG1GX0tiOD5CQkBSWG5ZeHJwIzpwRlNnNV9iSi5FWEhXbG1BN3A0TXdYUkxoOzxSWyhGTVRrNHU6b14qMWNMdjBfZCl2TzwhbHVvYitSSUVBY2VtNCNWQiskVyE+d0wsYGgvJWhCSEZE''@;'; put 'put ''VktINmlNRWFseE1DanNfdU9dJTElbSVmNCIsP0cxQ3tJcl45ZTVRb1h+VXUsLkJzYVs8JiQ3cywkQUZJVURZcWBJK188QF9GTnosXn1mZWUoYi9iQHp+Z1pVP3tbeFJSWj8+ZmFeaGh7XT5qVllrMzhLRzc7WGlDeWR+ZGFVWDQ4VFp3ME1veDd2aW4qQ3ldITFbVkIzKFlCK09pIXdBNlU7Kmo+''@;'; put 'put ''e31XXzVIfGxbezhoTCtqTzs8eV0sVSh4d2hNclVTZyhQRDNOVDU6flJ7Tkg8N1FTSXNATWVpcHRIbmsxP1Y9fVcqSUJ9QnpWLi9dfGlUSWlaXyIqLitAVDpOVG9WcUZxIltuKEx6a1Y0allIZ01RL0NsNVladURUSl5ldVQ8MVZTWURmTGJoTEFjYXdYVlFaPTtRUSo2Wjk6VGUyeUUyR1VyKHFH''@;'; put 'put ''KSYxeiNYalQvJXguMVk4bzYzPl9ZV3pWT1VWZ2R2c0xnX2s2WCVQayhtd355Lz8xe3IlLnlyZ3NPXlhvUT1TL2Z5PyFrW1tTVyJQaDM9ZXc0eFR0NShnUD5KOjwxdy9IR1VdaWBjUVR4JEV6VXY0ZCEpQSNVXjdQXURKVnkvRTopLHteRykycSFLTCw6SmtxTEBGX0w2akokLDQvZV9fRlA7V0Bv''@;'; put 'put ''aWtiRiNKMzNkK3QyW0VmKixkI0pmQlh0VSVgXjFIJnx4NXFCSFs8WDNFaEE0cXtEPGMqPk4rbE5ucGYxUW1ZK3soMT0qYyoyTDtdbmZYR3FsXXZRI0NePTc5cS4rMHc+MGt2PzJLU2g7Kj1ZVCo7Jn0peyFZeEd5RGtrcHk9LFJsbFdAOnhpSHp1TEhbPy9iTkFNRHBXJXhpVm55OSlFOlJUTFpP''@;'; put 'put ''MGdzYHxfY0s6SGIxeE9QJX1VZnw5KUw+Nz1Ycjc1Z2lbSzdtTTh5eE90VCxEOVZ1UFpNJHxebkI2IyhVbm5lNjUvNFFrZEs5JGtPJkg4VlhQZjBCJWMuZCpNITpsN0lALzk6c25yTyVONV9NWjZ1MWRuMzNXTm97TFt5XXVIXSI6cSx7XnozJE1INS5bVDgoL3lVJntqOzlLQVF0PiNmUXZhTGpw''@;'; put 'put ''cys3RCYlfkVYdVRLTTVmNXl4dWg8SWkuVUlVeSg3PC59OHRmLDRYVSU0bCtHSnRgNHFhS0FeYFtUQWhANWxPVHROcTp5OSwubDlHWDQhRDs4RyZsaGVGIyVsSzA5OWtQflJPejJod0JVdyhjZj88YX5PXTc/XzRfP1YiJU9SLnxuPUVxejRQZG1VUns3enFYfDVlLEcwajAvTTMuYzhVI1lAK0xZ''@;'; put 'put ''bkJ6ZFQ7JTxiQ2UpRiNrNTpOTlo8UXd3PVRJaEdwfElJP3guUH1ZdDVNW0dDMTVhWFQkI0d1WSRUYF8ySWhvXnd9LG5ML24mM1QxbT9eYCpKZV4/QF0maEVzUmVrJTIkYmFqO3RbdSM1YGp0MERMYjAwUXkpIk05NiwuY0owUE9LWF4jKkosZlhKP3glU3soaEdyYSQ7M2VEb2hJb0FHMF1aTTxN''@;'; put 'put ''bj9kOERMJSE1I2hEcSs6Rzo3eF4mbyNzZjtTTiF9YERlS0VzKztDOC5MdCpTQCtbaSxRaSNmdjZITX4wMiZAQWNbQWlDK01iclMyOytwfHZkISUqbUxvcVJDLC5GbkM5dF5aMD50S1E2KGc7On5lR24mVmZoPXdgTjElb1BnbWwyUCgzPiVlQy96Z0BgY3QiPCFMeUVlWj4rQkc0aWJqVzliY1NR''@;'; put 'put ''Wz0qUDRXIWZhQVRQRiZCP3MlLCYrJnxPbUk2Ui5lb3hYdG10PUV9Ql15aTslS2FsNjE/N3IuWXhYRys7XUNwUE9eRWMyc25jTDM3M0VFMiE1QmFRc0xUUGh1SDI7Ols+elUwfkVPbCRwTi4iaWE2fGxwPHNDQHxjIWV2QSk0cSxVUEQkenpYYi9TWm52K0JAUTx2YC5jKl1bNTpDRDRzJEl8e0dg''@;'; put 'put ''NSo2UGVTY3VGXWIvYj01RDw9M01xQlk4SDZmTC5SQTwrQUY3aHIwdkZodDlHPksjfk1nM103TzgoLyxCTmxgdHk7OEdTV2NZemU2KndPMFhWQCFbbFFoUUFHK09wJDpUPGQyezlzO2pAdDg2ZiMhbD9pTklEbXpgTDUqInV4SC5ERG9yOEVtYyZAeioqZWl8VXI9aEdfLkNyVT5hYiMzVUZ7WUxE''@;'; put 'put ''Qmd5eGtWUyJLbkM9LnAydDImWmFKbWVuezEjemZQcld4NmVqLG1vSz5mMlh0OyN3djc3LHU1OlhFZlJeN3ZHczNbR0w0fEdAbD9OQilLQ180Zk0vYF1oe04xY3p4QXNZfCRuVjVHJHp+KzpMa28qXT0ifVRRYW82bUwlWFV0RjlUfFFPIWZtKiFDYHZbdHNCWGI8RXhbcXwwVD9hTXQjL24za215''@;'; put 'put ''QHlrdmZXcz1jbDVPRjpKSCNdUVBdT1ZtPDgmZVdeRTpNY35AOHd3UGIxJUtRNUx1OUVoWDNeUmJ8OV4yInd6alBXfHBWSmJYMW5gP01ALFlrKihbe3VmakxDX2J3bWNlLnozbSYhSnRjITJ5VUVffnRHcSRQTm8/Sy8xeCtLNTd8IyJOI2VKVV1dbSF4YCpoTFpmfDxLPCQjciFPNWFJP3VYIWNl''@;'; put 'put ''RS5Qb1pOP3xfe3Zyc0V7Q352TU1rXW9BPDdsfiMuNDN3LlRBUStCc3UsX0prM2slIzIqMiFkXTc9UWVGOWNxQ2toKzRqNGpTL1laaERCfT1+KkJ1Y2t8Rnhzam4wPTNZIT9GS0R6YG1oVVFESWFIQkk8fWxAdkwyc0tYZmJbfmsvTnpgQjpdQEQ6T0hJWzxhJW1CT1JJVDNTSmc7bjBoXnlmRUk6''@;'; put 'put ''Q21ARX1PQmwoWDc5PyhLaTQmQnRmYnQ+TWd+Oi92e0QxP0VdREshKkl2cF9pK1Z4eC9YOkFnLn1zd1I9QEN+MlpjbUJXMDBAMkZ1OThdYVpTYV81eXxQZnA8OU12djlnbmV1S09NZW9ReC5SfCtsTn04SXQ9ayxYRFZuXXNqfEA8aEssZn1MdlVzcz1xN0ZFdCY4bSxtYyUmdiYiSyVPZHlpQGpn''@;'; put 'put ''aU9JWkp0RUNfOV5fbX57MUBbWzwzbWhdXnQrY3ROPVB6NyYvRUY1ZC4mTW0zblNoP30hYXQyJnokaSUmRjZYVlh4bjUuVmQ7U15ATmE8ejZIOmxNRDdrWm52OEVmeCR7RXwwQH1sd1BdZCNaWnZReEN3NnRNOXY3THc3RVRNPmd9djxJI0lwRkR2N2ojTksub2JVQntXfGQ1MHpmakQyLCl7Wzxp''@;'; put 'put ''RFEpRGRlO3dHPWp5eE5+Z3thUD5GbWglbGV+U1FtTm45bW5NZndpfDxBUDdNPHk9RHFJZk9nUEM/eDtNYSJtWyw0LzVlPV19eEchKWJCRCEvIjdbN2lsQFZVSnNZUiRCUDBVY3xVbylZfm43SDRlQnx8aHl9NHcyKT0xOnprV1l4UiluSX09SyVnbElIIUZQTVYjZFUvVExgQyM2WlEpbix3a3Um''@;'; put 'put ''Ljg+eGtAVzFFSmh6WUBdSG1dZFUrNkJIdVpHZDd6W1ZifnZ7LEZBKXZ7OWFIJF1TfU0uImQrLGFhWnJEUHJoaVM/JSVMfGQ6Q2k6aV1iLiVASy85eERedHs+cSlFJmxSVUZBL2peQDMsMyMzezskZWw2KmMrclhrPWJEMW5MaVtjS2pmPixZMHhyNDBjWX4xbV5fQU1RRVI7OFImN3xxTyEpOXxD''@;'; put 'put ''LzowbyFSZ1M1X0ZvZF9zZk9fcGwmMTthK24mPE04XTMwfU5qUUFyYUppX1djY0VsR25Vay9WfCwrRG5GfClvXmVvbEVDJm1YYFZSWkwhQSVpNkVfe0NYPEJ9M0s7UVA5VVFQeipHZnh4eS5yX3RAT1Fbcj07SkdbQX1hYSh+MCp4c1doISt9RmUpITQwSD40cWt8IUBdfmNHKVlmQjheS1pHelVx''@;'; put 'put ''eSJfMFRlPyN6WHUvdHUxbV1CRCZhPDxMPU5AMXBDZFJRO1FAPHh0T3shQGVbLDcoYFF9TyJnajZXK1ZddWgyZD49S1ZuQVI0aXxSenNoRGgzPl9SQTk+WXwvS003OCE3ZSN7KEg+OlhvL3p1LmNEMlpTNWQwYmt9SzZHcj9lSEQpZzdNbWRGakhhaXJzT08jV2ZGWGVvQHhuKlgrQ2h0VFYzKXpq''@;'; put 'put ''aTw2TEFBUnZMdlAoR3MhYjg+emNuKyR9Zyk8IyRASk9xQD5TcDl8ZnNLNHFHUX4sNlEzYSwpITROUy5+KTl1a2kpaXB2VltYJWQkPGBLOFBueVcqUW92PmBhIlV7PH1MUjRoLF84P1lqZ2s6RFN7ez1MdDYpMV13KDlQQWdWdi46ZWkxKEhWdlUqOD5sWE10LDJjfVdFLFFSblhPYV41bEpmRiZf''@;'; put 'put ''fS5nUUpLX1QwfG1+MHJqPDdYKzozLmx0TFY8REo8LyNfKTd8S0trUW5PTXZ1Lz8qRzRqe05xYSFKL2UxRGRQJDt1WF5SMG5VNi4yI2VfRCQwOCEjMEIlITdOLGl0QDxSezpsVHIrLEY+QSsiKHQqfHpveGVFJWo9YX05YkkmXVVKP1Q2WjJFN2xqO0YoQG9sTkReKH4rJWw6XkxnYi5fVmNjVT8u''@;'; put 'put ''Y3BiIXhOKD1hI1ZDWnwzYjM9YzhSWnluLEdbanNWd2ZlPFVkWXltYkJHVFhIUyppNFsjaX1icXImKHk9UWppJXwlLkUqZ0hxOndaTEJTM3FMSXc3fWMsKE5QV1RCZDM7e2w5cmRnL3lkLEZSfm5JbVdvfH1meUQ4eTB4SnAsLHFHdSEzSiVPPlt4VUJfRmV3USNMcDNPc3RXX31xMDUkYU5LOVhk''@;'; put 'put ''MEE8cWx8bjdjUlUqZmg5SnwsLk5mSEIoNlp0WTlSe1ZPWX1TMkhldjV2I30wYCU7JXd0ZWREPFtqXTJ8ZFNHdjsyUF9+dmgvNFhFeXQ8bUN0aiJ3PHdWS3lTYmNPNXlaK2FlU3NHJGR6UjNoODpONVB2TzNAS0RAT0dGMXF0IS96Vy4hOmxkYSF3Zz43dElrVm0xW255Kl5HLDhMNzUoX1tUTE9t''@;'; put 'put ''WExSYkxkP0JYK1hbL3xPaEJKbDpBPENLT3M/JG1deXJ9T1EqSFlFX3FmKDVyU1RDRD1nK2RWelRXWnF2JiZ7ZVlUNmBxdnxuRlkxfU4hLHArIXp+TEM1dkdIWUZGXUdsVGl1ZUZOITNMRjgqciE4KVNOazwvbml6MzM7blJ6aG53b2BKXig2RWRyMV5nMUw3Ond+MFZjdlQvdmQ+TXhUNWMuKCMv''@;'; put 'put ''SXI5cn1qcztzTz1rXz46Tj5OfnoiYmJjZlVuRWNBPWdjZEJJUFpiTS9gLC44M2AmSiFva2lwe3w1UU9HKyVGa2EiO2YmK0pIPFApX2pQTllVSDpibDQkb1k7ZCg2RTJLZGNeV0t0Yyk8R2w5czd2RTRGekZKYmoscj12fFFbNDVTOm0hPjtgOiNnfDh0RVckQzhVTzRzUyMrKTkmWzk9QSFvNUhj''@;'; put 'put ''RTFjJVoubU5pXVRvKCFvO3xkL2U1YUwwLDxqP2E0NFZsU2cjJFIvc0ozKTYsKmZUSDpXZnAmTWQ+MV5IaWUvb29eNSVUWUZkfmlxTjMkK34iJU5rSWlaPFcqcU5WZT5dV2FTOmw1O2kzSWJFdUVYVl9uRTY7Ym5VL1teZz9tYzhTRH5SeFZeMVNrZ3Zmb00mJixVcVIvVWB6PyFSaXhOTFJgI0Ve''@;'; put 'put ''P1FSOTI7LHFsOWA2IzNbZDxLUTt4fVNtPEF7K0R0QltUXkk+PzVrbiQjTkdVLDs/UEosdCN4X0ZUc3w+fE86YW4xe3V7alFqUWNDIVdELF4lfWhiKmk2WDh7OEJFSncoVCVsQCE0bS9fdjQjKEFkbDNNaSZoZmU7TyZRVihTP2VOaVFbMVV6RlIzWyQzOHJ8b0VyQyNPNTl2UFl0cDVSU2g2fU1C''@;'; put 'put ''KiZQWnU0NWl9cXEsRXVjMFZ7cDYycD98USFNL3o0ZGVbSWwsJEJAZiVzRSJxU3dIXmozdnYqOFAreV4pVnFZQ1p9UzVNcnVpSEUwX3JyOUtpRltzdEtgcVE+ejEjP2AsMStEcElNbHxxdzxoXjI2ZzZOUm01O3EyKHdgL3ouYGYvMjIraDskeWVZLDN0YjVILmpJKzZsenBWXShUR3FkYGJoQWM3''@;'; put 'put ''U2l1TTZBYzNYZlhyKT5Hfkg1aHg1YDphW01VazojN111KjhVNz5deUcpTFdrO3NYb0Z4ME5EUWEuK2k1S21WOSRlTUtIfVIkSGZMY2p8SE5DN3V0KWIvJWo4NyQ/LzBBOTUvQTkqO3lSQm1pKS5dW0VFIzgscGtndT5KV30hN1taPChWeEM8c29+Rkc0fHV1RmE/SHdObzhGQlRAd080OU1xQ15g''@;'; put 'put ''NShiayk/VHpHM3Yle11OZzRob3pGbkxDM2RESVRCe3JeYl5gZ1gyJWt9aVM1djpRND5PLkRjUDlXW04xISsjfkhXKUh+I0toST1TcW4zT20sRjJfdmtkcmd4PyYyfDdoYTVVNXB9LjMqajhwYylBcFd5MTZOekZ7NWN2MXNvdEdEZHRFQywzWU5PRFV2X29xa1dvOndSekFHYVMlbWhvN205Z1Qy''@;'; put 'put ''PzFkYnk3Nj43Zlp1XmNEaGRHVzlqQHNRdSJeUFlhUmtqSHpnKnZfdXU4TXNDISZ+PT55fW8oWXtYJmt6Tm0vOm00YTlyUCtgITkkTSFGT3dCZ3ErLCkpR2IySiolX3lLXlpkQkU4cW42USF0QjtsPktLaWwlekRqTEtLNFIuLklzU3pxen1jW3AuN3phSiFRTyteVikzRiVPLl1tXSJoPFsvOG5Y''@;'; put 'put ''ZGM+ZC4wKUpbMzJXJkY3alJLJThDfWV5anR7aytJUmpeckcyK01SSDJFZSV9N3xxd1omMFhSX1lHTVsySGdfP0VHfnBWQmYxVnQzblYxQkA2fFssYEI1Jj90V21PNUpyRUQqbV9eU0BCUDphNz8mX3c2TkpNc19HIiFKUyIqYF9fL2NbZjRnbmJ3Li49QjV+NnVHRVRtSmIxekQxbE1SZHE5LitJ''@;'; put 'put ''IUE9cnkxO0RNVmNEZEpiTThfZFhYPS9SYHtJSndxbUM1N09KPGUrJSVLfDtnLntzSHB+ZE5+ZHBOakpWfmcyTV1Je3B5flJZQHA+NyNVeHhuakkqRGVkOEpWX1k4eFNdZilxdmYrKzxbPis3Y1s0azdXdWJ+cUI9SVltJlZuSzsrNkJXNW99fDN1ZFlBMTpQJHJmYDdVK2lIUmM1XlUiXTFzam48''@;'; put 'put ''e1FyLEtpSGJRKlppY2tdcDM8OCM/OUk1IiNQV1ZEKlQyPzZbcDh+K1dkdF41cms7cjI2MUJhRkU7bUs0N11uKHBDNCg3KiIjUDtmKT9Ed21jM05DTypSTiI8Ik5NNT0jRWB7aCp5ZCFzU2E5ciZjM0NEYXt0M0J1e0cqX1ZWMEpqajd7WSYub1dIMkc+ai49XXBYTVZ+Wk49WEs/bG8oKEJNSTkr''@;'; put 'put ''bjR1V35GSTFseTVTcG1tRC5iU1JRPn5SLFkkeX5KX3ImI2YhWGZufW5MUFBeIzUlM0VjQXUwdExxTTssSUFwPSljRiYxaENfUm8hKjBPWEQxNDNjZTpNYkN9JWhVJXlzUXgwbndpWlJNZitKQUc8NH5RPyZhRywsKSksISg8eClPTUBqPXJpZHJve25nOXtiYDlmSyNCXXRBZUR9SGJoJXVePF9L''@;'; put 'put ''Xz1vbzcpRGJmQiRwWDRsa0x0MkpwQEdxai9aLzM4cTY5eW49ITNaRS9NNUIhWmkvYEZIYkRJXm45clR1Iyw+KSEuRHJRdXVFTjc9MWtML0pZeWBlTWx9ZDBWP2d7WTMjPk1scURQXjVdQSMlTGghaVBEXm5aKFdKNDtnZ3hwO2dvd3cwMSVGfDUpPz9TTFN+UipkX1t+NnxsOFRCMmliMUwzK3Jj''@;'; put 'put ''PCR+RElmVGhCLixOdURJJEwlezp4Tm1TOjh+Z1BhUGhSb2dTYj5TZCk+T0VAW08sLiwzPGpUeUA+QVddTClLWVtGTUZlI3pkbkY6eiZlZEpCUVNaOCE+Rz1uUkRPLHJpSkN7Rk99V0whbEczQmI3N2Vsd3E8JSgmPEZXfjVYL0wqWiEkYWVDQUt5IXtJWHh5QExKWWk9RTNXKkFLSjNqO3ZKUTxN''@;'; put 'put ''blVBKTNAJEApZWkuVD5FWXdbZi4wbyhCM016LDwlOnpBJXBHWHBnPmN4aEJONnMzLHpPVzI0IVBjbU5aVW8lWnBjSkR5Yil7Smp1Xmx5LHUjWl5zXlBhJkdhSkApUnxiRF9qUTt4Z01CJDVfN09AU2UxVnh6THY0YUd0dzYoTUxZbVFCUDw2eStua3RsfV41JSYqLnowKC9mPEhkemYudXRqM1hJ''@;'; put 'put ''Kmg2N056MV0zZitESkZlaTdVfFNrLzRJbSVsZy5OeEhsQ0hiKClyQX5vJUdHdjBdbD4/W05DWy5keSl3aFpDUVo/JE9uZHxYUCh8V3A5b0R4TmxuNHdSQyVpen12KX5ZQntrX350Sj1yR0V+Ylp3fCJoP2ErX0ooQkFCMGgjLlovKXIlUE98MmhRWiVBPnNvRVtCPlgmUioyYnRee2xUaVB1WT1P''@;'; put 'put ''SCNhSTlgWkZpIWlFZDpSd2F9T1RSWSlldSJkMU56c2ppZlVIWT5ndHtxUHFlaV1RMkg1Uk9rVnA5PTtsT2c4N0dTKDU8WjskNzZjN1F+JnJqNnUmR2JlWHlIdkVtLiJBYEpkbFRgbWZAMGZdUHVAYUl0InZ0ezNkSEVbQ2UqI0FDKCpsYDRrZ0UkdHIvezFfRUpCbzpmJXJFWG9JJkFpN09PKDgj''@;'; put 'put ''WyFpPTcvOUU0QUg9NGVkY1Vecnp4WWV3WX1rLyRnelNXMG59cSsiRU1bJiRoQUZJfVZpWEVzTSJBeGpGOEhQUFJAcTdJViY3a0dLL21ZODM0fDtSaCh+MXxqcFIzSDNAczEyYCNqZWt5JG0yQj55UzV8eWp+XXp0SXU6ZlAhKnRuM3F2Q087fVd3eH1oQj04X1MwZ2ZrQyxVKDJCLmpjWjgie0hR''@;'; put 'put ''PT9MK194aHVPV3M3MV0iPDhtRXBuYmwze21LazFEbHBpOCNtUHVDQjtpLzVYfnpXdnNGW20ucSl5N1U2fFIqXjheU0owUUgqJiZfb0ZtKC59fWp3UHk/fmJ2RkRwcjY6R2pbR0pqcjo7R3IqaU1jc2UwNk1ITygxUjVOXns+JWIhXypeZzdUazl2fVAlNnReUmw3OzFZPzJzPztpeykhMHQkcGd6''@;'; put 'put ''X0dCM1NGUls0dD1gUFJ+JjRaSGkiNzFTPUM1VWJULHlUYjpPKVdRNFdRMj0ibnoxYXNtPk9aMCRSQUdDbyEyaTRXTHVPRj9ac3I+Ll5kTyQ9fjUyKE9UU1VEaiQ5RGNIbl1mWS88dGhYfGJLUkdEMXRpY19KO2ZPLDZWSjBncGtURFQoWUQmWkN9YlFDQzYpOi9hLn1geThFfW08fV5dOS85VUkk''@;'; put 'put ''e1hjOUVzaDdtd2lnIjFzY20qQHJOTz5ob2RoXz9nfVIpKjdVNV56SjB5aT0yTWpteTBwQylKcGVxSHZ+VD1WfSYleFdRKi81Q2QpdkJAZyJ3QFBOU0tlUm51KkI1MiZHc3VJXi40fmYlb1ElPyxgS1kwbW44Z15UMn1KMjNAazRwMCM9eDh1SHgiTVB2bzpSazZAcUJhLkBEWXZmXVdYdHRSQTYm''@;'; put 'put ''NWJRT2RoXkJrWGxDNnp8NFZGYTBaSXNeWkRwdzw4KmhDQVU5P1JnTiNJPThsUCNALGQpTzkyR1pAckg9OTA6b2oxbkZuci5FVzVdJkBQdD5NKSk9IkFhREhdUyVqM2JbMjBvVik7UTkwbDdhbD81eDExMyUzSiIoYzh9bndZcDJjJjImTyNIaHpGYEhVe10zQjpiM14lOjFLdjU8NUpgZG9hQFN3''@;'; put 'put ''IU0pcUswNC49OCNPPWJbPVNXcmgwSGNlYkwqJFU7emdadF5yQndjaHBsLzwkRFZ5JEkjPiVTVkZAeTFTblczNXRUL1s9SjI3fntVVihiZnVUVnNMTi5eXWxvOzxSUShjTS9kLGAsbWNGbTA7KDVVNGJvNjFYPCF8e1RXeEYwSW1iciZZbVRXTnUwVGZvQ2N5cmFnIV4wfm51cGIlLzF2ViF6SS9f''@;'; put 'put ''R3hnLzkpSE5SfWx4eVQ8e1JHYSRBPHMpW3QvJiIiMW5sWXVkI0xJTjBoNitzT29SR3NfRFVud24iRn4ldVRUWDtsUlJ2XjR3Pz5mVW1jbjwvUHNLKSVmVkpXMSVaaT9zc1clQEh8XVFLKF1OJmNkbUxKa1ZBU017Ty8lbyt7YE1DOyorNjVqU0cqLEghYDJvcUFEYmFfTnBrOVNOQ2pKdjg6PUd5''@;'; put 'put ''b1kqent6fi46eWFZVGxIVHRCY0lwWUh7amBZVi9XenR1ZzZoXUVnS3ViXiw8WU40cGlgIXUvc1B7PWRjZllmcltDflQ0d2c/X3RKX1pxNSM0M0JHfXwvfm9ML21COSUoeSE0eVduUmJ8XVYqXV0yaitFLDlDZ2VRKiVtRSpTTyhFYS9scDgmMm9xcE9TPm49Rzd7LGtjcUw/K0A0dmcvfX1DeHpP''@;'; put 'put ''fiNFIS9xJjcyZEEsLlMkIzJnd20rSDJJbSt1TV19O1JOZjpBezshSGZTQC4/UERZUGYhRyppSmY3S1lAXSVUakVKR3kmejJhR2hVQHc/QHROaVN+bmkvRi4+QGc5X1NndiMlcmxEd3IuITJoOF9PdkY8IT04e1MuOGhxYWR7aT9Vc1NqdEY8WipJTSY2NTlQflFYKX56OD8lVzljYVNzWlBOOHBm''@;'; put 'put ''V1VzRW9WPEBgNlFCbDU1QGZjZ1YqX2dTYiVWVEJpLmI1P2x3W3J0KmN7bTsxZzZwTDY+O2NhY2B8Mix0TTh1Vk47ViEoUkgjeWNNcmU9eFlrfShnbyF8V2c7QG4yL1E/eXpxWmsjPF0pbj1eOjc3SUZpeFF7YlVCQy8pJilrOX42eUtiPD0sdi5MZ1pYaktlMFt8VyI5XjZjOjZ5RyZ9SnUmKnoy''@;'; put 'put ''fCh8ZCtjYUU/cmNpdF1RIWxISHIlQ1VrQl97Rn0zciZIMVRSaXwkQWAiO21xYSVGdjVZZlh8SD9PPiw2KEQpVHVOST0pazRQTE4uNUdSanVlbCYhS2taQH5Ddkx4dE57Xkcya0MhRSxgUilEWixyNEgxYWlaVzJvVUNkMkRCMTkuNTh7Q25KaEZqT0g7U09ATj15PFBhYExvOm9HQXFpNVpDXz4w''@;'; put 'put ''Wig/UjE5VzlOZDhaSWIhNEcwJEMkUCFUS3hlWnwoR2FKLlUze1tEOmd9NHpNJHtPejV8dy5dYUw8KVFfaSwqKjJJODdyWmV3Z29QdyRQZUpsLEQ6aGorMkpjdFVwKUd3TWVKZmxAM3BeMTo2dExwWGBOKls2VDQheTU9U0AzLHlQLGk5IVJJMEBVTz8kOjg1OEojV25TdkgqTVRVSnBgYFNHXXBx''@;'; put 'put ''Ki9nP0lYR3w+bVhQPzNwL2IhTUl6KVV7eW87PnJpO0lUI2p+WGN2fEFwK2NRZkNDc2VfY1RaKTA6I0UrNi98dXt9N3pfUzB+OShJeEtDOVNEMy8rUiQpeE5sQzovZDw/ZCxlM3NzfHFIYT4yPW8pOD40Xk0vR0JaJStGJSVYTWRbI1B9STEsbiE+aiJ8Yl0uYHhILFY1eWNzOypnTSlYL2s4Nlsw''@;'; put 'put ''NjNzb3ROazBVN29SJjhQaW5vdGl6Lj54YTlJXV1xcldpMXJpPiV+eDBsWDU5OVkrZUxRRWkvNm1ATUVQdU14bzldb142bTF8XURONkkuczx2JCR3Ii5kJnNjTXRNWX48OnNNQzdSJSlBTGFlXUFDZlVnSXR1Kj0kQkVaVkhAUDglTTxMV3VOPnVkc1EzKlgyfEx1PVA3RSM9QmxFIUZxYWpfNkBv''@;'; put 'put ''Kn5TSGsidllnIz0+MShZdG4vMj51MEg4TnJpbiwjaik3a2E0VTgoO0FqdHtuLClTZkBaN017V2Z1V0pxWHRuYzZaSyokYylVO09QWDduSz5RWm5tJnpHNFhvZC94cV5kXU4jUCwiPEMuLFI+ZWIod3pBdDxqX259RFkoSkhiY29Ca141ZExeSEVVdzxdPHkwTXtwO0xqWmQpR2k0QFpFMj12NThp''@;'; put 'put ''QWE6SWxVUzpYKWVpSUpuLmcwYXQqbTAuRGJsWH11ODFoUCNwP0l5Ik8+cjUiQC8pPWxrbDA0YS9qO3BiZGJvRUhDdGFWRCo8JCNDKiwzKlI5NSQ3Ki9EQFMuQjVeXWZ6d3g9WDZ5UCEkZ2JCTjZTeiJEI0VnZEArOG1fNElLSWRbc28qJlBwPlhaMl5nPExwVD9nc1EuP1skbFhDO2Z9WHZnTHxq''@;'; put 'put ''I212Oj5ONEVgJW19NWNqK2NgIzB0fiFha3FsJC9xeHg4N01ucFdMbjtLRjxoWl19fkFAUS5GTHQlY3w9b1Jgel5ZODBkR31udk05TTg/SS5NNXBYNnMxe2YyM2Z6TCooUlpNRiE0a1h2dHg4PmJNRlhyIjpqcDxTfSEpWk00UUJOYzhjMUx1dVVbSk01KnoufCN6ZjJ3bDxsM1FRb0shKzgqQzV8''@;'; put 'put ''WldsRS4wKThuelBOSz93OltfeSwpSD5QKExeSmpvcDtAai8ldFB4ZiU7dlpwYD0rWkhCPmAqZCNDPiM+K1VnflNoTH1MeT9SLlFYXn0mLlRmXUpDUWBAWjpgRCxTbV0/bUpAMzBzKUVAOiRCPEhma0pOPyoxTWFfNSIyMnk1KGI4Y2Zub3w8SEJdfCMsbXE2bCVMe0cqMXI3fipBUiMhZj5QMWdT''@;'; put 'put ''a1NGKi9mQ3R9ZTQ3Nmk6Nm08PFVuazMxYX5jcGciViF3Q01iJjZtTnd6REIkPVNKVW5SbDx1aiFHajFkPSs9ZTdAbikrWXlZPjF8YkN7PyRvPGwzelJ1dUdqamo/dkl4MXx3dyxnK1E5WVZHfEpZWnJaJXJ5U2FjemUscVk9RH0sPE8vNy5gdE1iKW5jOykmUyJoInNDZ3Y7KSlRYlNgQ2NSWUFg''@;'; put 'put ''dSx3eXRwWyg8N3VgOF06cEVCTDVNJjApKkV8K0lgWkZSST95V28qejQzR2pgYX4kO2hyZShWIUpmVXcrMVJDMCRFW2czbno3ZnU2LkNAWk18PVtmSl9TZ1M5JVBFW0REKFhTK2B4enhhWm5Oa2lCRHN6eXp0aGMyWjw6LERaTHNwcy5LK3pRJm93TSVFdDoqPXpLO0dwKUdDdHtaOVVOKmIzYnh+''@;'; put 'put ''PFFpR1JyXVJLJlp3Uk8+QXRuO2E0QUwrS1B4PSlFV14jbGZIeilGInd+QysyKElqQzd2fn1aaVk+S2lkUTJSfClTLkhDOX4iQE1iZWdqe0RxfnZ6fGYlaUteWWdGYGspTUxNezZleyRvSTdKZXdORT5ya2BEOnoqVyJzS1tzV0U2LmZFL0pNSEtVYm40KkYpdWMqXipfMXJ3PU4pXWRTblhIbUt3''@;'; put 'put ''Y0gwX3R7NCk1ViI+OTQpfE4zTU5iM0EyVUs7PXlKOFQyISJWZUwuK01KYnNtTElqPElFMTNxP3N+VERiQ1kzXz0wQ28yRj1uVmF+Rih3OksoXi8xPGw1R1ZsTEl2NFh4NSNDVFM9SmhudT1EWDl+MTxCcU5oeWhDTXh2ZmN0LzU0cUAmdkkicDZiXU1Re1UwL0YlckwueG5Ndz5UfE5WJjxyOkdX''@;'; put 'put ''a2ZGdGZ7K21VSG1+aTEpO2xbQnUmYGF7aCREZyRZdDozJkxRcmZhJGdBW0JvS35lVDtUalkvVHYuWGUhWiVGdmQsKkpJVkpDUCZVbSI5W2ZwOjd7KCFRPy9UMjgwYC5qVDlsb2QxeiNteCV1OzZ9WWpsaSkxfHo5eWtGKWo2YTFsNTlJSTRtKXgrNmJmImpQfDJZSiVEQjNiP2gjSiovMURmK0N3''@;'; put 'put ''QiE4Kl1+QFpafHFqblB9UzM9QiIlNlFDK04uQFNNSUdZNzdrUnFCMj9wX3c4czJIbENmfHMyKXAuP3wyZ0ZOd1hgVW9DPnswNSgyeX09QnE2Oyw0NjFbLmdzXWFuT0JMKCpBZUt5d3U2cT4sPkhfcXM3eyUuWSJZM2NVKT48LntLOUd2ZzZLaW9eaU5eeD1GfHQmOXl3R2NYZiVqUzdRZ0tpVFMs''@;'; put 'put ''MkxWK3BvXy9fbjB4QHQ9Yyk3PT9VSlRvKlZ4OUtWTTFfS1pdc3l7aTR3Jn5kZ1JrUFFlall5PDIuOHBWUS9iVysuKTdQVlJzbSoiISlrNXtKSj0rVVVMOk59Uk5LOTc3cCQuP3FOaSI4P1I3JFM3MnhYZFIyIk0vYyN4YkozP0MuYiE5N1FyWk84VCtCfV02UWI+YmUvQ2N2cEs4d0A0Pl5WXiFp''@;'; put 'put ''M2xRaUc9OD8zNkR8azc3anh0KndQUm1RVCpJXkxFbUllb3I2cSp3aHcrLzVkODJBSkoiIWluNllbPnN2Uz9vUUhEKmcsNnMmQDtEI0IqRjwoc0FGdSpfMFQoZFs7TV9hd3srWXN3TzZaM3llUkN4MHtERHQ2dVlNVHk5ME1LVk1EN14jUDs6UnMrbyNMNGNsaUVYOTNpX2tZIzUjJkcpQihFTjJP''@;'; put 'put ''fGU3Nn5HUldrb0Uifik3PltbIWpubEI8ODlLTTFeeTU9Xm4jQEZYaFhnXm0sT2R1Q1pQaE5WTnc2KnteYVttcWd0YWVWWjY8VGtZUVFNLlJgQV1fUVghWEd3PVtmOlhZZWQ8QTRsWyMycz87SXooczhdV0clZy5lIjZRR3UuOXB+PiRafmxXRUVneFtNOz1QdTpVTHkhQEY1MzRNV3I4fWJQZldx''@;'; put 'put ''PVBiWW59WSgiX0ckbXgxUTlaTnVmd1ZLSkxRPHwqP1peP1hFQ2ppOWQ5M3pbPlJZcjJwIytSfD9GMDIodkE/b1shWXp9djQsK0ghSVtdP3s0Q0BZXlZCRUI0fCl6WCwzYFMhTiNddXZ9QEY5ITszSmEyZDtGZ2t2Z1B0Uzh4TzJMWCNTMm5QL2plMVdaJilZc2VaY2ZRXVBtZHxoK2dTaU04SSUo''@;'; put 'put ''ZGhaJFlbeX5BcE5hZyxLTGxRYSlnRUFEZT9NLFMwZTU5I3lfW1pwfDNxSTwxJDhWZnA8PFluYj83IzhlXjh5PC4ubGFxYy9oJTIoVz8rdUZhN08vfWpsalVvOCFhU3FGbHg8MERFcnZQZzZpdUZPUFFqTzoiIU5NYm00L0Qwd0NBZCpyK0tBLnxQN3skNDxGITQ/aUY9ZihSMkooeWUjJXNVfFcs''@;'; put 'put ''amEiQkhROU1NbXk6QmVVejxJfUFtYyxVLlVXVCxJMURtU3J6IT9SaWhFXyprODJUdEF5eHd7eGlPfDJCQ1o4bktDLD1wOWB5dlQ6eShzZkgsdWdXImRCZy4qdXFlWUxlT2pPP1YzQkMzYDwleyFPR0YuMnxMbUFJIS5oYVdvWFpnUSZJYn1kbHF5PUR6JiskfShBeXJeczozXzQzTUY9OyNHSE4v''@;'; put 'put ''dFNuXmY/ez18dygue2BqMUpMS2BRfmcoJCFHcnY5MnQxajdHbVJgQ1IhSG9zOm8ldC56c2QsKG5qOyVAXT8/MEpeKTVDNWZbe0J7XXUwKnYqN0cuJlJWbE8+KVlDbDh0eS5gWSx6ZGNiSV9ieSVJdGF0PFZuTlMze15RRFd+aC9OcyRHKyFtO1U+OFJHUUhiZFJbbH01LmEuUkpLLlpjbCRCPkV+''@;'; put 'put ''V1lZZUpVdSREfVpzd3pFdnJhW2NbPXN2OClgYWU8b1JUSyMkTFR9MWxYc2ZTUDI4bDJiamJUO0BzenVfIiFLUGBeTW9+NVArTWhwTjZFIkFMOmlneW0jKWQ0dTglaTpXO0hWbU56LlovL09BR1srZEkwdiQoISVNcVYxblVOI28oJSk6RTBFSjFrYEYjS2tAVGN1KzRVO29JSzFFJV4iK15VdX1T''@;'; put 'put ''aVVqUHo8TUw6SlR2aDZ1Xzg+JHRVamleJmQlUWRGR0B8aTF+dCI0ci5JM1NWKS5SKVlUeiF0bz51QEtbX3w5PStdMlcpMWlya2Q2MDt8KF9ZQCRpUyFUcVsmTExqfSspK3NDZVMxMUpOSGEpXzVfcyM2NUZCUU4+Ll51cXRCPiIqdD0pTjEzW0dRSl50YWA7R01udGF9ZGE5JkBdWmNbOG0lVlks''@;'; put 'put ''MTxSZHhgU25YQlQ7fDZdQjA+Uz8+KFZuW2JJdDV9Y1o9OSJMeXFwYFF7YDwocH1MTi5zVmJNeCpodD45TTUyOTwzfGpsPXozQkJ5akRgI3xlRnY3dXs6VktkYUxfcGlFYlBKdCFsM1N1I3grWkJQL2pVRiZWZVgqSmNPO3YlS2NDaF42ZCVdVTBsWl1GTVEkUmxTMHkqVVtlM01hUCswTC85VVRX''@;'; put 'put ''fkxbWDhGIkFpPElpSG12VCMyPF5AcnIjWV1sLDR9OHgydDs0PmBkKUhXOWJXd0JlT0gqKnp0RyU6UDh4VnVyPmFLJHpVbzJLJGomeyY9KTVIJktJZWUjOXI0VD8rSWRCSGJtNThgR01heygjLl8qYkcodnVTIjZAKV9bfXoxbHNUdTtaOm10aD1KQ3UsKVBaKmYqMX10P2UmKHpxeCpaYEw6bVtz''@;'; put 'put ''dWxVNUBRLGEzUXhhaVosUlJCdWMlWm5+cE8hMXRFYEcpUTVCQFpqeGhQOE81JCVAQCxwT04meVFZMHl7Tkh8UHRrISZ6VURkR2dmTHRYP0hGWDNPWj5hel5OJHBZTz9WNkdlN09sbmV0MnZ6fi9qTC5RL3hSQi5MZil9R0BjOyMsYkozQWU7bnxXM11eRCJ+NGJoVFpbRXpvIXM6RUs4KX14dS4p''@;'; put 'put ''Xk9AYil5S0JxfVB4QiUkPjR+Q3d3VzBYRFgwbWhCXTRmcV86MXFacjBiZHxCVEwpZVdmRXpSTk4seWptVF5fK1J4clE0aS46WSZgJktNfVdqRjwuakk8UCxRV3hTLDRDbytFTzRRPjssMCxnYiluY3VAQiJNQ3MiWy59Nnw8ZCtReWRnVX1PMEY8OjFsS05IRnleeikmaUMuM2FYPFMlfWdoS2RV''@;'; put 'put ''ZnhYaUgwLEBYLjIqcyR3cy5NKU06IWhXXVl1ayxuMTZOOS96ak0kXUZxQXBjTWt3Z0BmKnxQNSVVTXxQQ15NNFt5JUB1eGNgfTNYTSo9YGQick8mRWlnb3VQaXtQWTFMaGpKNWw9aj85RnBKQ0dXOjReb317QElYYT10LyFeM3VxZTBebFZ2cHhTMFBpMX5VdEBrWVJwfH1kdHh+Ui9Yb0k7NW0x''@;'; put 'put ''JENNQi8pWTN3dlJEakp6K3Ffd1VSL0B4MzRVNlc4bW42MktocyJWM2M0YGc5Il1rXXJ6dHklZHI9ajU6M1RQfH5HTksuUnk9KGJaKEBjRm1uMCZ5WFhAbTMhWHA2MnM9UmUsdUdHeV1ldGhTYlZ7SGpnRlBBc2F2XjYsM0tQRFQ5V2lEbmUmSmJjOTRQVG0oWHQrQXN7WSlHSkFqLnQreCY9I3ZI''@;'; put 'put ''Zi9QTEVsaiY9I3IpUCg6PlFPJEd4YXNDWDMmeCUrZSUlODshYSw2VnNQKmlHTnl4blFpcXxiXTEuTlg6fjs3W3UiYWBtLjptZyxnR1pORnFNOTtzRntySVYpcSsiRjllM01SSmplfCxqNU1VMjtgLlNXOjg4QDdmbFpsLjczYkdCNCRlZFFCZl40VDQ+PiRKfnZIVShRcSFULzcpWW1RQFN6XTIs''@;'; put 'put ''RmNnKU5UNlV2Rl5UK09bc0Z2TDR1cDpjTn58UCNMOVVhXWUyYThQOjJoLiImPGFrS3RIN3QuWCxTQTpsWG4rZDZkUGo3LyE8dkgzVXxKezAlQmZVW310aE5nJEB1QnlRLyg0diMhVlQ7fV57PXg7KkxZXiU4MF9TWkRkfm1FMmp6VW5dUl5XMSVBI2xRTG5CYmRLayMkKGsyU1BgRD5EODBvb2E/''@;'; put 'put ''R0kwSHc+RSQ8SF87Q1g0aElnLExLTT5KbV9QOk4hWHJmQWgzMShpU2kwUGk+JlJTP3t0TzxOZWk+S15tMUw4a0V0eHdUZiMvYiRgRTFKQXFYcWY3ZSV4XXpJIWJaK09WO1dMJlUxUlZMTF0rQ0s1L3orMDc2RXp3eD5rOz9SVUJuaSF+VW5tcWo7dXFkIyhxKUA9ZHddTCZqbFtZMWQrIU5xR3Re''@;'; put 'put ''c1ByfHZJSm8icllqY255KDRtWSg0VSxmfVV5LDlFKUh+STpIQDNtNyt7UX1rfSVVPDlkRzM6VWorQ31wKmYzWjt8YWdbcHZGUzs0MjpbV1ZNP2h8KXZmeDd6PTBpMSswK3EvZkRUZH5UUGJzKn1NK2JfaChffFtuS3dsOHtebVZmV0Bkc2JXYStqMVJbUmpIbFdDMiFFJldqUDlwSXlsemsoRjVq''@;'; put 'put ''Q0Q2MTNxUnJSWEd4bF4mby5JXWxNM0pNOkQmbXpGTnhEZWdoQ3J8eV5sKihTcmgveXV0RWoxLzZhSyF7Q3EoNnl2XXEwQ0M4UUhMTDZzJVNXV1ZlNmdzdSxRaD5CfUQ6MCk5SCU7WEIvR0tJU3dOKWBIYlUmOnUjUzJ+YjdiUH1vbkcrUkVxbDw6TTpxISFYKy86aTNNLjw2dHpxaCNmUkhCZk1f''@;'; put 'put ''eXRsb31jNFBWQCNWS09eb25DZnFxN2psVGhMVSp3WDBsXX0+fHhNKWBYME1iUzI+fXZnfE1hUSJ4eylTckc/QkpQeGJ2Y0klKF5OdGEsZUdlLmFuV0l0VEF2cDg5Z0pqaFY4YCtqI3c1T29BdU9hfFE6Y0VbaWsqI18jXlBmVW50RTZNKUQkaVt1eCNFSC4vQDJgbDpAZV1TcV5eeUBuJSgyLCJH''@;'; put 'put ''fG9nPjNxIWFMeDo8KHs3dUkjbWFoZl1YMTBGLilzU158VEQ/WFtbPSZxd14+YDZoKDg+SkV1LCwxb01jcWp9WlVVPSspOXc5a2dTeDBMKjU7P2NRYT1geEZIYlAibkYjZ2hCQGE3cjhuTGtkVnIxUmVCNl98WShHV01XfXE4RHRuSTxfYltFW2UlJSwqKSQwbl5NK300QDo9QiVjU2Q4fWQuelFe''@;'; put 'put ''JHU2fUc0RXhpRTpiTV4kUz4jOShJKns7M2VtNiJPLjZOR2VoWW1vQzxaUl9vcTYrZSVrJnQ5YiRlOXMsL2VgUntoeUU3Wm17VDFgKEhGKTh2Vl1kN3hpOlV8QkpbTk5uJi46e0kmYnlOKEJuaHRSUU1ZSjhDeUcmIVFiRi9rWXU9eH5HX3B2Wn4/Qlc8dTtWT3U1VHhHS2Q3MUJpVUJUUz1XJXtu''@;'; put 'put ''VnxEVzRLNSRAPTd8VWs/aUFFPkxrPm9xS2l4cEBSWUNUQDwmPE5XW3RjTzxKUG5Cb0lbcE12VmojcFsmYl0wRGxsUjdJd0JobThMUE05flhEb0ZqVk40Ky97XzZ8OnlyYWx6ITxmQlIhTWtgVHc2VzBuQjp9dV5fck1UKHo/QntxaXwiQXREPGJCOURjXnpdS25RTV5Lc0k/V0Eze2x4Z3lPajY7''@;'; put 'put ''eTtuWXx0UyE+fmhgPlVvImFzUnRDR01hOz81NFU0cVpETWpUfERdOjV0dkQyQGZLalVxbVF6NzxCKU07dXEzfDsmMzFuU3t3aD1WeytlK1BCNlc0XzFSbFI0a3c3Wlc2eTp7Ln5NPixRak14KVBTdVhKKSRubjYiXl5IMWBWJWNlZkAhfXs1QjldaWQpayJmVj1KUT4lVEs3JC9jfURkPX0meXpP''@;'; put 'put ''aTxWRTohTC8rZGxVPUcmZVtDJXRtI1MsW0pdYXQ+W3RDUU15S19WI3cyY3M5Q2NfITRRKjwsKEY0YFpxUWR1QzJxPDZRP11+SiFnYFIibEJEJSJVcXJPKWxlSkQyO1FxIV1XZkQwZVozZFhUY1tpL2NqJWcmR3VWI2UhXVM0TG1wVU5UZXJQTllxTExNelV9JC82RlJde1V9WTQwS0hgPWJBJEhB''@;'; put 'put ''UWMhM21PTTwraF0jNzVYL1R2Pi9IPEA/YmlPYlBlbj15R0d1QVo4SnkoYXJoRV5xK1F7UDJqakYsS2xMbmxzOyx3XTlwYnd4ZHh5eyprcmM4LHoyImJnZHJlLFpsSHMvMSlVWDN+fmN9NU1GQls+MU5fI2xlbTNgMDM/MVVkblRvTU53NVtZbF1BYTJ5V0d6IkFfQnFgOjp3cyRDeTZtVWpDQkNd''@;'; put 'put ''Q3xnbTx0UWA5SV8wLD8/PEdgXmA9IX5vXykpRDZMM0l5XzN8SXsjNiU0QXlKU3pfaGMwbWdVMzg6VyJ1SEU/bip+LiFUM1UxIkY/byFic0hxOmpRMnZBdzE1cCVbW2xMNkd7XWdqI2ptczl5KUpgc25QKF1wL2VNU2RSdH5pREBEcTJKOVRAfHF8dWJVI1lKc1lXMXopMjtMSmk2Y0p1ZXcrNjU2''@;'; put 'put ''cDlnPFVueEc1MUdDQzRJPVpAZF1fNUYlS1VjcVNCJCZeKSNyekgrblM9dTpiRiZXNjE+SG1OdFdXUEU4UF5JV0lkdkU4clleUyN7JWdITVtNXVEjKU1CZTlYaFUuMShJZ3RKTTNrdF5vNnlbOWxRYG18a28rNShKPzwvWGNOT2hVN0dUTmBZdmluP3kscn5NWEhtTl1zQnFbK1tkOGlTfWVyXmQo''@;'; put 'put ''QCssNHVAQDdwS0thPXwyOWV0dCpJTD0qVVs3bTU8NitZU2dsKCVkTHh+anJPQy5kOFY8eUx5MTVGQCJ+VkZWLlgwTFYqUCp0Ly46VXxkX0A4QmQrTEs4I2ppQyErV3BwL0xSKUR5RSJReCM9RDY7PH46emdjVHlXbkN0T2JkRFMqWjgoJCk0Z3VeLzhjdmtQTlFsNSw+OiVUTTZLTVY1Z2BzSi4/''@;'; put 'put ''ZDx8SEBWLlt4KjRWaV58KE1zWW5qNXh5S3FefkV6fDYsRUNxRmQqTy8ld2NBbVpCU35EM3h8cSpEVm9DUzModjhFZTFKb1pOcy9rUjFLNzlwam4iOT5VT1UlbWFBXSlOZ0RUaWpZSSVHfUZNPF1ZRDV0O3d2JndiVUZqYXtyYWJiZDwiZCNLJiQ1UUBQdH5sTmQ4NjJOaXM6NUs0JD1qOXZ9XkN3''@;'; put 'put ''LyRUdiJXTSI6R2UhOiQ9eFZxYUkxJFc+ImNKcC86SD9tIzZBSE87MVJiOXRCYFpYbHgqQW44P2dveFgje09wITVoP2FUL0M9XW1eY35MfSUpcXMhYnR+YSQ6YFJWRlpdbHl0cEM9QS9iITRCKlBWUTQhe0ImImt+cUFgZWl+LjgwRnJ2ZiUobWc1Q3t2LF9WOkYrXjl+YyNheTNWdzdsejd8NHN9''@;'; put 'put ''KzorLlhxSVNRM14kU0o2NG18SnpJcjA2OnRTLzFBIlV7NylZOyxVeCp+UDBuZEtQZ11EJU9LTlNobDpqNnszITp8ZSlNS18xb1A1KD9deS8sUXFHN0JpRnFNPjdVO3AsR1pIfj47Szg6PGl1KD1IO0AzeDQlcVc8cT5mMW0uWUVYVGtMZUFgTmBhUCFzPHhCU1dhdGNuVGdhVDhzZGZAK0UiKDB4''@;'; put 'put ''Tn5mbUBMb0g4JjlYSmxHMntHSUEieCVfb1ZMVCssWjc0XkBqeUkxKEl4PHpBZzhTcCxZfXJpMjwraFJbKj52KGJGQGRNOC4mXiRjbmZSSSZQZURJXVMyRnM0JHQ6YiJOZHBaKkRRSlZ+IXxUPXF8LCxWRFBhPU5WeiNxX3AzNEI1clN3VCQxUWB1IWZnKGRpLElfU0FTcEBaV2IpdHVsJW4kQ0V8''@;'; put 'put ''S3ooZT97PGQqY2tlRT13fER5UVtoVVV+aVcye3hsWGdwb2tjPEo8dSQiS0BRQSskcD09cno4Q3VqPy9LL2wsV3Y1OT57bkdhZmx+cHYvUkRRR1s1OWBJMDw4WipgL2podkU3Kyo5RG9MZyY4QEkwXy9tYHNvVkFAVmVhYy87ak0uQF5tT11sJFA+YWFnRXpwSDJpIiNbM2lgL1NDPzFxNXQqaGRB''@;'; put 'put ''akF3ZSFkZCh9TDJ6LGYlS1RZIyZDUSMwVzJ6XStmI01sM29NXXJEZ3EmOFR9dEBKL1ooQUJ7dkcvdCY1PVduXno1KmleV11VYTN0UGR2JEw1MEA4Q2o2fWUpfW5jPF5fdC4zUW57YkEiJm8wUE5pVil5a1JMfGJdSi4yfSxUTzBlQ3clZFA8LDBVPXhhfTFgYClqKmJ2c0JRQzc9UEFUSDF0V0B4''@;'; put 'put ''XWtVaDt5angkWlY5SSk6aH1lW2FdQFRrTTtoSFJ9YzB6Pm9tcUtnLldlWS5tLj19VlpjLk1MOFkhOVt+UTlFTWNJTzdMIUJsWUNINWJPTyV0UStwYTxFRyUwTmtUdWdMYWh6aGtmJlJjeiMxNjd+c1ciQzpTS0libzpRbkxwbk0zUmh9I09ffSg9Un1jM1hxJX4iUTpZNGcrJlNURDZmOlpWMTlr''@;'; put 'put ''b3J1OmA2Xj05dFZGKkVaITh+LHpjfHd+V210RGtWN10jejhCVEdTTDcpUSsvdW81YDkkNCU4ZzhSP0FnUz4zU3RuW1JeSk1CUSkuKV1WYytLL2x3VGZDWmI3TkpPZiRwaFs5QUhtQ3Z2RCs+W2pyJFpsZmdDW21qbWY4YXNDKnZWfkhMW1VHZnJCZn5LXU0iTWwrXnljPyV4WThab29dcF5CXW5e''@;'; put 'put ''LlRBfHg/UThdS3gjZFNGb3k1O0omTiV0dVdhc3E8I1U7OFZwekdBJSttbFdNQFczRGxhfUJ7azYmPGRUZncvbj55anlkMmVARj1bNyppM3B2VzxgKU5IY01fLjVEcUcoWT45TE96M1YoISg+aWZdYGpHTWZ7ODA8MU1WM3lJYGg4Sko2L1ZbPzMxZFI5QS8hOUJRaTpCW3dwW1ppLjQhO1t7RHwu''@;'; put 'put ''TjM3d0EuLG43NDg2R3Q6VH04NHgpMnNNYVJeTE01Z2NicFsubHdeKmRRZT5fXmNRcTAwVVo9PSxWNGZbXT0qeC8qNzFJJmpQSXxIIUE5cClSNjlZSCYkN0N7WihYTE9LTV5KKW52fUosTE5kSi5ZN0FSVG4jdjAwbkxoVnZvW1lqUktmW1RnTGpgbTZeOWd9JSMxcjguSSgrOz1zOk92PHs/My5b''@;'; put 'put ''ZnFCVU19NC9EYHA8NWd8fm9qM3JtW2swbVpJN1pBaT5NckJQKkNJXi9BPz1RbFZDRExDKndgaztAKTFPQnQocDpEUms+PEEke2RMRF5gM2p+akNvLG89NTpTT0RGKjM/cXlRe3x+V11CWSQyeHReKTU/UFpRSHI/WC8wJnJiUndiUiVTIWc+TEYoRn5Db1ZXNmFHLkRreklmTGc3Z0FGTHE0VGJe''@;'; put 'put ''R3dfcWN1cE1IKFBTd2ZhNGclYjVQc2Eja25pcjFZN2FbZWJsIVlEIzpLPztCNDc1P1R3SnxoSXYuVixKLzBKQFdVVi9uPCF8RSNmWEdobTYqJXs/SFdxL1JjektYZm9AW2BYYDY/QDtfSnhtWzFFN0srQCFDdkpjYHBNO2Z7QEcuJFY7M35xPyZudHNZfDpGa09uRFlsQVlQLE43ZkFzKEI5IjRa''@;'; put 'put ''dG43KndANzFDMUIlRWR2Rk9wWCI1NHpZK0tRYmR2TG51ZiNGXSY8SzlJMyVFVW0me1dFUXB1Qik8PnA7dDtuZHFtVHoqW0o2RHouNDVkdyQ3QFM+RiVIZnx3ZHRvfURmTUlQbVlOe1V1WiU8eWZCVCNWQkVkTGwxUmBCXTRLLkE3ck5waTt8S2RSfVEkNlprRDB0OVhNajpqbmJ9WnVPKCVNdEJp''@;'; put 'put ''ZjZ0W0A1c2IkKkM8RWsifDkzM0o5Im1pKmgjUUA5JHQ+dHZvfGA7I1FMTXkxM1hjZT87SlovKmRkeURpfD8ufVlLJmV+TCx2fUt8QUx9JGBtMiMlRiMoREwlbCRzaHdoXjRLbFs4MmM3bFUkOCVddGZNPkohYyx1TmUjaX1RYG97c2VLZksiVVs5LEdLQmFsQyQmcGRuUV1oTDFDdCk/L15xKStz''@;'; put 'put ''ZX49WipsZFdlU3hELCFmaTZRX25fQEoidF4yMWYkSmIxPj9NZ2VEWl9xJEspd09fWCFBLkslbzp4U1p3PT10KEssYjNWJCFPXXxoSzZFc0s0dCokU0VFT2lXTnN8cik4bClefjZkd0dwb3t9bzA1djNBWXd+O1VDSz83K0wmIlc4c1p8dU1pflIjRHghVmQkZkNIfEVPS1lFWjhrSDlvMFRkZl9K''@;'; put 'put ''RTB8NWV4LzAhZzpGXT9rWSRHP1JaXTtTdFZdLGJ0TGZDaTdXKjg0WENtP2xyREtHODcrJH0kMiRDJTpPbl1rP3JbQz1zcXc0IX5YanJxWThQbmtFTyFnSz0/X004filuZDVtbilrbkYkd04lc1R9YGdueVJ5UlByaVAqeVo1V2hAY0lXPE9rXkN0XyYlTmFZNlp3Mik+THxWVHkrOlQ1PDByYF4u''@;'; put 'put ''d0ohTkQ/U1Qrb3NrYkNuS2QsWUddTng7cEh1Ly5iUmt4RFVtMnMpRG9DcH55a0krei9STkNkKCEhTC5VJlpTJGpsdWNQSFpbeEdHR1A+a3IsOVhlJlg2TFt8U3NHVTgvMSkuYSEqPSgzVWBNNGN9aSheNGZ2TDdXSSElPXQ0TC5hMjpVPHNoa3U4blYqKy5tQjVnNyFZaml4dyNJJWApRVVHQmN9''@;'; put 'put ''P1o7JldmSCkxQXNrKSlqIys9QGcjOXM1M1pTajJed1ddWXhQKEMvITpoMExRRmdNYkoxI2cpOSZ4cCFIazZvRE1EcypGeWVrKWYpK1tGRHVRPFkybCsmWzhaImw9LGFMTUwxJGAvVXUxTmp1Ri9mWmBZKXxEfCxIP3UqOVtIIThmaipyKT86N2VVM1JDNkxGLEBUeCgzI2tNOlosVjVVVzFKNkcx''@;'; put 'put ''THUhO1FxMXc5MlVPUG5IbGAuLmdTPkMkSV1KMUpxcXROLFd5fkJfJGlAdkpZOkRLY09DNTRRQDpQLjZfKW13VTl6IjwpVXg/OTEwVUQxaFY9cFJxKj1ZeTMkeSxCY0YlcXdaYnVwSHxlb2QiaTokS0VDNk5CQFNwNjFfe0JDNnk9KmBQUWpWaXQqJDFMW0B3c3JyZlZrWXNeNEhmNm1mUXRXbXBq''@;'; put 'put ''YUA7KHJiLmdHJTxEeDF1UHx2PmBAcmFTUlAvL0UpW10qMSNuP0A0NmtNe2FQRGdZMl1AOCQ8JmosW09NSChGb0F3bWBZVVAjfmhfVzZ9fihIUmgzR1dOKHZ1U0doX3xaVTVTfiNnbWZPUXVJSn0kSnFDQjcjVHpQXklpYz55ciJecXx3fXcySyl0L1FQeERHJUx0Kj9qVUp6KVU4WW9dQjdvbU9S''@;'; put 'put ''IS89I1d+bzVtKS96eCsqW18rSE8mU1BOSVNuVWRkKUxJUjAsc0I3LjVsQ1pgVXE/RU0xfVA3M1d6dlBndj9jZ35mfmlUSD5pLzZNYUcjXmo+WUVIcDpuQjMlTVElRjZdMEkxK25CIUZvKTNZdmN2Yi5teihAbDVSRUVrRFBhY0Y/VFNgVytNbitzKHNjSSRFV1cpMFF3L0UrJnx9NHU/TnFja2RU''@;'; put 'put ''MT1iNDsqSVUoM3QuYH1jcC9WWlMqYnM6REhSQG5IbzI7aUdGPGJucShFS15KZS4rJS9FX2U4JENiYXc2PitHcCUrS0RneTskP0ZdNEtpS3VzKXlXOUJQYXMhYnV2I05tXUx0eCVwOy5uSHN6Ij42MmwkLHhtVTc1Rk1obyEybyFUVyEhWEIqLn4uLCV6LHhFX3JYb3I7OiF6SE5HTURWSFViW1Uo''@;'; put 'put ''LChlZDozU0IwVTVBQCFbYCN0bE49UDBNITdnfkh5UF9DVDNDY1khZj9WSCRXN2JFS0hvdXVzS0thLmM6TUdiQCpyUTZ4S3I0b1A8c1ZkLixGQVBYUj4sLmtJWEpBfVZ7clh4ZjN1UCN3cnR+PTZEVW5zaXouS3RtbE1SMHsqLEJGfj8jalhCeFJLQyxSKTp5MDp7PG80XXIoc295bEshaS45eHwk''@;'; put 'put ''OWpwOXVePi9GWikzYDJuPm9DYmE8SiFUIldNSWJGIWswJltzLGhKYDo3X2FmKFg+bXtQJD5gUldnTTNXbkhBPm5gKWxveGl0JUN4Rm9GeFFCI1cyfGkkRklQIi5+PE9ka0ZXajApN0klWHVZfjNyYisvRV9BaSxUOG4/KFVRYkdVTFsxdVM2K0VqUG4mc0l0Vlh+WSp9VEshV0M0Skl7NDwyYUpr''@;'; put 'put ''ZmJNL2B1IkpoKG88RGhMNkQjYiF2T2trTWlLKnFqdER1Qykzd1gxfWhWSSIyWl9VNzdSKFc8Ikh0L11jfXpfU3Q6bmokLkZ9O0lsWE9VOms9fjxhOV1WU1ppIldZQW41d3R5fiRBdVM0M3BWVix4JEUhOjtScypuQi8/R0pgRGNoQmRwPHoofHd+RylpUCYqK3BJZmA5T0h5NGg/cSFGV2gqOl5P''@;'; put 'put ''L0QyenlFW3lpZXB0ZFc9SG9JL3dwfWtlKTAhKmIlN2VAKV43b2JPaUI4ZUlfcSxNdUV7bSp9WFY4bmh1SWc/MztwJlB5NC9dajhDRmBBQVIzYlIiNHcwa2d9fjBOcF1KIT1ZR2x2VGReTz0+KFs7ZTNdVD4lI1UvIkBbTW05cEF7dUljRClqcjVnRHBFfCR6eFFgQSxSflZDXSFfJGQ+aWYyX3Vi''@;'; put 'put ''WWdnVnRbWFMiOU99X0teczFWVTFlOjA+YHd7ImxfWiJMc0l4TlFvezU3algwWVk8VjR1KWptKDxoJTE4e11be1hoPmRDdTNjT0M9YEFocUVyVnNiLzN6PX4mdDxWZ1RBYWEoW3w/U1kjPCFNNiwqY2BBRndLZWpMMnxIe1JEZSZxUikjRmNvZDw7M1dWfmV4eHtYaX48PFU1fWRlTm5xK1YlX35V''@;'; put 'put ''cklmU3dmdmgqSSUqU0ArMCgoMzQlLmtVXUw8fDxXZVoqUTE5bkB4Jlc9fS9YfUpxIW1BOlJTTDtyPng7eXhzJCRENTAvZGFTXlJFKCorZ2AjVGRDams4Im9uWD91WVtoZTBqcEdtSVI6aWJCL2s5ME5OdTlra0c7RmZzaWojPDhyals/X34vcWtEXyxXQE8oSnNnTnJEfj8oKlhuelZlS3MwfHNa''@;'; put 'put ''a1UrQDA0NCpNeVl6SFBHWlNtbSQxR0gsUSxydzFvTDp9PW02KjYqeExVLHo0XVZRSV5WbS91Ik1jIU9RbF0lK0ZeekxITnQ7TlUhUzcxdkM+QXo9YWh9KTxwN0E5NVtNWWlKa0JVLDxRYXlyOFsuVXAqL0YpIlNkKXdxb2VpPWlWYiZzUHNYPHpnUSFmMDppc2sidU5vPFp3ZFssKVk2L18uYytG''@;'; put 'put ''YFtVcCw5MUJfSyVta3siRzsuOGlZZ3IvUlgudTc5V0JLQiVvKE9TbyJqdlUzWnloa1pwel9JbHhgNTRpeWUhcSxjWDM1R0p2NHc6bUw+MVVoIWVNYkc/U3k4ZClUUW5PJVlEZiZhQTElOn5FbkJ+cSxGZmU1KGIwbnQ8YVE8Wl1hckNpI01JNyt3Sn5lS3FUVHlqSWpgRSNsZmEpIiE9REomKCJT''@;'; put 'put ''MlpxPnI/RlJ6ekEhaU0xYUl5fXhiSz5zdz1fWmxVXkEwW1tNLGVxS1NKTDQ4VXJxMTVwK3NbImNfPjJfJjw8PzU8Oztjej1AO0J0MS53cnJ8diplaUFKblM9XXJUeHUkaUZpUG57OHc6KiwiW1R1bG5HUktDTTsrP0JVQ3JkT1EhJnlVSHA0JV1uZ09PfTR7PXBqc3MxQ2MvZDY5cio9aTVQQl5I''@;'; put 'put ''aWtXJXg3QTFtaX1KbFs4PipoZVg6a1BWNFR7U1R6bk0uLCMqXj8kNkFsVilOKHIpbFowT09rR29OblpsTTBzOF0lb0oqKlNpTzRVYnxpXjc1VkpzeF5id3JhfEpjYEl0ZjVzfFBHckg0NHdCIXl4aX13fUJ9ciw+ZGVTN2xdd0ZSeXdEb2w5JlolYVdFP1AyJWMyeEMzL1FnLiImd3AsVWVBZXFB''@;'; put 'put ''SGlkJHFBKVUoaz4yOFkufSlBNTguMGBxVSxsXjg8dXZ3PzBCK1g+VFhfZEtjNF4qVnQyeStiIzs2UTZJOXl+NTxidkJEc2VpNDg4aHpXJjpBZCkyPXt9W2VRZiFZanxNcjZhJXB5bkFaNWpHOlNjbld4JkxYSFNEUnRVJEY/dmp6YE4pOGVsZiFqNiZgZnZvc0lGWD05O2hMcCFvY1ZQRTA4SWdb''@;'; put 'put ''b2I6XyFAdFhNViR3OGNrLmttZ1pvTzBeJENjVXVSc2hPX1dZWltnRDt3P0ZDJHVKYmZjQShyPjBDUUxiKDYlYC43Vl0lUXdUXnJlJXJsSyNLZjQ6QTomUnxfXV5DUm1qPSo3TzwhSWtFN25XX0F7UXQ3eUo7cH1JOnxHdGB7YktOOVtyWEMpQlEhMS9iJFM+dzJsPDA2UjkpPExFaWdMOVU6RHQi''@;'; put 'put ''TDc0UEl1Pk05KV5gMmw/QSw8RjMvcS5FTHI1SWFMVWE7cWR2bDUsTGIrM29XSmxsZCxXN209P21YOjt9b3xkRmxhO0RnVU9PLG9lRk1OX1NkfiV0RHQ9X24zayo0WUtbNFMuPC5qLzp8XlZScyxNeUN9JDdreCtae0FkLkYzZ1JUfjleUzQoYzcwOT9pJmM9VUswSk8yOXJYTDFgNjZufVs8ZnAl''@;'; put 'put ''I1AiVEpgV3ooIVQmRldhL2whW10wOSxWImUrc1tOXXk5Qj8walBnL09vb0tuZzcoS0xXWytFRylbUE1nelIqfX1EKnV1L2NJVVIlNkRJVSElcFM4I31WbV8+XTJ8LkhPREFJQXEySzMhL00yMkdpT19TSXBmckpwZHVyU3MqWHQyPEQwRVdOMFMxcVhPeHciaHlKUWpEdVFneFU2S25Vc2FjfHI7''@;'; put 'put ''IT56bE1XWiJ0UyFxTXBqSUFBb1JAQDQ/RyFLLFo9fkJ1TWJkUjo+N0IwSEtHIz8wOm9POHdwPGpiOnpOSVVWT2xUOC59JFUwaD5wWUhTKSklRXNGNywrS10qTkA9JVsoNXlxVzx1I2EoSFozZm53bUB9Yjc0TmNJTyxKSENoWjMvU21dakt2dGlEJmB+O0VtT0c9TGlXazBpYTo5e31ZNGBebWs0''@;'; put 'put ''eyg2eTJGbiU/NXUub1RWMmZeUE9zUjhWOl1VT3tuKHpeSGlyX0BmRXdCaEhROjdHWEgsWWlUPUhEQnd+NlhAKkoqOT0qc2xNPE06QnYwJEl8eEE/e31sQTx2LClBMyIvUW0wIyN+cmBHL0wzWmN9Y2U3bnJBVCljYWYwN0wiV25qc09oRiQqRz5bXSQuND9ZWSMzWSYxN1d8RS4zTT84VzkmXU5m''@;'; put 'put ''PDQ/cF1SeXk2LEpMe3EkYGhsT0VOUTZjPCtSZ2V2NklFSiUlOiU8cU54JFtVSXFDUTJAbCVPPk1WIntxUEpwdElbYmAhaC5FfmI0RUY3MihqaSxUUjMmTko5YmdqM0I5LkFFSEAuTj1qdUhjbF5ELFNuSlJGRk50NnJ2O213VCMsSnNARz1UO0MzZXpPaXx9fkBmL1hgJFo/cnxHPH1iaW9VVnlQ''@;'; put 'put ''TUh0dmpyNV1ySUt6JChdVjo/Xz5ZTjFVSEk+QiFFbGQjLFNMQmhNXXJfY3ZgLEFNIkNBK3IsZCU8TlNYQzpKNEt0TzdHTF16JGBJIWVYeVVFJj8kZlYoUyJ4I3NgNlZ0bTYkbm1VVyJnfX1rNVJSK3p3LFRvUF5YOkI6fjp2bCo3Rm1XLyFJQ25KOX5Lcj1vLHxzJkp1RmJCfDghXT9jZ0t0WEBh''@;'; put 'put ''cXBJSChFTGVyR34vfV0+anMiW3tLTiJGNWpNRndxJXBhKzxVdG8/Ml08XzsqZ0haVVg3T0lqKmFNb0hBMzFwJmQ+eTg6NH5ycVp+THJBPmtKVUJhIX5aXklSOlQ2bTEleThITTh5O1JWUnR8aihLWGkuemEkZjh5dkY6JT03P3txb25vOEVEKm1sYEY1LHxOUE8pYnNmUzg6QSpWRHAsTFlEYm8j''@;'; put 'put ''TW4qVF5fU3w5aXM+MSJhK1tKcnY/b29PbTUqRlkuTCx9cUY8ekkkVHhFeWNjSFZzam1fc3taamcpMiozbG80NWwqRXNiI2diNyVZfnFeKCYkOGpER0hkditRUHxkejBQIXIpQnhCKkBCbEpqZHp3MSh4dlh2NWNVdy5lRT50bUNuUDZnIS9eNn46c1tWbSplSSRWcWM2OHgsRyE3d2YrITxmY3lg''@;'; put 'put ''aXRNZDovYX1EcWs+Jl5bNitkQWFfLyN8RF0hWkZIfVEyKiQ2c2JXZEQyQGx6OnEobHxJOWtkNjU4MXpHYFB6OjA1eHAwWGVTXWJGeDRCRkkoWmFxfmEvJFpZVFpLRW9aKDd+a05IUGgpen4velhzcHJsW0d1UzA/Q2xeJFYhK2ZyN2svJmlobGxFQEEqRTVBYDJTOUwpM25peEFbSUxlKlJ6JUAm''@;'; put 'put ''Smo8NmZvfClecFV1cD9TTXE0VyhOPT17LF86N1NQS1FFOHtuNHBPfT40RS95a3c3bW1aZE9QInhYRHhYWEwqa1ljZyMoR08yKU15Yy80JFZBL24keDNIYTI9OXRgYT08Jkk4MmhVIT5sK30rRCFPMjljLzYxOF5DTlFpcHlOZFsoTyZwXzh8az97P1NAZGAkTUdecX04VSFQITdES3FfdUk6bjw+''@;'; put 'put ''L1MpTVlSQUFFVj1mT35ycWhhPixPWEJBY1ddYlJqRT9pY0B0QndCT3ErLnIpYXYxX1BIKmdRcyUpKnk3ckNwenlzMUNLOWJSKl1OPDZ6WnhlLHZaM2NkKEJlZkg9IWxUPDRAbFRWYVdRbW4kOEt3JjRkQ356RWNzZ3MkQTB2K01sL3B7ZXZUYnpTPTkqKEVXV2JLPH5JJWp8U2I7bmdaKFExaFRf''@;'; put 'put ''dnNjRV5rako6YyJLPkBoTlF6ZSNQSTZvVW5YYj9ne2htdj55cnJ7cjtOUGgjQk8iNHIiLy5vRUtZXTtHIzokLHNPenIxS3ozNFdlcDFJLlomNj1WQSFQTFN3NE1ALntLVztuK3tMTlAwfT1rfTkwQz9lQGFDV1lXe0ApdSFAIWpuQGhOUF1OSDpEcDxAViVnPU4zXn1ZXmFsVjJ7K1c3SDFrdnVn''@;'; put 'put ''cH12Xnt0P1ZvNCJeeVNCOltuNWoubSNIMWM2eF5+WFBzTX1HZF9UKlVCSDs/Q19ucHVdRzRTKTxrRmRvblpvXnhyIS9MMUNXdDNiKDpWd11fczlXXWEmVVVbNHZIdFhUMm08b3Q4InYpV350Nkd+MWt1ZXJRRzpZayFXb1pNQj90eXE8WyhjVDB3XzI6bSkrVT1XUC5wd1hiKVByeU9pbjAvcUhv''@;'; put 'put ''LjJpcXYoI1M/PGZlIUJaUEA0P0tWXTQkMj5SeltnLG83UHJAcyZiIyQmZlg2ZD5AW1RaTkdRXlprVF1tODAvPkdLYmhBLk9KSTRCNj8qUmlrVGlPSTVLSE8weUkvIThKMmxkIypPKkkqUU1lZnBHdG07Ql5wVFssa3wvJFN0amwkbCJBO0lAPGlPXmE0eCV6VVQoKHFTQnRyeC5lPlNlNE1mJDxs''@;'; put 'put ''JG9GL1s3PWRuZDhRZnJ0Z11tZXRpUkksLkhCQHpRPCZpV31faWUqKCU5QkE2Kig2dl9AJVgmVyQwSDpSQFY2QkR6JSh6L2lGNHo/VzdpVTlRSUtlW1NEQnwsZVNUJCtTeVM/RFRrfEBZTTJWal41L14wRksyeSkoJHBjQT5mNSUuK3ovVGkhNTtYWS5aMntrPmpvTmFkMGhqIiZAQ0spPkVRc3NE''@;'; put 'put ''S3pzS11EPG98QFdpZld+MnRJLmFOLE1rRE56XjwzLEghe0J7cEBkTyhORiY2dXxlIjo8bGZeRVtSKExJMH40ezc2P3JaSHNBMiY0fDtSImpIeFMqailnKG5hTzM7als8TWdbRVhWQWJGSy58XXIwVT4wRXkvckhLLnx9V203dTVUKEF5Qy5uRylSVm42Tl1OK3xQZzdwbzpRa1dvcl5GfWVCUTxb''@;'; put 'put ''ISp4fFNCJkw0WiVzYyo4XVVKVilfLiEvXzxGPlZxcD5SNGIwX0s/fis4MUUpamVGd0chOUB+e0JuIzBgO2BeQU02bVEqZzlrLkZYRDRKdixlQj5jcC5wO0s5ejtNUihsQ3tyJjVsV2l7e1smWkNjKzBrYykmZFJBbkEvRzovNEk0UCMrMmMydUwpczZFWV8oVUt4STB6QlU0ej1YSEM6YjBNU1li''@;'; put 'put ''dT46SmheQWxjV2RVZj5sWUJSTTpjKVB6Imc2MTRSKTN9VytuczsqM15FTVZkdDlQcXJETWUhNWZOQyo4bzIsTi82IiZ+bThlWH53al58NmdWZDkpLGJ6L0gvQlorRnJmMzJTVHhtfWw+WD17W0hVbUVXancxMzAidCxmMlIsZ3twWVFRSUpGYjNAKy9oWT1Xbk1SRURAVHtnS3dDUC9zQGEydSNX''@;'; put 'put ''Nn5eZ3N6L0NaYU5Kaz1OVDwkM0woX3tLOHp4cDM/XTZQO1lhdyVmYGZMTnpHJVVnUV1zbXZkcE1sKThWeUpTQ0x9PUtscWZfRyJ9TipvPGU8PWFyeCVvazQ+fn0hKDA6bCU3RjJJJXpdeTl+TyNKL0gjaW44IWF4Wzo0Iyg6LCV4TmhAMG8xQ3AxTD9+UzJmV1VhY09fb0IyJTcpSjcpXnxISDQo''@;'; put 'put ''PXVHbDMmdWwpLzk7OklWPGVRSjQqXyt9ezB3QiFyUUxZMyZZfkhKJkJFWClxNmRRSiw6U2ElZ0kza1RNLzNwQFRedmBxKkUuJWo/IUpiaFJsPWo+QnxgcmReQXEzLntiQVZrMUYvcntHUWIydUwiV15dY0N2UXdrblBpY04sU2I4Vn56aWQ7fTBKYUhJMCksTClQM1RNMHtDW19GU09YSX0pNE1K''@;'; put 'put ''c11LcHVNIWJ9dEBORC4jPWtbVUxzWUF7M2Z8MmA/STFyYStYUHlZO21pRVJ+ZGldeX5OYD1eR2o5WSFvZmdyWndbQ3xTelIwLkR5JjlkR31TNy84SWd9SVBeVzlzNzNjQGQ2MUBOJXtFZypKR3ssNktWPWtqYTNwRHJfcytuRU1GYWB8d0NsIVFhajNPMj4/XlNfQF84Jj5MQnw+XyJhQzRCcyp6''@;'; put 'put ''dGpOejlJQkMwSWRMckwyV2dIaHVgWHNmUSExOD9iRi83OkdpJFpsKyxbSCxDSEJjdXQrQCZSa3Y+b31RIWdZYHksZDZ7ZEJ5JWpGSUQlSmRhUm5pWCNMWz48XXcxOnI+TDFZRj43XVAzSTE+UUApN2lPfmtEJiJPMCwsQGVZMTVBWjwiMz5+WU40clU7NW02NiwlbUpgOmQ3SlQ8bk9zLHQrU2Ni''@;'; put 'put ''MX1GeyYmfmtLODJuTzAsdCtTYzZJe0xVPEtyRGpdbzh3X1Z4P0NNfjRBWjE/c3lNUDhJLDRPIUN1RytWMClAL2k+YGFJUHhiK3A9JWArVUFaYjY1ajE8Z3U+NS9uaCgrfjl2SXJUPVNmRyVuan1YTFk8bH4rT2YiJnVUZld3YDdRZG1OLmlsVG09SU1gM1hQR109RGlgMVkyMFYzQy5WZWdUeXk+''@;'; put 'put ''K0xGTDBnMmJSKyt5WiU6NUomOkxKYmN5MjJpYGdFL0ArPy5lYEh2NGJTNTNZX2JnciU7X1NlKCkjMUwxXlVZTENvbUtSSGZnQ2VSSFh3RSshb0dFWV88JV58dmQjW31+PmlWaXNrUSVSYFRhbkt3aSkkITJHM2skMVMzMiRdQjJuc0c0Sn4pQFowWl93cVduY3EvVHt2ZThkQn5yYDgiJlNGIkB1''@;'; put 'put ''JDdkb1VXZH50RENlSVVKYEhjUSpwTXN1SShJU2E4PTt6LHNNeW10al5kX3Yzd0NnKkshJiNwOSNCInNtOFFpLnpyZ29uej9PPW59cHY/OHBbWT5WUWk4RUdUOXRQR1FpOCVuV2F9Nj9VJDpkci9qY0J0Zn4wfm1UZllVeElPR2RNe1c3SjFacUl4PTEwPEIuTUo3KGpYXlpVQkloSEFNVD1WTkpe''@;'; put 'put ''VlA+cktUKjNOaXY+fXhyVjsmfE5JT1IuKU5+RypgYCtUL3FYT2UsMztQZS9nbU83eSpNQjpkJXV3O0lufH5ObD1deCNwOTlERnw4dV0xMTM9UDFBa1UlUWxga3xiOWAmfDp5cGUxTDhKXylLRzE8SyNkUT12dTIldCw4KiRsV34uR0NtYjZiOmlvVVh3SWdQRURtZVJBOGdEayh+ckcpUkJgNClP''@;'; put 'put ''PTtSTiM2eV8qeXAxMmZTTShUVE4wU1A/OmQ2RkdtaHpiO2JoI3Y1Rz5nUnRtNldOT0VQWk92Yn14OlkpNiNHMXNkPHZFX107bEszIiY/fT1OdDMsTncqQEg8bzNCNXc6cHFFYERTaWBpMlt1ZjtoVXcyZCskPlB8alZqcExoeFswdlp0VilkXmxPS3VDJn5zQSNQd0BPOyUlVEJnTV1jQmk9ODh0''@;'; put 'put ''RVlbSVFHUlUzV3ZRemttWl06R0kzV0A7YTNCLipQOn5ZbW40QzpndXQ/X1VHTi4qa2pKcUVnRXppeyhKcV5fSXJENHhuOyxQYSg9VXI7ZStmVFgyX28wK3xJX0ljJDdtNjNpcDw2ZXRufWQ1RnBtNzJPdlh2T1Uod1Y8Xjx2ak9LRiEiRG4xVWokfFEkdGgoLzJYJSFOd2l+bU1pRF58cE4zel56''@;'; put 'put ''Ojd0ZUxxS0NdKVBuLkFrYzReU0AwPjUmQjNYYyUpS3s+RGZpLmxKYUcuS1cpKHd8ciI2fE5MJHNGe2x5LCwqVio0TjtFKmtNaiNhW3lJQl84bUxGOUdPWCN4KyVtZEcuSWdIRVErcC8vUi4/UiZDeUgidUUuSzQsdWJ8UzBpOkdDcTEyXkR+PyF3b0MwMlBUd0VOUFEjYFJTcDx4YnMsSjNUMmUj''@;'; put 'put ''SU9eWSNaU0dVTSlSaChJW0olUS5lfm9rLFdOV1VkMWJWS100entjXmE+WUArKnl8VT19SHEuMm19ZEI+fFNJR0VIWzwzbXxpRz56NU9NKVJVbFssRTp6TFRiPGxQVUUkVFBwMko2e1pbSHZpcCRFLjFNVj4jIyZNOyVCPi9lUTZ4WXE5KHJBYlNtPT5Qa1NPYC5JXmt7JTpzV1I9Wjp8PSFtSVlz''@;'; put 'put ''fT9lfjUoX08qZndZMm9wUll8em57Wm1SPjk5Z252RiImciR6d299MiZGWSRRRyZBcE02UmJCazcxXVpxU0JdWDMhUCNQKTQuOnUld0A6JGdASl1tS3M5JWU9bT5ZMFFJY2YmJlZ8OEIjInc3fD1eOX5jck0uJUBpPHZ5Rm9HeF4rUU1Gb1Q2RXtaWTdyTX4pUm44QStveHArVShJc2dvNTxGZjxn''@;'; put 'put ''enI2OyxieFA6UE1WL0wpUllpMzJgeT9JbGpbfWBQMW8pSjk8KjkiYFNPXy9jJE89IXptMT95fElaVWhlWGtTRVlfeDJoTnlvVDJbcTNlTzhpZS9QKHttOy49cnNgayFeMlhKMHxTOnpGNjkkSig3Xjxqbi5NPkRUbXF6dCIiRGh0eDkmfWEwVGx9NiVRNENNfTFJMXlKRDJhQEFLWEdxQTNtMVgs''@;'; put 'put ''V2JiUn5VKnZ7Pz9ATCsxRUsxMTxieG8oWCEiXjVJMGBNTUUxPWFpdWNULylyJGdoSGU5ejp2fFcqRUlhSyR5Ul4oXXI5X0pocyJOM3FoR2hfNkBDRDh7Mzw1QmN6VzghOSVsNiF7SnRhZFJGQ3UwMm5tX3A6Mz1EXnF+OU1yd3NALGhaRXFEbn5ANlIoclUrTj5yNlRZOHAzM1QzYlslOy5Zb2M7''@;'; put 'put ''L2pbWX02XWJOLi9VXiFZKVYvPTZMKypTNX0kcEJoPztTTlAseTs/RnBubDs4YyUqQVAzd3I4Iz55bEJ5LH56YD8pYkBTTzQ/cWYvVzEualNMa1tXWUFhcE5DQWI3SlRLdTU9OWF+XTc7M1l+fD04PEtyRU18W087Zy5Ze3JHZTJAfl08cmI6IUlyX2xYLi8jQVo2Kip7KWdeL0ZXZTkvYmMhUFoy''@;'; put 'put ''SGpGdn5JI0hpYSMxZSN1c04iQzZ7LmYiVyM+WGwkQjFGVyR+dCxmNH1QbktkZlJuMiYzaDhWZmg4XWtNRyhddDw5STtIJUMxXXBOe0RTbWFaK1c6ODZkQkt0KGVqUExrdnVYcnhkcjQybC8ufnhCOU1weD86STFUKERRNFpwTmhdOCV4WHM5fEBZXV8qUGQkIUJjQFJAc2UsZz11dTB9QztnRyQr''@;'; put 'put ''bEQrN1J7OXBVXno8e1tjMD1HOWZPTn1rOmRAWSVLdEsjZGBsWWEpY31iaH5Ze1skZFEkeSwhJkkhMGtXLk9kUUxkUypKN0omPz4xeSljPXMjXUJdeCVoaEJwflMwfFA4V2JRXm1kYy9dOyFma015JCN2cUVGJE9IQUcmbF1rT3dZT0NNJXFZZUJIQGhVMExgQj5dYU1pans8Syk1ZFdzJmQlVjhT''@;'; put 'put ''T2B5MWhuS259dWojLG4rI35qWlJoOmBDVi9ka2lhdkZIS1pPdlA/UyQrJkRaMTxMYX5WYURJMnxrfGBvaGFbUGFjOHx6Pn5mUU14TyFufXZMXnszKW1kP3NOLmJ1SzRYK1hMTChCSGloSyFPNVZEdFliMiFJMDlZVVorXzBdQnledj1VKDJgaU0+ZV91OUBCWUFTe3xXWD49XzVwS2g/U2p8am9h''@;'; put 'put ''XUM0TG8wWGQhLyYhPllXakpTXj92RShsMFc2PnlIXmJ6c0gvLz1oIzU6NiRrXkdbQlUubUVWUzAvWyg2bz84T3B9PSl9P3d7MXV8OkdxUTxANipjfGtNbUJRPkRkYVVwQzlFa0BObV8wO0RzUDpbKSN0I3R2JHBGTi48ZkN6ZzFJOVhsPT48bDFeVm9+aE8jMiZScEpbJEJ6MmZyKyp+WUl4RExn''@;'; put 'put ''fWRRaXNHJHwiYX1jbn5HTjxVfEw0aUU9ZShDJSRBRWtUQkhDO3ZvOH4kXlolXnkmSWlqKT9HRFR0OH52fHsjWm1uZCtBY34rdDh9TlcwSjpGIX59Tm1ffDxmU1AvNSNhO1kjRkc3XW4+QW1qUEhzdXVFeGN3I2cpT2pJI3syP19wUDk7MTZfUX4wVkEjeWkyfXg8QFdmfmNWbzw9ZTJSNF92U0t8''@;'; put 'put ''SXhTUkNTKCZNMixXezkvfTZrY2Msc1YzU3xmdC5XQW4oKU47ak97YTlZR0ZPdk8qQWsmY3c1SGUiJiVleGloRUhFS21ZM35iZTIySDlbU1FSZG1eLHJmPStZUVVHbW9rRl1bNUZneG9SJFJZPT1fLls1dXNCez14I0AwMmNhYGd2VV1edTphVzU8NT5LZmByS35ocE9aXSRaJWUmRzZRUEAha2Mq''@;'; put 'put ''QllafkcvTUAyKklvVkNgQi5genghVUZ4R3JaaS9kNC40bGdseToxcFd8cn5XbWUwVTdPUy9lZyVQaTtGUypxOURFV3NgfjApRnYlRUVZdE1YREFMKzJpWXxMcyUyOD04NjJlUzlpZ3dQPk4uMGhRLHc5akh0djU6P3F6QFJnNnY4cUtVOilaXXpYfHhCWDQlPjNoWD1UQmpRUWREO1NXdTlkVT5z''@;'; put 'put ''NHMobjBlem9PUildYSU4OVRbcChabSxwcHpHcXFxSSZ2cnR3WGppX31HSTwkbnhRPCYrbEReXTUoaCMlYyNNNShIIy5+bUgjTEVmJF1bMnJgeVdXb2BMd3Z9dnNufTVIIlp+bVU+cGFaWGUofVtxdVhzJE5rYW5+T1M+ZilnaW9ENCNdTW5IZj9hYWp3azRLVXw5OzdiNUFuKDlyeTpWQjVscDsz''@;'; put 'put ''by4vLjhLdkFyU3h+dylra2VBMXJzKiEvVVpFSX5ecDVye1BkUSglPCx7LGd4P1NXa2diQyFYO3Y9KWouL197az55cig/e3drYUx+LkJGd3pkYyRFRF1pJW5zaFc2dVY0LngjVTQ1MjRPQ2JCdHBwVFU0UnZvcHNDaGR7fDhXT1F+K0BSOjpzcXxXLHNUMD5AS1s+aVtSbyMmUj5mbz06ZHBlc1Jf''@;'; put 'put ''Mj85NzliPTk+UlRxdDJeLi5+YDsyS14/d1pbaWBJYmpWaEQ6clVfU0ZLPiFrcHVmW2FOaGpqTVI0YyEmRi9VeHdOSC5oJkR1UEFfRClfRU41Q0owLHMvekEoOl1HbCkhdjImREFXZXE0QFQ4d1RzSnU6Yy57amAmTVUkJGkwUXQqcihjT0FtMSg6a34+Nk4ofmdBOUtyczlOLi5mYnxBOGg3el02''@;'; put 'put ''Mzs5SnpuJm5ZPUEsXVs3bTcwZUNTUkhyOGhjIkp0LkRoOzQvRkAoN2xBc1UlKkp2Pm1GIyE2IXx8U31oM2tmTjBXNXElZHhfYE5mekxrUGlkbGhufHglTl1Hd0dmLnB4WyJJPGNER3IkOX1OVGtyKl8qXWg6aT54WElfe28yOHFsPnk+Yzs1LG0sMjUuS2xbbk1XaDJLXmhWVWY2Y3NgZTlNclMy''@;'; put 'put ''ZGl2ZUxNdi88MkgwfU93T1lkfDAubmk3aU9XK1BkaVluXX5oIzMlUyQ6RmZEJDBeeFBNU0hrZngjfCRJM0dMV0B+ZTpeXjY2P3smKUsuUz54X0wjekVOanNLIl5od1UsLCFze3MqWVVBUkEpUCpVQllaPjBsPFp7Lm13Sk9eOWFiVHtuJDhhPEI5Pn5GcGNLTW5WKXNUXVdsU0F4eHZQR2k0Z0dF''@;'; put 'put ''YUtIKEIkKS5mKjJyJXViNXtdUC9XL00xNHNHMkR5YmBjRFYscE4ualYuTmxNaWJsPE8jSWQpJXBQbUM5T2BmR25QUWZQNVZjRXw/SldRWSIzYVFBKmo9eTcudTQ7S1A8eEcqJkNiPjU6flRoO3A2LCosIWRUT1VKYVt8SHhUSVBKZmRgIiFlfmRRNyV6WihxRFlvcldCWmIjfU9bUGhKKDBmUjt4''@;'; put 'put ''a2d0R2F1TGckYmlPeGhuMFEqbCkoaEFiaU94aDlxITEuOk5QUmlUTn4oNGNzd1dmfktPUVhnQ0xYZ057WzBvLCVqPlJENCFefjMwQl9CJUZwPy99PD5mJk0sT28oMVNlOy9+L1BUYCxHXi5NZSR1Rj4jLndeYHRTRG1PT1t3YFs4bHp+KXN+N2E3LiZFbVsvbHsqS1MoU3pbbFFybE0sZV8mKSoo''@;'; put 'put ''O2BjelomOj87JXk8eH59VHNSIUxYOlpAOTxmMlhqT343aiw2N3dvMF9SdUQ2OXMmNiYrMjg4dXkxLDdybFpxIUNVTyhHN3xFeyxjMVhlQFJKdUJIb3RfTiVOfiElLCNyOX41XVg0P21IdH5zfWVgXn5oeEo6bng+bXh1MHhHK1M8NGVhIjQsVCljajNbOEZhci5RKjxdX0tReEIjeGU7MD8oY1lF''@;'; put 'put ''S2ojJEZzNntOcyM6WFAsQjxmSWRAdj9nc0hwJUgkc0E6Q0FYdVdWI0dBT0E8aT1ucjtsLyhfWW4+bjw8Wj17O2wvdXwycjg3bXBJZjB8JTlJTCZlUylSdjF2aXwoX2ZpWmVwPV8qSjxfVChJY0s5ISVRVDk5dnpAOEozNnJjPylhYHdGflVxUmpXPTlWZ0Q3X21CUUAhMiRrTHxXNE8yUnoqeDNJ''@;'; put 'put ''VSovens1cjNdOmBJLDByLGU7JiN6fnAxLy9VeD1bb3pgcjZGNXtHeWYqezheU0l5ZjAkaXUoTHVbeEVKOncrU2V4fVkqO2VTMFB1Qz9hc1AxRDEjYSkmVmM2aFh+V2tCXkJTXnJwdWQ8SitFbixqVkt6Nmp7byN2YURAYlFVeXNoOXl8Zn1ua0ByOz1kUlR+WFZ+TVNPbGgyPFUkO1lCW0xsNFJR''@;'; put 'put ''UEgiXWk4ZkQpL2Jte3VyOjpraGReVjVZe15HNHRMPm0hN0krVXhJXndqKmUxRCldMEQ1VC97cCh9TissbzZ+Z2ZgZG9XLlVuJj5Nb3owLCYralVgaHQ+JHU/MXNadWZvK299M10zQTkmOyVzbDdCXzh7Yl1WcEgqbE5XKC52TW4wRlRJRUZ6ciRmdiRjaUVLN3xQcyUyRjlTazVmQXNZa1Y1fkB5''@;'; put 'put ''NkksSVtGK0YuKyoxI0BrMzF5ZVMsaTo/VDtKcTsvPy4/e3Q6fE1uSDQ6fnpoQlpPanA4RyZKa05RTihCQ0F8MCViZzo8RFs2aEM7fiZEKy84UDN2fWY9O14yeSl2JmhFYkl4eC5KezE6Wm8+LEg5SGZoMkNeb34sUixKZTtrfmFtTFNFXyUhWWE8TWcyKn45cGhZVHZGb2xeTkBBWjZ8WC55Qlpf''@;'; put 'put ''SHgyTjlfVXRlcVNuei8hcmliSFtgR1U6TUQkcVFDXXZVX34mVEtxV1JDYVVTcy9TYG5BNTl1UnIlUjx7eTRpZ2VPeTooYFAmNk1WP0E6YyNWUzxqI1hiL1JjVTlIOjQlJltxOzlVWSplPSkpOzxSUkl0KTptQHNzQktSbXZgNjU1XllGN1oifXMhaz1ec0JfXUhlellUS1VNMG5NNU10ZD1CcyJG''@;'; put 'put ''fTlPWz1hWEhOIyJkRHg2QFVmeiFCPU1LYWZPekBveHxiYlIzKjBvNlk4a35tPyE2UGdbaFdpVnZPViFCeTxGWlg/MDBybyEzRnBiI09CU1lePGp9MWpXUypyOC5LMkhuPlAwLFhdc3xMbTRRcT1zTUpuZ19iJXJBfVJrNilqaWgpR2JLPEs8OzxRblorfW1wbnB7Ky9HfnxmTjJLPHoyUld6PE90''@;'; put 'put ''YXtKTGYvMzhGM3Bga3s8QElkVnxVKDksRWh0XSxjN1Y5Y183RDA+RltoOSg2K2J5Q2RRU35kVXAueyQsN19TdG9dYy5Xa1orPXtXaXEqfklQLkB0ZlRJW0EpPEBGfVFEPUA+P3FCbGFqTzNeUFZTbmZ4JEk8eWlGYklmeDh4d1Q7bWk/T3AiPmopRDc4N3w5MVFyL2QjNUJfXUIiNTs+YHFJYTFM''@;'; put 'put ''LiVAbGlaXVF7W0pBV0RoWmg6U2QvLGMley9nRkJ6KjopbUk2LEs0bjtgQzpIKlM8XihGZmNHKFV+O2ppYlk+ZWxOX25wa2JgbjkpVCU5aGw6JkByMWQ3ZWxQUkAwLmFOXSt6VjpYfGt4YExgRCxJSD1gdzxmOnwlVH4/aXY3NTdPZHIoOy4yaDVGOkgxPk5bSmNnXSxtVVRPTU9sPT1ZXnV4UiYo''@;'; put 'put ''UWNdWERSRFpadSovMyMwSWxeUHNKL1lVKjFEeXtySVs0JVNoci81LCwxOHJAfV58eUA1LF11MFk4SGFJTzEjdk0hUiM4PCxJVz92biJaXX5XOm1aeFVCJUN+OEBWXVR6YTFCS05dM25ZVUgyQnIyKnxKMGJxa21rR04laGhuXi41RD4rPjwwNW1hcF0oYyNocDMjZWolXSR+VEJrZzY+cj5rJSEo''@;'; put 'put ''dUpbXUpgajwwPGpkMipbTX1vOlE6RjdZMFl6JlRDVU4zbyx5ayRPNHBPLm42LyFUfmMlJFJOM3J7JlAkKWxUOGB3PGNbSFFVL0RaLCl3ck5bPFFPWEl7SE0pN2FaLmpzXTVELnc5bFYkNHZlTkJQTW9naXhfeDZ+e1k+VU43NE14JFF4K2dwKSVtaD9DQDt8U2VlfFI1MmBmcjNSKCU8OHw3dilA''@;'; put 'put ''IyZrfkxAL3BRdShPVjRwfCI9P2dDX3NbbUlFOzRUSHJ7d2s7aWNqUSE/ZH5AS3EsNCJ7JjolTXlZUnRkSmF8RWR8OmY4ODh1OTBEeSR7R29iWG1lcD8lO3NaUjFTcDohPTIvKyh2VmVaWzNqKzd0YHlCUVNVcXo8PkV5XmtJKnlGVVBXTGooQUNIVFlqckwqZG1KT2NPOHcpRjQyVnpgSmBMcXtl''@;'; put 'put ''cF8hc0ZuTWtoLnMxa3l7T15GKSlrNFEsSThjXmRDclE0W1g3Y3FJTUo5Mkw8NC56SDksUj5QUDhJL1h2Ukhhelg+aCVoXlJmN306VVp1a20xb08xT0lHeCsldzNJaU8jZHIoTUBOdX09Li9CRVQ/aDZmXn49O3N+OnVOOlViSmdhLlQla2BaPCk5KX1ubi9XK1E0Y0pTWjdUIXN0YjpMRUp+TFp3''@;'; put 'put ''OFJlU3lPSW85bkBUIWtRWSUhRXlYbzE5UFFebVBkW005ciwxK20zMGlGSzt2PlplaGZWd0lMTV08PzUpUzgjOEwqOyM3U1J9MSpfQzJRI3NsUCZhKkJraUJNPEV1dExmTHtvP3NCY0ZEJFtvKl5DcDYrNSVQcDohaSxAc1IuSn5zNkRrVWwlcUkzRkBWSk8obl5TcHNVZipCLmc5VzE/fXk+V19o''@;'; put 'put ''YFtUXV97TGshMCFhX0RfUmhJOnE7NEw/IUxEYldhJXJTR1t9Z0pacHBaOTYrfC5tfmNkKCpWSlckLk1XSn01dTo9NWphRmpUQHFqa1d1el0rVjhvcCZAQ0txPVhCNSZtYnkrOSlsekB6SjhBeXtNZng4dnJ5SnlPPENeck5IPDtyN11CMktebiFZZ1JCcWNhTiY8OHxITG8vWFAsc3d5bzlILj5n''@;'; put 'put ''NDZnMCR7biwvakU3ZVg9cmJ4Nm81ZjRuNzVXIzFzZV54Lj5yaTFhKTxSMllVbT9fdWs1Lnlmel4oUHo3Q34xOkE2cjg7Zlp1WFV9XS4yV0VxbnVyW3EwaWh4RSUoNiFqU34iRUQqOEZWWDlyPytQNVVfWDVxTmgrU1ZvOEpYPHApWW9WOTB1WyhdclI1Mzd8b1VNLlpfSm0zW0FaTUI+JHwuc3d8''@;'; put 'put ''OWUsJTdAXztJZ2V4TikuX1pxVU1MPixSVmllXVkja1MySDVeSCMuPGVMflJZdiE1XkNkTUs1K2FnMkloNSNXJk5gQ1NjLClJczUlIS92OnksUlloMHZ2MFhIKkUxS04hazAsMnc0ZTlqSCZNbHdAKlMiJi97KUd4QGxxdzw3U3UvU1ZjbHY1cV5GQDBjW1s4bVJdYkNBZjpXPWxeezF3KT1uZnM0''@;'; put 'put ''JDJsLit1aU80QCltJVV+ViJ5YXhveTg4WFBrWWcqfHRsWTdvRkhIJlBObSkrKkJ1PFNdN3QqMFJhKWRfN0tiSkMlLk9vPyUvdE02MEJVYG9qNzxQJEJFQjduMyZNeEhVWlgyKysqQS5hVVdXLmk5cWlLfEFNXzQzOVhSeHMjWkJyTGJYZCV8fUUsT3xqW2FtV3pYbzlmXih3eUAucGJuRDtRRmo3''@;'; put 'put ''PCR4QjV0d3JubVhBU1shSzZkVVckM3ZKfk5SY0V8KTNMV3lYWUpPMFI8a1FjUnwxfURTIiZZVjNbdDpIaUp6TVtQfDJiOzhDT0RQXmorW30oL0Y4LiZacmhrfllyQlg8XUxSWig2WXFodF1HWnN9PilIajs4e3cuIWNJXl95USVqXl95US8/PUhaMjdvSXt2NSYxNipwcUQ0TiFkemVeNHh5S1Fe''@;'; put 'put ''OmpxUG5Kd2IrUXUqdmJzRkdXKkdvOlVCUXVhPSJpNFR2KmtzZ346NEdxIS5jJEhEQyRwMGl8ZjJyfihdYENmd3hCRnt7dDEwY3AxdkRqfTJVUXU1Lml0dWNacndRdXRzZWlfS2ozbzlVMU80VFVrOmJIbnwxNk5wXWZXYllaNFBEaUQoUDEoNklsQ1V3OkszfX1hNz9QTlk8PyMwckpaL1lPSDY6''@;'; put 'put ''eUIoR2RuR3RiL1IwRl1FZFAzLz9hY0hDIntVUSI4TXI0KkI8Y01hN2FxVVR5ZGouZFZQd1Foe3deP3R1WVRucHNOaiVaaD5eTW51Y2NQaEJzV15yPklORDR4PlB9Y3BqTW96S1Fke3orIiFpc0VJZjVSbFojUi9kVSIzXzJNRVB5Qy8rYlZ5LkpUJiw0Nm9SLGZPN0ZuISZgOldwPktPOFFgV3ow''@;'; put 'put ''S1FXI0pzaGBCXzE8RmwhSUM9VmI6Wmk7OGg5YXZfaW8rWyswI11lbFZeInJqQlpAe3F1KlEuJDdgRllKZUNxZmhgbSFKRDtqbyhLWlUpbHsuRnVZWldfYHZdSks5PE4hJWJAPFhZOERGSHE1fVQyMTloc0o6X2MyTXgwK0F3MW1MQTxwaVJbeiFJQERZXz9sIS9rKCpoPl1jNEVibSVpX2VNYTln''@;'; put 'put ''PTRLU2wsWERZM0d1dStCUkVuRzh9LF82Q3x8Pj9db1lXNDRLZmReeV1HVzJEU31mbi5wcT8+P2tTLzYvdygseGVVUUFrLk11eD1NdlFjZXZROjBVfU14aU41Pi9fMlMmWn46cVtQNDJ9JlIvVj5RPGtYRElgXksyWWc2T3RATGUrV2lkYGp7Tl97KyI/N3sxQSg3Uns3bEw4OE90VUtCOnFdRXkz''@;'; put 'put ''QUxTamRIX1c1Lno/byNkekVXVW5IWkJXbzIrdWlGTS8oelZUaisoenI2PldESyVsZEg0NngvZF9sW2dCdFYoNyY3JTldRD02WFdKal9QdSM7KzQyOktnXT1tWnxbbWBLKC96eWkjQyUrcjluVjN6RnRxPFB1PXd9ekhzJnVdfldJLnZCazRpNnd4JmdhI3pnal84Lkh6ekBpM0hKTm9rJjYrKCk4''@;'; put 'put ''fmRQMH5VKSkybk9PO1FTMltvV0puSjJnQCQ+RyR2RShnLmA6V09+IzBAZ1ovXX5OcVRVb3tHTDNPTVVAVS5SbyNIaHVIaiU7OjJtTUBKV0lsaXBLZERfWTdiVC4vXWwlS28/Il9JTEhgMnM2S1NoZC9Hb0lCO3t7b0ZqN1U/JlE8ZF96cm5WMkx3IWUzaF5yfk1oc1VtTHtMZ15pdUh2OWBIYC4o''@;'; put 'put ''N3c3KDlmYHIlSyttRFZVXVl5XmhVeixOU1gobDk1TE4/Zyk3fTowNSFvcj1SLlkzaTNFNWQ6OVY/JkovNEZhZ1U9R0xnUF1eMi9BK3AoeHZETzlHKSxZT1kjOUdrJWdmUXR5OFolfUQ5bTw1bntaVkh7OStdcE9+eGV8O3I5M0hzeiF3NmtgakJoe044PDRDZyl2MSp4cmlAJlBQOVdCaHg6cFY/''@;'; put 'put ''KFBZKEI7WEU0KENLPzZycEZ7NEBgJks9WCEoLGYwI297b05lRjphQDsyZX1SSVh7PzJqXlJTfGkzWjt4WVkyRnFOemx8WU10SWFFclVrQ2EvMEV5NHdUOUArcWolQTxsQ2FfVW9CXkl0XikoQkdlYXI9UUQ0PzAkfXdpYC9XcGI/VVFnXTI2InAzK2xOaDBHPXcjczZzI0Z3MV5zX0cxXX5uYXkp''@;'; put 'put ''WDMjNXRFbjo4QSpCY3MyVTZwb0BmP3J5JTp8NEtpdTpFb1UpQ10wW29PYkpRaXx9PD4yYkxdTV9kUDB+PlQ/OUl4P21PcWNndFl0aj44Z3gwKWE5Rj4waUQjQl9BcWVYazxbPWErVTxKI1NKcVpwNn41RT13IXZhfVhJeFhEVlF1NXNRX1MhLHRMPDJjPllBWnghST1WJjdBezFdaldWWWV5UjFo''@;'; put 'put ''WXM+TiNJW1B+YzJGXXclXU82Zz9PdWwvemp6fHoje05RN311PlQjOGw1NyJxejVsYXJjZz59PStDJT98eiN7RlAmLzhGaF1qakUzQVNrWCs2Q1ZqOlIqXVcwP3c8MTBldjswUmw+KXM1OH5AeUVRX3pBOmo1MGJkcmgxL3ciKzVCIltOX3cyRGtAVCtwd04mX1hAO0NifmNzYDJEWiZfPSlPQkxW''@;'; put 'put ''VEw7Q09VXkVuV0t9eWQ7fVdAandISl5FLyRmc2l6I31WamJjaH06fHxzPmRgRyt9NEMzP0I2a28xbX4rSiVuMTA/ZWlHX1UlK2FEKEkzKnp8Mig/emhldzwqJGJtfXdmYU4xLmN+fmE0M3dVU1ZIe2J9YEopUjVNPiE7RXoqTXtdXzhxWDc1dHNSISRgenAldChvXkt1TH5LdCYuYU8wfkI7dzZK''@;'; put 'put ''JWlfOCNid2E5Pmo/JSVlTH5AWDNDZ1pMfnk1IW96XSNoNjp+UHMlYys9PExDaDlZbD5VYUhWfV9kUClNMCxzWTRjdXU1Ln46OklTMkB8fmZsRUpzJW4xPTxiQ2g5ayVVeSR5VX10InFRRDVVfTp2cVEyd0kyb0B7c0g3RWJlXV1Pb3tHYmhrZTAufmM0UVNdW1JMSTcsaUg3LlpiOX1sJXB1ZTB+''@;'; put 'put ''NVc0djZbUkx0N3xKK0pwPj48ZDBDXlJ2TDtLRnl1RGRaWHdJeEBXMiZyZV1wTmpLWFl+OnIlKzs2Un0+JTtQfSpfdEJpcnxyKGdpSTFrbUtZaTIkM0NeQFhXZjB4dlFQPF17bjQocVh8fkdOJF5NclV5L3MiflhoImhOVEwkSHhATXRqYDNoQGwzRHZFbkFvRmUsSiMhVjA4ST1pe2gjJHNUNy9B''@;'; put 'put ''ZGl6QFUjVjxMKVtCajlKKmNMSikjaXQwPmlbIlk+bSJuSkkjQSYlRUVAeUoxRVEvZGNzVStPXjN8dHB6JDIjKUBgRztpQGg5YF42OjhHQENdOjJWeDkvIXgwPzZxeD1SUGIqJVojSmkmZDNQQ1E3X0o0fHchRVhTMHhLa20lZzFbQjtjUGViUm1rX2V3OTZ5MUtPV3c5bW1EbDZMKDVjTCxASCY1''@;'; put 'put ''QltSUV5iNDxeXU9xRGo+YEhfJH48Vl11T0BOQHt+eTNuJiUzKWA/fCZfUitjezxWQ2VpM25KPU9RcWEkXzdjSHVzNDlgNlJIcGc3b1V8JjclN1VsWyxfL0g/RkNUYn5pQVNOYUFTQjJ9VHlUXzIlRjA+KEo1TGdEdlo9dH5RRmshTW1WV3lubD1DXzZ+JXRLWVJjd31vXzV0XT8xJFVTRExBUFsk''@;'; put 'put ''NkwoclF8Wj10VCpuc3ciSCl0NU49PGV8aVJQdi83MEVTLjouNXdJRHxpU2daUXsrZDVPK19uVzh9RmM3ck5AcztIL31OLkxDb3w6T2EuOkkjdi9ae0FzbWpiS0UoKlVxR3ZpYXNqMWRtbGlrW3N1RyFwPEtLR0YjUkIyUHNbXTgjWGd9eVY0Nj5mVmV1YzsjdllXbzNXNzwrQigmdkw9LlM6M3Rr''@;'; put 'put ''PmdvOXlrTEo4cCYlOWpvUEYyXy9udko5P10/ZUVZbChCIzx4JHg6Uzw1U2x2eCxqTS8ue3Y8e2Q5OClWYlRnR04zdDtOK3BNM3xxXjlbWGoxQC5ycUx4NnpASE5HW0IxVjJSV24sem87M1dPYG1DYj9aRj8jNH1zRGRtZ1dKKjQ3QzRrVz42RWI9RUk4MTUzRX1qLl58fHdpXzRRL0NmflJHTSlS''@;'; put 'put ''akNrUVN9fj8mI10rfGZXTGlGT010IzxxXk1fYVZpW0tDOnBYN1gjPmFAQlZpeFNLX2F5YTx2R0xvJm1kQ2h6VXdae21yYTRRfShdaCkwZVE5bHt9bkQuNV13R0tbOiVbclFxPkY2OXE5WChCLyRlWiRUWS5uX0tQOUAvM09mVmo3cXwpU1lhKWxQYSNIaT86eWklZFExYDh+K3BrR3ZNMUN6eypj''@;'; put 'put ''TTJhJS47KVImRis0LjhvUkdGNF9FJThOO1hHX2dHOyZIW11paHh3aXFufSFhI1RNMGpOKlBHblAwYn5eP2plXnxFb2ApKDl8RXkiU3BnNDNTPn5bQG4ibWR1JiwoOUNPQitwTCxzbjlwIjRvLDNQXSJ+MVk7KGJvc1FIMlRiUkhic0pHVipec3w+M15OVW92cHc5e0dLc1dbVyxfNWlydzlKI0Q/''@;'; put 'put ''YS5TOF9RJCJ1bmxLbDNgcSVXRjFLVDErRCk2eD4kbExDSCJCQkd6Xmw6fj0/YTM+b1Y7WW15Si4xMnJTbk59aEdAdW9GYShMaEI8UkomMFlTPmQrfiEvPXw8cnc2THFhQX0uQDpPQnw7bmYlUEFbQFM/MGR9YChmR1pRInE2biM7LFBxZmpJVCovfFZXZywjfXludn19JW1EPVQpQG5ATCRwJnhB''@;'; put 'put ''QiNIKHJjYktJfHs0QVc8fVo4cjZMMHBXRW1GMi9kaTd0RjR8JWM0bFBdQ05gODZQZDFedEJUaGglS35fSihpI1p5fGRtU3RxKF9od28oPDpNTHVNN0o3JCt4Knt2OEo8e3IrZ2svYCREaVFoNlRCcEVTZDdiM1YjYy5WTn5kcEZHMElfLCYxclRfLCZLfCNCTj55clR+JjRyMGI0amFiVCw5WFNI''@;'; put 'put ''ODtGcXU+dDlTVkMmMkY4MmwjP319KXhBOUxYYyhhczl4fn13Ri4xJklpfT5aIXB0Tl48KG8rT2hoRGs3bCQvaDkuc2JYKHA8T3tbKWMlRS45SX5zWkxua2pYS2dsPENJRTltK2wsa255b1hNJFF4M31LczQ3Kz8mI0VPVHAwMU1XXW1lSk1kWmhKUmhoKzl7bHwjfWxeMEZ8M34pbG41dzZ6YFcx''@;'; put 'put ''SnxyIm09ViY3RlJ0fHQ0NG1gO25ENiNEfj8oSmp0YUJwOCphYkI7e0dsUD0ucSJYL0dtNFEiQUN5clhkV3ZwWit2bTtVLzk7eE5eeShrXTN0PUV7diZpZSk7MSw+QlIhazUrOU1xTjovZzltbz0iQkYuP2Fwc1NzUHxqP1klL0pNaUVHd310al4jeGB2YGZjc31rPklaLE8xN3FhNXEoPn0vZno7''@;'; put 'put ''Vkc+a3o/Oj5xOU9oIltdX21HKGhLTldDTGYuR0BRMXc5NTZoQkNDTiJSNF87JVYjdmF2TE9iM297SihaWX1kRks+ZChzY0d7LkA4JjooSG83b1VISz5kL2FBZiNmNkBmb2xkQWNhI0I3UDFhc2ouPzh5KmhCWSNvOUkje1plN1JrfnMhZHxzIWBROzlhKlYxfVthVXAjfnlWVlVUKyFyRi5dcCRo''@;'; put 'put ''bjAkPUYufT85KkY3JEgmeW5gUiY7ckJXQVNuQD9ZOnh6bG9oISNVZVpWKC80bFJLT0Y1M1JLSDo3WU1UMWE1alNfKnZ2W2gqPSooenZ5UjF5N2g7b3NHSiVwfHg4JDozamQjeFV+SnZDUCsyOjpBVmtkcn5AM3BkQiIlLHNSd2YiSkw+VExed1ttPVAsQCUqIit7Jl8qIit4W11HW2hgN3sofXNa''@;'; put 'put ''PTNUbEVtL2UkUDNLOHJ4QihYblBKNzwyLzAwZUQ6YmF3aypffHY4SjxoVnpTcDpCezM3KHFNXXF1SztTaTZtdFJ+WWY9dio/KnIoKnYpeE58aS44LDU6UypXU1pKeHVKW1U6aGBkaFNiTURJU15QVyxVLDhTcmNvWElqOXx8Uz1iS19WOkdRMTZhazUpTXNuNH5fdEVEZWNaQ0A4KC8iZHJPRGNG''@;'; put 'put ''cm5ubH04bFVtYCZHJm4qUFVzJHRtfUJMQjJgPF5rKiQqbH1aOiZURTtPMXdST21nb1EkXiU+YTJAKzdmS1duPy4keXRFVzRfOmglbTBHPTJRJlBTU2lzfSpCYjdAe21kNz9hOWcqenRIX2YiWT0hRDpCcSJpJDZSb0V5R10hJVtkOVMuVk86b20zTVVvQVpgbXY4X1V1a2NQUFVyREdHSSs/dmBq''@;'; put 'put ''VnJ2Vj0uKnpLaXFONWJvOl5MWHFFZl1TT116LHxxQkF8ODpqK0tWU1NmKUk8PU8rNEx0eTpTL29dIWwiaDB9O3BrZHQqV3hkUDRrYl9RMnNvP0ZnXyw0KiQoPmw4NGV9SDZ9PU5pdWIkXi9IR21gInZ7PmI4PWMsaj5XfjRBW0VaJUhTajclY3B6fSVqW2tzPTxuZl9WbnVJYXMicGhIcngkcXA/''@;'; put 'put ''VVs0RHgzJi9Ec0I3My5uKFM9dUVKSGd5a0QiQWc+fHxddUwpVDE8QnpXdlFtKCp1Xn56XUFxTmVCMlpnbztnQ3cpeSFxZlBzU2BCcG5+c0hfRGFINS8lLHZHTjddfT5ePlEvLDhefHRBJkI+XmVLPnl1QF9oNDE+Im1IZ1k4Q1g5PCpJSX1TI04lcGJKW1p+Vk16fXdfOzJ3b1JaZVk2d3lAOixp''@;'; put 'put ''R2xhMj5tUWF0fStQM1R+IWo1RkVlaGtoZWxkQj9sbF1rY3V2VjdURlZgSSIrPX45WTtWM3tLRzNMNz0kaHoiP34rVkNGe0RHeitUYVZfQF9CYWBtLGZENUB3I3Fofj1jWUM8am9xUX49bCo7e3g0JnNlJEkjdDJLSGFfQjsvT2FiYSNjWyJfW3kkdnZhZFJibEcuZ2g7dWxXOWE7YD4/eEUpXVQx''@;'; put 'put ''SVBsZztZZzhgZz1KNUhJZFt+dEh8Qlc5ZWEhfkVQPElHdDdgSUN8RmshUVZ1OCEpcjk0cWwkMipUO3hGOkdEUX51dUxLbzx6YyosWV40TzVyZGZlZHVedXZfSjsybTpHNEZKbkN6OV5oYS92LFhIZCI+MmA0LzlYZVg+VHI9RyluRVlodVRgeWpXen17UHZqPWpUQnRqbXsleUhXMntyYGs+Pykx''@;'; put 'put ''O1shO2cvXU5zZn1SNGk4fV56Nj86eV47VVgxYnMuRHFacDYuNGt6emVPYnZTSHBvMUIuXWVdfjd7cjQ0eVp5b3BjOmRld312Ql9GbituUitXOH5mQkpPTzZuOihAYiNQZTorRiZrPlY2L0Y+d0lNX3M2aT9lQjkmaUxzS2ZYU2RGWGpNL304W1YlISlqKDRBcyt+WW9wV0Q0cCxJeHBxOTw4Z3sh''@;'; put 'put ''ZjkjdClKJnoyXVNUdkpoZmxjISFlaHJ7ajVpfHJ+YSsmLmdNUXM4Vy8yWX50PGc1aHg+WmxbW1NQX09ofWIyWV5rJlApakVsOEdPQXw2RS5gJndUbSMiMGEjYi9veE1mWk52TGlqNyl2YHR5JE9KPXo/TFpVLEImWmxVc1thTlZSWUIjaytPUmVkMTZecThvZGk9YH1dZFdDREJrfkRsK35eZSRu''@;'; put 'put ''ZlJfYWtvTSZjcXJBU2k3bTE0V3V4aVpaUmYyV0g+MEZ8JWlMNmo5JWVwfFFLVCxdSDFPU3R0Ti9daVRTIWtqaFVNJTI7U3I0ZyFuS0doJEgzUDpgM1FCOlg/b3p2ODJ4cFJCJSoje1dVTSFmbStPTS9kWCZ+PyF2UzM/SUtMJHA8QXFbU0lGM2psXnQ8SVNJZDwrOVBRakpMOENVQFEzWV1CV3Y6''@;'; put 'put ''Wks2WTVITCRFS2Y9WEIvezJXcmhHW3U8PU5YTjBLQzFTcjQvW1k7bUJHYnNxRjB8UyZxWzd6UGludDwjdkNNMkF+cS88VFZoOzw4dixdOEhBK294XitxOyhqTSozSERAO1J+MjhtWGYsOHt3UyhdeHBAbXp2QH56b109WHNOeS5ndntWeW9rcmduRDF8b00sMlVlKThpTDZ6PUlQTUdmdEcrVm0w''@;'; put 'put ''dzd2QC9edT8scVlEW0Y1UyUpQlskbzxZZTlIb3BOT0lQa2o4ZihQOXF6c0VmKz52PTIqbykhaW9mYDVdSzxjYEJUfFoxUE0wS0chcU13eVRtPmBRRENITj1KT0cmP21kaTshQTkvYEwyW2BSJi9JJGRsZVZEdjxndjdqdGZVdH1NOWBnXiw4eH54cWt5QUt0a0F9TGlnPmluPTRiVz1scjlKSE9+''@;'; put 'put ''ODhMfDJyJVgsOyhrc186Ly5Td3NpIyNFNmgvdjU3bkJnQ0pSMF0qL3lyQjhtYU84PW1OYkoqLGs6YWg5NCozZT8zQ1M8NHUxTk01L2xWYzR6PEIqcnc3Unhveltuem40QE1dVktOTUt2SFlfYXd3V3hzQWtBU1BvRWcsKH1XJlZTP19ZPWold1YqdDFvd206Vl1YU1k+LDNiSkE/fCk2dWgkdCpj''@;'; put 'put ''dTtTVnxnV2JZPXRaaWlzejFXKF9Qc35WV0VKNyFAMyNnLnAsOF4sL3AyP1BJPnMyd35+OmlqLmMwREl+bWJ4bVdGNEc9WENVdCt0PFo1bl4lQGpMQVhdK2JfST1paHhvOyt2WGE6SFkwRHp5aUglKiJMfkdYVFBQR0dHYjNHMDtPKkg0Nk9hJVMjdXRVViRWM00mQVk3YjZsaSIlNy9OTGxsVWYr''@;'; put 'put ''bzRSLFksTmxOOXsyQTZdSFMobHNBbG46YyE2ditwJTllIylYTExJRWh4VXBkVk8zUmkrUVYyKmVESHdNXTgxQmpaLFRaRlpCNUMvTEB8Jk5AYyVaOXRZbVZxP2RfciZkcDdIYDtjJGApNzE/KTVqWyE1dX1tNG5bNnR4TCtMJkokLlFCNVUjVkg0aEx6RXh+Z0k5RV5OS314eyx8Lig1K3NaIUZ0''@;'; put 'put ''Oml7L1FWXytPVS9iSXNdS2IveCJPcWxfZUpgSmBJNWF3Lkdrc35FZ1UrZWBFWi5WNHkqVjRNdnAzdGp4I3JHJX12eEsuMS9QSG1kKiFFYVp3RGFWIT1TYSFQTH00KktjXlJaKX5zVjRmYisidjQ5cE9INiJwLG1UM1QwRi9hJlcheHliUTYob34hKC4odWFWNWUlaDhMaClpOWkoczJCWV9BJl9v''@;'; put 'put ''MkZlemM0ZD13I25wbDMiJExiXmZsWnhgc31iNFg4PWkvamwld217M3JVPDsyPltmXXo2PmI6RUAsVUlgPFZ6NXd+akt6fGszLl16cl11JWA9fDJePjcydSh2RnJdKXIqS0xoSyg0Kl9wcHNXOVRXXXh9c2tINXR5TVR9LlsleC8uOGh5IXdyVVZdM2owIWUpaF13NTdWUF4yMiNkYV92e2tHeGFz''@;'; put 'put ''aUtIMTk5XS5fR2MmTDZnJmZnZF5sPWNOWSl+Oy4iN29VOWI/WGFYInVQO2NeMERnLylKWFdveH1iISM6NkkyXiVeUEhqSUhtdCFAaHVefGshVF89Kll3YW9meStwOWMhQGNaODc7bHxWRiN5Y3x4d3tkaE1fU2lQIStENENWYVM4bHdZQ3N9bjUpd3Y4Xm9FS1o9PEokK0wmIXBVcWl3I0F0alFX''@;'; put 'put ''PTp5MGIjV2IzMUJrV1RLe2l4fFBUTTNyQTFGXWFLYjx6eT5beHspZnx9NDFlYGpTNjMlX2hbWylQTiV+blU3QWFGYSZVPn5xVV1bVjlNdlooYHchbVVPWn1IWWZ4Y3BAYklVQyZVMkxtTGhQL189fCNfUCMmQXt+d31GLysjRG90SnlDR0kib29tOSJ2Q2hbZnE0IiQjSnkoTkpZdER5fFZ5Xi5x''@;'; put 'put ''LzJMa3IycVZ0K3oxWjZJcEd2Yz5pVXd6X3BbKVZWbDlfMz5sODxLUi8kW1VkaU94Ok1jN2JCYzg3OXYmOkx7dDVaVEs3PWNdQjgjX2VzNHp+fkVfX0U4QHczOGdlU2YoV0xdSGV1LzEhPW5LfUU4c3dNanApa0F5IXg3LEJIaiNpTm95IWxmSEJ5IV4xOFM3OHB6TltIZUVIcj9IZSZGJEt2MEd6''@;'; put 'put ''UitAdUpeSGpgQV5GNlBsTGFZeFI5cUB7bWR4P3NmdS98XU95ZUddLGk0eSJ7anhjSUBzZjhILjlzbD1KTys4QFRxaWV1QHJwLFomImRlREcxQiwxX1RwfSU3d3FDZW1BUmNoZ2F5LkRgJGkzfEIvfGNfWXNLOiFMeXxMe31zenJdKVI3KX5IXzxWSFZLYEpgJUEsJVtiMnl0fGNfcHAxYEQkVHF9''@;'; put 'put ''NFhaVWJafGZOOXAjY0p4S1ZQImQqOzV9KlIwa10hJEJKWUJjQSJeI1RzOCQoSm0yd05+T0NPNlN5Km9tcSwxKGU4Jn41cXk/Lmd+K3ZkZ3lfJGBIYDxxcGR0RnhPI2BQVCZFSyF+Z0s1bXBXVG87c0hsSGl3VXAkZm5dT0VkNCs7R2NvdGlva0t4bHheX1s1NG4mX095NXwoWmxFN1k3TjR9dFN9''@;'; put 'put ''RlM3I25WVC9xcUl+XVdTIlsjd1FiVDRibywsYHZdUWlQdWd9Qz13ezt8ZGt+YTdmN1ZNTDM4fmFdcTwzRDFifDNaYnNGZEN9eUMlPStnO2xZIyhIRWxlNWAmJjhkIVFCKjo+R3t0MTF2ODN6SXpRYz92N0BWY2ssfEohQCZGNEQoKEVuTTAmTHtYSU0wamZ6WHdeOTAweSIkeV1kdCpASltCe3tZ''@;'; put 'put ''LEUzODBCY3RJLmhySGhlK0NWP2NhZ1FgJCpXIkJWUExQME8wVU5jNF58T3MlVHReJFN0WCIqTHtPKj9Xd2I/JCJNJU9BLG15KE4xWTksan00WU1IT1VaTCxUR3AlWik5M1pONGU1dmBKdCpXRiU9PWRsVkZFOzdtbHN6cEpSZFJbM3pBQi53YkFqKilqU2d2QHgzcTJAb0VCXntiZU1SZyEsakE7''@;'; put 'put ''Omc4Q25ASklsVGIpeWgrZkF4YjFkTjNRQjQ4XnZWUGlRdShsalJHQCIyWm9JYXkxeCw+Izo2XmY8d35vJllQKjhGMj9xTjFyJWJ5MUBsTlEvbTNbKElxdSJEbGR3NDFbcW9UOVV9Pnp6Y1UxenV4UlcmNXpucXwyWkI9fGlOZV1abFlLdTM+YjJscDBbLkB+cl16UWBkQG8pMHJVPl9SQm9GK0Vl''@;'; put 'put ''K2Y6YX5PQnE9UFZUXzZ1c34+N01tcV8iNDJbRlpPYm9rSy8iJEVyUGQoJEBqbm9KW1RMNEI8OnVyKmNYSFZ9SEBPJU9gMmdyYWNIJmNFSmVsX0glN01aPzYrLyZ5XypMX2NKMD8mY0dfY0pRJSlyJmU9fC9QI0c5bmkkYkM3fkhYayRUQ111RGopNVVka01yPV9XTVc3WTgyeHFNLzdIZi5MPEZ3''@;'; put 'put ''MiJpL1omcV9XNDNPN0p4cU0vWHpQa0xfe0wicE1LdTYiTllTKUUoRGVbKWAzXXVVI1YmMyEwO2hJZG5dYDV3SjBRVSgpbSpLOSgjW2pzZ0Z4cFkzeHl5I2F6L0xpVCxgd2kkIml4PTFuT2d7Z2w+VD5VJDo6MmVvYV5YRDlrSjI3QjZiVWJdJClyNU5IXm9tek1QL0JWdyk2XnA8PVdsb0klTzlG''@;'; put 'put ''WU4jJiU6QEM+M1M2LFk6UXN5OkJ1UCVYUHR+NE16NDszLGZEaFR1bVVGVV9ZOU1ePCZNRUo3eHlmbzpXKXc2NVVvLFNZL1ZVfFlBM20lP018Wn5JQnE9P1ZVRWBSY0o+enk9Uzg8UD9XPFc3fk5iUz1KQjBoMjBxdjltamIyP3hmWCtkKyU+NDBaU25MWl9oKmNfNUBHfnFsdjUjfCNiN09mbG9Z''@;'; put 'put ''dDdvZjJMZm5vS014fV5aJSk4fFEken1UWUcrRitbOGQ0VVdkU3V6ZFlSZyl0YFY0akNCdzgmPFVXaDFqTExsYU8hLFJOPW45UCFhLHo8R006MlRlX18xbTM+ZSpjX2lSbX1ZPUkjLiJHUlNnZX13QDhtfCswbXVtTXxvPk18YFtye2A1JUoscHsxPF00MWViKT5LL09fJGh5NWdKUWQob1BWI35F''@;'; put 'put ''TEVKY1V+KUoreHhTJSk2I0dObUlPZWVXN29rRFFxNU5kMi9JQUFBOE1AQG5BVUVRTzduJiJiWC9ZTUlhMjxyREgqaHVPZjNgKjMsRU5KbzVEJUlmTWlBQUFBQUFBJEEkJClvTnRxUERkc2ExflRLaVdZKXJyM3hAcUJBMnRUXlIkYyxSaHFjV0dOS25nemxBSDdhSmFFUV9XQnMlSUlPUHhaVnwz''@;'; put 'put ''JWM5b1p7Ty5Lejs7KyVJRztheGg6Uz07biZHMjZaaDtFNX48NTNUentRMHEuVTxCayZFTnEzWDwzUGFbOiVgbS5kYEdQKSZiKkI/a2QlNV8yJXd9PFtSXlYzc1k/TzxUOXExL2p6fkhEMzp5OiE/NDlOd3NFNmRJOyo/OmI2KTd7dDdbJTpxeVFdRVRvKl43S3JdK3VsZ3JdPXdDampPWnJjKUNT''@;'; put 'put ''cHIwLnRXPD02fmRaejNAPH0pYFVLbGEifXYpJk1kdFhKREoiMUJ5LGZlRU1YeFExU1I7L2p+Myl1biNdcjJ4cGh9c0UuSWouSENfMm5PPHZNbXgmVDJid0Robyk9cEwmXiZkKW9XYns4NlFLRTsrMTlAcXcjQkQ7W1Y9Tl1jNm9USndISkZkTjpDeC5ldW9sKCNTZWwkTnldRUxaSj4jTHlCPTRt''@;'; put 'put ''IVJwXWN3KDs0QkdmfC56dzUren1mJF4/ZTAlfl90WUV0XTFDSkssO0JiPWk4S01OWko9YEZXWWJ6I3w0JGA7TyowPSxHfnteU0Y5IXQhIl4lMlF+NDZEfSUkUGIqOkRKPk86NUlaIjs3ITt4c3VaNEJpPkAhWHhCPyFodmwlK3kjOUpFW3hfM0wwN2hPfFdeNC5NL25EIXpDfE4pL0x9SG9hVzku''@;'; put 'put ''YShsO3tMUjgkQC5GfXwhL3FGZHolJTx5QDhacFIvfHUhQGJFPVBtSz1fQ3EjaGZzWT5NYld7VjNtQnBHPUhOSztnS0ExRTNpS11KOzROeXV3Mm9uOGM2VTt2WzN3JFFATHpVJFRLal9JMWBNJi41Ij5rImV+bDAlb2NbMChvI2ZmfjZPYmFxb0EvKyZMUzlCcmUzOi4oQ2JiLDJEQisqS1Z9PXRH''@;'; put 'put ''ZXRxV0cwRExuW0dDQSgqNksiZylTW1VPRmNZMDF3OHpFb041Q2xjKTFmZ1trKS9oYDAkP0RwdCNpTGchIlo0V2NOOEpfYFs9Q10hZTt3cm10K1p3L0JxRUA0VTNbMyVqPW50UXFkeHo7aV98OnAjYiZ+dUduVypaOTAweVhfNSxXLEZjR2dgbkMzISE5KHtEbGI1antkYnI+YXhZLHVmKCJ9VE1z''@;'; put 'put ''SztHQjZZKms0aWMiZlUxbVleW18kfVEpMyopOl5TJF8oMyMsYGA0QHtOJVlPSm8iJCgrdC9SPXMjP0lNNlk+b1BLe1hRKU1LYDE8OVNuNDE/KEUzdWciOHk8MWtQb0YrQVozS3tWIU0zXTYiaHM9O1lbYiNxKmxnVXJCdkRERG9POTQ0UUtGRU1ILiVqM196RTEzQHBnR0E4RkhlSkcrbiFPOChs''@;'; put 'put ''Z0dhWSNOLjB8fmZldDpXVWslek9LKEEuKUJKdzBdQVc+bCt7XzY0WmUhekd1MSQ1WHpzNVRDMS5RKFQxRjwyZC56LnQ3XWIuUFdnT1hAIjladCNCXm4rOGk/OGgpJUBDfkE6a2cwRm9POSUmZShMY2ssbVlFX11wSGJtMHc6RVBGLGRYUDUweEcyd3pPbHp5Vm93NEZkQE8uWSo2e0Fuc2JtaVhA''@;'; put 'put ''NmJfXWRMVXRWMV5+Vjh4diVsajZnOWlIfktDb0kleC8mUktmTXNDbkU/Yjtyb2EiJmp5bVQ7OjBEeVU3Im00QklMRz8oNm9lWTM7IUpgOHFRWSJTQzpwSXE7Tl9fTFRBSUFqK3ddTk5KeGZlYVZvTVshcFNLIU8+c2FGMC9TT2wlUzI9PiQhYyNlfVYuWzVjQEpDcS9kNFJDajJAX0FETEM0fEE9''@;'; put 'put ''WUtTREpfWFFhSXBlPXFuYXFgVWckKTd+e1lqZ3YyKS57K0JfREBsLEZeS34pWkN6Iy4hdG9tMGJIMnRLMWNHeks5Yn5xWF1fPGQ4djk7V2Q5OFt8PmNOOkZCNXBteHhkU3pnVDxVS2JhdipDRClWckRCTTFLdzRMQ2NHZyQvY1RsPzFZNkYlcUNGfFEzWDFuaV8lZz5afndxcEZ6OHdQOVFHQUc3''@;'; put 'put ''TVFFWm0/LC9ePUh1PHZSST42bikyfUt+V2BbPjBDKmFOcG8+QWsxb1Q2RFclP3MiNXBfZn17P2FRNGN1SnozV2BIQFhrbFZKUDszJWNKJl9ROjRaQipjXmdGayJ2aHdQfi8lOTV1cVZqfVhyNEtCa3x1aGolSTY0bUJoYypGZ1MwSipiNk4xQFVAL2ZjdiJFIkdTO203JmhXZTVeRz5PZ0kpMyxX''@;'; put 'put ''YVJgezFucDgoWEBgSlEofXZWRk5aS3hfWGtoLmxsNCl2KEtxdStfbmYuU1N3I2QrOkArKlB7ZV1GUnkwWkAiUFNwK35rZ2dEcmUvdE5hQ0l5bX4/RSIvSj5VaHFldUkwRWRWSlVVKTBbVnJ0YHFqdk5BMXRbSGldKiQyNj87RVVFRU98S0tHc2BsVntJe21MUklePE1JeVsjQFpSbzxBNFREOzpj''@;'; put 'put ''ekkzSnJ0KWFQVTdNKChbImJLW1tIUl5qI1NkY2xVSn45ZnBMcyNuS35BcXdoQ2NNekh9aywxMTUjW0leSDtldCFTeFtfc084S0ltbXIhNmRjPnM1WTtyTTBDckFNZSheTUJxW2AmNURdPyQuJXpYflBmaF08WXFCYUI9MURNJkNsfld9NzJyO0hFaU8wLyllKiY/QyYxXUtJdW1uJVFxbXtULnhp''@;'; put 'put ''PVI3QHdONCJnKWFHRFBCYntiVzNhSmE8IyhiflJJMHZLejA7Ok9qXkp0RUZVb1k2Wn1gKEh3WCtOc2RaMjJoaEN9c2M2LmB5S1Z2Wml5Q0ohRTAkJXZZdnJoP1klLyZZLnNTT3hkfXxCXl9gKWBlT1Y7XmV6cURhJlJqIlpNZzRlQnt+R2c7Ql5nXVpyfE0rO3YmTGUmWDs0KH1ULEJXbk4ld1Q2''@;'; put 'put ''Kz9PXy9UI1d7IkVbVV9zclNqKihOcHc+Y2xbPmVbSioxYjtuY0Y9RGhjMDxMT29lcWN2bTBXW1ZbITt0P31HRUA3NU50cTBBclVOWyRnMD0yZjY0eSMobGtWYytTb04vQjlXcGEkbWg2V1JkdUAhaXNaTzYzX2IlcE55KjtzOXspYUBkfmdSaWV7OGJrQDYsISRISkopYWszR1haTTc7a2tuOVFB''@;'; put 'put ''W2dheGhlMVMkczBiU20lVTg2cj09OzNEWXM+QVpkIjpFNTJkKDJPTTtobG8lLlVAcjFITHtIWk9oUUFCT3RaMn5vOEwwfWA5dzExOFVNZE9rU11MSG9Sdzs+TkYvUyR3MjF3PVZRKD4zLiNAfS9yKUQleUBNV2BPaHo0KmxueEw2Vyg9USZucTk4a2c4fiZ3UmlqZkZqKUYmQ0poPlYyS25pTjEj''@;'; put 'put ''dlJyOWlzKlhkPyZgU2xsMWkjdjpxVFB+MHxMSUs4PjcrYDN0cXt9YWRNZks1MnlGKyx8LkZnRmJvSGVoRFZfaVt7Z0RFNC93PG03VCZaP2JJfVJjRUdncExdOSNkLDZyfl5TaCNdI1hIOlc6TlZGUCxdQjE7ZWd0fX1uTm9UYG1iPCNsXnlCdDksKTM8NmF2c1hqMDxLeDVsRkgmUFY/ITJvLmw8''@;'; put 'put ''JH04Oy4xR0xUPUsiN29WfVFicSZLb0RfdzhsMGxbcXVmQ0JRJGltYDQ2KCtWKVdsRUZRQDltQCFfITBySWlUZHNjNn5SfUQ3M00qQWN3M0tXVERBXlpjSnYsWG5VQ1hHQGdMdTMlLDxzQ3pteGtJeWNiOX5vTHhuMkhAUkJNPGVbWEZgOzJbNVArK1tlQXNmPFt9QmYlb3VpMzo3IXdtZTVVVSRV''@;'; put 'put ''b3IyTCgxI14zW0ZtcS9bLkUlY3VBdHwlbV5wLEd9fSJ4USpTY2ZaNXdHOkpzZGBdN3dzLnNHKz58NmtQJSZzTjwkVnksekkvYWshI2hiS3FUOTUzOEk/S0o5ZiJPPiEqelNqPzkqNXhlLkM2Xm1uSTtNREBMZktzWVR9PVIofmQlVDZAUVRNLkpGPCYsN2t2WXhkUkRsKShpMW9CRVheI0p4dGhV''@;'; put 'put ''T0skTjIyQmtoV2d4NTRkTilUOntjOyIrRWFvWWRwanlXXzA9NkY0PSU+bkhrJWVPZStkZWR7OkM4NHdCJX1jOV9daH5mUH1IJDU7YUU7MV5bMngxJDEsO3hXeWJmc10wQldvc11JL3VZSlNDP1R7aSkwd2NtfCY3REwrZ25TWiZjIVFqOD18RWJEUWx1c2N+IipJenVtPnJOc0IicFUwX0VHbDlg''@;'; put 'put ''M2ZiT0UrflBZTkpSV1RbOHhgTmtmPkw7WzBvSU53dGZ8Kj52N1Q3Vzl2PlpqYT1UN2d2czdwVVJea152YSlwI0pvWltKa3Y0XzBaWnxgbj8/NVoiMUgufHltYUwhNEhTOCRGakFLJmtOZn11bkNxWjs1eyxbcitPQCZjOjsifHY5aTwveVleO3cvajQxUHVfS2llR157KzRXLisrYEJ2M1BgdUQl''@;'; put 'put ''QHJ7SSMwUFAsRWBXa3Q2YTosXV9TRitFdiE8Vy5RUiJJQ1hyLHI2R0F9ZVp3JlpUTkA9YWtONFE4SUpYVnBaJn0pK1k9Q1ZbaklMJk9sN0Q9Tn12aU1Dd1B0SHpkRklnQVBWbnNhYHglU2tEVH1OTzt3dCUsZzclOyVpSFRJPyg9VnQ5QDt1R2skPzRJNFkvJUIwZztIYyU/aShadWc2dCF3fExT''@;'; put 'put ''a1d3KDVYQkEiXS5TeEdPeXcrbjZYMHc6OlBPPHA7RV9+Nik+KjEzNUgzTXd+JDRafV1mQGdgXld2TyZBdjh0bm9mIW5FOGddVz9CW288Tm1nIkUhdGg3SXZkOSpzTkB+MmhXQzZFZz89UlhtRVFAZ1kyJmdIPUUsNW8mdDZdSFI6cTRsWTJneG0uTG5AJj4pWltqc11ZW0YhUk9VNW1tVjMzaWNm''@;'; put 'put ''Pml6TEtGMzxlZnYmPFhNPW02ciYiQlpaQl42Wm1HR3lANjlzfXNLKzRtYmhqa1NLbD8xPWpYOnlmbkJTKV4vSiokZUk/RSppPiNqOHN4amZQMGZuT1FhajRETTAzJDxPMTNCfEU6TGwkOzY9U0AlcFNYcEFzPDx3TiRndWVXJmpuWUIjOmUmJldtdHwhQiV8YHxeTjJOLkt5a1tTQk05L198TEl7''@;'; put 'put ''MT5OcWVEel03ekcxNnMjL1NiKCt4SmIjfVtQcClOdnFWN0IoOTdbajFiW0IzZi5LPDd5dD81bEwoTz1BM2BIck9PMiNVbVd+LHxEcU9TKjZmXl9ZVm1XNTc+bk5UdyQpaz9hd3FFaGNyXVB1OEVDXXRLbFhiPDhBV1QsUGAxUHBCSzxDWT87Iiwiaj8lMkVeRDovTiNUUmxXd2cuOD9IRF8+TSI9''@;'; put 'put ''NDFVaixhRWtiLj5qa1NoWVdsfTRBSyNkVTtuQ19lbG4ySFN6U0NbMz1nWk81OU1IeTArPlFpN1pGUj9fdU12LjJoQEl4IUJbd2dHdD8wfWJtJFBMfmtyZ3dnJWp6dlR6PWJuYjRYWW1VW10wI09SOGpWI3h0Wm9aKSRdWGxXMGUmR3x9PChEQTtRSyhpaTZjMUtdVyREKSExSVo7RC4/ZGY0VUtR''@;'; put 'put ''Y2J5aD14bTQ9fnBdR2lyKnJCTnNDPHg4ejR7RCFaUzlEPVVVbkBjbEZzUitTS2J2Tnh8JmZHNER2MHAwYlcrP29wKVgrLlJ3Jmw8WGBGSCQuW1NCS34pLFt6KXhzKilVVjBifi5fJD1ETG4lMyQodzpubjRGU3BaWGsuKix1WFNPbl85NyFTfT1fLFJPP1RFMGxscFB9ZHgmZUlFdH5DfWxdUSRW''@;'; put 'put ''eDZZMVt3dn5DNVNyU0V+OiplMiNgJSRpcVB5PD4uZypBRXl1YTV0fG89aX5IYSVObnM2NDpVOXZGOWx5bUxBb1pXInB3YnRqZilwOmRVPERTVm5+PlIsdSZsM0JOTk4+UEZ0azFdPFUoXVtSTTprKzteT0tgfW08Jnw2SHp2TUNddkBRW3BHOExGNjRkPW1sRWl+PHkkXVtiaF0xIzF2Kl9WN0lD''@;'; put 'put ''LitydS8oWGFJazt9MGpHejxqNnsxWywhPGB2WUhkSTVqO1UhYTQra20jbHBUQjJSV0ZpUkB4akA0QChlbylOUVVEJHhIM09adG09aXFwUz5YI3QmQFk8fD5VKnY6TTVObDloPVpBMnRucm8iY2BLQ0oqMHM/dyRxY3EsLFRifH15KHlXVDAze354NX5uV1p2KXhuK11RT1lvNjclZyhKfDMsIkVq''@;'; put 'put ''eVNfJEBmV0pmL1c6bnw6YHhQQlpnPzR9ISpXZU9XNnpfTGVAYkJvMXMyZk50KTVdcXglVj9pLlI1eEc/bVJ5TTc/I0dUN0shS3dtJjUoYlRNSXd5L0kkQlEiT3VpcCZ3bTssKCUuT2Ztd0YiJVtbSXUyeVAzYFtLaFJraCJJeHgmMnE1JVRjb2xxKnVUIyxdaChPR25oQDwkcm5lfn5DYUFdZUg+''@;'; put 'put ''cXlgK0Mla1MoIWE/W1BUYF9IKmFWcngvRn1YKl8vd0x6c206RjlJQUFzaVc0YiZiWmM3Imd7VFJAcGl3QyZHOEZkOnohNF5eZUdQdTA9d3ZpMENyaX42RzA6TXpyckQ8W3hMMz1hekM5IUQuYilMaTZuPTRoREduX0VrdzFaNkAzekMiZW8vclA8ayxiWnRyYWZrfXJnMXBvRmsieHpIWHZTd2hp''@;'; put 'put ''Km4+YSpGfDNAX1c6aSk6I2VxN2VrU29Ha2tiPGdbVHN5USthQnZ9OzMsKD5hV1ZtVXYzM2lsKFdoSmIrN2w4Y1ZlfHBkL200N2ZKUDJMRU5CSzglOXBjeT4kbXApe0hYPCh7SDRJaWxVaF5ZTFhBZHZHZE5kWERPXnBzNkdIXUZiQXdTZnZqL0hGInxzODptQThMZ3koX3dhQSE3XlhJI3xFZk9a''@;'; put 'put ''IzB8JipDTilzQmwqXkBLVztCKy54XlpCZl0vQ3dJczwmPTkiR0RPZXlobyFqa2ZeWE1Pe2pDYzo0ISlZI1lERnF2X3BfZGxtIy5WR1lsY2Z1Qj5hcys2PTJiYiFWQTkwVV5tflAyWmshJjx5TUhQJEpXPzl8QUlQO0NRRUByKVpOIz51JjkmM2AxcHQ3bTpoKz9vcWtyJk9VWFBnMGtrUX5GdVR7''@;'; put 'put ''fTYlKHZUPmFaZz0qanRlfVgybDxuXzlDTXFjeCQybkw7eDlUVmllW3YiKTMycD1Tcyx2IzRiXzpfUlBEMG40a0FLWTRKX2hmI2ojIzBHelZmSlRqQ2F6JmhSSjB+dFJAW1BZOXtZe0pCUkpeQVlrRkNNLklmd1NmPDJlKiYoUjZiLzUjJT8hLHclWXNze156Jkx7cCU8I05DSDNVbGdzYGJEYn53''@;'; put 'put ''fkcpLyVqeURwLlNEa3oreF9GMmIsP041WztQWjo+VC5WJHZ3T21VNSNbRTtKRFh0Xyo1QT5ZYSFbIUBPYXVQKVkvMlEyOWg1TmIxKT8kTVBqKENbbnJLcHViNk4kOkwyY1YvdmQ0ZiRmNGVuWW8zc2gqIj5xJGdYbzh7TnhUVV1oZEk2ZUJOeDVQOnoqcHNYW1AoMnEiRm91M2wqLClodUh1d3co''@;'; put 'put ''YShAQW0/ckcwSyhvY1tWOCUjJj1jdkZAbSJxMkhBRVNrP1lQMShLVl1DbUB1UHpaSEIzKG1pQkM1em1FNXd+Nzc/RUJwRVc0fUNPfm1FdHRETzt7dkV1YT5DNjkvQXldRHRhTihSdyg5XnFrJCRKanRJeCZmK0V3SXIqQ1V5Yj0rI1ZlRVRDU0FbSDlSIjowOFViI11CMSZUJXZLKGlQJn1AQnIl''@;'; put 'put ''eDZPMW9dSk5ZaFhjVT00PzNTYi41SzhhNTN+XXEiJGd0VGd+TiFrUXVQTkpGJUtONCZSTS8mej92dzVwcy9UJElSbzlsXVRBPD5QI0VBR19KLGJ6LmZ6MV99W0d1SyYreVNhbjFPOlNEciYqcyRsMl9NdGlHdUA+XktNMyg1NkF7TTpFWlQvfFltNHM5aTVIPnY1SDRWUC4kN3hrVldLM25GYWU5''@;'; put 'put ''WVo7YUUqW0lQQ0EhRCs7PERdJSNaPWdLQU5HeWJVQSx1VnxxbiUyS3JHeXtqP09OREJTPSxMfnp7enF9bWE8eHkxLDhvWzhzZ0pCQF14Nnh2MCF6Z3o1SzIzVkNnO05YL2lNYGY0Ijw+Ok4qQyJ3P1VpY1lHZlM9XWoxNHkhTGVnfjdQQy5nZmtOL0xbSVE5LFVEPzt7SCIjXmNzYzBBblF5MX1Z''@;'; put 'put ''Tio/ZSEiTSVpeTxsNzZUW3s4PjZfd1IhKixmdUgmUkleRjIyKkA9Y1k+OFtAK1BrVXF1SXZ0YCsrVilPRioyWV1KX2U/PihvUXddPDZ0bUtJQEpIO15+PVk1U2pHWSRBYm5NXlVvU3JRaUg7PjNWNTErW0toPnhBZU0uMmNCQnZ2aSVBInxTP3MjaT5KY0o2bG9YaTVgODcqSE52bWAkKmh1Vld0''@;'; put 'put ''SE0mOzdOQTljOCxTeUVoVUJaPDt0S0loKnE1YVgjdCttPXsqT2NeX08uZFRQUC9gMzA2LDlsPUJhW1pVSFJnUWJLcW9rNzMpYSk8dHp0fVpVJnR8TSRQbG9FaGBAW31iRFJ6PGhENjhaejBKeiR3T29fR0Q0IjBjSVE2LjQxX3tNaz87RWN8fk14WXBpbj1iXmVwWDViKWxoZ3B5eytuYXZJPzYw''@;'; put 'put ''QWhqUXM6a0RWTENELkxkdiY5LyFeO0oiSDAmNi9MRllGTmRCOlg9SVFPTU9vPmZmS2guPGE4WVFZZzJXWD8sbDQxIStpKEAxaDxeMDd8RW0rVSFuKGNvNWtDaWB+LjwpJVkqMiNtKW1GaGNfcDNbUj1CI3AiekJdIy9rQjYmbDE+dTY4Wy56ei4/KyRYZG4lV1k1Vl9PNFEoIVBEd2kqUERGS3xS''@;'; put 'put ''aTwhc0U7PHZILFUsJV5MUn5MTitkX0duK1RKJEQsNGZvSXJTIlNGX0hoTGRSWHZQOlM9Smx4XjIjSk1DMGYyXyJQVmM2TjB2OXRtJXR7VzVhNnc2bTxvLjFmcj5ubGxEdHZmOFt0XkR1WSVFXUtKanFjcltTai5LPz9pUEcrelYlM3YmQGI+V01xImNuZCZKb0QvZXxVWGpfcWprbmw+TSoyXkJR''@;'; put 'put ''SjUoVzFpNEpXazI0R2soKFUle21NU3kkbnpKbD1EcV5WPTZbRmVjWXo8RVt+N2RlKik3M3BoeTFqPDwrOGBNMDp3VS80KDNhcV1SY3lraGxkISguVSFQMEZBXSFAZXFRWU1ac2lRbF9JcyVFLG09e2VQUjRbSEVEKEp4ZFJ2Kjx1aGJdbiE5bF17O3B7OjNwSmVrS0BWZzE0RVszcV1+TjwoXU0+''@;'; put 'put ''RlBrTUxyZD0/MFAjUT5KY2pNdiQsZnVXaCRNSFB1c1ApVDt9NVpkeEN6Tkhyay5RI2F6fEYkNE5QRCx0akp8KmhqRGR6PjRMZ0V2XWs/Y3teQ31IIllYMnJjfEhxdi96KGN2e25uVFZ4T09wKHpyQ1Q6clckUi5eKF91fnswJlIyI2xfUWBNT1NPQG0mRmw4NEwpNCxYbDFYSC90bnVYUC9+ZXtM''@;'; put 'put ''RywqemNpe2tgdU59KiFVcCZtJmZ5XyN7MVkvbTJ6e1pTWnZLI0ZgeWtQd3QhYHRKVmllNFE0T0s+fn5iJCtIVUp8dXpmaTZaUWRJcnAoLjBpMlo/KGA8Jkg7QH5QWEpCZSVZRFglKmhJSDBTSns/PFhLbHd1djc2PVZKfHcubjJ3KGx+WV9vczlBUlJWLk06MldraVZFSD0oOnNMJUtBdklgZldl''@;'; put 'put ''KDk5MysuNn1rMERfWCMqdXNTTlpNUEg3dyQvd1U0WE91NHsvRl8mYUJ2RERVS0tXemNzRXghODt3cnVdVXJfL3Q0fUlpX2JEST5objZKL3VfI1khKDUvbXJ6R05aKChBLlpIQ1tTSUBLT1BaUF47d3NtJElhNEtfZTs7TGBfRyV6dT16NVdbWm9EW1MlPz13T3g1XUZFclhRQWNwZGdqPFFUR1VZ''@;'; put 'put ''Pz1ENCU6MUl+QGJ1Q0pxOCs4SFtYITVxY2JzaGAyIys7QCZgVUNjJVI+eD9paitqREBiKz1JSi9QQVlFMT9hPD8+biIuSz1ITXtCVilRcSVwISp0Zi88X2kvPywhPX0/T2tqXkNlTllRZ2smWDolNmojUmUhVno9XmQ2Umc+c31SVWo0SzRRWUUsb2lteltSZFFqKTtkRHJQcnVkem0lVEpDYlB7''@;'; put 'put ''RTVYVkZkR0t4eld6I218T0s4YCRxNSkvflAvfFs/WyReWiEoN21qWilkSWxgWCM5OSNDfTAsU0Q2cmQuLmkxY2prVU9sKiNmNX0+ckN2TEUkdyt5Oi5LdDU3eCsvSmo3LixuWF4mLHt9UENRLGpEcHswfDZyIUo1NkBATk5eQyhIYDMmYlo+T3tsPytIPCt3QW1UUmYjdkMsdmJyfGo6XVUrUj1N''@;'; put 'put ''aEJyQnYpfmVUZGg2cyVaRXh4O1JgJCE8d0BEKGRwM3B7aUdvWTBTMW0uWnU7XTx7dTR+ZlppfWBeR19bbTN+TnMsRHFWKSN5fnZrJmVWSkJtbCglM0NWWH0zWVpjXjRONE5nLzUwQERJVmtubkh8aDJaJHNIRFI9NCxrQWIsWHlDaCpfXUxCZld6VFg3WmpRKVRreV5bdS8yaGBjTDk4WGMrfFZ2''@;'; put 'put ''dll7PWRQeTh+R3EsS0JdTTk0IUN+dGxkVGRmVSJ9JHp7MCk/U3lSK0I8ei5IQCN0SkppZnQ9W0gqRWwiQXpMcGJ9WUM9Inp0eWJGM0wvSmY4SUJOMS5HOTM8IkhZdnBNSzEvT21JVkhfKV8oPXRzNUFdTlZURWZxSHx5Lz1VJSRSUGdgQHNjWSJUP1tqdkJ9fWpAWzZpKGxqaTZiS21vLEtCfDki''@;'; put 'put ''KEZdNkdTLnhqO0NfbjBHQWAmfkRDT3F3SUs4K0IpTHNVLjdnPiRIRU9VLmVAcSple3MuIkE8ZSM6a34laE1zMEpVJC89SHxEfmNpdG5LJVhiI0QxcnV1ZWwheTc3RmN5XXB+dy9BOF84PWROeHMyRCp8MHxlfGVHQmg+ImdxM1dXPkdiPF5uem92MVN1NSpkXz18e3ltZkNneThKSGVEaTk8PlMq''@;'; put 'put ''QFBWZTNTXW5Zc3MkeTJFQXB5Y1lGL2BPYHZxWTp7d1p6fjdJZyh6JCo3XzNnPFNKblVie20wWFJzNyQ/L08yX3VtPHFbcyxBQyJqVVFmS1VCUW9kLEtgNS46SmVGPFRXeDd8fSpMbktzXTk5dTZNWnY5bGpKJERofnlHaDddd0UpfiZyYlRDfElSRlhqZTlfdGlAbWgle3FTeFhhdUsiPmZIVH1B''@;'; put 'put ''LFB8dG5dZ3RGSVhCNC9sRFdFdENtTCl+REBrLzk7VnlYemt7Lng8VEp4eG09QlRoVTJqOEJONEppREhPNDY5JkNUPjZ0KnFdSDozVS4pP11RR2BZR21gd2ohYyMhcVhBYXVvZ0FDKnRrUz1TZCF5bEo5cmZxQ3pzUzNeZUkwcmdodTBkdld4JlZAQDIyQWBjM1tHP2JqbH0zJn10P2JfaDQmMFpJ''@;'; put 'put ''Mzw4c1hfO2QwUEgmY0IhRENGdjlsJj5LU11jP3k3Y01pN1V0ODQ4WShOLFpbTkNaNTtIfE1UIkpEQlhgNX5gUyx4LlFAL0d9S0tJKFEkX1NrK2phNDg6YXc7aTU0c1QqTipzd2UvPnhlITtISCFgRX1oTmFFNlJzJCU7dEdFN2IzVi9NeXFPUWA9TiNme2VvPGU3QnxzTTpnfE9IOTJ0eTd0dE4+''@;'; put 'put ''d0JYQTpwQ1U3VmltJWQsbVBRcVJvRFB9Pk5paGBAP1llaksoJnA4WSksckF5RDNiYCZLSFZKfiZxfEQkQGJIKypvaTEpRTN+QmdJVShvOUJVSjpgYWFSTHxCbChOaEBZdikuKyNIVGlCb2M1R102VyQ2MTV6cTZBIk0qSX1XRWBJJTdVSkFkdkomc3x7Ui5kTUorLFo0S2sveXk6N2klSXUhQC5k''@;'; put 'put ''Ui9JVTMyQlJKaWJ2bGAxKSs3P09hQENEQ1RWP2RARGZOOjtqKFk+MF1qJFdwXT83ZnZaU1BCNn5FYigkIis9VFdYSl1YKUQpfURBQyZjZCRFU2FdZD8raGdDYkx0aGRSP1hrdzpzaDM3SX0meDAmU2ZKWFM2K2Y5W2Q8UkoqZHdCbkg3c2Y9SmRGU14udUNARmBfb2o3VkAxSFh2dTBFfSgmJkNB''@;'; put 'put ''N1QxRWY1IUtpNHhFUCtfXUgiTGtNamE6SiZ1d2FHZjEpJG00QlZrO0o1d3xZOjhsX1hJa1p3dG5BbXxLcU1NLEpJRzFiZDZsYD1TWDhafHJ6cEZWRiU6LzZnMyZSe0Q7bFJMel9DPkVLeH0vVjpOYU4/TDNubSoiUn5Qek9VUUdhUCk1K2ZtIzV2JVMyYE9FcXRhdSJZPnMhLmZPeWtlWTVrfXxq''@;'; put 'put ''OjA1Ty4jMG16WiI0UUUpNyxFbUdnIU5CWFBLTGRKSUdIbTJbflllZz01cGhTMng0NDFkYms3Vz9ZcVJ0SmQpN1N1Vns7aXBfRk9OfjE1RTlKKTQ3cVg0MWJbX0VOeXxqLnswdllxWEB6SD1CVT4lUl8oNH4xUDc1T0FzfkpXTHQqW3tNQS5GZ0NIdTVZRSFOJVJiXmxsfEVIZndXUkM7Plt3d0x6''@;'; put 'put ''PShJRStDNkA+SEJIbm0qbVIiUE4pP3NpcEhZdXVvMSJeU2xBd3FpcFExQzNWMjJAdDEweEN4X11MWE02WmRbakZvT3l0P04jN24hKzR3TyV4ZE9PQ3k/TmVTeSY4KDhGXz00NnZ0WVhONmt2OD9TXW9yJDozc3NCPEgxN0IuIVJ3TWV7Tik6blI1REd1IkNFejxIQHVQbGg/bV9sXU1iIXM+K1dS''@;'; put 'put ''cHpAPEpkd09VOTk3aXc3NHw4dWhrMDo5d0FPREkpfj4xJEF9WjV8RkFsQXhyREhMIi9FLyYmLi5QQ0hUJnw0fnN1RkJiUUApeD1CQ0o5bEg8QDg3M0hLVUtkRFA6X0BFYSYvRXM3Wi8lT1g2VWY6Sls/Z2E9Q0dDcmY5dShzRj1Tdz8oa3xpZkNyUGJJTGFXLEZbb15ZaHtGVGJzU19FZ3lKIyl9''@;'; put 'put ''MzElMVZ6RExJSWR8ITJSKCFJbzJlcW5xYiY4eSsvVDReV1htQjlKLDFFZ35EdlZVbWZdb2l5UHJ8eiZ8KWgkfElOSVhFXUlea0dhb2hzejZPJS5DfUdIUVdtfFhzL2ptM1g4cz9DVGtIfCNtSHV1OitrI1A/SyQ4fUJJR1hWYmgrYDxSRjFfbz5xK2RHbSxePERpJWpadH58NFNJUTk3MVMhKn5O''@;'; put 'put ''SE9LWWZqUWphQFR+ZCE4WGh2fTVjL2NiWmY3YWgyY0toRjNsb2ZZTnEiV3NqLzBaWTdpWkpIWWBqQkdhM099TjklVixXWExkNjg7eyw6X0p2SzdRdmlyWUZrOktJUzQqPDtANjI9QSE0fUN7aCN+PDIwT21aZWs8YkguSGhJMz0wanJlTnM7alZ8QTEofjpnRSMmTm8zdltFXSMwYyMsZl4lSCxQ''@;'; put 'put ''YG1wc1A4bnNWUC9XJmV9NSlNN2MwcngpZ01JNVlDUztLRz49RVhUIkBZNWJiQk5zYm44TlRVXnwjfW9eJHMjNWc9d2VQVHtxd1dJKXtwdl5bNiMyam9qNGAmV3FsYElkU3sqdjt9Py5YNyxwYy9tMjxkdldxTUR0TCZkeTx9eyk9fTlOeDdbaDZtZEFeY2FkQXs5PWgjflZOeUgzKEQhZSV6cj0m''@;'; put 'put ''cTQ9T1RQMng8eXM+Lzk6QF9mSVJeU1JjNlBnbV9DXjIjIVIyYmNxYGBYVDp1NiVeRmd1SiNlIU9IPDlAaitaNmVldloyI3wwfm5oNzVGejZOLkVxclprSiNRNyxdM2pUPVUkK2JRPFZbQlQjVVV+JFQsdnIvTC44QC91UmcqZ0JQL3lHPC5yTF59UmgueV9edGxLbj4xY2YiNkVIVkcldE9HRUwj''@;'; put 'put ''MD1fVD9FKD0qOzZ6Nyxzc1ZgYE5aYWt3M3t4fkk9cjZbKjQ8ZHR7QHRrfTpCWncrbSQ8L3hGMF0pa1B0RiJ1SSRjdF9FMVd0Pkd2YClsM09GRXJjJmZrMTp3Lisha0FdIVZMcE1rNDJTfH54K3p9Zng8NyZUI1A7TlI7fSg6bGtPTS52MDc0XXhpd3owIWs7a3BNZiNBbi9Pd2tMPElbL14rUyRW''@;'; put 'put ''N2dxPzxGcDtQc3ciVEw8SjRlKil5NGJmIzx9bXhxez5bLD9kcWxXekcqSUsicyIufUJpTzIvInEqI0ZFelUjWjJqP0pvfSYraD9FciYyTzNscjojfFcwXUAiemhOa096a21fPnBKayo1Mnsodzl4KzdaanZ2eElNXlpaVT5NJVcwc0RKU0Z+NHdJN0tEOjJ4OWNIQit+ZE9oUzF8X213RV9gP08+''@;'; put 'put ''cS9Lbz9HWHg7WmxYTXtjMEpTcGlmeT80Z3k7UWlpRGVzaXNwPUJaIzQ9YzpJaElQKkApL11LI0tZYmhvNCU3SWksaE0rRSFQIWBfTG1RUWRaPiR0MiZFOzJmMlshQXkhMzhGfUZaeSRVfG9fPD1LXj92PDwrVFgheDp+XUwlVSswd2JWXVRJMCVWOWxpYmJKVHpha2Y+anBRLGQ8W144KFpTWDxS''@;'; put 'put ''UyRPUHE1aCl4Rkp8KlFLWFZ1d25OUk1jczojaHt1Pm1HYSImYHMySVAsY08ic3ZncFE+Lll+IUg/fX5JO1lYIiElIzdMNnkkd0ZpaGI3MFRFfVowTiQjNWgocDBFbktXPDYsOypOSWA8eDh8Wz0yT1d5XjlZL0I8XV8mZXN1aEZzJiR+dzVZZHtYPD1Ne3o9XXAwMUt2SXBXNFlYQUh6YGZKfEA0''@;'; put 'put ''bHoyVkxYOl5ma3A7LzpFJCNQSVhCI254QHA4cjkkTTVpQDh9dUpAeG95d3JqbGlGK0U5eXpKfTRXOGdHWVZ7al4mZGY3a19nVlRMcFp1ZGkybktoTCkyQT5kPDl5M3hscCtMKXAuTT1wVk5sPFQmbiY/ZFQ9VCtdPUZbdUskNGxpYDNbbzJwVDU4eUx2Z09ZPmh6YXdgNzY4Wk0pK0tEUjQkSFJp''@;'; put 'put ''O2RuKXskU1VUeH1+aUBZaz1tSTQ2dkZDd210KF5EbmFGPV95fSNFejFrdDN+NT07bkAmbSspcUpuTGJ4I3kvR0AxUlQ0ZmdmQDxge2NaMXEsKTp4aWVsTE1XeDJ5ZjE6UlphL1NmSkN1cSEvV0p+LHpSWHZ9Wlt1InFRP0NtZVJzUFc2JHtXMmZsb01COCVJcyFyaXBwbXowNDJsIWx7OmpxZlBF''@;'; put 'put ''IyRSeU0oP25bc11KW1FUayR+KFB6byo3a20+Okd5N1pvK34/N10+Yz8+dyxeZCEicFFZe3JvM3dTPkJLJnA6LyF3JG9QRV9DX2pAc2BSV0B2O3ttM3s5M35lMXRIX15HMCE9InwqaV41dSR2PXssNzNtWCFnY2ppSSNdZ1Y9Z3ptLGltMX1YcFl6WiI7aUhsa0QlczUjIzhoRXd1S1h1cDJ4dCVG''@;'; put 'put ''SGRYNjRKV2pOeXo0JXEyJF84fjYpcCl6VTpick0sMFspJUhGcnpEU1c0RTwzSzFZQkUrZFdGVTZwTHFmZWg2Yl0wI35OO1J3fFglJjdNeVI8QGspT1RhbDkiMXwhNCteOm5ESVNpJDBlcFJFOWohTV5hRHlnWTpwRXpafl5Vb0xSVTQhaF03OzMsVkRBeHpkODIkTlk5TSZ2M3gsR1pNYmhkMVJW''@;'; put 'put ''ZGIiSSh7eXEoUmR4cW8jUWZSemtgb11aMkhKdzBHVzw7fntzIldFcF50NiVTTGhGSCNjUnt4PXVYSjFPRi5tIU1yOykjLllmMkd8M1Q3X09ZJlZQWklfRW5fW3ZQIXdrSSN9XmVSZnBbJmxLfn1PbFEobXo4SF5jVzt+PzooKWtMeSFSdEVRQG1qXUt5fkNJMk5qLnQ8dURDRSVWOltfIXE6bWZp''@;'; put 'put ''RDd8OjhbNjhwRXo+Z0VKTTcoSm1MelN9OGtNP3oldFVmOTdfIVlJb35AP0lzPVZvQj9dIT16SEokcE45ZWI8YEdnKXMjM08wQjVZVTJ0TEA8dS5lZ09wZjRXfE5+XWZ4eDBtWl1GZ2dtKlFFWVE4ST8zQnxWa3Q1biYvaGFGfXpXUGIuPS5oRmlkcj4vODEkMnE5IkZ5IXc4ZyVGZzgzZzI3ek8u''@;'; put 'put ''QUwvbWBWWSUzO3RCQU1iYEhnN3I2Jm5rLmBdVG5GJXVqNG4pfT1SWV5mNywmIiRwP25xI35ENGpWMXpbW0tVMjo+aiJURko1RkE4YUt7LlFbQCxgZTl1Jm4iUzNmbU4oQzVxNyRwT1tbfEM4LDEibFNhMnd8aXNIaiNpeTJCdjQ0JlA7Vzx4dXIod3VKcCFbJFAjMkp7LHwvOn52VG5zW25mel84''@;'; put 'put ''bj9+V3NhMV5nIj96amd2MzJRRjkiLzlMXXZGLmU6NmJiMls/eEczcFUmMSs5OXpZNWhtMUBzREB0JixsWzZTZnZ3SV1hUmZqJTVxNyQzK0h+c0JuMmBHd1BSQ0dXQSR3VXdwWmVQKkhlISJNOWtVUXk/bSJedHpgLCFSRDltS3VFUkg8KjIlWzxhOkk+bF1tRnpUNnFgXTFsLCQwPT5xRTRKQzQ5''@;'; put 'put ''b0E5T3ssaUJ7RF8qcyMqWjNQL1RPKX0sczg3ayU2JDhQJVM6Iy8sUlZPIT50MkRQdSx4IipwRmtYMV05OipacVhFSTpTUCtedTsweksmYT1lMX5BLml5dGE1VGgsTTdNbzMuRXc0blFkMXR6ZWVQXk1sQW8wOzBfYGBHTGJCeShTMDBiNX1Hd0Ard14vTkFdNEplQ2xhaj1mekRpfVdCS1FMfCNa''@;'; put 'put ''WXlmImw2cjBlc0UkSGRAN1lFPntBazdRfCg2UFB6NiliKW1uR1NPTW1RZGZjezs/PmhJfTsjSn5DYk5wLFVHWG4ySTlzdkZMc3ZQYGp2T2RKcHR7cnpxX2tXb1BgSDdpWDQxfDl3a29kQWVkW05PJF5pW0xUb010UkIwRTZpcV91MTohWHJnbFlRfWAhKUMla1FSajtpbl43PTAjekR+ak8mJnZ3''@;'; put 'put ''MWxdaFhDVXxIM1c7N00vcEY+clJiaE8peiouMmN0cltkSjxOSCFLL1JYRUNtKUtHSGdLQEkqUGlCS2VDYWR9c2VKS158amZOPVg4N2MlOjVWVFpeR2UsVmczZEhmKVp3QlkrJSpNTWhQNDhgaCo3bEVsRjgkIltkIV1GaWNdVFhkKy9fdCFnXW48eUdNW1pQMz05Mz89LnpadmJUc1NzbyVzWGtb''@;'; put 'put ''eiVsXmtpWXZXVVhyZEpSVy8rbVBZS1ZbdGVgdFMkUzRoM2l6L1BQPV5VW3V7Q0wqIT4hREFFblMjNTxRRj1aNz9wLj8we0c3MWcwYEhuNmFKRXZsaldjU0ouSzBzQHZdSnopPkFUJjFLIVk7Z3RSa15JejooQHMzR3E/ZGQ3bVt2XS5iXV9VUDksNys5WUVhOlAiJGBEJipbb1QoVjImT0FUeHVn''@;'; put 'put ''T1k2IVFbb2Q/YTx8NXZXNnNCZ01UWFA0VkRaOnhUZ0o6YHI5UT9KaUxEPHojd3MoUUYkL1hgdlNSNXlGTm1qP3cxZGxOfTVYXkxAJWxPISN6TCVuIyQ2W10hSVQsJE17amZML0JiUTU/bzUyLk9MSTciWEw6Lz1MPU9oU1ZKdUBycnhKeUA9JG0iIS43X3ZKKVJlc0tXaixedD5UUzAiYSYxWjEr''@;'; put 'put ''T0VeWztoNyRTLDh2eGl0XX4+cXUlNHx8XSFAfX5hbUIuLCxzOy4qdXguQkMhZW00THRUKCJAaF8qW2QycH1mSz8qeDQ8QCZ4NltdeXlsZHYpcnEwRDlJNTpPVF5VW3d7Jmk+OHMxNjJ8XXhSQUdBYEolTTsvXU4xQEowfCE9UWpTIXthLitRK35JS31UKTxEbTdfJTVvLFl1fnhEZHJ3UXs2fD59''@;'; put 'put ''XVZvbnw/NWNGZmVaMns2Y15ebU8zazguSG4zUjtkdzpWczYhQjh4Xyx0WEFHVFp5bSlHQnRLeHRrUTVWel0/dlNFNjZSJH4pVn5gRmwqI3MsbHszVDhbRylHYFhlOjBPOlovNDR8SlJjZkVTWCZ+Pm4+bSpnNUdjdEUxNlsiLjRzN0ZlPFo1PldGYStjc1UjQEtoaDcqdCNrWm5lMX5Ocnt8a2gm''@;'; put 'put ''aGFBOHwvXkp3e0tqXjxQfmoqdlEwOHhIMF4kPmQsMHU3cEQ5NTUrJTNhaS9XPXY2b2ZFN0Y6P3BvS3FJTjpfIUJIYlNpJlJ+aGhqSz5HVHJfJjAhaypFY2NpMlJxX1VRb3dLdGk4VFQzanwwVmJRW3laVExzd3tQJllndylSLD9KOHcwUyx1UEFDJC4yMGd8VlpjW0pPMUBOKCVGaixAflBjTzlK''@;'; put 'put ''diFqU35lNmcmNnRJbHx8bnxXYTkudmJyQTpjcl1ySWl5W3pJQnVlKnRxO0FoZHNpaWgscGRyOXdSQkksJWg0LyMiTGQxNFQ+M2c3M2NRM0BqUT0zMDtpeU9mOWFZb2tsck1PMyV+XjdeNWcwb3A7T2o3WHdWTnR5bHBrQEskaGRSJWJ5SDMoWzdCOSxYMS9hdmZFTWo6VFZ1ZTc3WWUxZmg3X2dt''@;'; put 'put ''RnVLJGcxJExSOHZhNWYiaXU2OiRyUWhMNGt5YEZwenY/bXUqYltvND8uKTJKITFeSkgyKz8lUmU/XjUwcDtKaTIjO319VEJqJWU0Kn56VFhnWX5FaCFkMCxbKUxkbyl+bF1eVT9mOD9ANzokSER9KS5HP1FDcF9PIm1dakE1eDxwYXsoe1tNczJwX2pCZnExJTplcHQ0bXZNN2g0VCVydTh1MWxu''@;'; put 'put ''fHdxc2ImZ0JoSE41VDo5RnwmZVMqYzVWRypPSHdgQ2VIeltWa2YxWzFsS2dyJS8pZTMoXkI7PD80fDpGXyMmQzJUQ048fDg7R3VWa24zcWw0aFUqVTt7aXM+PGkkLHk4amMkeXEkIWsyYEpJT04xeXwiMWNOU3hQP2lNRl9sUCksbmxgYURXVWxFZT5mNVMrK0B2bCs9JGd0P3IwWWw6Q2MxKjlS''@;'; put 'put ''OmdPWmBdfjFQZVR6P1Z9TDE/eWM4OU4yJV5DInY9bWg2Lmk4algwRXhrcTpdWlZuXXEpZmAwTi9sLkFeK0BZIWtyX0wiQi9TPUYuOFYpVF5SclV2XXtKZiN9eTl5PkBANCZlUkhiRHcoej1ycVgpMXYudmJfdnV3cjc1SWN0LzZONyF9RzZiYWZEKSx0QSh6c0EhcUBUTFJ9WHFNN2IvT3BjIUIl''@;'; put 'put ''K09Sd2JdWXN0Q342dmkuWDxENERmTVN7VCldTzNhVldNZFpLJUBUK3RJXWtqdnlJQUJ2QXQlbFl8WTBXSmprOU4mcUdzcjArM1N4QXUlX1h6PXQ3Z0MzQWRmY2BWak5AP3srOzJpTiYhK1J7T0NaPF99SVpCIlN2eXpuU0NQdHtCfT1HS0lUTCwoRiRsM1A4KTAycn4/ekVxMWZWN3dvcDo8Rjt8''@;'; put 'put ''QUAkfWNUd3o+WUo3eFdnREJzeDYqaXwxaG1+TX4pdiwwYEBKKklZXXR1OkVSKTswdmBvbkFSVkxBNHlFVW1JRS84ZE8lcD17dHZzKk0hPHFEc2F3ciNwRlB7QyM4X01+cH1wdkRlMWQqYk5oKktaW3o6Jmo7dTA7Z3pvZmduZC9dPEpkcW9FIUxfbCpERmJlZU15a0daODEpIyREfFYkYjNxKz90''@;'; put 'put ''eUpKPXhacF9GJWJMJj5GdylZSXVjKipkbzFFYipSfT9PVjYja1Q/WGc+JWI/SHQvQH5GMSo8KzYyaVNYfCMley9+YCo6O2d9XzNAKWZrKWAiVWEiM2VvYVNjWiVSdCRpTHVlRjxkV2NzbDVvOnFwS2ZVK1Y5IU1de2RPW1VjXkBWNjByUzlWTW09ZmBqTHUyYG1nXmpLKHpsImo7dzM/I29EJGk7''@;'; put 'put ''WDQzU21GSSN2Uy9EZjs0d3g5bE5UbkxTSEB3JXxGUCh3T09wLkM+bG52a21haTEoKV4ucTl9Mz80a3M4eGdyNkVnODYkbytoLHx5IS4wZ1tVQjc2Kz1XV2tWQXFzMGJ1ZHhEdjxeLnIoViJKaE1wcCI0eXxgempHKkdOdjNAUSJUdzJeZmRyfV53O2RJTUslOC5PckZ9IV0vJjwrSzwyeX16Ynpr''@;'; put 'put ''d2JXU0BDKD96MDFTZSpLXTdEcjk3QWhPRDN2anxPQlBzRD9hMEB9Y3cpSnF+MkdGbjUpfWxTM3dmKEN3X25aP3NDTSgqfH1zYS9mYi5eal5Td3I4UkEqfT4sPTFSUUEsbHVgUFdBcFhbOylhdU1HdlF8T30ycTckVCFMe2cldlApbklOZTYjT2ZdL3xjaUlfK1VROCl0ZyluPzEiUSNObHYlLGlK''@;'; put 'put ''dkQ0K0s6SzY7Oz4oaFMsdHYwZ3Q1dHE5TnNzdTM3JDpCMSM1YXQ1XWNHb1hQL1dwdk07Vkt8Y04rUiUkUzJqYS89YjJiUHQwY2dhS0NpRUM0Zl1iI0U2TGU2WD1Iej42IW07PWd3bSxFNVMuaWM4RjJhT1ZYTWBPMFo5a2hkemFaeE1yb2R8SmV5ajVTZV19O31BNDxJTj5HcnEwUilmZV0xT2hj''@;'; put 'put ''UlYxQlMjPCJNPHZAYjBEcDcsbEdNMXU/eH5MR2dXKWtwLGp0Wng+aG5xKmJZYl5SQFRyNXxgQ0I3Rnh0XjJNbmpWbSFDQ3lIWzZXPG07eXloNUY+SU5xWTlnNnNTRFVzIkwuJll3XSJHYXBvTU9rNTZdfXIjIlYuPGAidyNEWzhYcFp1NUpkOnR0cFdHQmgjISVMMko4KGxmcDFsK3Qmc24iSHJS''@;'; put 'put ''SFVySWdOLl5wIWM3fGJjRy9WODU9VzMqNm02dmF5QklebD41Sz4uNGZ6b19LempUfi8mV3giS0A/Rk8vQVcrLEkvKzo6STlrRj4xKGREWVs+ekM3elA9RSJ7cyZyLzAvVzlVU3YxVXF2TjMpSmd4eE1tMzpnZjpOIjZHUTRrSmhEO0l7ejF8Ont6eW1nWk5DX2NsQntDbkVQYXoxWUhkK1ArJCtQ''@;'; put 'put ''LGE1YzJ2WW0hJEkrU2xbeGVyQkA7PnQkcmglSklJaEtuVWx7Xz5BJFhPV3pWflZ6ImxHIlgic093V1Q6XkxRUkd2TndDUnl9dkclK1R8MCksbUtmdk14N3t+Jkl0ZmpKdX5RTlRBY0xEQ2FHZXc+UlQoWC5qSV5JKGgzeGh9PlduaWF5aUtmLzFEbX0iKW5xWGxKOWBmcz19b21+KyRCOTpbJjkp''@;'; put 'put ''YVQpciU+JCVde0EiYGtEMjUzY0VOQmkxZmE5VztAOChUOXw/anpyYUs2a3pQMCUzXmhWJVVLKUgkRDpFaCZKfkd0L1ZocS9Aby57eztpQEt5enZbNyVaa1I0UFYsSCYrQTldcTs2X0NOeyUzLCV3amZpY2lLbmBGWk1XUkd1SWxdQ1kpPCskJX1Cd1pCe0d6TlB9LmlJWHc9d1dBSlM8JWFwaGRQ''@;'; put 'put ''MTFxMEJlfHk3KFVhXn5Yblc2OVpSPFc8VHdId3Z2JHdvYmQofn0vNH5zdnBWJTkqe0ZpdndUYSRKZTZ7b0NbWEUmVzhvMmNRMStYTDU9JnhgSS5NVWJbdkwjdC54fnsua0EoL1l6Z1tmYUZhd1NsSGVFSj0rKWJLUSI/Oy56Um8jUip8Z3UlWFUsPFF8fGtUNjlCRnFPPH5KYUJgUSpOdzQ+Z2lh''@;'; put 'put ''ZVJ4MCN6fGpqU10oTklSb0J3KnA8bWdRTXxeazlKKFdVOjUweysran5zfFdyMUkjM3J0QjRCInA4LmErUUEoaGtkYUQ6PkckWzVuZl4oTGp0RmZeK2dIWTU0VnZ3X2BRNj5AVXt9XSFwQT89P2ZJdi9UQChmYzRAOSk3TVk0PkRmb0tOM0Q0TEtEXi5XK01FVFRjaTs6NU1KbVE+Kj81P2ZaTzN3''@;'; put 'put ''d08xSHY8czlKfF09ZExYOmcqZH5nfXxPMVZOLmtfbjBNaEpMc0clY1FrPmYvWVBGekFecH1UfnJQJmgifERJL1g1eysieldFcUEsWDYxWEhKbjMrfk42cHFae0ZSdmwwOHZSRiNoX2llLylHTWhvV3V6TGh8OnUuTCY+PlF7Y0wyYFImJX1fOVQkdlYySC8ofjpXcGdyUEBePUlkayNeTFR7dEgz''@;'; put 'put ''O295Vn1XW1deUSUmbytkOEZacklsZm1KdSNZXiQuTnIpU3piZkNmMSRXMzlzeVQ5ZFhPPyhYY29YR0FBY3VKOzBDYHBSRmJXWHs0aUNBOXBBRnpVdXVhdF9idUQzSFMza0VnMk9WVjs4SzV9WClZKGYmcUNdcyR1SV5BMlhIYmgwWFF9ZSQ0TWskVHJ0ZzJjY35vZlphQEI4d1AqNW1EcTk+fjR4''@;'; put 'put ''N2RxSyskUy56LHlhWE5rY01rUHB6cjlyYSUmJGJZMFZFeGgmI0VeUGN9fTV9IVJvR2ZrU3hUYUh7LFtiKWFfaXl8dmVESihhKzFpOURbaWJTa3dFUEVoVjBzQ2pBVStAInxfdngjUGUrUUVnVDRiIVQkZVgyfERVZXdKai9yR057cDpNODxdcHRnJCxkWyheQDhRTHIjUGU8VHA/Pit8NX5NSDdU''@;'; put 'put ''ZVhZXU9wNmBvOz97Kiw8Onk2cC9DNjFKbTs6eCVSJlUpVEhDSyZuJFlnczl8JWZibXE8b0FrOy94UFQvW2M6a28oRnpra0IoI1pIP2UhRFV5KHxJc3dkL0JOLjxEXlgyTyVUOEJbIn05dyZJMDBOalo+OmpzaGUlZE5vTWNpVjA4PWQlfmZMVHpAXTxrS2t2a014WkVLK2BDMVpiVHImOX08RDdz''@;'; put 'put ''eGBXUEh8N05lb3xeaVlnJlUuSnVPMCwrL0csPipYN3pfOzphVUQhW1sscl1wV2E7RUl6PkhEJEorKVBINUZbcTE/bTgqZ0o4KnMzYnZEcWtTXUVSSyIlLGIrOE8heD59LmpaYllXdUhbSTkoYGV6QDkyV0lbJj58V2YhbVVLY2dySVNAPHZ2XX05QHN5NUhyZn50IypbS2k1ZF9bLm0qXXNRSGUm''@;'; put 'put ''Z3pHemVFZ0pMbXI7K0c8LH1xT1tNa3VNVVR2W0dGYjQsKUhxU0dBc1p3Wis5d3M+NCVtR3NEYFd9cTFKfGRjNkNhOHRdS21HPWM7V1BAZGB+fUlXL2RMVjRIeVN5Q1AkQTxuRT4oVHlfYFldOFtxSX1FOzlYVSNZd114cXR9LH1Bfj1zfn4xYXE+YDMmSWR2PVR9JiV6OSNoUmF4UE9HOFhiIk8u''@;'; put 'put ''cFpXe2EvZlZ1VFRdKyZUayNOcG81aihZPT18UHVze1ZMTGclXygiQGtsUSQ5eFA/ZlBDLjQuMWpCaFgjZTYxSVhdYUx4MCVZdE5TX2QzYE1kbDJTRW0uYzM/Kl1eIjIsck81RmskWklMQlcydGRWIlNCeDNYL3pdNXo6PWgvO2BibCM9SFZ8ZHlAdG1bb3Y4MTJxNGFEKFV0UF5xeU5LXmQ7SF0k''@;'; put 'put ''QGk9aFNsbVtfNWNlcHdmLkR4UEhxbitxaXssMTdVNWxCTlRWWj9HVVA/MGVmUl9MPnlSVTVVfGJQe2Bybzl6OTM8d1VQLzhNZXFxXyo4fC53PGlreEBrPyhZR1M5blZrXWY0bypGJGJ0KzcjakNVfCImT0UjJEJoflAuOmhMZUklOmt5fSldW2FkIio6I3E8PG9aeEFOc2E/UT11UTtGbzRQNUJG''@;'; put 'put ''MD0+bDlSXjp8WEBlTG13PlIjV310R3tjOEEqZygsK1pJbVZQLCw0L0ksXT1TV0AkSCNiantkVGNzYCJWdTx0Wj0xYSRzMjYvWmQ2R3ciKU9ZNEg7IyRKNEdiUzdNQnA0O0h6U2NdWGxnTTxYTlZybHkicWU/QTZIYT5MXWRjNGZlbX0lb1VIVVZzOytpd0w5T3hvZHNmVDUqPipNUGtlfH59SXco''@;'; put 'put ''bGlgNVtXX0B2c0RDaiM5VHgidE4wQz51cEgrdS8pMG0iLE9rdFlVQnhMOFRkZDxiTzEjNnJXd3ZgQzc8QmcoVXNSa1ZgdHxCa0ZFaktHMWVpK0JSWSxZY1d4RT9RV3ttXT4jPUFxXixldkppS01HJUdpUiUqJWRAbjNUXkMyUGlhMHA1Ny5sTTF0dCtUfSpHVE9tPDNpNGF6OGZKIyklLCtvV1A6''@;'; put 'put ''bmp+ensrRk8hWkVTTFtTW0pkXzw/Vk9dK05dWlkoYi53IX0qaCFiZ2pBO31qLFFJe2xLPSp8cC82MkB5Mz1TOH5wLGJIcXR7N0opb0E7emoxSiYra0EqJnRXV1BzOjZPZkRqM2BpfiQkO1RdK253KyR0L2JVUHtZJHNbPEViezdjM0dIeGBeWiJmaThFSStCeT4qVW9bKDw+fVtkTXlDK2dYYEs8''@;'; put 'put ''fXVgaHlyIi96OUp8WDZzN084QWVLaG05QD5QKWkqWyosYik4V0cjKjVJVkk7b2R1WDo5bk1hI3ZSTm42WjAqRz5ZUF1XbVg6KiVkMCYkXTtMOU5iY1MsKCxkU1ZBNz5TQEMod1tfcUo0fGAkcE5AdyFGT0xoOj47KnNqQjBxL118XzxQMy9EJnhrUEdAYVplZzkuWjtUSE8zW2NvZmYyXzFBOyxV''@;'; put 'put ''WjtpNWJvQmd7KHphbG1WM2ssOktCUys4KkxRMlo9W3swWnljTHVyIXM3NWQmaGd2IyFjT2B6RjhHIjZGdyRhfipgelBMV1FYcUkydlJzOys9TUVDZFF5ME1WXnxtSCgldW1AYDwlPyt7flIyPmNEa25fKV9lP0s3VGEhO0FVOHN5VX02OD5ISCE8fmRqZUNwSDAvbiUmM2F+Jj9hWDV6VzxDNEso''@;'; put 'put ''cTE0ckAjeGlbKTgzNjVDezIhPzw4TUZsMktuaDtKQCQ1T2I4S3tBMi80bUk/cVUqUClKXnlkZkQiXW9qVkRzfXVxL14he1gpLG9+W1A3WTg6ejZ+UFAyWDJWbDFCbHE1S2BJZSV3QE0hTzdofj45WW99ZzNlOH1uJmE/bEQ1WCUmR3t9JHBXTHRgYTVnRGx+K1JUTFg1IWdLaDdxIjdWK3ZdaDt1''@;'; put 'put ''UnE6WlAmL3Z9cC8yeG1TaGxobmQsQSV3fjlnZyxLdEYlVy8mcCkvQTxRT3pAKkZGXXo+SiRlJGtWeU1VJDtFJXxyRyF+S3RWUVA6U2F5WU8hZmd3cSJ2K1Z5cy5vTCE8IzcybUB5MX5JOlJtek4wL0RsRUtYeF1XUSJtdUdRRTJDU3VqX0prd25wK1B2Ozg3fDJIOm1GMG5DcG4jY04rPSFgP1he''@;'; put 'put ''LkVoaV4sZ1ArNj1tQEpIdj9QZFQkb1JMZ3JIMzVSZT19bXIxNCZ+TXMwRDVtWn1ASHFtRWl8JDBXa29JPE05SjcjJjJUfTRPfWB+M158MlEvfGR9R25QfV47Uld7Oz1zcTIjTkNkV2hxcko+VmZzUmY7S1UrV0VoLzRjWHhaNSNgJFpKW3N7QkduTWV5Yl8hTDY3dC5hK0A5WEZecUNKXW9nNEwq''@;'; put 'put ''MjJYVjt0KSJDfCJyLiQ3O15DTztrdlhFSlgxNmprdSttQXpuPW9NY20qajxrK0YsczxRLi5ifEFrRlYwNjxlOVlUVypuRTVTcHpxIXtVMGBjKjJQS2VSe1U+ayQ/fFQhXTk6Yl5oJCQzcnckajhWOWxGYyoxaEchL3c8MiJ4YUEzeDIhVTksfkIhOG8lYGpFKz5Ubzc9aWZufn1CPmZPVz5vZHcv''@;'; put 'put ''OHlfIlludSF0U10wYWFxbksuNHhMOl0qK0A4W1M8V159eDQoeyRJMXMqOG1YNyE/YEwyM28wUFZCdjQ5dXEqXmZrXjAoYVg4IkFEbkY5aXh7eCxKbSE7aiJXQyRKfCUwfDApZ3NIcjwsc15lTG1LUUQrXSZ7bnA2T2UuUHVbVDQoc1p2Piw1cDVycS81UUxhe0d2JURGIkd+WmVIYSxnPn0rVjU6''@;'; put 'put ''P1UmQWQ6TF9pJihkbj1XK2ZpamdELF5MXTNOSSYpeTFoLG5hcVQ6YksrNkJlV3w9WVBjamdHVGFpSTtzTkJ2PW4iZD9NPDpNUUE0SXF6alcuaTc6SiV9Tlp2QihlVFk+XWUkXl9YcHZBQU8yO2BmQlBmPjpkT090K05nWXNPazFZfiZxXiE6KlQxMGo+Ji4vKXF+MTdGb2pjUFozTUtqUHI8ZFNA''@;'; put 'put ''bktJZ2RQdWc4SGswYUZ8OllwfTkqTmMqI1p4YzwxYlZPOH5jUXIkVD1iPlIhflY9JHxPQjpMUkM2TmQ0cEhFVWV5akVIUFZuNyhkdHlBc0s0eGZSb2pCMSV9OD1XJlIvSj8qMyIhdnplfTM7dUh8KjowOEk0YHJZVXY4Rm9GYyJrPzo7VUh+NkBfS2VXaSo9MWJZSkJ9RSo5QlEkLDZRe0Bbb0gp''@;'; put 'put ''JHl6cVpPRShoYHZwcnt+N2MiWEZmLkNJZ1VxZkZ4QFBzWyV0aUlMJlJENT16JVp6Z245ZElxaGhMeXgiYSZHVkVGS3xDS0xaPUxmeiNIfm1CZHJlLExCNilpXztyR3d5ZTZAaWhPb0xlc3EjQUl3OG5zWDtWLzJJOGpEIiZvdHdCN3taN15iRypURD5uQyo2Q1hlWVVdNUBReGVmQHZtLCkkdTBW''@;'; put 'put ''OEtHJCNqMSlkKCw8SUV4NEZdYldQenEySnVgISw9V2glS29VYiFCSl5+eVFYMlNzb0J7QFR8b1N6Mn1ML142dWxEZmBRLDFwRjYraXJLbXxLTWNtIzVWdUl4d3w2NzhZT3lxSSVCOnIuSls9KDQ8KyJ7SG8sRG9FfGFMenQvX2o/dyw0TWlsfSFycVg7LFo0bCxMJFc+fEJdYUVpa0RzV1g/NXMq''@;'; put 'put ''RWJUSzE7cjkzO28/bXo8Vm50dkkhTms0NS5FQD53JTZjPXkwUFhHZThDYUh+L3N3eX0lQCExU1g7WT5QeyIjOmd+PFVxa085YXZUc3U9Vm5XQ1VdMlp6U303MCZobV5bU303OEJdZUdnJXsjVzxOOktOUSw1OXdgb1NnOWJVWHNzaGlRfFZgfj8wbkMiXjN3dyF1ajpSPDs0OCVDMj9pTHQiP3Ak''@;'; put 'put ''bkIoXiQ9QjNhK3dJSDxJejQ5TkdLZXd2JjFyUFNQaGFuPDVAQE9XKWB8Kk5fUWQvJTlXbGJlOj1DM0lFZU09QV0pNU5vdEg+UFAsNkVkYkBxazF8Q0p5KX4qaCZ4KntDO2xoNFF1a05zUzh0emQ/Ok9aZV1sJERDRHNOKHphO0BBL1lhTTsiSE08VURSL1d0YltdL0ltJWQsKjJQMCp7R1NJfmNK''@;'; put 'put ''KDJtMl1mUz9pO3l3eVBzTE14IWlAbVQwaVo2UHl3KTdrZU5ecEJ0SUw/Q1dAJThGLjhCTzlGbm1taixKQk5ib1QrZkBBUjZMaWAqMWlGbC86VkA8SGxhZmEzI2hCeipsYHdnRS5hQU9lQT9CbHNXQz5UXnBBRT9GRDoiZWJ8JFZEX1pEdWA2UkhpVjp5LzQjfUAvbWtzfjE8Wi9tLjM6VH1EcXoy''@;'; put 'put ''b2t5U0RNazpEZSM0bTVsOWRAKWMmdkRzIzhvRj02OUdEVyY2Q3dVaiJ2UHlCdSw2LlAjMjZ3Y3FAJDooejVTe1drTywpI0wjcEAle3ljTHNmcyp4Mk5LZDxKUUVdRjtmJih8TSxIV1U1I2M0OyRTOF1HfnBoSmMzfUN9Pkdgd3xUcjcseHc8eltpWm1TdnZnI0NQOn4/JU4+RzBYflhGbmNRaEE6''@;'; put 'put ''dGhGZ3A/eCQlTDkyQzskImgoWl9AY0pfRU89MFBCZU0/b1NEdXcmaGAxaDBZWjxIL31oK3lKYU0+UV4wXSJsWkM8KFRIQEY/TlZUbDAuW0g1ZzR8Om9aK1tZPjlieUgocyx9blY1e1R5Z3tNQWM6c0UwY0tbYXRbaH47JmAld155KFhJSSpoSkVyVGYqbi4mLjtwaFpnZVEzMkZ5eHllak9dL0hh''@;'; put 'put ''eStlU3MzfHJrNVAhfWRzLz5ZJH1ENjM9V0s3S2RALzV4K2pZXm1ZWDVUdTIse2hUQkB0Nnc9JiVadHdUbCN8dFVJMytneFIsSiRAenJuYnxhSj84ZjN8Xj09JVBUTF9JeG1hRk1Ua0FFSFd9YmJGX1kxSHExRWxKJiF8b0VnVnkiPFYqJSFMaWNlcjlCcTgmdigkWSNQITh+alcmUjhnYFdDMkJf''@;'; put 'put ''LGtCPSFWVFJRbTZHVGJNKzdIbVN4NVkhcS97O1p1LmhFVHJhZEdoIkpZQV9BQHd4Sk5zKyYhfEYpJUssQi5CMzhQOVZNfnt6ZVM2bGF5fiR2TzAkUy4rUjUwdGRPLHJ+MnwvWGU6QF4sOSJ9Szg9ZyFWIlZST2l4T2FKcXQ4dj9QK05TI2I7Q2BnWW08JWJhYUZCMi5kel0xKE5uXVBpX08sW0VR''@;'; put 'put ''Nj0ySTMrLHRITnE8KzNjL3dld2VPdEdUU1JLL09fVzVhfix7IWl5I05Qa3E3VmpIO1VQQjM7ZHVbNnJGIS5DUEBsNSFgfHhXUiVuTVc8bUY3YltAckQrRjUvakw4anVyJkpwbWR1QXorXXsoaShfJT9WSGApYkJEL0xSY195QD9bRGJRLFhicEBtZng2IiJMIVd3SnJPI0ZhVS9DaUg4azc5YSs4''@;'; put 'put ''Si5nK0h+cDJMU3ldMzBCZF9PSS4mInljczJEdlFYZm9iYV0wQnRYbSE6WUYwXVE/b3cmdVd6M0xuI1h+ZiROU11dTUNLQihWWitNTltEajMwbUIpZ2BuYFpILFYzUXslLnQ2cENmeF43W3VTP2VjNjMxbSRdbkUkLEN3WldhKVh9OnR0VztKIzshZzExQnciN2Y8VDpfMkFPLl1ARU9ENkEzcDwo''@;'; put 'put ''fT9lQm1pRm82LkdPKDB+V2p2dmFbfS9WTWxOL2haUHw5dCs8Zy5dcjNqTldQPlhMNW9hI1tFKihqSCQwJWpTTVYkYX1LNHE1JlI7KktpO2FFT0FHPXRUP2VPQmJgVSFGUGxYaz5dNyx4PD5qdnFELGpoZm5mdElkKGtpVWRnOEl4bHBNRyNsL1VnbkgrT0JTLDpzQmt5d0JdTT1KN1UiKVoySnk7''@;'; put 'put ''dEtYQ3xeW0RCK1dQcUhkdWlJNnZMMXdtYjluRTdkLn5fTlp5aGxATmRbNlBMLHJEayMyWnVDfXsvRSs9ZVVDUHNFampOZkMpOWBlL3U3fTZkXX1oMFAxR3dvTXVZKElbVVRAX1krIlhtJkBxTGdxQlh4I1VgPFRgKWk2WSJFNS4yalozMjp1d0tVdmJeUHJEWW5nUEZXOEQuI2x9QDw1bDVTTEJ5''@;'; put 'put ''PCYyVXExUXByPihOY0c6Rk9TNHZCLl4lVFd0YVAhP297cnNAOnY0RCN+bFZBIVlpQSF2RVp0NVRjcX4kWiZPbnlnIyh+elMldzRLVlMjLyo5VVFpUD5wYEEvfndGfEo/QTg0ITdaamlgMzw3KjVSRnV4TkxXTGVKLmU3YTFmNk1CNmghMiY/eHV0eCVIOUpZU3RTWkFgcyFDZl5bPlpqJVtYOjtG''@;'; put 'put ''ZlV7O1VCZz1QcmIsdkhKfltiQE90L0BSYFh+RUJGekVJKSo6ZFlRcGY0JD1fQ2ZrKT1JXTN1RTNYRz0kSXA5fHE8Y0Nib28lTCtBXiw8PzBIPDMjNEEoIiJjbXMvM1lrUlZWLyh4XjEyYzgqTEQoQFZUSnYzbmNuXlNkTjhZIlhFRXA/KzxjfllALkt+RnpFb3lAI2VMPGd2a1MpPWRxUSxxYiZo''@;'; put 'put ''L294JmJEM3d8UDpHT2hqKWtmcSM1KkxzYXE+RWljdTl+KyptTWYiL2NleSYkQmFOUnpdVEwpM0pqZkZjOkpKdSFlYlZeT2kwTSlKND5GVXVDcC8hYXU4ZlRJJnU5RW9PS2w+bEJkcztfK0l7d2tgQD9xeWhLV09dTHtSfCNWdDwlMHQkP31vIWklX31OTnluMCV2Q29MV0QqJGNTKElZbSh3NH1d''@;'; put 'put ''dSw6IWQ/JiQ/RG8oMy9EQjR2U3U4dUlZIyMlK3wxLnRQNSFyb1dXV0dvRj9Na20sbEZyYjxFTSVCOHh8fEtfa3s1Tmw0ajtUOEB2JHhdYU9YPy8rez1rJDlWajFZYXIqJWRFRWxzdi9bVyRwW1AxKihGUD1QP0VgeSxfZGdiXXVETElzOH5oZlg8QUZVTnRGXjhUSUh7aj5OUDsrOHc8Yj5YVUY9''@;'; put 'put ''WEFvSGNQZS4qPyUpektzQ2JMPkVSRmYmNjo4K0lKanIxIX1JTTw+djB6LEYrU3x9fVI1PztRaEpjX3ldU31aPDU+KX13eUZjayh1dTxPWishb0BOdUs1ZFhUbDRMZ0w2ayY1clJOezd+elR3MSU+ZShoYX54c1ElXXhsQih7L31PbTohcT5lYCJzWlFiclgmSmViNHZ1aipAYTwsPTE6R3lUcThD''@;'; put 'put ''NUhvMj5LeSkxOmMuOCNqVEwvWHkqQWdoP3xbTVlJRi8hSUtAQjNNQmhIXVU9Lz5zaDBUJj1nInBGJmVVeF9sYzFgQjN5KlRdYCYpSllvX1huTEJWdHovSThtKDZGQHNOfTpOSzgiMVFJRSxsQCVDMCl+RzAyeF1zMitiV3htaWBUbEYmUHdUb2JfPDJ0cFtuTSJMIXc/K1ksKDZkO1ZIfUFFNVdM''@;'; put 'put ''Pi5MImhTeW5oNkFSRmY6MW5nPkA2OyppWlsvXW9TTnw3WHx8bGR+XlpRPiUlOVg9dk0+OHh5d2tvOyMjTXViIytXSz0oNlQ9ViMkSGd2eUxeXnBxMVY3WXApfWlZW3J2a2x9Lzx+Y1hzfSkpVXJxJUgyTUdkMkc1MXVJcyk5Jk0xMW1nXV1SQFI7ZChoWGRPazRdd2V3a3c0O2xlfG4rYl9vLC9x''@;'; put 'put ''KXx+X1A9PWVTajlrWUFdbkJ1fjAvcDNLeDpOMjQoTSsuNT09MC9eaWR5eHhVYUV+elA/dl9DZGFFZjs1XXZ1ajI5PDVPPiE5MkpwZT9OQ3NzT0kmZHA+Wy97TFtGUGRkWj9GTThGK358P30zLz01UCorUmp3c11COF8zJlFrVDdebng6IXtQN21nQmdEI0QsOGpjcTh1ZigwP200R0JeM1gsRWk8''@;'; put 'put ''bHBJOVlIbj8pVShVd2EqRFM8OmEvREgqZV88Q0IwRzx0WCxGeC5MTiEpYSNfPmNwX09JZVo6JVl+N19dayp+cWJFVVlafX50IjBSR0B6NFhrU1VMU0BCMTxmSml5RWtJPjp1PnR2SG5ZcU9ITCsvcW4sfihgWyk1c256OjBiNyVNeC9GWHhNWzJhLkxfLHduKnFdLk5rU1ZFZnBXT2RbT0U9NE56''@;'; put 'put ''cEozQDA3aVF3VEBydC5ven4lNGcsTDFvKnZYVGt2VkxVQWohdG9jbEghQn5GVDNyXjFHJGRXNCJ3PCQ5a3EkZE11dFclYV9qWWcxbj4xUmR7TllUOzVSZktfWiM+cEs4QEN3NCZjOCY1TGx7RmdxOG88ejBfe3hXWWRybSg4XnA6biYkbVt0aighITg0ZElXcT1NQSFbR0d9TztbOVVUdzoxZSRN''@;'; put 'put ''Tm1aKn4kPUtVancsTm5peC9sdi9yTzlmTHxlVmYrUVB2IiZKRnQpaEJ4IUpPWX1vZVdMfm5IYE4kMzxjO2hASmtXTVJhQChob2dyO05uVWtydUtfVUU1cnU4PFQ4R2JEan5IWlhYUlhobjBrcWY/LngjZEA8U18+c1c0eUF9JXBxNUd+WCR9RlR4dT5LakZeJmV+Sjd1fXlMaGtvNmdvcmdWZCYm''@;'; put 'put ''N2xsUiVSQz1kcWopcWw7ajUjZnx3bGFeRV1SNiNMZCZ6XmdQJSR0L2N2PWJTXWpeIWlXQikhKUl5IV5ZY0J7TG9vRWFdUihlMz1hPmtuQjl5Rzo0LmFzS0l6XUw0QD5XOjE1ejt4O2szITVXLmZSJj1ZUD9NMT9IYShQdUx4MTd4OTlSZDVzUTwxNnN5eDljeVVIb1I5RlJ8eDpgRmUmMjE/Vmpi''@;'; put 'put ''Pzg2TzRxS1VpNlFlNGFgMV0jfEoldzR9eV08eU1NR25PYmE2blNrQ14keWM1Xl4wP29Tdnc/WWtwa3p9JmA/NjRnRGZuY0UxMjVEczU4MlFUd3lZRGw2d3lNOmlIOUhbVlhmWS82JGVpdE9bLHh6aCtPKHUmI0swUiFmPnJSPTh8WWxeSWlsX1BrJWk3SVN2UlBsflJ0NUxvSyVZRzhIZEArR2cm''@;'; put 'put ''MlV4SXd3Z08vKmZxM2JuRSpkIVspbmA9e0d9bFRPfHhUYGxpbzNQPGdnbWVaMyshSzs/P2A+SDFefVksYTBReHUjUjNSNylhKUx6KiRKP25+M2kqY1liITomJl9oPEw4MzU4L15Oc3pSaGBONG9IXXduT1Z1Vm4pbW18cT0iR1tmTCU4U2thSXVYc31JOkcoV2ZGO3Zte3pZJlR2LlFKQzNUNnAi''@;'; put 'put ''RmpjMGM7cGN3WFYkdGA7ZmRuciF0bCIpcDhpQlJuKmJyO3dhOXciIjRkIXZ5bjw6VEtvLFI1eUk7TDJQZVVZSkZHQnNoMG5Ub09dKG1HMEAqV20hOjAqZGkzIzxBYFZCbTtdTi4udTdYZWx1aCU0MVsrTVlTdXohPnZYT34lPUFEcWRPQzxua1B1Q0Z+Ym8rVT54YU1lJXk9ZGR6XytCYVE8JChr''@;'; put 'put ''RWkrQV56V05KUmd0dCMjaTQpailVX3lKRFR3cWxgaXAhelNabWlTJnlUUUM5NEJXMHtbOk47MmdmSDU4KWh6bml2Rk0zW1s0IUxtVF48KkJGd1dtX2V8JCQhVnFuM1k7blhiQl5FTkhEKG5AMFp7JX1YRiVhdFVpS2IsVGUxe3h+ZDozZ2N8RSlHIjVZLD1oSTJCVUNGJV58W2ErIWRjNDIoI1Y4''@;'; put 'put ''IWsucGFXI2V+WmFeKHoyREVNYSpwdGVdWkIpczVmbmY/eiRaZGU6UFBjZ3k3KHNzcXlEQkdEKHR4VlhBfDomdGJ2OllAXWV5P0BKRGV3M3R+d0c8Kix+Pj9ESEM9YHJVJjVyI1ROM3okIz5aIzovRWJNWDxtNksxdFRCVH1LW2Q2KlRSdnc8TlUkXiVudmgmJEpTOlBnajRydGd6N2pzaT9gaGRH''@;'; put 'put ''TEJmaGwoN00zXT9NLH5dfC9oe3Yjbi9Mfjc+N3p4YmlZNSYwQXxFN0paOlU9QC4rcENoYDpKME42Zl9EZXVVL0cpVFJwdVZTUVMqZWt3ODE2YTZCQiZ5WGBteTB6XkZ6OWJXK1BfRlU/MWlhNy9UJDhqN35lKkZSY05yNigxd1UkMk1IbiJGPXQ8P2ZodlUyPWA1QjxbOWpUJW8+N0lfY0s8NjUh''@;'; put 'put ''RnddLDJjK3lNQGJ6dWxgT3AmJklRPC5dfl1WPjNeSj9KQS85Vm52OX5nUXZhXiF6PFl3Zk12dFRoTH47MVAhOnFFeWN2VmNNMXU2VDg1e2Q1UipdXkd1d0NOV148WCp+LmVsfHY+P0BKMX5GSH53PSk/Rkd1K0RzJjV3RH1JLiI+VUk2PG0hNE40P2EuQ2J1NW9oWUB0V15BNSRecX0wWmA6YTE3''@;'; put 'put ''an0sbV5zZGE4U2NUJVB3MT9hMW0yRmZETSVhOEJ1VmF4ODp0bkU4JTRQMHY4dURlbTptcSFsek1zSUUzX0pHfnIiQSsoOFs/bXsoOURyJUBjVDhGQ3gyd0ZEOlJncEx4RSNBPER4aEldRnl8XlQuWTdbclA3XTlRRH0oWGl+b1RkUXpXRnFJWngySEIiOCMkP1JRVHp+ZTd6aE9PYVBeImNqbVle''@;'; put 'put ''cFQ6b1FGNnBOYk1mOW55IWFTdSlKLHBDUWBqcjoudVM7dj1FSXpva0IuPGJ3REl2WzAzSD0jNF47P2h9bWRaWk0jeDBRXXRRLlFpeSJaKyNtUl1yQn1QM3lne0hvKk16NjlIbmpGYFY3dCxuaXd6ZERrNGFuKFN6d0tvWUBAME9zYTx0dVI0Y11HYCg9dCR+e0NiS3wpSXhRMzBtT3lBSFJKJUsi''@;'; put 'put ''Ol45ckFNfTRbbnF0Snh2Sk5wV2Z1ekJfMHBCUjw5NG41PHE+RCg5Q2U3eCJ8eTdUPkI7MjNhdilSeTQ4fjxffnB8RFZ4YnglcXp2Oy8hazUkM2h6WV96ZFAyVTFKVUMoeGNHdmIoWy9MU1FwW28zQyQyb2t2IU5qTF85WGNZPUhUUDNNPkt0YU9MSGkxbG1xPzJeNGpFfiskPi9PfUg/bl5BYk4k''@;'; put 'put ''PTUzTX5ZWmtoMSUvVng0OH1ZIUZrMFg4YWVydkJCLGtlSFd1P1hLUjNzY107QkF6e3hjWk1NYSRJXy5mcmRsTV1TbCNpNWFAVmEkeDtXMCtGJGNAeGZ2a11VWWpkeEMiRWFBQ0BVRjoxSittb3gxd1lMeUxrXkdQX31jVm5sZzd0fWxaRm0/eWY/SztVKFhAVyFzVzN4QmZhTXNJeFNifHtweyoq''@;'; put 'put ''Xj0xLy5aUFE5OW5ZdGlWclAwMHczbyFqLGN0MmNfNU99NWk6MnlvR0c4Wyl6InhrI0x0O3wiczw9TClhSUA+TGcxPy52MVR8bkJXaVY2JCY/KjhpUVh2W1VafGpeNDRgcS5Pel9XZ1l2eEVATDV8Sl85OT1Bfns+bEM0QjE+dFl2UTI8Xnh3cl4sRWoua1oxQ3FyXXFXQzBJX2ZqNnB+T343TGAu''@;'; put 'put ''IUM4MlJke0c+JDlkPF9SSz84ZnMpMStVSD1ZQXB9fmgmJHohYVQ5TEJCTEFzMWsrNmdiMEAmNDNLeTZ+WGdKJFhjQ2c6bk4uKE07JSNPfEQoQ2NSXk5KOl1gTVhGblY8I34oQk5TSS5oUEdiS11Wbz1XMDJqeHBDd0U2XzQ2V246az5KWzszQTxmX2l5YChCQ2ZpX2xFVkBLLno2Ly4wbmh4ZD5q''@;'; put 'put ''S35aWEd8SkRiKEdfQThOT09CcG0zR0IjWFRdKEI6fGRecDU2RyQ0cVtZXS47byV2W09QZHw4SmAiQVNgS2RTXlFjOiNmWlYzTmNIaE9bTTVQIiliJEdHckIvaDVufC5LPCt6bVZOZl9GdGl3fFclJG5UIzo/eDB4MmYmYmshd3k0cFhgMSxwLjh+V0ttMzFiOT5gQUlXUSh0ZlFjPzQjXTQjeyIq''@;'; put 'put ''SVc0RHtsUHBgXlN5UUptKWB0YTBEU2oqUGM+SFlwUC9yd0VAS0IrbVJEYzIodTNDeiMzQGx6UGwpJWxYVXI5UXpwRjo8RV9fal5idVJ5d1VrSF1tTW8iJntGU1JOI2prWDcuUFJCU0JmLjQ+SEJISi5aPEh3SiNKOH5VdyImL3NxJS55SzcjLE1hXlpGW3wpUWUuPndIQlkpTyZxQmojbSpDRWhk''@;'; put 'put ''eyMwdEBuNzxkQypXUE4vT24qWnxbLF0/UHgoa1JRfmdnOCtOIXBYZ2Y9aHhFPVRPeyErbSM7en1RfCwoLjFLUS92NzIkJlFuNWYoV1tyYDdZLDZeXkdbVDtiKDEyUD58ZGNrQzg2d3k3KT0jKEQmZGNARUxrQD8xUWlbbSRXPkdzWngzVn5GZmJmSiomV1RSdyZNYXhQJWdNaEZlRHNifixRZ2NG''@;'; put 'put ''PjVOQ3J8b2VseWE7WVZ3Ql9YU11yXmNESFBTbk5ZJSZoPzJMYGw3cXVweXIjTmt4MDg0Jlo4dz0hOyElQkYhK0okYjFoJXw6TDRCTjAqP3UvWHlZT28iYi9fKyFdV3FaU0EuZCtiMn4vOyphJjo7P0tpYExgdDAzNTh8YmssTmdoQypzTjlGVWs/WSleI28ueXNWUCp1bz1iVU1XeEU/dEpuQmt0''@;'; put 'put ''MnNGNXdZT3RoI044dzJJTGM2NEZtcHddek5oUGd7ZX0kNllye3U6QX4hL1B+dHtefXEzSnFAfXZsMXIvRldWPF4hQU9NUkZiQU0wNT5KPVZ7SGZ1X1FDWj0yJVRLV3hqX3Z+VTpBO3pMUG8mIjFbIT99Zi4pPEZ8QU9GcXZ3flhuNlljc01eLEd+Sl5uKFY6W2xLQjFwUT1wUkI0ZWRDYDZgUW9o''@;'; put 'put ''ST1CTltRW1AwMi4lUUk2Sk08V292Q289Iy99bWFzYU1AOmpMNEoudS9qK10+KjlwTU1YYmcuI350eHVgJFJBWGR8Vi9FV0JWRyxWTEQ5JXpXRX1ITGM9VHEubncoOVh1XzRhIkMxIiF0Mn5QL0BAM1ssbS9JYyN3TW9zKCM7KSwoVGVzM1AvQzl0ISxqPjsrKix2Im92ckdKcGhYVS5Md1lMX2Z8''@;'; put 'put ''QjQ3dWYsWFIqbEg8cFRneFl7fVE9THhmKXxVI08oJWwvbU1MZFtnJE0hKWd2ZzxrIy5+eV9HfjIudFp1aDViYU1QcVZPIzp2ZkR6fTcmR0M4RSU8dXR4MHVAJDZCPlhaLzZQd1c+b0s0ZGB+Pmk7Sjt7YkFCR3R3dHNVXkZZVWdVYSt7UXl9VzN8RHchYFdSdjl+I057T0spVS5lUyVOOSluP0Bz''@;'; put 'put ''VUR9ZSJHWEJAN15OW2JDYEV7b3pNTWZLOToqPXVuI3trSEROUCUxfGttJjRHdShMSHd9MkZzQWFdVERtWFZ+V3FoX0MiUWY6fSM+YjNiTUNfaDVLV35tU2V5YmtdKkNkWnw7fClvMl1DRS4sUD5zUzApfX0mfkJeR2EqXzJtQTg2U2VXdipbK0JxYTdgM1V6M2glK1sxYUQsUEorUHUqR2owfH5L''@;'; put 'put ''TE1KbGlRPkJteTRLOlI5SnJES3ZDL3NqRUMxPjNqTWo5Pkkxa3VwOWlgQn1xT1giYnl9NU0sWXBsSjp7WTh2N2QsdDNHSlFtLkw0LzlOQmk5JWRkalAjWGF0MyVwWnFjfTRtfn5dW0YpTGQofVQvRCZ1RnAiM0pKQFNpb2EsXyIxen06QyVvcXtGeXxPOEMoU29DfTdge247TyNMY2JJKXdQaFNb''@;'; put 'put ''YGRQVWhvdGRIIXU6UWc2djcvR05bei4lJSZBSD1RJWRDd00ueTlseV4yIUd9LHNZSjtQYE8kKyM4Q3UoJDJ2OEZKP3kiK1lQKC4vIyZKeCtaUkV8YGxYSy9mT3Q+elJPdzJGRXNzWDg3LF0kTi4kbGddSHgwfWVbdWhnQiM6WEB6LlMsdU9MSXYiaUN5Uz5UVWNoQ106XylBRlM/Pjcoc355Tm9n''@;'; put 'put ''L0xsO3xRV3paWnYoMWdqfSQ2JGFiM2lfemlGfUpma2ozXTUiJik0TihUci5KJDRpRCozJGB0andQOFN+Il03cjpvWlE3WTxwRT4mST1TSjtlKmg1cH1yZHA2SmMmS3Y7MT4zdkpbJjBkLihILld5c2xYTSFRQGpqRzNaeF5JJVpIWXp7ZTg8XlYmWTA4Q1NSUCooXzYuOVd7RWosTn06V15LTlQk''@;'; put 'put ''ek9nQ2V4Y25mb0c2WzZMKXl8Y1J1cXRHWlhpUjg5cmdiPk9PSzBwSjNAR1JLemNlKUlpRVJdPVkve0VSRnlBRzRgYlk6ZCs7Q2poJHp6Q1A0O0FhI0s+KklFbCYsYUw5U0JKZClzV3BQMUlSbHJJUkZ9Lz13Iz1tRy5ZMmx4N0B+ITU1UztTOEFRZmUyP2A2RnRuZWchU1VbZ3M/PDNRNGQhcE9G''@;'; put 'put ''eztTfXJSd1hvW0VBMUtpYyE3YnE2a2tXa0ApX0RbIXkwYSUobUlzWzVsfTA7RnB9S1VuVV5Ad2hqbUBZWEUydigkbkB4YzY/KDFsKjBzUyIwXXIkJlFeSEpJXkBRU105W1J2TkdVeT81PUw+M2ckZyQ1XnRFPVdDc0gvdl9FMi9SKiQmMCxuM3g4fkJbMEEvL2gqV0l9VylKdltbaypjSFR+LzEj''@;'; put 'put ''LFdKaGN2P25XcFopT0UxQHc2ckIoO1VdRGV+eUhiQHRBViVDMC9iSEBhbGNSZiM2OkAjbF5iODI6LFs7N0Z5d1RRWn54RSx7XUI4NUh4IillJGN0JDYhJjAjSl1XJDV1cUg3MCZ2d0I+Pk5vckQ9RF8mY1VyIyYhalJBRlI9fDZoT31xdVRmaUcyM3UuR089R2d2cClAZEtMQFZDa2lLa0U3a2xV''@;'; put 'put ''VW9JJX50WzVPI0F3LGcydEMxY2dgUGNTdil3fDo+OCJNaHNWYlliVmk8PiZ2V21RZkY5SUVpb15wc3RBTlh6Mm5TaSxXZHpNN2J3fis9PFBWWUI7UF5wV0V8ZUQ4ejRtezU0VWojN0xiRH5WQyRZNV8+VSRbTjY6a0JbfmBRRTNCJlNpciZZcEttPHFiZzY5Zz1mciZAdUFzKiR+cVIyI21ydl9U''@;'; put 'put ''S2Z+Rzd6Nj10YntYM3s7S2VmbXRANTVZWT56Q0BZLEopKzxTTEI3dVsoPXddcGBGTyN4KVc6Mmk4czx1XzgoODUrS19pbFBIZ1hJY3chQCZ4cW1tdjUyYD49UzJCQD1MJlcmXSk0RDQ8eWMkWndtVHhMJillXnQkfF57fmhibTNUMGBhW2oqbTFMUjtFZnZZZChjbHM/QmlqQUlmJUBeZ1p0aGgx''@;'; put 'put ''TyxMbVUwJThbMH1xSHZnPEh8RGE4MHQrKyFuXjUzWT8kcTdwbWJ4Lmp8IyYoZCpOXiZVWGJHbDU0ekh6SmVKamRzUVhFOVtaRS47W1o6c0VFKH5UMHJFY0tmNkBhOXVyWkBqPSk3bT8xUW9yI0ZWfkw3b3AuIUJhXW5ie3I5I3tNNDo1MjtVX199ayx8PFklfHJOakdlIllTPGNHNCgpL3RZaUE9''@;'; put 'put ''QiR2MEBGQVM2OEU0MDNMYWtQKVBoP2RTU0kzWHpuQFluTCQ+U2VVZWNXSyRsN2w3WlF6MiUzZ2MpMkwjdG5YKXYoR2guRD5XP0thVD02dWYqelZdTGZdTChhdixOVGxbWXh1ZncjV1h2UUFac2gqV2FPey4jc3lPbSFlUnRTd0xUb195fWpMcCZJRShNMmlKK2dXUUolYFpdOFY9LDhpUFcvV0F1''@;'; put 'put ''XlRMRF10TiUvJjZvRTQ2IjFGaWd8RSVQbzRKVDN3Lyt+IT92fDBVQVc5K3NnI31PQjcyZz0odi9BQFdUaUJOczdaPTtneE1pbiM3ZipSL3UjK3p7X0V9VjJlU1lLQGZdRnomfnhSSnJvSFM2QzA+Mk1IKzQ9NlgiR2BfIUIoTzh0YjtaKjwmRSEpMHk2YHBBXWpKTVQ8JD9QaE8ociV3NC5ZJFZD''@;'; put 'put ''anY/fn5+YFM8SiVCVGtIOXoxMTZleGY2V1s5Uzo+Ois5fCNBOHpiJjtRPHlDQ2tHUShibVRTSlB6OWFLRFdlJlB+cDlIaHRWbDtDd2sueUpMJE8qXlRCdEMkKzFOS3dIQEU2KjtQXkxfXiFYX3MlZWRQKHNKVEZRZm5rOk07OGoxcHwhODFvN2pgPyE6QH5beCslMk5yTThUPjQ1PSVGO1Q/VkBl''@;'; put 'put ''Rj5MOlVwcWB3PHxiPmpRfi9IS2Z6UGshVmhINGdXZkFhMlU+KGYkUmZzci5TbUQpZUBQak13Vmg8dEhdKm0odGdTL2J6L309a3xCdWVqJk59InVTS1JMSUdxWiVOQmViPFUubGE9PCFsfTRfb3Q/THBTIyYjZyMrZmE1YyxIKnFPdjUiSzx1JkI+SX4oXSJpaldUak1QdEVILnJefXxEMitgLy56''@;'; put 'put ''X1Y3S1pZYUBdPkpWODp5TDhCMV9eLFNvLyhOSz9Hc046LzAhdUNFMmhWb2RMazoqdi9+Ry5kKmxPNGJhNDY5LDMzWj9xM0xDQkIwP1ZaNWkqK0xSZDBGK3szRVtlbX49YjZTKEtpaCImMGwhby8pRFtSLDBLMn0wR1JidkdzTVMiSXthdXVrVEFZXlUwRCppZTkqJk4uPGVNUns3KVNbLiFyPU1f''@;'; put 'put ''Xl5dKnlES3NjQ2UiLltwJXtTN0VrJFhSYjkuQiIqJEA6SzBaVjBEfnNWb10jIlYuI1Yke0hbRUVEVWV0WmFLZSJkV0x1I0NAIXtPQXRzTmNoMHowI3xEYS8qKHBKaSFkXVBwZmhkSShFOilZW0tFV2lDS2hLUzJGU3xsVStUSGN6NFhNQ1JJKnRAb1BKKX1ddTtxRU83SE0uJTBYRV1mazQsY11k''@;'; put 'put ''IUxMfUNreSxdTj8+X3RqQzpqUXA5MXYvcl1UVTdOfiNBUHw/RUJyKysqKW1vP05ee2xtLzp1ZyhxUmk/T0omMT5QKUg3Vko6Rnk8Klg9TnF5aHNAVEVAajJSN1YpM3B9dHJGflQ9bzNxSVclU3hFI0ckTzRZVDg7cVFfbTs3OXsreXEzJGVAM24wJXRFJGolV189WlN8SyxmbTUjaH50JVZ3SGNg''@;'; put 'put ''LjdLOmF3UUg/fGduXjwjWyU5VWF2OTx0NXVLOiFEWmVkfjRYekYjeVE+O2REcmcrLitwfHZjbT1SdWlNWCZoeGhscGd4JmFWeFtfI2tISEQpM2VZTTVCS3JXRnlyTnJRKCEpd2ZaSWc0SWM+SSlmI31KTkkxTiEyPkcqM3J+VXR+YWhWYTJXaCZBUTIkaXVeaGp9NS4sJiswM3FJTksqMmlsLlli''@;'; put 'put ''RmImTXtVLGBeQm1ocHhFeFhPOVplPkNyN3tzX1ZBVHQ4cHJATj0obj45Ul9aJCxLWjFPKyJCQzpgO0tbWTVLXkJLdjBKTlR4TWN2MmA0cj9jdmtMYVBFWDw3PEtkc0dWIyo+WCU/Tjo9MTZXNFNyJE1IfXxCc1BEUjRBe15oUzB6QkdNXj9YR3NoTjZKcy9JZSpeQmQwMndxU2JnbVZrJmBXTWF9''@;'; put 'put ''N1RYaH4+eSx5NXpXTz17VkM9NWZyWWd6UWZ8X0JMKTszaGs8dkptbF1VW2I6L158WH0vYllJJHltOltFWzpaSyx1M31ETXg6TDBkUWxgMSYoSjdpSSQrQTd9Sk05WzxVbSEqNyghQ2w/NSxddl57bk1AKCQ0REtxT29nT1hgKWNwTXA8Z2I2ZHp6dTtfPHohKXV8K1ROZCRFbjguNTEzVGd3ZShP''@;'; put 'put ''b2kpM2p8XnNvdzJLNC9YUUB3cEA1RCNANShvTzAlVTZGSkVIRUVgfjZ+Ni99UXZ4WTZVREQ8XTRuPTVPOkBEZkZJOzdlWk5zQ0Q+cVVyNlouOVQ4WH1EUXMrJkt6eTpNPip5aUAuZ3BoOEo0LzRARDFWbTxCejUzSFpydX5LPGpSSiQuZ1M4YVJ+QzBoOGlKOmEiWFJefUF3MCRtV1E8OkBPMy9M''@;'; put 'put ''aFZKZWVfaEF9KkglPzcldUhYWFA/MG8jfFhjRGJ1NFRWTHVCNDRlWjQxI2U0MkkzSVBFKVArRjh4ak83QDtSdTNPbzJZdiUydWZlYW9kLCN7dWdYTG00O1ZgTlF4TixHQEpgKVpkbls1QlA3WEdmRTskTmRfKDo5blc+a0hIZkgkcWJPe355L3JbUD4kWEg+TlZNdXtsaHRdcm9QVyJlZmNzbXwl''@;'; put 'put ''UTVJNE96ajloOGkzVFJwYmgxNk8kTyxFLzA/YDhETV55Mnh2KG8zKlJ7NUpGPjdlKDloKlN4Ijt4fkxwYFkvL1BSIkxaKCVWUTFbW0svIz10SV5FaTMwaj87TV5RYEVIbzNJWHI8Wm1lc0dOV1N9LyR1ImNMYEYrNz1lJkM6fWJvYGskdElEejU1dnlpWV9ZOGNCe2t+PUkodjwmUVMzUmUvZDRw''@;'; put 'put ''cCg1TFVfTzpDODR5T1t8Jn09RSZnOVQyTUw3Y011PXYzLyRBQ0dKU3YuQFBCNV12MmouOiRacUE4U0hZUEVYJjpbMGFyaDJoPjFIbFB1bkg4QGBaUHZlMUcsUHs+WElWQ3I7VCM6QmxqfmZSWS8jUzcyQnRUeVttPDtsNT9LPEcpPk9BU2x8I3syY3EjJTF9Z3VGfkp+UXw4JVFjVEpzXjN1Kyw1''@;'; put 'put ''O3hoQEhTbndGIV9RU1FJOlpATVk/eVQ+Qjo0Zj8+M25AK0h0clVzTmUpI0s5ejAyZy86I0AwZ19mdF1wXUx4P2N4W1lHb3tpWD5HXyIydStAbEhtWDYvNG0paVZ3fD5pJVRbIm9ZIyQhU3BIblNGOW8kOUwoLHwkMlF9Q2AjR1lZQVlmWE5JYFdpeSgldEA5c2dlIU9aOTMqJnN2OmROT3l0T1ku''@;'; put 'put ''OkZ6RCk4YDM0dyphSXNqU2dmTCRCaVFxZ1RTdXJWX3RvXTY9XW5MVnJaZ1Z+WW4pWyNObSMrUGs3Sm0hI0Bqfihqcnc/P3tDSGBFdjZrR0JqTHMjQE1bIm1xeVJDPn1RJXx1Tzo1K0FbYS8jWGIycl8uIU1lbCVbaSNCZUZQeXFSYEh+LypAbj4hdyZidS9bKWFeSiwzb2tLSUdDazchYkNaI0Aq''@;'; put 'put ''MmQrc11jejssOGllVlhdO0U4Kitae1MpX3V4Mlt2NUMqM185PWluMH1IMn1oeTdiZkAkZUpsd104PD8+MkBAQWRMbml5fF5XJENKdV8xTWBSfG83UEo9KEBbeDV6cFgyVV9rRSx4OFlIYHN8OUdpJmlbeEl4eVBiSlJvSHZWalFJTitoQjF1NUN1ZF5SVWZCXTsoKkdDQzkseUBHWXw9Zz9zOSlZ''@;'; put 'put ''fUxxXV83ez1dLG4vRDJQaFQhSDlecTJ3eT02UCRifloseUBOKVBxcTJNSSxmPy5sU1p+R11sJm12XnduVipUNCUmem9NLz8zSVliMHVaNVM5ajUhV19vcFp0dzl7bCR2bSk9PnFaRzNTdz1GcXl7QGIhVyR4UHwiYztoYzxSN2dnSlZZOGpkIUhwaDVeezdzWUl3dHVjfXZGN2drWGxJeDBsUSNm''@;'; put 'put ''ZEg1Ry59cnhwT21Zb3NVQDlQSzpickhOJGdoKXJrISo6MjthS1t6Z3drTFUoV0t9KkFrbT5NUz44NiEraGJ2QCM1KUozfDdNSHp+LDZTQ1poPSQ6Wjd6RlYlRGthPWRkRiVifEc0S3cuZFVMb3lMXm1YeUx+R3BzVERfcykvR3V7VDVdT1NiVXNjVzUkM1Uoc3YqYlFvVTQwaiQ2RXooJFJtLlhN''@;'; put 'put ''W2BeKUNWKWhyeENOYU5UKHRFZXB1TTciXntFYXJ4e0VmJmIjOThLKWY1P2B1MU1jQS9DSDc+IzVVd1RHIy97eVlGWE9QWXdQdnYhZVt9dipzY2pfaX19el8+K1pWRDojNVJAaDclQzcjJSkwcDspPD5IM2ImUEU5JUUlVEw9YllDdmpaYTYxaV9waTJ0e1JaNmw1d01KUUlOdiR7R0N2W0BefC9Y''@;'; put 'put ''JXIoU29DO3JJSFhOJlt6Ty5fPXk5UUhSKCZeUDZBP1AxPDYuUjJLblF8dS5GIyQwbWNAc2lGS247N18uOnVzL3dRajdvcWQkY1kiTElqLiFJKyNmQ1V+MD1pUFJtcGEmcmtsT0FDVE5yfCFOcXs/bUtqJW5HbnlMdm9kKVExaSpPSDBreXMmcGZVJGVzIzo1Ryl+cWpQbDhFNUN4e3hvbkZjOVB4''@;'; put 'put ''UlFxIk1INUYyfXJfI2NsOFJrMiouYlkrI1N9UzMuKXs1cGwuPTx3WXw+NnRFYVtPWl0yMF4sczJmMzJ8Zi93d3Y0b2k+OnZ9RiMpaik2I2VdKDpfSDdYUUh+LDo2V1dxVkRhT19xI31mdCprLkM9UjlVS34+RVk6cTpMSXVBT3piXXU2LF9zRltye1hlYWEpdWp8NSUsJXh8ZWtdaks9RTU5dntP''@;'; put 'put ''UFYhS3x0PilbTUsrXk51RVVmP0lJMiROK0E8Qm9PR1NwMWchbjdMRVhdcUVjY2hYS0ZbeFs3QmlILC4sY1gjVE9qZSZOa1tTbE08Ky85UG4zSntpSTo8WHB3Y1RoaU1NIkQySixRbDVtL0I9PXQpZXY9P0AvXTVabiQ8ITJfPV1IKTtmYDVjPThndGg0KXBHMFssN2NLdSl0KS9NQEY6SSQxfXhy''@;'; put 'put ''KndAL0YiVTRXZi8vOyI0VmVQQyUhT2VIMkR9eDZqZURkcE5+KmZKenBPNXhlU2Fsa1EpOmxOUkdZUEYsQm1xaVcqIS5OOnp+SWwqWm5dW2VxUChMVSxlNFZHOjd3PERHVDREdzBGVEdTNGleNXBVK1BuTzRpVSFjaCk/MGxaXnNaWHFdO1ksVy90SnRdPVFrQlc+LGhkbUlRWi4iMmBHQGVTTXtW''@;'; put 'put ''QipbZi8wWEhqYCh+L2tQPTtgbzhvQWFtaUV7MGpOd3FvUUxOJXIvejR4cllxNy9OfThvNltLc3Elc2ApUzFzeUs4YCN+SlJhailbWVpGWjlCQyhyVmRyQyNgJmcqNUsoKVBoO1JXT1VWYSR4Q1VLUCR3PUYhZCVJLmEhJmBJIjphPiFwOl5MP2xaPm1XNilWO3NSN3YmLHlDZH1fNEthWUxgRUV+''@;'; put 'put ''Un01V3tDYF1DbkJxdUZHNE1tPDhRdXsreFNndEpGQ0JnOkJgTURvSj9Bdn5sOiFbPix4ZW58Zm1mbVllcHRHRi91QmJLXiZPMiIials+Wl50NyIrfSZCdzF7Rls8PyNRJTtfYUM1MWNbaltLImp4L2Fhb0gwWWJTd3xhaUN1eVR1SjNDdXsoP3w/WTIuP2Zfbn04Q1tfUHA/Y2xfUEJONnFCd3Uy''@;'; put 'put ''MCRdOHskKDBtUXM+eE1kMSZNZCNIUVtSLypJIVEoM2ZGSWh6SVpFPGghRT0hUiJHV0tkfT9AYm4pT3lXM1JYVHc2NC8oYFImalYwOSRTJmc7MDZGXTNTKThIXmRAKHFwJHcoVjN3T2F7XjVmLzI9aTBpfWZLN2U9YCg2KXZtSlhQbzpWPG1ieSVMJlElSSNVW1Z6TzYzPDAya3RFNThuSD1sP3os''@;'; put 'put ''XzMpUEtocURAR2p0SFp6eFhebnl1JSRKZnxbKTtYPjojL2pzJmQueXcxRkZsXUY0czVDa1ArXyIqZ0UkSWZhPEBnMjhWbEw3VmdKX146NG1QUEhpa3hUXVB1JlEjTWZZeSsuKXA0dl9+N0owL2pWRit6WDJObVJrMjh3dihEUCNbOypSaCgjVlJSJEdbal9bPDxsPkJaWy4yMVVaPWxKJlJyclFn''@;'; put 'put ''Wj57SD1fTmB2KkhSdDVQNz4yQi46X3F1bmR+Z0xRPVRkZ15CMSxVMXhgcWNpWSRmSXV1VTxtJltyQGUoOSxKUnl3VXk+d0BeV2I5Mz84fElmTFd4RkF4e2Y1fSJ7Vmdja25ydisqN2tyKzlhR2Z8fnp+JnsjKGk4RDhqMWxRY2FYdUJ0ZlJGUmhqWlhTLHNkWThbSSleOE5ae1dfN05QM2x5Xkox''@;'; put 'put ''TmNOc3pTW082OyR4USFsQkVzUnJgVm9lSFFDbSRNW15QNEVlPGVXN3dPLjlbczJycX1IKUBZQ2FDPilBcmlMeGwjb0giVEJmUmdZSDh9TlU1cn1iWSpQbHAzVXFrY0x5MUl9QzxpUiM4cEhObUhOT0tmUlhzJmZqIStpMCJuNyR+PHkhbnBhZ3hGdExOWDg9ckFkXWlzK3FZd2xNQmIxOUo2PWZt''@;'; put 'put ''YCYzLCFEMHtFM19nJGFPXXxFanJDUFRQVWw7QTYqY2R+ZHFmNEBAezlUYjdlWyM3WFRHKWNAPDZsSGtNNi5pNVlQTFdiYTtdKFVidF42cGVeKiRQfXZ1Izk+LEZsNF8pTEpnbVk8RUBueD1ea3d5K3ZaSDo2Rlh6e35dU3RvYjNHNjo/Xih1Y2hMQ3wpbyY8PThaSVdsdi5WUmdlPWFhJFdqM1k0''@;'; put 'put ''TVt4dk5ZIm9VWXNzJHFUcTdNYUdHRGgsbmQ6QkU9QXt0PT04bnZ7OUQqYmZmQFhtUj0kI11AaUdfK0puUip3cClCTHtZR0pfWUlYKEtPWks1anZIaDxEQUpuMlcmPVpbSCkubC42R1k1bWFtKTp7NDF0US8mRG5laHtLZk52Sks4R2Iwb2JCYEhWN2A/VDhofiIiImVyeCYzbmwkLC9KbXNtYGs+''@;'; put 'put ''fD5pKSFTXXtENmlSPl96bzBdKFdETXgpWD9nJEZIJG9kVXt9YF42V1sqZERKPVkuVzpTYFtHMnUoQylSSFhjRVE1MUU1e2ZlWS8+MCZ+Rkp7XyF3cWUiWz9oTyFIJk9mVl0sQys6OyVBIU02RGooaUFHWSZ9Uih5MyU8OEZoQit1dUdwYTlzaix2b08xfGF0OllKOjZWcVoqM2VGNl95SC9zKi81''@;'; put 'put ''cnt2Rmc8dFhHNl17NWxUQz5PUlhaVHExLG1pQnsxLmUsaUtheykvajJ2W15haHFnXT5qUzlvJVswNFI9IVMhOERteT02SHQ4WGQ2Xmt+NGdQdHwwTygoRng4Ikw/aWlEelZDOjEoNnlEby56azNFKXN8InFYZkJIaVE6OCZ1TnlIdC81NTFCXz4pdWAwSzZ8TEhdNmcuIzIjRzdXUk48MlFDaGMr''@;'; put 'put ''dipae1pLSC8xJDReY00rY28jeCRmViVJUmpqOjkkMi9zQ0RaNFpMYHR2QG9NYCxZXTAkbylOcHsrdDtfLn53PD5lUF97aSQ+bU86RGpwdVVyI3MubG1JSE9yP0YiSCNVTnF4KzMvTiIrWT1lLyhib0BUPENEW2pjXyJ2XUFHTEU1eEBTc2teRn5DWm9rVSx1fXF0S1B3XlBLJnRjKjB0KXImUS9a''@;'; put 'put ''dmpSREZHM297Tjl9JEkxW2wsSjZoWz08MzN3bkpCSDAkcVskeUUlWTdXQGE0MEtdVSpEMkU1Nz5nWWM9QEFzUmtFTEw5cmVxcj9tfjwhVzpSWGU6JTVVQFo9LiFeQCE2KCErLHEsTDQsZl13S1JrWEpWUCNXKXUhUn19MWNkeSEwYyZfRTQ6YVhfMFVaQGhaND1Db3M5YF51UEp3ZTtAL2ZsQVgl''@;'; put 'put ''ZSZyeHphb2FnTVkrV2BJdGsoQENJeHQsZW9IaGZMfEdpJl9YPip2VjxVQkZaXVpDbHpgOnlHbkQmZkRmIUY2bms2NWRybV1IUWlEKzlbZ3UuSCUsfWZGTFMzOmA8LGwmb2NxVTtLJixaTFBibzpGMVttUF9gQDhEfk13eVhlY30kUToyRSE4Uzo6MkwmdEA/WyxDYWBLOl84cHJ5d2ZbS1Bic2dE''@;'; put 'put ''dlY1d21tb103MjcvZnlCW35FOkZ3a1NmRFBHQy9QbXNzTmxDZ05kZmMkXWAzaUxrcytrP2M7cU9mQjUoY3owLiQ9fjpdV1NgPjFKLjoiaCtIanh9cmJFN1FJYiYyOHJRKEwhN0dFXVp0KW0pZVp2Klc1W0QrJmwpczY9by91bFo1IiRWaCwrWm1EUGkqQUBqWC9RdyNrZUNbJmYiWW83NXNQQlJQ''@;'; put 'put ''bGQqR1NjSTI9fl5RYEg2akY0VU53a3xqXzNlYk9DOWxGKGA+ZnRNMXgiNUdrYzomWU90eyR+KX4oPytNOG1Ob3M0Ziw6X0VBZExGe2p8UiM2bl5INC4jIzohKVhoMGRKeURMLDxNTzokOVkqP01TcX5wamBIW2N6O3kmaFZvWyJeRDM0WmY9WGxvMGkjTHFefVFeck5YNDskPXFUWVldLEhSak5e''@;'; put 'put ''RG01fmhJR20/XW16JH4vNmtSUkNySlpORz1wKjBaKF9AelVSPU03a2lxOlpHTXMzWT86MHhpP2FacHQ9T045NCRtR1ZpIj9KeiptK181UDRkeyYmRXw1YF5hWi9FMlB8cG1PcEtWdHpFK2BKJHV4alRCPFQ2OHlgeyQqUypJd0Yle2pkdFVQXSsrdlMxOW9yQ3l9OlkzdnUwZSpibFF7eDRVZUhC''@;'; put 'put ''SVJxP2FhO29oI1JPcyx0aUdDTjxZMiZDeDk0IWgsYU5QVkliNUcxL28pNj5WUHolTmM/TDhCRWJedDpHOygmRCx6TmZpOS5UM2p4bEw+ZllPPCxmbCVmUzB+NVlRej1gS1FnN045SmB6X0xuIXA/Q0pNYkl2bS5VSHl4d3t+dVo7dDtAZ2owPCJ8TV97MnovQlZUYWxbMURmaXttTX0sTy5+Sy9y''@;'; put 'put ''IlJEUD4xcUR2fEJjUUptYTc9MGh+SkRQZm5WM1VzZ0YuUU19Uik8TC46SlJbdCVBQH4meSQreyRyPU1HLiEuRVBJVE9WU0teX3x5MFUlNmtIUkpbOmE4SmNyPk9VaGJnJFRIcXhxQGguLyo7OkclRTtbWnk/WzksO1dXUGhLR3F6dT5nSnBrXXR4Wk5UcldbfktZTlt8P2I9SDVgWTpfcUFTQzFH''@;'; put 'put ''TTBLVDVTeFImOmQ5Yjk5Z191ZSVeO0QuSC4uQWM6dFchRWFVKjhUb2MpOzVnUUdSaE45I2k0LkxbLF9ebS4zX0NrWi4qVzJfYXU0WHI3Y08mZjVKel4xOkpdKj9gfG1sKywuWDF6aSRSOzFXJEY3XTZKYHt7bWQ3bnpyUHM0ZUs1ZHtlQ0x5fEgjfUprXkJrW09zZzNSXm5hMiIqY2oxSmhDcT0+''@;'; put 'put ''PG1UX09gVHZ7REldT3Z0aHRNXWw8fVc/UEslLEI9W1d4aCpAZVt3TERoTFVXXnBNaiZ6Xj5vZTF5KTVaTTtefG05WENhQHg4bjdTaCpGbiZpZmZ4Zk5qPiYwRjcvcGhHMGteOHpIO11AM0tuczc/QkRWW1lWX2Q5ZXciSEVdL3N+JFROKWUoVjpxOGxNeCNxJjxQfi5faTFGP2kqNCVISG0uVH0y''@;'; put 'put ''TCNqTUR6UGBLUT9JZ2dRSzBYM2VydEduVHZLS3IyTGo+VFNrfkJyME4kfVRIakJRIV5SLzkuKURhUGwjSXpvW1VvMz5BMjVGeGs1JitGI0l7KGhnP0k+TFZjNSgqNz5IJUtRJV9+WnsqVVNJQjBkc0BWRTJbZSxYTzNVZ1FQQlQ4TUF4cDs7XiopRC8kb1tRbG1IcHp+emE1RywrVk8hXUVtMytV''@;'; put 'put ''I05Gbl88TWFYRW99b0B+ZnxjViZ3ezt6QilJK1kzYkYsSDZPajBiXjVAZ2JaNitIQVEoUyQwSSFPOU5dK0ZFRGI8PnBHW19IdDd6d0JyfjZjcld5bi9jSGpBRSNFM0ZWantdZlMrOSttcHQ9YHs3ZClGMSNZeVtNUDdyRVQ5XmsuRyVPd2l6a2A/Y3cwaFdKUENydU05emJOfFplUCg8KWNdJDJm''@;'; put 'put ''WW1LaD02SkhYbWFFMkZtTkc1OXpkemJxSW4mRn1wLm9CPy5+clVpKVpkPzE2dGdnTklucipjP3JZNDZ7VSVSZ2MmJXAjLDZQQH5CRyRTZ19yQiFRTiZ3VW9tcD01NE0zbUFGUT17SjVDRntwVTIvKkV8fHdsZnFoXT1HSGRbcVlWfnRQX1l3TSxiNjBdRDlPSSp1ejsqfFUkNG1TKUQrJVhqLmcs''@;'; put 'put ''WX00bzt0NTxxTjMvY0t5VGJ3UzBWNElFTTdSKHUreHIxcl8qVj1wUE8+Vll0TS89NSksXjkyYDNqaTo+eW8uJEljbW9BNCM3Mig5aT4hPV4odjxxRS83YlV7XVRYX3hdVzhWL2J8aiZeOHpVLHxeMWkhPT5YakhGIyRvfD9hbUk7aCMoZ0BlSW9XeytyakBTeFgsQFk8QVs8Q3QmbnJLfmcjdUwk''@;'; put 'put ''ZXtXO0AlayY8JX1qcml3LnUpKmhDKnh3P0x9PERxa009XkJAMT1RRXQjdDRVWmZ0ej57QWx8ODVXKkhPJSFjYCxbc2s9VkFUb1s+ailfKS8/a2E/PzBjK1RTLFtib21tIy5rXz09NCR9Zip6Syp0ZkRxLyVWU3YxXkt9QzUqKk19UVp3RCxYYTQpUFpXOFNDaEBefH1fQ1VWQlFrYiV2cWp6SnA4''@;'; put 'put ''cXRVX2hQW2ZsL0dQY0lMbmR1Wnhwc1ZVTjFjdDY8MGZ2MFVxQVFhTkVmdnVRKDMkdGl3SGhwTUo7Yz8id1JHYkR6P25EP3twRVR3dkM7KmAkTnNyfExkeUc6bDBWdltJLnNwIWpTRDFoSnc1cFhwZ3gobHNzYnBJNGxUTHRaQElydkoxLlRKR1EmQ2Ztd2xGcSh0SUpaUVdtLksiKTk9OVBXP2RG''@;'; put 'put ''WypqUWk/dzVJJSQ/SGRzdCsjc31LKVVGO2l9PWNNK0JjTm5UJTc/UXVsYDV+bSFgMVAkXkxATjc3IU4iYUVsPmdGRF8+UDJqTH0kPXBDYmY6MiRpUmddRkcoRV1pYT5dMHRsNHZNeU9hK2BoamNUQmthQz18SXx0Y2FYaVl5W1MwcyMyPzpFI1toZiY8LEJmPnBuZCVePmtYIXk8QDsqOClnYl9k''@;'; put 'put ''UUpOL0F9bFt8V20iVD5waCZCXzxzYSxSS051P2A3blYrOzcrOjRYPTFYKU5NImV+TkNNNzJid19sJS43YkMicVYqbHcoY3RfR3lRbGZINTBIVTx9V2Yzd0YrUFhXIiJrN0MpQilfNTcmIS5qK35IUyFIMFdTOWRCSiU3KDFofH1bdko/a3lMKHlIRSZSaT4+Pj5lZWw4JStEKF9kVFhWTWJmRERx''@;'; put 'put ''WTh2TipTO1BwLnN0SDV7MkAycFZQW2I+LCUoT35qV0l2RUIvNDNpI2kkIjhgMGdHT15YRHlYcCpybWpAbVd4amY+Z0lrc2BBa1RDfSp2NldVYkxpRmJyeypZU3ZPJnQ8YGY+a3ZeIU4jN3g4JmF3QSpsXmRxQ0xWV09wZTdhQzkwdWYqLmhwMyxbeXh1cXF3L0QqUWphKlJueWtkcCFYY3FURmZV''@;'; put 'put ''aWd6d01ofFNUezxmMjs+SFhUSCJBKkBqWUdDODg6dDg2UVclN1pnOVlZW0R5SjdiIVoxYD5nWm1BMWJNRGE0KiR7W013cWxANTpvelQ5XTAoJGAxaldtTUsqQjh8MEBPT1B2X31+cUdyLlEuTCMkVk1IT0xkdjxwQjFSdjchQFh6IjB9bDV0a0s7cVJ2em1TZFRRNSUlUWs+MytXejBSeHRdaj82''@;'; put 'put ''KntVSHM9LCpYUEdtSVNOUkkrMHY5eSw7P3VQXntjW3p0ZFlCd0I/MGxlPVFONXxud1FpeUkvTTtRI2haPWtrNjt7UHRYQktrUCh0SylISXw1I0U7b0dOIzFjQ3xUZnY7Q3dzaXdsXiZsOTpnNWcmVz0qc0Q2R1s7Vk87PGExIkVhfGRYYixncjY3RiEqcztQPndLVWxEc2FUPFBsZ19MWmZlVl1h''@;'; put 'put ''JVBPbXZjW1h0K0t+SXYiRD1QTmtsNXZbWmtZKEgoJXtQPmszPjtIZDgsJkliUWRfYVpOUCtlZz1PJChHKyQrQ0QlS29YZlopb1JRKyx5KlpHLEYzL0o1eihHa0F+YGhHPl5VTjVoQi5WJl12REF0RWphblhieUNBPThLVFlrYGR+YDVVazdLaG0xUXc1b19VbzppIjhWaktoQipefFZhOV1jPiFC''@;'; put 'put ''T2lJZjN4fFlaIkZpJE95djh2VE8kajF8d3w6IVYoVltyJV9hPzR4Kzhifmk9cW0rViVkXiQkWzAlUFN2TjZrIy9NNFMoOE52bypWNH0oYWllTjV4bURQUkVfIyshU1JRdlVDYzt6MUI1eUtqMHEvcjBhYUldS3lnSXQwWzFwK1ZqVytYTF52LDJUQ044MX5wOkNPcDorJSpfSXU6YUo5NGEme2ph''@;'; put 'put ''USt8KEZ6I0doOFhIb20leER8U2Zyc0MuemtRO3RUMlZAfl41XSVRcTQ4UXBdInYrZjN1TGhafTZLakUzU3hYMWR5YERpaS9ZTmlsJHBhPnRyWSY+WTQzdCpNKmpabzU8WnJJa3syKVFHfWxwfHBCcHZNUTckfih7YCNZUmJTYkU6QH5RdnBgVlZKV3tbUkV0NUlrT2IsLDtiaz5HJWJDNnBhfmA5''@;'; put 'put ''KG5BbVNZU2BGdm0yPk8wemdaLjxKW3JiaEx4Qm86WTRBLDxdSWMzOz4wVjlOWFQ3KlZQa35dYyk/IXRZWWdibyw3Ul1sb204RHJZcEYwblJPLzlTSV9SZHMrVTN2XWM0dikoem4pNWtpXV8+cTVSWiZ+dz82PlVKfWhrKkYwOHt5ZCVOSGQ3dDBfbWtaUF8oPFtvJnt3VnJmeSpnKTdAVnw8W3B1''@;'; put 'put ''LykuYCYscWFJPFR4MF0pK1RjVT4uME14K1t9VVhRbHF5L0RkLHk9QmFdekY5antLYjJZQl1Jdl0zekxYO056VEZja3xfZVFzOWRKRDMvaldRXyV1TzomWldtSXhwLzBSX1dhUW8hQltkVGouRVZmNn1ePyEwW088KkI3UTo3dmk4e0pndnwwIXZBYUchc00/fG5wTkhyNSsoYktMdHxjW1NiSz9w''@;'; put 'put ''QVglJFQ8cjhBSC5zNz9OIUAobCRJVkVWYSsjWlRFfSYkJlArYm1UPSM8PCM0S2IkTi9WPjI9ZSReZiRQZHpnLmRmT24oN2tHJmIlPnxtZ094XzRRW3VRMmxeSk4iKW5TYmR4P2cmfjlhRktvekpPZl1XLD8lSikhOnEvOGQ/a0p2e0tZM2x1YyEiazN7SkN8Vylyd3lLcCxadmh6bT1APUR9RkZy''@;'; put 'put ''QG1lRG5CVkMiOGh4RDBefFN9Pn11R0VpY3FvYTo+b0lSKkYqbzxHTkRwU2Z8SHYxd0NjLjxdNUIrQ2pEWzE9PCxsMl9Bfk1ASmthL2RzeUc7aFAxM2RbPyVTI2NgYnhtUjN2d25lbU1zW2M1e1dHUiFuZlEkbDs+R2VZO3MheytPZjU6cCxBIzgmTCN1MS8pcyZyPDRVU3d1VHpFVHxfKGBDUlok''@;'; put 'put ''flNVWHIvPVJEUWFhRjRBVTtHaHwuMC9CW111OCtmJmYuOEpKNn1TXmRqUypIUzY+OGlGV2lWaVlKRUFlWSJSfkMqOW0qQDpiZUl6SmNES0Vea1drQWFyWWJ5RXNwUUN5SDdwMj90eGo2Lz8mIlpGXXhhcW9BaSxaNWFjMlRIWXFOMVtIY2wqcCwme0RpJEgjSDAxYyRSXTsoZWYscixqc2I/NWps''@;'; put 'put ''ak0mQF89XyhYTChYdWhwS3VERFpxR2hxSW1uaj4+ezs8MU58YDRxcj9QPkhFdDMmJCF4VWNjWzovRzkoJCFVKW98WVRNKXxlJUxBe1lsVzg2Km5UejJldkwoT01QKj5TfEtPbUdXbmhnKzFhe0dxZU9SJmRaUykoYGt7eiFdI2EjKUJbZzEzOmB2TEM8PS8xZVtQaGZ1cWpidSQuIShmQGhOQyhR''@;'; put 'put ''Rk1WfElqPzZeI0MlTn1FOjAvdzNgb3wvPl5hZnRjfnVBfGImY0dTJC9aZ3txO2x1WClCWWh7KlQqYVtscT5vZSFCMCNleTFCY245MFI8ZSZyR2Y2ZkQ1JFNqYXhnbSZdfU1JV2hxaD1EYyx9WHs8Kj4vOEswOmk4LmVQdHQ7eF9DNEIjInkhVGNxeWl9a0AyKnFwNi9oVWZpPUljOzcvYW1CWUpY''@;'; put 'put ''SzYmLD1lWF5yNEUva11keU5BIzxlelJ0UFglVXJpQyUrOW1AIl93eFpBUk13SVY2R01XJnlBIl0oSkZRU0IqeW59MFIsSlh+bWYwJV14ezB5InM/TWJyOl5OUUg2e2F2T2Q9PnBMPGx1dUQrKjRLRTdzcWl1N0MiMVcrdUgmQEJ0dUg6QEwldWc7SjwlMG1+dnQzImpgeXQ9NiV6bW8rOjlnWC8r''@;'; put 'put ''SS5LSFR8bmFqWn55O1FMaz8hK3UqTjJgeDBxQjc5QldUQGJYeUQsN3krZyQoanE4VU80dyk8clhJLi9aL210byRMej0vUTUydEZke1NYa0tAS3Vxbn1dRkolN29aKDpFUTtQeyNEWEMjb2EsKSI2d11wLl17VTFFTSxEaixsIltpejRPflshdV5ydzJxbVhqaXYhKzlnKWZ2VkR0TVpDL3xsdX5I''@;'; put 'put ''ZyN2dTxkKjBhekVyUVZlc1hDNkdkQ2UzNFteLkVmMj84fXYqLlp2XSV1OnhtS0t8NiUkWmNTbzUyPi57Z3UkbEBTZ0pmLEt4bWAvUyVOJENwKHYjNSZTPWN0MSRYSyU1VWUqKXYhTUNmW3c/ZERfKV0iRkpvYD1HQXhlK2MkMkg5PXo8VkYyQUBqWHA+UmtTQWMyW0wuREpVYFAybnZqMDIvQXU2''@;'; put 'put ''Vjc1JTNWZW9geVBmeltqe2t+Vz4iTEQ7NTRPdW9FQSl0UH50S2g2Q10oXXEwaWRQa0RmODU0S1NeQEN9TSspdjZpN15TTiRgcGRTK3FjVEghKik9W3RiN2V5ODJASCldIlZeREduRSVAdWByUjhicGE9cWAkZVM8NDlZUHo9YSRueChran5NNjdeeGQkPlt0LmtfYyp8W3R5K3JGd3ZkR0YwSlJ4''@;'; put 'put ''ZFhCcCVdIW8rQU1LRVQyMGBGd0lNLCVqWCo2NGppdERaYmVyKXNReiRsKzN1Z1N+TyVNYjBIezdVckxaVD9GY2tZSH43YmMkTGJXKiJKUX1GRjhXLyx3fWJ2UTVIMlF4a0RmaGM4Zyp2T2VENn1mODdXUTkxd082IWRyPiM6ZEx9NzR+N3M0V2kuWFY1JFl4dGFhYUtLR15wVC9uZEt8aGg2XmU4''@;'; put 'put ''TUxSaG85bjs8X1FYSyhaZW4ofldEJkFoMEpLWWxxVF8sJnNbS1lhNzIvPH5Uek9BQnMpY0kuT0tTL1sudz4veXhRZX1wLmUlVC9GSlgsb0JrMk1RdmpGbC4scVZldDEjN3AkNGtkdWt4b3FhUEswU3hwa3B3UDpNaXs3dSRlSm83O0hfU0IzIT5VUUY3JmghdnpFVVAvS3NIXjt3YmVuTElNazd1''@;'; put 'put ''TCJBYzk/UDlPZkcyPCJGSTJkTWsxQFh4PltMIW9jREd3OnM3QntCWH4qfk8vW1kmV3hpaEV2RE5QSSFhTVhiKmZYe2FtMHcpeTc5LHhwdGpESn5EXSEzRllGWUs3TyomVktpaW8wIWNtPUQ8YG1rOjlbLFpfNSYsczloKjVlVEpTIm4+dU9eQXEwNVEwNXNBS1Y/LCZmRi5WZlJKV0IuW0xlblMl''@;'; put 'put ''QXEuKXJrdDhwIyMoZ0hSL1FaVXhGUlU+WUFuSjIyLnxTIiQ5N3BvJlRse1Z6KF89ZVU2TTVAcl5tfVFzQjBtO1tyZzlwcjg8OV4+b3IsZ1d7UHBCZiheZjBdOWg4V11mWio5MitHND9JcnVpMlszUTtpSmIqN0J8Q3o5ZXBVUytJU25OcUBJcjooMCt1XU1DOUo1LG1uP1BeMVJfOShTfUxscUhw''@;'; put 'put ''e0FHV2RYK3x0IWo6c2c3OjMhbjZrWTBeNWk+VyNuZldoLz5hMjl4fFB6I1BRK3xVcXNHUSZufTMrYytMSkRXIzJbWVtGdTxBaGNqLyk3LyJyOnddcVc+fmYwXXVDOUs3bz89aVtKKFFKN21Kd0I4U1kscX1TWnh9SCt1QUs6K0okWj4hb1IyclVWaiRuUWdbVEsrT295aV1pPjouPVgrYmpXU3tJ''@;'; put 'put ''fUZXJldRNGRUPXNVTSRQZWh8VyZFUWdTOjdiSyFFTio2YXhlbXZ2alNKY3g1NlY3TGhrOiRYOTdBNTl6ejBUUUZLTzNFcChLTSpNZ3o2SUNue3MpKWNVTil4JCo/aUB1U29yfCZhSjh2dmRjPCxBX0NfYU1sVTpnelE8fCJhOWcyJShyaCNVT1hqMyNQTmVdfG5+JHZINzxdX3EyYDkwOD9vR1o3''@;'; put 'put ''bWFTPXpsNGc/KHJVZ2QrO2IkK2xKcVM8d0UpaXgwL3ghLixDKWpxYF97S2FUNjxrdnhWUVZTdlNvSntsQmgvdmVSQnBFdSlGYSwrVC9gSS5pYWJSN2V2cU1rNkhrPXkockAmWVt9Ui9MM1JYLjlMcXEocnVAaEI/Vj0/QVd8IX1qandtKyM3W21gUm9dfCw0MTJKMXhuQF0rSzFtWz5HcEkvZER3''@;'; put 'put ''Vnh4U2IuQU1eP3tuO2RmW3xfV21rbVZSb10+U306LkU5Kjd3SFdJcSR0Xyx+M0JANWxsbyF7YEtPNExDY2VZdUw8OzhjIVJlLHs4VV1PJChjN1ldckZMK1Qrcj5BUnR+flpBTz9faUkpQGlmb3BheDFHNldqSl9Xb0B8QFVqbWlrVytXYSJtci9JTUoiVTZ8QlRGdHc2VSM3OGFqNSR2ND5ebTJx''@;'; put 'put ''XnZ0OjQjejJyMF5eSih7Z3lfRiM9SDBCXyI5ZXNlMyFXaWJgUkRFfF9dWTBQIV40PkJfcn5wRT1qXkh0X3swRGQ/bTFifC9NYlhOdzh2SF1qWSgwUCFRKEBxOyMwZy5EZilPeEA/XWJOVFUiTkg2OG9hLl5JX2NyaTV2WDxHXkg4MCZkSFdTYXpDOXgpYlAuMkxDdCFFZ2opU0c2Zk15VDAic3ZR''@;'; put 'put ''aG1BTT5eNytpOko3Qnc/KXNXMlZkTV9DbyV4Q00/MGBwdm5IaGhKLjRbW2dEP05yMEpMRDxwdlpwR1dIfFlxdXpBNlhbdkx1MSJmeComPTt+ZjpOJjgpcnwuR2AyKmpXLmBpeCVRKl5gXXVMWXVNPGl5WE1YIUI+eypBM3tiW2A+JUZrO2ZbdDJTIytOP04sdT1hNWhiRyZsKXdMZm9CJlQlRCU7''@;'; put 'put ''bG0wYU1bcn48TixFO0xqRzZGR3F8JElNPWRyTlI0TkE6KF57SiExRl9+NSZgSi9ibz8iUnIoL10zQ3w9eytWNE52OllwQCJlMj9UblRFOl18fFVnITd0d0szakp2eWpFLCVqdmUqUyxHMEkvLG1SXmhBZitkW0ArdltVdlVaMjwlKElnNSteNUZ2ZnNjbmt2fW50R3tiVSpvemV0fnNUTHQuQzN5''@;'; put 'put ''XjxsO1taKnM9cT1xPXEsY149ZFQ0eDFfSktQa3g7LGtIKmcoajdjWz1SRjNHNSxzYDFpaGl3UnpfLE1TW18mM353dE9Ocjhpe05iZVZgcClhNzEzckhYKmJWdSFofnt4L18jRTVQUlEzMyJHVWM7L2k5QSY+Z31dQn07cj9dLyJ+fD5IWmRhNThTVj5ReGpSSUNOQH4/Siw7aF5HM2N+Vi9jQEYv''@;'; put 'put ''KSF7Uzw4c1IvaHksUEw3fEdxdFdGJWUwZDwzYl43VU1jKnNFOkA/b0t+JTRwITM7bDU7UThfOSk1XnRQQlt4ZTR5eTk8Tm9iR2IufCE4amokcDNUclNlZjRGRnJfI3p5SEZVMkMjW1hTPWAlS3dYSTtATFYoJF9YYVt5PGd0VXFoaE8pbz8oSVNKUntUbVEoNHR+TzomQH5iSDVgOn1PM0QhRU9t''@;'; put 'put ''QEZpOCssUUg2NX4hRzZZME1vOHosbEZdMGpjejkuNENbOnt3ey9XJUZSQGBlTyVlViNuU2lJO18qSDY0NjpUVHs9ckY5XiY8cDk2ZDs5YkRDZ0o2IlNAXXkpXz1PWCMjNkw0PEdqJGZuZTQwQSMlalQ1UU8haUYqZjVRUEAhWSE8eyZ1V3RHb28oP0BhSWh4cWZuR3lvYElGRDRMQEUiJk5+TjFV''@;'; put 'put ''Uj8sSWY9Iz1yQiZjMl9oe20lQyssRG4oQ19VNTlNem9xS0VNdkchYltdVjl1Uk54OjJNNExmI1sjKChAJjA2VFprQVZYXkNmTWh4dUdDaiI4NTQ0MTZ2IypUI25VW2JsaiElempTYExhUF8iWnZPVnMlUWJjaDkmOz9dP0JWLFIyfnhGemVjNllQT29mezBnZkRWfG5OVmZFZlt6JUZPYmVnPjFF''@;'; put 'put ''Sj9mPn1DMUc7LlRoWSxIfVB0fE9mYTlpIn1pV3gvTFYueEBfTFF+Py5OVDg3LnF6NTNRM04uaURuPjZyRVJhKUhEbD4sRUJ2Xj0zK0peJT1WTX1zO0oyanN4biFuLDlIcSokSSQxRG1FWE1FRXV1TFp4ejQkdmhATkd5cm1SfSI/N1VnMjhVIylPSU9YKEdIdk1JO251MF8xSEc6aWpIQ15oeFFL''@;'; put 'put ''WFBPUGlZMD5fL0Y5ZkV8ZTxCTmZYSWwzW1h9PWJzRjNzdHIvWUI6JmgwJjExNmMlWVU0fVZbXWM2I01SeTs9LmlpazF4VUlzRV9wLkQscGBwPDMkQzByQ2duVmJ9Jmo0Zi8zTzZ3W2ByWyNyLEw4VDtMJlJ4NEtxW3JZXzlxPCJyMzdBRyw5MStLQWhTP2BENENwTmkrPXhhImxsMThUUixAZGtf''@;'; put 'put ''fVYhfThgai9+VVI2LHQzaDJqZz8xZCxwPU8wQHdGW2R5d1dxejhXYmw6ckxBdSw5aSh9O3EvdThfQnVLOUh0XytPV2dWKUZxMX5qZUpHfldUI19+UzhCd2wxNDl7aChuPnYrSjh4QnFSY1M+UmxsNCFOK0A0WkZkWlR9XSQzWD1pOF5AS3x4LmcpTSRJYH14ezNHZH1rM1kzOmBzWj1PLyIzNkp+''@;'; put 'put ''VnRHWG52TVhWdGMhM0lET0ReS2l1RiEldWNlNzR0ZEB4Z1ErYCtJLjc8P2w0RmVbO2xXSiozNEVSYmd8Uk5udlJ2PGM9Tyl9d0tkQCE4Xywmc1taQnxALF58akVNflYsSGRea0VrOTI/aEZ4OmQrLntuS3ZDa1FmWCJma1tnUHlJaV9JZEosVGYheFozOFdgbXpgRV9JM3MsaVJpb2k7RSg6K0lz''@;'; put 'put ''KGBZPDkrKDYyfkkuZlt+PG9BNn5EbUVtWjg9citWU2V3NHVTekk2cEsrWFYoLnU1N29oWz0/UnJ7LEFrTXp7OS8hJlU/XkVbS2xlNSklN3sleTppUG56YmZMdGh2fSZWc1toaDxhNVtNKmkleENSS10yQC9qPEFjUV0/PH1saCtCWEwzWkpoOXQyRiw5XiVVSm5Jb3U2aU5CcWw+Yz05bzpKMEJj''@;'; put 'put ''a2F1NExhdVNfaSVia0daeXUubFd8az4pPiZyL0ZTKTEycC9eOHJNSTBsUmEpYnxObiM3R3JmOWFSfFkiUzU4QDppZjM2eEhXa3NJISFuWTtDNTRDN3BWdkM+XVJtSzt+b019aXtFLjpzZzhDZV5NIkpLMzlvQjMqNyFIK21oYEZvKCx3ZFBwNiJBUEZfYV0yMzhAaGdqREQzR0EqLnokR3lUeW9p''@;'; put 'put ''WTVNX2JeWj0pJkt8ZV9nLEU9XmQxVCF1Q3g1cU1naStPPXlgJjJPKCJtXldTVkIyU2ZCSFhjNSI+RTNBLlUyIW0zdEQ8Qy4ydkZ2OmpVeXZCLGF8SysqZUdUOS5eU1k5Jn1wR15wYCk6Mld+OzJ+Mkp7NT5gU1h9V344Ni5HL290OnVscktIZ0d9THJ6YHh0Nl1tITZwaGt5bFdUVz0+bFlXWU1z''@;'; put 'put ''TSFqJDI0Xn5QNHpCLlJ4WC8ifiVCLHRtQnRLOSF2dEEhSHZPP0ZDW1UkSFQqMHR8RlMpXVBuI3ZYcHErUSZLbSt5OkdkQj02WFlxUVNiVmNbKyZdcTRkdDJfWVBjT3E4W0Q9NXxZM3JFSz9pVHZzZV8oamU0UEdgYFFbfWIjNEpfeTxacH1hWXheS1Fsbz99clAvaHN9aStAKGw5NWdrcTwob35p''@;'; put 'put ''THRTT28pOSY1IjxXKGo4PFlIJGdia3o0M1c5W1M9YWMiSzlbfXE5LkZ9XWBWenJ8R0l9X2pYKkAhKkx9OElXZmBeeS8oV0o/WmtreG1JPWkjSC9xUENJPVImM087RD1vNF1dJiQ0VjFUX3UlcjkkV14wUntGO0UwTk9HX0g2UF10ZkRJTklKMGBZeHRkcFhOSD02XiY8NT1WfV16RzBCX2RIYT5j''@;'; put 'put ''JS51UlhudGVVcF4lPVgrNGY+fHBRSG4lfXFeWExqZEI2MyI6KVFVMywxJjxLYV18cDFsW0ZwTkZbQWMwPClPbjpkZV9rRFhOdz5xanFic1QiTk9iRjtIalVnRGxXT0BXMyE9SnNHKDg3cFZwXnNFIXYlc1IvMSQvM1Z9JClpMXB3blJWWXRzWTRjVy9bSjhYVyxERSZURF1JN3M5KCJJfTkkbXBh''@;'; put 'put ''VC9ddEg9ZH1GfUlOTi97Zm1iO2NeJSNdOWliY09eI1Y/P0RjNWZ2QFAvIWxSYERRfH48cyV+SU5OL2Y4OnhrKVReUntvUVQzNjwjbzhHU2lvcVRTU1dXPk5tMTtla31GOWRsayFEck8xal9ZIXZjdG5WaT9TdFRrOHZUfVBZPyRUK2NsTVhucT5iQ05qY1ZYc04hX1JnWlYvcDhNcG9BcVdrLGc5''@;'; put 'put ''TEpmLyEhNn12WERDe2gkJDgyU3ZnTjd8cWMyWjpaW1RfKmIwRlBRb3lfKnUoTjg3WVNxMXhzVXwsfF5DYDBGYltFdSpFcXI3YEsvQjQzXnRvLjY9KVF+QiRwLjpOX3BXczwiMCF7LFIhSWBmczgsUDhvLEk7UiEudjhaQXNTTWZUZHAxfml8RX5zZSN9UV1JUiFndVpTOC9FIjksSkNDVGUoKUlm''@;'; put 'put ''VCFsIjN5fEN5XWozNT00elNIS0M7SHhLcEsjX1JCRCJGdEs8LzJyfixxT2VvfEIlPWlJMFFdY1J0PiRXQ0IjW099KVEydX0qMnB+NDI+ZCVAP21zezNxNkIrWVp2TS42XWBMaGw3Pkw8ImdZWl0qdDtgNGlsczJwTXhCRXhpYy9sSyRKV2BvcEJgSitfWXV+ekp0LjE+YzozOXV2LG9TWXU7TFRn''@;'; put 'put ''SjwoMUVtXmUiMS5OQUI0SlhhVUVJT2E1Qzd8UVAzbSxPZGdLcnE/SElDXXwsWnBSM1k9PFQkanJmVW0hLCxNMCx4WEZjRy9CfG5WMXtGbWlfJERdQ2ZtVixHQyM9bEJlImVUQHRaW3QydE9rczQmRlI6NDRnOT1udmdLbng6X3A5Z3dubHIqZSIsa05bWnBDK2pESF51VEQ8dExFbX5ZTm06VDs5''@;'; put 'put ''djY4WCx8VFtQPlJKN3JbRkZaU0J8LC5VL0ZEOSVDcXY+fU1Ua1VndCxMRD9fUS5zP04oMSUubVg5MDZCSkQ1NCpTMVVge0Fzaj1CNHA5e0I8fXdBQjR2QlBbXz9aRiJJaClYbygzPVFhfCF5Pi5hW3EwPjdVIzdMfm9yL25maEBAdmY0VFNuPEBYIXZpMl4mUXZQR0pqeDQ0dlA9VD51NEVSQixy''@;'; put 'put ''ej5WLCs8LjpfLCYlXSpjQk4kM3lQJl9VRClbZE4kMyhNXzQ9T3dUNU8wfXFWZTtaSDIvRk1jci9yUiNGM3gsPmlZNlBMPDFmRlZvYTZqa25WSVUofCVzRDRqJn1RVmU5QWx3fVEoMFUjKUM9bCw4eWQrY3BTQmNOSThSQVB+RHQxd3JuUml7QmNCc11LQTR8cnlVeT9nQCVCOWdtLD0uWm9CMVox''@;'; put 'put ''QSpmfjMvKEtDb0JCUkcjdj5CSDdZL0B+Vig1dEIuZDo0KX4xVTpPLjxsKXExbSNaSDpNbG4oXSU/JnBLUCh1P1RhbmJLWm8sXWpANk03S19IN3B4e3d+anlSdSQ1a3M+Xy8pV0hTMmR8eFc/YlVJY2lve1VZW2F7XkpYdkJTMzBMSkFsd01UUkY3Zk1DeVBhKyl9dH4kREkqWn5WOF5LQEtASnwl''@;'; put 'put ''WmQ9cDpLMjR8Yi8xNDZ8YyRkU0UrMXY3VWdwVUI/S0smInA4OW9HQWNkVzM/OGJjcGtjUCpgOlEpY3U1XnZqUUZDJVpMT3EuWX5dSEc7c35nMDtlQlpgbDRseXJHKlpOe0wqe1o+e3RlZDFyMDxLVjRYNGA2K3F1IldrYiV1dCI8JmMvcls6QiY8TiwhMGRTNFssWnBIYklVWWxGQVs1PjdfYHJB''@;'; put 'put ''eDVVI18rcC9DIzEhcT9wL2ElTEk3NyRfQj58YW5dNj5LfC5pYmREYHg+c0EhcDJRMTZkPDtVb1RpK2Frdjp9RDR7UHQ6dyEvcWRsNWpAT2dmYiVnQlg7OEFSfC5EdVh1VkUiMihAOGVHMzhWUHxDVipoVHV3REcxaVg2eTAhXy44N2lWLjZdKEZzPSxAS2l1el8jUyNTfmNSLE9rMDpKUTQqYyFX''@;'; put 'put ''YiRVOUYlPWYqbkA4IUUmS3tlUn0zY1t+bi50MD5sQFEmSSRKQSpQez9lblZzRFVTTCRLPkI0WGQlNnQlM3hEbWZoNEFkYXt7Ol1tc2toVSwsQkhIKnM1KFs1VE8kT1QoayRhLylSe3F1NmslQTgpaEsla2JufjlMMklSTDwrcSMrKy5COEJyXV9OUWpzPFhYTmRzPSkmZSJWUnNqcEJbZi4melRo''@;'; put 'put ''ays4JHI6XlEvbTh4YGR+UVZlbVpHPC9LQlpkaVVPNHdxUSJSK1gvbj5XK01pe0VVdTBvPisxeUQ/LzV+USo+fkZFTSZRfU1pK1YsTD1bbiYkTWQqWy5aWk1CQ355I0xEW25FY3oqbXxGPyMuWiZ8IjMzfWZgYF1uak9dRW1taWEuZy8wX2Mlbl1LemA8czZoaF05MHs1P0EkRC8wJlErUEN8eSNu''@;'; put 'put ''LDFDNEwiRyZDOHVKXnM8MFc5ZkRQaVNVaEt5bVdSUyhgNiNUKX0vIT9SeU4sRFZebiskL1RGX1lzIyV6ND5nMTtJW1ppfllhdmN0TC9DKi5DOFtvKERNOEQ8RmFjWm4pRltjJHdkd09jflp2ND8yc3dPO2ZZcElBKSw0OCRZcUhzI0pLTXoxfUkkayFrPmNoWnYxPGlrd35oak5QQmpmPmNfTVt2''@;'; put 'put ''VE5EKV9bU0Z2OEQza2tMRWRUWmBERDIzKmMkQCUhalZ1Tj9RZykzI2pWfk0lLFtbXnJsVyg9fCtlZFpQRHtHWVRMOmYuUDkmZXV1PGh8P01nW05HeXNZWjVSbFdwPmZ2SkROSFV6OUZPflJRXSFpT2xgdVBxbDxbaj1DQls+R09Mbj4mYihXdT51PnlgQDhtKWlDQ0dCNl9sZjRBW2t6eG1SXVld''@;'; put 'put ''aXFSa3VRNWt3Sy9QNXR7ZnBAb2l5MV13bT5PRjxoKFN3ODd3U3d7W0BuMTpjeGNKOyElZ2M1aChfWCh1diUpOGF0fiteYCYhQypvaVB7P0B4MktZX3FaT3VeeGFlQCRsPmVNJkJ3KCsjdCl4K0FNIm5OWT1efWdmWCwuazs4NyJVIzR6TyRFIVo3JlNjYTw9V0Z8UVghPWl4Pl93XT9KP3l0cTh1''@;'; put 'put ''PSokVmZ4SExQMXFBQ2BxZFF3aHkyRn5baHk5Ll9DZnxDYyZDND08TUE/dHs3V01kbEo5eytJcn07UkYpdjhqdldOOHB3T3d1K2hOSD9DYzFdblA1Xk5hSHw0cHtdOkNjRzRyOSJjPGR3eSJMSjhGNGhoSmdVc0EoWGpKJUpdMC9IdzhFTGBJPWd0cGk+ak9SdFF2Okp9YD1IeWlwTnAvSnNwR3lL''@;'; put 'put ''IlghZTQ6Ll0wNiopMDdzdENGbWE7K0I6dCtHWkI7Vzdre2UrVCF6dUpVc2kxNUM1d25PcG9pbj1eM1VWIVhbbHkhZjd+JlomT2koO3ZiLyI/dUdqSjwmSmNRb2hWSGJaazFXTHxlbWBHTmlsMX12aFFaYHBwUyhrTzp0dDFaK3FkUiNjMU54akB1bSR7MXMjIkNhI3RmNG9sdi9VcCpbZ0phcXBG''@;'; put 'put ''VSl7fENXPk5gMm86JiNfPilZInxKW3hja2FhYUFjMjF9VEhde0hxMEJ+LC86blZJMDUrbkdSQVlCcyMlVz9JNn5ZNiNCWF08MjhBY1dQQVV8UU5dRzN4Uzl7fFk2I3MrenMofHRSR0dfR3spN21dUGshYjReLHEjb2xLM0lzKXpgPCt8emBnOzQuQn02V3x9V3xPMn5LfkZCNTxYeVc1Rl52WV1m''@;'; put 'put ''fTd9USxjK1M+eTB3RClQV2A1fX0qcGZBbjJ9e1JBSihwUSgibWBXVVZBaFtpfDFvL15TOj57LEs5JCVFaiFvTVVhIVQpUj5ve04+PmdoXmVrWH0uMGkwTyN4ZTBdczxDNCQucztefEcmVTs8R2peNzhxM2B1M3t0LltPSE5RZCMqXUNuPihvZjl1M0B7e3V6djwlWUJ3Zmx5PV02XWE9WTBQRzwm''@;'; put 'put ''YHtqYm8zT3pLY10wcHouZDAkcHhQRyFZTHw2VUdZR29DekpxfC5hcFFLJDwrSllvMWhGWSN+I30qZ244QVolflVHRmNzeG9qfXNNa0cmLmV2Lip1SyI5ZTQrVDU/XjhIfiVgSjokZnhSPTdPRlt9WTBmRjQjSD5VUD1RTygpSTNke1MhXkJUIX1DZkNNfVNhLDl0OXB7JEBZKXh6KXBTKXt5SGlU''@;'; put 'put ''eEMhPlQsQFckPltRPUNZLkBHd3osPTxZdVQxQT0xdl11UDpRamJsbjpsS35LcV5JNGQ+dyQzbUtvLDgpallEfnAjX1IodlJsezZJVF5eVUQia0t9UWZUc2wyN1J+QV4odVtaal5xIyomejdSIX1LXy5lM09GTTlUd2w5I0F3RHJ7aU98dCImLHJaSF0ieERHYkI8JG9KOn5Icn0yXUsyeDZoVmI0''@;'; put 'put ''bm91VX4qISxbdUM0OzlMQl9pI2Q9U2ZmSF8mPlc8Umlpc0xbS0VncCRQdGU1UnojSDJGN24rRX1PXXFzT2ZGOko0PHsmMXc6JiN2M1txayV4ISwsIzB7X2N7Vm9NLEFPOXMxRHgobGVyXSszfSxeeXdvVmNvcztxVmMhWjpGdmxiLjBXLmlFXihLRGdPaD93ZC5GZk9nMiUyNHY6NUcrWjlGInt8''@;'; put 'put ''LHNiPlVFbWFEP3FzZ2d4d196LmUrMDB0Z0tmW3J7Vzg6NnxRW3RtUV1LckpLfVg/PGtZI3MzPXtaSV04ZHpuZ1B+S1h4bkArOiFsJGVsdyt4RTJxQEZbdzwqWHR1VE40JTN4LipjZEo6V1N5PGIzc0lxY1RIcityU3FPWERfdnNJcnVScHtWfGU2PT40N3UlNSQ3YEMvSzZgVE4+UHZfKCZIcy4/''@;'; put 'put ''QGxxdj01JCs0QiQrbCRMfih8RThiJDs6TmMqK3tCJkt6SlVPNDJZUFdlUTF8PC9gKChmW2s6QytLMGx5X1ZNMUJJa2dIWUFsSVs6ZXJlfXAreXtsfkAoTm5LRntGVUwwblsjRWJlRyVGVSxAPixrNzdQTk5IKj1pY3l0azU2NX5fIzkoIWhvSCIoME1VYnVaXVZpck8sbFliZTNWRXMmXWZCWTpG''@;'; put 'put ''TX5nRXhVc10xeHZCQktwRXBGK0ZyanhCLi5ac11+cyJxKUc6RTwzczUkIXUwL2U/Nk07RldTNVNzPjBfI1U3VDhTLGF7M1csY2U8KFhMMzN2MFZzL1c4RVVmL0kyWWZqN1kjKHosWGJhX2NOcjh7WCE0aERHV2FdQFlQOCVhfW1lIWZqK2xMZ01iSDdyR2lMQztQMEV7aHwyMUJAdWJ3YllBWE5e''@;'; put 'put ''TyJhPzdSfX1xaU82SkJMRDFXTVZwWjZGVnExQjp0W2NGUipEOVBGQnJJflRdQTNJRlA4a3xMfCpLWXl0VnFsL31XKHRvNEx4MyhXKk92KkR8QjZDZD9uPXFDaFYka3NMb1IpYXEpe1I8RTwpdnpRUTlCaFhzTFtKdUc3dihzIzxTcWM4YHEuWEFobitmZnF0V0YhVzB1TjVQcm80N0M/diJUbGEk''@;'; put 'put ''OngoK01lS21tImUqPCpjazNDUHlnIk0wPzxNWztLKnYuZTtnJWdCcGslXSxPdFEuJGZaT0BRfkxfRmNFI1o2cTIqW2A8fix+RlFxfjIwMFk9bT5xSTleWWI2QExVSm00T1QucSx1Lix6LjM+Uzs4N19VO3VKOHBoW0VNKSNePyNxdFMmYC9HNHEhZkgxailWRFYjZkZULHF2TmMufV0xNlJ4UVE6''@;'; put 'put ''djEqLzVtMD5lM0xKVWhXKlNlK1BOOSZ2TUhgYFA9OUNeP1s2eE49e3BOXmBabEhRRGhFYjBYbltPellqIz47I1g/I0AxMiJLI3U9fVVnYHtPS2BTKk0oe1cmdl1nJHBONkAwSEVfTmNPbkpFXklodW1wcD9VS2BqQlMoW0BMIkVBbmVISXs6bVd+WHwpdT1aTGloelFLN3BbLEB0ZC9FL1MlUjt+''@;'; put 'put ''JTshOSVIcH5UTTkjMy9PcWV3PHh2YD8lMzZKLHhsaTk2TjUvbWY4YFYlSj9AazpaaVcuZE1UVXNnZjRvQDV8KzxAUEN5ZVN2ZmRZL2pLeSJUbV1bdHkrL3hxQi4yd09KO083K3krUFA1eFNBNUAqbCRhKiFLeVI6UVomQHV5UW9OMUA6QDJnUVo7OHlET016PV5GdVZ6NGVBYlBLPTt6KiwkfC97''@;'; put 'put ''OkwrcW9rLDg7ZH0oR3M7Zl5bK1J8L3c8KTJrRDM6LDxVVUs9VWdxal47UV1aVFJoOkBzbU1sLyxJfUpPeEEvVjNVUTh5dz5hdVdKY21dKWs1OEVHRUg5SXlEOVB7Yzwqd0BjfF5feD55YDYyMWh+eXBUUWN6LmRldnN4MEpRZkE0ZylDZ3koS10yX2hoOC82ZnBhWzBdODp5NVE2Y25IdFA6ISVI''@;'; put 'put ''W05iWmNRSyw1YCZCTGw5blpCN3NgdVs0MTVtSWVKTjh4KWQxR0NBN0pbYTBtOExkJiJFTTFQaz0wc0YjK3hgSkFkeSpMPT87UzMxLzZyeTI9ZC9yYj5UUFR4Pjp8d1l6MXlmPEFNN0ZxRztzd11sM2UjT3t7TEAvai8pYWBsamQsIiF1d0JEfFE6YFVOK18yb0IqJDorUGkqa2h4RGBOZy8uTnNz''@;'; put 'put ''b3tGKyVtRzRtbkVjdEV+Pyp1bTthaEcuSzcpUE9gVmN4SE1ZeGh0NCZIJj0vOFdvQjcyU0FkU3ppWDB6IWN5NlVVU0hnXjIkTFF6OkMjWmtDc09fWnBfbU9QREB9MShrO2Z4M35iO245cDUse1dFalVXPnQ8dWUjcHs7YU0vMTJdZipbYWYhVzAkOSJXRko4TlYvT2xmQUgsY303dXVOW24mfTlj''@;'; put 'put ''Kyh+YiNdamMyR1RrenRDKF5geixHdjowSy40djpqb2c/bF5ZdVA+aSUyK2FQaXpFU3YxOmZ9b2NTMF4pZG9qemA4Xl5lWGo3aUkuWFRic292MXRQdmo2XWBfRHxuJG0sfGY7ZkIsYTQ/R29oe1F+LD0lbWQ/aVQ/T3EmKVA6L0lqQW4jZHJ+Sko9NVRxREAlezFzNVZ9RTE4ZHB+KUxfcTF7UzEu''@;'; put 'put ''eC47dHhNNmBNaUZxalc4PGhMVlIuQj5pSXdoO1dXKmJqNDFyN31DQlozdj4rP1hJIlNiMyVHKHhYXyk7WG8yZnRBMXJtQkJ3ckN9NzdmPWsoWiNQO1JINV5fMWROMDtUTTZbNy53Xl8pJGpIY2Y2dXcrIjRGbHxSWmRZTSVIKip4dmBKRk5BWUZOQioxd1pkblB0eDorcExeSmgpXUokPDtUL0J2''@;'; put 'put ''Uy86PkQ/K0A2Yn1XWCg9NERIM015aEg+XWJYNltDRVRRdUkmSVo8WjFaaVR8O3A7OWBoe0ZIQypMPkVHXWY1PCtCN1k/NFdeSXVOVDZlZTJ3VWpweEpHOiU8d1Zpa1ErUnxxQHYkWWZPKzBqUlp6fGFNKV50aiV8YD1fW2BHSmk7cVVyKHAyOGJycUx1LHhQNTo5fWQ0aDV0QWZHQ1hWN3tkZWN8''@;'; put 'put ''PDt1ITNmYlNFVFQxQX5yeFdyfXhmMVchfkdbYGdbb1BlXy9pejRITX13MFVARnUwan0pXUdYIT8hcXQvVmIrOXpIJDNAPDdDRWpnRmVrVShUNT0pIVY/XmclaXJPRHlJYXg3djdpcVtldFdnYTQhTkQxK3A/a28mMltjVCFfPUs0NDNbZ0NQYCwldV4vWGkmKWMrQn1xdnZXcnhuaWkwcGhgXlRx''@;'; put 'put ''SStQbzVYfX05VUowQyVFUkgzOSljKWMpYyljalAlSD53L3U4JXhecz4rUFJdaG5uRWw+JHN1dE5wbjs6aXBvTFJMUkxSNW5MUkJpYT9XaVg/Y3c4e0xGJi4mI3gsRDZqSGhjWTVCaT07LzJ4blRaN1tiTm1xdVVtY1pkLktmJT1mUWo+N2tCRklvez5XWFdFMjQqcig/NlNuMHN2dUMxR0gkNHd+''@;'; put 'put ''O29gc19lPmYuTDlEZClTRHE/TSsoW2BbV3Uya3c4OHwsND1JXS8yYEpGKFVYL0ZXaEUiKG5gPVRLKy55SjdPYzdLQU89W0tsLlkrRCR2QDpIeGAycFA0Nl5YSzhkWDldaCxQOGhZWH10NEdyM0s6dzU3RnplYz9fJks6PjVQa1BqVkJQMmFQPzc4KSMoS2I9QkZHXlJGc3M2ZV0rVzVAQmQxQEJ8''@;'; put 'put ''SFcvZyo9V3VWNkVdSSk3OkpfWz1hNDZ7ZzsvZCFWZ1lHKGRtN2Q2OmY9KyNsfC98Z0I3WCg7TkxFUSxGT1hJO2Q2LCJ8LnFKTjUxUShXVDk0PG5CZH1QX1swNGd5ckAkNE8lQDFPL3NWLFRgRmZTbzNDMzlzTHFqVjduJWBySDRXRD50QiJwQUw2NU9IdT4uazBLY3whbC9eXVY1djpEbnpJMWNR''@;'; put 'put ''fSZlMmB0ZWBgOClaayU7QmFaayk9V1UzY0IjWyZ0RTJnNEJQTEUlfEE0OCw9eFYvV2lMVjlYMDQhLzh5RHlkUypBeCozZFR+X2wmVWJvLiZHW1lOQUlPVTBkRCN1L1tKO0w1N1FeYmpYbWU8fEJgaiRReVk+eWI0eU5LKS55QHF1dEd1NFBKXUVSWmojdU5NViYyYWVPOWpiakE1ODNELE9KOzE0''@;'; put 'put ''KzxZJFM1N15hJWZMQm90XXZLbzNMOkNLKUUhTHYuKCFbPVBYQmx0QSF1cGRKPyFmRkFGO2RHUX4kaDVfYXYxfUojYCtXXlMjKjo2aTYxKzdEdW18RmdnWmUvX0JGd0AyRVA1RVR0WF8sKFAqUjFHNWdFLkt7XUMscClHVF5RbHV0M1tnbmsybzRnLH5fejpKeWVraVhHQFhrUEY9UWBEdWZCUkIy''@;'; put 'put ''UlRQbTcra2xvNGJ0YTkhRkdTc1hMaCRPSTBLLl5yUythYTNrJEtGLDZRWFM/MDR7P3wiezN7ezhTIzlldE9+VnRjN0NeT2NGTDkqQ1A4KiFxbUAhUVJyNGlMbnBDMExwUjFvJHNdNTlyQzhsVWUpSTBWPFlTY25CLGFDNmg0Iisocl9gQG0+W1kzXlsrPXtRYUBIVDBmXyw9fndyYkpSfnRTaG9q''@;'; put 'put ''VnhSXkh3ak5Xbmo9U1c1KVc8emVsOCNnVUpdbDxWbClHczE8Omo7VThmZSpxMzZjZT0kJFNmOVpnaDJ7eVFibWxxYXs6MjYkU3hsYmQ7SVFCMGAhKUNMcjd4ZjU1L0N3T11wPSNwNF5VWkh+JUJvLlAjXT88QWBtRltEYkJUMmlDaFZCMzcpWXJQMjxTLlJDXXx+IWw0U240SzwwVXN0QHEyalkj''@;'; put 'put ''K11QZylJWmR6Xlo1VS5jbFQyUDJCYzM9SHgiIj9saDtZMWU2RH0iWXVve1A2OHUwO3d2MX5WamF0RUdPdjlUfDBUQ1ZKU2hDIU5QXyp6MEdLbV96IyUpXSplQSRFdUlSSTtAMjNEPDpPRUVYW3RFdUZYdF0ubmpOY2FmRERsSjt1IytrQV0pK0ArSDVBYk4qTX4wV0s2JUdeUHhdYUA7ZHtEOiU8''@;'; put 'put ''YmEldkFgb0puUFgrPXdlMWRGKEdYKGdpVXM+SmA0RCVQRjcoemswTihWeGozcjQyZko3VXdSfnZ7JHtLLEhiYTFeO1JVUDFOTmgqJXo9Yi8yZSJzYk9fbnpALlgoXTEkZ1JjYi8jLF9BIWA/R2ZLL0hRPX06PUdNNEhpbFtCO1pEXntwNDxubHh7T0hQJk9GKWkzdnU9LmBiJk80P2MqSGIkSGUq''@;'; put 'put ''VjU5S3JndHFacUBjRiwqOSEzWD5ES0tSe1RuWFM+cmZELFpmUGNlWzpnLlBJZ3Y3V00iT2EsZFM7OSlDWXErIS9tWVh1Ums0RHg6OyJ0SE5jXnomaXRUfjdtUkdZY1IjSU5JUEFMXkgyeGJpMFVrQmRTPHFjRj9bUGA3XjAmajh2PCY0PXFfViklNyNiemFCXi4mT3t7VzNzQjtkcWt7V1ZLRShh''@;'; put 'put ''RiZJUENRLFksP2d8ZCNoMmhmd1pEJThSLl47Y2BNP3tebVlSK1kyRHMyOjUqWkx9MHBDc1VgSlAmX1F2Mn14fHh8eHx4SGg0N0I5WjE/alZ8eUlZSi41XWlrSDowOjA6MFg/WFJzfDlvZUp2VXt2OXpVVX5pQmN5TE9lL2Q7SjhUPS9ecUo3Ml9EITBmXT91MkVOSDVHYX11JSNXdXwpO3QqdVVC''@;'; put 'put ''IkVwZC9kJUJQeUZyakhwSHkwbUlXdGlAcyJJdTE6SHBXdHVvOGdCNC46WHl7WU1wMUB0ezNuTTJpTVZTckpjL2tQXjU5Q0twRTtmYXAzOWc6OWxlS3RHOFUicmwrLyNfM2g6UDtHVUtFXSV7VWNwJExONV84VyNxbzQ8bTM2SD8vOVVoeTtGdzFYemRpQDIwR3ZCcnB6bXNHMXxFIUpwNHhWZWYj''@;'; put 'put ''cTk0fXQicVdgc050ezROI0thbnpkYWoxaCNxUzFRTWsqIkUiWG8kcSlNLDpbMH40W090RWt0c11qSTdnOHk6N2BqY290aGIwLEhSQU96dE9aZGMpc25zSE9xNF00ey9VeDJ7KX01VXNsMjQ6fU8lVT9PSkg6bDE5Q0NwNzJlSDI0aGRCNyFgK3VsTDk0KD5XcixIZTBmMCklbzBXcjQwV3JCUE8v''@;'; put 'put ''R0sxK0hSfV1OVXtfRDQlMnpuaGNtVmJbd0RvQmBJKmVzSW52U24yc1l0Ik4we1hbeGRpU2hzYnxjX15xZ2UjV2V0YHw8cVRJSyFVNSRbUk9UP2IxVVUpWkVoJCRIKF8qaFt4eDAuLlhlXjp2RD50S1NeRyZFTDssWy9pVVNGUnV+cmRfNzg8ViYzantiRFFsOlokQV18KHRgRlJZJTVETTA0P2cv''@;'; put 'put ''aFNZJnpsJS4mSCo7RldgMTEydk5LcUVxQDpgXyl5QEhqTjIlM1cjZys0cV4pO0wiJWppYGteRT1dZVMhbFF0KDRVZ0c3Qi9AYl4uOWZFPmd0JSw+O0krWm9lSk1mbFgvYDclT296cENFQWpNPUc2UTRaLnEmVGQkP1thWTJ2b183by8sN0J3RStVVVc+ZDR0ZTI7NlN2K1tPPylefDFyVGQ+dFJ8''@;'; put 'put ''aWVXczYyKEZLWSQre1RpbUQkNFtye0w2dEhQJkIke0soc2clUHo4Uj1EZVhVS1osTV9nYWtKX0JCOEZJPWlHWHtUa2ZXYDwzakBZJHliODZdQG8wS2VvfE07SlJtO24/TV5kZSouUip5aTJWQlduJG5zNzJNbVtPQXl7WkNiQyhHO3s2S2EmWnprZE5YJChTc2x+Yl5gPj9bci9qWFRxJkdRP1Yr''@;'; put 'put ''anVkZ3lCSVJDM3BEd3IsZTZXMVJ7Z3U4WSx8fFAifTJxMG52X0lVeGIqU15xOFs+dFJ8a29APDVbbWU7fUtBcl5KM1hob119Sk9FVC9+KXdyWzgxLklyeWg7KEpoOzpNfE5MXkVxb1YhRyg3dElveWZsWUA8KjcsVn59cWlDaV9DUFF9eTdhYWdlUVk9VjB3MndEYyVHWDNpOzAwKGxrRDhYeVAw''@;'; put 'put ''X2ZxWmt1JXMqTHd3Umh8Uk5EfEh9RW07S0A7Pkk6T1Q4SiRtc0ZfQCMoejFdaSFXPWd1PHMqSGJ0c3FVfl1pKHBpcz1Iei9HL2plZmsuK3UkP1dWV1F2PyI0SCRXZDRAMXVJK3FxKVlAPzF1YTg7UCwxLCEyeTQuV0NdLG9nMnlZb0BoM0tTemM3KEt4UnZjfEdQdntqNDA1X3R4c0AxdUwqT1Zp''@;'; put 'put ''TTV8NzRlKmF5RkV2fDc0RHpQKy5AKXNJMGVTK0k7a1FMQ05ARGt4cCtQTDxQIkJreEIhMnl2en4qPj9+TDtJMytaZDRAaCYqJHUrJFlxVSMvKEtFMWchSmJzMDswSzArR05yRmxMNzlrUSsvKj9rKHQrSVBSU0l+cSRrcHg2Y1MrLllEcDhQakV3bmhRNEAvNE1QYTU3S1FKY28qZytJVmY8RHBx''@;'; put 'put ''JGt7KytkUCthQ3pnJHp7aihUIXUkcSlZSmE6YjsqKWQwSD5qaFIrY3NxM2grMX5WPlgvKWQrPiNORHtSWUVCdG8vYlNhMmhUInRTT0NUbilTOy5jZ2Q1Kj1xWisqIUYmb29kQmElI3UwUDU4OypreUN4MWdmV0YscUdNVm1RJT8xdSgqVVZtUWNgYVhhSjFLVTFOJWRQWmZ4U2hJWmYmUFFMJWdj''@;'; put 'put ''P2V5OUVEKXRQeFImL2VsL1sxdVEiNnFsbFp4ZEc4SzY/NDdjUDdNb0VrekhqYD8mfWUvMUl8cWxsWCxPRCVFPj80N3xPYlolbElJW2FXVlFMPThiU0hqOVglfWUvRj8zS2dKX3w3NFs0MktZSiI/MXU1WGN5NUVBfmUvY3omS1lKQD8xdS46MktZSmlgYVhHaiJDNlB3bmZXbiV+IjhLWUpmYGFY''@;'; put 'put ''MmpPK2NDPX1lL1dKeSFxIVNJUHBBejFnMz5xY1ZmSkUyJW1hbWpJanVYVVFKdmVWRlQpQD1hSWpTdShyXU5reF1oaElWYFU8Ink3X1EranY1XzZZa3g/YVpJPz9uIVhPcDVhOXhScyFhZWE8IV80T05tYG9aSVlgdjsxL3RxKmxaeCFxKmxlYWVWQFNeQkxSSWpvNXYleSElY2orSGp7Py8kSGoh''@;'; put 'put ''WEVmUCs+WU41eSEkcXszTmMvTjorOV1mNSE0aXkzYT1rPXZaZm1qdUp4aUFadj9SKElQOHpEbVtbN1VjIVVHczRIJDdlI2phcXFtWXdkRz4wQ2d5IVVHYE5Yb0FmO2A6RDtifGxUKl4qb21he1kkbixjeF9fXzxrMFpDVD98JFErXipvbWFhUiFLNGptKnV2YWZWNlEpfSFBcW1he2UsdSJ1MHoh''@;'; put 'put ''Z2lVKHZSeUhgd3JMOX18KldLLiZIIj5EOFAzWFAwSGp1WGgjbHgvaS9lVSxGSmpvaXMzb2M3S20hL2cmfE9ObWd4K0AqfU0rIUlDeCZQMFg1SWE8b3E0eltfak40aXB1UCtEdnwyT3FJdG4/MV5fZkMzJU4vJFh0QDMxXmokdnEybTkhI3ovaTdJZ1ZzSCs7PG8wKjVffSR+WlZBYSouQGxzV2Jz''@;'; put 'put ''Zzx1LElTZlVuR1hFbjJPa3h0Ni5jdmdsKkJxUz5yZnd3MCw8fXFvU3g1QjdUOywzbVsmO0VQKDVXKk9tPl59UFlecGxvUj0vYDQoWG9sSzFeZCQ6fi98Ym5gUVo6TFUvOkVWUUZbLFIyeVQ8bDVZQUYofFFLeEQhYG86JmVCYilhKXNXKTY3a2k1WSJ8Kzo/RXxJT0ZTTDY8Wm1ZVVB8PmYmMCNv''@;'; put 'put ''QjJ4eEYyRio1PGRfSCJkfjNTTDxUL0NKfT9PM0RnWVVbJjNURis0X0cpYUpWfClJOXA4QDJvQiY6YWNfSDQucXFBNn55TXpCKms2TDtIN2hNRWl1YjQwKkxWezk/dilPa1pPYzhbR2J0Q0d0e1d3RGVFY3U4YGJePyQkYFMhVCk2dlBjJiE/P2NuPyE+OHIsJWo7Q2VLU3k9RUMpQSVHPDNkXy5o''@;'; put 'put ''W3dZMjxhQzZiTWEvNEtPXV4rdWMyX18vR1swPjBBcy4yNGluelldJmQhPyorJWppYHQ4O0QuQi8pdipuIXc4RmRIbShdIShxWShOQjR0aldEbHYySTpoK0MjTGdrUm9BXk9ealV4L2pUKlYuJHs1Z2JXPi9QdiMmQTJzX3FJNFNrfC5IfHVJcSVNZDB7QzNed1BpVD5ZNjE3YTMpbDttey44byUo''@;'; put 'put ''YFc/PEFgfiZwdGx5KHNZX10lUk4rb0ZPJT02LCFNLFY8VSt5MUV6Til9OGdVbWBPdDM0bHJxK2RzQztxPkRmW1k8SHVIRm4lcnhwMElJO0BPSzEqYGxDSkJpV29GMmwmTTpvWCFiOG5lNDE/M0Mxe0FIZCFoZW4jbCpmUlREVmZrdC9gNXZ6OnxSP3lLT2dgcVNxdVVecmJ7KXciZipYYFcpaD5X''@;'; put 'put ''JCw/cXJbPWd8VSFqPj8wPyh2XnV1NVt6Z0Iyenl3O3hwUXI1JjMzc0xoYngoUmk+VkVmTDhHU0IydXgvVT5WaEVwTjpaP18oXS5ycmZfe1peVzpzQyJaQkZ1OEpgfSZ0NWRxX2tjbSp1R3gzcXl2UnI6UTZyRGklUHpvVyRfIV9JPXd8PUFxX0JQW14xdzZKLk5rVjtDWyY7aDhCPlNbMm9BVl58''@;'; put 'put ''KjEuMXRFP2d7Lkgye315bFZKSytTR0JxMTxJLyU/NnNVUmw7Mi57WkJdT0svJnxvKSE3VWlkX2A0el45bD9LWi4hTjYxMX4zKGh8bkNKSWoxbz1qaFtjS1AjaXtpS2hQMm9fQkdTJFgkPm8wQE9bTXF6TWRLTklkTDZVYUQ+VWFib1R5ayQ6WiFTez9HMUs9d21SRWdtcF0rL1BuYncjLjNhcDBO''@;'; put 'put ''elNLNCFAI1JScU9FS1pdNy5XTEFLNmZvZmx2cnIlXXZSdTtPcnxydzI3bzIpYWk1MT1MUHFBUDEuLk5FMmNyd3hFY3tWXztdPDFiezBQdmNZdlpdV256eE8yWF1DJV1yUlVCWSNmRkAqNEo7YVN3QGMqOjxNdlp6WkR6RU1jWGAvREAmfHQje2tNYWh9UlRhZVZOQTFSOG9mKl07Ji9eKnVOUiFY''@;'; put 'put ''OUgwe1lsQ01NKlMqb1hNZUYvOiFTdl4hXXVhMW1SVVZ6cmNRYWc7djRjXUUsTUprc1c8UXN+aWEiMHxybDJedSVfMTxmLDYkMz02aDEmQXJlUns1aU07c0E3JVJaMjAlJiVeX2x2YGQhOilNVWUrcSZdWHBlM2cuYXB9IW5mWiwjZFI6P1hWSTAsJlpNM2lNTX5AS0FoNG4vKWM4bSwlakAjVVAw''@;'; put 'put ''PSFzNXolUGk7I10laj8hSC8idFFUcjdNaVZnY14pKEY9LlhGWW5oL0RDfGs9a2w/LyVQViZzbT8hVGJsfCE5bHlaa3VJJFguaS5FQHp5TlJta1ZGUjBIVyk9QjZmUl5dMWhSOlJFP1AxKF1dYDNtbi9idjdSUnpsRW8jYGskOzBZaFViV34lREkrRDZwTlM6MXBIWn1payk4UV8hYG5Pek95MHlG''@;'; put 'put ''QTQiV0Y/ajQvP0c2ayRCMmouL3AzYzdLT2F3dGgzWTBwKSkuRCxMfisuLDpkWE93diVFLDMwMjgjNT1oWlEjRC5vIVRYYFl+UUhVKT9zXnVFXi9qJVkxMUEoYH0heUZjWl5dZyU9PXtFZGRfV2hsW2toTno5QGJxOjlKUUslOWdlSCskK0kkJFkyQFZ3W0VdJHB6Ykd6S3w4PX4mcl5peyx2Kk5B''@;'; put 'put ''YVIzQDl+OXI4PjZkVXpzR0ttciVLQmVeX3Q+X0ZqTXdAeVRmLisleENaKDpyVnQhcnomRVpbMGVJWm06Vjx4YDBdWl95anNUX1dsP3FYYkV9LnN7PGZBSTt2ZSx3fnk2MzdPd1EvRF5fWjg3dlE9TTk7NUp8WUArKk4+UUlmX1pNLzRVK0h2L0ZBJkJPPzVWZXZzYH5mTSkuL2QjQyw5JUNZNGx2''@;'; put 'put ''fmdbRjkkZDJ0PzouPXpCWVA7JFAvS11lR2tDVTMkOWNGLE0lQ2RwciZNQGYid31UKHNdTXFCSGN4SE1ZLHNoWVNuSzx6OnMkNXIsQDkydi5FYns0OjlTRHAmdUx1az4oaSFpaHcpMitOWFYsYX5hcnp6aF0yWk14QDtVPj9YWnQwNyt3bDhQc1s6Q2N6Jn1XJHJBeyFYKjMoX0h3Q2NlRE9Fe1k0''@;'; put 'put ''KU5lUF5ZVWNbZV9MWm5qREdBYyNwTC9hb0cmPXZTRnZyQVtEOzIoamUsUX5tfVY8dFY3bVopaExeWjBbcmtBeEZ4Um4/O05TfVMxV2x0P2BlN1NgVjx4RSg0bEhgWGdMe0VnWWZkb0w5Mk5pKmRtT2pOV1pseFNea05SXSVZPyFZcnsxW1NeQnNOVyp2S35TZ1RaQHxxIWRVZCE8LDEuLlQuTmE/''@;'; put 'put ''LzJwO3g8Rnpjbys4Tj9jP3plY1IjKlU4REJpQE9PMC5ePnJLanF3I10wT0BRfm5WKG4hdixHemVENjJwdy91OW1Bb2dsQi9kLi81WWVnIyw/fTliJnBdPitlaVtEJjV0ezpVPlNsIjRMbzk3c2t6KVdUJnpEQ01LdnR4djllSXJRXUVkZFdpNWFdSThEY099LEgpOjY7YXRQMnl9LzZPenVmMDxi''@;'; put 'put ''PDhaLDNiJiRgSTI3azJoXmg+UGV9OF51JHE1Oy5bRXQse1QkOUs/aHFCbk9qIldvZmBDJWd7I1JlbXNtXl0sI2Vac2dlNV1ofT1pazBzWD50dT5xXT5mWjljOSgmUyxBZUZ+M2FvZ0twMT1+K1YkKldiMjl6RmFWOD9dVDowJEUjR3dEQHBJNzh0RDtAaT9wLk1yNUM2T3p8ejUhNjhwYV0uIVdZ''@;'; put 'put ''N2ojOHl9dmZMOERjMEg3M3tQdVQyUVlIQ1A3JnltZ1ZgSUowWzdsOSwkYUJ+XkFxQiZhen0jUTM3bzIuZFU8KChKIT1mXjR7e1s7IUJ7ZEI0V2RCNFdEL0RkNlVxemtRWkU3b1RHb0xsKTdOT2RuYCVnfTVsJXMkSDkoPVl1all+eXRGZmU+Z1s6JDgyemVMKnBedHBuKyUmO0MvYG4vKWRURUNA''@;'; put 'put ''ZTNDZVc+KVtTWXlZTjV1WyVSJTgkLmVHXltleUtdJkc5cTtXLj9XQGxWJSJ0N198PDVpbyo+fHxsYVVKMzRmfFlkREN9WUNFYnIwTjR8cjxKdUkxTmFfYCZwZ0VqRkBjZ2IqJFtONFR1NXFCU0BJS21uPjwyfFdicUJTazxbdnlRPkJMdUUsJTZoejNUdzQvfE9JO19CL0IzdUl4KjRWYERqP1NX''@;'; put 'put ''NXgjPH4hSGJIK057SGNvKHx3RCR7Vzhme0IiX1Vmbld0Uj0uKSlUVjU2UkJwIX4zc1thbShgNmtdLjNKL28qO3JeeHxSM3F7QT4xN09obzlCOzRoQDZUZS44UntZQFMucHdCLkFrQVNxdS9GVlhEZkAzaDliLmpvTk97e3teMiIwc3lOdzpqNGpYcHJGMEFNeDcpPCRNOmVac204M11UYkdOdHt3''@;'; put 'put ''eix3QlU6KGlEMzUxR0NkImRiWG48fWd+azhGLm1dYl8iJHFbODI/QGpNbXY2eG5DQm5dUHE4VF44UHMsVjV1b29PfDF+JT0wZGV+aiVNZT8rY19yb1csNHN3YnNGcXNdYFR9RktQLiE7TTkpIVBnekQpQ0VIPXRlfGwyQXNYX0I7LDY7ZTQ5JTtEKFheSl1ia1d6eDU4OUw1emsiMzYhQX5qPGdL''@;'; put 'put ''MFQxOUIqNEYuWzR+YUxtN0ltbHosbmJNUihQOjRgIV04cHw9Xmt0RXtOOWwyQlUxZSEuZUk9ald4P1s8aTRPQCRHNDYweWNZUX0uWG5jIWJqfkdePDd8RiFlWTssSSlIWl4oNDdEQXM6b0o5Km9FZFopTjN9RmZrRHJHfSJzMi8kYGViZ3FkYDJ+PD0uYlQ6bUtgVDIvSnMyZEF+YEVSKmNCRG9L''@;'; put 'put ''Q2tLT0lZZDw7QWw/L0pdZjlJRjpPL206QEg0P3E6Um1gJmh0WXJYejkwVTJzNSxLfkBFRFtATHNwJTFUX0EsV0QrYDFZTmE6K34lN0Y9RFc2OjVASEJ7Vy96bVokdzFvJF41QHRhMHZyfC4jcTZHUGkzNnh8SWcjM35AMkhaaDQuKXJFUSJ4ND5iPi5HXk1DYWkmbnRAIWgqQV9Nc2gyXW5KcmVg''@;'; put 'put ''QldSVT9Pe3BAfSlTZSUmMiIpUGV3SFRiejZlXyl3N09CZWt6OCpXJTxsMFMyT1o2a1dJQVZlZ1c9cmc0L1h8WGJrSUxCPHo6R2V7PE9AeHtuJlZXen5yNkJyL05COGdpYHk1aDpAOUwvV2JhSFRVT3MkdTUpdWxgUTtII3xDbktLLE5rY2w9Tz8ucTh6K0cmI2c9R0cidXprVkIvbGA3aDo7VXBx''@;'; put 'put ''NTF4PCxxSFIrRlZKQzdsJm19UUZlUnd+SkFaYWx1YHBNPS8majgyQllYJT0udW1YPlRRJSs1JSwxdzU2Uzx2bHl1UnR7eVouTVRnRkwmY1p4L3IvIz1XIlkuN11vemZTV3AlR0kkNDhKXTlJOGhZRU1rPyZNRld9fEMob1t3bDg6OWc5d2JSMzF3cW4mJn1tUkI4aXRRKGchMiR2RFlbeWRUaCYk''@;'; put 'put ''LkdFQSUxPVhWTzFrbDFpO1JLPFhGN1gjfTh3MVs3RU1CK05kJSw+ciVJLDFNPS9gNjcwVm9vX3AzNlUhOmdAZHwsMl9qVTl2dSRZUFhla0Y/Pn1XclA+WVUiI2FPd15lXWJdMS9TfEddZWBhOW8sX11xZDlGN083OHN3ci5ASTssLHp5NnRmTk4vWH1me3ZnIXMkQE5rUWtCemBwKWU0Oj5Hb2Av''@;'; put 'put ''ZiprfjBpM3JoJFhNc3lKZn14I3dENW1KWFouKHJNOy9kRk4jbzV1UDtNaShGWmk9KF95SXdtJEtXNi5ESXk6aX07eWBwKE9COCYiUyspdz0vKnFPLkUmOXxFZSFGVHI/LnltP3UzO1Q4b142QnczMmpfeXhrJkUpd0BGVWBvXlNlOjN7Oityd3lFdlIlKW9PZTV8L356bENNflciXSs9LFNbKFhG''@;'; put 'put ''JGgvV3osW3pWam5dV1IpZXN6UmddNXVTfG9SdGp+eXpBaGFNWiUrI2ROTi9Yd3dDczpYUFEyIzA3U1VZUGtSel03YCZ+XVpvdTxUaixAK1gpJClPOV9LS2RJQmVVPlpPemVyQUU/cV5xMVQuTEguSX4/ITc7dCthOG1iTGFnLklFb2R1MkpgPk86Z01BQVNxR0t3YlErIi90bUByTV9QJnFDbCpl''@;'; put 'put ''JXhUZVdPY3F6YmRvIjBzcz4kOSo3YH1EakNiNSFYNDZtdGg0M0lbZmVgQV1LKm8pbDQhcylFWmpHLHclU1I5aCFmOEtHWmR7WmYyPVgpbzJUT0Jna2ArSDJVJjM+V2ljcXpnM3lVQVEoMSl1MSY5L2VpV34oPnJvKFZ7dX1oS1QrIl1wcVcvVHglW1B7WG16L3lJcVY6bTd2VjBFfjFFck5DVGx0''@;'; put 'put ''VmlOcj94NFhqR0s4XWVAUXBieElkUk5UQjozOmU4aGdsdTVyJCEuYVcud3J5NjBxX2Uqd2A7eyhFOCE4eUgmeXFkZX0xaz9kKHc6cVBdczNbdTM6MzZ6Ri59SE9GOmBWPTIsdnxWc2ghdlQvZX1GVk9sX05wMGw6dkhiRXY4TzdCflkwU01VaVRpOyEpNmFzX3gqNzIqZn1+NHdbI25lJmxWaXVS''@;'; put 'put ''cXIlPmd2fnI1R0gjaClkekt5YldbYTI+YjI4Tig0a0ciVFY9bCw4Ml4qd1FuUT5reUN9OTEpN0E2MSRKcyMmMjx4WG8oPl5HRWJneTE7ZCRLYzY9Lmw4IXg8PyF4aFNwdGJCN0QlI1NYWltZc1VVcDBLSno2P2RuO2leOnIzcmNYZTQ7RUEvNXFPLHw6flprdn51TEo1QGswN2YvKVozX3pLNnlY''@;'; put 'put ''Xzd+TyV6UWFCa1BEQUEsaEhIQnQ7Q15KY2M4NEd1ckMhXX11UiJDQVEmN2RYaipnVFJuemw2a0VuUlB2dVcpQXYoSnR5TnYofjlzY3pkfVhNbDFkTVQxNDJodiloTWhsJWNEY3pIKVJERXJ1PmtMUi4haT5LaUhMJEt9cVNVbi9sLn1USWk+TyV5RURpdCR8N1tIXVMzd1B5dTBSRER2KlNvY3dG''@;'; put 'put ''dzxDMyh8eWJeV2N1V2YjL3RbV3gpUT5kaGAzKkosLlRlQXlKVyJ+L1I5RFRWbl9CfVQ3VjZ9cmw1P3s/djt2PUxAM15EI0ZUY1N0Sjp1MnF+dFpRWCopVyNFaUU2cWE8e3NlV3Rjb1VuUEh5TH1uXXhuT1FJeFpNcDlVbXIsMmwlUmJoJCtBZV5WTGoxUygrN2IsPzFJT3A2NkhVM2Amcktjdzhx''@;'; put 'put ''NUteM1ZyeChaWTgpRzpJNjsmPl5EVHk/dl1Ael05RUtMbyVMcV98UlhDRnBhfXcyfUR4TzQ8SS4yYGR4ZVJgSHNyL2B0V2ckKz1AN2sjZEkmJFFHS1hXVzpvIzRrUWkmcl50YkhVfilIVnx1Z1QsM0BxM100WXg4ei5AXTFQQiZDSkM+fkE2UG9UV3F4b043UCNGTT0+WktAY3RHW2Q9Q29OLFdY''@;'; put 'put ''aiUrNEZkUHgjcj1JSyx+MU86KkxUfildMUZqe2ldcV9jUkB1Lz1+fkpJVTdianRyPyldfnF2LDtpanpXb3ojNkZtZUMlcj98aHFjfFtRYHR9fCoxRmxSZFNjcDN9Qih1bGJze3o7cnRJRiRHY281eyU7aDJiJTpjZ34xfkBWOlFsNGdYM25DJExKaDFKJCs6K3gvdVkqSzpmd35jRWZtOVVYO310''@;'; put 'put ''PUhzNDF8V2QkYEpNInRYalJ5KjQ8QlNSamI4LEIjNUQ8TjBMblJLN2h6YXZuZD8/RU1hSlpOYDs5RlM5KE8uYFlQXmZbPU1eTkdiRUw9WyhrRWguYSR7MDRoTXwvYDhfRjVYblE0WThXQ2B6e04/XiJGLDJNTV5lak19VFIvYFk8d1VFeyM+fnh1eHNkRTZde193cDlOb297eF1KLDEscnNmZ2hO''@;'; put 'put ''MkNWci4iNVE+VF9+NX1jdzVTOXc9UDFmWng1L1s8VCgpa2JMRmdtLChNPUFjczhia0lXPFBzW0FnUlU2RD5XVmFZS0J1c1g0dyNWYXV5WV4xbiRrQSQ6ZVJvWzwyN2szNlE6PVYkcS9uRXQ2PFIzJXpZTiQkek5APnB3ZFc7PzxuSmEyYTBTaWtBIi4uMHlmPyZkO1o5VENaZkI0MTtfbCw3I3JD''@;'; put 'put ''YSxkbEZaMi5LPk16PCowS09PU35nekM6Ri9oVCN5dnQvPlNHbyR8X3h5WUB1Q3VOT3xAJncrRlo2L01pVm40RSEoZ1pWNltsZFs2Mio8JV5eK0ZsMmtHJHR4dHBUfUwvZSlGdEZFaW9XdXcwTC9JSlJMNVRrQUhMMiNreDBBJW4va11VPWxqM2dfY2NyYy5GY0RCUTEyNnBgY2ZxZlZJUE9VJiQ6''@;'; put 'put ''YG1SR0AhUW9nRmt1S1RTP2VfOjhMJCReO35pLF1QS1Zeei95TkNKPFlodGtPQElbYFE3UyxBWD4yPGVPVVh1W3xTZSI2ZnJwVSJ3X0A4JmExMXcrXkciKkVsaD5iODZNayU8SGFgVE86d2dOdSZEfjE+KVRZLHZaTzgofkJxJnQvN1k8dyx8djNvJkp9WUw6U2U6OTp3M3xZN25PS3k1dlMyOTgm''@;'; put 'put ''bjpIS3spaVYja1ltdm0kPSxFU0ZUQl1nTCl9K0RZKGwwU3lpWFJ2TGIpaEArN2NIajY5cjZeTlAxKD5MeGNFLlh2d2JldyxEZSp5bW9kfkgqNF5layZmaUpmTVBFUE9SN0ZvM1IrMXF6UD9vUC9fVFVicmowSEouK1NjaWdYUDI1c2FwVClWNGJwTGVNZW4yTFd2biZAaUxvQ0ZRVl09eG9aPDRs''@;'; put 'put ''aU95UDUoTV4pYykkV2EobFJkJi9Hbj1NYDhdW1FRcjcmN0Y9VU4kVWR5LHVUdytuQlMvIUwpeXg0NT90V3JiXXZJNH5sR0A6MF1NaFJEZExiZVl3MVZ6Q1ZHaEpMTl4+e0R7Oz06e1VyRVElKTJwNlVLVk1YbnJCM2Jpb2pxXldGcix3NTpSP1dFRV14JlVWJihfe15JejlQa0oueDkhczNgZDti''@;'; put 'put ''XlhldVtTd2I4RCtvVnwoZzxzcHtdKVh4eCw9R0cidztVTmR8KCxiI0VseSNINHV6NnRqUl1ATnssKHA8JFVsbmgkOGl4WXZkZCkqbHoqOzROfEsuNk55MSlMdzA4ODMmVlRWImZ2NilMRU4mTHlVVF5zfFtTRWFbNV84TGlbOE0/YmBsPHcsSHMpfHM/LHoqZiRDQSkjbCpMS1pNcCZjYzF5QHJ6''@;'; put 'put ''RVU+QSptKFdqJjQuWVhrOm0rK2ZESkdoazJzZ0wpIUZGeUk8enlYKnl9WFN6bl9FcnJbWnB8eX1GST80Uk8oYyY0QnlAJWhBZjBVUHt7YkxEfS4/bnY8IyRBJERTQlAsZkI5eG0iKSRxITUrLFFpfVRAampOM2BscExHNlNycUN1VFgmcTFhRTxxXVRTWDNAQW5iSC87V1UjdDVrdlo7MzRuUjtC''@;'; put 'put ''JXhheEUzMH1bVk9CeiFwKHVxdm40S1hmX1VGdjYsXmkhe2IxLl5Oa2xFczhqNkJCeHQ7NHwyS0EhN086OWRpKUcyPDNHWFlRaGUvR3o4cVI0NXxwOVAoWn1mJFUoSXJpeTldNUN9SCFkQigvb3F2fkppbVtkdSIqPWZdQDgyJT1wYXEuUWdgZ2o9YSUvVih2PUM/dSghZ1pefnxGJV9tSl8re3lv''@;'; put 'put ''KUdlOWR6bHBMdnYkYkZsZHQ9XW9ucH1+M09NXzRyVnB2YnojZ01nL2dtUiw/KzZ6LFAvRHJXUDxNa0MsTzdBKyt2e2M/NjMjNWx8aSJEOUd7ajR7SHouVD1VbXpxdiFoSkwsIl0qdSxVUmV4M25COkVlXTh4YmlKJXByY0ZIWGs6Sjw3dks3OjlreGowbzF8NEhzKGddWXZoW15DZjdPLzJKbG1h''@;'; put 'put ''Q21pJmR+d0NuTGFPXXtqZEZzTyo/cmxPfFV9TjZoRW9WR0djemNea29GVmgvNWJxOGtofSVNbWIqdGU6QFYwNSlsLGg3Z20uMHhrNCRMJmh4T1tMRjxzZnJWSk5TKmwpT1pLNzwqcFtwYV9UTEtQaWE8TjYoV3ohSikzVj1jczxwdyl0SmZhMjZEc0NHcERWZUIzUHIjIyVVM1h7XnFzbnpwWXdp''@;'; put 'put ''JmtHPDgibHkicSpldj89SUJzLnd4fkhwQykxXWRxZ3hZRlY9STVLckhsKkwqSz5BXUlSXTlUbVBZYndmN0cke0B1TDs2Vm9ncVM3TTMoU0BzRFV5S0RaW0ZnVT01bzlZbXtec0l8V3pAczt2Yl5tUyIqRjRCUWc8TDhQMl0jfmspclEleTs5flRmSWxGJjFPbk58KDYieD07NXB1S1J0UTdfdntH''@;'; put 'put ''K190dUV0bWhrTUpMYG9fRW1vZ3xxLip1JSVpOmU2XTpmKiRfSUZEJGlvISN+VGlMTyJnTEB7Oz9ETCohZisrUzBGd2lBRCJ0ME9mPUZUJXF2Ylo8Xlp3R3EvZmo/SEFNS2hOfXZbW1VgZXZ3KThIOnhURD1yJTljPT5zel51JT0wXyM6WWp7SHZ3cUo0YGVMRXZTLjliViRtOUU0YDY8LkxmJkRe''@;'; put 'put ''RzM0MnppeVZzUENrNihZQ1p6SG1BTVc7SG5lWHNTZFIuMV9yQGRAbElTKDdGPXR2MUV9cyN7eTApOmF4VTV8dU56NVFHaTdSeSR7XT9hb2dJZzEsXytSRUMyUjlNWjxGVDMrWGM4IzA/dHw6LnF9TyM6WFZObVc9KUUsPnxje2s1cXJ3OThUSXEwQWgxUT5XPSMwa2VNI1B8eTM7O3xDNzB5Xz8i''@;'; put 'put ''NjNsfDFkWEUyOXlrUWM5UEppS1Rvbm9nPCJgcXYhQltHam52Zy5ReThUYDw4d2ZrMDhXOylfRXQxMjJscWpTfCUuYD5SPTRuNklfY3hxbi9JeUYibWd3VHRlOkM6VGxrQz4xcm1rXnd0R15NPShYbFlTdFg5WEdtQ29dQ3I4YEIhYTU1b0xlL348WjhgYDtvVFN2cnBdcl96IXZURWBLXyslUGIm''@;'; put 'put ''ezhUMTRmQmkvUWhEcXM9R2B7NCE4ZmhyYWc6W3o2dDpIPkdKTHRtYHtES0diWSZQRG9HRilxUUBoI21wK3Y5a1s4U0RYbVNtOmhXYnc9LjJSYSYhJntTdlUpZnxATEpDLk9pMjguZHdxYFdEdSpGdXoxM0pUVT5DVSpMP1N1Y2lIVWxicCxWeWdzcVsxSFZYW3hfKFdzNT5mMC5NKUF6V29pWTtt''@;'; put 'put ''OEsqU3xXLylpcDJPImNRNkZpUDBieTBwQ2I4VkUrR3B3clkodzZXSHBwUj43eVRpLl1ZVyJHY2M5Pl9yUTE5aT1qOUtkI0hbIXM8aSNlQChqYVhDWWFBMmpSJmdNVkZUcDhVL2c+OFN5dzFEYmBvclBOeFFONn1wTFE8VjtdPl5HdjAlUnI8Vn1gXjJAVGUoJixibTFJemUkaFMvKHM2TmRuJDlP''@;'; put 'put ''UF99O2cifWtYOFgmTWw5MUVsS0NpMlVbXTRSIUMzTjBdVGwhVWhyeFI4a2xffSxIci5DZT1OWUhrJHUhckZzblcyWTd3VTAvTnkzVXQlamMjImBTTi9hYnVJZGcpfShLd0MiaG1nIitOZmRReCZFaGVEaUltZTh5SDRFSCNGNj08OTBzWG17K21LMT9Rblcyby9AayowN1J8OyNHZksoeGhmaUhr''@;'; put 'put ''SjdPPj1lXVtEOy9KbDEyV1smRl0yIS59OyRPWDdVN3QjTzJaPU9ManNXcktlezxDOGlEISEySzIkRHA7QnRrfmVtfU1lVD5bYFNDfHFDJkAoNUw2L1F4ISQ6ISsxdXFOfmw8Q3BjJHUrT1Y6Y1o5a102blk3blJUTjRbVl1GKFssN3cpVV1QbipVZzZqc1ZiLEtANGJuQUZJZi9NI01RKXN4ViUx''@;'; put 'put ''ZyFGNmckemhQNzgie3VoaEpUVyJZVER+SWp0L2FXUEZtR2QmInF0XkJVIyZfTnxjU0tHKF4rZnMlc0RqM3tRY2o9NltnPH1UKEk8Y3EpRGZpdENeNkpWWlUoYytRWDBdVHU3I0csPndzV2NjL1F5VUw+cT9CaCZ2KyM5YEZPZUlFPEllcE5UZktiSDoqLlNtZkUkfiE1OCNeajs1KXBibEYrYmdo''@;'; put 'put ''QzBFanMrbWZIeFh3X30yInVlTCQ7InIsX213OyJWV059clJCbXQjKT1AVHcoJn5EbD90eHtVejtFT2t2T1BnaXppViJWdV1Ed3oqUU5zNXo4NWNVaHpPcVY2U0w1Qz87SmE1amtrb04oLDNweXglJk1EeT5ZXnpgM0R8YSxsbVd1cyl8OnJ9bGQ6ZWl9NllKMFp0OWE7M3tJLyokVktHb2QzMmY2''@;'; put 'put ''TmImTXkxSVc3OCRAPihPfkJbcChxJXZWP35vMS5QUmpYWTlmUGtrQ2h7YT0+Y0k0JmM6JllAMjBVakJMWyttNjozS1hPOzhxakFGK0QlOzxtaUs7Nm93ZHJCTjchQytMVWE5NzROVm5LTlJWIUUjR084dFhmYUtnZ005bmomQGduN3VvMjpJRnQ9TXRQbGJiVUgoSiV0OCx2T2srK1p1NlRRTVFC''@;'; put 'put ''LnVKbThFeiMucD8oJmxUYExlWVJUUEtTbERGTVs/SyZnNyVjZ2xuTmxDO1tlMUk9bktIJm5+KkNxIn4ka1MzTF1DNiJ6ak5NQ3skekkuPFp2amZVMj19aHlUakQ2cz1KIn4zemhFamdmQSlxTUwzW0BJKFkxXlo0R11hOzZhPVNSTjBDVXpPODEiYExZNWlwZSk5eDwoPmVjckouYTNeSzo3UmJ4''@;'; put 'put ''KVp9OmtFUWcwbFUiTHYqPyVAPj9keU9JcGpbZC5wOWZ5UjlIXkF1eVA4aHp9WCV3S1tgIyNTKXhMKWo/aW16NSg8RCgyTkUjNCZDMiQrSXo8alBjIktIKHs9WXR0MS99SXZyXzk6U2YwVEgoL0x0e3goPCpKaSthQ1Y5OyN7fVVDSCFwIWxWYFl2QTFvIUUwXnZEX0ZeP2N9fEF0VWpkdlRPY2Jy''@;'; put 'put ''M0kjcUxuKiI/VUdLYS45ZlJQInlpODtCdWxlWEJmOVVnIXxDWExSK11seTRrRFgoYU1Iaio9eGQyMXVyUUdgJjIvWmxwL1pGXmNLZTZeZkc/WjlGRnhrWFNOPz13SlRRX3BeSGF1eiIsTU9fVkk2Z2pfWDFUP2pwKTY6b1gueG88fkQ4dnduaSwhJDosRClsb2c6dVdnRlguX2JiP25mX1taMjdE''@;'; put 'put ''PXpzTGhiV10yIVtMd1I6cj4jfjw6JHxjVGYrOkhQTTxOPUdCdVZ0YnJoW1RNTk99WyJrJG5tKXMhb0hZUXI+MVhTcTE1aXtFSkopKlpoU3Z2Six0NXRHTkl3JEViSHoyOVpaSFlNQ2gybkReWlNpI31NeUEuXURJJE9UYkJMIyl7UX1vL1ZHaC9PbV41VmpGVStFfk9ifk9CY3U6e3w0IiFidEVW''@;'; put 'put ''VCEvSn02Ii5vXnQiJUpIRyZ9bz5LLGp5bl5lSVJrdCV7NiNdVlhhZjRhUzo6XkJRXSkiUUNRK1heSEVrJSkxZ3NHMDkrKTVySUApKSQiL09iRTo3YThwaWthaTJCKWZ4YUVibnRdaHBxT0VxOmBFZF5LX1BRalUrIn5lQGVdP3shUkN6UTtnM2Q1LEx8Yz90aiZJVEMsTE4mQ2BDbTgxKSJwUjpe''@;'; put 'put ''Sjo4dnM4WEIoRyM0WC49T2A8Ol4rRVJIL110L1B+TmN1Y1Y3KSYsPmVXUkdtfj5RSkhnZ3hPZjMydHtlQWRmYmxfNHV0JltGTFtqS2BdS3wyZTd9NkFqQ3FiL0NYQHBibVZmaD9pUWBsWnZmLE9VMClPSm4ua0VmV2ZrWGpnSzFfVkx5akFJc0t7Vk5vSWYrKipvRH5pbltDTzN7cmNOcV9dRC5J''@;'; put 'put ''ZzdoeChnbltXfDVQMlJqSiI6KjhqcW5CRVEsaSklS1NBIjYkdkZtQFFlYnRpRzNALk5XclFQbV5jcGN9RjRlNDxWLHgyYjBAT2sicGdTKCUuRSkmU2t9aEk0Xm08WTBCeXZSQmZ7MlU1W2RUV3dBPyUhamVCd3ZfRz41UCt6TltFR1hFc1QhRHx0UzBlVWVWSTZUT0VlbWtVPD07XWgiJE5JOXAp''@;'; put 'put ''PFIuT0BZTGI3OilbJFFxUFcvfWVpVmxNVzVVMF1AKkBHdSFgWCt7TGY4eiVmUENzSnp6LmY3KHErXUhnJXVCWjNuRUdTSSpDUSIyellIVkRIYD8vdiNdRzs1UDQwXXp7X2NwbnFrVFEra2UvSUc3LzgyKXNwI3Redl45bChkVEtIVS5wdGJFXlRES2ZqOWwjWE1VXylyaigkXWFkaGVmW05XYnhN''@;'; put 'put ''In56clJ4fFgzeFEhODpqeFVxOCZjOjVtaEU9QyxsPUskSFBEdD96QWQ0RHEhUj5PWn4qWHdvOV9DYWpjXmlgTmt4UHp9Jjl+JUpfOkkxMTUrTVU1T0hQWkpxW2VefWpLXmgiUVlge1FwSnVsd2dJOm1iazxHVltFRHRJPXZKcCZwLHQ4JVd9OjchMWo6aWxdTTB+bGtZMCFOSGlod141P1U+YEg2''@;'; put 'put ''WFh1P1d8XytfcDg1SSQlVng9MjJhYXBKZGwwemIyLnZbaiUkNDhtcGpZK0p5c1J5KEJadF0hUFhJfTBNfFZqPk5dMyxjZ3JtMlZNeFsyMVczaXlRZCUuL2o1YzVNVShkR2tuL11Aa3U7I3IoPzIvVCxrOGAhSlpsXSFnQWw+ZjNNWXxRUEMoc00rPiNYYVJ7WTo6KyhDZjEuQmZEa3VHInh4Sjg8''@;'; put 'put ''R2Y+VyhkMFNlTjt7R1JeMHdhVndRdUVpOHVgPWBodjVhUypXSntTcW0hMnRMNWgsfj1bfGlYQS9vTEl4OCl2bXM6Z1ZHaS53PnZtRnJwd15MYH0jVCgheHtkciZ3WGxXaUV6MDBhR0dkcEEiQzBmUl0sWkc1fntFdGslTjN1WFNofnhMLlBdIVh+MUdgYTFaLEJEcEVYV2B2JH5te3M0KTN+WmJo''@;'; put 'put ''RUBveXdMflR3ZnU5ZiRzTTg5QmNyekhwbX1xbzwsQyJIVT48dHVPZUwxU2paXn42RnBdal9LTnlIKDZFQH19TD59VERrdCYwQiR8XkdjZXlIV3peak9uMXdhTzgrLj1tPFo8dEF+WVJNNWF6SGVTOFFDeCRHKFtPYzhQRUxxam9tTm1zUGQ7VXt+VHEhSSNiUFVYPSN4USFteyJXO3hsPFNBXjE7''@;'; put 'put ''aklKTVU7VDldW3hwIlFCdTAmTkNoRDUzNyE7fkF+fEZtQUFUcXh9aiZhe15xPzxpZTlLI1RkQFske356IlNzJnNOKCZBOEc1aGZqaWksTipjIXQ6PUR1eShtL3xOTGp6Ym55LCQvZFMlTF5nOmM2TE4+bWwrLHxbcnBPNSVOOik3W2EuMzQmNn12LHxEcFR6aDp4cDFeZU8pfXFELFplMXVmY31X''@;'; put 'put ''dX06OG1uQnV0LG4zNSFoLDlGYmF4VWpRVXxFQXFjRzM9UzlvUm86b2Z9d0N4NU8vPF4kYUNVcmYlZlIhQV83XzBNcDt9JH56LGx9Skp8Y1JtQnIwY0w4JjlKTm5XakkkdmMuZGw9IjF7ODNLViVNbGZSViNlUSVEbjFlVn1+YE5NM1VgXyshdkJaP3VrdSFkN3pwVkYhV0suNFNCcTVIKkIhSmQ1''@;'; put 'put ''OTBNQz42RzVPZTEjQn13eSFSeFAzP3xYdmsmVDdyWk88O0ckeVAyLnA7bVgua25JTj9gckNEXjlyYE8vNzRBXkM4aDtkZmlAfHFBXjppb3QqUWV6ODxnWiJQUyFCMURAO3QlZGRdJnUmd1FdV0heTkQwdjd7Rj4wNlhVYnEuLyt5cWwrYndCN2U9VVQ2XkhPKX56anAyaFBnXmY4OU5mNDszQn1Q''@;'; put 'put ''c2YuWVIqTG1oQEl4aW9aR3cwTlVwMUZFYTRXeWtlQjI+YzR6KD0+UERFanVbPkF0RCpTQ2ZaXmFGcEU0ZDQ1YjdwbXk3WGNuJXFPWmhpIzt0NigkQm9RMSwjKSQrZzxMRWY8bTVKXUNdQjZJY3VUIl1kNm4yKz5JenlWOWMjZTh5Lz90Pm11MCx6bmJoU301LC5AQVN6eVk+IVAxXWhjcWRIMENm''@;'; put 'put ''Wz4jei5RZiIlXkZ9Plk7ZVIsJlhhe3R+cFUlSjUueSt0ZjVwP19dIkA6My9JLzM5ODpaXm9nZzJCeUxTdGZiREx7Yl9pWTpBcVEvKz81RHYkJjpFSFFMKT5HZ3opcGpnTTByfG5gUVdxVXI0VHRBdUt0VnNAWDojaXN6bj05Lm1Be0w7OTY9NFlRQSIme0tUWUIwWlRsO0lBeFFeLClCZnwveXQ7''@;'; put 'put ''eTtDPH1AIXlCUkw0bHR4KEloeV0wOy9uJVozZTdnTSxTI0U7V0pVMls0fktLallGK1IyWGZWOVk/N148PG9RaikuXWZwI117aCYkYiU2UURJWTFmWWlIYTV3WCUuOnxQVDhIWWJbR3pKfGVkeEkpPWEpW1BfKC5KeUNndj94Kkw4ITpnaTw2IiJrRmZsfDJRK2BuYFZYKX52Z0l3UipxdjM/YV5R''@;'; put 'put ''V2NARUdCezBoU1RQY0dtOSlaOmt+KXM+QlI1KHNAbnZfLiFLZ2tIbmt5WH02WWlvSS9zTV8sZ3ssYHpDN30lWWFePEtLITlTM1tIMXdQKFFbbEhuOGxjfWZYQnIodHgqZ2d2XTU8cV46eUchNHZoYnozcHVDX0A6c2FGSElCPXQ/TWN6czJBPHslMmZ+NTFeKDNVREpUVUQjbHA/Uz9bNjZvelps''@;'; put 'put ''QyR4a18kS1ksTk51amszYipzbzlVQCF4VndvSHgrd0NHaXFdTnx3THxYdmFoQip7b3N9QmU9TjslUkxRLHt9IXp1U3s6KTp2XTsiWTEhU1NnKWt7S1JebFl7THR+WGNyWihFJk15Q2N4XWM6XU50W1djY1F4IUxMQDBIKjRWSSlKMHVXLFg5U19DRERLV3gqVTojQjBLRGh0JnJHeFJoazteLlYy''@;'; put 'put ''VGZ+N0QxJGxgWD5GXy9RbFt7d24iKVA3Jl5FXW08LjBTLzN+Vmg1VjQ4Qj5NMmpeNHpyP0hreU4sWDQhLkoiI0xPTFIsWz5tN0VgSigkNSkmIyFoZWtbRTk/UCM/alBTbF5VOk9uVDhsUmI4fkAzRUNdXmp8RmkuNl1uSmFJSTkzYk5OdDwzXlVGVWRfYn51UjF4Uj4leEVtaGFfSlVVcTNzVkVd''@;'; put 'put ''YXJge3lMOU5gLiVOaSVtYjFlOVhJRSlpPjFvW1BwaipvfnVxfiRATXchSSxVTFB0eS5RPjJLUmh0ZGdPc34xRF9UdDNTL3YwIyU5Ly8saFlhTWlYY3VZeSIkOCNpam5nbVg3Mm9MaWxrUVkyMiZNWl8wSUlpYXksZWgiei5uRl1SRip0Tj9feG5NLllYIjlafTlrTyxoUmwuQzBPTk91YiUoQ2p4''@;'; put 'put ''c2R1czZffVFvbns3TzxpcENwaDNYK3dvdEI1YD5hN01sQyFFJld8N356Z3AvL15XfDwlJlgoSkA+W1dqQyQ6eHk1M3gmNT1xMF5bUEpRbjtDPlIrMkgpSTNAJDpBXUJRUzN2PF4yVEdSMUk9UElIQFpAJlRiKXBtYXZYJVFlNTVHYmNLLyFtRihFY2RWU0d5X3h3UlBEN28qc0g8Rmg0Jml8XlhF''@;'; put 'put ''K1A2d0pQPSNwWmswL3lROnY6dGxQXklzbmM+M1JFbnA5NzF8P05vfTRIZzVZSXd2Vjo1K0poSTgrYX5jdV00QVpbcWJNTVUpdD1zX2l9cjJ8S3xqVT9jLnVCRSQ9KlFGJFJMbFkzOChMbVtdcjguaT95cUI3bmQpKHhsU3VZJjdNTmdoIU1ydHxpa0I1JFdVaTFjemZ7XW44TG0wY115TlMsdGVq''@;'; put 'put ''PnA4UEtaX3phPiNtSWE8PSU2RHBzTkg9bygrVlp8dU1RSXdSKWFJby5gUGlkRUNGNiNyWCEvXihfKmt+Xn5WRnhifmNaOXNHbHciPmBhXkJjaWIsKiw8dTl9LzwvQl5iLDZIVDQjRmhQXnplcFtsYEsxfikyRX5JQmlVYXsyOHIlckBeOD1bOzhjdjUwVCUkek4hUVQkbGR2V2V7UCVhLkt3SSsr''@;'; put 'put ''JVJsXkZaXnZnMCt4PUl5bHdBbmMlfltnUHl7QyUxOn5XNXtrel9pKzYuRlBqPG5VXy5PU2VRdHJ9JXllZn5yPTFwezVudTQ9P3kiL2lZXWwweXMkTG1fWlhtIUh7d3A1I1RMMW5Ec3g8Py5pPT96YHB9byphdEVMPypxMXZEYFhYLytFKVc3OXtHVVhXU19ecmsvNVo/XzUmSXwmL1JlQSh3bHJ4''@;'; put 'put ''cTMvVUNVJjpaWzFSdTcxTiJiaCRkeHxSc00sPnglcnlseHhxOyZnekoiVXZhUTNZfDtvPyNnZTxPeDYvQDN0T1p7UzcqPF0xLzFWTzRoZC5hPXgxc3NUJD15Xy9FM1UpV2xHPU5TTGxKVzd3YE8rfWckMnldan14amdFa3U4bzpgMDRUZz9uKVUqIWIwaD4kMyk8WCh2YHR8blR7PEVyRXlGY0I5''@;'; put 'put ''cDNsNHozUmpXZDdbbGtXXkwjQmtVM2plQEdRVDtWcUZidzt4OStCcXFYaFt2ZmIvbls8NCZSQVRfdigrKy9jODFZKlBMbkZEQmxJSGtmXkkodUlvbT8keyElbSY+ZjBoYU1IKzVRTU1Qdmhsd0FiOkY6cHMhNXQoRSJXYENHNWJoX1Bbfn01P0IjRT08dC93MzRHNkRAP2s9R2ZtY0tNYDQ5WCZO''@;'; put 'put ''a20+RnFsQjtULD1yR2EkWHIjUFdJQl0hLmZIbVl+IXt9UFJTXkdUT1JoN195Xi5yJT9gI3ZUezBYbzNPZ3ozMXM+RTBfVTl4eHdyL2EqT1FSTDZ6TXpLJE1+UilSZXp9QDhwVTA/U3NuVmIzNixdflExcH43RVZxUDhSIkc7dmc3ZX0pO3FQO1EqJjpMSSZSKWMwT257WHk7bFJXJUZhUXc1dlho''@;'; put 'put ''aVVAaC5JamZvP1BLOmZSZHFANEVtcHBaa1RIT1dhPWJJZzxNPH06OXtKcy5YbikmI2BWUWJXTzgqdF9FLmxPTCxLeWsjcldtXWxiK15PdGMzNk0rbG1jYlEwPXgmakB9W2IhTSFgQE8mKWghJGo5a1g/XSh4Xjp5QkVnamxGK1VfQ31TKCRQNklSME9IamJwSUtzSUVpLGBTbS5oYF5RNjZkTFBW''@;'; put 'put ''UltGV1tZNFk6dmtCTTV+WCQpezt8ZHxmbTV3O3ZsOEF1NHxEcDk0djo8UEYzOlUpQGdMRikucV85JipXcCh+cVF3NWgqSkBKMm5QISMrOkJtTylnN1dmdGZzLGVmND9zYWhvdVYkNmt8TXhRK1lWaUpCSyZbaVZ9W3h4bnk0WzlPNX5YQSVXMTUmVCxNUWIvVTZjXyZQfiN3YEJYW3A+YF4wX1Q2''@;'; put 'put ''RDEsdEtZd2JFW2t0Q3NvYFVUeENNQUo7RnVVWkkwNWVkPWxkNX1kJFtGPzhfNiU1fkVAd0tJJUZBOEY9R3NodGYuZnlnSH4oNHEzUV0+JDJsTTVOMURZenhJZTEsODg8I28lUS5OamMyYW9qVnBlUGNILno0SUVsQldlWEBuTDVbTVpicSVJLmB6MTx4I0BFMCNyYWV5XzZtZH4ySHdTcnB9SiZG''@;'; put 'put ''QGtWK2hrcUw/WmZTTD0lezVUMUdtZ29KaGFERz1oPztSI3oqVlo0N1p0YU9iPENLI1ZJLFF5NzFdRCZHMT1SSlNAblI9fWxoaE0yMCFfIyR3VEZnRlpjJSYuJH1HSns4ZVJETyV6WEAuQF52SzA2NmRvP2QsRk59NWBGJGZPM2k1dy5hJD10YGNKJGB8bV48WUkiWDRAOT95dVklanl8dEZ4UXh0''@;'; put 'put ''K3l7TTtsNz8oWVlRaGltXjZvOkdYaHcrTmsqT2NTST8oa2pYMnVSUCJVVzpjcD83UDA5djpCNlBjLktJR0haXz1TUnl6U0csJjN0QDliZSJjdW9UKl0pU2Q1UDJXOGBdc0oqaSxdNGxORTlVJVslcWVjSi5qIjxdaV1SYiFbQnEsTmQ8RSJIejwsJj0wV2s7TioqSDE6OnxFKFhUbzQqfFtrYjRp''@;'; put 'put ''b1E6WktLSmRJdSh3cjooYXVCPEZMVlVHPnt1OlRLe3IxKlheOUYpKyF4RkdPb3tRO01dQ2JdLitVP0lRTURSaXojam4/aGUrMVMlNi8sVWw2WGQ3PXwiW086cjkmRyFFNEI9cyI0QTB3UEVmOiR3RmY8SyZReEhjUU5rOkkqT1dsYXFIcmdUT0Yseyl2P1ZWRjpEcDsrNzYyWSs3QU9sKkpHMnxn''@;'; put 'put ''X3E7LmFkIXRZW19hRHdXQjJ0Xks4aEB4VW9bd0R0Pjhac1IobV5KITpycz5wd3V2fWUhSj9kfiRfSkYlb0Z0fCRNUWA0MlYwRWhUSD0mVlUmVStaVkd4UFlTcXA0S1ZAS3JzbXFDZC89XyQjaClsWVlZVnVMR3M7WnBAQGZ7KUpIKkhCakVqSEZMJjo1eD99ZUk2ZXs4TmpFY3RidV1CbzVDdSEy''@;'; put 'put ''UUkmMTUoV11+PyZtNkohQiI+U0o1WXldflVFKkZbeDd9bSMvLHVNdWRmZEloU0ZDI2xqQ0FCcUtnPjN+PjFwU150R0NZQ2tyTURUeXFedCJqZ2hOR0MyRWVRMCMmekRnRTx3dXQ6QkxWXlBdJU45KlNYbihwVXU1Rj9MNjNtNntwUk0vcm5mbXBPdkRPRS5rSDt+eTA9XT1WWjEvbVRAU0B0eEhh''@;'; put 'put ''X18kTz0rcDQhTjVpdEk2MXd4aSV2W3IiQTxLOXN1eiJzPkVSaVEiZ1spQHJPRD56YiNAN30vMm1lam94Nng2dismLDhzV05lbmk0QCw7XiQjPyFJe1Y8RGEqY05ocDd9NExJdFB7PyVnbGBFNjJdfGlpZktzQmokIkkhbEdaXXtuVXwiPnY9LGRgKWJVdnRtK0M+eU5PQFVhSDpdJWw5JG8sQzY/''@;'; put 'put ''ZyxuSz9EQD9jLl48e0wiUTlOOzQrel5HTFByYVhJVXUiZ1Mpb2MqfGY6Vl1bX08vQVQlMy8uQ2F7NzksKW1TWFVPbiZJezF6aFdxdWhiOjhVbHxWU000aTB6YzE7VW8hOChJVE4ucElUOXlNdHlXVTApRnczKztbVzxFbnVkSVZXdVYvcjVHYFVyOj40S09FN2RGNH1FI1BweCVMXVA6KkBJU3Ui''@;'; put 'put ''TGZgODxlUiZWeFVqcDlQKkhINV44MitCa2YjeUIkMG47WUE1PnM3OSNPXnc5MzRgUjlwdmIoMz9GXTlYPThrMih8SlUwImpzWHhxbmRJTUFwQzZNY0lqSyY1ZixISDtGcTd3T2hXWjc8JT02X1Z1ZCs7O2lnW352I3leSkY6cyNIOTpgJEN1cm5GbENxMVArVk1bI01VQz9VJDVTMlprTTQhdUUp''@;'; put 'put ''SjQvLExHTFIvUlBCTVo5dnVJIURINXNYMjVXLzskRWwjR0U7X3MxQ31tVU14THx5ZmlgSjc+SG1XZixWVmsmeztqQE1jVj1Cbz1gUilmOyt4WShrYjlrbDUzXVhkKzo5PU5QI0s/eX1YQE9bS2JsR18se0xdcGhbfSpdTV1acktwPiVpbDRTNSxNeXIwYCNDXj5yOjtXX2MmVjJ3OH5uM3cpLj9r''@;'; put 'put ''QDJYME9VXS4zaj1DKD5Nbk8wOVQxQWNzK0M7IUJOR2FQZGx4Knk2bXVIV0EjfXR+fGhUPyNMJUZWIUB1MCl3YFdVbnJPfFQzLzhjbVIxd0lAUmxtTSFrOmIiMl9Uc1p3dkA5SlFYYVJCaFgyMChtQWlVMFZQSXdqOiVfaXBaUigkczdgUjJYXSojY00kdkY7Ln1oKTJOc0d6dEJtZVs0S2lgW3VZ''@;'; put 'put ''M1teemlNNzFDOVtjUyxRe1FHdHEhJTQ5fFgyViJzdmZdM1skOGVPfiU8QEFSWXhRc2lqQGY1ZDAsUX5HV11JaChAO1ZaUSMxIWZXLyJDWlEsRmtUMyxfSUVmRlQkP0tkYjFqIW98VWtvbnF+fFBIdTZDXit5dDZqQz9ZTEd2P0lHdCsqKVEvSHEvYDQ+XnlqXzo4YEoiY2Z1UDpDPVdGTF9KZWd+''@;'; put 'put ''SlNzWEJrIWxJaWhAbjVWdiw7U3JXQnE2LHVwXWA8a2dqKC9oR3d5RnNzd2lXZUB7TTAuY2EkSyQmPS9hO2FeK3Z4dG1wdGovd2IkQml+eSwxUTsyYERxKUw6R1cve1R3aUZVMHhrJmRBM3puZl9AOT5nLEAhRVlOK3YmUU1aL0tmQGI1InFmRWZuSS9eK0NlYml4TjhwVEBzQ1oua20rTVA0d09D''@;'; put 'put ''ez9FdEhYTTpjIWksZyRaUUk4a2RIc04rMTA9aHxrOjF5aS9PWzZlIUVIdC9ZZE5UU1ZzMGQ3fVFCSVI5a2FHJWBYbmJnRHlnRCVSYnh3QG4oNz5XTlA5MX1UeXNUMH4qfk5sWlEzNnIrSmBwOXVqZC5pZVpTZTJIM2olSj9SflBXdEN5bSNjNyRFJXV5LyNAWStzb0deVFUoVVtOOG5pISFbZWUz''@;'; put 'put ''SVUkIjM5TXhCT2VWUzRJO2V4OyM0In18NTxsSzpMRWZROCtyVjU+QzhAQ1ZmMyxTPmNhfCF2NyU1dk9xMyF3YyJ1WXNNWD5JM2x1TWEhMT9IaVBZPyh9SG8lXyhhPUxNSGRkLytpY3spXU4mP0c6IUI6Vih4Mko/NU1zQWYlKEtdfjJ1RzpHPnwmciprUGNLaEUrPngsQzx0ZzdsZnNRdzlFZXZt''@;'; put 'put ''WEtCRlY8Wl48Z0VGKyp2e2NTZCFYODE/cWFBVylaWyhpc1tlZyY0N2BqbiJ3NWo4ZmhlaXImNjNRSkJqWCg4VSZAK1tlJnpkZS9yPlZ2T196ait8REZfbzsuYXMjKmJHRiN8c0taNTxbbUB7SXJBUkM9TkNXSjZ0YykyckFtTmR5aFokTk1GNCpwTmJAUHFEU3dPX2IyNyM0LDtecFFmdnlhLklT''@;'; put 'put ''RDpuT24rKFt9I3pJfTouSGguKXIoSywqKiRjd1F6ak4qUiJhOUhANkUjU0hrN2ciUlVGQ013cUlgPDJEYDl5JEhne30uXkt6QUIqPnpjUyt9IjZlIXd4PD1gbF9wN3JZKVI2V10jMEouRXdzcXxqUl92LmBIdz4qdDQqLlp1UyxRNC57XSIjYy9wP3VHVTV0Z3ZGX2IjTF9EXWEzI2NEQkZyQDw6''@;'; put 'put ''OCFmUEVERDZ9cDciSiFmPDlCOT1ZeH1bfmIlJGUsNiFWW0sqPk1mVEB0dDREeSp5MGlAXTF3V2w0I2ovWy5dZnR+PllPaWgsQX1qJSg4KT42Rn13UzRaLyNMUzpPbSgvZiNPJl8weGFBfV1yPyRQSXZWNyVHS3cwPTtfemF3O0xYfigxLzg3aFEjbnIvQkNeeTB9cXN5cygiJmwqWEErLGopcExA''@;'; put 'put ''Tnp8dj9CN1JbNkEpLDsiKypvcntWQE4+eyNJZDRncWNmIihUbG4vTyVlXXBIeX1LWHhIamM+JFkyJTRIanNxXXJMPldpMF5ZZVZgPGp4fX0uOlhwNDUpeHNiUzdlO0BhamN6WHMxaEVHIntgeX19ISo/ZUlKdG5iak4vKF1tTSZBfT1YUUAyUVI5Q358V1hjSU08TzsjS3RCQ203ZllpfkhXT0xQ''@;'; put 'put ''TFp3MnhENVdTWGMhLHZ2LHhMQzVvaWROOWRXT25UOVEkNVsxXUVqNG84UHpAd11MU2B3TGcrazA3aFVdJiNeOVF6fjUvZ0AzalpQQ34pUUhuKj4vbDB6Qk1NaEk0ODpxOjNfUVMuLj5lTDtWVjhMS2xbV3wsXX5ye3ppTEEhTDA3QlZNZExoXm5VMUFYcVRMOjZpREpXIi5YYWhERXlOcVpOfFFz''@;'; put 'put ''NSI+b1UmREs1eHI0QFlXU1hVdzk7Jjx+TWM4aH1wWjt5dDNTe11mPyMhK3xZTHwpMGdsIikkZE5rJjUxNiwjTUQrOXFEfVhSaTNreH5PNms2O2c1YnBxWUM9QCp0KD5Vej1eV3glc2E0ZEpLMzxRZkAvKTNPV0kzd2NRJjZMK0I8eS92elNnOnFgYzw5cF89Q2BRYDdXVFRPeXh5ciFtWmh5Zjxg''@;'; put 'put ''WU98dW1tJV0lZjFFcVBobk10SExrWWZ3JSshTTQkZXw6WjN6cz8wd0oqZV5CKlptdHU5bXI7dHckRTAkRU5sUGIzRThXN29jX3t6Y2M3b0V+VSxxN1M5REZhYnNfRSlmOyh5JWFGdVBkKWU+JVgpZ1JLZVNUY1U4OWQqfTNlLztOZ1crcyhHOiYuRF8wcT57KlViejA4JSVDciMkZiswPiJ6Mz9N''@;'; put 'put ''WyJvTmN2Vi9GQjE3UHF2Uz5tbHx8SlhxVitQc09ZXyklMFYzTVUpS1RbeVlHckNRaW1sYygwN1AxZG8jLCI4S2Bvb0ZMTEQ8TFp9d1d8bDk0NXg8Y11qL00kSXtgSH1UdjZjJGx3YGFrZVtsR2hMbl9VKGdXZyQyS0o7UjV+VzZ+Y2MiIU9TWmhVdE9RdmdoNmx9USsyOCQ/QSpZT2U9KElVWlFg''@;'; put 'put ''KlsxfjhFNlJzd29YL2Q3THw3IzpmR3BzP1NUZGZ2UDZTQHQ0YF8xMVt0RE1JR1RlUnRnJWBRMFZVMXx7RnZUVXJ8dnk8Tk5BXj4jSD1yI1U4Ll8pS257KW0/QHc2IzNlbkpeZ0pgdVBbc2BXeUsxQFJJQVk+U14jJlYmen1pST5nYD9aYGVYeklfNHMxKWd0TUo8K2RgYms0WVJrPixhfW1uVXxd''@;'; put 'put ''eltPZmEjUVF8b34uOll1dGg+eXB7IltmJD5KdFB5bHdjRitafHgxJil9emFkVylRY10pSSJtMysrRUt3a2JGZjxjb1EmeF1zR31rVk9kdiRUSzg2VFUmcWptU0lTTmdCIiRSMjQrYzdbX1kqOV9GKF1fNF16P0kjeFk3LHAwYz9FPnhWMllTS1N7eE1gQmlyQGIpeytvO0J+YXoyP2tIZEgiXVYp''@;'; put 'put ''K189NDV3VnJUJlNgPnhXU182OHFKYDRyPnZHNDJwQjdhd2xMNitQaVFxe3gpKnlxZDYsY1Jtd21TUG06JDxtL30+dy87Tmc4aWlaPm4vWU8kKnpETFR0eWFNSXZaLGVtdF9qQlEvbldnRG0xK2hnUDdyNmswWF9xWzUxXzAvY0gxITZeJlA8biFoa0QubUJid3QvaX05TX4hS21TaS83fDMrRCNx''@;'; put 'put ''NkI+KntlInN1cENhKE1ddCt5M28mQlJMPHlKM3ZrUntidWJhN2JhSGxbalt4JTFteVp+cXZAQzR6dSNGXlFrcHFBcTAlVjB1NEM6Qixnd3RSWnQwenxfYXJNaWlDM1hAW307NWsxQlQ3R3x6QC8rPTNrWHJ5cWQ4ITMkUUkpPHk/Lmg3LCFjeUxWZjY1LkA3cDVzX2UvI3M4XjFUVmR6I3AyIm01''@;'; put 'put ''TF9RSHcqXmBQMCZUXVI6MWYpL2AjcHEvW3lTITU/LndodGNVQTxzbFRSYlRtaUpIbSMwc3BnLi83RWxOKS8hMX1ncCRlLk1CPm00VzZaMzh8Pl8pcCtGXzEhaHIhN3I/NT9VeiQqdnE4TyY4Pk5pPF5+Zm1xbUxPb217I2spSWZffT9yc0czaXFbZiZaPmZEeipwamJ2VUhbRHtCXT1XVyFPWi5Z''@;'; put 'put ''WHAoN0JWeHFOR0NAPn5rKF1WfSRnfCltd2g/X3NeeSM/OzF6bUh9RVVkYG5oWi9yXU5IWCgsP0Q1QlUvJUo3T0ZaWTRSaG8sPiY0T3I/flpMZ0JoMyZTM0xUTC5SZUlEP2UjMiYoeiFdPmRBOnczZnxNaDx1L355d05GVWd9TztHSTJRSmAuSHEkM21PUHZvdV8jSkRRJHtMfiYlWX0xWWN7eilu''@;'; put 'put ''TWM3ampkait4MmE/UFN3UXR1XzoqamglMHp8PXVWJXx8YEpSQXsuKTRhRGBSIXchUiF4MmxLXVB8PiV7NzdSX1ArVkNBbmRgI0suSzJaIVFASnxfRDxYfT42QjMueXtGODY8WzZ1WkJ+bm9AQFM+TDZ5IzJuTClFNEl5XVQ7VCUkV0diZUomZGNYN19vQX5+V246WnNVNnU0OXF0YFMiSV4hKGE5''@;'; put 'put ''V2M4K1UsMGRmRF0rPjpYRERuTmo/PFdMME1JbFovVXdjSVd0M0NbX3xZOntreitmMEgoZ1J3cUU2fmsuSXJIc2dzQ0p3SXxMYT5ndXtoMnxEWys6R358KmQ+QVUjV28+JT5eU0BjQ1M2OHJ3KDpieytTfH5VRkhPSSNHIl82PkZAdkssIzI9YURuVGtVL0hmcExYc25TZ1JSVT5GSU9pW35oWj8u''@;'; put 'put ''LjNMPExrI2lePS58UnZdKWlhV3dCIlFHfEhlXXw4WzVeSF56XXlOUjFnSngkJFA6Pm5sJmB3K2NEPiZQKzFAQjN2ZlpOKV5RbHhsKlJ3NWddXyRzZTFvZE8jT0NYal96KEtWdjJAbDx8QWN9cldTZmojJkpbVDVhOVRbPEJ4Pk5vK29tVFNgK1pCWTJBI2tjMy5LT2NeJGJlOlV8O30uTEd3eFtK''@;'; put 'put ''MCU5Xl0iKnpDSmxOZjhoV2QofDcsJGZubm5Cblk/bXQxNl9UOit1YC8vV3JFS3lTQVl0JnQpa2xxMiVgRDZ1ZWVmcVRjWFZ3QlBeK0ssdWFTSXwpV1NuJiJEUFBBeT1sTi9oMz5kU0k3NVdOcEJmTj1CLmZvSm9GazdaMlkvciEkTkxeKT9Yb1NkKVBdXmQxMHcjYyRsdDpCYmpAeW4lKHNZOEkj''@;'; put 'put ''dEc0aEltJUB5YzsvZHNiNSQqKilMXVomTEcjVG8iLyw2a0A+ITF5RnpReiZ5diFibUAmOlNYXzAhPitJSms6PG1qZTYrSigqLnlALkZUNzVhM04sfGh9RkY0c05kLnNNd1ZCRV83WzBzRzJwME9edTBHQFIyUFA8bnM7LCF5djAjTUFxTTw0cS55clU3WEBGYVRldUYvbCFrckJ5WStjdFViI0NS''@;'; put 'put ''Jj5bayJnbjlbPyppJD5BV3RCXnU2OEg/dVtsKDxmcUQyPV1OU2picyxdV2VGLmN8RTBvcGFzWTl6V2U/TWBVIlRkTGp1OWNHQkVhTmxuanR1czBVTTxQS1c3SF4zNy5oN1FdezBkcCE4VnkqZm4lST1hanFyTzZ6IX1TKDZAVVNXe3NsbX4xbTRGeCM0JFZrZiFQb2FSN3dnJFFsOzRwPCRZJXQu''@;'; put 'put ''bVVOQDQhUHpgaDJfeEZmU2ElNjIzIW5tcyl+MCJdW0k6T2RUVC9yQ28hKyx4LDVMdDc/I0czQXh3d2RUaz9YSH5JXmpkfVQ/fEV4WzBJMjozdVhVbEMwZiVRcjQ5JXx6PDUjcUR7emoxaEciZUVscTpkXXQ/aUZgNjtWRCJxZlNAZkszdlF0dDc3bWBbQ25qKC5XNyhnOiZHR202biJEOSRWLEVO''@;'; put 'put ''UFoyKFlYYTkkV089W0Q7diIhc2xpemFZI0k0Tyl7aSpUOyJUNEA2MH08QU1xYCMsYWVfOXVsZyspTDxbaGkweHE8QygzVmExel9+RHh3RyxPYn1XP3RUWCQhSFMhXXVFbSIjTUUpblkqOylTLzQ4P19CMlZdXSx7cnRsby5qYDszP1lOWk9VRm1TI3RlaSFDVUt5W1lnLD1PbnJockYleFU8YmRR''@;'; put 'put ''Umg7XXdyJXZIX2lXUSU7VClvYnN0S19iU3dDT2E6b3NxcDA8VjFubnEoZVRgODBaRkRffiw0Q1hqLzR8MzsiczsrQV5WOyRbP15rdDhBNm1GciEkcH16PSs/KTk2Yl9gflsmV2FxSmh+YXlXO35CKGBuayF8Ii9XOz9bSE0sakl9O2k6R0hSbzM6WXQyTURkdVpJTCElMXRWMkNKTUlSUTV7IX17''@;'; put 'put ''azRxaiVeW1c9RSI7byZ9fC5qPGxwbG5vMlJlSmB8cWxfNUdVTnE7Nmw4RHtUOVEha1tlYldrK2dAclNIKlUlNTA8cD59NW45bWRobml+SSw8WV8rVmM2OFZTcUZpRz1vTGwuITh3Tzk7eFBAdCZwU1FFYFdLTmEoSEY5ZVRmK1MyX2NML01VOyJgeWdZRTpJR1BjTHlFcTZDcHRMZlY2ImkkfXQm''@;'; put 'put ''S09rfWVwNVdSTnkofG04fnhtcCE9Qn1Fe2Q4Ykd6OyI3bXx6c045TTZBUF9INVFIRSheYn0vZmQqLzkvW1YpZ0ZNd0RkMSt6XVRMayN4NHh5MyYjb28mImZ7RlFYQkZzaXNuPUdOZyhdOVY5Z2ZWWkJ8ZHpBc3RCQ0x3Lzd0fmRARl1wRT9JXTw/bHI4Ymd3eWorb1cvXTUzRCksbG5SSnw0JX5K''@;'; put 'put ''QiFyKno8bzYsWzhpRUgoTjYqK2xnakJoSHQ5ZzlnZSpURnw9alI7dVluL3x8Omp6QHR9WTFiQDQyJmNXaVkwLytvdDBYZmxDbEBtL3M5TW4vW3d0cHsqMHUkN0J9QV94WzRva1MkJjEyMDIjeGw7VSoyKHlMMy51U2A2ZnVCQix6TzcvejBvPGhROj50ZUs1MTcsKkgyWyVkXSI7OGQ8PHBlIXxo''@;'; put 'put ''KUkwR3FaYzNjWG9saiRwbE8zO3EzVCpxYzl2UEtOMnx6fCtZOlJxOzghUURTSXR6MHwofmtuSnxASTpucTI6RTZBcCNZRCZSZkZuSEddVk0qTFApeXc/WGFuOkBHW3RoImZFKF9jLCVyTFZdTnNhRCt9dnNVUDgjdF98aDMmQyZmS11jPV93bEQhNlUsL0JXbzAsan5xQm13Ims2NGRGLHx3e0Fy''@;'; put 'put ''eX5RNytZLHFbVjFuUk5BK2Y8Y116bmxUZlFWRTBkOmFve2p5PixxbCUqYUNyQ240JHFWI2FuKWdyIztsTVAsfSVvJGluQVdvVXJ9YkBxXnlzdkkyWXVfW0VBWy9ULlZKS1k9WkdZSzhbenpUfSFUViJOQjhvQG9vWVtkbl5wYHw1bUYqW3Vub28kSyNddXVPRjd0KFNGaDtiaiZFY1tbTUNbfiZn''@;'; put 'put ''RCV8RWsuV155X20wQDpgej0jPGZIfCYsNztvUWIjbj5YIVNNWyJVfVJuKDZCVWtScS9bd1VgW09DU2V0OSovdWEkRmZtLGp8RmJpTl4qX1Jwdko9emJnYUpsQ2dRdUw/VWdpfFFnN31GfU42cCEiRUFtNC4xZGs/c2o8Rjw/Y1lHNmZVaFVERGUqVlZEVSZyeX0+VytrfD5wLyF8LHUsdHExUDhh''@;'; put 'put ''TDpdOHtNantvUl90Xj5QczxgWXReZnUsaXN7c0BeW21Va01zfEpKVnEmWj11fUBHNzRCL04wI11GYSY+PnBdO25nU0k9bmchP1FLUSx6UGAmWVsjWGZDcmk5LnMzQDhOcn43aSEvdnl0ISxiMU9yYio9UVtNJVgkNUJRRz91YUcpaUB9Xms8MyEpKzgxcHhbQ1NMZX5gd0NRdUV+RF1UW3spVih9''@;'; put 'put ''I1RlQk1Vb2o6UltDMUQmWkQiT0YsRWhfOm1FSWFSb1lfXnY5eFhaVXEpcmp8Ok1nLCN5JDlHIj56W3YuPDFBT0VUZnQ8YG9Wb2VlZCswZkI2VzdnfE9XczExPzNzT05AQnppVTQ2VzlpcUJwdCI6TmhlWj1SKFhDMGVyfGFVPCxoOX08flVuWGM+bHxXKCFYXkBFTVRaOEdnZT1sTkI7IlB0dEhl''@;'; put 'put ''ZjQ1ZWBvYHg7NiJbM1I+ZGFNR3JITE59YTZTPHJfZUZsalsmb2FRPHdlTiYvc0w/bHFhaU80ayRYVlF+LH1sKWMqOEdDI1dQa1ZKcHQhQnROQDR8fFR6VT8hanVJdDhxQ3xaLyQuWVpjZ3Q6P2hpKGpdQWQ/Vy9TW2lFMFMkM09FMXI3aTdAcDpfR3E6dStWI1pUTjQ2KCNSU34zZS9heGtqcnti''@;'; put 'put ''SFRYeE4xOH1hWWpubHNnNVF8JjFFfCUhUDVYOnxIP3MqRVh6V0coS3pEdmNtTGk/dlYlMEBgMERoMTpSLktsNDFkUDUhKHU7YTJXSkEpWnRXOCN2VGs5RlNnSk1rUUI3TGchW1R0NkkjTjxKNSZxcyx9cztfS0hCSHAra3lER1dCdnwqYXVEJnpfMy9pWlMlPXRLWkZDOGtIPXhCSil5dVVuSS4o''@;'; put 'put ''JF9Lc1cwIkBpbU5KfDhhVC4zfT1kSCZHMWRDdiVsfHdNPiNoM01scHBzYEs/QVBLN2R2Y2g3eU4lY0sxZX51NTEobjxPQVdzbGtuNWR4VlRFLjAzSVpbSCJfMDoyYi8yMkpUKUFUUEhQaXQhaDRYPjwhJU1IRSg/a0BrcWhXRikkTFg1WC4oIUJ+O2ZMfmVLbXlGLCZFem8xJGdAYEIzLnQkTzci''@;'; put 'put ''aU5OaHZUOzFmWW0yLCJAWVIuWkw9aWhuSnFASjZZQFl2RD8iPX4sR2VjPE5LekU+cTd2LFtoI1JLX35MY0Z2eFo9WUddb2AoWEJgKmZtMyszWilZWHlNJDg/P1hgRlh0eTp5QFYmaG9Sb056JHpIeDgjPVFYSCImWyteMT5QbDklfWNGcHhXQls1JV1yWyZSdkhMXXpCPSM5IjhnUmwrYjpPdSls''@;'; put 'put ''eEtUXXVvPDBYXUtxZCJdYSMxV1BiVis+P0BhfSZRMyFTMVI1RThofmNPVUlKaVJsKl4mVjlbdzZdd3FCKyt1bkZVeERbS3BrSzRIPiU0fURBOitPJSgzRDVQcmpoc1RlRE9xQFYjfG1nY1lrY1V8Qml4ZmJhSysvaWJaOFlxR2haUV0/RDZ8LjNtQltMYEU6YWldYjpFOnYvQD1gbEkwIT1UJjl+''@;'; put 'put ''QjhPWlZMPjZXI3cvdj5RSU4zX2U7TyU4OlJibiQ5VyV5OmB4NShDMmBgTyNTW0JFYHh5JiFNbz9LVjV5W1ddbz1rMCQrPzl0JHhwSjQ0ZWZqRUY6PUkyJFAwbD9xcXdmZUQ5KjJ5WGs9LyhRZD1RP3J8X0YsJGd8PX0zUGN9ci5URT1ueTYlKFVzXlE3LDBhUk5ud0QmSkk4WnxrV1s5fl5SdzN+''@;'; put 'put ''P2I/ZSRRQ0pfS3IuK2RdZHV1fDlII3Q6K0l1SHdeNS5ddURmQVk/PCtyJUJaUHteQD1lM1BfbWdfZGxtXilrZWtZUlJmSUFfbkc3TUo1eitPPTY6cltITGpFc14+fTpkW1YjL1difTR6NEsmNEFpWDE9SGtUPWpeQ1QsMjxqJGs+QzJNMFlXPSNVK2NTJlt8N1loe0FXWFV5QkJVW2UqMXlrRTJo''@;'; put 'put ''TE9FM052NTtCXSJBZm40KTp8PSpAWE5ULk1Acls6WCJCQ3NKOmFOeHBKenN+ZTYpLls2NSYkOW4pJVB1WTlqM0oyRm1YQ2NOdE1FQXtRfEQ4Wip4Ujx5YnJFciE3VkdHOSRiVlMwMCpoYXBIMmI0fEhJbXN+anBIIitwTzV6MUlyTF9Pc3JYXTAlTG01RztnL1J2e1Uzbnk6Y28zfUB+QFslZzpV''@;'; put 'put ''PCZvZnFRMldoYUdaK2V9N1NZc2B+fUYmYSM9QkkjTFQhY1RYXz5qLz5ycUwpSkRQU31JS1dZOn19YUUuTnZqNyhmJTlaWWFabEVxPW4jayEpI1pxTDRNZUNOe2tDY1UmLERyam5KenVCO2NmJCxocWY8Vz9DMEt6X0RrbH5vP246QzwhXyNQakNHZSpTTHFOfXMhRChFPDpZYjVhb2E6I3k2Jm17''@;'; put 'put ''OVN3OzFFaFQpPXVNRHdnbnw0JUo0LzspQXV1IUpAe0MzeThZXmdEMXx0VHhHVGVQdGR4PzVDVTlIemIpI1tSaD1wRn5bMWVeMk42ejpzPDdDY2I7YihoRmZ8XnZAfG1rP0ZaSlY2RXtAb190bjYmd1t4PGcrK1loPWhNUzhLb0duN3IlM157JTxHeGw9IWJ9VGwySXVAUV9dZTJILk1rcGpzKE96''@;'; put 'put ''Ik5STi5JY0swWT5FdUIqQzA9eHdwbz9WO2QraCM/NFl1Xjs+NSxwSTdIQHlOKjd3OmBGRHtvWjFnKGQ9cSl6fGZCZzNCQVBteU52InI4LD5+Zmw+RHE4TmoveyxfRz8/LjBbRlppWk55d2syNj9OallUN34qd3Q8Q3Bwb241eF9AOGZOYz12Nyo1WUVOQ1NxLyRKNSlOWSwoaEc5MVcieDpxViFf''@;'; put 'put ''IWM2WDhPRzBnZCRHVjRDWVVoWXdqaWIpMFtXZGgpWUVIJEMoJVheZ1tZKDFCSGdGZktXbElsKmF8TiF1d2AkSDN6bn1TLmN1ZyI5b01RcDpxbW1UckZpdWsmdlMlJmNeQk04I20mcW9WR1BRc3QkUnIoa0d3PzVqIyMybGNxeUh0Ujd9en1fOTZSTX44QmkrNlk7IX5RZzBVey56RkA5UHZfSEU7''@;'; put 'put ''JkxoRTEzdl1TeDR5ZW4jJnlhXjNAVD9wVF1IazZSYFtrIzh8cEplWGNSKnk2cTdHSkJ1WkIkfkdtW2xZfGB3RDJmPjBkOD1yUHBCY3BZNldyMVh1e1gobzZUPWJEVm1TRVRlZWE7eiJ4ZmRXTX5uOiZ1IzQ6YHluY3c8TWNxJUZDUypEM3skJG9jaiMjJEZAT0MhNTg3RkJjcDYpZixeKEA0e29f''@;'; put 'put ''NjIlUyhiUXt6TT1PM281PF9kLkU7Nl8rO2lMZEdnUFcqRntdUGxBZWxJTCh4NjNPJTVSLEByfWJ0eVBPPFBnOiJJI3MmRGE8V1Y4PmxTMStrPFk3Py89cyU4ciJ7b1RxYHhAfXN7aXQ5SmNpek8zUyljSWBrWl4+QVo0SyRpZ2wqZyxqKCRfJDRaPFNbP19SNmRuREhUO0MqWmhKbChzUy4jV1kz''@;'; put 'put ''OXFDdj89VygsYSo7NC5yaHZPJVV4NVBRREB3dTVtPVA/YEFaKitDM1FpY0Y+VHRZSHR4RUU6WFdOfiNfXV57aFFTQFUlLF4/L3hlZG5FL3xSS3ttXnhyZmkiK1k1L1dee1IpIThjLCRbWjlyNy5pZEExcV18bm5bdjYpR3NyKzYxSko5ci4hc30qYkdncE54Qnd7UTE7YD0lJiMxNyJFNTJud00z''@;'; put 'put ''TF4sWUl9W2smO05pfW9RdyYhcEVJP3xYSCpnX3c4dE86MnM0IyQ8OlR7MFJWejAxXSlJb0hxXzZffm5gY0tvby87RVBWTCpgXW1zUCx3VjJPaTQ9bWF+WkUjQHszd2RYMTk+LC9YVGR5Zmc4W0xxVmBrNyVLTHgqTjRuXmpoIyxRaDphTmRLIUBRK0NOOy4uQiJ4aToiekM7aTFxfGFKanQxOlBi''@;'; put 'put ''amojWCFYYyVHa1M2PkA6NGZJTm4paFd1JV1vJm1bamcvKD8ibF93MHJsPmNqV3Q5LHhhMUA/RDZfWVd2UV9fYjpzMkYrbUt4dmQ6Yns+QiZuNl9jdHF6WCg2ZVoxVjErfjdgZnhven5wWHhCe0xKZXo6STd3XllNdWIjTGg9UmQ1YitQKmdVKjAzPTQ4OztOJjZ6dS45Li9gRi53SXlPOFppT3BX''@;'; put 'put ''JCwsKntuWmMkQzJFXU8sRVVAKU1sWjQpcD5PP3BuYFY5VGREfDhvQlFpUVtwcG40MjJRZVpTOz5xXnhvYTJkO3BoYi9hKE9OeXJPdVtKJWYlMyx2MkUkZEJFWXEpOHVJL2E/XWltYW9KZiJ4WnBgSFh8bXA8d1pael5KVE5eR342NmdnUWRSdSwzbkozNDJ6NW82YkgqS0R5XWJPWWs+RSIyWDJi''@;'; put 'put ''MV5Abz1vQEsuXnp8X0dBRlczeGVhVkdEZ11bZEA2e0V4YllqflYsRklGSnxDazVgeU1JeX5vOk5jOXEsQWUlKXRJVjJZYl1LO3NkUkMkITQkMypSNDJOfGFFWFkpWjd5V001SEYiVj9jTDJdck0uPCFNN0l5OVFURWNAaXxnW2pjPG53QDtJTyQ9PVVdXXlKSCpydW1SeDx7L0RhWyRNdmFKeVVe''@;'; put 'put ''TVFxeF5ndSY/JUEpejVnU154IkhXY0R6Zl0oK3RtPnBQUnkjaUs3MlM0ZjpSNGt1fFlzZlpzS2BEIWl6bV9FbWF3SyRHaFIjN0Q7KTAiWWRncF5wKkJWPTo4fnBqPWcxYlBBMFJeOE1DYWAuKkokJDd3ZFI3WDpwOk9gNEBTWzlXaih9clBvYSNAUCpKa2cmKVtYTml9PElxdVJFYDNzcVNAWTxL''@;'; put 'put ''ckJaITw5IV83T0FZR3FdTmpPJT9YcCpFZ195KHlueW97d0FYOkVbfWI3cj1lZTo0OG4vIT4kYCZvRkZEKF03NDdAejkjeClXTSM7dyk+Nndqe0U0WjdlT2xodSIoLnNlVkIiQ2N6TmViKmQxSXxnVEdARC58Xnl8Zy5KVktZOTMkfWxGeU9gTnJjYGZOZCxoUTpkYVFTOENvZkFfMF0zX1o2e3lu''@;'; put 'put ''RiosQFpiaz1daVc2bXZJeUQ7WV1waWFBb1JfNllzKFUkakliRUBWISRgaE5zPT5iVTVxLCNQSX5SX2Jja35OaFNvX0goQndpQlg2MXpTY3VUZGQzMzxhfGI3azd5d11JNld1b3ZbNDpCNW47MWQiL195ZCZZNk4lPkZNSzQyYGsrRVZRZyZ+QE96TFJ2MW0kPDsuISsxYlRtWHcoUyluT0d3TjxT''@;'; put 'put ''TD5sJSMhI2c4P0gmZ19uVVU5Ul8vT0VEOWNLe24lMUgza0QoWTtMcSVpIUN6SyEwfUt+V11YVE5NMUZAXX5ZPEU1O1dKLEoqKlJuWTVBNnpbXn5nVjpGLk57fHZ9NVB5elhfI0xFVmcrUnE+RX56QXFpKHl5djUxeUQ8dXNZZkB+aXVhKCFhSXg+RUVxbHhrY3xiMi9PODttZ29wPj5sMG41ejda''@;'; put 'put ''WnlBKm4xNVYhT3s6aCY4dXJ8UClHUUI8PFlSXVJiWlRbJCluYzRZNU5Tck93U2lqSTJQMn1ARHlBJGsoST1gUEdmXmxgZXU5KD9oREBSODgzOEFlSHNLN3ZneVFwYzNAfXwzaS8xPSltVGVPWWNAfXtCfC8/ayoxSypVL18wZX4kWkFtdHdlYW1tZ2ExY1ElUU1oPzRtVCF9MWkhJUV+ND53ZHki''@;'; put 'put ''Nm1jJkZHWmdaUUcmYVBwQSxsIyxyTilKVW8uLlg7cGw0XWciWjokTVdFT2hWa2ZwZipEfW0mJXMwI0h7LmB9MWZfc1hjQV5TIWJfWSskTktTflFLc2khW3BGNytXRXFDPysjMytHaE9gRCN0bzNQREpATUJQdHBaYmJaaClhPGVXPXA+Mzg8SygrNjRQflpQPTJ0TVYwcGMsOjdzJFE3RGR6LEFi''@;'; put 'put ''WyE6b1U0MXt5IU5hdlVVUXI0PlREcEJnN2xEP318XWhhMFFpblhtbX5bZD9fRTJiV1dhX3EhOmwiNj4iT1lrNVc/IntUPTBwXW9tTkpaeF9DKGJHSThRIlpmak1Ud1BkW35BVVBXVlU6L3NgU0l7QFJPLDg1OFt6V34jO1M8NjEjbCtUOCl3WkU+PFdJbTkoRCVQNjdsNXg2UH1YSWg2Q0FmYkAz''@;'; put 'put ''aEA5a0whanQldyQ1VCJuckpvbjNkXjBhO0ZDa2Y9KGxWVi9KREk6ZzwuZjt6M05wflBMIi4mazReMExzUnUqN3dAKkIuen5+dUtOIyhjJjpkWWxgYnxXUipRKkdTYXM/eUgqQz4rVl5AJGNpemJCPlhjSkZvTUAoM2xgXV1KSCJUPXYhfHEpcVFpeGRCM1QyO3gqWzY3Zj1EQ2dHfE9fSGZTWys+''@;'; put 'put ''dF42dXVQJmxwWTdOUEs6ZGl+T3R0IlVRQ1t3cnhJUjN4ZyNAYEMhOGd0OGUkLnx9Mj4zWjlzJCRAa2MjMzg8a0VwWnZoZko6Z0gjNjx+aVl1VG8zPG8+cmxheW8rQHgvYCssUmdYR2ljSDVrNFNSMVZ2bnZHQmxjV2I5eSVieD86NE12PTduO15RMiV8fmV5SF1RUTRheyJeI2ZDZHQ5O3svbylA''@;'; put 'put ''WzlGRD0hdzs4PCtrOXtoQmF7RUtEZ3tPJENGL1NxSmNrQzlBZWFwNzEma3lYNj1fXjoiRk19YSQ1Oi9Ga3dETSxzVH5UM1JfRT4meDhvTF5Yd2VNa2VHJi5vWUtvdEN7LjgsMyVLeVJ5bi9HfDVrLDdBV3szbEk4NG5ARnI/SHk3b2g8SXs0RntndkdbOC5WUlh8bDckcVk+Ty4yVT9vbTQuekE6''@;'; put 'put ''YDYhRkU7P157JmRpRXdUflpSPmshPlV3RGdTTWYwYGMwVjFXcnE9UCQjIiVUOXtDTjkyX1FrLkc1SkdnT0thd3wwTjg9SkFkZ2tZdzc6cX5EeHNRTFJSTEU3ZTg5anEmMl11ISFLSyYsaWU4YTt4KFhnJThkJkw4YldvKyl4VEYyWlBCNE5JOns6Jk1iJFtWfCJzbzlPaSgqa2JKRn4ueUlEbTl1''@;'; put 'put ''aXE+dms8IipHJjFRP35bJV9weFRHNEFvW21hNUxuTUchTHV5P3p5RCtkMjxvY18oezBBInRSczBac1IsZkFqbFVPKGtCYWl7bS5NQldpUy9PRlprbl1KYXE3fiVseCRNOip8TFY2TzlAOntOK0JSQjI3aE03MWoxRzZPX2M3TCpMfkUwdUVJTTxYT05oPnp5XnkhcSRhMCtrTkN7dGVsUmd3Qlds''@;'; put 'put ''Y34iSnJOWXdvLG5xKypVQip2L3J5V1ZUR2F5dWM+SiFDIkYqNkA8ZlY7czNHN292OHxJWH51KFZaa2NTKnJTbjIpMkMkJHlTazsxKGdBO0ZnbjY4ZlpfdFJnQHBXYXgoekY1ei80VFd0O0cvfDc/ai9paj8kaTsjQ3ghfXdJJG9Zbn1uQGw/dTIkeioqM3leR1taMX0uNlozZkdfYk89JFpaKUVn''@;'; put 'put ''dltuRmhmT102RzBnSnRWJV91QEReYnF+Rj9KQEBAfnN8QnZIXigrZnorZFN3dm14ZTB3STIpUXZjSTwvM3d+KzZQU1MlOWJ3Nj0yV3RDbWdSUzYsIiVfYmxVamVmQjsoOytPc0BASUdWZHNSMy5KKnNKMUApT30hcCU5R0BRPVssMXIvJjpnY3lmZF9LWkppL1ZZZHhifnxAdjZ4JC9de2EsazFX''@;'; put 'put ''RFpAazh0LyNoTUU1PUs8anhWKGYwM2FCK3RRSWdbWkB8eiw8Qz8qN3JfRU40S0U3TiVKfEJLdHhwOlp7fDUvZ00zdiMzezN5Ti9EOERQbDpXO1deJjpEQFBMNVJAUSJGN01YcVVSIjY7ZHU3JUM6flBWZFg1R081N1JoTztSeHlgUXxmQi9XZnN4SCx5Y1I+Mi5LISJUeWE1TkN2Wz4rb3t5MT4w''@;'; put 'put ''aXRwOW5ecjJ7aE44UDkmajM0bzMzVl0wX0BfOmdjM0NtZClhTTs9Ryp+UChdd1I0fmVjTDEhJjdXW2Q3bSVqZVUyI0c2YmE2Qkt7JG5wJD9dcSFYfH53IVM2KW8mUH57L0w6NV8qMTZaYmoxPnRJVVRgWkZPOG5iXyI9W2paSF9ieGIlPTguWkB2YkZfZUxiUV5rIm4+WyErWzN8KUM5e25kJDg8''@;'; put 'put ''S1tsKiFNRTtkZSo+THFBM3YpM2hCZChUc1huejxDPSNyIiNPKTFSNihuSyFmUVYmTEIjR0YySF95KitAOWtmeiN4fjlRV1F4ZGNSQmlCXkIyJlgoRX47aHFRWkxJYD5NJWMjcTtaKVdgQypzWExpbi90XTQkKzY0bmtOJEQ7Z3xlaE5fPlVPQm5aRWZkbDlbY01fKX11aEhYRkdiW0hsNiNBTGAi''@;'; put 'put ''Qn07JiUyNTc4OGQ1RzVlNS5Zant4PkpjKmJEOSV4R29GKjA9Xld4ZD93enpgL1VnKU8yLmh6RTg/PnJObSp2SnpqZWolZUV9PipUZXwwQ10pdztBQk8jNipHTWQiOC5jcEgjKX5ldlQoI0x0O1Rxb3Qic2IxKFcrPTdEZWNNVD9tOzJkdUVhUE56ZD5YUHtfUD03TlJ2YSgrVSxucXF6PFg1XWxC''@;'; put 'put ''OCN4OEhOVENtM0AiQVpBU25tdXg9fXtHLn5eVmo9QG01M31GTlV8TmBTcmtXJUVQbkRXbkZfLGAuUWwmNU0oREM5Tm1wJSwsdDFpSU5hYmkzLjl9WiJ3R11fZz9bSSI4PGtoKEpRci9MeS5uQEp9bjFpK2pFIzh2MUR5I19sVDdmbCNpJFMsL2l2eGJyL0lWPzNUeGRdMXhJWCs1U3hqS1ZORlRp''@;'; put 'put ''ZmU0byxbX3gqQShES1laR0M8cTZsOzReJDFTWTRXY19YZGQoLDNjW3xzMHtYSiQlPChjKU9ydVhvYmJWemFIT254YGV7NWV8ZU1aQVNIKF1ASGQ/NVRVJGd6fFgseyp9LnhUNDhIeHArUV5ZRl91IXA1elRzNzI7YVl9aD5MVSQ0WnduaSg6YV02YSxYPVdZRzhVYy5QR2tRbFVSdWB9VzpvXn5k''@;'; put 'put ''aD02d0U8Mypzbm1NKmc1WD4mOSZIdiVJKVUlXig+MV5WeWMmLkpydSJldV5DMVMmayJbVkxlJEEvWVJVelllWlBXOW04Vls4IkxnQzdaMTw/dVhHdX1jMks4YzBeLjteS25pfjNvNXFhbWBTSWFMPGJTZmguOygidTdjZmw7YipZWXRqdFBhRCRYST9bWihaIzxWJSM/MEhWKlh8LCxVOnNdWSJ0''@;'; put 'put ''c2Z1X2F0eSwsVTdwR3IwbnMlMFNyVmRnelhacDdOMnBvQGpkJWppKn1lUm58ZH04JjhMSDQlNWRvTn0zRkopSTVlU1BPdm1aSEdrQlZ2bXQ5R2lJeEBCd1AofSlzViFYbTNpMXwoezxhKmwrP3VoZX45cSpFaVUoSmV8WS9NVz9dP0MvPEVjSXBLbmQwU3d1U3FUZlAxJEpER2UoPEBSK1FAcm9A''@;'; put 'put ''JlNyJkxuUF18VXE5KVU5NkpnKzM6aHR8OjZOWHolPW1Lal56VUpeNnMlJHZzbF9YMn5FTk1PfVBNdllYZSp0e3MwKDZ4YTA/VWVLcmZZeSUuP0MlK3JNeig5cEZKdUUrc2VPbHFGeU8jMzlJOEx7RkVMIUN4JXpwM3ZyXV94cCw/MXFHMngkRWVJOE5VelhDRD52Q2ZXL3ApMF4xY0pLUGtZZT1v''@;'; put 'put ''JThiLkpLaklTdSMpKj1jKGU3Z1BicTArOmo0RDB5cEQ4fGZDZD1MV28hPyhmP30uXipCekBtPjxNQHo6VnojWEx8YnhhRmhFdT1LKmMrIXl5dHBEPSRlN3J2ZjtDXXtoNUAydjNYbSJEQ1N5Kz5AfDY0OX5xNjNBYENbW3hsYjJRbChGPiNRMTVNNEI2dn1iQCU+TS80N3xldGBaaSIoNnNaRXxq''@;'; put 'put ''dFYhNUJ7cU8zPilHLGZSKks+VypdUkZBfXR+fVhhd1thPS5NWEVMK3teMWpFOTptdEckbzZIZjUjXWFRWXEoa2IpQj0hQkJ1LFpNXUp3NzgiaVZuYHYydjxdXXdsU207P0I/QWhtXU0pZU5rfFFZXm4+VW1iOFBBQVVSPHRpfjsvLFssUFQ/e0gmPGtkQC9bK0hWLGE3RmJ8XSZXaiZzY3k8OylD''@;'; put 'put ''MV9HI0BYPFR3UiNmRnYhQjc1O2Jye0JKUV5GS0ZOQH0yTWtTTGh1O2JPdEg/bkRpXmlpPFtddndrR187JkZhclopL15tVXBhMGJrQHNddz9pYmVPdUVdYHk9b3A3WVg3RXpNe185SigpezRdcG8mYCEpYzhnZHo4JTUsPTM6NG8la0ZFZ3Z3YTs3U1I7eVJAITVyY05jZX0/JjZJV0VyNFJXeUxR''@;'; put 'put ''XktMNEpzd2U6dUdVamkuMXwqYmFDO0koYFBhdyhqX3JvPmtGTTRVQkE/Xk4oMzRRSV04XShmMjgoTUpyTUtnVlpeKDZnTjteMzJFbjZgUkUzKTB1Li9aW2lFNUI0fH00NTV8ZVd5byRyQ3EwOSMmaGY9Ok1RU0RpV3MvMVspZkopdF4mflhsS3tKYT10MkV8XW9aZHVZKSpFPDV9NEU2NitGZTRo''@;'; put 'put ''K1BvTm9KR3E1KiZ1NDc7PywpfW95PnxkMGlpZT1xL3YzfSxWJShmY1NZUTpqM3ckXnRJJX56VFhYTjR7Ln1qaCs1WGNlaD1kdSQ2TDh9VD10UyFVUGljX2guYX1zRTQ0NiVbb2lrVGJQe2I1KiRQR1s0UWl3akgvQXlFeEsja09XJTVTQGRFUVFZKER3JlpNV0YkOjYkNDU8PEp0UHVtJjczfEM3''@;'; put 'put ''aDppNVppVTsrTTtQM0I3KDh6QCtTXmwuRH0lVz5bSjN5T05FKXFeLmVmakghRTE6dklAUXpXYypgKmJYSEl0aXptemFpe05eNCI8UnQpKll9LnBnUkorP3IlSyleM0o6VyhQRlFZSWk+W3AvO2A3TDR7amFwX3RObU5LQnZNSGt4cm4ifHkqLHhwQX46aWtgWDhyXXw+elAwIVREalElfkJZSzMi''@;'; put 'put ''aV9na3tmbn46JDFBMnwmZX5+V2RIYT9nNTVPR0UsTXVtd3soME51WTtVVDA6bCZCOzdQJk1tVm91eExRc0F1KzZ7ZE8/YHpgRD9rOmtlYXwrbn0sYUxxbWMmXyxxSnZleG9jS2x3IkNdJktgbHY/MmQxMlJgVG02b052L1B8b1BwOzdPNV9qSDs5PmFwOjR8YnthfXN6WFEoWVVCfjJ9bGJAXWAs''@;'; put 'put ''dTxMbSRSPypSZUY/eG5RYTBONy5pQHpYKzAsK0VqW1M0UTtVeFR1VT1NUC5iR0gkW297bjJYQjlAVEF9bGpZLiNqMX1yVntYdy9pdF5OeSJfUnFSOCtGKn5dW1N3QmRtKkw6aiRpfTNKMF5jZyFoTlNuWlA4Tz1lQjwjOHc0WSl6LytjZDV5Ok83PShjVVlhRmBTZ0klaXUsKjNVZT04LzxPaSp1''@;'; put 'put ''SDJTeTlMVS4pLnVYS3s7cG12Rz51e1FadCgxWT1dWlZoOncsSCteVllfWldje0VpbzRES085KWJjRGRfWjZRVS5TSG05V0soRVc/VUMiRC5bOlM+QktALmMwdlM6Q0puezVxQjFlUnM/OkMlOUZUaSI7S3wkLn1YL0ppdHVzXypVPko6TiVAODZJdyZ2LjZZS1V2W311T0FHVThOMTNsbVp3LnRT''@;'; put 'put ''UVlwW2IxUHQzOWJWbSpacTs6aGhhJTl9TzJALGh2KkI8OyR2O09QRDopelBJflIoRGN9alJCPT0kMlhNMWlXJFNDJX4ud2JweWhwRyZeY3J2fnpkOTd3azohUUY4RERxRT0+Q0wzMG82Q0hUMV55XkFMXzxHeVZGcGxud0tkMkp9TDp5dkR4Yy9nfmN6UysvTzM+dVU6akEuPEopKGx8N3RSPWYm''@;'; put 'put ''LnAjdzhUJEpiYG9ART08WkEze3R3W0NffCxgZTUoQyteZWNxaUF8WUJvL306Y083JTVFbWE7RkVLNEMkPld9WSRQLF8vSVZWT2QsVF8wT2lCMGZYQndqVXZZTTg7OTZhJSROTFV4PFlyXi56OVMsaXNNITM8fXo/YVU8KnBqTy5oJFVAWmFHUktiT34zVShbKSVUVkxDKkh1dSxhUntxLDRFQCwx''@;'; put 'put ''e2h+ey5fbCVFWWdNZHo9bGBfaGdgLkx4PylPXV93Qld0fGQobzFWRWF2TXB8MERjWnBxWX4zYkZ8c1pCXmlqYjFbdSJdcE8rZmIoZSt7aWk6Qy9nUCt2LDd+Q0ZzY1dwSTdsK1pWcFhVdmEzYD5OYCFsITghTj43fWpCcSh+fm0jUWUrVj4xMyozaXd1Nk07cVN4WnBJXUR8Plc3N0tIeDVgIytO''@;'; put 'put ''M2deRUJmVjs2VV1SJTIrb0xMXVtWSC8ya2xHQkkjJCMkWHVHT1s0IjU6eGkwP28+TzE6LCtiWEg+Mm0hOTx4aWEmfEFRVE5QYDJmJWJ1e195X29xI2Y0T2tqV21hVCxxWThnQklpIjxwP3k6aCFscUN8cTtXTi9SPnI2VUY9QHtKP3YsMCFafXhgRW5XWmtfIjlUJChhaF5wZFpkUz1AdENqbn1s''@;'; put 'put ''XyV6YUdrNVRiMU1hZzcpWUNEdHNjRk5NdXA2cTdiaW1CbXU5Xnd9QShqVkdgNkQlPlE2TC50PERJKTAsbyFFU1NiXl8xdn15dHFLPl1McXlvcjx0Qm8pOCZwOypUNXl7am5JS3VdZkcwJjR3fW5xLFNOcSQlRmNDU3dZPyN+Q1Vod0JuRDYlP0w7akoxfWwoImddLj81YktQZ3Y0Z2JAcG9Db0Ik''@;'; put 'put ''dTxnZjt1NT1eVDVQclkhImlVJCVhO3MrcnM0W0IxQkZyS1oqR1IjUVcreWI7KClPK3ddXkRNeExmI15uZVU4U3JyYThTJlRLdVJvRUhYMXgoQSwpNX1YRmUjVCNsdDRnfV1uaiZAYHkra3ZiRn0mckc4WSxMTEcmfSJUZFgwK0NrYDk3Om8+VUcpa2xhciZial56YWxFRXU+dTMqOj9aVjxXRSth''@;'; put 'put ''Ly9ZeipPXn0xbVsyUl84eXpYdExSeGV1XTpIU2s5PGw3PU1iSjIrX1QlLnB3MGxHPUVpNHBBNCs/SjFPXm48bmYwTjRzKlEqdTRTRmUwMW41YkEpZ3kwOlBTW0lKeXtZJm17LDZQO3pKVz8scW53bVQrJn1gSEFVR0xVVlVvSkNbJl1oeSkidnc3Kzh7MVVKZTJKVzk1eVIiOXtdVzEjO1p9Oipp''@;'; put 'put ''VVFyIk4icmouUkdkNmZ4RCEvYExTaXRMSnpFKndwal0rUTBkfFs2Q0t0R0p1LHJDdVY7bCZXP2g1PjpWOXN3VFgyKkxyN14hNVhjQTFLdCpfMkNmMU17JEliNjE+SD1AJmwpLiVVbWg2Pj50fCpGcHZHPnEvfCNyRV4pTnFnS0g4c0REJj9UNjM9OVFaOk1deyJlOVI1XW58Q11fc25PYz4lbC51''@;'; put 'put ''KUhKYkM0JGlNSFRCY1pQfFVYJlk4UlByNGFeRzQ+b0p5eS9wN15lUGNpeyppb0FKfWVLV1MzcF92ckNaUzlCXTBxZl0kLnE7ZHlmO10iLk0uWGM4ZSxLc2xHMCo1bGgvSH5gYiNRRlI9K2BePkpPe0A5I2IudEswbzhZOVNMQkwuKlR1cEEoKD5iZnE8enUjRjB1aX4vRzQ+eVNnS1YoSCp+QSo7''@;'; put 'put ''LFgodFN7K3teVjI8X1EmMkt7U15MYFh8dFVKWW59PGt4SzpEO1QrWnI+ekRAXlsuWTtZNiZ2ckVEL0JwPXh9TTxeXkE+fUF9d0VJJip7JUdlN3NwajYrPG8+TjxqPVFzams8IzV7YT45cDlySWUqQVRqa1I0NlBISilZMFEiLD1MaUNJYGJkNCxfM2wqPHFGSXAwYXV1P0xmKEsxPW5hIkVJWWtP''@;'; put 'put ''Z2VhaUFhVG1DdUNHTEMqQ3dNJTIqW1g4WyFnfEtGUXVhdVJdWkhGaWs1QkdGOiFAQFVpUGpaRG90KjF4dDRAVlR7K2d+MzErMDM1QGNqV2t4Y0FiRlRfNHAqVW1IX1hTMj81dTlnWXU6ezcoN08qbUVIZVh6a3E/ZWZOLGg7dD1IYWQ7R2tSbW8yPmgwaWc5M0hjOnskYG4jKHczQy57VGg7IWlH''@;'; put 'put ''cEBXI258Mj9PIVZNKWx6NClZdFNGL2tRe2NsIU8mWThgQnZ8bTkkaDNSRTU5ME1hbDl8fldqc11QeTM8LmM0Z0ZpbUlzQ35eQz8yYT1WLG4wU2YlJlpsOGhAP1VMWVBddklqYClKO2owNFV8W0JlWV5LISNNPG86SD1oOCRJOS4sI14jLzxiKlQzOUxeNnNrTD5gSG8iUTBVOT5ZM0FDPXtYNWBH''@;'; put 'put ''IVVdNn44dkZJYFlTO2JPKWszfXBPU3JFfSZRXmpnRUdOWXI4WlI0VnpGM1BNbCg6LHE7YXJZclg5dzorN1tTNDBzNFBzQD4paHZDdU14IUJWO2p4NHt1cnclaypWekVTQ1lERmxRVSZQYkYrOiohcTIkMXw5XXNXJSw/U3Yufl8rXzssR1p+MGdiSTBNWUZ1MUE6Vi9acStzLCM7V19ERWs+cXh9''@;'; put 'put ''RyIyVCk7YzBke305VHwzaWlCeXtrS1R6dFgkJns/XyJ6JXRUWStEe28mI2JlOFVYUjBoflpVWjZWKXV8eXNjM0tsMHF0PytJUmc4aGBuWyovPztVMHxYajh9dEZtezkiJHw2TV4kWVg1JCsoNTcrYWZWOUFjWmMvcSFhSTlZQEo1LyVdVlZsezwhZVV3VWY8LzhsYEYvMCYveiRJOD4jd253fitb''@;'; put 'put ''I1RwNiJXX0k+Zk9nRUd0UjE6JDRbQkliYTpte1t2dylTKH1oLjVDPXRlNFhkYlpdPkxOW1guXmxbWSVWSyozOnZDITV7WTYpSTcmdkU1c20qQCh+SDg0QlhJISpRfl9tWUR+O0kqWGRnNGRiRiIrPGBaL0k0JS8sZ25yfUhoKm99UzxjPUZ9PjlBYk54bnVrT0h3dS8vVk5FTF4ibmk9dDBDYXlO''@;'; put 'put ''ZFkleSh3IyhuNW9fY3RDYWI5MkJ8MDIvalAyfV5UbkBqa3VhVSRtXlBpWz01ZTghezBPbVEhJStWeTRvIXhBcT92Q2lMcyEhUXA4UmZLWUdUYXpuYDtjQm1ebFNuWnh4aXJLay4kPExpUmdMUW06dERqNGolZHVtPkI4Nio0Lyg9cXhPTDNgKClKdVtdeGhuT3QxTXF6YENiZEZqPkBuO3tMOD1A''@;'; put 'put ''ciJSUlQiR1Q3Rj8yWTJQRCVMJnlsSkIsWXNrJGZYT1F5Xkl9cTpmQ0hdKzNKITNqRD11PmZzXlloJltsQFVbRDo0JjVHNmhqSSxGVVJvOFZrPW87QlV2fTJ6XjRRZm57dW8iOVF1PiM4fWdjVj5idiksKUkxcHEpQTphUyZNfU1+dmNreC96KntrcmZVMHtaPlRKQH5aWSlyUzpHaFRzfFcjaios''@;'; put 'put ''anNAK0o0Wm5UeWBlezozQWdNdH4pUGlQSEVGKVgiZTx6Okt2Wn1ROVkiIUxFZlFaVWguKVA/P3s7cGNtPmY/bW4sQV1UKFZZSHgyOWBYR21ZYUZkWyE0UjUuVGc3aHVzalROU2xhPksuamYubyFifSllMV1xL0hEWV81ZiF+OU97XVR5dT4qZztUR2JATlJbWUYmTyZHMSF7T0FnU0cjKllkayx9''@;'; put 'put ''YjVqRHVuMXF2OE1IWGgsRzZVI30kcUc1fWw3ZSREalAzJlo2Jk9KQSovWk4oSlIuYCY+JDN3dlFpbWd6JX0pSz02RX04MSJtUmB+Im1PXmc+JDc5I1gmd30qM1l3MFNValF7dGY6PEVPTztiWFBFXTNoOmtQUHlNNCpCISMhYiNVRDRCdCUyfj1vKWdTYVZfblA1dllFTzpkRTh8cClCKENeIW1q''@;'; put 'put ''I1BJbz9sZThQK2RsPnZYfXk6VGw+WTdMaGwycDRfbHtPcUNVUEddQTF9SWNWPj9NRiQ9VCxEdDJhJWwob2U2bEYpZz5VKVUqZHsvVkRGJiNYbyt7M1ZMUG86K2p1M110QF56SF5gVTY+XjshfG1qayk8TnJtSyJxQlBaXiFmTEUsRlQ5Q2M1WWV8e0J6W0pXaSpWKFIsa3YzTVFNbV8kcWJhdkZy''@;'; put 'put ''eGszMUBrRCxJKkd+NUVgaU0rZHBGVFM8W2Y8Wkg1T1BOamdwbGhqQTIvYjRiYyo3PCV4dGVMVyxibShQPzpQNHNHRTtXREg6NUUmcUhKcyNZRXQ8X3AmR0c1ZFYsIywzXUxdTGVZWih+PHR1d1cyX2F+d1FwRWJWYjtDTjJhazVKWE1UWFskPSNQRXd4ME8sWkJFcDEsdiVQaDgwcUBLWzBEd1tq''@;'; put 'put ''b31WflEoM3dpKjQ/Ti8ySFNxPWM2YTRJPWVYIW5NLDB5OHEjPFY6PCN9Xi5rNlNZN3NUcm5ib10zMyhvQEpNR28lc3pRVVQ6WSgpQmNBMyhNT1svYHFTb2VPOGw/VHF0VDxeImtzRmhqdzt4KUA3NX1UODN7Wi9rWW1MKXJSKFspalBBQWJZU0dOOl04JHlPaylvYSxjMClXKUteOmg3cHRLO1Yj''@;'; put 'put ''Zm5TbiFCRDo5QGdTTG43RihqJihRTTxZMEs0JHdKNDApMixeU3AxRkpEI0V+S2ddRkdja1pQUVosdyhDOVdTY2AuNEVnNjl1NkEhS2hGYmkxdHhuK2NZK0BGNlE4SGR8IWszQ3lHKDBPP3Z7VSo4PWx6JnxTd1NvfiUuYDFeOiIkZjhHaXRkZjRFaTdXaC40VDxWNXArJFs4T3dIP2B+STo3al1a''@;'; put 'put ''OCZWPVRfe3RPcGJ6S0lYTzlPdHVZNmEyJUlDflh0cUwxQF1ZKl4wWHpeYUErV1MzRyNNdiNIXz9XeXVRL3N5bUViIWtDODlLS1t+YWBzdT1vOXNCcDg8ai9Cc3U0cC46dzRPX2tZVF8wKWkpREAxMEpNLmdtR0lLbTpUSV4pWyZ6UixERUB9OW4wfEg9bylOSThjPTZlWj5SVSpCPn07OlJbQEU9''@;'; put 'put ''Y0c0RSZfYHc+dz4uUUhMQDZlRjM+TDFraGxKWEtwI1N5Nm54LyQqNS9YRiNAWDt7cnx0XyhjemVTLnN+bkBsbjt2YUs4ISxtJUU9XjpWITRZQ05pTERfaSwuQV10OmJQQTxOeHp4Sk5jfitQXXtjRk8wWXshbT0lclA1Y3U6dX55I1pHLk8uYGA8dkIlbis7Zl1bNlZdY1tibEhpNTwwVU01U2tX''@;'; put 'put ''NWw8JW5zWF0jVE5YOUEuQVJtWD1tLDAwU0d3KG4sdElgWjdkcmk+e14+ZC96JU9lPlUsT1oyKj51V31heip+UHBkajJTZ3BwQ30jVyprV3Y9Z3pvV1ZgcXE5STJYWmxbKlZfP2UlYGYvVn4qfj1jY1hrZ3kqSzR7ZVJKb15lLHJ0OXN7SXMwa2V8UDUqQ2UvN2VUcV53R3ghNitUSU13O2FRKDkj''@;'; put 'put ''V1QzYyp4RSFyNGJFTCtDUnRnUD43bnI5eTBZLmhZXnNPYG8ubjpSWSI8b3lZYCpPQTEjMDlxTGg1SVouK0FWNyNJaT1afGJMWVNyMEJdL3RaYSJiWyFGa0hmPDVvP2wyfWF8WmZ4bzF7e1BlUTo6N1coXU0+c2tSbjdvZEQ6c1BDQ3spVTMwc2VySSlseFZuI1poT1Ahe3xKVj0jXXtDSzhtW2N6''@;'; put 'put ''Z28xan4rbyJJMEQ6bltedDhvdzRXaX1eeCR0Vkh1TG9wXkglKFBwT2AsdXVVUGVgWkpPTTFDOUBQKHx+RkwsaVE7NFU2PCxWcGd8ZSNLKFVFZkBeYTc+dXN1ZyFNS08uZVR0ck5bR0tjI3dQMlp1KC8lM1AmdmdRWjhzd01tLm99KiMuZXhrIixvWHAqayVLdm4oSG0kS3E3LjckflVFMVt4KU9C''@;'; put 'put ''PmV+JCp3XkBld2MvbyZjbGdkbmI4UGQvUSIvWnsvQ0YyWmwhOUc/MmI6ZFV0JW8rdkVVa1Q9U3tRaVRHMi9ha3xPe0A8OmgselEqd3hhOENWYW1HK1ozUkxxSmB+c0BsK2NuXy51ZyQkdUpUVHRoV3kuQTtOfkYxTnYjNmVaTD59cW4iSD9HaCF2e21FYX5OLmssJFdwbTxsbDNxVS9DIytYWGRp''@;'; put 'put ''JGxjVyZTb1ZGeXtfZDF7TUghQG1yWmAoeUVEZEJfT0hPV2UubmlMOmQjc0RgUHhtOi5haVJUWnNfY1VnYWlfd189YFAhcj9jPmp1bmRqdC8zNURoXkhwK2tUUmE6VCNOLHAuck0rVUpKeUs7WlV4WDJwTHV1VGdKc0x4WHhvI0hsSkVvbUk+MENob15JY21oaUZoOFQmMCJwe2kkTHx3OEB+VypQ''@;'; put 'put ''by97Zj8kMFRQNH0rQl08UTd4Ol9fdTpPamFJNW5DLC5tKDo0e0FnJXFHKHgrYkRELHB1cmx4RSE/ZkozfWNRcDs1aFdlVVgpenVvdXFmVmwwWChfQnRwRnYlI2ZKcnJxSlFGayo8ZmZRTEVhNGt3MGBiNH09cVlpaF1UK2xLfDdvMS9rXjhOY302TUIrMlUieUF2ZWQ9LzBxLnBTVzwjLzkqPyJ5''@;'; put 'put ''RGNYIkFxVy9ZfUcmMEtHaSVzNDVxTExyKm50JUxaTTwxREhnKl5yWFlGfE1pNUtrZWNPPW5dJDZyTDpdNl5OKFpCSHdiJC9UWVc7OUJrISNXSW8hMnFyRFomIWB9SSFmUEpGVyg3OHdHNnhZKzFiRV1waS9rQyZjdyw3KHMvJHNzJWR1eTxzN0U+bVNEZHNLSnltQXQwQXEuMiUxOSJ2bVhEUWdP''@;'; put 'put ''aT1nWCY0Sj5TcXJscjMuKHg6Qlh7Lmh+Iyw8VCg4SiFKN3pSeCowZmNlZWkydG8uaEVNVyZQJUkpPFk3MlZudkByKChkUUNdTyl1VDRLamRjRjtMdzVlY1NTaFJNT1FUIldsRDdjZ2VNeUxSOGVmUFo6Oilkfm9VbX5NO3Q2Lj9kRzJZe1dbPD5DKDVhTkshIWVTe283eTZvOGdzYWohZSxYSV4z''@;'; put 'put ''Y0xkInpgSWtwZzQqTnZ1LHA+XVpxSkYqY3gwUShbNzpXWGolcjxAfDZKI1JfY2khUyx3VGddOTolN14oSWhsXVhTOFR1UiEpfnAmNyFFR2dkYkwicTVTIjMiIzZgUU1QVWIuPk54QCU8NGtFcUpfdD5ZTE1scXYmRHZkYU8kdEAsUVM6JGl6RkZ4VXMsViw0cV9VeHohfCtHIyt0RWxMTTxIYFFV''@;'; put 'put ''cH5FVjE0ZU42aGY1W2hYX3goXSpFNCtZRVo4KmxsNyZpTVldNWBNaUJhbG9Rd25TNUMseF9Gdm9bMThtbEpweywoYHF1OXw1VUtkbz42SHlFRXpKQHV8SyFpP2ZiYEdZTz42TFd6OXFoVz00Ii5mcWZIRU9kfnp0Ly9YZztQQCpnfFNGRi9rSiJIdileSX1nNjQ2cn5nS0wrWFhGKVdJd05RaX1I''@;'; put 'put ''VU86Q09NZWVsQWteSld1e2lnQ3t6XV97XnojbWI5cEBGLkBJYygoT1o0Ols7b0BJPGpdOXkuKUNdKSFkSF9iaCxPe2RkPl5ZV3dyXVRfL0VuUXxHT1s5OlIzMi94blN1Y056e3QrKmVCZCteKml5WngyTjdLMipeNDM7fS9vcSUiW0NCfUhee3twUE5YRyZGRHtjP2hEblhYc18mVXh4JSNhbnV5''@;'; put 'put ''QmFZbjUhTUFTfmdWaiEmRDZDalgqfmo9Yjh1RlBFUEp6KGRpXX1SOHF2Kmw/UVQiJUdqWD9SblE8R0MkUGlXSGwyaEYsflJiOkxobTdHMmVGaFMvWkQ+dXdmPHRrTTo0LiZwRm5EbyVqIyRMeStVRj99WUN8UzU4KDl2VjFNfEVfeHBLJnlOV252XX1XS2RYYE19Z3JEbnxZUk1iIlUzQ2lnfUxG''@;'; put 'put ''KEFzbkVoOCp6N2AzJnNlSncrbXBbdlJOJDNEdUZYXlsjc2luNk55PTEjNzE1c2k8IWpKQkNbVnpxV1A4YGxpKkVpMkBWOSojSntdN0slZXVLNTliOSkkZHQsdyZ3fX58KWc/dmVld0VSJS87R25RPTciK209fntUSFVtKlldcyMrYTRiZSV5SVBQLHEhcnx1Jj9sKGE6VjFqOCEmVztDK19fbWxd''@;'; put 'put ''aUBfY3VhVyVNOzNZSzs+MWh8UFVkaDFafE9FV2hZVjMhVzNla05aXn1vZFtGdlYydDllWzl+U1BGVUozMVJ9a0E8ND12bUcsejkjL1ZSJlUiYSImcWk+S1QidTEmdEVVeCZ5bjBSMGlbd3M4PEg2QjA/dFR9cmVmfndVZmEvP0NvI2h4THZVaUBxTmJXfGg9PUY8XStDMy5RZ0J1PVB9UzNSSDxY''@;'; put 'put ''LEh0JUU0I20rInlIaXsxVz99Q0xKKj9qL2x2KE4rdFJSek5KVkslQU5lUip4V3Bpd25kUTk9aU1FbGMxdnZIYjJrTmN1eEtBfCxaUj1eP00iXms9QlJbcl8qSVJEKVdHO25yWUdVN3VAaTVrX0t1P1dCMShHR2Y6UV14bzRyfEo3cEVtZ3w+IjRsTHxUNC9ZKWB1RWYrN3F0Pmt9OH5rYCh7d2o7''@;'; put 'put ''NH5Zej8kIiRSNTxaantpRTVaXUcyYHZ0OjJeblJMfDxZWXNiKkJaSnFsKzBoKnN3WDp8aEo2OzolKj1zaEkjfVh6SjFqaU5ZPFZ3RT9kaVQyTyRgfV9FXV0/Yn1ER1RoZT1IXyhLfWt1cj1wPEFUK0J5O0YoM19XPSIkUn0kIVd0OVR8ejNmQHN5YXM/cX5YWkVZTCV0JE8uRXtMMC59WVkwJCVz''@;'; put 'put ''fSR1JElqdChTY1o9VitaOzVIOy5LfTtsZ2NrKCtSfEc0ITI1Qlo/VFo4aV5SNTFLejY2KigpUlt9MWF9T3NuWUtWanlDfG96OEg/JWB1eUc+TyY0bUhVRzx9NTI9fGNMdERfV1pRSzwzY3pIYFBNZjZFWnI0IV1KRFZqKVVTbWdTJltSPkUoMWsxSkRnXV8jbnVhRzI8PlE6XihFeXloNDhNcSNp''@;'; put 'put ''IzdTYCYxV2AjTzEpM1pZcTpkVEVAXUM4Slg9YkUvUCJLQyQmVW5rNEs2dzhocXt9biFDZTpiYk1Zem1KUntdPWRdYmMubT5tezMrXztBTih8Xz4yT3RBWThSY3wyWl8wV2ZsPUlHOV1ZJjpLXklmR3RFdEpRbkFFd1F7NT5NaURrUGByUGBoTEx3UDhQQjNybnF8Zm5EZVkpNHhnRGVrMShERzsq''@;'; put 'put ''K2g9dDRHTSpvLlJ3P3woUzs3WjZ1Rnd5LixsQ3w3Z1deaypBRztKYj1xJUddKHtuaCFHRTM2JVdsY0U0S3NiREBMOEFmcUUkNTNiLld2aE9Jb1s9REM+SjpWSytYdUtQd2pbZFdeZDw0USt8cCtHd2heMFhncGcuaGFmQ1FVXTJDZHldMTFbMmpOJGc8P1VGNUkzPFtTVlJDKTZsZCJqPi9mXVMh''@;'; put 'put ''UkY/LHpuQldNOjY+QGhEaDJJL3A3cmZ3b118ejFCbG8/fUMufnkiNHNNIyorVnMrPF9+IitSPX4kQTErdD9zYHA2VFE+OUBRSEZvNmNFbWV8RGs3PjMscyZxfkFURnJGSnVbKi5vUHs6U05mOlN+SmFPTDV6eXBBOGtfI359WmZoIXZIR11nfEN9MH02aFNaZjRjK21faGo9JFhdX3V7WFRUOXNW''@;'; put 'put ''PndST0BtVF5EJlJ5cCRpVS8ldXFmKX0kLjdjL1R0KXhJcVo7ZVFjUSR7USlVNChSO3o2b1Q0aEolRlRZaCRtV2ZSKGVOKUYuZnRyLkNHQEJuOy5QSzwzZE1APT9bd2N9S15pcHcmZCk3RzhdZ142YFRiWEwxOSFxV19GJlldeFZ4JHx9T01mNnEpKyh3fTpFcVAzL2IvbCtATyV2SS91djFCdlZA''@;'; put 'put ''NCxvSDd4fVY4Qjg7TD5xfTYmPjpvMmBPNiE8eSNval9kUGgsRGhdYFRXZEQscnphNX56VDliOnw/bjxhQ3dhWyRpQTVbfDtPVzAoOGhDWll8M11ZQWM6K05ze0BdRykwPUREInp0WDUwLnw4NSl2WChoajUyKGFyIkE6cG1gfF5uIWQqWTpUdj94O2t7Q25pSi4kczo9Ulpaeik0QioqUyxTKy9Q''@;'; put 'put ''YnJeMFkpRTE2M29KPm4wUCJyOFR2Uzs1UlF5IUw5N1k0Kmd3Q1g0SWlCZnNfRGxWMEdxXT4xTVElM19fKHppIlE+IVk7WEVwLEBOMSl+bD8sLiVROH4/VkpXK25udyphLC5iXkB+UEJiJiE8TmR3NyIiT29eKkp8eGhIVGNGTFtHYWFDOjQmeTFWdHZ+VkglQldCfiUsYlRaWH5MNEBAXnl8diZ5''@;'; put 'put ''enkiLEFbI0ExNkI0VFQ5Z3I1IXM1fHFSREYxUTUraWFoNFNfZGMyXzFqIStAVmlUVywyfFJLdUduSlt7Xk84OysmaVdjKzdNTiUiYjN8ZiwuI0IuVUJEVGVjNU5lWEBUQ0JbTnNwXzlbPE1hZng2YygqPnp4OlB3QWREKkA5SWMiblloIyMyOS88XlsrOFB+MHcvMjlweXg9YTpeVXxyPlRJUCtf''@;'; put 'put ''Ujx1KDZAV2R4JnVsQFU/ZFhubiIreFtKMnlJNSRsJTlMZ20yR1dCK0htN3VIY0NEcDZMVDJoWW4pLDM8OiFWL31BcihKPDAhKTxCWVhNW01NRzFlfkNVN04+aEVkeCxZLDp2X1FNMGs3ZDxdQXBkcWp5N3RONFVRKUpnR3BoVnc4SSVPWHlfJjhUZSU9OjwsZlV7Tz1+eXVSflgwb0okdXw8Xmt7''@;'; put 'put ''NiFxKi5rZk1hcjl5WHRWTiJFe3ZsSiNbKXl7dGVVfSFWe0tkYmhrK3U2VXhvdWFBSThfRT05fCpKbzM2RyMwUFlQMTEzSF5lWVgwRUU3U0skbVs1aGlPZktRVzQ/JGlOIjk6WnA6NEdWMixVQ1g+ZDF1ITJsTjwwYVlAPXBHPnBULHVDaix7Tk9NdkY3K1I1NFBuKlZTMEZwfWMpSFtXSXc2djxv''@;'; put 'put ''LlUlRDNAakc4SzhxUyIsPjw1MEg2PFY9TyVJcj1kR1VlTH0rRSQrbUhJTG4+aTkjUmoreGg0emR9RXd7cEBve35AVWI1WldhRnR9QkJabmJFJikmT1BiTk8uZUt7U0ojNzkhfTo0RGpAbjR7dERSVHhhP3o2T3h6RFpVdHl6XT1QWHxpQk1uKmduJG4mbz5udi9dQUwoWzljS2IwV1NtckF2PlQk''@;'; put 'put ''YV55VCEkQT5baTd6ayxMK0BIcm0/Rm4kXTYpVXtSSi42RzBHQEhfZEsjO3hfPDBEdFkoPjw7eTQofS96VjYsajxIO0hfVH5lfX1IWXg5IXZtIzVGOkVjcDwkTWFYNSQhZH04UiFKOVNWbn1TRE93SVhtbVNwZlhnJUcpfT9MV1lTcE5oejxFM353SHN3e3kvKSVGIUMqUmMoaU49YE42N1tyVXVR''@;'; put 'put ''bTdqPW59UDNdQDNxRklmI0hQdUFMIW00KERbI284XkgjZjEwUD1Ecnw3PyU4RXU5IXZpc21NJHIlInpQMkVbYjlmOzspem4uPlRJKWRFYklBOEBlJG1IPGtGR15UbGxURzE9YU1ddWU4LmxAZFg/UTcyN29hbCNCMjwiUF1eMkYiLEpnJWk9Z3ttL2lvK1BZNGxDVUljRCk/KT1ZTU5UI2hvZFl+''@;'; put 'put ''XkRmKVZIWztTZGd9e0lNPjZWRVpCdlFdfVdee2ZCLE4zdC8jd3gvN2VVLGRdKGBPZHU7JGE2fS8rQjgxeSw3KW9dcVlteV08KE1LSD8pSF5rTEJ9MndDOEFqVDs1b1VbI15gYiJrZCsqZThGVlB7WUI/dytWem9gbjxQX3B+Njt1WFZnTl5Ke2d0UkksRC5YUzprYUNWXzEidU1nNjMpc2RObHM7''@;'; put 'put ''OVU1PX1UVSlTdDhITSpbLDw+elFJam8+dk50RCREWSNYSWd2Oy8uJFo1eTkqUXtiY3pLWlhoQXIrMHBDLjFLbkBjeTs0cWRhRSVbNEl1ejp8a3tEWjNdflFiezZLaFJyV0kvKlJyS1dWWFpxQyMsLHREbnhTIV9nN35HI0prNGIqfDlmbHFvVHdPQHMvRGBeZjxGOztLMVF7IXlBTzwjMVhlWCs7''@;'; put 'put ''aWZgMUtnSzkyL3JlKy8qWEFKeCJ9cWwuJHorNXRVSHVzYj5re3VVbTsiY1taezFybFQoUE1fdGJeJl11JE5tQE94SzpUdmh7cDRpPUZvRTBwNDlmdGlIZ35wKnp6TX5tUmViSEF1T25YM2gjdnJxYzd9d2JhQyhRS3lrODtuMDJ7Kng9azZHJkdHTC9JPW02KCgxTWN9Y0ZaKkNoQzciJUtza1FE''@;'; put 'put ''RmF+S20seEpdSFBoNjdaTWM9ZU9zYVBxaCZCSEJ4Ozl4Omp+InQlPy90N0E9d0JzPkFdMiNMNl09b2pMRHNbYjBWUXdNd2opTHU8SXlxOzBFKmFbfDMkaylSIV4zPXdDT0QleDsyQ216LGFGfUV9XXQ6bDB5QzZ2NiJBd0VZPyo4JTlgJDZXVD8mJFE3SExIIW5CbC9jOkFUNXE1JjAsdXJ6e2VI''@;'; put 'put ''NUEhb0dCOlYlfnNueFZKOVQlTjVdNyxSLm5zJmhSdlpFTUVIS0c5XVkqYmtYdDcialR5S1VuSHgrY18rOmhpITZHRkdaYU5nSm0+eiwmS3xhMD9aO0IzdGZiSTAqXzRjXTR+VnRZQUplOz9YTldDNTdEbHMiMH1dRDwkMy5WOVlIOn5yLFIobX5hOW5+THA4PFU3QEkySVBAYUMvXjszNDMwZVlg''@;'; put 'put ''IS5WN3FzTzhkc0hoMipdNnp0dkU0bVlKc0BmcDhXTWYmQ1Awe2N6bGhkW21ZKTZAbSI2bXJ2Pl8yZXcuN3U/dmh7dF4jOmNvMGN9LE0hNUl4IWFsM0ArNVood3h1YjlVZSprZUYyfiZTMStiWi9US1ooMzRmYFNmTHJ+P2JMMX1ddGdTfGFPZXMqYGtJZitmfHN3Ozo1Ulo1SkJGRF5Cc0QvaGN7''@;'; put 'put ''JjBWZEc3IXJxcilKWW1fWHdHLDc/QyNeXWVPRzchQzNEUCkuWFkzZWxjb1t+NUIzZSFyWV09QiZiZ1JPe3F6fVNIcyV9bS57ZmhgT340O3xfR1Mma35qISJSSnliaXFoN3VhXUJXX1FodiZ9OD9WWkFqcWhqaXtrOiZ9bzdzb0Yxc0ptSFIjYmpMKGs0TztrfSsuWH15JU87aylPeXJdeU1gKWt5''@;'; put 'put ''TlM8MzFkTFNFUXx6ODh2XngrTzB9U19KQnJiVFI8bk9dNVBBel5CMH5VIkkmTnVAST9Oa0dLTToodEZScWtHaV9OKkx4e2tZc2VyP05CVDs6O017UiMzPnlbNXBKTHwhJG5AMHF8R0k3IlZgYyI4UlZ3TFA5ITNiSyQ1dzYwdSN7Mjs6JSpJMjpLTXJQXXtIdzVxfm4oVkMvTmJUOmR7bT9DaTh+''@;'; put 'put ''dD8oUkZkVTdUL2xXeVclUVhGWGwiTHY9b0RrPSUsezJEKWAuXm4lPlgqOzl4YVVDNXl+MUkmaHVJJkFqYmliYnx3KEIrUXZzWVshZUpZV1hVXVdwP01CRGZXfEoySChEUD1gcC4mWylkZWBydUVGJVcldihCe3UmR1hDdWFZNmdJezt3KS57MTBxO3tYIW5UZzlyZV5eJWY0L3MkZ01tWyk+VzxW''@;'; put 'put ''U3pyZ0ZQPWwyN0pmKiZLaEYhQyhgfjN1Nk1zdXcydkJIYyhCTz1YKm9jXU98QSxWeXs0aClbZSV1cilHdStwXzs3cjhPIiVqe3RwciZNM3UqRntVL1Q/Y3tsRT9pR2xASX4kdD1YfiwkQj5WNHhfRFdST2JwRStnLixvZXdMXz84ZXBbYTVKb1VpWU13bDFzcFBLW2RAOG8mKWZgNkxeKSoyKTwm''@;'; put 'put ''Z0k9Yz18KyVGUlQjYnMrJndueXhjSmZKaFN2WW84QjdBMnM0YmpnTUFKKF5AbHQrPFlfY20uL295aEREe0FsZmhbb0VkWXVCLGNVXTRyL30/fis4JXRERVA5KVQuJiJ2KnZUX2pPeFRqRXsuSkFpPyF5Vl8obXx3OH5lQGhbTiV+QnBfaTUoOXFdWiN0bygqejVnKF4wO1lzZ0VNOjFeSTMrPWxs''@;'; put 'put ''OGh+dWE/JGxlMkYmVyRPdyljc1cqNGl6YzthQ050ZkxKanEpQzJMcHZMcmouOCU/ZT83ZSV1Zlt4YnpGZV1MfW4sflIuRHYsNlldJjFld0l2bytuOntaQnxTQDpRZU1+cm8+byE5T25VXV50cClVajM/Lm9bIXAwIlJ6bXhTT0g2blYlS35VIz0jXnN9QWN+STAuLzF9MzdveX1pJDI7YUBlX1hp''@;'; put 'put ''U0BtYy82dUdzM3UzODRrVn4yMS8kVSx8fnVpJDRYZn07PEslOEkocDBdPjRpNi81UV8/MXFGdj5pR2d8WExiTERhe31iS1twKjZKIilzQF5Ob1RHPXRlWjc/MU5SaWVHamp2UmRMdHdQT0BBR0hFVnVifkZUL2ErKUkmYCM0O2J9PkYkbStkZFJQVDRta0IrZlUxQj4xIW9JTTBiQkczMmtzUShH''@;'; put 'put ''eD8xblt7aHEqTVY5WCVrPjpweXg3QiNuc0V1U25JW0N5QXleZXkkOj0wZCRVJVJ1ald3TC5MYj4xZVgyIyopSU4vJmBaPVguZSFbXSRDay5bdj0wLzcra0gwL3d8Llo6b1pxeytnL01Eak5zS3Y/RDpoMVVXSzIvdj1qXilGeENTVHRWRWE4YHBddUJnL1VyVH4memtEYmtLeE1KbDlYKU58QDhZ''@;'; put 'put ''ZzJrYGl4IVMsfTRLWU9sKENGNz4vfFZhRnspR1lxSEliRkJDQWBJfStsb01MUmN9Km4qa093ZHN3SnpVMHZNNHdZJHw4Om54MTNiKUQ4bzlzMWlEZWQjazlSRFR+YC4qcmNkT1lhakclWWJqeWMreTBQVjtKL3BbJHAyWVYzJmNCcU9UUTNgPVhdL2ZnM1NFdlJYUG0xfHF0M1tERHA4cGtwQltg''@;'; put 'put ''e0hOOyp8NmI2czNyY2s4d0w3aWRnYyJISlh7NTpKNmNkLCRoe3xdUzx2YXlgQEpCaE10T1A/Il8+d0ZYfCJ0NWxOJEA2PDhwZWZfb1t9bko9cXIiL29bLENINHteankzNSE5KVZjKF4qTTNqTVo2XTxKfHNyNn03Zm1lNVtMOnt9cVlQfU47anhQJGZrLCtkXz1Db2U0PntePiMzbCo2QF1AVT47''@;'; put 'put ''Wzw+Z285VyNFOXQ7I2BOe1FMekxwJDVoe15LTmBCdyU8JXc1I3BbLEw9QDNNO35uOyVqOkAzeH5gcWp4bVJyTDdvZnwlOzQ6NCopWzEvVjUxRGhVb0IpLj05YkBkXz5yfj0uQ1hPKjhCTHw1YGI9M2BZO2xFT1FvMU5nbHx8VUZGOHMrXyZdfSo7Ki5mXzEuQXEvJSxzPy5PfF46Oi9rdDB9VDx+''@;'; put 'put ''PEJgc0tJJjpsWGtEPUF5aENkczwoXz4/TE5MQm9hT3E4Uig2djl2KnZDd3hESjBNMDR3eERgd3hEMzp8UTs3dThWUlF2XitJU0tIJV4+OWpYXmUqY0ZLQ0pxSVNoQH0zRnFSQ1l5RX57OjczSWFWQ1RHS0codUUiLnlYUiZwKCR3cVh4VGVye3t4eX1RTVk8W1Y+eyVzIzt2aFU8JSlWY1tNZztk''@;'; put 'put ''T3t2Pko3R1cqaC9WdE13OC9GRzpsODliPXFzO2dyW2ZtXjwzb11oVWBlOHg9KXhdQXFNWnc2TmUybTV8YkRbL3drfHFgcXd+LyZaRE9+SUdDPFs3az1LblchTWxIbFA9dTc8bkw5JjckcHYjYmhtO19OTHh8TVRwbWUhYWhPQVYuI0s4fnFQQDp3PlNhNmNWPmU2fklhWlYqN2RRPHpIPHFHYG8r''@;'; put 'put ''XltdfiM9cHt3KF9Icy9WZ2ZPfmJXYTJFR1NXKyZFYn0hMzpGP1dzTn1RVW1HYyk2OXQ7SC90PT1ecjxmJEFiOHQ4TGZKRnZJfEU5NV1lPTpGU2FyVGh2U3JwbXdIYipAXkdoQV53eyI9Yi9FPkFLOD97eyE9bVptXj1ocl95WFpTOj1gT0RxNW9DXWJZSnY2PWFJbHUveURAWUd5YE5pa1dfUEAr''@;'; put 'put ''OUxgZVpkRmI2UDB5PDUyK1JgYGJ5cG9xc0YmT3JZSEBzeVNrWT4hT2EsUWZ7TFJ9Q2V6RjwsLGZOYUQ+Ij8/Lll5KXt1Xkt4WSEvOWlpaitDZXtyMj9Re1pPZ1c9al0jVlRbWz5mYTtAZ2tXRUsoUzpwUVkzWjBYVTJQPjpwPksySit6aihufGxiKUk/JVtYWD4/NzhDKj9manVnQ1crXnhGYk1I''@;'; put 'put ''Rys5ckthZmRJZFBiVlNAOmNmZnpUQS8ifT42bnp+SEZrRH0hWkxzLjIvd1hAIUhZTlI7K2IuV0NINyF4PkRVblZ+KWclbWgmbSxKfGJxPz92Wn01ZlghRXU6Q300K29hd24xJGE1L19fZCE6fXhpLFBnZThrSnxkNzFnbiR0RTRFeShCUWM/I3JmQDljVU0qRHI4Zj5eKVI8Q1lzelhhelZWPkBG''@;'; put 'put ''bHdVKkQwaFRQe3VxVVkqSWJVUXZQSzdPSnBwMyU3IygwcVpYQHdTX1tsdmFCISojKj9nanY9Q1cqbV9WK155W2xwenlTSExLLFFSS01SUktzUlJLeFNsN0lOem9MfTc9PXI8Xl87JSVnX2AmT0lyaCRKKTliNjBIcFpORFQ9M1JmWVtMSnkkWjc9Tyg3OHRAME1KSzw2TlN0KmA2MCtjZndyWUV7''@;'; put 'put ''fUQyInNWOjNPNixZP3RyaEw4dS9wS3BsIXRLUSoyRTpaeFFwWW5fTmZmP1k+MC5leF5GIWJnLEZAV1YyMEFgJSpLfHwqPDFEZz0yYHFMfX0qTz9ecT5mITVmRjMrJG02REIhW0QzJGorXiRdfFBoZ0l2aXJYT0tzO20sQSpGQDlzJUhkeEFlR0VjZHk9NnRtZWE5aSxOb0YkeHl4RG1Edmhqc20q''@;'; put 'put ''Q2AjN1hbSUA/ZjBgYjlLTDU7Ui4mP248IUp+bHdvYkVpTnRSWEcoZWl8fSkvc0Q/MiErbSQ7fHZxeH43RU5+MnRWOFgvJWxlQzhKITJxfGA9c2ZUO157IjZmQWFtMDkmLCoxQF5+OEZVfjdoPD1lW2AmQzt6MDFLfVV+X0EvKD0reHx9NDRyd0cvQ2kraTRTTXVZSGMxI21yMXN4XWgraVRSXXwz''@;'; put 'put ''d3AuUCt1aCgkOWtWW1Y1YnkoOS42QyEzXzh4fH0vUXhUKkhrTG90JkllKm1pUEJGKylOKmddeVMuX2YrYEB2ekldSUl8IWNeZzM6fSpnPDUkIVJ+OU11UVVoTD9NfndrfUBLc314cH0oTntrX3xoUUBZQ31MYnJGZUJbb0JnKD9xbyZNbixKTkBENVF4JCMsNGE+TClgfUtOfVV4dEd+eElxcUpF''@;'; put 'put ''b0RSWCNRbiZoJjtqYXdKK1ZRQyw+JkE+Vl8/anxROnE9fWxASi9yYyliQTBtd357W31UcklWPW9vfWwlKjZCPixvbDs3aVViR05JOmVVLn5yPmt0Vls7akIzezN9M0cvLHlnNEFqJT5nMUBPfSY0LmkxZFZCPDF9T0hGPkxmfS89MSxLTk1EbWJbayt1UkdPUHFpUjU7ZlhYZmJuektlY3A9S2RV''@;'; put 'put ''bkVoX0p5TXdoX1V4MzNCaFheeG9UKX5ITnhGWVRfNTttcmspRDpwQyxIfnJiQ307TFRiRVRscGIob2dtVCp7UHU9SjN6NnE3Y0gsZm9hM359eDM9TUtJZlR4PGJTSmZAOl5mKWRIdV4uOj1MVy5OK0Zxd3ZpXV5DK2lJSyVzJGBKfDEuZ0pVM05xWVMhQytuYnVlcGdbJER6dTVhSTpsU1FZakdS''@;'; put 'put ''bixVMTRPczNMUUQ/OltCa11eS0NgQ3pXa0BRNjFIdCtBM2E3YzB3P1gqIlhQM3BsbmhNdFpHNF44IkF1a2Z9RVZtRSpfYmhJX0xqWT9sSX06KWp6Uk82OE08JlZjfS5QejlLeTl9KCxOQzw+RkpGI2dGUG81dVB7dUJHP1Azfj4oVF1ZOVh9YXtyb2kvYSRhQXlrfUxHfW5ILHFeTWFbVWRIPzZC''@;'; put 'put ''bHg3YU9NYiJOJFt5e0p4cmcraX44M0MhUFV5KU99e3N0akBaXiJIUndsLmkkM3YibW9FenRmRlR5cyZfJTRpfCUkOnREaGtdJU8zTyMyI1ckTjYoTD00M2BXNSklTG9vPEssd3dxYGVhbVs/IzFMblZWPnROZVlIeEBuMnhaLEdBVzZxMEpyRjorSjlFKSwvN35Jc1FmUWNzRyJrS1c3cE1ZNDtX''@;'; put 'put ''K2Z6dFBMd10uXUEzeGpXISVMLG9YQyxOXn5BY3RPbkhlZUx8MERYMFs1MUZgdTx3ZTN9VW1kSiUwQjxdPlcsUiY2Y2cpRDhIO2t6eD5Ve3ckfDxBbGYkRVtnIzpdQyMlPSpRaERCYkkvZCI/cDVEbHU9XjVWO1ZCbjd6cSRhTFo1djUvSn1hKV5IM3xyOy9EK0gqNVFsTXFlN3lfVENBWWklZmIx''@;'; put 'put ''WVZfRWVMZUY4Y28+KkNvMEEmP2VEYGFBbCNtPmI1fCN0I2cuJnpyP3JIXVlpRkJiQndCKGg6JjYob1N8Sis/WjtqKU1QdmI+cDpPbUt1cVZoa1JjSlApSFduOlF3ZlkjblkoJXZPeklwJVN0YEBzTXJFP25Sc0pWWnpUaj8pezlKJX5db2NSOmYuWn5lZkY8SUNPTUw3fSUkRiU/NSh5WCokLFtN''@;'; put 'put ''XWFJaT5vdTIsalkrX2FmMmJhPVhfT0VeWSxKc01+SiptKmBhUDF7MlQpTT1bZih9Oi5BQyxvKUtbNF19Q2hCRiQsOH5FSy5PXikxYS8vNXdqPU1La303WlBAO35ZcjlscEVKaV4kdnw2UTB9PE1RVXdMMUQ/Tm4xNHgpVCFiSHE3O3EqblY4dHwySishSDVdPFY8XXgqYD40aXNIbU50Y1VRI14q''@;'; put 'put ''L2ZTOExbYD0zYWFwel18bnJELjB3JVl8TzgzZnQ7bjU7WDlOXSVRYUNaWSZZdU11W3dXWFVCXzVmXXoxS05eNztDSC8kKCFCalQ0N0ooVnNPL15rJGVuckB2cH1gd3B4M3FZRnpzY1c5LkE5R0Y9XilGaHo2Y2dqZUJvJV9Ad3B2LFZjQzQue0ZOYSRPTjNVWGBHPWBaMyt0T20sdXRjOHJvczVJ''@;'; put 'put ''ZkdkM0dmKzdrK0NjKT0wM0RYOHJwfitbeV9URFd3IlkvRiF0bkxZfC9kUURAV3YqZzs8LDptTzpbV2w8NF09WmJqVDRoWGNCelt9ViY9MDNeMS95RS5ALH46d1dVZ3hNUFNqMDhYK21CT1pCfmdNbCJdY3dTSitzdDcyV0tZLzVpZF1SM15xTnpUQmNRKkQ4bzEoN354UkBAb1pxckIrX09pRUVK''@;'; put 'put ''aWJMO1Z3Pil0WjJYK01vcklhYVJQMmJLaUxEVVhvZFszbk9ndCpJajhyUVcpLF5PYn5wS3h3R1d+dzx0NilCLllYUVdWZH1XI0dEcXomaHVDWFVFX2VtMDx6bStsZzNKTWdLKVgkVTJ4czgvZmlULF5SKiZ4eUxIa25KTCleY3hgJmxBQDU9dUpBVX4zc0NlL3ZxPW4iVXNpaENyXjdrYERfXk8v''@;'; put 'put ''cT1MS3FFbGB9b2FvPVIpKUdVX0liKW0rayxtRyo4QkxdITt9blBHKTchIVdUQEJIUUNjN3RQLiE7TDl0N0xecylmeTIzT1o1aCtoX0J6dDhBNGhOYnIsT211Mi9oMGh4eT1HNDppYF4pfHthcGVKTmxXWDlRSmBbWWl6b1hWRnJtX1EqTnwpbko1OmB2dXQoUj92fUddKlg4Z2dJT2piSmtaWVR9''@;'; put 'put ''S3Y9c3toelIzWUMmYEVUT1JIJSFUJnNjRkNEVXFufXR3M3JufWssP3pETFBOQlc6MVlTJjp6alJDSmk3ODdjXjtUVk5GL2hiOUw8TiFCUjg7NlAsdkRRaE5QQlAsb3xeWnxKd0o3M3R6bi57L2M5dCZ7e2tLLERpTjguLG5EYVZRS09fM1I/WGowSGhNO3YvNXQ5PThldHlfNVJCa01CUlhNbFMj''@;'; put 'put ''QHArXjU6SCpEc2wieEtaYV5LUCZMSUV3ZHVgMnxsOVQ1JT9NaXxZe2l6cSZhTl9eQVg7d1R0Q1A/JWZbNythKnQ/VyVTdUdEJltwT3A2MyZZPExzK11GTEhec3FqVz0pVUE2LmIuVHM2ZzkvdFJ5USttfGhpZWo6c0l9aFdhJkI0eH5Pa2VHWkAhQF9zSV5mYFpnOk9hXzlRe040JCRpKShFNTsx''@;'; put 'put ''RSFlcCtDNz1jS18zdTQsV31qUzAjKUBxaGNaSFFkdyhheHp0YCNKKzQyeCkxRmR9JC4oWyo5UDBIaCE0Ty5SYmU3anM2YixKUjBIaCE0Ty5SYmU3anM2Yix5K3I7M0RGKylOQDFLTWMxXTFMMUp5ZGVodEAxNE9jYENgLEQheWUwMjZAQERAMEhJQWBLdnB0YDR0b2A4QT9AUHVtYHxuKkdxcj1p''@;'; put 'put ''XlFKbEA7IixyZ3VvbXplfVMieFVKXy8qQ3Z+WF59bXhDRlN6SFB7VUJYdU1iWm9PelU8RGVASlVCdWgvX1IkPE8wJWBnIXFPOGhdNUZOT0JSWGxpKl9eTDtSZT1kSiZNLzZuIy8xK285YGI5XV5IQDU/Uipmb0Z8P15VJnYwZzpgZmRtTmF+ODo6ZjNsN15AQC9XSF03bnphRVF6QXZEIWF4SSRX''@;'; put 'put ''fihiPyZJR0JNa0JXfnh+UDU3cDl3SkRmVyxeNkhgR2V8L3olclpVNlh0Ly9ENEZZcDZ5Sk9JdTV+RUdlTV9+bk5MN118az89fFd1P3BTMGpEYCI+SEx2d0NaVmU7ZDR8OHtnJmYxJilYczp4ajs2JV1eZy9jIkRVe3JXfVo6dHpdNnJ4PXF0el9OZT1YO34pRH50NX5nMWlOXXt5dmV4RiUvdUd6''@;'; put 'put ''SS8vejIrRE9MMSh0LF5WRyNJUU1QNF1NRHomWnlpPTBiRFlNcURsdF1UU2R+NWF3MyhaUk1ZY1dSSGwpO2E8RXF9NSImeXBXajA1UjBhNEduaXNuJmBKYyFHMWIrdVI/K2EsPzxoLkdVbXlOXWgvVHwmeURgVyozclApZmFJP3ZtdGthcX0ueiU9I20oQlRNQ0xRYWkpOzhyPCtILCZpeX1FX0pT''@;'; put 'put ''VTAoWnxLVmNZIVAzT1IpUHtNVzxCLkE6TG1nNypgb356bFAkcjk0eiwiKk9QX1dYb0JgPkM+Y0tMWGJQRGBOX0orckhMXkIzT0h6KDN1cWF1X185UFdBJltbLl9+KylfdiFjInp9eDRkRXdUY2RNV0cuW0R5O1UrR1hiaF1XeEAuX35WTGVRLHZkJUdMOEc2OHRiX1BqX2ZzQVIqTEl5I1liSDZ0''@;'; put 'put ''QCYpVnVPdnVeTnIvTCY2UHBJS0pzemI0dEp9d2QvcklYUjZZKFZUaXAiUUx6aTRPLywqVEFJVk1lY0Z8R3hYWWlFfkZYd2w2JFlAe3BVblouQEY4MXR5RUhOKCtuZzAwWXNMKGNWVUNPc3BCdWtseFNmPGZ9e1hEUXM1fm1ddjthb2s+PlhxZDo+eXh7bldRQkhUUmFLOmdSaz4qIlgmKk1SbU00''@;'; put 'put ''dTRzO05nYzJZY1coR1dGOmF7M2NKPW9qTTd4JH50aFFeSWQrYiE+SWhdd0M8YEdpV2QwM29lNVVYKnkzMn4zL0QhYk8scW5Ob0t8MHZeZWMwaG9kYSI1eFdScCM/RndoKTMrZ25OKmAoSCU8cEVZeT1KJmI7bEUpcmVfPG5tPSIxb1kxVHxQIlJbYHlkI2pjQD85YHBETnd+eE8jQ0lUXXgiS0pO''@;'; put 'put ''VzdSWHMvMT12OF93TFlkeGdVNGk0VnIzQzNVfVhpV2M7RmBadUljU2NyU1hHZzExfiZjLzZ4Xiw2dioieitUUnY9QkxlMC82b2dhY0E+XWwyKyVJfUxffkl+MjhNfVtrZWFxNnI4SV9GNFVlRk9OU110QWRQIzVVRX1dRywlL0h2c1FvenJWZCtyJU8lS1crODtHYHRpa29gWSpvTSg5T0R8WXhw''@;'; put 'put ''Sz9mQXVvckJ3dSxGKzFLZnZmZzBIXzE0TzlpYmUxajI4UCxnZWwqczZQLFBmMTBdMU5QeXpHMzUlSnl1Ymo+VlF+PTspYDdPNm5ib1RKVVpmbUJmKkx3cFQrPTtyWFZ9ImpuQ2A4d0YvUCtoTHk2dUxWeyNJKyZEP05DLmBFdWVKN00xRGB1dz9DQGFGZnRPd0RQVFJEYVhEOTRJMD9EfUd4dnwq''@;'; put 'put ''ZX0hV1hYMnkkNiRTJU1+NktZc0IxY3NCQnp8c3JXWylJQUtvc0J8V11zQkUuaWwrWWgwdz98aWkzRDNtRyI3M2EpVy9NTTxSZEVbeiNhWmRPQSUuWHwub2VxUmQ4WzFwX1dZQEd6a2J+Rjw/YHY/MkY+USpyMUwuJF5OZnlpJD9rb0VvfHBCV1g+YmI4TXF9WUI7YFAzJVVVaD8uKyNTay5gMlN0''@;'; put 'put ''NzB8Pz5BTWdZUl44LytUQD9UfVBmSXchNmFHN28hNWlDcClfNVc2eDRkeDxjK3VPcCkzfEcuRWd5UVl5NVYkWm1pMyRgXy5IbVFGajsiZHR4NX49REU2fG5Gfko2ZlhqNnZPRWQ/MSE0UzpZMHI2IVVINlM1fis/e1IpI25SKCt2R0xfPW5IalRWPEtgRFQ1OzY9MDNfMTh3RD0zemRXS0hvTmYq''@;'; put 'put ''ZFBdWi5AWVlDRlJUP0ciPVhGNzozJjU9VXw+fG9pWSIsXn1kX2F3ZH5AUDNBaW1lO11PU3c0e3QpYiYwWEV+OnlINV0lcnBVZCFZeEF5dz08fCNjYHByPyNuXiNRKWg6SWMwL1trYyEkJDx8b1VdMzZlbiVGS2QyO1YxfUJGTXVzd3BvM0B0QC53QndGRTVvWEo6P1J7JW5RYU9XfXNweVhbJWlK''@;'; put 'put ''Y01dVDQ0QGtYSEBrYlFNKGQ2NUYyXiN7OjV3TXpXcDt2dV0kNio1PSJpKzFhVE1QNHlNJmJtK3klOE1lYFIqQUR+RTxhPGx5fExhYHBRc25EJE40O15VbU8+fXg9NT9ofjJLKmdLbmI5I05xSHt6aSw0OWhXRShqRVFGOkdUb0dWai9DJTBmWURzeldEaXRYWyMjJT97ZlBfb3BXQF8jdDtgZm5I''@;'; put 'put ''eXorUkM2NDUlMjZ5ZFVdPWxzQDRyM1E0L1tBZDZ6fk11ZEpeTU0pK0kvcU8zR2MhYFQzSUUrVUQ1cTFuaXcxY1NZPlZZaVlVVEhUTX1dfVYzaU48cU9qL3V8SzZOUnt6VX0/TiRLdUtLMDxdVDQxJWlATXE5NFApYll0NU9YK2F3Pjl1c2UyTSVCPWVVKFlFeT1BZHo9S1BkMFR4OExoaVAoeER+''@;'; put 'put ''WFpGcXo0b21PcX1tNV40IX5VKlg+JE06ekxuUzY3QCQkenYjR1ZkajAiXklTZlRTUHxKflVoSGhdVjc7biM/clElT19gXWQ1N1dHOEhBO10xQCI7aDxGTkJ7UlgmTEheYXx1JUY0IVR2KzU9QWFAS2N4UXF9XS9NekFeTnBiKno2blgpWDxJYVhuK2tkOywqVzl1OFdMNilWYWttSXxhVXY8eVk1''@;'; put 'put ''PyRBMiRYOTNXNSlbZTxXRkdQSVtHK3syIWgiMUYsMCtIUyh0NHNoZGpbXnNbaDlzI0lJTVRzSV0oTTpiKVAoRUU0aWo7ODxdQ1YxcVU6KG5hfl81SzIrWHB1MCtkPnpyVSF1RGNCLHpnVXczXXYkTCE3dm4xMiNeXXptQytPUCE/PkllXXRSaktReUE7RyJ4N3h5d24wS092OHJ8UU9DLjVhIzFE''@;'; put 'put ''Uz1zU1N0YT9YZiohTUFZbEB1VG5QTVkmbjR8MXFvUH1tbysrQkV0cDlbJGM0YV1LfUFRPTAwfW02c3dfeUJIamp6RnVzVGRuZHBBbmhJZmYhLzl+Vlg+O0QpR1FYOnNbJFp2QipCZndPeWlSJntyRyVHWSE2T3pIY0B4KEJGWGc6aUN6K0RPQXpzaGI7ZGYmMjM/XTQyPDZZXXswbnEvJDRvKXds''@;'; put 'put ''OSM8Jig9I0diS0t+VXxBV05JX1dyNWl5azA/M0BXRWNNeV5kK0U9Pyg0KHh+Rmg/XjZ2dE1mRzA1fiZIPUlVQCp6bSZ8TDByYFReeyordjp1fEMhaz0pYDR3Q2B7KzcyUj0mNTdQV349MkdmUHQ7I2pNM3NBWEkyM3svRyIuXn57M20qcWpnZyIhNilvK0FvakBfK1d8LCV2WXheRThbfEQ2OWZR''@;'; put 'put ''dnR+RWVwMzp8YXc+I0FPPER5WWc6cU5ZWGowYHZ5TVJ5emZ2S3JhOXYpUiY9RDpyMGAsUD99VyhueGArTXk9PCtLZXd3UXFGZSlod3ZOT1FQdCVCWSw1cDNFWWojRU5CODcjdjl3byspOVNedlNlfGdwYTZ6I2VyUEljYmlDMjtCTVgjOUE4e2MoXSh6MF18XS45QHR4Sj1gMHtlekx6bWlWOHBM''@;'; put 'put ''K3c+XzgvTFIvQlVNX34uM3EpTG9FbFA+JXlvOGJ6fGd3bEB0Z1JMYCh6L3klPkl8WXtWZVdvZXVzTFhYYEdFV15vcGdDVVZ9UmJtQncrLzxZN1N+S04yYWZOM2Vde09Qek85PjZ9VG4uYEJZK080VDl7N1Z7eSpGLjI+ZyFMeUFDM2w/fStlXX1hVmxhfF5CVWNUZSt1Uk9YYUNzYmRmZGFpM2tU''@;'; put 'put ''NiE2aUZDVjRPPGs3YHR+MyFedzFMMmY0XjoiZjQyaXsvOTRSXVFOdDBXPk00PzVHNVJdLkd1T19+fX44SV17Lk5mK0w0R099YjhIdXIuRlkoW0ZHImtAdk4qXSh4Y1VlVEhNQ1RqaVNDV114fD98Um9mIVc+SngyT01gbjx1Y35WWD5PXWkvSntHRHkpMzxjUjNQaENHIkxSaSR1WmYkS0JmZGI0''@;'; put 'put ''Oz9qK20/RFs/JHZMZlFzRFd+RVFWfm84JS5PZk5sMiswS0JkK2RLNl1nNVdWa3NQfGZ0QSVUK1hQRFd+XmQsezVvMmkwMltCKCZrektTdHM5TUM6VHR1c2ZHXXtOZHpfdUJTLH0oZkxQal1ITEJlbGBlIis4eVkoU29XTDd4Yn1wUHdZOnMjYXV2Myx9P2xocDlaIlsobEB+dzZaY0UkMiQ2Ollx''@;'; put 'put ''azlNW3BjajpIQlhXSVAyJX1+UnF9RyouWF1eQXhgeExbX19SQDZjZTkrfGsxfnBLSX5nSyVuTlcjTEhXfit0M3soTFRAZF9TemghZHxaOyN3bVUpcllmcEIlIXwze2hVQEtjaGgkIUJwYD5FfStfJng8eXBXIjV1c2IyeD1OKHZwZjwyfF5TPTRwd2sxY3pGMls8Oj53Kz5OMWpbVFk5ZDJeayFM''@;'; put 'put ''JWlsRyRZcWt4ZzdoOFByS0pPJDI9fFNQOk9oWUpTfUJsY2VFVD0/TyttfjovYCZoSERZMjN5RF5pe2NhLyJzfX4uVCEibjd0XjBOeXs0dXZxZXtmKTVBSz9Fb14obGFweXg/Yzh+bH1SKCl5Pm9MZ3w4SHpOSDF3UU17Tk5IeHdhWTpEMn18fEJ4W2tmSlYzJXtyWT0/IjZgPVdsN3csW2hifWRi''@;'; put 'put ''PEdgR2xMNjEhNDVkdTlVOTtveXhIbnt7OWUoIU1vOHZ3OHI4YjRrSnA3TSVCWiRwJHV0JjpaVlB9el9bU0JXRENXflJvckBGeUV9Um8rJUdkcDolKDRzJkksWFlANX1eZXFAS3FwUCZ5NlJLL3tKZSFFJCJWMEBkVXdSMVU4eSJ+TnZbenBAXUguSGJMeCEiblozJEZgU0txKU83X0lvMWBifEh+''@;'; put 'put ''V1Q3aTxscn0/ZXBQa3U0czVxMzJobH1iNFBOWE17Zkp8cEUzPCoqKWt3MUZxM2BiYWRhKEd6Plhhez5DUWg3ZV17RHcydlI3dFlzW3BiR0dlJS5bXk93NFkwRGR1VWZrSDZZMEU6YGZ2T0g2diNGKEc0PFV0SFppbH02MFdzI31IOihSXzg2aClsLiNibV1mKWx+OCYlSC5xdjwzPWB4PX48PGg4''@;'; put 'put ''MyFoOD0uaWwrbElpQmxqW2dUUVp7c2QhWDpGX1BYaHNyXls1VT9JRnN6cSh7ayNvVyN4d3t+OChlZyVmVG44L0J7Wj9Oemh4YyttMWZbdXA5P3shWHl8Nno1fnQ2Z1V0UDgzRThhdDNwUTAjQENYR3dZbkAxbigoN2F4LF5sR3Y6NC9WTjF6Pno5RXF5JXlSW0pROFlBcUZyZH0lJlB+W31lMVRl''@;'; put 'put ''OEB+VSxIfldFcyZGMXxXPUxNdz86dHUrQW9hKHlrNDEkUntYbGp3XSZHXVBLbH10YiRYIVJ1M0JFc0t9Qi8pdXQ/aykoRU15Q20xYlR9aV8zdWMoVU4qXUxfYltURGxdWDRGZSx8d2kwfDVIUH54T2tePHddbjZjSFd7dT4vWF1HMEc7ezB4I1ddQEkrc015PDdfI1h1KDkwU1IyY0hPJTBYfDhe''@;'; put 'put ''PE1MOmd9NzhgY2x0RiQjfSpeZDxXZnNCRSovZllUMjJ+OV1WNWFeR0xfYEBmU31QYWV6dEpRRXg1OVckVTk/aGZXTFVEfV19OW5CJTBUZEp6Ukh1aDJPRWY2UXZwIiN8W0VLZHwuUEpPU35AeXtIfUpkfE5TVV4oXzVaeEs8bnZWVUNIZnZoaTJUXjZmWCxRamBlIk9GPFdeMX0+JlBxOD4pcmZf''@;'; put 'put ''Z0BUZFh9VjBVM1BDUURsXVcoQGVFKXxxa0w3ITN3dmNAI0Bud35Aa1gwLzdYX3NoSSh3STByTEg2RSlzTSxCSnpiX08xPVlecyh9LmpkKjFuWS5WOEQ3WTNNZC85aDExc2hnY0E7KCxpdiJRM25rU1tjVmpGayFwIl1pKGs3aGRUZTc4W0okMyZzaVRebkkpQ2BiLDZ5OUNTIkRwQC4rWyNkPmUi''@;'; put 'put ''Mi9UNjNRJT4vbStXZio2Yn4sbV9+Yn4qbmE2c2lvK0E9OlpAYWNyLjd8P059VSVAcnlIL1FxXyg+ejkoYyVRRGQqd3g9ezMhUURoYjVvWmBbP0hscjt0dEpOMUJqYkMwYSI9SUA4KU08Pj0+b3IvVUhDI2x8Yjc0T3Z9dzZDKUl8azdBIVZUWjQrJUN1Xi40NWF1bEYsWXFgNGYmMz8ubmtdNX14''@;'; put 'put ''O0NudHhaaU5mRD4ibHYqXUpNR1VOYyxPOXAmJT5nclUxIVFSX3EkfjVMNi5mQFlwdzlYQ2coQHk2dGFgNiUiPzhwVl9qSSQvZGVzfGBDNWlgJmNaRXssLkN+LH4/V3ZRNEZmMj0mM1s1JGlWOTJ8R1B9P2gzJC5nLjJ6W141SyR+ezZaelUxJXpFUVRCKj9GRk9PJF9sc3JYP0JXaFZKY0A2W2xM''@;'; put 'put ''OEB5Rns7aH52OyFVP0NyYn17M2lKRGRJPF5lcl1kQkg2Kzp4T3lwVXAue0xOYEF0MVtkdV08Yzp1N3d5X2R3VGkrMGMwIUsqS0xIYj5BTVdVLyphKnpNRGteJDZPdWt8YkRNNnJne0tJSUs1QX5AVlpoWUV4ZS9DYHZERXRHK0hxdGRuJSVHVVZRYnA6Kj1YdzpOImJgcFdTNSheVTxHMC85Z0V8''@;'; put 'put ''QW4/JVdYUXxtaUEpN3JgeEN6Lk9YXWJCWFtkQiRmVEQzUzJSPVpMXkN2PF9OZkJBX1oydj56ZEQje3JnJXAqTmVlJnQmeUxRMXMvT2NNfSpuUHZuZlVWOnR+OkdGekFMTWVBQ3R1Ln4ySV01NX54YXF9I2l6PWpfJSRFSUxILkhPKkMxRFcubjdoI2hnOyRySWlDbkJQcXZPaWY3Ol95fEJvWnZd''@;'; put 'put ''NUA+JUNsczNeYnddNGw6MUxOSDI7Kmk8L2pPUXJeNWR8WV16TXU/KSZ1ZG9GWV1vPWFuSHJnQHo+OH1mQEdzMTozTWF6WXtaY3VWYT4yc2N4SyNdSTNLRm99a0RAW3UpL3pDPTZiKVYidDYkNV8jLj9OalI5fWxyNW82LEg0O35TeHslNGBwZko6UCM3V2pvY1kxMFooTmlfZlk6TT9HOj89JDVQ''@;'; put 'put ''IjhrYXoreWh3dmBrYUBaJEpfTSs7I2NgX2JwKyNJMUdvaFEjaCRPdk9aQnw2bCNyXjRhdSFLRTh9Z344QCNuZFMkVDxtZ0w4bGkmSXZXRERdIW93KT1zLHAiJmx+OEc5ek5nS1NyYFUhVD5xaz5BPl5xJl8rOUZQLjJINDF8T0wxRCF6QUp1eSt0Y1U9MFpYaDokTllYaDpHTHQvbShRdFQqNW8p''@;'; put 'put ''cmlgIyFxPTFeXjwiOEJfQXF+PTQlSHdbTCRnTXV0W3p9XiRRYHApYyRWWmYlQmN6dUF6YTsmSDxWUmApOUJYcHF2dyY1Z1F3S1REJTlnPlFKK3pXY29GKGdwNlZGUlZ3Uk0kSWQ/PTciMDBxfU9AeE83X2wpWEpmV05OSCFCNzlvNHxVZX4me3tObS92QiNALEY3S3xxKkUoVix+UyFyQGY5Y1Vl''@;'; put 'put ''VGE6WyZbN319Pjg1PzRGezQ6Mmp4RklUTXxjR0F9YUA2Tk5XPEk6fXJwcXNEQGdFXk42OG5ZTUd8Jj9lT0xiYTZAIU5HbXNLX307dWFpMGQzTyZZfENLbyg3fmcvYmwvcG83WzBQdVtbLD9NK017UUVIPT4iQSQ3XXFGVk1YLl5TYyNaUVNLTzpDMEt0c1hWOj9meHtPeihgWCFHX0wqMzA+aW4/''@;'; put 'put ''YHZITlZWWFBBLFVEajlrXXEmPnhaUytfeGMqTVhOMDQrVSJ9eDhQaGdydiVXZHgwSFMralU3fDwmRksxPSZLK2JYVnVYS0EmUyNCI1hCS2Z3e2pAMClhb2xGSik3V35sMWIoKFB1MW5WJT1CK103Mm1BbFtGbVAlJVZQJSVsaToxaEJXfkVwSmEoIWN5dF1dXl11PFg3XmtPWHhUW1o7YkplPG9n''@;'; put 'put ''TWgyPUI3YjZjJXRpW3dqOypGbHt2by45XTMiViM+cH5haSpxZHxuOGkkOmNhYSpYNGNgLDtvdWJUN0kvRX5nOUdueHZNK2RFfCYuWyhiUTQ5XlJ4KHUjemBtVUhiIVBsaj09RSZDWVQ8Mz0qZldXOXV+JTpqTGNWYUNyS2U5IjtDRzJ+dk5TRl59ZDxWIWFOMn4ySXo7bzExPTYlfjZHN2RVYDhm''@;'; put 'put ''Q3VARmFMdVM7Q3hJTHBCJmguRnhva1grNTReVXw7THlzc3NvR1kyaz9mcixKPjElIkNmJnRzRnMuPFFqKSViZ2IobTMpWzNtKE9VNkZtMFpkQi9qKFc2NTRBYzN7WHM8Ry5aUD43TUMqOVttbEREJERRZnM/UU15IkoyRyNzJStudnxxYypuJH5hN0t3SDg4Q0tOJFFiWi9MS05TYXd5dltWbj9U''@;'; put 'put ''WjY+cnc+OENDbjVvQ3I0RGArMyRmYkJMSktfJENxS3Mwd1VRNjNwdEZ5bmdXImByRG82Kjt1JHRCencmYXdWSlB9Kil2Q2RZTHxpVDVvdUdgUWpxbTtYeU1+SmtiOHAvWjxOfC5jSSFhXjRyVl9EdVRfej5lfFpfKGl2Jix3PSY5JF06a1dRe29vXTdIekpRJD8hPXx+ITIwfXI9U3ttKj5bPXBS''@;'; put 'put ''d3V8Q2BiRF5NXz5GK1VOKU1adUt9IysjbllSIXd9RWh+ZVcsSlVdZWl2cjwjNVN3TnhBdUV5Ykp8cjRfJFs9ZkBrSk1aNWRNOmR2QmQ9ZVtySS9rKHp1bSszTHFCNndlXyMkVjNNMj12dz1XK1J9MD1lPFUwb3BPX0gmVGkyXSsjR0h0N0NHbiQyOih9UmFaIVN4ZmI6JihtMl9xP01aP3g8NSJe''@;'; put 'put ''YGsoVnQxO3xvTk40ZSlpW3VFUXhYWEhAKT9IL2kqZkc9P24/MEBdVUNgIU9heEZ5dWIiZGdfbz91cWcwb3s+Ong2SnJ8dD9eKXckIUlgY3o4Wmg8U3x+KiteUDgrQGJ1S2pgI04xUX1QYHJ2SX4wNFFFT3t2cnJnOEQvK0xALiZYeWR4RWRSYllzPmVyKjE8RmRUaUpHND1CKFRzMWhVKjZUTnNv''@;'; put 'put ''RmQ3X143JXslQnVfYEBMV0pTZmdWRnNtKW5wRShGTCtbTUNzfSpvQ3cpczRiX1NGN0U5OmZJWntqNDtbOlspPXYzXWo9PV8xPVYlJGBiazdwRWU+U1I6R0pYOTROaF1tcUJiVjp3THpzS35jYTZMQUoubSQ9KjAiYUNEQ0csT145PDpsTnIwWUxfcCg9UllKVmtmfVVAXkZbP293Ylt+V0ptWEwm''@;'; put 'put ''Kk4ofnFOfEY/SzMwc24penRiZmdOUCtbMUwkXkovdFVxcGtlMGNhKiZtfFYxODY/PG9WMnR2VmFaPkRyWzY/Wnd1bFFFSDM0V2U2Ql9wKD0wdm5AYDdmWD1vK1RgRyliWFZIdV8kMGc3RzxfaCQwZ3pHVXthb1hhb0BZcGdLIlU0O0Y2dXFVWSx1Rzt3OX4vOi9aJVs6X040bmNeX1VOXUVkU31G''@;'; put 'put ''NG98XysvbyU6WCNAb2FWKWldX1VAZjlUU3dIOiRVTzlqTTZUOTcuRm4ibiN6YjRzcnFlSXhCI1c6flQ3Py4kX1tXVkwhemk8eldNKFZhTSZ9YHAmMmBwdiNjfWlfZTdWTltUP1Excy5OLjJGel9PelRhWExHQTNdKWQzW3BLaDpnXk5tVyVffjcoZCM0Ul1se0tOcjtJPypiQF8/fHhmME99JjdW''@;'; put 'put ''JiRoSVQ4TzpTZj9xM2xwMEBdKjVPNS5ebD0zYEI+WDM+I1U+cHdJelZ+SWJ5MmhOcGQ7fitPVClhQEBdcXVFYXFZViIrPWFCdD9tXXhuIjMiKXFOfSo2P2tOQGF2SlB+ZF48fF5RYm1mZGhhaVpfakVEMUUvY2QzTmoyOCZTODpsbSFTRj1ZVGZhb0hSTWVTT3J7YUV+Vlpic0N7T3xDZDs5eil6''@;'; put 'put ''VDNpZjJUaTRPdDR9TzdpaVpnOVczL1hgVCV3PEhDbCxrUDZfOl1ZQzlqPnd4OzBiZWcheDU3OEZaI2BiXkEmQjo0PFtHLkVyaEBVSnJNJkwmMypEYHA2Py4yM3V2JUpDVGBXRGlSciZCd2pvdWhEWiFYRWZYXkh7UVtuMCxyZ1BkXXh4dGRrXiZUKDd2ZF97W3QwfUpeQVgqTW8zWWRHXlhIUWUw''@;'; put 'put ''InphR0B1WjlDKyo2PiRlX0gxRkZBIVJeeXJiXnlyQVhTQDFycCZjNFApTzx1cSN3MmZeTGwqe28ody5ZWkdYeXd5W2tea3tNUHA0aXBJPnRgaDwmK209R2xCUCovYFE3cGI+R1tYRHg6Rl17VHc7LE5vM1lbVzBXT3BTKjEraF8sTzlASVB8Z3NnflR1PyU3VVh7fTxhYUx0JXk/SFs5IXA5O10w''@;'; put 'put ''c3Y6fGZLZnQqZCU3QFNVfjI0QHZ2TzVdMTVVbyVtel12PTZeQG1oOXdaNXx5aypeJChRcWtobDp5P18mOiJNcWwpbmlzKF54WzR+MSViWFA+cyVsR1QhTkgifGwpPzR+aDlQTDU5WHs/KyNHOzlqaSFzKkMuVyteaz9mIlElWUVxfmA+ZWZBSElHJUVoJDksfjdAKzY6O0FNKkEvYnF9RyolPHd6''@;'; put 'put ''aGpuQCZ6a2VjdUFfVjtWRHIpJUdfREUkMH5dS3F9TnFZezA7VyF5ZGZudDFDfUo/N3NSNmA+a0plbFFIdiMocCQ5c2VBXzZVaHFsWVYzMT09NER1THhqVkIiail+PiJuVjoqK3N3OGRoPDkmNFsyIXpVcGt8LkcuWzNAfGF9NHZ9SVgpakx9SCQsZWxwL1N8dEYybGlBZG5uQFJvd0NiTUp5fkw9''@;'; put 'put ''YlVTZTBbdy4sOX4+SEJNcGk3UEFrb21ieDVKYW9TWHpGNjc6QnpXPGJ2fkxWY2ZLe302Vmp5XnIwKis+UklZaWtAejkhZlNvXUlaKjZPUT0wREdZaVp6Q0x+SDxdTVZUOVJdVz1kX2hIN3R1O1V7WEJjQ3R2czgjbXZ9QnQwMEFfcSUqT3diTSxaJVEsKWE5P1FjImlrYUYqTFk3PU02Tkt6T3wo''@;'; put 'put ''KShNRCoxIUd8IU13Q3oqJHJmUVlCP1FZQj9SemVrV0dZVDwscTNgYU97aD1McXRIM0BCfE91OkZdNyl3SGt6UDApXTE1YmI/cHhoSkNed35ran0vMjgmUlNAN3BidHhnZ2ZjWXlOUz19fF9TbHBKcVEzeSl6NzlQMHo3ZVU2YWpDOCohV2Fdc0VYcnh6S1t0M2M5UCQiL3coOShWaG8ycVtlUTRG''@;'; put 'put ''ZV90UGlAMnI0QzZbbzMuX2VKdXJjW3Y7SDorayx2eiM0e2U4dW96K21zS1EpZi9SVi56L2s9SFZNP0hWaVQyW2o8SFEsSmJkYHQpIlF3RChaVjByZipCfmh6MVtjX00sYUNkcE9NTW0jcilYMj5HcHRIUloyK0dzR2BEXlRFSDVxI0pDOi4wLHZhUjZZLCxKTF0pNHUoaS4wSXdQaTZJLF81ITd2''@;'; put 'put ''L1o9SHBMP0h9eSZafCExQjR6I1BNLERONWpRRDRPZkYpP21udmklSWhgT1MrWXpQPWlWVn4pTVNpMDdvdm96UFMsPzdIKXppfWpzO0w4PjFYYSh3N00uMFN6SCtJJFNXcnc0RyZvQSUuVjozYDltPmNacUQjPnBPM3NpOVZaLkRXPzIqL1MzTWhASHpZe3cpd1kxK0xMcCxib3JdNU9VWy40SyVP''@;'; put 'put ''fCNMOyslX15jTk5we3Rad25ldCx7RSorJGp4N0hzZTZUZ2dNaFNzN1pefG9bP10sZS56LGZfSnBLNy9mNlJdXnFdYUo7LCZrW3JlNElee0kkW3BMbSZQXW9eOCxmUlkmcCEoSkoiMFAsMks0KVgoQWgzKSFLT3NoTEdsb2NKJVJtPEg3bTQ1NH5WfU9wNW1mX1Jfe1k2R2Z4KTJKK19GPD1LO3FM''@;'; put 'put ''V1gzMyFieldzN1NWODdzXWIjP29iQDB5YDhhe2kraXEpJXRHPF1Ma0hLaDNda29jYlZ+VEREXj9+VkYkWildfnMrKVFVK3hZODFRKWFCOTtAZG1fLHNOeHArT18vTV1mXi4jJXxMPmV9ZTNZQDNEfWVRTE4laUp6cl1EeSw+OCJmPj5MNyV4U3VnflRBMyVuSUxGPV1XJCE0PTYlfG5+VDlJN3gm''@;'; put 'put ''RFordlAkRFA9cHVIaS9pIkhNYTFycVMuOHd0cCgrSHU5M2JyMDdbJGk6KUs8ZmlPIXpJYUVmcz9TbUspNSU8WyNHQH1vPGV3YChUTzRQVktJNDpERFRZNS5RNiQ0XSJad14wYDIoVVhXKEtSYm9LY0JmMntZa1ZbSzZfXkIsI2RgRV5bQkFJY3pZJVhTdDclWHtZPH5QXSFIcmNrbnZIfC99eHV3''@;'; put 'put ''PHl6PSVnbzlpXmlZWyRgeWxeX1MqVVcjUFBMe0JpPTZgfV84dFs2NSs6LDhDbiZTdCFgcClkaVlufEs5eUNedHM0LkoxdnYya2gmZSMpa1hwXiJLVWk2aj1GfW1BY3B4MFJYZSYzIy58OGByP2xlezlvZXQhb3R6JnBfR1EyS1o1cSNzb3NOV2RtMnMidj8leVUiPyFLRlU2ZTkwbjc8WDU+dzIp''@;'; put 'put ''WkdSZzk8aVM6fjF+SS8rXX0jL09iVE0jY2hsUE5EUylZcmN8T3FSX0NALC9OPVkhXy8vSzZ1U1gjUUJfUHV2fkpqdSEqLGVbUm5aZTkvUjdAaTVkL3J4MCE9UGMyRntZPkVJdlQ+dU9bXSk6QGNhXXh2PFNde1dhdDpRQkxuMm4pcDdzdGZPbkh2eU0uYElAWEBQUDheaj1GODpfL1hfIks+bjkp''@;'; put 'put ''YFF2dD04dyJJMV9oJl1MO1A8KV9XY00mVWZOPyFvSVsmdzg2QnBpd3Buaj5INEw2JF5+NnVOdDc9cz4oQVZkUjVGO1RNOWp6SndpVVJLbkxZZzJKJUZIZiNaTCRodDApJF9CQ0Nob0lKNzMsRC9GRUE9TiRCaTZBYUIkaz8pPzk7RUtLPWo7Zk9dbFp3eCY8JiFaISFbSTpEL0Q2RlNHcDdySyhE''@;'; put 'put ''Slc+PjROa19xJXU1MD8jMm99anZmJlJjKlpyMls5OzpUWTAkSE05el5LdElGKmVIIzFxT2spQE8re1J7W01FMDsyRUwwJkBxeXp7OHllQCw7RkV9PXt3SndYKEVkSSQyZ0RgNCEqQEw5el44YFgiVnwkXzQmdzI3Nk8/ZXo8QE9FeVs0QEd2UC5ZUX5tSjliYlBvQXUja2FaVWZaV09BWWoiNE5p''@;'; put 'put ''ZzRqOWh5QnkwdTx8X30xZS57dWZvI3B5Z1dDSkJrLlpYKSU5MXFbaCkyaCFAcnVTMy9oITwxJFRuKnZgSjQlaT49VUAhbCprVEp0NXJJYXFSbWU0NWFmYGhmX2YqWSNBQ3AuSFg4REomS0pPQ3g2Ql9deEFIU0lXPGhaRkc6Qy9taDR7YkdKTERgPU84enJ7Wj9adT5tZ3pxeFdsT29hTlBFaVNJ''@;'; put 'put ''JW9paHxFPzpDSzkkOHQ7TVRNRHZRfXMqVFRYNFNBflA2bl9sREo+RVkhLDVEYDBYWERgSXQ2Rkt3d3lBdiMjeFRlaDcwX3wvPlhML1ZWV0BKM0wxKV99Z1tYTHlLbV9MeShYQCNMSHh2TEU4JixsfEMqWTcwUV13STR7V2MxTWl0diUhJHAmVX1zQFMiIV40OSM9JF1MeURYcypTOEJ3OTlrMG9p''@;'; put 'put ''eDI2Y0xrbyVzZSVbYGYudCMjfVtgZj9pWl0oS2ptZks9RWUuNF1gZn5JTTd9OClsRmtlUDBHLmdhenReXVAifVRePnhJOkhPZ2o+SWAjUFpYamc8OStzJEguTTw2VzUwYC89LGg8aCFJVU5mOEAwJUk6WzxyVHcvSVMrOCxnXklzNDJnfWZpMTRJS3lNVEhjdGU6WWFeNlhicDlAYldFOzRHSC9l''@;'; put 'put ''O204ZmA9OzxmZV1kLHFqJXM4XWQsUGtTMj1ZfDhXUFdQPU1mMS4jM2dMdVg1PmxVJSZNWDhuOVk3REp8UHJWMzF9SHdNcSpEQiE4QDg+elhDUGYxTW0qYCNOa3oiemBLOVovcVpEZERKSn1fOHFqemkmO0IjSmtNNHR4O3pVO2QuLGwze3VjOUA9Z2FeTzR2Wl9TaW90ZTRwPmwpak9wLiNYZnRl''@;'; put 'put ''Yzk+bClqUXAuIzJnfWZ9UE9wLiN2bFpdemxgST5sRUo+bFUyLENqJE1UW0s/aSUmISkxbS98T2sucVptQ1VYQkl0O3p4V3hmRTt5PEEwRFRLYkkkMmchT2hTcV5IPWokTVQsRG56ZGhkbDtDbVROa158ZS5LVVpURz9Na1QkW1lGbSgvUiQ3Nm5nYiVnVHltUV12MnwmSSM2Rk8vVXFOWzNRcSZm''@;'; put 'put ''NVk3TzE5OUlGYypsLEZFL3wzc2g7NF1NfF9FWW0qRFJeKDIpWVF+Q08ycno7aF4zalBreDJMbXhXQiFLPUh0QWlSK2s/X0g7ei9gJnk5OTBsPj0/JTcidW1qQTJBX2pUJDRIRC5pPGFXTz01SXp7VCRue1QkeFlVJFBlWm1PNEg5Si9yJGNhfWtkYV1mISYrXWQsIW4jPGZgQGYkTGZoNTBocFI0''@;'; put 'put ''OmsqZSpNNTA2MFJzJTQ9S0QjMU9hXjwlJCwyfEg5d2MlIXFqMSI5WHhlLFtXPXFtLlo/ZitKTiRIOVReUWZMKmo1em1meTpVP0opR0Q5WVBANTtHTDklPFRrOXFwbTlMe2Z+SURPfkhRLyQmPyVJdjYhXjx0O2M5MV4mI2F0YSRuaj8jTU1Id1JyL0BlK3wvNVg/IWU0UFo+d05rd017cWc7XytA''@;'; put 'put ''IUlEKWYwMC8jJlI6SUVUSGM4TmFeVz1MJD1rYWY4OWdoOCZSWDgmXiVDcDg8RTI5OXw8REo4ajtme3F6bUs7NUQlOCZaS3lRPlpUUnJ+KmImQ2d6bWl7Z0EoL1pUUnJTbT9rPytsNTd7TjIuSFg4VS5HZ2ghNiNOJHZsXy95PGg7SCNqZTF5OFE5IzpNISFPcl5YKWwya35tKk8pbH5tMjB6RERs''@;'; put 'put ''azE4JmF9SVUrY0wqNXpASF0yNWc8T3E1QjBqN10lZmV2WnU0Vm1bIzAhdlooKmEkRlh5MCMmMWxlLDxrZGx3O3w9KGxZSEw9UEhobVckMlplST08XkpTOFluSylEMjdqd2dMdXF9KEpMQlJeMj1dI2R0UDlHZCxUbnYoaVpsIXB8M1deayhVVDR4aU1LKCVTcFthRWRFT2A2MCMmOWQ6IStRRlNM''@;'; put 'put ''OXpHTV9sZnQ7VX5YdjleXVAyc0c4OnA4WTkoa0xxSWEkZCx9a2M7VX5bNXc7dz52ZHNleV48TC80Tmg9O1pXfmtTc2ZqVSVlfTk4eT52ZHg7VX5TZXhPRWdVZno9MG9MZVI3K3k2ang0YGY3MGB8IS9WME07QzplITwxSXZrJG8hYGZqVWVNVH1JOmk8SHNFbHw4OTROezdXd3ZtQ2p0fXJZL3s+''@;'; put 'put ''Zjt2L0VrK3wwRTR0PWhjY0lzZmNWaC5ue3shOXZsTztpTUpMUXs5UXMmfSFnOyUmYGA/PFpXZGdJc3ZjfTh3bGJ7KCFnVz9pJn5CU0coZmBlNHlzOVJdKFhqczRgZis7aCFAeTJ7dz5QUHoyL1l3PEh9aGZfZmxTcWpFOy5dcWo6Iz8lNk5hXkxfOXw4eSE5e2ZfK2Z0bGI9O24jOG15TS5BJEhG''@;'; put 'put ''ZC5LYS45bGIrJWZIMnIkbjBkJUNbakZURHc+dW9ue3VjZVQyLCtBTnRCPyRtWSUjZGNDUS9+V35rPitsNSlIJE15PFRQNyQ1Z2hdUz1kOVJ7SFNSfXk8K1NTe0hTbUhZbkAjJWxdZjt1aDtSWHFVVm5DaDIwU3NKZzZqbiN2LmgmaXB5XldQWjh0WUYmUT52ZCNwRmRqNWRoPj02JE9rYD0qbEk3''@;'; put 'put ''SyNBdl1qZntOJDpZfHE/QylmPzQwRzosLHoxWUQoLHs8XSMxPGYrTzNdWm1oS0NwdU54Plk4SENFZ3dMYSxtLmo1Lklee01UXSg1VHd4YX17cDxwZGBgXiFuWS48ISkyY0R1PiNkI05uODlJcm14SiNuTmsmSkgjPUVPO2o1b3YmYyRrJStQVFc4aCM8Zl0jM3U5WGhPIzFwc2U6Q00zSmc7PTdd''@;'; put 'put ''NXsqUUlZLkQhT1tWVy9NYWxDTjxmYS45bDJxbztSYCFjVSxrR2VoL01bKy5ZIkkyVmZqJWYlKy4jWG0iSn4jI3U2TSJEdD5ANGZQTGFOay5PV2p7P0JkW2Y/ZSpZUX4lW144XSg7eSpZbUtxeEk3KiloUl06R01ZXldQbUJoNTJ8d3gsenJ7NTBAK1N9d142YGQuVzg9fV5mXSNRQCs4aGYjZUgj''@;'; put 'put ''ISs+MCJCYmUoWk0kX0ZnPGJRYSw2TDhxdGlLflNlNl4yajhAfENSXmlKTiQiRVsrJCl8ITJzSkIvZltxemUjWjdqSip+VGllfDhAZmxPKHNIM05LdkNmWTdga3olMiQrb2JsT2ZZN2B1KG9iOStCPEMiY0craERBWFp5V01tQnQ6Y0RZPCttU1pHdXhYWngiaDtmcnV4SiNKd0VzQzJxI21vcXhs''@;'; put 'put ''VVhaK3xfRXFoYC9WMjZaX1tGWjY1SiV+WW96RFRsPyx4LEY3NkA1MzpXTXVjKyNgW3l5QUtrUFlLPSMoKnc6V0VJNGowUCkuQkVFQyl2KEZFdXQwa21CRUVEYGgyeFUuKTwhcl44ZThRVktMeTBFI3sjTTYhQXZtblN1V1tWV2pESCtwbGU/U0s1MEArOWROeUtZaURHWilaZ1JTZTF5KGkvTnMs''@;'; put 'put ''PjFxbHIlKkBlK0hQa3Q6WT00QDVPMSxTU0RndnR6W2YuI3psTTtXOEBmfjh0ejkrUT5qcjZOYV45IXpzV1dzKjlUTmszImZqQ01DP3x4OzV9RTo3KkA4cVdQSD1wbExHPUBsZlkvZ1hecV9qUkdHUzlVS3QoJWc3ZWBzVXZ1K108SUQ5MXpBWTghX3p4cHxYam1bI3xaXXcpalI1bDNaUnQmM2Jk''@;'; put 'put ''ZklaN2xfelBUSGNgPGFXXz1GUFI4NytoIW5jIVNxKz0kPWtdTW0qJilIU2BtUF5zTGMqN1hwTF9mLDRANSIwcWxeY2JaKVpIU20wNVIrOEA1REpjJipsIU4iRGIzayRtangiYnJQZTR7T2NTMSlZTzJnbkAjSiNnbkt+SFNlaHk8ciRfbT1Pbn1Pa3tMLzR5aTsrVlBeVXdPLlpiLkkkOW0/MX04''@;'; put 'put ''RSVoOzp3RTc+XVdQYVA3Ons4JTw1e3M6bVM/ZkRZb2A7UlRKRmtlejxqJC8mIXlsYHw4UEhtYXB6PSglZmVDMHI7Ul54TTc8eWhiWjwhMEczamczalRLd0dNUV44YiFNOyt3TWxaZTo0YnY1byF5cytdSVVCYm8kT2tpe3BfZ0d1L0c4TTd3dChpUkV5ZXUsZ1lQSzlUTmtVKTUkfnZlVm9lN2p3''@;'; put 'put ''Z1NwXWlEbmIueXZmLjd4RCJrOkFtXnhPL3tpLnhLVGs/QkUpXV8yfmkiU3JAVz4mPT1DSWJQWHpFT1U5U3NfKV98Yyo7Z0FYQ25MTlRDayl6Y2BEM112XSt6IVh1OnN3S0IrXX5WOW9SaDN6W3g3c1FOTSpGcUklNXNlMmhPdD1EOld7JF9ISFswUl1IWEZgNnh9cCtOc0AhO1YxMSp2Kl8jfS49''@;'; put 'put ''THFxKzc9LCg4OEV2bEVuMl5Jeis2ZyxLVUpjSjtYMCkqVj82WStUSF0zMX1SVj9jQjw5WiZUY3RHL28xOmJUQVcrQ09CZUIqWSpYYjx4VElpN2FsPFZ3SkVza049YiwmM2Y3Sn1rYGxhJlpJMlhPSVduI14hS1ZqalI2YShxYF5DIXxoWVMsSStFRHZYZVRxekJaYX1fKHErPTwpRW9SR15OcGBv''@;'; put 'put ''dyhhOm5FNmcrOzpJQHpyNEVqKUAmOmhDV1RrXTNhdk9LUzlRbVZsJDBgPyI/PSt2L3xbWlY4diNsMiI/czhTNFMidUNIM3RgaU8+ZytgVyZUfDM8RWlWcFpkb31feVQ3VDBTTGx3ZzN4ckVXLjVFWko8Sk4xdGB8VH5iVWVjNVc1fHk4akUieyYvR11ybzlReH5yVmo8Xm9zdEIsYiE4YU5dWE5b''@;'; put 'put ''SXBuQXRbIkBxYGppWzJFRllxbiQ0S31Laz1nZ0RpUltybkh1MCw+KkIreXZiQSQ9dmgwOV1RX08pbyhxLD5RQjVlezNRQnNtR0NmKGcocWQjZzooMDw/O2skOH1FIlJCfWlpVU8+Q0tlKzlnblZ9djVfdT9gQXJoM0VEdkpALzFkeXZzTm9dVnNSY1VDVV5lWj1Rd0Z5dWJKKUNgb3coUzZhNWk6''@;'; put 'put ''P3pEVmpgKz16c29Fb31HLjJ2aEQ6PXElRzFlJk1vUzRTSlBbVGomUmhxJTwxQjZKNEcpUDs3LGFDSXl1Yjc8M3U4LGx4VSNla2p8bGhnRXhJXSR0fHNxfTc0Sj1TUzguVi9TNDx7T0tfUENCK297R3VBalVyclk4dEF7Xkx1fC5TZFQ0b0VvfXszLz86e3suTGEzU3lZXVYoYV44MihpTUE5NXI0''@;'; put 'put ''ZEVOUyh3WzRQKWBAR3hYZWAsWns7dFgrTGo0d2ElKy8qSkQ2MUBMckRXVjJQLm9bWlFrJl0uSGhVWUtbOypwNiQqaDNUeEBqeTlASig1QG1MamFNLHl4NzRTfiMmNUcyXS9iZnxVVllsZ2VQL2VUJn1Eb1lGem1jMW9wV3pWQztWVzMvbmNzcT59c08pNV1ObUxxKEMsRDMpUiI1QCZkREM8X3BA''@;'; put 'put ''YkRMcmgvJmdKKD9dRzMrKW82Ykxudz56UENsQDc6LFZDRitKT3J2RSIydXhkKEs6OmEsaWw0LC9KJj1MXS5VfjM3P1Eucnk3M2B+NEVFTDVpUCZyczE1amdhK3VaVVpJeDRNaSwhNXhZQ3N8WzI0N3luQCM+OzFXb3NjXXsxNnVJNDx1dzd2O19GT3EpdCFGPTZnUz9dSH4jXnBDPF92TlMjZTwu''@;'; put 'put ''SiVncSJhY1ciUVguPnxtJFt2RXozMjFpNG06LmJSJnhDYURbNHheYHhQVEhzYHJSNDE3RTY9Ijl0MVAuUl17Vj93NHluUDVVJk02OHAvSipmezJJW1RqVnt2Unc+LE5DdEMhdlZFQGhXRVcuInB7YSRXWWkxYWo1eSsoNVYxdmc2fktLXUJOYjtQNnFgTTpgLHk7QChHPk1zRCp3cy57JT9bcFQs''@;'; put 'put ''eVY/MWxmZCU/IyN8XlNJZjR6SEJUWEM1UTBBK0M1aVJvT3ZuOSVgUlo1VTNteC5QK1ZjNEB8VnlbIkd6b2F+fnE+ZlU9eXB6ezErMyFpcG1yYz1GSTlDWHljeClIXTlFLmlBSm85UnlZQ0VSKWJAJjt9ckFSWTxmWXg8KWx3Xz98dnMlWTErWGB5PCEhWlA4ciR+T3xzKDE+KWgwYmU2SDR6UUg5''@;'; put 'put ''Kk93LEJ1SDRqSS5aLjs/NndIbikmcWA3JX08Vjc4ZXMoWyt9Q1RTKnUhODI2aVhmPzRVNWRBeyghNkoyODFScmYuYUd3cEd4eFhuJEd1ZDJOUklyKitwWVpleVNicE1bXzZ7ZV5xO2YuRHJnXXIhX1tKRitXKjFRcnMpczgsMUt3IldBRkUlemBxJUJyImRmcDhUVU1wVnApUj9ULF9xXktOUk1k''@;'; put 'put ''Z2kieik4fH57OysrLiFJRC9WQSo5Nzt5UE0lY0YwflBLZVN8bjt6Z3N1ZjBJUHBVOSt8dk1SdHc8bShhbndeI3Q/eFowR3ZYZVdFSEZ4OElFWWVoU1krPGUvXmMrSUZneUUmTFA4O0dgcG1URXMxdiRCIVtedXI/LHJnSXVaMGRdb2BlJVN7RClYSmJpNm9YZXhEaGloYUlMZENIXkhrIVRqYHE/''@;'; put 'put ''cjo7KnksZURCYzdtdW5TVXpUcyhkRz1TeWsqNTRvJnFOKkdKZ3BNcFI2MSZsMW5gTmBrZyRheVt0c099UE0wRCp9WGZlaShoYC99Z0kkIUc2KklEbC5rSXImYSpTKCVNLH5oelk6JU1ZVzMqWXpGZEUqQHksfHN8fTFQTW8jUzpDT3M+c3k1JC5jfWssYFBaJmhrT2E+ZlM3L3l5LGlPQFJDLH14''@;'; put 'put ''WiIkbmBHfnVuZHx0Jio4XX5iWVVkbGU/eUFpQzd0RXRSRWhkYFI+Y1oiPzhoInw2dWQ8cjdBTiRCVmpbYj0rK0tXQGtiI092JnFWPUl+SkJ5KHFKMzk7VDJmXyt0NEFzVVMjYHRKT2VmRk58cW5WJjNGR0phbUlNWFM8RTNoKnd1KSY6NEhVcEBYQ0YyMHgwSjhKejBVN2RUeGB2U30kcnFYfUp6''@;'; put 'put ''WlgiP15dW3JHdU51LjFGZUY4YSVZcyhWciNRaGFPMiklbEBeT0hPdlEoaX5BK3t1U2lzKURwZk5tIzRSc2tvKDczdDsmRF5AbH5UZjozb2A5JGpEJTladCJedXBnZ3B5b0dkOyRXUzU5b2lTaUFDQUFBZkRLQWxCfEVlTGVjZSF9QTZkKyVPSypCSUlGLHJOYVVdUndmMzFWWCUqYSJJQUFBQUFD''@;'; put 'put ''QSVBQyJYNihBJCVtJS8qM2FSckpvMnVITXlYJiRWWFcuZmt8UHR0RHdJSkVCQURyRlNqSGdOYUUzQnl2WSRuYjxzdn5OajxTfW16cShMdSxbVlgpcyY6Vk5UPT9Hc35OSW1gPjNedSt8eTBSaSo3Pj0hL3gzOVN8Tk9OTDQzezIjWzJFOWJQViZmM2VAUldFLHJnZzQmZyl2ZiwsRSFeZU1jaD8/''@;'; put 'put ''SnFfY01ldypBcjB6bldEdWJQLjptMjAjLEV9QWhoUUZXcmI3YTRLMy8pVkE1YkI3a2F0aUtmVjJCUFU6YD5IIys3QjN5QiI2Ul1AVyR4U2x4TDRPUWl9WzojenprOm1kO19vZHVoTn18fWx7Un59KHVbazk6OWtNIkg6VUJeTD4hSnxRWlZ3dCs+NmdQd2I1QSNxTntzfi9RfmEjbEEqYD9tOn42''@;'; put 'put ''LFMobEVJMU5fc1VFIXQhRGVULGduSlZuJlllSyFvQnJyK0k4P0VGfF9fMEhJbjk5Uy4pXz9IK3EySDdQN1QpL3NiTHYrYkR9U0dJa0RNVSR4bDQ4YUQ1bmNVYU1BISIvUCYhc3hPNSJzOn5yLDBqPU55TDJXWGNdMzNiZzxrc0tWeU5DemI8a016Vz5TcTRvdDs7Nlo1ek1aJT5TRE4mPEtZWXV5''@;'; put 'put ''KnciQDlfNTo1MXdoW2s5cDI7amNgazZMIWRAUGFQNVFndXY8XylTPW0hIiNMKDx1RGJSRlhAMktGQXBKPSVMIl93OUxlJWFId1p2YDVNKWhsMjVGclE9UHVfM1RTX3FoVndnOXwiaTJxMElVc1BGWDNFajs0RiIuIVNMNmJJOntiaCVHKjhvSGYyfnN3W0MsZ0YqTjJMX1YmKVtkWihqJntMLkc7''@;'; put 'put ''U1JBLFs3IXpjZittTFdUfjw4YDdzRk5xKlVWdX01IXVuOGRpR3J5OGx1c0lnKGovMTBsYG1QUTpkWkY6VFVVRURydTg6T0pwcyZ7MCRtMj97T24xTzl3WEVHL14oJkRbaWFMJlowUzt6RnZMKzpxPHUwUXA3XS55R2lGNi50cTdKNmkyIyx+Z0BxcyIkMS8pIn08eG9CPCJvQHQhQUVQPjYrNWEk''@;'; put 'put ''MSR0OH1pOWhLN0QwVD5nIURCW0d9ZilfOVEwNzFbL0NQSENiXzl6NCQ7LEBzfi5GakJDaVI+JWw2K3RMJE8+ejlWeiFTW052Zzc6Rj81dm04biJde3NTfG9gfUx2JHZrN10xKUlvRUVhblp+ViRnfElSdzo8dH05SkRKd0NqQEJqTjxsKG49RDwiUzxlR14sMFo0YHIrU2JkZVA1I0dSRDhpXU9K''@;'; put 'put ''OC57L0lOWSw7Mm1sKTdUJiYsMGIrX1FufHFKd0xxfl85VF9deFlBZldJdlZPMVIxIXY+WWJAU3U8YS9QKUg1dDBjSD98O1VlUnJbdXpVOD42aFV4Oio7Rk5RO1EpXVF+fFVaV25ORzNxZ10hTXBJNV8kJWIjWj4yUn5GL0hKbihma19lTTxFeiUyITtQRE8/WVRIazlJMHVdfmpMbCZVeTM7PGBi''@;'; put 'put ''LiE0NkAuIj5DZVEleCklKldMI1RpKW9lJFhXLkglQVdOUTBtPHIpME88Ojc1X2Z4UnolLjdUKk44ZFs+YDQ7ck1rRzt9d3wyYnpfWzRDbVl3Wlh+Qz9gN1JXfGEiUiJ9M08kRjBTLG9HYFNRPyp0N1RvSUM4ZUsuVkZkdToqb2Redmo1M2hxVTh2V3p6R2Y3N097TjIjLmZwK0ZHTFYvbGcwI2VS''@;'; put 'put ''V0lhZ25icWBPUmkuaXM2KUhAT253anAyYlJOLzlCOkElXSxARDJOcWhFVWJEP0krQiZlck5lKF08ajx0UEJVP089RmhGYnRCMihCYmtWPCYwRWp5biI5NUhMcVswZV99OS92bStOeSEmQzt5NDFPKT0+c3p2PU1HOzlMISR0cXtheXFIdEFAJHQ3TWBhWml7KnYjYT1vQXYpWE5FTCMuaiZ3QzNp''@;'; put 'put ''ZHJBTF4mbj1pTkVFdzJNMSpuQHk3W25dPDNLbTJ6VDR5TFZzdUpndmBGNnckVHhNelNie0BFS0R1SW99dmBmUD5yaSk4SVlsX0lFYHJ4N2BMVlcwKyVeQEFod053NWNUPj96aDwsP24wdDRRZjosQm41VDQkfHpHMC5bNlN0LldfciouakJYalZJNDtOI1okfVhDKGBeNHhHIzNPcVlvVUNge0l2''@;'; put 'put ''LlNbeCQ4XX14Lj1UWX1GfSR1SjFTS1tCd19hXSptbSxeUkouQSJQV21LbHpEWENbMSJWNFNPcGtpcWFzTVohJmZQLlJIXVgudHVnLDc7IVV0L3VwfHZVJSFOYmRZTyt1TnpnJnB7Zj5reG82cmpbIyJ3QHFzUXg8czlQJXtecSROJGJtP3pLajomenFmaVVMYExjdE4qZENwcl4+eDByKlh0OVs3''@;'; put 'put ''QG5kV1ZvSVpRVSQlMy5eVGt5e2BAMTFLLF9ScEx2LEs/dSFUTmBYdjI3SDtMaiUvOzZQV0NaTSJ2RWVudSE6P08sWHE6Yi9zaTcpOF9iKzNoXXpEMHpbJG8mWGpzLjA+NGBleEhzfF0pI2J+TXMpMV93cl1LQyhwK29jXzshbCw6emNwfGt5e3c3SVQ3LD9+cWQsKjhsbUouOnNTQUs/PEBfaFlz''@;'; put 'put ''U2kvdk1FL2gzeVMkcUdUQ21lQDQlUFFiInw/JF1talZRTns9e0I8QTVoOWR0VUdxW217LCMzKTddV0RqfFhINlgvcER3elt1ZVd3cnY2PU1eXnhwZlljS0pgPkokaz1fQkwjeSp6TS9TcUZ7c0kjSFpFNCN7Pmt0SnIvRj89akpAQnRYZCFvfkUibVpJMER+aVEmQDIhR3FfPyRrKE5ERilyKHBQ''@;'; put 'put ''enhlPmoqclFENnhiMCRSMSVJfFFQUkVNfUckSUdBOC5eQiI6cyo9aDF1MENOaFFbISFoMzo5UlMoMyElImw5LE5pU3UoQC5lRXsjTCwhbG59fkM4K2c6SDVqaU1GISFIYms9YCswSF53P15uJU9Ra35TNVRAciNfNV87bXRhK0c1alR8T3w1cU1sbE8wfTYpWFZsR2xbazkqQy5MX2IjfmAyJGdQ''@;'; put 'put ''QCVLekloUEY1fjhBVk42Izg0UXtJKE04PFEoP18/cnJJNit1P35EM21YUC55KHthNSIhWzRGM2N9V3gvVG5GbjtINWQxVyFDSFhIITp4Omc1RilJSDEhMGshPn1MJnN5Lkw2TixmeiVTQ2dOQkI9PUIxUilKeCVSNWAzai5aU2gjbmxXbkxEOE5BRCY5RXgyWGMzb11pXmtsZldnZkg5NGl6dm8k''@;'; put 'put ''R2Y7cm5aXTpUW1tPVmQmc1VWP0doeXNYSm8jd3BsVDpAJldjfGZHVyx8TjlVUE1VLlFpaWR6QDJQN0dEUHVEMz8qe2FpLzMsJU9CR20zdEkyYkwhOldJeiNafllTPk14PSQ3VFRRekJOTFpNaFFmbTtFYEokazBJdHAhczBOUWdBWGkxPXlXU3FSLn10SUtvPkxvfTxjO3RjeXpKPSg9RHA3T0s9''@;'; put 'put ''O1FBQDVCazBtQ21hKEZyNXdqKUI7OTRmfl11JitxMG8hRmIlaXBdXyRIX1ljcipCPldeTj1VX0JpK19APCtafnVnazFlbC5mVFJGSmJBeTEpMzY7TUpATE12KE1TdmRUR0ZVMTlrPGNFSz0ibVY1Iyp1cW9HRDYhMHlyTzYsb3dqUWc2SGxQT3x6WSsqV3s6WF91PXR8VDomM1MsciZhLzg4Y2FX''@;'; put 'put ''a3YxNXxuUW9+Kmk6fiNdIyF7O3RiQnkrWER3W2o5KGRHNjJkOChRMEh3NDdHM31ycTx2NSszfH48N0YjWWtbKU40Q2UrYVh7TzNoIyFQbXZOJk1uPjouWj5mTEt4OUhEMHwweHw2Uk9kVWFsMl90SCN4dkNkdD5sJH56cH1zQWBRVUkuMElLSDk7dThtLzlRdFY0WT1BMD95ZlM3O1JsIzRwTHgi''@;'; put 'put ''TUMybSwjM09ZbHxJNE9hKll6YEIzOjsvMFhLRXszY14xcXpoRVdCejNkVkFgUzlpWG40dzE3RWdtN2tTRDdsUypwQ1NARSNCKmpsYU0rLyk9IklzdGJ9ZVQyL3x3UDIhI08oSEVRPVJwJnlyfj59PnxsZ15WMGMyc0xyYXNDaD0ycUZCPFZNIlpbYkZ8SzIxYEt8I1NLdU5ZMT9tSUl5Pjg4Vjo4''@;'; put 'put ''bVhMTXlkMmVFKnEpXkcrSHchekp4bVUpS2NCLGhaKGgmcUBLJXF4S0h1LiVVQipYKyZbZjk9TTNOIkVSW053aTA9RkdgaFdnTDsxPms3Pk9uSzFaRlZ5IXwrTCxrTm48cWV2ampbN3QuPHYleF4mSyFBbXxSJXR5QGlxYig5Wik+MUZ2YmVwKFlkYEZdbnVZOjF9THhaIXR9PjtAb2xxKylHUEtL''@;'; put 'put ''WCtFeFc/eG0oJGN9KEBwZXEsckxYZjU3KTNXOSZWIjQ+KDVMPzdtMFEse2Q0LmJxUDZJTSFqWXhCO1VKaTZOWXp0RnxSP2hRfSx7XkQ2bU1UdXBoZXwqQG9PbmpeSUBvb1FRKihLZCRsXmtrXzxjdmpFaVRraCU+aXoqR1J9Tm5LVURdW2t2MyRDX2Y9bnYvTmpgJl1NKmF+Im1ecE1ObSFddD1o''@;'; put 'put ''VjFWc0J6OFVnLEUzeVIqJEV5PlZ5RG5ZcilyOW9bSVEjVyImdDUoR3NILkt7YXc7JCxQWWNYOyh3JGslQTBDUCtkSD1OZiNGKWhUYEI4IlQzK2c6UFZuOTJ7VyJzSHdYajxRIyY4QnRiYjpvSGsrNjZQLnpsJXpgPjszWmVAQzY5fFkudjttMT1RaEJBR2lNQ0psXUp4TjM1VkJPYmE6TiE8Rmkl''@;'; put 'put ''RHFgeTg5YjhgaXRRdndjVyt5SldMYnFqIUhaVmc1ezpMKlVpUyZ9NmVyZElkQkRzMCZaSU9hQkopeUArIWp4TUBSbDxScGlaW2VgIXFTMS5HfTBHX0NqcD1zOmBKPT84TGRacGoqay8jTXtJIXY+fD5zQm0xVm1qP1RITEJaemBUQ2dabml+RGE5Vnk5IzIxWlYoSTczeVQwMEM5Qn5tYDE4OEBV''@;'; put 'put ''bjU/WlQvT1E/VWFNdlZacjooOSV7byk4anA9SmUpMSZBQ3BJNSRaNGtMU0cobkpXcjh2YngvbGZOUEBCbXZPRFFvJk14KD9XSXVTR3twNFpjTUk7SXc0cFApLnp6TituZXJwcmhUVEphfitlKWs7Q1o6PGJKKlU7XmgwU0tOQW5mQkRSdnIvLENdQThQbHVZLDksajRFRmQjbTFYcUQ+ZC8+XUBH''@;'; put 'put ''VjxPOl9HQj04Ll5PKDkyTy5iNm0pKS87aF9TTW9JT3IzXUFRPUtqWShAMyg1M3VZYSpSe2hiOStubTd6SlFhUWAjOT43QiJjYXlJdVkhK1glMiJYVlEvIlBoVD07QVYwMVE5QWEjZWt+TU5PVlAwZytlRTlUIzlvWXB5VThsMjJzMzUmcUwwbGRhNVdOdDVMNTtVeiVpcU85OmYmQHkpbSUzWGdK''@;'; put 'put ''Jkk/KmAvLmosdGRjOVAuaUB+cT10cllSUyxRVlVLWk58dHs3Zi5DZXcoKyYvTmZFLEM7aWM8LjFmLEpERTJXUDB6eGtjIW5YdXYuNUdkUkR8cV14Sm99NixQPTAsM3JRUXp4KUR6VDpWT0hGWD9Wb2xyeDt9QHhLW21AY3B9L1JtanhKRi5qJHF4UF9RImQzVlQlZmsodVQqSjF4SnNMT0RNcS9y''@;'; put 'put ''ZXZ2MSFPQDdVYjBPKGFHcGBQSU05JCttKlsyTiZoM2ZmQkw3L2osTlsxNmVvZj9yWiU1bXtaNiYvNVFOIzRqMF05MVFvaUh0V1JTM0BOcEplamxOajc3fUVYJCtSeCohKDM7dXVlVC88XnhRKTV5aXU1UShEZ3NIQ3xUZ1EoUXwrUHJsY2xEdnBHMi4iPih0cTY1S3diXUZZSi8mdnZsXX5kfEVS''@;'; put 'put ''ZnVTem0wLCp0Kl4kTG1ML0QzdjVRNWgyKW8ha3RZO3YpcnhQXm50M2Ffdm5Nem9kJT5kXU9XMzlRanJnYHJFViN+d3hwUjMhNjwoKW16WUNmXl1vZzpDNnc6MUVYS15Ra141ITNoW1slJFpSRm4/cjZEbnw2ZVBDYl9xR31ld2lnMFJQUC8+WCoiK2FUJWpvIlM+RXxXb1dJeDdgQDspNSshVXIk''@;'; put 'put ''PUYmXWJYdmZpN1N4blYyYipZM20yRXc/aE0hSX0hRSt4Izp5YVolLHJ+WlJiWW9JTjM/bDRYZX0sOTc4R2ZefFBmJms2OUxvTyoufFY+WUxlMElhSnh6JTVRMllCWUlPJSp9ZnhzKUdPO1J5Mn1wVSk2JCFMR1N9TnlkZ2RfUjk/Xm1jP29waD5iX0thZj9uQj4+ZUlBMzpjSXgoSWs8QGJke1ZZ''@;'; put 'put ''QDJ2RXshMShpUm8ya1lrdUBMQjBeO3RrXk9tbyZWSzNrdm0vZ31wYigpaCYmXzZxQm48InlDVDFkWD9qLGxvPENqQHl5NGNJMyZ7ZlRZXWxTaEozcktWP1lifWxIN2JoXzB0Q1p2QD4pYmg6XjE4WWpuTW8hOVM2RUs5Tj5CKURQKFteVj0wS3A5On5xMlhIZmJpTFFWQmhINzYlIW5jSGNjXVRj''@;'; put 'put ''dFNgano4OXUsampHTilmRktBMF8iKUdEP2JSYW53Nl9LODpANGdfZXl7MixnKzg4XlBvd2wjWHxBTktLMz4+MWAhWkpTXzAwdSJIQEJCOGpsQEdPJVtZL1ckT3xoc0NxTiw/OyI3LnBaNmRsT0FFTyJSZmgqTjVvRSVPdHMqOltZPjhYX1BMSE1WcGV8TEs3SzxXZmE/N09EUnhIS2lSa0dPQzxm''@;'; put 'put ''MkVnZWt9fEsqN01mMllBdFtHOy46JkUmRz0lRkAle1lpK1o/InNbSXMxUCZ8IlIwIX5fcjA5b0BfPFhvbllLSzsmfnRXLkw1NSQ3aG4sNl1JN0RfMHEiX1I3On1EXkJVYENleGsoVVZZWyRRJTROPlJPZHpOezRvbygiKCFpP0VkSkpMUVR+TiRsX2dkNzhLdnRPMlAkNmdKInZkPTVMcmxmdHBx''@;'; put 'put ''bjJMNEdPREZSTXFATncsOXIoLHpdOzZieHd4NTtxYTJlSmIpflZCZGIrdUZjYVU/MzM/a0Bxb0R5VzRyI3QhJWpFMU0yc2pgfEYkeSRxKGpzTzlvKl1SVmhjL0FtUnc1LFNTIz1PJTUkdjM1KlopXnVnPSghWHwvPElySipYQnpbb1oqMkFyNkVSKGZ3ekZmUW5bdSxTWig+JWB1ei44R2tXLDBF''@;'; put 'put ''ZVBKWG1XeE8+bThCeTh+fTtOI1BmI1UlYk1YXzQhbFYxW3pNQEx5TCRKeHhOOW18MSEvO0h2TGB7VVMuRnNpT18la3JvP0l5alcxdkQrMmVAdFZLX3A7OFksXWBsLD4+e0AuP111fnc/KTN6LGtMR0dkfWokSV1HQWJJekhBOFcwdU1LN2o5ey5SZV9oVm5VYmlnMyNKM1BMZl1mZ1ckWFQ7WXAr''@;'; put 'put ''eWBJVmVEVkxwO1dAdjd8ZX59QGE9QTFzbnlKSTtaYmVZZmREX1hAO0ZdKXpRaWsyajhRS2NudyhPYzZwUiVwQSs2fUdoeGhLTmJfVSlPRkdKPVBCMVM9PFJPSk5kL2NIVmIpJFpFPlEhRmpONigxcEUhMjozIig+VUhEPVtmN0AqYytdRG1fbFJncylhQmxRLlcmYUwjWXhaV295OVlhJXsod1N4''@;'; put 'put ''Uz81PUkzcFkzdjJLIlNkYy8rQDhDeClwS0VkTVk3Rihid0d1bDkmUUIkRXMiQ355QCR2Qn5odkMqU0pETyNjXTlxeT8mJCMvPn1OSHNoaVVlWktTJnhLIzB3dSp0WV1AdFZmZTpfTDl3XVtDUEt0MiRpbCt8XlV3N0Iubi5bLnlOcnp6ZmFqR2NKNHwkO3c/dmtIPzsqa2cpLzRPWmEwYEB9IUJd''@;'; put 'put ''c2NDcnBkVCVkLFt4W2pRaHlBYztRfDdwV2csUE9kSFdUfjVCJVh+MUYiVixZPS9qNCJjMEZNRkh+ZiFpMFk6MEEqSDwqdjw/fmlYVkNEU1JkWj02Ol8pQ2c5fmhYfWZLcE9KJChERGlzOytJTyNQS35lXUhjTFhiXjAuLCQ9MXxgTTZFQi5KQylhOyQyMWg+RCpycSk3bVF4KiU9bHxmfUx1U10i''@;'; put 'put ''RlVCdWxzNWAyOW1VdT9CbjJFPG4wI2d9eChzck0pWUR3ODxCXTBldTRiYV5UST9qPiRzZFs6OCE7NypMJDNrRSttTD8hOl85OCgyO3Rqe3lTSlhyMHNEeG0yUVlWUlEzS009RlRJZTM5JkopQ2FRZ3xsMk8rWVRjKkNgeTNjXj9ncTNuQTVoanJaTFA1PVUmQ349elk9PXVZLnxpUSVSLDgwI2Nz''@;'; put 'put ''ITcjbkVqYVt+LzJvfGh4KF4jJSZ0WlM6SHJtMFBZL3pqMHUxW01HIjZuUkh6cz9hUC9+RDBecSFkU3xsSWMuNF9fKjtEOyNIXVtFUG0xNldtMzI5VXFpMWxAcXZZVCNaZCshLENaPFlJTmV1al0uU3RnW0BrbEBqKkdaRkw5eUI0eCpCIjNLTU1PUS5pYG1MbC9xdD5BSk1tKXYpMkM2b1dKKDA9''@;'; put 'put ''byFQJTxXPnRSRk8ua20+Qzl4dUAiJD9BJHM6b1U7QFVQTGhRSmJLNWZebTZITE5DSlFdL2xubVVVSlVJWURwQzE+Sn5+aztxdjxddCM/Iix6X1VKJl42O28kTGVhJkc4TW1kOWR2KGI2RjhbbE1sbkNDMmEqNGUwb2VsfWJ8T1deYHRUVDxCRTpXQlVdbno0VlZ8VF40aX1scEwvPH5kPTcqVGU4''@;'; put 'put ''ZGdnPU1WdyRga0NpUlBKPX1velJaRH5xYzxdYkttez9hTEhUZEljLHx4YnlHcjBDZlN4KEgkYThTY0JsSGZsLElfdlNCOTBdMyhGOV1SKj9USDE5VDElZnJBe19INWtWO34qPEhEKCgrVkE0UVpyX003XVo0RGV3amlnfS8yPzMuQUJzU0dGS1UrNW1ASj8wUCRVTzdIXXJIWEM7Y0FzRUhPbXxa''@;'; put 'put ''V1htNFg8RnY6S017aCN3Um5vKUdzWDYsRWBFeCsvTTQhSnJuMipoI0duK055Ml5bSThnIVlHTz9MZnYuajxjPUM+YVAxJWxeeEZ8Kk4/O2orMVVDMXsxaXRyUVZ9WylZb1pqQFc6Ln1ONHJ8ZjNxL3tiIXhgRHE5MFleKFpEc0k0OmBtOG1ZTCVXR3B7NmlxTjtsaVE/ZGhFRUs7UkAlKDM1LEZh''@;'; put 'put ''aSQydHRCUzw6M1cmRVdaclV2QHcjPUMub1lifjw4bUZ+NE1KVGBgMEk2MCs1dTFsM3xnflBvOGg5cEsqbihQbnFoRW5oW2dodlNleDY9WW40Ql1RRzIhejFSbXlZQnJBVWBrMm5ILiRHVWc6cENQfEs8dn5kW09MKV9UcHl5Lm46MEIoQC5VX1JtfXpXIU9uMSYjLj10IzImdXk0aX11X30+Rn4m''@;'; put 'put ''JmolYUNqLHhVTWA3YCN3TmVdUDpjUUw0WlI9b1dtQmlaVjZidzw3dV52OyYyIUJDdiFbbSxANHd1VG1dPHRZODJhZlZYMEZuL2Qid049WTZvbThqKjpgSEdMeDNVLykuLEYyUjBXOlZzWztzZ35FQyE0R05XZ3hMRitfbCxRRS9XfVppVTdJXmcvVnxgZHFJPm0xT01BNiVUZk0majlRaSldWU8u''@;'; put 'put ''LHRdKGxaRjZlcTR0QFQ+QDgqb0xQNCQqPmFsJlJ1JTQvVGtPaTsjcSVuUHYuVjZGLzFYbkpjQVIiWSI/TjVUOjYkM2lVYzhTWVJdeSV1fmh+c0BFOkw8KHloLEdQfWZyNSxLfCVkP1Z3QkpFezhXT08uRVQxUHRUbiFJQzFHSVgzUDRpYnQ7YC87QT9ORXMhek4/eDdBODcwPnI2ZGxOZTJyMTdE''@;'; put 'put ''SlFrVXwjWTkhXlVERFk8TF9eXk1fX3BFTm95OjNVLmNaYVlXWml0dzJwenR7JnYuPzZZVVpRZE8oTzJ3WUlkLF9nTnxlNC5RTWVVMC5pP199N0BUJWh4R21HNWpeZjYxQFhVI306c1tQJDAoQSp1bUQ2VXJLIT5DTn1CQ09IIXRqY355ViwjfmUxUGhaMCQ/bD1ncGB+K31Na1glQ0xiYy5OPnQ+''@;'; put 'put ''ejxbfFhUNHo+WitvVmhDdEtyQ18qKCQ6S1tqcCYkOCR0a3Uxd0AvazA7S0ZSSnxXOjtLKTd7OkQjVihuQzpUfjw0cVkwfnZJUzB+KFl9SklNJiNdUFYsdC9WQyEmNUJoK0hKImREPkplIVtfSWVMNTkpVHIjMVFGcCZeWldYNWpjXkF6b1ZbJUN5Ym5AWT0oLipMZXxeTF1yLE9iclc4S3kjbiJg''@;'; put 'put ''VSNLQDEkcCQxNGsuTHJiSmt7UDc3KU5FIjxUcmZhMV9sPHU4SyhCdX4rc11lXl9ALG1xL2MwXixPUGU9aiZ+Ymc6Y3ArUXFrOCsiOGF2JlNpLkFddEMsOEQlS2l3QFEkYmpuI2JMOERbVjRVP2h9fH5fcyxQJTJ0KGJRW0QlT0t3WUA9XWhxdjtUMzNQRVVfaD9fa1ZbM19iSUdZdEI9Z1VgUnVY''@;'; put 'put ''bXEsfnBbL2B9VEY8RCNGeEs2ZH1Damopa2p3ZGpnUmojZCtZRz0qaTVqfTo8aHMhcUkhUkl1OGd1e2BZZmg/TH06bGU2U3J9SHYydS5FNFttQnp6bnVEXWRuXXFqPnRvenwzUUhKOHtASWc2dEAmYTs8MFdeK1BDYWBHMiImSVI4bTYsZDF8ciVlcDJGQDFXKkx3ckQ8MF4zPHpdS08oN2JRcjY/''@;'; put 'put ''NWRiMldtYEchTTViP3JPJTVlPD9PW1BxS006TCpOc3MzViMrPHwxRSxhV1MvYipDeWNwWkhncmN7aVhxZDAkIWp2I09OQVIxK0UhPWAleipyS1YmTCo8I0xVXnRdPSZ1Nz9qbn53I11STXhiaDpzfDJ8Zz88cWV6VSpTXzBsbUJQUD52NEUkdWFkTD5rMjdrRmtZVV13WlhxZz50ZFMyUTw0WFhP''@;'; put 'put ''Li5WfipybCp9aSo1Mnc6c1VGNzpiP280dmMvaj56OlFTIVNjb1kmaUIlbkFsdEImIX1ranwqaC8wQUUlMF8pV0YjRXRTTTAwKG99Q045PHI3JDtrYEg+aE92UWNqW1prRWBiVERKSkdkWDdMRVh0PkJyXlsqciMvJFJqd3lhNXU4JF93KTcwN1g8TGQxQi9iSDdkYmRdJGxqckhiaVYsNGI9YW9l''@;'; put 'put ''SD5FalJOIy81KnxwNz1QS3V1dmI9a1FqdE4sY2RYY1k3S1t1U3ZZeiJabmNBP0tRX3hVWzswOGRfVGUqY2hlOyVUOEVHTyJwczpWVi9HZkwhckg8fWRPbUI1dyo3T3klR0c+NnQ2S3hUNU8wSXtDNkAsXl8mIytjV0AuI0ljUXFeJC9bVV5MIVpYMHl+TWpKR3gqfEJneHx4L0d3fkpdcnB1PUIr''@;'; put 'put ''fHt2KXhMVS4oYjVbPHd2KFFhY01jMnc2TV9vTEZ8SSU0YmxSPSNrTHI4cFFoYSk7bjlaPFclUjUxNy5GUF96cGxuP1Zoc0IhTVBsVmc9NVs7enlNVmN5WU9PSTxdP0x6MyI+QkJadXg6Tn4+djs9dkd5SHNxI2llRWpPbk1PMF1nOXgxY1BYRCo7fkxjd0J2TS5tbENSNltWT0wvJlpWPVR0KlZj''@;'; put 'put ''cGNkRiRuUSQ5Ni44P3hkJFJlcktCZW52Y0BlKTheOGR5YyJmJSpmJE40UmV9SnJPcERSajkmPSVCeFtQfkwpSTo7KVRQLDZvfWp5dWB9MSpDd2xpZGVPNmUjUFRQUl1XWHM6dHRWanZzUHt0LHJJMXt4PDoqaE9tXTo4VDROdCF+QX1mfCohc2chNDdDXTVwU0B9JjdeajtfdjduQGF5MWBQW3px''@;'; put 'put ''RnhyInJyfH0/fHFuOnVKejopZjVPZlpsMShlTHtpcD1hPGRtIWJbQmFmM3hPWTFsUlc8XWZ2V3hDJUZyQCZtIyt1cDlmNHc2L2poUlYlXTs3NTEzdW9AWyg5ZCxQUnpESm1oKFo6LDU7XzQ/LkxFSltmOFFvKzRDLihFRn5mSzBNQjohays6SHgoQ2B+byVXZWo4dXtudCRnWlR8NyZXOz9eZkB7''@;'; put 'put ''Rn5CWWFtJE5RWG9TOmdeeU55bjU9ZzJtem1tKCMlM0JpZV5Ybm91eWZNWEVEXT9jVFp6XWJUVFk+SDdHUVRRSj8zZ3k0NWw6cU0wQUVRLF5XXiowIURSTVY3bCN1bjB8MF08WXtuQy5YfjNgQU0oaXF0UEdsQSpAZjBEZUZeImoxayYvMy4xWm5ofHBTZz5mekFDTTZ2ZTwmMWw0c21rPGEpKj9D''@;'; put 'put ''WT58P1h6U3M2IzpBP0tzNTF4ImRjfSl0PHgwRjlwW3dDMT8+OilbalFrVnVzWFIqNmNEREJOJHhAZDw0NU5WX2d0IShuXX1Uek96RWd8KmcrJjlYQGpjfkJASnAkWldPT1F3Y0ZSITUjOEJPZWAkYWhSfUx9Yz5UenJbdHo1MFlIR1lFe0ZeZCsueFRJJmI8dyxNTnEyaDFVLEdZW0RhU1JnTkhk''@;'; put 'put ''Jj5rUE5YciNQP3osOUkhNTRVM3xZci5JdGgwZ111I3EpT0MrL1BUa2tUNkQsdjdZWiEhT3tbYmF0b1BpVDJsQnBOWFEvbjo+P1thYCFRQXxjbl5BSWF+ajUiKTx9akppLzlsYltsK0NheCVLYXtsb3NeOHphck0uaTpUdDU8b3wjNUJJNTYxT1N+V15MNTZZeHV0d2sodm5iPV48RDg/V1ZmUF5n''@;'; put 'put ''Q3pbQzwoR3w1RUh4WHprJlRuPV4vNCNDez45PCRDWGlrYHsuQ05RbG5VTW9qMXc8PX59bShTaHAmXUguMkQ0cjsuLHkzLyFmYEgpSTlteXMwdTRIV0Mpa2FlYXVvMjJ6PjtGNE1TaVt7RzBwfFZhLDNnZThMISkpRGAqRG1xN3hxVlcwMURUUns3Tkd6KFFKcVlZM2dFSyViXXtMQTp4cklgKyps''@;'; put 'put ''PmFHVFM0YGdCWV8lVU1NOER1dTBkVVhZayNaY1s6eXR4b1d1M1VWRCtwMVY2ZF4yZiVII3N1WUQpQnomVjswWUI6PW0wZGZJT2ZAQTA6X2E1MH1pPiRtO3N1ZUR7aFVeOnJZUyh5fnI9dFVFaiF6TzouWDY3WEVKVlE7dFpsUyxCNy56N0ZhdVBZNUBTdD4/X2w/aVQoNDBmMGZqTHlXR3g+RCtd''@;'; put 'put ''Yng4MkkjZjEuVnpaKFdRP1Asek8uL1VTPXM/MTE6Q0ZRbVFALzl1QHVxVUh+ZlBqcys6ckU/dDxbKU1zR1gmI096ZipKXX0jeilDJD5OYFowREpJQ1gmbzczTHtIQlBSK1cpakxVaCFfPjlCPixtPysyMlpbXyJndyVxOTY5O1g4NEQpcThTfWYmfSpKPnAodGBeOEAwI3x1PDd3VEsrPFVDOk82''@;'; put 'put ''N0xgMHE9JS9GfVMvfFl4OnE0QzRTOlFmVDNsc0FYblJPakJgSkdHaTN8YVZZNypuO2o+dTR4fntIUmcpWis6PiQqIWM8NiFuMz8qVHxSITY3aCIrUWMvfVdKOmE8NFBrQ0dgZVphXSl6ND9NNyxvV2A5ME8ydnRTdm0xUnI5JGlaKztdJDUjOSp2c3lsUVZDYC8xPiYsYjRxY0tGU0RyRmkqUH4v''@;'; put 'put ''UyojX1J1YDZHc3FDQ18iamkuKTw7IzpsQ3xkKyheNWU3Y0VwPEJhRX1AQEZxQWk3Q25UfF9kQmpyKnM3QnJie2RrXVc3I3Jtd2hzPEdeaXFTK0ptIUFXfEtrWUNAJE5pJT0vQnwoOEIvI2FBT3lmMXFYQzJ2NGVxWyJUbklaRWNtU0IvdTJMPV8rbkFZYUZkS35BT1lsWiFXejVfXVRvP0EkQGZG''@;'; put 'put ''ZGdZdGduKyt1OFhvT0JGPHBWbz9UIVp8alRpOyxVO2tkd3pCRTFtPSlAWW19PHh8ZXUiOTNhLFA5L11jb3dqfjJUVXFDdissS0xfMVB6WFd9XmI8SV5DV1pJb01mZiU1MXhLaGAiI1JyTV57PT89M3hXXUprfjw7O2oodWkkJm9XfEtQLnBKbUhzOmBHbnxVRGU2ZFdgZjZbYnJnekdQPndVTXJ1''@;'; put 'put ''dkxEUjxvJG1haEBpKGxie31hYGhyRGsuPHExdUI4Ui5RKzJSPFg+d3Z9cEt5K05WWTpIeERZWiJkOD15RV1TZi9aTV9Gej5rdT56fG9ncjt4cnVecTl3WyxCJHQwNyhhZDpDUV5EQk1rUTQhdkgveDtBPDd4YGNlby8hfTh4VUB6UDdrOjx2ZiZxamwpKkhNTSlPSX43fm5hVHFWQixjam0idD14''@;'; put 'put ''OlguMT4wdjd3I0dRcmhyZlNTQCZDSHZtcWZgWVgqZV45dGQpWD5kNEB+YDU7fUQhc3cxWW1TYSIvI3haO2F5Smozdio6K3dfdlhZXlJzPXJ6ZlswM1tEKjNKXj8iUUFtKDRPWlRrcEU+VT5nIylMX2wuVyhXNXlgR3MlR3RoMVZ1R2ciRSZWNnB8WUd0ZFMjaFYpK01AUTxoYS8pe2k8T2BJS1Ik''@;'; put 'put ''a1tzOF5GYnBddDI8a09yUTlwT0d2YS8+bzY+UmtwYjZbOWIwdktUdzNqQlp+IWFsT1U0MlBLSihaYnhrRkh0byZdZ3I6MktXRT0vRnBrUDxpOEw0aVBHR3pHM0VSLnw4N1g1IXt1SlRXImk3W2B1LiJtPjgiXjtfWVkraTEoWEs7MGcsIywwZSVjRkR4QjREWSFAMG5SfHBpIWAxbj1iPG5xMDdw''@;'; put 'put ''e1EueFJlcS8rXkB3RjgpZ1kpRTlwaWRPRiZVRS8mbHlGKk85bWh3QyREfCRvPDdiQjFwa0FCXXtzfHcvcFZSQGo/Zj18IVJ8MG5VUC9OXWhkXkhycyF7XjxlPFhnZSQ7b1kpKkhWfUs+ZUdrZDNvcFRkQWw6dERfJn5kLFgzJCkraFU1ZmBIaV5ddHRhNyEvcWw2MkhwdHh9cmVaRClvVnI0Myps''@;'; put 'put ''MTtdWkc7OmdFPz1qLn5Ae3cwPkJ0bmI/X3dIYzg/VFBsUE5IQzFQIk5ebV9eJlo3N21bPm16YmVae3drM2QkPEkzIiE7cmMhQno2RSJ6YDNOVmNNdzh8R0RwJWtRNXAlfFRCUyFOaCsvNGxGV0BtSXxEeHtVPDZiWWZ6P0QySyRWaSFvKy91Sl5SNnZQQjJZRUNJOVpVZXpTTWxGZ35qcngvdEV3''@;'; put 'put ''bVFGX3hpSUsmc1Z6VyJ4VyFfJmU9MEplMnY2UFY/NzhaIlRPU3Q6WjVqTjc0TjR3dUkldmM0QE4lT09dbVldYz1SN09SfW1fdyJPLF99S2ZiRmNJeU9CVXNlKiZZSl06eVtYNXRWcERLTzU9cm1lXndRcGp7MihtfmpuWXtqMUw/c1VyKkp5LmAweiV6QUAxd0ZaP2ZLSjZPcW86fDMmYGZAZF1D''@;'; put 'put ''KyY+TklWZDhfdVshMmdkOj47XzA/OX52SXx0eSJ5WHg5PDNkSVpfbV9DdDMhKmpQLCFCVXx4cjdjXVtqakB6UFh+YFVwLkhTLnBacWZKJS57YHZzR3UpY0NlVm05djRecFcvYCF3USJBLzhacGg+fGdbXmBlXjNnbFNKJl53V1BsYkpDLjpzNUVMfD97UUhdQjMkYGEyYHtoNkZdc1dnWGx3MzhN''@;'; put 'put ''biJ1MWw2L292Qip1WnhETWQ6In1BazowRTQuKXFwNTd6V3M2ZnhdSW9WOiohUiJuZjN8O21APDFIVFh5ei5xdEBhKVl6SkpKd1MiTzlfez93MmRofTokbTo6aiokRkc1QCg2MitnPW1geU5LVktwU15zXSxPVChZdUdsbnMrSUN9ISokRUFmbUNPOHJfNHs0KDBYUm9RdTg3eH51M31WKnUuUn5Y''@;'; put 'put ''QyttNSVjfXM7MilEdUJlPz0/dFJIXjEpJTtjYmpgdSxSLit9X2E1S0Q6cHN1MElxKltUX2RWb2lhYUVocDxULm94RlNPZDpGLChGJmRpJXQybloqME8lVjlbbzsjT0p3eiFQM0RTZyVuWE9hWkVpW0dAdy9VIk9qV0FPPVkvVlRCWntKRVA8U29+YFRxYWk5fFo1RGh2KnswPWpiJSwyWzMiVVhR''@;'; put 'put ''WVNUfWA1Oj8yQ3VRRDhTVj94XTYmWDN8OC85NHljMlBZMkFAMUUwLkwkJE5QeWE5ZFFkQi9PPUomR202N1kxO2xrbDwyQzVkcEgzXnclUGtzND9hT1AhWCtwMStIUXYsWClCMTE/Knl4UDlYYWFEL2dUZTZlOWhVS0ZFQVEoIXB1TnU1VEUzZjs8SSNjck0sPighK3dESFhgYWI6dnJReiloKHpC''@;'; put 'put ''Vl8lMzw4dFVHVmB7blFRO3R4Wy9MRCNeZH07IzYjZ1FZSEJ8W1dCMUBecVZ2fHtIdF9UZ05sUERDXn0qciloXkIqI2tPUyptQjheeTt0SWtxOER8S0h3MHZVQmU/akxFSGplXjNJPy48PXEmKndXJGMyYDNSK2NGLHh2TFptWixgIUU0YyVEKmwiVTFsQU00SCZgL2ciQl4zKSxjYWQ3M2pqSjFO''@;'; put 'put ''TmE8YGF3IkZ8bl1taE1NRTAoXnt0Ui9QNG1eNjI5JEBhalA0QWpXdiVMIjtqZTsjY0lQcHw/UWl3blNWLypaPjx2bCQ4dzB1TF5DU0NFX11FcmZ3dFJMbSZhWXE9RE0yN0w2JVF0V0gkOyphK084XW1IKH5gbSN5Q29TMlB+QHE9V3sqZWQqQ01ePFdoNlFXWjd8S1JuNXF2SiI/ODhYWmhoS3ta''@;'; put 'put ''NmIpNE5XU1VWSE5IOG5EJTJXcF4pK2BpOjY0PEZnJUpXbXdgTGhJSipKRDV7SEBhQ2xfVTwyV14vOTVePFkkcWdLJHdHRiY0Xi5PZzJFO042I0w2OCZmJGopblZkMUhNPCplcFFlVC9IQCJAaCxCa25SR146WyNKTU9Nc3RbKjpWLkZnN1FQaUNUMl9fSHpPX21aOHkhOH0pREZVcTVKW1pwQn5A''@;'; put 'put ''K0JkPG8kMk1+O3VXbkgjODFhVk1gLGM2Q31nJF8vVTpMQUpKKWxzZDtyezM0XkI+ckwhbUNZVnBlNj8+OjNLLiI/fVVRMktbaEIhI2AqMTgjK3hLeTFFKkswfUc3Ujg/dEhEITJRV0YyT2x9Zzgwe19jalE8YV9AS30iIWMxejpRVThoOXUlP3FuLmEiTmBoOjshaCxLR213MygpcThJYX1pUmZM''@;'; put 'put ''JUcpPjlXIWxHVV5kOiZXe1NMVDs5bE0sYyJleSIsJnF8bDp8NEV7M3Z9VjRJQHZ9Y2M5I05DMDtsKC93P2hkITwwe0NbbTlyfSV7R0Q9L0FPP2h6eU5JcT5LMDRtPEYkRTU7TVg+O3tQOl9tOEZgLEBkI2hPJHdHVWVEJXIwbEpzZH1Mfl5mbWY0R29sRm0leHRyND9jIUt+JC9qYSR2T2osPCg3''@;'; put 'put ''X1spbmwkRk9yZm1vVGIqUkJoNVN2PXxRRyldfCQ0ODF5IlcpV3plMXNVbmUjU2lMKUVWdixMNlFfNkxTcWQsIzc8eSVaViRxVnxqblhfcXNbJChJOVFjYTQoSXpRfTg+b25DQH5OQTNCZFhyODR1PGBEbUgpVU1eQXBiNi4sTGRCb3Q0KDZCLm9kfU4pXWIvSUtUYXZ6N18rbThYPUhgbTRHKVok''@;'; put 'put ''Kz5iVGZnWFU1UzU0Oj5GUFJUUlYlUS80W2JSPmEvbnVafWpheE1PQ1A1VF54bCopPFAwXVJiKmQpdWx6bTBHZjRHZ15lVixIXlg1Yi5mTFpZIkJhZ3NHNG1JIywsQ1llODFwL1cwVVt6Sl1fIXNyTVZAaDI0LlVlPmUsMzBAYUo7IyY0KSU9amg2X3pUSFteWjMjY1t0b1dkK0pMQF59e2tVW0Z4''@;'; put 'put ''U3BtNmR9Nm0lTVowfD1MLCFwZEo6R19EKFVNUUcjaCptTEVJKlgsLyUsRnlTYmtxWS5eI35FXmozK3ZwO1VhRztefjtwUWZmc0dCY31DK3hGZEhpNGxlOGBOYmYiW2xbZSEiWllMSyU8aC42MF4oWV9xZW1TNnwlSSROUHpxP1MsLjlUdn5CK19AeDVoMjVdYmJ3OS5bWnR2ajgoZnZBWmZfPXtX''@;'; put 'put ''RmxjKVZufjIhMGMmZ0NSTmAwKk14fHROKCMrRFgycWVKc25aY2UlQUZtQHxmKnk/cFBHQHpZUkZGaWhNKXk1d1Mmako5ZHpkN14heXglOHd6ZUQ1cVQkPyFhX0t5aGlhYXxOMzZoMEFlWjZpXmRIfXgjfDQwKl5XfTlMcGtmOzoyOl9JV3hUYSNpKik/Tjk1R34uQmQ5byQpKUpJTVRqYHY3L0l3''@;'; put 'put ''MF91cSkzWGNoek8oY1o7ej1CeX14QzU4QVQhVDI8V1ZzPT0jKn0rKG1ydHAzP0pKXUVOfnlud21bd29EPXJQNltoVSlAYiYufCM7MDNTZD9OUnw6RHUmd0AsaWFQPyp9WFRXX248ZGM4XV0iX3BlWk9NcldlT2FSR1hZcnsoXlZfOTs2JjNGaGlFbHdtI2BTLFp4NV41Kj85Zz5HXmUvc15LIzhl''@;'; put 'put ''WGdDNmszZ3Z8TzFseH1sR1lULl45VGptXntKXnB7Y3ldd2soQUtBalBYZ1s/YUV2d2xEdEZCSTxaaE5UUWFgVlJIMzpWTFtRX3QuZHkpX2RNaT1zaVNEfG9nJChaeT5TL1J1LDZ+YkxabHp9OFFtUWNmKl1RUyYseltycFA/aV1NNE9wTihXcTs+fXQ8ZXh2eyp2Y1Z4cGZQNWAiX05oNGA8PE96''@;'; put 'put ''ezE2bylRdDQjOE1bTGQqInA2eltPW18xS2F8PzV0PUozQCYzcT50Zn0yVHoraHUpVCk1Li5ucngzaWk+a0JqJUhSIUhlWEM/UyNkUkhCSzlEbFt8Oz18MUZYfiVbUy9JanxxZn0uMC80YH1scmlhOm5RenwmNVNDRmF7X3o3KWUkOHU7NFUvalVRVD5nQlpLcWYsYUNkXWRgW3UsQFhXZypuXUhW''@;'; put 'put ''eVtHZSohU3t3XTNpOWRvVW9oMVp4R3s4ck1vcz5pWnY0N2s5NXptJnYre3h6V2J3bjNwMGleI0E1dzBVWTMoeTs9SU1mXmYsUDA4T0thWkVgV2tkR2kpaFhfYDUrPiNrOFMzTSN1ZF15ajNSdXYqYE4ielhpYl5uOV1SREdfeTQwM2Jua0MvWS9xMXVJaUVjLyNHemk4KEJ8fno2U29vQ2Uva3xo''@;'; put 'put ''QXZvRUZ9Wnx2MjA4YS8/dFdhNnA+LCU7PFloUTRWdUNjJDhHeyMweXo0ITVseHY1QlcjZ1Z8RT19PGR4aS8iRTBQMWRObDFqbmhMTTJqNyp6fkB3ImJ+VXd3KTRRR3VdcHBBVEw5cXVtZSh7fFlHXTsrL0UkeiQxT2RwVEdUUW9zPCw3VGFHOlJzUEVvc311VXlha0VXJkw4XjFCcSl7SSgscFFw''@;'; put 'put ''OXkjbz9YUGJDcS8rNHIsPnBIaWN5W2IzcCkoWmAjQz1LdjUwbChZLnF7elppSFRAUWFZJFJXbUU5PlpmdToudUZLOnMkKTA9fEp0K3AvOX05REdmZnsvU1l8YDBoO0VAeEBmNSRKKUZPTFpsfGgjeiVVOCJdOEEqZCJFIU9yfDsvaT1xZigjTTdSKE1GX2ZyUyQuT0w0eV1zeikyMUVtRUcoc0Vz''@;'; put 'put ''V1tmPEUxQUwzW3t2UzZgLFk9V1Vhc255dF4/bUplfl1pSCEkVE18TVlPeTZSTWlxZU4xczQ1NzNJfEVfIiQ7Q2g0XX51LGE8SV9mIUxrRCw9YS87KC5jc3NlK1osaH14dmc7Yj4lKmghT1hhNStJRm8qUVFeSjVHPTNQNFVFIW4uOCMkZl5xdylNTl0kNFJfOzBqfHAudDxKVls2fCw8LzxtLGg8''@;'; put 'put ''d3NjJiE6KyZ4Nnt5ZXY/R05tMVJGZSVwbzEvdFdOak5oRHAwQ19FJHRzbSZkbG1oTV9XVWZ9a15yOEdCImVGO0c3WyJCd0d+bDdsaXMzdUNJWX5WYiJvSHded05WdmYkLkE4fjBfZC4+OT5JUHV4NSk1LDJaS2AzIjhQSW1IanpnRmllalh1Ozl5JUlvVn40RVdRc01uKzxLPHBaW2goWGx5UiRg''@;'; put 'put ''IU1uakV2bU1gKCgkUDs9fmg3YkF7QUBpYGkyZ0d0aDpCaiomLkxOd29MfXhXSjBEcDUydDUhQUspKXxvSXl2MUR0V1ZucjZaV1A3b3FQa0ZnK0pGcnZDa0dlTEQ5TGN5LGoya2g5M240QlIla0hpVW9Rfl1VI1l3UGhZZXs0MzZsenVvIVsqZFFIMmF8Z2d6T2BjW2haUjxLdXIrTzlvQTpfO1o9''@;'; put 'put ''LiNKYnZ5RyFaMj1lTzBBSUtLfmNuI0BbTzBMOzlDUjcwJVosUDt5L3BMeCNMK3VIUmtweSpXSVVlNFJEQGNxKmMsejZaQ3spazR+JnpaeisyKS92Z1NBZzdePEFhU3QxUVR+bCg1P0xIKXlQb35gQDohQWEkfDtiU19ReiMqNU5jaHpscTtUKGo4JkVqcmd+V3lsMnJvYSI7flE7Yio+UGxfLmlg''@;'; put 'put ''JGR5Z1J9QXZAKjQqLF5gXjBwYmBZLnhrcGk7ZkQuJEpSfVcsXlUuYExlS10ofTsxLDZmN1c9ZEUybXFROmQiSSMyYFppQU46ampERzdVNHdzWT1bWlJ5UlsqUiU9Y1tVR3E0aCpKbGovZXRPW0xNU25RQXQ3KWVbUk5GRyRNJDFZQlhRMFRbSVs2Yl4he0xYKVlDQXpSZVhnXTRwe0ssQXtHbDI3''@;'; put 'put ''RXUoTUlNNzJ9VGA7cVp4flAwM1EpUiYyKHE+MnVtPjVXOkkrTE54fH1pP2tGbiRAOGtOYWNyYWksTFBpKWA0eGg1fj44NyFJW2NDbSF4Jk8hOF8lVko4L0xwU1FjJnBCX1g1QWYoV1QyL11FUkdCRTRgQC9ydSF5N019eSZzcVppLlZYZTJjNkZTOXZoW0ksP1Qma2shNWdbZD90JD93Q1EyIXMs''@;'; put 'put ''VUhvZk5ZeUdqVGcvMT9wM3ltSitUTDtqTitDfWJgM2hCM2FNV3ZTaXJJZn1aTTRkV0JoWCFETWg/eFBgLEcwaTEsRzAyWl9jOUZoQW4mVUMmdDpGOXJINFFLRE92U3JkbjsxOlpmOnt9aWpxIV8uajhhM3gwWXFITDted145PD8oXkQsaEpDNE4+e3Uzb10jPFt8ejptJn4vdkxDe1RkNGMqfSlj''@;'; put 'put ''aVdCOTpNT014JVZ5fGBLRFoicFRkaTI5WTAxRiM+RXxNOUsyW3szUDguRXZIWDY1P1A6Uzx3bk9RP2MsJFV5PXl4VndJV29waTkyY0FKRjZQKWdaLkspLkh4RzNCUVYxM042JmR0fFBSaWRtdGxQblRCKGFENnZWekoxOXt5WF0/ZjMhX0wudT5lPiZ3bXhlTFlkfGclYTEuXzNzRE8pSVpNfmtP''@;'; put 'put ''JkhDNH1hcGYySEI6X2pza05aUjY3XmdZdSFfQ2U/PSY/ZXAlPlV9OGxdX1BVPHU4U3oiMSUxI2JoMkFTIytbbzJYXnAmdGVWZDgzWGZgSDZuXyh8RDF+N11PTDtQeTZqKEk3ZSldV1VCYm5+IjciU2F5bC8kUzM1YUEkaipCJF9TKUMubSpYcmJMb3k9K05Ke2kyNlBiIkhIM0JVT0ViZSVyY0tV''@;'; put 'put ''QkxOWjoyPDtNUzYuZ0I3czVjWTpdYlh6MF82Vz1tWGZlcixzIll7NiQzaG46VUZkSkxAT1d0RiFnfHBCMW5mQzRiejBNSHZqLC5QIkBdYy9YcmlMUj9Nbk5eVENEdDx+MTJJMnk8PkAqcV8oNSk4eXVxe2k3dkBsMndwWmEpKEpzUEdfQzpeUChBKHE+Sno1MVtQSF4kO0U+IylJS1ppQUU/K3Fh''@;'; put 'put ''TzVlTUE+ZEYkUX4rRTJxO2JJKD1WYXY0LnZ5fVh0XSxHM0ZaWTAuMFV0WUk4SjVkQFJHNUdIdDtjKSJgVXRtaWdrdilUQjo6U35AYGA+TWcpNUxQJHFyTHp7RW5gdjNRQ3taQVc9PylKRlkrYGtUdV5lQCgxTF1oYnJ3a25xM3hWImBoaj09VEBhQzN1R152PUV1OHc8bEZbMExVJkFlSVNhWkhl''@;'; put 'put ''Rz9yPGZ6OnBeWiVafmlRUVA2UiJ8fDRxYWUqOXIhMnZkc3MrQzg4RW5QVC5gZDZsYjVEZ3FsJWJnJFdHKn5+SGVwOGNie19uJksuJkUxP3JMb3gvUzpjSmBvMn5FWEJqRkJuRnRbRCwpay8sPiQpdFJUPj1oT1doPDhbQ2spSlVUWCpNaVl9emhUMHNyc2wkNVM6cUk+ZEk4ZEIpd15mcWR0Y3ok''@;'; put 'put ''O1d6NnNtOVZ7RFJQWUYqVDBJei5DQj5pYDB7QnFAfClyT05mLmkmMXhAeS5mSE8jUWZkZSJ6VCl5YCxIVzM8RV1fW2tGQmNTekAvSEs5YGwubSsmP0hpeHUqN1JHczlEU05fVCNvRmohVU17cWNreF5vfUVAJHR6bG1HbUIlbElqZWNkSlAqeGNwVXx9YUImcX1kSmBvO3hORHE7PllpcT8lQE9Q''@;'; put 'put ''MDxkaSFxbT11OmgufEAhMChsc20mPW9HWyRPTmc0Ik5yIl98IVJTUHJFZG9FTXViTENPR3ZtRTBxJlIwQDdjWjdrcnhlN3FOcEB1SDdwan5gTWVMN0liPVpjKXBsKXRlMEg0YCh1JDxUODpVRl1xYyEuY19QT0pyMGIlQz8rdV96X0QwV194QzBbM1ljbHwyMk1QRH52UzF4Zk0xd29vQTdPTXxz''@;'; put 'put ''Vl5LTjtXfExaOiJVb1B0ZURwUDdHTnE2THdAfTtZWUc3V3pgTUc/OEpXeSFIbUR6WV9HUH1lcWI+N0lhJWVgRGZdI1s6RC98PFokZTwoZDxbR2xqeXhrNEVLMVVObU1Cez1BPWx8NkpZZjIkcEY4Qy5uK3c3fGAlWHB4aU0yPkBubkwxO1tebEVdNDhQfG9qfll9Uzs0QV9VT34qfCF7ITt4PClS''@;'; put 'put ''SkNeXTlXY09HSCVkbWs2XWgyJG57PXZdVlt8JXIoP1FmKnFhOyRxSyoyYnQvclosXWd0bUJ1S3xkO08hMk5HUyYxQD5qX2p1O0N7dXZKQjMybSpbZml8bEhdeWpMKj9FZn0pUUddd0s/NUArV0BRKiZINmhFbCU+Kk5gZWEiYlh4ZnMvVmwrOjVFXkBAfGJIfHhHU1QmRyx1d2ZifEFyWDZWdUAp''@;'; put 'put ''XVgmT005UiZiI1A+NGI5RTFlRytZaV4kTEZ3a3dkb2owYWksPlM3THJRbFtbfUZdQmZpO3dYZHJDXTspXlV+W0pZSkpRYXd+YVVdRnhjSE9VPlVWITgrKSh+aWchRncse2s5SFc2YWN3SWdpeDdMbm8rQXVjW25dLFEhPmRPNUxnZD8wfGQubGQ9JVo2fE42O10kJCMuS2oyaGg/ZGg+Pyl8Ij45''@;'; put 'put ''V04kR2svT1EkOmpOV2IhJFpSW2U8Tz15IUVid3pGNzN4VXZLJDV7YEA2QyNhbWpdLm03NjRsS3RTLiZNKiRPd2dZYS9GOi54bXs7Qztpa3RMbkZ6cUwsZVtrNDs1elBYTlJ5cjN2IiVzOjtHZUs6TSpeTiZbemVVSmZOWEJlSjU0Mzh8Ozd2clssblB7OltOYHp6RElGPmJfOnN5Xk0hfjw1Z0pz''@;'; put 'put ''fiIvVFZWfDBuVFE3Qnc5NX1mUT5URCJBdz1BaH5UM040JU02QyNgcWBxTj4mXVR0cHE4VSk0KCN3JGMpOm5xQ28rY1IxcEpBPmglcSkzNWxXUmteOnQhRV9UVzpVT2c/XmhkYVJqIndhKiZuTTcrVCxuRiNDcmwpQCkhN1koNURnY2ZiSWBGUl5AIz1fUktRNz9KWGxdUVg8d1ImK2dldnBjKmwz''@;'; put 'put ''fml7Pyg4KVdacUdTe3x0Pz9sPiU8ZF0jMzVdJG1UJjB0MD9pb356IXRDXV9GeTl+PGxYdmB3YHVbI0siVkRTV0RqKltdYlovZUxLZCMrPVpZSyleS3x4WHxoblc4Qj9lPXBOZ0hDMk06SUk7K3xodVBGS0RrczltaFR+WTl8ZXUzNHI6NVAuRVtZYS8+djddV3xbTng5S2lndD4jMmc+SiF1Wm1W''@;'; put 'put ''TGpVfHgwNitOemJOdVJUcV8jIW5lWnA9I2wieytpaDZYMXZKbU1pS3daRik+MkksX1kzcHtXP0hCIzs3LjtPYypgKCkxMnlhQ2koeXNRa1ExVVFINmBoVCtjU1sseS9qRjImfT1pNFFPPEBFQXtAb35tTHpEPUx6cX5hUSV9YzVOclplY0ZdISVzWzRnPlF2VFVBV1MyXkYjbyVLZ2NRMVFVY3p9''@;'; put 'put ''V107Q3ssUX1DPFR2YDRMdHk7azxFMSQsNmRobHE3bVF4JjhVL0wsOSM7Sl4sRERoTm9jOl1gRF5PQDNYMEhtclprRTBNNEd3NUR8aDVhdyNBa1tZRkhbWyVycW9IfEVRQDBad35QJlYsMipRVUxKQWo3eGp2bj5fdVtscFdsbFNpZmIvb1ZITGUlPjYhRDlzSyxFUyghSCR8RzRqMDFGPXRVTjRf''@;'; put 'put ''ZGtHflAlYjZvRDVaY0d4WyNUamBjQj9qNkljWChbfEhhUXtwRk0oSzNiRVJvJXNsOmVNLFpucyw/e0dfWnAlYTEqU35Mb0o8MiFZa3kreDZFYWhwWGkpL1t7Z2VsYEs2QFdnI0pKN2VPdnJIMmFiNSsjLixgYVlJV0ouU2NSVm1acm5fcEw+RWVgKipsSFQqNUkhQmViRixGLltgYzxfRUgvbilo''@;'; put 'put ''RE88Z3EkZ1ojdjEuUHJ0VD1MUSg4REp9Zy9SfWF2ZjkjIi9pWnZnVlYuW2xAWSJeTCkydl5MJS5hcDROc29PMS8iZURRSmFENGhYdGozIklNUk10Q3NjI0pGK01oWFYrMHZkdlJVWEBYL2h4c0hlcH4sNzMiTjgha1JIY2Q/JGAhezNsNXVXYVt2IUt3fmclI2gvSEoqLyVXZnJ8a0RJRGN8LiZq''@;'; put 'put ''Ki5NPFB6VDZ0SU5Mdlo7Q0JFVXd3Rjh8MXcqYntFZ3lQW0hCaiNDNiMuWzkzdWZzc01SPlFsa0N0QTZMelddKkRqanl5WlJWcFZSQShAVzs9LyVETGwiU2F+fE18dSFpWDhmV0tTITNbM1Y8aTB+aGJaKXpVLGlSUjgoc1krRUVSfiNyM0ZZQUVRX2hXc15tZURBZ2pSQHJsVlFLMG58S0VVOj4s''@;'; put 'put ''c043QmBUYzN2aGdhVjBUNSVWPGopUjJXLEVfVW0qImcyVXNHeF9QWklndXJxJiV5MSpDYnB8cjU8UjMkdlJ2Qj9iKCFKQj92JDVPWll2Q2ptby54enAzcGZWfHpaMi5Ndz58VW4qTyhwMWBXRmw+ejBmaiksbmRoc2dIPDk7NzJGeytZJVM6YkoyM2k7enhyR1okZVIxNjEpPUExeSMqcztTMzhJ''@;'; put 'put ''OGx4dFk/dihgZyxRPnReMmpxbVskcXU1eWA2fmZLcyo/K3VwSmJpOVhzcUB6fDJeImxKMXtfYFEwYXo0bW4zfEJlWnddJVIkZXEjX0JRK29QZngxTSUuWXswZSxEYz5wXUdfZX1QbnpSdm1jQTk8IXsrOzFIclZUUWw/UGIkTkxnLldBLjxJWVVFb3lOSEd3X1pBJW8qLGZmXjlGTG10YDRKdjch''@;'; put 'put ''bCMoTm9bUFdNY2RvXV9pX2JsPE5jbzg1dDYjWVc2PVY7OjtBYkA7M24uL0x5M0tPMkpCU0sqKlhKcTM7PEMjK3YvbjVZcTZRMio+RyNERktmOyU6ZChbSyVVImF7YUU2P2Z9SWJGWlZ2I31+LDI4JFpEZlAmQm0zZEVETT1CSXUyZ3d6b1pEWllMaURvWHpUOyFkV3FKfV9jKyVPQF16UV8hUSk1''@;'; put 'put ''QkRxaE1qK2ciMU1gSFU0MylsPGk0SGhbX29DaWxye3tYK1hZUGdfaiNbLnlPcTteZXhMd3EuX2MyLDV9dlcrb1VZRGF5S3w4KmAvRzMoZ0BvRXsyTmVmZVljeU59eGJ0N0JbNEpsfFljWEgpQi8wKGskfWhENmxsUWBMWWwhOkVAUSlkNXcwKlVOdlglWUNWPjZLNzV1fENJWS9rfkUhLzx9QElD''@;'; put 'put ''PSxwZENUKDF6UUIyU05CYyl5IWJoJlM3di86MzsjQ0FoSFNMZ1k5ZTBwNU9DfjUvIm9hQzMpKmNtKS8iJXxGUFA7Y0tyIy9GeGxVbC52KjAweWgqI0UidX5lWl00ZyM3ZU54NTx6RVtzSjxAWih5aDcwImVLQkY3PVI/PX01clg6LkpadTcha2x1aHV6TWNXLEBCYjJdV2hRcFVVOnozdFIpMEFC''@;'; put 'put ''LEtRXUw2Q345TWQ2diFqWyEhd0w2bzIjOWsqeiklPE4mQHRKMXQ6YyhIPzZ6bFJfVmFOUGJNIkJmb3RZOX1tRHFFLjNQSE9ufFh2cGIoRC5WTm4peG1gTWx3aWckUmVhVWNQd1NCWik3WTUva0N8ei87fXlHQiJFQ2J3VnU5UVp9OzJ3Xm8jZT1UO2Joa3RTOV80S3xgUjVdKTBHYywhfDYwSE1s''@;'; put 'put ''Y1duLmE+XnVZQFpUPGVTcypNc3ZkZSpaMShbZEA9UVBYdmF+dCNFTEBGXjFpbENYeVEqalomOjNlYFhRY19bQ3ImMSI6QndpI0hHN2E7VDduVUBIIlAwaH14NjomV3BPNy5JWmpSNDUycURwXmAkOCNKXmN6JmwmSXJ0T3RSNVQ9IXQ5SXI6Myg6bkp9RFRrK1N2ODNJbFhAdWgibSwyIW1CZ2NA''@;'; put 'put ''aFlGKFF8UF8mREB7IzpaZW8xUyFEWXFiJDghfS8xR2IuSD5WSyReOTJwImg5YS4mbGhvX0MuMTdPe3h4cS8lWlB3OHpneWNqMEV6QUJkNVhzcCo0Kn1xJFdAbklnSER+N3ZHfkQ9Zlk4fDFqP3ZuQXh8WUlSc1sqbUpBZERYeFoyI3M3cDRYIm91PHQlb2RKUEpQLl9dW3hLR2hDRWszW24mLzRr''@;'; put 'put ''dlZFI2JwYCZvZy9Ia0BwWk58K0VnIWlJI201bHk8eVNVX2ZnbmhXYFdFR25nN3tSRjoiNTYpd2dSKSZFRVU6Q29oLE19KEMmI215fiZCKGh2cEZwTUk+Xk5wcUxOajJTITRNSm1KKGo1OmB+ZVs6XSxMX2pyaCVPUkkxSUcyMWRrNXlIWHgmMlVEbTNiYjs2e1lAellafC9CfT00VWYmRUsqRSN5''@;'; put 'put ''aGIheXo6YCZtcCwuWkxxMCY1c0BWXj4+OCEqRnM1PX1fdWNyOjcjVzNaSnBzXndZP3hfPi5gPmd4cjNjTlVeVzVFUWY+dlRSVTZOYCUmJjFvaj5nNl9aa1BpeFNnSSFmaDkjNUlfQzMrYG9fZWxnaSM0MCY5ISZkOTZ4NlV1eFVsZSV7Q01XVDJEfkNCT3U5aikpMkNLPzBOOVYldW5odFYuLyUx''@;'; put 'put ''OS9iZSRiOHUwTEZeMD56bCpVVUVkRz0zfFlrQFIrMEVgKHQ/VmdXPiQzMHReJkB7OlheaFZQJihJUyZOTUc2eUM0fS9Pb1sxRSRzNE9PUiM0Z3pBa0gqZlE9XTB9XlVTYUhTaS4xVm5ydT9TejlMe0t3MWpbYW5AamBbMWk+MTZ2OXgrP2E8NHZLLCgxQ1UvJSI0Z0wiZD5UQnA+Y0hHTDxmPWY+''@;'; put 'put ''LHJkZkNxQyFKbFFMRGJaZUE+T2pSdWY9VklIdlQ2anZlKXZ0O0Z9LCFrcSxydFQ5Y0cvYVJjWU89RmFZTnZMbyVvdGpBL0ghR3ZFaDUyYj9QQUcvWD9UMWsjYn48U2dzXjV2aCovR192MlA3fD9MVEBFXzFQNl9NNz9bVGVCfHJmXWNjTTk9Q3M/YWZdfUpCbGZtbS9tazRgSGdzPVN1NCFneUAk''@;'; put 'put ''VUgxJmNPJlt9bTZneVhIKT9ET1lxPCgzPFskbURRYFJKflBec20kXUtBQmtTKi5kO2Izekg5NndmMklyRkZqRzY+XzVSVCQqWntiOS4mczBqU1MqaiU+VCRCeGFaWipNNGtvRyNyKGgpUGBHY3xRPUA2R152ZmNlO2tpeyN8cFd1fjBqXXJyOyloYmYlKGlkZXpGe3VUJktPe19DVihUYylmeExj''@;'; put 'put ''WFVxUmNrLFIiJk4xe3VrU1Q5czJKTStoWz5KNSovOD94WExYcXopa25CXmk+eFROLFdVUG1aXjBgeV0pTFBrKCRBYnx0c1ReSjZOSDRbdDQhe341dXc3NSJ+bGc5YGpmdG1JRkIuOyghQUQqIVUibHFXN3FnJEVkXVRPcEE8Tn1KNk9LOHxQYVc5X3IzPiQjbVAlW3lIJlJCPkBjP3dgOWtwSCo7''@;'; put 'put ''UXY7JEFHQ3FOTDRhQXdYJH5dQy9VOFZbanRpQEteY3N5fHwhU0t0PV85NjFzYSpbPzwsblcrNmk3XSpdX1MyVntsc2Y9NjJNIngzWkwxVkhxV21NUClVeml4RmpJWHdMdXtbcWNvblhMJFVEdGU5bmtRUkojcEM+OjhobEo0V35BdV8oQylrR1Z+K0xRPDxwLmlDPmc6bWBKcnZMOmA8WiIhbW07''@;'; put 'put ''ZyJWcXlRMFIsQkc+JU8oZD52OmxkdUxDLCsoQTRtRDhjVD4vZzRqbm1PQXFySyw6NVBtfkBrU2V7TnN1ZC5YcHdCVTBYeWN3cj1YJi9MVlF7diE4VTpyMV1EWGx9X08rOik8cks3UXllMXBfUT4lVj14KH1IKVY4b0Z2KHZQPDJhWSMsJkNffGd0NlE4UD4ka2ZsSTtUU0w5Yn14NCw0QS4jW1l+''@;'; put 'put ''Zix2TyQmdEQ6VW5HKGFXP19lNEhZLkU8dF9VMH5kdl1OKzdNTzV5eHxRITh3c351JT46TG5TRWcwQlpZMDkqMyMwPW1tLjN2QGlYOSlndlJSfmpvTlNlJEslQkhCVGNWWFZuLmJzfFMzaUdZNiwyPy9kYS9SK2RUVXpWNWR4YSg2VSRTZEhmRFRmWXglM0AiaGNPKHlMYDt5UD1lQ1ZhY2gkI2o9''@;'; put 'put ''ZGM6TTZlYz1yaWVTOTE4Tlk8UXYsdmddXXZDOipIQk1NaF9pSFhvWypXfUd+dn5oeHZKNl03V0RFfUlfIVBoOnkrbGYsTn13aFVOXytDU2JJb11gIyE5Y19XaCs7cXUjdXhvZUMrOG1oTX1QIilIXlteP2JebEg1ajc9ZHFxekB1Vzo6empYcFswTkV2IksociQjVDFZNHMreyFEfnpKXyVGWzd8''@;'; put 'put ''M0xyQGRoPkQqSzhHIVFRTlZvLy5MazQyI0VLYCh0KlhvIyolTCsmWWYzRjwrNyZKX09OTHw8MDRHeVE8W3FIKklgVjhfbD9Xel4wUzBNdXBlOX55IjllQSV+Vmx4RkV2Mjk/VDJ4NDw/ZD9HbyUwWkA9TEtHajxGLE5aMW18VFApLDlmNnRNQCQkYHgqcjguKH1DX0NDNGtVPyZ2ZTo7NSlJND1x''@;'; put 'put ''NHBCRiFyO090NVhFckUpejFKe0dIeiY3P1NBbE1mWWE1UDUpVm9XV00kJlYhdyJYMV5xOVlVcko6NSQ/OkVYSShCWC5xZnlmczM7TjI+NHxeRDVDbGFhUjxaUFZSMmNvMGIyTlMofGRBd0J1O1tnNFtMYTJWYCgobElBTTR3UDFNSX51SGhKRXk4eEIzaXtaQmBaeUx8Tys5YUdZaCttQGpIPTBX''@;'; put 'put ''KiNwSkdBK0FDJFJ0OG06R3VnJUNqJkxnNkZiYkhzdjJFI0hGTDNFVE83aF5zYCIqLm5ufVlDO1c5K25oOyZEfXYpbnNZUCtddShmYC85XVFoWzsqSzpQajFncCQzakJ5KDJMcUxTU0ozcitdelFmdHR2Q2kyaUpMI350bmksRCRWZnxHYXxfZylfTyxVVHxZXTZJe3d0fS4raSM2QkVUQlROOigs''@;'; put 'put ''YWZKY0lyLHgucnlrX3l+X3k4O2MvOjtQTFopd0FGZltFXzcrN2FFcllZQkgjaXJePjt8M0U2OjZORSssalF3YU8kTlphLCsrMmBGYiovPE0iblJAP2dWdT9rWzhrQD5+USZAJDY9WGR2JTw4N3QhKzswP2M+ek5uMXlSOmJbRCU5TkYrP3lAMDtPcnpmISthYndKMDRyZ2dpZyVvcFVpdVJmSGhH''@;'; put 'put ''PWZeN0sjP0p8dF5TaX08eDdxZDAkfTcvUztWOy5KZFhubjg9Q35eezB2QHdYfSlLYkZUemskJH1YKCM7Z3E4bSFZO2FNSis7dX48VGgxUCIjPnoodns6P3w/SEhTbUx9Ki5uInpoaz9YSlU4V2x8P0MrMV8xWlVEMWpseyFpYDZFQXo1WV5iaVdjbEJDOm5nJSp0diUmZUYjPSpRTXswT117eyYy''@;'; put 'put ''QzhMY0c5IW8zZ2JyYkhDe1tCMUBQWVsuSWM9c0tnTDpCPHVaIUZefldAOXNyYF1nM2I+dnUpNFU6XisqaFtHXSkoNWVdaSI1JihXWWojYmApcTh+cFljNnl4ZmZZOmJHXy9eZCpbeGI7NzJwMkw8cnxhbiVAI3V9ZFlSJm5nITdSOUhbOERqVS9IK3JZeHBaY2pkNVBXRWVWN189amdvWFdbR0Rn''@;'; put 'put ''d09TV2JFT2duYX4zdHdrNylNQG03TDI3YX5JTTM2fW9KW0ZeIkhaeylzTF4xO3E/TS56ZHgpXyhbSVlXM0RNWjFeIyM/Wj1VUkpVWyF+QVAxNHgjM2piPH1iI2c3N1N9Vj9QeTFeST0pLGRuant1V20pKEcpPC4wNiQkTT4wLk55KDMibT1XaVAsSE00d3YmMHtkT25SOCZBWjFtR3U5WTlrcToh''@;'; put 'put ''QF5KOU5WT2A4cjw6OSNuMHIxXUUzNmRvPG80cHJgKnJiQ2R7R2FKTy47THtGcWVkMi5jRWQmfjtbY3pMdkVBMltoZyp5MDosfEhtPl18YXslNjF2W2gqRTZKfT9pSGlxR092QVg+Y3ZjN2d2Wz5HJmgub0tLXTJmXSU1RXV5JFo9eFVWRXBPZWVFOiI3YjkwSmRqX3M/aEl4KlZ9XihudlcpZWBE''@;'; put 'put ''dyJDeUJRWSM1d1klMSY8MTo0fUE1Tk9xfFRDclhKVGJQcSJPeTVQKiM7RDskRW4iM3N+YGR6RG8lKSU+OWJQLDNtZERsdFZkYFFxT3IzTjMwLmklXlgrNjVlI1hxM3UvXmNQemE8ZlQoYVM8MXYxQ3EsdTxqYSs5ZFpEPWRfbUVaSHxgSEZgb285QnNmdGw7I2JDIjpCM3FJa3ckekxdTzhLJVpm''@;'; put 'put ''elp3XiNXSk9+WU01MSZvTHRzVyN3OlFfWipfKitDJU1bcDhTREZwX0FPRXBJOUIqQUJ8PmEzViZbLyR0WDt8TCpMQng2YVMlLHRedkddP3gyQ3cqT1crfUU1PkZgOSJ2QytfKip9Mnc7XlpfdVs6ZmN7YlElUmh+UEZkMWBNRztDNzo0KzNzVTZlbVsoPkx8UnZSWH1PNUpmW0gkU21qX19ub3tr''@;'; put 'put ''KTd8d2dQbFo4U15tQ1MvSVB8YXdsYisoc0xnYlE+SSw2fjIybSk2UDkveVNRWWsjWHxyQE1OT2AsP0VkRStITzxyR2lRJjtsdnBmOCt9K0MqeTAhdGhGRSk0JVFNZkRHK0A+LCxqaWZ4K1dqTGdvbExSdGRBQFhoNDFDY0dMWEBhfXhLUDk5Y2A6bT01blsma08yVzUuMF15JFVaanhUZGsjXShd''@;'; put 'put ''cFM/SzF8cVJLSCg9SyNnTzdFVDlzK1hXbm5HZDE5bHc8PGkmVHBiJiRyUksqMGpTcXU6RURbfTwrb19NNjE0SUshT0tFTWlLPi8mWlhid2xjdy4sbWZiR3trMW9MeCJheyhYNl8zWU01Yj49L0ErT3k5MHBWUm13LyhIY19bKlo5KGF8dkR3PHk/dU9gdiIrbyokTyVGKFZKW2coby5ganh3NTh5''@;'; put 'put ''d2pRNDptQncibiRwSWVaJlZ+QXtHWkh8allsQSphaU1PdjVhSD91X29WazE+TF0/N0BaeC5HRT9yZW9uRWQhVnxtZ2Rqc3lUMDV9XWd8YzR3djEkbyxbN2VJY0ciXlZIWVpTZUh6Nk4zOnZ3c058NEUzdFojYG5dQzUwV3VHcVB0bihlZVFZaTVgRjRMWzQudGB+fXp5QDRJei81ND9XcXlvOz1u''@;'; put 'put ''ZVhuaFshUyQqOmxqZm1AMGxzTzJXV3BhTE5eL1BNK2VNLFMpekxUTzBKZEsrRjFZYCxHZjMiUk5XN1hrfCUzYy5TJEQzbU0pNl9UQ2VjSkxAVlRDdHgkbEhAV3UyWEAleEgsW3NfXT5vbCJVYCh3WWY0Yi4oJCkiKnowdUBLdWBydERNam9tKERNRH0qdE1NMWZ1WjQxPGIhKFs4PFc8KGkpbGtg''@;'; put 'put ''Vy9tb3RyQGciVD49Q1MpU15LZSFyT2U8Ln5mKXZ1JXlkTjFJOG1mVjVuRT9HWUw7Ump2Jng4MyRHVG4wQk5+SFI/aX41V29Tazo/dExTZ3tUSj02cWQlNiMvKm86TVRhd2ZUKzYoPXVIbDd4bncuPjJUVmlyaX1seWhUN0czWGZYWlRucFZ7VUgsWGpgKil0PjoleF12OnpVSkc6YW52aiJ4LFtV''@;'; put 'put ''U1clKiV7RlhMZnpXLyQ7c0J3LlNmT3d5OE95eC9STjRhTlk0QTwpc2J5eE1UdnpqIy97REVaZzF0ekQ9alheKVFJfCZZa15aVGElfTYiV3ZUcllLeCM2YzQ5Nk43dG5ZRmVKTWZwVCVBKTU0P3dCL3ZYP3RqXjN8LHV8KnljWHNISVJAbDhZRWguYmNSYjNUfHtGY2pSPXQ5VDsmUDQ5MHo9T04q''@;'; put 'put ''U35fRXY0MDsvTm9rMmgpUz1ATFI+fHw+KUdSKFZYXXM4c19CLmROYHVlUndoZkBkeHF+V3w6JSVoTmM8YXVyJlF5fjIvel0/Pn1ba35tXmhOZH5sLklteVVsMXp3NEo0P3AmUTcqKUdfJXpQdj9FVyRBaUtEPWQhVX5VUE43bCZ3cVRdKyxyWz4pY15QWFpvM2BZJlokPVZ4fVhfJEg1UUJRNlgu''@;'; put 'put ''ZjQkLmhmYmsmN2xPSzBwTCYoV2QvWiE2JihvWyMzbkVgamFZT252OkJyZmp1dWFtZkR7QltedHNrITQmY2FMVmlQJSo/MyMuYTU5YmFHbCVTLHdXJEI+YElkZW99Wj47Xz52WUB4NF9vITdQJTZ8ZnMwZjQhVWpWQ1NVaH4/VCl8KmF0IiFoOUhfKlNRXW0sTlV7UHA/SiN9MWRyTy4hZkdBVHIq''@;'; put 'put ''fX5OLi9za2IxK299UEpmQzg2Q0QvKERIKU9WNFpbOGYlJEdeXmk2S3pPKyZrUDtDVjBhfHloY1tENj1Nb3hyXVpefj8yK2hxKm5ldTdROXJwZHVYZDljdENRbTk/eyphcWo1YiRZV1peaFo9dGYrUUkoYWc7Tml5bGJbWi9XfW53KnlCd3g/eTduTE9AZWRrbkVve2MmQFZFRW44TCtHI1o9eVVs''@;'; put 'put ''YURVdSlCfDZVZmNdLF1DWW9WdForUChfNiRoYnUzLE1vVC8/Sk4sRF89QnRdaChtKkohX3BpaWNFa2t5UnlVYypKVEspcHF0OFMwWjFrWil1SkYvfEBUdGxMUm0hRGc7cWVIOjIvQltVeWhVPCZVJDJmPz1dcVpNKmBSYHtuTGt0Om98P3pUX0kkQCw3RUA1NTloeGtjXlJ+ajssSTtaX14ldChF''@;'; put 'put ''Vy90bVhvSDRSUUhmPmN+SHQ7cD16fSZCUH0mKVl5RF5HKSVoYFB3bG1aNG9rXzFzK043SyRGYWlEZytxcl0mNiYpWypVZ3VMWC9Rd3YvL2VoRkRlZElyVExYS3EqKSQ1bmQib2RUK1d8bHo5IjlDeWZienRwTzB0M1dXNj9QYit8TVVZO1pbPm8uMUNzY0Yqbzc8REs2LGAmd2glbzEqcihkaVVd''@;'; put 'put ''Ryk+MXlVbUtNWmU+dl41YFBGUmlGNSk+THpFW0xebiY6WmR4W1h7XXtKW3lQUV9UPnhYSj9eSi59UyNWS0lIZyFLa04oTmw9eGo5YklYcVcuRG5yaFokJEBrSWRxTkBVZlZuaXFwTkVDMC9XKnVYUFNeS3ZeVSwwbTJbeVVgK3VHK0coPDxAT2k0Ti9YPTFPb2EiTDtldXVlfn59a0pFMm4zbjc0''@;'; put 'put ''WGE/cDJ7W1o+SWtqSyJjbVJTbTBgLlhTc21RJVUjajUzJiF0QHQrPyp9K3ZtQlNgQUYvIkFZMXJkX21meX1oN3A/eV5+UywyWiVNZS8pK2hjSVFsNW9tQGJbdTVySjVpeGNmQXoxWVdqR2IjZzs+Y1E9UTwvJkZ1L1VtREpBMDVrKmtAI2dtMGh+SE9KY2oyT2VJa2FwLCpKUz8pP3kpUmMuKjsk''@;'; put 'put ''bEl4ZFF6fS5bLHEjRyEsR3xFfU42bDYrM0JTaV8wWkhjQ1NpP1hjbCUhOnc2YWxjaSIkeFpYQi4mKS9hQFkuVj1fRjg9NEVpU0Z2VDRERD0kNGBaLihMV0E8SkdsREAuL3dsQj54LllSNFI9UCNjVWIscCZUKEtHNHJPXXk0VUFYISI/PCVkfi45eUZlKW1xPUVDeGh6O3klfG8/YTJ4QzIoZ15X''@;'; put 'put ''PHhvOnF3MFB9bT5wTiJARW80bSJrc35fZSYjS3IxSVlNKTRHNGhjMzQlb2d0L2h9V3ZnXzUqczpAJXd5JjJXOTtnQWEsR3hCKlNpa1hqPGtEYElleC5PSjEjOSFTbCFvZGpyQ11mKEloen5zNG92Wkd4MSp3WG5zPSgrZ1Jkel9XPXZlKChvZEU1LiYwOiZ0S00uZWtRTSZtajRXfTNrOThLY3V6''@;'; put 'put ''fj1NO0JhRCUwVz4zdVs6fWRSV2V0ZCV2d0dPTHtNVVdxYylYfnt2Y3ZUISZKdkI4Z1pxL0BrQ2VMeDoxUT45b3RxczoiZlNMI3lWYTM5dncmdDsre3xgcSE7VGlCaXAleXBhUjF+ZU1aR1hedExfZ0NtNTRHKl5XRm0/Xj5JLFR+L0p4MmxwalN5MEJzNFAsM0ZdSjAwe0dnbWFDJVhVQ0pqQiE5''@;'; put 'put ''eVEhSHRORFo5KGNKMjpLcXVCYW5OIWohTStkL2tuWEJ5Um9gSnw+fVRyWnk1aWBiSVNoMT85RSNVOm1XV11KaXU5ellJZVMzJHc0TTYqeUYoXVQweUMjIiRVP3NYPEtsTHh8XjtxXXM0ViFjfU9kdF9IJSpLPy49dSZPWFFaMHVOLFB3RVZ0LGl6Ky5uNmBLekw7a1pJWHtqZGFoNzYhaUhgI19a''@;'; put 'put ''OV0heGd2VjpEZWkxYSlkd0s+RT0mRWFLRDUzYG9qTSN9QUBdVC9mSU5ZTmBuXUVNLm0+VWp0V1E4Tkd+SjJGIzRrJmZHRX0+cHl9aG1ddktGVlskYjN5b2R3eTQzJDxoaWNuMCM0UHdFRHtBYylXLjBEYzF1XUpGa1Q6blk/LmtISEZBa3oud0tsMS55S1hQb3p1Myt2MHdDYlMhX0FSSkxrRHoj''@;'; put 'put ''eENpVzV2UD1HIjhrQkBdY2J9UjpCdD95ZlJnWkl0TDJ8U1gsWFpELiw+XiU/cG1xfWVIcCFaUi8yOWNeal9lNHxkdDNTaHN3a0JFKzxqL3tbWShGcFRCamt0R2RpKCY0QT8maX4+bzZNTDVNZjgubDdSPTtkOSROJSRXNVoyUz1nSzFvL2wvTTxzfWVHRWxvaCQqYFAuJEoxalJ7MzpMdj5gZnRX''@;'; put 'put ''IyhiUW09PiZqOHQ2I2w+Mnc+XSooYURwW0s0b1NrY2JBLHZAMismMlcqSlYjOiU2MDcjLk9mOkJPb3YiSzJ+WEwwLkolZVtFPmU2Si5JPmwrYDBrdi5qY1NCMGw2N1JhYEFNYypCUl81SXYhWzBLa2l0RkRtL3gvaXdBaihGczREV1JVJSRuPm9jfEYsZVNGO3cqMUNKQSImazY5XXVgZTphJjBF''@;'; put 'put ''Ql8qPWBRUFNuJGZ5ZnxKel1YUlR2bVVdSmglIS5vVD9MeC5kNSFka0ReWl9hRUFkMTFXSUI+NCVbdGsxYyh7X3EiSiVTdXJVJltNY0pZLD5MbE1gX2s5XSlbS3w+JTl6fj4/SlcsbnJrV25mN30/RHglJDpPI1FMUVR2UkkhNVYhfXFKTGY6WzRdYHZwP24uJFoiSiNnUTojOzklPmB9MS9Oc1Ul''@;'; put 'put ''UGNeQG9CNHxQRypGS3soOlRRU292XVhALnRxTGNRVmtLNW55V3FIWFY6cVBKcll5fWExfiNpXUheKWhMNklYeCtHN24qQksuJWsvXmNPUGtKKzNAcFl+TX4idyVmaWcxKzMsPm8rSEwjbyM+Sm5YWl14c3dSfTwzTU1kLDc3ZkIlQGhKIm1EXjUxImw0TkhPLCpZUVZqYl5aTU0+JjRCKzkzNT0o''@;'; put 'put ''V11ePD16OnlvPiM7T0FzXzpEKXAxVF9IUU1SVyI0fC5iUCxmZmMuUn1ZMnZ0ZShrTjxtVTNrMkVfMmIzaEJlaHZrU243TSpVWXI+OlJVZiRzPW1CSjNudihFKXh7ITBgQEttYlIhS1YsRGd7Uy9vSG8yalRHb2QjW1hrMHJPZmc4JCgrc0c0dFlUdStwdjI3Vj4zTURyckJZOXRNRjlRJiRgSX0x''@;'; put 'put ''Ozo3WDZkNDhvdDxSfTJleywibiVAOEpfWHklajhzOkxsK1VEeyMsVVpbK3hJekpaOlp3NHA8KXlOensjTFNQWkgmY3xFXUIqemVtY1U7KDo+YSlUJFd8bC5xeyEiN3VNKih3cHs7TTshcHgrTGY4Xl5xO0VnUUwpZCRoKXMmRylgMlVPfiNXS2BtakdvJnJUTjZDeXBwJjsoYnlDcl0+N3M3OnY9''@;'; put 'put ''QG9sUjAuLGZ+dSE4fkZuLjxfW2V4VHN7Ilo0Ky9gWCV6NFBPJlZ1U2VNZyVzYy98IiFHZmVYSVNHeXtWRHRVVFJBIVN2fmEzZDFrXy9UPXIxeWZVPClUQnRdVnwoejp+cGxTYCNwNHdKVngucEsySjRWTWY+OGo5I2RIfDkpO15YPlhRNnJSfEN6fUNKOHR5LHQsPTBMcjRmK2E3QlBFUkU8IlNw''@;'; put 'put ''Sm9KSXhaOls2TDJAbkQ1YmhMWVN1XTtjPEddcFtiNjx0dGV9fXVoVmImbmApMDtqWGZuPkA6QFFlaE0scWVCcSpVdSRjYDRIMUQ4fCE6Vy4zZkY5dStTLHc9MD4obk9HNVJafXVpXjR4Z1ZPYUpNQyUsd0RTSFRCKjBuI2A8QTEjKXhhPHFbXnc8SChiNFJtSXpWb28zfUhgIzxyWXZBRyNVe1Jv''@;'; put 'put ''bGRVOV4pfGl4KkUjVC9MYEk2ejJnVndmYDdfMmVie2ArIlNhRk89aE09WG1kKEtTc1UqWjUwRDZoWH4/YW51Tkt3PHRYb3lpRCYlXVEjXkJmcHdGMGBUNGhqYElrUiY/JFU4K3lPbnt3MjtwOjMpLlFfVj9JX3MyQUxjN1V+KUsoPEclQFhQLkQ/NHtLVVkmaXU3ZGI2Mk1tWmx0aVRWaXY9KVhx''@;'; put 'put ''al9sUkdKaTYoRTlaOnI6LHcpPDYzcGw9bnFEPzc0RUQyW3VkdWo7YG9lUEdkMU8qPmwqdSg9Yk9xXnk7fixFNnhFLj8kT1lvU1hbWnRGZCVhJURtVE0/bl94YDliIy5vVSFsdk10K1ElSlRiVzY6dj98fFcjTUwvcT91dHlnfGJRS2BKXTUhQio1ail6Y1p8UzFVWyhfW0tEd3MoUHdZR0R9P3Vk''@;'; put 'put ''KWA0dF5LdnU8M0RQJGZPYUViezdyY0hNKCVhOWs6YyxobFl7K2JkeW5eSn1HZSs0JV1XVUhXQDMsUUVIWCNGMz8kTWxkT30jVzNxYTZXJHdGTk1GVzA0UzJWQiJTOEBoMTtNTDEoPyEsKihSQSw7Rzp5TX4mXmFodjwmaC51PE9LRmFaWUFFaTlfaVFJMlJ8RmI8Nj5KbjxPdmdVVWFIXXZSNmB5''@;'; put 'put ''YHVqT3ZbJUBQNGBLYXtSenl0Py86KGgyOnplN1FadilndzdHV3NuZSg3dSovY2o2b1FoLkJxVUk1NCkoJkUpYkZqVzh5MChdPkguPFBONEFmKDMqe3ZLZDhje3tVM3wycFpwV0tZL2B8UHVYNWgiZnwpKkNgSXUlTEkmW2MoWCxIO0I7MnhsOXN6I25JRGopODd+RmwhJk1KQzVMTWNHQUhqNnRI''@;'; put 'put ''JThKJHlWemt+ZjRMRz5KNiRwLC9OQ2hobn1LPkUyTWdZOG4xUl89SC5gTmlZZilLR214SE4vXU1eTm18VHF0dFJOcGpidT88VnQ3M01gdkV5dnpAdE9tOkg3K0FFI0t5Y1huYiMzVCgmQ0I+Wz9nMEFiZF89XX5dJUVPW3E3QU83fndxcHhsWnJmRG10V1tddEwrPkViI28qaGZVZFpyPUwpWG9y''@;'; put 'put ''S0V5VEVtUypLUXZYOX12QSY6SX1nQjNAKXBGWmcyXXFRcVtQI25iIXxOP1l7VXtqaDMqSz0zNWBIMzB1VFFqYj4kPn10QDJoUD05fHNFMXopZEBeW2NGbiMoSVJjdmZNYHt7azwhKGsuREh2cnk8I19UVzY7N1RDJHA0Q09ffE0jPDRrQkg+Qzgxb2htZCM0JlpFT2cjS2o/YVJ8MW90JWpkb0l4''@;'; put 'put ''aV55ZFIldCRnbEswJFQ2U1FeWDIycTkpOS49TFN6aUZBaylabjVXJFR8Q15OTiV1fiFZYzZFdkBCNkorSG13KVJMJi5QNFdVdCY+LiQyO1pnZG9qNXRCSkY2RV0zNE1uSVV9KTszTkx9Ki46V0Vxe3R+N0ZiezEqenEpIVpJMS9kWXNwUn5vOWZ5fSxQIiYibTZ9NlMxX0JiXyFUR1BAZUFuIyh5''@;'; put 'put ''JklDTSVkSWYkTWtQN3t8VzJTLk0sJEJyTjp0PiRnciVZflVAUDQiUTMsby5XWys2amZRKG5PbVhBVCJQM2NLWjgpVW59SnhCa2VZKUxFIXc2TGJ3MjFZJVl0c04kW0FmOFs2YXBTRC4xaWkqOkhXcHVyIylreFheZiEpbmNaeztVUCRhRj0yPz19cEBpNlVLNn05LyEzJXBgJSJ3N1E7Vy48ejFf''@;'; put 'put ''aWlGQT5pQm5pYXh4WD84QVlCaVs5VUpbczksU3FQP3xCVXEhVHVndCkrMFd2dWlmNnN3OGl8YnglQ31hQjk/YTshMyVRejl5V3F2bn1dOmtjMDFBOUY9S0pFfSx0bnk3YSw6T2wwIX0jYl9nRU88VGVPVCllUT1BI0pTUVRBLj0wc3wmdFUwS1lJWXxSSSxrY0pqQGwzcE06KHVaUkdDVHNBRDp1''@;'; put 'put ''Zld0fW4zPmFsVmBQeUMoe01HWCtlQ35dcUlGK3NSdEVhSUQjRWM8cEI8QzxbUChOeVZSNkNrND08MzZvSWV9ci46LCs8ZmUldmRZVWdzYHAmZD9ocz9uUXIqfjVeLFVHXik2ZUVCLnN1UWJmV3RLUmUkNix8LyY1cmUpUCtoLj15NzlDaS9pJT47fFhEZTs6YllkRURYayNOPjE6c2dOYXdzP2Rq''@;'; put 'put ''aSVFcEZSeGxKIXNyaD97QFNLYSUsQDU0cXk/fCZXX0V6dWtIJE97fH1sSXhrIng5YXw3MikmMWNZTTA3a2xkOyE7JGZhQmdbTCFefmRkX1paVnI2Kz8vJD0jKj5IX2tVUSM1UGM7IUs6P0ZfZCYqKTJSWSgkIWUwLGNtW3I/NSU0dk9CSGpbckBaWDZvaGRVYkR+PnBiTCR0d0s0T1FMOE8uZWM/''@;'; put 'put ''VGk4UlIrT2FuTiJ5bTd9V24ubCVpfjxnMnFyZjJZKzgiOXNRbkY5cX03VGRJYzREdjdnZWN3djoxZmFxWTFoPXssSUFYTVsic3YqQlVYUi9fYzRuQy5ZPVhJS1tHMjhOL0teKk4jamw8YWtAb3NxRiJPVnB5dkdUPys7XVl1NWpbLlA/d3I5MzZgTDBjXV81IyxxP0FJZzwiOVllakU1KEVFQlgi''@;'; put 'put ''V2NaWC5HVnpSTFhQREA7JSwwITNEW1JmQ3VoZj5dYGEhZGNmQT5fQnVoU1Q3OUBgWTV7b3VNNkImKC54THc9Z3N6Jn4pMHh4YDlrT2E1OHBYUztNajNuZipreSE8UGcwWSklXUVuOC89YileRTQiNGFUPyYoM2E2SyQqaDxxVjRkPF5SQXFfXmAxeyVqeUYyPnhyZyImclRyIi9ENEk3Lz1OW053''@;'; put 'put ''YXY0M2xLdkBGZE48bixqM3goNUNldzs4Z01IVnprR1tDMzx0KzN4e3pmS3ApNEFpaXFgKDhzRnRKKyFjaGc+SiUuVV5peFNmVXo+bXQvYFVYMHQvRExYNEAmanw6YGI5WUZvcVkiZzB3X20lMS5zfn5JKjNWX0wyUltFekN9I3pFZys2bG9vb3RbdmUsTyQ3ZDMoRyNjOCtnPltSZkklYlRFPSRo''@;'; put 'put ''YFIsRkQ4fip2U19qSVElRyhVbFhlJDdldUJeMl14REM7Lnl3XjxveEZYUToqJS8rfUAmQTpXT3VPI3RCYlBWYGY+d2VxMS86VVk1KWJ3PC9SVzdaXTMySGllYDQ1fV5gaWxLckxzVl8hRHkxKXBibChWWWElUntyd3IhRjd3U2VedH5ed2gkTnFaJkpmImUvR1l4dV8zSWkuaV5yWFQxTnpVIVl+''@;'; put 'put ''bXdPei5EPzYwdjV1MlQlfSltS2FMNGgreXQyTXpnaiJ1a29OOWB2InxyUjdUSnVAVF5MekAsb1YhUXglOzxUZThvTDtEQ1hUayFKVCI5VStDIUc1KT9TJSh1Z0AmfVdkSipPLkp3X3VMWWRAd2hWN3hiTillImosLF45RD8sMio8Kkw4WikmcCQ3R2NqRitQeXs4SExySz8rSEdVblVWeF1wO0sp''@;'; put 'put ''Pl98OiYldkdAVVRncSZFWV1xWXI5IkpFfDNbMzFwRnhQQltWSyN9ViYpfFR8PHVfTFlLTSUjXlJ0Ok0wfTUpeil9P3ojbCVXcXNUayFxei98bihaRjJIXXtXfnlVfngmaHxiditGIj9JJkckRipGakJAUWY1fCk6QUUwd0Y5UUE5P2pbcitjfkc5LCIoejVLSkVKMkhSSGtFeSxjN0UkejdsW1Z4''@;'; put 'put ''OmdCXXJoNlZPWntAMUdNJmVbfnR0cD94VkxnPU55NV9PWChRaFd0SkdydjB8dkUoLCYlOnM2dX5gN2d4YEk4O2djd1J+T1Z2KEpbSHQoXzRpUnNIXmZYT1ZhKkw2STNxPDs8clJlL0hYPngqJk1DVyZ6VkR4OHZtM3k9TDomcT48XWByPHtFKEpfd3lxLzw1X1IwIWI/fGlqW3BgcnMzMT5aPUk5''@;'; put 'put ''cChlOX09Xk5qNz5AMWpxekl9P2NBal4zJW5vUHUuJVk/PFI8dDR1MiVlcnN4Yj8kS1RlSFFWaGU5amZUQD1kRll5cSJ2e21IdSZlcz55KytrMW1JYiNNOzBSLEFKKHJmdENNS1ovNk1dbTUyW29TKTJseGJQNH5qPF8reDdtJTJCYUN7OG41PUBDYWJ3Y1I9Z3FERy8oVG5UITg2WCRuXXtBLzx7''@;'; put 'put ''NTtyQ1BQOTh4M2BSPW1UTX1ufCh6JjgwOllnRk0qY292NkgqV31XKG8/MXBUdEROSDI0QFo0MjA+YkdIQy91N15GeyJkVHZOTGxSSzBqRDBoY1JSREhWcipSbVg6bE5bWXp1dkg2S2Y7dl0zYjEoOCYobXtuZVUwOTFQSFV5XX46aCpEU0VkeiI6eEU5Z0hfZ05UN2ZUU08sIWNPNFp+aSgsclJ3''@;'; put 'put ''Uyk5RSU/eFJ3KF9tfnloWnE7SEg1KDEhVE9zWUNYe1g+fGlZOj54dEFXZE93Z3s5ZFB7Y1cjJmxDRlZURCNLV1g4WmV5JU9ae2pHcmIhbC9IbVJ3PEFVellzTm5MaW1AdzlzT28vWEFxT0J4Kyo1NGk2MEd1IUYvTng/ZENoNGwjZjBacHs0ZHNQNGZVcTkmciEzLHs0PG1PflZ4czlBNl9zKmh9''@;'; put 'put ''QmRic3NPSHo0dV5UREZML2lsJH1jb2hLMjksYllTYyo6RkZ1U081LDxQe0M+OHdTPUVjRVBaOmhlUnB1MjMkS2NGUkFDPikkL1dsJE1vXiFnfj5Ge1lOZnpaX2FESC47KitAbm88Szl5VyQ2RTB4cUQucioyOEwsbGQ8cjVJSihJU2AyfGNveTc+IUdNbClNayVBQiROMHBdVGZQQk5WPkx4SzBp''@;'; put 'put ''bUglQmxVTnFBWzNsQyh3ISlbLkJMZSkiIzQyOzQzIWFHI1NfeFghfVpJW2YufU5uKF87alFkYipMPHRCOV52dS5eZE9MaTJOVUxQbnZoV2BYSzVXdlQkeTsvbyJVbUM7WitSUVhrWHZ7UEpdW3dwY0ZoYWgjZkVMTnN8Y1tRd294QXVJTSNpakg8ST8lPVlFJXNqJXhUaHA2fUcyJFpZdD93L11T''@;'; put 'put ''UTpldWk3PEY0UCx3ZDV+fWEkWFY/JUB3JUtqSToqdENZR2B7eHZbaTxYcSF1KSJ6cDksbHckampFZDJnXVBQci9WK31ZWn0yUCxlZE1xaC9FZVkmMWM0c296cEV+cUFEZXBPQzhtOnIqS01ZLixAK1lZUnlebnlPaXNeUiZTe285Y0NsOnJqWEQ/eHt0bFdgfTBYRzpDYGpLR1lGIThtTjRxfUJK''@;'; put 'put ''L0BYN19NVmlAY3BPTjRPPSkqNmk3KiMuTXc8RFtZIXJDLzAuX1N6aFkrSlRuMXJaIj5PWW5mfmZxbVlIQTRfSlNQL35pNjw5IyRyOXJYP1JifXpZZ1JJRjt0ZCVNe3FkS111O0NnYkNOLDpXdHg7bmR3fURLUXk4eXVrfGx2QmIoOH1STE5jKV4vfVdrRjx6VzhCenNWWzY6QnR9QyFGMzNWY2NZ''@;'; put 'put ''RVNoI0U8dSMyOiNOKyFWRCJ+Nn15KGU7WmlQVkpmLlp8RkdsQ3pXcX04VlpHMFtaM1pgU3QoI1gkalRPazN1ITZzIUBQfnIrfiQ5dFNbL2N7b3lJaUtyQkVZMyI7VVNNbk1fJiNRMS5WfkNuRSZ3SV07ejokS2BWMEZAMllHJjh0RkRlfExOTWZlR0daJD47UDRCUGIqOSgjKmE3PmIiWCgkYilH''@;'; put 'put ''UnlCUGF6U19JLHRDcHsxTEI9PTZ3VTJhQG87OjY/Zik9T2BzaGQjZSllfV0jdVVlYWhGZE0pT3lHSzpMOGsvZjkwZT51XTE9TSNARGsyWXAhQWY6RjtYc0JCZEBQW0J+UGYjfVEmRCtAdEJGJVdxd2xkS19zfWJmVTYuWzx+eE15dSl5bm5BTUh3OSN3UGk5b2BlelhSM2lASmdiOkNEXyJXZzpO''@;'; put 'put ''QHhjSkM6YCUsUi9YWG5saDlMJHhvS2lOXWc0LG5rSTpARDdDSG1JVTtPZ1BiKF96UkcyVHhQUkBUbSZEMlhkaiokfko/Nj5Lel5zYW4yQUpFN2M8K2JCO3ckTm1BQWl6LDl0P2Mubjo1O3ElfV59LnFSLH5NfmZbd0orQHBKWmhkO2xiTVNMLygmR2ltPDRQeC9LcG53Q21Ad1FHdDJUJSw1cjJS''@;'; put 'put ''eCkzTm1lcGc4eSVhbUBnWWpmbkU1OCQzOiJeSz83MWFUS0l+SUU1VWQyeGAzIVByd3p7NjdCR3p9Lkw+OTpYP1pgNWpkbCxHJlE5NW5WXllkL1pHWzZ3TChVeDRpbyFqam8/Nk9SalYwW2VUQV16T1k3bWhRamVuMSNPYmVqXmQ0KTpTbU44Wzl2OCM0ViZEX0hNTGFDI0VlWSs6Nl1VdDxLRXg1''@;'; put 'put ''MSpUIVFEeDBWeSssNUUqXlVSWkZMcn0wTnpnQFlvK1lxSUh4d3o9aUR1JExVOi5FQnUsNTJYVHBhXnt6THVAbHliM1BldClLZ3NseHxjUnQzRkBeJDE6e3pleD8qLGkkNStkZkxHOUR6PjJ5dXkrJUklJn08NykvNCpKXyVoeV98T1soJWhNaTdwXVlsOmd3dl9RMShYXyRneX4iaVVXUSlkQmh5''@;'; put 'put ''JH1RMmEqeitFLF5TbV1hdHE9PSN1OjokUF5EflZ9RExvZjteRTlIY2Yrdklnc01KNHFUfUlSaD5EM1NIVSJ8c0JlXyluWz90SmVCKj5OKF5kTlt5SEhXakpZbHo3eFZUTGR4PnxxT0hJJV5EZys2U2ZLeyllMmtpa1cwUkdPI35WazdpeV0xfWA/SXZ3clI/MHVCKGJ2V2Nvc0NFRy8kfHUsQFtX''@;'; put 'put ''NjtCKURRfnd2MWM1LFF+KFNFT3R+RH4kejAxe0ZuM20yZCFofldXekU/JWkwU2pxR0RscFhfJSg8QGcrVkpLdGtrVGNFKjdOfH1ERl9TczEyKDtYY10oI11oRCUwSl1uTCVsOy5pdF9dMVhaK3VST04mViUyVGducjQ1fUp8Tm8sTl9GUFY5PHtNY1gjL1RDTyZJUmJ6Mi55RDBZPUBMISpnQ0tp''@;'; put 'put ''MVtYUyRSUT94S0VIMGxVQ14qYyF6LD03QkAmdmRsci87U3pURCgzekRGWVFBejkzcnVUW0V+LGNLMkVYZjcyflMuTlMwa0g3MFN2cCouW0B2VzltPlk/aWV6RmQ5R3RhJENRQ0cmYTlIVnwjdDVzIVAxWSlfRTVeSl90LyZeUEwoS2E7aGEhdERhJn1gVG5FeGM8XXp0d29kbHYzKnFZe01EbUFu''@;'; put 'put ''Yzk9fHE1ajV0STVTLjRXQTV1VmM5SmRRcGhgYnJ3OU9uWiE0L1Y8Wmp6ZDw2MHpjUytkbGRDOypvNUVJLEcuPmMkPWI2YnU5akkxJCRmaWpfbUwqQVFWIyRndW1AUXIqaF11TSNMX1czYWF7XT4uX2MlKj9HTWMwQGFNcjp+MEhNITN5dHJfSix1SD9nTXM1NldeV25QV1dYa29ZdGtOdS9McTV9''@;'; put 'put ''IlVkXzMyVityXSUjeW4qX1cvcEY1QEJJTF5MSHxWMzZyI3tZOn1nQzNhQEpSJW4ra0pgeih0RVt+c2RrK3RPVHI7SDxwdGAqKUZVV1UlPV92Rl5TdVE9QEtYLml9am1GO0F1LDJhMXNfW3dmVXdRbkxzW0R8Ji5xQ11XL1JuZ306P2YlaE5IRTZvVDtIbD8qN1lvJTIrWnk2cUBJUixaJTUsQSFH''@;'; put 'put ''b2gxfj0qcGZeLnwwQ3JANz4rIiN3Xl9xL1V6SXxFdjc4MEA0U19ddndrIiksSShMPXYiO2xYUTw/K3V8THApP01zYiEyXiViIyZjMTZvTDQsOnFXYSFYIkYlQ35zdislSVVXViJ+IWpnfiQ/MTdnaUZHR0JheWk3PyRQNXFEXzVjYnpye1c7ZGQxKnpAPiVZX2Z+IWokJl1+TH5PSj42c2dfOnR6''@;'; put 'put ''KWdXKnVPVjQ9dnRrWSNfPlAqN29Zd0AldmI0ZEc1czMxUG1DLExMP2NoMGB8XzEkRDI3ZUxUXU5oaXl6U1cwQkU7Nj45Q3VzR2B9UHh+JSNJJiM3VmMqcCkmeHgzWTJ5YkU8Pzl2WTExNmZeZ0dYQjY3YyVEYlhZS0VZOVYsaFNxb1IuZV58Nld8dGpvY2l7NGQ/WH1TZkJ4cE9jPi91Z3JYKHd8''@;'; put 'put ''QFVUWV08Il9jMlklfihvRSFUUlEqazYvcmghPTI/bzgwfWc2KUVhM3JoNlRvWDFqXm8hT00/fjUoM29oUDIhXXhBYU5TUGs/dXpUTGdudjR3TUlqcilidXVbSE96OXt2PXBGMXZ5JkJJMUU2UCJZYigpRnBeI0FOTUJrW2pJclM0UVthKmFxMV52dVU/SWk0bm9TfW5lUXw/KFRAQ2x9VFZRbURK''@;'; put 'put ''WnVNZzk5a3pjOTxSN1l4PUNJeyFWa112azZyaCRFKGhiMTgiNXxLWi8wVFpbclRkSWIubTNBRUZlOk9KclR+STRzRWpRSykpayhSTz9LMWgyJVJ8cS5SVUh2e0R8T14qMC5Fb0VePW1oX35IVFdRUWpbZGdhJnFATWljVjU3UVliSnooWSF4V2RXRXtkeyQ/Y2hyfDolYW5FdHs9YlB7Z2dPPUxy''@;'; put 'put ''NFR5ZzU1OX07bzR7MXJtQnxzRXo+LiprTlhyN1tlfUtxJiRJY15XPE1dOCo8eFkha25oQkR2TSpOLzR5R3EyVyZyYEZhUDE2UDd0PUtvKHxBY2R6WFFLKCs1NyJIT2RQcDw6OjJSKSNdWUtJNDdePFFAMTpyYV8oOCE9ND9uQFB+bF1SQVN9fnwmPypTcmEzTyQyP2I/Rkl0ayFMRF99eCxWRTw6''@;'; put 'put ''TmhZak9zSEI8NE9OTi5gT3IxQCxZRVpiUGNqYzxqVG49aE1KeDp1bzhAekBxJSFjcikqS1cxeDksaylkb1chKX1fMDh9OVcpSm16ZlFiRjlYK1QrdTlQJUJDWHtPeXV2TzwifF5UNV8/QmtMP2k9cjxbZ2x0QmBoJj4oRWJIXWtXKy8+bW9dVlU4JDVAcSZQQSltO0MhJV16RjJ6Y0gzRU5NRWV2''@;'; put 'put ''MVQ9KkRxaH1gYDszaFJgdzQrX3cwLDE6S055TSp1PHYyVjNBLn5yQCJrU3NhVjUjO0VPRGgkRUBtcGUpL1kvdyhnfDJNIXB8Zktaa3EhKTZ+VGR7IzJDdn5ORWhWaWYzQnheKWdAO3FjNXBWJTVWM0pJb0N6cW5OMTRMITwuViQqQkZDbn14ejtUPEg4fG4xU0Ysd1ckeiRILCw4Wmw+TnpgWVhp''@;'; put 'put ''P3NwUmxhKChbPFRLLG8qbCw4clVGMDt3IVBsUWNSbUxkQ2ZkcVpMQWVyYDsxQEUsbFdtZUJ2czAoPjpYdFJFPVIxfSI8Vj42WXs6cWg7THJjbzcqZy5ZJnM5bCh6SWJDLG4jdyE3LH5ySChrOzYreG4+NGRxYEs7OVdWI1VYKixkJEBmRkxuaHBUeVMwOTZbRmtaJkpqQnEqInskcE5LJFhXQGVF''@;'; put 'put ''VHkjZz9XOGcoNS44YV8vIVZUTzw8R35lb3k3aGt7cENafGsmKzleKV03RWoqSixzSls5MnI8LjFFczx8L1JCbXl8bEZsNFZbWzJ7KksrWHJCaDlYLEpRPXYhUG8kQ30rVDQ6XUVHX3xsZVtGV3kyNGlqPGB5cCZJJXhKTzt9JnxjdVEmUmo7JSF6KWYiUW0zRnFHb1BAejxwcENkWTIhI3xjJnJr''@;'; put 'put ''aj1XYX1nOFtkbHtoa2RgI3hkWFE7bXtIPkw0WzlUKXs4aTpNQ1ZldHtaMjk9KmJsYyE9dy5pYXk0Ykg4PlRQaDVbI1BqVX1hRCYldTIseEV4IW5NeWo0YCxsWFJHSiJBcE5MdHR7THhPZjBdIWNeWyxhTEQzMktnejx5K24ub1hUP2Q4Jk1LKGpjQ1lnWGxIKENmUj59PE94djtUY3JVTio3IzhU''@;'; put 'put ''KCohOUA8M2VxTUhYeHg8OlkzbDVKXWM8SypRczEhIlVRR2B3Q0YqXjx0dlE7d2EyPFYyJkRqfnlSYzxTUGFUMXwvcUd6XUhlbSQqPTNWfXRoZGFoO1RaRDBxbj9uO0IhR2FoKWpVYGwlJURCX2Qhayg0OGNAJSM1NDt5SzxUJEVJZj1EdHZvSmJRcTxnaylSaCE3ezgobi81XzhzUl4kd3EjL19W''@;'; put 'put ''cSheTXQiIT14ZiM3QilYJSFGYiMwQ3pTWz9NeTszPzNDMkkvVFczK1ZsbCxHenAkdUN3TT1Wb1V1U2Yye3c8KHpwbTduJENtPFk7SkpUN2FpSWVDJngvI01rdFdGMSJUYWRzJlpFImVVXTYjLzgpOEhZVnozQ114bjRgNjldYCtRSElbZlJjNG5FSy44VlB0KCFTJlt0e0EzT1oqajVTVU9ZTytX''@;'; put 'put ''eXV7UWh7eFosdTFxR243VWZfMmIlZHdKUCY4UCFDV1M8ME5HRFckO2FWanJKOTx8fUd8MntzMiwrYzAyK19yKlhFNXxES1pCPGNMZiNkclFOU0JdKjRzbUZMJnFdd2tZPEdjVyk2OXU6ZCVSI2tuKiYyRXhLUHNjVH11WVZ4Y31qUTBfPEBtT35PeURLa0RqOnJ4Um9INjJHRC8oLnZ5e0lsUysv''@;'; put 'put ''dk1tM3dBc01MQGEzSV5mQ1QyfTR2NXJlIW1dLDs4czRqKEloMXdrSVNmRVFETVJYNFlEXXB7ck97QXhtKl8vJXRCW144JkNSUnBQIWBMUF46UmN3ZThJbW5lYWxGc0l7RmJUU3dIeFY5JD9hezBKVGVqRTx0M3dUY3Y8YyNhdjN6RmtmI29WfnIubiF1NChUIkhtNXUiREJXNH0yQkRMTnlCeSxh''@;'; put 'put ''SEdkc3kxVnU2eDJdRXEhd2tdPEY7eWs9WVRad2N8Ok5eW1VVVHVMfVdtYiYrSERTZlc1OT1hViR4e3c7XWlgZUI6amd+YFA2M3xbIlZCKWZiayhpSCModDdnL3U+ZysvfD9xdGtpNVI9KU1CQDZkMkJ1M2FLPHZiSEooJCZhM3xyRWQlTH1fV0k9QDpHX3YyYSNLJT5gNj9MLnZAR2VNK29FYWdC''@;'; put 'put ''MSFvTyg0RVNlTTg+dkxARW9edSVzfmpMeF5FQHk+IzZaZ21hRlUlSlpIJU1ucl84dXJDMXxdKzc5LGYuRXRLZGA6JFBmZHFRYFtUbG81Lzd5aTd5ImFlZU1FMSlodVclVD5yczxATVE8ZGdKVnBHMXJzKSRqZmUkUUlEIVVGcGRKVmM6W3h9X0Ijdlhyb0JWNURLPjBCMV8kJnBsTzVOOUdrMzok''@;'; put 'put ''dj57YXwwc0NVUHlVVkZIcFt6OXlkXTAyfkE3L3VBMDcqZGZ1bGRGJl0xY110UV1AIV1Mcnh2L1QuZypDXlE9Vi9QJFk0S0RhUUkifGw6OHtufUo0cFgufiN+aTtQJVYoUU5VWDR7PGNbW29gU1phYHU+Z0dvdUddLkBMcCt6PmheITQ3cF0jOS5QZUpPPnY4MWVjVGcwQDgidz8lU3hHWmV1MTMi''@;'; put 'put ''SFlTZWB0JExlOXNDZyEyTy5ZQSIwYXkiQzMyUk05YTVSN2xOSW5dflVSQ2FyajY2USRNeERCY34mYWNEVk1LWEwoJDJ6OG9wKzMqMWU9ZDF0fGtiN1Z6QFdMdiIkc3FhWjlyL1JzMlBAImpabnlramBeZ245On4zfV5zSjg1TEd9aEdeNCkoPEppRyJGcDJ+QyMvJE1+fSZBWyMmUjBhPGBZSHVs''@;'; put 'put ''MFk2bXsvXnRMdjZPMEA5NFd4aCRqazVhM0B+W3JocVIsI0R4SVFzXU5xKHhUXl9TYXN1LEE4NltiYGY+XSN4JS43QHVwcGY5KURJcmM8QnBqQ1dLZD0kOERoJG1+MnVVXj8hNTZyWjp6ZipkflRtIXcwXS5saiV5Q1JGQj03TE5AVlVfbmZVYlZdbSR2XURoP3hiJGJlVT04bWBdazYzKWYpLF1W''@;'; put 'put ''YldwWGF4c3AkUD0kYEQ5diV0Z0UpMFouYU1yX2t7Xnt0NDIlakpkLmwzQHlsO1RBO2tycnowQ0xGJXxsREpzYFs3I1E6YmQ1QH1TJVRIZFBgLzg2JXRvMmd0QyJ3YWMzQ0xGTEZMRnVZOTp8N343NltBZ1BEZzlfUlM1O1dLWGkvP2l8bXFdKz9SI2BQLDk3YEFbb1p4WWB5UixfekllZV9ibzFd''@;'; put 'put ''OE9ZLExlP2k3LEc9ezp3NzY+RXorbFhaeWw6NSk5QG1adG4zT290NGlJYkpXUlFJJXlmPVZqaSFnWkt2biRMK1c6YzA4KFJkbkN7Pz0vZWszQEc2eUNZKGtbemxIZkN4TmRzOyQlVz1dR0swL104Xy9vM1pwbDgkQG53PndRJVM4IWA9X1UoWXtnL3xrZUo2TTZTKEkkMm9IODM+Im43PmA6NV5A''@;'; put 'put ''K2daSHN1LEY7TlI7ayhXaW8qSVlhNTYwZFgwNiUwaENQMmEyXnJdKmQlbCNiUT88MXV0QHpUOGJKX0gla2ZxY3wuJCR5NVBldjQ5QkJAbUw5cVoybTAsa2EyM2M1RWIkLHthYG0yWWU8R3MxdSpqezhiJHJlYjpjP0Rwe09yI09VLyMvWzcjOTVuTSklak89V346ciI9bCNDKHhqcVd7bGdhVGlw''@;'; put 'put ''RSpDWE5PcFVRSSlAYWt2IWhMcV1XX3deUkZAPG1COHRGQGtwX0lXcEozbGBPYFg7YmlnYkFgTCRrcC41bDFEeF9RezVoJV08ZHYuN2BbLGJDZntkaThWLHU9MDZ9KildRntRKzZfRUlvXWB5Uj1xJEVdPSFeSTU+SD19Oj9dcllVaWA4Jk42OzdwODtKeiEyQjt+aj5QfU85QHllMWdfVC9razVV''@;'; put 'put ''YVpxMXhMRDI3YVFmRWV2KDhoMEI4UnIsLng8JSVtRldhTzdSdnwiRV1bZDA3dD9CUjY6Mys0ZyhseGwuIUAhNFtZY0I4PFcrej5jQWZaa2w0eFl7U3c0fTU3dGVRLmQ4O0Vdcz4xI3VrdDZ1VXMwcmdmW15aOlJFO3xdNG1DTDo2WyRVdUB6ZCRxNTZOQnlVS1Eweno+bHUyej4iVHZeQG1QfDh8''@;'; put 'put ''fmQ1OFs3YXBRW2B5UT0lZDMpJkspREtOLmNsby5UI2RSJSRnOjBSOmA3U2R4ZTskdTBxfV0wUjpgN1JnYGRQP3EwTTZFODVdW1FxUjp7V2RIS01GezhEKyojWW0se3BidmBfcjVsM0A4YSQuX2RrdHJDY2drcEVwJllxSVplVjgvN05kZCRMNHN5JEZ5NGxQMWdydGpkU0JNVV5tT202MlI6a2U7''@;'; put 'put ''V0dKRSglKmlbWm5iLkM4NiRaJCVrVGNkalQxWT9jbkcxaDRGUFRtVWlFc0FlciRqciFQMjduWjk0cCp3Nz48fU8mI2B9dTwwcSJ5QEkvbXpvP3lkWGhiWjM+N2pkY04+eSQ0d090IXIqM2M9Z3M7TCRUOXlHNWpFZFhgN2QvNy40NWpFKGdYRyN2T3U3eGJHZHNHRFAieXw7OTRqWF1kK3VbY0hl''@;'; put 'put ''MFhXMW9ZcU9GZnxmRWdtYTk0d08sdT9mViYyY3QldlBVYX5kZFgsZC83fU9uWlE/LjpuMEplLHV5R2paRFFSbUFldSo0Yy8kOWAwPF9mVG1OYHxPXm5iMU8sZWREOHNdZWMsOkFlZSkuI0tUbnVeeEVlT0ZqelprfWRiNlRlKmpKXjUkI0ZGPEwod1ViOkRlJDd3PF5YOSNlWFt3PjZGTmdjQDQ2''@;'; put 'put ''dSpIYG10MFcsZExaNzZAbykjSylNSnpRLm0wcV0sPG9qSSFZcHAwcGx3fDhyIiFBUH1kWlBsTFo3VWFON2A3ZlIxTkgwVT11MFg4KCouND1dPnY8b3xiU309WWY2fUhhXjchO0cyYCw8Zk83L2c/eGxuNW1DWiRUO3g5bmxrXThiUGFGJE9tOnJYbUFaSjhUNUU2TWFyZT55aVtoNVtwQGZ9N3ty''@;'; put 'put ''SVpKOExbNm4kajE5b20lN2heKiN5Q0ZlXTcsZDJWVjg5MkQreHNvaE8xIiQyYFs4T1FeJTVlYFNUe0RsMWx0KUNraTg9JXhMKGxxPms3Zko2ZXsjTWd5YnUzXzZDV0ZNe3Qvenk3LlNATHt0bDJrb1NpfDdXX0I4KjlLOG04TCQ/eko2UkQxNCE2WmhVO2UzeilQYGw3UWFUZU8pM1p2XTszRDhL''@;'; put 'put ''OEdYans1VS9NckhFP0RXLkRbMnNdVHpgW3g5X3F1XWx2dEgwPk8xTXpMJGw7ZGkjN2prPy54SChAJW86OjVhODR9X2dZZDhfIU59eSYqUn5keDRve1daOmw+YDxIJGU7IUMxMkpBQkx4WGAiJVNaY1AkZWx7O25jUHFFSXg3NUR2TX07bmhVcTdnXTg/MDppSlBpXyQ/ZE87YzcrdVQyUHkvem55''@;'; put 'put ''S0lQI2g3Z2xueUNvOHxuVDJ9SV1GdkFidUlWUXZdbjBtYSJoXyRySihhR3Yze1RRdGxZMDVZO10oU1l7azEoUy5hTkxiaTdWYyo9ST89NXZaLjk3SXI5N0JScWdJckE4MjAlOEBmQ2R8eHkwalhkPHdPcSxoSkF5PW5HeEJldyMrOHIkMXdeb2ROImJ2eV19UV1XS1c5fFoybTVoNV5yXXZRZCRb''@;'; put 'put ''JmVYbXZKfmY5R1pjdnA0aUlVdXRYcmx+QCI3MT1heUpGTTYyOyZLNiUqRFJ2UzckZGRAZlVZe2MkWUtXOT1PcWdTSDJhaC47bm5tLC50JCVIOD9UYCE9XTh3KloxezdaOD4zXnUyUDtVZkF6X0BfP0ZgSGhHXig6a2xVQUlmW1puYXsrNHVRR2s8IXpZXyRMMytOWElhPzdbRm5kJGZWSHN7JU1F''@;'; put 'put ''cHE1IVVieG1geit9UDlLKFN6QylPfTRUekp0bEhmakdCI2hFdH1gWHBxNSFGby5qcWoiaF84V0UyYyREPTdgKkA9XSNna2pxN2FVZlc9bDdtOHElIkFZOiEqPDAoSktnWSw4Xz99OyQzIWplQD8rTF01JWRtJU54TzEsKl1fNm5Qe19fSXdkNndzYmRnIUJjZkMkLkxWcztXLEdWTmVHWkhhSEt8''@;'; put 'put ''OG1WTTZ4ZX14IjdnRV5FWiR1JTcydVUxSn1kQSVAIT98azNmW0FgTjZuUnBKUUtKcS5Uc0hmJS5QYCtjZyR4ZVR7P0E4IyVZKysjS0UoUz46NDUoOyFPbjNoWVlJUU8zbkl2VDk/PFghXTFJYnJeJUxSZSQ0algsdWlrM2UsdXhESUhRTzNuSVB8ZmJlT2VPZWxwVlFVfX08bGc9ISk0YHV5RG5n''@;'; put 'put ''IXA5W0UxOVtiJDlbeTtYLz1lIiZzaV92NEhARkdmfnRhc3ReW2puYV4/PGw3X14uYGdWSmc5d1g1VilwMSkhZ0d2fl99PCxhR3ZAJSU5JTlVX3FnYDU9WiR6Pm4sdSImMzBXLElHR2ZHU1IySChvXSY7P11ucCYlPmdvOSY7P11ucCYlPmdvOSY7P11ucCYlPmdvOSY7P11ucCYlPmdvOSY7P11u''@;'; put 'put ''cCYlPmdvOSY7P11ucCYlPmdvOSY7P11ucCYlPmdvOSY7P11ucCYlPmdvOSY7P11ucCYlPmdvOSY7P11ucCYlPmdvOSY7P11ucCYlPmdvOSY7P11ucCYlPmdvOSY7P11ucCYlPmdvOSY7P11ucCYlPmdvOSY7P11ucCYlPmdvOSY7P11ucCYlPmdvOSY7P11ucCYlPmdvOSY7P11ucCYlPmdvOSY7''@;'; put 'put ''P11ucCYlPmdvOSY7P11ucCYlPmdvOSY7TGVfZm85Jjs/XW5wJiU+Z285Jjs/XW5wJiU+Z285Jjs/XW5wJiU+Z285Jjs/XW5wJiU+Z285Jjs/XW5wJiU+Z285Jjs/XW5wJiU+Z285Jjs/XW85Jjs+bGJvPTl4VSpzJiU+Z0ZXKns/XT4wfDpWI25mJVA/MG8sJWo/IW5mJVA/MG8sJWo/IW5mJVA/''@;'; put 'put ''MG8sJWo/IW5mJVA/MG8sJWo/IW5mJVA/MG8sJWo/IW5mJVA/MG8sJWo/IW5mJVA/MG8sJWo/IW5mJVA/MG8sJWo/IW5mJVA/MG8sJWo/IW5mJVA/MG8sJWo/IW5mJVA/MG8sJWo/IW5mJVA/MG8sJWo/IW5mJVA/MG8sJWo/IW5mJVA/MG8sJWo/IW5mJVA/MG8sJWo/IW5mJVA/MG8sJWo/IW5m''@;'; put 'put ''JVA/MG8sJWo/IW5mJVA/MG8sJWo/IW5mJVA/MG8sJWo/IW5mJVA/MG8sJWo/IW5mJVAjMGcsJWo/IW5mJVA/MG8sJWo/IW5mJVA/MG8sJWo/IW5mJVA/MG8sJWo/IW5mJVA/MG8sJWo/IW5mJVA/MG8sJWo/IW5mJVA/MG8sJWo/ITYyQ0Amaj8hbzwhO10wL1Ujbmo/KSlzdnxFX0o9VCNuaj8p''@;'; put 'put ''KXN2fEVuZz0hJTIxMDM+VzN5JSF2TlRQSy83I25qPykpc3Z8RV9KPVQjbmo/KSlzdnxFX0o9VCNuaj8pKXN2fEVfSj1UI25qPykpc3Z8RV9KPVQjbmo/KSlzdnxFX0o9VCNuaj8pKXN2fEVfSj1UI25qPykpc3Z8RV9KPVQjbmo/KSlzdnxFX0o9VCNuaj8pKXN2fEVfSj1UI25qPykpc3Z8RV9K''@;'; put 'put ''PVQjbmo/KSlzdnxFX0o9VCNuaj8pKXN2fEVfSj1UI25qPykpc3Z8RV9KPVQjbmo/KSlzdnxFX0o9VCNuaj8pKXN2fEVfSj1UI25qPykpc3Z8RV9KS3N0XlU5bWY6KXN2fEVfSj1UI25qPykpc3Z8RV9KPVQjbmo/KSlzdnxFX0o9VCNuaj8pKXN2fEVfSj1UI25qPykpc3Z8RV9KPVQjbmo/KSlz''@;'; put 'put ''dnxFX0o9VCNuNjZCe19KPVQkX18jPlR7eT83e052WkR6RU1KWVN3aUcqTXZaRHpFTUpZU3dWOW48aC5iLGNfNS4sPVJZMTJzR11kUE52WkR6RU1KWVN3aUcqTXZaRHpFTUpZU3dpRypNdlpEejgwRU1KWVN3aUcqTXZaRHpFTUpZU3dpRypNdlpEekVNSlk0ZVN3aUcqTXZaRHpFTUpZU3dpRypN''@;'; put 'put ''dlpEekVNSllTd2lHcGcqTXZaRHpFTUpZU3dpRypNdlpEekVNSllTd2lHKk12WkR6RU1KWVN3aUcqTXZaRHpFTUpZU3dpRypNdlpEekVNSyo/XTxsOm5nLH11MllwM1JtdHU4bXZ1OG14dThtXUIwcjZbMlAiV05XKXB9ITsse19fI218cVslYjV4ITtLTTszP1ViaWc5VypzcXReMzN7R05tPCU7''@;'; put 'put ''XzMzYHBrZnxHTE1dTlgqbXxxc3hlWSpscS9ic3c7XzMze0c2P1NWXU5YKmxxL2Jzd0d6ZVthLjdJSTk1aUVJYUBTVl1OQVddTlgqbHEvYiIyKjF1d2c5VllKPWMsd1pSeEI7e1R5SmF9UHh+T1JmaSEmaXEqXXcuSDJQUmZpISZpcSpddyVlIW9wIXtfNDVhYiNvNS5aM1lYJFBSZmkhJmlxKl13''@;'; put 'put ''LkgyUFJmaSEmaXEqXXcuSDJQUmZpISZpcSpddy5IMlBSZmkhJmlxKl13LkgyUFJmaSEmaXEqXXcuSDJQUmZpISZpcSpddy5IMlBSZmkhJmlxKl13LkgyUFJmaSEmaXEqXXcuSDJQUmZpISZpcSpddy5IMlBSZmkhJmlxKl13LkgyUFJmaSFWNX0uQCMoNFBnai8yXmQvSFFlLzFtZS9JOXQ0JDl8''@;'; put 'put ''cnx1Nlt3W2ZoaWVzZlNKI2dReFdydF5dLyRvOVFCXl8jI0lyW2ZoJXghO2I1Ml8lUWolZUltIzIwJTg3alFQbWZjLGdlPCEyMCU4N2pRUG1meWxnLDxtY2Vpc3xvUV1PJE4jOzZ0NCpmYyxnZTwhMjAlODdqUVBtZmMsZ2U8ITIwJTg3alFQbWZjLGdlPCEyMCU4N2pRUG1mYyxnZTwhMjAlODdq''@;'; put 'put ''UVBtZmMsZ2U8ITIwJTg3alFQbWZjLGdlPCEyMCU4N2pRUG1mYyxnZTwhMjAlODdqUVBtZmMsZ2U8ITIwJTgsI2olKHA+YHcsYHxvS2B8WE5gfEdRYHxbIztgJEgpUU0hfHIjZ005JWokUF5JI2dNOXN7fTxsWTsuez0/aGc5emVZcnReQzhtW31tcVt9bVFQezhXO205YnBoODtnM10kZTglUjtt''@;'; put 'put ''OWJwaDg7ZzNdJGUlZSFvcCF7XzQ1YWIkYEkzeFVfQmVgJGU4JVI7bTlicGg4O2czXSRlOCVSO205YnBoODtnM10kZTglUjttOWJwaDg7ZzNdJGU4JVI7bTlicGg4O2czXSRlOCVSO205YnBoODtnM10pXTxsKGV1PiVQWG5dTFhuSE1YblhNWG5XUHU+flcvaUBETnxfI0tQJWUhJXtfXyM1XV4u''@;'; put 'put ''U35rUyFnPDl1e308eUhyWzJzaUpnOV5lZzleZWwyI3g3NyV3QXk3T1dpQERHZnMpKkhNIXt1d1BXaUBER2ZzKSpITSFuOXk+bSRxPDpRbmltMS9QZUR+VTM8RW86Y1BPUltRa05OJltnJSt9U3dqclAje3A6MGFiZCFbZFtER2ZzKSpITSF7dXdQV2lAREdmcykqSE0he3V3UFdpQERHZnMpU318''@;'; put 'put ''ZiFINiRfRGU9fUNlPUJEZT1GRGU9L0ROfFgvU2Z+dGFzdF5iLFllTSEocnReUX0mb0wrM3ghOzVQNVYpcF11aSVGamd2V21YZn5ffTxmezhdYzshSGRlTmZ6aUslQSskISNgUHJ0XnMpO2AvOGdjJDQ6XTZgVGFUP0BpYVs/IWFiaHllWG85e08qLmE7SWxpOE5xUSZjZ1ttN2d6OFI6amsybWs5''@;'; put 'put ''UStXWjk0ITJMJGMxMSVvW0BpWTNyVU8zQzMxUVUzOiVrWyMuZnk8NGprZnllWCouMTBlWHxvUV03cFFdeSFdLkFldTR2JWY4OjhDL0AjKDRQZ2ovMl5kL0hRZS8xbWUvSTl0NCQ5fHIhalJNKVhpOH0uKkhNIXxyI2dXIyVqKW9gLls7PGxdSFdWKnt0dGklcWtFXl8jVDg1M2lydTRoa30zNlsy''@;'; put 'put ''Zl1sW0lPdk1kW1AkVVc5Z1lkOCRhQDEkODhPNTZrcDYvMC4ubDQrImZRLE9sfiR7Q2cjIyV0UHtJXWpdQnJnMndWOUB3KFlodiIoTDFnVDdIc3g/MW9mW1JWUCk/IWM9K0wxPGZSI0RmW1J5RWoldFBQOTxsZ1s7YGRnWlZDaElyNTZ1UVM2WjhLZ01kLC5benB5Oz15I2tkJUBFOGovdVF5TE9m''@;'; put 'put ''ViR2OVF6a15HJHY5d3x4OyMwO1JLO3Y7eyM6aDB+LyNebVAkbTkybUFwSjgzJnRhQmBjPnBVSjlgXXtuNWU3amklKEopcnReaXNpJShKXz9fI0tEclt9bUk8PGx0IWNlN2pzfH08dHtxWzN+U0pnOSZoWHJ0Xj5EKG86fiN4ITs+UT00JmhoISVqKW8/NiY5ITtiSn1ffTxPQl8ubzNhKSFnVWw9''@;'; put 'put ''KjxsWH19PE12cVtURiY4ITtEUnszP1VIKCFnUCleP18jWEVfLm5LV2lMUGgyK3BHaSslYlNdKEUhUzZOLltoQ2Y7Mz9VeGxoJWN1SG1Ba2d9WGVNIUd1Q2Y8S2t7XyNiRW1maXN8XV8jY3g1M2lyLChpZUckNFZbaGc5bmlZcnReTjhtWzxLclJ8OCI3clMhVntpX1JsXnVKazFzKVFDe1FRekht''@;'; put 'put ''Xy9VIXQ8WzFLbF9EN0l0eGxpY0ZfMWMsVFIveFVmY0ZSMl0qXj9TZFZ5OVY2V1B2OTc0MDwsZ2tMPEooaiU9O1A7PGwoRTFWKns0KyZvITk8PzxsKXg0Vip7eTRtW2ZoLmhnOXxTd3t9PG81IilHQCVjOy4jJkoseXtQUkdmRSlAKjxsO0Vpd2NUfmopSTFJYXZ7UX1JRGt5akQ9TFNgPUosOilK''@;'; put 'put ''LC4wO1JEMmJDMUlEa29LaX15SVU8Nk0zaVVQeklOOlZWdHlbPWQ7P2pTKHJTOy5vZUIjM1pBSjBzfGshR2x5fFl1KTtKQCVSKk5CKyolNG9eQmB2fC9kUD9OO3dtamI9ck5kMz0mTTw6W2FCOFUrVjdNajJ3KSxxSy4xZ2psaTwhT15DTCkxUG1wUnd5OFBzVDAhcGNYPFY3TG01OkckY2xEZ34r''@;'; put 'put ''VlZJKChSVjZOLnhoajxlaEBpXSopWXpRfF8ka25pb0t9MVdtRF4iKGxob0s7JXMjKDg6LDUqLDlWbXNUSS9AME80OUViV2dKSyhZU09Eb3BGVnN7TUQiOzMxe2x7aWU1Vl9FPFIqdD1zI0d1WnlTNiRQbVN3S0Fge0YiO3pNej56SzwvOSp5aitVNCsyNi9ZJC55NmdTYVUzZ2srfTY9WVsqK3tM''@;'; put 'put ''IXRxfW1qdipwdl5dYl8xeWxWbENTaHZ4X19fdS50PXVKK0dySS5wdzg6LCwqO1Jqd04uZkxEPXtSUlJueCVrfERWeTw0V2xjR3gjbG0oZT1xKlZGTDFYdjwyfmlUaUVvbU1WWlY3M2UwZDpJclg3OndVSys5c15WWDw3RiVAJD9nMytPJVU9QUNFdj5PW1ZZazRKVlFOIVYjUndGPU9bTU9rVEhU''@;'; put 'put ''TylHUUcjYm06bDwleDxLTV8lbTl2WVtqOG1hcn57fGo7QEsoVGc5JmVgV2QiX089NmdTc0dmMGZ8bEduVDokWEkybGBYVGVncTA5LzdKeSwiIWVgfT9gXmwxTj5BeXopOG82bWIuWm5RPVBGYz1MOWclTy56SjghN21RfE9uYShKYGt7S2pnPnlzeUJQbjdRKSUyaEZncz5tJCxsKGlQZ1d2MjtW''@;'; put 'put ''TU89Zy5Ib2JXcDNkJG1bYjw0NjMpNUs4NSF8WyZ+X1lbY1pCXVZaSHQ7SX08bEVgdmZ2aFp0WjAmIUA3LEU9OGEkXSQmVz19M08sYyk/T35ZUTlYZHE4M1AkcEcjdG8+Z0k5MkUrfEJQfixWZFZecGJGOFMjYmpjN2M6YjhpJEtUeGUxbTBxYno2S2hJZDl2fEg6R1ZqWWc2Mk5LZE03KV1wTl5h''@;'; put 'put ''OzE8d1NENW03KXsmIUdmPHM0NGg/PzBtJGNlYmJxd18zdT06Z0czYDlSPDViVGg3TygpWCssIWE4WjNtYC81Pl0jRE0xUWhFODE7OkooJEBIVTdZPHFZa1haQG0lXmY7ej5iJWI/amo5Om5DdWw8N2p4eEpZNXRUfmRdYiFoKCpbPSNiIWhMQ1hFQm5wbEk8d249LCY2Nk1DJj1jXXgxUS5yan1X''@;'; put 'put ''UVA9TS5BJjMhS0ZDX3xiWCsiLEV7RXFLKDFvSyhYXzBtdjluTSguQ0AwPkMlNyR8QEpxS1BNKHslNyRyK2FfNTVpSTVoQ2lPQlcsZFZCXSQrPiEkPmU9VEppRTVxYl8xbnFqSGZ0fVdVeWJubC9AQSVYc00oQ0BYc20sL2x7bV9JJDdPMVVfOG0xM2Q6dn13Ni4la1tkNjlzeHN8aS5qLjUxZlBW''@;'; put 'put ''ITdJXXJ6RH5Td156XTxDXz58MW9xVFA9KkBDUUJ7KmRLWFZndn1dME9QTjhFZHpDekM5Ljkybls/MVpyVm1PM1I6Mmh0IWNATShObEEuempebVB8PHpFZnp4dixMcmFuNGYwIUQ+Ljk3JGxeTj1yW0YmYT8uLkA9KiZNTkgmR2VQP2Z5fSZmXmdtdy5XX3tJV0tDPlZ3KXd7aGxSTSY7QEhSWUUl''@;'; put 'put ''LE9kbjFkNk1ALiFbXmJgfkt1VF4lTmB+P2UudD5NISUhb3BmJC9JfGdsN0V5JVNfVCJkKnJ0IS8hVm5JJDkhN20uXUV5O28xPEpAZywlMkFWPHgrUDVxUyNjQEoyLnNbSyI1bklZVG8oSSR3JUJqQi5yPHh8dyMzWSltZDpbPTZuS11zUm84XyZiUSF+XUpEcmRrWF9HJmlbe3N4KVd1cUoialZU''@;'; put 'put ''KGg1YV4jcig5akdnfHdfOHAkQDc7bHptZjtBQFU4YW8wZDxtLmQ6QmMhd3wweUZpR2YqcDV4XWg9N0grTyhdfkp2Qj5mYD5zVG1zLHI4OH1sN3Q9XTAzKVRnIm5BW08ofWp7MFJxdztIJmFHaTx2UUUzZE0oa3llaEVTdmQ6QD1FaF1JNW1TUFJxLlRtcHY6JCx4Sno0NGheI0VNW0ssLlsmb3JW''@;'; put 'put ''bTdweGZVOVJxbjJuPTZVXVVoZU0oM3pBNyh9QSMqfX5hNyxeZ0hgNjJLKGJpTykubHgsK11MenJSLjxbSW8oJUBGZyJucDI2RWluUVUpPiNiKUklPkdnfWsibjtAZVRiJHV+OTZCe2VUPThEK08rRChUZ3x3eE4lPj5Sc11hPnpdT1BUOklWVWxpbWIkcz5HPVFpJS47MS84Vm01dWQwNlhkOnol''@;'; put 'put ''JWEvXUlsdD5ue0YxbmQ3SitpX3NyJE8sTCwkWEV5aE0pJWZncTNKK096JGolflUrZmskKEZANSxSIztqLiF7Zl4jUz00ZXwwOTYhYVRzdSwlMiRqLzk0TT98LmxHe2wxYnEzYC5sQ2AkJWpHXyE7NnEobzNiKT1dTDkmSXZsMTFBLiZ7aV5HZiNgLmxHeio0fl0uPChVP31nR18hNkoyX3IoZVF1''@;'; put 'put ''WD0uYCYubHchN1QoSk0lTDZuPCZSL1AyfDRteGdfbXhHTl5baipedT0wfVdzdCZhRzokclJCW0FSOSY9MGdOQDlyWTgpclUhO1J2PCxsbHloaGB6KW8zQ3A+UUg/NCtuZFRFejwqTXIoLiIzQGFzcGI6RWUlI2F+U3IxfGxhIT98fk4wZGI2VWVWbTMpOyJUQ2MqNWsxSVokN3F0LFE/ezouZ2Y2''@;'; put 'put ''Vkh9T35OLkRzSFYxeDd2dlgsdG5JWmFbTFVgZHBsMjF0VX5OX0p2X0R5bVpBP3pnInp7MWUpTTRWPUEwaWt8bTckITlbXnJAZyU7K1A/RmNBXUgjcitabkBaYWFiYkx5TjpkKTRoemxCZFhvWiRfYiV8dXNuUkNPRCtdVnUlTXxVQ0FQTiY4YWtmYGQrZS5dSyRMZWFuYHlWZyJrQS5idyQwIzl7''@;'; put 'put ''XWlfblA8clFOfU19TX1NfU1+NWEweSUlSUIjPGVIaCYwUU5lNmUvMUcvUGksQD8jbzFdXkkxbV59cGIzYF1Kc0BxeHJRIWovcDghPHpQPX5KTFVlZ2hbcXhoJH4wIlI+JV03fj93XS9lUnZWbSZkUnY7LmtyZiw3bnssQWlHJDxSIX1ZMzY+Yyw3bkFSRShtM2YpPHowSkhSO3tqUG0sTmhVZlBk''@;'; put 'put ''JFB0ZWJZdkl7ZHxdXSFeMmoxNSRxWlltTCQ/Z0txJklJaFJ2NzZbSjkkcCRPaXFoUT9UUH5ZIXxQI2U9RDM2ejdtdVU9Llo4VntSdl81NnJmMCVAQm9faTo5Nmo/KXwxOEowO0xtMiQ/bV81VSh7YDpqVm5pXmxgS3E0akVJIWdZcDMpLG03bVc9Tjs3Mm9gMz5zPk99ejIvezQkfjBZVlgjeHsq''@;'; put 'put ''KW5GPHgiRTJeM3Ztdm4/QFMyOzFeQ1IoUUNpcmgmdnNgaWl2ITNmbj1nVD9LZmR1Z1spPGwkXzRNO2pZSi9hZV5LXWZGW3F3KkxTfCV0Lmx+VmpMQDB+Vmo7QHZtP3NoR2ByRlZxYm9PJXEvSm9+RTFLXVQjLk0rP3wqanJzPUl5Lko7MH0qfCZAPWRuYz8hNGMpIi9mZ2VxN0pOJHcqS11tYj59''@;'; put 'put ''ODd7Xno7Z11JUXh4PTIjfG4oWzA2O1ZqZCRvKHhzfDgxJCNoI1ZQaDl8RmcwQFUoa31yfnheb0pYPXJ+Q1FPI3VxcnhdIV4yPFEsfXcrc2hFOC97Tz0sa2NNYF1+akdzWG01UWdOYyQ3eGVEWHNKWSV8UT8xKyFoW2pxc159Ml8hNj5+MSwxbVY9RnswYWh5ZClhUU0zaCRXOl8/bWpISitRR3BK''@;'; put 'put ''XiRSM1NrMXdVKHs+MXJ+aDF3VTNzcjZYX21qcEQlYVozaChXOmVbbWpwRG0xYFZ9IypRfEsjdWhefS9pW1QoSn5ZM0FvSD1SU2ZwMTErcEhkbmBsbytwUD1LMmlrdGt2cHdORX1jUSIzbDx1PTdwKkQjOUg4NU81NlZZRy44LEBaMjM9Omg7R3BCVHkkK3AmRSNJTTJlUXFqfFpHYiVdSjlyWXZO''@;'; put 'put ''QnBUfU5nWFNENjpyVm1EVSNMJEQ8UyI6eF9OfU0pTjFEYUslWWNeYDA5Rm99Sl5VcTwmTXk0bTNGQHhTQHt9YWxyfTYobWQwRitdeEUlWCZweE1AZS4ybVZ9MW9+e1M9Q28iP2ljaW1RczVRYVQjdT5yckMxTzltLl1BeUAldFZROSxVL3tibkZ9LlAqK11HdX0qfGArNz5xaFFpeHl9KjI+KH4u''@;'; put 'put ''UVMrJl5iaWFbfWFfKyZqJVYvLExqZy5TdnAkRU01KWY/U3Z1LElMQFpnJTFgJGo3VkozcUc3Sm8hQls7QDRicFFiYDpqM18kVWY9PT0hYTEhN2p3W2IkOzA3dTBPYyV8cVNFXWZ1fSl9MTNVKGZWSTlzLHwmS2VWOnhCM0VebT1ObyFAWnVsNy5yaHwzOiMpQDQ2cSxPbHxebSwvbFExTV0jbzo6''@;'; put 'put ''TVdnJithUl0zUFkldWE/Z3tybmYjPSlxL0ppIzswbiRgL2RybmZeUHQhLzBEUy8udy5UPVlXX0c1S3J3VStfT1tLSDpPPSJPMylPeiVAYSwybWB5QkBLdXdeUVV1USYlOTIkJTQuYT9gKkhdQW9uWzc0KUA8WEh1QCUuTSMsW3piaSQmdiVyPE9ZN1pleU5gMjBbPTduLnBrb1FbX1IzX3llNVA1''@;'; put 'put ''TyxZW2puYCN8c1VuPU9VPnxtb0cxTyUyZ314LlA7QCYuNSxKUUB8QX1hNj1xOCxbSHFWbi5bZH5CdFl1NFAqNXJzbEBVRnl6PDF8R2d6MlcxNGh7KzkyezEjMnklWURzJSl6SiMoR0lTR2ciakRRPmZPVEBSLnJSKyJuaDpzejwyOC9UW107dl1afF0wdXhIOnJVWSg1JGkxM2ArPTh9MDJKXTBT''@;'; put 'put ''PEBrSWEkXiNRJE4kaClITXhRVm1UOWIwODsqbDwrTFsiLmAra30/MVsmcU5CcDZURCtnZCM9OjI8XTJxOGBlfHU9TzNlVCROTWo3VERTTyh0VW49T314VS5yNmJVI1ZufFpFaDxES0lfaT9MRSh2OzJnWmg1amEsUndAZXc7NGovcEVQYFswWjduP2c/XS9kbjMheFI4PnpHbEZRUjt9SDs9SjlD''@;'; put 'put ''SXw8InclYkxlNGglYiQ3UmBxc0RJQ1BWWzYsUT8wU0JSfW5iJDBdOCQuI3cwe315c21UPXVRU2VfYCwzbTxkUSE2JEpRQFplYlpfPU5ie2RnImo6bHNAJW9HUElYW2Q0ZXUybDs4L2AqQERAQyVKL2E+PlV0KEBwIjUwZTFAelZtUV1JMHRVRWZqRyQ3fmkkNyVAcyJHclAvWVByPHREUX1HZGdQ''@;'; put 'put ''NjdpczNnKUJiXjYha11EUUplZThSOmA/NWErdWosQ1k0Y2kqbTA+MH1XTXtjNCJDKUQpRFRAQGJYOzVoZG8uI0R+OG0uXWQzTiNOaHpsfGJLYC9oYiZLZVBlPnhSOj9BRTNIODlmVTdSN191a2VTMylCY2d8Z0B1R3N0RH5OXjNsW0tRQS9QZTQuTXJPY25sMV1kYiQmJjJaMWAmWjhhVFI6YjE+''@;'; put 'put ''TzhyfUdZbzhUUSYuOGR8YE40NFEsPzdFNChCa283cVosTE5ZXTQoP1lTOnw3KXhpNip1ZDN9KiZqfDNRdTVpMTNdcl5WQzhoY209NGJ6bGJvImJHcm1fZCl6VnBJdTorM1pbXng3dVZtQEJXYWl2WSxnPz8/Ji5GO2h0L1Z9O1dAWF9VdDBhWWVoQDQoUyNxMkhWIXxgTmxoVS5+Y0JYfEVXcFZi''@;'; put 'put ''W3VFKEZ4YSVwZDcsdXJieWhVW1E1N25FXVFZRmkhRC9RRDw+bkwwYiNuVzZ6UVJROV93alddImlAeyNpbk9gMlBBcENtMD9iUUR5dUN2OWlvbHRQJWAqKjlyZVpaNDR0WmwuRnpvbj94P1k5fGVle1k8W29eUSxAfkM0a14jKSk5ckFbUUBBU10jJCooV1tSNXRdSlZIQXdWYSh3elJMOiZRYG4p''@;'; put 'put ''N3JEXkpeJC8qMipFbHZOYUBhW2VNZklvQlA+OXd1dXcqQ344RGopeSo8bmNCL3p5a1Y2ME9MSF1wOUNoYFFzRDNCeX19IWgjXk1TXkg6bjJxUDx2aXpXV35uYk5WZ2opLl4wbyskKl9QU0U6fSkpNEIjcyxiSHIzI1s9JHdUXkl5aitmPll9PFRfQFYrVTsvaTU6Ik05P117bisiMj1nXmA9TGdb''@;'; put 'put ''WkxvTlspN2M9Rz1KPl1OSnFWVWpzMyxFU2ZkXyI0YFZ8WVgjZkdCcnYoeXFAS3s6Okh1IXB9NWRObn51QVVYSWI/Ol8zX0Y4RF1TOWVgRHMxJWNGTTAwZm83PnNkUSZRPVkjPnkxdHE7aFBCNkhYPDlUO0ZeezFIUz5leVEpSXY1V2E2VkIzblIic3FMRDJbY05uOzxCdSZZZk9rTTI/JStlMTBd''@;'; put 'put ''TF5IdHF3TCw3eWJ2IlV0fnZLNEZSLz0lM1d7eEhlQlExZiRzUV9BNC4leWhbZVBBekFhbWBOWnxXYklVUTxfVG85fm1nJmEvQ1pyMCwxRXt8JkZmV2xdUF5wYENETVc8L1BJZ0olX19oImBAelNLSlApTElROUp8JD5GPnRGbUo3ZywyKFIoeXo4cWBbd0RtenY2blYsVyN0JHdVfEJ7ZFZLJD0z''@;'; put 'put ''Z0xXMilaejs8RzY2WSheUT1vfW4sPnxXciRVeDFvW1h2QjNRMEBfMnBuYCpnWDJXXU5USztxTGZ7NUZxKmFOanxRcHc8VyNDZTVqcU8zbkQ3PE93ZEJRRHNWUkp0KSRiZVdAMWhxV3VbTltuSHd8QiJIc2YpUW1FeHFCZj1GPkxlRFI0LCM3XnZbP05yVnxvciJ1e0A+IzpWT3VCMm1KZG0mbUZW''@;'; put 'put ''JW5jM3x9IzAuSE9Rd0RBUk5RRWQqJkhPQlErOERZcTw4SyJQOCo8TXd4dCIyQSpyWzFCfkxAS0RqNmV+WSxyZitJLjgqfSRnTlh6NU09TCQzbiVHKXd0cjkhUTFvVldbRGpbSG8odlFMKXwpdyUvUUI4M3ZYU0VXen1jc0I1TX5LaEcqYF18bEJiSnlBUCtQYT5lJXJkc2tBL3ApKHVNdUR1T18z''@;'; put 'put ''aE4mKzUwYioidlFPNT5bRXQubmc/bnpaLygxK3hoLEZyWG5yS3RRKEx7fHN9ZltHakZdJDpJWzlNeCI5eH1geDV2aU5JYE5BLmJ+S2teN0pAWG8+L09eVWpxRiUkcFNELEZ4UjsmOTc6Tik9bz5oUzMkKllJM0VMQltEKXsrT0R7ZVQjbUtLNCsyfXF3NE04YmM/OlE5ZFpebDd6KS48Vm1oWVhY''@;'; put 'put ''P0BVbU9NR1NrQjRrS2lvMmpEOjx0QiU4V08/az1CSV0+OkdTZD1laGpeQmllR24jVzAlNkJ3NEIyKixNRkp0RWhfVHIoOC9ucmVoMywzRDVfM2ZSUSNOcDVXI10iSlY9YSF7N2pMQzEyQFFsYnskeVReQzo+dGwqaCF6KE43bUVDJG1zQzEqTl04WW5Efnd8MkdNV10hOmEhVXg/SDhBN2w1c0ZQ''@;'; put 'put ''WUlvWV4+ezVoK2RDIUkjQXshWl9HNVJXQll8cV9gNDR8KXJnS0B6dFtrfSJtfmArJFZ8X1lVUyJIN31GPXczPkFKX0xaejxJQHVTL0U5WjNiKilNUmNjbTJaLk02ZGFoYD40SExaRyxJTzREPT8+RmU2O248fXptP2orImVfXixyfDAyX1I/cXBGeXAkS291b1t6cHAwR3xGRCUzREkqRUVmN3Ft''@;'; put 'put ''cG0xb1tlWVtxRz8zUTUuYz1UL09XInYsYChbKyZuK3pWU25XemlKWCZfWlI4Jjx3cm12d18hdnNQQ3VvViM8JjRvVnZfUVpkW085V0UjSlI/WypAU1FPRi9fPSYzKkJaenRXYTJMbTQhaCVqXWglPnRvVnRfYklEIiE2InMsYHhbNDlyc3h8JXR8PTFSdi4kS3dVUSk6byM9N3Z2STVpajMrVDIu''@;'; put 'put ''NnI0S0dTZ0Y2PHdtd3xBI35VbD1JXzV9N15HLyszb1ZyX2MxY1t1cGEjfWpieXRKJXVlS21WYCsoIUJRXi46OyJVSl1VKzAybFZ0IXdeb20rbiI8I3AjPXZOYlRZbUgjIyV7RTAhK2AqTVg8a2c0cGs+SV18I0d0b1smOFksJE9wKSVvb0o4PSNvYVRZbW9NbTxSJlh+e1NJNFJDKGhmOzh7SkJP''@;'; put 'put ''ey5CZGoiK3I1OypZM1srYU1MQzxSMys+anlzdlNBK2EuJFpGakAsTyQweCskXzJ4b2h1YkpgPDxrTFN+QixgbFs+YjlNX1UxSztxcEY6KjQhT298Q3hbKi4mMz86Sm8+bltWW25pZC9vOSglSypJc01JS05AVCM+UDAuJjNWKjtDdTVeJHgqZ2JITTs+Z0ZVPm4zR1JzIXJtKjRER0VvTDRXVDFg''@;'; put 'put ''UVA6Rm4yb1YufDdhTDRoU1txd2Bua1VXIWosYH1AS257QyJ5SncsTSl8TkVMNHxRW3FvYG9bVFc/ZyxgMSglSz99Nm1gMFRtaWAhdlRXKmUsYDhANDltc2w3eFtAXktubXNBNnpEXXJZLlcpKkhSP0FqVDlbJVtXRy8iem9WNnxdbEs0b05bcVVgYDZTVzNvW3FGTUx2VVFbbihBaXoyfH16PXFo''@;'; put 'put ''RyNeMG8wRCg6PEZxUjNbVj5vW21aTSpuK0cqVlFoWEBpXk8oXmdGY1czLnAmb1d9YFY+VTRUTUtud0gsfF9OMFtpfklqelskfEd8TzRtVG1XdG1LbndIcih4XlIlTy4mTVg8NU4hXVlbOlYkOCMmZylyIVlnMzxLd0lDKk0lczl6W3E7cyM9b1Ykc1l5W3FgLip5NjxiZzl9YUdHL0U9Vj4ufXJE''@;'; put 'put ''Ry98PFVoLn0hImErJjNDM3VMK2A1eSlGUHdyZ0N1KiovX0YvPzxVaDJzci8sYEdAPmJqcysuV0N4SjA8OUZxQSxHYmYzcGxEfWsyIXdqW3FjfStKSS9GeW9Wdnx8R0kvQHhvVmk3IVpCIlZ+ZTJ4KileTzdhK3p1eVtBXmh5YnhbcXxfb1tONG85b1ZMfjZteVtVdnlzeCpNNX5DdkpbIXZbW3Fj''@;'; put 'put ''R0MjTFR6ZjZoaDxGcHtAX0txLEgvYTtWPnhzOjgsYCZ9MU16Wz0keltjfC9lO099Rm9dPmJZV2tSc1dWaG0meHxgJUYvQXhvVkZEeltHdFIrSk99c0wobFYlJjdSUiNyNm9SQHlqL3xraWQrSCg1ZT41XjBhMytae0YvVGdgYVdtfD9QKypUPW1HeDhgYyR2MSg8JT8zUVlXYE8sYHh+ZTZGL3p3''@;'; put 'put ''cCZJUnpLNSJbQTR9JDBGL1R3cCZrfHxHSjRARltxKV9NdiVCM0UlIztxRi8ydm9WaHxhPUk0N0VbcTlfIXZMJlhjQ3pHN2o2S0VJfWVCeltYXT8uZXNSMyxgSXtHfHpRL012bEYjNyt4Snk7eVpkKiEpMHwhMGImayI5ViZgeVtJfFIrSS99fkV9W2FiMH1LJWEkVlpieiN9dlA8OE4+U3IqdmZa''@;'; put 'put ''Rncsal8xRUFmfH5DfSZIKGg5fUo2TGMhfkJdO2NgfjNfJE59c2N8PFpSU2ooVHg2MkBfNTBmcGdGYC5vWztbRDA1YFEkQUU9dDB5TVRfXzs9RGdVOG8ka1tBfWRHKGg4fX5DNEZaTCJ+VzMvS2RgbHVScVt+e2BbS31zPGhbfkg/cXtWNWBlW35HP0NIcyhafEhZQXRASXFXKlRZVks2bEdPe1lK''@;'; put 'put ''OFJZXUYzMHB4LlhFTigoYGtebTEqdlZjdndkTSNzZX5vL25Je3N2Xyp1dCg2fTM0Rzd0cD9RZFsjQ3FGW35+PmdOOnEuY0doRn42WW54ajxuUy9ZYlIiLGd0TDkpeUlOSX1WRTtJYCEmaX0uTjNlRXhxNXx5WWE8X3V6Rj8sTVE5OnFxQm50eGJjVmUpSCR+Ol5mfUsjP1F8c1B+YjwwW19zdnxs''@;'; put 'put ''IXUoPn4iX35Tc1dtU0EiLn4pfVZ9ZzkqPntzc3xoezVdUTkkfXE/YSN1KHQoPX5ae0BkdFddfkt9LEk0RiR+Oj9FaH1zKH18dzRGInNUfCZIV0xdfj5fNV1HN19zbnxDSGluI353KDA/Y1p9KT9vYnZNLz1+OF9uSTR9WT95M3QoK34uYF1CRn4mdWd4TF9HZiU1P25rRUV2K0NIWFdAQiJPRFJi''@;'; put 'put ''WGMjYVIjeyxnSWhJK1NHa3VVKn1bVGxUV1ZQOVArQG56M281RHhha046JlVJWyNmfEkrT3VOdlI/ZG4/PTw9KUJEJTMvTEd5RUo1MjpicEJQTHsxckswVTteM1gxRldUQyxbKEFfXXdsVE03OTFbdHFGWmVyRWl0dShAfk4jXV1HcyM9VGgzZ20mTUc7cXFKPXFWfT1+I2BzcFRoXjxKfHpCeXIu''@;'; put 'put ''dHRXOX5lW3BwNmxKM0VUNDB6KzVlUzNtVD0pXXg1cktuVTFXNFk5TVU9bWlyNi48MXo+NGVzbW1WKHZzV1dpQEQ/Y19vPSQ5Z3htUD1XQCEwJWs0WGZ4cUV8d3lKbXYmLzNwKCU1W0VvdCklb31+Y3RZel1UKWgrPn5+TzNYUTQ8fTJ6JCpRal8oflFbRW9hJUt8a15acyt+T1t7O2xWLlMpaHF+''@;'; put 'put ''UC44NXt+NU9AfnRgT2pXNDR9JDE0Rj9zYHNUVXZnaH5DSHgpY2BFdlorUElASyNnOnFePmVzW3wydHN+U09MTFd8cigvVnw0dFsleXN+O19jbjRySFZ+LiROW3xQQGhXfTNOV1t8TEBMNDtVdSgoc0peenlaclc0OzMkTnJbSiJAfDFpcnNPPD9zeXtrSTZWXVhfLi5GKWBeKXt9VSEoc0deRy9Z''@;'; put 'put ''cmhuOzNzSnJbYXZAfGJpc35IPEtMaHJqQnNbeDp7fU0hVygle2ZuPTN1KEB8XV5kXz4zLyZgKy82OVYqYmVNQU15V2l1P297R0g0TDdhT256eCRIN2FPfnhJTEpWSzYkNGV4KXh4dDoqc3gidntMdD8rfi5GdiJCcipIX19AKDBkfUdDK19zYH5eS017bkk2RlNhaCkiXz4oMGQuRz90PXNVQ0s2''@;'; put 'put ''bUFXeGZ3WU8+fi9fOylZRjwoIX5JRnEiamwzWyhyRm1TKCF+RW1idlt+MUFPY3JhM0xTKEtWSzZfKGt4S3ZuSVo/N0tBImVBSTdWTk54Zyh5S0c6JFddP2U/YXZaXVpTV11hfjducExmR2EiVUNXdEBPdnUpfUc1MHZ6RjM2RX5sInM6RCZVdGR6UERTQUtWe0osfkc3U3xGT2ZHLG5iM1p4U2F+''@;'; put 'put ''aywqKkMpMX0/PzFoOHBqbjlve3IsZSR6REp8ZWc+fnk/X1pJP28xfDFgU2BsdS5+Ryt8Kmlmcz1XWzlxJTIkRl53b0RSbWtEcnJqLkdZR0VdVCFxcTdFQHpMMyZASEguZkliNTRuR3ZUKXM/PDo/UHddZXZjU2FSezUqJVMqS0c6dU9fXzdxIyNzIzVOSzY4P2BfVGV7ZEZFU2FBfj0/PFhseT4u''@;'; put 'put ''YjIoKFd2a0orJmRlOUhxOGtdTyZYU1kjeVQmS29na34rcS9KMjNUciZsKDFjSk13O0puPmJxbVpkfVZeOysiNU4hITQ1OTd9LFtCJkVCMFR2YlNhIyshTDheNF0mbyV1LEtMcncpT3ZaM01YTS5HPnFffSwuOWN0ImtPK3NVNHJkKSFINF0jQnI+Qkx8cjNAbz5qU2dERCltNyx2U3FBe2BbVi5B''@;'; put 'put ''dDJ9PklTXyJ7eEU6fFFFOzJ1dmFzVnlYc3FUQHJyJFM5RXBSXkZvWjNbPVsjPjZWNy5sQi5BVj1qb0pQYSVvPiN4bUtlX3l0Nl9xP2ZoNld2YHpIaU1+XUVdMVlLWmVoTTg7bltIKWY2SEkxS1ZdMSskYmAjY2BzTnxmcTxYbUJ1M11rSXNHZ0tzcGBAeDNUOj9nRmdJeyJqdT1IJlJ4dD18W2Qz''@;'; put 'put ''fSpAekg6UixiPysuZn06VFFzX0crNUFVMl5+e3FaSHsqaTZhNWEybT83MSx1JF87cSw1aEQ4XSE1YWBaXj99YTshMyMxajdheVpAWXE+Nyl9YT5QLDlOZXEsUzhPPGVUZ1Q+KjE+PC5YfSw8Qn1jXl9TR29zQDEjL0p2fSNwaGYlTzozTyhfNyZLbSxKbEdpajAve1h5UFFRJjRVVDJmVjwqPXtn''@;'; put 'put ''NiVnW2pQOThYPVU/Li9dJmlMMCNgV3tkcldfd20wO3A4OT1RK1Y4WTEvbHAvaG9geUE6NkBePWRnYG1aXnpoQmAlZTRQcnM4cCZdemwrIzJnVStFYDdudDZDITswTjgxLFszVlZ7Ykx4ZkltLHYxeWRpWSQoVmNzSEx5T1owMTFJY3ZMUlB+UkZWOlllQVN9dU4udSEiMWJDP2szUGJqa2EzRXde''@;'; put 'put ''d0k7OigqVEpifU9UJkksRUs2Y3RteGh5eDdiY29UOkskfj5UZ2R0I0t8ZyJtS2Q3TWhJbFomVCJbN2k9QipvN1s0LitOcCpubF9DdW9SKFRNaW1CfkF5V0N5dWk0SSx5YzQrT3V1NDQ+V05IUXBebiNgdyk1LkF4Py5ed010SjcxdGJaJE06Q1R0Z1FAVlQ3U0dTdWpVaVdRdDt+M0BoNn1zPH1M''@;'; put 'put ''MEF0P35YYG1iVzRtfj0rcVB7fld+dXpuSTl+aEA1eWVDRmRlej1WSypQSXJ8N346Xl94cVdbfnx9RSU6dnxzKX4wfkh9MFs/UT9+cX4/fUlgWlNBdEtORmR+OWhGMC5tV19iRTwoUTUzZzQyVVFRan43cUtdNWM/NUpiJTNZR2dGdz9sVnE0aiQ6dnUoUSxMY0EifX47fiUrZHlyVUs2c3I/P3RA''@;'; put 'put ''Kk5MVTg3UkkrT1NCN2lQWHh0fGg+cTV5Kj5hRXdPfmVTcVg1TzdtcSIieyhrX2MqeTFDIjJfSlkxV2UqfVJpc1dxXnRbN2xCcnF8PjNDRzo5Rn5faEEoS0c6UWNXeDp2PlgpNVNhVXReUVFLSlg0UjApeldVfDY+Y2gxV01iP2pXJnkxWERDRCNHTGlpQUlNK2EhU3FGV1JqTjBBcEVxcF1DfT51''@;'; put 'put ''RypoQzVuWDhEd18sdWJxRHZQImF5cDRZPmhJJH5MTCVGU1h2JkVONTNQNFZJP35qfTJMNEYlflBAYnN9cyx9aHlgZX1+Un4oPGpfX3NOd2g+ZDA4d3wxe35QZFhQbDAmLjhJa2g0cWhrKUtePilVcUx9SWYkUT1KbW8haWpVbF1ERGxxL2BfXXJpVSZFYDNLSlkpfkV0W1kpfkV+TntzPl5EQFpM''@;'; put 'put ''dXdAc3NGY15nO0kzKiVyX1d2UjMqWzlpfC5aVlhjbytAXj1Lb1UyLF4xeXcpPmUjbClqfXxYZT19PE5xSyhHVlJfIlgiO0UxUVMsbVomOjJsOkZ6Ik14ZFBCdnQuO2tVTT5pTGswYUEhSWlIY0BuMzwmRX1qVVh0dVVxSHFxO19rMDIuK0kxIVE8bU9AU1ljSW0iU0UhS3xwdnleMVElcVFuPXto''@;'; put 'put ''dndxTFJ4b30+MlVYdGdmLipKMmRMLmJ6OSwmcmtLNms6JCo3JEpxbF5fV3AwKFE/VjJkSGYxYihaQSFuc2hLaXpRX3czKk1rMEF5PEkxPnJrS3EvYS5KXVRjTTlBSkQ3KHpXYGBgdXplMUIuPEUxTyI/bSN+Ln14eTtheXJ6V2U1TnFfW3IocnNKbCQ5KlJgYE8oIn5oIV9+eCt2MGN9ezJAK3di''@;'; put 'put ''OjwvMjtVU2FMQWp4I1EzeysufDNoQ1JfckdAP3RDR3BKPGMwXU16aWdyTnVPUi5PXUo3Uk1XNG48e04oaHBUXypZUSEzT3l6JnUsJkpxUl4ifjo8SjJ2amprQ315RER7Xk9fXy9+K1Ikfnxrak1IPEYhdl41MUhwQ21BRkxSK3h5eDJpbzZJRDwhRm06LH5qdGkzSTo6IVl5alpyZCw2WU0hfHVX''@;'; put 'put ''bCtHV2ZNOlZWdClkdk5MZ31hIzl+QWN4Okh+NGpJY3Z7VnszPkxWOCRWQnNXPS5GT0F9YClTNChhUXFWNTJMMT9bQ218REE4fSxPekY/Y2MrenZRZF8+ajBdfXl6TDRnZXI4OH0yenhrMlsxZSt9aGFnV2N4Si9MQzR5IS8wUnpfIzhZV3c7dWpKYFJtYlcpP0MwX3x7LG1zYG5GY21RQyw+QGlm''@;'; put 'put ''QH1gd2coTFRuMXV+QVslaHxOJix5QHI8YH16MlAoOG43VFg8SyNQfiRdMz5Vb24uVSlhI0d+K3pQKEdZXztjIyhVeUBRRm9fMnZWfEVqNX1EbyZ+UHRvKHRpaV9sNV5rJWBRWlZ8JDVRNClNZ25Xdm1iL3xoQGl+MWNQV0B9OTI8fCROdn5LWFBXKUl6RmpNLHYuWz5UUT9gMjNfQnl8fVhCNmhe''@;'; put 'put ''aGwxcTdub1d7RnlsWzUpW31JImZ+UGMofnZxYHN1SU0veltSeW58RkBiKD1UOjlRcEY3KV5weTd8cHU4fT49Zm5qNE57c1c4W2FQaX00KCU+NTg3VENETS9Ze29CJX1ZR2NzcGMwRiZeekVVYFFafH1VWFJXZ2okPilHPTIrYFR3Kn1JRUlMWWNmbl1EPDI/dXprZmA7ODd9bD9SKH1DOjlVZDc1''@;'; put 'put ''Sy8lS15gXXYqfWtyZz02fU5fUTQ6dV9leiIvaXBbOTJ7fG07fHNHUU0vXltSeUd+Q289OTVlNzVTLyVLfmBsKzF+OWJnPTs/Lj0jc0VLI2hdcFR4QjQ5bS9bTjJ3flBzOjlOJihVMX5dND05amc3NXt0b1Z8Wy5Gd3xnaCE+QzhOezN+d2NqKD1ILlFrR2ZuY0ZXNHgpWlMufHk1WSh1Z187JUBo''@;'; put 'put ''S3BgaV42fS5jZn5MP2cod3Y5bWh+Vj1CYVEpS1BfPiNJdV87RUJ+XT89flBufV15OmhLVH15NWtzMExLTGFKeFtVSC5DKHk5bSR9dyxHYzZ8V0RCfnApVyhiSCQ+RnpXNH4pWlNwX0orIX1raT05bW5zcE0ucFN5XyF2Q35VWCRzTEFnPW97dnNUNER6X2V1QjQqcC9lVFE/TUpUfGxlOGgxV147''@;'; put 'put ''ZUpzcCxeUUY6fEZrZn44K2VXOVtQUXl+UV1FY010QmFefixaNWgpWWNfQV1aU11+O0svOUVOfV1DeShVX3sydl99aH1oX2tIbHUiKzI7big8XnpVb35tcDloeS8vaU1dKUprfCM6ZV8wRChoLn0sKSh9cCFRV0xSSmNEXXNSK3NDPzdUZCx+aV19Vn1vV0JtTC9ZNCs3X302Xzc+WjtaIzBfWkM3''@;'; put 'put ''fiJ1W1hUXWRlKX1vIWR+aWNjK3FTS3ZEYCMkUihqMkY3Lj4vQyp8X3QvUTl5QSJHQHN4JXwrTG1zYURAOS5fXik5fTZjOnZAWiMkbylvRkJgbzElfl8jdGB7fnt0eUlLNkt1ISorRG1mX2YqUzdSRFVkLCswXWpsTW48X0hjIT84YSliQjJpdzExfm98TUYoRE86V3BpODdwbFFsUXplYDhOIzlY''@;'; put 'put ''aldNfXNfKTA1RkJtVF59Y200NlFwakFleDcsN1VDSDZZYz5gIjpiNiwjXm9RZ3J0a1hSdmhZc3A5ZzpJSWhXQixLPmVVZm5gL2MvbXlldWdnfDFnL204dG9vREosUGlmNHAqdTV1OS52NXlDNk5BMXk7ITo+eStofkVEXnVzeTk1dH03SXBxVElQflkvXSw3UUdZY3hfQSRseEB5X0hhdXV0TF44''@;'; put 'put ''Zz4oNm5XQjo/YmVlNzoldz55I3g3QFNeZUw2dSNVVkk3Z0MkLkc6MD4xK3NoS1E4Z1ZwJDUwZGhNIjp5SncwS1QoI2FwKTlCZS5tfHQpXSNielN0bDFZR1h2NHopZz82blMoVmdqYzRySkkvei43TmRuRW9dKiQlJURlfVB9KlM9PUxuNHo0MGcsdUNYOFsuT3craCt5NXEkekBqY25DcVhaUVpf''@;'; put 'put ''Q1EmUWlCYk1rP1kuRntZSjZVJU9XOU8xTGBTUWBYWGFuc2xVUUlFXWBbMmU6V10rSGU2LzZoZUZSeEx1KzRqJVlFSHUhRCZwbWxYLzJAbXBTISZJIWZfeTVZImRSdm0sRV1aW1RaQCMuUnRsSSF4N3kmJUApYzMwMVVCZH03RjZWUFJidClwKW9Ydng3dF1BMUBkREk5c0ooYWhdNFk8KFEuWz1x''@;'; put 'put ''ImF1MT4qLzt6azovdDZAbExhaDlwLjtdSjp8XjI3VHE+KC82eS9eIlQ4LD4xKFJQV0BSbkUmdzdkazspQHxkTDlCcjdrXU8yZ3xkJUkjdFI1XzpfSW86L3RpMlVhWTldUkE7I2V0fSRxdWF3cD4qMT4qNkc6fCZWPXQsWyZ2YTh0UjVkOjg8cnFKOT1JVTcleT5fOTZoTDNicGNMNmI5PipjaSVi''@;'; put 'put ''Q1AlZGdRPVU1KTRoRlAzLERnIV90Nm1TK2RKOGgwRitJNHN5dz52IUQxUT1PX1NhMSRDRT1tOTNabSNWJWR3RCY1fCVbUn5kKlNsTC9rMi8oKkdlLmRPXXlqWTwkVGVGbkgmWzJTK2RTLmxML2taRDkwJDhjTGM3JGdJT1gsI1NhOCpIaFBATDshfDVuNCVkQ2VfU0FVbzdfMiFFbjMsYSF0YShk''@;'; put 'put ''MzFRWDoxJUI7cyZ4SFVhT2VUP1RGOXRTNk4oWzAqNnlzVHt5UUc6biUwVV0hXUpCZWchZnx0fWhEOjNKXmxWUWZbLG9dMiFoSiojWCFWZldCX0pVYXJIbkpZS1E5XnciZFJ2QCNkVlJ5aE16OkYzZ0VAQildWmxmXUQsTnhfdyhEQE8hJT49dTQlTGlCNSk3ZFU5NXR7Xy9PJU9nUCZkLzc4ejRM''@;'; put 'put ''VGMkeSEyJmo2aDlBK1BTYm1zbiReMVE9SStSPTk0JGpQRCE3dV1VZWlzTWQhWzNmRH48SWF1RHVzT31jIWRFKXo5YipaVXc0cCpxIj13UHgiO2JPXSNdN2g4MW5nOCkwfDl7OD9mNmpNVm1lU0pFZmBRNWpOOEI7WzdCOHhfTzJBITF0QjhrU0ZefTdSYkhhNUUreCNhaGt1MHQ1Z3ZjXl8vOClb''@;'; put 'put ''aGchYUJgU29IZ0l9OWNkRWRfaEQ4RE5AcEQrOD9OSFU1JTVuSlZRKiUjSFQyOCFxZzFVQGdbPGI9MGpWJCJdVzhbSlJrImpWJEs4diJKOHg7QV5PRWpjTSg7N3dYPFdVJUA9YW5fJHtpMmNFXUg9ZS58LkZkNTg2VTJOdmxMYm5db0pLQDE9W2RqS2tNaXhubWxEX3hDODYlYFFna19BVkBYO3Ax''@;'; put 'put ''RSpjZDxOPkJSSlJrMjFbWVMqUyRdal9SelZ+VkUwSUwrc0lzUC81OmJuMGx1KmFES041JS5INS9bTWhCbUJASXw0L3Z8cDh8QEl8NDBhMkZCYyYiRXM1UUw4Y0djN3JJOzd2bERpVGM1ZCVaL21qWkAkLjdoMjd0fkxwSiZtcGxae3ZEJkZxUm8pOnhrSFIsSVE3dTxFays5OiZAJG5bUW5jZDZg''@;'; put 'put ''dkZpWDdDWDhbQW1MUCI3OUlIPTEsSk9AYyojbTR6bmorbUJUbEBjMXRhdVV1akZMekZmPmM9Z1ksNz5nYlpfRUkvJDRqY1A3dUFAXVlrcEg6LjdMOyZUMW05OlZFdUlqclg5cklmc1hOP0VebXBsYmNEeUtQPjNUZURXIX1eNXBKRjw7ISF0Ll10Pntte09pPmdiXVpFUEhpRTliJDUkW1AoWUFl''@;'; put 'put ''bjR+cEJJKEpBOCN4eFF5eC5kIkJIJFJTPjN7MTs9W2RzPmZ5blt8ZE5pRkt5XiVFSnlbMldfYW8uI3Y9bjk/VX5pXmB0cW19e2QhdHpVPm17T2J7bjIxcnVdTjd3bV9HQTtaY3M7L29IMFVLdV1Hcz9LblREUEtYXm13Z3VwbWxlJVBgbCVKbz9Pd0xzeGk2YEtWcH5Fe10mWTpFdzskLGw9ZXdQ''@;'; put 'put ''SDFJKERJYUlIc3wmSjltcnAyTlI4flcuVk9Iak9IcHhPQCgwNlJ2flNOTDhYWEVAdTx2bC8oSH1LTzgrUl9GKTFhViZZJSMiMWJDUnJXbTosbTRbZVo5Z1lvXnd3PnhoTVI6UTVEK2tebCVKXUYlPjJlMH5PMTQxPSIscyFfVTI2P2x7aUVdMG02aHpsOCUoRF1sX1FmaEc9SmU6PUNJaUJtLD9n''@;'; put 'put ''Qm9DUUJrdXw3RyZFQUNzLHclMz5PIWdXVV9RKzRhSVF9PCQuZF9eO1gmL1JieGJCJFgrU1Q1Tn1Sdj5ybSx2dH4/JUM9KFMjb1I8VFtkaHQvXWJuRkk/Z1UuWGFTSjZjX2lHezRyeClMOzduaUxCbU1mM0N8W3N9a2V6KVM5amFIQ1ZJYFVxUz0ka2t8Ol1mW2kjLi4rPSUhS25qe09RRnFlRSlL''@;'; put 'put ''dSldYiUoQDFARzhGaUg/TlIxXUpRTyNwanw3KlN4NCw1cGpxXXFsRlgwXihhTjdBZW1MbDJ4MHxRd0wmP0I7eDNIOFVhdGIrZEZYMWdMPVMjd09DLltTRDtsTWBjPCg5bFZ4cTBFKmNkL1lTcEBhaE1KbF4jXnopIjJ0VHBAYSRmM2BabCUkOmd1bDwoXWRkbyhPOj0wZkx+dnZfQW1MVTd5byZd''@;'; put 'put ''P2VCODxXOlF9PDVhOTdqRnJ6I0x7dCojOVB9T3JIaGtMcld0aVgmNVtEIkcjW2hXO3JifXl5eHF5d1FFZGVubGMkUD0xPTB9IjBFUHI+clhCOCojUzh4YmVgbyQ1KChzLDcqdkFlKUROfSJHQkw1VXxaO0V1W1p7PjdpMFlWVCxwNyhEVEsreWR5VGMrcHs1c3FrXWFUbj0qfGtlSDgoQH1rbGpE''@;'; put 'put ''Oz8hUWUwckJSL0B3JW9UJDd7K25rPWkmI3lHJnBXcDBkYjZ1c0o4Jmo0JmQ8UGxVZDIuZltuUXlPUjFhPzM7WUpvWDM6SlFaYC9ZbWRFZDg7IUBrSyRJZ1NQPVZqZnFMNiFrQSV0IU0kS1FsLEVlOHhSbF1XNmF7OlZxJT0wajpSMWRtcDppeV0lJTdqY2VVfCFJLDFAPjRiS2U6PUQxSGVBZSt1''@;'; put 'put ''ckhbdjs5eDczL1tqOCpKZXNIcExDNGgoZTBaOnMweEx8UW1sVDheOTtnPyV5WVV+TzxWN1hhMDssZHdjUGhIOU46RDN4THFuQkk8bWMkNltBZz83NltBZ3YzWGFQZUhbX11+amx2JklPfXhEN3o1LEdLSHMmTmRJc3xbRStkQWoyWlEhdjB5OFJiWXFKMWAmPzd8UW5kTkldYUFsQjhfYTMrM2tf''@;'; put 'put ''UUJlblpmYjk0XTdlaUBlUCUyKWMpXzc2aEc4NnVjbyIqXm0pPVgjKXpsXW1CYjksSzY2cTIjdDAuU2dDcFp7by5aaWVmJG0vNjwoL1E7e2RCNUBZYyExPGtJLmA1M2Z0ejNkJl0/MX4/a3BQcTJDcXNyQzhwcztoKVN6VThzLFlkOSlaOG9YJGRbS3FIRnlPW2lzSUh0SDpnL0tJM2EoS2U0Y2Jx''@;'; put 'put ''XTpnWk83SjdyZT5gV3tgQGEsSXtnJTpKYzl3WEEzPEA0NSpmdWc5JGJ7OlRYKzprazUxUFlwaiRnUSV1N1FzanUwXmxfUVMlQlBBOCJ3UW56ZTs2KmkyWnZdOiQuNzZoemxHWG9YMlN8aFg3RTpjS1ZlKW1YOEpySkkqI1RUVShFRTdfN2o7ZmF1IUBqUFdFdUlKeG9xX0hrM3phUXkvLmgpLCs2''@;'; put 'put ''a1g8K3BAO3g8NmpXI0d1TEMoNnJPN19VfSw3OT9+N3FbcDJTRVo2PCROUjhDY0M+RVhwVEBiPWYjbmRzOyFxe311MCg9I1A9V08pMSN8Zn4wblI4JDNeclQ8Mio9LFB8OHF2OnhZenhfKTozV09oZWFvSW5VJSJvKzVMKyopcn41Vk4mKUZ8KTFld0hSUF1sczRPbj53KCteLFVSND1nIW5DalAz''@;'; put 'put ''enQ/UVRNM1ZualJqSUwkLz1NR1JwQD5CJUJAJmxPM0JbYyM/aG50X0ZGNCQ5MXZvNnwqbWdNK19WZHgqey8pKTspbyQ6b18+OWhbbjFlPUM0dS4uMXxaWTdyZ0JiYzVLRFBtfmxfOyY6WiN5aWFdRlUoZEg0VG8vM0RASFpgYUh2fDdCc0J4dikpIz5mKS4mak5qdTVfTmM/OTRMPEw2NXJKVUtQ''@;'; put 'put ''Q2JCY2J2ej1lWGpJTSxDcUl3RyttZyQ9JEsxKUVKM10xZiEzK005aDxpJE1ifDVPVjY3Pk0raF0uX05gWlNnPTNRRGpkSEQ9MzFGZ1ZxU2N9TUdTP29EX1cmLCRiSyFRSW98ZXdVbTVORXQvOU9vd0tfcFFAdHosXmIwO19ETjdzaVtKRnh3JX1TdUtWeyJeRDFfTHxMYnw1Qn1xUGowSF1aOWlP''@;'; put 'put ''cEJldUFgIlNNPz5YaUAzcUdaLGBoMTBoYTFzJlUuL31LYFlfPGhiVXghQHxDRFl8LkNpQUVNYEJqKHh6bS5lTDp1Jlcwd21iJD46Ij1KV3U9YlpaKTZ7Ylp3XlttQixfI3dafFNjTzdTYVV3YH5OSWNnSjkubCtePTIlfEtjeiNgPUMqZVRjKCROInU8eCRReDpiN0U1IVhaRy9oRDt6LldCNC86''@;'; put 'put ''aTp9fE9NPyFNPyRiXUgzeGN7QjNyUGdFNkJFbGBgYV1yMWEoUHlhdF8+c1VjITI6JmNaYCZ6W0QhfXNBNWlpI3ouakUzfVQ9SSosMVZYbTZZTyhJNWslZkUlfFdONS43fD1Ba2ltQjZ1bF9SQ0s3QDNXQzErTkpefC4idWNtQn4oPn0kMjVUdjF5VCt5NmVbWCIxJlhVQ2VCNmRnYFIiP3JINGAl''@;'; put 'put ''W0V1YFNiJnI/LiE4cWQmUHRLPEFHcENLZmBNeEJzRjpEZkdhYSEmfi5XTHFAKyh6QiJzLzNMVXplbzBGVDg6K28qdytELHZZP3ZeW2RNaHxBKng9JHFBQnNNKGEpTTx0b0VBcyladXp+WyRXYH47QihaflozTjQ1NUV4eClyNy5OZndNTWhjK2pYYVs2ZHVBYVMyYENSeXJXRFMoUlJELG1DeD17''@;'; put 'put ''ei90RHpUWCZ7JHhDKHVqRVJTZEtXMnk2WWVUWVU5KHk2Lyh2UV1gfk1wTCpNL0ZTfm81OzspYmxCX25kWWUpai8xcjRZQUdxTyglJDVmNFRqJEBRJChONlI8MHlwPj8iJVkpSVV6KDRyYjMxZ3oiJStrTX0+IiVNIip5aWlwITdPMD5OTipOSXIqLjVpMl1oRTcsazJPQzdfLDIkKF9daUVCdEln''@;'; put 'put ''X2tCUVc/M1VPPygjeDlJSjlKLyF4alE3djA8fGJGVDVrR0A9IXh2VzlTVjViXV91MlVlYXdqPU1APWF4SmZhNG1SQkltfCpNKklZJVMmNXYyZElZNDlLITVVITVCNWJPVkAiJXU3cUZBcDJRO05gUVh0STxLQz8+IiUsXzo0VipCOXdhdnQvVCliSWRdXXAjfTJHPntGdmUsa2FaJF9IMUloZHU5''@;'; put 'put ''K1BZZjN2LEx0Yl5MVjtQQkB+VXtrPUZUdF4mXW0jIWx4SEpEOng5PnxJd11oaWx2allwflR1SlNVOnh7XldDLkhEWDxhYUtBaUtLUVV8WVJoUyMzTyNuVzBxNyFIWEd6OWZhOCZqW0xPa0RfM1s3OD1weCFHVVgoSF1dKWVwVHFLKihNZGxic2EpTFFUQD0qd1pRPnRwQkJ2bjN3KGxmUE9xcCJI''@;'; put 'put ''bXR6Vk9PSCQkdWk5ZC92c354e158SEEkPERiamhlS3d9ZkRpS0lAPTN1ZU9bejBMQWdFQFhHYnRCITA5b3BsQmd6TmMoN3BmUSt9T3MsUSouO3RRKkJtQGRCQWlae1lDMiFJem4mQnxWSy8uakRoXVROakZUW1VkXmBdb3IuImVeRmk3NEowV3xlTiN9WG5ZcilIUEs/aSMxdmVsenRKbW0pZXF8''@;'; put 'put ''cVAvYXksV0pkPzomQ2pxU3VqaUZoL1lMe15kJFdmcFVNaVBMWF52LiszY2NjO2g5NWdAQnhNYXJiPSJzdXo5MUprYiFEJkJxNzVHXmgzUTtSXnAjSGE1ITd4d0FyTjtubk0qMXRTeVU1QVk0S2YjYEt2KUBXYURAbyJCPndEQjVdZlAjTDQsY0NQN3FdYUFPJj44cWlSRHA2bj1WM1NWbE1GIURC''@;'; put 'put ''bllMT05VMHxEbjE0RWNoN2c1fmBrU1pMRzVuZWwqIzF1NFJGOTVjdFU1QjBuYTpZSSFZOGNFYTYyK3hEdSk0LyhPSi4/Pk9DZlsmR2AxZ3oxekloR1s0enRmOiFLO31EYS9MSEZma24jSEtCP0RERC9YZF0yZzBIekI+SHhGblkpKDpbJC59VmIzYSZ6S0tROD9QJnMmcUxULFB+VXBrYFhIVHVp''@;'; put 'put ''ZzM/OltxMV5RfkZUODsrOkI1fD9HaUMzOThFdEo8Q1Z4a10jTnxMeihtTGtyU0p+S1FFLyx4L0M4cHR6VjlaTj9ZJi51eFdpUyZaczwqSCpjalouYSgmUHB7WEhCW1A4NHVnJVszdl97SF4va2YwOXhWQUYzaS5xWixrSyoxRG5ZP1k1KGh4VXEvPSooaDRpKzdIV2h9N353aHBOWTU6SSxzfHQw''@;'; put 'put ''eEVqMVU1d291OE43SyszJjc0R0hVRSxkL2VvazoiUz8uaHcqRXoyT1EsP3EvZW9rI3RORFBYYzNZPEQhZStMW08mOFMiO0J4fSlMZ3JYJiJXQFV2bys0LyJJS1ZnNjVCc3JnRzRjbl56NmpQP1JwbzhsWzU/PUxZQWopWzJ1WSY9UClOXnZFJG5weDZiUEJ0PWxhJj1QI01+VywkW1pTWzQiRWxQ''@;'; put 'put ''SHBVI0h7MTI8YWdeZC5YOHFRVnsmNzozY05dJU51UygzZiVidTpXKW5zUCxlSWtwTmBNY2k4JWohfFVLSllPN19eYCE6JGtQbkxuVCsxKE0zWEw0OzNjSSk0R3RZQWZIUSZXKTNuPzxWI0hiMnhMKEZtNz5sZCNKNjhZeDEwOSI6SUFba1Iual0zaldXYG44UkFgXW94VX1BMm1dNitjdE1Aa0xD''@;'; put 'put ''OWojSDZKd0xCWihtQnhIPDN3PnAjdz53XUU9YXp5bWNBZylBfCsyWjJ5c19sIyNUMi86NTIqTSFjPEtWZ3c5VmtQT1VIaU5oOkNUJF17MER0bEQqeFtjN105TVBSL1BKKmw3d194aTZbaEtoKEs2UyVXaiM3WEAzLFhGWXo9TGQrZUdxSXUkKldtal0hZ2lXMjV8ZTFga1Mxa2FTSDBdZTE0THpl''@;'; put 'put ''bUFRbE0zOVFJYUs9eCZkPTo8REBGYk1eaUtobztPRkNpT01JPEQxeCtSRzsqO24+d2t5KyRXZTkvQ2cpKXhEYnQ1SWtVPndyRnBaVUNnI0lnWyFtKllKTlg1OSp+MEVVcUFnImhoIU5wMEUsKk83VTUmKG1HNT96IWxRXVYlWTA9PXFIYXNQdFp4Tz88MkUlWn5GJUZfSiNIOTRjWE9TQWAzJUN6''@;'; put 'put ''NkllKk1DU3Exd0N0fVc2ZDhjfksxb2tUWFg7dGpQIUUrMHUuRGJdbXZVQXdbJEpWS2hoUXcyZXBWUktnImNsVGtDIypHe2wjejZXK2s9aXU3dFFESSF5REFBTyYudU1ZZ3MqUipkVE1wQm4leCo9SGpQM1osKWdfdnphQilOVkFrVTFqS2hgMFBUSjouMiw3e0h6TCZ0Q0BxbT53O0JwaXwwNE9P''@;'; put 'put ''cHV6dW9jaV5XSnJ8cTxISSt9dk85M2MjUG5PbkgpKX1we1NJbDN2X21BLHBxMUxvXShxdTldMWdnVkFFJCF1emIjL3IiOj4iJUFSRG5RZTNLO3dTWC41W3RsJXo5b3A+R35ue0tVJGBwV04oUVNxTWgpSj1NKFdhTCswQ28/dWMwODhyMHBwS0h9UnZPZDdCbWNEU3BAQCZEeV0iJXYobFVfTW8w''@;'; put 'put ''bDl2X3cuallXaVMmV0lOaTRWV0clPE4zRypoMVZ0JkdwcDcwcjFPRnRxQkVWdnl1UTdVQlQmNXZoTWszeGlaODM4UmRJJSFKXV90M1EqfEJJVFIxVi4zK3xvaU9qR0A9Z3ZFWVl6IlF2O3krLHQqRUBkLjs3K1tIM2FAb1BwfiJWTjpgImU+PyIlSFhgPEFDVWtWaVN3MyVLZUJNKCUpRmZsIm9Z''@;'; put 'put ''diU7QHZJQUFLLiJQJjV2K3lvTCV5VGdeei5PbmBhU0dgdDN4ZShIK2RBRCIlVkg/NXVZUiVwcEVKUCRJWVhAcFRIQTNMWjt2LGZxKi5dJip0ciFVS3AyKDQxRDZsRVNGaFhnSFI4YFhkOWQmUHxoLkhDQyNMTyZ0VDNxcWtQZXFdTlRBVndPQ0R6YEE+Nl99V3NCTHk+RXlLOSJ9NyIreDlyd3sv''@;'; put 'put ''UGolTE1jbVRQd150YVJlJlgxRnpBSTVMdzxUMS8+RiN2Qjp5e14iWTFpTSREYVshbkJkWEFSQl9jJjV2M3JSJSM1OClnJllFS0QjR3VScXB4Q19TZX4lQmk8KzB8bnJMK0hxSUA9TmNAWSFPRUdCeE9PJTg2NVYvX114SDdeSUg7dTw3Vkt1MTt3ImhwMHBwIlhsZGZMfjVHSVFmaUs7T190WnF1''@;'; put 'put ''OSNXbXVgWn41SmYiKUhUQ2E0dXBwMFpUOmAkXyNnUH5MPFdfRVNCKl8iZ0A+LEpZSnskYVJjaTBHTzVkIV5NbGtbSSw3SXowK3ZyX1BeUTcxTGxsdyQxN2JdOTZTdk5OaDZgYERFP09jJEE3Y3BWVSNfNT9BXV1ZNyYwdDBmcC45ZzRbSkxYKFMoV08mPlltbCNNWFJUTk5nLz9YclNuUCxjVipX''@;'; put 'put ''VGlIWjdSVzZxbk19czZDfU9CRDRDTkU8KkpsYWl3JUs0d2I+eXxYNWFYRSNHa2UqNnczNlRmRSNQeG5oTmw9cll6UlBqZTsqI3kuK1NuWSgyfTM+QyFFMCUhdFZYPnZ8TDV4QyozInFvT2RaTTVDbHc/fUJAYmgxRXtbLzNfVEgoelkramttNWY9SC9NN0g1JVY2PDEkQFY5fG50WG8kYTpWKHlE''@;'; put 'put ''WjtzY2dFVnVTXy81Wj0wRFp8ME5aXiZaL0dIVDBIWyRRSHJ3eiRPR0Y3c00ubj4hW1lEQCZkcjs/KDRrUVMkU2xeL3FfPzAxT2dJPWM0fCFaOzlLP3opZTBeJlVkfFtZYjdjRWh5eTdyQkAkNTM0QG11VlZIRTN2UDxlSCM2SDovN21TIihCRG50c3lgRkN9LzdJb0NMcXomOl9hdHMyTHw8Jntf''@;'; put 'put ''KV5RVl54TGFQbipyMy8kQlp3WndmIXdHckA5djRyOSlDRG1pVTB0aE57RCpwYVp3d0t4R0gmcSZMO3V3NTlDYytyVDBCdmZjWDMzaDtyZkBHM0NXSFY3eGRuYVc8a1VDdERqXXMmRV1NYkpdTEVCLHFGJTVWMHRQI3lvaz46O1Y6PmQ2Ti9OIkJKIkdYPjRWayZ6PjR8MTd7althV314WzFGQjp3''@;'; put 'put ''Xzh6bypYKnZUcE4sNyF4NmcyaD01MChbLnV5QzB0eV8veVp4eyNfOSE5VndfKHd7WWl5OH08fWZ7d1hmW2VqaSplZ0omeCRpIWI6dlM2eEd0ZXgiWGlsfWtXYjd6JVAyMWciNTVHVl9rPjUqejVQM0t3VkhxfGtOcihdY2JRMVB0Ky5MfEFscnx2TkEzUHRGYVApNnZ7XWxoYXxxKURrWT4xR0I0''@;'; put 'put ''NzEoWkRWPyIlZG1zM2B8T2R3KVFCSGJaUyhqfHB3TTcrVjFoP2BENzZYflNOeSVRRnBuc25hXT92SWh9Qn5Ea1lTcD5wfGMrSFF+Uy9RZjJgcig5Kk07ZGNzdH5WVHptITBPRGE6dlNyIj9DSVZ6TitaWCsmUF9POnpoV1R+RDc8bmVnSGJuL31FYDc3d0ovb3N2YEIyIk17TlkoSH4mNj5zWGE0''@;'; put 'put ''W0dUNn51W0tEZEdtPk57Kip7REwyRy8oclpARElmJDs7SmJpM017TH1CMkxMKmBwa1EofHJ3P1hzdz91SEFOOkJSfF0mP3kuYStyKW91a3E3PjU1ei9QS0J6JSZLOzU4XU9afVYzJWpdciZfXzVjOlF7ND9PLzo/L25JPFF1PmU9cD5wZXFTdXMxKE1IRDczTnBaaVgrTV94eUYmNUk/S0gxI3Bi''@;'; put 'put ''eGEmW1NQT0JwRlQyc0A8JTF0dzo6UXZzP19veHF2IU9EL3NzZX42fUI8N2czbyU0U3tCe2FIe2NQNnR6S1F2OkxrXkZkPSszX2A1N1BJSkNpQnE+R1ZERXdrTzJITjNDSkMkLChLI19KYnpEKHJiY0QxPi9re3p0b2xTJGldMzZVNkR6REJDbn5ONHJpeiN0O3I2LkFyPzJQO0N6QnBiR2p5YC8q''@;'; put 'put ''eV04NWFjM0FMfGJDZEFhPVdtPGhpKzhhPDNUdFZeWnRNKXpFdz46b097fUJOO2ViOUdLbDE9Yy58THVvIj5BZENtWGt5RXJrYDAxUzNTe04sUldaNjJMOER+U2tELnI1b3QmNFpFMWUuPkxiYWxDMUZjMnUrRHIqL2JoQzYsXSN5RmVvOG9ofn1mW2Uzamp5fV9LQygxWnFOPjF4Wnh6YWRUe0Ep''@;'; put 'put ''a1o0ZkAuPmM/WmBdWnd3TkZOb2hgNSh6fFptPCJII2UjdnNWcHtzTTtlODZFUVNZQ11nKC98ME9iMlosK3JsWHp5cnNXOjRVSUNrXVBufHFOfSl8JTJRdCZ3LlFIXX41cExNem1BdVs0NnMyUyRwa2NoS3JkKS41eW06PUUmWD54X317e2Y6cmltO1E5cnYvMnZAX3RZWlQiZiZDQ2xdNVk6fFhW''@;'; put 'put ''OFB8fEtEKFRgSi44SmY9VEg5fT5ATVkkSFgyX3FdL0t6TygyVXJ5QGNxX212YE5mPX5gIzVaQH14NWh6ISY5MVZeWnlOdjZ4cSM3ZCh2MipMVDJ5bUY+YToufTw6O0x+YyhOYzZYYDJmTm1KajE2bnxSY3BUMj1PejZNSUwvfVYqYWRjR05ufnFXent3IWpEPkxuQ3Jhem9hYCM4RzRROmBSNXtw''@;'; put 'put ''ZlJbMC9pJkN4VltbWylwfChMNzJdSClvbjcmNTUyMjBmMXN1PURXWltWUzZVMD5jT0VkdiY2fFs3T1QhNTZzMmR2fmBkaGZaPU0lTXBDO3VZMFFhQCY7WjI1aFMiWmpGIi8vWk8xbng/PGJgOjlCZFhkITc5a254NnV7TUtiQj8kOEVRZHZXPl5gPz9rWiZIWzdvTyg+WXx4KUZlOW1pOkM0dkgp''@;'; put 'put ''N3QldVZqXWhZUGc2YXtbXjUuXXFaJlglYDRoNmtUMVVnVHhtaDcmOltAWEZVOz9odX5MbHl3QTl5cFZQbC84dFpUKT91MXlBOl18b3w4RlJpMj5lV0VgVWJ6VlVlZV9uc29gViJlXnJYVHJ0fX12cWZVO3hrVyheX1N+Y14sUUhHY19uc0hgVzN5fF1aUkxCYWRfZFNTKkczcGpKYlNgSX4xIkNz''@;'; put 'put ''M3lkQ3l5UzJlTU16LFhwak9iUmArbmNTRlkjOGcwPS9gU296S2ZvaTUuV2Imb3BoN1sqYz9NYVpCXTw1PC8lMnZWbG5ZV1RsPzUlcEApNzkjZDJ9XUtdfWBMRXp8L1h+SykiSF5pdFtFe0U6TmEuWztFIXdwVlBsVXJuNDF7O0U1UTtlPi9BYTFPaXhkMURkMWhnNHhnM1pzfllPe2BzW0tmOldT''@;'; put 'put ''fXJVUjozVExifVM2MSosY0ojQlMoJXw3K3tiZHElTEs1X0t0fEZbQEZ7NDVRWHx5NkBGU1lVKDBfMngoa0pqMmh7OSRBS3YrR298QSs6SFRlIVdDanpyNz9hck55JUtHNlYwYGNLbEhSZGc8NlJhUnhwPl41cUwmQjY5TGJ6TlBdZmFjSyYwTG5+LyVaKCkpSjo9c10mOSU1fno4InJffkFvVmld''@;'; put 'put ''WCgoc3FVZX4pXkpLQyxUe2UqMU4wWjYoZWpJJnlONVpqe28vL2FXbGIrMUZubDxjQHw4WG5aPV80RUliYj89OkxyPHMxYGxDKjdSczBgMCwlU3o3M1UxNjVmWEtsXVhudj1pV3tNM3g/WFkwbUYlW0x8Xjd2U0ddcDIrME5QS0JBYTRUT3x3U0E6X1pDTkNCM2lhPk06YXJbXToxNkFgNTp6R1la''@;'; put 'put ''VENsSTg6WERocDA2RD5jQD5ORiNlYm5IeyQ1QnooL11ucDtHL29zR2A2RFMxS05INikzeXNzfkIxWHRLZVNFYFtrWnVbQUY+dF8zPzVFQDZERGBwd2RzMWBkU1kzQnBFJl1iSnJyZilCdGs/LzZzfChWRy4hIk58Sz5yRnpJMkkyRFpLJHQ3TW5IXUtyW11gWUskTmw+eiVEal0pUSY1dzYyS1ti''@;'; put 'put ''RGRXZC9acVRkYz5VdURrOXFGQ2Q6fEZRbT0+XlBBQzBXSD9jYF97dDUjZj16RnlVXU9aSCU1cExKMG1xI0JzVkxhLHtyNylaIlo6LmlzO3pxUXoyeF4oYXV6Z3Updmh4b0YoKklxcGpwal85PT9odSJJPmpjM2FNXmV1N159Y3tQRU0lRWheZVsmRWFYKypHTmpPV3FfcXo1XSIifnFfPnBLaFUo''@;'; put 'put ''M1d8OS5qRX5OT0xoVyR5N3QsSS5Rb1QxWSIucHN1fVJjOWlyWDdTcm1welMzSWBiOmxTfV5mWSghY2RCVTt1OFpObGRoVHt4N1dwZTBVKFZ+NTshU0hveE4ra3psLmI+Kj80KClgIWNJXVZ8cm0/Xzl7cG9ldVs/VlJdP21MTm9aJiwwNn1aMylHVCJaeTY+fEJZY3BCSH5veiNIbHIyUjFgXlFG''@;'; put 'put ''UDlWSjxWdnxbKUdMdXMxaCtUUmNxZjIvZDFhaHlzJV8rdk5ENng2Pik1bX5gTCY1RWBkWWNwIWFKNE86fnx4LiRMK0M9UUQ6fnxbKSplMFN4I2UyMHtkNl9Xa11KLzEmant0O3YjOSllaSUseTZxfDQsc1prdXUpS3JQXUZybjplM1hZOmV3Vm97aDdzJSw9QXJRZGgxcyZ2Mi5ASlJ2d2E6d3xF''@;'; put 'put ''KyVpfG9feiYqJUNBZl0oMyRIJCxRbTpbVl9bd0RgT2JjcTpxJiVbSSwmIzRTUlpOJkNgJiJkTyQvODFbYW8mLEowMzE+dHcxJE0+N1YvWyhDNnYoYFg+fEo4LEdfOzN+YHo7QjJpV356cFZjL34hfCRUW1crcVY+XylYT3opb0tqZ0JKPmImMl9fO2c1YTxAOm04LDNKezo2JEYhYUsmPGMzZWNm''@;'; put 'put ''K0RUO1BlQC5acV0pcXpuQGlYM0lLcXV7SFBdNk9KSXF9VjBNST5scVkpejRWcm5pfGIxVldyOXFYKTFDZE5XIykze2B7OiwwfVYkb3pLY3FXSz1gSDt8RTgreX0oM3hfTjcwSnFwWkZwX2pYfVZ8enpLKz4lWWVqZjYwVHJPUXJmNDpYIyJ7NlBuRHIpVmZyKVZRYFNaMU9sUDBLcXFxe3BYM0lj''@;'; put 'put ''SV1xKC80NSsuezZ2Vk5gT0YoRVd5TForPkgqJTIsY31WZXVKVl1fbHBmXWoiKGsoYCkzel95QEgqbHlkPnNndEVkcUo3YChRREAmTk9rNi9YcllAJk5PKihyPis1Z2RIZFRsVzMpPEJsVzM0UXhPNCNJcj96JmN1VU5eUlQjNWgiUUUrS0t7MUh4JlNdQFhdbkFXXm9+PjZDQ11lQjJLcSYrVENs''@;'; put 'put ''W0s7SD5UKUQsfTBNMHJSfTd5JjVLYTh4WWhOcmMsNlE+bkZWSE9JYGk6KzVsZCkmWi9oZXFmMFhXeFRfZEVSXzplfnpKVlldOnR7NmI6Njk3djZiYSs0eGV1VjI5TlNiQUByd1lye3w/YCh1RmVvOEpMaXxqKmBHPGo/ZWdmdj9yd18hRlYvWT50dSN0c3k6V1dabEAyQ3tZVm84KUsyU241L3gz''@;'; put 'put ''I0V7Z04lYW4xPFFPaDJrZ2V+PjQkZUl+I2F5K3JBWCVDWyZyNEJXKz0rS0t7MjAwNnA4VzBHfVNtWD9EXWgiZTB3I2YycipLYmJhMT5qU1I4a2YySmIrUldefE5jPjVHciJbXTVKOlsySj9lYXFmPnRdRF0vWzJbM08uckVNRW9ocV9ZLFF0RlYoSzJTUjgoOEEpQXJMOCFDQl0wcnBWU11SOCtU''@;'; put 'put ''MkpYYUY2QHNGYGI0Q3tRdGpCKzZ3WkBbMVd4M2hGcXMvYGI0QnBdWSNBYitSV3h8N3lldj5lck9Ce0o7aGVxZiwmK1QrVil6WV9vYnlualAwNitTYEVQcmk6dmt0eClUeWR1IzYiVl8iWlAzZE9WPzBZZTViSURHbSYkNDhgeUB6LlAwczNkT1tVN2M4e2cxayh5UGtSZEhpMilAQXJQfVcjPjA5''@;'; put 'put ''eHA6a2g9c0hZYHVAUVQ6I19weTw7eEkuJltzaVg8Wm1FJlNfRChJTnskOStzJGQuaUtPJlNgd0R7VXt9TllIUHhnKHZJOXpLTyZTayw6SSVLYmNoKSVEKHIofXdwbC8/Yy5nKHZpY3tHTGlxKlpFYjYrSEc2b0hDRSlXRmZ4WFBdeUlzfHN8L0s3MD9jT0FETnpkckxpMl91ang6SFhjN110V1BT''@;'; put 'put ''IyQme1JxTm40YGpCKEtIdC5HVV5gXzA+ZXZKSTgqSDd5YyFKUntgL3I0U1kqZ1cmT0VHN1ZbLHchflE8UHxtdGpVNE9ONyJzcHN1TGghcXNSS21XS0JxOEl3cVAyTVJ2YnMsYEN2dnM6UDloREdRem9jdmhlYGpZPn17Rnl3Wz4rRGB8Uik4aEM1JSxPR3lfZig7RSUscGBaU0ZzcChDZ2JzPWA4''@;'; put 'put ''Kj59cD9uV3M+bE8jfjBmMn12W3xRVVFuMztjWmBQOChNfmJvOSloT1clMTN5JXpxUFd7M3dmc2tjaFdbYmhuO10lOjp9NnRTVylGRy9TZGJaLF1iRTFfKkNkc0YoNyZsdyJ4UWpiWkcvVzcyKCpucTgvXzdrUShvR2tCIkNWZUt+QGovOSEpM0l9YE98ZH4qJSVoSTdbSzRnSntbdSV9ZzI0aHR3''@;'; put 'put ''I0FtKSZISH1nNXJzaS9oKCZedCg1fVAybihdUVNFZEAkZCV9SSlXKEZmMj51UCw3YihOR1U0ZDM7YztfX0I+c3VTJj48eUtQU0wjRXYsZiMxflspOX54R1EsZCg7c3ZkZSptNy58JWlqc3ApMFJuWyRkZFdOKnNXNX1WOmVFSn5hYEs0blVUdmY3JVtNSnhGa059OGlXYVExciIiO2MvPlpDI3x2''@;'; put 'put ''Okw0P0NjXzRCZCtOW148TUx1bl5KOiQ6Jlk2JVZicyZgV3xveFF+cWxnV0J5MnlzOlhJPnQweTtjSX1nKilzRXdhKzEzTDgjfWRgTFAye0ssK34zelB8X15VL2Z+VnBRNFNkKGg1fUl9cUwufVlXRDc8Qz4oUUk5KGNwaH5YTFkoKzhTWGp8Smt4RkdIMUY/dCpPMn5Zd3hGe0NgZVR8PlhyVy9e''@;'; put 'put ''QTkjfGoyUExRUSZoQERPaj10S1AkQDVDPUYhOiZIXl8wMVQoKEVUTGAiS1B+KG9GOF9aK2R+KHEifjZ+RD9STF9ERWh3KX5deUYhQ2JzWz5KeXRfPU9qflhjU0xJSEVoZnxAQiN9OndWN3JPVShAQCpBXmUpPz93W3wpP1Y0JWdxOEoxeEtxKXlIP2A+WDxoRV8lOiRoTU5QfCUuMFJUfn4oYytD''@;'; put 'put ''IlJxT1dbRXQoOnNMey5gOCRaTEVYJGwzfjd8akJVW2tKKHM6Uz0/Ln4iW3IwLn0pTzxzTk5iWlN+TXBkc31GIT5QSnE4YX5+V1Modz4mSEFgaF1sVypvXj9hLHhaUWp0flZNYHNyLjJ9altJRjNfaUpxOEIxeEtNXUQ4QSJtIUtQI1slQzBuVEs4NTs/PkRKfnJ0ZH5+dnQoQ31tSGwoY3FaI0pg''@;'; put 'put ''eXY6fHp9QH5IczJ9MVt+OnFnZTJkK2hXIkU5WVl8Unshc0BRNWgjOixJRUI6STJ9ZlsuMSF9MmMxRmVJQ1RoNWt+Lz1uKGwscF47YytzQz0yeSJ3I2diOXg9MT5VfDpIVihOSF4pJT12VCs0Iz0sfm8yeVFjX1UxT2ooX0d8VEw9aShtMj44Uis3WypLeU8oLnx1WFB2ZX1zInZKUXwkLDEhRX4q''@;'; put 'put ''N3lGY3dgbmRfWjJPalopdnAyfURbRVJvcyQ9VTQ8IjVdZVcuS2NfQjJAZGl+MCFGY31IakV4fFRFJSxbRkxOZV9fMTpQSltiX3F+cSpeeVsmOFdOTTlbVyh+aWpCa1hNPk5XbV9LN1IoNWk0eTZ0TygofDpIIUlLYCpDJnNpRSp2TGA6QjFQUShQZzR5XXh9TGJzbmBqRWlzcEMhPm9Pc1c2fW8l''@;'; put 'put ''aSxiSXt0dzsyfS5ASUY1X0JlPn5RLzJ9UFt9ZCl9ZjQwUkcpSDQ+fWZNPn4rYCQqfX4qYCkqP355WzdfOT4mUGQrQWs0JDp2OX5xfH5+V3xzPUIiVyh4dGY/I1FnflRSUV84XlV1KFd4a296KHJ9aCEkbjJTWC5LbkYxK2JuPSJhKyhbRkp9MlsxLyRYRFJ6Q3lbJF9IO2lPSlZSW1deQjw4QT8p''@;'; put 'put ''RUY/fHNQYyRWeEM4cz0zN28lLkE4T3xrX2E8L2Vacls2V3VNc2dyOHskXzdCWigwaT8/Qms8IVJ6UV4jKnFNKm1+Kn12a3ZKPERmT3RWRW1TXj9GU2BgLmU4JV4jPUlHOF86WzVuSF5RRkJMaFlFWihOLD0/Xl0uOzA5dD5CV3Y6XTtIX3tTK1Z3cXJ7SUB1WzdRWWNROTZDVlY9IT8/P2g+O01K''@;'; put 'put ''Tzs3WXo7VDYmSjFzIkIqd0c7OjM9N1o/I31ON2J2PnlOdkR3RkVCdGdaXU97WEtDJldHQyZLcylCaXY0dmRuT3FxZHE3Y1p+WWkuYnI4WXtBZVksWSgxdU5IeWM1THs0PSZpQUs4b2teMmZ4djQwOmBPMiIlUXcrRmY4N3FxPXM7VCJzUDtONy9CI3N2c3NhIjtKe0R9ZyNbfmc+TTRTeX1xUF15''@;'; put 'put ''IyY8Ny8zIWElWGoodiE2LjE8R3hqTGwqUE1pZDo3Y0lyekB2Y14iSSwzY1VHRzlJayMofWVEMmdQQUF6WEFBQUE/YilEPSg1RCI8dkhERypfeks2QXV7az49S2tpU25BRGBFSz9USzIkSkFdQ008dW1DQVo/MjNKfGhuMGhlPko9bUF6WDM0Y0NUQUVFMCEqdlZ0cixYTEZSfTBmREFBcEhmRytu''@;'; put 'put ''UlFBdVZRdkRzYjlCR09PPGFlTCEzSkk2V1JqPzZSdykhKF8kb0k9SEFNe3FpdT9vP3pdSF0wWFtiK0RtRnhBaXtoMVtQXXZXXmVFYV9fKG99aTMud3BWPERAeVF+Zk8hY1s+bj4kSF5kVUteZFVfXjlWaHk+M0l4XjNiLmc/b2A/JCkuKlZ3a3F2fl03X2F5QXp5RShvR1FgLjU0L0MhVmVySEZy''@;'; put 'put ''RGAuSlE2Q2E0QzBZVUdufGVbbjdfLFJoVV8hYnxdMmB+SDhgMGRsO34kal1XUFNzV3F6QyJ+QChoNTMjNXtYInNbTz0qIix+c3dsWGIifn0jemRLOkYqSX1YeWV4I2dHUn0ra3VqOCx1Q3IibW9iPXZsdXNZKXJNXjR+WXFtQF1jZ2YreiwsTUplaWIxbmVwJlQ4aXFqWWxvNygqMEdDW0JubjBM''@;'; put 'put ''O1NAMTZ5M0lKdSFtQ05oKlJ3QFZ5ZXQ3MS53IjlyInhKdEklTS5AdDFPUzswIlBxYyldXkZIel4vPm09fU1aTmQ5YUsvViZ3Kj8vVzU6b2NtelZXQWdtezFaR3wzNXRJKU97Y3lZdkQ/bmc0RFczZ35yX1VCTGMlU20/cVdpWE81Q2A0YTEmOnNRc1J8VHYjIW52dGtde186TzZNPFRSNHl5KXJQ''@;'; put 'put ''dHgvbCtwUzRzPFdxVjxPMCwzQCN9IkdPdVNWb18xfkhmTzx9dmBWUExVekgzSG0hXVsia0hDdm1XLlM7aF1lR2F+Sn5jPDwvTTJJUDt1T1MjbS9EM1l4cjZ9bEtPQTlzSzFscyE7JkUsKiojaSImQVVPWXUkPlA9bkpHL0RnMXBZYT1HYXlnc11afip9T1c0UisyZ3RAKDFsRFhYUSR5YChxKmth''@;'; put 'put ''PVQ+V3o+QWc7cmtANl0rd1cwSUZMTGwxVCowOWBOZX1BNl8sNColRktKJnV4cXFaaSpEa1lFN0hTKndzYlkvW28vLlhXTHovLjtTWiwkcnxmcmFHUURJJjgjK2lrWXxHXUZxJVBEO0NxI0gqezdIKkFkJGdlVWdBOiRwbm56cyVJaEZHS2l7JURBeHEqUERxUURhSzd9PDNVQkopQ0M7Tz82XVFj''@;'; put 'put ''cjA9OTx0Kzs3dFRTIVpCPFo3SzZGQ3QqYXs5ZFRCZThCW2ModXMmJT4pLnYmZEVydWxdU1ZHMmNpbCRISE8pV0J6MUJYfD8+R29JJVV3RWE9WXRlRXtZVUFQMTBLMlU2ViRze2NsP3dMT3V6QlJbMi4lbShbZmBUUSIzWk5NUVFrPVE3YXtyW1FsJWdCYVlMOUVBdHNNUkQleSgrYWAyVjA8WEdD''@;'; put 'put ''a1s/NVR8YXh2ejZEX1F0ZFY3dXchK1pxKmhPey80WFZscDtEd0UuQSVUZjQ6P0pTTTB0VGh8Miw8XlkrRSRgXXcuZ2hwKy99fGVCMTRGei8mVlFnXWVUQ098N1k2X30hbH4oVFo3KUJPIiN2JmFdbkNdJXs1XWl3NEIjakR2e09yfiZmIXNiYH50Yi4pI0AqNjo0JHQqI15PSmAvRTd8PmB5SSpf''@;'; put 'put ''cjBZfCY2QSJ9d2cpfEglUG86YjpDMEJWIkdoNVEzcHdEZzUvbWRTMipWPDIsWmROM0VbbF9DIUhIXkVQXWpQOzM8cXAvbDBuLlQmLCklIXRHK1t8R1VNdF96Y1FNPmJ0NFBBTFtqQnF7VmtrRlpVP2tGcz95MSlIQWNjbihkWllxPmQ6OiE1XSx0VHh0aVRUZyZifXEqKE5dOH1MNXkrc0RYfDop''@;'; put 'put ''aE54X05vTWNKUHpwfmdFc1E0IzdqZ0FXJisoe3skUDdyXXpvfnVhREJibFtCd21fJXl5aT1EY0E3S1ZKKSkiIyVeOldvN09FMnhQS2o7eSZWPFleaDJ8T1MzWElEJUZJek0+ZXhIWEhoVFpCWSk9WXxlSjk7Mzx8OC4lfVU3c0A6TT55RFEldkRjeEk9REJCbnwsOjdwO3AoLEp3Tj5rIWUuYCtD''@;'; put 'put ''SUlRenZHbjUhcj1QSGYrW2sjPkdbeW8sZl0uXU4ydTxCUGFZSWxDY0peQT1YVkI5cztJXSt7WG07cGE1QV0sJDBiQWc8eFk2S1B+JVk1KjRkJCY0JSw/bmNLXX5GfitPMyY7Sl1iMmZOT0srMWR0ZFZ4R00sTF0wZEI3KCgqVF9vXnZILnQrS0pxQ1JuKU53bltRSkt5M3omcTo3Wm0+Y1M7cSRJ''@;'; put 'put ''MWgiKCtxZlpzSSFEVSlNU2U3TSYsbFZyUVlQNVphOT9pTztePW1aWENdRj81M0VvKykocypoNEB+T3JDQ08yTXRGeExyMzlNV1s0VzxgVnNydkB9Tz9CfFchNTVaLntyRkQ3cXVVcktaUGwqQXwreVJ1djR9UyEoaj1TaDkmOj5gLyQoZUUvUzkoMUs8JjR7ajx6XXxBcFYuUzopTjRzTXtxUTVF''@;'; put 'put ''XX5GQ11gInB6Nm5eQk9LQngofShUVlsrKHRueyMwbVRyMTVYUTB9NGVPVzJfJitoaH5lRnZILl99fldXdVl0QjI0aHkvQnM4Wy57LGNpPUdEbkdRPWFIOWdXNmg9Tm5eW0EmNDJYLktPKG93LnAmcSN+L3B1SUYwTFpocjM/TjFDMzBxZHV4cXEpeXs2QFpkfnF8cjF4YSpFLC83K1l8WFdkZ3go''@;'; put 'put ''UiNaR3dfKis7cnNCVHd9cXNJPTlpQGlQPytNV1dFVHg/MihyU1gsL0x5Vl9pLDdwbkd0PjB4bDV6R3ZpSnY+Jm1MeDUsOHQ+YEczPCgrKHJwaTN4K3dfdiZkWHxSSEhpNV5ZOzs8LFooKF0jOSMuW0lpPjlDUURfZz5Rfls5VHhXSnkoVlhpIXNjVTJbS0lPXVtecDsyN3Bna25BLmBYU0dIYG9r''@;'; put 'put ''WkQ3Y1NTZDlldD9qb2JYcyVtfFY0Xn0rQTpoPCUzX2xJK09kPWlnKWsqZFNPfko8RHVPZUpGNkxpPDJOVHF1TFooKDZmfSYpO3NPL1gsQkVPXjowNV8wTUhNSDloMChUX3JPdEpNSC5RSE48e3klXkklZzlCb1dGOjJeR0BOXmhOdH4ycUhWSlR5dylhfX0wemFffk1obWZENWhzZ3ZaMWtOVyNC''@;'; put 'put ''XVtnK3V+X3t0IUh2Y15pK3RzbHRXX1VHVEprTCJ8UklxPi9YaT5SQFdXKFBtYlhYXTR9QkJ8cll1L2lzIl5SI3BHc19dWzR4KkRKd0xLZS9VT3U+WlhyVV9TfShiXyQuN3BGNXA+SEhuU3VVImh3KXY+Xno9YSVpP31RWmQ9fUMxeD13bmBOIkByZ2xiXT1QOSxgT1FgRD5pTm9ROSxVUkc6Vk45''@;'; put 'put ''cnVUcWpCK1JdQlo8bzolaChtR2U9ZEQpd0YuOEBYQVQoPlAhU2YyZyxgT1d9PHsub2UuIUAzSWp3ZittKGd1e293P1lfbjAkLjFiWj9teiF8blZ9NFFUejp6VV4oSlttPnI8RlpTIzVfMFo7clBBUjx9XlhQa0l0Sk9RN2szeDF2ZHxlW3U+QGg4e1F5NV8rLD4xPmVxSjIqVis2dXtvMSJFPlpC''@;'; put 'put ''UiN0JiFzej1MfFFte08sPklwcyNbXW98UXZjX3hjLmtDeyZ9I1U8MntvWlhUTUhgW1VCPmpLSFJNcSRjeXdbXjkoVWNeUVZudlIySlJrTCxiTVU/LnB+R3pwczIzaDpDVV9NVWIzY2tQLGBPSmBac3dWVlMyQDNJbndMcUVkRlpdI2l+MXxVX1V6dHBXZyk/bEdtXzJWNExnT0c/MCVgKCpaRXdi''@;'; put 'put ''fithRlpyRXZ9YWo0ckkvXzleZ2paOlFWeDh+VngzeCEpNXNzIngxb15velkxc0RdW2skOWhScGxiNXljXmskLlFiIzleZXkzeHk8UVdrakx8XTU2JlptZldIZkoqRjJLeXtveSVNfF85bTNdUjUqO01gXypZL1lXM1VhUzo8YHg2LCYzSSFUXWFbcnRhXm9FQD9+TDtiOFIuN3AvPkQwRS5XeiRZ''@;'; put 'put ''ekA/fnt0cT4yb2g+bGAvaWlZNHJtN3BVQ29BRFV4Jit0IUF3Y15CTnVzLD5ZX35ubFNGUE8/LGd+citiKyZyWTh9b29jUzoyIVshdVcufHxqQnRydHB4NE5MVXY6Mk81UEgrPSgoUGY9Sj45WEpbMClVSGFWRXZ6UVZYQGlOW0l7LzNfbEJZL2ZDc1EqbjVyLD5WUHRCdSMjNyh5QUZUYlF9VVRy''@;'; put 'put ''VWMzN1NkKkttLDtdRndvNXtxcVRkIlJQalgpLEFadnIxUXY0OCpFVE50Y3oia0c5UFouUSlhKVYpO2JicS54JW5vb001M1UsX3Y6S3BDNXA+fT00dj92Yn4iS1kzZHRKNFl0WF93JTJhOXVVR0RodDB4N0pyUmxaJCU8V3V2PV9aUERsdCRNJERbS2RNeXVkY1F2XUV3VzpDPld+SjF9NnJwRiFB''@;'; put 'put ''QyhZWHxYdEIue0cmZUolYzc0V2QkcjgvPVBYNTN8TDVHYU1Zemw9eX5pVUV3QVEvY2AkWFZqVHZ3Q1lufkxYWDFkI3ksVk91NmtKKnZ6Wm1MfCFyKHZgPnJDT1E5TTFCcEx1Tl1FSnQ6Q0hybV1Yc0I3SH0/dj1yKEFGdDVGVk43JF5bKEtXbDp6K0lufDRLUSlNVkdkdj5LIjVGJEE6aUcmblUs''@;'; put 'put ''WHNCNDtSXUpGcS9XeHksREtZejtJdlEqQlZ0LGhzPn4/KW05Tl0ma3ZKPCp4VHxjMltadFM7PnZrRFswLmldcWpUdnErcyltRGdBd1c0WWZiRihJWGRTTkJZN3FTSXNIRTZuSzF8Rk5xbGo9MGJEV1VPKGRQZm9AUGZuJjQuT25Ycj4uUldkPHVEQlN9X0c6bihOKl9lTiUhbWEoP31aPk1velsq''@;'; put 'put ''c1JGQjtoSWcjclNEcExnenR8VUdZUmVNOi9wPn1We3JqWk0oS3BVXTVKTVJDbnk8OkciJkIrQkB1fGY9aD5HSTpDdC8jOl1FOUY9aE1GP1B6Pk89MG1aJltLL0w0Ul1XYCg+O1ckWyM5YmJ+UldPQCg8UlspVjM1fnEiJm0+cmErZlBbZXU5JEIuQWsrUVQoQil0UH1BZXh9Kj5KNXRCK1E9KUVS''@;'; put 'put ''IV98bGlAREg8fXJ+XXdoQT0zQm0uVlFbbnZ1eSxrRV55P3tXZnMpWjsocmUsZ2U2VU98KSlzdlRCUXxlKF9baD91WCx1QlRtYjtPMmMsK0dqOFlGKiZ5InxUeHBxWklgLjoyQWZgQm0jQy9jQksiNUYwazVfd0gmNC5PJnNmWSw1NHdPcyV1eTFmRF1RSG5jK2w0ZD0iM19oRDVyRz5HSigjQU55''@;'; put 'put ''YkpaKmpVQShpWExePjZOY0ljPSNNWiliJGNPdCFzImhHViZDMiQwVzJoOm1zLmJfV0tTWzJfJCxrMzh6cH5mTmlTRlAoRzpMcnpZa0VkKCxHJkdhS3lVdXQoKTw6MkFmJC5VdShoeGRkZ3tjL1k4Wys3THwqNG5yYy86dkJBNHwrZ1lUPm1KdlE9LEsqVXcocj4iVmh3djdCSnVvbzojR2xiWCRr''@;'; put 'put ''OWJYNCR4KS9wYTRdJj84UVo/dVdpJE1dJlpDV0taTT4vYk1rYD0kRCFtM0FBVG5EXSlrQnBMRSo2dzQ+VWFuLC8zQ348aUA9RzRyKC5hY3sjKCs7TVF9b1NGUHxPakBhM0MoMyRXXlhOeUZUSmB0OVR3VUZwT2QkaChUT1F6cDxpblFTfnlpOyZATkRWIXBvXlpLXXIkdCxDQSYme1l4UGMjWi5g''@;'; put 'put ''eSUoIz9tc35ENzN9b0tRUlg9aFdEMCIrMDVHOC5be30haEQrVF9JXTFzOHNUeExLcD4zSV1bSlhVNDooUDRuM2NUJH0jIVpfVFE/W1t2VmVaWHNnLi5jJVFJXV5sI21JQTs0dFJGTV5tWVpXWU9VX3VZVEkkSEt+eDVOcXFyQl40L3pGImtfIjMoaiJOfkJFSl0vTlBPTC9FP2pJSHRjXlREaX4u''@;'; put 'put ''X1ZfK3ksa3p6Nz95SFIoZmlBXjpaPF9mRTszPEErd20rMl5+cF1MKENaeX58Q11XQXtDcGM1PixZVEthNSU/T3opfCQiPWg8JWdZbEk/KFE9bnVsNUpHTjRaUFlFLCR1dCplS3h7b2c6aig3M1lGKUYzPGtiJXs2PTN4bGJ2c0hKNVRdLHp9QTNrdSs1XTFQQEJPdCNtMzw+MWgub1RuV3RsU1NZ''@;'; put 'put ''JF9WYWBySXRnPHJ3aj8zSUFoTnxSSXIlfV5hbl81JkIqNWRXOiR2Nyp0VVV0RiU2fkclLygrJX5TPjJeYStIXmpqM2hkWkxxTExhYVtaNXw1QFF8QTZyPCNSUUx0Yjt8akp4VVtMdz98fXU+OiIsVV1Mdz90R1UocypNNU5Ndz95SHR8IzEhPHM5JH1JdWdDLiZOUEZaeEN0KHNILFZwLzdwKGA4''@;'; put 'put ''Wl97YElRRyFkc35qUXo+b1Jhcl4ubHUrSm05VWYsaH4mQX5GNiZBI0dnbH5KbT4mWG1VVGxDKmJNPmAmUjUoN3AvRDJobEI1JCYkdC92N0hQS21Nd31yTnlAYW5UUywyXiJ7Il0vTG1+fltVX2w1UEhwMDgpJkdVfFZiTVJpLnorXXxxekoqX356RGRPfGE3MUppXXxDMCFbUUlURzBbdnxaM3oh''@;'; put 'put ''Xmc1RjJoREg2JChuKWswQXY/cUhuX1ZZWT03QXY/M0loVUZCOjI+VmMlO0dxOFRdOmJWVHx4WEJ+IjY3TCpnLHhSSHtFdH5Ybyt1PjRBTiFfKHVQR0BZbnB8JFRYcnVzJmNsPGhpVF5pUV55d35gdyZtYjJ5dW9xfjE/WkhGNXV9fXwrNT4oWHthY0hMT2hufXJlfStQblZVI24pJXFVekRjfnY2''@;'; put 'put ''RDVFckBDT0EhLiZfV2QwOWs1P1kxUShma1NuRykvOX1xUDlWdiVaUDU3czh8V19JO3I2XjdSRy8mdixmLjJ1bC5kN2RtOT9pYmlOWDBZRVc7TSlFNWdDQ1pGKWk7ajUyS1BOOCosLG1MJU1aTGcqVm9iXmlhZHZfaih6WVE8d1VfKGtdYzp1SkZvMVtGak0wPTxILmg3UkwqaU5BL3tuckYsLjpZ''@;'; put 'put ''ZDA8LG58dllyLjssb2RbKFZ4NShlV3AzMV9BNk9JPWtHXSomZ0RxNH0vMWh0XjhoJmExakVDKl96d31yOkR4anM2TmJUTEd1OG1mcigpVng0bFNASUpqdl52KD0xaGB2ZVRENFAsSkIzP2cxR3NSeSR7X2U9fjBTVG5EVUBEJCI1Ung6dTZBRl5maiM1Om9haDh4dmNlYGpSaCZDVEQlSSJJYyQ9''@;'; put 'put ''fC4rJWclNHJNZz4rUDs/P0lTc253a1FqRER6blcsbmAqbD4hUGQheXZ7e1BRWz4sdiI5JWo9UihgXnRuYVNTNU5vYEdWaEEjTFRQYihVbTV3M29XUllRMzUmc2VLMFU/R0whK05IYi9yai5JWWdiTnBjbntLRyZ0R20hYD5dK1ZPSGBHVkY/bVNnST9+dVd0Q30qP01tKT1DJEBTSD98VEI0YSwl''@;'; put 'put ''IS5FaGhbKkM9QnE0eyl6fns/Wl9HRD8pR0A0bHBgOCNxUkFAJChXZFt5KTo3SEIrfF5zJV52MUAhSl0oWykkVyowNHwuQ3lyNEIpfSl6ImxLYFgqTVM0ZWlEemo3QylHWHdeajRTKk4iXzNTNHVuekVALH49cnhFI3lyTT1WMkpCWHRTTX03eGhmeU5QIjxRWFFxdkwvP3NJODN5KTZWdTFNc19o''@;'; put 'put ''bFZ9ZDYlU1NNSSxQZ05NKmNyTFl9PUBjX29uTjBld282PzldYCw4eCl7bUYhSSYjeigpYH5rUUBuMTBXfHAzVDJbWkZCOHNieEdWYk4vWTJKbFBkNURpNUJdezRsXiZTQigmXjYqc0oqR0wqM25VXUc/YHtEej4lMndbYHpsMWcyZ2RyS0BoPi94P1V4QX14M3M3YFVmNSVzb0x4M2N9Yz06flVW''@;'; put 'put ''SCZ9T1JfOH51WHw5Vm5gMS9HXTc4bWVMSiN5enB5dkR2anZQfHthN1B8ZF48M2klbT4/PHtSajVAUVRMRnlNWkFsU25ydjBSRlspVkZacFUpYyJzTVAkTjhTcSJXKTwpSmk2Pm9beDcwNkJ+dClCKF9MX29WPT1KWiNEdkJxfDtSRiFXW31QQ1VfUSUzJUNvfnNDSzB9MHgwfCM9bVQxbSlzdExM''@;'; put 'put ''fFlSVjNtenlOdndAYGxZajU0dyEpc3M3blhfODw5JjFZK35fJDleK05SI1czaXx1anY+NVdDXnFKKF9Mc20+Qz9scjNZJX0oNHU+TjpKNW9Vd0cxck9+b1NQQkU2PU1AOSRzVXhCc1NOd2wpaDpdIW5UWCUvRmk9c3JnXnhQMi5XaCtIdUVoT31dKUp8NDpNSihfPjlmPmJBfGx+Lj1lYiwsOGxG''@;'; put 'put ''en5kdFhfPW0yb1FSM0YkPzF5VkRJUnVCVHw2SHA+cn1uJFdbSH1abjBmISZidWdzU2I0VGxuISZiZVIodW5LcXFuISZOTX5zensjMHxOYlc0Xmt4Tyh8TWZHcX4/MlkqNXxfR1FBWkxQbzY+PE5PUXV1VXU8PCErcVB1fDMxQnJqbW8oMDFVX0o9TUkkSD18KH1WX1khRFE9cXpAbklsfUw1bSR4''@;'; put 'put ''L1hPZVcvK1hJZkpKTylRO2BbXT0mQXx+bXIuNWljfF5KY04oZWFfLG9VPU0vRkhDK2F8Nk1AN1dhZkEzPmM7bS5VeXs9bDd+cy43O3MycnFeOkh8ciQvaz5yIj5+eiYjUUJMMWZCNT99T2B8NTdUUVl7SkNpMCxATmV8UE5NIlVhVGhGY0E8aT9PeSFVcXUlflM3ZT07LFFfTCVJNGZTTHxnWlhy''@;'; put 'put ''PWE5fXhHUzl+aU1ISTVGO0kmXSJYSSY0Lk9zWWYkazB4N3lnNSpHN2tfLCY9a2ZZOn1PejombVQpWlZIX35hbzJ9S0Z4LjFxTSw1aT5yczkke2gsIXN4dVVfUjp4Zz0zMz5aRTByPk1Rbix5TTQhRUcmKUsvY0JzPjJXTGNAPGQ3Wj5NPnhoc0dzNCRqXk85W1FBIitzPStDaklUWHwjTVhfRzkl''@;'; put 'put ''LiNkKT5ZcGFzcl9DXztGS2NVfDpaNnpAU25eQ0gxU3guajgrQCZlLklYNG4/VDR3W047dChtMnwuO20yb2R9NyVUSk5CWFg9c3BtYn5DIUt8Jn02R20+R1A+dT5OO3w4anE+RmlCbSlFQSJbQDQkfn1yb1dfMS8xd2xyJntGQ11yfGNrXiVFOl9kYXsmbUg1VS5YZX5wXV0mdCFaKjRDbGA3STYq''@;'; put 'put ''XUVPdiR6VV8yVmw+Y2B4K3A+a2BZcjBCMF8jdz8mJFtOZDFKc3NlcVVuIjQlTjlWX34obHN6NyRCLjVqMWo6fShSVW5Db25DdTladDQqIT5JZGlQRkA+PG5JUWBwTTdHVlhESFE0OVlMfHpVNV5TfGZCSEksSHhCYC58fSxpVl9XLGs+K191LH0mWnslI3lmbztuSS9feSVOeVA9dH5SUllfOU9a''@;'; put 'put ''VnxHdyp7NzdzMH1TX2E4UHEvWTdzeVQ0YHEwXUV7TmV1X3A8X3hhXiZHWnA6Ry9SXXc6Z3wudS4mdUZGaXhXNUQ2ZjdeLko+dXZLb0hHNzZzNXUsPjR1Y0RMNEJWTldxejdtWTQkYXwrKGNBJChITkJofGxZdj4rYjgmcntoYT0mWXZJPClZZSVZKi58SkgzZnNZNHduKDZCXUVeUUtrIkpfc2BU''@;'; put 'put ''VW4uRlVkISJCXnp5Y2ZgMjQqKnx8PUU8bVAlfX08TnxLIUcmQktRbmR3bVd0PTJUYDVYMnlHX18pbCImMyRpbXFaP35QaDhtPFUzezx3YStxfSwmLyZqQEp5QHxZQzc0fU9tKiR9K3dYX3dIfWsjKT59dmllSkBycSt0fFtbJm0zdDhuZ0VafCtSaXoxfCptTT9gOWg5RVlZLiQsa2EuTCNHTSxR''@;'; put 'put ''R3ROPCtSaW0uKHddMFhrenRDT08/VjNsblluMShaUitXI2cvUXNSLCElZ3dAcj5rb3coQkJNXS5RTi4oY2JGTEFGMHQlQVlyNWo/d0k8diFtfSJ8Q0dWTTVZLmRDIUBoeTciNnViOE81YTQkWVF+ano6Jj5qKUtyRzk4KDBLSFtwez5QayYlSUkoYkN+IXp0Pl1pPUxEI3VDfXN2TTh+Y3lxKyFH''@;'; put 'put ''Y3xeWXNnTGp6dVNxckxLcWY5dnpUJTlQc29RV11rUW94KnZUTT9zUVRDJmlFLHBaVHE1Z2thVX1dK3cjOlN0Q3QjVWRxNHcoVCZCeHU0eHdBSi56IzRVUTlMeUJEM2JZanlxPDdTLE0wRDdiLzo6V1I8alhtK2BSc3JUNnksT2l+aXRfNzBBb34/U2NbQmltLGQvRF9KbjJBbE9jZVJNazMubFdb''@;'; put 'put ''PSpnQWVifCNNPyZ4UWwzfHE+OFhZW1taK1ApK2FiTGh+QFNIJkpGNGdHJWhgOU9yPm9bOissW3Z+UW9vPmJ0JFQwRWNTOX54WjYkY14rVnVJdSh5dWtbNWdtYEpafn1KU3Q+eGR+ZFFPYC45bUB7W1VGajBwdFR9ayVYTVF1bmNRZE0vWi9SbXMxYXtycEZtdWdzfD1ORVlOUipxOX1qfXcxMVo0''@;'; put 'put ''KmV1L3Y5c2NEMFp0OEhUM0BHdjxYUmE6bz49VURUKE0lZj9AVVJ9T1lvayF1U1pge1ZgImhadFU6UWxHLnV0JT92LldNcS8xdDB8TGwiUWRyW1orUCUyYUhCNz5ZSkx8Llc8TVdxcn5dKiMqVytMRDh2elFzOEAyRGQsUjFHVmooP1NyNnVZT3dEZXMhKyxMYD1vPmhCI2RsamxhcDB9el8lWkZn''@;'; put 'put ''aTlDZj9IZ3ImLmhTVkd4MU5lOlpMdmB1PiZeTlF9UUVPdE9OREcrVVlQJHdBPDoufVR6NXRWSGI0Wy9ZLnA6VF59L10rfX1Qb3RjPzVneFRiQygqKTZ5YXRBWDtRXUovSjBCN0hAOmAwa2hJKWViNnVIVTBDSHthYjQ+N25wMG1QSWMveypFem93cXRJaGwzYzEzMWcoMTd8VEtoejZ5MCVleFp1''@;'; put 'put ''bUBHZm17Olp1I1tTNCkpUn0+KElEUnshSF1IZy4kQGB6T34kQWhwX35zVjZPZWdEcGolSSpxPU0jMUtgI0hCXTF9WkphNitmR3YiZktdLzUvSmVTVS4uV2s2SG9FdENfRHlZTTRrVylEY0VZKkJlTUV9WmtabiNuVU4lISo2cmM/KFMjMC4qZzRHLH5lK1dufHwvMTRPY0VXO0heK1AlI313YHY4''@;'; put 'put ''aEg1LFZ1LCpnKD12c1RVVW42KFsxP1p5ST85K0opaihDNjhhdF53eWFNRE1ZWDksRDZ9VDN0WjQhdj11QWBiVG8iZTRlP1ZwMzheI2pfbn4xU3U6Kz9qXWFDa1B0SU4/enJtOEhZKmlqMFFLIlYmbCo8eE9kJmdBKWcofjVELHhjZko1fEZ6RSxGWGFgNmhoO2U2VUpvXlR0PVpDbXFAd19uOUtH''@;'; put 'put ''YUM5Tjp9MH14aDE/NkQ4fFFaZ250YD0xVGNSfkpgOyZvdkdtKWt1JUJIPzJoOldGQF5iVD05czRoOjljMWpWMyFzSGtSMF9FTHxbPGUkOSRpbis2KWJpfG1KbiMyQiFYYUoxYVdlOSg3bil2VUQiRmg1RUksTldhfFtoTGxFX0xMQDwreTtfRTYxM1BKbXthciZmdCM+dWZyRyZmUFtYdjJofCgi''@;'; put 'put ''K29uP0dZbUxxOHkpZFVxYmY7Si5EKyFjQVUoPnQ1UlNDMEx3fllVbj4rNWlmQ3dZOTJ5QFdDQiVseTZgRG11W3ZzKXlFcnw3dWNmangzNG1CKXciVCJTcmBHVlp2Ki5xcUcvJlRsYlFvLkdKeiF8ITU0cnNCOk8zTC8qPH01UmFuNG5xST91QnczaGpTfSo2WWQwZVImfVhDRj5IRlFpKDFpfGVq''@;'; put 'put ''NHJkQ1pPKkI4QUxjbDB2JEZSU2ojRHl9SkNfJkl0cztOYzg8fXM+P3lmYGxLa0I6ZVQmX3QkPiw2SnR+dmZqeXRmLDxLY3VYRXNxbyZpPW9mTTtWdnQpa3ZxLG1VP1MyOn05MHJfQUhCbDBoVHZ1akhUT2l0OWU9e3YsNSNyXltmZyUoU0ZKITtIYk9IVS9dbUAsYihrXk5sPlJXRXBKZ2J+WDVZ''@;'; put 'put ''a2I/RG9KSlF6dyU4czhRQmw1cUVRZiIvLERFRz5FLmlOfnw6NSImeDZSMEJsSTV8ND0qZklxSyUhJUpGe1IiMz5JaVRqck4mKGVXTV4sVkZBYStPVGw1O2NOW0tEe2F7ZG5KZHw7QHsmRndHUiR6dz5+U1ZhYXpsN3BMITR3MypqR09EInpbNnJ9KSJ4WygxSVcmSUIkWVJ2MHd9Sn5pRy43azUx''@;'; put 'put ''Nm54IyJ6XWZESjd3PEIsXVB2KmpbdHpyYGoqKjBJZUJqWENlV3x1SXkicTFUP2RQdVdMR2RaUzw/WkkzOGVkfjMoXSRrMyN8PkkzK0hqQCYrQmk0RCxVfExCTnRbUT1+RkdVc1JHWVJmNXZBRkI3Ql4mMj9+aXw2T11qeUEhJGlOYXhjVm1uRmFheypgKnBTbitgeWJvSjJhYjZ1ajk5QlFHelhn''@;'; put 'put ''K3gwKS8/MllSanlvPCtSX2AzQmxUckQzTjRXbF1EYiY/ITRtTWlnOCJWamxiZllOMUVhbUNAfWJ7fWhBbTVfT2JlWVRDLGk7JkMzfCVvcEV2fWx+WEN4XylFWVMpVGBaTCZEOkN3SW1ERFQyYEJVQDdgSjUoVFd6XzNUZG0xRVhsZVAkdE4vZkl6eSVQa3k5fHZ1XyYiWzhGPk1yZXBQY1tjdEJE''@;'; put 'put ''SVJiYWd+OTsjUW1KVnR0P2I/ZEddfD5Je2hVRUhbXnNfJkZWIVk3YmJtekgic0MxdiRmfkQxZ1EqPiQ4fmMvSi5eJU1TckY3PWNXNzpTRlU7Qj05OW5IRVhlQGthMmV6OExLdUNHc1JpZHNQVkViRDtKIVA3R1V7cFtAMW5fRE9ndDpicys1fWl6Ll5gcnpBYCx4QSo/fXNvNW93I3osKyhONikh''@;'; put 'put ''Wnxhc3FYOUJZTHxWL05KeXVQdDRoX1ZHMjF8JjB6WiMwUmNsV2JKQ1N7R0g/SFI7TFlfJS9oJEMyPSJub1B9ekIwWEVHcWFxc3B0V25tTCgiOXRuK25XWDs6Mj5NIUJTbzwiNGx5c2d0YlVRdHZVaDZUfFtFXzY3SjVbVig/fSxWKk0ibTlQKS5+U2lgZ0hJZDNtZXNGUWlCZztRKXFsRkJvbUxh''@;'; put 'put ''bmhLVip6XSlWRS5EU1crMjAoK2xkRShIO3w9RHB0b2V5eXN+byE2JDozZ2Z5TXhrJnpoaUwkInhhU2JDdEF2NnF6Iyl4QlVoQEcjPkVpcEljQyhMKn57JDt1aDpuKCMsOzVgIXpJYDxuRUwxNChwPi8vRUhAQS4kO1E4JWg6OCwkVFQzQX5DZFpfV1guSXAvT0gkPmBRMU40cnYuSEgyL1N3MWhi''@;'; put 'put ''OS9KQCQ6ImM0VkUxcmQwMT5hQnQlV3ZYfjpHYmxCPyNNM05geDB0cl5IYUsmND5uanlGfkZyVj5PIzJ+VChrUm9pYSx5e0J1YWgkdVA5aT5aZitCVDYpImtXOitgfjJabFoyK1kyPyN0QHUibm5HP2EzVFdtfENJd35BP0BoQjwiMSh7cjo7Oy9OaXR2NGxHQF1yW0JmfHc4cXNadylIXTNyUzk0''@;'; put 'put ''ZVN+Rns7T3kuVzZ5MkxGSDpMImIhKCZ5czghSjcod0NGVipmP1AoRjczb1ZZQERvQC5zYlpeK0NWWGYkKkJPeU03OCJYWTpAM01PdVFKXktMWzFHfiZWIitSWDppeCE+cHhyTTdDSVJleCR9OFJ1PlYhWnhIRHF1bVc1a0U+e0tGanRPQCk/UXNgUEtAZE1tW3xVW1smQVhseiVabUshJE94UGdm''@;'; put 'put ''Qy9TOishaHVOTGoobGlvWkpCJUVDWERxZ1J3c2ZLTHx1aC9qbjFLak1jRFIhZSsickguPS5lTlZ+NUp0MylAQippeF1gXkReUWdKQDcpfFdTQjNkKmEwRkovfDR5M3FRaHI9eXxseHcpP01KSSRaMTZ7Ynd6JDZLOjp9U2dPVXdvZ2B5RFUvbT5CcGFIKytNQ15lakBMKUB3S3Q+QlVgN3doJiZd''@;'; put 'put ''NnpQWCVaVnZzX1gue3IqQ05yMCFUOUljYzElbj1TJGtPN3VOSWtWVW0hU1FnNVkrUkQxRSRzMm9XW2UwWi98YVRuSTUhJilMOH00KXA+ZFAiYl9PZix7TF8/Yn5AS2khPEs6aCZ+WTVSOUBhdTBgUXJOTCZaIz5DZDIseiF8Nk0vN2F5YSlwc3sxTVMqX0lQZnoqRCpnUUxwQ1Jac0BPZylBXj5s''@;'; put 'put ''YlAuX1tDOj19OCE7Jjhbbl1hbHAsVk9lfTRDcEx6VUVFKXxIQVsmbVhWTi9CR2Y4c0VpV088PnJ3OXZyRzAsb352dFduViJ4Wm1BZVZ7O2FhZ1hVUih4SHlxNXw4SmFkaDs6KFBITEhNIXkscmlUJnRrMS8qNzFdT1ouTT5dUGRZK2FRT1JPfUk5WltqVixxcnJqSVE0VU5DIllRR1ZneCp8L04q''@;'; put 'put ''Ljl5QCwhO31rVE5PUmleWG4ueDhCJT14WHw+Kl0mLDYpWiFDMXBsMWQjT3MiYjlJL1YmLyl+Pms2U1RBIU1bJF9FK3Bkd1JNLm8hNl85T0JPKH1HSlZFN0svJW1DbnhDfUB3LmpzOVpYbkBaRFR1QlIjWFlCW0d2VEQ9TWEqMHM4TDNUfVFoWmdBKkhmbkZeaHVnQ1dFXkZ0fltXWV9QL3QxUC9F''@;'; put 'put ''dEtjfDJKU1ZFdFJES3VfJWFsJnB9UEsweFk8Ij45Ml46XylOPnNle3giQWt0W0wrK3I5Uyt5UzB5Rkp7RTtIU2dMdFl4PUl1UFFkbUF1ZUlfeWFPd2VIYCgjUH4oYTJKJS4sb19EREtNRWcsKmhARlI/SnV6bmdbTjgobS4qbjtIKHN+P0pLVVlwd3tJVW5JMj1CImgmVDs5Zmw5XnFFdk5KTy47''@;'; put 'put ''MU96Pz0ueGFxUzRMWng+L09UN3FwQiFXQXozT20sXygkcjF4UGp2VCooXkpjZ2cjXWEofSJdZ0YhfHMhO1pJK0xoJHQuc0JhMihNRmtAR2NBc0RoaU46L2EhbHhpLCJ8d0tOaWs2Q0Q5czNfW1M6ImVjbiVTKTdNR3toVVJnc1lWQiF+KmRUbmtBT1daI3pLIn4kVyROaCRsZ19MfX4+b2w+MDNR''@;'; put 'put ''Zmo2Inw5NmpzPnUiRmhUTD5JQywkVUR8ZWo3YTJISWRGZFg5a2ZHNzxuW3N6eS99RWRTNjFYdEFiWXxRS0oha3BsKkFOXXZodWQsUD5CeHk0MV81R34vS2JkSHlzV1p9W0lPY0pfa0VpNSRLYkRIalg7VDpRYUgsQldJd2x+W3lMQ3UmIlRIcmA3d1h8QUtsaWpOST8yPkR9ZD0kS1N5Tk8lfGIu''@;'; put 'put ''SSg+dH5RaU5+fj4qP1ZWdDUxQW95PSRvZDcmbVBOcit1XWF6MEFJUmxZYnxfWFB2TXdzOV0jOUomYShMJnJ0b3I+JW8iS2hCXTFGLzpFOXppYGApfmN1I31ER2tCfEFYeXJ+dWZXQWJIZSw3LE57aGV8MXhJKGpDK1Ipemt4LlFid29MR09qUldlNXhVfHo1N2ZCWipoNn0sQVhPRDosYT5ZJDVs''@;'; put 'put ''QklsWV9lJWxhLGRzPk9UVTZWWik4RUxmQXlNRVpYRHU5ckRHcHl5UkoiSWxyREUlXjswJUZXQXBFQy4qVkldLG5qNCs1VzYuLCNiO0YofFo0UD8xZEFDWC87WHR4XnxEekNDRTpfMEE1QElUSW5jbVhqOjVYTTsuRDN0WTRIUCVMTE83LE0oLj9BRjRBPC8yPipmYyU1SU4pNUYuTFROeEtxMXAw''@;'; put 'put ''RnRjNHUyM19oRWVrLGhvSS5gOUNbcnwpMkwmX29mRVJUOkZ3RWN2djhtRE5oNzFVcTZpLEN9djFtIW1hbH49R14mMGo1WEgpbEtleikpfjZXdWw/PDg+fl5UTnxtViE/OURrLD9RSD9saS5ATFI7P2R+YlVYX0Q1fmxKRGllISRhPV9+JVpQfjRsOGA4UHRhflk5dHgrOUUkITZlMnUjM10pV0U4''@;'; put 'put ''SGRQay46Pk8kN3JwKjRybEdrXldGLF9yRSpyL0NeUX1+T1tKXytyfSpGJlM7ajo/QEsqNGIjOF5ISlImVFpRQEBIdFV1SVI0VCVJak4yaUx3ZmdFQU90OH5MKzh7JixAUkhbdFNMMUhhaiRbNkZSU2owRTB9N2U7Jjg1YVE4ekVpUExmUyxWK3RmRC5ba3xkNng+KU1dMTRPMkdXOz10b0Z1NWVK''@;'; put 'put ''Ry9lKFs1THF0UyZhOUIkdmtofUBaR211UCxQUGx8akNAJlQkbnolWkpJRjcmQjhaaEMsSW1uel0+MXxNS3pwUlFgTmkpIlRAQG0mP3wzYiErMDc+Tmkkey5DanxxTn4mNmIkRGhjRnZkbWNzRnFVOXxyZ0I2Rzt0RTw9fiJwUmdpTjh6Z2ZCW2p6OGlaXnFOc3o8Jno2LGhrNmkiLzlHTndFL3J2''@;'; put 'put ''a0VUZGR4SWMrR0FxNVM/UlE3dDJ3bS4sRVhYK2E4X0Z5QCZOZXUxZkRsbnhGVURkPXtKaE5Ecl0pI0E9PlF4YlgxanNdUSg5bjpKMTpeWz1NNSkxTypfOSROKSthKz9RKDZuM1RYcXthYE0/dn1se0B+d3BWKWs9ZytlXl5XJT5oaHMhWWpzNnU8TT4vblQjLnFmSU9GbH0rcix6bj57eyZiOk9d''@;'; put 'put ''bHs/Mj9oeSQvWnJ4bVpRK08iRHNbWnxyQkc1TH5MJHxOU0VgSGlFKTs/bnQ6Lk0qSUkpVzNVbD5qS3ghJH5VJWt8WDFJXUlPc310TGZHXVdZYFBhTVlOMEEiYzpuPkVNSllBInlqN3I+YnVAODNBdGdWNiQlWj81RDJIa15xJS99bUxETlY2JVEzY2Z4NGdESkx2Vyo1LzElbWszRCNiTCNqPSZC''@;'; put 'put ''XVlPOHpbbUNPKEFUa1JAMiE/fShNKSQ7PnVYTHR7QmtFL31zNShueVJMU1oydG8rWmRSWHt5IVpRTHwpdXVXP1daaiIjYHR1ZjJII0x8ekglXnZUcEp9bWdbOnY6NEt8NE50UT10TTw+ZWVkfUhBYCYpdGhMLE9PdTBzcVJWX1c2bjJUcCt9eWpCKFBDNS50L0EzaF8jWlRrW1pKaSRXfip+U1Fg''@;'; put 'put ''T05kaURhKjslcy9EaXlMOWhZXlkhMihsMGI2OGcuW0ZbKT5DaUYlWjJtei5xMCUvJFA2JClnRTZ3JUI5dWo6eyZSb2lRamcpPn1BNWdnWChwK1IsbysvNX1zakFPZWhOVHoqZyJSR2gjZlE6bikoWlduTUomdGEpKnlfOzNSTUJwPmo6YEQ1bzQhMnloQy8wO192YSE0ZDBeVStPYz80fVgsck1B''@;'; put 'put ''e0xXIU1gVyNAW1hLYG9wSCo9Sn03a35bUXE+S2lpWi9ER2lVNENNenJhNDJ4TCIvTzg1fS5WR01NKGNVUVR+Lj86Ji5bX1FwRFpSXXN3bmRaW0xbPXFxXklGMTorT2k+NVdVV19VdHdKcyFBQVojOnRFcHoufDI3azhTUlVCMnhfaWhUcVJaYjAhc3VNcy4xW0szaHQqNGRTVH0xRF5aWmI2WzpR''@;'; put 'put ''R1RjU0BBeEFgeXJCenJQaGVHQ0dfQzV5Y0l0LkhsUy5CcyZiNmJsaUczUWRDKXVyI1h8WC86USguZFVfWHpCQTRPLHwxMlJzRislWVNzZX5ZVWp5ZERrYTJgL3hyXTQxR0htZm5SRT8pdFRqR2ApJHJ1XVRATWc5WkZIKH0qfUpSOll8KE1yZ1FzZ3QoYzVBUUZ9c0BKSD8+K1lqSnchYzo7XTBE''@;'; put 'put ''Pz5ocUxNfG1IKjN+cUR+Y0daY0ROZiJlfnVlMSVwd2dtQEx8bi5WIypASXpBfj5XenRfcld3WCVzVkJwc1Q/TXFmPCRibUgqQGZBYXtMcSNfTTBWekQ0O2N7QG9KT3ltUzhFJXw7QGAma1haUnhEZ3QmfiNCVG5BQVApOD40bFk/fmVzJXhkfkw1P11AJHokY2dFZk94aWx4ZnZoSkVBLjwsaGBC''@;'; put 'put ''M0UuYUtZaWBtNjJBdkRRUXlhdFpZU0hSWkh2dmx4LkxzdXRCQUFBQUFBQnQsTE1mbkxCbkEqYz9yeGdxVHxmQyZCImBSSzZzY3JEIk0+Ilp6QFBkcXFURWAuUlJJUlsuTSxTNG0uI3Q3dl5wZHokZEBsNXhVKzF0P15lT1NxV3goM15RRHF1WjAjSilJaF5iLGA8QT4kXilPdlV4I0kjc000MzYy''@;'; put 'put ''fkUuaj84M2YmazFBeFpJN0l+cWZdbChqdyh9JWVFfEM9LzA6MVh9OCNbSVlwW21AMyplIix3fDwrMXsiMFlHI19gWyxKclJ7VyNKaj10JEtPIjxzKiFzUyVFY10le0BucjJ8P21IWCY4dX5Rcm9tb3hlajBZTmVyTj9yXzpVMEc/fFp1WUdNcXtuKjp5K1spY241aE48QFcuME8zK1dnTjhrVT5d''@;'; put 'put ''YSp1QShrVWVJWDJLaHspa3ZPPmgjdHNZTFQ5XmttbU9wcV1sJkdwPHlkXTIqSUlTPEs5eTUkNXh1fF02K342L21RK0s4PU47NHhuQDtwJUpuKHdMMmwsLituLzNSX349WSZ3W3UvUEFgQ3wuSV55UHp7JnY3fEshVSEmOlVHWjl9KChXdmFWZXAyJGVETFV7LFF9c3Nxak8oLGd3X1BmeDsmTytJ''@;'; put 'put ''Qk47UHw9OjIzb2YlLkc8Yj9GMz5zV2RnSmV0OkNqZyF0XW06cn4uRVRsUmJwMS5Bfi4odCYjLl0qTXlPQGQ1RWNdLGJ8WlJUc04qejJkUFdCa2l+STZVcyhxbkFAS1I2dXRZSXBrcVhUbVUjREt6XXFCbEo/WEVXWGMvYFFFTVhuSl1YKnRUZV1lci51QCsmPnB8K0cyVkl+WEB8e0htd0J5SSQx''@;'; put 'put ''PCQyLF98bUBpRU1wNkg+Vml2WSwzMDFHOC9Mb3JGODtaaT5zWlQ5MmQqNkJvNV5USCFGYiJGd0ZWJUxAazhKb0UxTTFlSiNNUnV7RDA7XjZkNUg5bncvfU9PaDVBPG5fNmlkXVVYaTMpWSVoU2pAUH4hNFUhRkRgIztdXyxGWFU7PXxANDN+eDt2cSo7PmUhO3x4KU5uKnU6cmw9QnF4T2pyRy9u''@;'; put 'put ''ckApa1YmSz8wbzhjKixufn09YDVxVWheeVBBRnIsRVV4Yz09Vnt4c2piTW1GMDdZV3pmJnhtci4kSjdQKV4/Vi9iU3sma1JYSzRvOmQ2XktXfi9dM3Y9ITplJUxMa2VrUEFGOVskeD5kU01HWSE2Im5XSDFlP2pEPG9zanA6PjFbO2Fte1dfIWEyXj12MFJRfndqQSlzZi9uIy9oQ0FPUFlXOD9t''@;'; put 'put ''b01AUFJnRllfVWliP2RmVWQ5cyNMPzAhSS9UPlorTGo/K0JRUmFTS2M5ZlF9JkIxNGhIYjwqa30zKDN5O2U3PVMjQnlsQmxrXi5CYUtVRmZtQFRaJXRpW3p+M3xuLjNlMkkrOVsjP3wpVUpSOH55RnhEe0plbjY0L2U+KSZCQFtieVJeZFtMVGVXI1JaeSRHJlAsL1hoV1M5d1Y0UT1Jfl0jQH1J''@;'; put 'put ''K0V1WFpwVEB+bkQ6WnFHZS58aWxfaklkeW83IzY/d3VRZEJFJSEoZHtzem49T1F8cUBSd0hUUH53NW5mKU45YSNaW1F8Om1DbSR1TC5qJHF6UTk1c0pAVzMhQHZ9QkFZaSg2MnxLZVZuUXIie3B1Q2B5fWtLPV5jfl9dNGM1XX43T0w8MjliUGArb1JAZyIrWFFtWz1tfT1LOGZkKDd6MDp0fVVe''@;'; put 'put ''dmtMPTFzcHBALGhUQHBaVUgsJWd8W1UsZEVFKkxRYXs9R3cjSyxZYHFgT3l7MlhsPT8rI2BhWnNSeW06UkxiUTRgKjpeYlBkZk1QZCJySD9zflomJj1waW5fYjZxZERYYUxRW247LmFufGBQYzh4VDBodkJETkQlK2JhOVRVSztBMXRbYDh+YlUlZFNsNF1kP3NLd3NWWSQuWUwmb0l0T1kpfjB4''@;'; put 'put ''dDc3fCZWfn1oTyQ6Tn51ZyRSb35bNTYyJXJbKHVWN34/NEhLOTR9cks0OGZZOzl2Z0hnJm9OITF5Q2BhfFQ2Nip7ZnNsM2JaaH1dWEZDKVsjPF5XRjdOZStxMlRycFJPQH1EImd6XWNyP3Q0aWY2ZFZUPTAmOyVlLlE+T3wofig+cFdMWFdEY2ttW051PV42RjopZVNAM1kvbmtETC9yeEd5eEN2''@;'; put 'put ''aFYkOUUyPyZSJnMreC5IYEA9MVYpQkNrODJHZl5iYnp8I1pRPHt6OWlsNEBCdURad2owREM5Qn16VSQzfSR1ajMpVSZ8Mk8keVs+JEFOJUs4JiVwJEcwSjFFeDFaWXl8fn1HI25KcltTSmI1c0QpRzxOZDspTThAemxWV0xKV3wlWiZpcXhCdSZ7WzRmUTFzW0lNXiIwbjJSSzd+LmlyQi9PPll3''@;'; put 'put ''PyxeNFg6R1dBNWBqQiZIKDd2PXokP31tI10+WjJacDJVLnJ0PT9VRE1TUFRXYCNqRiVWQjNRWzRWPUpaUXlKP01MQ3RyflQ2b2NDV188P0YoR1t9TlNPe3pEVF5MdkQ8T1pDOHZKJW1bQDNnRCx2NDBGTytqfFZtXUouPjtJdHxPdj10eVFUUG5dVClKa3pCR2cuJGEmKFFbfm5fWDIqaG05Miw/''@;'; put 'put ''KlFOVCVZTjx7KWpPPmVjY20ya307O2pid35OYEFfQiF6XUZyX3JhVXNLZXM4Qy5RYXRbR25yZXdYa1tdUCl0O25TQVZmfSZUcWhAJkxhZjs3Uj88QkBJPHN0bEB5X2lWJkZQZyo9R2xgZ3AvI1lrV3B4blVwLHJiSnw+bGs8cmx+SyMhWTtwTipkTU5icHsoQixwfXdON3c3e0pFdV5Mbns0Zzp5''@;'; put 'put ''KjNabV9valF7I35uQGhVbFZifDFRPl5vOVt4XSU9SV9HMT18K0pdMjhYK2RkU2hoe103I2dwSDlnMT9hVkU7RTJpcnZrajNLKF9+cFtqMWhUNUBYZmA9M21pJSM2SzR8en0lUE9PVHtFdCRNdWFpSC5zcEd3fTpXSj48YGphfTdlfSQ7KmNeXmlmZ1ZsbFRCUSJUUypKXT5VOGsmRDl8NWt3c31m''@;'; put 'put ''eDZ6QFFseHFrIiFhNGB+QClES2UvVF1VfXJ6Vyg9dXAwJWEuWUYxLDpmQyZPP1tYMX0+KGp2Q2U/MSkqKW9FREosbFBuPXY8bCxzZnM1Yn5zSTp8dGdpVFZ7Wjk8XndoIWFoPTdRaTVUV2xPVjkpNGBTR35aJXdycn1Ce2poTVUpZEl5JTwhPWM+cVRPfmxOKCY+NFMhO1Q8JHhFKm4vYUIiNmZh''@;'; put 'put ''PG9wfUVlZilWJkBpUixVQ3Q9XSg7NjA/S2ouNWBLJHI8X0dySitQVkBiJkJQOzojJllTVy5+fV9zcE1TejJmcGtRQ1NfdGBiRV1VU2QpbG5oSk1ETGA9OHt8cmkjQFI9cz9CaXsycG9McFhgWHtQQUY3ZDg9eXZOMU9VYT95MEJaaTIicyNkSUQwe2gjcnFHNEwxM2B7eF0kUDpVPygjV34oI2Rm''@;'; put 'put ''WiNbXUF5Xy5NTSVzJUFefkx4XzJ6c2xUTnpiMitjbEAsWX5mdE0iZEcjKy9MUnMoNEVBVkM0LHZYYWZ1RX0ldTJnYTNLfSpWJW4xQnhxLnJDT3UsbGkhK1RsS3Z4fDl+R2Z0cX08JT5aJkNJUH0vVG5xdDB7TkE/NG07VD81Mj1icFcocGtgJFZ5UiF3UExaWX4/VFc0R28yY085ZCVPKExeOExW''@;'; put 'put ''amlaSjZdTl4kXUIhNFApUnw8WURyRHFoNiZwcSosSTJ+KlIoWyhQPVM7Szh7WXpsZzV+W29Tb3F0eGNJaWkyRDI9OXxKVz5tWixPeD4pb0MvR3I5VE0wRUU9V1k/VFtAbFRAPT4lYm5xbyV5ZXlSK3FNOnkuUkIwMDIpRV02P3pSd059JSg6TiE9ekM6MHlJNURAeEgkZUlvdEtDT001VXlnZiIj''@;'; put 'put ''R3ExK2IrW35TcWJfJGRFbSx8bzJ8cHsjdkEhN2EpMzpuO18qMlFaZ3hZX1VXYnp4fEdiITgjXm4zdzBGSXxNSmNGY2FfZn0lM04oTyE8Xk1JXyNaZn1NaktofkQiZzw2cCY/aHFyW25QTEZ5On1jXXJoKGQvQHhydGdfelNQejxsOHF9VWhSS0QhP3l4JFs9ZGp4RkkzbSMqXlM7bnpmISEzMkc7''@;'; put 'put ''MEUvUUYwUm9uKFNyP0RUaXNIeS93NHZdTEtjeDJdcHs+KV1YREw6WyVMLDZQMXNLS2RHUGBwMiZFIXN2MFEheWQ6WV8kfHs6R1E0M204L1JWUFpQPTdoPjpyZ1d3b3pDQyNLeDhfVEglNHE2Iz1xeW9CYStyMzg6bjM8VylPakpzXlZkNllqT3RVbDNJK1UoMipVJX4qWCpwNSl4MWxWZjchPFM4''@;'; put 'put ''MGVNKz5gSUQkVEVpRTFXPW12TEpjfXRrKHplZiEuXW0+Iz5QWD9jRG95azhIWlIqQTA8W1NJb2lVKEBBPVBOS18iPkRhWD05VVpPZ11mSFtEY3g2VlpZLmtaOTNCWHtLfmBZcllsIW0/STJXZVBRdH02eSpmWllGMXAlcCooLnh5ciFRUUhYQzhBcHZBRHVLTS9lODdibn1SeyZCcW0qQklFXlRj''@;'; put 'put ''dHhScC9iNz5ofnEyRGI7VSVJfHZ+QGxwOCxDI3w7P1ApQXQ4fjl+bUxCRmwoQUw6XUEiekovUykwWyFUfjAiQntzcVBSOzFNPHxJZzR7NCUuYnB5Y1JMN3RTe25wa2k2UitSbkxfO2dPfHF9UnFKS2pNTHVLMX5hU3RbYUxGQi5SVz41WklCbjgofDN0e249ZmRFPS5RZUx8eiRrKU5FSXImNGlu''@;'; put 'put ''SWdSSCN1ZEJ3RGJeL25bXVd9Viw+MXFxZlJsNE07eW98cktGTGZtVGBiWGwxQUcvI2h6S21vMzZeWDJaYD5bUWhrelJDcStka10rey9kQldvWV9NWVpPVDwoQSV4JnVPXjskdHU9USUpc3J5Xn1NLzFEektAO0RyeXQsPj1qfC89Z0hWOTV2K0Mqdzo8KTcmZExgSkN0b0hSWXJxMVtuQzdRaHtT''@;'; put 'put ''TTJvbl9HYFlXYEVBOE9+WnNlX0V5R2hicWg3RUJXRS59LlZjfiNeaDN8a0w6cDRZOUswO2gkJGklPjl7VHVfMWd1Jk5CRSw9JDdBQXFIQjxkYks5VFE5S09VVDh+VnFsM2ooeUd3V2tfUFd6YmgqTCYlVmdEPFQrPiVXMnVnWU9dN09yZ3JPQX0hbHtyYj9td3BNRlJdTDlEWyhBREJ0VCE9QG9h''@;'; put 'put ''eDF5O3NLJnlTVTo9OnpjQyUjU2JSNi9mL1dbVls5IUxLK1RYYnlwWT95cCpdaWsucDVDWWUiO20xJDh6TTska28uXkNGPHNTRjNzbFJhKVJPK315SUlOPml5MFdMVHZGKitSKEc1dSRZb1FAPDspSzh0RG9NeDp8KGMoYUl4XSRRYzVNXSNSXjNlQk5CWWtkUzI/IyFXZDcmQiNefWs/SEMkWXNr''@;'; put 'put ''SjhFa3Q9VyFTSDRRQEx3YXE5SVMpSm1nbGc4cWp4a0dWO1VTYFAqdTN5M05oUl1vcFosV0J3P1o0Tk1AaXZ1dyRWMGxwIzh1cVRLKFRTP3JhW1NyXjxESU8mcjJ7cWVRKkkiPjRZOVVyaChfXW1+Ozk2fH0odUBeRSJ6MWVeYnc6NlZjJEIkTG1oPF1ZcnZrXSU6TnRnZ3YqXXc7SCxNXmRoUkZ7''@;'; put 'put ''MERWZldLbyFbVjcqU3dNLl8mTnFGMEtRIykycUJzMUteXVouaXZ0ezYkLHtJR0NASXJddUJ7XmAoak5kfVtqKz4kSkdkUmgxJGlwUCs+YSw6OFFOOy90cXBNbzhAUXp6K3tXOCN7LitdOTJ6fiYrO0Q7ZHE4P1FbXSRzOV9iSig1Yzs8N3BNLG44Q2hhNX1AaVk7TU56PiEoVV9raFsqKDIxYTdd''@;'; put 'put ''cCRKcVRxWFNbbTp7Vk1PSSN7YmN5YntvVipuVC43NEMzJEZrRWMlWkNvW2ooZFFxczdnVSlRW0xKWjNqQHhmUCNoRXIkPzh5bSN6USRlQmptSEV1PC42d20lSGUuSElYVGNScG1hTUdfaSYqM3MhV1hdWUJbOjViJnV+KkpIYTNSJShSJnJOLm5NWis0fSRbMj0rQ3BPXi96KyVbenthITB9Rzkk''@;'; put 'put ''YDFWYHl5OE1ZRiE5PHc6NmVNeX1KemFkXk03cXErdXhkIlUkNG5KWV1fWlZ3MX5GTEdbTFtjTkJ5Om5TKj57bjohISlBS3grfDE0cXwrIyhYPjQ4SCg0dWJTcl85Li9uMDU1ZHB2bl0zZzZ2JlptQ0VsSU1ReHFqJU4uQkhGc2UwOyx0SD8hbyE7ZztZTS8pK1ZefW9IbD4lYHhCb3wsNCtfITA+''@;'; put 'put ''WCVidFhILGwvRH5Vdkh5cT5AKShLZ2wsbFM1aF11eTg0fDN7TUQuRmpvanZnWyUkWTQ4L1VBMm5+PTBfMixEfV92Oj5nc2BEOFJlP1szMyNKT1NmTWR7R3NMVDhoTE1OKzZhIzZwWmc3SWtSXylSbHBzXyNUfT5yOmdzbDRpXyxKSGFJVGVCNyNrOGNzX0VOKnk2dHpoSUtNM3QsPUtXSUgxSjZv''@;'; put 'put ''Y0I2ZStRakV2NUE8VD5UMW1ybjFwX3hyT2pFVi9lIzhPI3RRK0BuIjVdXS8lPnImbkdFU1VoZ1VUVX1PZyMjWzd2Y3g2ISNteShncjIxaUh3LnRVe1luSGV2aTAzIjdScGFCcDkxJjo/KlJTb3J6OUgsVCxkNStZIWBqO19QO1IzXVBqWmBbemB0NS9YPnhHYGRlV145MEAiQn1bfDMuOzlJaFNt''@;'; put 'put ''SXYqL3xTVTVINkNiQDVuKzIqNH5LPSFCbTlrJTlaK0hqeXE0RHc7KGZjVFZjbW84V1ZqKHM0Ki9gWT9ob0s+TUZFK3wldFY4KUYreUVyT2AkRiJ9Yll0Im4oKEEzU3JxPXcrP3lNPVFLZUkvcFBtOm8sJFtFNW5HPXI0an0+U0xNZVQ9fWxxWnhPYDB8WE4keFltQGRvUVZXYy8vbytVaEgsaG4o''@;'; put 'put ''I1c1IyM8a0c9XjJ+c1VoZTtfMXdLWz80IUkwaVFmZmw3JWM1UDZgI2BKQyZBeSZUXnBVTGt0U1ksRFhVMW4/dmpLdFB3KyE+aVtFe0xIYip0KChhaT0wTWFoM1EwJns+a1FYaS4+bzsjbTUlJSRxNS4wQXlvfnY2LzV9cnBSTzQ+MzFzQSQ9XUF1Y2FrVDNtMTIoRVI2b1QuZVByXjtqRE1OL0Vo''@;'; put 'put ''WW5eSCs5Q2ZEQUlzWiN8NSU+XysxUVMrc01SWUw9M3daPTJvZkxnRVErNFtLZytMdlouRF53cTpYRCh3ZjQydFFnODA1WGlYQjdPaSwqWn1wM35ZK2Q6JWNnLjp1OipAVSI9RmMwQUlqYkk6THRye1JCJD0mbTReb2FVUWNnSz5rfj9YKHpjbz16cmJGYEgxWTgyfCVrRnEkTWNxO11nfE0lP3g0''@;'; put 'put ''cTVPVC8zcy57TXU9X0d0aEBgJSlKMlIjTD5jam53d0d5JEcsVCZiM2xDWmEpalNTPkkjUSVyRkpuRHBYJWYyc0EiWTI1LC5fVUdvdkR9YzBhXzs4TlhdeVJzPjZZfEhNfGp+V2xwLGpsczc6eVI7MH5IYjFdI1trPlR2PmhafFs+Okd1UD1iPls3eHcuKTUldiFtOXwqKCFURTBGY103Xks/T2wz''@;'; put 'put ''VGVEUiRJanMhaDhscmVQPlFQVmNNPTIvLyMrPjBlcm1AWXlaO05vZilLYGwlaG9ZdjhpcGh4TyQoN3R+JV0qam4zXnRnTEtYIXxMY1JXVUw8ezVaUUE4O14zW1h5U2ZlJCNqYStwSyxDLldyUz5jOTd6MnovMWs6M2ZhSn0pL2AmJT5EZyhfV1lYYlVXUip7STcvJSZZTk9wIkVyfipoYzMoVzt6''@;'; put 'put ''cGc+djFibWZAQE03dzNVI3t9NS4ucXVwfmlab3EsMEQ/ZXNTQV94WXIueyVgVGcpYnM4JlU/aSohW0lMPntFcnxgdCYvME1XX3xbe3s3ZmdFSEB3dVU/XnVmQmtpUms+T2x8Uis9c1koUT9YfEQxKmdiW1h3UnIhLDl0Ik8rT20vU19FQ3BpI1MoXj5Xe0U7V1s3Xyg+fGpoL3IhY3ZuYERdQHYl''@;'; put 'put ''clteSjFjLDQ0Ul0xPU1hcH1NQ10oIW0/cEpfLml+JXooKSwzJj5WbWQuKF0yKmt2TG9QaUYxMCthYzYwO3ZoZ2M+LDpIRjhCIm93K09fdiVdZnw2djN0JmRkYztkdmg0ZCRfa2g2S1M6aipwUzNIRFZtV3VjSG8/KiI+KVtTdFZnKDRXRE5zZVpxalg1ams5ZUohcCVDeXkvMi9PWVFWMUdIaXdo''@;'; put 'put ''XUdrL3p2U3E6bShbeS4oNGZVclMjNjJLeSVIW2k2M3MzZXJySTNgcHJRR3A5dyhaXjxaUkdwTz1XOnlSLCtJRWczOzFuKjlRLFhlc0p5SyZnTX4lQ005ODo2fCZ0c3w0OG0qZFZnXjhOJltZelEqWl93WU5kPVRbWyxSSkY7SXxIZHd3X2A+NkchXjBEa2ElST1KRCJ2aj9Ge29UZG4oVDsucEZs''@;'; put 'put ''dS5DRXxjMHxeYCl1W2BIJH0oYlZDN2xUZHpEUj1pPS5ZZz52Z0wvQVMvMUU1SkttdktianAwJEk5ZlZrXnNlZUtkM0dSMEYwe0ZeIkdLRyZrWkFtemR3cW9Ual1GanksMF5wQihVST0+P2tDW1owYTIoYH1bNjRqZ0EzcnAwY0M0fnx5U3MhJC5nIXY1YCEmM2lRQFRbeHRafnAkWlVIVE93TGxS''@;'; put 'put ''Y2RVTjk6SUA/Sl91ekg1cVBpM1BBVkssQ18kezEsKjJzVUxkY2ozeG4oUXkkU11nTHhpS2dLPGZmOjZfOUxFZVdxOV87VSxbe19sLlpmOTxabEdaUX5YfFE6enUlZC9uPCgmS3szYVl5SkhvYitJTjk/NEZ9cU1DRz9NeT9gSUFrRCRLbHtUJFAhVSxBaT1wcXQmXjJIaEU1V1pVXjQpRG5mbC90''@;'; put 'put ''YD44IzVdJlMma1B1PGNdcjk+WEVJQUh0R3dUMlp1fnUpNUh5Qm5UMl5DSHZZdm98Nis6LG0jLDs9Uz4jKFspYG1SRjhZRn5ONSUvWzw7X0UlVHVDfCUxYlVlaDJkc3p6Q3UpQjZtYVlOQnZgNXclJCh3SHMxME1gJCkpMTxqMV00PD9ncVQ9TVh2PlhDaHlYQCg7Xnk8bkt3P05rIVtFfExXQiF6''@;'; put 'put ''QyZ+L0tOOFJLUmB9L2lyT1pPbFE8eTxNbEs8LlBYfUw0RzlAIiguclUxYkVRQnozWWFOKyQrWU1TPCRrJD9IREtlUX4qVnBJS1gqRjA7RHVPdXZHUVEzLFJkXVQyM1ljPENfOyg9MntiRWk+dyF0MCZPRWZ6XU5Cfi8wL3soKDozOTpJR2gleVU6LkopJWc0PSk6XWsuNmlDfDJzdWRde1U4QW0v''@;'; put 'put ''Zn01Tmc7N0Z9JHF3aEx4MDRkcnMrM3JreztgckhVTXh0eWJ6YHEve3RnZ312QHc6byksPGkmcXBJMjNGPCFpbzk/PE9FM01NdEM1YGJNX0MxL1NyTC9NOVpxL2dzUmomNEUqUHQsfmI9JXE8YV12NTc0fXYjIlljcXIocUdQJCxzcUxiPiJmT3U7Y0kjSFhyOHdne3FXdXZGbkgwfnFeWSMlRGRb''@;'; put 'put ''Zmgsd34pdm9mWTZHSyE6bVR4QjJTeSF3Yy9vTlFERikvN3Z7LG5YLn4zbyVfWHxTdnNUZGVOeCZSfmhXPEdbRXJdXmtsVzV2b0pFTyFRck11aihgMn1temlNPG5MVDx9ZjhHKEhzTXkuJHh7RXpLdVtgLlVDbHx6U2t7fHMkKklHeEY5bWRbRzZNXWslW20qeGcwPSZ2Nz5NODV1TnFHb31pUn52''@;'; put 'put ''M2FQQildWlVMeTFyU2p1e2JdTn5fUVg2Z35qVyMlPiJsfUVIcndyNXF2cjUwOmJuXTowSCgiNmBsK3dHLGw6e3pwUH08Mzk8MlJHYntoVi9uIXs9NDklJC5kPSRVYFRoSXt8KzdVSGEuJUE1XmRkJWJuezlPNzhWZnVOelRGY1JOITRWQFI0NHhHMmRdVTA/SWM8Zyg2KXQufG5OS142QyxObmYy''@;'; put 'put ''WGUvPzxSVjJ9ckM6TSlSTT5Fd0VhQl9XYGVja25NPG9CTVImUHZkbGBkKTNYTDhmbXk2IXIiVVkpNTh8Ql8pUXBgJiQhZWYse0ZbQ28wcHUkWm92SjZJKypWfXNsLCp4bUM5M0J1KzleN2YjMSQrXl4pYjdqV058JklTWk5UYHxLTGdLYzl5LGNTYkZXVCQ6KzdkWnhqIzVlM2YyKkMoc2MoUXQs''@;'; put 'put ''TjFNI2svJFAwY3EkI3NkMjZ+aj9HZihMQ0RScD1UYCNXQD5FXXIqRExEOzdbR1drTVdsS0xvOVNpUVtpZU5yLntXK2o8NG9FJWAyLiFSPTNoZUdJIkxPTmd+OiIoYXJpcFVvNWUiNUNjUUdXY2osVio0aT1HJlJ2ekc1QCo+ZGAqWTNKUUQ9VWQrRUR1PEQqe048ckhfJEFkM1l9V2dNMl4+QmNE''@;'; put 'put ''QW1LbGNvLCxJWzEoTUhldzpJZko6WE0la3o3e1dkVkU6c0BXcGJ+USEvWSYqdHtrQTNJPEAsUTFjYH1EJkM9ZmBDVmdGa3VgSmYvKFQpW1pTRik1KyJ7Inp+UHhscUQrY0dMcGtOLzplczd8WVhqbkprTDR7SStqKz9oST0mc29GRyFZXVQjNzljWyMsdWZRTGVucyQ2cHVJX0BSYkdxOCQ0WVRE''@;'; put 'put ''b3h4fCFiMlNAUzRbIn0zMHs4OmNNWnJ9NHh0Y3RIR2AyUTdnQnxjc0h3YEVLP2syMV1FZm1qfWtiVzd5LCVsazR2NSIubVRUWDVLVz8zfERQIThNKVtFKl17dT5zfShsOSN4PT1zTlBmZW1PSWYsO2FkPHdDcGkiN05NSStzKHsuLyN5T0J8QWZuaVZsU1preTY8R05gXnRETkgsUiFIYl1ocndO''@;'; put 'put ''R1hMaCFkRGc2NlVBKC5MLyhLOCRBdUxRfnJYNWAhezdqVCojdilwOHQxPDxSXy5YYnNkaS9UZWhxZXFbTiZnTiVidXpVRn05OnoqQj0yUU1bYTtFZDlCWXtpe2V2STghblpTUH15X2hSdiEpdlFnWytbYSR0TkQrSiE6dT9oSVdrPVUpbEJrcT4vRWZzd2ErRkBAemR1TC9FJG05QztJOjNKe0hH''@;'; put 'put ''JDN3dGU8cHJAazhTbW18S284OWtjIm0xZl42XVFzJSZHZ2sje2QuNSVSOmhgeyhgOTUyUSREUT8vYmY3MVA9YEclL19CXkxGYWY3Wyx7UHwqSUcuRiU8bXBzIiYieTNfciFdNk1CaCFwQV9dQ31QX1gpLEV6Wn5tUT8jbC5lNGlZJip5NmhoQyQ4YUU9SXRQLj87MTQ3W2hBRUwuNWhwSz9AU3JE''@;'; put 'put ''NyFwSCtjZWw6PSgsaCFfUXl6eHZeLCN9e0J6QHRtO21zSDF0az5qc0wzeihjYiJTRz5wbmcmfnFtOEhWXUslX2J1SGtMXSpERyxTWDZVTVY7Y0RgQEZybH1pMXAuRF1JPkNmb2QzbktGZkJlTTBlS3RVYyp7e0BfLHBeUHB8aWdKUldgLHR7WiRbQykwRjFaW3g1XTRNeFsmL0M5eXlNd2daaSJV''@;'; put 'put ''K2w7T1NmMURpeDxZeTsjZFtaYkchL0x1V3pSeDIifGpyZ3MsL3BqLlpoPGVpZy4wMmM/Qjt0QllOZ180QTU5R3EjTHBvPEtJRVNjV087UXchNUtRWGIwaHdxPCh2d0BWMD0zbShdOVR5XTJNK2U8PWh1PUByXzI1RjYqIipEVm5CY2wiQ3IlWj9ZQ2pIM31qQzE2fk8oLmBAT2ZIWVFnRSZGPDYq''@;'; put 'put ''RzBmaGl7d2xXLmV4WHZ1ZC48eUhLVSw9N1M2Y3llZERWR3hoS2tqVWYlT1dyOChac3gyWjYhL2wiJFIzT3x0UysvXUYmVDpHO0FHWSN6emFweSptcCtuWnZQazwyZ1Y9eWl6VTdeeSksVTt+SWZOekM1W3t4bWUjcyNGTGl1PnAze0JrU0NpVW4zRS5JaW4zKXldMTlbSW4hfiZ6Q1V0VyxzWDFU''@;'; put 'put ''dnw+KDtxJlNZeVc0PSlVJiU5T2JFeGUjcmpaWHYwdzNMZl85Mj1gQjdDSl9BblQkcnl6W0cvc0JaUH1gKWV4PWtCPmh3XykwRzZ7MGZgJkIidkhhXzQwb19mRXhNYkBXazMjQWJ1Py5xYGIvdW0wb3R1PHUvZFZ+Iz05XWw8TFBgSU5wKnMudzo9Wn0rNEAiQ01ZSlIjeUErdyQ/dERTPjdRYG5K''@;'; put 'put ''MG08cE96SUFbRDRbbUZELzU7dnQpRlJhYUZIP0JkbmlqOSVNVDkmMlMjK09NX0REM3F1KU0+Q3QvIXUwI349Tkc/eWlnay8zTloiUFM6NlBGdSVObGRQLzBCNmZzUHY+QEZPYSRQanV+VHdyW1hNKX5aeWwvaSIqNnM3IWdoYmE9MDlLNnA/PXp2cG5KZ11pRCl7cCtRIl5rK1YwWSFBa1ohdmgo''@;'; put 'put ''M1A/PU4rfXpeYTBBRyhRVFFYZndDRncmYnozaio6P10hdCNpUXN3RTFyXmkpUW4/dmRPSXJWInohfmh0fGZUKzFeMjZRSTB5a1F+dFc2ME1IMW9zYTpGQlkuVXkpSmshRHtTKmtmQ0c9XjZZclZnOXx6QkZdZkYqRVY9UClNX207NH55Q24yNjVYVmJgP0g7dDZqcVE0djI0PEood1g8en5ffS89''@;'; put 'put ''cG5HO1ZkdkNaTGl9VzE5RU08eSFMJFU8JGhuIVQyalJWeks2UyE2M3AuZUBFRGhTMmJkKlFdeSs4fl16WFM0MSQkL341K2AuaFlEb1ZycjNZM3IvUVt0UzdhJktPT0NyYVcqbDxCXlIlSy9CYTQ8O3cyRDJQKnh2cDlRS2NEM0ZSP3RrKjpCZD1bYCxOXz5xfFRZZyZLa2JgKz5YeDtAaHZ6eztx''@;'; put 'put ''JEo5KTdkWHQqRGpOb0lLI2FSWEpvdVpYZUxiWi47KTsiPHJvbWEwbiNHYnVZeXRTa2hRd3BQUUcvPHUsbCplYVlHR10+bV1mKiM1STh7eFN7b2EhZHhPL2lKI2Vld3JRVF9nQGpSW29jIjFZVzhmaElfT3AxbHJ5blEqbmZgTFp2QFE7ZUltInpDS3FtaTZ6TF9ELGZGbW5GR3tuLD9xeXBidG8r''@;'; put 'put ''RHFbLFlRTTdHbnR1emE7MUUoU3RuOyQqampreFs1XWQ4TSxXWkZqc0IhY0xsWUYsdUZNfi9rKGc2fX1NOHlsP3hKeVhvbVIjdE1Wcy5WZlAqcVMoXSF6YHVedSNAWkw1JDRpdjZgQ0Y/ImgsVVpFfFF7RFRyTkVSa0UzM2BmPCwsRVM9NUkhQFA4ISExbTE6VDYkZV1KKmBETiheUCVWP31QKyJW''@;'; put 'put ''dnRMWEZCSyJlVjZlIzVOUmRzKShQUGs6eHp7S3pObz8sLyEka1MwYDgyZmxCUWAqN3FtSnRqUSJaPTpJeTR9cmI+KVh8ZU9wZ1piP0RFKnJJdTMhdyZ9JE0uZ25ZMlhfP3M8M31ANEB7RHdNI1EkZThJVFI0cTkqQitwTXNPJV8zNk1rJjEvO2FVJTw8SSN3YTNkXiZjPE5UVTleZzZMR25rWl0v''@;'; put 'put ''cDtAVSFEQTtEdCExPGVeM20qZnE3Vi9Ka1ZCamtjY0xOMF5rdGtvKCZrVkVyelV2R0tZPDMjaDFhJWdwKWtfYV5pIl50cEV8TnJmLmFdPEckaUJGOz12V18ucy4rekBLRUxRaiheN2ZuLDRkTGB+bjBibyNObTIre2QwO1dTTl0jV2J3L0xvV2d6L3J+LFJMSj0wYTc7NTA1UHVeLC85eCV+SHVH''@;'; put 'put ''Wm85YypNYyszV19ab01Zdng7JUs3WW90a0Quc3hVPSE0cVlLUkQxUFovOShPcX5vMGMsJTApfGpaS2RtTSV0I2x3N3xQTlp6UXo1JG5yT3NkKkRWO2ozanJhRzYkd0FAOzt1Py58JC5GNC5oV2R9PUd6c24wfS5wUX1lXl02K1MoM3pISzYrbSQqXUtwd2dLMXphK0A2blhFPG84QmJaR0J7Kmhy''@;'; put 'put ''QnojeiIrZXQvcllefUxVW2chPjBXPmAqdTRkfHJraE00byE4NnFPJXMrTXJnOCh9cFZ0KyVkMj5IbE1fczxAZmZvSmttLFJVTDNgSjIwWWNzaTBzRVVTfHsvbVV7S0tlRCNgd20+QTt0UGNEZytZYSJockZYV0R3eFR2cz4rZj98c1Z3UFtGU3NIYEN5dUJEbzpWeFI4VGRGJEkobU8jWzdRJjM6''@;'; put 'put ''MVJsN1EiT3tZOC9KWnc8ZitkXSleKndaV3lWRlddVFNLSjcxUiIwYz1HR1B9K1IwNkVXU0drQ058PFFGOGM2cUp8JGB6WncsZUxLPU9Jez0vb0hJKWlJIyZvI2NsaDh0OChpR2h3ZUZZIzdFQVIle3NAIWJpSWkhJnhoKmIxN3BTIXFvPl1rWX5yeFQoc31CR3gmaiMjKHg/XyM5andSQXBdWnJ1''@;'; put 'put ''QFh1T0Y+bDJzd0V4ekE2Q35MY10/XVMlYG42NyZUXWMqel9lQiwlMERffVFzOEV1TF5mOCk0W1l4Q1s0fHgqZUMlPDw9JXoyRFVTaGR7NzZwelRSREpscilmbnxgRWBKfXhReTpSMXdZSURuSmtCKkRId3x4NUlLPDpvYEovLnhnc2NPb2tETyRPKiRMNH07ZmZEREB5cGZ3RVg6ekhwUGwsZix7''@;'; put 'put ''ZmE1YGpdZVJzPnQxTEw0X3d9cU9kfiNDKSlhM29zRmMlK3lFQzN4PjxoZztISDZoWW82TUZKMTZ2KkApd251N1ojUyRzW1lufVdYNnsqTX5GUD8re3FSUFtmc3Q7PnpLZmhjZUU2TUBIUF1GXSQ9SXZTcSU8LGRnVXJgMWJbNll4Vys7Q2cuPCsmMEZZcmVqbCU9KCR3Q2FDYHB4aSVMNWpAZSVa''@;'; put 'put ''WipJRD9yc1NteH5YbWpsVWgpNFErdUJONFdyPkkuNiM4MzRYMDZeJWBHRUZ1NmUqL0R1cWF3JClLQG9HTX09O2R3VWVTQGo/MXg0I3FycUJJN3JEeipoQi83e2wzW116aF0rODEudVRhX2MvQlowWCJAO05NXS5oTGlkMUhAfDQkTilbbEBWIyYhPktofVIjSnxhSjxAPy5ReS44emBlL0FQWTQk''@;'; put 'put ''JHx+N3EpN0xhZUlXZ1Z4fitBX3hLKXcuRE14NmY3Ozs5UyQqeWAxYiJaQjJrcGFYNE84eShRayNoMWNWX01bQjtfIzN5MC9aTTV3YnA/XSNLL2I+dXI2UjZSSS9+NDlYIX14YTttNnl2RmhdUj4leEFrY21FNyEkeS9WQHgyW1VoP081SEV6MVdTe1VjYysxUzNMYHhMfF4pYz9BQCs0ODReZmU4''@;'; put 'put ''QWptOk9aazcjPCU6OHVCRFI+Pl12fG86MTx9ZjJMSyM2V3tfLGhYe0FlVXc4R0t9QWhjZzFPRz9EWXpqOVdWOX5sOzgjL2V4fFl6RCN0aG1QPFlIMjszZztybH5fdj1RNV8hWmI+dSYySEg7QGR7aDxmfTA6RHJYYUQqfGVxI1s4dzI+MltRVXV0JilYI2BxOC5pYDtUKj0hKVpXPmQ2SDtke1cj''@;'; put 'put ''cEwldFF3VGFqMylrMVkoUSRdYE45aHh7P0FSemBrYG0+TlN0IXtLVj9bcWl2dFZbTT9WfDxOOiZeOTpXMHV4R15pM0FRLkcpbTxxb2E/QVdhNERVZHlqWUpyWjhMU0Q8Qzgpcip1ZCs8JGtAaEZ+UGZEO0w6T0NsU2gkeHAqOmN0SVtUSFVndnZCUip+K3RDU1RCQ2Rlc2lsZ3pIU2orKD1ieWd2''@;'; put 'put ''JHxtX19NbGRzMCIvVlgkaVNZYzdecjs0IkdZLGt7OTExfTFBMVtRLkB9K1B2cHFWeUl+alViYVVzMFVKIiFQSjVFa0M9Nn56NX09TSRUamdGOzc4bjBDIit2Y3xZSiErVUwlVzd7aj9uKVE0ZlYpP3h4NX1fL2cuP1NHKTE7IXVbSDg3TGFSUzo3TW57ZzZAP35sYkNnfTdDMmh2e3w0e0p5PyQl''@;'; put 'put ''JFpLcSR8Y0ByQFt6JSVCUUgpKT1kOGlIfVd1LmlbNCMxW157YCRASSFWNiMkTDhHU1EkP0UpbDZRaykvT0peO1JyRFppK2gjMSRAfEIoXWNaclgiK2k6TjU1ZHZjQUU6QGMraUw5PDBaan5QISMobWArPV5yLGJRVHdqLy5RZU1PViZ+QEc2SXVwYkBMMExYY2Q+YFBKUHowfEwmJFJzcyM4dlQw''@;'; put 'put ''IWFqb3VOeCRgSXJTQEJjfGhZc0dMY0VUdmI0bll2cS85cnZvJSR9aFBzSU1YJlBrV31NaTlpQyF4akNYakxhSWtdZXRbIkNNPjJ4bmwrbjZ9IXZAOTt0YlI3SV5nYDomNTMvKH0hZjV+RigvZyxdKkt5WFYkSyNqU1h0eFF7Tz4pQVQyXTF8NHNrUUJiSW5MO1gicTdIYnRvWHZ5MVJXJFpzTFlh''@;'; put 'put ''JHZ6IipPLnsvfEw7ZCJ5LH44dCRXJXw9KDslRVYoejpoPTY3V2x5bnZCYGo0aW9DPDx+Mys2MCNQWjRgd0t2NX0vV0laajJ6LyhQU0kiXkZ2Tl9Waz44Vm5UIkd8aSssU1Y/Zm06TmtrT2MuNHQsYG8maSY8Z2gpfmIxV0JHLylUUWoyZmssKTIiYGdfR3RCMUU8bSorNmZsSXlZfTZ0IVduMlVj''@;'; put 'put ''PzxhaU10YWJOM29vXzRmN1p7b0ohKzl7dm1uRlh1P0plKFI0KnFCMUAmPWhnJXJ5Q0QzTG1YcHV6WTQpIyt3Snt+Kl5HdzdMSU1bUUJpcmM+MS5nITZ9dzcreyhLMkJpXj93R08oPyMsSypKUzY+XXE3T2Y4WXM+XTZeS24wWyQrWEJFQlcpeURZXz1rZkxfc1Uzdn5OJHpud3Y1azQzc3F5QHZC''@;'; put 'put ''bmk2LCYoQC91SFcyIitFPlhibjMlXSMxZilmRyV7NzJuaUVSOy9bY3tUd0tWPmVMeTBIejJFfnFKUSRtciRNVipAUVRsNlt1Ok5fdHh9IWhHalIhPSZLTyF5Qyx6OCp5TWNQdm1vU2NoOixmdmZSXVAvRDsxMldsTHxGWnNmP2FKQzRzQGNRaEVSbW4ockMwLmFCYUdQJnkqUS4oUVUmK2BeYktV''@;'; put 'put ''P0lrayUkJWZ6amZecW4rPFsiNTVOQk01JkpsOXNNajtaeipmKCtDR0g2WHA0clJKSnUwV0EsOk88QFZXZGI4WmNxLE5HYlNtOCpDclZ1eEBSZGtOaURieD1fejxNPkUuKWhXIStPQ0NbJHk0Jm4qcEtZc2R8SmEwSEdgVyE6fW9keFBWWlV9NTYiMTcjKjIsM19Nb1NRQitZTjJxZTtfJXFDVHRo''@;'; put 'put ''PH4mdUkhQCN7eFdOPHh8PSlAfkB5Z10ifFMrc1FhSWQ5RDcrWkpLOC5ueX5+TGxlXyNJIzohdk1QLns/T11NTHJXUiZxRU9qeHJMdkNEVFBrTS58cDN7L0tufUVnP2deOVEkIzlAem91fWNVXXREfX07eXssMDV0SmN5PW9oN1kpMDtwQWUhOyZeIzBuUjc0fUo7Z2pzLFVOXjRddHxDdXBjUW1g''@;'; put 'put ''WVNKMyUpMXc0Lj5PfWR8IVdPK2BofXkxQ0RSdnx6IilgWnQuLzNoUmBwPDBDaixXUX5CMkF5QCo7aVF1PyosbGsrZylaSzxJPl8rNGdPMSVyR3N1UUBDIStLUGpEaVVTQW5Haj9UImhVO2J8WkRIUGkyXTk6KGFnemRULFVaIXw2aThsQDBIZEVCcVgrWEB3dUpWdU5mXmp5OzY9OmlYaVljLy8s''@;'; put 'put ''MylJS08+e0ZLdHRHcUgzKERkZSt6VXRMPHNqTzJCIzdnO1EoKDcsbERbXSN9ZFBTTmRhO3o8KFVtJDQsYDE1KnhXTn1LNTUqXi5DPTYoNlB1fSx2L0ZTU2J3c2luX1E+ZTU6NyJOaiwzQkNATEA6YVtdQH5AUFAvRFt1ZXJ9V3doYElrMjJ+VjBxIjU0Wl8iNyVSXXIzRERoME0uOyZ2c0B1PF1T''@;'; put 'put ''QnkhOHN5W1J5SnVFO2g3WklJR2k/aCw5X2dRUDxqNXRtNGUyWnBqKjJVKkgvcEZhVH5rYShhSyEhSkMkLlZCRnE9I2xbcT97e3JTLm1eaWQ8e2p5dSUmfjZ+TVJ6VTJ1QCE+Z3giamFGdj51T1B8WlpjTnhET0hAKn4mUyE1QnEve2swZSV5QDVoQGBneCEpejImbyQvXk1gKTUoaiwjTCRVIWo+''@;'; put 'put ''KF5QeEdDWTRsPHUpcjZWTUBONzl4XT9lMHhMN1YuajZxOiV0PEhLfVdDO1c2b0A1fVt0SVlRWSMhZikqLyQpOy9GaStTajNiS0B2bDBWIWpdMEJ+W00yYDxLd2dQanhAQV9Aa1R1XyladVRRWSFidXdmQmQuOlNhamx+UEZFNk91PSR9IXBKZC9ZO1JaS3Y7cnMyZEg1UilDe0tRMGB9N2p0Jj98''@;'; put 'put ''L3dbOSlfK3B8UnlYc0tpKEk9MzhPYzk3Yl4zTFpZVHRaL2ZfW3NsVzNvQXtaQE9YVDNHW3teZiNyRWw9M28hV29vYHM7X0xfLip+SDp4cnU5ekdsSW1aN18jU2NnNFEwXzNxI0w8W3VFc1lwZ1BeKT4+fkR5Uj9QOmlfPUVyeWl5VT0/blVDVl1xImhrUF5rVHYiejV1Pm42WWpwYU4iUHpgcWgl''@;'; put 'put ''SEJXUUNyX3g2YDxNeUVBcDhpMCowUX47aFlmK0AjYEwpZ2pnYzYsZ24kND5WKDtZODFEOiojUE42OFlxbyx5JXdZUTkwd2UoVEdfQyJOXjlSSEJyTGM8M0lUeF11OF46Rkx1SzkqJE8hKDV6UWRpaT5sc3RxZCxtamp9al0pcFAzeVRWczgzOSxrfFowIlcoL3A3TnspP11UYzI0JmxYWz1CNitZ''@;'; put 'put ''ZSF3azRpNHxfNENpQ3UuSWRSc1R1UC9dVURdcT4qWyJpV1V9PXt5PEk/azdBb1JibjR2I20rNWVLdnMqP3w9Unk1aj55d2Q2IUxeOG5DeEE8V2BtaFB1aUxUWDxrd0xmMSguWmlVcX0wfnBUaWUrYHojbFJTU15vUVtRWFpJditGdkBRInBoLGZGLFVmWSFHfUd3KFEuNVBrUmZzciFULlsrL0gl''@;'; put 'put ''bC8/PWgrKVtLMHgqWShGN3EyM3N6KCsxTSh4OCoueHFMRWo3M0R+OlouIT45ZWRBUCFrLDx5Kns9R3IoT2poYUw7c107eG5xMSMwNiw0d0hVcmxpZHVwK1NPc293KCtyTCFOLGVxVm9OZl11MH1Vb2U7RCxKakxOOjU1Ym8lc24qcXxJQTNvLmNoTURQdVVeazJ4OGJBMEloYGldZ0daWzpVe3Nf''@;'; put 'put ''cjYyQ3dmPzZQeXw9XVRVZ3VMSDphTW49bEdTPSVgYiR9UUN1ZkY1UiQodXEsWzZZIlBeT24zViRzeDdVRWJpSHRBRWZ7eGEzMmVISDNnSEBrYWMzSiosKDZ5e3xiQCE+TlMpa3EpP0UlTHlEMlpmPylHI0ZRLiZKY11CTCtwUzJ+bHNqaVo0X1BYfUB+OlJJP3J7cGdyL0pUVDRHeSRJVko8UjE5''@;'; put 'put ''b0EpP0JiOFhxM3NnNUhxVE9hZVRgRHRRQE86X1FXI0RQPyV6TUYxcylgY3c0T2goLH1EdGBxUkFVPWJ2Vn4zVVU0PEdpLkBeNlE4ImR2WFMlUDdXZVRdXzFuS1IiWFZwK3IhW159K1IlNmxHayRXUz9JMnxtTTpdT3JIWj1MK1pXeWQjeD5oKnRFa3NJTy8+PFZgPkNvYFdZV2xdVE0mSiZxe2NF''@;'; put 'put ''U0A/VjBodFJ0K0ZVcWBOI302NXo6djJbMlFlZ2wiUTA+JVF8Vmk9QDhxWGExQzp2SUl9PVV+fXdZZFZVZkdhbDszLkc0YEw8U3lWNV4kKk9xU190PDh4QCUpfkA6RVZIJVJ1MWVWSWsreHtUR0M3RTZeWkhVYVk9Q1hsd0k3fDsxWXw7IldeJWwiQkVGfmIjcHgjOHg7PXBQPFdEbEFONFkrLC5m''@;'; put 'put ''Sz1YfjA+WlNJWyQvTFpOaHh7QDtrX00waF1lLHRbWGBpIz9uWk5LandNOCM6dU40TFtQLkc3KThPWCEpdyxIdyI5ezthU15BKjpgQl1nZVJyL09FXk0uTnxSRHwpJUo0ZVh7Qz0qMmh4MzRRRlFgRVVfViZNeGloKVM3T3pOPmJNc1dPanFZZTxaQkx0YjJhXVNiNXJHSnZ3eVpPR1BdNyZROH5Z''@;'; put 'put ''VCRsPSt7fitiLlcmWmVJJj17LyE0fFdPNjNPM3I2Nmkpcmk2TFo0cTdkJn1ZWVR6O3RfIjBfJkBKVDZMaHJVNUJLWkFOSW1aZkk/VmlTNWs2JVIvdkkxJTNqWkQ4N1Zga0NOOT9fUmZZOWEyJX1oLCNPO1dnNVJlQmpMYXFDNFF7P3xWWEwlX2R4NW9fVkdNfEdHdSMvNUpiUUovbk0pdiFudDM8''@;'; put 'put ''Qi5tIXgsfCFCZURadio0RDM8dWYpeXkvcTJFJm5veShyWlVxYUpaVElVWnBOY3xoISxfIWIoNDNeRGw7WDJ5UFdeZ2pyb082SywrJGdnK2RWZiUjRXNsWF9oPztzRF1tXnIsaUNOUzRSJSZsIU1FJiV+ezlkQXdudlFiLipORDNoYlg3PFZLY2xkU2VDO2RSLCJfQlVmO3xjJDVwTlViQEdIYGp6''@;'; put 'put ''W2U8Mm4wXS4oSHhWQUw7eTJbW15IL19BYVpPP0lzX3RXNUN3a3NCZzI9LChBIU9eOkw7Qi55SDwwQDppaCpjXy5DdCUhU1d4bmB1Y11MKFNDV1FaPmE5IUMkP3QrV29taU5SPj1faGZJdDslUTo3ZGt3RCo2P09EPVlPYWo+eyIoSF9YbTJIWUd1Nk94MkE9KGRva2JiUUlZbn5sVnE3ZTE3R3Vt''@;'; put 'put ''UFssd3RoeVVhImlmVGUlVV0pfWtYRn5ZcEdDTlFsYHVSQFdjQ052PyNpQ05ONCJncVRGWDx6akNEdHEoLkFUakIhTXp3TyNYeHloUGMiLmU1UENQfXMyejF1T2VmU0JuWUZEJi8rKlJJNVlhcVJLIkFjQzpwaXlXMSlHWTYuPSxHWDlSamlEQHRdVldVLFpReCFNL0VxVCwxSSFeL3x4KVkqUWV9''@;'; put 'put ''NnZfJjQ4cWZiSXokLmNibjVYYmlTQ0heUF5WXURSPmdmTEpVdTQyMGQzYSlURT5HPDJ4XkMib1h9P1FxKmQ1cztESVE0Q1s/OCNdYT0iT2BLJXwmLGE7fDFkfW8rZFRAS1gpPWg6JDFxMjdCbXdbTFhGO1AlOSsuPkgxeCVRXkUrITVSektxe0c2eUwxVWJoUFpmeGA5eDhLTT9hOT1OajI4P1A2''@;'; put 'put ''ND5lYkpPTmpnWXIvclE/Nig4IzJKOiJdOXd+QF9zT250LGdPZHtkIlc+LDN7TURAQlk4Ky5xIkdhKHJxQmpZSEs7fW41eiYvNDpoVDxZZEJCYU1jJUUsZFJiQilvLzBHSy9Wejl2OXZObCUrMz51M096Y2JpaG5hM3NiMm58ZkV7OSZQOXI1YVAsOF83eVlKKWJnM1lbV3B1aENoW25vPmd0Vj5P''@;'; put 'put ''KDtjLkJgP2lGPlokIXk4P1kxJmE/JHdgNS4hOnpTIWE+SDZwY35NSjpdN2VRYTxPYk1afileSF4xOHIkIiVKVSZ6YEcwUXIySjVZdmZoMyVqRD5eXWFTbCMjfEM7UGIybyZ2PkZ0UmkjSFdkdkIiPCM4Zm9pUHRQemA/NThPZU99cFJsZSxBKXNLS3JMenIoJVcuLip0KzpRLmtJaTlabkNCIWww''@;'; put 'put ''aHZwJV0qfGBnNDwhMSo/cU1gXmg2WDB7OHxxVVQ7aWx7REt3U3l9QnI4dHddUyo9dlEqUkdRR09kK1Y4SDFafV1XSDtIZ3ZEI0g8YUAvSCV4TGpPRDQ3JjZvKTlMYyoiPUpDMUphTnRJUjpeZGBOT2U6S25rV3FuVUVUTDVqbi5vTHFaO1g6Ty85OSNJLkR+YyJgbXxmNVR6Q2xnMS5BK1J0eXl0''@;'; put 'put ''cVMmKjNoTFFDeyRrNFtDfVV0U0J1QEdzaUFiKUQpMDlsWFlHW040I1VsI0hmVHVkW01RJG5IfVh6NWw5WTArITs7VSRzO01iQkdlJFU2fkZTdWs/SjI5ISNbLHg7aCJgUj8vZlJNbitSSHlpKHFmKzd2eDRRalZPemo9TE1+QlM6XWU5ZlhKYTJZWn4rPSprTWZiQFZJe3lEZ3cuTHYvWjRFVEpm''@;'; put 'put ''e3hEe1c0dkBYckRGYWtdQHxLVFZ7KFo8STpNPjFYS14qW2FhISUpK0UhUHZydkwxQSQkXVcjU1RtMGdRbSJXImw5al86VVN8fV4/YCEpWlYzMmFJcT5iZnd6XV81VWdnIWcjL3I9YHsmTjFYd29rel0qdi5xTksxIShUQWtJQ1peZzExcTg8JWcicGw9fTtQLl1QSylbSUk5XTN4IUFDVV1tZj8k''@;'; put 'put ''ZUoqKlNLVkdTKHtPTyZVPWJdQH1aVDxmPVl4RUB4LzgvN2BNfDFPJFVaOiRxJkBiaUZMXn1qKktnfFN7ZFZBejhmR059TTVCUmVtakNoWCM3JEJDWmt8OVEuT2dgJEEqQC4hbEo3ZXVzK1YzYXY8KC9AQ2UjJEtCXSVCcUsjMiZ5WiNaZkdBdzNieyUyRGt5fVBITnh1JnAqSk1nNyRBZShPc0dV''@;'; put 'put ''MThUS0ZocF4oa1U6d2xjWVRnI0AzS31zfSExfGAsfHZRbCgmKmkuel9TMmd2VSIzWyVoSSw5PWNgV2N9cUMqUF9Oc1U7UEB3cWFVbWxMc3ZeJiU9XjBMKiZPaWhJJFd5WDxgI0NbZEZ+Mms3PlVlQ24xTSlWPSEuL1owcyw3UUZBNnp6KUA6W20+VEdeQWRHbStFZXBkWyh4bEIrNy93UUtqOl1O''@;'; put 'put ''fSZkLH5FWmxzfHFjL1ZZQTNMakRQUDdtZ0l3LlJkRUt1cT1yTzpPeFpiMmlCSV0lOTk3d3Q6MC40ZlpgRXYva1BfbEx2MGA8MF8xS2E9L29jbGQqXkxyT3EzLGsyeyM9W11lTEUzcDtxSToyP140OD13KWs9OHpffVJjPlt3b0tKfVYpa0NULzRJOzw4UklSbTZIc3U0Zz1ZamlEcVlnSUQjU1gy''@;'; put 'put ''OmZKWkxjYUNvZXN7Q0FpR2wvXVJtJlNrcCJMfFtBbDI2NlFoYiE8XWtvekc/Lkg3QnZvLDpyJDJuU1tKTjVdZkU6RCFqQzxjdWR4QkZqY05RcnxaIWBzIU58QGE3ejkpLzR6Zzd1P1NzRVldaTMiTXkraDYwKT4pSl8hemV4Vm5kP1l4UVN5cSRTdSs9Xl1YUlBlJGssT3ZpeXM9PVkvVTpfVm9q''@;'; put 'put ''UC5OLiteXVU6RyFiISUxc2l8cEFUdlIjfTkmKTR+XUUxOVIraFdTPmZnSSQsOTU7dX5VSHl4Qk8xaChaNTszTTZXJl9rKXVGaThrRU9aSm5LMnNQM2UvX2NyJGFQJFl4MnpXM2k1biNqamByUXskMnRqQX5gSTc1SnE8M243V29yNll2VmUsYmNhUnw6VF02SXo8eCVFNHxNMmtzYzd+clFUSDkh''@;'; put 'put ''X09FMjwuZEgmV1J4Oz53XzB+TCpVPitPOil9YVcuUUk5dz86d2xlZzxYUU1kQlNwWGhQWUNrMnNMe2tvMDRvKG9xXy4uW1BtWkxhJTw0P2wjNEAwTGxdZClUfHFnRF5lKStEQz1PSHRsY2t+UVc8ck1jOml3eFJTYj58cmc9NjlCaFlAPF1hem1gQj54MGdJK1paV0dhUEskTGwzV0YmP2NsQS9U''@;'; put 'put ''JHUsUzF0KnNEPVs/N0UvVy5dfkJWW1syUlFHJXQ2Qnp8Q04xMVs/WmReR3peYiRDd3AlR094ejQ7dHllJHNtWUN+UG9KaSNHUm4ia1hQVlRqVHpwPVNpUylRK0VKcyNNIjEpW1RkUnUkZyQyVitkcUByb2U1I18maXoxJTNQSnpTOXh+c3JHbCM/PTooWlhPNHRDY0FFK2YyQmw1SGxuZC48cSNs''@;'; put 'put ''OXF5K1ArYzlYPWt3MXQ2KXxsUUJab0JmXzImN3RrK0smWztgakkySVpOcFdHRTJZYm1walhKTjBeXltNVXdaSEMxT1JFdUg3XWZ4JSU3LHtIS2FLTUgwbkcmVypTMEp6T3V4PipYNEBPJUpdK0N9JFJ3a3A+bDM0RXVTSFBySEhUdl9vbWRReHE/OWdTZFgzfks1Lm8jWDlyYyhGU2ZuaE5PKEpQ''@;'; put 'put ''PW9gSEU4eVJval4kcz90cnt1U3drP1BJUW4pNjA9TztTKEJRQSR7W1BuPGdLcTltSikvPEksMWNeMjdCbGZeJWRTOj5vQzRmbnJJfGN+TVpUZGBhLGcuSXtyVzZzNUhzU2JBb3Q7NjxwN3EqVCQ2Y2pPPk08Imw4TlNIKlZzVGBVXWs3X21xY1dRLE87fSwmN1BjUkorZjBAOT5NY3R0bFFnJWp3''@;'; put 'put ''KDwkeUEmWzZ2d1JEKSNxbjQ1eG5zPFJoW1VWSzxMc2txcnVqNmhTKjhRYHMvPVllOyJlTHFDdStDVCE0ZiVvTHIoJi8rbDtIYl92WV56bWJrRTE6KF5JQF5qI1ByIU8pP2orVjdAQD9gPHs3S3ZlI3soTllubyw+byksRFAoTEpaYCFjen1dSW5VKl5MT35SbX1VQjVkYVleQG5AfiFsW0RjckRU''@;'; put 'put ''ZVslbWx0YT5oUSR2ZzMhZUs6Z31mcj5ZfG1baE1Gb31URWhNaXQuJWhCUlQ9TDUpamJ6PCt1SiF+UT12KmdwUXdrSl14bShCSVcqdCghK29zYHI0XiQzI2F+XWNGPVUpZUwsXm9scF11REN6PmRQZm9UeWJAQClYUS5RUWNMLC9KYU9tIiYkKFN3RW9rKyV4fVo4SDY1JGBROiIlfkpUem41bGdx''@;'; put 'put ''Zks/SHA0OV13Ozs3KSZjazhabT1wcWAwMSp5SFo7KCZoOllma0JudjFqcV0ufU9KZGMsay5vZTpbWiNvZFQyditrRn4uLEoxXjtPKk89P05uMlFte1cpX3NvX3cmdz5rQlo0JkpRTWx0LDs2REIidkIxWTk6LG9vcilATVpGWThhZSVjbHosRXAwMWJkQT5zYzBzS1svdXdTdGtWQUpJKV0oKXVF''@;'; put 'put ''UVg5S1k4e1FGTSE3N3pvKkFufCV4NmUyS3kmd0lgMmYkcWFhYV1sQlYxVS4hPXwxSmcyd0U5OXNZVXdNLD5zSlQoPiN3XzshQWQ5UHZCLnE2Lj81LEdlUG8wcF86Vzc5TDJkMjZFUSZoJTslOkdXYUAuOkcuJWd7QFNbPj41X3d0UXA3RHxtLmUuYV0ufk1kMyw/R3x6MU8kST9ANlVYREA6OzNB''@;'; put 'put ''T1k6UDcxW3o5IWtlZ0NWQCEpelVwPUt8Xkc8fkJzakBhMDJrcno/eEd7aXI9e3lmTXBIVTNaUHIvZiQ1IzZDLnolR35ZQikrXVRwYytqQ2RuVmpDLlVeIiE4fGNkaS8jXV5IaDx+SzRidFRRXi5AR1kpNCZoTlpHNXlYVUIyenBoY0p5SS4wdCt8Kz1eaHxbUDdnTTRMWllvNklyNyRmXyV2bHc7''@;'; put 'put ''dWEqJV5efkVSRDZJcyZTWDNpfVFoMHJfKTlIVEROa2BrQyl3bHtQVFh1JTQlfn0ycWRqRT9YJWtVMVhmYGJlemBaZlJzSCh3MzZpRTFicUYrLkFmeV5PRysyVCZLPGszOVlCYldBbD54X29Sdz9Kej99TFR1eDcjajJGbWhJVlN9TFdQeS4mYDEzSHdHcUl1eEJSKjB1OGtWZGBtZWtrNSZLJHBF''@;'; put 'put ''SXJwdDtLOmM6PmtWK10ra2w9Q1NiRmJdeG9PO2UiTDJnQzhxKygofU86RGp8Mk5BJihkV0tdTmRyfldpLGZYIkpYYnVRVS55MTwvLyxZaUc1VFAudypjYUtxTl1VflBnKkpsN2c/U3djfGJBTGZYOl5GVSlgSmpNb0UqMytwbGA0YVd0bC9STF5AdHpHWT1hN290KzkjeThRPEZgTihwP0opKyVR''@;'; put 'put ''dS5QOihJOHFVa3dVfk9VdGhyXmFSYWMxOWxjMjxmIz94Z30+M0A8cS58NTpWW3BgakgsMns5ZCl9I0chRlE+cjRIVlV9MTBLaFk8QHt2T0AxKjlOfnxLciZFbzU6fENsT1cjQ1hyYHYsdXNXXUxeQk5KJH0uUnM2NTdUVnVDUjsxMGRZV0AjUmNMPykhUFFINjd2LzY9akMuRiRxOG85eEVNZjty''@;'; put 'put ''dFJbfUZ4bSpMREZxQEhbNyVwUzgiLzpLdjAiXk9YX2VIXUYwLm0ib1AqSD1wVyNKQWJCV0drTEdwbiVaNXhpNC5dbEt3dVQhImpJTTcwSzNtQG0kKSxtNCkuSVthQ1dbRyZyW3NhXXlfQW9qekdPSDZWPmFFOXMiTCZpQVh+XXZyQSJDXzF7OzA5JEgyVG1wUkJta1shSXkyYkJBMS9Cbz1JYk1d''@;'; put 'put ''N29ORSFXX31gNzF1ZHR9JHtCXlkmRF9vd05TWit6KTchWXtdbCo7djBKUTIwLy51QlI+alAyIk8/dEhLXW0qOVo/d095UER1K2tycyx8a2ciaEVee1BaQjwqPzdYS3graFJtekZdN3s6dGsscUxLdWpEK0VnPFp4VTshZ25zUklRXk82UFtUR054SmNgOGs+RnosKlkiPkIqcHgqTiYkMk9hRT9h''@;'; put 'put ''WiQ/bk56LjQ2WXxqLkhJVGpNO1VAI3hfLHRNQz0xbi88OUY8VnBJcTBlZz4mUT9fOm1oOFZwNnhoPW5pTSk0PGsxZVMxcXNSOWJtIlBwaXJKfWxjPzZ+e0h4ejNfbGFHanh+UH1Cd2UqX2dZejUmVz89XTsreHp2SiptaHlBb1EqYGEqK3FPP1NgUj8yJFdVQjwwQFFoW01WWjg3TC5dPERRMkl1''@;'; put 'put ''Njp2ISVHVHQiN3pWNX1TaF19KE8sOmhnZ0FTXigvLnV0WCs1XmplPjBDYHgwSilqI0NeN0ttJG43bWY3d1tkT057IVNBWWsmaHVxUjRZYmBfdE14Ll09Q0VVcmJWN0BAOiY/VkUpbm5ZNiYqc2spY2t5b3N4YyF8WlpbUjo3O2VdYXx2Y1UlLlAvP31qQ2lyVkNnNTpMI25nRytfWlN9TT5hZ1Um''@;'; put 'put ''d2o1X0NddVczMCQ3WG8hX1RVOTY3SClYODt7Q2RZYDg0MHptfjF8RkojXXBnOjFMMHk3MT5GMmJ0anZ2UlEvO200SnlQKWQqaVZXaHIwJmUjRH1OemF+T2o9YEBneGMzTEplaU54YlswTT97O1p7cSlKeG0zfWBBZnxSZi4lejhYWVBGXjZePE0heUZIVlYqdzMqTT5kWiVjWHh6e0RDZSVSS1J2''@;'; put 'put ''Z2thNGwqUUdTWGUrcWlaYSgoLkMvbF5wSjpwdHpObDo8aURjYFtiMk5CYmM4WGlPI3lGNzx3Y1hrLm1NbSF6SX1JNGdvKzMwNHhlN1lsI0dHK0U8SCIyRjtMYGYzWl16YDMkUUswUmIwZ24xIkVGTUNfV0RwJUxpbkN1QFtyUTN5KVRDdGd9VnozKTY+MVVGYTFoRDd5OWZBcDlsck15bGAjbkVu''@;'; put 'put ''LDxaZkskY0RIUlYve0tiKUdPanNYb0JZT15ROGsoayNeSGVJNXouO0lUY2F1K2h9e1IufVc9bEpad11BbyVYdkNKdGFXdyNNNmFYRGVpZVs+U1kxP1o1MXNTWCMscU9Dek1IImF2ekgqMUQycFJKe05UYERuYjYsbU0vIlNGdXtfJisoaFB2SUdzOUwrInQ0YTw3S3RCS3hwTU11MH11bzc6allF''@;'; put 'put ''TyxPS0orMURfUmU7JUx6TDZVbGs2bWI/UVozMyV3MnlyZTw+MCNrOit3WU5abyo5QUs0ZFNiKHUuYVNKQmRLTClUb3MoSWBYeUdtYERuLl56XT02Pz46fnlkYkZAcX5HW2BTLGIie3NKYkl5JiZyc1pgRXdnJlVpYU5mPXo/NGRXSkJATF1tR2BlV0J5Im06JEFFbmVWNyY9eERCRSJocUQqMW5O''@;'; put 'put ''QW10ckdSVltpbjc6UXw6OHJILF9uWWJHX2NHZVgoYCRKemRdSTc8Ni87REViN1gyd2s0LFd4ZGM3W1hyRDB4QDA9PE4hYTxPKV9uNkpURTFrS0cwTHspUVBpbV5XRGIzQGM4MGw/LlZbQWdrOjBFP0Z+XXlJbDx+YGsyfnQsM2BYTDpKc0U2Y11gNWhQeVlLTWhqejp5YSp8eypPRXhDVm02V2xw''@;'; put 'put ''I0hxb2xvWnhnM0Avb1FHQG43aWJVcl1SWWJsImllfm0sQD1VIjw7fXtCJmlISTFeNVhQXyY+KUxAMFN+MSQ4SzQhRjZKaGUsX1IjKllUNnZbKStfXyl5RkdeQH0rciVCV2osXX0jOU50NDgjJEAxemokNDlFTEJRWmNaOkJSLn01ez1ERGlkKGh9NWRSO2kiVylvPWZLMldpXXBSQGhjN1FqV3tE''@;'; put 'put ''YVtIPFlIaDVRLGRHSWRUPjJEMV9ELilPQT9QQzVHcmpTJmVVZHdtfGFzW0A+Ri4pXUNFdHglWjokM0F2djBVYV1RYilaS2xRYmB+WDZ4NXEhKjlGOXs2TTYoU158fm1POzw6WD10JDV1YEBYPXQkfjlkJDIhW2g1bVQ1SnRyNllCfD1YJTM6Nl5YPXsxWzx5d0I4WVBBLC9wNW1qbUlwemxMUURX''@;'; put 'put ''Mk5zdEBkU1F+PnIwMUp5UDM6OVs7RkBDMXU9WkhqfVlfPjJtSHZmRVFBVzs5WzxCeUlgOjFPcnx4IlIoSk9QTEZ3SmlhfTNFSjQ0UF0pOF4xMjx9a3JxKGxUUFE3XncxM35ibjc8R0BvPSN9NWxTTF9LWiMpLGYkaXwpcFcoOHJGLyUjJm4kX3Z3PnNybkYvfTY5bSRfJSJnKG9uRi9ITjg1bH0p''@;'; put 'put ''Kih+YlRPcXEueEtuY3dKPzlWX1IiZ3xBW1BMN0o8MnxdUT0hfSFYNj5CVGdfL1Y4NSNfckVzc3UhcygzfnsqXXN8aWVnQj1PVGl8UGshflEhMnl1KWAhOXFiSDp2JH0oOHAoW18vQz59KUxGKDh9YXtfX19kbHlkdDNPRi8wQ1JXVUN8b3lkMDgkUUJSQyNQdkB7fH0kTFYzcD12KGxlS0QkQiRH''@;'; put 'put ''NF48YUslY1o2S3Z1UEt4RE4yNXgzSC5KMTw1WVEzMX59Qj4/ZVNVWFBXakByXS4oflc/IWxxKDxydG1FZHxgTUx5PmwmM3pBe0tyd08pe1RraVRjRi89MWYlK0dfa34wM3BSRHdFN31kTTRfS3JSZz5IYXhXMnBIaipPNG5EWUxoTUdIdmQidmcoMFpxSjRuLlVvUU08LHt3SnxfR247Qjl9K0s8''@;'; put 'put ''PyNRV2NBREhMI3lXLk80WXB4KzY/K3VbOjRoZ192aWZZU0E2bXQwWHNwdl1MbCN4RE4ydll5aElVVFRtL0F5WHNfdWdUOSNTY0YvMFkiSEdRMkIxRTJkLnhASSRRW3RlNEk0T3hSXnxrYiJjVGdtZ1kpdTlNVD93YCRJPEJJcjxQPktAWTFkLl56Kk9PQ08ibyNzU3orODBDaV1bKkBYPFZzRUh3''@;'; put 'put ''R0hCSCZGI3MjYzp5STZhQ05gN312RmFCQG5nIkdIQkheQyNzUkdgU2grZ1o+cX5Md20hQT0oQFFHWFQ/R3pjXzE1e2VjP0lhKCNWKzhpMCthQ2NzOCtoNTsqImQmPzRlUW1weUFZU2h2P35oSClORFJ1SSFVTn08IUdedWVzTkQ8P3ReS298QG93PGB3O0ZLTFlvPXxXUFdJKkB0IShNdmNSXmRF''@;'; put 'put ''I29bdFouWSY9IT5HKjwiR0xqTkEoaFttQjJSVUh0dWVzSkQ9P3VUKV1uS2pyYURNNyt4L2FvT3JHKjRJNFpYcnxWeXA6dSYlTmNVMXsxNHZEPlZhQUQ3OFAlfUwrYzNWVG5oJkkiKVtVJlhneTJKVHxWTW94OSI+YXguTm0uPHk1QFZJJXZUQGNyeXo2e1dnbWw/QzhCTHVNLjBUfGhKdDdOW1Fd''@;'; put 'put ''UipSJmY+czRJNHc/cXxWeWlvcXhteFF1aV1fLlJJPlAyMCNZWklnTXwxdW9tdmVnSWhqQyx1WSp0aWdfdWJINnAhWWlfRV40SFFjUkJsTGZwWFBXT1pyfDF5VFQ0alFAXT1VZlR5e1hwcVlHJjRJNCVgKH1hWk12R3h5Z05KSS5oP1J4US96IlJPeFsmJWcobTdsQDp7OXQwTmk/LDdbcFA6di9O''@;'; put 'put ''dFFrSl9sJClZaDY/eWljRi9aR0d9e2V4TDtZdzQ1czNVOSkuSklILGBxc0JAVUNbL3h3X19QcyNLKjFxWEEhbWVIZEk/Kms5LyhKK2ghciRHTk9ENzBMW2dJQng3O2Y3U2QvMDJvIS53ODF4RFlsNWFvNz5WLDR3K0U8eW9bcU53SUh3OnFzZyhIVSZ4KFp+IjdmP2tLdzBLV1ljY0VjPyVnKDtJ''@;'; put 'put ''O1UpNDt1YExRJGNINXopRkF2ZXMmd3J8YXpIIUROW2RbY2xEKnU3RjpMYWNFY1pEI3NeY3YpMGN7dCJeW3RQXl9ucEI2Mnt1ZXNzXXF8Yz18RE10bk5JWGEmMyNrTmhxOWx3b0FgMyR4RyZ5S1V6RE1HfV5oKFUlQD5GKiE+TWRJdCFyNF9YaDJmPmlxR0VUWzk3b1MqbD5sLG5IQlA+RUNHQnUs''@;'; put 'put ''ZUxuaWRTaWJrNCpJMUdDOE5PYyIrNUorPC8ofXBHQTJmLnpnKEpVS0JuNix6clZDNCtsVk5+KjFkU2lTUFdSISRyN0VqRXQjP1Z4PTpUaSl2b0N0cEhkUypJMUUkRjxiYTRHPTIjRTJmR1pNVyVNWVluY2VTWk1tcEF1XSpYLHtxYU5UTXA7P1RLNHsxSCVMPHtJRzZDdCI1XSshPihieVheX3lC''@;'; put 'put ''d1pEMV0railRQ0t7NGRTaXRPV1I5akZ+bTAhWHt7WU02dHt6Wjc9RSJdRzY5NGhQWDZqSlRvSDoxK0pkaVo2NjtGaVpzKThjVUNhYmQsO1JGez4yYlkoSEc8e1pdKXRyPXBGdFQiNzsyUlRmLEwwTF8pIT4xbGN8JU4/Qj1HTiopUmomNClVYTp9cThMaUlMWylfNmcpJTFBUWljQHhYUjNQbFpM''@;'; put 'put ''TS5EZ2pqd2grZEVxYVJsM3w7NkVFa2kjRyMvWnQkcFE1ayloWHBUUXEiblhvIlVAP1VYazpSPSlaZU9+dnlHemxdJm1pTk43WHJKTil1V25MT089TjN8IjkxUz5oOHdsIUklWzBudmFBfERFXjRNOSpEX2F9fkx8ejQodSoxU14mcipbYDpCaWMkLkRNKX11OXd5bGpdaGBEcklnMW1zalFTP1d1''@;'; put 'put ''Q3RLcF0rIT5kJmt4I0R5T301X0l1c2NjKGY4WS8kMiRfMmV5M093T3dKQG9Mb1RQSyFOeTdUKGUhOjorbEhgVGxFZ2x1e1tpKVhzZ2gkVlpONzJJJE91YjV1OTU6Pjx5RGwjb3k/JWc3NGhme29CZD9mcFgqVUhdeygqO3xyP0pbeVVVNGpgcVd1N3k0ZHVpc1ZBODhiMi81cT4kZjd7ZXdMPD97''@;'; put 'put ''YktnWFdEZUJnJjZIMTRxQ2tAK0d4ez02biJ3RUFPLEh6cStaQl9jLE0oWDhZRWZmO3tGQkE/ejFDYGB7NiJ1dnBFOmB1PF1uWiozeF43YmxSclZyVF5oYEpWTmBac0FMcSkiVGQ5fH5YWkRIPFhyLjRzRUFAQEkzSXEyd3dAQ0VefjUpQmptc0ZsIT4jVnZWVmUmc0YhaTAqJShiRVZYdWxBTz5i''@;'; put 'put ''T0tqeX05WFI5VCQjRF4oRikvPWg2MWc7Qyg+N1pPb3V2cEBdLjl8V3V8PUVyL3kiLjhRTylFaGlAeD9GdlI8eDszSU57YkszVkJzZ3JiZXRrbDJAbSt1YUBLbipleT0/d0lbU1sxb0lZQWRZOzFMPCFdQmY3REVeNzslOiM5KGJtMng3aXV9K2AySyksLmBGXXQqIUJRSVB3eC9yelBNZDJLMEdD''@;'; put 'put ''Z1o5alJkTmZjVHZFWXxkfGtMVHZEJU9ZKCE+LDp+UGZHM2J9XkZ2XklMU19BO2hjNkJPLzFFbD9uLjBnTVRGKCg5RXtXbiNWQjZpUWhAV1dXXXs/ZX5aV1NiKXAkXSkxM042XzMjbVZzI3ZZZUwwYG1CJXxYTXRgPyV0XXtlNTkjRzVHR25tPkd9eWNVa1FRXlVKU09pNFNhfCh0WW1aRVpyP11u''@;'; put 'put ''UH51YSV5OXhPdHZwXi9LZnNIdXRSemR1Mk46bllqUG8pZz94OW1vXis4NGs1Sl00W2B2Ykp4YD86V2BGeik9SThFNXw/QjlAPiZ+d21BTEtlNVdUSno8N0cpc3wyfCFEY0ViVjhNU2khTDhUTHU2eSVzSFtzVCV+eUZodEhCMDRqM09ean56NTdIZnRgVGlaWVpVLGx1clg4bmhYKlVQd3J8Vnlz''@;'; put 'put ''ME9Ta2AxZlZjS0JHPCFOXSptNGozO00pfUtaU0BYRjZARDExcXdtJEx5Si40MmhzWG5iSipGbTlRI2Nyaik7OFksR31jQlNUdl5+cmBPNGZ8VHh3ekA5PHR3aE5POyl3aDcmcnAsOytEV30pXSs5WmhLUFtdez8hdX47R1p7P1p8VjZYKSF+c3A7QDVDWX1HN1ZxKWIrZnpGcWBkT3pGRl81ND1+''@;'; put 'put ''M2ExL1pDSmBILiEobjFxNGluaUlefG9OW3BGYmRSX0Jgemh3bmhIeWg2cF8uVj5+dnlgZWw4Ql5nTSJfZjBFLzojRzhffSpgYi5vYUZOW3x+bUk5MkFwRlkkUnYiLzRPfH1KblRbJlJNY3xWVkNKODshLihUVX58PU48ejd7V0VDT1BKb1YsdHw9RXU1fS4zKm8rUCUzRiljcyFtOkN8I2wwVjd9''@;'; put 'put ''LlghXTpnISx9ZUJENFBJZDxpISx9Z1t8M342MV5TPGt+ZD1+LiJjcWA7VCx9MUBHNCZ4Jl94dDUobWJeS2olMk1jcHw9eEt0fWJebFYzPDpzUTNAcShZPHB8PS8mbV9VI1RXUCRTTEowUmBdR0gua0RyZTc2WSh6TGpVO21Oays1QFZCdUltSTlUQixial5mOD5jd0hmR2pfPDAzLkpieGZoWiVo''@;'; put 'put ''aENwJkY0dCRjYUovfEA/LmpTbTsxPzFPYHRjMThwREhyZVpxNmhNaHUrUldIUUskVUY0XUZleWtRbGlWel9ZV0ZCdH1QZSUxfDdKUm8oPUNpVXBXK2oyamxzVGx1WyUpaCpuZG1AXTNMV1VoYklgNjorbE9wUH0ua2NwOHchXjNoTXZrWkBfVmQrOD5ZYTFXWHd1a1hdQGYyYD9AaFtYXyhieTxD''@;'; put 'put ''fkZHaHxgKiltSTlXQUVFUTxsTiNnP3lOYyRmO31CakEvNzY+aFBsM31CWUgvVH12MjYvcUB5SHpbL3djayVmO31iI3U8OWV8Onw3a2ppX2s8YmtNNTghMXpGY21UcCZ4RV45NTBwfitWdVtkVXZUZGEmczNuWXpnOURGeGRgKWUoR1krb1dnMFchb3p+OWB+LippcCRRM11+PFcqYCpWOVIzLm9X''@;'; put 'put ''cWdNQX1yUDEzZDZqSzdvVnYoLzYvWXk8MnQjaGdWZG0/V3w9JkV3c0dvdGs9JGtWKEV3czFjeiR+JmF6VzgiNzs5JlQ1ZlIzSCN2P0E0InZSJE1kdl15SFIiRCpwVXA/Njc/IV9EQVNCSFo0c34ve0QkYFIjczZoaVU1YDssYFJSVzs/ZkRUV144Ojc1VSZgUnlEc05ELmpncG5bTE0zfWNBWT0u''@;'; put 'put ''XTwuVmV0fHBKLzI7VSZgPGh9bzlnTX0yXV9nQjg/PnhLV31hbVM3ejJudFpdWnxaZ0dpeGU/IlN8SnwmYE5tKThudDg1UCxGVz9ZIWQ3ZUcvT01oPFhQcVdsRXVbWFV5XjVIdCg2JGF2JlRvW2R8OVdTZnRsZVYzTFptZyxbJX0zdlp0MHF8NyhAKys+MSt4Okx8UTtaTHxPSmlqX34xMy5IeCEh''@;'; put 'put ''aXUmaEMjVj4vLFBnUyl6Wz06Py4oekEyZkBRZCJ9Om1gdHBKZD82I3ZSQi9ZLCgjSyRofk5YezNncFFtZUlsfENEUDRwS3leZUlsfHdsRi9fPSMzK0xmV2pIYEA5Q054VzhJIz05OmJqJSZ9YS5FIiVzYk50W35feF4wbT59TjZ4W01YKnE4MiZ+cHRZP3JXUkMlZGsqYzgoVWhbJTJdYXhmKSZZ''@;'; put 'put ''I29AK3BmRU99MyRiT0U6TzVVaDFFcmUpNVQ0Tzc1ZnBTYS52Wl5zRzEpb0d1WyVFejpzcD9za1Yla1Z3Wm0oaC9jXmY4WSxzMGFwUnFtK2JrZ3BSXjM6PjkwYHokVnkse2NdaV91Lz8uXz17JjElO2NnPHszRTVZR3ApUXcoVWtXc1ovWH11Zkd2dzdiR2RpVSJAWzFKdWdzTzJSd3cuKl5fJm11''@;'; put 'put ''Zl8mWXlOL0hMYmMmVUpTSX5UY19bNz9dcS5ERG8rInpOSVZUNyEqZUQqenwpZj5ZfUAzRXYoZjQ3fSFATV54QUtWclBBL0xJMCkwbkVoaVZrbWIhOyx7SzlYL3VOeC58IUAsOkR5OkVLWW9pLmtmZUliSCZ9dVd0UEtTPC5yMitnfm5HXyZ4T0dtKW9OaFcsZHhqTUc8PS9pUGw8N0U6VSZXUUdy''@;'; put 'put ''QF5KUkJBc01kfkRSNzdEdVp3aSVHcDhpO1BnQW1CdlFpejNLV0tSZXJJMGFua2xOQnc/MlVGendbWkMuWWxeSFE6PzN7NS8hfSxeO1lreldDWig6WmR3NWpYRER6eGtgUHxEWXx2YT1uPyssT1VVMXNyamZRQWMwPlVtPGxBNmV7Zmp2dzdqa0NNW0UxY1Mza2tJbFRwd08hfWtfXVZudlVYeG80''@;'; put 'put ''bUgwTEd6OiRdIVI+OV4hZUBpMGRtcUpVTHl2TkdURH56NTIwaDE4bWxjVkx0IU5ZV248cD1GVEJ8SCVFOn0sZ2xbMDh5c2F6ekIjbHNQeHQ2Vyp2ZXpbc2F6NVNTbV5icE1RLyl5MDBmJV5VTWlHP2RVe1hhdDNOUy97U2FuYVhGMWA5PEt2K1FqYEF9IiF7Vnk+SS82ODRwNDpXdiEiSkZ+MXkr''@;'; put 'put ''U25BNmw+IjpXcmR1TGNqUXw8MWNQKDx5RHB4OUw4QD52XXl6ZS4lKVY7MVFKXyxIdGVqeUxALFtlak95UXdBYnkhcVIzLkh+SCxVOjxCdk5JfnZWYHt5UEQ3MVZFXSE1Q1J0fmwxWHV6Ik45e2giNzNoR1MpUGJfR1VzSXRCI2xRKWQqfCMzVldJdXR9c1oxQkt0YmYiUSxXXz5qPFhiaXUlLmBl''@;'; put 'put ''M3l8NStiSn49YGVEaX5HLGA4fmQkPnxyZzIyPjcibF1kfkg2YH5hM2dMdyNeRU5OWnUlYUNYMURXO0J8V3JULkc3fXUxfCpPOUVkPD85SE5tTCp+QEpzV3ssWEQiSXJfc2xjT00yYDU2fWhKfD9KXUIiSX4oI2Z4JXhMIWR3eGBwT0IuImMycSZXVzw0TGI9enRfTnw+PTw8dzwuWVhANEszR1Eq''@;'; put 'put ''aWZONzFDRiU0LGIkd2UrT09PZ2AoMVZucDMlSXkhRVJERnd1XmpsZ04+aHpATXI/NVllfGd2a0lkMWhhd2FdQXJjW3V4T0NnJCZlKl5qWF9GRWFlWzxJQHE6U3VeJlkpeClNVjZtWDJxbVkzcUc9KzokYWdjKUdTeyReR1VFY1kiZGR1X113JklpJVlhVU5bTGBDdz1TbSIxT0g+KkxhKj1kPzZp''@;'; put 'put ''ZHg2Nj10enl5K3czRmQmTXp1fmpITV9idi9yXkNQal5PVSNLTylfOjE8V0hyKFk2QUR1JVphP0RnV0s+X2IqXjtEckxFaEZxPSkzMT9aTj1veFBkTyolVC8jQm5gSGUvX0NBcSFWfTt8dSx5UixfUk90YVt1OSxiS1I9eSFleDd1SG9rUDBBX3YqKVlKP2NSdGUoK2NqPDwvbkEmflFoRzAjJUB4''@;'; put 'put ''c2lQVjojbjojUTtJQylpXi4yTi9bWDdZU2xzN2dlflRHalJ7W3VaazovKmt3T21PZ2NRKkI1RnFaSDZTMFBHL0lzJD54JGEvaX1JT00rNWcrUldfKEJRQllAfmldW2BfdTEiJEdeIVZDWU4mVHtuO3MzcD5kTj5tOS93NnpgVTozYj99IzhwZSNzVkI1UGcjLzMuPHZALlJzJXBrRHlzY29iOCxD''@;'; put 'put ''I2p5RW1wbllEfE9DJDRnPnVfPXd5eyNlTykkInQ6JFpnPipeRUdJZ2haelZJK2kwTUFBfCgvP1VjQ0VoanVgOGYrQFc7PCg6elJRNmQieFpIWCJhJGVRaThSS1MkUFd7I2VjZmIxQ3ssRy9eSSQ/ckdOUHRhOUVFa2QlZngvYV5wTktLXVY7djw1T3g6ITR3Y1NjI1J3eGBOcCRvVzlFQUh9WXh8''@;'; put 'put ''eXRKXnRQQV0kcnoydiFPQGd1V1B0PUxbe2w8Ly8xWnxpTFF2LyxUUyMvSXVkSkJpQVR7LjsjRHBYQSExeWc+YmRGdi81RmBPdSN+YC5PTCZUYy9vSiR2UU04QzpBJTcyPE5qPiw0NUZCNz9MTmhqeWlfUzlPMXl+UUxFP1MveVQ5M3ApSWNScCRCR01UWlJ4VVZyVE1kdVlLWnBKPXl0fF9gQlJL''@;'; put 'put ''InF8WDtqKXg/aUU9QlF9S006OU4rRFtOMl9QXmwvW1VgKDpXLCU8SXQwXW1xUzhRPGBxTUsuYWo5Q1dNSEs8SV5GIm88XjFEaEhdWV1qVX19UnxhdTgwSEB4aVJseXZCK19oTGhqUGxSNVtebk4pODlSOElWYlROXyZiS0AoWS5uXlNUfmVgbjB6VndUI1ViVCUlSTt8I3t8PyIvdHFYLF8xUTBB''@;'; put 'put ''PGh4U0xtRygrXyNAbzZrcyx5eEhTYCg2KzVPQldoQ1ZbKm4rL0o3ZWgmezBuM3hYTVEzLnhWakVGTmo3YyU5ZnhufD1ddWdZK09SRmgrJn0kOV1CNUhOc3p5YlM7P3BsPT1hcmY2KCZIX2tUWyQwWkZSP31tal46Kk1PXU12S3d8ZXlyO3k8UUh6ZmJKVW87NWpSN3dJQjBNcjxRSCxRI3VaJD83''@;'; put 'put ''WU5KbEZ2ZWl9bS9bayozOVFtZWwmaldgNj5+MmEqPzcpcV8lSkZMVSx0MnM3Yz9IIV1GZlQjIVsoISkpSUYvJmFhTy5PUyJCaHVGdm5HTUhhbklhQU5ePk5bUGdVMDh3OkZme3d4YilpeXw/blRiQkdadWo3KzhUQX5nd2V5TDU/RWZMJXg5XjI+aXgiY35eaDM1fjlDNGBoSjk+UjBZNURGWjQq''@;'; put 'put ''YmRkOXJLS1ooKElddjcyVGF9IUM3WDdOZio8XlVQdCNnQiZebVB2I0dDUk9+R0BDUnVebkIjPGJFRnxBa0l9TCtZejY7ZD5TJH42Tmh1PGleT0xXMz1KTlB4Pi5LXzhUIjsvMn1KWTEodXZPVk5xa0B8N15SUXwzRTZ0SnszVSg7P0djdDBjNj54PWUpMldlQkQ9ZVdpNjxYNn1WamEwN2k7cjEq''@;'; put 'put ''Xkp6e1pnLj93SyJOdzxhRmNqM3NsSy9NVzZZKFNEfWtyVEwuTFRxanRfR2VaKCUrSnRJUXxmaG0rfEJEP1JMXTMkITQxKGBXNipTUjxXZ3JHZC8mLEs8QjArdV1IOWR0Ik1WSDc+YyY0SU9ALz1lPF5jRk1ifF1zcEd3JWMpVFE9TGdaPnk/dmlkc2xgUmxkYzw/QW17YSU9MiRSVCk2ZGE5cTZN''@;'; put 'put ''Q11SPmIhVHVMdGpwNDZXVkAoTEhibUMlflAxVUouLm9jejM8UXYhcmIsfGMlfmNsMFRqXlZmdWtNXUE2KDwyKlN5Qi9OYUtnPDZ7ZixVVThUQ3YsQipYant3Yk1GLDVga2huWlBjUERHWS8+MTQ/Rlp1MHdzNixqbnFvW1c7cj5Gd1p1WjBzQiY8UEhYQEgieCFxSDVWWm83RF8iWUohQ0hfYzhu''@;'; put 'put ''eChoNFpOOD42fkJZKDpCKUQrKzUlPG9lMj4mJUJBTSlsTVJtbVdLVFQqRj5TNTlRcyoxWE1dcHg2RD1aZl9kKWxjK09rRXFANkFZPnh+InpSUDwjXSg2NEZWTG86aWc6MXI5UEI/aX45dGhAbj9GI1U5WHxBLEBFRW1SYGpiLksxIWJJbzUxcm1rUCpkZWY+UD5mTU1va3pAeyJaNkosYj5bZkwp''@;'; put 'put ''dn1RREd6WlpuZFhUIlZ4PnlaYENOSnc4NjJzRWRDeGlrdSpSekBUYXEhP0h7ZjA9NDtiIkEzeEtXfGlCTWdJYW46QVBBPS82R2UrW1g2eHZvXihnZCpiYTd8RzlOdmJKaHBaQXZQKE5VO2ElTG80TXpkK3VJPHd7YUgmckY/PytIK3htK15Ye0VidnM4dzlzZzFMOzErN0ZVNmkxWWFJYyhuPH1r''@;'; put 'put ''WWRtJDhqfUwhdmJdZXsjMFQjSWFKWEJGZUZedF00OTVVczZ6cCR0JTRJaXpeQ2BpPF9HdWYkLjxfTnpYM0JFdi4udEJPbDltYktWMGFBJmtmZTZHaDcwT2JuV3YjR1FPUj00K30yfEBXcEp+K0BUZF5EX1tZTG8vdkNXdD5rIV5jRXI3UTcqQmlAOjdZVVYiRX55TVl0eXV8RWNNPSMmIWhFNkxl''@;'; put 'put ''PTk4fFBaajthZGZYTXFQMnlmcyxjclZueDsvT1BARzU8RD0yQ2N+SWdfIVYpeHQveEQyKHFhKjtSQytYPipueEl8NW12K3RXR3BKQUFtcDsjYHVSUS4hUCtoc3IsRnhxTHtibVYmWyJ8SXdlSE9IfEVWajp8UmBoVChCYUN1Qi9NPytzZHtqPEBaTnteIUFiIltTbGlUQFUpY0NdeVg8al46N2A2''@;'; put 'put ''XzpFe1BgWSE7TF5Kd1ErbGFqRE4+WmgsT0xqYXRpfHxeMGYzU1dVXzp2Sn4yTCV+aTciK2k4MDxYPz1uUzcjRDNuX1RNN1A7JHtWcSViYHo/XT5falIuQW91W2t2d0debnIwc1dbT0dLdkUqIT87bmxuOnY/KTQ/Lm5bVDdyVVFHX1ZCanxrcnA9On5UbiVWYGwrRG5xX0p8RVI5ckNjPTAhPSRl''@;'; put 'put ''aHFrIjY4fj9KPSZsaGBTYUdJXTl7LyRsPUUsPzlQRVVJaHU9XXhfPWd+NHU7antLfipzPkVYZmU7QUI6SFFqWWZAYG1uPGdoXyxTM2FoX1FwRn4wdm5JRlNEN1owJX0wMlQqXnpoMm5qcW88LCRTYGFHKSFEKEp2UWJKPl93NEpJOkx6UUR0RSoiQkFSeUhWYDV9XT5MKlA0ZXJmJT05b0RVJSss''@;'; put 'put ''O0BmYE1Vfj5gfi8oJjkudyNZajQpY15MPEdRPVZARXhzKn1GS3YoKXA+SGh1cHVyVTNKaDBRblgsNDZWU1E0YSYmVzR4a216dV4sNCYsOHBdZ0hod3ksaSxJQiNJNGNvYyFYL3NFXnk1SXkiWkkwfnM9KV4qbi5gOmwpSGdSJko2YSVoWHdHXixVZz5TRTp2YyozZSFNJkVhdkkqdT8pX2tfVX59''@;'; put 'put ''eFBXN0E2bUZ1ailtPyFuPSROVkcsSV1VPzhfYnx8bWN1QUhEUmJxUEYkLEl7LFRrOSgyaUIiOCsoWz5ubnlWVTFdNC86U3BMX284YDd4XW1uOz17cHQzPnpDKHpULzpvX1V0cEdAZFc7VHtIc1ooODp2cy5YXmUhcjpCb3QlXXBfVnE3Lnc4OV1GclIrbTg2ODQ5e04xNVc+Y3NVa2oxals5LmFH''@;'; put 'put ''WGZ2X1ZXMzszfVl8bjkyZUhMeEZPbWllPCE2SWBhPzEuRndDeyFqMTglN2pRUD5uSikmOHojJXpfUF04N2pRUCZMNiJFSHpIUWphbFFQbWZOQSVlQzhyYDthImFzPmEzNGl1PG02YVJpcE1sT1ckQmBfI01FbVMyPUpWTnJCPGguSUEpN2pNUCYiIldBWj87KmhKOGhle3R7NWlhTlRaQTc8YWUh''@;'; put 'put ''c3UsPk59PVs3Sz10JDs8XiVramltS2JDYX5tQiI7VSV1KHlQRHxoQVNyWUBJIXk/YTJpLkZMUmF8YjFoJlI7RzlAbjMicEl0dElPaVMjQmg0QFB5V1ZCPGhLQ0x0MiEyMExPbmtwVERrTH04YXdgQmImUnFqRmJOMkxUantvakM0cU5ua0cuMDJZZF1iMnVILncoaEwsSjwpSnR7KVNBaGd0bilM''@;'; put 'put ''WUl+LD1qW3MjXTdkOGl2QiVTTWJhamdRVGZEOF5oVUV0bFdja0pkLEVpZkVecnU4Yyp+fjEyRSFmRzY2MUUrWUtFJkRXPF5CWDYibFo7RzY6Q0JCZW1+PjchOWNQYXksRTMwQFBifWNOdmY0ZTBxY25dfDosMzhpV094VkIpSzJyUH5sfkQqREplSThCZUlQeylrWUVETU1YPCZhcWw/aDpmKURb''@;'; put 'put ''YlFhN094YiQzSWpWQVtiXXRyZGAiYyVtNDhzfGRzM3NwNjhrdls6JWJXU2RzS2c7Ynx8YyYpaD9+Ung2fUFNISpPTDNfRHcwSUdiZylMTW8yNmFJNDRkSlFyfVFOe3RvVi5VP29USno4aiklS30+ZXY4SXQyY3w4WH1HV3J1bn5+N35zRiF9PDRqd05XUj83RVBhV1NMXW5MQFs7aEVjblVsfG9u''@;'; put 'put ''el5aSn5xWGJLPmUpKDtXR1JTIVh0fjJRZm54Xmg6Zn5bP3s/aD0hVF9+UlBmbnReflReP0xHfUxIQk9vaXV3THQqaSN9d352QilmSzw0Qk1VKWkjYFluI1N5fXklezVUUTxDez56Zn59OjlUJXtud0BdIlRENypCKXM0QlVMbjB6R35zMj9vRkB+NDF1KH4pQiJZPV59RXgzPkBuMXI8MFtLL1sl''@;'; put 'put ''Qzx8SEkjfkIidHt8bzlYY2o0UE5nU28vP15GcSYoNFJGO3ouVz0mR1FocTRra3Q4OVd4X3JUVyslUlUzVFs2KzBXMnMldiE7SSlmSFEyVi94fGRzN3krUUh+VThjem1MS1VOKmlPJkk4eCYqYSYhJFdFMTgyY2ZRbyRuXkd3ciV2fUxoJTpadkZSZEdEcVN3YS80NFIlakMkLDZKUE5vfTRBYzw2''@;'; put 'put ''RDxBWTsoUE5nMWkkRkg8RHpQJVtONXtlczluP1UzJTslZyFUJHhTT1soQGchUkFKW0UmUD9PWDouTmZDb0sjMDsyPjFtbm9xO0diREdOdk54aTxSe2pXUSl2SGRsLnIhMWojdiwlQG1iSXJAUmg0d3tqaV5NTX45KGVSXnBsV3t9L2F0UCN0TGNNfDxJM3chanRdTzt1MyVgeVYpNEkhNmtASysw''@;'; put 'put ''Mz0wNUJVOFBheEhDbVRgWG0+UkdqPmNxNyxFV343ZmdtREYkYTQ6OkhMfjk2OEM1KWNMOE82VF8vZXgreCs6PHg1NGJaT1QxQGA3QXIvQlJUOj1GSUxycilRLFV+SmdqNVY5PDIlaSR4RWllZE1tUTZKbDIlcV5nS0lqeFFtPFkwalZ1QkdHNWdjalt2V3o0MzhWLl55OTVJTSVKbllLNz1eVCZW''@;'; put 'put ''XVZLTHhPS08lJTI6IzAmUjpgdUA4c2pHWmk/XSZrYnpJK0UhQWw+OVFZfmMoXSsrcHNeXlpRfE5DaitAYUgreWlXNGdYM1IqRmpCOjJgbzhtSFYwfkA6cWs0XSEiWjgmbE0qbFhKPzdnfF1SLkheYm9dezc3WnpaezUoUjRuNXcrXlBOOWUoWiFzaXg0d0BRaT13eHRRSC5+YEFQbU06aER1PDx+''@;'; put 'put ''Ul8lUCl3bCIvPXllX1ZkOnVJP109ej5PYXFKUlE4fHtJNXc1KGZtQiZ8JVhISVl4WnpAfExEODx4fV45Xkl9Wk8jTW9INHo7P0BHSiV0SytQZXhQJT5jOTRjISttX0UqJSY3JW0xYU0lZys3MXVDSFRbPWVhXTBYWGgmWTBHTVZIeEpWfDIyPylCMmhzOXA3Pj89eVM1O2lUZHV3YHZ1PT8sSlJH''@;'; put 'put ''bC5AcigobSQzb0xiZkZGNkFWVSE4ZDBxYiVwcnVmPyRCe1pAI1IhM2g2Tls0bWZOXldecUIwUjtDS0BPaV5ecEdTZnlRQXQ5Y1hjUltVWjFQVElkZVBmTT1UbipqNm9Sd3ZLT1hOSlVlemVvPldjS1g9KykpdU0/bUA5c3VXZDdiOU4pbHRASXRQRyEmWnVvXmtOIiJjM0x7KTwiTHpEJGN9LE4r''@;'; put 'put ''TTgqaEMkZ2VCKlJ+SzZ6dVJ5ekVwKUUueksrZEU0VU49Im9abUNWUX5YMnhwe1I3S1FNQlEjIUF4d3o4Ll5tNEJga0F7VjpeNUlrcEcvVnA4XmFaaSVNU0coezM9JjdlOVEmbGI/Y2VhaCpSXm1GRUJCODJIZVskNnBpT0g3e2xqaU1gSDRRfGYxZDAhfmw6LE85fDZ1MGxjbDJzTTFMa0BPM2U+''@;'; put 'put ''RSsqKk9pLE97cDteRykkdDx2TzlRWylmYSJHNktvTSlJQmkpZT5NbSs0RyEyWHU7RW4/WzE6QTRPOUpbQSkqL0I2QmB7NDxGMzVwSywrdXhDKXNheWApOCxSaUR2aVFgPX5hQXFaQXBjcH1RMkRDdV1VaGpgRCtFWCZpcnBaOH4xNy5PeU0zJklPQ19jOXk1OHkyKCg6RV5MLCxpQ1k2WXIpZl0w''@;'; put 'put ''bzJlQGJhejgyKklAY0swakY2ODxMN1VmIyRaL1hqXTpGaV17WF47RG1qWDBwKzYkInB0dUN9Tywya3c+aEpQJFhTb0dANUVdWExOcnJZQkZAcUtgeVdTby9fUlAsdlMxN19RMUhYNnIrR2hPSntXeFplQldiUnhWTkFuMntwcy9oOH4oZjxvcylFRClMPkxDamVAfjkyNUF4ZTo3SGZKTGpAL0kj''@;'; put 'put ''eUAlPDlIPE9vemVqXUc9RXYhfmchUltBb2VyQ2p+PFk1Rmp2KzpVWXhgIkwvI3M9IkdGKWchbE9HSlhoc3cjO1tRVC5aSGo3WX0ucl97MThxSUtzVyVNPXRVYj82TUIuWSNkVj16clpuImBaNisrNWIrbS4zdUpCcTApK2dFUVZpJEc8VDA3JExObzZwSnRgLmtMRCIiMXk4Mk83Kjw8X3hMbGwj''@;'; put 'put ''Q2dae2hIbzBvQnN6Sz15YVlTXjtQR2h5PFQwNmdkUmswPmNPLyhEXVl7RlVtSmFVPnspSFs0Jlt1YmVFUFJTVnlXU1UvPGsqX25KM2cib0Jud15NKSssd0hqP0xOZnBLKnp5b20mZmtCemM/Rip7aX47UygiJTRLWnJLc1BGJD4vU2UwS1IyKUZ3bVsmdWRAdD5XKj0uSj1ac0NXejBeISF+KyJK''@;'; put 'put ''b3o5VkpuWExMRE8qR0A3YlpFQm1fUzN7RXAxUUw+YFlGTCJwNFd0JVYrLlRQNVBxMnxHeU49Jis3SHI2N053REtVfm09MWt2WVl2SG1ZLzdVfDVZMFp0VFpuUE4mTXo6ZG92fShOdlg1MnsqKjFzWkZQSmhZWiteSS52V1slP20kSixdR0twO0p9PkpZWWQrcU18bXBFVyldY1RlMj5tTEkyXnAq''@;'; put 'put ''Nn5QaWwxVTk/JGJCRkt0cC9ESkpVeXpqMHZeayZJWi8sUWpPa3wzdXh0ajlaUE51TVEySUtCbiJFU0U+ZyI0WntBSz0hZlZjIVY8OnxgMDMhPWxkb1ljVWEjckdTL148ZiZLNlp7TkwkNUkxblJrZD08ZDRLYm9zempsWkohY31tU3ozdj9aUX17OjtnZ3RkNVVPUGs+OnhTQWZlT3xLYmhLWEV6''@;'; put 'put ''YGo3YzZvSSVAPlk5RmQ7KSRMLEtkaHwzWXpOcXE4W1t9fSlLSXc3JjlSZVBTSjh4IyMuSiM3bCxRPzlRWm5dTTI8M3Vma3Z6ZGp4aUJyOFEvXmcyM09iaClYMEZzJTZ7ZWhWPUVZejVTQXx7bVlIUGp6c14ieHY2Qko1OChkfGptL2xrMnVkaD46UXA7YnkmTXljNk9jIUNZITRaN2A8MWo3IzVa''@;'; put 'put ''PTFXam1mWHs9enZBMTUodTU6el9FTG1NTVdSKUp4X0ZyVlVjaHR1PmckbnVjND0jOmMlO0ZpbC81QlhEeXJSMkVraVd6QV90RkBMXWNzN00xakFgSHg8e2AvWD1RNW9iYDJwbnZuWUM+WGpoOnIua3dCcGZCRi8+Y3QlP2tla0tRTG09TmEpQUM+YWZfLzB6MyZBSjtUJHx9Uz1EemQ8Zkl8KS56''@;'; put 'put ''UFRTKk5MTD8+RXxqMHJDZD1qNTNIWGFtQyxVeWYhKV5ReH5pMFdFd3dpdX0pRTwzeF1XXztPUXVrL2wsKXBTM313XXFPSlRrOkdhYng3aiRBREUjTnJGfmlNXzwkSW1IeWlCR2k0TXVBVDoyP20zSWp3WFt4P2JMW0lfSjwyNlZve1pFVDNRc1FZaTd1TXF9aU1XIT1gT285I1c3OGxiKnZ2VGtl''@;'; put 'put ''Jm90KGBkPGN4YyJMTm0ySlMmY09PTEs1ZC98SipPZl84Q25JMF8qaU1SSlJfO0s8bFZaZl9VMktGJFBUQixwNW4ha3FFMHMoYyU8NjJdSkxqbHkkWlE0fXZOcTR4R21+YnFrTWd+JjVYZzkwcyJuWkozN31DPj19elpMYHQ9KXVUU2NnJG5aUEJ0cSN4OXROflZ5N0Q6d3FOWyROK3VON1hJe1Z5''@;'; put 'put ''R0IySDtUPWwmYlMoYSlZNzxwa3dLTnZAcl1vS1dpb2ZoPV5VdjlSJD4oMCxoMyRMPWN5ODxwPElGdEAkYGc3NmpBfG1gd2VuOkhmNV5hcHpscjMxTS57djRzSWBDRkx0UGoqaFIhdU5pQ1o0Mn1sa1FSQHAuZUcxe1h1TXA8RCgsSXp3RFoxSEMkLDYsV0BSS243czpHMlZNRGtfVXlUUTYrYkZJ''@;'; put 'put ''KF5rNmFsTypOTCN+WVl4Im1UQ2N+cWE2bUclJiZrM3NQcl9Ke2B5dlguUm1EaT4+fSh0QUtyPT5MP3tyKVd0TjoqTCw4TWkhLyZYWiwmSnZvfCopMlE7IUpoKjpKVm5+PzokP3ZTa15Ra31WQnB9V0AsbmB0enU6JWd2c3MvdFR8ek0hSCtRP241ZG86T10heTlCOD4mZEdSblI/T3FrMHhzRSp3''@;'; put 'put ''XXNQb3FOYUYyaH0lRVk+IXVXfXw2Wm1pUUdAJEYwUVhndDZZW3RRfH1hRjRHeHdHKmliTjhNPnRlX0U7LHZmSSlrJCY9QiQ2YFhRfCNWQD5SN35aSyRdTTV3NFJPfjtwVDcyLFdYczw7UntXPlhbc1E9PFVGfXlsUmc8IjRvdiZmZytFNVpMOW5qRjJsRiFJIkU3Pi9yNDc5PE5jNUpNSGxhXzxQ''@;'; put 'put ''UVVQJEZYUVk8LFUoTWtmYjtmZz48V3FVUT9PRVV3YVpDdztuLjlvUWJUTTpHJW91bCJFJX47bVckOkA2S3lMR0RlWi53JnxjJT53TjhRd3dRRnw+V0Y1ImAzby9ZP283SHpRYjFbbCR7PkBVW0g5b2ZQdkVQfisiQV1LLGNuLnR3LiMxUm0pQlpSdyVYcEI3PjtEYVMien5WOHk2an05dXJTezdn''@;'; put 'put ''UURZPFpxc3pYUFlQQFE6UzhUdXJ6WDlMR3c5UmQ3bnp2Kk97N2d3T0tPZCNZMnxQTyl8Ujt2ZG48K2dFfG9vIlsxVWAyZTd4OFRTZntJYVlCZDIhU2ZYPktlMHNVPVBJYU0sZiZXdjEmTDErbH48XjhTXUIiIjNNZkUqX0JBXWFuLipASGRKaV1qKHo+NVlMXnwmPiVVckdrSH5JMytaeFVDWER0''@;'; put 'put ''L0JxTXRSaElZPUMxLFJKIXksTjA+b3Y2JVVkSlkhIWQwLHlbQz8oQnEwNVROYHxhdVdTejR0dmtZZl9CWCp4YGdYaTlSUSE2OmtMUHtBaEQ/NXVQdFRYazpSWiNJIXtCcTlNV0pSYDBTSjtxeURTcWBCcWlqalg6WV91Lzt1YXYxU0ZiKE05XUBuKWhMY2pLKXkucyZGflgxKFgyTT8kZ088eEl1''@;'; put 'put ''b1V7JEJxeXZJNz10JVgvJSs1c3w+VzZ9KWU3UEE1a1I5WCpMZ2MlTDA2RF80IXdtVSFdOTdUdm99K206e2IiSSt0ezRxTyVqWk8kMEs3XTNhZT9UKTNXRz5pe2RNZ1VEMXJ8aHdVWjFiOiUqYGJFYi5jNj4jODZTbm91Yil5Jk43cHhMPXRdM0REfihENF9ENSlDTi9XKEZkc3V6LywzRE9jN1BB''@;'; put 'put ''Rm54OlN0Nl0zQ0chUiNHJGlrZmlFTi8mPGlfIVJUeX1nMUVvakdKcno/X2lfQXI1QVRxeUEyKy8sRlIqWz9zWWBKTUt4NmcpYT40LnUpUXMrLFZuVy9TVHF+NGdVUFhTV3VZYV9dVmt1MVMhNT1SPChGUmJsWHxQYWxeLjg/L3cwekNJNUwsKT9sYilQKV9NUHBsemdfL1V6SSJMKE5VcEhWUz8u''@;'; put 'put ''bUA2QXc+NWdRXmYwXUZRY15MaWQrcHdNS1FadDhUN2VeYlUqPXQkKyRgJUpyIVFqJTZ1eTkxUE06PlFAVl1aTDF0aD1nZFZuMyFLVn0wN0NsNk84Z3tmMEAhdkNSWCVsPz9PNS4vUlcjfTFqPD9qMz9KJXlSK2FjNjxuXWYwWlMvdF9VJGMvM1goZFhnZCU2YyRhUEo1S30hXSowYjZjIUkmNWJ6''@;'; put 'put ''TShEW01rNChDa2x5OHpDYHlobipPbWY0aHhYVXxnM2d3JTY2fSpZIVR+Pm1sRE8wdEd0Mjs3UylHbDFsTFMoZk9nfFhLfT9tRDVFaDZNKmJuWV17O3drOjxkZEE/RXA0NnFOfChKXX1RWiM2ZyQ+MWBnZGluaXdrX2ZVVEh3ZDs0UCh3NSlyM1F9bHVVVXpMTF87UzBafFEzWnc/ZyFoY2A6M1FF''@;'; put 'put ''eTNjbHtdOnM7bX4+aXZgKnt6Y3xnP2IqQTFmdnNKV2N7XXBNfWxsfjB5IiMjc3sqdDI8ZjFoXWolfWlSUShzdWx8QGV5JiVIaEtiaDBBXWVfTyR+b0lvaCkvPD9xVGR2aSxjP1BVL0coVXVfUFVYeFguVkpwUChzW3pxfDE0LEs3Y15RWjVuZzRZI2twPSxCYiw5fTlHVEZ+PGUpVkxfQ2JuJnVl''@;'; put 'put ''eEJQNH5xRFdHPmlOSmpfLkU5WFt+YjJ4UH1+VmBQQlt8aDYiSzQuIVQ9U35zKTdhUHgzRyV1NGtkQC8+YC9HeExffGFCXzsvYC5+OjltfGp9Ojl3Wz9ZPTlpfDBgOjlzWzd0NX4zb1dXNX1rYSlyQikibm9ocW4sO0FeXzY/WmRzeUpla31saSVtNF1+eklgdGksWHhoSy9OLzkqbHtdcnRKUk82''@;'; put 'put ''UChLIzxfaDhWL2g4PUIxTDR9bS5QKlI6fmhibnVKPyZGNyR1SElhY3tdP3x+X147JGBNPTo5MnY5RGNzZHE6X3FbOF85fTZfXl8qQHMuZXxUZWBfPGt3QTFyWzA8ayQ1Y115NVUucXF3QX1de3dRazY/WFUoPlg2XixSMD1Wd0V0KGdgZUNfOCksXkUke2NwPmR2MzZ7a1JEJiRhPztEcyMybS9p''@;'; put 'put ''dH0mOXs7OCk1UUAxUmIwOkdOfG0zUmt4ciFGcUNrfjZqeDpZKGVTKWJJfWs7IW91L3FqRW5zIiYsO21zTz47fX1YcDdEVm4ufH1oeWtKM3VpY11YRiFSJnRXTHxePyJnLjk/dUd8c09JYCFPfCgwSUl5cmtSUTpJJWM0In5xNCR0cDFDYXo8SzMiRE9TX19yPC59ZGRIRjdvOWslVH5TbCg+fWEo''@;'; put 'put ''OjlkcXxdWU9RKF5pKXJzVHNwXn1ZbX1dLnxNO147RFNrX2xTYCo/WTRoSC50bVYofDF0MmYoSj9XYlYoK0kocTd9M3hMKkc3PSl2ZDBZJiNAUWNfWkErVixVK3o6XygySzp9R1B8eEJvaDN3ZGBILEU/TGs2SShVVSYmRTRRd0Q0aCssTX5VKGYxKSVuc2RRTWRafENKYD8pbDo5KEBAKjNoaSx0''@;'; put 'put ''bXtkMj4jL2Q7NX1oOF47L1JbY31dN3wzIkN1STFTMT87XSJuWzVaZHN0Nno/IVg2PW8zbV11QjFoPy8kcj1iUjlXKmUpVHdUa31YRX4lMGRPanw5T1ZsYmBLWEg2JF54VTFoeEQxRjwyT3QxZTxvTXR+fm1OfDQiPjtGMU9mc2d3byhYP3hHPztPQG8xfn0kXT5+KSw8MmBfcXpFVlovNVMpfDFA''@;'; put 'put ''TDQvKSQ5InxgbU5kd3xyezA1Qyp+MDBqaDY4YGpELmlubkc7OjkifXR7YVsxLDVTJT87THA6JT12UWdyO2tDJkoqO0BoczNabDpiP18/MWhKPkYkVyhhQFpTTX5KOjpROTR9bEBeL0I7PDV+dG49fmFEZVFIUy98eisoaEVeOzBpKEkoenJifU8/cn54PC5RaE18NFY/Q3Z8fG5lS2JjKW8qbEpz''@;'; put 'put ''Sm1zRE8iIzt9aGJ9XS8mKz5oaSRJV3Jsc2MoQT0jaCxRdV9RUl9HImZsc3wmV3JlKGN7IWI8XVp+M1o2TWV2XUNHKSgpTERsLyRyIU5SaksxXnRGdSFoe11oZj1dWWxdKlhIUHw+SD8mVnopJWtzWCZYfWQofD1MQWN+PFMmOX57ZDprRH1dI3luaHgrNFZmZjFodkFkSDV2R0heO103aH5sZCFf''@;'; put 'put ''clFLSG5vPGcuR2Y9d3Z4JCM/WG8rPj0ydH1VMTlASmNPZ0hgR2JodG5vQVRze2w+Vy5mZjRgR2IiKFUlbEoiZmlTT3FtIyY5NChoS0xiMj5gSShyZU56ekV6Ij5dZl1JV3IwP3ReQGwmWmRzdSpfX1VwLzdmYzEpOiM6YUljNVFHcCU3IihLIzVKd2R8flJtTntoc3hucig1W2MvXkRQKCJ0KXJp''@;'; put 'put ''JXNKa3NVTCIjLH0oVnxseHxIcVVBPDIlcyY5RkBBMTw5REBAKlhPLlEsZEAmXUVnfC8wOSovS1AoO3hgKGwhTlJ+I0g3Nn1rYVAqWCQlXmtlaj8wLGxlKkxyQ2NfOUl7QDc9IVRwdWM5VDUmJUtmM1ZyQy85W01eeEhLJEx6Sz9WVVlnP310OkcpJWlzYUohVDgoYjgkY2NRKj5PU00vM0hvRzQ/''@;'; put 'put ''IVQrWnR5QHpNL0xURmY2MV8iUWQ9MD87WCM8bEp2ZyxuUWQ+SjJuUjR9UixoXiV9OFhIditiQHpJZGtPJTwodi5bMSlSNll9NndRKkExMmgkKihFUyhUeEBRa194T2pHQT0zS2ZJO0pheCY5dVhmc3pAOGN2Tn1TKH1sUCNCSkN7U34jZSQ2WSl+OCh2IVF+ejA1fmJVZFMic3xXTTZ8fmhiVzQ+''@;'; put 'put ''WysxZD9EYzhJKzcrfktwOH1gfixZP2Eufj86XX5FcmJ0ems0Pl1YeUIlfVNIQj03LHRXfSxeKX05UVBCIlM4c34rKDhnTSw9fjNXL2ByK3prNytdWDNASlYiczVGczc+fjtTe35PcmU8fX1PO0IzNH4mRDt+SjZxWyoxIX1hSEohY3Ntal9fJWNeOztfIylfOzpfVTEvOTA/L0syaEUqIWBAezs4''@;'; put 'put ''am5kczl1dHxSckt1KylXd2lMKjgpNT1QKkJTKmJORFB7Sm0+Yjs1KmNuRlBbQXQrQTxRP1ZQfD4mKEE5XipoQ2gkWH1mc21GQXUiZjROcnAjfU1LfGxrX3IkXzsjXyFeWjR0fClsUExbTSY5c3AhfWFgOjspeFBXSktWL0xzIX4qRENgTGt9fnkrQ35DSVtYVF1SeUF0cEZPKW59dUlZbCxHLDx+''@;'; put 'put ''ZWRzdmspcnd0Si95cG8xcj85PC4pX2E4WHcxQDR6Pzp2YXx+QDVDM0w2Q3B9YDA5cyI7IT5sQjgkQXtWdVZ+elVgc1EjVmUzfnx6JjR4S3l7b2xaV0lbXkVEfG9sL34iT31zYjFwaVlgOylffUFgXTdUNHNhVCl9fWhBVFc8b3lGcltFUlp8NGptTj8oJnxbalAyUCg6Mmx8UDUyaCJRVUE1fClK''@;'; put 'put ''d3N1WUxDRj5ZNSh2RlIhXylWeHdpTkxSe2lxQU9xWmlOUC56I0tMO1AoOlImd2R+ZmlORVE5YlJNMjEoY1okQlE5UFJiQjVrNn02VWRCPnQxZT9DJFNoWmZaVDZtIjRQVzZafHN6WFVbe3QybCYyPkNHIjIyTmJuTmZgS1JoNWx7SF1la3hGKWEiW1U0V3hfMSZjd25DXXMicFZ2XVBibmtPaX5d''@;'; put 'put ''SUcuKFs1SHZFbT45KDRgOXh+Qz9pXX5gRzY4IkBFOFF0Yk1TMTxMT0UzWWgocGQ+dGJNSXpxS1ZaP0I1KXJBUHxMSHgyU3RsOUdPamwyPmt0bHx1LF07e0A5fTdaSyouZGV+Kzd0X25NcXg6I3VqfkdEPz9ZKHhibTZ9M1pSKng6ViFodz9hZGQwMUF0PFtkfjxofGZSMzNwIWx3cn5PY3NhajE/''@;'; put 'put ''U1hVfGQkXSosWFsxZD8lOGZSLlFHST5WSTB7fiNTZHNhMXJ8QEQ2Pmx9NDFuaC5RVSEmOT1ZYWwqPnxIa0liYyFzSz1JYiw+SnFseHs7YShYMXdmMj5aR0JuXl9kMGV2bD4kYmBfezV2L1lpYDN9VGd8bzNoYyVyLE57TmolNWAyVS9fKWplc1h7U2pUTHovfl9TTm0mcXxTamVzTyQ5aVFFaEQ2''@;'; put 'put ''Zl92WUg6X0ByZXY7OFBQWEhILj4lfUdHYkcpL0BOKkJTIUVbcVhXJSp2b1hKQzB3R3FKMWU+Y2ZodGQjdUI2LlUhKkpLKE4sYWErZ0RqVWZlVXc5P3x3Y3wrWmB0ajBDbTxRYHd1X3l6JXgzLC90LzUwd2g2dCVrR08qWWRqXl5PMGQ4Xz15OkklYWZ4KzdZYyV1KnVuWDNEME5+Pn5LQ2RVLlh8''@;'; put 'put ''V1ozNU9EMT88WmBDJS4iPiI+Wkt4Y2NneG9fO3hfK2pkc1p6e1RKelE0XWM9P1NeNVBVTjc1Zyk6Zl1RbjE5fDdqPj89K19fLzglaEZWNWM3VHhFYHc+JjBZaSkyYm5STTI/MXJ8RkMpVSlQVl84fXJqSlAjc3VFVFRQV1l+azkrJXVHbi4xd3I8UywmdXZAVEZya2AzMU0sVVFaPEBYfGE5Oz8r''@;'; put 'put ''fDh9WzU0RTR8cXwsPDZjYGxpYlgubW5AOUhEZnNEeEx7c0I7RWd1fj5uJFh4WC5JaGg2SmkvNmJPait4JTA8dW92bG52Xmc3U1NiJGk0MHdmYlYxSGk9ODpdbCE8UXdbMiQubD1ESD4kUEpJUjJrK3drVVQ4MVo4OFI7MmQ/UlQ4Lm07ZihGZzslSX4kMiRJWFloKy4jQn05Ikl6OWJiIzVyXmc4''@;'; put 'put ''bzRuXnB1LyptSnE7VWNBWWBTW2FzKExGMHw5aVJSaU1HaEJjQUsqanBEKldpNnZacVRkU2NsckU8cHFrSVlQd0FSQzJ3cGtMRmpWaGdyVVRTUCIkT0klUzExO0k0a0F9QU43ZV5Pak5HXlc1KHBWRUoqVXJpI3kzQz1JdVJjMWgifDxOLzlqe25NLzlgPldUMWhwXW5RPkdWNShVYSg/YC9LMWg5''@;'; put 'put ''XUcoSC9zQX46Y3NSeiJfUSo4fWg1bHdieytEaG5ecXR7SX45YDF1b34lYmg2Z30oMmVnUmNOXW8xVHt2fj9nbFBmc0t+OWFmc0NbbCE7cUhTbXt2b1c0eyRILkN9d2pTV2MxeDpuPyt6dXN0SEcvfjU7Y1BgNU9YVztETjIiYH10KH1mWHpGKjBOMn1gKzc0fXdVUzRfV04yPn1rdGdXMzBHN1d7''@;'; put 'put ''QFojPnJ0TjI7fVV2UldfPXVqLD4ren1+I1JZUzR8aGE0fTptZmdVLERrJHNJbCx6Xj4qRyFKR2I/KE5TX1hyfihfandgTn4jLjhYJTpId2szeCV9eDE/Ljs0T1d4K3R8UnJNL2peIkJYNCU0YUNiM1AidHo3bmtPMERjKkVVVkBsLzthck99XzRRdkR6UEdVLk1MSDhZOjdURm1BcWlBSlsuJk54''@;'; put 'put ''TGRsWFgkV0hIYzdmSDp1Jms4JT5GQHRFUldiO3drLjh0WUk5SigoMDpmcjRAV3QvJXchPns0dHM2ZEZaOFdHY143W2V0VVpmX34hRFB9NjFFe3FEQ1t2UUciQDViPHVkZjRFR1hHcGshNCo5WiR0MkJyT2c1W3dOOlVJZUkkS1tVIjhETWQwLkRgPVohNXQva3VfXl9bQTkqZkBdRHBhOTQscShk''@;'; put 'put ''MER+Kz8/I1ZvZixIUU4/LzM2Mmt1UVpxXyhLL1FveXNQZSk3YnQiOXVFWjJ+SzIoVnhVQVE+JWFtei9eJSRbenQ7MDR1YlFnVD9beHxtSCImSyorWCt6XnRZcTJ7WyVlZCpgeGl0LjZCRjM8fHhaOX1SfDZiWEFyd2RmaDV6IjYiQlBRQH4iM2NaW3RrYk5fWS9bMkVIT2g+RzBHZj59Q3BoMz4k''@;'; put 'put ''aDxBbVRPSy54QXg6WHBUMHxqPF1hRGhpbCYiJDJkUGgwaiw+UEtkb29VVWJ+TSQlOShDOn5hN156X29yc0ZRZjBGP3M9OChaSzFzMUgmeSNqfE8jcVRINmdJbztgZ3IuJnk0R3QvW2hRdSVSWVhXcWZxd3lxRzg7Nks4L3Nad3VlXk0hOTlRbHhdJCU2YF4jZjUkYmQ6JntseHcqbmIxe2R+T3RX''@;'; put 'put ''eT9bbSUqTl1jJFApeTYwKXNvNnUsaGF7JDtVZCRvK2dNZiNfRXs4dV5BRntmI019JGhQdl43UFFwYyRGISRBPCptUVtielM+TmBQLmlKLkJxXm00RDp7I3xkWC5uVGNRM0ouL2AsOUZ+V28vSmliUH4lIStpOll7NG16XVEzdHlMRXokKVpWJD80SV9RLEQ+NWZYOUVCdVhTejsoKl12YzFaQjNG''@;'; put 'put ''OV9INTQ2PkdXWXYsNl9pdGZlO2g4PzR3e1VxMzBFazR2Vm55OypuTUpxbzVPaiZ5LktfXmw+OzlxPCZtQmZ5JUo9VypmT1l8WjpkemhueGRPS3JrRmgzcDNfUERZVV8wSWlTXXs2M29nNXJ5QTNYfFY3KF16TEtLTFBzc3osX0xfeUtpXyhtdj1TOzxrSylMPmF0JFQuYCJnQlV5SHlben18Uz9w''@;'; put 'put ''fmtdfEJqQTxXaTc8SWc3dW5zMjxyXShNLl46Pk1ySjhfPHZ4N182UWlFRSM1cSIpalghdVNHTTJGMHhHNV9hTSNOM0pDMSFDIShTeFYuQVhzUXA/bit4UXNvOWFuXyw4WXlfZ3l7OUNNS0JVSXt1NT0iST99Q01CdCkrLHJ7fl84PCJTeUNsbkVQVkl8ZHZ0Km1mOkpKNyp+YFB5QyVFYXxCUy9W''@;'; put 'put ''UCh5ZVkldnxFNHZZamE5bCx1cVVwSlMua0l4YTpzSDlDKnRVUXRvVEZOM0dYK3YvMmdMLis2bltvLG9YVHokXz9ebWZsYEMuPW14MmhIPG8lUX4xb04qY2UlXSovTXAxWjlUdVdXNil7cDhLVXc8d01kWztyKypMNUkkMypGeD1XPU4qViw9XWYiOjxZYzQvaThFRFhIWjpuRE10JTx9PUZdKTde''@;'; put 'put ''RDRWRz8ybGA0WUBgYD9LTXpaRzA1Ok5EQ1olRDk5KVVKW11OIX03Ri4vWj8wKmZrb3pyNENSSSt6dVQhZk8+NGIrMDNLVEBMIUBaSF9mIU96UGIxTU1eQWNGJjpRS2x+IzV8VzxoTG0sW015dyFwNzI0cG5uUSZVeEc3Q2hZOGYybXYjZHB0QkUxTlpTQkMuTHlKUjRVa0A1TDg/dDUlO30obHtw''@;'; put 'put ''MF0rVHRwezxMQVghYzVbNExTY0JKQC9+eUVEKXRPa1A2Zy96YD41TEJxQntFc09ZMDxARjN8SDB2e2RwUiVwWj1IKl9TWixOdERWWTp6InddMilsbCRfKzRRbXR1bEo3VCMqUDxtbkl1P1ZxcllsaCo3ZnZML2E2Rm8oeysmey8vM2E+YjJGbkhgPTFAV2NiYF93PHVyRlVmTCxBenRlUT44Tl9E''@;'; put 'put ''PHAiN2BONCxlQU1lZTt8YDJyW0ZYbHMlYmBMdFZyZlhzeXA2Rm89QnIzIipwXnYmP2NPRTdFaWJUTURffSVqcGkuXnsvZys3cHdoXj1QMDBHLE5qcylGZjIha0pbUCUkOU17dj8vSGZ5eTxhIU1udXxYZis9MSlbdWoyWjohamgpWiZne3MmUUxERXRgdkxPTk9+L2QpZWh0I3NoTjMvYUY2e3ZX''@;'; put 'put ''KX1RR0t9bVJyRTA7aC8kR295aDQzTDttYltSMWNgMX5iM1Rdekw6NVpLdVklfmJsVnAqelo/TURiSTxMVzA8bTBGLEd6VzI/c3BIJXZSPihxMjx1L1p2e1R3UmFTMDUkVU0mQXoiMG11LmNAcjVAfVBzM1JfQkUmbnBdbWlbN2MkK3J5WnNYMndpaTt8R1NUc3JGfDI5PUBqUltaY1U2PDF+Ri9B''@;'; put 'put ''QjMzYj5jJDRPUXcvdE9xPWB2eyMuMjk+UGF4V2VXV3gxZjoxNzRSOkd4VnRTelh7I3Q1KDAoY0I4NTBDInk4RT8lciVpdCl5YiJUQ0ljbjQlcEl+enpScUEhP31zLF8pKXpvZSh9T0w+LCR7XmpXd0x1PllqdTxYVXlaNHwjM1tdTyZ8b3liQj44JGE5NzQlXlpgRHY8cnAyZklXTiJpU19rNlZj''@;'; put 'put ''YzU2MGE0S2hIajA3PytGJVNZInhMODM+I2koOEVqZGlRLmsxciVNbj9rV2tLSmROKiYvRywxV2A6VzYzfGUxS3tfNVh2Vi5pV203OkxgSzY1VEEoKSNheGdaTk9+SzNFJUdtQSNaezhmS31tS0A6RHdfZyw6Q0dpZWlmWUxkVTIpUWFiPl0xLmVnISt6ajFZNGEzQmYzZ3g2PGdGOT1DZEAqY29r''@;'; put 'put ''ISF0a2o2JlU9Jjg+RWI9ay4sbCgwPHApS2FAZ2M1NFVQKEImcXdYenVxaUJpeE1XRjhIYU0lMSR+TltpdmcsLyFYNF5Ae2UpaDdMaCl5QWRtY05oaGwjPDgrIWVUIWteNFolZEhNRj00UGprWV04ZTQ/SlNGOU9tcz5oNyFDSyphLENZPVAyWiN2P2I3JDdiYCtCKmQwYGg2W25Gbi84MXlpfC84''@;'; put 'put ''MmZETFF5dGhZWVQkTWRFRCp+LF0+YmZkQmcjaDk0fD5qTFRCWU84NTFVfTZqemFxdVg9WjI0MF9dVUNBSF1bQyE0MElGYnBlUWFYcncvSSNMTXIyOVsiezc9bVJoY3ksZCIzQUklOT0kSDMmKEx1VzksbXNkZD5DWn1yfElsLmZYQmpQIyM9NEpuNkF+WClHNWglQUtNUE9peEJYczNYTkM1UXRU''@;'; put 'put ''dC8sQ2RzZExrcXwkOUFMa2Era0d3eU9jKi8vbDdaayUvMD9KXVpEeX5FY21bNW5JfjAxOlN9U2RYeS9UPiNfSmp2fj0sOTQoO2l4eCQkJUJaSDM3QFUxN3NPbEo2dikiMl8lV2xIZHthZkhfalVmMj8jUihGbTZJYWd4MHJAWD1AcSg3eDhpY0tnNzM8Sm8zdVJxKS91bEM2MX11RXFeUk05JHV2''@;'; put 'put ''RTk1cCU7O2BkMGI2OFB9KFMvRFh3VXJpfGgkZVUmW1k/NUYzTClbL0s/MGM4ekBkVG9Wc0F7TzVobWs+ODcuMEp+bCJ+a2tzQWlnKkljO0dqT0NjXVVIckQlQnhWXXxaazk0Om5UY0A4KHYjKFkmQVVqOVJpYEQkRHJibG8jSmY0bHo1WyI6VnFSWHx1LChqdURFMVgvS1R3L1ZnaWNXcUgxNH5g''@;'; put 'put ''RWMxWE9IRUhiO0N6PToxK2haYy5rWWdYTSNvX3UlLHF4XiFJJG1uSVRyNkBKZEw1dlBCdEZyOik8eTZLbkkpQDFKdTM2QGtaQnQxTXlnblM9ZXB+I3YxPklRe09EezVvU2d1YiM0PVJJeTpYK1NFcVFnSX52OD4jPjM5SyJqI3x6NFFWJCs0WHVbYzFMZFVOdTFmUmJxOGdHXV8kIlROX003ckty''@;'; put 'put ''R19+cj1MMVBFMj99aT0qdDMjY11ramhJUmt8YDYqbU9hL0k+KEBAPnB4ZEElayFecHUpZ1F3e3ZyKV9OcTt1eltDL1UscklHL1BNNmN8ZHMuZmU0MCZtcjY4S1JeXzddRWZQQnp6M1F4Wnk9eUdfYVokJlo5d0FJYDsjUH5nMmUxamczIyNrRj9bM1YjWWsvdWMqJlkjL0goVHZ6JCVQOVpQc2E1''@;'; put 'put ''XXY5d3U1O1NCQEo9NUlpZldRWEkwVUEnKSkpLE5BfHwoTkE9Qnh0KHt3YXNtQmluYXJ5OkZ0ZSxsb2NhdGVGaWxlOnZvaWQgMH0pKSxOQX1mdW5jdGlvbiBZeHQoYyl7cmV0dXJue3BhdGg6Yy5wYXRoLGRhdGE6YDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFs''@;'; put 'put ''b25lPSJubyI/PlxuPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj5cbjxzdmcgd2lkdGg9IiR7Yy53aWR0aH0iIGhlaWdodD0iJHtjLmhlaWdodH0iPjwvc3ZnPmB9''@;'; put 'put ''fWZ1bmN0aW9uIEd4dChjKXtyZXR1cm4gYy5tYXAoWXh0KX12YXIgcjdlPWNsYXNzIEl3e2NvbnN0cnVjdG9yKGwpe3RoaXMuX21vZHVsZT1sfXN0YXRpYyBsb2FkKCl7cmV0dXJuIFp4dCgpLnRoZW4obD0+bmV3IEl3KGwpKX1zdGF0aWMgdW5sb2FkKCl7IWZ1bmN0aW9uIFd4dCgpe05BJiYo''@;'; put 'put ''TkE9dm9pZCAwKX0oKX12ZXJzaW9uKCl7cmV0dXJuIHRoaXMuX21vZHVsZS5HcmFwaHZpei5wcm90b3R5cGUudmVyc2lvbigpfWxheW91dChsLGE9InN2ZyIsZD0iZG90IixoKXtpZighbClyZXR1cm4iIjtsZXQgZj1uZXcgdGhpcy5fbW9kdWxlLkdyYXBodml6KGg/LnlJbnZlcnQ/MTowLGg/''@;'; put 'put ''Lm5vcD9oPy5ub3A6MCksdj0iIixNPSIiO3RyeXshZnVuY3Rpb24gJHh0KGMsbCl7bGV0IGE9e2ltYWdlczpbXSxmaWxlczpbXSwuLi5sfTtbLi4uYS5maWxlcywuLi5HeHQoYS5pbWFnZXMpXS5mb3JFYWNoKGQ9PmMuY3JlYXRlRmlsZShkLnBhdGgsZC5kYXRhKSl9KGYsaCk7dHJ5e3Y9Zi5s''@;'; put 'put ''YXlvdXQobCxhLGQpfWNhdGNoKEQpe009RC5tZXNzYWdlfU09Zi5sYXN0RXJyb3IoKXx8TX1maW5hbGx5e3RoaXMuX21vZHVsZS5kZXN0cm95KGYpfWlmKCF2JiZNKXRocm93IEl3LnVubG9hZCgpLG5ldyBFcnJvcihNKTtyZXR1cm4gdn1hY3ljbGljKGwsYT0hMSxkPSExKXtpZighbClyZXR1''@;'; put 'put ''cm57YWN5Y2xpYzohMSxudW1fcmV2OjAsb3V0RmlsZToiIn07bGV0IGg9bmV3IHRoaXMuX21vZHVsZS5HcmFwaHZpeixmPSExLHY9MCxNPSIiLEQ9IiI7dHJ5e3RyeXtmPWguYWN5Y2xpYyhsLGEsZCksdj1oLmFjeWNsaWNfbnVtX3JldixNPWguYWN5Y2xpY19vdXRGaWxlfWNhdGNoKFope0Q9''@;'; put 'put ''Wi5tZXNzYWdlfUQ9aC5sYXN0RXJyb3IoKXx8RH1maW5hbGx5e3RoaXMuX21vZHVsZS5kZXN0cm95KGgpfWlmKEQpdGhyb3cgSXcudW5sb2FkKCksbmV3IEVycm9yKEQpO3JldHVybnthY3ljbGljOmYsbnVtX3Jldjp2LG91dEZpbGU6TX19dHJlZChsLGE9ITEsZD0hMSl7aWYoIWwpcmV0dXJu''@;'; put 'put ''e291dDoiIixlcnI6IiJ9O2xldCBoPW5ldyB0aGlzLl9tb2R1bGUuR3JhcGh2aXosZj0iIix2PSIiLE09IiI7dHJ5e3RyeXtoLnRyZWQobCxhLGQpLGY9aC50cmVkX291dCx2PWgudHJlZF9lcnJ9Y2F0Y2goRCl7TT1ELm1lc3NhZ2V9TT1oLmxhc3RFcnJvcigpfHxNfWZpbmFsbHl7dGhpcy5f''@;'; put 'put ''bW9kdWxlLmRlc3Ryb3koaCl9aWYoIWYmJk0pdGhyb3cgSXcudW5sb2FkKCksbmV3IEVycm9yKE0pO3JldHVybntvdXQ6ZixlcnI6dn19dW5mbGF0dGVuKGwsYT0wLGQ9ITEsaD0wKXtpZighbClyZXR1cm4iIjtsZXQgZj1uZXcgdGhpcy5fbW9kdWxlLkdyYXBodml6LHY9IiIsTT0iIjt0cnl7''@;'; put 'put ''dHJ5e3Y9Zi51bmZsYXR0ZW4obCxhLGQsaCl9Y2F0Y2goRCl7TT1ELm1lc3NhZ2V9TT1mLmxhc3RFcnJvcigpfHxNfWZpbmFsbHl7dGhpcy5fbW9kdWxlLmRlc3Ryb3koZil9aWYoIXYmJk0pdGhyb3cgSXcudW5sb2FkKCksbmV3IEVycm9yKE0pO3JldHVybiB2fWNpcmNvKGwsYT0ic3ZnIixk''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5sYXlvdXQobCxhLCJjaXJjbyIsZCl9ZG90KGwsYT0ic3ZnIixkKXtyZXR1cm4gdGhpcy5sYXlvdXQobCxhLCJkb3QiLGQpfWZkcChsLGE9InN2ZyIsZCl7cmV0dXJuIHRoaXMubGF5b3V0KGwsYSwiZmRwIixkKX1zZmRwKGwsYT0ic3ZnIixkKXtyZXR1cm4gdGhpcy5s''@;'; put 'put ''YXlvdXQobCxhLCJzZmRwIixkKX1uZWF0byhsLGE9InN2ZyIsZCl7cmV0dXJuIHRoaXMubGF5b3V0KGwsYSwibmVhdG8iLGQpfW9zYWdlKGwsYT0ic3ZnIixkKXtyZXR1cm4gdGhpcy5sYXlvdXQobCxhLCJvc2FnZSIsZCl9cGF0Y2h3b3JrKGwsYT0ic3ZnIixkKXtyZXR1cm4gdGhpcy5sYXlv''@;'; put 'put ''dXQobCxhLCJwYXRjaHdvcmsiLGQpfXR3b3BpKGwsYT0ic3ZnIixkKXtyZXR1cm4gdGhpcy5sYXlvdXQobCxhLCJ0d29waSIsZCl9bm9wKGwpe3JldHVybiB0aGlzLmxheW91dChsLCJkb3QiLCJub3AiKX1ub3AyKGwpe3JldHVybiB0aGlzLmxheW91dChsLCJkb3QiLCJub3AyIil9fTtmdW5j''@;'; put 'put ''dGlvbiBGTihjKXtyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSxjKX1mdW5jdGlvbiBNNihjKXtyZXR1cm4gTWF0aC5yb3VuZCgxMDAqYykvMTAwfWZ1bmN0aW9uIGk3ZShjLGwpe2lmKCJwb2x5Z29uIj09Yy50YWcpeyhhPUZOKGMpKS50YWc9InBhdGgiO3ZhciBoPUZOKGQ9Yy5hdHRyaWJ1dGVz''@;'; put 'put ''KSxmPWQucG9pbnRzO2lmKCJwb2x5Z29uIj09bC50YWcpeyh2PWMuYmJveCkuY3g9di54K3Yud2lkdGgvMix2LmN5PXYueSt2LmhlaWdodC8yO2Zvcih2YXIgRD1kLnBvaW50cy5zcGxpdCgiICIpLFo9RC5tYXAoZnVuY3Rpb24oT24pe3ZhciB6cj1Pbi5zcGxpdCgiLCIpO3JldHVyblt6clsw''@;'; put 'put ''XS12LmN4LHpyWzFdLXYuY3ldfSkscmU9WltaLmxlbmd0aC0xXVswXSxjZT1aW1oubGVuZ3RoLTFdWzFdLGJlPTA7YmU8Wi5sZW5ndGg7YmUrKyxyZT1FZSxjZT1CZSl7dmFyIHFlPShFZT1aW2JlXVswXSktcmU7aWYoMCE9KHJ0PShCZT1aW2JlXVsxXSktY2UpJiYwPD0ocHQ9cmUtY2UqcWUv''@;'; put 'put ''cnQpJiZwdDwxLzAmJihyZTw9cHQmJnB0PD1FZXx8RWU8PXB0JiZwdDw9cmUpKWJyZWFrfXZhciBkdD1bW3YuY3grcHQsdi5jeSswXS5qb2luKCIsIildO2Y9KGR0PShkdD1kdC5jb25jYXQoRC5zbGljZShiZSkpKS5jb25jYXQoRC5zbGljZSgwLGJlKSkpLmpvaW4oIiAiKX1oLmQ9Ik0iK2Yr''@;'; put 'put ''InoiLGRlbGV0ZSBoLnBvaW50cyxhLmF0dHJpYnV0ZXM9aH1lbHNle3ZhciBhOyhhPUZOKGMpKS50YWc9InBhdGgiLGg9Rk4oZD1jLmF0dHJpYnV0ZXMpO3ZhciBkLEVlLEJlLHB0LEp0PWQuY3gsdm49ZC5jeSxDbj1kLnJ4LHRuPWQucnk7aWYoInBvbHlnb24iPT1sLnRhZyl7dmFyIHY7KHY9''@;'; put 'put ''bC5iYm94KS5jeD12Lngrdi53aWR0aC8yLHYuY3k9di55K3YuaGVpZ2h0LzI7dmFyIE1uPWwuYXR0cmlidXRlcy5wb2ludHMuc3BsaXQoIiAiKVswXS5zcGxpdCgiLCIpLHJ0PShxZT1NblswXS12LmN4LE1uWzFdLXYuY3kpLG1yPU1hdGguc3FydChNYXRoLnBvdyhxZSwyKStNYXRoLnBvdyhy''@;'; put 'put ''dCwyKSksR249cWUvbXIsYWk9LXJ0L21yfWVsc2UgR249MSxhaT0wO2guZD0iTSAiK0p0KyIgIit2bisiIG0gIisoRWU9Q24qR24pKyIsIisoQmU9LXRuKmFpKSsiIGEgIitDbisiLCIrdG4rIiAwIDEsMCAiKyhxZT0ocHQ9Q24qLUduKS1FZSkrIiwiKyhydD0tdG4qLWFpLUJlKSsiIGEgIitD''@;'; put 'put ''bisiLCIrdG4rIiAwIDEsMCAiKy1xZSsiLCIrLXJ0KyJ6IixkZWxldGUgaC5jeCxkZWxldGUgaC5jeSxkZWxldGUgaC5yeCxkZWxldGUgaC5yeSxhLmF0dHJpYnV0ZXM9aH1yZXR1cm4gYX1mdW5jdGlvbiBYeHQoKXt0cnl7cjdlLmxvYWQoKS50aGVuKGE9PnthLmxheW91dCgiIiwic3ZnIiwi''@;'; put 'put ''ZG90IiksdGhpcy5sYXlvdXRTeW5jPWEubGF5b3V0LmJpbmQoYSksbnVsbD09dGhpcy5fd29ya2VyJiZ0aGlzLl9kaXNwYXRjaC5jYWxsKCJpbml0RW5kIix0aGlzKSx0aGlzLl9hZnRlckluaXQmJnRoaXMuX2FmdGVySW5pdCgpfSl9Y2F0Y2h7fWlmKG51bGwhPXRoaXMuX3dvcmtlcil7dmFy''@;'; put 'put ''IGM9dGhpcy5fdml6VVJMLGw9dGhpczt0aGlzLl93b3JrZXJQb3J0Lm9ubWVzc2FnZT1mdW5jdGlvbihhKXtsLl93b3JrZXJDYWxsYmFja3Muc2hpZnQoKS5jYWxsKGwsYSl9LGMubWF0Y2goL15odHRwcz86XC9cL3xeXC9cLy9pKXx8KGM9bmV3IHdpbmRvdy5VUkwoYyxkb2N1bWVudC5sb2Nh''@;'; put 'put ''dGlvbi5ocmVmKS5ocmVmKSxIdGUuY2FsbCh0aGlzLHt0eXBlOiJsYXlvdXQiLGRvdDoiIixlbmdpbmU6ImRvdCIsdml6VVJMOmN9LGZ1bmN0aW9uKGEpe30pLEh0ZS5jYWxsKHRoaXMse3R5cGU6InZlcnNpb24ifSxmdW5jdGlvbihhKXsidmVyc2lvbiI9PT1hLmRhdGEudHlwZSYmKGwuX2dy''@;'; put 'put ''YXBodml6VmVyc2lvbj1hLmRhdGEudmVyc2lvbixsLl9kaXNwYXRjaC5jYWxsKCJpbml0RW5kIix0aGlzKSl9KX19ZnVuY3Rpb24gSHRlKGMsbCl7dGhpcy5fd29ya2VyQ2FsbGJhY2tzLnB1c2gobCksdGhpcy5fd29ya2VyUG9ydC5wb3N0TWVzc2FnZShjKX1mdW5jdGlvbiBlRXQoYyxsKXt2''@;'; put 'put ''YXIgYT10aGlzLl9vcHRpb25zLmtleU1vZGUsZD10aGlzLl9vcHRpb25zLnR3ZWVuUGF0aHMsaD10aGlzLl9vcHRpb25zLnR3ZWVuU2hhcGVzO2lmKCJzdHJpbmciPT10eXBlb2YgdGhpcy5fb3B0aW9ucy50d2VlblByZWNpc2lvbiYmdGhpcy5fb3B0aW9ucy50d2VlblByZWNpc2lvbi5pbmNs''@;'; put 'put ''dWRlcygiJSIpKXZhciBmPSt0aGlzLl9vcHRpb25zLnR3ZWVuUHJlY2lzaW9uLnNwbGl0KCIlIilbMF0vMTAwLHY9dGhpcy5fb3B0aW9ucy50d2VlblByZWNpc2lvbi5pbmNsdWRlcygiJSIpO2Vsc2UgZj10aGlzLl9vcHRpb25zLnR3ZWVuUHJlY2lzaW9uLHY9ITE7dmFyIE09dGhpcy5fb3B0''@;'; put 'put ''aW9ucy5ncm93RW50ZXJpbmdFZGdlcyxEPXt9LFo9dGhpcy5fZGljdGlvbmFyeXx8e30scmU9e30sY2U9dGhpcy5fbm9kZURpY3Rpb25hcnl8fHt9O2Z1bmN0aW9uIHB0KEduLGFpPTAsX2kpeyhmdW5jdGlvbiBiZShHbixhaSl7dmFyIF9pPUduLnRhZztpZigiaW5kZXgiPT1hKUduLmtleT1h''@;'; put 'put ''aTtlbHNlIGlmKCIjIiE9X2lbMF0paWYoImlkIj09YSlHbi5rZXk9R24uYXR0cmlidXRlcy5pZDtlbHNlIGlmKCJ0aXRsZSI9PWEpe3ZhciBPbj1Hbi5jaGlsZHJlbi5maW5kKGZ1bmN0aW9uKHpyKXtyZXR1cm4idGl0bGUiPT16ci50YWd9KTtPbiYmKEduLmtleT1Pbi5jaGlsZHJlbi5sZW5n''@;'; put 'put ''dGg+MD9Pbi5jaGlsZHJlblswXS50ZXh0OiIiKX1udWxsPT1Hbi5rZXkmJihoJiYoImVsbGlwc2UiPT1faXx8InBvbHlnb24iPT1faSkmJihfaT0icGF0aCIpLEduLmtleT1faSsiLSIrYWkpfSkoR24sYWkpLGZ1bmN0aW9uIEVlKEduLGFpKXtHbi5pZD0oYWk/YWkuaWQrIi4iOiIiKStHbi5r''@;'; put 'put ''ZXl9KEduLF9pKTt2YXIgenI9WltHbi5pZF07KGZ1bmN0aW9uIEJlKEduKXtEW0duLmlkXT1Hbn0pKEduKSxmdW5jdGlvbiBxZShHbixhaSl7aCYmR24uaWQgaW4gWiYmKCJwb2x5Z29uIj09YWkudGFnfHwiZWxsaXBzZSI9PWFpLnRhZ3x8InBhdGgiPT1haS50YWcpJiYoYWkudGFnIT1Hbi50''@;'; put 'put ''YWd8fCJwb2x5Z29uIj09R24udGFnKSYmKCJwYXRoIiE9YWkudGFnJiYoR24uYWx0ZXJuYXRpdmVPbGQ9aTdlKGFpLEduKSksInBhdGgiIT1Hbi50YWcmJihHbi5hbHRlcm5hdGl2ZU5ldz1pN2UoR24sYWkpKSl9KEduLHpyKSxmdW5jdGlvbiBydChHbixhaSl7aWYoZCYmYWkmJigicGF0aCI9''@;'; put 'put ''PWFpLnRhZ3x8R24uYWx0ZXJuYXRpdmVPbGQmJiJwYXRoIj09R24uYWx0ZXJuYXRpdmVPbGQudGFnKSl7dmFyIF9pPShHbi5hbHRlcm5hdGl2ZU5ld3x8R24pLmF0dHJpYnV0ZXMuZDtpZihHbi5hbHRlcm5hdGl2ZU9sZCl2YXIgT249a3RlKEduLmFsdGVybmF0aXZlT2xkKTtlbHNlIE9uPWt0''@;'; put 'put ''ZShhaSk7KEduLmFsdGVybmF0aXZlT2xkfHwoR24uYWx0ZXJuYXRpdmVPbGQ9e30pKS5wb2ludHM9ZnVuY3Rpb24gdnh0KGMsbCxhLGQpe2NvbnN0IGg9YyxmPWguY2xvbmVOb2RlKCksdj1oLmdldFRvdGFsTGVuZ3RoKCksTT0oZi5zZXRBdHRyaWJ1dGUoImQiLGwpLGYpLmdldFRvdGFsTGVu''@;'; put 'put ''Z3RoKCksRD1bMF07bGV0IFo9MDtjb25zdCByZT1kP2E6YS9NYXRoLm1heCh2LE0pO2Zvcig7KForPXJlKTwxOylELnB1c2goWik7cmV0dXJuIEQucHVzaCgxKSxELm1hcChmdW5jdGlvbihiZSl7Y29uc3QgRWU9aC5nZXRQb2ludEF0TGVuZ3RoKGJlKnYpLEJlPWYuZ2V0UG9pbnRBdExlbmd0''@;'; put 'put ''aChiZSpNKTtyZXR1cm5bW0VlLngsRWUueV0sW0JlLngsQmUueV1dfSl9KE9uLF9pLGYsdil9fShHbix6cik7dmFyIEpuPXt9O0duLmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24oRHIpe3ZhciAkcj1Eci50YWc7KCJlbGxpcHNlIj09JHJ8fCJwb2x5Z29uIj09JHIpJiYoJHI9InBhdGgiKSxu''@;'; put 'put ''dWxsPT1Kblskcl0mJihKblskcl09MCkscHQoRHIsSm5bJHJdKyssR24pfSl9ZnVuY3Rpb24gdm4oR24peyhmdW5jdGlvbiBkdChHbil7aWYoTSYmR24ucGFyZW50JiYibm9kZSI9PUduLnBhcmVudC5hdHRyaWJ1dGVzLmNsYXNzJiYidGl0bGUiPT1Hbi50YWcpe2lmKEduLmNoaWxkcmVuLmxl''@;'; put 'put ''bmd0aD4wKXZhciBPbj1Hbi5jaGlsZHJlblswXS50ZXh0O2Vsc2UgT249IiI7cmVbT25dPUduLnBhcmVudH19KShHbiksZnVuY3Rpb24gSnQoR24pe3ZhciBfaT1Hbi50YWc7aWYoTSYmIVpbR24uaWRdJiZHbi5wYXJlbnQmJlE4ZShHbikmJigicGF0aCI9PV9pfHwicG9seWdvbiI9PV9pKSl7''@;'; put 'put ''aWYoInBvbHlnb24iPT1faSl7dmFyIHpyPUduLnBhcmVudC5jaGlsZHJlbi5maW5kKGZ1bmN0aW9uKEhyKXtyZXR1cm4icGF0aCI9PUhyLnRhZ30pO3pyJiYoR24udG90YWxMZW5ndGg9enIudG90YWxMZW5ndGgpfXZhciBKbj1mdW5jdGlvbiBfeHQoYyl7cmV0dXJuIGZ1bmN0aW9uIHl4dChj''@;'; put 'put ''KXtyZXR1cm4iZWRnZSI9PWMucGFyZW50LmF0dHJpYnV0ZXMuY2xhc3M/Yy5wYXJlbnQ6Yy5wYXJlbnQucGFyZW50LnBhcmVudH0oYykuY2hpbGRyZW4uZmluZChmdW5jdGlvbihsKXtyZXR1cm4idGl0bGUiPT1sLnRhZ30pfShHbiksRHI9Sm4uY2hpbGRyZW5bMF0sJHI9RHIudGV4dC5zcGxp''@;'; put 'put ''dCgiLT4iKTsyIT0kci5sZW5ndGgmJigkcj1Eci50ZXh0LnNwbGl0KCItLSIpKTt2YXIgd2k9JHJbMF0sZWE9cmVbd2ldO2lmKE9iamVjdC5oYXNPd24oY2Usd2kpKXt2YXIgZmE9Y2Vbd2ldO2lmKChOdD1lYS5jaGlsZHJlbi5maW5kSW5kZXgoZnVuY3Rpb24oSHIscXIpe3JldHVybiJnIj09''@;'; put 'put ''SHIudGFnfSkpPj0wKXt2YXIgdnQ9ZWEuY2hpbGRyZW5bTnRdLmNoaWxkcmVuLmZpbmRJbmRleChmdW5jdGlvbihIcixxcil7cmV0dXJuImEiPT1Ici50YWd9KTtlYT1lYS5jaGlsZHJlbltOdF0uY2hpbGRyZW5bdnRdfShOdD1mYS5jaGlsZHJlbi5maW5kSW5kZXgoZnVuY3Rpb24oSHIscXIp''@;'; put 'put ''e3JldHVybiJnIj09SHIudGFnfSkpPj0wJiYodnQ9ZmEuY2hpbGRyZW5bTnRdLmNoaWxkcmVuLmZpbmRJbmRleChmdW5jdGlvbihxcixvbil7cmV0dXJuImEiPT1xci50YWd9KSxmYT1mYS5jaGlsZHJlbltOdF0uY2hpbGRyZW5bdnRdKTtmb3IodmFyIEh0PWVhLmNoaWxkcmVuLE50PTA7TnQ8''@;'; put 'put ''SHQubGVuZ3RoO050KyspaWYoInBvbHlnb24iPT1IdFtOdF0udGFnfHwiZWxsaXBzZSI9PUh0W050XS50YWd8fCJwYXRoIj09SHRbTnRdLnRhZ3x8InRleHQiPT1IdFtOdF0udGFnKXt2YXIgSG49SHRbTnRdO2JyZWFrfXZhciB0cj1mYS5jaGlsZHJlbjtmb3IoTnQ9MDtOdDx0ci5sZW5ndGg7''@;'; put 'put ''TnQrKylpZigicG9seWdvbiI9PXRyW050XS50YWd8fCJlbGxpcHNlIj09dHJbTnRdLnRhZ3x8InBhdGgiPT10cltOdF0udGFnfHwidGV4dCI9PXRyW050XS50YWcpe3ZhciBhcj10cltOdF07YnJlYWt9R24ub2Zmc2V0PWFyJiZIbj97eDphci5jZW50ZXIueC1Ibi5jZW50ZXIueCx5OmFyLmNl''@;'; put 'put ''bnRlci55LUhuLmNlbnRlci55fTp7eDowLHk6MH19fX0oR24pLEduLmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24oYWkpe3ZuKGFpKX0pfXRoaXMuX2Rpc3BhdGNoLmNhbGwoImxheW91dEVuZCIsdGhpcyk7dmFyIENuPXdzKGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSkuYXBw''@;'; put 'put ''ZW5kKCJkaXYiKSxNbj0obmV3IHdpbmRvdy5ET01QYXJzZXIpLnBhcnNlRnJvbVN0cmluZyhjLCJpbWFnZS9zdmcreG1sIik7Q24uYXBwZW5kKGZ1bmN0aW9uKCl7cmV0dXJuIE1uLmRvY3VtZW50RWxlbWVudH0pO3ZhciBHcj1udihDbi5zZWxlY3QoInN2ZyIpKTt0aGlzLl9kaXNwYXRjaC5j''@;'; put 'put ''YWxsKCJkYXRhRXh0cmFjdEVuZCIsdGhpcykscHQoR3IpLHRoaXMuX2Rpc3BhdGNoLmNhbGwoImRhdGFQcm9jZXNzUGFzczFFbmQiLHRoaXMpLHZuKEdyKSx0aGlzLl9kaXNwYXRjaC5jYWxsKCJkYXRhUHJvY2Vzc1Bhc3MyRW5kIix0aGlzKSx0aGlzLl9kYXRhPUdyLHRoaXMuX2RpY3Rpb25h''@;'; put 'put ''cnk9RCx0aGlzLl9ub2RlRGljdGlvbmFyeT1yZSx0aGlzLl9leHRyYWN0RGF0YT1mdW5jdGlvbihHbixhaSxfaSl7dmFyIE9uPW52KEduKTtyZXR1cm4gcHQoT24sYWksX2kpLHZuKE9uKSxPbn0sdGhpcy5fYnVzeT0hMSx0aGlzLl9kaXNwYXRjaC5jYWxsKCJkYXRhUHJvY2Vzc0VuZCIsdGhp''@;'; put 'put ''cyksbCYmbC5jYWxsKHRoaXMpLHRoaXMuX3F1ZXVlLmxlbmd0aD4wJiZ0aGlzLl9xdWV1ZS5zaGlmdCgpLmNhbGwodGhpcyl9ZnVuY3Rpb24gSE4oYyxsKXtpZigoYT0oYz1sP2MudG9FeHBvbmVudGlhbChsLTEpOmMudG9FeHBvbmVudGlhbCgpKS5pbmRleE9mKCJlIikpPDApcmV0dXJuIG51''@;'; put 'put ''bGw7dmFyIGEsZD1jLnNsaWNlKDAsYSk7cmV0dXJuW2QubGVuZ3RoPjE/ZFswXStkLnNsaWNlKDIpOmQsK2Muc2xpY2UoYSsxKV19dmFyIGE3ZSx4RXQ9L14oPzooLik/KFs8Pj1eXSkpPyhbK1wtKCBdKT8oWyQjXSk/KDApPyhcZCspPygsKT8oXC5cZCspPyh+KT8oW2EteiVdKT8kL2k7ZnVu''@;'; put 'put ''Y3Rpb24gTnRlKGMpe2lmKCEobD14RXQuZXhlYyhjKSkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGZvcm1hdDogIitjKTt2YXIgbDtyZXR1cm4gbmV3IFZ0ZSh7ZmlsbDpsWzFdLGFsaWduOmxbMl0sc2lnbjpsWzNdLHN5bWJvbDpsWzRdLHplcm86bFs1XSx3aWR0aDpsWzZdLGNvbW1hOmxb''@;'; put 'put ''N10scHJlY2lzaW9uOmxbOF0mJmxbOF0uc2xpY2UoMSksdHJpbTpsWzldLHR5cGU6bFsxMF19KX1mdW5jdGlvbiBWdGUoYyl7dGhpcy5maWxsPXZvaWQgMD09PWMuZmlsbD8iICI6Yy5maWxsKyIiLHRoaXMuYWxpZ249dm9pZCAwPT09Yy5hbGlnbj8iPiI6Yy5hbGlnbisiIix0aGlzLnNpZ249''@;'; put 'put ''dm9pZCAwPT09Yy5zaWduPyItIjpjLnNpZ24rIiIsdGhpcy5zeW1ib2w9dm9pZCAwPT09Yy5zeW1ib2w/IiI6Yy5zeW1ib2wrIiIsdGhpcy56ZXJvPSEhYy56ZXJvLHRoaXMud2lkdGg9dm9pZCAwPT09Yy53aWR0aD92b2lkIDA6K2Mud2lkdGgsdGhpcy5jb21tYT0hIWMuY29tbWEsdGhpcy5w''@;'; put 'put ''cmVjaXNpb249dm9pZCAwPT09Yy5wcmVjaXNpb24/dm9pZCAwOitjLnByZWNpc2lvbix0aGlzLnRyaW09ISFjLnRyaW0sdGhpcy50eXBlPXZvaWQgMD09PWMudHlwZT8iIjpjLnR5cGUrIiJ9ZnVuY3Rpb24gbzdlKGMsbCl7dmFyIGE9SE4oYyxsKTtpZighYSlyZXR1cm4gYysiIjt2YXIgZD1h''@;'; put 'put ''WzBdLGg9YVsxXTtyZXR1cm4gaDwwPyIwLiIrbmV3IEFycmF5KC1oKS5qb2luKCIwIikrZDpkLmxlbmd0aD5oKzE/ZC5zbGljZSgwLGgrMSkrIi4iK2Quc2xpY2UoaCsxKTpkK25ldyBBcnJheShoLWQubGVuZ3RoKzIpLmpvaW4oIjAiKX1OdGUucHJvdG90eXBlPVZ0ZS5wcm90b3R5cGUsVnRl''@;'; put 'put ''LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZpbGwrdGhpcy5hbGlnbit0aGlzLnNpZ24rdGhpcy5zeW1ib2wrKHRoaXMuemVybz8iMCI6IiIpKyh2b2lkIDA9PT10aGlzLndpZHRoPyIiOk1hdGgubWF4KDEsMHx0aGlzLndpZHRoKSkrKHRoaXMuY29tbWE/Iiwi''@;'; put 'put ''OiIiKSsodm9pZCAwPT09dGhpcy5wcmVjaXNpb24/IiI6Ii4iK01hdGgubWF4KDAsMHx0aGlzLnByZWNpc2lvbikpKyh0aGlzLnRyaW0/In4iOiIiKSt0aGlzLnR5cGV9O2NvbnN0IHM3ZT17IiUiOihjLGwpPT4oMTAwKmMpLnRvRml4ZWQobCksYjpjPT5NYXRoLnJvdW5kKGMpLnRvU3RyaW5n''@;'; put 'put ''KDIpLGM6Yz0+YysiIixkOmZ1bmN0aW9uIHdFdChjKXtyZXR1cm4gTWF0aC5hYnMoYz1NYXRoLnJvdW5kKGMpKT49MWUyMT9jLnRvTG9jYWxlU3RyaW5nKCJlbiIpLnJlcGxhY2UoLywvZywiIik6Yy50b1N0cmluZygxMCl9LGU6KGMsbCk9PmMudG9FeHBvbmVudGlhbChsKSxmOihjLGwpPT5j''@;'; put 'put ''LnRvRml4ZWQobCksZzooYyxsKT0+Yy50b1ByZWNpc2lvbihsKSxvOmM9Pk1hdGgucm91bmQoYykudG9TdHJpbmcoOCkscDooYyxsKT0+bzdlKDEwMCpjLGwpLHI6bzdlLHM6ZnVuY3Rpb24gVEV0KGMsbCl7dmFyIGE9SE4oYyxsKTtpZighYSlyZXR1cm4gYysiIjt2YXIgZD1hWzBdLGg9YVsx''@;'; put 'put ''XSxmPWgtKGE3ZT0zKk1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihoLzMpKSkpKzEsdj1kLmxlbmd0aDtyZXR1cm4gZj09PXY/ZDpmPnY/ZCtuZXcgQXJyYXkoZi12KzEpLmpvaW4oIjAiKTpmPjA/ZC5zbGljZSgwLGYpKyIuIitkLnNsaWNlKGYpOiIwLiIrbmV3IEFycmF5KDEt''@;'; put 'put ''Zikuam9pbigiMCIpK0hOKGMsTWF0aC5tYXgoMCxsK2YtMSkpWzBdfSxYOmM9Pk1hdGgucm91bmQoYykudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCkseDpjPT5NYXRoLnJvdW5kKGMpLnRvU3RyaW5nKDE2KX07ZnVuY3Rpb24gbDdlKGMpe3JldHVybiBjfXZhciBOTixhZixjN2U9QXJyYXku''@;'; put 'put ''cHJvdG90eXBlLm1hcCx1N2U9WyJ5IiwieiIsImEiLCJmIiwicCIsIm4iLCJceGI1IiwibSIsIiIsImsiLCJNIiwiRyIsIlQiLCJQIiwiRSIsIloiLCJZIl07IWZ1bmN0aW9uIERFdChjKXtOTj1mdW5jdGlvbiBBRXQoYyl7dmFyIGw9dm9pZCAwPT09Yy5ncm91cGluZ3x8dm9pZCAwPT09Yy50''@;'; put 'put ''aG91c2FuZHM/bDdlOmZ1bmN0aW9uIFNFdChjLGwpe3JldHVybiBmdW5jdGlvbihhLGQpe2Zvcih2YXIgaD1hLmxlbmd0aCxmPVtdLHY9MCxNPWNbMF0sRD0wO2g+MCYmTT4wJiYoRCtNKzE+ZCYmKE09TWF0aC5tYXgoMSxkLUQpKSxmLnB1c2goYS5zdWJzdHJpbmcoaC09TSxoK00pKSwhKChE''@;'; put 'put ''Kz1NKzEpPmQpKTspTT1jW3Y9KHYrMSklYy5sZW5ndGhdO3JldHVybiBmLnJldmVyc2UoKS5qb2luKGwpfX0oYzdlLmNhbGwoYy5ncm91cGluZyxOdW1iZXIpLGMudGhvdXNhbmRzKyIiKSxhPXZvaWQgMD09PWMuY3VycmVuY3k/IiI6Yy5jdXJyZW5jeVswXSsiIixkPXZvaWQgMD09PWMuY3Vy''@;'; put 'put ''cmVuY3k/IiI6Yy5jdXJyZW5jeVsxXSsiIixoPXZvaWQgMD09PWMuZGVjaW1hbD8iLiI6Yy5kZWNpbWFsKyIiLGY9dm9pZCAwPT09Yy5udW1lcmFscz9sN2U6ZnVuY3Rpb24gTUV0KGMpe3JldHVybiBmdW5jdGlvbihsKXtyZXR1cm4gbC5yZXBsYWNlKC9bMC05XS9nLGZ1bmN0aW9uKGEpe3Jl''@;'; put 'put ''dHVybiBjWythXX0pfX0oYzdlLmNhbGwoYy5udW1lcmFscyxTdHJpbmcpKSx2PXZvaWQgMD09PWMucGVyY2VudD8iJSI6Yy5wZXJjZW50KyIiLE09dm9pZCAwPT09Yy5taW51cz8iXHUyMjEyIjpjLm1pbnVzKyIiLEQ9dm9pZCAwPT09Yy5uYW4/Ik5hTiI6Yy5uYW4rIiI7ZnVuY3Rpb24gWihj''@;'; put 'put ''ZSl7dmFyIGJlPShjZT1OdGUoY2UpKS5maWxsLEVlPWNlLmFsaWduLEJlPWNlLnNpZ24scWU9Y2Uuc3ltYm9sLHJ0PWNlLnplcm8scHQ9Y2Uud2lkdGgsZHQ9Y2UuY29tbWEsSnQ9Y2UucHJlY2lzaW9uLHZuPWNlLnRyaW0sQ249Y2UudHlwZTsibiI9PT1Dbj8oZHQ9ITAsQ249ImciKTpzN2Vb''@;'; put 'put ''Q25dfHwodm9pZCAwPT09SnQmJihKdD0xMiksdm49ITAsQ249ImciKSwocnR8fCIwIj09PWJlJiYiPSI9PT1FZSkmJihydD0hMCxiZT0iMCIsRWU9Ij0iKTt2YXIgdG49IiQiPT09cWU/YToiIyI9PT1xZSYmL1tib3hYXS8udGVzdChDbik/IjAiK0NuLnRvTG93ZXJDYXNlKCk6IiIsTW49IiQi''@;'; put 'put ''PT09cWU/ZDovWyVwXS8udGVzdChDbik/djoiIixDcj1zN2VbQ25dLEdyPS9bZGVmZ3BycyVdLy50ZXN0KENuKTtmdW5jdGlvbiBtcihHbil7dmFyIE9uLHpyLEpuLGFpPXRuLF9pPU1uO2lmKCJjIj09PUNuKV9pPUNyKEduKStfaSxHbj0iIjtlbHNle3ZhciBEcj0oR249K0duKTwwfHwxL0du''@;'; put 'put ''PDA7aWYoR249aXNOYU4oR24pP0Q6Q3IoTWF0aC5hYnMoR24pLEp0KSx2biYmKEduPWZ1bmN0aW9uIEVFdChjKXtlOmZvcih2YXIgaCxsPWMubGVuZ3RoLGE9MSxkPS0xO2E8bDsrK2Epc3dpdGNoKGNbYV0pe2Nhc2UiLiI6ZD1oPWE7YnJlYWs7Y2FzZSIwIjowPT09ZCYmKGQ9YSksaD1hO2Jy''@;'; put 'put ''ZWFrO2RlZmF1bHQ6aWYoIStjW2FdKWJyZWFrIGU7ZD4wJiYoZD0wKX1yZXR1cm4gZD4wP2Muc2xpY2UoMCxkKStjLnNsaWNlKGgrMSk6Y30oR24pKSxEciYmMD09K0duJiYiKyIhPT1CZSYmKERyPSExKSxhaT0oRHI/IigiPT09QmU/QmU6TToiLSI9PT1CZXx8IigiPT09QmU/IiI6QmUpK2Fp''@;'; put 'put ''LF9pPSgicyI9PT1Dbj91N2VbOCthN2UvM106IiIpK19pKyhEciYmIigiPT09QmU/IikiOiIiKSxHcilmb3IoT249LTEsenI9R24ubGVuZ3RoOysrT248enI7KWlmKDQ4PihKbj1Hbi5jaGFyQ29kZUF0KE9uKSl8fEpuPjU3KXtfaT0oNDY9PT1Kbj9oK0duLnNsaWNlKE9uKzEpOkduLnNsaWNl''@;'; put 'put ''KE9uKSkrX2ksR249R24uc2xpY2UoMCxPbik7YnJlYWt9fWR0JiYhcnQmJihHbj1sKEduLDEvMCkpO3ZhciAkcj1haS5sZW5ndGgrR24ubGVuZ3RoK19pLmxlbmd0aCx3aT0kcjxwdD9uZXcgQXJyYXkocHQtJHIrMSkuam9pbihiZSk6IiI7c3dpdGNoKGR0JiZydCYmKEduPWwod2krR24sd2ku''@;'; put 'put ''bGVuZ3RoP3B0LV9pLmxlbmd0aDoxLzApLHdpPSIiKSxFZSl7Y2FzZSI8IjpHbj1haStHbitfaSt3aTticmVhaztjYXNlIj0iOkduPWFpK3dpK0duK19pO2JyZWFrO2Nhc2UiXiI6R249d2kuc2xpY2UoMCwkcj13aS5sZW5ndGg+PjEpK2FpK0duK19pK3dpLnNsaWNlKCRyKTticmVhaztkZWZh''@;'; put 'put ''dWx0OkduPXdpK2FpK0duK19pfXJldHVybiBmKEduKX1yZXR1cm4gSnQ9dm9pZCAwPT09SnQ/NjovW2dwcnNdLy50ZXN0KENuKT9NYXRoLm1heCgxLE1hdGgubWluKDIxLEp0KSk6TWF0aC5tYXgoMCxNYXRoLm1pbigyMCxKdCkpLG1yLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIGNlKyIi''@;'; put 'put ''fSxtcn1yZXR1cm57Zm9ybWF0OlosZm9ybWF0UHJlZml4OmZ1bmN0aW9uIHJlKGNlLGJlKXt2YXIgRWU9WigoKGNlPU50ZShjZSkpLnR5cGU9ImYiLGNlKSksQmU9MypNYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3IoZnVuY3Rpb24gQ0V0KGMpe3JldHVybihjPUhOKE1hdGguYWJz''@;'; put 'put ''KGMpKSk/Y1sxXTpOYU59KGJlKS8zKSkpLHFlPU1hdGgucG93KDEwLC1CZSkscnQ9dTdlWzgrQmUvM107cmV0dXJuIGZ1bmN0aW9uKHB0KXtyZXR1cm4gRWUocWUqcHQpK3J0fX19fShjKSxhZj1OTi5mb3JtYXR9KHt0aG91c2FuZHM6IiwiLGdyb3VwaW5nOlszXSxjdXJyZW5jeTpbIiQiLCIi''@;'; put 'put ''XX0pO2NvbnN0IEJ0ZT1NYXRoLlBJLGp0ZT0yKkJ0ZSxpdj0xZS02LExFdD1qdGUtaXY7ZnVuY3Rpb24gZDdlKGMpe3RoaXMuXys9Y1swXTtmb3IobGV0IGw9MSxhPWMubGVuZ3RoO2w8YTsrK2wpdGhpcy5fKz1hcmd1bWVudHNbbF0rY1tsXX1jbGFzcyB6dGV7Y29uc3RydWN0b3IobCl7dGhp''@;'; put 'put ''cy5feDA9dGhpcy5feTA9dGhpcy5feDE9dGhpcy5feTE9bnVsbCx0aGlzLl89IiIsdGhpcy5fYXBwZW5kPW51bGw9PWw/ZDdlOmZ1bmN0aW9uIE9FdChjKXtsZXQgbD1NYXRoLmZsb29yKGMpO2lmKCEobD49MCkpdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIGRpZ2l0czogJHtjfWApO2lmKGw+''@;'; put 'put ''MTUpcmV0dXJuIGQ3ZTtjb25zdCBhPTEwKipsO3JldHVybiBmdW5jdGlvbihkKXt0aGlzLl8rPWRbMF07Zm9yKGxldCBoPTEsZj1kLmxlbmd0aDtoPGY7KytoKXRoaXMuXys9TWF0aC5yb3VuZChhcmd1bWVudHNbaF0qYSkvYStkW2hdfX0obCl9bW92ZVRvKGwsYSl7dGhpcy5fYXBwZW5kYE0k''@;'; put 'put ''e3RoaXMuX3gwPXRoaXMuX3gxPStsfSwke3RoaXMuX3kwPXRoaXMuX3kxPSthfWB9Y2xvc2VQYXRoKCl7bnVsbCE9PXRoaXMuX3gxJiYodGhpcy5feDE9dGhpcy5feDAsdGhpcy5feTE9dGhpcy5feTAsdGhpcy5fYXBwZW5kYFpgKX1saW5lVG8obCxhKXt0aGlzLl9hcHBlbmRgTCR7dGhpcy5f''@;'; put 'put ''eDE9K2x9LCR7dGhpcy5feTE9K2F9YH1xdWFkcmF0aWNDdXJ2ZVRvKGwsYSxkLGgpe3RoaXMuX2FwcGVuZGBRJHsrbH0sJHsrYX0sJHt0aGlzLl94MT0rZH0sJHt0aGlzLl95MT0raH1gfWJlemllckN1cnZlVG8obCxhLGQsaCxmLHYpe3RoaXMuX2FwcGVuZGBDJHsrbH0sJHsrYX0sJHsrZH0s''@;'; put 'put ''JHsraH0sJHt0aGlzLl94MT0rZn0sJHt0aGlzLl95MT0rdn1gfWFyY1RvKGwsYSxkLGgsZil7aWYobD0rbCxhPSthLGQ9K2QsaD0raCwoZj0rZik8MCl0aHJvdyBuZXcgRXJyb3IoYG5lZ2F0aXZlIHJhZGl1czogJHtmfWApO2xldCB2PXRoaXMuX3gxLE09dGhpcy5feTEsRD1kLWwsWj1oLWEs''@;'; put 'put ''cmU9di1sLGNlPU0tYSxiZT1yZSpyZStjZSpjZTtpZihudWxsPT09dGhpcy5feDEpdGhpcy5fYXBwZW5kYE0ke3RoaXMuX3gxPWx9LCR7dGhpcy5feTE9YX1gO2Vsc2UgaWYoYmU+aXYpaWYoTWF0aC5hYnMoY2UqRC1aKnJlKT5pdiYmZil7bGV0IEVlPWQtdixCZT1oLU0scWU9RCpEK1oqWixy''@;'; put 'put ''dD1FZSpFZStCZSpCZSxwdD1NYXRoLnNxcnQocWUpLGR0PU1hdGguc3FydChiZSksSnQ9ZipNYXRoLnRhbigoQnRlLU1hdGguYWNvcygocWUrYmUtcnQpLygyKnB0KmR0KSkpLzIpLHZuPUp0L2R0LENuPUp0L3B0O01hdGguYWJzKHZuLTEpPml2JiZ0aGlzLl9hcHBlbmRgTCR7bCt2bipyZX0s''@;'; put 'put ''JHthK3ZuKmNlfWAsdGhpcy5fYXBwZW5kYEEke2Z9LCR7Zn0sMCwwLCR7KyhjZSpFZT5yZSpCZSl9LCR7dGhpcy5feDE9bCtDbipEfSwke3RoaXMuX3kxPWErQ24qWn1gfWVsc2UgdGhpcy5fYXBwZW5kYEwke3RoaXMuX3gxPWx9LCR7dGhpcy5feTE9YX1gfWFyYyhsLGEsZCxoLGYsdil7aWYo''@;'; put 'put ''bD0rbCxhPSthLHY9ISF2LChkPStkKTwwKXRocm93IG5ldyBFcnJvcihgbmVnYXRpdmUgcmFkaXVzOiAke2R9YCk7bGV0IE09ZCpNYXRoLmNvcyhoKSxEPWQqTWF0aC5zaW4oaCksWj1sK00scmU9YStELGNlPTFedixiZT12P2gtZjpmLWg7bnVsbD09PXRoaXMuX3gxP3RoaXMuX2FwcGVuZGBN''@;'; put 'put ''JHtafSwke3JlfWA6KE1hdGguYWJzKHRoaXMuX3gxLVopPml2fHxNYXRoLmFicyh0aGlzLl95MS1yZSk+aXYpJiZ0aGlzLl9hcHBlbmRgTCR7Wn0sJHtyZX1gLGQmJihiZTwwJiYoYmU9YmUlanRlK2p0ZSksYmU+TEV0P3RoaXMuX2FwcGVuZGBBJHtkfSwke2R9LDAsMSwke2NlfSwke2wtTX0s''@;'; put 'put ''JHthLUR9QSR7ZH0sJHtkfSwwLDEsJHtjZX0sJHt0aGlzLl94MT1afSwke3RoaXMuX3kxPXJlfWA6YmU+aXYmJnRoaXMuX2FwcGVuZGBBJHtkfSwke2R9LDAsJHsrKGJlPj1CdGUpfSwke2NlfSwke3RoaXMuX3gxPWwrZCpNYXRoLmNvcyhmKX0sJHt0aGlzLl95MT1hK2QqTWF0aC5zaW4oZil9''@;'; put 'put ''YCl9cmVjdChsLGEsZCxoKXt0aGlzLl9hcHBlbmRgTSR7dGhpcy5feDA9dGhpcy5feDE9K2x9LCR7dGhpcy5feTA9dGhpcy5feTE9K2F9aCR7ZD0rZH12JHsraH1oJHstZH1aYH10b1N0cmluZygpe3JldHVybiB0aGlzLl99fWZ1bmN0aW9uIGg3ZSgpe3JldHVybiBuZXcgenRlfWZ1bmN0aW9u''@;'; put 'put ''IFBFdChjLGwsYSxkKXtyZXR1cm4gbD0tbCxkPS1kLFtjLGxdPVtjKmEtbCpkLGMqZCtsKmFdLFtjLGw9LWxdfWZ1bmN0aW9uIGY3ZShjLGwsYSxkLGgsZix2KXt2YXIgRD1udih2N2UuY2FsbCh0aGlzLGYpKTtjLmRhdGEoW0RdKSxPQS5jYWxsKGMubm9kZSgpLEQpLHA3ZShjLGwsYSxkLGgs''@;'; put 'put ''Zix2KX1mdW5jdGlvbiBwN2UoYyxsLGEsZCxoLGYsdil7dmFyIE09di5zaG9ydGVuaW5nfHwwLGNlPVtbMCwtMy41XSxbMTAsMF0sWzAsMy41XSxbMCwtMy41XV0sYmU9ZC1sLEVlPWgtYSxCZT1NYXRoLnNxcnQoYmUqYmUrRWUqRWUpO2lmKDA9PUJlKXZhciBxZT0xLHJ0PTA7ZWxzZSBxZT1i''@;'; put 'put ''ZS9CZSxydD1FZS9CZTtpZihkPWwrKEJlLU0tMTAtLjEpKnFlLGg9YSsoQmUtTS0xMC0uMSkqcnQsZi5VUkx8fGYudG9vbHRpcCl2YXIgcHQ9Yy5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJnIikuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigiYSIpLGR0PXB0LnNlbGVjdFdp''@;'; put 'put ''dGhvdXREYXRhUHJvcGFnYXRpb24oInBhdGgiKSxKdD1wdC5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJwb2x5Z29uIik7ZWxzZSBkdD1jLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oInBhdGgiKSxKdD1jLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oInBvbHlnb24i''@;'; put 'put ''KTt2YXIgdm49aDdlKCk7dm4ubW92ZVRvKGwsYSksdm4ubGluZVRvKGQsaCksZHQuYXR0cigiZCIsdm4pLGQ9bCsoQmUtTS0xMCkqcWUsaD1hKyhCZS1NLTEwKSpydDtmb3IodmFyIENuPTA7Q248Y2UubGVuZ3RoO0NuKyspY2VbQ25dPVBFdCgodG49Y2VbQ25dKVswXSx0blsxXSxxZSxydCk7''@;'; put 'put ''Zm9yKENuPTA7Q248Y2UubGVuZ3RoO0NuKyspY2VbQ25dPVtkKyh0bj1jZVtDbl0pWzBdLGgrdG5bMV1dO3ZhciBNbj1bXTtmb3IoQ249MDtDbjxjZS5sZW5ndGg7Q24rKyl7dmFyIHRuO01uLnB1c2goKHRuPWNlW0NuXSkuam9pbigiLCIpKX12YXIgQ3I9TW4uam9pbigiICIpO3JldHVybiBK''@;'; put 'put ''dC5hdHRyKCJwb2ludHMiLENyKSx0aGlzfWZ1bmN0aW9uIGc3ZSgpe3JldHVybiB0aGlzLl9kcmF3bkVkZ2U/KHRoaXMuX2RyYXduRWRnZS5nLnJlbW92ZSgpLHRoaXMuX2RyYXduRWRnZT1udWxsLHRoaXMpOnRoaXN9ZnVuY3Rpb24gbTdlKCl7cmV0dXJuIHRoaXMuX2RyYXduRWRnZT90aGlz''@;'; put 'put ''Ll9kcmF3bkVkZ2UuZzp3cyhudWxsKX1mdW5jdGlvbiB2N2UoYyl7dmFyIGw9IiI7Zm9yKHZhciBhIG9mIE9iamVjdC5rZXlzKGMpKW51bGwhPWNbYV0mJihsKz0nICInK2ErJyI9IicrY1thXSsnIicpO3ZhciBoPXRoaXMubGF5b3V0U3luYygiZGlncmFwaCB7YSAtPiBiIFsiK2wrIl19Iiwi''@;'; put 'put ''c3ZnIiwiZG90Iiksdj0obmV3IHdpbmRvdy5ET01QYXJzZXIpLnBhcnNlRnJvbVN0cmluZyhoLCJpbWFnZS9zdmcreG1sIik7cmV0dXJuIHdzKGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSkuYXBwZW5kKGZ1bmN0aW9uKCl7cmV0dXJuIHYuZG9jdW1lbnRFbGVtZW50fSkuc2Vs''@;'; put 'put ''ZWN0KCIuZWRnZSIpfWZ1bmN0aW9uIGI3ZShjLGwsYSxkLGgsZil7dmFyIE09bnYoQzdlLmNhbGwodGhpcyxkLGgpKTtyZXR1cm4gYy5kYXRhKFtNXSksT0EuY2FsbChjLm5vZGUoKSxNKSx5N2UoYyxsLGEsaCksdGhpc31mdW5jdGlvbiB5N2UoYyxsLGEsZCxoKXtpZihkLlVSTHx8ZC50b29s''@;'; put 'put ''dGlwKXZhciBmPWMuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigiZyIpLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oImEiKTtlbHNlIGY9Yzt2YXIgdj1mLnNlbGVjdEFsbCgiZWxsaXBzZSxwb2x5Z29uLHBhdGgscG9seWxpbmUiKSxNPWMuc2VsZWN0V2l0aG91dERhdGFQcm9w''@;'; put 'put ''YWdhdGlvbigidGV4dCIpO2lmKDAhPXYuc2l6ZSgpKXt2YXIgRD12Lm5vZGUoKS5nZXRCQm94KCk7RC5jeD1ELngrRC53aWR0aC8yLEQuY3k9RC55K0QuaGVpZ2h0LzJ9ZWxzZSAwIT1NLnNpemUoKSYmKEQ9e3g6K00uYXR0cigieCIpLHk6K00uYXR0cigieSIpLHdpZHRoOjAsaGVpZ2h0OjAs''@;'; put 'put ''Y3g6K00uYXR0cigieCIpLGN5OitNLmF0dHIoInkiKX0pO3JldHVybiB2LmVhY2goZnVuY3Rpb24oWixyZSl7dmFyIGNlPXdzKHRoaXMpO2lmKGNlLmF0dHIoImN4IikpY2UuYXR0cigiY3giLE02KGwpKS5hdHRyKCJjeSIsTTYoYSkpO2Vsc2UgaWYoY2UuYXR0cigicG9pbnRzIikpe3ZhciBi''@;'; put 'put ''ZT1jZS5hdHRyKCJwb2ludHMiKS50cmltKCk7Y2UuYXR0cigicG9pbnRzIixmdW5jdGlvbiBLeHQoZixsLGEpe3ZhciBoLGQ9KGg9Zi5zcGxpdCgiICIpKS5tYXAoZnVuY3Rpb24odil7cmV0dXJuIHYuc3BsaXQoIiwiKX0pO3JldHVybiBkPWgubWFwKGZ1bmN0aW9uKHYpe3JldHVybltNNigr''@;'; put 'put ''bCsgK3Yuc3BsaXQoIiwiKVswXSksTTYoK2ErICt2LnNwbGl0KCIsIilbMV0pXX0pLChoPWQubWFwKGZ1bmN0aW9uKHYpe3JldHVybiB2LmpvaW4oIiwiKX0pKS5qb2luKCIgIil9KGJlLGwtRC5jeCxhLUQuY3kpKX1lbHNle3ZhciBFZT1jZS5hdHRyKCJkIik7Y2UuYXR0cigiZCIsZnVuY3Rp''@;'; put 'put ''b24gcXh0KGMsbCxhKXsoZj1jLnNwbGl0KC9bQS1aIF0vKSkuc2hpZnQoKTt2YXIgZD1jLnNwbGl0KC9bXltBLVogXSsvKSxmPShmLm1hcChmdW5jdGlvbih2KXtyZXR1cm4gdi5zcGxpdCgiLCIpfSksZi5tYXAoZnVuY3Rpb24odil7cmV0dXJuW002KCtsKyArdi5zcGxpdCgiLCIpWzBdKSxN''@;'; put 'put ''NigrYSsgK3Yuc3BsaXQoIiwiKVsxXSldfSkubWFwKGZ1bmN0aW9uKHYpe3JldHVybiB2LmpvaW4oIiwiKX0pKTtyZXR1cm4gZC5yZWR1Y2UoZnVuY3Rpb24odixNLEQpe3JldHVybiB2LmNvbmNhdChNLGZbRF0pfSxbXSkuam9pbigiIil9KEVlLGwtRC5jeCxhLUQuY3kpKX19KSwwIT1NLnNp''@;'; put 'put ''emUoKSYmTS5hdHRyKCJ4IixNNigrTS5hdHRyKCJ4IikrbC1ELmN4KSkuYXR0cigieSIsTTYoK00uYXR0cigieSIpK2EtRC5jeSkpLHRoaXN9ZnVuY3Rpb24gXzdlKCl7aWYoIXRoaXMuX2RyYXduTm9kZSlyZXR1cm4gdGhpczt2YXIgYz10aGlzLl9kcmF3bk5vZGUuZztyZXR1cm4gYy5lbXB0''@;'; put 'put ''eSgpfHxjLnJlbW92ZSgpLHRoaXMuX2RyYXduTm9kZT1udWxsLHRoaXN9ZnVuY3Rpb24gdzdlKCl7cmV0dXJuIHRoaXMuX2RyYXduTm9kZT90aGlzLl9kcmF3bk5vZGUuZzp3cyhudWxsKX1mdW5jdGlvbiBDN2UoYyxsKXt2YXIgYT0iIjtmb3IodmFyIGQgb2YgT2JqZWN0LmtleXMobCkpbnVs''@;'; put 'put ''bCE9bFtkXSYmKGErPScgIicrZCsnIj0iJytsW2RdKyciJyk7dmFyIGY9dGhpcy5sYXlvdXRTeW5jKCdncmFwaCB7IicrYysnIiBbJythKyJdfSIsInN2ZyIsImRvdCIpLE09KG5ldyB3aW5kb3cuRE9NUGFyc2VyKS5wYXJzZUZyb21TdHJpbmcoZiwiaW1hZ2Uvc3ZnK3htbCIpO3JldHVybiB3''@;'; put 'put ''cyhkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkpLmFwcGVuZChmdW5jdGlvbigpe3JldHVybiBNLmRvY3VtZW50RWxlbWVudH0pLnNlbGVjdCgiLm5vZGUiKX1mdW5jdGlvbiBWTihjKXtzZWxmLmRvY3VtZW50PXt9LGMuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsZnVuY3Rp''@;'; put 'put ''b24obCl7bGV0IGE9c2VsZlsiQGhwY2MtanMvd2FzbSJdO251bGw9PWEmJmwuZGF0YS52aXpVUkwmJihpbXBvcnRTY3JpcHRzKGwuZGF0YS52aXpVUkwpLGE9c2VsZlsiQGhwY2MtanMvd2FzbSJdKSwidmVyc2lvbiIhPWwuZGF0YS50eXBlP2EuR3JhcGh2aXoubG9hZCgpLnRoZW4oZD0+e2Nv''@;'; put 'put ''bnN0IGg9ZC5sYXlvdXQobC5kYXRhLmRvdCwic3ZnIixsLmRhdGEuZW5naW5lLGwuZGF0YS5vcHRpb25zKTtjLnBvc3RNZXNzYWdlKGg/e3R5cGU6ImRvbmUiLHN2ZzpofTpsLmRhdGEudml6VVJMP3t0eXBlOiJpbml0In06e3R5cGU6InNraXAifSl9KS5jYXRjaChkPT57Yy5wb3N0TWVzc2Fn''@;'; put 'put ''ZSh7dHlwZToiZXJyb3IiLGVycm9yOmQubWVzc2FnZX0pfSk6YS5HcmFwaHZpei5sb2FkKCkudGhlbihkPT57Yy5wb3N0TWVzc2FnZSh7dHlwZToidmVyc2lvbiIsdmVyc2lvbjpkLnZlcnNpb24oKX0pfSl9KX1mdW5jdGlvbiBaRXQoKXtWTihzZWxmKX1mdW5jdGlvbiBXRXQoKXtzZWxmLm9u''@;'; put 'put ''Y29ubmVjdD1mdW5jdGlvbihjKXtjb25zdCBsPWMucG9ydHNbMF07Vk4obCksbC5zdGFydCgpfX1mdW5jdGlvbiBVdGUoYyxsKXtpZih0aGlzLl9vcHRpb25zPXt1c2VXb3JrZXI6ITAsdXNlU2hhcmVkV29ya2VyOiExLGVuZ2luZToiZG90IixrZXlNb2RlOiJ0aXRsZSIsZmFkZTohMCx0d2Vl''@;'; put 'put ''blBhdGhzOiEwLHR3ZWVuU2hhcGVzOiEwLGNvbnZlcnRFcXVhbFNpZGVkUG9seWdvbnM6ITAsdHdlZW5QcmVjaXNpb246MSxncm93RW50ZXJpbmdFZGdlczohMCx6b29tOiEwLHpvb21TY2FsZUV4dGVudDpbLjEsMTBdLHpvb21UcmFuc2xhdGVFeHRlbnQ6W1stMS8wLC0xLzBdLFsxLzAsMS8w''@;'; put 'put ''XV0sd2lkdGg6bnVsbCxoZWlnaHQ6bnVsbCxzY2FsZToxLGZpdDohMX0sbCBpbnN0YW5jZW9mIE9iamVjdClmb3IodmFyIGEgb2YgT2JqZWN0LmtleXMobCkpdGhpcy5fb3B0aW9uc1thXT1sW2FdO2Vsc2UiYm9vbGVhbiI9PXR5cGVvZiBsJiYodGhpcy5fb3B0aW9ucy51c2VXb3JrZXI9bCk7''@;'; put 'put ''dmFyIGQ9dGhpcy5fb3B0aW9ucy51c2VXb3JrZXIsaD10aGlzLl9vcHRpb25zLnVzZVNoYXJlZFdvcmtlcjtpZih0eXBlb2YgV29ya2VyPiJ1IiYmKGQ9ITEpLHR5cGVvZiBTaGFyZWRXb3JrZXI+InUiJiYoaD0hMSksZHx8aCl7dmFyIHY9Y3RlKCJzY3JpcHQiKS5maWx0ZXIoZnVuY3Rpb24o''@;'; put 'put ''KXtyZXR1cm4iamF2YXNjcmlwdC93b3JrZXIiPT13cyh0aGlzKS5hdHRyKCJ0eXBlIil8fHdzKHRoaXMpLmF0dHIoInNyYyIpJiZ3cyh0aGlzKS5hdHRyKCJzcmMiKS5tYXRjaCgvLipcL0BocGNjLWpzXC93YXNtLyl9KTswPT12LnNpemUoKT8oY29uc29sZS53YXJuKCdObyBzY3JpcHQgdGFn''@;'; put 'put ''IG9mIHR5cGUgImphdmFzY3JpcHQvd29ya2VyIiB3YXMgZm91bmQgYW5kICJ1c2VXb3JrZXIiIGlzIHRydWUuIE5vdCB1c2luZyB3ZWIgd29ya2VyLicpLGQ9ITEsaD0hMSk6KHRoaXMuX3ZpelVSTD12LmF0dHIoInNyYyIpLHRoaXMuX3ZpelVSTHx8KGNvbnNvbGUud2FybignTm8gInNyYyIg''@;'; put 'put ''YXR0cmlidXRlIG9mIHdhcyBmb3VuZCBvbiB0aGUgImphdmFzY3JpcHQvd29ya2VyIiBzY3JpcHQgdGFnIGFuZCAidXNlV29ya2VyIiBpcyB0cnVlLiBOb3QgdXNpbmcgd2ViIHdvcmtlci4nKSxkPSExLGg9ITEpKX1pZihoKXtjb25zdCBaPSJkYXRhOmFwcGxpY2F0aW9uL2phdmFzY3JpcHQ7''@;'; put 'put ''YmFzZTY0LCIrYnRvYShWTi50b1N0cmluZygpKyIoIitXRXQudG9TdHJpbmcoKSsiKSgpIik7dGhpcy5fd29ya2VyPXRoaXMuX3dvcmtlcj1uZXcgU2hhcmVkV29ya2VyKFopLHRoaXMuX3dvcmtlclBvcnQ9dGhpcy5fd29ya2VyLnBvcnQsdGhpcy5fd29ya2VyUG9ydENsb3NlPXRoaXMuX3dv''@;'; put 'put ''cmtlci5wb3J0LmNsb3NlLmJpbmQodGhpcy5fd29ya2VyUG9ydCksdGhpcy5fd29ya2VyLnBvcnQuc3RhcnQoKSx0aGlzLl93b3JrZXJDYWxsYmFja3M9W119ZWxzZSBpZihkKXt2YXIgTT1uZXcgQmxvYihbVk4udG9TdHJpbmcoKSsiKCIrWkV0LnRvU3RyaW5nKCkrIikoKSJdKSxEPXdpbmRv''@;'; put 'put ''dy5VUkwuY3JlYXRlT2JqZWN0VVJMKE0pO3RoaXMuX3dvcmtlcj1uZXcgV29ya2VyKEQpLHRoaXMuX3dvcmtlclBvcnQ9dGhpcy5fd29ya2VyLHRoaXMuX3dvcmtlclBvcnRDbG9zZT10aGlzLl93b3JrZXIudGVybWluYXRlLmJpbmQodGhpcy5fd29ya2VyKSx0aGlzLl93b3JrZXJDYWxsYmFj''@;'; put 'put ''a3M9W119ZWxzZSByN2UubG9hZCgpLnRoZW4oKFo9Pnt0aGlzLl9ncmFwaHZpelZlcnNpb249Wi52ZXJzaW9uKCl9KS5iaW5kKHRoaXMpKTt0aGlzLl9zZWxlY3Rpb249Yyx0aGlzLl9hY3RpdmU9ITEsdGhpcy5fYnVzeT0hMSx0aGlzLl9qb2JzPVtdLHRoaXMuX3F1ZXVlPVtdLHRoaXMuX2tl''@;'; put 'put ''eU1vZGVzPW5ldyBTZXQoWyJ0aXRsZSIsImlkIiwidGFnLWluZGV4IiwiaW5kZXgiXSksdGhpcy5faW1hZ2VzPVtdLHRoaXMuX3RyYW5zbGF0aW9uPXZvaWQgMCx0aGlzLl9zY2FsZT12b2lkIDAsdGhpcy5fZXZlbnRUeXBlcz1bImluaXRFbmQiLCJzdGFydCIsImxheW91dFN0YXJ0IiwibGF5''@;'; put 'put ''b3V0RW5kIiwiZGF0YUV4dHJhY3RFbmQiLCJkYXRhUHJvY2Vzc1Bhc3MxRW5kIiwiZGF0YVByb2Nlc3NQYXNzMkVuZCIsImRhdGFQcm9jZXNzRW5kIiwicmVuZGVyU3RhcnQiLCJyZW5kZXJFbmQiLCJ0cmFuc2l0aW9uU3RhcnQiLCJ0cmFuc2l0aW9uRW5kIiwicmVzdG9yZUVuZCIsImVuZCIs''@;'; put 'put ''Inpvb20iXSx0aGlzLl9kaXNwYXRjaD11dGUoLi4udGhpcy5fZXZlbnRUeXBlcyksWHh0LmNhbGwodGhpcyksYy5ub2RlKCkuX19ncmFwaHZpel9fPXRoaXN9ZnVuY3Rpb24gQk4oYyxsKXtyZXR1cm4gd3MoYykuZ3JhcGh2aXoobCl9aDdlLnByb3RvdHlwZT16dGUucHJvdG90eXBlLFV0ZS5w''@;'; put 'put ''cm90b3R5cGU9Qk4ucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpVdGUsZW5naW5lOmZ1bmN0aW9uIHVFdChjKXtyZXR1cm4gdGhpcy5fb3B0aW9ucy5lbmdpbmU9Yyx0aGlzfSxhZGRJbWFnZTpmdW5jdGlvbiBkRXQoYyxsLGEpe3JldHVybiB0aGlzLl9pbWFnZXMucHVzaCh7cGF0aDpjLHdpZHRo''@;'; put 'put ''OmwsaGVpZ2h0OmF9KSx0aGlzfSxrZXlNb2RlOmZ1bmN0aW9uIGhFdChjKXtpZighdGhpcy5fa2V5TW9kZXMuaGFzKGMpKXRocm93IEVycm9yKCJJbGxlZ2FsIGtleU1vZGU6ICIrYyk7aWYoYyE9dGhpcy5fb3B0aW9ucy5rZXlNb2RlJiZudWxsIT10aGlzLl9kYXRhKXRocm93IEVycm9yKCJU''@;'; put 'put ''b28gbGF0ZSB0byBjaGFuZ2Uga2V5TW9kZSIpO3JldHVybiB0aGlzLl9vcHRpb25zLmtleU1vZGU9Yyx0aGlzfSxmYWRlOmZ1bmN0aW9uIGZFdChjKXtyZXR1cm4gdGhpcy5fb3B0aW9ucy5mYWRlPWMsdGhpc30sdHdlZW5QYXRoczpmdW5jdGlvbiBwRXQoYyl7cmV0dXJuIHRoaXMuX29wdGlv''@;'; put 'put ''bnMudHdlZW5QYXRocz1jLHRoaXN9LHR3ZWVuU2hhcGVzOmZ1bmN0aW9uIGdFdChjKXtyZXR1cm4gdGhpcy5fb3B0aW9ucy50d2VlblNoYXBlcz1jLGMmJih0aGlzLl9vcHRpb25zLnR3ZWVuUGF0aHM9ITApLHRoaXN9LGNvbnZlcnRFcXVhbFNpZGVkUG9seWdvbnM6ZnVuY3Rpb24gbUV0KGMp''@;'; put 'put ''e3JldHVybiB0aGlzLl9vcHRpb25zLmNvbnZlcnRFcXVhbFNpZGVkUG9seWdvbnM9Yyx0aGlzfSx0d2VlblByZWNpc2lvbjpmdW5jdGlvbiB2RXQoYyl7cmV0dXJuIHRoaXMuX29wdGlvbnMudHdlZW5QcmVjaXNpb249Yyx0aGlzfSxncm93RW50ZXJpbmdFZGdlczpmdW5jdGlvbiBiRXQoYyl7''@;'; put 'put ''cmV0dXJuIHRoaXMuX29wdGlvbnMuZ3Jvd0VudGVyaW5nRWRnZXM9Yyx0aGlzfSx6b29tOmZ1bmN0aW9uIHV4dChjKXtyZXR1cm4gdGhpcy5fb3B0aW9ucy56b29tPWMsdGhpcy5fb3B0aW9ucy56b29tJiYhdGhpcy5fem9vbUJlaGF2aW9yP1g4ZS5jYWxsKHRoaXMpOiF0aGlzLl9vcHRpb25z''@;'; put 'put ''Lnpvb20mJnRoaXMuX3pvb21CZWhhdmlvciYmKHRoaXMuX3pvb21TZWxlY3Rpb24ub24oIi56b29tIixudWxsKSx0aGlzLl96b29tQmVoYXZpb3I9bnVsbCksdGhpc30scmVzZXRab29tOmZ1bmN0aW9uIGR4dChjKXt2YXIgbD10aGlzLl96b29tU2VsZWN0aW9uO3JldHVybiBjJiYobD1sLnRy''@;'; put 'put ''YW5zaXRpb24oYykpLGwuY2FsbCh0aGlzLl96b29tQmVoYXZpb3IudHJhbnNmb3JtLHRoaXMuX29yaWdpbmFsVHJhbnNmb3JtKSx0aGlzfSx6b29tQmVoYXZpb3I6ZnVuY3Rpb24gcHh0KCl7cmV0dXJuIHRoaXMuX3pvb21CZWhhdmlvcnx8bnVsbH0sem9vbVNlbGVjdGlvbjpmdW5jdGlvbiBn''@;'; put 'put ''eHQoKXtyZXR1cm4gdGhpcy5fem9vbVNlbGVjdGlvbnx8bnVsbH0sem9vbVNjYWxlRXh0ZW50OmZ1bmN0aW9uIGh4dChjKXtyZXR1cm4gdGhpcy5fb3B0aW9ucy56b29tU2NhbGVFeHRlbnQ9Yyx0aGlzfSx6b29tVHJhbnNsYXRlRXh0ZW50OmZ1bmN0aW9uIGZ4dChjKXtyZXR1cm4gdGhpcy5f''@;'; put 'put ''b3B0aW9ucy56b29tVHJhbnNsYXRlRXh0ZW50PWMsdGhpc30scmVuZGVyOmZ1bmN0aW9uIHd4dChjKXtyZXR1cm4gdGhpcy5fYnVzeT8odGhpcy5fcXVldWUucHVzaCh0aGlzLnJlbmRlci5iaW5kKHRoaXMsYykpLHRoaXMpOih0aGlzLl9kaXNwYXRjaC5jYWxsKCJyZW5kZXJTdGFydCIsdGhp''@;'; put 'put ''cyksdGhpcy5fdHJhbnNpdGlvbkZhY3Rvcnk/Yk4oZnVuY3Rpb24oKXt0aGlzLl90cmFuc2l0aW9uPU10ZSh0aGlzLl90cmFuc2l0aW9uRmFjdG9yeSgpKSxlN2UuY2FsbCh0aGlzLGMpfS5iaW5kKHRoaXMpLDApOmU3ZS5jYWxsKHRoaXMsYyksdGhpcyl9LGxheW91dDpmdW5jdGlvbiBKeHQo''@;'; put 'put ''YyxsLGEsZCl7aWYodGhpcy5fd29ya2VyKUh0ZS5jYWxsKHRoaXMse3R5cGU6ImxheW91dCIsZG90OmMsZW5naW5lOmwsb3B0aW9uczphfSxmdW5jdGlvbihmKXtkLmNhbGwodGhpcyxmLmRhdGEpfSk7ZWxzZSB0cnl7dmFyIGg9dGhpcy5sYXlvdXRTeW5jKGMsInN2ZyIsbCxhKTtkLmNhbGwo''@;'; put 'put ''dGhpcyx7dHlwZToiZG9uZSIsc3ZnOmh9KX1jYXRjaChmKXtkLmNhbGwodGhpcyx7dHlwZToiZXJyb3IiLGVycm9yOmYubWVzc2FnZX0pfX0sZG90OmZ1bmN0aW9uIFF4dChjLGwpe3ZhciBhPXRoaXMsaD10aGlzLl9vcHRpb25zLmVuZ2luZSxmPXRoaXMuX2ltYWdlcztyZXR1cm4gdGhpcy5f''@;'; put 'put ''ZGlzcGF0Y2guY2FsbCgic3RhcnQiLHRoaXMpLHRoaXMuX2J1c3k9ITAsdGhpcy5fZGlzcGF0Y2guY2FsbCgibGF5b3V0U3RhcnQiLHRoaXMpLHRoaXMuX3dvcmtlcnx8bnVsbCE9dGhpcy5sYXlvdXRTeW5jPyh0aGlzLmxheW91dChjLGgse2ltYWdlczpmfSxmdW5jdGlvbihNKXtzd2l0Y2go''@;'; put 'put ''TS50eXBlKXtjYXNlImVycm9yIjppZighYS5fb25lcnJvcil0aHJvdyBNLmVycm9yLm1lc3NhZ2U7YS5fb25lcnJvcihNLmVycm9yKTticmVhaztjYXNlImRvbmUiOmVFdC5jYWxsKHRoaXMsTS5zdmcsbCl9fSksdGhpcyk6KHRoaXMuX2FmdGVySW5pdD10aGlzLmRvdC5iaW5kKHRoaXMsYyxs''@;'; put 'put ''KSx0aGlzKX0sZGF0YTpmdW5jdGlvbiBieHQoKXtyZXR1cm4gdGhpcy5fZGF0YXx8bnVsbH0scmVuZGVyRG90OmZ1bmN0aW9uIHRFdChjLGwpe3ZhciBhPXRoaXM7cmV0dXJuIHRoaXMuZG90KGMsZnVuY3Rpb24gZCgpe2EucmVuZGVyKGwpfSksdGhpc30sdHJhbnNpdGlvbjpmdW5jdGlvbiBu''@;'; put 'put ''RXQoYyl7cmV0dXJuIGMgaW5zdGFuY2VvZiBGdW5jdGlvbj90aGlzLl90cmFuc2l0aW9uRmFjdG9yeT1jOnRoaXMuX3RyYW5zaXRpb249TXRlKGMpLHRoaXN9LGFjdGl2ZTpmdW5jdGlvbiByRXQoYyl7dmFyIGE9dGhpcy5fc2VsZWN0aW9uLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24o''@;'; put 'put ''InN2ZyIpO3JldHVybiAwIT1hLnNpemUoKT9mdW5jdGlvbiBVTXQoYyxsKXt2YXIgZCxoLGE9Yy5fX3RyYW5zaXRpb247aWYoYSlmb3IoaCBpbiBsPW51bGw9PWw/bnVsbDpsKyIiLGEpaWYoKGQ9YVtoXSkuc3RhdGU+MSYmZC5uYW1lPT09bClyZXR1cm4gbmV3IHU0KFtbY11dLHpNdCxsLCto''@;'; put 'put ''KTtyZXR1cm4gbnVsbH0oYS5ub2RlKCksYyk6bnVsbH0sb3B0aW9uczpmdW5jdGlvbiBpRXQoYyl7aWYodHlwZW9mIGM+InUiKXJldHVybiBPYmplY3QuYXNzaWduKHt9LHRoaXMuX29wdGlvbnMpO2Zvcih2YXIgbCBvZiBPYmplY3Qua2V5cyhjKSl0aGlzLl9vcHRpb25zW2xdPWNbbF07cmV0''@;'; put 'put ''dXJuIHRoaXN9LHdpZHRoOmZ1bmN0aW9uIGFFdChjKXtyZXR1cm4gdGhpcy5fb3B0aW9ucy53aWR0aD1jLHRoaXN9LGhlaWdodDpmdW5jdGlvbiBvRXQoYyl7cmV0dXJuIHRoaXMuX29wdGlvbnMuaGVpZ2h0PWMsdGhpc30sc2NhbGU6ZnVuY3Rpb24gc0V0KGMpe3JldHVybiB0aGlzLl9vcHRp''@;'; put 'put ''b25zLnNjYWxlPWMsdGhpc30sZml0OmZ1bmN0aW9uIGxFdChjKXtyZXR1cm4gdGhpcy5fb3B0aW9ucy5maXQ9Yyx0aGlzfSxhdHRyaWJ1dGVyOmZ1bmN0aW9uIGNFdChjKXtyZXR1cm4gdGhpcy5fYXR0cmlidXRlcj1jLHRoaXN9LG9uOmZ1bmN0aW9uIHlFdChjLGwpe3JldHVybiB0aGlzLl9k''@;'; put 'put ''aXNwYXRjaC5vbihjLGwpLHRoaXN9LG9uZXJyb3I6ZnVuY3Rpb24gX0V0KGMpe3JldHVybiB0aGlzLl9vbmVycm9yPWMsdGhpc30sbG9nRXZlbnRzOmZ1bmN0aW9uIElFdChjKXt2YXIgbD1EYXRlLm5vdygpLGE9e30sZD10aGlzLl9ldmVudFR5cGVzLGg9TWF0aC5tYXgoLi4uZC5tYXAoRD0+''@;'; put 'put ''RC5sZW5ndGgpKTtmb3IobGV0IEQ9MDtEPGQubGVuZ3RoO0QrKyl7bGV0IFo9ZFtEXTthW1pdPVtdO3ZhciB2LE0sZj10aGlzO3RoaXMub24oWisiLmxvZyIsYz9mdW5jdGlvbigpe3ZhciByZT1EYXRlLm5vdygpLGNlPWFbWl0ubGVuZ3RoO2FbWl0ucHVzaChyZSk7dmFyIGJlPSIiO2lmKGJl''@;'; put 'put ''Kz0iRXZlbnQgIixiZSs9YWYoIiA+MiIpKEQpKyIgIixiZSs9WisiICIucmVwZWF0KGgtWi5sZW5ndGgpLGJlKz1hZigiID41IikocmUtbCkrIiAiLCJpbml0RW5kIiE9WiYmKGJlKz1hZigiID41IikocmUtYS5zdGFydFtjZV0pKSwiZGF0YVByb2Nlc3NFbmQiPT1aJiYoYmUrPSIgcHJlcGFy''@;'; put 'put ''ZSAgICAgICAgICAgICAgICAgIithZigiID41IikocmUtYS5sYXlvdXRFbmRbY2VdKSksInJlbmRlckVuZCI9PVomJmYuX3RyYW5zaXRpb24mJihiZSs9IiB0cmFuc2l0aW9uIHN0YXJ0IG1hcmdpbiAiK2FmKCIgPjUiKShmLl90cmFuc2l0aW9uLmRlbGF5KCktKHJlLWEucmVuZGVyU3RhcnRb''@;'; put 'put ''Y2VdKSksdj1mLl90cmFuc2l0aW9uLmRlbGF5KCksTT1mLl90cmFuc2l0aW9uLmR1cmF0aW9uKCkpLCJ0cmFuc2l0aW9uU3RhcnQiPT1aKXt2YXIgRWU9cmUtYS5yZW5kZXJTdGFydFtjZV07YmUrPSIgdHJhbnNpdGlvbiBkZWxheSAgICAgICAgIithZigiID41IikocmUtYS5yZW5kZXJTdGFy''@;'; put 'put ''dFtjZV0pLGJlKz0iIGV4cGVjdGVkICIrYWYoIiA+NSIpKHYpLGJlKz0iIGRpZmYgIithZigiID41IikoRWUtdil9aWYoInRyYW5zaXRpb25FbmQiPT1aKXt2YXIgQmU9cmUtYS50cmFuc2l0aW9uU3RhcnRbY2VdO2JlKz0iIHRyYW5zaXRpb24gZHVyYXRpb24gICAgICIrYWYoIiA+NSIpKEJl''@;'; put 'put ''KSxiZSs9IiBleHBlY3RlZCAiK2FmKCIgPjUiKShNKSxiZSs9IiBkaWZmICIrYWYoIiA+NSIpKEJlLU0pfWNvbnNvbGUubG9nKGJlKSxsPXJlfTpudWxsKX1yZXR1cm4gdGhpc30sZGVzdHJveTpmdW5jdGlvbiBSRXQoKXtyZXR1cm4gZGVsZXRlIHRoaXMuX3NlbGVjdGlvbi5ub2RlKCkuX19n''@;'; put 'put ''cmFwaHZpel9fLHRoaXMuX3dvcmtlciYmdGhpcy5fd29ya2VyUG9ydENsb3NlKCksdGhpc30sZHJhd0VkZ2U6ZnVuY3Rpb24gRkV0KGMsbCxhLGQsaCxmPXt9KXtpZigoaD1PYmplY3QuYXNzaWduKHt9LGgpKS5zdHlsZSYmaC5zdHlsZS5pbmNsdWRlcygiaW52aXMiKSl2YXIgdj13cyhudWxs''@;'; put 'put ''KTtlbHNle3ZhciBaPXRoaXMuX3NlbGVjdGlvbi5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJzdmciKS5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJnIiksY2U9bnYodjdlLmNhbGwodGhpcyxoKSk7dj1aLmFwcGVuZCgiZyIpLmRhdGEoW2NlXSksT0EuY2FsbCh2Lm5vZGUo''@;'; put 'put ''KSxjZSksZjdlLmNhbGwodGhpcyx2LGMsbCxhLGQsaCxmKX1yZXR1cm4gdGhpcy5fZHJhd25FZGdlPXtnOnYseDE6Yyx5MTpsLHgyOmEseTI6ZCxhdHRyaWJ1dGVzOmh9LHRoaXN9LHVwZGF0ZURyYXduRWRnZTpmdW5jdGlvbiBIRXQoYyxsLGEsZCxoPXt9LGY9e30pe2lmKCF0aGlzLl9kcmF3''@;'; put 'put ''bkVkZ2UpdGhyb3cgRXJyb3IoIk5vIGVkZ2UgaGFzIGJlZW4gZHJhd24iKTt2YXIgdj10aGlzLl9kcmF3bkVkZ2UuZztyZXR1cm4gaD1PYmplY3QuYXNzaWduKHRoaXMuX2RyYXduRWRnZS5hdHRyaWJ1dGVzLGgpLHRoaXMuX2RyYXduRWRnZS54MT1jLHRoaXMuX2RyYXduRWRnZS55MT1sLHRo''@;'; put 'put ''aXMuX2RyYXduRWRnZS54Mj1hLHRoaXMuX2RyYXduRWRnZS55Mj1kLCF2LmVtcHR5KCl8fGguc3R5bGUmJmguc3R5bGUuaW5jbHVkZXMoImludmlzIil8fCh2PXRoaXMuX3NlbGVjdGlvbi5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJzdmciKS5zZWxlY3RXaXRob3V0RGF0YVByb3Bh''@;'; put 'put ''Z2F0aW9uKCJnIikuYXBwZW5kKCJnIiksdGhpcy5fZHJhd25FZGdlLmc9diksdi5lbXB0eSgpfHxmN2UuY2FsbCh0aGlzLHYsYyxsLGEsZCxoLGYpLHRoaXN9LG1vdmVEcmF3bkVkZ2VFbmRQb2ludDpmdW5jdGlvbiBORXQoYyxsLGE9e30pe2lmKCF0aGlzLl9kcmF3bkVkZ2UpdGhyb3cgRXJy''@;'; put 'put ''b3IoIk5vIGVkZ2UgaGFzIGJlZW4gZHJhd24iKTt2YXIgZD10aGlzLl9kcmF3bkVkZ2UuZyxoPXRoaXMuX2RyYXduRWRnZS54MSxmPXRoaXMuX2RyYXduRWRnZS55MSx2PXRoaXMuX2RyYXduRWRnZS5hdHRyaWJ1dGVzO3JldHVybiB0aGlzLl9kcmF3bkVkZ2UueDI9Yyx0aGlzLl9kcmF3bkVk''@;'; put 'put ''Z2UueTI9bCxwN2UoZCxoLGYsYyxsLHYsYSksdGhpc30saW5zZXJ0RHJhd25FZGdlOmZ1bmN0aW9uIFZFdChjKXtpZighdGhpcy5fZHJhd25FZGdlKXRocm93IEVycm9yKCJObyBlZGdlIGhhcyBiZWVuIGRyYXduIik7dmFyIGw9dGhpcy5fZHJhd25FZGdlLmc7aWYobC5lbXB0eSgpKXJldHVy''@;'; put 'put ''biB0aGlzO2wuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigidGl0bGUiKS50ZXh0KGMpO3ZhciB2PXRoaXMuX3NlbGVjdGlvbi5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJzdmciKS5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJnIiksTT12LmRhdHVtKCksRD10aGlz''@;'; put 'put ''Ll9leHRyYWN0RGF0YShsLE0uY2hpbGRyZW4ubGVuZ3RoLHYuZGF0dW0oKSk7cmV0dXJuIE0uY2hpbGRyZW4ucHVzaChEKSxEdGUobCxEKSx0aGlzLl9kcmF3bkVkZ2U9bnVsbCx0aGlzfSxyZW1vdmVEcmF3bkVkZ2U6ZzdlLHJlbW92ZURyYXduRWRnZTpnN2UsZHJhd25FZGdlU2VsZWN0aW9u''@;'; put 'put ''Om03ZSxkcmF3bkVkZ2VTZWxlY3Rpb246bTdlLGRyYXdOb2RlOmZ1bmN0aW9uIEJFdChjLGwsYSxkPXt9LGg9e30pe2lmKChkPU9iamVjdC5hc3NpZ24oe30sZCkpLnN0eWxlJiZkLnN0eWxlLmluY2x1ZGVzKCJpbnZpcyIpKXZhciBmPXdzKG51bGwpO2Vsc2V7dmFyIEQ9dGhpcy5fc2VsZWN0''@;'; put 'put ''aW9uLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oInN2ZyIpLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oImciKSxyZT1udihDN2UuY2FsbCh0aGlzLGEsZCkpO2Y9RC5hcHBlbmQoImciKS5kYXRhKFtyZV0pLE9BLmNhbGwoZi5ub2RlKCkscmUpLGI3ZS5jYWxsKHRoaXMsZixj''@;'; put 'put ''LGwsYSxkLGgpfXJldHVybiB0aGlzLl9kcmF3bk5vZGU9e2c6Zixub2RlSWQ6YSx4OmMseTpsLGF0dHJpYnV0ZXM6ZH0sdGhpc30sdXBkYXRlRHJhd25Ob2RlOmZ1bmN0aW9uIGpFdChjLGwsYSxkPXt9LGg9e30pe2lmKCF0aGlzLl9kcmF3bk5vZGUpdGhyb3cgRXJyb3IoIk5vIG5vZGUgaGFz''@;'; put 'put ''IGJlZW4gZHJhd24iKTt2YXIgZj10aGlzLl9kcmF3bk5vZGUuZztyZXR1cm4gbnVsbD09YSYmKGE9dGhpcy5fZHJhd25Ob2RlLm5vZGVJZCksZD1PYmplY3QuYXNzaWduKHRoaXMuX2RyYXduTm9kZS5hdHRyaWJ1dGVzLGQpLHRoaXMuX2RyYXduTm9kZS5ub2RlSWQ9YSx0aGlzLl9kcmF3bk5v''@;'; put 'put ''ZGUueD1jLHRoaXMuX2RyYXduTm9kZS55PWwsIWYuZW1wdHkoKXx8ZC5zdHlsZSYmZC5zdHlsZS5pbmNsdWRlcygiaW52aXMiKXx8KGY9dGhpcy5fc2VsZWN0aW9uLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oInN2ZyIpLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oImciKS5h''@;'; put 'put ''cHBlbmQoImciKSx0aGlzLl9kcmF3bk5vZGUuZz1mKSxmLmVtcHR5KCl8fGI3ZS5jYWxsKHRoaXMsZixjLGwsYSxkLGgpLHRoaXN9LG1vdmVEcmF3bk5vZGU6ZnVuY3Rpb24gekV0KGMsbCxhPXt9KXtpZighdGhpcy5fZHJhd25Ob2RlKXRocm93IEVycm9yKCJObyBub2RlIGhhcyBiZWVuIGRy''@;'; put 'put ''YXduIik7dmFyIGQ9dGhpcy5fZHJhd25Ob2RlLmcsaD10aGlzLl9kcmF3bk5vZGUuYXR0cmlidXRlcztyZXR1cm4gdGhpcy5fZHJhd25Ob2RlLng9Yyx0aGlzLl9kcmF3bk5vZGUueT1sLGQuZW1wdHkoKXx8eTdlKGQsYyxsLGgpLHRoaXN9LGluc2VydERyYXduTm9kZTpmdW5jdGlvbiBVRXQo''@;'; put 'put ''Yyl7aWYoIXRoaXMuX2RyYXduTm9kZSl0aHJvdyBFcnJvcigiTm8gbm9kZSBoYXMgYmVlbiBkcmF3biIpO251bGw9PWMmJihjPXRoaXMuX2RyYXduTm9kZS5ub2RlSWQpO3ZhciBsPXRoaXMuX2RyYXduTm9kZS5nO2lmKGwuZW1wdHkoKSlyZXR1cm4gdGhpczt2YXIgYT10aGlzLl9kcmF3bk5v''@;'; put 'put ''ZGUuYXR0cmlidXRlcztpZihsLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oInRpdGxlIikudGV4dChjKSxhLlVSTHx8YS50b29sdGlwKXZhciBmPWwuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigiZyIpLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oImEiKSxNPShmLnNl''@;'; put 'put ''bGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oImVsbGlwc2UscG9seWdvbixwYXRoLHBvbHlsaW5lIiksZi5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJ0ZXh0IikpO2Vsc2UgbC5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJlbGxpcHNlLHBvbHlnb24scGF0aCxwb2x5bGlu''@;'; put 'put ''ZSIpLE09bC5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJ0ZXh0Iik7TS50ZXh0KGEubGFiZWx8fGMpO3ZhciByZT10aGlzLl9zZWxlY3Rpb24uc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigic3ZnIikuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigiZyIpLGNlPXJlLmRh''@;'; put 'put ''dHVtKCksYmU9dGhpcy5fZXh0cmFjdERhdGEobCxjZS5jaGlsZHJlbi5sZW5ndGgscmUuZGF0dW0oKSk7cmV0dXJuIGNlLmNoaWxkcmVuLnB1c2goYmUpLER0ZShsLGJlKSx0aGlzLl9kcmF3bk5vZGU9bnVsbCx0aGlzfSxyZW1vdmVEcmF3bk5vZGU6XzdlLHJlbW92ZURyYXduTm9kZTpfN2Us''@;'; put 'put ''ZHJhd25Ob2RlU2VsZWN0aW9uOnc3ZSxkcmF3bk5vZGVTZWxlY3Rpb246dzdlLGdyYXBodml6VmVyc2lvbjpmdW5jdGlvbiBDeHQoKXtyZXR1cm4gdGhpcy5fZ3JhcGh2aXpWZXJzaW9ufX0scTkucHJvdG90eXBlLmdyYXBodml6PWZ1bmN0aW9uIFlFdChjKXt2YXIgbD10aGlzLm5vZGUoKS5f''@;'; put 'put ''X2dyYXBodml6X187cmV0dXJuIGw/KGwub3B0aW9ucyhjKSxiTihmdW5jdGlvbigpe2wuX2Rpc3BhdGNoLmNhbGwoImluaXRFbmQiLHRoaXMpfS5iaW5kKHRoaXMpLDApKTpsPW5ldyBVdGUodGhpcyxjKSxsfSxxOS5wcm90b3R5cGUuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbj1mdW5j''@;'; put 'put ''dGlvbiBHRXQoYyl7cmV0dXJuIHdzKHRoaXMuc2l6ZSgpPjA/dGhpcy5ub2RlKCkucXVlcnlTZWxlY3RvcihjKTpudWxsKX07dmFyICRFdD15KDk4MDgzKTtmdW5jdGlvbiBLRXQoYyxsKXsxJmMmJkd0KDAsImNsci1pY29uIiwyOSl9ZnVuY3Rpb24gcUV0KGMsbCl7aWYoMSZjKXtjb25zdCBh''@;'; put 'put ''PUxuKCk7ZGUoMCwiY2xyLWljb24iLDMwKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSgyKTtyZXR1cm4gaC5saWJyYXJpZXNTZWFyY2g9IiIsQ3QoaC5saWJyYXJ5T25GaWx0ZXIoKSl9KSxoZSgpfX1mdW5jdGlvbiBYRXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4o''@;'; put 'put ''KTtkZSgwLCJjbHItdHJlZS1ub2RlIiwyNCkoMSwiZGl2IiwyNSkoMiwiaW5wdXQiLDI2LDIpLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPVJlKCk7cmV0dXJuIG1pKGYubGlicmFyaWVzU2VhcmNoLGgpfHwoZi5saWJyYXJpZXNTZWFyY2g9aCksQ3QoaCl9''@;'; put 'put ''KSxGdCgia2V5dXAiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkubGlicmFyeU9uRmlsdGVyKCkpfSksaGUoKSxndCg0LEtFdCwxLDAsImNsci1pY29uIiwyNykoNSxxRXQsMSwwLCJjbHItaWNvbiIsMjgpLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9aGEoMyksZD1SZSgpO2ZlKDIp''@;'; put 'put ''LHBpKCJuZ01vZGVsIixkLmxpYnJhcmllc1NlYXJjaCksZmUoMiksTWUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPDEpLGZlKCksTWUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPjApfX1mdW5jdGlvbiBKRXQoYyxsKXsxJmMmJkd0KDAsImNsci1pY29uIiwyOSl9ZnVuY3Rpb24gUUV0KGMsbCl7aWYo''@;'; put 'put ''MSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLWljb24iLDMwKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSksUmUoKTtjb25zdCBoPWhhKDMpLGY9UmUoMikuJGltcGxpY2l0LHY9UmUoKTtyZXR1cm4gaC52YWx1ZT0iIixmLnNlYXJjaFN0cmluZz0iIixDdCh2LnRyZWVPbkZpbHRlcihm''@;'; put 'put ''LCJ0YWJsZXMuVEFCTEVOQU1FIikpfSksaGUoKX19ZnVuY3Rpb24gZVR0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLXRyZWUtbm9kZSIsMjQpKDEsImRpdiIsMjUpKDIsImlucHV0IiwzNiwzKSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3Qg''@;'; put 'put ''Zj1SZSgyKS4kaW1wbGljaXQ7cmV0dXJuIG1pKGYuc2VhcmNoU3RyaW5nLGgpfHwoZi5zZWFyY2hTdHJpbmc9aCksQ3QoaCl9KSxGdCgia2V5dXAiLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSgyKS4kaW1wbGljaXQ7cmV0dXJuIEN0KFJlKCkudHJlZU9uRmlsdGVyKGgsInRhYmxlcy5U''@;'; put 'put ''QUJMRU5BTUUiKSl9KSxoZSgpLGd0KDQsSkV0LDEsMCwiY2xyLWljb24iLDI3KSg1LFFFdCwxLDAsImNsci1pY29uIiwyOCksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1oYSgzKSxkPVJlKDIpLiRpbXBsaWNpdDtmZSgyKSxwaSgibmdNb2RlbCIsZC5zZWFyY2hTdHJpbmcpLGZlKDIpLE1lKCJu''@;'; put 'put ''Z0lmIixhLnZhbHVlLmxlbmd0aDwxKSxmZSgpLE1lKCJuZ0lmIixhLnZhbHVlLmxlbmd0aD4wKX19ZnVuY3Rpb24gdFR0KGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsMjkpfWZ1bmN0aW9uIG5UdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci1pY29uIiwzMCksRnQoImNs''@;'; put 'put ''aWNrIixmdW5jdGlvbigpe3d0KGEpLFJlKCk7Y29uc3QgaD1oYSgzKSxmPVJlKCkuJGltcGxpY2l0LHY9UmUoMyk7cmV0dXJuIGgudmFsdWU9IiIsZi5zZWFyY2hTdHJpbmc9IiIsQ3Qodi50cmVlT25GaWx0ZXIoZiwiY29sdW1ucy5DT0xOQU1FIikpfSksaGUoKX19ZnVuY3Rpb24gclR0KGMs''@;'; put 'put ''bCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLXRyZWUtbm9kZSIsMjQpKDEsImRpdiIsMjUpKDIsImlucHV0IiwzOSwzKSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1SZSgpLiRpbXBsaWNpdDtyZXR1cm4gbWkoZi5zZWFyY2hTdHJpbmcsaCl8''@;'; put 'put ''fChmLnNlYXJjaFN0cmluZz1oKSxDdChoKX0pLEZ0KCJrZXl1cCIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPVJlKCkuJGltcGxpY2l0O3JldHVybiBDdChSZSgzKS50cmVlT25GaWx0ZXIoaCwiY29sdW1ucy5DT0xOQU1FIikpfSksaGUoKSxndCg0LHRUdCwxLDAsImNsci1pY29uIiwyNyko''@;'; put 'put ''NSxuVHQsMSwwLCJjbHItaWNvbiIsMjgpLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9aGEoMyksZD1SZSgpLiRpbXBsaWNpdDtmZSgyKSxwaSgibmdNb2RlbCIsZC5zZWFyY2hTdHJpbmcpLGZlKDIpLE1lKCJuZ0lmIixhLnZhbHVlLmxlbmd0aDwxKSxmZSgpLE1lKCJuZ0lmIixhLnZhbHVlLmxl''@;'; put 'put ''bmd0aD4wKX19ZnVuY3Rpb24gaVR0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLXRyZWUtbm9kZSIpKDEsImJ1dHRvbiIsNDApLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLiRpbXBsaWNpdCxmPVJlKCkuJGltcGxpY2l0LHY9UmUoMikuJGltcGxpY2l0''@;'; put 'put ''O3JldHVybiBDdChSZSgpLmNvbHVtbk9uQ2xpY2soaCx2LGYpKX0pLEd0KDIsImNsci1pY29uIiw0MSksTGUoMyksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPVJlKDQpO2ZlKCksVHIoImNvbHVtbi1hY3RpdmUiLGQubGliQ29sdW1uQWN0aXZlKGEuQ09MVVJJKSksZmUo''@;'; put 'put ''MiksSXIoIiAiLGEuQ09MTkFNRSwiICIpfX1mdW5jdGlvbiBhVHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItdHJlZS1ub2RlIiwzMiksRnQoImNsaWNrIixmdW5jdGlvbihoKXtjb25zdCBmPXd0KGEpLiRpbXBsaWNpdCx2PVJlKDIpLiRpbXBsaWNpdDtyZXR1cm4gQ3Qo''@;'; put 'put ''UmUoKS50cmVlTm9kZUNsaWNrZWQoaCxmLHYudGFibGVzKSl9KSxnaSgiY2xyRXhwYW5kZWRDaGFuZ2UiLGZ1bmN0aW9uKGgpe2NvbnN0IGY9d3QoYSkuJGltcGxpY2l0O3JldHVybiBtaShmLmV4cGFuZGVkLGgpfHwoZi5leHBhbmRlZD1oKSxDdChoKX0pLGRlKDEsInAiLDM3KSxGdCgiY2xp''@;'; put 'put ''Y2siLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKS4kaW1wbGljaXQsZj1SZSgyKS4kaW1wbGljaXQ7cmV0dXJuIEN0KFJlKCkudGFibGVPbkNsaWNrKGguVEFCTEVVUkksaCxmKSl9KSxHdCgyLCJjbHItaWNvbiIsMzgpLExlKDMpLGhlKCksZ3QoNCxyVHQsNiwzLCJjbHItdHJlZS1ub2RlIiw1''@;'; put 'put ''KSg1LGlUdCw0LDMsImNsci10cmVlLW5vZGUiLDYpLGhlKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O1RyKCJjbHItZXhwYW5kZWQiLGEuZXhwYW5kZWQpLHBpKCJjbHJFeHBhbmRlZCIsYS5leHBhbmRlZCksTWUoImNsckxvYWRpbmciLGEubG9hZGluZ0NvbHVtbnMmJiFhLmNvbHVt''@;'; put 'put ''bnMpLGZlKCksTWUoImlkIixhLlRBQkxFVVJJKSxmZSgyKSxJcigiICIsYS5UQUJMRU5BTUUsIiAiKSxmZSgpLE1lKCJuZ0lmIixhLmNvbHVtbnMpLGZlKCksTWUoIm5nRm9yT2YiLGEuY29sdW1ucyl9fWZ1bmN0aW9uIG9UdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci10''@;'; put 'put ''cmVlLW5vZGUiLDMyKSxGdCgiY2xpY2siLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9UmUoKS4kaW1wbGljaXQsdj1SZSgpO3JldHVybiBDdCh2LnRyZWVOb2RlQ2xpY2tlZChoLGYsdi5saWJyYXJ5TGlzdCkpfSksZ2koImNsckV4cGFuZGVkQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtj''@;'; put 'put ''b25zdCBmPVJlKCkuJGltcGxpY2l0O3JldHVybiBtaShmLmV4cGFuZGVkLGgpfHwoZi5leHBhbmRlZD1oKSxDdChoKX0pLGRlKDEsInAiLDMzKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSgpLiRpbXBsaWNpdCxmPVJlKCk7cmV0dXJuIGYubGliPWguTElCUkFSWUlE''@;'; put 'put ''LEN0KGYubGlicmFyeU9uQ2xpY2soZi5saWJ8fCIiLGgpKX0pLEd0KDIsImNsci1pY29uIiwzNCksTGUoMyksaGUoKSxndCg0LGVUdCw2LDMsImNsci10cmVlLW5vZGUiLDUpKDUsYVR0LDYsOCwiY2xyLXRyZWUtbm9kZSIsMzUpLGhlKCl9aWYoMiZjKXtjb25zdCBhPVJlKCkuJGltcGxpY2l0''@;'; put 'put ''O1RyKCJjbHItZXhwYW5kZWQiLGEuZXhwYW5kZWQpLHBpKCJjbHJFeHBhbmRlZCIsYS5leHBhbmRlZCksTWUoImNsckxvYWRpbmciLGEubG9hZGluZ1RhYmxlcyYmIWEudGFibGVzKSxmZSgzKSxJcigiICIsYS5MSUJSQVJZTkFNRSwiICIpLGZlKCksTWUoIm5nSWYiLGEudGFibGVzKSxmZSgp''@;'; put 'put ''LE1lKCJuZ0Zvck9mIixhLnRhYmxlcyl9fWZ1bmN0aW9uIHNUdChjLGwpe2lmKDEmYyYmKHNpKDApLGd0KDEsb1R0LDYsNywiY2xyLXRyZWUtbm9kZSIsMzEpLGxpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgpLE1lKCJuZ0lmIiwhYS5oaWRkZW4mJmEuaW5Gb3JlZ3JvdW5kKX19''@;'; put 'put ''ZnVuY3Rpb24gbFR0KGMsbCl7MSZjJiYoZGUoMCwiZGl2Iiw0MikoMSwic3BhbiIsNDMpLExlKDIsIiBMb2FkaW5nLi4uICIpLGhlKCkoKSl9ZnVuY3Rpb24gY1R0KGMsbCl7MSZjJiYoZGUoMCwiZGl2Iiw0NCksR3QoMSwiY2xyLWljb24iLDQ1KSxkZSgyLCJwIiw0NiksTGUoMywiIFBsZWFz''@;'; put 'put ''ZSBzZWxlY3QgYSBjb2x1bW4gb3IgdGFibGUgIiksaGUoKSgpKX1mdW5jdGlvbiB1VHQoYyxsKXtpZigxJmMmJihkZSgwLCJoMyIsNTUpLExlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgzKTtmZSgpLElyKCIgIixhLmN1cnJlbnRMaW5lYWdlUGF0aENvbHVtbj9hLmN1cnJlbnRMaW5lYWdl''@;'; put 'put ''UGF0aExpYlRhYmxlKyIuIithLmN1cnJlbnRMaW5lYWdlUGF0aENvbHVtbjphLmN1cnJlbnRMaW5lYWdlUGF0aExpYlRhYmxlLCIgIil9fWZ1bmN0aW9uIGRUdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsNTMpLGd0KDEsdVR0LDIsMSwiaDMiLDU0KSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUo''@;'; put 'put ''Mik7ZmUoKSxNZSgibmdJZiIsIWEuY3VycmVudExpbmVhZ2VQYXRoQ29sdW1uJiYhYS5jdXJyZW50TGluZWFnZVBhdGhMaWJUYWJsZSl9fWZ1bmN0aW9uIGhUdChjLGwpe2lmKDEmYyYmKGRlKDAsInNwYW4iKSxMZSgxKSxkZSgyLCJhIiw1NiksTGUoMyksaGUoKSxMZSg0KSxoZSgpKSwyJmMp''@;'; put 'put ''e2NvbnN0IGE9UmUoMik7ZmUoKSxJcigiICIsYS5saW5lYWdlVGFibGVOYW1lLnNwbGl0KCIuIilbMF0sIi4iKSxmZSgpLE1lKCJyb3V0ZXJMaW5rIiwiL3ZpZXcvZGF0YS8iK2EubGluZWFnZVRhYmxlTmFtZSksZmUoKSx3cihhLmxpbmVhZ2VUYWJsZU5hbWUuc3BsaXQoIi4iKVsxXSksZmUo''@;'; put 'put ''KSxJcigiIixhLmxpbmVhZ2VDb2x1bW5OYW1lLmxlbmd0aD4wPyIuIithLmxpbmVhZ2VDb2x1bW5OYW1lOiIiLCIgIil9fWZ1bmN0aW9uIGZUdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIsNjYpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUo''@;'; put 'put ''NCkuZG93bmxvYWRQTkcoKSl9KSxMZSgxLCIgUE5HICIpLGhlKCl9fWZ1bmN0aW9uIHBUdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIsNjYpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoNCkuZG93bmxvYWRDU1YoKSl9KSxMZSgxLCIgQ1NW''@;'; put 'put ''ICIpLGhlKCl9fWZ1bmN0aW9uIGdUdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci1kcm9wZG93bi1tZW51Iiw2NSkoMSwiZGl2Iiw2NiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgzKS5kb3dubG9hZFNWRygpKX0pLExlKDIsIlNWRyIpLGhl''@;'; put 'put ''KCksZ3QoMyxmVHQsMiwwLCJkaXYiLDY3KSxkZSg0LCJkaXYiLDY2KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKDMpLmRvd25sb2FkRG90KCkpfSksTGUoNSwiRG90IiksaGUoKSxndCg2LHBUdCwyLDAsImRpdiIsNjcpLGhlKCl9aWYoMiZjKXtjb25zdCBhPVJl''@;'; put 'put ''KDMpO2ZlKDMpLE1lKCJuZ0lmIiwhYS5oZWxwZXJTZXJ2aWNlLmlzTWljcm9zb2Z0KSxmZSgzKSxNZSgibmdJZiIsYS5mbGF0ZGF0YSl9fWZ1bmN0aW9uIG1UdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci1jaGVja2JveC13cmFwcGVyIiw2OCkoMSwiaW5wdXQiLDY5KSxG''@;'; put 'put ''dCgiY2hhbmdlIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgzKS5nZW5lcmF0ZUdyYXBoKCkpfSksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9UmUoMyk7cmV0dXJuIG1pKGYucmVmcmVzaENhY2hlLGgpfHwoZi5yZWZyZXNoQ2FjaGU9aCksQ3Qo''@;'; put 'put ''aCl9KSxoZSgpLGRlKDIsImxhYmVsIiksTGUoMywiUmVmcmVzaCBDYWNoZSIpLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9UmUoMyk7ZmUoKSxwaSgibmdNb2RlbCIsYS5yZWZyZXNoQ2FjaGUpfX1mdW5jdGlvbiB2VHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiLDU3KSgx''@;'; put 'put ''LCJidXR0b24iLDU4KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKDIpLmxpbWl0RG90RGVwdGg9ITApfSksTGUoMiwiIExpbWl0IGRlcHRoICIpLGhlKCksZGUoMywiZGl2Iiw1OSkoNCwiZGl2Iiw2MCksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0''@;'; put 'put ''IGg9UmUoMik7cmV0dXJuIGguZm9yd2FyZExpbmVhZ2U9ITEsQ3QoaC5yb3V0ZXIudXJsLmluY2x1ZGVzKCJjb2x1bW4iKT9oLm9uR2VuZXJhdGVDbGljaygpOmgub25HZW5lcmF0ZUdyYXBoVGFibGVDbGljaygpKX0pLEd0KDUsImlucHV0Iiw2MSksZGUoNiwibGFiZWwiKSxMZSg3LCJCYWNr''@;'; put 'put ''d2FyZCIpLGhlKCkoKSxkZSg4LCJkaXYiLDYwKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSgyKTtyZXR1cm4gaC5mb3J3YXJkTGluZWFnZT0hMCxDdChoLnJvdXRlci51cmwuaW5jbHVkZXMoImNvbHVtbiIpP2gub25HZW5lcmF0ZUNsaWNrKCk6aC5vbkdlbmVyYXRl''@;'; put 'put ''R3JhcGhUYWJsZUNsaWNrKCkpfSksR3QoOSwiaW5wdXQiLDYxKSxkZSgxMCwibGFiZWwiKSxMZSgxMSwiRm9yd2FyZCIpLGhlKCkoKSgpLGRlKDEyLCJjbHItZHJvcGRvd24iLDYyKSgxMywiYnV0dG9uIiw2MyksTGUoMTQsIiBEb3dubG9hZCAiKSxHdCgxNSwiY2xyLWljb24iLDIyKSxoZSgp''@;'; put 'put ''LGd0KDE2LGdUdCw3LDIsImNsci1kcm9wZG93bi1tZW51IiwyMyksaGUoKSxndCgxNyxtVHQsNCwxLCJjbHItY2hlY2tib3gtd3JhcHBlciIsNjQpLGhlKCl9aWYoMiZjKXtjb25zdCBhPVJlKDIpO2ZlKDUpLE1lKCJjaGVja2VkIiwhYS5mb3J3YXJkTGluZWFnZSksZmUoNCksTWUoImNoZWNr''@;'; put 'put ''ZWQiLGEuZm9yd2FyZExpbmVhZ2UpLGZlKDQpLE1lKCJkaXNhYmxlZCIsIWEuY29sdW1uJiYhYS50YWJsZSksZmUoNCksTWUoIm5nSWYiLGEuY29sdW1uKX19ZnVuY3Rpb24gYlR0KGMsbCl7MSZjJiYoZGUoMCwic3BhbiIsNzMpLExlKDEsIiBMb2FkaW5nLi4uICIpLGhlKCkpfWZ1bmN0aW9u''@;'; put 'put ''IHlUdChjLGwpezEmYyYmR3QoMCwic3BhbiIsNDMpfWZ1bmN0aW9uIF9UdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsNzQpKDEsImRpdiIsNzUpLGd0KDIseVR0LDEsMCwic3BhbiIsNzYpLGhlKCksR3QoMywiZGl2Iiw3NyksaGUoKSksMiZjKXtjb25zdCBhPVJlKDMpO2ZlKDIpLE1lKCJu''@;'; put 'put ''Z0lmIixhLmdyYXBoUmVuZGVyaW5nKX19ZnVuY3Rpb24gd1R0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IikoMSwiZGl2Iiw3MCksZ3QoMixiVHQsMiwwLCJzcGFuIiw3MSkoMyxfVHQsNCwxLCJkaXYiLDcyKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1SZSgyKTtUcigibXQtMiIsYS50YWJsZUZs''@;'; put 'put ''YWcpLGZlKDIpLE1lKCJuZ0lmIixhLmdyYXBoTG9hZGluZyksZmUoKSxNZSgibmdJZiIsIWEuZ3JhcGhMb2FkaW5nKX19ZnVuY3Rpb24gQ1R0KGMsbCl7aWYoMSZjJiYoc2koMCksZ3QoMSxkVHQsMiwxLCJkaXYiLDQ3KSxkZSgyLCJkaXYiLDQ4KSgzLCJzZWN0aW9uIiw0OSkoNCwiZGl2Iiw1''@;'; put 'put ''MCksZ3QoNSxoVHQsNSw0LCJzcGFuIiwxMSksaGUoKSxndCg2LHZUdCwxOCw0LCJkaXYiLDUxKSxoZSgpLGd0KDcsd1R0LDQsNCwiZGl2Iiw1MiksaGUoKSxsaSgpKSwyJmMpe2NvbnN0IGE9UmUoKTtmZSgpLE1lKCJuZ0lmIiwhYS5ncmFwaENvbnRhaW5lciksZmUoNCksTWUoIm5nSWYiLGEu''@;'; put 'put ''bGluZWFnZVRhYmxlTmFtZS5sZW5ndGg+MCksZmUoKSxNZSgibmdJZiIsYS5ncmFwaENvbnRhaW5lciksZmUoKSxNZSgibmdJZiIsYS5ncmFwaENvbnRhaW5lcil9fWZ1bmN0aW9uIFNUdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIsNjYpLEZ0KCJjbGljayIsZnVuY3Rp''@;'; put 'put ''b24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoMikucmVuZGVyVG9Eb3dubG9hZCgiUE5HIikpfSksTGUoMSwiIFBORyAiKSxoZSgpfX1mdW5jdGlvbiBNVHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItZHJvcGRvd24tbWVudSIsNjUpKDEsImRpdiIsNjYpLEZ0KCJjbGljayIs''@;'; put 'put ''ZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS5yZW5kZXJUb0Rvd25sb2FkKCJTVkciKSl9KSxMZSgyLCJTVkciKSxoZSgpLGd0KDMsU1R0LDIsMCwiZGl2Iiw2NyksZGUoNCwiZGl2Iiw2NiksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9UmUoKTtyZXR1cm4gaC5k''@;'; put 'put ''b3dubG9hZERvdCgpLEN0KGguY2FuY2VsUmVuZGVyaW5nR3JhcGgoKSl9KSxMZSg1LCIgRG90ICIpLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9UmUoKTtmZSgzKSxNZSgibmdJZiIsIWEuaGVscGVyU2VydmljZS5pc01pY3Jvc29mdCl9fWNvbnN0IHhUdD15KDk3NTg2KTtsZXQgak49KCgpPT57''@;'; put 'put ''Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSxELFope3RoaXMubGljZW5jZVNlcnZpY2U9YSx0aGlzLnNhc1NlcnZpY2U9ZCx0aGlzLnJvdXRlPWgsdGhpcy5yb3V0ZXI9Zix0aGlzLmxvY2F0aW9uPXYsdGhpcy5ldmVudFNlcnZpY2U9TSx0aGlzLmxvZ2dlclNlcnZpY2U9RCx0aGlz''@;'; put 'put ''LmhlbHBlclNlcnZpY2U9Wix0aGlzLnN3aXRjaEZsYWc9ITEsdGhpcy50YWJsZUZsYWc9ITAsdGhpcy5mb3J3YXJkTGluZWFnZT0hMSx0aGlzLmZsYXRkYXRhPVtdLHRoaXMuZ3JhcGhMb2FkaW5nPSExLHRoaXMuZ3JhcGhSZW5kZXJpbmc9ITEsdGhpcy5ncmFwaENvbnRhaW5lcj0hMSx0aGlz''@;'; put 'put ''LnZpeklucHV0PSIiLHRoaXMubGlicmFyaWVzUGFnaW5nPSExLHRoaXMubGlicmFyeVRhYmxlc1JlZj0iIix0aGlzLmxpYnJhcmllc1NlYXJjaD0iIix0aGlzLnRhYmxlQ29sdW1uc1JlZj0iIix0aGlzLmxpbmVhZ2VUYWJsZU5hbWU9IiIsdGhpcy5saW5lYWdlQ29sdW1uTmFtZT0iIix0aGlz''@;'; put 'put ''LmxpYj1udWxsLHRoaXMudGFibGVEaXNhYmxlPSExLHRoaXMucmVmcmVzaENhY2hlPSExLHRoaXMuY3VycmVudExpbmVhZ2VQYXRoTGliVGFibGU9IiIsdGhpcy5jdXJyZW50TGluZWFnZVBhdGhDb2x1bW49IiIsdGhpcy5sYXJnZURvdEZpbGVMaW5lcz1udWxsLHRoaXMubGFyZ2VEb3RGaWxl''@;'; put 'put ''TGltaXQ9MWUzLHRoaXMubGltaXREb3REZXB0aD0hMSx0aGlzLnBlbmRpbmdSZW5kZXJEb3dubG9hZD1udWxsLHRoaXMuZGVib3VuY2VUaW1lPTIwMH1zaG93VGFibGVTZWxlY3QoKXt0aGlzLnRhYmxlRmxhZz0hdGhpcy50YWJsZUZsYWd9dGFibGVPbkNsaWNrKGEsZCxoKXt2YXIgZj10aGlz''@;'; put 'put ''O3JldHVybiBlZShmdW5jdGlvbioodixNLEQsWj0hMSl7TS5jb2x1bW5zPyhNLmV4cGFuZGVkPSFNLmV4cGFuZGVkLCEwPT09TS5leHBhbmRlZCYmKGYudGFibGU9dixafHxmLm9uR2VuZXJhdGVHcmFwaFRhYmxlQ2xpY2soKSkpOihNLmV4cGFuZGVkPSFNLmV4cGFuZGVkLE0ubG9hZGluZ0Nv''@;'; put 'put ''bHVtbnM9ITAsZi50YWJsZT12LGYuY3VycmVudExpbmVhZ2VQYXRoTGliVGFibGU9TS5MSUJOQU1FKyIuIitNLlRBQkxFTkFNRSx5aWVsZCBmLnNlbGVjdFRhYmxlKHYsTSksWnx8Zi5vbkdlbmVyYXRlR3JhcGhUYWJsZUNsaWNrKCkpLGYuY29sbGFwc2VUcmVlSXRlbXMoRC50YWJsZXMsTSl9''@;'; put 'put ''KS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9c2VsZWN0VGFibGUoYSxkKXt2YXIgaD10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtoLmNvbHVtbnNMaXN0PVtdO2xldCBmPXtTQVNDb250cm9sVGFibGU6W3t0YWJsZXVyaTphfV19O3lpZWxkIGguc2FzU2VydmljZS5yZXF1ZXN0KCJsaW5lYWdl''@;'; put 'put ''L2dldG1ldGFjb2xzIixmKS50aGVuKHY9PntoLmNvbHVtbnNMaXN0PXYuYWRhcHRlclJlc3BvbnNlLm1ldGFjb2xzLGguY29sdW1uc0xpc3QmJmguY29sdW1uc0xpc3QubGVuZ3RoPjAmJihkLmNvbHVtbnM9aC5jb2x1bW5zTGlzdCxkLmV4cGFuZGVkPSEwLGQubG9hZGluZ0NvbHVtbnM9ITEp''@;'; put 'put ''fSkuY2F0Y2godj0+diksaC5zZXRHbG9iYWxEYXRhKCl9KSgpfWxvYWRNb3JlTGlicmFyaWVzKCl7dGhpcy5saWJyYXJpZXNQYWdpbmd8fCh0aGlzLmxpYnJhcmllc1BhZ2luZz0hMCx0aGlzLmhlbHBlclNlcnZpY2UuZGlzcGxheUxpYnJhcmllcyh0aGlzLmxpYnJhcnlMaXN0LCEwKSx0aGlz''@;'; put 'put ''LmxpYnJhcmllc1BhZ2luZz0hMSl9Y29sbGFwc2VUcmVlSXRlbXMoYSxkKXthLmZvckVhY2goaD0+e0pTT04uc3RyaW5naWZ5KGgpIT09SlNPTi5zdHJpbmdpZnkoZCkmJihoLmV4cGFuZGVkPSExKX0pfXRyZWVOb2RlQ2xpY2tlZChhLGQsaCl7IkNvbGxhcHNlIj09PWEudGFyZ2V0LnRpdGxl''@;'; put 'put ''JiZ0aGlzLmNvbGxhcHNlVHJlZUl0ZW1zKGgsZCl9bGlicmFyeU9uQ2xpY2soYSxkKXt2YXIgaD10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtkLmluRm9yZWdyb3VuZD0hMCxkLnRhYmxlcz9kLmV4cGFuZGVkPSFkLmV4cGFuZGVkOihkLmxvYWRpbmdUYWJsZXM9ITAseWllbGQgaC5zZWxl''@;'; put 'put ''Y3RMaWJyYXJ5KGEsZCkpLGguY29sbGFwc2VUcmVlSXRlbXMoaC5saWJyYXJ5TGlzdCxkKX0pKCl9c2VsZWN0TGlicmFyeShhLGQpe3ZhciBoPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2gudGFibGVzTGlzdD1bXSxoLmNvbHVtbnNMaXN0PVtdO2xldCBmPXtTQVNDb250cm9sVGFibGU6''@;'; put 'put ''W3tsaWJ1cmk6YX1dfTt5aWVsZCBoLnNhc1NlcnZpY2UucmVxdWVzdCgibGluZWFnZS9nZXRtZXRhdGFibGVzIixmKS50aGVuKHY9PntoLnRhYmxlc0xpc3Q9di5hZGFwdGVyUmVzcG9uc2UubWV0YXRhYmxlcyxoLnRhYmxlc0xpc3QmJmgudGFibGVzTGlzdC5sZW5ndGg+MCYmKGQudGFibGVz''@;'; put 'put ''PWgudGFibGVzTGlzdCxkLmV4cGFuZGVkPSEwKSxoLnNldEdsb2JhbERhdGEoKX0pLmNhdGNoKHY9PnYpLGQubG9hZGluZ1RhYmxlcz0hMX0pKCl9Y29sdW1uT25DbGljayhhLGQsaCl7dGhpcy5saWI9ZC5MSUJSQVJZSUQsdGhpcy50YWJsZT1oLlRBQkxFVVJJLHRoaXMuY29sdW1uPWEuQ09M''@;'; put 'put ''VVJJLHRoaXMuc2V0R2xvYmFsRGF0YSgpLHRoaXMub25HZW5lcmF0ZUNsaWNrKCl9dHJlZU9uRmlsdGVyKGEsZCl7dGhpcy5oZWxwZXJTZXJ2aWNlLnRyZWVPbkZpbHRlcihhLGQpfWxpYnJhcnlPbkZpbHRlcigpe3RoaXMuaGVscGVyU2VydmljZS5saWJyYXJ5T25GaWx0ZXIodGhpcy5saWJy''@;'; put 'put ''YXJ5TGlzdCx0aGlzLmxpYnJhcmllc1NlYXJjaCwiTElCUkFSWU5BTUUiKSxLbi5saW5lYWdlLmxpYnJhcmllc1NlYXJjaD10aGlzLmxpYnJhcmllc1NlYXJjaH1saWJDb2x1bW5BY3RpdmUoYSl7aWYoIXRoaXMuY29sdW1uKXJldHVybiExO2xldCBkPWEuc3BsaXQoIlxcIiksaD10aGlzLmNv''@;'; put 'put ''bHVtbi5zcGxpdCgiXFwiKTtyZXR1cm4gZFtkLmxlbmd0aC0xXT09aFtoLmxlbmd0aC0xXX1zZXRHbG9iYWxEYXRhKCl7S24ubGluZWFnZS5saWJyYXJ5TGlzdD10aGlzLmxpYnJhcnlMaXN0LEtuLmxpbmVhZ2UudGFibGVzTGlzdD10aGlzLnRhYmxlc0xpc3QsS24ubGluZWFnZS5jb2x1bW5z''@;'; put 'put ''TGlzdD10aGlzLmNvbHVtbnNMaXN0LEtuLmxpbmVhZ2UubGliPXRoaXMubGliLEtuLmxpbmVhZ2UudGFibGU9dGhpcy50YWJsZSxLbi5saW5lYWdlLmNvbHVtbj10aGlzLmNvbHVtbn1sb2FkR2xvYmFsRGF0YSgpe3RoaXMubGlicmFyeUxpc3Q9S24ubGluZWFnZS5saWJyYXJ5TGlzdCx0aGlz''@;'; put 'put ''LnRhYmxlc0xpc3Q9S24ubGluZWFnZS50YWJsZXNMaXN0LHRoaXMuY29sdW1uc0xpc3Q9S24ubGluZWFnZS5jb2x1bW5zTGlzdCx0aGlzLmxpYnJhcmllc1NlYXJjaD1Lbi5saW5lYWdlLmxpYnJhcmllc1NlYXJjaH1yZXN1Ym1pdFdpdGhNYXhEZXB0aChhKXtsZXQgZDt0aGlzLmNhbmNlbFJl''@;'; put 'put ''bmRlcmluZ0dyYXBoKCksYSYmKGQ9e21heF9kZXB0aDphfSksdGhpcy5yb3V0ZXIubmF2aWdhdGUoW10se3JlbGF0aXZlVG86dGhpcy5yb3V0ZSxxdWVyeVBhcmFtczpkfSl9bmdPbkluaXQoKXtLbi52aWV3ZXIuY3VycmVudFNlbGVjdGlvbj0idmlldy9saW5lYWdlIjtsZXQgYT10aGlzLnJv''@;'; put 'put ''dXRlLnNuYXBzaG90LnBhcmFtcy5yZWxvYWQ7aWYodm9pZCAwIT09YSl7bGV0IGQ9dGhpcy5yb3V0ZXIudXJsOyJyZWxvYWQiPT09YT9sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiZmlyc3RMb2FkIik/KGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCJmaXJzdExvYWQiKSx0aGlzLmxvY2F0aW9uLnJl''@;'; put 'put ''cGxhY2VTdGF0ZShkLnNsaWNlKDAsZC5sYXN0SW5kZXhPZigiLyIpKSkpOihsb2NhbFN0b3JhZ2UuZmlyc3RMb2FkPSEwLHNldFRpbWVvdXQoZnVuY3Rpb24oKXt3aW5kb3cubG9jYXRpb24ucmVsb2FkKCl9LDJlMykpOnRoaXMubG9jYXRpb24ucmVwbGFjZVN0YXRlKGQuc2xpY2UoMCxkLmxh''@;'; put 'put ''c3RJbmRleE9mKCIvIikpKX10aGlzLmluaXREYXRhKCl9aW5pdERhdGEoKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtLbi5saW5lYWdlLmxpYnJhcnlMaXN0JiYoS24ubGluZWFnZS5saWJyYXJ5TGlzdC5sZW5ndGg+MD9hLmxvYWRHbG9iYWxEYXRhKCk6eWllbGQgYS5zYXNT''@;'; put 'put ''ZXJ2aWNlLnJlcXVlc3QoInB1YmxpYy92aWV3bGlicyIsbnVsbCkudGhlbih2PT57YS5saWJyYXJ5TGlzdD12LmFkYXB0ZXJSZXNwb25zZS5zYXNsaWJzLGEuaGVscGVyU2VydmljZS5kaXNwbGF5TGlicmFyaWVzKGEubGlicmFyeUxpc3QpLGEubGlicmFyeUxpc3QmJmEubGlicmFyeUxpc3Qu''@;'; put 'put ''bGVuZ3RoPjAmJihhLmxpYj1hLmxpYnJhcnlMaXN0WzBdLkxJQlJBUllJRCksYS5zZXRHbG9iYWxEYXRhKCl9KS5jYXRjaCh2PT52KSxhLnJvdXRlLnF1ZXJ5UGFyYW1zLnN1YnNjcmliZSh2PT57YS5vblJvdXRlQ2hhbmdlKCl9KSxhLnJvdXRlLnBhcmFtcy5zdWJzY3JpYmUodj0+e2Eub25S''@;'; put 'put ''b3V0ZUNoYW5nZSgpfSkpfSkoKX1vblJvdXRlQ2hhbmdlKCl7Y2xlYXJUaW1lb3V0KHRoaXMuZGVib3VuY2VUaW1lb3V0KSx0aGlzLmRlYm91bmNlVGltZW91dD1zZXRUaW1lb3V0KCgpPT57Y29uc3QgYT10aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5jb2x1cmksZD10aGlzLnJvdXRlLnNu''@;'; put 'put ''YXBzaG90LnBhcmFtcy5kaXJlY3Rpb24saD10aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy50YWJsZWlkLGY9dGhpcy5yb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtcy5tYXhfZGVwdGg7YSYmZCYmKHRoaXMuZm9yd2FyZExpbmVhZ2U9IkZPUldBUkQiPT09ZCx0aGlzLmNvbHVtbj1hLHRoaXMu''@;'; put 'put ''Z2VuZXJhdGVHcmFwaChhLGQsZikpLCF0aGlzLnJvdXRlci51cmwuaW5jbHVkZXMoImNvbHVtbiIpJiZoJiZkJiYodGhpcy5mb3J3YXJkTGluZWFnZT0iRk9SV0FSRCI9PT1kLHRoaXMudGFibGU9aCx0aGlzLmdlbmVyYXRlR3JhcGhUYWJsZUxldmVsKGgsZCxmKSl9LHRoaXMuZGVib3VuY2VU''@;'; put 'put ''aW1lKX1uZ0FmdGVyQ29udGVudEluaXQoKXt9ZGlyZWN0aW9uVGV4dCgpe3JldHVybiB0aGlzLmZvcndhcmRMaW5lYWdlPyJGT1JXQVJEIjoiUkVWRVJTRSJ9b25HZW5lcmF0ZUNsaWNrKCl7bGV0IGE9dGhpcy5kaXJlY3Rpb25UZXh0KCksZD10aGlzLmNvbHVtbj90aGlzLmNvbHVtbi5zdWJz''@;'; put 'put ''dHJpbmcodGhpcy5jb2x1bW4uaW5kZXhPZigiXFwiKSsxKTpudWxsO3RoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi92aWV3L2xpbmVhZ2UvY29sdW1uLyIrZCsiLyIrYSl9b25HZW5lcmF0ZUdyYXBoVGFibGVDbGljaygpe2xldCBhPXRoaXMuZGlyZWN0aW9uVGV4dCgpLGQ9dGhpcy50YWJs''@;'; put 'put ''ZS5pbmNsdWRlcygiXFwiKT90aGlzLnRhYmxlLnNwbGl0KCJcXCIpWzFdOnRoaXMudGFibGU7dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL3ZpZXcvbGluZWFnZS8iK2QrIi8iK2EpfWdlbmVyYXRlR3JhcGhUYWJsZUxldmVsKGEsZCxoKXt2YXIgZj10aGlzO3JldHVybiBlZShmdW5jdGlv''@;'; put 'put ''biooKXtsZXQgdj17U0FTQ29udHJvbFRhYmxlOlt7dGFibGVfaWQ6YSxkaXJlY3Rpb246ZHx8Zi5kaXJlY3Rpb25UZXh0KCl9XX07cmV0dXJuInVuZGVmaW5lZCI9PT12LlNBU0NvbnRyb2xUYWJsZVswXS50YWJsZV9pZCYmZi5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwoImdlbmVyYXRl''@;'; put 'put ''R3JhcGhUYWJsZUxldmVsKCkiLCJ0YWJsZV9pZCBpcyB1bmRlZmluZWQuIix2b2lkIDAsIkZyb250ZW5kIGVycm9yIiksaCYmKHYuU0FTQ29udHJvbFRhYmxlWzBdLm1heF9kZXB0aD1oKSxmLnRhYmxlRmxhZz0hMSxmLnN3aXRjaEZsYWc9ITAsZi5ncmFwaENvbnRhaW5lcj0hMCxmLmdyYXBo''@;'; put 'put ''TG9hZGluZz0hMCxmLnZpeklucHV0PSIiLG5ldyBQcm9taXNlKChNLEQpPT57Zi5zYXNTZXJ2aWNlLnJlcXVlc3QoImxpbmVhZ2UvZmV0Y2h0YWJsZWxpbmVhZ2UiLHYpLnRoZW4oZnVuY3Rpb24oKXt2YXIgWj1lZShmdW5jdGlvbioocmUpe2lmKHJlLmFkYXB0ZXJSZXNwb25zZS5mbGF0ZGF0''@;'; put 'put ''YS5sZW5ndGg+MCYmZi5saWNlbmNlU2VydmljZS5jaGVja0xpbmVhZ2VMaW1pdCgpKXJldHVybiBmLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJOb3RpY2UiLCJZb3UgaGF2ZSByZWFjaGVkIGRhaWx5IG1heGltdW0gb2YgbGluZWFnZSBkaWFncmFtIHJlbmRlcmluZ3MuIFRvIHVubG9j''@;'; put 'put ''ayBhZGRpdGlvbmFsIGRpYWdyYW1zLCBjb250YWN0IHN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8iKSx2b2lkIGYucm91dGVyLm5hdmlnYXRlQnlVcmwoIi92aWV3L2xpbmVhZ2UiKTtpZigic3RyaW5nIj09dHlwZW9mIHJlKXJldHVybiBmLnZpeklucHV0PSJkaWdyYXBoIEcge1NBUyBFcnJv''@;'; put 'put ''cn0iLHZvaWQgZi5idWlsZEdyYXBoKCk7Zi5saW5lYWdlVGFibGVOYW1lPXJlLmFkYXB0ZXJSZXNwb25zZS5pbmZvWzBdLkxJQlJFRisiLiIrcmUuYWRhcHRlclJlc3BvbnNlLmluZm9bMF0uVEFCTEVOQU1FO2xldCBjZT1yZS5hZGFwdGVyUmVzcG9uc2UuZmluYWxmaW5hbCxiZT0iIjtmb3Io''@;'; put 'put ''bGV0IEVlPTA7RWU8Y2UubGVuZ3RoO0VlKyspYmUrPXVuZXNjYXBlKGNlW0VlXS5MSU5FKSsiXG4iO2lmKGYuZmxhdGRhdGE9cmUuYWRhcHRlclJlc3BvbnNlLmZsYXRkYXRhLGYubGlicmFyeUxpc3Qpe2xldCBFZT1mLmxpYnJhcnlMaXN0LmZpbmQoQmU9PnJlLmFkYXB0ZXJSZXNwb25zZS5p''@;'; put 'put ''bmZvWzBdLkxJQlVSSS50b1VwcGVyQ2FzZSgpLmluY2x1ZGVzKEJlLkxJQlJBUllJRC50b1VwcGVyQ2FzZSgpKSk7aWYoRWUpe2xldCBCZTtpZih5aWVsZCBmLmxpYnJhcnlPbkNsaWNrKEVlLkxJQlJBUllJRCxFZSksRWUudGFibGVzJiYoQmU9RWUudGFibGVzLmZpbmQocWU9PnFlLlRBQkxF''@;'; put 'put ''VVJJLnRvVXBwZXJDYXNlKCkuaW5jbHVkZXMocmUuYWRhcHRlclJlc3BvbnNlLmluZm9bMF0uVEFCTEVJRC50b1VwcGVyQ2FzZSgpKSksQmUpKXtpZihmLnRhYmxlPUJlLlRBQkxFVVJJLGYudGFibGUpe2NvbnN0IHFlPWYudGFibGUucmVwbGFjZSgiXFwiLCJcXFxcIik7c2V0VGltZW91dCgo''@;'; put 'put ''KT0+e2xldCBydD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKGBbaWQ9JyR7cWV9J11gKTtydCYmcnQuc2Nyb2xsSW50b1ZpZXcoKX0sMWUzKX1mLnRhYmxlT25DbGljayhCZS5UQUJMRVVSSSxCZSxFZSx2b2lkIDAhPT1kKX1FZSYmKEVlLmV4cGFuZGVkPSEwKSxCZSYmKEJlLmV4cGFuZGVkPSEw''@;'; put 'put ''KX19Zi52aXpJbnB1dD1iZXx8ImRpZ3JhcGggRyB7Tm8gTGluZWFnZSBBdmFpbGFibGV9IixmLnZpeklucHV0PWYudml6SW5wdXQucmVwbGFjZSgvXHNkczovZywiXG5kczoiKS5yZXBsYWNlKC9cc1xuL2csIlxuIiksZi5pZGxvb2t1cD1yZS5hZGFwdGVyUmVzcG9uc2UuaWRsb29rdXAscmUu''@;'; put 'put ''YWRhcHRlclJlc3BvbnNlLmZpbmFsZmluYWwubGVuZ3RoPmYubGFyZ2VEb3RGaWxlTGltaXQ/Zi5sYXJnZURvdEZpbGVMaW5lcz1yZS5hZGFwdGVyUmVzcG9uc2UuZmluYWxmaW5hbC5sZW5ndGg6Zi5idWlsZEdyYXBoKCksTSgpfSk7cmV0dXJuIGZ1bmN0aW9uKHJlKXtyZXR1cm4gWi5hcHBs''@;'; put 'put ''eSh0aGlzLGFyZ3VtZW50cyl9fSgpKS5jYXRjaChaPT57Zi5ncmFwaExvYWRpbmc9ITEsZi5ncmFwaENvbnRhaW5lcj0hMX0pfSl9KSgpfWNhbmNlbFJlbmRlcmluZ0dyYXBoKCl7dGhpcy52aXpJbnB1dD0iZGlncmFwaCBHIHtObyBMaW5lYWdlIEF2YWlsYWJsZX0iLHRoaXMubGFyZ2VEb3RG''@;'; put 'put ''aWxlTGluZXM9bnVsbCx0aGlzLmJ1aWxkR3JhcGgoKX1jb250aW51ZVJlbmRlcmluZ0dyYXBoKCl7dGhpcy5sYXJnZURvdEZpbGVMaW5lcz1udWxsLHRoaXMuYnVpbGRHcmFwaCgoKT0+e2lmKG51bGwhPT10aGlzLnBlbmRpbmdSZW5kZXJEb3dubG9hZCl7c3dpdGNoKHRoaXMucGVuZGluZ1Jl''@;'; put 'put ''bmRlckRvd25sb2FkKXtjYXNlIlBORyI6dGhpcy5kb3dubG9hZFBORygpO2JyZWFrO2Nhc2UiU1ZHIjp0aGlzLmRvd25sb2FkU1ZHKCl9dGhpcy5wZW5kaW5nUmVuZGVyRG93bmxvYWQ9bnVsbCx0aGlzLnZpeklucHV0PSJkaWdyYXBoIEcge05vIExpbmVhZ2UgQXZhaWxhYmxlfSIsdGhpcy5i''@;'; put 'put ''dWlsZEdyYXBoKCl9fSl9cmVuZGVyVG9Eb3dubG9hZChhKXtzd2l0Y2goYSl7Y2FzZSJQTkciOnRoaXMucGVuZGluZ1JlbmRlckRvd25sb2FkPSJQTkciLHRoaXMuY29udGludWVSZW5kZXJpbmdHcmFwaCgpO2JyZWFrO2Nhc2UiU1ZHIjp0aGlzLnBlbmRpbmdSZW5kZXJEb3dubG9hZD0iU1ZH''@;'; put 'put ''Iix0aGlzLmNvbnRpbnVlUmVuZGVyaW5nR3JhcGgoKX19bWFrZUdyYXBoTGlua2FibGUoYSl7bGV0IGQ9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiI2dyYXBoIC5ub2RlIik7Zm9yKGxldCBoIG9mIGQpe2xldCBNLGY9aC5xdWVyeVNlbGVjdG9yKCJ0aXRsZSIpLmlubmVySFRNTCx2PWEu''@;'; put 'put ''ZmluZChEPT5ELk1FVEFJRD09PWYpO3YmJihNPSJUQUJMRSI9PT12Lk1FVEFUWVBFPyIvdmlldy9kYXRhLyIrdi5NRVRBTkFNRToiL3ZpZXcvbWV0YWRhdGEvb2JqZWN0LyIrdi5NRVRBSUQsaC5jbGFzc0xpc3QuYWRkKCJjdXJzb3ItcG9pbnRlciIpLGguYWRkRXZlbnRMaXN0ZW5lcigiY2xp''@;'; put 'put ''Y2siLEQ9Pnt0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKE0pfSkpfX1nZW5lcmF0ZUdyYXBoKGEsZCxoKXt2YXIgZj10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtsZXQgdj17U0FTQ29udHJvbFRhYmxlOlt7Y29sdXJpOmF8fGYuY29sdW1uLGRpcmVjdGlvbjpkfHxmLmRpcmVjdGlvblRl''@;'; put 'put ''eHQoKSxyZWZyZXNoOmYucmVmcmVzaENhY2hlPzE6MH1dfTtyZXR1cm4idW5kZWZpbmVkIj09PXYuU0FTQ29udHJvbFRhYmxlWzBdLmNvbHVyaSYmZi5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwoImdlbmVyYXRlR3JhcGgoKSIsImNvbHVyaSBpcyB1bmRlZmluZWQuIix2b2lkIDAsIkZy''@;'; put 'put ''b250ZW5kIGVycm9yIiksaCYmKHYuU0FTQ29udHJvbFRhYmxlWzBdLm1heF9kZXB0aD1oKSxmLnRhYmxlRmxhZz0hMSxmLnN3aXRjaEZsYWc9ITAsZi5ncmFwaENvbnRhaW5lcj0hMCxmLmdyYXBoTG9hZGluZz0hMCxmLnZpeklucHV0PSIiLG5ldyBQcm9taXNlKChNLEQpPT57Zi5zYXNTZXJ2''@;'; put 'put ''aWNlLnJlcXVlc3QoImxpbmVhZ2UvZmV0Y2hjb2xsaW5lYWdlIix2KS50aGVuKGZ1bmN0aW9uKCl7dmFyIFo9ZWUoZnVuY3Rpb24qKHJlKXtpZihyZS5hZGFwdGVyUmVzcG9uc2UuZmxhdGRhdGEubGVuZ3RoPjAmJmYubGljZW5jZVNlcnZpY2UuY2hlY2tMaW5lYWdlTGltaXQoKSlyZXR1cm4g''@;'; put 'put ''Zi5ldmVudFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgiTm90aWNlIiwiWW91IGhhdmUgcmVhY2hlZCBkYWlseSBtYXhpbXVtIG9mIGxpbmVhZ2UgZGlhZ3JhbSByZW5kZXJpbmdzLiBUbyB1bmxvY2sgYWRkaXRpb25hbCBkaWFncmFtcywgY29udGFjdCBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlv''@;'; put 'put ''Iiksdm9pZCBmLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvdmlldy9saW5lYWdlIik7aWYoInN0cmluZyI9PXR5cGVvZiByZS5hZGFwdGVyUmVzcG9uc2UpcmV0dXJuIGYudml6SW5wdXQ9ImRpZ3JhcGggRyB7U0FTIEVycm9yfSIsdm9pZCBmLmJ1aWxkR3JhcGgoKTtmLmxpbmVhZ2VUYWJsZU5h''@;'; put 'put ''bWU9cmUuYWRhcHRlclJlc3BvbnNlLmluZm9bMF0uTElCUkVGKyIuIityZS5hZGFwdGVyUmVzcG9uc2UuaW5mb1swXS5UQUJOQU1FLGYubGluZWFnZUNvbHVtbk5hbWU9cmUuYWRhcHRlclJlc3BvbnNlLmluZm9bMF0uQ09MTkFNRSxmLmlkbG9va3VwPXJlLmFkYXB0ZXJSZXNwb25zZS5pZGxv''@;'; put 'put ''b2t1cDtsZXQgY2U9cmUuYWRhcHRlclJlc3BvbnNlLmZyb21zYXMsYmU9IiI7Zm9yKGxldCBFZT0wO0VlPGNlLmxlbmd0aDtFZSsrKWJlKz11bmVzY2FwZShjZVtFZV0uU1RSSU5HKSsiXG4iO2lmKGYudml6SW5wdXQ9YmV8fCJkaWdyYXBoIEcge05vIExpbmVhZ2UgQXZhaWxhYmxlfSIsZi52''@;'; put 'put ''aXpJbnB1dD1mLnZpeklucHV0LnJlcGxhY2UoL1xzZHM6L2csIlxuZHM6IikucmVwbGFjZSgvXHNcbi9nLCJcbiIpLGYuZmxhdGRhdGE9cmUuYWRhcHRlclJlc3BvbnNlLmZsYXRkYXRhLGYubGlicmFyeUxpc3Qpe2xldCBCZSxFZT1mLmxpYnJhcnlMaXN0LmZpbmQocWU9PnJlLmFkYXB0ZXJS''@;'; put 'put ''ZXNwb25zZS5pbmZvWzBdPy5MSUJVUkk/LnRvVXBwZXJDYXNlKCk/LmluY2x1ZGVzKHFlPy5MSUJSQVJZSUQ/LnRvVXBwZXJDYXNlKCkpKTtFZSYmKHlpZWxkIGYubGlicmFyeU9uQ2xpY2soRWUuTElCUkFSWUlELEVlKSxFZS50YWJsZXMmJihCZT1FZS50YWJsZXMuZmluZChxZT0+cWUuVEFC''@;'; put 'put ''TEVVUkk9PT1yZS5hZGFwdGVyUmVzcG9uc2UuaW5mb1swXS5UQUJVUkkpLEJlJiZmLnRhYmxlT25DbGljayhCZS5UQUJMRVVSSSxCZSxFZSwhMCkudGhlbigoKT0+e2xldCBxZT1CZS5UQUJMRVVSSTtpZihxZSl7Y29uc3QgcnQ9cWUucmVwbGFjZSgiXFwiLCJcXFxcIik7bGV0IHB0PWRvY3Vt''@;'; put 'put ''ZW50LnF1ZXJ5U2VsZWN0b3IoYFtpZD0nJHtydH0nXWApO3NldFRpbWVvdXQoKCk9PntwdCYmKGYubG9nZ2VyU2VydmljZS5sb2coImxpYnJhcnlUb1NlbGVjdCIsRWUpLHB0LnNjcm9sbEludG9WaWV3KCkpfSwxZTMpfX0pKSxFZSYmKEVlLmV4cGFuZGVkPSEwKSxCZSYmKEJlLmV4cGFuZGVk''@;'; put 'put ''PSEwKSl9cmUuYWRhcHRlclJlc3BvbnNlLmZyb21zYXMubGVuZ3RoPmYubGFyZ2VEb3RGaWxlTGltaXQ/Zi5sYXJnZURvdEZpbGVMaW5lcz1yZS5hZGFwdGVyUmVzcG9uc2UuZnJvbXNhcy5sZW5ndGg6Zi5idWlsZEdyYXBoKCksTSgpfSk7cmV0dXJuIGZ1bmN0aW9uKHJlKXtyZXR1cm4gWi5h''@;'; put 'put ''cHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpKS5jYXRjaChaPT57Zi5ncmFwaExvYWRpbmc9ITEsZi5ncmFwaENvbnRhaW5lcj0hMX0pfSl9KSgpfWdldFNWR1VSTCgpe2xldCBhPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJncmFwaCIpLGQ9bmV3IFhNTFNlcmlhbGl6ZXIsaD1uZXcgQmxvYihb''@;'; put 'put ''ZC5zZXJpYWxpemVUb1N0cmluZyhhKV0se3R5cGU6ImltYWdlL3N2Zyt4bWwifSk7cmV0dXJuIFVSTC5jcmVhdGVPYmplY3RVUkwoaCl9Z2V0U1ZHQmxvYigpe2xldCBhPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJncmFwaCIpLGQ9bmV3IFhNTFNlcmlhbGl6ZXI7cmV0dXJuIG5ldyBCbG9i''@;'; put 'put ''KFtkLnNlcmlhbGl6ZVRvU3RyaW5nKGEpXSx7dHlwZToiaW1hZ2Uvc3ZnK3htbCJ9KX1kb3dubG9hZFNWRygpe2lmKEJOKCIjZ3JhcGgiKS5yZXNldFpvb20oKSxuYXZpZ2F0b3IuYXBwVmVyc2lvbi50b1N0cmluZygpLmluZGV4T2YoIi5ORVQiKT4wKXdpbmRvdy5uYXZpZ2F0b3IubXNTYXZl''@;'; put 'put ''QmxvYih0aGlzLmdldFNWR0Jsb2IoKSx0aGlzLmNvbnN0cnVjdE5hbWUoInN2ZyIpKTtlbHNle2xldCBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTthLmhyZWY9dGhpcy5nZXRTVkdVUkwoKSxhLmRvd25sb2FkPXRoaXMuY29uc3RydWN0TmFtZSgic3ZnIiksZG9jdW1lbnQuYm9keS5h''@;'; put 'put ''cHBlbmRDaGlsZChhKSxhLmNsaWNrKCksZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChhKX19ZG93bmxvYWRQTkcoKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtCTigiI2dyYXBoIikucmVzZXRab29tKCksJEV0LnNhdmVTdmdBc1BuZyhkb2N1bWVudC5xdWVyeVNlbGVjdG9y''@;'; put 'put ''KCIjZ3JhcGggc3ZnIiksYS5jb25zdHJ1Y3ROYW1lKCJwbmciKSl9KSgpfWRvd25sb2FkQ1NWKCl7bGV0IGE9dGhpcy5mbGF0ZGF0YTtjb25zdCBkPShyZSxjZSk9Pm51bGw9PT1jZT8iIjpjZSxoPU9iamVjdC5rZXlzKGFbMF0pO2xldCBmPWEubWFwKHJlPT5oLm1hcChjZT0+SlNPTi5zdHJp''@;'; put 'put ''bmdpZnkocmVbY2VdLGQpKS5qb2luKCIsIikpO2YudW5zaGlmdChoLmpvaW4oIiwiKSk7bGV0IHY9Zi5qb2luKCJcclxuIik7dmFyIE09ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpLEQ9bmV3IEJsb2IoW3ZdLHt0eXBlOiJ0ZXh0L2NzdiJ9KTtpZihuYXZpZ2F0b3IuYXBwVmVyc2lvbi50''@;'; put 'put ''b1N0cmluZygpLmluZGV4T2YoIi5ORVQiKT4wKXdpbmRvdy5uYXZpZ2F0b3IubXNTYXZlQmxvYihELHRoaXMuY29uc3RydWN0TmFtZSgiY3N2IikpO2Vsc2V7dmFyIFo9d2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoRCk7TS5ocmVmPVosTS5kb3dubG9hZD10aGlzLmNvbnN0cnVjdE5hbWUo''@;'; put 'put ''ImNzdiIpLE0uY2xpY2soKSx3aW5kb3cuVVJMLnJldm9rZU9iamVjdFVSTChaKSxNLnJlbW92ZSgpfX1nZXREb3RVcmwoKXtsZXQgZD1uZXcgQmxvYihbdGhpcy52aXpJbnB1dF0se3R5cGU6InRleHQvcGxhaW4ifSk7cmV0dXJuIHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKGQpfWdldERv''@;'; put 'put ''dEJsb2IoKXtyZXR1cm4gbmV3IEJsb2IoW3RoaXMudml6SW5wdXRdLHt0eXBlOiJ0ZXh0L3BsYWluIn0pfWRvd25sb2FkRG90KCl7aWYobmF2aWdhdG9yLmFwcFZlcnNpb24udG9TdHJpbmcoKS5pbmRleE9mKCIuTkVUIik+MCl3aW5kb3cubmF2aWdhdG9yLm1zU2F2ZUJsb2IodGhpcy5nZXRE''@;'; put 'put ''b3RCbG9iKCksdGhpcy5jb25zdHJ1Y3ROYW1lKCJ0eHQiKSk7ZWxzZXtsZXQgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7YS5ocmVmPXRoaXMuZ2V0RG90VXJsKCksYS5kb3dubG9hZD10aGlzLmNvbnN0cnVjdE5hbWUoInR4dCIpLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYSks''@;'; put 'put ''YS5jbGljaygpLGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoYSl9fXNob3dTdmcoKXt3aW5kb3cub3Blbih0aGlzLmdldFNWR1VSTCgpLCJfYmxhbmsiKX1idWlsZEdyYXBoKGEpe3RoaXMuZXZlbnRTZXJ2aWNlLmNsb3NlU2lkZWJhcigpLHRoaXMuZ3JhcGhMb2FkaW5nPSExLHRoaXMuZ3Jh''@;'; put 'put ''cGhSZW5kZXJpbmc9ITAsc2V0VGltZW91dCgoKT0+e0JOKCIjZ3JhcGgiKS56b29tKCEwKS5hZGRJbWFnZSgiaHR0cHM6Ly9kYXRhY29udHJvbGxlci5pby93cC1jb250ZW50L3VwbG9hZHMvMjAyMC8wMS9mYzEucG5nIiwiMzBweCIsIjMwcHgiKS5yZW5kZXJEb3QodGhpcy52aXpJbnB1dCwo''@;'; put 'put ''KT0+e3RoaXMuZ3JhcGhSZW5kZXJpbmc9ITEsdGhpcy5pZGxvb2t1cCYmdGhpcy5tYWtlR3JhcGhMaW5rYWJsZSh0aGlzLmlkbG9va3VwKSxhJiZhKCl9KX0sMTAwKX1jb25zdHJ1Y3ROYW1lKGEpe2xldCBkPSIiLGg9IiIsZj0iIix2PXhUdCgpLmZvcm1hdCgiWVlNTUREX0hIbW0iKTtpZih0''@;'; put 'put ''aGlzLmxpYnJhcnlMaXN0JiZ0aGlzLmxpYnJhcnlMaXN0Lmxlbmd0aCl7bGV0IE09dGhpcy5saWJyYXJ5TGlzdC5maW5kKEQ9PkQuTElCUkFSWUlEPT10aGlzLmxpYik7TSYmKGQ9YF8ke00uTElCUkFSWU5BTUV9YCl9aWYodGhpcy50YWJsZXNMaXN0JiZ0aGlzLnRhYmxlc0xpc3QubGVuZ3Ro''@;'; put 'put ''KXtsZXQgTT10aGlzLnRhYmxlc0xpc3QuZmluZChEPT5ELlRBQkxFVVJJPT10aGlzLnRhYmxlKTtNJiYoaD1gXyR7TS5UQUJMRU5BTUV9YCl9aWYodGhpcy5jb2x1bW5zTGlzdCYmdGhpcy5jb2x1bW5zTGlzdC5sZW5ndGgpe2xldCBNPXRoaXMuY29sdW1uc0xpc3QuZmluZChEPT5ELkNPTFVS''@;'; put 'put ''ST09dGhpcy5jb2x1bW4pO00mJihmPWBfJHtNLkNPTE5BTUV9YCl9cmV0dXJuYCR7dGhpcy5kaXJlY3Rpb25UZXh0KCl9JHtkfSR7aH0ke2Z9XyR7dn0uJHthfWB9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UodTEpLEdlKEdzKSxHZShDdSks''@;'; put 'put ''R2UoTHMpLEdlKGZoKSxHZSh2YyksR2UoU2QpLEdlKFN1KSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtbGluZWFnZSJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6NTgsdmFyczoxMSxjb25zdHM6W1sibWF4RGVw''@;'; put 'put ''dGhEb3QiLCIiXSxbIm1heERlcHRoIiwiIl0sWyJzZWFyY2hMaWJUcmVlSW5wdXQiLCIiXSxbInNlYXJjaFRyZWVJbnB1dCIsIiJdLFszLCJzY3JvbGxlZFRvQm90dG9tIl0sWyJjbGFzcyIsInNlYXJjaC1ub2RlIiw0LCJuZ0lmIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsiY2xhc3MiLCJ3''@;'; put 'put ''LTEwMCB0ZXh0LWNlbnRlciIsNCwibmdJZiJdLFsxLCJjb250ZW50LWFyZWEiXSxbMSwiY2FyZCJdLFsiY2xhc3MiLCJuby10YWJsZS1zZWxlY3RlZCIsNCwibmdJZiJdLFs0LCJuZ0lmIl0sWzMsImNsck1vZGFsT3BlbiIsImNsck1vZGFsQ2xvc2FibGUiXSxbMSwibW9kYWwtdGl0bGUiXSxb''@;'; put 'put ''MSwibW9kYWwtYm9keSJdLFsxLCJtb2RhbC1mb290ZXIiLCJkLWZsZXgiLCJmbGV4LWNvbHVtbiJdLFsxLCJiaWdsaW5lYWdlLXJvdyIsIm1iLTBpIl0sWyJ0eXBlIiwibnVtYmVyIiwibWluIiwiMSIsInBsYWNlaG9sZGVyIiwiTWF4IGRlcHRoIHZhbHVlIiwxLCJjbHItaW5wdXQiLCJtYXgt''@;'; put 'put ''ZGVwdGgtaW5wdXQiXSxbMSwibWItMjAiXSxbMSwiYmlnbGluZWFnZS1yb3ciXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1wcmltYXJ5IiwzLCJjbGljayJdLFsiY2xyRHJvcGRvd25UcmlnZ2VyIiwiIiwxLCJidG4iLCJidG4tc20iLCJidG4tcHJpbWFyeSIsIm10''@;'; put 'put ''LTMtbmVnYXRpdmUiLDMsImRpc2FibGVkIl0sWyJzaGFwZSIsImNhcmV0IGRvd24iXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLWxlZnQiLDQsImNscklmT3BlbiJdLFsxLCJzZWFyY2gtbm9kZSJdLFsxLCJ0cmVlLXNlYXJjaC13cmFwcGVyIl0sWyJhcHBTdGVhbEZvY3VzIiwiIiwiY2xySW5w''@;'; put 'put ''dXQiLCIiLCJwbGFjZWhvbGRlciIsIkxpYnJhcmllcyIsIm5hbWUiLCJpbnB1dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsMywibmdNb2RlbENoYW5nZSIsImtleXVwIiwibmdNb2RlbCJdLFsic2hhcGUiLCJzZWFyY2giLDQsIm5nSWYiXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIiw0LCJu''@;'; put 'put ''Z0lmIl0sWyJzaGFwZSIsInNlYXJjaCJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siXSxbMywiY2xyRXhwYW5kZWQiLCJjbHJMb2FkaW5nIiwiY2xyLWV4cGFuZGVkIiwiY2xpY2siLCJjbHJFeHBhbmRlZENoYW5nZSIsNCwibmdJZiJdLFszLCJjbGljayIsImNsckV4cGFuZGVkQ2hhbmdl''@;'; put 'put ''IiwiY2xyRXhwYW5kZWQiLCJjbHJMb2FkaW5nIl0sWzEsIm0tMCIsImN1cnNvci1wb2ludGVyIiwzLCJjbGljayJdLFsic2hhcGUiLCJyYWNrLXNlcnZlciJdLFszLCJjbHJFeHBhbmRlZCIsImNsckxvYWRpbmciLCJjbHItZXhwYW5kZWQiLCJjbGljayIsImNsckV4cGFuZGVkQ2hhbmdlIiw0''@;'; put 'put ''LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImFwcFN0ZWFsRm9jdXMiLCIiLCJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwiVGFibGVzIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiLCJuZ01vZGVsIl0sWzEsIm0tMCIsImN1cnNv''@;'; put 'put ''ci1wb2ludGVyIiwzLCJjbGljayIsImlkIl0sWyJzaGFwZSIsInRhYmxlIl0sWyJhcHBTdGVhbEZvY3VzIiwiIiwiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIkNvbHVtbnMiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCIs''@;'; put 'put ''Im5nTW9kZWwiXSxbMSwiY2xyLXRyZWVub2RlLWxpbmsiLDMsImNsaWNrIl0sWyJzaGFwZSIsIm9iamVjdHMiXSxbMSwidy0xMDAiLCJ0ZXh0LWNlbnRlciJdLFsxLCJzcGlubmVyIiwic3Bpbm5lci1zbSJdLFsxLCJuby10YWJsZS1zZWxlY3RlZCJdLFsic2hhcGUiLCJ3YXJuaW5nLXN0YW5k''@;'; put 'put ''YXJkIiwic2l6ZSIsIjYwIiwxLCJpcy1pbmZvIiwiaWNvbi1kYy1maWxsIl0sWyJjZHMtdGV4dCIsInNlY3Rpb24iLDEsInRleHQtY2VudGVyIiwiY29sb3ItZ3JheSIsIm10LTEwIl0sWyJjbGFzcyIsImNhcmQtaGVhZGVyIGQtZmxleCBmbGV4LWNvbHVtbiBqdXN0aWZ5LWNvbnRlbnQtY2Vu''@;'; put 'put ''dGVyIiw0LCJuZ0lmIl0sWzEsImNhcmQtYmxvY2siXSxbMSwiZm9ybS1ibG9jayIsInN3IiwicG9zaXRpb24tcmVsYXRpdmUiLCJkLWZsZXgiLCJhbGlnbi1pdGVtcy1jZW50ZXIiXSxbMSwibGluYWdlLXRpdGxlLXdyYXBwZXIiLCJkLWZsZXgiLCJhbGlnbi1pdGVtcy1jZW50ZXIiLCJmb250''@;'; put 'put ''LXdlaWdodC1ib2xkIiwicG9zaXRpb24tYWJzb2x1dGUiXSxbImNsYXNzIiwiY2xyLWNvbC1tZC0xMiB0ZXh0LWNlbnRlciBkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZCIsNCwibmdJZiJdLFszLCJtdC0yIiw0LCJuZ0lmIl0sWzEsImNhcmQtaGVhZGVyIiwiZC1mbGV4IiwiZmxleC1jb2x1''@;'; put 'put ''bW4iLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIl0sWyJjbGFzcyIsInRleHQtY2VudGVyIHBiLTEwIiw0LCJuZ0lmIl0sWzEsInRleHQtY2VudGVyIiwicGItMTAiXSxbMywicm91dGVyTGluayJdLFsxLCJjbHItY29sLW1kLTEyIiwidGV4dC1jZW50ZXIiLCJkLWZsZXgiLCJqdXN0aWZ5LWNv''@;'; put 'put ''bnRlbnQtZW5kIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tb3V0bGluZSIsIm1yLTUiLDMsImNsaWNrIl0sWzEsImJ0bi1ncm91cCIsImRpcmVjdGlvbiIsImQtYmxvY2siXSxbMSwicmFkaW8iLCJidG4iLDMsImNsaWNrIl0sWyJ0eXBlIiwicmFkaW8iLCJuYW1lIiwiYnRuLWdy''@;'; put 'put ''b3VwLWRlbW8tcmFkaW9zIiwzLCJjaGVja2VkIl0sWzEsIm1yLTEwIl0sWyJjbHJEcm9wZG93blRyaWdnZXIiLCIiLDEsImJ0biIsImJ0bi1pbmZvLW91dGxpbmUiLDMsImRpc2FibGVkIl0sWyJjbGFzcyIsImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIiLDQsIm5nSWYiXSxbImNsclBvc2l0''@;'; put 'put ''aW9uIiwiYm90dG9tLWxlZnQiXSxbImNsckRyb3Bkb3duSXRlbSIsIiIsMywiY2xpY2siXSxbImNsckRyb3Bkb3duSXRlbSIsIiIsMywiY2xpY2siLDQsIm5nSWYiXSxbMSwiZC1mbGV4IiwiYWxpZ24taXRlbXMtY2VudGVyIl0sWyJ0eXBlIiwiY2hlY2tib3giLCJjbHJDaGVja2JveCIsIiIs''@;'; put 'put ''Im5hbWUiLCJyZWZyZXNoQ2FjaGUiLDMsImNoYW5nZSIsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIl0sWzEsInRleHQtY2VudGVyIl0sWyJjbGFzcyIsInNwaW5uZXIiLDQsIm5nSWYiXSxbImNsYXNzIiwicG9zaXRpb24tcmVsYXRpdmUiLDQsIm5nSWYiXSxbMSwic3Bpbm5lciJdLFsxLCJw''@;'; put 'put ''b3NpdGlvbi1yZWxhdGl2ZSJdLFsxLCJncmFwaC1yZW5kZXItc3Bpbm5lciJdLFsiY2xhc3MiLCJzcGlubmVyIHNwaW5uZXItc20iLDQsIm5nSWYiXSxbImlkIiwiZ3JhcGgiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXtpZigxJmQpe2NvbnN0IGY9TG4oKTtkZSgwLCJhcHAtc2lkZWJhciIs''@;'; put 'put ''NCksRnQoInNjcm9sbGVkVG9Cb3R0b20iLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLEN0KGgubG9hZE1vcmVMaWJyYXJpZXMoKSl9KSxkZSgxLCJjbHItdHJlZSIpLGd0KDIsWEV0LDYsMywiY2xyLXRyZWUtbm9kZSIsNSkoMyxzVHQsMiwxLCJuZy1jb250YWluZXIiLDYpLGhlKCksZ3QoNCxs''@;'; put 'put ''VHQsMywwLCJkaXYiLDcpLGhlKCksZGUoNSwiZGl2Iiw4KSg2LCJkaXYiLDkpLGd0KDcsY1R0LDQsMCwiZGl2IiwxMCkoOCxDVHQsOCw0LCJuZy1jb250YWluZXIiLDExKSxoZSgpKCksZGUoOSwiY2xyLW1vZGFsIiwxMikoMTAsImgzIiwxMyksTGUoMTEsIkxpbWl0IERlcHRoIiksaGUoKSxk''@;'; put 'put ''ZSgxMiwiZGl2IiwxNCkoMTMsInAiKSxMZSgxNCwiRW50ZXIgdGhlIGRlcHRoIG51bWJlciB5b3Ugd291bGQgbGlrZSB0byBsaW1pdCBET1QgcmVuZGVyaW5nIHRvOiIpLGhlKCkoKSxkZSgxNSwiZGl2IiwxNSkoMTYsImRpdiIsMTYpLEd0KDE3LCJpbnB1dCIsMTcsMCksaGUoKSxkZSgxOSwi''@;'; put 'put ''Y2xyLWNvbnRyb2wtaGVscGVyIiwxOCksTGUoMjAsIlRvIHJlbmRlciB3aXRoIHVubGltaXRlZCBkZXB0aCwgbGVhdmUgdGhlIGlucHV0IGVtcHR5IiksaGUoKSxkZSgyMSwiZGl2IiwxOSkoMjIsImJ1dHRvbiIsMjApLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5s''@;'; put 'put ''aW1pdERvdERlcHRoPSExKX0pLExlKDIzLCIgQ2FuY2VsICIpLGhlKCksZGUoMjQsImJ1dHRvbiIsMjApLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChmKTtjb25zdCBNPWhhKDE4KTtyZXR1cm4gaC5yZXN1Ym1pdFdpdGhNYXhEZXB0aChNLnZhbHVlKSxDdChoLmxpbWl0RG90RGVwdGg9ITEp''@;'; put 'put ''fSksTGUoMjUsIiBSZXN1Ym1pdCAiKSxoZSgpKCkoKSgpLGRlKDI2LCJjbHItbW9kYWwiLDEyKSgyNywiaDMiLDEzKSxMZSgyOCwiV2FybmluZyIpLGhlKCksZGUoMjksImRpdiIsMTQpKDMwLCJwIiksTGUoMzEpLGhlKCkoKSxkZSgzMiwiZGl2IiwxNSkoMzMsImRpdiIsMTkpKDM0LCJwIiks''@;'; put 'put ''TGUoMzUsIlJlbmRlciBhbnl3YXkgKHRoaXMgbWF5IHRha2UgYSBsb25nIHRpbWUpIiksaGUoKSxkZSgzNiwiYnV0dG9uIiwyMCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxDdChoLmNvbnRpbnVlUmVuZGVyaW5nR3JhcGgoKSl9KSxMZSgzNywiIFJlbmRlciAiKSxoZSgp''@;'; put 'put ''KCksZGUoMzgsImRpdiIsMTkpKDM5LCJwIiksTGUoNDAsIkRvd25sb2FkIHRoZSByZXN1bHQgKFBORyAmIFNWRyByZXF1aXJlIHJlbmRlcmluZykiKSxoZSgpLGRlKDQxLCJjbHItZHJvcGRvd24iKSg0MiwiYnV0dG9uIiwyMSksTGUoNDMsIiBEb3dubG9hZCAiKSxHdCg0NCwiY2xyLWljb24i''@;'; put 'put ''LDIyKSxoZSgpLGd0KDQ1LE1UdCw2LDEsImNsci1kcm9wZG93bi1tZW51IiwyMyksaGUoKSgpLGRlKDQ2LCJkaXYiLDE5KSg0NywicCIpLExlKDQ4LCJSZXN1Ym1pdCB3aXRoIGEgbWF4LWRlcHRoIChzcGVjaWZ5IGRlcHRoKSIpLGhlKCksR3QoNDksImlucHV0IiwxNywxKSxkZSg1MSwiYnV0''@;'; put 'put ''dG9uIiwyMCksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGYpO2NvbnN0IE09aGEoNTApO3JldHVybiBDdChoLnJlc3VibWl0V2l0aE1heERlcHRoKE0udmFsdWUpKX0pLExlKDUyLCIgUmVzdWJtaXQgIiksaGUoKSgpLGRlKDUzLCJkaXYiLDE5KSg1NCwicCIpLExlKDU1LCJDYW5jZWwgdGhp''@;'; put 'put ''cyBzdWJtaXNzaW9uIiksaGUoKSxkZSg1NiwiYnV0dG9uIiwyMCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxDdChoLmNhbmNlbFJlbmRlcmluZ0dyYXBoKCkpfSksTGUoNTcsIiBDYW5jZWwgIiksaGUoKSgpKCkoKX0yJmQmJihmZSgyKSxNZSgibmdJZiIsaC5saWJyYXJ5''@;'; put 'put ''TGlzdCksZmUoKSxNZSgibmdGb3JPZiIsaC5saWJyYXJ5TGlzdCksZmUoKSxNZSgibmdJZiIsaC5saWJyYXJpZXNQYWdpbmcpLGZlKDMpLE1lKCJuZ0lmIiwhaC5jb2x1bW4mJiFoLnRhYmxlKSxmZSgpLE1lKCJuZ0lmIixoLmNvbHVtbnx8aC50YWJsZSksZmUoKSxNZSgiY2xyTW9kYWxPcGVu''@;'; put 'put ''IixoLmxpbWl0RG90RGVwdGgpKCJjbHJNb2RhbENsb3NhYmxlIiwhMSksZmUoMTcpLE1lKCJjbHJNb2RhbE9wZW4iLG51bGwhPT1oLmxhcmdlRG90RmlsZUxpbmVzKSgiY2xyTW9kYWxDbG9zYWJsZSIsITEpLGZlKDUpLElyKCIgVGhlIGdlbmVyYXRlZCBkb3QgZmlsZSBoYXMgIixoLmxhcmdl''@;'; put 'put ''RG90RmlsZUxpbmVzLCIgbGluZXMuIFJlbmRlcmluZyBtYXkgdGFrZSBhIGxvbmcgdGltZSwgaG93IHdvdWxkIHlvdSBsaWtlIHRvIHByb2NlZWQ/ICIpLGZlKDExKSxNZSgiZGlzYWJsZWQiLCFoLmNvbHVtbiYmIWgudGFibGUpKX0sZGVwZW5kZW5jaWVzOltucyxiYSxjMSxxbCxNZCxubCwk''@;'; put 'put ''cyxFaCxQZCxmZyxIbCxvdSxLdSxqMCxMMixkcyxqTCxJZCxTaCxaMSxzZyxnNyxtNyxWeSxpNCxyNF0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKTtjb25zdCBFVHQ9KCk9PlsxMCwyMCw1MCwxMDBdO2Z1bmN0aW9uIFRUdChjLGwpe2lmKDEmYyYmKGRlKDAsIm9wdGlvbiIsMTQp''@;'; put 'put ''LExlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmTSgidmFsdWUiLGEpLGZlKCksSXIoIiAiLGEsIiAiKX19ZnVuY3Rpb24gQVR0KGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsMjApfWZ1bmN0aW9uIGtUdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci1p''@;'; put 'put ''Y29uIiwyMSksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9UmUoMik7cmV0dXJuIGgubWV0YURhdGFTZWFyY2g9IiIsQ3QoaC5tZXRhTGlzdE9uRmlsdGVyKCkpfSksaGUoKX19ZnVuY3Rpb24gRFR0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLXRyZWUt''@;'; put 'put ''bm9kZSIsMTUpKDEsImRpdiIsMTYpKDIsImlucHV0IiwxNywwKSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1SZSgpO3JldHVybiBtaShmLm1ldGFEYXRhU2VhcmNoLGgpfHwoZi5tZXRhRGF0YVNlYXJjaD1oKSxDdChoKX0pLEZ0KCJrZXl1cCIsZnVuY3Rp''@;'; put 'put ''b24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS5tZXRhTGlzdE9uRmlsdGVyKCkpfSksaGUoKSxndCg0LEFUdCwxLDAsImNsci1pY29uIiwxOCkoNSxrVHQsMSwwLCJjbHItaWNvbiIsMTkpLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9aGEoMyksZD1SZSgpO2ZlKDIpLHBpKCJuZ01vZGVsIixkLm1l''@;'; put 'put ''dGFEYXRhU2VhcmNoKSxmZSgyKSxNZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8MSksZmUoKSxNZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg+MCl9fWZ1bmN0aW9uIElUdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci10cmVlLW5vZGUiLDIzKSxGdCgiY2xpY2siLGZ1bmN0aW9u''@;'; put 'put ''KGgpe3d0KGEpO2NvbnN0IGY9UmUoKS4kaW1wbGljaXQsdj1SZSgpO3JldHVybiBDdCh2LnRyZWVOb2RlQ2xpY2tlZChoLGYsdi5tZXRhRGF0YUxpc3QpKX0pLGdpKCJjbHJFeHBhbmRlZENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1SZSgpLiRpbXBsaWNpdDtyZXR1cm4gbWko''@;'; put 'put ''Zi5leHBhbmRlZCxoKXx8KGYuZXhwYW5kZWQ9aCksQ3QoaCl9KSxkZSgxLCJwIiwyNCksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9UmUoKS4kaW1wbGljaXQsZj1SZSgpO3JldHVybiBmLm1ldGFEYXRhSWQ9aC5JRCxDdChmLm1ldGFEYXRhT25DbGljayhmLm1ldGFEYXRh''@;'; put 'put ''SWQsaCkpfSksR3QoMiwiY2xyLWljb24iLDI1KSxMZSgzKSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPVJlKCkuJGltcGxpY2l0O3BpKCJjbHJFeHBhbmRlZCIsYS5leHBhbmRlZCksTWUoImNsckxvYWRpbmciLGEubG9hZGluZ1RhYmxlcyYmIWEudGFibGVzKSxmZSgzKSxJcigiICIsYS5JRCwi''@;'; put 'put ''ICIpfX1mdW5jdGlvbiBSVHQoYyxsKXtpZigxJmMmJihzaSgwKSxndCgxLElUdCw0LDMsImNsci10cmVlLW5vZGUiLDIyKSxsaSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoKSxNZSgibmdJZiIsIWEuaGlkZGVuKX19ZnVuY3Rpb24gTFR0KGMsbCl7MSZjJiYoZGUoMCwiZGl2Iiwy''@;'; put 'put ''NiksR3QoMSwiY2xyLWljb24iLDI3KSxkZSgyLCJwIiwyOCksTGUoMywiIFBsZWFzZSBzZWxlY3QgYSB0eXBlICIpLGhlKCkoKSl9ZnVuY3Rpb24gT1R0KGMsbCl7MSZjJiYoZGUoMCwiaDQiKSxMZSgxLCJMb2FkaW5nIG1ldGFkYXRhIHR5cGVzIiksaGUoKSl9ZnVuY3Rpb24gUFR0KGMsbCl7''@;'; put 'put ''MSZjJiYoZGUoMCwiaDQiKSxMZSgxLCJMb2FkaW5nIG1ldGFkYXRhIG9iamVjdHMiKSxoZSgpKX1mdW5jdGlvbiBGVHQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiKSxndCgxLE9UdCwyLDAsImg0IiwzMSkoMixQVHQsMiwwLCJoNCIsMzEpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgyKTtmZSgp''@;'; put 'put ''LE1lKCJuZ0lmIixhLm1ldGF0eXBlc0xvYWRpbmcpLGZlKCksTWUoIm5nSWYiLCFhLm1ldGF0eXBlc0xvYWRpbmcpfX1mdW5jdGlvbiBIVHQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDI5KSgxLCJzcGFuIiwzMCksTGUoMiwiIExvYWRpbmcuLi4gIiksaGUoKSxndCgzLEZUdCwzLDIsImRp''@;'; put 'put ''diIsMzEpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgpO2ZlKDMpLE1lKCJuZ0lmIixhLmxvYWRpbmcpfX1mdW5jdGlvbiBOVHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiLDM4KSgxLCJpbnB1dCIsMzksMSksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEp''@;'; put 'put ''O2NvbnN0IGY9UmUoMik7cmV0dXJuIG1pKGYubWV0YU9iamVjdFNlYXJjaCxoKXx8KGYubWV0YU9iamVjdFNlYXJjaD1oKSxDdChoKX0pLEZ0KCJrZXl1cCIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoMikubWV0YU9iamVjdE9uRmlsdGVyKCkpfSksaGUoKSgpfWlmKDImYyl7Y29u''@;'; put 'put ''c3QgYT1SZSgyKTtmZSgpLHBpKCJuZ01vZGVsIixhLm1ldGFPYmplY3RTZWFyY2gpfX1mdW5jdGlvbiBWVHQoYyxsKXsxJmMmJkd0KDAsImNsci1pY29uIiw0Myl9ZnVuY3Rpb24gQlR0KGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsMjUpfWZ1bmN0aW9uIGpUdChjLGwpe2lmKDEmYyYmKGRl''@;'; put 'put ''KDAsInAiLDU0KSxMZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoKS4kaW1wbGljaXQ7ZmUoKSxJcigiICIsYS5VUkksIiAiKX19ZnVuY3Rpb24gelR0KGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xyLXRyZWUtbm9kZSIsNDkpKDEsImRpdiIsNTApKDIsImRpdiIpLGd0KDMsVlR0LDEsMCwiY2xy''@;'; put 'put ''LWljb24iLDUxKSg0LEJUdCwxLDAsImNsci1pY29uIiw1MiksTGUoNSksaGUoKSxndCg2LGpUdCwyLDEsInAiLDUzKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtNZSgiY2xyRXhwYW5kYWJsZSIsITApLGZlKCksVHIoIm9iamVjdC1oZWFkZXIiLCFhLmNvdW50KSxmZSgyKSxN''@;'; put 'put ''ZSgibmdJZiIsIWEuY291bnQpLGZlKCksTWUoIm5nSWYiLGEuY291bnQpLGZlKCksSXIoIiAiLGEuZGlzcGxheSwiICIpLGZlKCksTWUoIm5nSWYiLCFhLmNvdW50KX19ZnVuY3Rpb24gVVR0KGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xyLXRyZWUiLDQ3KSxndCgxLHpUdCw3LDcsImNsci10cmVl''@;'; put 'put ''LW5vZGUiLDQ4KSxlbCgyLCJhc3luYyIpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSg2KTtNZSgiY2xyTGF6eSIsITApLGZlKCksTWUoImNsclJlY3Vyc2l2ZUZvck9mIixEYygyLDMsYS5yb290JCkpKCJjbHJSZWN1cnNpdmVGb3JHZXRDaGlsZHJlbiIsYS5nZXRDaGlsZHJlbil9fWZ1bmN0aW9u''@;'; put 'put ''IFpUdChjLGwpe2lmKDEmYyYmKGRlKDAsImNsci1hY2NvcmRpb24tY29udGVudCIpLGd0KDEsVVR0LDMsNSwiY2xyLXRyZWUiLDQ2KSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoNSk7ZmUoKSxNZSgibmdJZiIsYS5zaG93QWNjKX19ZnVuY3Rpb24gV1R0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxu''@;'; put 'put ''KCk7ZGUoMCwiY2xyLWFjY29yZGlvbi1wYW5lbCIsNDIpLEZ0KCJjbHJBY2NvcmRpb25QYW5lbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9UmUoKS4kaW1wbGljaXQsdj1SZSgzKTtyZXR1cm4gQ3QoaD92LnBhbmVsQ2hhbmdlKGgsZik6IiIpfSksZGUoMSwiY2xyLWFj''@;'; put 'put ''Y29yZGlvbi10aXRsZSIpLEd0KDIsImNsci1pY29uIiw0MyksTGUoMyksZGUoNCwicCIsNDQpLExlKDUpLGhlKCkoKSxndCg2LFpUdCwyLDEsImNsci1hY2NvcmRpb24tY29udGVudCIsNDUpLGhlKCl9aWYoMiZjKXtjb25zdCBhPVJlKCkuJGltcGxpY2l0O2ZlKDMpLElyKCIgIixhLk5BTUUs''@;'; put 'put ''IiAiKSxmZSgyKSx3cihhLklEKX19ZnVuY3Rpb24gWVR0KGMsbCl7aWYoMSZjJiYoc2koMCksZ3QoMSxXVHQsNywyLCJjbHItYWNjb3JkaW9uLXBhbmVsIiw0MSksbGkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKCksTWUoIm5nSWYiLCFhLmhpZGRlbil9fWZ1bmN0aW9uIEdUdChj''@;'; put 'put ''LGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsNDApKDEsImNsci1hY2NvcmRpb24iKSxndCgyLFlUdCwyLDEsIm5nLWNvbnRhaW5lciIsNyksaGUoKSgpKSwyJmMpe2NvbnN0IGE9UmUoMik7ZmUoMiksTWUoIm5nRm9yT2YiLGEubWV0YU9iamVjdFNob3dMaXN0KX19ZnVuY3Rpb24gJFR0KGMsbCl7''@;'; put 'put ''MSZjJiZHdCgwLCJjbHItaWNvbiIsNDMpfWZ1bmN0aW9uIEtUdChjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDI1KX1mdW5jdGlvbiBxVHQoYyxsKXtpZigxJmMmJihkZSgwLCJwIiw1NCksTGUoMSksaGUoKSksMiZjKXtjb25zdCBhPVJlKCkuJGltcGxpY2l0O2ZlKCksSXIoIiAiLGEuVVJJ''@;'; put 'put ''LCIgIil9fWZ1bmN0aW9uIFhUdChjLGwpe2lmKDEmYyYmKGRlKDAsImNsci10cmVlLW5vZGUiLDQ5KSgxLCJkaXYiLDUwKSgyLCJkaXYiKSxndCgzLCRUdCwxLDAsImNsci1pY29uIiw1MSkoNCxLVHQsMSwwLCJjbHItaWNvbiIsNTIpLExlKDUpLGhlKCksZ3QoNixxVHQsMiwxLCJwIiw1Myks''@;'; put 'put ''aGUoKSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7TWUoImNsckV4cGFuZGFibGUiLCEwKSxmZSgpLFRyKCJvYmplY3QtaGVhZGVyIiwhYS5jb3VudCksZmUoMiksTWUoIm5nSWYiLCFhLmNvdW50KSxmZSgpLE1lKCJuZ0lmIixhLmNvdW50KSxmZSgpLElyKCIgIixhLmRpc3BsYXksIiAi''@;'; put 'put ''KSxmZSgpLE1lKCJuZ0lmIiwhYS5jb3VudCl9fWZ1bmN0aW9uIEpUdChjLGwpe2lmKDEmYyYmKGRlKDAsImNsci10cmVlIiw0NyksZ3QoMSxYVHQsNyw3LCJjbHItdHJlZS1ub2RlIiw0OCksZWwoMiwiYXN5bmMiKSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoNCk7TWUoImNsckxhenkiLCEwKSxm''@;'; put 'put ''ZSgpLE1lKCJjbHJSZWN1cnNpdmVGb3JPZiIsRGMoMiwzLGEucm9vdCQpKSgiY2xyUmVjdXJzaXZlRm9yR2V0Q2hpbGRyZW4iLGEuZ2V0Q2hpbGRyZW4pfX1mdW5jdGlvbiBRVHQoYyxsKXtpZigxJmMmJihzaSgwKSxkZSgxLCJkaXYiLDU1KSxHdCgyLCJjbHItaWNvbiIsNDMpLGRlKDMsImRp''@;'; put 'put ''diIsNTYpKDQsInAiLDU3KSxMZSg1KSxoZSgpLGRlKDYsInAiLDU4KSxMZSg3KSxoZSgpKCkoKSxndCg4LEpUdCwzLDUsImNsci10cmVlIiw0NiksbGkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9UmUoMyk7ZmUoNSksSXIoIiAiLGEuTkFNRSwiICIpLGZlKDIpLElyKCIgIixhLklE''@;'; put 'put ''LCIgIiksZmUoKSxNZSgibmdJZiIsZC5zaG93QWNjKX19ZnVuY3Rpb24gZUF0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiw0MCksZ3QoMSxRVHQsOSwzLCJuZy1jb250YWluZXIiLDcpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgyKTtmZSgpLE1lKCJuZ0Zvck9mIixhLm1ldGFPYmplY3RTaG93''@;'; put 'put ''TGlzdCl9fWZ1bmN0aW9uIHRBdChjLGwpe2lmKDEmYyYmKGRlKDAsImNsci1kZy1yb3ciKSgxLCJjbHItZGctY2VsbCIpLExlKDIpLGhlKCksZGUoMywiY2xyLWRnLWNlbGwiKSxMZSg0KSxoZSgpLGRlKDUsImNsci1kZy1jZWxsIiksTGUoNiksaGUoKSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1w''@;'; put 'put ''bGljaXQ7ZmUoMiksd3IoYS5UWVBFKSxmZSgyKSx3cihhLk5BTUUpLGZlKDIpLHdyKGEuVkFMVUUpfX1mdW5jdGlvbiBuQXQoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItZGF0YWdyaWQiLDU5KSgxLCJjbHItZGctY29sdW1uIiksTGUoMiwiIFRZUEUgIiksR3QoMywiY2xyLWRnLXN0cmluZy1m''@;'; put 'put ''aWx0ZXIiLDYwKSxoZSgpLGRlKDQsImNsci1kZy1jb2x1bW4iKSxMZSg1LCIgTkFNRSAiKSxHdCg2LCJjbHItZGctc3RyaW5nLWZpbHRlciIsNjApLGhlKCksZGUoNywiY2xyLWRnLWNvbHVtbiIpLExlKDgsIiBWQUxVRSAiKSxHdCg5LCJjbHItZGctc3RyaW5nLWZpbHRlciIsNjApLGhlKCks''@;'; put 'put ''Z3QoMTAsdEF0LDcsMywiY2xyLWRnLXJvdyIsNjEpLGRlKDExLCJjbHItZGctZm9vdGVyIikoMTIsImNsci1kZy1wYWdpbmF0aW9uIiw2MiwyKSgxNCwiY2xyLWRnLXBhZ2Utc2l6ZSIsNjMpLExlKDE1LCJBdHRyaWJ1dGVzIHBlciBwYWdlIiksaGUoKSxMZSgxNiksaGUoKSgpKCkpLDImYyl7''@;'; put 'put ''Y29uc3QgYT1oYSgxMyksZD1SZSgyKTtmZSgzKSxNZSgiY2xyRGdTdHJpbmdGaWx0ZXIiLGQudHlwZUZpbHRlciksZmUoMyksTWUoImNsckRnU3RyaW5nRmlsdGVyIixkLm5hbWVGaWx0ZXIpLGZlKDMpLE1lKCJjbHJEZ1N0cmluZ0ZpbHRlciIsZC52YWx1ZUZpbHRlciksZmUoKSxNZSgiY2xy''@;'; put 'put ''RGdJdGVtc09mIixkLm1ldGFPYmplY3RBdHRyaWJ1dGVzKSxmZSgyKSxNZSgiY2xyRGdQYWdlU2l6ZSIsMTApLGZlKDIpLE1lKCJjbHJQYWdlU2l6ZU9wdGlvbnMiLFlzKDksRVR0KSksZmUoMiksVmYoIiAiLGEuZmlyc3RJdGVtKzEsIiAtICIsYS5sYXN0SXRlbSsxLCIgb2YgIixhLnRvdGFs''@;'; put 'put ''SXRlbXMsIiBBdHRyaWJ1dGVzICIpfX1mdW5jdGlvbiByQXQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDMyKSgxLCJkaXYiLDMzKSxndCgyLE5UdCwzLDEsImRpdiIsMzQpLEd0KDMsImJyIiksZ3QoNCxHVHQsMywxLCJkaXYiLDM1KSg1LGVBdCwyLDEsImRpdiIsMzUpLGhlKCksZGUoNiwi''@;'; put 'put ''ZGl2IiwzNikoNywiaDMiKSxMZSg4KSxoZSgpLGd0KDksbkF0LDE3LDEwLCJjbHItZGF0YWdyaWQiLDM3KSxoZSgpKCkpLDImYyl7Y29uc3QgYT1SZSgpO2ZlKDIpLE1lKCJuZ0lmIixhLm1ldGFPYmplY3RMaXN0JiYhYS5vYmplY3RSb3V0ZSksZmUoMiksTWUoIm5nSWYiLCFhLm9iamVjdFZp''@;'; put 'put ''ZXcpLGZlKCksTWUoIm5nSWYiLGEub2JqZWN0VmlldyksZmUoMyksd3IoYS5hc3NvT2JqZWN0U2VsZWN0ZWQpLGZlKCksTWUoIm5nSWYiLGEuc2hvd1RhYmxlKX19bGV0IFp0ZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNKXt0aGlzLmV2ZW50U2VydmljZT1hLHRoaXMu''@;'; put 'put ''c2FzU2VydmljZT1kLHRoaXMuaGVscGVyU2VydmljZT1oLHRoaXMubG9jYXRpb249Zix0aGlzLnJvdXRlcj12LHRoaXMucm91dGU9TSx0aGlzLm1ldGFEYXRhU2VhcmNoPSIiLHRoaXMubWV0YU9iamVjdFNlYXJjaD0iIix0aGlzLm1ldGFPYmplY3RBc3NvY2lhdGlvbnM9W10sdGhpcy5tZXRh''@;'; put 'put ''T2JqZWN0QXR0cmlidXRlcz1bXSx0aGlzLnNob3dUYWJsZT0hMSx0aGlzLnNob3dBY2M9ITEsdGhpcy5tZXRhRGF0YUlkPSIiLHRoaXMubG9hZGluZz0hMCx0aGlzLm1ldGF0eXBlc0xvYWRpbmc9ITAsdGhpcy5tZXRhT2JqZWN0U2l6ZT0yMDAsdGhpcy5hc3NvVHlwZVNlbGVjdGVkPSIiLHRo''@;'; put 'put ''aXMuYXNzb09iamVjdFNlbGVjdGVkPSIiLHRoaXMucmVwb3NpdG9yeT0iIix0aGlzLm9iamVjdFJvdXRlPSExLHRoaXMuc2hvd0RhdGE9ITEsdGhpcy5vYmplY3RWaWV3PSExLHRoaXMuZ2V0Q2hpbGRyZW49RD0+RC5jb3VudD9mbyhELmRldGFpbHMpOnRoaXMuc2FzU2VydmljZS5yZXF1ZXN0''@;'; put 'put ''KCJtZXRhbmF2L21ldGFkZXRhaWxzIix7U0FTQ29udHJvbFRhYmxlOlt7b2JqZWN0dXJpOkQuQVNTT0NVUkl9XX0pLnRoZW4ocmU9Pnt0aGlzLnNob3dUYWJsZT0hMCx0aGlzLm1ldGFPYmplY3RBdHRyaWJ1dGVzPXJlLmFkYXB0ZXJSZXNwb25zZS5hdHRyaWJ1dGVzLHRoaXMuYXNzb09iamVj''@;'; put 'put ''dFNlbGVjdGVkPUQuTkFNRTtsZXQgY2U9dGhpcy5yb3V0ZXIudXJsO3JldHVybiB0aGlzLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZSh0aGlzLm9iamVjdFJvdXRlP2NlLnNsaWNlKDAsY2UubGFzdEluZGV4T2YoIm9iamVjdCIpKSsib2JqZWN0LyIrRC5BU1NPQ1VSSS5zbGljZSgxK0QuQVNTT0NV''@;'; put 'put ''UkkuaW5kZXhPZigiXFwiKSk6Y2UrIi9vYmplY3QvIitELkFTU09DVVJJLnNsaWNlKDErRC5BU1NPQ1VSSS5pbmRleE9mKCJcXCIpKSksdGhpcy5nZXRBc3Nvc2lhdGlvbnNDb3VudChyZS5hZGFwdGVyUmVzcG9uc2UuYXNzb2NpYXRpb25zKX0pLHRoaXMuZGVib3VuY2U9ITF9bmdPbkluaXQo''@;'; put 'put ''KXtLbi52aWV3ZXIuY3VycmVudFNlbGVjdGlvbj0idmlldy9tZXRhZGF0YSIsdGhpcy5yb3V0ZXIudXJsLmluY2x1ZGVzKCIvdmlldy9tZXRhZGF0YS9vYmplY3QvIikmJih0aGlzLm9iamVjdFJvdXRlPSEwLHRoaXMub2JqZWN0Vmlldz0hMCksdGhpcy5wYWdlU2l6ZT01LEtuLm1ldGFkYXRh''@;'; put 'put ''Lm1ldGFEYXRhTGlzdCYmS24ubWV0YWRhdGEubWV0YVJlcG9zaXRvcmllcyYmIXRoaXMub2JqZWN0Um91dGU/KHRoaXMubWV0YURhdGFMaXN0PUtuLm1ldGFkYXRhLm1ldGFEYXRhTGlzdCx0aGlzLnJlcG9zaXRvcmllcz1Lbi5tZXRhZGF0YS5tZXRhUmVwb3NpdG9yaWVzLHRoaXMucmVwb3Np''@;'; put 'put ''dG9yeT1Lbi5tZXRhZGF0YS5zZWxlY3RlZFJlcG9zaXRvcnksdGhpcy5sb2FkaW5nPSExLHRoaXMubWV0YXR5cGVzTG9hZGluZz0hMSx0aGlzLm1ldGFEYXRhU2VhcmNoPUtuLm1ldGFkYXRhLm1ldGFEYXRhU2VhcmNoKToodGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoIm1ldGFuYXYvbWV0YXR5''@;'; put 'put ''cGVzIixudWxsKS50aGVuKGE9Pnt0aGlzLm1ldGFEYXRhTGlzdD1hLmFkYXB0ZXJSZXNwb25zZS50eXBlcyxLbi5tZXRhZGF0YS5tZXRhRGF0YUxpc3Q9dGhpcy5tZXRhRGF0YUxpc3QsdGhpcy5sb2FkaW5nPSExLHRoaXMubWV0YXR5cGVzTG9hZGluZz0hMX0pLHRoaXMuc2FzU2VydmljZS5y''@;'; put 'put ''ZXF1ZXN0KCJtZXRhbmF2L21ldGFyZXBvcyIsbnVsbCkudGhlbihhPT57bGV0IGQ9ITE7dGhpcy5yZXBvc2l0b3JpZXM9W107Zm9yKGxldCBoPTA7aDxhLmFkYXB0ZXJSZXNwb25zZS5vdXRyZXBvcy5sZW5ndGg7aCsrKXRoaXMucmVwb3NpdG9yaWVzLnB1c2goYS5hZGFwdGVyUmVzcG9uc2Uu''@;'; put 'put ''b3V0cmVwb3NbaF0uTkFNRSksIkZvdW5kYXRpb24iPT09YS5hZGFwdGVyUmVzcG9uc2Uub3V0cmVwb3NbaF0uTkFNRSYmKGQ9ITApO2lmKHRoaXMucmVwb3NpdG9yeT1kPyJGb3VuZGF0aW9uIjphLmFkYXB0ZXJSZXNwb25zZS5vdXRyZXBvc1swXS5OQU1FLEtuLm1ldGFkYXRhLm1ldGFSZXBv''@;'; put 'put ''c2l0b3JpZXM9dGhpcy5yZXBvc2l0b3JpZXMsS24ubWV0YWRhdGEuc2VsZWN0ZWRSZXBvc2l0b3J5PXRoaXMucmVwb3NpdG9yeSx0aGlzLm9iamVjdFJvdXRlKXt0aGlzLmV2ZW50U2VydmljZS5jbG9zZVNpZGViYXIoKSx0aGlzLnNob3dEYXRhPSEwO2xldCBoPSIiLGY9dGhpcy5yb3V0ZS5z''@;'; put 'put ''bmFwc2hvdC5wYXJhbXMub2JqZWN0SUQ7dGhpcy5tZXRhT2JqZWN0TGlzdD1bXSx0aGlzLm1ldGFPYmplY3RMaXN0LnB1c2goe0lEOmYsTkFNRTpofSksdGhpcy5tZXRhT2JqZWN0U2hvd0xpc3Q9dGhpcy5tZXRhT2JqZWN0TGlzdCx0aGlzLm1ldGFPYmplY3RPbkNsaWNrKHRoaXMubWV0YU9i''@;'; put 'put ''amVjdFNob3dMaXN0WzBdLklELHRoaXMubWV0YU9iamVjdFNob3dMaXN0WzBdKX19KSl9dHJlZU5vZGVDbGlja2VkKGEsZCxoKXsiQ29sbGFwc2UiPT09YS50YXJnZXQudGl0bGUmJnRoaXMuY29sbGFwc2VUcmVlSXRlbXMoaCxkKX1jb2xsYXBzZVRyZWVJdGVtcyhhLGQpe2EuZm9yRWFjaCho''@;'; put 'put ''PT57SlNPTi5zdHJpbmdpZnkoaCkhPT1KU09OLnN0cmluZ2lmeShkKSYmKGguZXhwYW5kZWQ9ITEpfSl9bWV0YURhdGFPbkNsaWNrKGEsZCl7dGhpcy5vYmplY3RWaWV3PSExLHRoaXMubG9jYXRpb24ucmVwbGFjZVN0YXRlKCIvdmlldy9tZXRhZGF0YSIpLHRoaXMuc2hvd0RhdGE9ITEsdGhp''@;'; put 'put ''cy5sb2FkaW5nPSEwLHRoaXMuc2VsZWN0bWV0YURhdGEoYSxkKX1tZXRhT2JqZWN0T25DbGljayhhLGQpe3RoaXMuYXNzb09iamVjdFNlbGVjdGVkPSIgLiAiLHRoaXMuc2hvd0FjYz0hMSx0aGlzLm1ldGFPYmplY3RBdHRyaWJ1dGVzPVtdLHRoaXMuc2VsZWN0bWV0YU9iamVjdChhLGQpfXNl''@;'; put 'put ''bGVjdG1ldGFEYXRhKGEsZCl7dmFyIGg9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7aC5zYXNTZXJ2aWNlLnJlcXVlc3QoIm1ldGFuYXYvbWV0YW9iamVjdHMiLHtTQVNDb250cm9sVGFibGU6W3ttZXRhdHlwZTphLHJlcG86aC5yZXBvc2l0b3J5fV19KS50aGVuKHY9PntoLm1ldGFPYmpl''@;'; put 'put ''Y3RMaXN0PXYuYWRhcHRlclJlc3BvbnNlLm9iamVjdHMsaC5nZXRNZXRhT2JqZWN0QXR0cmlidXRlcyhoLm1ldGFPYmplY3RTaXplKSxoLmxvYWRpbmc9ITEsaC5hc3NvVHlwZVNlbGVjdGVkPWEsaC5ldmVudFNlcnZpY2UuY2xvc2VTaWRlYmFyKCksaC5zaG93RGF0YT0hMH0pfSkoKX1zZWxl''@;'; put 'put ''Y3RtZXRhT2JqZWN0KGEsZCl7dmFyIGg9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7aC5zYXNTZXJ2aWNlLnJlcXVlc3QoIm1ldGFuYXYvbWV0YWRldGFpbHMiLHtTQVNDb250cm9sVGFibGU6W3tvYmplY3R1cmk6YX1dfSkudGhlbih2PT57aC5tZXRhT2JqZWN0QXNzb2NpYXRpb25zPXYu''@;'; put 'put ''YWRhcHRlclJlc3BvbnNlLmFzc29jaWF0aW9ucyxoLnJvb3QkPWZvKGguZ2V0QXNzb3NpYXRpb25zQ291bnQodi5hZGFwdGVyUmVzcG9uc2UuYXNzb2NpYXRpb25zKSksaC5zaG93QWNjPSEwLGguc2hvd1RhYmxlPSEwO2xldCBNPXYuYWRhcHRlclJlc3BvbnNlLmF0dHJpYnV0ZXMuZmluZCha''@;'; put 'put ''PT4iTmFtZSI9PT1aLk5BTUUpLlZBTFVFO2guYXNzb09iamVjdFNlbGVjdGVkPU0sZC5OQU1FPU07bGV0IEQ9aC5yb3V0ZXIudXJsO2gubG9jYXRpb24ucmVwbGFjZVN0YXRlKGgub2JqZWN0Um91dGU/RC5zbGljZSgwLEQubGFzdEluZGV4T2YoIm9iamVjdCIpKSsib2JqZWN0LyIrYS5zbGlj''@;'; put 'put ''ZSgxK2EuaW5kZXhPZigiXFwiKSk6RCsiL29iamVjdC8iK2Euc2xpY2UoMSthLmluZGV4T2YoIlxcIikpKSxoLm1ldGFPYmplY3RBdHRyaWJ1dGVzPXYuYWRhcHRlclJlc3BvbnNlLmF0dHJpYnV0ZXN9KX0pKCl9c2VsZWN0QXNzb3NpYXRpb25zRGV0YWlscyhhLGQpe3ZhciBoPXRoaXM7cmV0''@;'; put 'put ''dXJuIGVlKGZ1bmN0aW9uKigpe2guc2FzU2VydmljZS5yZXF1ZXN0KCJtZXRhbmF2L21ldGFkZXRhaWxzIix7U0FTQ29udHJvbFRhYmxlOlt7b2JqZWN0dXJpOmF9XX0pLnRoZW4odj0+e2gubWV0YU9iamVjdEF0dHJpYnV0ZXM9di5hZGFwdGVyUmVzcG9uc2UuYXR0cmlidXRlcyxoLnNob3dU''@;'; put 'put ''YWJsZT0hMH0pfSkoKX1nZXRBc3Nvc2lhdGlvbnNDb3VudChhKXtsZXQgZD1uZXcgTWFwO2ZvcihsZXQgZiBvZiBhKXtkLmhhcyhmLkFTU09DKXx8ZC5zZXQoZi5BU1NPQyx7Y291bnQ6MCxkZXRhaWxzOltdfSk7bGV0IHY9ZC5nZXQoZi5BU1NPQyk7di5jb3VudCsrLHYuZGV0YWlscy5wdXNo''@;'; put 'put ''KHtBU1NPQ1VSSTpmLkFTU09DVVJJLE5BTUU6Zi5OQU1FLGRpc3BsYXk6Zi5OQU1FLFVSSTpmLkFTU09DVVJJLnNsaWNlKGYuQVNTT0NVUkkuaW5kZXhPZigiOiIpKzEpfSl9bGV0IGg9W107cmV0dXJuIGQuZm9yRWFjaChmdW5jdGlvbihmLHYpe2gucHVzaCh7QVNTT0M6dixjb3VudDpmLmNv''@;'; put 'put ''dW50LGRldGFpbHM6Zi5kZXRhaWxzLGRpc3BsYXk6disiICggIitmLmNvdW50KyIgKSJ9KX0pLGh9c2V0VHlwZUFzc29zaWF0aW9ucyhhKXtsZXQgZD1bXTtmb3IobGV0IGggb2YgdGhpcy5tZXRhT2JqZWN0QXNzb2NpYXRpb25zKWguQVNTT0M9PT1hJiZkLnB1c2goaCk7cmV0dXJuIHRoaXMu''@;'; put 'put ''YXNzb3NpYXRpb25OYW1lcz1kLGR9YXNzb3NpYXRpb25OYW1lT25DbGljayhhKXt0aGlzLmFzc29PYmplY3RTZWxlY3RlZD0iIC4gIix0aGlzLm1ldGFPYmplY3RBdHRyaWJ1dGVzPVtdLHRoaXMuc2hvd1RhYmxlPSExLHRoaXMuc2VsZWN0QXNzb3NpYXRpb25zRGV0YWlscyhhKX1tZXRhTGlz''@;'; put 'put ''dE9uRmlsdGVyKCl7dGhpcy5oZWxwZXJTZXJ2aWNlLmxpYnJhcnlPbkZpbHRlcih0aGlzLm1ldGFEYXRhTGlzdCx0aGlzLm1ldGFEYXRhU2VhcmNoLCJJRCIpLEtuLm1ldGFkYXRhLm1ldGFEYXRhU2VhcmNoPXRoaXMubWV0YURhdGFTZWFyY2h9bWV0YU9iamVjdE9uRmlsdGVyKCl7dGhpcy5t''@;'; put 'put ''ZXRhT2JqZWN0QXR0cmlidXRlcz1bXSx0aGlzLmhlbHBlclNlcnZpY2UubWV0YU9iamVjdE9uRmlsdGVyKHRoaXMubWV0YU9iamVjdExpc3QsdGhpcy5tZXRhT2JqZWN0U2VhcmNoLCJOQU1FIiksdGhpcy5nZXRNZXRhT2JqZWN0QXR0cmlidXRlcyh0aGlzLm1ldGFPYmplY3RTaXplKSxLbi5t''@;'; put 'put ''ZXRhZGF0YS5tZXRhT2JqZWN0U2VhcmNoPXRoaXMubWV0YU9iamVjdFNlYXJjaH1nZXRNZXRhT2JqZWN0QXR0cmlidXRlcyhhKXtpZih2b2lkIDAhPT10aGlzLm1ldGFPYmplY3RMaXN0JiZ0aGlzLm1ldGFPYmplY3RMaXN0Lmxlbmd0aD5hKXtsZXQgZD0wLGg9LTE7Zm9yKGxldCBmPTA7Zjx0''@;'; put 'put ''aGlzLm1ldGFPYmplY3RMaXN0Lmxlbmd0aDtmKyspaWYoKHZvaWQgMD09PXRoaXMubWV0YU9iamVjdExpc3RbZl0uaGlkZGVufHwhMT09PXRoaXMubWV0YU9iamVjdExpc3RbZl0uaGlkZGVuKSYmZCsrLGQ9PT1hKXtoPWY7YnJlYWt9dGhpcy5tZXRhT2JqZWN0U2hvd0xpc3Q9LTEhPT1oP3Ro''@;'; put 'put ''aXMubWV0YU9iamVjdExpc3Quc2xpY2UoMCxoKTp0aGlzLm1ldGFPYmplY3RMaXN0fWVsc2UgdGhpcy5tZXRhT2JqZWN0U2hvd0xpc3Q9dGhpcy5tZXRhT2JqZWN0TGlzdH1wYW5lbENoYW5nZShhLGQpe3RoaXMuZGVib3VuY2V8fCh0aGlzLm1ldGFPYmplY3RPbkNsaWNrKGQuSUQsZCksdGhp''@;'; put 'put ''cy5kZWJvdW5jZT0hMCxzZXRUaW1lb3V0KCgpPT57dGhpcy5kZWJvdW5jZT0hMX0sNjAwKSl9dXBkYXRlU2VsZWN0ZWRSZXBvc2l0b3J5KCl7S24ubWV0YWRhdGEuc2VsZWN0ZWRSZXBvc2l0b3J5PXRoaXMucmVwb3NpdG9yeX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0''@;'; put 'put ''dXJuIG5ldyhkfHxjKShHZSh2YyksR2UoR3MpLEdlKFN1KSxHZShmaCksR2UoTHMpLEdlKEN1KSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtbWV0YWRhdGEiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjE3LHZh''@;'; put 'put ''cnM6OCxjb25zdHM6W1sic2VhcmNoTGliVHJlZUlucHV0IiwiIl0sWyJzZWFyY2hPYmpUcmVlSW5wdXQiLCIiXSxbInBhZ2luYXRpb24iLCIiXSxbMSwicmVwby1kcm9wZG93biJdLFsiY2xyU2VsZWN0IiwiIiwiaWQiLCJyZXBvc2l0b3J5IiwzLCJuZ01vZGVsQ2hhbmdlIiwiY2hhbmdlIiwi''@;'; put 'put ''bmdNb2RlbCJdLFszLCJ2YWx1ZSIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJjbGFzcyIsInNlYXJjaC1ub2RlIiw0LCJuZ0lmIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJjb250ZW50LWFyZWEiXSxbMSwiY2FyZCIsImJhY2tncm91bmQtdHJhbnNwYXJlbnQtaSJdLFsxLCJjb2xvci1n''@;'; put 'put ''cmF5Il0sWyJjbGFzcyIsIm5vLXRhYmxlLXNlbGVjdGVkIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImxvYWRpbmdTcGlubmVyIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci1yb3cgY2xyLWZsZXgtZ3Jvdy0xIiw0LCJuZ0lmIl0sWzMsInZhbHVlIl0sWzEsInNlYXJjaC1ub2RlIl0sWzEsInRyZWUt''@;'; put 'put ''c2VhcmNoLXdyYXBwZXIiXSxbImFwcFN0ZWFsRm9jdXMiLCIiLCJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwic2VhcmNoIFNBUyBUeXBlcyIsIm5hbWUiLCJpbnB1dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsMywibmdNb2RlbENoYW5nZSIsImtleXVwIiwibmdNb2RlbCJdLFsic2hhcGUi''@;'; put 'put ''LCJzZWFyY2giLDQsIm5nSWYiXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInNlYXJjaCJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siXSxbMywiY2xyRXhwYW5kZWQiLCJjbHJMb2FkaW5nIiwiY2xpY2siLCJjbHJFeHBhbmRlZENoYW5nZSIsNCwi''@;'; put 'put ''bmdJZiJdLFszLCJjbGljayIsImNsckV4cGFuZGVkQ2hhbmdlIiwiY2xyRXhwYW5kZWQiLCJjbHJMb2FkaW5nIl0sWzEsIm0tMCIsImN1cnNvci1wb2ludGVyIiwzLCJjbGljayJdLFsic2hhcGUiLCJibG9jayJdLFsxLCJuby10YWJsZS1zZWxlY3RlZCJdLFsic2hhcGUiLCJ3YXJuaW5nLXN0''@;'; put 'put ''YW5kYXJkIiwic2l6ZSIsIjYwIiwxLCJpcy1pbmZvIiwiaWNvbi1kYy1maWxsIl0sWyJjZHMtdGV4dCIsInNlY3Rpb24iLDEsInRleHQtY2VudGVyIiwiY29sb3ItZ3JheSIsIm10LTEwIl0sWzEsImxvYWRpbmdTcGlubmVyIl0sWzEsInNwaW5uZXIiXSxbNCwibmdJZiJdLFsxLCJjbHItcm93''@;'; put 'put ''IiwiY2xyLWZsZXgtZ3Jvdy0xIl0sWzEsImNsci1jb2wtNiJdLFsiY2xhc3MiLCJzZWFyY2gtaW5wdXQiLDQsIm5nSWYiXSxbImNsYXNzIiwib2JqZWN0cy1jb2wiLDQsIm5nSWYiXSxbMSwiY2xyLWNvbC02IiwidGV4dC1jZW50ZXIiXSxbImNsYXNzIiwiZGF0YWdyaWQtY3VzdG9tLWZvb3Rl''@;'; put 'put ''ciIsNCwibmdJZiJdLFsxLCJzZWFyY2gtaW5wdXQiXSxbImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJzZWFyY2giLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCIsIm5nTW9kZWwiXSxbMSwib2JqZWN0cy1jb2wiXSxbMywi''@;'; put 'put ''Y2xyQWNjb3JkaW9uUGFuZWxPcGVuQ2hhbmdlIiw0LCJuZ0lmIl0sWzMsImNsckFjY29yZGlvblBhbmVsT3BlbkNoYW5nZSJdLFsic2hhcGUiLCJyYWNrLXNlcnZlciJdLFsxLCJmbG9hdC1yaWdodCJdLFs0LCJjbHJJZkV4cGFuZGVkIl0sWzMsImNsckxhenkiLDQsIm5nSWYiXSxbMywiY2xy''@;'; put 'put ''TGF6eSJdLFszLCJjbHJFeHBhbmRhYmxlIiw0LCJjbHJSZWN1cnNpdmVGb3IiLCJjbHJSZWN1cnNpdmVGb3JPZiIsImNsclJlY3Vyc2l2ZUZvckdldENoaWxkcmVuIl0sWzMsImNsckV4cGFuZGFibGUiXSxbMSwiZnVsbC13aWR0aCJdLFsic2hhcGUiLCJyYWNrLXNlcnZlciIsNCwibmdJZiJd''@;'; put 'put ''LFsic2hhcGUiLCJibG9jayIsNCwibmdJZiJdLFsiY2xhc3MiLCJmbG9hdC1yaWdodCBvYmplY3QtdXJpIiw0LCJuZ0lmIl0sWzEsImZsb2F0LXJpZ2h0Iiwib2JqZWN0LXVyaSJdLFsxLCJjb2xzLWhlYWQiXSxbMSwib2JqZWN0LXRleHQiXSxbMSwibS0wIiwid29yZC1icmVhayIsIm1yLTIw''@;'; put 'put ''Il0sWzEsImZsb2F0LXJpZ2h0IiwibWwtMyJdLFsxLCJkYXRhZ3JpZC1jdXN0b20tZm9vdGVyIl0sWzMsImNsckRnU3RyaW5nRmlsdGVyIl0sWzQsImNsckRnSXRlbXMiLCJjbHJEZ0l0ZW1zT2YiXSxbMywiY2xyRGdQYWdlU2l6ZSJdLFszLCJjbHJQYWdlU2l6ZU9wdGlvbnMiXV0sdGVtcGxh''@;'; put 'put ''dGU6ZnVuY3Rpb24oZCxoKXsxJmQmJihkZSgwLCJhcHAtc2lkZWJhciIpKDEsImRpdiIsMykoMiwiY2xyLXNlbGVjdC1jb250YWluZXIiKSgzLCJsYWJlbCIpLExlKDQsIk1ldGFkYXRhIFJlcG9zaXRvcnkiKSxoZSgpLGRlKDUsInNlbGVjdCIsNCksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0''@;'; put 'put ''aW9uKHYpe3JldHVybiBtaShoLnJlcG9zaXRvcnksdil8fChoLnJlcG9zaXRvcnk9diksdn0pLEZ0KCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIGgudXBkYXRlU2VsZWN0ZWRSZXBvc2l0b3J5KCl9KSxndCg2LFRUdCwyLDIsIm9wdGlvbiIsNSksaGUoKSgpKCksZGUoNywiY2xyLXRyZWUi''@;'; put 'put ''KSxndCg4LERUdCw2LDMsImNsci10cmVlLW5vZGUiLDYpKDksUlR0LDIsMSwibmctY29udGFpbmVyIiw3KSxoZSgpKCksZGUoMTAsImRpdiIsOCkoMTEsImRpdiIsOSkoMTIsImgzIiwxMCksTGUoMTMpLGhlKCksZ3QoMTQsTFR0LDQsMCwiZGl2IiwxMSkoMTUsSFR0LDQsMSwiZGl2IiwxMiko''@;'; put 'put ''MTYsckF0LDEwLDUsImRpdiIsMTMpLGhlKCkoKSksMiZkJiYoZmUoNSkscGkoIm5nTW9kZWwiLGgucmVwb3NpdG9yeSksZmUoKSxNZSgibmdGb3JPZiIsaC5yZXBvc2l0b3JpZXMpLGZlKDIpLE1lKCJuZ0lmIixoLm1ldGFEYXRhTGlzdCksZmUoKSxNZSgibmdGb3JPZiIsaC5tZXRhRGF0YUxp''@;'; put 'put ''c3QpLGZlKDQpLHdyKGguYXNzb1R5cGVTZWxlY3RlZCksZmUoKSxNZSgibmdJZiIsIWgubG9hZGluZyYmIWgubWV0YU9iamVjdExpc3QpLGZlKCksTWUoIm5nSWYiLGgubG9hZGluZyksZmUoKSxNZSgibmdJZiIsaC5zaG93RGF0YSkpfSxkZXBlbmRlbmNpZXM6W25zLGJhLEEyLGsyLHFsLFQy''@;'; put 'put ''LG5sLCRzLEFtLFFmLFI3LGNPLEp5LFh4LHVPLEVtLEhkZSxTcCxMNyx0XyxUbSxrNyx4bSxENyxkRyxFaCxQZCxaZGUsSGwsajAsQjFlLGRzLFoxLEU3LCR5LEUxZSxGTCxBMWUsVDFlLGsxZSxEWSxpNCxyNCxFTV0sZW5jYXBzdWxhdGlvbjoyfSl9c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1h''@;'; put 'put ''bih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiBpQXQoYyxsKXsxJmMmJkd0KDAsImNsci1pY29uIiwxMil9ZnVuY3Rpb24gYUF0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLWljb24iLDEz''@;'; put 'put ''KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSgyKTtyZXR1cm4gaC5yb2xlU2VhcmNoPSIiLEN0KGgucm9sZUxpc3RPbkZpbHRlcigpKX0pLGhlKCl9fWZ1bmN0aW9uIG9BdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci10cmVlLW5vZGUiLDcpKDEs''@;'; put 'put ''ImRpdiIsOCkoMiwiaW5wdXQiLDksMCksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9UmUoKTtyZXR1cm4gbWkoZi5yb2xlU2VhcmNoLGgpfHwoZi5yb2xlU2VhcmNoPWgpLEN0KGgpfSksRnQoImtleXVwIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChS''@;'; put 'put ''ZSgpLnJvbGVMaXN0T25GaWx0ZXIoKSl9KSxoZSgpLGd0KDQsaUF0LDEsMCwiY2xyLWljb24iLDEwKSg1LGFBdCwxLDAsImNsci1pY29uIiwxMSksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1oYSgzKSxkPVJlKCk7ZmUoMikscGkoIm5nTW9kZWwiLGQucm9sZVNlYXJjaCksZmUoMiksTWUoIm5n''@;'; put 'put ''SWYiLGEudmFsdWUubGVuZ3RoPDEpLGZlKCksTWUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPjApfX1mdW5jdGlvbiBzQXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItdHJlZS1ub2RlIiwxNSksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9UmUoKS4kaW1w''@;'; put 'put ''bGljaXQ7cmV0dXJuIEN0KFJlKCkucm9sZU9uQ2xpY2soaCkpfSksZGUoMSwicCIsMTYpLEd0KDIsImNsci1pY29uIiwxNyksTGUoMyksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1SZSgpLiRpbXBsaWNpdCxkPVJlKCk7VHIoImFjdGl2ZSIsYS5ST0xFVVJJPT09ZC5yb2xlVXJpKSxmZSgzKSxJ''@;'; put 'put ''cigiICIsYS5ST0xFTkFNRSwiICIpfX1mdW5jdGlvbiBsQXQoYyxsKXtpZigxJmMmJihzaSgwKSxndCgxLHNBdCw0LDMsImNsci10cmVlLW5vZGUiLDE0KSxsaSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoKSxNZSgibmdJZiIsIWEuaGlkZGVuKX19ZnVuY3Rpb24gY0F0KGMsbCl7''@;'; put 'put ''MSZjJiYoZGUoMCwiZGl2IiwxOCkoMSwic3BhbiIsMTkpLExlKDIsIiBMb2FkaW5nLi4uICIpLGhlKCkoKSl9ZnVuY3Rpb24gdUF0KGMsbCl7MSZjJiYoZGUoMCwiaDUiKSxMZSgxLCJObyBNZW1iZXJzIFByZXNlbnQiKSxoZSgpKX1mdW5jdGlvbiBkQXQoYyxsKXtpZigxJmMmJihkZSgwLCJ0''@;'; put 'put ''ciIsMzIpKDEsInRkIiwzMCksTGUoMiksaGUoKSxkZSgzLCJ0ZCIsMzApLExlKDQpLGhlKCksZGUoNSwidGQiLDMwKSxMZSg2KSxoZSgpLGRlKDcsInRkIiwzMCksTGUoOCksaGUoKSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7TWUoInJvdXRlckxpbmsiLCIvdmlldy91c2VybmF2L3Vz''@;'; put 'put ''ZXJzLyIrYS5VUklNRU0pLGZlKDIpLHdyKGEuTUVNQkVSTkFNRSksZmUoMiksd3IoYS5FTUFJTCksZmUoMiksd3IoYS5NRU1CRVJDUkVBVEVEKSxmZSgyKSx3cihhLk1FTUJFUlVQREFURUQpfX1mdW5jdGlvbiBoQXQoYyxsKXtpZigxJmMmJihkZSgwLCJ0YWJsZSIsMjgpKDEsInRoZWFkIiko''@;'; put 'put ''MiwidHIiKSgzLCJ0ZCIsMjkpKDQsImIiKSxMZSg1LCJOQU1FIiksaGUoKSgpLGRlKDYsInRkIiwyOSkoNywiYiIpLExlKDgsIkVNQUlMIiksaGUoKSgpLGRlKDksInRkIiwyOSkoMTAsImIiKSxMZSgxMSwiQ1JFQVRFRCIpLGhlKCkoKSxkZSgxMiwidGQiLDMwKSgxMywiYiIpLExlKDE0LCJV''@;'; put 'put ''UERBVEVEIiksaGUoKSgpKCkoKSxkZSgxNSwidGJvZHkiKSxndCgxNixkQXQsOSw1LCJ0ciIsMzEpLGhlKCkoKSksMiZjKXtjb25zdCBhPVJlKDIpO2ZlKDE2KSxNZSgibmdGb3JPZiIsYS5yb2xlTWVtYmVycyl9fWZ1bmN0aW9uIGZBdChjLGwpezEmYyYmKGRlKDAsImg1IiksTGUoMSwiTm8g''@;'; put 'put ''R3JvdXBzIFByZXNlbnQgISIpLGhlKCkpfWZ1bmN0aW9uIHBBdChjLGwpe2lmKDEmYyYmKGRlKDAsInRyIiwzMikoMSwidGQiLDMwKSxMZSgyKSxoZSgpLGRlKDMsInRkIiwzMCksTGUoNCksaGUoKSxkZSg1LCJ0ZCIsMzApLExlKDYpLGhlKCksZGUoNywidGQiLDMwKSxMZSg4KSxoZSgpKCkp''@;'; put 'put ''LDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtNZSgicm91dGVyTGluayIsIi92aWV3L3VzZXJuYXYvZ3JvdXBzLyIrYS5VUklNRU0pLGZlKDIpLHdyKGEuTUVNQkVSTkFNRSksZmUoMiksd3IoYS5FTUFJTCksZmUoMiksd3IoYS5NRU1CRVJDUkVBVEVEKSxmZSgyKSx3cihhLk1FTUJFUlVQREFU''@;'; put 'put ''RUQpfX1mdW5jdGlvbiBnQXQoYyxsKXtpZigxJmMmJihkZSgwLCJ0YWJsZSIsMjgpKDEsInRoZWFkIikoMiwidHIiKSgzLCJ0ZCIsMjkpKDQsImIiKSxMZSg1LCJOQU1FIiksaGUoKSgpLGRlKDYsInRkIiwyOSkoNywiYiIpLExlKDgsIkVNQUlMIiksaGUoKSgpLGRlKDksInRkIiwyOSkoMTAs''@;'; put 'put ''ImIiKSxMZSgxMSwiQ1JFQVRFRCIpLGhlKCkoKSxkZSgxMiwidGQiLDMwKSgxMywiYiIpLExlKDE0LCJVUERBVEVEIiksaGUoKSgpKCkoKSxkZSgxNSwidGJvZHkiKSxndCgxNixwQXQsOSw1LCJ0ciIsMzEpLGhlKCkoKSksMiZjKXtjb25zdCBhPVJlKDIpO2ZlKDE2KSxNZSgibmdGb3JPZiIs''@;'; put 'put ''YS5yb2xlR3JvdXBzKX19ZnVuY3Rpb24gbUF0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IikoMSwiZGl2IiwyMCkoMiwiZGl2IiwyMSkoMywidGFibGUiLDIyKSg0LCJ0Ym9keSIpKDUsInRyIikoNiwidGQiLDIzKSg3LCJwIiwyNCkoOCwiYiIpLExlKDkpLGhlKCkoKSgpKCksZGUoMTAsInRy''@;'; put 'put ''IikoMTEsInRkIiwyMykoMTIsImkiKSxMZSgxMyksaGUoKSgpKCkoKSgpKCkoKSxkZSgxNCwiZGl2IiwyMCkoMTUsImRpdiIsMjEpKDE2LCJkaXYiLDI1KSgxNywiZGl2IikoMTgsImgzIiksTGUoMTkpLGhlKCksZ3QoMjAsdUF0LDIsMCwiaDUiLDYpLGRlKDIxLCJkaXYiLDI2KSxndCgyMixo''@;'; put 'put ''QXQsMTcsMSwidGFibGUiLDI3KSxoZSgpKCksR3QoMjMsImhyIiksZGUoMjQsImRpdiIpKDI1LCJoMyIpLExlKDI2KSxoZSgpLGd0KDI3LGZBdCwyLDAsImg1Iiw2KSxkZSgyOCwiZGl2IiwyNiksZ3QoMjksZ0F0LDE3LDEsInRhYmxlIiwyNyksaGUoKSgpLEd0KDMwLCJiciIpLGhlKCkoKSgp''@;'; put 'put ''KCkpLDImYyl7Y29uc3QgYT1SZSgpO2ZlKDkpLHdyKGEucm9sZU5hbWUpLGZlKDQpLHdyKGEucm9sZURlc2MpLGZlKDYpLElyKCJNRU1CRVJTICgiLGEucm9sZU1lbWJlcnNDb3VudCwiKSIpLGZlKCksTWUoIm5nSWYiLDA9PWEucm9sZU1lbWJlcnNDb3VudCksZmUoMiksTWUoIm5nSWYiLDAh''@;'; put 'put ''PWEucm9sZU1lbWJlcnNDb3VudCksZmUoNCksSXIoIkdyb3VwcyAoIixhLnJvbGVHcm91cHNDb3VudCwiKSIpLGZlKCksTWUoIm5nSWYiLDA9PWEucm9sZUdyb3Vwc0NvdW50KSxmZSgyKSxNZSgibmdJZiIsMCE9YS5yb2xlR3JvdXBzQ291bnQpfX1sZXQgUzdlPSgoKT0+e2NsYXNzIGN7Y29u''@;'; put 'put ''c3RydWN0b3IoYSxkLGgsZix2KXt0aGlzLnNhc1NlcnZpY2U9YSx0aGlzLmhlbHBlclNlcnZpY2U9ZCx0aGlzLnJvdXRlcj1oLHRoaXMubG9jYXRpb249Zix0aGlzLnJvdXRlPXYsdGhpcy5yb2xlU2VhcmNoPSIiLHRoaXMucm9sZVVyaT0iIix0aGlzLnJvbGVOYW1lPSIiLHRoaXMucm9sZURl''@;'; put 'put ''c2M9IiIsdGhpcy5wYXJhbVByZXNlbnQ9ITEsdGhpcy5wYXJhbVVSST0iIix0aGlzLmxvYWRpbmc9ITF9bmdPbkluaXQoKXtLbi52aWV3ZXIuY3VycmVudFNlbGVjdGlvbj0idmlldy91c2VybmF2L3JvbGVzIix2b2lkIDAhPT10aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy51cmkmJih0aGlz''@;'; put 'put ''LnBhcmFtUHJlc2VudD0hMCx0aGlzLnBhcmFtVVJJPXRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLnVyaSksS24udXNlcm5hdi5yb2xlTGlzdCYmIXRoaXMucGFyYW1QcmVzZW50Pyh0aGlzLnJvbGVzPUtuLnVzZXJuYXYucm9sZUxpc3QsdGhpcy5yb2xlU2VhcmNoPUtuLnVzZXJuYXYucm9s''@;'; put 'put ''ZVNlYXJjaCk6dm9pZCAwPT09S24udXNlcm5hdi5yb2xlTGlzdD8odGhpcy5sb2FkaW5nPSEwLHRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJ1c2VybmF2L3VzZXJyb2xlcyIsbnVsbCkudGhlbihhPT57aWYodGhpcy5sb2FkaW5nPSExLHRoaXMucm9sZXM9YS5hZGFwdGVyUmVzcG9uc2Uucm9s''@;'; put 'put ''ZXMsS24udXNlcm5hdi5yb2xlTGlzdD1hLmFkYXB0ZXJSZXNwb25zZS5yb2xlcyx0aGlzLnBhcmFtUHJlc2VudCYmdm9pZCAwIT09dGhpcy5yb2xlcyl7bGV0IGQ9dGhpcy5maW5kUm9sZSh0aGlzLnJvbGVzLHRoaXMucGFyYW1VUkkpOyExIT09ZCYmKHRoaXMubG9hZGluZz0hMCx0aGlzLnNh''@;'; put 'put ''c1NlcnZpY2UucmVxdWVzdCgidXNlcm5hdi91c2VybWVtYmVyc2J5cm9sZSIse2l3YW50Olt7cm9sZWlkOnRoaXMucGFyYW1VUkl9XX0pLnRoZW4oZj0+e3RoaXMubG9hZGluZz0hMSx0aGlzLnJvbGVNZW1iZXJzPWYuYWRhcHRlclJlc3BvbnNlLnNhc21lbWJlcnMsdGhpcy5yb2xlTWVtYmVy''@;'; put 'put ''c0NvdW50PWYuYWRhcHRlclJlc3BvbnNlLnNhc21lbWJlcnMubGVuZ3RoLHRoaXMucm9sZUdyb3Vwcz1mLmFkYXB0ZXJSZXNwb25zZS5zYXNncm91cHMsdGhpcy5yb2xlR3JvdXBzQ291bnQ9Zi5hZGFwdGVyUmVzcG9uc2Uuc2FzZ3JvdXBzLmxlbmd0aCx0aGlzLnJvbGVVcmk9ZC5ST0xFVVJJ''@;'; put 'put ''LHRoaXMucm9sZU5hbWU9ZC5ST0xFTkFNRSx0aGlzLnJvbGVEZXNjPWQuUk9MRURFU0N9KSl9fSkpOih0aGlzLnJvbGVzPUtuLnVzZXJuYXYucm9sZUxpc3QsdGhpcy5yb2xlU2VhcmNoPUtuLnVzZXJuYXYucm9sZVNlYXJjaCx0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgidXNlcm5hdi91c2Vy''@;'; put 'put ''cm9sZXMiLG51bGwpLnRoZW4oYT0+e2lmKHRoaXMucm9sZXM9YS5hZGFwdGVyUmVzcG9uc2Uucm9sZXMsS24udXNlcm5hdi5yb2xlTGlzdD1hLmFkYXB0ZXJSZXNwb25zZS5yb2xlcyx0aGlzLnBhcmFtUHJlc2VudCYmdm9pZCAwIT09dGhpcy5yb2xlcyl7bGV0IGQ9dGhpcy5maW5kUm9sZSh0''@;'; put 'put ''aGlzLnJvbGVzLHRoaXMucGFyYW1VUkkpOyExIT09ZCYmKHRoaXMubG9hZGluZz0hMCx0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgidXNlcm5hdi91c2VybWVtYmVyc2J5cm9sZSIse2l3YW50Olt7cm9sZWlkOnRoaXMucGFyYW1VUkl9XX0pLnRoZW4oZj0+e3RoaXMubG9hZGluZz0hMSx0aGlz''@;'; put 'put ''LnJvbGVNZW1iZXJzPWYuYWRhcHRlclJlc3BvbnNlLnNhc21lbWJlcnMsdGhpcy5yb2xlTWVtYmVyc0NvdW50PWYuYWRhcHRlclJlc3BvbnNlLnNhc21lbWJlcnMubGVuZ3RoLHRoaXMucm9sZUdyb3Vwcz1mLmFkYXB0ZXJSZXNwb25zZS5zYXNncm91cHMsdGhpcy5yb2xlR3JvdXBzQ291bnQ9''@;'; put 'put ''Zi5hZGFwdGVyUmVzcG9uc2Uuc2FzZ3JvdXBzLmxlbmd0aCx0aGlzLnJvbGVVcmk9ZC5ST0xFVVJJLHRoaXMucm9sZU5hbWU9ZC5ST0xFTkFNRSx0aGlzLnJvbGVEZXNjPWQuUk9MRURFU0N9KSl9fSkpfXJvbGVMaXN0T25GaWx0ZXIoKXt0aGlzLmhlbHBlclNlcnZpY2UubGlicmFyeU9uRmls''@;'; put 'put ''dGVyKHRoaXMucm9sZXMsdGhpcy5yb2xlU2VhcmNoLCJST0xFTkFNRSIpLEtuLnVzZXJuYXYucm9sZVNlYXJjaD10aGlzLnJvbGVTZWFyY2h9cm9sZU9uQ2xpY2soYSl7dGhpcy5sb2FkaW5nPSEwO2xldCBkPXRoaXMucm91dGVyLnVybDt0aGlzLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZSh0aGlz''@;'; put 'put ''LnBhcmFtUHJlc2VudD9kLnNsaWNlKDAsZC5sYXN0SW5kZXhPZigiLyIpKSsiLyIrZW5jb2RlVVJJKGEuUk9MRVVSSSk6ZCsiLyIrZW5jb2RlVVJJKGEuUk9MRVVSSSkpLHRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJ1c2VybmF2L3VzZXJtZW1iZXJzYnlyb2xlIix7aXdhbnQ6W3tyb2xlaWQ6''@;'; put 'put ''YS5ST0xFVVJJfV19KS50aGVuKGY9Pnt0aGlzLmxvYWRpbmc9ITEsdGhpcy5yb2xlTWVtYmVycz1mLmFkYXB0ZXJSZXNwb25zZS5zYXNtZW1iZXJzLHRoaXMucm9sZU1lbWJlcnNDb3VudD1mLmFkYXB0ZXJSZXNwb25zZS5zYXNtZW1iZXJzLmxlbmd0aCx0aGlzLnJvbGVHcm91cHM9Zi5hZGFw''@;'; put 'put ''dGVyUmVzcG9uc2Uuc2FzZ3JvdXBzLHRoaXMucm9sZUdyb3Vwc0NvdW50PWYuYWRhcHRlclJlc3BvbnNlLnNhc2dyb3Vwcy5sZW5ndGgsdGhpcy5yb2xlVXJpPWEuUk9MRVVSSSx0aGlzLnJvbGVOYW1lPWEuUk9MRU5BTUUsdGhpcy5yb2xlRGVzYz1hLlJPTEVERVNDfSl9ZmluZFJvbGUoYSxk''@;'; put 'put ''KXtsZXQgaD0hMTtyZXR1cm4gYS5mb3JFYWNoKGY9PntmLlJPTEVVUkk9PT1kJiYoaD1mKX0pLGh9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoR3MpLEdlKFN1KSxHZShMcyksR2UoZmgpLEdlKEN1KSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNt''@;'; put 'put ''cD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtcm9sZSJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6Nyx2YXJzOjQsY29uc3RzOltbInNlYXJjaExpYlRyZWVJbnB1dCIsIiJdLFsxLCJzaWRlYmFyLWhlaWdodCJdLFsiY2xhc3MiLCJzZWFyY2gtbm9kZSIs''@;'; put 'put ''NCwibmdJZiJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiY29udGVudC1hcmVhIl0sWyJjbGFzcyIsImxvYWRpbmdTcGlubmVyIiw0LCJuZ0lmIl0sWzQsIm5nSWYiXSxbMSwic2VhcmNoLW5vZGUiXSxbMSwidHJlZS1zZWFyY2gtd3JhcHBlciJdLFsiYXBwU3RlYWxGb2N1cyIsIiIsImNs''@;'; put 'put ''cklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJGaWx0ZXIgYnkgUm9sZXMiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCIsIm5nTW9kZWwiXSxbInNoYXBlIiwic2VhcmNoIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJj''@;'; put 'put ''bGljayIsNCwibmdJZiJdLFsic2hhcGUiLCJzZWFyY2giXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIl0sWzMsImFjdGl2ZSIsImNsaWNrIiw0LCJuZ0lmIl0sWzMsImNsaWNrIl0sWzEsIm0tMCIsImN1cnNvci1wb2ludGVyIiwibGlzdC1wYWRkaW5nIl0sWyJzaGFwZSIsImJsb2Nrcy1n''@;'; put 'put ''cm91cCJdLFsxLCJsb2FkaW5nU3Bpbm5lciJdLFsxLCJzcGlubmVyIl0sWzEsImNsci1yb3ciXSxbMSwiY2xyLWNvbC04Il0sWzEsInRhYmxlIiwicm9sZS1pbmZvIl0sWzEsImxlZnQiXSxbMSwicm9sZS1pbmZvLXRleHQiXSxbMSwiY2FyZCIsInJvbGUtZGF0YSJdLFsxLCJ0YWJsZS1jb250''@;'; put 'put ''YWluZXIiXSxbImNsYXNzIiwidGFibGUgbWVtYmVyLXRhYmxlIiw0LCJuZ0lmIl0sWzEsInRhYmxlIiwibWVtYmVyLXRhYmxlIl0sWzEsIndpZHRoLTI1Il0sWzEsIiJdLFszLCJyb3V0ZXJMaW5rIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMywicm91dGVyTGluayJdXSx0ZW1wbGF0ZTpmdW5j''@;'; put 'put ''dGlvbihkLGgpezEmZCYmKGRlKDAsImFwcC1zaWRlYmFyIiwxKSgxLCJjbHItdHJlZSIpLGd0KDIsb0F0LDYsMywiY2xyLXRyZWUtbm9kZSIsMikoMyxsQXQsMiwxLCJuZy1jb250YWluZXIiLDMpLGhlKCkoKSxkZSg0LCJkaXYiLDQpLGd0KDUsY0F0LDMsMCwiZGl2Iiw1KSg2LG1BdCwzMSw4''@;'; put 'put ''LCJkaXYiLDYpLGhlKCkpLDImZCYmKGZlKDIpLE1lKCJuZ0lmIixoLnJvbGVzKSxmZSgpLE1lKCJuZ0Zvck9mIixoLnJvbGVzKSxmZSgyKSxNZSgibmdJZiIsaC5sb2FkaW5nKSxmZSgpLE1lKCJuZ0lmIixoLnJvbGVNZW1iZXJzJiYhaC5sb2FkaW5nKSl9LGRlcGVuZGVuY2llczpbbnMsYmEs''@;'; put 'put ''YzEscWwsbmwsJHMsRWgsUGQsSGwsWjEsaTQscjRdLHN0eWxlczpbIjo6bmctZGVlcCBib2R5W2Nkcy10aGVtZT1kYXJrXSAucm9sZXtiYWNrZ3JvdW5kLWNvbG9yOiMzMTQzNTE7Ym9yZGVyLWNvbG9yOiMzMTQzNTF9OjpuZy1kZWVwIGJvZHlbY2RzLXRoZW1lPWRhcmtdIC5yb2xlLWRhdGF7''@;'; put 'put ''YmFja2dyb3VuZC1jb2xvcjojMzE0MzUxO2JvcmRlci1jb2xvcjojMzE0MzUxfTo6bmctZGVlcCBib2R5W2Nkcy10aGVtZT1kYXJrXSAubWVtYmVyLXRhYmxlIHRib2R5IHRyOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzI5NDA0Yn06Om5nLWRlZXAgYm9keVtjZHMtdGhlbWU9bGlnaHRdIC5y''@;'; put 'put ''b2xlLWluZm97YmFja2dyb3VuZC1jb2xvcjojZjlmOWY5O2JvcmRlci1jb2xvcjojYTdhN2E3O2JveC1zaGFkb3c6MCAycHggNXB4ICNkYWQ3ZDd9OjpuZy1kZWVwIGJvZHlbY2RzLXRoZW1lPWxpZ2h0XSAucm9sZS1kYXRhe2JhY2tncm91bmQtY29sb3I6I2Y5ZjlmOTtib3JkZXItY29sb3I6''@;'; put 'put ''I2E3YTdhNztib3gtc2hhZG93OjAgMnB4IDVweCAjZGFkN2Q3fTo6bmctZGVlcCBib2R5W2Nkcy10aGVtZT1saWdodF0gLm1lbWJlci10YWJsZSB0Ym9keSB0cjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNlNmU2ZTZ9LnNpZGViYXItaGVpZ2h0e2hlaWdodDoxMDAlfS5yb2xlLWluZm8tdGV4''@;'; put 'put ''dHtkaXNwbGF5OmlubGluZTtmb250LXNpemU6MjBweH0ucm9sZS1pbmZve2JvcmRlcjoxcHggc29saWQ7Ym9yZGVyLXJhZGl1czozcHh9LnJvbGUtaW5mbyB0ZHt0ZXh0LWFsaWduOmNlbnRlcn0ucm9sZS1kYXRhe2JvcmRlcjoxcHggc29saWQ7Ym9yZGVyLXJhZGl1czozcHh9LnJvbGUtZGF0''@;'; put 'put ''YXttaW4taGVpZ2h0OnVuc2V0fS5yb2xlLWRhdGEgaDMsLnJvbGUtZGF0YSBoNXt0ZXh0LWFsaWduOmNlbnRlcn0ubWVtYmVyLXRhYmxle3dpZHRoOjEwMCV9Lm1lbWJlci10YWJsZSB0Ym9keSB0cjpob3ZlcntjdXJzb3I6cG9pbnRlcn0udGFibGUtY29udGFpbmVye292ZXJmbG93LXk6c2Ny''@;'; put 'put ''b2xsO21heC1oZWlnaHQ6NzAwcHh9QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzY4cHgpey5yb2xlLWRhdGF7bWluLWhlaWdodDp1bnNldCFpbXBvcnRhbnR9fVxuIl0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKSx2QXQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigp''@;'; put 'put ''e31uZ09uSW5pdCgpe31zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC11c2VybmF2LXJvdXRlIl1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIi''@;'; put 'put ''XSxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmR3QoMCwicm91dGVyLW91dGxldCIpfSxkZXBlbmRlbmNpZXM6W3JnXSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpLGJBdD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7fW5nT25Jbml0KCl7fW5n''@;'; put 'put ''T25EZXN0cm95KCl7fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLXZpZXctcm91dGUiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRl''@;'; put 'put ''Y2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiZHdCgwLCJyb3V0ZXItb3V0bGV0Iil9LGRlcGVuZGVuY2llczpbcmddLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24geUF0KGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsMTIpfWZ1bmN0aW9u''@;'; put 'put ''IF9BdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci1pY29uIiwxMyksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9UmUoMik7cmV0dXJuIGgudXNlclNlYXJjaD0iIixDdChoLnVzZXJMaXN0T25GaWx0ZXIoKSl9KSxoZSgpfX1mdW5jdGlvbiB3QXQoYyxs''@;'; put 'put ''KXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItdHJlZS1ub2RlIiw3KSgxLCJkaXYiLDgpKDIsImlucHV0Iiw5LDApLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPVJlKCk7cmV0dXJuIG1pKGYudXNlclNlYXJjaCxoKXx8KGYudXNlclNlYXJjaD1o''@;'; put 'put ''KSxDdChoKX0pLEZ0KCJrZXl1cCIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS51c2VyTGlzdE9uRmlsdGVyKCkpfSksaGUoKSxndCg0LHlBdCwxLDAsImNsci1pY29uIiwxMCkoNSxfQXQsMSwwLCJjbHItaWNvbiIsMTEpLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9aGEoMyksZD1S''@;'; put 'put ''ZSgpO2ZlKDIpLHBpKCJuZ01vZGVsIixkLnVzZXJTZWFyY2gpLGZlKDIpLE1lKCJuZ0lmIixhLnZhbHVlLmxlbmd0aDwxKSxmZSgpLE1lKCJuZ0lmIixhLnZhbHVlLmxlbmd0aD4wKX19ZnVuY3Rpb24gQ0F0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLXRyZWUtbm9kZSIs''@;'; put 'put ''MTUpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPVJlKCkuJGltcGxpY2l0O3JldHVybiBDdChSZSgpLnVzZXJPbkNsaWNrKGgpKX0pLGRlKDEsInAiLDE2KSxHdCgyLCJjbHItaWNvbiIsMTcpLExlKDMpLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9UmUoKS4kaW1wbGljaXQs''@;'; put 'put ''ZD1SZSgpO1RyKCJhY3RpdmUiLChudWxsPT1kLnVzZXJJbmZvP251bGw6ZC51c2VySW5mby5VUkkpPT09YS5VUkkpLGZlKDMpLElyKCIgIixhLk5BTUUsIiAiKX19ZnVuY3Rpb24gU0F0KGMsbCl7aWYoMSZjJiYoc2koMCksZ3QoMSxDQXQsNCwzLCJjbHItdHJlZS1ub2RlIiwxNCksbGkoKSks''@;'; put 'put ''MiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKCksTWUoIm5nSWYiLCFhLmhpZGRlbil9fWZ1bmN0aW9uIE1BdChjLGwpezEmYyYmKGRlKDAsImRpdiIsMTgpKDEsInNwYW4iLDE5KSxMZSgyLCIgTG9hZGluZy4uLiAiKSxoZSgpKCkpfWZ1bmN0aW9uIHhBdChjLGwpe2lmKDEmYyYmKHNpKDAp''@;'; put 'put ''LGRlKDEsInRyIikoMiwidGQiLDI3KSxMZSgzLCIgTWV0YWRhdGEgQ3JlYXRlZDogIiksZGUoNCwiYiIpLExlKDUpLGhlKCkoKSgpLGRlKDYsInRyIikoNywidGQiLDI3KSxMZSg4LCIgTWV0YWRhdGEgVXBkYXRlZDogIiksZGUoOSwiYiIpLExlKDEwKSxoZSgpKCkoKSxsaSgpKSwyJmMpe2Nv''@;'; put 'put ''bnN0IGE9UmUoMyk7ZmUoNSksd3IoYS51c2VySW5mby5NRVRBREFUQUNSRUFURUQpLGZlKDUpLHdyKGEudXNlckluZm8uTUVUQURBVEFVUERBVEVEKX19ZnVuY3Rpb24gRUF0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwyMSkoMSwiZGl2IiwyMikoMiwidGFibGUiLDI2KSgzLCJ0Ym9keSIp''@;'; put 'put ''KDQsInRyIikoNSwidGQiLDI3KSg2LCJwIiwyOCkoNywiYiIpLExlKDgpLGhlKCkoKSgpKCksZGUoOSwidHIiKSgxMCwidGQiLDI3KSgxMSwicCIsMjgpKDEyLCJiIiksTGUoMTMpLGhlKCkoKSgpKCksZ3QoMTQseEF0LDExLDIsIm5nLWNvbnRhaW5lciIsNiksaGUoKSgpKCkoKSksMiZjKXtj''@;'; put 'put ''b25zdCBhPVJlKDIpO2ZlKDgpLHdyKGEudXNlckluZm8uTkFNRSksZmUoNSksd3IoYS51c2VySW5mby5ESVNQTEFZTkFNRSksZmUoKSxNZSgibmdJZiIsYS5zZXJ2ZXJUeXBlPT09YS5TZXJ2ZXJUeXBlLlNhczkpfX1mdW5jdGlvbiBUQXQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDIxKSgx''@;'; put 'put ''LCJkaXYiLDIyKSgyLCJ0YWJsZSIsMjYpKDMsInRib2R5IikoNCwidHIiKSg1LCJ0ZCIsMjcpKDYsInAiLDI4KSg3LCJiIiksTGUoOCksaGUoKSgpKCkoKSxkZSg5LCJ0ciIpKDEwLCJ0ZCIsMjcpLExlKDExLCIgVXNlciBJRDogIiksZGUoMTIsImIiKSxMZSgxMyksaGUoKSgpKCksZGUoMTQs''@;'; put 'put ''InRyIikoMTUsInRkIiwyNyksTGUoMTYsIiBVc2VyIHByb3ZpZGVyIElEOiAiKSxkZSgxNywiYiIpLExlKDE4KSxoZSgpKCkoKSgpKCkoKSgpKSwyJmMpe2NvbnN0IGE9UmUoMik7ZmUoOCksd3IoYS51c2VySW5mby5OQU1FKSxmZSg1KSx3cihhLnVzZXJJbmZvLlVSSSksZmUoNSksd3IoYS51''@;'; put 'put ''c2VySW5mby5QUk9WSURFUil9fWZ1bmN0aW9uIEFBdChjLGwpezEmYyYmKGRlKDAsImg1IiksTGUoMSwiTm8gRW1haWxzIFByZXNlbnQiKSxoZSgpKX1mdW5jdGlvbiBrQXQoYyxsKXtpZigxJmMmJihkZSgwLCJ0ciIpKDEsInRkIiwzMSksTGUoMiksaGUoKSxkZSgzLCJ0ZCIsMzEpLExlKDQp''@;'; put 'put ''LGhlKCkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKDIpLHdyKGEuRU1BSUwpLGZlKDIpLHdyKGEuVFlQRSl9fWZ1bmN0aW9uIERBdChjLGwpe2lmKDEmYyYmKGRlKDAsInRhYmxlIiwyOSkoMSwidGhlYWQiKSgyLCJ0ciIpKDMsInRkIiwzMCkoNCwiYiIpLExlKDUsIkVNQUlMIiks''@;'; put 'put ''aGUoKSgpLGRlKDYsInRkIiwzMSkoNywiYiIpLExlKDgsIlRZUEUiKSxoZSgpKCkoKSgpLGRlKDksInRib2R5IiksZ3QoMTAsa0F0LDUsMiwidHIiLDMpLGhlKCkoKSksMiZjKXtjb25zdCBhPVJlKDMpO2ZlKDEwKSxNZSgibmdGb3JPZiIsYS51c2VyRW1haWxzKX19ZnVuY3Rpb24gSUF0KGMs''@;'; put 'put ''bCl7aWYoMSZjJiYoZGUoMCwiZGl2IikoMSwiaDMiKSxMZSgyKSxoZSgpLGd0KDMsQUF0LDIsMCwiaDUiLDYpLGRlKDQsImRpdiIsMjQpLGd0KDUsREF0LDExLDEsInRhYmxlIiwyNSksaGUoKSgpKSwyJmMpe2NvbnN0IGE9UmUoMik7ZmUoMiksSXIoIkVNQUlMUyAoIixhLnVzZXJFbWFpbHND''@;'; put 'put ''b3VudHx8IjAiLCIpIiksZmUoKSxNZSgibmdJZiIsMD09YS51c2VyRW1haWxzQ291bnQpLGZlKDIpLE1lKCJuZ0lmIiwwIT1hLnVzZXJFbWFpbHNDb3VudCl9fWZ1bmN0aW9uIFJBdChjLGwpezEmYyYmR3QoMCwiaHIiKX1mdW5jdGlvbiBMQXQoYyxsKXsxJmMmJihkZSgwLCJoNSIpLExlKDEs''@;'; put 'put ''Ik5vIEdyb3VwcyBQcmVzZW50IiksaGUoKSl9ZnVuY3Rpb24gT0F0KGMsbCl7aWYoMSZjJiYoZGUoMCwidGQiLDMzKSxMZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoKS4kaW1wbGljaXQ7TWUoInJvdXRlckxpbmsiLCIvdmlldy91c2VybmF2L2dyb3Vwcy8iK2EuVVJJKSxmZSgpLElyKCIg''@;'; put 'put ''IixhLkdST1VQTkFNRSwiICIpfX1mdW5jdGlvbiBQQXQoYyxsKXtpZigxJmMmJihzaSgwKSxkZSgxLCJ0ZCIsMzMpLExlKDIpLGhlKCksbGkoKSksMiZjKXtjb25zdCBhPVJlKCkuJGltcGxpY2l0O2ZlKCksTWUoInJvdXRlckxpbmsiLCIvdmlldy91c2VybmF2L2dyb3Vwcy8iKyhhLkdST1VQ''@;'; put 'put ''VVJJfHxhLlVSSSkpLGZlKCksSXIoIiAiLGEuR1JPVVBOQU1FLCIgIil9fWZ1bmN0aW9uIEZBdChjLGwpe2lmKDEmYyYmKGRlKDAsInRyIiksZ3QoMSxPQXQsMiwyLCJ0ZCIsMzIpKDIsUEF0LDMsMiwibmctY29udGFpbmVyIiw2KSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoMyk7ZmUoKSxNZSgi''@;'; put 'put ''bmdJZiIsYS5zZXJ2ZXJUeXBlPT09YS5TZXJ2ZXJUeXBlLlNhc1ZpeWEpLGZlKCksTWUoIm5nSWYiLGEuc2VydmVyVHlwZSE9PWEuU2VydmVyVHlwZS5TYXNWaXlhKX19ZnVuY3Rpb24gSEF0KGMsbCl7aWYoMSZjJiYoZGUoMCwidGFibGUiLDI5KSgxLCJ0Ym9keSIpLGd0KDIsRkF0LDMsMiwi''@;'; put 'put ''dHIiLDMpLGhlKCkoKSksMiZjKXtjb25zdCBhPVJlKDIpO2ZlKDIpLE1lKCJuZ0Zvck9mIixhLnVzZXJHcm91cHMpfX1mdW5jdGlvbiBOQXQoYyxsKXsxJmMmJkd0KDAsImhyIil9ZnVuY3Rpb24gVkF0KGMsbCl7MSZjJiYoZGUoMCwiaDUiKSxMZSgxLCJObyBSb2xlcyBQcmVzZW50IiksaGUo''@;'; put 'put ''KSl9ZnVuY3Rpb24gQkF0KGMsbCl7aWYoMSZjJiYoZGUoMCwidHIiKSgxLCJ0ZCIsMzQpLExlKDIpLGhlKCkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9UmUoNCk7ZmUoKSxNZSgicm91dGVyTGluayIsIi92aWV3L3VzZXJuYXYvcm9sZXMvIitkLmdldFJvbGVVUkkoYS5ST0xFVVJJ''@;'; put 'put ''KSksZmUoKSxJcigiICIsYS5ST0xFTkFNRSwiICIpfX1mdW5jdGlvbiBqQXQoYyxsKXtpZigxJmMmJihkZSgwLCJ0YWJsZSIsMjkpKDEsInRib2R5IiksZ3QoMixCQXQsMywyLCJ0ciIsMyksaGUoKSgpKSwyJmMpe2NvbnN0IGE9UmUoMyk7ZmUoMiksTWUoIm5nRm9yT2YiLGEudXNlclJvbGVz''@;'; put 'put ''KX19ZnVuY3Rpb24gekF0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IikoMSwiaDMiKSxMZSgyKSxoZSgpLGd0KDMsVkF0LDIsMCwiaDUiLDYpLGRlKDQsImRpdiIsMjQpLGd0KDUsakF0LDMsMSwidGFibGUiLDI1KSxoZSgpKCkpLDImYyl7Y29uc3QgYT1SZSgyKTtmZSgyKSxJcigiUk9MRVMg''@;'; put 'put ''KCIsYS51c2VyUm9sZXNDb3VudHx8IjAiLCIpIiksZmUoKSxNZSgibmdJZiIsMD09YS51c2VyUm9sZXNDb3VudCksZmUoMiksTWUoIm5nSWYiLDAhPWEudXNlclJvbGVzQ291bnQpfX1mdW5jdGlvbiBVQXQoYyxsKXsxJmMmJkd0KDAsImhyIil9ZnVuY3Rpb24gWkF0KGMsbCl7MSZjJiYoZGUo''@;'; put 'put ''MCwiaDUiKSxMZSgxLCJObyBMb2dpbnMgUHJlc2VudCIpLGhlKCkpfWZ1bmN0aW9uIFdBdChjLGwpe2lmKDEmYyYmKGRlKDAsInRyIikoMSwidGQiLDMxKSxMZSgyKSxoZSgpLGRlKDMsInRkIiwzMSksTGUoNCksaGUoKSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoMiksd3IoYS5E''@;'; put 'put ''T01BSU4pLGZlKDIpLHdyKGEuVVNFUklEKX19ZnVuY3Rpb24gWUF0KGMsbCl7aWYoMSZjJiYoZGUoMCwidGFibGUiLDI5KSgxLCJ0aGVhZCIpKDIsInRyIikoMywidGQiLDMwKSg0LCJiIiksTGUoNSwiRE9NQUlOIiksaGUoKSgpLGRlKDYsInRkIikoNywiYiIpLExlKDgsIlVTRVIgSUQiKSxo''@;'; put 'put ''ZSgpKCkoKSgpLGRlKDksInRib2R5IiksZ3QoMTAsV0F0LDUsMiwidHIiLDMpLGhlKCkoKSksMiZjKXtjb25zdCBhPVJlKDMpO2ZlKDEwKSxNZSgibmdGb3JPZiIsYS51c2VyTG9naW5zKX19ZnVuY3Rpb24gR0F0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IikoMSwiaDMiKSxMZSgyKSxoZSgp''@;'; put 'put ''LGd0KDMsWkF0LDIsMCwiaDUiLDYpLGRlKDQsImRpdiIsMjQpLGd0KDUsWUF0LDExLDEsInRhYmxlIiwyNSksaGUoKSgpKSwyJmMpe2NvbnN0IGE9UmUoMik7ZmUoMiksSXIoIkxPR0lOUyAoIixhLnVzZXJMb2dpbnNDb3VudHx8IjAiLCIpIiksZmUoKSxNZSgibmdJZiIsMD09YS51c2VyTG9n''@;'; put 'put ''aW5zQ291bnQpLGZlKDIpLE1lKCJuZ0lmIiwwIT1hLnVzZXJMb2dpbnNDb3VudCl9fWZ1bmN0aW9uICRBdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIpLGd0KDEsRUF0LDE1LDMsImRpdiIsMjApKDIsVEF0LDE5LDMsImRpdiIsMjApLGRlKDMsImRpdiIsMjEpKDQsImRpdiIsMjIpKDUsImRp''@;'; put 'put ''diIsMjMpLGd0KDYsSUF0LDYsMywiZGl2Iiw2KSg3LFJBdCwxLDAsImhyIiw2KSxkZSg4LCJkaXYiKSg5LCJoMyIpLExlKDEwKSxoZSgpLGd0KDExLExBdCwyLDAsImg1Iiw2KSxkZSgxMiwiZGl2IiwyNCksZ3QoMTMsSEF0LDMsMSwidGFibGUiLDI1KSxoZSgpKCksZ3QoMTQsTkF0LDEsMCwi''@;'; put 'put ''aHIiLDYpKDE1LHpBdCw2LDMsImRpdiIsNikoMTYsVUF0LDEsMCwiaHIiLDYpKDE3LEdBdCw2LDMsImRpdiIsNiksR3QoMTgsImJyIiksaGUoKSgpKCkoKSksMiZjKXtjb25zdCBhPVJlKCk7ZmUoKSxNZSgibmdJZiIsYS5zZXJ2ZXJUeXBlIT09YS5TZXJ2ZXJUeXBlLlNhc1ZpeWEpLGZlKCks''@;'; put 'put ''TWUoIm5nSWYiLGEuc2VydmVyVHlwZT09PWEuU2VydmVyVHlwZS5TYXNWaXlhJiZhLnVzZXJJbmZvKSxmZSg0KSxNZSgibmdJZiIsYS5zZXJ2ZXJUeXBlPT09YS5TZXJ2ZXJUeXBlLlNhczkpLGZlKCksTWUoIm5nSWYiLGEuc2VydmVyVHlwZT09PWEuU2VydmVyVHlwZS5TYXM5KSxmZSgzKSxJ''@;'; put 'put ''cigiR1JPVVBTICgiLGEudXNlckdyb3Vwc0NvdW50fHwiMCIsIikiKSxmZSgpLE1lKCJuZ0lmIiwwPT1hLnVzZXJHcm91cHNDb3VudCksZmUoMiksTWUoIm5nSWYiLDAhPWEudXNlckdyb3Vwc0NvdW50KSxmZSgpLE1lKCJuZ0lmIixhLnNlcnZlclR5cGU9PT1hLlNlcnZlclR5cGUuU2FzOSks''@;'; put 'put ''ZmUoKSxNZSgibmdJZiIsYS5zZXJ2ZXJUeXBlPT09YS5TZXJ2ZXJUeXBlLlNhczkpLGZlKCksTWUoIm5nSWYiLGEuc2VydmVyVHlwZT09PWEuU2VydmVyVHlwZS5TYXM5KSxmZSgpLE1lKCJuZ0lmIixhLnNlcnZlclR5cGU9PT1hLlNlcnZlclR5cGUuU2FzOSl9fWxldCBNN2U9KCgpPT57Y2xh''@;'; put 'put ''c3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYpe3RoaXMuaGVscGVyU2VydmljZT1hLHRoaXMuc2FzU2VydmljZT1kLHRoaXMucm91dGU9aCx0aGlzLmxvY2F0aW9uPWYsdGhpcy5yb3V0ZXI9dix0aGlzLmxvYWRpbmc9ITEsdGhpcy51c2VyU2VhcmNoPSIiLHRoaXMucGFyYW1QcmVzZW50PSEx''@;'; put 'put ''LHRoaXMucGFyYW1OYW1lPSIiLHRoaXMuc2FzanNDb25maWc9bmV3IG1oLlNBU2pzQ29uZmlnLHRoaXMuaXNWaXlhPSExLHRoaXMuc2VydmVyVHlwZT0iIix0aGlzLlNlcnZlclR5cGU9QjAuWSx0aGlzLnNlcnZlclR5cGU9dGhpcy5zYXNTZXJ2aWNlLmdldFNlcnZlclR5cGUoKSx0aGlzLnNh''@;'; put 'put ''c2pzQ29uZmlnPXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLCJTQVNWSVlBIj09PXRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZSYmKHRoaXMuaXNWaXlhPSEwKX1uZ09uSW5pdCgpe2lmKEtuLnZpZXdlci5jdXJyZW50U2VsZWN0aW9uPSJ2aWV3L3VzZXJuYXYvdXNlcnMiLHZv''@;'; put 'put ''aWQgMCE9PXRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLnVyaSYmKHRoaXMucGFyYW1QcmVzZW50PSEwLHRoaXMucGFyYW1OYW1lPXRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLnVyaSksS24udXNlcm5hdi51c2VyTGlzdCYmIXRoaXMucGFyYW1QcmVzZW50KXRoaXMudXNlcnM9S24udXNl''@;'; put 'put ''cm5hdi51c2VyTGlzdCx0aGlzLnVzZXJTZWFyY2g9S24udXNlcm5hdi51c2VyU2VhcmNoO2Vsc2UgaWYodm9pZCAwPT09S24udXNlcm5hdi51c2VyTGlzdD8odGhpcy5sb2FkaW5nPSEwLHRoaXMuaXNWaXlhP2ZldGNoKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsKyIvaWRlbnRpdGllcy91''@;'; put 'put ''c2Vycz9saW1pdD0yMDAwIix7aGVhZGVyczp7QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uIn19KS50aGVuKGE9PmEudGV4dCgpKS50aGVuKGE9PntsZXQgaD1KU09OLnBhcnNlKGEpLml0ZW1zLm1hcChmPT4oe05BTUU6Zi5uYW1lLFVSSTpmLmlkLFBST1ZJREVSOmYucHJvdmlkZXJJZH0pKTt0''@;'; put 'put ''aGlzLmxvYWRpbmc9ITEsdGhpcy51c2Vycz1oLEtuLnVzZXJuYXYudXNlckxpc3Q9aH0pOnRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJ1c2VybmF2L3VzZXJtZW1iZXJzIixudWxsKS50aGVuKGE9Pnt0aGlzLmxvYWRpbmc9ITEsdGhpcy51c2Vycz1hLmFkYXB0ZXJSZXNwb25zZS51c2VycyxL''@;'; put 'put ''bi51c2VybmF2LnVzZXJMaXN0PWEuYWRhcHRlclJlc3BvbnNlLnVzZXJzfSkpOih0aGlzLnVzZXJzPUtuLnVzZXJuYXYudXNlckxpc3QsdGhpcy51c2VyU2VhcmNoPUtuLnVzZXJuYXYudXNlclNlYXJjaCksdGhpcy5wYXJhbVByZXNlbnQpaWYodGhpcy5sb2FkaW5nPSEwLHRoaXMuaXNWaXlh''@;'; put 'put ''KXtsZXQgYT10aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy51cmk7ZmV0Y2godGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwrIi9pZGVudGl0aWVzL3VzZXJzLyIrYSsiL21lbWJlcnNoaXBzP2xpbWl0PTIwMDAiLHtoZWFkZXJzOntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24ifX0pLnRoZW4o''@;'; put 'put ''ZD0+ZC50ZXh0KCkpLnRoZW4oZD0+e2xldCBoPUpTT04ucGFyc2UoZCk7dGhpcy51c2VyRGF0YT1oLHRoaXMubG9hZGluZz0hMTtsZXQgZj1oLml0ZW1zLm1hcCh2PT4oe0dST1VQTkFNRTp2Lm5hbWUsVVJJOnYuaWR9KSk7dGhpcy51c2VyR3JvdXBzPWYsdGhpcy51c2VyR3JvdXBzQ291bnQ9''@;'; put 'put ''Zi5sZW5ndGgsdGhpcy51c2VycyYmKHRoaXMudXNlckluZm89dGhpcy51c2Vycy5maW5kKHY9PnYuVVJJPT09YSkpfSl9ZWxzZXtjb25zdCBhPXRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLnVyaTt0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgidXNlcm5hdi91c2VyZ3JvdXBzYnltZW1iZXIi''@;'; put 'put ''LHtpd2FudDpbe3VyaTphfV19KS50aGVuKGg9Pntzd2l0Y2godGhpcy5sb2FkaW5nPSExLHRoaXMuc2VydmVyVHlwZSl7Y2FzZSBCMC5ZLlNhczk6dGhpcy51c2VySW5mbz1oLmFkYXB0ZXJSZXNwb25zZS5pbmZvWzBdLHRoaXMudXNlckVtYWlscz1oLmFkYXB0ZXJSZXNwb25zZS5lbWFpbHMs''@;'; put 'put ''dGhpcy51c2VyRW1haWxzQ291bnQ9aC5hZGFwdGVyUmVzcG9uc2UuZW1haWxzLmxlbmd0aCx0aGlzLnVzZXJSb2xlcz1oLmFkYXB0ZXJSZXNwb25zZS5yb2xlcyx0aGlzLnVzZXJSb2xlc0NvdW50PWguYWRhcHRlclJlc3BvbnNlLnJvbGVzLmxlbmd0aCx0aGlzLnVzZXJMb2dpbnM9aC5hZGFw''@;'; put 'put ''dGVyUmVzcG9uc2UubG9naW5zLHRoaXMudXNlckxvZ2luc0NvdW50PWguYWRhcHRlclJlc3BvbnNlLmxvZ2lucy5sZW5ndGg7YnJlYWs7Y2FzZSBCMC5ZLlNhc2pzOmlmKHRoaXMudXNlcnMpdGhpcy51c2VySW5mbz10aGlzLnVzZXJzLmZpbmQoZj0+Zi5VUkk9PT1hKTtlbHNle2NvbnN0IGY9''@;'; put 'put ''aC5hZGFwdGVyUmVzcG9uc2UuZ3JvdXBzWzBdO3RoaXMudXNlckluZm89e1VSSTpmLklELE5BTUU6Zi5OQU1FLERJU1BMQVlOQU1FOmYuTkFNRX19fXRoaXMudXNlckRhdGE9aC5hZGFwdGVyUmVzcG9uc2UsdGhpcy51c2VyR3JvdXBzPWguYWRhcHRlclJlc3BvbnNlLmdyb3Vwcyx0aGlzLnVz''@;'; put 'put ''ZXJHcm91cHNDb3VudD1oLmFkYXB0ZXJSZXNwb25zZS5ncm91cHMubGVuZ3RofSl9fXVzZXJMaXN0T25GaWx0ZXIoKXt0aGlzLmhlbHBlclNlcnZpY2UubGlicmFyeU9uRmlsdGVyKHRoaXMudXNlcnMsdGhpcy51c2VyU2VhcmNoLCJOQU1FIiksS24udXNlcm5hdi51c2VyU2VhcmNoPXRoaXMu''@;'; put 'put ''dXNlclNlYXJjaH11c2VyT25DbGljayhhKXt0aGlzLmxvYWRpbmc9ITA7bGV0IGQ9dGhpcy5yb3V0ZXIudXJsO3RoaXMubG9jYXRpb24ucmVwbGFjZVN0YXRlKHRoaXMucGFyYW1QcmVzZW50P2Quc2xpY2UoMCxkLmxhc3RJbmRleE9mKCIvIikpKyIvIitlbmNvZGVVUkkoYS5VUkkpOmQrIi8i''@;'; put 'put ''K2VuY29kZVVSSShhLlVSSSkpLHRoaXMuaXNWaXlhP2ZldGNoKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsKyIvaWRlbnRpdGllcy91c2Vycy8iK2EuVVJJKyIvbWVtYmVyc2hpcHM/bGltaXQ9MjAwMCIse2hlYWRlcnM6e0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiJ9fSkudGhlbihoPT5o''@;'; put 'put ''LnRleHQoKSkudGhlbihoPT57bGV0IGY9SlNPTi5wYXJzZShoKTt0aGlzLnVzZXJEYXRhPWYsdGhpcy5sb2FkaW5nPSExO2xldCB2PWYuaXRlbXMubWFwKE09Pih7R1JPVVBOQU1FOk0ubmFtZSxVUkk6TS5pZH0pKTt0aGlzLnVzZXJHcm91cHM9dix0aGlzLnVzZXJHcm91cHNDb3VudD12Lmxl''@;'; put 'put ''bmd0aCx0aGlzLnVzZXJzJiYodGhpcy51c2VySW5mbz10aGlzLnVzZXJzLmZpbmQoTT0+TS5VUkk9PT1hLlVSSSkpfSk6dGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoInVzZXJuYXYvdXNlcmdyb3Vwc2J5bWVtYmVyIix7aXdhbnQ6W3t1cmk6YS5VUkl9XX0pLnRoZW4oZj0+e3N3aXRjaCh0aGlz''@;'; put 'put ''LmxvYWRpbmc9ITEsdGhpcy5zZXJ2ZXJUeXBlKXtjYXNlIEIwLlkuU2FzOTp0aGlzLnVzZXJJbmZvPWYuYWRhcHRlclJlc3BvbnNlLmluZm9bMF0sdGhpcy51c2VyRW1haWxzPWYuYWRhcHRlclJlc3BvbnNlLmVtYWlscyx0aGlzLnVzZXJFbWFpbHNDb3VudD1mLmFkYXB0ZXJSZXNwb25zZS5l''@;'; put 'put ''bWFpbHMubGVuZ3RoLHRoaXMudXNlclJvbGVzPWYuYWRhcHRlclJlc3BvbnNlLnJvbGVzLHRoaXMudXNlclJvbGVzQ291bnQ9Zi5hZGFwdGVyUmVzcG9uc2Uucm9sZXMubGVuZ3RoLHRoaXMudXNlckxvZ2lucz1mLmFkYXB0ZXJSZXNwb25zZS5sb2dpbnMsdGhpcy51c2VyTG9naW5zQ291bnQ9''@;'; put 'put ''Zi5hZGFwdGVyUmVzcG9uc2UubG9naW5zLmxlbmd0aDticmVhaztjYXNlIEIwLlkuU2FzanM6aWYodGhpcy51c2Vycyl0aGlzLnVzZXJJbmZvPXRoaXMudXNlcnMuZmluZCh2PT52LlVSST09PWEuVVJJKTtlbHNle2NvbnN0IHY9Zi5hZGFwdGVyUmVzcG9uc2UuZ3JvdXBzWzBdO3RoaXMudXNl''@;'; put 'put ''ckluZm89e1VSSTp2LklELE5BTUU6di5OQU1FLERJU1BMQVlOQU1FOnYuTkFNRX19fXRoaXMudXNlckRhdGE9Zi5hZGFwdGVyUmVzcG9uc2UsdGhpcy51c2VyR3JvdXBzPWYuYWRhcHRlclJlc3BvbnNlLmdyb3Vwcyx0aGlzLnVzZXJHcm91cHNDb3VudD1mLmFkYXB0ZXJSZXNwb25zZS5ncm91''@;'; put 'put ''cHMubGVuZ3RofSl9Z2V0Um9sZVVSSShhKXtyZXR1cm4gYS5zcGxpdCgiT01TT0JKOklkZW50aXR5R3JvdXAiKVsxXS5zbGljZSgxKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZShTdSksR2UoR3MpLEdlKEN1KSxHZShmaCksR2UoTHMpKX19''@;'; put 'put ''c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC11c2VyIl1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxkZWNsczo3LHZhcnM6NCxjb25zdHM6W1sic2VhcmNoTGliVHJlZUlucHV0IiwiIl0sWzEsInNpZGViYXItaGVpZ2h0Il0sWyJj''@;'; put 'put ''bGFzcyIsInNlYXJjaC1ub2RlIiw0LCJuZ0lmIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJjb250ZW50LWFyZWEiXSxbImNsYXNzIiwibG9hZGluZ1NwaW5uZXIiLDQsIm5nSWYiXSxbNCwibmdJZiJdLFsxLCJzZWFyY2gtbm9kZSJdLFsxLCJ0cmVlLXNlYXJjaC13cmFwcGVyIl0sWyJh''@;'; put 'put ''cHBTdGVhbEZvY3VzIiwiIiwiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIkZpbHRlciBieSBVc2VycyIsIm5hbWUiLCJpbnB1dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsMywibmdNb2RlbENoYW5nZSIsImtleXVwIiwibmdNb2RlbCJdLFsic2hhcGUiLCJzZWFyY2giLDQsIm5nSWYiXSxb''@;'; put 'put ''InNoYXBlIiwidGltZXMiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInNlYXJjaCJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siXSxbMywiYWN0aXZlIiwiY2xpY2siLDQsIm5nSWYiXSxbMywiY2xpY2siXSxbMSwibS0wIiwiY3Vyc29yLXBvaW50ZXIiLCJsaXN0LXBhZGRpbmci''@;'; put 'put ''XSxbInNoYXBlIiwidXNlciJdLFsxLCJsb2FkaW5nU3Bpbm5lciJdLFsxLCJzcGlubmVyIl0sWyJjbGFzcyIsImNsci1yb3ciLDQsIm5nSWYiXSxbMSwiY2xyLXJvdyJdLFsxLCJjbHItY29sLTgiXSxbMSwiY2FyZCIsInVzZXItZGF0YSJdLFsxLCJ0YWJsZS1jb250YWluZXIiXSxbImNsYXNz''@;'; put 'put ''IiwidGFibGUgdXNlci10YWJsZSIsNCwibmdJZiJdLFsxLCJ0YWJsZSIsInVzZXItaW5mbyJdLFsxLCJsZWZ0Il0sWzEsInVzZXItaW5mby10ZXh0Il0sWzEsInRhYmxlIiwidXNlci10YWJsZSJdLFsxLCJ3aWR0aC01MCJdLFsxLCIiXSxbInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiLCJj''@;'; put 'put ''bGFzcyIsIiIsMywicm91dGVyTGluayIsNCwibmdJZiJdLFsicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSIsMSwiIiwzLCJyb3V0ZXJMaW5rIl0sWzMsInJvdXRlckxpbmsiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJihkZSgwLCJhcHAtc2lkZWJhciIsMSkoMSwiY2xyLXRyZWUi''@;'; put 'put ''KSxndCgyLHdBdCw2LDMsImNsci10cmVlLW5vZGUiLDIpKDMsU0F0LDIsMSwibmctY29udGFpbmVyIiwzKSxoZSgpKCksZGUoNCwiZGl2Iiw0KSxndCg1LE1BdCwzLDAsImRpdiIsNSkoNiwkQXQsMTksMTEsImRpdiIsNiksaGUoKSksMiZkJiYoZmUoMiksTWUoIm5nSWYiLGgudXNlcnMpLGZl''@;'; put 'put ''KCksTWUoIm5nRm9yT2YiLGgudXNlcnMpLGZlKDIpLE1lKCJuZ0lmIixoLmxvYWRpbmcpLGZlKCksTWUoIm5nSWYiLGgudXNlckRhdGEmJiFoLmxvYWRpbmcpKX0sZGVwZW5kZW5jaWVzOltucyxiYSxjMSxweSxxbCxubCwkcyxFaCxQZCxIbCxaMSxpNCxyNF0sZW5jYXBzdWxhdGlvbjoyfSl9''@;'; put 'put ''fXJldHVybiBjfSkoKTtjb25zdCBLQXQ9Yz0+WyJzZWdtZW50IixjXSxxQXQ9KGMsbCk9Pih7InNlZ21lbnQtbWFpbiI6ITAsZXhwYW5kYWJsZTpjLGV4cGFuZGVkOmx9KTtmdW5jdGlvbiBYQXQoYyxsKXsxJmMmJkd0KDAsImRpdiIsOSl9ZnVuY3Rpb24gSkF0KGMsbCl7aWYoMSZjKXtjb25z''@;'; put 'put ''dCBhPUxuKCk7ZGUoMCwic3BhbiIsMTApLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPVJlKCkuJGltcGxpY2l0O3JldHVybiBDdChSZSgpLm9uVmFsdWVDbGljayhoKSl9KSxMZSgxKSxoZSgpfWlmKDImYyl7Y29uc3QgYT1SZSgpLiRpbXBsaWNpdDtmZSgpLHdyKGEuZGVz''@;'; put 'put ''Y3JpcHRpb24pfX1mdW5jdGlvbiBRQXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJzZWN0aW9uIiwxMSkoMSwibmd4LWpzb24tdmlld2VyIiwxMiksRnQoInNlZ21lbnRMaW5rQ2xpY2tlZCIsZnVuY3Rpb24oaCl7cmV0dXJuIHd0KGEpLEN0KFJlKDIpLm9uU2VnbWVudExpbmtD''@;'; put 'put ''bGljayhoKSl9KSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPVJlKCkuJGltcGxpY2l0LGQ9UmUoKTtmZSgpLE1lKCJqc29uIixhLnZhbHVlKSgiZXhwYW5kZWQiLGQuZXhwYW5kZWQpKCJkZXB0aCIsZC5kZXB0aCkoIl9jdXJyZW50RGVwdGgiLGQuX2N1cnJlbnREZXB0aCsxKX19ZnVuY3Rpb24g''@;'; put 'put ''ZWt0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwic2VjdGlvbiIsMikoMSwic2VjdGlvbiIsMyksRnQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSkuJGltcGxpY2l0O3JldHVybiBDdChSZSgpLnRvZ2dsZShoKSl9KSxndCgyLFhBdCwxLDAsImRpdiIsNCksZGUoMywi''@;'; put 'put ''c3BhbiIsNSksTGUoNCksaGUoKSxkZSg1LCJzcGFuIiw2KSxMZSg2LCI6ICIpLGhlKCksZ3QoNyxKQXQsMiwxLCJzcGFuIiw3KSxoZSgpLGd0KDgsUUF0LDIsNCwic2VjdGlvbiIsOCksaGUoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1SZSgpO01lKCJuZ0NsYXNzIixzcCg2LEtB''@;'; put 'put ''dCwic2VnbWVudC10eXBlLSIrYS50eXBlKSksZmUoKSxNZSgibmdDbGFzcyIsbHAoOCxxQXQsZC5pc0V4cGFuZGFibGUoYSksYS5leHBhbmRlZCkpLGZlKCksTWUoIm5nSWYiLGQuaXNFeHBhbmRhYmxlKGEpKSxmZSgyKSx3cihhLmtleSksZmUoMyksTWUoIm5nSWYiLCFhLmV4cGFuZGVkfHwh''@;'; put 'put ''ZC5pc0V4cGFuZGFibGUoYSkpLGZlKCksTWUoIm5nSWYiLGEuZXhwYW5kZWQmJmQuaXNFeHBhbmRhYmxlKGEpKX19bGV0IHRrdD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5leHBhbmRlZD0hMCx0aGlzLmRlcHRoPS0xLHRoaXMuX2N1cnJlbnREZXB0aD0wLHRoaXMuc2VnbWVu''@;'; put 'put ''dExpbmtDbGlja2VkPW5ldyBLcix0aGlzLnNlZ21lbnRzPVtdfW5nT25DaGFuZ2VzKCl7dGhpcy5zZWdtZW50cz1bXSx0aGlzLmpzb249dGhpcy5kZWN5Y2xlKHRoaXMuanNvbiksIm9iamVjdCI9PXR5cGVvZiB0aGlzLmpzb24/T2JqZWN0LmtleXModGhpcy5qc29uKS5mb3JFYWNoKGE9Pnt0''@;'; put 'put ''aGlzLnNlZ21lbnRzLnB1c2godGhpcy5wYXJzZUtleVZhbHVlKGEsdGhpcy5qc29uW2FdKSl9KTp0aGlzLnNlZ21lbnRzLnB1c2godGhpcy5wYXJzZUtleVZhbHVlKGAoJHt0eXBlb2YgdGhpcy5qc29ufSlgLHRoaXMuanNvbikpfWlzRXhwYW5kYWJsZShhKXtyZXR1cm4ib2JqZWN0Ij09PWEu''@;'; put 'put ''dHlwZXx8ImFycmF5Ij09PWEudHlwZX10b2dnbGUoYSl7dGhpcy5pc0V4cGFuZGFibGUoYSkmJihhLmV4cGFuZGVkPSFhLmV4cGFuZGVkKX1vblZhbHVlQ2xpY2soYSl7ImxpbmsiPT09YS50eXBlJiZ0aGlzLnNlZ21lbnRMaW5rQ2xpY2tlZC5lbWl0KGEudmFsdWUpfW9uU2VnbWVudExpbmtD''@;'; put 'put ''bGljayhhKXt0aGlzLnNlZ21lbnRMaW5rQ2xpY2tlZC5lbWl0KGEpfXBhcnNlS2V5VmFsdWUoYSxkKXtjb25zdCBoPXtrZXk6YSx2YWx1ZTpkLHR5cGU6dm9pZCAwLGRlc2NyaXB0aW9uOiIiK2QsZXhwYW5kZWQ6dGhpcy5pc0V4cGFuZGVkKCl9O3N3aXRjaCh0eXBlb2YgaC52YWx1ZSl7Y2Fz''@;'; put 'put ''ZSJudW1iZXIiOmgudHlwZT0ibnVtYmVyIjticmVhaztjYXNlImJvb2xlYW4iOmgudHlwZT0iYm9vbGVhbiI7YnJlYWs7Y2FzZSJmdW5jdGlvbiI6aC50eXBlPSJmdW5jdGlvbiI7YnJlYWs7Y2FzZSJzdHJpbmciOmlmKHRoaXMuaXNMaW5rKGgudmFsdWUpKXtoLnR5cGU9ImxpbmsiO2JyZWFr''@;'; put 'put ''fWgudHlwZT0ic3RyaW5nIixoLmRlc2NyaXB0aW9uPSciJytoLnZhbHVlKyciJzticmVhaztjYXNlInVuZGVmaW5lZCI6aC50eXBlPSJ1bmRlZmluZWQiLGguZGVzY3JpcHRpb249InVuZGVmaW5lZCI7YnJlYWs7Y2FzZSJvYmplY3QiOm51bGw9PT1oLnZhbHVlPyhoLnR5cGU9Im51bGwiLGgu''@;'; put 'put ''ZGVzY3JpcHRpb249Im51bGwiKTpBcnJheS5pc0FycmF5KGgudmFsdWUpPyhoLnR5cGU9ImFycmF5IixoLmRlc2NyaXB0aW9uPSJBcnJheVsiK2gudmFsdWUubGVuZ3RoKyJdICIrSlNPTi5zdHJpbmdpZnkoaC52YWx1ZSkpOmgudmFsdWUgaW5zdGFuY2VvZiBEYXRlP2gudHlwZT0iZGF0ZSI6''@;'; put 'put ''KGgudHlwZT0ib2JqZWN0IixoLmRlc2NyaXB0aW9uPSJPYmplY3QgIitKU09OLnN0cmluZ2lmeShoLnZhbHVlKSl9cmV0dXJuIGh9aXNMaW5rKGEpe3JldHVybiJodHRwczovLyI9PT1hLnN1YnN0cmluZygwLDgpfHwiaHR0cDovLyI9PT1hLnN1YnN0cmluZygwLDcpfHwiLyI9PT1hWzBdfWlz''@;'; put 'put ''RXhwYW5kZWQoKXtyZXR1cm4gdGhpcy5leHBhbmRlZCYmISh0aGlzLmRlcHRoPi0xJiZ0aGlzLl9jdXJyZW50RGVwdGg+PXRoaXMuZGVwdGgpfWRlY3ljbGUoYSl7Y29uc3QgZD1uZXcgV2Vha01hcDtyZXR1cm4gZnVuY3Rpb24gaChmLHYpe2xldCBNLEQ7cmV0dXJuIm9iamVjdCIhPXR5cGVv''@;'; put 'put ''ZiBmfHxudWxsPT09Znx8ZiBpbnN0YW5jZW9mIEJvb2xlYW58fGYgaW5zdGFuY2VvZiBEYXRlfHxmIGluc3RhbmNlb2YgTnVtYmVyfHxmIGluc3RhbmNlb2YgUmVnRXhwfHxmIGluc3RhbmNlb2YgU3RyaW5nP2Y6KE09ZC5nZXQoZiksdm9pZCAwIT09TT97JHJlZjpNfTooZC5zZXQoZix2KSxB''@;'; put 'put ''cnJheS5pc0FycmF5KGYpPyhEPVtdLGYuZm9yRWFjaChmdW5jdGlvbihaLHJlKXtEW3JlXT1oKFosdisiWyIrcmUrIl0iKX0pKTooRD17fSxPYmplY3Qua2V5cyhmKS5mb3JFYWNoKGZ1bmN0aW9uKFope0RbWl09aChmW1pdLHYrIlsiK0pTT04uc3RyaW5naWZ5KFopKyJdIil9KSksRCkpfShh''@;'; put 'put ''LCIkIil9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJuZ3gtanNvbi12aWV3ZXIiXV0saW5wdXRzOntqc29uOiJqc29uIixleHBhbmRlZDoiZXhwYW5kZWQiLGRlcHRoOiJkZXB0aCIs''@;'; put 'put ''X2N1cnJlbnREZXB0aDoiX2N1cnJlbnREZXB0aCJ9LG91dHB1dHM6e3NlZ21lbnRMaW5rQ2xpY2tlZDoic2VnbWVudExpbmtDbGlja2VkIn0sZmVhdHVyZXM6W3dsXSxkZWNsczoyLHZhcnM6MSxjb25zdHM6W1sxLCJuZ3gtanNvbi12aWV3ZXIiXSxbMywibmdDbGFzcyIsNCwibmdGb3IiLCJu''@;'; put 'put ''Z0Zvck9mIl0sWzMsIm5nQ2xhc3MiXSxbMywiY2xpY2siLCJuZ0NsYXNzIl0sWyJjbGFzcyIsInRvZ2dsZXIiLDQsIm5nSWYiXSxbMSwic2VnbWVudC1rZXkiXSxbMSwic2VnbWVudC1zZXBhcmF0b3IiXSxbImNsYXNzIiwic2VnbWVudC12YWx1ZSIsMywiY2xpY2siLDQsIm5nSWYiXSxbImNs''@;'; put 'put ''YXNzIiwiY2hpbGRyZW4iLDQsIm5nSWYiXSxbMSwidG9nZ2xlciJdLFsxLCJzZWdtZW50LXZhbHVlIiwzLCJjbGljayJdLFsxLCJjaGlsZHJlbiJdLFszLCJzZWdtZW50TGlua0NsaWNrZWQiLCJqc29uIiwiZXhwYW5kZWQiLCJkZXB0aCIsIl9jdXJyZW50RGVwdGgiXV0sdGVtcGxhdGU6ZnVu''@;'; put 'put ''Y3Rpb24oYSxkKXsxJmEmJihkZSgwLCJzZWN0aW9uIiwwKSxndCgxLGVrdCw5LDExLCJzZWN0aW9uIiwxKSxoZSgpKSwyJmEmJihmZSgpLE1lKCJuZ0Zvck9mIixkLnNlZ21lbnRzKSl9LGRlcGVuZGVuY2llczpbd3UsbnMsYmEsY10sc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijsubmd4LWpz''@;'; put 'put ''b24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTp2YXIoLS1uZ3gtanNvbi1mb250LWZhbWlseSwgbW9ub3NwYWNlKTtmb250LXNpemU6dmFyKC0tbmd4LWpzb24tZm9udC1zaXplLCAxZW0pO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0''@;'; put 'put ''aW9uOnJlbGF0aXZlfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnRbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4O21hcmdpbjoxcHggMXB4IDFweCAxMnB4fS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnRbX25n''@;'; put 'put ''Y29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV17d29yZC13cmFwOmJyZWFrLXdvcmR9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudFtfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQt''@;'; put 'put ''JUNPTVAlXSAgIC50b2dnbGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTttYXJnaW4tbGVmdDotMTRweDttYXJnaW4tdG9wOjNweDtmb250LXNpemU6LjhlbTtsaW5lLWhlaWdodDoxLjJlbTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7Y29sb3I6dmFyKC0tbmd4LWpzb24t''@;'; put 'put ''dG9nZ2xlciwgIzc4Nzg3OCl9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudFtfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50b2dnbGVyW19uZ2NvbnRlbnQtJUNPTVAlXTphZnRlcntkaXNwbGF5Omlu''@;'; put 'put ''bGluZS1ibG9jaztjb250ZW50OiJcXDI1YmEiO3RyYW5zaXRpb246dHJhbnNmb3JtIC4xcyBlYXNlLWlufS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnRbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gICAu''@;'; put 'put ''c2VnbWVudC1rZXlbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnZhcigtLW5neC1qc29uLWtleSwgIzRFMTg3Qyl9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudFtfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAl''@;'; put 'put ''XSAgIC5zZWdtZW50LXNlcGFyYXRvcltfbmdjb250ZW50LSVDT01QJV17Y29sb3I6dmFyKC0tbmd4LWpzb24tc2VwYXJhdG9yLCAjOTk5KX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LW1haW5bX25n''@;'; put 'put ''Y29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdmFsdWVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnZhcigtLW5neC1qc29uLXZhbHVlLCAjMDAwKX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jaGlsZHJlbltf''@;'; put 'put ''bmdjb250ZW50LSVDT01QJV17bWFyZ2luLWxlZnQ6MTJweH0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LXR5cGUtc3RyaW5nW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtdmFsdWVb''@;'; put 'put ''X25nY29udGVudC0lQ09NUCVde2NvbG9yOnZhcigtLW5neC1qc29uLXN0cmluZywgI0ZGNkI2Qil9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC10eXBlLW51bWJlcltfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNP''@;'; put 'put ''TVAlXSA+IC5zZWdtZW50LXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjp2YXIoLS1uZ3gtanNvbi1udW1iZXIsICMwMDk2ODgpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdHlwZS1ib29sZWFuW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdt''@;'; put 'put ''ZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtdmFsdWVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnZhcigtLW5neC1qc29uLWJvb2xlYW4sICNCOTM4QTQpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdHlwZS1kYXRlW19uZ2Nv''@;'; put 'put ''bnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtdmFsdWVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnZhcigtLW5neC1qc29uLWRhdGUsICMwNTY2OEQpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21l''@;'; put 'put ''bnQtdHlwZS1hcnJheVtfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjp2YXIoLS1uZ3gtanNvbi1hcnJheSwgIzk5OSl9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50''@;'; put 'put ''LSVDT01QJV0gICAuc2VnbWVudC10eXBlLW9iamVjdFtfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjp2YXIoLS1uZ3gtanNvbi1vYmplY3QsICM5OTkpfS5uZ3gtanNv''@;'; put 'put ''bi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdHlwZS1mdW5jdGlvbltfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjp2YXIoLS1uZ3gtanNvbi1m''@;'; put 'put ''dW5jdGlvbiwgIzk5OSl9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC10eXBlLWxpbmtbX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC12YWx1ZVtfbmdjb250ZW50LSVDT01QJV17Y29s''@;'; put 'put ''b3I6dmFyKC0tbmd4LWpzb24tbGluaywgIzlCNTlCNil9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC10eXBlLW51bGxbX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC12YWx1ZVtfbmdj''@;'; put 'put ''b250ZW50LSVDT01QJV17Y29sb3I6dmFyKC0tbmd4LWpzb24tbnVsbCwgI2ZmZil9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC10eXBlLXVuZGVmaW5lZFtfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSA+''@;'; put 'put ''IC5zZWdtZW50LXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjp2YXIoLS1uZ3gtanNvbi11bmRlZmluZWQsICNmZmYpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdHlwZS1udWxsW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LW1haW5b''@;'; put 'put ''X25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtdmFsdWVbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6dmFyKC0tbmd4LWpzb24tbnVsbC1iZywgcmVkKX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LXR5cGUtdW5kZWZpbmVkW19u''@;'; put 'put ''Z2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQta2V5W19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjp2YXIoLS1uZ3gtanNvbi11bmRlZmluZWQta2V5LCAjOTk5KX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAg''@;'; put 'put ''IC5zZWdtZW50LXR5cGUtdW5kZWZpbmVkW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtdmFsdWVbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6dmFyKC0tbmd4LWpzb24tdW5kZWZpbmVkLWtleSwgIzk5''@;'; put 'put ''OSl9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC10eXBlLWxpbmtbX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC12YWx1ZVtfbmdjb250ZW50LSVDT01QJV17dGV4dC1kZWNvcmF0aW9u''@;'; put 'put ''OnVuZGVybGluZTtjdXJzb3I6cG9pbnRlcn0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LXR5cGUtb2JqZWN0W19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdLCAubmd4LWpzb24tdmlld2VyW19uZ2NvbnRl''@;'; put 'put ''bnQtJUNPTVAlXSAgIC5zZWdtZW50LXR5cGUtYXJyYXlbX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLmV4cGFuZGVkW19uZ2NvbnRlbnQt''@;'; put 'put ''JUNPTVAlXSA+IC50b2dnbGVyW19uZ2NvbnRlbnQtJUNPTVAlXTphZnRlcnt0cmFuc2Zvcm06cm90YXRlKDkwZGVnKX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5leHBhbmRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50''@;'; put 'put ''LSVDT01QJV0gICAuZXhwYW5kYWJsZVtfbmdjb250ZW50LSVDT01QJV0gPiAudG9nZ2xlcltfbmdjb250ZW50LSVDT01QJV17Y3Vyc29yOnBvaW50ZXJ9J119KSxjfSkoKSxua3Q9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9''@;'; put 'put ''LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbUmFdfSksY30pKCkscmt0PSgoKT0+e2NsYXNzIGN7dHJhbnNmb3JtKGEpe2lmKCFhLmluY2x1ZGVzKCIvIikpcmV0dXJuIGE7bGV0IGQ9IiI7Y29uc3QgaD1hLnNwbGl0KCIvIik7Zm9yKGxldCBmPTA7''@;'; put 'put ''ZjxoLmxlbmd0aDtmKyspaWYoIiIhPT1oW2ZdKXtjb25zdCB2PWhbZl07ZCs9Ii8iK3YsaFtmXT1gPGEgaHJlZj0ke2R9PiR7dn08L2E+YH1yZXR1cm4gaC5qb2luKCIvIil9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1''@;'; put 'put ''MDI3NXBpcGU9bGwoe25hbWU6ImxpbmtpbnplIix0eXBlOmMscHVyZTohMH0pfX1yZXR1cm4gY30pKCksaWt0PSgoKT0+e2NsYXNzIGN7dHJhbnNmb3JtKGEpe3JldHVybiBKU09OLnN0cmluZ2lmeShhLG51bGwsMil9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBu''@;'; put 'put ''ZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NXBpcGU9bGwoe25hbWU6InByZXR0eWpzb24iLHR5cGU6YyxwdXJlOiEwfSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiBha3QoYyxsKXtpZigxJmMmJihkZSgwLCJvcHRpb24iLDI0KSxMZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGlj''@;'; put 'put ''aXQ7Zk0oInZhbHVlIixhLnZhbHVlKSxmZSgpLElyKCIgIixhLmtleSwiICIpfX1mdW5jdGlvbiBva3QoYyxsKXtpZigxJmMmJihkZSgwLCJvcHRncm91cCIsMjIpLGd0KDEsYWt0LDIsMiwib3B0aW9uIiwyMyksZWwoMiwia2V5dmFsdWUiKSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGlj''@;'; put 'put ''aXQsZD1SZSgpO01lKCJsYWJlbCIsYS5rZXkpLGZlKCksTWUoIm5nRm9yT2YiLERjKDIsMixkLmNvbGxlY3Rpb25zW2Eua2V5XSkpfX1mdW5jdGlvbiBza3QoYyxsKXsxJmMmJihkZSgwLCJwIiwyNSksTGUoMSwiIFNlbGVjdCBjb2xsZWN0aW9uIHRvIHN0YXJ0ICIpLGhlKCkpfWZ1bmN0aW9u''@;'; put 'put ''IGxrdChjLGwpezEmYyYmR3QoMCwiY2xyLXNwaW5uZXIiLDI2KX1mdW5jdGlvbiBja3QoYyxsKXsxJmMmJkd0KDAsImNsci1pY29uIiwzMil9ZnVuY3Rpb24gdWt0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLWljb24iLDMzKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3Qo''@;'; put 'put ''YSk7Y29uc3QgaD1SZSgyKTtyZXR1cm4gaC5saW5rc1NlYXJjaD0iIixDdChoLmxpbmtzTGlzdE9uRmlsdGVyKCkpfSksaGUoKX19ZnVuY3Rpb24gZGt0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLXRyZWUtbm9kZSIsMjcpKDEsImRpdiIsMjgpKDIsImlucHV0IiwyOSww''@;'; put 'put ''KSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1SZSgpO3JldHVybiBtaShmLmxpbmtzU2VhcmNoLGgpfHwoZi5saW5rc1NlYXJjaD1oKSxDdChoKX0pLEZ0KCJrZXl1cCIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS5saW5rc0xpc3RPbkZpbHRl''@;'; put 'put ''cigpKX0pLGhlKCksZ3QoNCxja3QsMSwwLCJjbHItaWNvbiIsMzApKDUsdWt0LDEsMCwiY2xyLWljb24iLDMxKSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPWhhKDMpLGQ9UmUoKTtmZSgyKSxwaSgibmdNb2RlbCIsZC5saW5rc1NlYXJjaCksZmUoMiksTWUoIm5nSWYiLGEudmFsdWUubGVuZ3Ro''@;'; put 'put ''PDEpLGZlKCksTWUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPjApfX1mdW5jdGlvbiBoa3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItdHJlZS1ub2RlIiwzNSksRnQoImNsaWNrIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPVJlKCkuJGltcGxpY2l0LHY9UmUoKTtyZXR1''@;'; put 'put ''cm4gQ3Qodi50cmVlTm9kZUNsaWNrZWQoaCxmLHYuZW5kcG9pbnRMaW5rcykpfSksZ2koImNsckV4cGFuZGVkQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPVJlKCkuJGltcGxpY2l0O3JldHVybiBtaShmLmV4cGFuZGVkLGgpfHwoZi5leHBhbmRlZD1oKSxDdChoKX0pLGRlKDEs''@;'; put 'put ''InAiLDM2KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSgpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoUmUoKS5saW5rT25DbGljayhoKSl9KSxHdCgyLCJjbHItaWNvbiIsMzcpLExlKDMpLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9UmUoKS4kaW1wbGljaXQ7cGkoImNsckV4''@;'; put 'put ''cGFuZGVkIixhLmV4cGFuZGVkKSxNZSgiY2xyTG9hZGluZyIsISFhLmxvYWRpbmdUYWJsZXMmJiFhLnRhYmxlcyksZmUoMyksVXUoIiAiLGEubWV0aG9kLCIgIixhLnJlbCwiICIpfX1mdW5jdGlvbiBma3QoYyxsKXtpZigxJmMmJihzaSgwKSxndCgxLGhrdCw0LDQsImNsci10cmVlLW5vZGUi''@;'; put 'put ''LDM0KSxsaSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoKSxNZSgibmdJZiIsIWEuaGlkZGVuKX19ZnVuY3Rpb24gcGt0KGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsMzIpfWZ1bmN0aW9uIGdrdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci1pY29uIiwzMyks''@;'; put 'put ''RnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9UmUoMik7cmV0dXJuIGguaXRlbXNTZWFyY2g9IiIsQ3QoaC5pdGVtc0xpc3RPbkZpbHRlcigpKX0pLGhlKCl9fWZ1bmN0aW9uIG1rdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci10cmVlLW5vZGUiLDI3KSgx''@;'; put 'put ''LCJkaXYiLDI4KSgyLCJpbnB1dCIsMzgsMSksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9UmUoKTtyZXR1cm4gbWkoZi5pdGVtc1NlYXJjaCxoKXx8KGYuaXRlbXNTZWFyY2g9aCksQ3QoaCl9KSxGdCgia2V5dXAiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEp''@;'; put 'put ''LEN0KFJlKCkuaXRlbXNMaXN0T25GaWx0ZXIoKSl9KSxoZSgpLGd0KDQscGt0LDEsMCwiY2xyLWljb24iLDMwKSg1LGdrdCwxLDAsImNsci1pY29uIiwzMSksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1oYSgzKSxkPVJlKCk7ZmUoMikscGkoIm5nTW9kZWwiLGQuaXRlbXNTZWFyY2gpLGZlKDIp''@;'; put 'put ''LE1lKCJuZ0lmIixhLnZhbHVlLmxlbmd0aDwxKSxmZSgpLE1lKCJuZ0lmIixhLnZhbHVlLmxlbmd0aD4wKX19ZnVuY3Rpb24gdmt0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLXRyZWUtbm9kZSIsMzUpLEZ0KCJjbGljayIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1S''@;'; put 'put ''ZSgpLiRpbXBsaWNpdCx2PVJlKCk7cmV0dXJuIEN0KHYudHJlZU5vZGVDbGlja2VkKGgsZix2LmVuZHBvaW50SXRlbXMpKX0pLGdpKCJjbHJFeHBhbmRlZENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1SZSgpLiRpbXBsaWNpdDtyZXR1cm4gbWkoZi5leHBhbmRlZCxoKXx8KGYu''@;'; put 'put ''ZXhwYW5kZWQ9aCksQ3QoaCl9KSxkZSgxLCJwIiwzNiksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9UmUoKS4kaW1wbGljaXQ7cmV0dXJuIEN0KFJlKCkuaXRlbU9uQ2xpY2soaCkpfSksR3QoMiwiY2xyLWljb24iLDM3KSxMZSgzKSxoZSgpKCl9aWYoMiZjKXtjb25zdCBh''@;'; put 'put ''PVJlKCkuJGltcGxpY2l0O3BpKCJjbHJFeHBhbmRlZCIsYS5leHBhbmRlZCksTWUoImNsckxvYWRpbmciLCEhYS5sb2FkaW5nVGFibGVzJiYhYS50YWJsZXMpLGZlKDMpLElyKCIgIixhLm5hbWV8fGEuaWQsIiAiKX19ZnVuY3Rpb24gYmt0KGMsbCl7aWYoMSZjJiYoc2koMCksZ3QoMSx2a3Qs''@;'; put 'put ''NCwzLCJjbHItdHJlZS1ub2RlIiwzNCksbGkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKCksTWUoIm5nSWYiLCFhLmhpZGRlbil9fWZ1bmN0aW9uIHlrdChjLGwpezEmYyYmR3QoMCwiY2xyLXNwaW5uZXIiLDM5KX1mdW5jdGlvbiBfa3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4o''@;'; put 'put ''KTtkZSgwLCJuZ3gtanNvbi12aWV3ZXIiLDQ5KSxGdCgic2VnbWVudExpbmtDbGlja2VkIixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoUmUoMykub25Kc29uTGlua0NsaWNrKGgpKX0pLGhlKCl9MiZjJiZNZSgianNvbiIsUmUoMykuZW5kcG9pbnRKc29uKSgiZXhwYW5kZWQiLCExKX1m''@;'; put 'put ''dW5jdGlvbiB3a3QoYyxsKXtpZigxJmMmJihzaSgwKSxMZSgxKSxlbCgyLCJwcmV0dHlqc29uIiksbGkoKSksMiZjKXtjb25zdCBhPVJlKDMpO2ZlKCksSXIoIlxuICAgICAgICAgICAgIixEYygyLDEsYS5lbmRwb2ludEpzb24pLCJcbiAgICAgICAgICAiKX19ZnVuY3Rpb24gQ2t0KGMsbCl7''@;'; put 'put ''aWYoMSZjJiYoc2koMCksTGUoMSwiXG4gICAgICAgICAgIiksZ3QoMixfa3QsMSwyLCJuZ3gtanNvbi12aWV3ZXIiLDQ4KSxMZSgzLCJcbiAgICAgICAgICAiKSxndCg0LHdrdCwzLDMsIm5nLWNvbnRhaW5lciIsMjEpLExlKDUsIlxuICAgICAgICAiKSxsaSgpKSwyJmMpe2NvbnN0IGE9UmUo''@;'; put 'put ''Mik7ZmUoMiksTWUoIm5nSWYiLCFhLnJhd0pzb24pLGZlKDIpLE1lKCJuZ0lmIixhLnJhd0pzb24pfX1mdW5jdGlvbiBTa3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtzaSgwKSxkZSgxLCJkaXYiLDQwKSgyLCJzcGFuIiw0MSksTGUoMywiIEdFVCAiKSxkZSg0LCJwIiw0MiksZWwoNSwi''@;'; put 'put ''bGlua2luemUiKSxGdCgiY2xpY2siLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChSZSgpLm9uQnJlYWRjdW1zQ2xpY2soaCkpfSksaGUoKSxkZSg2LCJidXR0b24iLDE2KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkuY29weUJyZWFkY3J1bXMoKSl9KSxH''@;'; put 'put ''dCg3LCJjbHItaWNvbiIsMTcpLGhlKCkoKSxkZSg4LCJkaXYiLDQzKSg5LCJjbHItaW5wdXQtY29udGFpbmVyIiwxNCkoMTAsImxhYmVsIiksTGUoMTEsIlN0YXJ0IiksaGUoKSxkZSgxMiwiaW5wdXQiLDQ0KSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1S''@;'; put 'put ''ZSgpO3JldHVybiBtaShmLmVuZHBvaW50LnN0YXJ0LGgpfHwoZi5lbmRwb2ludC5zdGFydD1oKSxDdChoKX0pLGhlKCkoKSxkZSgxMywiY2xyLWlucHV0LWNvbnRhaW5lciIsMTQpKDE0LCJsYWJlbCIpLExlKDE1LCJMaW1pdCIpLGhlKCksZGUoMTYsImlucHV0Iiw0NCksZ2koIm5nTW9kZWxD''@;'; put 'put ''aGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9UmUoKTtyZXR1cm4gbWkoZi5lbmRwb2ludC5saW1pdCxoKXx8KGYuZW5kcG9pbnQubGltaXQ9aCksQ3QoaCl9KSxoZSgpKCksZGUoMTcsImJ1dHRvbiIsNDUpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUo''@;'; put 'put ''KS5hcHBseVF1ZXJ5UGFyYW1zKCkpfSksR3QoMTgsImNsci1pY29uIiw0NiksaGUoKSgpKCksZGUoMTksInByZSIsNDcpLExlKDIwLCIgICAgICAgICIpLGd0KDIxLENrdCw2LDIsIm5nLWNvbnRhaW5lciIsMjEpLExlKDIyLCJcbiAgICAgICIpLGhlKCksbGkoKX1pZigyJmMpe2NvbnN0IGE9''@;'; put 'put ''UmUoKTtmZSg0KSxNZSgiaW5uZXJIVE1MIixEYyg1LDcsYS5lbmRwb2ludC51cmwpLFY0KSxmZSg4KSxwaSgibmdNb2RlbCIsYS5lbmRwb2ludC5zdGFydCksTWUoImRpc2FibGVkIix2b2lkIDA9PT1hLmVuZHBvaW50LnN0YXJ0KSxmZSg0KSxwaSgibmdNb2RlbCIsYS5lbmRwb2ludC5saW1p''@;'; put 'put ''dCksTWUoImRpc2FibGVkIix2b2lkIDA9PT1hLmVuZHBvaW50LmxpbWl0KSxmZSgpLE1lKCJkaXNhYmxlZCIsdm9pZCAwPT09YS5lbmRwb2ludC5saW1pdCYmdm9pZCAwPT09YS5lbmRwb2ludC5zdGFydCksZmUoNCksTWUoIm5nSWYiLGEuZW5kcG9pbnRKc29uKX19bGV0IE1rdD0oKCk9Pntj''@;'; put 'put ''bGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMuaGVscGVyU2VydmljZT1hLHRoaXMuc2FzVml5YVNlcnZpY2U9ZCx0aGlzLnNhc1NlcnZpY2U9aCx0aGlzLmV2ZW50U2VydmljZT1mLHRoaXMuY29sbGVjdGlvbnM9e30sdGhpcy5jb2xsZWN0aW9uPSIiLHRoaXMuZW5kcG9pbnRMaW5r''@;'; put 'put ''cz1bXSx0aGlzLmVuZHBvaW50SXRlbXM9W10sdGhpcy5lbmRwb2ludD17dXJsOiIiLHN0YXJ0Oi0xLGxpbWl0Oi0xfSx0aGlzLmVuZHBvaW50TG9hZGluZz0hMSx0aGlzLmNvbGxlY3Rpb25Mb2FkaW5nPSExLHRoaXMucmF3SnNvbj0hMSx0aGlzLmxpbmtzU2VhcmNoPSIiLHRoaXMuaXRlbXNT''@;'; put 'put ''ZWFyY2g9IiIsdGhpcy5zYXNqc0NvbmZpZz1uZXcgbWguU0FTanNDb25maWd9bmdPbkluaXQoKXt0aGlzLnNhc2pzQ29uZmlnPXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLHRoaXMuY29sbGVjdGlvbnM9dGhpcy5zYXNWaXlhU2VydmljZS5nZXRBbGxDb2xsZWN0aW9ucygpfWxp''@;'; put 'put ''bmtzTGlzdE9uRmlsdGVyKCl7dGhpcy5oZWxwZXJTZXJ2aWNlLmxpYnJhcnlPbkZpbHRlcih0aGlzLmVuZHBvaW50TGlua3MsdGhpcy5saW5rc1NlYXJjaCwicmVsIiksS24udml5YUFwaS5saW5rc3NTZWFyY2g9dGhpcy5saW5rc1NlYXJjaH1pdGVtc0xpc3RPbkZpbHRlcigpe3RoaXMuaGVs''@;'; put 'put ''cGVyU2VydmljZS5saWJyYXJ5T25GaWx0ZXIodGhpcy5lbmRwb2ludEl0ZW1zLHRoaXMuaXRlbXNTZWFyY2gsIm5hbWUiKSxLbi52aXlhQXBpLml0ZW1zU2VhcmNoPXRoaXMuaXRlbXNTZWFyY2h9bGlua09uQ2xpY2soYSl7dGhpcy5sb2FkVXJsKGEuaHJlZil9aXRlbU9uQ2xpY2soYSl7dGhp''@;'; put 'put ''cy5sb2FkVXJsKGEubGlua3NbMF0uaHJlZil9dHJlZU5vZGVDbGlja2VkKGEsZCxoKXsiQ29sbGFwc2UiPT09YS50YXJnZXQudGl0bGUmJnRoaXMuY29sbGFwc2VUcmVlSXRlbXMoaCxkKX1jb2xsYXBzZVRyZWVJdGVtcyhhLGQpe2EuZm9yRWFjaChoPT57SlNPTi5zdHJpbmdpZnkoaCkhPT1K''@;'; put 'put ''U09OLnN0cmluZ2lmeShkKSYmKGguZXhwYW5kZWQ9ITEpfSl9dXBkYXRlU2VsZWN0ZWRDb2xsZWN0aW9uKCl7S24udml5YUFwaS5zZWxlY3RlZENvbGxlY3Rpb249dGhpcy5jb2xsZWN0aW9uLHRoaXMuZW5kcG9pbnQudXJsPXRoaXMuY29sbGVjdGlvbix0aGlzLmNvbGxlY3Rpb25Mb2FkaW5n''@;'; put 'put ''PSEwLHRoaXMuc2FzVml5YVNlcnZpY2UuZ2V0QnlDb2xsZWN0aW9uKHRoaXMuY29sbGVjdGlvbikuc3Vic2NyaWJlKGE9Pnt0aGlzLmVuZHBvaW50TGlua3M9YS5saW5rcyx0aGlzLmVuZHBvaW50SXRlbXM9YS5pdGVtcz9hLml0ZW1zOltdLHRoaXMuY29sbGVjdGlvbkxvYWRpbmc9ITEsdGhp''@;'; put 'put ''cy5lbmRwb2ludEpzb249YSx0aGlzLmVuZHBvaW50LnN0YXJ0PWEuc3RhcnQsdGhpcy5lbmRwb2ludC5saW1pdD1hLmxpbWl0fSxhPT57dGhpcy5jb2xsZWN0aW9uTG9hZGluZz0hMTtsZXQgZD0iRXJyb3Igb2NjdXJyZWQgd2hpbGUgc2VuZGluZyByZXF1ZXN0IjthLm1lc3NhZ2UmJihkPWEu''@;'; put 'put ''bWVzc2FnZSksYS5lcnJvciYmKGEuZXJyb3IubWVzc2FnZSYmKGQ9YS5lcnJvci5tZXNzYWdlKSxhLmVycm9yLnJlbWVkaWF0aW9uJiYoZD1gJHtkfVxuJHthLmVycm9yLnJlbWVkaWF0aW9ufWApKSx0aGlzLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbChudWxsLGQsbnVsbCwiSFRUUCBF''@;'; put 'put ''cnJvciIpfSl9b25Kc29uTGlua0NsaWNrKGEpe3RoaXMubG9hZFVybChhKX1vbkpzb25DbGljayhhKXtpZihhLnByZXZlbnREZWZhdWx0KCksIkEiPT09YS5zcmNFbGVtZW50LnRhZ05hbWUpe2NvbnN0IGQ9YS5zcmNFbGVtZW50LmhyZWYuc3BsaXQoYS5zcmNFbGVtZW50Lmhvc3QpWzFdO3Ro''@;'; put 'put ''aXMubG9hZFVybChkKX19b25CcmVhZGN1bXNDbGljayhhKXtpZihhLnByZXZlbnREZWZhdWx0KCksIWEuc3JjRWxlbWVudC5ocmVmKXJldHVybjtjb25zdCBkPWEuc3JjRWxlbWVudC5ocmVmLnNwbGl0KGEuc3JjRWxlbWVudC5ob3N0KVsxXTt0aGlzLmxvYWRVcmwoZCl9Y29weUpzb24oKXt0''@;'; put 'put ''aGlzLmVuZHBvaW50SnNvbiYmbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoSlNPTi5zdHJpbmdpZnkodGhpcy5lbmRwb2ludEpzb24sbnVsbCwyKSl9Y29weUJyZWFkY3J1bXMoKXt0aGlzLmVuZHBvaW50JiZ0aGlzLmVuZHBvaW50LnVybCYmbmF2aWdhdG9yLmNsaXBib2FyZC53cml0''@;'; put 'put ''ZVRleHQodGhpcy5lbmRwb2ludC51cmwpfWFwcGx5UXVlcnlQYXJhbXMoKXtjb25zdCBhPXRoaXMuZW5kcG9pbnQuc3RhcnQsZD10aGlzLmVuZHBvaW50LmxpbWl0LGg9YD8ke3ZvaWQgMCE9PWE/InN0YXJ0PSIrYToiIn0ke3ZvaWQgMCE9PWQ/IiZsaW1pdD0iK2Q6IiJ9YCxmPWAke3RoaXMu''@;'; put 'put ''ZW5kcG9pbnQudXJsLnNwbGl0KCI/IilbMF19JHtofWA7dGhpcy5sb2FkVXJsKGYpfWxvYWRVcmwoYSl7dGhpcy5lbmRwb2ludExvYWRpbmc9ITAsdGhpcy5zYXNWaXlhU2VydmljZS5nZXRCeVVybChhKS5zdWJzY3JpYmUoZD0+e3RoaXMuZW5kcG9pbnRMaW5rcz1kLmxpbmtzLHRoaXMuZW5k''@;'; put 'put ''cG9pbnRJdGVtcz1kLml0ZW1zP2QuaXRlbXM6W10sdGhpcy5lbmRwb2ludEpzb249ZCx0aGlzLmVuZHBvaW50TG9hZGluZz0hMSx0aGlzLmVuZHBvaW50LnVybD1hLHRoaXMuZW5kcG9pbnQuc3RhcnQ9ZC5zdGFydCx0aGlzLmVuZHBvaW50LmxpbWl0PWQubGltaXR9LGQ9Pnt0aGlzLmVuZHBv''@;'; put 'put ''aW50TG9hZGluZz0hMTtsZXQgaD0iRXJyb3Igb2NjdXJyZWQgd2hpbGUgc2VuZGluZyByZXF1ZXN0IjtkLm1lc3NhZ2UmJihoPWQubWVzc2FnZSksZC5lcnJvciYmKGQuZXJyb3IubWVzc2FnZSYmKGg9ZC5lcnJvci5tZXNzYWdlKSxkLmVycm9yLnJlbWVkaWF0aW9uJiYoaD1gJHtofVxuJHtk''@;'; put 'put ''LmVycm9yLnJlbWVkaWF0aW9ufWApKSx0aGlzLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbChudWxsLGgsbnVsbCwiSFRUUCBFcnJvciIpfSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoU3UpLEdlKFRXKSxHZShHcyksR2UodmMpKX19''@;'; put 'put ''c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC12aXlhLWFwaS1leHBsb3JlciJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6MzMsdmFyczoxMyxjb25zdHM6W1sic2VhcmNoTGlua3NUcmVlSW5wdXQiLCIiXSxbInNlYXJj''@;'; put 'put ''aEl0ZW1zVHJlZUlucHV0IiwiIl0sWzEsImFwaS1jb2xsZWN0aW9uLWRyb3Bkb3duIl0sWyJjbHJTZWxlY3QiLCIiLCJpZCIsInJlcG9zaXRvcnkiLDMsIm5nTW9kZWxDaGFuZ2UiLCJjaGFuZ2UiLCJuZ01vZGVsIl0sWzMsImxhYmVsIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImNsYXNzIiwi''@;'; put 'put ''dy0xMDAgdGV4dC1jZW50ZXIiLDQsIm5nSWYiXSxbMSwiZC1mbGV4IiwiY2xyLWp1c3RpZnktY29udGVudC1jZW50ZXIiXSxbImNsck1lZGl1bSIsIiIsNCwibmdJZiJdLFsiY2xhc3MiLCJzZWFyY2gtbm9kZSIsNCwibmdJZiJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiY29udGVudC1h''@;'; put 'put ''cmVhIl0sWzEsImNhcmQiLCJoLTEwMCIsInAtMTAiLCJkLWZsZXgiLCJjbHItZmxleC1jb2x1bW4iXSxbMSwidy0xMDAiLCJkLWZsZXgiLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIiwiY2xyLWp1c3RpZnktY29udGVudC1jZW50ZXIiLCJzaXRpb24tcmVsYXRpdmUiXSxbMSwianNvbi10b2dn''@;'; put 'put ''bGUiLCJkLWZsZXgiLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIl0sWzEsIm0tMCJdLFsidHlwZSIsImNoZWNrYm94IiwiY2xyVG9nZ2xlIiwiIiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLWxpbmsiLCJidG4tc20iLDMsImNsaWNr''@;'; put 'put ''Il0sWyJzaGFwZSIsImNvcHkiXSxbMSwidGV4dC1jZW50ZXIiLCJtLTAiXSxbImNsclNtYWxsIiwiIiw0LCJuZ0lmIl0sWzEsInctMTAwIiwibGlnaHQiXSxbNCwibmdJZiJdLFszLCJsYWJlbCJdLFszLCJ2YWx1ZSIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzMsInZhbHVlIl0sWzEsInctMTAw''@;'; put 'put ''IiwidGV4dC1jZW50ZXIiXSxbImNsck1lZGl1bSIsIiJdLFsxLCJzZWFyY2gtbm9kZSJdLFsxLCJ0cmVlLXNlYXJjaC13cmFwcGVyIl0sWyJhcHBTdGVhbEZvY3VzIiwiIiwiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIlNlYXJjaCBsaW5rcyIsIm5hbWUiLCJpbnB1dCIsImF1dG9jb21w''@;'; put 'put ''bGV0ZSIsIm9mZiIsMywibmdNb2RlbENoYW5nZSIsImtleXVwIiwibmdNb2RlbCJdLFsic2hhcGUiLCJzZWFyY2giLDQsIm5nSWYiXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInNlYXJjaCJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siXSxbMywi''@;'; put 'put ''Y2xyRXhwYW5kZWQiLCJjbHJMb2FkaW5nIiwiY2xpY2siLCJjbHJFeHBhbmRlZENoYW5nZSIsNCwibmdJZiJdLFszLCJjbGljayIsImNsckV4cGFuZGVkQ2hhbmdlIiwiY2xyRXhwYW5kZWQiLCJjbHJMb2FkaW5nIl0sWzEsIm0tMCIsImN1cnNvci1wb2ludGVyIiwzLCJjbGljayJdLFsic2hh''@;'; put 'put ''cGUiLCJibG9jayJdLFsiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIlNlYXJjaCBpdGVtcyIsIm5hbWUiLCJpbnB1dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsMywibmdNb2RlbENoYW5nZSIsImtleXVwIiwibmdNb2RlbCJdLFsiY2xyU21hbGwiLCIiXSxbMSwiZC1mbGV4IiwiY2xyLWFs''@;'; put 'put ''aWduLWl0ZW1zLWNlbnRlciIsImNsci1qdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiJdLFsxLCJkLWZsZXgiLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIl0sWzEsInRleHQtY2VudGVyIiwiZW5kcG9pbnQtYnJlYWRjcnVtcyIsMywiY2xpY2siLCJpbm5lckhUTUwiXSxbMSwiZC1mbGV4IiwiY2xy''@;'; put 'put ''LWFsaWduLWl0ZW1zLWNlbnRlciIsInF1ZXJ5LXBhcmFtcyJdLFsiY2xySW5wdXQiLCIiLCJ0eXBlIiwibnVtYmVyIiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCIsImRpc2FibGVkIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tbGluayIsImJ0bi1zbSIsMywiY2xpY2siLCJk''@;'; put 'put ''aXNhYmxlZCJdLFsic2hhcGUiLCJwbGF5Il0sWzEsImpzb24tYXJlYSJdLFsiY2xhc3MiLCJkLWJsb2NrIiwzLCJqc29uIiwiZXhwYW5kZWQiLCJzZWdtZW50TGlua0NsaWNrZWQiLDQsIm5nSWYiXSxbMSwiZC1ibG9jayIsMywic2VnbWVudExpbmtDbGlja2VkIiwianNvbiIsImV4cGFuZGVk''@;'; put 'put ''Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYoZGUoMCwiYXBwLXNpZGViYXIiKSgxLCJkaXYiLDIpKDIsImNsci1zZWxlY3QtY29udGFpbmVyIikoMywibGFiZWwiKSxMZSg0LCJBUEkgQ29sbGVjdGlvbiIpLGhlKCksZGUoNSwic2VsZWN0IiwzKSxnaSgibmdNb2RlbENoYW5nZSIs''@;'; put 'put ''ZnVuY3Rpb24odil7cmV0dXJuIG1pKGguY29sbGVjdGlvbix2KXx8KGguY29sbGVjdGlvbj12KSx2fSksRnQoImNoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gaC51cGRhdGVTZWxlY3RlZENvbGxlY3Rpb24oKX0pLGd0KDYsb2t0LDMsNCwib3B0Z3JvdXAiLDQpLGVsKDcsImtleXZhbHVlIiks''@;'; put 'put ''aGUoKSgpKCksZ3QoOCxza3QsMiwwLCJwIiw1KSxkZSg5LCJkaXYiLDYpLGd0KDEwLGxrdCwxLDAsImNsci1zcGlubmVyIiw3KSxoZSgpLGRlKDExLCJjbHItdHJlZSIpLGd0KDEyLGRrdCw2LDMsImNsci10cmVlLW5vZGUiLDgpKDEzLGZrdCwyLDEsIm5nLWNvbnRhaW5lciIsOSksaGUoKSxk''@;'; put 'put ''ZSgxNCwiY2xyLXRyZWUiKSxndCgxNSxta3QsNiwzLCJjbHItdHJlZS1ub2RlIiw4KSgxNixia3QsMiwxLCJuZy1jb250YWluZXIiLDkpLGhlKCkoKSxkZSgxNywiZGl2IiwxMCkoMTgsImRpdiIsMTEpKDE5LCJkaXYiLDEyKSgyMCwiZGl2IiwxMykoMjEsImNsci10b2dnbGUtY29udGFpbmVy''@;'; put 'put ''IiwxNCkoMjIsImNsci10b2dnbGUtd3JhcHBlciIpKDIzLCJpbnB1dCIsMTUpLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbih2KXtyZXR1cm4gbWkoaC5yYXdKc29uLHYpfHwoaC5yYXdKc29uPXYpLHZ9KSxoZSgpLGRlKDI0LCJsYWJlbCIpLExlKDI1LCJSQVcgSnNvbiIpLGhlKCkoKSgp''@;'; put 'put ''LGRlKDI2LCJidXR0b24iLDE2KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGguY29weUpzb24oKX0pLEd0KDI3LCJjbHItaWNvbiIsMTcpLGhlKCkoKSxkZSgyOCwiaDQiLDE4KSxMZSgyOSwiIEFQSSBFeHBsb3JlciAiKSxndCgzMCx5a3QsMSwwLCJjbHItc3Bpbm5lciIsMTkpLGhl''@;'; put 'put ''KCkoKSxHdCgzMSwiaHIiLDIwKSxndCgzMixTa3QsMjMsOSwibmctY29udGFpbmVyIiwyMSksaGUoKSgpKSwyJmQmJihmZSg1KSxwaSgibmdNb2RlbCIsaC5jb2xsZWN0aW9uKSxmZSgpLE1lKCJuZ0Zvck9mIixEYyg3LDExLGguY29sbGVjdGlvbnMpKSxmZSgyKSxNZSgibmdJZiIsaC5lbmRw''@;'; put 'put ''b2ludExpbmtzLmxlbmd0aDwxJiYhaC5jb2xsZWN0aW9uTG9hZGluZyksZmUoMiksTWUoIm5nSWYiLGguY29sbGVjdGlvbkxvYWRpbmcpLGZlKDIpLE1lKCJuZ0lmIixoLmVuZHBvaW50TGlua3MubGVuZ3RoPjApLGZlKCksTWUoIm5nRm9yT2YiLGguZW5kcG9pbnRMaW5rcyksZmUoMiksTWUo''@;'; put 'put ''Im5nSWYiLGguZW5kcG9pbnRJdGVtcy5sZW5ndGg+MCksZmUoKSxNZSgibmdGb3JPZiIsaC5lbmRwb2ludEl0ZW1zKSxmZSg3KSxwaSgibmdNb2RlbCIsaC5yYXdKc29uKSxmZSg3KSxNZSgibmdJZiIsaC5lbmRwb2ludExvYWRpbmcpLGZlKDIpLE1lKCJuZ0lmIixoLmNvbGxlY3Rpb24ubGVu''@;'; put 'put ''Z3RoPjApKX0sZGVwZW5kZW5jaWVzOltucyxiYSxBMixrMixxbCx2TCxNZCxUMixubCwkcyxFaCxQZCxIbCxqMCxkcyxJZCxCeSxTaCxaMSxHTCxFNywkeSxSZCxpNCxyNCx0a3Qsd1Iscmt0LGlrdF0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKTtjb25zdCB4a3Q9bmV3IFN0KCJX''@;'; put 'put ''aW5kb3dUb2tlbiIsdHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5kb2N1bWVudD97cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+d2luZG93fTp7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+e319KTtsZXQgRWt0PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3Ro''@;'; put 'put ''aXMubmdab25lPWEsdGhpcy5kb2N1bWVudD1kLHRoaXMud2luZG93PWgsdGhpcy5jb3B5U3ViamVjdD1uZXcgV24sdGhpcy5jb3B5UmVzcG9uc2UkPXRoaXMuY29weVN1YmplY3QuYXNPYnNlcnZhYmxlKCksdGhpcy5jb25maWc9e319Y29uZmlndXJlKGEpe3RoaXMuY29uZmlnPWF9Y29weShh''@;'; put 'put ''KXtpZighdGhpcy5pc1N1cHBvcnRlZHx8IWEpcmV0dXJuIHRoaXMucHVzaENvcHlSZXNwb25zZSh7aXNTdWNjZXNzOiExLGNvbnRlbnQ6YX0pO2NvbnN0IGQ9dGhpcy5jb3B5RnJvbUNvbnRlbnQoYSk7cmV0dXJuIHRoaXMucHVzaENvcHlSZXNwb25zZShkP3tjb250ZW50OmEsaXNTdWNjZXNz''@;'; put 'put ''OmR9Ontpc1N1Y2Nlc3M6ITEsY29udGVudDphfSl9Z2V0IGlzU3VwcG9ydGVkKCl7cmV0dXJuISF0aGlzLmRvY3VtZW50LnF1ZXJ5Q29tbWFuZFN1cHBvcnRlZCYmISF0aGlzLmRvY3VtZW50LnF1ZXJ5Q29tbWFuZFN1cHBvcnRlZCgiY29weSIpJiYhIXRoaXMud2luZG93fWlzVGFyZ2V0VmFs''@;'; put 'put ''aWQoYSl7aWYoYSBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnR8fGEgaW5zdGFuY2VvZiBIVE1MVGV4dEFyZWFFbGVtZW50KXtpZihhLmhhc0F0dHJpYnV0ZSgiZGlzYWJsZWQiKSl0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgInRhcmdldCIgYXR0cmlidXRlLiBQbGVhc2UgdXNlICJyZWFk''@;'; put 'put ''b25seSIgaW5zdGVhZCBvZiAiZGlzYWJsZWQiIGF0dHJpYnV0ZScpO3JldHVybiEwfXRocm93IG5ldyBFcnJvcigiVGFyZ2V0IHNob3VsZCBiZSBpbnB1dCBvciB0ZXh0YXJlYSIpfWNvcHlGcm9tSW5wdXRFbGVtZW50KGEsZD0hMCl7dHJ5e3RoaXMuc2VsZWN0VGFyZ2V0KGEpO2NvbnN0IGg9''@;'; put 'put ''dGhpcy5jb3B5VGV4dCgpO3JldHVybiB0aGlzLmNsZWFyU2VsZWN0aW9uKGQ/YTp2b2lkIDAsdGhpcy53aW5kb3cpLGgmJnRoaXMuaXNDb3B5U3VjY2Vzc0luSUUxMSgpfWNhdGNoe3JldHVybiExfX1pc0NvcHlTdWNjZXNzSW5JRTExKCl7Y29uc3QgYT10aGlzLndpbmRvdy5jbGlwYm9hcmRE''@;'; put 'put ''YXRhO3JldHVybiEoYSYmYS5nZXREYXRhJiYhYS5nZXREYXRhKCJUZXh0IikpfWNvcHlGcm9tQ29udGVudChhLGQ9dGhpcy5kb2N1bWVudC5ib2R5KXtpZih0aGlzLnRlbXBUZXh0QXJlYSYmIWQuY29udGFpbnModGhpcy50ZW1wVGV4dEFyZWEpJiZ0aGlzLmRlc3Ryb3kodGhpcy50ZW1wVGV4''@;'; put 'put ''dEFyZWEucGFyZW50RWxlbWVudHx8dm9pZCAwKSwhdGhpcy50ZW1wVGV4dEFyZWEpe3RoaXMudGVtcFRleHRBcmVhPXRoaXMuY3JlYXRlVGVtcFRleHRBcmVhKHRoaXMuZG9jdW1lbnQsdGhpcy53aW5kb3cpO3RyeXtkLmFwcGVuZENoaWxkKHRoaXMudGVtcFRleHRBcmVhKX1jYXRjaHt0aHJv''@;'; put 'put ''dyBuZXcgRXJyb3IoIkNvbnRhaW5lciBzaG91bGQgYmUgYSBEb20gZWxlbWVudCIpfX10aGlzLnRlbXBUZXh0QXJlYS52YWx1ZT1hO2NvbnN0IGg9dGhpcy5jb3B5RnJvbUlucHV0RWxlbWVudCh0aGlzLnRlbXBUZXh0QXJlYSwhMSk7cmV0dXJuIHRoaXMuY29uZmlnLmNsZWFuVXBBZnRlckNv''@;'; put 'put ''cHkmJnRoaXMuZGVzdHJveSh0aGlzLnRlbXBUZXh0QXJlYS5wYXJlbnRFbGVtZW50fHx2b2lkIDApLGh9ZGVzdHJveShhPXRoaXMuZG9jdW1lbnQuYm9keSl7dGhpcy50ZW1wVGV4dEFyZWEmJihhLnJlbW92ZUNoaWxkKHRoaXMudGVtcFRleHRBcmVhKSx0aGlzLnRlbXBUZXh0QXJlYT12b2lk''@;'; put 'put ''IDApfXNlbGVjdFRhcmdldChhKXtyZXR1cm4gYS5zZWxlY3QoKSxhLnNldFNlbGVjdGlvblJhbmdlKDAsYS52YWx1ZS5sZW5ndGgpLGEudmFsdWUubGVuZ3RofWNvcHlUZXh0KCl7cmV0dXJuIHRoaXMuZG9jdW1lbnQuZXhlY0NvbW1hbmQoImNvcHkiKX1jbGVhclNlbGVjdGlvbihhLGQpe2Em''@;'; put 'put ''JmEuZm9jdXMoKSxkLmdldFNlbGVjdGlvbigpPy5yZW1vdmVBbGxSYW5nZXMoKX1jcmVhdGVUZW1wVGV4dEFyZWEoYSxkKXtjb25zdCBoPSJydGwiPT09YS5kb2N1bWVudEVsZW1lbnQuZ2V0QXR0cmlidXRlKCJkaXIiKTtsZXQgZjtyZXR1cm4gZj1hLmNyZWF0ZUVsZW1lbnQoInRleHRhcmVh''@;'; put 'put ''IiksZi5zdHlsZS5mb250U2l6ZT0iMTJwdCIsZi5zdHlsZS5ib3JkZXI9IjAiLGYuc3R5bGUucGFkZGluZz0iMCIsZi5zdHlsZS5tYXJnaW49IjAiLGYuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixmLnN0eWxlW2g/InJpZ2h0IjoibGVmdCJdPSItOTk5OXB4IixmLnN0eWxlLnRvcD0oZC5w''@;'; put 'put ''YWdlWU9mZnNldHx8YS5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wKSsicHgiLGYuc2V0QXR0cmlidXRlKCJyZWFkb25seSIsIiIpLGZ9cHVzaENvcHlSZXNwb25zZShhKXt0aGlzLmNvcHlTdWJqZWN0Lm9ic2VydmVycy5sZW5ndGg+MCYmdGhpcy5uZ1pvbmUucnVuKCgpPT57dGhpcy5jb3B5''@;'; put 'put ''U3ViamVjdC5uZXh0KGEpfSl9cHVzaENvcHlSZXBvbnNlKGEpe3RoaXMucHVzaENvcHlSZXNwb25zZShhKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoeHIoV2EpLHhyKHZzKSx4cih4a3QsOCkpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFj''@;'; put 'put ''dG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLGN9KSgpLFRrdD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMubmdab25lPWEsdGhpcy5ob3N0PWQsdGhpcy5yZW5kZXJlcj1oLHRoaXMuY2xpcGJvYXJkU3J2PWYsdGhpcy5jYk9uU3VjY2Vzcz1uZXcg''@;'; put 'put ''S3IsdGhpcy5jYk9uRXJyb3I9bmV3IEtyLHRoaXMub25DbGljaz12PT57dGhpcy5jbGlwYm9hcmRTcnYuaXNTdXBwb3J0ZWQ/dGhpcy50YXJnZXRFbG0mJnRoaXMuY2xpcGJvYXJkU3J2LmlzVGFyZ2V0VmFsaWQodGhpcy50YXJnZXRFbG0pP3RoaXMuaGFuZGxlUmVzdWx0KHRoaXMuY2xpcGJv''@;'; put 'put ''YXJkU3J2LmNvcHlGcm9tSW5wdXRFbGVtZW50KHRoaXMudGFyZ2V0RWxtKSx0aGlzLnRhcmdldEVsbS52YWx1ZSx2KTp0aGlzLmNiQ29udGVudCYmdGhpcy5oYW5kbGVSZXN1bHQodGhpcy5jbGlwYm9hcmRTcnYuY29weUZyb21Db250ZW50KHRoaXMuY2JDb250ZW50LHRoaXMuY29udGFpbmVy''@;'; put 'put ''KSx0aGlzLmNiQ29udGVudCx2KTp0aGlzLmhhbmRsZVJlc3VsdCghMSx2b2lkIDAsdil9fW5nT25Jbml0KCl7dGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLmNsaWNrTGlzdGVuZXI9dGhpcy5yZW5kZXJlci5saXN0ZW4odGhpcy5ob3N0Lm5hdGl2ZUVsZW1lbnQsImNs''@;'; put 'put ''aWNrIix0aGlzLm9uQ2xpY2spfSl9bmdPbkRlc3Ryb3koKXt0aGlzLmNsaWNrTGlzdGVuZXImJnRoaXMuY2xpY2tMaXN0ZW5lcigpLHRoaXMuY2xpcGJvYXJkU3J2LmRlc3Ryb3kodGhpcy5jb250YWluZXIpfWhhbmRsZVJlc3VsdChhLGQsaCl7bGV0IGY9e2lzU3VjY2VzczphLGNvbnRlbnQ6''@;'; put 'put ''ZCxzdWNjZXNzTWVzc2FnZTp0aGlzLmNiU3VjY2Vzc01zZyxldmVudDpofTthP3RoaXMuY2JPblN1Y2Nlc3Mub2JzZXJ2ZWQmJnRoaXMubmdab25lLnJ1bigoKT0+e3RoaXMuY2JPblN1Y2Nlc3MuZW1pdChmKX0pOnRoaXMuY2JPbkVycm9yLm9ic2VydmVkJiZ0aGlzLm5nWm9uZS5ydW4oKCk9''@;'; put 'put ''Pnt0aGlzLmNiT25FcnJvci5lbWl0KGYpfSksdGhpcy5jbGlwYm9hcmRTcnYucHVzaENvcHlSZXNwb25zZShmKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoV2EpLEdlKEppKSxHZShFbyksR2UoRWt0KSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBl''@;'; put 'put ''OmMsc2VsZWN0b3JzOltbIiIsIm5neENsaXBib2FyZCIsIiJdXSxpbnB1dHM6e3RhcmdldEVsbTpbTm4uTm9uZSwibmd4Q2xpcGJvYXJkIiwidGFyZ2V0RWxtIl0sY29udGFpbmVyOiJjb250YWluZXIiLGNiQ29udGVudDoiY2JDb250ZW50IixjYlN1Y2Nlc3NNc2c6ImNiU3VjY2Vzc01zZyJ9''@;'; put 'put ''LG91dHB1dHM6e2NiT25TdWNjZXNzOiJjYk9uU3VjY2VzcyIsY2JPbkVycm9yOiJjYk9uRXJyb3IifX0pLGN9KSgpLEFrdD0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUw''@;'; put 'put ''Mjc1aW5qPUFyKHtpbXBvcnRzOltSYV19KSxjfSkoKTt2YXIga2t0PXkoMjUwMDEpO2xldCBEa3Q9KCgpPT57Y2xhc3MgY3t0cmFuc2Zvcm0oYSwuLi5kKXtjb25zdCBoPXBhcnNlSW50KGRbMF0pfHwyLGY9Im51bWJlciIhPXR5cGVvZiBhP3BhcnNlSW50KGEpOmE7cmV0dXJuKDAsa2t0LkMp''@;'; put 'put ''KGYsaCl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NXBpcGU9bGwoe25hbWU6ImNvbnZlcnRTaXplIix0eXBlOmMscHVyZTohMH0pfX1yZXR1cm4gY30pKCk7Y29uc3QgSWt0PVsicXVlcnlGaWx0ZXIiXSxSa3Q9''@;'; put 'put ''KCk9PlsiIiwiICJdO2Z1bmN0aW9uIExrdChjLGwpezEmYyYmKGRlKDAsImRpdiIsNTQpLEd0KDEsImNsci1zcGlubmVyIiw1NSksaGUoKSl9ZnVuY3Rpb24gT2t0KGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsNjEpfWZ1bmN0aW9uIFBrdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2Rl''@;'; put 'put ''KDAsImNsci1pY29uIiw2MiksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9UmUoMik7cmV0dXJuIGgubGlicmFyaWVzU2VhcmNoPSIiLEN0KGgubGlicmFyeU9uRmlsdGVyKCkpfSksaGUoKX19ZnVuY3Rpb24gRmt0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwi''@;'; put 'put ''Y2xyLXRyZWUtbm9kZSIsNTYpKDEsImRpdiIsNTcpKDIsImlucHV0Iiw1OCwxKSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1SZSgpO3JldHVybiBtaShmLmxpYnJhcmllc1NlYXJjaCxoKXx8KGYubGlicmFyaWVzU2VhcmNoPWgpLEN0KGgpfSksRnQoImtl''@;'; put 'put ''eXVwIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgpLmxpYnJhcnlPbkZpbHRlcigpKX0pLGhlKCksZ3QoNCxPa3QsMSwwLCJjbHItaWNvbiIsNTkpKDUsUGt0LDEsMCwiY2xyLWljb24iLDYwKSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPWhhKDMpLGQ9UmUoKTtmZSgyKSxwaSgibmdN''@;'; put 'put ''b2RlbCIsZC5saWJyYXJpZXNTZWFyY2gpLGZlKDIpLE1lKCJuZ0lmIixhLnZhbHVlLmxlbmd0aDwxKSxmZSgpLE1lKCJuZ0lmIixhLnZhbHVlLmxlbmd0aD4wKX19ZnVuY3Rpb24gSGt0KGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsNjEpfWZ1bmN0aW9uIE5rdChjLGwpe2lmKDEmYyl7Y29u''@;'; put 'put ''c3QgYT1MbigpO2RlKDAsImNsci1pY29uIiw2MiksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpLFJlKCk7Y29uc3QgaD1oYSgzKSxmPVJlKDIpLiRpbXBsaWNpdCx2PVJlKCk7cmV0dXJuIGgudmFsdWU9IiIsZi5zZWFyY2hTdHJpbmc9IiIsQ3Qodi50cmVlT25GaWx0ZXIoZiwidGFibGVz''@;'; put 'put ''IikpfSksaGUoKX19ZnVuY3Rpb24gVmt0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLXRyZWUtbm9kZSIsNTYpKDEsImRpdiIsNTcpKDIsImlucHV0Iiw2NywyKSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1SZSgyKS4kaW1wbGljaXQ7''@;'; put 'put ''cmV0dXJuIG1pKGYuc2VhcmNoU3RyaW5nLGgpfHwoZi5zZWFyY2hTdHJpbmc9aCksQ3QoaCl9KSxGdCgia2V5dXAiLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSgyKS4kaW1wbGljaXQ7cmV0dXJuIEN0KFJlKCkudHJlZU9uRmlsdGVyKGgsInRhYmxlcyIpKX0pLGhlKCksZ3QoNCxIa3Qs''@;'; put 'put ''MSwwLCJjbHItaWNvbiIsNTkpKDUsTmt0LDEsMCwiY2xyLWljb24iLDYwKSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPWhhKDMpLGQ9UmUoMikuJGltcGxpY2l0O2ZlKDIpLE1lKCJpZCIsInNlYXJjaF8iK2QuTElCUkFSWVJFRikscGkoIm5nTW9kZWwiLGQuc2VhcmNoU3RyaW5nKSxmZSgyKSxN''@;'; put 'put ''ZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8MSksZmUoKSxNZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg+MCl9fWZ1bmN0aW9uIEJrdChjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDc0KX1mdW5jdGlvbiBqa3QoYyxsKXsxJmMmJkd0KDAsImNsci1pY29uIiw3NSl9ZnVuY3Rpb24gemt0KGMsbCl7''@;'; put 'put ''aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiYnV0dG9uIiw3MCksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9UmUoKS5uZ1ZhcixmPVJlKCkuJGltcGxpY2l0LHY9UmUoMikuJGltcGxpY2l0LE09UmUoKTtyZXR1cm4gQ3QoaD8iIjpNLm9uVGFibGVDbGljayhmLHYpKX0p''@;'; put 'put ''LHNpKDEsNzEpLGd0KDIsQmt0LDEsMCwiY2xyLWljb24iLDcyKSgzLGprdCwxLDAsImNsci1pY29uIiw3MyksbGkoKSxMZSg0KSxoZSgpfWlmKDImYyl7Y29uc3QgYT1SZSgpLm5nVmFyLGQ9UmUoKS4kaW1wbGljaXQsaD1SZSgyKS4kaW1wbGljaXQsZj1SZSgpO1RyKCJkYy1sb2NrZWQtY29u''@;'; put 'put ''dHJvbCIsYSkoImFjdGl2ZSIsZi5saWJUYWJBY3RpdmUoaC5MSUJSQVJZUkVGLGQpKSxmZSgpLE1lKCJuZ1N3aXRjaCIsZC5pbmNsdWRlcygiLUZDIikpLGZlKCksTWUoIm5nU3dpdGNoQ2FzZSIsITApLGZlKCksTWUoIm5nU3dpdGNoQ2FzZSIsITEpLGZlKCksSXIoIiAiLGQucmVwbGFjZSgi''@;'; put 'put ''LUZDIiwiIiksIiAiKX19ZnVuY3Rpb24gVWt0KGMsbCl7MSZjJiYoZGUoMCwiY2xyLXRvb2x0aXAtY29udGVudCIsNzcpKDEsInNwYW4iKSxMZSgyLCIgVG8gdW5sb2NrIGFsbCB0YWJsZXMsIGNvbnRhY3Qgc3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyAiKSxoZSgpKCkpfWZ1bmN0aW9uIFpr''@;'; put 'put ''dChjLGwpezEmYyYmKHNpKDApLGd0KDEsVWt0LDMsMCwiY2xyLXRvb2x0aXAtY29udGVudCIsNzYpLGxpKCkpfWZ1bmN0aW9uIFdrdChjLGwpe2lmKDEmYyYmKGRlKDAsImNsci10b29sdGlwIiksZ3QoMSx6a3QsNSw4LCJidXR0b24iLDY5KSgyLFprdCwyLDAsIm5nLWNvbnRhaW5lciIsNDIp''@;'; put 'put ''LGhlKCkpLDImYyl7Y29uc3QgYT1sLm5nVmFyLGQ9UmUoKS4kaW1wbGljaXQ7ZmUoKSxNZSgibmdJZiIsZC5sZW5ndGg+MCksZmUoKSxNZSgibmdJZiIsYSl9fWZ1bmN0aW9uIFlrdChjLGwpe2lmKDEmYyYmKGRlKDAsImNsci10cmVlLW5vZGUiKSxndCgxLFdrdCwzLDIsImNsci10b29sdGlw''@;'; put 'put ''Iiw2OCksaGUoKSksMiZjKXtjb25zdCBhPWwuaW5kZXgsZD1SZSgzKTtmZSgpLE1lKCJuZ1ZhciIsYSsxPmQubGljZW5jZVN0YXRlLnZhbHVlLnRhYmxlc19pbl9saWJyYXJ5X2xpbWl0KX19ZnVuY3Rpb24gR2t0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLXRyZWUtbm9k''@;'; put 'put ''ZSIsNjQpLEZ0KCJjbGljayIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1SZSgpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoUmUoKS50cmVlTm9kZUNsaWNrZWQoaCxmKSl9KSxnaSgiY2xyRXhwYW5kZWRDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9UmUoKS4kaW1wbGljaXQ7cmV0''@;'; put 'put ''dXJuIG1pKGYuZXhwYW5kZWQsaCl8fChmLmV4cGFuZGVkPWgpLEN0KGgpfSksZGUoMSwicCIsNjUpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPVJlKCkuJGltcGxpY2l0LGY9UmUoKTtyZXR1cm4gZi5saWI9aC5MSUJSQVJZUkVGLEN0KGYubGlicmFyeU9uQ2xpY2soaC5M''@;'; put 'put ''SUJSQVJZUkVGLGgpKX0pLEd0KDIsImNsci1pY29uIiw2NiksTGUoMyksaGUoKSxndCg0LFZrdCw2LDQsImNsci10cmVlLW5vZGUiLDcpKDUsWWt0LDIsMSwiY2xyLXRyZWUtbm9kZSIsOCksaGUoKX1pZigyJmMpe2NvbnN0IGE9UmUoKS4kaW1wbGljaXQ7VHIoImNsci1leHBhbmRlZCIsYS5l''@;'; put 'put ''eHBhbmRlZCkscGkoImNsckV4cGFuZGVkIixhLmV4cGFuZGVkKSxNZSgiY2xyTG9hZGluZyIsYS5sb2FkaW5nVGFibGVzJiYhYS50YWJsZXMpLGZlKDMpLElyKCIgIixhLkxJQlJBUllOQU1FLCIgIiksZmUoKSxNZSgibmdJZiIsYS50YWJsZXMpLGZlKCksTWUoIm5nRm9yT2YiLGEudGFibGVz''@;'; put 'put ''KX19ZnVuY3Rpb24gJGt0KGMsbCl7aWYoMSZjJiYoc2koMCksZ3QoMSxHa3QsNiw3LCJjbHItdHJlZS1ub2RlIiw2MyksbGkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKCksTWUoIm5nSWYiLCFhLmhpZGRlbiYmYS5pbkZvcmVncm91bmQpfX1mdW5jdGlvbiBLa3QoYyxsKXsxJmMm''@;'; put 'put ''JihkZSgwLCJkaXYiLDc4KSgxLCJzcGFuIiw3OSksTGUoMiwiIExvYWRpbmcuLi4gIiksaGUoKSgpKX1mdW5jdGlvbiBxa3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiLDgwKSgxLCJkaXYiLDgxKSgyLCJkaXYiLDgyKSgzLCJkaXYiLDgzKSg0LCJidXR0b24iLDg0KSxH''@;'; put 'put ''dCg1LCJjbHItaWNvbiIsODUpLGhlKCksZGUoNiwiaDMiLDQ3KSxMZSg3LCJFcnJvciIpLGhlKCkoKSxkZSg4LCJkaXYiLDE1KSg5LCJwIiksTGUoMTAsIllvdSBjYW5ub3Qgc3VibWl0IGVtcHR5IGNsYXVzZXMiKSxoZSgpKCksZGUoMTEsImRpdiIsMjYpKDEyLCJidXR0b24iLDg2KSxGdCgi''@;'; put 'put ''Y2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkubnVsbFZhcmlhYmxlcz0hMSl9KSxMZSgxMywiIE9rICIpLGhlKCkoKSgpKCkoKX19ZnVuY3Rpb24gWGt0KGMsbCl7MSZjJiZHdCgwLCJkaXYiLDg3KX1mdW5jdGlvbiBKa3QoYyxsKXsxJmMmJkd0KDAsImFwcC1xdWVyeSIs''@;'; put 'put ''bnVsbCwzKX1mdW5jdGlvbiBRa3QoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDg4KSgxLCJzcGFuIiw4OSksTGUoMiwiIExvYWRpbmcuLi4gIiksaGUoKSxkZSgzLCJkaXYiLDkwKSg0LCJwIiw5MSksTGUoNSwiTG9hZGluZyBUYWJsZSBWaWV3ZXIiKSxoZSgpKCkoKSl9ZnVuY3Rpb24gZUR0KGMs''@;'; put 'put ''bCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLWljb24iLDExNSksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpLFJlKCk7Y29uc3QgaD1oYSg1KTtyZXR1cm4gQ3QoUmUoMikuc2VhcmNoVGFibGUoaCkpfSksaGUoKX19ZnVuY3Rpb24gdER0KGMsbCl7MSZjJiYoZGUoMCwic3Bh''@;'; put 'put ''biIsMTE2KSxMZSgxLCIgTG9hZGluZy4uLiAiKSxoZSgpKX1mdW5jdGlvbiBuRHQoYyxsKXsxJmMmJkd0KDAsImNsci1pY29uIiwxMTcpfWZ1bmN0aW9uIHJEdChjLGwpe2lmKDEmYyYmKGRlKDAsInNwYW4iLDExOCksTGUoMSksaGUoKSksMiZjKXtjb25zdCBhPVJlKDMpO2ZlKCksSXIoIiAi''@;'; put 'put ''LG51bGw9PWEudGFibGVUaXRsZT9udWxsOmEudGFibGVUaXRsZS5yZXBsYWNlKCItRkMiLCIiKSwiICIpfX1mdW5jdGlvbiBpRHQoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItdG9vbHRpcC1jb250ZW50IiwxMjApLExlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSg0KTtmZSgpLElyKCIgIixh''@;'; put 'put ''LmRzTm90ZSwiICIpfX1mdW5jdGlvbiBhRHQoYyxsKXsxJmMmJihzaSgwKSxndCgxLGlEdCwyLDEsImNsci10b29sdGlwLWNvbnRlbnQiLDExOSksbGkoKSl9ZnVuY3Rpb24gb0R0KGMsbCl7aWYoMSZjJiYoZGUoMCwic3BhbiIpLExlKDEpLGVsKDIsInRob3VzYW5kU2VwYXJhdG9yIiksaGUo''@;'; put 'put ''KSksMiZjKXtjb25zdCBhPVJlKDQpO2ZlKCksS0koIiAoIix6OCgyLDQsYS5udW1iZXJPZlJvd3MsIiwiKSwiICIsMT09PWEubnVtYmVyT2ZSb3dzPyJyb3ciOiJyb3dzIiwiLCAiLGEuZmlsdGVyQ29scy5sZW5ndGgsIiIsMT09PWEuZmlsdGVyQ29scy5sZW5ndGg/IiBjb2wiOiIgY29scyIs''@;'; put 'put ''IikgIil9fWZ1bmN0aW9uIHNEdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO3NpKDApLGd0KDEsb0R0LDMsNywic3BhbiIsNDIpLGRlKDIsImNsci1pY29uIiwxMjEpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoMykucmVsb2FkVGFibGVEYXRhKCkpfSksaGUo''@;'; put 'put ''KSxsaSgpfWlmKDImYyl7Y29uc3QgYT1SZSgzKTtmZSgpLE1lKCJuZ0lmIixudWxsIT09YS5udW1iZXJPZlJvd3MpfX1mdW5jdGlvbiBsRHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiLDEyNyksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSg1''@;'; put 'put ''KS5lZGl0VGFibGUoKSl9KSxHdCgxLCJjbHItaWNvbiIsMTMzKSxkZSgyLCJzcGFuIiksTGUoMywiRWRpdCIpLGhlKCkoKX19ZnVuY3Rpb24gY0R0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2IiwxMjcpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3Qo''@;'; put 'put ''UmUoNSkuZ29Ub0xpbmVhZ2UoKSl9KSxHdCgxLCJjbHItaWNvbiIsMTM0KSxkZSgyLCJzcGFuIiksTGUoMywiTGluZWFnZSIpLGhlKCkoKX19ZnVuY3Rpb24gdUR0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLWRyb3Bkb3duLW1lbnUiLDEyNikoMSwiZGl2IiwxMjcpLEZ0''@;'; put 'put ''KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoNCkubmV3Vmlld2JveCgpKX0pLEd0KDIsImNsci1pY29uIiwxMjgpLGRlKDMsInNwYW4iKSxMZSg0LCJWaWV3Ym94ZXMiKSxoZSgpKCksZ3QoNSxsRHQsNCwwLCJkaXYiLDEyOSkoNixjRHQsNCwwLCJkaXYiLDEyOSksZGUo''@;'; put 'put ''NywiZGl2IiwxMjcpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoNCkub3BlblFiKCkpfSksR3QoOCwiY2xyLWljb24iLDEzMCksZGUoOSwic3BhbiIpLExlKDEwLCJGaWx0ZXIiKSxoZSgpKCksZGUoMTEsImRpdiIsMTI3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7''@;'; put 'put ''cmV0dXJuIHd0KGEpLEN0KFJlKDQpLm9wZW5Eb3dubG9hZD0hMCl9KSxHdCgxMiwiY2xyLWljb24iLDEzMSksZGUoMTMsInNwYW4iKSxMZSgxNCwiRG93bmxvYWQiKSxoZSgpKCksZGUoMTUsImRpdiIsMTI3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKDQpLnNo''@;'; put 'put ''b3dXZWJRdWVyeSgpKX0pLEd0KDE2LCJjbHItaWNvbiIsMTMyKSxkZSgxNywic3BhbiIpLExlKDE4LCJXZWIgUXVlcnkgVVJMIiksaGUoKSgpKCl9aWYoMiZjKXtjb25zdCBhPVJlKDQpO2ZlKDUpLE1lKCJuZ0lmIixhLnRhYmxlRWRpdEV4aXN0cygpKSxmZSgpLE1lKCJuZ0lmIixhLnRhYmxl''@;'; put 'put ''dXJpKX19ZnVuY3Rpb24gZER0KGMsbCl7MSZjJiYoZGUoMCwiY2xyLWRyb3Bkb3duIiwxMjIpKDEsImJ1dHRvbiIsMTIzKSxHdCgyLCJjbHItaWNvbiIsMTI0KSxMZSgzLCIgb3B0aW9ucyAiKSxoZSgpLGd0KDQsdUR0LDE5LDIsImNsci1kcm9wZG93bi1tZW51IiwxMjUpLGhlKCkpLDImYyYm''@;'; put 'put ''TWUoImNsckNsb3NlTWVudU9uSXRlbUNsaWNrIiwhMCl9ZnVuY3Rpb24gaER0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwxMzUpKDEsInNwYW4iKSxMZSgyLCJGSUxURVIgOiAiKSxkZSgzLCJiIiksTGUoNCksaGUoKSgpKCkpLDImYyl7Y29uc3QgYT1SZSgzKTtmZSg0KSx3cihhLnF1ZXJ5''@;'; put 'put ''VGV4dCl9fWZ1bmN0aW9uIGZEdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIsOTgpKDEsInNlY3Rpb24iLDk5KSgyLCJmb3JtIiwxMDApKDMsImRpdiIsMTAxKSg0LCJpbnB1dCIsMTAyLDQpLEZ0KCJrZXl1cC5lbnRlciIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPWhh''@;'; put 'put ''KDUpO3JldHVybiBDdChSZSgyKS5zZWFyY2hUYWJsZShoKSl9KSxoZSgpLGd0KDYsZUR0LDEsMCwiY2xyLWljb24iLDEwMykoNyx0RHQsMiwwLCJzcGFuIiwxMDQpLGhlKCksZGUoOCwiY2xyLWNoZWNrYm94LWNvbnRhaW5lciIpKDksImNsci1jaGVja2JveC13cmFwcGVyIikoMTAsImlucHV0''@;'; put 'put ''IiwxMDUpLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPVJlKDIpO3JldHVybiBtaShmLnNlYXJjaE51bWVyaWMsaCl8fChmLnNlYXJjaE51bWVyaWM9aCksQ3QoaCl9KSxoZSgpLGRlKDExLCJsYWJlbCIpLExlKDEyLCJOdW1lcmljIiksaGUoKSgpKCkoKSgp''@;'; put 'put ''LGRlKDEzLCJkaXYiLDEwNikoMTQsInAiLDEwNykoMTUsImNsci10b29sdGlwIiwxMDgpKDE2LCJjbHItaWNvbiIsMTA5KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKDIpLmRhdGFzZXRJbmZvPSEwKX0pLGhlKCksZ3QoMTcsbkR0LDEsMCwiY2xyLWljb24iLDEx''@;'; put 'put ''MCkoMTgsckR0LDIsMSwic3BhbiIsMTExKSgxOSxhRHQsMiwwLCJuZy1jb250YWluZXIiLDQyKSxoZSgpLGd0KDIwLHNEdCwzLDEsIm5nLWNvbnRhaW5lciIsNDIpLGhlKCkoKSxkZSgyMSwiZGl2IiwxMTIpLGd0KDIyLGREdCw1LDEsImNsci1kcm9wZG93biIsMTEzKSxoZSgpLGd0KDIzLGhE''@;'; put 'put ''dCw1LDEsImRpdiIsMTE0KSxoZSgpfWlmKDImYyl7Y29uc3QgYT1SZSgyKTtmZSg0KSxNZSgidHlwZSIsYS5zZWFyY2hOdW1lcmljPyJudW1iZXIiOiJ0ZXh0IiksZmUoMiksTWUoIm5nSWYiLCFhLnNlYXJjaExvYWRpbmcpLGZlKCksTWUoIm5nSWYiLGEuc2VhcmNoTG9hZGluZyksZmUoMyks''@;'; put 'put ''cGkoIm5nTW9kZWwiLGEuc2VhcmNoTnVtZXJpYyksZmUoNyksTWUoIm5nSWYiLG51bGw9PWEudGFibGVUaXRsZT9udWxsOmEudGFibGVUaXRsZS5pbmNsdWRlcygiLUZDIikpLGZlKCksTWUoIm5nSWYiLGEudGFibGVUaXRsZSYmYS50YWJsZVRpdGxlLmxlbmd0aD4wKSxmZSgpLE1lKCJuZ0lm''@;'; put 'put ''IixhLmRzTm90ZSYmYS5kc05vdGUubGVuZ3RoPjApLGZlKCksTWUoIm5nSWYiLGEudGFibGVUaXRsZSYmYS50YWJsZVRpdGxlLmxlbmd0aD4wKSxmZSgyKSxNZSgibmdJZiIsYS50YWJsZVRpdGxlJiYhYS5hYm9ydEFjdGl2ZSksZmUoKSxNZSgibmdJZiIsIjE9MSIhPT1hLnF1ZXJ5VGV4dCYm''@;'; put 'put ''IVlzKDEwLFJrdCkuaW5jbHVkZXMoYS5xdWVyeVRleHQpJiYhYS5hYm9ydEFjdGl2ZSl9fWZ1bmN0aW9uIHBEdChjLGwpezEmYyYmKGRlKDAsImRpdiIsMTM2KSxHdCgxLCJpbWciLDEzNyksZGUoMiwiaDMiLDEzOCksTGUoMywiIFBsZWFzZSBzZWxlY3QgYSBsaWJyYXJ5ICIpLGhlKCkoKSl9''@;'; put 'put ''ZnVuY3Rpb24gZ0R0KGMsbCl7MSZjJiZHdCgwLCJjbHItc3Bpbm5lciIsNTUpfWZ1bmN0aW9uIG1EdChjLGwpezEmYyYmKGRlKDAsImRpdiIsMTQ1KSxHdCgxLCJpbWciLDE0NiksZGUoMiwicCIsMTM4KSxMZSgzLCIgUGxlYXNlIHNlbGVjdCBhIHRhYmxlICIpLGhlKCkoKSl9ZnVuY3Rpb24g''@;'; put 'put ''dkR0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwicCIsMTQ5KSxMZSgxLCIgTm8gbGlicmFyeSBpbmZvIGZvdW5kLiBDbGljayAiKSxkZSgyLCJjbHItaWNvbiIsMTUwKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKDQpLnJlbG9hZExpYkluZm8oKSl9''@;'; put 'put ''KSxoZSgpLExlKDMsIiBidXR0b24gdG8gcmVmcmVzaC4gIiksaGUoKX19ZnVuY3Rpb24gYkR0KGMsbCl7aWYoMSZjJiYoZGUoMCwidHIiKSgxLCJ0ZCIsMTUxKSxMZSgyLCJFTkdJTkU6IiksaGUoKSxkZSgzLCJ0ZCIsMTUyKSxMZSg0KSxoZSgpKCkpLDImYyl7Y29uc3QgYT1SZSg1KTtmZSg0''@;'; put 'put ''KSxJcigiICIsYS5saWJpbmZvWzBdP2EubGliaW5mb1swXS5FTkdJTkU6IiIsIiAiKX19ZnVuY3Rpb24geUR0KGMsbCl7aWYoMSZjJiYoZGUoMCwidHIiKSgxLCJ0ZCIsMTUxKSxMZSgyLCJMSUJJRDoiKSxoZSgpLGRlKDMsInRkIiwxNTIpLExlKDQpLGhlKCkoKSksMiZjKXtjb25zdCBhPVJl''@;'; put 'put ''KDUpO2ZlKDQpLElyKCIgIixhLmxpYmluZm9bMF0/YS5saWJpbmZvWzBdLkxJQklEOiIiLCIgIil9fWZ1bmN0aW9uIF9EdChjLGwpe2lmKDEmYyYmKGRlKDAsInRyIikoMSwidGQiLDE1MSksTGUoMiwiTElCTkFNRToiKSxoZSgpLGRlKDMsInRkIiwxNTIpLExlKDQpLGhlKCkoKSksMiZjKXtj''@;'; put 'put ''b25zdCBhPVJlKDUpO2ZlKDQpLElyKCIgIixhLmxpYmluZm9bMF0/YS5saWJpbmZvWzBdLkxJQk5BTUU6IiIsIiAiKX19ZnVuY3Rpb24gd0R0KGMsbCl7aWYoMSZjJiYoZGUoMCwidHIiKSgxLCJ0ZCIsMTUxKSxMZSgyLCJMSUJTSVpFOiIpLGhlKCksZGUoMywidGQiLDE1MiksTGUoNCksZWwo''@;'; put 'put ''NSwiY29udmVydFNpemUiKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1SZSg1KTtmZSg0KSxJcigiICIsYS5saWJpbmZvWzBdP0RjKDUsMSxhLmxpYmluZm9bMF0uTElCU0laRSk6IiIsIiAiKX19ZnVuY3Rpb24gQ0R0KGMsbCl7aWYoMSZjJiYoZGUoMCwidHIiKSgxLCJ0ZCIsMTUxKSxMZSgyLCJP''@;'; put 'put ''V05FUlM6IiksaGUoKSxkZSgzLCJ0ZCIsMTUyKSxMZSg0KSxoZSgpKCkpLDImYyl7Y29uc3QgYT1SZSg1KTtmZSg0KSxJcigiICIsYS5saWJpbmZvWzBdP2EubGliaW5mb1swXS5PV05FUlM6IiIsIiAiKX19ZnVuY3Rpb24gU0R0KGMsbCl7aWYoMSZjJiYoZGUoMCwidHIiKSgxLCJ0ZCIsMTUx''@;'; put 'put ''KSxMZSgyLCJQQVRIUzoiKSxoZSgpLGRlKDMsInRkIiwxNTIpLExlKDQpLGhlKCkoKSksMiZjKXtjb25zdCBhPVJlKDUpO2ZlKDQpLElyKCIgIixhLmxpYmluZm9bMF0/YS5saWJpbmZvWzBdLlBBVEhTOiIiLCIgIil9fWZ1bmN0aW9uIE1EdChjLGwpe2lmKDEmYyYmKGRlKDAsInRyIikoMSwi''@;'; put 'put ''dGQiLDE1MSksTGUoMiwiUEVSTVM6IiksaGUoKSxkZSgzLCJ0ZCIsMTUyKSxMZSg0KSxoZSgpKCkpLDImYyl7Y29uc3QgYT1SZSg1KTtmZSg0KSxJcigiICIsYS5saWJpbmZvWzBdP2EubGliaW5mb1swXS5QRVJNUzoiIiwiICIpfX1mdW5jdGlvbiB4RHQoYyxsKXtpZigxJmMmJihkZSgwLCJ0''@;'; put 'put ''ciIpKDEsInRkIiwxNTEpLExlKDIsIlNDSEVNQVM6IiksaGUoKSxkZSgzLCJ0ZCIsMTUyKSxMZSg0KSxoZSgpKCkpLDImYyl7Y29uc3QgYT1SZSg1KTtmZSg0KSxJcigiICIsYS5saWJpbmZvWzBdP2EubGliaW5mb1swXS5TQ0hFTUFTOiIiLCIgIil9fWZ1bmN0aW9uIEVEdChjLGwpe2lmKDEm''@;'; put 'put ''YyYmKGRlKDAsInRyIikoMSwidGQiLDE1MSksTGUoMiwiVEFCTEVfQ05UOiIpLGhlKCksZGUoMywidGQiLDE1MiksTGUoNCksaGUoKSgpKSwyJmMpe2NvbnN0IGE9UmUoNSk7ZmUoNCksSXIoIiAiLGEubGliaW5mb1swXT9hLmxpYmluZm9bMF0uVEFCTEVfQ05UOiIiLCIgIil9fWZ1bmN0aW9u''@;'; put 'put ''IFREdChjLGwpe2lmKDEmYyYmKHNpKDApLGRlKDEsInRhYmxlIiksZ3QoMixiRHQsNSwxLCJ0ciIsNDIpKDMseUR0LDUsMSwidHIiLDQyKSg0LF9EdCw1LDEsInRyIiw0MikoNSx3RHQsNiwzLCJ0ciIsNDIpKDYsQ0R0LDUsMSwidHIiLDQyKSg3LFNEdCw1LDEsInRyIiw0MikoOCxNRHQsNSwx''@;'; put 'put ''LCJ0ciIsNDIpKDkseER0LDUsMSwidHIiLDQyKSgxMCxFRHQsNSwxLCJ0ciIsNDIpLGhlKCksbGkoKSksMiZjKXtjb25zdCBhPVJlKDQpO2ZlKDIpLE1lKCJuZ0lmIiwiIiE9PWEubGliaW5mb1swXS5FTkdJTkUpLGZlKCksTWUoIm5nSWYiLCIiIT09YS5saWJpbmZvWzBdLkxJQklEKSxmZSgp''@;'; put 'put ''LE1lKCJuZ0lmIiwiIiE9PWEubGliaW5mb1swXS5MSUJOQU1FKSxmZSgpLE1lKCJuZ0lmIixudWxsIT09YS5saWJpbmZvWzBdLkxJQlNJWkUpLGZlKCksTWUoIm5nSWYiLCIiIT09YS5saWJpbmZvWzBdLk9XTkVSUyksZmUoKSxNZSgibmdJZiIsIiIhPT1hLmxpYmluZm9bMF0uUEFUSFMpLGZl''@;'; put 'put ''KCksTWUoIm5nSWYiLCIiIT09YS5saWJpbmZvWzBdLlBFUk1TKSxmZSgpLE1lKCJuZ0lmIiwiIiE9PWEubGliaW5mb1swXS5TQ0hFTUFTKSxmZSgpLE1lKCJuZ0lmIixudWxsIT09YS5saWJpbmZvWzBdLlRBQkxFX0NOVCl9fWZ1bmN0aW9uIEFEdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIs''@;'; put 'put ''MTQ3KSxndCgxLHZEdCw0LDAsInAiLDE0OCkoMixURHQsMTEsOSwibmctY29udGFpbmVyIiw0MiksaGUoKSksMiZjKXtjb25zdCBhPVJlKDMpO2ZlKCksTWUoIm5nSWYiLGEubGliaW5mby5sZW5ndGg8MSksZmUoKSxNZSgibmdJZiIsYS5saWJpbmZvLmxlbmd0aD4wKX19ZnVuY3Rpb24ga0R0''@;'; put 'put ''KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7c2koMCksZGUoMSwiZGl2IiwxMzkpLEd0KDIsInNlY3Rpb24iLDk5KSxkZSgzLCJkaXYiLDE0MCkoNCwicCIsOTEpLExlKDUpLGhlKCksZGUoNiwiY2xyLWljb24iLDEyMSksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChS''@;'; put 'put ''ZSgyKS5yZWxvYWRMaWJJbmZvKCkpfSksaGUoKSgpLEd0KDcsImRpdiIsMTEyKSxoZSgpLGRlKDgsImRpdiIsMTQxKSxndCg5LGdEdCwxLDAsImNsci1zcGlubmVyIiwxNDIpLGhlKCksZ3QoMTAsbUR0LDQsMCwiZGl2IiwxNDMpKDExLEFEdCwzLDIsImRpdiIsMTQ0KSxsaSgpfWlmKDImYyl7''@;'; put 'put ''Y29uc3QgYT1SZSgyKTtmZSg1KSxJcigiICIsYS5saWIsIiAiKSxmZSg0KSxNZSgibmdJZiIsbnVsbD09PWEubGliaW5mbyksZmUoKSxNZSgibmdJZiIsbnVsbCE9PWEubGliaW5mbyksZmUoKSxNZSgibmdJZiIsbnVsbCE9PWEubGliaW5mbyl9fWZ1bmN0aW9uIEREdChjLGwpezEmYyYmKGRl''@;'; put 'put ''KDAsImgzIiwxNTYpLExlKDEsIiBObyBkYXRhIGZvdW5kIHdpdGggZ2l2ZW4gY29uZGl0aW9ucyAiKSxoZSgpKX1mdW5jdGlvbiBJRHQoYyxsKXsxJmMmJihkZSgwLCJoMyIsMTU2KSxMZSgxLCIgTm8gZGF0YSBmb3VuZCBkdWUgdG8gc2FzIHJlcXVlc3QgZXJyb3IgIiksaGUoKSl9ZnVuY3Rp''@;'; put 'put ''b24gUkR0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwxNTMpLEd0KDEsImNsci1pY29uIiwxNTQpLGd0KDIsRER0LDIsMCwiaDMiLDE1NSkoMyxJRHQsMiwwLCJoMyIsMTU1KSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoMik7ZmUoMiksTWUoIm5nSWYiLGEubm9EYXRhKSxmZSgpLE1lKCJuZ0lm''@;'; put 'put ''IixhLm5vRGF0YVJlcUVycil9fWZ1bmN0aW9uIExEdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMTU3KSxHdCgxLCJob3QtdGFibGUiLDE1OCksaGUoKSksMiZjKXtjb25zdCBhPVJlKDIpO2ZlKCksTWUoIm11bHRpQ29sdW1uU29ydGluZyIsITApKCJ2aWV3cG9ydFJvd1JlbmRlcmluZ09m''@;'; put 'put ''ZnNldCIsNTApKCJkYXRhIixhLmhvdFRhYmxlLmRhdGEpKCJjb2xIZWFkZXJzIixhLmhvdFRhYmxlLmNvbEhlYWRlcnMpKCJjb2x1bW5zIixhLmhvdFRhYmxlLmNvbHVtbnMpKCJjb3B5UGFzdGUiLGEuaG90VGFibGUuY29weVBhc3RlKSgiY29udGV4dE1lbnUiLGEuaG90VGFibGUuY29udGV4''@;'; put 'put ''dE1lbnUpKCJmaWx0ZXJzIiwhMCkoImRyb3Bkb3duTWVudSIsYS5ob3RUYWJsZS5kcm9wZG93bk1lbnUpKCJoZWlnaHQiLGEuaG90VGFibGUuaGVpZ2h0KSgibW9kaWZ5Q29sV2lkdGgiLGEubWF4V2lkdGhDaGVrZXIpKCJjZWxscyIsYS5ob3RUYWJsZS5jZWxscykoIm1heFJvd3MiLGEuaG90''@;'; put 'put ''VGFibGUubWF4Um93cykoIm1hbnVhbENvbHVtblJlc2l6ZSIsITApKCJhZnRlckdldENvbEhlYWRlciIsYS5ob3RUYWJsZS5hZnRlckdldENvbEhlYWRlcikoInJvd0hlYWRlcnMiLGEuaG90VGFibGUucm93SGVhZGVycykoInJvd0hlYWRlcldpZHRoIixhLmhvdFRhYmxlLnJvd0hlYWRlcldp''@;'; put 'put ''ZHRoKSgicm93SGVpZ2h0cyIsYS5ob3RUYWJsZS5yb3dIZWlnaHRzKSgibGljZW5zZUtleSIsYS5ob3RUYWJsZS5saWNlbnNlS2V5KX19ZnVuY3Rpb24gT0R0KGMsbCl7aWYoMSZjJiYoZGUoMCwicCIsMTU5KSxMZSgxKSxHdCgyLCJjb250YWN0LWxpbmsiKSxoZSgpKSwyJmMpe2NvbnN0IGE9''@;'; put 'put ''UmUoMik7ZmUoKSxJcigiIFRvIGRpc3BsYXkgbW9yZSB0aGFuICIsYS5saWNlbmNlU3RhdGUudmFsdWUudmlld2VyX3Jvd3NfYWxsb3dlZCwiIHJvd3MsIGNvbnRhY3QgIil9fWZ1bmN0aW9uIFBEdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsOTIpLGd0KDEsZkR0LDI0LDExLCJkaXYiLDkz''@;'; put 'put ''KSgyLHBEdCw0LDAsImRpdiIsOTQpKDMsa0R0LDEyLDQsIm5nLWNvbnRhaW5lciIsNDIpKDQsUkR0LDQsMiwiZGl2Iiw5NSkoNSxMRHQsMiwxOSwiZGl2Iiw5NiksZGUoNiwiZGl2IiksZ3QoNyxPRHQsMywxLCJwIiw5NyksaGUoKSgpKSwyJmMpe2NvbnN0IGE9UmUoKTtmZSgpLE1lKCJuZ0lm''@;'; put 'put ''IixhLnRhYmxlKSxmZSgpLE1lKCJuZ0lmIiwhKGEubGlifHxhLnRhYmxlfHxhLm5vRGF0YVJlcUVycnx8YS5ub0RhdGEpKSxmZSgpLE1lKCJuZ0lmIiwhYS5ub0RhdGEmJiFhLm5vRGF0YVJlcUVyciYmIWEudGFibGUmJmEubGliKSxmZSgpLE1lKCJuZ0lmIixhLm5vRGF0YXx8YS5ub0RhdGFS''@;'; put 'put ''ZXFFcnIpLGZlKCksTWUoIm5nSWYiLCFhLm5vRGF0YSYmIWEubm9EYXRhUmVxRXJyJiZhLnRhYmxlKSxmZSgyKSxNZSgibmdJZiIsYS5saWNlbmNlU3RhdGUudmFsdWUudmlld2VyX3Jvd3NfYWxsb3dlZCE9PWEuSW5maW5pdHkmJmEuaG90VGFibGUuZGF0YSYmYS5ob3RUYWJsZS5kYXRhLmxl''@;'; put 'put ''bmd0aD5hLmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3ZXJfcm93c19hbGxvd2VkKX19bGV0IHpOPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0sRCxaLHJlLGNlKXt0aGlzLmxpY2VuY2VTZXJ2aWNlPWEsdGhpcy5zYXNTdG9yZVNlcnZpY2U9ZCx0aGlzLnNhc1NlcnZpY2U9''@;'; put 'put ''aCx0aGlzLnJvdXRlcj1mLHRoaXMucm91dGU9dix0aGlzLmV2ZW50U2VydmljZT1NLHRoaXMubG9nZ2VyU2VydmljZT1ELHRoaXMuaGVscGVyU2VydmljZT1aLHRoaXMubG9jYXRpb249cmUsdGhpcy5jZGY9Y2UsdGhpcy5xdWVyeUZpbHRlckNvbXBMaXN0PW5ldyBmZCx0aGlzLmxpYnJhcmll''@;'; put 'put ''c1BhZ2luZz0hMSx0aGlzLmxpYnJhcmllc1NlYXJjaD0iIix0aGlzLmxpYnJhcnlUYWJsZXNSZWY9IiIsdGhpcy5saWJyYXJpZXNUcmVlRXhwYW5kZWQ9ITEsdGhpcy5saWJpbmZvPW51bGwsdGhpcy50YWJsZXVyaT1udWxsLHRoaXMuZmlsdGVyPSExLHRoaXMuZmlsdGVyQ29scz1bXSx0aGlz''@;'; put 'put ''Lm51bGxWYXJpYWJsZXM9ITEsdGhpcy5hYm9ydEFjdGl2ZT0hMSx0aGlzLnVybEZpbHRlclBrPW51bGwsdGhpcy5xdWVyeVRleHQ9IiIsdGhpcy53ZWJRdWVyeVRleHQ9IiIsdGhpcy5xdWVyeUVycj0hMSx0aGlzLnRhYmxlRmxhZz0hMCx0aGlzLmxpYnJhcmllc0xvYWRpbmc9ITEsdGhpcy5s''@;'; put 'put ''b2FkaW5nVGFibGVWaWV3PSExLHRoaXMuc3dpdGNoRmxhZz0hMSx0aGlzLm5vRGF0YT0hMSx0aGlzLm5vRGF0YVJlcUVycj0hMSx0aGlzLnRhYmxlRGlzYWJsZT0hMSx0aGlzLmFjdGlvbkRpc2FibGU9ITEsdGhpcy5vcGVuRG93bmxvYWQ9ITEsdGhpcy53ZWJRdWVyeT0hMSx0aGlzLndlYlF1''@;'; put 'put ''ZXJ5VGFiPSExLHRoaXMuZG93bmxvYWRGb3JtYXQ9IkNTViIsdGhpcy5zYXNqc0NvbmZpZz1uZXcgbWguU0FTanNDb25maWcsdGhpcy5zZWFyY2hMb2FkaW5nPSExLHRoaXMuc2VhcmNoTnVtZXJpYz0hMSx0aGlzLm51bWJlck9mUm93cz1udWxsLHRoaXMuaGVhZGVyUGtzPVtdLHRoaXMuJGRh''@;'; put 'put ''dGFGb3JtYXRzPW51bGwsdGhpcy5kYXRhc2V0SW5mbz0hMSx0aGlzLmRzbWV0YT1bXSx0aGlzLnZlcnNpb25zPVtdLHRoaXMuZHNOb3RlPSIiLHRoaXMubGljZW5jZVN0YXRlPXRoaXMubGljZW5jZVNlcnZpY2UubGljZW5jZVN0YXRlLHRoaXMuSW5maW5pdHk9MS8wLHRoaXMuaG90VGFibGU9''@;'; put 'put ''e2RhdGE6W10sY29sSGVhZGVyczpbXSxjb2x1bW5zOltdLGhlaWdodDoiMTAwJSIsbWF4Um93czp0aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3ZXJfcm93c19hbGxvd2VkfHwxLzAsc2V0dGluZ3M6e30sbGljZW5zZUtleTp2b2lkIDAscm93SGVhZGVyczpiZT0+IiAiLGFmdGVyR2V0Q29s''@;'; put 'put ''SGVhZGVyOihiZSxFZSxCZSk9PntFZS5jbGFzc0xpc3QuYWRkKEtuLmhhbmRzb250YWJsZS5kYXJrVGFibGVIZWFkZXJDbGFzcyl9LHJvd0hlYWRlcldpZHRoOjE1LHJvd0hlaWdodHM6MjAsY29udGV4dE1lbnU6WyJjb3B5X3dpdGhfY29sdW1uX2hlYWRlcnMiLCJjb3B5X2NvbHVtbl9oZWFk''@;'; put 'put ''ZXJzX29ubHkiXSxjb3B5UGFzdGU6e2NvcHlDb2x1bW5IZWFkZXJzOiEwLGNvcHlDb2x1bW5IZWFkZXJzT25seTohMH0sZHJvcGRvd25NZW51OntpdGVtczp7bWFrZV9yZWFkX29ubHk6e25hbWU6Im1ha2VfcmVhZF9vbmx5In0sYWxpZ25tZW50OntuYW1lOiJhbGlnbm1lbnQifSxzcDE6e25h''@;'; put 'put ''bWU6Ii0tLS0tLS0tLSJ9LGluZm86e25hbWU6InRlc3QgaW5mbyIscmVuZGVyZXI6KGJlLEVlLEJlLHFlLHJ0LHB0KT0+e2NvbnN0IGR0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTtsZXQgSnQsdm49Ik5vIGluZm8gZm91bmQiO2lmKHRoaXMuaG90SW5zdGFuY2Upe2NvbnN0IENu''@;'; put 'put ''PXRoaXMuaG90SW5zdGFuY2UuZ2V0U2VsZWN0ZWQoKXx8W10sdG49Q24/Q25bMF1bMV06LTEsTW49dGhpcy5ob3RJbnN0YW5jZT8uY29sVG9Qcm9wKHRuKTtKdD10aGlzLiRkYXRhRm9ybWF0cz8udmFyc1tNbl0sSnQmJih2bj1gTEFCRUw6ICR7SnQ/LmxhYmVsfTxicj5UWVBFOiAke0p0Py50''@;'; put 'put ''eXBlfTxicj5MRU5HVEg6ICR7SnQ/Lmxlbmd0aH08YnI+Rk9STUFUOiAke0p0Py5mb3JtYXR9YCl9cmV0dXJuIGR0LmlubmVySFRNTD12bixkdH19fX19LHRoaXMuaG90SW5zdGFuY2U9bnVsbCx0aGlzLmhvdEluc3RhbmNlQ2xpY2tMaXN0ZW5lcj0hMSx0aGlzLnZpZXdib3hPcGVuPSExLHRo''@;'; put 'put ''aXMuaG90VGFibGVSZWdpc3RlcmVyPW5ldyBZbSx0aGlzLnNhc2pzQ29uZmlnPXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpfW5nT25Jbml0KCl7IiIhPT1Lbi52aWV3ZXIuY3VycmVudFNlbGVjdGlvbiYmMD09PU9iamVjdC5rZXlzKHRoaXMucm91dGUuc25hcHNob3QucGFyYW1z''@;'; put 'put ''KS5sZW5ndGgmJnRoaXMucm91dGVyLm5hdmlnYXRlKFtLbi52aWV3ZXIuY3VycmVudFNlbGVjdGlvbl0se3F1ZXJ5UGFyYW1zSGFuZGxpbmc6InByZXNlcnZlIn0pLHZvaWQgMCE9PXRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLmxpYk1lbSYmKEtuLnZpZXdlci5jdXJyZW50U2VsZWN0aW9u''@;'; put 'put ''PSJ2aWV3L2RhdGEiKSx0aGlzLmxpY2VuY2VTZXJ2aWNlLmhvdF9saWNlbnNlX2tleS5zdWJzY3JpYmUoYT0+e3RoaXMuaG90VGFibGUubGljZW5zZUtleT1hfSl9bmV3Vmlld2JveCgpe3RoaXMudmlld2JveE9wZW49ITB9cmVzZXRGaWx0ZXIoKXt0aGlzLnF1ZXJ5RmlsdGVyQ29tcExpc3Qu''@;'; put 'put ''Zmlyc3QmJnRoaXMucXVlcnlGaWx0ZXJDb21wTGlzdC5maXJzdC5yZXNldEZpbHRlcigpfXNlYXJjaFRhYmxlKGEpe3ZhciBkPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2Quc2VhcmNoTG9hZGluZz0hMDtsZXQgaD1hLnZhbHVlLGY9ZC5saWIrIi4iK2QudGFibGUsdj1wYXJzZUludChk''@;'; put 'put ''LnJvdXRlLnNuYXBzaG90LnBhcmFtcy5maWx0ZXJJZCl8fDA7eWllbGQgZC5zYXNTdG9yZVNlcnZpY2Uudmlld0RhdGFTZWFyY2goaCxkLnNlYXJjaE51bWVyaWMsZix2KS50aGVuKE09PntNLnNhc3BhcmFtc3x8TS52aWV3RGF0YT8oZC5ob3RUYWJsZS5kYXRhPU0udmlld2RhdGEsZC4kZGF0''@;'; put 'put ''YUZvcm1hdHM9TS4kdmlld2RhdGEsZC5kc21ldGE9TS5kc21ldGEsZC52ZXJzaW9ucz1NLnZlcnNpb25zfHxbXSxkLnNldERTTm90ZSgpLGQubnVtYmVyT2ZSb3dzPU0uc2FzcGFyYW1zWzBdLk5PQlMsZC5xdWVyeVRleHQ9TS5zYXNwYXJhbXNbMF0uRklMVEVSX1RFWFQsZC5oZWFkZXJQa3M9''@;'; put 'put ''TS5zYXNwYXJhbXNbMF0uUEtfRklFTERTLnNwbGl0KCIgIiksMD09PWQuaG90VGFibGUuZGF0YS5sZW5ndGg/ZC5ub0RhdGE9ITA6KGQubm9EYXRhPSExLGQudGFibGVGbGFnPSExLGQuc2V0dXBIb3QoKSkpOmQuc2VhcmNoTG9hZGluZz0hMX0pLmNhdGNoKE09PntkLmxvZ2dlclNlcnZpY2Uu''@;'; put 'put ''ZXJyb3IoTSl9KSxkLnNlYXJjaExvYWRpbmc9ITF9KSgpfXJlbG9hZFRhYmxlRGF0YSgpe3RoaXMudmlld0RhdGEodGhpcy51cmxGaWx0ZXJQa3x8MCl9cmVsb2FkTGliSW5mbygpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2EubGliaW5mbz1udWxsLGEuc2FzU3RvcmVTZXJ2''@;'; put 'put ''aWNlLnJlZnJlc2hMaWJJbmZvKGEubGliKS50aGVuKGZ1bmN0aW9uKCl7dmFyIGQ9ZWUoZnVuY3Rpb24qKGgpe2EubGliaW5mbz1oLmxpYmluZm8sS24udmlld2VyLmxpYmluZm89YS5saWJpbmZvO2NvbnN0IGY9YS5saWJyYXJpZXMuZmluZCh2PT52LkxJQlJBUllSRUY9PT1hLmxpYik7ZiYm''@;'; put 'put ''KGYubGliaW5mbz1hLmxpYmluZm8pfSk7cmV0dXJuIGZ1bmN0aW9uKGgpe3JldHVybiBkLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCksZD0+e2EubG9nZ2VyU2VydmljZS5lcnJvcihkKSxudWxsPT09YS5saWJpbmZvJiYoYS5saWJpbmZvPVtdKX0pfSkoKX1maWx0ZXJGbihhKXt0aGlzLmxp''@;'; put 'put ''YnJhcmllcz10aGlzLmxpYnJhcmllcy5maWx0ZXIoaD0+LTEhPT1oLkxJQlJBUllOQU1FLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihhLnRvTG9jYWxlTG93ZXJDYXNlKCkpKX1kb3dubG9hZERhdGEoKXtsZXQgYT10aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCxkPXRoaXMuc2FzanNDb25maWcu''@;'; put 'put ''YXBwTG9jO2NvbnN0IGg9dGhpcy5zYXNTZXJ2aWNlLmdldEV4ZWN1dGlvblBhdGgoKTtsZXQgRCxmPSImdHlwZT0iK3RoaXMuZG93bmxvYWRGb3JtYXQsdj0iJnRhYmxlPSIrdGhpcy50YWJsZVRpdGxlLE09IlNBU1ZJWUEiPT09dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlP2AmX2NvbnRl''@;'; put 'put ''eHRuYW1lPSR7dGhpcy5zYXNqc0NvbmZpZy5jb250ZXh0TmFtZX1gOiIiO0Q9dHlwZW9mIHRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLmZpbHRlcklkPiJ1Ij8wOnBhcnNlSW50KHRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLmZpbHRlcklkKSx3aW5kb3cub3BlbihhK2grIi8/X3Byb2dy''@;'; put 'put ''YW09IitkKyIvc2VydmljZXMvcHVibGljL2dldHJhd2RhdGEiK2YrditNKyImZmlsdGVyPSIrRCksdGhpcy5vcGVuRG93bmxvYWQ9ITF9ZG93bmxvYWREREwoKXtsZXQgYT10aGlzLmxpYixkPXRoaXMudGFibGUsaD10aGlzLmRvd25sb2FkRm9ybWF0LnJlcGxhY2UoIl9EREwiLCIiKSxmPXRo''@;'; put 'put ''aXMuc2FzanNDb25maWcuc2VydmVyVXJsLHY9dGhpcy5zYXNqc0NvbmZpZy5hcHBMb2M7Y29uc3QgTT10aGlzLnNhc1NlcnZpY2UuZ2V0RXhlY3V0aW9uUGF0aCgpO3dpbmRvdy5vcGVuKGYrTSsiLz9fcHJvZ3JhbT0iK3YrIi9zZXJ2aWNlcy9wdWJsaWMvZ2V0ZGRsIitgJmRzPSR7ZH0mbGli''@;'; put 'put ''cmVmPSR7YX0mZmxhdm91cj0ke2h9JHsiU0FTVklZQSI9PT10aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGU/YCZfY29udGV4dG5hbWU9JHt0aGlzLnNhc2pzQ29uZmlnLmNvbnRleHROYW1lfWA6IiJ9YCksdGhpcy5vcGVuRG93bmxvYWQ9ITF9b25DbGlDb21tYW5kRm9jdXMoYSl7YS5wcmV2''@;'; put 'put ''ZW50RGVmYXVsdCgpLGEudGFyZ2V0LnNlbGVjdCgpfWVkaXRUYWJsZSgpe3RoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9lZGl0b3IvIit0aGlzLmxpYlRhYil9dGFibGVFZGl0RXhpc3RzKCl7bGV0IGE9e307YT1Lbi5lZGl0b3IubGlic0FuZFRhYmxlcztsZXQgZD10aGlzLmxpYlRhYi5z''@;'; put 'put ''cGxpdCgiLiIpWzFdLGg9dGhpcy5saWJUYWIuc3BsaXQoIi4iKVswXTtyZXR1cm4hIWFbaF0mJmFbaF0uaW5jbHVkZXMoZCl9Z29Ub0xpbmVhZ2UoKXtsZXQgZD1gL3ZpZXcvbGluZWFnZS8ke3RoaXMudGFibGV1cmkuc3BsaXQoIlxcIilbMV19L1JFVkVSU0VgO3RoaXMucm91dGVyLm5hdmln''@;'; put 'put ''YXRlQnlVcmwoZCl9c2hvd1dlYlF1ZXJ5KCl7bGV0IGE7dGhpcy53ZWJRdWVyeT0hMCxhPXR5cGVvZiB0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5maWx0ZXJJZD4idSI/MDpwYXJzZUludCh0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5maWx0ZXJJZCk7bGV0IGQ9d2luZG93LmxvY2F0''@;'; put 'put ''aW9uLnBvcnQubGVuZ3RoPjA/IjoiK3dpbmRvdy5sb2NhdGlvbi5wb3J0OiIiO2NvbnN0IGg9dGhpcy5zYXNTZXJ2aWNlLmdldEV4ZWN1dGlvblBhdGgoKTtsZXQgdj1gJHt3aW5kb3cubG9jYXRpb24ucHJvdG9jb2x9Ly8ke3dpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZX0ke2R9LyR7aH0vP19w''@;'; put 'put ''cm9ncmFtPSR7dGhpcy5zYXNqc0NvbmZpZy5hcHBMb2N9L3NlcnZpY2VzL3B1YmxpYy9nZXRyYXdkYXRhJnR5cGU9V0VCJHt0aGlzLndlYlF1ZXJ5VGFiPyJUQUIiOiJDU1YifSZ0YWJsZT0ke3RoaXMudGFibGVUaXRsZX0keyImZmlsdGVyPSIrYX1gO3RoaXMud2ViUXVlcnlUZXh0PXYucmVw''@;'; put 'put ''bGFjZSgvIC9naW0sIiUyMCIpfWNvcHlUb0NsaXAoKXtsZXQgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZXh0YXJlYSIpO2Euc3R5bGUucG9zaXRpb249ImZpeGVkIixhLnN0eWxlLmxlZnQ9IjAiLGEuc3R5bGUudG9wPSIwIixhLnN0eWxlLm9wYWNpdHk9IjAiLGEudmFsdWU9dGhpcy53''@;'; put 'put ''ZWJRdWVyeVRleHQsZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhKSxhLmZvY3VzKCksYS5zZWxlY3QoKSxkb2N1bWVudC5leGVjQ29tbWFuZCgiY29weSIpLGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoYSl9Z29Ub1ZpZXdlcigpe3RoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi92aWV3''@;'; put 'put ''L2RhdGEiKX1zaG93VGFibGVTZWxlY3QoKXt0aGlzLnRhYmxlRmxhZz0hdGhpcy50YWJsZUZsYWd9Y2hlY2tFeHBhbmQoYSl7fWNvbGxhcHNlTGlicmFyeUl0ZW1zKGEsZCl7YS5mb3JFYWNoKGg9PntoLkxJQlJBUllSRUYhPT1kLkxJQlJBUllSRUYmJihoLmV4cGFuZGVkPSExKX0pfWxvYWRN''@;'; put 'put ''b3JlTGlicmFyaWVzKCl7dGhpcy5saWJyYXJpZXNQYWdpbmd8fCh0aGlzLmxpYnJhcmllc1BhZ2luZz0hMCx0aGlzLmhlbHBlclNlcnZpY2UuZGlzcGxheUxpYnJhcmllcyh0aGlzLmxpYnJhcmllcywhMCksdGhpcy5saWJyYXJpZXNQYWdpbmc9ITEpfXRyZWVOb2RlQ2xpY2tlZChhLGQpeyJD''@;'; put 'put ''b2xsYXBzZSI9PT1hLnRhcmdldC50aXRsZSYmdGhpcy5jb2xsYXBzZUxpYnJhcnlJdGVtcyh0aGlzLmxpYnJhcmllcyxkKX1saWJyYXJ5RXhwYW5kZWRDaGFuZ2UoYSxkKXthJiZ0aGlzLmNvbGxhcHNlTGlicmFyeUl0ZW1zKHRoaXMubGlicmFyaWVzLGQpfWxpYnJhcnlPbkNsaWNrKGEsZCxo''@;'; put 'put ''KXt2YXIgZj10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtpZihkLnRhYmxlcz9kLmV4cGFuZGVkPSEhaHx8IWQuZXhwYW5kZWQ6eWllbGQgZi5zZWxlY3RUYWJsZShhLCExLGQpLGQuZXhwYW5kZWQpe2YuY2RmLmRldGVjdENoYW5nZXMoKTtsZXQgdj1kb2N1bWVudC5xdWVyeVNlbGVjdG9y''@;'; put 'put ''KGAjc2VhcmNoXyR7ZC5MSUJSQVJZUkVGfWApO2YubG9nZ2VyU2VydmljZS5sb2coIltsaWJUcmVlU2VhcmNoSW5wdXRdIix2KSx2JiZ2LmZvY3VzKCksZCYmZC5saWJpbmZvJiYoZi5saWJpbmZvPWQubGliaW5mbyksZi5saWImJmYudGFibGUmJiFoP2Yucm91dGVyLm5hdmlnYXRlKFsiL3Zp''@;'; put 'put ''ZXcvZGF0YSJdLHtza2lwTG9jYXRpb25DaGFuZ2U6ITAscXVlcnlQYXJhbXNIYW5kbGluZzoicHJlc2VydmUifSkudGhlbigoKT0+e2Yucm91dGVyLm5hdmlnYXRlKFsiL3ZpZXcvZGF0YS8iK2YubGliXSx7cXVlcnlQYXJhbXNIYW5kbGluZzoicHJlc2VydmUifSl9KTpmLmxpYiYmIWYudGFi''@;'; put 'put ''bGUmJmYubG9jYXRpb24ucmVwbGFjZVN0YXRlKCIvdmlldy9kYXRhLyIrZi5saWIpfWYuY29sbGFwc2VMaWJyYXJ5SXRlbXMoZi5saWJyYXJpZXMsZCl9KSgpfW9uVGFibGVDbGljayhhLGQpe3RoaXMubGliPWQuTElCUkFSWVJFRix0aGlzLnRhYmxlPWEsdGhpcy5zZWxlY3RMaWJUYWJsZShh''@;'; put 'put ''KSx0aGlzLnZpZXdEYXRhKDApfXNlbGVjdFRhYmxlKGEsZCxoKXt2YXIgZj10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtoLmxvYWRpbmdUYWJsZXM9ITAsZi50YWJsZT0hMSxmLnRhYmxlRGlzYWJsZT0hMCwiUGxlYXNlIHNlbGVjdCBsaWJyYXJ5IiE9PWE/S24udmlld2VyLnRhYmxlc1Nl''@;'; put 'put ''dCYmZD8oZi5hYm9ydEFjdGl2ZT0hMSxmLnRhYmxlRGlzYWJsZT0hMSxmLnRhYmxlcz1Lbi52aWV3ZXIudGFibGVzLGYubGliaW5mbz1Lbi52aWV3ZXIubGliaW5mbyk6KGYubGliaW5mbz1udWxsLHlpZWxkIGYuc2FzU3RvcmVTZXJ2aWNlLnZpZXdUYWJsZXMoYSkudGhlbih2PT57Zi5hYm9y''@;'; put 'put ''dEFjdGl2ZT0hMSxmLnRhYmxlRGlzYWJsZT0hMTtsZXQgTT12Lm1wdGFibGVzLm1hcChmdW5jdGlvbihEKXtyZXR1cm4gRC5NRU1OQU1FfSk7Zi5saWJpbmZvPXYubGliaW5mb3x8W10sZi50YWJsZXM9TSxoJiYoaC50YWJsZXM9TSxoLmxpYmluZm89Zi5saWJpbmZvKSxLbi52aWV3ZXIubGli''@;'; put 'put ''cmFyaWVzPWYubGlicmFyaWVzLEtuLnZpZXdlci5saWJyYXJ5PWYubGliLEtuLnZpZXdlci50YWJsZXM9Zi50YWJsZXMsS24udmlld2VyLmxpYmluZm89Zi5saWJpbmZvLEtuLnZpZXdlci50YWJsZXNTZXQ9ITB9KS5jYXRjaCh2PT57Zi5sb2dnZXJTZXJ2aWNlLmVycm9yKHYpLGYuYWJvcnRB''@;'; put 'put ''Y3RpdmU9ITAsZi5ub0RhdGE9ITAsZi50YWJsZVRpdGxlPSIiLGYudGFibGVEaXNhYmxlPSEwfSkpOmYudGFibGVEaXNhYmxlPSEwLEtuLnZpZXdlci5saWJyYXJ5PWYubGliLGR8fGYuY2xlYXJHbG9iYWxzRmlsdGVyKCksaC5sb2FkaW5nVGFibGVzPSExLGguZXhwYW5kZWQ9IWguZXhwYW5k''@;'; put 'put ''ZWR9KSgpfXNlbGVjdExpYlRhYmxlKGEsZCl7IlBsZWFzZSBzZWxlY3QgdGFibGUiIT09YT8odGhpcy5hY3Rpb25EaXNhYmxlPSExLHRoaXMubGliVGFiPXRoaXMubGliKyIuIit0aGlzLnRhYmxlKTp0aGlzLmFjdGlvbkRpc2FibGU9ITAsS24udmlld2VyLnRhYmxlPWEsZHx8dGhpcy5jbGVh''@;'; put 'put ''ckdsb2JhbHNGaWx0ZXIoKSx0aGlzLmxvZ2dlclNlcnZpY2UubG9nKHRoaXMubGliVGFiKX1jbGVhckdsb2JhbHNGaWx0ZXIoKXtLbi52aWV3ZXIuZmlsdGVyLmxpYmRzPSIiLEtuLnZpZXdlci5maWx0ZXIud2hlcmVDbGF1c2U9IiIsS24udmlld2VyLmZpbHRlci5ncm91cExvZ2ljPSIiLEtu''@;'; put 'put ''LnZpZXdlci5maWx0ZXIuY2xhdXNlcz1bXSxLbi52aWV3ZXIuZmlsdGVyLmNvbHM9W10sS24udmlld2VyLmZpbHRlci52YWxzPVtdfWxpYlRhYkFjdGl2ZShhLGQpe3JldHVybiEhdGhpcy5saWJUYWImJmErIi4iK2Q9PT10aGlzLmxpYlRhYn10cmVlT25GaWx0ZXIoYSxkKXt0aGlzLmhlbHBl''@;'; put 'put ''clNlcnZpY2UudHJlZU9uRmlsdGVyKGEsZCl9bGlicmFyeU9uRmlsdGVyKCl7dGhpcy5oZWxwZXJTZXJ2aWNlLmxpYnJhcnlPbkZpbHRlcih0aGlzLmxpYnJhcmllcyx0aGlzLmxpYnJhcmllc1NlYXJjaCwiTElCUkFSWU5BTUUiKSxLbi52aWV3ZXIubGlicmFyaWVzU2VhcmNoPXRoaXMubGli''@;'; put 'put ''cmFyaWVzU2VhcmNofWxpYnJhcnlSZXNldEZpbHRlcigpe3RoaXMuaGVscGVyU2VydmljZS5yZXNldEFycmF5RmlsdGVyKHRoaXMubGlicmFyaWVzKX12aWV3RGF0YShhKXt2YXIgZD10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtsZXQgaDtpZihkLmxvYWRpbmdUYWJsZVZpZXc9ITAsdHlw''@;'; put 'put ''ZW9mIGQubGliRGF0YXNldD4idSIpaD1kLmxpYisiLiIrZC50YWJsZTtlbHNlIGlmKHR5cGVvZiBkLmxpYj4idSImJnR5cGVvZiBkLnRhYmxlPiJ1Iil7bGV0IE09W107aWYoTT1kLmxpYkRhdGFzZXQuc3BsaXQoIi4iKSxLbi52aWV3ZXIuc3RhcnR1cFNldD9kLmxpYnJhcmllcz1Lbi52aWV3''@;'; put 'put ''ZXIubGlicmFyaWVzOnlpZWxkIGQuc2FzU3RvcmVTZXJ2aWNlLnZpZXdMaWJzKCkudGhlbihEPT57ZC5saWJyYXJpZXM9RC5zYXNsaWJzfSkuY2F0Y2goRD0+e2QubG9nZ2VyU2VydmljZS5lcnJvcihEKX0pLGQubGliPU1bMF0sS24udmlld2VyLnN0YXJ0dXBTZXQpZC50YWJsZXM9S24udmll''@;'; put 'put ''d2VyLnRhYmxlcztlbHNle2xldCBEPWQubGlicmFyaWVzLmZpbmQoWj0+Wi5MSUJSQVJZUkVGLnRvTG93ZXJDYXNlKCk9PT1kLmxpYi50b0xvd2VyQ2FzZSgpKTt5aWVsZCBkLnNhc1N0b3JlU2VydmljZS52aWV3VGFibGVzKGQubGliKS50aGVuKFo9PntkLnRhYmxlcz1aLm1wdGFibGVzLm1h''@;'; put 'put ''cChmdW5jdGlvbihyZSl7cmV0dXJuIHJlLk1FTU5BTUV9KSxELnRhYmxlcz1kLnRhYmxlcyxLbi52aWV3ZXIubGlicmFyaWVzPWQubGlicmFyaWVzLEtuLnZpZXdlci50YWJsZXM9ZC50YWJsZXMsS24udmlld2VyLnN0YXJ0dXBTZXQ9ITB9KS5jYXRjaChaPT57ZC5sb2dnZXJTZXJ2aWNlLmVy''@;'; put 'put ''cm9yKFopfSl9ZC50YWJsZT1NWzFdLGQudGFibGVGbGFnPSExLGg9ZC5saWJEYXRhc2V0LGQubGliVGFiPWh9ZWxzZSBLbi52aWV3ZXIuc3RhcnR1cFNldD9kLmxpYnJhcmllcz1Lbi52aWV3ZXIubGlicmFyaWVzOnlpZWxkIGQuc2FzU3RvcmVTZXJ2aWNlLnZpZXdMaWJzKCkudGhlbihNPT57''@;'; put 'put ''ZC5saWJyYXJpZXM9TS5zYXNsaWJzfSkuY2F0Y2goTT0+e2QubG9nZ2VyU2VydmljZS5lcnJvcihNKX0pLHR5cGVvZiBkLnRhYmxlPCJ1IiYmKEtuLnZpZXdlci5zdGFydHVwU2V0P2QudGFibGVzPUtuLnZpZXdlci50YWJsZXM6eWllbGQgZC5zYXNTdG9yZVNlcnZpY2Uudmlld1RhYmxlcyhk''@;'; put 'put ''LmxpYikudGhlbihNPT57ZC50YWJsZXM9TS5tcHRhYmxlcy5tYXAoZnVuY3Rpb24oRCl7cmV0dXJuIEQuTUVNTkFNRX0pfSkuY2F0Y2goTT0+e2QubG9nZ2VyU2VydmljZS5lcnJvcihNKSxkLnJvdXRlci5uYXZpZ2F0ZShbIi92aWV3L2RhdGEiXSx7cXVlcnlQYXJhbXNIYW5kbGluZzoicHJl''@;'; put 'put ''c2VydmUifSl9KSxkLnRhYmxlRmxhZz0hMSxoPWQubGliKyIuIitkLnRhYmxlLGQudGFibGVUaXRsZT1oLGQubGliVGFiPWgpO2Qucm91dGVyLnVybC5zcGxpdCgiLyIpLmxlbmd0aD4zJiZoJiYoeWllbGQgZC5zYXNTdG9yZVNlcnZpY2Uudmlld0RhdGEoaCxhKS50aGVuKE09PntpZihNLnF1''@;'; put 'put ''ZXJ5Lmxlbmd0aD4wJiYidmlldyI9PT1Lbi5yb290UGFyYW0mJjA9PT1Lbi52aWV3ZXIuZmlsdGVyLmNsYXVzZXMubGVuZ3RoJiYoS24udmlld2VyLmZpbHRlci5xdWVyeT1kLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKE0ucXVlcnkpLEtuLnZpZXdlci5maWx0ZXIubGliZHM9ZC5yb3V0ZS5z''@;'; put 'put ''bmFwc2hvdC5wYXJhbXMubGliTWVtLGQuc2FzU3RvcmVTZXJ2aWNlLmluaXRpYWxpemVHbG9iYWxGaWx0ZXJDbGF1c2UoInZpZXdlciIsTS5jb2xzKSksZC5hYm9ydEFjdGl2ZT0hMSxkLmZpbHRlckNvbHM9TS5jb2xzLHplZShkLmZpbHRlckNvbHMsW10sTS4kdmlld2RhdGEpLGQubnVtYmVy''@;'; put 'put ''T2ZSb3dzPU0uc2FzcGFyYW1zWzBdLk5PQlMsZC5oZWFkZXJQa3M9TS5zYXNwYXJhbXNbMF0uUEtfRklFTERTLnNwbGl0KCIgIiksIlNBUzkiPT09ZC5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlKXtsZXQgYmU9TS5zYXNwYXJhbXNbMF0uVEFCTEVVUkk7YmUmJmJlLmxlbmd0aD4wJiYoZC50YWJs''@;'; put 'put ''ZXVyaT1iZSl9ZC5ob3RUYWJsZS5kYXRhPU0udmlld2RhdGEsZC4kZGF0YUZvcm1hdHM9TS4kdmlld2RhdGEsZC5kc21ldGE9TS5kc21ldGEsZC52ZXJzaW9ucz1NLnZlcnNpb25zfHxbXSxkLnNldERTTm90ZSgpLGQucXVlcnlUZXh0PU0uc2FzcGFyYW1zWzBdLkZJTFRFUl9URVhUO2xldCBE''@;'; put 'put ''PVtdLFo9W107Zm9yKGxldCBiZSBpbiBNLnZpZXdkYXRhWzBdKWJlJiZaLnB1c2goYmUpO2ZvcihsZXQgYmU9MDtiZTxaLmxlbmd0aDtiZSsrKUQucHVzaCh7ZGF0YTpaW2JlXX0pO2QuaG90VGFibGUuY29sSGVhZGVycz1aLGQuaG90VGFibGUuY29sdW1ucz1ELGQuaG90VGFibGUuY2VsbHM9''@;'; put 'put ''ZnVuY3Rpb24oKXtyZXR1cm57cmVhZE9ubHk6ITB9fSxkLnRhYmxlRmxhZz0hMTtsZXQgY2U9W107Y2U9aC5zcGxpdCgiLiIpLGQubGliPWNlWzBdLGQudGFibGU9Y2VbMV0sMD09PWQuaG90VGFibGUuZGF0YS5sZW5ndGg/KGQubm9EYXRhPSEwLGQudGFibGVGbGFnPSEwKTooZC5ub0RhdGE9''@;'; put 'put ''ITEsZC50YWJsZUZsYWc9ITEpLGQubm9EYXRhUmVxRXJyPSExfSkuY2F0Y2goTT0+e2QubG9nZ2VyU2VydmljZS5lcnJvcihNKSxkLmFib3J0QWN0aXZlPSEwLGQubm9EYXRhUmVxRXJyPSEwfSkpLGQucm91dGVyLnVybC5pbmNsdWRlcygiL2RhdGEiKSYmaCYmZC5yb3V0ZXIubmF2aWdhdGUo''@;'; put 'put ''MCE9PWE/WyIvdmlldy9kYXRhLyIraCsiLyIrYV06WyIvdmlldy9kYXRhLyIraF0se3F1ZXJ5UGFyYW1zSGFuZGxpbmc6InByZXNlcnZlIn0pO2xldCBmPWQudGFibGUsdj1kLmxpYnJhcmllcy5maW5kKE09Pk0uTElCUkFSWVJFRi50b0xvd2VyQ2FzZSgpPT09ZC5saWIudG9Mb3dlckNhc2Uo''@;'; put 'put ''KSk7dj8oS24udmlld2VyLmxpYnJhcmllcy5sZW5ndGg+MCYmKGQubGlicmFyaWVzPUtuLnZpZXdlci5saWJyYXJpZXMsZC5saWJyYXJpZXNTZWFyY2g9S24udmlld2VyLmxpYnJhcmllc1NlYXJjaCksZC5saWJyYXJ5T25DbGljayhkLmxpYix2LCEwKSk6ZC5saWJpbmZvPVtdLGQudGFibGU9''@;'; put 'put ''Znx8ZC50YWJsZSxkLmxpYnJhcmllcyYmZC5oZWxwZXJTZXJ2aWNlLmRpc3BsYXlMaWJyYXJpZXMoZC5saWJyYXJpZXMpLGQucm91dGVyLnVybC5pbmNsdWRlcygiL2RhdGEiKSYmZC5ldmVudFNlcnZpY2UuY2xvc2VTaWRlYmFyKCksZC5sb2FkaW5nVGFibGVWaWV3PSExLCFkLm5vRGF0YSYm''@;'; put 'put ''IWQubm9EYXRhUmVxRXJyJiZoJiZkLnNldHVwSG90KCksZC5ob3RJbnN0YW5jZUNsaWNrTGlzdGVuZXJ8fHNldFRpbWVvdXQoKCk9PntsZXQgTT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaG90SW5zdGFuY2UiKTtNJiYoTS5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLEQ9PntzZXRU''@;'; put 'put ''aW1lb3V0KCgpPT57bGV0IFo9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLmRlYnVnLXN3aXRjaC1pdGVtIil8fHZvaWQgMDtaJiZaLmNsaWNrKCl9LDEwMCl9KSxkLmhvdEluc3RhbmNlQ2xpY2tMaXN0ZW5lcj0hMCl9LDJlMyl9KSgpfW1heFdpZHRoQ2hla2VyKGEsZCl7cmV0dXJuIGE+MjAw''@;'; put 'put ''PzIwMDphfW9wZW5RYigpe3RoaXMuZmlsdGVyPSEwLHRoaXMuY2RmLmRldGVjdENoYW5nZXMoKSx0aGlzLnNhc1N0b3JlU2VydmljZS5zZXRRdWVyeVZhcmlhYmxlcyh0aGlzLmxpYisiLiIrdGhpcy50YWJsZSx0aGlzLmZpbHRlckNvbHMpfXNlbmRDbGF1c2UoKXt2YXIgYT10aGlzO3JldHVy''@;'; put 'put ''biBlZShmdW5jdGlvbiooKXthLnN1Ym1pdExvYWRpbmc9ITA7bGV0IGQ9W10saD1bXTtpZih0eXBlb2YgYS5jbGF1c2VzPiJ1IilyZXR1cm4gYS5udWxsVmFyaWFibGVzPSEwLHZvaWQoYS5zdWJtaXRMb2FkaW5nPSExKTt7bGV0IGY9YS5jbGF1c2VzLnF1ZXJ5T2JqO2lmKGZbMF0uZWxlbWVu''@;'; put 'put ''dHMubGVuZ3RoPDEpcmV0dXJuInZpZXciPT09S24ucm9vdFBhcmFtJiYoS24udmlld2VyLmZpbHRlci5jbGF1c2VzPVtdLEtuLnZpZXdlci5maWx0ZXIucXVlcnk9W10sS24udmlld2VyLmZpbHRlci5ncm91cExvZ2ljPSIiKSx2b2lkIGEucm91dGVyLm5hdmlnYXRlKFsiL3ZpZXcvZGF0YS8i''@;'; put 'put ''K2EubGliZHNdLHtxdWVyeVBhcmFtc0hhbmRsaW5nOiJwcmVzZXJ2ZSJ9KTtmb3IobGV0IHY9MDt2PGYubGVuZ3RoO3YrKyl7Y29uc3QgTT1mW3ZdLmVsZW1lbnRzO2Q9TS5maWx0ZXIoZnVuY3Rpb24oRCl7cmV0dXJuIG51bGw9PT1ELnZhcmlhYmxlfSksZC5sZW5ndGgmJmgucHVzaChNKX19''@;'; put 'put ''aWYoaC5sZW5ndGgpcmV0dXJuIGEubnVsbFZhcmlhYmxlcz0hMCx2b2lkKGEuc3VibWl0TG9hZGluZz0hMSk7e2NvbnN0IGY9e2dyb3VwTG9naWM6YS5jbGF1c2VzLmdyb3VwTG9naWMsZmlsdGVyR3JvdXBzOltdfTthLmNsYXVzZXMucXVlcnlPYmouZm9yRWFjaChNPT57Y29uc3QgRD17Zmls''@;'; put 'put ''dGVyQ2xhdXNlczpbXX07TS5lbGVtZW50cy5mb3JFYWNoKFo9PntELmZpbHRlckNsYXVzZXMucHVzaChhLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKFopKX0pLEQuY2xhdXNlTG9naWM9TS5jbGF1c2VMb2dpYyxmLmZpbHRlckdyb3Vwcy5wdXNoKGEuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUo''@;'; put 'put ''RCkpfSk7Y29uc3Qgdj1hLnNhc1N0b3JlU2VydmljZS5jcmVhdGVGaWx0ZXJRdWVyeVRhYmxlKGYpO3lpZWxkIGEuc2FzU3RvcmVTZXJ2aWNlLnNhdmVRdWVyeShhLmxpYmRzLHYpLnRoZW4oTT0+e2EucXVlcnlUZXh0PU0ucmVzdWx0WzBdLkZJTFRFUl9URVhUO2xldCBEPU0ucmVzdWx0WzBd''@;'; put 'put ''LkZJTFRFUl9SSzthLnJvdXRlci5uYXZpZ2F0ZShbIi92aWV3L2RhdGEvIithLmxpYmRzKyIvIitEXSx7cXVlcnlQYXJhbXNIYW5kbGluZzoicHJlc2VydmUifSksYS52aWV3RGF0YShEKSxhLmZpbHRlcj0hMX0pLmNhdGNoKE09PnthLmxvZ2dlclNlcnZpY2UuZXJyb3IoTSl9KSxhLnN1Ym1p''@;'; put 'put ''dExvYWRpbmc9ITF9fSkoKX1yZW1vdmVRdWVyeSgpe3RoaXMuc2FzU3RvcmVTZXJ2aWNlLnJlbW92ZUNsYXVzZSgpfWRhdGFzZXRJbmZvTW9kYWxSb3dDbGlja2VkKGEpe3ZvaWQgMCE9PWEuTE9BRF9SRUYmJnRoaXMucm91dGVyLm5hdmlnYXRlKFtgL3N0YWdlLyR7YS5MT0FEX1JFRn1gXSl9''@;'; put 'put ''c2V0RFNOb3RlKCl7Y29uc3QgYT10aGlzLmRzbWV0YS5maW5kKGY9PiJOT1RFUyI9PT1mLk5BTUUpLGQ9dGhpcy5kc21ldGEuZmluZChmPT4iRERfTE9OR0RFU0MiPT09Zi5OQU1FKSxoPXRoaXMuZHNtZXRhLmZpbmQoZj0+IkREX1NIT1JUREVTQyI9PT1mLk5BTUUpO3RoaXMuZHNOb3RlPWEm''@;'; put 'put ''JmEuVkFMVUU/YS5WQUxVRTpkJiZkLlZBTFVFP2QuVkFMVUU6aCYmaC5WQUxVRT9oLlZBTFVFOiIifXNldHVwSG90KCl7c2V0VGltZW91dCgoKT0+eyF0aGlzLmxvYWRpbmdUYWJsZVZpZXcmJnRoaXMubGliRGF0YXNldCYmKHRoaXMuaG90SW5zdGFuY2U9dGhpcy5ob3RUYWJsZVJlZ2lzdGVy''@;'; put 'put ''ZXIuZ2V0SW5zdGFuY2UoImhvdEluc3RhbmNlIiksdGhpcy5ob3RJbnN0YW5jZSYmdGhpcy5ob3RJbnN0YW5jZS51cGRhdGVTZXR0aW5ncyh7aGVpZ2h0OnRoaXMuaG90VGFibGUuaGVpZ2h0LG1vZGlmeUNvbFdpZHRoOmZ1bmN0aW9uKGEsZCl7cmV0dXJuIGE+NTAwPzUwMDphfSxhZnRlckdl''@;'; put 'put ''dENvbEhlYWRlcjooYSxkKT0+e2NvbnN0IGg9dGhpcy5ob3RJbnN0YW5jZT8uY29sVG9Qcm9wKGEpO2gmJnRoaXMuaGVhZGVyUGtzLmluZGV4T2YoaCk+LTEmJmQuY2xhc3NMaXN0LmFkZCgicHJpbWFyeUtleUhlYWRlclN0eWxlIiksZC5jbGFzc0xpc3QuYWRkKEtuLmhhbmRzb250YWJsZS5k''@;'; put 'put ''YXJrVGFibGVIZWFkZXJDbGFzcyl9fSkpfSwxZTMpfWxvYWRXaXRoUGFyYW1ldGVycygpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2Euc3dpdGNoRmxhZz0hMCxhLnRhYmxlVGl0bGU9YS5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMubGliTWVtfHwwLGEudXJsRmlsdGVyUGs9cGFy''@;'; put 'put ''c2VJbnQoYS5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMuZmlsdGVySWR8fCIwIik7bGV0IGg9YS5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMubGliTWVtO2EubGliRGF0YXNldD1oLGguaW5jbHVkZXMoIi4iKXx8KGEubGliPWgpLHlpZWxkIGEudmlld0RhdGEoYS51cmxGaWx0ZXJQayksYS5ub0RhdGE/''@;'; put 'put ''c2V0VGltZW91dCgoKT0+e2EudGFibGVGbGFnPSEwfSwxMjAwKTpzZXRUaW1lb3V0KCgpPT57YS50YWJsZUZsYWc9ITF9LDEyMDApfSkoKX1sb2FkV2l0aG91dFBhcmFtZXRlcnMoKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXthLnN3aXRjaEZsYWc9ITEsYS5saWJyYXJpZXNM''@;'; put 'put ''b2FkaW5nPSEwLEtuLnZpZXdlci5zdGFydHVwU2V0P3NldFRpbWVvdXQoKCk9PnthLmxpYnJhcmllcz1Lbi52aWV3ZXIubGlicmFyaWVzLGEubGlicmFyaWVzU2VhcmNoPUtuLnZpZXdlci5saWJyYXJpZXNTZWFyY2gsYS5saWI9S24udmlld2VyLmxpYnJhcnksYS5saWJyYXJpZXNUcmVlRXhw''@;'; put 'put ''YW5kZWQ9ITAsYS5saWJyYXJpZXNMb2FkaW5nPSExLGEuaGVscGVyU2VydmljZS5kaXNwbGF5TGlicmFyaWVzKGEubGlicmFyaWVzKX0sMTAwKTooYS5ub0RhdGFSZXFFcnI9ITEseWllbGQgYS5zYXNTdG9yZVNlcnZpY2Uudmlld0xpYnMoKS50aGVuKGQ9PnthLmxpYnJhcmllcz1kLnNhc2xp''@;'; put 'put ''YnMsS24udmlld2VyLmxpYnJhcmllcz1hLmxpYnJhcmllcyxLbi52aWV3ZXIuc3RhcnR1cFNldD0hMCxhLmxpYnJhcmllc0xvYWRpbmc9ITEsYS5oZWxwZXJTZXJ2aWNlLmRpc3BsYXlMaWJyYXJpZXMoYS5saWJyYXJpZXMpfSkuY2F0Y2goZD0+e2EubG9nZ2VyU2VydmljZS5lcnJvcihkKSxh''@;'; put 'put ''LmxpYnJhcmllc0xvYWRpbmc9ITEsYS5ub0RhdGFSZXFFcnI9ITB9KSl9KSgpfW5nQWZ0ZXJWaWV3SW5pdCgpe31uZ0FmdGVyQ29udGVudEluaXQoKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXthLmhvdFRhYmxlLmRhdGEubGVuZ3RoPjAmJihhLnRhYmxlRmxhZz0hMCksYS5f''@;'; put 'put ''cXVlcnk9YS5zYXNTdG9yZVNlcnZpY2UucXVlcnkuc3Vic2NyaWJlKGQ9PnthLndoZXJlU3RyaW5nPWQuc3RyaW5nLGEuY2xhdXNlcz1kLm9iaixhLmxpYmRzPWQubGliZHN9KSx0eXBlb2YgYS5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMubGliTWVtPCJ1Ij9hLmxvYWRXaXRoUGFyYW1ldGVycygp''@;'; put 'put ''OmEubG9hZFdpdGhvdXRQYXJhbWV0ZXJzKCl9KSgpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKHUxKSxHZShraCksR2UoR3MpLEdlKExzKSxHZShDdSksR2UodmMpLEdlKFNkKSxHZShTdSksR2UoZmgpLEdlKEVzKSl9fXN0YXRpY3t0aGlz''@;'; put 'put ''Llx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtdmlld2VyIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihkLGgpe2lmKDEmZCYmcWEoSWt0LDUpLDImZCl7bGV0IGY7Q2koZj1TaSgpKSYmKGgucXVlcnlGaWx0ZXJDb21wTGlzdD1mKX19LGhvc3RBdHRyczpbMSwiY29udGVudC1j''@;'; put 'put ''b250YWluZXIiXSxkZWNsczo5NSx2YXJzOjMwLGNvbnN0czpbWyJjbGlDb21tYW5kSW5wdXQiLCIiXSxbInNlYXJjaExpYlRyZWVJbnB1dCIsIiJdLFsic2VhcmNoVHJlZUlucHV0IiwiIl0sWyJxdWVyeUZpbHRlciIsIiJdLFsic2VhcmNoRWwiLCIiXSxbMywic2Nyb2xsZWRUb0JvdHRvbSJd''@;'; put 'put ''LFsiY2xhc3MiLCJteS0xMC1teC1hdXRvIHRleHQtY2VudGVyIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInNlYXJjaC1ub2RlIiw0LCJuZ0lmIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsiY2xhc3MiLCJ3LTEwMCB0ZXh0LWNlbnRlciIsNCwibmdJZiJdLFsxLCJjb250ZW50LWFyZWEiXSxbImNs''@;'; put 'put ''YXNzIiwibW9kYWwgei1pbmRleC1oaWdoZXN0Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsIm1vZGFsLWJhY2tkcm9wIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiw0LCJuZ0lmIl0sWzMsImNsck1vZGFsT3BlbkNoYW5nZSIsImNsck1vZGFsT3BlbiIsImNsck1vZGFsU2l6ZSJdLFsxLCJtb2RhbC10aXRs''@;'; put 'put ''ZSIsImNlbnRlciIsInRleHQtY2VudGVyIiwiY29sb3ItZGFya2VyLWdyYXkiXSxbMSwibW9kYWwtYm9keSJdLFsxLCJjbHItY29sLW1kLTYiXSxbMSwiZG93bmxvYWQtc2VsZWN0Il0sWyJjbHJTZWxlY3QiLCIiLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIl0sWyJ2YWx1ZSIsIkNTViJd''@;'; put 'put ''LFsidmFsdWUiLCJTQVMiXSxbInZhbHVlIiwiUEdTUUxfRERMIl0sWyJ2YWx1ZSIsIlNBU19EREwiXSxbInZhbHVlIiwiVFNRTF9EREwiXSxbInZhbHVlIiwiRVhDRUwiXSxbInZhbHVlIiwiTUFSS0RPV04iXSxbMSwibW9kYWwtZm9vdGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJi''@;'; put 'put ''dG4tc20iLCJidG4tb3V0bGluZSIsMywiY2xpY2siXSxbInR5cGUiLCJzdWJtaXQiLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzLW91dGxpbmUiLDMsImNsaWNrIiwiaWQiXSxbMSwibW9kYWwtYm9keSIsIndlYi1xdWVyeSJdLFsxLCJyb3ciXSxbMSwiY2xyLWNvbC1sZy0xMiIsImNs''@;'; put 'put ''ci1jb2wtbWQtMTIiLCJjbHItY29sLXNtLTEyIiwiY2xyLWNvbC14cy0xMiJdLFsxLCJjYXJkIiwibm8tYm9yZGVycyJdLFsxLCJjYXJkLWhlYWRlciIsImQtZmxleCIsImp1c3RpZnktY29udGVudC1iZXR3ZWVuIl0sWzEsImJ0bi1ncm91cCJdLFsxLCJyYWRpbyIsImJ0biIsMywiY2xpY2si''@;'; put 'put ''XSxbInR5cGUiLCJyYWRpbyIsIm5hbWUiLCJidG4tZ3JvdXAtZGVtby1yYWRpb3MiLDMsImNoZWNrZWQiXSxbMSwiY2FyZC1ibG9jayIsIndlYi1xdWVyeS13cmFwcGVyIiwid29yZC1icmVhay1hbGwiXSxbImNsclRleHRhcmVhIiwiIiwicm93cyIsIjQiLCJjb2xzIiwiNTAiLCJ0eXBlIiwi''@;'; put 'put ''dGV4dCIsInJlYWRvbmx5IiwiIiwxLCJ3ZWItcXVlcnktdGV4dCIsMywiZm9jdXMiLCJ2YWx1ZSJdLFsxLCJjYXJkLWZvb3RlciJdLFsxLCJidG4iLCJidG4tc20iLCJidG4tbGluayIsMywiY2xpY2siLCJuZ3hDbGlwYm9hcmQiXSxbImFyaWEtbW9kYWwiLCJ0cnVlIiwxLCJmaWx0ZXItbW9k''@;'; put 'put ''YWwiLDMsImNsck1vZGFsT3BlbkNoYW5nZSIsImNsck1vZGFsT3BlbiIsImNsck1vZGFsU2l6ZSIsImNsck1vZGFsQ2xvc2FibGUiXSxbNCwibmdJZiJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLWxpbmsiLDMsImNsaWNrIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJi''@;'; put 'put ''dG4iLCJidG4tb3V0bGluZSIsImJ0bi1zbSIsMywiY2xpY2siXSxbInR5cGUiLCJzdWJtaXQiLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzLW91dGxpbmUiLDMsImNsaWNrIiwiY2xyTG9hZGluZyJdLFszLCJjbHJNb2RhbE9wZW5DaGFuZ2UiLCJjbHJNb2RhbE9wZW4iXSxbMSwibW9k''@;'; put 'put ''YWwtdGl0bGUiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1vdXRsaW5lIiwzLCJjbGljayJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXByaW1hcnkiLDMsImNsaWNrIl0sWyJjbGFzcyIsImxvYWRpbmdTcGlubmVyIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNhcmQgbm8t''@;'; put 'put ''Ym9yZGVycyBoLTEwMCBkLWZsZXggY2xyLWZsZXgtY29sdW1uIiw0LCJuZ0lmIl0sWzMsIm9wZW5DaGFuZ2UiLCJyb3dDbGlja2VkIiwib3BlbiIsImRzbWV0YSIsInZlcnNpb25zIl0sWzMsInZpZXdib3hNb2RhbENoYW5nZSIsInZpZXdib3hNb2RhbCJdLFsxLCJteS0xMC1teC1hdXRvIiwi''@;'; put 'put ''dGV4dC1jZW50ZXIiXSxbImNsck1lZGl1bSIsIiJdLFsxLCJzZWFyY2gtbm9kZSJdLFsxLCJ0cmVlLXNlYXJjaC13cmFwcGVyIl0sWyJhcHBTdGVhbEZvY3VzIiwiIiwiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIkxpYnJhcmllcyIsIm5hbWUiLCJpbnB1dCIsImF1dG9jb21wbGV0ZSIs''@;'; put 'put ''Im9mZiIsMywibmdNb2RlbENoYW5nZSIsImtleXVwIiwibmdNb2RlbCJdLFsic2hhcGUiLCJzZWFyY2giLDQsIm5nSWYiXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInNlYXJjaCJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siXSxbMywiY2xyRXhw''@;'; put 'put ''YW5kZWQiLCJjbHJMb2FkaW5nIiwiY2xyLWV4cGFuZGVkIiwiY2xpY2siLCJjbHJFeHBhbmRlZENoYW5nZSIsNCwibmdJZiJdLFszLCJjbGljayIsImNsckV4cGFuZGVkQ2hhbmdlIiwiY2xyRXhwYW5kZWQiLCJjbHJMb2FkaW5nIl0sWzEsIm0tMCIsImN1cnNvci1wb2ludGVyIiwzLCJjbGlj''@;'; put 'put ''ayJdLFsic2hhcGUiLCJyYWNrLXNlcnZlciJdLFsiYXBwU3RlYWxGb2N1cyIsIiIsImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJUYWJsZXMiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCIsImlkIiwibmdNb2RlbCJdLFs0''@;'; put 'put ''LCJuZ1ZhciJdLFsiY2xyVG9vbHRpcFRyaWdnZXIiLCIiLCJjbGFzcyIsImNsci10cmVlbm9kZS1saW5rIiwzLCJkYy1sb2NrZWQtY29udHJvbCIsImFjdGl2ZSIsImNsaWNrIiw0LCJuZ0lmIl0sWyJjbHJUb29sdGlwVHJpZ2dlciIsIiIsMSwiY2xyLXRyZWVub2RlLWxpbmsiLDMsImNsaWNr''@;'; put 'put ''Il0sWzMsIm5nU3dpdGNoIl0sWyJzaGFwZSIsImJvbHQiLDQsIm5nU3dpdGNoQ2FzZSJdLFsic2hhcGUiLCJ0YWJsZSIsNCwibmdTd2l0Y2hDYXNlIl0sWyJzaGFwZSIsImJvbHQiXSxbInNoYXBlIiwidGFibGUiXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLXJpZ2h0IiwiY2xyU2l6ZSIsImxn''@;'; put 'put ''Iiw0LCJjbHJJZk9wZW4iXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLXJpZ2h0IiwiY2xyU2l6ZSIsImxnIl0sWzEsInctMTAwIiwidGV4dC1jZW50ZXIiXSxbMSwic3Bpbm5lciIsInNwaW5uZXItc20iXSxbMSwibW9kYWwiLCJ6LWluZGV4LWhpZ2hlc3QiXSxbInJvbGUiLCJkaWFsb2ciLCJh''@;'; put 'put ''cmlhLWhpZGRlbiIsInRydWUiLDEsIm1vZGFsLWRpYWxvZyJdLFsxLCJtb2RhbC1jb250ZW50Il0sWzEsIm1vZGFsLWhlYWRlciJdLFsiYXJpYS1sYWJlbCIsIkNsb3NlIiwidHlwZSIsImJ1dHRvbiIsMSwiY2xvc2UiXSxbImFyaWEtaGlkZGVuIiwidHJ1ZSIsInNoYXBlIiwiY2xvc2UiXSxb''@;'; put 'put ''InR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1wcmltYXJ5IiwzLCJjbGljayJdLFsiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJtb2RhbC1iYWNrZHJvcCJdLFsxLCJsb2FkaW5nU3Bpbm5lciJdLFsxLCJzcGlubmVyIl0sWzEsIm10LTEwIl0sWyJjZHMtdGV4dCIsInNlY3Rp''@;'; put 'put ''b24iXSxbMSwiY2FyZCIsIm5vLWJvcmRlcnMiLCJoLTEwMCIsImQtZmxleCIsImNsci1mbGV4LWNvbHVtbiJdLFsiY2xhc3MiLCJoZWFkZXItcm93IGNsci1yb3cganVzdGlmeS1jb250ZW50LWJldHdlZW4gY2xyLWp1c3RpZnktY29udGVudC1jZW50ZXIgdy0xMDAgbS0wIiw0LCJuZ0lmIl0s''@;'; put 'put ''WyJjbGFzcyIsIm5vLXRhYmxlLXNlbGVjdGVkIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNhcmQtYmxvY2sgbm9EYXRhIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci1mbGV4LTEiLDQsIm5nSWYiXSxbImNsYXNzIiwibXQtMi1pIHctMTAwIHRleHQtY2VudGVyIiw0LCJuZ0lmIl0sWzEsImhlYWRl''@;'; put 'put ''ci1yb3ciLCJjbHItcm93IiwianVzdGlmeS1jb250ZW50LWJldHdlZW4iLCJjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciIsInctMTAwIiwibS0wIl0sWzEsImZvcm0tYmxvY2siLCJ0YWJsZS1zZWFyY2gtd3JhcHBlciIsInN3IiwiY2xyLWNvbC1tZCJdLFsiY2xyRm9ybSIsIiIsMSwiZC1m''@;'; put 'put ''bGV4IiwiYWxpZ24taXRlbXMtY2VudGVyIl0sWzEsImlucHV0LXdyYXBwZXIiXSxbImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJTZWFyY2giLCJuYW1lIiwic2VhcmNoLWlucHV0IiwzLCJrZXl1cC5lbnRlciIsInR5cGUiXSxbInNoYXBlIiwic2VhcmNoIiwzLCJjbGljayIsNCwibmdJ''@;'; put 'put ''ZiJdLFsiY2xhc3MiLCJzcGlubmVyIHNwaW5uZXItaW5saW5lIiw0LCJuZ0lmIl0sWyJ0eXBlIiwiY2hlY2tib3giLCJjbHJDaGVja2JveCIsIiIsIm5hbWUiLCJudW1lcmljX2NoZWNrIiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCJdLFsxLCJ0aXRsZS1jb2wiLCJjbHItY29sLWF1dG8i''@;'; put 'put ''LCJjbHItZmxleC1jb2x1bW4iLCJjbHItZmxleC1zbS1yb3ciXSxbImNkcy10ZXh0Iiwic2VjdGlvbiIsMSwiY2xyLWZsZXgtY29sdW1uIiwiZC1mbGV4IiwiY2xyLWZsZXgtc20tcm93IiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIl0sWzEs''@;'; put 'put ''ImQtZmxleCIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiXSxbImNsclRvb2x0aXBUcmlnZ2VyIiwiIiwiYXJpYS1sYWJlbCIsIlZpZXcgZGF0YXNldCBtZXRhIGluZm8iLCJzaGFwZSIsImluZm8tY2lyY2xlIiwic2l6ZSIsIjI0IiwxLCJpcy1oaWdobGlnaHQiLCJjdXJzb3ItcG9pbnRlciIs''@;'; put 'put ''MywiY2xpY2siXSxbInNoYXBlIiwiYm9sdCIsImNsYXNzIiwiY29sb3IteWVsbG93IG1yLTUiLDQsIm5nSWYiXSxbImNsclRvb2x0aXBUcmlnZ2VyIiwiIiw0LCJuZ0lmIl0sWzEsIm9wdGlvbnMtY29sIiwiY2xyLWNvbC1tZCJdLFsiY2xhc3MiLCJvcHRpb25zLWRyb3Bkb3duIiwzLCJjbHJD''@;'; put 'put ''bG9zZU1lbnVPbkl0ZW1DbGljayIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItY29sLW1kLTEyIGluZm9CYXIiLDQsIm5nSWYiXSxbInNoYXBlIiwic2VhcmNoIiwzLCJjbGljayJdLFsxLCJzcGlubmVyIiwic3Bpbm5lci1pbmxpbmUiXSxbInNoYXBlIiwiYm9sdCIsMSwiY29sb3IteWVsbG93''@;'; put 'put ''IiwibXItNSJdLFsiY2xyVG9vbHRpcFRyaWdnZXIiLCIiXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLWxlZnQiLCJjbHJTaXplIiwibGciLDQsImNscklmT3BlbiJdLFsiY2xyUG9zaXRpb24iLCJib3R0b20tbGVmdCIsImNsclNpemUiLCJsZyJdLFsic2hhcGUiLCJyZWZyZXNoIiwxLCJyZWZy''@;'; put 'put ''ZXNoLXRhYmxlIiwzLCJjbGljayJdLFsxLCJvcHRpb25zLWRyb3Bkb3duIiwzLCJjbHJDbG9zZU1lbnVPbkl0ZW1DbGljayJdLFsidHlwZSIsImJ1dHRvbiIsImNsckRyb3Bkb3duVHJpZ2dlciIsIiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLW91dGxpbmUiLCJmaWx0ZXJTaWRlIl0sWyJzaGFw''@;'; put 'put ''ZSIsImNvZyIsInNpemUiLCIxNSJdLFsiY2xyUG9zaXRpb24iLCJib3R0b20tcmlnaHQiLDQsImNscklmT3BlbiJdLFsiY2xyUG9zaXRpb24iLCJib3R0b20tcmlnaHQiXSxbImNsckRyb3Bkb3duSXRlbSIsIiIsMywiY2xpY2siXSxbInNoYXBlIiwidmlldy1jYXJkcyJdLFsiY2xyRHJvcGRv''@;'; put 'put ''d25JdGVtIiwiIiwzLCJjbGljayIsNCwibmdJZiJdLFsic2hhcGUiLCJmaWx0ZXIiXSxbInNoYXBlIiwiZG93bmxvYWQiXSxbInNoYXBlIiwiZG93bmxvYWQtY2xvdWQiXSxbInNoYXBlIiwicGVuY2lsIl0sWyJzaGFwZSIsInN3aXRjaCJdLFsxLCJjbHItY29sLW1kLTEyIiwiaW5mb0JhciJd''@;'; put 'put ''LFsxLCJuby10YWJsZS1zZWxlY3RlZCJdLFsic3JjIiwiL1NBU1N0b3JlZFByb2Nlc3MvP19QUk9HUkFNPXBaS2Q2Rjk1akVDdlJRbE4wTENmZEE9PS93ZWI5L2ltYWdlcy9zZWxlY3QtbGlicmFyeS1wbmciLCJhbHQiLCJzZWxlY3QgYSBsaWJyYXJ5IGljb24iLDEsInNlbGVjdC10YWJsZS1p''@;'; put 'put ''Y29uIl0sWyJjZHMtdGV4dCIsInNlY3Rpb24iLDEsInRleHQtY2VudGVyIiwiY29sb3ItZ3JheSIsIm10LTEwIl0sWzEsImhlYWRlci1yb3ciLCJjbHItcm93IiwiYm9yZGVyLWJvdHRvbS1kaXZpZGVyIiwianVzdGlmeS1jb250ZW50LWJldHdlZW4iLCJ3LTEwMCIsIm0tMCJdLFsxLCJ0aXRs''@;'; put 'put ''ZS1jb2wiLCJjbHItY29sLWF1dG8iLCJtdC0xNSIsIm1iLTE1Il0sWzEsInRleHQtY2VudGVyIiwibXQtMTAiXSxbImNsck1lZGl1bSIsIiIsNCwibmdJZiJdLFsiY2xhc3MiLCJuby10YWJsZS1zZWxlY3RlZC1pbmZvIHBvaW50ZXItZXZlbnRzLW5vbmUiLDQsIm5nSWYiXSxbImNsYXNzIiwi''@;'; put 'put ''bGliaW5mbyBtLTAgY2xyLXJvdyIsNCwibmdJZiJdLFsxLCJuby10YWJsZS1zZWxlY3RlZC1pbmZvIiwicG9pbnRlci1ldmVudHMtbm9uZSJdLFsic3JjIiwiL1NBU1N0b3JlZFByb2Nlc3MvP19QUk9HUkFNPXBaS2Q2Rjk1akVDdlJRbE4wTENmZEE9PS93ZWI5L2ltYWdlcy9zZWxlY3QtdGFi''@;'; put 'put ''bGUtcG5nIiwiYWx0Iiwic2VsZWN0IHRhYmxlIGljb24iLDEsInNlbGVjdC10YWJsZS1pY29uIl0sWzEsImxpYmluZm8iLCJtLTAiLCJjbHItcm93Il0sWyJjbGFzcyIsInRleHQtY2VudGVyIG0tMCB3LTEwMCIsNCwibmdJZiJdLFsxLCJ0ZXh0LWNlbnRlciIsIm0tMCIsInctMTAwIl0sWyJz''@;'; put 'put ''aGFwZSIsInJlZnJlc2giLDEsInJlZnJlc2gtdGFibGUiLCJtLTAiLDMsImNsaWNrIl0sWzEsIm0tMCJdLFsxLCJtLTAiLCJmb250LWJvbGQiXSxbMSwiY2FyZC1ibG9jayIsIm5vRGF0YSJdLFsic2hhcGUiLCJ3YXJuaW5nLXN0YW5kYXJkIiwic2l6ZSIsIjYwIiwxLCJpcy1pbmZvIl0sWyJj''@;'; put 'put ''bGFzcyIsInRleHQtY2VudGVyIGNvbG9yLWdyYXkiLDQsIm5nSWYiXSxbMSwidGV4dC1jZW50ZXIiLCJjb2xvci1ncmF5Il0sWzEsImNsci1mbGV4LTEiXSxbImhvdElkIiwiaG90SW5zdGFuY2UiLCJpZCIsImhvdFRhYmxlIiwiY2xhc3NOYW1lIiwiaHREYXJrIiwic3RyZXRjaEgiLCJhbGwi''@;'; put 'put ''LDMsIm11bHRpQ29sdW1uU29ydGluZyIsInZpZXdwb3J0Um93UmVuZGVyaW5nT2Zmc2V0IiwiZGF0YSIsImNvbEhlYWRlcnMiLCJjb2x1bW5zIiwiY29weVBhc3RlIiwiY29udGV4dE1lbnUiLCJmaWx0ZXJzIiwiZHJvcGRvd25NZW51IiwiaGVpZ2h0IiwibW9kaWZ5Q29sV2lkdGgiLCJjZWxs''@;'; put 'put ''cyIsIm1heFJvd3MiLCJtYW51YWxDb2x1bW5SZXNpemUiLCJhZnRlckdldENvbEhlYWRlciIsInJvd0hlYWRlcnMiLCJyb3dIZWFkZXJXaWR0aCIsInJvd0hlaWdodHMiLCJsaWNlbnNlS2V5Il0sWzEsIm10LTItaSIsInctMTAwIiwidGV4dC1jZW50ZXIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24o''@;'; put 'put ''ZCxoKXtpZigxJmQpe2NvbnN0IGY9TG4oKTtkZSgwLCJhcHAtc2lkZWJhciIsNSksRnQoInNjcm9sbGVkVG9Cb3R0b20iLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLEN0KGgubG9hZE1vcmVMaWJyYXJpZXMoKSl9KSxndCgxLExrdCwyLDAsImRpdiIsNiksZGUoMiwiY2xyLXRyZWUiKSxndCgz''@;'; put 'put ''LEZrdCw2LDMsImNsci10cmVlLW5vZGUiLDcpKDQsJGt0LDIsMSwibmctY29udGFpbmVyIiw4KSxoZSgpLGd0KDUsS2t0LDMsMCwiZGl2Iiw5KSxoZSgpLGRlKDYsImRpdiIsMTApLGd0KDcscWt0LDE0LDAsImRpdiIsMTEpKDgsWGt0LDEsMCwiZGl2IiwxMiksZGUoOSwiY2xyLW1vZGFsIiwx''@;'; put 'put ''MyksZ2koImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLG1pKGgub3BlbkRvd25sb2FkLE0pfHwoaC5vcGVuRG93bmxvYWQ9TSksQ3QoTSl9KSxkZSgxMCwiaDMiLDE0KSxMZSgxMSwiRG93bmxvYWQiKSxoZSgpLGRlKDEyLCJkaXYiLDE1KSgxMywiZGl2Iiwx''@;'; put 'put ''NikoMTQsImNsci1zZWxlY3QtY29udGFpbmVyIiwxNykoMTUsImxhYmVsIiksTGUoMTYsIlBsZWFzZSBjaG9vc2UgZG93bmxvYWQgZm9ybWF0IiksaGUoKSxkZSgxNywic2VsZWN0IiwxOCksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxtaShoLmRvd25sb2Fk''@;'; put 'put ''Rm9ybWF0LE0pfHwoaC5kb3dubG9hZEZvcm1hdD1NKSxDdChNKX0pLGRlKDE4LCJvcHRpb24iLDE5KSxMZSgxOSwiQ1NWIiksaGUoKSxkZSgyMCwib3B0aW9uIiwyMCksTGUoMjEsIkRhdGFsaW5lcyAoY2FyZHMgZmlsZSkiKSxoZSgpLGRlKDIyLCJvcHRpb24iLDIxKSxMZSgyMywiRERMIChQ''@;'; put 'put ''R1NRTCBGbGF2b3VyKSIpLGhlKCksZGUoMjQsIm9wdGlvbiIsMjIpLExlKDI1LCJEREwgKFNBUyBGbGF2b3VyKSIpLGhlKCksZGUoMjYsIm9wdGlvbiIsMjMpLExlKDI3LCJEREwgKFRTUUwgRmxhdm91cikiKSxoZSgpLGRlKDI4LCJvcHRpb24iLDI0KSxMZSgyOSwiRXhjZWwgKC54bHN4KSIp''@;'; put 'put ''LGhlKCksZGUoMzAsIm9wdGlvbiIsMjUpLExlKDMxLCJNYXJrZG93biAoLm1kKSIpLGhlKCkoKSgpKCkoKSxkZSgzMiwiZGl2IiwyNikoMzMsImJ1dHRvbiIsMjcpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5vcGVuRG93bmxvYWQ9ITEpfSksTGUoMzQsIiBDYW5j''@;'; put 'put ''ZWwgIiksaGUoKSxkZSgzNSwiYnV0dG9uIiwyOCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxDdChoLmRvd25sb2FkRm9ybWF0LmluY2x1ZGVzKCJEREwiKT9oLmRvd25sb2FkRERMKCk6aC5kb3dubG9hZERhdGEoKSl9KSxMZSgzNiwiIE9rICIpLGhlKCkoKSgpLGRlKDM3''@;'; put 'put ''LCJjbHItbW9kYWwiLDEzKSxnaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksbWkoaC53ZWJRdWVyeSxNKXx8KGgud2ViUXVlcnk9TSksQ3QoTSl9KSxkZSgzOCwiaDMiLDE0KSxMZSgzOSwiIFdlYiBRdWVyeSBVUkwgIiksaGUoKSxkZSg0MCwiZGl2Iiwy''@;'; put 'put ''OSkoNDEsImRpdiIsMzApKDQyLCJkaXYiLDMxKSg0MywiZGl2IiwzMikoNDQsImRpdiIsMzMpKDQ1LCJzcGFuIiksTGUoNDYsIkNvcHkgdGhlIGJlbG93IGludG8geW91ciBwcmVmZXJyZWQgY2xpZW50IHRvb2w6IiksaGUoKSxkZSg0NywiZGl2IiwzNCkoNDgsImRpdiIsMzUpLEZ0KCJjbGlj''@;'; put 'put ''ayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksaC53ZWJRdWVyeVRhYj0hMCxDdChoLnNob3dXZWJRdWVyeSgpKX0pLEd0KDQ5LCJpbnB1dCIsMzYpLGRlKDUwLCJsYWJlbCIpLExlKDUxLCJUQUIiKSxoZSgpKCksZGUoNTIsImRpdiIsMzUpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4g''@;'; put 'put ''d3QoZiksaC53ZWJRdWVyeVRhYj0hMSxDdChoLnNob3dXZWJRdWVyeSgpKX0pLEd0KDUzLCJpbnB1dCIsMzYpLGRlKDU0LCJsYWJlbCIpLExlKDU1LCJDU1YiKSxoZSgpKCkoKSgpLGRlKDU2LCJkaXYiLDM3KSg1NywidGV4dGFyZWEiLDM4LDApLEZ0KCJmb2N1cyIsZnVuY3Rpb24oTSl7cmV0''@;'; put 'put ''dXJuIHd0KGYpLEN0KGgub25DbGlDb21tYW5kRm9jdXMoTSkpfSksTGUoNTksIiAgICAgICAgICAgICAgIiksaGUoKSgpLGRlKDYwLCJkaXYiLDM5KSg2MSwiYnV0dG9uIiw0MCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxDdChoLmNvcHlUb0NsaXAoKSl9KSxMZSg2Miwi''@;'; put 'put ''IGNvcHkgdG8gY2xpcGJvYXJkICIpLGhlKCkoKSgpKCkoKSgpLGRlKDYzLCJkaXYiLDI2KSg2NCwiYnV0dG9uIiwyNyksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxDdChoLndlYlF1ZXJ5PSExKX0pLExlKDY1LCIgY2xvc2UgIiksaGUoKSgpKCksZGUoNjYsImNsci1tb2Rh''@;'; put 'put ''bCIsNDEpLGdpKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxtaShoLmZpbHRlcixNKXx8KGguZmlsdGVyPU0pLEN0KE0pfSksZGUoNjcsImgzIiwxNCksTGUoNjgsIiBGaWx0ZXIgZm9yIHRhYmxlOiIpLGRlKDY5LCJzcGFuIiksTGUoNzApLGhlKCkoKSxk''@;'; put 'put ''ZSg3MSwiZGl2IiwxNSksZ3QoNzIsSmt0LDIsMCwiYXBwLXF1ZXJ5Iiw0MiksaGUoKSxkZSg3MywiZGl2IiwyNikoNzQsImJ1dHRvbiIsNDMpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5yZXNldEZpbHRlcigpKX0pLExlKDc1LCIgcmVzZXQgZmlsdGVyICIpLGhl''@;'; put 'put ''KCksZGUoNzYsImJ1dHRvbiIsNDQpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksaC5maWx0ZXI9ITEsQ3QoaC5yZW1vdmVRdWVyeSgpKX0pLExlKDc3LCIgQ2FuY2VsICIpLGhlKCksZGUoNzgsImJ1dHRvbiIsNDUpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3Qo''@;'; put 'put ''ZiksQ3QoaC5zZW5kQ2xhdXNlKCkpfSksTGUoNzksIiBPayAiKSxoZSgpKCkoKSxkZSg4MCwiY2xyLW1vZGFsIiw0NiksZ2koImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLG1pKGgucXVlcnlFcnIsTSl8fChoLnF1ZXJ5RXJyPU0pLEN0KE0pfSksZGUoODEs''@;'; put 'put ''ImgzIiw0NyksTGUoODIsIkVycm9yIiksaGUoKSxkZSg4MywiZGl2IiwxNSkoODQsInAiKSxMZSg4NSksaGUoKSgpLGRlKDg2LCJkaXYiLDI2KSg4NywiYnV0dG9uIiw0OCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxDdChoLnF1ZXJ5RXJyPSExKX0pLExlKDg4LCIgQ2Fu''@;'; put 'put ''Y2VsICIpLGhlKCksZGUoODksImJ1dHRvbiIsNDkpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5xdWVyeUVycj0hMSl9KSxMZSg5MCwiIE9rICIpLGhlKCkoKSgpLGd0KDkxLFFrdCw2LDAsImRpdiIsNTApKDkyLFBEdCw4LDYsImRpdiIsNTEpLGhlKCksZGUoOTMs''@;'; put 'put ''ImFwcC1kYXRhc2V0LWluZm8iLDUyKSxnaSgib3BlbkNoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLG1pKGguZGF0YXNldEluZm8sTSl8fChoLmRhdGFzZXRJbmZvPU0pLEN0KE0pfSksRnQoInJvd0NsaWNrZWQiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxDdChoLmRhdGFzZXRJ''@;'; put 'put ''bmZvTW9kYWxSb3dDbGlja2VkKE0pKX0pLGhlKCksZGUoOTQsImFwcC12aWV3Ym94ZXMiLDUzKSxnaSgidmlld2JveE1vZGFsQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksbWkoaC52aWV3Ym94T3BlbixNKXx8KGgudmlld2JveE9wZW49TSksQ3QoTSl9KSxoZSgpfWlmKDImZCl7''@;'; put 'put ''Y29uc3QgZj1oYSg1OCk7ZmUoKSxNZSgibmdJZiIsaC5saWJyYXJpZXNMb2FkaW5nKSxmZSgyKSxNZSgibmdJZiIsaC5saWJyYXJpZXMpLGZlKCksTWUoIm5nRm9yT2YiLGgubGlicmFyaWVzKSxmZSgpLE1lKCJuZ0lmIixoLmxpYnJhcmllc1BhZ2luZyksZmUoMiksTWUoIm5nSWYiLGgubnVs''@;'; put 'put ''bFZhcmlhYmxlcyksZmUoKSxNZSgibmdJZiIsaC5udWxsVmFyaWFibGVzKSxmZSgpLHBpKCJjbHJNb2RhbE9wZW4iLGgub3BlbkRvd25sb2FkKSxNZSgiY2xyTW9kYWxTaXplIiwibWQiKSxmZSg4KSxwaSgibmdNb2RlbCIsaC5kb3dubG9hZEZvcm1hdCksZmUoMTgpLE1lKCJpZCIsaC50YWJs''@;'; put 'put ''ZVRpdGxlKSxmZSgyKSxwaSgiY2xyTW9kYWxPcGVuIixoLndlYlF1ZXJ5KSxNZSgiY2xyTW9kYWxTaXplIiwibGciKSxmZSgxMiksTWUoImNoZWNrZWQiLGgud2ViUXVlcnlUYWIpLGZlKDQpLE1lKCJjaGVja2VkIiwhaC53ZWJRdWVyeVRhYiksZmUoNCksTWUoInZhbHVlIixoLndlYlF1ZXJ5''@;'; put 'put ''VGV4dCksZmUoNCksTWUoIm5neENsaXBib2FyZCIsZiksZmUoNSkscGkoImNsck1vZGFsT3BlbiIsaC5maWx0ZXIpLE1lKCJjbHJNb2RhbFNpemUiLCJ4bCIpKCJjbHJNb2RhbENsb3NhYmxlIiwhMSksZmUoNCksSXIoIiAiLGgubGliVGFiLCIgIiksZmUoMiksTWUoIm5nSWYiLGguZmlsdGVy''@;'; put 'put ''KSxmZSg2KSxNZSgiY2xyTG9hZGluZyIsaC5zdWJtaXRMb2FkaW5nKSxmZSgyKSxwaSgiY2xyTW9kYWxPcGVuIixoLnF1ZXJ5RXJyKSxmZSg1KSx3cihoLnF1ZXJ5RXJyTWVzc2FnZSksZmUoNiksTWUoIm5nSWYiLGgubG9hZGluZ1RhYmxlVmlldyksZmUoKSxNZSgibmdJZiIsIWgubG9hZGlu''@;'; put 'put ''Z1RhYmxlVmlldyksZmUoKSxwaSgib3BlbiIsaC5kYXRhc2V0SW5mbyksTWUoImRzbWV0YSIsaC5kc21ldGEpKCJ2ZXJzaW9ucyIsaC52ZXJzaW9ucyksZmUoKSxwaSgidmlld2JveE1vZGFsIixoLnZpZXdib3hPcGVuKX19LGRlcGVuZGVuY2llczpbSTZlLG5zLGJhLFMyLGNwLFRrdCxsNyxB''@;'; put 'put ''MixrMixxbCxNZCxUMixubCxvNywkcyx5cCxFaCxQZCxmZyxIbCxvdSxLdSxqMCxMMixQMixkcyxRMWUsSWQsQnksU2gsWjEsRTcsJHksUUwsc2csZzcsbTcsVnksdjcseTcsYjcsUmQsRF8saTQsTzZlLHBPLFhlZSxTdyxyNCxGNmUsRGt0XSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9''@;'; put 'put ''KSgpO2NvbnN0IEZEdD1be3BhdGg6IiIsY29tcG9uZW50OmJBdCxjaGlsZHJlbjpbe3BhdGg6IiIscGF0aE1hdGNoOiJmdWxsIixyZWRpcmVjdFRvOiJkYXRhIn0se3BhdGg6ImRhdGEiLGNvbXBvbmVudDp6Tn0se3BhdGg6ImRhdGEiLGNvbXBvbmVudDp6Tn0se3BhdGg6ImRhdGEvOmxpYk1l''@;'; put 'put ''bS86ZmlsdGVySWQiLGNvbXBvbmVudDp6Tn0se3BhdGg6ImRhdGEvOmxpYk1lbSIsY29tcG9uZW50OnpOfSx7cGF0aDoibGluZWFnZSIsY29tcG9uZW50OmpOfSx7cGF0aDoibGluZWFnZS86dGFibGVpZC86ZGlyZWN0aW9uIixjb21wb25lbnQ6ak59LHtwYXRoOiJsaW5lYWdlL2NvbHVtbi86''@;'; put 'put ''Y29sdXJpLzpkaXJlY3Rpb24iLGNvbXBvbmVudDpqTn0se3BhdGg6ImxpbmVhZ2UvY29sdW1uLzpjb2x1cmkvOmRpcmVjdGlvbi86cmVsb2FkIixjb21wb25lbnQ6ak59LHtwYXRoOiJ2aXlhLWFwaS1leHBsb3JlciIsY29tcG9uZW50Ok1rdH0se3BhdGg6Im1ldGFkYXRhIixjb21wb25lbnQ6''@;'; put 'put ''WnRlfSx7cGF0aDoibWV0YWRhdGEvb2JqZWN0LzpvYmplY3RJRCIsY29tcG9uZW50Olp0ZX0se3BhdGg6Im1ldGFkYXRhL29iamVjdC86b2JqZWN0SUQvOm9iamVjdE5hbWUiLGNvbXBvbmVudDpadGV9LHtwYXRoOiJ1c2VybmF2Iixjb21wb25lbnQ6dkF0LGNoaWxkcmVuOlt7cGF0aDoiIixw''@;'; put 'put ''YXRoTWF0Y2g6ImZ1bGwiLHJlZGlyZWN0VG86Imdyb3VwcyJ9LHtwYXRoOiJ1c2VycyIsY29tcG9uZW50Ok03ZX0se3BhdGg6InVzZXJzLzp1cmkiLGNvbXBvbmVudDpNN2V9LHtwYXRoOiJncm91cHMiLGNvbXBvbmVudDp0OGV9LHtwYXRoOiJncm91cHMvOnVyaSIsY29tcG9uZW50OnQ4ZX0s''@;'; put 'put ''e3BhdGg6InJvbGVzIixjb21wb25lbnQ6UzdlfSx7cGF0aDoicm9sZXMvOnVyaSIsY29tcG9uZW50OlM3ZX1dfV19XTtsZXQgSER0PSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1r''@;'; put 'put ''aSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOlt6Yy5mb3JDaGlsZChGRHQpLHpjXX0pfX1yZXR1cm4gY30pKCksTkR0PSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlz''@;'; put 'put ''Llx1MDI3NW1vZD1raSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltONmUsUmEsSER0LEFrdCxSYyx6MCxvOS5mb3JSb290KCksRzksQ3csTUEsUWVlLG5mXX0pfX1yZXR1cm4gY30pKCk7Y29uc3QgQkR0PXpjLmZvclJvb3QoW3twYXRoOiIiLHJlZGlyZWN0''@;'; put 'put ''VG86ImhvbWUiLHBhdGhNYXRjaDoiZnVsbCJ9LHtwYXRoOiJ2aWV3Iixsb2FkQ2hpbGRyZW46KCk9Pk5EdH0se3BhdGg6InJldmlldyIsY29tcG9uZW50OkJfdCxjaGlsZHJlbjpbe3BhdGg6IiIscGF0aE1hdGNoOiJmdWxsIixyZWRpcmVjdFRvOiJ0b2FwcHJvdmUifSx7cGF0aDoiIixsb2Fk''@;'; put 'put ''Q2hpbGRyZW46KCk9PlZfdH1dfSx7cGF0aDoibGljZW5zaW5nIixsb2FkQ2hpbGRyZW46KCk9Pml5dH0se3BhdGg6ImhvbWUiLGxvYWRDaGlsZHJlbjooKT0+eWJ0fSx7cGF0aDoiZWRpdG9yIixsb2FkQ2hpbGRyZW46KCk9PmM5dH0se3BhdGg6InN0YWdlIixsb2FkQ2hpbGRyZW46KCk9PnFf''@;'; put 'put ''dH0se3BhdGg6InN5c3RlbSIsbG9hZENoaWxkcmVuOigpPT5jd3R9LHtwYXRoOiJkZXBsb3kiLGxvYWRDaGlsZHJlbjooKT0+bHFlfSx7cGF0aDoiKioiLGNvbXBvbmVudDpqJGV9XSx7dXNlSGFzaDohMH0pO2xldCBqRHQ9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVu''@;'; put 'put ''Y3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPWtpKHt0eXBlOmMsYm9vdHN0cmFwOltYWWVdfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPUFyKHtwcm92aWRlcnM6W29MLGtoLHR0ZSwkUl0saW1wb3J0czpbQiRlLFRvZSxSYyxJT2Usb0FlLEJEdCxDdyx6''@;'; put 'put ''MCxHOSxNQSxuZixua3RdfSl9fXJldHVybiBjfSkoKTtrQ2UoKS5ib290c3RyYXBNb2R1bGUoakR0KX0sMzczNDoobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKT0+e3ZhciBfYXN5bmNUb0dlbmVyYXRvcj1fX3dlYnBhY2tfcmVxdWlyZV9fKDI5''@;'; put 'put ''MjkzKS5kZWZhdWx0LF93cmFwQXN5bmNHZW5lcmF0b3I9X193ZWJwYWNrX3JlcXVpcmVfXyg0Mjk1OCkuZGVmYXVsdCxfYXdhaXRBc3luY0dlbmVyYXRvcj1fX3dlYnBhY2tfcmVxdWlyZV9fKDUzMzQ0KS5kZWZhdWx0LF9hc3luY0dlbmVyYXRvckRlbGVnYXRlPV9fd2VicGFja19yZXF1aXJl''@;'; put 'put ''X18oOTM1MTMpLmRlZmF1bHQsX2FzeW5jSXRlcmF0b3I9X193ZWJwYWNrX3JlcXVpcmVfXyg4Mjg4MSkuZGVmYXVsdCx5O3NlbGYseT0oKT0+KCgpPT57dmFyIF9fd2VicGFja19tb2R1bGVzX189ezMwNjI6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg4NzY0KS5CdWZmZXI7T2Jq''@;'; put 'put ''ZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguQ3N2Rm9ybWF0dGVyU3RyZWFtPXZvaWQgMDtjb25zdCBfPXkoMjgzMCksZz15KDk5NDcpO1guQ3N2Rm9ybWF0dGVyU3RyZWFtPWNsYXNzIEIgZXh0ZW5kcyBfLlRyYW5zZm9ybXtjb25zdHJ1Y3RvcihQKXtz''@;'; put 'put ''dXBlcih7d3JpdGFibGVPYmplY3RNb2RlOlAub2JqZWN0TW9kZX0pLHRoaXMuaGFzV3JpdHRlbkJPTT0hMSx0aGlzLmZvcm1hdHRlck9wdGlvbnM9UCx0aGlzLnJvd0Zvcm1hdHRlcj1uZXcgZy5Sb3dGb3JtYXR0ZXIoUCksdGhpcy5oYXNXcml0dGVuQk9NPSFQLndyaXRlQk9NfXRyYW5zZm9y''@;'; put 'put ''bShQKXtyZXR1cm4gdGhpcy5yb3dGb3JtYXR0ZXIucm93VHJhbnNmb3JtPVAsdGhpc31fdHJhbnNmb3JtKFAsRixPKXtsZXQgej0hMTt0cnl7dGhpcy5oYXNXcml0dGVuQk9NfHwodGhpcy5wdXNoKHRoaXMuZm9ybWF0dGVyT3B0aW9ucy5CT00pLHRoaXMuaGFzV3JpdHRlbkJPTT0hMCksdGhp''@;'; put 'put ''cy5yb3dGb3JtYXR0ZXIuZm9ybWF0KFAsKE4sTCk9Pk4/KHo9ITAsTyhOKSk6KEwmJkwuZm9yRWFjaChLPT57dGhpcy5wdXNoKEkuZnJvbShLLCJ1dGY4IikpfSksej0hMCxPKCkpKX1jYXRjaChOKXtpZih6KXRocm93IE47TyhOKX19X2ZsdXNoKFApe3RoaXMucm93Rm9ybWF0dGVyLmZpbmlz''@;'; put 'put ''aCgoRixPKT0+Rj9QKEYpOihPJiZPLmZvckVhY2goej0+e3RoaXMucHVzaChJLmZyb20oeiwidXRmOCIpKX0pLFAoKSkpfX19LDY3NjM6KHVlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLkZvcm1hdHRlck9wdGlv''@;'; put 'put ''bnM9dm9pZCAwLFguRm9ybWF0dGVyT3B0aW9ucz1jbGFzcyB5e2NvbnN0cnVjdG9yKF89e30pe3ZhciBnO3RoaXMub2JqZWN0TW9kZT0hMCx0aGlzLmRlbGltaXRlcj0iLCIsdGhpcy5yb3dEZWxpbWl0ZXI9IlxuIix0aGlzLnF1b3RlPSciJyx0aGlzLmVzY2FwZT10aGlzLnF1b3RlLHRoaXMu''@;'; put 'put ''cXVvdGVDb2x1bW5zPSExLHRoaXMucXVvdGVIZWFkZXJzPXRoaXMucXVvdGVDb2x1bW5zLHRoaXMuaGVhZGVycz1udWxsLHRoaXMuaW5jbHVkZUVuZFJvd0RlbGltaXRlcj0hMSx0aGlzLndyaXRlQk9NPSExLHRoaXMuQk9NPSJcdWZlZmYiLHRoaXMuYWx3YXlzV3JpdGVIZWFkZXJzPSExLE9i''@;'; put 'put ''amVjdC5hc3NpZ24odGhpcyxffHx7fSksdHlwZW9mIF8/LnF1b3RlSGVhZGVycz4idSImJih0aGlzLnF1b3RlSGVhZGVycz10aGlzLnF1b3RlQ29sdW1ucyksITA9PT1fPy5xdW90ZT90aGlzLnF1b3RlPSciJzohMT09PV8/LnF1b3RlJiYodGhpcy5xdW90ZT0iIiksInN0cmluZyIhPXR5cGVv''@;'; put 'put ''ZiBfPy5lc2NhcGUmJih0aGlzLmVzY2FwZT10aGlzLnF1b3RlKSx0aGlzLnNob3VsZFdyaXRlSGVhZGVycz0hIXRoaXMuaGVhZGVycyYmKG51bGw9PT0oZz1fLndyaXRlSGVhZGVycyl8fHZvaWQgMD09PWd8fGcpLHRoaXMuaGVhZGVycz1BcnJheS5pc0FycmF5KHRoaXMuaGVhZGVycyk/dGhp''@;'; put 'put ''cy5oZWFkZXJzOm51bGwsdGhpcy5lc2NhcGVkUXVvdGU9YCR7dGhpcy5lc2NhcGV9JHt0aGlzLnF1b3RlfWB9fX0sNTE4NjpmdW5jdGlvbih1ZSxYLHkpeyJ1c2Ugc3RyaWN0Ijt2YXIgST10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oUCl7cmV0dXJuIFAmJlAuX19lc01v''@;'; put 'put ''ZHVsZT9QOntkZWZhdWx0OlB9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5GaWVsZEZvcm1hdHRlcj12b2lkIDA7Y29uc3QgXz1JKHkoODA5NCkpLGc9SSh5KDk3MjIpKSxCPUkoeSgxNjU4KSk7WC5GaWVsZEZvcm1hdHRlcj1jbGFzcyB3e2Nv''@;'; put 'put ''bnN0cnVjdG9yKEYpe3RoaXMuX2hlYWRlcnM9bnVsbCx0aGlzLmZvcm1hdHRlck9wdGlvbnM9RixudWxsIT09Ri5oZWFkZXJzJiYodGhpcy5oZWFkZXJzPUYuaGVhZGVycyksdGhpcy5SRVBMQUNFX1JFR0VYUD1uZXcgUmVnRXhwKEYucXVvdGUsImciKTtjb25zdCBPPWBbJHtGLmRlbGltaXRl''@;'; put 'put ''cn0ke0IuZGVmYXVsdChGLnJvd0RlbGltaXRlcil9fFxyfFxuXWA7dGhpcy5FU0NBUEVfUkVHRVhQPW5ldyBSZWdFeHAoTyl9c2V0IGhlYWRlcnMoRil7dGhpcy5faGVhZGVycz1GfXNob3VsZFF1b3RlKEYsTyl7Y29uc3Qgej1PP3RoaXMuZm9ybWF0dGVyT3B0aW9ucy5xdW90ZUhlYWRlcnM6''@;'; put 'put ''dGhpcy5mb3JtYXR0ZXJPcHRpb25zLnF1b3RlQ29sdW1ucztyZXR1cm4gXy5kZWZhdWx0KHopP3o6QXJyYXkuaXNBcnJheSh6KT96W0ZdOm51bGwhPT10aGlzLl9oZWFkZXJzJiZ6W3RoaXMuX2hlYWRlcnNbRl1dfWZvcm1hdChGLE8seil7Y29uc3QgTj1gJHtnLmRlZmF1bHQoRik/IiI6Rn1g''@;'; put 'put ''LnJlcGxhY2UoL1wwL2csIiIpLHtmb3JtYXR0ZXJPcHRpb25zOkx9PXRoaXM7cmV0dXJuIiIhPT1MLnF1b3RlJiYtMSE9PU4uaW5kZXhPZihMLnF1b3RlKT90aGlzLnF1b3RlRmllbGQoTi5yZXBsYWNlKHRoaXMuUkVQTEFDRV9SRUdFWFAsTC5lc2NhcGVkUXVvdGUpKTotMSE9PU4uc2VhcmNo''@;'; put 'put ''KHRoaXMuRVNDQVBFX1JFR0VYUCl8fHRoaXMuc2hvdWxkUXVvdGUoTyx6KT90aGlzLnF1b3RlRmllbGQoTik6Tn1xdW90ZUZpZWxkKEYpe2NvbnN0e3F1b3RlOk99PXRoaXMuZm9ybWF0dGVyT3B0aW9ucztyZXR1cm5gJHtPfSR7Rn0ke099YH19fSw3MTgxOmZ1bmN0aW9uKHVlLFgseSl7InVz''@;'; put 'put ''ZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihGKXtyZXR1cm4gRiYmRi5fX2VzTW9kdWxlP0Y6e2RlZmF1bHQ6Rn19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLlJvd0Zvcm1hdHRlcj12b2lkIDA7''@;'; put 'put ''Y29uc3QgXz1JKHkoODQyMykpLGc9SSh5KDIzMDcpKSxCPXkoNTE4Niksdz15KDQ2OTIpO2NsYXNzIFB7Y29uc3RydWN0b3IoTyl7dGhpcy5yb3dDb3VudD0wLHRoaXMuZm9ybWF0dGVyT3B0aW9ucz1PLHRoaXMuZmllbGRGb3JtYXR0ZXI9bmV3IEIuRmllbGRGb3JtYXR0ZXIoTyksdGhpcy5o''@;'; put 'put ''ZWFkZXJzPU8uaGVhZGVycyx0aGlzLnNob3VsZFdyaXRlSGVhZGVycz1PLnNob3VsZFdyaXRlSGVhZGVycyx0aGlzLmhhc1dyaXR0ZW5IZWFkZXJzPSExLG51bGwhPT10aGlzLmhlYWRlcnMmJih0aGlzLmZpZWxkRm9ybWF0dGVyLmhlYWRlcnM9dGhpcy5oZWFkZXJzKSxPLnRyYW5zZm9ybSYm''@;'; put 'put ''KHRoaXMucm93VHJhbnNmb3JtPU8udHJhbnNmb3JtKX1zdGF0aWMgaXNSb3dIYXNoQXJyYXkoTyl7cmV0dXJuISFBcnJheS5pc0FycmF5KE8pJiZBcnJheS5pc0FycmF5KE9bMF0pJiYyPT09T1swXS5sZW5ndGh9c3RhdGljIGlzUm93QXJyYXkoTyl7cmV0dXJuIEFycmF5LmlzQXJyYXkoTykm''@;'; put 'put ''JiF0aGlzLmlzUm93SGFzaEFycmF5KE8pfXN0YXRpYyBnYXRoZXJIZWFkZXJzKE8pe3JldHVybiBQLmlzUm93SGFzaEFycmF5KE8pP08ubWFwKHo9PnpbMF0pOkFycmF5LmlzQXJyYXkoTyk/TzpPYmplY3Qua2V5cyhPKX1zdGF0aWMgY3JlYXRlVHJhbnNmb3JtKE8pe3JldHVybiB3LmlzU3lu''@;'; put 'put ''Y1RyYW5zZm9ybShPKT8oeixOKT0+e2xldCBMPW51bGw7dHJ5e0w9Tyh6KX1jYXRjaChLKXtyZXR1cm4gTihLKX1yZXR1cm4gTihudWxsLEwpfTooeixOKT0+e08oeixOKX19c2V0IHJvd1RyYW5zZm9ybShPKXtpZighXy5kZWZhdWx0KE8pKXRocm93IG5ldyBUeXBlRXJyb3IoIlRoZSB0cmFu''@;'; put 'put ''c2Zvcm0gc2hvdWxkIGJlIGEgZnVuY3Rpb24iKTt0aGlzLl9yb3dUcmFuc2Zvcm09UC5jcmVhdGVUcmFuc2Zvcm0oTyl9Zm9ybWF0KE8seil7dGhpcy5jYWxsVHJhbnNmb3JtZXIoTywoTixMKT0+e2lmKE4pcmV0dXJuIHooTik7aWYoIU8pcmV0dXJuIHoobnVsbCk7Y29uc3QgSz1bXTtpZihM''@;'; put 'put ''KXtjb25zdHtzaG91bGRGb3JtYXRDb2x1bW5zOlUsaGVhZGVyczpXfT10aGlzLmNoZWNrSGVhZGVycyhMKTtpZih0aGlzLnNob3VsZFdyaXRlSGVhZGVycyYmVyYmIXRoaXMuaGFzV3JpdHRlbkhlYWRlcnMmJihLLnB1c2godGhpcy5mb3JtYXRDb2x1bW5zKFcsITApKSx0aGlzLmhhc1dyaXR0''@;'; put 'put ''ZW5IZWFkZXJzPSEwKSxVKXtjb25zdCBZPXRoaXMuZ2F0aGVyQ29sdW1ucyhMKTtLLnB1c2godGhpcy5mb3JtYXRDb2x1bW5zKFksITEpKX19cmV0dXJuIHoobnVsbCxLKX0pfWZpbmlzaChPKXtjb25zdCB6PVtdO2lmKHRoaXMuZm9ybWF0dGVyT3B0aW9ucy5hbHdheXNXcml0ZUhlYWRlcnMm''@;'; put 'put ''JjA9PT10aGlzLnJvd0NvdW50KXtpZighdGhpcy5oZWFkZXJzKXJldHVybiBPKG5ldyBFcnJvcigiYGFsd2F5c1dyaXRlSGVhZGVyc2Agb3B0aW9uIGlzIHNldCB0byB0cnVlIGJ1dCBgaGVhZGVyc2Agb3B0aW9uIG5vdCBwcm92aWRlZC4iKSk7ei5wdXNoKHRoaXMuZm9ybWF0Q29sdW1ucyh0''@;'; put 'put ''aGlzLmhlYWRlcnMsITApKX1yZXR1cm4gdGhpcy5mb3JtYXR0ZXJPcHRpb25zLmluY2x1ZGVFbmRSb3dEZWxpbWl0ZXImJnoucHVzaCh0aGlzLmZvcm1hdHRlck9wdGlvbnMucm93RGVsaW1pdGVyKSxPKG51bGwseil9Y2hlY2tIZWFkZXJzKE8pe2lmKHRoaXMuaGVhZGVycylyZXR1cm57c2hv''@;'; put 'put ''dWxkRm9ybWF0Q29sdW1uczohMCxoZWFkZXJzOnRoaXMuaGVhZGVyc307Y29uc3Qgej1QLmdhdGhlckhlYWRlcnMoTyk7cmV0dXJuIHRoaXMuaGVhZGVycz16LHRoaXMuZmllbGRGb3JtYXR0ZXIuaGVhZGVycz16LHRoaXMuc2hvdWxkV3JpdGVIZWFkZXJzP3tzaG91bGRGb3JtYXRDb2x1bW5z''@;'; put 'put ''OiFnLmRlZmF1bHQoeixPKSxoZWFkZXJzOnp9OntzaG91bGRGb3JtYXRDb2x1bW5zOiEwLGhlYWRlcnM6bnVsbH19Z2F0aGVyQ29sdW1ucyhPKXtpZihudWxsPT09dGhpcy5oZWFkZXJzKXRocm93IG5ldyBFcnJvcigiSGVhZGVycyBpcyBjdXJyZW50bHkgbnVsbCIpO3JldHVybiBBcnJheS5p''@;'; put 'put ''c0FycmF5KE8pP1AuaXNSb3dIYXNoQXJyYXkoTyk/dGhpcy5oZWFkZXJzLm1hcCgoeixOKT0+e2NvbnN0IEw9T1tOXTtyZXR1cm4gTD9MWzFdOiIifSk6UC5pc1Jvd0FycmF5KE8pJiYhdGhpcy5zaG91bGRXcml0ZUhlYWRlcnM/Tzp0aGlzLmhlYWRlcnMubWFwKCh6LE4pPT5PW05dKTp0aGlz''@;'; put 'put ''LmhlYWRlcnMubWFwKHo9Pk9bel0pfWNhbGxUcmFuc2Zvcm1lcihPLHope3JldHVybiB0aGlzLl9yb3dUcmFuc2Zvcm0/dGhpcy5fcm93VHJhbnNmb3JtKE8seik6eihudWxsLE8pfWZvcm1hdENvbHVtbnMoTyx6KXtjb25zdCBOPU8ubWFwKChLLFUpPT50aGlzLmZpZWxkRm9ybWF0dGVyLmZv''@;'; put 'put ''cm1hdChLLFUseikpLmpvaW4odGhpcy5mb3JtYXR0ZXJPcHRpb25zLmRlbGltaXRlcikse3Jvd0NvdW50Okx9PXRoaXM7cmV0dXJuIHRoaXMucm93Q291bnQrPTEsTD9bdGhpcy5mb3JtYXR0ZXJPcHRpb25zLnJvd0RlbGltaXRlcixOXS5qb2luKCIiKTpOfX1YLlJvd0Zvcm1hdHRlcj1QfSw5''@;'; put 'put ''OTQ3Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLkZpZWxkRm9ybWF0dGVyPVguUm93Rm9ybWF0dGVyPXZvaWQgMDt2YXIgST15KDcxODEpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJSb3dGb3JtYXR0''@;'; put 'put ''ZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBJLlJvd0Zvcm1hdHRlcn19KTt2YXIgXz15KDUxODYpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJGaWVsZEZvcm1hdHRlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIF8uRmllbGRGb3JtYXR0''@;'; put 'put ''ZXJ9fSl9LDcyMDE6ZnVuY3Rpb24odWUsWCx5KXsidXNlIHN0cmljdCI7dmFyIEk9eSg4NzY0KS5CdWZmZXIsXz10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oVSxXLFkscSl7dm9pZCAwPT09cSYmKHE9WSksT2JqZWN0LmRlZmluZVByb3BlcnR5''@;'; put 'put ''KFUscSx7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gV1tZXX19KX06ZnVuY3Rpb24oVSxXLFkscSl7dm9pZCAwPT09cSYmKHE9WSksVVtxXT1XW1ldfSksZz10aGlzJiZ0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdHx8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oVSxXKXtPYmpl''@;'; put 'put ''Y3QuZGVmaW5lUHJvcGVydHkoVSwiZGVmYXVsdCIse2VudW1lcmFibGU6ITAsdmFsdWU6V30pfTpmdW5jdGlvbihVLFcpe1UuZGVmYXVsdD1XfSksQj10aGlzJiZ0aGlzLl9faW1wb3J0U3Rhcnx8ZnVuY3Rpb24oVSl7aWYoVSYmVS5fX2VzTW9kdWxlKXJldHVybiBVO3ZhciBXPXt9O2lmKG51''@;'; put 'put ''bGwhPVUpZm9yKHZhciBZIGluIFUpImRlZmF1bHQiIT09WSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFUsWSkmJl8oVyxVLFkpO3JldHVybiBnKFcsVSksV30sdz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oVSxXKXtmb3IodmFyIFkgaW4gVSkiZGVm''@;'; put 'put ''YXVsdCIhPT1ZJiYhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFcsWSkmJl8oVyxVLFkpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC53cml0ZVRvUGF0aD1YLndyaXRlVG9TdHJpbmc9WC53cml0ZVRvQnVmZmVyPVgud3Jp''@;'; put 'put ''dGVUb1N0cmVhbT1YLndyaXRlPVguZm9ybWF0PVguRm9ybWF0dGVyT3B0aW9ucz1YLkNzdkZvcm1hdHRlclN0cmVhbT12b2lkIDA7Y29uc3QgUD15KDk1MzkpLEY9eSgyODMwKSxPPUIoeSg4NjQ2KSksej15KDY3NjMpLE49eSgzMDYyKTt3KHkoNDY5MiksWCk7dmFyIEw9eSgzMDYyKTtPYmpl''@;'; put 'put ''Y3QuZGVmaW5lUHJvcGVydHkoWCwiQ3N2Rm9ybWF0dGVyU3RyZWFtIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gTC5Dc3ZGb3JtYXR0ZXJTdHJlYW19fSk7dmFyIEs9eSg2NzYzKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiRm9ybWF0dGVyT3B0aW9ucyIse2VudW1l''@;'; put 'put ''cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEsuRm9ybWF0dGVyT3B0aW9uc319KSxYLmZvcm1hdD1VPT5uZXcgTi5Dc3ZGb3JtYXR0ZXJTdHJlYW0obmV3IHouRm9ybWF0dGVyT3B0aW9ucyhVKSksWC53cml0ZT0oVSxXKT0+e2NvbnN0IFk9WC5mb3JtYXQoVykscT1QLnByb21pc2lm''@;'; put 'put ''eSgoZWUsSik9PntZLndyaXRlKGVlLHZvaWQgMCxKKX0pO3JldHVybiBVLnJlZHVjZSgoZWUsSik9PmVlLnRoZW4oKCk9PnEoSikpLFByb21pc2UucmVzb2x2ZSgpKS50aGVuKCgpPT5ZLmVuZCgpKS5jYXRjaChlZT0+e1kuZW1pdCgiZXJyb3IiLGVlKX0pLFl9LFgud3JpdGVUb1N0cmVhbT0o''@;'; put 'put ''VSxXLFkpPT5YLndyaXRlKFcsWSkucGlwZShVKSxYLndyaXRlVG9CdWZmZXI9KFUsVz17fSk9Pntjb25zdCBZPVtdLHE9bmV3IEYuV3JpdGFibGUoe3dyaXRlKGVlLEosbmUpe1kucHVzaChlZSksbmUoKX19KTtyZXR1cm4gbmV3IFByb21pc2UoKGVlLEopPT57cS5vbigiZXJyb3IiLEopLm9u''@;'; put 'put ''KCJmaW5pc2giLCgpPT5lZShJLmNvbmNhdChZKSkpLFgud3JpdGUoVSxXKS5waXBlKHEpfSl9LFgud3JpdGVUb1N0cmluZz0oVSxXKT0+WC53cml0ZVRvQnVmZmVyKFUsVykudGhlbihZPT5ZLnRvU3RyaW5nKCkpLFgud3JpdGVUb1BhdGg9KFUsVyxZKT0+e2NvbnN0IHE9Ty5jcmVhdGVXcml0''@;'; put 'put ''ZVN0cmVhbShVLHtlbmNvZGluZzoidXRmOCJ9KTtyZXR1cm4gWC53cml0ZShXLFkpLnBpcGUocSl9fSw0NjkyOih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5pc1N5bmNUcmFuc2Zvcm09dm9pZCAwLFguaXNT''@;'; put 'put ''eW5jVHJhbnNmb3JtPXk9PjE9PT15Lmxlbmd0aH0sMjY1NjpmdW5jdGlvbih1ZSxYLHkpeyJ1c2Ugc3RyaWN0Ijt2YXIgST10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oTyl7cmV0dXJuIE8mJk8uX19lc01vZHVsZT9POntkZWZhdWx0Ok99fTtPYmplY3QuZGVmaW5lUHJv''@;'; put 'put ''cGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5kZWNvZGVUb2tlbj1YLmhhc1Rva2VuRXhwaXJlZD1YLmlzUmVmcmVzaFRva2VuRXhwaXJpbmc9WC5pc0FjY2Vzc1Rva2VuRXhwaXJpbmc9dm9pZCAwO2NvbnN0IF89SSh5KDYyNDUpKTtmdW5jdGlvbiBQKE8seil7cmV0dXJuKDAs''@;'; put 'put ''Xy5kZWZhdWx0KShPKS5leHAtKG5ldyBEYXRlKS52YWx1ZU9mKCkvMWUzPD16fVguaXNBY2Nlc3NUb2tlbkV4cGlyaW5nPWZ1bmN0aW9uIGcoTyx6PTM2MDApe3JldHVybiFPfHxQKE8seil9LFguaXNSZWZyZXNoVG9rZW5FeHBpcmluZz1mdW5jdGlvbiBCKE8sej0zMCl7cmV0dXJuIU98fFAo''@;'; put 'put ''Tyx6KX0sWC5oYXNUb2tlbkV4cGlyZWQ9ZnVuY3Rpb24gdyhPKXtyZXR1cm4hT3x8UChPLDApfSxYLmRlY29kZVRva2VuPWZ1bmN0aW9uIEYoTyl7bGV0IHo7dHJ5e3o9KDAsXy5kZWZhdWx0KShPKX1jYXRjaHt0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgdG9rZW4gc3VwcGxpZWQuIil9cmV0''@;'; put 'put ''dXJuIHp9fSw2Nzk5OmZ1bmN0aW9uKHVlLFgseSl7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihnLEIsdyxQKXt2b2lkIDA9PT1QJiYoUD13KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZyxQLHtlbnVtZXJhYmxl''@;'; put 'put ''OiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBCW3ddfX0pfTpmdW5jdGlvbihnLEIsdyxQKXt2b2lkIDA9PT1QJiYoUD13KSxnW1BdPUJbd119KSxfPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihnLEIpe2Zvcih2YXIgdyBpbiBnKSJkZWZhdWx0IiE9PXcmJiFPYmplY3QucHJv''@;'; put 'put ''dG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoQix3KSYmSShCLGcsdyl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxfKHkoMjY1NiksWCl9LDMyNTk6KHVlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9k''@;'; put 'put ''dWxlIix7dmFsdWU6ITB9KSxYLnByZWZpeE1lc3NhZ2U9dm9pZCAwLFgucHJlZml4TWVzc2FnZT0oSSxfKT0+e2lmKCJvYmplY3QiPT10eXBlb2YgSSlpZihJLmhhc093blByb3BlcnR5KCJtZXNzYWdlIikpSS5tZXNzYWdlPV8rSS5tZXNzYWdlO2Vsc2V7aWYoIUkuaGFzT3duUHJvcGVydHko''@;'; put 'put ''ImJvZHkiKSlyZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LEkpLHttZXNzYWdlOl99KTtpZigib2JqZWN0Ij09dHlwZW9mIEkuYm9keSYmKEkubWVzc2FnZT1JLmJvZHkubWVzc2FnZT9fK0kuYm9keS5tZXNzYWdlOl8pLCJzdHJpbmciPT10eXBlb2YgSS5ib2R5KXtsZXQg''@;'; put 'put ''Zzt0cnl7Zz1KU09OLnBhcnNlKEkuYm9keSl9Y2F0Y2h7cmV0dXJuIEkubWVzc2FnZT1fLEl9cmV0dXJuIGcubWVzc2FnZT1nLm1lc3NhZ2U/XytnLm1lc3NhZ2U6XyxJLmJvZHk9ZyxJfX1yZXR1cm4ic3RyaW5nIj09dHlwZW9mIEkmJihJPV8rSSksSX19LDk3Nzg6ZnVuY3Rpb24odWUsWCx5''@;'; put 'put ''KXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGcsQix3LFApe3ZvaWQgMD09PVAmJihQPXcpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShnLFAse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEJb''@;'; put 'put ''d119fSl9OmZ1bmN0aW9uKGcsQix3LFApe3ZvaWQgMD09PVAmJihQPXcpLGdbUF09Qlt3XX0pLF89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGcsQil7Zm9yKHZhciB3IGluIGcpImRlZmF1bHQiIT09dyYmIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChC''@;'; put 'put ''LHcpJiZJKEIsZyx3KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLF8oeSgzMjU5KSxYKSxfKHkoMTA2NCksWCl9LDEwNjQ6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZToh''@;'; put 'put ''MH0pLFguU2VydmVyVHlwZUVycm9yPXZvaWQgMDtjb25zdCBJPXkoMzkwMCk7Y2xhc3MgXyBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKEI9W10pe2xldCB3PShCPVsuLi5uZXcgU2V0KEIpXSkubGVuZ3RoP0Iuam9pbigiLCAiKS50cmltKCk6W0kuU2VydmVyVHlwZS5TYXNWaXlhLEkuU2Vy''@;'; put 'put ''dmVyVHlwZS5TYXM5LEkuU2VydmVyVHlwZS5TYXNqc10uam9pbigiLCAiKS50cmltKCk7dz13LnJlcGxhY2UoLyxccyhbXixdKikkLywiIGFuZCAkMSIpLHN1cGVyKGBJbnZhbGlkIHNlcnZlciB0eXBlOiB2YWxpZCBvcHRpb24kezEhPT1CLmxlbmd0aD8icyI6IiJ9ICR7MSE9PUIubGVuZ3Ro''@;'; put 'put ''PyJhcmUiOiJpcyJ9ICR7d31gKSx0aGlzLm5hbWU9IlNlcnZlclR5cGVFcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsXy5wcm90b3R5cGUpfX1YLlNlcnZlclR5cGVFcnJvcj1ffSwzOTA2OmZ1bmN0aW9uKHVlLFgseSl7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19h''@;'; put 'put ''d2FpdGVyfHxmdW5jdGlvbihPLHosTixMKXtyZXR1cm4gbmV3KE58fChOPVByb21pc2UpKShmdW5jdGlvbihVLFcpe2Z1bmN0aW9uIFkoSil7dHJ5e2VlKEwubmV4dChKKSl9Y2F0Y2gobmUpe1cobmUpfX1mdW5jdGlvbiBxKEope3RyeXtlZShMLnRocm93KEopKX1jYXRjaChuZSl7VyhuZSl9''@;'; put 'put ''fWZ1bmN0aW9uIGVlKEope0ouZG9uZT9VKEoudmFsdWUpOmZ1bmN0aW9uIEsoVSl7cmV0dXJuIFUgaW5zdGFuY2VvZiBOP1U6bmV3IE4oZnVuY3Rpb24oVyl7VyhVKX0pfShKLnZhbHVlKS50aGVuKFkscSl9ZWUoKEw9TC5hcHBseShPLHp8fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5l''@;'; put 'put ''UHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC51cGRhdGVDc3Y9WC5jcmVhdGVDc3Y9WC5yZWFkQ3N2PXZvaWQgMDtjb25zdCBfPXkoMTU1OSksZz15KDcyMDEpO1gucmVhZENzdj1PPT5JKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybih5aWVsZCgw''@;'; put 'put ''LF8ucmVhZEZpbGUpKE8pKS5zcGxpdCgiXG4iKS5maWx0ZXIoTj0+Ti5sZW5ndGgpLm1hcChOPT5OLnNwbGl0KCIsIikpfSksWC5jcmVhdGVDc3Y9KE8seixOKT0+SSh2b2lkIDAsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBMPXlpZWxkKDAsZy53cml0ZVRvU3RyaW5nKSh6LHto''@;'; put 'put ''ZWFkZXJzOk59KTt5aWVsZCgwLF8uY3JlYXRlRmlsZSkoTyxMKX0pLFgudXBkYXRlQ3N2PShPLHosTixMKT0+SSh2b2lkIDAsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBLPXlpZWxkIEYoTyx6LE4sTCk7aWYoTCl7Y29uc3QgVT0wPT09Sy5sZW5ndGg/MTpLLmxlbmd0aCxXPU4u''@;'; put 'put ''ZmluZEluZGV4KFk9Plk9PT1MKTtXPi0xP3ouc3BsaWNlKFcsMCxVKTooTi5zcGxpY2UoMCwwLEwpLHouc3BsaWNlKDAsMCxVKSl9Sy5wdXNoKHopLHlpZWxkKDAsWC5jcmVhdGVDc3YpKE8sSyxOKX0pO2NvbnN0IEY9KE8seixOLEwpPT5JKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9u''@;'; put 'put ''Kigpe2lmKHoubGVuZ3RoIT09Ti5sZW5ndGgpe2lmKHoubGVuZ3RoPk4ubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiYSByZWNvcmQgY2FuIG5vdCBoYXZlIG1vcmUgZmllbGRzIHRoYW4gcHJvdmlkZWQgY29sdW1ucyIpO2lmKCFMfHx6Lmxlbmd0aCsxIT09Ti5sZW5ndGgpdGhyb3cgbmV3IEVy''@;'; put 'put ''cm9yKCJhIHJlY29yZCBjYW4gbm90IGhhdmUgbGVzcyBmaWVsZHMgdGhhbiBwcm92aWRlZCBjb2x1bW5zIil9ZWxzZSBpZihMJiZOLmluY2x1ZGVzKEwpKXRocm93IG5ldyBFcnJvcigiYSByZWNvcmQgY2FuIG5vdCBoYXZlIG1vcmUgZmllbGRzIHRoYW4gcHJvdmlkZWQgY29sdW1ucyIpO2Nv''@;'; put 'put ''bnN0IEs9eWllbGQoMCxYLnJlYWRDc3YpKE8pLmNhdGNoKFc9PltdKSxVPUtbMF07aWYoVSl7aWYoTi5sZW5ndGg+VS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJudW1iZXIgb2YgcHJvdmlkZWQgY29sdW1ucyBhcmUgZ3JlYXRlciB0aGFuIG51bWJlciBvZiBleGlzdGluZyBjb2x1bW5zIik7''@;'; put 'put ''aWYoTi5sZW5ndGg8VS5sZW5ndGgpe2lmKCFMfHxOLmxlbmd0aCsxIT09VS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJudW1iZXIgb2YgcHJvdmlkZWQgY29sdW1ucyBhcmUgbGVzcyB0aGFuIG51bWJlciBvZiBleGlzdGluZyBjb2x1bW5zIik7Y29uc3QgVz1VLmZpbmRJbmRleChxPT5xPT09''@;'; put 'put ''TCksWT1bLi4uTl07aWYoIShXPi0xKSl0aHJvdyBuZXcgRXJyb3IoInByb3ZpZGVkIGNvbHVtbnMgZG9lcyBub3QgbWF0Y2ggZXhpc3RpbmcgY29sdW1ucyIpO2lmKFkuc3BsaWNlKFcsMCxMKSxKU09OLnN0cmluZ2lmeShOKSE9PUpTT04uc3RyaW5naWZ5KFkpKXRocm93IG5ldyBFcnJvcigi''@;'; put 'put ''cHJvdmlkZWQgY29sdW1ucyBkb2VzIG5vdCBtYXRjaCBleGlzdGluZyBjb2x1bW5zIil9ZWxzZXtpZihKU09OLnN0cmluZ2lmeShOKSE9PUpTT04uc3RyaW5naWZ5KFUpKXRocm93IG5ldyBFcnJvcigicHJvdmlkZWQgY29sdW1ucyBkb2VzIG5vdCBtYXRjaCBleGlzdGluZyBjb2x1bW5zIik7''@;'; put 'put ''aWYoTCYmIU4uaW5jbHVkZXMoTCkpdGhyb3cgbmV3IEVycm9yKCJjYW4gbm90IGFkZCBuZXcgaWQgdG8gZXhpc3RpbmcgZGF0YSIpfX1yZXR1cm4gS30pfSwxNTU5OmZ1bmN0aW9uKHVlLFgseSl7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0''@;'; put 'put ''LmNyZWF0ZT9mdW5jdGlvbihtLEEsYWUsdGUpe3ZvaWQgMD09PXRlJiYodGU9YWUpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtLHRlLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBBW2FlXX19KX06ZnVuY3Rpb24obSxBLGFlLHRlKXt2b2lkIDA9PT10ZSYmKHRlPWFlKSxt''@;'; put 'put ''W3RlXT1BW2FlXX0pLF89dGhpcyYmdGhpcy5fX3NldE1vZHVsZURlZmF1bHR8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKG0sQSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KG0sImRlZmF1bHQiLHtlbnVtZXJhYmxlOiEwLHZhbHVlOkF9KX06ZnVuY3Rpb24obSxBKXttLmRlZmF1bHQ9QX0pLGc9''@;'; put 'put ''dGhpcyYmdGhpcy5fX2ltcG9ydFN0YXJ8fGZ1bmN0aW9uKG0pe2lmKG0mJm0uX19lc01vZHVsZSlyZXR1cm4gbTt2YXIgQT17fTtpZihudWxsIT1tKWZvcih2YXIgYWUgaW4gbSkiZGVmYXVsdCIhPT1hZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG0sYWUpJiZJKEEs''@;'; put 'put ''bSxhZSk7cmV0dXJuIF8oQSxtKSxBfSxCPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihtLEEsYWUsdGUpe3JldHVybiBuZXcoYWV8fChhZT1Qcm9taXNlKSkoZnVuY3Rpb24od2UsVWUpe2Z1bmN0aW9uIEplKHZlKXt0cnl7eGUodGUubmV4dCh2ZSkpfWNhdGNoKFhlKXtVZShYZSl9''@;'; put 'put ''fWZ1bmN0aW9uIG90KHZlKXt0cnl7eGUodGUudGhyb3codmUpKX1jYXRjaChYZSl7VWUoWGUpfX1mdW5jdGlvbiB4ZSh2ZSl7dmUuZG9uZT93ZSh2ZS52YWx1ZSk6ZnVuY3Rpb24gc2Uod2Upe3JldHVybiB3ZSBpbnN0YW5jZW9mIGFlP3dlOm5ldyBhZShmdW5jdGlvbihVZSl7VWUod2UpfSl9''@;'; put 'put ''KHZlLnZhbHVlKS50aGVuKEplLG90KX14ZSgodGU9dGUuYXBwbHkobSxBfHxbXSkpLm5leHQoKSl9KX0sdz10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24obSl7cmV0dXJuIG0mJm0uX19lc01vZHVsZT9tOntkZWZhdWx0Om19fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwi''@;'; put 'put ''X19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5nZXRMaW5lRW5kaW5nPVguaXNUZXN0RmlsZT1YLnRlc3RGaWxlUmVnRXhwPVguY3JlYXRlUmVhZFN0cmVhbT1YLmNyZWF0ZVdyaXRlU3RyZWFtPVguZ2V0UmVhbFBhdGg9WC5iYXNlNjRFbmNvZGVGaWxlPVguYmFzZTY0RW5jb2RlSW1hZ2VGaWxl''@;'; put 'put ''PVgucGF0aFNlcEVzY2FwZWQ9WC5jb3B5PVgubW92ZUZpbGU9WC5nZXRSZWxhdGl2ZVBhdGg9WC51bmlmeUZpbGVQYXRoPVguZGVsZXRlRm9sZGVyPVguZGVsZXRlRmlsZT1YLmNyZWF0ZUZpbGU9WC5jcmVhdGVGb2xkZXI9WC5saXN0RmlsZXNBbmRTdWJGb2xkZXJzSW5Gb2xkZXI9WC5saXN0''@;'; put 'put ''U3ViRm9sZGVyc0luRm9sZGVyPVgubGlzdFNhc0ZpbGVzSW5Gb2xkZXI9WC5saXN0SW5pRmlsZXNJbkZvbGRlcj1YLmxpc3RGaWxlc0luRm9sZGVyPVgucmVhZEZpbGVCaW5hcnk9WC5yZWFkRmlsZT1YLmlzRm9sZGVyPVguZm9sZGVyRXhpc3RzPVguZmlsZUV4aXN0cz12b2lkIDA7Y29uc3Qg''@;'; put 'put ''UD13KHkoNTY3NCkpLEY9dyh5KDI1MjApKSxPPXkoNjI2Niksej1nKHkoMjk3NSkpLE49eSgzOTAwKTtmdW5jdGlvbiBLKG0pe3JldHVybiBCKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gUC5kZWZhdWx0LnByb21pc2VzLmFjY2VzcyhtLFAuZGVmYXVsdC5jb25zdGFu''@;'; put 'put ''dHMuRl9PSykudGhlbigoKT0+ITApLmNhdGNoKCgpPT4hMSl9KX1mdW5jdGlvbiBZKG0pe3JldHVybiBCKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gUC5kZWZhdWx0LnByb21pc2VzLnJlYWRGaWxlKG0pfSl9ZnVuY3Rpb24gcShtKXtyZXR1cm4gQih0aGlzLHZvaWQg''@;'; put 'put ''MCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIFAuZGVmYXVsdC5wcm9taXNlcy5yZWFkZGlyKG0se3dpdGhGaWxlVHlwZXM6ITB9KS50aGVuKEE9PkEuZmlsdGVyKGFlPT4hYWUuaXNEaXJlY3RvcnkoKSkubWFwKGFlPT5hZS5uYW1lKSl9KX1mdW5jdGlvbiBpZShtLEE9ITAsYWU9W10pe3Jl''@;'; put 'put ''dHVybiBCKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gUC5kZWZhdWx0LnByb21pc2VzLnJlYWRkaXIobSx7d2l0aEZpbGVUeXBlczohMH0pLnRoZW4odGU9PkIodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2lmKEEmJnRlLmZpbHRlcih3ZT0+d2UuaXNEaXJl''@;'; put 'put ''Y3RvcnkoKSkubGVuZ3RoKXtsZXQgd2U9W107cmV0dXJuIHlpZWxkKDAsTy5hc3luY0ZvckVhY2gpKHRlLmZpbHRlcihVZT0+VWUuaXNEaXJlY3RvcnkoKSksVWU9PkIodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IEplPVVlLm5hbWU7aWYoIWFlLmluY2x1ZGVzKEplKSl7''@;'; put 'put ''Y29uc3Qgb3Q9Ri5kZWZhdWx0LmpvaW4obSxKZSk7d2U9Wy4uLndlLC4uLih5aWVsZCBpZShvdCxBLGFlKSkubWFwKHhlPT5GLmRlZmF1bHQuam9pbihKZSx4ZSkpXX19KSksWy4uLnRlLmZpbHRlcihVZT0+IVVlLmlzRGlyZWN0b3J5KCkpLm1hcChVZT0+VWUubmFtZSksLi4ud2VdfXJldHVy''@;'; put 'put ''biB0ZS5tYXAoc2U9PnNlLm5hbWUpfSkpfSl9ZnVuY3Rpb24gbGUobSl7cmV0dXJuIEIodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiBQLmRlZmF1bHQucHJvbWlzZXMubWtkaXIobSx7cmVjdXJzaXZlOiEwfSl9KX1mdW5jdGlvbiBTZShtLEE9Ri5kZWZhdWx0LnNlcCxh''@;'; put 'put ''ZT0iLyIpe2NvbnN0IHRlPXt1bml4OiIvIix3aW46IlxcIn07bGV0IHNlPU9iamVjdC5rZXlzKHRlKS5maW5kKHdlPT50ZVt3ZV09PT1BKTtpZihzZSl7Y29uc3Qgd2U9dGVbT2JqZWN0LmtleXModGUpLmZpbmQoVWU9PlVlIT09c2UpXTtyZXR1cm4gc2U9dGVbc2VdLG0uc3BsaXQod2UpLmpv''@;'; put 'put ''aW4oc2UpfXJldHVybiBtLnNwbGl0KGFlKS5qb2luKEEpfVguZmlsZUV4aXN0cz1mdW5jdGlvbiBMKG0pe3JldHVybiBCKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gUC5kZWZhdWx0LnByb21pc2VzLmFjY2VzcyhtLFAuZGVmYXVsdC5jb25zdGFudHMuRl9PSykudGhl''@;'; put 'put ''bigoKT0+ITApLmNhdGNoKCgpPT4hMSl9KX0sWC5mb2xkZXJFeGlzdHM9SyxYLmlzRm9sZGVyPWZ1bmN0aW9uIFUobSl7cmV0dXJuIEIodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiBQLmRlZmF1bHQucHJvbWlzZXMubHN0YXQobSkudGhlbihBPT5BLmlzRGlyZWN0b3J5''@;'; put 'put ''KCkpLmNhdGNoKCgpPT4hMSl9KX0sWC5yZWFkRmlsZT1mdW5jdGlvbiBXKG0sQT0idXRmOCIpe3JldHVybiBCKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gUC5kZWZhdWx0LnByb21pc2VzLnJlYWRGaWxlKG0sQSl9KX0sWC5yZWFkRmlsZUJpbmFyeT1ZLFgubGlzdEZp''@;'; put 'put ''bGVzSW5Gb2xkZXI9cSxYLmxpc3RJbmlGaWxlc0luRm9sZGVyPWZ1bmN0aW9uIGVlKG0pe3JldHVybiBCKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4oeWllbGQgcShtKSkuZmlsdGVyKEE9PkEuZW5kc1dpdGgoIi5pbmkiKSl9KX0sWC5saXN0U2FzRmlsZXNJbkZvbGRl''@;'; put 'put ''cj1mdW5jdGlvbiBKKG0sQT0hMSxhZT1bXSl7cmV0dXJuIEIodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybih5aWVsZCBpZShtLEEsYWUpKS5maWx0ZXIod2U9PndlLmVuZHNXaXRoKCIuc2FzIikpfSl9LFgubGlzdFN1YkZvbGRlcnNJbkZvbGRlcj1mdW5jdGlvbiBuZSht''@;'; put 'put ''KXtyZXR1cm4gQih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIFAuZGVmYXVsdC5wcm9taXNlcy5yZWFkZGlyKG0se3dpdGhGaWxlVHlwZXM6ITB9KS50aGVuKEE9PkEuZmlsdGVyKGFlPT5hZS5pc0RpcmVjdG9yeSgpKS5tYXAoYWU9PmFlLm5hbWUpKX0pfSxYLmxpc3RG''@;'; put 'put ''aWxlc0FuZFN1YkZvbGRlcnNJbkZvbGRlcj1pZSxYLmNyZWF0ZUZvbGRlcj1sZSxYLmNyZWF0ZUZpbGU9ZnVuY3Rpb24gbWUobSxBLGFlKXtyZXR1cm4gQih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7aWYoKG09U2UobSkpLnNwbGl0KEYuZGVmYXVsdC5zZXApLmxlbmd0aD4xKXts''@;'; put 'put ''ZXQgdGU9bS5zcGxpdChGLmRlZmF1bHQuc2VwKTt0ZS5wb3AoKTtjb25zdCBzZT10ZS5qb2luKEYuZGVmYXVsdC5zZXApOyh5aWVsZCBLKHNlKSl8fCh5aWVsZCBsZShzZSkpfXJldHVybiBQLmRlZmF1bHQucHJvbWlzZXMud3JpdGVGaWxlKG0sQSxhZSl9KX0sWC5kZWxldGVGaWxlPWZ1bmN0''@;'; put 'put ''aW9uIF9lKG0pe3JldHVybiBCKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gUC5kZWZhdWx0LnJlbW92ZShtKX0pfSxYLmRlbGV0ZUZvbGRlcj1mdW5jdGlvbiBUZShtKXtyZXR1cm4gQih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIFAuZGVmYXVs''@;'; put 'put ''dC5ybShtLHtyZWN1cnNpdmU6ITAsZm9yY2U6ITB9KX0pfSxYLnVuaWZ5RmlsZVBhdGg9U2UsWC5nZXRSZWxhdGl2ZVBhdGg9ZnVuY3Rpb24gamUobSxBKXtjb25zdCBhZT1tLnNwbGl0KEYuZGVmYXVsdC5zZXApLHRlPUEuc3BsaXQoRi5kZWZhdWx0LnNlcCk7bGV0IHNlPVtdLHdlPVtdO2Fl''@;'; put 'put ''LmZvckVhY2goKHZlLFhlKT0+e3ZvaWQgMCE9PXRlW1hlXSYmYWVbWGVdPT09dGVbWGVdP3NlLnB1c2godmUpOnZlJiZ3ZS5wdXNoKHZlKX0pO2NvbnN0IFVlPXNlLmpvaW4oRi5kZWZhdWx0LnNlcCksSmU9bmV3IFJlZ0V4cChgXiR7Ri5kZWZhdWx0LnNlcC5yZXBsYWNlKC9cXC9nLCJcXFxc''@;'; put 'put ''Iil9YCksb3Q9bmV3IFJlZ0V4cChgJHtGLmRlZmF1bHQuc2VwLnJlcGxhY2UoL1xcL2csIlxcXFwiKX0kYCk7cmV0dXJuKHdlLmxlbmd0aD9gLi4ke0YuZGVmYXVsdC5zZXB9YC5yZXBlYXQod2UubGVuZ3RoKTpgLiR7Ri5kZWZhdWx0LnNlcH1gKStBLnJlcGxhY2UoVWUsIiIpLnJlcGxhY2Uo''@;'; put 'put ''SmUsIiIpLnJlcGxhY2Uob3QsIiIpfSxYLm1vdmVGaWxlPWZ1bmN0aW9uIFYobSxBKXtyZXR1cm4gQih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIFAuZGVmYXVsdC5wcm9taXNlcy5yZW5hbWUobSxBKX0pfSxYLmNvcHk9ZnVuY3Rpb24gcChtLEEpe3JldHVybiBCKHRo''@;'; put 'put ''aXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gUC5kZWZhdWx0LmNvcHkobSxBKX0pfSxYLnBhdGhTZXBFc2NhcGVkPUYuZGVmYXVsdC5zZXAucmVwbGFjZSgvXFwvZywiXFxcXCIpLFguYmFzZTY0RW5jb2RlSW1hZ2VGaWxlPWZ1bmN0aW9uIGIobSl7cmV0dXJuIEIodGhpcyx2''@;'; put 'put ''b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiBZKG0pLnRoZW4oQT0+e2xldCBhZT1GLmRlZmF1bHQuZXh0bmFtZShtKS5zdWJzdHIoMSl8fCJwbmciO3JldHVybiJzdmciPT09YWUmJihhZT0ic3ZnK3htbCIpLCJkYXRhOmltYWdlLyIrYWUrIjtiYXNlNjQsIitBLnRvU3RyaW5nKCJi''@;'; put 'put ''YXNlNjQiKX0pfSl9LFguYmFzZTY0RW5jb2RlRmlsZT1mdW5jdGlvbiB4KG0pe3JldHVybiBCKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gUC5kZWZhdWx0LnByb21pc2VzLnJlYWRGaWxlKG0se2VuY29kaW5nOiJiYXNlNjQifSl9KX0sWC5nZXRSZWFsUGF0aD1mdW5j''@;'; put 'put ''dGlvbiBDKG0pe3JldHVybiBQLmRlZmF1bHQucmVhbHBhdGhTeW5jKG0pfSxYLmNyZWF0ZVdyaXRlU3RyZWFtPWZ1bmN0aW9uIFQobSl7cmV0dXJuIEIodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybih5aWVsZCB6LmZpbGVFeGlzdHMobSkpfHwoeWllbGQgei5jcmVhdGVG''@;'; put 'put ''aWxlKG0sIiIpKSxQLmRlZmF1bHQuY3JlYXRlV3JpdGVTdHJlYW0obSx7ZmxhZ3M6ImEifSl9KX0sWC5jcmVhdGVSZWFkU3RyZWFtPW09PkIodm9pZCAwLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIFAuZGVmYXVsdC5jcmVhdGVSZWFkU3RyZWFtKG0pfSksWC50ZXN0RmlsZVJl''@;'; put 'put ''Z0V4cD0vXC50ZXN0XC4oXGQrXC4pP3NhcyQvaSxYLmlzVGVzdEZpbGU9bT0+WC50ZXN0RmlsZVJlZ0V4cC50ZXN0KG0pLFguZ2V0TGluZUVuZGluZz1tPT5uZXcgUmVnRXhwKE4uTGluZUVuZGluZ3MuQ1JMRikudGVzdChtKT9OLkxpbmVFbmRpbmdzLkNSTEY6Ti5MaW5lRW5kaW5ncy5MRn0s''@;'; put 'put ''NTYyNjpmdW5jdGlvbih1ZSxYLHkpeyJ1c2Ugc3RyaWN0Ijt2YXIgST10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24odyl7cmV0dXJuIHcmJncuX19lc01vZHVsZT93OntkZWZhdWx0Ond9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEw''@;'; put 'put ''fSksWC5nZXRBYnNvbHV0ZVBhdGg9dm9pZCAwO2NvbnN0IF89SSh5KDI1MjApKSxnPUkoeSg3NDM1KSk7WC5nZXRBYnNvbHV0ZVBhdGg9KHcsUCk9Pl8uZGVmYXVsdC5pc0Fic29sdXRlKHcpfHwvXn4vLmV4ZWModyk/Xy5kZWZhdWx0Lm5vcm1hbGl6ZSh3LnJlcGxhY2UoL15+LyxnLmRlZmF1''@;'; put 'put ''bHQuaG9tZWRpcigpKSk6Xy5kZWZhdWx0LmpvaW4oUCx3KX0sMjk3NTpmdW5jdGlvbih1ZSxYLHkpeyJ1c2Ugc3RyaWN0Ijt2YXIgST10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24odyxQLEYsTyl7dm9pZCAwPT09TyYmKE89RiksT2JqZWN0LmRl''@;'; put 'put ''ZmluZVByb3BlcnR5KHcsTyx7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gUFtGXX19KX06ZnVuY3Rpb24odyxQLEYsTyl7dm9pZCAwPT09TyYmKE89Riksd1tPXT1QW0ZdfSksXz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24odyxQKXtmb3IodmFyIEYgaW4g''@;'; put 'put ''dykiZGVmYXVsdCIhPT1GJiYhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFAsRikmJkkoUCx3LEYpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5yZWFkQ3N2PVguY3JlYXRlQ3N2PVgudXBkYXRlQ3N2PVguZ2V0TGluZUVu''@;'; put 'put ''ZGluZz1YLnRlc3RGaWxlUmVnRXhwPVguaXNUZXN0RmlsZT1YLmdldFJlYWxQYXRoPVguYmFzZTY0RW5jb2RlRmlsZT1YLmJhc2U2NEVuY29kZUltYWdlRmlsZT1YLmNvcHk9WC5wYXRoU2VwRXNjYXBlZD1YLm1vdmVGaWxlPVgudW5pZnlGaWxlUGF0aD1YLmdldFJlbGF0aXZlUGF0aD1YLmRl''@;'; put 'put ''bGV0ZUZvbGRlcj1YLmRlbGV0ZUZpbGU9WC5jcmVhdGVXcml0ZVN0cmVhbT1YLmNyZWF0ZVJlYWRTdHJlYW09WC5jcmVhdGVGb2xkZXI9WC5jcmVhdGVGaWxlPVgubGlzdEZpbGVzQW5kU3ViRm9sZGVyc0luRm9sZGVyPVgubGlzdFN1YkZvbGRlcnNJbkZvbGRlcj1YLmxpc3RTYXNGaWxlc0lu''@;'; put 'put ''Rm9sZGVyPVgubGlzdEluaUZpbGVzSW5Gb2xkZXI9WC5saXN0RmlsZXNJbkZvbGRlcj1YLnJlYWRGaWxlQmluYXJ5PVgucmVhZEZpbGU9WC5pc0ZvbGRlcj1YLmZvbGRlckV4aXN0cz1YLmZpbGVFeGlzdHM9dm9pZCAwO3ZhciBnPXkoMTU1OSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsImZp''@;'; put 'put ''bGVFeGlzdHMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBnLmZpbGVFeGlzdHN9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFgsImZvbGRlckV4aXN0cyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGcuZm9sZGVyRXhpc3RzfX0pLE9iamVjdC5k''@;'; put 'put ''ZWZpbmVQcm9wZXJ0eShYLCJpc0ZvbGRlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGcuaXNGb2xkZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFgsInJlYWRGaWxlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZy5yZWFkRmlsZX19KSxP''@;'; put 'put ''YmplY3QuZGVmaW5lUHJvcGVydHkoWCwicmVhZEZpbGVCaW5hcnkiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBnLnJlYWRGaWxlQmluYXJ5fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJsaXN0RmlsZXNJbkZvbGRlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0''@;'; put 'put ''aW9uKCl7cmV0dXJuIGcubGlzdEZpbGVzSW5Gb2xkZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFgsImxpc3RJbmlGaWxlc0luRm9sZGVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZy5saXN0SW5pRmlsZXNJbkZvbGRlcn19KSxPYmplY3QuZGVmaW5lUHJvcGVy''@;'; put 'put ''dHkoWCwibGlzdFNhc0ZpbGVzSW5Gb2xkZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBnLmxpc3RTYXNGaWxlc0luRm9sZGVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJsaXN0U3ViRm9sZGVyc0luRm9sZGVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rp''@;'; put 'put ''b24oKXtyZXR1cm4gZy5saXN0U3ViRm9sZGVyc0luRm9sZGVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJsaXN0RmlsZXNBbmRTdWJGb2xkZXJzSW5Gb2xkZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBnLmxpc3RGaWxlc0FuZFN1YkZvbGRlcnNJbkZvbGRl''@;'; put 'put ''cn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiY3JlYXRlRmlsZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGcuY3JlYXRlRmlsZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiY3JlYXRlRm9sZGVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXty''@;'; put 'put ''ZXR1cm4gZy5jcmVhdGVGb2xkZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFgsImNyZWF0ZVJlYWRTdHJlYW0iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBnLmNyZWF0ZVJlYWRTdHJlYW19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFgsImNyZWF0ZVdyaXRlU3Ry''@;'; put 'put ''ZWFtIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZy5jcmVhdGVXcml0ZVN0cmVhbX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiZGVsZXRlRmlsZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGcuZGVsZXRlRmlsZX19KSxPYmplY3QuZGVm''@;'; put 'put ''aW5lUHJvcGVydHkoWCwiZGVsZXRlRm9sZGVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZy5kZWxldGVGb2xkZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFgsImdldFJlbGF0aXZlUGF0aCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGcu''@;'; put 'put ''Z2V0UmVsYXRpdmVQYXRofX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJ1bmlmeUZpbGVQYXRoIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZy51bmlmeUZpbGVQYXRofX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJtb3ZlRmlsZSIse2VudW1lcmFibGU6ITAs''@;'; put 'put ''Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGcubW92ZUZpbGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFgsInBhdGhTZXBFc2NhcGVkIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZy5wYXRoU2VwRXNjYXBlZH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiY29weSIs''@;'; put 'put ''e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGcuY29weX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiYmFzZTY0RW5jb2RlSW1hZ2VGaWxlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZy5iYXNlNjRFbmNvZGVJbWFnZUZpbGV9fSksT2JqZWN0''@;'; put 'put ''LmRlZmluZVByb3BlcnR5KFgsImJhc2U2NEVuY29kZUZpbGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBnLmJhc2U2NEVuY29kZUZpbGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFgsImdldFJlYWxQYXRoIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXty''@;'; put 'put ''ZXR1cm4gZy5nZXRSZWFsUGF0aH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiaXNUZXN0RmlsZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGcuaXNUZXN0RmlsZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwidGVzdEZpbGVSZWdFeHAiLHtlbnVtZXJhYmxl''@;'; put 'put ''OiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBnLnRlc3RGaWxlUmVnRXhwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJnZXRMaW5lRW5kaW5nIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZy5nZXRMaW5lRW5kaW5nfX0pO3ZhciBCPXkoMzkwNik7T2JqZWN0LmRl''@;'; put 'put ''ZmluZVByb3BlcnR5KFgsInVwZGF0ZUNzdiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEIudXBkYXRlQ3N2fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJjcmVhdGVDc3YiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBCLmNyZWF0ZUNzdn19''@;'; put 'put ''KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwicmVhZENzdiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEIucmVhZENzdn19KSxfKHkoNTYyNiksWCl9LDI3Nzc6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUi''@;'; put 'put ''LHt2YWx1ZTohMH0pLFgubmV3TGluZT1YLmNhcGl0YWxpemVGaXJzdENoYXI9WC5zYW5pdGl6ZVNwZWNpYWxDaGFycz1YLnBhZFdpdGhOdW1iZXI9dm9pZCAwO3ZhciBJPXkoNTMwNik7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsInBhZFdpdGhOdW1iZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpm''@;'; put 'put ''dW5jdGlvbigpe3JldHVybiBJLnBhZFdpdGhOdW1iZXJ9fSk7dmFyIF89eSg5Mjc1KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwic2FuaXRpemVTcGVjaWFsQ2hhcnMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBfLnNhbml0aXplU3BlY2lhbENoYXJzfX0pLE9iamVj''@;'; put 'put ''dC5kZWZpbmVQcm9wZXJ0eShYLCJjYXBpdGFsaXplRmlyc3RDaGFyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gXy5jYXBpdGFsaXplRmlyc3RDaGFyfX0pO3ZhciBnPXkoMTYyOCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIm5ld0xpbmUiLHtlbnVtZXJhYmxlOiEw''@;'; put 'put ''LGdldDpmdW5jdGlvbigpe3JldHVybiBnLm5ld0xpbmV9fSl9LDUzMDY6KHVlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLnBhZFdpdGhOdW1iZXI9dm9pZCAwLFgucGFkV2l0aE51bWJlcj0oSSxfPTApPT5JPjk/''@;'; put 'put ''STpgJHtffSR7SX1gfSwxNjI4Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNDE1NSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFgubmV3TGluZT12b2lkIDAsWC5uZXdMaW5lPSgpPT4id2luMzIiPT09SS5wbGF0Zm9ybT8iXFxyXFxu''@;'; put 'put ''IjoiXFxuIn0sOTI3NToodWUsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguY2FwaXRhbGl6ZUZpcnN0Q2hhcj1YLnNhbml0aXplU3BlY2lhbENoYXJzPXZvaWQgMCxYLnNhbml0aXplU3BlY2lhbENoYXJzPV89Pl8u''@;'; put 'put ''cmVwbGFjZSgvW1x1MDAxYlx1MDA5Yl1bWygpIzs/XSooPzpbMC05XXsxLDR9KD86O1swLTldezAsNH0pKik/WzAtOUEtT1JaY2YtbnFyeT0+PF0vZywiIiksWC5jYXBpdGFsaXplRmlyc3RDaGFyPV89Pl8uY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrXy5zbGljZSgxKX0sNjQ2NzpmdW5jdGlv''@;'; put 'put ''bih1ZSxYLHkpeyJ1c2Ugc3RyaWN0Ijt2YXIgST10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oRil7cmV0dXJuIEYmJkYuX19lc01vZHVsZT9GOntkZWZhdWx0OkZ9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5pc1NwZWNp''@;'; put 'put ''YWxNaXNzaW5nPVguY2hvaWNlVmFsaWRhdG9yPVguY29uZmlybWF0aW9uVmFsaWRhdG9yPVgudXJsVmFsaWRhdG9yPXZvaWQgMDtjb25zdCBfPUkoeSg0ODEpKTtYLnVybFZhbGlkYXRvcj0oRixPKT0+ISFfLmRlZmF1bHQuaXNIdHRwVXJpKEYpfHwhIV8uZGVmYXVsdC5pc0h0dHBzVXJpKEYp''@;'; put 'put ''fHwiIj09PUZ8fE8sWC5jb25maXJtYXRpb25WYWxpZGF0b3I9Rj0+ITA9PT1GfHwhMT09PUYsWC5jaG9pY2VWYWxpZGF0b3I9KEYsTyx6KT0+Rj4wJiZGPD1PfHx6LFguaXNTcGVjaWFsTWlzc2luZz1GPT4oInN0cmluZyIhPXR5cGVvZiBGfHwhRi5pbmNsdWRlcygiLi4iKSkmJm5ldyBSZWdF''@;'; put 'put ''eHAoIl4oXFwuKT9bYS16Xy5dezF9JCIsImkiKS50ZXN0KEYpfSw3NzU3Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLmdlbmVyYXRlVGltZXN0YW1wPVgudGltZXN0YW1wVG9ZWVlZTU1EREhITU1TUz1Y''@;'; put 'put ''LmNvbnZlcnRTZWNvbmRzVG9IbXM9dm9pZCAwO3ZhciBJPXkoMTMwMik7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsImNvbnZlcnRTZWNvbmRzVG9IbXMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBJLmNvbnZlcnRTZWNvbmRzVG9IbXN9fSksT2JqZWN0LmRlZmluZVBy''@;'; put 'put ''b3BlcnR5KFgsInRpbWVzdGFtcFRvWVlZWU1NRERISE1NU1MiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBJLnRpbWVzdGFtcFRvWVlZWU1NRERISE1NU1N9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFgsImdlbmVyYXRlVGltZXN0YW1wIix7ZW51bWVyYWJsZTohMCxn''@;'; put 'put ''ZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSS5nZW5lcmF0ZVRpbWVzdGFtcH19KX0sMTMwMjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5jb252ZXJ0U2Vjb25kc1RvSG1zPVguZ2VuZXJhdGVUaW1lc3RhbXA9''@;'; put 'put ''WC50aW1lc3RhbXBUb1lZWVlNTURESEhNTVNTPXZvaWQgMDtjb25zdCBJPXkoMjc3Nyk7WC50aW1lc3RhbXBUb1lZWVlNTURESEhNTVNTPSh3PURhdGUubm93KCkpPT57Y29uc3QgUD1uZXcgRGF0ZSh3KTtyZXR1cm5bUC5nZXRGdWxsWWVhcigpLCgwLEkucGFkV2l0aE51bWJlcikoUC5nZXRN''@;'; put 'put ''b250aCgpKzEpLCgwLEkucGFkV2l0aE51bWJlcikoUC5nZXREYXRlKCkpXS5qb2luKCIvIikrIiAiK1soMCxJLnBhZFdpdGhOdW1iZXIpKFAuZ2V0SG91cnMoKSksKDAsSS5wYWRXaXRoTnVtYmVyKShQLmdldE1pbnV0ZXMoKSksKDAsSS5wYWRXaXRoTnVtYmVyKShQLmdldFNlY29uZHMoKSld''@;'; put 'put ''LmpvaW4oIjoiKX0sWC5nZW5lcmF0ZVRpbWVzdGFtcD0odz0iIixQKT0+e2NvbnN0IEY9bmV3IERhdGU7bGV0IE89W0YuZ2V0VVRDRnVsbFllYXIoKSxGLmdldFVUQ01vbnRoKCkrMSxGLmdldFVUQ0RhdGUoKSxGLmdldFVUQ0hvdXJzKCksRi5nZXRVVENNaW51dGVzKCksRi5nZXRVVENTZWNv''@;'; put 'put ''bmRzKCldO3JldHVybiBPPU8ubWFwKHo9PigwLEkucGFkV2l0aE51bWJlcikoeikpLFAmJncmJlA8Ty5sZW5ndGgmJlA+PTAmJk8uc3BsaWNlKFAsMCx3KSxPPU8uam9pbihQPyIiOncpLE99LFguY29udmVydFNlY29uZHNUb0htcz13PT57aWYoIXcpcmV0dXJuIjAgc2Vjb25kIjtjb25zdCBQ''@;'; put 'put ''PU1hdGguZmxvb3Iody82MCksRj1NYXRoLmZsb29yKFAvNjApLE89UCU2MCx6PXclNjA7bGV0IE49IiI7cmV0dXJuIEY+MCYmKE49RisiIGhvdXIiKyhGPjE/InMiOiIiKSksTz4wJiYoTis9YCR7Tj8iLCAiOiIifSR7T30gbWludXRlJHtPPjE/InMiOiIifWApLHo+MCYmKE4rPWAke04/Iiwg''@;'; put 'put ''IjoiIn0ke3p9IHNlY29uZCR7ej4xPyJzIjoiIn1gKSxOfX0sODIzOToodWUsWCk9PnsidXNlIHN0cmljdCI7dmFyIEk7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguQ29uZmlnVHlwZXM9dm9pZCAwLChJPVguQ29uZmlnVHlwZXN8fChYLkNvbmZp''@;'; put 'put ''Z1R5cGVzPXt9KSkuQnVpbGQ9ImJ1aWxkQ29uZmlnIixJLlNlcnZpY2U9InNlcnZpY2VDb25maWciLEkuSm9iPSJqb2JDb25maWciLEkuVGVzdD0idGVzdENvbmZpZyIsSS5Eb2M9ImRvY0NvbmZpZyIsSS5EZXBsb3k9ImRlcGxveUNvbmZpZyIsSS5TdHJlYW09InN0cmVhbUNvbmZpZyIsSS5B''@;'; put 'put ''dXRoPSJhdXRoQ29uZmlnIn0sMjQyNzoodWUsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSwxODk6KHVlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6''@;'; put 'put ''ITB9KX0sMzY5MjoodWUsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSw0NzI5Oih1ZSxYKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgSTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSks''@;'; put 'put ''WC5MaW5lRW5kaW5ncz12b2lkIDAsKEk9WC5MaW5lRW5kaW5nc3x8KFguTGluZUVuZGluZ3M9e30pKS5DUkxGPSJcclxuIixJLkxGPSJcbiJ9LDY5Mzk6KHVlLFgpPT57InVzZSBzdHJpY3QiO3ZhciBJO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxY''@;'; put 'put ''Lk1lbWJlclR5cGU9dm9pZCAwLChJPVguTWVtYmVyVHlwZXx8KFguTWVtYmVyVHlwZT17fSkpLnNlcnZpY2U9InNlcnZpY2UiLEkuZmlsZT0iZmlsZSIsSS5mb2xkZXI9ImZvbGRlciJ9LDMzMjc6KHVlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9k''@;'; put 'put ''dWxlIix7dmFsdWU6ITB9KX0sNTE2NToodWUsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSwzOTAwOmZ1bmN0aW9uKHVlLFgseSl7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwo''@;'; put 'put ''T2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihnLEIsdyxQKXt2b2lkIDA9PT1QJiYoUD13KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZyxQLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBCW3ddfX0pfTpmdW5jdGlvbihnLEIsdyxQKXt2b2lkIDA9PT1QJiYoUD13KSxnW1BdPUJb''@;'; put 'put ''d119KSxfPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihnLEIpe2Zvcih2YXIgdyBpbiBnKSJkZWZhdWx0IiE9PXcmJiFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoQix3KSYmSShCLGcsdyl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxl''@;'; put 'put ''Iix7dmFsdWU6ITB9KSxfKHkoODIzOSksWCksXyh5KDI0MjcpLFgpLF8oeSgxODkpLFgpLF8oeSgzNjkyKSxYKSxfKHkoNjkzOSksWCksXyh5KDMzMjcpLFgpLF8oeSg1MTY1KSxYKSxfKHkoNDA2OSksWCksXyh5KDg5MzIpLFgpLF8oeSg0KSxYKSxfKHkoMjAxNSksWCksXyh5KDg1MTUpLFgp''@;'; put 'put ''LF8oeSg1MzEzKSxYKSxfKHkoODk3OSksWCksXyh5KDQ3MjkpLFgpfSw0MDY5Oih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5pc01hY3JvVmFycz12b2lkIDAsWC5pc01hY3JvVmFycz1JPT5JJiYib2JqZWN0''@;'; put 'put ''Ij09dHlwZW9mIEkubWFjcm9WYXJzJiYhQXJyYXkuaXNBcnJheShJLm1hY3JvVmFycyl9LDg5MzI6KHVlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sNDoodWUsWCk9PnsidXNlIHN0cmljdCI7dmFyIEk7T2JqZWN0''@;'; put 'put ''LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguU0FTSnNGaWxlVHlwZT12b2lkIDAsKEk9WC5TQVNKc0ZpbGVUeXBlfHwoWC5TQVNKc0ZpbGVUeXBlPXt9KSkuc2VydmljZT0iU2VydmljZSIsSS5qb2I9IkpvYiIsSS50ZXN0PSJUZXN0IixJLmZpbGU9IkZpbGUi''@;'; put 'put ''fSwyMDE1Oih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDg1MTU6KHVlLFgpPT57InVzZSBzdHJpY3QiO3ZhciBJO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLlNl''@;'; put 'put ''cnZlclR5cGU9dm9pZCAwLChJPVguU2VydmVyVHlwZXx8KFguU2VydmVyVHlwZT17fSkpLlNhc1ZpeWE9IlNBU1ZJWUEiLEkuU2FzOT0iU0FTOSIsSS5TYXNqcz0iU0FTSlMifSw1MzEzOih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIs''@;'; put 'put ''e3ZhbHVlOiEwfSl9LDg5Nzk6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguVGFyZ2V0PXZvaWQgMDtjb25zdCBJPXkoODIzOSksXz15KDg1MTUpLGc9eSg2NzgxKTtYLlRhcmdldD1jbGFzcyBCe2NvbnN0''@;'; put 'put ''cnVjdG9yKFAsRj17fSl7dGhpcy5fc2VydmVyVHlwZT1fLlNlcnZlclR5cGUuU2FzVml5YSx0aGlzLmdldENvbmZpZz0oTyx6KT0+T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHRoaXMuX2NvbmZpZ1tPXXx8e30pLHpbT10pO3RyeXtpZighUCl0aHJvdyBuZXcgRXJyb3IoIkludmFs''@;'; put 'put ''aWQgdGFyZ2V0OiBJbnB1dCBKU09OIGlzIG51bGwgb3IgdW5kZWZpbmVkLiIpO3RoaXMuX2NvbmZpZz1GLHRoaXMuX25hbWU9KDAsZy52YWxpZGF0ZVRhcmdldE5hbWUpKFAubmFtZSksdGhpcy5fc2VydmVyVXJsPSgwLGcudmFsaWRhdGVTZXJ2ZXJVcmwpKFAuc2VydmVyVXJsKSx0aGlzLl9z''@;'; put 'put ''ZXJ2ZXJUeXBlPSgwLGcudmFsaWRhdGVTZXJ2ZXJUeXBlKShQLnNlcnZlclR5cGUpLHRoaXMuX2h0dHBzQWdlbnRPcHRpb25zPSgwLGcudmFsaWRhdGVIdHRwc0FnZW50T3B0aW9ucykoUC5odHRwc0FnZW50T3B0aW9ucyksdGhpcy5fYXBwTG9jPSgwLGcudmFsaWRhdGVBcHBMb2MpKFAuYXBw''@;'; put 'put ''TG9jKSx0aGlzLl9jb250ZXh0TmFtZT0oMCxnLnZhbGlkYXRlQ29udGV4dE5hbWUpKFAuY29udGV4dE5hbWUsdGhpcy5fc2VydmVyVHlwZSksdGhpcy5fc2VydmVyTmFtZT0oMCxnLnZhbGlkYXRlU2VydmVyTmFtZSkoUC5zZXJ2ZXJOYW1lLHRoaXMuX3NlcnZlclR5cGUpLHRoaXMuX3N5bmNG''@;'; put 'put ''b2xkZXI9KDAsZy52YWxpZGF0ZVN5bmNGb2xkZXIpKFAuc3luY0ZvbGRlciksdGhpcy5fcmVwb3NpdG9yeU5hbWU9KDAsZy52YWxpZGF0ZVJlcG9zaXRvcnlOYW1lKShQLnJlcG9zaXRvcnlOYW1lLHRoaXMuX3NlcnZlclR5cGUpLFAuZG9jQ29uZmlnJiYodGhpcy5fZG9jQ29uZmlnPSgwLGcu''@;'; put 'put ''dmFsaWRhdGVEb2NDb25maWcpKHRoaXMuZ2V0Q29uZmlnKEkuQ29uZmlnVHlwZXMuRG9jLFApKSksUC5hdXRoQ29uZmlnJiYodGhpcy5fYXV0aENvbmZpZz0oMCxnLnZhbGlkYXRlQXV0aENvbmZpZykodGhpcy5nZXRDb25maWcoSS5Db25maWdUeXBlcy5BdXRoLFApKSksUC5hdXRoQ29uZmln''@;'; put 'put ''U2FzOSYmKHRoaXMuX2F1dGhDb25maWdTYXM5PSgwLGcudmFsaWRhdGVBdXRoQ29uZmlnU2FzOSkoUC5hdXRoQ29uZmlnU2FzOSkpLFAuYnVpbGRDb25maWcmJih0aGlzLl9idWlsZENvbmZpZz0oMCxnLnZhbGlkYXRlQnVpbGRDb25maWcpKHRoaXMuZ2V0Q29uZmlnKEkuQ29uZmlnVHlwZXMu''@;'; put 'put ''QnVpbGQsUCksdGhpcy5fbmFtZSkpLHRoaXMuX2RlcGxveUNvbmZpZz0oMCxnLnZhbGlkYXRlRGVwbG95Q29uZmlnKShQLmRlcGxveUNvbmZpZz90aGlzLmdldENvbmZpZyhJLkNvbmZpZ1R5cGVzLkRlcGxveSxQKTp7ZGVwbG95U2VydmljZVBhY2s6ITAsZGVwbG95U2NyaXB0czpbXX0pLFAu''@;'; put 'put ''c2VydmljZUNvbmZpZyYmKHRoaXMuX3NlcnZpY2VDb25maWc9KDAsZy52YWxpZGF0ZVNlcnZpY2VDb25maWcpKHRoaXMuZ2V0Q29uZmlnKEkuQ29uZmlnVHlwZXMuU2VydmljZSxQKSkpLFAuam9iQ29uZmlnJiYodGhpcy5fam9iQ29uZmlnPSgwLGcudmFsaWRhdGVKb2JDb25maWcpKHRoaXMu''@;'; put 'put ''Z2V0Q29uZmlnKEkuQ29uZmlnVHlwZXMuSm9iLFApKSksUC5zdHJlYW1Db25maWcmJih0aGlzLl9zdHJlYW1Db25maWc9KDAsZy52YWxpZGF0ZVN0cmVhbUNvbmZpZykodGhpcy5nZXRDb25maWcoSS5Db25maWdUeXBlcy5TdHJlYW0sUCkpKSxQLnRlc3RDb25maWcmJih0aGlzLl90ZXN0Q29u''@;'; put 'put ''ZmlnPSgwLGcudmFsaWRhdGVUZXN0Q29uZmlnKSh0aGlzLmdldENvbmZpZyhJLkNvbmZpZ1R5cGVzLlRlc3QsUCkpKSxQLm1hY3JvRm9sZGVycyYmUC5tYWNyb0ZvbGRlcnMubGVuZ3RoJiYodGhpcy5fbWFjcm9Gb2xkZXJzPVAubWFjcm9Gb2xkZXJzKSxQLnByb2dyYW1Gb2xkZXJzJiZQLnBy''@;'; put 'put ''b2dyYW1Gb2xkZXJzLmxlbmd0aCYmKHRoaXMuX3Byb2dyYW1Gb2xkZXJzPVAucHJvZ3JhbUZvbGRlcnMpLFAuYmluYXJ5Rm9sZGVycyYmUC5iaW5hcnlGb2xkZXJzLmxlbmd0aCYmKHRoaXMuX2JpbmFyeUZvbGRlcnM9UC5iaW5hcnlGb2xkZXJzKSxQLnN5bmNEaXJlY3RvcmllcyYmUC5zeW5j''@;'; put 'put ''RGlyZWN0b3JpZXMubGVuZ3RoJiYodGhpcy5fc3luY0RpcmVjdG9yaWVzPSgwLGcudmFsaWRhdGVTeW5jRGlyZWN0b3JpZXMpKFAuc3luY0RpcmVjdG9yaWVzKSksUC5zYXNqc0J1aWxkRm9sZGVyJiYodGhpcy5fc2FzanNCdWlsZEZvbGRlcj0oMCxnLnZhbGlkYXRlU2FzanNCdWlsZEZvbGRl''@;'; put 'put ''cikoUC5zYXNqc0J1aWxkRm9sZGVyKSksUC5zYXNqc1Jlc3VsdHNGb2xkZXImJih0aGlzLl9zYXNqc1Jlc3VsdHNGb2xkZXI9KDAsZy52YWxpZGF0ZVNhc2pzUmVzdWx0c0ZvbGRlcikoUC5zYXNqc1Jlc3VsdHNGb2xkZXIpKX1jYXRjaChPKXt0aHJvdyBuZXcgRXJyb3IoYEVycm9yIHBhcnNp''@;'; put 'put ''bmcgdGFyZ2V0OiAke08ubWVzc2FnZX1gKX19Z2V0IG5hbWUoKXtyZXR1cm4gdGhpcy5fbmFtZX1nZXQgc2VydmVyVXJsKCl7cmV0dXJuIHRoaXMuX3NlcnZlclVybH1nZXQgc2VydmVyVHlwZSgpe3JldHVybiB0aGlzLl9zZXJ2ZXJUeXBlfWdldCBodHRwc0FnZW50T3B0aW9ucygpe3JldHVy''@;'; put 'put ''biB0aGlzLl9odHRwc0FnZW50T3B0aW9uc31nZXQgYXBwTG9jKCl7cmV0dXJuIHRoaXMuX2FwcExvY31nZXQgZG9jQ29uZmlnKCl7cmV0dXJuIHRoaXMuX2RvY0NvbmZpZ31nZXQgYXV0aENvbmZpZygpe3JldHVybiB0aGlzLl9hdXRoQ29uZmlnfWdldCBhdXRoQ29uZmlnU2FzOSgpe3JldHVy''@;'; put 'put ''biB0aGlzLl9hdXRoQ29uZmlnU2FzOX1nZXQgYnVpbGRDb25maWcoKXtyZXR1cm4gdGhpcy5fYnVpbGRDb25maWd9Z2V0IGRlcGxveUNvbmZpZygpe3JldHVybiB0aGlzLl9kZXBsb3lDb25maWd9Z2V0IHNlcnZpY2VDb25maWcoKXtyZXR1cm4gdGhpcy5fc2VydmljZUNvbmZpZ31nZXQgam9i''@;'; put 'put ''Q29uZmlnKCl7cmV0dXJuIHRoaXMuX2pvYkNvbmZpZ31nZXQgc3RyZWFtQ29uZmlnKCl7cmV0dXJuIHRoaXMuX3N0cmVhbUNvbmZpZ31nZXQgbWFjcm9Gb2xkZXJzKCl7cmV0dXJuIHRoaXMuX21hY3JvRm9sZGVyc31nZXQgcHJvZ3JhbUZvbGRlcnMoKXtyZXR1cm4gdGhpcy5fcHJvZ3JhbUZv''@;'; put 'put ''bGRlcnN9Z2V0IGJpbmFyeUZvbGRlcnMoKXtyZXR1cm4gdGhpcy5fYmluYXJ5Rm9sZGVyc31nZXQgY29udGV4dE5hbWUoKXtyZXR1cm4gdGhpcy5fY29udGV4dE5hbWV9Z2V0IHNlcnZlck5hbWUoKXtyZXR1cm4gdGhpcy5fc2VydmVyTmFtZX1nZXQgcmVwb3NpdG9yeU5hbWUoKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5fcmVwb3NpdG9yeU5hbWV9Z2V0IHRlc3RDb25maWcoKXtyZXR1cm4gdGhpcy5fdGVzdENvbmZpZ31nZXQgc3luY0ZvbGRlcigpe3JldHVybiB0aGlzLl9zeW5jRm9sZGVyfWdldCBzeW5jRGlyZWN0b3JpZXMoKXtyZXR1cm4gdGhpcy5fc3luY0RpcmVjdG9yaWVzfWdldCBzYXNqc0J1''@;'; put 'put ''aWxkRm9sZGVyKCl7cmV0dXJuIHRoaXMuX3Nhc2pzQnVpbGRGb2xkZXJ9Z2V0IHNhc2pzUmVzdWx0c0ZvbGRlcigpe3JldHVybiB0aGlzLl9zYXNqc1Jlc3VsdHNGb2xkZXJ9dG9Kc29uKFA9ITApe3ZhciBGLE8sejtjb25zdCBOPXtuYW1lOnRoaXMubmFtZSxzZXJ2ZXJVcmw6dGhpcy5zZXJ2''@;'; put 'put ''ZXJVcmwsc2VydmVyVHlwZTp0aGlzLnNlcnZlclR5cGUsaHR0cHNBZ2VudE9wdGlvbnM6dGhpcy5odHRwc0FnZW50T3B0aW9ucyxhcHBMb2M6dGhpcy5hcHBMb2MsZG9jQ29uZmlnOnRoaXMuZG9jQ29uZmlnLGRlcGxveUNvbmZpZzp0aGlzLmRlcGxveUNvbmZpZ307cmV0dXJuIShudWxsPT09''@;'; put 'put ''KEY9dGhpcy5tYWNyb0ZvbGRlcnMpfHx2b2lkIDA9PT1GKSYmRi5sZW5ndGgmJihOLm1hY3JvRm9sZGVycz10aGlzLm1hY3JvRm9sZGVycyksIShudWxsPT09KE89dGhpcy5wcm9ncmFtRm9sZGVycyl8fHZvaWQgMD09PU8pJiZPLmxlbmd0aCYmKE4ucHJvZ3JhbUZvbGRlcnM9dGhpcy5wcm9n''@;'; put 'put ''cmFtRm9sZGVycyksIShudWxsPT09KHo9dGhpcy5iaW5hcnlGb2xkZXJzKXx8dm9pZCAwPT09eikmJnoubGVuZ3RoJiYoTi5iaW5hcnlGb2xkZXJzPXRoaXMuYmluYXJ5Rm9sZGVycyksdGhpcy5hdXRoQ29uZmlnJiYoTi5hdXRoQ29uZmlnPXRoaXMuYXV0aENvbmZpZyksdGhpcy5hdXRoQ29u''@;'; put 'put ''ZmlnU2FzOSYmKE4uYXV0aENvbmZpZ1Nhczk9dGhpcy5hdXRoQ29uZmlnU2FzOSksdGhpcy5zYXNqc0J1aWxkRm9sZGVyP04uc2FzanNCdWlsZEZvbGRlcj10aGlzLnNhc2pzQnVpbGRGb2xkZXI6UCYmKE4uc2FzanNCdWlsZEZvbGRlcj1nLkRFRkFVTFRfU0FTSlNfQlVJTERfRk9MREVSKSx0''@;'; put 'put ''aGlzLnNhc2pzUmVzdWx0c0ZvbGRlcj9OLnNhc2pzUmVzdWx0c0ZvbGRlcj10aGlzLnNhc2pzUmVzdWx0c0ZvbGRlcjpQJiYoTi5zYXNqc1Jlc3VsdHNGb2xkZXI9Zy5ERUZBVUxUX1NBU0pTX1JFU1VMVFNfRk9MREVSKSx0aGlzLnN5bmNEaXJlY3Rvcmllcz9OLnN5bmNEaXJlY3Rvcmllcz10''@;'; put 'put ''aGlzLnN5bmNEaXJlY3RvcmllczpQJiYoTi5zeW5jRGlyZWN0b3JpZXM9W10pLHRoaXMuYnVpbGRDb25maWc/Ti5idWlsZENvbmZpZz10aGlzLmJ1aWxkQ29uZmlnOlAmJihOLmJ1aWxkQ29uZmlnPXtpbml0UHJvZ3JhbToiIix0ZXJtUHJvZ3JhbToiIixidWlsZE91dHB1dEZpbGVOYW1lOmAk''@;'; put 'put ''e3RoaXMubmFtZX0uc2FzYCxtYWNyb1ZhcnM6e319KSx0aGlzLmpvYkNvbmZpZz9OLmpvYkNvbmZpZz10aGlzLmpvYkNvbmZpZzpQJiYoTi5qb2JDb25maWc9e2pvYkZvbGRlcnM6W10saW5pdFByb2dyYW06IiIsdGVybVByb2dyYW06IiIsbWFjcm9WYXJzOnt9fSksdGhpcy5zZXJ2aWNlQ29u''@;'; put 'put ''ZmlnP04uc2VydmljZUNvbmZpZz10aGlzLnNlcnZpY2VDb25maWc6UCYmKE4uc2VydmljZUNvbmZpZz17c2VydmljZUZvbGRlcnM6W10saW5pdFByb2dyYW06IiIsdGVybVByb2dyYW06IiIsbWFjcm9WYXJzOnt9fSksdGhpcy5zdHJlYW1Db25maWc/Ti5zdHJlYW1Db25maWc9dGhpcy5zdHJl''@;'; put 'put ''YW1Db25maWc6UCYmKE4uc3RyZWFtQ29uZmlnPXtzdHJlYW1XZWJGb2xkZXI6IiIsc3RyZWFtV2ViOiExLHdlYlNvdXJjZVBhdGg6IiIsc3RyZWFtU2VydmljZU5hbWU6IiIsYXNzZXRQYXRoczpbXX0pLHRoaXMudGVzdENvbmZpZz9OLnRlc3RDb25maWc9dGhpcy50ZXN0Q29uZmlnOlAmJihO''@;'; put 'put ''LnRlc3RDb25maWc9e2luaXRQcm9ncmFtOiIiLHRlcm1Qcm9ncmFtOiIiLG1hY3JvVmFyczp7fSx0ZXN0U2V0VXA6IiIsdGVzdFRlYXJEb3duOiIifSksdGhpcy5zZXJ2ZXJUeXBlPT09Xy5TZXJ2ZXJUeXBlLlNhc1ZpeWE/Ti5jb250ZXh0TmFtZT10aGlzLmNvbnRleHROYW1lOnRoaXMuc2Vy''@;'; put 'put ''dmVyVHlwZT09PV8uU2VydmVyVHlwZS5TYXM5JiYoTi5zZXJ2ZXJOYW1lPXRoaXMuc2VydmVyTmFtZSxOLnJlcG9zaXRvcnlOYW1lPXRoaXMucmVwb3NpdG9yeU5hbWUpLE59fX0sNjc4MTpmdW5jdGlvbih1ZSxYLHkpeyJ1c2Ugc3RyaWN0Ijt2YXIgST10aGlzJiZ0aGlzLl9faW1wb3J0RGVm''@;'; put 'put ''YXVsdHx8ZnVuY3Rpb24ocCl7cmV0dXJuIHAmJnAuX19lc01vZHVsZT9wOntkZWZhdWx0OnB9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC52YWxpZGF0ZVNhc2pzUmVzdWx0c0ZvbGRlcj1YLnZhbGlkYXRlU2FzanNCdWlsZEZvbGRlcj1YLnZh''@;'; put 'put ''bGlkYXRlU3luY0RpcmVjdG9yaWVzPVgudmFsaWRhdGVSZXBvc2l0b3J5TmFtZT1YLnZhbGlkYXRlU3luY0ZvbGRlcj1YLnZhbGlkYXRlU2VydmVyTmFtZT1YLnZhbGlkYXRlQ29udGV4dE5hbWU9WC52YWxpZGF0ZVN0cmVhbUNvbmZpZz1YLnZhbGlkYXRlRGVwbG95Q29uZmlnPVgudmFsaWRh''@;'; put 'put ''dGVKb2JDb25maWc9WC52YWxpZGF0ZVRlc3RDb25maWc9WC52YWxpZGF0ZVNlcnZpY2VDb25maWc9WC52YWxpZGF0ZUJ1aWxkQ29uZmlnPVgudmFsaWRhdGVBdXRoQ29uZmlnU2FzOT1YLnZhbGlkYXRlQXV0aENvbmZpZz1YLnZhbGlkYXRlRG9jQ29uZmlnPVgudmFsaWRhdGVBcHBMb2M9WC52''@;'; put 'put ''YWxpZGF0ZUh0dHBzQWdlbnRPcHRpb25zPVgudmFsaWRhdGVTZXJ2ZXJVcmw9WC52YWxpZGF0ZVRhcmdldE5hbWU9WC52YWxpZGF0ZVNlcnZlclR5cGU9WC5ERUZBVUxUX1NBU0pTX1JFU1VMVFNfRk9MREVSPVguREVGQVVMVF9TQVNKU19CVUlMRF9GT0xERVI9dm9pZCAwO2NvbnN0IF89SSh5''@;'; put 'put ''KDQ4MSkpLGc9eSgzOTAwKTtYLkRFRkFVTFRfU0FTSlNfQlVJTERfRk9MREVSPSJzYXNqc2J1aWxkIixYLkRFRkFVTFRfU0FTSlNfUkVTVUxUU19GT0xERVI9InNhc2pzcmVzdWx0cyIsWC52YWxpZGF0ZVNlcnZlclR5cGU9cD0+e2lmKCFwKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzZXJ2''@;'; put 'put ''ZXIgdHlwZTogYHNlcnZlclR5cGVgIGNhbm5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZC4iKTtpZihwIT09Zy5TZXJ2ZXJUeXBlLlNhczkmJnAhPT1nLlNlcnZlclR5cGUuU2FzVml5YSYmcCE9PWcuU2VydmVyVHlwZS5TYXNqcyl0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgc2VydmVyIHR5cGU6''@;'; put 'put ''IFN1cHBvcnRlZCB2YWx1ZXMgZm9yICBcYHNlcnZlclR5cGVcYCBhcmUgJHtnLlNlcnZlclR5cGUuU2FzVml5YX0sICR7Zy5TZXJ2ZXJUeXBlLlNhczl9IGFuZCAke2cuU2VydmVyVHlwZS5TYXNqc30uYCk7cmV0dXJuIHB9LFgudmFsaWRhdGVUYXJnZXROYW1lPXA9PntpZighcCl0aHJvdyBu''@;'; put 'put ''ZXcgRXJyb3IoIkludmFsaWQgdGFyZ2V0IG5hbWU6IGBuYW1lYCBjYW5ub3QgYmUgZW1wdHksIG51bGwgb3IgdW5kZWZpbmVkLiIpO2lmKHAudHJpbSgpLmluY2x1ZGVzKCIgIikpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHRhcmdldCBuYW1lOiBgbmFtZWAgY2Fubm90IGluY2x1ZGUgc3Bh''@;'; put 'put ''Y2VzLiIpO2lmKCEvXlthLXpBLVowLTlcLV0rJC9pLnRlc3QocCkpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHRhcmdldCBuYW1lOiBgbmFtZWAgY2FuIG9ubHkgY29udGFpbiBhbHBoYW51bWVyaWMgY2hhcmFjdGVycyBhbmQgZGFzaGVzLiIpO3JldHVybiBwfSxYLnZhbGlkYXRlU2VydmVy''@;'; put 'put ''VXJsPXA9PntpZihudWxsPT1wJiYocD0iIiksIiIhPT1wJiYhXy5kZWZhdWx0LmlzSHR0cFVyaShwKSYmIV8uZGVmYXVsdC5pc0h0dHBzVXJpKHApKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzZXJ2ZXIgVVJMOiBgc2VydmVyVXJsYCBzaG91bGQgZWl0aGVyIGJlIGFuIGVtcHR5IHN0cmlu''@;'; put 'put ''ZyBvciBhIHZhbGlkIFVSTCBvZiB0aGUgZm9ybSBodHRwKHMpOi8veW91ci1zZXJ2ZXIuY29tKDpwb3J0KS4iKTtyZXR1cm4gcH0sWC52YWxpZGF0ZUh0dHBzQWdlbnRPcHRpb25zPXA9PntpZihwKXtpZigib2JqZWN0IiE9dHlwZW9mIHApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHZhbHVl''@;'; put 'put ''OiBgaHR0cHNBZ2VudE9wdGlvbnNgIHNob3VsZCBlaXRoZXIgYmUgYW4gZW1wdHkgb3IgYW4gb2JqZWN0IG9mIGBIdHRwc0FnZW50T3B0aW9uc2AiKTtpZihudWxsPT1wLmFsbG93SW5zZWN1cmVSZXF1ZXN0cylwLmFsbG93SW5zZWN1cmVSZXF1ZXN0cz0hMTtlbHNlIGlmKCJib29sZWFuIiE9''@;'; put 'put ''dHlwZW9mIHAuYWxsb3dJbnNlY3VyZVJlcXVlc3RzKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCB2YWx1ZTogYGh0dHBzQWdlbnRPcHRpb25zLmFsbG93SW5zZWN1cmVSZXF1ZXN0c2Agc2hvdWxkIGVpdGhlciBiZSBhbiBlbXB0eSBvciBhIGJvb2xlYW4iKTtyZXR1cm4ic3RyaW5nIiE9dHlw''@;'; put 'put ''ZW9mIHAuY2FQYXRoJiYocC5jYVBhdGg9dm9pZCAwKSwic3RyaW5nIiE9dHlwZW9mIHAua2V5UGF0aCYmKHAua2V5UGF0aD12b2lkIDApLCJzdHJpbmciIT10eXBlb2YgcC5jZXJ0UGF0aCYmKHAuY2VydFBhdGg9dm9pZCAwKSxwfX0sWC52YWxpZGF0ZUFwcExvYz1wPT57aWYoIXApdGhyb3cg''@;'; put 'put ''bmV3IEVycm9yKCJJbnZhbGlkIGFwcCBsb2NhdGlvbjogYGFwcExvY2AgY2Fubm90IGJlIGVtcHR5LCBudWxsIG9yIHVuZGVmaW5lZC4iKTtpZighcC5zdGFydHNXaXRoKCIvIikpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGFwcCBsb2NhdGlvbjogYGFwcExvY2AgbXVzdCBzdGFydCB3aXRo''@;'; put 'put ''IGEgYC9gLiIpO3JldHVybiBwfSxYLnZhbGlkYXRlRG9jQ29uZmlnPXA9PntpZihwfHwocD17fSksImJvb2xlYW4iIT10eXBlb2YgcC5kaXNwbGF5TWFjcm9Db3JlJiYocC5kaXNwbGF5TWFjcm9Db3JlPXZvaWQgMCksImJvb2xlYW4iIT10eXBlb2YgcC5lbmFibGVMaW5lYWdlJiYocC5lbmFi''@;'; put 'put ''bGVMaW5lYWdlPXZvaWQgMCksInN0cmluZyIhPXR5cGVvZiBwLm91dERpcmVjdG9yeSYmKHAub3V0RGlyZWN0b3J5PXZvaWQgMCksInN0cmluZyI9PXR5cGVvZiBwLmRhdGFDb250cm9sbGVyVXJsKXtpZigiIiE9PXAuZGF0YUNvbnRyb2xsZXJVcmwmJiFfLmRlZmF1bHQuaXNIdHRwVXJpKHAu''@;'; put 'put ''ZGF0YUNvbnRyb2xsZXJVcmwpJiYhXy5kZWZhdWx0LmlzSHR0cHNVcmkocC5kYXRhQ29udHJvbGxlclVybCkpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIERhdGEgQ29udHJvbGxlciBVcmw6IGBkYXRhQ29udHJvbGxlclVybGAgc2hvdWxkIGVpdGhlciBiZSBhbiBlbXB0eSBzdHJpbmcgb3Ig''@;'; put 'put ''YSB2YWxpZCBVUkwgb2YgdGhlIGZvcm0gaHR0cChzKTovL3lvdXItc2VydmVyLmNvbSg6cG9ydCkuIil9ZWxzZSBwLmRhdGFDb250cm9sbGVyVXJsPXZvaWQgMDtyZXR1cm4gcH0sWC52YWxpZGF0ZUF1dGhDb25maWc9cD0+e2lmKCFwKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBhdXRoIGNv''@;'; put 'put ''bmZpZzogSlNPTiBjYW5ub3QgYmUgbnVsbCBvciB1bmRlZmluZWQuIik7cmV0dXJuIHB9LFgudmFsaWRhdGVBdXRoQ29uZmlnU2FzOT1wPT57aWYoIXApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGF1dGggY29uZmlnIGZvciBzYXM5OiBKU09OIGNhbm5vdCBiZSBudWxsIG9yIHVuZGVmaW5l''@;'; put 'put ''ZC4iKTtpZighcC51c2VyTmFtZXx8IXAucGFzc3dvcmQpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGF1dGggY29uZmlnIGZvciBzYXM5OiB1c2VyTmFtZSBhbmQgcGFzc3dvcmQgY2FuIG5vdCBiZSBlbXB0eSIpO3JldHVybiBwfSxYLnZhbGlkYXRlQnVpbGRDb25maWc9KHAsYik9PntpZigh''@;'; put 'put ''cCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgYnVpbGQgY29uZmlnOiBKU09OIGNhbm5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZC4iKTtyZXR1cm4gcC5idWlsZE91dHB1dEZpbGVOYW1lfHwocC5idWlsZE91dHB1dEZpbGVOYW1lPWAke2J9LnNhc2ApLHAuaW5pdFByb2dyYW18fChwLmluaXRQ''@;'; put 'put ''cm9ncmFtPSIiKSxwLnRlcm1Qcm9ncmFtfHwocC50ZXJtUHJvZ3JhbT0iIikscC5tYWNyb1ZhcnN8fChwLm1hY3JvVmFycz17fSkscH0sWC52YWxpZGF0ZVNlcnZpY2VDb25maWc9cD0+e2lmKCFwKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzZXJ2aWNlIGNvbmZpZzogSlNPTiBjYW5ub3Qg''@;'; put 'put ''YmUgbnVsbCBvciB1bmRlZmluZWQuIik7cmV0dXJuIHAuaW5pdFByb2dyYW18fChwLmluaXRQcm9ncmFtPSIiKSxwLnRlcm1Qcm9ncmFtfHwocC50ZXJtUHJvZ3JhbT0iIikscC5zZXJ2aWNlRm9sZGVyc3x8KHAuc2VydmljZUZvbGRlcnM9W10pLHAubWFjcm9WYXJzfHwocC5tYWNyb1ZhcnM9''@;'; put 'put ''e30pLHB9LFgudmFsaWRhdGVUZXN0Q29uZmlnPXA9PntpZighcCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgdGVzdCBjb25maWc6IEpTT04gY2Fubm90IGJlIG51bGwgb3IgdW5kZWZpbmVkLiIpO3JldHVybiBwLmluaXRQcm9ncmFtfHwocC5pbml0UHJvZ3JhbT0iIikscC50ZXJtUHJvZ3Jh''@;'; put 'put ''bXx8KHAudGVybVByb2dyYW09IiIpLHAubWFjcm9WYXJzfHwocC5tYWNyb1ZhcnM9e30pLHAudGVzdFNldFVwfHwocC50ZXN0U2V0VXA9IiIpLHAudGVzdFRlYXJEb3dufHwocC50ZXN0VGVhckRvd249IiIpLHB9LFgudmFsaWRhdGVKb2JDb25maWc9cD0+e2lmKCFwKXRocm93IG5ldyBFcnJv''@;'; put 'put ''cigiSW52YWxpZCBqb2IgY29uZmlnOiBKU09OIGNhbm5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZC4iKTtyZXR1cm4gcC5pbml0UHJvZ3JhbXx8KHAuaW5pdFByb2dyYW09IiIpLHAudGVybVByb2dyYW18fChwLnRlcm1Qcm9ncmFtPSIiKSxwLmpvYkZvbGRlcnN8fChwLmpvYkZvbGRlcnM9W10p''@;'; put 'put ''LHAubWFjcm9WYXJzfHwocC5tYWNyb1ZhcnM9e30pLHB9LFgudmFsaWRhdGVEZXBsb3lDb25maWc9cD0+e2lmKCFwKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBkZXBsb3kgY29uZmlnOiBKU09OIGNhbm5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZC4iKTtyZXR1cm4gcC5kZXBsb3lTZXJ2aWNl''@;'; put 'put ''UGFjaz0hIXAuZGVwbG95U2VydmljZVBhY2sscC5kZXBsb3lTY3JpcHRzfHwocC5kZXBsb3lTY3JpcHRzPVtdKSxwfSxYLnZhbGlkYXRlU3RyZWFtQ29uZmlnPXA9PntpZighcCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc3RyZWFtIGNvbmZpZzogSlNPTiBjYW5ub3QgYmUgbnVsbCBvciB1''@;'; put 'put ''bmRlZmluZWQuIik7aWYoITAhPT1wLnN0cmVhbVdlYiYmITEhPT1wLnN0cmVhbVdlYil0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc3RyZWFtIGNvbmZpZzogYHN0cmVhbVdlYmAgY2Fubm90IGJlIGEgbm9uLWJvb2xlYW4gdmFsdWUuIik7aWYocC5zdHJlYW1XZWImJiFwLnN0cmVhbVdlYkZv''@;'; put 'put ''bGRlcil0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc3RyZWFtIGNvbmZpZzogYHN0cmVhbVdlYkZvbGRlcmAgY2Fubm90IGJlIGVtcHR5LCBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGBzdHJlYW1XZWJgIGlzIHRydWUuIik7aWYocC5zdHJlYW1XZWImJiFwLndlYlNvdXJjZVBhdGgpdGhyb3cg''@;'; put 'put ''bmV3IEVycm9yKCJJbnZhbGlkIHN0cmVhbSBjb25maWc6IGB3ZWJTb3VyY2VQYXRoYCBzaG91bGQgY29udGFpbiB0aGUgcGF0aCB0byB5b3VyIGZyb250ZW5kIGFwcGxpY2F0aW9uIGVnIGJ1aWxkLCBkaXN0LCBvciBzcmMuIik7cmV0dXJuIHAuc3RyZWFtTG9nbyYmInN0cmluZyIhPXR5cGVv''@;'; put 'put ''ZiBwLnN0cmVhbUxvZ28mJihwLnN0cmVhbUxvZ289dm9pZCAwKSxwLmFzc2V0UGF0aHN8fChwLmFzc2V0UGF0aHM9W10pLHAuc3RyZWFtU2VydmljZU5hbWV8fChwLnN0cmVhbVNlcnZpY2VOYW1lPSJjbGlja21lIikscH0sWC52YWxpZGF0ZUNvbnRleHROYW1lPShwLGIpPT5iIT09Zy5TZXJ2''@;'; put 'put ''ZXJUeXBlLlNhc1ZpeWF8fHA/cDoiU0FTIEpvYiBFeGVjdXRpb24gY29tcHV0ZSBjb250ZXh0IixYLnZhbGlkYXRlU2VydmVyTmFtZT0ocCxiKT0+YiE9PWcuU2VydmVyVHlwZS5TYXM5fHxwP3A6IlNBU0FwcCIsWC52YWxpZGF0ZVN5bmNGb2xkZXI9cD0+e2lmKCJzdHJpbmciPT10eXBlb2Yg''@;'; put 'put ''cCYmcClyZXR1cm4gcH0sWC52YWxpZGF0ZVJlcG9zaXRvcnlOYW1lPShwLGIpPT5iIT09Zy5TZXJ2ZXJUeXBlLlNhczl8fHA/cDoiRm91bmRhdGlvbiIsWC52YWxpZGF0ZVN5bmNEaXJlY3Rvcmllcz1wPT57aWYoIXApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN5bmNEaXJlY3RvcmllcyBj''@;'; put 'put ''b25maWc6IEpTT04gY2Fubm90IGJlIG51bGwgb3IgdW5kZWZpbmVkLiIpO3JldHVybiBwLmZvckVhY2goYj0+e2lmKCFiLmxvY2FsfHwhYi5yZW1vdGUpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN5bmNEaXJlY3RvcnkgY29uZmlnOiB2YWx1ZXMgb2YgcHJvcGVydHkgJ2xvY2FsJyBhbmQg''@;'; put 'put ''J3JlbW90ZSBjYW4gbm90IGJlIGVtcHR5IG9yIHVuZGVmaW5lZCIpfSkscH0sWC52YWxpZGF0ZVNhc2pzQnVpbGRGb2xkZXI9cD0+e2lmKCJzdHJpbmciIT10eXBlb2YgcCl0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdHlwZSBvZiB2YWx1ZSAoJHt0eXBlb2YgcH0pIGlzIHByb3ZpZGVkIGZv''@;'; put 'put ''ciBwcm9wZXJ0eSAnc2FzanNCdWlsZEZvbGRlcicgaW4gY29uZmlnLiBSZXF1aXJlZCBpcyBzdHJpbmcuYCk7cmV0dXJuIHB8fFguREVGQVVMVF9TQVNKU19CVUlMRF9GT0xERVJ9LFgudmFsaWRhdGVTYXNqc1Jlc3VsdHNGb2xkZXI9cD0+e2lmKCJzdHJpbmciIT10eXBlb2YgcCl0aHJvdyBu''@;'; put 'put ''ZXcgRXJyb3IoYEludmFsaWQgdHlwZSBvZiB2YWx1ZSAoJHt0eXBlb2YgcH0pIGlzIHByb3ZpZGVkIGZvciBwcm9wZXJ0eSAnc2FzanNSZXN1bHRzRm9sZGVyJyBpbiBjb25maWcuIFJlcXVpcmVkIGlzIHN0cmluZy5gKTtyZXR1cm4gcHx8WC5ERUZBVUxUX1NBU0pTX1JFU1VMVFNfRk9MREVS''@;'; put 'put ''fX0sMjkyNzpmdW5jdGlvbih1ZSxYLHkpeyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDg3NjQpLkJ1ZmZlcixfPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihGKXtyZXR1cm4gRiYmRi5fX2VzTW9kdWxlP0Y6e2RlZmF1bHQ6Rn19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJf''@;'; put 'put ''X2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLmRlY29kZUZyb21CYXNlNjQ9WC5lbmNvZGVUb0Jhc2U2ND12b2lkIDA7Y29uc3QgZz1fKHkoNTgzNSkpLEI9IntzYXNqc19lbmNvZGVkfSI7WC5lbmNvZGVUb0Jhc2U2ND1GPT57Y29uc3QgTz1nLmRlZmF1bHQucmFuZG9tQnl0ZXMoMTAwKS50b1N0''@;'; put 'put ''cmluZygiaGV4Iiksej1JLmZyb20oTytGKS50b1N0cmluZygiYmFzZTY0Iik7cmV0dXJuIEIren0sWC5kZWNvZGVGcm9tQmFzZTY0PUY9PkYuc3RhcnRzV2l0aChCKT8oRj1GLnJlcGxhY2UoL157c2FzanNfZW5jb2RlZH0vLCIiKSxJLmZyb20oRiwiYmFzZTY0IikudG9TdHJpbmcoKS5zdWJz''@;'; put 'put ''dHJpbmcoMjAwKSk6Rn0sNTgxOih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5ieXRlc1RvU2l6ZT12b2lkIDAsWC5ieXRlc1RvU2l6ZT0oSSxfPTEsZz0xMDk5NTExNjI3Nzc2KT0+e2lmKDA9PT1JKXJldHVy''@;'; put 'put ''biIwIEIiO0k9ST5nP2c6STtjb25zdCBQPV88MD8wOl8sRj1NYXRoLmZsb29yKE1hdGgubG9nKEkpL01hdGgubG9nKDEwMjQpKTtyZXR1cm4oSS9NYXRoLnBvdygxMDI0LEYpKS50b0ZpeGVkKFApKyIgIitbIkIiLCJLQiIsIk1CIiwiR0IiLCJUQiJdW0ZdfX0sODY1MzoodWUsWCk9PnsidXNl''@;'; put 'put ''IHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguY2h1bms9dm9pZCAwLFguY2h1bms9ZnVuY3Rpb24geShJLF89MjIwKXtyZXR1cm4gSS5sZW5ndGg8PV8/W0ldOihJLm1hdGNoKG5ldyBSZWdFeHAoIi57MSwiK18rIn0iLCJnIikpfHxb''@;'; put 'put ''XSkuZmlsdGVyKGc9PiEhZyl9fSw2NDU3Oih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5kaWZmPXZvaWQgMCxYLmRpZmY9ZnVuY3Rpb24geShJLF8pe3JldHVyblsuLi5JLmZpbHRlcih3PT4ib2JqZWN0Ij09''@;'; put 'put ''dHlwZW9mIHc/IUpTT04uc3RyaW5naWZ5KF8pLmluY2x1ZGVzKEpTT04uc3RyaW5naWZ5KHcpKTohXy5pbmNsdWRlcyh3KSksLi4uXy5maWx0ZXIodz0+Im9iamVjdCI9PXR5cGVvZiB3PyFKU09OLnN0cmluZ2lmeShJKS5pbmNsdWRlcyhKU09OLnN0cmluZ2lmeSh3KSk6IUkuaW5jbHVkZXMo''@;'; put 'put ''dykpXX19LDE1Mjk6KHVlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLmdldEV4ZWN1dG9yUGF0aD12b2lkIDA7Y29uc3QgeT17U0FTVklZQToiL1NBU0pvYkV4ZWN1dGlvbiIsU0FTOToiL1NBU1N0b3JlZFByb2Nl''@;'; put 'put ''c3MvZG8ifTtYLmdldEV4ZWN1dG9yUGF0aD1fPT5fPyhfPV8udG9VcHBlckNhc2UoKSx5W19dfHwiIik6IiJ9LDMzMTY6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguZ2V0VHJlZUV4YW1wbGU9WC5pc0Zp''@;'; put 'put ''bGVUcmVlPXZvaWQgMDtjb25zdCBJPXkoMzkwMCk7WC5pc0ZpbGVUcmVlPUY9PkYmJkYubWVtYmVycyYmQXJyYXkuaXNBcnJheShGLm1lbWJlcnMpJiYwPT09Ri5tZW1iZXJzLmZpbHRlcihPPT4hZyhPKSYmIUIoTykmJiF3KE8pKS5sZW5ndGg7Y29uc3QgZz1GPT5GJiYic3RyaW5nIj09dHlw''@;'; put 'put ''ZW9mIEYubmFtZSYmRi50eXBlPT09SS5NZW1iZXJUeXBlLnNlcnZpY2UmJiJzdHJpbmciPT10eXBlb2YgRi5jb2RlLEI9Rj0+RiYmInN0cmluZyI9PXR5cGVvZiBGLm5hbWUmJkYudHlwZT09PUkuTWVtYmVyVHlwZS5maWxlJiYic3RyaW5nIj09dHlwZW9mIEYuY29kZSx3PUY9PkYmJiJzdHJp''@;'; put 'put ''bmciPT10eXBlb2YgRi5uYW1lJiZGLnR5cGU9PT1JLk1lbWJlclR5cGUuZm9sZGVyJiZGLm1lbWJlcnMmJkFycmF5LmlzQXJyYXkoRi5tZW1iZXJzKSYmMD09PUYubWVtYmVycy5maWx0ZXIoTz0+IWcoTykmJiFCKE8pJiYhdyhPKSkubGVuZ3RoO1guZ2V0VHJlZUV4YW1wbGU9KCk9Pih7bWVt''@;'; put 'put ''YmVyczpbe25hbWU6ImpvYnMiLHR5cGU6SS5NZW1iZXJUeXBlLmZvbGRlcixtZW1iZXJzOlt7bmFtZToiZXh0cmFjdCIsdHlwZTpJLk1lbWJlclR5cGUuZm9sZGVyLG1lbWJlcnM6W3tuYW1lOiJtYWtlZGF0YTEiLHR5cGU6SS5NZW1iZXJUeXBlLnNlcnZpY2UsY29kZToiJXB1dCBIZWxsbyBX''@;'; put 'put ''b3JsZCE7In1dfV19XX0pfSw2MjY2OmZ1bmN0aW9uKHVlLFgseSl7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihOLEwsSyxVKXt2b2lkIDA9PT1VJiYoVT1LKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoTixVLHtl''@;'; put 'put ''bnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBMW0tdfX0pfTpmdW5jdGlvbihOLEwsSyxVKXt2b2lkIDA9PT1VJiYoVT1LKSxOW1VdPUxbS119KSxfPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihOLEwpe2Zvcih2YXIgSyBpbiBOKSJkZWZhdWx0IiE9PUsmJiFP''@;'; put 'put ''YmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoTCxLKSYmSShMLE4sSyl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLmNodW5rPVguZGlmZj1YLmJ5dGVzVG9TaXplPVguZ2V0RXhlY3V0b3JQYXRoPVguZGVjb2RlRnJvbUJhc2U2''@;'; put 'put ''ND1YLmVuY29kZVRvQmFzZTY0PVgudXJsT3JpZ2luPVguZ2VuZXJhdGVQYXRoRm9yU2FzPVguZ2V0TWFjcm9zUGF0aD1YLmVzY2FwZVdpblNsYXNoZXM9WC5pc0xpbnV4PVguaXNXaW5kb3dzPVgudW5pcUFycmF5PVguYXN5bmNGb3JFYWNoPVgudXVpZHY0PXZvaWQgMDt2YXIgZz15KDExMzEp''@;'; put 'put ''O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJ1dWlkdjQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBnLnV1aWR2NH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiYXN5bmNGb3JFYWNoIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZy5hc3lu''@;'; put 'put ''Y0ZvckVhY2h9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFgsInVuaXFBcnJheSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGcudW5pcUFycmF5fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJpc1dpbmRvd3MiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigp''@;'; put 'put ''e3JldHVybiBnLmlzV2luZG93c319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiaXNMaW51eCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGcuaXNMaW51eH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiZXNjYXBlV2luU2xhc2hlcyIse2VudW1lcmFibGU6ITAs''@;'; put 'put ''Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGcuZXNjYXBlV2luU2xhc2hlc319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiZ2V0TWFjcm9zUGF0aCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGcuZ2V0TWFjcm9zUGF0aH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwi''@;'; put 'put ''Z2VuZXJhdGVQYXRoRm9yU2FzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZy5nZW5lcmF0ZVBhdGhGb3JTYXN9fSksXyh5KDMzMTYpLFgpO3ZhciBCPXkoOTY1Mik7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsInVybE9yaWdpbiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1''@;'; put 'put ''bmN0aW9uKCl7cmV0dXJuIEIudXJsT3JpZ2lufX0pO3ZhciB3PXkoMjkyNyk7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsImVuY29kZVRvQmFzZTY0Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdy5lbmNvZGVUb0Jhc2U2NH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHko''@;'; put 'put ''WCwiZGVjb2RlRnJvbUJhc2U2NCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHcuZGVjb2RlRnJvbUJhc2U2NH19KTt2YXIgUD15KDE1MjkpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJnZXRFeGVjdXRvclBhdGgiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigp''@;'; put 'put ''e3JldHVybiBQLmdldEV4ZWN1dG9yUGF0aH19KTt2YXIgRj15KDU4MSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsImJ5dGVzVG9TaXplIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gRi5ieXRlc1RvU2l6ZX19KTt2YXIgTz15KDY0NTcpO09iamVjdC5kZWZpbmVQcm9w''@;'; put 'put ''ZXJ0eShYLCJkaWZmIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gTy5kaWZmfX0pO3ZhciB6PXkoODY1Myk7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsImNodW5rIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gei5jaHVua319KX0sOTY1MjoodWUs''@;'; put 'put ''WCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFgudXJsT3JpZ2luPXZvaWQgMCxYLnVybE9yaWdpbj1JPT57aWYoIiI9PT1JKXJldHVybiBJO2xldCBfO3RyeXtfPW5ldyBVUkwoSSkub3JpZ2lufWNhdGNoe3Rocm93IG5l''@;'; put 'put ''dyBFcnJvcigiSW52YWxpZCBVUkwuIil9cmV0dXJuIF99fSwxMTMxOmZ1bmN0aW9uKHVlLFgseSl7InVzZSBzdHJpY3QiO3ZhciBfPXkoNDE1NSksZz10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oVyxZLHEsZWUpe3JldHVybiBuZXcocXx8KHE9UHJvbWlzZSkpKGZ1bmN0aW9uKG5l''@;'; put 'put ''LGllKXtmdW5jdGlvbiBsZShUZSl7dHJ5e19lKGVlLm5leHQoVGUpKX1jYXRjaChTZSl7aWUoU2UpfX1mdW5jdGlvbiBtZShUZSl7dHJ5e19lKGVlLnRocm93KFRlKSl9Y2F0Y2goU2Upe2llKFNlKX19ZnVuY3Rpb24gX2UoVGUpe1RlLmRvbmU/bmUoVGUudmFsdWUpOmZ1bmN0aW9uIEoobmUp''@;'; put 'put ''e3JldHVybiBuZSBpbnN0YW5jZW9mIHE/bmU6bmV3IHEoZnVuY3Rpb24oaWUpe2llKG5lKX0pfShUZS52YWx1ZSkudGhlbihsZSxtZSl9X2UoKGVlPWVlLmFwcGx5KFcsWXx8W10pKS5uZXh0KCkpfSl9LEI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKFcpe3JldHVybiBX''@;'; put 'put ''JiZXLl9fZXNNb2R1bGU/Vzp7ZGVmYXVsdDpXfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguZ2VuZXJhdGVQYXRoRm9yU2FzPVguZ2V0TWFjcm9zUGF0aD1YLmVzY2FwZVdpblNsYXNoZXM9WC5pc0xpbnV4PVguaXNXaW5kb3dzPVgudW5pcUFy''@;'; put 'put ''cmF5PVgudXVpZHY0PVguYXN5bmNGb3JFYWNoPXZvaWQgMDtjb25zdCB3PUIoeSgyNTIwKSk7WC5hc3luY0ZvckVhY2g9ZnVuY3Rpb24gUChXLFkpe3JldHVybiBnKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtmb3IobGV0IHE9MDtxPFcubGVuZ3RoO3ErKyl5aWVsZCBZKFdbcV0s''@;'; put 'put ''cSxXKX0pfSxYLnV1aWR2ND0oKT0+Inh4eHh4eHh4LXh4eHgtNHh4eC15eHh4LXh4eHh4eHh4eHh4eCIucmVwbGFjZSgvW3h5XS9nLFc9Pntjb25zdCBZPTE2Kk1hdGgucmFuZG9tKCl8MDtyZXR1cm4oIngiPT1XP1k6MyZZfDgpLnRvU3RyaW5nKDE2KX0pLFgudW5pcUFycmF5PVc9PkFycmF5''@;'; put 'put ''LmZyb20obmV3IFNldChXKSksWC5pc1dpbmRvd3M9KCk9PiJ3aW4zMiI9PT1fLnBsYXRmb3JtLFguaXNMaW51eD0oKT0+ImxpbnV4Ij09PV8ucGxhdGZvcm0sWC5lc2NhcGVXaW5TbGFzaGVzPVc9PigwLFguaXNXaW5kb3dzKSgpP1cucmVwbGFjZSgvXFwvZywiXFxcXCIpOlcsWC5nZXRNYWNy''@;'; put 'put ''b3NQYXRoPSgpPT53LmRlZmF1bHQuam9pbigiLyIsIi4uIiwibWFjcm9zIiksWC5nZW5lcmF0ZVBhdGhGb3JTYXM9Vz0+Vy5yZXBsYWNlKC9cXC9nLCIvIil9LDk4MDk6KHVlLFgseSk9Pnt2YXIgST1YO0kuYmlnbnVtPXkoNDU5MCksSS5kZWZpbmU9eSgyNTAwKS5kZWZpbmUsSS5iYXNlPXko''@;'; put 'put ''MTk3OSksSS5jb25zdGFudHM9eSg2ODI2KSxJLmRlY29kZXJzPXkoODMwNyksSS5lbmNvZGVycz15KDY1NzkpfSwyNTAwOih1ZSxYLHkpPT57dmFyIEk9eSg5ODA5KSxfPXkoNTcxNyk7ZnVuY3Rpb24gQih3LFApe3RoaXMubmFtZT13LHRoaXMuYm9keT1QLHRoaXMuZGVjb2RlcnM9e30sdGhp''@;'; put 'put ''cy5lbmNvZGVycz17fX1YLmRlZmluZT1mdW5jdGlvbihQLEYpe3JldHVybiBuZXcgQihQLEYpfSxCLnByb3RvdHlwZS5fY3JlYXRlTmFtZWQ9ZnVuY3Rpb24oUCl7dmFyIEY7dHJ5e0Y9eSg1MTQwKS5ydW5JblRoaXNDb250ZXh0KCIoZnVuY3Rpb24gIit0aGlzLm5hbWUrIihlbnRpdHkpIHtc''@;'; put 'put ''biAgdGhpcy5faW5pdE5hbWVkKGVudGl0eSk7XG59KSIpfWNhdGNoe0Y9ZnVuY3Rpb24oeil7dGhpcy5faW5pdE5hbWVkKHopfX1yZXR1cm4gXyhGLFApLEYucHJvdG90eXBlLl9pbml0TmFtZWQ9ZnVuY3Rpb24oeil7UC5jYWxsKHRoaXMseil9LG5ldyBGKHRoaXMpfSxCLnByb3RvdHlwZS5f''@;'; put 'put ''Z2V0RGVjb2Rlcj1mdW5jdGlvbihQKXtyZXR1cm4gdGhpcy5kZWNvZGVycy5oYXNPd25Qcm9wZXJ0eShQPVB8fCJkZXIiKXx8KHRoaXMuZGVjb2RlcnNbUF09dGhpcy5fY3JlYXRlTmFtZWQoSS5kZWNvZGVyc1tQXSkpLHRoaXMuZGVjb2RlcnNbUF19LEIucHJvdG90eXBlLmRlY29kZT1mdW5j''@;'; put 'put ''dGlvbihQLEYsTyl7cmV0dXJuIHRoaXMuX2dldERlY29kZXIoRikuZGVjb2RlKFAsTyl9LEIucHJvdG90eXBlLl9nZXRFbmNvZGVyPWZ1bmN0aW9uKFApe3JldHVybiB0aGlzLmVuY29kZXJzLmhhc093blByb3BlcnR5KFA9UHx8ImRlciIpfHwodGhpcy5lbmNvZGVyc1tQXT10aGlzLl9jcmVh''@;'; put 'put ''dGVOYW1lZChJLmVuY29kZXJzW1BdKSksdGhpcy5lbmNvZGVyc1tQXX0sQi5wcm90b3R5cGUuZW5jb2RlPWZ1bmN0aW9uKFAsRixPKXtyZXR1cm4gdGhpcy5fZ2V0RW5jb2RlcihGKS5lbmNvZGUoUCxPKX19LDY2MjU6KHVlLFgseSk9Pnt2YXIgST15KDU3MTcpLF89eSgxOTc5KS5SZXBvcnRl''@;'; put 'put ''cixnPXkoODc2NCkuQnVmZmVyO2Z1bmN0aW9uIEIoUCxGKXtfLmNhbGwodGhpcyxGKSxnLmlzQnVmZmVyKFApPyh0aGlzLmJhc2U9UCx0aGlzLm9mZnNldD0wLHRoaXMubGVuZ3RoPVAubGVuZ3RoKTp0aGlzLmVycm9yKCJJbnB1dCBub3QgQnVmZmVyIil9ZnVuY3Rpb24gdyhQLEYpe2lmKEFy''@;'; put 'put ''cmF5LmlzQXJyYXkoUCkpdGhpcy5sZW5ndGg9MCx0aGlzLnZhbHVlPVAubWFwKGZ1bmN0aW9uKE8pe3JldHVybiBPIGluc3RhbmNlb2Ygd3x8KE89bmV3IHcoTyxGKSksdGhpcy5sZW5ndGgrPU8ubGVuZ3RoLE99LHRoaXMpO2Vsc2UgaWYoIm51bWJlciI9PXR5cGVvZiBQKXtpZighKDA8PVAm''@;'; put 'put ''JlA8PTI1NSkpcmV0dXJuIEYuZXJyb3IoIm5vbi1ieXRlIEVuY29kZXJCdWZmZXIgdmFsdWUiKTt0aGlzLnZhbHVlPVAsdGhpcy5sZW5ndGg9MX1lbHNlIGlmKCJzdHJpbmciPT10eXBlb2YgUCl0aGlzLnZhbHVlPVAsdGhpcy5sZW5ndGg9Zy5ieXRlTGVuZ3RoKFApO2Vsc2V7aWYoIWcuaXNC''@;'; put 'put ''dWZmZXIoUCkpcmV0dXJuIEYuZXJyb3IoIlVuc3VwcG9ydGVkIHR5cGU6ICIrdHlwZW9mIFApO3RoaXMudmFsdWU9UCx0aGlzLmxlbmd0aD1QLmxlbmd0aH19SShCLF8pLFguQz1CLEIucHJvdG90eXBlLnNhdmU9ZnVuY3Rpb24oKXtyZXR1cm57b2Zmc2V0OnRoaXMub2Zmc2V0LHJlcG9ydGVy''@;'; put 'put ''Ol8ucHJvdG90eXBlLnNhdmUuY2FsbCh0aGlzKX19LEIucHJvdG90eXBlLnJlc3RvcmU9ZnVuY3Rpb24oRil7dmFyIE89bmV3IEIodGhpcy5iYXNlKTtyZXR1cm4gTy5vZmZzZXQ9Ri5vZmZzZXQsTy5sZW5ndGg9dGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQ9Ri5vZmZzZXQsXy5wcm90b3R5cGUu''@;'; put 'put ''cmVzdG9yZS5jYWxsKHRoaXMsRi5yZXBvcnRlciksT30sQi5wcm90b3R5cGUuaXNFbXB0eT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm9mZnNldD09PXRoaXMubGVuZ3RofSxCLnByb3RvdHlwZS5yZWFkVUludDg9ZnVuY3Rpb24oRil7cmV0dXJuIHRoaXMub2Zmc2V0KzE8PXRoaXMubGVuZ3Ro''@;'; put 'put ''P3RoaXMuYmFzZS5yZWFkVUludDgodGhpcy5vZmZzZXQrKywhMCk6dGhpcy5lcnJvcihGfHwiRGVjb2RlckJ1ZmZlciBvdmVycnVuIil9LEIucHJvdG90eXBlLnNraXA9ZnVuY3Rpb24oRixPKXtpZighKHRoaXMub2Zmc2V0K0Y8PXRoaXMubGVuZ3RoKSlyZXR1cm4gdGhpcy5lcnJvcihPfHwi''@;'; put 'put ''RGVjb2RlckJ1ZmZlciBvdmVycnVuIik7dmFyIHo9bmV3IEIodGhpcy5iYXNlKTtyZXR1cm4gei5fcmVwb3J0ZXJTdGF0ZT10aGlzLl9yZXBvcnRlclN0YXRlLHoub2Zmc2V0PXRoaXMub2Zmc2V0LHoubGVuZ3RoPXRoaXMub2Zmc2V0K0YsdGhpcy5vZmZzZXQrPUYsen0sQi5wcm90b3R5cGUu''@;'; put 'put ''cmF3PWZ1bmN0aW9uKEYpe3JldHVybiB0aGlzLmJhc2Uuc2xpY2UoRj9GLm9mZnNldDp0aGlzLm9mZnNldCx0aGlzLmxlbmd0aCl9LFguUj13LHcucHJvdG90eXBlLmpvaW49ZnVuY3Rpb24oRixPKXtyZXR1cm4gRnx8KEY9bmV3IGcodGhpcy5sZW5ndGgpKSxPfHwoTz0wKSwwPT09dGhpcy5s''@;'; put 'put ''ZW5ndGh8fChBcnJheS5pc0FycmF5KHRoaXMudmFsdWUpP3RoaXMudmFsdWUuZm9yRWFjaChmdW5jdGlvbih6KXt6LmpvaW4oRixPKSxPKz16Lmxlbmd0aH0pOigibnVtYmVyIj09dHlwZW9mIHRoaXMudmFsdWU/RltPXT10aGlzLnZhbHVlOiJzdHJpbmciPT10eXBlb2YgdGhpcy52YWx1ZT9G''@;'; put 'put ''LndyaXRlKHRoaXMudmFsdWUsTyk6Zy5pc0J1ZmZlcih0aGlzLnZhbHVlKSYmdGhpcy52YWx1ZS5jb3B5KEYsTyksTys9dGhpcy5sZW5ndGgpKSxGfX0sMTk3OToodWUsWCx5KT0+e3ZhciBJPVg7SS5SZXBvcnRlcj15KDg0NjUpLmIsSS5EZWNvZGVyQnVmZmVyPXkoNjYyNSkuQyxJLkVuY29k''@;'; put 'put ''ZXJCdWZmZXI9eSg2NjI1KS5SLEkuTm9kZT15KDE5NDkpfSwxOTQ5Oih1ZSxYLHkpPT57dmFyIEk9eSgxOTc5KS5SZXBvcnRlcixfPXkoMTk3OSkuRW5jb2RlckJ1ZmZlcixnPXkoMTk3OSkuRGVjb2RlckJ1ZmZlcixCPXkoOTc0Niksdz1bInNlcSIsInNlcW9mIiwic2V0Iiwic2V0b2YiLCJv''@;'; put 'put ''YmppZCIsImJvb2wiLCJnZW50aW1lIiwidXRjdGltZSIsIm51bGxfIiwiZW51bSIsImludCIsIm9iakRlc2MiLCJiaXRzdHIiLCJibXBzdHIiLCJjaGFyc3RyIiwiZ2Vuc3RyIiwiZ3JhcGhzdHIiLCJpYTVzdHIiLCJpc282NDZzdHIiLCJudW1zdHIiLCJvY3RzdHIiLCJwcmludHN0ciIsInQ2''@;'; put 'put ''MXN0ciIsInVuaXN0ciIsInV0ZjhzdHIiLCJ2aWRlb3N0ciJdLFA9WyJrZXkiLCJvYmoiLCJ1c2UiLCJvcHRpb25hbCIsImV4cGxpY2l0IiwiaW1wbGljaXQiLCJkZWYiLCJjaG9pY2UiLCJhbnkiLCJjb250YWlucyJdLmNvbmNhdCh3KTtmdW5jdGlvbiBPKE4sTCl7dmFyIEs9e307dGhpcy5f''@;'; put 'put ''YmFzZVN0YXRlPUssSy5lbmM9TixLLnBhcmVudD1MfHxudWxsLEsuY2hpbGRyZW49bnVsbCxLLnRhZz1udWxsLEsuYXJncz1udWxsLEsucmV2ZXJzZUFyZ3M9bnVsbCxLLmNob2ljZT1udWxsLEsub3B0aW9uYWw9ITEsSy5hbnk9ITEsSy5vYmo9ITEsSy51c2U9bnVsbCxLLnVzZURlY29kZXI9''@;'; put 'put ''bnVsbCxLLmtleT1udWxsLEsuZGVmYXVsdD1udWxsLEsuZXhwbGljaXQ9bnVsbCxLLmltcGxpY2l0PW51bGwsSy5jb250YWlucz1udWxsLEsucGFyZW50fHwoSy5jaGlsZHJlbj1bXSx0aGlzLl93cmFwKCkpfXVlLmV4cG9ydHM9Tzt2YXIgej1bImVuYyIsInBhcmVudCIsImNoaWxkcmVuIiwi''@;'; put 'put ''dGFnIiwiYXJncyIsInJldmVyc2VBcmdzIiwiY2hvaWNlIiwib3B0aW9uYWwiLCJhbnkiLCJvYmoiLCJ1c2UiLCJhbHRlcmVkVXNlIiwia2V5IiwiZGVmYXVsdCIsImV4cGxpY2l0IiwiaW1wbGljaXQiLCJjb250YWlucyJdO08ucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIEw9dGhp''@;'; put 'put ''cy5fYmFzZVN0YXRlLEs9e307ei5mb3JFYWNoKGZ1bmN0aW9uKFcpe0tbV109TFtXXX0pO3ZhciBVPW5ldyB0aGlzLmNvbnN0cnVjdG9yKEsucGFyZW50KTtyZXR1cm4gVS5fYmFzZVN0YXRlPUssVX0sTy5wcm90b3R5cGUuX3dyYXA9ZnVuY3Rpb24oKXt2YXIgTD10aGlzLl9iYXNlU3RhdGU7''@;'; put 'put ''UC5mb3JFYWNoKGZ1bmN0aW9uKEspe3RoaXNbS109ZnVuY3Rpb24oKXt2YXIgVz1uZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzKTtyZXR1cm4gTC5jaGlsZHJlbi5wdXNoKFcpLFdbS10uYXBwbHkoVyxhcmd1bWVudHMpfX0sdGhpcyl9LE8ucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKEwpe3Zh''@;'; put 'put ''ciBLPXRoaXMuX2Jhc2VTdGF0ZTtCKG51bGw9PT1LLnBhcmVudCksTC5jYWxsKHRoaXMpLEsuY2hpbGRyZW49Sy5jaGlsZHJlbi5maWx0ZXIoZnVuY3Rpb24oVSl7cmV0dXJuIFUuX2Jhc2VTdGF0ZS5wYXJlbnQ9PT10aGlzfSx0aGlzKSxCLmVxdWFsKEsuY2hpbGRyZW4ubGVuZ3RoLDEsIlJv''@;'; put 'put ''b3Qgbm9kZSBjYW4gaGF2ZSBvbmx5IG9uZSBjaGlsZCIpfSxPLnByb3RvdHlwZS5fdXNlQXJncz1mdW5jdGlvbihMKXt2YXIgSz10aGlzLl9iYXNlU3RhdGUsVT1MLmZpbHRlcihmdW5jdGlvbihXKXtyZXR1cm4gVyBpbnN0YW5jZW9mIHRoaXMuY29uc3RydWN0b3J9LHRoaXMpO0w9TC5maWx0''@;'; put 'put ''ZXIoZnVuY3Rpb24oVyl7cmV0dXJuIShXIGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcil9LHRoaXMpLDAhPT1VLmxlbmd0aCYmKEIobnVsbD09PUsuY2hpbGRyZW4pLEsuY2hpbGRyZW49VSxVLmZvckVhY2goZnVuY3Rpb24oVyl7Vy5fYmFzZVN0YXRlLnBhcmVudD10aGlzfSx0aGlzKSks''@;'; put 'put ''MCE9PUwubGVuZ3RoJiYoQihudWxsPT09Sy5hcmdzKSxLLmFyZ3M9TCxLLnJldmVyc2VBcmdzPUwubWFwKGZ1bmN0aW9uKFcpe2lmKCJvYmplY3QiIT10eXBlb2YgV3x8Vy5jb25zdHJ1Y3RvciE9PU9iamVjdClyZXR1cm4gVzt2YXIgWT17fTtyZXR1cm4gT2JqZWN0LmtleXMoVykuZm9yRWFj''@;'; put 'put ''aChmdW5jdGlvbihxKXtxPT0oMHxxKSYmKHF8PTApLFlbV1txXV09cX0pLFl9KSl9LFsiX3BlZWtUYWciLCJfZGVjb2RlVGFnIiwiX3VzZSIsIl9kZWNvZGVTdHIiLCJfZGVjb2RlT2JqaWQiLCJfZGVjb2RlVGltZSIsIl9kZWNvZGVOdWxsIiwiX2RlY29kZUludCIsIl9kZWNvZGVCb29sIiwi''@;'; put 'put ''X2RlY29kZUxpc3QiLCJfZW5jb2RlQ29tcG9zaXRlIiwiX2VuY29kZVN0ciIsIl9lbmNvZGVPYmppZCIsIl9lbmNvZGVUaW1lIiwiX2VuY29kZU51bGwiLCJfZW5jb2RlSW50IiwiX2VuY29kZUJvb2wiXS5mb3JFYWNoKGZ1bmN0aW9uKE4pe08ucHJvdG90eXBlW05dPWZ1bmN0aW9uKCl7dGhy''@;'; put 'put ''b3cgbmV3IEVycm9yKE4rIiBub3QgaW1wbGVtZW50ZWQgZm9yIGVuY29kaW5nOiAiK3RoaXMuX2Jhc2VTdGF0ZS5lbmMpfX0pLHcuZm9yRWFjaChmdW5jdGlvbihOKXtPLnByb3RvdHlwZVtOXT1mdW5jdGlvbigpe3ZhciBLPXRoaXMuX2Jhc2VTdGF0ZSxVPUFycmF5LnByb3RvdHlwZS5zbGlj''@;'; put 'put ''ZS5jYWxsKGFyZ3VtZW50cyk7cmV0dXJuIEIobnVsbD09PUsudGFnKSxLLnRhZz1OLHRoaXMuX3VzZUFyZ3MoVSksdGhpc319KSxPLnByb3RvdHlwZS51c2U9ZnVuY3Rpb24oTCl7QihMKTt2YXIgSz10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIEIobnVsbD09PUsudXNlKSxLLnVzZT1MLHRoaXN9''@;'; put 'put ''LE8ucHJvdG90eXBlLm9wdGlvbmFsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Jhc2VTdGF0ZS5vcHRpb25hbD0hMCx0aGlzfSxPLnByb3RvdHlwZS5kZWY9ZnVuY3Rpb24oTCl7dmFyIEs9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBCKG51bGw9PT1LLmRlZmF1bHQpLEsuZGVmYXVsdD1MLEsu''@;'; put 'put ''b3B0aW9uYWw9ITAsdGhpc30sTy5wcm90b3R5cGUuZXhwbGljaXQ9ZnVuY3Rpb24oTCl7dmFyIEs9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBCKG51bGw9PT1LLmV4cGxpY2l0JiZudWxsPT09Sy5pbXBsaWNpdCksSy5leHBsaWNpdD1MLHRoaXN9LE8ucHJvdG90eXBlLmltcGxpY2l0PWZ1bmN0''@;'; put 'put ''aW9uKEwpe3ZhciBLPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gQihudWxsPT09Sy5leHBsaWNpdCYmbnVsbD09PUsuaW1wbGljaXQpLEsuaW1wbGljaXQ9TCx0aGlzfSxPLnByb3RvdHlwZS5vYmo9ZnVuY3Rpb24oKXt2YXIgTD10aGlzLl9iYXNlU3RhdGUsSz1BcnJheS5wcm90b3R5cGUuc2xp''@;'; put 'put ''Y2UuY2FsbChhcmd1bWVudHMpO3JldHVybiBMLm9iaj0hMCwwIT09Sy5sZW5ndGgmJnRoaXMuX3VzZUFyZ3MoSyksdGhpc30sTy5wcm90b3R5cGUua2V5PWZ1bmN0aW9uKEwpe3ZhciBLPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gQihudWxsPT09Sy5rZXkpLEsua2V5PUwsdGhpc30sTy5wcm90''@;'; put 'put ''b3R5cGUuYW55PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Jhc2VTdGF0ZS5hbnk9ITAsdGhpc30sTy5wcm90b3R5cGUuY2hvaWNlPWZ1bmN0aW9uKEwpe3ZhciBLPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gQihudWxsPT09Sy5jaG9pY2UpLEsuY2hvaWNlPUwsdGhpcy5fdXNlQXJncyhPYmpl''@;'; put 'put ''Y3Qua2V5cyhMKS5tYXAoZnVuY3Rpb24oVSl7cmV0dXJuIExbVV19KSksdGhpc30sTy5wcm90b3R5cGUuY29udGFpbnM9ZnVuY3Rpb24oTCl7dmFyIEs9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBCKG51bGw9PT1LLnVzZSksSy5jb250YWlucz1MLHRoaXN9LE8ucHJvdG90eXBlLl9kZWNvZGU9''@;'; put 'put ''ZnVuY3Rpb24oTCxLKXt2YXIgVT10aGlzLl9iYXNlU3RhdGU7aWYobnVsbD09PVUucGFyZW50KXJldHVybiBMLndyYXBSZXN1bHQoVS5jaGlsZHJlblswXS5fZGVjb2RlKEwsSykpO3ZhciBuZSxXPVUuZGVmYXVsdCxZPSEwLHE9bnVsbDtpZihudWxsIT09VS5rZXkmJihxPUwuZW50ZXJLZXko''@;'; put 'put ''VS5rZXkpKSxVLm9wdGlvbmFsKXt2YXIgZWU9bnVsbDtpZihudWxsIT09VS5leHBsaWNpdD9lZT1VLmV4cGxpY2l0Om51bGwhPT1VLmltcGxpY2l0P2VlPVUuaW1wbGljaXQ6bnVsbCE9PVUudGFnJiYoZWU9VS50YWcpLG51bGwhPT1lZXx8VS5hbnkpe2lmKFk9dGhpcy5fcGVla1RhZyhMLGVl''@;'; put 'put ''LFUuYW55KSxMLmlzRXJyb3IoWSkpcmV0dXJuIFl9ZWxzZXt2YXIgSj1MLnNhdmUoKTt0cnl7bnVsbD09PVUuY2hvaWNlP3RoaXMuX2RlY29kZUdlbmVyaWMoVS50YWcsTCxLKTp0aGlzLl9kZWNvZGVDaG9pY2UoTCxLKSxZPSEwfWNhdGNoe1k9ITF9TC5yZXN0b3JlKEopfX1pZihVLm9iaiYm''@;'; put 'put ''WSYmKG5lPUwuZW50ZXJPYmplY3QoKSksWSl7aWYobnVsbCE9PVUuZXhwbGljaXQpe3ZhciBpZT10aGlzLl9kZWNvZGVUYWcoTCxVLmV4cGxpY2l0KTtpZihMLmlzRXJyb3IoaWUpKXJldHVybiBpZTtMPWllfXZhciBsZT1MLm9mZnNldDtpZihudWxsPT09VS51c2UmJm51bGw9PT1VLmNob2lj''@;'; put 'put ''ZSl7VS5hbnkmJihKPUwuc2F2ZSgpKTt2YXIgbWU9dGhpcy5fZGVjb2RlVGFnKEwsbnVsbCE9PVUuaW1wbGljaXQ/VS5pbXBsaWNpdDpVLnRhZyxVLmFueSk7aWYoTC5pc0Vycm9yKG1lKSlyZXR1cm4gbWU7VS5hbnk/Vz1MLnJhdyhKKTpMPW1lfWlmKEsmJksudHJhY2smJm51bGwhPT1VLnRh''@;'; put 'put ''ZyYmSy50cmFjayhMLnBhdGgoKSxsZSxMLmxlbmd0aCwidGFnZ2VkIiksSyYmSy50cmFjayYmbnVsbCE9PVUudGFnJiZLLnRyYWNrKEwucGF0aCgpLEwub2Zmc2V0LEwubGVuZ3RoLCJjb250ZW50IiksVS5hbnl8fChXPW51bGw9PT1VLmNob2ljZT90aGlzLl9kZWNvZGVHZW5lcmljKFUudGFn''@;'; put 'put ''LEwsSyk6dGhpcy5fZGVjb2RlQ2hvaWNlKEwsSykpLEwuaXNFcnJvcihXKSlyZXR1cm4gVztpZighVS5hbnkmJm51bGw9PT1VLmNob2ljZSYmbnVsbCE9PVUuY2hpbGRyZW4mJlUuY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbihTZSl7U2UuX2RlY29kZShMLEspfSksVS5jb250YWlucyYmKCJv''@;'; put 'put ''Y3RzdHIiPT09VS50YWd8fCJiaXRzdHIiPT09VS50YWcpKXt2YXIgX2U9bmV3IGcoVyk7Vz10aGlzLl9nZXRVc2UoVS5jb250YWlucyxMLl9yZXBvcnRlclN0YXRlLm9iaikuX2RlY29kZShfZSxLKX19cmV0dXJuIFUub2JqJiZZJiYoVz1MLmxlYXZlT2JqZWN0KG5lKSksbnVsbD09PVUua2V5''@;'; put 'put ''fHxudWxsPT09VyYmITAhPT1ZP251bGwhPT1xJiZMLmV4aXRLZXkocSk6TC5sZWF2ZUtleShxLFUua2V5LFcpLFd9LE8ucHJvdG90eXBlLl9kZWNvZGVHZW5lcmljPWZ1bmN0aW9uKEwsSyxVKXt2YXIgVz10aGlzLl9iYXNlU3RhdGU7cmV0dXJuInNlcSI9PT1MfHwic2V0Ij09PUw/bnVsbDoi''@;'; put 'put ''c2Vxb2YiPT09THx8InNldG9mIj09PUw/dGhpcy5fZGVjb2RlTGlzdChLLEwsVy5hcmdzWzBdLFUpOi9zdHIkLy50ZXN0KEwpP3RoaXMuX2RlY29kZVN0cihLLEwsVSk6Im9iamlkIj09PUwmJlcuYXJncz90aGlzLl9kZWNvZGVPYmppZChLLFcuYXJnc1swXSxXLmFyZ3NbMV0sVSk6Im9iamlk''@;'; put 'put ''Ij09PUw/dGhpcy5fZGVjb2RlT2JqaWQoSyxudWxsLG51bGwsVSk6ImdlbnRpbWUiPT09THx8InV0Y3RpbWUiPT09TD90aGlzLl9kZWNvZGVUaW1lKEssTCxVKToibnVsbF8iPT09TD90aGlzLl9kZWNvZGVOdWxsKEssVSk6ImJvb2wiPT09TD90aGlzLl9kZWNvZGVCb29sKEssVSk6Im9iakRl''@;'; put 'put ''c2MiPT09TD90aGlzLl9kZWNvZGVTdHIoSyxMLFUpOiJpbnQiPT09THx8ImVudW0iPT09TD90aGlzLl9kZWNvZGVJbnQoSyxXLmFyZ3MmJlcuYXJnc1swXSxVKTpudWxsIT09Vy51c2U/dGhpcy5fZ2V0VXNlKFcudXNlLEsuX3JlcG9ydGVyU3RhdGUub2JqKS5fZGVjb2RlKEssVSk6Sy5lcnJv''@;'; put 'put ''cigidW5rbm93biB0YWc6ICIrTCl9LE8ucHJvdG90eXBlLl9nZXRVc2U9ZnVuY3Rpb24oTCxLKXt2YXIgVT10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIFUudXNlRGVjb2Rlcj10aGlzLl91c2UoTCxLKSxCKG51bGw9PT1VLnVzZURlY29kZXIuX2Jhc2VTdGF0ZS5wYXJlbnQpLFUudXNlRGVjb2Rl''@;'; put 'put ''cj1VLnVzZURlY29kZXIuX2Jhc2VTdGF0ZS5jaGlsZHJlblswXSxVLmltcGxpY2l0IT09VS51c2VEZWNvZGVyLl9iYXNlU3RhdGUuaW1wbGljaXQmJihVLnVzZURlY29kZXI9VS51c2VEZWNvZGVyLmNsb25lKCksVS51c2VEZWNvZGVyLl9iYXNlU3RhdGUuaW1wbGljaXQ9VS5pbXBsaWNpdCks''@;'; put 'put ''VS51c2VEZWNvZGVyfSxPLnByb3RvdHlwZS5fZGVjb2RlQ2hvaWNlPWZ1bmN0aW9uKEwsSyl7dmFyIFU9dGhpcy5fYmFzZVN0YXRlLFc9bnVsbCxZPSExO3JldHVybiBPYmplY3Qua2V5cyhVLmNob2ljZSkuc29tZShmdW5jdGlvbihxKXt2YXIgZWU9TC5zYXZlKCksSj1VLmNob2ljZVtxXTt0''@;'; put 'put ''cnl7dmFyIG5lPUouX2RlY29kZShMLEspO2lmKEwuaXNFcnJvcihuZSkpcmV0dXJuITE7Vz17dHlwZTpxLHZhbHVlOm5lfSxZPSEwfWNhdGNoe3JldHVybiBMLnJlc3RvcmUoZWUpLCExfXJldHVybiEwfSx0aGlzKSxZP1c6TC5lcnJvcigiQ2hvaWNlIG5vdCBtYXRjaGVkIil9LE8ucHJvdG90''@;'; put 'put ''eXBlLl9jcmVhdGVFbmNvZGVyQnVmZmVyPWZ1bmN0aW9uKEwpe3JldHVybiBuZXcgXyhMLHRoaXMucmVwb3J0ZXIpfSxPLnByb3RvdHlwZS5fZW5jb2RlPWZ1bmN0aW9uKEwsSyxVKXt2YXIgVz10aGlzLl9iYXNlU3RhdGU7aWYobnVsbD09PVcuZGVmYXVsdHx8Vy5kZWZhdWx0IT09TCl7dmFy''@;'; put 'put ''IFk9dGhpcy5fZW5jb2RlVmFsdWUoTCxLLFUpO2lmKHZvaWQgMCE9PVkmJiF0aGlzLl9za2lwRGVmYXVsdChZLEssVSkpcmV0dXJuIFl9fSxPLnByb3RvdHlwZS5fZW5jb2RlVmFsdWU9ZnVuY3Rpb24oTCxLLFUpe3ZhciBXPXRoaXMuX2Jhc2VTdGF0ZTtpZihudWxsPT09Vy5wYXJlbnQpcmV0''@;'; put 'put ''dXJuIFcuY2hpbGRyZW5bMF0uX2VuY29kZShMLEt8fG5ldyBJKTt2YXIgSj1udWxsO2lmKHRoaXMucmVwb3J0ZXI9SyxXLm9wdGlvbmFsJiZ2b2lkIDA9PT1MKXtpZihudWxsPT09Vy5kZWZhdWx0KXJldHVybjtMPVcuZGVmYXVsdH12YXIgWT1udWxsLHE9ITE7aWYoVy5hbnkpSj10aGlzLl9j''@;'; put 'put ''cmVhdGVFbmNvZGVyQnVmZmVyKEwpO2Vsc2UgaWYoVy5jaG9pY2UpSj10aGlzLl9lbmNvZGVDaG9pY2UoTCxLKTtlbHNlIGlmKFcuY29udGFpbnMpWT10aGlzLl9nZXRVc2UoVy5jb250YWlucyxVKS5fZW5jb2RlKEwsSykscT0hMDtlbHNlIGlmKFcuY2hpbGRyZW4pWT1XLmNoaWxkcmVuLm1h''@;'; put 'put ''cChmdW5jdGlvbihsZSl7aWYoIm51bGxfIj09PWxlLl9iYXNlU3RhdGUudGFnKXJldHVybiBsZS5fZW5jb2RlKG51bGwsSyxMKTtpZihudWxsPT09bGUuX2Jhc2VTdGF0ZS5rZXkpcmV0dXJuIEsuZXJyb3IoIkNoaWxkIHNob3VsZCBoYXZlIGEga2V5Iik7dmFyIG1lPUsuZW50ZXJLZXkobGUu''@;'; put 'put ''X2Jhc2VTdGF0ZS5rZXkpO2lmKCJvYmplY3QiIT10eXBlb2YgTClyZXR1cm4gSy5lcnJvcigiQ2hpbGQgZXhwZWN0ZWQsIGJ1dCBpbnB1dCBpcyBub3Qgb2JqZWN0Iik7dmFyIF9lPWxlLl9lbmNvZGUoTFtsZS5fYmFzZVN0YXRlLmtleV0sSyxMKTtyZXR1cm4gSy5sZWF2ZUtleShtZSksX2V9''@;'; put 'put ''LHRoaXMpLmZpbHRlcihmdW5jdGlvbihsZSl7cmV0dXJuIGxlfSksWT10aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKFkpO2Vsc2UgaWYoInNlcW9mIj09PVcudGFnfHwic2V0b2YiPT09Vy50YWcpe2lmKCFXLmFyZ3N8fDEhPT1XLmFyZ3MubGVuZ3RoKXJldHVybiBLLmVycm9yKCJUb28gbWFu''@;'; put 'put ''eSBhcmdzIGZvciA6ICIrVy50YWcpO2lmKCFBcnJheS5pc0FycmF5KEwpKXJldHVybiBLLmVycm9yKCJzZXFvZi9zZXRvZiwgYnV0IGRhdGEgaXMgbm90IEFycmF5Iik7dmFyIGVlPXRoaXMuY2xvbmUoKTtlZS5fYmFzZVN0YXRlLmltcGxpY2l0PW51bGwsWT10aGlzLl9jcmVhdGVFbmNvZGVy''@;'; put 'put ''QnVmZmVyKEwubWFwKGZ1bmN0aW9uKGxlKXtyZXR1cm4gdGhpcy5fZ2V0VXNlKHRoaXMuX2Jhc2VTdGF0ZS5hcmdzWzBdLEwpLl9lbmNvZGUobGUsSyl9LGVlKSl9ZWxzZSBudWxsIT09Vy51c2U/Sj10aGlzLl9nZXRVc2UoVy51c2UsVSkuX2VuY29kZShMLEspOihZPXRoaXMuX2VuY29kZVBy''@;'; put 'put ''aW1pdGl2ZShXLnRhZyxMKSxxPSEwKTtpZighVy5hbnkmJm51bGw9PT1XLmNob2ljZSl7dmFyIG5lPW51bGwhPT1XLmltcGxpY2l0P1cuaW1wbGljaXQ6Vy50YWcsaWU9bnVsbD09PVcuaW1wbGljaXQ/InVuaXZlcnNhbCI6ImNvbnRleHQiO251bGw9PT1uZT9udWxsPT09Vy51c2UmJksuZXJy''@;'; put 'put ''b3IoIlRhZyBjb3VsZCBiZSBvbWl0dGVkIG9ubHkgZm9yIC51c2UoKSIpOm51bGw9PT1XLnVzZSYmKEo9dGhpcy5fZW5jb2RlQ29tcG9zaXRlKG5lLHEsaWUsWSkpfXJldHVybiBudWxsIT09Vy5leHBsaWNpdCYmKEo9dGhpcy5fZW5jb2RlQ29tcG9zaXRlKFcuZXhwbGljaXQsITEsImNvbnRl''@;'; put 'put ''eHQiLEopKSxKfSxPLnByb3RvdHlwZS5fZW5jb2RlQ2hvaWNlPWZ1bmN0aW9uKEwsSyl7dmFyIFU9dGhpcy5fYmFzZVN0YXRlLFc9VS5jaG9pY2VbTC50eXBlXTtyZXR1cm4gV3x8QighMSxMLnR5cGUrIiBub3QgZm91bmQgaW4gIitKU09OLnN0cmluZ2lmeShPYmplY3Qua2V5cyhVLmNob2lj''@;'; put 'put ''ZSkpKSxXLl9lbmNvZGUoTC52YWx1ZSxLKX0sTy5wcm90b3R5cGUuX2VuY29kZVByaW1pdGl2ZT1mdW5jdGlvbihMLEspe3ZhciBVPXRoaXMuX2Jhc2VTdGF0ZTtpZigvc3RyJC8udGVzdChMKSlyZXR1cm4gdGhpcy5fZW5jb2RlU3RyKEssTCk7aWYoIm9iamlkIj09PUwmJlUuYXJncylyZXR1''@;'; put 'put ''cm4gdGhpcy5fZW5jb2RlT2JqaWQoSyxVLnJldmVyc2VBcmdzWzBdLFUuYXJnc1sxXSk7aWYoIm9iamlkIj09PUwpcmV0dXJuIHRoaXMuX2VuY29kZU9iamlkKEssbnVsbCxudWxsKTtpZigiZ2VudGltZSI9PT1MfHwidXRjdGltZSI9PT1MKXJldHVybiB0aGlzLl9lbmNvZGVUaW1lKEssTCk7''@;'; put 'put ''aWYoIm51bGxfIj09PUwpcmV0dXJuIHRoaXMuX2VuY29kZU51bGwoKTtpZigiaW50Ij09PUx8fCJlbnVtIj09PUwpcmV0dXJuIHRoaXMuX2VuY29kZUludChLLFUuYXJncyYmVS5yZXZlcnNlQXJnc1swXSk7aWYoImJvb2wiPT09TClyZXR1cm4gdGhpcy5fZW5jb2RlQm9vbChLKTtpZigib2Jq''@;'; put 'put ''RGVzYyI9PT1MKXJldHVybiB0aGlzLl9lbmNvZGVTdHIoSyxMKTt0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIHRhZzogIitMKX0sTy5wcm90b3R5cGUuX2lzTnVtc3RyPWZ1bmN0aW9uKEwpe3JldHVybi9eWzAtOSBdKiQvLnRlc3QoTCl9LE8ucHJvdG90eXBlLl9pc1ByaW50c3RyPWZ1''@;'; put 'put ''bmN0aW9uKEwpe3JldHVybi9eW0EtWmEtejAtOSAnXChcKVwrLFwtXC5cLzo9XD9dKiQvLnRlc3QoTCl9fSw4NDY1Oih1ZSxYLHkpPT57dmFyIEk9eSg1NzE3KTtmdW5jdGlvbiBfKEIpe3RoaXMuX3JlcG9ydGVyU3RhdGU9e29iajpudWxsLHBhdGg6W10sb3B0aW9uczpCfHx7fSxlcnJvcnM6''@;'; put 'put ''W119fWZ1bmN0aW9uIGcoQix3KXt0aGlzLnBhdGg9Qix0aGlzLnJldGhyb3codyl9WC5iPV8sXy5wcm90b3R5cGUuaXNFcnJvcj1mdW5jdGlvbih3KXtyZXR1cm4gdyBpbnN0YW5jZW9mIGd9LF8ucHJvdG90eXBlLnNhdmU9ZnVuY3Rpb24oKXt2YXIgdz10aGlzLl9yZXBvcnRlclN0YXRlO3Jl''@;'; 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 ''YXB0dXJlU3RhY2tUcmFjZSh0aGlzLGcpLCF0aGlzLnN0YWNrKXRyeXt0aHJvdyBuZXcgRXJyb3IodGhpcy5tZXNzYWdlKX1jYXRjaChQKXt0aGlzLnN0YWNrPVAuc3RhY2t9cmV0dXJuIHRoaXN9fSwxNjA6KHVlLFgseSk9Pnt2YXIgST15KDY4MjYpO1gudGFnQ2xhc3M9ezA6InVuaXZlcnNh''@;'; put 'put ''bCIsMToiYXBwbGljYXRpb24iLDI6ImNvbnRleHQiLDM6InByaXZhdGUifSxYLnRhZ0NsYXNzQnlOYW1lPUkuX3JldmVyc2UoWC50YWdDbGFzcyksWC50YWc9ezA6ImVuZCIsMToiYm9vbCIsMjoiaW50IiwzOiJiaXRzdHIiLDQ6Im9jdHN0ciIsNToibnVsbF8iLDY6Im9iamlkIiw3OiJvYmpE''@;'; put 'put ''ZXNjIiw4OiJleHRlcm5hbCIsOToicmVhbCIsMTA6ImVudW0iLDExOiJlbWJlZCIsMTI6InV0ZjhzdHIiLDEzOiJyZWxhdGl2ZU9pZCIsMTY6InNlcSIsMTc6InNldCIsMTg6Im51bXN0ciIsMTk6InByaW50c3RyIiwyMDoidDYxc3RyIiwyMToidmlkZW9zdHIiLDIyOiJpYTVzdHIiLDIzOiJ1''@;'; put 'put ''dGN0aW1lIiwyNDoiZ2VudGltZSIsMjU6ImdyYXBoc3RyIiwyNjoiaXNvNjQ2c3RyIiwyNzoiZ2Vuc3RyIiwyODoidW5pc3RyIiwyOToiY2hhcnN0ciIsMzA6ImJtcHN0ciJ9LFgudGFnQnlOYW1lPUkuX3JldmVyc2UoWC50YWcpfSw2ODI2Oih1ZSxYLHkpPT57dmFyIEk9WDtJLl9yZXZlcnNl''@;'; put 'put ''PWZ1bmN0aW9uKGcpe3ZhciBCPXt9O3JldHVybiBPYmplY3Qua2V5cyhnKS5mb3JFYWNoKGZ1bmN0aW9uKHcpeygwfHcpPT13JiYod3w9MCksQltnW3ddXT13fSksQn0sSS5kZXI9eSgxNjApfSwxNjcxOih1ZSxYLHkpPT57dmFyIEk9eSg1NzE3KSxfPXkoOTgwOSksZz1fLmJhc2UsQj1fLmJp''@;'; put 'put ''Z251bSx3PV8uY29uc3RhbnRzLmRlcjtmdW5jdGlvbiBQKE4pe3RoaXMuZW5jPSJkZXIiLHRoaXMubmFtZT1OLm5hbWUsdGhpcy5lbnRpdHk9Tix0aGlzLnRyZWU9bmV3IEYsdGhpcy50cmVlLl9pbml0KE4uYm9keSl9ZnVuY3Rpb24gRihOKXtnLk5vZGUuY2FsbCh0aGlzLCJkZXIiLE4pfWZ1''@;'; put 'put ''bmN0aW9uIE8oTixMKXt2YXIgSz1OLnJlYWRVSW50OChMKTtpZihOLmlzRXJyb3IoSykpcmV0dXJuIEs7dmFyIFU9dy50YWdDbGFzc1tLPj42XSxXPSEoMzImSyk7aWYoMzEmfkspSyY9MzE7ZWxzZXt2YXIgWT1LO2ZvcihLPTA7ISgxMjgmflkpOyl7aWYoWT1OLnJlYWRVSW50OChMKSxOLmlz''@;'; put 'put ''RXJyb3IoWSkpcmV0dXJuIFk7Szw8PTcsS3w9MTI3Jll9fXJldHVybntjbHM6VSxwcmltaXRpdmU6Vyx0YWc6Syx0YWdTdHI6dy50YWdbS119fWZ1bmN0aW9uIHooTixMLEspe3ZhciBVPU4ucmVhZFVJbnQ4KEspO2lmKE4uaXNFcnJvcihVKSlyZXR1cm4gVTtpZighTCYmMTI4PT09VSlyZXR1''@;'; put 'put ''cm4gbnVsbDtpZighKDEyOCZVKSlyZXR1cm4gVTt2YXIgVz0xMjcmVTtpZihXPjQpcmV0dXJuIE4uZXJyb3IoImxlbmd0aCBvY3RlY3QgaXMgdG9vIGxvbmciKTtVPTA7Zm9yKHZhciBZPTA7WTxXO1krKyl7VTw8PTg7dmFyIHE9Ti5yZWFkVUludDgoSyk7aWYoTi5pc0Vycm9yKHEpKXJldHVy''@;'; put 'put ''biBxO1V8PXF9cmV0dXJuIFV9dWUuZXhwb3J0cz1QLFAucHJvdG90eXBlLmRlY29kZT1mdW5jdGlvbihMLEspe3JldHVybiBMIGluc3RhbmNlb2YgZy5EZWNvZGVyQnVmZmVyfHwoTD1uZXcgZy5EZWNvZGVyQnVmZmVyKEwsSykpLHRoaXMudHJlZS5fZGVjb2RlKEwsSyl9LEkoRixnLk5vZGUp''@;'; put 'put ''LEYucHJvdG90eXBlLl9wZWVrVGFnPWZ1bmN0aW9uKEwsSyxVKXtpZihMLmlzRW1wdHkoKSlyZXR1cm4hMTt2YXIgVz1MLnNhdmUoKSxZPU8oTCwnRmFpbGVkIHRvIHBlZWsgdGFnOiAiJytLKyciJyk7cmV0dXJuIEwuaXNFcnJvcihZKT9ZOihMLnJlc3RvcmUoVyksWS50YWc9PT1LfHxZLnRh''@;'; put 'put ''Z1N0cj09PUt8fFkudGFnU3RyKyJvZiI9PT1LfHxVKX0sRi5wcm90b3R5cGUuX2RlY29kZVRhZz1mdW5jdGlvbihMLEssVSl7dmFyIFc9TyhMLCdGYWlsZWQgdG8gZGVjb2RlIHRhZyBvZiAiJytLKyciJyk7aWYoTC5pc0Vycm9yKFcpKXJldHVybiBXO3ZhciBZPXooTCxXLnByaW1pdGl2ZSwn''@;'; put 'put ''RmFpbGVkIHRvIGdldCBsZW5ndGggb2YgIicrSysnIicpO2lmKEwuaXNFcnJvcihZKSlyZXR1cm4gWTtpZighVSYmVy50YWchPT1LJiZXLnRhZ1N0ciE9PUsmJlcudGFnU3RyKyJvZiIhPT1LKXJldHVybiBMLmVycm9yKCdGYWlsZWQgdG8gbWF0Y2ggdGFnOiAiJytLKyciJyk7aWYoVy5wcmlt''@;'; put 'put ''aXRpdmV8fG51bGwhPT1ZKXJldHVybiBMLnNraXAoWSwnRmFpbGVkIHRvIG1hdGNoIGJvZHkgb2Y6ICInK0srJyInKTt2YXIgcT1MLnNhdmUoKSxlZT10aGlzLl9za2lwVW50aWxFbmQoTCwnRmFpbGVkIHRvIHNraXAgaW5kZWZpbml0ZSBsZW5ndGggYm9keTogIicrdGhpcy50YWcrJyInKTty''@;'; put 'put ''ZXR1cm4gTC5pc0Vycm9yKGVlKT9lZTooWT1MLm9mZnNldC1xLm9mZnNldCxMLnJlc3RvcmUocSksTC5za2lwKFksJ0ZhaWxlZCB0byBtYXRjaCBib2R5IG9mOiAiJytLKyciJykpfSxGLnByb3RvdHlwZS5fc2tpcFVudGlsRW5kPWZ1bmN0aW9uKEwsSyl7Zm9yKDs7KXt2YXIgVT1PKEwsSyk7''@;'; put 'put ''aWYoTC5pc0Vycm9yKFUpKXJldHVybiBVO3ZhciBZLFc9eihMLFUucHJpbWl0aXZlLEspO2lmKEwuaXNFcnJvcihXKSlyZXR1cm4gVztpZihZPVUucHJpbWl0aXZlfHxudWxsIT09Vz9MLnNraXAoVyk6dGhpcy5fc2tpcFVudGlsRW5kKEwsSyksTC5pc0Vycm9yKFkpKXJldHVybiBZO2lmKCJl''@;'; put 'put ''bmQiPT09VS50YWdTdHIpYnJlYWt9fSxGLnByb3RvdHlwZS5fZGVjb2RlTGlzdD1mdW5jdGlvbihMLEssVSxXKXtmb3IodmFyIFk9W107IUwuaXNFbXB0eSgpOyl7dmFyIHE9dGhpcy5fcGVla1RhZyhMLCJlbmQiKTtpZihMLmlzRXJyb3IocSkpcmV0dXJuIHE7dmFyIGVlPVUuZGVjb2RlKEws''@;'; put 'put ''ImRlciIsVyk7aWYoTC5pc0Vycm9yKGVlKSYmcSlicmVhaztZLnB1c2goZWUpfXJldHVybiBZfSxGLnByb3RvdHlwZS5fZGVjb2RlU3RyPWZ1bmN0aW9uKEwsSyl7aWYoImJpdHN0ciI9PT1LKXt2YXIgVT1MLnJlYWRVSW50OCgpO3JldHVybiBMLmlzRXJyb3IoVSk/VTp7dW51c2VkOlUsZGF0''@;'; put 'put ''YTpMLnJhdygpfX1pZigiYm1wc3RyIj09PUspe3ZhciBXPUwucmF3KCk7aWYoVy5sZW5ndGglMj09MSlyZXR1cm4gTC5lcnJvcigiRGVjb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IGJtcHN0ciBsZW5ndGggbWlzbWF0Y2giKTtmb3IodmFyIFk9IiIscT0wO3E8Vy5sZW5ndGgvMjtxKyspWSs9U3Ry''@;'; put 'put ''aW5nLmZyb21DaGFyQ29kZShXLnJlYWRVSW50MTZCRSgyKnEpKTtyZXR1cm4gWX1pZigibnVtc3RyIj09PUspe3ZhciBlZT1MLnJhdygpLnRvU3RyaW5nKCJhc2NpaSIpO3JldHVybiB0aGlzLl9pc051bXN0cihlZSk/ZWU6TC5lcnJvcigiRGVjb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IG51bXN0''@;'; put 'put ''ciB1bnN1cHBvcnRlZCBjaGFyYWN0ZXJzIil9aWYoIm9jdHN0ciI9PT1LKXJldHVybiBMLnJhdygpO2lmKCJvYmpEZXNjIj09PUspcmV0dXJuIEwucmF3KCk7aWYoInByaW50c3RyIj09PUspe3ZhciBKPUwucmF3KCkudG9TdHJpbmcoImFzY2lpIik7cmV0dXJuIHRoaXMuX2lzUHJpbnRzdHIo''@;'; put 'put ''Sik/SjpMLmVycm9yKCJEZWNvZGluZyBvZiBzdHJpbmcgdHlwZTogcHJpbnRzdHIgdW5zdXBwb3J0ZWQgY2hhcmFjdGVycyIpfXJldHVybi9zdHIkLy50ZXN0KEspP0wucmF3KCkudG9TdHJpbmcoKTpMLmVycm9yKCJEZWNvZGluZyBvZiBzdHJpbmcgdHlwZTogIitLKyIgdW5zdXBwb3J0ZWQi''@;'; put 'put ''KX0sRi5wcm90b3R5cGUuX2RlY29kZU9iamlkPWZ1bmN0aW9uKEwsSyxVKXtmb3IodmFyIFcsWT1bXSxxPTA7IUwuaXNFbXB0eSgpOyl7dmFyIGVlPUwucmVhZFVJbnQ4KCk7cTw8PTcscXw9MTI3JmVlLDEyOCZlZXx8KFkucHVzaChxKSxxPTApfWlmKDEyOCZlZSYmWS5wdXNoKHEpLFc9VT9Z''@;'; put 'put ''OltZWzBdLzQwfDAsWVswXSU0MF0uY29uY2F0KFkuc2xpY2UoMSkpLEspe3ZhciBpZT1LW1cuam9pbigiICIpXTt2b2lkIDA9PT1pZSYmKGllPUtbVy5qb2luKCIuIildKSx2b2lkIDAhPT1pZSYmKFc9aWUpfXJldHVybiBXfSxGLnByb3RvdHlwZS5fZGVjb2RlVGltZT1mdW5jdGlvbihMLEsp''@;'; put 'put ''e3ZhciBVPUwucmF3KCkudG9TdHJpbmcoKTtpZigiZ2VudGltZSI9PT1LKXZhciBXPTB8VS5zbGljZSgwLDQpLFk9MHxVLnNsaWNlKDQsNikscT0wfFUuc2xpY2UoNiw4KSxlZT0wfFUuc2xpY2UoOCwxMCksSj0wfFUuc2xpY2UoMTAsMTIpLG5lPTB8VS5zbGljZSgxMiwxNCk7ZWxzZXtpZigi''@;'; put 'put ''dXRjdGltZSIhPT1LKXJldHVybiBMLmVycm9yKCJEZWNvZGluZyAiK0srIiB0aW1lIGlzIG5vdCBzdXBwb3J0ZWQgeWV0Iik7Vz0wfFUuc2xpY2UoMCwyKSxZPTB8VS5zbGljZSgyLDQpLHE9MHxVLnNsaWNlKDQsNiksZWU9MHxVLnNsaWNlKDYsOCksSj0wfFUuc2xpY2UoOCwxMCksbmU9MHxV''@;'; put 'put ''LnNsaWNlKDEwLDEyKSxXPVc8NzA/MmUzK1c6MTkwMCtXfXJldHVybiBEYXRlLlVUQyhXLFktMSxxLGVlLEosbmUsMCl9LEYucHJvdG90eXBlLl9kZWNvZGVOdWxsPWZ1bmN0aW9uKEwpe3JldHVybiBudWxsfSxGLnByb3RvdHlwZS5fZGVjb2RlQm9vbD1mdW5jdGlvbihMKXt2YXIgSz1MLnJl''@;'; put 'put ''YWRVSW50OCgpO3JldHVybiBMLmlzRXJyb3IoSyk/SzowIT09S30sRi5wcm90b3R5cGUuX2RlY29kZUludD1mdW5jdGlvbihMLEspe3ZhciBVPUwucmF3KCksVz1uZXcgQihVKTtyZXR1cm4gSyYmKFc9S1tXLnRvU3RyaW5nKDEwKV18fFcpLFd9LEYucHJvdG90eXBlLl91c2U9ZnVuY3Rpb24o''@;'; put 'put ''TCxLKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgTCYmKEw9TChLKSksTC5fZ2V0RGVjb2RlcigiZGVyIikudHJlZX19LDgzMDc6KHVlLFgseSk9Pnt2YXIgST1YO0kuZGVyPXkoMTY3MSksSS5wZW09eSg5NjMxKX0sOTYzMToodWUsWCx5KT0+e3ZhciBJPXkoNTcxNyksXz15KDg3NjQpLkJ1''@;'; put 'put ''ZmZlcixnPXkoMTY3MSk7ZnVuY3Rpb24gQih3KXtnLmNhbGwodGhpcyx3KSx0aGlzLmVuYz0icGVtIn1JKEIsZyksdWUuZXhwb3J0cz1CLEIucHJvdG90eXBlLmRlY29kZT1mdW5jdGlvbihQLEYpe2Zvcih2YXIgTz1QLnRvU3RyaW5nKCkuc3BsaXQoL1tcclxuXSsvZyksej1GLmxhYmVsLnRv''@;'; put 'put ''VXBwZXJDYXNlKCksTj0vXi0tLS0tKEJFR0lOfEVORCkgKFteLV0rKS0tLS0tJC8sTD0tMSxLPS0xLFU9MDtVPE8ubGVuZ3RoO1UrKyl7dmFyIFc9T1tVXS5tYXRjaChOKTtpZihudWxsIT09VyYmV1syXT09PXope2lmKC0xIT09TCl7aWYoIkVORCIhPT1XWzFdKWJyZWFrO0s9VTticmVha31p''@;'; put 'put ''ZigiQkVHSU4iIT09V1sxXSlicmVhaztMPVV9fWlmKC0xPT09THx8LTE9PT1LKXRocm93IG5ldyBFcnJvcigiUEVNIHNlY3Rpb24gbm90IGZvdW5kIGZvcjogIit6KTt2YXIgWT1PLnNsaWNlKEwrMSxLKS5qb2luKCIiKTtZLnJlcGxhY2UoL1teYS16MC05XCtcLz1dKy9naSwiIik7dmFyIHE9''@;'; put 'put ''bmV3IF8oWSwiYmFzZTY0Iik7cmV0dXJuIGcucHJvdG90eXBlLmRlY29kZS5jYWxsKHRoaXMscSxGKX19LDY5ODQ6KHVlLFgseSk9Pnt2YXIgST15KDU3MTcpLF89eSg4NzY0KS5CdWZmZXIsZz15KDk4MDkpLEI9Zy5iYXNlLHc9Zy5jb25zdGFudHMuZGVyO2Z1bmN0aW9uIFAoTil7dGhpcy5l''@;'; put 'put ''bmM9ImRlciIsdGhpcy5uYW1lPU4ubmFtZSx0aGlzLmVudGl0eT1OLHRoaXMudHJlZT1uZXcgRix0aGlzLnRyZWUuX2luaXQoTi5ib2R5KX1mdW5jdGlvbiBGKE4pe0IuTm9kZS5jYWxsKHRoaXMsImRlciIsTil9ZnVuY3Rpb24gTyhOKXtyZXR1cm4gTjwxMD8iMCIrTjpOfXVlLmV4cG9ydHM9''@;'; put 'put ''UCxQLnByb3RvdHlwZS5lbmNvZGU9ZnVuY3Rpb24oTCxLKXtyZXR1cm4gdGhpcy50cmVlLl9lbmNvZGUoTCxLKS5qb2luKCl9LEkoRixCLk5vZGUpLEYucHJvdG90eXBlLl9lbmNvZGVDb21wb3NpdGU9ZnVuY3Rpb24oTCxLLFUsVyl7dmFyIEosWT1mdW5jdGlvbiB6KE4sTCxLLFUpe3ZhciBX''@;'; put 'put ''O2lmKCJzZXFvZiI9PT1OP049InNlcSI6InNldG9mIj09PU4mJihOPSJzZXQiKSx3LnRhZ0J5TmFtZS5oYXNPd25Qcm9wZXJ0eShOKSlXPXcudGFnQnlOYW1lW05dO2Vsc2V7aWYoIm51bWJlciIhPXR5cGVvZiBOfHwoMHxOKSE9PU4pcmV0dXJuIFUuZXJyb3IoIlVua25vd24gdGFnOiAiK04p''@;'; put 'put ''O1c9Tn1yZXR1cm4gVz49MzE/VS5lcnJvcigiTXVsdGktb2N0ZXQgdGFnIGVuY29kaW5nIHVuc3VwcG9ydGVkIik6KEx8fChXfD0zMiksV3w9dy50YWdDbGFzc0J5TmFtZVtLfHwidW5pdmVyc2FsIl08PDYpfShMLEssVSx0aGlzLnJlcG9ydGVyKTtpZihXLmxlbmd0aDwxMjgpcmV0dXJuKEo9''@;'; put 'put ''bmV3IF8oMikpWzBdPVksSlsxXT1XLmxlbmd0aCx0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKFtKLFddKTtmb3IodmFyIHE9MSxlZT1XLmxlbmd0aDtlZT49MjU2O2VlPj49OClxKys7KEo9bmV3IF8oMitxKSlbMF09WSxKWzFdPTEyOHxxLGVlPTErcTtmb3IodmFyIG5lPVcubGVuZ3RoO25l''@;'; put 'put ''PjA7ZWUtLSxuZT4+PTgpSltlZV09MjU1Jm5lO3JldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKFtKLFddKX0sRi5wcm90b3R5cGUuX2VuY29kZVN0cj1mdW5jdGlvbihMLEspe2lmKCJiaXRzdHIiPT09SylyZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihbMHxMLnVudXNl''@;'; put 'put ''ZCxMLmRhdGFdKTtpZigiYm1wc3RyIj09PUspe2Zvcih2YXIgVT1uZXcgXygyKkwubGVuZ3RoKSxXPTA7VzxMLmxlbmd0aDtXKyspVS53cml0ZVVJbnQxNkJFKEwuY2hhckNvZGVBdChXKSwyKlcpO3JldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKFUpfXJldHVybiJudW1zdHIiPT09''@;'; put 'put ''Sz90aGlzLl9pc051bXN0cihMKT90aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKEwpOnRoaXMucmVwb3J0ZXIuZXJyb3IoIkVuY29kaW5nIG9mIHN0cmluZyB0eXBlOiBudW1zdHIgc3VwcG9ydHMgb25seSBkaWdpdHMgYW5kIHNwYWNlIik6InByaW50c3RyIj09PUs/dGhpcy5faXNQcmludHN0''@;'; put 'put ''cihMKT90aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKEwpOnRoaXMucmVwb3J0ZXIuZXJyb3IoIkVuY29kaW5nIG9mIHN0cmluZyB0eXBlOiBwcmludHN0ciBzdXBwb3J0cyBvbmx5IGxhdGluIHVwcGVyIGFuZCBsb3dlciBjYXNlIGxldHRlcnMsIGRpZ2l0cywgc3BhY2UsIGFwb3N0cm9waGUs''@;'; put 'put ''IGxlZnQgYW5kIHJpZ3RoIHBhcmVudGhlc2lzLCBwbHVzIHNpZ24sIGNvbW1hLCBoeXBoZW4sIGRvdCwgc2xhc2gsIGNvbG9uLCBlcXVhbCBzaWduLCBxdWVzdGlvbiBtYXJrIik6L3N0ciQvLnRlc3QoSyl8fCJvYmpEZXNjIj09PUs/dGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihMKTp0aGlz''@;'; put 'put ''LnJlcG9ydGVyLmVycm9yKCJFbmNvZGluZyBvZiBzdHJpbmcgdHlwZTogIitLKyIgdW5zdXBwb3J0ZWQiKX0sRi5wcm90b3R5cGUuX2VuY29kZU9iamlkPWZ1bmN0aW9uKEwsSyxVKXtpZigic3RyaW5nIj09dHlwZW9mIEwpe2lmKCFLKXJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKCJzdHJp''@;'; put 'put ''bmcgb2JqaWQgZ2l2ZW4sIGJ1dCBubyB2YWx1ZXMgbWFwIGZvdW5kIik7aWYoIUsuaGFzT3duUHJvcGVydHkoTCkpcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoIm9iamlkIG5vdCBmb3VuZCBpbiB2YWx1ZXMgbWFwIik7TD1LW0xdLnNwbGl0KC9bXHNcLl0rL2cpO2Zvcih2YXIgVz0wO1c8''@;'; put 'put ''TC5sZW5ndGg7VysrKUxbV118PTB9ZWxzZSBpZihBcnJheS5pc0FycmF5KEwpKWZvcihMPUwuc2xpY2UoKSxXPTA7VzxMLmxlbmd0aDtXKyspTFtXXXw9MDtpZighQXJyYXkuaXNBcnJheShMKSlyZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcigib2JqaWQoKSBzaG91bGQgYmUgZWl0aGVyIGFy''@;'; put 'put ''cmF5IG9yIHN0cmluZywgZ290OiAiK0pTT04uc3RyaW5naWZ5KEwpKTtpZighVSl7aWYoTFsxXT49NDApcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoIlNlY29uZCBvYmppZCBpZGVudGlmaWVyIE9PQiIpO0wuc3BsaWNlKDAsMiw0MCpMWzBdK0xbMV0pfXZhciBZPTA7Zm9yKFc9MDtXPEwu''@;'; put 'put ''bGVuZ3RoO1crKyl7dmFyIHE9TFtXXTtmb3IoWSsrO3E+PTEyODtxPj49NylZKyt9dmFyIGVlPW5ldyBfKFkpLEo9ZWUubGVuZ3RoLTE7Zm9yKFc9TC5sZW5ndGgtMTtXPj0wO1ctLSlmb3IoZWVbSi0tXT0xMjcmKHE9TFtXXSk7KHE+Pj03KT4wOyllZVtKLS1dPTEyOHwxMjcmcTtyZXR1cm4g''@;'; put 'put ''dGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihlZSl9LEYucHJvdG90eXBlLl9lbmNvZGVUaW1lPWZ1bmN0aW9uKEwsSyl7dmFyIFUsVz1uZXcgRGF0ZShMKTtyZXR1cm4iZ2VudGltZSI9PT1LP1U9W08oVy5nZXRGdWxsWWVhcigpKSxPKFcuZ2V0VVRDTW9udGgoKSsxKSxPKFcuZ2V0VVRDRGF0''@;'; put 'put ''ZSgpKSxPKFcuZ2V0VVRDSG91cnMoKSksTyhXLmdldFVUQ01pbnV0ZXMoKSksTyhXLmdldFVUQ1NlY29uZHMoKSksIloiXS5qb2luKCIiKToidXRjdGltZSI9PT1LP1U9W08oVy5nZXRGdWxsWWVhcigpJTEwMCksTyhXLmdldFVUQ01vbnRoKCkrMSksTyhXLmdldFVUQ0RhdGUoKSksTyhXLmdl''@;'; put 'put ''dFVUQ0hvdXJzKCkpLE8oVy5nZXRVVENNaW51dGVzKCkpLE8oVy5nZXRVVENTZWNvbmRzKCkpLCJaIl0uam9pbigiIik6dGhpcy5yZXBvcnRlci5lcnJvcigiRW5jb2RpbmcgIitLKyIgdGltZSBpcyBub3Qgc3VwcG9ydGVkIHlldCIpLHRoaXMuX2VuY29kZVN0cihVLCJvY3RzdHIiKX0sRi5w''@;'; put 'put ''cm90b3R5cGUuX2VuY29kZU51bGw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcigiIil9LEYucHJvdG90eXBlLl9lbmNvZGVJbnQ9ZnVuY3Rpb24oTCxLKXtpZigic3RyaW5nIj09dHlwZW9mIEwpe2lmKCFLKXJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKCJT''@;'; put 'put ''dHJpbmcgaW50IG9yIGVudW0gZ2l2ZW4sIGJ1dCBubyB2YWx1ZXMgbWFwIik7aWYoIUsuaGFzT3duUHJvcGVydHkoTCkpcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoIlZhbHVlcyBtYXAgZG9lc24ndCBjb250YWluOiAiK0pTT04uc3RyaW5naWZ5KEwpKTtMPUtbTF19aWYoIm51bWJlciIh''@;'; put 'put ''PXR5cGVvZiBMJiYhXy5pc0J1ZmZlcihMKSl7dmFyIFU9TC50b0FycmF5KCk7IUwuc2lnbiYmMTI4JlVbMF0mJlUudW5zaGlmdCgwKSxMPW5ldyBfKFUpfWlmKF8uaXNCdWZmZXIoTCkpe3ZhciBXPUwubGVuZ3RoOzA9PT1MLmxlbmd0aCYmVysrO3ZhciBxPW5ldyBfKFcpO3JldHVybiBMLmNv''@;'; put 'put ''cHkocSksMD09PUwubGVuZ3RoJiYocVswXT0wKSx0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKHEpfWlmKEw8MTI4KXJldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKEwpO2lmKEw8MjU2KXJldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKFswLExdKTtXPTE7Zm9yKHZhciBZ''@;'; put 'put ''PUw7WT49MjU2O1k+Pj04KVcrKztmb3IoWT0ocT1uZXcgQXJyYXkoVykpLmxlbmd0aC0xO1k+PTA7WS0tKXFbWV09MjU1JkwsTD4+PTg7cmV0dXJuIDEyOCZxWzBdJiZxLnVuc2hpZnQoMCksdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihuZXcgXyhxKSl9LEYucHJvdG90eXBlLl9lbmNvZGVC''@;'; put 'put ''b29sPWZ1bmN0aW9uKEwpe3JldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKEw/MjU1OjApfSxGLnByb3RvdHlwZS5fdXNlPWZ1bmN0aW9uKEwsSyl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIEwmJihMPUwoSykpLEwuX2dldEVuY29kZXIoImRlciIpLnRyZWV9LEYucHJvdG90eXBl''@;'; put 'put ''Ll9za2lwRGVmYXVsdD1mdW5jdGlvbihMLEssVSl7dmFyIFksVz10aGlzLl9iYXNlU3RhdGU7aWYobnVsbD09PVcuZGVmYXVsdClyZXR1cm4hMTt2YXIgcT1MLmpvaW4oKTtpZih2b2lkIDA9PT1XLmRlZmF1bHRCdWZmZXImJihXLmRlZmF1bHRCdWZmZXI9dGhpcy5fZW5jb2RlVmFsdWUoVy5k''@;'; put 'put ''ZWZhdWx0LEssVSkuam9pbigpKSxxLmxlbmd0aCE9PVcuZGVmYXVsdEJ1ZmZlci5sZW5ndGgpcmV0dXJuITE7Zm9yKFk9MDtZPHEubGVuZ3RoO1krKylpZihxW1ldIT09Vy5kZWZhdWx0QnVmZmVyW1ldKXJldHVybiExO3JldHVybiEwfX0sNjU3OToodWUsWCx5KT0+e3ZhciBJPVg7SS5kZXI9''@;'; put 'put ''eSg2OTg0KSxJLnBlbT15KDI4ODMpfSwyODgzOih1ZSxYLHkpPT57dmFyIEk9eSg1NzE3KSxfPXkoNjk4NCk7ZnVuY3Rpb24gZyhCKXtfLmNhbGwodGhpcyxCKSx0aGlzLmVuYz0icGVtIn1JKGcsXyksdWUuZXhwb3J0cz1nLGcucHJvdG90eXBlLmVuY29kZT1mdW5jdGlvbih3LFApe2Zvcih2''@;'; put 'put ''YXIgTz1fLnByb3RvdHlwZS5lbmNvZGUuY2FsbCh0aGlzLHcpLnRvU3RyaW5nKCJiYXNlNjQiKSx6PVsiLS0tLS1CRUdJTiAiK1AubGFiZWwrIi0tLS0tIl0sTj0wO048Ty5sZW5ndGg7Tis9NjQpei5wdXNoKE8uc2xpY2UoTixOKzY0KSk7cmV0dXJuIHoucHVzaCgiLS0tLS1FTkQgIitQLmxh''@;'; put 'put ''YmVsKyItLS0tLSIpLHouam9pbigiXG4iKX19LDQ1OTA6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSxfKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZyhWLHApe2lmKCFWKXRocm93IG5ldyBFcnJvcihwfHwiQXNzZXJ0aW9uIGZhaWxlZCIpfWZ1bmN0aW9uIEIoVixwKXtWLnN1cGVyXz1w''@;'; put 'put ''O3ZhciBiPWZ1bmN0aW9uKCl7fTtiLnByb3RvdHlwZT1wLnByb3RvdHlwZSxWLnByb3RvdHlwZT1uZXcgYixWLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1WfWZ1bmN0aW9uIHcoVixwLGIpe2lmKHcuaXNCTihWKSlyZXR1cm4gVjt0aGlzLm5lZ2F0aXZlPTAsdGhpcy53b3Jkcz1udWxsLHRoaXMu''@;'; put 'put ''bGVuZ3RoPTAsdGhpcy5yZWQ9bnVsbCxudWxsIT09ViYmKCgibGUiPT09cHx8ImJlIj09PXApJiYoYj1wLHA9MTApLHRoaXMuX2luaXQoVnx8MCxwfHwxMCxifHwiYmUiKSl9dmFyIFA7Im9iamVjdCI9PXR5cGVvZiBJP0kuZXhwb3J0cz13Ol8uQk49dyx3LkJOPXcsdy53b3JkU2l6ZT0yNjt0''@;'; put 'put ''cnl7UD10eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIHdpbmRvdy5CdWZmZXI8InUiP3dpbmRvdy5CdWZmZXI6eSg5NTApLkJ1ZmZlcn1jYXRjaHt9ZnVuY3Rpb24gRihWLHApe3ZhciBiPVYuY2hhckNvZGVBdChwKTtyZXR1cm4gYj49NjUmJmI8PTcwP2ItNTU6Yj49OTcmJmI8PTEwMj9iLTg3''@;'; put 'put ''OmItNDgmMTV9ZnVuY3Rpb24gTyhWLHAsYil7dmFyIHg9RihWLGIpO3JldHVybiBiLTE+PXAmJih4fD1GKFYsYi0xKTw8NCkseH1mdW5jdGlvbiB6KFYscCxiLHgpe2Zvcih2YXIgQz0wLFQ9TWF0aC5taW4oVi5sZW5ndGgsYiksSD1wO0g8VDtIKyspe3ZhciBqPVYuY2hhckNvZGVBdChIKS00''@;'; put 'put ''ODtDKj14LEMrPWo+PTQ5P2otNDkrMTA6aj49MTc/ai0xNysxMDpqfXJldHVybiBDfXcuaXNCTj1mdW5jdGlvbihwKXtyZXR1cm4gcCBpbnN0YW5jZW9mIHd8fG51bGwhPT1wJiYib2JqZWN0Ij09dHlwZW9mIHAmJnAuY29uc3RydWN0b3Iud29yZFNpemU9PT13LndvcmRTaXplJiZBcnJheS5p''@;'; put 'put ''c0FycmF5KHAud29yZHMpfSx3Lm1heD1mdW5jdGlvbihwLGIpe3JldHVybiBwLmNtcChiKT4wP3A6Yn0sdy5taW49ZnVuY3Rpb24ocCxiKXtyZXR1cm4gcC5jbXAoYik8MD9wOmJ9LHcucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKHAsYix4KXtpZigibnVtYmVyIj09dHlwZW9mIHApcmV0dXJu''@;'; put 'put ''IHRoaXMuX2luaXROdW1iZXIocCxiLHgpO2lmKCJvYmplY3QiPT10eXBlb2YgcClyZXR1cm4gdGhpcy5faW5pdEFycmF5KHAsYix4KTsiaGV4Ij09PWImJihiPTE2KSxnKGI9PT0oMHxiKSYmYj49MiYmYjw9MzYpO3ZhciBDPTA7Ii0iPT09KHA9cC50b1N0cmluZygpLnJlcGxhY2UoL1xzKy9n''@;'; put 'put ''LCIiKSlbMF0mJihDKyssdGhpcy5uZWdhdGl2ZT0xKSxDPHAubGVuZ3RoJiYoMTY9PT1iP3RoaXMuX3BhcnNlSGV4KHAsQyx4KToodGhpcy5fcGFyc2VCYXNlKHAsYixDKSwibGUiPT09eCYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLGIseCkpKX0sdy5wcm90b3R5cGUuX2luaXRO''@;'; put 'put ''dW1iZXI9ZnVuY3Rpb24ocCxiLHgpe3A8MCYmKHRoaXMubmVnYXRpdmU9MSxwPS1wKSxwPDY3MTA4ODY0Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZwXSx0aGlzLmxlbmd0aD0xKTpwPDQ1MDM1OTk2MjczNzA0OTY/KHRoaXMud29yZHM9WzY3MTA4ODYzJnAscC82NzEwODg2NCY2NzEwODg2M10s''@;'; put 'put ''dGhpcy5sZW5ndGg9Mik6KGcocDw5MDA3MTk5MjU0NzQwOTkyKSx0aGlzLndvcmRzPVs2NzEwODg2MyZwLHAvNjcxMDg4NjQmNjcxMDg4NjMsMV0sdGhpcy5sZW5ndGg9MyksImxlIj09PXgmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxiLHgpfSx3LnByb3RvdHlwZS5faW5pdEFy''@;'; put 'put ''cmF5PWZ1bmN0aW9uKHAsYix4KXtpZihnKCJudW1iZXIiPT10eXBlb2YgcC5sZW5ndGgpLHAubGVuZ3RoPD0wKXJldHVybiB0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xLHRoaXM7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKHAubGVuZ3RoLzMpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMu''@;'; put 'put ''bGVuZ3RoKTtmb3IodmFyIEM9MDtDPHRoaXMubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPTA7dmFyIFQsSCxqPTA7aWYoImJlIj09PXgpZm9yKEM9cC5sZW5ndGgtMSxUPTA7Qz49MDtDLT0zKXRoaXMud29yZHNbVF18PShIPXBbQ118cFtDLTFdPDw4fHBbQy0yXTw8MTYpPDxqJjY3MTA4ODYz''@;'; put 'put ''LHRoaXMud29yZHNbVCsxXT1IPj4+MjYtaiY2NzEwODg2Mywoais9MjQpPj0yNiYmKGotPTI2LFQrKyk7ZWxzZSBpZigibGUiPT09eClmb3IoQz0wLFQ9MDtDPHAubGVuZ3RoO0MrPTMpdGhpcy53b3Jkc1tUXXw9KEg9cFtDXXxwW0MrMV08PDh8cFtDKzJdPDwxNik8PGomNjcxMDg4NjMsdGhp''@;'; put 'put ''cy53b3Jkc1tUKzFdPUg+Pj4yNi1qJjY3MTA4ODYzLChqKz0yNCk+PTI2JiYoai09MjYsVCsrKTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5fcGFyc2VIZXg9ZnVuY3Rpb24ocCxiLHgpe3RoaXMubGVuZ3RoPU1hdGguY2VpbCgocC5sZW5ndGgtYikvNiksdGhpcy53b3Jkcz1u''@;'; put 'put ''ZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgQz0wO0M8dGhpcy5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109MDt2YXIgaixUPTAsSD0wO2lmKCJiZSI9PT14KWZvcihDPXAubGVuZ3RoLTE7Qz49YjtDLT0yKWo9TyhwLGIsQyk8PFQsdGhpcy53b3Jkc1tIXXw9NjcxMDg4NjMmaixUPj0x''@;'; put 'put ''OD8oVC09MTgsdGhpcy53b3Jkc1tIKz0xXXw9aj4+PjI2KTpUKz04O2Vsc2UgZm9yKEM9KHAubGVuZ3RoLWIpJTI9PTA/YisxOmI7QzxwLmxlbmd0aDtDKz0yKWo9TyhwLGIsQyk8PFQsdGhpcy53b3Jkc1tIXXw9NjcxMDg4NjMmaixUPj0xOD8oVC09MTgsdGhpcy53b3Jkc1tIKz0xXXw9aj4+''@;'; put 'put ''PjI2KTpUKz04O3RoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuX3BhcnNlQmFzZT1mdW5jdGlvbihwLGIseCl7dGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MTtmb3IodmFyIEM9MCxUPTE7VDw9NjcxMDg4NjM7VCo9YilDKys7Qy0tLFQ9VC9ifDA7Zm9yKHZhciBIPXAubGVuZ3RoLXgsaj1I''@;'; put 'put ''JUMsRT1NYXRoLm1pbihILEgtaikreCxtPTAsQT14O0E8RTtBKz1DKW09eihwLEEsQStDLGIpLHRoaXMuaW11bG4oVCksdGhpcy53b3Jkc1swXSttPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPW06dGhpcy5faWFkZG4obSk7aWYoMCE9PWope3ZhciBhZT0xO2ZvcihtPXoocCxBLHAubGVuZ3Ro''@;'; put 'put ''LGIpLEE9MDtBPGo7QSsrKWFlKj1iO3RoaXMuaW11bG4oYWUpLHRoaXMud29yZHNbMF0rbTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1tOnRoaXMuX2lhZGRuKG0pfXRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuY29weT1mdW5jdGlvbihwKXtwLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0''@;'; put 'put ''aCk7Zm9yKHZhciBiPTA7Yjx0aGlzLmxlbmd0aDtiKyspcC53b3Jkc1tiXT10aGlzLndvcmRzW2JdO3AubGVuZ3RoPXRoaXMubGVuZ3RoLHAubmVnYXRpdmU9dGhpcy5uZWdhdGl2ZSxwLnJlZD10aGlzLnJlZH0sdy5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgcD1uZXcgdyhudWxs''@;'; put 'put ''KTtyZXR1cm4gdGhpcy5jb3B5KHApLHB9LHcucHJvdG90eXBlLl9leHBhbmQ9ZnVuY3Rpb24ocCl7Zm9yKDt0aGlzLmxlbmd0aDxwOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7cmV0dXJuIHRoaXN9LHcucHJvdG90eXBlLnN0cmlwPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmxlbmd0aD4x''@;'; put 'put ''JiYwPT09dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXTspdGhpcy5sZW5ndGgtLTtyZXR1cm4gdGhpcy5fbm9ybVNpZ24oKX0sdy5wcm90b3R5cGUuX25vcm1TaWduPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF0mJih0aGlzLm5lZ2F0aXZlPTAp''@;'; put 'put ''LHRoaXN9LHcucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5yZWQ/IjxCTi1SOiAiOiI8Qk46ICIpK3RoaXMudG9TdHJpbmcoMTYpKyI+In07dmFyIE49WyIiLCIwIiwiMDAiLCIwMDAiLCIwMDAwIiwiMDAwMDAiLCIwMDAwMDAiLCIwMDAwMDAwIiwiMDAwMDAwMDAi''@;'; put 'put ''LCIwMDAwMDAwMDAiLCIwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAi''@;'; put 'put ''LCIwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAw''@;'; put 'put ''MDAwMDAwMDAwIl0sTD1bMCwwLDI1LDE2LDEyLDExLDEwLDksOCw4LDcsNyw3LDcsNiw2LDYsNiw2LDYsNiw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1XSxLPVswLDAsMzM1NTQ0MzIsNDMwNDY3MjEsMTY3NzcyMTYsNDg4MjgxMjUsNjA0NjYxNzYsNDAzNTM2MDcsMTY3NzcyMTYs''@;'; put 'put ''NDMwNDY3MjEsMWU3LDE5NDg3MTcxLDM1ODMxODA4LDYyNzQ4NTE3LDc1Mjk1MzYsMTEzOTA2MjUsMTY3NzcyMTYsMjQxMzc1NjksMzQwMTIyMjQsNDcwNDU4ODEsNjRlNiw0MDg0MTAxLDUxNTM2MzIsNjQzNjM0Myw3OTYyNjI0LDk3NjU2MjUsMTE4ODEzNzYsMTQzNDg5MDcsMTcyMTAzNjgs''@;'; put 'put ''MjA1MTExNDksMjQzZTUsMjg2MjkxNTEsMzM1NTQ0MzIsMzkxMzUzOTMsNDU0MzU0MjQsNTI1MjE4NzUsNjA0NjYxNzZdO2Z1bmN0aW9uIFcoVixwLGIpe2IubmVnYXRpdmU9cC5uZWdhdGl2ZV5WLm5lZ2F0aXZlO3ZhciB4PVYubGVuZ3RoK3AubGVuZ3RofDA7Yi5sZW5ndGg9eCx4PXgtMXww''@;'; put 'put ''O3ZhciBDPTB8Vi53b3Jkc1swXSxUPTB8cC53b3Jkc1swXSxIPUMqVCxFPUgvNjcxMDg4NjR8MDtiLndvcmRzWzBdPTY3MTA4ODYzJkg7Zm9yKHZhciBtPTE7bTx4O20rKyl7Zm9yKHZhciBBPUU+Pj4yNixhZT02NzEwODg2MyZFLHRlPU1hdGgubWluKG0scC5sZW5ndGgtMSksc2U9TWF0aC5t''@;'; put 'put ''YXgoMCxtLVYubGVuZ3RoKzEpO3NlPD10ZTtzZSsrKUErPShIPShDPTB8Vi53b3Jkc1ttLXNlfDBdKSooVD0wfHAud29yZHNbc2VdKSthZSkvNjcxMDg4NjR8MCxhZT02NzEwODg2MyZIO2Iud29yZHNbbV09MHxhZSxFPTB8QX1yZXR1cm4gMCE9PUU/Yi53b3Jkc1ttXT0wfEU6Yi5sZW5ndGgt''@;'; put 'put ''LSxiLnN0cmlwKCl9dy5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24ocCxiKXt2YXIgeDtpZihiPTB8Ynx8MSwxNj09PShwPXB8fDEwKXx8ImhleCI9PT1wKXt4PSIiO2Zvcih2YXIgQz0wLFQ9MCxIPTA7SDx0aGlzLmxlbmd0aDtIKyspe3ZhciBqPXRoaXMud29yZHNbSF0sRT0oMTY3Nzcy''@;'; put 'put ''MTUmKGo8PEN8VCkpLnRvU3RyaW5nKDE2KTtUPWo+Pj4yNC1DJjE2Nzc3MjE1LChDKz0yKT49MjYmJihDLT0yNixILS0pLHg9MCE9PVR8fEghPT10aGlzLmxlbmd0aC0xP05bNi1FLmxlbmd0aF0rRSt4OkUreH1mb3IoMCE9PVQmJih4PVQudG9TdHJpbmcoMTYpK3gpO3gubGVuZ3RoJWIhPTA7''@;'; put 'put ''KXg9IjAiK3g7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoeD0iLSIreCkseH1pZihwPT09KDB8cCkmJnA+PTImJnA8PTM2KXt2YXIgbT1MW3BdLEE9S1twXTt4PSIiO3ZhciBhZT10aGlzLmNsb25lKCk7Zm9yKGFlLm5lZ2F0aXZlPTA7IWFlLmlzWmVybygpOyl7dmFyIHRlPWFlLm1vZG4o''@;'; put 'put ''QSkudG9TdHJpbmcocCk7eD0oYWU9YWUuaWRpdm4oQSkpLmlzWmVybygpP3RlK3g6TlttLXRlLmxlbmd0aF0rdGUreH1mb3IodGhpcy5pc1plcm8oKSYmKHg9IjAiK3gpO3gubGVuZ3RoJWIhPTA7KXg9IjAiK3g7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoeD0iLSIreCkseH1nKCExLCJC''@;'; put 'put ''YXNlIHNob3VsZCBiZSBiZXR3ZWVuIDIgYW5kIDM2Iil9LHcucHJvdG90eXBlLnRvTnVtYmVyPWZ1bmN0aW9uKCl7dmFyIHA9dGhpcy53b3Jkc1swXTtyZXR1cm4gMj09PXRoaXMubGVuZ3RoP3ArPTY3MTA4ODY0KnRoaXMud29yZHNbMV06Mz09PXRoaXMubGVuZ3RoJiYxPT09dGhpcy53b3Jk''@;'; put 'put ''c1syXT9wKz00NTAzNTk5NjI3MzcwNDk2KzY3MTA4ODY0KnRoaXMud29yZHNbMV06dGhpcy5sZW5ndGg+MiYmZyghMSwiTnVtYmVyIGNhbiBvbmx5IHNhZmVseSBzdG9yZSB1cCB0byA1MyBiaXRzIiksMCE9PXRoaXMubmVnYXRpdmU/LXA6cH0sdy5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9u''@;'; put 'put ''KCl7cmV0dXJuIHRoaXMudG9TdHJpbmcoMTYpfSx3LnByb3RvdHlwZS50b0J1ZmZlcj1mdW5jdGlvbihwLGIpe3JldHVybiBnKHR5cGVvZiBQPCJ1IiksdGhpcy50b0FycmF5TGlrZShQLHAsYil9LHcucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gdGhpcy50b0FycmF5''@;'; put 'put ''TGlrZShBcnJheSxwLGIpfSx3LnByb3RvdHlwZS50b0FycmF5TGlrZT1mdW5jdGlvbihwLGIseCl7dmFyIEM9dGhpcy5ieXRlTGVuZ3RoKCksVD14fHxNYXRoLm1heCgxLEMpO2coQzw9VCwiYnl0ZSBhcnJheSBsb25nZXIgdGhhbiBkZXNpcmVkIGxlbmd0aCIpLGcoVD4wLCJSZXF1ZXN0ZWQg''@;'; put 'put ''YXJyYXkgbGVuZ3RoIDw9IDAiKSx0aGlzLnN0cmlwKCk7dmFyIEUsbSxIPSJsZSI9PT1iLGo9bmV3IHAoVCksQT10aGlzLmNsb25lKCk7aWYoSCl7Zm9yKG09MDshQS5pc1plcm8oKTttKyspRT1BLmFuZGxuKDI1NSksQS5pdXNocm4oOCksalttXT1FO2Zvcig7bTxUO20rKylqW21dPTB9ZWxz''@;'; put 'put ''ZXtmb3IobT0wO208VC1DO20rKylqW21dPTA7Zm9yKG09MDshQS5pc1plcm8oKTttKyspRT1BLmFuZGxuKDI1NSksQS5pdXNocm4oOCksaltULW0tMV09RX1yZXR1cm4gan0sdy5wcm90b3R5cGUuX2NvdW50Qml0cz1NYXRoLmNsejMyP2Z1bmN0aW9uKHApe3JldHVybiAzMi1NYXRoLmNsejMy''@;'; put 'put ''KHApfTpmdW5jdGlvbihwKXt2YXIgYj1wLHg9MDtyZXR1cm4gYj49NDA5NiYmKHgrPTEzLGI+Pj49MTMpLGI+PTY0JiYoeCs9NyxiPj4+PTcpLGI+PTgmJih4Kz00LGI+Pj49NCksYj49MiYmKHgrPTIsYj4+Pj0yKSx4K2J9LHcucHJvdG90eXBlLl96ZXJvQml0cz1mdW5jdGlvbihwKXtpZigw''@;'; put 'put ''PT09cClyZXR1cm4gMjY7dmFyIGI9cCx4PTA7cmV0dXJuIDgxOTEmYnx8KHgrPTEzLGI+Pj49MTMpLDEyNyZifHwoeCs9NyxiPj4+PTcpLDE1JmJ8fCh4Kz00LGI+Pj49NCksMyZifHwoeCs9MixiPj4+PTIpLDEmYnx8eCsrLHh9LHcucHJvdG90eXBlLmJpdExlbmd0aD1mdW5jdGlvbigpe3Zh''@;'; put 'put ''ciBiPXRoaXMuX2NvdW50Qml0cyh0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdKTtyZXR1cm4gMjYqKHRoaXMubGVuZ3RoLTEpK2J9LHcucHJvdG90eXBlLnplcm9CaXRzPWZ1bmN0aW9uKCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gMDtmb3IodmFyIHA9MCxiPTA7Yjx0aGlzLmxlbmd0aDti''@;'; put 'put ''Kyspe3ZhciB4PXRoaXMuX3plcm9CaXRzKHRoaXMud29yZHNbYl0pO2lmKHArPXgsMjYhPT14KWJyZWFrfXJldHVybiBwfSx3LnByb3RvdHlwZS5ieXRlTGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguY2VpbCh0aGlzLmJpdExlbmd0aCgpLzgpfSx3LnByb3RvdHlwZS50b1R3b3M9ZnVu''@;'; put 'put ''Y3Rpb24ocCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlP3RoaXMuYWJzKCkuaW5vdG4ocCkuaWFkZG4oMSk6dGhpcy5jbG9uZSgpfSx3LnByb3RvdHlwZS5mcm9tVHdvcz1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy50ZXN0bihwLTEpP3RoaXMubm90bihwKS5pYWRkbigxKS5pbmVnKCk6dGhp''@;'; put 'put ''cy5jbG9uZSgpfSx3LnByb3RvdHlwZS5pc05lZz1mdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZX0sdy5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbmVnKCl9LHcucHJvdG90eXBlLmluZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1pl''@;'; put 'put ''cm8oKXx8KHRoaXMubmVnYXRpdmVePTEpLHRoaXN9LHcucHJvdG90eXBlLml1b3I9ZnVuY3Rpb24ocCl7Zm9yKDt0aGlzLmxlbmd0aDxwLmxlbmd0aDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO2Zvcih2YXIgYj0wO2I8cC5sZW5ndGg7YisrKXRoaXMud29yZHNbYl09dGhpcy53b3Jk''@;'; put 'put ''c1tiXXxwLndvcmRzW2JdO3JldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlvcj1mdW5jdGlvbihwKXtyZXR1cm4gZyghKHRoaXMubmVnYXRpdmV8cC5uZWdhdGl2ZSkpLHRoaXMuaXVvcihwKX0sdy5wcm90b3R5cGUub3I9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAu''@;'; put 'put ''bGVuZ3RoP3RoaXMuY2xvbmUoKS5pb3IocCk6cC5jbG9uZSgpLmlvcih0aGlzKX0sdy5wcm90b3R5cGUudW9yPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaXVvcihwKTpwLmNsb25lKCkuaXVvcih0aGlzKX0sdy5wcm90b3R5cGUuaXVhbmQ9''@;'; put 'put ''ZnVuY3Rpb24ocCl7dmFyIGI7Yj10aGlzLmxlbmd0aD5wLmxlbmd0aD9wOnRoaXM7Zm9yKHZhciB4PTA7eDxiLmxlbmd0aDt4KyspdGhpcy53b3Jkc1t4XT10aGlzLndvcmRzW3hdJnAud29yZHNbeF07cmV0dXJuIHRoaXMubGVuZ3RoPWIubGVuZ3RoLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5''@;'; put 'put ''cGUuaWFuZD1mdW5jdGlvbihwKXtyZXR1cm4gZyghKHRoaXMubmVnYXRpdmV8cC5uZWdhdGl2ZSkpLHRoaXMuaXVhbmQocCl9LHcucHJvdG90eXBlLmFuZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhbmQocCk6cC5jbG9uZSgpLmlhbmQo''@;'; put 'put ''dGhpcyl9LHcucHJvdG90eXBlLnVhbmQ9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdWFuZChwKTpwLmNsb25lKCkuaXVhbmQodGhpcyl9LHcucHJvdG90eXBlLml1eG9yPWZ1bmN0aW9uKHApe3ZhciBiLHg7dGhpcy5sZW5ndGg+cC5sZW5n''@;'; put 'put ''dGg/KGI9dGhpcyx4PXApOihiPXAseD10aGlzKTtmb3IodmFyIEM9MDtDPHgubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPWIud29yZHNbQ11eeC53b3Jkc1tDXTtpZih0aGlzIT09Yilmb3IoO0M8Yi5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109Yi53b3Jkc1tDXTtyZXR1cm4gdGhpcy5sZW5n''@;'; put 'put ''dGg9Yi5sZW5ndGgsdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5peG9yPWZ1bmN0aW9uKHApe3JldHVybiBnKCEodGhpcy5uZWdhdGl2ZXxwLm5lZ2F0aXZlKSksdGhpcy5pdXhvcihwKX0sdy5wcm90b3R5cGUueG9yPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90''@;'; put 'put ''aGlzLmNsb25lKCkuaXhvcihwKTpwLmNsb25lKCkuaXhvcih0aGlzKX0sdy5wcm90b3R5cGUudXhvcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLml1eG9yKHApOnAuY2xvbmUoKS5pdXhvcih0aGlzKX0sdy5wcm90b3R5cGUuaW5vdG49ZnVu''@;'; put 'put ''Y3Rpb24ocCl7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApO3ZhciBiPTB8TWF0aC5jZWlsKHAvMjYpLHg9cCUyNjt0aGlzLl9leHBhbmQoYikseD4wJiZiLS07Zm9yKHZhciBDPTA7QzxiO0MrKyl0aGlzLndvcmRzW0NdPTY3MTA4ODYzJn50aGlzLndvcmRzW0NdO3JldHVybiB4PjAmJih0''@;'; put 'put ''aGlzLndvcmRzW0NdPX50aGlzLndvcmRzW0NdJjY3MTA4ODYzPj4yNi14KSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLm5vdG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbm90bihwKX0sdy5wcm90b3R5cGUuc2V0bj1mdW5jdGlvbihwLGIpe2coIm51bWJlciI9PXR5cGVv''@;'; put 'put ''ZiBwJiZwPj0wKTt2YXIgeD1wLzI2fDAsQz1wJTI2O3JldHVybiB0aGlzLl9leHBhbmQoeCsxKSx0aGlzLndvcmRzW3hdPWI/dGhpcy53b3Jkc1t4XXwxPDxDOnRoaXMud29yZHNbeF0mfigxPDxDKSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24ocCl7dmFyIGIseCxD''@;'; put 'put ''O2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09cC5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLGI9dGhpcy5pc3ViKHApLHRoaXMubmVnYXRpdmVePTEsdGhpcy5fbm9ybVNpZ24oKTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXAubmVnYXRpdmUpcmV0dXJuIHAubmVnYXRpdmU9''@;'; put 'put ''MCxiPXRoaXMuaXN1YihwKSxwLm5lZ2F0aXZlPTEsYi5fbm9ybVNpZ24oKTt0aGlzLmxlbmd0aD5wLmxlbmd0aD8oeD10aGlzLEM9cCk6KHg9cCxDPXRoaXMpO2Zvcih2YXIgVD0wLEg9MDtIPEMubGVuZ3RoO0grKyl0aGlzLndvcmRzW0hdPTY3MTA4ODYzJihiPSgwfHgud29yZHNbSF0pKygw''@;'; put 'put ''fEMud29yZHNbSF0pK1QpLFQ9Yj4+PjI2O2Zvcig7MCE9PVQmJkg8eC5sZW5ndGg7SCsrKXRoaXMud29yZHNbSF09NjcxMDg4NjMmKGI9KDB8eC53b3Jkc1tIXSkrVCksVD1iPj4+MjY7aWYodGhpcy5sZW5ndGg9eC5sZW5ndGgsMCE9PVQpdGhpcy53b3Jkc1t0aGlzLmxlbmd0aF09VCx0aGlz''@;'; put 'put ''Lmxlbmd0aCsrO2Vsc2UgaWYoeCE9PXRoaXMpZm9yKDtIPHgubGVuZ3RoO0grKyl0aGlzLndvcmRzW0hdPXgud29yZHNbSF07cmV0dXJuIHRoaXN9LHcucHJvdG90eXBlLmFkZD1mdW5jdGlvbihwKXt2YXIgYjtyZXR1cm4gMCE9PXAubmVnYXRpdmUmJjA9PT10aGlzLm5lZ2F0aXZlPyhwLm5l''@;'; put 'put ''Z2F0aXZlPTAsYj10aGlzLnN1YihwKSxwLm5lZ2F0aXZlXj0xLGIpOjA9PT1wLm5lZ2F0aXZlJiYwIT09dGhpcy5uZWdhdGl2ZT8odGhpcy5uZWdhdGl2ZT0wLGI9cC5zdWIodGhpcyksdGhpcy5uZWdhdGl2ZT0xLGIpOnRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYWRkKHAp''@;'; put 'put ''OnAuY2xvbmUoKS5pYWRkKHRoaXMpfSx3LnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKHApe2lmKDAhPT1wLm5lZ2F0aXZlKXtwLm5lZ2F0aXZlPTA7dmFyIGI9dGhpcy5pYWRkKHApO3JldHVybiBwLm5lZ2F0aXZlPTEsYi5fbm9ybVNpZ24oKX1pZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4g''@;'; put 'put ''dGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZChwKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fbm9ybVNpZ24oKTt2YXIgQyxULHg9dGhpcy5jbXAocCk7aWYoMD09PXgpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmxlbmd0aD0xLHRoaXMud29yZHNbMF09MCx0aGlzO3g+MD8oQz10aGlzLFQ9''@;'; put 'put ''cCk6KEM9cCxUPXRoaXMpO2Zvcih2YXIgSD0wLGo9MDtqPFQubGVuZ3RoO2orKylIPShiPSgwfEMud29yZHNbal0pLSgwfFQud29yZHNbal0pK0gpPj4yNix0aGlzLndvcmRzW2pdPTY3MTA4ODYzJmI7Zm9yKDswIT09SCYmajxDLmxlbmd0aDtqKyspSD0oYj0oMHxDLndvcmRzW2pdKStIKT4+''@;'; put 'put ''MjYsdGhpcy53b3Jkc1tqXT02NzEwODg2MyZiO2lmKDA9PT1IJiZqPEMubGVuZ3RoJiZDIT09dGhpcylmb3IoO2o8Qy5sZW5ndGg7aisrKXRoaXMud29yZHNbal09Qy53b3Jkc1tqXTtyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsaiksQyE9PXRoaXMmJih0aGlzLm5l''@;'; put 'put ''Z2F0aXZlPTEpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXN1YihwKX07dmFyIFk9ZnVuY3Rpb24ocCxiLHgpe3ZhciBFLG0sQSxDPXAud29yZHMsVD1iLndvcmRzLEg9eC53b3JkcyxqPTAsYWU9MHxDWzBdLHRlPTgxOTEm''@;'; put 'put ''YWUsc2U9YWU+Pj4xMyx3ZT0wfENbMV0sVWU9ODE5MSZ3ZSxKZT13ZT4+PjEzLG90PTB8Q1syXSx4ZT04MTkxJm90LHZlPW90Pj4+MTMsWGU9MHxDWzNdLHplPTgxOTEmWGUsRGU9WGU+Pj4xMyxGZT0wfENbNF0sT2U9ODE5MSZGZSxJZT1GZT4+PjEzLFZlPTB8Q1s1XSxrZT04MTkxJlZlLEFl''@;'; put 'put ''PVZlPj4+MTMsX3Q9MHxDWzZdLG50PTgxOTEmX3QsUWU9X3Q+Pj4xMyx1bj0wfENbN10seXQ9ODE5MSZ1bixNdD11bj4+PjEzLER0PTB8Q1s4XSxpdD04MTkxJkR0LCRlPUR0Pj4+MTMsdHQ9MHxDWzldLEhlPTgxOTEmdHQsdXQ9dHQ+Pj4xMyxxdD0wfFRbMF0sUnQ9ODE5MSZxdCxQdD1xdD4+''@;'; put 'put ''PjEzLGNpPTB8VFsxXSxRdD04MTkxJmNpLHNuPWNpPj4+MTMsUmk9MHxUWzJdLGhuPTgxOTEmUmksZnQ9Umk+Pj4xMyxPcj0wfFRbM10sV3Q9ODE5MSZPcixBdD1Pcj4+PjEzLFJuPTB8VFs0XSxzdD04MTkxJlJuLFV0PVJuPj4+MTMscmk9MHxUWzVdLFdlPTgxOTEmcmksVHQ9cmk+Pj4xMyxu''@;'; put 'put ''cj0wfFRbNl0saHQ9ODE5MSZucix4dD1ucj4+PjEzLGpuPTB8VFs3XSxybj04MTkxJmpuLHp0PWpuPj4+MTMsaGk9MHxUWzhdLGNuPTgxOTEmaGksZm49aGk+Pj4xMyxJaT0wfFRbOV0sWHQ9ODE5MSZJaSxlbj1JaT4+PjEzO3gubmVnYXRpdmU9cC5uZWdhdGl2ZV5iLm5lZ2F0aXZlLHgubGVu''@;'; put 'put ''Z3RoPTE5O3ZhciB1YT0oaisoRT1NYXRoLmltdWwodGUsUnQpKXwwKSsoKDgxOTEmKG09KG09TWF0aC5pbXVsKHRlLFB0KSkrTWF0aC5pbXVsKHNlLFJ0KXwwKSk8PDEzKXwwO2o9KChBPU1hdGguaW11bChzZSxQdCkpKyhtPj4+MTMpfDApKyh1YT4+PjI2KXwwLHVhJj02NzEwODg2MyxFPU1h''@;'; put 'put ''dGguaW11bChVZSxSdCksbT0obT1NYXRoLmltdWwoVWUsUHQpKStNYXRoLmltdWwoSmUsUnQpfDAsQT1NYXRoLmltdWwoSmUsUHQpO3ZhciBFaT0oaisoRT1FK01hdGguaW11bCh0ZSxRdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLHNuKXwwKStNYXRoLmltdWwoc2UsUXQp''@;'; put 'put ''fDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2Usc24pfDApKyhtPj4+MTMpfDApKyhFaT4+PjI2KXwwLEVpJj02NzEwODg2MyxFPU1hdGguaW11bCh4ZSxSdCksbT0obT1NYXRoLmltdWwoeGUsUHQpKStNYXRoLmltdWwodmUsUnQpfDAsQT1NYXRoLmltdWwodmUsUHQpLEU9RStNYXRo''@;'; put 'put ''LmltdWwoVWUsUXQpfDAsbT0obT1tK01hdGguaW11bChVZSxzbil8MCkrTWF0aC5pbXVsKEplLFF0KXwwLEE9QStNYXRoLmltdWwoSmUsc24pfDA7dmFyIHZyPShqKyhFPUUrTWF0aC5pbXVsKHRlLGhuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsZnQpfDApK01hdGguaW11''@;'; put 'put ''bChzZSxobil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxmdCl8MCkrKG0+Pj4xMyl8MCkrKHZyPj4+MjYpfDAsdnImPTY3MTA4ODYzLEU9TWF0aC5pbXVsKHplLFJ0KSxtPShtPU1hdGguaW11bCh6ZSxQdCkpK01hdGguaW11bChEZSxSdCl8MCxBPU1hdGguaW11bChEZSxQdCks''@;'; put 'put ''RT1FK01hdGguaW11bCh4ZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKHhlLHNuKXwwKStNYXRoLmltdWwodmUsUXQpfDAsQT1BK01hdGguaW11bCh2ZSxzbil8MCxFPUUrTWF0aC5pbXVsKFVlLGhuKXwwLG09KG09bStNYXRoLmltdWwoVWUsZnQpfDApK01hdGguaW11bChKZSxobil8MCxBPUEr''@;'; put 'put ''TWF0aC5pbXVsKEplLGZ0KXwwO3ZhciBXbj0oaisoRT1FK01hdGguaW11bCh0ZSxXdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLEF0KXwwKStNYXRoLmltdWwoc2UsV3QpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsQXQpfDApKyhtPj4+MTMpfDApKyhXbj4+''@;'; put 'put ''PjI2KXwwLFduJj02NzEwODg2MyxFPU1hdGguaW11bChPZSxSdCksbT0obT1NYXRoLmltdWwoT2UsUHQpKStNYXRoLmltdWwoSWUsUnQpfDAsQT1NYXRoLmltdWwoSWUsUHQpLEU9RStNYXRoLmltdWwoemUsUXQpfDAsbT0obT1tK01hdGguaW11bCh6ZSxzbil8MCkrTWF0aC5pbXVsKERlLFF0''@;'; put 'put ''KXwwLEE9QStNYXRoLmltdWwoRGUsc24pfDAsRT1FK01hdGguaW11bCh4ZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKHhlLGZ0KXwwKStNYXRoLmltdWwodmUsaG4pfDAsQT1BK01hdGguaW11bCh2ZSxmdCl8MCxFPUUrTWF0aC5pbXVsKFVlLFd0KXwwLG09KG09bStNYXRoLmltdWwoVWUsQXQp''@;'; put 'put ''fDApK01hdGguaW11bChKZSxXdCl8MCxBPUErTWF0aC5pbXVsKEplLEF0KXwwO3ZhciAkaT0oaisoRT1FK01hdGguaW11bCh0ZSxzdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLFV0KXwwKStNYXRoLmltdWwoc2Usc3QpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwo''@;'; put 'put ''c2UsVXQpfDApKyhtPj4+MTMpfDApKygkaT4+PjI2KXwwLCRpJj02NzEwODg2MyxFPU1hdGguaW11bChrZSxSdCksbT0obT1NYXRoLmltdWwoa2UsUHQpKStNYXRoLmltdWwoQWUsUnQpfDAsQT1NYXRoLmltdWwoQWUsUHQpLEU9RStNYXRoLmltdWwoT2UsUXQpfDAsbT0obT1tK01hdGguaW11''@;'; put 'put ''bChPZSxzbil8MCkrTWF0aC5pbXVsKEllLFF0KXwwLEE9QStNYXRoLmltdWwoSWUsc24pfDAsRT1FK01hdGguaW11bCh6ZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKHplLGZ0KXwwKStNYXRoLmltdWwoRGUsaG4pfDAsQT1BK01hdGguaW11bChEZSxmdCl8MCxFPUUrTWF0aC5pbXVsKHhlLFd0''@;'; put 'put ''KXwwLG09KG09bStNYXRoLmltdWwoeGUsQXQpfDApK01hdGguaW11bCh2ZSxXdCl8MCxBPUErTWF0aC5pbXVsKHZlLEF0KXwwLEU9RStNYXRoLmltdWwoVWUsc3QpfDAsbT0obT1tK01hdGguaW11bChVZSxVdCl8MCkrTWF0aC5pbXVsKEplLHN0KXwwLEE9QStNYXRoLmltdWwoSmUsVXQpfDA7''@;'; put 'put ''dmFyIGVpPShqKyhFPUUrTWF0aC5pbXVsKHRlLFdlKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsVHQpfDApK01hdGguaW11bChzZSxXZSl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxUdCl8MCkrKG0+Pj4xMyl8MCkrKGVpPj4+MjYpfDAsZWkmPTY3MTA4ODYz''@;'; put 'put ''LEU9TWF0aC5pbXVsKG50LFJ0KSxtPShtPU1hdGguaW11bChudCxQdCkpK01hdGguaW11bChRZSxSdCl8MCxBPU1hdGguaW11bChRZSxQdCksRT1FK01hdGguaW11bChrZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKGtlLHNuKXwwKStNYXRoLmltdWwoQWUsUXQpfDAsQT1BK01hdGguaW11bChB''@;'; put 'put ''ZSxzbil8MCxFPUUrTWF0aC5pbXVsKE9lLGhuKXwwLG09KG09bStNYXRoLmltdWwoT2UsZnQpfDApK01hdGguaW11bChJZSxobil8MCxBPUErTWF0aC5pbXVsKEllLGZ0KXwwLEU9RStNYXRoLmltdWwoemUsV3QpfDAsbT0obT1tK01hdGguaW11bCh6ZSxBdCl8MCkrTWF0aC5pbXVsKERlLFd0''@;'; put 'put ''KXwwLEE9QStNYXRoLmltdWwoRGUsQXQpfDAsRT1FK01hdGguaW11bCh4ZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKHhlLFV0KXwwKStNYXRoLmltdWwodmUsc3QpfDAsQT1BK01hdGguaW11bCh2ZSxVdCl8MCxFPUUrTWF0aC5pbXVsKFVlLFdlKXwwLG09KG09bStNYXRoLmltdWwoVWUsVHQp''@;'; put 'put ''fDApK01hdGguaW11bChKZSxXZSl8MCxBPUErTWF0aC5pbXVsKEplLFR0KXwwO3ZhciBRcj0oaisoRT1FK01hdGguaW11bCh0ZSxodCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLHh0KXwwKStNYXRoLmltdWwoc2UsaHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwo''@;'; put 'put ''c2UseHQpfDApKyhtPj4+MTMpfDApKyhRcj4+PjI2KXwwLFFyJj02NzEwODg2MyxFPU1hdGguaW11bCh5dCxSdCksbT0obT1NYXRoLmltdWwoeXQsUHQpKStNYXRoLmltdWwoTXQsUnQpfDAsQT1NYXRoLmltdWwoTXQsUHQpLEU9RStNYXRoLmltdWwobnQsUXQpfDAsbT0obT1tK01hdGguaW11''@;'; put 'put ''bChudCxzbil8MCkrTWF0aC5pbXVsKFFlLFF0KXwwLEE9QStNYXRoLmltdWwoUWUsc24pfDAsRT1FK01hdGguaW11bChrZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKGtlLGZ0KXwwKStNYXRoLmltdWwoQWUsaG4pfDAsQT1BK01hdGguaW11bChBZSxmdCl8MCxFPUUrTWF0aC5pbXVsKE9lLFd0''@;'; put 'put ''KXwwLG09KG09bStNYXRoLmltdWwoT2UsQXQpfDApK01hdGguaW11bChJZSxXdCl8MCxBPUErTWF0aC5pbXVsKEllLEF0KXwwLEU9RStNYXRoLmltdWwoemUsc3QpfDAsbT0obT1tK01hdGguaW11bCh6ZSxVdCl8MCkrTWF0aC5pbXVsKERlLHN0KXwwLEE9QStNYXRoLmltdWwoRGUsVXQpfDAs''@;'; put 'put ''RT1FK01hdGguaW11bCh4ZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKHhlLFR0KXwwKStNYXRoLmltdWwodmUsV2UpfDAsQT1BK01hdGguaW11bCh2ZSxUdCl8MCxFPUUrTWF0aC5pbXVsKFVlLGh0KXwwLG09KG09bStNYXRoLmltdWwoVWUseHQpfDApK01hdGguaW11bChKZSxodCl8MCxBPUEr''@;'; put 'put ''TWF0aC5pbXVsKEplLHh0KXwwO3ZhciBWaT0oaisoRT1FK01hdGguaW11bCh0ZSxybil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLHp0KXwwKStNYXRoLmltdWwoc2Uscm4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsenQpfDApKyhtPj4+MTMpfDApKyhWaT4+''@;'; put 'put ''PjI2KXwwLFZpJj02NzEwODg2MyxFPU1hdGguaW11bChpdCxSdCksbT0obT1NYXRoLmltdWwoaXQsUHQpKStNYXRoLmltdWwoJGUsUnQpfDAsQT1NYXRoLmltdWwoJGUsUHQpLEU9RStNYXRoLmltdWwoeXQsUXQpfDAsbT0obT1tK01hdGguaW11bCh5dCxzbil8MCkrTWF0aC5pbXVsKE10LFF0''@;'; put 'put ''KXwwLEE9QStNYXRoLmltdWwoTXQsc24pfDAsRT1FK01hdGguaW11bChudCxobil8MCxtPShtPW0rTWF0aC5pbXVsKG50LGZ0KXwwKStNYXRoLmltdWwoUWUsaG4pfDAsQT1BK01hdGguaW11bChRZSxmdCl8MCxFPUUrTWF0aC5pbXVsKGtlLFd0KXwwLG09KG09bStNYXRoLmltdWwoa2UsQXQp''@;'; put 'put ''fDApK01hdGguaW11bChBZSxXdCl8MCxBPUErTWF0aC5pbXVsKEFlLEF0KXwwLEU9RStNYXRoLmltdWwoT2Usc3QpfDAsbT0obT1tK01hdGguaW11bChPZSxVdCl8MCkrTWF0aC5pbXVsKEllLHN0KXwwLEE9QStNYXRoLmltdWwoSWUsVXQpfDAsRT1FK01hdGguaW11bCh6ZSxXZSl8MCxtPSht''@;'; put 'put ''PW0rTWF0aC5pbXVsKHplLFR0KXwwKStNYXRoLmltdWwoRGUsV2UpfDAsQT1BK01hdGguaW11bChEZSxUdCl8MCxFPUUrTWF0aC5pbXVsKHhlLGh0KXwwLG09KG09bStNYXRoLmltdWwoeGUseHQpfDApK01hdGguaW11bCh2ZSxodCl8MCxBPUErTWF0aC5pbXVsKHZlLHh0KXwwLEU9RStNYXRo''@;'; put 'put ''LmltdWwoVWUscm4pfDAsbT0obT1tK01hdGguaW11bChVZSx6dCl8MCkrTWF0aC5pbXVsKEplLHJuKXwwLEE9QStNYXRoLmltdWwoSmUsenQpfDA7dmFyIE5pPShqKyhFPUUrTWF0aC5pbXVsKHRlLGNuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsZm4pfDApK01hdGguaW11''@;'; put 'put ''bChzZSxjbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxmbil8MCkrKG0+Pj4xMyl8MCkrKE5pPj4+MjYpfDAsTmkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLFJ0KSxtPShtPU1hdGguaW11bChIZSxQdCkpK01hdGguaW11bCh1dCxSdCl8MCxBPU1hdGguaW11bCh1dCxQdCks''@;'; put 'put ''RT1FK01hdGguaW11bChpdCxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKGl0LHNuKXwwKStNYXRoLmltdWwoJGUsUXQpfDAsQT1BK01hdGguaW11bCgkZSxzbil8MCxFPUUrTWF0aC5pbXVsKHl0LGhuKXwwLG09KG09bStNYXRoLmltdWwoeXQsZnQpfDApK01hdGguaW11bChNdCxobil8MCxBPUEr''@;'; put 'put ''TWF0aC5pbXVsKE10LGZ0KXwwLEU9RStNYXRoLmltdWwobnQsV3QpfDAsbT0obT1tK01hdGguaW11bChudCxBdCl8MCkrTWF0aC5pbXVsKFFlLFd0KXwwLEE9QStNYXRoLmltdWwoUWUsQXQpfDAsRT1FK01hdGguaW11bChrZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKGtlLFV0KXwwKStNYXRo''@;'; put 'put ''LmltdWwoQWUsc3QpfDAsQT1BK01hdGguaW11bChBZSxVdCl8MCxFPUUrTWF0aC5pbXVsKE9lLFdlKXwwLG09KG09bStNYXRoLmltdWwoT2UsVHQpfDApK01hdGguaW11bChJZSxXZSl8MCxBPUErTWF0aC5pbXVsKEllLFR0KXwwLEU9RStNYXRoLmltdWwoemUsaHQpfDAsbT0obT1tK01hdGgu''@;'; put 'put ''aW11bCh6ZSx4dCl8MCkrTWF0aC5pbXVsKERlLGh0KXwwLEE9QStNYXRoLmltdWwoRGUseHQpfDAsRT1FK01hdGguaW11bCh4ZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKHhlLHp0KXwwKStNYXRoLmltdWwodmUscm4pfDAsQT1BK01hdGguaW11bCh2ZSx6dCl8MCxFPUUrTWF0aC5pbXVsKFVl''@;'; put 'put ''LGNuKXwwLG09KG09bStNYXRoLmltdWwoVWUsZm4pfDApK01hdGguaW11bChKZSxjbil8MCxBPUErTWF0aC5pbXVsKEplLGZuKXwwO3ZhciBEYT0oaisoRT1FK01hdGguaW11bCh0ZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLGVuKXwwKStNYXRoLmltdWwoc2UsWHQp''@;'; put 'put ''fDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsZW4pfDApKyhtPj4+MTMpfDApKyhEYT4+PjI2KXwwLERhJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxRdCksbT0obT1NYXRoLmltdWwoSGUsc24pKStNYXRoLmltdWwodXQsUXQpfDAsQT1NYXRoLmltdWwodXQsc24pLEU9RStNYXRo''@;'; put 'put ''LmltdWwoaXQsaG4pfDAsbT0obT1tK01hdGguaW11bChpdCxmdCl8MCkrTWF0aC5pbXVsKCRlLGhuKXwwLEE9QStNYXRoLmltdWwoJGUsZnQpfDAsRT1FK01hdGguaW11bCh5dCxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LEF0KXwwKStNYXRoLmltdWwoTXQsV3QpfDAsQT1BK01hdGguaW11''@;'; put 'put ''bChNdCxBdCl8MCxFPUUrTWF0aC5pbXVsKG50LHN0KXwwLG09KG09bStNYXRoLmltdWwobnQsVXQpfDApK01hdGguaW11bChRZSxzdCl8MCxBPUErTWF0aC5pbXVsKFFlLFV0KXwwLEU9RStNYXRoLmltdWwoa2UsV2UpfDAsbT0obT1tK01hdGguaW11bChrZSxUdCl8MCkrTWF0aC5pbXVsKEFl''@;'; put 'put ''LFdlKXwwLEE9QStNYXRoLmltdWwoQWUsVHQpfDAsRT1FK01hdGguaW11bChPZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKE9lLHh0KXwwKStNYXRoLmltdWwoSWUsaHQpfDAsQT1BK01hdGguaW11bChJZSx4dCl8MCxFPUUrTWF0aC5pbXVsKHplLHJuKXwwLG09KG09bStNYXRoLmltdWwoemUs''@;'; put 'put ''enQpfDApK01hdGguaW11bChEZSxybil8MCxBPUErTWF0aC5pbXVsKERlLHp0KXwwLEU9RStNYXRoLmltdWwoeGUsY24pfDAsbT0obT1tK01hdGguaW11bCh4ZSxmbil8MCkrTWF0aC5pbXVsKHZlLGNuKXwwLEE9QStNYXRoLmltdWwodmUsZm4pfDA7dmFyIExyPShqKyhFPUUrTWF0aC5pbXVs''@;'; put 'put ''KFVlLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoVWUsZW4pfDApK01hdGguaW11bChKZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChKZSxlbil8MCkrKG0+Pj4xMyl8MCkrKExyPj4+MjYpfDAsTHImPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLGhuKSxtPSht''@;'; put 'put ''PU1hdGguaW11bChIZSxmdCkpK01hdGguaW11bCh1dCxobil8MCxBPU1hdGguaW11bCh1dCxmdCksRT1FK01hdGguaW11bChpdCxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKGl0LEF0KXwwKStNYXRoLmltdWwoJGUsV3QpfDAsQT1BK01hdGguaW11bCgkZSxBdCl8MCxFPUUrTWF0aC5pbXVsKHl0''@;'; put 'put ''LHN0KXwwLG09KG09bStNYXRoLmltdWwoeXQsVXQpfDApK01hdGguaW11bChNdCxzdCl8MCxBPUErTWF0aC5pbXVsKE10LFV0KXwwLEU9RStNYXRoLmltdWwobnQsV2UpfDAsbT0obT1tK01hdGguaW11bChudCxUdCl8MCkrTWF0aC5pbXVsKFFlLFdlKXwwLEE9QStNYXRoLmltdWwoUWUsVHQp''@;'; put 'put ''fDAsRT1FK01hdGguaW11bChrZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKGtlLHh0KXwwKStNYXRoLmltdWwoQWUsaHQpfDAsQT1BK01hdGguaW11bChBZSx4dCl8MCxFPUUrTWF0aC5pbXVsKE9lLHJuKXwwLG09KG09bStNYXRoLmltdWwoT2UsenQpfDApK01hdGguaW11bChJZSxybil8MCxB''@;'; put 'put ''PUErTWF0aC5pbXVsKEllLHp0KXwwLEU9RStNYXRoLmltdWwoemUsY24pfDAsbT0obT1tK01hdGguaW11bCh6ZSxmbil8MCkrTWF0aC5pbXVsKERlLGNuKXwwLEE9QStNYXRoLmltdWwoRGUsZm4pfDA7dmFyIFdpPShqKyhFPUUrTWF0aC5pbXVsKHhlLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09''@;'; put 'put ''bStNYXRoLmltdWwoeGUsZW4pfDApK01hdGguaW11bCh2ZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bCh2ZSxlbil8MCkrKG0+Pj4xMyl8MCkrKFdpPj4+MjYpfDAsV2kmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLFd0KSxtPShtPU1hdGguaW11bChIZSxBdCkpK01hdGguaW11''@;'; put 'put ''bCh1dCxXdCl8MCxBPU1hdGguaW11bCh1dCxBdCksRT1FK01hdGguaW11bChpdCxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKGl0LFV0KXwwKStNYXRoLmltdWwoJGUsc3QpfDAsQT1BK01hdGguaW11bCgkZSxVdCl8MCxFPUUrTWF0aC5pbXVsKHl0LFdlKXwwLG09KG09bStNYXRoLmltdWwoeXQs''@;'; put 'put ''VHQpfDApK01hdGguaW11bChNdCxXZSl8MCxBPUErTWF0aC5pbXVsKE10LFR0KXwwLEU9RStNYXRoLmltdWwobnQsaHQpfDAsbT0obT1tK01hdGguaW11bChudCx4dCl8MCkrTWF0aC5pbXVsKFFlLGh0KXwwLEE9QStNYXRoLmltdWwoUWUseHQpfDAsRT1FK01hdGguaW11bChrZSxybil8MCxt''@;'; put 'put ''PShtPW0rTWF0aC5pbXVsKGtlLHp0KXwwKStNYXRoLmltdWwoQWUscm4pfDAsQT1BK01hdGguaW11bChBZSx6dCl8MCxFPUUrTWF0aC5pbXVsKE9lLGNuKXwwLG09KG09bStNYXRoLmltdWwoT2UsZm4pfDApK01hdGguaW11bChJZSxjbil8MCxBPUErTWF0aC5pbXVsKEllLGZuKXwwO3ZhciBw''@;'; put 'put ''YT0oaisoRT1FK01hdGguaW11bCh6ZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHplLGVuKXwwKStNYXRoLmltdWwoRGUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoRGUsZW4pfDApKyhtPj4+MTMpfDApKyhwYT4+PjI2KXwwLHBhJj02NzEwODg2MyxFPU1h''@;'; put 'put ''dGguaW11bChIZSxzdCksbT0obT1NYXRoLmltdWwoSGUsVXQpKStNYXRoLmltdWwodXQsc3QpfDAsQT1NYXRoLmltdWwodXQsVXQpLEU9RStNYXRoLmltdWwoaXQsV2UpfDAsbT0obT1tK01hdGguaW11bChpdCxUdCl8MCkrTWF0aC5pbXVsKCRlLFdlKXwwLEE9QStNYXRoLmltdWwoJGUsVHQp''@;'; put 'put ''fDAsRT1FK01hdGguaW11bCh5dCxodCl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LHh0KXwwKStNYXRoLmltdWwoTXQsaHQpfDAsQT1BK01hdGguaW11bChNdCx4dCl8MCxFPUUrTWF0aC5pbXVsKG50LHJuKXwwLG09KG09bStNYXRoLmltdWwobnQsenQpfDApK01hdGguaW11bChRZSxybil8MCxB''@;'; put 'put ''PUErTWF0aC5pbXVsKFFlLHp0KXwwLEU9RStNYXRoLmltdWwoa2UsY24pfDAsbT0obT1tK01hdGguaW11bChrZSxmbil8MCkrTWF0aC5pbXVsKEFlLGNuKXwwLEE9QStNYXRoLmltdWwoQWUsZm4pfDA7dmFyIFFuPShqKyhFPUUrTWF0aC5pbXVsKE9lLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09''@;'; put 'put ''bStNYXRoLmltdWwoT2UsZW4pfDApK01hdGguaW11bChJZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChJZSxlbil8MCkrKG0+Pj4xMyl8MCkrKFFuPj4+MjYpfDAsUW4mPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLFdlKSxtPShtPU1hdGguaW11bChIZSxUdCkpK01hdGguaW11''@;'; put 'put ''bCh1dCxXZSl8MCxBPU1hdGguaW11bCh1dCxUdCksRT1FK01hdGguaW11bChpdCxodCl8MCxtPShtPW0rTWF0aC5pbXVsKGl0LHh0KXwwKStNYXRoLmltdWwoJGUsaHQpfDAsQT1BK01hdGguaW11bCgkZSx4dCl8MCxFPUUrTWF0aC5pbXVsKHl0LHJuKXwwLG09KG09bStNYXRoLmltdWwoeXQs''@;'; put 'put ''enQpfDApK01hdGguaW11bChNdCxybil8MCxBPUErTWF0aC5pbXVsKE10LHp0KXwwLEU9RStNYXRoLmltdWwobnQsY24pfDAsbT0obT1tK01hdGguaW11bChudCxmbil8MCkrTWF0aC5pbXVsKFFlLGNuKXwwLEE9QStNYXRoLmltdWwoUWUsZm4pfDA7dmFyIGxhPShqKyhFPUUrTWF0aC5pbXVs''@;'; put 'put ''KGtlLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoa2UsZW4pfDApK01hdGguaW11bChBZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChBZSxlbil8MCkrKG0+Pj4xMyl8MCkrKGxhPj4+MjYpfDAsbGEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLGh0KSxtPSht''@;'; put 'put ''PU1hdGguaW11bChIZSx4dCkpK01hdGguaW11bCh1dCxodCl8MCxBPU1hdGguaW11bCh1dCx4dCksRT1FK01hdGguaW11bChpdCxybil8MCxtPShtPW0rTWF0aC5pbXVsKGl0LHp0KXwwKStNYXRoLmltdWwoJGUscm4pfDAsQT1BK01hdGguaW11bCgkZSx6dCl8MCxFPUUrTWF0aC5pbXVsKHl0''@;'; put 'put ''LGNuKXwwLG09KG09bStNYXRoLmltdWwoeXQsZm4pfDApK01hdGguaW11bChNdCxjbil8MCxBPUErTWF0aC5pbXVsKE10LGZuKXwwO3ZhciB5YT0oaisoRT1FK01hdGguaW11bChudCxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG50LGVuKXwwKStNYXRoLmltdWwoUWUsWHQp''@;'; put 'put ''fDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoUWUsZW4pfDApKyhtPj4+MTMpfDApKyh5YT4+PjI2KXwwLHlhJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxybiksbT0obT1NYXRoLmltdWwoSGUsenQpKStNYXRoLmltdWwodXQscm4pfDAsQT1NYXRoLmltdWwodXQsenQpLEU9RStNYXRo''@;'; put 'put ''LmltdWwoaXQsY24pfDAsbT0obT1tK01hdGguaW11bChpdCxmbil8MCkrTWF0aC5pbXVsKCRlLGNuKXwwLEE9QStNYXRoLmltdWwoJGUsZm4pfDA7dmFyIExhPShqKyhFPUUrTWF0aC5pbXVsKHl0LFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoeXQsZW4pfDApK01hdGguaW11''@;'; put 'put ''bChNdCxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChNdCxlbil8MCkrKG0+Pj4xMyl8MCkrKExhPj4+MjYpfDAsTGEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLGNuKSxtPShtPU1hdGguaW11bChIZSxmbikpK01hdGguaW11bCh1dCxjbil8MCxBPU1hdGguaW11bCh1dCxmbik7''@;'; put 'put ''dmFyIEZhPShqKyhFPUUrTWF0aC5pbXVsKGl0LFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoaXQsZW4pfDApK01hdGguaW11bCgkZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bCgkZSxlbil8MCkrKG0+Pj4xMyl8MCkrKEZhPj4+MjYpfDAsRmEmPTY3MTA4ODYz''@;'; put 'put ''O3ZhciB0aT0oaisoRT1NYXRoLmltdWwoSGUsWHQpKXwwKSsoKDgxOTEmKG09KG09TWF0aC5pbXVsKEhlLGVuKSkrTWF0aC5pbXVsKHV0LFh0KXwwKSk8PDEzKXwwO3JldHVybiBqPSgoQT1NYXRoLmltdWwodXQsZW4pKSsobT4+PjEzKXwwKSsodGk+Pj4yNil8MCx0aSY9NjcxMDg4NjMsSFsw''@;'; put 'put ''XT11YSxIWzFdPUVpLEhbMl09dnIsSFszXT1XbixIWzRdPSRpLEhbNV09ZWksSFs2XT1RcixIWzddPVZpLEhbOF09TmksSFs5XT1EYSxIWzEwXT1McixIWzExXT1XaSxIWzEyXT1wYSxIWzEzXT1RbixIWzE0XT1sYSxIWzE1XT15YSxIWzE2XT1MYSxIWzE3XT1GYSxIWzE4XT10aSwwIT09aiYm''@;'; put 'put ''KEhbMTldPWoseC5sZW5ndGgrKykseH07ZnVuY3Rpb24gZWUoVixwLGIpe3JldHVybihuZXcgSikubXVscChWLHAsYil9ZnVuY3Rpb24gSihWLHApe3RoaXMueD1WLHRoaXMueT1wfU1hdGguaW11bHx8KFk9Vyksdy5wcm90b3R5cGUubXVsVG89ZnVuY3Rpb24ocCxiKXt2YXIgeCxDPXRoaXMu''@;'; put 'put ''bGVuZ3RoK3AubGVuZ3RoO3JldHVybiB4PTEwPT09dGhpcy5sZW5ndGgmJjEwPT09cC5sZW5ndGg/WSh0aGlzLHAsYik6Qzw2Mz9XKHRoaXMscCxiKTpDPDEwMjQ/ZnVuY3Rpb24gcShWLHAsYil7Yi5uZWdhdGl2ZT1wLm5lZ2F0aXZlXlYubmVnYXRpdmUsYi5sZW5ndGg9Vi5sZW5ndGgrcC5s''@;'; put 'put ''ZW5ndGg7Zm9yKHZhciB4PTAsQz0wLFQ9MDtUPGIubGVuZ3RoLTE7VCsrKXt2YXIgSD1DO0M9MDtmb3IodmFyIGo9NjcxMDg4NjMmeCxFPU1hdGgubWluKFQscC5sZW5ndGgtMSksbT1NYXRoLm1heCgwLFQtVi5sZW5ndGgrMSk7bTw9RTttKyspe3ZhciBzZT0oMHxWLndvcmRzW1QtbV0pKigw''@;'; put 'put ''fHAud29yZHNbbV0pLHdlPTY3MTA4ODYzJnNlO2o9NjcxMDg4NjMmKHdlPXdlK2p8MCksQys9KEg9KEg9SCsoc2UvNjcxMDg4NjR8MCl8MCkrKHdlPj4+MjYpfDApPj4+MjYsSCY9NjcxMDg4NjN9Yi53b3Jkc1tUXT1qLHg9SCxIPUN9cmV0dXJuIDAhPT14P2Iud29yZHNbVF09eDpiLmxlbmd0''@;'; put 'put ''aC0tLGIuc3RyaXAoKX0odGhpcyxwLGIpOmVlKHRoaXMscCxiKSx4fSxKLnByb3RvdHlwZS5tYWtlUkJUPWZ1bmN0aW9uKHApe2Zvcih2YXIgYj1uZXcgQXJyYXkocCkseD13LnByb3RvdHlwZS5fY291bnRCaXRzKHApLTEsQz0wO0M8cDtDKyspYltDXT10aGlzLnJldkJpbihDLHgscCk7cmV0''@;'; put 'put ''dXJuIGJ9LEoucHJvdG90eXBlLnJldkJpbj1mdW5jdGlvbihwLGIseCl7aWYoMD09PXB8fHA9PT14LTEpcmV0dXJuIHA7Zm9yKHZhciBDPTAsVD0wO1Q8YjtUKyspQ3w9KDEmcCk8PGItVC0xLHA+Pj0xO3JldHVybiBDfSxKLnByb3RvdHlwZS5wZXJtdXRlPWZ1bmN0aW9uKHAsYix4LEMsVCxI''@;'; put 'put ''KXtmb3IodmFyIGo9MDtqPEg7aisrKUNbal09YltwW2pdXSxUW2pdPXhbcFtqXV19LEoucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbihwLGIseCxDLFQsSCl7dGhpcy5wZXJtdXRlKEgscCxiLHgsQyxUKTtmb3IodmFyIGo9MTtqPFQ7ajw8PTEpZm9yKHZhciBFPWo8PDEsbT1NYXRoLmNv''@;'; put 'put ''cygyKk1hdGguUEkvRSksQT1NYXRoLnNpbigyKk1hdGguUEkvRSksYWU9MDthZTxUO2FlKz1FKWZvcih2YXIgdGU9bSxzZT1BLHdlPTA7d2U8ajt3ZSsrKXt2YXIgVWU9eFthZSt3ZV0sSmU9Q1thZSt3ZV0sb3Q9eFthZSt3ZStqXSx4ZT1DW2FlK3dlK2pdLHZlPXRlKm90LXNlKnhlO3hlPXRl''@;'; put 'put ''KnhlK3NlKm90LHhbYWUrd2VdPVVlKyhvdD12ZSksQ1thZSt3ZV09SmUreGUseFthZSt3ZStqXT1VZS1vdCxDW2FlK3dlK2pdPUplLXhlLHdlIT09RSYmKHZlPW0qdGUtQSpzZSxzZT1tKnNlK0EqdGUsdGU9dmUpfX0sSi5wcm90b3R5cGUuZ3Vlc3NMZW4xM2I9ZnVuY3Rpb24ocCxiKXt2YXIg''@;'; put 'put ''eD0xfE1hdGgubWF4KGIscCksQz0xJngsVD0wO2Zvcih4PXgvMnwwO3g7eD4+Pj0xKVQrKztyZXR1cm4gMTw8VCsxK0N9LEoucHJvdG90eXBlLmNvbmp1Z2F0ZT1mdW5jdGlvbihwLGIseCl7aWYoISh4PD0xKSlmb3IodmFyIEM9MDtDPHgvMjtDKyspe3ZhciBUPXBbQ107cFtDXT1wW3gtQy0x''@;'; put 'put ''XSxwW3gtQy0xXT1ULFQ9YltDXSxiW0NdPS1iW3gtQy0xXSxiW3gtQy0xXT0tVH19LEoucHJvdG90eXBlLm5vcm1hbGl6ZTEzYj1mdW5jdGlvbihwLGIpe2Zvcih2YXIgeD0wLEM9MDtDPGIvMjtDKyspe3ZhciBUPTgxOTIqTWF0aC5yb3VuZChwWzIqQysxXS9iKStNYXRoLnJvdW5kKHBbMipD''@;'; put 'put ''XS9iKSt4O3BbQ109NjcxMDg4NjMmVCx4PVQ8NjcxMDg4NjQ/MDpULzY3MTA4ODY0fDB9cmV0dXJuIHB9LEoucHJvdG90eXBlLmNvbnZlcnQxM2I9ZnVuY3Rpb24ocCxiLHgsQyl7Zm9yKHZhciBUPTAsSD0wO0g8YjtIKyspeFsyKkhdPTgxOTEmKFQrPTB8cFtIXSkseFsyKkgrMV09ODE5MSYo''@;'; put 'put ''VD4+Pj0xMyksVD4+Pj0xMztmb3IoSD0yKmI7SDxDOysrSCl4W0hdPTA7ZygwPT09VCksZyghKC04MTkyJlQpKX0sSi5wcm90b3R5cGUuc3R1Yj1mdW5jdGlvbihwKXtmb3IodmFyIGI9bmV3IEFycmF5KHApLHg9MDt4PHA7eCsrKWJbeF09MDtyZXR1cm4gYn0sSi5wcm90b3R5cGUubXVscD1m''@;'; put 'put ''dW5jdGlvbihwLGIseCl7dmFyIEM9Mip0aGlzLmd1ZXNzTGVuMTNiKHAubGVuZ3RoLGIubGVuZ3RoKSxUPXRoaXMubWFrZVJCVChDKSxIPXRoaXMuc3R1YihDKSxqPW5ldyBBcnJheShDKSxFPW5ldyBBcnJheShDKSxtPW5ldyBBcnJheShDKSxBPW5ldyBBcnJheShDKSxhZT1uZXcgQXJyYXko''@;'; put 'put ''QyksdGU9bmV3IEFycmF5KEMpLHNlPXgud29yZHM7c2UubGVuZ3RoPUMsdGhpcy5jb252ZXJ0MTNiKHAud29yZHMscC5sZW5ndGgsaixDKSx0aGlzLmNvbnZlcnQxM2IoYi53b3JkcyxiLmxlbmd0aCxBLEMpLHRoaXMudHJhbnNmb3JtKGosSCxFLG0sQyxUKSx0aGlzLnRyYW5zZm9ybShBLEgs''@;'; put 'put ''YWUsdGUsQyxUKTtmb3IodmFyIHdlPTA7d2U8Qzt3ZSsrKXt2YXIgVWU9RVt3ZV0qYWVbd2VdLW1bd2VdKnRlW3dlXTttW3dlXT1FW3dlXSp0ZVt3ZV0rbVt3ZV0qYWVbd2VdLEVbd2VdPVVlfXJldHVybiB0aGlzLmNvbmp1Z2F0ZShFLG0sQyksdGhpcy50cmFuc2Zvcm0oRSxtLHNlLEgsQyxU''@;'; put 'put ''KSx0aGlzLmNvbmp1Z2F0ZShzZSxILEMpLHRoaXMubm9ybWFsaXplMTNiKHNlLEMpLHgubmVnYXRpdmU9cC5uZWdhdGl2ZV5iLm5lZ2F0aXZlLHgubGVuZ3RoPXAubGVuZ3RoK2IubGVuZ3RoLHguc3RyaXAoKX0sdy5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHApe3ZhciBiPW5ldyB3KG51bGwp''@;'; put 'put ''O3JldHVybiBiLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtwLmxlbmd0aCksdGhpcy5tdWxUbyhwLGIpfSx3LnByb3RvdHlwZS5tdWxmPWZ1bmN0aW9uKHApe3ZhciBiPW5ldyB3KG51bGwpO3JldHVybiBiLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtwLmxlbmd0aCksZWUodGhp''@;'; put 'put ''cyxwLGIpfSx3LnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkubXVsVG8ocCx0aGlzKX0sdy5wcm90b3R5cGUuaW11bG49ZnVuY3Rpb24ocCl7ZygibnVtYmVyIj09dHlwZW9mIHApLGcocDw2NzEwODg2NCk7Zm9yKHZhciBiPTAseD0wO3g8dGhpcy5sZW5n''@;'; put 'put ''dGg7eCsrKXt2YXIgQz0oMHx0aGlzLndvcmRzW3hdKSpwLFQ9KDY3MTA4ODYzJkMpKyg2NzEwODg2MyZiKTtiPj49MjYsYis9Qy82NzEwODg2NHwwLGIrPVQ+Pj4yNix0aGlzLndvcmRzW3hdPTY3MTA4ODYzJlR9cmV0dXJuIDAhPT1iJiYodGhpcy53b3Jkc1t4XT1iLHRoaXMubGVuZ3RoKysp''@;'; put 'put ''LHRoaXN9LHcucHJvdG90eXBlLm11bG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbXVsbihwKX0sdy5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubXVsKHRoaXMpfSx3LnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW11bCh0aGlz''@;'; put 'put ''LmNsb25lKCkpfSx3LnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24ocCl7dmFyIGI9ZnVuY3Rpb24gVShWKXtmb3IodmFyIHA9bmV3IEFycmF5KFYuYml0TGVuZ3RoKCkpLGI9MDtiPHAubGVuZ3RoO2IrKyl7dmFyIEM9YiUyNjtwW2JdPShWLndvcmRzW2IvMjZ8MF0mMTw8Qyk+Pj5DfXJldHVybiBw''@;'; put 'put ''fShwKTtpZigwPT09Yi5sZW5ndGgpcmV0dXJuIG5ldyB3KDEpO2Zvcih2YXIgeD10aGlzLEM9MDtDPGIubGVuZ3RoJiYwPT09YltDXTtDKysseD14LnNxcigpKTtpZigrK0M8Yi5sZW5ndGgpZm9yKHZhciBUPXguc3FyKCk7QzxiLmxlbmd0aDtDKyssVD1ULnNxcigpKTAhPT1iW0NdJiYoeD14''@;'; put 'put ''Lm11bChUKSk7cmV0dXJuIHh9LHcucHJvdG90eXBlLml1c2hsbj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIFQsYj1wJTI2LHg9KHAtYikvMjYsQz02NzEwODg2Mz4+PjI2LWI8PDI2LWI7aWYoMCE9PWIpe3ZhciBIPTA7Zm9yKFQ9MDtUPHRoaXMubGVuZ3Ro''@;'; put 'put ''O1QrKyl7dmFyIGo9dGhpcy53b3Jkc1tUXSZDO3RoaXMud29yZHNbVF09KDB8dGhpcy53b3Jkc1tUXSktajw8YnxILEg9aj4+PjI2LWJ9SCYmKHRoaXMud29yZHNbVF09SCx0aGlzLmxlbmd0aCsrKX1pZigwIT09eCl7Zm9yKFQ9dGhpcy5sZW5ndGgtMTtUPj0wO1QtLSl0aGlzLndvcmRzW1Qr''@;'; put 'put ''eF09dGhpcy53b3Jkc1tUXTtmb3IoVD0wO1Q8eDtUKyspdGhpcy53b3Jkc1tUXT0wO3RoaXMubGVuZ3RoKz14fXJldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlzaGxuPWZ1bmN0aW9uKHApe3JldHVybiBnKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hsbihwKX0sdy5wcm90''@;'; put 'put ''b3R5cGUuaXVzaHJuPWZ1bmN0aW9uKHAsYix4KXt2YXIgQztnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCksQz1iPyhiLWIlMjYpLzI2OjA7dmFyIFQ9cCUyNixIPU1hdGgubWluKChwLVQpLzI2LHRoaXMubGVuZ3RoKSxqPTY3MTA4ODYzXjY3MTA4ODYzPj4+VDw8VCxFPXg7aWYoQy09SCxD''@;'; put 'put ''PU1hdGgubWF4KDAsQyksRSl7Zm9yKHZhciBtPTA7bTxIO20rKylFLndvcmRzW21dPXRoaXMud29yZHNbbV07RS5sZW5ndGg9SH1pZigwIT09SClpZih0aGlzLmxlbmd0aD5IKWZvcih0aGlzLmxlbmd0aC09SCxtPTA7bTx0aGlzLmxlbmd0aDttKyspdGhpcy53b3Jkc1ttXT10aGlzLndvcmRz''@;'; put 'put ''W20rSF07ZWxzZSB0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MTt2YXIgQT0wO2ZvcihtPXRoaXMubGVuZ3RoLTE7bT49MCYmKDAhPT1BfHxtPj1DKTttLS0pe3ZhciBhZT0wfHRoaXMud29yZHNbbV07dGhpcy53b3Jkc1ttXT1BPDwyNi1UfGFlPj4+VCxBPWFlJmp9cmV0dXJuIEUmJjAh''@;'; put 'put ''PT1BJiYoRS53b3Jkc1tFLmxlbmd0aCsrXT1BKSwwPT09dGhpcy5sZW5ndGgmJih0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MSksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pc2hybj1mdW5jdGlvbihwLGIseCl7cmV0dXJuIGcoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaHJu''@;'; put 'put ''KHAsYix4KX0sdy5wcm90b3R5cGUuc2hsbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaGxuKHApfSx3LnByb3RvdHlwZS51c2hsbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hsbihwKX0sdy5wcm90b3R5cGUuc2hybj1mdW5jdGlvbihwKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5jbG9uZSgpLmlzaHJuKHApfSx3LnByb3RvdHlwZS51c2hybj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hybihwKX0sdy5wcm90b3R5cGUudGVzdG49ZnVuY3Rpb24ocCl7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApO3ZhciBiPXAlMjYseD0ocC1iKS8yNjty''@;'; put 'put ''ZXR1cm4hKHRoaXMubGVuZ3RoPD14fHwhKHRoaXMud29yZHNbeF0mMTw8YikpfSx3LnByb3RvdHlwZS5pbWFza249ZnVuY3Rpb24ocCl7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApO3ZhciBiPXAlMjYseD0ocC1iKS8yNjtyZXR1cm4gZygwPT09dGhpcy5uZWdhdGl2ZSwiaW1hc2tuIHdv''@;'; put 'put ''cmtzIG9ubHkgd2l0aCBwb3NpdGl2ZSBudW1iZXJzIiksdGhpcy5sZW5ndGg8PXg/dGhpczooMCE9PWImJngrKyx0aGlzLmxlbmd0aD1NYXRoLm1pbih4LHRoaXMubGVuZ3RoKSwwIT09YiYmKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0mPTY3MTA4ODYzXjY3MTA4ODYzPj4+Yjw8YiksdGhp''@;'; put 'put ''cy5zdHJpcCgpKX0sdy5wcm90b3R5cGUubWFza249ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbWFza24ocCl9LHcucHJvdG90eXBlLmlhZGRuPWZ1bmN0aW9uKHApe3JldHVybiBnKCJudW1iZXIiPT10eXBlb2YgcCksZyhwPDY3MTA4ODY0KSxwPDA/dGhpcy5pc3VibigtcCk6''@;'; put 'put ''MCE9PXRoaXMubmVnYXRpdmU/MT09PXRoaXMubGVuZ3RoJiYoMHx0aGlzLndvcmRzWzBdKTxwPyh0aGlzLndvcmRzWzBdPXAtKDB8dGhpcy53b3Jkc1swXSksdGhpcy5uZWdhdGl2ZT0wLHRoaXMpOih0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pc3VibihwKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcyk6''@;'; put 'put ''dGhpcy5faWFkZG4ocCl9LHcucHJvdG90eXBlLl9pYWRkbj1mdW5jdGlvbihwKXt0aGlzLndvcmRzWzBdKz1wO2Zvcih2YXIgYj0wO2I8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbYl0+PTY3MTA4ODY0O2IrKyl0aGlzLndvcmRzW2JdLT02NzEwODg2NCxiPT09dGhpcy5sZW5ndGgtMT90aGlz''@;'; put 'put ''LndvcmRzW2IrMV09MTp0aGlzLndvcmRzW2IrMV0rKztyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsYisxKSx0aGlzfSx3LnByb3RvdHlwZS5pc3Vibj1mdW5jdGlvbihwKXtpZihnKCJudW1iZXIiPT10eXBlb2YgcCksZyhwPDY3MTA4ODY0KSxwPDApcmV0dXJuIHRo''@;'; put 'put ''aXMuaWFkZG4oLXApO2lmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkbihwKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcztpZih0aGlzLndvcmRzWzBdLT1wLDE9PT10aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1swXTwwKXRoaXMud29yZHNbMF09LXRoaXMu''@;'; put 'put ''d29yZHNbMF0sdGhpcy5uZWdhdGl2ZT0xO2Vsc2UgZm9yKHZhciBiPTA7Yjx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tiXTwwO2IrKyl0aGlzLndvcmRzW2JdKz02NzEwODg2NCx0aGlzLndvcmRzW2IrMV0tPTE7cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuYWRkbj1mdW5jdGlv''@;'; put 'put ''bihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhZGRuKHApfSx3LnByb3RvdHlwZS5zdWJuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXN1Ym4ocCl9LHcucHJvdG90eXBlLmlhYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXN9LHcucHJvdG90eXBlLmFi''@;'; put 'put ''cz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaWFicygpfSx3LnByb3RvdHlwZS5faXNobG5zdWJtdWw9ZnVuY3Rpb24ocCxiLHgpe3ZhciBUO3RoaXMuX2V4cGFuZChwLmxlbmd0aCt4KTt2YXIgSCxqPTA7Zm9yKFQ9MDtUPHAubGVuZ3RoO1QrKyl7SD0oMHx0aGlzLndvcmRzW1Qr''@;'; put 'put ''eF0pK2o7dmFyIEU9KDB8cC53b3Jkc1tUXSkqYjtqPSgoSC09NjcxMDg4NjMmRSk+PjI2KS0oRS82NzEwODg2NHwwKSx0aGlzLndvcmRzW1QreF09NjcxMDg4NjMmSH1mb3IoO1Q8dGhpcy5sZW5ndGgteDtUKyspaj0oSD0oMHx0aGlzLndvcmRzW1QreF0pK2opPj4yNix0aGlzLndvcmRzW1Qr''@;'; put 'put ''eF09NjcxMDg4NjMmSDtpZigwPT09ailyZXR1cm4gdGhpcy5zdHJpcCgpO2ZvcihnKC0xPT09aiksaj0wLFQ9MDtUPHRoaXMubGVuZ3RoO1QrKylqPShIPS0oMHx0aGlzLndvcmRzW1RdKStqKT4+MjYsdGhpcy53b3Jkc1tUXT02NzEwODg2MyZIO3JldHVybiB0aGlzLm5lZ2F0aXZlPTEsdGhp''@;'; put 'put ''cy5zdHJpcCgpfSx3LnByb3RvdHlwZS5fd29yZERpdj1mdW5jdGlvbihwLGIpe3ZhciB4LEM9dGhpcy5jbG9uZSgpLFQ9cCxIPTB8VC53b3Jkc1tULmxlbmd0aC0xXTswIT0oeD0yNi10aGlzLl9jb3VudEJpdHMoSCkpJiYoVD1ULnVzaGxuKHgpLEMuaXVzaGxuKHgpLEg9MHxULndvcmRzW1Qu''@;'; put 'put ''bGVuZ3RoLTFdKTt2YXIgbSxFPUMubGVuZ3RoLVQubGVuZ3RoO2lmKCJtb2QiIT09Yil7KG09bmV3IHcobnVsbCkpLmxlbmd0aD1FKzEsbS53b3Jkcz1uZXcgQXJyYXkobS5sZW5ndGgpO2Zvcih2YXIgQT0wO0E8bS5sZW5ndGg7QSsrKW0ud29yZHNbQV09MH12YXIgYWU9Qy5jbG9uZSgpLl9p''@;'; put 'put ''c2hsbnN1Ym11bChULDEsRSk7MD09PWFlLm5lZ2F0aXZlJiYoQz1hZSxtJiYobS53b3Jkc1tFXT0xKSk7Zm9yKHZhciB0ZT1FLTE7dGU+PTA7dGUtLSl7dmFyIHNlPTY3MTA4ODY0KigwfEMud29yZHNbVC5sZW5ndGgrdGVdKSsoMHxDLndvcmRzW1QubGVuZ3RoK3RlLTFdKTtmb3Ioc2U9TWF0''@;'; put 'put ''aC5taW4oc2UvSHwwLDY3MTA4ODYzKSxDLl9pc2hsbnN1Ym11bChULHNlLHRlKTswIT09Qy5uZWdhdGl2ZTspc2UtLSxDLm5lZ2F0aXZlPTAsQy5faXNobG5zdWJtdWwoVCwxLHRlKSxDLmlzWmVybygpfHwoQy5uZWdhdGl2ZV49MSk7bSYmKG0ud29yZHNbdGVdPXNlKX1yZXR1cm4gbSYmbS5z''@;'; put 'put ''dHJpcCgpLEMuc3RyaXAoKSwiZGl2IiE9PWImJjAhPT14JiZDLml1c2hybih4KSx7ZGl2Om18fG51bGwsbW9kOkN9fSx3LnByb3RvdHlwZS5kaXZtb2Q9ZnVuY3Rpb24ocCxiLHgpe3JldHVybiBnKCFwLmlzWmVybygpKSx0aGlzLmlzWmVybygpP3tkaXY6bmV3IHcoMCksbW9kOm5ldyB3KDAp''@;'; put 'put ''fTowIT09dGhpcy5uZWdhdGl2ZSYmMD09PXAubmVnYXRpdmU/KEg9dGhpcy5uZWcoKS5kaXZtb2QocCxiKSwibW9kIiE9PWImJihDPUguZGl2Lm5lZygpKSwiZGl2IiE9PWImJihUPUgubW9kLm5lZygpLHgmJjAhPT1ULm5lZ2F0aXZlJiZULmlhZGQocCkpLHtkaXY6Qyxtb2Q6VH0pOjA9PT10''@;'; put 'put ''aGlzLm5lZ2F0aXZlJiYwIT09cC5uZWdhdGl2ZT8oSD10aGlzLmRpdm1vZChwLm5lZygpLGIpLCJtb2QiIT09YiYmKEM9SC5kaXYubmVnKCkpLHtkaXY6Qyxtb2Q6SC5tb2R9KTp0aGlzLm5lZ2F0aXZlJnAubmVnYXRpdmU/KEg9dGhpcy5uZWcoKS5kaXZtb2QocC5uZWcoKSxiKSwiZGl2IiE9''@;'; put 'put ''PWImJihUPUgubW9kLm5lZygpLHgmJjAhPT1ULm5lZ2F0aXZlJiZULmlzdWIocCkpLHtkaXY6SC5kaXYsbW9kOlR9KTpwLmxlbmd0aD50aGlzLmxlbmd0aHx8dGhpcy5jbXAocCk8MD97ZGl2Om5ldyB3KDApLG1vZDp0aGlzfToxPT09cC5sZW5ndGg/ImRpdiI9PT1iP3tkaXY6dGhpcy5kaXZu''@;'; put 'put ''KHAud29yZHNbMF0pLG1vZDpudWxsfToibW9kIj09PWI/e2RpdjpudWxsLG1vZDpuZXcgdyh0aGlzLm1vZG4ocC53b3Jkc1swXSkpfTp7ZGl2OnRoaXMuZGl2bihwLndvcmRzWzBdKSxtb2Q6bmV3IHcodGhpcy5tb2RuKHAud29yZHNbMF0pKX06dGhpcy5fd29yZERpdihwLGIpO3ZhciBDLFQs''@;'; put 'put ''SH0sdy5wcm90b3R5cGUuZGl2PWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmRpdm1vZChwLCJkaXYiLCExKS5kaXZ9LHcucHJvdG90eXBlLm1vZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5kaXZtb2QocCwibW9kIiwhMSkubW9kfSx3LnByb3RvdHlwZS51bW9kPWZ1bmN0aW9uKHApe3JldHVy''@;'; put 'put ''biB0aGlzLmRpdm1vZChwLCJtb2QiLCEwKS5tb2R9LHcucHJvdG90eXBlLmRpdlJvdW5kPWZ1bmN0aW9uKHApe3ZhciBiPXRoaXMuZGl2bW9kKHApO2lmKGIubW9kLmlzWmVybygpKXJldHVybiBiLmRpdjt2YXIgeD0wIT09Yi5kaXYubmVnYXRpdmU/Yi5tb2QuaXN1YihwKTpiLm1vZCxDPXAu''@;'; put 'put ''dXNocm4oMSksVD1wLmFuZGxuKDEpLEg9eC5jbXAoQyk7cmV0dXJuIEg8MHx8MT09PVQmJjA9PT1IP2IuZGl2OjAhPT1iLmRpdi5uZWdhdGl2ZT9iLmRpdi5pc3VibigxKTpiLmRpdi5pYWRkbigxKX0sdy5wcm90b3R5cGUubW9kbj1mdW5jdGlvbihwKXtnKHA8PTY3MTA4ODYzKTtmb3IodmFy''@;'; put 'put ''IGI9KDE8PDI2KSVwLHg9MCxDPXRoaXMubGVuZ3RoLTE7Qz49MDtDLS0peD0oYip4KygwfHRoaXMud29yZHNbQ10pKSVwO3JldHVybiB4fSx3LnByb3RvdHlwZS5pZGl2bj1mdW5jdGlvbihwKXtnKHA8PTY3MTA4ODYzKTtmb3IodmFyIGI9MCx4PXRoaXMubGVuZ3RoLTE7eD49MDt4LS0pe3Zh''@;'; put 'put ''ciBDPSgwfHRoaXMud29yZHNbeF0pKzY3MTA4ODY0KmI7dGhpcy53b3Jkc1t4XT1DL3B8MCxiPUMlcH1yZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5kaXZuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaWRpdm4ocCl9LHcucHJvdG90eXBlLmVnY2Q9ZnVuY3Rpb24o''@;'; put 'put ''cCl7ZygwPT09cC5uZWdhdGl2ZSksZyghcC5pc1plcm8oKSk7dmFyIGI9dGhpcyx4PXAuY2xvbmUoKTtiPTAhPT1iLm5lZ2F0aXZlP2IudW1vZChwKTpiLmNsb25lKCk7Zm9yKHZhciBDPW5ldyB3KDEpLFQ9bmV3IHcoMCksSD1uZXcgdygwKSxqPW5ldyB3KDEpLEU9MDtiLmlzRXZlbigpJiZ4''@;'; put 'put ''LmlzRXZlbigpOyliLml1c2hybigxKSx4Lml1c2hybigxKSwrK0U7Zm9yKHZhciBtPXguY2xvbmUoKSxBPWIuY2xvbmUoKTshYi5pc1plcm8oKTspe2Zvcih2YXIgYWU9MCx0ZT0xOyEoYi53b3Jkc1swXSZ0ZSkmJmFlPDI2OysrYWUsdGU8PD0xKTtpZihhZT4wKWZvcihiLml1c2hybihhZSk7''@;'; put 'put ''YWUtLSA+MDspKEMuaXNPZGQoKXx8VC5pc09kZCgpKSYmKEMuaWFkZChtKSxULmlzdWIoQSkpLEMuaXVzaHJuKDEpLFQuaXVzaHJuKDEpO2Zvcih2YXIgc2U9MCx3ZT0xOyEoeC53b3Jkc1swXSZ3ZSkmJnNlPDI2Oysrc2Usd2U8PD0xKTtpZihzZT4wKWZvcih4Lml1c2hybihzZSk7c2UtLSA+''@;'; put 'put ''MDspKEguaXNPZGQoKXx8ai5pc09kZCgpKSYmKEguaWFkZChtKSxqLmlzdWIoQSkpLEguaXVzaHJuKDEpLGouaXVzaHJuKDEpO2IuY21wKHgpPj0wPyhiLmlzdWIoeCksQy5pc3ViKEgpLFQuaXN1YihqKSk6KHguaXN1YihiKSxILmlzdWIoQyksai5pc3ViKFQpKX1yZXR1cm57YTpILGI6aixn''@;'; put 'put ''Y2Q6eC5pdXNobG4oRSl9fSx3LnByb3RvdHlwZS5faW52bXA9ZnVuY3Rpb24ocCl7ZygwPT09cC5uZWdhdGl2ZSksZyghcC5pc1plcm8oKSk7dmFyIGFlLGI9dGhpcyx4PXAuY2xvbmUoKTtiPTAhPT1iLm5lZ2F0aXZlP2IudW1vZChwKTpiLmNsb25lKCk7Zm9yKHZhciBDPW5ldyB3KDEpLFQ9''@;'; put 'put ''bmV3IHcoMCksSD14LmNsb25lKCk7Yi5jbXBuKDEpPjAmJnguY21wbigxKT4wOyl7Zm9yKHZhciBqPTAsRT0xOyEoYi53b3Jkc1swXSZFKSYmajwyNjsrK2osRTw8PTEpO2lmKGo+MClmb3IoYi5pdXNocm4oaik7ai0tID4wOylDLmlzT2RkKCkmJkMuaWFkZChIKSxDLml1c2hybigxKTtmb3Io''@;'; put 'put ''dmFyIG09MCxBPTE7ISh4LndvcmRzWzBdJkEpJiZtPDI2OysrbSxBPDw9MSk7aWYobT4wKWZvcih4Lml1c2hybihtKTttLS0gPjA7KVQuaXNPZGQoKSYmVC5pYWRkKEgpLFQuaXVzaHJuKDEpO2IuY21wKHgpPj0wPyhiLmlzdWIoeCksQy5pc3ViKFQpKTooeC5pc3ViKGIpLFQuaXN1YihDKSl9''@;'; put 'put ''cmV0dXJuKGFlPTA9PT1iLmNtcG4oMSk/QzpUKS5jbXBuKDApPDAmJmFlLmlhZGQocCksYWV9LHcucHJvdG90eXBlLmdjZD1mdW5jdGlvbihwKXtpZih0aGlzLmlzWmVybygpKXJldHVybiBwLmFicygpO2lmKHAuaXNaZXJvKCkpcmV0dXJuIHRoaXMuYWJzKCk7dmFyIGI9dGhpcy5jbG9uZSgp''@;'; put 'put ''LHg9cC5jbG9uZSgpO2IubmVnYXRpdmU9MCx4Lm5lZ2F0aXZlPTA7Zm9yKHZhciBDPTA7Yi5pc0V2ZW4oKSYmeC5pc0V2ZW4oKTtDKyspYi5pdXNocm4oMSkseC5pdXNocm4oMSk7Zm9yKDs7KXtmb3IoO2IuaXNFdmVuKCk7KWIuaXVzaHJuKDEpO2Zvcig7eC5pc0V2ZW4oKTspeC5pdXNocm4o''@;'; put 'put ''MSk7dmFyIFQ9Yi5jbXAoeCk7aWYoVDwwKXt2YXIgSD1iO2I9eCx4PUh9ZWxzZSBpZigwPT09VHx8MD09PXguY21wbigxKSlicmVhaztiLmlzdWIoeCl9cmV0dXJuIHguaXVzaGxuKEMpfSx3LnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmVnY2QocCkuYS51bW9kKHAp''@;'; put 'put ''fSx3LnByb3RvdHlwZS5pc0V2ZW49ZnVuY3Rpb24oKXtyZXR1cm4hKDEmdGhpcy53b3Jkc1swXSl9LHcucHJvdG90eXBlLmlzT2RkPWZ1bmN0aW9uKCl7cmV0dXJuISgxJn50aGlzLndvcmRzWzBdKX0sdy5wcm90b3R5cGUuYW5kbG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMud29yZHNbMF0m''@;'; put 'put ''cH0sdy5wcm90b3R5cGUuYmluY249ZnVuY3Rpb24ocCl7ZygibnVtYmVyIj09dHlwZW9mIHApO3ZhciBiPXAlMjYseD0ocC1iKS8yNixDPTE8PGI7aWYodGhpcy5sZW5ndGg8PXgpcmV0dXJuIHRoaXMuX2V4cGFuZCh4KzEpLHRoaXMud29yZHNbeF18PUMsdGhpcztmb3IodmFyIFQ9QyxIPXg7''@;'; put 'put ''MCE9PVQmJkg8dGhpcy5sZW5ndGg7SCsrKXt2YXIgaj0wfHRoaXMud29yZHNbSF07VD0oais9VCk+Pj4yNix0aGlzLndvcmRzW0hdPWomPTY3MTA4ODYzfXJldHVybiAwIT09VCYmKHRoaXMud29yZHNbSF09VCx0aGlzLmxlbmd0aCsrKSx0aGlzfSx3LnByb3RvdHlwZS5pc1plcm89ZnVuY3Rp''@;'; put 'put ''b24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXX0sdy5wcm90b3R5cGUuY21wbj1mdW5jdGlvbihwKXt2YXIgeCxiPXA8MDtpZigwIT09dGhpcy5uZWdhdGl2ZSYmIWIpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJmIpcmV0dXJuIDE7aWYodGhpcy5z''@;'; put 'put ''dHJpcCgpLHRoaXMubGVuZ3RoPjEpeD0xO2Vsc2V7YiYmKHA9LXApLGcocDw9NjcxMDg4NjMsIk51bWJlciBpcyB0b28gYmlnIik7dmFyIEM9MHx0aGlzLndvcmRzWzBdO3g9Qz09PXA/MDpDPHA/LTE6MX1yZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwteDp4fSx3LnByb3RvdHlwZS5jbXA9''@;'; put 'put ''ZnVuY3Rpb24ocCl7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1wLm5lZ2F0aXZlKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09cC5uZWdhdGl2ZSlyZXR1cm4gMTt2YXIgYj10aGlzLnVjbXAocCk7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LWI6Yn0sdy5wcm90b3R5''@;'; put 'put ''cGUudWNtcD1mdW5jdGlvbihwKXtpZih0aGlzLmxlbmd0aD5wLmxlbmd0aClyZXR1cm4gMTtpZih0aGlzLmxlbmd0aDxwLmxlbmd0aClyZXR1cm4tMTtmb3IodmFyIGI9MCx4PXRoaXMubGVuZ3RoLTE7eD49MDt4LS0pe3ZhciBDPTB8dGhpcy53b3Jkc1t4XSxUPTB8cC53b3Jkc1t4XTtpZihD''@;'; put 'put ''IT09VCl7QzxUP2I9LTE6Qz5UJiYoYj0xKTticmVha319cmV0dXJuIGJ9LHcucHJvdG90eXBlLmd0bj1mdW5jdGlvbihwKXtyZXR1cm4gMT09PXRoaXMuY21wbihwKX0sdy5wcm90b3R5cGUuZ3Q9ZnVuY3Rpb24ocCl7cmV0dXJuIDE9PT10aGlzLmNtcChwKX0sdy5wcm90b3R5cGUuZ3Rlbj1m''@;'; put 'put ''dW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbXBuKHApPj0wfSx3LnByb3RvdHlwZS5ndGU9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY21wKHApPj0wfSx3LnByb3RvdHlwZS5sdG49ZnVuY3Rpb24ocCl7cmV0dXJuLTE9PT10aGlzLmNtcG4ocCl9LHcucHJvdG90eXBlLmx0PWZ1bmN0aW9uKHAp''@;'; put 'put ''e3JldHVybi0xPT09dGhpcy5jbXAocCl9LHcucHJvdG90eXBlLmx0ZW49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY21wbihwKTw9MH0sdy5wcm90b3R5cGUubHRlPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNtcChwKTw9MH0sdy5wcm90b3R5cGUuZXFuPWZ1bmN0aW9uKHApe3JldHVybiAw''@;'; put 'put ''PT09dGhpcy5jbXBuKHApfSx3LnByb3RvdHlwZS5lcT1mdW5jdGlvbihwKXtyZXR1cm4gMD09PXRoaXMuY21wKHApfSx3LnJlZD1mdW5jdGlvbihwKXtyZXR1cm4gbmV3IFNlKHApfSx3LnByb3RvdHlwZS50b1JlZD1mdW5jdGlvbihwKXtyZXR1cm4gZyghdGhpcy5yZWQsIkFscmVhZHkgYSBu''@;'; put 'put ''dW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSxnKDA9PT10aGlzLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLHAuY29udmVydFRvKHRoaXMpLl9mb3JjZVJlZChwKX0sdy5wcm90b3R5cGUuZnJvbVJlZD1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJm''@;'; put 'put ''cm9tUmVkIHdvcmtzIG9ubHkgd2l0aCBudW1iZXJzIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5yZWQuY29udmVydEZyb20odGhpcyl9LHcucHJvdG90eXBlLl9mb3JjZVJlZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5yZWQ9cCx0aGlzfSx3LnByb3RvdHlwZS5mb3JjZVJlZD1mdW5j''@;'; put 'put ''dGlvbihwKXtyZXR1cm4gZyghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLl9mb3JjZVJlZChwKX0sdy5wcm90b3R5cGUucmVkQWRkPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBu''@;'; put 'put ''dW1iZXJzIiksdGhpcy5yZWQuYWRkKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZElBZGQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZElBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaWFkZCh0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRTdWI9ZnVu''@;'; put 'put ''Y3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZFN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zdWIodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkSVN1Yj1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkSVN1YiB3b3JrcyBvbmx5IHdpdGggcmVk''@;'; put 'put ''IG51bWJlcnMiKSx0aGlzLnJlZC5pc3ViKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZFNobD1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkU2hsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnNobCh0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRNdWw9ZnVu''@;'; put 'put ''Y3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLHApLHRoaXMucmVkLm11bCh0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRJTXVsPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJy''@;'; put 'put ''ZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxwKSx0aGlzLnJlZC5pbXVsKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZFNxcj1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWRTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1i''@;'; put 'put ''ZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FyKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRJU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZElTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhp''@;'; put 'put ''cy5yZWQuaXNxcih0aGlzKX0sdy5wcm90b3R5cGUucmVkU3FydD1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWRTcXJ0IHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcnQodGhpcyl9LHcucHJvdG90eXBlLnJl''@;'; put 'put ''ZEludm09ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkSW52bSB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pbnZtKHRoaXMpfSx3LnByb3RvdHlwZS5yZWROZWc9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJl''@;'; put 'put ''ZCwicmVkTmVnIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLm5lZyh0aGlzKX0sdy5wcm90b3R5cGUucmVkUG93PWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkJiYhcC5yZWQsInJlZFBvdyhub3JtYWxOdW0pIiksdGhp''@;'; put 'put ''cy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQucG93KHRoaXMscCl9O3ZhciBuZT17azI1NjpudWxsLHAyMjQ6bnVsbCxwMTkyOm51bGwscDI1NTE5Om51bGx9O2Z1bmN0aW9uIGllKFYscCl7dGhpcy5uYW1lPVYsdGhpcy5wPW5ldyB3KHAsMTYpLHRoaXMubj10aGlzLnAuYml0TGVuZ3Ro''@;'; put 'put ''KCksdGhpcy5rPW5ldyB3KDEpLml1c2hsbih0aGlzLm4pLmlzdWIodGhpcy5wKSx0aGlzLnRtcD10aGlzLl90bXAoKX1mdW5jdGlvbiBsZSgpe2llLmNhbGwodGhpcywiazI1NiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZl''@;'; put 'put ''IGZmZmZmYzJmIil9ZnVuY3Rpb24gbWUoKXtpZS5jYWxsKHRoaXMsInAyMjQiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMSIpfWZ1bmN0aW9uIF9lKCl7aWUuY2FsbCh0aGlzLCJwMTkyIiwiZmZmZmZmZmYgZmZmZmZmZmYg''@;'; put 'put ''ZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYiKX1mdW5jdGlvbiBUZSgpe2llLmNhbGwodGhpcywiMjU1MTkiLCI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkIil9ZnVuY3Rpb24gU2UoVil7aWYoInN0''@;'; put 'put ''cmluZyI9PXR5cGVvZiBWKXt2YXIgcD13Ll9wcmltZShWKTt0aGlzLm09cC5wLHRoaXMucHJpbWU9cH1lbHNlIGcoVi5ndG4oMSksIm1vZHVsdXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gMSIpLHRoaXMubT1WLHRoaXMucHJpbWU9bnVsbH1mdW5jdGlvbiBqZShWKXtTZS5jYWxsKHRoaXMsViks''@;'; put 'put ''dGhpcy5zaGlmdD10aGlzLm0uYml0TGVuZ3RoKCksdGhpcy5zaGlmdCUyNiE9MCYmKHRoaXMuc2hpZnQrPTI2LXRoaXMuc2hpZnQlMjYpLHRoaXMucj1uZXcgdygxKS5pdXNobG4odGhpcy5zaGlmdCksdGhpcy5yMj10aGlzLmltb2QodGhpcy5yLnNxcigpKSx0aGlzLnJpbnY9dGhpcy5yLl9p''@;'; put 'put ''bnZtcCh0aGlzLm0pLHRoaXMubWludj10aGlzLnJpbnYubXVsKHRoaXMucikuaXN1Ym4oMSkuZGl2KHRoaXMubSksdGhpcy5taW52PXRoaXMubWludi51bW9kKHRoaXMuciksdGhpcy5taW52PXRoaXMuci5zdWIodGhpcy5taW52KX1pZS5wcm90b3R5cGUuX3RtcD1mdW5jdGlvbigpe3ZhciBw''@;'; put 'put ''PW5ldyB3KG51bGwpO3JldHVybiBwLndvcmRzPW5ldyBBcnJheShNYXRoLmNlaWwodGhpcy5uLzEzKSkscH0saWUucHJvdG90eXBlLmlyZWR1Y2U9ZnVuY3Rpb24ocCl7dmFyIHgsYj1wO2Rve3RoaXMuc3BsaXQoYix0aGlzLnRtcCkseD0oYj0oYj10aGlzLmltdWxLKGIpKS5pYWRkKHRoaXMu''@;'; put 'put ''dG1wKSkuYml0TGVuZ3RoKCl9d2hpbGUoeD50aGlzLm4pO3ZhciBDPXg8dGhpcy5uPy0xOmIudWNtcCh0aGlzLnApO3JldHVybiAwPT09Qz8oYi53b3Jkc1swXT0wLGIubGVuZ3RoPTEpOkM+MD9iLmlzdWIodGhpcy5wKTp2b2lkIDAhPT1iLnN0cmlwP2Iuc3RyaXAoKTpiLl9zdHJpcCgpLGJ9''@;'; put 'put ''LGllLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihwLGIpe3AuaXVzaHJuKHRoaXMubiwwLGIpfSxpZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24ocCl7cmV0dXJuIHAuaW11bCh0aGlzLmspfSxCKGxlLGllKSxsZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24ocCxiKXtmb3IodmFyIHg9NDE5''@;'; put 'put ''NDMwMyxDPU1hdGgubWluKHAubGVuZ3RoLDkpLFQ9MDtUPEM7VCsrKWIud29yZHNbVF09cC53b3Jkc1tUXTtpZihiLmxlbmd0aD1DLHAubGVuZ3RoPD05KXJldHVybiBwLndvcmRzWzBdPTAsdm9pZChwLmxlbmd0aD0xKTt2YXIgSD1wLndvcmRzWzldO2ZvcihiLndvcmRzW2IubGVuZ3RoKytd''@;'; put 'put ''PUgmeCxUPTEwO1Q8cC5sZW5ndGg7VCsrKXt2YXIgaj0wfHAud29yZHNbVF07cC53b3Jkc1tULTEwXT0oaiZ4KTw8NHxIPj4+MjIsSD1qfXAud29yZHNbVC0xMF09SD4+Pj0yMixwLmxlbmd0aC09MD09PUgmJnAubGVuZ3RoPjEwPzEwOjl9LGxlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihw''@;'; put 'put ''KXtwLndvcmRzW3AubGVuZ3RoXT0wLHAud29yZHNbcC5sZW5ndGgrMV09MCxwLmxlbmd0aCs9Mjtmb3IodmFyIGI9MCx4PTA7eDxwLmxlbmd0aDt4Kyspe3ZhciBDPTB8cC53b3Jkc1t4XTtwLndvcmRzW3hdPTY3MTA4ODYzJihiKz05NzcqQyksYj02NCpDKyhiLzY3MTA4ODY0fDApfXJldHVy''@;'; put 'put ''biAwPT09cC53b3Jkc1twLmxlbmd0aC0xXSYmKHAubGVuZ3RoLS0sMD09PXAud29yZHNbcC5sZW5ndGgtMV0mJnAubGVuZ3RoLS0pLHB9LEIobWUsaWUpLEIoX2UsaWUpLEIoVGUsaWUpLFRlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihwKXtmb3IodmFyIGI9MCx4PTA7eDxwLmxlbmd0aDt4''@;'; put 'put ''Kyspe3ZhciBDPTE5KigwfHAud29yZHNbeF0pK2IsVD02NzEwODg2MyZDO0M+Pj49MjYscC53b3Jkc1t4XT1ULGI9Q31yZXR1cm4gMCE9PWImJihwLndvcmRzW3AubGVuZ3RoKytdPWIpLHB9LHcuX3ByaW1lPWZ1bmN0aW9uKHApe2lmKG5lW3BdKXJldHVybiBuZVtwXTt2YXIgYjtpZigiazI1''@;'; put 'put ''NiI9PT1wKWI9bmV3IGxlO2Vsc2UgaWYoInAyMjQiPT09cCliPW5ldyBtZTtlbHNlIGlmKCJwMTkyIj09PXApYj1uZXcgX2U7ZWxzZXtpZigicDI1NTE5IiE9PXApdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIHByaW1lICIrcCk7Yj1uZXcgVGV9cmV0dXJuIG5lW3BdPWIsYn0sU2UucHJvdG90''@;'; put 'put ''eXBlLl92ZXJpZnkxPWZ1bmN0aW9uKHApe2coMD09PXAubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksZyhwLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxTZS5wcm90b3R5cGUuX3ZlcmlmeTI9ZnVuY3Rpb24ocCxiKXtnKCEocC5uZWdh''@;'; put 'put ''dGl2ZXxiLm5lZ2F0aXZlKSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxnKHAucmVkJiZwLnJlZD09PWIucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LFNlLnByb3RvdHlwZS5pbW9kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLnByaW1lP3RoaXMucHJp''@;'; put 'put ''bWUuaXJlZHVjZShwKS5fZm9yY2VSZWQodGhpcyk6cC51bW9kKHRoaXMubSkuX2ZvcmNlUmVkKHRoaXMpfSxTZS5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKHApe3JldHVybiBwLmlzWmVybygpP3AuY2xvbmUoKTp0aGlzLm0uc3ViKHApLl9mb3JjZVJlZCh0aGlzKX0sU2UucHJvdG90eXBlLmFk''@;'; put 'put ''ZD1mdW5jdGlvbihwLGIpe3RoaXMuX3ZlcmlmeTIocCxiKTt2YXIgeD1wLmFkZChiKTtyZXR1cm4geC5jbXAodGhpcy5tKT49MCYmeC5pc3ViKHRoaXMubSkseC5fZm9yY2VSZWQodGhpcyl9LFNlLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKHAsYil7dGhpcy5fdmVyaWZ5MihwLGIpO3ZhciB4''@;'; put 'put ''PXAuaWFkZChiKTtyZXR1cm4geC5jbXAodGhpcy5tKT49MCYmeC5pc3ViKHRoaXMubSkseH0sU2UucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihwLGIpe3RoaXMuX3ZlcmlmeTIocCxiKTt2YXIgeD1wLnN1YihiKTtyZXR1cm4geC5jbXBuKDApPDAmJnguaWFkZCh0aGlzLm0pLHguX2ZvcmNlUmVk''@;'; put 'put ''KHRoaXMpfSxTZS5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihwLGIpe3RoaXMuX3ZlcmlmeTIocCxiKTt2YXIgeD1wLmlzdWIoYik7cmV0dXJuIHguY21wbigwKTwwJiZ4LmlhZGQodGhpcy5tKSx4fSxTZS5wcm90b3R5cGUuc2hsPWZ1bmN0aW9uKHAsYil7cmV0dXJuIHRoaXMuX3ZlcmlmeTEo''@;'; put 'put ''cCksdGhpcy5pbW9kKHAudXNobG4oYikpfSxTZS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihwLGIpe3JldHVybiB0aGlzLl92ZXJpZnkyKHAsYiksdGhpcy5pbW9kKHAuaW11bChiKSl9LFNlLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihwLGIpLHRo''@;'; put 'put ''aXMuaW1vZChwLm11bChiKSl9LFNlLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmltdWwocCxwLmNsb25lKCkpfSxTZS5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLm11bChwLHApfSxTZS5wcm90b3R5cGUuc3FydD1mdW5jdGlvbihwKXtpZihw''@;'; put 'put ''LmlzWmVybygpKXJldHVybiBwLmNsb25lKCk7dmFyIGI9dGhpcy5tLmFuZGxuKDMpO2lmKGcoYiUyPT0xKSwzPT09Yil7dmFyIHg9dGhpcy5tLmFkZChuZXcgdygxKSkuaXVzaHJuKDIpO3JldHVybiB0aGlzLnBvdyhwLHgpfWZvcih2YXIgQz10aGlzLm0uc3VibigxKSxUPTA7IUMuaXNaZXJv''@;'; put 'put ''KCkmJjA9PT1DLmFuZGxuKDEpOylUKyssQy5pdXNocm4oMSk7ZyghQy5pc1plcm8oKSk7dmFyIEg9bmV3IHcoMSkudG9SZWQodGhpcyksaj1ILnJlZE5lZygpLEU9dGhpcy5tLnN1Ym4oMSkuaXVzaHJuKDEpLG09dGhpcy5tLmJpdExlbmd0aCgpO2ZvcihtPW5ldyB3KDIqbSptKS50b1JlZCh0''@;'; put 'put ''aGlzKTswIT09dGhpcy5wb3cobSxFKS5jbXAoaik7KW0ucmVkSUFkZChqKTtmb3IodmFyIEE9dGhpcy5wb3cobSxDKSxhZT10aGlzLnBvdyhwLEMuYWRkbigxKS5pdXNocm4oMSkpLHRlPXRoaXMucG93KHAsQyksc2U9VDswIT09dGUuY21wKEgpOyl7Zm9yKHZhciB3ZT10ZSxVZT0wOzAhPT13''@;'; put 'put ''ZS5jbXAoSCk7VWUrKyl3ZT13ZS5yZWRTcXIoKTtnKFVlPHNlKTt2YXIgSmU9dGhpcy5wb3coQSxuZXcgdygxKS5pdXNobG4oc2UtVWUtMSkpO2FlPWFlLnJlZE11bChKZSksQT1KZS5yZWRTcXIoKSx0ZT10ZS5yZWRNdWwoQSksc2U9VWV9cmV0dXJuIGFlfSxTZS5wcm90b3R5cGUuaW52bT1m''@;'; put 'put ''dW5jdGlvbihwKXt2YXIgYj1wLl9pbnZtcCh0aGlzLm0pO3JldHVybiAwIT09Yi5uZWdhdGl2ZT8oYi5uZWdhdGl2ZT0wLHRoaXMuaW1vZChiKS5yZWROZWcoKSk6dGhpcy5pbW9kKGIpfSxTZS5wcm90b3R5cGUucG93PWZ1bmN0aW9uKHAsYil7aWYoYi5pc1plcm8oKSlyZXR1cm4gbmV3IHco''@;'; put 'put ''MSkudG9SZWQodGhpcyk7aWYoMD09PWIuY21wbigxKSlyZXR1cm4gcC5jbG9uZSgpO3ZhciBDPW5ldyBBcnJheSgxNik7Q1swXT1uZXcgdygxKS50b1JlZCh0aGlzKSxDWzFdPXA7Zm9yKHZhciBUPTI7VDxDLmxlbmd0aDtUKyspQ1tUXT10aGlzLm11bChDW1QtMV0scCk7dmFyIEg9Q1swXSxq''@;'; put 'put ''PTAsRT0wLG09Yi5iaXRMZW5ndGgoKSUyNjtmb3IoMD09PW0mJihtPTI2KSxUPWIubGVuZ3RoLTE7VD49MDtULS0pe2Zvcih2YXIgQT1iLndvcmRzW1RdLGFlPW0tMTthZT49MDthZS0tKXt2YXIgdGU9QT4+YWUmMTtIIT09Q1swXSYmKEg9dGhpcy5zcXIoSCkpLDAhPT10ZXx8MCE9PWo/KGo8''@;'; put 'put ''PD0xLGp8PXRlLCg0PT0rK0V8fDA9PT1UJiYwPT09YWUpJiYoSD10aGlzLm11bChILENbal0pLEU9MCxqPTApKTpFPTB9bT0yNn1yZXR1cm4gSH0sU2UucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihwKXt2YXIgYj1wLnVtb2QodGhpcy5tKTtyZXR1cm4gYj09PXA/Yi5jbG9uZSgpOmJ9''@;'; put 'put ''LFNlLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihwKXt2YXIgYj1wLmNsb25lKCk7cmV0dXJuIGIucmVkPW51bGwsYn0sdy5tb250PWZ1bmN0aW9uKHApe3JldHVybiBuZXcgamUocCl9LEIoamUsU2UpLGplLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24ocCl7cmV0dXJuIHRo''@;'; put 'put ''aXMuaW1vZChwLnVzaGxuKHRoaXMuc2hpZnQpKX0samUucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKHApe3ZhciBiPXRoaXMuaW1vZChwLm11bCh0aGlzLnJpbnYpKTtyZXR1cm4gYi5yZWQ9bnVsbCxifSxqZS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihwLGIpe2lmKHAuaXNaZXJv''@;'; put 'put ''KCl8fGIuaXNaZXJvKCkpcmV0dXJuIHAud29yZHNbMF09MCxwLmxlbmd0aD0xLHA7dmFyIHg9cC5pbXVsKGIpLEM9eC5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksVD14LmlzdWIoQykuaXVzaHJuKHRoaXMuc2hpZnQpLEg9''@;'; put 'put ''VDtyZXR1cm4gVC5jbXAodGhpcy5tKT49MD9IPVQuaXN1Yih0aGlzLm0pOlQuY21wbigwKTwwJiYoSD1ULmlhZGQodGhpcy5tKSksSC5fZm9yY2VSZWQodGhpcyl9LGplLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24ocCxiKXtpZihwLmlzWmVybygpfHxiLmlzWmVybygpKXJldHVybiBuZXcgdygw''@;'; put 'put ''KS5fZm9yY2VSZWQodGhpcyk7dmFyIHg9cC5tdWwoYiksQz14Lm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxUPXguaXN1YihDKS5pdXNocm4odGhpcy5zaGlmdCksSD1UO3JldHVybiBULmNtcCh0aGlzLm0pPj0wP0g9VC5p''@;'; put 'put ''c3ViKHRoaXMubSk6VC5jbXBuKDApPDAmJihIPVQuaWFkZCh0aGlzLm0pKSxILl9mb3JjZVJlZCh0aGlzKX0samUucHJvdG90eXBlLmludm09ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuaW1vZChwLl9pbnZtcCh0aGlzLm0pLm11bCh0aGlzLnIyKSkuX2ZvcmNlUmVkKHRoaXMpfX0odWU9eS5u''@;'; put 'put ''bWQodWUpLHRoaXMpfSw5MjgyOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNDE1NSksXz15KDUxMDgpO2Z1bmN0aW9uIGcoVmUpe3JldHVybihnPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGtlKXty''@;'; put 'put ''ZXR1cm4gdHlwZW9mIGtlfTpmdW5jdGlvbihrZSl7cmV0dXJuIGtlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZrZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYma2UhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBrZX0pKFZlKX1mdW5jdGlvbiBCKFZlLGtlKXtmb3IodmFy''@;'; put 'put ''IEFlPTA7QWU8a2UubGVuZ3RoO0FlKyspe3ZhciBfdD1rZVtBZV07X3QuZW51bWVyYWJsZT1fdC5lbnVtZXJhYmxlfHwhMSxfdC5jb25maWd1cmFibGU9ITAsInZhbHVlImluIF90JiYoX3Qud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShWZSxQKF90LmtleSksX3QpfX1mdW5j''@;'; put 'put ''dGlvbiB3KFZlLGtlLEFlKXtyZXR1cm4ga2UmJkIoVmUucHJvdG90eXBlLGtlKSxBZSYmQihWZSxBZSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFZlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLFZlfWZ1bmN0aW9uIFAoVmUpe3ZhciBrZT1mdW5jdGlvbiBGKFZlLGtlKXtpZigib2JqZWN0''@;'; put 'put ''IiE9PWcoVmUpfHxudWxsPT09VmUpcmV0dXJuIFZlO3ZhciBBZT1WZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PUFlKXt2YXIgX3Q9QWUuY2FsbChWZSxrZXx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9PWcoX3QpKXJldHVybiBfdDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRv''@;'; put 'put ''UHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWtlP1N0cmluZzpOdW1iZXIpKFZlKX0oVmUsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT09ZyhrZSk/a2U6U3RyaW5nKGtlKX12YXIgamUsVixOPXkoMjEzNikuY29kZXMsTD1OLkVS''@;'; put 'put ''Ul9BTUJJR1VPVVNfQVJHVU1FTlQsSz1OLkVSUl9JTlZBTElEX0FSR19UWVBFLFU9Ti5FUlJfSU5WQUxJRF9BUkdfVkFMVUUsVz1OLkVSUl9JTlZBTElEX1JFVFVSTl9WQUxVRSxZPU4uRVJSX01JU1NJTkdfQVJHUyxxPXkoNTk2MSksSj15KDk1MzkpLmluc3BlY3QsbmU9eSg5NTM5KS50eXBl''@;'; put 'put ''cyxpZT1uZS5pc1Byb21pc2UsbGU9bmUuaXNSZWdFeHAsbWU9eSg4MTYyKSgpLF9lPXkoNTYyNCkoKSxUZT15KDE5MjQpKCJSZWdFeHAucHJvdG90eXBlLnRlc3QiKTtmdW5jdGlvbiBDKCl7dmFyIFZlPXkoOTE1OCk7amU9VmUuaXNEZWVwRXF1YWwsVj1WZS5pc0RlZXBTdHJpY3RFcXVhbH12''@;'; put 'put ''YXIgRT0hMSxtPXVlLmV4cG9ydHM9d2UsQT17fTtmdW5jdGlvbiBhZShWZSl7dGhyb3cgVmUubWVzc2FnZSBpbnN0YW5jZW9mIEVycm9yP1ZlLm1lc3NhZ2U6bmV3IHEoVmUpfWZ1bmN0aW9uIHNlKFZlLGtlLEFlLF90KXtpZighQWUpe3ZhciBudD0hMTtpZigwPT09a2UpbnQ9ITAsX3Q9Ik5v''@;'; put 'put ''IHZhbHVlIGFyZ3VtZW50IHBhc3NlZCB0byBgYXNzZXJ0Lm9rKClgIjtlbHNlIGlmKF90IGluc3RhbmNlb2YgRXJyb3IpdGhyb3cgX3Q7dmFyIFFlPW5ldyBxKHthY3R1YWw6QWUsZXhwZWN0ZWQ6ITAsbWVzc2FnZTpfdCxvcGVyYXRvcjoiPT0iLHN0YWNrU3RhcnRGbjpWZX0pO3Rocm93IFFl''@;'; put 'put ''LmdlbmVyYXRlZE1lc3NhZ2U9bnQsUWV9fWZ1bmN0aW9uIHdlKCl7Zm9yKHZhciBWZT1hcmd1bWVudHMubGVuZ3RoLGtlPW5ldyBBcnJheShWZSksQWU9MDtBZTxWZTtBZSsrKWtlW0FlXT1hcmd1bWVudHNbQWVdO3NlLmFwcGx5KHZvaWQgMCxbd2Usa2UubGVuZ3RoXS5jb25jYXQoa2UpKX1t''@;'; put 'put ''LmZhaWw9ZnVuY3Rpb24gdGUoVmUsa2UsQWUsX3QsbnQpe3ZhciB1bixRZT1hcmd1bWVudHMubGVuZ3RoO2lmKDA9PT1RZT91bj0iRmFpbGVkIjoxPT09UWU/KEFlPVZlLFZlPXZvaWQgMCk6KCExPT09RSYmKEU9ITAsKEkuZW1pdFdhcm5pbmc/SS5lbWl0V2FybmluZzpfLndhcm4uYmluZChf''@;'; put 'put ''KSkoImFzc2VydC5mYWlsKCkgd2l0aCBtb3JlIHRoYW4gb25lIGFyZ3VtZW50IGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgYXNzZXJ0LnN0cmljdEVxdWFsKCkgaW5zdGVhZCBvciBvbmx5IHBhc3MgYSBtZXNzYWdlLiIsIkRlcHJlY2F0aW9uV2FybmluZyIsIkRFUDAwOTQiKSksMj09PVFl''@;'; put 'put ''JiYoX3Q9IiE9IikpLEFlIGluc3RhbmNlb2YgRXJyb3IpdGhyb3cgQWU7dmFyIE10PXthY3R1YWw6VmUsZXhwZWN0ZWQ6a2Usb3BlcmF0b3I6dm9pZCAwPT09X3Q/ImZhaWwiOl90LHN0YWNrU3RhcnRGbjpudHx8dGV9O3ZvaWQgMCE9PUFlJiYoTXQubWVzc2FnZT1BZSk7dmFyIER0PW5ldyBx''@;'; put 'put ''KE10KTt0aHJvdyB1biYmKER0Lm1lc3NhZ2U9dW4sRHQuZ2VuZXJhdGVkTWVzc2FnZT0hMCksRHR9LG0uQXNzZXJ0aW9uRXJyb3I9cSxtLm9rPXdlLG0uZXF1YWw9ZnVuY3Rpb24gVmUoa2UsQWUsX3Qpe2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil0aHJvdyBuZXcgWSgiYWN0dWFsIiwiZXhwZWN0''@;'; put 'put ''ZWQiKTtrZSE9QWUmJmFlKHthY3R1YWw6a2UsZXhwZWN0ZWQ6QWUsbWVzc2FnZTpfdCxvcGVyYXRvcjoiPT0iLHN0YWNrU3RhcnRGbjpWZX0pfSxtLm5vdEVxdWFsPWZ1bmN0aW9uIFZlKGtlLEFlLF90KXtpZihhcmd1bWVudHMubGVuZ3RoPDIpdGhyb3cgbmV3IFkoImFjdHVhbCIsImV4cGVj''@;'; put 'put ''dGVkIik7a2U9PUFlJiZhZSh7YWN0dWFsOmtlLGV4cGVjdGVkOkFlLG1lc3NhZ2U6X3Qsb3BlcmF0b3I6IiE9IixzdGFja1N0YXJ0Rm46VmV9KX0sbS5kZWVwRXF1YWw9ZnVuY3Rpb24gVmUoa2UsQWUsX3Qpe2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil0aHJvdyBuZXcgWSgiYWN0dWFsIiwiZXhw''@;'; put 'put ''ZWN0ZWQiKTt2b2lkIDA9PT1qZSYmQygpLGplKGtlLEFlKXx8YWUoe2FjdHVhbDprZSxleHBlY3RlZDpBZSxtZXNzYWdlOl90LG9wZXJhdG9yOiJkZWVwRXF1YWwiLHN0YWNrU3RhcnRGbjpWZX0pfSxtLm5vdERlZXBFcXVhbD1mdW5jdGlvbiBWZShrZSxBZSxfdCl7aWYoYXJndW1lbnRzLmxl''@;'; put 'put ''bmd0aDwyKXRocm93IG5ldyBZKCJhY3R1YWwiLCJleHBlY3RlZCIpO3ZvaWQgMD09PWplJiZDKCksamUoa2UsQWUpJiZhZSh7YWN0dWFsOmtlLGV4cGVjdGVkOkFlLG1lc3NhZ2U6X3Qsb3BlcmF0b3I6Im5vdERlZXBFcXVhbCIsc3RhY2tTdGFydEZuOlZlfSl9LG0uZGVlcFN0cmljdEVxdWFs''@;'; put 'put ''PWZ1bmN0aW9uIFZlKGtlLEFlLF90KXtpZihhcmd1bWVudHMubGVuZ3RoPDIpdGhyb3cgbmV3IFkoImFjdHVhbCIsImV4cGVjdGVkIik7dm9pZCAwPT09amUmJkMoKSxWKGtlLEFlKXx8YWUoe2FjdHVhbDprZSxleHBlY3RlZDpBZSxtZXNzYWdlOl90LG9wZXJhdG9yOiJkZWVwU3RyaWN0RXF1''@;'; put 'put ''YWwiLHN0YWNrU3RhcnRGbjpWZX0pfSxtLm5vdERlZXBTdHJpY3RFcXVhbD1mdW5jdGlvbiBVZShWZSxrZSxBZSl7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXRocm93IG5ldyBZKCJhY3R1YWwiLCJleHBlY3RlZCIpO3ZvaWQgMD09PWplJiZDKCksVihWZSxrZSkmJmFlKHthY3R1YWw6VmUsZXhw''@;'; put 'put ''ZWN0ZWQ6a2UsbWVzc2FnZTpBZSxvcGVyYXRvcjoibm90RGVlcFN0cmljdEVxdWFsIixzdGFja1N0YXJ0Rm46VWV9KX0sbS5zdHJpY3RFcXVhbD1mdW5jdGlvbiBWZShrZSxBZSxfdCl7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXRocm93IG5ldyBZKCJhY3R1YWwiLCJleHBlY3RlZCIpO19lKGtl''@;'; put 'put ''LEFlKXx8YWUoe2FjdHVhbDprZSxleHBlY3RlZDpBZSxtZXNzYWdlOl90LG9wZXJhdG9yOiJzdHJpY3RFcXVhbCIsc3RhY2tTdGFydEZuOlZlfSl9LG0ubm90U3RyaWN0RXF1YWw9ZnVuY3Rpb24gVmUoa2UsQWUsX3Qpe2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil0aHJvdyBuZXcgWSgiYWN0dWFs''@;'; put 'put ''IiwiZXhwZWN0ZWQiKTtfZShrZSxBZSkmJmFlKHthY3R1YWw6a2UsZXhwZWN0ZWQ6QWUsbWVzc2FnZTpfdCxvcGVyYXRvcjoibm90U3RyaWN0RXF1YWwiLHN0YWNrU3RhcnRGbjpWZX0pfTt2YXIgSmU9dyhmdW5jdGlvbiBWZShrZSxBZSxfdCl7dmFyIG50PXRoaXM7KGZ1bmN0aW9uIE8oVmUs''@;'; put 'put ''a2Upe2lmKCEoVmUgaW5zdGFuY2VvZiBrZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KSh0aGlzLFZlKSxBZS5mb3JFYWNoKGZ1bmN0aW9uKFFlKXtRZSBpbiBrZSYmKG50W1FlXT12b2lkIDAhPT1fdCYmInN0cmluZyI9PXR5cGVv''@;'; put 'put ''ZiBfdFtRZV0mJmxlKGtlW1FlXSkmJlRlKGtlW1FlXSxfdFtRZV0pP190W1FlXTprZVtRZV0pfSl9KTtmdW5jdGlvbiB4ZShWZSxrZSxBZSxfdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGtlKXtpZihsZShrZSkpcmV0dXJuIFRlKGtlLFZlKTtpZigyPT09YXJndW1lbnRzLmxlbmd0aCl0aHJv''@;'; put 'put ''dyBuZXcgSygiZXhwZWN0ZWQiLFsiRnVuY3Rpb24iLCJSZWdFeHAiXSxrZSk7aWYoIm9iamVjdCIhPT1nKFZlKXx8bnVsbD09PVZlKXt2YXIgbnQ9bmV3IHEoe2FjdHVhbDpWZSxleHBlY3RlZDprZSxtZXNzYWdlOkFlLG9wZXJhdG9yOiJkZWVwU3RyaWN0RXF1YWwiLHN0YWNrU3RhcnRGbjpf''@;'; put 'put ''dH0pO3Rocm93IG50Lm9wZXJhdG9yPV90Lm5hbWUsbnR9dmFyIFFlPU9iamVjdC5rZXlzKGtlKTtpZihrZSBpbnN0YW5jZW9mIEVycm9yKVFlLnB1c2goIm5hbWUiLCJtZXNzYWdlIik7ZWxzZSBpZigwPT09UWUubGVuZ3RoKXRocm93IG5ldyBVKCJlcnJvciIsa2UsIm1heSBub3QgYmUgYW4g''@;'; put 'put ''ZW1wdHkgb2JqZWN0Iik7cmV0dXJuIHZvaWQgMD09PWplJiZDKCksUWUuZm9yRWFjaChmdW5jdGlvbih1bil7InN0cmluZyI9PXR5cGVvZiBWZVt1bl0mJmxlKGtlW3VuXSkmJlRlKGtlW3VuXSxWZVt1bl0pfHxmdW5jdGlvbiBvdChWZSxrZSxBZSxfdCxudCxRZSl7aWYoIShBZSBpbiBWZSl8''@;'; put 'put ''fCFWKFZlW0FlXSxrZVtBZV0pKXtpZighX3Qpe3ZhciB1bj1uZXcgSmUoVmUsbnQpLHl0PW5ldyBKZShrZSxudCxWZSksTXQ9bmV3IHEoe2FjdHVhbDp1bixleHBlY3RlZDp5dCxvcGVyYXRvcjoiZGVlcFN0cmljdEVxdWFsIixzdGFja1N0YXJ0Rm46UWV9KTt0aHJvdyBNdC5hY3R1YWw9VmUs''@;'; put 'put ''TXQuZXhwZWN0ZWQ9a2UsTXQub3BlcmF0b3I9UWUubmFtZSxNdH1hZSh7YWN0dWFsOlZlLGV4cGVjdGVkOmtlLG1lc3NhZ2U6X3Qsb3BlcmF0b3I6UWUubmFtZSxzdGFja1N0YXJ0Rm46UWV9KX19KFZlLGtlLHVuLEFlLFFlLF90KX0pLCEwfXJldHVybiB2b2lkIDAhPT1rZS5wcm90b3R5cGUm''@;'; put 'put ''JlZlIGluc3RhbmNlb2Yga2V8fCFFcnJvci5pc1Byb3RvdHlwZU9mKGtlKSYmITA9PT1rZS5jYWxsKHt9LFZlKX1mdW5jdGlvbiB2ZShWZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIFZlKXRocm93IG5ldyBLKCJmbiIsIkZ1bmN0aW9uIixWZSk7dHJ5e1ZlKCl9Y2F0Y2goa2Upe3JldHVybiBr''@;'; put 'put ''ZX1yZXR1cm4gQX1mdW5jdGlvbiBYZShWZSl7cmV0dXJuIGllKFZlKXx8bnVsbCE9PVZlJiYib2JqZWN0Ij09PWcoVmUpJiYiZnVuY3Rpb24iPT10eXBlb2YgVmUudGhlbiYmImZ1bmN0aW9uIj09dHlwZW9mIFZlLmNhdGNofWZ1bmN0aW9uIHplKFZlKXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZl''@;'; put 'put ''KCkudGhlbihmdW5jdGlvbigpe3ZhciBrZTtpZigiZnVuY3Rpb24iPT10eXBlb2YgVmUpe2lmKCFYZShrZT1WZSgpKSl0aHJvdyBuZXcgVygiaW5zdGFuY2Ugb2YgUHJvbWlzZSIsInByb21pc2VGbiIsa2UpfWVsc2V7aWYoIVhlKFZlKSl0aHJvdyBuZXcgSygicHJvbWlzZUZuIixbIkZ1bmN0''@;'; put 'put ''aW9uIiwiUHJvbWlzZSJdLFZlKTtrZT1WZX1yZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbigpe3JldHVybiBrZX0pLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gQX0pLmNhdGNoKGZ1bmN0aW9uKEFlKXtyZXR1cm4gQWV9KX0pfWZ1bmN0aW9uIERlKFZlLGtlLEFlLF90KXtp''@;'; put 'put ''Zigic3RyaW5nIj09dHlwZW9mIEFlKXtpZig0PT09YXJndW1lbnRzLmxlbmd0aCl0aHJvdyBuZXcgSygiZXJyb3IiLFsiT2JqZWN0IiwiRXJyb3IiLCJGdW5jdGlvbiIsIlJlZ0V4cCJdLEFlKTtpZigib2JqZWN0Ij09PWcoa2UpJiZudWxsIT09a2Upe2lmKGtlLm1lc3NhZ2U9PT1BZSl0aHJv''@;'; put 'put ''dyBuZXcgTCgiZXJyb3IvbWVzc2FnZSIsJ1RoZSBlcnJvciBtZXNzYWdlICInLmNvbmNhdChrZS5tZXNzYWdlLCciIGlzIGlkZW50aWNhbCB0byB0aGUgbWVzc2FnZS4nKSl9ZWxzZSBpZihrZT09PUFlKXRocm93IG5ldyBMKCJlcnJvci9tZXNzYWdlIiwnVGhlIGVycm9yICInLmNvbmNhdChr''@;'; put 'put ''ZSwnIiBpcyBpZGVudGljYWwgdG8gdGhlIG1lc3NhZ2UuJykpO190PUFlLEFlPXZvaWQgMH1lbHNlIGlmKG51bGwhPUFlJiYib2JqZWN0IiE9PWcoQWUpJiYiZnVuY3Rpb24iIT10eXBlb2YgQWUpdGhyb3cgbmV3IEsoImVycm9yIixbIk9iamVjdCIsIkVycm9yIiwiRnVuY3Rpb24iLCJSZWdF''@;'; put 'put ''eHAiXSxBZSk7aWYoa2U9PT1BKXt2YXIgbnQ9IiI7QWUmJkFlLm5hbWUmJihudCs9IiAoIi5jb25jYXQoQWUubmFtZSwiKSIpKSxudCs9X3Q/IjogIi5jb25jYXQoX3QpOiIuIixhZSh7YWN0dWFsOnZvaWQgMCxleHBlY3RlZDpBZSxvcGVyYXRvcjpWZS5uYW1lLG1lc3NhZ2U6Ik1pc3Npbmcg''@;'; put 'put ''ZXhwZWN0ZWQgIi5jb25jYXQoInJlamVjdHMiPT09VmUubmFtZT8icmVqZWN0aW9uIjoiZXhjZXB0aW9uIikuY29uY2F0KG50KSxzdGFja1N0YXJ0Rm46VmV9KX1pZihBZSYmIXhlKGtlLEFlLF90LFZlKSl0aHJvdyBrZX1mdW5jdGlvbiBGZShWZSxrZSxBZSxfdCl7aWYoa2UhPT1BKXtpZigi''@;'; put 'put ''c3RyaW5nIj09dHlwZW9mIEFlJiYoX3Q9QWUsQWU9dm9pZCAwKSwhQWV8fHhlKGtlLEFlKSl7dmFyIG50PV90PyI6ICIuY29uY2F0KF90KToiLiI7YWUoe2FjdHVhbDprZSxleHBlY3RlZDpBZSxvcGVyYXRvcjpWZS5uYW1lLG1lc3NhZ2U6IkdvdCB1bndhbnRlZCAiLmNvbmNhdCgiZG9lc05v''@;'; put 'put ''dFJlamVjdCI9PT1WZS5uYW1lPyJyZWplY3Rpb24iOiJleGNlcHRpb24iKS5jb25jYXQobnQsIlxuIikrJ0FjdHVhbCBtZXNzYWdlOiAiJy5jb25jYXQoa2UmJmtlLm1lc3NhZ2UsJyInKSxzdGFja1N0YXJ0Rm46VmV9KX10aHJvdyBrZX19ZnVuY3Rpb24gT2UoVmUsa2UsQWUsX3QsbnQpe2lm''@;'; put 'put ''KCFsZShrZSkpdGhyb3cgbmV3IEsoInJlZ2V4cCIsIlJlZ0V4cCIsa2UpO3ZhciBRZT0ibWF0Y2giPT09bnQ7aWYoInN0cmluZyIhPXR5cGVvZiBWZXx8VGUoa2UsVmUpIT09UWUpe2lmKEFlIGluc3RhbmNlb2YgRXJyb3IpdGhyb3cgQWU7dmFyIHVuPSFBZTtBZT1BZXx8KCJzdHJpbmciIT10''@;'; put 'put ''eXBlb2YgVmU/J1RoZSAic3RyaW5nIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nLiBSZWNlaXZlZCB0eXBlICcrIiIuY29uY2F0KGcoVmUpLCIgKCIpLmNvbmNhdChKKFZlKSwiKSIpOihRZT8iVGhlIGlucHV0IGRpZCBub3QgbWF0Y2ggdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiAi''@;'; put 'put ''OiJUaGUgaW5wdXQgd2FzIGV4cGVjdGVkIHRvIG5vdCBtYXRjaCB0aGUgcmVndWxhciBleHByZXNzaW9uICIpKyIiLmNvbmNhdChKKGtlKSwiLiBJbnB1dDpcblxuIikuY29uY2F0KEooVmUpLCJcbiIpKTt2YXIgeXQ9bmV3IHEoe2FjdHVhbDpWZSxleHBlY3RlZDprZSxtZXNzYWdlOkFlLG9w''@;'; put 'put ''ZXJhdG9yOm50LHN0YWNrU3RhcnRGbjpfdH0pO3Rocm93IHl0LmdlbmVyYXRlZE1lc3NhZ2U9dW4seXR9fWZ1bmN0aW9uIEllKCl7Zm9yKHZhciBWZT1hcmd1bWVudHMubGVuZ3RoLGtlPW5ldyBBcnJheShWZSksQWU9MDtBZTxWZTtBZSsrKWtlW0FlXT1hcmd1bWVudHNbQWVdO3NlLmFwcGx5''@;'; put 'put ''KHZvaWQgMCxbSWUsa2UubGVuZ3RoXS5jb25jYXQoa2UpKX1tLnRocm93cz1mdW5jdGlvbiBWZShrZSl7Zm9yKHZhciBBZT1hcmd1bWVudHMubGVuZ3RoLF90PW5ldyBBcnJheShBZT4xP0FlLTE6MCksbnQ9MTtudDxBZTtudCsrKV90W250LTFdPWFyZ3VtZW50c1tudF07RGUuYXBwbHkodm9p''@;'; put 'put ''ZCAwLFtWZSx2ZShrZSldLmNvbmNhdChfdCkpfSxtLnJlamVjdHM9ZnVuY3Rpb24gVmUoa2Upe2Zvcih2YXIgQWU9YXJndW1lbnRzLmxlbmd0aCxfdD1uZXcgQXJyYXkoQWU+MT9BZS0xOjApLG50PTE7bnQ8QWU7bnQrKylfdFtudC0xXT1hcmd1bWVudHNbbnRdO3JldHVybiB6ZShrZSkudGhl''@;'; put 'put ''bihmdW5jdGlvbihRZSl7cmV0dXJuIERlLmFwcGx5KHZvaWQgMCxbVmUsUWVdLmNvbmNhdChfdCkpfSl9LG0uZG9lc05vdFRocm93PWZ1bmN0aW9uIFZlKGtlKXtmb3IodmFyIEFlPWFyZ3VtZW50cy5sZW5ndGgsX3Q9bmV3IEFycmF5KEFlPjE/QWUtMTowKSxudD0xO250PEFlO250KyspX3Rb''@;'; put 'put ''bnQtMV09YXJndW1lbnRzW250XTtGZS5hcHBseSh2b2lkIDAsW1ZlLHZlKGtlKV0uY29uY2F0KF90KSl9LG0uZG9lc05vdFJlamVjdD1mdW5jdGlvbiBWZShrZSl7Zm9yKHZhciBBZT1hcmd1bWVudHMubGVuZ3RoLF90PW5ldyBBcnJheShBZT4xP0FlLTE6MCksbnQ9MTtudDxBZTtudCsrKV90''@;'; put 'put ''W250LTFdPWFyZ3VtZW50c1tudF07cmV0dXJuIHplKGtlKS50aGVuKGZ1bmN0aW9uKFFlKXtyZXR1cm4gRmUuYXBwbHkodm9pZCAwLFtWZSxRZV0uY29uY2F0KF90KSl9KX0sbS5pZkVycm9yPWZ1bmN0aW9uIFZlKGtlKXtpZihudWxsIT1rZSl7dmFyIEFlPSJpZkVycm9yIGdvdCB1bndhbnRl''@;'; put 'put ''ZCBleGNlcHRpb246ICI7Im9iamVjdCI9PT1nKGtlKSYmInN0cmluZyI9PXR5cGVvZiBrZS5tZXNzYWdlP0FlKz0wPT09a2UubWVzc2FnZS5sZW5ndGgmJmtlLmNvbnN0cnVjdG9yP2tlLmNvbnN0cnVjdG9yLm5hbWU6a2UubWVzc2FnZTpBZSs9SihrZSk7dmFyIF90PW5ldyBxKHthY3R1YWw6''@;'; put 'put ''a2UsZXhwZWN0ZWQ6bnVsbCxvcGVyYXRvcjoiaWZFcnJvciIsbWVzc2FnZTpBZSxzdGFja1N0YXJ0Rm46VmV9KSxudD1rZS5zdGFjaztpZigic3RyaW5nIj09dHlwZW9mIG50KXt2YXIgUWU9bnQuc3BsaXQoIlxuIik7UWUuc2hpZnQoKTtmb3IodmFyIHVuPV90LnN0YWNrLnNwbGl0KCJcbiIp''@;'; put 'put ''LHl0PTA7eXQ8UWUubGVuZ3RoO3l0Kyspe3ZhciBNdD11bi5pbmRleE9mKFFlW3l0XSk7aWYoLTEhPT1NdCl7dW49dW4uc2xpY2UoMCxNdCk7YnJlYWt9fV90LnN0YWNrPSIiLmNvbmNhdCh1bi5qb2luKCJcbiIpLCJcbiIpLmNvbmNhdChRZS5qb2luKCJcbiIpKX10aHJvdyBfdH19LG0ubWF0''@;'; put 'put ''Y2g9ZnVuY3Rpb24gVmUoa2UsQWUsX3Qpe09lKGtlLEFlLF90LFZlLCJtYXRjaCIpfSxtLmRvZXNOb3RNYXRjaD1mdW5jdGlvbiBWZShrZSxBZSxfdCl7T2Uoa2UsQWUsX3QsVmUsImRvZXNOb3RNYXRjaCIpfSxtLnN0cmljdD1tZShJZSxtLHtlcXVhbDptLnN0cmljdEVxdWFsLGRlZXBFcXVh''@;'; put 'put ''bDptLmRlZXBTdHJpY3RFcXVhbCxub3RFcXVhbDptLm5vdFN0cmljdEVxdWFsLG5vdERlZXBFcXVhbDptLm5vdERlZXBTdHJpY3RFcXVhbH0pLG0uc3RyaWN0LnN0cmljdD1tLnN0cmljdH0sNTk2MToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDQxNTUpO2Z1bmN0aW9uIF8oQSxh''@;'; put 'put ''ZSl7dmFyIHRlPU9iamVjdC5rZXlzKEEpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBzZT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKEEpO2FlJiYoc2U9c2UuZmlsdGVyKGZ1bmN0aW9uKHdlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRv''@;'; put 'put ''cihBLHdlKS5lbnVtZXJhYmxlfSkpLHRlLnB1c2guYXBwbHkodGUsc2UpfXJldHVybiB0ZX1mdW5jdGlvbiBnKEEpe2Zvcih2YXIgYWU9MTthZTxhcmd1bWVudHMubGVuZ3RoO2FlKyspe3ZhciB0ZT1udWxsIT1hcmd1bWVudHNbYWVdP2FyZ3VtZW50c1thZV06e307YWUlMj9fKE9iamVjdCh0''@;'; put 'put ''ZSksITApLmZvckVhY2goZnVuY3Rpb24oc2Upe0IoQSxzZSx0ZVtzZV0pfSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0ZSkpOl8oT2JqZWN0KHRlKSkuZm9yRWFjaChm''@;'; put 'put ''dW5jdGlvbihzZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsc2UsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0ZSxzZSkpfSl9cmV0dXJuIEF9ZnVuY3Rpb24gQihBLGFlLHRlKXtyZXR1cm4oYWU9TyhhZSkpaW4gQT9PYmplY3QuZGVmaW5lUHJvcGVydHkoQSxhZSx7dmFsdWU6''@;'; put 'put ''dGUsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpBW2FlXT10ZSxBfWZ1bmN0aW9uIFAoQSxhZSl7Zm9yKHZhciB0ZT0wO3RlPGFlLmxlbmd0aDt0ZSsrKXt2YXIgc2U9YWVbdGVdO3NlLmVudW1lcmFibGU9c2UuZW51bWVyYWJsZXx8ITEsc2UuY29uZmlndXJh''@;'; put 'put ''YmxlPSEwLCJ2YWx1ZSJpbiBzZSYmKHNlLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQSxPKHNlLmtleSksc2UpfX1mdW5jdGlvbiBPKEEpe3ZhciBhZT1mdW5jdGlvbiB6KEEsYWUpe2lmKCJvYmplY3QiIT09aWUoQSl8fG51bGw9PT1BKXJldHVybiBBO3ZhciB0ZT1BW1N5''@;'; put 'put ''bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09dGUpe3ZhciBzZT10ZS5jYWxsKEEsYWV8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPT1pZShzZSkpcmV0dXJuIHNlO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9''@;'; put 'put ''cmV0dXJuKCJzdHJpbmciPT09YWU/U3RyaW5nOk51bWJlcikoQSl9KEEsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT09aWUoYWUpP2FlOlN0cmluZyhhZSl9ZnVuY3Rpb24gSyhBLGFlKXtpZihhZSYmKCJvYmplY3QiPT09aWUoYWUpfHwiZnVuY3Rpb24iPT10eXBlb2YgYWUpKXJldHVybiBh''@;'; put 'put ''ZTtpZih2b2lkIDAhPT1hZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZCIpO3JldHVybiBVKEEpfWZ1bmN0aW9uIFUoQSl7aWYodm9pZCAwPT09QSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRo''@;'; put 'put ''aXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBBfWZ1bmN0aW9uIFcoQSl7dmFyIGFlPSJmdW5jdGlvbiI9PXR5cGVvZiBNYXA/bmV3IE1hcDp2b2lkIDA7cmV0dXJuIFc9ZnVuY3Rpb24oc2Upe2lmKG51bGw9PT1zZXx8IWZ1''@;'; put 'put ''bmN0aW9uIGVlKEEpe3JldHVybi0xIT09RnVuY3Rpb24udG9TdHJpbmcuY2FsbChBKS5pbmRleE9mKCJbbmF0aXZlIGNvZGVdIil9KHNlKSlyZXR1cm4gc2U7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHNlKXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIg''@;'; put 'put ''YmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7aWYodHlwZW9mIGFlPCJ1Iil7aWYoYWUuaGFzKHNlKSlyZXR1cm4gYWUuZ2V0KHNlKTthZS5zZXQoc2Usd2UpfWZ1bmN0aW9uIHdlKCl7cmV0dXJuIFkoc2UsYXJndW1lbnRzLG5lKHRoaXMpLmNvbnN0cnVjdG9yKX1yZXR1cm4gd2UucHJvdG90eXBl''@;'; put 'put ''PU9iamVjdC5jcmVhdGUoc2UucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6d2UsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksSih3ZSxzZSl9LFcoQSl9ZnVuY3Rpb24gWShBLGFlLHRlKXtyZXR1cm4oWT1xKCk/UmVmbGVjdC5jb25zdHJ1Y3QuYmlu''@;'; put 'put ''ZCgpOmZ1bmN0aW9uKHdlLFVlLEplKXt2YXIgb3Q9W251bGxdO290LnB1c2guYXBwbHkob3QsVWUpO3ZhciB2ZT1uZXcoRnVuY3Rpb24uYmluZC5hcHBseSh3ZSxvdCkpO3JldHVybiBKZSYmSih2ZSxKZS5wcm90b3R5cGUpLHZlfSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfWZ1bmN0aW9uIHEo''@;'; put 'put ''KXtpZih0eXBlb2YgUmVmbGVjdD4idSJ8fCFSZWZsZWN0LmNvbnN0cnVjdHx8UmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5j''@;'; put 'put ''b25zdHJ1Y3QoQm9vbGVhbixbXSxmdW5jdGlvbigpe30pKSwhMH1jYXRjaHtyZXR1cm4hMX19ZnVuY3Rpb24gSihBLGFlKXtyZXR1cm4oSj1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihzZSx3ZSl7cmV0dXJuIHNlLl9fcHJvdG9f''@;'; put 'put ''Xz13ZSxzZX0pKEEsYWUpfWZ1bmN0aW9uIG5lKEEpe3JldHVybihuZT1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbih0ZSl7cmV0dXJuIHRlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKHRlKX0pKEEpfWZ1bmN0aW9u''@;'; put 'put ''IGllKEEpe3JldHVybihpZT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihhZSl7cmV0dXJuIHR5cGVvZiBhZX06ZnVuY3Rpb24oYWUpe3JldHVybiBhZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmYWUuY29u''@;'; put 'put ''c3RydWN0b3I9PT1TeW1ib2wmJmFlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgYWV9KShBKX12YXIgbWU9eSg5NTM5KS5pbnNwZWN0LFRlPXkoMjEzNikuY29kZXMuRVJSX0lOVkFMSURfQVJHX1RZUEU7ZnVuY3Rpb24gU2UoQSxhZSx0ZSl7cmV0dXJuKHZvaWQgMD09PXRl''@;'; put 'put ''fHx0ZT5BLmxlbmd0aCkmJih0ZT1BLmxlbmd0aCksQS5zdWJzdHJpbmcodGUtYWUubGVuZ3RoLHRlKT09PWFlfXZhciBWPSIiLHA9IiIsYj0iIix4PSIiLEM9e2RlZXBTdHJpY3RFcXVhbDoiRXhwZWN0ZWQgdmFsdWVzIHRvIGJlIHN0cmljdGx5IGRlZXAtZXF1YWw6IixzdHJpY3RFcXVhbDoi''@;'; put 'put ''RXhwZWN0ZWQgdmFsdWVzIHRvIGJlIHN0cmljdGx5IGVxdWFsOiIsc3RyaWN0RXF1YWxPYmplY3Q6J0V4cGVjdGVkICJhY3R1YWwiIHRvIGJlIHJlZmVyZW5jZS1lcXVhbCB0byAiZXhwZWN0ZWQiOicsZGVlcEVxdWFsOiJFeHBlY3RlZCB2YWx1ZXMgdG8gYmUgbG9vc2VseSBkZWVwLWVxdWFs''@;'; put 'put ''OiIsZXF1YWw6IkV4cGVjdGVkIHZhbHVlcyB0byBiZSBsb29zZWx5IGVxdWFsOiIsbm90RGVlcFN0cmljdEVxdWFsOidFeHBlY3RlZCAiYWN0dWFsIiBub3QgdG8gYmUgc3RyaWN0bHkgZGVlcC1lcXVhbCB0bzonLG5vdFN0cmljdEVxdWFsOidFeHBlY3RlZCAiYWN0dWFsIiB0byBiZSBzdHJp''@;'; put 'put ''Y3RseSB1bmVxdWFsIHRvOicsbm90U3RyaWN0RXF1YWxPYmplY3Q6J0V4cGVjdGVkICJhY3R1YWwiIG5vdCB0byBiZSByZWZlcmVuY2UtZXF1YWwgdG8gImV4cGVjdGVkIjonLG5vdERlZXBFcXVhbDonRXhwZWN0ZWQgImFjdHVhbCIgbm90IHRvIGJlIGxvb3NlbHkgZGVlcC1lcXVhbCB0bzon''@;'; put 'put ''LG5vdEVxdWFsOidFeHBlY3RlZCAiYWN0dWFsIiB0byBiZSBsb29zZWx5IHVuZXF1YWwgdG86Jyxub3RJZGVudGljYWw6IlZhbHVlcyBpZGVudGljYWwgYnV0IG5vdCByZWZlcmVuY2UtZXF1YWw6In07ZnVuY3Rpb24gSChBKXt2YXIgYWU9T2JqZWN0LmtleXMoQSksdGU9T2JqZWN0LmNyZWF0''@;'; put 'put ''ZShPYmplY3QuZ2V0UHJvdG90eXBlT2YoQSkpO3JldHVybiBhZS5mb3JFYWNoKGZ1bmN0aW9uKHNlKXt0ZVtzZV09QVtzZV19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGUsIm1lc3NhZ2UiLHt2YWx1ZTpBLm1lc3NhZ2V9KSx0ZX1mdW5jdGlvbiBqKEEpe3JldHVybiBtZShBLHtjb21wYWN0''@;'; put 'put ''OiExLGN1c3RvbUluc3BlY3Q6ITEsZGVwdGg6MWUzLG1heEFycmF5TGVuZ3RoOjEvMCxzaG93SGlkZGVuOiExLGJyZWFrTGVuZ3RoOjEvMCxzaG93UHJveHk6ITEsc29ydGVkOiEwLGdldHRlcnM6ITB9KX12YXIgbT1mdW5jdGlvbihBLGFlKXshZnVuY3Rpb24gTihBLGFlKXtpZigiZnVuY3Rp''@;'; put 'put ''b24iIT10eXBlb2YgYWUmJm51bGwhPT1hZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO0EucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoYWUmJmFlLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOkEs''@;'; put 'put ''d3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGFlJiZKKEEsYWUpfShzZSxBKTt2YXIgdGU9ZnVuY3Rpb24gTChBKXt2YXIgYWU9cSgpO3JldHVybiBmdW5jdGlvbigpe3ZhciB3ZSxzZT1uZShB''@;'; put 'put ''KTtpZihhZSl7dmFyIFVlPW5lKHRoaXMpLmNvbnN0cnVjdG9yO3dlPVJlZmxlY3QuY29uc3RydWN0KHNlLGFyZ3VtZW50cyxVZSl9ZWxzZSB3ZT1zZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIEsodGhpcyx3ZSl9fShzZSk7ZnVuY3Rpb24gc2Uod2Upe3ZhciBVZTtpZihmdW5jdGlv''@;'; put 'put ''biB3KEEsYWUpe2lmKCEoQSBpbnN0YW5jZW9mIGFlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxzZSksIm9iamVjdCIhPT1pZSh3ZSl8fG51bGw9PT13ZSl0aHJvdyBuZXcgVGUoIm9wdGlvbnMiLCJPYmplY3QiLHdlKTt2''@;'; put 'put ''YXIgSmU9d2UubWVzc2FnZSxvdD13ZS5vcGVyYXRvcix4ZT13ZS5zdGFja1N0YXJ0Rm4sdmU9d2UuYWN0dWFsLFhlPXdlLmV4cGVjdGVkLHplPUVycm9yLnN0YWNrVHJhY2VMaW1pdDtpZihFcnJvci5zdGFja1RyYWNlTGltaXQ9MCxudWxsIT1KZSlVZT10ZS5jYWxsKHRoaXMsU3RyaW5nKEpl''@;'; put 'put ''KSk7ZWxzZSBpZihJLnN0ZGVyciYmSS5zdGRlcnIuaXNUVFkmJihJLnN0ZGVyciYmSS5zdGRlcnIuZ2V0Q29sb3JEZXB0aCYmMSE9PUkuc3RkZXJyLmdldENvbG9yRGVwdGgoKT8oVj0iXHgxYlszNG0iLHA9Ilx4MWJbMzJtIix4PSJceDFiWzM5bSIsYj0iXHgxYlszMW0iKTooVj0iIixwPSIi''@;'; put 'put ''LHg9IiIsYj0iIikpLCJvYmplY3QiPT09aWUodmUpJiZudWxsIT09dmUmJiJvYmplY3QiPT09aWUoWGUpJiZudWxsIT09WGUmJiJzdGFjayJpbiB2ZSYmdmUgaW5zdGFuY2VvZiBFcnJvciYmInN0YWNrImluIFhlJiZYZSBpbnN0YW5jZW9mIEVycm9yJiYodmU9SCh2ZSksWGU9SChYZSkpLCJk''@;'; put 'put ''ZWVwU3RyaWN0RXF1YWwiPT09b3R8fCJzdHJpY3RFcXVhbCI9PT1vdClVZT10ZS5jYWxsKHRoaXMsZnVuY3Rpb24gRShBLGFlLHRlKXt2YXIgc2U9IiIsd2U9IiIsVWU9MCxKZT0iIixvdD0hMSx4ZT1qKEEpLHZlPXhlLnNwbGl0KCJcbiIpLFhlPWooYWUpLnNwbGl0KCJcbiIpLHplPTAsRGU9''@;'; put 'put ''IiI7aWYoInN0cmljdEVxdWFsIj09PXRlJiYib2JqZWN0Ij09PWllKEEpJiYib2JqZWN0Ij09PWllKGFlKSYmbnVsbCE9PUEmJm51bGwhPT1hZSYmKHRlPSJzdHJpY3RFcXVhbE9iamVjdCIpLDE9PT12ZS5sZW5ndGgmJjE9PT1YZS5sZW5ndGgmJnZlWzBdIT09WGVbMF0pe3ZhciBGZT12ZVsw''@;'; put 'put ''XS5sZW5ndGgrWGVbMF0ubGVuZ3RoO2lmKEZlPD0xMCl7aWYoISgib2JqZWN0Ij09PWllKEEpJiZudWxsIT09QXx8Im9iamVjdCI9PT1pZShhZSkmJm51bGwhPT1hZXx8MD09PUEmJjA9PT1hZSkpcmV0dXJuIiIuY29uY2F0KENbdGVdLCJcblxuIikrIiIuY29uY2F0KHZlWzBdLCIgIT09ICIp''@;'; put 'put ''LmNvbmNhdChYZVswXSwiXG4iKX1lbHNlIGlmKCJzdHJpY3RFcXVhbE9iamVjdCIhPT10ZSYmRmU8KEkuc3RkZXJyJiZJLnN0ZGVyci5pc1RUWT9JLnN0ZGVyci5jb2x1bW5zOjgwKSl7Zm9yKDt2ZVswXVt6ZV09PT1YZVswXVt6ZV07KXplKys7emU+MiYmKERlPSJcbiAgIi5jb25jYXQoZnVu''@;'; put 'put ''Y3Rpb24gamUoQSxhZSl7aWYoYWU9TWF0aC5mbG9vcihhZSksMD09QS5sZW5ndGh8fDA9PWFlKXJldHVybiIiO3ZhciB0ZT1BLmxlbmd0aCphZTtmb3IoYWU9TWF0aC5mbG9vcihNYXRoLmxvZyhhZSkvTWF0aC5sb2coMikpO2FlOylBKz1BLGFlLS07cmV0dXJuIEErQS5zdWJzdHJpbmcoMCx0''@;'; put 'put ''ZS1BLmxlbmd0aCl9KCIgIix6ZSksIl4iKSx6ZT0wKX19Zm9yKHZhciBJZT12ZVt2ZS5sZW5ndGgtMV0sVmU9WGVbWGUubGVuZ3RoLTFdO0llPT09VmUmJih6ZSsrPDI/SmU9IlxuICAiLmNvbmNhdChJZSkuY29uY2F0KEplKTpzZT1JZSx2ZS5wb3AoKSxYZS5wb3AoKSwwIT09dmUubGVuZ3Ro''@;'; put 'put ''JiYwIT09WGUubGVuZ3RoKTspSWU9dmVbdmUubGVuZ3RoLTFdLFZlPVhlW1hlLmxlbmd0aC0xXTt2YXIga2U9TWF0aC5tYXgodmUubGVuZ3RoLFhlLmxlbmd0aCk7aWYoMD09PWtlKXt2YXIgQWU9eGUuc3BsaXQoIlxuIik7aWYoQWUubGVuZ3RoPjMwKWZvcihBZVsyNl09IiIuY29uY2F0KFYs''@;'; put 'put ''Ii4uLiIpLmNvbmNhdCh4KTtBZS5sZW5ndGg+Mjc7KUFlLnBvcCgpO3JldHVybiIiLmNvbmNhdChDLm5vdElkZW50aWNhbCwiXG5cbiIpLmNvbmNhdChBZS5qb2luKCJcbiIpLCJcbiIpfXplPjMmJihKZT0iXG4iLmNvbmNhdChWLCIuLi4iKS5jb25jYXQoeCkuY29uY2F0KEplKSxvdD0hMCks''@;'; put 'put ''IiIhPT1zZSYmKEplPSJcbiAgIi5jb25jYXQoc2UpLmNvbmNhdChKZSksc2U9IiIpO3ZhciBfdD0wLG50PUNbdGVdKyJcbiIuY29uY2F0KHAsIisgYWN0dWFsIikuY29uY2F0KHgsIiAiKS5jb25jYXQoYiwiLSBleHBlY3RlZCIpLmNvbmNhdCh4KSxRZT0iICIuY29uY2F0KFYsIi4uLiIpLmNv''@;'; put 'put ''bmNhdCh4LCIgTGluZXMgc2tpcHBlZCIpO2Zvcih6ZT0wO3plPGtlO3plKyspe3ZhciB1bj16ZS1VZTtpZih2ZS5sZW5ndGg8emUrMSl1bj4xJiZ6ZT4yJiYodW4+ND8od2UrPSJcbiIuY29uY2F0KFYsIi4uLiIpLmNvbmNhdCh4KSxvdD0hMCk6dW4+MyYmKHdlKz0iXG4gICIuY29uY2F0KFhl''@;'; put 'put ''W3plLTJdKSxfdCsrKSx3ZSs9IlxuICAiLmNvbmNhdChYZVt6ZS0xXSksX3QrKyksVWU9emUsc2UrPSJcbiIuY29uY2F0KGIsIi0iKS5jb25jYXQoeCwiICIpLmNvbmNhdChYZVt6ZV0pLF90Kys7ZWxzZSBpZihYZS5sZW5ndGg8emUrMSl1bj4xJiZ6ZT4yJiYodW4+ND8od2UrPSJcbiIuY29u''@;'; put 'put ''Y2F0KFYsIi4uLiIpLmNvbmNhdCh4KSxvdD0hMCk6dW4+MyYmKHdlKz0iXG4gICIuY29uY2F0KHZlW3plLTJdKSxfdCsrKSx3ZSs9IlxuICAiLmNvbmNhdCh2ZVt6ZS0xXSksX3QrKyksVWU9emUsd2UrPSJcbiIuY29uY2F0KHAsIisiKS5jb25jYXQoeCwiICIpLmNvbmNhdCh2ZVt6ZV0pLF90''@;'; put 'put ''Kys7ZWxzZXt2YXIgeXQ9WGVbemVdLE10PXZlW3plXSxEdD1NdCE9PXl0JiYoIVNlKE10LCIsIil8fE10LnNsaWNlKDAsLTEpIT09eXQpO0R0JiZTZSh5dCwiLCIpJiZ5dC5zbGljZSgwLC0xKT09PU10JiYoRHQ9ITEsTXQrPSIsIiksRHQ/KHVuPjEmJnplPjImJih1bj40Pyh3ZSs9IlxuIi5j''@;'; put 'put ''b25jYXQoViwiLi4uIikuY29uY2F0KHgpLG90PSEwKTp1bj4zJiYod2UrPSJcbiAgIi5jb25jYXQodmVbemUtMl0pLF90KyspLHdlKz0iXG4gICIuY29uY2F0KHZlW3plLTFdKSxfdCsrKSxVZT16ZSx3ZSs9IlxuIi5jb25jYXQocCwiKyIpLmNvbmNhdCh4LCIgIikuY29uY2F0KE10KSxzZSs9''@;'; put 'put ''IlxuIi5jb25jYXQoYiwiLSIpLmNvbmNhdCh4LCIgIikuY29uY2F0KHl0KSxfdCs9Mik6KHdlKz1zZSxzZT0iIiwoMT09PXVufHwwPT09emUpJiYod2UrPSJcbiAgIi5jb25jYXQoTXQpLF90KyspKX1pZihfdD4yMCYmemU8a2UtMilyZXR1cm4iIi5jb25jYXQobnQpLmNvbmNhdChRZSwiXG4i''@;'; put 'put ''KS5jb25jYXQod2UsIlxuIikuY29uY2F0KFYsIi4uLiIpLmNvbmNhdCh4KS5jb25jYXQoc2UsIlxuIikrIiIuY29uY2F0KFYsIi4uLiIpLmNvbmNhdCh4KX1yZXR1cm4iIi5jb25jYXQobnQpLmNvbmNhdChvdD9RZToiIiwiXG4iKS5jb25jYXQod2UpLmNvbmNhdChzZSkuY29uY2F0KEplKS5j''@;'; put 'put ''b25jYXQoRGUpfSh2ZSxYZSxvdCkpO2Vsc2UgaWYoIm5vdERlZXBTdHJpY3RFcXVhbCI9PT1vdHx8Im5vdFN0cmljdEVxdWFsIj09PW90KXt2YXIgRGU9Q1tvdF0sRmU9aih2ZSkuc3BsaXQoIlxuIik7aWYoIm5vdFN0cmljdEVxdWFsIj09PW90JiYib2JqZWN0Ij09PWllKHZlKSYmbnVsbCE9''@;'; put 'put ''PXZlJiYoRGU9Qy5ub3RTdHJpY3RFcXVhbE9iamVjdCksRmUubGVuZ3RoPjMwKWZvcihGZVsyNl09IiIuY29uY2F0KFYsIi4uLiIpLmNvbmNhdCh4KTtGZS5sZW5ndGg+Mjc7KUZlLnBvcCgpO1VlPXRlLmNhbGwodGhpcywxPT09RmUubGVuZ3RoPyIiLmNvbmNhdChEZSwiICIpLmNvbmNhdChG''@;'; put 'put ''ZVswXSk6IiIuY29uY2F0KERlLCJcblxuIikuY29uY2F0KEZlLmpvaW4oIlxuIiksIlxuIikpfWVsc2V7dmFyIE9lPWoodmUpLEllPSIiLFZlPUNbb3RdOyJub3REZWVwRXF1YWwiPT09b3R8fCJub3RFcXVhbCI9PT1vdD8oT2U9IiIuY29uY2F0KENbb3RdLCJcblxuIikuY29uY2F0KE9lKSku''@;'; put 'put ''bGVuZ3RoPjEwMjQmJihPZT0iIi5jb25jYXQoT2Uuc2xpY2UoMCwxMDIxKSwiLi4uIikpOihJZT0iIi5jb25jYXQoaihYZSkpLE9lLmxlbmd0aD41MTImJihPZT0iIi5jb25jYXQoT2Uuc2xpY2UoMCw1MDkpLCIuLi4iKSksSWUubGVuZ3RoPjUxMiYmKEllPSIiLmNvbmNhdChJZS5zbGljZSgw''@;'; put 'put ''LDUwOSksIi4uLiIpKSwiZGVlcEVxdWFsIj09PW90fHwiZXF1YWwiPT09b3Q/T2U9IiIuY29uY2F0KFZlLCJcblxuIikuY29uY2F0KE9lLCJcblxuc2hvdWxkIGVxdWFsXG5cbiIpOkllPSIgIi5jb25jYXQob3QsIiAiKS5jb25jYXQoSWUpKSxVZT10ZS5jYWxsKHRoaXMsIiIuY29uY2F0KE9l''@;'; put 'put ''KS5jb25jYXQoSWUpKX1yZXR1cm4gRXJyb3Iuc3RhY2tUcmFjZUxpbWl0PXplLFVlLmdlbmVyYXRlZE1lc3NhZ2U9IUplLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShVKFVlKSwibmFtZSIse3ZhbHVlOiJBc3NlcnRpb25FcnJvciBbRVJSX0FTU0VSVElPTl0iLGVudW1lcmFibGU6ITEsd3JpdGFi''@;'; put 'put ''bGU6ITAsY29uZmlndXJhYmxlOiEwfSksVWUuY29kZT0iRVJSX0FTU0VSVElPTiIsVWUuYWN0dWFsPXZlLFVlLmV4cGVjdGVkPVhlLFVlLm9wZXJhdG9yPW90LEVycm9yLmNhcHR1cmVTdGFja1RyYWNlJiZFcnJvci5jYXB0dXJlU3RhY2tUcmFjZShVKFVlKSx4ZSksVWUubmFtZT0iQXNzZXJ0''@;'; put 'put ''aW9uRXJyb3IiLEsoVWUpfXJldHVybiBmdW5jdGlvbiBGKEEsYWUsdGUpe2FlJiZQKEEucHJvdG90eXBlLGFlKSx0ZSYmUChBLHRlKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KX0oc2UsW3trZXk6InRvU3RyaW5nIix2YWx1ZTpmdW5jdGlvbigp''@;'; put 'put ''e3JldHVybiIiLmNvbmNhdCh0aGlzLm5hbWUsIiBbIikuY29uY2F0KHRoaXMuY29kZSwiXTogIikuY29uY2F0KHRoaXMubWVzc2FnZSl9fSx7a2V5OmFlLHZhbHVlOmZ1bmN0aW9uKFVlLEplKXtyZXR1cm4gbWUodGhpcyxnKGcoe30sSmUpLHt9LHtjdXN0b21JbnNwZWN0OiExLGRlcHRoOjB9''@;'; put 'put ''KSl9fV0pLHNlfShXKEVycm9yKSxtZS5jdXN0b20pO3VlLmV4cG9ydHM9bX0sMjEzNjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBJKG1lKXtyZXR1cm4oST0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlv''@;'; put 'put ''bihfZSl7cmV0dXJuIHR5cGVvZiBfZX06ZnVuY3Rpb24oX2Upe3JldHVybiBfZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmX2UuY29uc3RydWN0b3I9PT1TeW1ib2wmJl9lIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgX2V9KShtZSl9ZnVuY3Rpb24gXyhtZSxfZSl7''@;'; put 'put ''Zm9yKHZhciBUZT0wO1RlPF9lLmxlbmd0aDtUZSsrKXt2YXIgU2U9X2VbVGVdO1NlLmVudW1lcmFibGU9U2UuZW51bWVyYWJsZXx8ITEsU2UuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBTZSYmKFNlLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobWUsQihTZS5rZXkpLFNl''@;'; put 'put ''KX19ZnVuY3Rpb24gQihtZSl7dmFyIF9lPWZ1bmN0aW9uIHcobWUsX2Upe2lmKCJvYmplY3QiIT09SShtZSl8fG51bGw9PT1tZSlyZXR1cm4gbWU7dmFyIFRlPW1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09VGUpe3ZhciBTZT1UZS5jYWxsKG1lLF9lfHwiZGVmYXVsdCIpO2lm''@;'; put 'put ''KCJvYmplY3QiIT09SShTZSkpcmV0dXJuIFNlO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09X2U/U3RyaW5nOk51bWJlcikobWUpfShtZSwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9''@;'; put 'put ''PT1JKF9lKT9fZTpTdHJpbmcoX2UpfWZ1bmN0aW9uIE8obWUsX2Upe3JldHVybihPPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKFNlLGplKXtyZXR1cm4gU2UuX19wcm90b19fPWplLFNlfSkobWUsX2UpfWZ1bmN0aW9uIFUobWUp''@;'; put 'put ''e3JldHVybihVPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKFRlKXtyZXR1cm4gVGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoVGUpfSkobWUpfXZhciBZLHEsVz17fTtmdW5jdGlvbiBlZShtZSxfZSxUZSl7VGV8''@;'; put 'put ''fChUZT1FcnJvcik7dmFyIGplPWZ1bmN0aW9uKFYpeyFmdW5jdGlvbiBGKG1lLF9lKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgX2UmJm51bGwhPT1fZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO21lLnBy''@;'; put 'put ''b3RvdHlwZT1PYmplY3QuY3JlYXRlKF9lJiZfZS5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTptZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KG1lLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLF9lJiZPKG1lLF9lKX0oYixWKTt2''@;'; put 'put ''YXIgcD1mdW5jdGlvbiB6KG1lKXt2YXIgX2U9ZnVuY3Rpb24gSygpe2lmKHR5cGVvZiBSZWZsZWN0PiJ1Inx8IVJlZmxlY3QuY29uc3RydWN0fHxSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJv''@;'; put 'put ''b2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLGZ1bmN0aW9uKCl7fSkpLCEwfWNhdGNoe3JldHVybiExfX0oKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgamUsU2U9VShtZSk7aWYoX2Upe3ZhciBWPVUodGhpcykuY29uc3RydWN0b3I7amU9''@;'; put 'put ''UmVmbGVjdC5jb25zdHJ1Y3QoU2UsYXJndW1lbnRzLFYpfWVsc2UgamU9U2UuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbiBOKG1lLF9lKXtpZihfZSYmKCJvYmplY3QiPT09SShfZSl8fCJmdW5jdGlvbiI9PXR5cGVvZiBfZSkpcmV0dXJuIF9lO2lmKHZvaWQgMCE9PV9l''@;'; put 'put ''KXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGZ1bmN0aW9uIEwobWUpe2lmKHZvaWQgMD09PW1lKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0''@;'; put 'put ''aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIG1lfShtZSl9KHRoaXMsamUpfX0oYik7ZnVuY3Rpb24gYih4LEMsVCl7dmFyIEg7cmV0dXJuIGZ1bmN0aW9uIFAobWUsX2Upe2lmKCEobWUgaW5zdGFuY2VvZiBfZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fu''@;'; put 'put ''bm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsYiksSD1wLmNhbGwodGhpcyxmdW5jdGlvbiBTZShWLHAsYil7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBfZT9fZTpfZShWLHAsYil9KHgsQyxUKSksSC5jb2RlPW1lLEh9cmV0dXJuIGZ1bmN0aW9uIGcobWUsX2UsVGUpe3Jl''@;'; put 'put ''dHVybiBfZSYmXyhtZS5wcm90b3R5cGUsX2UpLFRlJiZfKG1lLFRlKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobWUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksbWV9KGIpfShUZSk7V1ttZV09amV9ZnVuY3Rpb24gSihtZSxfZSl7aWYoQXJyYXkuaXNBcnJheShtZSkpe3ZhciBUZT1tZS5s''@;'; put 'put ''ZW5ndGg7cmV0dXJuIG1lPW1lLm1hcChmdW5jdGlvbihTZSl7cmV0dXJuIFN0cmluZyhTZSl9KSxUZT4yPyJvbmUgb2YgIi5jb25jYXQoX2UsIiAiKS5jb25jYXQobWUuc2xpY2UoMCxUZS0xKS5qb2luKCIsICIpLCIsIG9yICIpK21lW1RlLTFdOjI9PT1UZT8ib25lIG9mICIuY29uY2F0KF9l''@;'; put 'put ''LCIgIikuY29uY2F0KG1lWzBdLCIgb3IgIikuY29uY2F0KG1lWzFdKToib2YgIi5jb25jYXQoX2UsIiAiKS5jb25jYXQobWVbMF0pfXJldHVybiJvZiAiLmNvbmNhdChfZSwiICIpLmNvbmNhdChTdHJpbmcobWUpKX1lZSgiRVJSX0FNQklHVU9VU19BUkdVTUVOVCIsJ1RoZSAiJXMiIGFyZ3Vt''@;'; put 'put ''ZW50IGlzIGFtYmlndW91cy4gJXMnLFR5cGVFcnJvciksZWUoIkVSUl9JTlZBTElEX0FSR19UWVBFIixmdW5jdGlvbihtZSxfZSxUZSl7dmFyIFNlLGplO2lmKHZvaWQgMD09PVkmJihZPXkoOTI4MikpLFkoInN0cmluZyI9PXR5cGVvZiBtZSwiJ25hbWUnIG11c3QgYmUgYSBzdHJpbmciKSwi''@;'; put 'put ''c3RyaW5nIj09dHlwZW9mIF9lJiZmdW5jdGlvbiBuZShtZSxfZSxUZSl7cmV0dXJuIG1lLnN1YnN0cighVGV8fFRlPDA/MDorVGUsX2UubGVuZ3RoKT09PV9lfShfZSwibm90ICIpPyhTZT0ibXVzdCBub3QgYmUiLF9lPV9lLnJlcGxhY2UoL15ub3QgLywiIikpOlNlPSJtdXN0IGJlIixmdW5j''@;'; put 'put ''dGlvbiBpZShtZSxfZSxUZSl7cmV0dXJuKHZvaWQgMD09PVRlfHxUZT5tZS5sZW5ndGgpJiYoVGU9bWUubGVuZ3RoKSxtZS5zdWJzdHJpbmcoVGUtX2UubGVuZ3RoLFRlKT09PV9lfShtZSwiIGFyZ3VtZW50IikpamU9IlRoZSAiLmNvbmNhdChtZSwiICIpLmNvbmNhdChTZSwiICIpLmNvbmNh''@;'; put 'put ''dChKKF9lLCJ0eXBlIikpO2Vsc2V7dmFyIFY9ZnVuY3Rpb24gbGUobWUsX2UsVGUpe3JldHVybiJudW1iZXIiIT10eXBlb2YgVGUmJihUZT0wKSwhKFRlK19lLmxlbmd0aD5tZS5sZW5ndGgpJiYtMSE9PW1lLmluZGV4T2YoX2UsVGUpfShtZSwiLiIpPyJwcm9wZXJ0eSI6ImFyZ3VtZW50Ijtq''@;'; put 'put ''ZT0nVGhlICInLmNvbmNhdChtZSwnIiAnKS5jb25jYXQoViwiICIpLmNvbmNhdChTZSwiICIpLmNvbmNhdChKKF9lLCJ0eXBlIikpfXJldHVybiBqZSsiLiBSZWNlaXZlZCB0eXBlICIuY29uY2F0KEkoVGUpKX0sVHlwZUVycm9yKSxlZSgiRVJSX0lOVkFMSURfQVJHX1ZBTFVFIixmdW5jdGlv''@;'; put 'put ''bihtZSxfZSl7dmFyIFRlPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXToiaXMgaW52YWxpZCI7dm9pZCAwPT09cSYmKHE9eSg5NTM5KSk7dmFyIFNlPXEuaW5zcGVjdChfZSk7cmV0dXJuIFNlLmxlbmd0aD4xMjgmJihTZT0iIi5jb25jYXQo''@;'; put 'put ''U2Uuc2xpY2UoMCwxMjgpLCIuLi4iKSksIlRoZSBhcmd1bWVudCAnIi5jb25jYXQobWUsIicgIikuY29uY2F0KFRlLCIuIFJlY2VpdmVkICIpLmNvbmNhdChTZSl9LFR5cGVFcnJvcixSYW5nZUVycm9yKSxlZSgiRVJSX0lOVkFMSURfUkVUVVJOX1ZBTFVFIixmdW5jdGlvbihtZSxfZSxUZSl7''@;'; put 'put ''dmFyIFNlO3JldHVybiBTZT1UZSYmVGUuY29uc3RydWN0b3ImJlRlLmNvbnN0cnVjdG9yLm5hbWU/Imluc3RhbmNlIG9mICIuY29uY2F0KFRlLmNvbnN0cnVjdG9yLm5hbWUpOiJ0eXBlICIuY29uY2F0KEkoVGUpKSwiRXhwZWN0ZWQgIi5jb25jYXQobWUsJyB0byBiZSByZXR1cm5lZCBmcm9t''@;'; put 'put ''IHRoZSAiJykuY29uY2F0KF9lLCciJykrIiBmdW5jdGlvbiBidXQgZ290ICIuY29uY2F0KFNlLCIuIil9LFR5cGVFcnJvciksZWUoIkVSUl9NSVNTSU5HX0FSR1MiLGZ1bmN0aW9uKCl7Zm9yKHZhciBtZT1hcmd1bWVudHMubGVuZ3RoLF9lPW5ldyBBcnJheShtZSksVGU9MDtUZTxtZTtUZSsr''@;'; put 'put ''KV9lW1RlXT1hcmd1bWVudHNbVGVdO3ZvaWQgMD09PVkmJihZPXkoOTI4MikpLFkoX2UubGVuZ3RoPjAsIkF0IGxlYXN0IG9uZSBhcmcgbmVlZHMgdG8gYmUgc3BlY2lmaWVkIik7dmFyIFNlPSJUaGUgIixqZT1fZS5sZW5ndGg7c3dpdGNoKF9lPV9lLm1hcChmdW5jdGlvbihWKXtyZXR1cm4n''@;'; put 'put ''IicuY29uY2F0KFYsJyInKX0pLGplKXtjYXNlIDE6U2UrPSIiLmNvbmNhdChfZVswXSwiIGFyZ3VtZW50Iik7YnJlYWs7Y2FzZSAyOlNlKz0iIi5jb25jYXQoX2VbMF0sIiBhbmQgIikuY29uY2F0KF9lWzFdLCIgYXJndW1lbnRzIik7YnJlYWs7ZGVmYXVsdDpTZSs9X2Uuc2xpY2UoMCxqZS0x''@;'; put 'put ''KS5qb2luKCIsICIpLFNlKz0iLCBhbmQgIi5jb25jYXQoX2VbamUtMV0sIiBhcmd1bWVudHMiKX1yZXR1cm4iIi5jb25jYXQoU2UsIiBtdXN0IGJlIHNwZWNpZmllZCIpfSxUeXBlRXJyb3IpLHVlLmV4cG9ydHMuY29kZXM9V30sOTE1ODoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0IjtmdW5jdGlv''@;'; put 'put ''biBJKER0LGl0KXtyZXR1cm4gZnVuY3Rpb24gUChEdCl7aWYoQXJyYXkuaXNBcnJheShEdCkpcmV0dXJuIER0fShEdCl8fGZ1bmN0aW9uIHcoRHQsaXQpe3ZhciAkZT1udWxsPT1EdD9udWxsOnR5cGVvZiBTeW1ib2w8InUiJiZEdFtTeW1ib2wuaXRlcmF0b3JdfHxEdFsiQEBpdGVyYXRvciJd''@;'; put 'put ''O2lmKG51bGwhPSRlKXt2YXIgdHQsSGUsdXQscXQsUnQ9W10sUHQ9ITAsY2k9ITE7dHJ5e2lmKHV0PSgkZT0kZS5jYWxsKER0KSkubmV4dCwwPT09aXQpe2lmKE9iamVjdCgkZSkhPT0kZSlyZXR1cm47UHQ9ITF9ZWxzZSBmb3IoOyEoUHQ9KHR0PXV0LmNhbGwoJGUpKS5kb25lKSYmKFJ0LnB1''@;'; put 'put ''c2godHQudmFsdWUpLFJ0Lmxlbmd0aCE9PWl0KTtQdD0hMCk7fWNhdGNoKFF0KXtjaT0hMCxIZT1RdH1maW5hbGx5e3RyeXtpZighUHQmJm51bGwhPSRlLnJldHVybiYmKHF0PSRlLnJldHVybigpLE9iamVjdChxdCkhPT1xdCkpcmV0dXJufWZpbmFsbHl7aWYoY2kpdGhyb3cgSGV9fXJldHVy''@;'; put 'put ''biBSdH19KER0LGl0KXx8ZnVuY3Rpb24gZyhEdCxpdCl7aWYoRHQpe2lmKCJzdHJpbmciPT10eXBlb2YgRHQpcmV0dXJuIEIoRHQsaXQpO3ZhciAkZT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoRHQpLnNsaWNlKDgsLTEpO2lmKCJPYmplY3QiPT09JGUmJkR0LmNvbnN0cnVjdG9y''@;'; put 'put ''JiYoJGU9RHQuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT0kZXx8IlNldCI9PT0kZSlyZXR1cm4gQXJyYXkuZnJvbShEdCk7aWYoIkFyZ3VtZW50cyI9PT0kZXx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QoJGUpKXJldHVybiBCKER0LGl0KX19KER0''@;'; put 'put ''LGl0KXx8ZnVuY3Rpb24gXygpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRv''@;'; put 'put ''cl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gQihEdCxpdCl7KG51bGw9PWl0fHxpdD5EdC5sZW5ndGgpJiYoaXQ9RHQubGVuZ3RoKTtmb3IodmFyICRlPTAsdHQ9bmV3IEFycmF5KGl0KTskZTxpdDskZSsrKXR0WyRlXT1EdFskZV07cmV0dXJuIHR0fWZ1bmN0aW9uIEYoRHQpe3JldHVybihG''@;'; put 'put ''PSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGl0KXtyZXR1cm4gdHlwZW9mIGl0fTpmdW5jdGlvbihpdCl7cmV0dXJuIGl0JiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZpdC5jb25zdHJ1Y3Rvcj09PVN5bWJv''@;'; put 'put ''bCYmaXQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBpdH0pKER0KX12YXIgTz12b2lkIDAhPT0vYS9nLmZsYWdzLHo9ZnVuY3Rpb24oaXQpe3ZhciAkZT1bXTtyZXR1cm4gaXQuZm9yRWFjaChmdW5jdGlvbih0dCl7cmV0dXJuICRlLnB1c2godHQpfSksJGV9LE49ZnVuY3Rp''@;'; put 'put ''b24oaXQpe3ZhciAkZT1bXTtyZXR1cm4gaXQuZm9yRWFjaChmdW5jdGlvbih0dCxIZSl7cmV0dXJuICRlLnB1c2goW0hlLHR0XSl9KSwkZX0sTD1PYmplY3QuaXM/T2JqZWN0LmlzOnkoNjA5KSxLPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM/T2JqZWN0LmdldE93blByb3BlcnR5U3lt''@;'; put 'put ''Ym9sczpmdW5jdGlvbigpe3JldHVybltdfSxVPU51bWJlci5pc05hTj9OdW1iZXIuaXNOYU46eSgzNjApO2Z1bmN0aW9uIFcoRHQpe3JldHVybiBEdC5jYWxsLmJpbmQoRHQpfXZhciBZPVcoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSkscT1XKE9iamVjdC5wcm90b3R5cGUucHJv''@;'; put 'put ''cGVydHlJc0VudW1lcmFibGUpLGVlPVcoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyksSj15KDk1MzkpLnR5cGVzLG5lPUouaXNBbnlBcnJheUJ1ZmZlcixpZT1KLmlzQXJyYXlCdWZmZXJWaWV3LGxlPUouaXNEYXRlLG1lPUouaXNNYXAsX2U9Si5pc1JlZ0V4cCxUZT1KLmlzU2V0LFNlPUou''@;'; put 'put ''aXNOYXRpdmVFcnJvcixqZT1KLmlzQm94ZWRQcmltaXRpdmUsVj1KLmlzTnVtYmVyT2JqZWN0LHA9Si5pc1N0cmluZ09iamVjdCxiPUouaXNCb29sZWFuT2JqZWN0LHg9Si5pc0JpZ0ludE9iamVjdCxDPUouaXNTeW1ib2xPYmplY3QsVD1KLmlzRmxvYXQzMkFycmF5LEg9Si5pc0Zsb2F0NjRB''@;'; put 'put ''cnJheTtmdW5jdGlvbiBqKER0KXtpZigwPT09RHQubGVuZ3RofHxEdC5sZW5ndGg+MTApcmV0dXJuITA7Zm9yKHZhciBpdD0wO2l0PER0Lmxlbmd0aDtpdCsrKXt2YXIgJGU9RHQuY2hhckNvZGVBdChpdCk7aWYoJGU8NDh8fCRlPjU3KXJldHVybiEwfXJldHVybiAxMD09PUR0Lmxlbmd0aCYm''@;'; put 'put ''RHQ+PU1hdGgucG93KDIsMzIpfWZ1bmN0aW9uIEUoRHQpe3JldHVybiBPYmplY3Qua2V5cyhEdCkuZmlsdGVyKGopLmNvbmNhdChLKER0KS5maWx0ZXIoT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5iaW5kKER0KSkpfWZ1bmN0aW9uIG0oRHQsaXQpe2lmKER0PT09aXQp''@;'; put 'put ''cmV0dXJuIDA7Zm9yKHZhciAkZT1EdC5sZW5ndGgsdHQ9aXQubGVuZ3RoLEhlPTAsdXQ9TWF0aC5taW4oJGUsdHQpO0hlPHV0OysrSGUpaWYoRHRbSGVdIT09aXRbSGVdKXskZT1EdFtIZV0sdHQ9aXRbSGVdO2JyZWFrfXJldHVybiAkZTx0dD8tMTp0dDwkZT8xOjB9dmFyIHNlPTAsd2U9MSxV''@;'; put 'put ''ZT0yLEplPTM7ZnVuY3Rpb24gRGUoRHQsaXQsJGUsdHQpe2lmKER0PT09aXQpcmV0dXJuIDAhPT1EdHx8ISRlfHxMKER0LGl0KTtpZigkZSl7aWYoIm9iamVjdCIhPT1GKER0KSlyZXR1cm4ibnVtYmVyIj09dHlwZW9mIER0JiZVKER0KSYmVShpdCk7aWYoIm9iamVjdCIhPT1GKGl0KXx8bnVs''@;'; put 'put ''bD09PUR0fHxudWxsPT09aXR8fE9iamVjdC5nZXRQcm90b3R5cGVPZihEdCkhPT1PYmplY3QuZ2V0UHJvdG90eXBlT2YoaXQpKXJldHVybiExfWVsc2V7aWYobnVsbD09PUR0fHwib2JqZWN0IiE9PUYoRHQpKXJldHVybihudWxsPT09aXR8fCJvYmplY3QiIT09RihpdCkpJiZEdD09aXQ7aWYo''@;'; put 'put ''bnVsbD09PWl0fHwib2JqZWN0IiE9PUYoaXQpKXJldHVybiExfXZhciBIZT1lZShEdCk7aWYoSGUhPT1lZShpdCkpcmV0dXJuITE7aWYoQXJyYXkuaXNBcnJheShEdCkpe2lmKER0Lmxlbmd0aCE9PWl0Lmxlbmd0aClyZXR1cm4hMTt2YXIgcXQ9RShEdCksUnQ9RShpdCk7cmV0dXJuIHF0Lmxl''@;'; put 'put ''bmd0aD09PVJ0Lmxlbmd0aCYmT2UoRHQsaXQsJGUsdHQsd2UscXQpfWlmKCJbb2JqZWN0IE9iamVjdF0iPT09SGUmJighbWUoRHQpJiZtZShpdCl8fCFUZShEdCkmJlRlKGl0KSkpcmV0dXJuITE7aWYobGUoRHQpKXtpZighbGUoaXQpfHxEYXRlLnByb3RvdHlwZS5nZXRUaW1lLmNhbGwoRHQp''@;'; put 'put ''IT09RGF0ZS5wcm90b3R5cGUuZ2V0VGltZS5jYWxsKGl0KSlyZXR1cm4hMX1lbHNlIGlmKF9lKER0KSl7aWYoIV9lKGl0KXx8IWZ1bmN0aW9uIG90KER0LGl0KXtyZXR1cm4gTz9EdC5zb3VyY2U9PT1pdC5zb3VyY2UmJkR0LmZsYWdzPT09aXQuZmxhZ3M6UmVnRXhwLnByb3RvdHlwZS50b1N0''@;'; put 'put ''cmluZy5jYWxsKER0KT09PVJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpdCl9KER0LGl0KSlyZXR1cm4hMX1lbHNlIGlmKFNlKER0KXx8RHQgaW5zdGFuY2VvZiBFcnJvcil7aWYoRHQubWVzc2FnZSE9PWl0Lm1lc3NhZ2V8fER0Lm5hbWUhPT1pdC5uYW1lKXJldHVybiExfWVsc2V7''@;'; put 'put ''aWYoaWUoRHQpKXtpZigkZXx8IVQoRHQpJiYhSChEdCkpe2lmKCFmdW5jdGlvbiB2ZShEdCxpdCl7cmV0dXJuIER0LmJ5dGVMZW5ndGg9PT1pdC5ieXRlTGVuZ3RoJiYwPT09bShuZXcgVWludDhBcnJheShEdC5idWZmZXIsRHQuYnl0ZU9mZnNldCxEdC5ieXRlTGVuZ3RoKSxuZXcgVWludDhB''@;'; put 'put ''cnJheShpdC5idWZmZXIsaXQuYnl0ZU9mZnNldCxpdC5ieXRlTGVuZ3RoKSl9KER0LGl0KSlyZXR1cm4hMX1lbHNlIGlmKCFmdW5jdGlvbiB4ZShEdCxpdCl7aWYoRHQuYnl0ZUxlbmd0aCE9PWl0LmJ5dGVMZW5ndGgpcmV0dXJuITE7Zm9yKHZhciAkZT0wOyRlPER0LmJ5dGVMZW5ndGg7JGUr''@;'; put 'put ''KylpZihEdFskZV0hPT1pdFskZV0pcmV0dXJuITE7cmV0dXJuITB9KER0LGl0KSlyZXR1cm4hMTt2YXIgUHQ9RShEdCksY2k9RShpdCk7cmV0dXJuIFB0Lmxlbmd0aD09PWNpLmxlbmd0aCYmT2UoRHQsaXQsJGUsdHQsc2UsUHQpfWlmKFRlKER0KSlyZXR1cm4hKCFUZShpdCl8fER0LnNpemUh''@;'; put 'put ''PT1pdC5zaXplKSYmT2UoRHQsaXQsJGUsdHQsVWUpO2lmKG1lKER0KSlyZXR1cm4hKCFtZShpdCl8fER0LnNpemUhPT1pdC5zaXplKSYmT2UoRHQsaXQsJGUsdHQsSmUpO2lmKG5lKER0KSl7aWYoIWZ1bmN0aW9uIFhlKER0LGl0KXtyZXR1cm4gRHQuYnl0ZUxlbmd0aD09PWl0LmJ5dGVMZW5n''@;'; put 'put ''dGgmJjA9PT1tKG5ldyBVaW50OEFycmF5KER0KSxuZXcgVWludDhBcnJheShpdCkpfShEdCxpdCkpcmV0dXJuITF9ZWxzZSBpZihqZShEdCkmJiFmdW5jdGlvbiB6ZShEdCxpdCl7cmV0dXJuIFYoRHQpP1YoaXQpJiZMKE51bWJlci5wcm90b3R5cGUudmFsdWVPZi5jYWxsKER0KSxOdW1iZXIu''@;'; put 'put ''cHJvdG90eXBlLnZhbHVlT2YuY2FsbChpdCkpOnAoRHQpP3AoaXQpJiZTdHJpbmcucHJvdG90eXBlLnZhbHVlT2YuY2FsbChEdCk9PT1TdHJpbmcucHJvdG90eXBlLnZhbHVlT2YuY2FsbChpdCk6YihEdCk/YihpdCkmJkJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChEdCk9PT1Cb29s''@;'; put 'put ''ZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoaXQpOngoRHQpP3goaXQpJiZCaWdJbnQucHJvdG90eXBlLnZhbHVlT2YuY2FsbChEdCk9PT1CaWdJbnQucHJvdG90eXBlLnZhbHVlT2YuY2FsbChpdCk6QyhpdCkmJlN5bWJvbC5wcm90b3R5cGUudmFsdWVPZi5jYWxsKER0KT09PVN5bWJvbC5w''@;'; put 'put ''cm90b3R5cGUudmFsdWVPZi5jYWxsKGl0KX0oRHQsaXQpKXJldHVybiExfXJldHVybiBPZShEdCxpdCwkZSx0dCxzZSl9ZnVuY3Rpb24gRmUoRHQsaXQpe3JldHVybiBpdC5maWx0ZXIoZnVuY3Rpb24oJGUpe3JldHVybiBxKER0LCRlKX0pfWZ1bmN0aW9uIE9lKER0LGl0LCRlLHR0LEhlLHV0''@;'; put 'put ''KXtpZig1PT09YXJndW1lbnRzLmxlbmd0aCl7dXQ9T2JqZWN0LmtleXMoRHQpO3ZhciBxdD1PYmplY3Qua2V5cyhpdCk7aWYodXQubGVuZ3RoIT09cXQubGVuZ3RoKXJldHVybiExfWZvcih2YXIgUnQ9MDtSdDx1dC5sZW5ndGg7UnQrKylpZighWShpdCx1dFtSdF0pKXJldHVybiExO2lmKCRl''@;'; put 'put ''JiY1PT09YXJndW1lbnRzLmxlbmd0aCl7dmFyIFB0PUsoRHQpO2lmKDAhPT1QdC5sZW5ndGgpe3ZhciBjaT0wO2ZvcihSdD0wO1J0PFB0Lmxlbmd0aDtSdCsrKXt2YXIgUXQ9UHRbUnRdO2lmKHEoRHQsUXQpKXtpZighcShpdCxRdCkpcmV0dXJuITE7dXQucHVzaChRdCksY2krK31lbHNlIGlm''@;'; put 'put ''KHEoaXQsUXQpKXJldHVybiExfXZhciBzbj1LKGl0KTtpZihQdC5sZW5ndGghPT1zbi5sZW5ndGgmJkZlKGl0LHNuKS5sZW5ndGghPT1jaSlyZXR1cm4hMX1lbHNle3ZhciBSaT1LKGl0KTtpZigwIT09UmkubGVuZ3RoJiYwIT09RmUoaXQsUmkpLmxlbmd0aClyZXR1cm4hMX19aWYoMD09PXV0''@;'; put 'put ''Lmxlbmd0aCYmKEhlPT09c2V8fEhlPT09d2UmJjA9PT1EdC5sZW5ndGh8fDA9PT1EdC5zaXplKSlyZXR1cm4hMDtpZih2b2lkIDA9PT10dCl0dD17dmFsMTpuZXcgTWFwLHZhbDI6bmV3IE1hcCxwb3NpdGlvbjowfTtlbHNle3ZhciBobj10dC52YWwxLmdldChEdCk7aWYodm9pZCAwIT09aG4p''@;'; put 'put ''e3ZhciBmdD10dC52YWwyLmdldChpdCk7aWYodm9pZCAwIT09ZnQpcmV0dXJuIGhuPT09ZnR9dHQucG9zaXRpb24rK310dC52YWwxLnNldChEdCx0dC5wb3NpdGlvbiksdHQudmFsMi5zZXQoaXQsdHQucG9zaXRpb24pO3ZhciBPcj1mdW5jdGlvbiB1bihEdCxpdCwkZSx0dCxIZSx1dCl7dmFy''@;'; put 'put ''IHF0PTA7aWYodXQ9PT1VZSl7aWYoIWZ1bmN0aW9uIF90KER0LGl0LCRlLHR0KXtmb3IodmFyIEhlPW51bGwsdXQ9eihEdCkscXQ9MDtxdDx1dC5sZW5ndGg7cXQrKyl7dmFyIFJ0PXV0W3F0XTtpZigib2JqZWN0Ij09PUYoUnQpJiZudWxsIT09UnQpbnVsbD09PUhlJiYoSGU9bmV3IFNldCks''@;'; put 'put ''SGUuYWRkKFJ0KTtlbHNlIGlmKCFpdC5oYXMoUnQpKXtpZigkZXx8IWtlKER0LGl0LFJ0KSlyZXR1cm4hMTtudWxsPT09SGUmJihIZT1uZXcgU2V0KSxIZS5hZGQoUnQpfX1pZihudWxsIT09SGUpe2Zvcih2YXIgUHQ9eihpdCksY2k9MDtjaTxQdC5sZW5ndGg7Y2krKyl7dmFyIFF0PVB0W2Np''@;'; put 'put ''XTtpZigib2JqZWN0Ij09PUYoUXQpJiZudWxsIT09UXQpe2lmKCFJZShIZSxRdCwkZSx0dCkpcmV0dXJuITF9ZWxzZSBpZighJGUmJiFEdC5oYXMoUXQpJiYhSWUoSGUsUXQsJGUsdHQpKXJldHVybiExfXJldHVybiAwPT09SGUuc2l6ZX1yZXR1cm4hMH0oRHQsaXQsJGUsSGUpKXJldHVybiEx''@;'; put 'put ''fWVsc2UgaWYodXQ9PT1KZSl7aWYoIWZ1bmN0aW9uIFFlKER0LGl0LCRlLHR0KXtmb3IodmFyIEhlPW51bGwsdXQ9TihEdCkscXQ9MDtxdDx1dC5sZW5ndGg7cXQrKyl7dmFyIFJ0PUkodXRbcXRdLDIpLFB0PVJ0WzBdLGNpPVJ0WzFdO2lmKCJvYmplY3QiPT09RihQdCkmJm51bGwhPT1QdClu''@;'; put 'put ''dWxsPT09SGUmJihIZT1uZXcgU2V0KSxIZS5hZGQoUHQpO2Vsc2V7dmFyIFF0PWl0LmdldChQdCk7aWYodm9pZCAwPT09UXQmJiFpdC5oYXMoUHQpfHwhRGUoY2ksUXQsJGUsdHQpKXtpZigkZXx8IUFlKER0LGl0LFB0LGNpLHR0KSlyZXR1cm4hMTtudWxsPT09SGUmJihIZT1uZXcgU2V0KSxI''@;'; put 'put ''ZS5hZGQoUHQpfX19aWYobnVsbCE9PUhlKXtmb3IodmFyIHNuPU4oaXQpLFJpPTA7Umk8c24ubGVuZ3RoO1JpKyspe3ZhciBobj1JKHNuW1JpXSwyKSxmdD1oblswXSxPcj1oblsxXTtpZigib2JqZWN0Ij09PUYoZnQpJiZudWxsIT09ZnQpe2lmKCFudChIZSxEdCxmdCxPciwkZSx0dCkpcmV0''@;'; put 'put ''dXJuITF9ZWxzZSBpZighKCRlfHxEdC5oYXMoZnQpJiZEZShEdC5nZXQoZnQpLE9yLCExLHR0KXx8bnQoSGUsRHQsZnQsT3IsITEsdHQpKSlyZXR1cm4hMX1yZXR1cm4gMD09PUhlLnNpemV9cmV0dXJuITB9KER0LGl0LCRlLEhlKSlyZXR1cm4hMX1lbHNlIGlmKHV0PT09d2UpZm9yKDtxdDxE''@;'; put 'put ''dC5sZW5ndGg7cXQrKyl7aWYoIVkoRHQscXQpKXtpZihZKGl0LHF0KSlyZXR1cm4hMTtmb3IodmFyIFJ0PU9iamVjdC5rZXlzKER0KTtxdDxSdC5sZW5ndGg7cXQrKyl7dmFyIFB0PVJ0W3F0XTtpZighWShpdCxQdCl8fCFEZShEdFtQdF0saXRbUHRdLCRlLEhlKSlyZXR1cm4hMX1yZXR1cm4g''@;'; put 'put ''UnQubGVuZ3RoPT09T2JqZWN0LmtleXMoaXQpLmxlbmd0aH1pZighWShpdCxxdCl8fCFEZShEdFtxdF0saXRbcXRdLCRlLEhlKSlyZXR1cm4hMX1mb3IocXQ9MDtxdDx0dC5sZW5ndGg7cXQrKyl7dmFyIGNpPXR0W3F0XTtpZighRGUoRHRbY2ldLGl0W2NpXSwkZSxIZSkpcmV0dXJuITF9cmV0''@;'; put 'put ''dXJuITB9KER0LGl0LCRlLHV0LHR0LEhlKTtyZXR1cm4gdHQudmFsMS5kZWxldGUoRHQpLHR0LnZhbDIuZGVsZXRlKGl0KSxPcn1mdW5jdGlvbiBJZShEdCxpdCwkZSx0dCl7Zm9yKHZhciBIZT16KER0KSx1dD0wO3V0PEhlLmxlbmd0aDt1dCsrKXt2YXIgcXQ9SGVbdXRdO2lmKERlKGl0LHF0''@;'; put 'put ''LCRlLHR0KSlyZXR1cm4gRHQuZGVsZXRlKHF0KSwhMH1yZXR1cm4hMX1mdW5jdGlvbiBWZShEdCl7c3dpdGNoKEYoRHQpKXtjYXNlInVuZGVmaW5lZCI6cmV0dXJuIG51bGw7Y2FzZSJvYmplY3QiOnJldHVybjtjYXNlInN5bWJvbCI6cmV0dXJuITE7Y2FzZSJzdHJpbmciOkR0PStEdDtjYXNl''@;'; put 'put ''Im51bWJlciI6aWYoVShEdCkpcmV0dXJuITF9cmV0dXJuITB9ZnVuY3Rpb24ga2UoRHQsaXQsJGUpe3ZhciB0dD1WZSgkZSk7cmV0dXJuIHR0Pz8oaXQuaGFzKHR0KSYmIUR0Lmhhcyh0dCkpfWZ1bmN0aW9uIEFlKER0LGl0LCRlLHR0LEhlKXt2YXIgdXQ9VmUoJGUpO2lmKG51bGwhPXV0KXJl''@;'; put 'put ''dHVybiB1dDt2YXIgcXQ9aXQuZ2V0KHV0KTtyZXR1cm4hKHZvaWQgMD09PXF0JiYhaXQuaGFzKHV0KXx8IURlKHR0LHF0LCExLEhlKSkmJiFEdC5oYXModXQpJiZEZSh0dCxxdCwhMSxIZSl9ZnVuY3Rpb24gbnQoRHQsaXQsJGUsdHQsSGUsdXQpe2Zvcih2YXIgcXQ9eihEdCksUnQ9MDtSdDxx''@;'; put 'put ''dC5sZW5ndGg7UnQrKyl7dmFyIFB0PXF0W1J0XTtpZihEZSgkZSxQdCxIZSx1dCkmJkRlKHR0LGl0LmdldChQdCksSGUsdXQpKXJldHVybiBEdC5kZWxldGUoUHQpLCEwfXJldHVybiExfXVlLmV4cG9ydHM9e2lzRGVlcEVxdWFsOmZ1bmN0aW9uIHl0KER0LGl0KXtyZXR1cm4gRGUoRHQsaXQs''@;'; put 'put ''ITEpfSxpc0RlZXBTdHJpY3RFcXVhbDpmdW5jdGlvbiBNdChEdCxpdCl7cmV0dXJuIERlKER0LGl0LCEwKX19fSw4MjI0Oih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC53cmFwcGVyPWZ1bmN0aW9uIHkoSSl7''@;'; put 'put ''cmV0dXJuIEl9fSw5NzQyOih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtYLmJ5dGVMZW5ndGg9ZnVuY3Rpb24gRihVKXt2YXIgVz1QKFUpLHE9V1sxXTtyZXR1cm4gMyooV1swXStxKS80LXF9LFgudG9CeXRlQXJyYXk9ZnVuY3Rpb24geihVKXt2YXIgVyxsZSxZPVAoVSkscT1ZWzBdLGVlPVlbMV0s''@;'; put 'put ''Sj1uZXcgXyhmdW5jdGlvbiBPKFUsVyxZKXtyZXR1cm4gMyooVytZKS80LVl9KDAscSxlZSkpLG5lPTAsaWU9ZWU+MD9xLTQ6cTtmb3IobGU9MDtsZTxpZTtsZSs9NClXPUlbVS5jaGFyQ29kZUF0KGxlKV08PDE4fElbVS5jaGFyQ29kZUF0KGxlKzEpXTw8MTJ8SVtVLmNoYXJDb2RlQXQobGUr''@;'; put 'put ''MildPDw2fElbVS5jaGFyQ29kZUF0KGxlKzMpXSxKW25lKytdPVc+PjE2JjI1NSxKW25lKytdPVc+PjgmMjU1LEpbbmUrK109MjU1Jlc7cmV0dXJuIDI9PT1lZSYmKFc9SVtVLmNoYXJDb2RlQXQobGUpXTw8MnxJW1UuY2hhckNvZGVBdChsZSsxKV0+PjQsSltuZSsrXT0yNTUmVyksMT09PWVl''@;'; put 'put ''JiYoVz1JW1UuY2hhckNvZGVBdChsZSldPDwxMHxJW1UuY2hhckNvZGVBdChsZSsxKV08PDR8SVtVLmNoYXJDb2RlQXQobGUrMildPj4yLEpbbmUrK109Vz4+OCYyNTUsSltuZSsrXT0yNTUmVyksSn0sWC5mcm9tQnl0ZUFycmF5PWZ1bmN0aW9uIEsoVSl7Zm9yKHZhciBXLFk9VS5sZW5ndGgs''@;'; put 'put ''cT1ZJTMsZWU9W10sSj0xNjM4MyxuZT0wLGllPVktcTtuZTxpZTtuZSs9SillZS5wdXNoKEwoVSxuZSxuZStKPmllP2llOm5lK0opKTtyZXR1cm4gMT09PXE/ZWUucHVzaCh5WyhXPVVbWS0xXSk+PjJdK3lbVzw8NCY2M10rIj09Iik6Mj09PXEmJmVlLnB1c2goeVsoVz0oVVtZLTJdPDw4KStV''@;'; put 'put ''W1ktMV0pPj4xMF0reVtXPj40JjYzXSt5W1c8PDImNjNdKyI9IiksZWUuam9pbigiIil9O2Zvcih2YXIgeT1bXSxJPVtdLF89dHlwZW9mIFVpbnQ4QXJyYXk8InUiP1VpbnQ4QXJyYXk6QXJyYXksZz0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5''@;'; put 'put ''ejAxMjM0NTY3ODkrLyIsQj0wO0I8NjQ7KytCKXlbQl09Z1tCXSxJW2cuY2hhckNvZGVBdChCKV09QjtmdW5jdGlvbiBQKFUpe3ZhciBXPVUubGVuZ3RoO2lmKFclND4wKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzdHJpbmcuIExlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNCIpO3Zh''@;'; put 'put ''ciBZPVUuaW5kZXhPZigiPSIpO3JldHVybi0xPT09WSYmKFk9VyksW1ksWT09PVc/MDo0LVklNF19ZnVuY3Rpb24gTihVKXtyZXR1cm4geVtVPj4xOCY2M10reVtVPj4xMiY2M10reVtVPj42JjYzXSt5WzYzJlVdfWZ1bmN0aW9uIEwoVSxXLFkpe2Zvcih2YXIgZWU9W10sSj1XO0o8WTtKKz0z''@;'; put 'put ''KWVlLnB1c2goTigoVVtKXTw8MTYmMTY3MTE2ODApKyhVW0orMV08PDgmNjUyODApKygyNTUmVVtKKzJdKSkpO3JldHVybiBlZS5qb2luKCIiKX1JWzQ1XT02MixJWzk1XT02M30sMzU1MDpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJLF8peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBnKHgs''@;'; put 'put ''Qyl7aWYoIXgpdGhyb3cgbmV3IEVycm9yKEN8fCJBc3NlcnRpb24gZmFpbGVkIil9ZnVuY3Rpb24gQih4LEMpe3guc3VwZXJfPUM7dmFyIFQ9ZnVuY3Rpb24oKXt9O1QucHJvdG90eXBlPUMucHJvdG90eXBlLHgucHJvdG90eXBlPW5ldyBULHgucHJvdG90eXBlLmNvbnN0cnVjdG9yPXh9ZnVu''@;'; put 'put ''Y3Rpb24gdyh4LEMsVCl7aWYody5pc0JOKHgpKXJldHVybiB4O3RoaXMubmVnYXRpdmU9MCx0aGlzLndvcmRzPW51bGwsdGhpcy5sZW5ndGg9MCx0aGlzLnJlZD1udWxsLG51bGwhPT14JiYoKCJsZSI9PT1DfHwiYmUiPT09QykmJihUPUMsQz0xMCksdGhpcy5faW5pdCh4fHwwLEN8fDEwLFR8''@;'; put 'put ''fCJiZSIpKX12YXIgUDsib2JqZWN0Ij09dHlwZW9mIEk/SS5leHBvcnRzPXc6Xy5CTj13LHcuQk49dyx3LndvcmRTaXplPTI2O3RyeXtQPXR5cGVvZiB3aW5kb3c8InUiJiZ0eXBlb2Ygd2luZG93LkJ1ZmZlcjwidSI/d2luZG93LkJ1ZmZlcjp5KDY2MDEpLkJ1ZmZlcn1jYXRjaHt9ZnVuY3Rp''@;'; put 'put ''b24gRih4LEMpe3ZhciBUPXguY2hhckNvZGVBdChDKTtyZXR1cm4gVD49NDgmJlQ8PTU3P1QtNDg6VD49NjUmJlQ8PTcwP1QtNTU6VD49OTcmJlQ8PTEwMj9ULTg3OnZvaWQgZyghMSwiSW52YWxpZCBjaGFyYWN0ZXIgaW4gIit4KX1mdW5jdGlvbiBPKHgsQyxUKXt2YXIgSD1GKHgsVCk7cmV0''@;'; put 'put ''dXJuIFQtMT49QyYmKEh8PUYoeCxULTEpPDw0KSxIfWZ1bmN0aW9uIHooeCxDLFQsSCl7Zm9yKHZhciBqPTAsRT0wLG09TWF0aC5taW4oeC5sZW5ndGgsVCksQT1DO0E8bTtBKyspe3ZhciBhZT14LmNoYXJDb2RlQXQoQSktNDg7aio9SCxFPWFlPj00OT9hZS00OSsxMDphZT49MTc/YWUtMTcr''@;'; put 'put ''MTA6YWUsZyhhZT49MCYmRTxILCJJbnZhbGlkIGNoYXJhY3RlciIpLGorPUV9cmV0dXJuIGp9ZnVuY3Rpb24gTih4LEMpe3gud29yZHM9Qy53b3Jkcyx4Lmxlbmd0aD1DLmxlbmd0aCx4Lm5lZ2F0aXZlPUMubmVnYXRpdmUseC5yZWQ9Qy5yZWR9aWYody5pc0JOPWZ1bmN0aW9uKEMpe3JldHVy''@;'; put 'put ''biBDIGluc3RhbmNlb2Ygd3x8bnVsbCE9PUMmJiJvYmplY3QiPT10eXBlb2YgQyYmQy5jb25zdHJ1Y3Rvci53b3JkU2l6ZT09PXcud29yZFNpemUmJkFycmF5LmlzQXJyYXkoQy53b3Jkcyl9LHcubWF4PWZ1bmN0aW9uKEMsVCl7cmV0dXJuIEMuY21wKFQpPjA/QzpUfSx3Lm1pbj1mdW5jdGlv''@;'; put 'put ''bihDLFQpe3JldHVybiBDLmNtcChUKTwwP0M6VH0sdy5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24oQyxULEgpe2lmKCJudW1iZXIiPT10eXBlb2YgQylyZXR1cm4gdGhpcy5faW5pdE51bWJlcihDLFQsSCk7aWYoIm9iamVjdCI9PXR5cGVvZiBDKXJldHVybiB0aGlzLl9pbml0QXJyYXkoQyxU''@;'; put 'put ''LEgpOyJoZXgiPT09VCYmKFQ9MTYpLGcoVD09PSgwfFQpJiZUPj0yJiZUPD0zNik7dmFyIGo9MDsiLSI9PT0oQz1DLnRvU3RyaW5nKCkucmVwbGFjZSgvXHMrL2csIiIpKVswXSYmKGorKyx0aGlzLm5lZ2F0aXZlPTEpLGo8Qy5sZW5ndGgmJigxNj09PVQ/dGhpcy5fcGFyc2VIZXgoQyxqLEgp''@;'; put 'put ''Oih0aGlzLl9wYXJzZUJhc2UoQyxULGopLCJsZSI9PT1IJiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksVCxIKSkpfSx3LnByb3RvdHlwZS5faW5pdE51bWJlcj1mdW5jdGlvbihDLFQsSCl7QzwwJiYodGhpcy5uZWdhdGl2ZT0xLEM9LUMpLEM8NjcxMDg4NjQ/KHRoaXMud29yZHM9''@;'; put 'put ''WzY3MTA4ODYzJkNdLHRoaXMubGVuZ3RoPTEpOkM8NDUwMzU5OTYyNzM3MDQ5Nj8odGhpcy53b3Jkcz1bNjcxMDg4NjMmQyxDLzY3MTA4ODY0JjY3MTA4ODYzXSx0aGlzLmxlbmd0aD0yKTooZyhDPDkwMDcxOTkyNTQ3NDA5OTIpLHRoaXMud29yZHM9WzY3MTA4ODYzJkMsQy82NzEwODg2NCY2''@;'; put 'put ''NzEwODg2MywxXSx0aGlzLmxlbmd0aD0zKSwibGUiPT09SCYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLFQsSCl9LHcucHJvdG90eXBlLl9pbml0QXJyYXk9ZnVuY3Rpb24oQyxULEgpe2lmKGcoIm51bWJlciI9PXR5cGVvZiBDLmxlbmd0aCksQy5sZW5ndGg8PTApcmV0dXJuIHRo''@;'; put 'put ''aXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTEsdGhpczt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoQy5sZW5ndGgvMyksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgaj0wO2o8dGhpcy5sZW5ndGg7aisrKXRoaXMud29yZHNbal09MDt2YXIgRSxtLEE9MDtpZigiYmUi''@;'; put 'put ''PT09SClmb3Ioaj1DLmxlbmd0aC0xLEU9MDtqPj0wO2otPTMpdGhpcy53b3Jkc1tFXXw9KG09Q1tqXXxDW2otMV08PDh8Q1tqLTJdPDwxNik8PEEmNjcxMDg4NjMsdGhpcy53b3Jkc1tFKzFdPW0+Pj4yNi1BJjY3MTA4ODYzLChBKz0yNCk+PTI2JiYoQS09MjYsRSsrKTtlbHNlIGlmKCJsZSI9''@;'; put 'put ''PT1IKWZvcihqPTAsRT0wO2o8Qy5sZW5ndGg7ais9Myl0aGlzLndvcmRzW0VdfD0obT1DW2pdfENbaisxXTw8OHxDW2orMl08PDE2KTw8QSY2NzEwODg2Myx0aGlzLndvcmRzW0UrMV09bT4+PjI2LUEmNjcxMDg4NjMsKEErPTI0KT49MjYmJihBLT0yNixFKyspO3JldHVybiB0aGlzLl9zdHJp''@;'; put 'put ''cCgpfSx3LnByb3RvdHlwZS5fcGFyc2VIZXg9ZnVuY3Rpb24oQyxULEgpe3RoaXMubGVuZ3RoPU1hdGguY2VpbCgoQy5sZW5ndGgtVCkvNiksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgaj0wO2o8dGhpcy5sZW5ndGg7aisrKXRoaXMud29yZHNbal09MDt2YXIg''@;'; put 'put ''QSxFPTAsbT0wO2lmKCJiZSI9PT1IKWZvcihqPUMubGVuZ3RoLTE7aj49VDtqLT0yKUE9TyhDLFQsaik8PEUsdGhpcy53b3Jkc1ttXXw9NjcxMDg4NjMmQSxFPj0xOD8oRS09MTgsdGhpcy53b3Jkc1ttKz0xXXw9QT4+PjI2KTpFKz04O2Vsc2UgZm9yKGo9KEMubGVuZ3RoLVQpJTI9PTA/VCsx''@;'; put 'put ''OlQ7ajxDLmxlbmd0aDtqKz0yKUE9TyhDLFQsaik8PEUsdGhpcy53b3Jkc1ttXXw9NjcxMDg4NjMmQSxFPj0xOD8oRS09MTgsdGhpcy53b3Jkc1ttKz0xXXw9QT4+PjI2KTpFKz04O3RoaXMuX3N0cmlwKCl9LHcucHJvdG90eXBlLl9wYXJzZUJhc2U9ZnVuY3Rpb24oQyxULEgpe3RoaXMud29y''@;'; put 'put ''ZHM9WzBdLHRoaXMubGVuZ3RoPTE7Zm9yKHZhciBqPTAsRT0xO0U8PTY3MTA4ODYzO0UqPVQpaisrO2otLSxFPUUvVHwwO2Zvcih2YXIgbT1DLmxlbmd0aC1ILEE9bSVqLGFlPU1hdGgubWluKG0sbS1BKStILHRlPTAsc2U9SDtzZTxhZTtzZSs9ail0ZT16KEMsc2Usc2UraixUKSx0aGlzLmlt''@;'; put 'put ''dWxuKEUpLHRoaXMud29yZHNbMF0rdGU8NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9dGU6dGhpcy5faWFkZG4odGUpO2lmKDAhPT1BKXt2YXIgd2U9MTtmb3IodGU9eihDLHNlLEMubGVuZ3RoLFQpLHNlPTA7c2U8QTtzZSsrKXdlKj1UO3RoaXMuaW11bG4od2UpLHRoaXMud29yZHNbMF0rdGU8''@;'; put 'put ''NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9dGU6dGhpcy5faWFkZG4odGUpfXRoaXMuX3N0cmlwKCl9LHcucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oQyl7Qy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgVD0wO1Q8dGhpcy5sZW5ndGg7VCsrKUMud29yZHNbVF09dGhpcy53''@;'; put 'put ''b3Jkc1tUXTtDLmxlbmd0aD10aGlzLmxlbmd0aCxDLm5lZ2F0aXZlPXRoaXMubmVnYXRpdmUsQy5yZWQ9dGhpcy5yZWR9LHcucHJvdG90eXBlLl9tb3ZlPWZ1bmN0aW9uKEMpe04oQyx0aGlzKX0sdy5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgQz1uZXcgdyhudWxsKTtyZXR1cm4g''@;'; put 'put ''dGhpcy5jb3B5KEMpLEN9LHcucHJvdG90eXBlLl9leHBhbmQ9ZnVuY3Rpb24oQyl7Zm9yKDt0aGlzLmxlbmd0aDxDOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7cmV0dXJuIHRoaXN9LHcucHJvdG90eXBlLl9zdHJpcD1mdW5jdGlvbigpe2Zvcig7dGhpcy5sZW5ndGg+MSYmMD09PXRo''@;'; put 'put ''aXMud29yZHNbdGhpcy5sZW5ndGgtMV07KXRoaXMubGVuZ3RoLS07cmV0dXJuIHRoaXMuX25vcm1TaWduKCl9LHcucHJvdG90eXBlLl9ub3JtU2lnbj1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdJiYodGhpcy5uZWdhdGl2ZT0wKSx0aGlzfSx0''@;'; put 'put ''eXBlb2YgU3ltYm9sPCJ1IiYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbC5mb3IpdHJ5e3cucHJvdG90eXBlW1N5bWJvbC5mb3IoIm5vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tIildPUx9Y2F0Y2h7dy5wcm90b3R5cGUuaW5zcGVjdD1MfWVsc2Ugdy5wcm90b3R5cGUuaW5zcGVjdD1MO2Z1''@;'; put 'put ''bmN0aW9uIEwoKXtyZXR1cm4odGhpcy5yZWQ/IjxCTi1SOiAiOiI8Qk46ICIpK3RoaXMudG9TdHJpbmcoMTYpKyI+In12YXIgSz1bIiIsIjAiLCIwMCIsIjAwMCIsIjAwMDAiLCIwMDAwMCIsIjAwMDAwMCIsIjAwMDAwMDAiLCIwMDAwMDAwMCIsIjAwMDAwMDAwMCIsIjAwMDAwMDAwMDAiLCIw''@;'; put 'put ''MDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAw''@;'; put 'put ''MDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiXSxVPVswLDAsMjUsMTYsMTIs''@;'; put 'put ''MTEsMTAsOSw4LDgsNyw3LDcsNyw2LDYsNiw2LDYsNiw2LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVdLFc9WzAsMCwzMzU1NDQzMiw0MzA0NjcyMSwxNjc3NzIxNiw0ODgyODEyNSw2MDQ2NjE3Niw0MDM1MzYwNywxNjc3NzIxNiw0MzA0NjcyMSwxZTcsMTk0ODcxNzEsMzU4MzE4''@;'; put 'put ''MDgsNjI3NDg1MTcsNzUyOTUzNiwxMTM5MDYyNSwxNjc3NzIxNiwyNDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQwODQxMDEsNTE1MzYzMiw2NDM2MzQzLDc5NjI2MjQsOTc2NTYyNSwxMTg4MTM3NiwxNDM0ODkwNywxNzIxMDM2OCwyMDUxMTE0OSwyNDNlNSwyODYyOTE1MSwzMzU1''@;'; put 'put ''NDQzMiwzOTEzNTM5Myw0NTQzNTQyNCw1MjUyMTg3NSw2MDQ2NjE3Nl07ZnVuY3Rpb24gZWUoeCxDLFQpe1QubmVnYXRpdmU9Qy5uZWdhdGl2ZV54Lm5lZ2F0aXZlO3ZhciBIPXgubGVuZ3RoK0MubGVuZ3RofDA7VC5sZW5ndGg9SCxIPUgtMXwwO3ZhciBqPTB8eC53b3Jkc1swXSxFPTB8Qy53''@;'; put 'put ''b3Jkc1swXSxtPWoqRSxhZT1tLzY3MTA4ODY0fDA7VC53b3Jkc1swXT02NzEwODg2MyZtO2Zvcih2YXIgdGU9MTt0ZTxIO3RlKyspe2Zvcih2YXIgc2U9YWU+Pj4yNix3ZT02NzEwODg2MyZhZSxVZT1NYXRoLm1pbih0ZSxDLmxlbmd0aC0xKSxKZT1NYXRoLm1heCgwLHRlLXgubGVuZ3RoKzEp''@;'; put 'put ''O0plPD1VZTtKZSsrKXNlKz0obT0oaj0wfHgud29yZHNbdGUtSmV8MF0pKihFPTB8Qy53b3Jkc1tKZV0pK3dlKS82NzEwODg2NHwwLHdlPTY3MTA4ODYzJm07VC53b3Jkc1t0ZV09MHx3ZSxhZT0wfHNlfXJldHVybiAwIT09YWU/VC53b3Jkc1t0ZV09MHxhZTpULmxlbmd0aC0tLFQuX3N0cmlw''@;'; put 'put ''KCl9dy5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oQyxUKXt2YXIgSDtpZihUPTB8VHx8MSwxNj09PShDPUN8fDEwKXx8ImhleCI9PT1DKXtIPSIiO2Zvcih2YXIgaj0wLEU9MCxtPTA7bTx0aGlzLmxlbmd0aDttKyspe3ZhciBBPXRoaXMud29yZHNbbV0sYWU9KDE2Nzc3MjE1JihBPDxq''@;'; put 'put ''fEUpKS50b1N0cmluZygxNik7RT1BPj4+MjQtaiYxNjc3NzIxNSwoais9Mik+PTI2JiYoai09MjYsbS0tKSxIPTAhPT1FfHxtIT09dGhpcy5sZW5ndGgtMT9LWzYtYWUubGVuZ3RoXSthZStIOmFlK0h9Zm9yKDAhPT1FJiYoSD1FLnRvU3RyaW5nKDE2KStIKTtILmxlbmd0aCVUIT0wOylIPSIw''@;'; put 'put ''IitIO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKEg9Ii0iK0gpLEh9aWYoQz09PSgwfEMpJiZDPj0yJiZDPD0zNil7dmFyIHRlPVVbQ10sc2U9V1tDXTtIPSIiO3ZhciB3ZT10aGlzLmNsb25lKCk7Zm9yKHdlLm5lZ2F0aXZlPTA7IXdlLmlzWmVybygpOyl7dmFyIFVlPXdlLm1vZHJuKHNl''@;'; put 'put ''KS50b1N0cmluZyhDKTtIPSh3ZT13ZS5pZGl2bihzZSkpLmlzWmVybygpP1VlK0g6S1t0ZS1VZS5sZW5ndGhdK1VlK0h9Zm9yKHRoaXMuaXNaZXJvKCkmJihIPSIwIitIKTtILmxlbmd0aCVUIT0wOylIPSIwIitIO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKEg9Ii0iK0gpLEh9ZyghMSwi''@;'; put 'put ''QmFzZSBzaG91bGQgYmUgYmV0d2VlbiAyIGFuZCAzNiIpfSx3LnByb3RvdHlwZS50b051bWJlcj1mdW5jdGlvbigpe3ZhciBDPXRoaXMud29yZHNbMF07cmV0dXJuIDI9PT10aGlzLmxlbmd0aD9DKz02NzEwODg2NCp0aGlzLndvcmRzWzFdOjM9PT10aGlzLmxlbmd0aCYmMT09PXRoaXMud29y''@;'; put 'put ''ZHNbMl0/Qys9NDUwMzU5OTYyNzM3MDQ5Nis2NzEwODg2NCp0aGlzLndvcmRzWzFdOnRoaXMubGVuZ3RoPjImJmcoITEsIk51bWJlciBjYW4gb25seSBzYWZlbHkgc3RvcmUgdXAgdG8gNTMgYml0cyIpLDAhPT10aGlzLm5lZ2F0aXZlPy1DOkN9LHcucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlv''@;'; put 'put ''bigpe3JldHVybiB0aGlzLnRvU3RyaW5nKDE2LDIpfSxQJiYody5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24oQyxUKXtyZXR1cm4gdGhpcy50b0FycmF5TGlrZShQLEMsVCl9KSx3LnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKEMsVCl7cmV0dXJuIHRoaXMudG9BcnJheUxpa2UoQXJy''@;'; put 'put ''YXksQyxUKX0sdy5wcm90b3R5cGUudG9BcnJheUxpa2U9ZnVuY3Rpb24oQyxULEgpe3RoaXMuX3N0cmlwKCk7dmFyIGo9dGhpcy5ieXRlTGVuZ3RoKCksRT1IfHxNYXRoLm1heCgxLGopO2coajw9RSwiYnl0ZSBhcnJheSBsb25nZXIgdGhhbiBkZXNpcmVkIGxlbmd0aCIpLGcoRT4wLCJSZXF1''@;'; put 'put ''ZXN0ZWQgYXJyYXkgbGVuZ3RoIDw9IDAiKTt2YXIgbT1mdW5jdGlvbihDLFQpe3JldHVybiBDLmFsbG9jVW5zYWZlP0MuYWxsb2NVbnNhZmUoVCk6bmV3IEMoVCl9KEMsRSk7cmV0dXJuIHRoaXNbIl90b0FycmF5TGlrZSIrKCJsZSI9PT1UPyJMRSI6IkJFIildKG0saiksbX0sdy5wcm90b3R5''@;'; put 'put ''cGUuX3RvQXJyYXlMaWtlTEU9ZnVuY3Rpb24oQyxUKXtmb3IodmFyIEg9MCxqPTAsRT0wLG09MDtFPHRoaXMubGVuZ3RoO0UrKyl7dmFyIEE9dGhpcy53b3Jkc1tFXTw8bXxqO0NbSCsrXT0yNTUmQSxIPEMubGVuZ3RoJiYoQ1tIKytdPUE+PjgmMjU1KSxIPEMubGVuZ3RoJiYoQ1tIKytdPUE+''@;'; put 'put ''PjE2JjI1NSksNj09PW0/KEg8Qy5sZW5ndGgmJihDW0grK109QT4+MjQmMjU1KSxqPTAsbT0wKTooaj1BPj4+MjQsbSs9Mil9aWYoSDxDLmxlbmd0aClmb3IoQ1tIKytdPWo7SDxDLmxlbmd0aDspQ1tIKytdPTB9LHcucHJvdG90eXBlLl90b0FycmF5TGlrZUJFPWZ1bmN0aW9uKEMsVCl7Zm9y''@;'; put 'put ''KHZhciBIPUMubGVuZ3RoLTEsaj0wLEU9MCxtPTA7RTx0aGlzLmxlbmd0aDtFKyspe3ZhciBBPXRoaXMud29yZHNbRV08PG18ajtDW0gtLV09MjU1JkEsSD49MCYmKENbSC0tXT1BPj44JjI1NSksSD49MCYmKENbSC0tXT1BPj4xNiYyNTUpLDY9PT1tPyhIPj0wJiYoQ1tILS1dPUE+PjI0JjI1''@;'; put 'put ''NSksaj0wLG09MCk6KGo9QT4+PjI0LG0rPTIpfWlmKEg+PTApZm9yKENbSC0tXT1qO0g+PTA7KUNbSC0tXT0wfSx3LnByb3RvdHlwZS5fY291bnRCaXRzPU1hdGguY2x6MzI/ZnVuY3Rpb24oQyl7cmV0dXJuIDMyLU1hdGguY2x6MzIoQyl9OmZ1bmN0aW9uKEMpe3ZhciBUPUMsSD0wO3JldHVy''@;'; put 'put ''biBUPj00MDk2JiYoSCs9MTMsVD4+Pj0xMyksVD49NjQmJihIKz03LFQ+Pj49NyksVD49OCYmKEgrPTQsVD4+Pj00KSxUPj0yJiYoSCs9MixUPj4+PTIpLEgrVH0sdy5wcm90b3R5cGUuX3plcm9CaXRzPWZ1bmN0aW9uKEMpe2lmKDA9PT1DKXJldHVybiAyNjt2YXIgVD1DLEg9MDtyZXR1cm4g''@;'; put 'put ''ODE5MSZUfHwoSCs9MTMsVD4+Pj0xMyksMTI3JlR8fChIKz03LFQ+Pj49NyksMTUmVHx8KEgrPTQsVD4+Pj00KSwzJlR8fChIKz0yLFQ+Pj49MiksMSZUfHxIKyssSH0sdy5wcm90b3R5cGUuYml0TGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIFQ9dGhpcy5fY291bnRCaXRzKHRoaXMud29yZHNbdGhp''@;'; put 'put ''cy5sZW5ndGgtMV0pO3JldHVybiAyNioodGhpcy5sZW5ndGgtMSkrVH0sdy5wcm90b3R5cGUuemVyb0JpdHM9ZnVuY3Rpb24oKXtpZih0aGlzLmlzWmVybygpKXJldHVybiAwO2Zvcih2YXIgQz0wLFQ9MDtUPHRoaXMubGVuZ3RoO1QrKyl7dmFyIEg9dGhpcy5femVyb0JpdHModGhpcy53b3Jk''@;'; put 'put ''c1tUXSk7aWYoQys9SCwyNiE9PUgpYnJlYWt9cmV0dXJuIEN9LHcucHJvdG90eXBlLmJ5dGVMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuYml0TGVuZ3RoKCkvOCl9LHcucHJvdG90eXBlLnRvVHdvcz1mdW5jdGlvbihDKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/''@;'; put 'put ''dGhpcy5hYnMoKS5pbm90bihDKS5pYWRkbigxKTp0aGlzLmNsb25lKCl9LHcucHJvdG90eXBlLmZyb21Ud29zPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLnRlc3RuKEMtMSk/dGhpcy5ub3RuKEMpLmlhZGRuKDEpLmluZWcoKTp0aGlzLmNsb25lKCl9LHcucHJvdG90eXBlLmlzTmVnPWZ1bmN0''@;'; put 'put ''aW9uKCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlfSx3LnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmluZWcoKX0sdy5wcm90b3R5cGUuaW5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzWmVybygpfHwodGhpcy5uZWdhdGl2ZV49MSksdGhpc30sdy5w''@;'; put 'put ''cm90b3R5cGUuaXVvcj1mdW5jdGlvbihDKXtmb3IoO3RoaXMubGVuZ3RoPEMubGVuZ3RoOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7Zm9yKHZhciBUPTA7VDxDLmxlbmd0aDtUKyspdGhpcy53b3Jkc1tUXT10aGlzLndvcmRzW1RdfEMud29yZHNbVF07cmV0dXJuIHRoaXMuX3N0cmlw''@;'; put 'put ''KCl9LHcucHJvdG90eXBlLmlvcj1mdW5jdGlvbihDKXtyZXR1cm4gZyghKHRoaXMubmVnYXRpdmV8Qy5uZWdhdGl2ZSkpLHRoaXMuaXVvcihDKX0sdy5wcm90b3R5cGUub3I9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMubGVuZ3RoPkMubGVuZ3RoP3RoaXMuY2xvbmUoKS5pb3IoQyk6Qy5jbG9u''@;'; put 'put ''ZSgpLmlvcih0aGlzKX0sdy5wcm90b3R5cGUudW9yPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmxlbmd0aD5DLmxlbmd0aD90aGlzLmNsb25lKCkuaXVvcihDKTpDLmNsb25lKCkuaXVvcih0aGlzKX0sdy5wcm90b3R5cGUuaXVhbmQ9ZnVuY3Rpb24oQyl7dmFyIFQ7VD10aGlzLmxlbmd0aD5D''@;'; put 'put ''Lmxlbmd0aD9DOnRoaXM7Zm9yKHZhciBIPTA7SDxULmxlbmd0aDtIKyspdGhpcy53b3Jkc1tIXT10aGlzLndvcmRzW0hdJkMud29yZHNbSF07cmV0dXJuIHRoaXMubGVuZ3RoPVQubGVuZ3RoLHRoaXMuX3N0cmlwKCl9LHcucHJvdG90eXBlLmlhbmQ9ZnVuY3Rpb24oQyl7cmV0dXJuIGcoISh0''@;'; put 'put ''aGlzLm5lZ2F0aXZlfEMubmVnYXRpdmUpKSx0aGlzLml1YW5kKEMpfSx3LnByb3RvdHlwZS5hbmQ9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMubGVuZ3RoPkMubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYW5kKEMpOkMuY2xvbmUoKS5pYW5kKHRoaXMpfSx3LnByb3RvdHlwZS51YW5kPWZ1bmN0aW9u''@;'; put 'put ''KEMpe3JldHVybiB0aGlzLmxlbmd0aD5DLmxlbmd0aD90aGlzLmNsb25lKCkuaXVhbmQoQyk6Qy5jbG9uZSgpLml1YW5kKHRoaXMpfSx3LnByb3RvdHlwZS5pdXhvcj1mdW5jdGlvbihDKXt2YXIgVCxIO3RoaXMubGVuZ3RoPkMubGVuZ3RoPyhUPXRoaXMsSD1DKTooVD1DLEg9dGhpcyk7Zm9y''@;'; put 'put ''KHZhciBqPTA7ajxILmxlbmd0aDtqKyspdGhpcy53b3Jkc1tqXT1ULndvcmRzW2pdXkgud29yZHNbal07aWYodGhpcyE9PVQpZm9yKDtqPFQubGVuZ3RoO2orKyl0aGlzLndvcmRzW2pdPVQud29yZHNbal07cmV0dXJuIHRoaXMubGVuZ3RoPVQubGVuZ3RoLHRoaXMuX3N0cmlwKCl9LHcucHJv''@;'; put 'put ''dG90eXBlLml4b3I9ZnVuY3Rpb24oQyl7cmV0dXJuIGcoISh0aGlzLm5lZ2F0aXZlfEMubmVnYXRpdmUpKSx0aGlzLml1eG9yKEMpfSx3LnByb3RvdHlwZS54b3I9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMubGVuZ3RoPkMubGVuZ3RoP3RoaXMuY2xvbmUoKS5peG9yKEMpOkMuY2xvbmUoKS5p''@;'; put 'put ''eG9yKHRoaXMpfSx3LnByb3RvdHlwZS51eG9yPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmxlbmd0aD5DLmxlbmd0aD90aGlzLmNsb25lKCkuaXV4b3IoQyk6Qy5jbG9uZSgpLml1eG9yKHRoaXMpfSx3LnByb3RvdHlwZS5pbm90bj1mdW5jdGlvbihDKXtnKCJudW1iZXIiPT10eXBlb2YgQyYm''@;'; put 'put ''Qz49MCk7dmFyIFQ9MHxNYXRoLmNlaWwoQy8yNiksSD1DJTI2O3RoaXMuX2V4cGFuZChUKSxIPjAmJlQtLTtmb3IodmFyIGo9MDtqPFQ7aisrKXRoaXMud29yZHNbal09NjcxMDg4NjMmfnRoaXMud29yZHNbal07cmV0dXJuIEg+MCYmKHRoaXMud29yZHNbal09fnRoaXMud29yZHNbal0mNjcx''@;'; put 'put ''MDg4NjM+PjI2LUgpLHRoaXMuX3N0cmlwKCl9LHcucHJvdG90eXBlLm5vdG49ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbm90bihDKX0sdy5wcm90b3R5cGUuc2V0bj1mdW5jdGlvbihDLFQpe2coIm51bWJlciI9PXR5cGVvZiBDJiZDPj0wKTt2YXIgSD1DLzI2fDAsaj1DJTI2''@;'; put 'put ''O3JldHVybiB0aGlzLl9leHBhbmQoSCsxKSx0aGlzLndvcmRzW0hdPVQ/dGhpcy53b3Jkc1tIXXwxPDxqOnRoaXMud29yZHNbSF0mfigxPDxqKSx0aGlzLl9zdHJpcCgpfSx3LnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKEMpe3ZhciBULEgsajtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PUMu''@;'; put 'put ''bmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCxUPXRoaXMuaXN1YihDKSx0aGlzLm5lZ2F0aXZlXj0xLHRoaXMuX25vcm1TaWduKCk7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1DLm5lZ2F0aXZlKXJldHVybiBDLm5lZ2F0aXZlPTAsVD10aGlzLmlzdWIoQyksQy5uZWdhdGl2ZT0x''@;'; put 'put ''LFQuX25vcm1TaWduKCk7dGhpcy5sZW5ndGg+Qy5sZW5ndGg/KEg9dGhpcyxqPUMpOihIPUMsaj10aGlzKTtmb3IodmFyIEU9MCxtPTA7bTxqLmxlbmd0aDttKyspdGhpcy53b3Jkc1ttXT02NzEwODg2MyYoVD0oMHxILndvcmRzW21dKSsoMHxqLndvcmRzW21dKStFKSxFPVQ+Pj4yNjtmb3Io''@;'; put 'put ''OzAhPT1FJiZtPEgubGVuZ3RoO20rKyl0aGlzLndvcmRzW21dPTY3MTA4ODYzJihUPSgwfEgud29yZHNbbV0pK0UpLEU9VD4+PjI2O2lmKHRoaXMubGVuZ3RoPUgubGVuZ3RoLDAhPT1FKXRoaXMud29yZHNbdGhpcy5sZW5ndGhdPUUsdGhpcy5sZW5ndGgrKztlbHNlIGlmKEghPT10aGlzKWZv''@;'; put 'put ''cig7bTxILmxlbmd0aDttKyspdGhpcy53b3Jkc1ttXT1ILndvcmRzW21dO3JldHVybiB0aGlzfSx3LnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oQyl7dmFyIFQ7cmV0dXJuIDAhPT1DLm5lZ2F0aXZlJiYwPT09dGhpcy5uZWdhdGl2ZT8oQy5uZWdhdGl2ZT0wLFQ9dGhpcy5zdWIoQyksQy5uZWdh''@;'; put 'put ''dGl2ZV49MSxUKTowPT09Qy5uZWdhdGl2ZSYmMCE9PXRoaXMubmVnYXRpdmU/KHRoaXMubmVnYXRpdmU9MCxUPUMuc3ViKHRoaXMpLHRoaXMubmVnYXRpdmU9MSxUKTp0aGlzLmxlbmd0aD5DLmxlbmd0aD90aGlzLmNsb25lKCkuaWFkZChDKTpDLmNsb25lKCkuaWFkZCh0aGlzKX0sdy5wcm90''@;'; put 'put ''b3R5cGUuaXN1Yj1mdW5jdGlvbihDKXtpZigwIT09Qy5uZWdhdGl2ZSl7Qy5uZWdhdGl2ZT0wO3ZhciBUPXRoaXMuaWFkZChDKTtyZXR1cm4gQy5uZWdhdGl2ZT0xLFQuX25vcm1TaWduKCl9aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGQoQyks''@;'; put 'put ''dGhpcy5uZWdhdGl2ZT0xLHRoaXMuX25vcm1TaWduKCk7dmFyIGosRSxIPXRoaXMuY21wKEMpO2lmKDA9PT1IKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5sZW5ndGg9MSx0aGlzLndvcmRzWzBdPTAsdGhpcztIPjA/KGo9dGhpcyxFPUMpOihqPUMsRT10aGlzKTtmb3IodmFyIG09MCxB''@;'; put 'put ''PTA7QTxFLmxlbmd0aDtBKyspbT0oVD0oMHxqLndvcmRzW0FdKS0oMHxFLndvcmRzW0FdKSttKT4+MjYsdGhpcy53b3Jkc1tBXT02NzEwODg2MyZUO2Zvcig7MCE9PW0mJkE8ai5sZW5ndGg7QSsrKW09KFQ9KDB8ai53b3Jkc1tBXSkrbSk+PjI2LHRoaXMud29yZHNbQV09NjcxMDg4NjMmVDtp''@;'; put 'put ''ZigwPT09bSYmQTxqLmxlbmd0aCYmaiE9PXRoaXMpZm9yKDtBPGoubGVuZ3RoO0ErKyl0aGlzLndvcmRzW0FdPWoud29yZHNbQV07cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLEEpLGohPT10aGlzJiYodGhpcy5uZWdhdGl2ZT0xKSx0aGlzLl9zdHJpcCgpfSx3LnBy''@;'; put 'put ''b3RvdHlwZS5zdWI9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3ViKEMpfTt2YXIgSj1mdW5jdGlvbihDLFQsSCl7dmFyIGFlLHRlLHNlLGo9Qy53b3JkcyxFPVQud29yZHMsbT1ILndvcmRzLEE9MCx3ZT0wfGpbMF0sVWU9ODE5MSZ3ZSxKZT13ZT4+PjEzLG90PTB8alsxXSx4''@;'; put 'put ''ZT04MTkxJm90LHZlPW90Pj4+MTMsWGU9MHxqWzJdLHplPTgxOTEmWGUsRGU9WGU+Pj4xMyxGZT0wfGpbM10sT2U9ODE5MSZGZSxJZT1GZT4+PjEzLFZlPTB8als0XSxrZT04MTkxJlZlLEFlPVZlPj4+MTMsX3Q9MHxqWzVdLG50PTgxOTEmX3QsUWU9X3Q+Pj4xMyx1bj0wfGpbNl0seXQ9ODE5''@;'; put 'put ''MSZ1bixNdD11bj4+PjEzLER0PTB8als3XSxpdD04MTkxJkR0LCRlPUR0Pj4+MTMsdHQ9MHxqWzhdLEhlPTgxOTEmdHQsdXQ9dHQ+Pj4xMyxxdD0wfGpbOV0sUnQ9ODE5MSZxdCxQdD1xdD4+PjEzLGNpPTB8RVswXSxRdD04MTkxJmNpLHNuPWNpPj4+MTMsUmk9MHxFWzFdLGhuPTgxOTEmUmks''@;'; put 'put ''ZnQ9Umk+Pj4xMyxPcj0wfEVbMl0sV3Q9ODE5MSZPcixBdD1Pcj4+PjEzLFJuPTB8RVszXSxzdD04MTkxJlJuLFV0PVJuPj4+MTMscmk9MHxFWzRdLFdlPTgxOTEmcmksVHQ9cmk+Pj4xMyxucj0wfEVbNV0saHQ9ODE5MSZucix4dD1ucj4+PjEzLGpuPTB8RVs2XSxybj04MTkxJmpuLHp0PWpu''@;'; put 'put ''Pj4+MTMsaGk9MHxFWzddLGNuPTgxOTEmaGksZm49aGk+Pj4xMyxJaT0wfEVbOF0sWHQ9ODE5MSZJaSxlbj1JaT4+PjEzLHVhPTB8RVs5XSxFaT04MTkxJnVhLHZyPXVhPj4+MTM7SC5uZWdhdGl2ZT1DLm5lZ2F0aXZlXlQubmVnYXRpdmUsSC5sZW5ndGg9MTk7dmFyIFduPShBKyhhZT1NYXRo''@;'; put 'put ''LmltdWwoVWUsUXQpKXwwKSsoKDgxOTEmKHRlPSh0ZT1NYXRoLmltdWwoVWUsc24pKStNYXRoLmltdWwoSmUsUXQpfDApKTw8MTMpfDA7QT0oKHNlPU1hdGguaW11bChKZSxzbikpKyh0ZT4+PjEzKXwwKSsoV24+Pj4yNil8MCxXbiY9NjcxMDg4NjMsYWU9TWF0aC5pbXVsKHhlLFF0KSx0ZT0o''@;'; put 'put ''dGU9TWF0aC5pbXVsKHhlLHNuKSkrTWF0aC5pbXVsKHZlLFF0KXwwLHNlPU1hdGguaW11bCh2ZSxzbik7dmFyICRpPShBKyhhZT1hZStNYXRoLmltdWwoVWUsaG4pfDApfDApKygoODE5MSYodGU9KHRlPXRlK01hdGguaW11bChVZSxmdCl8MCkrTWF0aC5pbXVsKEplLGhuKXwwKSk8PDEzKXww''@;'; put 'put ''O0E9KChzZT1zZStNYXRoLmltdWwoSmUsZnQpfDApKyh0ZT4+PjEzKXwwKSsoJGk+Pj4yNil8MCwkaSY9NjcxMDg4NjMsYWU9TWF0aC5pbXVsKHplLFF0KSx0ZT0odGU9TWF0aC5pbXVsKHplLHNuKSkrTWF0aC5pbXVsKERlLFF0KXwwLHNlPU1hdGguaW11bChEZSxzbiksYWU9YWUrTWF0aC5p''@;'; put 'put ''bXVsKHhlLGhuKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoeGUsZnQpfDApK01hdGguaW11bCh2ZSxobil8MCxzZT1zZStNYXRoLmltdWwodmUsZnQpfDA7dmFyIGVpPShBKyhhZT1hZStNYXRoLmltdWwoVWUsV3QpfDApfDApKygoODE5MSYodGU9KHRlPXRlK01hdGguaW11bChVZSxBdCl8MCkr''@;'; put 'put ''TWF0aC5pbXVsKEplLFd0KXwwKSk8PDEzKXwwO0E9KChzZT1zZStNYXRoLmltdWwoSmUsQXQpfDApKyh0ZT4+PjEzKXwwKSsoZWk+Pj4yNil8MCxlaSY9NjcxMDg4NjMsYWU9TWF0aC5pbXVsKE9lLFF0KSx0ZT0odGU9TWF0aC5pbXVsKE9lLHNuKSkrTWF0aC5pbXVsKEllLFF0KXwwLHNlPU1h''@;'; put 'put ''dGguaW11bChJZSxzbiksYWU9YWUrTWF0aC5pbXVsKHplLGhuKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoemUsZnQpfDApK01hdGguaW11bChEZSxobil8MCxzZT1zZStNYXRoLmltdWwoRGUsZnQpfDAsYWU9YWUrTWF0aC5pbXVsKHhlLFd0KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoeGUsQXQp''@;'; put 'put ''fDApK01hdGguaW11bCh2ZSxXdCl8MCxzZT1zZStNYXRoLmltdWwodmUsQXQpfDA7dmFyIFFyPShBKyhhZT1hZStNYXRoLmltdWwoVWUsc3QpfDApfDApKygoODE5MSYodGU9KHRlPXRlK01hdGguaW11bChVZSxVdCl8MCkrTWF0aC5pbXVsKEplLHN0KXwwKSk8PDEzKXwwO0E9KChzZT1zZStN''@;'; put 'put ''YXRoLmltdWwoSmUsVXQpfDApKyh0ZT4+PjEzKXwwKSsoUXI+Pj4yNil8MCxRciY9NjcxMDg4NjMsYWU9TWF0aC5pbXVsKGtlLFF0KSx0ZT0odGU9TWF0aC5pbXVsKGtlLHNuKSkrTWF0aC5pbXVsKEFlLFF0KXwwLHNlPU1hdGguaW11bChBZSxzbiksYWU9YWUrTWF0aC5pbXVsKE9lLGhuKXww''@;'; put 'put ''LHRlPSh0ZT10ZStNYXRoLmltdWwoT2UsZnQpfDApK01hdGguaW11bChJZSxobil8MCxzZT1zZStNYXRoLmltdWwoSWUsZnQpfDAsYWU9YWUrTWF0aC5pbXVsKHplLFd0KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoemUsQXQpfDApK01hdGguaW11bChEZSxXdCl8MCxzZT1zZStNYXRoLmltdWwo''@;'; put 'put ''RGUsQXQpfDAsYWU9YWUrTWF0aC5pbXVsKHhlLHN0KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoeGUsVXQpfDApK01hdGguaW11bCh2ZSxzdCl8MCxzZT1zZStNYXRoLmltdWwodmUsVXQpfDA7dmFyIFZpPShBKyhhZT1hZStNYXRoLmltdWwoVWUsV2UpfDApfDApKygoODE5MSYodGU9KHRlPXRl''@;'; put 'put ''K01hdGguaW11bChVZSxUdCl8MCkrTWF0aC5pbXVsKEplLFdlKXwwKSk8PDEzKXwwO0E9KChzZT1zZStNYXRoLmltdWwoSmUsVHQpfDApKyh0ZT4+PjEzKXwwKSsoVmk+Pj4yNil8MCxWaSY9NjcxMDg4NjMsYWU9TWF0aC5pbXVsKG50LFF0KSx0ZT0odGU9TWF0aC5pbXVsKG50LHNuKSkrTWF0''@;'; put 'put ''aC5pbXVsKFFlLFF0KXwwLHNlPU1hdGguaW11bChRZSxzbiksYWU9YWUrTWF0aC5pbXVsKGtlLGhuKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoa2UsZnQpfDApK01hdGguaW11bChBZSxobil8MCxzZT1zZStNYXRoLmltdWwoQWUsZnQpfDAsYWU9YWUrTWF0aC5pbXVsKE9lLFd0KXwwLHRlPSh0''@;'; put 'put ''ZT10ZStNYXRoLmltdWwoT2UsQXQpfDApK01hdGguaW11bChJZSxXdCl8MCxzZT1zZStNYXRoLmltdWwoSWUsQXQpfDAsYWU9YWUrTWF0aC5pbXVsKHplLHN0KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoemUsVXQpfDApK01hdGguaW11bChEZSxzdCl8MCxzZT1zZStNYXRoLmltdWwoRGUsVXQp''@;'; put 'put ''fDAsYWU9YWUrTWF0aC5pbXVsKHhlLFdlKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoeGUsVHQpfDApK01hdGguaW11bCh2ZSxXZSl8MCxzZT1zZStNYXRoLmltdWwodmUsVHQpfDA7dmFyIE5pPShBKyhhZT1hZStNYXRoLmltdWwoVWUsaHQpfDApfDApKygoODE5MSYodGU9KHRlPXRlK01hdGgu''@;'; put 'put ''aW11bChVZSx4dCl8MCkrTWF0aC5pbXVsKEplLGh0KXwwKSk8PDEzKXwwO0E9KChzZT1zZStNYXRoLmltdWwoSmUseHQpfDApKyh0ZT4+PjEzKXwwKSsoTmk+Pj4yNil8MCxOaSY9NjcxMDg4NjMsYWU9TWF0aC5pbXVsKHl0LFF0KSx0ZT0odGU9TWF0aC5pbXVsKHl0LHNuKSkrTWF0aC5pbXVs''@;'; put 'put ''KE10LFF0KXwwLHNlPU1hdGguaW11bChNdCxzbiksYWU9YWUrTWF0aC5pbXVsKG50LGhuKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwobnQsZnQpfDApK01hdGguaW11bChRZSxobil8MCxzZT1zZStNYXRoLmltdWwoUWUsZnQpfDAsYWU9YWUrTWF0aC5pbXVsKGtlLFd0KXwwLHRlPSh0ZT10ZStN''@;'; put 'put ''YXRoLmltdWwoa2UsQXQpfDApK01hdGguaW11bChBZSxXdCl8MCxzZT1zZStNYXRoLmltdWwoQWUsQXQpfDAsYWU9YWUrTWF0aC5pbXVsKE9lLHN0KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoT2UsVXQpfDApK01hdGguaW11bChJZSxzdCl8MCxzZT1zZStNYXRoLmltdWwoSWUsVXQpfDAsYWU9''@;'; put 'put ''YWUrTWF0aC5pbXVsKHplLFdlKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoemUsVHQpfDApK01hdGguaW11bChEZSxXZSl8MCxzZT1zZStNYXRoLmltdWwoRGUsVHQpfDAsYWU9YWUrTWF0aC5pbXVsKHhlLGh0KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoeGUseHQpfDApK01hdGguaW11bCh2ZSxo''@;'; put 'put ''dCl8MCxzZT1zZStNYXRoLmltdWwodmUseHQpfDA7dmFyIERhPShBKyhhZT1hZStNYXRoLmltdWwoVWUscm4pfDApfDApKygoODE5MSYodGU9KHRlPXRlK01hdGguaW11bChVZSx6dCl8MCkrTWF0aC5pbXVsKEplLHJuKXwwKSk8PDEzKXwwO0E9KChzZT1zZStNYXRoLmltdWwoSmUsenQpfDAp''@;'; put 'put ''Kyh0ZT4+PjEzKXwwKSsoRGE+Pj4yNil8MCxEYSY9NjcxMDg4NjMsYWU9TWF0aC5pbXVsKGl0LFF0KSx0ZT0odGU9TWF0aC5pbXVsKGl0LHNuKSkrTWF0aC5pbXVsKCRlLFF0KXwwLHNlPU1hdGguaW11bCgkZSxzbiksYWU9YWUrTWF0aC5pbXVsKHl0LGhuKXwwLHRlPSh0ZT10ZStNYXRoLmlt''@;'; put 'put ''dWwoeXQsZnQpfDApK01hdGguaW11bChNdCxobil8MCxzZT1zZStNYXRoLmltdWwoTXQsZnQpfDAsYWU9YWUrTWF0aC5pbXVsKG50LFd0KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwobnQsQXQpfDApK01hdGguaW11bChRZSxXdCl8MCxzZT1zZStNYXRoLmltdWwoUWUsQXQpfDAsYWU9YWUrTWF0''@;'; put 'put ''aC5pbXVsKGtlLHN0KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoa2UsVXQpfDApK01hdGguaW11bChBZSxzdCl8MCxzZT1zZStNYXRoLmltdWwoQWUsVXQpfDAsYWU9YWUrTWF0aC5pbXVsKE9lLFdlKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoT2UsVHQpfDApK01hdGguaW11bChJZSxXZSl8MCxz''@;'; put 'put ''ZT1zZStNYXRoLmltdWwoSWUsVHQpfDAsYWU9YWUrTWF0aC5pbXVsKHplLGh0KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoemUseHQpfDApK01hdGguaW11bChEZSxodCl8MCxzZT1zZStNYXRoLmltdWwoRGUseHQpfDAsYWU9YWUrTWF0aC5pbXVsKHhlLHJuKXwwLHRlPSh0ZT10ZStNYXRoLmlt''@;'; put 'put ''dWwoeGUsenQpfDApK01hdGguaW11bCh2ZSxybil8MCxzZT1zZStNYXRoLmltdWwodmUsenQpfDA7dmFyIExyPShBKyhhZT1hZStNYXRoLmltdWwoVWUsY24pfDApfDApKygoODE5MSYodGU9KHRlPXRlK01hdGguaW11bChVZSxmbil8MCkrTWF0aC5pbXVsKEplLGNuKXwwKSk8PDEzKXwwO0E9''@;'; put 'put ''KChzZT1zZStNYXRoLmltdWwoSmUsZm4pfDApKyh0ZT4+PjEzKXwwKSsoTHI+Pj4yNil8MCxMciY9NjcxMDg4NjMsYWU9TWF0aC5pbXVsKEhlLFF0KSx0ZT0odGU9TWF0aC5pbXVsKEhlLHNuKSkrTWF0aC5pbXVsKHV0LFF0KXwwLHNlPU1hdGguaW11bCh1dCxzbiksYWU9YWUrTWF0aC5pbXVs''@;'; put 'put ''KGl0LGhuKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoaXQsZnQpfDApK01hdGguaW11bCgkZSxobil8MCxzZT1zZStNYXRoLmltdWwoJGUsZnQpfDAsYWU9YWUrTWF0aC5pbXVsKHl0LFd0KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoeXQsQXQpfDApK01hdGguaW11bChNdCxXdCl8MCxzZT1zZStN''@;'; put 'put ''YXRoLmltdWwoTXQsQXQpfDAsYWU9YWUrTWF0aC5pbXVsKG50LHN0KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwobnQsVXQpfDApK01hdGguaW11bChRZSxzdCl8MCxzZT1zZStNYXRoLmltdWwoUWUsVXQpfDAsYWU9YWUrTWF0aC5pbXVsKGtlLFdlKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoa2Us''@;'; put 'put ''VHQpfDApK01hdGguaW11bChBZSxXZSl8MCxzZT1zZStNYXRoLmltdWwoQWUsVHQpfDAsYWU9YWUrTWF0aC5pbXVsKE9lLGh0KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoT2UseHQpfDApK01hdGguaW11bChJZSxodCl8MCxzZT1zZStNYXRoLmltdWwoSWUseHQpfDAsYWU9YWUrTWF0aC5pbXVs''@;'; put 'put ''KHplLHJuKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoemUsenQpfDApK01hdGguaW11bChEZSxybil8MCxzZT1zZStNYXRoLmltdWwoRGUsenQpfDAsYWU9YWUrTWF0aC5pbXVsKHhlLGNuKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoeGUsZm4pfDApK01hdGguaW11bCh2ZSxjbil8MCxzZT1zZStN''@;'; put 'put ''YXRoLmltdWwodmUsZm4pfDA7dmFyIFdpPShBKyhhZT1hZStNYXRoLmltdWwoVWUsWHQpfDApfDApKygoODE5MSYodGU9KHRlPXRlK01hdGguaW11bChVZSxlbil8MCkrTWF0aC5pbXVsKEplLFh0KXwwKSk8PDEzKXwwO0E9KChzZT1zZStNYXRoLmltdWwoSmUsZW4pfDApKyh0ZT4+PjEzKXww''@;'; put 'put ''KSsoV2k+Pj4yNil8MCxXaSY9NjcxMDg4NjMsYWU9TWF0aC5pbXVsKFJ0LFF0KSx0ZT0odGU9TWF0aC5pbXVsKFJ0LHNuKSkrTWF0aC5pbXVsKFB0LFF0KXwwLHNlPU1hdGguaW11bChQdCxzbiksYWU9YWUrTWF0aC5pbXVsKEhlLGhuKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoSGUsZnQpfDAp''@;'; put 'put ''K01hdGguaW11bCh1dCxobil8MCxzZT1zZStNYXRoLmltdWwodXQsZnQpfDAsYWU9YWUrTWF0aC5pbXVsKGl0LFd0KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoaXQsQXQpfDApK01hdGguaW11bCgkZSxXdCl8MCxzZT1zZStNYXRoLmltdWwoJGUsQXQpfDAsYWU9YWUrTWF0aC5pbXVsKHl0LHN0''@;'; put 'put ''KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoeXQsVXQpfDApK01hdGguaW11bChNdCxzdCl8MCxzZT1zZStNYXRoLmltdWwoTXQsVXQpfDAsYWU9YWUrTWF0aC5pbXVsKG50LFdlKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwobnQsVHQpfDApK01hdGguaW11bChRZSxXZSl8MCxzZT1zZStNYXRoLmlt''@;'; put 'put ''dWwoUWUsVHQpfDAsYWU9YWUrTWF0aC5pbXVsKGtlLGh0KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoa2UseHQpfDApK01hdGguaW11bChBZSxodCl8MCxzZT1zZStNYXRoLmltdWwoQWUseHQpfDAsYWU9YWUrTWF0aC5pbXVsKE9lLHJuKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoT2UsenQpfDAp''@;'; put 'put ''K01hdGguaW11bChJZSxybil8MCxzZT1zZStNYXRoLmltdWwoSWUsenQpfDAsYWU9YWUrTWF0aC5pbXVsKHplLGNuKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoemUsZm4pfDApK01hdGguaW11bChEZSxjbil8MCxzZT1zZStNYXRoLmltdWwoRGUsZm4pfDAsYWU9YWUrTWF0aC5pbXVsKHhlLFh0''@;'; put 'put ''KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoeGUsZW4pfDApK01hdGguaW11bCh2ZSxYdCl8MCxzZT1zZStNYXRoLmltdWwodmUsZW4pfDA7dmFyIHBhPShBKyhhZT1hZStNYXRoLmltdWwoVWUsRWkpfDApfDApKygoODE5MSYodGU9KHRlPXRlK01hdGguaW11bChVZSx2cil8MCkrTWF0aC5pbXVs''@;'; put 'put ''KEplLEVpKXwwKSk8PDEzKXwwO0E9KChzZT1zZStNYXRoLmltdWwoSmUsdnIpfDApKyh0ZT4+PjEzKXwwKSsocGE+Pj4yNil8MCxwYSY9NjcxMDg4NjMsYWU9TWF0aC5pbXVsKFJ0LGhuKSx0ZT0odGU9TWF0aC5pbXVsKFJ0LGZ0KSkrTWF0aC5pbXVsKFB0LGhuKXwwLHNlPU1hdGguaW11bChQ''@;'; put 'put ''dCxmdCksYWU9YWUrTWF0aC5pbXVsKEhlLFd0KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoSGUsQXQpfDApK01hdGguaW11bCh1dCxXdCl8MCxzZT1zZStNYXRoLmltdWwodXQsQXQpfDAsYWU9YWUrTWF0aC5pbXVsKGl0LHN0KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoaXQsVXQpfDApK01hdGgu''@;'; put 'put ''aW11bCgkZSxzdCl8MCxzZT1zZStNYXRoLmltdWwoJGUsVXQpfDAsYWU9YWUrTWF0aC5pbXVsKHl0LFdlKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoeXQsVHQpfDApK01hdGguaW11bChNdCxXZSl8MCxzZT1zZStNYXRoLmltdWwoTXQsVHQpfDAsYWU9YWUrTWF0aC5pbXVsKG50LGh0KXwwLHRl''@;'; put 'put ''PSh0ZT10ZStNYXRoLmltdWwobnQseHQpfDApK01hdGguaW11bChRZSxodCl8MCxzZT1zZStNYXRoLmltdWwoUWUseHQpfDAsYWU9YWUrTWF0aC5pbXVsKGtlLHJuKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoa2UsenQpfDApK01hdGguaW11bChBZSxybil8MCxzZT1zZStNYXRoLmltdWwoQWUs''@;'; put 'put ''enQpfDAsYWU9YWUrTWF0aC5pbXVsKE9lLGNuKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoT2UsZm4pfDApK01hdGguaW11bChJZSxjbil8MCxzZT1zZStNYXRoLmltdWwoSWUsZm4pfDAsYWU9YWUrTWF0aC5pbXVsKHplLFh0KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoemUsZW4pfDApK01hdGgu''@;'; put 'put ''aW11bChEZSxYdCl8MCxzZT1zZStNYXRoLmltdWwoRGUsZW4pfDA7dmFyIFFuPShBKyhhZT1hZStNYXRoLmltdWwoeGUsRWkpfDApfDApKygoODE5MSYodGU9KHRlPXRlK01hdGguaW11bCh4ZSx2cil8MCkrTWF0aC5pbXVsKHZlLEVpKXwwKSk8PDEzKXwwO0E9KChzZT1zZStNYXRoLmltdWwo''@;'; put 'put ''dmUsdnIpfDApKyh0ZT4+PjEzKXwwKSsoUW4+Pj4yNil8MCxRbiY9NjcxMDg4NjMsYWU9TWF0aC5pbXVsKFJ0LFd0KSx0ZT0odGU9TWF0aC5pbXVsKFJ0LEF0KSkrTWF0aC5pbXVsKFB0LFd0KXwwLHNlPU1hdGguaW11bChQdCxBdCksYWU9YWUrTWF0aC5pbXVsKEhlLHN0KXwwLHRlPSh0ZT10''@;'; put 'put ''ZStNYXRoLmltdWwoSGUsVXQpfDApK01hdGguaW11bCh1dCxzdCl8MCxzZT1zZStNYXRoLmltdWwodXQsVXQpfDAsYWU9YWUrTWF0aC5pbXVsKGl0LFdlKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoaXQsVHQpfDApK01hdGguaW11bCgkZSxXZSl8MCxzZT1zZStNYXRoLmltdWwoJGUsVHQpfDAs''@;'; put 'put ''YWU9YWUrTWF0aC5pbXVsKHl0LGh0KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoeXQseHQpfDApK01hdGguaW11bChNdCxodCl8MCxzZT1zZStNYXRoLmltdWwoTXQseHQpfDAsYWU9YWUrTWF0aC5pbXVsKG50LHJuKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwobnQsenQpfDApK01hdGguaW11bChR''@;'; put 'put ''ZSxybil8MCxzZT1zZStNYXRoLmltdWwoUWUsenQpfDAsYWU9YWUrTWF0aC5pbXVsKGtlLGNuKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoa2UsZm4pfDApK01hdGguaW11bChBZSxjbil8MCxzZT1zZStNYXRoLmltdWwoQWUsZm4pfDAsYWU9YWUrTWF0aC5pbXVsKE9lLFh0KXwwLHRlPSh0ZT10''@;'; put 'put ''ZStNYXRoLmltdWwoT2UsZW4pfDApK01hdGguaW11bChJZSxYdCl8MCxzZT1zZStNYXRoLmltdWwoSWUsZW4pfDA7dmFyIGxhPShBKyhhZT1hZStNYXRoLmltdWwoemUsRWkpfDApfDApKygoODE5MSYodGU9KHRlPXRlK01hdGguaW11bCh6ZSx2cil8MCkrTWF0aC5pbXVsKERlLEVpKXwwKSk8''@;'; put 'put ''PDEzKXwwO0E9KChzZT1zZStNYXRoLmltdWwoRGUsdnIpfDApKyh0ZT4+PjEzKXwwKSsobGE+Pj4yNil8MCxsYSY9NjcxMDg4NjMsYWU9TWF0aC5pbXVsKFJ0LHN0KSx0ZT0odGU9TWF0aC5pbXVsKFJ0LFV0KSkrTWF0aC5pbXVsKFB0LHN0KXwwLHNlPU1hdGguaW11bChQdCxVdCksYWU9YWUr''@;'; put 'put ''TWF0aC5pbXVsKEhlLFdlKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoSGUsVHQpfDApK01hdGguaW11bCh1dCxXZSl8MCxzZT1zZStNYXRoLmltdWwodXQsVHQpfDAsYWU9YWUrTWF0aC5pbXVsKGl0LGh0KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoaXQseHQpfDApK01hdGguaW11bCgkZSxodCl8''@;'; put 'put ''MCxzZT1zZStNYXRoLmltdWwoJGUseHQpfDAsYWU9YWUrTWF0aC5pbXVsKHl0LHJuKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoeXQsenQpfDApK01hdGguaW11bChNdCxybil8MCxzZT1zZStNYXRoLmltdWwoTXQsenQpfDAsYWU9YWUrTWF0aC5pbXVsKG50LGNuKXwwLHRlPSh0ZT10ZStNYXRo''@;'; put 'put ''LmltdWwobnQsZm4pfDApK01hdGguaW11bChRZSxjbil8MCxzZT1zZStNYXRoLmltdWwoUWUsZm4pfDAsYWU9YWUrTWF0aC5pbXVsKGtlLFh0KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoa2UsZW4pfDApK01hdGguaW11bChBZSxYdCl8MCxzZT1zZStNYXRoLmltdWwoQWUsZW4pfDA7dmFyIHlh''@;'; put 'put ''PShBKyhhZT1hZStNYXRoLmltdWwoT2UsRWkpfDApfDApKygoODE5MSYodGU9KHRlPXRlK01hdGguaW11bChPZSx2cil8MCkrTWF0aC5pbXVsKEllLEVpKXwwKSk8PDEzKXwwO0E9KChzZT1zZStNYXRoLmltdWwoSWUsdnIpfDApKyh0ZT4+PjEzKXwwKSsoeWE+Pj4yNil8MCx5YSY9NjcxMDg4''@;'; put 'put ''NjMsYWU9TWF0aC5pbXVsKFJ0LFdlKSx0ZT0odGU9TWF0aC5pbXVsKFJ0LFR0KSkrTWF0aC5pbXVsKFB0LFdlKXwwLHNlPU1hdGguaW11bChQdCxUdCksYWU9YWUrTWF0aC5pbXVsKEhlLGh0KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoSGUseHQpfDApK01hdGguaW11bCh1dCxodCl8MCxzZT1z''@;'; put 'put ''ZStNYXRoLmltdWwodXQseHQpfDAsYWU9YWUrTWF0aC5pbXVsKGl0LHJuKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoaXQsenQpfDApK01hdGguaW11bCgkZSxybil8MCxzZT1zZStNYXRoLmltdWwoJGUsenQpfDAsYWU9YWUrTWF0aC5pbXVsKHl0LGNuKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwo''@;'; put 'put ''eXQsZm4pfDApK01hdGguaW11bChNdCxjbil8MCxzZT1zZStNYXRoLmltdWwoTXQsZm4pfDAsYWU9YWUrTWF0aC5pbXVsKG50LFh0KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwobnQsZW4pfDApK01hdGguaW11bChRZSxYdCl8MCxzZT1zZStNYXRoLmltdWwoUWUsZW4pfDA7dmFyIExhPShBKyhh''@;'; put 'put ''ZT1hZStNYXRoLmltdWwoa2UsRWkpfDApfDApKygoODE5MSYodGU9KHRlPXRlK01hdGguaW11bChrZSx2cil8MCkrTWF0aC5pbXVsKEFlLEVpKXwwKSk8PDEzKXwwO0E9KChzZT1zZStNYXRoLmltdWwoQWUsdnIpfDApKyh0ZT4+PjEzKXwwKSsoTGE+Pj4yNil8MCxMYSY9NjcxMDg4NjMsYWU9''@;'; put 'put ''TWF0aC5pbXVsKFJ0LGh0KSx0ZT0odGU9TWF0aC5pbXVsKFJ0LHh0KSkrTWF0aC5pbXVsKFB0LGh0KXwwLHNlPU1hdGguaW11bChQdCx4dCksYWU9YWUrTWF0aC5pbXVsKEhlLHJuKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoSGUsenQpfDApK01hdGguaW11bCh1dCxybil8MCxzZT1zZStNYXRo''@;'; put 'put ''LmltdWwodXQsenQpfDAsYWU9YWUrTWF0aC5pbXVsKGl0LGNuKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoaXQsZm4pfDApK01hdGguaW11bCgkZSxjbil8MCxzZT1zZStNYXRoLmltdWwoJGUsZm4pfDAsYWU9YWUrTWF0aC5pbXVsKHl0LFh0KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoeXQsZW4p''@;'; put 'put ''fDApK01hdGguaW11bChNdCxYdCl8MCxzZT1zZStNYXRoLmltdWwoTXQsZW4pfDA7dmFyIEZhPShBKyhhZT1hZStNYXRoLmltdWwobnQsRWkpfDApfDApKygoODE5MSYodGU9KHRlPXRlK01hdGguaW11bChudCx2cil8MCkrTWF0aC5pbXVsKFFlLEVpKXwwKSk8PDEzKXwwO0E9KChzZT1zZStN''@;'; put 'put ''YXRoLmltdWwoUWUsdnIpfDApKyh0ZT4+PjEzKXwwKSsoRmE+Pj4yNil8MCxGYSY9NjcxMDg4NjMsYWU9TWF0aC5pbXVsKFJ0LHJuKSx0ZT0odGU9TWF0aC5pbXVsKFJ0LHp0KSkrTWF0aC5pbXVsKFB0LHJuKXwwLHNlPU1hdGguaW11bChQdCx6dCksYWU9YWUrTWF0aC5pbXVsKEhlLGNuKXww''@;'; put 'put ''LHRlPSh0ZT10ZStNYXRoLmltdWwoSGUsZm4pfDApK01hdGguaW11bCh1dCxjbil8MCxzZT1zZStNYXRoLmltdWwodXQsZm4pfDAsYWU9YWUrTWF0aC5pbXVsKGl0LFh0KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoaXQsZW4pfDApK01hdGguaW11bCgkZSxYdCl8MCxzZT1zZStNYXRoLmltdWwo''@;'; put 'put ''JGUsZW4pfDA7dmFyIHRpPShBKyhhZT1hZStNYXRoLmltdWwoeXQsRWkpfDApfDApKygoODE5MSYodGU9KHRlPXRlK01hdGguaW11bCh5dCx2cil8MCkrTWF0aC5pbXVsKE10LEVpKXwwKSk8PDEzKXwwO0E9KChzZT1zZStNYXRoLmltdWwoTXQsdnIpfDApKyh0ZT4+PjEzKXwwKSsodGk+Pj4y''@;'; put 'put ''Nil8MCx0aSY9NjcxMDg4NjMsYWU9TWF0aC5pbXVsKFJ0LGNuKSx0ZT0odGU9TWF0aC5pbXVsKFJ0LGZuKSkrTWF0aC5pbXVsKFB0LGNuKXwwLHNlPU1hdGguaW11bChQdCxmbiksYWU9YWUrTWF0aC5pbXVsKEhlLFh0KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoSGUsZW4pfDApK01hdGguaW11''@;'; put 'put ''bCh1dCxYdCl8MCxzZT1zZStNYXRoLmltdWwodXQsZW4pfDA7dmFyIGdvPShBKyhhZT1hZStNYXRoLmltdWwoaXQsRWkpfDApfDApKygoODE5MSYodGU9KHRlPXRlK01hdGguaW11bChpdCx2cil8MCkrTWF0aC5pbXVsKCRlLEVpKXwwKSk8PDEzKXwwO0E9KChzZT1zZStNYXRoLmltdWwoJGUs''@;'; put 'put ''dnIpfDApKyh0ZT4+PjEzKXwwKSsoZ28+Pj4yNil8MCxnbyY9NjcxMDg4NjMsYWU9TWF0aC5pbXVsKFJ0LFh0KSx0ZT0odGU9TWF0aC5pbXVsKFJ0LGVuKSkrTWF0aC5pbXVsKFB0LFh0KXwwLHNlPU1hdGguaW11bChQdCxlbik7dmFyIE5zPShBKyhhZT1hZStNYXRoLmltdWwoSGUsRWkpfDAp''@;'; put 'put ''fDApKygoODE5MSYodGU9KHRlPXRlK01hdGguaW11bChIZSx2cil8MCkrTWF0aC5pbXVsKHV0LEVpKXwwKSk8PDEzKXwwO0E9KChzZT1zZStNYXRoLmltdWwodXQsdnIpfDApKyh0ZT4+PjEzKXwwKSsoTnM+Pj4yNil8MCxOcyY9NjcxMDg4NjM7dmFyIGJsPShBKyhhZT1NYXRoLmltdWwoUnQs''@;'; put 'put ''RWkpKXwwKSsoKDgxOTEmKHRlPSh0ZT1NYXRoLmltdWwoUnQsdnIpKStNYXRoLmltdWwoUHQsRWkpfDApKTw8MTMpfDA7cmV0dXJuIEE9KChzZT1NYXRoLmltdWwoUHQsdnIpKSsodGU+Pj4xMyl8MCkrKGJsPj4+MjYpfDAsYmwmPTY3MTA4ODYzLG1bMF09V24sbVsxXT0kaSxtWzJdPWVpLG1b''@;'; put 'put ''M109UXIsbVs0XT1WaSxtWzVdPU5pLG1bNl09RGEsbVs3XT1McixtWzhdPVdpLG1bOV09cGEsbVsxMF09UW4sbVsxMV09bGEsbVsxMl09eWEsbVsxM109TGEsbVsxNF09RmEsbVsxNV09dGksbVsxNl09Z28sbVsxN109TnMsbVsxOF09YmwsMCE9PUEmJihtWzE5XT1BLEgubGVuZ3RoKyspLEh9''@;'; put 'put ''O2Z1bmN0aW9uIG5lKHgsQyxUKXtULm5lZ2F0aXZlPUMubmVnYXRpdmVeeC5uZWdhdGl2ZSxULmxlbmd0aD14Lmxlbmd0aCtDLmxlbmd0aDtmb3IodmFyIEg9MCxqPTAsRT0wO0U8VC5sZW5ndGgtMTtFKyspe3ZhciBtPWo7aj0wO2Zvcih2YXIgQT02NzEwODg2MyZILGFlPU1hdGgubWluKEUs''@;'; put 'put ''Qy5sZW5ndGgtMSksdGU9TWF0aC5tYXgoMCxFLXgubGVuZ3RoKzEpO3RlPD1hZTt0ZSsrKXt2YXIgSmU9KDB8eC53b3Jkc1tFLXRlXSkqKDB8Qy53b3Jkc1t0ZV0pLG90PTY3MTA4ODYzJkplO0E9NjcxMDg4NjMmKG90PW90K0F8MCksais9KG09KG09bSsoSmUvNjcxMDg4NjR8MCl8MCkrKG90''@;'; put 'put ''Pj4+MjYpfDApPj4+MjYsbSY9NjcxMDg4NjN9VC53b3Jkc1tFXT1BLEg9bSxtPWp9cmV0dXJuIDAhPT1IP1Qud29yZHNbRV09SDpULmxlbmd0aC0tLFQuX3N0cmlwKCl9ZnVuY3Rpb24gaWUoeCxDLFQpe3JldHVybiBuZSh4LEMsVCl9ZnVuY3Rpb24gbGUoeCxDKXt0aGlzLng9eCx0aGlzLnk9''@;'; put 'put ''Q31NYXRoLmltdWx8fChKPWVlKSx3LnByb3RvdHlwZS5tdWxUbz1mdW5jdGlvbihDLFQpe3ZhciBqPXRoaXMubGVuZ3RoK0MubGVuZ3RoO3JldHVybiAxMD09PXRoaXMubGVuZ3RoJiYxMD09PUMubGVuZ3RoP0oodGhpcyxDLFQpOmo8NjM/ZWUodGhpcyxDLFQpOmo8MTAyND9uZSh0aGlzLEMs''@;'; put 'put ''VCk6aWUodGhpcyxDLFQpfSxsZS5wcm90b3R5cGUubWFrZVJCVD1mdW5jdGlvbihDKXtmb3IodmFyIFQ9bmV3IEFycmF5KEMpLEg9dy5wcm90b3R5cGUuX2NvdW50Qml0cyhDKS0xLGo9MDtqPEM7aisrKVRbal09dGhpcy5yZXZCaW4oaixILEMpO3JldHVybiBUfSxsZS5wcm90b3R5cGUucmV2''@;'; put 'put ''QmluPWZ1bmN0aW9uKEMsVCxIKXtpZigwPT09Q3x8Qz09PUgtMSlyZXR1cm4gQztmb3IodmFyIGo9MCxFPTA7RTxUO0UrKylqfD0oMSZDKTw8VC1FLTEsQz4+PTE7cmV0dXJuIGp9LGxlLnByb3RvdHlwZS5wZXJtdXRlPWZ1bmN0aW9uKEMsVCxILGosRSxtKXtmb3IodmFyIEE9MDtBPG07QSsr''@;'; put 'put ''KWpbQV09VFtDW0FdXSxFW0FdPUhbQ1tBXV19LGxlLnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24oQyxULEgsaixFLG0pe3RoaXMucGVybXV0ZShtLEMsVCxILGosRSk7Zm9yKHZhciBBPTE7QTxFO0E8PD0xKWZvcih2YXIgYWU9QTw8MSx0ZT1NYXRoLmNvcygyKk1hdGguUEkvYWUpLHNl''@;'; put 'put ''PU1hdGguc2luKDIqTWF0aC5QSS9hZSksd2U9MDt3ZTxFO3dlKz1hZSlmb3IodmFyIFVlPXRlLEplPXNlLG90PTA7b3Q8QTtvdCsrKXt2YXIgeGU9SFt3ZStvdF0sdmU9alt3ZStvdF0sWGU9SFt3ZStvdCtBXSx6ZT1qW3dlK290K0FdLERlPVVlKlhlLUplKnplO3plPVVlKnplK0plKlhlLEhb''@;'; put 'put ''d2Urb3RdPXhlKyhYZT1EZSksalt3ZStvdF09dmUremUsSFt3ZStvdCtBXT14ZS1YZSxqW3dlK290K0FdPXZlLXplLG90IT09YWUmJihEZT10ZSpVZS1zZSpKZSxKZT10ZSpKZStzZSpVZSxVZT1EZSl9fSxsZS5wcm90b3R5cGUuZ3Vlc3NMZW4xM2I9ZnVuY3Rpb24oQyxUKXt2YXIgSD0xfE1h''@;'; put 'put ''dGgubWF4KFQsQyksaj0xJkgsRT0wO2ZvcihIPUgvMnwwO0g7SD4+Pj0xKUUrKztyZXR1cm4gMTw8RSsxK2p9LGxlLnByb3RvdHlwZS5jb25qdWdhdGU9ZnVuY3Rpb24oQyxULEgpe2lmKCEoSDw9MSkpZm9yKHZhciBqPTA7ajxILzI7aisrKXt2YXIgRT1DW2pdO0Nbal09Q1tILWotMV0sQ1tI''@;'; put 'put ''LWotMV09RSxFPVRbal0sVFtqXT0tVFtILWotMV0sVFtILWotMV09LUV9fSxsZS5wcm90b3R5cGUubm9ybWFsaXplMTNiPWZ1bmN0aW9uKEMsVCl7Zm9yKHZhciBIPTAsaj0wO2o8VC8yO2orKyl7dmFyIEU9ODE5MipNYXRoLnJvdW5kKENbMipqKzFdL1QpK01hdGgucm91bmQoQ1syKmpdL1Qp''@;'; put 'put ''K0g7Q1tqXT02NzEwODg2MyZFLEg9RTw2NzEwODg2ND8wOkUvNjcxMDg4NjR8MH1yZXR1cm4gQ30sbGUucHJvdG90eXBlLmNvbnZlcnQxM2I9ZnVuY3Rpb24oQyxULEgsail7Zm9yKHZhciBFPTAsbT0wO208VDttKyspSFsyKm1dPTgxOTEmKEUrPTB8Q1ttXSksSFsyKm0rMV09ODE5MSYoRT4+''@;'; put 'put ''Pj0xMyksRT4+Pj0xMztmb3IobT0yKlQ7bTxqOysrbSlIW21dPTA7ZygwPT09RSksZyghKC04MTkyJkUpKX0sbGUucHJvdG90eXBlLnN0dWI9ZnVuY3Rpb24oQyl7Zm9yKHZhciBUPW5ldyBBcnJheShDKSxIPTA7SDxDO0grKylUW0hdPTA7cmV0dXJuIFR9LGxlLnByb3RvdHlwZS5tdWxwPWZ1''@;'; put 'put ''bmN0aW9uKEMsVCxIKXt2YXIgaj0yKnRoaXMuZ3Vlc3NMZW4xM2IoQy5sZW5ndGgsVC5sZW5ndGgpLEU9dGhpcy5tYWtlUkJUKGopLG09dGhpcy5zdHViKGopLEE9bmV3IEFycmF5KGopLGFlPW5ldyBBcnJheShqKSx0ZT1uZXcgQXJyYXkoaiksc2U9bmV3IEFycmF5KGopLHdlPW5ldyBBcnJh''@;'; put 'put ''eShqKSxVZT1uZXcgQXJyYXkoaiksSmU9SC53b3JkcztKZS5sZW5ndGg9aix0aGlzLmNvbnZlcnQxM2IoQy53b3JkcyxDLmxlbmd0aCxBLGopLHRoaXMuY29udmVydDEzYihULndvcmRzLFQubGVuZ3RoLHNlLGopLHRoaXMudHJhbnNmb3JtKEEsbSxhZSx0ZSxqLEUpLHRoaXMudHJhbnNmb3Jt''@;'; put 'put ''KHNlLG0sd2UsVWUsaixFKTtmb3IodmFyIG90PTA7b3Q8ajtvdCsrKXt2YXIgeGU9YWVbb3RdKndlW290XS10ZVtvdF0qVWVbb3RdO3RlW290XT1hZVtvdF0qVWVbb3RdK3RlW290XSp3ZVtvdF0sYWVbb3RdPXhlfXJldHVybiB0aGlzLmNvbmp1Z2F0ZShhZSx0ZSxqKSx0aGlzLnRyYW5zZm9y''@;'; put 'put ''bShhZSx0ZSxKZSxtLGosRSksdGhpcy5jb25qdWdhdGUoSmUsbSxqKSx0aGlzLm5vcm1hbGl6ZTEzYihKZSxqKSxILm5lZ2F0aXZlPUMubmVnYXRpdmVeVC5uZWdhdGl2ZSxILmxlbmd0aD1DLmxlbmd0aCtULmxlbmd0aCxILl9zdHJpcCgpfSx3LnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oQyl7''@;'; put 'put ''dmFyIFQ9bmV3IHcobnVsbCk7cmV0dXJuIFQud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK0MubGVuZ3RoKSx0aGlzLm11bFRvKEMsVCl9LHcucHJvdG90eXBlLm11bGY9ZnVuY3Rpb24oQyl7dmFyIFQ9bmV3IHcobnVsbCk7cmV0dXJuIFQud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3Ro''@;'; put 'put ''K0MubGVuZ3RoKSxpZSh0aGlzLEMsVCl9LHcucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5tdWxUbyhDLHRoaXMpfSx3LnByb3RvdHlwZS5pbXVsbj1mdW5jdGlvbihDKXt2YXIgVD1DPDA7VCYmKEM9LUMpLGcoIm51bWJlciI9PXR5cGVvZiBDKSxnKEM8''@;'; put 'put ''NjcxMDg4NjQpO2Zvcih2YXIgSD0wLGo9MDtqPHRoaXMubGVuZ3RoO2orKyl7dmFyIEU9KDB8dGhpcy53b3Jkc1tqXSkqQyxtPSg2NzEwODg2MyZFKSsoNjcxMDg4NjMmSCk7SD4+PTI2LEgrPUUvNjcxMDg4NjR8MCxIKz1tPj4+MjYsdGhpcy53b3Jkc1tqXT02NzEwODg2MyZtfXJldHVybiAw''@;'; put 'put ''IT09SCYmKHRoaXMud29yZHNbal09SCx0aGlzLmxlbmd0aCsrKSxUP3RoaXMuaW5lZygpOnRoaXN9LHcucHJvdG90eXBlLm11bG49ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbXVsbihDKX0sdy5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubXVsKHRoaXMp''@;'; put 'put ''fSx3LnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW11bCh0aGlzLmNsb25lKCkpfSx3LnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24oQyl7dmFyIFQ9ZnVuY3Rpb24gcSh4KXtmb3IodmFyIEM9bmV3IEFycmF5KHguYml0TGVuZ3RoKCkpLFQ9MDtUPEMubGVuZ3RoO1QrKylD''@;'; put 'put ''W1RdPXgud29yZHNbVC8yNnwwXT4+PlQlMjYmMTtyZXR1cm4gQ30oQyk7aWYoMD09PVQubGVuZ3RoKXJldHVybiBuZXcgdygxKTtmb3IodmFyIEg9dGhpcyxqPTA7ajxULmxlbmd0aCYmMD09PVRbal07aisrLEg9SC5zcXIoKSk7aWYoKytqPFQubGVuZ3RoKWZvcih2YXIgRT1ILnNxcigpO2o8''@;'; put 'put ''VC5sZW5ndGg7aisrLEU9RS5zcXIoKSkwIT09VFtqXSYmKEg9SC5tdWwoRSkpO3JldHVybiBIfSx3LnByb3RvdHlwZS5pdXNobG49ZnVuY3Rpb24oQyl7ZygibnVtYmVyIj09dHlwZW9mIEMmJkM+PTApO3ZhciBFLFQ9QyUyNixIPShDLVQpLzI2LGo9NjcxMDg4NjM+Pj4yNi1UPDwyNi1UO2lm''@;'; put 'put ''KDAhPT1UKXt2YXIgbT0wO2ZvcihFPTA7RTx0aGlzLmxlbmd0aDtFKyspe3ZhciBBPXRoaXMud29yZHNbRV0majt0aGlzLndvcmRzW0VdPSgwfHRoaXMud29yZHNbRV0pLUE8PFR8bSxtPUE+Pj4yNi1UfW0mJih0aGlzLndvcmRzW0VdPW0sdGhpcy5sZW5ndGgrKyl9aWYoMCE9PUgpe2ZvcihF''@;'; put 'put ''PXRoaXMubGVuZ3RoLTE7RT49MDtFLS0pdGhpcy53b3Jkc1tFK0hdPXRoaXMud29yZHNbRV07Zm9yKEU9MDtFPEg7RSsrKXRoaXMud29yZHNbRV09MDt0aGlzLmxlbmd0aCs9SH1yZXR1cm4gdGhpcy5fc3RyaXAoKX0sdy5wcm90b3R5cGUuaXNobG49ZnVuY3Rpb24oQyl7cmV0dXJuIGcoMD09''@;'; put 'put ''PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaGxuKEMpfSx3LnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24oQyxULEgpe3ZhciBqO2coIm51bWJlciI9PXR5cGVvZiBDJiZDPj0wKSxqPVQ/KFQtVCUyNikvMjY6MDt2YXIgRT1DJTI2LG09TWF0aC5taW4oKEMtRSkvMjYsdGhpcy5sZW5ndGgpLEE9''@;'; put 'put ''NjcxMDg4NjNeNjcxMDg4NjM+Pj5FPDxFLGFlPUg7aWYoai09bSxqPU1hdGgubWF4KDAsaiksYWUpe2Zvcih2YXIgdGU9MDt0ZTxtO3RlKyspYWUud29yZHNbdGVdPXRoaXMud29yZHNbdGVdO2FlLmxlbmd0aD1tfWlmKDAhPT1tKWlmKHRoaXMubGVuZ3RoPm0pZm9yKHRoaXMubGVuZ3RoLT1t''@;'; put 'put ''LHRlPTA7dGU8dGhpcy5sZW5ndGg7dGUrKyl0aGlzLndvcmRzW3RlXT10aGlzLndvcmRzW3RlK21dO2Vsc2UgdGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTE7dmFyIHNlPTA7Zm9yKHRlPXRoaXMubGVuZ3RoLTE7dGU+PTAmJigwIT09c2V8fHRlPj1qKTt0ZS0tKXt2YXIgd2U9MHx0aGlz''@;'; put 'put ''LndvcmRzW3RlXTt0aGlzLndvcmRzW3RlXT1zZTw8MjYtRXx3ZT4+PkUsc2U9d2UmQX1yZXR1cm4gYWUmJjAhPT1zZSYmKGFlLndvcmRzW2FlLmxlbmd0aCsrXT1zZSksMD09PXRoaXMubGVuZ3RoJiYodGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTEpLHRoaXMuX3N0cmlwKCl9LHcucHJv''@;'; put 'put ''dG90eXBlLmlzaHJuPWZ1bmN0aW9uKEMsVCxIKXtyZXR1cm4gZygwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNocm4oQyxULEgpfSx3LnByb3RvdHlwZS5zaGxuPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmNsb25lKCkuaXNobG4oQyl9LHcucHJvdG90eXBlLnVzaGxuPWZ1bmN0aW9uKEMp''@;'; put 'put ''e3JldHVybiB0aGlzLmNsb25lKCkuaXVzaGxuKEMpfSx3LnByb3RvdHlwZS5zaHJuPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmNsb25lKCkuaXNocm4oQyl9LHcucHJvdG90eXBlLnVzaHJuPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaHJuKEMpfSx3LnByb3RvdHlwZS50''@;'; put 'put ''ZXN0bj1mdW5jdGlvbihDKXtnKCJudW1iZXIiPT10eXBlb2YgQyYmQz49MCk7dmFyIFQ9QyUyNixIPShDLVQpLzI2O3JldHVybiEodGhpcy5sZW5ndGg8PUh8fCEodGhpcy53b3Jkc1tIXSYxPDxUKSl9LHcucHJvdG90eXBlLmltYXNrbj1mdW5jdGlvbihDKXtnKCJudW1iZXIiPT10eXBlb2Yg''@;'; put 'put ''QyYmQz49MCk7dmFyIFQ9QyUyNixIPShDLVQpLzI2O3JldHVybiBnKDA9PT10aGlzLm5lZ2F0aXZlLCJpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJlcnMiKSx0aGlzLmxlbmd0aDw9SD90aGlzOigwIT09VCYmSCsrLHRoaXMubGVuZ3RoPU1hdGgubWluKEgsdGhpcy5sZW5n''@;'; put 'put ''dGgpLDAhPT1UJiYodGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSY9NjcxMDg4NjNeNjcxMDg4NjM+Pj5UPDxUKSx0aGlzLl9zdHJpcCgpKX0sdy5wcm90b3R5cGUubWFza249ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbWFza24oQyl9LHcucHJvdG90eXBlLmlhZGRuPWZ1bmN0''@;'; put 'put ''aW9uKEMpe3JldHVybiBnKCJudW1iZXIiPT10eXBlb2YgQyksZyhDPDY3MTA4ODY0KSxDPDA/dGhpcy5pc3VibigtQyk6MCE9PXRoaXMubmVnYXRpdmU/MT09PXRoaXMubGVuZ3RoJiYoMHx0aGlzLndvcmRzWzBdKTw9Qz8odGhpcy53b3Jkc1swXT1DLSgwfHRoaXMud29yZHNbMF0pLHRoaXMu''@;'; put 'put ''bmVnYXRpdmU9MCx0aGlzKToodGhpcy5uZWdhdGl2ZT0wLHRoaXMuaXN1Ym4oQyksdGhpcy5uZWdhdGl2ZT0xLHRoaXMpOnRoaXMuX2lhZGRuKEMpfSx3LnByb3RvdHlwZS5faWFkZG49ZnVuY3Rpb24oQyl7dGhpcy53b3Jkc1swXSs9Qztmb3IodmFyIFQ9MDtUPHRoaXMubGVuZ3RoJiZ0aGlz''@;'; put 'put ''LndvcmRzW1RdPj02NzEwODg2NDtUKyspdGhpcy53b3Jkc1tUXS09NjcxMDg4NjQsVD09PXRoaXMubGVuZ3RoLTE/dGhpcy53b3Jkc1tUKzFdPTE6dGhpcy53b3Jkc1tUKzFdKys7cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLFQrMSksdGhpc30sdy5wcm90b3R5cGUu''@;'; put 'put ''aXN1Ym49ZnVuY3Rpb24oQyl7aWYoZygibnVtYmVyIj09dHlwZW9mIEMpLGcoQzw2NzEwODg2NCksQzwwKXJldHVybiB0aGlzLmlhZGRuKC1DKTtpZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZG4oQyksdGhpcy5uZWdhdGl2ZT0xLHRoaXM7aWYo''@;'; put 'put ''dGhpcy53b3Jkc1swXS09QywxPT09dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbMF08MCl0aGlzLndvcmRzWzBdPS10aGlzLndvcmRzWzBdLHRoaXMubmVnYXRpdmU9MTtlbHNlIGZvcih2YXIgVD0wO1Q8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbVF08MDtUKyspdGhpcy53b3Jkc1tUXSs9Njcx''@;'; put 'put ''MDg4NjQsdGhpcy53b3Jkc1tUKzFdLT0xO3JldHVybiB0aGlzLl9zdHJpcCgpfSx3LnByb3RvdHlwZS5hZGRuPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmNsb25lKCkuaWFkZG4oQyl9LHcucHJvdG90eXBlLnN1Ym49ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3VibihDKX0s''@;'; put 'put ''dy5wcm90b3R5cGUuaWFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpc30sdy5wcm90b3R5cGUuYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWJzKCl9LHcucHJvdG90eXBlLl9pc2hsbnN1Ym11bD1mdW5jdGlvbihDLFQsSCl7dmFyIEU7dGhpcy5f''@;'; put 'put ''ZXhwYW5kKEMubGVuZ3RoK0gpO3ZhciBtLEE9MDtmb3IoRT0wO0U8Qy5sZW5ndGg7RSsrKXttPSgwfHRoaXMud29yZHNbRStIXSkrQTt2YXIgYWU9KDB8Qy53b3Jkc1tFXSkqVDtBPSgobS09NjcxMDg4NjMmYWUpPj4yNiktKGFlLzY3MTA4ODY0fDApLHRoaXMud29yZHNbRStIXT02NzEwODg2''@;'; put 'put ''MyZtfWZvcig7RTx0aGlzLmxlbmd0aC1IO0UrKylBPShtPSgwfHRoaXMud29yZHNbRStIXSkrQSk+PjI2LHRoaXMud29yZHNbRStIXT02NzEwODg2MyZtO2lmKDA9PT1BKXJldHVybiB0aGlzLl9zdHJpcCgpO2ZvcihnKC0xPT09QSksQT0wLEU9MDtFPHRoaXMubGVuZ3RoO0UrKylBPShtPS0o''@;'; put 'put ''MHx0aGlzLndvcmRzW0VdKStBKT4+MjYsdGhpcy53b3Jkc1tFXT02NzEwODg2MyZtO3JldHVybiB0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fc3RyaXAoKX0sdy5wcm90b3R5cGUuX3dvcmREaXY9ZnVuY3Rpb24oQyxUKXt2YXIgSCxqPXRoaXMuY2xvbmUoKSxFPUMsbT0wfEUud29yZHNbRS5sZW5n''@;'; put 'put ''dGgtMV07MCE9KEg9MjYtdGhpcy5fY291bnRCaXRzKG0pKSYmKEU9RS51c2hsbihIKSxqLml1c2hsbihIKSxtPTB8RS53b3Jkc1tFLmxlbmd0aC0xXSk7dmFyIHRlLGFlPWoubGVuZ3RoLUUubGVuZ3RoO2lmKCJtb2QiIT09VCl7KHRlPW5ldyB3KG51bGwpKS5sZW5ndGg9YWUrMSx0ZS53b3Jk''@;'; put 'put ''cz1uZXcgQXJyYXkodGUubGVuZ3RoKTtmb3IodmFyIHNlPTA7c2U8dGUubGVuZ3RoO3NlKyspdGUud29yZHNbc2VdPTB9dmFyIHdlPWouY2xvbmUoKS5faXNobG5zdWJtdWwoRSwxLGFlKTswPT09d2UubmVnYXRpdmUmJihqPXdlLHRlJiYodGUud29yZHNbYWVdPTEpKTtmb3IodmFyIFVlPWFl''@;'; put 'put ''LTE7VWU+PTA7VWUtLSl7dmFyIEplPTY3MTA4ODY0KigwfGoud29yZHNbRS5sZW5ndGgrVWVdKSsoMHxqLndvcmRzW0UubGVuZ3RoK1VlLTFdKTtmb3IoSmU9TWF0aC5taW4oSmUvbXwwLDY3MTA4ODYzKSxqLl9pc2hsbnN1Ym11bChFLEplLFVlKTswIT09ai5uZWdhdGl2ZTspSmUtLSxqLm5l''@;'; put 'put ''Z2F0aXZlPTAsai5faXNobG5zdWJtdWwoRSwxLFVlKSxqLmlzWmVybygpfHwoai5uZWdhdGl2ZV49MSk7dGUmJih0ZS53b3Jkc1tVZV09SmUpfXJldHVybiB0ZSYmdGUuX3N0cmlwKCksai5fc3RyaXAoKSwiZGl2IiE9PVQmJjAhPT1IJiZqLml1c2hybihIKSx7ZGl2OnRlfHxudWxsLG1vZDpq''@;'; put 'put ''fX0sdy5wcm90b3R5cGUuZGl2bW9kPWZ1bmN0aW9uKEMsVCxIKXtyZXR1cm4gZyghQy5pc1plcm8oKSksdGhpcy5pc1plcm8oKT97ZGl2Om5ldyB3KDApLG1vZDpuZXcgdygwKX06MCE9PXRoaXMubmVnYXRpdmUmJjA9PT1DLm5lZ2F0aXZlPyhtPXRoaXMubmVnKCkuZGl2bW9kKEMsVCksIm1v''@;'; put 'put ''ZCIhPT1UJiYoaj1tLmRpdi5uZWcoKSksImRpdiIhPT1UJiYoRT1tLm1vZC5uZWcoKSxIJiYwIT09RS5uZWdhdGl2ZSYmRS5pYWRkKEMpKSx7ZGl2OmosbW9kOkV9KTowPT09dGhpcy5uZWdhdGl2ZSYmMCE9PUMubmVnYXRpdmU/KG09dGhpcy5kaXZtb2QoQy5uZWcoKSxUKSwibW9kIiE9PVQm''@;'; put 'put ''JihqPW0uZGl2Lm5lZygpKSx7ZGl2OmosbW9kOm0ubW9kfSk6dGhpcy5uZWdhdGl2ZSZDLm5lZ2F0aXZlPyhtPXRoaXMubmVnKCkuZGl2bW9kKEMubmVnKCksVCksImRpdiIhPT1UJiYoRT1tLm1vZC5uZWcoKSxIJiYwIT09RS5uZWdhdGl2ZSYmRS5pc3ViKEMpKSx7ZGl2Om0uZGl2LG1vZDpF''@;'; put 'put ''fSk6Qy5sZW5ndGg+dGhpcy5sZW5ndGh8fHRoaXMuY21wKEMpPDA/e2RpdjpuZXcgdygwKSxtb2Q6dGhpc306MT09PUMubGVuZ3RoPyJkaXYiPT09VD97ZGl2OnRoaXMuZGl2bihDLndvcmRzWzBdKSxtb2Q6bnVsbH06Im1vZCI9PT1UP3tkaXY6bnVsbCxtb2Q6bmV3IHcodGhpcy5tb2RybihD''@;'; put 'put ''LndvcmRzWzBdKSl9OntkaXY6dGhpcy5kaXZuKEMud29yZHNbMF0pLG1vZDpuZXcgdyh0aGlzLm1vZHJuKEMud29yZHNbMF0pKX06dGhpcy5fd29yZERpdihDLFQpO3ZhciBqLEUsbX0sdy5wcm90b3R5cGUuZGl2PWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmRpdm1vZChDLCJkaXYiLCExKS5k''@;'; put 'put ''aXZ9LHcucHJvdG90eXBlLm1vZD1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5kaXZtb2QoQywibW9kIiwhMSkubW9kfSx3LnByb3RvdHlwZS51bW9kPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmRpdm1vZChDLCJtb2QiLCEwKS5tb2R9LHcucHJvdG90eXBlLmRpdlJvdW5kPWZ1bmN0aW9uKEMp''@;'; put 'put ''e3ZhciBUPXRoaXMuZGl2bW9kKEMpO2lmKFQubW9kLmlzWmVybygpKXJldHVybiBULmRpdjt2YXIgSD0wIT09VC5kaXYubmVnYXRpdmU/VC5tb2QuaXN1YihDKTpULm1vZCxqPUMudXNocm4oMSksRT1DLmFuZGxuKDEpLG09SC5jbXAoaik7cmV0dXJuIG08MHx8MT09PUUmJjA9PT1tP1QuZGl2''@;'; put 'put ''OjAhPT1ULmRpdi5uZWdhdGl2ZT9ULmRpdi5pc3VibigxKTpULmRpdi5pYWRkbigxKX0sdy5wcm90b3R5cGUubW9kcm49ZnVuY3Rpb24oQyl7dmFyIFQ9QzwwO1QmJihDPS1DKSxnKEM8PTY3MTA4ODYzKTtmb3IodmFyIEg9KDE8PDI2KSVDLGo9MCxFPXRoaXMubGVuZ3RoLTE7RT49MDtFLS0p''@;'; put 'put ''aj0oSCpqKygwfHRoaXMud29yZHNbRV0pKSVDO3JldHVybiBUPy1qOmp9LHcucHJvdG90eXBlLm1vZG49ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMubW9kcm4oQyl9LHcucHJvdG90eXBlLmlkaXZuPWZ1bmN0aW9uKEMpe3ZhciBUPUM8MDtUJiYoQz0tQyksZyhDPD02NzEwODg2Myk7Zm9yKHZh''@;'; put 'put ''ciBIPTAsaj10aGlzLmxlbmd0aC0xO2o+PTA7ai0tKXt2YXIgRT0oMHx0aGlzLndvcmRzW2pdKSs2NzEwODg2NCpIO3RoaXMud29yZHNbal09RS9DfDAsSD1FJUN9cmV0dXJuIHRoaXMuX3N0cmlwKCksVD90aGlzLmluZWcoKTp0aGlzfSx3LnByb3RvdHlwZS5kaXZuPWZ1bmN0aW9uKEMpe3Jl''@;'; put 'put ''dHVybiB0aGlzLmNsb25lKCkuaWRpdm4oQyl9LHcucHJvdG90eXBlLmVnY2Q9ZnVuY3Rpb24oQyl7ZygwPT09Qy5uZWdhdGl2ZSksZyghQy5pc1plcm8oKSk7dmFyIFQ9dGhpcyxIPUMuY2xvbmUoKTtUPTAhPT1ULm5lZ2F0aXZlP1QudW1vZChDKTpULmNsb25lKCk7Zm9yKHZhciBqPW5ldyB3''@;'; put 'put ''KDEpLEU9bmV3IHcoMCksbT1uZXcgdygwKSxBPW5ldyB3KDEpLGFlPTA7VC5pc0V2ZW4oKSYmSC5pc0V2ZW4oKTspVC5pdXNocm4oMSksSC5pdXNocm4oMSksKythZTtmb3IodmFyIHRlPUguY2xvbmUoKSxzZT1ULmNsb25lKCk7IVQuaXNaZXJvKCk7KXtmb3IodmFyIHdlPTAsVWU9MTshKFQu''@;'; put 'put ''d29yZHNbMF0mVWUpJiZ3ZTwyNjsrK3dlLFVlPDw9MSk7aWYod2U+MClmb3IoVC5pdXNocm4od2UpO3dlLS0gPjA7KShqLmlzT2RkKCl8fEUuaXNPZGQoKSkmJihqLmlhZGQodGUpLEUuaXN1YihzZSkpLGouaXVzaHJuKDEpLEUuaXVzaHJuKDEpO2Zvcih2YXIgSmU9MCxvdD0xOyEoSC53b3Jk''@;'; put 'put ''c1swXSZvdCkmJkplPDI2OysrSmUsb3Q8PD0xKTtpZihKZT4wKWZvcihILml1c2hybihKZSk7SmUtLSA+MDspKG0uaXNPZGQoKXx8QS5pc09kZCgpKSYmKG0uaWFkZCh0ZSksQS5pc3ViKHNlKSksbS5pdXNocm4oMSksQS5pdXNocm4oMSk7VC5jbXAoSCk+PTA/KFQuaXN1YihIKSxqLmlzdWIo''@;'; put 'put ''bSksRS5pc3ViKEEpKTooSC5pc3ViKFQpLG0uaXN1YihqKSxBLmlzdWIoRSkpfXJldHVybnthOm0sYjpBLGdjZDpILml1c2hsbihhZSl9fSx3LnByb3RvdHlwZS5faW52bXA9ZnVuY3Rpb24oQyl7ZygwPT09Qy5uZWdhdGl2ZSksZyghQy5pc1plcm8oKSk7dmFyIHdlLFQ9dGhpcyxIPUMuY2xv''@;'; put 'put ''bmUoKTtUPTAhPT1ULm5lZ2F0aXZlP1QudW1vZChDKTpULmNsb25lKCk7Zm9yKHZhciBqPW5ldyB3KDEpLEU9bmV3IHcoMCksbT1ILmNsb25lKCk7VC5jbXBuKDEpPjAmJkguY21wbigxKT4wOyl7Zm9yKHZhciBBPTAsYWU9MTshKFQud29yZHNbMF0mYWUpJiZBPDI2OysrQSxhZTw8PTEpO2lm''@;'; put 'put ''KEE+MClmb3IoVC5pdXNocm4oQSk7QS0tID4wOylqLmlzT2RkKCkmJmouaWFkZChtKSxqLml1c2hybigxKTtmb3IodmFyIHRlPTAsc2U9MTshKEgud29yZHNbMF0mc2UpJiZ0ZTwyNjsrK3RlLHNlPDw9MSk7aWYodGU+MClmb3IoSC5pdXNocm4odGUpO3RlLS0gPjA7KUUuaXNPZGQoKSYmRS5p''@;'; put 'put ''YWRkKG0pLEUuaXVzaHJuKDEpO1QuY21wKEgpPj0wPyhULmlzdWIoSCksai5pc3ViKEUpKTooSC5pc3ViKFQpLEUuaXN1YihqKSl9cmV0dXJuKHdlPTA9PT1ULmNtcG4oMSk/ajpFKS5jbXBuKDApPDAmJndlLmlhZGQoQyksd2V9LHcucHJvdG90eXBlLmdjZD1mdW5jdGlvbihDKXtpZih0aGlz''@;'; put 'put ''LmlzWmVybygpKXJldHVybiBDLmFicygpO2lmKEMuaXNaZXJvKCkpcmV0dXJuIHRoaXMuYWJzKCk7dmFyIFQ9dGhpcy5jbG9uZSgpLEg9Qy5jbG9uZSgpO1QubmVnYXRpdmU9MCxILm5lZ2F0aXZlPTA7Zm9yKHZhciBqPTA7VC5pc0V2ZW4oKSYmSC5pc0V2ZW4oKTtqKyspVC5pdXNocm4oMSks''@;'; put 'put ''SC5pdXNocm4oMSk7Zm9yKDs7KXtmb3IoO1QuaXNFdmVuKCk7KVQuaXVzaHJuKDEpO2Zvcig7SC5pc0V2ZW4oKTspSC5pdXNocm4oMSk7dmFyIEU9VC5jbXAoSCk7aWYoRTwwKXt2YXIgbT1UO1Q9SCxIPW19ZWxzZSBpZigwPT09RXx8MD09PUguY21wbigxKSlicmVhaztULmlzdWIoSCl9cmV0''@;'; put 'put ''dXJuIEguaXVzaGxuKGopfSx3LnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmVnY2QoQykuYS51bW9kKEMpfSx3LnByb3RvdHlwZS5pc0V2ZW49ZnVuY3Rpb24oKXtyZXR1cm4hKDEmdGhpcy53b3Jkc1swXSl9LHcucHJvdG90eXBlLmlzT2RkPWZ1bmN0aW9uKCl7cmV0''@;'; put 'put ''dXJuISgxJn50aGlzLndvcmRzWzBdKX0sdy5wcm90b3R5cGUuYW5kbG49ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMud29yZHNbMF0mQ30sdy5wcm90b3R5cGUuYmluY249ZnVuY3Rpb24oQyl7ZygibnVtYmVyIj09dHlwZW9mIEMpO3ZhciBUPUMlMjYsSD0oQy1UKS8yNixqPTE8PFQ7aWYodGhp''@;'; put 'put ''cy5sZW5ndGg8PUgpcmV0dXJuIHRoaXMuX2V4cGFuZChIKzEpLHRoaXMud29yZHNbSF18PWosdGhpcztmb3IodmFyIEU9aixtPUg7MCE9PUUmJm08dGhpcy5sZW5ndGg7bSsrKXt2YXIgQT0wfHRoaXMud29yZHNbbV07RT0oQSs9RSk+Pj4yNix0aGlzLndvcmRzW21dPUEmPTY3MTA4ODYzfXJl''@;'; put 'put ''dHVybiAwIT09RSYmKHRoaXMud29yZHNbbV09RSx0aGlzLmxlbmd0aCsrKSx0aGlzfSx3LnByb3RvdHlwZS5pc1plcm89ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXX0sdy5wcm90b3R5cGUuY21wbj1mdW5jdGlvbihDKXt2YXIgSCxUPUM8MDtp''@;'; put 'put ''ZigwIT09dGhpcy5uZWdhdGl2ZSYmIVQpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJlQpcmV0dXJuIDE7aWYodGhpcy5fc3RyaXAoKSx0aGlzLmxlbmd0aD4xKUg9MTtlbHNle1QmJihDPS1DKSxnKEM8PTY3MTA4ODYzLCJOdW1iZXIgaXMgdG9vIGJpZyIpO3ZhciBqPTB8dGhpcy53''@;'; put 'put ''b3Jkc1swXTtIPWo9PT1DPzA6ajxDPy0xOjF9cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LUg6SH0sdy5wcm90b3R5cGUuY21wPWZ1bmN0aW9uKEMpe2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Qy5uZWdhdGl2ZSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PUMubmVn''@;'; put 'put ''YXRpdmUpcmV0dXJuIDE7dmFyIFQ9dGhpcy51Y21wKEMpO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1UOlR9LHcucHJvdG90eXBlLnVjbXA9ZnVuY3Rpb24oQyl7aWYodGhpcy5sZW5ndGg+Qy5sZW5ndGgpcmV0dXJuIDE7aWYodGhpcy5sZW5ndGg8Qy5sZW5ndGgpcmV0dXJuLTE7Zm9y''@;'; put 'put ''KHZhciBUPTAsSD10aGlzLmxlbmd0aC0xO0g+PTA7SC0tKXt2YXIgaj0wfHRoaXMud29yZHNbSF0sRT0wfEMud29yZHNbSF07aWYoaiE9PUUpe2o8RT9UPS0xOmo+RSYmKFQ9MSk7YnJlYWt9fXJldHVybiBUfSx3LnByb3RvdHlwZS5ndG49ZnVuY3Rpb24oQyl7cmV0dXJuIDE9PT10aGlzLmNt''@;'; put 'put ''cG4oQyl9LHcucHJvdG90eXBlLmd0PWZ1bmN0aW9uKEMpe3JldHVybiAxPT09dGhpcy5jbXAoQyl9LHcucHJvdG90eXBlLmd0ZW49ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuY21wbihDKT49MH0sdy5wcm90b3R5cGUuZ3RlPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmNtcChDKT49MH0sdy5w''@;'; put 'put ''cm90b3R5cGUubHRuPWZ1bmN0aW9uKEMpe3JldHVybi0xPT09dGhpcy5jbXBuKEMpfSx3LnByb3RvdHlwZS5sdD1mdW5jdGlvbihDKXtyZXR1cm4tMT09PXRoaXMuY21wKEMpfSx3LnByb3RvdHlwZS5sdGVuPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmNtcG4oQyk8PTB9LHcucHJvdG90eXBl''@;'; put 'put ''Lmx0ZT1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5jbXAoQyk8PTB9LHcucHJvdG90eXBlLmVxbj1mdW5jdGlvbihDKXtyZXR1cm4gMD09PXRoaXMuY21wbihDKX0sdy5wcm90b3R5cGUuZXE9ZnVuY3Rpb24oQyl7cmV0dXJuIDA9PT10aGlzLmNtcChDKX0sdy5yZWQ9ZnVuY3Rpb24oQyl7cmV0''@;'; put 'put ''dXJuIG5ldyBwKEMpfSx3LnByb3RvdHlwZS50b1JlZD1mdW5jdGlvbihDKXtyZXR1cm4gZyghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSxnKDA9PT10aGlzLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLEMuY29udmVy''@;'; put 'put ''dFRvKHRoaXMpLl9mb3JjZVJlZChDKX0sdy5wcm90b3R5cGUuZnJvbVJlZD1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJmcm9tUmVkIHdvcmtzIG9ubHkgd2l0aCBudW1iZXJzIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5yZWQuY29udmVydEZyb20odGhpcyl9LHcucHJvdG90''@;'; put 'put ''eXBlLl9mb3JjZVJlZD1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5yZWQ9Qyx0aGlzfSx3LnByb3RvdHlwZS5mb3JjZVJlZD1mdW5jdGlvbihDKXtyZXR1cm4gZyghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLl9mb3JjZVJlZChDKX0sdy5w''@;'; put 'put ''cm90b3R5cGUucmVkQWRkPWZ1bmN0aW9uKEMpe3JldHVybiBnKHRoaXMucmVkLCJyZWRBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuYWRkKHRoaXMsQyl9LHcucHJvdG90eXBlLnJlZElBZGQ9ZnVuY3Rpb24oQyl7cmV0dXJuIGcodGhpcy5yZWQsInJlZElBZGQg''@;'; put 'put ''d29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaWFkZCh0aGlzLEMpfSx3LnByb3RvdHlwZS5yZWRTdWI9ZnVuY3Rpb24oQyl7cmV0dXJuIGcodGhpcy5yZWQsInJlZFN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zdWIodGhpcyxDKX0sdy5w''@;'; put 'put ''cm90b3R5cGUucmVkSVN1Yj1mdW5jdGlvbihDKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkSVN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pc3ViKHRoaXMsQyl9LHcucHJvdG90eXBlLnJlZFNobD1mdW5jdGlvbihDKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkU2hs''@;'; put 'put ''IHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnNobCh0aGlzLEMpfSx3LnByb3RvdHlwZS5yZWRNdWw9ZnVuY3Rpb24oQyl7cmV0dXJuIGcodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLEMp''@;'; put 'put ''LHRoaXMucmVkLm11bCh0aGlzLEMpfSx3LnByb3RvdHlwZS5yZWRJTXVsPWZ1bmN0aW9uKEMpe3JldHVybiBnKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxDKSx0aGlzLnJlZC5pbXVsKHRoaXMsQyl9LHcucHJv''@;'; put 'put ''dG90eXBlLnJlZFNxcj1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWRTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FyKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRJU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIGco''@;'; put 'put ''dGhpcy5yZWQsInJlZElTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaXNxcih0aGlzKX0sdy5wcm90b3R5cGUucmVkU3FydD1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWRTcXJ0IHdvcmtzIG9ubHkgd2l0''@;'; put 'put ''aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcnQodGhpcyl9LHcucHJvdG90eXBlLnJlZEludm09ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkSW52bSB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5''@;'; put 'put ''MSh0aGlzKSx0aGlzLnJlZC5pbnZtKHRoaXMpfSx3LnByb3RvdHlwZS5yZWROZWc9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkTmVnIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLm5lZyh0aGlzKX0sdy5wcm90''@;'; put 'put ''b3R5cGUucmVkUG93PWZ1bmN0aW9uKEMpe3JldHVybiBnKHRoaXMucmVkJiYhQy5yZWQsInJlZFBvdyhub3JtYWxOdW0pIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQucG93KHRoaXMsQyl9O3ZhciBtZT17azI1NjpudWxsLHAyMjQ6bnVsbCxwMTkyOm51bGwscDI1NTE5Om51''@;'; put 'put ''bGx9O2Z1bmN0aW9uIF9lKHgsQyl7dGhpcy5uYW1lPXgsdGhpcy5wPW5ldyB3KEMsMTYpLHRoaXMubj10aGlzLnAuYml0TGVuZ3RoKCksdGhpcy5rPW5ldyB3KDEpLml1c2hsbih0aGlzLm4pLmlzdWIodGhpcy5wKSx0aGlzLnRtcD10aGlzLl90bXAoKX1mdW5jdGlvbiBUZSgpe19lLmNhbGwo''@;'; put 'put ''dGhpcywiazI1NiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmIil9ZnVuY3Rpb24gU2UoKXtfZS5jYWxsKHRoaXMsInAyMjQiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiAwMDAwMDAw''@;'; put 'put ''MCAwMDAwMDAwMCAwMDAwMDAwMSIpfWZ1bmN0aW9uIGplKCl7X2UuY2FsbCh0aGlzLCJwMTkyIiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYiKX1mdW5jdGlvbiBWKCl7X2UuY2FsbCh0aGlzLCIyNTUxOSIsIjdmZmZmZmZmZmZmZmZmZmYg''@;'; put 'put ''ZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiKX1mdW5jdGlvbiBwKHgpe2lmKCJzdHJpbmciPT10eXBlb2YgeCl7dmFyIEM9dy5fcHJpbWUoeCk7dGhpcy5tPUMucCx0aGlzLnByaW1lPUN9ZWxzZSBnKHguZ3RuKDEpLCJtb2R1bHVzIG11c3QgYmUg''@;'; put 'put ''Z3JlYXRlciB0aGFuIDEiKSx0aGlzLm09eCx0aGlzLnByaW1lPW51bGx9ZnVuY3Rpb24gYih4KXtwLmNhbGwodGhpcyx4KSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0aGlzLnNoaWZ0JTI2IT0wJiYodGhpcy5zaGlmdCs9MjYtdGhpcy5zaGlmdCUyNiksdGhpcy5yPW5ldyB3KDEp''@;'; put 'put ''Lml1c2hsbih0aGlzLnNoaWZ0KSx0aGlzLnIyPXRoaXMuaW1vZCh0aGlzLnIuc3FyKCkpLHRoaXMucmludj10aGlzLnIuX2ludm1wKHRoaXMubSksdGhpcy5taW52PXRoaXMucmludi5tdWwodGhpcy5yKS5pc3VibigxKS5kaXYodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5taW52LnVtb2QodGhp''@;'; put 'put ''cy5yKSx0aGlzLm1pbnY9dGhpcy5yLnN1Yih0aGlzLm1pbnYpfV9lLnByb3RvdHlwZS5fdG1wPWZ1bmN0aW9uKCl7dmFyIEM9bmV3IHcobnVsbCk7cmV0dXJuIEMud29yZHM9bmV3IEFycmF5KE1hdGguY2VpbCh0aGlzLm4vMTMpKSxDfSxfZS5wcm90b3R5cGUuaXJlZHVjZT1mdW5jdGlvbihD''@;'; put 'put ''KXt2YXIgSCxUPUM7ZG97dGhpcy5zcGxpdChULHRoaXMudG1wKSxIPShUPShUPXRoaXMuaW11bEsoVCkpLmlhZGQodGhpcy50bXApKS5iaXRMZW5ndGgoKX13aGlsZShIPnRoaXMubik7dmFyIGo9SDx0aGlzLm4/LTE6VC51Y21wKHRoaXMucCk7cmV0dXJuIDA9PT1qPyhULndvcmRzWzBdPTAs''@;'; put 'put ''VC5sZW5ndGg9MSk6aj4wP1QuaXN1Yih0aGlzLnApOnZvaWQgMCE9PVQuc3RyaXA/VC5zdHJpcCgpOlQuX3N0cmlwKCksVH0sX2UucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKEMsVCl7Qy5pdXNocm4odGhpcy5uLDAsVCl9LF9lLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihDKXtyZXR1cm4g''@;'; put 'put ''Qy5pbXVsKHRoaXMuayl9LEIoVGUsX2UpLFRlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihDLFQpe2Zvcih2YXIgSD00MTk0MzAzLGo9TWF0aC5taW4oQy5sZW5ndGgsOSksRT0wO0U8ajtFKyspVC53b3Jkc1tFXT1DLndvcmRzW0VdO2lmKFQubGVuZ3RoPWosQy5sZW5ndGg8PTkpcmV0dXJu''@;'; put 'put ''IEMud29yZHNbMF09MCx2b2lkKEMubGVuZ3RoPTEpO3ZhciBtPUMud29yZHNbOV07Zm9yKFQud29yZHNbVC5sZW5ndGgrK109bSZILEU9MTA7RTxDLmxlbmd0aDtFKyspe3ZhciBBPTB8Qy53b3Jkc1tFXTtDLndvcmRzW0UtMTBdPShBJkgpPDw0fG0+Pj4yMixtPUF9Qy53b3Jkc1tFLTEwXT1t''@;'; put 'put ''Pj4+PTIyLEMubGVuZ3RoLT0wPT09bSYmQy5sZW5ndGg+MTA/MTA6OX0sVGUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKEMpe0Mud29yZHNbQy5sZW5ndGhdPTAsQy53b3Jkc1tDLmxlbmd0aCsxXT0wLEMubGVuZ3RoKz0yO2Zvcih2YXIgVD0wLEg9MDtIPEMubGVuZ3RoO0grKyl7dmFyIGo9''@;'; put 'put ''MHxDLndvcmRzW0hdO0Mud29yZHNbSF09NjcxMDg4NjMmKFQrPTk3NypqKSxUPTY0KmorKFQvNjcxMDg4NjR8MCl9cmV0dXJuIDA9PT1DLndvcmRzW0MubGVuZ3RoLTFdJiYoQy5sZW5ndGgtLSwwPT09Qy53b3Jkc1tDLmxlbmd0aC0xXSYmQy5sZW5ndGgtLSksQ30sQihTZSxfZSksQihqZSxf''@;'; put 'put ''ZSksQihWLF9lKSxWLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihDKXtmb3IodmFyIFQ9MCxIPTA7SDxDLmxlbmd0aDtIKyspe3ZhciBqPTE5KigwfEMud29yZHNbSF0pK1QsRT02NzEwODg2MyZqO2o+Pj49MjYsQy53b3Jkc1tIXT1FLFQ9an1yZXR1cm4gMCE9PVQmJihDLndvcmRzW0MubGVu''@;'; put 'put ''Z3RoKytdPVQpLEN9LHcuX3ByaW1lPWZ1bmN0aW9uKEMpe2lmKG1lW0NdKXJldHVybiBtZVtDXTt2YXIgVDtpZigiazI1NiI9PT1DKVQ9bmV3IFRlO2Vsc2UgaWYoInAyMjQiPT09QylUPW5ldyBTZTtlbHNlIGlmKCJwMTkyIj09PUMpVD1uZXcgamU7ZWxzZXtpZigicDI1NTE5IiE9PUMpdGhy''@;'; put 'put ''b3cgbmV3IEVycm9yKCJVbmtub3duIHByaW1lICIrQyk7VD1uZXcgVn1yZXR1cm4gbWVbQ109VCxUfSxwLnByb3RvdHlwZS5fdmVyaWZ5MT1mdW5jdGlvbihDKXtnKDA9PT1DLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLGcoQy5yZWQsInJlZCB3b3JrcyBvbmx5''@;'; put 'put ''IHdpdGggcmVkIG51bWJlcnMiKX0scC5wcm90b3R5cGUuX3ZlcmlmeTI9ZnVuY3Rpb24oQyxUKXtnKCEoQy5uZWdhdGl2ZXxULm5lZ2F0aXZlKSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxnKEMucmVkJiZDLnJlZD09PVQucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBu''@;'; put 'put ''dW1iZXJzIil9LHAucHJvdG90eXBlLmltb2Q9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMucHJpbWU/dGhpcy5wcmltZS5pcmVkdWNlKEMpLl9mb3JjZVJlZCh0aGlzKTooTihDLEMudW1vZCh0aGlzLm0pLl9mb3JjZVJlZCh0aGlzKSksQyl9LHAucHJvdG90eXBlLm5lZz1mdW5jdGlvbihDKXty''@;'; put 'put ''ZXR1cm4gQy5pc1plcm8oKT9DLmNsb25lKCk6dGhpcy5tLnN1YihDKS5fZm9yY2VSZWQodGhpcyl9LHAucHJvdG90eXBlLmFkZD1mdW5jdGlvbihDLFQpe3RoaXMuX3ZlcmlmeTIoQyxUKTt2YXIgSD1DLmFkZChUKTtyZXR1cm4gSC5jbXAodGhpcy5tKT49MCYmSC5pc3ViKHRoaXMubSksSC5f''@;'; put 'put ''Zm9yY2VSZWQodGhpcyl9LHAucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24oQyxUKXt0aGlzLl92ZXJpZnkyKEMsVCk7dmFyIEg9Qy5pYWRkKFQpO3JldHVybiBILmNtcCh0aGlzLm0pPj0wJiZILmlzdWIodGhpcy5tKSxIfSxwLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24oQyxUKXt0aGlzLl92ZXJp''@;'; put 'put ''ZnkyKEMsVCk7dmFyIEg9Qy5zdWIoVCk7cmV0dXJuIEguY21wbigwKTwwJiZILmlhZGQodGhpcy5tKSxILl9mb3JjZVJlZCh0aGlzKX0scC5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihDLFQpe3RoaXMuX3ZlcmlmeTIoQyxUKTt2YXIgSD1DLmlzdWIoVCk7cmV0dXJuIEguY21wbigwKTwwJiZI''@;'; put 'put ''LmlhZGQodGhpcy5tKSxIfSxwLnByb3RvdHlwZS5zaGw9ZnVuY3Rpb24oQyxUKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MShDKSx0aGlzLmltb2QoQy51c2hsbihUKSl9LHAucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oQyxUKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihDLFQpLHRoaXMuaW1vZChDLmlt''@;'; put 'put ''dWwoVCkpfSxwLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oQyxUKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihDLFQpLHRoaXMuaW1vZChDLm11bChUKSl9LHAucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuaW11bChDLEMuY2xvbmUoKSl9LHAucHJvdG90eXBlLnNxcj1mdW5j''@;'; put 'put ''dGlvbihDKXtyZXR1cm4gdGhpcy5tdWwoQyxDKX0scC5wcm90b3R5cGUuc3FydD1mdW5jdGlvbihDKXtpZihDLmlzWmVybygpKXJldHVybiBDLmNsb25lKCk7dmFyIFQ9dGhpcy5tLmFuZGxuKDMpO2lmKGcoVCUyPT0xKSwzPT09VCl7dmFyIEg9dGhpcy5tLmFkZChuZXcgdygxKSkuaXVzaHJu''@;'; put 'put ''KDIpO3JldHVybiB0aGlzLnBvdyhDLEgpfWZvcih2YXIgaj10aGlzLm0uc3VibigxKSxFPTA7IWouaXNaZXJvKCkmJjA9PT1qLmFuZGxuKDEpOylFKyssai5pdXNocm4oMSk7Zyghai5pc1plcm8oKSk7dmFyIG09bmV3IHcoMSkudG9SZWQodGhpcyksQT1tLnJlZE5lZygpLGFlPXRoaXMubS5z''@;'; put 'put ''dWJuKDEpLml1c2hybigxKSx0ZT10aGlzLm0uYml0TGVuZ3RoKCk7Zm9yKHRlPW5ldyB3KDIqdGUqdGUpLnRvUmVkKHRoaXMpOzAhPT10aGlzLnBvdyh0ZSxhZSkuY21wKEEpOyl0ZS5yZWRJQWRkKEEpO2Zvcih2YXIgc2U9dGhpcy5wb3codGUsaiksd2U9dGhpcy5wb3coQyxqLmFkZG4oMSku''@;'; put 'put ''aXVzaHJuKDEpKSxVZT10aGlzLnBvdyhDLGopLEplPUU7MCE9PVVlLmNtcChtKTspe2Zvcih2YXIgb3Q9VWUseGU9MDswIT09b3QuY21wKG0pO3hlKyspb3Q9b3QucmVkU3FyKCk7Zyh4ZTxKZSk7dmFyIHZlPXRoaXMucG93KHNlLG5ldyB3KDEpLml1c2hsbihKZS14ZS0xKSk7d2U9d2UucmVk''@;'; put 'put ''TXVsKHZlKSxzZT12ZS5yZWRTcXIoKSxVZT1VZS5yZWRNdWwoc2UpLEplPXhlfXJldHVybiB3ZX0scC5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihDKXt2YXIgVD1DLl9pbnZtcCh0aGlzLm0pO3JldHVybiAwIT09VC5uZWdhdGl2ZT8oVC5uZWdhdGl2ZT0wLHRoaXMuaW1vZChUKS5yZWROZWco''@;'; put 'put ''KSk6dGhpcy5pbW9kKFQpfSxwLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24oQyxUKXtpZihULmlzWmVybygpKXJldHVybiBuZXcgdygxKS50b1JlZCh0aGlzKTtpZigwPT09VC5jbXBuKDEpKXJldHVybiBDLmNsb25lKCk7dmFyIGo9bmV3IEFycmF5KDE2KTtqWzBdPW5ldyB3KDEpLnRvUmVkKHRo''@;'; put 'put ''aXMpLGpbMV09Qztmb3IodmFyIEU9MjtFPGoubGVuZ3RoO0UrKylqW0VdPXRoaXMubXVsKGpbRS0xXSxDKTt2YXIgbT1qWzBdLEE9MCxhZT0wLHRlPVQuYml0TGVuZ3RoKCklMjY7Zm9yKDA9PT10ZSYmKHRlPTI2KSxFPVQubGVuZ3RoLTE7RT49MDtFLS0pe2Zvcih2YXIgc2U9VC53b3Jkc1tF''@;'; put 'put ''XSx3ZT10ZS0xO3dlPj0wO3dlLS0pe3ZhciBVZT1zZT4+d2UmMTttIT09alswXSYmKG09dGhpcy5zcXIobSkpLDAhPT1VZXx8MCE9PUE/KEE8PD0xLEF8PVVlLCg0PT0rK2FlfHwwPT09RSYmMD09PXdlKSYmKG09dGhpcy5tdWwobSxqW0FdKSxhZT0wLEE9MCkpOmFlPTB9dGU9MjZ9cmV0dXJu''@;'; put 'put ''IG19LHAucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihDKXt2YXIgVD1DLnVtb2QodGhpcy5tKTtyZXR1cm4gVD09PUM/VC5jbG9uZSgpOlR9LHAucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKEMpe3ZhciBUPUMuY2xvbmUoKTtyZXR1cm4gVC5yZWQ9bnVsbCxUfSx3Lm1vbnQ9''@;'; put 'put ''ZnVuY3Rpb24oQyl7cmV0dXJuIG5ldyBiKEMpfSxCKGIscCksYi5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmltb2QoQy51c2hsbih0aGlzLnNoaWZ0KSl9LGIucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKEMpe3ZhciBUPXRoaXMuaW1vZChDLm11''@;'; put 'put ''bCh0aGlzLnJpbnYpKTtyZXR1cm4gVC5yZWQ9bnVsbCxUfSxiLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKEMsVCl7aWYoQy5pc1plcm8oKXx8VC5pc1plcm8oKSlyZXR1cm4gQy53b3Jkc1swXT0wLEMubGVuZ3RoPTEsQzt2YXIgSD1DLmltdWwoVCksaj1ILm1hc2tuKHRoaXMuc2hpZnQpLm11''@;'; put 'put ''bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxFPUguaXN1YihqKS5pdXNocm4odGhpcy5zaGlmdCksbT1FO3JldHVybiBFLmNtcCh0aGlzLm0pPj0wP209RS5pc3ViKHRoaXMubSk6RS5jbXBuKDApPDAmJihtPUUuaWFkZCh0aGlzLm0pKSxtLl9mb3JjZVJlZCh0''@;'; put 'put ''aGlzKX0sYi5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKEMsVCl7aWYoQy5pc1plcm8oKXx8VC5pc1plcm8oKSlyZXR1cm4gbmV3IHcoMCkuX2ZvcmNlUmVkKHRoaXMpO3ZhciBIPUMubXVsKFQpLGo9SC5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCku''@;'; put 'put ''bXVsKHRoaXMubSksRT1ILmlzdWIoaikuaXVzaHJuKHRoaXMuc2hpZnQpLG09RTtyZXR1cm4gRS5jbXAodGhpcy5tKT49MD9tPUUuaXN1Yih0aGlzLm0pOkUuY21wbigwKTwwJiYobT1FLmlhZGQodGhpcy5tKSksbS5fZm9yY2VSZWQodGhpcyl9LGIucHJvdG90eXBlLmludm09ZnVuY3Rpb24o''@;'; put 'put ''Qyl7cmV0dXJuIHRoaXMuaW1vZChDLl9pbnZtcCh0aGlzLm0pLm11bCh0aGlzLnIyKSkuX2ZvcmNlUmVkKHRoaXMpfX0odWU9eS5ubWQodWUpLHRoaXMpfSw5OTMxOih1ZSxYLHkpPT57dmFyIEk7ZnVuY3Rpb24gXyhCKXt0aGlzLnJhbmQ9Qn1pZih1ZS5leHBvcnRzPWZ1bmN0aW9uKHcpe3Jl''@;'; put 'put ''dHVybiBJfHwoST1uZXcgXyhudWxsKSksSS5nZW5lcmF0ZSh3KX0sdWUuZXhwb3J0cy5SYW5kPV8sXy5wcm90b3R5cGUuZ2VuZXJhdGU9ZnVuY3Rpb24odyl7cmV0dXJuIHRoaXMuX3JhbmQodyl9LF8ucHJvdG90eXBlLl9yYW5kPWZ1bmN0aW9uKHcpe2lmKHRoaXMucmFuZC5nZXRCeXRlcyly''@;'; put 'put ''ZXR1cm4gdGhpcy5yYW5kLmdldEJ5dGVzKHcpO2Zvcih2YXIgUD1uZXcgVWludDhBcnJheSh3KSxGPTA7RjxQLmxlbmd0aDtGKyspUFtGXT10aGlzLnJhbmQuZ2V0Qnl0ZSgpO3JldHVybiBQfSwib2JqZWN0Ij09dHlwZW9mIHNlbGYpc2VsZi5jcnlwdG8mJnNlbGYuY3J5cHRvLmdldFJhbmRv''@;'; put 'put ''bVZhbHVlcz9fLnByb3RvdHlwZS5fcmFuZD1mdW5jdGlvbih3KXt2YXIgUD1uZXcgVWludDhBcnJheSh3KTtyZXR1cm4gc2VsZi5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKFApLFB9OnNlbGYubXNDcnlwdG8mJnNlbGYubXNDcnlwdG8uZ2V0UmFuZG9tVmFsdWVzP18ucHJvdG90eXBlLl9yYW5k''@;'; put 'put ''PWZ1bmN0aW9uKHcpe3ZhciBQPW5ldyBVaW50OEFycmF5KHcpO3JldHVybiBzZWxmLm1zQ3J5cHRvLmdldFJhbmRvbVZhbHVlcyhQKSxQfToib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmKF8ucHJvdG90eXBlLl9yYW5kPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJOb3QgaW1wbGVtZW50''@;'; put 'put ''ZWQgeWV0Iil9KTtlbHNlIHRyeXt2YXIgZz15KDkyMTQpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBnLnJhbmRvbUJ5dGVzKXRocm93IG5ldyBFcnJvcigiTm90IHN1cHBvcnRlZCIpO18ucHJvdG90eXBlLl9yYW5kPWZ1bmN0aW9uKHcpe3JldHVybiBnLnJhbmRvbUJ5dGVzKHcpfX1jYXRjaHt9''@;'; put 'put ''fSw0NDk3Oih1ZSxYLHkpPT57dmFyIEk9eSg5NTA5KS5CdWZmZXI7ZnVuY3Rpb24gXyhPKXtJLmlzQnVmZmVyKE8pfHwoTz1JLmZyb20oTykpO2Zvcih2YXIgej1PLmxlbmd0aC80fDAsTj1uZXcgQXJyYXkoeiksTD0wO0w8ejtMKyspTltMXT1PLnJlYWRVSW50MzJCRSg0KkwpO3JldHVybiBO''@;'; put 'put ''fWZ1bmN0aW9uIGcoTyl7Zm9yKDswPE8ubGVuZ3RoO08rKylPWzBdPTB9ZnVuY3Rpb24gQihPLHosTixMLEspe2Zvcih2YXIgbGUsbWUsX2UsVGUsVT1OWzBdLFc9TlsxXSxZPU5bMl0scT1OWzNdLGVlPU9bMF1eelswXSxKPU9bMV1eelsxXSxuZT1PWzJdXnpbMl0saWU9T1szXV56WzNdLFNl''@;'; put 'put ''PTQsamU9MTtqZTxLO2plKyspbGU9VVtlZT4+PjI0XV5XW0o+Pj4xNiYyNTVdXllbbmU+Pj44JjI1NV1ecVsyNTUmaWVdXnpbU2UrK10sbWU9VVtKPj4+MjRdXldbbmU+Pj4xNiYyNTVdXllbaWU+Pj44JjI1NV1ecVsyNTUmZWVdXnpbU2UrK10sX2U9VVtuZT4+PjI0XV5XW2llPj4+MTYmMjU1''@;'; put 'put ''XV5ZW2VlPj4+OCYyNTVdXnFbMjU1JkpdXnpbU2UrK10sVGU9VVtpZT4+PjI0XV5XW2VlPj4+MTYmMjU1XV5ZW0o+Pj44JjI1NV1ecVsyNTUmbmVdXnpbU2UrK10sZWU9bGUsSj1tZSxuZT1fZSxpZT1UZTtyZXR1cm4gbGU9KExbZWU+Pj4yNF08PDI0fExbSj4+PjE2JjI1NV08PDE2fExbbmU+''@;'; put 'put ''Pj44JjI1NV08PDh8TFsyNTUmaWVdKV56W1NlKytdLG1lPShMW0o+Pj4yNF08PDI0fExbbmU+Pj4xNiYyNTVdPDwxNnxMW2llPj4+OCYyNTVdPDw4fExbMjU1JmVlXSleeltTZSsrXSxfZT0oTFtuZT4+PjI0XTw8MjR8TFtpZT4+PjE2JjI1NV08PDE2fExbZWU+Pj44JjI1NV08PDh8TFsyNTUm''@;'; put 'put ''Sl0pXnpbU2UrK10sVGU9KExbaWU+Pj4yNF08PDI0fExbZWU+Pj4xNiYyNTVdPDwxNnxMW0o+Pj44JjI1NV08PDh8TFsyNTUmbmVdKV56W1NlKytdLFtsZT4+Pj0wLG1lPj4+PTAsX2U+Pj49MCxUZT4+Pj0wXX12YXIgdz1bMCwxLDIsNCw4LDE2LDMyLDY0LDEyOCwyNyw1NF0sUD1mdW5jdGlv''@;'; put 'put ''bigpe2Zvcih2YXIgTz1uZXcgQXJyYXkoMjU2KSx6PTA7ejwyNTY7eisrKU9bel09ejwxMjg/ejw8MTp6PDwxXjI4Mztmb3IodmFyIE49W10sTD1bXSxLPVtbXSxbXSxbXSxbXV0sVT1bW10sW10sW10sW11dLFc9MCxZPTAscT0wO3E8MjU2OysrcSl7dmFyIGVlPVleWTw8MV5ZPDwyXlk8PDNe''@;'; put 'put ''WTw8NDtOW1ddPWVlPWVlPj4+OF4yNTUmZWVeOTksTFtlZV09Vzt2YXIgSj1PW1ddLG5lPU9bSl0saWU9T1tuZV0sbGU9MjU3Kk9bZWVdXjE2ODQzMDA4KmVlO0tbMF1bV109bGU8PDI0fGxlPj4+OCxLWzFdW1ddPWxlPDwxNnxsZT4+PjE2LEtbMl1bV109bGU8PDh8bGU+Pj4yNCxLWzNdW1dd''@;'; put 'put ''PWxlLFVbMF1bZWVdPShsZT0xNjg0MzAwOSppZV42NTUzNypuZV4yNTcqSl4xNjg0MzAwOCpXKTw8MjR8bGU+Pj44LFVbMV1bZWVdPWxlPDwxNnxsZT4+PjE2LFVbMl1bZWVdPWxlPDw4fGxlPj4+MjQsVVszXVtlZV09bGUsMD09PVc/Vz1ZPTE6KFc9Sl5PW09bT1tpZV5KXV1dLFlePU9bT1tZ''@;'; put 'put ''XV0pfXJldHVybntTQk9YOk4sSU5WX1NCT1g6TCxTVUJfTUlYOkssSU5WX1NVQl9NSVg6VX19KCk7ZnVuY3Rpb24gRihPKXt0aGlzLl9rZXk9XyhPKSx0aGlzLl9yZXNldCgpfUYuYmxvY2tTaXplPTE2LEYua2V5U2l6ZT0zMixGLnByb3RvdHlwZS5ibG9ja1NpemU9Ri5ibG9ja1NpemUsRi5w''@;'; put 'put ''cm90b3R5cGUua2V5U2l6ZT1GLmtleVNpemUsRi5wcm90b3R5cGUuX3Jlc2V0PWZ1bmN0aW9uKCl7Zm9yKHZhciBPPXRoaXMuX2tleSx6PU8ubGVuZ3RoLE49eis2LEw9NCooTisxKSxLPVtdLFU9MDtVPHo7VSsrKUtbVV09T1tVXTtmb3IoVT16O1U8TDtVKyspe3ZhciBXPUtbVS0xXTtVJXo9''@;'; put 'put ''PTA/KFc9UC5TQk9YWyhXPVc8PDh8Vz4+PjI0KT4+PjI0XTw8MjR8UC5TQk9YW1c+Pj4xNiYyNTVdPDwxNnxQLlNCT1hbVz4+PjgmMjU1XTw8OHxQLlNCT1hbMjU1JlddLFdePXdbVS96fDBdPDwyNCk6ej42JiZVJXo9PTQmJihXPVAuU0JPWFtXPj4+MjRdPDwyNHxQLlNCT1hbVz4+PjE2JjI1''@;'; put 'put ''NV08PDE2fFAuU0JPWFtXPj4+OCYyNTVdPDw4fFAuU0JPWFsyNTUmV10pLEtbVV09S1tVLXpdXld9Zm9yKHZhciBZPVtdLHE9MDtxPEw7cSsrKXt2YXIgZWU9TC1xLEo9S1tlZS0ocSU0PzA6NCldO1lbcV09cTw0fHxlZTw9ND9KOlAuSU5WX1NVQl9NSVhbMF1bUC5TQk9YW0o+Pj4yNF1dXlAu''@;'; put 'put ''SU5WX1NVQl9NSVhbMV1bUC5TQk9YW0o+Pj4xNiYyNTVdXV5QLklOVl9TVUJfTUlYWzJdW1AuU0JPWFtKPj4+OCYyNTVdXV5QLklOVl9TVUJfTUlYWzNdW1AuU0JPWFsyNTUmSl1dfXRoaXMuX25Sb3VuZHM9Tix0aGlzLl9rZXlTY2hlZHVsZT1LLHRoaXMuX2ludktleVNjaGVkdWxlPVl9LEYu''@;'; put 'put ''cHJvdG90eXBlLmVuY3J5cHRCbG9ja1Jhdz1mdW5jdGlvbihPKXtyZXR1cm4gQihPPV8oTyksdGhpcy5fa2V5U2NoZWR1bGUsUC5TVUJfTUlYLFAuU0JPWCx0aGlzLl9uUm91bmRzKX0sRi5wcm90b3R5cGUuZW5jcnlwdEJsb2NrPWZ1bmN0aW9uKE8pe3ZhciB6PXRoaXMuZW5jcnlwdEJsb2Nr''@;'; put 'put ''UmF3KE8pLE49SS5hbGxvY1Vuc2FmZSgxNik7cmV0dXJuIE4ud3JpdGVVSW50MzJCRSh6WzBdLDApLE4ud3JpdGVVSW50MzJCRSh6WzFdLDQpLE4ud3JpdGVVSW50MzJCRSh6WzJdLDgpLE4ud3JpdGVVSW50MzJCRSh6WzNdLDEyKSxOfSxGLnByb3RvdHlwZS5kZWNyeXB0QmxvY2s9ZnVuY3Rp''@;'; put 'put ''b24oTyl7dmFyIHo9KE89XyhPKSlbMV07T1sxXT1PWzNdLE9bM109ejt2YXIgTj1CKE8sdGhpcy5faW52S2V5U2NoZWR1bGUsUC5JTlZfU1VCX01JWCxQLklOVl9TQk9YLHRoaXMuX25Sb3VuZHMpLEw9SS5hbGxvY1Vuc2FmZSgxNik7cmV0dXJuIEwud3JpdGVVSW50MzJCRShOWzBdLDApLEwu''@;'; put 'put ''d3JpdGVVSW50MzJCRShOWzNdLDQpLEwud3JpdGVVSW50MzJCRShOWzJdLDgpLEwud3JpdGVVSW50MzJCRShOWzFdLDEyKSxMfSxGLnByb3RvdHlwZS5zY3J1Yj1mdW5jdGlvbigpe2codGhpcy5fa2V5U2NoZWR1bGUpLGcodGhpcy5faW52S2V5U2NoZWR1bGUpLGcodGhpcy5fa2V5KX0sdWUu''@;'; put 'put ''ZXhwb3J0cy5BRVM9Rn0sNDg0ODoodWUsWCx5KT0+e3ZhciBJPXkoNDQ5NyksXz15KDk1MDkpLkJ1ZmZlcixnPXkoMTAyNyksQj15KDU3MTcpLHc9eSgzMjg4KSxQPXkoNzI5NSksRj15KDY4NSk7ZnVuY3Rpb24gTihMLEssVSxXKXtnLmNhbGwodGhpcyk7dmFyIFk9Xy5hbGxvYyg0LDApO3Ro''@;'; put 'put ''aXMuX2NpcGhlcj1uZXcgSS5BRVMoSyk7dmFyIHE9dGhpcy5fY2lwaGVyLmVuY3J5cHRCbG9jayhZKTt0aGlzLl9naGFzaD1uZXcgdyhxKSxVPWZ1bmN0aW9uIHooTCxLLFUpe2lmKDEyPT09Sy5sZW5ndGgpcmV0dXJuIEwuX2ZpbklEPV8uY29uY2F0KFtLLF8uZnJvbShbMCwwLDAsMV0pXSks''@;'; put 'put ''Xy5jb25jYXQoW0ssXy5mcm9tKFswLDAsMCwyXSldKTt2YXIgVz1uZXcgdyhVKSxZPUsubGVuZ3RoLHE9WSUxNjtXLnVwZGF0ZShLKSxxJiZXLnVwZGF0ZShfLmFsbG9jKHE9MTYtcSwwKSksVy51cGRhdGUoXy5hbGxvYyg4LDApKTt2YXIgZWU9OCpZLEo9Xy5hbGxvYyg4KTtKLndyaXRlVUlu''@;'; put 'put ''dEJFKGVlLDAsOCksVy51cGRhdGUoSiksTC5fZmluSUQ9Vy5zdGF0ZTt2YXIgbmU9Xy5mcm9tKEwuX2ZpbklEKTtyZXR1cm4gRihuZSksbmV9KHRoaXMsVSxxKSx0aGlzLl9wcmV2PV8uZnJvbShVKSx0aGlzLl9jYWNoZT1fLmFsbG9jVW5zYWZlKDApLHRoaXMuX3NlY0NhY2hlPV8uYWxsb2NV''@;'; put 'put ''bnNhZmUoMCksdGhpcy5fZGVjcnlwdD1XLHRoaXMuX2FsZW49MCx0aGlzLl9sZW49MCx0aGlzLl9tb2RlPUwsdGhpcy5fYXV0aFRhZz1udWxsLHRoaXMuX2NhbGxlZD0hMX1CKE4sZyksTi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihMKXtpZighdGhpcy5fY2FsbGVkJiZ0aGlzLl9hbGVu''@;'; put 'put ''KXt2YXIgSz0xNi10aGlzLl9hbGVuJTE2O0s8MTYmJihLPV8uYWxsb2MoSywwKSx0aGlzLl9naGFzaC51cGRhdGUoSykpfXRoaXMuX2NhbGxlZD0hMDt2YXIgVT10aGlzLl9tb2RlLmVuY3J5cHQodGhpcyxMKTtyZXR1cm4gdGhpcy5fZ2hhc2gudXBkYXRlKHRoaXMuX2RlY3J5cHQ/TDpVKSx0''@;'; put 'put ''aGlzLl9sZW4rPUwubGVuZ3RoLFV9LE4ucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe2lmKHRoaXMuX2RlY3J5cHQmJiF0aGlzLl9hdXRoVGFnKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgc3RhdGUgb3IgdW5hYmxlIHRvIGF1dGhlbnRpY2F0ZSBkYXRhIik7dmFyIEw9UCh0aGlz''@;'; put 'put ''Ll9naGFzaC5maW5hbCg4KnRoaXMuX2FsZW4sOCp0aGlzLl9sZW4pLHRoaXMuX2NpcGhlci5lbmNyeXB0QmxvY2sodGhpcy5fZmluSUQpKTtpZih0aGlzLl9kZWNyeXB0JiZmdW5jdGlvbiBPKEwsSyl7dmFyIFU9MDtMLmxlbmd0aCE9PUsubGVuZ3RoJiZVKys7Zm9yKHZhciBXPU1hdGgubWlu''@;'; put 'put ''KEwubGVuZ3RoLEsubGVuZ3RoKSxZPTA7WTxXOysrWSlVKz1MW1ldXktbWV07cmV0dXJuIFV9KEwsdGhpcy5fYXV0aFRhZykpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBzdGF0ZSBvciB1bmFibGUgdG8gYXV0aGVudGljYXRlIGRhdGEiKTt0aGlzLl9hdXRoVGFnPUwsdGhpcy5fY2lw''@;'; put 'put ''aGVyLnNjcnViKCl9LE4ucHJvdG90eXBlLmdldEF1dGhUYWc9ZnVuY3Rpb24oKXtpZih0aGlzLl9kZWNyeXB0fHwhXy5pc0J1ZmZlcih0aGlzLl9hdXRoVGFnKSl0aHJvdyBuZXcgRXJyb3IoIkF0dGVtcHRpbmcgdG8gZ2V0IGF1dGggdGFnIGluIHVuc3VwcG9ydGVkIHN0YXRlIik7cmV0dXJu''@;'; put 'put ''IHRoaXMuX2F1dGhUYWd9LE4ucHJvdG90eXBlLnNldEF1dGhUYWc9ZnVuY3Rpb24oSyl7aWYoIXRoaXMuX2RlY3J5cHQpdGhyb3cgbmV3IEVycm9yKCJBdHRlbXB0aW5nIHRvIHNldCBhdXRoIHRhZyBpbiB1bnN1cHBvcnRlZCBzdGF0ZSIpO3RoaXMuX2F1dGhUYWc9S30sTi5wcm90b3R5cGUu''@;'; put 'put ''c2V0QUFEPWZ1bmN0aW9uKEspe2lmKHRoaXMuX2NhbGxlZCl0aHJvdyBuZXcgRXJyb3IoIkF0dGVtcHRpbmcgdG8gc2V0IEFBRCBpbiB1bnN1cHBvcnRlZCBzdGF0ZSIpO3RoaXMuX2doYXNoLnVwZGF0ZShLKSx0aGlzLl9hbGVuKz1LLmxlbmd0aH0sdWUuZXhwb3J0cz1OfSw0Njk2Oih1ZSxY''@;'; put 'put ''LHkpPT57dmFyIEk9eSgxNDk0KSxfPXkoNjE5MyksZz15KDQ5NDYpO1guY3JlYXRlQ2lwaGVyPVguQ2lwaGVyPUkuY3JlYXRlQ2lwaGVyLFguY3JlYXRlQ2lwaGVyaXY9WC5DaXBoZXJpdj1JLmNyZWF0ZUNpcGhlcml2LFguY3JlYXRlRGVjaXBoZXI9WC5EZWNpcGhlcj1fLmNyZWF0ZURlY2lw''@;'; put 'put ''aGVyLFguY3JlYXRlRGVjaXBoZXJpdj1YLkRlY2lwaGVyaXY9Xy5jcmVhdGVEZWNpcGhlcml2LFgubGlzdENpcGhlcnM9WC5nZXRDaXBoZXJzPWZ1bmN0aW9uIEIoKXtyZXR1cm4gT2JqZWN0LmtleXMoZyl9fSw2MTkzOih1ZSxYLHkpPT57dmFyIEk9eSg0ODQ4KSxfPXkoOTUwOSkuQnVmZmVy''@;'; put 'put ''LGc9eSg0NSksQj15KDU5NjkpLHc9eSgxMDI3KSxQPXkoNDQ5NyksRj15KDMwNDgpO2Z1bmN0aW9uIHooVyxZLHEpe3cuY2FsbCh0aGlzKSx0aGlzLl9jYWNoZT1uZXcgTix0aGlzLl9sYXN0PXZvaWQgMCx0aGlzLl9jaXBoZXI9bmV3IFAuQUVTKFkpLHRoaXMuX3ByZXY9Xy5mcm9tKHEpLHRo''@;'; put 'put ''aXMuX21vZGU9Vyx0aGlzLl9hdXRvcGFkZGluZz0hMH1mdW5jdGlvbiBOKCl7dGhpcy5jYWNoZT1fLmFsbG9jVW5zYWZlKDApfWZ1bmN0aW9uIEsoVyxZLHEpe3ZhciBlZT1nW1cudG9Mb3dlckNhc2UoKV07aWYoIWVlKXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgc3VpdGUgdHlwZSIp''@;'; put 'put ''O2lmKCJzdHJpbmciPT10eXBlb2YgcSYmKHE9Xy5mcm9tKHEpKSwiR0NNIiE9PWVlLm1vZGUmJnEubGVuZ3RoIT09ZWUuaXYpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBpdiBsZW5ndGggIitxLmxlbmd0aCk7aWYoInN0cmluZyI9PXR5cGVvZiBZJiYoWT1fLmZyb20oWSkpLFkubGVu''@;'; put 'put ''Z3RoIT09ZWUua2V5LzgpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBrZXkgbGVuZ3RoICIrWS5sZW5ndGgpO3JldHVybiJzdHJlYW0iPT09ZWUudHlwZT9uZXcgQihlZS5tb2R1bGUsWSxxLCEwKToiYXV0aCI9PT1lZS50eXBlP25ldyBJKGVlLm1vZHVsZSxZLHEsITApOm5ldyB6KGVl''@;'; put 'put ''Lm1vZHVsZSxZLHEpfXkoNTcxNykoeix3KSx6LnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKFcpe3RoaXMuX2NhY2hlLmFkZChXKTtmb3IodmFyIFkscSxlZT1bXTtZPXRoaXMuX2NhY2hlLmdldCh0aGlzLl9hdXRvcGFkZGluZyk7KXE9dGhpcy5fbW9kZS5kZWNyeXB0KHRoaXMsWSksZWUu''@;'; put 'put ''cHVzaChxKTtyZXR1cm4gXy5jb25jYXQoZWUpfSx6LnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXt2YXIgVz10aGlzLl9jYWNoZS5mbHVzaCgpO2lmKHRoaXMuX2F1dG9wYWRkaW5nKXJldHVybiBmdW5jdGlvbiBMKFcpe3ZhciBZPVdbMTVdO2lmKFk8MXx8WT4xNil0aHJvdyBuZXcgRXJy''@;'; put 'put ''b3IoInVuYWJsZSB0byBkZWNyeXB0IGRhdGEiKTtmb3IodmFyIHE9LTE7KytxPFk7KWlmKFdbcSsoMTYtWSldIT09WSl0aHJvdyBuZXcgRXJyb3IoInVuYWJsZSB0byBkZWNyeXB0IGRhdGEiKTtpZigxNiE9PVkpcmV0dXJuIFcuc2xpY2UoMCwxNi1ZKX0odGhpcy5fbW9kZS5kZWNyeXB0KHRo''@;'; put 'put ''aXMsVykpO2lmKFcpdGhyb3cgbmV3IEVycm9yKCJkYXRhIG5vdCBtdWx0aXBsZSBvZiBibG9jayBsZW5ndGgiKX0sei5wcm90b3R5cGUuc2V0QXV0b1BhZGRpbmc9ZnVuY3Rpb24oVyl7cmV0dXJuIHRoaXMuX2F1dG9wYWRkaW5nPSEhVyx0aGlzfSxOLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24o''@;'; put 'put ''Vyl7dGhpcy5jYWNoZT1fLmNvbmNhdChbdGhpcy5jYWNoZSxXXSl9LE4ucHJvdG90eXBlLmdldD1mdW5jdGlvbihXKXt2YXIgWTtpZihXKXtpZih0aGlzLmNhY2hlLmxlbmd0aD4xNilyZXR1cm4gWT10aGlzLmNhY2hlLnNsaWNlKDAsMTYpLHRoaXMuY2FjaGU9dGhpcy5jYWNoZS5zbGljZSgx''@;'; put 'put ''NiksWX1lbHNlIGlmKHRoaXMuY2FjaGUubGVuZ3RoPj0xNilyZXR1cm4gWT10aGlzLmNhY2hlLnNsaWNlKDAsMTYpLHRoaXMuY2FjaGU9dGhpcy5jYWNoZS5zbGljZSgxNiksWTtyZXR1cm4gbnVsbH0sTi5wcm90b3R5cGUuZmx1c2g9ZnVuY3Rpb24oKXtpZih0aGlzLmNhY2hlLmxlbmd0aCly''@;'; put 'put ''ZXR1cm4gdGhpcy5jYWNoZX0sWC5jcmVhdGVEZWNpcGhlcj1mdW5jdGlvbiBVKFcsWSl7dmFyIHE9Z1tXLnRvTG93ZXJDYXNlKCldO2lmKCFxKXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgc3VpdGUgdHlwZSIpO3ZhciBlZT1GKFksITEscS5rZXkscS5pdik7cmV0dXJuIEsoVyxlZS5r''@;'; put 'put ''ZXksZWUuaXYpfSxYLmNyZWF0ZURlY2lwaGVyaXY9S30sMTQ5NDoodWUsWCx5KT0+e3ZhciBJPXkoNDUpLF89eSg0ODQ4KSxnPXkoOTUwOSkuQnVmZmVyLEI9eSg1OTY5KSx3PXkoMTAyNyksUD15KDQ0OTcpLEY9eSgzMDQ4KTtmdW5jdGlvbiB6KFcsWSxxKXt3LmNhbGwodGhpcyksdGhpcy5f''@;'; put 'put ''Y2FjaGU9bmV3IEwsdGhpcy5fY2lwaGVyPW5ldyBQLkFFUyhZKSx0aGlzLl9wcmV2PWcuZnJvbShxKSx0aGlzLl9tb2RlPVcsdGhpcy5fYXV0b3BhZGRpbmc9ITB9eSg1NzE3KSh6LHcpLHoucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oVyl7dGhpcy5fY2FjaGUuYWRkKFcpO2Zvcih2YXIg''@;'; put 'put ''WSxxLGVlPVtdO1k9dGhpcy5fY2FjaGUuZ2V0KCk7KXE9dGhpcy5fbW9kZS5lbmNyeXB0KHRoaXMsWSksZWUucHVzaChxKTtyZXR1cm4gZy5jb25jYXQoZWUpfTt2YXIgTj1nLmFsbG9jKDE2LDE2KTtmdW5jdGlvbiBMKCl7dGhpcy5jYWNoZT1nLmFsbG9jVW5zYWZlKDApfWZ1bmN0aW9uIEso''@;'; put 'put ''VyxZLHEpe3ZhciBlZT1JW1cudG9Mb3dlckNhc2UoKV07aWYoIWVlKXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgc3VpdGUgdHlwZSIpO2lmKCJzdHJpbmciPT10eXBlb2YgWSYmKFk9Zy5mcm9tKFkpKSxZLmxlbmd0aCE9PWVlLmtleS84KXRocm93IG5ldyBUeXBlRXJyb3IoImludmFs''@;'; put 'put ''aWQga2V5IGxlbmd0aCAiK1kubGVuZ3RoKTtpZigic3RyaW5nIj09dHlwZW9mIHEmJihxPWcuZnJvbShxKSksIkdDTSIhPT1lZS5tb2RlJiZxLmxlbmd0aCE9PWVlLml2KXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgaXYgbGVuZ3RoICIrcS5sZW5ndGgpO3JldHVybiJzdHJlYW0iPT09''@;'; put 'put ''ZWUudHlwZT9uZXcgQihlZS5tb2R1bGUsWSxxKToiYXV0aCI9PT1lZS50eXBlP25ldyBfKGVlLm1vZHVsZSxZLHEpOm5ldyB6KGVlLm1vZHVsZSxZLHEpfXoucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3ZhciBXPXRoaXMuX2NhY2hlLmZsdXNoKCk7aWYodGhpcy5fYXV0b3BhZGRpbmcp''@;'; put 'put ''cmV0dXJuIFc9dGhpcy5fbW9kZS5lbmNyeXB0KHRoaXMsVyksdGhpcy5fY2lwaGVyLnNjcnViKCksVztpZighVy5lcXVhbHMoTikpdGhyb3cgdGhpcy5fY2lwaGVyLnNjcnViKCksbmV3IEVycm9yKCJkYXRhIG5vdCBtdWx0aXBsZSBvZiBibG9jayBsZW5ndGgiKX0sei5wcm90b3R5cGUuc2V0''@;'; put 'put ''QXV0b1BhZGRpbmc9ZnVuY3Rpb24oVyl7cmV0dXJuIHRoaXMuX2F1dG9wYWRkaW5nPSEhVyx0aGlzfSxMLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oVyl7dGhpcy5jYWNoZT1nLmNvbmNhdChbdGhpcy5jYWNoZSxXXSl9LEwucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe2lmKHRoaXMuY2FjaGUu''@;'; put 'put ''bGVuZ3RoPjE1KXt2YXIgVz10aGlzLmNhY2hlLnNsaWNlKDAsMTYpO3JldHVybiB0aGlzLmNhY2hlPXRoaXMuY2FjaGUuc2xpY2UoMTYpLFd9cmV0dXJuIG51bGx9LEwucHJvdG90eXBlLmZsdXNoPWZ1bmN0aW9uKCl7Zm9yKHZhciBXPTE2LXRoaXMuY2FjaGUubGVuZ3RoLFk9Zy5hbGxvY1Vu''@;'; put 'put ''c2FmZShXKSxxPS0xOysrcTxXOylZLndyaXRlVUludDgoVyxxKTtyZXR1cm4gZy5jb25jYXQoW3RoaXMuY2FjaGUsWV0pfSxYLmNyZWF0ZUNpcGhlcml2PUssWC5jcmVhdGVDaXBoZXI9ZnVuY3Rpb24gVShXLFkpe3ZhciBxPUlbVy50b0xvd2VyQ2FzZSgpXTtpZighcSl0aHJvdyBuZXcgVHlw''@;'; put 'put ''ZUVycm9yKCJpbnZhbGlkIHN1aXRlIHR5cGUiKTt2YXIgZWU9RihZLCExLHEua2V5LHEuaXYpO3JldHVybiBLKFcsZWUua2V5LGVlLml2KX19LDMyODg6KHVlLFgseSk9Pnt2YXIgST15KDk1MDkpLkJ1ZmZlcixfPUkuYWxsb2MoMTYsMCk7ZnVuY3Rpb24gQihQKXt2YXIgRj1JLmFsbG9jVW5z''@;'; put 'put ''YWZlKDE2KTtyZXR1cm4gRi53cml0ZVVJbnQzMkJFKFBbMF0+Pj4wLDApLEYud3JpdGVVSW50MzJCRShQWzFdPj4+MCw0KSxGLndyaXRlVUludDMyQkUoUFsyXT4+PjAsOCksRi53cml0ZVVJbnQzMkJFKFBbM10+Pj4wLDEyKSxGfWZ1bmN0aW9uIHcoUCl7dGhpcy5oPVAsdGhpcy5zdGF0ZT1J''@;'; put 'put ''LmFsbG9jKDE2LDApLHRoaXMuY2FjaGU9SS5hbGxvY1Vuc2FmZSgwKX13LnByb3RvdHlwZS5naGFzaD1mdW5jdGlvbihQKXtmb3IodmFyIEY9LTE7KytGPFAubGVuZ3RoOyl0aGlzLnN0YXRlW0ZdXj1QW0ZdO3RoaXMuX211bHRpcGx5KCl9LHcucHJvdG90eXBlLl9tdWx0aXBseT1mdW5jdGlv''@;'; put 'put ''bigpe2Zvcih2YXIgTyxOLFA9ZnVuY3Rpb24gZyhQKXtyZXR1cm5bUC5yZWFkVUludDMyQkUoMCksUC5yZWFkVUludDMyQkUoNCksUC5yZWFkVUludDMyQkUoOCksUC5yZWFkVUludDMyQkUoMTIpXX0odGhpcy5oKSxGPVswLDAsMCwwXSxMPS0xOysrTDwxMjg7KXtmb3IoISEodGhpcy5zdGF0''@;'; put 'put ''ZVt+fihMLzgpXSYxPDw3LUwlOCkmJihGWzBdXj1QWzBdLEZbMV1ePVBbMV0sRlsyXV49UFsyXSxGWzNdXj1QWzNdKSxOPSEhKDEmUFszXSksTz0zO08+MDtPLS0pUFtPXT1QW09dPj4+MXwoMSZQW08tMV0pPDwzMTtQWzBdPVBbMF0+Pj4xLE4mJihQWzBdPS01MjAwOTM2OTZeUFswXSl9dGhp''@;'; put 'put ''cy5zdGF0ZT1CKEYpfSx3LnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oUCl7dGhpcy5jYWNoZT1JLmNvbmNhdChbdGhpcy5jYWNoZSxQXSk7Zm9yKHZhciBGO3RoaXMuY2FjaGUubGVuZ3RoPj0xNjspRj10aGlzLmNhY2hlLnNsaWNlKDAsMTYpLHRoaXMuY2FjaGU9dGhpcy5jYWNoZS5zbGlj''@;'; put 'put ''ZSgxNiksdGhpcy5naGFzaChGKX0sdy5wcm90b3R5cGUuZmluYWw9ZnVuY3Rpb24oUCxGKXtyZXR1cm4gdGhpcy5jYWNoZS5sZW5ndGgmJnRoaXMuZ2hhc2goSS5jb25jYXQoW3RoaXMuY2FjaGUsX10sMTYpKSx0aGlzLmdoYXNoKEIoWzAsUCwwLEZdKSksdGhpcy5zdGF0ZX0sdWUuZXhwb3J0''@;'; put 'put ''cz13fSw2ODU6dWU9Pnt1ZS5leHBvcnRzPWZ1bmN0aW9uIFgoeSl7Zm9yKHZhciBfLEk9eS5sZW5ndGg7SS0tOyl7aWYoMjU1IT09KF89eS5yZWFkVUludDgoSSkpKXtfKysseS53cml0ZVVJbnQ4KF8sSSk7YnJlYWt9eS53cml0ZVVJbnQ4KDAsSSl9fX0sNTI5MjoodWUsWCx5KT0+e3ZhciBJ''@;'; put 'put ''PXkoNzI5NSk7WC5lbmNyeXB0PWZ1bmN0aW9uKF8sZyl7dmFyIEI9SShnLF8uX3ByZXYpO3JldHVybiBfLl9wcmV2PV8uX2NpcGhlci5lbmNyeXB0QmxvY2soQiksXy5fcHJldn0sWC5kZWNyeXB0PWZ1bmN0aW9uKF8sZyl7dmFyIEI9Xy5fcHJldjtfLl9wcmV2PWc7dmFyIHc9Xy5fY2lwaGVy''@;'; put 'put ''LmRlY3J5cHRCbG9jayhnKTtyZXR1cm4gSSh3LEIpfX0sNjMxMToodWUsWCx5KT0+e3ZhciBJPXkoOTUwOSkuQnVmZmVyLF89eSg3Mjk1KTtmdW5jdGlvbiBnKEIsdyxQKXt2YXIgRj13Lmxlbmd0aCxPPV8odyxCLl9jYWNoZSk7cmV0dXJuIEIuX2NhY2hlPUIuX2NhY2hlLnNsaWNlKEYpLEIu''@;'; put 'put ''X3ByZXY9SS5jb25jYXQoW0IuX3ByZXYsUD93Ok9dKSxPfVguZW5jcnlwdD1mdW5jdGlvbihCLHcsUCl7Zm9yKHZhciBPLEY9SS5hbGxvY1Vuc2FmZSgwKTt3Lmxlbmd0aDspe2lmKDA9PT1CLl9jYWNoZS5sZW5ndGgmJihCLl9jYWNoZT1CLl9jaXBoZXIuZW5jcnlwdEJsb2NrKEIuX3ByZXYp''@;'; put 'put ''LEIuX3ByZXY9SS5hbGxvY1Vuc2FmZSgwKSksIShCLl9jYWNoZS5sZW5ndGg8PXcubGVuZ3RoKSl7Rj1JLmNvbmNhdChbRixnKEIsdyxQKV0pO2JyZWFrfUY9SS5jb25jYXQoW0YsZyhCLHcuc2xpY2UoMCxPPUIuX2NhY2hlLmxlbmd0aCksUCldKSx3PXcuc2xpY2UoTyl9cmV0dXJuIEZ9fSwx''@;'; put 'put ''NTEwOih1ZSxYLHkpPT57dmFyIEk9eSg5NTA5KS5CdWZmZXI7ZnVuY3Rpb24gXyhCLHcsUCl7Zm9yKHZhciBMLEssTz0tMSxOPTA7KytPPDg7KU4rPSgxMjgmKEs9Qi5fY2lwaGVyLmVuY3J5cHRCbG9jayhCLl9wcmV2KVswXV4oTD13JjE8PDctTz8xMjg6MCkpKT4+TyU4LEIuX3ByZXY9ZyhC''@;'; put 'put ''Ll9wcmV2LFA/TDpLKTtyZXR1cm4gTn1mdW5jdGlvbiBnKEIsdyl7dmFyIFA9Qi5sZW5ndGgsRj0tMSxPPUkuYWxsb2NVbnNhZmUoQi5sZW5ndGgpO2ZvcihCPUkuY29uY2F0KFtCLEkuZnJvbShbd10pXSk7KytGPFA7KU9bRl09QltGXTw8MXxCW0YrMV0+Pjc7cmV0dXJuIE99WC5lbmNyeXB0''@;'; put 'put ''PWZ1bmN0aW9uKEIsdyxQKXtmb3IodmFyIEY9dy5sZW5ndGgsTz1JLmFsbG9jVW5zYWZlKEYpLHo9LTE7Kyt6PEY7KU9bel09XyhCLHdbel0sUCk7cmV0dXJuIE99fSwxOTY0Oih1ZSxYLHkpPT57dmFyIEk9eSg5NTA5KS5CdWZmZXI7ZnVuY3Rpb24gXyhnLEIsdyl7dmFyIEY9Zy5fY2lwaGVy''@;'; put 'put ''LmVuY3J5cHRCbG9jayhnLl9wcmV2KVswXV5CO3JldHVybiBnLl9wcmV2PUkuY29uY2F0KFtnLl9wcmV2LnNsaWNlKDEpLEkuZnJvbShbdz9COkZdKV0pLEZ9WC5lbmNyeXB0PWZ1bmN0aW9uKGcsQix3KXtmb3IodmFyIFA9Qi5sZW5ndGgsRj1JLmFsbG9jVW5zYWZlKFApLE89LTE7KytPPFA7''@;'; put 'put ''KUZbT109XyhnLEJbT10sdyk7cmV0dXJuIEZ9fSw2MDA5Oih1ZSxYLHkpPT57dmFyIEk9eSg3Mjk1KSxfPXkoOTUwOSkuQnVmZmVyLGc9eSg2ODUpO2Z1bmN0aW9uIEIoUCl7dmFyIEY9UC5fY2lwaGVyLmVuY3J5cHRCbG9ja1JhdyhQLl9wcmV2KTtyZXR1cm4gZyhQLl9wcmV2KSxGfVguZW5j''@;'; put 'put ''cnlwdD1mdW5jdGlvbihQLEYpe3ZhciBPPU1hdGguY2VpbChGLmxlbmd0aC8xNiksej1QLl9jYWNoZS5sZW5ndGg7UC5fY2FjaGU9Xy5jb25jYXQoW1AuX2NhY2hlLF8uYWxsb2NVbnNhZmUoMTYqTyldKTtmb3IodmFyIE49MDtOPE87TisrKXt2YXIgTD1CKFApLEs9eisxNipOO1AuX2NhY2hl''@;'; put 'put ''LndyaXRlVUludDMyQkUoTFswXSxLKzApLFAuX2NhY2hlLndyaXRlVUludDMyQkUoTFsxXSxLKzQpLFAuX2NhY2hlLndyaXRlVUludDMyQkUoTFsyXSxLKzgpLFAuX2NhY2hlLndyaXRlVUludDMyQkUoTFszXSxLKzEyKX12YXIgVT1QLl9jYWNoZS5zbGljZSgwLEYubGVuZ3RoKTtyZXR1cm4g''@;'; put 'put ''UC5fY2FjaGU9UC5fY2FjaGUuc2xpY2UoRi5sZW5ndGgpLEkoRixVKX19LDEwODQ6KHVlLFgpPT57WC5lbmNyeXB0PWZ1bmN0aW9uKHksSSl7cmV0dXJuIHkuX2NpcGhlci5lbmNyeXB0QmxvY2soSSl9LFguZGVjcnlwdD1mdW5jdGlvbih5LEkpe3JldHVybiB5Ll9jaXBoZXIuZGVjcnlwdEJs''@;'; put 'put ''b2NrKEkpfX0sNDU6KHVlLFgseSk9Pnt2YXIgST17RUNCOnkoMTA4NCksQ0JDOnkoNTI5MiksQ0ZCOnkoNjMxMSksQ0ZCODp5KDE5NjQpLENGQjE6eSgxNTEwKSxPRkI6eSg4ODYxKSxDVFI6eSg2MDA5KSxHQ006eSg2MDA5KX0sXz15KDQ5NDYpO2Zvcih2YXIgZyBpbiBfKV9bZ10ubW9kdWxl''@;'; put 'put ''PUlbX1tnXS5tb2RlXTt1ZS5leHBvcnRzPV99LDg4NjE6KHVlLFgseSk9Pnt2YXIgST15KDg3NjQpLkJ1ZmZlcixfPXkoNzI5NSk7ZnVuY3Rpb24gZyhCKXtyZXR1cm4gQi5fcHJldj1CLl9jaXBoZXIuZW5jcnlwdEJsb2NrKEIuX3ByZXYpLEIuX3ByZXZ9WC5lbmNyeXB0PWZ1bmN0aW9uKEIs''@;'; put 'put ''dyl7Zm9yKDtCLl9jYWNoZS5sZW5ndGg8dy5sZW5ndGg7KUIuX2NhY2hlPUkuY29uY2F0KFtCLl9jYWNoZSxnKEIpXSk7dmFyIFA9Qi5fY2FjaGUuc2xpY2UoMCx3Lmxlbmd0aCk7cmV0dXJuIEIuX2NhY2hlPUIuX2NhY2hlLnNsaWNlKHcubGVuZ3RoKSxfKHcsUCl9fSw1OTY5Oih1ZSxYLHkp''@;'; put 'put ''PT57dmFyIEk9eSg0NDk3KSxfPXkoOTUwOSkuQnVmZmVyLGc9eSgxMDI3KTtmdW5jdGlvbiB3KFAsRixPLHope2cuY2FsbCh0aGlzKSx0aGlzLl9jaXBoZXI9bmV3IEkuQUVTKEYpLHRoaXMuX3ByZXY9Xy5mcm9tKE8pLHRoaXMuX2NhY2hlPV8uYWxsb2NVbnNhZmUoMCksdGhpcy5fc2VjQ2Fj''@;'; put 'put ''aGU9Xy5hbGxvY1Vuc2FmZSgwKSx0aGlzLl9kZWNyeXB0PXosdGhpcy5fbW9kZT1QfXkoNTcxNykodyxnKSx3LnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKFApe3JldHVybiB0aGlzLl9tb2RlLmVuY3J5cHQodGhpcyxQLHRoaXMuX2RlY3J5cHQpfSx3LnByb3RvdHlwZS5fZmluYWw9ZnVu''@;'; put 'put ''Y3Rpb24oKXt0aGlzLl9jaXBoZXIuc2NydWIoKX0sdWUuZXhwb3J0cz13fSwzNjE0Oih1ZSxYLHkpPT57dmFyIEk9eSg3NjY3KSxfPXkoNDY5NiksZz15KDQ1KSxCPXkoOTcxNSksdz15KDMwNDgpO2Z1bmN0aW9uIE8oTCxLLFUpe2lmKEw9TC50b0xvd2VyQ2FzZSgpLGdbTF0pcmV0dXJuIF8u''@;'; put 'put ''Y3JlYXRlQ2lwaGVyaXYoTCxLLFUpO2lmKEJbTF0pcmV0dXJuIG5ldyBJKHtrZXk6SyxpdjpVLG1vZGU6TH0pO3Rocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgc3VpdGUgdHlwZSIpfWZ1bmN0aW9uIHooTCxLLFUpe2lmKEw9TC50b0xvd2VyQ2FzZSgpLGdbTF0pcmV0dXJuIF8uY3JlYXRl''@;'; put 'put ''RGVjaXBoZXJpdihMLEssVSk7aWYoQltMXSlyZXR1cm4gbmV3IEkoe2tleTpLLGl2OlUsbW9kZTpMLGRlY3J5cHQ6ITB9KTt0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIHN1aXRlIHR5cGUiKX1YLmNyZWF0ZUNpcGhlcj1YLkNpcGhlcj1mdW5jdGlvbiBQKEwsSyl7dmFyIFUsVztpZihM''@;'; put 'put ''PUwudG9Mb3dlckNhc2UoKSxnW0xdKVU9Z1tMXS5rZXksVz1nW0xdLml2O2Vsc2V7aWYoIUJbTF0pdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBzdWl0ZSB0eXBlIik7VT04KkJbTF0ua2V5LFc9QltMXS5pdn12YXIgWT13KEssITEsVSxXKTtyZXR1cm4gTyhMLFkua2V5LFkuaXYpfSxY''@;'; put 'put ''LmNyZWF0ZUNpcGhlcml2PVguQ2lwaGVyaXY9TyxYLmNyZWF0ZURlY2lwaGVyPVguRGVjaXBoZXI9ZnVuY3Rpb24gRihMLEspe3ZhciBVLFc7aWYoTD1MLnRvTG93ZXJDYXNlKCksZ1tMXSlVPWdbTF0ua2V5LFc9Z1tMXS5pdjtlbHNle2lmKCFCW0xdKXRocm93IG5ldyBUeXBlRXJyb3IoImlu''@;'; put 'put ''dmFsaWQgc3VpdGUgdHlwZSIpO1U9OCpCW0xdLmtleSxXPUJbTF0uaXZ9dmFyIFk9dyhLLCExLFUsVyk7cmV0dXJuIHooTCxZLmtleSxZLml2KX0sWC5jcmVhdGVEZWNpcGhlcml2PVguRGVjaXBoZXJpdj16LFgubGlzdENpcGhlcnM9WC5nZXRDaXBoZXJzPWZ1bmN0aW9uIE4oKXtyZXR1cm4g''@;'; put 'put ''T2JqZWN0LmtleXMoQikuY29uY2F0KF8uZ2V0Q2lwaGVycygpKX19LDc2Njc6KHVlLFgseSk9Pnt2YXIgST15KDEwMjcpLF89eSg1MjUxKSxnPXkoNTcxNyksQj15KDk1MDkpLkJ1ZmZlcix3PXsiZGVzLWVkZTMtY2JjIjpfLkNCQy5pbnN0YW50aWF0ZShfLkVERSksImRlcy1lZGUzIjpfLkVE''@;'; put 'put ''RSwiZGVzLWVkZS1jYmMiOl8uQ0JDLmluc3RhbnRpYXRlKF8uRURFKSwiZGVzLWVkZSI6Xy5FREUsImRlcy1jYmMiOl8uQ0JDLmluc3RhbnRpYXRlKF8uREVTKSwiZGVzLWVjYiI6Xy5ERVN9O2Z1bmN0aW9uIFAoRil7SS5jYWxsKHRoaXMpO3ZhciBOLE89Ri5tb2RlLnRvTG93ZXJDYXNlKCks''@;'; put 'put ''ej13W09dO049Ri5kZWNyeXB0PyJkZWNyeXB0IjoiZW5jcnlwdCI7dmFyIEw9Ri5rZXk7Qi5pc0J1ZmZlcihMKXx8KEw9Qi5mcm9tKEwpKSwoImRlcy1lZGUiPT09T3x8ImRlcy1lZGUtY2JjIj09PU8pJiYoTD1CLmNvbmNhdChbTCxMLnNsaWNlKDAsOCldKSk7dmFyIEs9Ri5pdjtCLmlzQnVm''@;'; put 'put ''ZmVyKEspfHwoSz1CLmZyb20oSykpLHRoaXMuX2Rlcz16LmNyZWF0ZSh7a2V5OkwsaXY6Syx0eXBlOk59KX13LmRlcz13WyJkZXMtY2JjIl0sdy5kZXMzPXdbImRlcy1lZGUzLWNiYyJdLHVlLmV4cG9ydHM9UCxnKFAsSSksUC5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihGKXtyZXR1cm4g''@;'; put 'put ''Qi5mcm9tKHRoaXMuX2Rlcy51cGRhdGUoRikpfSxQLnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXtyZXR1cm4gQi5mcm9tKHRoaXMuX2Rlcy5maW5hbCgpKX19LDk3MTU6KHVlLFgpPT57WFsiZGVzLWVjYiJdPXtrZXk6OCxpdjowfSxYWyJkZXMtY2JjIl09WC5kZXM9e2tleTo4LGl2Ojh9''@;'; put 'put ''LFhbImRlcy1lZGUzLWNiYyJdPVguZGVzMz17a2V5OjI0LGl2Ojh9LFhbImRlcy1lZGUzIl09e2tleToyNCxpdjowfSxYWyJkZXMtZWRlLWNiYyJdPXtrZXk6MTYsaXY6OH0sWFsiZGVzLWVkZSJdPXtrZXk6MTYsaXY6MH19LDM2NjM6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgz''@;'; put 'put ''NTUwKSxfPXkoMTc5OCksZz15KDk1MDkpLkJ1ZmZlcjtmdW5jdGlvbiBCKEYpe3ZhciB6LE89Ri5tb2R1bHVzLmJ5dGVMZW5ndGgoKTtkb3t6PW5ldyBJKF8oTykpfXdoaWxlKHouY21wKEYubW9kdWx1cyk+PTB8fCF6LnVtb2QoRi5wcmltZTEpfHwhei51bW9kKEYucHJpbWUyKSk7cmV0dXJu''@;'; put 'put ''IHp9ZnVuY3Rpb24gUChGLE8pe3ZhciB6PWZ1bmN0aW9uIHcoRil7dmFyIE89QihGKTtyZXR1cm57YmxpbmRlcjpPLnRvUmVkKEkubW9udChGLm1vZHVsdXMpKS5yZWRQb3cobmV3IEkoRi5wdWJsaWNFeHBvbmVudCkpLmZyb21SZWQoKSx1bmJsaW5kZXI6Ty5pbnZtKEYubW9kdWx1cyl9fShP''@;'; put 'put ''KSxOPU8ubW9kdWx1cy5ieXRlTGVuZ3RoKCksTD1uZXcgSShGKS5tdWwoei5ibGluZGVyKS51bW9kKE8ubW9kdWx1cyksSz1MLnRvUmVkKEkubW9udChPLnByaW1lMSkpLFU9TC50b1JlZChJLm1vbnQoTy5wcmltZTIpKSxXPU8uY29lZmZpY2llbnQsWT1PLnByaW1lMSxxPU8ucHJpbWUyLGVl''@;'; put 'put ''PUsucmVkUG93KE8uZXhwb25lbnQxKS5mcm9tUmVkKCksSj1VLnJlZFBvdyhPLmV4cG9uZW50MikuZnJvbVJlZCgpLG5lPWVlLmlzdWIoSikuaW11bChXKS51bW9kKFkpLmltdWwocSk7cmV0dXJuIEouaWFkZChuZSkuaW11bCh6LnVuYmxpbmRlcikudW1vZChPLm1vZHVsdXMpLnRvQXJyYXlM''@;'; put 'put ''aWtlKGcsImJlIixOKX1QLmdldHI9Qix1ZS5leHBvcnRzPVB9LDYwNDI6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz15KDUyMDcpfSw0NzQzOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoOTUwOSkuQnVmZmVyLF89eSgzNDgyKSxnPXkoMzg3MiksQj15KDU3MTcp''@;'; put 'put ''LHc9eSgyOTU3KSxQPXkoNzc1MyksRj15KDUyMDcpO2Z1bmN0aW9uIE8oSyl7Zy5Xcml0YWJsZS5jYWxsKHRoaXMpO3ZhciBVPUZbS107aWYoIVUpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIG1lc3NhZ2UgZGlnZXN0Iik7dGhpcy5faGFzaFR5cGU9VS5oYXNoLHRoaXMuX2hhc2g9XyhVLmhh''@;'; put 'put ''c2gpLHRoaXMuX3RhZz1VLmlkLHRoaXMuX3NpZ25UeXBlPVUuc2lnbn1mdW5jdGlvbiB6KEspe2cuV3JpdGFibGUuY2FsbCh0aGlzKTt2YXIgVT1GW0tdO2lmKCFVKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBtZXNzYWdlIGRpZ2VzdCIpO3RoaXMuX2hhc2g9XyhVLmhhc2gpLHRoaXMuX3Rh''@;'; put 'put ''Zz1VLmlkLHRoaXMuX3NpZ25UeXBlPVUuc2lnbn1mdW5jdGlvbiBOKEspe3JldHVybiBuZXcgTyhLKX1mdW5jdGlvbiBMKEspe3JldHVybiBuZXcgeihLKX1PYmplY3Qua2V5cyhGKS5mb3JFYWNoKGZ1bmN0aW9uKEspe0ZbS10uaWQ9SS5mcm9tKEZbS10uaWQsImhleCIpLEZbSy50b0xvd2Vy''@;'; put 'put ''Q2FzZSgpXT1GW0tdfSksQihPLGcuV3JpdGFibGUpLE8ucHJvdG90eXBlLl93cml0ZT1mdW5jdGlvbihVLFcsWSl7dGhpcy5faGFzaC51cGRhdGUoVSksWSgpfSxPLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oVSxXKXtyZXR1cm4gdGhpcy5faGFzaC51cGRhdGUoInN0cmluZyI9PXR5cGVv''@;'; put 'put ''ZiBVP0kuZnJvbShVLFcpOlUpLHRoaXN9LE8ucHJvdG90eXBlLnNpZ249ZnVuY3Rpb24oVSxXKXt0aGlzLmVuZCgpO3ZhciBZPXRoaXMuX2hhc2guZGlnZXN0KCkscT13KFksVSx0aGlzLl9oYXNoVHlwZSx0aGlzLl9zaWduVHlwZSx0aGlzLl90YWcpO3JldHVybiBXP3EudG9TdHJpbmcoVyk6''@;'; put 'put ''cX0sQih6LGcuV3JpdGFibGUpLHoucHJvdG90eXBlLl93cml0ZT1mdW5jdGlvbihVLFcsWSl7dGhpcy5faGFzaC51cGRhdGUoVSksWSgpfSx6LnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oVSxXKXtyZXR1cm4gdGhpcy5faGFzaC51cGRhdGUoInN0cmluZyI9PXR5cGVvZiBVP0kuZnJvbShV''@;'; put 'put ''LFcpOlUpLHRoaXN9LHoucHJvdG90eXBlLnZlcmlmeT1mdW5jdGlvbihVLFcsWSl7dmFyIHE9InN0cmluZyI9PXR5cGVvZiBXP0kuZnJvbShXLFkpOlc7dGhpcy5lbmQoKTt2YXIgZWU9dGhpcy5faGFzaC5kaWdlc3QoKTtyZXR1cm4gUChxLGVlLFUsdGhpcy5fc2lnblR5cGUsdGhpcy5fdGFn''@;'; put 'put ''KX0sdWUuZXhwb3J0cz17U2lnbjpOLFZlcmlmeTpMLGNyZWF0ZVNpZ246TixjcmVhdGVWZXJpZnk6TH19LDI5NTc6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg5NTA5KS5CdWZmZXIsXz15KDgzNTUpLGc9eSgzNjYzKSxCPXkoNjk0OCkuZWMsdz15KDM1NTApLFA9eSg5ODApLEY9''@;'; put 'put ''eSgxMzA4KTtmdW5jdGlvbiBVKEosbmUsaWUsbGUpe2lmKChKPUkuZnJvbShKLnRvQXJyYXkoKSkpLmxlbmd0aDxuZS5ieXRlTGVuZ3RoKCkpe3ZhciBtZT1JLmFsbG9jKG5lLmJ5dGVMZW5ndGgoKS1KLmxlbmd0aCk7Sj1JLmNvbmNhdChbbWUsSl0pfXZhciBfZT1pZS5sZW5ndGgsVGU9ZnVu''@;'; put 'put ''Y3Rpb24gWShKLG5lKXtKPShKPVcoSixuZSkpLm1vZChuZSk7dmFyIGllPUkuZnJvbShKLnRvQXJyYXkoKSk7aWYoaWUubGVuZ3RoPG5lLmJ5dGVMZW5ndGgoKSl7dmFyIGxlPUkuYWxsb2MobmUuYnl0ZUxlbmd0aCgpLWllLmxlbmd0aCk7aWU9SS5jb25jYXQoW2xlLGllXSl9cmV0dXJuIGll''@;'; put 'put ''fShpZSxuZSksU2U9SS5hbGxvYyhfZSk7U2UuZmlsbCgxKTt2YXIgamU9SS5hbGxvYyhfZSk7cmV0dXJuIGplPV8obGUsamUpLnVwZGF0ZShTZSkudXBkYXRlKEkuZnJvbShbMF0pKS51cGRhdGUoSikudXBkYXRlKFRlKS5kaWdlc3QoKSxTZT1fKGxlLGplKS51cGRhdGUoU2UpLmRpZ2VzdCgp''@;'; put 'put ''LHtrOmplPV8obGUsamUpLnVwZGF0ZShTZSkudXBkYXRlKEkuZnJvbShbMV0pKS51cGRhdGUoSikudXBkYXRlKFRlKS5kaWdlc3QoKSx2OlNlPV8obGUsamUpLnVwZGF0ZShTZSkuZGlnZXN0KCl9fWZ1bmN0aW9uIFcoSixuZSl7dmFyIGllPW5ldyB3KEopLGxlPShKLmxlbmd0aDw8MyktbmUu''@;'; put 'put ''Yml0TGVuZ3RoKCk7cmV0dXJuIGxlPjAmJmllLmlzaHJuKGxlKSxpZX1mdW5jdGlvbiBxKEosbmUsaWUpe3ZhciBsZSxtZTtkb3tmb3IobGU9SS5hbGxvYygwKTs4KmxlLmxlbmd0aDxKLmJpdExlbmd0aCgpOyluZS52PV8oaWUsbmUuaykudXBkYXRlKG5lLnYpLmRpZ2VzdCgpLGxlPUkuY29u''@;'; put 'put ''Y2F0KFtsZSxuZS52XSk7bWU9VyhsZSxKKSxuZS5rPV8oaWUsbmUuaykudXBkYXRlKG5lLnYpLnVwZGF0ZShJLmZyb20oWzBdKSkuZGlnZXN0KCksbmUudj1fKGllLG5lLmspLnVwZGF0ZShuZS52KS5kaWdlc3QoKX13aGlsZSgtMSE9PW1lLmNtcChKKSk7cmV0dXJuIG1lfWZ1bmN0aW9uIGVl''@;'; put 'put ''KEosbmUsaWUsbGUpe3JldHVybiBKLnRvUmVkKHcubW9udChpZSkpLnJlZFBvdyhuZSkuZnJvbVJlZCgpLm1vZChsZSl9dWUuZXhwb3J0cz1mdW5jdGlvbiB6KEosbmUsaWUsbGUsbWUpe3ZhciBfZT1QKG5lKTtpZihfZS5jdXJ2ZSl7aWYoImVjZHNhIiE9PWxlJiYiZWNkc2EvcnNhIiE9PWxl''@;'; put 'put ''KXRocm93IG5ldyBFcnJvcigid3JvbmcgcHJpdmF0ZSBrZXkgdHlwZSIpO3JldHVybiBmdW5jdGlvbiBOKEosbmUpe3ZhciBpZT1GW25lLmN1cnZlLmpvaW4oIi4iKV07aWYoIWllKXRocm93IG5ldyBFcnJvcigidW5rbm93biBjdXJ2ZSAiK25lLmN1cnZlLmpvaW4oIi4iKSk7dmFyIF9lPW5l''@;'; put 'put ''dyBCKGllKS5rZXlGcm9tUHJpdmF0ZShuZS5wcml2YXRlS2V5KS5zaWduKEopO3JldHVybiBJLmZyb20oX2UudG9ERVIoKSl9KEosX2UpfWlmKCJkc2EiPT09X2UudHlwZSl7aWYoImRzYSIhPT1sZSl0aHJvdyBuZXcgRXJyb3IoIndyb25nIHByaXZhdGUga2V5IHR5cGUiKTtyZXR1cm4gZnVu''@;'; put 'put ''Y3Rpb24gTChKLG5lLGllKXtmb3IodmFyIGplLGxlPW5lLnBhcmFtcy5wcml2X2tleSxtZT1uZS5wYXJhbXMucCxfZT1uZS5wYXJhbXMucSxUZT1uZS5wYXJhbXMuZyxTZT1uZXcgdygwKSxWPVcoSixfZSkubW9kKF9lKSxwPSExLGI9VShsZSxfZSxKLGllKTshMT09PXA7KVNlPWVlKFRlLGpl''@;'; put 'put ''PXEoX2UsYixpZSksbWUsX2UpLDA9PT0ocD1qZS5pbnZtKF9lKS5pbXVsKFYuYWRkKGxlLm11bChTZSkpKS5tb2QoX2UpKS5jbXBuKDApJiYocD0hMSxTZT1uZXcgdygwKSk7cmV0dXJuIGZ1bmN0aW9uIEsoSixuZSl7Sj1KLnRvQXJyYXkoKSxuZT1uZS50b0FycmF5KCksMTI4JkpbMF0mJihK''@;'; put 'put ''PVswXS5jb25jYXQoSikpLDEyOCZuZVswXSYmKG5lPVswXS5jb25jYXQobmUpKTt2YXIgbGU9WzQ4LEoubGVuZ3RoK25lLmxlbmd0aCs0LDIsSi5sZW5ndGhdO3JldHVybiBsZT1sZS5jb25jYXQoSixbMixuZS5sZW5ndGhdLG5lKSxJLmZyb20obGUpfShTZSxwKX0oSixfZSxpZSl9aWYoInJz''@;'; put 'put ''YSIhPT1sZSYmImVjZHNhL3JzYSIhPT1sZSl0aHJvdyBuZXcgRXJyb3IoIndyb25nIHByaXZhdGUga2V5IHR5cGUiKTtpZih2b2lkIDAhPT1uZS5wYWRkaW5nJiYxIT09bmUucGFkZGluZyl0aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgb3IgdW5zdXBwb3J0ZWQgcGFkZGluZyBtb2RlIik7Sj1J''@;'; put 'put ''LmNvbmNhdChbbWUsSl0pO2Zvcih2YXIgVGU9X2UubW9kdWx1cy5ieXRlTGVuZ3RoKCksU2U9WzAsMV07Si5sZW5ndGgrU2UubGVuZ3RoKzE8VGU7KVNlLnB1c2goMjU1KTtTZS5wdXNoKDApO2Zvcih2YXIgamU9LTE7KytqZTxKLmxlbmd0aDspU2UucHVzaChKW2plXSk7cmV0dXJuIGcoU2Us''@;'; put 'put ''X2UpfSx1ZS5leHBvcnRzLmdldEtleT1VLHVlLmV4cG9ydHMubWFrZUtleT1xfSw3NzUzOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoOTUwOSkuQnVmZmVyLF89eSgzNTUwKSxnPXkoNjk0OCkuZWMsQj15KDk4MCksdz15KDEzMDgpO2Z1bmN0aW9uIHooTixMKXtpZihOLmNtcG4o''@;'; put 'put ''MCk8PTApdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHNpZyIpO2lmKE4uY21wKEwpPj0wKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBzaWciKX11ZS5leHBvcnRzPWZ1bmN0aW9uIFAoTixMLEssVSxXKXt2YXIgWT1CKEspO2lmKCJlYyI9PT1ZLnR5cGUpe2lmKCJlY2RzYSIhPT1VJiYiZWNk''@;'; put 'put ''c2EvcnNhIiE9PVUpdGhyb3cgbmV3IEVycm9yKCJ3cm9uZyBwdWJsaWMga2V5IHR5cGUiKTtyZXR1cm4gZnVuY3Rpb24gRihOLEwsSyl7dmFyIFU9d1tLLmRhdGEuYWxnb3JpdGhtLmN1cnZlLmpvaW4oIi4iKV07aWYoIVUpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIGN1cnZlICIrSy5kYXRh''@;'; put 'put ''LmFsZ29yaXRobS5jdXJ2ZS5qb2luKCIuIikpO3JldHVybiBuZXcgZyhVKS52ZXJpZnkoTCxOLEsuZGF0YS5zdWJqZWN0UHJpdmF0ZUtleS5kYXRhKX0oTixMLFkpfWlmKCJkc2EiPT09WS50eXBlKXtpZigiZHNhIiE9PVUpdGhyb3cgbmV3IEVycm9yKCJ3cm9uZyBwdWJsaWMga2V5IHR5cGUi''@;'; put 'put ''KTtyZXR1cm4gZnVuY3Rpb24gTyhOLEwsSyl7dmFyIFU9Sy5kYXRhLnAsVz1LLmRhdGEucSxZPUsuZGF0YS5nLHE9Sy5kYXRhLnB1Yl9rZXksZWU9Qi5zaWduYXR1cmUuZGVjb2RlKE4sImRlciIpLEo9ZWUucyxuZT1lZS5yO3ooSixXKSx6KG5lLFcpO3ZhciBpZT1fLm1vbnQoVSksbGU9Si5p''@;'; put 'put ''bnZtKFcpO3JldHVybiAwPT09WS50b1JlZChpZSkucmVkUG93KG5ldyBfKEwpLm11bChsZSkubW9kKFcpKS5mcm9tUmVkKCkubXVsKHEudG9SZWQoaWUpLnJlZFBvdyhuZS5tdWwobGUpLm1vZChXKSkuZnJvbVJlZCgpKS5tb2QoVSkubW9kKFcpLmNtcChuZSl9KE4sTCxZKX1pZigicnNhIiE9''@;'; put 'put ''PVUmJiJlY2RzYS9yc2EiIT09VSl0aHJvdyBuZXcgRXJyb3IoIndyb25nIHB1YmxpYyBrZXkgdHlwZSIpO0w9SS5jb25jYXQoW1csTF0pO2Zvcih2YXIgcT1ZLm1vZHVsdXMuYnl0ZUxlbmd0aCgpLGVlPVsxXSxKPTA7TC5sZW5ndGgrZWUubGVuZ3RoKzI8cTspZWUucHVzaCgyNTUpLEorPTE7''@;'; put 'put ''ZWUucHVzaCgwKTtmb3IodmFyIG5lPS0xOysrbmU8TC5sZW5ndGg7KWVlLnB1c2goTFtuZV0pO2VlPUkuZnJvbShlZSk7dmFyIGllPV8ubW9udChZLm1vZHVsdXMpO049KE49bmV3IF8oTikudG9SZWQoaWUpKS5yZWRQb3cobmV3IF8oWS5wdWJsaWNFeHBvbmVudCkpLE49SS5mcm9tKE4uZnJv''@;'; put 'put ''bVJlZCgpLnRvQXJyYXkoKSk7dmFyIGxlPUo8OD8xOjA7Zm9yKHE9TWF0aC5taW4oTi5sZW5ndGgsZWUubGVuZ3RoKSxOLmxlbmd0aCE9PWVlLmxlbmd0aCYmKGxlPTEpLG5lPS0xOysrbmU8cTspbGV8PU5bbmVdXmVlW25lXTtyZXR1cm4gMD09PWxlfX0sNDM5MDoodWUsWCx5KT0+eyJ1c2Ug''@;'; put 'put ''c3RyaWN0Ijt2YXIgST15KDgyMTIpLF89T2JqZWN0LmtleXN8fGZ1bmN0aW9uKEspe3ZhciBVPVtdO2Zvcih2YXIgVyBpbiBLKVUucHVzaChXKTtyZXR1cm4gVX07dWUuZXhwb3J0cz16O3ZhciBnPU9iamVjdC5jcmVhdGUoeSg2NDk3KSk7Zy5pbmhlcml0cz15KDU3MTcpO3ZhciBCPXkoNDk2''@;'; put 'put ''MCksdz15KDIwMTApO2cuaW5oZXJpdHMoeixCKTtmb3IodmFyIFA9Xyh3LnByb3RvdHlwZSksRj0wO0Y8UC5sZW5ndGg7RisrKXt2YXIgTz1QW0ZdO3oucHJvdG90eXBlW09dfHwoei5wcm90b3R5cGVbT109dy5wcm90b3R5cGVbT10pfWZ1bmN0aW9uIHooSyl7aWYoISh0aGlzIGluc3RhbmNl''@;'; put 'put ''b2YgeikpcmV0dXJuIG5ldyB6KEspO0IuY2FsbCh0aGlzLEspLHcuY2FsbCh0aGlzLEspLEsmJiExPT09Sy5yZWFkYWJsZSYmKHRoaXMucmVhZGFibGU9ITEpLEsmJiExPT09Sy53cml0YWJsZSYmKHRoaXMud3JpdGFibGU9ITEpLHRoaXMuYWxsb3dIYWxmT3Blbj0hMCxLJiYhMT09PUsuYWxs''@;'; put 'put ''b3dIYWxmT3BlbiYmKHRoaXMuYWxsb3dIYWxmT3Blbj0hMSksdGhpcy5vbmNlKCJlbmQiLE4pfWZ1bmN0aW9uIE4oKXt0aGlzLmFsbG93SGFsZk9wZW58fHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kZWR8fEkubmV4dFRpY2soTCx0aGlzKX1mdW5jdGlvbiBMKEspe0suZW5kKCl9T2JqZWN0LmRl''@;'; put 'put ''ZmluZVByb3BlcnR5KHoucHJvdG90eXBlLCJ3cml0YWJsZUhpZ2hXYXRlck1hcmsiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmhpZ2hXYXRlck1hcmt9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHoucHJvdG90eXBlLCJkZXN0cm95''@;'; put 'put ''ZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5fcmVhZGFibGVTdGF0ZSYmdm9pZCAwIT09dGhpcy5fd3JpdGFibGVTdGF0ZSYmdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQmJnRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkfSxzZXQ6ZnVuY3Rpb24oSyl7''@;'; put 'put ''dm9pZCAwPT09dGhpcy5fcmVhZGFibGVTdGF0ZXx8dm9pZCAwPT09dGhpcy5fd3JpdGFibGVTdGF0ZXx8KHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkPUssdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ9Syl9fSksei5wcm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24oSyxVKXt0''@;'; put 'put ''aGlzLnB1c2gobnVsbCksdGhpcy5lbmQoKSxJLm5leHRUaWNrKFUsSyl9fSwxMjk0Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9Zzt2YXIgST15KDM5MTIpLF89T2JqZWN0LmNyZWF0ZSh5KDY0OTcpKTtmdW5jdGlvbiBnKEIpe2lmKCEodGhpcyBpbnN0YW5jZW9mIGcpKXJl''@;'; put 'put ''dHVybiBuZXcgZyhCKTtJLmNhbGwodGhpcyxCKX1fLmluaGVyaXRzPXkoNTcxNyksXy5pbmhlcml0cyhnLEkpLGcucHJvdG90eXBlLl90cmFuc2Zvcm09ZnVuY3Rpb24oQix3LFApe1AobnVsbCxCKX19LDQ5NjA6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg0MTU1KSxfPXkoODIx''@;'; put 'put ''Mik7dWUuZXhwb3J0cz1sZTt2YXIgQixnPXkoNTgyNik7bGUuUmVhZGFibGVTdGF0ZT1pZSx5KDcxODcpO3ZhciBQPWZ1bmN0aW9uKHZlLFhlKXtyZXR1cm4gdmUubGlzdGVuZXJzKFhlKS5sZW5ndGh9LEY9eSg5ODE5KSxPPXkoMTU3MikuQnVmZmVyLHo9KHR5cGVvZiB5Lmc8InUiP3kuZzp0''@;'; put 'put ''eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dHlwZW9mIHNlbGY8InUiP3NlbGY6e30pLlVpbnQ4QXJyYXl8fGZ1bmN0aW9uKCl7fSxLPU9iamVjdC5jcmVhdGUoeSg2NDk3KSk7Sy5pbmhlcml0cz15KDU3MTcpO3ZhciBVPXkoNjM1MyksVz12b2lkIDA7Vz1VJiZVLmRlYnVnbG9nP1UuZGVidWds''@;'; put 'put ''b2coInN0cmVhbSIpOmZ1bmN0aW9uKCl7fTt2YXIgZWUsWT15KDIyNjcpLHE9eSg1OTk3KTtLLmluaGVyaXRzKGxlLEYpO3ZhciBKPVsiZXJyb3IiLCJjbG9zZSIsImRlc3Ryb3kiLCJwYXVzZSIsInJlc3VtZSJdO2Z1bmN0aW9uIGllKHZlLFhlKXt2YXIgemU9WGUgaW5zdGFuY2VvZihCPUJ8''@;'; put 'put ''fHkoNDM5MCkpO3RoaXMub2JqZWN0TW9kZT0hISh2ZT12ZXx8e30pLm9iamVjdE1vZGUsemUmJih0aGlzLm9iamVjdE1vZGU9dGhpcy5vYmplY3RNb2RlfHwhIXZlLnJlYWRhYmxlT2JqZWN0TW9kZSk7dmFyIERlPXZlLmhpZ2hXYXRlck1hcmssRmU9dmUucmVhZGFibGVIaWdoV2F0ZXJNYXJr''@;'; put 'put ''O3RoaXMuaGlnaFdhdGVyTWFyaz1EZXx8MD09PURlP0RlOnplJiYoRmV8fDA9PT1GZSk/RmU6dGhpcy5vYmplY3RNb2RlPzE2OjE2Mzg0LHRoaXMuaGlnaFdhdGVyTWFyaz1NYXRoLmZsb29yKHRoaXMuaGlnaFdhdGVyTWFyayksdGhpcy5idWZmZXI9bmV3IFksdGhpcy5sZW5ndGg9MCx0aGlz''@;'; put 'put ''LnBpcGVzPW51bGwsdGhpcy5waXBlc0NvdW50PTAsdGhpcy5mbG93aW5nPW51bGwsdGhpcy5lbmRlZD0hMSx0aGlzLmVuZEVtaXR0ZWQ9ITEsdGhpcy5yZWFkaW5nPSExLHRoaXMuc3luYz0hMCx0aGlzLm5lZWRSZWFkYWJsZT0hMSx0aGlzLmVtaXR0ZWRSZWFkYWJsZT0hMSx0aGlzLnJlYWRh''@;'; put 'put ''YmxlTGlzdGVuaW5nPSExLHRoaXMucmVzdW1lU2NoZWR1bGVkPSExLHRoaXMuZGVzdHJveWVkPSExLHRoaXMuZGVmYXVsdEVuY29kaW5nPXZlLmRlZmF1bHRFbmNvZGluZ3x8InV0ZjgiLHRoaXMuYXdhaXREcmFpbj0wLHRoaXMucmVhZGluZ01vcmU9ITEsdGhpcy5kZWNvZGVyPW51bGwsdGhp''@;'; put 'put ''cy5lbmNvZGluZz1udWxsLHZlLmVuY29kaW5nJiYoZWV8fChlZT15KDIyMjEpLnMpLHRoaXMuZGVjb2Rlcj1uZXcgZWUodmUuZW5jb2RpbmcpLHRoaXMuZW5jb2Rpbmc9dmUuZW5jb2RpbmcpfWZ1bmN0aW9uIGxlKHZlKXtpZihCPUJ8fHkoNDM5MCksISh0aGlzIGluc3RhbmNlb2YgbGUpKXJl''@;'; put 'put ''dHVybiBuZXcgbGUodmUpO3RoaXMuX3JlYWRhYmxlU3RhdGU9bmV3IGllKHZlLHRoaXMpLHRoaXMucmVhZGFibGU9ITAsdmUmJigiZnVuY3Rpb24iPT10eXBlb2YgdmUucmVhZCYmKHRoaXMuX3JlYWQ9dmUucmVhZCksImZ1bmN0aW9uIj09dHlwZW9mIHZlLmRlc3Ryb3kmJih0aGlzLl9kZXN0''@;'; put 'put ''cm95PXZlLmRlc3Ryb3kpKSxGLmNhbGwodGhpcyl9ZnVuY3Rpb24gbWUodmUsWGUsemUsRGUsRmUpe3ZhciBJZSxPZT12ZS5fcmVhZGFibGVTdGF0ZTtyZXR1cm4gbnVsbD09PVhlPyhPZS5yZWFkaW5nPSExLGZ1bmN0aW9uIGIodmUsWGUpe2lmKCFYZS5lbmRlZCl7aWYoWGUuZGVjb2Rlcil7''@;'; put 'put ''dmFyIHplPVhlLmRlY29kZXIuZW5kKCk7emUmJnplLmxlbmd0aCYmKFhlLmJ1ZmZlci5wdXNoKHplKSxYZS5sZW5ndGgrPVhlLm9iamVjdE1vZGU/MTp6ZS5sZW5ndGgpfVhlLmVuZGVkPSEwLHgodmUpfX0odmUsT2UpKTooRmV8fChJZT1mdW5jdGlvbiBUZSh2ZSxYZSl7dmFyIHplO3JldHVy''@;'; put 'put ''biFmdW5jdGlvbiBMKHZlKXtyZXR1cm4gTy5pc0J1ZmZlcih2ZSl8fHZlIGluc3RhbmNlb2Ygen0oWGUpJiYic3RyaW5nIiE9dHlwZW9mIFhlJiZ2b2lkIDAhPT1YZSYmIXZlLm9iamVjdE1vZGUmJih6ZT1uZXcgVHlwZUVycm9yKCJJbnZhbGlkIG5vbi1zdHJpbmcvYnVmZmVyIGNodW5rIikp''@;'; put 'put ''LHplfShPZSxYZSkpLEllP3ZlLmVtaXQoImVycm9yIixJZSk6T2Uub2JqZWN0TW9kZXx8WGUmJlhlLmxlbmd0aD4wPygic3RyaW5nIiE9dHlwZW9mIFhlJiYhT2Uub2JqZWN0TW9kZSYmT2JqZWN0LmdldFByb3RvdHlwZU9mKFhlKSE9PU8ucHJvdG90eXBlJiYoWGU9ZnVuY3Rpb24gTih2ZSl7''@;'; put 'put ''cmV0dXJuIE8uZnJvbSh2ZSl9KFhlKSksRGU/T2UuZW5kRW1pdHRlZD92ZS5lbWl0KCJlcnJvciIsbmV3IEVycm9yKCJzdHJlYW0udW5zaGlmdCgpIGFmdGVyIGVuZCBldmVudCIpKTpfZSh2ZSxPZSxYZSwhMCk6T2UuZW5kZWQ/dmUuZW1pdCgiZXJyb3IiLG5ldyBFcnJvcigic3RyZWFtLnB1''@;'; put 'put ''c2goKSBhZnRlciBFT0YiKSk6KE9lLnJlYWRpbmc9ITEsT2UuZGVjb2RlciYmIXplPyhYZT1PZS5kZWNvZGVyLndyaXRlKFhlKSxPZS5vYmplY3RNb2RlfHwwIT09WGUubGVuZ3RoP19lKHZlLE9lLFhlLCExKTpUKHZlLE9lKSk6X2UodmUsT2UsWGUsITEpKSk6RGV8fChPZS5yZWFkaW5nPSEx''@;'; put 'put ''KSksZnVuY3Rpb24gU2UodmUpe3JldHVybiF2ZS5lbmRlZCYmKHZlLm5lZWRSZWFkYWJsZXx8dmUubGVuZ3RoPHZlLmhpZ2hXYXRlck1hcmt8fDA9PT12ZS5sZW5ndGgpfShPZSl9ZnVuY3Rpb24gX2UodmUsWGUsemUsRGUpe1hlLmZsb3dpbmcmJjA9PT1YZS5sZW5ndGgmJiFYZS5zeW5jPyh2''@;'; put 'put ''ZS5lbWl0KCJkYXRhIix6ZSksdmUucmVhZCgwKSk6KFhlLmxlbmd0aCs9WGUub2JqZWN0TW9kZT8xOnplLmxlbmd0aCxEZT9YZS5idWZmZXIudW5zaGlmdCh6ZSk6WGUuYnVmZmVyLnB1c2goemUpLFhlLm5lZWRSZWFkYWJsZSYmeCh2ZSkpLFQodmUsWGUpfU9iamVjdC5kZWZpbmVQcm9wZXJ0''@;'; put 'put ''eShsZS5wcm90b3R5cGUsImRlc3Ryb3llZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzLl9yZWFkYWJsZVN0YXRlJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZH0sc2V0OmZ1bmN0aW9uKHZlKXt0aGlzLl9yZWFkYWJsZVN0YXRlJiYodGhpcy5fcmVhZGFibGVT''@;'; put 'put ''dGF0ZS5kZXN0cm95ZWQ9dmUpfX0pLGxlLnByb3RvdHlwZS5kZXN0cm95PXEuZGVzdHJveSxsZS5wcm90b3R5cGUuX3VuZGVzdHJveT1xLnVuZGVzdHJveSxsZS5wcm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24odmUsWGUpe3RoaXMucHVzaChudWxsKSxYZSh2ZSl9LGxlLnByb3RvdHlwZS5w''@;'; put 'put ''dXNoPWZ1bmN0aW9uKHZlLFhlKXt2YXIgRGUsemU9dGhpcy5fcmVhZGFibGVTdGF0ZTtyZXR1cm4gemUub2JqZWN0TW9kZT9EZT0hMDoic3RyaW5nIj09dHlwZW9mIHZlJiYoKFhlPVhlfHx6ZS5kZWZhdWx0RW5jb2RpbmcpIT09emUuZW5jb2RpbmcmJih2ZT1PLmZyb20odmUsWGUpLFhlPSIi''@;'; put 'put ''KSxEZT0hMCksbWUodGhpcyx2ZSxYZSwhMSxEZSl9LGxlLnByb3RvdHlwZS51bnNoaWZ0PWZ1bmN0aW9uKHZlKXtyZXR1cm4gbWUodGhpcyx2ZSxudWxsLCEwLCExKX0sbGUucHJvdG90eXBlLmlzUGF1c2VkPWZ1bmN0aW9uKCl7cmV0dXJuITE9PT10aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dp''@;'; put 'put ''bmd9LGxlLnByb3RvdHlwZS5zZXRFbmNvZGluZz1mdW5jdGlvbih2ZSl7cmV0dXJuIGVlfHwoZWU9eSgyMjIxKS5zKSx0aGlzLl9yZWFkYWJsZVN0YXRlLmRlY29kZXI9bmV3IGVlKHZlKSx0aGlzLl9yZWFkYWJsZVN0YXRlLmVuY29kaW5nPXZlLHRoaXN9O2Z1bmN0aW9uIHAodmUsWGUpe3Jl''@;'; put 'put ''dHVybiB2ZTw9MHx8MD09PVhlLmxlbmd0aCYmWGUuZW5kZWQ/MDpYZS5vYmplY3RNb2RlPzE6dmUhPXZlP1hlLmZsb3dpbmcmJlhlLmxlbmd0aD9YZS5idWZmZXIuaGVhZC5kYXRhLmxlbmd0aDpYZS5sZW5ndGg6KHZlPlhlLmhpZ2hXYXRlck1hcmsmJihYZS5oaWdoV2F0ZXJNYXJrPWZ1bmN0''@;'; put 'put ''aW9uIFYodmUpe3JldHVybiB2ZT49ODM4ODYwOD92ZT04Mzg4NjA4Oih2ZS0tLHZlfD12ZT4+PjEsdmV8PXZlPj4+Mix2ZXw9dmU+Pj40LHZlfD12ZT4+PjgsdmV8PXZlPj4+MTYsdmUrKyksdmV9KHZlKSksdmU8PVhlLmxlbmd0aD92ZTpYZS5lbmRlZD9YZS5sZW5ndGg6KFhlLm5lZWRSZWFk''@;'; put 'put ''YWJsZT0hMCwwKSl9ZnVuY3Rpb24geCh2ZSl7dmFyIFhlPXZlLl9yZWFkYWJsZVN0YXRlO1hlLm5lZWRSZWFkYWJsZT0hMSxYZS5lbWl0dGVkUmVhZGFibGV8fChXKCJlbWl0UmVhZGFibGUiLFhlLmZsb3dpbmcpLFhlLmVtaXR0ZWRSZWFkYWJsZT0hMCxYZS5zeW5jP18ubmV4dFRpY2soQyx2''@;'; put 'put ''ZSk6Qyh2ZSkpfWZ1bmN0aW9uIEModmUpe1coImVtaXQgcmVhZGFibGUiKSx2ZS5lbWl0KCJyZWFkYWJsZSIpLGFlKHZlKX1mdW5jdGlvbiBUKHZlLFhlKXtYZS5yZWFkaW5nTW9yZXx8KFhlLnJlYWRpbmdNb3JlPSEwLF8ubmV4dFRpY2soSCx2ZSxYZSkpfWZ1bmN0aW9uIEgodmUsWGUpe2Zv''@;'; put 'put ''cih2YXIgemU9WGUubGVuZ3RoOyFYZS5yZWFkaW5nJiYhWGUuZmxvd2luZyYmIVhlLmVuZGVkJiZYZS5sZW5ndGg8WGUuaGlnaFdhdGVyTWFyayYmKFcoIm1heWJlUmVhZE1vcmUgcmVhZCAwIiksdmUucmVhZCgwKSx6ZSE9PVhlLmxlbmd0aCk7KXplPVhlLmxlbmd0aDtYZS5yZWFkaW5nTW9y''@;'; put 'put ''ZT0hMX1mdW5jdGlvbiBFKHZlKXtXKCJyZWFkYWJsZSBuZXh0dGljayByZWFkIDAiKSx2ZS5yZWFkKDApfWZ1bmN0aW9uIEEodmUsWGUpe1hlLnJlYWRpbmd8fChXKCJyZXN1bWUgcmVhZCAwIiksdmUucmVhZCgwKSksWGUucmVzdW1lU2NoZWR1bGVkPSExLFhlLmF3YWl0RHJhaW49MCx2ZS5l''@;'; put 'put ''bWl0KCJyZXN1bWUiKSxhZSh2ZSksWGUuZmxvd2luZyYmIVhlLnJlYWRpbmcmJnZlLnJlYWQoMCl9ZnVuY3Rpb24gYWUodmUpe3ZhciBYZT12ZS5fcmVhZGFibGVTdGF0ZTtmb3IoVygiZmxvdyIsWGUuZmxvd2luZyk7WGUuZmxvd2luZyYmbnVsbCE9PXZlLnJlYWQoKTspO31mdW5jdGlvbiB0''@;'; put 'put ''ZSh2ZSxYZSl7cmV0dXJuIDA9PT1YZS5sZW5ndGg/bnVsbDooWGUub2JqZWN0TW9kZT96ZT1YZS5idWZmZXIuc2hpZnQoKTohdmV8fHZlPj1YZS5sZW5ndGg/KHplPVhlLmRlY29kZXI/WGUuYnVmZmVyLmpvaW4oIiIpOjE9PT1YZS5idWZmZXIubGVuZ3RoP1hlLmJ1ZmZlci5oZWFkLmRhdGE6''@;'; put 'put ''WGUuYnVmZmVyLmNvbmNhdChYZS5sZW5ndGgpLFhlLmJ1ZmZlci5jbGVhcigpKTp6ZT1mdW5jdGlvbiBzZSh2ZSxYZSx6ZSl7dmFyIERlO3JldHVybiB2ZTxYZS5oZWFkLmRhdGEubGVuZ3RoPyhEZT1YZS5oZWFkLmRhdGEuc2xpY2UoMCx2ZSksWGUuaGVhZC5kYXRhPVhlLmhlYWQuZGF0YS5z''@;'; put 'put ''bGljZSh2ZSkpOkRlPXZlPT09WGUuaGVhZC5kYXRhLmxlbmd0aD9YZS5zaGlmdCgpOnplP2Z1bmN0aW9uIHdlKHZlLFhlKXt2YXIgemU9WGUuaGVhZCxEZT0xLEZlPXplLmRhdGE7Zm9yKHZlLT1GZS5sZW5ndGg7emU9emUubmV4dDspe3ZhciBPZT16ZS5kYXRhLEllPXZlPk9lLmxlbmd0aD9P''@;'; put 'put ''ZS5sZW5ndGg6dmU7aWYoRmUrPUllPT09T2UubGVuZ3RoP09lOk9lLnNsaWNlKDAsdmUpLDA9PSh2ZS09SWUpKXtJZT09PU9lLmxlbmd0aD8oKytEZSxYZS5oZWFkPXplLm5leHQ/emUubmV4dDpYZS50YWlsPW51bGwpOihYZS5oZWFkPXplLHplLmRhdGE9T2Uuc2xpY2UoSWUpKTticmVha30r''@;'; put 'put ''K0RlfXJldHVybiBYZS5sZW5ndGgtPURlLEZlfSh2ZSxYZSk6ZnVuY3Rpb24gVWUodmUsWGUpe3ZhciB6ZT1PLmFsbG9jVW5zYWZlKHZlKSxEZT1YZS5oZWFkLEZlPTE7Zm9yKERlLmRhdGEuY29weSh6ZSksdmUtPURlLmRhdGEubGVuZ3RoO0RlPURlLm5leHQ7KXt2YXIgT2U9RGUuZGF0YSxJ''@;'; put 'put ''ZT12ZT5PZS5sZW5ndGg/T2UubGVuZ3RoOnZlO2lmKE9lLmNvcHkoemUsemUubGVuZ3RoLXZlLDAsSWUpLDA9PSh2ZS09SWUpKXtJZT09PU9lLmxlbmd0aD8oKytGZSxYZS5oZWFkPURlLm5leHQ/RGUubmV4dDpYZS50YWlsPW51bGwpOihYZS5oZWFkPURlLERlLmRhdGE9T2Uuc2xpY2UoSWUp''@;'; put 'put ''KTticmVha30rK0ZlfXJldHVybiBYZS5sZW5ndGgtPUZlLHplfSh2ZSxYZSksRGV9KHZlLFhlLmJ1ZmZlcixYZS5kZWNvZGVyKSx6ZSk7dmFyIHplfWZ1bmN0aW9uIEplKHZlKXt2YXIgWGU9dmUuX3JlYWRhYmxlU3RhdGU7aWYoWGUubGVuZ3RoPjApdGhyb3cgbmV3IEVycm9yKCciZW5kUmVh''@;'; put 'put ''ZGFibGUoKSIgY2FsbGVkIG9uIG5vbi1lbXB0eSBzdHJlYW0nKTtYZS5lbmRFbWl0dGVkfHwoWGUuZW5kZWQ9ITAsXy5uZXh0VGljayhvdCxYZSx2ZSkpfWZ1bmN0aW9uIG90KHZlLFhlKXshdmUuZW5kRW1pdHRlZCYmMD09PXZlLmxlbmd0aCYmKHZlLmVuZEVtaXR0ZWQ9ITAsWGUucmVhZGFi''@;'; put 'put ''bGU9ITEsWGUuZW1pdCgiZW5kIikpfWZ1bmN0aW9uIHhlKHZlLFhlKXtmb3IodmFyIHplPTAsRGU9dmUubGVuZ3RoO3plPERlO3plKyspaWYodmVbemVdPT09WGUpcmV0dXJuIHplO3JldHVybi0xfWxlLnByb3RvdHlwZS5yZWFkPWZ1bmN0aW9uKHZlKXtXKCJyZWFkIix2ZSksdmU9cGFyc2VJ''@;'; put 'put ''bnQodmUsMTApO3ZhciBYZT10aGlzLl9yZWFkYWJsZVN0YXRlLHplPXZlO2lmKDAhPT12ZSYmKFhlLmVtaXR0ZWRSZWFkYWJsZT0hMSksMD09PXZlJiZYZS5uZWVkUmVhZGFibGUmJihYZS5sZW5ndGg+PVhlLmhpZ2hXYXRlck1hcmt8fFhlLmVuZGVkKSlyZXR1cm4gVygicmVhZDogZW1pdFJl''@;'; put 'put ''YWRhYmxlIixYZS5sZW5ndGgsWGUuZW5kZWQpLDA9PT1YZS5sZW5ndGgmJlhlLmVuZGVkP0plKHRoaXMpOngodGhpcyksbnVsbDtpZigwPT09KHZlPXAodmUsWGUpKSYmWGUuZW5kZWQpcmV0dXJuIDA9PT1YZS5sZW5ndGgmJkplKHRoaXMpLG51bGw7dmFyIEZlLERlPVhlLm5lZWRSZWFkYWJs''@;'; put 'put ''ZTtyZXR1cm4gVygibmVlZCByZWFkYWJsZSIsRGUpLCgwPT09WGUubGVuZ3RofHxYZS5sZW5ndGgtdmU8WGUuaGlnaFdhdGVyTWFyaykmJlcoImxlbmd0aCBsZXNzIHRoYW4gd2F0ZXJtYXJrIixEZT0hMCksWGUuZW5kZWR8fFhlLnJlYWRpbmc/VygicmVhZGluZyBvciBlbmRlZCIsRGU9ITEp''@;'; put 'put ''OkRlJiYoVygiZG8gcmVhZCIpLFhlLnJlYWRpbmc9ITAsWGUuc3luYz0hMCwwPT09WGUubGVuZ3RoJiYoWGUubmVlZFJlYWRhYmxlPSEwKSx0aGlzLl9yZWFkKFhlLmhpZ2hXYXRlck1hcmspLFhlLnN5bmM9ITEsWGUucmVhZGluZ3x8KHZlPXAoemUsWGUpKSksbnVsbD09PShGZT12ZT4wP3Rl''@;'; put 'put ''KHZlLFhlKTpudWxsKT8oWGUubmVlZFJlYWRhYmxlPSEwLHZlPTApOlhlLmxlbmd0aC09dmUsMD09PVhlLmxlbmd0aCYmKFhlLmVuZGVkfHwoWGUubmVlZFJlYWRhYmxlPSEwKSx6ZSE9PXZlJiZYZS5lbmRlZCYmSmUodGhpcykpLG51bGwhPT1GZSYmdGhpcy5lbWl0KCJkYXRhIixGZSksRmV9''@;'; put 'put ''LGxlLnByb3RvdHlwZS5fcmVhZD1mdW5jdGlvbih2ZSl7dGhpcy5lbWl0KCJlcnJvciIsbmV3IEVycm9yKCJfcmVhZCgpIGlzIG5vdCBpbXBsZW1lbnRlZCIpKX0sbGUucHJvdG90eXBlLnBpcGU9ZnVuY3Rpb24odmUsWGUpe3ZhciB6ZT10aGlzLERlPXRoaXMuX3JlYWRhYmxlU3RhdGU7c3dp''@;'; put 'put ''dGNoKERlLnBpcGVzQ291bnQpe2Nhc2UgMDpEZS5waXBlcz12ZTticmVhaztjYXNlIDE6RGUucGlwZXM9W0RlLnBpcGVzLHZlXTticmVhaztkZWZhdWx0OkRlLnBpcGVzLnB1c2godmUpfURlLnBpcGVzQ291bnQrPTEsVygicGlwZSBjb3VudD0lZCBvcHRzPSVqIixEZS5waXBlc0NvdW50LFhl''@;'; put 'put ''KTt2YXIgT2U9WGUmJiExPT09WGUuZW5kfHx2ZT09PUkuc3Rkb3V0fHx2ZT09PUkuc3RkZXJyP0R0OlZlO2Z1bmN0aW9uIFZlKCl7Vygib25lbmQiKSx2ZS5lbmQoKX1EZS5lbmRFbWl0dGVkP18ubmV4dFRpY2soT2UpOnplLm9uY2UoImVuZCIsT2UpLHZlLm9uKCJ1bnBpcGUiLGZ1bmN0aW9u''@;'; put 'put ''IEllKGl0LCRlKXtXKCJvbnVucGlwZSIpLGl0PT09emUmJiRlJiYhMT09PSRlLmhhc1VucGlwZWQmJigkZS5oYXNVbnBpcGVkPSEwLGZ1bmN0aW9uIF90KCl7VygiY2xlYW51cCIpLHZlLnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIseXQpLHZlLnJlbW92ZUxpc3RlbmVyKCJmaW5pc2giLE10KSx2''@;'; put 'put ''ZS5yZW1vdmVMaXN0ZW5lcigiZHJhaW4iLGtlKSx2ZS5yZW1vdmVMaXN0ZW5lcigiZXJyb3IiLHVuKSx2ZS5yZW1vdmVMaXN0ZW5lcigidW5waXBlIixJZSksemUucmVtb3ZlTGlzdGVuZXIoImVuZCIsVmUpLHplLnJlbW92ZUxpc3RlbmVyKCJlbmQiLER0KSx6ZS5yZW1vdmVMaXN0ZW5lcigi''@;'; put 'put ''ZGF0YSIsUWUpLEFlPSEwLERlLmF3YWl0RHJhaW4mJighdmUuX3dyaXRhYmxlU3RhdGV8fHZlLl93cml0YWJsZVN0YXRlLm5lZWREcmFpbikmJmtlKCl9KCkpfSk7dmFyIGtlPWZ1bmN0aW9uIGoodmUpe3JldHVybiBmdW5jdGlvbigpe3ZhciBYZT12ZS5fcmVhZGFibGVTdGF0ZTtXKCJwaXBl''@;'; put 'put ''T25EcmFpbiIsWGUuYXdhaXREcmFpbiksWGUuYXdhaXREcmFpbiYmWGUuYXdhaXREcmFpbi0tLDA9PT1YZS5hd2FpdERyYWluJiZQKHZlLCJkYXRhIikmJihYZS5mbG93aW5nPSEwLGFlKHZlKSl9fSh6ZSk7dmUub24oImRyYWluIixrZSk7dmFyIEFlPSExLG50PSExO2Z1bmN0aW9uIFFlKGl0''@;'; put 'put ''KXtXKCJvbmRhdGEiKSxudD0hMSwhMT09PXZlLndyaXRlKGl0KSYmIW50JiYoKDE9PT1EZS5waXBlc0NvdW50JiZEZS5waXBlcz09PXZlfHxEZS5waXBlc0NvdW50PjEmJi0xIT09eGUoRGUucGlwZXMsdmUpKSYmIUFlJiYoVygiZmFsc2Ugd3JpdGUgcmVzcG9uc2UsIHBhdXNlIixEZS5hd2Fp''@;'; put 'put ''dERyYWluKSxEZS5hd2FpdERyYWluKyssbnQ9ITApLHplLnBhdXNlKCkpfWZ1bmN0aW9uIHVuKGl0KXtXKCJvbmVycm9yIixpdCksRHQoKSx2ZS5yZW1vdmVMaXN0ZW5lcigiZXJyb3IiLHVuKSwwPT09UCh2ZSwiZXJyb3IiKSYmdmUuZW1pdCgiZXJyb3IiLGl0KX1mdW5jdGlvbiB5dCgpe3Zl''@;'; put 'put ''LnJlbW92ZUxpc3RlbmVyKCJmaW5pc2giLE10KSxEdCgpfWZ1bmN0aW9uIE10KCl7Vygib25maW5pc2giKSx2ZS5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLHl0KSxEdCgpfWZ1bmN0aW9uIER0KCl7VygidW5waXBlIiksemUudW5waXBlKHZlKX1yZXR1cm4gemUub24oImRhdGEiLFFlKSxmdW5j''@;'; put 'put ''dGlvbiBuZSh2ZSxYZSx6ZSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHZlLnByZXBlbmRMaXN0ZW5lcilyZXR1cm4gdmUucHJlcGVuZExpc3RlbmVyKFhlLHplKTt2ZS5fZXZlbnRzJiZ2ZS5fZXZlbnRzW1hlXT9nKHZlLl9ldmVudHNbWGVdKT92ZS5fZXZlbnRzW1hlXS51bnNoaWZ0KHplKTp2''@;'; put 'put ''ZS5fZXZlbnRzW1hlXT1bemUsdmUuX2V2ZW50c1tYZV1dOnZlLm9uKFhlLHplKX0odmUsImVycm9yIix1biksdmUub25jZSgiY2xvc2UiLHl0KSx2ZS5vbmNlKCJmaW5pc2giLE10KSx2ZS5lbWl0KCJwaXBlIix6ZSksRGUuZmxvd2luZ3x8KFcoInBpcGUgcmVzdW1lIiksemUucmVzdW1lKCkp''@;'; put 'put ''LHZlfSxsZS5wcm90b3R5cGUudW5waXBlPWZ1bmN0aW9uKHZlKXt2YXIgWGU9dGhpcy5fcmVhZGFibGVTdGF0ZSx6ZT17aGFzVW5waXBlZDohMX07aWYoMD09PVhlLnBpcGVzQ291bnQpcmV0dXJuIHRoaXM7aWYoMT09PVhlLnBpcGVzQ291bnQpcmV0dXJuIHZlJiZ2ZSE9PVhlLnBpcGVzfHwo''@;'; put 'put ''dmV8fCh2ZT1YZS5waXBlcyksWGUucGlwZXM9bnVsbCxYZS5waXBlc0NvdW50PTAsWGUuZmxvd2luZz0hMSx2ZSYmdmUuZW1pdCgidW5waXBlIix0aGlzLHplKSksdGhpcztpZighdmUpe3ZhciBEZT1YZS5waXBlcyxGZT1YZS5waXBlc0NvdW50O1hlLnBpcGVzPW51bGwsWGUucGlwZXNDb3Vu''@;'; put 'put ''dD0wLFhlLmZsb3dpbmc9ITE7Zm9yKHZhciBPZT0wO09lPEZlO09lKyspRGVbT2VdLmVtaXQoInVucGlwZSIsdGhpcyx7aGFzVW5waXBlZDohMX0pO3JldHVybiB0aGlzfXZhciBJZT14ZShYZS5waXBlcyx2ZSk7cmV0dXJuLTE9PT1JZXx8KFhlLnBpcGVzLnNwbGljZShJZSwxKSxYZS5waXBl''@;'; put 'put ''c0NvdW50LT0xLDE9PT1YZS5waXBlc0NvdW50JiYoWGUucGlwZXM9WGUucGlwZXNbMF0pLHZlLmVtaXQoInVucGlwZSIsdGhpcyx6ZSkpLHRoaXN9LGxlLnByb3RvdHlwZS5hZGRMaXN0ZW5lcj1sZS5wcm90b3R5cGUub249ZnVuY3Rpb24odmUsWGUpe3ZhciB6ZT1GLnByb3RvdHlwZS5vbi5j''@;'; put 'put ''YWxsKHRoaXMsdmUsWGUpO2lmKCJkYXRhIj09PXZlKSExIT09dGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nJiZ0aGlzLnJlc3VtZSgpO2Vsc2UgaWYoInJlYWRhYmxlIj09PXZlKXt2YXIgRGU9dGhpcy5fcmVhZGFibGVTdGF0ZTshRGUuZW5kRW1pdHRlZCYmIURlLnJlYWRhYmxlTGlzdGVu''@;'; put 'put ''aW5nJiYoRGUucmVhZGFibGVMaXN0ZW5pbmc9RGUubmVlZFJlYWRhYmxlPSEwLERlLmVtaXR0ZWRSZWFkYWJsZT0hMSxEZS5yZWFkaW5nP0RlLmxlbmd0aCYmeCh0aGlzKTpfLm5leHRUaWNrKEUsdGhpcykpfXJldHVybiB6ZX0sbGUucHJvdG90eXBlLnJlc3VtZT1mdW5jdGlvbigpe3ZhciB2''@;'; put 'put ''ZT10aGlzLl9yZWFkYWJsZVN0YXRlO3JldHVybiB2ZS5mbG93aW5nfHwoVygicmVzdW1lIiksdmUuZmxvd2luZz0hMCxmdW5jdGlvbiBtKHZlLFhlKXtYZS5yZXN1bWVTY2hlZHVsZWR8fChYZS5yZXN1bWVTY2hlZHVsZWQ9ITAsXy5uZXh0VGljayhBLHZlLFhlKSl9KHRoaXMsdmUpKSx0aGlz''@;'; put 'put ''fSxsZS5wcm90b3R5cGUucGF1c2U9ZnVuY3Rpb24oKXtyZXR1cm4gVygiY2FsbCBwYXVzZSBmbG93aW5nPSVqIix0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcpLCExIT09dGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nJiYoVygicGF1c2UiKSx0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dp''@;'; put 'put ''bmc9ITEsdGhpcy5lbWl0KCJwYXVzZSIpKSx0aGlzfSxsZS5wcm90b3R5cGUud3JhcD1mdW5jdGlvbih2ZSl7dmFyIFhlPXRoaXMsemU9dGhpcy5fcmVhZGFibGVTdGF0ZSxEZT0hMTtmb3IodmFyIEZlIGluIHZlLm9uKCJlbmQiLGZ1bmN0aW9uKCl7aWYoVygid3JhcHBlZCBlbmQiKSx6ZS5k''@;'; put 'put ''ZWNvZGVyJiYhemUuZW5kZWQpe3ZhciBJZT16ZS5kZWNvZGVyLmVuZCgpO0llJiZJZS5sZW5ndGgmJlhlLnB1c2goSWUpfVhlLnB1c2gobnVsbCl9KSx2ZS5vbigiZGF0YSIsZnVuY3Rpb24oSWUpe1coIndyYXBwZWQgZGF0YSIpLHplLmRlY29kZXImJihJZT16ZS5kZWNvZGVyLndyaXRlKEll''@;'; put 'put ''KSksemUub2JqZWN0TW9kZSYmbnVsbD09SWV8fCEoemUub2JqZWN0TW9kZXx8SWUmJkllLmxlbmd0aCl8fFhlLnB1c2goSWUpfHwoRGU9ITAsdmUucGF1c2UoKSl9KSx2ZSl2b2lkIDA9PT10aGlzW0ZlXSYmImZ1bmN0aW9uIj09dHlwZW9mIHZlW0ZlXSYmKHRoaXNbRmVdPWZ1bmN0aW9uKEll''@;'; put 'put ''KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdmVbSWVdLmFwcGx5KHZlLGFyZ3VtZW50cyl9fShGZSkpO2Zvcih2YXIgT2U9MDtPZTxKLmxlbmd0aDtPZSsrKXZlLm9uKEpbT2VdLHRoaXMuZW1pdC5iaW5kKHRoaXMsSltPZV0pKTtyZXR1cm4gdGhpcy5fcmVhZD1mdW5jdGlvbihJZSl7Vygi''@;'; put 'put ''d3JhcHBlZCBfcmVhZCIsSWUpLERlJiYoRGU9ITEsdmUucmVzdW1lKCkpfSx0aGlzfSxPYmplY3QuZGVmaW5lUHJvcGVydHkobGUucHJvdG90eXBlLCJyZWFkYWJsZUhpZ2hXYXRlck1hcmsiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRl''@;'; put 'put ''LmhpZ2hXYXRlck1hcmt9fSksbGUuX2Zyb21MaXN0PXRlfSwzOTEyOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9Qjt2YXIgST15KDQzOTApLF89T2JqZWN0LmNyZWF0ZSh5KDY0OTcpKTtmdW5jdGlvbiBnKEYsTyl7dmFyIHo9dGhpcy5fdHJhbnNmb3JtU3RhdGU7ei50cmFu''@;'; put 'put ''c2Zvcm1pbmc9ITE7dmFyIE49ei53cml0ZWNiO2lmKCFOKXJldHVybiB0aGlzLmVtaXQoImVycm9yIixuZXcgRXJyb3IoIndyaXRlIGNhbGxiYWNrIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyIpKTt6LndyaXRlY2h1bms9bnVsbCx6LndyaXRlY2I9bnVsbCxudWxsIT1PJiZ0aGlzLnB1c2goTyks''@;'; put 'put ''TihGKTt2YXIgTD10aGlzLl9yZWFkYWJsZVN0YXRlO0wucmVhZGluZz0hMSwoTC5uZWVkUmVhZGFibGV8fEwubGVuZ3RoPEwuaGlnaFdhdGVyTWFyaykmJnRoaXMuX3JlYWQoTC5oaWdoV2F0ZXJNYXJrKX1mdW5jdGlvbiBCKEYpe2lmKCEodGhpcyBpbnN0YW5jZW9mIEIpKXJldHVybiBuZXcg''@;'; put 'put ''QihGKTtJLmNhbGwodGhpcyxGKSx0aGlzLl90cmFuc2Zvcm1TdGF0ZT17YWZ0ZXJUcmFuc2Zvcm06Zy5iaW5kKHRoaXMpLG5lZWRUcmFuc2Zvcm06ITEsdHJhbnNmb3JtaW5nOiExLHdyaXRlY2I6bnVsbCx3cml0ZWNodW5rOm51bGwsd3JpdGVlbmNvZGluZzpudWxsfSx0aGlzLl9yZWFkYWJs''@;'; put 'put ''ZVN0YXRlLm5lZWRSZWFkYWJsZT0hMCx0aGlzLl9yZWFkYWJsZVN0YXRlLnN5bmM9ITEsRiYmKCJmdW5jdGlvbiI9PXR5cGVvZiBGLnRyYW5zZm9ybSYmKHRoaXMuX3RyYW5zZm9ybT1GLnRyYW5zZm9ybSksImZ1bmN0aW9uIj09dHlwZW9mIEYuZmx1c2gmJih0aGlzLl9mbHVzaD1GLmZsdXNo''@;'; put 'put ''KSksdGhpcy5vbigicHJlZmluaXNoIix3KX1mdW5jdGlvbiB3KCl7dmFyIEY9dGhpczsiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5fZmx1c2g/dGhpcy5fZmx1c2goZnVuY3Rpb24oTyx6KXtQKEYsTyx6KX0pOlAodGhpcyxudWxsLG51bGwpfWZ1bmN0aW9uIFAoRixPLHope2lmKE8pcmV0dXJu''@;'; put 'put ''IEYuZW1pdCgiZXJyb3IiLE8pO2lmKG51bGwhPXomJkYucHVzaCh6KSxGLl93cml0YWJsZVN0YXRlLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIkNhbGxpbmcgdHJhbnNmb3JtIGRvbmUgd2hlbiB3cy5sZW5ndGggIT0gMCIpO2lmKEYuX3RyYW5zZm9ybVN0YXRlLnRyYW5zZm9ybWluZyl0aHJv''@;'; put 'put ''dyBuZXcgRXJyb3IoIkNhbGxpbmcgdHJhbnNmb3JtIGRvbmUgd2hlbiBzdGlsbCB0cmFuc2Zvcm1pbmciKTtyZXR1cm4gRi5wdXNoKG51bGwpfV8uaW5oZXJpdHM9eSg1NzE3KSxfLmluaGVyaXRzKEIsSSksQi5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihGLE8pe3JldHVybiB0aGlzLl90cmFu''@;'; put 'put ''c2Zvcm1TdGF0ZS5uZWVkVHJhbnNmb3JtPSExLEkucHJvdG90eXBlLnB1c2guY2FsbCh0aGlzLEYsTyl9LEIucHJvdG90eXBlLl90cmFuc2Zvcm09ZnVuY3Rpb24oRixPLHope3Rocm93IG5ldyBFcnJvcigiX3RyYW5zZm9ybSgpIGlzIG5vdCBpbXBsZW1lbnRlZCIpfSxCLnByb3RvdHlwZS5f''@;'; put 'put ''d3JpdGU9ZnVuY3Rpb24oRixPLHope3ZhciBOPXRoaXMuX3RyYW5zZm9ybVN0YXRlO2lmKE4ud3JpdGVjYj16LE4ud3JpdGVjaHVuaz1GLE4ud3JpdGVlbmNvZGluZz1PLCFOLnRyYW5zZm9ybWluZyl7dmFyIEw9dGhpcy5fcmVhZGFibGVTdGF0ZTsoTi5uZWVkVHJhbnNmb3JtfHxMLm5lZWRS''@;'; put 'put ''ZWFkYWJsZXx8TC5sZW5ndGg8TC5oaWdoV2F0ZXJNYXJrKSYmdGhpcy5fcmVhZChMLmhpZ2hXYXRlck1hcmspfX0sQi5wcm90b3R5cGUuX3JlYWQ9ZnVuY3Rpb24oRil7dmFyIE89dGhpcy5fdHJhbnNmb3JtU3RhdGU7bnVsbCE9PU8ud3JpdGVjaHVuayYmTy53cml0ZWNiJiYhTy50cmFuc2Zv''@;'; put 'put ''cm1pbmc/KE8udHJhbnNmb3JtaW5nPSEwLHRoaXMuX3RyYW5zZm9ybShPLndyaXRlY2h1bmssTy53cml0ZWVuY29kaW5nLE8uYWZ0ZXJUcmFuc2Zvcm0pKTpPLm5lZWRUcmFuc2Zvcm09ITB9LEIucHJvdG90eXBlLl9kZXN0cm95PWZ1bmN0aW9uKEYsTyl7dmFyIHo9dGhpcztJLnByb3RvdHlw''@;'; put 'put ''ZS5fZGVzdHJveS5jYWxsKHRoaXMsRixmdW5jdGlvbihOKXtPKE4pLHouZW1pdCgiY2xvc2UiKX0pfX0sMjAxMDoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDQxNTUpLF89eSg4MjEyKTtmdW5jdGlvbiBCKG0pe3ZhciBBPXRoaXM7dGhpcy5uZXh0PW51bGwsdGhpcy5lbnRyeT1u''@;'; put 'put ''dWxsLHRoaXMuZmluaXNoPWZ1bmN0aW9uKCl7IWZ1bmN0aW9uIEUobSxBLGFlKXt2YXIgdGU9bS5lbnRyeTtmb3IobS5lbnRyeT1udWxsO3RlOyl7dmFyIHNlPXRlLmNhbGxiYWNrO0EucGVuZGluZ2NiLS0sc2UoYWUpLHRlPXRlLm5leHR9QS5jb3JrZWRSZXF1ZXN0c0ZyZWUubmV4dD1tfShB''@;'; put 'put ''LG0pfX11ZS5leHBvcnRzPUo7dmFyIFAsdz0hSS5icm93c2VyJiZbInYwLjEwIiwidjAuOS4iXS5pbmRleE9mKEkudmVyc2lvbi5zbGljZSgwLDUpKT4tMT9zZXRJbW1lZGlhdGU6Xy5uZXh0VGljaztKLldyaXRhYmxlU3RhdGU9cTt2YXIgRj1PYmplY3QuY3JlYXRlKHkoNjQ5NykpO0YuaW5o''@;'; put 'put ''ZXJpdHM9eSg1NzE3KTt2YXIgZWUsTz17ZGVwcmVjYXRlOnkoNDkyNyl9LHo9eSg5ODE5KSxOPXkoMTU3MikuQnVmZmVyLEw9KHR5cGVvZiB5Lmc8InUiP3kuZzp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dHlwZW9mIHNlbGY8InUiP3NlbGY6e30pLlVpbnQ4QXJyYXl8fGZ1bmN0aW9uKCl7''@;'; put 'put ''fSxXPXkoNTk5Nyk7ZnVuY3Rpb24gWSgpe31mdW5jdGlvbiBxKG0sQSl7UD1QfHx5KDQzOTApO3ZhciBhZT1BIGluc3RhbmNlb2YgUDt0aGlzLm9iamVjdE1vZGU9ISEobT1tfHx7fSkub2JqZWN0TW9kZSxhZSYmKHRoaXMub2JqZWN0TW9kZT10aGlzLm9iamVjdE1vZGV8fCEhbS53cml0YWJs''@;'; put 'put ''ZU9iamVjdE1vZGUpO3ZhciB0ZT1tLmhpZ2hXYXRlck1hcmssc2U9bS53cml0YWJsZUhpZ2hXYXRlck1hcms7dGhpcy5oaWdoV2F0ZXJNYXJrPXRlfHwwPT09dGU/dGU6YWUmJihzZXx8MD09PXNlKT9zZTp0aGlzLm9iamVjdE1vZGU/MTY6MTYzODQsdGhpcy5oaWdoV2F0ZXJNYXJrPU1hdGgu''@;'; put 'put ''Zmxvb3IodGhpcy5oaWdoV2F0ZXJNYXJrKSx0aGlzLmZpbmFsQ2FsbGVkPSExLHRoaXMubmVlZERyYWluPSExLHRoaXMuZW5kaW5nPSExLHRoaXMuZW5kZWQ9ITEsdGhpcy5maW5pc2hlZD0hMSx0aGlzLmRlc3Ryb3llZD0hMSx0aGlzLmRlY29kZVN0cmluZ3M9ISghMT09PW0uZGVjb2RlU3Ry''@;'; put 'put ''aW5ncyksdGhpcy5kZWZhdWx0RW5jb2Rpbmc9bS5kZWZhdWx0RW5jb2Rpbmd8fCJ1dGY4Iix0aGlzLmxlbmd0aD0wLHRoaXMud3JpdGluZz0hMSx0aGlzLmNvcmtlZD0wLHRoaXMuc3luYz0hMCx0aGlzLmJ1ZmZlclByb2Nlc3Npbmc9ITEsdGhpcy5vbndyaXRlPWZ1bmN0aW9uKEplKXshZnVu''@;'; put 'put ''Y3Rpb24gamUobSxBKXt2YXIgYWU9bS5fd3JpdGFibGVTdGF0ZSx0ZT1hZS5zeW5jLHNlPWFlLndyaXRlY2I7aWYoZnVuY3Rpb24gU2UobSl7bS53cml0aW5nPSExLG0ud3JpdGVjYj1udWxsLG0ubGVuZ3RoLT1tLndyaXRlbGVuLG0ud3JpdGVsZW49MH0oYWUpLEEpIWZ1bmN0aW9uIFRlKG0s''@;'; put 'put ''QSxhZSx0ZSxzZSl7LS1BLnBlbmRpbmdjYixhZT8oXy5uZXh0VGljayhzZSx0ZSksXy5uZXh0VGljayhILG0sQSksbS5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITAsbS5lbWl0KCJlcnJvciIsdGUpKTooc2UodGUpLG0uX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSEwLG0uZW1p''@;'; put 'put ''dCgiZXJyb3IiLHRlKSxIKG0sQSkpfShtLGFlLHRlLEEsc2UpO2Vsc2V7dmFyIHdlPXgoYWUpOyF3ZSYmIWFlLmNvcmtlZCYmIWFlLmJ1ZmZlclByb2Nlc3NpbmcmJmFlLmJ1ZmZlcmVkUmVxdWVzdCYmYihtLGFlKSx0ZT93KFYsbSxhZSx3ZSxzZSk6VihtLGFlLHdlLHNlKX19KEEsSmUpfSx0''@;'; put 'put ''aGlzLndyaXRlY2I9bnVsbCx0aGlzLndyaXRlbGVuPTAsdGhpcy5idWZmZXJlZFJlcXVlc3Q9bnVsbCx0aGlzLmxhc3RCdWZmZXJlZFJlcXVlc3Q9bnVsbCx0aGlzLnBlbmRpbmdjYj0wLHRoaXMucHJlZmluaXNoZWQ9ITEsdGhpcy5lcnJvckVtaXR0ZWQ9ITEsdGhpcy5idWZmZXJlZFJlcXVl''@;'; put 'put ''c3RDb3VudD0wLHRoaXMuY29ya2VkUmVxdWVzdHNGcmVlPW5ldyBCKHRoaXMpfWZ1bmN0aW9uIEoobSl7aWYoUD1QfHx5KDQzOTApLCEoZWUuY2FsbChKLHRoaXMpfHx0aGlzIGluc3RhbmNlb2YgUCkpcmV0dXJuIG5ldyBKKG0pO3RoaXMuX3dyaXRhYmxlU3RhdGU9bmV3IHEobSx0aGlzKSx0''@;'; put 'put ''aGlzLndyaXRhYmxlPSEwLG0mJigiZnVuY3Rpb24iPT10eXBlb2YgbS53cml0ZSYmKHRoaXMuX3dyaXRlPW0ud3JpdGUpLCJmdW5jdGlvbiI9PXR5cGVvZiBtLndyaXRldiYmKHRoaXMuX3dyaXRldj1tLndyaXRldiksImZ1bmN0aW9uIj09dHlwZW9mIG0uZGVzdHJveSYmKHRoaXMuX2Rlc3Ry''@;'; put 'put ''b3k9bS5kZXN0cm95KSwiZnVuY3Rpb24iPT10eXBlb2YgbS5maW5hbCYmKHRoaXMuX2ZpbmFsPW0uZmluYWwpKSx6LmNhbGwodGhpcyl9ZnVuY3Rpb24gX2UobSxBLGFlLHRlLHNlLHdlLFVlKXtBLndyaXRlbGVuPXRlLEEud3JpdGVjYj1VZSxBLndyaXRpbmc9ITAsQS5zeW5jPSEwLGFlP20u''@;'; put 'put ''X3dyaXRldihzZSxBLm9ud3JpdGUpOm0uX3dyaXRlKHNlLHdlLEEub253cml0ZSksQS5zeW5jPSExfWZ1bmN0aW9uIFYobSxBLGFlLHRlKXthZXx8ZnVuY3Rpb24gcChtLEEpezA9PT1BLmxlbmd0aCYmQS5uZWVkRHJhaW4mJihBLm5lZWREcmFpbj0hMSxtLmVtaXQoImRyYWluIikpfShtLEEp''@;'; put 'put ''LEEucGVuZGluZ2NiLS0sdGUoKSxIKG0sQSl9ZnVuY3Rpb24gYihtLEEpe0EuYnVmZmVyUHJvY2Vzc2luZz0hMDt2YXIgYWU9QS5idWZmZXJlZFJlcXVlc3Q7aWYobS5fd3JpdGV2JiZhZSYmYWUubmV4dCl7dmFyIHNlPW5ldyBBcnJheShBLmJ1ZmZlcmVkUmVxdWVzdENvdW50KSx3ZT1BLmNv''@;'; put 'put ''cmtlZFJlcXVlc3RzRnJlZTt3ZS5lbnRyeT1hZTtmb3IodmFyIFVlPTAsSmU9ITA7YWU7KXNlW1VlXT1hZSxhZS5pc0J1Znx8KEplPSExKSxhZT1hZS5uZXh0LFVlKz0xO3NlLmFsbEJ1ZmZlcnM9SmUsX2UobSxBLCEwLEEubGVuZ3RoLHNlLCIiLHdlLmZpbmlzaCksQS5wZW5kaW5nY2IrKyxB''@;'; put 'put ''Lmxhc3RCdWZmZXJlZFJlcXVlc3Q9bnVsbCx3ZS5uZXh0PyhBLmNvcmtlZFJlcXVlc3RzRnJlZT13ZS5uZXh0LHdlLm5leHQ9bnVsbCk6QS5jb3JrZWRSZXF1ZXN0c0ZyZWU9bmV3IEIoQSksQS5idWZmZXJlZFJlcXVlc3RDb3VudD0wfWVsc2V7Zm9yKDthZTspe3ZhciBvdD1hZS5jaHVuaztp''@;'; put 'put ''ZihfZShtLEEsITEsQS5vYmplY3RNb2RlPzE6b3QubGVuZ3RoLG90LGFlLmVuY29kaW5nLGFlLmNhbGxiYWNrKSxhZT1hZS5uZXh0LEEuYnVmZmVyZWRSZXF1ZXN0Q291bnQtLSxBLndyaXRpbmcpYnJlYWt9bnVsbD09PWFlJiYoQS5sYXN0QnVmZmVyZWRSZXF1ZXN0PW51bGwpfUEuYnVmZmVy''@;'; put 'put ''ZWRSZXF1ZXN0PWFlLEEuYnVmZmVyUHJvY2Vzc2luZz0hMX1mdW5jdGlvbiB4KG0pe3JldHVybiBtLmVuZGluZyYmMD09PW0ubGVuZ3RoJiZudWxsPT09bS5idWZmZXJlZFJlcXVlc3QmJiFtLmZpbmlzaGVkJiYhbS53cml0aW5nfWZ1bmN0aW9uIEMobSxBKXttLl9maW5hbChmdW5jdGlvbihh''@;'; put 'put ''ZSl7QS5wZW5kaW5nY2ItLSxhZSYmbS5lbWl0KCJlcnJvciIsYWUpLEEucHJlZmluaXNoZWQ9ITAsbS5lbWl0KCJwcmVmaW5pc2giKSxIKG0sQSl9KX1mdW5jdGlvbiBIKG0sQSl7dmFyIGFlPXgoQSk7cmV0dXJuIGFlJiYoZnVuY3Rpb24gVChtLEEpeyFBLnByZWZpbmlzaGVkJiYhQS5maW5h''@;'; put 'put ''bENhbGxlZCYmKCJmdW5jdGlvbiI9PXR5cGVvZiBtLl9maW5hbD8oQS5wZW5kaW5nY2IrKyxBLmZpbmFsQ2FsbGVkPSEwLF8ubmV4dFRpY2soQyxtLEEpKTooQS5wcmVmaW5pc2hlZD0hMCxtLmVtaXQoInByZWZpbmlzaCIpKSl9KG0sQSksMD09PUEucGVuZGluZ2NiJiYoQS5maW5pc2hlZD0h''@;'; put 'put ''MCxtLmVtaXQoImZpbmlzaCIpKSksYWV9Ri5pbmhlcml0cyhKLHopLHEucHJvdG90eXBlLmdldEJ1ZmZlcj1mdW5jdGlvbigpe2Zvcih2YXIgQT10aGlzLmJ1ZmZlcmVkUmVxdWVzdCxhZT1bXTtBOylhZS5wdXNoKEEpLEE9QS5uZXh0O3JldHVybiBhZX0sZnVuY3Rpb24oKXt0cnl7T2JqZWN0''@;'; put 'put ''LmRlZmluZVByb3BlcnR5KHEucHJvdG90eXBlLCJidWZmZXIiLHtnZXQ6Ty5kZXByZWNhdGUoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRCdWZmZXIoKX0sIl93cml0YWJsZVN0YXRlLmJ1ZmZlciBpcyBkZXByZWNhdGVkLiBVc2UgX3dyaXRhYmxlU3RhdGUuZ2V0QnVmZmVyIGluc3RlYWQu''@;'; put 'put ''IiwiREVQMDAwMyIpfSl9Y2F0Y2h7fX0oKSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuaGFzSW5zdGFuY2UmJiJmdW5jdGlvbiI9PXR5cGVvZiBGdW5jdGlvbi5wcm90b3R5cGVbU3ltYm9sLmhhc0luc3RhbmNlXT8oZWU9RnVuY3Rpb24ucHJvdG90eXBlW1N5bWJvbC5oYXNJ''@;'; put 'put ''bnN0YW5jZV0sT2JqZWN0LmRlZmluZVByb3BlcnR5KEosU3ltYm9sLmhhc0luc3RhbmNlLHt2YWx1ZTpmdW5jdGlvbihtKXtyZXR1cm4hIWVlLmNhbGwodGhpcyxtKXx8dGhpcz09PUomJm0mJm0uX3dyaXRhYmxlU3RhdGUgaW5zdGFuY2VvZiBxfX0pKTplZT1mdW5jdGlvbihtKXtyZXR1cm4g''@;'; put 'put ''bSBpbnN0YW5jZW9mIHRoaXN9LEoucHJvdG90eXBlLnBpcGU9ZnVuY3Rpb24oKXt0aGlzLmVtaXQoImVycm9yIixuZXcgRXJyb3IoIkNhbm5vdCBwaXBlLCBub3QgcmVhZGFibGUiKSl9LEoucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKG0sQSxhZSl7dmFyIHRlPXRoaXMuX3dyaXRhYmxlU3Rh''@;'; put 'put ''dGUsc2U9ITEsd2U9IXRlLm9iamVjdE1vZGUmJmZ1bmN0aW9uIFUobSl7cmV0dXJuIE4uaXNCdWZmZXIobSl8fG0gaW5zdGFuY2VvZiBMfShtKTtyZXR1cm4gd2UmJiFOLmlzQnVmZmVyKG0pJiYobT1mdW5jdGlvbiBLKG0pe3JldHVybiBOLmZyb20obSl9KG0pKSwiZnVuY3Rpb24iPT10eXBl''@;'; put 'put ''b2YgQSYmKGFlPUEsQT1udWxsKSx3ZT9BPSJidWZmZXIiOkF8fChBPXRlLmRlZmF1bHRFbmNvZGluZyksImZ1bmN0aW9uIiE9dHlwZW9mIGFlJiYoYWU9WSksdGUuZW5kZWQ/ZnVuY3Rpb24gbmUobSxBKXt2YXIgYWU9bmV3IEVycm9yKCJ3cml0ZSBhZnRlciBlbmQiKTttLmVtaXQoImVycm9y''@;'; put 'put ''IixhZSksXy5uZXh0VGljayhBLGFlKX0odGhpcyxhZSk6KHdlfHxmdW5jdGlvbiBpZShtLEEsYWUsdGUpe3ZhciBzZT0hMCx3ZT0hMTtyZXR1cm4gbnVsbD09PWFlP3dlPW5ldyBUeXBlRXJyb3IoIk1heSBub3Qgd3JpdGUgbnVsbCB2YWx1ZXMgdG8gc3RyZWFtIik6InN0cmluZyIhPXR5cGVv''@;'; put 'put ''ZiBhZSYmdm9pZCAwIT09YWUmJiFBLm9iamVjdE1vZGUmJih3ZT1uZXcgVHlwZUVycm9yKCJJbnZhbGlkIG5vbi1zdHJpbmcvYnVmZmVyIGNodW5rIikpLHdlJiYobS5lbWl0KCJlcnJvciIsd2UpLF8ubmV4dFRpY2sodGUsd2UpLHNlPSExKSxzZX0odGhpcyx0ZSxtLGFlKSkmJih0ZS5wZW5k''@;'; put 'put ''aW5nY2IrKyxzZT1mdW5jdGlvbiBtZShtLEEsYWUsdGUsc2Usd2Upe2lmKCFhZSl7dmFyIFVlPWZ1bmN0aW9uIGxlKG0sQSxhZSl7cmV0dXJuIW0ub2JqZWN0TW9kZSYmITEhPT1tLmRlY29kZVN0cmluZ3MmJiJzdHJpbmciPT10eXBlb2YgQSYmKEE9Ti5mcm9tKEEsYWUpKSxBfShBLHRlLHNl''@;'; put 'put ''KTt0ZSE9PVVlJiYoYWU9ITAsc2U9ImJ1ZmZlciIsdGU9VWUpfXZhciBKZT1BLm9iamVjdE1vZGU/MTp0ZS5sZW5ndGg7QS5sZW5ndGgrPUplO3ZhciBvdD1BLmxlbmd0aDxBLmhpZ2hXYXRlck1hcms7aWYob3R8fChBLm5lZWREcmFpbj0hMCksQS53cml0aW5nfHxBLmNvcmtlZCl7dmFyIHhl''@;'; put 'put ''PUEubGFzdEJ1ZmZlcmVkUmVxdWVzdDtBLmxhc3RCdWZmZXJlZFJlcXVlc3Q9e2NodW5rOnRlLGVuY29kaW5nOnNlLGlzQnVmOmFlLGNhbGxiYWNrOndlLG5leHQ6bnVsbH0seGU/eGUubmV4dD1BLmxhc3RCdWZmZXJlZFJlcXVlc3Q6QS5idWZmZXJlZFJlcXVlc3Q9QS5sYXN0QnVmZmVyZWRS''@;'; put 'put ''ZXF1ZXN0LEEuYnVmZmVyZWRSZXF1ZXN0Q291bnQrPTF9ZWxzZSBfZShtLEEsITEsSmUsdGUsc2Usd2UpO3JldHVybiBvdH0odGhpcyx0ZSx3ZSxtLEEsYWUpKSxzZX0sSi5wcm90b3R5cGUuY29yaz1mdW5jdGlvbigpe3RoaXMuX3dyaXRhYmxlU3RhdGUuY29ya2VkKyt9LEoucHJvdG90eXBl''@;'; put 'put ''LnVuY29yaz1mdW5jdGlvbigpe3ZhciBtPXRoaXMuX3dyaXRhYmxlU3RhdGU7bS5jb3JrZWQmJihtLmNvcmtlZC0tLCFtLndyaXRpbmcmJiFtLmNvcmtlZCYmIW0uYnVmZmVyUHJvY2Vzc2luZyYmbS5idWZmZXJlZFJlcXVlc3QmJmIodGhpcyxtKSl9LEoucHJvdG90eXBlLnNldERlZmF1bHRF''@;'; put 'put ''bmNvZGluZz1mdW5jdGlvbihBKXtpZigic3RyaW5nIj09dHlwZW9mIEEmJihBPUEudG9Mb3dlckNhc2UoKSksIShbImhleCIsInV0ZjgiLCJ1dGYtOCIsImFzY2lpIiwiYmluYXJ5IiwiYmFzZTY0IiwidWNzMiIsInVjcy0yIiwidXRmMTZsZSIsInV0Zi0xNmxlIiwicmF3Il0uaW5kZXhPZigo''@;'; put 'put ''QSsiIikudG9Mb3dlckNhc2UoKSk+LTEpKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrQSk7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVmYXVsdEVuY29kaW5nPUEsdGhpc30sT2JqZWN0LmRlZmluZVByb3BlcnR5KEoucHJvdG90eXBlLCJ3cml0YWJsZUhp''@;'; put 'put ''Z2hXYXRlck1hcmsiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmhpZ2hXYXRlck1hcmt9fSksSi5wcm90b3R5cGUuX3dyaXRlPWZ1bmN0aW9uKG0sQSxhZSl7YWUobmV3IEVycm9yKCJfd3JpdGUoKSBpcyBub3QgaW1wbGVtZW50ZWQi''@;'; put 'put ''KSl9LEoucHJvdG90eXBlLl93cml0ZXY9bnVsbCxKLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24obSxBLGFlKXt2YXIgdGU9dGhpcy5fd3JpdGFibGVTdGF0ZTsiZnVuY3Rpb24iPT10eXBlb2YgbT8oYWU9bSxtPW51bGwsQT1udWxsKToiZnVuY3Rpb24iPT10eXBlb2YgQSYmKGFlPUEsQT1udWxs''@;'; put 'put ''KSxudWxsIT1tJiZ0aGlzLndyaXRlKG0sQSksdGUuY29ya2VkJiYodGUuY29ya2VkPTEsdGhpcy51bmNvcmsoKSksdGUuZW5kaW5nfHxmdW5jdGlvbiBqKG0sQSxhZSl7QS5lbmRpbmc9ITAsSChtLEEpLGFlJiYoQS5maW5pc2hlZD9fLm5leHRUaWNrKGFlKTptLm9uY2UoImZpbmlzaCIsYWUp''@;'; put 'put ''KSxBLmVuZGVkPSEwLG0ud3JpdGFibGU9ITF9KHRoaXMsdGUsYWUpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoSi5wcm90b3R5cGUsImRlc3Ryb3llZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzLl93cml0YWJsZVN0YXRlJiZ0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ry''@;'; put 'put ''b3llZH0sc2V0OmZ1bmN0aW9uKG0pe3RoaXMuX3dyaXRhYmxlU3RhdGUmJih0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD1tKX19KSxKLnByb3RvdHlwZS5kZXN0cm95PVcuZGVzdHJveSxKLnByb3RvdHlwZS5fdW5kZXN0cm95PVcudW5kZXN0cm95LEoucHJvdG90eXBlLl9kZXN0cm95''@;'; put 'put ''PWZ1bmN0aW9uKG0sQSl7dGhpcy5lbmQoKSxBKG0pfX0sMjI2NzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgXz15KDE1NzIpLkJ1ZmZlcixnPXkoNjQxOSk7ZnVuY3Rpb24gQih3LFAsRil7dy5jb3B5KFAsRil9dWUuZXhwb3J0cz1mdW5jdGlvbigpe2Z1bmN0aW9uIHcoKXsoZnVuY3Rp''@;'; put 'put ''b24gSSh3LFApe2lmKCEodyBpbnN0YW5jZW9mIFApKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSkodGhpcyx3KSx0aGlzLmhlYWQ9bnVsbCx0aGlzLnRhaWw9bnVsbCx0aGlzLmxlbmd0aD0wfXJldHVybiB3LnByb3RvdHlwZS5wdXNo''@;'; put 'put ''PWZ1bmN0aW9uKEYpe3ZhciBPPXtkYXRhOkYsbmV4dDpudWxsfTt0aGlzLmxlbmd0aD4wP3RoaXMudGFpbC5uZXh0PU86dGhpcy5oZWFkPU8sdGhpcy50YWlsPU8sKyt0aGlzLmxlbmd0aH0sdy5wcm90b3R5cGUudW5zaGlmdD1mdW5jdGlvbihGKXt2YXIgTz17ZGF0YTpGLG5leHQ6dGhpcy5o''@;'; put 'put ''ZWFkfTswPT09dGhpcy5sZW5ndGgmJih0aGlzLnRhaWw9TyksdGhpcy5oZWFkPU8sKyt0aGlzLmxlbmd0aH0sdy5wcm90b3R5cGUuc2hpZnQ9ZnVuY3Rpb24oKXtpZigwIT09dGhpcy5sZW5ndGgpe3ZhciBGPXRoaXMuaGVhZC5kYXRhO3JldHVybiB0aGlzLmhlYWQ9MT09PXRoaXMubGVuZ3Ro''@;'; put 'put ''P3RoaXMudGFpbD1udWxsOnRoaXMuaGVhZC5uZXh0LC0tdGhpcy5sZW5ndGgsRn19LHcucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5oZWFkPXRoaXMudGFpbD1udWxsLHRoaXMubGVuZ3RoPTB9LHcucHJvdG90eXBlLmpvaW49ZnVuY3Rpb24oRil7aWYoMD09PXRoaXMubGVuZ3Ro''@;'; put 'put ''KXJldHVybiIiO2Zvcih2YXIgTz10aGlzLmhlYWQsej0iIitPLmRhdGE7Tz1PLm5leHQ7KXorPUYrTy5kYXRhO3JldHVybiB6fSx3LnByb3RvdHlwZS5jb25jYXQ9ZnVuY3Rpb24oRil7aWYoMD09PXRoaXMubGVuZ3RoKXJldHVybiBfLmFsbG9jKDApO2Zvcih2YXIgTz1fLmFsbG9jVW5zYWZl''@;'; put 'put ''KEY+Pj4wKSx6PXRoaXMuaGVhZCxOPTA7ejspQih6LmRhdGEsTyxOKSxOKz16LmRhdGEubGVuZ3RoLHo9ei5uZXh0O3JldHVybiBPfSx3fSgpLGcmJmcuaW5zcGVjdCYmZy5pbnNwZWN0LmN1c3RvbSYmKHVlLmV4cG9ydHMucHJvdG90eXBlW2cuaW5zcGVjdC5jdXN0b21dPWZ1bmN0aW9uKCl7''@;'; put 'put ''dmFyIHc9Zy5pbnNwZWN0KHtsZW5ndGg6dGhpcy5sZW5ndGh9KTtyZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5uYW1lKyIgIit3fSl9LDU5OTc6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg4MjEyKTtmdW5jdGlvbiBCKHcsUCl7dy5lbWl0KCJlcnJvciIsUCl9dWUuZXhwb3J0cz17''@;'; put 'put ''ZGVzdHJveTpmdW5jdGlvbiBfKHcsUCl7dmFyIEY9dGhpcztyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZSYmdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWR8fHRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPyhQP1Aodyk6dyYmKHRoaXMuX3dy''@;'; put 'put ''aXRhYmxlU3RhdGU/dGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWR8fCh0aGlzLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMCxJLm5leHRUaWNrKEIsdGhpcyx3KSk6SS5uZXh0VGljayhCLHRoaXMsdykpLHRoaXMpOih0aGlzLl9yZWFkYWJsZVN0YXRlJiYodGhpcy5fcmVh''@;'; put 'put ''ZGFibGVTdGF0ZS5kZXN0cm95ZWQ9ITApLHRoaXMuX3dyaXRhYmxlU3RhdGUmJih0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD0hMCksdGhpcy5fZGVzdHJveSh3fHxudWxsLGZ1bmN0aW9uKE4peyFQJiZOP0YuX3dyaXRhYmxlU3RhdGU/Ri5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0''@;'; put 'put ''ZWR8fChGLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMCxJLm5leHRUaWNrKEIsRixOKSk6SS5uZXh0VGljayhCLEYsTik6UCYmUChOKX0pLHRoaXMpfSx1bmRlc3Ryb3k6ZnVuY3Rpb24gZygpe3RoaXMuX3JlYWRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3ll''@;'; put 'put ''ZD0hMSx0aGlzLl9yZWFkYWJsZVN0YXRlLnJlYWRpbmc9ITEsdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmRlZD0hMSx0aGlzLl9yZWFkYWJsZVN0YXRlLmVuZEVtaXR0ZWQ9ITEpLHRoaXMuX3dyaXRhYmxlU3RhdGUmJih0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD0hMSx0aGlzLl93cml0''@;'; put 'put ''YWJsZVN0YXRlLmVuZGVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kaW5nPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZmluYWxDYWxsZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5wcmVmaW5pc2hlZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLmZpbmlzaGVkPSExLHRoaXMuX3dyaXRhYmxl''@;'; put 'put ''U3RhdGUuZXJyb3JFbWl0dGVkPSExKX19fSw5ODE5Oih1ZSxYLHkpPT57dWUuZXhwb3J0cz15KDcxODcpLkV2ZW50RW1pdHRlcn0sMTU3MjoodWUsWCx5KT0+e3ZhciBJPXkoODc2NCksXz1JLkJ1ZmZlcjtmdW5jdGlvbiBnKHcsUCl7Zm9yKHZhciBGIGluIHcpUFtGXT13W0ZdfWZ1bmN0aW9u''@;'; put 'put ''IEIodyxQLEYpe3JldHVybiBfKHcsUCxGKX1fLmZyb20mJl8uYWxsb2MmJl8uYWxsb2NVbnNhZmUmJl8uYWxsb2NVbnNhZmVTbG93P3VlLmV4cG9ydHM9STooZyhJLFgpLFguQnVmZmVyPUIpLGcoXyxCKSxCLmZyb209ZnVuY3Rpb24odyxQLEYpe2lmKCJudW1iZXIiPT10eXBlb2Ygdyl0aHJv''@;'; put 'put ''dyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlciIpO3JldHVybiBfKHcsUCxGKX0sQi5hbGxvYz1mdW5jdGlvbih3LFAsRil7aWYoIm51bWJlciIhPXR5cGVvZiB3KXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTt2YXIg''@;'; put 'put ''Tz1fKHcpO3JldHVybiB2b2lkIDAhPT1QPyJzdHJpbmciPT10eXBlb2YgRj9PLmZpbGwoUCxGKTpPLmZpbGwoUCk6Ty5maWxsKDApLE99LEIuYWxsb2NVbnNhZmU9ZnVuY3Rpb24odyl7aWYoIm51bWJlciIhPXR5cGVvZiB3KXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUg''@;'; put 'put ''YSBudW1iZXIiKTtyZXR1cm4gXyh3KX0sQi5hbGxvY1Vuc2FmZVNsb3c9ZnVuY3Rpb24odyl7aWYoIm51bWJlciIhPXR5cGVvZiB3KXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gSS5TbG93QnVmZmVyKHcpfX0sMzg3MjoodWUsWCx5KT0+''@;'; put 'put ''eyhYPXVlLmV4cG9ydHM9eSg0OTYwKSkuU3RyZWFtPVgsWC5SZWFkYWJsZT1YLFguV3JpdGFibGU9eSgyMDEwKSxYLkR1cGxleD15KDQzOTApLFguVHJhbnNmb3JtPXkoMzkxMiksWC5QYXNzVGhyb3VnaD15KDEyOTQpfSwyMjIxOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMzM2''@;'; put 'put ''NCkuQnVmZmVyLF89SS5pc0VuY29kaW5nfHxmdW5jdGlvbihKKXtzd2l0Y2goKEo9IiIrSikmJkoudG9Mb3dlckNhc2UoKSl7Y2FzZSJoZXgiOmNhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6Y2FzZSJhc2NpaSI6Y2FzZSJiaW5hcnkiOmNhc2UiYmFzZTY0IjpjYXNlInVjczIiOmNhc2UidWNzLTIi''@;'; put 'put ''OmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6Y2FzZSJyYXciOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fTtmdW5jdGlvbiB3KEope3ZhciBuZTtzd2l0Y2godGhpcy5lbmNvZGluZz1mdW5jdGlvbiBCKEope3ZhciBuZT1mdW5jdGlvbiBnKEope2lmKCFKKXJldHVybiJ1dGY4Ijtm''@;'; put 'put ''b3IodmFyIG5lOzspc3dpdGNoKEope2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuInV0ZjgiO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4idXRmMTZsZSI7Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4ibGF0aW4x''@;'; put 'put ''IjtjYXNlImJhc2U2NCI6Y2FzZSJhc2NpaSI6Y2FzZSJoZXgiOnJldHVybiBKO2RlZmF1bHQ6aWYobmUpcmV0dXJuO0o9KCIiK0opLnRvTG93ZXJDYXNlKCksbmU9ITB9fShKKTtpZigic3RyaW5nIiE9dHlwZW9mIG5lJiYoSS5pc0VuY29kaW5nPT09X3x8IV8oSikpKXRocm93IG5ldyBFcnJv''@;'; put 'put ''cigiVW5rbm93biBlbmNvZGluZzogIitKKTtyZXR1cm4gbmV8fEp9KEopLHRoaXMuZW5jb2Rpbmcpe2Nhc2UidXRmMTZsZSI6dGhpcy50ZXh0PUssdGhpcy5lbmQ9VSxuZT00O2JyZWFrO2Nhc2UidXRmOCI6dGhpcy5maWxsTGFzdD16LG5lPTQ7YnJlYWs7Y2FzZSJiYXNlNjQiOnRoaXMudGV4''@;'; put 'put ''dD1XLHRoaXMuZW5kPVksbmU9MzticmVhaztkZWZhdWx0OnJldHVybiB0aGlzLndyaXRlPXEsdm9pZCh0aGlzLmVuZD1lZSl9dGhpcy5sYXN0TmVlZD0wLHRoaXMubGFzdFRvdGFsPTAsdGhpcy5sYXN0Q2hhcj1JLmFsbG9jVW5zYWZlKG5lKX1mdW5jdGlvbiBQKEope3JldHVybiBKPD0xMjc/''@;'; put 'put ''MDpKPj41PT02PzI6Sj4+ND09MTQ/MzpKPj4zPT0zMD80Oko+PjY9PTI/LTE6LTJ9ZnVuY3Rpb24geihKKXt2YXIgbmU9dGhpcy5sYXN0VG90YWwtdGhpcy5sYXN0TmVlZCxpZT1mdW5jdGlvbiBPKEosbmUsaWUpe2lmKDEyOCE9KDE5MiZuZVswXSkpcmV0dXJuIEoubGFzdE5lZWQ9MCwiXHVm''@;'; put 'put ''ZmZkIjtpZihKLmxhc3ROZWVkPjEmJm5lLmxlbmd0aD4xKXtpZigxMjghPSgxOTImbmVbMV0pKXJldHVybiBKLmxhc3ROZWVkPTEsIlx1ZmZmZCI7aWYoSi5sYXN0TmVlZD4yJiZuZS5sZW5ndGg+MiYmMTI4IT0oMTkyJm5lWzJdKSlyZXR1cm4gSi5sYXN0TmVlZD0yLCJcdWZmZmQifX0odGhp''@;'; put 'put ''cyxKKTtyZXR1cm4gdm9pZCAwIT09aWU/aWU6dGhpcy5sYXN0TmVlZDw9Si5sZW5ndGg/KEouY29weSh0aGlzLmxhc3RDaGFyLG5lLDAsdGhpcy5sYXN0TmVlZCksdGhpcy5sYXN0Q2hhci50b1N0cmluZyh0aGlzLmVuY29kaW5nLDAsdGhpcy5sYXN0VG90YWwpKTooSi5jb3B5KHRoaXMubGFz''@;'; put 'put ''dENoYXIsbmUsMCxKLmxlbmd0aCksdm9pZCh0aGlzLmxhc3ROZWVkLT1KLmxlbmd0aCkpfWZ1bmN0aW9uIEsoSixuZSl7aWYoKEoubGVuZ3RoLW5lKSUyPT0wKXt2YXIgaWU9Si50b1N0cmluZygidXRmMTZsZSIsbmUpO2lmKGllKXt2YXIgbGU9aWUuY2hhckNvZGVBdChpZS5sZW5ndGgtMSk7''@;'; put 'put ''aWYobGU+PTU1Mjk2JiZsZTw9NTYzMTkpcmV0dXJuIHRoaXMubGFzdE5lZWQ9Mix0aGlzLmxhc3RUb3RhbD00LHRoaXMubGFzdENoYXJbMF09SltKLmxlbmd0aC0yXSx0aGlzLmxhc3RDaGFyWzFdPUpbSi5sZW5ndGgtMV0saWUuc2xpY2UoMCwtMSl9cmV0dXJuIGllfXJldHVybiB0aGlzLmxh''@;'; put 'put ''c3ROZWVkPTEsdGhpcy5sYXN0VG90YWw9Mix0aGlzLmxhc3RDaGFyWzBdPUpbSi5sZW5ndGgtMV0sSi50b1N0cmluZygidXRmMTZsZSIsbmUsSi5sZW5ndGgtMSl9ZnVuY3Rpb24gVShKKXt2YXIgbmU9SiYmSi5sZW5ndGg/dGhpcy53cml0ZShKKToiIjtyZXR1cm4gdGhpcy5sYXN0TmVlZD9u''@;'; put 'put ''ZSt0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKCJ1dGYxNmxlIiwwLHRoaXMubGFzdFRvdGFsLXRoaXMubGFzdE5lZWQpOm5lfWZ1bmN0aW9uIFcoSixuZSl7dmFyIGllPShKLmxlbmd0aC1uZSklMztyZXR1cm4gMD09PWllP0oudG9TdHJpbmcoImJhc2U2NCIsbmUpOih0aGlzLmxhc3ROZWVkPTMt''@;'; put 'put ''aWUsdGhpcy5sYXN0VG90YWw9MywxPT09aWU/dGhpcy5sYXN0Q2hhclswXT1KW0oubGVuZ3RoLTFdOih0aGlzLmxhc3RDaGFyWzBdPUpbSi5sZW5ndGgtMl0sdGhpcy5sYXN0Q2hhclsxXT1KW0oubGVuZ3RoLTFdKSxKLnRvU3RyaW5nKCJiYXNlNjQiLG5lLEoubGVuZ3RoLWllKSl9ZnVuY3Rp''@;'; put 'put ''b24gWShKKXt2YXIgbmU9SiYmSi5sZW5ndGg/dGhpcy53cml0ZShKKToiIjtyZXR1cm4gdGhpcy5sYXN0TmVlZD9uZSt0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKCJiYXNlNjQiLDAsMy10aGlzLmxhc3ROZWVkKTpuZX1mdW5jdGlvbiBxKEope3JldHVybiBKLnRvU3RyaW5nKHRoaXMuZW5jb2Rp''@;'; put 'put ''bmcpfWZ1bmN0aW9uIGVlKEope3JldHVybiBKJiZKLmxlbmd0aD90aGlzLndyaXRlKEopOiIifVgucz13LHcucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKEope2lmKDA9PT1KLmxlbmd0aClyZXR1cm4iIjt2YXIgbmUsaWU7aWYodGhpcy5sYXN0TmVlZCl7aWYodm9pZCAwPT09KG5lPXRoaXMu''@;'; put 'put ''ZmlsbExhc3QoSikpKXJldHVybiIiO2llPXRoaXMubGFzdE5lZWQsdGhpcy5sYXN0TmVlZD0wfWVsc2UgaWU9MDtyZXR1cm4gaWU8Si5sZW5ndGg/bmU/bmUrdGhpcy50ZXh0KEosaWUpOnRoaXMudGV4dChKLGllKTpuZXx8IiJ9LHcucHJvdG90eXBlLmVuZD1mdW5jdGlvbiBMKEope3ZhciBu''@;'; put 'put ''ZT1KJiZKLmxlbmd0aD90aGlzLndyaXRlKEopOiIiO3JldHVybiB0aGlzLmxhc3ROZWVkP25lKyJcdWZmZmQiOm5lfSx3LnByb3RvdHlwZS50ZXh0PWZ1bmN0aW9uIE4oSixuZSl7dmFyIGllPWZ1bmN0aW9uIEYoSixuZSxpZSl7dmFyIGxlPW5lLmxlbmd0aC0xO2lmKGxlPGllKXJldHVybiAw''@;'; put 'put ''O3ZhciBtZT1QKG5lW2xlXSk7cmV0dXJuIG1lPj0wPyhtZT4wJiYoSi5sYXN0TmVlZD1tZS0xKSxtZSk6LS1sZTxpZXx8LTI9PT1tZT8wOihtZT1QKG5lW2xlXSkpPj0wPyhtZT4wJiYoSi5sYXN0TmVlZD1tZS0yKSxtZSk6LS1sZTxpZXx8LTI9PT1tZT8wOihtZT1QKG5lW2xlXSkpPj0wPyht''@;'; put 'put ''ZT4wJiYoMj09PW1lP21lPTA6Si5sYXN0TmVlZD1tZS0zKSxtZSk6MH0odGhpcyxKLG5lKTtpZighdGhpcy5sYXN0TmVlZClyZXR1cm4gSi50b1N0cmluZygidXRmOCIsbmUpO3RoaXMubGFzdFRvdGFsPWllO3ZhciBsZT1KLmxlbmd0aC0oaWUtdGhpcy5sYXN0TmVlZCk7cmV0dXJuIEouY29w''@;'; put 'put ''eSh0aGlzLmxhc3RDaGFyLDAsbGUpLEoudG9TdHJpbmcoInV0ZjgiLG5lLGxlKX0sdy5wcm90b3R5cGUuZmlsbExhc3Q9ZnVuY3Rpb24oSil7aWYodGhpcy5sYXN0TmVlZDw9Si5sZW5ndGgpcmV0dXJuIEouY29weSh0aGlzLmxhc3RDaGFyLHRoaXMubGFzdFRvdGFsLXRoaXMubGFzdE5lZWQs''@;'; put 'put ''MCx0aGlzLmxhc3ROZWVkKSx0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcsMCx0aGlzLmxhc3RUb3RhbCk7Si5jb3B5KHRoaXMubGFzdENoYXIsdGhpcy5sYXN0VG90YWwtdGhpcy5sYXN0TmVlZCwwLEoubGVuZ3RoKSx0aGlzLmxhc3ROZWVkLT1KLmxlbmd0aH19LDMzNjQ6''@;'; put 'put ''KHVlLFgseSk9Pnt2YXIgST15KDg3NjQpLF89SS5CdWZmZXI7ZnVuY3Rpb24gZyh3LFApe2Zvcih2YXIgRiBpbiB3KVBbRl09d1tGXX1mdW5jdGlvbiBCKHcsUCxGKXtyZXR1cm4gXyh3LFAsRil9Xy5mcm9tJiZfLmFsbG9jJiZfLmFsbG9jVW5zYWZlJiZfLmFsbG9jVW5zYWZlU2xvdz91ZS5l''@;'; put 'put ''eHBvcnRzPUk6KGcoSSxYKSxYLkJ1ZmZlcj1CKSxnKF8sQiksQi5mcm9tPWZ1bmN0aW9uKHcsUCxGKXtpZigibnVtYmVyIj09dHlwZW9mIHcpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBub3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gXyh3LFAsRil9LEIuYWxsb2M9ZnVuY3Rp''@;'; put 'put ''b24odyxQLEYpe2lmKCJudW1iZXIiIT10eXBlb2Ygdyl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7dmFyIE89Xyh3KTtyZXR1cm4gdm9pZCAwIT09UD8ic3RyaW5nIj09dHlwZW9mIEY/Ty5maWxsKFAsRik6Ty5maWxsKFApOk8uZmlsbCgwKSxPfSxC''@;'; put 'put ''LmFsbG9jVW5zYWZlPWZ1bmN0aW9uKHcpe2lmKCJudW1iZXIiIT10eXBlb2Ygdyl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7cmV0dXJuIF8odyl9LEIuYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKHcpe2lmKCJudW1iZXIiIT10eXBlb2Ygdyl0aHJv''@;'; put 'put ''dyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7cmV0dXJuIEkuU2xvd0J1ZmZlcih3KX19LDcyOTU6KHVlLFgseSk9Pnt2YXIgST15KDg3NjQpLkJ1ZmZlcjt1ZS5leHBvcnRzPWZ1bmN0aW9uKGcsQil7Zm9yKHZhciB3PU1hdGgubWluKGcubGVuZ3RoLEIubGVu''@;'; put 'put ''Z3RoKSxQPW5ldyBJKHcpLEY9MDtGPHc7KytGKVBbRl09Z1tGXV5CW0ZdO3JldHVybiBQfX0sODc2NDoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDUxMDgpO2NvbnN0IF89eSg5NzQyKSxnPXkoNjQ1KSxCPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJmdW5jdGlvbiI9PXR5''@;'; put 'put ''cGVvZiBTeW1ib2wuZm9yP1N5bWJvbC5mb3IoIm5vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tIik6bnVsbDtYLkJ1ZmZlcj1PLFguU2xvd0J1ZmZlcj1mdW5jdGlvbiBuZSgkZSl7cmV0dXJuKyRlIT0kZSYmKCRlPTApLE8uYWxsb2MoKyRlKX0sWC5JTlNQRUNUX01BWF9CWVRFUz01MDtjb25z''@;'; put 'put ''dCB3PTIxNDc0ODM2NDc7ZnVuY3Rpb24gRigkZSl7aWYoJGU+dyl0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlICInKyRlKyciIGlzIGludmFsaWQgZm9yIG9wdGlvbiAic2l6ZSInKTtjb25zdCB0dD1uZXcgVWludDhBcnJheSgkZSk7cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVP''@;'; put 'put ''Zih0dCxPLnByb3RvdHlwZSksdHR9ZnVuY3Rpb24gTygkZSx0dCxIZSl7aWYoIm51bWJlciI9PXR5cGVvZiAkZSl7aWYoInN0cmluZyI9PXR5cGVvZiB0dCl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInN0cmluZyIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIHN0cmluZy4gUmVjZWl2ZWQg''@;'; put 'put ''dHlwZSBudW1iZXInKTtyZXR1cm4gSygkZSl9cmV0dXJuIHooJGUsdHQsSGUpfWZ1bmN0aW9uIHooJGUsdHQsSGUpe2lmKCJzdHJpbmciPT10eXBlb2YgJGUpcmV0dXJuIGZ1bmN0aW9uIFUoJGUsdHQpe2lmKCgic3RyaW5nIiE9dHlwZW9mIHR0fHwiIj09PXR0KSYmKHR0PSJ1dGY4IiksIU8u''@;'; put 'put ''aXNFbmNvZGluZyh0dCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIit0dCk7Y29uc3QgSGU9MHxpZSgkZSx0dCk7bGV0IHV0PUYoSGUpO2NvbnN0IHF0PXV0LndyaXRlKCRlLHR0KTtyZXR1cm4gcXQhPT1IZSYmKHV0PXV0LnNsaWNlKDAscXQpKSx1dH0oJGUsdHQp''@;'; put 'put ''O2lmKEFycmF5QnVmZmVyLmlzVmlldygkZSkpcmV0dXJuIGZ1bmN0aW9uIFkoJGUpe2lmKHVuKCRlLFVpbnQ4QXJyYXkpKXtjb25zdCB0dD1uZXcgVWludDhBcnJheSgkZSk7cmV0dXJuIHEodHQuYnVmZmVyLHR0LmJ5dGVPZmZzZXQsdHQuYnl0ZUxlbmd0aCl9cmV0dXJuIFcoJGUpfSgkZSk7''@;'; put 'put ''aWYobnVsbD09JGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgb3IgQXJyYXktbGlrZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgIit0eXBlb2YgJGUpO2lmKHVuKCRl''@;'; put 'put ''LEFycmF5QnVmZmVyKXx8JGUmJnVuKCRlLmJ1ZmZlcixBcnJheUJ1ZmZlcil8fHR5cGVvZiBTaGFyZWRBcnJheUJ1ZmZlcjwidSImJih1bigkZSxTaGFyZWRBcnJheUJ1ZmZlcil8fCRlJiZ1bigkZS5idWZmZXIsU2hhcmVkQXJyYXlCdWZmZXIpKSlyZXR1cm4gcSgkZSx0dCxIZSk7aWYoIm51''@;'; put 'put ''bWJlciI9PXR5cGVvZiAkZSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInZhbHVlIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBvZiB0eXBlIG51bWJlci4gUmVjZWl2ZWQgdHlwZSBudW1iZXInKTtjb25zdCB1dD0kZS52YWx1ZU9mJiYkZS52YWx1ZU9mKCk7aWYobnVsbCE9dXQmJnV0IT09JGUp''@;'; put 'put ''cmV0dXJuIE8uZnJvbSh1dCx0dCxIZSk7Y29uc3QgcXQ9ZnVuY3Rpb24gZWUoJGUpe2lmKE8uaXNCdWZmZXIoJGUpKXtjb25zdCB0dD0wfEooJGUubGVuZ3RoKSxIZT1GKHR0KTtyZXR1cm4gMD09PUhlLmxlbmd0aHx8JGUuY29weShIZSwwLDAsdHQpLEhlfXJldHVybiB2b2lkIDAhPT0kZS5s''@;'; put 'put ''ZW5ndGg/Im51bWJlciIhPXR5cGVvZiAkZS5sZW5ndGh8fHl0KCRlLmxlbmd0aCk/RigwKTpXKCRlKToiQnVmZmVyIj09PSRlLnR5cGUmJkFycmF5LmlzQXJyYXkoJGUuZGF0YSk/VygkZS5kYXRhKTp2b2lkIDB9KCRlKTtpZihxdClyZXR1cm4gcXQ7aWYodHlwZW9mIFN5bWJvbDwidSImJm51''@;'; put 'put ''bGwhPVN5bWJvbC50b1ByaW1pdGl2ZSYmImZ1bmN0aW9uIj09dHlwZW9mICRlW1N5bWJvbC50b1ByaW1pdGl2ZV0pcmV0dXJuIE8uZnJvbSgkZVtTeW1ib2wudG9QcmltaXRpdmVdKCJzdHJpbmciKSx0dCxIZSk7dGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIGZpcnN0IGFyZ3VtZW50IG11c3Qg''@;'; put 'put ''YmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgb3IgQXJyYXktbGlrZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgIit0eXBlb2YgJGUpfWZ1bmN0aW9uIE4oJGUpe2lmKCJudW1iZXIiIT10eXBlb2YgJGUpdGhyb3cgbmV3IFR5cGVFcnJvcignInNpemUi''@;'; put 'put ''IGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBudW1iZXInKTtpZigkZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgIicrJGUrJyIgaXMgaW52YWxpZCBmb3Igb3B0aW9uICJzaXplIicpfWZ1bmN0aW9uIEsoJGUpe3JldHVybiBOKCRlKSxGKCRlPDA/MDowfEooJGUpKX1mdW5j''@;'; put 'put ''dGlvbiBXKCRlKXtjb25zdCB0dD0kZS5sZW5ndGg8MD8wOjB8SigkZS5sZW5ndGgpLEhlPUYodHQpO2ZvcihsZXQgdXQ9MDt1dDx0dDt1dCs9MSlIZVt1dF09MjU1JiRlW3V0XTtyZXR1cm4gSGV9ZnVuY3Rpb24gcSgkZSx0dCxIZSl7aWYodHQ8MHx8JGUuYnl0ZUxlbmd0aDx0dCl0aHJvdyBu''@;'; put 'put ''ZXcgUmFuZ2VFcnJvcignIm9mZnNldCIgaXMgb3V0c2lkZSBvZiBidWZmZXIgYm91bmRzJyk7aWYoJGUuYnl0ZUxlbmd0aDx0dCsoSGV8fDApKXRocm93IG5ldyBSYW5nZUVycm9yKCcibGVuZ3RoIiBpcyBvdXRzaWRlIG9mIGJ1ZmZlciBib3VuZHMnKTtsZXQgdXQ7cmV0dXJuIHV0PXZvaWQg''@;'; put 'put ''MD09PXR0JiZ2b2lkIDA9PT1IZT9uZXcgVWludDhBcnJheSgkZSk6dm9pZCAwPT09SGU/bmV3IFVpbnQ4QXJyYXkoJGUsdHQpOm5ldyBVaW50OEFycmF5KCRlLHR0LEhlKSxPYmplY3Quc2V0UHJvdG90eXBlT2YodXQsTy5wcm90b3R5cGUpLHV0fWZ1bmN0aW9uIEooJGUpe2lmKCRlPj13KXRo''@;'; put 'put ''cm93IG5ldyBSYW5nZUVycm9yKCJBdHRlbXB0IHRvIGFsbG9jYXRlIEJ1ZmZlciBsYXJnZXIgdGhhbiBtYXhpbXVtIHNpemU6IDB4Iit3LnRvU3RyaW5nKDE2KSsiIGJ5dGVzIik7cmV0dXJuIDB8JGV9ZnVuY3Rpb24gaWUoJGUsdHQpe2lmKE8uaXNCdWZmZXIoJGUpKXJldHVybiAkZS5sZW5n''@;'; put 'put ''dGg7aWYoQXJyYXlCdWZmZXIuaXNWaWV3KCRlKXx8dW4oJGUsQXJyYXlCdWZmZXIpKXJldHVybiAkZS5ieXRlTGVuZ3RoO2lmKCJzdHJpbmciIT10eXBlb2YgJGUpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJzdHJpbmciIGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBC''@;'; put 'put ''dWZmZXIsIG9yIEFycmF5QnVmZmVyLiBSZWNlaXZlZCB0eXBlICcrdHlwZW9mICRlKTtjb25zdCBIZT0kZS5sZW5ndGgsdXQ9YXJndW1lbnRzLmxlbmd0aD4yJiYhMD09PWFyZ3VtZW50c1syXTtpZighdXQmJjA9PT1IZSlyZXR1cm4gMDtsZXQgcXQ9ITE7Zm9yKDs7KXN3aXRjaCh0dCl7Y2Fz''@;'; put 'put ''ZSJhc2NpaSI6Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gSGU7Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpyZXR1cm4ga2UoJGUpLmxlbmd0aDtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIDIqSGU7Y2FzZSJoZXgiOnJl''@;'; put 'put ''dHVybiBIZT4+PjE7Y2FzZSJiYXNlNjQiOnJldHVybiBudCgkZSkubGVuZ3RoO2RlZmF1bHQ6aWYocXQpcmV0dXJuIHV0Py0xOmtlKCRlKS5sZW5ndGg7dHQ9KCIiK3R0KS50b0xvd2VyQ2FzZSgpLHF0PSEwfX1mdW5jdGlvbiBsZSgkZSx0dCxIZSl7bGV0IHV0PSExO2lmKCh2b2lkIDA9PT10''@;'; put 'put ''dHx8dHQ8MCkmJih0dD0wKSx0dD50aGlzLmxlbmd0aHx8KCh2b2lkIDA9PT1IZXx8SGU+dGhpcy5sZW5ndGgpJiYoSGU9dGhpcy5sZW5ndGgpLEhlPD0wKXx8KEhlPj4+PTApPD0odHQ+Pj49MCkpcmV0dXJuIiI7Zm9yKCRlfHwoJGU9InV0ZjgiKTs7KXN3aXRjaCgkZSl7Y2FzZSJoZXgiOnJl''@;'; put 'put ''dHVybiBtKHRoaXMsdHQsSGUpO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIEModGhpcyx0dCxIZSk7Y2FzZSJhc2NpaSI6cmV0dXJuIGoodGhpcyx0dCxIZSk7Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gRSh0aGlzLHR0LEhlKTtjYXNlImJhc2U2NCI6cmV0dXJuIHgo''@;'; put 'put ''dGhpcyx0dCxIZSk7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiBBKHRoaXMsdHQsSGUpO2RlZmF1bHQ6aWYodXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIiskZSk7JGU9KCRlKyIiKS50b0xvd2VyQ2Fz''@;'; put 'put ''ZSgpLHV0PSEwfX1mdW5jdGlvbiBtZSgkZSx0dCxIZSl7Y29uc3QgdXQ9JGVbdHRdOyRlW3R0XT0kZVtIZV0sJGVbSGVdPXV0fWZ1bmN0aW9uIF9lKCRlLHR0LEhlLHV0LHF0KXtpZigwPT09JGUubGVuZ3RoKXJldHVybi0xO2lmKCJzdHJpbmciPT10eXBlb2YgSGU/KHV0PUhlLEhlPTApOkhl''@;'; put 'put ''PjIxNDc0ODM2NDc/SGU9MjE0NzQ4MzY0NzpIZTwtMjE0NzQ4MzY0OCYmKEhlPS0yMTQ3NDgzNjQ4KSx5dChIZT0rSGUpJiYoSGU9cXQ/MDokZS5sZW5ndGgtMSksSGU8MCYmKEhlPSRlLmxlbmd0aCtIZSksSGU+PSRlLmxlbmd0aCl7aWYocXQpcmV0dXJuLTE7SGU9JGUubGVuZ3RoLTF9ZWxz''@;'; put 'put ''ZSBpZihIZTwwKXtpZighcXQpcmV0dXJuLTE7SGU9MH1pZigic3RyaW5nIj09dHlwZW9mIHR0JiYodHQ9Ty5mcm9tKHR0LHV0KSksTy5pc0J1ZmZlcih0dCkpcmV0dXJuIDA9PT10dC5sZW5ndGg/LTE6VGUoJGUsdHQsSGUsdXQscXQpO2lmKCJudW1iZXIiPT10eXBlb2YgdHQpcmV0dXJuIHR0''@;'; put 'put ''Jj0yNTUsImZ1bmN0aW9uIj09dHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2Y/cXQ/VWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKCRlLHR0LEhlKTpVaW50OEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZi5jYWxsKCRlLHR0LEhlKTpUZSgkZSxbdHRdLEhlLHV0''@;'; put 'put ''LHF0KTt0aHJvdyBuZXcgVHlwZUVycm9yKCJ2YWwgbXVzdCBiZSBzdHJpbmcsIG51bWJlciBvciBCdWZmZXIiKX1mdW5jdGlvbiBUZSgkZSx0dCxIZSx1dCxxdCl7bGV0IHNuLFJ0PTEsUHQ9JGUubGVuZ3RoLGNpPXR0Lmxlbmd0aDtpZih2b2lkIDAhPT11dCYmKCJ1Y3MyIj09PSh1dD1TdHJp''@;'; put 'put ''bmcodXQpLnRvTG93ZXJDYXNlKCkpfHwidWNzLTIiPT09dXR8fCJ1dGYxNmxlIj09PXV0fHwidXRmLTE2bGUiPT09dXQpKXtpZigkZS5sZW5ndGg8Mnx8dHQubGVuZ3RoPDIpcmV0dXJuLTE7UnQ9MixQdC89MixjaS89MixIZS89Mn1mdW5jdGlvbiBRdChSaSxobil7cmV0dXJuIDE9PT1SdD9S''@;'; put 'put ''aVtobl06UmkucmVhZFVJbnQxNkJFKGhuKlJ0KX1pZihxdCl7bGV0IFJpPS0xO2Zvcihzbj1IZTtzbjxQdDtzbisrKWlmKFF0KCRlLHNuKT09PVF0KHR0LC0xPT09Umk/MDpzbi1SaSkpe2lmKC0xPT09UmkmJihSaT1zbiksc24tUmkrMT09PWNpKXJldHVybiBSaSpSdH1lbHNlLTEhPT1SaSYm''@;'; put 'put ''KHNuLT1zbi1SaSksUmk9LTF9ZWxzZSBmb3IoSGUrY2k+UHQmJihIZT1QdC1jaSksc249SGU7c24+PTA7c24tLSl7bGV0IFJpPSEwO2ZvcihsZXQgaG49MDtobjxjaTtobisrKWlmKFF0KCRlLHNuK2huKSE9PVF0KHR0LGhuKSl7Umk9ITE7YnJlYWt9aWYoUmkpcmV0dXJuIHNufXJldHVybi0x''@;'; put 'put ''fWZ1bmN0aW9uIFNlKCRlLHR0LEhlLHV0KXtIZT1OdW1iZXIoSGUpfHwwO2NvbnN0IHF0PSRlLmxlbmd0aC1IZTt1dD8odXQ9TnVtYmVyKHV0KSk+cXQmJih1dD1xdCk6dXQ9cXQ7Y29uc3QgUnQ9dHQubGVuZ3RoO2xldCBQdDtmb3IodXQ+UnQvMiYmKHV0PVJ0LzIpLFB0PTA7UHQ8dXQ7KytQ''@;'; put 'put ''dCl7Y29uc3QgY2k9cGFyc2VJbnQodHQuc3Vic3RyKDIqUHQsMiksMTYpO2lmKHl0KGNpKSlyZXR1cm4gUHQ7JGVbSGUrUHRdPWNpfXJldHVybiBQdH1mdW5jdGlvbiBqZSgkZSx0dCxIZSx1dCl7cmV0dXJuIFFlKGtlKHR0LCRlLmxlbmd0aC1IZSksJGUsSGUsdXQpfWZ1bmN0aW9uIFYoJGUs''@;'; put 'put ''dHQsSGUsdXQpe3JldHVybiBRZShmdW5jdGlvbiBBZSgkZSl7Y29uc3QgdHQ9W107Zm9yKGxldCBIZT0wO0hlPCRlLmxlbmd0aDsrK0hlKXR0LnB1c2goMjU1JiRlLmNoYXJDb2RlQXQoSGUpKTtyZXR1cm4gdHR9KHR0KSwkZSxIZSx1dCl9ZnVuY3Rpb24gcCgkZSx0dCxIZSx1dCl7cmV0dXJu''@;'; put 'put ''IFFlKG50KHR0KSwkZSxIZSx1dCl9ZnVuY3Rpb24gYigkZSx0dCxIZSx1dCl7cmV0dXJuIFFlKGZ1bmN0aW9uIF90KCRlLHR0KXtsZXQgSGUsdXQscXQ7Y29uc3QgUnQ9W107Zm9yKGxldCBQdD0wO1B0PCRlLmxlbmd0aCYmISgodHQtPTIpPDApOysrUHQpSGU9JGUuY2hhckNvZGVBdChQdCks''@;'; put 'put ''dXQ9SGU+PjgscXQ9SGUlMjU2LFJ0LnB1c2gocXQpLFJ0LnB1c2godXQpO3JldHVybiBSdH0odHQsJGUubGVuZ3RoLUhlKSwkZSxIZSx1dCl9ZnVuY3Rpb24geCgkZSx0dCxIZSl7cmV0dXJuIF8uZnJvbUJ5dGVBcnJheSgwPT09dHQmJkhlPT09JGUubGVuZ3RoPyRlOiRlLnNsaWNlKHR0LEhl''@;'; put 'put ''KSl9ZnVuY3Rpb24gQygkZSx0dCxIZSl7SGU9TWF0aC5taW4oJGUubGVuZ3RoLEhlKTtjb25zdCB1dD1bXTtsZXQgcXQ9dHQ7Zm9yKDtxdDxIZTspe2NvbnN0IFJ0PSRlW3F0XTtsZXQgUHQ9bnVsbCxjaT1SdD4yMzk/NDpSdD4yMjM/MzpSdD4xOTE/MjoxO2lmKHF0K2NpPD1IZSl7bGV0IFF0''@;'; put 'put ''LHNuLFJpLGhuO3N3aXRjaChjaSl7Y2FzZSAxOlJ0PDEyOCYmKFB0PVJ0KTticmVhaztjYXNlIDI6UXQ9JGVbcXQrMV0sMTI4PT0oMTkyJlF0KSYmKGhuPSgzMSZSdCk8PDZ8NjMmUXQsaG4+MTI3JiYoUHQ9aG4pKTticmVhaztjYXNlIDM6UXQ9JGVbcXQrMV0sc249JGVbcXQrMl0sMTI4PT0o''@;'; put 'put ''MTkyJlF0KSYmMTI4PT0oMTkyJnNuKSYmKGhuPSgxNSZSdCk8PDEyfCg2MyZRdCk8PDZ8NjMmc24saG4+MjA0NyYmKGhuPDU1Mjk2fHxobj41NzM0MykmJihQdD1obikpO2JyZWFrO2Nhc2UgNDpRdD0kZVtxdCsxXSxzbj0kZVtxdCsyXSxSaT0kZVtxdCszXSwxMjg9PSgxOTImUXQpJiYxMjg9''@;'; put 'put ''PSgxOTImc24pJiYxMjg9PSgxOTImUmkpJiYoaG49KDE1JlJ0KTw8MTh8KDYzJlF0KTw8MTJ8KDYzJnNuKTw8Nnw2MyZSaSxobj42NTUzNSYmaG48MTExNDExMiYmKFB0PWhuKSl9fW51bGw9PT1QdD8oUHQ9NjU1MzMsY2k9MSk6UHQ+NjU1MzUmJihQdC09NjU1MzYsdXQucHVzaChQdD4+PjEw''@;'; put 'put ''JjEwMjN8NTUyOTYpLFB0PTU2MzIwfDEwMjMmUHQpLHV0LnB1c2goUHQpLHF0Kz1jaX1yZXR1cm4gZnVuY3Rpb24gSCgkZSl7Y29uc3QgdHQ9JGUubGVuZ3RoO2lmKHR0PD1UKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZywkZSk7bGV0IEhlPSIiLHV0PTA7Zm9yKDt1''@;'; put 'put ''dDx0dDspSGUrPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLCRlLnNsaWNlKHV0LHV0Kz1UKSk7cmV0dXJuIEhlfSh1dCl9WC5rTWF4TGVuZ3RoPXcsIShPLlRZUEVEX0FSUkFZX1NVUFBPUlQ9ZnVuY3Rpb24gUCgpe3RyeXtjb25zdCAkZT1uZXcgVWludDhBcnJheSgxKSx0dD17''@;'; put 'put ''Zm9vOmZ1bmN0aW9uKCl7cmV0dXJuIDQyfX07cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZih0dCxVaW50OEFycmF5LnByb3RvdHlwZSksT2JqZWN0LnNldFByb3RvdHlwZU9mKCRlLHR0KSw0Mj09PSRlLmZvbygpfWNhdGNoe3JldHVybiExfX0oKSkmJnR5cGVvZiBJPCJ1IiYmImZ1bmN0''@;'; put 'put ''aW9uIj09dHlwZW9mIEkuZXJyb3ImJkkuZXJyb3IoIlRoaXMgYnJvd3NlciBsYWNrcyB0eXBlZCBhcnJheSAoVWludDhBcnJheSkgc3VwcG9ydCB3aGljaCBpcyByZXF1aXJlZCBieSBgYnVmZmVyYCB2NS54LiBVc2UgYGJ1ZmZlcmAgdjQueCBpZiB5b3UgcmVxdWlyZSBvbGQgYnJvd3NlciBz''@;'; put 'put ''dXBwb3J0LiIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLnByb3RvdHlwZSwicGFyZW50Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtpZihPLmlzQnVmZmVyKHRoaXMpKXJldHVybiB0aGlzLmJ1ZmZlcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoTy5wcm90b3R5cGUsIm9mZnNl''@;'; put 'put ''dCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7aWYoTy5pc0J1ZmZlcih0aGlzKSlyZXR1cm4gdGhpcy5ieXRlT2Zmc2V0fX0pLE8ucG9vbFNpemU9ODE5MixPLmZyb209ZnVuY3Rpb24oJGUsdHQsSGUpe3JldHVybiB6KCRlLHR0LEhlKX0sT2JqZWN0LnNldFByb3RvdHlwZU9mKE8u''@;'; put 'put ''cHJvdG90eXBlLFVpbnQ4QXJyYXkucHJvdG90eXBlKSxPYmplY3Quc2V0UHJvdG90eXBlT2YoTyxVaW50OEFycmF5KSxPLmFsbG9jPWZ1bmN0aW9uKCRlLHR0LEhlKXtyZXR1cm4gZnVuY3Rpb24gTCgkZSx0dCxIZSl7cmV0dXJuIE4oJGUpLCRlPD0wP0YoJGUpOnZvaWQgMCE9PXR0PyJzdHJp''@;'; put 'put ''bmciPT10eXBlb2YgSGU/RigkZSkuZmlsbCh0dCxIZSk6RigkZSkuZmlsbCh0dCk6RigkZSl9KCRlLHR0LEhlKX0sTy5hbGxvY1Vuc2FmZT1mdW5jdGlvbigkZSl7cmV0dXJuIEsoJGUpfSxPLmFsbG9jVW5zYWZlU2xvdz1mdW5jdGlvbigkZSl7cmV0dXJuIEsoJGUpfSxPLmlzQnVmZmVyPWZ1''@;'; put 'put ''bmN0aW9uKHR0KXtyZXR1cm4gbnVsbCE9dHQmJiEwPT09dHQuX2lzQnVmZmVyJiZ0dCE9PU8ucHJvdG90eXBlfSxPLmNvbXBhcmU9ZnVuY3Rpb24odHQsSGUpe2lmKHVuKHR0LFVpbnQ4QXJyYXkpJiYodHQ9Ty5mcm9tKHR0LHR0Lm9mZnNldCx0dC5ieXRlTGVuZ3RoKSksdW4oSGUsVWludDhB''@;'; put 'put ''cnJheSkmJihIZT1PLmZyb20oSGUsSGUub2Zmc2V0LEhlLmJ5dGVMZW5ndGgpKSwhTy5pc0J1ZmZlcih0dCl8fCFPLmlzQnVmZmVyKEhlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgImJ1ZjEiLCAiYnVmMiIgYXJndW1lbnRzIG11c3QgYmUgb25lIG9mIHR5cGUgQnVmZmVyIG9yIFVpbnQ4''@;'; put 'put ''QXJyYXknKTtpZih0dD09PUhlKXJldHVybiAwO2xldCB1dD10dC5sZW5ndGgscXQ9SGUubGVuZ3RoO2ZvcihsZXQgUnQ9MCxQdD1NYXRoLm1pbih1dCxxdCk7UnQ8UHQ7KytSdClpZih0dFtSdF0hPT1IZVtSdF0pe3V0PXR0W1J0XSxxdD1IZVtSdF07YnJlYWt9cmV0dXJuIHV0PHF0Py0xOnF0''@;'; put 'put ''PHV0PzE6MH0sTy5pc0VuY29kaW5nPWZ1bmN0aW9uKHR0KXtzd2l0Y2goU3RyaW5nKHR0KS50b0xvd2VyQ2FzZSgpKXtjYXNlImhleCI6Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpjYXNlImFzY2lpIjpjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOmNhc2UiYmFzZTY0IjpjYXNlInVjczIiOmNh''@;'; put 'put ''c2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19LE8uY29uY2F0PWZ1bmN0aW9uKHR0LEhlKXtpZighQXJyYXkuaXNBcnJheSh0dCkpdGhyb3cgbmV3IFR5cGVFcnJvcignImxpc3QiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJy''@;'; put 'put ''YXkgb2YgQnVmZmVycycpO2lmKDA9PT10dC5sZW5ndGgpcmV0dXJuIE8uYWxsb2MoMCk7bGV0IHV0O2lmKHZvaWQgMD09PUhlKWZvcihIZT0wLHV0PTA7dXQ8dHQubGVuZ3RoOysrdXQpSGUrPXR0W3V0XS5sZW5ndGg7Y29uc3QgcXQ9Ty5hbGxvY1Vuc2FmZShIZSk7bGV0IFJ0PTA7Zm9yKHV0''@;'; put 'put ''PTA7dXQ8dHQubGVuZ3RoOysrdXQpe2xldCBQdD10dFt1dF07aWYodW4oUHQsVWludDhBcnJheSkpUnQrUHQubGVuZ3RoPnF0Lmxlbmd0aD8oTy5pc0J1ZmZlcihQdCl8fChQdD1PLmZyb20oUHQpKSxQdC5jb3B5KHF0LFJ0KSk6VWludDhBcnJheS5wcm90b3R5cGUuc2V0LmNhbGwocXQsUHQs''@;'; put 'put ''UnQpO2Vsc2V7aWYoIU8uaXNCdWZmZXIoUHQpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0IiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTtQdC5jb3B5KHF0LFJ0KX1SdCs9UHQubGVuZ3RofXJldHVybiBxdH0sTy5ieXRlTGVuZ3RoPWllLE8ucHJvdG90eXBlLl9p''@;'; put 'put ''c0J1ZmZlcj0hMCxPLnByb3RvdHlwZS5zd2FwMTY9ZnVuY3Rpb24oKXtjb25zdCB0dD10aGlzLmxlbmd0aDtpZih0dCUyIT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMTYtYml0cyIpO2ZvcihsZXQgSGU9MDtIZTx0dDtIZSs9Milt''@;'; put 'put ''ZSh0aGlzLEhlLEhlKzEpO3JldHVybiB0aGlzfSxPLnByb3RvdHlwZS5zd2FwMzI9ZnVuY3Rpb24oKXtjb25zdCB0dD10aGlzLmxlbmd0aDtpZih0dCU0IT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMzItYml0cyIpO2ZvcihsZXQg''@;'; put 'put ''SGU9MDtIZTx0dDtIZSs9NCltZSh0aGlzLEhlLEhlKzMpLG1lKHRoaXMsSGUrMSxIZSsyKTtyZXR1cm4gdGhpc30sTy5wcm90b3R5cGUuc3dhcDY0PWZ1bmN0aW9uKCl7Y29uc3QgdHQ9dGhpcy5sZW5ndGg7aWYodHQlOCE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVz''@;'; put 'put ''dCBiZSBhIG11bHRpcGxlIG9mIDY0LWJpdHMiKTtmb3IobGV0IEhlPTA7SGU8dHQ7SGUrPTgpbWUodGhpcyxIZSxIZSs3KSxtZSh0aGlzLEhlKzEsSGUrNiksbWUodGhpcyxIZSsyLEhlKzUpLG1lKHRoaXMsSGUrMyxIZSs0KTtyZXR1cm4gdGhpc30sTy5wcm90b3R5cGUudG9Mb2NhbGVTdHJp''@;'; put 'put ''bmc9Ty5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtjb25zdCB0dD10aGlzLmxlbmd0aDtyZXR1cm4gMD09PXR0PyIiOjA9PT1hcmd1bWVudHMubGVuZ3RoP0ModGhpcywwLHR0KTpsZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LE8ucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbih0dCl7''@;'; put 'put ''aWYoIU8uaXNCdWZmZXIodHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIiKTtyZXR1cm4gdGhpcz09PXR0fHwwPT09Ty5jb21wYXJlKHRoaXMsdHQpfSxPLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7bGV0IHR0PSIiO2NvbnN0IEhlPVguSU5T''@;'; put 'put ''UEVDVF9NQVhfQllURVM7cmV0dXJuIHR0PXRoaXMudG9TdHJpbmcoImhleCIsMCxIZSkucmVwbGFjZSgvKC57Mn0pL2csIiQxICIpLnRyaW0oKSx0aGlzLmxlbmd0aD5IZSYmKHR0Kz0iIC4uLiAiKSwiPEJ1ZmZlciAiK3R0KyI+In0sQiYmKE8ucHJvdG90eXBlW0JdPU8ucHJvdG90eXBlLmlu''@;'; put 'put ''c3BlY3QpLE8ucHJvdG90eXBlLmNvbXBhcmU9ZnVuY3Rpb24odHQsSGUsdXQscXQsUnQpe2lmKHVuKHR0LFVpbnQ4QXJyYXkpJiYodHQ9Ty5mcm9tKHR0LHR0Lm9mZnNldCx0dC5ieXRlTGVuZ3RoKSksIU8uaXNCdWZmZXIodHQpKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAidGFyZ2V0IiBh''@;'; put 'put ''cmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIEJ1ZmZlciBvciBVaW50OEFycmF5LiBSZWNlaXZlZCB0eXBlICcrdHlwZW9mIHR0KTtpZih2b2lkIDA9PT1IZSYmKEhlPTApLHZvaWQgMD09PXV0JiYodXQ9dHQ/dHQubGVuZ3RoOjApLHZvaWQgMD09PXF0JiYocXQ9MCksdm9pZCAwPT09UnQm''@;'; put 'put ''JihSdD10aGlzLmxlbmd0aCksSGU8MHx8dXQ+dHQubGVuZ3RofHxxdDwwfHxSdD50aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigib3V0IG9mIHJhbmdlIGluZGV4Iik7aWYocXQ+PVJ0JiZIZT49dXQpcmV0dXJuIDA7aWYocXQ+PVJ0KXJldHVybi0xO2lmKEhlPj11dClyZXR1cm4g''@;'; put 'put ''MTtpZih0aGlzPT09dHQpcmV0dXJuIDA7bGV0IFB0PShSdD4+Pj0wKS0ocXQ+Pj49MCksY2k9KHV0Pj4+PTApLShIZT4+Pj0wKTtjb25zdCBRdD1NYXRoLm1pbihQdCxjaSksc249dGhpcy5zbGljZShxdCxSdCksUmk9dHQuc2xpY2UoSGUsdXQpO2ZvcihsZXQgaG49MDtobjxRdDsrK2huKWlm''@;'; put 'put ''KHNuW2huXSE9PVJpW2huXSl7UHQ9c25baG5dLGNpPVJpW2huXTticmVha31yZXR1cm4gUHQ8Y2k/LTE6Y2k8UHQ/MTowfSxPLnByb3RvdHlwZS5pbmNsdWRlcz1mdW5jdGlvbih0dCxIZSx1dCl7cmV0dXJuLTEhPT10aGlzLmluZGV4T2YodHQsSGUsdXQpfSxPLnByb3RvdHlwZS5pbmRleE9m''@;'; put 'put ''PWZ1bmN0aW9uKHR0LEhlLHV0KXtyZXR1cm4gX2UodGhpcyx0dCxIZSx1dCwhMCl9LE8ucHJvdG90eXBlLmxhc3RJbmRleE9mPWZ1bmN0aW9uKHR0LEhlLHV0KXtyZXR1cm4gX2UodGhpcyx0dCxIZSx1dCwhMSl9LE8ucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKHR0LEhlLHV0LHF0KXtpZih2''@;'; put 'put ''b2lkIDA9PT1IZSlxdD0idXRmOCIsdXQ9dGhpcy5sZW5ndGgsSGU9MDtlbHNlIGlmKHZvaWQgMD09PXV0JiYic3RyaW5nIj09dHlwZW9mIEhlKXF0PUhlLHV0PXRoaXMubGVuZ3RoLEhlPTA7ZWxzZXtpZighaXNGaW5pdGUoSGUpKXRocm93IG5ldyBFcnJvcigiQnVmZmVyLndyaXRlKHN0cmlu''@;'; put 'put ''ZywgZW5jb2RpbmcsIG9mZnNldFssIGxlbmd0aF0pIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQiKTtIZT4+Pj0wLGlzRmluaXRlKHV0KT8odXQ+Pj49MCx2b2lkIDA9PT1xdCYmKHF0PSJ1dGY4IikpOihxdD11dCx1dD12b2lkIDApfWNvbnN0IFJ0PXRoaXMubGVuZ3RoLUhlO2lmKCh2b2lkIDA9''@;'; put 'put ''PT11dHx8dXQ+UnQpJiYodXQ9UnQpLHR0Lmxlbmd0aD4wJiYodXQ8MHx8SGU8MCl8fEhlPnRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJBdHRlbXB0IHRvIHdyaXRlIG91dHNpZGUgYnVmZmVyIGJvdW5kcyIpO3F0fHwocXQ9InV0ZjgiKTtsZXQgUHQ9ITE7Zm9yKDs7KXN3aXRj''@;'; put 'put ''aChxdCl7Y2FzZSJoZXgiOnJldHVybiBTZSh0aGlzLHR0LEhlLHV0KTtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiBqZSh0aGlzLHR0LEhlLHV0KTtjYXNlImFzY2lpIjpjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiBWKHRoaXMsdHQsSGUsdXQpO2Nhc2UiYmFzZTY0Ijpy''@;'; put 'put ''ZXR1cm4gcCh0aGlzLHR0LEhlLHV0KTtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIGIodGhpcyx0dCxIZSx1dCk7ZGVmYXVsdDppZihQdCl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK3F0KTtxdD0oIiIr''@;'; put 'put ''cXQpLnRvTG93ZXJDYXNlKCksUHQ9ITB9fSxPLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiQnVmZmVyIixkYXRhOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuX2Fycnx8dGhpcywwKX19O2NvbnN0IFQ9NDA5NjtmdW5jdGlvbiBqKCRlLHR0LEhlKXts''@;'; put 'put ''ZXQgdXQ9IiI7SGU9TWF0aC5taW4oJGUubGVuZ3RoLEhlKTtmb3IobGV0IHF0PXR0O3F0PEhlOysrcXQpdXQrPVN0cmluZy5mcm9tQ2hhckNvZGUoMTI3JiRlW3F0XSk7cmV0dXJuIHV0fWZ1bmN0aW9uIEUoJGUsdHQsSGUpe2xldCB1dD0iIjtIZT1NYXRoLm1pbigkZS5sZW5ndGgsSGUpO2Zv''@;'; put 'put ''cihsZXQgcXQ9dHQ7cXQ8SGU7KytxdCl1dCs9U3RyaW5nLmZyb21DaGFyQ29kZSgkZVtxdF0pO3JldHVybiB1dH1mdW5jdGlvbiBtKCRlLHR0LEhlKXtjb25zdCB1dD0kZS5sZW5ndGg7KCF0dHx8dHQ8MCkmJih0dD0wKSwoIUhlfHxIZTwwfHxIZT51dCkmJihIZT11dCk7bGV0IHF0PSIiO2Zv''@;'; put 'put ''cihsZXQgUnQ9dHQ7UnQ8SGU7KytSdClxdCs9TXRbJGVbUnRdXTtyZXR1cm4gcXR9ZnVuY3Rpb24gQSgkZSx0dCxIZSl7Y29uc3QgdXQ9JGUuc2xpY2UodHQsSGUpO2xldCBxdD0iIjtmb3IobGV0IFJ0PTA7UnQ8dXQubGVuZ3RoLTE7UnQrPTIpcXQrPVN0cmluZy5mcm9tQ2hhckNvZGUodXRb''@;'; put 'put ''UnRdKzI1Nip1dFtSdCsxXSk7cmV0dXJuIHF0fWZ1bmN0aW9uIGFlKCRlLHR0LEhlKXtpZigkZSUxIT0wfHwkZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJvZmZzZXQgaXMgbm90IHVpbnQiKTtpZigkZSt0dD5IZSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiVHJ5aW5nIHRvIGFjY2VzcyBiZXlv''@;'; put 'put ''bmQgYnVmZmVyIGxlbmd0aCIpfWZ1bmN0aW9uIHRlKCRlLHR0LEhlLHV0LHF0LFJ0KXtpZighTy5pc0J1ZmZlcigkZSkpdGhyb3cgbmV3IFR5cGVFcnJvcignImJ1ZmZlciIgYXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBpbnN0YW5jZScpO2lmKHR0PnF0fHx0dDxSdCl0aHJvdyBuZXcgUmFu''@;'; put 'put ''Z2VFcnJvcignInZhbHVlIiBhcmd1bWVudCBpcyBvdXQgb2YgYm91bmRzJyk7aWYoSGUrdXQ+JGUubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKX1mdW5jdGlvbiBzZSgkZSx0dCxIZSx1dCxxdCl7RGUodHQsdXQscXQsJGUsSGUsNyk7bGV0IFJ0PU51''@;'; put 'put ''bWJlcih0dCZCaWdJbnQoNDI5NDk2NzI5NSkpOyRlW0hlKytdPVJ0LFJ0Pj49OCwkZVtIZSsrXT1SdCxSdD4+PTgsJGVbSGUrK109UnQsUnQ+Pj04LCRlW0hlKytdPVJ0O2xldCBQdD1OdW1iZXIodHQ+PkJpZ0ludCgzMikmQmlnSW50KDQyOTQ5NjcyOTUpKTtyZXR1cm4gJGVbSGUrK109UHQs''@;'; put 'put ''UHQ+Pj04LCRlW0hlKytdPVB0LFB0Pj49OCwkZVtIZSsrXT1QdCxQdD4+PTgsJGVbSGUrK109UHQsSGV9ZnVuY3Rpb24gd2UoJGUsdHQsSGUsdXQscXQpe0RlKHR0LHV0LHF0LCRlLEhlLDcpO2xldCBSdD1OdW1iZXIodHQmQmlnSW50KDQyOTQ5NjcyOTUpKTskZVtIZSs3XT1SdCxSdD4+PTgs''@;'; put 'put ''JGVbSGUrNl09UnQsUnQ+Pj04LCRlW0hlKzVdPVJ0LFJ0Pj49OCwkZVtIZSs0XT1SdDtsZXQgUHQ9TnVtYmVyKHR0Pj5CaWdJbnQoMzIpJkJpZ0ludCg0Mjk0OTY3Mjk1KSk7cmV0dXJuICRlW0hlKzNdPVB0LFB0Pj49OCwkZVtIZSsyXT1QdCxQdD4+PTgsJGVbSGUrMV09UHQsUHQ+Pj04LCRl''@;'; put 'put ''W0hlXT1QdCxIZSs4fWZ1bmN0aW9uIFVlKCRlLHR0LEhlLHV0LHF0LFJ0KXtpZihIZSt1dD4kZS5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpO2lmKEhlPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpfWZ1bmN0aW9u''@;'; put 'put ''IEplKCRlLHR0LEhlLHV0LHF0KXtyZXR1cm4gdHQ9K3R0LEhlPj4+PTAscXR8fFVlKCRlLDAsSGUsNCksZy53cml0ZSgkZSx0dCxIZSx1dCwyMyw0KSxIZSs0fWZ1bmN0aW9uIG90KCRlLHR0LEhlLHV0LHF0KXtyZXR1cm4gdHQ9K3R0LEhlPj4+PTAscXR8fFVlKCRlLDAsSGUsOCksZy53cml0''@;'; put 'put ''ZSgkZSx0dCxIZSx1dCw1Miw4KSxIZSs4fU8ucHJvdG90eXBlLnNsaWNlPWZ1bmN0aW9uKHR0LEhlKXtjb25zdCB1dD10aGlzLmxlbmd0aDsodHQ9fn50dCk8MD8odHQrPXV0KTwwJiYodHQ9MCk6dHQ+dXQmJih0dD11dCksKEhlPXZvaWQgMD09PUhlP3V0On5+SGUpPDA/KEhlKz11dCk8MCYm''@;'; put 'put ''KEhlPTApOkhlPnV0JiYoSGU9dXQpLEhlPHR0JiYoSGU9dHQpO2NvbnN0IHF0PXRoaXMuc3ViYXJyYXkodHQsSGUpO3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2YocXQsTy5wcm90b3R5cGUpLHF0fSxPLnByb3RvdHlwZS5yZWFkVWludExFPU8ucHJvdG90eXBlLnJlYWRVSW50TEU9ZnVu''@;'; put 'put ''Y3Rpb24odHQsSGUsdXQpe3R0Pj4+PTAsSGU+Pj49MCx1dHx8YWUodHQsSGUsdGhpcy5sZW5ndGgpO2xldCBxdD10aGlzW3R0XSxSdD0xLFB0PTA7Zm9yKDsrK1B0PEhlJiYoUnQqPTI1Nik7KXF0Kz10aGlzW3R0K1B0XSpSdDtyZXR1cm4gcXR9LE8ucHJvdG90eXBlLnJlYWRVaW50QkU9Ty5w''@;'; put 'put ''cm90b3R5cGUucmVhZFVJbnRCRT1mdW5jdGlvbih0dCxIZSx1dCl7dHQ+Pj49MCxIZT4+Pj0wLHV0fHxhZSh0dCxIZSx0aGlzLmxlbmd0aCk7bGV0IHF0PXRoaXNbdHQrLS1IZV0sUnQ9MTtmb3IoO0hlPjAmJihSdCo9MjU2KTspcXQrPXRoaXNbdHQrLS1IZV0qUnQ7cmV0dXJuIHF0fSxPLnBy''@;'; put 'put ''b3RvdHlwZS5yZWFkVWludDg9Ty5wcm90b3R5cGUucmVhZFVJbnQ4PWZ1bmN0aW9uKHR0LEhlKXtyZXR1cm4gdHQ+Pj49MCxIZXx8YWUodHQsMSx0aGlzLmxlbmd0aCksdGhpc1t0dF19LE8ucHJvdG90eXBlLnJlYWRVaW50MTZMRT1PLnByb3RvdHlwZS5yZWFkVUludDE2TEU9ZnVuY3Rpb24o''@;'; put 'put ''dHQsSGUpe3JldHVybiB0dD4+Pj0wLEhlfHxhZSh0dCwyLHRoaXMubGVuZ3RoKSx0aGlzW3R0XXx0aGlzW3R0KzFdPDw4fSxPLnByb3RvdHlwZS5yZWFkVWludDE2QkU9Ty5wcm90b3R5cGUucmVhZFVJbnQxNkJFPWZ1bmN0aW9uKHR0LEhlKXtyZXR1cm4gdHQ+Pj49MCxIZXx8YWUodHQsMix0''@;'; put 'put ''aGlzLmxlbmd0aCksdGhpc1t0dF08PDh8dGhpc1t0dCsxXX0sTy5wcm90b3R5cGUucmVhZFVpbnQzMkxFPU8ucHJvdG90eXBlLnJlYWRVSW50MzJMRT1mdW5jdGlvbih0dCxIZSl7cmV0dXJuIHR0Pj4+PTAsSGV8fGFlKHR0LDQsdGhpcy5sZW5ndGgpLCh0aGlzW3R0XXx0aGlzW3R0KzFdPDw4''@;'; put 'put ''fHRoaXNbdHQrMl08PDE2KSsxNjc3NzIxNip0aGlzW3R0KzNdfSxPLnByb3RvdHlwZS5yZWFkVWludDMyQkU9Ty5wcm90b3R5cGUucmVhZFVJbnQzMkJFPWZ1bmN0aW9uKHR0LEhlKXtyZXR1cm4gdHQ+Pj49MCxIZXx8YWUodHQsNCx0aGlzLmxlbmd0aCksMTY3NzcyMTYqdGhpc1t0dF0rKHRo''@;'; put 'put ''aXNbdHQrMV08PDE2fHRoaXNbdHQrMl08PDh8dGhpc1t0dCszXSl9LE8ucHJvdG90eXBlLnJlYWRCaWdVSW50NjRMRT1EdChmdW5jdGlvbih0dCl7RmUodHQ+Pj49MCwib2Zmc2V0Iik7Y29uc3QgSGU9dGhpc1t0dF0sdXQ9dGhpc1t0dCs3XTsodm9pZCAwPT09SGV8fHZvaWQgMD09PXV0KSYm''@;'; put 'put ''T2UodHQsdGhpcy5sZW5ndGgtOCk7Y29uc3QgcXQ9SGUrMjU2KnRoaXNbKyt0dF0rNjU1MzYqdGhpc1srK3R0XSt0aGlzWysrdHRdKjIqKjI0LFJ0PXRoaXNbKyt0dF0rMjU2KnRoaXNbKyt0dF0rNjU1MzYqdGhpc1srK3R0XSt1dCoyKioyNDtyZXR1cm4gQmlnSW50KHF0KSsoQmlnSW50KFJ0''@;'; put 'put ''KTw8QmlnSW50KDMyKSl9KSxPLnByb3RvdHlwZS5yZWFkQmlnVUludDY0QkU9RHQoZnVuY3Rpb24odHQpe0ZlKHR0Pj4+PTAsIm9mZnNldCIpO2NvbnN0IEhlPXRoaXNbdHRdLHV0PXRoaXNbdHQrN107KHZvaWQgMD09PUhlfHx2b2lkIDA9PT11dCkmJk9lKHR0LHRoaXMubGVuZ3RoLTgpO2Nv''@;'; put 'put ''bnN0IHF0PUhlKjIqKjI0KzY1NTM2KnRoaXNbKyt0dF0rMjU2KnRoaXNbKyt0dF0rdGhpc1srK3R0XSxSdD10aGlzWysrdHRdKjIqKjI0KzY1NTM2KnRoaXNbKyt0dF0rMjU2KnRoaXNbKyt0dF0rdXQ7cmV0dXJuKEJpZ0ludChxdCk8PEJpZ0ludCgzMikpK0JpZ0ludChSdCl9KSxPLnByb3Rv''@;'; put 'put ''dHlwZS5yZWFkSW50TEU9ZnVuY3Rpb24odHQsSGUsdXQpe3R0Pj4+PTAsSGU+Pj49MCx1dHx8YWUodHQsSGUsdGhpcy5sZW5ndGgpO2xldCBxdD10aGlzW3R0XSxSdD0xLFB0PTA7Zm9yKDsrK1B0PEhlJiYoUnQqPTI1Nik7KXF0Kz10aGlzW3R0K1B0XSpSdDtyZXR1cm4gUnQqPTEyOCxxdD49''@;'; put 'put ''UnQmJihxdC09TWF0aC5wb3coMiw4KkhlKSkscXR9LE8ucHJvdG90eXBlLnJlYWRJbnRCRT1mdW5jdGlvbih0dCxIZSx1dCl7dHQ+Pj49MCxIZT4+Pj0wLHV0fHxhZSh0dCxIZSx0aGlzLmxlbmd0aCk7bGV0IHF0PUhlLFJ0PTEsUHQ9dGhpc1t0dCstLXF0XTtmb3IoO3F0PjAmJihSdCo9MjU2''@;'; put 'put ''KTspUHQrPXRoaXNbdHQrLS1xdF0qUnQ7cmV0dXJuIFJ0Kj0xMjgsUHQ+PVJ0JiYoUHQtPU1hdGgucG93KDIsOCpIZSkpLFB0fSxPLnByb3RvdHlwZS5yZWFkSW50OD1mdW5jdGlvbih0dCxIZSl7cmV0dXJuIHR0Pj4+PTAsSGV8fGFlKHR0LDEsdGhpcy5sZW5ndGgpLDEyOCZ0aGlzW3R0XT8t''@;'; put 'put ''MSooMjU1LXRoaXNbdHRdKzEpOnRoaXNbdHRdfSxPLnByb3RvdHlwZS5yZWFkSW50MTZMRT1mdW5jdGlvbih0dCxIZSl7dHQ+Pj49MCxIZXx8YWUodHQsMix0aGlzLmxlbmd0aCk7Y29uc3QgdXQ9dGhpc1t0dF18dGhpc1t0dCsxXTw8ODtyZXR1cm4gMzI3NjgmdXQ/NDI5NDkwMTc2MHx1dDp1''@;'; put 'put ''dH0sTy5wcm90b3R5cGUucmVhZEludDE2QkU9ZnVuY3Rpb24odHQsSGUpe3R0Pj4+PTAsSGV8fGFlKHR0LDIsdGhpcy5sZW5ndGgpO2NvbnN0IHV0PXRoaXNbdHQrMV18dGhpc1t0dF08PDg7cmV0dXJuIDMyNzY4JnV0PzQyOTQ5MDE3NjB8dXQ6dXR9LE8ucHJvdG90eXBlLnJlYWRJbnQzMkxF''@;'; put 'put ''PWZ1bmN0aW9uKHR0LEhlKXtyZXR1cm4gdHQ+Pj49MCxIZXx8YWUodHQsNCx0aGlzLmxlbmd0aCksdGhpc1t0dF18dGhpc1t0dCsxXTw8OHx0aGlzW3R0KzJdPDwxNnx0aGlzW3R0KzNdPDwyNH0sTy5wcm90b3R5cGUucmVhZEludDMyQkU9ZnVuY3Rpb24odHQsSGUpe3JldHVybiB0dD4+Pj0w''@;'; put 'put ''LEhlfHxhZSh0dCw0LHRoaXMubGVuZ3RoKSx0aGlzW3R0XTw8MjR8dGhpc1t0dCsxXTw8MTZ8dGhpc1t0dCsyXTw8OHx0aGlzW3R0KzNdfSxPLnByb3RvdHlwZS5yZWFkQmlnSW50NjRMRT1EdChmdW5jdGlvbih0dCl7RmUodHQ+Pj49MCwib2Zmc2V0Iik7Y29uc3QgSGU9dGhpc1t0dF0sdXQ9''@;'; put 'put ''dGhpc1t0dCs3XTtyZXR1cm4odm9pZCAwPT09SGV8fHZvaWQgMD09PXV0KSYmT2UodHQsdGhpcy5sZW5ndGgtOCksKEJpZ0ludCh0aGlzW3R0KzRdKzI1Nip0aGlzW3R0KzVdKzY1NTM2KnRoaXNbdHQrNl0rKHV0PDwyNCkpPDxCaWdJbnQoMzIpKStCaWdJbnQoSGUrMjU2KnRoaXNbKyt0dF0r''@;'; put 'put ''NjU1MzYqdGhpc1srK3R0XSsxNjc3NzIxNip0aGlzWysrdHRdKX0pLE8ucHJvdG90eXBlLnJlYWRCaWdJbnQ2NEJFPUR0KGZ1bmN0aW9uKHR0KXtGZSh0dD4+Pj0wLCJvZmZzZXQiKTtjb25zdCBIZT10aGlzW3R0XSx1dD10aGlzW3R0KzddOyh2b2lkIDA9PT1IZXx8dm9pZCAwPT09dXQpJiZP''@;'; put 'put ''ZSh0dCx0aGlzLmxlbmd0aC04KTtjb25zdCBxdD0oSGU8PDI0KSs2NTUzNip0aGlzWysrdHRdKzI1Nip0aGlzWysrdHRdK3RoaXNbKyt0dF07cmV0dXJuKEJpZ0ludChxdCk8PEJpZ0ludCgzMikpK0JpZ0ludCgxNjc3NzIxNip0aGlzWysrdHRdKzY1NTM2KnRoaXNbKyt0dF0rMjU2KnRoaXNb''@;'; put 'put ''Kyt0dF0rdXQpfSksTy5wcm90b3R5cGUucmVhZEZsb2F0TEU9ZnVuY3Rpb24odHQsSGUpe3JldHVybiB0dD4+Pj0wLEhlfHxhZSh0dCw0LHRoaXMubGVuZ3RoKSxnLnJlYWQodGhpcyx0dCwhMCwyMyw0KX0sTy5wcm90b3R5cGUucmVhZEZsb2F0QkU9ZnVuY3Rpb24odHQsSGUpe3JldHVybiB0''@;'; put 'put ''dD4+Pj0wLEhlfHxhZSh0dCw0LHRoaXMubGVuZ3RoKSxnLnJlYWQodGhpcyx0dCwhMSwyMyw0KX0sTy5wcm90b3R5cGUucmVhZERvdWJsZUxFPWZ1bmN0aW9uKHR0LEhlKXtyZXR1cm4gdHQ+Pj49MCxIZXx8YWUodHQsOCx0aGlzLmxlbmd0aCksZy5yZWFkKHRoaXMsdHQsITAsNTIsOCl9LE8u''@;'; put 'put ''cHJvdG90eXBlLnJlYWREb3VibGVCRT1mdW5jdGlvbih0dCxIZSl7cmV0dXJuIHR0Pj4+PTAsSGV8fGFlKHR0LDgsdGhpcy5sZW5ndGgpLGcucmVhZCh0aGlzLHR0LCExLDUyLDgpfSxPLnByb3RvdHlwZS53cml0ZVVpbnRMRT1PLnByb3RvdHlwZS53cml0ZVVJbnRMRT1mdW5jdGlvbih0dCxI''@;'; put 'put ''ZSx1dCxxdCl7dHQ9K3R0LEhlPj4+PTAsdXQ+Pj49MCxxdHx8dGUodGhpcyx0dCxIZSx1dCxNYXRoLnBvdygyLDgqdXQpLTEsMCk7bGV0IFJ0PTEsUHQ9MDtmb3IodGhpc1tIZV09MjU1JnR0OysrUHQ8dXQmJihSdCo9MjU2KTspdGhpc1tIZStQdF09dHQvUnQmMjU1O3JldHVybiBIZSt1dH0s''@;'; put 'put ''Ty5wcm90b3R5cGUud3JpdGVVaW50QkU9Ty5wcm90b3R5cGUud3JpdGVVSW50QkU9ZnVuY3Rpb24odHQsSGUsdXQscXQpe3R0PSt0dCxIZT4+Pj0wLHV0Pj4+PTAscXR8fHRlKHRoaXMsdHQsSGUsdXQsTWF0aC5wb3coMiw4KnV0KS0xLDApO2xldCBSdD11dC0xLFB0PTE7Zm9yKHRoaXNbSGUr''@;'; put 'put ''UnRdPTI1NSZ0dDstLVJ0Pj0wJiYoUHQqPTI1Nik7KXRoaXNbSGUrUnRdPXR0L1B0JjI1NTtyZXR1cm4gSGUrdXR9LE8ucHJvdG90eXBlLndyaXRlVWludDg9Ty5wcm90b3R5cGUud3JpdGVVSW50OD1mdW5jdGlvbih0dCxIZSx1dCl7cmV0dXJuIHR0PSt0dCxIZT4+Pj0wLHV0fHx0ZSh0aGlz''@;'; put 'put ''LHR0LEhlLDEsMjU1LDApLHRoaXNbSGVdPTI1NSZ0dCxIZSsxfSxPLnByb3RvdHlwZS53cml0ZVVpbnQxNkxFPU8ucHJvdG90eXBlLndyaXRlVUludDE2TEU9ZnVuY3Rpb24odHQsSGUsdXQpe3JldHVybiB0dD0rdHQsSGU+Pj49MCx1dHx8dGUodGhpcyx0dCxIZSwyLDY1NTM1LDApLHRoaXNb''@;'; put 'put ''SGVdPTI1NSZ0dCx0aGlzW0hlKzFdPXR0Pj4+OCxIZSsyfSxPLnByb3RvdHlwZS53cml0ZVVpbnQxNkJFPU8ucHJvdG90eXBlLndyaXRlVUludDE2QkU9ZnVuY3Rpb24odHQsSGUsdXQpe3JldHVybiB0dD0rdHQsSGU+Pj49MCx1dHx8dGUodGhpcyx0dCxIZSwyLDY1NTM1LDApLHRoaXNbSGVd''@;'; put 'put ''PXR0Pj4+OCx0aGlzW0hlKzFdPTI1NSZ0dCxIZSsyfSxPLnByb3RvdHlwZS53cml0ZVVpbnQzMkxFPU8ucHJvdG90eXBlLndyaXRlVUludDMyTEU9ZnVuY3Rpb24odHQsSGUsdXQpe3JldHVybiB0dD0rdHQsSGU+Pj49MCx1dHx8dGUodGhpcyx0dCxIZSw0LDQyOTQ5NjcyOTUsMCksdGhpc1tI''@;'; put 'put ''ZSszXT10dD4+PjI0LHRoaXNbSGUrMl09dHQ+Pj4xNix0aGlzW0hlKzFdPXR0Pj4+OCx0aGlzW0hlXT0yNTUmdHQsSGUrNH0sTy5wcm90b3R5cGUud3JpdGVVaW50MzJCRT1PLnByb3RvdHlwZS53cml0ZVVJbnQzMkJFPWZ1bmN0aW9uKHR0LEhlLHV0KXtyZXR1cm4gdHQ9K3R0LEhlPj4+PTAs''@;'; put 'put ''dXR8fHRlKHRoaXMsdHQsSGUsNCw0Mjk0OTY3Mjk1LDApLHRoaXNbSGVdPXR0Pj4+MjQsdGhpc1tIZSsxXT10dD4+PjE2LHRoaXNbSGUrMl09dHQ+Pj44LHRoaXNbSGUrM109MjU1JnR0LEhlKzR9LE8ucHJvdG90eXBlLndyaXRlQmlnVUludDY0TEU9RHQoZnVuY3Rpb24odHQsSGU9MCl7cmV0''@;'; put 'put ''dXJuIHNlKHRoaXMsdHQsSGUsQmlnSW50KDApLEJpZ0ludCgiMHhmZmZmZmZmZmZmZmZmZmZmIikpfSksTy5wcm90b3R5cGUud3JpdGVCaWdVSW50NjRCRT1EdChmdW5jdGlvbih0dCxIZT0wKXtyZXR1cm4gd2UodGhpcyx0dCxIZSxCaWdJbnQoMCksQmlnSW50KCIweGZmZmZmZmZmZmZmZmZm''@;'; put 'put ''ZmYiKSl9KSxPLnByb3RvdHlwZS53cml0ZUludExFPWZ1bmN0aW9uKHR0LEhlLHV0LHF0KXtpZih0dD0rdHQsSGU+Pj49MCwhcXQpe2NvbnN0IFF0PU1hdGgucG93KDIsOCp1dC0xKTt0ZSh0aGlzLHR0LEhlLHV0LFF0LTEsLVF0KX1sZXQgUnQ9MCxQdD0xLGNpPTA7Zm9yKHRoaXNbSGVdPTI1''@;'; put 'put ''NSZ0dDsrK1J0PHV0JiYoUHQqPTI1Nik7KXR0PDAmJjA9PT1jaSYmMCE9PXRoaXNbSGUrUnQtMV0mJihjaT0xKSx0aGlzW0hlK1J0XT0odHQvUHR8MCktY2kmMjU1O3JldHVybiBIZSt1dH0sTy5wcm90b3R5cGUud3JpdGVJbnRCRT1mdW5jdGlvbih0dCxIZSx1dCxxdCl7aWYodHQ9K3R0LEhl''@;'; put 'put ''Pj4+PTAsIXF0KXtjb25zdCBRdD1NYXRoLnBvdygyLDgqdXQtMSk7dGUodGhpcyx0dCxIZSx1dCxRdC0xLC1RdCl9bGV0IFJ0PXV0LTEsUHQ9MSxjaT0wO2Zvcih0aGlzW0hlK1J0XT0yNTUmdHQ7LS1SdD49MCYmKFB0Kj0yNTYpOyl0dDwwJiYwPT09Y2kmJjAhPT10aGlzW0hlK1J0KzFdJiYo''@;'; put 'put ''Y2k9MSksdGhpc1tIZStSdF09KHR0L1B0fDApLWNpJjI1NTtyZXR1cm4gSGUrdXR9LE8ucHJvdG90eXBlLndyaXRlSW50OD1mdW5jdGlvbih0dCxIZSx1dCl7cmV0dXJuIHR0PSt0dCxIZT4+Pj0wLHV0fHx0ZSh0aGlzLHR0LEhlLDEsMTI3LC0xMjgpLHR0PDAmJih0dD0yNTUrdHQrMSksdGhp''@;'; put 'put ''c1tIZV09MjU1JnR0LEhlKzF9LE8ucHJvdG90eXBlLndyaXRlSW50MTZMRT1mdW5jdGlvbih0dCxIZSx1dCl7cmV0dXJuIHR0PSt0dCxIZT4+Pj0wLHV0fHx0ZSh0aGlzLHR0LEhlLDIsMzI3NjcsLTMyNzY4KSx0aGlzW0hlXT0yNTUmdHQsdGhpc1tIZSsxXT10dD4+PjgsSGUrMn0sTy5wcm90''@;'; put 'put ''b3R5cGUud3JpdGVJbnQxNkJFPWZ1bmN0aW9uKHR0LEhlLHV0KXtyZXR1cm4gdHQ9K3R0LEhlPj4+PTAsdXR8fHRlKHRoaXMsdHQsSGUsMiwzMjc2NywtMzI3NjgpLHRoaXNbSGVdPXR0Pj4+OCx0aGlzW0hlKzFdPTI1NSZ0dCxIZSsyfSxPLnByb3RvdHlwZS53cml0ZUludDMyTEU9ZnVuY3Rp''@;'; put 'put ''b24odHQsSGUsdXQpe3JldHVybiB0dD0rdHQsSGU+Pj49MCx1dHx8dGUodGhpcyx0dCxIZSw0LDIxNDc0ODM2NDcsLTIxNDc0ODM2NDgpLHRoaXNbSGVdPTI1NSZ0dCx0aGlzW0hlKzFdPXR0Pj4+OCx0aGlzW0hlKzJdPXR0Pj4+MTYsdGhpc1tIZSszXT10dD4+PjI0LEhlKzR9LE8ucHJvdG90''@;'; put 'put ''eXBlLndyaXRlSW50MzJCRT1mdW5jdGlvbih0dCxIZSx1dCl7cmV0dXJuIHR0PSt0dCxIZT4+Pj0wLHV0fHx0ZSh0aGlzLHR0LEhlLDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksdHQ8MCYmKHR0PTQyOTQ5NjcyOTUrdHQrMSksdGhpc1tIZV09dHQ+Pj4yNCx0aGlzW0hlKzFdPXR0Pj4+MTYs''@;'; put 'put ''dGhpc1tIZSsyXT10dD4+PjgsdGhpc1tIZSszXT0yNTUmdHQsSGUrNH0sTy5wcm90b3R5cGUud3JpdGVCaWdJbnQ2NExFPUR0KGZ1bmN0aW9uKHR0LEhlPTApe3JldHVybiBzZSh0aGlzLHR0LEhlLC1CaWdJbnQoIjB4ODAwMDAwMDAwMDAwMDAwMCIpLEJpZ0ludCgiMHg3ZmZmZmZmZmZmZmZm''@;'; put 'put ''ZmZmIikpfSksTy5wcm90b3R5cGUud3JpdGVCaWdJbnQ2NEJFPUR0KGZ1bmN0aW9uKHR0LEhlPTApe3JldHVybiB3ZSh0aGlzLHR0LEhlLC1CaWdJbnQoIjB4ODAwMDAwMDAwMDAwMDAwMCIpLEJpZ0ludCgiMHg3ZmZmZmZmZmZmZmZmZmZmIikpfSksTy5wcm90b3R5cGUud3JpdGVGbG9hdExF''@;'; put 'put ''PWZ1bmN0aW9uKHR0LEhlLHV0KXtyZXR1cm4gSmUodGhpcyx0dCxIZSwhMCx1dCl9LE8ucHJvdG90eXBlLndyaXRlRmxvYXRCRT1mdW5jdGlvbih0dCxIZSx1dCl7cmV0dXJuIEplKHRoaXMsdHQsSGUsITEsdXQpfSxPLnByb3RvdHlwZS53cml0ZURvdWJsZUxFPWZ1bmN0aW9uKHR0LEhlLHV0''@;'; put 'put ''KXtyZXR1cm4gb3QodGhpcyx0dCxIZSwhMCx1dCl9LE8ucHJvdG90eXBlLndyaXRlRG91YmxlQkU9ZnVuY3Rpb24odHQsSGUsdXQpe3JldHVybiBvdCh0aGlzLHR0LEhlLCExLHV0KX0sTy5wcm90b3R5cGUuY29weT1mdW5jdGlvbih0dCxIZSx1dCxxdCl7aWYoIU8uaXNCdWZmZXIodHQpKXRo''@;'; put 'put ''cm93IG5ldyBUeXBlRXJyb3IoImFyZ3VtZW50IHNob3VsZCBiZSBhIEJ1ZmZlciIpO2lmKHV0fHwodXQ9MCksIXF0JiYwIT09cXQmJihxdD10aGlzLmxlbmd0aCksSGU+PXR0Lmxlbmd0aCYmKEhlPXR0Lmxlbmd0aCksSGV8fChIZT0wKSxxdD4wJiZxdDx1dCYmKHF0PXV0KSxxdD09PXV0fHww''@;'; put 'put ''PT09dHQubGVuZ3RofHwwPT09dGhpcy5sZW5ndGgpcmV0dXJuIDA7aWYoSGU8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigidGFyZ2V0U3RhcnQgb3V0IG9mIGJvdW5kcyIpO2lmKHV0PDB8fHV0Pj10aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIik7''@;'; put 'put ''aWYocXQ8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigic291cmNlRW5kIG91dCBvZiBib3VuZHMiKTtxdD50aGlzLmxlbmd0aCYmKHF0PXRoaXMubGVuZ3RoKSx0dC5sZW5ndGgtSGU8cXQtdXQmJihxdD10dC5sZW5ndGgtSGUrdXQpO2NvbnN0IFJ0PXF0LXV0O3JldHVybiB0aGlzPT09dHQmJiJm''@;'; put 'put ''dW5jdGlvbiI9PXR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5jb3B5V2l0aGluP3RoaXMuY29weVdpdGhpbihIZSx1dCxxdCk6VWludDhBcnJheS5wcm90b3R5cGUuc2V0LmNhbGwodHQsdGhpcy5zdWJhcnJheSh1dCxxdCksSGUpLFJ0fSxPLnByb3RvdHlwZS5maWxsPWZ1bmN0aW9uKHR0''@;'; put 'put ''LEhlLHV0LHF0KXtpZigic3RyaW5nIj09dHlwZW9mIHR0KXtpZigic3RyaW5nIj09dHlwZW9mIEhlPyhxdD1IZSxIZT0wLHV0PXRoaXMubGVuZ3RoKToic3RyaW5nIj09dHlwZW9mIHV0JiYocXQ9dXQsdXQ9dGhpcy5sZW5ndGgpLHZvaWQgMCE9PXF0JiYic3RyaW5nIiE9dHlwZW9mIHF0KXRo''@;'; put 'put ''cm93IG5ldyBUeXBlRXJyb3IoImVuY29kaW5nIG11c3QgYmUgYSBzdHJpbmciKTtpZigic3RyaW5nIj09dHlwZW9mIHF0JiYhTy5pc0VuY29kaW5nKHF0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK3F0KTtpZigxPT09dHQubGVuZ3RoKXtjb25zdCBQdD10dC5j''@;'; put 'put ''aGFyQ29kZUF0KDApOygidXRmOCI9PT1xdCYmUHQ8MTI4fHwibGF0aW4xIj09PXF0KSYmKHR0PVB0KX19ZWxzZSJudW1iZXIiPT10eXBlb2YgdHQ/dHQmPTI1NToiYm9vbGVhbiI9PXR5cGVvZiB0dCYmKHR0PU51bWJlcih0dCkpO2lmKEhlPDB8fHRoaXMubGVuZ3RoPEhlfHx0aGlzLmxlbmd0''@;'; put 'put ''aDx1dCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiT3V0IG9mIHJhbmdlIGluZGV4Iik7aWYodXQ8PUhlKXJldHVybiB0aGlzO2xldCBSdDtpZihIZT4+Pj0wLHV0PXZvaWQgMD09PXV0P3RoaXMubGVuZ3RoOnV0Pj4+MCx0dHx8KHR0PTApLCJudW1iZXIiPT10eXBlb2YgdHQpZm9yKFJ0PUhlO1J0''@;'; put 'put ''PHV0OysrUnQpdGhpc1tSdF09dHQ7ZWxzZXtjb25zdCBQdD1PLmlzQnVmZmVyKHR0KT90dDpPLmZyb20odHQscXQpLGNpPVB0Lmxlbmd0aDtpZigwPT09Y2kpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIHZhbHVlICInK3R0KyciIGlzIGludmFsaWQgZm9yIGFyZ3VtZW50ICJ2YWx1ZSInKTtm''@;'; put 'put ''b3IoUnQ9MDtSdDx1dC1IZTsrK1J0KXRoaXNbUnQrSGVdPVB0W1J0JWNpXX1yZXR1cm4gdGhpc307Y29uc3QgeGU9e307ZnVuY3Rpb24gdmUoJGUsdHQsSGUpe3hlWyRlXT1jbGFzcyBleHRlbmRzIEhle2NvbnN0cnVjdG9yKCl7c3VwZXIoKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywi''@;'; put 'put ''bWVzc2FnZSIse3ZhbHVlOnR0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0aGlzLm5hbWU9YCR7dGhpcy5uYW1lfSBbJHskZX1dYCxkZWxldGUgdGhpcy5uYW1lfWdldCBjb2RlKCl7cmV0dXJuICRlfXNldCBjb2RlKHF0KXtPYmplY3QuZGVm''@;'; put 'put ''aW5lUHJvcGVydHkodGhpcywiY29kZSIse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOnF0LHdyaXRhYmxlOiEwfSl9dG9TdHJpbmcoKXtyZXR1cm5gJHt0aGlzLm5hbWV9IFskeyRlfV06ICR7dGhpcy5tZXNzYWdlfWB9fX1mdW5jdGlvbiBYZSgkZSl7bGV0IHR0PSIiLEhl''@;'; put 'put ''PSRlLmxlbmd0aDtjb25zdCB1dD0iLSI9PT0kZVswXT8xOjA7Zm9yKDtIZT49dXQrNDtIZS09Myl0dD1gXyR7JGUuc2xpY2UoSGUtMyxIZSl9JHt0dH1gO3JldHVybmAkeyRlLnNsaWNlKDAsSGUpfSR7dHR9YH1mdW5jdGlvbiBEZSgkZSx0dCxIZSx1dCxxdCxSdCl7aWYoJGU+SGV8fCRlPHR0''@;'; put 'put ''KXtjb25zdCBQdD0iYmlnaW50Ij09dHlwZW9mIHR0PyJuIjoiIjtsZXQgY2k7dGhyb3cgY2k9UnQ+Mz8wPT09dHR8fHR0PT09QmlnSW50KDApP2A+PSAwJHtQdH0gYW5kIDwgMiR7UHR9ICoqICR7OCooUnQrMSl9JHtQdH1gOmA+PSAtKDIke1B0fSAqKiAkezgqKFJ0KzEpLTF9JHtQdH0pIGFu''@;'; put 'put ''ZCA8IDIgKiogJHs4KihSdCsxKS0xfSR7UHR9YDpgPj0gJHt0dH0ke1B0fSBhbmQgPD0gJHtIZX0ke1B0fWAsbmV3IHhlLkVSUl9PVVRfT0ZfUkFOR0UoInZhbHVlIixjaSwkZSl9IWZ1bmN0aW9uIHplKCRlLHR0LEhlKXtGZSh0dCwib2Zmc2V0IiksKHZvaWQgMD09PSRlW3R0XXx8dm9pZCAw''@;'; put 'put ''PT09JGVbdHQrSGVdKSYmT2UodHQsJGUubGVuZ3RoLShIZSsxKSl9KHV0LHF0LFJ0KX1mdW5jdGlvbiBGZSgkZSx0dCl7aWYoIm51bWJlciIhPXR5cGVvZiAkZSl0aHJvdyBuZXcgeGUuRVJSX0lOVkFMSURfQVJHX1RZUEUodHQsIm51bWJlciIsJGUpfWZ1bmN0aW9uIE9lKCRlLHR0LEhlKXt0''@;'; put 'put ''aHJvdyBNYXRoLmZsb29yKCRlKSE9PSRlPyhGZSgkZSxIZSksbmV3IHhlLkVSUl9PVVRfT0ZfUkFOR0UoSGV8fCJvZmZzZXQiLCJhbiBpbnRlZ2VyIiwkZSkpOnR0PDA/bmV3IHhlLkVSUl9CVUZGRVJfT1VUX09GX0JPVU5EUzpuZXcgeGUuRVJSX09VVF9PRl9SQU5HRShIZXx8Im9mZnNldCIs''@;'; put 'put ''YD49ICR7SGU/MTowfSBhbmQgPD0gJHt0dH1gLCRlKX12ZSgiRVJSX0JVRkZFUl9PVVRfT0ZfQk9VTkRTIixmdW5jdGlvbigkZSl7cmV0dXJuICRlP2AkeyRlfSBpcyBvdXRzaWRlIG9mIGJ1ZmZlciBib3VuZHNgOiJBdHRlbXB0IHRvIGFjY2VzcyBtZW1vcnkgb3V0c2lkZSBidWZmZXIgYm91''@;'; put 'put ''bmRzIn0sUmFuZ2VFcnJvciksdmUoIkVSUl9JTlZBTElEX0FSR19UWVBFIixmdW5jdGlvbigkZSx0dCl7cmV0dXJuYFRoZSAiJHskZX0iIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBudW1iZXIuIFJlY2VpdmVkIHR5cGUgJHt0eXBlb2YgdHR9YH0sVHlwZUVycm9yKSx2ZSgiRVJSX09VVF9P''@;'; put 'put ''Rl9SQU5HRSIsZnVuY3Rpb24oJGUsdHQsSGUpe2xldCB1dD1gVGhlIHZhbHVlIG9mICIkeyRlfSIgaXMgb3V0IG9mIHJhbmdlLmAscXQ9SGU7cmV0dXJuIE51bWJlci5pc0ludGVnZXIoSGUpJiZNYXRoLmFicyhIZSk+NDI5NDk2NzI5Nj9xdD1YZShTdHJpbmcoSGUpKToiYmlnaW50Ij09dHlw''@;'; put 'put ''ZW9mIEhlJiYocXQ9U3RyaW5nKEhlKSwoSGU+QmlnSW50KDIpKipCaWdJbnQoMzIpfHxIZTwtKEJpZ0ludCgyKSoqQmlnSW50KDMyKSkpJiYocXQ9WGUocXQpKSxxdCs9Im4iKSx1dCs9YCBJdCBtdXN0IGJlICR7dHR9LiBSZWNlaXZlZCAke3F0fWAsdXR9LFJhbmdlRXJyb3IpO2NvbnN0IEll''@;'; put 'put ''PS9bXisvMC05QS1aYS16LV9dL2c7ZnVuY3Rpb24ga2UoJGUsdHQpe2xldCBIZTt0dD10dHx8MS8wO2NvbnN0IHV0PSRlLmxlbmd0aDtsZXQgcXQ9bnVsbDtjb25zdCBSdD1bXTtmb3IobGV0IFB0PTA7UHQ8dXQ7KytQdCl7aWYoSGU9JGUuY2hhckNvZGVBdChQdCksSGU+NTUyOTUmJkhlPDU3''@;'; put 'put ''MzQ0KXtpZighcXQpe2lmKEhlPjU2MzE5KXsodHQtPTMpPi0xJiZSdC5wdXNoKDIzOSwxOTEsMTg5KTtjb250aW51ZX1pZihQdCsxPT09dXQpeyh0dC09Myk+LTEmJlJ0LnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfXF0PUhlO2NvbnRpbnVlfWlmKEhlPDU2MzIwKXsodHQtPTMpPi0xJiZS''@;'; put 'put ''dC5wdXNoKDIzOSwxOTEsMTg5KSxxdD1IZTtjb250aW51ZX1IZT02NTUzNisocXQtNTUyOTY8PDEwfEhlLTU2MzIwKX1lbHNlIHF0JiYodHQtPTMpPi0xJiZSdC5wdXNoKDIzOSwxOTEsMTg5KTtpZihxdD1udWxsLEhlPDEyOCl7aWYoKHR0LT0xKTwwKWJyZWFrO1J0LnB1c2goSGUpfWVsc2Ug''@;'; put 'put ''aWYoSGU8MjA0OCl7aWYoKHR0LT0yKTwwKWJyZWFrO1J0LnB1c2goSGU+PjZ8MTkyLDYzJkhlfDEyOCl9ZWxzZSBpZihIZTw2NTUzNil7aWYoKHR0LT0zKTwwKWJyZWFrO1J0LnB1c2goSGU+PjEyfDIyNCxIZT4+NiY2M3wxMjgsNjMmSGV8MTI4KX1lbHNle2lmKCEoSGU8MTExNDExMikpdGhy''@;'; put 'put ''b3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvZGUgcG9pbnQiKTtpZigodHQtPTQpPDApYnJlYWs7UnQucHVzaChIZT4+MTh8MjQwLEhlPj4xMiY2M3wxMjgsSGU+PjYmNjN8MTI4LDYzJkhlfDEyOCl9fXJldHVybiBSdH1mdW5jdGlvbiBudCgkZSl7cmV0dXJuIF8udG9CeXRlQXJyYXkoZnVuY3Rp''@;'; put 'put ''b24gVmUoJGUpe2lmKCgkZT0oJGU9JGUuc3BsaXQoIj0iKVswXSkudHJpbSgpLnJlcGxhY2UoSWUsIiIpKS5sZW5ndGg8MilyZXR1cm4iIjtmb3IoOyRlLmxlbmd0aCU0IT0wOykkZSs9Ij0iO3JldHVybiAkZX0oJGUpKX1mdW5jdGlvbiBRZSgkZSx0dCxIZSx1dCl7bGV0IHF0O2ZvcihxdD0w''@;'; put 'put ''O3F0PHV0JiYhKHF0K0hlPj10dC5sZW5ndGh8fHF0Pj0kZS5sZW5ndGgpOysrcXQpdHRbcXQrSGVdPSRlW3F0XTtyZXR1cm4gcXR9ZnVuY3Rpb24gdW4oJGUsdHQpe3JldHVybiAkZSBpbnN0YW5jZW9mIHR0fHxudWxsIT0kZSYmbnVsbCE9JGUuY29uc3RydWN0b3ImJm51bGwhPSRlLmNvbnN0''@;'; put 'put ''cnVjdG9yLm5hbWUmJiRlLmNvbnN0cnVjdG9yLm5hbWU9PT10dC5uYW1lfWZ1bmN0aW9uIHl0KCRlKXtyZXR1cm4gJGUhPSRlfWNvbnN0IE10PWZ1bmN0aW9uKCl7Y29uc3QgJGU9IjAxMjM0NTY3ODlhYmNkZWYiLHR0PW5ldyBBcnJheSgyNTYpO2ZvcihsZXQgSGU9MDtIZTwxNjsrK0hlKXtj''@;'; put 'put ''b25zdCB1dD0xNipIZTtmb3IobGV0IHF0PTA7cXQ8MTY7KytxdCl0dFt1dCtxdF09JGVbSGVdKyRlW3F0XX1yZXR1cm4gdHR9KCk7ZnVuY3Rpb24gRHQoJGUpe3JldHVybiB0eXBlb2YgQmlnSW50PiJ1Ij9pdDokZX1mdW5jdGlvbiBpdCgpe3Rocm93IG5ldyBFcnJvcigiQmlnSW50IG5vdCBz''@;'; put 'put ''dXBwb3J0ZWQiKX19LDUxMTY6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg4NjEyKSxfPXkoMTc2OCksZz15KDg5MjgpLEI9eSg5NzcwKTt1ZS5leHBvcnRzPUJ8fEkuY2FsbChnLF8pfSwzMTkyOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoODYxMiksXz15KDE3Njgp''@;'; put 'put ''LGc9eSg1MTE2KTt1ZS5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuIGcoSSxfLGFyZ3VtZW50cyl9fSwxNzY4OnVlPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9RnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5fSw4OTI4OnVlPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9RnVuY3Rpb24ucHJv''@;'; put 'put ''dG90eXBlLmNhbGx9LDMxOToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDg2MTIpLF89eSg0NDUzKSxnPXkoODkyOCksQj15KDUxMTYpO3VlLmV4cG9ydHM9ZnVuY3Rpb24oUCl7aWYoUC5sZW5ndGg8MXx8ImZ1bmN0aW9uIiE9dHlwZW9mIFBbMF0pdGhyb3cgbmV3IF8oImEgZnVu''@;'; put 'put ''Y3Rpb24gaXMgcmVxdWlyZWQiKTtyZXR1cm4gQihJLGcsUCl9fSw5NzcwOnVlPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9dHlwZW9mIFJlZmxlY3Q8InUiJiZSZWZsZWN0JiZSZWZsZWN0LmFwcGx5fSwxOTI0Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMjEwKSxfPXkoNTU1''@;'; put 'put ''OSksZz1fKEkoIlN0cmluZy5wcm90b3R5cGUuaW5kZXhPZiIpKTt1ZS5leHBvcnRzPWZ1bmN0aW9uKHcsUCl7dmFyIEY9SSh3LCEhUCk7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIEYmJmcodywiLnByb3RvdHlwZS4iKT4tMT9fKEYpOkZ9fSw1NTU5Oih1ZSxYLHkpPT57InVzZSBzdHJpY3Qi''@;'; put 'put ''O3ZhciBJPXkoNzc3MSksXz15KDQ0MjkpLGc9eSgzMTkpLEI9eSgzMTkyKTt1ZS5leHBvcnRzPWZ1bmN0aW9uKFApe3ZhciBGPWcoYXJndW1lbnRzKSxPPVAubGVuZ3RoLShhcmd1bWVudHMubGVuZ3RoLTEpO3JldHVybiBJKEYsMSsoTz4wP086MCksITApfSxfP18odWUuZXhwb3J0cywiYXBw''@;'; put 'put ''bHkiLHt2YWx1ZTpCfSk6dWUuZXhwb3J0cy5hcHBseT1CfSw3Mzc5Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMjEwKSxfPXkoMzE5KSxnPV8oW0koIiVTdHJpbmcucHJvdG90eXBlLmluZGV4T2YlIildKTt1ZS5leHBvcnRzPWZ1bmN0aW9uKHcsUCl7dmFyIEY9SSh3LCEhUCk7''@;'; put 'put ''cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIEYmJmcodywiLnByb3RvdHlwZS4iKT4tMT9fKFtGXSk6Rn19LDEwMjc6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg5NTA5KS5CdWZmZXIsXz15KDI4MzApLlRyYW5zZm9ybSxnPXkoMjU1MykucztmdW5jdGlvbiB3KHope18uY2FsbCh0''@;'; put 'put ''aGlzKSx0aGlzLmhhc2hNb2RlPSJzdHJpbmciPT10eXBlb2Ygeix0aGlzLmhhc2hNb2RlP3RoaXNbel09dGhpcy5fZmluYWxPckRpZ2VzdDp0aGlzLmZpbmFsPXRoaXMuX2ZpbmFsT3JEaWdlc3QsdGhpcy5fZmluYWwmJih0aGlzLl9fZmluYWw9dGhpcy5fZmluYWwsdGhpcy5fZmluYWw9bnVs''@;'; put 'put ''bCksdGhpcy5fZGVjb2Rlcj1udWxsLHRoaXMuX2VuY29kaW5nPW51bGx9eSg1NzE3KSh3LF8pO3ZhciBQPXR5cGVvZiBVaW50OEFycmF5PCJ1IixGPXR5cGVvZiBBcnJheUJ1ZmZlcjwidSImJnR5cGVvZiBVaW50OEFycmF5PCJ1IiYmQXJyYXlCdWZmZXIuaXNWaWV3JiYoSS5wcm90b3R5cGUg''@;'; put 'put ''aW5zdGFuY2VvZiBVaW50OEFycmF5fHxJLlRZUEVEX0FSUkFZX1NVUFBPUlQpO3cucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbih6LE4sTCl7dmFyIEs9ZnVuY3Rpb24gTyh6LE4pe2lmKHogaW5zdGFuY2VvZiBJKXJldHVybiB6O2lmKCJzdHJpbmciPT10eXBlb2YgeilyZXR1cm4gSS5mcm9t''@;'; put 'put ''KHosTik7aWYoRiYmQXJyYXlCdWZmZXIuaXNWaWV3KHopKXtpZigwPT09ei5ieXRlTGVuZ3RoKXJldHVybiBJLmFsbG9jKDApO3ZhciBMPUkuZnJvbSh6LmJ1ZmZlcix6LmJ5dGVPZmZzZXQsei5ieXRlTGVuZ3RoKTtpZihMLmJ5dGVMZW5ndGg9PT16LmJ5dGVMZW5ndGgpcmV0dXJuIEx9aWYo''@;'; put 'put ''UCYmeiBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl8fEkuaXNCdWZmZXIoeikmJnouY29uc3RydWN0b3ImJiJmdW5jdGlvbiI9PXR5cGVvZiB6LmNvbnN0cnVjdG9yLmlzQnVmZmVyJiZ6LmNvbnN0cnVjdG9yLmlzQnVmZmVyKHopKXJldHVybiBJLmZyb20oeik7dGhyb3cgbmV3IFR5cGVFcnJvcign''@;'; put 'put ''VGhlICJkYXRhIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nIG9yIGFuIGluc3RhbmNlIG9mIEJ1ZmZlciwgVHlwZWRBcnJheSwgb3IgRGF0YVZpZXcuJyl9KHosTiksVT10aGlzLl91cGRhdGUoSyk7cmV0dXJuIHRoaXMuaGFzaE1vZGU/dGhpczooTCYmKFU9dGhpcy5fdG9TdHJp''@;'; put 'put ''bmcoVSxMKSksVSl9LHcucHJvdG90eXBlLnNldEF1dG9QYWRkaW5nPWZ1bmN0aW9uKCl7fSx3LnByb3RvdHlwZS5nZXRBdXRoVGFnPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJ0cnlpbmcgdG8gZ2V0IGF1dGggdGFnIGluIHVuc3VwcG9ydGVkIHN0YXRlIil9LHcucHJvdG90eXBlLnNl''@;'; put 'put ''dEF1dGhUYWc9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoInRyeWluZyB0byBzZXQgYXV0aCB0YWcgaW4gdW5zdXBwb3J0ZWQgc3RhdGUiKX0sdy5wcm90b3R5cGUuc2V0QUFEPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJ0cnlpbmcgdG8gc2V0IGFhZCBpbiB1bnN1cHBvcnRlZCBz''@;'; put 'put ''dGF0ZSIpfSx3LnByb3RvdHlwZS5fdHJhbnNmb3JtPWZ1bmN0aW9uKHosTixMKXt2YXIgSzt0cnl7dGhpcy5oYXNoTW9kZT90aGlzLl91cGRhdGUoeik6dGhpcy5wdXNoKHRoaXMuX3VwZGF0ZSh6KSl9Y2F0Y2goVSl7Sz1VfWZpbmFsbHl7TChLKX19LHcucHJvdG90eXBlLl9mbHVzaD1mdW5j''@;'; put 'put ''dGlvbih6KXt2YXIgTjt0cnl7dGhpcy5wdXNoKHRoaXMuX19maW5hbCgpKX1jYXRjaChMKXtOPUx9eihOKX0sdy5wcm90b3R5cGUuX2ZpbmFsT3JEaWdlc3Q9ZnVuY3Rpb24oeil7dmFyIE49dGhpcy5fX2ZpbmFsKCl8fEkuYWxsb2MoMCk7cmV0dXJuIHomJihOPXRoaXMuX3RvU3RyaW5nKE4s''@;'; put 'put ''eiwhMCkpLE59LHcucHJvdG90eXBlLl90b1N0cmluZz1mdW5jdGlvbih6LE4sTCl7aWYodGhpcy5fZGVjb2Rlcnx8KHRoaXMuX2RlY29kZXI9bmV3IGcoTiksdGhpcy5fZW5jb2Rpbmc9TiksdGhpcy5fZW5jb2RpbmchPT1OKXRocm93IG5ldyBFcnJvcigiY2FuXHUyMDE5dCBzd2l0Y2ggZW5j''@;'; put 'put ''b2RpbmdzIik7dmFyIEs9dGhpcy5fZGVjb2Rlci53cml0ZSh6KTtyZXR1cm4gTCYmKEsrPXRoaXMuX2RlY29kZXIuZW5kKCkpLEt9LHVlLmV4cG9ydHM9d30sNTEwODoodWUsWCx5KT0+e3ZhciBJPXkoOTUzOSksXz15KDkyODIpO2Z1bmN0aW9uIGcoKXtyZXR1cm4obmV3IERhdGUpLmdldFRp''@;'; put 'put ''bWUoKX12YXIgdyxCPUFycmF5LnByb3RvdHlwZS5zbGljZSxQPXt9O3c9dHlwZW9mIHkuZzwidSImJnkuZy5jb25zb2xlP3kuZy5jb25zb2xlOnR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuY29uc29sZT93aW5kb3cuY29uc29sZTp7fTtmb3IodmFyIEY9W1tmdW5jdGlvbiBLKCl7fSwibG9n''@;'; put 'put ''Il0sW2Z1bmN0aW9uIFUoKXt3LmxvZy5hcHBseSh3LGFyZ3VtZW50cyl9LCJpbmZvIl0sW2Z1bmN0aW9uIFcoKXt3LmxvZy5hcHBseSh3LGFyZ3VtZW50cyl9LCJ3YXJuIl0sW2Z1bmN0aW9uIFkoKXt3Lndhcm4uYXBwbHkodyxhcmd1bWVudHMpfSwiZXJyb3IiXSxbZnVuY3Rpb24gcShsZSl7''@;'; put 'put ''UFtsZV09ZygpfSwidGltZSJdLFtmdW5jdGlvbiBlZShsZSl7dmFyIG1lPVBbbGVdO2lmKCFtZSl0aHJvdyBuZXcgRXJyb3IoIk5vIHN1Y2ggbGFiZWw6ICIrbGUpO2RlbGV0ZSBQW2xlXTt2YXIgX2U9ZygpLW1lO3cubG9nKGxlKyI6ICIrX2UrIm1zIil9LCJ0aW1lRW5kIl0sW2Z1bmN0aW9u''@;'; put 'put ''IEooKXt2YXIgbGU9bmV3IEVycm9yO2xlLm5hbWU9IlRyYWNlIixsZS5tZXNzYWdlPUkuZm9ybWF0LmFwcGx5KG51bGwsYXJndW1lbnRzKSx3LmVycm9yKGxlLnN0YWNrKX0sInRyYWNlIl0sW2Z1bmN0aW9uIG5lKGxlKXt3LmxvZyhJLmluc3BlY3QobGUpKyJcbiIpfSwiZGlyIl0sW2Z1bmN0''@;'; put 'put ''aW9uIGllKGxlKXtpZighbGUpe3ZhciBtZT1CLmNhbGwoYXJndW1lbnRzLDEpO18ub2soITEsSS5mb3JtYXQuYXBwbHkobnVsbCxtZSkpfX0sImFzc2VydCJdXSxPPTA7TzxGLmxlbmd0aDtPKyspe3ZhciB6PUZbT10sTD16WzFdO3dbTF18fCh3W0xdPXpbMF0pfXVlLmV4cG9ydHM9d30sNjQ5''@;'; put 'put ''NzoodWUsWCx5KT0+e3ZhciBJPXkoODc2NCkuQnVmZmVyO2Z1bmN0aW9uIHEoZWUpe3JldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZWUpfVguaXNBcnJheT1mdW5jdGlvbiBfKGVlKXtyZXR1cm4gQXJyYXkuaXNBcnJheT9BcnJheS5pc0FycmF5KGVlKToiW29iamVjdCBB''@;'; put 'put ''cnJheV0iPT09cShlZSl9LFguaXNCb29sZWFuPWZ1bmN0aW9uIGcoZWUpe3JldHVybiJib29sZWFuIj09dHlwZW9mIGVlfSxYLmlzTnVsbD1mdW5jdGlvbiBCKGVlKXtyZXR1cm4gbnVsbD09PWVlfSxYLmlzTnVsbE9yVW5kZWZpbmVkPWZ1bmN0aW9uIHcoZWUpe3JldHVybiBudWxsPT1lZX0s''@;'; put 'put ''WC5pc051bWJlcj1mdW5jdGlvbiBQKGVlKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGVlfSxYLmlzU3RyaW5nPWZ1bmN0aW9uIEYoZWUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZWV9LFguaXNTeW1ib2w9ZnVuY3Rpb24gTyhlZSl7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBlZX0sWC5pc1Vu''@;'; put 'put ''ZGVmaW5lZD1mdW5jdGlvbiB6KGVlKXtyZXR1cm4gdm9pZCAwPT09ZWV9LFguaXNSZWdFeHA9ZnVuY3Rpb24gTihlZSl7cmV0dXJuIltvYmplY3QgUmVnRXhwXSI9PT1xKGVlKX0sWC5pc09iamVjdD1mdW5jdGlvbiBMKGVlKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGVlJiZudWxsIT09ZWV9''@;'; put 'put ''LFguaXNEYXRlPWZ1bmN0aW9uIEsoZWUpe3JldHVybiJbb2JqZWN0IERhdGVdIj09PXEoZWUpfSxYLmlzRXJyb3I9ZnVuY3Rpb24gVShlZSl7cmV0dXJuIltvYmplY3QgRXJyb3JdIj09PXEoZWUpfHxlZSBpbnN0YW5jZW9mIEVycm9yfSxYLmlzRnVuY3Rpb249ZnVuY3Rpb24gVyhlZSl7cmV0''@;'; put 'put ''dXJuImZ1bmN0aW9uIj09dHlwZW9mIGVlfSxYLmlzUHJpbWl0aXZlPWZ1bmN0aW9uIFkoZWUpe3JldHVybiBudWxsPT09ZWV8fCJib29sZWFuIj09dHlwZW9mIGVlfHwibnVtYmVyIj09dHlwZW9mIGVlfHwic3RyaW5nIj09dHlwZW9mIGVlfHwic3ltYm9sIj09dHlwZW9mIGVlfHx0eXBlb2Yg''@;'; put 'put ''ZWU+InUifSxYLmlzQnVmZmVyPUkuaXNCdWZmZXJ9LDYzOTM6KHVlLFgseSk9Pnt2YXIgST15KDg3NjQpLkJ1ZmZlcixfPXkoNjk0OCksZz15KDY0MjYpO3VlLmV4cG9ydHM9ZnVuY3Rpb24oTyl7cmV0dXJuIG5ldyB3KE8pfTt2YXIgQj17c2VjcDI1NmsxOntuYW1lOiJzZWNwMjU2azEiLGJ5''@;'; put 'put ''dGVMZW5ndGg6MzJ9LHNlY3AyMjRyMTp7bmFtZToicDIyNCIsYnl0ZUxlbmd0aDoyOH0scHJpbWUyNTZ2MTp7bmFtZToicDI1NiIsYnl0ZUxlbmd0aDozMn0scHJpbWUxOTJ2MTp7bmFtZToicDE5MiIsYnl0ZUxlbmd0aDoyNH0sZWQyNTUxOTp7bmFtZToiZWQyNTUxOSIsYnl0ZUxlbmd0aDoz''@;'; put 'put ''Mn0sc2VjcDM4NHIxOntuYW1lOiJwMzg0IixieXRlTGVuZ3RoOjQ4fSxzZWNwNTIxcjE6e25hbWU6InA1MjEiLGJ5dGVMZW5ndGg6NjZ9fTtmdW5jdGlvbiB3KEYpe3RoaXMuY3VydmVUeXBlPUJbRl0sdGhpcy5jdXJ2ZVR5cGV8fCh0aGlzLmN1cnZlVHlwZT17bmFtZTpGfSksdGhpcy5jdXJ2''@;'; put 'put ''ZT1uZXcgXy5lYyh0aGlzLmN1cnZlVHlwZS5uYW1lKSx0aGlzLmtleXM9dm9pZCAwfWZ1bmN0aW9uIFAoRixPLHope0FycmF5LmlzQXJyYXkoRil8fChGPUYudG9BcnJheSgpKTt2YXIgTj1uZXcgSShGKTtpZih6JiZOLmxlbmd0aDx6KXt2YXIgTD1uZXcgSSh6LU4ubGVuZ3RoKTtMLmZpbGwo''@;'; put 'put ''MCksTj1JLmNvbmNhdChbTCxOXSl9cmV0dXJuIE8/Ti50b1N0cmluZyhPKTpOfUIucDIyND1CLnNlY3AyMjRyMSxCLnAyNTY9Qi5zZWNwMjU2cjE9Qi5wcmltZTI1NnYxLEIucDE5Mj1CLnNlY3AxOTJyMT1CLnByaW1lMTkydjEsQi5wMzg0PUIuc2VjcDM4NHIxLEIucDUyMT1CLnNlY3A1MjFy''@;'; put 'put ''MSx3LnByb3RvdHlwZS5nZW5lcmF0ZUtleXM9ZnVuY3Rpb24oRixPKXtyZXR1cm4gdGhpcy5rZXlzPXRoaXMuY3VydmUuZ2VuS2V5UGFpcigpLHRoaXMuZ2V0UHVibGljS2V5KEYsTyl9LHcucHJvdG90eXBlLmNvbXB1dGVTZWNyZXQ9ZnVuY3Rpb24oRixPLHope3JldHVybiBPPU98fCJ1dGY4''@;'; put 'put ''IixJLmlzQnVmZmVyKEYpfHwoRj1uZXcgSShGLE8pKSxQKHRoaXMuY3VydmUua2V5RnJvbVB1YmxpYyhGKS5nZXRQdWJsaWMoKS5tdWwodGhpcy5rZXlzLmdldFByaXZhdGUoKSkuZ2V0WCgpLHosdGhpcy5jdXJ2ZVR5cGUuYnl0ZUxlbmd0aCl9LHcucHJvdG90eXBlLmdldFB1YmxpY0tleT1m''@;'; put 'put ''dW5jdGlvbihGLE8pe3ZhciB6PXRoaXMua2V5cy5nZXRQdWJsaWMoImNvbXByZXNzZWQiPT09TywhMCk7cmV0dXJuImh5YnJpZCI9PT1PJiYoelswXT16W3oubGVuZ3RoLTFdJTI/Nzo2KSxQKHosRil9LHcucHJvdG90eXBlLmdldFByaXZhdGVLZXk9ZnVuY3Rpb24oRil7cmV0dXJuIFAodGhp''@;'; put 'put ''cy5rZXlzLmdldFByaXZhdGUoKSxGKX0sdy5wcm90b3R5cGUuc2V0UHVibGljS2V5PWZ1bmN0aW9uKEYsTyl7cmV0dXJuIE89T3x8InV0ZjgiLEkuaXNCdWZmZXIoRil8fChGPW5ldyBJKEYsTykpLHRoaXMua2V5cy5faW1wb3J0UHVibGljKEYpLHRoaXN9LHcucHJvdG90eXBlLnNldFByaXZh''@;'; put 'put ''dGVLZXk9ZnVuY3Rpb24oRixPKXtPPU98fCJ1dGY4IixJLmlzQnVmZmVyKEYpfHwoRj1uZXcgSShGLE8pKTt2YXIgej1uZXcgZyhGKTtyZXR1cm4gej16LnRvU3RyaW5nKDE2KSx0aGlzLmtleXM9dGhpcy5jdXJ2ZS5nZW5LZXlQYWlyKCksdGhpcy5rZXlzLl9pbXBvcnRQcml2YXRlKHopLHRo''@;'; put 'put ''aXN9fSw2NDI2OmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEksXyl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGcoVixwKXtpZighVil0aHJvdyBuZXcgRXJyb3IocHx8IkFzc2VydGlvbiBmYWlsZWQiKX1mdW5jdGlvbiBCKFYscCl7Vi5zdXBlcl89cDt2YXIgYj1mdW5jdGlvbigpe307Yi5w''@;'; put 'put ''cm90b3R5cGU9cC5wcm90b3R5cGUsVi5wcm90b3R5cGU9bmV3IGIsVi5wcm90b3R5cGUuY29uc3RydWN0b3I9Vn1mdW5jdGlvbiB3KFYscCxiKXtpZih3LmlzQk4oVikpcmV0dXJuIFY7dGhpcy5uZWdhdGl2ZT0wLHRoaXMud29yZHM9bnVsbCx0aGlzLmxlbmd0aD0wLHRoaXMucmVkPW51bGws''@;'; put 'put ''bnVsbCE9PVYmJigoImxlIj09PXB8fCJiZSI9PT1wKSYmKGI9cCxwPTEwKSx0aGlzLl9pbml0KFZ8fDAscHx8MTAsYnx8ImJlIikpfXZhciBQOyJvYmplY3QiPT10eXBlb2YgST9JLmV4cG9ydHM9dzpfLkJOPXcsdy5CTj13LHcud29yZFNpemU9MjY7dHJ5e1A9dHlwZW9mIHdpbmRvdzwidSIm''@;'; put 'put ''JnR5cGVvZiB3aW5kb3cuQnVmZmVyPCJ1Ij93aW5kb3cuQnVmZmVyOnkoODYyMykuQnVmZmVyfWNhdGNoe31mdW5jdGlvbiBGKFYscCl7dmFyIGI9Vi5jaGFyQ29kZUF0KHApO3JldHVybiBiPj02NSYmYjw9NzA/Yi01NTpiPj05NyYmYjw9MTAyP2ItODc6Yi00OCYxNX1mdW5jdGlvbiBPKFYs''@;'; put 'put ''cCxiKXt2YXIgeD1GKFYsYik7cmV0dXJuIGItMT49cCYmKHh8PUYoVixiLTEpPDw0KSx4fWZ1bmN0aW9uIHooVixwLGIseCl7Zm9yKHZhciBDPTAsVD1NYXRoLm1pbihWLmxlbmd0aCxiKSxIPXA7SDxUO0grKyl7dmFyIGo9Vi5jaGFyQ29kZUF0KEgpLTQ4O0MqPXgsQys9aj49NDk/ai00OSsx''@;'; put 'put ''MDpqPj0xNz9qLTE3KzEwOmp9cmV0dXJuIEN9dy5pc0JOPWZ1bmN0aW9uKHApe3JldHVybiBwIGluc3RhbmNlb2Ygd3x8bnVsbCE9PXAmJiJvYmplY3QiPT10eXBlb2YgcCYmcC5jb25zdHJ1Y3Rvci53b3JkU2l6ZT09PXcud29yZFNpemUmJkFycmF5LmlzQXJyYXkocC53b3Jkcyl9LHcubWF4''@;'; put 'put ''PWZ1bmN0aW9uKHAsYil7cmV0dXJuIHAuY21wKGIpPjA/cDpifSx3Lm1pbj1mdW5jdGlvbihwLGIpe3JldHVybiBwLmNtcChiKTwwP3A6Yn0sdy5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24ocCxiLHgpe2lmKCJudW1iZXIiPT10eXBlb2YgcClyZXR1cm4gdGhpcy5faW5pdE51bWJlcihwLGIs''@;'; put 'put ''eCk7aWYoIm9iamVjdCI9PXR5cGVvZiBwKXJldHVybiB0aGlzLl9pbml0QXJyYXkocCxiLHgpOyJoZXgiPT09YiYmKGI9MTYpLGcoYj09PSgwfGIpJiZiPj0yJiZiPD0zNik7dmFyIEM9MDsiLSI9PT0ocD1wLnRvU3RyaW5nKCkucmVwbGFjZSgvXHMrL2csIiIpKVswXSYmKEMrKyx0aGlzLm5l''@;'; put 'put ''Z2F0aXZlPTEpLEM8cC5sZW5ndGgmJigxNj09PWI/dGhpcy5fcGFyc2VIZXgocCxDLHgpOih0aGlzLl9wYXJzZUJhc2UocCxiLEMpLCJsZSI9PT14JiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksYix4KSkpfSx3LnByb3RvdHlwZS5faW5pdE51bWJlcj1mdW5jdGlvbihwLGIseCl7''@;'; put 'put ''cDwwJiYodGhpcy5uZWdhdGl2ZT0xLHA9LXApLHA8NjcxMDg4NjQ/KHRoaXMud29yZHM9WzY3MTA4ODYzJnBdLHRoaXMubGVuZ3RoPTEpOnA8NDUwMzU5OTYyNzM3MDQ5Nj8odGhpcy53b3Jkcz1bNjcxMDg4NjMmcCxwLzY3MTA4ODY0JjY3MTA4ODYzXSx0aGlzLmxlbmd0aD0yKTooZyhwPDkw''@;'; put 'put ''MDcxOTkyNTQ3NDA5OTIpLHRoaXMud29yZHM9WzY3MTA4ODYzJnAscC82NzEwODg2NCY2NzEwODg2MywxXSx0aGlzLmxlbmd0aD0zKSwibGUiPT09eCYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLGIseCl9LHcucHJvdG90eXBlLl9pbml0QXJyYXk9ZnVuY3Rpb24ocCxiLHgpe2lm''@;'; put 'put ''KGcoIm51bWJlciI9PXR5cGVvZiBwLmxlbmd0aCkscC5sZW5ndGg8PTApcmV0dXJuIHRoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTEsdGhpczt0aGlzLmxlbmd0aD1NYXRoLmNlaWwocC5sZW5ndGgvMyksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgQz0wO0M8''@;'; put 'put ''dGhpcy5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109MDt2YXIgVCxILGo9MDtpZigiYmUiPT09eClmb3IoQz1wLmxlbmd0aC0xLFQ9MDtDPj0wO0MtPTMpdGhpcy53b3Jkc1tUXXw9KEg9cFtDXXxwW0MtMV08PDh8cFtDLTJdPDwxNik8PGomNjcxMDg4NjMsdGhpcy53b3Jkc1tUKzFdPUg+Pj4y''@;'; put 'put ''Ni1qJjY3MTA4ODYzLChqKz0yNCk+PTI2JiYoai09MjYsVCsrKTtlbHNlIGlmKCJsZSI9PT14KWZvcihDPTAsVD0wO0M8cC5sZW5ndGg7Qys9Myl0aGlzLndvcmRzW1RdfD0oSD1wW0NdfHBbQysxXTw8OHxwW0MrMl08PDE2KTw8aiY2NzEwODg2Myx0aGlzLndvcmRzW1QrMV09SD4+PjI2LWom''@;'; put 'put ''NjcxMDg4NjMsKGorPTI0KT49MjYmJihqLT0yNixUKyspO3JldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl9wYXJzZUhleD1mdW5jdGlvbihwLGIseCl7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKChwLmxlbmd0aC1iKS82KSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7''@;'; put 'put ''Zm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT0wO3ZhciBqLFQ9MCxIPTA7aWYoImJlIj09PXgpZm9yKEM9cC5sZW5ndGgtMTtDPj1iO0MtPTIpaj1PKHAsYixDKTw8VCx0aGlzLndvcmRzW0hdfD02NzEwODg2MyZqLFQ+PTE4PyhULT0xOCx0aGlzLndvcmRzW0gr''@;'; put 'put ''PTFdfD1qPj4+MjYpOlQrPTg7ZWxzZSBmb3IoQz0ocC5sZW5ndGgtYiklMj09MD9iKzE6YjtDPHAubGVuZ3RoO0MrPTIpaj1PKHAsYixDKTw8VCx0aGlzLndvcmRzW0hdfD02NzEwODg2MyZqLFQ+PTE4PyhULT0xOCx0aGlzLndvcmRzW0grPTFdfD1qPj4+MjYpOlQrPTg7dGhpcy5zdHJpcCgp''@;'; put 'put ''fSx3LnByb3RvdHlwZS5fcGFyc2VCYXNlPWZ1bmN0aW9uKHAsYix4KXt0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xO2Zvcih2YXIgQz0wLFQ9MTtUPD02NzEwODg2MztUKj1iKUMrKztDLS0sVD1UL2J8MDtmb3IodmFyIEg9cC5sZW5ndGgteCxqPUglQyxFPU1hdGgubWluKEgsSC1qKSt4''@;'; put 'put ''LG09MCxBPXg7QTxFO0ErPUMpbT16KHAsQSxBK0MsYiksdGhpcy5pbXVsbihUKSx0aGlzLndvcmRzWzBdK208NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9bTp0aGlzLl9pYWRkbihtKTtpZigwIT09ail7dmFyIGFlPTE7Zm9yKG09eihwLEEscC5sZW5ndGgsYiksQT0wO0E8ajtBKyspYWUqPWI7''@;'; put 'put ''dGhpcy5pbXVsbihhZSksdGhpcy53b3Jkc1swXSttPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPW06dGhpcy5faWFkZG4obSl9dGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKHApe3Aud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIGI9MDtiPHRoaXMu''@;'; put 'put ''bGVuZ3RoO2IrKylwLndvcmRzW2JdPXRoaXMud29yZHNbYl07cC5sZW5ndGg9dGhpcy5sZW5ndGgscC5uZWdhdGl2ZT10aGlzLm5lZ2F0aXZlLHAucmVkPXRoaXMucmVkfSx3LnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciBwPW5ldyB3KG51bGwpO3JldHVybiB0aGlzLmNvcHkocCks''@;'; put 'put ''cH0sdy5wcm90b3R5cGUuX2V4cGFuZD1mdW5jdGlvbihwKXtmb3IoO3RoaXMubGVuZ3RoPHA7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtyZXR1cm4gdGhpc30sdy5wcm90b3R5cGUuc3RyaXA9ZnVuY3Rpb24oKXtmb3IoO3RoaXMubGVuZ3RoPjEmJjA9PT10aGlzLndvcmRzW3RoaXMu''@;'; put 'put ''bGVuZ3RoLTFdOyl0aGlzLmxlbmd0aC0tO3JldHVybiB0aGlzLl9ub3JtU2lnbigpfSx3LnByb3RvdHlwZS5fbm9ybVNpZ249ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXSYmKHRoaXMubmVnYXRpdmU9MCksdGhpc30sdy5wcm90b3R5cGUuaW5z''@;'; put 'put ''cGVjdD1mdW5jdGlvbigpe3JldHVybih0aGlzLnJlZD8iPEJOLVI6ICI6IjxCTjogIikrdGhpcy50b1N0cmluZygxNikrIj4ifTt2YXIgTj1bIiIsIjAiLCIwMCIsIjAwMCIsIjAwMDAiLCIwMDAwMCIsIjAwMDAwMCIsIjAwMDAwMDAiLCIwMDAwMDAwMCIsIjAwMDAwMDAwMCIsIjAwMDAwMDAw''@;'; put 'put ''MDAiLCIwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAi''@;'; put 'put ''LCIwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiXSxMPVswLDAsMjUs''@;'; put 'put ''MTYsMTIsMTEsMTAsOSw4LDgsNyw3LDcsNyw2LDYsNiw2LDYsNiw2LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVdLEs9WzAsMCwzMzU1NDQzMiw0MzA0NjcyMSwxNjc3NzIxNiw0ODgyODEyNSw2MDQ2NjE3Niw0MDM1MzYwNywxNjc3NzIxNiw0MzA0NjcyMSwxZTcsMTk0ODcxNzEs''@;'; put 'put ''MzU4MzE4MDgsNjI3NDg1MTcsNzUyOTUzNiwxMTM5MDYyNSwxNjc3NzIxNiwyNDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQwODQxMDEsNTE1MzYzMiw2NDM2MzQzLDc5NjI2MjQsOTc2NTYyNSwxMTg4MTM3NiwxNDM0ODkwNywxNzIxMDM2OCwyMDUxMTE0OSwyNDNlNSwyODYyOTE1''@;'; put 'put ''MSwzMzU1NDQzMiwzOTEzNTM5Myw0NTQzNTQyNCw1MjUyMTg3NSw2MDQ2NjE3Nl07ZnVuY3Rpb24gVyhWLHAsYil7Yi5uZWdhdGl2ZT1wLm5lZ2F0aXZlXlYubmVnYXRpdmU7dmFyIHg9Vi5sZW5ndGgrcC5sZW5ndGh8MDtiLmxlbmd0aD14LHg9eC0xfDA7dmFyIEM9MHxWLndvcmRzWzBdLFQ9''@;'; put 'put ''MHxwLndvcmRzWzBdLEg9QypULEU9SC82NzEwODg2NHwwO2Iud29yZHNbMF09NjcxMDg4NjMmSDtmb3IodmFyIG09MTttPHg7bSsrKXtmb3IodmFyIEE9RT4+PjI2LGFlPTY3MTA4ODYzJkUsdGU9TWF0aC5taW4obSxwLmxlbmd0aC0xKSxzZT1NYXRoLm1heCgwLG0tVi5sZW5ndGgrMSk7c2U8''@;'; put 'put ''PXRlO3NlKyspQSs9KEg9KEM9MHxWLndvcmRzW20tc2V8MF0pKihUPTB8cC53b3Jkc1tzZV0pK2FlKS82NzEwODg2NHwwLGFlPTY3MTA4ODYzJkg7Yi53b3Jkc1ttXT0wfGFlLEU9MHxBfXJldHVybiAwIT09RT9iLndvcmRzW21dPTB8RTpiLmxlbmd0aC0tLGIuc3RyaXAoKX13LnByb3RvdHlw''@;'; put 'put ''ZS50b1N0cmluZz1mdW5jdGlvbihwLGIpe3ZhciB4O2lmKGI9MHxifHwxLDE2PT09KHA9cHx8MTApfHwiaGV4Ij09PXApe3g9IiI7Zm9yKHZhciBDPTAsVD0wLEg9MDtIPHRoaXMubGVuZ3RoO0grKyl7dmFyIGo9dGhpcy53b3Jkc1tIXSxFPSgxNjc3NzIxNSYoajw8Q3xUKSkudG9TdHJpbmco''@;'; put 'put ''MTYpO1Q9aj4+PjI0LUMmMTY3NzcyMTUsKEMrPTIpPj0yNiYmKEMtPTI2LEgtLSkseD0wIT09VHx8SCE9PXRoaXMubGVuZ3RoLTE/Tls2LUUubGVuZ3RoXStFK3g6RSt4fWZvcigwIT09VCYmKHg9VC50b1N0cmluZygxNikreCk7eC5sZW5ndGglYiE9MDspeD0iMCIreDtyZXR1cm4gMCE9PXRo''@;'; put 'put ''aXMubmVnYXRpdmUmJih4PSItIit4KSx4fWlmKHA9PT0oMHxwKSYmcD49MiYmcDw9MzYpe3ZhciBtPUxbcF0sQT1LW3BdO3g9IiI7dmFyIGFlPXRoaXMuY2xvbmUoKTtmb3IoYWUubmVnYXRpdmU9MDshYWUuaXNaZXJvKCk7KXt2YXIgdGU9YWUubW9kbihBKS50b1N0cmluZyhwKTt4PShhZT1h''@;'; put 'put ''ZS5pZGl2bihBKSkuaXNaZXJvKCk/dGUreDpOW20tdGUubGVuZ3RoXSt0ZSt4fWZvcih0aGlzLmlzWmVybygpJiYoeD0iMCIreCk7eC5sZW5ndGglYiE9MDspeD0iMCIreDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJih4PSItIit4KSx4fWcoITEsIkJhc2Ugc2hvdWxkIGJlIGJldHdlZW4g''@;'; put 'put ''MiBhbmQgMzYiKX0sdy5wcm90b3R5cGUudG9OdW1iZXI9ZnVuY3Rpb24oKXt2YXIgcD10aGlzLndvcmRzWzBdO3JldHVybiAyPT09dGhpcy5sZW5ndGg/cCs9NjcxMDg4NjQqdGhpcy53b3Jkc1sxXTozPT09dGhpcy5sZW5ndGgmJjE9PT10aGlzLndvcmRzWzJdP3ArPTQ1MDM1OTk2MjczNzA0''@;'; put 'put ''OTYrNjcxMDg4NjQqdGhpcy53b3Jkc1sxXTp0aGlzLmxlbmd0aD4yJiZnKCExLCJOdW1iZXIgY2FuIG9ubHkgc2FmZWx5IHN0b3JlIHVwIHRvIDUzIGJpdHMiKSwwIT09dGhpcy5uZWdhdGl2ZT8tcDpwfSx3LnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1N0cmlu''@;'; put 'put ''ZygxNil9LHcucHJvdG90eXBlLnRvQnVmZmVyPWZ1bmN0aW9uKHAsYil7cmV0dXJuIGcodHlwZW9mIFA8InUiKSx0aGlzLnRvQXJyYXlMaWtlKFAscCxiKX0sdy5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbihwLGIpe3JldHVybiB0aGlzLnRvQXJyYXlMaWtlKEFycmF5LHAsYil9LHcucHJv''@;'; put 'put ''dG90eXBlLnRvQXJyYXlMaWtlPWZ1bmN0aW9uKHAsYix4KXt2YXIgQz10aGlzLmJ5dGVMZW5ndGgoKSxUPXh8fE1hdGgubWF4KDEsQyk7ZyhDPD1ULCJieXRlIGFycmF5IGxvbmdlciB0aGFuIGRlc2lyZWQgbGVuZ3RoIiksZyhUPjAsIlJlcXVlc3RlZCBhcnJheSBsZW5ndGggPD0gMCIpLHRo''@;'; put 'put ''aXMuc3RyaXAoKTt2YXIgRSxtLEg9ImxlIj09PWIsaj1uZXcgcChUKSxBPXRoaXMuY2xvbmUoKTtpZihIKXtmb3IobT0wOyFBLmlzWmVybygpO20rKylFPUEuYW5kbG4oMjU1KSxBLml1c2hybig4KSxqW21dPUU7Zm9yKDttPFQ7bSsrKWpbbV09MH1lbHNle2ZvcihtPTA7bTxULUM7bSsrKWpb''@;'; put 'put ''bV09MDtmb3IobT0wOyFBLmlzWmVybygpO20rKylFPUEuYW5kbG4oMjU1KSxBLml1c2hybig4KSxqW1QtbS0xXT1FfXJldHVybiBqfSx3LnByb3RvdHlwZS5fY291bnRCaXRzPU1hdGguY2x6MzI/ZnVuY3Rpb24ocCl7cmV0dXJuIDMyLU1hdGguY2x6MzIocCl9OmZ1bmN0aW9uKHApe3ZhciBi''@;'; put 'put ''PXAseD0wO3JldHVybiBiPj00MDk2JiYoeCs9MTMsYj4+Pj0xMyksYj49NjQmJih4Kz03LGI+Pj49NyksYj49OCYmKHgrPTQsYj4+Pj00KSxiPj0yJiYoeCs9MixiPj4+PTIpLHgrYn0sdy5wcm90b3R5cGUuX3plcm9CaXRzPWZ1bmN0aW9uKHApe2lmKDA9PT1wKXJldHVybiAyNjt2YXIgYj1w''@;'; put 'put ''LHg9MDtyZXR1cm4gODE5MSZifHwoeCs9MTMsYj4+Pj0xMyksMTI3JmJ8fCh4Kz03LGI+Pj49NyksMTUmYnx8KHgrPTQsYj4+Pj00KSwzJmJ8fCh4Kz0yLGI+Pj49MiksMSZifHx4KysseH0sdy5wcm90b3R5cGUuYml0TGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5fY291bnRCaXRzKHRo''@;'; put 'put ''aXMud29yZHNbdGhpcy5sZW5ndGgtMV0pO3JldHVybiAyNioodGhpcy5sZW5ndGgtMSkrYn0sdy5wcm90b3R5cGUuemVyb0JpdHM9ZnVuY3Rpb24oKXtpZih0aGlzLmlzWmVybygpKXJldHVybiAwO2Zvcih2YXIgcD0wLGI9MDtiPHRoaXMubGVuZ3RoO2IrKyl7dmFyIHg9dGhpcy5femVyb0Jp''@;'; put 'put ''dHModGhpcy53b3Jkc1tiXSk7aWYocCs9eCwyNiE9PXgpYnJlYWt9cmV0dXJuIHB9LHcucHJvdG90eXBlLmJ5dGVMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuYml0TGVuZ3RoKCkvOCl9LHcucHJvdG90eXBlLnRvVHdvcz1mdW5jdGlvbihwKXtyZXR1cm4gMCE9PXRo''@;'; put 'put ''aXMubmVnYXRpdmU/dGhpcy5hYnMoKS5pbm90bihwKS5pYWRkbigxKTp0aGlzLmNsb25lKCl9LHcucHJvdG90eXBlLmZyb21Ud29zPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLnRlc3RuKHAtMSk/dGhpcy5ub3RuKHApLmlhZGRuKDEpLmluZWcoKTp0aGlzLmNsb25lKCl9LHcucHJvdG90eXBl''@;'; put 'put ''LmlzTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlfSx3LnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmluZWcoKX0sdy5wcm90b3R5cGUuaW5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzWmVybygpfHwodGhpcy5uZWdhdGl2ZV49''@;'; put 'put ''MSksdGhpc30sdy5wcm90b3R5cGUuaXVvcj1mdW5jdGlvbihwKXtmb3IoO3RoaXMubGVuZ3RoPHAubGVuZ3RoOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7Zm9yKHZhciBiPTA7YjxwLmxlbmd0aDtiKyspdGhpcy53b3Jkc1tiXT10aGlzLndvcmRzW2JdfHAud29yZHNbYl07cmV0dXJu''@;'; put 'put ''IHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaW9yPWZ1bmN0aW9uKHApe3JldHVybiBnKCEodGhpcy5uZWdhdGl2ZXxwLm5lZ2F0aXZlKSksdGhpcy5pdW9yKHApfSx3LnByb3RvdHlwZS5vcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLmlv''@;'; put 'put ''cihwKTpwLmNsb25lKCkuaW9yKHRoaXMpfSx3LnByb3RvdHlwZS51b3I9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdW9yKHApOnAuY2xvbmUoKS5pdW9yKHRoaXMpfSx3LnByb3RvdHlwZS5pdWFuZD1mdW5jdGlvbihwKXt2YXIgYjtiPXRo''@;'; put 'put ''aXMubGVuZ3RoPnAubGVuZ3RoP3A6dGhpcztmb3IodmFyIHg9MDt4PGIubGVuZ3RoO3grKyl0aGlzLndvcmRzW3hdPXRoaXMud29yZHNbeF0mcC53b3Jkc1t4XTtyZXR1cm4gdGhpcy5sZW5ndGg9Yi5sZW5ndGgsdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pYW5kPWZ1bmN0aW9uKHApe3Jl''@;'; put 'put ''dHVybiBnKCEodGhpcy5uZWdhdGl2ZXxwLm5lZ2F0aXZlKSksdGhpcy5pdWFuZChwKX0sdy5wcm90b3R5cGUuYW5kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaWFuZChwKTpwLmNsb25lKCkuaWFuZCh0aGlzKX0sdy5wcm90b3R5cGUudWFu''@;'; put 'put ''ZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLml1YW5kKHApOnAuY2xvbmUoKS5pdWFuZCh0aGlzKX0sdy5wcm90b3R5cGUuaXV4b3I9ZnVuY3Rpb24ocCl7dmFyIGIseDt0aGlzLmxlbmd0aD5wLmxlbmd0aD8oYj10aGlzLHg9cCk6KGI9cCx4''@;'; put 'put ''PXRoaXMpO2Zvcih2YXIgQz0wO0M8eC5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109Yi53b3Jkc1tDXV54LndvcmRzW0NdO2lmKHRoaXMhPT1iKWZvcig7QzxiLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT1iLndvcmRzW0NdO3JldHVybiB0aGlzLmxlbmd0aD1iLmxlbmd0aCx0aGlzLnN0cmlw''@;'; put 'put ''KCl9LHcucHJvdG90eXBlLml4b3I9ZnVuY3Rpb24ocCl7cmV0dXJuIGcoISh0aGlzLm5lZ2F0aXZlfHAubmVnYXRpdmUpKSx0aGlzLml1eG9yKHApfSx3LnByb3RvdHlwZS54b3I9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5peG9yKHApOnAu''@;'; put 'put ''Y2xvbmUoKS5peG9yKHRoaXMpfSx3LnByb3RvdHlwZS51eG9yPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaXV4b3IocCk6cC5jbG9uZSgpLml1eG9yKHRoaXMpfSx3LnByb3RvdHlwZS5pbm90bj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10''@;'; put 'put ''eXBlb2YgcCYmcD49MCk7dmFyIGI9MHxNYXRoLmNlaWwocC8yNikseD1wJTI2O3RoaXMuX2V4cGFuZChiKSx4PjAmJmItLTtmb3IodmFyIEM9MDtDPGI7QysrKXRoaXMud29yZHNbQ109NjcxMDg4NjMmfnRoaXMud29yZHNbQ107cmV0dXJuIHg+MCYmKHRoaXMud29yZHNbQ109fnRoaXMud29y''@;'; put 'put ''ZHNbQ10mNjcxMDg4NjM+PjI2LXgpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUubm90bj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlub3RuKHApfSx3LnByb3RvdHlwZS5zZXRuPWZ1bmN0aW9uKHAsYil7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApO3ZhciB4PXAvMjZ8''@;'; put 'put ''MCxDPXAlMjY7cmV0dXJuIHRoaXMuX2V4cGFuZCh4KzEpLHRoaXMud29yZHNbeF09Yj90aGlzLndvcmRzW3hdfDE8PEM6dGhpcy53b3Jkc1t4XSZ+KDE8PEMpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihwKXt2YXIgYix4LEM7aWYoMCE9PXRoaXMubmVnYXRpdmUm''@;'; put 'put ''JjA9PT1wLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsYj10aGlzLmlzdWIocCksdGhpcy5uZWdhdGl2ZV49MSx0aGlzLl9ub3JtU2lnbigpO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09cC5uZWdhdGl2ZSlyZXR1cm4gcC5uZWdhdGl2ZT0wLGI9dGhpcy5pc3ViKHApLHAubmVn''@;'; put 'put ''YXRpdmU9MSxiLl9ub3JtU2lnbigpO3RoaXMubGVuZ3RoPnAubGVuZ3RoPyh4PXRoaXMsQz1wKTooeD1wLEM9dGhpcyk7Zm9yKHZhciBUPTAsSD0wO0g8Qy5sZW5ndGg7SCsrKXRoaXMud29yZHNbSF09NjcxMDg4NjMmKGI9KDB8eC53b3Jkc1tIXSkrKDB8Qy53b3Jkc1tIXSkrVCksVD1iPj4+''@;'; put 'put ''MjY7Zm9yKDswIT09VCYmSDx4Lmxlbmd0aDtIKyspdGhpcy53b3Jkc1tIXT02NzEwODg2MyYoYj0oMHx4LndvcmRzW0hdKStUKSxUPWI+Pj4yNjtpZih0aGlzLmxlbmd0aD14Lmxlbmd0aCwwIT09VCl0aGlzLndvcmRzW3RoaXMubGVuZ3RoXT1ULHRoaXMubGVuZ3RoKys7ZWxzZSBpZih4IT09''@;'; put 'put ''dGhpcylmb3IoO0g8eC5sZW5ndGg7SCsrKXRoaXMud29yZHNbSF09eC53b3Jkc1tIXTtyZXR1cm4gdGhpc30sdy5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHApe3ZhciBiO3JldHVybiAwIT09cC5uZWdhdGl2ZSYmMD09PXRoaXMubmVnYXRpdmU/KHAubmVnYXRpdmU9MCxiPXRoaXMuc3ViKHAp''@;'; put 'put ''LHAubmVnYXRpdmVePTEsYik6MD09PXAubmVnYXRpdmUmJjAhPT10aGlzLm5lZ2F0aXZlPyh0aGlzLm5lZ2F0aXZlPTAsYj1wLnN1Yih0aGlzKSx0aGlzLm5lZ2F0aXZlPTEsYik6dGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhZGQocCk6cC5jbG9uZSgpLmlhZGQodGhpcyl9''@;'; put 'put ''LHcucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24ocCl7aWYoMCE9PXAubmVnYXRpdmUpe3AubmVnYXRpdmU9MDt2YXIgYj10aGlzLmlhZGQocCk7cmV0dXJuIHAubmVnYXRpdmU9MSxiLl9ub3JtU2lnbigpfWlmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5p''@;'; put 'put ''YWRkKHApLHRoaXMubmVnYXRpdmU9MSx0aGlzLl9ub3JtU2lnbigpO3ZhciBDLFQseD10aGlzLmNtcChwKTtpZigwPT09eClyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMubGVuZ3RoPTEsdGhpcy53b3Jkc1swXT0wLHRoaXM7eD4wPyhDPXRoaXMsVD1wKTooQz1wLFQ9dGhpcyk7Zm9yKHZh''@;'; put 'put ''ciBIPTAsaj0wO2o8VC5sZW5ndGg7aisrKUg9KGI9KDB8Qy53b3Jkc1tqXSktKDB8VC53b3Jkc1tqXSkrSCk+PjI2LHRoaXMud29yZHNbal09NjcxMDg4NjMmYjtmb3IoOzAhPT1IJiZqPEMubGVuZ3RoO2orKylIPShiPSgwfEMud29yZHNbal0pK0gpPj4yNix0aGlzLndvcmRzW2pdPTY3MTA4''@;'; put 'put ''ODYzJmI7aWYoMD09PUgmJmo8Qy5sZW5ndGgmJkMhPT10aGlzKWZvcig7ajxDLmxlbmd0aDtqKyspdGhpcy53b3Jkc1tqXT1DLndvcmRzW2pdO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxqKSxDIT09dGhpcyYmKHRoaXMubmVnYXRpdmU9MSksdGhpcy5zdHJpcCgp''@;'; put 'put ''fSx3LnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3ViKHApfTt2YXIgWT1mdW5jdGlvbihwLGIseCl7dmFyIEUsbSxBLEM9cC53b3JkcyxUPWIud29yZHMsSD14LndvcmRzLGo9MCxhZT0wfENbMF0sdGU9ODE5MSZhZSxzZT1hZT4+PjEzLHdlPTB8Q1sx''@;'; put 'put ''XSxVZT04MTkxJndlLEplPXdlPj4+MTMsb3Q9MHxDWzJdLHhlPTgxOTEmb3QsdmU9b3Q+Pj4xMyxYZT0wfENbM10semU9ODE5MSZYZSxEZT1YZT4+PjEzLEZlPTB8Q1s0XSxPZT04MTkxJkZlLEllPUZlPj4+MTMsVmU9MHxDWzVdLGtlPTgxOTEmVmUsQWU9VmU+Pj4xMyxfdD0wfENbNl0sbnQ9''@;'; put 'put ''ODE5MSZfdCxRZT1fdD4+PjEzLHVuPTB8Q1s3XSx5dD04MTkxJnVuLE10PXVuPj4+MTMsRHQ9MHxDWzhdLGl0PTgxOTEmRHQsJGU9RHQ+Pj4xMyx0dD0wfENbOV0sSGU9ODE5MSZ0dCx1dD10dD4+PjEzLHF0PTB8VFswXSxSdD04MTkxJnF0LFB0PXF0Pj4+MTMsY2k9MHxUWzFdLFF0PTgxOTEm''@;'; put 'put ''Y2ksc249Y2k+Pj4xMyxSaT0wfFRbMl0saG49ODE5MSZSaSxmdD1SaT4+PjEzLE9yPTB8VFszXSxXdD04MTkxJk9yLEF0PU9yPj4+MTMsUm49MHxUWzRdLHN0PTgxOTEmUm4sVXQ9Um4+Pj4xMyxyaT0wfFRbNV0sV2U9ODE5MSZyaSxUdD1yaT4+PjEzLG5yPTB8VFs2XSxodD04MTkxJm5yLHh0''@;'; put 'put ''PW5yPj4+MTMsam49MHxUWzddLHJuPTgxOTEmam4senQ9am4+Pj4xMyxoaT0wfFRbOF0sY249ODE5MSZoaSxmbj1oaT4+PjEzLElpPTB8VFs5XSxYdD04MTkxJklpLGVuPUlpPj4+MTM7eC5uZWdhdGl2ZT1wLm5lZ2F0aXZlXmIubmVnYXRpdmUseC5sZW5ndGg9MTk7dmFyIHVhPShqKyhFPU1h''@;'; put 'put ''dGguaW11bCh0ZSxSdCkpfDApKygoODE5MSYobT0obT1NYXRoLmltdWwodGUsUHQpKStNYXRoLmltdWwoc2UsUnQpfDApKTw8MTMpfDA7aj0oKEE9TWF0aC5pbXVsKHNlLFB0KSkrKG0+Pj4xMyl8MCkrKHVhPj4+MjYpfDAsdWEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKFVlLFJ0KSxtPShtPU1h''@;'; put 'put ''dGguaW11bChVZSxQdCkpK01hdGguaW11bChKZSxSdCl8MCxBPU1hdGguaW11bChKZSxQdCk7dmFyIEVpPShqKyhFPUUrTWF0aC5pbXVsKHRlLFF0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsc24pfDApK01hdGguaW11bChzZSxRdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01h''@;'; put 'put ''dGguaW11bChzZSxzbil8MCkrKG0+Pj4xMyl8MCkrKEVpPj4+MjYpfDAsRWkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKHhlLFJ0KSxtPShtPU1hdGguaW11bCh4ZSxQdCkpK01hdGguaW11bCh2ZSxSdCl8MCxBPU1hdGguaW11bCh2ZSxQdCksRT1FK01hdGguaW11bChVZSxRdCl8MCxtPShtPW0r''@;'; put 'put ''TWF0aC5pbXVsKFVlLHNuKXwwKStNYXRoLmltdWwoSmUsUXQpfDAsQT1BK01hdGguaW11bChKZSxzbil8MDt2YXIgdnI9KGorKEU9RStNYXRoLmltdWwodGUsaG4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxmdCl8MCkrTWF0aC5pbXVsKHNlLGhuKXwwKSk8PDEzKXwwO2o9''@;'; put 'put ''KChBPUErTWF0aC5pbXVsKHNlLGZ0KXwwKSsobT4+PjEzKXwwKSsodnI+Pj4yNil8MCx2ciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoemUsUnQpLG09KG09TWF0aC5pbXVsKHplLFB0KSkrTWF0aC5pbXVsKERlLFJ0KXwwLEE9TWF0aC5pbXVsKERlLFB0KSxFPUUrTWF0aC5pbXVsKHhlLFF0KXww''@;'; put 'put ''LG09KG09bStNYXRoLmltdWwoeGUsc24pfDApK01hdGguaW11bCh2ZSxRdCl8MCxBPUErTWF0aC5pbXVsKHZlLHNuKXwwLEU9RStNYXRoLmltdWwoVWUsaG4pfDAsbT0obT1tK01hdGguaW11bChVZSxmdCl8MCkrTWF0aC5pbXVsKEplLGhuKXwwLEE9QStNYXRoLmltdWwoSmUsZnQpfDA7dmFy''@;'; put 'put ''IFduPShqKyhFPUUrTWF0aC5pbXVsKHRlLFd0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsQXQpfDApK01hdGguaW11bChzZSxXdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxBdCl8MCkrKG0+Pj4xMyl8MCkrKFduPj4+MjYpfDAsV24mPTY3MTA4ODYzLEU9''@;'; put 'put ''TWF0aC5pbXVsKE9lLFJ0KSxtPShtPU1hdGguaW11bChPZSxQdCkpK01hdGguaW11bChJZSxSdCl8MCxBPU1hdGguaW11bChJZSxQdCksRT1FK01hdGguaW11bCh6ZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKHplLHNuKXwwKStNYXRoLmltdWwoRGUsUXQpfDAsQT1BK01hdGguaW11bChEZSxz''@;'; put 'put ''bil8MCxFPUUrTWF0aC5pbXVsKHhlLGhuKXwwLG09KG09bStNYXRoLmltdWwoeGUsZnQpfDApK01hdGguaW11bCh2ZSxobil8MCxBPUErTWF0aC5pbXVsKHZlLGZ0KXwwLEU9RStNYXRoLmltdWwoVWUsV3QpfDAsbT0obT1tK01hdGguaW11bChVZSxBdCl8MCkrTWF0aC5pbXVsKEplLFd0KXww''@;'; put 'put ''LEE9QStNYXRoLmltdWwoSmUsQXQpfDA7dmFyICRpPShqKyhFPUUrTWF0aC5pbXVsKHRlLHN0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsVXQpfDApK01hdGguaW11bChzZSxzdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxVdCl8MCkrKG0+Pj4xMyl8MCkr''@;'; put 'put ''KCRpPj4+MjYpfDAsJGkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKGtlLFJ0KSxtPShtPU1hdGguaW11bChrZSxQdCkpK01hdGguaW11bChBZSxSdCl8MCxBPU1hdGguaW11bChBZSxQdCksRT1FK01hdGguaW11bChPZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKE9lLHNuKXwwKStNYXRoLmltdWwo''@;'; put 'put ''SWUsUXQpfDAsQT1BK01hdGguaW11bChJZSxzbil8MCxFPUUrTWF0aC5pbXVsKHplLGhuKXwwLG09KG09bStNYXRoLmltdWwoemUsZnQpfDApK01hdGguaW11bChEZSxobil8MCxBPUErTWF0aC5pbXVsKERlLGZ0KXwwLEU9RStNYXRoLmltdWwoeGUsV3QpfDAsbT0obT1tK01hdGguaW11bCh4''@;'; put 'put ''ZSxBdCl8MCkrTWF0aC5pbXVsKHZlLFd0KXwwLEE9QStNYXRoLmltdWwodmUsQXQpfDAsRT1FK01hdGguaW11bChVZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLFV0KXwwKStNYXRoLmltdWwoSmUsc3QpfDAsQT1BK01hdGguaW11bChKZSxVdCl8MDt2YXIgZWk9KGorKEU9RStNYXRoLmlt''@;'; put 'put ''dWwodGUsV2UpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxUdCl8MCkrTWF0aC5pbXVsKHNlLFdlKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLFR0KXwwKSsobT4+PjEzKXwwKSsoZWk+Pj4yNil8MCxlaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwobnQsUnQpLG09''@;'; put 'put ''KG09TWF0aC5pbXVsKG50LFB0KSkrTWF0aC5pbXVsKFFlLFJ0KXwwLEE9TWF0aC5pbXVsKFFlLFB0KSxFPUUrTWF0aC5pbXVsKGtlLFF0KXwwLG09KG09bStNYXRoLmltdWwoa2Usc24pfDApK01hdGguaW11bChBZSxRdCl8MCxBPUErTWF0aC5pbXVsKEFlLHNuKXwwLEU9RStNYXRoLmltdWwo''@;'; put 'put ''T2UsaG4pfDAsbT0obT1tK01hdGguaW11bChPZSxmdCl8MCkrTWF0aC5pbXVsKEllLGhuKXwwLEE9QStNYXRoLmltdWwoSWUsZnQpfDAsRT1FK01hdGguaW11bCh6ZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKHplLEF0KXwwKStNYXRoLmltdWwoRGUsV3QpfDAsQT1BK01hdGguaW11bChEZSxB''@;'; put 'put ''dCl8MCxFPUUrTWF0aC5pbXVsKHhlLHN0KXwwLG09KG09bStNYXRoLmltdWwoeGUsVXQpfDApK01hdGguaW11bCh2ZSxzdCl8MCxBPUErTWF0aC5pbXVsKHZlLFV0KXwwLEU9RStNYXRoLmltdWwoVWUsV2UpfDAsbT0obT1tK01hdGguaW11bChVZSxUdCl8MCkrTWF0aC5pbXVsKEplLFdlKXww''@;'; put 'put ''LEE9QStNYXRoLmltdWwoSmUsVHQpfDA7dmFyIFFyPShqKyhFPUUrTWF0aC5pbXVsKHRlLGh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUseHQpfDApK01hdGguaW11bChzZSxodCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSx4dCl8MCkrKG0+Pj4xMyl8MCkr''@;'; put 'put ''KFFyPj4+MjYpfDAsUXImPTY3MTA4ODYzLEU9TWF0aC5pbXVsKHl0LFJ0KSxtPShtPU1hdGguaW11bCh5dCxQdCkpK01hdGguaW11bChNdCxSdCl8MCxBPU1hdGguaW11bChNdCxQdCksRT1FK01hdGguaW11bChudCxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKG50LHNuKXwwKStNYXRoLmltdWwo''@;'; put 'put ''UWUsUXQpfDAsQT1BK01hdGguaW11bChRZSxzbil8MCxFPUUrTWF0aC5pbXVsKGtlLGhuKXwwLG09KG09bStNYXRoLmltdWwoa2UsZnQpfDApK01hdGguaW11bChBZSxobil8MCxBPUErTWF0aC5pbXVsKEFlLGZ0KXwwLEU9RStNYXRoLmltdWwoT2UsV3QpfDAsbT0obT1tK01hdGguaW11bChP''@;'; put 'put ''ZSxBdCl8MCkrTWF0aC5pbXVsKEllLFd0KXwwLEE9QStNYXRoLmltdWwoSWUsQXQpfDAsRT1FK01hdGguaW11bCh6ZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKHplLFV0KXwwKStNYXRoLmltdWwoRGUsc3QpfDAsQT1BK01hdGguaW11bChEZSxVdCl8MCxFPUUrTWF0aC5pbXVsKHhlLFdlKXww''@;'; put 'put ''LG09KG09bStNYXRoLmltdWwoeGUsVHQpfDApK01hdGguaW11bCh2ZSxXZSl8MCxBPUErTWF0aC5pbXVsKHZlLFR0KXwwLEU9RStNYXRoLmltdWwoVWUsaHQpfDAsbT0obT1tK01hdGguaW11bChVZSx4dCl8MCkrTWF0aC5pbXVsKEplLGh0KXwwLEE9QStNYXRoLmltdWwoSmUseHQpfDA7dmFy''@;'; put 'put ''IFZpPShqKyhFPUUrTWF0aC5pbXVsKHRlLHJuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsenQpfDApK01hdGguaW11bChzZSxybil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSx6dCl8MCkrKG0+Pj4xMyl8MCkrKFZpPj4+MjYpfDAsVmkmPTY3MTA4ODYzLEU9''@;'; put 'put ''TWF0aC5pbXVsKGl0LFJ0KSxtPShtPU1hdGguaW11bChpdCxQdCkpK01hdGguaW11bCgkZSxSdCl8MCxBPU1hdGguaW11bCgkZSxQdCksRT1FK01hdGguaW11bCh5dCxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LHNuKXwwKStNYXRoLmltdWwoTXQsUXQpfDAsQT1BK01hdGguaW11bChNdCxz''@;'; put 'put ''bil8MCxFPUUrTWF0aC5pbXVsKG50LGhuKXwwLG09KG09bStNYXRoLmltdWwobnQsZnQpfDApK01hdGguaW11bChRZSxobil8MCxBPUErTWF0aC5pbXVsKFFlLGZ0KXwwLEU9RStNYXRoLmltdWwoa2UsV3QpfDAsbT0obT1tK01hdGguaW11bChrZSxBdCl8MCkrTWF0aC5pbXVsKEFlLFd0KXww''@;'; put 'put ''LEE9QStNYXRoLmltdWwoQWUsQXQpfDAsRT1FK01hdGguaW11bChPZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKE9lLFV0KXwwKStNYXRoLmltdWwoSWUsc3QpfDAsQT1BK01hdGguaW11bChJZSxVdCl8MCxFPUUrTWF0aC5pbXVsKHplLFdlKXwwLG09KG09bStNYXRoLmltdWwoemUsVHQpfDAp''@;'; put 'put ''K01hdGguaW11bChEZSxXZSl8MCxBPUErTWF0aC5pbXVsKERlLFR0KXwwLEU9RStNYXRoLmltdWwoeGUsaHQpfDAsbT0obT1tK01hdGguaW11bCh4ZSx4dCl8MCkrTWF0aC5pbXVsKHZlLGh0KXwwLEE9QStNYXRoLmltdWwodmUseHQpfDAsRT1FK01hdGguaW11bChVZSxybil8MCxtPShtPW0r''@;'; put 'put ''TWF0aC5pbXVsKFVlLHp0KXwwKStNYXRoLmltdWwoSmUscm4pfDAsQT1BK01hdGguaW11bChKZSx6dCl8MDt2YXIgTmk9KGorKEU9RStNYXRoLmltdWwodGUsY24pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxmbil8MCkrTWF0aC5pbXVsKHNlLGNuKXwwKSk8PDEzKXwwO2o9''@;'; put 'put ''KChBPUErTWF0aC5pbXVsKHNlLGZuKXwwKSsobT4+PjEzKXwwKSsoTmk+Pj4yNil8MCxOaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsUnQpLG09KG09TWF0aC5pbXVsKEhlLFB0KSkrTWF0aC5pbXVsKHV0LFJ0KXwwLEE9TWF0aC5pbXVsKHV0LFB0KSxFPUUrTWF0aC5pbXVsKGl0LFF0KXww''@;'; put 'put ''LG09KG09bStNYXRoLmltdWwoaXQsc24pfDApK01hdGguaW11bCgkZSxRdCl8MCxBPUErTWF0aC5pbXVsKCRlLHNuKXwwLEU9RStNYXRoLmltdWwoeXQsaG4pfDAsbT0obT1tK01hdGguaW11bCh5dCxmdCl8MCkrTWF0aC5pbXVsKE10LGhuKXwwLEE9QStNYXRoLmltdWwoTXQsZnQpfDAsRT1F''@;'; put 'put ''K01hdGguaW11bChudCxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKG50LEF0KXwwKStNYXRoLmltdWwoUWUsV3QpfDAsQT1BK01hdGguaW11bChRZSxBdCl8MCxFPUUrTWF0aC5pbXVsKGtlLHN0KXwwLG09KG09bStNYXRoLmltdWwoa2UsVXQpfDApK01hdGguaW11bChBZSxzdCl8MCxBPUErTWF0''@;'; put 'put ''aC5pbXVsKEFlLFV0KXwwLEU9RStNYXRoLmltdWwoT2UsV2UpfDAsbT0obT1tK01hdGguaW11bChPZSxUdCl8MCkrTWF0aC5pbXVsKEllLFdlKXwwLEE9QStNYXRoLmltdWwoSWUsVHQpfDAsRT1FK01hdGguaW11bCh6ZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKHplLHh0KXwwKStNYXRoLmlt''@;'; put 'put ''dWwoRGUsaHQpfDAsQT1BK01hdGguaW11bChEZSx4dCl8MCxFPUUrTWF0aC5pbXVsKHhlLHJuKXwwLG09KG09bStNYXRoLmltdWwoeGUsenQpfDApK01hdGguaW11bCh2ZSxybil8MCxBPUErTWF0aC5pbXVsKHZlLHp0KXwwLEU9RStNYXRoLmltdWwoVWUsY24pfDAsbT0obT1tK01hdGguaW11''@;'; put 'put ''bChVZSxmbil8MCkrTWF0aC5pbXVsKEplLGNuKXwwLEE9QStNYXRoLmltdWwoSmUsZm4pfDA7dmFyIERhPShqKyhFPUUrTWF0aC5pbXVsKHRlLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsZW4pfDApK01hdGguaW11bChzZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01h''@;'; put 'put ''dGguaW11bChzZSxlbil8MCkrKG0+Pj4xMyl8MCkrKERhPj4+MjYpfDAsRGEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLFF0KSxtPShtPU1hdGguaW11bChIZSxzbikpK01hdGguaW11bCh1dCxRdCl8MCxBPU1hdGguaW11bCh1dCxzbiksRT1FK01hdGguaW11bChpdCxobil8MCxtPShtPW0r''@;'; put 'put ''TWF0aC5pbXVsKGl0LGZ0KXwwKStNYXRoLmltdWwoJGUsaG4pfDAsQT1BK01hdGguaW11bCgkZSxmdCl8MCxFPUUrTWF0aC5pbXVsKHl0LFd0KXwwLG09KG09bStNYXRoLmltdWwoeXQsQXQpfDApK01hdGguaW11bChNdCxXdCl8MCxBPUErTWF0aC5pbXVsKE10LEF0KXwwLEU9RStNYXRoLmlt''@;'; put 'put ''dWwobnQsc3QpfDAsbT0obT1tK01hdGguaW11bChudCxVdCl8MCkrTWF0aC5pbXVsKFFlLHN0KXwwLEE9QStNYXRoLmltdWwoUWUsVXQpfDAsRT1FK01hdGguaW11bChrZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKGtlLFR0KXwwKStNYXRoLmltdWwoQWUsV2UpfDAsQT1BK01hdGguaW11bChB''@;'; put 'put ''ZSxUdCl8MCxFPUUrTWF0aC5pbXVsKE9lLGh0KXwwLG09KG09bStNYXRoLmltdWwoT2UseHQpfDApK01hdGguaW11bChJZSxodCl8MCxBPUErTWF0aC5pbXVsKEllLHh0KXwwLEU9RStNYXRoLmltdWwoemUscm4pfDAsbT0obT1tK01hdGguaW11bCh6ZSx6dCl8MCkrTWF0aC5pbXVsKERlLHJu''@;'; put 'put ''KXwwLEE9QStNYXRoLmltdWwoRGUsenQpfDAsRT1FK01hdGguaW11bCh4ZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKHhlLGZuKXwwKStNYXRoLmltdWwodmUsY24pfDAsQT1BK01hdGguaW11bCh2ZSxmbil8MDt2YXIgTHI9KGorKEU9RStNYXRoLmltdWwoVWUsWHQpfDApfDApKygoODE5MSYo''@;'; put 'put ''bT0obT1tK01hdGguaW11bChVZSxlbil8MCkrTWF0aC5pbXVsKEplLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKEplLGVuKXwwKSsobT4+PjEzKXwwKSsoTHI+Pj4yNil8MCxMciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsaG4pLG09KG09TWF0aC5pbXVsKEhlLGZ0KSkrTWF0''@;'; put 'put ''aC5pbXVsKHV0LGhuKXwwLEE9TWF0aC5pbXVsKHV0LGZ0KSxFPUUrTWF0aC5pbXVsKGl0LFd0KXwwLG09KG09bStNYXRoLmltdWwoaXQsQXQpfDApK01hdGguaW11bCgkZSxXdCl8MCxBPUErTWF0aC5pbXVsKCRlLEF0KXwwLEU9RStNYXRoLmltdWwoeXQsc3QpfDAsbT0obT1tK01hdGguaW11''@;'; put 'put ''bCh5dCxVdCl8MCkrTWF0aC5pbXVsKE10LHN0KXwwLEE9QStNYXRoLmltdWwoTXQsVXQpfDAsRT1FK01hdGguaW11bChudCxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKG50LFR0KXwwKStNYXRoLmltdWwoUWUsV2UpfDAsQT1BK01hdGguaW11bChRZSxUdCl8MCxFPUUrTWF0aC5pbXVsKGtlLGh0''@;'; put 'put ''KXwwLG09KG09bStNYXRoLmltdWwoa2UseHQpfDApK01hdGguaW11bChBZSxodCl8MCxBPUErTWF0aC5pbXVsKEFlLHh0KXwwLEU9RStNYXRoLmltdWwoT2Uscm4pfDAsbT0obT1tK01hdGguaW11bChPZSx6dCl8MCkrTWF0aC5pbXVsKEllLHJuKXwwLEE9QStNYXRoLmltdWwoSWUsenQpfDAs''@;'; put 'put ''RT1FK01hdGguaW11bCh6ZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKHplLGZuKXwwKStNYXRoLmltdWwoRGUsY24pfDAsQT1BK01hdGguaW11bChEZSxmbil8MDt2YXIgV2k9KGorKEU9RStNYXRoLmltdWwoeGUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh4ZSxlbil8MCkr''@;'; put 'put ''TWF0aC5pbXVsKHZlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHZlLGVuKXwwKSsobT4+PjEzKXwwKSsoV2k+Pj4yNil8MCxXaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsV3QpLG09KG09TWF0aC5pbXVsKEhlLEF0KSkrTWF0aC5pbXVsKHV0LFd0KXwwLEE9TWF0aC5pbXVs''@;'; put 'put ''KHV0LEF0KSxFPUUrTWF0aC5pbXVsKGl0LHN0KXwwLG09KG09bStNYXRoLmltdWwoaXQsVXQpfDApK01hdGguaW11bCgkZSxzdCl8MCxBPUErTWF0aC5pbXVsKCRlLFV0KXwwLEU9RStNYXRoLmltdWwoeXQsV2UpfDAsbT0obT1tK01hdGguaW11bCh5dCxUdCl8MCkrTWF0aC5pbXVsKE10LFdl''@;'; put 'put ''KXwwLEE9QStNYXRoLmltdWwoTXQsVHQpfDAsRT1FK01hdGguaW11bChudCxodCl8MCxtPShtPW0rTWF0aC5pbXVsKG50LHh0KXwwKStNYXRoLmltdWwoUWUsaHQpfDAsQT1BK01hdGguaW11bChRZSx4dCl8MCxFPUUrTWF0aC5pbXVsKGtlLHJuKXwwLG09KG09bStNYXRoLmltdWwoa2UsenQp''@;'; put 'put ''fDApK01hdGguaW11bChBZSxybil8MCxBPUErTWF0aC5pbXVsKEFlLHp0KXwwLEU9RStNYXRoLmltdWwoT2UsY24pfDAsbT0obT1tK01hdGguaW11bChPZSxmbil8MCkrTWF0aC5pbXVsKEllLGNuKXwwLEE9QStNYXRoLmltdWwoSWUsZm4pfDA7dmFyIHBhPShqKyhFPUUrTWF0aC5pbXVsKHpl''@;'; put 'put ''LFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoemUsZW4pfDApK01hdGguaW11bChEZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChEZSxlbil8MCkrKG0+Pj4xMyl8MCkrKHBhPj4+MjYpfDAscGEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLHN0KSxtPShtPU1h''@;'; put 'put ''dGguaW11bChIZSxVdCkpK01hdGguaW11bCh1dCxzdCl8MCxBPU1hdGguaW11bCh1dCxVdCksRT1FK01hdGguaW11bChpdCxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKGl0LFR0KXwwKStNYXRoLmltdWwoJGUsV2UpfDAsQT1BK01hdGguaW11bCgkZSxUdCl8MCxFPUUrTWF0aC5pbXVsKHl0LGh0''@;'; put 'put ''KXwwLG09KG09bStNYXRoLmltdWwoeXQseHQpfDApK01hdGguaW11bChNdCxodCl8MCxBPUErTWF0aC5pbXVsKE10LHh0KXwwLEU9RStNYXRoLmltdWwobnQscm4pfDAsbT0obT1tK01hdGguaW11bChudCx6dCl8MCkrTWF0aC5pbXVsKFFlLHJuKXwwLEE9QStNYXRoLmltdWwoUWUsenQpfDAs''@;'; put 'put ''RT1FK01hdGguaW11bChrZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKGtlLGZuKXwwKStNYXRoLmltdWwoQWUsY24pfDAsQT1BK01hdGguaW11bChBZSxmbil8MDt2YXIgUW49KGorKEU9RStNYXRoLmltdWwoT2UsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChPZSxlbil8MCkr''@;'; put 'put ''TWF0aC5pbXVsKEllLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKEllLGVuKXwwKSsobT4+PjEzKXwwKSsoUW4+Pj4yNil8MCxRbiY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsV2UpLG09KG09TWF0aC5pbXVsKEhlLFR0KSkrTWF0aC5pbXVsKHV0LFdlKXwwLEE9TWF0aC5pbXVs''@;'; put 'put ''KHV0LFR0KSxFPUUrTWF0aC5pbXVsKGl0LGh0KXwwLG09KG09bStNYXRoLmltdWwoaXQseHQpfDApK01hdGguaW11bCgkZSxodCl8MCxBPUErTWF0aC5pbXVsKCRlLHh0KXwwLEU9RStNYXRoLmltdWwoeXQscm4pfDAsbT0obT1tK01hdGguaW11bCh5dCx6dCl8MCkrTWF0aC5pbXVsKE10LHJu''@;'; put 'put ''KXwwLEE9QStNYXRoLmltdWwoTXQsenQpfDAsRT1FK01hdGguaW11bChudCxjbil8MCxtPShtPW0rTWF0aC5pbXVsKG50LGZuKXwwKStNYXRoLmltdWwoUWUsY24pfDAsQT1BK01hdGguaW11bChRZSxmbil8MDt2YXIgbGE9KGorKEU9RStNYXRoLmltdWwoa2UsWHQpfDApfDApKygoODE5MSYo''@;'; put 'put ''bT0obT1tK01hdGguaW11bChrZSxlbil8MCkrTWF0aC5pbXVsKEFlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKEFlLGVuKXwwKSsobT4+PjEzKXwwKSsobGE+Pj4yNil8MCxsYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsaHQpLG09KG09TWF0aC5pbXVsKEhlLHh0KSkrTWF0''@;'; put 'put ''aC5pbXVsKHV0LGh0KXwwLEE9TWF0aC5pbXVsKHV0LHh0KSxFPUUrTWF0aC5pbXVsKGl0LHJuKXwwLG09KG09bStNYXRoLmltdWwoaXQsenQpfDApK01hdGguaW11bCgkZSxybil8MCxBPUErTWF0aC5pbXVsKCRlLHp0KXwwLEU9RStNYXRoLmltdWwoeXQsY24pfDAsbT0obT1tK01hdGguaW11''@;'; put 'put ''bCh5dCxmbil8MCkrTWF0aC5pbXVsKE10LGNuKXwwLEE9QStNYXRoLmltdWwoTXQsZm4pfDA7dmFyIHlhPShqKyhFPUUrTWF0aC5pbXVsKG50LFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobnQsZW4pfDApK01hdGguaW11bChRZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01h''@;'; put 'put ''dGguaW11bChRZSxlbil8MCkrKG0+Pj4xMyl8MCkrKHlhPj4+MjYpfDAseWEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLHJuKSxtPShtPU1hdGguaW11bChIZSx6dCkpK01hdGguaW11bCh1dCxybil8MCxBPU1hdGguaW11bCh1dCx6dCksRT1FK01hdGguaW11bChpdCxjbil8MCxtPShtPW0r''@;'; put 'put ''TWF0aC5pbXVsKGl0LGZuKXwwKStNYXRoLmltdWwoJGUsY24pfDAsQT1BK01hdGguaW11bCgkZSxmbil8MDt2YXIgTGE9KGorKEU9RStNYXRoLmltdWwoeXQsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh5dCxlbil8MCkrTWF0aC5pbXVsKE10LFh0KXwwKSk8PDEzKXwwO2o9''@;'; put 'put ''KChBPUErTWF0aC5pbXVsKE10LGVuKXwwKSsobT4+PjEzKXwwKSsoTGE+Pj4yNil8MCxMYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsY24pLG09KG09TWF0aC5pbXVsKEhlLGZuKSkrTWF0aC5pbXVsKHV0LGNuKXwwLEE9TWF0aC5pbXVsKHV0LGZuKTt2YXIgRmE9KGorKEU9RStNYXRoLmlt''@;'; put 'put ''dWwoaXQsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChpdCxlbil8MCkrTWF0aC5pbXVsKCRlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKCRlLGVuKXwwKSsobT4+PjEzKXwwKSsoRmE+Pj4yNil8MCxGYSY9NjcxMDg4NjM7dmFyIHRpPShqKyhFPU1hdGguaW11''@;'; put 'put ''bChIZSxYdCkpfDApKygoODE5MSYobT0obT1NYXRoLmltdWwoSGUsZW4pKStNYXRoLmltdWwodXQsWHQpfDApKTw8MTMpfDA7cmV0dXJuIGo9KChBPU1hdGguaW11bCh1dCxlbikpKyhtPj4+MTMpfDApKyh0aT4+PjI2KXwwLHRpJj02NzEwODg2MyxIWzBdPXVhLEhbMV09RWksSFsyXT12cixI''@;'; put 'put ''WzNdPVduLEhbNF09JGksSFs1XT1laSxIWzZdPVFyLEhbN109VmksSFs4XT1OaSxIWzldPURhLEhbMTBdPUxyLEhbMTFdPVdpLEhbMTJdPXBhLEhbMTNdPVFuLEhbMTRdPWxhLEhbMTVdPXlhLEhbMTZdPUxhLEhbMTddPUZhLEhbMThdPXRpLDAhPT1qJiYoSFsxOV09aix4Lmxlbmd0aCsrKSx4''@;'; put 'put ''fTtmdW5jdGlvbiBlZShWLHAsYil7cmV0dXJuKG5ldyBKKS5tdWxwKFYscCxiKX1mdW5jdGlvbiBKKFYscCl7dGhpcy54PVYsdGhpcy55PXB9TWF0aC5pbXVsfHwoWT1XKSx3LnByb3RvdHlwZS5tdWxUbz1mdW5jdGlvbihwLGIpe3ZhciB4LEM9dGhpcy5sZW5ndGgrcC5sZW5ndGg7cmV0dXJu''@;'; put 'put ''IHg9MTA9PT10aGlzLmxlbmd0aCYmMTA9PT1wLmxlbmd0aD9ZKHRoaXMscCxiKTpDPDYzP1codGhpcyxwLGIpOkM8MTAyND9mdW5jdGlvbiBxKFYscCxiKXtiLm5lZ2F0aXZlPXAubmVnYXRpdmVeVi5uZWdhdGl2ZSxiLmxlbmd0aD1WLmxlbmd0aCtwLmxlbmd0aDtmb3IodmFyIHg9MCxDPTAs''@;'; put 'put ''VD0wO1Q8Yi5sZW5ndGgtMTtUKyspe3ZhciBIPUM7Qz0wO2Zvcih2YXIgaj02NzEwODg2MyZ4LEU9TWF0aC5taW4oVCxwLmxlbmd0aC0xKSxtPU1hdGgubWF4KDAsVC1WLmxlbmd0aCsxKTttPD1FO20rKyl7dmFyIHNlPSgwfFYud29yZHNbVC1tXSkqKDB8cC53b3Jkc1ttXSksd2U9NjcxMDg4''@;'; put 'put ''NjMmc2U7aj02NzEwODg2MyYod2U9d2UranwwKSxDKz0oSD0oSD1IKyhzZS82NzEwODg2NHwwKXwwKSsod2U+Pj4yNil8MCk+Pj4yNixIJj02NzEwODg2M31iLndvcmRzW1RdPWoseD1ILEg9Q31yZXR1cm4gMCE9PXg/Yi53b3Jkc1tUXT14OmIubGVuZ3RoLS0sYi5zdHJpcCgpfSh0aGlzLHAs''@;'; put 'put ''Yik6ZWUodGhpcyxwLGIpLHh9LEoucHJvdG90eXBlLm1ha2VSQlQ9ZnVuY3Rpb24ocCl7Zm9yKHZhciBiPW5ldyBBcnJheShwKSx4PXcucHJvdG90eXBlLl9jb3VudEJpdHMocCktMSxDPTA7QzxwO0MrKyliW0NdPXRoaXMucmV2QmluKEMseCxwKTtyZXR1cm4gYn0sSi5wcm90b3R5cGUucmV2''@;'; put 'put ''QmluPWZ1bmN0aW9uKHAsYix4KXtpZigwPT09cHx8cD09PXgtMSlyZXR1cm4gcDtmb3IodmFyIEM9MCxUPTA7VDxiO1QrKylDfD0oMSZwKTw8Yi1ULTEscD4+PTE7cmV0dXJuIEN9LEoucHJvdG90eXBlLnBlcm11dGU9ZnVuY3Rpb24ocCxiLHgsQyxULEgpe2Zvcih2YXIgaj0wO2o8SDtqKysp''@;'; put 'put ''Q1tqXT1iW3Bbal1dLFRbal09eFtwW2pdXX0sSi5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKHAsYix4LEMsVCxIKXt0aGlzLnBlcm11dGUoSCxwLGIseCxDLFQpO2Zvcih2YXIgaj0xO2o8VDtqPDw9MSlmb3IodmFyIEU9ajw8MSxtPU1hdGguY29zKDIqTWF0aC5QSS9FKSxBPU1hdGgu''@;'; put 'put ''c2luKDIqTWF0aC5QSS9FKSxhZT0wO2FlPFQ7YWUrPUUpZm9yKHZhciB0ZT1tLHNlPUEsd2U9MDt3ZTxqO3dlKyspe3ZhciBVZT14W2FlK3dlXSxKZT1DW2FlK3dlXSxvdD14W2FlK3dlK2pdLHhlPUNbYWUrd2Ural0sdmU9dGUqb3Qtc2UqeGU7eGU9dGUqeGUrc2Uqb3QseFthZSt3ZV09VWUr''@;'; put 'put ''KG90PXZlKSxDW2FlK3dlXT1KZSt4ZSx4W2FlK3dlK2pdPVVlLW90LENbYWUrd2Ural09SmUteGUsd2UhPT1FJiYodmU9bSp0ZS1BKnNlLHNlPW0qc2UrQSp0ZSx0ZT12ZSl9fSxKLnByb3RvdHlwZS5ndWVzc0xlbjEzYj1mdW5jdGlvbihwLGIpe3ZhciB4PTF8TWF0aC5tYXgoYixwKSxDPTEm''@;'; put 'put ''eCxUPTA7Zm9yKHg9eC8yfDA7eDt4Pj4+PTEpVCsrO3JldHVybiAxPDxUKzErQ30sSi5wcm90b3R5cGUuY29uanVnYXRlPWZ1bmN0aW9uKHAsYix4KXtpZighKHg8PTEpKWZvcih2YXIgQz0wO0M8eC8yO0MrKyl7dmFyIFQ9cFtDXTtwW0NdPXBbeC1DLTFdLHBbeC1DLTFdPVQsVD1iW0NdLGJb''@;'; put 'put ''Q109LWJbeC1DLTFdLGJbeC1DLTFdPS1UfX0sSi5wcm90b3R5cGUubm9ybWFsaXplMTNiPWZ1bmN0aW9uKHAsYil7Zm9yKHZhciB4PTAsQz0wO0M8Yi8yO0MrKyl7dmFyIFQ9ODE5MipNYXRoLnJvdW5kKHBbMipDKzFdL2IpK01hdGgucm91bmQocFsyKkNdL2IpK3g7cFtDXT02NzEwODg2MyZU''@;'; put 'put ''LHg9VDw2NzEwODg2ND8wOlQvNjcxMDg4NjR8MH1yZXR1cm4gcH0sSi5wcm90b3R5cGUuY29udmVydDEzYj1mdW5jdGlvbihwLGIseCxDKXtmb3IodmFyIFQ9MCxIPTA7SDxiO0grKyl4WzIqSF09ODE5MSYoVCs9MHxwW0hdKSx4WzIqSCsxXT04MTkxJihUPj4+PTEzKSxUPj4+PTEzO2ZvcihI''@;'; put 'put ''PTIqYjtIPEM7KytIKXhbSF09MDtnKDA9PT1UKSxnKCEoLTgxOTImVCkpfSxKLnByb3RvdHlwZS5zdHViPWZ1bmN0aW9uKHApe2Zvcih2YXIgYj1uZXcgQXJyYXkocCkseD0wO3g8cDt4KyspYlt4XT0wO3JldHVybiBifSxKLnByb3RvdHlwZS5tdWxwPWZ1bmN0aW9uKHAsYix4KXt2YXIgQz0y''@;'; put 'put ''KnRoaXMuZ3Vlc3NMZW4xM2IocC5sZW5ndGgsYi5sZW5ndGgpLFQ9dGhpcy5tYWtlUkJUKEMpLEg9dGhpcy5zdHViKEMpLGo9bmV3IEFycmF5KEMpLEU9bmV3IEFycmF5KEMpLG09bmV3IEFycmF5KEMpLEE9bmV3IEFycmF5KEMpLGFlPW5ldyBBcnJheShDKSx0ZT1uZXcgQXJyYXkoQyksc2U9''@;'; put 'put ''eC53b3JkcztzZS5sZW5ndGg9Qyx0aGlzLmNvbnZlcnQxM2IocC53b3JkcyxwLmxlbmd0aCxqLEMpLHRoaXMuY29udmVydDEzYihiLndvcmRzLGIubGVuZ3RoLEEsQyksdGhpcy50cmFuc2Zvcm0oaixILEUsbSxDLFQpLHRoaXMudHJhbnNmb3JtKEEsSCxhZSx0ZSxDLFQpO2Zvcih2YXIgd2U9''@;'; put 'put ''MDt3ZTxDO3dlKyspe3ZhciBVZT1FW3dlXSphZVt3ZV0tbVt3ZV0qdGVbd2VdO21bd2VdPUVbd2VdKnRlW3dlXSttW3dlXSphZVt3ZV0sRVt3ZV09VWV9cmV0dXJuIHRoaXMuY29uanVnYXRlKEUsbSxDKSx0aGlzLnRyYW5zZm9ybShFLG0sc2UsSCxDLFQpLHRoaXMuY29uanVnYXRlKHNlLEgs''@;'; put 'put ''QyksdGhpcy5ub3JtYWxpemUxM2Ioc2UsQykseC5uZWdhdGl2ZT1wLm5lZ2F0aXZlXmIubmVnYXRpdmUseC5sZW5ndGg9cC5sZW5ndGgrYi5sZW5ndGgseC5zdHJpcCgpfSx3LnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24ocCl7dmFyIGI9bmV3IHcobnVsbCk7cmV0dXJuIGIud29yZHM9bmV3IEFy''@;'; put 'put ''cmF5KHRoaXMubGVuZ3RoK3AubGVuZ3RoKSx0aGlzLm11bFRvKHAsYil9LHcucHJvdG90eXBlLm11bGY9ZnVuY3Rpb24ocCl7dmFyIGI9bmV3IHcobnVsbCk7cmV0dXJuIGIud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK3AubGVuZ3RoKSxlZSh0aGlzLHAsYil9LHcucHJvdG90eXBlLmlt''@;'; put 'put ''dWw9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5tdWxUbyhwLHRoaXMpfSx3LnByb3RvdHlwZS5pbXVsbj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCksZyhwPDY3MTA4ODY0KTtmb3IodmFyIGI9MCx4PTA7eDx0aGlzLmxlbmd0aDt4Kyspe3ZhciBDPSgwfHRoaXMu''@;'; put 'put ''d29yZHNbeF0pKnAsVD0oNjcxMDg4NjMmQykrKDY3MTA4ODYzJmIpO2I+Pj0yNixiKz1DLzY3MTA4ODY0fDAsYis9VD4+PjI2LHRoaXMud29yZHNbeF09NjcxMDg4NjMmVH1yZXR1cm4gMCE9PWImJih0aGlzLndvcmRzW3hdPWIsdGhpcy5sZW5ndGgrKyksdGhpc30sdy5wcm90b3R5cGUubXVs''@;'; put 'put ''bj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltdWxuKHApfSx3LnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tdWwodGhpcyl9LHcucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSl9LHcucHJvdG90eXBl''@;'; put 'put ''LnBvdz1mdW5jdGlvbihwKXt2YXIgYj1mdW5jdGlvbiBVKFYpe2Zvcih2YXIgcD1uZXcgQXJyYXkoVi5iaXRMZW5ndGgoKSksYj0wO2I8cC5sZW5ndGg7YisrKXt2YXIgQz1iJTI2O3BbYl09KFYud29yZHNbYi8yNnwwXSYxPDxDKT4+PkN9cmV0dXJuIHB9KHApO2lmKDA9PT1iLmxlbmd0aCly''@;'; put 'put ''ZXR1cm4gbmV3IHcoMSk7Zm9yKHZhciB4PXRoaXMsQz0wO0M8Yi5sZW5ndGgmJjA9PT1iW0NdO0MrKyx4PXguc3FyKCkpO2lmKCsrQzxiLmxlbmd0aClmb3IodmFyIFQ9eC5zcXIoKTtDPGIubGVuZ3RoO0MrKyxUPVQuc3FyKCkpMCE9PWJbQ10mJih4PXgubXVsKFQpKTtyZXR1cm4geH0sdy5w''@;'; put 'put ''cm90b3R5cGUuaXVzaGxuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKTt2YXIgVCxiPXAlMjYseD0ocC1iKS8yNixDPTY3MTA4ODYzPj4+MjYtYjw8MjYtYjtpZigwIT09Yil7dmFyIEg9MDtmb3IoVD0wO1Q8dGhpcy5sZW5ndGg7VCsrKXt2YXIgaj10aGlzLndvcmRz''@;'; put 'put ''W1RdJkM7dGhpcy53b3Jkc1tUXT0oMHx0aGlzLndvcmRzW1RdKS1qPDxifEgsSD1qPj4+MjYtYn1IJiYodGhpcy53b3Jkc1tUXT1ILHRoaXMubGVuZ3RoKyspfWlmKDAhPT14KXtmb3IoVD10aGlzLmxlbmd0aC0xO1Q+PTA7VC0tKXRoaXMud29yZHNbVCt4XT10aGlzLndvcmRzW1RdO2ZvcihU''@;'; put 'put ''PTA7VDx4O1QrKyl0aGlzLndvcmRzW1RdPTA7dGhpcy5sZW5ndGgrPXh9cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXNobG49ZnVuY3Rpb24ocCl7cmV0dXJuIGcoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaGxuKHApfSx3LnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24o''@;'; put 'put ''cCxiLHgpe3ZhciBDO2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKSxDPWI/KGItYiUyNikvMjY6MDt2YXIgVD1wJTI2LEg9TWF0aC5taW4oKHAtVCkvMjYsdGhpcy5sZW5ndGgpLGo9NjcxMDg4NjNeNjcxMDg4NjM+Pj5UPDxULEU9eDtpZihDLT1ILEM9TWF0aC5tYXgoMCxDKSxFKXtmb3Io''@;'; put 'put ''dmFyIG09MDttPEg7bSsrKUUud29yZHNbbV09dGhpcy53b3Jkc1ttXTtFLmxlbmd0aD1IfWlmKDAhPT1IKWlmKHRoaXMubGVuZ3RoPkgpZm9yKHRoaXMubGVuZ3RoLT1ILG09MDttPHRoaXMubGVuZ3RoO20rKyl0aGlzLndvcmRzW21dPXRoaXMud29yZHNbbStIXTtlbHNlIHRoaXMud29yZHNb''@;'; put 'put ''MF09MCx0aGlzLmxlbmd0aD0xO3ZhciBBPTA7Zm9yKG09dGhpcy5sZW5ndGgtMTttPj0wJiYoMCE9PUF8fG0+PUMpO20tLSl7dmFyIGFlPTB8dGhpcy53b3Jkc1ttXTt0aGlzLndvcmRzW21dPUE8PDI2LVR8YWU+Pj5ULEE9YWUman1yZXR1cm4gRSYmMCE9PUEmJihFLndvcmRzW0UubGVuZ3Ro''@;'; put 'put ''KytdPUEpLDA9PT10aGlzLmxlbmd0aCYmKHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xKSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlzaHJuPWZ1bmN0aW9uKHAsYix4KXtyZXR1cm4gZygwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNocm4ocCxiLHgpfSx3LnByb3RvdHlwZS5z''@;'; put 'put ''aGxuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXNobG4ocCl9LHcucHJvdG90eXBlLnVzaGxuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaGxuKHApfSx3LnByb3RvdHlwZS5zaHJuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXNocm4ocCl9''@;'; put 'put ''LHcucHJvdG90eXBlLnVzaHJuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaHJuKHApfSx3LnByb3RvdHlwZS50ZXN0bj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIGI9cCUyNix4PShwLWIpLzI2O3JldHVybiEodGhpcy5sZW5ndGg8PXh8''@;'; put 'put ''fCEodGhpcy53b3Jkc1t4XSYxPDxiKSl9LHcucHJvdG90eXBlLmltYXNrbj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIGI9cCUyNix4PShwLWIpLzI2O3JldHVybiBnKDA9PT10aGlzLm5lZ2F0aXZlLCJpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZl''@;'; put 'put ''IG51bWJlcnMiKSx0aGlzLmxlbmd0aDw9eD90aGlzOigwIT09YiYmeCsrLHRoaXMubGVuZ3RoPU1hdGgubWluKHgsdGhpcy5sZW5ndGgpLDAhPT1iJiYodGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSY9NjcxMDg4NjNeNjcxMDg4NjM+Pj5iPDxiKSx0aGlzLnN0cmlwKCkpfSx3LnByb3RvdHlw''@;'; put 'put ''ZS5tYXNrbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltYXNrbihwKX0sdy5wcm90b3R5cGUuaWFkZG49ZnVuY3Rpb24ocCl7cmV0dXJuIGcoIm51bWJlciI9PXR5cGVvZiBwKSxnKHA8NjcxMDg4NjQpLHA8MD90aGlzLmlzdWJuKC1wKTowIT09dGhpcy5uZWdhdGl2ZT8xPT09''@;'; put 'put ''dGhpcy5sZW5ndGgmJigwfHRoaXMud29yZHNbMF0pPHA/KHRoaXMud29yZHNbMF09cC0oMHx0aGlzLndvcmRzWzBdKSx0aGlzLm5lZ2F0aXZlPTAsdGhpcyk6KHRoaXMubmVnYXRpdmU9MCx0aGlzLmlzdWJuKHApLHRoaXMubmVnYXRpdmU9MSx0aGlzKTp0aGlzLl9pYWRkbihwKX0sdy5wcm90''@;'; put 'put ''b3R5cGUuX2lhZGRuPWZ1bmN0aW9uKHApe3RoaXMud29yZHNbMF0rPXA7Zm9yKHZhciBiPTA7Yjx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tiXT49NjcxMDg4NjQ7YisrKXRoaXMud29yZHNbYl0tPTY3MTA4ODY0LGI9PT10aGlzLmxlbmd0aC0xP3RoaXMud29yZHNbYisxXT0xOnRoaXMud29y''@;'; put 'put ''ZHNbYisxXSsrO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxiKzEpLHRoaXN9LHcucHJvdG90eXBlLmlzdWJuPWZ1bmN0aW9uKHApe2lmKGcoIm51bWJlciI9PXR5cGVvZiBwKSxnKHA8NjcxMDg4NjQpLHA8MClyZXR1cm4gdGhpcy5pYWRkbigtcCk7aWYoMCE9PXRo''@;'; put 'put ''aXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGRuKHApLHRoaXMubmVnYXRpdmU9MSx0aGlzO2lmKHRoaXMud29yZHNbMF0tPXAsMT09PXRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzWzBdPDApdGhpcy53b3Jkc1swXT0tdGhpcy53b3Jkc1swXSx0aGlzLm5lZ2F0aXZl''@;'; put 'put ''PTE7ZWxzZSBmb3IodmFyIGI9MDtiPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW2JdPDA7YisrKXRoaXMud29yZHNbYl0rPTY3MTA4ODY0LHRoaXMud29yZHNbYisxXS09MTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5hZGRuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25l''@;'; put 'put ''KCkuaWFkZG4ocCl9LHcucHJvdG90eXBlLnN1Ym49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3VibihwKX0sdy5wcm90b3R5cGUuaWFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpc30sdy5wcm90b3R5cGUuYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRo''@;'; put 'put ''aXMuY2xvbmUoKS5pYWJzKCl9LHcucHJvdG90eXBlLl9pc2hsbnN1Ym11bD1mdW5jdGlvbihwLGIseCl7dmFyIFQ7dGhpcy5fZXhwYW5kKHAubGVuZ3RoK3gpO3ZhciBILGo9MDtmb3IoVD0wO1Q8cC5sZW5ndGg7VCsrKXtIPSgwfHRoaXMud29yZHNbVCt4XSkrajt2YXIgRT0oMHxwLndvcmRz''@;'; put 'put ''W1RdKSpiO2o9KChILT02NzEwODg2MyZFKT4+MjYpLShFLzY3MTA4ODY0fDApLHRoaXMud29yZHNbVCt4XT02NzEwODg2MyZIfWZvcig7VDx0aGlzLmxlbmd0aC14O1QrKylqPShIPSgwfHRoaXMud29yZHNbVCt4XSkraik+PjI2LHRoaXMud29yZHNbVCt4XT02NzEwODg2MyZIO2lmKDA9PT1q''@;'; put 'put ''KXJldHVybiB0aGlzLnN0cmlwKCk7Zm9yKGcoLTE9PT1qKSxqPTAsVD0wO1Q8dGhpcy5sZW5ndGg7VCsrKWo9KEg9LSgwfHRoaXMud29yZHNbVF0pK2opPj4yNix0aGlzLndvcmRzW1RdPTY3MTA4ODYzJkg7cmV0dXJuIHRoaXMubmVnYXRpdmU9MSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBl''@;'; put 'put ''Ll93b3JkRGl2PWZ1bmN0aW9uKHAsYil7dmFyIHgsQz10aGlzLmNsb25lKCksVD1wLEg9MHxULndvcmRzW1QubGVuZ3RoLTFdOzAhPSh4PTI2LXRoaXMuX2NvdW50Qml0cyhIKSkmJihUPVQudXNobG4oeCksQy5pdXNobG4oeCksSD0wfFQud29yZHNbVC5sZW5ndGgtMV0pO3ZhciBtLEU9Qy5s''@;'; put 'put ''ZW5ndGgtVC5sZW5ndGg7aWYoIm1vZCIhPT1iKXsobT1uZXcgdyhudWxsKSkubGVuZ3RoPUUrMSxtLndvcmRzPW5ldyBBcnJheShtLmxlbmd0aCk7Zm9yKHZhciBBPTA7QTxtLmxlbmd0aDtBKyspbS53b3Jkc1tBXT0wfXZhciBhZT1DLmNsb25lKCkuX2lzaGxuc3VibXVsKFQsMSxFKTswPT09''@;'; put 'put ''YWUubmVnYXRpdmUmJihDPWFlLG0mJihtLndvcmRzW0VdPTEpKTtmb3IodmFyIHRlPUUtMTt0ZT49MDt0ZS0tKXt2YXIgc2U9NjcxMDg4NjQqKDB8Qy53b3Jkc1tULmxlbmd0aCt0ZV0pKygwfEMud29yZHNbVC5sZW5ndGgrdGUtMV0pO2ZvcihzZT1NYXRoLm1pbihzZS9IfDAsNjcxMDg4NjMp''@;'; put 'put ''LEMuX2lzaGxuc3VibXVsKFQsc2UsdGUpOzAhPT1DLm5lZ2F0aXZlOylzZS0tLEMubmVnYXRpdmU9MCxDLl9pc2hsbnN1Ym11bChULDEsdGUpLEMuaXNaZXJvKCl8fChDLm5lZ2F0aXZlXj0xKTttJiYobS53b3Jkc1t0ZV09c2UpfXJldHVybiBtJiZtLnN0cmlwKCksQy5zdHJpcCgpLCJkaXYi''@;'; put 'put ''IT09YiYmMCE9PXgmJkMuaXVzaHJuKHgpLHtkaXY6bXx8bnVsbCxtb2Q6Q319LHcucHJvdG90eXBlLmRpdm1vZD1mdW5jdGlvbihwLGIseCl7cmV0dXJuIGcoIXAuaXNaZXJvKCkpLHRoaXMuaXNaZXJvKCk/e2RpdjpuZXcgdygwKSxtb2Q6bmV3IHcoMCl9OjAhPT10aGlzLm5lZ2F0aXZlJiYw''@;'; put 'put ''PT09cC5uZWdhdGl2ZT8oSD10aGlzLm5lZygpLmRpdm1vZChwLGIpLCJtb2QiIT09YiYmKEM9SC5kaXYubmVnKCkpLCJkaXYiIT09YiYmKFQ9SC5tb2QubmVnKCkseCYmMCE9PVQubmVnYXRpdmUmJlQuaWFkZChwKSkse2RpdjpDLG1vZDpUfSk6MD09PXRoaXMubmVnYXRpdmUmJjAhPT1wLm5l''@;'; put 'put ''Z2F0aXZlPyhIPXRoaXMuZGl2bW9kKHAubmVnKCksYiksIm1vZCIhPT1iJiYoQz1ILmRpdi5uZWcoKSkse2RpdjpDLG1vZDpILm1vZH0pOnRoaXMubmVnYXRpdmUmcC5uZWdhdGl2ZT8oSD10aGlzLm5lZygpLmRpdm1vZChwLm5lZygpLGIpLCJkaXYiIT09YiYmKFQ9SC5tb2QubmVnKCkseCYm''@;'; put 'put ''MCE9PVQubmVnYXRpdmUmJlQuaXN1YihwKSkse2RpdjpILmRpdixtb2Q6VH0pOnAubGVuZ3RoPnRoaXMubGVuZ3RofHx0aGlzLmNtcChwKTwwP3tkaXY6bmV3IHcoMCksbW9kOnRoaXN9OjE9PT1wLmxlbmd0aD8iZGl2Ij09PWI/e2Rpdjp0aGlzLmRpdm4ocC53b3Jkc1swXSksbW9kOm51bGx9''@;'; put 'put ''OiJtb2QiPT09Yj97ZGl2Om51bGwsbW9kOm5ldyB3KHRoaXMubW9kbihwLndvcmRzWzBdKSl9OntkaXY6dGhpcy5kaXZuKHAud29yZHNbMF0pLG1vZDpuZXcgdyh0aGlzLm1vZG4ocC53b3Jkc1swXSkpfTp0aGlzLl93b3JkRGl2KHAsYik7dmFyIEMsVCxIfSx3LnByb3RvdHlwZS5kaXY9ZnVu''@;'; put 'put ''Y3Rpb24ocCl7cmV0dXJuIHRoaXMuZGl2bW9kKHAsImRpdiIsITEpLmRpdn0sdy5wcm90b3R5cGUubW9kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmRpdm1vZChwLCJtb2QiLCExKS5tb2R9LHcucHJvdG90eXBlLnVtb2Q9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuZGl2bW9kKHAsIm1vZCIs''@;'; put 'put ''ITApLm1vZH0sdy5wcm90b3R5cGUuZGl2Um91bmQ9ZnVuY3Rpb24ocCl7dmFyIGI9dGhpcy5kaXZtb2QocCk7aWYoYi5tb2QuaXNaZXJvKCkpcmV0dXJuIGIuZGl2O3ZhciB4PTAhPT1iLmRpdi5uZWdhdGl2ZT9iLm1vZC5pc3ViKHApOmIubW9kLEM9cC51c2hybigxKSxUPXAuYW5kbG4oMSks''@;'; put 'put ''SD14LmNtcChDKTtyZXR1cm4gSDwwfHwxPT09VCYmMD09PUg/Yi5kaXY6MCE9PWIuZGl2Lm5lZ2F0aXZlP2IuZGl2LmlzdWJuKDEpOmIuZGl2LmlhZGRuKDEpfSx3LnByb3RvdHlwZS5tb2RuPWZ1bmN0aW9uKHApe2cocDw9NjcxMDg4NjMpO2Zvcih2YXIgYj0oMTw8MjYpJXAseD0wLEM9dGhp''@;'; put 'put ''cy5sZW5ndGgtMTtDPj0wO0MtLSl4PShiKngrKDB8dGhpcy53b3Jkc1tDXSkpJXA7cmV0dXJuIHh9LHcucHJvdG90eXBlLmlkaXZuPWZ1bmN0aW9uKHApe2cocDw9NjcxMDg4NjMpO2Zvcih2YXIgYj0wLHg9dGhpcy5sZW5ndGgtMTt4Pj0wO3gtLSl7dmFyIEM9KDB8dGhpcy53b3Jkc1t4XSkr''@;'; put 'put ''NjcxMDg4NjQqYjt0aGlzLndvcmRzW3hdPUMvcHwwLGI9QyVwfXJldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmRpdm49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pZGl2bihwKX0sdy5wcm90b3R5cGUuZWdjZD1mdW5jdGlvbihwKXtnKDA9PT1wLm5lZ2F0aXZlKSxn''@;'; put 'put ''KCFwLmlzWmVybygpKTt2YXIgYj10aGlzLHg9cC5jbG9uZSgpO2I9MCE9PWIubmVnYXRpdmU/Yi51bW9kKHApOmIuY2xvbmUoKTtmb3IodmFyIEM9bmV3IHcoMSksVD1uZXcgdygwKSxIPW5ldyB3KDApLGo9bmV3IHcoMSksRT0wO2IuaXNFdmVuKCkmJnguaXNFdmVuKCk7KWIuaXVzaHJuKDEp''@;'; put 'put ''LHguaXVzaHJuKDEpLCsrRTtmb3IodmFyIG09eC5jbG9uZSgpLEE9Yi5jbG9uZSgpOyFiLmlzWmVybygpOyl7Zm9yKHZhciBhZT0wLHRlPTE7IShiLndvcmRzWzBdJnRlKSYmYWU8MjY7KythZSx0ZTw8PTEpO2lmKGFlPjApZm9yKGIuaXVzaHJuKGFlKTthZS0tID4wOykoQy5pc09kZCgpfHxU''@;'; put 'put ''LmlzT2RkKCkpJiYoQy5pYWRkKG0pLFQuaXN1YihBKSksQy5pdXNocm4oMSksVC5pdXNocm4oMSk7Zm9yKHZhciBzZT0wLHdlPTE7ISh4LndvcmRzWzBdJndlKSYmc2U8MjY7KytzZSx3ZTw8PTEpO2lmKHNlPjApZm9yKHguaXVzaHJuKHNlKTtzZS0tID4wOykoSC5pc09kZCgpfHxqLmlzT2Rk''@;'; put 'put ''KCkpJiYoSC5pYWRkKG0pLGouaXN1YihBKSksSC5pdXNocm4oMSksai5pdXNocm4oMSk7Yi5jbXAoeCk+PTA/KGIuaXN1Yih4KSxDLmlzdWIoSCksVC5pc3ViKGopKTooeC5pc3ViKGIpLEguaXN1YihDKSxqLmlzdWIoVCkpfXJldHVybnthOkgsYjpqLGdjZDp4Lml1c2hsbihFKX19LHcucHJv''@;'; put 'put ''dG90eXBlLl9pbnZtcD1mdW5jdGlvbihwKXtnKDA9PT1wLm5lZ2F0aXZlKSxnKCFwLmlzWmVybygpKTt2YXIgYWUsYj10aGlzLHg9cC5jbG9uZSgpO2I9MCE9PWIubmVnYXRpdmU/Yi51bW9kKHApOmIuY2xvbmUoKTtmb3IodmFyIEM9bmV3IHcoMSksVD1uZXcgdygwKSxIPXguY2xvbmUoKTti''@;'; put 'put ''LmNtcG4oMSk+MCYmeC5jbXBuKDEpPjA7KXtmb3IodmFyIGo9MCxFPTE7IShiLndvcmRzWzBdJkUpJiZqPDI2OysraixFPDw9MSk7aWYoaj4wKWZvcihiLml1c2hybihqKTtqLS0gPjA7KUMuaXNPZGQoKSYmQy5pYWRkKEgpLEMuaXVzaHJuKDEpO2Zvcih2YXIgbT0wLEE9MTshKHgud29yZHNb''@;'; put 'put ''MF0mQSkmJm08MjY7KyttLEE8PD0xKTtpZihtPjApZm9yKHguaXVzaHJuKG0pO20tLSA+MDspVC5pc09kZCgpJiZULmlhZGQoSCksVC5pdXNocm4oMSk7Yi5jbXAoeCk+PTA/KGIuaXN1Yih4KSxDLmlzdWIoVCkpOih4LmlzdWIoYiksVC5pc3ViKEMpKX1yZXR1cm4oYWU9MD09PWIuY21wbigx''@;'; put 'put ''KT9DOlQpLmNtcG4oMCk8MCYmYWUuaWFkZChwKSxhZX0sdy5wcm90b3R5cGUuZ2NkPWZ1bmN0aW9uKHApe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIHAuYWJzKCk7aWYocC5pc1plcm8oKSlyZXR1cm4gdGhpcy5hYnMoKTt2YXIgYj10aGlzLmNsb25lKCkseD1wLmNsb25lKCk7Yi5uZWdhdGl2''@;'; put 'put ''ZT0wLHgubmVnYXRpdmU9MDtmb3IodmFyIEM9MDtiLmlzRXZlbigpJiZ4LmlzRXZlbigpO0MrKyliLml1c2hybigxKSx4Lml1c2hybigxKTtmb3IoOzspe2Zvcig7Yi5pc0V2ZW4oKTspYi5pdXNocm4oMSk7Zm9yKDt4LmlzRXZlbigpOyl4Lml1c2hybigxKTt2YXIgVD1iLmNtcCh4KTtpZihU''@;'; put 'put ''PDApe3ZhciBIPWI7Yj14LHg9SH1lbHNlIGlmKDA9PT1UfHwwPT09eC5jbXBuKDEpKWJyZWFrO2IuaXN1Yih4KX1yZXR1cm4geC5pdXNobG4oQyl9LHcucHJvdG90eXBlLmludm09ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuZWdjZChwKS5hLnVtb2QocCl9LHcucHJvdG90eXBlLmlzRXZlbj1m''@;'; put 'put ''dW5jdGlvbigpe3JldHVybiEoMSZ0aGlzLndvcmRzWzBdKX0sdy5wcm90b3R5cGUuaXNPZGQ9ZnVuY3Rpb24oKXtyZXR1cm4hKDEmfnRoaXMud29yZHNbMF0pfSx3LnByb3RvdHlwZS5hbmRsbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy53b3Jkc1swXSZwfSx3LnByb3RvdHlwZS5iaW5jbj1m''@;'; put 'put ''dW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCk7dmFyIGI9cCUyNix4PShwLWIpLzI2LEM9MTw8YjtpZih0aGlzLmxlbmd0aDw9eClyZXR1cm4gdGhpcy5fZXhwYW5kKHgrMSksdGhpcy53b3Jkc1t4XXw9Qyx0aGlzO2Zvcih2YXIgVD1DLEg9eDswIT09VCYmSDx0aGlzLmxlbmd0aDtI''@;'; put 'put ''Kyspe3ZhciBqPTB8dGhpcy53b3Jkc1tIXTtUPShqKz1UKT4+PjI2LHRoaXMud29yZHNbSF09aiY9NjcxMDg4NjN9cmV0dXJuIDAhPT1UJiYodGhpcy53b3Jkc1tIXT1ULHRoaXMubGVuZ3RoKyspLHRoaXN9LHcucHJvdG90eXBlLmlzWmVybz1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5s''@;'; put 'put ''ZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdfSx3LnByb3RvdHlwZS5jbXBuPWZ1bmN0aW9uKHApe3ZhciB4LGI9cDwwO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYhYilyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmYilyZXR1cm4gMTtpZih0aGlzLnN0cmlwKCksdGhpcy5sZW5ndGg+MSl4''@;'; put 'put ''PTE7ZWxzZXtiJiYocD0tcCksZyhwPD02NzEwODg2MywiTnVtYmVyIGlzIHRvbyBiaWciKTt2YXIgQz0wfHRoaXMud29yZHNbMF07eD1DPT09cD8wOkM8cD8tMToxfXJldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC14Onh9LHcucHJvdG90eXBlLmNtcD1mdW5jdGlvbihwKXtpZigwIT09dGhp''@;'; put 'put ''cy5uZWdhdGl2ZSYmMD09PXAubmVnYXRpdmUpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1wLm5lZ2F0aXZlKXJldHVybiAxO3ZhciBiPXRoaXMudWNtcChwKTtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtYjpifSx3LnByb3RvdHlwZS51Y21wPWZ1bmN0aW9uKHApe2lm''@;'; put 'put ''KHRoaXMubGVuZ3RoPnAubGVuZ3RoKXJldHVybiAxO2lmKHRoaXMubGVuZ3RoPHAubGVuZ3RoKXJldHVybi0xO2Zvcih2YXIgYj0wLHg9dGhpcy5sZW5ndGgtMTt4Pj0wO3gtLSl7dmFyIEM9MHx0aGlzLndvcmRzW3hdLFQ9MHxwLndvcmRzW3hdO2lmKEMhPT1UKXtDPFQ/Yj0tMTpDPlQmJihi''@;'; put 'put ''PTEpO2JyZWFrfX1yZXR1cm4gYn0sdy5wcm90b3R5cGUuZ3RuPWZ1bmN0aW9uKHApe3JldHVybiAxPT09dGhpcy5jbXBuKHApfSx3LnByb3RvdHlwZS5ndD1mdW5jdGlvbihwKXtyZXR1cm4gMT09PXRoaXMuY21wKHApfSx3LnByb3RvdHlwZS5ndGVuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlz''@;'; put 'put ''LmNtcG4ocCk+PTB9LHcucHJvdG90eXBlLmd0ZT1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbXAocCk+PTB9LHcucHJvdG90eXBlLmx0bj1mdW5jdGlvbihwKXtyZXR1cm4tMT09PXRoaXMuY21wbihwKX0sdy5wcm90b3R5cGUubHQ9ZnVuY3Rpb24ocCl7cmV0dXJuLTE9PT10aGlzLmNtcChw''@;'; put 'put ''KX0sdy5wcm90b3R5cGUubHRlbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbXBuKHApPD0wfSx3LnByb3RvdHlwZS5sdGU9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY21wKHApPD0wfSx3LnByb3RvdHlwZS5lcW49ZnVuY3Rpb24ocCl7cmV0dXJuIDA9PT10aGlzLmNtcG4ocCl9LHcucHJv''@;'; put 'put ''dG90eXBlLmVxPWZ1bmN0aW9uKHApe3JldHVybiAwPT09dGhpcy5jbXAocCl9LHcucmVkPWZ1bmN0aW9uKHApe3JldHVybiBuZXcgU2UocCl9LHcucHJvdG90eXBlLnRvUmVkPWZ1bmN0aW9uKHApe3JldHVybiBnKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29u''@;'; put 'put ''dGV4dCIpLGcoMD09PXRoaXMubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIikscC5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKHApfSx3LnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsImZyb21SZWQgd29ya3Mgb25seSB3aXRo''@;'; put 'put ''IG51bWJlcnMgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlzKX0sdy5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLnJlZD1wLHRoaXN9LHcucHJvdG90eXBlLmZvcmNlUmVkPWZ1bmN0aW9uKHApe3JldHVybiBnKCF0aGlz''@;'; put 'put ''LnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMuX2ZvcmNlUmVkKHApfSx3LnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5hZGQo''@;'; put 'put ''dGhpcyxwKX0sdy5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pYWRkKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZFN1Yj1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlz''@;'; put 'put ''LnJlZCwicmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnN1Yih0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlz''@;'; put 'put ''dWIodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkU2hsPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc2hsKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZE11bD1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlz''@;'; put 'put ''LnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMscCksdGhpcy5yZWQubXVsKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGgg''@;'; put 'put ''cmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLHApLHRoaXMucmVkLmltdWwodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5''@;'; put 'put ''MSh0aGlzKSx0aGlzLnJlZC5zcXIodGhpcyl9LHcucHJvdG90eXBlLnJlZElTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSx3LnBy''@;'; put 'put ''b3RvdHlwZS5yZWRTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0sdy5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3JldHVy''@;'; put 'put ''biBnKHRoaXMucmVkLCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9LHcucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWROZWcgd29ya3Mgb25seSB3''@;'; put 'put ''aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQubmVnKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQmJiFwLnJlZCwicmVkUG93KG5vcm1hbE51bSkiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0''@;'; put 'put ''aGlzLnJlZC5wb3codGhpcyxwKX07dmFyIG5lPXtrMjU2Om51bGwscDIyNDpudWxsLHAxOTI6bnVsbCxwMjU1MTk6bnVsbH07ZnVuY3Rpb24gaWUoVixwKXt0aGlzLm5hbWU9Vix0aGlzLnA9bmV3IHcocCwxNiksdGhpcy5uPXRoaXMucC5iaXRMZW5ndGgoKSx0aGlzLms9bmV3IHcoMSkuaXVz''@;'; put 'put ''aGxuKHRoaXMubikuaXN1Yih0aGlzLnApLHRoaXMudG1wPXRoaXMuX3RtcCgpfWZ1bmN0aW9uIGxlKCl7aWUuY2FsbCh0aGlzLCJrMjU2IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYiKX1mdW5jdGlvbiBt''@;'; put 'put ''ZSgpe2llLmNhbGwodGhpcywicDIyNCIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxIil9ZnVuY3Rpb24gX2UoKXtpZS5jYWxsKHRoaXMsInAxOTIiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZm''@;'; put 'put ''ZmZmZiBmZmZmZmZmZiIpfWZ1bmN0aW9uIFRlKCl7aWUuY2FsbCh0aGlzLCIyNTUxOSIsIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiKX1mdW5jdGlvbiBTZShWKXtpZigic3RyaW5nIj09dHlwZW9mIFYpe3ZhciBw''@;'; put 'put ''PXcuX3ByaW1lKFYpO3RoaXMubT1wLnAsdGhpcy5wcmltZT1wfWVsc2UgZyhWLmd0bigxKSwibW9kdWx1cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxIiksdGhpcy5tPVYsdGhpcy5wcmltZT1udWxsfWZ1bmN0aW9uIGplKFYpe1NlLmNhbGwodGhpcyxWKSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRM''@;'; put 'put ''ZW5ndGgoKSx0aGlzLnNoaWZ0JTI2IT0wJiYodGhpcy5zaGlmdCs9MjYtdGhpcy5zaGlmdCUyNiksdGhpcy5yPW5ldyB3KDEpLml1c2hsbih0aGlzLnNoaWZ0KSx0aGlzLnIyPXRoaXMuaW1vZCh0aGlzLnIuc3FyKCkpLHRoaXMucmludj10aGlzLnIuX2ludm1wKHRoaXMubSksdGhpcy5taW52''@;'; put 'put ''PXRoaXMucmludi5tdWwodGhpcy5yKS5pc3VibigxKS5kaXYodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5taW52LnVtb2QodGhpcy5yKSx0aGlzLm1pbnY9dGhpcy5yLnN1Yih0aGlzLm1pbnYpfWllLnByb3RvdHlwZS5fdG1wPWZ1bmN0aW9uKCl7dmFyIHA9bmV3IHcobnVsbCk7cmV0dXJuIHAu''@;'; put 'put ''d29yZHM9bmV3IEFycmF5KE1hdGguY2VpbCh0aGlzLm4vMTMpKSxwfSxpZS5wcm90b3R5cGUuaXJlZHVjZT1mdW5jdGlvbihwKXt2YXIgeCxiPXA7ZG97dGhpcy5zcGxpdChiLHRoaXMudG1wKSx4PShiPShiPXRoaXMuaW11bEsoYikpLmlhZGQodGhpcy50bXApKS5iaXRMZW5ndGgoKX13aGls''@;'; put 'put ''ZSh4PnRoaXMubik7dmFyIEM9eDx0aGlzLm4/LTE6Yi51Y21wKHRoaXMucCk7cmV0dXJuIDA9PT1DPyhiLndvcmRzWzBdPTAsYi5sZW5ndGg9MSk6Qz4wP2IuaXN1Yih0aGlzLnApOnZvaWQgMCE9PWIuc3RyaXA/Yi5zdHJpcCgpOmIuX3N0cmlwKCksYn0saWUucHJvdG90eXBlLnNwbGl0PWZ1''@;'; put 'put ''bmN0aW9uKHAsYil7cC5pdXNocm4odGhpcy5uLDAsYil9LGllLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihwKXtyZXR1cm4gcC5pbXVsKHRoaXMuayl9LEIobGUsaWUpLGxlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihwLGIpe2Zvcih2YXIgeD00MTk0MzAzLEM9TWF0aC5taW4ocC5sZW5n''@;'; put 'put ''dGgsOSksVD0wO1Q8QztUKyspYi53b3Jkc1tUXT1wLndvcmRzW1RdO2lmKGIubGVuZ3RoPUMscC5sZW5ndGg8PTkpcmV0dXJuIHAud29yZHNbMF09MCx2b2lkKHAubGVuZ3RoPTEpO3ZhciBIPXAud29yZHNbOV07Zm9yKGIud29yZHNbYi5sZW5ndGgrK109SCZ4LFQ9MTA7VDxwLmxlbmd0aDtU''@;'; put 'put ''Kyspe3ZhciBqPTB8cC53b3Jkc1tUXTtwLndvcmRzW1QtMTBdPShqJngpPDw0fEg+Pj4yMixIPWp9cC53b3Jkc1tULTEwXT1IPj4+PTIyLHAubGVuZ3RoLT0wPT09SCYmcC5sZW5ndGg+MTA/MTA6OX0sbGUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHApe3Aud29yZHNbcC5sZW5ndGhdPTAs''@;'; put 'put ''cC53b3Jkc1twLmxlbmd0aCsxXT0wLHAubGVuZ3RoKz0yO2Zvcih2YXIgYj0wLHg9MDt4PHAubGVuZ3RoO3grKyl7dmFyIEM9MHxwLndvcmRzW3hdO3Aud29yZHNbeF09NjcxMDg4NjMmKGIrPTk3NypDKSxiPTY0KkMrKGIvNjcxMDg4NjR8MCl9cmV0dXJuIDA9PT1wLndvcmRzW3AubGVuZ3Ro''@;'; put 'put ''LTFdJiYocC5sZW5ndGgtLSwwPT09cC53b3Jkc1twLmxlbmd0aC0xXSYmcC5sZW5ndGgtLSkscH0sQihtZSxpZSksQihfZSxpZSksQihUZSxpZSksVGUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHApe2Zvcih2YXIgYj0wLHg9MDt4PHAubGVuZ3RoO3grKyl7dmFyIEM9MTkqKDB8cC53b3Jk''@;'; put 'put ''c1t4XSkrYixUPTY3MTA4ODYzJkM7Qz4+Pj0yNixwLndvcmRzW3hdPVQsYj1DfXJldHVybiAwIT09YiYmKHAud29yZHNbcC5sZW5ndGgrK109YikscH0sdy5fcHJpbWU9ZnVuY3Rpb24ocCl7aWYobmVbcF0pcmV0dXJuIG5lW3BdO3ZhciBiO2lmKCJrMjU2Ij09PXApYj1uZXcgbGU7ZWxzZSBp''@;'; put 'put ''ZigicDIyNCI9PT1wKWI9bmV3IG1lO2Vsc2UgaWYoInAxOTIiPT09cCliPW5ldyBfZTtlbHNle2lmKCJwMjU1MTkiIT09cCl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gcHJpbWUgIitwKTtiPW5ldyBUZX1yZXR1cm4gbmVbcF09YixifSxTZS5wcm90b3R5cGUuX3ZlcmlmeTE9ZnVuY3Rpb24o''@;'; put 'put ''cCl7ZygwPT09cC5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxnKHAucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LFNlLnByb3RvdHlwZS5fdmVyaWZ5Mj1mdW5jdGlvbihwLGIpe2coIShwLm5lZ2F0aXZlfGIubmVnYXRpdmUpLCJyZWQg''@;'; put 'put ''d29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLGcocC5yZWQmJnAucmVkPT09Yi5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sU2UucHJvdG90eXBlLmltb2Q9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMucHJpbWU/dGhpcy5wcmltZS5pcmVkdWNlKHApLl9mb3JjZVJl''@;'; put 'put ''ZCh0aGlzKTpwLnVtb2QodGhpcy5tKS5fZm9yY2VSZWQodGhpcyl9LFNlLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24ocCl7cmV0dXJuIHAuaXNaZXJvKCk/cC5jbG9uZSgpOnRoaXMubS5zdWIocCkuX2ZvcmNlUmVkKHRoaXMpfSxTZS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHAsYil7dGhpcy5f''@;'; put 'put ''dmVyaWZ5MihwLGIpO3ZhciB4PXAuYWRkKGIpO3JldHVybiB4LmNtcCh0aGlzLm0pPj0wJiZ4LmlzdWIodGhpcy5tKSx4Ll9mb3JjZVJlZCh0aGlzKX0sU2UucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24ocCxiKXt0aGlzLl92ZXJpZnkyKHAsYik7dmFyIHg9cC5pYWRkKGIpO3JldHVybiB4LmNt''@;'; put 'put ''cCh0aGlzLm0pPj0wJiZ4LmlzdWIodGhpcy5tKSx4fSxTZS5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKHAsYil7dGhpcy5fdmVyaWZ5MihwLGIpO3ZhciB4PXAuc3ViKGIpO3JldHVybiB4LmNtcG4oMCk8MCYmeC5pYWRkKHRoaXMubSkseC5fZm9yY2VSZWQodGhpcyl9LFNlLnByb3RvdHlwZS5p''@;'; put 'put ''c3ViPWZ1bmN0aW9uKHAsYil7dGhpcy5fdmVyaWZ5MihwLGIpO3ZhciB4PXAuaXN1YihiKTtyZXR1cm4geC5jbXBuKDApPDAmJnguaWFkZCh0aGlzLm0pLHh9LFNlLnByb3RvdHlwZS5zaGw9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MShwKSx0aGlzLmltb2QocC51c2hsbihi''@;'; put 'put ''KSl9LFNlLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHAsYil7cmV0dXJuIHRoaXMuX3ZlcmlmeTIocCxiKSx0aGlzLmltb2QocC5pbXVsKGIpKX0sU2UucHJvdG90eXBlLm11bD1mdW5jdGlvbihwLGIpe3JldHVybiB0aGlzLl92ZXJpZnkyKHAsYiksdGhpcy5pbW9kKHAubXVsKGIpKX0sU2Uu''@;'; put 'put ''cHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuaW11bChwLHAuY2xvbmUoKSl9LFNlLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubXVsKHAscCl9LFNlLnByb3RvdHlwZS5zcXJ0PWZ1bmN0aW9uKHApe2lmKHAuaXNaZXJvKCkpcmV0dXJuIHAuY2xv''@;'; put 'put ''bmUoKTt2YXIgYj10aGlzLm0uYW5kbG4oMyk7aWYoZyhiJTI9PTEpLDM9PT1iKXt2YXIgeD10aGlzLm0uYWRkKG5ldyB3KDEpKS5pdXNocm4oMik7cmV0dXJuIHRoaXMucG93KHAseCl9Zm9yKHZhciBDPXRoaXMubS5zdWJuKDEpLFQ9MDshQy5pc1plcm8oKSYmMD09PUMuYW5kbG4oMSk7KVQr''@;'; put 'put ''KyxDLml1c2hybigxKTtnKCFDLmlzWmVybygpKTt2YXIgSD1uZXcgdygxKS50b1JlZCh0aGlzKSxqPUgucmVkTmVnKCksRT10aGlzLm0uc3VibigxKS5pdXNocm4oMSksbT10aGlzLm0uYml0TGVuZ3RoKCk7Zm9yKG09bmV3IHcoMiptKm0pLnRvUmVkKHRoaXMpOzAhPT10aGlzLnBvdyhtLEUp''@;'; put 'put ''LmNtcChqKTspbS5yZWRJQWRkKGopO2Zvcih2YXIgQT10aGlzLnBvdyhtLEMpLGFlPXRoaXMucG93KHAsQy5hZGRuKDEpLml1c2hybigxKSksdGU9dGhpcy5wb3cocCxDKSxzZT1UOzAhPT10ZS5jbXAoSCk7KXtmb3IodmFyIHdlPXRlLFVlPTA7MCE9PXdlLmNtcChIKTtVZSsrKXdlPXdlLnJl''@;'; put 'put ''ZFNxcigpO2coVWU8c2UpO3ZhciBKZT10aGlzLnBvdyhBLG5ldyB3KDEpLml1c2hsbihzZS1VZS0xKSk7YWU9YWUucmVkTXVsKEplKSxBPUplLnJlZFNxcigpLHRlPXRlLnJlZE11bChBKSxzZT1VZX1yZXR1cm4gYWV9LFNlLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHApe3ZhciBiPXAuX2lu''@;'; put 'put ''dm1wKHRoaXMubSk7cmV0dXJuIDAhPT1iLm5lZ2F0aXZlPyhiLm5lZ2F0aXZlPTAsdGhpcy5pbW9kKGIpLnJlZE5lZygpKTp0aGlzLmltb2QoYil9LFNlLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24ocCxiKXtpZihiLmlzWmVybygpKXJldHVybiBuZXcgdygxKS50b1JlZCh0aGlzKTtpZigwPT09''@;'; put 'put ''Yi5jbXBuKDEpKXJldHVybiBwLmNsb25lKCk7dmFyIEM9bmV3IEFycmF5KDE2KTtDWzBdPW5ldyB3KDEpLnRvUmVkKHRoaXMpLENbMV09cDtmb3IodmFyIFQ9MjtUPEMubGVuZ3RoO1QrKylDW1RdPXRoaXMubXVsKENbVC0xXSxwKTt2YXIgSD1DWzBdLGo9MCxFPTAsbT1iLmJpdExlbmd0aCgp''@;'; put 'put ''JTI2O2ZvcigwPT09bSYmKG09MjYpLFQ9Yi5sZW5ndGgtMTtUPj0wO1QtLSl7Zm9yKHZhciBBPWIud29yZHNbVF0sYWU9bS0xO2FlPj0wO2FlLS0pe3ZhciB0ZT1BPj5hZSYxO0ghPT1DWzBdJiYoSD10aGlzLnNxcihIKSksMCE9PXRlfHwwIT09aj8oajw8PTEsanw9dGUsKDQ9PSsrRXx8MD09''@;'; put 'put ''PVQmJjA9PT1hZSkmJihIPXRoaXMubXVsKEgsQ1tqXSksRT0wLGo9MCkpOkU9MH1tPTI2fXJldHVybiBIfSxTZS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKHApe3ZhciBiPXAudW1vZCh0aGlzLm0pO3JldHVybiBiPT09cD9iLmNsb25lKCk6Yn0sU2UucHJvdG90eXBlLmNvbnZlcnRG''@;'; put 'put ''cm9tPWZ1bmN0aW9uKHApe3ZhciBiPXAuY2xvbmUoKTtyZXR1cm4gYi5yZWQ9bnVsbCxifSx3Lm1vbnQ9ZnVuY3Rpb24ocCl7cmV0dXJuIG5ldyBqZShwKX0sQihqZSxTZSksamUucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5pbW9kKHAudXNobG4odGhpcy5z''@;'; put 'put ''aGlmdCkpfSxqZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24ocCl7dmFyIGI9dGhpcy5pbW9kKHAubXVsKHRoaXMucmludikpO3JldHVybiBiLnJlZD1udWxsLGJ9LGplLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHAsYil7aWYocC5pc1plcm8oKXx8Yi5pc1plcm8oKSlyZXR1cm4g''@;'; put 'put ''cC53b3Jkc1swXT0wLHAubGVuZ3RoPTEscDt2YXIgeD1wLmltdWwoYiksQz14Lm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxUPXguaXN1YihDKS5pdXNocm4odGhpcy5zaGlmdCksSD1UO3JldHVybiBULmNtcCh0aGlzLm0p''@;'; put 'put ''Pj0wP0g9VC5pc3ViKHRoaXMubSk6VC5jbXBuKDApPDAmJihIPVQuaWFkZCh0aGlzLm0pKSxILl9mb3JjZVJlZCh0aGlzKX0samUucHJvdG90eXBlLm11bD1mdW5jdGlvbihwLGIpe2lmKHAuaXNaZXJvKCl8fGIuaXNaZXJvKCkpcmV0dXJuIG5ldyB3KDApLl9mb3JjZVJlZCh0aGlzKTt2YXIg''@;'; put 'put ''eD1wLm11bChiKSxDPXgubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLFQ9eC5pc3ViKEMpLml1c2hybih0aGlzLnNoaWZ0KSxIPVQ7cmV0dXJuIFQuY21wKHRoaXMubSk+PTA/SD1ULmlzdWIodGhpcy5tKTpULmNtcG4oMCk8''@;'; put 'put ''MCYmKEg9VC5pYWRkKHRoaXMubSkpLEguX2ZvcmNlUmVkKHRoaXMpfSxqZS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5pbW9kKHAuX2ludm1wKHRoaXMubSkubXVsKHRoaXMucjIpKS5fZm9yY2VSZWQodGhpcyl9fSh1ZT15Lm5tZCh1ZSksdGhpcyl9LDM0ODI6KHVl''@;'; put 'put ''LFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg1NzE3KSxfPXkoMjMxOCksZz15KDk3ODUpLEI9eSg5MDcyKSx3PXkoMTAyNyk7ZnVuY3Rpb24gUChGKXt3LmNhbGwodGhpcywiZGlnZXN0IiksdGhpcy5faGFzaD1GfUkoUCx3KSxQLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKEYpe3Ro''@;'; put 'put ''aXMuX2hhc2gudXBkYXRlKEYpfSxQLnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faGFzaC5kaWdlc3QoKX0sdWUuZXhwb3J0cz1mdW5jdGlvbihPKXtyZXR1cm4ibWQ1Ij09PShPPU8udG9Mb3dlckNhc2UoKSk/bmV3IF86InJtZDE2MCI9PT1PfHwicmlwZW1kMTYw''@;'; put 'put ''Ij09PU8/bmV3IGc6bmV3IFAoQihPKSl9fSw4MDI4Oih1ZSxYLHkpPT57dmFyIEk9eSgyMzE4KTt1ZS5leHBvcnRzPWZ1bmN0aW9uKF8pe3JldHVybihuZXcgSSkudXBkYXRlKF8pLmRpZ2VzdCgpfX0sODM1NToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDU3MTcpLF89eSgxMDMx''@;'; put 'put ''KSxnPXkoMTAyNyksQj15KDk1MDkpLkJ1ZmZlcix3PXkoODAyOCksUD15KDk3ODUpLEY9eSg5MDcyKSxPPUIuYWxsb2MoMTI4KTtmdW5jdGlvbiB6KE4sTCl7Zy5jYWxsKHRoaXMsImRpZ2VzdCIpLCJzdHJpbmciPT10eXBlb2YgTCYmKEw9Qi5mcm9tKEwpKTt2YXIgSz0ic2hhNTEyIj09PU58''@;'; put 'put ''fCJzaGEzODQiPT09Tj8xMjg6NjQ7dGhpcy5fYWxnPU4sdGhpcy5fa2V5PUwsTC5sZW5ndGg+Sz9MPSgicm1kMTYwIj09PU4/bmV3IFA6RihOKSkudXBkYXRlKEwpLmRpZ2VzdCgpOkwubGVuZ3RoPEsmJihMPUIuY29uY2F0KFtMLE9dLEspKTtmb3IodmFyIFc9dGhpcy5faXBhZD1CLmFsbG9j''@;'; put 'put ''VW5zYWZlKEspLFk9dGhpcy5fb3BhZD1CLmFsbG9jVW5zYWZlKEspLHE9MDtxPEs7cSsrKVdbcV09NTReTFtxXSxZW3FdPTkyXkxbcV07dGhpcy5faGFzaD0icm1kMTYwIj09PU4/bmV3IFA6RihOKSx0aGlzLl9oYXNoLnVwZGF0ZShXKX1JKHosZyksei5wcm90b3R5cGUuX3VwZGF0ZT1mdW5j''@;'; put 'put ''dGlvbihOKXt0aGlzLl9oYXNoLnVwZGF0ZShOKX0sei5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7dmFyIE49dGhpcy5faGFzaC5kaWdlc3QoKTtyZXR1cm4oInJtZDE2MCI9PT10aGlzLl9hbGc/bmV3IFA6Rih0aGlzLl9hbGcpKS51cGRhdGUodGhpcy5fb3BhZCkudXBkYXRlKE4pLmRp''@;'; put 'put ''Z2VzdCgpfSx1ZS5leHBvcnRzPWZ1bmN0aW9uKEwsSyl7cmV0dXJuInJtZDE2MCI9PT0oTD1MLnRvTG93ZXJDYXNlKCkpfHwicmlwZW1kMTYwIj09PUw/bmV3IHooInJtZDE2MCIsSyk6Im1kNSI9PT1MP25ldyBfKHcsSyk6bmV3IHooTCxLKX19LDEwMzE6KHVlLFgseSk9PnsidXNlIHN0cmlj''@;'; put 'put ''dCI7dmFyIEk9eSg1NzE3KSxfPXkoOTUwOSkuQnVmZmVyLGc9eSgxMDI3KSxCPV8uYWxsb2MoMTI4KSx3PTY0O2Z1bmN0aW9uIFAoRixPKXtnLmNhbGwodGhpcywiZGlnZXN0IiksInN0cmluZyI9PXR5cGVvZiBPJiYoTz1fLmZyb20oTykpLHRoaXMuX2FsZz1GLHRoaXMuX2tleT1PLE8ubGVu''@;'; put 'put ''Z3RoPnc/Tz1GKE8pOk8ubGVuZ3RoPHcmJihPPV8uY29uY2F0KFtPLEJdLHcpKTtmb3IodmFyIHo9dGhpcy5faXBhZD1fLmFsbG9jVW5zYWZlKHcpLE49dGhpcy5fb3BhZD1fLmFsbG9jVW5zYWZlKHcpLEw9MDtMPHc7TCsrKXpbTF09NTReT1tMXSxOW0xdPTkyXk9bTF07dGhpcy5faGFzaD1b''@;'; put 'put ''el19SShQLGcpLFAucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oRil7dGhpcy5faGFzaC5wdXNoKEYpfSxQLnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXt2YXIgRj10aGlzLl9hbGcoXy5jb25jYXQodGhpcy5faGFzaCkpO3JldHVybiB0aGlzLl9hbGcoXy5jb25jYXQoW3RoaXMuX29w''@;'; put 'put ''YWQsRl0pKX0sdWUuZXhwb3J0cz1QfSw1ODM1Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO1gucmFuZG9tQnl0ZXM9WC5ybmc9WC5wc2V1ZG9SYW5kb21CeXRlcz1YLnBybmc9eSgxNzk4KSxYLmNyZWF0ZUhhc2g9WC5IYXNoPXkoMzQ4MiksWC5jcmVhdGVIbWFjPVguSG1hYz15KDgzNTUpO3Zh''@;'; put 'put ''ciBJPXkoNjA0MiksXz1PYmplY3Qua2V5cyhJKSxnPVsic2hhMSIsInNoYTIyNCIsInNoYTI1NiIsInNoYTM4NCIsInNoYTUxMiIsIm1kNSIsInJtZDE2MCJdLmNvbmNhdChfKTtYLmdldEhhc2hlcz1mdW5jdGlvbigpe3JldHVybiBnfTt2YXIgQj15KDU2MzIpO1gucGJrZGYyPUIucGJrZGYy''@;'; put 'put ''LFgucGJrZGYyU3luYz1CLnBia2RmMlN5bmM7dmFyIHc9eSgzNjE0KTtYLkNpcGhlcj13LkNpcGhlcixYLmNyZWF0ZUNpcGhlcj13LmNyZWF0ZUNpcGhlcixYLkNpcGhlcml2PXcuQ2lwaGVyaXYsWC5jcmVhdGVDaXBoZXJpdj13LmNyZWF0ZUNpcGhlcml2LFguRGVjaXBoZXI9dy5EZWNpcGhl''@;'; put 'put ''cixYLmNyZWF0ZURlY2lwaGVyPXcuY3JlYXRlRGVjaXBoZXIsWC5EZWNpcGhlcml2PXcuRGVjaXBoZXJpdixYLmNyZWF0ZURlY2lwaGVyaXY9dy5jcmVhdGVEZWNpcGhlcml2LFguZ2V0Q2lwaGVycz13LmdldENpcGhlcnMsWC5saXN0Q2lwaGVycz13Lmxpc3RDaXBoZXJzO3ZhciBQPXkoMjYw''@;'; put 'put ''Nyk7WC5EaWZmaWVIZWxsbWFuR3JvdXA9UC5EaWZmaWVIZWxsbWFuR3JvdXAsWC5jcmVhdGVEaWZmaWVIZWxsbWFuR3JvdXA9UC5jcmVhdGVEaWZmaWVIZWxsbWFuR3JvdXAsWC5nZXREaWZmaWVIZWxsbWFuPVAuZ2V0RGlmZmllSGVsbG1hbixYLmNyZWF0ZURpZmZpZUhlbGxtYW49UC5jcmVh''@;'; put 'put ''dGVEaWZmaWVIZWxsbWFuLFguRGlmZmllSGVsbG1hbj1QLkRpZmZpZUhlbGxtYW47dmFyIEY9eSg0NzQzKTtYLmNyZWF0ZVNpZ249Ri5jcmVhdGVTaWduLFguU2lnbj1GLlNpZ24sWC5jcmVhdGVWZXJpZnk9Ri5jcmVhdGVWZXJpZnksWC5WZXJpZnk9Ri5WZXJpZnksWC5jcmVhdGVFQ0RIPXko''@;'; put 'put ''NjM5Myk7dmFyIE89eSg3OTAwKTtYLnB1YmxpY0VuY3J5cHQ9Ty5wdWJsaWNFbmNyeXB0LFgucHJpdmF0ZUVuY3J5cHQ9Ty5wcml2YXRlRW5jcnlwdCxYLnB1YmxpY0RlY3J5cHQ9Ty5wdWJsaWNEZWNyeXB0LFgucHJpdmF0ZURlY3J5cHQ9Ty5wcml2YXRlRGVjcnlwdDt2YXIgej15KDc5NjMp''@;'; put 'put ''O1gucmFuZG9tRmlsbD16LnJhbmRvbUZpbGwsWC5yYW5kb21GaWxsU3luYz16LnJhbmRvbUZpbGxTeW5jLFguY3JlYXRlQ3JlZGVudGlhbHM9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoInNvcnJ5LCBjcmVhdGVDcmVkZW50aWFscyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0XG53ZSBhY2Nl''@;'; put 'put ''cHQgcHVsbCByZXF1ZXN0c1xuaHR0cHM6Ly9naXRodWIuY29tL2Jyb3dzZXJpZnkvY3J5cHRvLWJyb3dzZXJpZnkiKX0sWC5jb25zdGFudHM9e0RIX0NIRUNLX1BfTk9UX1NBRkVfUFJJTUU6MixESF9DSEVDS19QX05PVF9QUklNRToxLERIX1VOQUJMRV9UT19DSEVDS19HRU5FUkFUT1I6NCxE''@;'; put 'put ''SF9OT1RfU1VJVEFCTEVfR0VORVJBVE9SOjgsTlBOX0VOQUJMRUQ6MSxBTFBOX0VOQUJMRUQ6MSxSU0FfUEtDUzFfUEFERElORzoxLFJTQV9TU0xWMjNfUEFERElORzoyLFJTQV9OT19QQURESU5HOjMsUlNBX1BLQ1MxX09BRVBfUEFERElORzo0LFJTQV9YOTMxX1BBRERJTkc6NSxSU0FfUEtD''@;'; put 'put ''UzFfUFNTX1BBRERJTkc6NixQT0lOVF9DT05WRVJTSU9OX0NPTVBSRVNTRUQ6MixQT0lOVF9DT05WRVJTSU9OX1VOQ09NUFJFU1NFRDo0LFBPSU5UX0NPTlZFUlNJT05fSFlCUklEOjZ9fSwyMjk2Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNDQyOSksXz15KDM0NjQpLGc9eSg0''@;'; put 'put ''NDUzKSxCPXkoNzI5Nik7dWUuZXhwb3J0cz1mdW5jdGlvbihQLEYsTyl7aWYoIVB8fCJvYmplY3QiIT10eXBlb2YgUCYmImZ1bmN0aW9uIiE9dHlwZW9mIFApdGhyb3cgbmV3IGcoImBvYmpgIG11c3QgYmUgYW4gb2JqZWN0IG9yIGEgZnVuY3Rpb25gIik7aWYoInN0cmluZyIhPXR5cGVvZiBG''@;'; put 'put ''JiYic3ltYm9sIiE9dHlwZW9mIEYpdGhyb3cgbmV3IGcoImBwcm9wZXJ0eWAgbXVzdCBiZSBhIHN0cmluZyBvciBhIHN5bWJvbGAiKTtpZihhcmd1bWVudHMubGVuZ3RoPjMmJiJib29sZWFuIiE9dHlwZW9mIGFyZ3VtZW50c1szXSYmbnVsbCE9PWFyZ3VtZW50c1szXSl0aHJvdyBuZXcgZygi''@;'; put 'put ''YG5vbkVudW1lcmFibGVgLCBpZiBwcm92aWRlZCwgbXVzdCBiZSBhIGJvb2xlYW4gb3IgbnVsbCIpO2lmKGFyZ3VtZW50cy5sZW5ndGg+NCYmImJvb2xlYW4iIT10eXBlb2YgYXJndW1lbnRzWzRdJiZudWxsIT09YXJndW1lbnRzWzRdKXRocm93IG5ldyBnKCJgbm9uV3JpdGFibGVgLCBpZiBw''@;'; put 'put ''cm92aWRlZCwgbXVzdCBiZSBhIGJvb2xlYW4gb3IgbnVsbCIpO2lmKGFyZ3VtZW50cy5sZW5ndGg+NSYmImJvb2xlYW4iIT10eXBlb2YgYXJndW1lbnRzWzVdJiZudWxsIT09YXJndW1lbnRzWzVdKXRocm93IG5ldyBnKCJgbm9uQ29uZmlndXJhYmxlYCwgaWYgcHJvdmlkZWQsIG11c3QgYmUg''@;'; put 'put ''YSBib29sZWFuIG9yIG51bGwiKTtpZihhcmd1bWVudHMubGVuZ3RoPjYmJiJib29sZWFuIiE9dHlwZW9mIGFyZ3VtZW50c1s2XSl0aHJvdyBuZXcgZygiYGxvb3NlYCwgaWYgcHJvdmlkZWQsIG11c3QgYmUgYSBib29sZWFuIik7dmFyIHo9YXJndW1lbnRzLmxlbmd0aD4zP2FyZ3VtZW50c1sz''@;'; put 'put ''XTpudWxsLE49YXJndW1lbnRzLmxlbmd0aD40P2FyZ3VtZW50c1s0XTpudWxsLEw9YXJndW1lbnRzLmxlbmd0aD41P2FyZ3VtZW50c1s1XTpudWxsLEs9YXJndW1lbnRzLmxlbmd0aD42JiZhcmd1bWVudHNbNl0sVT0hIUImJkIoUCxGKTtpZihJKUkoUCxGLHtjb25maWd1cmFibGU6bnVsbD09''@;'; put 'put ''PUwmJlU/VS5jb25maWd1cmFibGU6IUwsZW51bWVyYWJsZTpudWxsPT09eiYmVT9VLmVudW1lcmFibGU6IXosdmFsdWU6Tyx3cml0YWJsZTpudWxsPT09TiYmVT9VLndyaXRhYmxlOiFOfSk7ZWxzZXtpZighSyYmKHp8fE58fEwpKXRocm93IG5ldyBfKCJUaGlzIGVudmlyb25tZW50IGRvZXMg''@;'; put 'put ''bm90IHN1cHBvcnQgZGVmaW5pbmcgYSBwcm9wZXJ0eSBhcyBub24tY29uZmlndXJhYmxlLCBub24td3JpdGFibGUsIG9yIG5vbi1lbnVtZXJhYmxlLiIpO1BbRl09T319fSw0Mjg5Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMjIxNSksXz0iZnVuY3Rpb24iPT10eXBlb2YgU3lt''@;'; put 'put ''Ym9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbCgiZm9vIiksZz1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLEI9QXJyYXkucHJvdG90eXBlLmNvbmNhdCx3PXkoMjI5NiksRj15KDEwNDQpKCksTz1mdW5jdGlvbihOLEwsSyxVKXtpZihMIGluIE4paWYoITA9PT1VKXtpZihOW0xdPT09Syly''@;'; put 'put ''ZXR1cm59ZWxzZSBpZighZnVuY3Rpb24oTil7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIE4mJiJbb2JqZWN0IEZ1bmN0aW9uXSI9PT1nLmNhbGwoTil9KFUpfHwhVSgpKXJldHVybjtGP3coTixMLEssITApOncoTixMLEspfSx6PWZ1bmN0aW9uKE4sTCl7dmFyIEs9YXJndW1lbnRzLmxlbmd0''@;'; put 'put ''aD4yP2FyZ3VtZW50c1syXTp7fSxVPUkoTCk7XyYmKFU9Qi5jYWxsKFUsT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhMKSkpO2Zvcih2YXIgVz0wO1c8VS5sZW5ndGg7Vys9MSlPKE4sVVtXXSxMW1VbV11dLEtbVVtXXV0pfTt6LnN1cHBvcnRzRGVzY3JpcHRvcnM9ISFGLHVlLmV4cG9y''@;'; put 'put ''dHM9en0sNTI1MToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0IjtYLnV0aWxzPXkoMTI3OCksWC5DaXBoZXI9eSg1NzU2KSxYLkRFUz15KDc3OCksWC5DQkM9eSg5MDUxKSxYLkVERT15KDY1MSl9LDkwNTE6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg5NzQ2KSxfPXkoNTcxNyksZz17''@;'; put 'put ''fTtmdW5jdGlvbiBCKFApe0kuZXF1YWwoUC5sZW5ndGgsOCwiSW52YWxpZCBJViBsZW5ndGgiKSx0aGlzLml2PW5ldyBBcnJheSg4KTtmb3IodmFyIEY9MDtGPHRoaXMuaXYubGVuZ3RoO0YrKyl0aGlzLml2W0ZdPVBbRl19WC5pbnN0YW50aWF0ZT1mdW5jdGlvbiB3KFApe2Z1bmN0aW9uIEYo''@;'; put 'put ''TCl7UC5jYWxsKHRoaXMsTCksdGhpcy5fY2JjSW5pdCgpfV8oRixQKTtmb3IodmFyIE89T2JqZWN0LmtleXMoZyksej0wO3o8Ty5sZW5ndGg7eisrKXt2YXIgTj1PW3pdO0YucHJvdG90eXBlW05dPWdbTl19cmV0dXJuIEYuY3JlYXRlPWZ1bmN0aW9uKEspe3JldHVybiBuZXcgRihLKX0sRn0s''@;'; put 'put ''Zy5fY2JjSW5pdD1mdW5jdGlvbigpe3ZhciBGPW5ldyBCKHRoaXMub3B0aW9ucy5pdik7dGhpcy5fY2JjU3RhdGU9Rn0sZy5fdXBkYXRlPWZ1bmN0aW9uKEYsTyx6LE4pe3ZhciBLPXRoaXMuY29uc3RydWN0b3Iuc3VwZXJfLnByb3RvdHlwZSxVPXRoaXMuX2NiY1N0YXRlLml2O2lmKCJlbmNy''@;'; put 'put ''eXB0Ij09PXRoaXMudHlwZSl7Zm9yKHZhciBXPTA7Vzx0aGlzLmJsb2NrU2l6ZTtXKyspVVtXXV49RltPK1ddO2ZvcihLLl91cGRhdGUuY2FsbCh0aGlzLFUsMCx6LE4pLFc9MDtXPHRoaXMuYmxvY2tTaXplO1crKylVW1ddPXpbTitXXX1lbHNle2ZvcihLLl91cGRhdGUuY2FsbCh0aGlzLEYs''@;'; put 'put ''Tyx6LE4pLFc9MDtXPHRoaXMuYmxvY2tTaXplO1crKyl6W04rV11ePVVbV107Zm9yKFc9MDtXPHRoaXMuYmxvY2tTaXplO1crKylVW1ddPUZbTytXXX19fSw1NzU2Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoOTc0Nik7ZnVuY3Rpb24gXyhnKXt0aGlzLm9wdGlvbnM9Zyx0aGlz''@;'; put 'put ''LnR5cGU9dGhpcy5vcHRpb25zLnR5cGUsdGhpcy5ibG9ja1NpemU9OCx0aGlzLl9pbml0KCksdGhpcy5idWZmZXI9bmV3IEFycmF5KHRoaXMuYmxvY2tTaXplKSx0aGlzLmJ1ZmZlck9mZj0wLHRoaXMucGFkZGluZz0hMSE9PWcucGFkZGluZ311ZS5leHBvcnRzPV8sXy5wcm90b3R5cGUuX2lu''@;'; put 'put ''aXQ9ZnVuY3Rpb24oKXt9LF8ucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihCKXtyZXR1cm4gMD09PUIubGVuZ3RoP1tdOiJkZWNyeXB0Ij09PXRoaXMudHlwZT90aGlzLl91cGRhdGVEZWNyeXB0KEIpOnRoaXMuX3VwZGF0ZUVuY3J5cHQoQil9LF8ucHJvdG90eXBlLl9idWZmZXI9ZnVuY3Rp''@;'; put 'put ''b24oQix3KXtmb3IodmFyIFA9TWF0aC5taW4odGhpcy5idWZmZXIubGVuZ3RoLXRoaXMuYnVmZmVyT2ZmLEIubGVuZ3RoLXcpLEY9MDtGPFA7RisrKXRoaXMuYnVmZmVyW3RoaXMuYnVmZmVyT2ZmK0ZdPUJbdytGXTtyZXR1cm4gdGhpcy5idWZmZXJPZmYrPVAsUH0sXy5wcm90b3R5cGUuX2Zs''@;'; put 'put ''dXNoQnVmZmVyPWZ1bmN0aW9uKEIsdyl7cmV0dXJuIHRoaXMuX3VwZGF0ZSh0aGlzLmJ1ZmZlciwwLEIsdyksdGhpcy5idWZmZXJPZmY9MCx0aGlzLmJsb2NrU2l6ZX0sXy5wcm90b3R5cGUuX3VwZGF0ZUVuY3J5cHQ9ZnVuY3Rpb24oQil7dmFyIHc9MCxQPTAsTz1uZXcgQXJyYXkoKCh0aGlz''@;'; put 'put ''LmJ1ZmZlck9mZitCLmxlbmd0aCkvdGhpcy5ibG9ja1NpemV8MCkqdGhpcy5ibG9ja1NpemUpOzAhPT10aGlzLmJ1ZmZlck9mZiYmKHcrPXRoaXMuX2J1ZmZlcihCLHcpLHRoaXMuYnVmZmVyT2ZmPT09dGhpcy5idWZmZXIubGVuZ3RoJiYoUCs9dGhpcy5fZmx1c2hCdWZmZXIoTyxQKSkpO2Zv''@;'; put 'put ''cih2YXIgej1CLmxlbmd0aC0oQi5sZW5ndGgtdykldGhpcy5ibG9ja1NpemU7dzx6O3crPXRoaXMuYmxvY2tTaXplKXRoaXMuX3VwZGF0ZShCLHcsTyxQKSxQKz10aGlzLmJsb2NrU2l6ZTtmb3IoO3c8Qi5sZW5ndGg7dysrLHRoaXMuYnVmZmVyT2ZmKyspdGhpcy5idWZmZXJbdGhpcy5idWZm''@;'; put 'put ''ZXJPZmZdPUJbd107cmV0dXJuIE99LF8ucHJvdG90eXBlLl91cGRhdGVEZWNyeXB0PWZ1bmN0aW9uKEIpe2Zvcih2YXIgdz0wLFA9MCxGPU1hdGguY2VpbCgodGhpcy5idWZmZXJPZmYrQi5sZW5ndGgpL3RoaXMuYmxvY2tTaXplKS0xLE89bmV3IEFycmF5KEYqdGhpcy5ibG9ja1NpemUpO0Y+''@;'; put 'put ''MDtGLS0pdys9dGhpcy5fYnVmZmVyKEIsdyksUCs9dGhpcy5fZmx1c2hCdWZmZXIoTyxQKTtyZXR1cm4gdys9dGhpcy5fYnVmZmVyKEIsdyksT30sXy5wcm90b3R5cGUuZmluYWw9ZnVuY3Rpb24oQil7dmFyIHcsUDtyZXR1cm4gQiYmKHc9dGhpcy51cGRhdGUoQikpLFA9ImVuY3J5cHQiPT09''@;'; put 'put ''dGhpcy50eXBlP3RoaXMuX2ZpbmFsRW5jcnlwdCgpOnRoaXMuX2ZpbmFsRGVjcnlwdCgpLHc/dy5jb25jYXQoUCk6UH0sXy5wcm90b3R5cGUuX3BhZD1mdW5jdGlvbihCLHcpe2lmKDA9PT13KXJldHVybiExO2Zvcig7dzxCLmxlbmd0aDspQlt3KytdPTA7cmV0dXJuITB9LF8ucHJvdG90eXBl''@;'; put 'put ''Ll9maW5hbEVuY3J5cHQ9ZnVuY3Rpb24oKXtpZighdGhpcy5fcGFkKHRoaXMuYnVmZmVyLHRoaXMuYnVmZmVyT2ZmKSlyZXR1cm5bXTt2YXIgQj1uZXcgQXJyYXkodGhpcy5ibG9ja1NpemUpO3JldHVybiB0aGlzLl91cGRhdGUodGhpcy5idWZmZXIsMCxCLDApLEJ9LF8ucHJvdG90eXBlLl91''@;'; put 'put ''bnBhZD1mdW5jdGlvbihCKXtyZXR1cm4gQn0sXy5wcm90b3R5cGUuX2ZpbmFsRGVjcnlwdD1mdW5jdGlvbigpe0kuZXF1YWwodGhpcy5idWZmZXJPZmYsdGhpcy5ibG9ja1NpemUsIk5vdCBlbm91Z2ggZGF0YSB0byBkZWNyeXB0Iik7dmFyIEI9bmV3IEFycmF5KHRoaXMuYmxvY2tTaXplKTty''@;'; put 'put ''ZXR1cm4gdGhpcy5fZmx1c2hCdWZmZXIoQiwwKSx0aGlzLl91bnBhZChCKX19LDc3ODoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDk3NDYpLF89eSg1NzE3KSxnPXkoMTI3OCksQj15KDU3NTYpO2Z1bmN0aW9uIHcoKXt0aGlzLnRtcD1uZXcgQXJyYXkoMiksdGhpcy5rZXlzPW51''@;'; put 'put ''bGx9ZnVuY3Rpb24gUChPKXtCLmNhbGwodGhpcyxPKTt2YXIgej1uZXcgdzt0aGlzLl9kZXNTdGF0ZT16LHRoaXMuZGVyaXZlS2V5cyh6LE8ua2V5KX1fKFAsQiksdWUuZXhwb3J0cz1QLFAuY3JlYXRlPWZ1bmN0aW9uKHope3JldHVybiBuZXcgUCh6KX07dmFyIEY9WzEsMSwyLDIsMiwyLDIs''@;'; put 'put ''MiwxLDIsMiwyLDIsMiwyLDFdO1AucHJvdG90eXBlLmRlcml2ZUtleXM9ZnVuY3Rpb24oeixOKXt6LmtleXM9bmV3IEFycmF5KDMyKSxJLmVxdWFsKE4ubGVuZ3RoLHRoaXMuYmxvY2tTaXplLCJJbnZhbGlkIGtleSBsZW5ndGgiKTt2YXIgTD1nLnJlYWRVSW50MzJCRShOLDApLEs9Zy5yZWFk''@;'; put 'put ''VUludDMyQkUoTiw0KTtnLnBjMShMLEssei50bXAsMCksTD16LnRtcFswXSxLPXoudG1wWzFdO2Zvcih2YXIgVT0wO1U8ei5rZXlzLmxlbmd0aDtVKz0yKXt2YXIgVz1GW1U+Pj4xXTtMPWcucjI4c2hsKEwsVyksSz1nLnIyOHNobChLLFcpLGcucGMyKEwsSyx6LmtleXMsVSl9fSxQLnByb3Rv''@;'; put 'put ''dHlwZS5fdXBkYXRlPWZ1bmN0aW9uKHosTixMLEspe3ZhciBVPXRoaXMuX2Rlc1N0YXRlLFc9Zy5yZWFkVUludDMyQkUoeixOKSxZPWcucmVhZFVJbnQzMkJFKHosTis0KTtnLmlwKFcsWSxVLnRtcCwwKSxXPVUudG1wWzBdLFk9VS50bXBbMV0sImVuY3J5cHQiPT09dGhpcy50eXBlP3RoaXMu''@;'; put 'put ''X2VuY3J5cHQoVSxXLFksVS50bXAsMCk6dGhpcy5fZGVjcnlwdChVLFcsWSxVLnRtcCwwKSxZPVUudG1wWzFdLGcud3JpdGVVSW50MzJCRShMLFc9VS50bXBbMF0sSyksZy53cml0ZVVJbnQzMkJFKEwsWSxLKzQpfSxQLnByb3RvdHlwZS5fcGFkPWZ1bmN0aW9uKHosTil7aWYoITE9PT10aGlz''@;'; put 'put ''LnBhZGRpbmcpcmV0dXJuITE7Zm9yKHZhciBMPXoubGVuZ3RoLU4sSz1OO0s8ei5sZW5ndGg7SysrKXpbS109TDtyZXR1cm4hMH0sUC5wcm90b3R5cGUuX3VucGFkPWZ1bmN0aW9uKHope2lmKCExPT09dGhpcy5wYWRkaW5nKXJldHVybiB6O2Zvcih2YXIgTj16W3oubGVuZ3RoLTFdLEw9ei5s''@;'; put 'put ''ZW5ndGgtTjtMPHoubGVuZ3RoO0wrKylJLmVxdWFsKHpbTF0sTik7cmV0dXJuIHouc2xpY2UoMCx6Lmxlbmd0aC1OKX0sUC5wcm90b3R5cGUuX2VuY3J5cHQ9ZnVuY3Rpb24oeixOLEwsSyxVKXtmb3IodmFyIFc9TixZPUwscT0wO3E8ei5rZXlzLmxlbmd0aDtxKz0yKXt2YXIgZWU9ei5rZXlz''@;'; put 'put ''W3FdLEo9ei5rZXlzW3ErMV07Zy5leHBhbmQoWSx6LnRtcCwwKTt2YXIgbmU9Zy5zdWJzdGl0dXRlKGVlXj16LnRtcFswXSxKXj16LnRtcFsxXSksbGU9WTtZPShXXmcucGVybXV0ZShuZSkpPj4+MCxXPWxlfWcucmlwKFksVyxLLFUpfSxQLnByb3RvdHlwZS5fZGVjcnlwdD1mdW5jdGlvbih6''@;'; put 'put ''LE4sTCxLLFUpe2Zvcih2YXIgVz1MLFk9TixxPXoua2V5cy5sZW5ndGgtMjtxPj0wO3EtPTIpe3ZhciBlZT16LmtleXNbcV0sSj16LmtleXNbcSsxXTtnLmV4cGFuZChXLHoudG1wLDApO3ZhciBuZT1nLnN1YnN0aXR1dGUoZWVePXoudG1wWzBdLEpePXoudG1wWzFdKSxsZT1XO1c9KFleZy5w''@;'; put 'put ''ZXJtdXRlKG5lKSk+Pj4wLFk9bGV9Zy5yaXAoVyxZLEssVSl9fSw2NTE6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg5NzQ2KSxfPXkoNTcxNyksZz15KDU3NTYpLEI9eSg3NzgpO2Z1bmN0aW9uIHcoRixPKXtJLmVxdWFsKE8ubGVuZ3RoLDI0LCJJbnZhbGlkIGtleSBsZW5ndGgi''@;'; put 'put ''KTt2YXIgej1PLnNsaWNlKDAsOCksTj1PLnNsaWNlKDgsMTYpLEw9Ty5zbGljZSgxNiwyNCk7dGhpcy5jaXBoZXJzPSJlbmNyeXB0Ij09PUY/W0IuY3JlYXRlKHt0eXBlOiJlbmNyeXB0IixrZXk6en0pLEIuY3JlYXRlKHt0eXBlOiJkZWNyeXB0IixrZXk6Tn0pLEIuY3JlYXRlKHt0eXBlOiJl''@;'; put 'put ''bmNyeXB0IixrZXk6TH0pXTpbQi5jcmVhdGUoe3R5cGU6ImRlY3J5cHQiLGtleTpMfSksQi5jcmVhdGUoe3R5cGU6ImVuY3J5cHQiLGtleTpOfSksQi5jcmVhdGUoe3R5cGU6ImRlY3J5cHQiLGtleTp6fSldfWZ1bmN0aW9uIFAoRil7Zy5jYWxsKHRoaXMsRik7dmFyIE89bmV3IHcodGhpcy50''@;'; put 'put ''eXBlLHRoaXMub3B0aW9ucy5rZXkpO3RoaXMuX2VkZVN0YXRlPU99XyhQLGcpLHVlLmV4cG9ydHM9UCxQLmNyZWF0ZT1mdW5jdGlvbihPKXtyZXR1cm4gbmV3IFAoTyl9LFAucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oTyx6LE4sTCl7dmFyIEs9dGhpcy5fZWRlU3RhdGU7Sy5jaXBoZXJz''@;'; put 'put ''WzBdLl91cGRhdGUoTyx6LE4sTCksSy5jaXBoZXJzWzFdLl91cGRhdGUoTixMLE4sTCksSy5jaXBoZXJzWzJdLl91cGRhdGUoTixMLE4sTCl9LFAucHJvdG90eXBlLl9wYWQ9Qi5wcm90b3R5cGUuX3BhZCxQLnByb3RvdHlwZS5fdW5wYWQ9Qi5wcm90b3R5cGUuX3VucGFkfSwxMjc4Oih1ZSxY''@;'; put 'put ''KT0+eyJ1c2Ugc3RyaWN0IjtYLnJlYWRVSW50MzJCRT1mdW5jdGlvbihCLHcpe3JldHVybihCWzArd108PDI0fEJbMSt3XTw8MTZ8QlsyK3ddPDw4fEJbMyt3XSk+Pj4wfSxYLndyaXRlVUludDMyQkU9ZnVuY3Rpb24oQix3LFApe0JbMCtQXT13Pj4+MjQsQlsxK1BdPXc+Pj4xNiYyNTUsQlsy''@;'; put 'put ''K1BdPXc+Pj44JjI1NSxCWzMrUF09MjU1Jnd9LFguaXA9ZnVuY3Rpb24oQix3LFAsRil7Zm9yKHZhciBPPTAsej0wLE49NjtOPj0wO04tPTIpe2Zvcih2YXIgTD0wO0w8PTI0O0wrPTgpTzw8PTEsT3w9dz4+PkwrTiYxO2ZvcihMPTA7TDw9MjQ7TCs9OClPPDw9MSxPfD1CPj4+TCtOJjF9Zm9y''@;'; put 'put ''KE49NjtOPj0wO04tPTIpe2ZvcihMPTE7TDw9MjU7TCs9OCl6PDw9MSx6fD13Pj4+TCtOJjE7Zm9yKEw9MTtMPD0yNTtMKz04KXo8PD0xLHp8PUI+Pj5MK04mMX1QW0YrMF09Tz4+PjAsUFtGKzFdPXo+Pj4wfSxYLnJpcD1mdW5jdGlvbihCLHcsUCxGKXtmb3IodmFyIE89MCx6PTAsTj0wO048''@;'; put 'put ''NDtOKyspZm9yKHZhciBMPTI0O0w+PTA7TC09OClPPDw9MSxPfD13Pj4+TCtOJjEsTzw8PTEsT3w9Qj4+PkwrTiYxO2ZvcihOPTQ7Tjw4O04rKylmb3IoTD0yNDtMPj0wO0wtPTgpejw8PTEsenw9dz4+PkwrTiYxLHo8PD0xLHp8PUI+Pj5MK04mMTtQW0YrMF09Tz4+PjAsUFtGKzFdPXo+Pj4w''@;'; put 'put ''fSxYLnBjMT1mdW5jdGlvbihCLHcsUCxGKXtmb3IodmFyIE89MCx6PTAsTj03O04+PTU7Ti0tKXtmb3IodmFyIEw9MDtMPD0yNDtMKz04KU88PD0xLE98PXc+PkwrTiYxO2ZvcihMPTA7TDw9MjQ7TCs9OClPPDw9MSxPfD1CPj5MK04mMX1mb3IoTD0wO0w8PTI0O0wrPTgpTzw8PTEsT3w9dz4+''@;'; put 'put ''TCtOJjE7Zm9yKE49MTtOPD0zO04rKyl7Zm9yKEw9MDtMPD0yNDtMKz04KXo8PD0xLHp8PXc+PkwrTiYxO2ZvcihMPTA7TDw9MjQ7TCs9OCl6PDw9MSx6fD1CPj5MK04mMX1mb3IoTD0wO0w8PTI0O0wrPTgpejw8PTEsenw9Qj4+TCtOJjE7UFtGKzBdPU8+Pj4wLFBbRisxXT16Pj4+MH0sWC5y''@;'; put 'put ''MjhzaGw9ZnVuY3Rpb24oQix3KXtyZXR1cm4gQjw8dyYyNjg0MzU0NTV8Qj4+PjI4LXd9O3ZhciB5PVsxNCwxMSwxNyw0LDI3LDIzLDI1LDAsMTMsMjIsNywxOCw1LDksMTYsMjQsMiwyMCwxMiwyMSwxLDgsMTUsMjYsMTUsNCwyNSwxOSw5LDEsMjYsMTYsNSwxMSwyMyw4LDEyLDcsMTcsMCwy''@;'; put 'put ''MiwzLDEwLDE0LDYsMjAsMjcsMjRdO1gucGMyPWZ1bmN0aW9uKEIsdyxQLEYpe2Zvcih2YXIgTz0wLHo9MCxOPXkubGVuZ3RoPj4+MSxMPTA7TDxOO0wrKylPPDw9MSxPfD1CPj4+eVtMXSYxO2ZvcihMPU47TDx5Lmxlbmd0aDtMKyspejw8PTEsenw9dz4+PnlbTF0mMTtQW0YrMF09Tz4+PjAs''@;'; put 'put ''UFtGKzFdPXo+Pj4wfSxYLmV4cGFuZD1mdW5jdGlvbihCLHcsUCl7dmFyIEY9MCxPPTA7Rj0oMSZCKTw8NXxCPj4+Mjc7Zm9yKHZhciB6PTIzO3o+PTE1O3otPTQpRjw8PTYsRnw9Qj4+PnomNjM7Zm9yKHo9MTE7ej49Mzt6LT00KU98PUI+Pj56JjYzLE88PD02O098PSgzMSZCKTw8MXxCPj4+''@;'; put 'put ''MzEsd1tQKzBdPUY+Pj4wLHdbUCsxXT1PPj4+MH07dmFyIEk9WzE0LDAsNCwxNSwxMyw3LDEsNCwyLDE0LDE1LDIsMTEsMTMsOCwxLDMsMTAsMTAsNiw2LDEyLDEyLDExLDUsOSw5LDUsMCwzLDcsOCw0LDE1LDEsMTIsMTQsOCw4LDIsMTMsNCw2LDksMiwxLDExLDcsMTUsNSwxMiwxMSw5LDMs''@;'; put 'put ''NywxNCwzLDEwLDEwLDAsNSw2LDAsMTMsMTUsMywxLDEzLDgsNCwxNCw3LDYsMTUsMTEsMiwzLDgsNCwxNCw5LDEyLDcsMCwyLDEsMTMsMTAsMTIsNiwwLDksNSwxMSwxMCw1LDAsMTMsMTQsOCw3LDEwLDExLDEsMTAsMyw0LDE1LDEzLDQsMSwyLDUsMTEsOCw2LDEyLDcsNiwxMiw5LDAsMyw1''@;'; put 'put ''LDIsMTQsMTUsOSwxMCwxMywwLDcsOSwwLDE0LDksNiwzLDMsNCwxNSw2LDUsMTAsMSwyLDEzLDgsMTIsNSw3LDE0LDExLDEyLDQsMTEsMiwxNSw4LDEsMTMsMSw2LDEwLDQsMTMsOSwwLDgsNiwxNSw5LDMsOCwwLDcsMTEsNCwxLDE1LDIsMTQsMTIsMyw1LDExLDEwLDUsMTQsMiw3LDEyLDcs''@;'; put 'put ''MTMsMTMsOCwxNCwxMSwzLDUsMCw2LDYsMTUsOSwwLDEwLDMsMSw0LDIsNyw4LDIsNSwxMiwxMSwxLDEyLDEwLDQsMTQsMTUsOSwxMCwzLDYsMTUsOSwwLDAsNiwxMiwxMCwxMSwxLDcsMTMsMTMsOCwxNSw5LDEsNCwzLDUsMTQsMTEsNSwxMiwyLDcsOCwyLDQsMTQsMiwxNCwxMiwxMSw0LDIs''@;'; put 'put ''MSwxMiw3LDQsMTAsNywxMSwxMyw2LDEsOCw1LDUsMCwzLDE1LDE1LDEwLDEzLDMsMCw5LDE0LDgsOSw2LDQsMTEsMiw4LDEsMTIsMTEsNywxMCwxLDEzLDE0LDcsMiw4LDEzLDE1LDYsOSwxNSwxMiwwLDUsOSw2LDEwLDMsNCwwLDUsMTQsMywxMiwxMCwxLDE1LDEwLDQsMTUsMiw5LDcsMiwx''@;'; put 'put ''Miw2LDksOCw1LDAsNiwxMywxLDMsMTMsNCwxNCwxNCwwLDcsMTEsNSwzLDExLDgsOSw0LDE0LDMsMTUsMiw1LDEyLDIsOSw4LDUsMTIsMTUsMywxMCw3LDExLDAsMTQsNCwxLDEwLDcsMSw2LDEzLDAsMTEsOCw2LDEzLDQsMTMsMTEsMCwyLDExLDE0LDcsMTUsNCwwLDksOCwxLDEzLDEwLDMs''@;'; put 'put ''MTQsMTIsMyw5LDUsNywxMiw1LDIsMTAsMTUsNiw4LDEsNiwxLDYsNCwxMSwxMSwxMywxMyw4LDEyLDEsMyw0LDcsMTAsMTQsNywxMCw5LDE1LDUsNiwwLDgsMTUsMCwxNCw1LDIsOSwzLDIsMTIsMTMsMSwyLDE1LDgsMTMsNCw4LDYsMTAsMTUsMywxMSw3LDEsNCwxMCwxMiw5LDUsMyw2LDE0''@;'; put 'put ''LDExLDUsMCwwLDE0LDEyLDksNywyLDcsMiwxMSwxLDQsMTQsMSw3LDksNCwxMiwxMCwxNCw4LDIsMTMsMCwxNSw2LDEyLDEwLDksMTMsMCwxNSwzLDMsNSw1LDYsOCwxMV07WC5zdWJzdGl0dXRlPWZ1bmN0aW9uKEIsdyl7Zm9yKHZhciBQPTAsRj0wO0Y8NDtGKyspUDw8PTQsUHw9SVs2NCpG''@;'; put 'put ''KyhCPj4+MTgtNipGJjYzKV07Zm9yKEY9MDtGPDQ7RisrKVA8PD00LFB8PUlbMjU2KzY0KkYrKHc+Pj4xOC02KkYmNjMpXTtyZXR1cm4gUD4+PjB9O3ZhciBfPVsxNiwyNSwxMiwxMSwzLDIwLDQsMTUsMzEsMTcsOSw2LDI3LDE0LDEsMjIsMzAsMjQsOCwxOCwwLDUsMjksMjMsMTMsMTksMiwy''@;'; put 'put ''NiwxMCwyMSwyOCw3XTtYLnBlcm11dGU9ZnVuY3Rpb24oQil7Zm9yKHZhciB3PTAsUD0wO1A8Xy5sZW5ndGg7UCsrKXc8PD0xLHd8PUI+Pj5fW1BdJjE7cmV0dXJuIHc+Pj4wfSxYLnBhZFNwbGl0PWZ1bmN0aW9uKEIsdyxQKXtmb3IodmFyIEY9Qi50b1N0cmluZygyKTtGLmxlbmd0aDx3OylG''@;'; put 'put ''PSIwIitGO2Zvcih2YXIgTz1bXSx6PTA7ejx3O3orPVApTy5wdXNoKEYuc2xpY2Uoeix6K1ApKTtyZXR1cm4gTy5qb2luKCIgIil9fSwyNjA3Oih1ZSxYLHkpPT57dmFyIEk9eSg4NzY0KS5CdWZmZXIsXz15KDM1OTApLGc9eSg5Nzk5KSxCPXkoNzQyNiksUD17YmluYXJ5OiEwLGhleDohMCxi''@;'; put 'put ''YXNlNjQ6ITB9O1guRGlmZmllSGVsbG1hbkdyb3VwPVguY3JlYXRlRGlmZmllSGVsbG1hbkdyb3VwPVguZ2V0RGlmZmllSGVsbG1hbj1mdW5jdGlvbiB3KE8pe3ZhciB6PW5ldyBJKGdbT10ucHJpbWUsImhleCIpLE49bmV3IEkoZ1tPXS5nZW4sImhleCIpO3JldHVybiBuZXcgQih6LE4pfSxY''@;'; put 'put ''LmNyZWF0ZURpZmZpZUhlbGxtYW49WC5EaWZmaWVIZWxsbWFuPWZ1bmN0aW9uIEYoTyx6LE4sTCl7cmV0dXJuIEkuaXNCdWZmZXIoeil8fHZvaWQgMD09PVBbel0/RihPLCJiaW5hcnkiLHosTik6KHo9enx8ImJpbmFyeSIsTD1MfHwiYmluYXJ5IixOPU58fG5ldyBJKFsyXSksSS5pc0J1ZmZl''@;'; put 'put ''cihOKXx8KE49bmV3IEkoTixMKSksIm51bWJlciI9PXR5cGVvZiBPP25ldyBCKF8oTyxOKSxOLCEwKTooSS5pc0J1ZmZlcihPKXx8KE89bmV3IEkoTyx6KSksbmV3IEIoTyxOLCEwKSkpfX0sNzQyNjoodWUsWCx5KT0+e3ZhciBJPXkoODc2NCkuQnVmZmVyLF89eSgzNjIwKSxCPW5ldyh5KDMw''@;'; put 'put ''NDcpKSx3PW5ldyBfKDI0KSxQPW5ldyBfKDExKSxGPW5ldyBfKDEwKSxPPW5ldyBfKDMpLHo9bmV3IF8oNyksTj15KDM1OTApLEw9eSgxNzk4KTtmdW5jdGlvbiBLKEosbmUpe3JldHVybiBuZT1uZXx8InV0ZjgiLEkuaXNCdWZmZXIoSil8fChKPW5ldyBJKEosbmUpKSx0aGlzLl9wdWI9bmV3''@;'; put 'put ''IF8oSiksdGhpc31mdW5jdGlvbiBVKEosbmUpe3JldHVybiBuZT1uZXx8InV0ZjgiLEkuaXNCdWZmZXIoSil8fChKPW5ldyBJKEosbmUpKSx0aGlzLl9wcml2PW5ldyBfKEopLHRoaXN9dWUuZXhwb3J0cz1xO3ZhciBXPXt9O2Z1bmN0aW9uIHEoSixuZSxpZSl7dGhpcy5zZXRHZW5lcmF0b3Io''@;'; put 'put ''bmUpLHRoaXMuX19wcmltZT1uZXcgXyhKKSx0aGlzLl9wcmltZT1fLm1vbnQodGhpcy5fX3ByaW1lKSx0aGlzLl9wcmltZUxlbj1KLmxlbmd0aCx0aGlzLl9wdWI9dm9pZCAwLHRoaXMuX3ByaXY9dm9pZCAwLHRoaXMuX3ByaW1lQ29kZT12b2lkIDAsaWU/KHRoaXMuc2V0UHVibGljS2V5PUss''@;'; put 'put ''dGhpcy5zZXRQcml2YXRlS2V5PVUpOnRoaXMuX3ByaW1lQ29kZT04fWZ1bmN0aW9uIGVlKEosbmUpe3ZhciBpZT1uZXcgSShKLnRvQXJyYXkoKSk7cmV0dXJuIG5lP2llLnRvU3RyaW5nKG5lKTppZX1PYmplY3QuZGVmaW5lUHJvcGVydHkocS5wcm90b3R5cGUsInZlcmlmeUVycm9yIix7ZW51''@;'; put 'put ''bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4ibnVtYmVyIiE9dHlwZW9mIHRoaXMuX3ByaW1lQ29kZSYmKHRoaXMuX3ByaW1lQ29kZT1mdW5jdGlvbiBZKEosbmUpe3ZhciBpZT1uZS50b1N0cmluZygiaGV4IiksbGU9W2llLEoudG9TdHJpbmcoMTYpXS5qb2luKCJfIik7aWYobGUg''@;'; put 'put ''aW4gVylyZXR1cm4gV1tsZV07dmFyIF9lLG1lPTA7aWYoSi5pc0V2ZW4oKXx8IU4uc2ltcGxlU2lldmV8fCFOLmZlcm1hdFRlc3QoSil8fCFCLnRlc3QoSikpcmV0dXJuIG1lKz0xLFdbbGVdPW1lKz0iMDIiPT09aWV8fCIwNSI9PT1pZT84OjQsbWU7c3dpdGNoKEIudGVzdChKLnNocm4oMSkp''@;'; put 'put ''fHwobWUrPTIpLGllKXtjYXNlIjAyIjpKLm1vZCh3KS5jbXAoUCkmJihtZSs9OCk7YnJlYWs7Y2FzZSIwNSI6KF9lPUoubW9kKEYpKS5jbXAoTykmJl9lLmNtcCh6KSYmKG1lKz04KTticmVhaztkZWZhdWx0Om1lKz00fXJldHVybiBXW2xlXT1tZSxtZX0odGhpcy5fX3ByaW1lLHRoaXMuX19n''@;'; put 'put ''ZW4pKSx0aGlzLl9wcmltZUNvZGV9fSkscS5wcm90b3R5cGUuZ2VuZXJhdGVLZXlzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZ8fCh0aGlzLl9wcml2PW5ldyBfKEwodGhpcy5fcHJpbWVMZW4pKSksdGhpcy5fcHViPXRoaXMuX2dlbi50b1JlZCh0aGlzLl9wcmltZSkucmVkUG93KHRo''@;'; put 'put ''aXMuX3ByaXYpLmZyb21SZWQoKSx0aGlzLmdldFB1YmxpY0tleSgpfSxxLnByb3RvdHlwZS5jb21wdXRlU2VjcmV0PWZ1bmN0aW9uKEope3ZhciBuZT0oSj0oSj1uZXcgXyhKKSkudG9SZWQodGhpcy5fcHJpbWUpKS5yZWRQb3codGhpcy5fcHJpdikuZnJvbVJlZCgpLGllPW5ldyBJKG5lLnRv''@;'; put 'put ''QXJyYXkoKSksbGU9dGhpcy5nZXRQcmltZSgpO2lmKGllLmxlbmd0aDxsZS5sZW5ndGgpe3ZhciBtZT1uZXcgSShsZS5sZW5ndGgtaWUubGVuZ3RoKTttZS5maWxsKDApLGllPUkuY29uY2F0KFttZSxpZV0pfXJldHVybiBpZX0scS5wcm90b3R5cGUuZ2V0UHVibGljS2V5PWZ1bmN0aW9uKG5l''@;'; put 'put ''KXtyZXR1cm4gZWUodGhpcy5fcHViLG5lKX0scS5wcm90b3R5cGUuZ2V0UHJpdmF0ZUtleT1mdW5jdGlvbihuZSl7cmV0dXJuIGVlKHRoaXMuX3ByaXYsbmUpfSxxLnByb3RvdHlwZS5nZXRQcmltZT1mdW5jdGlvbihKKXtyZXR1cm4gZWUodGhpcy5fX3ByaW1lLEopfSxxLnByb3RvdHlwZS5n''@;'; put 'put ''ZXRHZW5lcmF0b3I9ZnVuY3Rpb24oSil7cmV0dXJuIGVlKHRoaXMuX2dlbixKKX0scS5wcm90b3R5cGUuc2V0R2VuZXJhdG9yPWZ1bmN0aW9uKEosbmUpe3JldHVybiBuZT1uZXx8InV0ZjgiLEkuaXNCdWZmZXIoSil8fChKPW5ldyBJKEosbmUpKSx0aGlzLl9fZ2VuPUosdGhpcy5fZ2VuPW5l''@;'; put 'put ''dyBfKEopLHRoaXN9fSwzNTkwOih1ZSxYLHkpPT57dmFyIEk9eSgxNzk4KTt1ZS5leHBvcnRzPWxlLGxlLnNpbXBsZVNpZXZlPW5lLGxlLmZlcm1hdFRlc3Q9aWU7dmFyIF89eSgzNjIwKSxnPW5ldyBfKDI0KSx3PW5ldyh5KDMwNDcpKSxQPW5ldyBfKDEpLEY9bmV3IF8oMiksTz1uZXcgXyg1''@;'; put 'put ''KSxMPShuZXcgXygxNiksbmV3IF8oOCksbmV3IF8oMTApKSxLPW5ldyBfKDMpLFc9KG5ldyBfKDcpLG5ldyBfKDExKSksWT1uZXcgXyg0KSxlZT0obmV3IF8oMTIpLG51bGwpO2Z1bmN0aW9uIG5lKG1lKXtmb3IodmFyIF9lPWZ1bmN0aW9uIEooKXtpZihudWxsIT09ZWUpcmV0dXJuIGVlO3Zh''@;'; put 'put ''ciBfZT1bXTtfZVswXT0yO2Zvcih2YXIgVGU9MSxTZT0zO1NlPDEwNDg1NzY7U2UrPTIpe2Zvcih2YXIgamU9TWF0aC5jZWlsKE1hdGguc3FydChTZSkpLFY9MDtWPFRlJiZfZVtWXTw9amUmJlNlJV9lW1ZdIT0wO1YrKyk7VGUhPT1WJiZfZVtWXTw9amV8fChfZVtUZSsrXT1TZSl9cmV0dXJu''@;'; put 'put ''IGVlPV9lLF9lfSgpLFRlPTA7VGU8X2UubGVuZ3RoO1RlKyspaWYoMD09PW1lLm1vZG4oX2VbVGVdKSlyZXR1cm4gMD09PW1lLmNtcG4oX2VbVGVdKTtyZXR1cm4hMH1mdW5jdGlvbiBpZShtZSl7dmFyIF9lPV8ubW9udChtZSk7cmV0dXJuIDA9PT1GLnRvUmVkKF9lKS5yZWRQb3cobWUuc3Vi''@;'; put 'put ''bigxKSkuZnJvbVJlZCgpLmNtcG4oMSl9ZnVuY3Rpb24gbGUobWUsX2Upe2lmKG1lPDE2KXJldHVybiBuZXcgXygyPT09X2V8fDU9PT1fZT9bMTQwLDEyM106WzE0MCwzOV0pO19lPW5ldyBfKF9lKTtmb3IodmFyIFRlLFNlOzspe2ZvcihUZT1uZXcgXyhJKE1hdGguY2VpbChtZS84KSkpO1Rl''@;'; put 'put ''LmJpdExlbmd0aCgpPm1lOylUZS5pc2hybigxKTtpZihUZS5pc0V2ZW4oKSYmVGUuaWFkZChQKSxUZS50ZXN0bigxKXx8VGUuaWFkZChGKSxfZS5jbXAoRikpe2lmKCFfZS5jbXAoTykpZm9yKDtUZS5tb2QoTCkuY21wKEspOylUZS5pYWRkKFkpfWVsc2UgZm9yKDtUZS5tb2QoZykuY21wKFcp''@;'; put 'put ''OylUZS5pYWRkKFkpO2lmKG5lKFNlPVRlLnNocm4oMSkpJiZuZShUZSkmJmllKFNlKSYmaWUoVGUpJiZ3LnRlc3QoU2UpJiZ3LnRlc3QoVGUpKXJldHVybiBUZX19fSwzNjIwOmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEksXyl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGcoVixwKXtpZigh''@;'; put 'put ''Vil0aHJvdyBuZXcgRXJyb3IocHx8IkFzc2VydGlvbiBmYWlsZWQiKX1mdW5jdGlvbiBCKFYscCl7Vi5zdXBlcl89cDt2YXIgYj1mdW5jdGlvbigpe307Yi5wcm90b3R5cGU9cC5wcm90b3R5cGUsVi5wcm90b3R5cGU9bmV3IGIsVi5wcm90b3R5cGUuY29uc3RydWN0b3I9Vn1mdW5jdGlvbiB3''@;'; put 'put ''KFYscCxiKXtpZih3LmlzQk4oVikpcmV0dXJuIFY7dGhpcy5uZWdhdGl2ZT0wLHRoaXMud29yZHM9bnVsbCx0aGlzLmxlbmd0aD0wLHRoaXMucmVkPW51bGwsbnVsbCE9PVYmJigoImxlIj09PXB8fCJiZSI9PT1wKSYmKGI9cCxwPTEwKSx0aGlzLl9pbml0KFZ8fDAscHx8MTAsYnx8ImJlIikp''@;'; put 'put ''fXZhciBQOyJvYmplY3QiPT10eXBlb2YgST9JLmV4cG9ydHM9dzpfLkJOPXcsdy5CTj13LHcud29yZFNpemU9MjY7dHJ5e1A9dHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiB3aW5kb3cuQnVmZmVyPCJ1Ij93aW5kb3cuQnVmZmVyOnkoNzc0OCkuQnVmZmVyfWNhdGNoe31mdW5jdGlvbiBGKFYs''@;'; put 'put ''cCl7dmFyIGI9Vi5jaGFyQ29kZUF0KHApO3JldHVybiBiPj02NSYmYjw9NzA/Yi01NTpiPj05NyYmYjw9MTAyP2ItODc6Yi00OCYxNX1mdW5jdGlvbiBPKFYscCxiKXt2YXIgeD1GKFYsYik7cmV0dXJuIGItMT49cCYmKHh8PUYoVixiLTEpPDw0KSx4fWZ1bmN0aW9uIHooVixwLGIseCl7Zm9y''@;'; put 'put ''KHZhciBDPTAsVD1NYXRoLm1pbihWLmxlbmd0aCxiKSxIPXA7SDxUO0grKyl7dmFyIGo9Vi5jaGFyQ29kZUF0KEgpLTQ4O0MqPXgsQys9aj49NDk/ai00OSsxMDpqPj0xNz9qLTE3KzEwOmp9cmV0dXJuIEN9dy5pc0JOPWZ1bmN0aW9uKHApe3JldHVybiBwIGluc3RhbmNlb2Ygd3x8bnVsbCE9''@;'; put 'put ''PXAmJiJvYmplY3QiPT10eXBlb2YgcCYmcC5jb25zdHJ1Y3Rvci53b3JkU2l6ZT09PXcud29yZFNpemUmJkFycmF5LmlzQXJyYXkocC53b3Jkcyl9LHcubWF4PWZ1bmN0aW9uKHAsYil7cmV0dXJuIHAuY21wKGIpPjA/cDpifSx3Lm1pbj1mdW5jdGlvbihwLGIpe3JldHVybiBwLmNtcChiKTww''@;'; put 'put ''P3A6Yn0sdy5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24ocCxiLHgpe2lmKCJudW1iZXIiPT10eXBlb2YgcClyZXR1cm4gdGhpcy5faW5pdE51bWJlcihwLGIseCk7aWYoIm9iamVjdCI9PXR5cGVvZiBwKXJldHVybiB0aGlzLl9pbml0QXJyYXkocCxiLHgpOyJoZXgiPT09YiYmKGI9MTYpLGco''@;'; put 'put ''Yj09PSgwfGIpJiZiPj0yJiZiPD0zNik7dmFyIEM9MDsiLSI9PT0ocD1wLnRvU3RyaW5nKCkucmVwbGFjZSgvXHMrL2csIiIpKVswXSYmKEMrKyx0aGlzLm5lZ2F0aXZlPTEpLEM8cC5sZW5ndGgmJigxNj09PWI/dGhpcy5fcGFyc2VIZXgocCxDLHgpOih0aGlzLl9wYXJzZUJhc2UocCxiLEMp''@;'; put 'put ''LCJsZSI9PT14JiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksYix4KSkpfSx3LnByb3RvdHlwZS5faW5pdE51bWJlcj1mdW5jdGlvbihwLGIseCl7cDwwJiYodGhpcy5uZWdhdGl2ZT0xLHA9LXApLHA8NjcxMDg4NjQ/KHRoaXMud29yZHM9WzY3MTA4ODYzJnBdLHRoaXMubGVuZ3Ro''@;'; put 'put ''PTEpOnA8NDUwMzU5OTYyNzM3MDQ5Nj8odGhpcy53b3Jkcz1bNjcxMDg4NjMmcCxwLzY3MTA4ODY0JjY3MTA4ODYzXSx0aGlzLmxlbmd0aD0yKTooZyhwPDkwMDcxOTkyNTQ3NDA5OTIpLHRoaXMud29yZHM9WzY3MTA4ODYzJnAscC82NzEwODg2NCY2NzEwODg2MywxXSx0aGlzLmxlbmd0aD0z''@;'; put 'put ''KSwibGUiPT09eCYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLGIseCl9LHcucHJvdG90eXBlLl9pbml0QXJyYXk9ZnVuY3Rpb24ocCxiLHgpe2lmKGcoIm51bWJlciI9PXR5cGVvZiBwLmxlbmd0aCkscC5sZW5ndGg8PTApcmV0dXJuIHRoaXMud29yZHM9WzBdLHRoaXMubGVuZ3Ro''@;'; put 'put ''PTEsdGhpczt0aGlzLmxlbmd0aD1NYXRoLmNlaWwocC5sZW5ndGgvMyksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgQz0wO0M8dGhpcy5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109MDt2YXIgVCxILGo9MDtpZigiYmUiPT09eClmb3IoQz1wLmxlbmd0aC0xLFQ9''@;'; put 'put ''MDtDPj0wO0MtPTMpdGhpcy53b3Jkc1tUXXw9KEg9cFtDXXxwW0MtMV08PDh8cFtDLTJdPDwxNik8PGomNjcxMDg4NjMsdGhpcy53b3Jkc1tUKzFdPUg+Pj4yNi1qJjY3MTA4ODYzLChqKz0yNCk+PTI2JiYoai09MjYsVCsrKTtlbHNlIGlmKCJsZSI9PT14KWZvcihDPTAsVD0wO0M8cC5sZW5n''@;'; put 'put ''dGg7Qys9Myl0aGlzLndvcmRzW1RdfD0oSD1wW0NdfHBbQysxXTw8OHxwW0MrMl08PDE2KTw8aiY2NzEwODg2Myx0aGlzLndvcmRzW1QrMV09SD4+PjI2LWomNjcxMDg4NjMsKGorPTI0KT49MjYmJihqLT0yNixUKyspO3JldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl9wYXJzZUhl''@;'; put 'put ''eD1mdW5jdGlvbihwLGIseCl7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKChwLmxlbmd0aC1iKS82KSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT0wO3ZhciBqLFQ9MCxIPTA7aWYoImJlIj09PXgpZm9y''@;'; put 'put ''KEM9cC5sZW5ndGgtMTtDPj1iO0MtPTIpaj1PKHAsYixDKTw8VCx0aGlzLndvcmRzW0hdfD02NzEwODg2MyZqLFQ+PTE4PyhULT0xOCx0aGlzLndvcmRzW0grPTFdfD1qPj4+MjYpOlQrPTg7ZWxzZSBmb3IoQz0ocC5sZW5ndGgtYiklMj09MD9iKzE6YjtDPHAubGVuZ3RoO0MrPTIpaj1PKHAs''@;'; put 'put ''YixDKTw8VCx0aGlzLndvcmRzW0hdfD02NzEwODg2MyZqLFQ+PTE4PyhULT0xOCx0aGlzLndvcmRzW0grPTFdfD1qPj4+MjYpOlQrPTg7dGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5fcGFyc2VCYXNlPWZ1bmN0aW9uKHAsYix4KXt0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xO2Zvcih2''@;'; put 'put ''YXIgQz0wLFQ9MTtUPD02NzEwODg2MztUKj1iKUMrKztDLS0sVD1UL2J8MDtmb3IodmFyIEg9cC5sZW5ndGgteCxqPUglQyxFPU1hdGgubWluKEgsSC1qKSt4LG09MCxBPXg7QTxFO0ErPUMpbT16KHAsQSxBK0MsYiksdGhpcy5pbXVsbihUKSx0aGlzLndvcmRzWzBdK208NjcxMDg4NjQ/dGhp''@;'; put 'put ''cy53b3Jkc1swXSs9bTp0aGlzLl9pYWRkbihtKTtpZigwIT09ail7dmFyIGFlPTE7Zm9yKG09eihwLEEscC5sZW5ndGgsYiksQT0wO0E8ajtBKyspYWUqPWI7dGhpcy5pbXVsbihhZSksdGhpcy53b3Jkc1swXSttPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPW06dGhpcy5faWFkZG4obSl9dGhp''@;'; put 'put ''cy5zdHJpcCgpfSx3LnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKHApe3Aud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIGI9MDtiPHRoaXMubGVuZ3RoO2IrKylwLndvcmRzW2JdPXRoaXMud29yZHNbYl07cC5sZW5ndGg9dGhpcy5sZW5ndGgscC5uZWdhdGl2ZT10aGlzLm5l''@;'; put 'put ''Z2F0aXZlLHAucmVkPXRoaXMucmVkfSx3LnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciBwPW5ldyB3KG51bGwpO3JldHVybiB0aGlzLmNvcHkocCkscH0sdy5wcm90b3R5cGUuX2V4cGFuZD1mdW5jdGlvbihwKXtmb3IoO3RoaXMubGVuZ3RoPHA7KXRoaXMud29yZHNbdGhpcy5sZW5n''@;'; put 'put ''dGgrK109MDtyZXR1cm4gdGhpc30sdy5wcm90b3R5cGUuc3RyaXA9ZnVuY3Rpb24oKXtmb3IoO3RoaXMubGVuZ3RoPjEmJjA9PT10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdOyl0aGlzLmxlbmd0aC0tO3JldHVybiB0aGlzLl9ub3JtU2lnbigpfSx3LnByb3RvdHlwZS5fbm9ybVNpZ249ZnVu''@;'; put 'put ''Y3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXSYmKHRoaXMubmVnYXRpdmU9MCksdGhpc30sdy5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybih0aGlzLnJlZD8iPEJOLVI6ICI6IjxCTjogIikrdGhpcy50b1N0cmluZygxNikrIj4ifTt2''@;'; put 'put ''YXIgTj1bIiIsIjAiLCIwMCIsIjAwMCIsIjAwMDAiLCIwMDAwMCIsIjAwMDAwMCIsIjAwMDAwMDAiLCIwMDAwMDAwMCIsIjAwMDAwMDAwMCIsIjAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAw''@;'; put 'put ''MDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIw''@;'; put 'put ''MDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiXSxMPVswLDAsMjUsMTYsMTIsMTEsMTAsOSw4LDgsNyw3LDcsNyw2LDYsNiw2LDYsNiw2LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVdLEs9''@;'; put 'put ''WzAsMCwzMzU1NDQzMiw0MzA0NjcyMSwxNjc3NzIxNiw0ODgyODEyNSw2MDQ2NjE3Niw0MDM1MzYwNywxNjc3NzIxNiw0MzA0NjcyMSwxZTcsMTk0ODcxNzEsMzU4MzE4MDgsNjI3NDg1MTcsNzUyOTUzNiwxMTM5MDYyNSwxNjc3NzIxNiwyNDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2''@;'; put 'put ''LDQwODQxMDEsNTE1MzYzMiw2NDM2MzQzLDc5NjI2MjQsOTc2NTYyNSwxMTg4MTM3NiwxNDM0ODkwNywxNzIxMDM2OCwyMDUxMTE0OSwyNDNlNSwyODYyOTE1MSwzMzU1NDQzMiwzOTEzNTM5Myw0NTQzNTQyNCw1MjUyMTg3NSw2MDQ2NjE3Nl07ZnVuY3Rpb24gVyhWLHAsYil7Yi5uZWdhdGl2''@;'; put 'put ''ZT1wLm5lZ2F0aXZlXlYubmVnYXRpdmU7dmFyIHg9Vi5sZW5ndGgrcC5sZW5ndGh8MDtiLmxlbmd0aD14LHg9eC0xfDA7dmFyIEM9MHxWLndvcmRzWzBdLFQ9MHxwLndvcmRzWzBdLEg9QypULEU9SC82NzEwODg2NHwwO2Iud29yZHNbMF09NjcxMDg4NjMmSDtmb3IodmFyIG09MTttPHg7bSsr''@;'; put 'put ''KXtmb3IodmFyIEE9RT4+PjI2LGFlPTY3MTA4ODYzJkUsdGU9TWF0aC5taW4obSxwLmxlbmd0aC0xKSxzZT1NYXRoLm1heCgwLG0tVi5sZW5ndGgrMSk7c2U8PXRlO3NlKyspQSs9KEg9KEM9MHxWLndvcmRzW20tc2V8MF0pKihUPTB8cC53b3Jkc1tzZV0pK2FlKS82NzEwODg2NHwwLGFlPTY3''@;'; put 'put ''MTA4ODYzJkg7Yi53b3Jkc1ttXT0wfGFlLEU9MHxBfXJldHVybiAwIT09RT9iLndvcmRzW21dPTB8RTpiLmxlbmd0aC0tLGIuc3RyaXAoKX13LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbihwLGIpe3ZhciB4O2lmKGI9MHxifHwxLDE2PT09KHA9cHx8MTApfHwiaGV4Ij09PXApe3g9IiI7''@;'; put 'put ''Zm9yKHZhciBDPTAsVD0wLEg9MDtIPHRoaXMubGVuZ3RoO0grKyl7dmFyIGo9dGhpcy53b3Jkc1tIXSxFPSgxNjc3NzIxNSYoajw8Q3xUKSkudG9TdHJpbmcoMTYpO1Q9aj4+PjI0LUMmMTY3NzcyMTUsKEMrPTIpPj0yNiYmKEMtPTI2LEgtLSkseD0wIT09VHx8SCE9PXRoaXMubGVuZ3RoLTE/''@;'; put 'put ''Tls2LUUubGVuZ3RoXStFK3g6RSt4fWZvcigwIT09VCYmKHg9VC50b1N0cmluZygxNikreCk7eC5sZW5ndGglYiE9MDspeD0iMCIreDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJih4PSItIit4KSx4fWlmKHA9PT0oMHxwKSYmcD49MiYmcDw9MzYpe3ZhciBtPUxbcF0sQT1LW3BdO3g9IiI7''@;'; put 'put ''dmFyIGFlPXRoaXMuY2xvbmUoKTtmb3IoYWUubmVnYXRpdmU9MDshYWUuaXNaZXJvKCk7KXt2YXIgdGU9YWUubW9kbihBKS50b1N0cmluZyhwKTt4PShhZT1hZS5pZGl2bihBKSkuaXNaZXJvKCk/dGUreDpOW20tdGUubGVuZ3RoXSt0ZSt4fWZvcih0aGlzLmlzWmVybygpJiYoeD0iMCIreCk7''@;'; put 'put ''eC5sZW5ndGglYiE9MDspeD0iMCIreDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJih4PSItIit4KSx4fWcoITEsIkJhc2Ugc2hvdWxkIGJlIGJldHdlZW4gMiBhbmQgMzYiKX0sdy5wcm90b3R5cGUudG9OdW1iZXI9ZnVuY3Rpb24oKXt2YXIgcD10aGlzLndvcmRzWzBdO3JldHVybiAyPT09''@;'; put 'put ''dGhpcy5sZW5ndGg/cCs9NjcxMDg4NjQqdGhpcy53b3Jkc1sxXTozPT09dGhpcy5sZW5ndGgmJjE9PT10aGlzLndvcmRzWzJdP3ArPTQ1MDM1OTk2MjczNzA0OTYrNjcxMDg4NjQqdGhpcy53b3Jkc1sxXTp0aGlzLmxlbmd0aD4yJiZnKCExLCJOdW1iZXIgY2FuIG9ubHkgc2FmZWx5IHN0b3Jl''@;'; put 'put ''IHVwIHRvIDUzIGJpdHMiKSwwIT09dGhpcy5uZWdhdGl2ZT8tcDpwfSx3LnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1N0cmluZygxNil9LHcucHJvdG90eXBlLnRvQnVmZmVyPWZ1bmN0aW9uKHAsYil7cmV0dXJuIGcodHlwZW9mIFA8InUiKSx0aGlzLnRvQXJy''@;'; put 'put ''YXlMaWtlKFAscCxiKX0sdy5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbihwLGIpe3JldHVybiB0aGlzLnRvQXJyYXlMaWtlKEFycmF5LHAsYil9LHcucHJvdG90eXBlLnRvQXJyYXlMaWtlPWZ1bmN0aW9uKHAsYix4KXt2YXIgQz10aGlzLmJ5dGVMZW5ndGgoKSxUPXh8fE1hdGgubWF4KDEs''@;'; put 'put ''Qyk7ZyhDPD1ULCJieXRlIGFycmF5IGxvbmdlciB0aGFuIGRlc2lyZWQgbGVuZ3RoIiksZyhUPjAsIlJlcXVlc3RlZCBhcnJheSBsZW5ndGggPD0gMCIpLHRoaXMuc3RyaXAoKTt2YXIgRSxtLEg9ImxlIj09PWIsaj1uZXcgcChUKSxBPXRoaXMuY2xvbmUoKTtpZihIKXtmb3IobT0wOyFBLmlz''@;'; put 'put ''WmVybygpO20rKylFPUEuYW5kbG4oMjU1KSxBLml1c2hybig4KSxqW21dPUU7Zm9yKDttPFQ7bSsrKWpbbV09MH1lbHNle2ZvcihtPTA7bTxULUM7bSsrKWpbbV09MDtmb3IobT0wOyFBLmlzWmVybygpO20rKylFPUEuYW5kbG4oMjU1KSxBLml1c2hybig4KSxqW1QtbS0xXT1FfXJldHVybiBq''@;'; put 'put ''fSx3LnByb3RvdHlwZS5fY291bnRCaXRzPU1hdGguY2x6MzI/ZnVuY3Rpb24ocCl7cmV0dXJuIDMyLU1hdGguY2x6MzIocCl9OmZ1bmN0aW9uKHApe3ZhciBiPXAseD0wO3JldHVybiBiPj00MDk2JiYoeCs9MTMsYj4+Pj0xMyksYj49NjQmJih4Kz03LGI+Pj49NyksYj49OCYmKHgrPTQsYj4+''@;'; put 'put ''Pj00KSxiPj0yJiYoeCs9MixiPj4+PTIpLHgrYn0sdy5wcm90b3R5cGUuX3plcm9CaXRzPWZ1bmN0aW9uKHApe2lmKDA9PT1wKXJldHVybiAyNjt2YXIgYj1wLHg9MDtyZXR1cm4gODE5MSZifHwoeCs9MTMsYj4+Pj0xMyksMTI3JmJ8fCh4Kz03LGI+Pj49NyksMTUmYnx8KHgrPTQsYj4+Pj00''@;'; put 'put ''KSwzJmJ8fCh4Kz0yLGI+Pj49MiksMSZifHx4KysseH0sdy5wcm90b3R5cGUuYml0TGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5fY291bnRCaXRzKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0pO3JldHVybiAyNioodGhpcy5sZW5ndGgtMSkrYn0sdy5wcm90b3R5cGUuemVyb0JpdHM9''@;'; put 'put ''ZnVuY3Rpb24oKXtpZih0aGlzLmlzWmVybygpKXJldHVybiAwO2Zvcih2YXIgcD0wLGI9MDtiPHRoaXMubGVuZ3RoO2IrKyl7dmFyIHg9dGhpcy5femVyb0JpdHModGhpcy53b3Jkc1tiXSk7aWYocCs9eCwyNiE9PXgpYnJlYWt9cmV0dXJuIHB9LHcucHJvdG90eXBlLmJ5dGVMZW5ndGg9ZnVu''@;'; put 'put ''Y3Rpb24oKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuYml0TGVuZ3RoKCkvOCl9LHcucHJvdG90eXBlLnRvVHdvcz1mdW5jdGlvbihwKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/dGhpcy5hYnMoKS5pbm90bihwKS5pYWRkbigxKTp0aGlzLmNsb25lKCl9LHcucHJvdG90eXBlLmZyb21Ud29z''@;'; put 'put ''PWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLnRlc3RuKHAtMSk/dGhpcy5ub3RuKHApLmlhZGRuKDEpLmluZWcoKTp0aGlzLmNsb25lKCl9LHcucHJvdG90eXBlLmlzTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlfSx3LnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5jbG9uZSgpLmluZWcoKX0sdy5wcm90b3R5cGUuaW5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzWmVybygpfHwodGhpcy5uZWdhdGl2ZV49MSksdGhpc30sdy5wcm90b3R5cGUuaXVvcj1mdW5jdGlvbihwKXtmb3IoO3RoaXMubGVuZ3RoPHAubGVuZ3RoOyl0aGlzLndvcmRz''@;'; put 'put ''W3RoaXMubGVuZ3RoKytdPTA7Zm9yKHZhciBiPTA7YjxwLmxlbmd0aDtiKyspdGhpcy53b3Jkc1tiXT10aGlzLndvcmRzW2JdfHAud29yZHNbYl07cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaW9yPWZ1bmN0aW9uKHApe3JldHVybiBnKCEodGhpcy5uZWdhdGl2ZXxwLm5lZ2F0''@;'; put 'put ''aXZlKSksdGhpcy5pdW9yKHApfSx3LnByb3RvdHlwZS5vcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLmlvcihwKTpwLmNsb25lKCkuaW9yKHRoaXMpfSx3LnByb3RvdHlwZS51b3I9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAu''@;'; put 'put ''bGVuZ3RoP3RoaXMuY2xvbmUoKS5pdW9yKHApOnAuY2xvbmUoKS5pdW9yKHRoaXMpfSx3LnByb3RvdHlwZS5pdWFuZD1mdW5jdGlvbihwKXt2YXIgYjtiPXRoaXMubGVuZ3RoPnAubGVuZ3RoP3A6dGhpcztmb3IodmFyIHg9MDt4PGIubGVuZ3RoO3grKyl0aGlzLndvcmRzW3hdPXRoaXMud29y''@;'; put 'put ''ZHNbeF0mcC53b3Jkc1t4XTtyZXR1cm4gdGhpcy5sZW5ndGg9Yi5sZW5ndGgsdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pYW5kPWZ1bmN0aW9uKHApe3JldHVybiBnKCEodGhpcy5uZWdhdGl2ZXxwLm5lZ2F0aXZlKSksdGhpcy5pdWFuZChwKX0sdy5wcm90b3R5cGUuYW5kPWZ1bmN0aW9u''@;'; put 'put ''KHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaWFuZChwKTpwLmNsb25lKCkuaWFuZCh0aGlzKX0sdy5wcm90b3R5cGUudWFuZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLml1YW5kKHApOnAuY2xvbmUoKS5p''@;'; put 'put ''dWFuZCh0aGlzKX0sdy5wcm90b3R5cGUuaXV4b3I9ZnVuY3Rpb24ocCl7dmFyIGIseDt0aGlzLmxlbmd0aD5wLmxlbmd0aD8oYj10aGlzLHg9cCk6KGI9cCx4PXRoaXMpO2Zvcih2YXIgQz0wO0M8eC5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109Yi53b3Jkc1tDXV54LndvcmRzW0NdO2lmKHRo''@;'; put 'put ''aXMhPT1iKWZvcig7QzxiLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT1iLndvcmRzW0NdO3JldHVybiB0aGlzLmxlbmd0aD1iLmxlbmd0aCx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLml4b3I9ZnVuY3Rpb24ocCl7cmV0dXJuIGcoISh0aGlzLm5lZ2F0aXZlfHAubmVnYXRpdmUpKSx0aGlz''@;'; put 'put ''Lml1eG9yKHApfSx3LnByb3RvdHlwZS54b3I9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5peG9yKHApOnAuY2xvbmUoKS5peG9yKHRoaXMpfSx3LnByb3RvdHlwZS51eG9yPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0''@;'; put 'put ''aD90aGlzLmNsb25lKCkuaXV4b3IocCk6cC5jbG9uZSgpLml1eG9yKHRoaXMpfSx3LnByb3RvdHlwZS5pbm90bj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIGI9MHxNYXRoLmNlaWwocC8yNikseD1wJTI2O3RoaXMuX2V4cGFuZChiKSx4PjAmJmItLTtmb3Io''@;'; put 'put ''dmFyIEM9MDtDPGI7QysrKXRoaXMud29yZHNbQ109NjcxMDg4NjMmfnRoaXMud29yZHNbQ107cmV0dXJuIHg+MCYmKHRoaXMud29yZHNbQ109fnRoaXMud29yZHNbQ10mNjcxMDg4NjM+PjI2LXgpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUubm90bj1mdW5jdGlvbihwKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5jbG9uZSgpLmlub3RuKHApfSx3LnByb3RvdHlwZS5zZXRuPWZ1bmN0aW9uKHAsYil7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApO3ZhciB4PXAvMjZ8MCxDPXAlMjY7cmV0dXJuIHRoaXMuX2V4cGFuZCh4KzEpLHRoaXMud29yZHNbeF09Yj90aGlzLndvcmRzW3hdfDE8PEM6dGhpcy53''@;'; put 'put ''b3Jkc1t4XSZ+KDE8PEMpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihwKXt2YXIgYix4LEM7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1wLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsYj10aGlzLmlzdWIocCksdGhpcy5uZWdhdGl2ZV49MSx0aGlz''@;'; put 'put ''Ll9ub3JtU2lnbigpO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09cC5uZWdhdGl2ZSlyZXR1cm4gcC5uZWdhdGl2ZT0wLGI9dGhpcy5pc3ViKHApLHAubmVnYXRpdmU9MSxiLl9ub3JtU2lnbigpO3RoaXMubGVuZ3RoPnAubGVuZ3RoPyh4PXRoaXMsQz1wKTooeD1wLEM9dGhpcyk7Zm9yKHZh''@;'; put 'put ''ciBUPTAsSD0wO0g8Qy5sZW5ndGg7SCsrKXRoaXMud29yZHNbSF09NjcxMDg4NjMmKGI9KDB8eC53b3Jkc1tIXSkrKDB8Qy53b3Jkc1tIXSkrVCksVD1iPj4+MjY7Zm9yKDswIT09VCYmSDx4Lmxlbmd0aDtIKyspdGhpcy53b3Jkc1tIXT02NzEwODg2MyYoYj0oMHx4LndvcmRzW0hdKStUKSxU''@;'; put 'put ''PWI+Pj4yNjtpZih0aGlzLmxlbmd0aD14Lmxlbmd0aCwwIT09VCl0aGlzLndvcmRzW3RoaXMubGVuZ3RoXT1ULHRoaXMubGVuZ3RoKys7ZWxzZSBpZih4IT09dGhpcylmb3IoO0g8eC5sZW5ndGg7SCsrKXRoaXMud29yZHNbSF09eC53b3Jkc1tIXTtyZXR1cm4gdGhpc30sdy5wcm90b3R5cGUu''@;'; put 'put ''YWRkPWZ1bmN0aW9uKHApe3ZhciBiO3JldHVybiAwIT09cC5uZWdhdGl2ZSYmMD09PXRoaXMubmVnYXRpdmU/KHAubmVnYXRpdmU9MCxiPXRoaXMuc3ViKHApLHAubmVnYXRpdmVePTEsYik6MD09PXAubmVnYXRpdmUmJjAhPT10aGlzLm5lZ2F0aXZlPyh0aGlzLm5lZ2F0aXZlPTAsYj1wLnN1''@;'; put 'put ''Yih0aGlzKSx0aGlzLm5lZ2F0aXZlPTEsYik6dGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhZGQocCk6cC5jbG9uZSgpLmlhZGQodGhpcyl9LHcucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24ocCl7aWYoMCE9PXAubmVnYXRpdmUpe3AubmVnYXRpdmU9MDt2YXIgYj10aGlzLmlh''@;'; put 'put ''ZGQocCk7cmV0dXJuIHAubmVnYXRpdmU9MSxiLl9ub3JtU2lnbigpfWlmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkKHApLHRoaXMubmVnYXRpdmU9MSx0aGlzLl9ub3JtU2lnbigpO3ZhciBDLFQseD10aGlzLmNtcChwKTtpZigwPT09eClyZXR1''@;'; put 'put ''cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMubGVuZ3RoPTEsdGhpcy53b3Jkc1swXT0wLHRoaXM7eD4wPyhDPXRoaXMsVD1wKTooQz1wLFQ9dGhpcyk7Zm9yKHZhciBIPTAsaj0wO2o8VC5sZW5ndGg7aisrKUg9KGI9KDB8Qy53b3Jkc1tqXSktKDB8VC53b3Jkc1tqXSkrSCk+PjI2LHRoaXMud29y''@;'; put 'put ''ZHNbal09NjcxMDg4NjMmYjtmb3IoOzAhPT1IJiZqPEMubGVuZ3RoO2orKylIPShiPSgwfEMud29yZHNbal0pK0gpPj4yNix0aGlzLndvcmRzW2pdPTY3MTA4ODYzJmI7aWYoMD09PUgmJmo8Qy5sZW5ndGgmJkMhPT10aGlzKWZvcig7ajxDLmxlbmd0aDtqKyspdGhpcy53b3Jkc1tqXT1DLndv''@;'; put 'put ''cmRzW2pdO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxqKSxDIT09dGhpcyYmKHRoaXMubmVnYXRpdmU9MSksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3ViKHApfTt2YXIgWT1mdW5jdGlvbihw''@;'; put 'put ''LGIseCl7dmFyIEUsbSxBLEM9cC53b3JkcyxUPWIud29yZHMsSD14LndvcmRzLGo9MCxhZT0wfENbMF0sdGU9ODE5MSZhZSxzZT1hZT4+PjEzLHdlPTB8Q1sxXSxVZT04MTkxJndlLEplPXdlPj4+MTMsb3Q9MHxDWzJdLHhlPTgxOTEmb3QsdmU9b3Q+Pj4xMyxYZT0wfENbM10semU9ODE5MSZY''@;'; put 'put ''ZSxEZT1YZT4+PjEzLEZlPTB8Q1s0XSxPZT04MTkxJkZlLEllPUZlPj4+MTMsVmU9MHxDWzVdLGtlPTgxOTEmVmUsQWU9VmU+Pj4xMyxfdD0wfENbNl0sbnQ9ODE5MSZfdCxRZT1fdD4+PjEzLHVuPTB8Q1s3XSx5dD04MTkxJnVuLE10PXVuPj4+MTMsRHQ9MHxDWzhdLGl0PTgxOTEmRHQsJGU9''@;'; put 'put ''RHQ+Pj4xMyx0dD0wfENbOV0sSGU9ODE5MSZ0dCx1dD10dD4+PjEzLHF0PTB8VFswXSxSdD04MTkxJnF0LFB0PXF0Pj4+MTMsY2k9MHxUWzFdLFF0PTgxOTEmY2ksc249Y2k+Pj4xMyxSaT0wfFRbMl0saG49ODE5MSZSaSxmdD1SaT4+PjEzLE9yPTB8VFszXSxXdD04MTkxJk9yLEF0PU9yPj4+''@;'; put 'put ''MTMsUm49MHxUWzRdLHN0PTgxOTEmUm4sVXQ9Um4+Pj4xMyxyaT0wfFRbNV0sV2U9ODE5MSZyaSxUdD1yaT4+PjEzLG5yPTB8VFs2XSxodD04MTkxJm5yLHh0PW5yPj4+MTMsam49MHxUWzddLHJuPTgxOTEmam4senQ9am4+Pj4xMyxoaT0wfFRbOF0sY249ODE5MSZoaSxmbj1oaT4+PjEzLElp''@;'; put 'put ''PTB8VFs5XSxYdD04MTkxJklpLGVuPUlpPj4+MTM7eC5uZWdhdGl2ZT1wLm5lZ2F0aXZlXmIubmVnYXRpdmUseC5sZW5ndGg9MTk7dmFyIHVhPShqKyhFPU1hdGguaW11bCh0ZSxSdCkpfDApKygoODE5MSYobT0obT1NYXRoLmltdWwodGUsUHQpKStNYXRoLmltdWwoc2UsUnQpfDApKTw8MTMp''@;'; put 'put ''fDA7aj0oKEE9TWF0aC5pbXVsKHNlLFB0KSkrKG0+Pj4xMyl8MCkrKHVhPj4+MjYpfDAsdWEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKFVlLFJ0KSxtPShtPU1hdGguaW11bChVZSxQdCkpK01hdGguaW11bChKZSxSdCl8MCxBPU1hdGguaW11bChKZSxQdCk7dmFyIEVpPShqKyhFPUUrTWF0aC5p''@;'; put 'put ''bXVsKHRlLFF0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsc24pfDApK01hdGguaW11bChzZSxRdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxzbil8MCkrKG0+Pj4xMyl8MCkrKEVpPj4+MjYpfDAsRWkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKHhlLFJ0KSxt''@;'; put 'put ''PShtPU1hdGguaW11bCh4ZSxQdCkpK01hdGguaW11bCh2ZSxSdCl8MCxBPU1hdGguaW11bCh2ZSxQdCksRT1FK01hdGguaW11bChVZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLHNuKXwwKStNYXRoLmltdWwoSmUsUXQpfDAsQT1BK01hdGguaW11bChKZSxzbil8MDt2YXIgdnI9KGorKEU9''@;'; put 'put ''RStNYXRoLmltdWwodGUsaG4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxmdCl8MCkrTWF0aC5pbXVsKHNlLGhuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLGZ0KXwwKSsobT4+PjEzKXwwKSsodnI+Pj4yNil8MCx2ciY9NjcxMDg4NjMsRT1NYXRoLmltdWwo''@;'; put 'put ''emUsUnQpLG09KG09TWF0aC5pbXVsKHplLFB0KSkrTWF0aC5pbXVsKERlLFJ0KXwwLEE9TWF0aC5pbXVsKERlLFB0KSxFPUUrTWF0aC5pbXVsKHhlLFF0KXwwLG09KG09bStNYXRoLmltdWwoeGUsc24pfDApK01hdGguaW11bCh2ZSxRdCl8MCxBPUErTWF0aC5pbXVsKHZlLHNuKXwwLEU9RStN''@;'; put 'put ''YXRoLmltdWwoVWUsaG4pfDAsbT0obT1tK01hdGguaW11bChVZSxmdCl8MCkrTWF0aC5pbXVsKEplLGhuKXwwLEE9QStNYXRoLmltdWwoSmUsZnQpfDA7dmFyIFduPShqKyhFPUUrTWF0aC5pbXVsKHRlLFd0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsQXQpfDApK01hdGgu''@;'; put 'put ''aW11bChzZSxXdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxBdCl8MCkrKG0+Pj4xMyl8MCkrKFduPj4+MjYpfDAsV24mPTY3MTA4ODYzLEU9TWF0aC5pbXVsKE9lLFJ0KSxtPShtPU1hdGguaW11bChPZSxQdCkpK01hdGguaW11bChJZSxSdCl8MCxBPU1hdGguaW11bChJZSxQ''@;'; put 'put ''dCksRT1FK01hdGguaW11bCh6ZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKHplLHNuKXwwKStNYXRoLmltdWwoRGUsUXQpfDAsQT1BK01hdGguaW11bChEZSxzbil8MCxFPUUrTWF0aC5pbXVsKHhlLGhuKXwwLG09KG09bStNYXRoLmltdWwoeGUsZnQpfDApK01hdGguaW11bCh2ZSxobil8MCxB''@;'; put 'put ''PUErTWF0aC5pbXVsKHZlLGZ0KXwwLEU9RStNYXRoLmltdWwoVWUsV3QpfDAsbT0obT1tK01hdGguaW11bChVZSxBdCl8MCkrTWF0aC5pbXVsKEplLFd0KXwwLEE9QStNYXRoLmltdWwoSmUsQXQpfDA7dmFyICRpPShqKyhFPUUrTWF0aC5pbXVsKHRlLHN0KXwwKXwwKSsoKDgxOTEmKG09KG09''@;'; put 'put ''bStNYXRoLmltdWwodGUsVXQpfDApK01hdGguaW11bChzZSxzdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxVdCl8MCkrKG0+Pj4xMyl8MCkrKCRpPj4+MjYpfDAsJGkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKGtlLFJ0KSxtPShtPU1hdGguaW11bChrZSxQdCkpK01hdGguaW11''@;'; put 'put ''bChBZSxSdCl8MCxBPU1hdGguaW11bChBZSxQdCksRT1FK01hdGguaW11bChPZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKE9lLHNuKXwwKStNYXRoLmltdWwoSWUsUXQpfDAsQT1BK01hdGguaW11bChJZSxzbil8MCxFPUUrTWF0aC5pbXVsKHplLGhuKXwwLG09KG09bStNYXRoLmltdWwoemUs''@;'; put 'put ''ZnQpfDApK01hdGguaW11bChEZSxobil8MCxBPUErTWF0aC5pbXVsKERlLGZ0KXwwLEU9RStNYXRoLmltdWwoeGUsV3QpfDAsbT0obT1tK01hdGguaW11bCh4ZSxBdCl8MCkrTWF0aC5pbXVsKHZlLFd0KXwwLEE9QStNYXRoLmltdWwodmUsQXQpfDAsRT1FK01hdGguaW11bChVZSxzdCl8MCxt''@;'; put 'put ''PShtPW0rTWF0aC5pbXVsKFVlLFV0KXwwKStNYXRoLmltdWwoSmUsc3QpfDAsQT1BK01hdGguaW11bChKZSxVdCl8MDt2YXIgZWk9KGorKEU9RStNYXRoLmltdWwodGUsV2UpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxUdCl8MCkrTWF0aC5pbXVsKHNlLFdlKXwwKSk8PDEz''@;'; put 'put ''KXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLFR0KXwwKSsobT4+PjEzKXwwKSsoZWk+Pj4yNil8MCxlaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwobnQsUnQpLG09KG09TWF0aC5pbXVsKG50LFB0KSkrTWF0aC5pbXVsKFFlLFJ0KXwwLEE9TWF0aC5pbXVsKFFlLFB0KSxFPUUrTWF0aC5pbXVsKGtl''@;'; put 'put ''LFF0KXwwLG09KG09bStNYXRoLmltdWwoa2Usc24pfDApK01hdGguaW11bChBZSxRdCl8MCxBPUErTWF0aC5pbXVsKEFlLHNuKXwwLEU9RStNYXRoLmltdWwoT2UsaG4pfDAsbT0obT1tK01hdGguaW11bChPZSxmdCl8MCkrTWF0aC5pbXVsKEllLGhuKXwwLEE9QStNYXRoLmltdWwoSWUsZnQp''@;'; put 'put ''fDAsRT1FK01hdGguaW11bCh6ZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKHplLEF0KXwwKStNYXRoLmltdWwoRGUsV3QpfDAsQT1BK01hdGguaW11bChEZSxBdCl8MCxFPUUrTWF0aC5pbXVsKHhlLHN0KXwwLG09KG09bStNYXRoLmltdWwoeGUsVXQpfDApK01hdGguaW11bCh2ZSxzdCl8MCxB''@;'; put 'put ''PUErTWF0aC5pbXVsKHZlLFV0KXwwLEU9RStNYXRoLmltdWwoVWUsV2UpfDAsbT0obT1tK01hdGguaW11bChVZSxUdCl8MCkrTWF0aC5pbXVsKEplLFdlKXwwLEE9QStNYXRoLmltdWwoSmUsVHQpfDA7dmFyIFFyPShqKyhFPUUrTWF0aC5pbXVsKHRlLGh0KXwwKXwwKSsoKDgxOTEmKG09KG09''@;'; put 'put ''bStNYXRoLmltdWwodGUseHQpfDApK01hdGguaW11bChzZSxodCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSx4dCl8MCkrKG0+Pj4xMyl8MCkrKFFyPj4+MjYpfDAsUXImPTY3MTA4ODYzLEU9TWF0aC5pbXVsKHl0LFJ0KSxtPShtPU1hdGguaW11bCh5dCxQdCkpK01hdGguaW11''@;'; put 'put ''bChNdCxSdCl8MCxBPU1hdGguaW11bChNdCxQdCksRT1FK01hdGguaW11bChudCxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKG50LHNuKXwwKStNYXRoLmltdWwoUWUsUXQpfDAsQT1BK01hdGguaW11bChRZSxzbil8MCxFPUUrTWF0aC5pbXVsKGtlLGhuKXwwLG09KG09bStNYXRoLmltdWwoa2Us''@;'; put 'put ''ZnQpfDApK01hdGguaW11bChBZSxobil8MCxBPUErTWF0aC5pbXVsKEFlLGZ0KXwwLEU9RStNYXRoLmltdWwoT2UsV3QpfDAsbT0obT1tK01hdGguaW11bChPZSxBdCl8MCkrTWF0aC5pbXVsKEllLFd0KXwwLEE9QStNYXRoLmltdWwoSWUsQXQpfDAsRT1FK01hdGguaW11bCh6ZSxzdCl8MCxt''@;'; put 'put ''PShtPW0rTWF0aC5pbXVsKHplLFV0KXwwKStNYXRoLmltdWwoRGUsc3QpfDAsQT1BK01hdGguaW11bChEZSxVdCl8MCxFPUUrTWF0aC5pbXVsKHhlLFdlKXwwLG09KG09bStNYXRoLmltdWwoeGUsVHQpfDApK01hdGguaW11bCh2ZSxXZSl8MCxBPUErTWF0aC5pbXVsKHZlLFR0KXwwLEU9RStN''@;'; put 'put ''YXRoLmltdWwoVWUsaHQpfDAsbT0obT1tK01hdGguaW11bChVZSx4dCl8MCkrTWF0aC5pbXVsKEplLGh0KXwwLEE9QStNYXRoLmltdWwoSmUseHQpfDA7dmFyIFZpPShqKyhFPUUrTWF0aC5pbXVsKHRlLHJuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsenQpfDApK01hdGgu''@;'; put 'put ''aW11bChzZSxybil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSx6dCl8MCkrKG0+Pj4xMyl8MCkrKFZpPj4+MjYpfDAsVmkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKGl0LFJ0KSxtPShtPU1hdGguaW11bChpdCxQdCkpK01hdGguaW11bCgkZSxSdCl8MCxBPU1hdGguaW11bCgkZSxQ''@;'; put 'put ''dCksRT1FK01hdGguaW11bCh5dCxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LHNuKXwwKStNYXRoLmltdWwoTXQsUXQpfDAsQT1BK01hdGguaW11bChNdCxzbil8MCxFPUUrTWF0aC5pbXVsKG50LGhuKXwwLG09KG09bStNYXRoLmltdWwobnQsZnQpfDApK01hdGguaW11bChRZSxobil8MCxB''@;'; put 'put ''PUErTWF0aC5pbXVsKFFlLGZ0KXwwLEU9RStNYXRoLmltdWwoa2UsV3QpfDAsbT0obT1tK01hdGguaW11bChrZSxBdCl8MCkrTWF0aC5pbXVsKEFlLFd0KXwwLEE9QStNYXRoLmltdWwoQWUsQXQpfDAsRT1FK01hdGguaW11bChPZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKE9lLFV0KXwwKStN''@;'; put 'put ''YXRoLmltdWwoSWUsc3QpfDAsQT1BK01hdGguaW11bChJZSxVdCl8MCxFPUUrTWF0aC5pbXVsKHplLFdlKXwwLG09KG09bStNYXRoLmltdWwoemUsVHQpfDApK01hdGguaW11bChEZSxXZSl8MCxBPUErTWF0aC5pbXVsKERlLFR0KXwwLEU9RStNYXRoLmltdWwoeGUsaHQpfDAsbT0obT1tK01h''@;'; put 'put ''dGguaW11bCh4ZSx4dCl8MCkrTWF0aC5pbXVsKHZlLGh0KXwwLEE9QStNYXRoLmltdWwodmUseHQpfDAsRT1FK01hdGguaW11bChVZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKFVlLHp0KXwwKStNYXRoLmltdWwoSmUscm4pfDAsQT1BK01hdGguaW11bChKZSx6dCl8MDt2YXIgTmk9KGorKEU9''@;'; put 'put ''RStNYXRoLmltdWwodGUsY24pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxmbil8MCkrTWF0aC5pbXVsKHNlLGNuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLGZuKXwwKSsobT4+PjEzKXwwKSsoTmk+Pj4yNil8MCxOaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwo''@;'; put 'put ''SGUsUnQpLG09KG09TWF0aC5pbXVsKEhlLFB0KSkrTWF0aC5pbXVsKHV0LFJ0KXwwLEE9TWF0aC5pbXVsKHV0LFB0KSxFPUUrTWF0aC5pbXVsKGl0LFF0KXwwLG09KG09bStNYXRoLmltdWwoaXQsc24pfDApK01hdGguaW11bCgkZSxRdCl8MCxBPUErTWF0aC5pbXVsKCRlLHNuKXwwLEU9RStN''@;'; put 'put ''YXRoLmltdWwoeXQsaG4pfDAsbT0obT1tK01hdGguaW11bCh5dCxmdCl8MCkrTWF0aC5pbXVsKE10LGhuKXwwLEE9QStNYXRoLmltdWwoTXQsZnQpfDAsRT1FK01hdGguaW11bChudCxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKG50LEF0KXwwKStNYXRoLmltdWwoUWUsV3QpfDAsQT1BK01hdGgu''@;'; put 'put ''aW11bChRZSxBdCl8MCxFPUUrTWF0aC5pbXVsKGtlLHN0KXwwLG09KG09bStNYXRoLmltdWwoa2UsVXQpfDApK01hdGguaW11bChBZSxzdCl8MCxBPUErTWF0aC5pbXVsKEFlLFV0KXwwLEU9RStNYXRoLmltdWwoT2UsV2UpfDAsbT0obT1tK01hdGguaW11bChPZSxUdCl8MCkrTWF0aC5pbXVs''@;'; put 'put ''KEllLFdlKXwwLEE9QStNYXRoLmltdWwoSWUsVHQpfDAsRT1FK01hdGguaW11bCh6ZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKHplLHh0KXwwKStNYXRoLmltdWwoRGUsaHQpfDAsQT1BK01hdGguaW11bChEZSx4dCl8MCxFPUUrTWF0aC5pbXVsKHhlLHJuKXwwLG09KG09bStNYXRoLmltdWwo''@;'; put 'put ''eGUsenQpfDApK01hdGguaW11bCh2ZSxybil8MCxBPUErTWF0aC5pbXVsKHZlLHp0KXwwLEU9RStNYXRoLmltdWwoVWUsY24pfDAsbT0obT1tK01hdGguaW11bChVZSxmbil8MCkrTWF0aC5pbXVsKEplLGNuKXwwLEE9QStNYXRoLmltdWwoSmUsZm4pfDA7dmFyIERhPShqKyhFPUUrTWF0aC5p''@;'; put 'put ''bXVsKHRlLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsZW4pfDApK01hdGguaW11bChzZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxlbil8MCkrKG0+Pj4xMyl8MCkrKERhPj4+MjYpfDAsRGEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLFF0KSxt''@;'; put 'put ''PShtPU1hdGguaW11bChIZSxzbikpK01hdGguaW11bCh1dCxRdCl8MCxBPU1hdGguaW11bCh1dCxzbiksRT1FK01hdGguaW11bChpdCxobil8MCxtPShtPW0rTWF0aC5pbXVsKGl0LGZ0KXwwKStNYXRoLmltdWwoJGUsaG4pfDAsQT1BK01hdGguaW11bCgkZSxmdCl8MCxFPUUrTWF0aC5pbXVs''@;'; put 'put ''KHl0LFd0KXwwLG09KG09bStNYXRoLmltdWwoeXQsQXQpfDApK01hdGguaW11bChNdCxXdCl8MCxBPUErTWF0aC5pbXVsKE10LEF0KXwwLEU9RStNYXRoLmltdWwobnQsc3QpfDAsbT0obT1tK01hdGguaW11bChudCxVdCl8MCkrTWF0aC5pbXVsKFFlLHN0KXwwLEE9QStNYXRoLmltdWwoUWUs''@;'; put 'put ''VXQpfDAsRT1FK01hdGguaW11bChrZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKGtlLFR0KXwwKStNYXRoLmltdWwoQWUsV2UpfDAsQT1BK01hdGguaW11bChBZSxUdCl8MCxFPUUrTWF0aC5pbXVsKE9lLGh0KXwwLG09KG09bStNYXRoLmltdWwoT2UseHQpfDApK01hdGguaW11bChJZSxodCl8''@;'; put 'put ''MCxBPUErTWF0aC5pbXVsKEllLHh0KXwwLEU9RStNYXRoLmltdWwoemUscm4pfDAsbT0obT1tK01hdGguaW11bCh6ZSx6dCl8MCkrTWF0aC5pbXVsKERlLHJuKXwwLEE9QStNYXRoLmltdWwoRGUsenQpfDAsRT1FK01hdGguaW11bCh4ZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKHhlLGZuKXww''@;'; put 'put ''KStNYXRoLmltdWwodmUsY24pfDAsQT1BK01hdGguaW11bCh2ZSxmbil8MDt2YXIgTHI9KGorKEU9RStNYXRoLmltdWwoVWUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChVZSxlbil8MCkrTWF0aC5pbXVsKEplLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKEpl''@;'; put 'put ''LGVuKXwwKSsobT4+PjEzKXwwKSsoTHI+Pj4yNil8MCxMciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsaG4pLG09KG09TWF0aC5pbXVsKEhlLGZ0KSkrTWF0aC5pbXVsKHV0LGhuKXwwLEE9TWF0aC5pbXVsKHV0LGZ0KSxFPUUrTWF0aC5pbXVsKGl0LFd0KXwwLG09KG09bStNYXRoLmltdWwo''@;'; put 'put ''aXQsQXQpfDApK01hdGguaW11bCgkZSxXdCl8MCxBPUErTWF0aC5pbXVsKCRlLEF0KXwwLEU9RStNYXRoLmltdWwoeXQsc3QpfDAsbT0obT1tK01hdGguaW11bCh5dCxVdCl8MCkrTWF0aC5pbXVsKE10LHN0KXwwLEE9QStNYXRoLmltdWwoTXQsVXQpfDAsRT1FK01hdGguaW11bChudCxXZSl8''@;'; put 'put ''MCxtPShtPW0rTWF0aC5pbXVsKG50LFR0KXwwKStNYXRoLmltdWwoUWUsV2UpfDAsQT1BK01hdGguaW11bChRZSxUdCl8MCxFPUUrTWF0aC5pbXVsKGtlLGh0KXwwLG09KG09bStNYXRoLmltdWwoa2UseHQpfDApK01hdGguaW11bChBZSxodCl8MCxBPUErTWF0aC5pbXVsKEFlLHh0KXwwLEU9''@;'; put 'put ''RStNYXRoLmltdWwoT2Uscm4pfDAsbT0obT1tK01hdGguaW11bChPZSx6dCl8MCkrTWF0aC5pbXVsKEllLHJuKXwwLEE9QStNYXRoLmltdWwoSWUsenQpfDAsRT1FK01hdGguaW11bCh6ZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKHplLGZuKXwwKStNYXRoLmltdWwoRGUsY24pfDAsQT1BK01h''@;'; put 'put ''dGguaW11bChEZSxmbil8MDt2YXIgV2k9KGorKEU9RStNYXRoLmltdWwoeGUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh4ZSxlbil8MCkrTWF0aC5pbXVsKHZlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHZlLGVuKXwwKSsobT4+PjEzKXwwKSsoV2k+Pj4y''@;'; put 'put ''Nil8MCxXaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsV3QpLG09KG09TWF0aC5pbXVsKEhlLEF0KSkrTWF0aC5pbXVsKHV0LFd0KXwwLEE9TWF0aC5pbXVsKHV0LEF0KSxFPUUrTWF0aC5pbXVsKGl0LHN0KXwwLG09KG09bStNYXRoLmltdWwoaXQsVXQpfDApK01hdGguaW11bCgkZSxzdCl8''@;'; put 'put ''MCxBPUErTWF0aC5pbXVsKCRlLFV0KXwwLEU9RStNYXRoLmltdWwoeXQsV2UpfDAsbT0obT1tK01hdGguaW11bCh5dCxUdCl8MCkrTWF0aC5pbXVsKE10LFdlKXwwLEE9QStNYXRoLmltdWwoTXQsVHQpfDAsRT1FK01hdGguaW11bChudCxodCl8MCxtPShtPW0rTWF0aC5pbXVsKG50LHh0KXww''@;'; put 'put ''KStNYXRoLmltdWwoUWUsaHQpfDAsQT1BK01hdGguaW11bChRZSx4dCl8MCxFPUUrTWF0aC5pbXVsKGtlLHJuKXwwLG09KG09bStNYXRoLmltdWwoa2UsenQpfDApK01hdGguaW11bChBZSxybil8MCxBPUErTWF0aC5pbXVsKEFlLHp0KXwwLEU9RStNYXRoLmltdWwoT2UsY24pfDAsbT0obT1t''@;'; put 'put ''K01hdGguaW11bChPZSxmbil8MCkrTWF0aC5pbXVsKEllLGNuKXwwLEE9QStNYXRoLmltdWwoSWUsZm4pfDA7dmFyIHBhPShqKyhFPUUrTWF0aC5pbXVsKHplLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoemUsZW4pfDApK01hdGguaW11bChEZSxYdCl8MCkpPDwxMyl8MDtq''@;'; put 'put ''PSgoQT1BK01hdGguaW11bChEZSxlbil8MCkrKG0+Pj4xMyl8MCkrKHBhPj4+MjYpfDAscGEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLHN0KSxtPShtPU1hdGguaW11bChIZSxVdCkpK01hdGguaW11bCh1dCxzdCl8MCxBPU1hdGguaW11bCh1dCxVdCksRT1FK01hdGguaW11bChpdCxXZSl8''@;'; put 'put ''MCxtPShtPW0rTWF0aC5pbXVsKGl0LFR0KXwwKStNYXRoLmltdWwoJGUsV2UpfDAsQT1BK01hdGguaW11bCgkZSxUdCl8MCxFPUUrTWF0aC5pbXVsKHl0LGh0KXwwLG09KG09bStNYXRoLmltdWwoeXQseHQpfDApK01hdGguaW11bChNdCxodCl8MCxBPUErTWF0aC5pbXVsKE10LHh0KXwwLEU9''@;'; put 'put ''RStNYXRoLmltdWwobnQscm4pfDAsbT0obT1tK01hdGguaW11bChudCx6dCl8MCkrTWF0aC5pbXVsKFFlLHJuKXwwLEE9QStNYXRoLmltdWwoUWUsenQpfDAsRT1FK01hdGguaW11bChrZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKGtlLGZuKXwwKStNYXRoLmltdWwoQWUsY24pfDAsQT1BK01h''@;'; put 'put ''dGguaW11bChBZSxmbil8MDt2YXIgUW49KGorKEU9RStNYXRoLmltdWwoT2UsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChPZSxlbil8MCkrTWF0aC5pbXVsKEllLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKEllLGVuKXwwKSsobT4+PjEzKXwwKSsoUW4+Pj4y''@;'; put 'put ''Nil8MCxRbiY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsV2UpLG09KG09TWF0aC5pbXVsKEhlLFR0KSkrTWF0aC5pbXVsKHV0LFdlKXwwLEE9TWF0aC5pbXVsKHV0LFR0KSxFPUUrTWF0aC5pbXVsKGl0LGh0KXwwLG09KG09bStNYXRoLmltdWwoaXQseHQpfDApK01hdGguaW11bCgkZSxodCl8''@;'; put 'put ''MCxBPUErTWF0aC5pbXVsKCRlLHh0KXwwLEU9RStNYXRoLmltdWwoeXQscm4pfDAsbT0obT1tK01hdGguaW11bCh5dCx6dCl8MCkrTWF0aC5pbXVsKE10LHJuKXwwLEE9QStNYXRoLmltdWwoTXQsenQpfDAsRT1FK01hdGguaW11bChudCxjbil8MCxtPShtPW0rTWF0aC5pbXVsKG50LGZuKXww''@;'; put 'put ''KStNYXRoLmltdWwoUWUsY24pfDAsQT1BK01hdGguaW11bChRZSxmbil8MDt2YXIgbGE9KGorKEU9RStNYXRoLmltdWwoa2UsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChrZSxlbil8MCkrTWF0aC5pbXVsKEFlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKEFl''@;'; put 'put ''LGVuKXwwKSsobT4+PjEzKXwwKSsobGE+Pj4yNil8MCxsYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsaHQpLG09KG09TWF0aC5pbXVsKEhlLHh0KSkrTWF0aC5pbXVsKHV0LGh0KXwwLEE9TWF0aC5pbXVsKHV0LHh0KSxFPUUrTWF0aC5pbXVsKGl0LHJuKXwwLG09KG09bStNYXRoLmltdWwo''@;'; put 'put ''aXQsenQpfDApK01hdGguaW11bCgkZSxybil8MCxBPUErTWF0aC5pbXVsKCRlLHp0KXwwLEU9RStNYXRoLmltdWwoeXQsY24pfDAsbT0obT1tK01hdGguaW11bCh5dCxmbil8MCkrTWF0aC5pbXVsKE10LGNuKXwwLEE9QStNYXRoLmltdWwoTXQsZm4pfDA7dmFyIHlhPShqKyhFPUUrTWF0aC5p''@;'; put 'put ''bXVsKG50LFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobnQsZW4pfDApK01hdGguaW11bChRZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChRZSxlbil8MCkrKG0+Pj4xMyl8MCkrKHlhPj4+MjYpfDAseWEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLHJuKSxt''@;'; put 'put ''PShtPU1hdGguaW11bChIZSx6dCkpK01hdGguaW11bCh1dCxybil8MCxBPU1hdGguaW11bCh1dCx6dCksRT1FK01hdGguaW11bChpdCxjbil8MCxtPShtPW0rTWF0aC5pbXVsKGl0LGZuKXwwKStNYXRoLmltdWwoJGUsY24pfDAsQT1BK01hdGguaW11bCgkZSxmbil8MDt2YXIgTGE9KGorKEU9''@;'; put 'put ''RStNYXRoLmltdWwoeXQsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh5dCxlbil8MCkrTWF0aC5pbXVsKE10LFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKE10LGVuKXwwKSsobT4+PjEzKXwwKSsoTGE+Pj4yNil8MCxMYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwo''@;'; put 'put ''SGUsY24pLG09KG09TWF0aC5pbXVsKEhlLGZuKSkrTWF0aC5pbXVsKHV0LGNuKXwwLEE9TWF0aC5pbXVsKHV0LGZuKTt2YXIgRmE9KGorKEU9RStNYXRoLmltdWwoaXQsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChpdCxlbil8MCkrTWF0aC5pbXVsKCRlLFh0KXwwKSk8PDEz''@;'; put 'put ''KXwwO2o9KChBPUErTWF0aC5pbXVsKCRlLGVuKXwwKSsobT4+PjEzKXwwKSsoRmE+Pj4yNil8MCxGYSY9NjcxMDg4NjM7dmFyIHRpPShqKyhFPU1hdGguaW11bChIZSxYdCkpfDApKygoODE5MSYobT0obT1NYXRoLmltdWwoSGUsZW4pKStNYXRoLmltdWwodXQsWHQpfDApKTw8MTMpfDA7cmV0''@;'; put 'put ''dXJuIGo9KChBPU1hdGguaW11bCh1dCxlbikpKyhtPj4+MTMpfDApKyh0aT4+PjI2KXwwLHRpJj02NzEwODg2MyxIWzBdPXVhLEhbMV09RWksSFsyXT12cixIWzNdPVduLEhbNF09JGksSFs1XT1laSxIWzZdPVFyLEhbN109VmksSFs4XT1OaSxIWzldPURhLEhbMTBdPUxyLEhbMTFdPVdpLEhb''@;'; put 'put ''MTJdPXBhLEhbMTNdPVFuLEhbMTRdPWxhLEhbMTVdPXlhLEhbMTZdPUxhLEhbMTddPUZhLEhbMThdPXRpLDAhPT1qJiYoSFsxOV09aix4Lmxlbmd0aCsrKSx4fTtmdW5jdGlvbiBlZShWLHAsYil7cmV0dXJuKG5ldyBKKS5tdWxwKFYscCxiKX1mdW5jdGlvbiBKKFYscCl7dGhpcy54PVYsdGhp''@;'; put 'put ''cy55PXB9TWF0aC5pbXVsfHwoWT1XKSx3LnByb3RvdHlwZS5tdWxUbz1mdW5jdGlvbihwLGIpe3ZhciB4LEM9dGhpcy5sZW5ndGgrcC5sZW5ndGg7cmV0dXJuIHg9MTA9PT10aGlzLmxlbmd0aCYmMTA9PT1wLmxlbmd0aD9ZKHRoaXMscCxiKTpDPDYzP1codGhpcyxwLGIpOkM8MTAyND9mdW5j''@;'; put 'put ''dGlvbiBxKFYscCxiKXtiLm5lZ2F0aXZlPXAubmVnYXRpdmVeVi5uZWdhdGl2ZSxiLmxlbmd0aD1WLmxlbmd0aCtwLmxlbmd0aDtmb3IodmFyIHg9MCxDPTAsVD0wO1Q8Yi5sZW5ndGgtMTtUKyspe3ZhciBIPUM7Qz0wO2Zvcih2YXIgaj02NzEwODg2MyZ4LEU9TWF0aC5taW4oVCxwLmxlbmd0''@;'; put 'put ''aC0xKSxtPU1hdGgubWF4KDAsVC1WLmxlbmd0aCsxKTttPD1FO20rKyl7dmFyIHNlPSgwfFYud29yZHNbVC1tXSkqKDB8cC53b3Jkc1ttXSksd2U9NjcxMDg4NjMmc2U7aj02NzEwODg2MyYod2U9d2UranwwKSxDKz0oSD0oSD1IKyhzZS82NzEwODg2NHwwKXwwKSsod2U+Pj4yNil8MCk+Pj4y''@;'; put 'put ''NixIJj02NzEwODg2M31iLndvcmRzW1RdPWoseD1ILEg9Q31yZXR1cm4gMCE9PXg/Yi53b3Jkc1tUXT14OmIubGVuZ3RoLS0sYi5zdHJpcCgpfSh0aGlzLHAsYik6ZWUodGhpcyxwLGIpLHh9LEoucHJvdG90eXBlLm1ha2VSQlQ9ZnVuY3Rpb24ocCl7Zm9yKHZhciBiPW5ldyBBcnJheShwKSx4''@;'; put 'put ''PXcucHJvdG90eXBlLl9jb3VudEJpdHMocCktMSxDPTA7QzxwO0MrKyliW0NdPXRoaXMucmV2QmluKEMseCxwKTtyZXR1cm4gYn0sSi5wcm90b3R5cGUucmV2QmluPWZ1bmN0aW9uKHAsYix4KXtpZigwPT09cHx8cD09PXgtMSlyZXR1cm4gcDtmb3IodmFyIEM9MCxUPTA7VDxiO1QrKylDfD0o''@;'; put 'put ''MSZwKTw8Yi1ULTEscD4+PTE7cmV0dXJuIEN9LEoucHJvdG90eXBlLnBlcm11dGU9ZnVuY3Rpb24ocCxiLHgsQyxULEgpe2Zvcih2YXIgaj0wO2o8SDtqKyspQ1tqXT1iW3Bbal1dLFRbal09eFtwW2pdXX0sSi5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKHAsYix4LEMsVCxIKXt0aGlz''@;'; put 'put ''LnBlcm11dGUoSCxwLGIseCxDLFQpO2Zvcih2YXIgaj0xO2o8VDtqPDw9MSlmb3IodmFyIEU9ajw8MSxtPU1hdGguY29zKDIqTWF0aC5QSS9FKSxBPU1hdGguc2luKDIqTWF0aC5QSS9FKSxhZT0wO2FlPFQ7YWUrPUUpZm9yKHZhciB0ZT1tLHNlPUEsd2U9MDt3ZTxqO3dlKyspe3ZhciBVZT14''@;'; put 'put ''W2FlK3dlXSxKZT1DW2FlK3dlXSxvdD14W2FlK3dlK2pdLHhlPUNbYWUrd2Ural0sdmU9dGUqb3Qtc2UqeGU7eGU9dGUqeGUrc2Uqb3QseFthZSt3ZV09VWUrKG90PXZlKSxDW2FlK3dlXT1KZSt4ZSx4W2FlK3dlK2pdPVVlLW90LENbYWUrd2Ural09SmUteGUsd2UhPT1FJiYodmU9bSp0ZS1B''@;'; put 'put ''KnNlLHNlPW0qc2UrQSp0ZSx0ZT12ZSl9fSxKLnByb3RvdHlwZS5ndWVzc0xlbjEzYj1mdW5jdGlvbihwLGIpe3ZhciB4PTF8TWF0aC5tYXgoYixwKSxDPTEmeCxUPTA7Zm9yKHg9eC8yfDA7eDt4Pj4+PTEpVCsrO3JldHVybiAxPDxUKzErQ30sSi5wcm90b3R5cGUuY29uanVnYXRlPWZ1bmN0''@;'; put 'put ''aW9uKHAsYix4KXtpZighKHg8PTEpKWZvcih2YXIgQz0wO0M8eC8yO0MrKyl7dmFyIFQ9cFtDXTtwW0NdPXBbeC1DLTFdLHBbeC1DLTFdPVQsVD1iW0NdLGJbQ109LWJbeC1DLTFdLGJbeC1DLTFdPS1UfX0sSi5wcm90b3R5cGUubm9ybWFsaXplMTNiPWZ1bmN0aW9uKHAsYil7Zm9yKHZhciB4''@;'; put 'put ''PTAsQz0wO0M8Yi8yO0MrKyl7dmFyIFQ9ODE5MipNYXRoLnJvdW5kKHBbMipDKzFdL2IpK01hdGgucm91bmQocFsyKkNdL2IpK3g7cFtDXT02NzEwODg2MyZULHg9VDw2NzEwODg2ND8wOlQvNjcxMDg4NjR8MH1yZXR1cm4gcH0sSi5wcm90b3R5cGUuY29udmVydDEzYj1mdW5jdGlvbihwLGIs''@;'; put 'put ''eCxDKXtmb3IodmFyIFQ9MCxIPTA7SDxiO0grKyl4WzIqSF09ODE5MSYoVCs9MHxwW0hdKSx4WzIqSCsxXT04MTkxJihUPj4+PTEzKSxUPj4+PTEzO2ZvcihIPTIqYjtIPEM7KytIKXhbSF09MDtnKDA9PT1UKSxnKCEoLTgxOTImVCkpfSxKLnByb3RvdHlwZS5zdHViPWZ1bmN0aW9uKHApe2Zv''@;'; put 'put ''cih2YXIgYj1uZXcgQXJyYXkocCkseD0wO3g8cDt4KyspYlt4XT0wO3JldHVybiBifSxKLnByb3RvdHlwZS5tdWxwPWZ1bmN0aW9uKHAsYix4KXt2YXIgQz0yKnRoaXMuZ3Vlc3NMZW4xM2IocC5sZW5ndGgsYi5sZW5ndGgpLFQ9dGhpcy5tYWtlUkJUKEMpLEg9dGhpcy5zdHViKEMpLGo9bmV3''@;'; put 'put ''IEFycmF5KEMpLEU9bmV3IEFycmF5KEMpLG09bmV3IEFycmF5KEMpLEE9bmV3IEFycmF5KEMpLGFlPW5ldyBBcnJheShDKSx0ZT1uZXcgQXJyYXkoQyksc2U9eC53b3JkcztzZS5sZW5ndGg9Qyx0aGlzLmNvbnZlcnQxM2IocC53b3JkcyxwLmxlbmd0aCxqLEMpLHRoaXMuY29udmVydDEzYihi''@;'; put 'put ''LndvcmRzLGIubGVuZ3RoLEEsQyksdGhpcy50cmFuc2Zvcm0oaixILEUsbSxDLFQpLHRoaXMudHJhbnNmb3JtKEEsSCxhZSx0ZSxDLFQpO2Zvcih2YXIgd2U9MDt3ZTxDO3dlKyspe3ZhciBVZT1FW3dlXSphZVt3ZV0tbVt3ZV0qdGVbd2VdO21bd2VdPUVbd2VdKnRlW3dlXSttW3dlXSphZVt3''@;'; put 'put ''ZV0sRVt3ZV09VWV9cmV0dXJuIHRoaXMuY29uanVnYXRlKEUsbSxDKSx0aGlzLnRyYW5zZm9ybShFLG0sc2UsSCxDLFQpLHRoaXMuY29uanVnYXRlKHNlLEgsQyksdGhpcy5ub3JtYWxpemUxM2Ioc2UsQykseC5uZWdhdGl2ZT1wLm5lZ2F0aXZlXmIubmVnYXRpdmUseC5sZW5ndGg9cC5sZW5n''@;'; put 'put ''dGgrYi5sZW5ndGgseC5zdHJpcCgpfSx3LnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24ocCl7dmFyIGI9bmV3IHcobnVsbCk7cmV0dXJuIGIud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK3AubGVuZ3RoKSx0aGlzLm11bFRvKHAsYil9LHcucHJvdG90eXBlLm11bGY9ZnVuY3Rpb24ocCl7dmFy''@;'; put 'put ''IGI9bmV3IHcobnVsbCk7cmV0dXJuIGIud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK3AubGVuZ3RoKSxlZSh0aGlzLHAsYil9LHcucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5tdWxUbyhwLHRoaXMpfSx3LnByb3RvdHlwZS5pbXVsbj1mdW5jdGlv''@;'; put 'put ''bihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCksZyhwPDY3MTA4ODY0KTtmb3IodmFyIGI9MCx4PTA7eDx0aGlzLmxlbmd0aDt4Kyspe3ZhciBDPSgwfHRoaXMud29yZHNbeF0pKnAsVD0oNjcxMDg4NjMmQykrKDY3MTA4ODYzJmIpO2I+Pj0yNixiKz1DLzY3MTA4ODY0fDAsYis9VD4+PjI2LHRo''@;'; put 'put ''aXMud29yZHNbeF09NjcxMDg4NjMmVH1yZXR1cm4gMCE9PWImJih0aGlzLndvcmRzW3hdPWIsdGhpcy5sZW5ndGgrKyksdGhpc30sdy5wcm90b3R5cGUubXVsbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltdWxuKHApfSx3LnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5tdWwodGhpcyl9LHcucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSl9LHcucHJvdG90eXBlLnBvdz1mdW5jdGlvbihwKXt2YXIgYj1mdW5jdGlvbiBVKFYpe2Zvcih2YXIgcD1uZXcgQXJyYXkoVi5iaXRMZW5ndGgoKSksYj0w''@;'; put 'put ''O2I8cC5sZW5ndGg7YisrKXt2YXIgQz1iJTI2O3BbYl09KFYud29yZHNbYi8yNnwwXSYxPDxDKT4+PkN9cmV0dXJuIHB9KHApO2lmKDA9PT1iLmxlbmd0aClyZXR1cm4gbmV3IHcoMSk7Zm9yKHZhciB4PXRoaXMsQz0wO0M8Yi5sZW5ndGgmJjA9PT1iW0NdO0MrKyx4PXguc3FyKCkpO2lmKCsr''@;'; put 'put ''QzxiLmxlbmd0aClmb3IodmFyIFQ9eC5zcXIoKTtDPGIubGVuZ3RoO0MrKyxUPVQuc3FyKCkpMCE9PWJbQ10mJih4PXgubXVsKFQpKTtyZXR1cm4geH0sdy5wcm90b3R5cGUuaXVzaGxuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKTt2YXIgVCxiPXAlMjYseD0ocC1i''@;'; put 'put ''KS8yNixDPTY3MTA4ODYzPj4+MjYtYjw8MjYtYjtpZigwIT09Yil7dmFyIEg9MDtmb3IoVD0wO1Q8dGhpcy5sZW5ndGg7VCsrKXt2YXIgaj10aGlzLndvcmRzW1RdJkM7dGhpcy53b3Jkc1tUXT0oMHx0aGlzLndvcmRzW1RdKS1qPDxifEgsSD1qPj4+MjYtYn1IJiYodGhpcy53b3Jkc1tUXT1I''@;'; put 'put ''LHRoaXMubGVuZ3RoKyspfWlmKDAhPT14KXtmb3IoVD10aGlzLmxlbmd0aC0xO1Q+PTA7VC0tKXRoaXMud29yZHNbVCt4XT10aGlzLndvcmRzW1RdO2ZvcihUPTA7VDx4O1QrKyl0aGlzLndvcmRzW1RdPTA7dGhpcy5sZW5ndGgrPXh9cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUu''@;'; put 'put ''aXNobG49ZnVuY3Rpb24ocCl7cmV0dXJuIGcoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaGxuKHApfSx3LnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24ocCxiLHgpe3ZhciBDO2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKSxDPWI/KGItYiUyNikvMjY6MDt2YXIgVD1wJTI2LEg9TWF0''@;'; put 'put ''aC5taW4oKHAtVCkvMjYsdGhpcy5sZW5ndGgpLGo9NjcxMDg4NjNeNjcxMDg4NjM+Pj5UPDxULEU9eDtpZihDLT1ILEM9TWF0aC5tYXgoMCxDKSxFKXtmb3IodmFyIG09MDttPEg7bSsrKUUud29yZHNbbV09dGhpcy53b3Jkc1ttXTtFLmxlbmd0aD1IfWlmKDAhPT1IKWlmKHRoaXMubGVuZ3Ro''@;'; put 'put ''PkgpZm9yKHRoaXMubGVuZ3RoLT1ILG09MDttPHRoaXMubGVuZ3RoO20rKyl0aGlzLndvcmRzW21dPXRoaXMud29yZHNbbStIXTtlbHNlIHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xO3ZhciBBPTA7Zm9yKG09dGhpcy5sZW5ndGgtMTttPj0wJiYoMCE9PUF8fG0+PUMpO20tLSl7dmFy''@;'; put 'put ''IGFlPTB8dGhpcy53b3Jkc1ttXTt0aGlzLndvcmRzW21dPUE8PDI2LVR8YWU+Pj5ULEE9YWUman1yZXR1cm4gRSYmMCE9PUEmJihFLndvcmRzW0UubGVuZ3RoKytdPUEpLDA9PT10aGlzLmxlbmd0aCYmKHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xKSx0aGlzLnN0cmlwKCl9LHcucHJv''@;'; put 'put ''dG90eXBlLmlzaHJuPWZ1bmN0aW9uKHAsYix4KXtyZXR1cm4gZygwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNocm4ocCxiLHgpfSx3LnByb3RvdHlwZS5zaGxuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXNobG4ocCl9LHcucHJvdG90eXBlLnVzaGxuPWZ1bmN0aW9uKHAp''@;'; put 'put ''e3JldHVybiB0aGlzLmNsb25lKCkuaXVzaGxuKHApfSx3LnByb3RvdHlwZS5zaHJuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXNocm4ocCl9LHcucHJvdG90eXBlLnVzaHJuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaHJuKHApfSx3LnByb3RvdHlwZS50''@;'; put 'put ''ZXN0bj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIGI9cCUyNix4PShwLWIpLzI2O3JldHVybiEodGhpcy5sZW5ndGg8PXh8fCEodGhpcy53b3Jkc1t4XSYxPDxiKSl9LHcucHJvdG90eXBlLmltYXNrbj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2Yg''@;'; put 'put ''cCYmcD49MCk7dmFyIGI9cCUyNix4PShwLWIpLzI2O3JldHVybiBnKDA9PT10aGlzLm5lZ2F0aXZlLCJpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJlcnMiKSx0aGlzLmxlbmd0aDw9eD90aGlzOigwIT09YiYmeCsrLHRoaXMubGVuZ3RoPU1hdGgubWluKHgsdGhpcy5sZW5n''@;'; put 'put ''dGgpLDAhPT1iJiYodGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSY9NjcxMDg4NjNeNjcxMDg4NjM+Pj5iPDxiKSx0aGlzLnN0cmlwKCkpfSx3LnByb3RvdHlwZS5tYXNrbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltYXNrbihwKX0sdy5wcm90b3R5cGUuaWFkZG49ZnVuY3Rp''@;'; put 'put ''b24ocCl7cmV0dXJuIGcoIm51bWJlciI9PXR5cGVvZiBwKSxnKHA8NjcxMDg4NjQpLHA8MD90aGlzLmlzdWJuKC1wKTowIT09dGhpcy5uZWdhdGl2ZT8xPT09dGhpcy5sZW5ndGgmJigwfHRoaXMud29yZHNbMF0pPHA/KHRoaXMud29yZHNbMF09cC0oMHx0aGlzLndvcmRzWzBdKSx0aGlzLm5l''@;'; put 'put ''Z2F0aXZlPTAsdGhpcyk6KHRoaXMubmVnYXRpdmU9MCx0aGlzLmlzdWJuKHApLHRoaXMubmVnYXRpdmU9MSx0aGlzKTp0aGlzLl9pYWRkbihwKX0sdy5wcm90b3R5cGUuX2lhZGRuPWZ1bmN0aW9uKHApe3RoaXMud29yZHNbMF0rPXA7Zm9yKHZhciBiPTA7Yjx0aGlzLmxlbmd0aCYmdGhpcy53''@;'; put 'put ''b3Jkc1tiXT49NjcxMDg4NjQ7YisrKXRoaXMud29yZHNbYl0tPTY3MTA4ODY0LGI9PT10aGlzLmxlbmd0aC0xP3RoaXMud29yZHNbYisxXT0xOnRoaXMud29yZHNbYisxXSsrO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxiKzEpLHRoaXN9LHcucHJvdG90eXBlLmlz''@;'; put 'put ''dWJuPWZ1bmN0aW9uKHApe2lmKGcoIm51bWJlciI9PXR5cGVvZiBwKSxnKHA8NjcxMDg4NjQpLHA8MClyZXR1cm4gdGhpcy5pYWRkbigtcCk7aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGRuKHApLHRoaXMubmVnYXRpdmU9MSx0aGlzO2lmKHRo''@;'; put 'put ''aXMud29yZHNbMF0tPXAsMT09PXRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzWzBdPDApdGhpcy53b3Jkc1swXT0tdGhpcy53b3Jkc1swXSx0aGlzLm5lZ2F0aXZlPTE7ZWxzZSBmb3IodmFyIGI9MDtiPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW2JdPDA7YisrKXRoaXMud29yZHNbYl0rPTY3MTA4''@;'; put 'put ''ODY0LHRoaXMud29yZHNbYisxXS09MTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5hZGRuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaWFkZG4ocCl9LHcucHJvdG90eXBlLnN1Ym49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3VibihwKX0sdy5w''@;'; put 'put ''cm90b3R5cGUuaWFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpc30sdy5wcm90b3R5cGUuYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWJzKCl9LHcucHJvdG90eXBlLl9pc2hsbnN1Ym11bD1mdW5jdGlvbihwLGIseCl7dmFyIFQ7dGhpcy5fZXhw''@;'; put 'put ''YW5kKHAubGVuZ3RoK3gpO3ZhciBILGo9MDtmb3IoVD0wO1Q8cC5sZW5ndGg7VCsrKXtIPSgwfHRoaXMud29yZHNbVCt4XSkrajt2YXIgRT0oMHxwLndvcmRzW1RdKSpiO2o9KChILT02NzEwODg2MyZFKT4+MjYpLShFLzY3MTA4ODY0fDApLHRoaXMud29yZHNbVCt4XT02NzEwODg2MyZIfWZv''@;'; put 'put ''cig7VDx0aGlzLmxlbmd0aC14O1QrKylqPShIPSgwfHRoaXMud29yZHNbVCt4XSkraik+PjI2LHRoaXMud29yZHNbVCt4XT02NzEwODg2MyZIO2lmKDA9PT1qKXJldHVybiB0aGlzLnN0cmlwKCk7Zm9yKGcoLTE9PT1qKSxqPTAsVD0wO1Q8dGhpcy5sZW5ndGg7VCsrKWo9KEg9LSgwfHRoaXMu''@;'; put 'put ''d29yZHNbVF0pK2opPj4yNix0aGlzLndvcmRzW1RdPTY3MTA4ODYzJkg7cmV0dXJuIHRoaXMubmVnYXRpdmU9MSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl93b3JkRGl2PWZ1bmN0aW9uKHAsYil7dmFyIHgsQz10aGlzLmNsb25lKCksVD1wLEg9MHxULndvcmRzW1QubGVuZ3RoLTFdOzAh''@;'; put 'put ''PSh4PTI2LXRoaXMuX2NvdW50Qml0cyhIKSkmJihUPVQudXNobG4oeCksQy5pdXNobG4oeCksSD0wfFQud29yZHNbVC5sZW5ndGgtMV0pO3ZhciBtLEU9Qy5sZW5ndGgtVC5sZW5ndGg7aWYoIm1vZCIhPT1iKXsobT1uZXcgdyhudWxsKSkubGVuZ3RoPUUrMSxtLndvcmRzPW5ldyBBcnJheSht''@;'; put 'put ''Lmxlbmd0aCk7Zm9yKHZhciBBPTA7QTxtLmxlbmd0aDtBKyspbS53b3Jkc1tBXT0wfXZhciBhZT1DLmNsb25lKCkuX2lzaGxuc3VibXVsKFQsMSxFKTswPT09YWUubmVnYXRpdmUmJihDPWFlLG0mJihtLndvcmRzW0VdPTEpKTtmb3IodmFyIHRlPUUtMTt0ZT49MDt0ZS0tKXt2YXIgc2U9Njcx''@;'; put 'put ''MDg4NjQqKDB8Qy53b3Jkc1tULmxlbmd0aCt0ZV0pKygwfEMud29yZHNbVC5sZW5ndGgrdGUtMV0pO2ZvcihzZT1NYXRoLm1pbihzZS9IfDAsNjcxMDg4NjMpLEMuX2lzaGxuc3VibXVsKFQsc2UsdGUpOzAhPT1DLm5lZ2F0aXZlOylzZS0tLEMubmVnYXRpdmU9MCxDLl9pc2hsbnN1Ym11bChU''@;'; put 'put ''LDEsdGUpLEMuaXNaZXJvKCl8fChDLm5lZ2F0aXZlXj0xKTttJiYobS53b3Jkc1t0ZV09c2UpfXJldHVybiBtJiZtLnN0cmlwKCksQy5zdHJpcCgpLCJkaXYiIT09YiYmMCE9PXgmJkMuaXVzaHJuKHgpLHtkaXY6bXx8bnVsbCxtb2Q6Q319LHcucHJvdG90eXBlLmRpdm1vZD1mdW5jdGlvbihw''@;'; put 'put ''LGIseCl7cmV0dXJuIGcoIXAuaXNaZXJvKCkpLHRoaXMuaXNaZXJvKCk/e2RpdjpuZXcgdygwKSxtb2Q6bmV3IHcoMCl9OjAhPT10aGlzLm5lZ2F0aXZlJiYwPT09cC5uZWdhdGl2ZT8oSD10aGlzLm5lZygpLmRpdm1vZChwLGIpLCJtb2QiIT09YiYmKEM9SC5kaXYubmVnKCkpLCJkaXYiIT09''@;'; put 'put ''YiYmKFQ9SC5tb2QubmVnKCkseCYmMCE9PVQubmVnYXRpdmUmJlQuaWFkZChwKSkse2RpdjpDLG1vZDpUfSk6MD09PXRoaXMubmVnYXRpdmUmJjAhPT1wLm5lZ2F0aXZlPyhIPXRoaXMuZGl2bW9kKHAubmVnKCksYiksIm1vZCIhPT1iJiYoQz1ILmRpdi5uZWcoKSkse2RpdjpDLG1vZDpILm1v''@;'; put 'put ''ZH0pOnRoaXMubmVnYXRpdmUmcC5uZWdhdGl2ZT8oSD10aGlzLm5lZygpLmRpdm1vZChwLm5lZygpLGIpLCJkaXYiIT09YiYmKFQ9SC5tb2QubmVnKCkseCYmMCE9PVQubmVnYXRpdmUmJlQuaXN1YihwKSkse2RpdjpILmRpdixtb2Q6VH0pOnAubGVuZ3RoPnRoaXMubGVuZ3RofHx0aGlzLmNt''@;'; put 'put ''cChwKTwwP3tkaXY6bmV3IHcoMCksbW9kOnRoaXN9OjE9PT1wLmxlbmd0aD8iZGl2Ij09PWI/e2Rpdjp0aGlzLmRpdm4ocC53b3Jkc1swXSksbW9kOm51bGx9OiJtb2QiPT09Yj97ZGl2Om51bGwsbW9kOm5ldyB3KHRoaXMubW9kbihwLndvcmRzWzBdKSl9OntkaXY6dGhpcy5kaXZuKHAud29y''@;'; put 'put ''ZHNbMF0pLG1vZDpuZXcgdyh0aGlzLm1vZG4ocC53b3Jkc1swXSkpfTp0aGlzLl93b3JkRGl2KHAsYik7dmFyIEMsVCxIfSx3LnByb3RvdHlwZS5kaXY9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuZGl2bW9kKHAsImRpdiIsITEpLmRpdn0sdy5wcm90b3R5cGUubW9kPWZ1bmN0aW9uKHApe3Jl''@;'; put 'put ''dHVybiB0aGlzLmRpdm1vZChwLCJtb2QiLCExKS5tb2R9LHcucHJvdG90eXBlLnVtb2Q9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuZGl2bW9kKHAsIm1vZCIsITApLm1vZH0sdy5wcm90b3R5cGUuZGl2Um91bmQ9ZnVuY3Rpb24ocCl7dmFyIGI9dGhpcy5kaXZtb2QocCk7aWYoYi5tb2QuaXNa''@;'; put 'put ''ZXJvKCkpcmV0dXJuIGIuZGl2O3ZhciB4PTAhPT1iLmRpdi5uZWdhdGl2ZT9iLm1vZC5pc3ViKHApOmIubW9kLEM9cC51c2hybigxKSxUPXAuYW5kbG4oMSksSD14LmNtcChDKTtyZXR1cm4gSDwwfHwxPT09VCYmMD09PUg/Yi5kaXY6MCE9PWIuZGl2Lm5lZ2F0aXZlP2IuZGl2LmlzdWJuKDEp''@;'; put 'put ''OmIuZGl2LmlhZGRuKDEpfSx3LnByb3RvdHlwZS5tb2RuPWZ1bmN0aW9uKHApe2cocDw9NjcxMDg4NjMpO2Zvcih2YXIgYj0oMTw8MjYpJXAseD0wLEM9dGhpcy5sZW5ndGgtMTtDPj0wO0MtLSl4PShiKngrKDB8dGhpcy53b3Jkc1tDXSkpJXA7cmV0dXJuIHh9LHcucHJvdG90eXBlLmlkaXZu''@;'; put 'put ''PWZ1bmN0aW9uKHApe2cocDw9NjcxMDg4NjMpO2Zvcih2YXIgYj0wLHg9dGhpcy5sZW5ndGgtMTt4Pj0wO3gtLSl7dmFyIEM9KDB8dGhpcy53b3Jkc1t4XSkrNjcxMDg4NjQqYjt0aGlzLndvcmRzW3hdPUMvcHwwLGI9QyVwfXJldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmRpdm49''@;'; put 'put ''ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pZGl2bihwKX0sdy5wcm90b3R5cGUuZWdjZD1mdW5jdGlvbihwKXtnKDA9PT1wLm5lZ2F0aXZlKSxnKCFwLmlzWmVybygpKTt2YXIgYj10aGlzLHg9cC5jbG9uZSgpO2I9MCE9PWIubmVnYXRpdmU/Yi51bW9kKHApOmIuY2xvbmUoKTtm''@;'; put 'put ''b3IodmFyIEM9bmV3IHcoMSksVD1uZXcgdygwKSxIPW5ldyB3KDApLGo9bmV3IHcoMSksRT0wO2IuaXNFdmVuKCkmJnguaXNFdmVuKCk7KWIuaXVzaHJuKDEpLHguaXVzaHJuKDEpLCsrRTtmb3IodmFyIG09eC5jbG9uZSgpLEE9Yi5jbG9uZSgpOyFiLmlzWmVybygpOyl7Zm9yKHZhciBhZT0w''@;'; put 'put ''LHRlPTE7IShiLndvcmRzWzBdJnRlKSYmYWU8MjY7KythZSx0ZTw8PTEpO2lmKGFlPjApZm9yKGIuaXVzaHJuKGFlKTthZS0tID4wOykoQy5pc09kZCgpfHxULmlzT2RkKCkpJiYoQy5pYWRkKG0pLFQuaXN1YihBKSksQy5pdXNocm4oMSksVC5pdXNocm4oMSk7Zm9yKHZhciBzZT0wLHdlPTE7''@;'; put 'put ''ISh4LndvcmRzWzBdJndlKSYmc2U8MjY7KytzZSx3ZTw8PTEpO2lmKHNlPjApZm9yKHguaXVzaHJuKHNlKTtzZS0tID4wOykoSC5pc09kZCgpfHxqLmlzT2RkKCkpJiYoSC5pYWRkKG0pLGouaXN1YihBKSksSC5pdXNocm4oMSksai5pdXNocm4oMSk7Yi5jbXAoeCk+PTA/KGIuaXN1Yih4KSxD''@;'; put 'put ''LmlzdWIoSCksVC5pc3ViKGopKTooeC5pc3ViKGIpLEguaXN1YihDKSxqLmlzdWIoVCkpfXJldHVybnthOkgsYjpqLGdjZDp4Lml1c2hsbihFKX19LHcucHJvdG90eXBlLl9pbnZtcD1mdW5jdGlvbihwKXtnKDA9PT1wLm5lZ2F0aXZlKSxnKCFwLmlzWmVybygpKTt2YXIgYWUsYj10aGlzLHg9''@;'; put 'put ''cC5jbG9uZSgpO2I9MCE9PWIubmVnYXRpdmU/Yi51bW9kKHApOmIuY2xvbmUoKTtmb3IodmFyIEM9bmV3IHcoMSksVD1uZXcgdygwKSxIPXguY2xvbmUoKTtiLmNtcG4oMSk+MCYmeC5jbXBuKDEpPjA7KXtmb3IodmFyIGo9MCxFPTE7IShiLndvcmRzWzBdJkUpJiZqPDI2OysraixFPDw9MSk7''@;'; put 'put ''aWYoaj4wKWZvcihiLml1c2hybihqKTtqLS0gPjA7KUMuaXNPZGQoKSYmQy5pYWRkKEgpLEMuaXVzaHJuKDEpO2Zvcih2YXIgbT0wLEE9MTshKHgud29yZHNbMF0mQSkmJm08MjY7KyttLEE8PD0xKTtpZihtPjApZm9yKHguaXVzaHJuKG0pO20tLSA+MDspVC5pc09kZCgpJiZULmlhZGQoSCks''@;'; put 'put ''VC5pdXNocm4oMSk7Yi5jbXAoeCk+PTA/KGIuaXN1Yih4KSxDLmlzdWIoVCkpOih4LmlzdWIoYiksVC5pc3ViKEMpKX1yZXR1cm4oYWU9MD09PWIuY21wbigxKT9DOlQpLmNtcG4oMCk8MCYmYWUuaWFkZChwKSxhZX0sdy5wcm90b3R5cGUuZ2NkPWZ1bmN0aW9uKHApe2lmKHRoaXMuaXNaZXJv''@;'; put 'put ''KCkpcmV0dXJuIHAuYWJzKCk7aWYocC5pc1plcm8oKSlyZXR1cm4gdGhpcy5hYnMoKTt2YXIgYj10aGlzLmNsb25lKCkseD1wLmNsb25lKCk7Yi5uZWdhdGl2ZT0wLHgubmVnYXRpdmU9MDtmb3IodmFyIEM9MDtiLmlzRXZlbigpJiZ4LmlzRXZlbigpO0MrKyliLml1c2hybigxKSx4Lml1c2hy''@;'; put 'put ''bigxKTtmb3IoOzspe2Zvcig7Yi5pc0V2ZW4oKTspYi5pdXNocm4oMSk7Zm9yKDt4LmlzRXZlbigpOyl4Lml1c2hybigxKTt2YXIgVD1iLmNtcCh4KTtpZihUPDApe3ZhciBIPWI7Yj14LHg9SH1lbHNlIGlmKDA9PT1UfHwwPT09eC5jbXBuKDEpKWJyZWFrO2IuaXN1Yih4KX1yZXR1cm4geC5p''@;'; put 'put ''dXNobG4oQyl9LHcucHJvdG90eXBlLmludm09ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuZWdjZChwKS5hLnVtb2QocCl9LHcucHJvdG90eXBlLmlzRXZlbj1mdW5jdGlvbigpe3JldHVybiEoMSZ0aGlzLndvcmRzWzBdKX0sdy5wcm90b3R5cGUuaXNPZGQ9ZnVuY3Rpb24oKXtyZXR1cm4hKDEm''@;'; put 'put ''fnRoaXMud29yZHNbMF0pfSx3LnByb3RvdHlwZS5hbmRsbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy53b3Jkc1swXSZwfSx3LnByb3RvdHlwZS5iaW5jbj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCk7dmFyIGI9cCUyNix4PShwLWIpLzI2LEM9MTw8YjtpZih0aGlzLmxlbmd0''@;'; put 'put ''aDw9eClyZXR1cm4gdGhpcy5fZXhwYW5kKHgrMSksdGhpcy53b3Jkc1t4XXw9Qyx0aGlzO2Zvcih2YXIgVD1DLEg9eDswIT09VCYmSDx0aGlzLmxlbmd0aDtIKyspe3ZhciBqPTB8dGhpcy53b3Jkc1tIXTtUPShqKz1UKT4+PjI2LHRoaXMud29yZHNbSF09aiY9NjcxMDg4NjN9cmV0dXJuIDAh''@;'; put 'put ''PT1UJiYodGhpcy53b3Jkc1tIXT1ULHRoaXMubGVuZ3RoKyspLHRoaXN9LHcucHJvdG90eXBlLmlzWmVybz1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdfSx3LnByb3RvdHlwZS5jbXBuPWZ1bmN0aW9uKHApe3ZhciB4LGI9cDwwO2lmKDAhPT10''@;'; put 'put ''aGlzLm5lZ2F0aXZlJiYhYilyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmYilyZXR1cm4gMTtpZih0aGlzLnN0cmlwKCksdGhpcy5sZW5ndGg+MSl4PTE7ZWxzZXtiJiYocD0tcCksZyhwPD02NzEwODg2MywiTnVtYmVyIGlzIHRvbyBiaWciKTt2YXIgQz0wfHRoaXMud29yZHNbMF07''@;'; put 'put ''eD1DPT09cD8wOkM8cD8tMToxfXJldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC14Onh9LHcucHJvdG90eXBlLmNtcD1mdW5jdGlvbihwKXtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PXAubmVnYXRpdmUpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1wLm5lZ2F0aXZlKXJl''@;'; put 'put ''dHVybiAxO3ZhciBiPXRoaXMudWNtcChwKTtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtYjpifSx3LnByb3RvdHlwZS51Y21wPWZ1bmN0aW9uKHApe2lmKHRoaXMubGVuZ3RoPnAubGVuZ3RoKXJldHVybiAxO2lmKHRoaXMubGVuZ3RoPHAubGVuZ3RoKXJldHVybi0xO2Zvcih2YXIgYj0w''@;'; put 'put ''LHg9dGhpcy5sZW5ndGgtMTt4Pj0wO3gtLSl7dmFyIEM9MHx0aGlzLndvcmRzW3hdLFQ9MHxwLndvcmRzW3hdO2lmKEMhPT1UKXtDPFQ/Yj0tMTpDPlQmJihiPTEpO2JyZWFrfX1yZXR1cm4gYn0sdy5wcm90b3R5cGUuZ3RuPWZ1bmN0aW9uKHApe3JldHVybiAxPT09dGhpcy5jbXBuKHApfSx3''@;'; put 'put ''LnByb3RvdHlwZS5ndD1mdW5jdGlvbihwKXtyZXR1cm4gMT09PXRoaXMuY21wKHApfSx3LnByb3RvdHlwZS5ndGVuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNtcG4ocCk+PTB9LHcucHJvdG90eXBlLmd0ZT1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbXAocCk+PTB9LHcucHJvdG90eXBl''@;'; put 'put ''Lmx0bj1mdW5jdGlvbihwKXtyZXR1cm4tMT09PXRoaXMuY21wbihwKX0sdy5wcm90b3R5cGUubHQ9ZnVuY3Rpb24ocCl7cmV0dXJuLTE9PT10aGlzLmNtcChwKX0sdy5wcm90b3R5cGUubHRlbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbXBuKHApPD0wfSx3LnByb3RvdHlwZS5sdGU9ZnVu''@;'; put 'put ''Y3Rpb24ocCl7cmV0dXJuIHRoaXMuY21wKHApPD0wfSx3LnByb3RvdHlwZS5lcW49ZnVuY3Rpb24ocCl7cmV0dXJuIDA9PT10aGlzLmNtcG4ocCl9LHcucHJvdG90eXBlLmVxPWZ1bmN0aW9uKHApe3JldHVybiAwPT09dGhpcy5jbXAocCl9LHcucmVkPWZ1bmN0aW9uKHApe3JldHVybiBuZXcg''@;'; put 'put ''U2UocCl9LHcucHJvdG90eXBlLnRvUmVkPWZ1bmN0aW9uKHApe3JldHVybiBnKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLGcoMD09PXRoaXMubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIikscC5jb252ZXJ0VG8odGhp''@;'; put 'put ''cykuX2ZvcmNlUmVkKHApfSx3LnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlzKX0sdy5wcm90b3R5cGUuX2Zv''@;'; put 'put ''cmNlUmVkPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLnJlZD1wLHRoaXN9LHcucHJvdG90eXBlLmZvcmNlUmVkPWZ1bmN0aW9uKHApe3JldHVybiBnKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMuX2ZvcmNlUmVkKHApfSx3LnByb3RvdHlw''@;'; put 'put ''ZS5yZWRBZGQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5hZGQodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkSUFkZCB3b3JrcyBv''@;'; put 'put ''bmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pYWRkKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZFN1Yj1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnN1Yih0aGlzLHApfSx3LnByb3RvdHlw''@;'; put 'put ''ZS5yZWRJU3ViPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlzdWIodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkU2hsPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRTaGwgd29ya3Mg''@;'; put 'put ''b25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc2hsKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZE11bD1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMscCksdGhpcy5y''@;'; put 'put ''ZWQubXVsKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLHApLHRoaXMucmVkLmltdWwodGhpcyxwKX0sdy5wcm90b3R5cGUu''@;'; put 'put ''cmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXIodGhpcyl9LHcucHJvdG90eXBlLnJlZElTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJl''@;'; put 'put ''ZCwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBu''@;'; put 'put ''dW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0sdy5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMp''@;'; put 'put ''LHRoaXMucmVkLmludm0odGhpcyl9LHcucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQubmVnKHRoaXMpfSx3LnByb3RvdHlwZS5y''@;'; put 'put ''ZWRQb3c9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQmJiFwLnJlZCwicmVkUG93KG5vcm1hbE51bSkiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3codGhpcyxwKX07dmFyIG5lPXtrMjU2Om51bGwscDIyNDpudWxsLHAxOTI6bnVsbCxwMjU1MTk6bnVsbH07ZnVu''@;'; put 'put ''Y3Rpb24gaWUoVixwKXt0aGlzLm5hbWU9Vix0aGlzLnA9bmV3IHcocCwxNiksdGhpcy5uPXRoaXMucC5iaXRMZW5ndGgoKSx0aGlzLms9bmV3IHcoMSkuaXVzaGxuKHRoaXMubikuaXN1Yih0aGlzLnApLHRoaXMudG1wPXRoaXMuX3RtcCgpfWZ1bmN0aW9uIGxlKCl7aWUuY2FsbCh0aGlzLCJr''@;'; put 'put ''MjU2IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYiKX1mdW5jdGlvbiBtZSgpe2llLmNhbGwodGhpcywicDIyNCIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAw''@;'; put 'put ''MDAwIDAwMDAwMDAxIil9ZnVuY3Rpb24gX2UoKXtpZS5jYWxsKHRoaXMsInAxOTIiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZiIpfWZ1bmN0aW9uIFRlKCl7aWUuY2FsbCh0aGlzLCIyNTUxOSIsIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZm''@;'; put 'put ''ZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiKX1mdW5jdGlvbiBTZShWKXtpZigic3RyaW5nIj09dHlwZW9mIFYpe3ZhciBwPXcuX3ByaW1lKFYpO3RoaXMubT1wLnAsdGhpcy5wcmltZT1wfWVsc2UgZyhWLmd0bigxKSwibW9kdWx1cyBtdXN0IGJlIGdyZWF0''@;'; put 'put ''ZXIgdGhhbiAxIiksdGhpcy5tPVYsdGhpcy5wcmltZT1udWxsfWZ1bmN0aW9uIGplKFYpe1NlLmNhbGwodGhpcyxWKSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0aGlzLnNoaWZ0JTI2IT0wJiYodGhpcy5zaGlmdCs9MjYtdGhpcy5zaGlmdCUyNiksdGhpcy5yPW5ldyB3KDEpLml1''@;'; put 'put ''c2hsbih0aGlzLnNoaWZ0KSx0aGlzLnIyPXRoaXMuaW1vZCh0aGlzLnIuc3FyKCkpLHRoaXMucmludj10aGlzLnIuX2ludm1wKHRoaXMubSksdGhpcy5taW52PXRoaXMucmludi5tdWwodGhpcy5yKS5pc3VibigxKS5kaXYodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5taW52LnVtb2QodGhpcy5y''@;'; put 'put ''KSx0aGlzLm1pbnY9dGhpcy5yLnN1Yih0aGlzLm1pbnYpfWllLnByb3RvdHlwZS5fdG1wPWZ1bmN0aW9uKCl7dmFyIHA9bmV3IHcobnVsbCk7cmV0dXJuIHAud29yZHM9bmV3IEFycmF5KE1hdGguY2VpbCh0aGlzLm4vMTMpKSxwfSxpZS5wcm90b3R5cGUuaXJlZHVjZT1mdW5jdGlvbihwKXt2''@;'; put 'put ''YXIgeCxiPXA7ZG97dGhpcy5zcGxpdChiLHRoaXMudG1wKSx4PShiPShiPXRoaXMuaW11bEsoYikpLmlhZGQodGhpcy50bXApKS5iaXRMZW5ndGgoKX13aGlsZSh4PnRoaXMubik7dmFyIEM9eDx0aGlzLm4/LTE6Yi51Y21wKHRoaXMucCk7cmV0dXJuIDA9PT1DPyhiLndvcmRzWzBdPTAsYi5s''@;'; put 'put ''ZW5ndGg9MSk6Qz4wP2IuaXN1Yih0aGlzLnApOnZvaWQgMCE9PWIuc3RyaXA/Yi5zdHJpcCgpOmIuX3N0cmlwKCksYn0saWUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKHAsYil7cC5pdXNocm4odGhpcy5uLDAsYil9LGllLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihwKXtyZXR1cm4gcC5p''@;'; put 'put ''bXVsKHRoaXMuayl9LEIobGUsaWUpLGxlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihwLGIpe2Zvcih2YXIgeD00MTk0MzAzLEM9TWF0aC5taW4ocC5sZW5ndGgsOSksVD0wO1Q8QztUKyspYi53b3Jkc1tUXT1wLndvcmRzW1RdO2lmKGIubGVuZ3RoPUMscC5sZW5ndGg8PTkpcmV0dXJuIHAu''@;'; put 'put ''d29yZHNbMF09MCx2b2lkKHAubGVuZ3RoPTEpO3ZhciBIPXAud29yZHNbOV07Zm9yKGIud29yZHNbYi5sZW5ndGgrK109SCZ4LFQ9MTA7VDxwLmxlbmd0aDtUKyspe3ZhciBqPTB8cC53b3Jkc1tUXTtwLndvcmRzW1QtMTBdPShqJngpPDw0fEg+Pj4yMixIPWp9cC53b3Jkc1tULTEwXT1IPj4+''@;'; put 'put ''PTIyLHAubGVuZ3RoLT0wPT09SCYmcC5sZW5ndGg+MTA/MTA6OX0sbGUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHApe3Aud29yZHNbcC5sZW5ndGhdPTAscC53b3Jkc1twLmxlbmd0aCsxXT0wLHAubGVuZ3RoKz0yO2Zvcih2YXIgYj0wLHg9MDt4PHAubGVuZ3RoO3grKyl7dmFyIEM9MHxw''@;'; put 'put ''LndvcmRzW3hdO3Aud29yZHNbeF09NjcxMDg4NjMmKGIrPTk3NypDKSxiPTY0KkMrKGIvNjcxMDg4NjR8MCl9cmV0dXJuIDA9PT1wLndvcmRzW3AubGVuZ3RoLTFdJiYocC5sZW5ndGgtLSwwPT09cC53b3Jkc1twLmxlbmd0aC0xXSYmcC5sZW5ndGgtLSkscH0sQihtZSxpZSksQihfZSxpZSks''@;'; put 'put ''QihUZSxpZSksVGUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHApe2Zvcih2YXIgYj0wLHg9MDt4PHAubGVuZ3RoO3grKyl7dmFyIEM9MTkqKDB8cC53b3Jkc1t4XSkrYixUPTY3MTA4ODYzJkM7Qz4+Pj0yNixwLndvcmRzW3hdPVQsYj1DfXJldHVybiAwIT09YiYmKHAud29yZHNbcC5sZW5n''@;'; put 'put ''dGgrK109YikscH0sdy5fcHJpbWU9ZnVuY3Rpb24ocCl7aWYobmVbcF0pcmV0dXJuIG5lW3BdO3ZhciBiO2lmKCJrMjU2Ij09PXApYj1uZXcgbGU7ZWxzZSBpZigicDIyNCI9PT1wKWI9bmV3IG1lO2Vsc2UgaWYoInAxOTIiPT09cCliPW5ldyBfZTtlbHNle2lmKCJwMjU1MTkiIT09cCl0aHJv''@;'; put 'put ''dyBuZXcgRXJyb3IoIlVua25vd24gcHJpbWUgIitwKTtiPW5ldyBUZX1yZXR1cm4gbmVbcF09YixifSxTZS5wcm90b3R5cGUuX3ZlcmlmeTE9ZnVuY3Rpb24ocCl7ZygwPT09cC5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxnKHAucmVkLCJyZWQgd29ya3Mgb25s''@;'; put 'put ''eSB3aXRoIHJlZCBudW1iZXJzIil9LFNlLnByb3RvdHlwZS5fdmVyaWZ5Mj1mdW5jdGlvbihwLGIpe2coIShwLm5lZ2F0aXZlfGIubmVnYXRpdmUpLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLGcocC5yZWQmJnAucmVkPT09Yi5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVk''@;'; put 'put ''IG51bWJlcnMiKX0sU2UucHJvdG90eXBlLmltb2Q9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMucHJpbWU/dGhpcy5wcmltZS5pcmVkdWNlKHApLl9mb3JjZVJlZCh0aGlzKTpwLnVtb2QodGhpcy5tKS5fZm9yY2VSZWQodGhpcyl9LFNlLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24ocCl7cmV0dXJu''@;'; put 'put ''IHAuaXNaZXJvKCk/cC5jbG9uZSgpOnRoaXMubS5zdWIocCkuX2ZvcmNlUmVkKHRoaXMpfSxTZS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHAsYil7dGhpcy5fdmVyaWZ5MihwLGIpO3ZhciB4PXAuYWRkKGIpO3JldHVybiB4LmNtcCh0aGlzLm0pPj0wJiZ4LmlzdWIodGhpcy5tKSx4Ll9mb3Jj''@;'; put 'put ''ZVJlZCh0aGlzKX0sU2UucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24ocCxiKXt0aGlzLl92ZXJpZnkyKHAsYik7dmFyIHg9cC5pYWRkKGIpO3JldHVybiB4LmNtcCh0aGlzLm0pPj0wJiZ4LmlzdWIodGhpcy5tKSx4fSxTZS5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKHAsYil7dGhpcy5fdmVyaWZ5''@;'; put 'put ''MihwLGIpO3ZhciB4PXAuc3ViKGIpO3JldHVybiB4LmNtcG4oMCk8MCYmeC5pYWRkKHRoaXMubSkseC5fZm9yY2VSZWQodGhpcyl9LFNlLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKHAsYil7dGhpcy5fdmVyaWZ5MihwLGIpO3ZhciB4PXAuaXN1YihiKTtyZXR1cm4geC5jbXBuKDApPDAmJngu''@;'; put 'put ''aWFkZCh0aGlzLm0pLHh9LFNlLnByb3RvdHlwZS5zaGw9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MShwKSx0aGlzLmltb2QocC51c2hsbihiKSl9LFNlLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHAsYil7cmV0dXJuIHRoaXMuX3ZlcmlmeTIocCxiKSx0aGlzLmltb2QocC5p''@;'; put 'put ''bXVsKGIpKX0sU2UucHJvdG90eXBlLm11bD1mdW5jdGlvbihwLGIpe3JldHVybiB0aGlzLl92ZXJpZnkyKHAsYiksdGhpcy5pbW9kKHAubXVsKGIpKX0sU2UucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuaW11bChwLHAuY2xvbmUoKSl9LFNlLnByb3RvdHlwZS5zcXI9''@;'; put 'put ''ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubXVsKHAscCl9LFNlLnByb3RvdHlwZS5zcXJ0PWZ1bmN0aW9uKHApe2lmKHAuaXNaZXJvKCkpcmV0dXJuIHAuY2xvbmUoKTt2YXIgYj10aGlzLm0uYW5kbG4oMyk7aWYoZyhiJTI9PTEpLDM9PT1iKXt2YXIgeD10aGlzLm0uYWRkKG5ldyB3KDEpKS5p''@;'; put 'put ''dXNocm4oMik7cmV0dXJuIHRoaXMucG93KHAseCl9Zm9yKHZhciBDPXRoaXMubS5zdWJuKDEpLFQ9MDshQy5pc1plcm8oKSYmMD09PUMuYW5kbG4oMSk7KVQrKyxDLml1c2hybigxKTtnKCFDLmlzWmVybygpKTt2YXIgSD1uZXcgdygxKS50b1JlZCh0aGlzKSxqPUgucmVkTmVnKCksRT10aGlz''@;'; put 'put ''Lm0uc3VibigxKS5pdXNocm4oMSksbT10aGlzLm0uYml0TGVuZ3RoKCk7Zm9yKG09bmV3IHcoMiptKm0pLnRvUmVkKHRoaXMpOzAhPT10aGlzLnBvdyhtLEUpLmNtcChqKTspbS5yZWRJQWRkKGopO2Zvcih2YXIgQT10aGlzLnBvdyhtLEMpLGFlPXRoaXMucG93KHAsQy5hZGRuKDEpLml1c2hy''@;'; put 'put ''bigxKSksdGU9dGhpcy5wb3cocCxDKSxzZT1UOzAhPT10ZS5jbXAoSCk7KXtmb3IodmFyIHdlPXRlLFVlPTA7MCE9PXdlLmNtcChIKTtVZSsrKXdlPXdlLnJlZFNxcigpO2coVWU8c2UpO3ZhciBKZT10aGlzLnBvdyhBLG5ldyB3KDEpLml1c2hsbihzZS1VZS0xKSk7YWU9YWUucmVkTXVsKEpl''@;'; put 'put ''KSxBPUplLnJlZFNxcigpLHRlPXRlLnJlZE11bChBKSxzZT1VZX1yZXR1cm4gYWV9LFNlLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHApe3ZhciBiPXAuX2ludm1wKHRoaXMubSk7cmV0dXJuIDAhPT1iLm5lZ2F0aXZlPyhiLm5lZ2F0aXZlPTAsdGhpcy5pbW9kKGIpLnJlZE5lZygpKTp0aGlz''@;'; put 'put ''Lmltb2QoYil9LFNlLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24ocCxiKXtpZihiLmlzWmVybygpKXJldHVybiBuZXcgdygxKS50b1JlZCh0aGlzKTtpZigwPT09Yi5jbXBuKDEpKXJldHVybiBwLmNsb25lKCk7dmFyIEM9bmV3IEFycmF5KDE2KTtDWzBdPW5ldyB3KDEpLnRvUmVkKHRoaXMpLENb''@;'; put 'put ''MV09cDtmb3IodmFyIFQ9MjtUPEMubGVuZ3RoO1QrKylDW1RdPXRoaXMubXVsKENbVC0xXSxwKTt2YXIgSD1DWzBdLGo9MCxFPTAsbT1iLmJpdExlbmd0aCgpJTI2O2ZvcigwPT09bSYmKG09MjYpLFQ9Yi5sZW5ndGgtMTtUPj0wO1QtLSl7Zm9yKHZhciBBPWIud29yZHNbVF0sYWU9bS0xO2Fl''@;'; put 'put ''Pj0wO2FlLS0pe3ZhciB0ZT1BPj5hZSYxO0ghPT1DWzBdJiYoSD10aGlzLnNxcihIKSksMCE9PXRlfHwwIT09aj8oajw8PTEsanw9dGUsKDQ9PSsrRXx8MD09PVQmJjA9PT1hZSkmJihIPXRoaXMubXVsKEgsQ1tqXSksRT0wLGo9MCkpOkU9MH1tPTI2fXJldHVybiBIfSxTZS5wcm90b3R5cGUu''@;'; put 'put ''Y29udmVydFRvPWZ1bmN0aW9uKHApe3ZhciBiPXAudW1vZCh0aGlzLm0pO3JldHVybiBiPT09cD9iLmNsb25lKCk6Yn0sU2UucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKHApe3ZhciBiPXAuY2xvbmUoKTtyZXR1cm4gYi5yZWQ9bnVsbCxifSx3Lm1vbnQ9ZnVuY3Rpb24ocCl7cmV0''@;'; put 'put ''dXJuIG5ldyBqZShwKX0sQihqZSxTZSksamUucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5pbW9kKHAudXNobG4odGhpcy5zaGlmdCkpfSxqZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24ocCl7dmFyIGI9dGhpcy5pbW9kKHAubXVsKHRoaXMucmlu''@;'; put 'put ''dikpO3JldHVybiBiLnJlZD1udWxsLGJ9LGplLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHAsYil7aWYocC5pc1plcm8oKXx8Yi5pc1plcm8oKSlyZXR1cm4gcC53b3Jkc1swXT0wLHAubGVuZ3RoPTEscDt2YXIgeD1wLmltdWwoYiksQz14Lm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1p''@;'; put 'put ''bnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxUPXguaXN1YihDKS5pdXNocm4odGhpcy5zaGlmdCksSD1UO3JldHVybiBULmNtcCh0aGlzLm0pPj0wP0g9VC5pc3ViKHRoaXMubSk6VC5jbXBuKDApPDAmJihIPVQuaWFkZCh0aGlzLm0pKSxILl9mb3JjZVJlZCh0aGlzKX0samUu''@;'; put 'put ''cHJvdG90eXBlLm11bD1mdW5jdGlvbihwLGIpe2lmKHAuaXNaZXJvKCl8fGIuaXNaZXJvKCkpcmV0dXJuIG5ldyB3KDApLl9mb3JjZVJlZCh0aGlzKTt2YXIgeD1wLm11bChiKSxDPXgubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlz''@;'; put 'put ''Lm0pLFQ9eC5pc3ViKEMpLml1c2hybih0aGlzLnNoaWZ0KSxIPVQ7cmV0dXJuIFQuY21wKHRoaXMubSk+PTA/SD1ULmlzdWIodGhpcy5tKTpULmNtcG4oMCk8MCYmKEg9VC5pYWRkKHRoaXMubSkpLEguX2ZvcmNlUmVkKHRoaXMpfSxqZS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihwKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5pbW9kKHAuX2ludm1wKHRoaXMubSkubXVsKHRoaXMucjIpKS5fZm9yY2VSZWQodGhpcyl9fSh1ZT15Lm5tZCh1ZSksdGhpcyl9LDY1MDQ6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIGcsST15KDMxOSksXz15KDcyOTYpO3RyeXtnPVtdLl9fcHJvdG9fXz09PUFycmF5LnBy''@;'; put 'put ''b3RvdHlwZX1jYXRjaChGKXtpZighRnx8Im9iamVjdCIhPXR5cGVvZiBGfHwhKCJjb2RlImluIEYpfHwiRVJSX1BST1RPX0FDQ0VTUyIhPT1GLmNvZGUpdGhyb3cgRn12YXIgQj0hIWcmJl8mJl8oT2JqZWN0LnByb3RvdHlwZSwiX19wcm90b19fIiksdz1PYmplY3QsUD13LmdldFByb3RvdHlw''@;'; put 'put ''ZU9mO3VlLmV4cG9ydHM9QiYmImZ1bmN0aW9uIj09dHlwZW9mIEIuZ2V0P0koW0IuZ2V0XSk6ImZ1bmN0aW9uIj09dHlwZW9mIFAmJmZ1bmN0aW9uKE8pe3JldHVybiBQKG51bGw9PU8/Tzp3KE8pKX19LDY5NDg6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9WDtJLnZlcnNpb249eSg4''@;'; put 'put ''NTk3KS5pOCxJLnV0aWxzPXkoOTUzKSxJLnJhbmQ9eSg5OTMxKSxJLmN1cnZlPXkoODI1NCksSS5jdXJ2ZXM9eSg1NDI3KSxJLmVjPXkoNzk1NCksSS5lZGRzYT15KDU5ODApfSw0OTE4Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMzc4NSksXz15KDk1MyksZz1fLmdldE5BRixC''@;'; put 'put ''PV8uZ2V0SlNGLHc9Xy5hc3NlcnQ7ZnVuY3Rpb24gUChPLHope3RoaXMudHlwZT1PLHRoaXMucD1uZXcgSSh6LnAsMTYpLHRoaXMucmVkPXoucHJpbWU/SS5yZWQoei5wcmltZSk6SS5tb250KHRoaXMucCksdGhpcy56ZXJvPW5ldyBJKDApLnRvUmVkKHRoaXMucmVkKSx0aGlzLm9uZT1uZXcg''@;'; put 'put ''SSgxKS50b1JlZCh0aGlzLnJlZCksdGhpcy50d289bmV3IEkoMikudG9SZWQodGhpcy5yZWQpLHRoaXMubj16Lm4mJm5ldyBJKHoubiwxNiksdGhpcy5nPXouZyYmdGhpcy5wb2ludEZyb21KU09OKHouZyx6LmdSZWQpLHRoaXMuX3duYWZUMT1uZXcgQXJyYXkoNCksdGhpcy5fd25hZlQyPW5l''@;'; put 'put ''dyBBcnJheSg0KSx0aGlzLl93bmFmVDM9bmV3IEFycmF5KDQpLHRoaXMuX3duYWZUND1uZXcgQXJyYXkoNCksdGhpcy5fYml0TGVuZ3RoPXRoaXMubj90aGlzLm4uYml0TGVuZ3RoKCk6MDt2YXIgTj10aGlzLm4mJnRoaXMucC5kaXYodGhpcy5uKTshTnx8Ti5jbXBuKDEwMCk+MD90aGlzLnJl''@;'; put 'put ''ZE49bnVsbDoodGhpcy5fbWF4d2VsbFRyaWNrPSEwLHRoaXMucmVkTj10aGlzLm4udG9SZWQodGhpcy5yZWQpKX1mdW5jdGlvbiBGKE8seil7dGhpcy5jdXJ2ZT1PLHRoaXMudHlwZT16LHRoaXMucHJlY29tcHV0ZWQ9bnVsbH11ZS5leHBvcnRzPVAsUC5wcm90b3R5cGUucG9pbnQ9ZnVuY3Rp''@;'; put 'put ''b24oKXt0aHJvdyBuZXcgRXJyb3IoIk5vdCBpbXBsZW1lbnRlZCIpfSxQLnByb3RvdHlwZS52YWxpZGF0ZT1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiTm90IGltcGxlbWVudGVkIil9LFAucHJvdG90eXBlLl9maXhlZE5hZk11bD1mdW5jdGlvbih6LE4pe3coei5wcmVjb21wdXRlZCk7''@;'; put 'put ''dmFyIEw9ei5fZ2V0RG91YmxlcygpLEs9ZyhOLDEsdGhpcy5fYml0TGVuZ3RoKSxVPSgxPDxMLnN0ZXArMSktKEwuc3RlcCUyPT0wPzI6MSk7VS89Mzt2YXIgWSxxLFc9W107Zm9yKFk9MDtZPEsubGVuZ3RoO1krPUwuc3RlcCl7cT0wO2Zvcih2YXIgZWU9WStMLnN0ZXAtMTtlZT49WTtlZS0t''@;'; put 'put ''KXE9KHE8PDEpK0tbZWVdO1cucHVzaChxKX1mb3IodmFyIEo9dGhpcy5qcG9pbnQobnVsbCxudWxsLG51bGwpLG5lPXRoaXMuanBvaW50KG51bGwsbnVsbCxudWxsKSxpZT1VO2llPjA7aWUtLSl7Zm9yKFk9MDtZPFcubGVuZ3RoO1krKykocT1XW1ldKT09PWllP25lPW5lLm1peGVkQWRkKEwu''@;'; put 'put ''cG9pbnRzW1ldKTpxPT09LWllJiYobmU9bmUubWl4ZWRBZGQoTC5wb2ludHNbWV0ubmVnKCkpKTtKPUouYWRkKG5lKX1yZXR1cm4gSi50b1AoKX0sUC5wcm90b3R5cGUuX3duYWZNdWw9ZnVuY3Rpb24oeixOKXtmb3IodmFyIEw9NCxLPXouX2dldE5BRlBvaW50cyhMKSxVPUsucG9pbnRzLFc9''@;'; put 'put ''ZyhOLEw9Sy53bmQsdGhpcy5fYml0TGVuZ3RoKSxZPXRoaXMuanBvaW50KG51bGwsbnVsbCxudWxsKSxxPVcubGVuZ3RoLTE7cT49MDtxLS0pe2Zvcih2YXIgZWU9MDtxPj0wJiYwPT09V1txXTtxLS0pZWUrKztpZihxPj0wJiZlZSsrLFk9WS5kYmxwKGVlKSxxPDApYnJlYWs7dmFyIEo9V1tx''@;'; put 'put ''XTt3KDAhPT1KKSxZPSJhZmZpbmUiPT09ei50eXBlP1kubWl4ZWRBZGQoSj4wP1VbSi0xPj4xXTpVWy1KLTE+PjFdLm5lZygpKTpZLmFkZChKPjA/VVtKLTE+PjFdOlVbLUotMT4+MV0ubmVnKCkpfXJldHVybiJhZmZpbmUiPT09ei50eXBlP1kudG9QKCk6WX0sUC5wcm90b3R5cGUuX3duYWZN''@;'; put 'put ''dWxBZGQ9ZnVuY3Rpb24oeixOLEwsSyxVKXt2YXIgSixuZSxpZSxXPXRoaXMuX3duYWZUMSxZPXRoaXMuX3duYWZUMixxPXRoaXMuX3duYWZUMyxlZT0wO2ZvcihKPTA7SjxLO0orKyl7dmFyIGxlPShpZT1OW0pdKS5fZ2V0TkFGUG9pbnRzKHopO1dbSl09bGUud25kLFlbSl09bGUucG9pbnRz''@;'; put 'put ''fWZvcihKPUstMTtKPj0xO0otPTIpe3ZhciBtZT1KLTEsX2U9SjtpZigxPT09V1ttZV0mJjE9PT1XW19lXSl7dmFyIFRlPVtOW21lXSxudWxsLG51bGwsTltfZV1dOzA9PT1OW21lXS55LmNtcChOW19lXS55KT8oVGVbMV09TlttZV0uYWRkKE5bX2VdKSxUZVsyXT1OW21lXS50b0ooKS5taXhl''@;'; put 'put ''ZEFkZChOW19lXS5uZWcoKSkpOjA9PT1OW21lXS55LmNtcChOW19lXS55LnJlZE5lZygpKT8oVGVbMV09TlttZV0udG9KKCkubWl4ZWRBZGQoTltfZV0pLFRlWzJdPU5bbWVdLmFkZChOW19lXS5uZWcoKSkpOihUZVsxXT1OW21lXS50b0ooKS5taXhlZEFkZChOW19lXSksVGVbMl09TlttZV0u''@;'; put 'put ''dG9KKCkubWl4ZWRBZGQoTltfZV0ubmVnKCkpKTt2YXIgU2U9Wy0zLC0xLC01LC03LDAsNyw1LDEsM10samU9QihMW21lXSxMW19lXSk7Zm9yKGVlPU1hdGgubWF4KGplWzBdLmxlbmd0aCxlZSkscVttZV09bmV3IEFycmF5KGVlKSxxW19lXT1uZXcgQXJyYXkoZWUpLG5lPTA7bmU8ZWU7bmUr''@;'; put 'put ''KylxW21lXVtuZV09U2VbMyooMSsoMHxqZVswXVtuZV0pKSsoMSsoMHxqZVsxXVtuZV0pKV0scVtfZV1bbmVdPTAsWVttZV09VGV9ZWxzZSBxW21lXT1nKExbbWVdLFdbbWVdLHRoaXMuX2JpdExlbmd0aCkscVtfZV09ZyhMW19lXSxXW19lXSx0aGlzLl9iaXRMZW5ndGgpLGVlPU1hdGgubWF4''@;'; put 'put ''KHFbbWVdLmxlbmd0aCxlZSksZWU9TWF0aC5tYXgocVtfZV0ubGVuZ3RoLGVlKX12YXIgYj10aGlzLmpwb2ludChudWxsLG51bGwsbnVsbCkseD10aGlzLl93bmFmVDQ7Zm9yKEo9ZWU7Sj49MDtKLS0pe2Zvcih2YXIgQz0wO0o+PTA7KXt2YXIgVD0hMDtmb3IobmU9MDtuZTxLO25lKyspeFtu''@;'; put 'put ''ZV09MHxxW25lXVtKXSwwIT09eFtuZV0mJihUPSExKTtpZighVClicmVhaztDKyssSi0tfWlmKEo+PTAmJkMrKyxiPWIuZGJscChDKSxKPDApYnJlYWs7Zm9yKG5lPTA7bmU8SztuZSsrKXt2YXIgSD14W25lXTswIT09SCYmKEg+MD9pZT1ZW25lXVtILTE+PjFdOkg8MCYmKGllPVlbbmVdWy1I''@;'; put 'put ''LTE+PjFdLm5lZygpKSxiPSJhZmZpbmUiPT09aWUudHlwZT9iLm1peGVkQWRkKGllKTpiLmFkZChpZSkpfX1mb3IoSj0wO0o8SztKKyspWVtKXT1udWxsO3JldHVybiBVP2I6Yi50b1AoKX0sUC5CYXNlUG9pbnQ9RixGLnByb3RvdHlwZS5lcT1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigi''@;'; put 'put ''Tm90IGltcGxlbWVudGVkIil9LEYucHJvdG90eXBlLnZhbGlkYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VydmUudmFsaWRhdGUodGhpcyl9LFAucHJvdG90eXBlLmRlY29kZVBvaW50PWZ1bmN0aW9uKHosTil7ej1fLnRvQXJyYXkoeixOKTt2YXIgTD10aGlzLnAuYnl0ZUxlbmd0aCgp''@;'; put 'put ''O2lmKCg0PT09elswXXx8Nj09PXpbMF18fDc9PT16WzBdKSYmei5sZW5ndGgtMT09MipMKXJldHVybiA2PT09elswXT93KHpbei5sZW5ndGgtMV0lMj09MCk6Nz09PXpbMF0mJncoelt6Lmxlbmd0aC0xXSUyPT0xKSx0aGlzLnBvaW50KHouc2xpY2UoMSwxK0wpLHouc2xpY2UoMStMLDErMipM''@;'; put 'put ''KSk7aWYoKDI9PT16WzBdfHwzPT09elswXSkmJnoubGVuZ3RoLTE9PT1MKXJldHVybiB0aGlzLnBvaW50RnJvbVgoei5zbGljZSgxLDErTCksMz09PXpbMF0pO3Rocm93IG5ldyBFcnJvcigiVW5rbm93biBwb2ludCBmb3JtYXQiKX0sRi5wcm90b3R5cGUuZW5jb2RlQ29tcHJlc3NlZD1mdW5j''@;'; put 'put ''dGlvbih6KXtyZXR1cm4gdGhpcy5lbmNvZGUoeiwhMCl9LEYucHJvdG90eXBlLl9lbmNvZGU9ZnVuY3Rpb24oeil7dmFyIE49dGhpcy5jdXJ2ZS5wLmJ5dGVMZW5ndGgoKSxMPXRoaXMuZ2V0WCgpLnRvQXJyYXkoImJlIixOKTtyZXR1cm4gej9bdGhpcy5nZXRZKCkuaXNFdmVuKCk/MjozXS5j''@;'; put 'put ''b25jYXQoTCk6WzRdLmNvbmNhdChMLHRoaXMuZ2V0WSgpLnRvQXJyYXkoImJlIixOKSl9LEYucHJvdG90eXBlLmVuY29kZT1mdW5jdGlvbih6LE4pe3JldHVybiBfLmVuY29kZSh0aGlzLl9lbmNvZGUoTikseil9LEYucHJvdG90eXBlLnByZWNvbXB1dGU9ZnVuY3Rpb24oeil7aWYodGhpcy5w''@;'; put 'put ''cmVjb21wdXRlZClyZXR1cm4gdGhpczt2YXIgTj17ZG91YmxlczpudWxsLG5hZjpudWxsLGJldGE6bnVsbH07cmV0dXJuIE4ubmFmPXRoaXMuX2dldE5BRlBvaW50cyg4KSxOLmRvdWJsZXM9dGhpcy5fZ2V0RG91Ymxlcyg0LHopLE4uYmV0YT10aGlzLl9nZXRCZXRhKCksdGhpcy5wcmVjb21w''@;'; put 'put ''dXRlZD1OLHRoaXN9LEYucHJvdG90eXBlLl9oYXNEb3VibGVzPWZ1bmN0aW9uKHope2lmKCF0aGlzLnByZWNvbXB1dGVkKXJldHVybiExO3ZhciBOPXRoaXMucHJlY29tcHV0ZWQuZG91YmxlcztyZXR1cm4hIU4mJk4ucG9pbnRzLmxlbmd0aD49TWF0aC5jZWlsKCh6LmJpdExlbmd0aCgpKzEp''@;'; put 'put ''L04uc3RlcCl9LEYucHJvdG90eXBlLl9nZXREb3VibGVzPWZ1bmN0aW9uKHosTil7aWYodGhpcy5wcmVjb21wdXRlZCYmdGhpcy5wcmVjb21wdXRlZC5kb3VibGVzKXJldHVybiB0aGlzLnByZWNvbXB1dGVkLmRvdWJsZXM7Zm9yKHZhciBMPVt0aGlzXSxLPXRoaXMsVT0wO1U8TjtVKz16KXtm''@;'; put 'put ''b3IodmFyIFc9MDtXPHo7VysrKUs9Sy5kYmwoKTtMLnB1c2goSyl9cmV0dXJue3N0ZXA6eixwb2ludHM6TH19LEYucHJvdG90eXBlLl9nZXROQUZQb2ludHM9ZnVuY3Rpb24oeil7aWYodGhpcy5wcmVjb21wdXRlZCYmdGhpcy5wcmVjb21wdXRlZC5uYWYpcmV0dXJuIHRoaXMucHJlY29tcHV0''@;'; put 'put ''ZWQubmFmO2Zvcih2YXIgTj1bdGhpc10sTD0oMTw8eiktMSxLPTE9PT1MP251bGw6dGhpcy5kYmwoKSxVPTE7VTxMO1UrKylOW1VdPU5bVS0xXS5hZGQoSyk7cmV0dXJue3duZDp6LHBvaW50czpOfX0sRi5wcm90b3R5cGUuX2dldEJldGE9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sRi5wcm90''@;'; put 'put ''b3R5cGUuZGJscD1mdW5jdGlvbih6KXtmb3IodmFyIE49dGhpcyxMPTA7TDx6O0wrKylOPU4uZGJsKCk7cmV0dXJuIE59fSwxMTM4Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoOTUzKSxfPXkoMzc4NSksZz15KDU3MTcpLEI9eSg0OTE4KSx3PUkuYXNzZXJ0O2Z1bmN0aW9uIFAo''@;'; put 'put ''Tyl7dGhpcy50d2lzdGVkPTEhPSgwfE8uYSksdGhpcy5tT25lQT10aGlzLnR3aXN0ZWQmJi0xPT0oMHxPLmEpLHRoaXMuZXh0ZW5kZWQ9dGhpcy5tT25lQSxCLmNhbGwodGhpcywiZWR3YXJkcyIsTyksdGhpcy5hPW5ldyBfKE8uYSwxNikudW1vZCh0aGlzLnJlZC5tKSx0aGlzLmE9dGhpcy5h''@;'; put 'put ''LnRvUmVkKHRoaXMucmVkKSx0aGlzLmM9bmV3IF8oTy5jLDE2KS50b1JlZCh0aGlzLnJlZCksdGhpcy5jMj10aGlzLmMucmVkU3FyKCksdGhpcy5kPW5ldyBfKE8uZCwxNikudG9SZWQodGhpcy5yZWQpLHRoaXMuZGQ9dGhpcy5kLnJlZEFkZCh0aGlzLmQpLHcoIXRoaXMudHdpc3RlZHx8MD09''@;'; put 'put ''PXRoaXMuYy5mcm9tUmVkKCkuY21wbigxKSksdGhpcy5vbmVDPTE9PSgwfE8uYyl9ZnVuY3Rpb24gRihPLHosTixMLEspe0IuQmFzZVBvaW50LmNhbGwodGhpcyxPLCJwcm9qZWN0aXZlIiksbnVsbD09PXomJm51bGw9PT1OJiZudWxsPT09TD8odGhpcy54PXRoaXMuY3VydmUuemVybyx0aGlz''@;'; put 'put ''Lnk9dGhpcy5jdXJ2ZS5vbmUsdGhpcy56PXRoaXMuY3VydmUub25lLHRoaXMudD10aGlzLmN1cnZlLnplcm8sdGhpcy56T25lPSEwKToodGhpcy54PW5ldyBfKHosMTYpLHRoaXMueT1uZXcgXyhOLDE2KSx0aGlzLno9TD9uZXcgXyhMLDE2KTp0aGlzLmN1cnZlLm9uZSx0aGlzLnQ9SyYmbmV3''@;'; put 'put ''IF8oSywxNiksdGhpcy54LnJlZHx8KHRoaXMueD10aGlzLngudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnkucmVkfHwodGhpcy55PXRoaXMueS50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMuei5yZWR8fCh0aGlzLno9dGhpcy56LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy50''@;'; put 'put ''JiYhdGhpcy50LnJlZCYmKHRoaXMudD10aGlzLnQudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnpPbmU9dGhpcy56PT09dGhpcy5jdXJ2ZS5vbmUsdGhpcy5jdXJ2ZS5leHRlbmRlZCYmIXRoaXMudCYmKHRoaXMudD10aGlzLngucmVkTXVsKHRoaXMueSksdGhpcy56T25lfHwodGhpcy50''@;'; put 'put ''PXRoaXMudC5yZWRNdWwodGhpcy56LnJlZEludm0oKSkpKSl9ZyhQLEIpLHVlLmV4cG9ydHM9UCxQLnByb3RvdHlwZS5fbXVsQT1mdW5jdGlvbih6KXtyZXR1cm4gdGhpcy5tT25lQT96LnJlZE5lZygpOnRoaXMuYS5yZWRNdWwoeil9LFAucHJvdG90eXBlLl9tdWxDPWZ1bmN0aW9uKHope3Jl''@;'; put 'put ''dHVybiB0aGlzLm9uZUM/ejp0aGlzLmMucmVkTXVsKHopfSxQLnByb3RvdHlwZS5qcG9pbnQ9ZnVuY3Rpb24oeixOLEwsSyl7cmV0dXJuIHRoaXMucG9pbnQoeixOLEwsSyl9LFAucHJvdG90eXBlLnBvaW50RnJvbVg9ZnVuY3Rpb24oeixOKXsoej1uZXcgXyh6LDE2KSkucmVkfHwoej16LnRv''@;'; put 'put ''UmVkKHRoaXMucmVkKSk7dmFyIEw9ei5yZWRTcXIoKSxLPXRoaXMuYzIucmVkU3ViKHRoaXMuYS5yZWRNdWwoTCkpLFU9dGhpcy5vbmUucmVkU3ViKHRoaXMuYzIucmVkTXVsKHRoaXMuZCkucmVkTXVsKEwpKSxXPUsucmVkTXVsKFUucmVkSW52bSgpKSxZPVcucmVkU3FydCgpO2lmKDAhPT1Z''@;'; put 'put ''LnJlZFNxcigpLnJlZFN1YihXKS5jbXAodGhpcy56ZXJvKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgcG9pbnQiKTt2YXIgcT1ZLmZyb21SZWQoKS5pc09kZCgpO3JldHVybihOJiYhcXx8IU4mJnEpJiYoWT1ZLnJlZE5lZygpKSx0aGlzLnBvaW50KHosWSl9LFAucHJvdG90eXBlLnBvaW50''@;'; put 'put ''RnJvbVk9ZnVuY3Rpb24oeixOKXsoej1uZXcgXyh6LDE2KSkucmVkfHwoej16LnRvUmVkKHRoaXMucmVkKSk7dmFyIEw9ei5yZWRTcXIoKSxLPUwucmVkU3ViKHRoaXMuYzIpLFU9TC5yZWRNdWwodGhpcy5kKS5yZWRNdWwodGhpcy5jMikucmVkU3ViKHRoaXMuYSksVz1LLnJlZE11bChVLnJl''@;'; put 'put ''ZEludm0oKSk7aWYoMD09PVcuY21wKHRoaXMuemVybykpe2lmKE4pdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHBvaW50Iik7cmV0dXJuIHRoaXMucG9pbnQodGhpcy56ZXJvLHopfXZhciBZPVcucmVkU3FydCgpO2lmKDAhPT1ZLnJlZFNxcigpLnJlZFN1YihXKS5jbXAodGhpcy56ZXJvKSl0''@;'; put 'put ''aHJvdyBuZXcgRXJyb3IoImludmFsaWQgcG9pbnQiKTtyZXR1cm4gWS5mcm9tUmVkKCkuaXNPZGQoKSE9PU4mJihZPVkucmVkTmVnKCkpLHRoaXMucG9pbnQoWSx6KX0sUC5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oeil7aWYoei5pc0luZmluaXR5KCkpcmV0dXJuITA7ei5ub3JtYWxp''@;'; put 'put ''emUoKTt2YXIgTj16LngucmVkU3FyKCksTD16LnkucmVkU3FyKCksSz1OLnJlZE11bCh0aGlzLmEpLnJlZEFkZChMKSxVPXRoaXMuYzIucmVkTXVsKHRoaXMub25lLnJlZEFkZCh0aGlzLmQucmVkTXVsKE4pLnJlZE11bChMKSkpO3JldHVybiAwPT09Sy5jbXAoVSl9LGcoRixCLkJhc2VQb2lu''@;'; put 'put ''dCksUC5wcm90b3R5cGUucG9pbnRGcm9tSlNPTj1mdW5jdGlvbih6KXtyZXR1cm4gRi5mcm9tSlNPTih0aGlzLHopfSxQLnByb3RvdHlwZS5wb2ludD1mdW5jdGlvbih6LE4sTCxLKXtyZXR1cm4gbmV3IEYodGhpcyx6LE4sTCxLKX0sRi5mcm9tSlNPTj1mdW5jdGlvbih6LE4pe3JldHVybiBu''@;'; put 'put ''ZXcgRih6LE5bMF0sTlsxXSxOWzJdKX0sRi5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT8iPEVDIFBvaW50IEluZmluaXR5PiI6IjxFQyBQb2ludCB4OiAiK3RoaXMueC5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrIiB5OiAiK3RoaXMueS5m''@;'; put 'put ''cm9tUmVkKCkudG9TdHJpbmcoMTYsMikrIiB6OiAiK3RoaXMuei5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrIj4ifSxGLnByb3RvdHlwZS5pc0luZmluaXR5PWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLnguY21wbigwKSYmKDA9PT10aGlzLnkuY21wKHRoaXMueil8fHRoaXMuek9uZSYm''@;'; put 'put ''MD09PXRoaXMueS5jbXAodGhpcy5jdXJ2ZS5jKSl9LEYucHJvdG90eXBlLl9leHREYmw9ZnVuY3Rpb24oKXt2YXIgej10aGlzLngucmVkU3FyKCksTj10aGlzLnkucmVkU3FyKCksTD10aGlzLnoucmVkU3FyKCk7TD1MLnJlZElBZGQoTCk7dmFyIEs9dGhpcy5jdXJ2ZS5fbXVsQSh6KSxVPXRo''@;'; put 'put ''aXMueC5yZWRBZGQodGhpcy55KS5yZWRTcXIoKS5yZWRJU3ViKHopLnJlZElTdWIoTiksVz1LLnJlZEFkZChOKSxZPVcucmVkU3ViKEwpLHE9Sy5yZWRTdWIoTiksZWU9VS5yZWRNdWwoWSksSj1XLnJlZE11bChxKSxuZT1VLnJlZE11bChxKSxpZT1ZLnJlZE11bChXKTtyZXR1cm4gdGhpcy5j''@;'; put 'put ''dXJ2ZS5wb2ludChlZSxKLGllLG5lKX0sRi5wcm90b3R5cGUuX3Byb2pEYmw9ZnVuY3Rpb24oKXt2YXIgSyxVLFcsWSxxLGVlLHo9dGhpcy54LnJlZEFkZCh0aGlzLnkpLnJlZFNxcigpLE49dGhpcy54LnJlZFNxcigpLEw9dGhpcy55LnJlZFNxcigpO2lmKHRoaXMuY3VydmUudHdpc3RlZCl7''@;'; put 'put ''dmFyIEo9KFk9dGhpcy5jdXJ2ZS5fbXVsQShOKSkucmVkQWRkKEwpO3RoaXMuek9uZT8oSz16LnJlZFN1YihOKS5yZWRTdWIoTCkucmVkTXVsKEoucmVkU3ViKHRoaXMuY3VydmUudHdvKSksVT1KLnJlZE11bChZLnJlZFN1YihMKSksVz1KLnJlZFNxcigpLnJlZFN1YihKKS5yZWRTdWIoSikp''@;'; put 'put ''OihxPXRoaXMuei5yZWRTcXIoKSxlZT1KLnJlZFN1YihxKS5yZWRJU3ViKHEpLEs9ei5yZWRTdWIoTikucmVkSVN1YihMKS5yZWRNdWwoZWUpLFU9Si5yZWRNdWwoWS5yZWRTdWIoTCkpLFc9Si5yZWRNdWwoZWUpKX1lbHNlIFk9Ti5yZWRBZGQoTCkscT10aGlzLmN1cnZlLl9tdWxDKHRoaXMu''@;'; put 'put ''eikucmVkU3FyKCksZWU9WS5yZWRTdWIocSkucmVkU3ViKHEpLEs9dGhpcy5jdXJ2ZS5fbXVsQyh6LnJlZElTdWIoWSkpLnJlZE11bChlZSksVT10aGlzLmN1cnZlLl9tdWxDKFkpLnJlZE11bChOLnJlZElTdWIoTCkpLFc9WS5yZWRNdWwoZWUpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KEss''@;'; put 'put ''VSxXKX0sRi5wcm90b3R5cGUuZGJsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpP3RoaXM6dGhpcy5jdXJ2ZS5leHRlbmRlZD90aGlzLl9leHREYmwoKTp0aGlzLl9wcm9qRGJsKCl9LEYucHJvdG90eXBlLl9leHRBZGQ9ZnVuY3Rpb24oeil7dmFyIE49dGhpcy55LnJlZFN1''@;'; put 'put ''Yih0aGlzLngpLnJlZE11bCh6LnkucmVkU3ViKHoueCkpLEw9dGhpcy55LnJlZEFkZCh0aGlzLngpLnJlZE11bCh6LnkucmVkQWRkKHoueCkpLEs9dGhpcy50LnJlZE11bCh0aGlzLmN1cnZlLmRkKS5yZWRNdWwoei50KSxVPXRoaXMuei5yZWRNdWwoei56LnJlZEFkZCh6LnopKSxXPUwucmVk''@;'; put 'put ''U3ViKE4pLFk9VS5yZWRTdWIoSykscT1VLnJlZEFkZChLKSxlZT1MLnJlZEFkZChOKSxKPVcucmVkTXVsKFkpLG5lPXEucmVkTXVsKGVlKSxpZT1XLnJlZE11bChlZSksbGU9WS5yZWRNdWwocSk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQoSixuZSxsZSxpZSl9LEYucHJvdG90eXBlLl9wcm9q''@;'; put 'put ''QWRkPWZ1bmN0aW9uKHope3ZhciBuZSxpZSxOPXRoaXMuei5yZWRNdWwoei56KSxMPU4ucmVkU3FyKCksSz10aGlzLngucmVkTXVsKHoueCksVT10aGlzLnkucmVkTXVsKHoueSksVz10aGlzLmN1cnZlLmQucmVkTXVsKEspLnJlZE11bChVKSxZPUwucmVkU3ViKFcpLHE9TC5yZWRBZGQoVyks''@;'; put 'put ''ZWU9dGhpcy54LnJlZEFkZCh0aGlzLnkpLnJlZE11bCh6LngucmVkQWRkKHoueSkpLnJlZElTdWIoSykucmVkSVN1YihVKSxKPU4ucmVkTXVsKFkpLnJlZE11bChlZSk7cmV0dXJuIHRoaXMuY3VydmUudHdpc3RlZD8obmU9Ti5yZWRNdWwocSkucmVkTXVsKFUucmVkU3ViKHRoaXMuY3VydmUu''@;'; put 'put ''X211bEEoSykpKSxpZT1ZLnJlZE11bChxKSk6KG5lPU4ucmVkTXVsKHEpLnJlZE11bChVLnJlZFN1YihLKSksaWU9dGhpcy5jdXJ2ZS5fbXVsQyhZKS5yZWRNdWwocSkpLHRoaXMuY3VydmUucG9pbnQoSixuZSxpZSl9LEYucHJvdG90eXBlLmFkZD1mdW5jdGlvbih6KXtyZXR1cm4gdGhpcy5p''@;'; put 'put ''c0luZmluaXR5KCk/ejp6LmlzSW5maW5pdHkoKT90aGlzOnRoaXMuY3VydmUuZXh0ZW5kZWQ/dGhpcy5fZXh0QWRkKHopOnRoaXMuX3Byb2pBZGQoeil9LEYucHJvdG90eXBlLm11bD1mdW5jdGlvbih6KXtyZXR1cm4gdGhpcy5faGFzRG91Ymxlcyh6KT90aGlzLmN1cnZlLl9maXhlZE5hZk11''@;'; put 'put ''bCh0aGlzLHopOnRoaXMuY3VydmUuX3duYWZNdWwodGhpcyx6KX0sRi5wcm90b3R5cGUubXVsQWRkPWZ1bmN0aW9uKHosTixMKXtyZXR1cm4gdGhpcy5jdXJ2ZS5fd25hZk11bEFkZCgxLFt0aGlzLE5dLFt6LExdLDIsITEpfSxGLnByb3RvdHlwZS5qbXVsQWRkPWZ1bmN0aW9uKHosTixMKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5jdXJ2ZS5fd25hZk11bEFkZCgxLFt0aGlzLE5dLFt6LExdLDIsITApfSxGLnByb3RvdHlwZS5ub3JtYWxpemU9ZnVuY3Rpb24oKXtpZih0aGlzLnpPbmUpcmV0dXJuIHRoaXM7dmFyIHo9dGhpcy56LnJlZEludm0oKTtyZXR1cm4gdGhpcy54PXRoaXMueC5yZWRNdWwoeiks''@;'; put 'put ''dGhpcy55PXRoaXMueS5yZWRNdWwoeiksdGhpcy50JiYodGhpcy50PXRoaXMudC5yZWRNdWwoeikpLHRoaXMuej10aGlzLmN1cnZlLm9uZSx0aGlzLnpPbmU9ITAsdGhpc30sRi5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQodGhpcy54LnJlZE5lZygp''@;'; put 'put ''LHRoaXMueSx0aGlzLnosdGhpcy50JiZ0aGlzLnQucmVkTmVnKCkpfSxGLnByb3RvdHlwZS5nZXRYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9ybWFsaXplKCksdGhpcy54LmZyb21SZWQoKX0sRi5wcm90b3R5cGUuZ2V0WT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vcm1hbGl6ZSgpLHRo''@;'; put 'put ''aXMueS5mcm9tUmVkKCl9LEYucHJvdG90eXBlLmVxPWZ1bmN0aW9uKHope3JldHVybiB0aGlzPT09enx8MD09PXRoaXMuZ2V0WCgpLmNtcCh6LmdldFgoKSkmJjA9PT10aGlzLmdldFkoKS5jbXAoei5nZXRZKCkpfSxGLnByb3RvdHlwZS5lcVhUb1A9ZnVuY3Rpb24oeil7dmFyIE49ei50b1Jl''@;'; put 'put ''ZCh0aGlzLmN1cnZlLnJlZCkucmVkTXVsKHRoaXMueik7aWYoMD09PXRoaXMueC5jbXAoTikpcmV0dXJuITA7Zm9yKHZhciBMPXouY2xvbmUoKSxLPXRoaXMuY3VydmUucmVkTi5yZWRNdWwodGhpcy56KTs7KXtpZihMLmlhZGQodGhpcy5jdXJ2ZS5uKSxMLmNtcCh0aGlzLmN1cnZlLnApPj0w''@;'; put 'put ''KXJldHVybiExO2lmKE4ucmVkSUFkZChLKSwwPT09dGhpcy54LmNtcChOKSlyZXR1cm4hMH19LEYucHJvdG90eXBlLnRvUD1GLnByb3RvdHlwZS5ub3JtYWxpemUsRi5wcm90b3R5cGUubWl4ZWRBZGQ9Ri5wcm90b3R5cGUuYWRkfSw4MjU0Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJ''@;'; put 'put ''PVg7SS5iYXNlPXkoNDkxOCksSS5zaG9ydD15KDY2NzMpLEkubW9udD15KDI4ODEpLEkuZWR3YXJkcz15KDExMzgpfSwyODgxOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMzc4NSksXz15KDU3MTcpLGc9eSg0OTE4KSxCPXkoOTUzKTtmdW5jdGlvbiB3KEYpe2cuY2FsbCh0aGlz''@;'; put 'put ''LCJtb250IixGKSx0aGlzLmE9bmV3IEkoRi5hLDE2KS50b1JlZCh0aGlzLnJlZCksdGhpcy5iPW5ldyBJKEYuYiwxNikudG9SZWQodGhpcy5yZWQpLHRoaXMuaTQ9bmV3IEkoNCkudG9SZWQodGhpcy5yZWQpLnJlZEludm0oKSx0aGlzLnR3bz1uZXcgSSgyKS50b1JlZCh0aGlzLnJlZCksdGhp''@;'; put 'put ''cy5hMjQ9dGhpcy5pNC5yZWRNdWwodGhpcy5hLnJlZEFkZCh0aGlzLnR3bykpfWZ1bmN0aW9uIFAoRixPLHope2cuQmFzZVBvaW50LmNhbGwodGhpcyxGLCJwcm9qZWN0aXZlIiksbnVsbD09PU8mJm51bGw9PT16Pyh0aGlzLng9dGhpcy5jdXJ2ZS5vbmUsdGhpcy56PXRoaXMuY3VydmUuemVy''@;'; put 'put ''byk6KHRoaXMueD1uZXcgSShPLDE2KSx0aGlzLno9bmV3IEkoeiwxNiksdGhpcy54LnJlZHx8KHRoaXMueD10aGlzLngudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnoucmVkfHwodGhpcy56PXRoaXMuei50b1JlZCh0aGlzLmN1cnZlLnJlZCkpKX1fKHcsZyksdWUuZXhwb3J0cz13LHcu''@;'; put 'put ''cHJvdG90eXBlLnZhbGlkYXRlPWZ1bmN0aW9uKE8pe3ZhciB6PU8ubm9ybWFsaXplKCkueCxOPXoucmVkU3FyKCksTD1OLnJlZE11bCh6KS5yZWRBZGQoTi5yZWRNdWwodGhpcy5hKSkucmVkQWRkKHopO3JldHVybiAwPT09TC5yZWRTcXJ0KCkucmVkU3FyKCkuY21wKEwpfSxfKFAsZy5CYXNl''@;'; put 'put ''UG9pbnQpLHcucHJvdG90eXBlLmRlY29kZVBvaW50PWZ1bmN0aW9uKE8seil7cmV0dXJuIHRoaXMucG9pbnQoQi50b0FycmF5KE8seiksMSl9LHcucHJvdG90eXBlLnBvaW50PWZ1bmN0aW9uKE8seil7cmV0dXJuIG5ldyBQKHRoaXMsTyx6KX0sdy5wcm90b3R5cGUucG9pbnRGcm9tSlNPTj1m''@;'; put 'put ''dW5jdGlvbihPKXtyZXR1cm4gUC5mcm9tSlNPTih0aGlzLE8pfSxQLnByb3RvdHlwZS5wcmVjb21wdXRlPWZ1bmN0aW9uKCl7fSxQLnByb3RvdHlwZS5fZW5jb2RlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0WCgpLnRvQXJyYXkoImJlIix0aGlzLmN1cnZlLnAuYnl0ZUxlbmd0aCgpKX0s''@;'; put 'put ''UC5mcm9tSlNPTj1mdW5jdGlvbihPLHope3JldHVybiBuZXcgUChPLHpbMF0selsxXXx8Ty5vbmUpfSxQLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpPyI8RUMgUG9pbnQgSW5maW5pdHk+IjoiPEVDIFBvaW50IHg6ICIrdGhpcy54LmZyb21S''@;'; put 'put ''ZWQoKS50b1N0cmluZygxNiwyKSsiIHo6ICIrdGhpcy56LmZyb21SZWQoKS50b1N0cmluZygxNiwyKSsiPiJ9LFAucHJvdG90eXBlLmlzSW5maW5pdHk9ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMuei5jbXBuKDApfSxQLnByb3RvdHlwZS5kYmw9ZnVuY3Rpb24oKXt2YXIgej10aGlzLngu''@;'; put 'put ''cmVkQWRkKHRoaXMueikucmVkU3FyKCksTD10aGlzLngucmVkU3ViKHRoaXMueikucmVkU3FyKCksSz16LnJlZFN1YihMKSxVPXoucmVkTXVsKEwpLFc9Sy5yZWRNdWwoTC5yZWRBZGQodGhpcy5jdXJ2ZS5hMjQucmVkTXVsKEspKSk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQoVSxXKX0sUC5w''@;'; put 'put ''cm90b3R5cGUuYWRkPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJOb3Qgc3VwcG9ydGVkIG9uIE1vbnRnb21lcnkgY3VydmUiKX0sUC5wcm90b3R5cGUuZGlmZkFkZD1mdW5jdGlvbihPLHope3ZhciBOPXRoaXMueC5yZWRBZGQodGhpcy56KSxMPXRoaXMueC5yZWRTdWIodGhpcy56KSxL''@;'; put 'put ''PU8ueC5yZWRBZGQoTy56KSxXPU8ueC5yZWRTdWIoTy56KS5yZWRNdWwoTiksWT1LLnJlZE11bChMKSxxPXouei5yZWRNdWwoVy5yZWRBZGQoWSkucmVkU3FyKCkpLGVlPXoueC5yZWRNdWwoVy5yZWRJU3ViKFkpLnJlZFNxcigpKTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChxLGVlKX0sUC5w''@;'; put 'put ''cm90b3R5cGUubXVsPWZ1bmN0aW9uKE8pe2Zvcih2YXIgej1PLmNsb25lKCksTj10aGlzLEw9dGhpcy5jdXJ2ZS5wb2ludChudWxsLG51bGwpLFU9W107MCE9PXouY21wbigwKTt6Lml1c2hybigxKSlVLnB1c2goei5hbmRsbigxKSk7Zm9yKHZhciBXPVUubGVuZ3RoLTE7Vz49MDtXLS0pMD09''@;'; put 'put ''PVVbV10/KE49Ti5kaWZmQWRkKEwsdGhpcyksTD1MLmRibCgpKTooTD1OLmRpZmZBZGQoTCx0aGlzKSxOPU4uZGJsKCkpO3JldHVybiBMfSxQLnByb3RvdHlwZS5tdWxBZGQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIk5vdCBzdXBwb3J0ZWQgb24gTW9udGdvbWVyeSBjdXJ2ZSIpfSxQ''@;'; put 'put ''LnByb3RvdHlwZS5qdW1sQWRkPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJOb3Qgc3VwcG9ydGVkIG9uIE1vbnRnb21lcnkgY3VydmUiKX0sUC5wcm90b3R5cGUuZXE9ZnVuY3Rpb24oTyl7cmV0dXJuIDA9PT10aGlzLmdldFgoKS5jbXAoTy5nZXRYKCkpfSxQLnByb3RvdHlwZS5ub3Jt''@;'; put 'put ''YWxpemU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54PXRoaXMueC5yZWRNdWwodGhpcy56LnJlZEludm0oKSksdGhpcy56PXRoaXMuY3VydmUub25lLHRoaXN9LFAucHJvdG90eXBlLmdldFg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKSx0aGlzLnguZnJvbVJlZCgpfX0sNjY3''@;'; put 'put ''MzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDk1MyksXz15KDM3ODUpLGc9eSg1NzE3KSxCPXkoNDkxOCksdz1JLmFzc2VydDtmdW5jdGlvbiBQKHope0IuY2FsbCh0aGlzLCJzaG9ydCIseiksdGhpcy5hPW5ldyBfKHouYSwxNikudG9SZWQodGhpcy5yZWQpLHRoaXMuYj1uZXcg''@;'; put 'put ''Xyh6LmIsMTYpLnRvUmVkKHRoaXMucmVkKSx0aGlzLnRpbnY9dGhpcy50d28ucmVkSW52bSgpLHRoaXMuemVyb0E9MD09PXRoaXMuYS5mcm9tUmVkKCkuY21wbigwKSx0aGlzLnRocmVlQT0wPT09dGhpcy5hLmZyb21SZWQoKS5zdWIodGhpcy5wKS5jbXBuKC0zKSx0aGlzLmVuZG89dGhpcy5f''@;'; put 'put ''Z2V0RW5kb21vcnBoaXNtKHopLHRoaXMuX2VuZG9XbmFmVDE9bmV3IEFycmF5KDQpLHRoaXMuX2VuZG9XbmFmVDI9bmV3IEFycmF5KDQpfWZ1bmN0aW9uIEYoeixOLEwsSyl7Qi5CYXNlUG9pbnQuY2FsbCh0aGlzLHosImFmZmluZSIpLG51bGw9PT1OJiZudWxsPT09TD8odGhpcy54PW51bGws''@;'; put 'put ''dGhpcy55PW51bGwsdGhpcy5pbmY9ITApOih0aGlzLng9bmV3IF8oTiwxNiksdGhpcy55PW5ldyBfKEwsMTYpLEsmJih0aGlzLnguZm9yY2VSZWQodGhpcy5jdXJ2ZS5yZWQpLHRoaXMueS5mb3JjZVJlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMueC5yZWR8fCh0aGlzLng9dGhpcy54LnRvUmVk''@;'; put 'put ''KHRoaXMuY3VydmUucmVkKSksdGhpcy55LnJlZHx8KHRoaXMueT10aGlzLnkudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLmluZj0hMSl9ZnVuY3Rpb24gTyh6LE4sTCxLKXtCLkJhc2VQb2ludC5jYWxsKHRoaXMseiwiamFjb2JpYW4iKSxudWxsPT09TiYmbnVsbD09PUwmJm51bGw9PT1L''@;'; put 'put ''Pyh0aGlzLng9dGhpcy5jdXJ2ZS5vbmUsdGhpcy55PXRoaXMuY3VydmUub25lLHRoaXMuej1uZXcgXygwKSk6KHRoaXMueD1uZXcgXyhOLDE2KSx0aGlzLnk9bmV3IF8oTCwxNiksdGhpcy56PW5ldyBfKEssMTYpKSx0aGlzLngucmVkfHwodGhpcy54PXRoaXMueC50b1JlZCh0aGlzLmN1cnZl''@;'; put 'put ''LnJlZCkpLHRoaXMueS5yZWR8fCh0aGlzLnk9dGhpcy55LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy56LnJlZHx8KHRoaXMuej10aGlzLnoudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnpPbmU9dGhpcy56PT09dGhpcy5jdXJ2ZS5vbmV9ZyhQLEIpLHVlLmV4cG9ydHM9UCxQLnBy''@;'; put 'put ''b3RvdHlwZS5fZ2V0RW5kb21vcnBoaXNtPWZ1bmN0aW9uKE4pe2lmKHRoaXMuemVyb0EmJnRoaXMuZyYmdGhpcy5uJiYxPT09dGhpcy5wLm1vZG4oMykpe3ZhciBMLEs7aWYoTi5iZXRhKUw9bmV3IF8oTi5iZXRhLDE2KS50b1JlZCh0aGlzLnJlZCk7ZWxzZXt2YXIgVT10aGlzLl9nZXRFbmRv''@;'; put 'put ''Um9vdHModGhpcy5wKTtMPShMPVVbMF0uY21wKFVbMV0pPDA/VVswXTpVWzFdKS50b1JlZCh0aGlzLnJlZCl9aWYoTi5sYW1iZGEpSz1uZXcgXyhOLmxhbWJkYSwxNik7ZWxzZXt2YXIgVz10aGlzLl9nZXRFbmRvUm9vdHModGhpcy5uKTswPT09dGhpcy5nLm11bChXWzBdKS54LmNtcCh0aGlz''@;'; put 'put ''LmcueC5yZWRNdWwoTCkpP0s9V1swXTp3KDA9PT10aGlzLmcubXVsKEs9V1sxXSkueC5jbXAodGhpcy5nLngucmVkTXVsKEwpKSl9cmV0dXJue2JldGE6TCxsYW1iZGE6SyxiYXNpczpOLmJhc2lzP04uYmFzaXMubWFwKGZ1bmN0aW9uKHEpe3JldHVybnthOm5ldyBfKHEuYSwxNiksYjpuZXcg''@;'; put 'put ''XyhxLmIsMTYpfX0pOnRoaXMuX2dldEVuZG9CYXNpcyhLKX19fSxQLnByb3RvdHlwZS5fZ2V0RW5kb1Jvb3RzPWZ1bmN0aW9uKE4pe3ZhciBMPU49PT10aGlzLnA/dGhpcy5yZWQ6Xy5tb250KE4pLEs9bmV3IF8oMikudG9SZWQoTCkucmVkSW52bSgpLFU9Sy5yZWROZWcoKSxXPW5ldyBfKDMp''@;'; put 'put ''LnRvUmVkKEwpLnJlZE5lZygpLnJlZFNxcnQoKS5yZWRNdWwoSyk7cmV0dXJuW1UucmVkQWRkKFcpLmZyb21SZWQoKSxVLnJlZFN1YihXKS5mcm9tUmVkKCldfSxQLnByb3RvdHlwZS5fZ2V0RW5kb0Jhc2lzPWZ1bmN0aW9uKE4pe2Zvcih2YXIgSixuZSxpZSxsZSxtZSxfZSxUZSxqZSxWLEw9''@;'; put 'put ''dGhpcy5uLnVzaHJuKE1hdGguZmxvb3IodGhpcy5uLmJpdExlbmd0aCgpLzIpKSxLPU4sVT10aGlzLm4uY2xvbmUoKSxXPW5ldyBfKDEpLFk9bmV3IF8oMCkscT1uZXcgXygwKSxlZT1uZXcgXygxKSxTZT0wOzAhPT1LLmNtcG4oMCk7KXt2YXIgcD1VLmRpdihLKTtqZT1VLnN1YihwLm11bChL''@;'; put 'put ''KSksVj1xLnN1YihwLm11bChXKSk7dmFyIGI9ZWUuc3ViKHAubXVsKFkpKTtpZighaWUmJmplLmNtcChMKTwwKUo9VGUubmVnKCksbmU9VyxpZT1qZS5uZWcoKSxsZT1WO2Vsc2UgaWYoaWUmJjI9PSsrU2UpYnJlYWs7VGU9amUsVT1LLEs9amUscT1XLFc9VixlZT1ZLFk9Yn1tZT1qZS5uZWco''@;'; put 'put ''KSxfZT1WO3ZhciB4PWllLnNxcigpLmFkZChsZS5zcXIoKSk7cmV0dXJuIG1lLnNxcigpLmFkZChfZS5zcXIoKSkuY21wKHgpPj0wJiYobWU9SixfZT1uZSksaWUubmVnYXRpdmUmJihpZT1pZS5uZWcoKSxsZT1sZS5uZWcoKSksbWUubmVnYXRpdmUmJihtZT1tZS5uZWcoKSxfZT1fZS5uZWco''@;'; put 'put ''KSksW3thOmllLGI6bGV9LHthOm1lLGI6X2V9XX0sUC5wcm90b3R5cGUuX2VuZG9TcGxpdD1mdW5jdGlvbihOKXt2YXIgTD10aGlzLmVuZG8uYmFzaXMsSz1MWzBdLFU9TFsxXSxXPVUuYi5tdWwoTikuZGl2Um91bmQodGhpcy5uKSxZPUsuYi5uZWcoKS5tdWwoTikuZGl2Um91bmQodGhpcy5u''@;'; put 'put ''KSxxPVcubXVsKEsuYSksZWU9WS5tdWwoVS5hKSxKPVcubXVsKEsuYiksbmU9WS5tdWwoVS5iKTtyZXR1cm57azE6Ti5zdWIocSkuc3ViKGVlKSxrMjpKLmFkZChuZSkubmVnKCl9fSxQLnByb3RvdHlwZS5wb2ludEZyb21YPWZ1bmN0aW9uKE4sTCl7KE49bmV3IF8oTiwxNikpLnJlZHx8KE49''@;'; put 'put ''Ti50b1JlZCh0aGlzLnJlZCkpO3ZhciBLPU4ucmVkU3FyKCkucmVkTXVsKE4pLnJlZElBZGQoTi5yZWRNdWwodGhpcy5hKSkucmVkSUFkZCh0aGlzLmIpLFU9Sy5yZWRTcXJ0KCk7aWYoMCE9PVUucmVkU3FyKCkucmVkU3ViKEspLmNtcCh0aGlzLnplcm8pKXRocm93IG5ldyBFcnJvcigiaW52''@;'; put 'put ''YWxpZCBwb2ludCIpO3ZhciBXPVUuZnJvbVJlZCgpLmlzT2RkKCk7cmV0dXJuKEwmJiFXfHwhTCYmVykmJihVPVUucmVkTmVnKCkpLHRoaXMucG9pbnQoTixVKX0sUC5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oTil7aWYoTi5pbmYpcmV0dXJuITA7dmFyIEw9Ti54LEs9Ti55LFU9dGhp''@;'; put 'put ''cy5hLnJlZE11bChMKSxXPUwucmVkU3FyKCkucmVkTXVsKEwpLnJlZElBZGQoVSkucmVkSUFkZCh0aGlzLmIpO3JldHVybiAwPT09Sy5yZWRTcXIoKS5yZWRJU3ViKFcpLmNtcG4oMCl9LFAucHJvdG90eXBlLl9lbmRvV25hZk11bEFkZD1mdW5jdGlvbihOLEwsSyl7Zm9yKHZhciBVPXRoaXMu''@;'; put 'put ''X2VuZG9XbmFmVDEsVz10aGlzLl9lbmRvV25hZlQyLFk9MDtZPE4ubGVuZ3RoO1krKyl7dmFyIHE9dGhpcy5fZW5kb1NwbGl0KExbWV0pLGVlPU5bWV0sSj1lZS5fZ2V0QmV0YSgpO3EuazEubmVnYXRpdmUmJihxLmsxLmluZWcoKSxlZT1lZS5uZWcoITApKSxxLmsyLm5lZ2F0aXZlJiYocS5r''@;'; put 'put ''Mi5pbmVnKCksSj1KLm5lZyghMCkpLFVbMipZXT1lZSxVWzIqWSsxXT1KLFdbMipZXT1xLmsxLFdbMipZKzFdPXEuazJ9Zm9yKHZhciBuZT10aGlzLl93bmFmTXVsQWRkKDEsVSxXLDIqWSxLKSxpZT0wO2llPDIqWTtpZSsrKVVbaWVdPW51bGwsV1tpZV09bnVsbDtyZXR1cm4gbmV9LGcoRixC''@;'; put 'put ''LkJhc2VQb2ludCksUC5wcm90b3R5cGUucG9pbnQ9ZnVuY3Rpb24oTixMLEspe3JldHVybiBuZXcgRih0aGlzLE4sTCxLKX0sUC5wcm90b3R5cGUucG9pbnRGcm9tSlNPTj1mdW5jdGlvbihOLEwpe3JldHVybiBGLmZyb21KU09OKHRoaXMsTixMKX0sRi5wcm90b3R5cGUuX2dldEJldGE9ZnVu''@;'; put 'put ''Y3Rpb24oKXtpZih0aGlzLmN1cnZlLmVuZG8pe3ZhciBOPXRoaXMucHJlY29tcHV0ZWQ7aWYoTiYmTi5iZXRhKXJldHVybiBOLmJldGE7dmFyIEw9dGhpcy5jdXJ2ZS5wb2ludCh0aGlzLngucmVkTXVsKHRoaXMuY3VydmUuZW5kby5iZXRhKSx0aGlzLnkpO2lmKE4pe3ZhciBLPXRoaXMuY3Vy''@;'; put 'put ''dmUsVT1mdW5jdGlvbihXKXtyZXR1cm4gSy5wb2ludChXLngucmVkTXVsKEsuZW5kby5iZXRhKSxXLnkpfTtOLmJldGE9TCxMLnByZWNvbXB1dGVkPXtiZXRhOm51bGwsbmFmOk4ubmFmJiZ7d25kOk4ubmFmLnduZCxwb2ludHM6Ti5uYWYucG9pbnRzLm1hcChVKX0sZG91YmxlczpOLmRvdWJs''@;'; put 'put ''ZXMmJntzdGVwOk4uZG91Ymxlcy5zdGVwLHBvaW50czpOLmRvdWJsZXMucG9pbnRzLm1hcChVKX19fXJldHVybiBMfX0sRi5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJlY29tcHV0ZWQ/W3RoaXMueCx0aGlzLnksdGhpcy5wcmVjb21wdXRlZCYme2RvdWJsZXM6''@;'; put 'put ''dGhpcy5wcmVjb21wdXRlZC5kb3VibGVzJiZ7c3RlcDp0aGlzLnByZWNvbXB1dGVkLmRvdWJsZXMuc3RlcCxwb2ludHM6dGhpcy5wcmVjb21wdXRlZC5kb3VibGVzLnBvaW50cy5zbGljZSgxKX0sbmFmOnRoaXMucHJlY29tcHV0ZWQubmFmJiZ7d25kOnRoaXMucHJlY29tcHV0ZWQubmFmLndu''@;'; put 'put ''ZCxwb2ludHM6dGhpcy5wcmVjb21wdXRlZC5uYWYucG9pbnRzLnNsaWNlKDEpfX1dOlt0aGlzLngsdGhpcy55XX0sRi5mcm9tSlNPTj1mdW5jdGlvbihOLEwsSyl7InN0cmluZyI9PXR5cGVvZiBMJiYoTD1KU09OLnBhcnNlKEwpKTt2YXIgVT1OLnBvaW50KExbMF0sTFsxXSxLKTtpZighTFsy''@;'; put 'put ''XSlyZXR1cm4gVTtmdW5jdGlvbiBXKHEpe3JldHVybiBOLnBvaW50KHFbMF0scVsxXSxLKX12YXIgWT1MWzJdO3JldHVybiBVLnByZWNvbXB1dGVkPXtiZXRhOm51bGwsZG91YmxlczpZLmRvdWJsZXMmJntzdGVwOlkuZG91Ymxlcy5zdGVwLHBvaW50czpbVV0uY29uY2F0KFkuZG91Ymxlcy5w''@;'; put 'put ''b2ludHMubWFwKFcpKX0sbmFmOlkubmFmJiZ7d25kOlkubmFmLnduZCxwb2ludHM6W1VdLmNvbmNhdChZLm5hZi5wb2ludHMubWFwKFcpKX19LFV9LEYucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/IjxFQyBQb2ludCBJbmZpbml0eT4iOiI8''@;'; put 'put ''RUMgUG9pbnQgeDogIit0aGlzLnguZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpKyIgeTogIit0aGlzLnkuZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpKyI+In0sRi5wcm90b3R5cGUuaXNJbmZpbml0eT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmluZn0sRi5wcm90b3R5cGUuYWRkPWZ1bmN0aW9u''@;'; put 'put ''KE4pe2lmKHRoaXMuaW5mKXJldHVybiBOO2lmKE4uaW5mKXJldHVybiB0aGlzO2lmKHRoaXMuZXEoTikpcmV0dXJuIHRoaXMuZGJsKCk7aWYodGhpcy5uZWcoKS5lcShOKSlyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChudWxsLG51bGwpO2lmKDA9PT10aGlzLnguY21wKE4ueCkpcmV0dXJuIHRo''@;'; put 'put ''aXMuY3VydmUucG9pbnQobnVsbCxudWxsKTt2YXIgTD10aGlzLnkucmVkU3ViKE4ueSk7MCE9PUwuY21wbigwKSYmKEw9TC5yZWRNdWwodGhpcy54LnJlZFN1YihOLngpLnJlZEludm0oKSkpO3ZhciBLPUwucmVkU3FyKCkucmVkSVN1Yih0aGlzLngpLnJlZElTdWIoTi54KSxVPUwucmVkTXVs''@;'; put 'put ''KHRoaXMueC5yZWRTdWIoSykpLnJlZElTdWIodGhpcy55KTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChLLFUpfSxGLnByb3RvdHlwZS5kYmw9ZnVuY3Rpb24oKXtpZih0aGlzLmluZilyZXR1cm4gdGhpczt2YXIgTj10aGlzLnkucmVkQWRkKHRoaXMueSk7aWYoMD09PU4uY21wbigwKSlyZXR1''@;'; put 'put ''cm4gdGhpcy5jdXJ2ZS5wb2ludChudWxsLG51bGwpO3ZhciBMPXRoaXMuY3VydmUuYSxLPXRoaXMueC5yZWRTcXIoKSxVPU4ucmVkSW52bSgpLFc9Sy5yZWRBZGQoSykucmVkSUFkZChLKS5yZWRJQWRkKEwpLnJlZE11bChVKSxZPVcucmVkU3FyKCkucmVkSVN1Yih0aGlzLngucmVkQWRkKHRo''@;'; put 'put ''aXMueCkpLHE9Vy5yZWRNdWwodGhpcy54LnJlZFN1YihZKSkucmVkSVN1Yih0aGlzLnkpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KFkscSl9LEYucHJvdG90eXBlLmdldFg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54LmZyb21SZWQoKX0sRi5wcm90b3R5cGUuZ2V0WT1mdW5jdGlvbigpe3Jl''@;'; put 'put ''dHVybiB0aGlzLnkuZnJvbVJlZCgpfSxGLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oTil7cmV0dXJuIE49bmV3IF8oTiwxNiksdGhpcy5pc0luZmluaXR5KCk/dGhpczp0aGlzLl9oYXNEb3VibGVzKE4pP3RoaXMuY3VydmUuX2ZpeGVkTmFmTXVsKHRoaXMsTik6dGhpcy5jdXJ2ZS5lbmRvP3Ro''@;'; put 'put ''aXMuY3VydmUuX2VuZG9XbmFmTXVsQWRkKFt0aGlzXSxbTl0pOnRoaXMuY3VydmUuX3duYWZNdWwodGhpcyxOKX0sRi5wcm90b3R5cGUubXVsQWRkPWZ1bmN0aW9uKE4sTCxLKXt2YXIgVT1bdGhpcyxMXSxXPVtOLEtdO3JldHVybiB0aGlzLmN1cnZlLmVuZG8/dGhpcy5jdXJ2ZS5fZW5kb1du''@;'; put 'put ''YWZNdWxBZGQoVSxXKTp0aGlzLmN1cnZlLl93bmFmTXVsQWRkKDEsVSxXLDIpfSxGLnByb3RvdHlwZS5qbXVsQWRkPWZ1bmN0aW9uKE4sTCxLKXt2YXIgVT1bdGhpcyxMXSxXPVtOLEtdO3JldHVybiB0aGlzLmN1cnZlLmVuZG8/dGhpcy5jdXJ2ZS5fZW5kb1duYWZNdWxBZGQoVSxXLCEwKTp0''@;'; put 'put ''aGlzLmN1cnZlLl93bmFmTXVsQWRkKDEsVSxXLDIsITApfSxGLnByb3RvdHlwZS5lcT1mdW5jdGlvbihOKXtyZXR1cm4gdGhpcz09PU58fHRoaXMuaW5mPT09Ti5pbmYmJih0aGlzLmluZnx8MD09PXRoaXMueC5jbXAoTi54KSYmMD09PXRoaXMueS5jbXAoTi55KSl9LEYucHJvdG90eXBlLm5l''@;'; put 'put ''Zz1mdW5jdGlvbihOKXtpZih0aGlzLmluZilyZXR1cm4gdGhpczt2YXIgTD10aGlzLmN1cnZlLnBvaW50KHRoaXMueCx0aGlzLnkucmVkTmVnKCkpO2lmKE4mJnRoaXMucHJlY29tcHV0ZWQpe3ZhciBLPXRoaXMucHJlY29tcHV0ZWQsVT1mdW5jdGlvbihXKXtyZXR1cm4gVy5uZWcoKX07TC5w''@;'; put 'put ''cmVjb21wdXRlZD17bmFmOksubmFmJiZ7d25kOksubmFmLnduZCxwb2ludHM6Sy5uYWYucG9pbnRzLm1hcChVKX0sZG91YmxlczpLLmRvdWJsZXMmJntzdGVwOksuZG91Ymxlcy5zdGVwLHBvaW50czpLLmRvdWJsZXMucG9pbnRzLm1hcChVKX19fXJldHVybiBMfSxGLnByb3RvdHlwZS50b0o9''@;'; put 'put ''ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbmY/dGhpcy5jdXJ2ZS5qcG9pbnQobnVsbCxudWxsLG51bGwpOnRoaXMuY3VydmUuanBvaW50KHRoaXMueCx0aGlzLnksdGhpcy5jdXJ2ZS5vbmUpfSxnKE8sQi5CYXNlUG9pbnQpLFAucHJvdG90eXBlLmpwb2ludD1mdW5jdGlvbihOLEwsSyl7cmV0''@;'; put 'put ''dXJuIG5ldyBPKHRoaXMsTixMLEspfSxPLnByb3RvdHlwZS50b1A9ZnVuY3Rpb24oKXtpZih0aGlzLmlzSW5maW5pdHkoKSlyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChudWxsLG51bGwpO3ZhciBOPXRoaXMuei5yZWRJbnZtKCksTD1OLnJlZFNxcigpLEs9dGhpcy54LnJlZE11bChMKSxVPXRo''@;'; put 'put ''aXMueS5yZWRNdWwoTCkucmVkTXVsKE4pO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KEssVSl9LE8ucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnZlLmpwb2ludCh0aGlzLngsdGhpcy55LnJlZE5lZygpLHRoaXMueil9LE8ucHJvdG90eXBlLmFkZD1mdW5jdGlvbihO''@;'; put 'put ''KXtpZih0aGlzLmlzSW5maW5pdHkoKSlyZXR1cm4gTjtpZihOLmlzSW5maW5pdHkoKSlyZXR1cm4gdGhpczt2YXIgTD1OLnoucmVkU3FyKCksSz10aGlzLnoucmVkU3FyKCksVT10aGlzLngucmVkTXVsKEwpLFc9Ti54LnJlZE11bChLKSxZPXRoaXMueS5yZWRNdWwoTC5yZWRNdWwoTi56KSks''@;'; put 'put ''cT1OLnkucmVkTXVsKEsucmVkTXVsKHRoaXMueikpLGVlPVUucmVkU3ViKFcpLEo9WS5yZWRTdWIocSk7aWYoMD09PWVlLmNtcG4oMCkpcmV0dXJuIDAhPT1KLmNtcG4oMCk/dGhpcy5jdXJ2ZS5qcG9pbnQobnVsbCxudWxsLG51bGwpOnRoaXMuZGJsKCk7dmFyIG5lPWVlLnJlZFNxcigpLGll''@;'; put 'put ''PW5lLnJlZE11bChlZSksbGU9VS5yZWRNdWwobmUpLG1lPUoucmVkU3FyKCkucmVkSUFkZChpZSkucmVkSVN1YihsZSkucmVkSVN1YihsZSksX2U9Si5yZWRNdWwobGUucmVkSVN1YihtZSkpLnJlZElTdWIoWS5yZWRNdWwoaWUpKSxUZT10aGlzLnoucmVkTXVsKE4ueikucmVkTXVsKGVlKTty''@;'; put 'put ''ZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQobWUsX2UsVGUpfSxPLnByb3RvdHlwZS5taXhlZEFkZD1mdW5jdGlvbihOKXtpZih0aGlzLmlzSW5maW5pdHkoKSlyZXR1cm4gTi50b0ooKTtpZihOLmlzSW5maW5pdHkoKSlyZXR1cm4gdGhpczt2YXIgTD10aGlzLnoucmVkU3FyKCksSz10aGlzLngs''@;'; put 'put ''VT1OLngucmVkTXVsKEwpLFc9dGhpcy55LFk9Ti55LnJlZE11bChMKS5yZWRNdWwodGhpcy56KSxxPUsucmVkU3ViKFUpLGVlPVcucmVkU3ViKFkpO2lmKDA9PT1xLmNtcG4oMCkpcmV0dXJuIDAhPT1lZS5jbXBuKDApP3RoaXMuY3VydmUuanBvaW50KG51bGwsbnVsbCxudWxsKTp0aGlzLmRi''@;'; put 'put ''bCgpO3ZhciBKPXEucmVkU3FyKCksbmU9Si5yZWRNdWwocSksaWU9Sy5yZWRNdWwoSiksbGU9ZWUucmVkU3FyKCkucmVkSUFkZChuZSkucmVkSVN1YihpZSkucmVkSVN1YihpZSksbWU9ZWUucmVkTXVsKGllLnJlZElTdWIobGUpKS5yZWRJU3ViKFcucmVkTXVsKG5lKSksX2U9dGhpcy56LnJl''@;'; put 'put ''ZE11bChxKTtyZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQobGUsbWUsX2UpfSxPLnByb3RvdHlwZS5kYmxwPWZ1bmN0aW9uKE4pe2lmKDA9PT1OKXJldHVybiB0aGlzO2lmKHRoaXMuaXNJbmZpbml0eSgpKXJldHVybiB0aGlzO2lmKCFOKXJldHVybiB0aGlzLmRibCgpO3ZhciBMO2lmKHRoaXMu''@;'; put 'put ''Y3VydmUuemVyb0F8fHRoaXMuY3VydmUudGhyZWVBKXt2YXIgSz10aGlzO2ZvcihMPTA7TDxOO0wrKylLPUsuZGJsKCk7cmV0dXJuIEt9dmFyIFU9dGhpcy5jdXJ2ZS5hLFc9dGhpcy5jdXJ2ZS50aW52LFk9dGhpcy54LHE9dGhpcy55LGVlPXRoaXMueixKPWVlLnJlZFNxcigpLnJlZFNxcigp''@;'; put 'put ''LG5lPXEucmVkQWRkKHEpO2ZvcihMPTA7TDxOO0wrKyl7dmFyIGllPVkucmVkU3FyKCksbGU9bmUucmVkU3FyKCksbWU9bGUucmVkU3FyKCksX2U9aWUucmVkQWRkKGllKS5yZWRJQWRkKGllKS5yZWRJQWRkKFUucmVkTXVsKEopKSxUZT1ZLnJlZE11bChsZSksU2U9X2UucmVkU3FyKCkucmVk''@;'; put 'put ''SVN1YihUZS5yZWRBZGQoVGUpKSxqZT1UZS5yZWRJU3ViKFNlKSxWPV9lLnJlZE11bChqZSk7Vj1WLnJlZElBZGQoVikucmVkSVN1YihtZSk7dmFyIHA9bmUucmVkTXVsKGVlKTtMKzE8TiYmKEo9Si5yZWRNdWwobWUpKSxZPVNlLGVlPXAsbmU9Vn1yZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQo''@;'; put 'put ''WSxuZS5yZWRNdWwoVyksZWUpfSxPLnByb3RvdHlwZS5kYmw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/dGhpczp0aGlzLmN1cnZlLnplcm9BP3RoaXMuX3plcm9EYmwoKTp0aGlzLmN1cnZlLnRocmVlQT90aGlzLl90aHJlZURibCgpOnRoaXMuX2RibCgpfSxPLnByb3Rv''@;'; put 'put ''dHlwZS5femVyb0RibD1mdW5jdGlvbigpe3ZhciBOLEwsSztpZih0aGlzLnpPbmUpe3ZhciBVPXRoaXMueC5yZWRTcXIoKSxXPXRoaXMueS5yZWRTcXIoKSxZPVcucmVkU3FyKCkscT10aGlzLngucmVkQWRkKFcpLnJlZFNxcigpLnJlZElTdWIoVSkucmVkSVN1YihZKTtxPXEucmVkSUFkZChx''@;'; put 'put ''KTt2YXIgZWU9VS5yZWRBZGQoVSkucmVkSUFkZChVKSxKPWVlLnJlZFNxcigpLnJlZElTdWIocSkucmVkSVN1YihxKSxuZT1ZLnJlZElBZGQoWSk7bmU9KG5lPW5lLnJlZElBZGQobmUpKS5yZWRJQWRkKG5lKSxOPUosTD1lZS5yZWRNdWwocS5yZWRJU3ViKEopKS5yZWRJU3ViKG5lKSxLPXRo''@;'; put 'put ''aXMueS5yZWRBZGQodGhpcy55KX1lbHNle3ZhciBpZT10aGlzLngucmVkU3FyKCksbGU9dGhpcy55LnJlZFNxcigpLG1lPWxlLnJlZFNxcigpLF9lPXRoaXMueC5yZWRBZGQobGUpLnJlZFNxcigpLnJlZElTdWIoaWUpLnJlZElTdWIobWUpO19lPV9lLnJlZElBZGQoX2UpO3ZhciBUZT1pZS5y''@;'; put 'put ''ZWRBZGQoaWUpLnJlZElBZGQoaWUpLFNlPVRlLnJlZFNxcigpLGplPW1lLnJlZElBZGQobWUpO2plPShqZT1qZS5yZWRJQWRkKGplKSkucmVkSUFkZChqZSksTj1TZS5yZWRJU3ViKF9lKS5yZWRJU3ViKF9lKSxMPVRlLnJlZE11bChfZS5yZWRJU3ViKE4pKS5yZWRJU3ViKGplKSxLPShLPXRo''@;'; put 'put ''aXMueS5yZWRNdWwodGhpcy56KSkucmVkSUFkZChLKX1yZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQoTixMLEspfSxPLnByb3RvdHlwZS5fdGhyZWVEYmw9ZnVuY3Rpb24oKXt2YXIgTixMLEs7aWYodGhpcy56T25lKXt2YXIgVT10aGlzLngucmVkU3FyKCksVz10aGlzLnkucmVkU3FyKCksWT1X''@;'; put 'put ''LnJlZFNxcigpLHE9dGhpcy54LnJlZEFkZChXKS5yZWRTcXIoKS5yZWRJU3ViKFUpLnJlZElTdWIoWSk7cT1xLnJlZElBZGQocSk7dmFyIGVlPVUucmVkQWRkKFUpLnJlZElBZGQoVSkucmVkSUFkZCh0aGlzLmN1cnZlLmEpLEo9ZWUucmVkU3FyKCkucmVkSVN1YihxKS5yZWRJU3ViKHEpO049''@;'; put 'put ''Sjt2YXIgbmU9WS5yZWRJQWRkKFkpO25lPShuZT1uZS5yZWRJQWRkKG5lKSkucmVkSUFkZChuZSksTD1lZS5yZWRNdWwocS5yZWRJU3ViKEopKS5yZWRJU3ViKG5lKSxLPXRoaXMueS5yZWRBZGQodGhpcy55KX1lbHNle3ZhciBpZT10aGlzLnoucmVkU3FyKCksbGU9dGhpcy55LnJlZFNxcigp''@;'; put 'put ''LG1lPXRoaXMueC5yZWRNdWwobGUpLF9lPXRoaXMueC5yZWRTdWIoaWUpLnJlZE11bCh0aGlzLngucmVkQWRkKGllKSk7X2U9X2UucmVkQWRkKF9lKS5yZWRJQWRkKF9lKTt2YXIgVGU9bWUucmVkSUFkZChtZSksU2U9KFRlPVRlLnJlZElBZGQoVGUpKS5yZWRBZGQoVGUpO049X2UucmVkU3Fy''@;'; put 'put ''KCkucmVkSVN1YihTZSksSz10aGlzLnkucmVkQWRkKHRoaXMueikucmVkU3FyKCkucmVkSVN1YihsZSkucmVkSVN1YihpZSk7dmFyIGplPWxlLnJlZFNxcigpO2plPShqZT0oamU9amUucmVkSUFkZChqZSkpLnJlZElBZGQoamUpKS5yZWRJQWRkKGplKSxMPV9lLnJlZE11bChUZS5yZWRJU3Vi''@;'; put 'put ''KE4pKS5yZWRJU3ViKGplKX1yZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQoTixMLEspfSxPLnByb3RvdHlwZS5fZGJsPWZ1bmN0aW9uKCl7dmFyIE49dGhpcy5jdXJ2ZS5hLEw9dGhpcy54LEs9dGhpcy55LFU9dGhpcy56LFc9VS5yZWRTcXIoKS5yZWRTcXIoKSxZPUwucmVkU3FyKCkscT1LLnJl''@;'; put 'put ''ZFNxcigpLGVlPVkucmVkQWRkKFkpLnJlZElBZGQoWSkucmVkSUFkZChOLnJlZE11bChXKSksSj1MLnJlZEFkZChMKSxuZT0oSj1KLnJlZElBZGQoSikpLnJlZE11bChxKSxpZT1lZS5yZWRTcXIoKS5yZWRJU3ViKG5lLnJlZEFkZChuZSkpLGxlPW5lLnJlZElTdWIoaWUpLG1lPXEucmVkU3Fy''@;'; put 'put ''KCk7bWU9KG1lPShtZT1tZS5yZWRJQWRkKG1lKSkucmVkSUFkZChtZSkpLnJlZElBZGQobWUpO3ZhciBfZT1lZS5yZWRNdWwobGUpLnJlZElTdWIobWUpLFRlPUsucmVkQWRkKEspLnJlZE11bChVKTtyZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQoaWUsX2UsVGUpfSxPLnByb3RvdHlwZS50cnBs''@;'; put 'put ''PWZ1bmN0aW9uKCl7aWYoIXRoaXMuY3VydmUuemVyb0EpcmV0dXJuIHRoaXMuZGJsKCkuYWRkKHRoaXMpO3ZhciBOPXRoaXMueC5yZWRTcXIoKSxMPXRoaXMueS5yZWRTcXIoKSxLPXRoaXMuei5yZWRTcXIoKSxVPUwucmVkU3FyKCksVz1OLnJlZEFkZChOKS5yZWRJQWRkKE4pLFk9Vy5yZWRT''@;'; put 'put ''cXIoKSxxPXRoaXMueC5yZWRBZGQoTCkucmVkU3FyKCkucmVkSVN1YihOKS5yZWRJU3ViKFUpLGVlPShxPShxPShxPXEucmVkSUFkZChxKSkucmVkQWRkKHEpLnJlZElBZGQocSkpLnJlZElTdWIoWSkpLnJlZFNxcigpLEo9VS5yZWRJQWRkKFUpO0o9KEo9KEo9Si5yZWRJQWRkKEopKS5yZWRJ''@;'; put 'put ''QWRkKEopKS5yZWRJQWRkKEopO3ZhciBuZT1XLnJlZElBZGQocSkucmVkU3FyKCkucmVkSVN1YihZKS5yZWRJU3ViKGVlKS5yZWRJU3ViKEopLGllPUwucmVkTXVsKG5lKTtpZT0oaWU9aWUucmVkSUFkZChpZSkpLnJlZElBZGQoaWUpO3ZhciBsZT10aGlzLngucmVkTXVsKGVlKS5yZWRJU3Vi''@;'; put 'put ''KGllKTtsZT0obGU9bGUucmVkSUFkZChsZSkpLnJlZElBZGQobGUpO3ZhciBtZT10aGlzLnkucmVkTXVsKG5lLnJlZE11bChKLnJlZElTdWIobmUpKS5yZWRJU3ViKHEucmVkTXVsKGVlKSkpO21lPShtZT0obWU9bWUucmVkSUFkZChtZSkpLnJlZElBZGQobWUpKS5yZWRJQWRkKG1lKTt2YXIg''@;'; put 'put ''X2U9dGhpcy56LnJlZEFkZChxKS5yZWRTcXIoKS5yZWRJU3ViKEspLnJlZElTdWIoZWUpO3JldHVybiB0aGlzLmN1cnZlLmpwb2ludChsZSxtZSxfZSl9LE8ucHJvdG90eXBlLm11bD1mdW5jdGlvbihOLEwpe3JldHVybiBOPW5ldyBfKE4sTCksdGhpcy5jdXJ2ZS5fd25hZk11bCh0aGlzLE4p''@;'; put 'put ''fSxPLnByb3RvdHlwZS5lcT1mdW5jdGlvbihOKXtpZigiYWZmaW5lIj09PU4udHlwZSlyZXR1cm4gdGhpcy5lcShOLnRvSigpKTtpZih0aGlzPT09TilyZXR1cm4hMDt2YXIgTD10aGlzLnoucmVkU3FyKCksSz1OLnoucmVkU3FyKCk7aWYoMCE9PXRoaXMueC5yZWRNdWwoSykucmVkSVN1YihO''@;'; put 'put ''LngucmVkTXVsKEwpKS5jbXBuKDApKXJldHVybiExO3ZhciBVPUwucmVkTXVsKHRoaXMueiksVz1LLnJlZE11bChOLnopO3JldHVybiAwPT09dGhpcy55LnJlZE11bChXKS5yZWRJU3ViKE4ueS5yZWRNdWwoVSkpLmNtcG4oMCl9LE8ucHJvdG90eXBlLmVxWFRvUD1mdW5jdGlvbihOKXt2YXIg''@;'; put 'put ''TD10aGlzLnoucmVkU3FyKCksSz1OLnRvUmVkKHRoaXMuY3VydmUucmVkKS5yZWRNdWwoTCk7aWYoMD09PXRoaXMueC5jbXAoSykpcmV0dXJuITA7Zm9yKHZhciBVPU4uY2xvbmUoKSxXPXRoaXMuY3VydmUucmVkTi5yZWRNdWwoTCk7Oyl7aWYoVS5pYWRkKHRoaXMuY3VydmUubiksVS5jbXAo''@;'; put 'put ''dGhpcy5jdXJ2ZS5wKT49MClyZXR1cm4hMTtpZihLLnJlZElBZGQoVyksMD09PXRoaXMueC5jbXAoSykpcmV0dXJuITB9fSxPLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpPyI8RUMgSlBvaW50IEluZmluaXR5PiI6IjxFQyBKUG9pbnQgeDog''@;'; put 'put ''Iit0aGlzLngudG9TdHJpbmcoMTYsMikrIiB5OiAiK3RoaXMueS50b1N0cmluZygxNiwyKSsiIHo6ICIrdGhpcy56LnRvU3RyaW5nKDE2LDIpKyI+In0sTy5wcm90b3R5cGUuaXNJbmZpbml0eT1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy56LmNtcG4oMCl9fSw1NDI3Oih1ZSxYLHkpPT57''@;'; put 'put ''InVzZSBzdHJpY3QiO3ZhciBPLEk9WCxfPXkoMzcxNSksZz15KDgyNTQpLHc9eSg5NTMpLmFzc2VydDtmdW5jdGlvbiBQKHope3RoaXMuY3VydmU9InNob3J0Ij09PXoudHlwZT9uZXcgZy5zaG9ydCh6KToiZWR3YXJkcyI9PT16LnR5cGU/bmV3IGcuZWR3YXJkcyh6KTpuZXcgZy5tb250KHop''@;'; put 'put ''LHRoaXMuZz10aGlzLmN1cnZlLmcsdGhpcy5uPXRoaXMuY3VydmUubix0aGlzLmhhc2g9ei5oYXNoLHcodGhpcy5nLnZhbGlkYXRlKCksIkludmFsaWQgY3VydmUiKSx3KHRoaXMuZy5tdWwodGhpcy5uKS5pc0luZmluaXR5KCksIkludmFsaWQgY3VydmUsIEcqTiAhPSBPIil9ZnVuY3Rpb24g''@;'; put 'put ''Rih6LE4pe09iamVjdC5kZWZpbmVQcm9wZXJ0eShJLHose2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3ZhciBMPW5ldyBQKE4pO3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoSSx6LHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTpM''@;'; put 'put ''fSksTH19KX1JLlByZXNldEN1cnZlPVAsRigicDE5MiIse3R5cGU6InNob3J0IixwcmltZToicDE5MiIscDoiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYiLGE6ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZm''@;'; put 'put ''IGZmZmZmZmZjIixiOiI2NDIxMDUxOSBlNTljODBlNyAwZmE3ZTlhYiA3MjI0MzA0OSBmZWI4ZGVlYyBjMTQ2YjliMSIsbjoiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgOTlkZWY4MzYgMTQ2YmM5YjEgYjRkMjI4MzEiLGhhc2g6Xy5zaGEyNTYsZ1JlZDohMSxnOlsiMTg4ZGE4MGUgYjAz''@;'; put 'put ''MDkwZjYgN2NiZjIwZWIgNDNhMTg4MDAgZjRmZjBhZmQgODJmZjEwMTIiLCIwNzE5MmI5NSBmZmM4ZGE3OCA2MzEwMTFlZCA2YjI0Y2RkNSA3M2Y5NzdhMSAxZTc5NDgxMSJdfSksRigicDIyNCIse3R5cGU6InNob3J0IixwcmltZToicDIyNCIscDoiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZm''@;'; put 'put ''ZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEiLGE6ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIixiOiJiNDA1MGE4NSAwYzA0YjNhYiBmNTQxMzI1NiA1MDQ0YjBiNyBkN2JmZDhiYSAyNzBiMzk0MyAy''@;'; put 'put ''MzU1ZmZiNCIsbjoiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZjE2YTIgZTBiOGYwM2UgMTNkZDI5NDUgNWM1YzJhM2QiLGhhc2g6Xy5zaGEyNTYsZ1JlZDohMSxnOlsiYjcwZTBjYmQgNmJiNGJmN2YgMzIxMzkwYjkgNGEwM2MxZDMgNTZjMjExMjIgMzQzMjgwZDYgMTE1YzFkMjEi''@;'; put 'put ''LCJiZDM3NjM4OCBiNWY3MjNmYiA0YzIyZGZlNiBjZDQzNzVhMCA1YTA3NDc2NCA0NGQ1ODE5OSA4NTAwN2UzNCJdfSksRigicDI1NiIse3R5cGU6InNob3J0IixwcmltZTpudWxsLHA6ImZmZmZmZmZmIDAwMDAwMDAxIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAwIGZmZmZmZmZmIGZmZmZm''@;'; put 'put ''ZmZmIGZmZmZmZmZmIixhOiJmZmZmZmZmZiAwMDAwMDAwMSAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMCBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmYyIsYjoiNWFjNjM1ZDggYWEzYTkzZTcgYjNlYmJkNTUgNzY5ODg2YmMgNjUxZDA2YjAgY2M1M2IwZjYgM2JjZTNjM2UgMjdkMjYwNGIi''@;'; put 'put ''LG46ImZmZmZmZmZmIDAwMDAwMDAwIGZmZmZmZmZmIGZmZmZmZmZmIGJjZTZmYWFkIGE3MTc5ZTg0IGYzYjljYWMyIGZjNjMyNTUxIixoYXNoOl8uc2hhMjU2LGdSZWQ6ITEsZzpbIjZiMTdkMWYyIGUxMmM0MjQ3IGY4YmNlNmU1IDYzYTQ0MGYyIDc3MDM3ZDgxIDJkZWIzM2EwIGY0YTEzOTQ1''@;'; put 'put ''IGQ4OThjMjk2IiwiNGZlMzQyZTIgZmUxYTdmOWIgOGVlN2ViNGEgN2MwZjllMTYgMmJjZTMzNTcgNmIzMTVlY2UgY2JiNjQwNjggMzdiZjUxZjUiXX0pLEYoInAzODQiLHt0eXBlOiJzaG9ydCIscHJpbWU6bnVsbCxwOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZm''@;'; put 'put ''ZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCBmZmZmZmZmZiIsYToiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgMDAwMDAwMDAgMDAw''@;'; put 'put ''MDAwMDAgZmZmZmZmZmMiLGI6ImIzMzEyZmE3IGUyM2VlN2U0IDk4OGUwNTZiIGUzZjgyZDE5IDE4MWQ5YzZlIGZlODE0MTEyIDAzMTQwODhmIDUwMTM4NzVhIGM2NTYzOThkIDhhMmVkMTlkIDJhODVjOGVkIGQzZWMyYWVmIixuOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZm''@;'; put 'put ''ZiBmZmZmZmZmZiBmZmZmZmZmZiBjNzYzNGQ4MSBmNDM3MmRkZiA1ODFhMGRiMiA0OGIwYTc3YSBlY2VjMTk2YSBjY2M1Mjk3MyIsaGFzaDpfLnNoYTM4NCxnUmVkOiExLGc6WyJhYTg3Y2EyMiBiZThiMDUzNyA4ZWIxYzcxZSBmMzIwYWQ3NCA2ZTFkM2I2MiA4YmE3OWI5OCA1OWY3NDFlMCA4''@;'; put 'put ''MjU0MmEzOCA1NTAyZjI1ZCBiZjU1Mjk2YyAzYTU0NWUzOCA3Mjc2MGFiNyIsIjM2MTdkZTRhIDk2MjYyYzZmIDVkOWU5OGJmIDkyOTJkYzI5IGY4ZjQxZGJkIDI4OWExNDdjIGU5ZGEzMTEzIGI1ZjBiOGMwIDBhNjBiMWNlIDFkN2U4MTlkIDdhNDMxZDdjIDkwZWEwZTVmIl19KSxGKCJwNTIx''@;'; put 'put ''Iix7dHlwZToic2hvcnQiLHByaW1lOm51bGwscDoiMDAwMDAxZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYg''@;'; put 'put ''ZmZmZmZmZmYgZmZmZmZmZmYiLGE6IjAwMDAwMWZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZm''@;'; put 'put ''IGZmZmZmZmZjIixiOiIwMDAwMDA1MSA5NTNlYjk2MSA4ZTFjOWExZiA5MjlhMjFhMCBiNjg1NDBlZSBhMmRhNzI1YiA5OWIzMTVmMyBiOGI0ODk5MSA4ZWYxMDllMSA1NjE5Mzk1MSBlYzdlOTM3YiAxNjUyYzBiZCAzYmIxYmYwNyAzNTczZGY4OCAzZDJjMzRmMSBlZjQ1MWZkNCA2YjUwM2Yw''@;'; put 'put ''MCIsbjoiMDAwMDAxZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmEgNTE4Njg3ODMgYmYyZjk2NmIgN2ZjYzAxNDggZjcwOWE1ZDAgM2JiNWM5YjggODk5YzQ3YWUgYmI2ZmI3MWUgOTEzODY0MDkiLGhhc2g6''@;'; put 'put ''Xy5zaGE1MTIsZ1JlZDohMSxnOlsiMDAwMDAwYzYgODU4ZTA2YjcgMDQwNGU5Y2QgOWUzZWNiNjYgMjM5NWI0NDIgOWM2NDgxMzkgMDUzZmI1MjEgZjgyOGFmNjAgNmI0ZDNkYmEgYTE0YjVlNzcgZWZlNzU5MjggZmUxZGMxMjcgYTJmZmE4ZGUgMzM0OGIzYzEgODU2YTQyOWIgZjk3ZTdlMzEg''@;'; put 'put ''YzJlNWJkNjYiLCIwMDAwMDExOCAzOTI5NmE3OCA5YTNiYzAwNCA1YzhhNWZiNCAyYzdkMWJkOSA5OGY1NDQ0OSA1NzliNDQ2OCAxN2FmYmQxNyAyNzNlNjYyYyA5N2VlNzI5OSA1ZWY0MjY0MCBjNTUwYjkwMSAzZmFkMDc2MSAzNTNjNzA4NiBhMjcyYzI0MCA4OGJlOTQ3NiA5ZmQxNjY1MCJd''@;'; put 'put ''fSksRigiY3VydmUyNTUxOSIse3R5cGU6Im1vbnQiLHByaW1lOiJwMjU1MTkiLHA6IjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiLGE6Ijc2ZDA2IixiOiIxIixuOiIxMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAw''@;'; put 'put ''MDAwMDAgMTRkZWY5ZGVhMmY3OWNkNiA1ODEyNjMxYTVjZjVkM2VkIixoYXNoOl8uc2hhMjU2LGdSZWQ6ITEsZzpbIjkiXX0pLEYoImVkMjU1MTkiLHt0eXBlOiJlZHdhcmRzIixwcmltZToicDI1NTE5IixwOiI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZm''@;'; put 'put ''ZmZmZiBmZmZmZmZmZmZmZmZmZmVkIixhOiItMSIsYzoiMSIsZDoiNTIwMzZjZWUyYjZmZmU3MyA4Y2M3NDA3OTc3NzllODk4IDAwNzAwYTRkNDE0MWQ4YWIgNzVlYjRkY2ExMzU5NzhhMyIsbjoiMTAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwIDE0ZGVmOWRlYTJmNzljZDYgNTgx''@;'; put 'put ''MjYzMWE1Y2Y1ZDNlZCIsaGFzaDpfLnNoYTI1NixnUmVkOiExLGc6WyIyMTY5MzZkM2NkNmU1M2ZlYzBhNGUyMzFmZGQ2ZGM1YzY5MmNjNzYwOTUyNWE3YjJjOTU2MmQ2MDhmMjVkNTFhIiwiNjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2''@;'; put 'put ''NjY2NjY1OCJdfSk7dHJ5e089eSgxMDM3KX1jYXRjaHtPPXZvaWQgMH1GKCJzZWNwMjU2azEiLHt0eXBlOiJzaG9ydCIscHJpbWU6ImsyNTYiLHA6ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmIixhOiIwIixi''@;'; put 'put ''OiI3IixuOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBiYWFlZGNlNiBhZjQ4YTAzYiBiZmQyNWU4YyBkMDM2NDE0MSIsaDoiMSIsaGFzaDpfLnNoYTI1NixiZXRhOiI3YWU5NmEyYjY1N2MwNzEwNmU2NDQ3OWVhYzM0MzRlOTljZjA0OTc1MTJmNTg5OTVjMTM5NmMyODcx''@;'; put 'put ''OTUwMWVlIixsYW1iZGE6IjUzNjNhZDRjYzA1YzMwZTBhNTI2MWMwMjg4MTI2NDVhMTIyZTIyZWEyMDgxNjY3OGRmMDI5NjdjMWIyM2JkNzIiLGJhc2lzOlt7YToiMzA4NmQyMjFhN2Q0NmJjZGU4NmM5MGU0OTI4NGViMTUiLGI6Ii1lNDQzN2VkNjAxMGU4ODI4NmY1NDdmYTkwYWJmZTRjMyJ9''@;'; put 'put ''LHthOiIxMTRjYTUwZjdhOGUyZjNmNjU3YzExMDhkOWQ0NGNmZDgiLGI6IjMwODZkMjIxYTdkNDZiY2RlODZjOTBlNDkyODRlYjE1In1dLGdSZWQ6ITEsZzpbIjc5YmU2NjdlZjlkY2JiYWM1NWEwNjI5NWNlODcwYjA3MDI5YmZjZGIyZGNlMjhkOTU5ZjI4MTViMTZmODE3OTgiLCI0ODNhZGE3''@;'; put 'put ''NzI2YTNjNDY1NWRhNGZiZmMwZTExMDhhOGZkMTdiNDQ4YTY4NTU0MTk5YzQ3ZDA4ZmZiMTBkNGI4IixPXX0pfSw3OTU0Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMzc4NSksXz15KDIxNTYpLGc9eSg5NTMpLEI9eSg1NDI3KSx3PXkoOTkzMSksUD1nLmFzc2VydCxGPXkoMTI1''@;'; put 'put ''MSksTz15KDYxMSk7ZnVuY3Rpb24geihOKXtpZighKHRoaXMgaW5zdGFuY2VvZiB6KSlyZXR1cm4gbmV3IHooTik7InN0cmluZyI9PXR5cGVvZiBOJiYoUChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoQixOKSwiVW5rbm93biBjdXJ2ZSAiK04pLE49QltOXSksTiBpbnN0''@;'; 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 ''b3IiKX19LDEyNTE6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgzNzg1KSxnPXkoOTUzKS5hc3NlcnQ7ZnVuY3Rpb24gQih3LFApe3RoaXMuZWM9dyx0aGlzLnByaXY9bnVsbCx0aGlzLnB1Yj1udWxsLFAucHJpdiYmdGhpcy5faW1wb3J0UHJpdmF0ZShQLnByaXYsUC5wcml2RW5j''@;'; put 'put ''KSxQLnB1YiYmdGhpcy5faW1wb3J0UHVibGljKFAucHViLFAucHViRW5jKX11ZS5leHBvcnRzPUIsQi5mcm9tUHVibGljPWZ1bmN0aW9uKFAsRixPKXtyZXR1cm4gRiBpbnN0YW5jZW9mIEI/RjpuZXcgQihQLHtwdWI6RixwdWJFbmM6T30pfSxCLmZyb21Qcml2YXRlPWZ1bmN0aW9uKFAsRixP''@;'; put 'put ''KXtyZXR1cm4gRiBpbnN0YW5jZW9mIEI/RjpuZXcgQihQLHtwcml2OkYscHJpdkVuYzpPfSl9LEIucHJvdG90eXBlLnZhbGlkYXRlPWZ1bmN0aW9uKCl7dmFyIFA9dGhpcy5nZXRQdWJsaWMoKTtyZXR1cm4gUC5pc0luZmluaXR5KCk/e3Jlc3VsdDohMSxyZWFzb246IkludmFsaWQgcHVibGlj''@;'; put 'put ''IGtleSJ9OlAudmFsaWRhdGUoKT9QLm11bCh0aGlzLmVjLmN1cnZlLm4pLmlzSW5maW5pdHkoKT97cmVzdWx0OiEwLHJlYXNvbjpudWxsfTp7cmVzdWx0OiExLHJlYXNvbjoiUHVibGljIGtleSAqIE4gIT0gTyJ9OntyZXN1bHQ6ITEscmVhc29uOiJQdWJsaWMga2V5IGlzIG5vdCBhIHBvaW50''@;'; put 'put ''In19LEIucHJvdG90eXBlLmdldFB1YmxpYz1mdW5jdGlvbihQLEYpe3JldHVybiJzdHJpbmciPT10eXBlb2YgUCYmKEY9UCxQPW51bGwpLHRoaXMucHVifHwodGhpcy5wdWI9dGhpcy5lYy5nLm11bCh0aGlzLnByaXYpKSxGP3RoaXMucHViLmVuY29kZShGLFApOnRoaXMucHVifSxCLnByb3Rv''@;'; put 'put ''dHlwZS5nZXRQcml2YXRlPWZ1bmN0aW9uKFApe3JldHVybiJoZXgiPT09UD90aGlzLnByaXYudG9TdHJpbmcoMTYsMik6dGhpcy5wcml2fSxCLnByb3RvdHlwZS5faW1wb3J0UHJpdmF0ZT1mdW5jdGlvbihQLEYpe3RoaXMucHJpdj1uZXcgSShQLEZ8fDE2KSx0aGlzLnByaXY9dGhpcy5wcml2''@;'; put 'put ''LnVtb2QodGhpcy5lYy5jdXJ2ZS5uKX0sQi5wcm90b3R5cGUuX2ltcG9ydFB1YmxpYz1mdW5jdGlvbihQLEYpe2lmKFAueHx8UC55KXJldHVybiJtb250Ij09PXRoaXMuZWMuY3VydmUudHlwZT9nKFAueCwiTmVlZCB4IGNvb3JkaW5hdGUiKTooInNob3J0Ij09PXRoaXMuZWMuY3VydmUudHlw''@;'; put 'put ''ZXx8ImVkd2FyZHMiPT09dGhpcy5lYy5jdXJ2ZS50eXBlKSYmZyhQLngmJlAueSwiTmVlZCBib3RoIHggYW5kIHkgY29vcmRpbmF0ZSIpLHZvaWQodGhpcy5wdWI9dGhpcy5lYy5jdXJ2ZS5wb2ludChQLngsUC55KSk7dGhpcy5wdWI9dGhpcy5lYy5jdXJ2ZS5kZWNvZGVQb2ludChQLEYpfSxC''@;'; put 'put ''LnByb3RvdHlwZS5kZXJpdmU9ZnVuY3Rpb24oUCl7cmV0dXJuIFAudmFsaWRhdGUoKXx8ZyhQLnZhbGlkYXRlKCksInB1YmxpYyBwb2ludCBub3QgdmFsaWRhdGVkIiksUC5tdWwodGhpcy5wcml2KS5nZXRYKCl9LEIucHJvdG90eXBlLnNpZ249ZnVuY3Rpb24oUCxGLE8pe3JldHVybiB0aGlz''@;'; put 'put ''LmVjLnNpZ24oUCx0aGlzLEYsTyl9LEIucHJvdG90eXBlLnZlcmlmeT1mdW5jdGlvbihQLEYsTyl7cmV0dXJuIHRoaXMuZWMudmVyaWZ5KFAsRix0aGlzLHZvaWQgMCxPKX0sQi5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybiI8S2V5IHByaXY6ICIrKHRoaXMucHJpdiYmdGhp''@;'; put 'put ''cy5wcml2LnRvU3RyaW5nKDE2LDIpKSsiIHB1YjogIisodGhpcy5wdWImJnRoaXMucHViLmluc3BlY3QoKSkrIiA+In19LDYxMToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDM3ODUpLF89eSg5NTMpLGc9Xy5hc3NlcnQ7ZnVuY3Rpb24gQih6LE4pe2lmKHogaW5zdGFuY2VvZiBC''@;'; put 'put ''KXJldHVybiB6O3RoaXMuX2ltcG9ydERFUih6LE4pfHwoZyh6LnImJnoucywiU2lnbmF0dXJlIHdpdGhvdXQgciBvciBzIiksdGhpcy5yPW5ldyBJKHouciwxNiksdGhpcy5zPW5ldyBJKHoucywxNiksdGhpcy5yZWNvdmVyeVBhcmFtPXZvaWQgMD09PXoucmVjb3ZlcnlQYXJhbT9udWxsOnou''@;'; put 'put ''cmVjb3ZlcnlQYXJhbSl9ZnVuY3Rpb24gdygpe3RoaXMucGxhY2U9MH1mdW5jdGlvbiBQKHosTil7dmFyIEw9eltOLnBsYWNlKytdO2lmKCEoMTI4JkwpKXJldHVybiBMO3ZhciBLPTE1Jkw7aWYoMD09PUt8fEs+NHx8MD09PXpbTi5wbGFjZV0pcmV0dXJuITE7Zm9yKHZhciBVPTAsVz0wLFk9''@;'; put 'put ''Ti5wbGFjZTtXPEs7VysrLFkrKylVPDw9OCxVfD16W1ldLFU+Pj49MDtyZXR1cm4hKFU8PTEyNykmJihOLnBsYWNlPVksVSl9ZnVuY3Rpb24gRih6KXtmb3IodmFyIE49MCxMPXoubGVuZ3RoLTE7IXpbTl0mJiEoMTI4JnpbTisxXSkmJk48TDspTisrO3JldHVybiAwPT09Tj96Onouc2xpY2Uo''@;'; put 'put ''Til9ZnVuY3Rpb24gTyh6LE4pe2lmKE48MTI4KXoucHVzaChOKTtlbHNle3ZhciBMPTErKE1hdGgubG9nKE4pL01hdGguTE4yPj4+Myk7Zm9yKHoucHVzaCgxMjh8TCk7LS1MOyl6LnB1c2goTj4+PihMPDwzKSYyNTUpO3oucHVzaChOKX19dWUuZXhwb3J0cz1CLEIucHJvdG90eXBlLl9pbXBv''@;'; put 'put ''cnRERVI9ZnVuY3Rpb24oTixMKXtOPV8udG9BcnJheShOLEwpO3ZhciBLPW5ldyB3O2lmKDQ4IT09TltLLnBsYWNlKytdKXJldHVybiExO3ZhciBVPVAoTixLKTtpZighMT09PVV8fFUrSy5wbGFjZSE9PU4ubGVuZ3RofHwyIT09TltLLnBsYWNlKytdKXJldHVybiExO3ZhciBXPVAoTixLKTtp''@;'; put 'put ''ZighMT09PVd8fDEyOCZOW0sucGxhY2VdKXJldHVybiExO3ZhciBZPU4uc2xpY2UoSy5wbGFjZSxXK0sucGxhY2UpO2lmKEsucGxhY2UrPVcsMiE9PU5bSy5wbGFjZSsrXSlyZXR1cm4hMTt2YXIgcT1QKE4sSyk7aWYoITE9PT1xfHxOLmxlbmd0aCE9PXErSy5wbGFjZXx8MTI4Jk5bSy5wbGFj''@;'; put 'put ''ZV0pcmV0dXJuITE7dmFyIGVlPU4uc2xpY2UoSy5wbGFjZSxxK0sucGxhY2UpO2lmKDA9PT1ZWzBdKXtpZighKDEyOCZZWzFdKSlyZXR1cm4hMTtZPVkuc2xpY2UoMSl9aWYoMD09PWVlWzBdKXtpZighKDEyOCZlZVsxXSkpcmV0dXJuITE7ZWU9ZWUuc2xpY2UoMSl9cmV0dXJuIHRoaXMucj1u''@;'; put 'put ''ZXcgSShZKSx0aGlzLnM9bmV3IEkoZWUpLHRoaXMucmVjb3ZlcnlQYXJhbT1udWxsLCEwfSxCLnByb3RvdHlwZS50b0RFUj1mdW5jdGlvbihOKXt2YXIgTD10aGlzLnIudG9BcnJheSgpLEs9dGhpcy5zLnRvQXJyYXkoKTtmb3IoMTI4JkxbMF0mJihMPVswXS5jb25jYXQoTCkpLDEyOCZLWzBd''@;'; put 'put ''JiYoSz1bMF0uY29uY2F0KEspKSxMPUYoTCksSz1GKEspOyEoS1swXXx8MTI4JktbMV0pOylLPUsuc2xpY2UoMSk7dmFyIFU9WzJdO08oVSxMLmxlbmd0aCksKFU9VS5jb25jYXQoTCkpLnB1c2goMiksTyhVLEsubGVuZ3RoKTt2YXIgVz1VLmNvbmNhdChLKSxZPVs0OF07cmV0dXJuIE8oWSxX''@;'; put 'put ''Lmxlbmd0aCksWT1ZLmNvbmNhdChXKSxfLmVuY29kZShZLE4pfX0sNTk4MDoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDM3MTUpLF89eSg1NDI3KSxnPXkoOTUzKSxCPWcuYXNzZXJ0LHc9Zy5wYXJzZUJ5dGVzLFA9eSg5MDg3KSxGPXkoMzYyMik7ZnVuY3Rpb24gTyh6KXtpZihC''@;'; put 'put ''KCJlZDI1NTE5Ij09PXosIm9ubHkgdGVzdGVkIHdpdGggZWQyNTUxOSBzbyBmYXIiKSwhKHRoaXMgaW5zdGFuY2VvZiBPKSlyZXR1cm4gbmV3IE8oeik7dGhpcy5jdXJ2ZT16PV9bel0uY3VydmUsdGhpcy5nPXouZyx0aGlzLmcucHJlY29tcHV0ZSh6Lm4uYml0TGVuZ3RoKCkrMSksdGhpcy5w''@;'; put 'put ''b2ludENsYXNzPXoucG9pbnQoKS5jb25zdHJ1Y3Rvcix0aGlzLmVuY29kaW5nTGVuZ3RoPU1hdGguY2VpbCh6Lm4uYml0TGVuZ3RoKCkvOCksdGhpcy5oYXNoPUkuc2hhNTEyfXVlLmV4cG9ydHM9TyxPLnByb3RvdHlwZS5zaWduPWZ1bmN0aW9uKE4sTCl7Tj13KE4pO3ZhciBLPXRoaXMua2V5''@;'; put 'put ''RnJvbVNlY3JldChMKSxVPXRoaXMuaGFzaEludChLLm1lc3NhZ2VQcmVmaXgoKSxOKSxXPXRoaXMuZy5tdWwoVSksWT10aGlzLmVuY29kZVBvaW50KFcpLHE9dGhpcy5oYXNoSW50KFksSy5wdWJCeXRlcygpLE4pLm11bChLLnByaXYoKSksZWU9VS5hZGQocSkudW1vZCh0aGlzLmN1cnZlLm4p''@;'; put 'put ''O3JldHVybiB0aGlzLm1ha2VTaWduYXR1cmUoe1I6VyxTOmVlLFJlbmNvZGVkOll9KX0sTy5wcm90b3R5cGUudmVyaWZ5PWZ1bmN0aW9uKE4sTCxLKXtpZihOPXcoTiksKEw9dGhpcy5tYWtlU2lnbmF0dXJlKEwpKS5TKCkuZ3RlKEwuZWRkc2EuY3VydmUubil8fEwuUygpLmlzTmVnKCkpcmV0''@;'; put 'put ''dXJuITE7dmFyIFU9dGhpcy5rZXlGcm9tUHVibGljKEspLFc9dGhpcy5oYXNoSW50KEwuUmVuY29kZWQoKSxVLnB1YkJ5dGVzKCksTiksWT10aGlzLmcubXVsKEwuUygpKTtyZXR1cm4gTC5SKCkuYWRkKFUucHViKCkubXVsKFcpKS5lcShZKX0sTy5wcm90b3R5cGUuaGFzaEludD1mdW5jdGlv''@;'; put 'put ''bigpe2Zvcih2YXIgTj10aGlzLmhhc2goKSxMPTA7TDxhcmd1bWVudHMubGVuZ3RoO0wrKylOLnVwZGF0ZShhcmd1bWVudHNbTF0pO3JldHVybiBnLmludEZyb21MRShOLmRpZ2VzdCgpKS51bW9kKHRoaXMuY3VydmUubil9LE8ucHJvdG90eXBlLmtleUZyb21QdWJsaWM9ZnVuY3Rpb24oTil7''@;'; put 'put ''cmV0dXJuIFAuZnJvbVB1YmxpYyh0aGlzLE4pfSxPLnByb3RvdHlwZS5rZXlGcm9tU2VjcmV0PWZ1bmN0aW9uKE4pe3JldHVybiBQLmZyb21TZWNyZXQodGhpcyxOKX0sTy5wcm90b3R5cGUubWFrZVNpZ25hdHVyZT1mdW5jdGlvbihOKXtyZXR1cm4gTiBpbnN0YW5jZW9mIEY/TjpuZXcgRih0''@;'; put 'put ''aGlzLE4pfSxPLnByb3RvdHlwZS5lbmNvZGVQb2ludD1mdW5jdGlvbihOKXt2YXIgTD1OLmdldFkoKS50b0FycmF5KCJsZSIsdGhpcy5lbmNvZGluZ0xlbmd0aCk7cmV0dXJuIExbdGhpcy5lbmNvZGluZ0xlbmd0aC0xXXw9Ti5nZXRYKCkuaXNPZGQoKT8xMjg6MCxMfSxPLnByb3RvdHlwZS5k''@;'; put 'put ''ZWNvZGVQb2ludD1mdW5jdGlvbihOKXt2YXIgTD0oTj1nLnBhcnNlQnl0ZXMoTikpLmxlbmd0aC0xLEs9Ti5zbGljZSgwLEwpLmNvbmNhdCgtMTI5Jk5bTF0pLFU9ISEoMTI4Jk5bTF0pLFc9Zy5pbnRGcm9tTEUoSyk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnRGcm9tWShXLFUpfSxPLnByb3Rv''@;'; put 'put ''dHlwZS5lbmNvZGVJbnQ9ZnVuY3Rpb24oTil7cmV0dXJuIE4udG9BcnJheSgibGUiLHRoaXMuZW5jb2RpbmdMZW5ndGgpfSxPLnByb3RvdHlwZS5kZWNvZGVJbnQ9ZnVuY3Rpb24oTil7cmV0dXJuIGcuaW50RnJvbUxFKE4pfSxPLnByb3RvdHlwZS5pc1BvaW50PWZ1bmN0aW9uKE4pe3JldHVy''@;'; put 'put ''biBOIGluc3RhbmNlb2YgdGhpcy5wb2ludENsYXNzfX0sOTA4NzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDk1MyksXz1JLmFzc2VydCxnPUkucGFyc2VCeXRlcyxCPUkuY2FjaGVkUHJvcGVydHk7ZnVuY3Rpb24gdyhQLEYpe3RoaXMuZWRkc2E9UCx0aGlzLl9zZWNyZXQ9ZyhG''@;'; put 'put ''LnNlY3JldCksUC5pc1BvaW50KEYucHViKT90aGlzLl9wdWI9Ri5wdWI6dGhpcy5fcHViQnl0ZXM9ZyhGLnB1Yil9dy5mcm9tUHVibGljPWZ1bmN0aW9uKEYsTyl7cmV0dXJuIE8gaW5zdGFuY2VvZiB3P086bmV3IHcoRix7cHViOk99KX0sdy5mcm9tU2VjcmV0PWZ1bmN0aW9uKEYsTyl7cmV0''@;'; put 'put ''dXJuIE8gaW5zdGFuY2VvZiB3P086bmV3IHcoRix7c2VjcmV0Ok99KX0sdy5wcm90b3R5cGUuc2VjcmV0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NlY3JldH0sQih3LCJwdWJCeXRlcyIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5lbmNvZGVQb2ludCh0aGlzLnB1YigpKX0pLEIo''@;'; put 'put ''dywicHViIixmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wdWJCeXRlcz90aGlzLmVkZHNhLmRlY29kZVBvaW50KHRoaXMuX3B1YkJ5dGVzKTp0aGlzLmVkZHNhLmcubXVsKHRoaXMucHJpdigpKX0pLEIodywicHJpdkJ5dGVzIixmdW5jdGlvbigpe3ZhciBGPXRoaXMuZWRkc2EsTz10aGlzLmhh''@;'; put 'put ''c2goKSx6PUYuZW5jb2RpbmdMZW5ndGgtMSxOPU8uc2xpY2UoMCxGLmVuY29kaW5nTGVuZ3RoKTtyZXR1cm4gTlswXSY9MjQ4LE5bel0mPTEyNyxOW3pdfD02NCxOfSksQih3LCJwcml2IixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmRlY29kZUludCh0aGlzLnByaXZCeXRlcygpKX0p''@;'; put 'put ''LEIodywiaGFzaCIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5oYXNoKCkudXBkYXRlKHRoaXMuc2VjcmV0KCkpLmRpZ2VzdCgpfSksQih3LCJtZXNzYWdlUHJlZml4IixmdW5jdGlvbigpe3JldHVybiB0aGlzLmhhc2goKS5zbGljZSh0aGlzLmVkZHNhLmVuY29kaW5nTGVuZ3RoKX0p''@;'; put 'put ''LHcucHJvdG90eXBlLnNpZ249ZnVuY3Rpb24oRil7cmV0dXJuIF8odGhpcy5fc2VjcmV0LCJLZXlQYWlyIGNhbiBvbmx5IHZlcmlmeSIpLHRoaXMuZWRkc2Euc2lnbihGLHRoaXMpfSx3LnByb3RvdHlwZS52ZXJpZnk9ZnVuY3Rpb24oRixPKXtyZXR1cm4gdGhpcy5lZGRzYS52ZXJpZnkoRixP''@;'; put 'put ''LHRoaXMpfSx3LnByb3RvdHlwZS5nZXRTZWNyZXQ9ZnVuY3Rpb24oRil7cmV0dXJuIF8odGhpcy5fc2VjcmV0LCJLZXlQYWlyIGlzIHB1YmxpYyBvbmx5IiksSS5lbmNvZGUodGhpcy5zZWNyZXQoKSxGKX0sdy5wcm90b3R5cGUuZ2V0UHVibGljPWZ1bmN0aW9uKEYpe3JldHVybiBJLmVuY29k''@;'; put 'put ''ZSh0aGlzLnB1YkJ5dGVzKCksRil9LHVlLmV4cG9ydHM9d30sMzYyMjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDM3ODUpLF89eSg5NTMpLGc9Xy5hc3NlcnQsQj1fLmNhY2hlZFByb3BlcnR5LHc9Xy5wYXJzZUJ5dGVzO2Z1bmN0aW9uIFAoRixPKXt0aGlzLmVkZHNhPUYsIm9i''@;'; put 'put ''amVjdCIhPXR5cGVvZiBPJiYoTz13KE8pKSxBcnJheS5pc0FycmF5KE8pJiYoZyhPLmxlbmd0aD09PTIqRi5lbmNvZGluZ0xlbmd0aCwiU2lnbmF0dXJlIGhhcyBpbnZhbGlkIHNpemUiKSxPPXtSOk8uc2xpY2UoMCxGLmVuY29kaW5nTGVuZ3RoKSxTOk8uc2xpY2UoRi5lbmNvZGluZ0xlbmd0''@;'; put 'put ''aCl9KSxnKE8uUiYmTy5TLCJTaWduYXR1cmUgd2l0aG91dCBSIG9yIFMiKSxGLmlzUG9pbnQoTy5SKSYmKHRoaXMuX1I9Ty5SKSxPLlMgaW5zdGFuY2VvZiBJJiYodGhpcy5fUz1PLlMpLHRoaXMuX1JlbmNvZGVkPUFycmF5LmlzQXJyYXkoTy5SKT9PLlI6Ty5SZW5jb2RlZCx0aGlzLl9TZW5j''@;'; put 'put ''b2RlZD1BcnJheS5pc0FycmF5KE8uUyk/Ty5TOk8uU2VuY29kZWR9QihQLCJTIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmRlY29kZUludCh0aGlzLlNlbmNvZGVkKCkpfSksQihQLCJSIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmRlY29kZVBvaW50KHRoaXMuUmVuY29k''@;'; put 'put ''ZWQoKSl9KSxCKFAsIlJlbmNvZGVkIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmVuY29kZVBvaW50KHRoaXMuUigpKX0pLEIoUCwiU2VuY29kZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuZW5jb2RlSW50KHRoaXMuUygpKX0pLFAucHJvdG90eXBlLnRvQnl0ZXM9ZnVu''@;'; put 'put ''Y3Rpb24oKXtyZXR1cm4gdGhpcy5SZW5jb2RlZCgpLmNvbmNhdCh0aGlzLlNlbmNvZGVkKCkpfSxQLnByb3RvdHlwZS50b0hleD1mdW5jdGlvbigpe3JldHVybiBfLmVuY29kZSh0aGlzLnRvQnl0ZXMoKSwiaGV4IikudG9VcHBlckNhc2UoKX0sdWUuZXhwb3J0cz1QfSwxMDM3OnVlPT57dWUu''@;'; put 'put ''ZXhwb3J0cz17ZG91Ymxlczp7c3RlcDo0LHBvaW50czpbWyJlNjBmY2U5M2I1OWU5ZWM1MzAxMWFhYmMyMWMyM2U5N2IyYTMxMzY5Yjg3YTVhZTljNDRlZTg5ZTJhNmRlYzBhIiwiZjdlMzUwNzM5OWU1OTU5MjlkYjk5ZjM0ZjU3OTM3MTAxMjk2ODkxZTQ0ZDIzZjBiZTFmMzJjY2U2OTYxNjgy''@;'; put 'put ''MSJdLFsiODI4MjI2MzIxMmM2MDlkOWVhMmE2ZTNlMTcyZGUyMzhkOGMzOWNhYmQ1YWMxY2ExMDY0NmUyM2ZkNWY1MTUwOCIsIjExZjhhODA5ODU1N2RmZTQ1ZTgyNTZlODMwYjYwYWNlNjJkNjEzYWMyZjdiMTdiZWQzMWI2ZWFmZjZlMjZjYWYiXSxbIjE3NWUxNTlmNzI4Yjg2NWE3MmY5OWNj''@;'; put 'put ''NmM2ZmM4NDZkZTBiOTM4MzNmZDIyMjJlZDczZmNlNWI1NTFlNWI3MzkiLCJkMzUwNmUwZDllM2M3OWViYTRlZjk3YTUxZmY3MWY1ZWFjYjU5NTVhZGQyNDM0NWM2ZWZhNmZmZWU5ZmVkNjk1Il0sWyIzNjNkOTBkNDQ3YjAwYzljOTljZWFjMDViNjI2MmVlMDUzNDQxYzdlNTU1NTJmZmU1MjZi''@;'; put 'put ''YWQ4ZjgzZmY0NjQwIiwiNGUyNzNhZGZjNzMyMjIxOTUzYjQ0NTM5N2YzMzYzMTQ1YjlhODkwMDgxOTllY2I2MjAwM2M3ZjNiZWU5ZGU5Il0sWyI4YjRiNWYxNjVkZjNjMmJlOGM2MjQ0YjViNzQ1NjM4ODQzZTRhNzgxYTE1YmNkMWI2OWY3OWE1NWRmZmRmODBjIiwiNGFhZDBhNmY2OGQzMDhi''@;'; put 'put ''NGIzZmJkNzgxM2FiMGRhMDRmOWUzMzY1NDYxNjJlZTU2YjNlZmYwYzY1ZmQ0ZmQzNiJdLFsiNzIzY2JhYTZlNWRiOTk2ZDZiZjc3MWMwMGJkNTQ4YzdiNzAwZGJmZmE2YzBlNzdiY2I2MTE1OTI1MjMyZmNkYSIsIjk2ZTg2N2I1NTk1Y2M0OThhOTIxMTM3NDg4ODI0ZDZlMjY2MGEwNjUzNzc5''@;'; put 'put ''NDk0ODAxZGMwNjlkOWViMzlmNWYiXSxbImVlYmZhNGQ0OTNiZWJmOThiYTVmZWVjODEyYzJkM2I1MDk0Nzk2MTIzN2E5MTk4MzlhNTMzZWNhMGU3ZGQ3ZmEiLCI1ZDlhOGNhMzk3MGVmMGYyNjllZTdlZGFmMTc4MDg5ZDlhZTRjZGMzYTcxMWY3MTJkZGZkNGZkYWUxZGU4OTk5Il0sWyIxMDBm''@;'; put 'put ''NDRkYTY5NmU3MTY3Mjc5MWQwYTA5YjdiZGU0NTlmMTIxNWEyOWIzYzAzYmZlZmQ3ODM1YjM5YTQ4ZGIwIiwiY2RkOWUxMzE5MmEwMGI3NzJlYzhmMzMwMGMwOTA2NjZiN2ZmNGExOGZmNTE5NWFjMGZiZDVjZDYyYmM2NWEwOSJdLFsiZTEwMzFiZTI2MmM3ZWQxYjFkYzkyMjdhNGEwNGMwMTdh''@;'; put 'put ''NzdmOGQ0NDY0ZjNiMzg1MmM4YWNkZTZlNTM0ZmQyZCIsIjlkNzA2MTkyODk0MDQwNWU2YmI2YTQxNzY1OTc1MzVhZjI5MmRkNDE5ZTFjZWQ3OWE0NGYxOGYyOTQ1NmEwMGQiXSxbImZlZWE2Y2FlNDZkNTViNTMwYWMyODM5ZjE0M2JkN2VjNWNmOGIyNjZhNDFkNmFmNTJkNWU2ODhkOTA5NDY5''@;'; put 'put ''NmQiLCJlNTdjNmI2Yzk3ZGNlMWJhYjA2ZTRlMTJiZjNlY2Q1Yzk4MWM4OTU3Y2M0MTQ0MmQzMTU1ZGViZjE4MDkwMDg4Il0sWyJkYTY3YTkxZDkxMDQ5Y2RjYjM2N2JlNGJlNmZmY2EzY2ZlZWQ2NTdkODA4NTgzZGUzM2ZhOTc4YmMxZWM2Y2IxIiwiOWJhY2FhMzU0ODE2NDJiYzQxZjQ2M2Y3''@;'; put 'put ''ZWM5NzgwZTVkZWM3YWRjNTA4Zjc0MGExN2U5ZWE4ZTI3YTY4YmUxZCJdLFsiNTM5MDRmYWEwYjMzNGNkZGE2ZTAwMDkzNWVmMjIxNTFlYzA4ZDBmN2JiMTEwNjlmNTc1NDVjY2MxYTM3YjdjMCIsIjViYzA4N2QwYmM4MDEwNmQ4OGM5ZWNjYWMyMGQzYzFjMTM5OTk5ODFlMTQ0MzQ2OTlkY2Iw''@;'; put 'put ''OTZiMDIyNzcxYzgiXSxbIjhlN2JjZDBiZDM1OTgzYTc3MTljY2E3NzY0Y2E5MDY3NzliNTNhMDQzYTliOGJjYWVmZjk1OWY0M2FkODYwNDciLCIxMGI3NzcwYjJhM2RhNGIzOTQwMzEwNDIwY2E5NTE0NTc5ZTg4ZTJlNDdmZDY4YjNlYTEwMDQ3ZTg0NjAzNzJhIl0sWyIzODVlZWQzNGMxY2Rm''@;'; put 'put ''ZjIxZTZkMDgxODY4OWI4MWJkZTcxYTdmNGYxODM5N2U2NjkwYTg0MWUxNTk5YzQzODYyIiwiMjgzYmViYzNlOGVhMjNmNTY3MDFkZTE5ZTllYmY0NTc2YjMwNGVlYzIwODZkYzhjYzA0NThmZTU1NDJlNTQ1MyJdLFsiNmY5ZDliODAzZWNmMTkxNjM3YzczYTQ0MTNkZmExODBmZGRmODRhNTk0''@;'; put 'put ''N2ZiYzljNjA2ZWQ4NmMzZmFjM2E3IiwiN2M4MGM2OGU2MDMwNTliYTY5YjhlMmEzMGU0NWM0ZDQ3ZWE0ZGQyZjVjMjgxMDAyZDg2ODkwNjAzYTg0MjE2MCJdLFsiMzMyMmQ0MDEyNDNjNGUyNTgyYTIxNDdjMTA0ZDZlY2JmNzc0ZDE2M2RiMGY1ZTUzMTNiN2UwZTc0MmQwZTZiZCIsIjU2ZTcw''@;'; put 'put ''Nzk3ZTk2NjRlZjViZmIwMTliYzRkZGFmOWI3MjgwNWY2M2VhMjg3M2FmNjI0ZjNhMmU5NmMyOGIyYTAiXSxbIjg1NjcyYzdkMmRlMGI3ZGEyYmQxNzcwZDg5NjY1ODY4NzQxYjNmOWFmNzY0MzM5NzcyMWQ3NGQyODEzNGFiODMiLCI3YzQ4MWI5YjViNDNiMmViNjM3NDA0OWJmYTYyYzJlNWU3''@;'; put 'put ''N2YxN2ZjYzUyOThmNDRjOGUzMDk0Zjc5MDMxM2E2Il0sWyI5NDhiZjgwOWIxOTg4YTQ2YjA2YzlmMTkxOTQxM2IxMGY5MjI2YzYwZjY2ODgzMmZmZDk1OWFmNjBjODJhMGEiLCI1M2E1NjI4NTZkY2I2NjQ2ZGM2Yjc0YzVkMWMzNDE4YzZkNGRmZjA4Yzk3Y2QyYmVkNGNiN2Y4OGQ4YzhlNTg5''@;'; put 'put ''Il0sWyI2MjYwY2U3ZjQ2MTgwMWMzNGYwNjdjZTBmMDI4NzNhOGYxYjBlNDRkZmM2OTc1MmFjY2VjZDgxOWYzOGZkOGU4IiwiYmMyZGE4MmI2ZmE1YjU3MWE3ZjA5MDQ5Nzc2YTFlZjdlY2QyOTIyMzgwNTFjMTk4YzFhODRlOTViMmI0YWUxNyJdLFsiZTUwMzdkZTBhZmMxZDhkNDNkODM0ODQx''@;'; put 'put ''NGJiZjQxMDMwNDNlYzhmNTc1YmZkYzQzMjk1M2NjOGQyMDM3ZmEyZCIsIjQ1NzE1MzRiYWE5NGQzYjVmOWY5OGQwOWZiOTkwYmRkYmQ1ZjViMDNlYzQ4MWYxMGUwZTVkYzg0MWQ3NTViZGEiXSxbImUwNjM3MmIwZjRhMjA3YWRmNWVhOTA1ZThmMTc3MWI0ZTdlOGRiZDFjNmE2YzViNzI1ODY2''@;'; put 'put ''YTBhZTRmY2U3MjUiLCI3YTkwODk3NGJjZTE4Y2ZlMTJhMjdiYjJhZDVhNDg4Y2Q3NDg0YTc3ODcxMDQ4NzBiMjcwMzRmOTRlZWUzMWRkIl0sWyIyMTNjN2E3MTVjZDVkNDUzNThkMGJiZjlkYzBjZTAyMjA0YjEwYmRkZTJhM2Y1ODU0MGFkNjkwOGQwNTU5NzU0IiwiNGI2ZGFkMGI1YWU0NjI1''@;'; put 'put ''MDcwMTNhZDA2MjQ1YmExOTBiYjQ4NTBmNWYzNmE3ZWVkZGZmMmMyNzUzNGI0NThmMiJdLFsiNGU3YzI3MmE3YWY0YjM0ZThkYmI5MzUyYTU0MTlhODdlMjgzOGM3MGFkYzYyY2RkZjBjYzNhM2IwOGZiZDUzYyIsIjE3NzQ5Yzc2NmM5ZDBiMThlMTZmZDA5ZjZkZWY2ODFiNTMwYjk2MTRiZmY3''@;'; put 'put ''ZGQzM2UwYjM5NDE4MTdkY2FhZTYiXSxbImZlYTc0ZTNkYmU3NzhiMWIxMGYyMzhhZDYxNjg2YWE1Yzc2ZTNkYjJiZTQzMDU3NjMyNDI3ZTI4NDBmYjI3YjYiLCI2ZTA1NjhkYjliMGIxMzI5N2NmNjc0ZGVjY2I2YWY5MzEyNmI1OTZiOTczZjdiNzc3MDFkM2RiN2YyM2NiOTZmIl0sWyI3NmU2''@;'; put 'put ''NDExM2Y2NzdjZjBlMTBhMjU3MGQ1OTk5NjhkMzE1NDRlMTc5Yjc2MDQzMjk1MmMwMmE0NDE3YmRkZTM5IiwiYzkwZGRmOGRlZTRlOTVjZjU3NzA2NmQ3MDY4MWYwZDM1ZTJhMzNkMmI1NmQyMDMyYjRiMTc1MmQxOTAxYWMwMSJdLFsiYzczOGM1NmIwM2IyYWJlMWU4MjgxYmFhNzQzZjhmOWE4''@;'; put 'put ''ZjdjYzY0M2RmMjZjYmVlM2FiMTUwMjQyYmNiYjg5MSIsIjg5M2ZiNTc4OTUxYWQyNTM3ZjcxOGYyZWFjYmZiYmJiODIzMTRlZWY3ODgwY2ZlOTE3ZTczNWQ5Njk5YTg0YzMiXSxbImQ4OTU2MjY1NDhiNjViODFlMjY0Yzc2MzdjOTcyODc3ZDFkNzJlNWYzYTkyNTAxNDM3MmU5ZjY1ODhmNmMx''@;'; put 'put ''NGIiLCJmZWJmYWEzOGYyYmM3ZWFlNzI4ZWM2MDgxOGMzNDBlYjAzNDI4ZDYzMmJiMDY3ZTE3OTM2M2VkNzVkN2Q5OTFmIl0sWyJiOGRhOTQwMzJhOTU3NTE4ZWIwZjY0MzM1NzFlODc2MWNlZmZjNzM2OTNlODRlZGQ0OTE1MGE1NjRmNjc2ZTAzIiwiMjgwNGRmYTQ0ODA1YTFlNGQ3Yzk5Y2M5''@;'; put 'put ''NzYyODA4YjA5MmNjNTg0ZDk1ZmYzYjUxMTQ4OGU0ZTc0ZWZkZjZlNyJdLFsiZTgwZmVhMTQ0NDFmYjMzYTdkOGFkYWI5NDc1ZDdmYWIyMDE5ZWZmYjUxNTZhNzkyZjFhMTE3NzhlM2MwZGY1ZCIsImVlZDFkZTdmNjM4ZTAwNzcxZTg5NzY4Y2EzY2E5NDQ3MmQxNTVlODBhZjMyMmVhOWZjYjQy''@;'; put 'put ''OTFiNmFjOWVjNzgiXSxbImEzMDE2OTdiZGZjZDcwNDMxM2JhNDhlNTFkNTY3NTQzZjJhMTgyMDMxZWZkNjkxNWRkYzA3YmJjYzRlMTYwNzAiLCI3MzcwZjkxY2ZiNjdlNGY1MDgxODA5ZmEyNWQ0MGY5YjE3MzVkYmY3YzBhMTFhMTMwYzBkMWEwNDFlMTc3ZWExIl0sWyI5MGFkODViMzg5ZDZi''@;'; put 'put ''OTM2NDYzZjlkMDUxMjY3OGRlMjA4Y2MzMzBiMTEzMDdmZmZhYjdhYzYzZTNmYjA0ZWQ0IiwiZTUwN2EzNjIwYTM4MjYxYWZmZGNiZDk0MjcyMjJiODM5YWVmYWJlMTU4Mjg5NGQ5OTFkNGQ0OGNiNmVmMTUwIl0sWyI4ZjY4YjlkMmY2M2I1ZjMzOTIzOWMxYWQ5ODFmMTYyZWU4OGM1Njc4NzIz''@;'; put 'put ''ZWEzMzUxYjdiNDQ0YzllYzRjMGRhIiwiNjYyYTlmMmRiYTA2Mzk4NmRlMWQ5MGMyYjZiZTIxNWRiYmVhMmNmZTk1NTEwYmZkZjIzY2JmNzk1MDFmZmY4MiJdLFsiZTRmM2ZiMDE3NmFmODVkNjVmZjk5ZmY5MTk4YzM2MDkxZjQ4ZTg2NTAzNjgxZTNlNjY4NmZkNTA1MzIzMWUxMSIsIjFlNjM2''@;'; put 'put ''MzNhZDBlZjRmMWMxNjYxYTZkMGVhMDJiNzI4NmNjN2U3NGVjOTUxZDFjOTgyMmMzODU3NmZlYjczYmMiXSxbIjhjMDBmYTliMThlYmYzMzFlYjk2MTUzN2E0NWE0MjY2YzcwMzRmMmYwZDRlMWQwNzE2ZmI2ZWFlMjBlYWUyOWUiLCJlZmE0NzI2N2ZlYTUyMWExYTlkYzM0M2EzNzM2Yzk3NGMy''@;'; put 'put ''ZmFkYWZhODFlMzZjNTRlN2QyYTRjNjY3MDI0MTRiIl0sWyJlN2EyNmNlNjlkZDQ4MjlmM2UxMGNlYzBhOWU5OGVkMzE0M2QwODRmMzA4YjkyYzA5OTdmZGRmYzYwY2IzZTQxIiwiMmE3NThlMzAwZmE3OTg0YjQ3MWIwMDZhMWFhZmJiMThkMGE2YjJjMDQyMGU4M2UyMGU4YTk0MjFjZjJjZmQ1''@;'; put 'put ''MSJdLFsiYjY0NTllMGVlMzY2MmVjOGQyMzU0MGMyMjNiY2JkYzU3MWNiY2I5NjdkNzk0MjRmM2NmMjllYjNkZTZiODBlZiIsIjY3Yzg3NmQwNmYzZTA2ZGUxZGFkZjE2ZTU2NjFkYjNjNGIzYWU2ZDQ4ZTM1YjJmZjMwYmYwYjYxYTcxYmE0NSJdLFsiZDY4YTgwYzgyODBiYjg0MDc5MzIzNGFh''@;'; put 'put ''MTE4ZjA2MjMxZDZmMWZjNjdlNzNjNWE1ZGVkYTBmNWI0OTY5NDNlOCIsImRiOGJhOWZmZjRiNTg2ZDAwYzRiMWY5MTc3YjBlMjhiNWIwZTdiOGY3ODQ1Mjk1YTI5NGM4NDI2NmIxMzMxMjAiXSxbIjMyNGFlZDdkZjY1YzgwNDI1MmRjMDI3MDkwN2EzMGIwOTYxMmFlYjk3MzQ0OWNlYTQwOTU5''@;'; put 'put ''ODBmYzI4ZDNkNWQiLCI2NDhhMzY1Nzc0YjYxZjJmZjEzMGMwYzM1YWVjMWY0ZjE5MjEzYjBjN2UzMzI4NDM5NjcyMjRhZjk2YWI3Yzg0Il0sWyI0ZGY5YzE0OTE5Y2RlNjFmNmQ1MWRmZGJlNWZlZTVkY2VlYzQxNDNiYThkMWNhODg4ZThiZDM3M2ZkMDU0Yzk2IiwiMzVlYzUxMDkyZDg3Mjgw''@;'; put 'put ''NTA5NzRjMjNhMWQ4NWQ0YjVkNTA2Y2RjMjg4NDkwMTkyZWJhYzA2Y2FkMTBkNWQiXSxbIjljMzkxOWE4NGE0NzQ4NzBmYWVkOGE5YzFjYzY2MDIxNTIzNDg5MDU0ZDdmMDMwOGNiZmM5OWM4YWMxZjk4Y2QiLCJkZGI4NGYwZjRhNGRkZDU3NTg0ZjA0NGJmMjYwZTY0MTkwNTMyNmY3NmM2NGM4''@;'; put 'put ''ZTZiZTdlNWUwM2Q0ZmM1OTlkIl0sWyI2MDU3MTcwYjFkZDEyZmRmOGRlMDVmMjgxZDhlMDZiYjkxZTE0OTNhOGI5MWQ0Y2M1YTIxMzgyMTIwYTk1OWU1IiwiOWExYWYwYjI2YTZhNDgwN2FkZDlhMmRhZjcxZGYyNjI0NjUxNTJiYzNlZTI0YzY1ZTg5OWJlOTMyMzg1YTJhOCJdLFsiYTU3NmRm''@;'; put 'put ''OGUyM2EwODQxMTQyMTQzOWE0NTE4ZGEzMTg4MGNlZjBmYmE3ZDRkZjEyYjFhNjk3M2VlY2I5NDI2NiIsIjQwYTZiZjIwZTc2NjQwYjJjOTJiOTdhZmU1OGNkODJjNDMyZTEwYTdmNTE0ZDlmM2VlOGJlMTFhZTFiMjhlYzgiXSxbIjc3NzhhNzhjMjhkZWMzZTMwYTA1ZmU5NjI5ZGU4YzM4YmIz''@;'; put 'put ''MGQxZjVjZjlhM2EyMDhmNzYzODg5YmU1OGFkNzEiLCIzNDYyNmQ5YWI1YTViMjJmZjcwOThlMTJmMmZmNTgwMDg3YjM4NDExZmYyNGFjNTYzYjUxM2ZjMWZkOWY0M2FjIl0sWyI5Mjg5NTVlZTYzN2E4NDQ2MzcyOWZkMzBlN2FmZDJlZDVmOTYyNzRlNWFkN2U1Y2IwOWVkYTljMDZkOTAzYWMi''@;'; put 'put ''LCJjMjU2MjEwMDNkM2Y0MmE4MjdiNzhhMTMwOTNhOTVlZWFjM2QyNmVmYThhOGQ4M2ZjNTE4MGU5MzViY2QwOTFmIl0sWyI4NWQwZmVmM2VjNmRiMTA5Mzk5MDY0ZjNhMGUzYjI4NTU2NDViNGE5MDdhZDM1NDUyN2FhZTc1MTYzZDgyNzUxIiwiMWYwMzY0ODQxM2EzOGMwYmUyOWQ0OTZlNTgy''@;'; put 'put ''Y2Y1NjYzZTg3NTFlOTY4NzczMzE1ODJjMjM3YTI0ZWIxZjk2MiJdLFsiZmYyYjBkY2U5N2VlY2U5N2MxYzliNjA0MTc5OGI4NWRmZGZiNmQ4ODgyZGEyMDMwOGY1NDA0ODI0NTI2MDg3ZSIsIjQ5M2QxM2ZlZjUyNGJhMTg4YWY0YzRkYzU0ZDA3OTM2YzdiN2VkNmZiOTBlMmNlYjJjOTUxZTAx''@;'; put 'put ''ZjBjMjk5MDciXSxbIjgyN2ZiYmU0YjFlODgwZWE5ZWQyYjJlNjMwMWIyMTJiNTdmMWVlMTQ4Y2Q2ZGQyODc4MGU1ZTJjZjg1NmUyNDEiLCJjNjBmOWM5MjNjNzI3YjBiNzFiZWYyYzY3ZDFkMTI2ODdmZjdhNjMxODY5MDMxNjZkNjA1YjY4YmFlYzI5M2VjIl0sWyJlYWE2NDlmMjFmNTFiZGJh''@;'; put 'put ''ZTdiZTRhZTM0Y2U2ZTUyMTdhNThmZGNlN2Y0N2Y5YWE3ZjNiNThmYTIxMjBlMmIzIiwiYmUzMjc5ZWQ1YmJiYjAzYWM2OWE4MGY4OTg3OWFhNWEwMWE2Yjk2NWYxM2Y3ZTU5ZDQ3YTUzMDViYTVhZDkzZCJdLFsiZTRhNDJkNDNjNWNmMTY5ZDkzOTFkZjZkZWNmNDJlZTU0MWI2ZDhmMGM5YTEz''@;'; put 'put ''NzQwMWUyMzYzMmRkYTM0ZDI0ZiIsIjRkOWY5MmU3MTZkMWM3MzUyNmZjOTljY2ZiOGFkMzRjZTg4NmVlZGZhOGQ4ZTRmMTNhN2Y3MTMxZGViYTk0MTQiXSxbIjFlYzgwZmVmMzYwY2JkZDk1NDE2MGZhZGFiMzUyYjZiOTJiNTM1NzZhODhmZWE0OTQ3MTczYjlkNDMwMGJmMTkiLCJhZWVmZTkz''@;'; put 'put ''NzU2YjUzNDBkMmYzYTQ5NThhN2FiYmY1ZTAxNDZlNzdmNjI5NWEwN2I2NzFjZGMxY2MxMDdjZWZkIl0sWyIxNDZhNzc4YzA0NjcwYzJmOTFiMDBhZjQ2ODBkZmE4YmNlMzQ5MDcxN2Q1OGJhODg5ZGRiNTkyODM2NjY0MmJlIiwiYjMxOGUwZWMzMzU0MDI4YWRkNjY5ODI3ZjlkNGIyODcwYWFh''@;'; put 'put ''OTcxZDJmN2U1ZWQxZDBiMjk3NDgzZDgzZWZkMCJdLFsiZmE1MGMwZjYxZDIyZTVmMDdlM2FjZWJiMWFhMDdiMTI4ZDAwMTIyMDlhMjhiOTc3NmQ3NmE4NzkzMTgwZWVmOSIsIjZiODRjNjkyMjM5N2ViYTliNzJjZDI4NzIyODFhNjhhNWU2ODMyOTNhNTdhMjEzYjM4Y2Q4ZDdkM2Y0ZjI4MTEi''@;'; put 'put ''XSxbImRhMWQ2MWQwY2E3MjFhMTFiMWE1YmY2YjdkODhlODQyMWEyODhhYjVkNWJiYTUyMjBlNTNkMzJiNWYwNjdlYzIiLCI4MTU3ZjU1YTdjOTkzMDZjNzljMDc2NjE2MWM5MWUyOTY2YTczODk5ZDI3OWI0OGE2NTVmYmEwZjFhZDgzNmYxIl0sWyJhOGUyODJmZjBjOTcwNjkwNzIxNWZmOThl''@;'; put 'put ''OGZkNDE2NjE1MzExZGUwNDQ2ZjFlMDYyYTczYjA2MTBkMDY0ZTEzIiwiN2Y5NzM1NWI4ZGI4MWMwOWFiZmI3ZjNjNWIyNTE1ODg4YjY3OWEzZTUwZGQ2YmQ2Y2VmN2M3MzExMWY0Y2MwYyJdLFsiMTc0YTUzYjljOWEyODU4NzJkMzllNTZlNjkxM2NhYjE1ZDU5YjFmYTUxMjUwOGMwMjJmMzgy''@;'; put 'put ''ZGU4MzE5NDk3YyIsImNjYzlkYzM3YWJmYzljMTY1N2I0MTU1ZjJjNDdmOWU2NjQ2YjNhMWQ4Y2I5ODU0MzgzZGExM2FjMDc5YWZhNzMiXSxbIjk1OTM5Njk4MTk0Mzc4NWMzZDNlNTdlZGY1MDE4Y2RiZTAzOWU3MzBlNDkxOGIzZDg4NGZkZmYwOTQ3NWI3YmEiLCIyZTdlNTUyODg4YzMzMWRk''@;'; put 'put ''OGJhMDM4NmE0YjljZDY4NDljNjUzZjY0Yzg3MDkzODVlOWI4YWJmODc1MjRmMmZkIl0sWyJkMmE2M2E1MGFlNDAxZTU2ZDY0NWExMTUzYjEwOWE4ZmNjYTBhNDNkNTYxZmJhMmRiYjUxMzQwYzlkODJiMTUxIiwiZTgyZDg2ZmI2NDQzZmNiNzU2NWFlZTU4YjI5NDgyMjBhNzBmNzUwYWY0ODRj''@;'; put 'put ''YTUyZDQxNDIxNzRkY2Y4OTQwNSJdLFsiNjQ1ODdlMjMzNTQ3MWViODkwZWU3ODk2ZDdjZmRjODY2YmFjYmRiZDM4MzkzMTdiMzQzNmY5YjQ1NjE3ZTA3MyIsImQ5OWZjZGQ1YmY2OTAyZTJhZTk2ZGQ2NDQ3YzI5OWExODViOTBhMzkxMzNhZWFiMzU4Mjk5ZTVlOWZhZjY1ODkiXSxbIjg0ODFi''@;'; put 'put ''ZGUwZTRlNGQ4ODViM2E1NDZkM2U1NDlkZTA0MmYwYWE2Y2VhMjUwZTdmZDM1OGQ2Yzg2ZGQ0NWU0NTgiLCIzOGVlN2I4Y2JhNTQwNGRkODRhMjViZjM5Y2VjYjJjYTkwMGE3OWM0MmIyNjJlNTU2ZDY0YjFiNTk3NzkwNTdlIl0sWyIxMzQ2NGE1N2E3ODEwMmFhNjJiNjk3OWFlODE3ZjQ2Mzdm''@;'; put 'put ''ZmNmZWQzYzRiMWNlMzBiY2Q2MzAzZjZjYWY2NjZiIiwiNjliZTE1OTAwNDYxNDU4MGVmN2U0MzM0NTNjY2IwY2E0OGYzMDBhODFkMDk0MmUxM2Y0OTVhOTA3ZjZlY2MyNyJdLFsiYmM0YTlkZjViNzEzZmUyZTlhZWY0MzBiY2MxZGM5N2EwY2Q5Y2NlZGUyZjI4NTg4Y2FkYTNhMGQyZDgzZjM2''@;'; put 'put ''NiIsImQzYTgxY2E2ZTc4NWMwNjM4MzkzN2FkZjRiNzk4Y2FhNmU4YTlmYmZhNTQ3YjE2ZDc1OGQ2NjY1ODFmMzNjMSJdLFsiOGMyOGE5N2JmODI5OGJjMGQyM2Q4Yzc0OTQ1MmEzMmU2OTRiNjVlMzBhOTQ3MmEzOTU0YWIzMGZlNTMyNGNhYSIsIjQwYTMwNDYzYTMzMDUxOTMzNzhmZWRmMzFm''@;'; put 'put ''N2NjMGViN2FlNzg0ZjA0NTFjYjk0NTllNzFkYzczY2JlZjk0ODIiXSxbIjhlYTk2NjYxMzk1MjdhOGMxZGQ5NGNlNGYwNzFmZDIzYzhiMzUwYzVhNGJiMzM3NDhjNGJhMTExZmFjY2FlMCIsIjYyMGVmYWJiYzhlZTI3ODJlMjRlN2MwY2ZiOTVjNWQ3MzViNzgzYmU5Y2YwZjhlOTU1YWYzNGEz''@;'; put 'put ''MGU2MmI5NDUiXSxbImRkMzYyNWZhZWY1YmEwNjA3NDY2OTcxNmJiZDM3ODhkODliZGRlODE1OTU5OTY4MDkyZjc2Y2M0ZWI5YTk3ODciLCI3YTE4OGZhMzUyMGUzMGQ0NjFkYTI1MDEwNDU3MzFjYTk0MTQ2MTk4Mjg4MzM5NTkzN2Y2OGQwMGM2NDRhNTczIl0sWyJmNzEwZDc5ZDllYjk2MjI5''@;'; put 'put ''N2U0ZjYyMzJiNDBlOGY3ZmViMmJjNjM4MTQ2MTRkNjkyYzEyZGU3NTI0MDgyMjFlIiwiZWE5OGU2NzIzMmQzYjMyOTVkM2I1MzU1MzIxMTVjY2FjODYxMmM3MjE4NTE2MTc1MjZhZTQ3YTljNzdiZmM4MiJdXX0sbmFmOnt3bmQ6Nyxwb2ludHM6W1siZjkzMDhhMDE5MjU4YzMxMDQ5MzQ0Zjg1''@;'; put 'put ''Zjg5ZDUyMjliNTMxYzg0NTgzNmY5OWIwODYwMWYxMTNiY2UwMzZmOSIsIjM4OGY3YjBmNjMyZGU4MTQwZmUzMzdlNjJhMzdmMzU2NjUwMGE5OTkzNGMyMjMxYjZjYjlmZDc1ODRiOGU2NzIiXSxbIjJmOGJkZTRkMWEwNzIwOTM1NWI0YTcyNTBhNWM1MTI4ZTg4Yjg0YmRkYzYxOWFiN2NiYThk''@;'; put 'put ''NTY5YjI0MGVmZTQiLCJkOGFjMjIyNjM2ZTVlM2Q2ZDRkYmE5ZGRhNmM5YzQyNmY3ODgyNzFiYWIwZDY4NDBkY2E4N2QzYWE2YWM2MmQ2Il0sWyI1Y2JkZjA2NDZlNWRiNGVhYTM5OGYzNjVmMmVhN2EwZTNkNDE5YjdlMDMzMGUzOWNlOTJiZGRlZGNhYzRmOWJjIiwiNmFlYmNhNDBiYTI1NTk2''@;'; put 'put ''MGEzMTc4ZDZkODYxYTU0ZGJhODEzZDBiODEzZmRlN2I1YTUwODI2MjgwODcyNjRkYSJdLFsiYWNkNDg0ZTJmMGM3ZjY1MzA5YWQxNzhhOWY1NTlhYmRlMDk3OTY5NzRjNTdlNzE0YzM1ZjExMGRmYzI3Y2NiZSIsImNjMzM4OTIxYjBhN2Q5ZmQ2NDM4MDk3MTc2M2I2MWU5YWRkODg4YTQzNzVm''@;'; put 'put ''OGUwZjA1Y2MyNjJhYzY0ZjljMzciXSxbIjc3NGFlN2Y4NThhOTQxMWU1ZWY0MjQ2YjcwYzY1YWFjNTY0OTk4MGJlNWMxNzg5MWJiZWMxNzg5NWRhMDA4Y2IiLCJkOTg0YTAzMmViNmI1ZTE5MDI0M2RkNTZkN2I3YjM2NTM3MmRiMWUyZGZmOWQ2YTgzMDFkNzRjOWM5NTNjNjFiIl0sWyJmMjg3''@;'; put 'put ''NzNjMmQ5NzUyODhiYzdkMWQyMDVjMzc0ODY1MWIwNzVmYmM2NjEwZTU4Y2RkZWVkZGY4ZjE5NDA1YWE4IiwiYWIwOTAyZThkODgwYTg5NzU4MjEyZWI2NWNkYWY0NzNhMWEwNmRhNTIxZmE5MWYyOWI1Y2I1MmRiMDNlZDgxIl0sWyJkNzkyNGQ0ZjdkNDNlYTk2NWE0NjVhZTMwOTVmZjQxMTMx''@;'; put 'put ''ZTU5NDZmM2M4NWY3OWU0NGFkYmNmOGUyN2UwODBlIiwiNTgxZTI4NzJhODZjNzJhNjgzODQyZWMyMjhjYzZkZWZlYTQwYWYyYmQ4OTZkM2E1YzUwNGRjOWZmNmEyNmI1OCJdLFsiZGVmZGVhNGNkYjY3Nzc1MGE0MjBmZWU4MDdlYWNmMjFlYjk4OThhZTc5Yjk3Njg3NjZlNGZhYTA0YTJkNGEz''@;'; put 'put ''NCIsIjQyMTFhYjA2OTQ2MzUxNjhlOTk3YjBlYWQyYTkzZGFlY2VkMWY0YTA0YTk1YzBmNmNmYjE5OWY2OWU1NmViNzciXSxbIjJiNGVhMGE3OTdhNDQzZDI5M2VmNWNmZjQ0NGY0OTc5ZjA2YWNmZWJkN2U4NmQyNzc0NzU2NTYxMzgzODViNmMiLCI4NWU4OWJjMDM3OTQ1ZDkzYjM0MzA4M2I1''@;'; put 'put ''YTFjODYxMzFhMDFmNjBjNTAyNjk3NjNiNTcwYzg1NGU1YzA5YjdhIl0sWyIzNTJiYmY0YTRjZGQxMjU2NGY5M2ZhMzMyY2UzMzMzMDFkOWFkNDAyNzFmODEwNzE4MTM0MGFlZjI1YmU1OWQ1IiwiMzIxZWI0MDc1MzQ4ZjUzNGQ1OWMxODI1OWRkYTNlMWY0YTFiM2IyZTcxYjEwMzljNjdiZDNk''@;'; put 'put ''OGJjZjgxOTk4YyJdLFsiMmZhMjEwNGQ2YjM4ZDExYjAyMzAwMTA1NTk4NzkxMjRlNDJhYjhkZmVmZjVmZjI5ZGM5Y2RhZGQ0ZWNhY2MzZiIsIjJkZTEwNjgyOTVkZDg2NWI2NDU2OTMzNWJkNWRkODAxODFkNzBlY2ZjODgyNjQ4NDIzYmE3NmI1MzJiN2Q2NyJdLFsiOTI0ODI3OWIwOWI0ZDY4''@;'; put 'put ''ZGFiMjFhOWIwNjZlZGRhODMyNjNjM2Q4NGUwOTU3MmUyNjljYTBjZDdmNTQ1MzcxNCIsIjczMDE2ZjdiZjIzNGFhZGU1ZDFhYTcxYmRlYTJiMWZmM2ZjMGRlMmE4ODc5MTJmZmU1NGEzMmNlOTdjYjM0MDIiXSxbImRhZWQ0ZjJiZTNhOGJmMjc4ZTcwMTMyZmIwYmViNzUyMmY1NzBlMTQ0YmY2''@;'; put 'put ''MTVjMDdlOTk2ZDQ0M2RlZTg3MjkiLCJhNjlkY2U0YTdkNmM5OGU4ZDRhMWFjYTg3ZWY4ZDcwMDNmODNjMjMwZjNhZmE3MjZhYjQwZTUyMjkwYmUxYzU1Il0sWyJjNDRkMTJjNzA2NWQ4MTJlOGFjZjI4ZDdjYmIxOWY5MDExZWNkOWU5ZmRmMjgxYjBlNmEzYjVlODdkMjJlN2RiIiwiMjExOWE0''@;'; put 'put ''NjBjZTMyNmNkYzc2YzQ1OTI2Yzk4MmZkYWMwZTEwNmU4NjFlZGY2MWM1YTAzOTA2M2YwZTBlNjQ4MiJdLFsiNmEyNDViZjZkYzY5ODUwNGM4OWEyMGNmZGVkNjA4NTMxNTJiNjk1MzM2YzI4MDYzYjYxYzY1Y2JkMjY5ZTZiNCIsImUwMjJjZjQyYzJiZDRhNzA4YjNmNTEyNmYxNmEyNGFkOGIz''@;'; put 'put ''M2JhNDhkMDQyM2I2ZWZkNWU2MzQ4MTAwZDhhODIiXSxbIjE2OTdmZmE2ZmQ5ZGU2MjdjMDc3ZTNkMmZlNTQxMDg0Y2UxMzMwMGIwYmVjMTE0NmY5NWFlNTdmMGQwYmQ2YTUiLCJiOWMzOThmMTg2ODA2ZjVkMjc1NjE1MDZlNDU1NzQzM2EyY2YxNTAwOWU0OThhZTdhZGVlOWQ2M2QwMWIyMzk2''@;'; put 'put ''Il0sWyI2MDViZGIwMTk5ODE3MThiOTg2ZDBmMDdlODM0Y2IwZDlkZWI4MzYwZmZiN2Y2MWRmOTgyMzQ1ZWYyN2E3NDc5IiwiMjk3MmQyZGU0ZjhkMjA2ODFhNzhkOTNlYzk2ZmUyM2MyNmJmYWU4NGZiMTRkYjQzYjAxZTFlOTA1NmI4YzQ5Il0sWyI2MmQxNGRhYjQxNTBiZjQ5NzQwMmZkYzQ1''@;'; put 'put ''YTIxNWUxMGRjYjAxYzM1NDk1OWIxMGNmZTMxYzdlOWQ4N2ZmMzNkIiwiODBmYzA2YmQ4Y2M1YjAxMDk4MDg4YTE5NTBlZWQwZGIwMWFhMTMyOTY3YWI0NzIyMzVmNTY0MjQ4M2IyNWVhZiJdLFsiODBjNjBhZDAwNDBmMjdkYWRlNWI0YjA2YzQwOGU1NmIyYzUwZTlmNTZiOWI4YjQyNWU1NTVj''@;'; put 'put ''MmY4NjMwOGI2ZiIsIjFjMzgzMDNmMWNjNWMzMGYyNmU2NmJhZDdmZTcyZjcwYTY1ZWVkNGNiZTcwMjRlYjFhYTAxZjU2NDMwYmQ1N2EiXSxbIjdhOTM3NWFkNjE2N2FkNTRhYTc0YzYzNDhjYzU0ZDM0NGNjNWRjOTQ4N2Q4NDcwNDlkNWVhYmIwZmEwM2M4ZmIiLCJkMGUzZmE5ZWNhODcyNjkw''@;'; put 'put ''OTU1OWUwZDc5MjY5MDQ2YmRjNTllYTEwYzcwY2UyYjAyZDQ5OWVjMjI0ZGM3ZjciXSxbImQ1MjhlY2Q5YjY5NmI1NGM5MDdhOWVkMDQ1NDQ3YTc5YmI0MDhlYzM5YjY4ZGY1MDRiYjUxZjQ1OWJjM2ZmYzkiLCJlZWNmNDEyNTMxMzZlNWY5OTk2NmYyMTg4MWZkNjU2ZWJjNDM0NTQwNWM1MjBk''@;'; put 'put ''YmMwNjM0NjViNTIxNDA5OTMzIl0sWyI0OTM3MGE0YjVmNDM0MTJlYTI1ZjUxNGU4ZWNkYWQwNTI2NjExNWU0YTdlY2IxMzg3MjMxODA4ZjhiNDU5NjMiLCI3NThmM2Y0MWFmZDZlZDQyOGIzMDgxYjA1MTJmZDYyYTU0YzNmM2FmYmI1YjY3NjRiNjUzMDUyYTEyOTQ5YzlhIl0sWyI3N2YyMzA5''@;'; put 'put ''MzZlZTg4Y2JiZDczZGY5MzBkNjQ3MDJlZjg4MWQ4MTFlMGUxNDk4ZTJmMWMxM2ViMWZjMzQ1ZDc0IiwiOTU4ZWY0MmE3ODg2YjY0MDBhMDgyNjZlOWJhMWIzNzg5NmM5NTMzMGQ5NzA3N2NiYmU4ZWIzYzc2NzFjNjBkNiJdLFsiZjJkYWM5OTFjYzRjZTRiOWVhNDQ4ODdlNWM3YzBiY2U1OGM4''@;'; put 'put ''MDA3NGFiOWQ0ZGJhZWIyODUzMWI3NzM5ZjUzMCIsImUwZGVkYzliM2IyZjhkYWQ0ZGExZjMyZGVjMjUzMWRmOWViNWZiZWIwNTk4ZTRmZDFhMTE3ZGJhNzAzYTNjMzciXSxbIjQ2M2IzZDlmNjYyNjIxZmIxYjRiZThmYmJlMjUyMDEyNWEyMTZjZGZjOWRhZTNkZWJjYmE0ODUwYzY5MGQ0NWIi''@;'; put 'put ''LCI1ZWQ0MzBkNzhjMjk2YzM1NDMxMTQzMDZkZDg2MjJkN2M2MjJlMjdjOTcwYTFkZTMxY2IzNzdiMDFhZjczMDdlIl0sWyJmMTZmODA0MjQ0ZTQ2ZTJhMDkyMzJkNGFmZjNiNTk5NzZiOThmYWMxNDMyOGEyZDFhMzI0OTZiNDk5OThmMjQ3IiwiY2VkYWJkOWI4MjIwM2Y3ZTEzZDIwNmZjZGY0''@;'; put 'put ''ZTMzZDkyYTZjNTNjMjZlNWNjZTI2ZDY1Nzk5NjJjNGUzMWRmNiJdLFsiY2FmNzU0MjcyZGM4NDU2M2IwMzUyYjdhMTQzMTFhZjU1ZDI0NTMxNWFjZTI3YzY1MzY5ZTE1ZjcxNTFkNDFkMSIsImNiNDc0NjYwZWYzNWY1ZjJhNDFiNjQzZmE1ZTQ2MDU3NWY0ZmE5Yjc5NjIyMzJhNWMzMmY5MDgz''@;'; put 'put ''MThhMDQ0NzYiXSxbIjI2MDBjYTRiMjgyY2I5ODZmODVkMGYxNzA5OTc5ZDhiNDRhMDljMDdjYjg2ZDdjMTI0NDk3YmM4NmYwODIxMjAiLCI0MTE5Yjg4NzUzYzE1YmQ2YTY5M2IwM2ZjZGRiYjQ1ZDVhYzZiZTc0YWI1ZjBlZjQ0YjBiZTk0NzVhN2U0YjQwIl0sWyI3NjM1Y2E3MmQ3ZTg0MzJj''@;'; put 'put ''MzM4ZWM1M2NkMTIyMjBiYzAxYzQ4Njg1ZTI0ZjdkYzhjNjAyYTc3NDY5OThlNDM1IiwiOTFiNjQ5NjA5NDg5ZDYxM2QxZDVlNTkwZjc4ZTZkNzRlY2ZjMDYxZDU3MDQ4YmFkOWU3NmYzMDJjNWI5YzYxIl0sWyI3NTRlMzIzOWYzMjU1NzBjZGJiZjRhODdkZWVlOGE2NmI3ZjJiMzM0NzlkNDY4''@;'; put 'put ''ZmJjMWE1MDc0M2JmNTZjYzE4IiwiNjczZmI4NmU1YmRhMzBmYjNjZDBlZDMwNGVhNDlhMDIzZWUzM2QwMTk3YTY5NWQwYzVkOTgwOTNjNTM2NjgzIl0sWyJlM2U2YmQxMDcxYTFlOTZhZmY1Nzg1OWM4MmQ1NzBmMDMzMDgwMDY2MWQxYzk1MmY5ZmUyNjk0NjkxZDliOWU4IiwiNTljOWUwYmJh''@;'; put 'put ''Mzk0ZTc2ZjQwYzBhYTU4Mzc5YTNjYjZhNWEyMjgzOTkzZTkwYzQxNjcwMDJhZjQ5MjBlMzdmNSJdLFsiMTg2YjQ4M2QwNTZhMDMzODI2YWU3M2Q4OGY3MzI5ODVjNGNjYjFmMzJiYTM1ZjRiNGNjNDdmZGNmMDRhYTZlYiIsIjNiOTUyZDMyYzY3Y2Y3N2UyZTE3NDQ2ZTIwNDE4MGFiMjFmYjgw''@;'; put 'put ''OTA4OTUxMzhiNGE0YTc5N2Y4NmU4MDg4OGIiXSxbImRmOWQ3MGE2Yjk4NzZjZTU0NGM5ODU2MWY0YmU0ZjcyNTQ0MmU2ZDJiNzM3ZDljOTFhODMyMTcyNGNlMDk2M2YiLCI1NWViMmRhZmQ4NGQ2Y2NkNWY4NjJiNzg1ZGMzOWQ0YWIxNTcyMjI3MjBlZjlkYTIxN2I4YzQ1Y2YyYmEyNDE3Il0s''@;'; put 'put ''WyI1ZWRkNWNjMjNjNTFlODdhNDk3Y2E4MTVkNWRjZTBmOGFiNTI1NTRmODQ5ZWQ4OTk1ZGU2NGM1ZjM0Y2U3MTQzIiwiZWZhZTljOGRiYzE0MTMwNjYxZThjZWMwMzBjODlhZDBjMTNjNjZjMGQxN2EyOTA1Y2RjNzA2YWI3Mzk5YTg2OCJdLFsiMjkwNzk4YzJiNjQ3NjgzMGRhMTJmZTAyMjg3''@;'; put 'put ''ZTllNzc3YWEzZmJhMWMzNTViMTdhNzIyZDM2MmY4NDYxNGZiYSIsImUzOGRhNzZkY2Q0NDA2MjE5ODhkMDBiY2Y3OWFmMjVkNWIyOWMwOTRkYjJhMjMxNDZkMDAzYWZkNDE5NDNlN2EiXSxbImFmM2M0MjNhOTVkOWY1YjMwNTQ3NTRlZmExNTBhYzM5Y2QyOTU1MmZlMzYwMjU3MzYyZGZkZWNl''@;'; put 'put ''ZjQwNTNiNDUiLCJmOThhM2ZkODMxZWIyYjc0OWE5M2IwZTZmMzVjZmI0MGM4Y2Q1YWE2NjdhMTU1ODFiYzJmZWRlZDQ5OGZkOWM2Il0sWyI3NjZkYmIyNGQxMzRlNzQ1Y2NjYWEyOGM5OWJmMjc0OTA2YmI2NmIyNmRjZjk4ZGY4ZDJmZWQ1MGQ4ODQyNDlhIiwiNzQ0YjExNTJlYWNiZTVlMzhk''@;'; put 'put ''Y2M4ODc5ODBkYTM4Yjg5NzU4NGE2NWZhMDZjZWRkMmM5MjRmOTdjYmFjNTk5NiJdLFsiNTlkYmY0NmY4Yzk0NzU5YmEyMTI3N2MzMzc4NGY0MTY0NWY3YjQ0ZjZjNTk2YTU4Y2U5MmU2NjYxOTFhYmUzZSIsImM1MzRhZDQ0MTc1ZmJjMzAwZjRlYTZjZTY0ODMwOWEwNDJjZTczOWE3OTE5Nzk4''@;'; put 'put ''Y2Q4NWUyMTZjNGEzMDdmNmUiXSxbImYxM2FkYTk1MTAzYzQ1MzczMDVlNjkxZTc0ZTlhNGE4ZGQ2NDdlNzExYTk1ZTczY2I2MmRjNjAxOGNmZDg3YjgiLCJlMTM4MTdiNDRlZTE0ZGU2NjNiZjRiYzgwODM0MWYzMjY5NDllMjFhNmE3NWMyNTcwNzc4NDE5YmRhZjU3MzNkIl0sWyI3NzU0YjRm''@;'; put 'put ''YTBlOGFjZWQwNmQ0MTY3YTJjNTljY2E0Y2RhMTg2OWMwNmViYWRmYjY0ODg1NTAwMTVhODg1MjJjIiwiMzBlOTNlODY0ZTY2OWQ4MjIyNGI5NjdjMzAyMGI4ZmE4ZDFlNGUzNTBiNmNiY2M1MzdhNDhiNTc4NDExNjNhMiJdLFsiOTQ4ZGNhZGY1OTkwZTA0OGFhMzg3NGQ0NmFiZWY5ZDcwMTg1''@;'; put 'put ''OGY5NWRlODA0MWQyYTY4MjhjOTllMjI2MjUxOSIsImU0OTFhNDI1MzdmNmU1OTdkNWQyOGEzMjI0YjFiYzI1ZGY5MTU0ZWZiZDJlZjFkMmNiYmEyY2FlNTM0N2Q1N2UiXSxbIjc5NjI0MTQ0NTBjNzZjMTY4OWM3YjQ4ZjgyMDJlYzM3ZmIyMjRjZjVhYzBiZmExNTcwMzI4YThhM2Q3Yzc3YWIi''@;'; put 'put ''LCIxMDBiNjEwZWM0ZmZiNDc2MGQ1YzFmYzEzM2VmNmY2YjEyNTA3YTA1MWYwNGFjNTc2MGFmYTViMjlkYjgzNDM3Il0sWyIzNTE0MDg3ODM0OTY0YjU0YjE1YjE2MDY0NGQ5MTU0ODVhMTY5NzcyMjViODg0N2JiMGRkMDg1MTM3ZWM0N2NhIiwiZWYwYWZiYjIwNTYyMDU0NDhlMTY1MmM0OGU4''@;'; put 'put ''MTI3ZmM2MDM5ZTc3YzE1YzIzNzhiN2U3ZDE1YTBkZTI5MzMxMSJdLFsiZDNjYzMwYWQ2YjQ4M2U0YmM3OWNlMmM5ZGQ4YmM1NDk5M2U5NDdlYjhkZjc4N2I0NDI5NDNkM2Y3YjUyN2VhZiIsIjhiMzc4YTIyZDgyNzI3OGQ4OWM1ZTliZThmOTUwOGFlM2MyYWQ0NjI5MDM1ODYzMGFmYjM0ZGIw''@;'; put 'put ''NGVlZGUwYTQiXSxbIjE2MjRkODQ3ODA3MzI4NjBjZTFjNzhmY2JmZWZlMDhiMmIyOTgyM2RiOTEzZjY0OTM5NzViYTBmZjQ4NDc2MTAiLCI2ODY1MWNmOWI2ZGE5MDNlMDkxNDQ0OGM2Y2Q5ZDRjYTg5Njg3OGY1MjgyYmU0YzhjYzA2ZTJhNDA0MDc4NTc1Il0sWyI3MzNjZTgwZGE5NTVhOGEy''@;'; put 'put ''NjkwMmM5NTYzM2U2MmE5ODUxOTI0NzRiNWFmMjA3ZGE2ZGY3YjRmZDVmYzYxY2Q0IiwiZjU0MzVhMmJkMmJhZGY3ZDQ4NWE0ZDhiOGRiOWZjY2UzZTFlZjhlMDIwMWU0NTc4YzU0NjczYmMxZGM1ZWExZCJdLFsiMTVkOTQ0MTI1NDk0NTA2NGNmMWExYzMzYmJkM2I0OWY4OTY2YzUwOTIxNzFl''@;'; put 'put ''Njk5ZWYyNThkZmFiODFjMDQ1YyIsImQ1NmViMzBiNjk0NjNlNzIzNGY1MTM3YjczYjg0MTc3NDM0ODAwYmFjZWJmYzY4NWZjMzdiYmU5ZWZlNDA3MGQiXSxbImExZDBmY2YyZWM5ZGU2NzViNjEyMTM2ZTVjZTcwZDI3MWMyMTQxN2M5ZDJiOGFhYWFjMTM4NTk5ZDA3MTc5NDAiLCJlZGQ3N2Y1''@;'; put 'put ''MGJjYjVhM2NhYjJlOTA3MzczMDk2NjdmMjY0MTQ2MmE1NDA3MGYzZDUxOTIxMmQzOWMxOTdhNjI5Il0sWyJlMjJmYmUxNWMwYWY4Y2NjNTc4MGMwNzM1Zjg0ZGJlOWE3OTBiYWRlZTgyNDVjMDZjN2NhMzczMzFjYjM2OTgwIiwiYTg1NWJhYmFkNWNkNjBjODhiNDMwYTY5ZjUzYTFhN2EzODI4''@;'; put 'put ''OTE1NDk2NDc5OWJlNDNkMDZkNzdkMzFkYTA2Il0sWyIzMTEwOTFkZDk4NjBlOGUyMGVlMTM0NzNjMTE1NWY1ZjY5NjM1ZTM5NDcwNGVhYTc0MDA5NDUyMjQ2Y2ZhOWIzIiwiNjZkYjY1NmY4N2QxZjA0ZmZmZDFmMDQ3ODhjMDY4MzA4NzFlYzVhNjRmZWVlNjg1YmQ4MGYwYjEyODZkODM3NCJd''@;'; put 'put ''LFsiMzRjMWZkMDRkMzAxYmU4OWIzMWMwNDQyZDNlNmFjMjQ4ODM5MjhiNDVhOTM0MDc4MTg2N2Q0MjMyZWMyZGJkZiIsIjk0MTQ2ODVlOTdiMWI1OTU0YmQ0NmY3MzAxNzQxMzZkNTdmMWNlZWI0ODc0NDNkYzUzMjE4NTdiYTczYWJlZSJdLFsiZjIxOWVhNWQ2YjU0NzAxYzFjMTRkZTViNTU3''@;'; put 'put ''ZWI0MmE4ZDEzZjNhYmJjZDA4YWZmY2MyYTVlNmIwNDliOGQ2MyIsIjRjYjk1OTU3ZTgzZDQwYjBmNzNhZjQ1NDRjY2NmNmIxZjRiMDhkM2MwN2IyN2ZiOGQ4YzI5NjJhNDAwNzY2ZDEiXSxbImQ3Yjg3NDBmNzRhOGZiYWFiMWY2ODNkYjhmNDVkZTI2NTQzYTU0OTBiY2E2MjcwODcyMzY5MTI0''@;'; put 'put ''NjlhMGI0NDgiLCJmYTc3OTY4MTI4ZDljOTJlZTEwMTBmMzM3YWQ0NzE3ZWZmMTVkYjVlZDNjMDQ5YjM0MTFlMDMxNWVhYTQ1OTNiIl0sWyIzMmQzMWMyMjJmOGY2ZjBlZjg2ZjdjOThkM2EzMzM1ZWFkNWJjZDMyYWJkZDk0Mjg5ZmU0ZDMwOTFhYTgyNGJmIiwiNWYzMDMyZjU4OTIxNTZlMzlj''@;'; put 'put ''Y2QzZDc5MTViOWUxZGEyZTZkYWM5ZTZmMjZlOTYxMTE4ZDE0Yjg0NjJlMTY2MSJdLFsiNzQ2MWYzNzE5MTRhYjMyNjcxMDQ1YTE1NWQ5ODMxZWE4NzkzZDc3Y2Q1OTU5MmM0MzQwZjg2Y2JjMTgzNDdiNSIsIjhlYzBiYTIzOGI5NmJlYzBjYmRkZGNhZTBhYTQ0MjU0MmVlZTFmZjUwYzk4NmVh''@;'; put 'put ''NmIzOTg0N2IzY2MwOTJmZjYiXSxbImVlMDc5YWRiMWRmMTg2MDA3NDM1NmEyNWFhMzgyMDZhNmQ3MTZiMmMzZTY3NDUzZDI4NzY5OGJhZDdiMmIyZDYiLCI4ZGMyNDEyYWFmZTNiZTVjNGM1ZjM3ZTBlY2M1ZjlmNmE0NDY5ODlhZjA0YzRlMjVlYmFhYzQ3OWVjMWM4YzFlIl0sWyIxNmVjOTNl''@;'; put 'put ''NDQ3ZWM4M2YwNDY3YjE4MzAyZWU2MjBmN2U2NWRlMzMxODc0YzlkYzcyYmZkODYxNmJhOWRhNmI1IiwiNWU0NjMxMTUwZTYyZmI0MGQwZThjMmE3Y2E1ODA0YTM5ZDU4MTg2YTUwZTQ5NzEzOTYyNjc3OGUyNWIwNjc0ZCJdLFsiZWFhNWY5ODBjMjQ1ZjZmMDM4OTc4MjkwYWZhNzBiNmJkODg1''@;'; put 'put ''NTg5N2Y5OGI2YWE0ODViOTYwNjVkNTM3YmQ5OSIsImY2NWY1ZDNlMjkyYzJlMDgxOWE1MjgzOTFjOTk0NjI0ZDc4NDg2OWQ3ZTZlYTY3ZmIxODA0MTAyNGVkYzA3ZGMiXSxbIjc4Yzk0MDc1NDRhYzEzMjY5MmVlMTkxMGEwMjQzOTk1OGFlMDQ4NzcxNTEzNDJlYTk2YzRiNmIzNWE0OWY1MSIs''@;'; put 'put ''ImYzZTAzMTkxNjllYjliODVkNTQwNDc5NTUzOWE1ZTY4ZmExZmJkNTgzYzA2NGQyNDYyYjY3NWYxOTRhM2RkYjQiXSxbIjQ5NGY0YmUyMTlhMWE3NzAxNmRjZDgzODQzMWFlYTAwMDFjZGM4YWU3YTZmYzY4ODcyNjU3OGQ5NzAyODU3YTUiLCI0MjI0MmE5NjkyODNhNWYzMzliYTdmMDc1ZTM2''@;'; put 'put ''YmEyYWY5MjVjZTMwZDc2N2VkNmU1NWY0YjAzMTg4MGQ1NjJjIl0sWyJhNTk4YTgwMzBkYTZkODZjNmJjN2YyZjUxNDRlYTU0OWQyODIxMWVhNThmYWE3MGViZjRjMWU2NjVjMWZlOWI1IiwiMjA0YjVkNmY4NDgyMmMzMDdlNGI0YTcxNDA3MzdhZWMyM2ZjNjNiNjViMzVmODZhMTAwMjZkYmQy''@;'; put 'put ''ZDg2NGU2YiJdLFsiYzQxOTE2MzY1YWJiMmI1ZDA5MTkyZjVmMmRiZWFmZWMyMDhmMDIwZjEyNTcwYTE4NGRiYWRjM2U1ODU5NTk5NyIsIjRmMTQzNTFkMDA4N2VmYTQ5ZDI0NWIzMjg5ODQ5ODlkNWNhZjk0NTBmMzRiZmMwZWQxNmU5NmI1OGZhOTkxMyJdLFsiODQxZDYwNjNhNTg2ZmE0NzVh''@;'; put 'put ''NzI0NjA0ZGEwM2JjNWI5MmEyZTBkMmUwYTM2YWNmZTRjNzNhNTUxNDc0Mjg4MSIsIjczODY3ZjU5YzA2NTllODE5MDRmOWExYzc1NDM2OThlNjI1NjJkNjc0NGMxNjljZTdhMzZkZTAxYThkNjE1NCJdLFsiNWU5NWJiMzk5YTY5NzFkMzc2MDI2OTQ3Zjg5YmRlMmYyODJiMzM4MTA5MjhiZTRk''@;'; put 'put ''ZWQxMTJhYzRkNzBlMjBkNSIsIjM5ZjIzZjM2NjgwOTA4NWJlZWJmYzcxMTgxMzEzNzc1YTk5YzlhZWQ3ZDhiYTM4YjE2MTM4NGM3NDYwMTI4NjUiXSxbIjM2ZTQ2NDFhNTM5NDhmZDQ3NmMzOWY4YTk5ZmQ5NzRlNWVjMDc1NjRiNTMxNWQ4YmY5OTQ3MWJjYTBlZjJmNjYiLCJkMjQyNGIxYjFh''@;'; put 'put ''YmU0ZWI4MTY0MjI3YjA4NWM5YWE5NDU2ZWExMzQ5M2ZkNTYzZTA2ZmQ1MWNmNTY5NGM3OGZjIl0sWyIzMzY1ODFlYTdiZmJiYjI5MGMxOTFhMmY1MDdhNDFjZjU2NDM4NDIxNzBlOTE0ZmFlYWIyN2MyYzU3OWY3MjYiLCJlYWQxMjE2ODU5NWZlMWJlOTkyNTIxMjliNmU1NmIzMzkxZjdhYjE0''@;'; put 'put ''MTBjZDFlMGVmM2RjZGNhYmQyZmRhMjI0Il0sWyI4YWI4OTgxNmRhZGZkNmI2YTFmMjYzNGZjZjAwZWM4NDAzNzgxMDI1ZWQ2ODkwYzQ4NDk3NDI3MDZiZDQzZWRlIiwiNmZkY2VmMDlmMmY2ZDBhMDQ0ZTY1NGFlZjYyNDEzNmY1MDNkNDU5YzNlODk4NDU4NThhNDdhOTEyOWNkZDI0ZSJdLFsi''@;'; put 'put ''MWUzM2YxYTc0NmM5YzU3NzgxMzMzNDRkOTI5OWZjYWEyMGIwOTM4ZThhY2ZmMjU0NGJiNDAyODRiOGM1ZmI5NCIsIjYwNjYwMjU3ZGQxMWIzYWE5YzhlZDYxOGQyNGVkZmYyMzA2ZDMyMGYxZDAzMDEwZTMzYTdkMjA1N2YzYjNiNiJdLFsiODViN2MxZGNiM2NlYzFiN2VlN2YzMGRlZDc5ZGQy''@;'; put 'put ''MGEwZWQxZjRjYzE4Y2JjZmNmYTQxMDM2MWZkOGYwOGYzMSIsIjNkOThhOWNkZDAyNmRkNDNmMzkwNDhmMjVhODg0N2Y0ZmNhZmFkMTg5NWQ3YTYzM2M2ZmVkM2MzNWU5OTk1MTEiXSxbIjI5ZGY5ZmJkOGQ5ZTQ2NTA5Mjc1ZjRiMTI1ZDZkNDVkN2ZiZTlhM2I4NzhhN2FmODcyYTI4MDA2NjFh''@;'; put 'put ''YzVmNTEiLCJiNGM0ZmU5OWM3NzVhNjA2ZTJkODg2MjE3OTEzOWZmZGE2MWRjODYxYzAxOWU1NWNkMjg3NmViMmEyN2Q4NGIiXSxbImEwYjFjYWUwNmIwYTg0N2EzZmVhNmU2NzFhYWY4YWRmZGZlNThjYTJmNzY4MTA1YzgwODJiMmU0NDlmY2UyNTIiLCJhZTQzNDEwMmVkZGUwOTU4ZWM0YjE5''@;'; put 'put ''ZDkxN2E2YTI4ZTZiNzJkYTE4MzRhZmYwZTY1MGYwNDk1MDNhMjk2Y2YyIl0sWyI0ZThjZWFmYjliM2U5YTEzNmRjN2ZmNjdlODQwMjk1YjQ5OWRmYjNiMjEzM2U0YmExMTNmMmU0YzBlMTIxZTUiLCJjZjIxNzQxMThjOGI2ZDdhNGI0OGY2ZDUzNGNlNWM3OTQyMmMwODZhNjM0NjA1MDJiODI3''@;'; put 'put ''Y2U2MmEzMjY2ODNjIl0sWyJkMjRhNDRlMDQ3ZTE5YjZmNWFmYjgxYzdjYTJmNjkwODBhNTA3NjY4OWEwMTA5MTlmNDI3MjVjMmI3ODlhMzNiIiwiNmZiOGQ1NTkxYjQ2NmY4ZmM2M2RiNTBmMWMwZjFjNjkwMTNmOTk2ODg3YjgyNDRkMmNkZWM0MTdhZmVhOGZhMyJdLFsiZWEwMTYwNmE3YTZj''@;'; put 'put ''OWNkZDI0OWZkZmNmYWNiOTk1ODQwMDFlZGQyOGFiYmFiNzdiNTEwNGU5OGU4ZTNiMzVkNCIsIjMyMmFmNDkwOGM3MzEyYjBjZmJmZTM2OWY3YTdiM2NkYjdkNDQ5NGJjMjgyMzcwMGNmZDY1MjE4OGEzZWE5OGQiXSxbImFmOGFkZGJmMmI2NjFjOGE2YzYzMjg2NTVlYjk2NjUxMjUyMDA3ZDhj''@;'; put 'put ''NWVhMzFiZTRhZDE5NmRlOGNlMjEzMWYiLCI2NzQ5ZTY3YzAyOWI4NWY1MmEwMzRlYWZkMDk2ODM2YjI1MjA4MTg2ODBlMjZhYzhmM2RmYmNkYjcxNzQ5NzAwIl0sWyJlM2FlMTk3NDU2NmNhMDZjYzUxNmQ0N2UwZmIxNjVhNjc0YTNkYWJjZmNhMTVlNzIyZjBlMzQ1MGY0NTg4OSIsIjJhZWFi''@;'; put 'put ''ZTdlNDUzMTUxMDExNjIxN2YwN2JmNGQwNzMwMGRlOTdlNDg3NGY4MWY1MzM0MjBhNzJlZWIwYmQ2YTQiXSxbIjU5MWVlMzU1MzEzZDk5NzIxY2Y2OTkzZmZlZDFlM2UzMDE5OTNmZjNlZDI1ODgwMjA3NWVhOGNlZDM5N2UyNDYiLCJiMGVhNTU4YTExM2MzMGJlYTYwZmM0Nzc1NDYwYzc5MDFm''@;'; put 'put ''ZjBiMDUzZDI1Y2EyYmRlZWU5OGYxYTRiZTVkMTk2Il0sWyIxMTM5NmQ1NWZkYTU0YzQ5ZjE5YWE5NzMxOGQ4ZGE2MWZhODU4NGU0N2IwODQ5NDUwNzdjZjAzMjU1YjUyOTg0IiwiOTk4Yzc0YThjZDQ1YWMwMTI4OWQ1ODMzYTdiZWI0NzQ0ZmY1MzZiMDFiMjU3YmU0YzU3NjdiZWE5M2VhNTdh''@;'; put 'put ''NCJdLFsiM2M1ZDJhMWJhMzljNWExNzkwMDAwNzM4YzllMGM0MGI4ZGNkZmQ1NDY4NzU0YjY0MDU1NDAxNTdlMDE3YWE3YSIsImIyMjg0Mjc5OTk1YTM0ZTJmOWQ0ZGU3Mzk2ZmMxOGI4MGY5YjhiOWZkZDI3MGY2NjYxZjc5Y2E0YzgxYmQyNTciXSxbImNjODcwNGI4YTYwYTBkZWZhM2E5OWE3''@;'; put 'put ''Mjk5ZjJlOWMzZmJjMzk1YWZiMDRhYzA3ODQyNWVmOGExNzkzY2MwMzAiLCJiZGQ0NjAzOWZlZWQxNzg4MWQxZTA4NjJkYjM0N2Y4Y2YzOTViNzRmYzRiY2RjNGU5NDBiNzRlM2FjMWYxYjEzIl0sWyJjNTMzZTRmN2VhODU1NWFhY2Q5Nzc3YWM1Y2FkMjliOTdkZDRkZWZjY2M1M2VlN2VhMjA0''@;'; put 'put ''MTE5YjI4ODliMTk3IiwiNmYwYTI1NmJjNWVmZGY0MjlhMmZiNjI0MmYxYTQzYTJkOWI5MjViYjRhNGIzYTI2YmI4ZTBmNDVlYjU5NjA5NiJdLFsiYzE0ZjhmMmNjYjI3ZDZmMTA5ZjZkMDhkMDNjYzk2YTY5YmE4YzM0ZWVjMDdiYmNmNTY2ZDQ4ZTMzZGE2NTkzIiwiYzM1OWQ2OTIzYmIzOThm''@;'; put 'put ''N2ZkNDQ3M2UxNmZlMWMyODQ3NWI3NDBkZDA5ODA3NWU2YzBlODY0OTExM2RjM2EzOCJdLFsiYTZjYmMzMDQ2YmM2YTQ1MGJhYzI0Nzg5ZmExNzExNWE0Yzk3MzllZDc1ZjhmMjFjZTQ0MWY3MmUwYjkwZTZlZiIsIjIxYWU3ZjQ2ODBlODg5YmIxMzA2MTllMmMwZjk1YTM2MGNlYjU3M2M3MDYw''@;'; put 'put ''MzEzOTg2MmFmZDYxN2ZhOWI5ZiJdLFsiMzQ3ZDZkOWEwMmM0ODkyN2ViZmI4NmMxMzU5YjFjYWYxMzBhM2MwMjY3ZDExY2U2MzQ0YjM5Zjk5ZDQzY2MzOCIsIjYwZWE3ZjYxYTM1MzUyNGQxYzk4N2Y2ZWNlYzkyZjA4NmQ1NjVhYjY4Nzg3MGNiMTI2ODlmZjFlMzFjNzQ0NDgiXSxbImRhNjU0''@;'; put 'put ''NWQyMTgxZGI4ZDk4M2Y3ZGNiMzc1ZWY1ODY2ZDQ3YzY3YjFiZjMxYzhjZjg1NWVmNzQzN2I3MjY1NmEiLCI0OWI5NjcxNWFiNjg3OGE3OWU3OGYwN2NlNTY4MGM1ZDY2NzMwNTFiNDkzNWJkODk3ZmVhODI0Yjc3ZGMyMDhhIl0sWyJjNDA3NDdjYzlkMDEyY2IxYTEzYjgxNDgzMDljNmRlN2Vj''@;'; put 'put ''MjVkNjk0NWQ2NTcxNDZiOWQ1OTk0YjhmZWIxMTExIiwiNWNhNTYwNzUzYmUyYTEyZmM2ZGU2Y2FmMmNiNDg5NTY1ZGI5MzYxNTZiOTUxNGUxYmI1ZTgzMDM3ZTBmYTJkNCJdLFsiNGU0MmM4ZWM4MmM5OTc5OGNjZjNhNjEwYmU4NzBlNzgzMzhjN2Y3MTMzNDhiZDM0YzgyMDNlZjQwMzdmMzUw''@;'; put 'put ''MiIsIjc1NzFkNzRlZTVlMGZiOTJhN2E4YjMzYTA3NzgzMzQxYTU0OTIxNDRjYzU0YmNjNDBhOTQ0NzM2OTM2MDY0MzciXSxbIjM3NzVhYjcwODliYzZhZjgyM2FiYTJlMWFmNzBiMjM2ZDI1MWNhZGIwYzg2NzQzMjg3NTIyYTFiM2IwZGVkZWEiLCJiZTUyZDEwN2JjZmEwOWQ4YmNiOTczNmE4''@;'; put 'put ''MjhjZmE3ZmFjOGRiMTdiZjdhNzZhMmM0MmFkOTYxNDA5MDE4Y2Y3Il0sWyJjZWUzMWNiZjdlMzRlYzM3OWQ5NGZiODE0ZDNkNzc1YWQ5NTQ1OTVkMTMxNGJhODg0Njk1OWUzZTgyZjc0ZTI2IiwiOGZkNjRhMTRjMDZiNTg5YzI2Yjk0N2FlMmJjZjZiZmEwMTQ5ZWYwYmUxNGVkNGQ4MGY0NDhh''@;'; put 'put ''MDFjNDNiMWM2ZCJdLFsiYjRmOWVhZWEwOWI2OTE3NjE5ZjZlYTZhNGViNTQ2NGVmZGRiNThmZDQ1YjFlYmVmY2RjMWEwMWQwOGI0Nzk4NiIsIjM5ZTVjOTkyNWI1YTU0YjA3NDMzYTRmMThjNjE3MjZmOGJiMTMxYzAxMmNhNTQyZWIyNGE4YWMwNzIwMDY4MmEiXSxbImQ0MjYzZGZjM2QyZGY5''@;'; put 'put ''MjNhMDE3OWE0ODk2NmQzMGNlODRlMjUxNWFmYzNkY2NjMWI3NzkwNzc5MmViY2M2MGUiLCI2MmRmYWYwN2EwZjc4ZmViMzBlMzBkNjI5NTg1M2NlMTg5ZTEyNzc2MGFkNmNmN2ZhZTE2NGUxMjJhMjA4ZDU0Il0sWyI0ODQ1NzUyNDgyMGZhNjVhNGY4ZDM1ZWI2OTMwODU3YzAwMzJhY2MwYTRh''@;'; put 'put ''MmRlNDIyMjMzZWVkYTg5NzYxMmM0IiwiMjVhNzQ4YWIzNjc5NzlkOTg3MzNjMzhhMWZhMWMyZTdkYzZjYzA3ZGIyZDYwYTlhZTdhNzZhYWE0OWJkMGY3NyJdLFsiZGZlZWVmMTg4MTEwMWYyY2IxMTY0NGYzYTJhZmRmYzIwNDVlMTk5MTkxNTI5MjNmMzY3YTE3NjdjMTFjY2VkYSIsImVjZmI3''@;'; put 'put ''MDU2Y2YxZGUwNDJmOTQyMGJhYjM5Njc5M2MwYzM5MGJkZTc0YjRiYmRmZjE2YTgzYWUwOWE5YTc1MTciXSxbIjZkN2VmNmIxNzU0M2Y4MzczYzU3M2Y0NGUxZjM4OTgzNWQ4OWJjYmM2MDYyY2VkMzZjODJkZjgzYjhmYWU4NTkiLCJjZDQ1MGVjMzM1NDM4OTg2ZGZlZmExMGM1N2ZlYTliY2M1''@;'; put 'put ''MjFhMDk1OWIyZDgwYmJmNzRiMTkwZGNhNzEyZDEwIl0sWyJlNzU2MDVkNTkxMDJhNWEyNjg0NTAwZDNiOTkxZjJlM2YzYzg4YjkzMjI1NTQ3MDM1YWYyNWFmNjZlMDQ1NDFmIiwiZjVjNTQ3NTRhOGY3MWVlNTQwYjliNDg3Mjg0NzNlMzE0ZjcyOWFjNTMwOGIwNjkzODM2MDk5MGUyYmZhZDEy''@;'; put 'put ''NSJdLFsiZWI5ODY2MGY0YzRkZmFhMDZhMmJlNDUzZDUwMjBiYzk5YTBjMmU2MGFiZTM4ODQ1N2RkNDNmZWZiMWVkNjIwYyIsIjZjYjlhODg3NmQ5Y2I4NTIwNjA5YWYzYWRkMjZjZDIwYTBhN2NkOGE5NDExMTMxY2U4NWY0NDEwMDA5OTIyM2UiXSxbIjEzZTg3YjAyN2Q4NTE0ZDM1OTM5ZjJl''@;'; put 'put ''Njg5MmIxOTkyMjE1NDU5Njk0MTg4ODMzNmRjMzU2M2UzYjhkYmE5NDIiLCJmZWY1YTNjNjgwNTlhNmRlYzVkNjI0MTE0YmYxZTkxYWFjMmI5ZGE1NjhkNmFiZWIyNTcwZDU1NjQ2YjhhZGYxIl0sWyJlZTE2MzAyNmU5ZmQ2ZmUwMTdjMzhmMDZhNWJlNmZjMTI1NDI0YjM3MWNlMjcwOGU3YmY0''@;'; put 'put ''NDkxNjkxZTU3NjRhIiwiMWFjYjI1MGYyNTVkZDYxYzQzZDk0Y2NjNjcwZDBmNThmNDlhZTNmYTE1Yjk2NjIzZTU0MzBkYTBhZDZjNjJiMiJdLFsiYjI2OGY1ZWY5YWQ1MWU0ZDc4ZGUzYTc1MGMyZGM4OWIxZTYyNmQ0MzUwNTg2Nzk5OTkzMmU1ZGIzM2FmM2Q4MCIsIjVmMzEwZDRiM2M5OWI5''@;'; put 'put ''ZWJiMTlmNzdkNDFjMWRlZTAxOGNmMGQzNGZkNDE5MTYxNDAwM2U5NDVhMTIxNmU0MjMiXSxbImZmMDdmMzExOGE5ZGYwMzVlOWZhZDg1ZWI2YzdiZmU0MmIwMmYwMWNhOTljZWVhM2JmN2ZmZGJhOTNjNDc1MGQiLCI0MzgxMzZkNjAzZTg1OGEzYTVjNDQwYzM4ZWNjYmFkZGMxZDI5NDIxMTRl''@;'; put 'put ''MmVkZGQ0NzQwZDA5OGNlZDFmMGQ4Il0sWyI4ZDhiOTg1NWM3YzA1MmEzNDE0NmZkMjBmZmI2NThiZWE0YjlmNjllMGQ4MjVlYmVjMTZlOGMzY2UyYjUyNmExIiwiY2RiNTU5ZWVkYzJkNzlmOTI2YmFmNDRmYjg0ZWE0ZDQ0YmNmNTBmZWU1MWQ3Y2ViMzBlMmU3ZjQ2MzAzNjc1OCJdLFsiNTJk''@;'; put 'put ''YjBiNTM4NGRmYmYwNWJmYTlkNDcyZDdhZTI2ZGZlNGI4NTFjZWNhOTFiMWViYTU0MjYzMTgwZGEzMmI2MyIsImMzYjk5N2QwNTBlZTVkNDIzZWJhZjY2YTZkYjlmNTdiMzE4MGM5MDI4NzU2NzlkZTkyNGI2OWQ4NGE3YjM3NSJdLFsiZTYyZjk0OTBkM2Q1MWRhNjM5NWVmZDI0ZTgwOTE5Y2M3''@;'; put 'put ''ZDBmMjljM2YzZmE0OGM2ZmZmNTQzYmVjYmQ0MzM1MiIsIjZkODlhZDdiYTQ4NzZiMGIyMmMyY2EyODBjNjgyODYyZjM0MmM4NTkxZjFkYWY1MTcwZTA3YmZkOWNjYWZhN2QiXSxbIjdmMzBlYTI0NzZiMzk5YjQ5NTc1MDljODhmNzdkMDE5MWFmYTJmZjVjYjdiMTRmZDZkOGU3ZDY1YWFhYjEx''@;'; put 'put ''OTMiLCJjYTVlZjdkNGIyMzFjOTRjM2IxNTM4OWE1ZjYzMTFlOWRhZmY3YmI2N2IxMDNlOTg4MGVmNGJmZjYzN2FjYWVjIl0sWyI1MDk4ZmYxZTFkOWYxNGZiNDZhMjEwZmFkYTZjOTAzZmVmMGZiN2I0YTFkZDFkOWFjNjBhMDM2MTgwMGI3YTAwIiwiOTczMTE0MWQ4MWZjOGY4MDg0ZDM3YzZl''@;'; put 'put ''NzU0MjAwNmIzZWUxYjQwZDYwZGZlNTM2MmE1YjEzMmZkMTdkZGMwIl0sWyIzMmI3OGM3ZGU5ZWU1MTJhNzI4OTViZTZiOWNiZWZhNmUyZjNjNGNjY2U0NDVjOTZiOWYyYzgxZTI3NzhhZDU4IiwiZWUxODQ5ZjUxM2RmNzFlMzJlZmMzODk2ZWUyODI2MGM3M2JiODA1NDdhZTIyNzViYTQ5NzIz''@;'; put 'put ''Nzc5NGM4NzUzYyJdLFsiZTJjYjc0ZmRkYzhlOWZiY2QwNzZlZWYyYTdjNzJiMGNlMzdkNTBmMDgyNjlkZmMwNzRiNTgxNTUwNTQ3YTRmNyIsImQzYWEyZWQ3MWM5ZGQyMjQ3YTYyZGYwNjI3MzZlYjBiYWRkZWE5ZTM2MTIyZDJiZTg2NDFhYmNiMDA1Y2M0YTQiXSxbIjg0Mzg0NDc1NjZkNGQ3''@;'; put 'put ''YmVkYWRjMjk5NDk2YWIzNTc0MjYwMDlhMzVmMjM1Y2IxNDFiZTBkOTljZDEwYWUzYTgiLCJjNGUxMDIwOTE2OTgwYTRkYTVkMDFhYzVlNmFkMzMwNzM0ZWYwZDc5MDY2MzFjNGYyMzkwNDI2YjJlZGQ3OTFmIl0sWyI0MTYyZDQ4OGI4OTQwMjAzOWI1ODRjNmZjNmMzMDg4NzA1ODdkOWM0NmY2''@;'; put 'put ''NjBiODc4YWI2NWM4MmM3MTFkNjdlIiwiNjcxNjNlOTAzMjM2Mjg5Zjc3NmYyMmMyNWZiOGEzYWZjMTczMmYyYjg0YjRlOTVkYmRhNDdhZTVhMDg1MjY0OSJdLFsiM2ZhZDNmYTg0Y2FmMGYzNGYwZjg5YmZkMmRjZjU0ZmMxNzVkNzY3YWVjM2U1MDY4NGYzYmE0YTRiZjVmNjgzZCIsImNkMWJj''@;'; put 'put ''N2NiNmNjNDA3YmIyZjBjYTY0N2M3MThhNzMwY2Y3MTg3MmU3ZDBkMmE1M2ZhMjBlZmNkZmU2MTgyNiJdLFsiNjc0ZjI2MDBhMzAwN2EwMDU2OGMxYTdjZTA1ZDA4MTZjMWZiODRiZjEzNzA3OThmMWM2OTUzMmZhZWIxYTg2YiIsIjI5OWQyMWY5NDEzZjMzYjNlZGY0M2IyNTcwMDQ1ODBiNzBk''@;'; put 'put ''YjU3ZGEwYjE4MjI1OWUwOWVlY2M2OWUwZDM4YTUiXSxbImQzMmY0ZGE1NGFkZTc0YWJiODFiODE1YWQxZmIzYjI2M2Q4MmQ2YzY5MjcxNGJjZmY4N2QyOWJkNWVlOWYwOGYiLCJmOTQyOWU3MzhiOGU1M2I5NjhlOTkwMTZjMDU5NzA3NzgyZTE0ZjQ1MzUzNTlkNTgyZmM0MTY5MTBiM2VlYTg3''@;'; put 'put ''Il0sWyIzMGU0ZTY3MDQzNTM4NTU1NmU1OTM2NTcxMzU4NDVkMzZmYmI2OTMxZjcyYjA4Y2IxZWQ5NTRmMWUzY2UzZmY2IiwiNDYyZjliY2U2MTk4OTg2Mzg0OTkzNTAxMTNiYmM5YjEwYTg3OGQzNWRhNzA3NDBkYzY5NWE1NTllYjg4ZGI3YiJdLFsiYmUyMDYyMDAzYzUxY2MzMDA0NjgyOTA0''@;'; put 'put ''MzMwZTRkZWU3ZjNkY2QxMGIwMWU1ODBiZjE5NzFiMDRkNGNhZDI5NyIsIjYyMTg4YmM0OWQ2MWU1NDI4NTczZDQ4YTc0ZTFjNjU1YjFjNjEwOTA5MDU2ODJhMGQ1NTU4ZWQ3MmRjY2I5YmMiXSxbIjkzMTQ0NDIzYWNlMzQ1MWVkMjllMGZiOWFjMmFmMjExY2I2ZTg0YTYwMWRmNTk5M2M0MTk4''@;'; put 'put ''NTlmZmY1ZGYwNGEiLCI3YzEwZGZiMTY0YzM0MjVmNWM3MWEzZjlkNzk5MjAzOGYxMDY1MjI0ZjcyYmI5ZDFkOTAyYTZkMTMwMzdiNDdjIl0sWyJiMDE1ZjgwNDRmNWZjYmRjZjIxY2EyNmQ2YzM0ZmI4MTk3ODI5MjA1YzdiN2QyYTdjYjY2NDE4YzE1N2IxMTJjIiwiYWI4YzFlMDg2ZDA0ZTgx''@;'; put 'put ''Mzc0NGE2NTViMmRmOGQ1ZjgzYjNjZGM2ZmFhMzA4OGMxZDNhZWExNDU0ZTNhMWQ1ZiJdLFsiZDVlOWUxZGE2NDlkOTdkODllNDg2ODExN2E0NjVhM2E0ZjhhMThkZTU3YTE0MGQzNmIzZjJhZjM0MWEyMWI1MiIsIjRjYjA0NDM3ZjM5MWVkNzMxMTFhMTNjYzFkNGRkMGRiMTY5MzQ2NWMyMjQw''@;'; put 'put ''NDgwZDg5NTVlODU5MmYyNzQ0N2EiXSxbImQzYWU0MTA0N2RkN2NhMDY1ZGJmOGVkNzdiOTkyNDM5OTgzMDA1Y2Q3MmUxNmQ2Zjk5NmE1MzE2ZDM2OTY2YmIiLCJiZDFhZWIyMWFkMjJlYmIyMmExMGYwMzAzNDE3YzZkOTY0ZjhjZGQ3ZGYwYWNhNjE0YjEwZGMxNGQxMjVhYzQ2Il0sWyI0NjNl''@;'; put 'put ''Mjc2M2Q4ODVmOTU4ZmM2NmNkZDIyODAwZjBhNDg3MTk3ZDBhODJlMzc3YjQ5ZjgwYWY4N2M4OTdiMDY1IiwiYmZlZmFjZGIwZTVkMGZkN2RmM2EzMTFhOTRkZTA2MmIyNmI4MGM2MWZiYzk3NTA4Yjc5OTkyNjcxZWY3Y2E3ZiJdLFsiNzk4NWZkZmQxMjdjMDU2N2M2ZjUzZWMxYmI2M2VjMzE1''@;'; put 'put ''OGU1OTdjNDBiZmU3NDdjODNjZGRmYzkxMDY0MTkxNyIsIjYwM2MxMmRhZjNkOTg2MmVmMmIyNWZlMWRlMjg5YWVkMjRlZDI5MWUwZWM2NzA4NzAzYTViZDU2N2YzMmVkMDMiXSxbIjc0YTFhZDZiNWY3NmUzOWRiMmRkMjQ5NDEwZWFjN2Y5OWU3NGM1OWNiODNkMmQwZWQ1ZmYxNTQzZGE3NzAz''@;'; put 'put ''ZTkiLCJjYzYxNTdlZjE4YzljNjNjZDYxOTNkODM2MzFiYmVhMDA5M2UwOTY4OTQyZThjMzNkNTczN2ZkNzkwZTBkYjA4Il0sWyIzMDY4MmE1MDcwMzM3NWY2MDJkNDE2NjY0YmExOWI3ZmM5YmFiNDJjNzI3NDc0NjNhNzFkMDg5NmIyMmY2ZGEzIiwiNTUzZTA0ZjZiMDE4YjRmYTZjOGYzOWU3''@;'; put 'put ''ZjMxMWQzMTc2MjkwZDBlMGYxOWNhNzNmMTc3MTRkOTk3N2EyMmZmOCJdLFsiOWUyMTU4ZjBkN2MwZDVmMjZjMzc5MWVmZWZhNzk1OTc2NTRlN2EyYjI0NjRmNTJiMWVlNmMxMzQ3NzY5ZWY1NyIsIjcxMmZjZGQxYjkwNTNmMDkwMDNhMzQ4MWZhNzc2MmU5ZmZkN2M4ZWYzNWEzODUwOWUyZmJm''@;'; put 'put ''MjYyOTAwODM3MyJdLFsiMTc2ZTI2OTg5YTQzYzljZmViYTQwMjljMjAyNTM4YzI4MTcyZTU2NmUzYzRmY2U3MzIyODU3ZjNiZTMyN2Q2NiIsImVkOGNjOWQwNGIyOWViODc3ZDI3MGI0ODc4ZGM0M2MxOWFlZmQzMWY0ZWVlMDllZTdiNDc4MzRjMWZhNGIxYzMiXSxbIjc1ZDQ2ZWZlYTM3NzFl''@;'; put 'put ''NmU2OGFiYjg5YTEzYWQ3NDdlY2YxODkyMzkzZGZjNGYxYjcwMDQ3ODhjNTAzNzRkYTgiLCI5ODUyMzkwYTk5NTA3Njc5ZmQwYjg2ZmQyYjM5YTg2OGQ3ZWZjMjIxNTEzNDZlMWEzY2E0NzI2NTg2YTZiZWQ4Il0sWyI4MDlhMjBjNjdkNjQ5MDBmZmI2OThjNGM4MjVmNmQ1ZjIzMTBmYjA0NTFj''@;'; put 'put ''ODY5MzQ1YjczMTlmNjQ1NjA1NzIxIiwiOWU5OTQ5ODBkOTkxN2UyMmI3NmIwNjE5MjdmYTA0MTQzZDA5NmNjYzU0OTYzZTZhNWViZmE1ZjNmOGUyODZjMSJdLFsiMWIzODkwM2E0M2Y3ZjExNGVkNDUwMGI0ZWFjNzA4M2ZkZWZlY2UxY2YyOWM2MzUyOGQ1NjM0NDZmOTcyYzE4MCIsIjQwMzZl''@;'; put 'put ''ZGM5MzFhNjBhZTg4OTM1M2Y3N2ZkNTNkZTRhMjcwOGIyNmI2ZjVkYTcyYWQzMzk0MTE5ZGFmNDA4ZjkiXV19fX0sOTUzOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPVgsXz15KDM3ODUpLGc9eSg5NzQ2KSxCPXkoNDUwNCk7SS5hc3NlcnQ9ZyxJLnRvQXJyYXk9Qi50b0FycmF5LEku''@;'; put 'put ''emVybzI9Qi56ZXJvMixJLnRvSGV4PUIudG9IZXgsSS5lbmNvZGU9Qi5lbmNvZGUsSS5nZXROQUY9ZnVuY3Rpb24gdyhOLEwsSyl7dmFyIFcsVT1uZXcgQXJyYXkoTWF0aC5tYXgoTi5iaXRMZW5ndGgoKSxLKSsxKTtmb3IoVz0wO1c8VS5sZW5ndGg7Vys9MSlVW1ddPTA7dmFyIFk9MTw8TCsx''@;'; put 'put ''LHE9Ti5jbG9uZSgpO2ZvcihXPTA7VzxVLmxlbmd0aDtXKyspe3ZhciBlZSxKPXEuYW5kbG4oWS0xKTtxLmlzT2RkKCk/cS5pc3VibihlZT1KPihZPj4xKS0xPyhZPj4xKS1KOkopOmVlPTAsVVtXXT1lZSxxLml1c2hybigxKX1yZXR1cm4gVX0sSS5nZXRKU0Y9ZnVuY3Rpb24gUChOLEwpe3Zh''@;'; put 'put ''ciBLPVtbXSxbXV07Tj1OLmNsb25lKCksTD1MLmNsb25lKCk7Zm9yKHZhciBZLFU9MCxXPTA7Ti5jbXBuKC1VKT4wfHxMLmNtcG4oLVcpPjA7KXt2YXIgSixuZSxxPU4uYW5kbG4oMykrVSYzLGVlPUwuYW5kbG4oMykrVyYzOzM9PT1xJiYocT0tMSksMz09PWVlJiYoZWU9LTEpLEo9MSZxPzMh''@;'; put 'put ''PShZPU4uYW5kbG4oNykrVSY3KSYmNSE9PVl8fDIhPT1lZT9xOi1xOjAsS1swXS5wdXNoKEopLG5lPTEmZWU/MyE9KFk9TC5hbmRsbig3KStXJjcpJiY1IT09WXx8MiE9PXE/ZWU6LWVlOjAsS1sxXS5wdXNoKG5lKSwyKlU9PT1KKzEmJihVPTEtVSksMipXPT09bmUrMSYmKFc9MS1XKSxOLml1''@;'; put 'put ''c2hybigxKSxMLml1c2hybigxKX1yZXR1cm4gS30sSS5jYWNoZWRQcm9wZXJ0eT1mdW5jdGlvbiBGKE4sTCxLKXt2YXIgVT0iXyIrTDtOLnByb3RvdHlwZVtMXT1mdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzW1VdP3RoaXNbVV06dGhpc1tVXT1LLmNhbGwodGhpcyl9fSxJLnBhcnNl''@;'; put 'put ''Qnl0ZXM9ZnVuY3Rpb24gTyhOKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIE4/SS50b0FycmF5KE4sImhleCIpOk59LEkuaW50RnJvbUxFPWZ1bmN0aW9uIHooTil7cmV0dXJuIG5ldyBfKE4sImhleCIsImxlIil9fSwzNzg1OmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEksXyl7InVzZSBz''@;'; put 'put ''dHJpY3QiO2Z1bmN0aW9uIGcoVixwKXtpZighVil0aHJvdyBuZXcgRXJyb3IocHx8IkFzc2VydGlvbiBmYWlsZWQiKX1mdW5jdGlvbiBCKFYscCl7Vi5zdXBlcl89cDt2YXIgYj1mdW5jdGlvbigpe307Yi5wcm90b3R5cGU9cC5wcm90b3R5cGUsVi5wcm90b3R5cGU9bmV3IGIsVi5wcm90b3R5''@;'; put 'put ''cGUuY29uc3RydWN0b3I9Vn1mdW5jdGlvbiB3KFYscCxiKXtpZih3LmlzQk4oVikpcmV0dXJuIFY7dGhpcy5uZWdhdGl2ZT0wLHRoaXMud29yZHM9bnVsbCx0aGlzLmxlbmd0aD0wLHRoaXMucmVkPW51bGwsbnVsbCE9PVYmJigoImxlIj09PXB8fCJiZSI9PT1wKSYmKGI9cCxwPTEwKSx0aGlz''@;'; put 'put ''Ll9pbml0KFZ8fDAscHx8MTAsYnx8ImJlIikpfXZhciBQOyJvYmplY3QiPT10eXBlb2YgST9JLmV4cG9ydHM9dzpfLkJOPXcsdy5CTj13LHcud29yZFNpemU9MjY7dHJ5e1A9dHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiB3aW5kb3cuQnVmZmVyPCJ1Ij93aW5kb3cuQnVmZmVyOnkoNTU2OCku''@;'; put 'put ''QnVmZmVyfWNhdGNoe31mdW5jdGlvbiBGKFYscCl7dmFyIGI9Vi5jaGFyQ29kZUF0KHApO3JldHVybiBiPj02NSYmYjw9NzA/Yi01NTpiPj05NyYmYjw9MTAyP2ItODc6Yi00OCYxNX1mdW5jdGlvbiBPKFYscCxiKXt2YXIgeD1GKFYsYik7cmV0dXJuIGItMT49cCYmKHh8PUYoVixiLTEpPDw0''@;'; put 'put ''KSx4fWZ1bmN0aW9uIHooVixwLGIseCl7Zm9yKHZhciBDPTAsVD1NYXRoLm1pbihWLmxlbmd0aCxiKSxIPXA7SDxUO0grKyl7dmFyIGo9Vi5jaGFyQ29kZUF0KEgpLTQ4O0MqPXgsQys9aj49NDk/ai00OSsxMDpqPj0xNz9qLTE3KzEwOmp9cmV0dXJuIEN9dy5pc0JOPWZ1bmN0aW9uKHApe3Jl''@;'; put 'put ''dHVybiBwIGluc3RhbmNlb2Ygd3x8bnVsbCE9PXAmJiJvYmplY3QiPT10eXBlb2YgcCYmcC5jb25zdHJ1Y3Rvci53b3JkU2l6ZT09PXcud29yZFNpemUmJkFycmF5LmlzQXJyYXkocC53b3Jkcyl9LHcubWF4PWZ1bmN0aW9uKHAsYil7cmV0dXJuIHAuY21wKGIpPjA/cDpifSx3Lm1pbj1mdW5j''@;'; put 'put ''dGlvbihwLGIpe3JldHVybiBwLmNtcChiKTwwP3A6Yn0sdy5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24ocCxiLHgpe2lmKCJudW1iZXIiPT10eXBlb2YgcClyZXR1cm4gdGhpcy5faW5pdE51bWJlcihwLGIseCk7aWYoIm9iamVjdCI9PXR5cGVvZiBwKXJldHVybiB0aGlzLl9pbml0QXJyYXko''@;'; put 'put ''cCxiLHgpOyJoZXgiPT09YiYmKGI9MTYpLGcoYj09PSgwfGIpJiZiPj0yJiZiPD0zNik7dmFyIEM9MDsiLSI9PT0ocD1wLnRvU3RyaW5nKCkucmVwbGFjZSgvXHMrL2csIiIpKVswXSYmKEMrKyx0aGlzLm5lZ2F0aXZlPTEpLEM8cC5sZW5ndGgmJigxNj09PWI/dGhpcy5fcGFyc2VIZXgocCxD''@;'; put 'put ''LHgpOih0aGlzLl9wYXJzZUJhc2UocCxiLEMpLCJsZSI9PT14JiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksYix4KSkpfSx3LnByb3RvdHlwZS5faW5pdE51bWJlcj1mdW5jdGlvbihwLGIseCl7cDwwJiYodGhpcy5uZWdhdGl2ZT0xLHA9LXApLHA8NjcxMDg4NjQ/KHRoaXMud29y''@;'; put 'put ''ZHM9WzY3MTA4ODYzJnBdLHRoaXMubGVuZ3RoPTEpOnA8NDUwMzU5OTYyNzM3MDQ5Nj8odGhpcy53b3Jkcz1bNjcxMDg4NjMmcCxwLzY3MTA4ODY0JjY3MTA4ODYzXSx0aGlzLmxlbmd0aD0yKTooZyhwPDkwMDcxOTkyNTQ3NDA5OTIpLHRoaXMud29yZHM9WzY3MTA4ODYzJnAscC82NzEwODg2''@;'; put 'put ''NCY2NzEwODg2MywxXSx0aGlzLmxlbmd0aD0zKSwibGUiPT09eCYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLGIseCl9LHcucHJvdG90eXBlLl9pbml0QXJyYXk9ZnVuY3Rpb24ocCxiLHgpe2lmKGcoIm51bWJlciI9PXR5cGVvZiBwLmxlbmd0aCkscC5sZW5ndGg8PTApcmV0dXJu''@;'; put 'put ''IHRoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTEsdGhpczt0aGlzLmxlbmd0aD1NYXRoLmNlaWwocC5sZW5ndGgvMyksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgQz0wO0M8dGhpcy5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109MDt2YXIgVCxILGo9MDtpZigi''@;'; put 'put ''YmUiPT09eClmb3IoQz1wLmxlbmd0aC0xLFQ9MDtDPj0wO0MtPTMpdGhpcy53b3Jkc1tUXXw9KEg9cFtDXXxwW0MtMV08PDh8cFtDLTJdPDwxNik8PGomNjcxMDg4NjMsdGhpcy53b3Jkc1tUKzFdPUg+Pj4yNi1qJjY3MTA4ODYzLChqKz0yNCk+PTI2JiYoai09MjYsVCsrKTtlbHNlIGlmKCJs''@;'; put 'put ''ZSI9PT14KWZvcihDPTAsVD0wO0M8cC5sZW5ndGg7Qys9Myl0aGlzLndvcmRzW1RdfD0oSD1wW0NdfHBbQysxXTw8OHxwW0MrMl08PDE2KTw8aiY2NzEwODg2Myx0aGlzLndvcmRzW1QrMV09SD4+PjI2LWomNjcxMDg4NjMsKGorPTI0KT49MjYmJihqLT0yNixUKyspO3JldHVybiB0aGlzLnN0''@;'; put 'put ''cmlwKCl9LHcucHJvdG90eXBlLl9wYXJzZUhleD1mdW5jdGlvbihwLGIseCl7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKChwLmxlbmd0aC1iKS82KSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT0wO3Zh''@;'; put 'put ''ciBqLFQ9MCxIPTA7aWYoImJlIj09PXgpZm9yKEM9cC5sZW5ndGgtMTtDPj1iO0MtPTIpaj1PKHAsYixDKTw8VCx0aGlzLndvcmRzW0hdfD02NzEwODg2MyZqLFQ+PTE4PyhULT0xOCx0aGlzLndvcmRzW0grPTFdfD1qPj4+MjYpOlQrPTg7ZWxzZSBmb3IoQz0ocC5sZW5ndGgtYiklMj09MD9i''@;'; put 'put ''KzE6YjtDPHAubGVuZ3RoO0MrPTIpaj1PKHAsYixDKTw8VCx0aGlzLndvcmRzW0hdfD02NzEwODg2MyZqLFQ+PTE4PyhULT0xOCx0aGlzLndvcmRzW0grPTFdfD1qPj4+MjYpOlQrPTg7dGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5fcGFyc2VCYXNlPWZ1bmN0aW9uKHAsYix4KXt0aGlzLndv''@;'; put 'put ''cmRzPVswXSx0aGlzLmxlbmd0aD0xO2Zvcih2YXIgQz0wLFQ9MTtUPD02NzEwODg2MztUKj1iKUMrKztDLS0sVD1UL2J8MDtmb3IodmFyIEg9cC5sZW5ndGgteCxqPUglQyxFPU1hdGgubWluKEgsSC1qKSt4LG09MCxBPXg7QTxFO0ErPUMpbT16KHAsQSxBK0MsYiksdGhpcy5pbXVsbihUKSx0''@;'; put 'put ''aGlzLndvcmRzWzBdK208NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9bTp0aGlzLl9pYWRkbihtKTtpZigwIT09ail7dmFyIGFlPTE7Zm9yKG09eihwLEEscC5sZW5ndGgsYiksQT0wO0E8ajtBKyspYWUqPWI7dGhpcy5pbXVsbihhZSksdGhpcy53b3Jkc1swXSttPDY3MTA4ODY0P3RoaXMud29y''@;'; put 'put ''ZHNbMF0rPW06dGhpcy5faWFkZG4obSl9dGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKHApe3Aud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIGI9MDtiPHRoaXMubGVuZ3RoO2IrKylwLndvcmRzW2JdPXRoaXMud29yZHNbYl07cC5sZW5ndGg9dGhp''@;'; put 'put ''cy5sZW5ndGgscC5uZWdhdGl2ZT10aGlzLm5lZ2F0aXZlLHAucmVkPXRoaXMucmVkfSx3LnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciBwPW5ldyB3KG51bGwpO3JldHVybiB0aGlzLmNvcHkocCkscH0sdy5wcm90b3R5cGUuX2V4cGFuZD1mdW5jdGlvbihwKXtmb3IoO3RoaXMubGVu''@;'; put 'put ''Z3RoPHA7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtyZXR1cm4gdGhpc30sdy5wcm90b3R5cGUuc3RyaXA9ZnVuY3Rpb24oKXtmb3IoO3RoaXMubGVuZ3RoPjEmJjA9PT10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdOyl0aGlzLmxlbmd0aC0tO3JldHVybiB0aGlzLl9ub3JtU2lnbigp''@;'; put 'put ''fSx3LnByb3RvdHlwZS5fbm9ybVNpZ249ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXSYmKHRoaXMubmVnYXRpdmU9MCksdGhpc30sdy5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybih0aGlzLnJlZD8iPEJOLVI6ICI6IjxCTjog''@;'; put 'put ''IikrdGhpcy50b1N0cmluZygxNikrIj4ifTt2YXIgTj1bIiIsIjAiLCIwMCIsIjAwMCIsIjAwMDAiLCIwMDAwMCIsIjAwMDAwMCIsIjAwMDAwMDAiLCIwMDAwMDAwMCIsIjAwMDAwMDAwMCIsIjAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAi''@;'; put 'put ''LCIwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMCIs''@;'; put 'put ''IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiXSxMPVswLDAsMjUsMTYsMTIsMTEsMTAsOSw4LDgsNyw3LDcsNyw2LDYsNiw2LDYsNiw2LDUsNSw1LDUs''@;'; put 'put ''NSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVdLEs9WzAsMCwzMzU1NDQzMiw0MzA0NjcyMSwxNjc3NzIxNiw0ODgyODEyNSw2MDQ2NjE3Niw0MDM1MzYwNywxNjc3NzIxNiw0MzA0NjcyMSwxZTcsMTk0ODcxNzEsMzU4MzE4MDgsNjI3NDg1MTcsNzUyOTUzNiwxMTM5MDYyNSwxNjc3NzIxNiwyNDEz''@;'; put 'put ''NzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQwODQxMDEsNTE1MzYzMiw2NDM2MzQzLDc5NjI2MjQsOTc2NTYyNSwxMTg4MTM3NiwxNDM0ODkwNywxNzIxMDM2OCwyMDUxMTE0OSwyNDNlNSwyODYyOTE1MSwzMzU1NDQzMiwzOTEzNTM5Myw0NTQzNTQyNCw1MjUyMTg3NSw2MDQ2NjE3Nl07''@;'; put 'put ''ZnVuY3Rpb24gVyhWLHAsYil7Yi5uZWdhdGl2ZT1wLm5lZ2F0aXZlXlYubmVnYXRpdmU7dmFyIHg9Vi5sZW5ndGgrcC5sZW5ndGh8MDtiLmxlbmd0aD14LHg9eC0xfDA7dmFyIEM9MHxWLndvcmRzWzBdLFQ9MHxwLndvcmRzWzBdLEg9QypULEU9SC82NzEwODg2NHwwO2Iud29yZHNbMF09Njcx''@;'; put 'put ''MDg4NjMmSDtmb3IodmFyIG09MTttPHg7bSsrKXtmb3IodmFyIEE9RT4+PjI2LGFlPTY3MTA4ODYzJkUsdGU9TWF0aC5taW4obSxwLmxlbmd0aC0xKSxzZT1NYXRoLm1heCgwLG0tVi5sZW5ndGgrMSk7c2U8PXRlO3NlKyspQSs9KEg9KEM9MHxWLndvcmRzW20tc2V8MF0pKihUPTB8cC53b3Jk''@;'; put 'put ''c1tzZV0pK2FlKS82NzEwODg2NHwwLGFlPTY3MTA4ODYzJkg7Yi53b3Jkc1ttXT0wfGFlLEU9MHxBfXJldHVybiAwIT09RT9iLndvcmRzW21dPTB8RTpiLmxlbmd0aC0tLGIuc3RyaXAoKX13LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbihwLGIpe3ZhciB4O2lmKGI9MHxifHwxLDE2PT09''@;'; put 'put ''KHA9cHx8MTApfHwiaGV4Ij09PXApe3g9IiI7Zm9yKHZhciBDPTAsVD0wLEg9MDtIPHRoaXMubGVuZ3RoO0grKyl7dmFyIGo9dGhpcy53b3Jkc1tIXSxFPSgxNjc3NzIxNSYoajw8Q3xUKSkudG9TdHJpbmcoMTYpO1Q9aj4+PjI0LUMmMTY3NzcyMTUsKEMrPTIpPj0yNiYmKEMtPTI2LEgtLSks''@;'; put 'put ''eD0wIT09VHx8SCE9PXRoaXMubGVuZ3RoLTE/Tls2LUUubGVuZ3RoXStFK3g6RSt4fWZvcigwIT09VCYmKHg9VC50b1N0cmluZygxNikreCk7eC5sZW5ndGglYiE9MDspeD0iMCIreDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJih4PSItIit4KSx4fWlmKHA9PT0oMHxwKSYmcD49MiYmcDw9''@;'; put 'put ''MzYpe3ZhciBtPUxbcF0sQT1LW3BdO3g9IiI7dmFyIGFlPXRoaXMuY2xvbmUoKTtmb3IoYWUubmVnYXRpdmU9MDshYWUuaXNaZXJvKCk7KXt2YXIgdGU9YWUubW9kbihBKS50b1N0cmluZyhwKTt4PShhZT1hZS5pZGl2bihBKSkuaXNaZXJvKCk/dGUreDpOW20tdGUubGVuZ3RoXSt0ZSt4fWZv''@;'; put 'put ''cih0aGlzLmlzWmVybygpJiYoeD0iMCIreCk7eC5sZW5ndGglYiE9MDspeD0iMCIreDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJih4PSItIit4KSx4fWcoITEsIkJhc2Ugc2hvdWxkIGJlIGJldHdlZW4gMiBhbmQgMzYiKX0sdy5wcm90b3R5cGUudG9OdW1iZXI9ZnVuY3Rpb24oKXt2YXIg''@;'; put 'put ''cD10aGlzLndvcmRzWzBdO3JldHVybiAyPT09dGhpcy5sZW5ndGg/cCs9NjcxMDg4NjQqdGhpcy53b3Jkc1sxXTozPT09dGhpcy5sZW5ndGgmJjE9PT10aGlzLndvcmRzWzJdP3ArPTQ1MDM1OTk2MjczNzA0OTYrNjcxMDg4NjQqdGhpcy53b3Jkc1sxXTp0aGlzLmxlbmd0aD4yJiZnKCExLCJO''@;'; put 'put ''dW1iZXIgY2FuIG9ubHkgc2FmZWx5IHN0b3JlIHVwIHRvIDUzIGJpdHMiKSwwIT09dGhpcy5uZWdhdGl2ZT8tcDpwfSx3LnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1N0cmluZygxNil9LHcucHJvdG90eXBlLnRvQnVmZmVyPWZ1bmN0aW9uKHAsYil7cmV0dXJu''@;'; put 'put ''IGcodHlwZW9mIFA8InUiKSx0aGlzLnRvQXJyYXlMaWtlKFAscCxiKX0sdy5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbihwLGIpe3JldHVybiB0aGlzLnRvQXJyYXlMaWtlKEFycmF5LHAsYil9LHcucHJvdG90eXBlLnRvQXJyYXlMaWtlPWZ1bmN0aW9uKHAsYix4KXt2YXIgQz10aGlzLmJ5''@;'; put 'put ''dGVMZW5ndGgoKSxUPXh8fE1hdGgubWF4KDEsQyk7ZyhDPD1ULCJieXRlIGFycmF5IGxvbmdlciB0aGFuIGRlc2lyZWQgbGVuZ3RoIiksZyhUPjAsIlJlcXVlc3RlZCBhcnJheSBsZW5ndGggPD0gMCIpLHRoaXMuc3RyaXAoKTt2YXIgRSxtLEg9ImxlIj09PWIsaj1uZXcgcChUKSxBPXRoaXMu''@;'; put 'put ''Y2xvbmUoKTtpZihIKXtmb3IobT0wOyFBLmlzWmVybygpO20rKylFPUEuYW5kbG4oMjU1KSxBLml1c2hybig4KSxqW21dPUU7Zm9yKDttPFQ7bSsrKWpbbV09MH1lbHNle2ZvcihtPTA7bTxULUM7bSsrKWpbbV09MDtmb3IobT0wOyFBLmlzWmVybygpO20rKylFPUEuYW5kbG4oMjU1KSxBLml1''@;'; put 'put ''c2hybig4KSxqW1QtbS0xXT1FfXJldHVybiBqfSx3LnByb3RvdHlwZS5fY291bnRCaXRzPU1hdGguY2x6MzI/ZnVuY3Rpb24ocCl7cmV0dXJuIDMyLU1hdGguY2x6MzIocCl9OmZ1bmN0aW9uKHApe3ZhciBiPXAseD0wO3JldHVybiBiPj00MDk2JiYoeCs9MTMsYj4+Pj0xMyksYj49NjQmJih4''@;'; put 'put ''Kz03LGI+Pj49NyksYj49OCYmKHgrPTQsYj4+Pj00KSxiPj0yJiYoeCs9MixiPj4+PTIpLHgrYn0sdy5wcm90b3R5cGUuX3plcm9CaXRzPWZ1bmN0aW9uKHApe2lmKDA9PT1wKXJldHVybiAyNjt2YXIgYj1wLHg9MDtyZXR1cm4gODE5MSZifHwoeCs9MTMsYj4+Pj0xMyksMTI3JmJ8fCh4Kz03''@;'; put 'put ''LGI+Pj49NyksMTUmYnx8KHgrPTQsYj4+Pj00KSwzJmJ8fCh4Kz0yLGI+Pj49MiksMSZifHx4KysseH0sdy5wcm90b3R5cGUuYml0TGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5fY291bnRCaXRzKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0pO3JldHVybiAyNioodGhpcy5sZW5ndGgt''@;'; put 'put ''MSkrYn0sdy5wcm90b3R5cGUuemVyb0JpdHM9ZnVuY3Rpb24oKXtpZih0aGlzLmlzWmVybygpKXJldHVybiAwO2Zvcih2YXIgcD0wLGI9MDtiPHRoaXMubGVuZ3RoO2IrKyl7dmFyIHg9dGhpcy5femVyb0JpdHModGhpcy53b3Jkc1tiXSk7aWYocCs9eCwyNiE9PXgpYnJlYWt9cmV0dXJuIHB9''@;'; put 'put ''LHcucHJvdG90eXBlLmJ5dGVMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuYml0TGVuZ3RoKCkvOCl9LHcucHJvdG90eXBlLnRvVHdvcz1mdW5jdGlvbihwKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/dGhpcy5hYnMoKS5pbm90bihwKS5pYWRkbigxKTp0aGlzLmNs''@;'; put 'put ''b25lKCl9LHcucHJvdG90eXBlLmZyb21Ud29zPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLnRlc3RuKHAtMSk/dGhpcy5ub3RuKHApLmlhZGRuKDEpLmluZWcoKTp0aGlzLmNsb25lKCl9LHcucHJvdG90eXBlLmlzTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlfSx3LnBy''@;'; put 'put ''b3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmluZWcoKX0sdy5wcm90b3R5cGUuaW5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzWmVybygpfHwodGhpcy5uZWdhdGl2ZV49MSksdGhpc30sdy5wcm90b3R5cGUuaXVvcj1mdW5jdGlvbihwKXtmb3IoO3RoaXMu''@;'; put 'put ''bGVuZ3RoPHAubGVuZ3RoOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7Zm9yKHZhciBiPTA7YjxwLmxlbmd0aDtiKyspdGhpcy53b3Jkc1tiXT10aGlzLndvcmRzW2JdfHAud29yZHNbYl07cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaW9yPWZ1bmN0aW9uKHApe3JldHVy''@;'; put 'put ''biBnKCEodGhpcy5uZWdhdGl2ZXxwLm5lZ2F0aXZlKSksdGhpcy5pdW9yKHApfSx3LnByb3RvdHlwZS5vcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLmlvcihwKTpwLmNsb25lKCkuaW9yKHRoaXMpfSx3LnByb3RvdHlwZS51b3I9ZnVuY3Rp''@;'; put 'put ''b24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdW9yKHApOnAuY2xvbmUoKS5pdW9yKHRoaXMpfSx3LnByb3RvdHlwZS5pdWFuZD1mdW5jdGlvbihwKXt2YXIgYjtiPXRoaXMubGVuZ3RoPnAubGVuZ3RoP3A6dGhpcztmb3IodmFyIHg9MDt4PGIubGVuZ3Ro''@;'; put 'put ''O3grKyl0aGlzLndvcmRzW3hdPXRoaXMud29yZHNbeF0mcC53b3Jkc1t4XTtyZXR1cm4gdGhpcy5sZW5ndGg9Yi5sZW5ndGgsdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pYW5kPWZ1bmN0aW9uKHApe3JldHVybiBnKCEodGhpcy5uZWdhdGl2ZXxwLm5lZ2F0aXZlKSksdGhpcy5pdWFuZChw''@;'; put 'put ''KX0sdy5wcm90b3R5cGUuYW5kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaWFuZChwKTpwLmNsb25lKCkuaWFuZCh0aGlzKX0sdy5wcm90b3R5cGUudWFuZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5j''@;'; put 'put ''bG9uZSgpLml1YW5kKHApOnAuY2xvbmUoKS5pdWFuZCh0aGlzKX0sdy5wcm90b3R5cGUuaXV4b3I9ZnVuY3Rpb24ocCl7dmFyIGIseDt0aGlzLmxlbmd0aD5wLmxlbmd0aD8oYj10aGlzLHg9cCk6KGI9cCx4PXRoaXMpO2Zvcih2YXIgQz0wO0M8eC5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109''@;'; put 'put ''Yi53b3Jkc1tDXV54LndvcmRzW0NdO2lmKHRoaXMhPT1iKWZvcig7QzxiLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT1iLndvcmRzW0NdO3JldHVybiB0aGlzLmxlbmd0aD1iLmxlbmd0aCx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLml4b3I9ZnVuY3Rpb24ocCl7cmV0dXJuIGcoISh0aGlz''@;'; put 'put ''Lm5lZ2F0aXZlfHAubmVnYXRpdmUpKSx0aGlzLml1eG9yKHApfSx3LnByb3RvdHlwZS54b3I9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5peG9yKHApOnAuY2xvbmUoKS5peG9yKHRoaXMpfSx3LnByb3RvdHlwZS51eG9yPWZ1bmN0aW9uKHAp''@;'; put 'put ''e3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaXV4b3IocCk6cC5jbG9uZSgpLml1eG9yKHRoaXMpfSx3LnByb3RvdHlwZS5pbm90bj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIGI9MHxNYXRoLmNlaWwocC8yNikseD1wJTI2O3Ro''@;'; put 'put ''aXMuX2V4cGFuZChiKSx4PjAmJmItLTtmb3IodmFyIEM9MDtDPGI7QysrKXRoaXMud29yZHNbQ109NjcxMDg4NjMmfnRoaXMud29yZHNbQ107cmV0dXJuIHg+MCYmKHRoaXMud29yZHNbQ109fnRoaXMud29yZHNbQ10mNjcxMDg4NjM+PjI2LXgpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUu''@;'; put 'put ''bm90bj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlub3RuKHApfSx3LnByb3RvdHlwZS5zZXRuPWZ1bmN0aW9uKHAsYil7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApO3ZhciB4PXAvMjZ8MCxDPXAlMjY7cmV0dXJuIHRoaXMuX2V4cGFuZCh4KzEpLHRoaXMud29yZHNbeF09''@;'; put 'put ''Yj90aGlzLndvcmRzW3hdfDE8PEM6dGhpcy53b3Jkc1t4XSZ+KDE8PEMpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihwKXt2YXIgYix4LEM7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1wLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsYj10aGlzLmlz''@;'; put 'put ''dWIocCksdGhpcy5uZWdhdGl2ZV49MSx0aGlzLl9ub3JtU2lnbigpO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09cC5uZWdhdGl2ZSlyZXR1cm4gcC5uZWdhdGl2ZT0wLGI9dGhpcy5pc3ViKHApLHAubmVnYXRpdmU9MSxiLl9ub3JtU2lnbigpO3RoaXMubGVuZ3RoPnAubGVuZ3RoPyh4PXRo''@;'; put 'put ''aXMsQz1wKTooeD1wLEM9dGhpcyk7Zm9yKHZhciBUPTAsSD0wO0g8Qy5sZW5ndGg7SCsrKXRoaXMud29yZHNbSF09NjcxMDg4NjMmKGI9KDB8eC53b3Jkc1tIXSkrKDB8Qy53b3Jkc1tIXSkrVCksVD1iPj4+MjY7Zm9yKDswIT09VCYmSDx4Lmxlbmd0aDtIKyspdGhpcy53b3Jkc1tIXT02NzEw''@;'; put 'put ''ODg2MyYoYj0oMHx4LndvcmRzW0hdKStUKSxUPWI+Pj4yNjtpZih0aGlzLmxlbmd0aD14Lmxlbmd0aCwwIT09VCl0aGlzLndvcmRzW3RoaXMubGVuZ3RoXT1ULHRoaXMubGVuZ3RoKys7ZWxzZSBpZih4IT09dGhpcylmb3IoO0g8eC5sZW5ndGg7SCsrKXRoaXMud29yZHNbSF09eC53b3Jkc1tI''@;'; put 'put ''XTtyZXR1cm4gdGhpc30sdy5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHApe3ZhciBiO3JldHVybiAwIT09cC5uZWdhdGl2ZSYmMD09PXRoaXMubmVnYXRpdmU/KHAubmVnYXRpdmU9MCxiPXRoaXMuc3ViKHApLHAubmVnYXRpdmVePTEsYik6MD09PXAubmVnYXRpdmUmJjAhPT10aGlzLm5lZ2F0''@;'; put 'put ''aXZlPyh0aGlzLm5lZ2F0aXZlPTAsYj1wLnN1Yih0aGlzKSx0aGlzLm5lZ2F0aXZlPTEsYik6dGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhZGQocCk6cC5jbG9uZSgpLmlhZGQodGhpcyl9LHcucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24ocCl7aWYoMCE9PXAubmVnYXRpdmUp''@;'; put 'put ''e3AubmVnYXRpdmU9MDt2YXIgYj10aGlzLmlhZGQocCk7cmV0dXJuIHAubmVnYXRpdmU9MSxiLl9ub3JtU2lnbigpfWlmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkKHApLHRoaXMubmVnYXRpdmU9MSx0aGlzLl9ub3JtU2lnbigpO3ZhciBDLFQs''@;'; put 'put ''eD10aGlzLmNtcChwKTtpZigwPT09eClyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMubGVuZ3RoPTEsdGhpcy53b3Jkc1swXT0wLHRoaXM7eD4wPyhDPXRoaXMsVD1wKTooQz1wLFQ9dGhpcyk7Zm9yKHZhciBIPTAsaj0wO2o8VC5sZW5ndGg7aisrKUg9KGI9KDB8Qy53b3Jkc1tqXSktKDB8''@;'; put 'put ''VC53b3Jkc1tqXSkrSCk+PjI2LHRoaXMud29yZHNbal09NjcxMDg4NjMmYjtmb3IoOzAhPT1IJiZqPEMubGVuZ3RoO2orKylIPShiPSgwfEMud29yZHNbal0pK0gpPj4yNix0aGlzLndvcmRzW2pdPTY3MTA4ODYzJmI7aWYoMD09PUgmJmo8Qy5sZW5ndGgmJkMhPT10aGlzKWZvcig7ajxDLmxl''@;'; put 'put ''bmd0aDtqKyspdGhpcy53b3Jkc1tqXT1DLndvcmRzW2pdO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxqKSxDIT09dGhpcyYmKHRoaXMubmVnYXRpdmU9MSksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUo''@;'; put 'put ''KS5pc3ViKHApfTt2YXIgWT1mdW5jdGlvbihwLGIseCl7dmFyIEUsbSxBLEM9cC53b3JkcyxUPWIud29yZHMsSD14LndvcmRzLGo9MCxhZT0wfENbMF0sdGU9ODE5MSZhZSxzZT1hZT4+PjEzLHdlPTB8Q1sxXSxVZT04MTkxJndlLEplPXdlPj4+MTMsb3Q9MHxDWzJdLHhlPTgxOTEmb3QsdmU9''@;'; put 'put ''b3Q+Pj4xMyxYZT0wfENbM10semU9ODE5MSZYZSxEZT1YZT4+PjEzLEZlPTB8Q1s0XSxPZT04MTkxJkZlLEllPUZlPj4+MTMsVmU9MHxDWzVdLGtlPTgxOTEmVmUsQWU9VmU+Pj4xMyxfdD0wfENbNl0sbnQ9ODE5MSZfdCxRZT1fdD4+PjEzLHVuPTB8Q1s3XSx5dD04MTkxJnVuLE10PXVuPj4+''@;'; put 'put ''MTMsRHQ9MHxDWzhdLGl0PTgxOTEmRHQsJGU9RHQ+Pj4xMyx0dD0wfENbOV0sSGU9ODE5MSZ0dCx1dD10dD4+PjEzLHF0PTB8VFswXSxSdD04MTkxJnF0LFB0PXF0Pj4+MTMsY2k9MHxUWzFdLFF0PTgxOTEmY2ksc249Y2k+Pj4xMyxSaT0wfFRbMl0saG49ODE5MSZSaSxmdD1SaT4+PjEzLE9y''@;'; put 'put ''PTB8VFszXSxXdD04MTkxJk9yLEF0PU9yPj4+MTMsUm49MHxUWzRdLHN0PTgxOTEmUm4sVXQ9Um4+Pj4xMyxyaT0wfFRbNV0sV2U9ODE5MSZyaSxUdD1yaT4+PjEzLG5yPTB8VFs2XSxodD04MTkxJm5yLHh0PW5yPj4+MTMsam49MHxUWzddLHJuPTgxOTEmam4senQ9am4+Pj4xMyxoaT0wfFRb''@;'; put 'put ''OF0sY249ODE5MSZoaSxmbj1oaT4+PjEzLElpPTB8VFs5XSxYdD04MTkxJklpLGVuPUlpPj4+MTM7eC5uZWdhdGl2ZT1wLm5lZ2F0aXZlXmIubmVnYXRpdmUseC5sZW5ndGg9MTk7dmFyIHVhPShqKyhFPU1hdGguaW11bCh0ZSxSdCkpfDApKygoODE5MSYobT0obT1NYXRoLmltdWwodGUsUHQp''@;'; put 'put ''KStNYXRoLmltdWwoc2UsUnQpfDApKTw8MTMpfDA7aj0oKEE9TWF0aC5pbXVsKHNlLFB0KSkrKG0+Pj4xMyl8MCkrKHVhPj4+MjYpfDAsdWEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKFVlLFJ0KSxtPShtPU1hdGguaW11bChVZSxQdCkpK01hdGguaW11bChKZSxSdCl8MCxBPU1hdGguaW11bChK''@;'; put 'put ''ZSxQdCk7dmFyIEVpPShqKyhFPUUrTWF0aC5pbXVsKHRlLFF0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsc24pfDApK01hdGguaW11bChzZSxRdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxzbil8MCkrKG0+Pj4xMyl8MCkrKEVpPj4+MjYpfDAsRWkmPTY3''@;'; put 'put ''MTA4ODYzLEU9TWF0aC5pbXVsKHhlLFJ0KSxtPShtPU1hdGguaW11bCh4ZSxQdCkpK01hdGguaW11bCh2ZSxSdCl8MCxBPU1hdGguaW11bCh2ZSxQdCksRT1FK01hdGguaW11bChVZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLHNuKXwwKStNYXRoLmltdWwoSmUsUXQpfDAsQT1BK01hdGgu''@;'; put 'put ''aW11bChKZSxzbil8MDt2YXIgdnI9KGorKEU9RStNYXRoLmltdWwodGUsaG4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxmdCl8MCkrTWF0aC5pbXVsKHNlLGhuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLGZ0KXwwKSsobT4+PjEzKXwwKSsodnI+Pj4yNil8''@;'; put 'put ''MCx2ciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoemUsUnQpLG09KG09TWF0aC5pbXVsKHplLFB0KSkrTWF0aC5pbXVsKERlLFJ0KXwwLEE9TWF0aC5pbXVsKERlLFB0KSxFPUUrTWF0aC5pbXVsKHhlLFF0KXwwLG09KG09bStNYXRoLmltdWwoeGUsc24pfDApK01hdGguaW11bCh2ZSxRdCl8MCxB''@;'; put 'put ''PUErTWF0aC5pbXVsKHZlLHNuKXwwLEU9RStNYXRoLmltdWwoVWUsaG4pfDAsbT0obT1tK01hdGguaW11bChVZSxmdCl8MCkrTWF0aC5pbXVsKEplLGhuKXwwLEE9QStNYXRoLmltdWwoSmUsZnQpfDA7dmFyIFduPShqKyhFPUUrTWF0aC5pbXVsKHRlLFd0KXwwKXwwKSsoKDgxOTEmKG09KG09''@;'; put 'put ''bStNYXRoLmltdWwodGUsQXQpfDApK01hdGguaW11bChzZSxXdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxBdCl8MCkrKG0+Pj4xMyl8MCkrKFduPj4+MjYpfDAsV24mPTY3MTA4ODYzLEU9TWF0aC5pbXVsKE9lLFJ0KSxtPShtPU1hdGguaW11bChPZSxQdCkpK01hdGguaW11''@;'; put 'put ''bChJZSxSdCl8MCxBPU1hdGguaW11bChJZSxQdCksRT1FK01hdGguaW11bCh6ZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKHplLHNuKXwwKStNYXRoLmltdWwoRGUsUXQpfDAsQT1BK01hdGguaW11bChEZSxzbil8MCxFPUUrTWF0aC5pbXVsKHhlLGhuKXwwLG09KG09bStNYXRoLmltdWwoeGUs''@;'; put 'put ''ZnQpfDApK01hdGguaW11bCh2ZSxobil8MCxBPUErTWF0aC5pbXVsKHZlLGZ0KXwwLEU9RStNYXRoLmltdWwoVWUsV3QpfDAsbT0obT1tK01hdGguaW11bChVZSxBdCl8MCkrTWF0aC5pbXVsKEplLFd0KXwwLEE9QStNYXRoLmltdWwoSmUsQXQpfDA7dmFyICRpPShqKyhFPUUrTWF0aC5pbXVs''@;'; put 'put ''KHRlLHN0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsVXQpfDApK01hdGguaW11bChzZSxzdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxVdCl8MCkrKG0+Pj4xMyl8MCkrKCRpPj4+MjYpfDAsJGkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKGtlLFJ0KSxtPSht''@;'; put 'put ''PU1hdGguaW11bChrZSxQdCkpK01hdGguaW11bChBZSxSdCl8MCxBPU1hdGguaW11bChBZSxQdCksRT1FK01hdGguaW11bChPZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKE9lLHNuKXwwKStNYXRoLmltdWwoSWUsUXQpfDAsQT1BK01hdGguaW11bChJZSxzbil8MCxFPUUrTWF0aC5pbXVsKHpl''@;'; put 'put ''LGhuKXwwLG09KG09bStNYXRoLmltdWwoemUsZnQpfDApK01hdGguaW11bChEZSxobil8MCxBPUErTWF0aC5pbXVsKERlLGZ0KXwwLEU9RStNYXRoLmltdWwoeGUsV3QpfDAsbT0obT1tK01hdGguaW11bCh4ZSxBdCl8MCkrTWF0aC5pbXVsKHZlLFd0KXwwLEE9QStNYXRoLmltdWwodmUsQXQp''@;'; put 'put ''fDAsRT1FK01hdGguaW11bChVZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLFV0KXwwKStNYXRoLmltdWwoSmUsc3QpfDAsQT1BK01hdGguaW11bChKZSxVdCl8MDt2YXIgZWk9KGorKEU9RStNYXRoLmltdWwodGUsV2UpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxUdCl8''@;'; put 'put ''MCkrTWF0aC5pbXVsKHNlLFdlKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLFR0KXwwKSsobT4+PjEzKXwwKSsoZWk+Pj4yNil8MCxlaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwobnQsUnQpLG09KG09TWF0aC5pbXVsKG50LFB0KSkrTWF0aC5pbXVsKFFlLFJ0KXwwLEE9TWF0aC5p''@;'; put 'put ''bXVsKFFlLFB0KSxFPUUrTWF0aC5pbXVsKGtlLFF0KXwwLG09KG09bStNYXRoLmltdWwoa2Usc24pfDApK01hdGguaW11bChBZSxRdCl8MCxBPUErTWF0aC5pbXVsKEFlLHNuKXwwLEU9RStNYXRoLmltdWwoT2UsaG4pfDAsbT0obT1tK01hdGguaW11bChPZSxmdCl8MCkrTWF0aC5pbXVsKEll''@;'; put 'put ''LGhuKXwwLEE9QStNYXRoLmltdWwoSWUsZnQpfDAsRT1FK01hdGguaW11bCh6ZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKHplLEF0KXwwKStNYXRoLmltdWwoRGUsV3QpfDAsQT1BK01hdGguaW11bChEZSxBdCl8MCxFPUUrTWF0aC5pbXVsKHhlLHN0KXwwLG09KG09bStNYXRoLmltdWwoeGUs''@;'; put 'put ''VXQpfDApK01hdGguaW11bCh2ZSxzdCl8MCxBPUErTWF0aC5pbXVsKHZlLFV0KXwwLEU9RStNYXRoLmltdWwoVWUsV2UpfDAsbT0obT1tK01hdGguaW11bChVZSxUdCl8MCkrTWF0aC5pbXVsKEplLFdlKXwwLEE9QStNYXRoLmltdWwoSmUsVHQpfDA7dmFyIFFyPShqKyhFPUUrTWF0aC5pbXVs''@;'; put 'put ''KHRlLGh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUseHQpfDApK01hdGguaW11bChzZSxodCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSx4dCl8MCkrKG0+Pj4xMyl8MCkrKFFyPj4+MjYpfDAsUXImPTY3MTA4ODYzLEU9TWF0aC5pbXVsKHl0LFJ0KSxtPSht''@;'; put 'put ''PU1hdGguaW11bCh5dCxQdCkpK01hdGguaW11bChNdCxSdCl8MCxBPU1hdGguaW11bChNdCxQdCksRT1FK01hdGguaW11bChudCxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKG50LHNuKXwwKStNYXRoLmltdWwoUWUsUXQpfDAsQT1BK01hdGguaW11bChRZSxzbil8MCxFPUUrTWF0aC5pbXVsKGtl''@;'; put 'put ''LGhuKXwwLG09KG09bStNYXRoLmltdWwoa2UsZnQpfDApK01hdGguaW11bChBZSxobil8MCxBPUErTWF0aC5pbXVsKEFlLGZ0KXwwLEU9RStNYXRoLmltdWwoT2UsV3QpfDAsbT0obT1tK01hdGguaW11bChPZSxBdCl8MCkrTWF0aC5pbXVsKEllLFd0KXwwLEE9QStNYXRoLmltdWwoSWUsQXQp''@;'; put 'put ''fDAsRT1FK01hdGguaW11bCh6ZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKHplLFV0KXwwKStNYXRoLmltdWwoRGUsc3QpfDAsQT1BK01hdGguaW11bChEZSxVdCl8MCxFPUUrTWF0aC5pbXVsKHhlLFdlKXwwLG09KG09bStNYXRoLmltdWwoeGUsVHQpfDApK01hdGguaW11bCh2ZSxXZSl8MCxB''@;'; put 'put ''PUErTWF0aC5pbXVsKHZlLFR0KXwwLEU9RStNYXRoLmltdWwoVWUsaHQpfDAsbT0obT1tK01hdGguaW11bChVZSx4dCl8MCkrTWF0aC5pbXVsKEplLGh0KXwwLEE9QStNYXRoLmltdWwoSmUseHQpfDA7dmFyIFZpPShqKyhFPUUrTWF0aC5pbXVsKHRlLHJuKXwwKXwwKSsoKDgxOTEmKG09KG09''@;'; put 'put ''bStNYXRoLmltdWwodGUsenQpfDApK01hdGguaW11bChzZSxybil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSx6dCl8MCkrKG0+Pj4xMyl8MCkrKFZpPj4+MjYpfDAsVmkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKGl0LFJ0KSxtPShtPU1hdGguaW11bChpdCxQdCkpK01hdGguaW11''@;'; put 'put ''bCgkZSxSdCl8MCxBPU1hdGguaW11bCgkZSxQdCksRT1FK01hdGguaW11bCh5dCxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LHNuKXwwKStNYXRoLmltdWwoTXQsUXQpfDAsQT1BK01hdGguaW11bChNdCxzbil8MCxFPUUrTWF0aC5pbXVsKG50LGhuKXwwLG09KG09bStNYXRoLmltdWwobnQs''@;'; put 'put ''ZnQpfDApK01hdGguaW11bChRZSxobil8MCxBPUErTWF0aC5pbXVsKFFlLGZ0KXwwLEU9RStNYXRoLmltdWwoa2UsV3QpfDAsbT0obT1tK01hdGguaW11bChrZSxBdCl8MCkrTWF0aC5pbXVsKEFlLFd0KXwwLEE9QStNYXRoLmltdWwoQWUsQXQpfDAsRT1FK01hdGguaW11bChPZSxzdCl8MCxt''@;'; put 'put ''PShtPW0rTWF0aC5pbXVsKE9lLFV0KXwwKStNYXRoLmltdWwoSWUsc3QpfDAsQT1BK01hdGguaW11bChJZSxVdCl8MCxFPUUrTWF0aC5pbXVsKHplLFdlKXwwLG09KG09bStNYXRoLmltdWwoemUsVHQpfDApK01hdGguaW11bChEZSxXZSl8MCxBPUErTWF0aC5pbXVsKERlLFR0KXwwLEU9RStN''@;'; put 'put ''YXRoLmltdWwoeGUsaHQpfDAsbT0obT1tK01hdGguaW11bCh4ZSx4dCl8MCkrTWF0aC5pbXVsKHZlLGh0KXwwLEE9QStNYXRoLmltdWwodmUseHQpfDAsRT1FK01hdGguaW11bChVZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKFVlLHp0KXwwKStNYXRoLmltdWwoSmUscm4pfDAsQT1BK01hdGgu''@;'; put 'put ''aW11bChKZSx6dCl8MDt2YXIgTmk9KGorKEU9RStNYXRoLmltdWwodGUsY24pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxmbil8MCkrTWF0aC5pbXVsKHNlLGNuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLGZuKXwwKSsobT4+PjEzKXwwKSsoTmk+Pj4yNil8''@;'; put 'put ''MCxOaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsUnQpLG09KG09TWF0aC5pbXVsKEhlLFB0KSkrTWF0aC5pbXVsKHV0LFJ0KXwwLEE9TWF0aC5pbXVsKHV0LFB0KSxFPUUrTWF0aC5pbXVsKGl0LFF0KXwwLG09KG09bStNYXRoLmltdWwoaXQsc24pfDApK01hdGguaW11bCgkZSxRdCl8MCxB''@;'; put 'put ''PUErTWF0aC5pbXVsKCRlLHNuKXwwLEU9RStNYXRoLmltdWwoeXQsaG4pfDAsbT0obT1tK01hdGguaW11bCh5dCxmdCl8MCkrTWF0aC5pbXVsKE10LGhuKXwwLEE9QStNYXRoLmltdWwoTXQsZnQpfDAsRT1FK01hdGguaW11bChudCxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKG50LEF0KXwwKStN''@;'; put 'put ''YXRoLmltdWwoUWUsV3QpfDAsQT1BK01hdGguaW11bChRZSxBdCl8MCxFPUUrTWF0aC5pbXVsKGtlLHN0KXwwLG09KG09bStNYXRoLmltdWwoa2UsVXQpfDApK01hdGguaW11bChBZSxzdCl8MCxBPUErTWF0aC5pbXVsKEFlLFV0KXwwLEU9RStNYXRoLmltdWwoT2UsV2UpfDAsbT0obT1tK01h''@;'; put 'put ''dGguaW11bChPZSxUdCl8MCkrTWF0aC5pbXVsKEllLFdlKXwwLEE9QStNYXRoLmltdWwoSWUsVHQpfDAsRT1FK01hdGguaW11bCh6ZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKHplLHh0KXwwKStNYXRoLmltdWwoRGUsaHQpfDAsQT1BK01hdGguaW11bChEZSx4dCl8MCxFPUUrTWF0aC5pbXVs''@;'; put 'put ''KHhlLHJuKXwwLG09KG09bStNYXRoLmltdWwoeGUsenQpfDApK01hdGguaW11bCh2ZSxybil8MCxBPUErTWF0aC5pbXVsKHZlLHp0KXwwLEU9RStNYXRoLmltdWwoVWUsY24pfDAsbT0obT1tK01hdGguaW11bChVZSxmbil8MCkrTWF0aC5pbXVsKEplLGNuKXwwLEE9QStNYXRoLmltdWwoSmUs''@;'; put 'put ''Zm4pfDA7dmFyIERhPShqKyhFPUUrTWF0aC5pbXVsKHRlLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsZW4pfDApK01hdGguaW11bChzZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxlbil8MCkrKG0+Pj4xMyl8MCkrKERhPj4+MjYpfDAsRGEmPTY3''@;'; put 'put ''MTA4ODYzLEU9TWF0aC5pbXVsKEhlLFF0KSxtPShtPU1hdGguaW11bChIZSxzbikpK01hdGguaW11bCh1dCxRdCl8MCxBPU1hdGguaW11bCh1dCxzbiksRT1FK01hdGguaW11bChpdCxobil8MCxtPShtPW0rTWF0aC5pbXVsKGl0LGZ0KXwwKStNYXRoLmltdWwoJGUsaG4pfDAsQT1BK01hdGgu''@;'; put 'put ''aW11bCgkZSxmdCl8MCxFPUUrTWF0aC5pbXVsKHl0LFd0KXwwLG09KG09bStNYXRoLmltdWwoeXQsQXQpfDApK01hdGguaW11bChNdCxXdCl8MCxBPUErTWF0aC5pbXVsKE10LEF0KXwwLEU9RStNYXRoLmltdWwobnQsc3QpfDAsbT0obT1tK01hdGguaW11bChudCxVdCl8MCkrTWF0aC5pbXVs''@;'; put 'put ''KFFlLHN0KXwwLEE9QStNYXRoLmltdWwoUWUsVXQpfDAsRT1FK01hdGguaW11bChrZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKGtlLFR0KXwwKStNYXRoLmltdWwoQWUsV2UpfDAsQT1BK01hdGguaW11bChBZSxUdCl8MCxFPUUrTWF0aC5pbXVsKE9lLGh0KXwwLG09KG09bStNYXRoLmltdWwo''@;'; put 'put ''T2UseHQpfDApK01hdGguaW11bChJZSxodCl8MCxBPUErTWF0aC5pbXVsKEllLHh0KXwwLEU9RStNYXRoLmltdWwoemUscm4pfDAsbT0obT1tK01hdGguaW11bCh6ZSx6dCl8MCkrTWF0aC5pbXVsKERlLHJuKXwwLEE9QStNYXRoLmltdWwoRGUsenQpfDAsRT1FK01hdGguaW11bCh4ZSxjbil8''@;'; put 'put ''MCxtPShtPW0rTWF0aC5pbXVsKHhlLGZuKXwwKStNYXRoLmltdWwodmUsY24pfDAsQT1BK01hdGguaW11bCh2ZSxmbil8MDt2YXIgTHI9KGorKEU9RStNYXRoLmltdWwoVWUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChVZSxlbil8MCkrTWF0aC5pbXVsKEplLFh0KXwwKSk8''@;'; put 'put ''PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKEplLGVuKXwwKSsobT4+PjEzKXwwKSsoTHI+Pj4yNil8MCxMciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsaG4pLG09KG09TWF0aC5pbXVsKEhlLGZ0KSkrTWF0aC5pbXVsKHV0LGhuKXwwLEE9TWF0aC5pbXVsKHV0LGZ0KSxFPUUrTWF0aC5pbXVs''@;'; put 'put ''KGl0LFd0KXwwLG09KG09bStNYXRoLmltdWwoaXQsQXQpfDApK01hdGguaW11bCgkZSxXdCl8MCxBPUErTWF0aC5pbXVsKCRlLEF0KXwwLEU9RStNYXRoLmltdWwoeXQsc3QpfDAsbT0obT1tK01hdGguaW11bCh5dCxVdCl8MCkrTWF0aC5pbXVsKE10LHN0KXwwLEE9QStNYXRoLmltdWwoTXQs''@;'; put 'put ''VXQpfDAsRT1FK01hdGguaW11bChudCxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKG50LFR0KXwwKStNYXRoLmltdWwoUWUsV2UpfDAsQT1BK01hdGguaW11bChRZSxUdCl8MCxFPUUrTWF0aC5pbXVsKGtlLGh0KXwwLG09KG09bStNYXRoLmltdWwoa2UseHQpfDApK01hdGguaW11bChBZSxodCl8''@;'; put 'put ''MCxBPUErTWF0aC5pbXVsKEFlLHh0KXwwLEU9RStNYXRoLmltdWwoT2Uscm4pfDAsbT0obT1tK01hdGguaW11bChPZSx6dCl8MCkrTWF0aC5pbXVsKEllLHJuKXwwLEE9QStNYXRoLmltdWwoSWUsenQpfDAsRT1FK01hdGguaW11bCh6ZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKHplLGZuKXww''@;'; put 'put ''KStNYXRoLmltdWwoRGUsY24pfDAsQT1BK01hdGguaW11bChEZSxmbil8MDt2YXIgV2k9KGorKEU9RStNYXRoLmltdWwoeGUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh4ZSxlbil8MCkrTWF0aC5pbXVsKHZlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHZl''@;'; put 'put ''LGVuKXwwKSsobT4+PjEzKXwwKSsoV2k+Pj4yNil8MCxXaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsV3QpLG09KG09TWF0aC5pbXVsKEhlLEF0KSkrTWF0aC5pbXVsKHV0LFd0KXwwLEE9TWF0aC5pbXVsKHV0LEF0KSxFPUUrTWF0aC5pbXVsKGl0LHN0KXwwLG09KG09bStNYXRoLmltdWwo''@;'; put 'put ''aXQsVXQpfDApK01hdGguaW11bCgkZSxzdCl8MCxBPUErTWF0aC5pbXVsKCRlLFV0KXwwLEU9RStNYXRoLmltdWwoeXQsV2UpfDAsbT0obT1tK01hdGguaW11bCh5dCxUdCl8MCkrTWF0aC5pbXVsKE10LFdlKXwwLEE9QStNYXRoLmltdWwoTXQsVHQpfDAsRT1FK01hdGguaW11bChudCxodCl8''@;'; put 'put ''MCxtPShtPW0rTWF0aC5pbXVsKG50LHh0KXwwKStNYXRoLmltdWwoUWUsaHQpfDAsQT1BK01hdGguaW11bChRZSx4dCl8MCxFPUUrTWF0aC5pbXVsKGtlLHJuKXwwLG09KG09bStNYXRoLmltdWwoa2UsenQpfDApK01hdGguaW11bChBZSxybil8MCxBPUErTWF0aC5pbXVsKEFlLHp0KXwwLEU9''@;'; put 'put ''RStNYXRoLmltdWwoT2UsY24pfDAsbT0obT1tK01hdGguaW11bChPZSxmbil8MCkrTWF0aC5pbXVsKEllLGNuKXwwLEE9QStNYXRoLmltdWwoSWUsZm4pfDA7dmFyIHBhPShqKyhFPUUrTWF0aC5pbXVsKHplLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoemUsZW4pfDApK01h''@;'; put 'put ''dGguaW11bChEZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChEZSxlbil8MCkrKG0+Pj4xMyl8MCkrKHBhPj4+MjYpfDAscGEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLHN0KSxtPShtPU1hdGguaW11bChIZSxVdCkpK01hdGguaW11bCh1dCxzdCl8MCxBPU1hdGguaW11bCh1''@;'; put 'put ''dCxVdCksRT1FK01hdGguaW11bChpdCxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKGl0LFR0KXwwKStNYXRoLmltdWwoJGUsV2UpfDAsQT1BK01hdGguaW11bCgkZSxUdCl8MCxFPUUrTWF0aC5pbXVsKHl0LGh0KXwwLG09KG09bStNYXRoLmltdWwoeXQseHQpfDApK01hdGguaW11bChNdCxodCl8''@;'; put 'put ''MCxBPUErTWF0aC5pbXVsKE10LHh0KXwwLEU9RStNYXRoLmltdWwobnQscm4pfDAsbT0obT1tK01hdGguaW11bChudCx6dCl8MCkrTWF0aC5pbXVsKFFlLHJuKXwwLEE9QStNYXRoLmltdWwoUWUsenQpfDAsRT1FK01hdGguaW11bChrZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKGtlLGZuKXww''@;'; put 'put ''KStNYXRoLmltdWwoQWUsY24pfDAsQT1BK01hdGguaW11bChBZSxmbil8MDt2YXIgUW49KGorKEU9RStNYXRoLmltdWwoT2UsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChPZSxlbil8MCkrTWF0aC5pbXVsKEllLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKEll''@;'; put 'put ''LGVuKXwwKSsobT4+PjEzKXwwKSsoUW4+Pj4yNil8MCxRbiY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsV2UpLG09KG09TWF0aC5pbXVsKEhlLFR0KSkrTWF0aC5pbXVsKHV0LFdlKXwwLEE9TWF0aC5pbXVsKHV0LFR0KSxFPUUrTWF0aC5pbXVsKGl0LGh0KXwwLG09KG09bStNYXRoLmltdWwo''@;'; put 'put ''aXQseHQpfDApK01hdGguaW11bCgkZSxodCl8MCxBPUErTWF0aC5pbXVsKCRlLHh0KXwwLEU9RStNYXRoLmltdWwoeXQscm4pfDAsbT0obT1tK01hdGguaW11bCh5dCx6dCl8MCkrTWF0aC5pbXVsKE10LHJuKXwwLEE9QStNYXRoLmltdWwoTXQsenQpfDAsRT1FK01hdGguaW11bChudCxjbil8''@;'; put 'put ''MCxtPShtPW0rTWF0aC5pbXVsKG50LGZuKXwwKStNYXRoLmltdWwoUWUsY24pfDAsQT1BK01hdGguaW11bChRZSxmbil8MDt2YXIgbGE9KGorKEU9RStNYXRoLmltdWwoa2UsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChrZSxlbil8MCkrTWF0aC5pbXVsKEFlLFh0KXwwKSk8''@;'; put 'put ''PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKEFlLGVuKXwwKSsobT4+PjEzKXwwKSsobGE+Pj4yNil8MCxsYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsaHQpLG09KG09TWF0aC5pbXVsKEhlLHh0KSkrTWF0aC5pbXVsKHV0LGh0KXwwLEE9TWF0aC5pbXVsKHV0LHh0KSxFPUUrTWF0aC5pbXVs''@;'; put 'put ''KGl0LHJuKXwwLG09KG09bStNYXRoLmltdWwoaXQsenQpfDApK01hdGguaW11bCgkZSxybil8MCxBPUErTWF0aC5pbXVsKCRlLHp0KXwwLEU9RStNYXRoLmltdWwoeXQsY24pfDAsbT0obT1tK01hdGguaW11bCh5dCxmbil8MCkrTWF0aC5pbXVsKE10LGNuKXwwLEE9QStNYXRoLmltdWwoTXQs''@;'; put 'put ''Zm4pfDA7dmFyIHlhPShqKyhFPUUrTWF0aC5pbXVsKG50LFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobnQsZW4pfDApK01hdGguaW11bChRZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChRZSxlbil8MCkrKG0+Pj4xMyl8MCkrKHlhPj4+MjYpfDAseWEmPTY3''@;'; put 'put ''MTA4ODYzLEU9TWF0aC5pbXVsKEhlLHJuKSxtPShtPU1hdGguaW11bChIZSx6dCkpK01hdGguaW11bCh1dCxybil8MCxBPU1hdGguaW11bCh1dCx6dCksRT1FK01hdGguaW11bChpdCxjbil8MCxtPShtPW0rTWF0aC5pbXVsKGl0LGZuKXwwKStNYXRoLmltdWwoJGUsY24pfDAsQT1BK01hdGgu''@;'; put 'put ''aW11bCgkZSxmbil8MDt2YXIgTGE9KGorKEU9RStNYXRoLmltdWwoeXQsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh5dCxlbil8MCkrTWF0aC5pbXVsKE10LFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKE10LGVuKXwwKSsobT4+PjEzKXwwKSsoTGE+Pj4yNil8''@;'; put 'put ''MCxMYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsY24pLG09KG09TWF0aC5pbXVsKEhlLGZuKSkrTWF0aC5pbXVsKHV0LGNuKXwwLEE9TWF0aC5pbXVsKHV0LGZuKTt2YXIgRmE9KGorKEU9RStNYXRoLmltdWwoaXQsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChpdCxlbil8''@;'; put 'put ''MCkrTWF0aC5pbXVsKCRlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKCRlLGVuKXwwKSsobT4+PjEzKXwwKSsoRmE+Pj4yNil8MCxGYSY9NjcxMDg4NjM7dmFyIHRpPShqKyhFPU1hdGguaW11bChIZSxYdCkpfDApKygoODE5MSYobT0obT1NYXRoLmltdWwoSGUsZW4pKStNYXRo''@;'; put 'put ''LmltdWwodXQsWHQpfDApKTw8MTMpfDA7cmV0dXJuIGo9KChBPU1hdGguaW11bCh1dCxlbikpKyhtPj4+MTMpfDApKyh0aT4+PjI2KXwwLHRpJj02NzEwODg2MyxIWzBdPXVhLEhbMV09RWksSFsyXT12cixIWzNdPVduLEhbNF09JGksSFs1XT1laSxIWzZdPVFyLEhbN109VmksSFs4XT1OaSxI''@;'; put 'put ''WzldPURhLEhbMTBdPUxyLEhbMTFdPVdpLEhbMTJdPXBhLEhbMTNdPVFuLEhbMTRdPWxhLEhbMTVdPXlhLEhbMTZdPUxhLEhbMTddPUZhLEhbMThdPXRpLDAhPT1qJiYoSFsxOV09aix4Lmxlbmd0aCsrKSx4fTtmdW5jdGlvbiBlZShWLHAsYil7cmV0dXJuKG5ldyBKKS5tdWxwKFYscCxiKX1m''@;'; put 'put ''dW5jdGlvbiBKKFYscCl7dGhpcy54PVYsdGhpcy55PXB9TWF0aC5pbXVsfHwoWT1XKSx3LnByb3RvdHlwZS5tdWxUbz1mdW5jdGlvbihwLGIpe3ZhciB4LEM9dGhpcy5sZW5ndGgrcC5sZW5ndGg7cmV0dXJuIHg9MTA9PT10aGlzLmxlbmd0aCYmMTA9PT1wLmxlbmd0aD9ZKHRoaXMscCxiKTpD''@;'; put 'put ''PDYzP1codGhpcyxwLGIpOkM8MTAyND9mdW5jdGlvbiBxKFYscCxiKXtiLm5lZ2F0aXZlPXAubmVnYXRpdmVeVi5uZWdhdGl2ZSxiLmxlbmd0aD1WLmxlbmd0aCtwLmxlbmd0aDtmb3IodmFyIHg9MCxDPTAsVD0wO1Q8Yi5sZW5ndGgtMTtUKyspe3ZhciBIPUM7Qz0wO2Zvcih2YXIgaj02NzEw''@;'; put 'put ''ODg2MyZ4LEU9TWF0aC5taW4oVCxwLmxlbmd0aC0xKSxtPU1hdGgubWF4KDAsVC1WLmxlbmd0aCsxKTttPD1FO20rKyl7dmFyIHNlPSgwfFYud29yZHNbVC1tXSkqKDB8cC53b3Jkc1ttXSksd2U9NjcxMDg4NjMmc2U7aj02NzEwODg2MyYod2U9d2UranwwKSxDKz0oSD0oSD1IKyhzZS82NzEw''@;'; put 'put ''ODg2NHwwKXwwKSsod2U+Pj4yNil8MCk+Pj4yNixIJj02NzEwODg2M31iLndvcmRzW1RdPWoseD1ILEg9Q31yZXR1cm4gMCE9PXg/Yi53b3Jkc1tUXT14OmIubGVuZ3RoLS0sYi5zdHJpcCgpfSh0aGlzLHAsYik6ZWUodGhpcyxwLGIpLHh9LEoucHJvdG90eXBlLm1ha2VSQlQ9ZnVuY3Rpb24o''@;'; put 'put ''cCl7Zm9yKHZhciBiPW5ldyBBcnJheShwKSx4PXcucHJvdG90eXBlLl9jb3VudEJpdHMocCktMSxDPTA7QzxwO0MrKyliW0NdPXRoaXMucmV2QmluKEMseCxwKTtyZXR1cm4gYn0sSi5wcm90b3R5cGUucmV2QmluPWZ1bmN0aW9uKHAsYix4KXtpZigwPT09cHx8cD09PXgtMSlyZXR1cm4gcDtm''@;'; put 'put ''b3IodmFyIEM9MCxUPTA7VDxiO1QrKylDfD0oMSZwKTw8Yi1ULTEscD4+PTE7cmV0dXJuIEN9LEoucHJvdG90eXBlLnBlcm11dGU9ZnVuY3Rpb24ocCxiLHgsQyxULEgpe2Zvcih2YXIgaj0wO2o8SDtqKyspQ1tqXT1iW3Bbal1dLFRbal09eFtwW2pdXX0sSi5wcm90b3R5cGUudHJhbnNmb3Jt''@;'; put 'put ''PWZ1bmN0aW9uKHAsYix4LEMsVCxIKXt0aGlzLnBlcm11dGUoSCxwLGIseCxDLFQpO2Zvcih2YXIgaj0xO2o8VDtqPDw9MSlmb3IodmFyIEU9ajw8MSxtPU1hdGguY29zKDIqTWF0aC5QSS9FKSxBPU1hdGguc2luKDIqTWF0aC5QSS9FKSxhZT0wO2FlPFQ7YWUrPUUpZm9yKHZhciB0ZT1tLHNl''@;'; put 'put ''PUEsd2U9MDt3ZTxqO3dlKyspe3ZhciBVZT14W2FlK3dlXSxKZT1DW2FlK3dlXSxvdD14W2FlK3dlK2pdLHhlPUNbYWUrd2Ural0sdmU9dGUqb3Qtc2UqeGU7eGU9dGUqeGUrc2Uqb3QseFthZSt3ZV09VWUrKG90PXZlKSxDW2FlK3dlXT1KZSt4ZSx4W2FlK3dlK2pdPVVlLW90LENbYWUrd2Ur''@;'; put 'put ''al09SmUteGUsd2UhPT1FJiYodmU9bSp0ZS1BKnNlLHNlPW0qc2UrQSp0ZSx0ZT12ZSl9fSxKLnByb3RvdHlwZS5ndWVzc0xlbjEzYj1mdW5jdGlvbihwLGIpe3ZhciB4PTF8TWF0aC5tYXgoYixwKSxDPTEmeCxUPTA7Zm9yKHg9eC8yfDA7eDt4Pj4+PTEpVCsrO3JldHVybiAxPDxUKzErQ30s''@;'; put 'put ''Si5wcm90b3R5cGUuY29uanVnYXRlPWZ1bmN0aW9uKHAsYix4KXtpZighKHg8PTEpKWZvcih2YXIgQz0wO0M8eC8yO0MrKyl7dmFyIFQ9cFtDXTtwW0NdPXBbeC1DLTFdLHBbeC1DLTFdPVQsVD1iW0NdLGJbQ109LWJbeC1DLTFdLGJbeC1DLTFdPS1UfX0sSi5wcm90b3R5cGUubm9ybWFsaXpl''@;'; put 'put ''MTNiPWZ1bmN0aW9uKHAsYil7Zm9yKHZhciB4PTAsQz0wO0M8Yi8yO0MrKyl7dmFyIFQ9ODE5MipNYXRoLnJvdW5kKHBbMipDKzFdL2IpK01hdGgucm91bmQocFsyKkNdL2IpK3g7cFtDXT02NzEwODg2MyZULHg9VDw2NzEwODg2ND8wOlQvNjcxMDg4NjR8MH1yZXR1cm4gcH0sSi5wcm90b3R5''@;'; put 'put ''cGUuY29udmVydDEzYj1mdW5jdGlvbihwLGIseCxDKXtmb3IodmFyIFQ9MCxIPTA7SDxiO0grKyl4WzIqSF09ODE5MSYoVCs9MHxwW0hdKSx4WzIqSCsxXT04MTkxJihUPj4+PTEzKSxUPj4+PTEzO2ZvcihIPTIqYjtIPEM7KytIKXhbSF09MDtnKDA9PT1UKSxnKCEoLTgxOTImVCkpfSxKLnBy''@;'; put 'put ''b3RvdHlwZS5zdHViPWZ1bmN0aW9uKHApe2Zvcih2YXIgYj1uZXcgQXJyYXkocCkseD0wO3g8cDt4KyspYlt4XT0wO3JldHVybiBifSxKLnByb3RvdHlwZS5tdWxwPWZ1bmN0aW9uKHAsYix4KXt2YXIgQz0yKnRoaXMuZ3Vlc3NMZW4xM2IocC5sZW5ndGgsYi5sZW5ndGgpLFQ9dGhpcy5tYWtl''@;'; put 'put ''UkJUKEMpLEg9dGhpcy5zdHViKEMpLGo9bmV3IEFycmF5KEMpLEU9bmV3IEFycmF5KEMpLG09bmV3IEFycmF5KEMpLEE9bmV3IEFycmF5KEMpLGFlPW5ldyBBcnJheShDKSx0ZT1uZXcgQXJyYXkoQyksc2U9eC53b3JkcztzZS5sZW5ndGg9Qyx0aGlzLmNvbnZlcnQxM2IocC53b3JkcyxwLmxl''@;'; put 'put ''bmd0aCxqLEMpLHRoaXMuY29udmVydDEzYihiLndvcmRzLGIubGVuZ3RoLEEsQyksdGhpcy50cmFuc2Zvcm0oaixILEUsbSxDLFQpLHRoaXMudHJhbnNmb3JtKEEsSCxhZSx0ZSxDLFQpO2Zvcih2YXIgd2U9MDt3ZTxDO3dlKyspe3ZhciBVZT1FW3dlXSphZVt3ZV0tbVt3ZV0qdGVbd2VdO21b''@;'; put 'put ''d2VdPUVbd2VdKnRlW3dlXSttW3dlXSphZVt3ZV0sRVt3ZV09VWV9cmV0dXJuIHRoaXMuY29uanVnYXRlKEUsbSxDKSx0aGlzLnRyYW5zZm9ybShFLG0sc2UsSCxDLFQpLHRoaXMuY29uanVnYXRlKHNlLEgsQyksdGhpcy5ub3JtYWxpemUxM2Ioc2UsQykseC5uZWdhdGl2ZT1wLm5lZ2F0aXZl''@;'; put 'put ''XmIubmVnYXRpdmUseC5sZW5ndGg9cC5sZW5ndGgrYi5sZW5ndGgseC5zdHJpcCgpfSx3LnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24ocCl7dmFyIGI9bmV3IHcobnVsbCk7cmV0dXJuIGIud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK3AubGVuZ3RoKSx0aGlzLm11bFRvKHAsYil9LHcucHJv''@;'; put 'put ''dG90eXBlLm11bGY9ZnVuY3Rpb24ocCl7dmFyIGI9bmV3IHcobnVsbCk7cmV0dXJuIGIud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK3AubGVuZ3RoKSxlZSh0aGlzLHAsYil9LHcucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5tdWxUbyhwLHRoaXMp''@;'; put 'put ''fSx3LnByb3RvdHlwZS5pbXVsbj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCksZyhwPDY3MTA4ODY0KTtmb3IodmFyIGI9MCx4PTA7eDx0aGlzLmxlbmd0aDt4Kyspe3ZhciBDPSgwfHRoaXMud29yZHNbeF0pKnAsVD0oNjcxMDg4NjMmQykrKDY3MTA4ODYzJmIpO2I+Pj0yNixi''@;'; put 'put ''Kz1DLzY3MTA4ODY0fDAsYis9VD4+PjI2LHRoaXMud29yZHNbeF09NjcxMDg4NjMmVH1yZXR1cm4gMCE9PWImJih0aGlzLndvcmRzW3hdPWIsdGhpcy5sZW5ndGgrKyksdGhpc30sdy5wcm90b3R5cGUubXVsbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltdWxuKHApfSx3LnBy''@;'; put 'put ''b3RvdHlwZS5zcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tdWwodGhpcyl9LHcucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSl9LHcucHJvdG90eXBlLnBvdz1mdW5jdGlvbihwKXt2YXIgYj1mdW5jdGlvbiBVKFYpe2Zvcih2YXIgcD1u''@;'; put 'put ''ZXcgQXJyYXkoVi5iaXRMZW5ndGgoKSksYj0wO2I8cC5sZW5ndGg7YisrKXt2YXIgQz1iJTI2O3BbYl09KFYud29yZHNbYi8yNnwwXSYxPDxDKT4+PkN9cmV0dXJuIHB9KHApO2lmKDA9PT1iLmxlbmd0aClyZXR1cm4gbmV3IHcoMSk7Zm9yKHZhciB4PXRoaXMsQz0wO0M8Yi5sZW5ndGgmJjA9''@;'; put 'put ''PT1iW0NdO0MrKyx4PXguc3FyKCkpO2lmKCsrQzxiLmxlbmd0aClmb3IodmFyIFQ9eC5zcXIoKTtDPGIubGVuZ3RoO0MrKyxUPVQuc3FyKCkpMCE9PWJbQ10mJih4PXgubXVsKFQpKTtyZXR1cm4geH0sdy5wcm90b3R5cGUuaXVzaGxuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBw''@;'; put 'put ''JiZwPj0wKTt2YXIgVCxiPXAlMjYseD0ocC1iKS8yNixDPTY3MTA4ODYzPj4+MjYtYjw8MjYtYjtpZigwIT09Yil7dmFyIEg9MDtmb3IoVD0wO1Q8dGhpcy5sZW5ndGg7VCsrKXt2YXIgaj10aGlzLndvcmRzW1RdJkM7dGhpcy53b3Jkc1tUXT0oMHx0aGlzLndvcmRzW1RdKS1qPDxifEgsSD1q''@;'; put 'put ''Pj4+MjYtYn1IJiYodGhpcy53b3Jkc1tUXT1ILHRoaXMubGVuZ3RoKyspfWlmKDAhPT14KXtmb3IoVD10aGlzLmxlbmd0aC0xO1Q+PTA7VC0tKXRoaXMud29yZHNbVCt4XT10aGlzLndvcmRzW1RdO2ZvcihUPTA7VDx4O1QrKyl0aGlzLndvcmRzW1RdPTA7dGhpcy5sZW5ndGgrPXh9cmV0dXJu''@;'; put 'put ''IHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXNobG49ZnVuY3Rpb24ocCl7cmV0dXJuIGcoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaGxuKHApfSx3LnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24ocCxiLHgpe3ZhciBDO2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKSxDPWI/KGIt''@;'; put 'put ''YiUyNikvMjY6MDt2YXIgVD1wJTI2LEg9TWF0aC5taW4oKHAtVCkvMjYsdGhpcy5sZW5ndGgpLGo9NjcxMDg4NjNeNjcxMDg4NjM+Pj5UPDxULEU9eDtpZihDLT1ILEM9TWF0aC5tYXgoMCxDKSxFKXtmb3IodmFyIG09MDttPEg7bSsrKUUud29yZHNbbV09dGhpcy53b3Jkc1ttXTtFLmxlbmd0''@;'; put 'put ''aD1IfWlmKDAhPT1IKWlmKHRoaXMubGVuZ3RoPkgpZm9yKHRoaXMubGVuZ3RoLT1ILG09MDttPHRoaXMubGVuZ3RoO20rKyl0aGlzLndvcmRzW21dPXRoaXMud29yZHNbbStIXTtlbHNlIHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xO3ZhciBBPTA7Zm9yKG09dGhpcy5sZW5ndGgtMTtt''@;'; put 'put ''Pj0wJiYoMCE9PUF8fG0+PUMpO20tLSl7dmFyIGFlPTB8dGhpcy53b3Jkc1ttXTt0aGlzLndvcmRzW21dPUE8PDI2LVR8YWU+Pj5ULEE9YWUman1yZXR1cm4gRSYmMCE9PUEmJihFLndvcmRzW0UubGVuZ3RoKytdPUEpLDA9PT10aGlzLmxlbmd0aCYmKHRoaXMud29yZHNbMF09MCx0aGlzLmxl''@;'; put 'put ''bmd0aD0xKSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlzaHJuPWZ1bmN0aW9uKHAsYix4KXtyZXR1cm4gZygwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNocm4ocCxiLHgpfSx3LnByb3RvdHlwZS5zaGxuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXNobG4ocCl9LHcu''@;'; put 'put ''cHJvdG90eXBlLnVzaGxuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaGxuKHApfSx3LnByb3RvdHlwZS5zaHJuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXNocm4ocCl9LHcucHJvdG90eXBlLnVzaHJuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25l''@;'; put 'put ''KCkuaXVzaHJuKHApfSx3LnByb3RvdHlwZS50ZXN0bj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIGI9cCUyNix4PShwLWIpLzI2O3JldHVybiEodGhpcy5sZW5ndGg8PXh8fCEodGhpcy53b3Jkc1t4XSYxPDxiKSl9LHcucHJvdG90eXBlLmltYXNrbj1mdW5j''@;'; put 'put ''dGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIGI9cCUyNix4PShwLWIpLzI2O3JldHVybiBnKDA9PT10aGlzLm5lZ2F0aXZlLCJpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJlcnMiKSx0aGlzLmxlbmd0aDw9eD90aGlzOigwIT09YiYmeCsrLHRoaXMu''@;'; put 'put ''bGVuZ3RoPU1hdGgubWluKHgsdGhpcy5sZW5ndGgpLDAhPT1iJiYodGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSY9NjcxMDg4NjNeNjcxMDg4NjM+Pj5iPDxiKSx0aGlzLnN0cmlwKCkpfSx3LnByb3RvdHlwZS5tYXNrbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltYXNrbihw''@;'; put 'put ''KX0sdy5wcm90b3R5cGUuaWFkZG49ZnVuY3Rpb24ocCl7cmV0dXJuIGcoIm51bWJlciI9PXR5cGVvZiBwKSxnKHA8NjcxMDg4NjQpLHA8MD90aGlzLmlzdWJuKC1wKTowIT09dGhpcy5uZWdhdGl2ZT8xPT09dGhpcy5sZW5ndGgmJigwfHRoaXMud29yZHNbMF0pPHA/KHRoaXMud29yZHNbMF09''@;'; put 'put ''cC0oMHx0aGlzLndvcmRzWzBdKSx0aGlzLm5lZ2F0aXZlPTAsdGhpcyk6KHRoaXMubmVnYXRpdmU9MCx0aGlzLmlzdWJuKHApLHRoaXMubmVnYXRpdmU9MSx0aGlzKTp0aGlzLl9pYWRkbihwKX0sdy5wcm90b3R5cGUuX2lhZGRuPWZ1bmN0aW9uKHApe3RoaXMud29yZHNbMF0rPXA7Zm9yKHZh''@;'; put 'put ''ciBiPTA7Yjx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tiXT49NjcxMDg4NjQ7YisrKXRoaXMud29yZHNbYl0tPTY3MTA4ODY0LGI9PT10aGlzLmxlbmd0aC0xP3RoaXMud29yZHNbYisxXT0xOnRoaXMud29yZHNbYisxXSsrO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0''@;'; put 'put ''aCxiKzEpLHRoaXN9LHcucHJvdG90eXBlLmlzdWJuPWZ1bmN0aW9uKHApe2lmKGcoIm51bWJlciI9PXR5cGVvZiBwKSxnKHA8NjcxMDg4NjQpLHA8MClyZXR1cm4gdGhpcy5pYWRkbigtcCk7aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGRuKHAp''@;'; put 'put ''LHRoaXMubmVnYXRpdmU9MSx0aGlzO2lmKHRoaXMud29yZHNbMF0tPXAsMT09PXRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzWzBdPDApdGhpcy53b3Jkc1swXT0tdGhpcy53b3Jkc1swXSx0aGlzLm5lZ2F0aXZlPTE7ZWxzZSBmb3IodmFyIGI9MDtiPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW2Jd''@;'; put 'put ''PDA7YisrKXRoaXMud29yZHNbYl0rPTY3MTA4ODY0LHRoaXMud29yZHNbYisxXS09MTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5hZGRuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaWFkZG4ocCl9LHcucHJvdG90eXBlLnN1Ym49ZnVuY3Rpb24ocCl7cmV0dXJu''@;'; put 'put ''IHRoaXMuY2xvbmUoKS5pc3VibihwKX0sdy5wcm90b3R5cGUuaWFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpc30sdy5wcm90b3R5cGUuYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWJzKCl9LHcucHJvdG90eXBlLl9pc2hsbnN1Ym11bD1mdW5j''@;'; put 'put ''dGlvbihwLGIseCl7dmFyIFQ7dGhpcy5fZXhwYW5kKHAubGVuZ3RoK3gpO3ZhciBILGo9MDtmb3IoVD0wO1Q8cC5sZW5ndGg7VCsrKXtIPSgwfHRoaXMud29yZHNbVCt4XSkrajt2YXIgRT0oMHxwLndvcmRzW1RdKSpiO2o9KChILT02NzEwODg2MyZFKT4+MjYpLShFLzY3MTA4ODY0fDApLHRo''@;'; put 'put ''aXMud29yZHNbVCt4XT02NzEwODg2MyZIfWZvcig7VDx0aGlzLmxlbmd0aC14O1QrKylqPShIPSgwfHRoaXMud29yZHNbVCt4XSkraik+PjI2LHRoaXMud29yZHNbVCt4XT02NzEwODg2MyZIO2lmKDA9PT1qKXJldHVybiB0aGlzLnN0cmlwKCk7Zm9yKGcoLTE9PT1qKSxqPTAsVD0wO1Q8dGhp''@;'; put 'put ''cy5sZW5ndGg7VCsrKWo9KEg9LSgwfHRoaXMud29yZHNbVF0pK2opPj4yNix0aGlzLndvcmRzW1RdPTY3MTA4ODYzJkg7cmV0dXJuIHRoaXMubmVnYXRpdmU9MSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl93b3JkRGl2PWZ1bmN0aW9uKHAsYil7dmFyIHgsQz10aGlzLmNsb25lKCksVD1w''@;'; put 'put ''LEg9MHxULndvcmRzW1QubGVuZ3RoLTFdOzAhPSh4PTI2LXRoaXMuX2NvdW50Qml0cyhIKSkmJihUPVQudXNobG4oeCksQy5pdXNobG4oeCksSD0wfFQud29yZHNbVC5sZW5ndGgtMV0pO3ZhciBtLEU9Qy5sZW5ndGgtVC5sZW5ndGg7aWYoIm1vZCIhPT1iKXsobT1uZXcgdyhudWxsKSkubGVu''@;'; put 'put ''Z3RoPUUrMSxtLndvcmRzPW5ldyBBcnJheShtLmxlbmd0aCk7Zm9yKHZhciBBPTA7QTxtLmxlbmd0aDtBKyspbS53b3Jkc1tBXT0wfXZhciBhZT1DLmNsb25lKCkuX2lzaGxuc3VibXVsKFQsMSxFKTswPT09YWUubmVnYXRpdmUmJihDPWFlLG0mJihtLndvcmRzW0VdPTEpKTtmb3IodmFyIHRl''@;'; put 'put ''PUUtMTt0ZT49MDt0ZS0tKXt2YXIgc2U9NjcxMDg4NjQqKDB8Qy53b3Jkc1tULmxlbmd0aCt0ZV0pKygwfEMud29yZHNbVC5sZW5ndGgrdGUtMV0pO2ZvcihzZT1NYXRoLm1pbihzZS9IfDAsNjcxMDg4NjMpLEMuX2lzaGxuc3VibXVsKFQsc2UsdGUpOzAhPT1DLm5lZ2F0aXZlOylzZS0tLEMu''@;'; put 'put ''bmVnYXRpdmU9MCxDLl9pc2hsbnN1Ym11bChULDEsdGUpLEMuaXNaZXJvKCl8fChDLm5lZ2F0aXZlXj0xKTttJiYobS53b3Jkc1t0ZV09c2UpfXJldHVybiBtJiZtLnN0cmlwKCksQy5zdHJpcCgpLCJkaXYiIT09YiYmMCE9PXgmJkMuaXVzaHJuKHgpLHtkaXY6bXx8bnVsbCxtb2Q6Q319LHcu''@;'; put 'put ''cHJvdG90eXBlLmRpdm1vZD1mdW5jdGlvbihwLGIseCl7cmV0dXJuIGcoIXAuaXNaZXJvKCkpLHRoaXMuaXNaZXJvKCk/e2RpdjpuZXcgdygwKSxtb2Q6bmV3IHcoMCl9OjAhPT10aGlzLm5lZ2F0aXZlJiYwPT09cC5uZWdhdGl2ZT8oSD10aGlzLm5lZygpLmRpdm1vZChwLGIpLCJtb2QiIT09''@;'; put 'put ''YiYmKEM9SC5kaXYubmVnKCkpLCJkaXYiIT09YiYmKFQ9SC5tb2QubmVnKCkseCYmMCE9PVQubmVnYXRpdmUmJlQuaWFkZChwKSkse2RpdjpDLG1vZDpUfSk6MD09PXRoaXMubmVnYXRpdmUmJjAhPT1wLm5lZ2F0aXZlPyhIPXRoaXMuZGl2bW9kKHAubmVnKCksYiksIm1vZCIhPT1iJiYoQz1I''@;'; put 'put ''LmRpdi5uZWcoKSkse2RpdjpDLG1vZDpILm1vZH0pOnRoaXMubmVnYXRpdmUmcC5uZWdhdGl2ZT8oSD10aGlzLm5lZygpLmRpdm1vZChwLm5lZygpLGIpLCJkaXYiIT09YiYmKFQ9SC5tb2QubmVnKCkseCYmMCE9PVQubmVnYXRpdmUmJlQuaXN1YihwKSkse2RpdjpILmRpdixtb2Q6VH0pOnAu''@;'; put 'put ''bGVuZ3RoPnRoaXMubGVuZ3RofHx0aGlzLmNtcChwKTwwP3tkaXY6bmV3IHcoMCksbW9kOnRoaXN9OjE9PT1wLmxlbmd0aD8iZGl2Ij09PWI/e2Rpdjp0aGlzLmRpdm4ocC53b3Jkc1swXSksbW9kOm51bGx9OiJtb2QiPT09Yj97ZGl2Om51bGwsbW9kOm5ldyB3KHRoaXMubW9kbihwLndvcmRz''@;'; put 'put ''WzBdKSl9OntkaXY6dGhpcy5kaXZuKHAud29yZHNbMF0pLG1vZDpuZXcgdyh0aGlzLm1vZG4ocC53b3Jkc1swXSkpfTp0aGlzLl93b3JkRGl2KHAsYik7dmFyIEMsVCxIfSx3LnByb3RvdHlwZS5kaXY9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuZGl2bW9kKHAsImRpdiIsITEpLmRpdn0sdy5w''@;'; put 'put ''cm90b3R5cGUubW9kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmRpdm1vZChwLCJtb2QiLCExKS5tb2R9LHcucHJvdG90eXBlLnVtb2Q9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuZGl2bW9kKHAsIm1vZCIsITApLm1vZH0sdy5wcm90b3R5cGUuZGl2Um91bmQ9ZnVuY3Rpb24ocCl7dmFyIGI9''@;'; put 'put ''dGhpcy5kaXZtb2QocCk7aWYoYi5tb2QuaXNaZXJvKCkpcmV0dXJuIGIuZGl2O3ZhciB4PTAhPT1iLmRpdi5uZWdhdGl2ZT9iLm1vZC5pc3ViKHApOmIubW9kLEM9cC51c2hybigxKSxUPXAuYW5kbG4oMSksSD14LmNtcChDKTtyZXR1cm4gSDwwfHwxPT09VCYmMD09PUg/Yi5kaXY6MCE9PWIu''@;'; put 'put ''ZGl2Lm5lZ2F0aXZlP2IuZGl2LmlzdWJuKDEpOmIuZGl2LmlhZGRuKDEpfSx3LnByb3RvdHlwZS5tb2RuPWZ1bmN0aW9uKHApe2cocDw9NjcxMDg4NjMpO2Zvcih2YXIgYj0oMTw8MjYpJXAseD0wLEM9dGhpcy5sZW5ndGgtMTtDPj0wO0MtLSl4PShiKngrKDB8dGhpcy53b3Jkc1tDXSkpJXA7''@;'; put 'put ''cmV0dXJuIHh9LHcucHJvdG90eXBlLmlkaXZuPWZ1bmN0aW9uKHApe2cocDw9NjcxMDg4NjMpO2Zvcih2YXIgYj0wLHg9dGhpcy5sZW5ndGgtMTt4Pj0wO3gtLSl7dmFyIEM9KDB8dGhpcy53b3Jkc1t4XSkrNjcxMDg4NjQqYjt0aGlzLndvcmRzW3hdPUMvcHwwLGI9QyVwfXJldHVybiB0aGlz''@;'; put 'put ''LnN0cmlwKCl9LHcucHJvdG90eXBlLmRpdm49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pZGl2bihwKX0sdy5wcm90b3R5cGUuZWdjZD1mdW5jdGlvbihwKXtnKDA9PT1wLm5lZ2F0aXZlKSxnKCFwLmlzWmVybygpKTt2YXIgYj10aGlzLHg9cC5jbG9uZSgpO2I9MCE9PWIubmVn''@;'; put 'put ''YXRpdmU/Yi51bW9kKHApOmIuY2xvbmUoKTtmb3IodmFyIEM9bmV3IHcoMSksVD1uZXcgdygwKSxIPW5ldyB3KDApLGo9bmV3IHcoMSksRT0wO2IuaXNFdmVuKCkmJnguaXNFdmVuKCk7KWIuaXVzaHJuKDEpLHguaXVzaHJuKDEpLCsrRTtmb3IodmFyIG09eC5jbG9uZSgpLEE9Yi5jbG9uZSgp''@;'; put 'put ''OyFiLmlzWmVybygpOyl7Zm9yKHZhciBhZT0wLHRlPTE7IShiLndvcmRzWzBdJnRlKSYmYWU8MjY7KythZSx0ZTw8PTEpO2lmKGFlPjApZm9yKGIuaXVzaHJuKGFlKTthZS0tID4wOykoQy5pc09kZCgpfHxULmlzT2RkKCkpJiYoQy5pYWRkKG0pLFQuaXN1YihBKSksQy5pdXNocm4oMSksVC5p''@;'; put 'put ''dXNocm4oMSk7Zm9yKHZhciBzZT0wLHdlPTE7ISh4LndvcmRzWzBdJndlKSYmc2U8MjY7KytzZSx3ZTw8PTEpO2lmKHNlPjApZm9yKHguaXVzaHJuKHNlKTtzZS0tID4wOykoSC5pc09kZCgpfHxqLmlzT2RkKCkpJiYoSC5pYWRkKG0pLGouaXN1YihBKSksSC5pdXNocm4oMSksai5pdXNocm4o''@;'; put 'put ''MSk7Yi5jbXAoeCk+PTA/KGIuaXN1Yih4KSxDLmlzdWIoSCksVC5pc3ViKGopKTooeC5pc3ViKGIpLEguaXN1YihDKSxqLmlzdWIoVCkpfXJldHVybnthOkgsYjpqLGdjZDp4Lml1c2hsbihFKX19LHcucHJvdG90eXBlLl9pbnZtcD1mdW5jdGlvbihwKXtnKDA9PT1wLm5lZ2F0aXZlKSxnKCFw''@;'; put 'put ''LmlzWmVybygpKTt2YXIgYWUsYj10aGlzLHg9cC5jbG9uZSgpO2I9MCE9PWIubmVnYXRpdmU/Yi51bW9kKHApOmIuY2xvbmUoKTtmb3IodmFyIEM9bmV3IHcoMSksVD1uZXcgdygwKSxIPXguY2xvbmUoKTtiLmNtcG4oMSk+MCYmeC5jbXBuKDEpPjA7KXtmb3IodmFyIGo9MCxFPTE7IShiLndv''@;'; put 'put ''cmRzWzBdJkUpJiZqPDI2OysraixFPDw9MSk7aWYoaj4wKWZvcihiLml1c2hybihqKTtqLS0gPjA7KUMuaXNPZGQoKSYmQy5pYWRkKEgpLEMuaXVzaHJuKDEpO2Zvcih2YXIgbT0wLEE9MTshKHgud29yZHNbMF0mQSkmJm08MjY7KyttLEE8PD0xKTtpZihtPjApZm9yKHguaXVzaHJuKG0pO20t''@;'; put 'put ''LSA+MDspVC5pc09kZCgpJiZULmlhZGQoSCksVC5pdXNocm4oMSk7Yi5jbXAoeCk+PTA/KGIuaXN1Yih4KSxDLmlzdWIoVCkpOih4LmlzdWIoYiksVC5pc3ViKEMpKX1yZXR1cm4oYWU9MD09PWIuY21wbigxKT9DOlQpLmNtcG4oMCk8MCYmYWUuaWFkZChwKSxhZX0sdy5wcm90b3R5cGUuZ2Nk''@;'; put 'put ''PWZ1bmN0aW9uKHApe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIHAuYWJzKCk7aWYocC5pc1plcm8oKSlyZXR1cm4gdGhpcy5hYnMoKTt2YXIgYj10aGlzLmNsb25lKCkseD1wLmNsb25lKCk7Yi5uZWdhdGl2ZT0wLHgubmVnYXRpdmU9MDtmb3IodmFyIEM9MDtiLmlzRXZlbigpJiZ4LmlzRXZl''@;'; put 'put ''bigpO0MrKyliLml1c2hybigxKSx4Lml1c2hybigxKTtmb3IoOzspe2Zvcig7Yi5pc0V2ZW4oKTspYi5pdXNocm4oMSk7Zm9yKDt4LmlzRXZlbigpOyl4Lml1c2hybigxKTt2YXIgVD1iLmNtcCh4KTtpZihUPDApe3ZhciBIPWI7Yj14LHg9SH1lbHNlIGlmKDA9PT1UfHwwPT09eC5jbXBuKDEp''@;'; put 'put ''KWJyZWFrO2IuaXN1Yih4KX1yZXR1cm4geC5pdXNobG4oQyl9LHcucHJvdG90eXBlLmludm09ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuZWdjZChwKS5hLnVtb2QocCl9LHcucHJvdG90eXBlLmlzRXZlbj1mdW5jdGlvbigpe3JldHVybiEoMSZ0aGlzLndvcmRzWzBdKX0sdy5wcm90b3R5cGUu''@;'; put 'put ''aXNPZGQ9ZnVuY3Rpb24oKXtyZXR1cm4hKDEmfnRoaXMud29yZHNbMF0pfSx3LnByb3RvdHlwZS5hbmRsbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy53b3Jkc1swXSZwfSx3LnByb3RvdHlwZS5iaW5jbj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCk7dmFyIGI9cCUyNix4PShw''@;'; put 'put ''LWIpLzI2LEM9MTw8YjtpZih0aGlzLmxlbmd0aDw9eClyZXR1cm4gdGhpcy5fZXhwYW5kKHgrMSksdGhpcy53b3Jkc1t4XXw9Qyx0aGlzO2Zvcih2YXIgVD1DLEg9eDswIT09VCYmSDx0aGlzLmxlbmd0aDtIKyspe3ZhciBqPTB8dGhpcy53b3Jkc1tIXTtUPShqKz1UKT4+PjI2LHRoaXMud29y''@;'; put 'put ''ZHNbSF09aiY9NjcxMDg4NjN9cmV0dXJuIDAhPT1UJiYodGhpcy53b3Jkc1tIXT1ULHRoaXMubGVuZ3RoKyspLHRoaXN9LHcucHJvdG90eXBlLmlzWmVybz1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdfSx3LnByb3RvdHlwZS5jbXBuPWZ1bmN0''@;'; put 'put ''aW9uKHApe3ZhciB4LGI9cDwwO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYhYilyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmYilyZXR1cm4gMTtpZih0aGlzLnN0cmlwKCksdGhpcy5sZW5ndGg+MSl4PTE7ZWxzZXtiJiYocD0tcCksZyhwPD02NzEwODg2MywiTnVtYmVyIGlzIHRvbyBi''@;'; put 'put ''aWciKTt2YXIgQz0wfHRoaXMud29yZHNbMF07eD1DPT09cD8wOkM8cD8tMToxfXJldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC14Onh9LHcucHJvdG90eXBlLmNtcD1mdW5jdGlvbihwKXtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PXAubmVnYXRpdmUpcmV0dXJuLTE7aWYoMD09PXRoaXMu''@;'; put 'put ''bmVnYXRpdmUmJjAhPT1wLm5lZ2F0aXZlKXJldHVybiAxO3ZhciBiPXRoaXMudWNtcChwKTtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtYjpifSx3LnByb3RvdHlwZS51Y21wPWZ1bmN0aW9uKHApe2lmKHRoaXMubGVuZ3RoPnAubGVuZ3RoKXJldHVybiAxO2lmKHRoaXMubGVuZ3RoPHAu''@;'; put 'put ''bGVuZ3RoKXJldHVybi0xO2Zvcih2YXIgYj0wLHg9dGhpcy5sZW5ndGgtMTt4Pj0wO3gtLSl7dmFyIEM9MHx0aGlzLndvcmRzW3hdLFQ9MHxwLndvcmRzW3hdO2lmKEMhPT1UKXtDPFQ/Yj0tMTpDPlQmJihiPTEpO2JyZWFrfX1yZXR1cm4gYn0sdy5wcm90b3R5cGUuZ3RuPWZ1bmN0aW9uKHAp''@;'; put 'put ''e3JldHVybiAxPT09dGhpcy5jbXBuKHApfSx3LnByb3RvdHlwZS5ndD1mdW5jdGlvbihwKXtyZXR1cm4gMT09PXRoaXMuY21wKHApfSx3LnByb3RvdHlwZS5ndGVuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNtcG4ocCk+PTB9LHcucHJvdG90eXBlLmd0ZT1mdW5jdGlvbihwKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5jbXAocCk+PTB9LHcucHJvdG90eXBlLmx0bj1mdW5jdGlvbihwKXtyZXR1cm4tMT09PXRoaXMuY21wbihwKX0sdy5wcm90b3R5cGUubHQ9ZnVuY3Rpb24ocCl7cmV0dXJuLTE9PT10aGlzLmNtcChwKX0sdy5wcm90b3R5cGUubHRlbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbXBu''@;'; put 'put ''KHApPD0wfSx3LnByb3RvdHlwZS5sdGU9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY21wKHApPD0wfSx3LnByb3RvdHlwZS5lcW49ZnVuY3Rpb24ocCl7cmV0dXJuIDA9PT10aGlzLmNtcG4ocCl9LHcucHJvdG90eXBlLmVxPWZ1bmN0aW9uKHApe3JldHVybiAwPT09dGhpcy5jbXAocCl9LHcu''@;'; put 'put ''cmVkPWZ1bmN0aW9uKHApe3JldHVybiBuZXcgU2UocCl9LHcucHJvdG90eXBlLnRvUmVkPWZ1bmN0aW9uKHApe3JldHVybiBnKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLGcoMD09PXRoaXMubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGgg''@;'; put 'put ''cG9zaXRpdmVzIikscC5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKHApfSx3LnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLnJlZC5jb252ZXJ0''@;'; put 'put ''RnJvbSh0aGlzKX0sdy5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLnJlZD1wLHRoaXN9LHcucHJvdG90eXBlLmZvcmNlUmVkPWZ1bmN0aW9uKHApe3JldHVybiBnKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRo''@;'; put 'put ''aXMuX2ZvcmNlUmVkKHApfSx3LnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5hZGQodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbihwKXtyZXR1cm4g''@;'; put 'put ''Zyh0aGlzLnJlZCwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pYWRkKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZFN1Yj1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMu''@;'; put 'put ''cmVkLnN1Yih0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlzdWIodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkU2hsPWZ1bmN0aW9uKHApe3JldHVy''@;'; put 'put ''biBnKHRoaXMucmVkLCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc2hsKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZE11bD1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMu''@;'; put 'put ''cmVkLl92ZXJpZnkyKHRoaXMscCksdGhpcy5yZWQubXVsKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLHApLHRoaXMucmVk''@;'; put 'put ''LmltdWwodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXIodGhpcyl9LHcucHJvdG90eXBlLnJlZElTcXI9''@;'; put 'put ''ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJl''@;'; put 'put ''ZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0sdy5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVy''@;'; put 'put ''cyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9LHcucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5y''@;'; put 'put ''ZWQubmVnKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQmJiFwLnJlZCwicmVkUG93KG5vcm1hbE51bSkiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3codGhpcyxwKX07dmFyIG5lPXtrMjU2Om51bGwscDIyNDpudWxs''@;'; put 'put ''LHAxOTI6bnVsbCxwMjU1MTk6bnVsbH07ZnVuY3Rpb24gaWUoVixwKXt0aGlzLm5hbWU9Vix0aGlzLnA9bmV3IHcocCwxNiksdGhpcy5uPXRoaXMucC5iaXRMZW5ndGgoKSx0aGlzLms9bmV3IHcoMSkuaXVzaGxuKHRoaXMubikuaXN1Yih0aGlzLnApLHRoaXMudG1wPXRoaXMuX3RtcCgpfWZ1''@;'; put 'put ''bmN0aW9uIGxlKCl7aWUuY2FsbCh0aGlzLCJrMjU2IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYiKX1mdW5jdGlvbiBtZSgpe2llLmNhbGwodGhpcywicDIyNCIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZm''@;'; put 'put ''ZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxIil9ZnVuY3Rpb24gX2UoKXtpZS5jYWxsKHRoaXMsInAxOTIiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZiIpfWZ1bmN0aW9uIFRlKCl7aWUuY2FsbCh0aGlzLCIyNTUx''@;'; put 'put ''OSIsIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiKX1mdW5jdGlvbiBTZShWKXtpZigic3RyaW5nIj09dHlwZW9mIFYpe3ZhciBwPXcuX3ByaW1lKFYpO3RoaXMubT1wLnAsdGhpcy5wcmltZT1wfWVsc2UgZyhWLmd0''@;'; put 'put ''bigxKSwibW9kdWx1cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxIiksdGhpcy5tPVYsdGhpcy5wcmltZT1udWxsfWZ1bmN0aW9uIGplKFYpe1NlLmNhbGwodGhpcyxWKSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0aGlzLnNoaWZ0JTI2IT0wJiYodGhpcy5zaGlmdCs9MjYtdGhpcy5z''@;'; put 'put ''aGlmdCUyNiksdGhpcy5yPW5ldyB3KDEpLml1c2hsbih0aGlzLnNoaWZ0KSx0aGlzLnIyPXRoaXMuaW1vZCh0aGlzLnIuc3FyKCkpLHRoaXMucmludj10aGlzLnIuX2ludm1wKHRoaXMubSksdGhpcy5taW52PXRoaXMucmludi5tdWwodGhpcy5yKS5pc3VibigxKS5kaXYodGhpcy5tKSx0aGlz''@;'; put 'put ''Lm1pbnY9dGhpcy5taW52LnVtb2QodGhpcy5yKSx0aGlzLm1pbnY9dGhpcy5yLnN1Yih0aGlzLm1pbnYpfWllLnByb3RvdHlwZS5fdG1wPWZ1bmN0aW9uKCl7dmFyIHA9bmV3IHcobnVsbCk7cmV0dXJuIHAud29yZHM9bmV3IEFycmF5KE1hdGguY2VpbCh0aGlzLm4vMTMpKSxwfSxpZS5wcm90''@;'; put 'put ''b3R5cGUuaXJlZHVjZT1mdW5jdGlvbihwKXt2YXIgeCxiPXA7ZG97dGhpcy5zcGxpdChiLHRoaXMudG1wKSx4PShiPShiPXRoaXMuaW11bEsoYikpLmlhZGQodGhpcy50bXApKS5iaXRMZW5ndGgoKX13aGlsZSh4PnRoaXMubik7dmFyIEM9eDx0aGlzLm4/LTE6Yi51Y21wKHRoaXMucCk7cmV0''@;'; put 'put ''dXJuIDA9PT1DPyhiLndvcmRzWzBdPTAsYi5sZW5ndGg9MSk6Qz4wP2IuaXN1Yih0aGlzLnApOnZvaWQgMCE9PWIuc3RyaXA/Yi5zdHJpcCgpOmIuX3N0cmlwKCksYn0saWUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKHAsYil7cC5pdXNocm4odGhpcy5uLDAsYil9LGllLnByb3RvdHlwZS5p''@;'; put 'put ''bXVsSz1mdW5jdGlvbihwKXtyZXR1cm4gcC5pbXVsKHRoaXMuayl9LEIobGUsaWUpLGxlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihwLGIpe2Zvcih2YXIgeD00MTk0MzAzLEM9TWF0aC5taW4ocC5sZW5ndGgsOSksVD0wO1Q8QztUKyspYi53b3Jkc1tUXT1wLndvcmRzW1RdO2lmKGIubGVu''@;'; put 'put ''Z3RoPUMscC5sZW5ndGg8PTkpcmV0dXJuIHAud29yZHNbMF09MCx2b2lkKHAubGVuZ3RoPTEpO3ZhciBIPXAud29yZHNbOV07Zm9yKGIud29yZHNbYi5sZW5ndGgrK109SCZ4LFQ9MTA7VDxwLmxlbmd0aDtUKyspe3ZhciBqPTB8cC53b3Jkc1tUXTtwLndvcmRzW1QtMTBdPShqJngpPDw0fEg+''@;'; put 'put ''Pj4yMixIPWp9cC53b3Jkc1tULTEwXT1IPj4+PTIyLHAubGVuZ3RoLT0wPT09SCYmcC5sZW5ndGg+MTA/MTA6OX0sbGUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHApe3Aud29yZHNbcC5sZW5ndGhdPTAscC53b3Jkc1twLmxlbmd0aCsxXT0wLHAubGVuZ3RoKz0yO2Zvcih2YXIgYj0wLHg9''@;'; put 'put ''MDt4PHAubGVuZ3RoO3grKyl7dmFyIEM9MHxwLndvcmRzW3hdO3Aud29yZHNbeF09NjcxMDg4NjMmKGIrPTk3NypDKSxiPTY0KkMrKGIvNjcxMDg4NjR8MCl9cmV0dXJuIDA9PT1wLndvcmRzW3AubGVuZ3RoLTFdJiYocC5sZW5ndGgtLSwwPT09cC53b3Jkc1twLmxlbmd0aC0xXSYmcC5sZW5n''@;'; put 'put ''dGgtLSkscH0sQihtZSxpZSksQihfZSxpZSksQihUZSxpZSksVGUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHApe2Zvcih2YXIgYj0wLHg9MDt4PHAubGVuZ3RoO3grKyl7dmFyIEM9MTkqKDB8cC53b3Jkc1t4XSkrYixUPTY3MTA4ODYzJkM7Qz4+Pj0yNixwLndvcmRzW3hdPVQsYj1DfXJl''@;'; put 'put ''dHVybiAwIT09YiYmKHAud29yZHNbcC5sZW5ndGgrK109YikscH0sdy5fcHJpbWU9ZnVuY3Rpb24ocCl7aWYobmVbcF0pcmV0dXJuIG5lW3BdO3ZhciBiO2lmKCJrMjU2Ij09PXApYj1uZXcgbGU7ZWxzZSBpZigicDIyNCI9PT1wKWI9bmV3IG1lO2Vsc2UgaWYoInAxOTIiPT09cCliPW5ldyBf''@;'; put 'put ''ZTtlbHNle2lmKCJwMjU1MTkiIT09cCl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gcHJpbWUgIitwKTtiPW5ldyBUZX1yZXR1cm4gbmVbcF09YixifSxTZS5wcm90b3R5cGUuX3ZlcmlmeTE9ZnVuY3Rpb24ocCl7ZygwPT09cC5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2''@;'; put 'put ''ZXMiKSxnKHAucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LFNlLnByb3RvdHlwZS5fdmVyaWZ5Mj1mdW5jdGlvbihwLGIpe2coIShwLm5lZ2F0aXZlfGIubmVnYXRpdmUpLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLGcocC5yZWQmJnAucmVkPT09Yi5y''@;'; put 'put ''ZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sU2UucHJvdG90eXBlLmltb2Q9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMucHJpbWU/dGhpcy5wcmltZS5pcmVkdWNlKHApLl9mb3JjZVJlZCh0aGlzKTpwLnVtb2QodGhpcy5tKS5fZm9yY2VSZWQodGhpcyl9LFNlLnByb3Rv''@;'; put 'put ''dHlwZS5uZWc9ZnVuY3Rpb24ocCl7cmV0dXJuIHAuaXNaZXJvKCk/cC5jbG9uZSgpOnRoaXMubS5zdWIocCkuX2ZvcmNlUmVkKHRoaXMpfSxTZS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHAsYil7dGhpcy5fdmVyaWZ5MihwLGIpO3ZhciB4PXAuYWRkKGIpO3JldHVybiB4LmNtcCh0aGlzLm0p''@;'; put 'put ''Pj0wJiZ4LmlzdWIodGhpcy5tKSx4Ll9mb3JjZVJlZCh0aGlzKX0sU2UucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24ocCxiKXt0aGlzLl92ZXJpZnkyKHAsYik7dmFyIHg9cC5pYWRkKGIpO3JldHVybiB4LmNtcCh0aGlzLm0pPj0wJiZ4LmlzdWIodGhpcy5tKSx4fSxTZS5wcm90b3R5cGUuc3Vi''@;'; put 'put ''PWZ1bmN0aW9uKHAsYil7dGhpcy5fdmVyaWZ5MihwLGIpO3ZhciB4PXAuc3ViKGIpO3JldHVybiB4LmNtcG4oMCk8MCYmeC5pYWRkKHRoaXMubSkseC5fZm9yY2VSZWQodGhpcyl9LFNlLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKHAsYil7dGhpcy5fdmVyaWZ5MihwLGIpO3ZhciB4PXAuaXN1''@;'; put 'put ''YihiKTtyZXR1cm4geC5jbXBuKDApPDAmJnguaWFkZCh0aGlzLm0pLHh9LFNlLnByb3RvdHlwZS5zaGw9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MShwKSx0aGlzLmltb2QocC51c2hsbihiKSl9LFNlLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHAsYil7cmV0dXJuIHRoaXMu''@;'; put 'put ''X3ZlcmlmeTIocCxiKSx0aGlzLmltb2QocC5pbXVsKGIpKX0sU2UucHJvdG90eXBlLm11bD1mdW5jdGlvbihwLGIpe3JldHVybiB0aGlzLl92ZXJpZnkyKHAsYiksdGhpcy5pbW9kKHAubXVsKGIpKX0sU2UucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuaW11bChwLHAu''@;'; put 'put ''Y2xvbmUoKSl9LFNlLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubXVsKHAscCl9LFNlLnByb3RvdHlwZS5zcXJ0PWZ1bmN0aW9uKHApe2lmKHAuaXNaZXJvKCkpcmV0dXJuIHAuY2xvbmUoKTt2YXIgYj10aGlzLm0uYW5kbG4oMyk7aWYoZyhiJTI9PTEpLDM9PT1iKXt2''@;'; put 'put ''YXIgeD10aGlzLm0uYWRkKG5ldyB3KDEpKS5pdXNocm4oMik7cmV0dXJuIHRoaXMucG93KHAseCl9Zm9yKHZhciBDPXRoaXMubS5zdWJuKDEpLFQ9MDshQy5pc1plcm8oKSYmMD09PUMuYW5kbG4oMSk7KVQrKyxDLml1c2hybigxKTtnKCFDLmlzWmVybygpKTt2YXIgSD1uZXcgdygxKS50b1Jl''@;'; put 'put ''ZCh0aGlzKSxqPUgucmVkTmVnKCksRT10aGlzLm0uc3VibigxKS5pdXNocm4oMSksbT10aGlzLm0uYml0TGVuZ3RoKCk7Zm9yKG09bmV3IHcoMiptKm0pLnRvUmVkKHRoaXMpOzAhPT10aGlzLnBvdyhtLEUpLmNtcChqKTspbS5yZWRJQWRkKGopO2Zvcih2YXIgQT10aGlzLnBvdyhtLEMpLGFl''@;'; put 'put ''PXRoaXMucG93KHAsQy5hZGRuKDEpLml1c2hybigxKSksdGU9dGhpcy5wb3cocCxDKSxzZT1UOzAhPT10ZS5jbXAoSCk7KXtmb3IodmFyIHdlPXRlLFVlPTA7MCE9PXdlLmNtcChIKTtVZSsrKXdlPXdlLnJlZFNxcigpO2coVWU8c2UpO3ZhciBKZT10aGlzLnBvdyhBLG5ldyB3KDEpLml1c2hs''@;'; put 'put ''bihzZS1VZS0xKSk7YWU9YWUucmVkTXVsKEplKSxBPUplLnJlZFNxcigpLHRlPXRlLnJlZE11bChBKSxzZT1VZX1yZXR1cm4gYWV9LFNlLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHApe3ZhciBiPXAuX2ludm1wKHRoaXMubSk7cmV0dXJuIDAhPT1iLm5lZ2F0aXZlPyhiLm5lZ2F0aXZlPTAs''@;'; put 'put ''dGhpcy5pbW9kKGIpLnJlZE5lZygpKTp0aGlzLmltb2QoYil9LFNlLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24ocCxiKXtpZihiLmlzWmVybygpKXJldHVybiBuZXcgdygxKS50b1JlZCh0aGlzKTtpZigwPT09Yi5jbXBuKDEpKXJldHVybiBwLmNsb25lKCk7dmFyIEM9bmV3IEFycmF5KDE2KTtD''@;'; put 'put ''WzBdPW5ldyB3KDEpLnRvUmVkKHRoaXMpLENbMV09cDtmb3IodmFyIFQ9MjtUPEMubGVuZ3RoO1QrKylDW1RdPXRoaXMubXVsKENbVC0xXSxwKTt2YXIgSD1DWzBdLGo9MCxFPTAsbT1iLmJpdExlbmd0aCgpJTI2O2ZvcigwPT09bSYmKG09MjYpLFQ9Yi5sZW5ndGgtMTtUPj0wO1QtLSl7Zm9y''@;'; put 'put ''KHZhciBBPWIud29yZHNbVF0sYWU9bS0xO2FlPj0wO2FlLS0pe3ZhciB0ZT1BPj5hZSYxO0ghPT1DWzBdJiYoSD10aGlzLnNxcihIKSksMCE9PXRlfHwwIT09aj8oajw8PTEsanw9dGUsKDQ9PSsrRXx8MD09PVQmJjA9PT1hZSkmJihIPXRoaXMubXVsKEgsQ1tqXSksRT0wLGo9MCkpOkU9MH1t''@;'; put 'put ''PTI2fXJldHVybiBIfSxTZS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKHApe3ZhciBiPXAudW1vZCh0aGlzLm0pO3JldHVybiBiPT09cD9iLmNsb25lKCk6Yn0sU2UucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKHApe3ZhciBiPXAuY2xvbmUoKTtyZXR1cm4gYi5yZWQ9bnVs''@;'; put 'put ''bCxifSx3Lm1vbnQ9ZnVuY3Rpb24ocCl7cmV0dXJuIG5ldyBqZShwKX0sQihqZSxTZSksamUucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5pbW9kKHAudXNobG4odGhpcy5zaGlmdCkpfSxqZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24ocCl7dmFy''@;'; put 'put ''IGI9dGhpcy5pbW9kKHAubXVsKHRoaXMucmludikpO3JldHVybiBiLnJlZD1udWxsLGJ9LGplLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHAsYil7aWYocC5pc1plcm8oKXx8Yi5pc1plcm8oKSlyZXR1cm4gcC53b3Jkc1swXT0wLHAubGVuZ3RoPTEscDt2YXIgeD1wLmltdWwoYiksQz14Lm1h''@;'; put 'put ''c2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxUPXguaXN1YihDKS5pdXNocm4odGhpcy5zaGlmdCksSD1UO3JldHVybiBULmNtcCh0aGlzLm0pPj0wP0g9VC5pc3ViKHRoaXMubSk6VC5jbXBuKDApPDAmJihIPVQuaWFkZCh0aGlz''@;'; put 'put ''Lm0pKSxILl9mb3JjZVJlZCh0aGlzKX0samUucHJvdG90eXBlLm11bD1mdW5jdGlvbihwLGIpe2lmKHAuaXNaZXJvKCl8fGIuaXNaZXJvKCkpcmV0dXJuIG5ldyB3KDApLl9mb3JjZVJlZCh0aGlzKTt2YXIgeD1wLm11bChiKSxDPXgubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludiku''@;'; put 'put ''aW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLFQ9eC5pc3ViKEMpLml1c2hybih0aGlzLnNoaWZ0KSxIPVQ7cmV0dXJuIFQuY21wKHRoaXMubSk+PTA/SD1ULmlzdWIodGhpcy5tKTpULmNtcG4oMCk8MCYmKEg9VC5pYWRkKHRoaXMubSkpLEguX2ZvcmNlUmVkKHRoaXMpfSxqZS5wcm90''@;'; put 'put ''b3R5cGUuaW52bT1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5pbW9kKHAuX2ludm1wKHRoaXMubSkubXVsKHRoaXMucjIpKS5fZm9yY2VSZWQodGhpcyl9fSh1ZT15Lm5tZCh1ZSksdGhpcyl9LDQ0Mjk6dWU9PnsidXNlIHN0cmljdCI7dmFyIFg9T2JqZWN0LmRlZmluZVByb3BlcnR5fHwhMTtp''@;'; put 'put ''ZihYKXRyeXtYKHt9LCJhIix7dmFsdWU6MX0pfWNhdGNoe1g9ITF9dWUuZXhwb3J0cz1YfSwzOTgxOnVlPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9RXZhbEVycm9yfSwxNjQ4OnVlPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9RXJyb3J9LDQ3MjY6dWU9PnsidXNlIHN0cmljdCI7dWUu''@;'; put 'put ''ZXhwb3J0cz1SYW5nZUVycm9yfSw2NzEyOnVlPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9UmVmZXJlbmNlRXJyb3J9LDM0NjQ6dWU9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz1TeW50YXhFcnJvcn0sNDQ1Mzp1ZT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPVR5cGVFcnJvcn0sMzkx''@;'; put 'put ''NTp1ZT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPVVSSUVycm9yfSw4ODkyOnVlPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9T2JqZWN0fSw3MTg3Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBCLEk9eSg1MTA4KSxfPSJvYmplY3QiPT10eXBlb2YgUmVmbGVjdD9SZWZsZWN0Om51''@;'; put 'put ''bGwsZz1fJiYiZnVuY3Rpb24iPT10eXBlb2YgXy5hcHBseT9fLmFwcGx5OmZ1bmN0aW9uKF9lLFRlLFNlKXtyZXR1cm4gRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5LmNhbGwoX2UsVGUsU2UpfTtCPV8mJiJmdW5jdGlvbiI9PXR5cGVvZiBfLm93bktleXM/Xy5vd25LZXlzOk9iamVjdC5nZXRP''@;'; put 'put ''d25Qcm9wZXJ0eVN5bWJvbHM/ZnVuY3Rpb24oX2Upe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhfZSkuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoX2UpKX06ZnVuY3Rpb24oX2Upe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhfZSl9O3Zh''@;'; put 'put ''ciBQPU51bWJlci5pc05hTnx8ZnVuY3Rpb24oX2Upe3JldHVybiBfZSE9X2V9O2Z1bmN0aW9uIEYoKXtGLmluaXQuY2FsbCh0aGlzKX11ZS5leHBvcnRzPUYsdWUuZXhwb3J0cy5vbmNlPWZ1bmN0aW9uIG5lKG1lLF9lKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oVGUsU2Upe2Z1bmN0''@;'; put 'put ''aW9uIGplKHApe21lLnJlbW92ZUxpc3RlbmVyKF9lLFYpLFNlKHApfWZ1bmN0aW9uIFYoKXsiZnVuY3Rpb24iPT10eXBlb2YgbWUucmVtb3ZlTGlzdGVuZXImJm1lLnJlbW92ZUxpc3RlbmVyKCJlcnJvciIsamUpLFRlKFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKSl9bGUobWUsX2UsVix7b25j''@;'; put 'put ''ZTohMH0pLCJlcnJvciIhPT1fZSYmZnVuY3Rpb24gaWUobWUsX2UsVGUpeyJmdW5jdGlvbiI9PXR5cGVvZiBtZS5vbiYmbGUobWUsImVycm9yIixfZSxUZSl9KG1lLGplLHtvbmNlOiEwfSl9KX0sRi5FdmVudEVtaXR0ZXI9RixGLnByb3RvdHlwZS5fZXZlbnRzPXZvaWQgMCxGLnByb3RvdHlw''@;'; put 'put ''ZS5fZXZlbnRzQ291bnQ9MCxGLnByb3RvdHlwZS5fbWF4TGlzdGVuZXJzPXZvaWQgMDt2YXIgTz0xMDtmdW5jdGlvbiB6KG1lKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgbWUpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJsaXN0ZW5lciIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIEZ1bmN0''@;'; put 'put ''aW9uLiBSZWNlaXZlZCB0eXBlICcrdHlwZW9mIG1lKX1mdW5jdGlvbiBOKG1lKXtyZXR1cm4gdm9pZCAwPT09bWUuX21heExpc3RlbmVycz9GLmRlZmF1bHRNYXhMaXN0ZW5lcnM6bWUuX21heExpc3RlbmVyc31mdW5jdGlvbiBMKG1lLF9lLFRlLFNlKXt2YXIgamUsVixwO2lmKHooVGUpLHZv''@;'; put 'put ''aWQgMD09PShWPW1lLl9ldmVudHMpPyhWPW1lLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKSxtZS5fZXZlbnRzQ291bnQ9MCk6KHZvaWQgMCE9PVYubmV3TGlzdGVuZXImJihtZS5lbWl0KCJuZXdMaXN0ZW5lciIsX2UsVGUubGlzdGVuZXI/VGUubGlzdGVuZXI6VGUpLFY9bWUuX2V2ZW50''@;'; put 'put ''cykscD1WW19lXSksdm9pZCAwPT09cClwPVZbX2VdPVRlLCsrbWUuX2V2ZW50c0NvdW50O2Vsc2UgaWYoImZ1bmN0aW9uIj09dHlwZW9mIHA/cD1WW19lXT1TZT9bVGUscF06W3AsVGVdOlNlP3AudW5zaGlmdChUZSk6cC5wdXNoKFRlKSwoamU9TihtZSkpPjAmJnAubGVuZ3RoPmplJiYhcC53''@;'; put 'put ''YXJuZWQpe3Aud2FybmVkPSEwO3ZhciBiPW5ldyBFcnJvcigiUG9zc2libGUgRXZlbnRFbWl0dGVyIG1lbW9yeSBsZWFrIGRldGVjdGVkLiAiK3AubGVuZ3RoKyIgIitTdHJpbmcoX2UpKyIgbGlzdGVuZXJzIGFkZGVkLiBVc2UgZW1pdHRlci5zZXRNYXhMaXN0ZW5lcnMoKSB0byBpbmNyZWFz''@;'; put 'put ''ZSBsaW1pdCIpO2IubmFtZT0iTWF4TGlzdGVuZXJzRXhjZWVkZWRXYXJuaW5nIixiLmVtaXR0ZXI9bWUsYi50eXBlPV9lLGIuY291bnQ9cC5sZW5ndGgsZnVuY3Rpb24gdyhtZSl7SSYmSS53YXJuJiZJLndhcm4obWUpfShiKX1yZXR1cm4gbWV9ZnVuY3Rpb24gSygpe2lmKCF0aGlzLmZpcmVk''@;'; put 'put ''KXJldHVybiB0aGlzLnRhcmdldC5yZW1vdmVMaXN0ZW5lcih0aGlzLnR5cGUsdGhpcy53cmFwRm4pLHRoaXMuZmlyZWQ9ITAsMD09PWFyZ3VtZW50cy5sZW5ndGg/dGhpcy5saXN0ZW5lci5jYWxsKHRoaXMudGFyZ2V0KTp0aGlzLmxpc3RlbmVyLmFwcGx5KHRoaXMudGFyZ2V0LGFyZ3VtZW50''@;'; put 'put ''cyl9ZnVuY3Rpb24gVShtZSxfZSxUZSl7dmFyIFNlPXtmaXJlZDohMSx3cmFwRm46dm9pZCAwLHRhcmdldDptZSx0eXBlOl9lLGxpc3RlbmVyOlRlfSxqZT1LLmJpbmQoU2UpO3JldHVybiBqZS5saXN0ZW5lcj1UZSxTZS53cmFwRm49amUsamV9ZnVuY3Rpb24gVyhtZSxfZSxUZSl7dmFyIFNl''@;'; put 'put ''PW1lLl9ldmVudHM7aWYodm9pZCAwPT09U2UpcmV0dXJuW107dmFyIGplPVNlW19lXTtyZXR1cm4gdm9pZCAwPT09amU/W106ImZ1bmN0aW9uIj09dHlwZW9mIGplP1RlP1tqZS5saXN0ZW5lcnx8amVdOltqZV06VGU/ZnVuY3Rpb24gSihtZSl7Zm9yKHZhciBfZT1uZXcgQXJyYXkobWUubGVu''@;'; put 'put ''Z3RoKSxUZT0wO1RlPF9lLmxlbmd0aDsrK1RlKV9lW1RlXT1tZVtUZV0ubGlzdGVuZXJ8fG1lW1RlXTtyZXR1cm4gX2V9KGplKTpxKGplLGplLmxlbmd0aCl9ZnVuY3Rpb24gWShtZSl7dmFyIF9lPXRoaXMuX2V2ZW50cztpZih2b2lkIDAhPT1fZSl7dmFyIFRlPV9lW21lXTtpZigiZnVuY3Rp''@;'; put 'put ''b24iPT10eXBlb2YgVGUpcmV0dXJuIDE7aWYodm9pZCAwIT09VGUpcmV0dXJuIFRlLmxlbmd0aH1yZXR1cm4gMH1mdW5jdGlvbiBxKG1lLF9lKXtmb3IodmFyIFRlPW5ldyBBcnJheShfZSksU2U9MDtTZTxfZTsrK1NlKVRlW1NlXT1tZVtTZV07cmV0dXJuIFRlfWZ1bmN0aW9uIGxlKG1lLF9l''@;'; put 'put ''LFRlLFNlKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgbWUub24pU2Uub25jZT9tZS5vbmNlKF9lLFRlKTptZS5vbihfZSxUZSk7ZWxzZXtpZigiZnVuY3Rpb24iIT10eXBlb2YgbWUuYWRkRXZlbnRMaXN0ZW5lcil0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgImVtaXR0ZXIiIGFyZ3VtZW50IG11''@;'; put 'put ''c3QgYmUgb2YgdHlwZSBFdmVudEVtaXR0ZXIuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgbWUpO21lLmFkZEV2ZW50TGlzdGVuZXIoX2UsZnVuY3Rpb24gamUoVil7U2Uub25jZSYmbWUucmVtb3ZlRXZlbnRMaXN0ZW5lcihfZSxqZSksVGUoVil9KX19T2JqZWN0LmRlZmluZVByb3BlcnR5KEYs''@;'; put 'put ''ImRlZmF1bHRNYXhMaXN0ZW5lcnMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBPfSxzZXQ6ZnVuY3Rpb24obWUpe2lmKCJudW1iZXIiIT10eXBlb2YgbWV8fG1lPDB8fFAobWUpKXRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgb2YgImRlZmF1bHRNYXhMaXN0''@;'; put 'put ''ZW5lcnMiIGlzIG91dCBvZiByYW5nZS4gSXQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIuIFJlY2VpdmVkICcrbWUrIi4iKTtPPW1lfX0pLEYuaW5pdD1mdW5jdGlvbigpeyh2b2lkIDA9PT10aGlzLl9ldmVudHN8fHRoaXMuX2V2ZW50cz09PU9iamVjdC5nZXRQcm90b3R5cGVPZih0''@;'; put 'put ''aGlzKS5fZXZlbnRzKSYmKHRoaXMuX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuX2V2ZW50c0NvdW50PTApLHRoaXMuX21heExpc3RlbmVycz10aGlzLl9tYXhMaXN0ZW5lcnN8fHZvaWQgMH0sRi5wcm90b3R5cGUuc2V0TWF4TGlzdGVuZXJzPWZ1bmN0aW9uKF9lKXtpZigibnVt''@;'; put 'put ''YmVyIiE9dHlwZW9mIF9lfHxfZTwwfHxQKF9lKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlIG9mICJuIiBpcyBvdXQgb2YgcmFuZ2UuIEl0IG11c3QgYmUgYSBub24tbmVnYXRpdmUgbnVtYmVyLiBSZWNlaXZlZCAnK19lKyIuIik7cmV0dXJuIHRoaXMuX21heExpc3RlbmVycz1f''@;'; put 'put ''ZSx0aGlzfSxGLnByb3RvdHlwZS5nZXRNYXhMaXN0ZW5lcnM9ZnVuY3Rpb24oKXtyZXR1cm4gTih0aGlzKX0sRi5wcm90b3R5cGUuZW1pdD1mdW5jdGlvbihfZSl7Zm9yKHZhciBUZT1bXSxTZT0xO1NlPGFyZ3VtZW50cy5sZW5ndGg7U2UrKylUZS5wdXNoKGFyZ3VtZW50c1tTZV0pO3ZhciBq''@;'; put 'put ''ZT0iZXJyb3IiPT09X2UsVj10aGlzLl9ldmVudHM7aWYodm9pZCAwIT09VilqZT1qZSYmdm9pZCAwPT09Vi5lcnJvcjtlbHNlIGlmKCFqZSlyZXR1cm4hMTtpZihqZSl7dmFyIHA7aWYoVGUubGVuZ3RoPjAmJihwPVRlWzBdKSxwIGluc3RhbmNlb2YgRXJyb3IpdGhyb3cgcDt2YXIgYj1uZXcg''@;'; put 'put ''RXJyb3IoIlVuaGFuZGxlZCBlcnJvci4iKyhwPyIgKCIrcC5tZXNzYWdlKyIpIjoiIikpO3Rocm93IGIuY29udGV4dD1wLGJ9dmFyIHg9VltfZV07aWYodm9pZCAwPT09eClyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgeClnKHgsdGhpcyxUZSk7ZWxzZXt2YXIgQz14Lmxlbmd0aCxU''@;'; put 'put ''PXEoeCxDKTtmb3IoU2U9MDtTZTxDOysrU2UpZyhUW1NlXSx0aGlzLFRlKX1yZXR1cm4hMH0sRi5wcm90b3R5cGUub249Ri5wcm90b3R5cGUuYWRkTGlzdGVuZXI9ZnVuY3Rpb24oX2UsVGUpe3JldHVybiBMKHRoaXMsX2UsVGUsITEpfSxGLnByb3RvdHlwZS5wcmVwZW5kTGlzdGVuZXI9ZnVu''@;'; put 'put ''Y3Rpb24oX2UsVGUpe3JldHVybiBMKHRoaXMsX2UsVGUsITApfSxGLnByb3RvdHlwZS5vbmNlPWZ1bmN0aW9uKF9lLFRlKXtyZXR1cm4geihUZSksdGhpcy5vbihfZSxVKHRoaXMsX2UsVGUpKSx0aGlzfSxGLnByb3RvdHlwZS5wcmVwZW5kT25jZUxpc3RlbmVyPWZ1bmN0aW9uKF9lLFRlKXty''@;'; put 'put ''ZXR1cm4geihUZSksdGhpcy5wcmVwZW5kTGlzdGVuZXIoX2UsVSh0aGlzLF9lLFRlKSksdGhpc30sRi5wcm90b3R5cGUub2ZmPUYucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyPWZ1bmN0aW9uKF9lLFRlKXt2YXIgU2UsamUsVixwLGI7aWYoeihUZSksdm9pZCAwPT09KGplPXRoaXMuX2V2ZW50''@;'; put 'put ''cykpcmV0dXJuIHRoaXM7aWYodm9pZCAwPT09KFNlPWplW19lXSkpcmV0dXJuIHRoaXM7aWYoU2U9PT1UZXx8U2UubGlzdGVuZXI9PT1UZSkwPT0tLXRoaXMuX2V2ZW50c0NvdW50P3RoaXMuX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpOihkZWxldGUgamVbX2VdLGplLnJlbW92ZUxpc3Rl''@;'; put 'put ''bmVyJiZ0aGlzLmVtaXQoInJlbW92ZUxpc3RlbmVyIixfZSxTZS5saXN0ZW5lcnx8VGUpKTtlbHNlIGlmKCJmdW5jdGlvbiIhPXR5cGVvZiBTZSl7Zm9yKFY9LTEscD1TZS5sZW5ndGgtMTtwPj0wO3AtLSlpZihTZVtwXT09PVRlfHxTZVtwXS5saXN0ZW5lcj09PVRlKXtiPVNlW3BdLmxpc3Rl''@;'; put 'put ''bmVyLFY9cDticmVha31pZihWPDApcmV0dXJuIHRoaXM7MD09PVY/U2Uuc2hpZnQoKTpmdW5jdGlvbiBlZShtZSxfZSl7Zm9yKDtfZSsxPG1lLmxlbmd0aDtfZSsrKW1lW19lXT1tZVtfZSsxXTttZS5wb3AoKX0oU2UsViksMT09PVNlLmxlbmd0aCYmKGplW19lXT1TZVswXSksdm9pZCAwIT09''@;'; put 'put ''amUucmVtb3ZlTGlzdGVuZXImJnRoaXMuZW1pdCgicmVtb3ZlTGlzdGVuZXIiLF9lLGJ8fFRlKX1yZXR1cm4gdGhpc30sRi5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzPWZ1bmN0aW9uKF9lKXt2YXIgVGUsU2UsamU7aWYodm9pZCAwPT09KFNlPXRoaXMuX2V2ZW50cykpcmV0dXJuIHRo''@;'; put 'put ''aXM7aWYodm9pZCAwPT09U2UucmVtb3ZlTGlzdGVuZXIpcmV0dXJuIDA9PT1hcmd1bWVudHMubGVuZ3RoPyh0aGlzLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLl9ldmVudHNDb3VudD0wKTp2b2lkIDAhPT1TZVtfZV0mJigwPT0tLXRoaXMuX2V2ZW50c0NvdW50P3RoaXMuX2V2''@;'; put 'put ''ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpOmRlbGV0ZSBTZVtfZV0pLHRoaXM7aWYoMD09PWFyZ3VtZW50cy5sZW5ndGgpe3ZhciBwLFY9T2JqZWN0LmtleXMoU2UpO2ZvcihqZT0wO2plPFYubGVuZ3RoOysramUpInJlbW92ZUxpc3RlbmVyIiE9PShwPVZbamVdKSYmdGhpcy5yZW1vdmVBbGxM''@;'; put 'put ''aXN0ZW5lcnMocCk7cmV0dXJuIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKCJyZW1vdmVMaXN0ZW5lciIpLHRoaXMuX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuX2V2ZW50c0NvdW50PTAsdGhpc31pZigiZnVuY3Rpb24iPT10eXBlb2YoVGU9U2VbX2VdKSl0aGlzLnJlbW92ZUxp''@;'; put 'put ''c3RlbmVyKF9lLFRlKTtlbHNlIGlmKHZvaWQgMCE9PVRlKWZvcihqZT1UZS5sZW5ndGgtMTtqZT49MDtqZS0tKXRoaXMucmVtb3ZlTGlzdGVuZXIoX2UsVGVbamVdKTtyZXR1cm4gdGhpc30sRi5wcm90b3R5cGUubGlzdGVuZXJzPWZ1bmN0aW9uKF9lKXtyZXR1cm4gVyh0aGlzLF9lLCEwKX0s''@;'; put 'put ''Ri5wcm90b3R5cGUucmF3TGlzdGVuZXJzPWZ1bmN0aW9uKF9lKXtyZXR1cm4gVyh0aGlzLF9lLCExKX0sRi5saXN0ZW5lckNvdW50PWZ1bmN0aW9uKG1lLF9lKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgbWUubGlzdGVuZXJDb3VudD9tZS5saXN0ZW5lckNvdW50KF9lKTpZLmNhbGwobWUs''@;'; put 'put ''X2UpfSxGLnByb3RvdHlwZS5saXN0ZW5lckNvdW50PVksRi5wcm90b3R5cGUuZXZlbnROYW1lcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9ldmVudHNDb3VudD4wP0IodGhpcy5fZXZlbnRzKTpbXX19LDMwNDg6KHVlLFgseSk9Pnt2YXIgST15KDk1MDkpLkJ1ZmZlcixfPXkoMjMxOCk7dWUu''@;'; put 'put ''ZXhwb3J0cz1mdW5jdGlvbiBnKEIsdyxQLEYpe2lmKEkuaXNCdWZmZXIoQil8fChCPUkuZnJvbShCLCJiaW5hcnkiKSksdyYmKEkuaXNCdWZmZXIodyl8fCh3PUkuZnJvbSh3LCJiaW5hcnkiKSksOCE9PXcubGVuZ3RoKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigic2FsdCBzaG91bGQgYmUgQnVm''@;'; put 'put ''ZmVyIHdpdGggOCBieXRlIGxlbmd0aCIpO2Zvcih2YXIgTz1QLzgsej1JLmFsbG9jKE8pLE49SS5hbGxvYyhGfHwwKSxMPUkuYWxsb2MoMCk7Tz4wfHxGPjA7KXt2YXIgSz1uZXcgXztLLnVwZGF0ZShMKSxLLnVwZGF0ZShCKSx3JiZLLnVwZGF0ZSh3KSxMPUsuZGlnZXN0KCk7dmFyIFU9MDtp''@;'; put 'put ''ZihPPjApe3ZhciBXPXoubGVuZ3RoLU87VT1NYXRoLm1pbihPLEwubGVuZ3RoKSxMLmNvcHkoeixXLDAsVSksTy09VX1pZihVPEwubGVuZ3RoJiZGPjApe3ZhciBZPU4ubGVuZ3RoLUYscT1NYXRoLm1pbihGLEwubGVuZ3RoLVUpO0wuY29weShOLFksVSxVK3EpLEYtPXF9fXJldHVybiBMLmZp''@;'; put 'put ''bGwoMCkse2tleTp6LGl2Ok59fX0sNDAyOToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDUzMjApLF89T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxnPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7dWUuZXhwb3J0cz1mdW5jdGlvbih6LE4sTCl7aWYoIUkoTikpdGhy''@;'; put 'put ''b3cgbmV3IFR5cGVFcnJvcigiaXRlcmF0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uIik7dmFyIEs7YXJndW1lbnRzLmxlbmd0aD49MyYmKEs9TCksZnVuY3Rpb24gRihPKXtyZXR1cm4iW29iamVjdCBBcnJheV0iPT09Xy5jYWxsKE8pfSh6KT9mdW5jdGlvbih6LE4sTCl7Zm9yKHZhciBLPTAsVT16''@;'; put 'put ''Lmxlbmd0aDtLPFU7SysrKWcuY2FsbCh6LEspJiYobnVsbD09TD9OKHpbS10sSyx6KTpOLmNhbGwoTCx6W0tdLEsseikpfSh6LE4sSyk6InN0cmluZyI9PXR5cGVvZiB6P2Z1bmN0aW9uKHosTixMKXtmb3IodmFyIEs9MCxVPXoubGVuZ3RoO0s8VTtLKyspbnVsbD09TD9OKHouY2hhckF0KEsp''@;'; put 'put ''LEsseik6Ti5jYWxsKEwsei5jaGFyQXQoSyksSyx6KX0oeixOLEspOmZ1bmN0aW9uKHosTixMKXtmb3IodmFyIEsgaW4geilnLmNhbGwoeixLKSYmKG51bGw9PUw/Tih6W0tdLEsseik6Ti5jYWxsKEwseltLXSxLLHopKX0oeixOLEspfX0sNjIzMDp1ZT0+e3VlLmV4cG9ydHM9Im9iamVjdCI9''@;'; put 'put ''PXR5cGVvZiBzZWxmP3NlbGYuRm9ybURhdGE6d2luZG93LkZvcm1EYXRhfSwzODczOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNDE1NSk7Y29uc3QgXz15KDc3KSxnPXkoMjUyMCksQj15KDEzODEpLm1rZGlyc1N5bmMsdz15KDMxOCkudXRpbWVzTWlsbGlzU3luYyxQPXkoMjcz''@;'; put 'put ''Myk7ZnVuY3Rpb24gTyhfZSxUZSxTZSxqZSl7Y29uc3QgcD0oamUuZGVyZWZlcmVuY2U/Xy5zdGF0U3luYzpfLmxzdGF0U3luYykoVGUpO2lmKHAuaXNEaXJlY3RvcnkoKSlyZXR1cm4gZnVuY3Rpb24gZWUoX2UsVGUsU2UsamUsVil7cmV0dXJuIFRlP25lKFNlLGplLFYpOmZ1bmN0aW9uIEoo''@;'; put 'put ''X2UsVGUsU2UsamUpe3JldHVybiBfLm1rZGlyU3luYyhTZSksbmUoVGUsU2UsamUpLFkoU2UsX2UpfShfZS5tb2RlLFNlLGplLFYpfShwLF9lLFRlLFNlLGplKTtpZihwLmlzRmlsZSgpfHxwLmlzQ2hhcmFjdGVyRGV2aWNlKCl8fHAuaXNCbG9ja0RldmljZSgpKXJldHVybiBmdW5jdGlvbiB6''@;'; put 'put ''KF9lLFRlLFNlLGplLFYpe3JldHVybiBUZT9mdW5jdGlvbiBOKF9lLFRlLFNlLGplKXtpZihqZS5vdmVyd3JpdGUpcmV0dXJuIF8udW5saW5rU3luYyhTZSksTChfZSxUZSxTZSxqZSk7aWYoamUuZXJyb3JPbkV4aXN0KXRocm93IG5ldyBFcnJvcihgJyR7U2V9JyBhbHJlYWR5IGV4aXN0c2Ap''@;'; put 'put ''fShfZSxTZSxqZSxWKTpMKF9lLFNlLGplLFYpfShwLF9lLFRlLFNlLGplKTtpZihwLmlzU3ltYm9saWNMaW5rKCkpcmV0dXJuIGZ1bmN0aW9uIGxlKF9lLFRlLFNlLGplKXtsZXQgVj1fLnJlYWRsaW5rU3luYyhUZSk7aWYoamUuZGVyZWZlcmVuY2UmJihWPWcucmVzb2x2ZShJLmN3ZCgpLFYp''@;'; put 'put ''KSxfZSl7bGV0IHA7dHJ5e3A9Xy5yZWFkbGlua1N5bmMoU2UpfWNhdGNoKGIpe2lmKCJFSU5WQUwiPT09Yi5jb2RlfHwiVU5LTk9XTiI9PT1iLmNvZGUpcmV0dXJuIF8uc3ltbGlua1N5bmMoVixTZSk7dGhyb3cgYn1pZihqZS5kZXJlZmVyZW5jZSYmKHA9Zy5yZXNvbHZlKEkuY3dkKCkscCkp''@;'; put 'put ''LFAuaXNTcmNTdWJkaXIoVixwKSl0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBjb3B5ICcke1Z9JyB0byBhIHN1YmRpcmVjdG9yeSBvZiBpdHNlbGYsICcke3B9Jy5gKTtpZihQLmlzU3JjU3ViZGlyKHAsVikpdGhyb3cgbmV3IEVycm9yKGBDYW5ub3Qgb3ZlcndyaXRlICcke3B9JyB3aXRoICck''@;'; put 'put ''e1Z9Jy5gKTtyZXR1cm4gZnVuY3Rpb24gbWUoX2UsVGUpe3JldHVybiBfLnVubGlua1N5bmMoVGUpLF8uc3ltbGlua1N5bmMoX2UsVGUpfShWLFNlKX1yZXR1cm4gXy5zeW1saW5rU3luYyhWLFNlKX0oX2UsVGUsU2UsamUpO3Rocm93IHAuaXNTb2NrZXQoKT9uZXcgRXJyb3IoYENhbm5vdCBj''@;'; put 'put ''b3B5IGEgc29ja2V0IGZpbGU6ICR7VGV9YCk6cC5pc0ZJRk8oKT9uZXcgRXJyb3IoYENhbm5vdCBjb3B5IGEgRklGTyBwaXBlOiAke1RlfWApOm5ldyBFcnJvcihgVW5rbm93biBmaWxlOiAke1RlfWApfWZ1bmN0aW9uIEwoX2UsVGUsU2UsamUpe3JldHVybiBfLmNvcHlGaWxlU3luYyhUZSxT''@;'; put 'put ''ZSksamUucHJlc2VydmVUaW1lc3RhbXBzJiZmdW5jdGlvbiBLKF9lLFRlLFNlKXsoZnVuY3Rpb24gVShfZSl7cmV0dXJuISgxMjgmX2UpfSkoX2UpJiZmdW5jdGlvbiBXKF9lLFRlKXtZKF9lLDEyOHxUZSl9KFNlLF9lKSxmdW5jdGlvbiBxKF9lLFRlKXtjb25zdCBTZT1fLnN0YXRTeW5jKF9l''@;'; put 'put ''KTt3KFRlLFNlLmF0aW1lLFNlLm10aW1lKX0oVGUsU2UpfShfZS5tb2RlLFRlLFNlKSxZKFNlLF9lLm1vZGUpfWZ1bmN0aW9uIFkoX2UsVGUpe3JldHVybiBfLmNobW9kU3luYyhfZSxUZSl9ZnVuY3Rpb24gbmUoX2UsVGUsU2Upe2NvbnN0IGplPV8ub3BlbmRpclN5bmMoX2UpO3RyeXtsZXQg''@;'; put 'put ''Vjtmb3IoO251bGwhPT0oVj1qZS5yZWFkU3luYygpKTspaWUoVi5uYW1lLF9lLFRlLFNlKX1maW5hbGx5e2plLmNsb3NlU3luYygpfX1mdW5jdGlvbiBpZShfZSxUZSxTZSxqZSl7Y29uc3QgVj1nLmpvaW4oVGUsX2UpLHA9Zy5qb2luKFNlLF9lKTtpZihqZS5maWx0ZXImJiFqZS5maWx0ZXIo''@;'; put 'put ''VixwKSlyZXR1cm47Y29uc3R7ZGVzdFN0YXQ6Yn09UC5jaGVja1BhdGhzU3luYyhWLHAsImNvcHkiLGplKTtyZXR1cm4gTyhiLFYscCxqZSl9dWUuZXhwb3J0cz1mdW5jdGlvbiBGKF9lLFRlLFNlKXsiZnVuY3Rpb24iPT10eXBlb2YgU2UmJihTZT17ZmlsdGVyOlNlfSksKFNlPVNlfHx7fSku''@;'; put 'put ''Y2xvYmJlcj0hKCJjbG9iYmVyImluIFNlKXx8ISFTZS5jbG9iYmVyLFNlLm92ZXJ3cml0ZT0ib3ZlcndyaXRlImluIFNlPyEhU2Uub3ZlcndyaXRlOlNlLmNsb2JiZXIsU2UucHJlc2VydmVUaW1lc3RhbXBzJiYiaWEzMiI9PT1JLmFyY2gmJkkuZW1pdFdhcm5pbmcoIlVzaW5nIHRoZSBwcmVz''@;'; put 'put ''ZXJ2ZVRpbWVzdGFtcHMgb3B0aW9uIGluIDMyLWJpdCBub2RlIGlzIG5vdCByZWNvbW1lbmRlZDtcblxuXHRzZWUgaHR0cHM6Ly9naXRodWIuY29tL2pwcmljaGFyZHNvbi9ub2RlLWZzLWV4dHJhL2lzc3Vlcy8yNjkiLCJXYXJuaW5nIiwiZnMtZXh0cmEtV0FSTjAwMDIiKTtjb25zdHtzcmNT''@;'; put 'put ''dGF0OmplLGRlc3RTdGF0OlZ9PVAuY2hlY2tQYXRoc1N5bmMoX2UsVGUsImNvcHkiLFNlKTtpZihQLmNoZWNrUGFyZW50UGF0aHNTeW5jKF9lLGplLFRlLCJjb3B5IiksU2UuZmlsdGVyJiYhU2UuZmlsdGVyKF9lLFRlKSlyZXR1cm47Y29uc3QgcD1nLmRpcm5hbWUoVGUpO3JldHVybiBfLmV4''@;'; put 'put ''aXN0c1N5bmMocCl8fEIocCksTyhWLF9lLFRlLFNlKX19LDcxODk6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg0MTU1KTtjb25zdCBfPXkoNzc0OSksZz15KDI1MjApLHtta2RpcnM6Qn09eSgxMzgxKSx7cGF0aEV4aXN0czp3fT15KDkyNTcpLHt1dGltZXNNaWxsaXM6UH09eSgz''@;'; put 'put ''MTgpLEY9eSgyNzMzKTtmdW5jdGlvbiB6KCl7cmV0dXJuKHo9X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKFRlLFNlLGplPXt9KXsiZnVuY3Rpb24iPT10eXBlb2YgamUmJihqZT17ZmlsdGVyOmplfSksamUuY2xvYmJlcj0hKCJjbG9iYmVyImluIGplKXx8ISFqZS5jbG9iYmVyLGplLm92''@;'; put 'put ''ZXJ3cml0ZT0ib3ZlcndyaXRlImluIGplPyEhamUub3ZlcndyaXRlOmplLmNsb2JiZXIsamUucHJlc2VydmVUaW1lc3RhbXBzJiYiaWEzMiI9PT1JLmFyY2gmJkkuZW1pdFdhcm5pbmcoIlVzaW5nIHRoZSBwcmVzZXJ2ZVRpbWVzdGFtcHMgb3B0aW9uIGluIDMyLWJpdCBub2RlIGlzIG5vdCBy''@;'; put 'put ''ZWNvbW1lbmRlZDtcblxuXHRzZWUgaHR0cHM6Ly9naXRodWIuY29tL2pwcmljaGFyZHNvbi9ub2RlLWZzLWV4dHJhL2lzc3Vlcy8yNjkiLCJXYXJuaW5nIiwiZnMtZXh0cmEtV0FSTjAwMDEiKTtjb25zdHtzcmNTdGF0OlYsZGVzdFN0YXQ6cH09eWllbGQgRi5jaGVja1BhdGhzKFRlLFNlLCJj''@;'; put 'put ''b3B5IixqZSk7aWYoeWllbGQgRi5jaGVja1BhcmVudFBhdGhzKFRlLFYsU2UsImNvcHkiKSwhKHlpZWxkIE4oVGUsU2UsamUpKSlyZXR1cm47Y29uc3QgeD1nLmRpcm5hbWUoU2UpOyh5aWVsZCB3KHgpKXx8KHlpZWxkIEIoeCkpLHlpZWxkIEsocCxUZSxTZSxqZSl9KSkuYXBwbHkodGhpcyxh''@;'; put 'put ''cmd1bWVudHMpfWZ1bmN0aW9uIE4oVGUsU2UsamUpe3JldHVybiBMLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBMKCl7cmV0dXJuKEw9X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKFRlLFNlLGplKXtyZXR1cm4hamUuZmlsdGVyfHxqZS5maWx0ZXIoVGUsU2UpfSkpLmFwcGx5''@;'; put 'put ''KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBLKFRlLFNlLGplLFYpe3JldHVybiBVLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBVKCl7cmV0dXJuIFU9X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKFRlLFNlLGplLFYpe2NvbnN0IGI9eWllbGQoVi5kZXJlZmVyZW5jZT9fLnN0''@;'; put 'put ''YXQ6Xy5sc3RhdCkoU2UpO2lmKGIuaXNEaXJlY3RvcnkoKSlyZXR1cm4gZnVuY3Rpb24gaWUoVGUsU2UsamUsVixwKXtyZXR1cm4gbGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfShiLFRlLFNlLGplLFYpO2lmKGIuaXNGaWxlKCl8fGIuaXNDaGFyYWN0ZXJEZXZpY2UoKXx8Yi5pc0Jsb2NrRGV2''@;'; put 'put ''aWNlKCkpcmV0dXJuIGZ1bmN0aW9uIFcoVGUsU2UsamUsVixwKXtyZXR1cm4gWS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KGIsVGUsU2UsamUsVik7aWYoYi5pc1N5bWJvbGljTGluaygpKXJldHVybiBmdW5jdGlvbiBtZShUZSxTZSxqZSxWKXtyZXR1cm4gX2UuYXBwbHkodGhpcyxhcmd1bWVu''@;'; put 'put ''dHMpfShUZSxTZSxqZSxWKTt0aHJvdyBiLmlzU29ja2V0KCk/bmV3IEVycm9yKGBDYW5ub3QgY29weSBhIHNvY2tldCBmaWxlOiAke1NlfWApOmIuaXNGSUZPKCk/bmV3IEVycm9yKGBDYW5ub3QgY29weSBhIEZJRk8gcGlwZTogJHtTZX1gKTpuZXcgRXJyb3IoYFVua25vd24gZmlsZTogJHtT''@;'; put 'put ''ZX1gKX0pLFUuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIFkoKXtyZXR1cm4oWT1fYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiooVGUsU2UsamUsVixwKXtpZighU2UpcmV0dXJuIHEoVGUsamUsVixwKTtpZihwLm92ZXJ3cml0ZSlyZXR1cm4geWllbGQgXy51bmxpbmsoVikscShU''@;'; put 'put ''ZSxqZSxWLHApO2lmKHAuZXJyb3JPbkV4aXN0KXRocm93IG5ldyBFcnJvcihgJyR7Vn0nIGFscmVhZHkgZXhpc3RzYCl9KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIHEoVGUsU2UsamUsVil7cmV0dXJuIGVlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBlZSgpe3Jl''@;'; put 'put ''dHVybihlZT1fYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiooVGUsU2UsamUsVil7aWYoeWllbGQgXy5jb3B5RmlsZShTZSxqZSksVi5wcmVzZXJ2ZVRpbWVzdGFtcHMpeyhmdW5jdGlvbiBKKFRlKXtyZXR1cm4hKDEyOCZUZSl9KShUZS5tb2RlKSYmKHlpZWxkIGZ1bmN0aW9uIG5lKFRlLFNl''@;'; put 'put ''KXtyZXR1cm4gXy5jaG1vZChUZSwxMjh8U2UpfShqZSxUZS5tb2RlKSk7Y29uc3QgcD15aWVsZCBfLnN0YXQoU2UpO3lpZWxkIFAoamUscC5hdGltZSxwLm10aW1lKX1yZXR1cm4gXy5jaG1vZChqZSxUZS5tb2RlKX0pKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gbGUoKXtyZXR1''@;'; put 'put ''cm4obGU9X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKFRlLFNlLGplLFYscCl7U2V8fCh5aWVsZCBfLm1rZGlyKFYpKTtjb25zdCBiPVtdO3ZhciBULHg9ITEsQz0hMTt0cnl7Zm9yKHZhciBqLEg9X2FzeW5jSXRlcmF0b3IoeWllbGQgXy5vcGVuZGlyKGplKSk7eD0hKGo9eWllbGQgSC5u''@;'; put 'put ''ZXh0KCkpLmRvbmU7eD0hMSl7Y29uc3QgRT1qLnZhbHVlO3tjb25zdCBtPWcuam9pbihqZSxFLm5hbWUpLEE9Zy5qb2luKFYsRS5uYW1lKTtiLnB1c2goTihtLEEscCkudGhlbihhZT0+e2lmKGFlKXJldHVybiBGLmNoZWNrUGF0aHMobSxBLCJjb3B5IixwKS50aGVuKCh7ZGVzdFN0YXQ6dGV9''@;'; put 'put ''KT0+Syh0ZSxtLEEscCkpfSkpfX19Y2F0Y2goRSl7Qz0hMCxUPUV9ZmluYWxseXt0cnl7eCYmbnVsbCE9SC5yZXR1cm4mJih5aWVsZCBILnJldHVybigpKX1maW5hbGx5e2lmKEMpdGhyb3cgVH19eWllbGQgUHJvbWlzZS5hbGwoYiksU2V8fCh5aWVsZCBfLmNobW9kKFYsVGUubW9kZSkpfSkp''@;'; put 'put ''LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBfZSgpe3JldHVybihfZT1fYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiooVGUsU2UsamUsVil7bGV0IHA9eWllbGQgXy5yZWFkbGluayhTZSk7aWYoVi5kZXJlZmVyZW5jZSYmKHA9Zy5yZXNvbHZlKEkuY3dkKCkscCkpLCFUZSlyZXR1''@;'; put 'put ''cm4gXy5zeW1saW5rKHAsamUpO2xldCBiPW51bGw7dHJ5e2I9eWllbGQgXy5yZWFkbGluayhqZSl9Y2F0Y2goeCl7aWYoIkVJTlZBTCI9PT14LmNvZGV8fCJVTktOT1dOIj09PXguY29kZSlyZXR1cm4gXy5zeW1saW5rKHAsamUpO3Rocm93IHh9aWYoVi5kZXJlZmVyZW5jZSYmKGI9Zy5yZXNv''@;'; put 'put ''bHZlKEkuY3dkKCksYikpLEYuaXNTcmNTdWJkaXIocCxiKSl0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBjb3B5ICcke3B9JyB0byBhIHN1YmRpcmVjdG9yeSBvZiBpdHNlbGYsICcke2J9Jy5gKTtpZihGLmlzU3JjU3ViZGlyKGIscCkpdGhyb3cgbmV3IEVycm9yKGBDYW5ub3Qgb3ZlcndyaXRl''@;'; put 'put ''ICcke2J9JyB3aXRoICcke3B9Jy5gKTtyZXR1cm4geWllbGQgXy51bmxpbmsoamUpLF8uc3ltbGluayhwLGplKX0pKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9dWUuZXhwb3J0cz1mdW5jdGlvbiBPKFRlLFNlKXtyZXR1cm4gei5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSw2NDY0Oih1ZSxYLHkp''@;'; put 'put ''PT57InVzZSBzdHJpY3QiO2NvbnN0IEk9eSg4OTgxKS5mcm9tUHJvbWlzZTt1ZS5leHBvcnRzPXtjb3B5OkkoeSg3MTg5KSksY29weVN5bmM6eSgzODczKX19LDU1OTA6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7Y29uc3QgST15KDg5ODEpLmZyb21Qcm9taXNlLF89eSg3NzQ5KSxnPXkoMjUy''@;'; put 'put ''MCksQj15KDEzODEpLHc9eSg0NTQyKSxQPUkoZnVuY3Rpb24oKXt2YXIgTz1fYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiooTil7bGV0IEw7dHJ5e0w9eWllbGQgXy5yZWFkZGlyKE4pfWNhdGNoe3JldHVybiBCLm1rZGlycyhOKX1yZXR1cm4gUHJvbWlzZS5hbGwoTC5tYXAoSz0+dy5yZW1v''@;'; put 'put ''dmUoZy5qb2luKE4sSykpKSl9KTtyZXR1cm4gZnVuY3Rpb24geihOKXtyZXR1cm4gTy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpKTtmdW5jdGlvbiBGKE8pe2xldCB6O3RyeXt6PV8ucmVhZGRpclN5bmMoTyl9Y2F0Y2h7cmV0dXJuIEIubWtkaXJzU3luYyhPKX16LmZvckVhY2goTj0+e049''@;'; put 'put ''Zy5qb2luKE8sTiksdy5yZW1vdmVTeW5jKE4pfSl9dWUuZXhwb3J0cz17ZW1wdHlEaXJTeW5jOkYsZW1wdHlkaXJTeW5jOkYsZW1wdHlEaXI6UCxlbXB0eWRpcjpQfX0sNjUzMDoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBJPXkoODk4MSkuZnJvbVByb21pc2UsXz15KDI1MjApLGc9''@;'; put 'put ''eSg3NzQ5KSxCPXkoMTM4MSk7ZnVuY3Rpb24gUCgpe3JldHVybihQPV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihPKXtsZXQgejt0cnl7ej15aWVsZCBnLnN0YXQoTyl9Y2F0Y2h7fWlmKHomJnouaXNGaWxlKCkpcmV0dXJuO2NvbnN0IE49Xy5kaXJuYW1lKE8pO2xldCBMPW51bGw7dHJ5''@;'; put 'put ''e0w9eWllbGQgZy5zdGF0KE4pfWNhdGNoKEspe2lmKCJFTk9FTlQiPT09Sy5jb2RlKXJldHVybiB5aWVsZCBCLm1rZGlycyhOKSx2b2lkKHlpZWxkIGcud3JpdGVGaWxlKE8sIiIpKTt0aHJvdyBLfUwuaXNEaXJlY3RvcnkoKT95aWVsZCBnLndyaXRlRmlsZShPLCIiKTp5aWVsZCBnLnJlYWRk''@;'; put 'put ''aXIoTil9KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfXVlLmV4cG9ydHM9e2NyZWF0ZUZpbGU6SShmdW5jdGlvbiB3KE8pe3JldHVybiBQLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pLGNyZWF0ZUZpbGVTeW5jOmZ1bmN0aW9uIEYoTyl7bGV0IHo7dHJ5e3o9Zy5zdGF0U3luYyhPKX1jYXRjaHt9''@;'; put 'put ''aWYoeiYmei5pc0ZpbGUoKSlyZXR1cm47Y29uc3QgTj1fLmRpcm5hbWUoTyk7dHJ5e2cuc3RhdFN5bmMoTikuaXNEaXJlY3RvcnkoKXx8Zy5yZWFkZGlyU3luYyhOKX1jYXRjaChMKXtpZighTHx8IkVOT0VOVCIhPT1MLmNvZGUpdGhyb3cgTDtCLm1rZGlyc1N5bmMoTil9Zy53cml0ZUZpbGVT''@;'; put 'put ''eW5jKE8sIiIpfX19LDE3MjA6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7Y29uc3R7Y3JlYXRlRmlsZTpJLGNyZWF0ZUZpbGVTeW5jOl99PXkoNjUzMCkse2NyZWF0ZUxpbms6ZyxjcmVhdGVMaW5rU3luYzpCfT15KDQxNDcpLHtjcmVhdGVTeW1saW5rOncsY3JlYXRlU3ltbGlua1N5bmM6UH09''@;'; put 'put ''eSgzNjM1KTt1ZS5leHBvcnRzPXtjcmVhdGVGaWxlOkksY3JlYXRlRmlsZVN5bmM6XyxlbnN1cmVGaWxlOkksZW5zdXJlRmlsZVN5bmM6XyxjcmVhdGVMaW5rOmcsY3JlYXRlTGlua1N5bmM6QixlbnN1cmVMaW5rOmcsZW5zdXJlTGlua1N5bmM6QixjcmVhdGVTeW1saW5rOncsY3JlYXRlU3lt''@;'; put 'put ''bGlua1N5bmM6UCxlbnN1cmVTeW1saW5rOncsZW5zdXJlU3ltbGlua1N5bmM6UH19LDQxNDc6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7Y29uc3QgST15KDg5ODEpLmZyb21Qcm9taXNlLF89eSgyNTIwKSxnPXkoNzc0OSksQj15KDEzODEpLHtwYXRoRXhpc3RzOnd9PXkoOTI1Nykse2FyZUlk''@;'; put 'put ''ZW50aWNhbDpQfT15KDI3MzMpO2Z1bmN0aW9uIE8oKXtyZXR1cm4oTz1fYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiooTixMKXtsZXQgSyxVO3RyeXtLPXlpZWxkIGcubHN0YXQoTCl9Y2F0Y2h7fXRyeXtVPXlpZWxkIGcubHN0YXQoTil9Y2F0Y2gocSl7dGhyb3cgcS5tZXNzYWdlPXEubWVz''@;'; put 'put ''c2FnZS5yZXBsYWNlKCJsc3RhdCIsImVuc3VyZUxpbmsiKSxxfWlmKEsmJlAoVSxLKSlyZXR1cm47Y29uc3QgVz1fLmRpcm5hbWUoTCk7KHlpZWxkIHcoVykpfHwoeWllbGQgQi5ta2RpcnMoVykpLHlpZWxkIGcubGluayhOLEwpfSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX11ZS5leHBvcnRz''@;'; put 'put ''PXtjcmVhdGVMaW5rOkkoZnVuY3Rpb24gRihOLEwpe3JldHVybiBPLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pLGNyZWF0ZUxpbmtTeW5jOmZ1bmN0aW9uIHooTixMKXtsZXQgSzt0cnl7Sz1nLmxzdGF0U3luYyhMKX1jYXRjaHt9dHJ5e2NvbnN0IFk9Zy5sc3RhdFN5bmMoTik7aWYoSyYmUChZ''@;'; put 'put ''LEspKXJldHVybn1jYXRjaChZKXt0aHJvdyBZLm1lc3NhZ2U9WS5tZXNzYWdlLnJlcGxhY2UoImxzdGF0IiwiZW5zdXJlTGluayIpLFl9Y29uc3QgVT1fLmRpcm5hbWUoTCk7cmV0dXJuIGcuZXhpc3RzU3luYyhVKXx8Qi5ta2RpcnNTeW5jKFUpLGcubGlua1N5bmMoTixMKX19fSw2MDcyOih1''@;'; put 'put ''ZSxYLHkpPT57InVzZSBzdHJpY3QiO2NvbnN0IEk9eSgyNTIwKSxfPXkoNzc0OSkse3BhdGhFeGlzdHM6Z309eSg5MjU3KSxCPXkoODk4MSkuZnJvbVByb21pc2U7ZnVuY3Rpb24gUCgpe3JldHVybihQPV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihPLHope2lmKEkuaXNBYnNvbHV0ZShP''@;'; put 'put ''KSl7dHJ5e3lpZWxkIF8ubHN0YXQoTyl9Y2F0Y2goVSl7dGhyb3cgVS5tZXNzYWdlPVUubWVzc2FnZS5yZXBsYWNlKCJsc3RhdCIsImVuc3VyZVN5bWxpbmsiKSxVfXJldHVybnt0b0N3ZDpPLHRvRHN0Ok99fWNvbnN0IE49SS5kaXJuYW1lKHopLEw9SS5qb2luKE4sTyk7aWYoeWllbGQgZyhM''@;'; put 'put ''KSlyZXR1cm57dG9Dd2Q6TCx0b0RzdDpPfTt0cnl7eWllbGQgXy5sc3RhdChPKX1jYXRjaChVKXt0aHJvdyBVLm1lc3NhZ2U9VS5tZXNzYWdlLnJlcGxhY2UoImxzdGF0IiwiZW5zdXJlU3ltbGluayIpLFV9cmV0dXJue3RvQ3dkOk8sdG9Ec3Q6SS5yZWxhdGl2ZShOLE8pfX0pKS5hcHBseSh0''@;'; put 'put ''aGlzLGFyZ3VtZW50cyl9dWUuZXhwb3J0cz17c3ltbGlua1BhdGhzOkIoZnVuY3Rpb24gdyhPLHope3JldHVybiBQLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pLHN5bWxpbmtQYXRoc1N5bmM6ZnVuY3Rpb24gRihPLHope2lmKEkuaXNBYnNvbHV0ZShPKSl7aWYoIV8uZXhpc3RzU3luYyhPKSl0''@;'; put 'put ''aHJvdyBuZXcgRXJyb3IoImFic29sdXRlIHNyY3BhdGggZG9lcyBub3QgZXhpc3QiKTtyZXR1cm57dG9Dd2Q6Tyx0b0RzdDpPfX1jb25zdCBOPUkuZGlybmFtZSh6KSxMPUkuam9pbihOLE8pO2lmKF8uZXhpc3RzU3luYyhMKSlyZXR1cm57dG9Dd2Q6TCx0b0RzdDpPfTtpZighXy5leGlzdHNT''@;'; put 'put ''eW5jKE8pKXRocm93IG5ldyBFcnJvcigicmVsYXRpdmUgc3JjcGF0aCBkb2VzIG5vdCBleGlzdCIpO3JldHVybnt0b0N3ZDpPLHRvRHN0OkkucmVsYXRpdmUoTixPKX19fX0sOTI1OToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBJPXkoNzc0OSksXz15KDg5ODEpLmZyb21Qcm9taXNl''@;'; put 'put ''O2Z1bmN0aW9uIEIoKXtyZXR1cm4oQj1fYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiooUCxGKXtpZihGKXJldHVybiBGO2xldCBPO3RyeXtPPXlpZWxkIEkubHN0YXQoUCl9Y2F0Y2h7cmV0dXJuImZpbGUifXJldHVybiBPJiZPLmlzRGlyZWN0b3J5KCk/ImRpciI6ImZpbGUifSkpLmFwcGx5''@;'; put 'put ''KHRoaXMsYXJndW1lbnRzKX11ZS5leHBvcnRzPXtzeW1saW5rVHlwZTpfKGZ1bmN0aW9uIGcoUCxGKXtyZXR1cm4gQi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KSxzeW1saW5rVHlwZVN5bmM6ZnVuY3Rpb24gdyhQLEYpe2lmKEYpcmV0dXJuIEY7bGV0IE87dHJ5e089SS5sc3RhdFN5bmMoUCl9''@;'; put 'put ''Y2F0Y2h7cmV0dXJuImZpbGUifXJldHVybiBPJiZPLmlzRGlyZWN0b3J5KCk/ImRpciI6ImZpbGUifX19LDM2MzU6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7Y29uc3QgST15KDg5ODEpLmZyb21Qcm9taXNlLF89eSgyNTIwKSxnPXkoNzc0OSkse21rZGlyczpCLG1rZGlyc1N5bmM6d309eSgx''@;'; put 'put ''MzgxKSx7c3ltbGlua1BhdGhzOlAsc3ltbGlua1BhdGhzU3luYzpGfT15KDYwNzIpLHtzeW1saW5rVHlwZTpPLHN5bWxpbmtUeXBlU3luYzp6fT15KDkyNTkpLHtwYXRoRXhpc3RzOk59PXkoOTI1Nykse2FyZUlkZW50aWNhbDpMfT15KDI3MzMpO2Z1bmN0aW9uIFUoKXtyZXR1cm4oVT1fYXN5''@;'; put 'put ''bmNUb0dlbmVyYXRvcihmdW5jdGlvbiooWSxxLGVlKXtsZXQgSjt0cnl7Sj15aWVsZCBnLmxzdGF0KHEpfWNhdGNoe31pZihKJiZKLmlzU3ltYm9saWNMaW5rKCkpe2NvbnN0W21lLF9lXT15aWVsZCBQcm9taXNlLmFsbChbZy5zdGF0KFkpLGcuc3RhdChxKV0pO2lmKEwobWUsX2UpKXJldHVy''@;'; put 'put ''bn1jb25zdCBuZT15aWVsZCBQKFkscSk7WT1uZS50b0RzdDtjb25zdCBpZT15aWVsZCBPKG5lLnRvQ3dkLGVlKSxsZT1fLmRpcm5hbWUocSk7cmV0dXJuKHlpZWxkIE4obGUpKXx8KHlpZWxkIEIobGUpKSxnLnN5bWxpbmsoWSxxLGllKX0pKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9dWUuZXhw''@;'; put 'put ''b3J0cz17Y3JlYXRlU3ltbGluazpJKGZ1bmN0aW9uIEsoWSxxLGVlKXtyZXR1cm4gVS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KSxjcmVhdGVTeW1saW5rU3luYzpmdW5jdGlvbiBXKFkscSxlZSl7bGV0IEo7dHJ5e0o9Zy5sc3RhdFN5bmMocSl9Y2F0Y2h7fWlmKEomJkouaXNTeW1ib2xpY0xp''@;'; put 'put ''bmsoKSl7Y29uc3QgbWU9Zy5zdGF0U3luYyhZKSxfZT1nLnN0YXRTeW5jKHEpO2lmKEwobWUsX2UpKXJldHVybn1jb25zdCBuZT1GKFkscSk7WT1uZS50b0RzdCxlZT16KG5lLnRvQ3dkLGVlKTtjb25zdCBpZT1fLmRpcm5hbWUocSk7cmV0dXJuIGcuZXhpc3RzU3luYyhpZSl8fHcoaWUpLGcu''@;'; put 'put ''c3ltbGlua1N5bmMoWSxxLGVlKX19fSw3NzQ5Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNDE1NSk7Y29uc3QgXz15KDg5ODEpLmZyb21DYWxsYmFjayxnPXkoNzcpLEI9WyJhY2Nlc3MiLCJhcHBlbmRGaWxlIiwiY2htb2QiLCJjaG93biIsImNsb3NlIiwiY29weUZpbGUiLCJj''@;'; put 'put ''cCIsImZjaG1vZCIsImZjaG93biIsImZkYXRhc3luYyIsImZzdGF0IiwiZnN5bmMiLCJmdHJ1bmNhdGUiLCJmdXRpbWVzIiwiZ2xvYiIsImxjaG1vZCIsImxjaG93biIsImx1dGltZXMiLCJsaW5rIiwibHN0YXQiLCJta2RpciIsIm1rZHRlbXAiLCJvcGVuIiwib3BlbmRpciIsInJlYWRkaXIi''@;'; put 'put ''LCJyZWFkRmlsZSIsInJlYWRsaW5rIiwicmVhbHBhdGgiLCJyZW5hbWUiLCJybSIsInJtZGlyIiwic3RhdCIsInN0YXRmcyIsInN5bWxpbmsiLCJ0cnVuY2F0ZSIsInVubGluayIsInV0aW1lcyIsIndyaXRlRmlsZSJdLmZpbHRlcih3PT4iZnVuY3Rpb24iPT10eXBlb2YgZ1t3XSk7T2JqZWN0''@;'; put 'put ''LmFzc2lnbihYLGcpLEIuZm9yRWFjaCh3PT57WFt3XT1fKGdbd10pfSksWC5leGlzdHM9ZnVuY3Rpb24odyxQKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgUD9nLmV4aXN0cyh3LFApOm5ldyBQcm9taXNlKEY9PmcuZXhpc3RzKHcsRikpfSxYLnJlYWQ9ZnVuY3Rpb24odyxQLEYsTyx6LE4p''@;'; put 'put ''e3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBOP2cucmVhZCh3LFAsRixPLHosTik6bmV3IFByb21pc2UoKEwsSyk9PntnLnJlYWQodyxQLEYsTyx6LChVLFcsWSk9PntpZihVKXJldHVybiBLKFUpO0woe2J5dGVzUmVhZDpXLGJ1ZmZlcjpZfSl9KX0pfSxYLndyaXRlPWZ1bmN0aW9uKHcsUCwu''@;'; put 'put ''Li5GKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgRltGLmxlbmd0aC0xXT9nLndyaXRlKHcsUCwuLi5GKTpuZXcgUHJvbWlzZSgoTyx6KT0+e2cud3JpdGUodyxQLC4uLkYsKE4sTCxLKT0+e2lmKE4pcmV0dXJuIHooTik7Tyh7Ynl0ZXNXcml0dGVuOkwsYnVmZmVyOkt9KX0pfSl9LFgucmVh''@;'; put 'put ''ZHY9ZnVuY3Rpb24odyxQLC4uLkYpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBGW0YubGVuZ3RoLTFdP2cucmVhZHYodyxQLC4uLkYpOm5ldyBQcm9taXNlKChPLHopPT57Zy5yZWFkdih3LFAsLi4uRiwoTixMLEspPT57aWYoTilyZXR1cm4geihOKTtPKHtieXRlc1JlYWQ6TCxidWZmZXJz''@;'; put 'put ''Okt9KX0pfSl9LFgud3JpdGV2PWZ1bmN0aW9uKHcsUCwuLi5GKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgRltGLmxlbmd0aC0xXT9nLndyaXRldih3LFAsLi4uRik6bmV3IFByb21pc2UoKE8seik9PntnLndyaXRldih3LFAsLi4uRiwoTixMLEspPT57aWYoTilyZXR1cm4geihOKTtPKHti''@;'; put 'put ''eXRlc1dyaXR0ZW46TCxidWZmZXJzOkt9KX0pfSl9LCJmdW5jdGlvbiI9PXR5cGVvZiBnLnJlYWxwYXRoLm5hdGl2ZT9YLnJlYWxwYXRoLm5hdGl2ZT1fKGcucmVhbHBhdGgubmF0aXZlKTpJLmVtaXRXYXJuaW5nKCJmcy5yZWFscGF0aC5uYXRpdmUgaXMgbm90IGEgZnVuY3Rpb24uIElzIGZz''@;'; put 'put ''IGJlaW5nIG1vbmtleS1wYXRjaGVkPyIsIldhcm5pbmciLCJmcy1leHRyYS1XQVJOMDAwMyIpfSw1Njc0Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9ey4uLnkoNzc0OSksLi4ueSg2NDY0KSwuLi55KDU1OTApLC4uLnkoMTcyMCksLi4ueSg2NTczKSwuLi55KDEzODEpLC4u''@;'; put 'put ''LnkoNTMwKSwuLi55KDQ2NzApLC4uLnkoOTI1NyksLi4ueSg0NTQyKX19LDY1NzM6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7Y29uc3QgST15KDg5ODEpLmZyb21Qcm9taXNlLF89eSg3MTgzKTtfLm91dHB1dEpzb249SSh5KDM1MDgpKSxfLm91dHB1dEpzb25TeW5jPXkoOTU3OCksXy5vdXRw''@;'; put 'put ''dXRKU09OPV8ub3V0cHV0SnNvbixfLm91dHB1dEpTT05TeW5jPV8ub3V0cHV0SnNvblN5bmMsXy53cml0ZUpTT049Xy53cml0ZUpzb24sXy53cml0ZUpTT05TeW5jPV8ud3JpdGVKc29uU3luYyxfLnJlYWRKU09OPV8ucmVhZEpzb24sXy5yZWFkSlNPTlN5bmM9Xy5yZWFkSnNvblN5bmMsdWUu''@;'; put 'put ''ZXhwb3J0cz1ffSw3MTgzOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO2NvbnN0IEk9eSg2ODEzKTt1ZS5leHBvcnRzPXtyZWFkSnNvbjpJLnJlYWRGaWxlLHJlYWRKc29uU3luYzpJLnJlYWRGaWxlU3luYyx3cml0ZUpzb246SS53cml0ZUZpbGUsd3JpdGVKc29uU3luYzpJLndyaXRlRmlsZVN5''@;'; put 'put ''bmN9fSw5NTc4Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO2NvbnN0e3N0cmluZ2lmeTpJfT15KDY3ODApLHtvdXRwdXRGaWxlU3luYzpffT15KDQ2NzApO3VlLmV4cG9ydHM9ZnVuY3Rpb24gZyhCLHcsUCl7Y29uc3QgRj1JKHcsUCk7XyhCLEYsUCl9fSwzNTA4Oih1ZSxYLHkpPT57InVzZSBz''@;'; put 'put ''dHJpY3QiO2NvbnN0e3N0cmluZ2lmeTpJfT15KDY3ODApLHtvdXRwdXRGaWxlOl99PXkoNDY3MCk7ZnVuY3Rpb24gQigpe3JldHVybihCPV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKih3LFAsRj17fSl7Y29uc3QgTz1JKFAsRik7eWllbGQgXyh3LE8sRil9KSkuYXBwbHkodGhpcyxhcmd1''@;'; put 'put ''bWVudHMpfXVlLmV4cG9ydHM9ZnVuY3Rpb24gZyh3LFApe3JldHVybiBCLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LDEzODE6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7Y29uc3QgST15KDg5ODEpLmZyb21Qcm9taXNlLHttYWtlRGlyOl8sbWFrZURpclN5bmM6Z309eSg4MjMzKSxCPUkoXyk7''@;'; put 'put ''dWUuZXhwb3J0cz17bWtkaXJzOkIsbWtkaXJzU3luYzpnLG1rZGlycDpCLG1rZGlycFN5bmM6ZyxlbnN1cmVEaXI6QixlbnN1cmVEaXJTeW5jOmd9fSw4MjMzOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO2NvbnN0IEk9eSg3NzQ5KSx7Y2hlY2tQYXRoOl99PXkoMzQ2OCksZz1CPT4ibnVtYmVy''@;'; put 'put ''Ij09dHlwZW9mIEI/Qjp7bW9kZTo1MTEsLi4uQn0ubW9kZTt1ZS5leHBvcnRzLm1ha2VEaXI9ZnVuY3Rpb24oKXt2YXIgQj1fYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbioodyxQKXtyZXR1cm4gXyh3KSxJLm1rZGlyKHcse21vZGU6ZyhQKSxyZWN1cnNpdmU6ITB9KX0pO3JldHVybiBmdW5j''@;'; put 'put ''dGlvbih3LFApe3JldHVybiBCLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCksdWUuZXhwb3J0cy5tYWtlRGlyU3luYz0oQix3KT0+KF8oQiksSS5ta2RpclN5bmMoQix7bW9kZTpnKHcpLHJlY3Vyc2l2ZTohMH0pKX0sMzQ2ODoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDQxNTUp''@;'; put 'put ''O2NvbnN0IF89eSgyNTIwKTt1ZS5leHBvcnRzLmNoZWNrUGF0aD1mdW5jdGlvbihCKXtpZigid2luMzIiPT09SS5wbGF0Zm9ybSYmL1s8PjoifD8qXS8udGVzdChCLnJlcGxhY2UoXy5wYXJzZShCKS5yb290LCIiKSkpe2NvbnN0IFA9bmV3IEVycm9yKGBQYXRoIGNvbnRhaW5zIGludmFsaWQg''@;'; put 'put ''Y2hhcmFjdGVyczogJHtCfWApO3Rocm93IFAuY29kZT0iRUlOVkFMIixQfX19LDUzMDoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBJPXkoODk4MSkuZnJvbVByb21pc2U7dWUuZXhwb3J0cz17bW92ZTpJKHkoNDM2KSksbW92ZVN5bmM6eSgzNzM2KX19LDM3MzY6KHVlLFgseSk9Pnsi''@;'; put 'put ''dXNlIHN0cmljdCI7Y29uc3QgST15KDc3KSxfPXkoMjUyMCksZz15KDY0NjQpLmNvcHlTeW5jLEI9eSg0NTQyKS5yZW1vdmVTeW5jLHc9eSgxMzgxKS5ta2RpcnBTeW5jLFA9eSgyNzMzKTtmdW5jdGlvbiBOKEssVSxXKXt0cnl7SS5yZW5hbWVTeW5jKEssVSl9Y2F0Y2goWSl7aWYoIkVYREVW''@;'; put 'put ''IiE9PVkuY29kZSl0aHJvdyBZO3JldHVybiBmdW5jdGlvbiBMKEssVSxXKXtyZXR1cm4gZyhLLFUse292ZXJ3cml0ZTpXLGVycm9yT25FeGlzdDohMCxwcmVzZXJ2ZVRpbWVzdGFtcHM6ITB9KSxCKEspfShLLFUsVyl9fXVlLmV4cG9ydHM9ZnVuY3Rpb24gRihLLFUsVyl7Y29uc3QgWT0oVz1X''@;'; put 'put ''fHx7fSkub3ZlcndyaXRlfHxXLmNsb2JiZXJ8fCExLHtzcmNTdGF0OnEsaXNDaGFuZ2luZ0Nhc2U6ZWU9ITF9PVAuY2hlY2tQYXRoc1N5bmMoSyxVLCJtb3ZlIixXKTtyZXR1cm4gUC5jaGVja1BhcmVudFBhdGhzU3luYyhLLHEsVSwibW92ZSIpLGZ1bmN0aW9uIE8oSyl7Y29uc3QgVT1fLmRp''@;'; put 'put ''cm5hbWUoSyk7cmV0dXJuIF8ucGFyc2UoVSkucm9vdD09PVV9KFUpfHx3KF8uZGlybmFtZShVKSksZnVuY3Rpb24geihLLFUsVyxZKXtpZihZKXJldHVybiBOKEssVSxXKTtpZihXKXJldHVybiBCKFUpLE4oSyxVLFcpO2lmKEkuZXhpc3RzU3luYyhVKSl0aHJvdyBuZXcgRXJyb3IoImRlc3Qg''@;'; put 'put ''YWxyZWFkeSBleGlzdHMuIik7cmV0dXJuIE4oSyxVLFcpfShLLFUsWSxlZSl9fSw0MzY6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7Y29uc3QgST15KDc3NDkpLF89eSgyNTIwKSx7Y29weTpnfT15KDY0NjQpLHtyZW1vdmU6Qn09eSg0NTQyKSx7bWtkaXJwOnd9PXkoMTM4MSkse3BhdGhFeGlz''@;'; put 'put ''dHM6UH09eSg5MjU3KSxGPXkoMjczMyk7ZnVuY3Rpb24geigpe3JldHVybiB6PV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihXLFkscT17fSl7Y29uc3QgZWU9cS5vdmVyd3JpdGV8fHEuY2xvYmJlcnx8ITEse3NyY1N0YXQ6Sixpc0NoYW5naW5nQ2FzZTpuZT0hMX09eWllbGQgRi5jaGVj''@;'; put 'put ''a1BhdGhzKFcsWSwibW92ZSIscSk7eWllbGQgRi5jaGVja1BhcmVudFBhdGhzKFcsSixZLCJtb3ZlIik7Y29uc3QgaWU9Xy5kaXJuYW1lKFkpO3JldHVybiBfLnBhcnNlKGllKS5yb290IT09aWUmJih5aWVsZCB3KGllKSksZnVuY3Rpb24gTihXLFkscSxlZSl7cmV0dXJuIEwuYXBwbHkodGhp''@;'; put 'put ''cyxhcmd1bWVudHMpfShXLFksZWUsbmUpfSksei5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gTCgpe3JldHVybiBMPV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihXLFkscSxlZSl7aWYoIWVlKWlmKHEpeWllbGQgQihZKTtlbHNlIGlmKHlpZWxkIFAoWSkpdGhyb3cgbmV3IEVy''@;'; put 'put ''cm9yKCJkZXN0IGFscmVhZHkgZXhpc3RzLiIpO3RyeXt5aWVsZCBJLnJlbmFtZShXLFkpfWNhdGNoKEope2lmKCJFWERFViIhPT1KLmNvZGUpdGhyb3cgSjt5aWVsZCBmdW5jdGlvbiBLKFcsWSxxKXtyZXR1cm4gVS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KFcsWSxxKX19KSxMLmFwcGx5KHRo''@;'; put 'put ''aXMsYXJndW1lbnRzKX1mdW5jdGlvbiBVKCl7cmV0dXJuKFU9X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKFcsWSxxKXtyZXR1cm4geWllbGQgZyhXLFkse292ZXJ3cml0ZTpxLGVycm9yT25FeGlzdDohMCxwcmVzZXJ2ZVRpbWVzdGFtcHM6ITB9KSxCKFcpfSkpLmFwcGx5KHRoaXMsYXJn''@;'; put 'put ''dW1lbnRzKX11ZS5leHBvcnRzPWZ1bmN0aW9uIE8oVyxZKXtyZXR1cm4gei5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSw0NjcwOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO2NvbnN0IEk9eSg4OTgxKS5mcm9tUHJvbWlzZSxfPXkoNzc0OSksZz15KDI1MjApLEI9eSgxMzgxKSx3PXkoOTI1Nyku''@;'; put 'put ''cGF0aEV4aXN0cztmdW5jdGlvbiBGKCl7cmV0dXJuKEY9X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKHosTixMPSJ1dGYtOCIpe2NvbnN0IEs9Zy5kaXJuYW1lKHopO3JldHVybih5aWVsZCB3KEspKXx8KHlpZWxkIEIubWtkaXJzKEspKSxfLndyaXRlRmlsZSh6LE4sTCl9KSkuYXBwbHko''@;'; put 'put ''dGhpcyxhcmd1bWVudHMpfXVlLmV4cG9ydHM9e291dHB1dEZpbGU6SShmdW5jdGlvbiBQKHosTil7cmV0dXJuIEYuYXBwbHkodGhpcyxhcmd1bWVudHMpfSksb3V0cHV0RmlsZVN5bmM6ZnVuY3Rpb24gTyh6LC4uLk4pe2NvbnN0IEw9Zy5kaXJuYW1lKHopO18uZXhpc3RzU3luYyhMKXx8Qi5t''@;'; put 'put ''a2RpcnNTeW5jKEwpLF8ud3JpdGVGaWxlU3luYyh6LC4uLk4pfX19LDkyNTc6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7Y29uc3QgST15KDg5ODEpLmZyb21Qcm9taXNlLF89eSg3NzQ5KTt1ZS5leHBvcnRzPXtwYXRoRXhpc3RzOkkoZnVuY3Rpb24gZyhCKXtyZXR1cm4gXy5hY2Nlc3MoQiku''@;'; put 'put ''dGhlbigoKT0+ITApLmNhdGNoKCgpPT4hMSl9KSxwYXRoRXhpc3RzU3luYzpfLmV4aXN0c1N5bmN9fSw0NTQyOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO2NvbnN0IEk9eSg3NyksXz15KDg5ODEpLmZyb21DYWxsYmFjazt1ZS5leHBvcnRzPXtyZW1vdmU6XyhmdW5jdGlvbiBnKHcsUCl7SS5y''@;'; put 'put ''bSh3LHtyZWN1cnNpdmU6ITAsZm9yY2U6ITB9LFApfSkscmVtb3ZlU3luYzpmdW5jdGlvbiBCKHcpe0kucm1TeW5jKHcse3JlY3Vyc2l2ZTohMCxmb3JjZTohMH0pfX19LDI3MzM6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7Y29uc3QgST15KDc3NDkpLF89eSgyNTIwKSxnPXkoODk4MSkuZnJv''@;'; put 'put ''bVByb21pc2U7ZnVuY3Rpb24gRigpe3JldHVybihGPV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihZLHEsZWUsSil7Y29uc3R7c3JjU3RhdDpuZSxkZXN0U3RhdDppZX09eWllbGQgZnVuY3Rpb24gQihZLHEsZWUpe2NvbnN0IEo9ZWUuZGVyZWZlcmVuY2U/bmU9Pkkuc3RhdChuZSx7Ymln''@;'; put 'put ''aW50OiEwfSk6bmU9PkkubHN0YXQobmUse2JpZ2ludDohMH0pO3JldHVybiBQcm9taXNlLmFsbChbSihZKSxKKHEpLmNhdGNoKG5lPT57aWYoIkVOT0VOVCI9PT1uZS5jb2RlKXJldHVybiBudWxsO3Rocm93IG5lfSldKS50aGVuKChbbmUsaWVdKT0+KHtzcmNTdGF0Om5lLGRlc3RTdGF0Omll''@;'; put 'put ''fSkpfShZLHEsSik7aWYoaWUpe2lmKEsobmUsaWUpKXtjb25zdCBsZT1fLmJhc2VuYW1lKFkpLG1lPV8uYmFzZW5hbWUocSk7aWYoIm1vdmUiPT09ZWUmJmxlIT09bWUmJmxlLnRvTG93ZXJDYXNlKCk9PT1tZS50b0xvd2VyQ2FzZSgpKXJldHVybntzcmNTdGF0Om5lLGRlc3RTdGF0OmllLGlz''@;'; put 'put ''Q2hhbmdpbmdDYXNlOiEwfTt0aHJvdyBuZXcgRXJyb3IoIlNvdXJjZSBhbmQgZGVzdGluYXRpb24gbXVzdCBub3QgYmUgdGhlIHNhbWUuIil9aWYobmUuaXNEaXJlY3RvcnkoKSYmIWllLmlzRGlyZWN0b3J5KCkpdGhyb3cgbmV3IEVycm9yKGBDYW5ub3Qgb3ZlcndyaXRlIG5vbi1kaXJlY3Rv''@;'; put 'put ''cnkgJyR7cX0nIHdpdGggZGlyZWN0b3J5ICcke1l9Jy5gKTtpZighbmUuaXNEaXJlY3RvcnkoKSYmaWUuaXNEaXJlY3RvcnkoKSl0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBvdmVyd3JpdGUgZGlyZWN0b3J5ICcke3F9JyB3aXRoIG5vbi1kaXJlY3RvcnkgJyR7WX0nLmApfWlmKG5lLmlzRGly''@;'; put 'put ''ZWN0b3J5KCkmJlUoWSxxKSl0aHJvdyBuZXcgRXJyb3IoVyhZLHEsZWUpKTtyZXR1cm57c3JjU3RhdDpuZSxkZXN0U3RhdDppZX19KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIHooWSxxLGVlLEope3JldHVybiBOLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBOKCl7''@;'; put 'put ''cmV0dXJuKE49X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKFkscSxlZSxKKXtjb25zdCBuZT1fLnJlc29sdmUoXy5kaXJuYW1lKFkpKSxpZT1fLnJlc29sdmUoXy5kaXJuYW1lKGVlKSk7aWYoaWU9PT1uZXx8aWU9PT1fLnBhcnNlKGllKS5yb290KXJldHVybjtsZXQgbGU7dHJ5e2xlPXlp''@;'; put 'put ''ZWxkIEkuc3RhdChpZSx7YmlnaW50OiEwfSl9Y2F0Y2gobWUpe2lmKCJFTk9FTlQiPT09bWUuY29kZSlyZXR1cm47dGhyb3cgbWV9aWYoSyhxLGxlKSl0aHJvdyBuZXcgRXJyb3IoVyhZLGVlLEopKTtyZXR1cm4geihZLHEsaWUsSil9KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9u''@;'; put 'put ''IEsoWSxxKXtyZXR1cm4gcS5pbm8mJnEuZGV2JiZxLmlubz09PVkuaW5vJiZxLmRldj09PVkuZGV2fWZ1bmN0aW9uIFUoWSxxKXtjb25zdCBlZT1fLnJlc29sdmUoWSkuc3BsaXQoXy5zZXApLmZpbHRlcihuZT0+bmUpLEo9Xy5yZXNvbHZlKHEpLnNwbGl0KF8uc2VwKS5maWx0ZXIobmU9Pm5l''@;'; put 'put ''KTtyZXR1cm4gZWUuZXZlcnkoKG5lLGllKT0+SltpZV09PT1uZSl9ZnVuY3Rpb24gVyhZLHEsZWUpe3JldHVybmBDYW5ub3QgJHtlZX0gJyR7WX0nIHRvIGEgc3ViZGlyZWN0b3J5IG9mIGl0c2VsZiwgJyR7cX0nLmB9dWUuZXhwb3J0cz17Y2hlY2tQYXRoczpnKGZ1bmN0aW9uIFAoWSxxLGVl''@;'; put 'put ''LEope3JldHVybiBGLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pLGNoZWNrUGF0aHNTeW5jOmZ1bmN0aW9uIE8oWSxxLGVlLEope2NvbnN0e3NyY1N0YXQ6bmUsZGVzdFN0YXQ6aWV9PWZ1bmN0aW9uIHcoWSxxLGVlKXtsZXQgSjtjb25zdCBuZT1lZS5kZXJlZmVyZW5jZT9sZT0+SS5zdGF0U3lu''@;'; put 'put ''YyhsZSx7YmlnaW50OiEwfSk6bGU9PkkubHN0YXRTeW5jKGxlLHtiaWdpbnQ6ITB9KSxpZT1uZShZKTt0cnl7Sj1uZShxKX1jYXRjaChsZSl7aWYoIkVOT0VOVCI9PT1sZS5jb2RlKXJldHVybntzcmNTdGF0OmllLGRlc3RTdGF0Om51bGx9O3Rocm93IGxlfXJldHVybntzcmNTdGF0OmllLGRl''@;'; put 'put ''c3RTdGF0Okp9fShZLHEsSik7aWYoaWUpe2lmKEsobmUsaWUpKXtjb25zdCBsZT1fLmJhc2VuYW1lKFkpLG1lPV8uYmFzZW5hbWUocSk7aWYoIm1vdmUiPT09ZWUmJmxlIT09bWUmJmxlLnRvTG93ZXJDYXNlKCk9PT1tZS50b0xvd2VyQ2FzZSgpKXJldHVybntzcmNTdGF0Om5lLGRlc3RTdGF0''@;'; put 'put ''OmllLGlzQ2hhbmdpbmdDYXNlOiEwfTt0aHJvdyBuZXcgRXJyb3IoIlNvdXJjZSBhbmQgZGVzdGluYXRpb24gbXVzdCBub3QgYmUgdGhlIHNhbWUuIil9aWYobmUuaXNEaXJlY3RvcnkoKSYmIWllLmlzRGlyZWN0b3J5KCkpdGhyb3cgbmV3IEVycm9yKGBDYW5ub3Qgb3ZlcndyaXRlIG5vbi1k''@;'; put 'put ''aXJlY3RvcnkgJyR7cX0nIHdpdGggZGlyZWN0b3J5ICcke1l9Jy5gKTtpZighbmUuaXNEaXJlY3RvcnkoKSYmaWUuaXNEaXJlY3RvcnkoKSl0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBvdmVyd3JpdGUgZGlyZWN0b3J5ICcke3F9JyB3aXRoIG5vbi1kaXJlY3RvcnkgJyR7WX0nLmApfWlmKG5l''@;'; put 'put ''LmlzRGlyZWN0b3J5KCkmJlUoWSxxKSl0aHJvdyBuZXcgRXJyb3IoVyhZLHEsZWUpKTtyZXR1cm57c3JjU3RhdDpuZSxkZXN0U3RhdDppZX19LGNoZWNrUGFyZW50UGF0aHM6Zyh6KSxjaGVja1BhcmVudFBhdGhzU3luYzpmdW5jdGlvbiBMKFkscSxlZSxKKXtjb25zdCBuZT1fLnJlc29sdmUo''@;'; put 'put ''Xy5kaXJuYW1lKFkpKSxpZT1fLnJlc29sdmUoXy5kaXJuYW1lKGVlKSk7aWYoaWU9PT1uZXx8aWU9PT1fLnBhcnNlKGllKS5yb290KXJldHVybjtsZXQgbGU7dHJ5e2xlPUkuc3RhdFN5bmMoaWUse2JpZ2ludDohMH0pfWNhdGNoKG1lKXtpZigiRU5PRU5UIj09PW1lLmNvZGUpcmV0dXJuO3Ro''@;'; put 'put ''cm93IG1lfWlmKEsocSxsZSkpdGhyb3cgbmV3IEVycm9yKFcoWSxlZSxKKSk7cmV0dXJuIEwoWSxxLGllLEopfSxpc1NyY1N1YmRpcjpVLGFyZUlkZW50aWNhbDpLfX0sMzE4Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO2NvbnN0IEk9eSg3NzQ5KSxfPXkoODk4MSkuZnJvbVByb21pc2U7ZnVu''@;'; put 'put ''Y3Rpb24gQigpe3JldHVybihCPV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihQLEYsTyl7Y29uc3Qgej15aWVsZCBJLm9wZW4oUCwicisiKTtsZXQgTj1udWxsO3RyeXt5aWVsZCBJLmZ1dGltZXMoeixGLE8pfWZpbmFsbHl7dHJ5e3lpZWxkIEkuY2xvc2Uoeil9Y2F0Y2goTCl7Tj1MfX1p''@;'; put 'put ''ZihOKXRocm93IE59KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfXVlLmV4cG9ydHM9e3V0aW1lc01pbGxpczpfKGZ1bmN0aW9uIGcoUCxGLE8pe3JldHVybiBCLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pLHV0aW1lc01pbGxpc1N5bmM6ZnVuY3Rpb24gdyhQLEYsTyl7Y29uc3Qgej1JLm9wZW5T''@;'; put 'put ''eW5jKFAsInIrIik7cmV0dXJuIEkuZnV0aW1lc1N5bmMoeixGLE8pLEkuY2xvc2VTeW5jKHopfX19LDc2NDg6dWU9PnsidXNlIHN0cmljdCI7dmFyIHk9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxJPU1hdGgubWF4LGc9ZnVuY3Rpb24oRixPKXtmb3IodmFyIHo9W10sTj0wO048Ri5sZW5n''@;'; put 'put ''dGg7Tis9MSl6W05dPUZbTl07Zm9yKHZhciBMPTA7TDxPLmxlbmd0aDtMKz0xKXpbTCtGLmxlbmd0aF09T1tMXTtyZXR1cm4gen07dWUuZXhwb3J0cz1mdW5jdGlvbihGKXt2YXIgTz10aGlzO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBPfHwiW29iamVjdCBGdW5jdGlvbl0iIT09eS5hcHBseShP''@;'; put 'put ''KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbi5wcm90b3R5cGUuYmluZCBjYWxsZWQgb24gaW5jb21wYXRpYmxlICIrTyk7Zm9yKHZhciBOLHo9ZnVuY3Rpb24oRixPKXtmb3IodmFyIHo9W10sTj0xLEw9MDtOPEYubGVuZ3RoO04rPTEsTCs9MSl6W0xdPUZbTl07cmV0dXJuIHp9KGFy''@;'; put 'put ''Z3VtZW50cyksSz1JKDAsTy5sZW5ndGgtei5sZW5ndGgpLFU9W10sVz0wO1c8SztXKyspVVtXXT0iJCIrVztpZihOPUZ1bmN0aW9uKCJiaW5kZXIiLCJyZXR1cm4gZnVuY3Rpb24gKCIrZnVuY3Rpb24oUCxGKXtmb3IodmFyIE89IiIsej0wO3o8UC5sZW5ndGg7eis9MSlPKz1QW3pdLHorMTxQ''@;'; put 'put ''Lmxlbmd0aCYmKE8rPSIsIik7cmV0dXJuIE99KFUpKyIpeyByZXR1cm4gYmluZGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKTsgfSIpKGZ1bmN0aW9uKCl7aWYodGhpcyBpbnN0YW5jZW9mIE4pe3ZhciBxPU8uYXBwbHkodGhpcyxnKHosYXJndW1lbnRzKSk7cmV0dXJuIE9iamVjdChxKT09PXE/''@;'; put 'put ''cTp0aGlzfXJldHVybiBPLmFwcGx5KEYsZyh6LGFyZ3VtZW50cykpfSksTy5wcm90b3R5cGUpe3ZhciBZPWZ1bmN0aW9uKCl7fTtZLnByb3RvdHlwZT1PLnByb3RvdHlwZSxOLnByb3RvdHlwZT1uZXcgWSxZLnByb3RvdHlwZT1udWxsfXJldHVybiBOfX0sODYxMjoodWUsWCx5KT0+eyJ1c2Ug''@;'; put 'put ''c3RyaWN0Ijt2YXIgST15KDc2NDgpO3VlLmV4cG9ydHM9RnVuY3Rpb24ucHJvdG90eXBlLmJpbmR8fEl9LDIxMDoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgSSxfPXkoODg5MiksZz15KDE2NDgpLEI9eSgzOTgxKSx3PXkoNDcyNiksUD15KDY3MTIpLEY9eSgzNDY0KSxPPXkoNDQ1Myks''@;'; put 'put ''ej15KDM5MTUpLE49eSg5NzM4KSxMPXkoNjMyOSksSz15KDIyNjQpLFU9eSg1NzMwKSxXPXkoNzA3KSxZPXkoMzg2MikscT15KDk1NTApLGVlPUZ1bmN0aW9uLEo9ZnVuY3Rpb24odmUpe3RyeXtyZXR1cm4gZWUoJyJ1c2Ugc3RyaWN0IjsgcmV0dXJuICgnK3ZlKyIpLmNvbnN0cnVjdG9yOyIp''@;'; put 'put ''KCl9Y2F0Y2h7fX0sbmU9eSg3Mjk2KSxpZT15KDQ0MjkpLGxlPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IE99LG1lPW5lP2Z1bmN0aW9uKCl7dHJ5e3JldHVybiBsZX1jYXRjaHt0cnl7cmV0dXJuIG5lKGFyZ3VtZW50cywiY2FsbGVlIikuZ2V0fWNhdGNoe3JldHVybiBsZX19fSgpOmxlLF9lPXko''@;'; put 'put ''MTQwNSkoKSxUZT15KDE2MTgpLFNlPXkoODg5OSksamU9eSg0NDMpLFY9eSgxNzY4KSxwPXkoODkyOCksYj17fSx4PXR5cGVvZiBVaW50OEFycmF5PiJ1Inx8IVRlP0k6VGUoVWludDhBcnJheSksQz17X19wcm90b19fOm51bGwsIiVBZ2dyZWdhdGVFcnJvciUiOnR5cGVvZiBBZ2dyZWdhdGVF''@;'; put 'put ''cnJvcj4idSI/STpBZ2dyZWdhdGVFcnJvciwiJUFycmF5JSI6QXJyYXksIiVBcnJheUJ1ZmZlciUiOnR5cGVvZiBBcnJheUJ1ZmZlcj4idSI/STpBcnJheUJ1ZmZlciwiJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlIjpfZSYmVGU/VGUoW11bU3ltYm9sLml0ZXJhdG9yXSgpKTpJLCIlQXN5bmNG''@;'; put 'put ''cm9tU3luY0l0ZXJhdG9yUHJvdG90eXBlJSI6SSwiJUFzeW5jRnVuY3Rpb24lIjpiLCIlQXN5bmNHZW5lcmF0b3IlIjpiLCIlQXN5bmNHZW5lcmF0b3JGdW5jdGlvbiUiOmIsIiVBc3luY0l0ZXJhdG9yUHJvdG90eXBlJSI6YiwiJUF0b21pY3MlIjp0eXBlb2YgQXRvbWljcz4idSI/STpBdG9t''@;'; put 'put ''aWNzLCIlQmlnSW50JSI6dHlwZW9mIEJpZ0ludD4idSI/STpCaWdJbnQsIiVCaWdJbnQ2NEFycmF5JSI6dHlwZW9mIEJpZ0ludDY0QXJyYXk+InUiP0k6QmlnSW50NjRBcnJheSwiJUJpZ1VpbnQ2NEFycmF5JSI6dHlwZW9mIEJpZ1VpbnQ2NEFycmF5PiJ1Ij9JOkJpZ1VpbnQ2NEFycmF5LCIl''@;'; put 'put ''Qm9vbGVhbiUiOkJvb2xlYW4sIiVEYXRhVmlldyUiOnR5cGVvZiBEYXRhVmlldz4idSI/STpEYXRhVmlldywiJURhdGUlIjpEYXRlLCIlZGVjb2RlVVJJJSI6ZGVjb2RlVVJJLCIlZGVjb2RlVVJJQ29tcG9uZW50JSI6ZGVjb2RlVVJJQ29tcG9uZW50LCIlZW5jb2RlVVJJJSI6ZW5jb2RlVVJJ''@;'; put 'put ''LCIlZW5jb2RlVVJJQ29tcG9uZW50JSI6ZW5jb2RlVVJJQ29tcG9uZW50LCIlRXJyb3IlIjpnLCIlZXZhbCUiOmV2YWwsIiVFdmFsRXJyb3IlIjpCLCIlRmxvYXQxNkFycmF5JSI6dHlwZW9mIEZsb2F0MTZBcnJheT4idSI/STpGbG9hdDE2QXJyYXksIiVGbG9hdDMyQXJyYXklIjp0eXBlb2Yg''@;'; put 'put ''RmxvYXQzMkFycmF5PiJ1Ij9JOkZsb2F0MzJBcnJheSwiJUZsb2F0NjRBcnJheSUiOnR5cGVvZiBGbG9hdDY0QXJyYXk+InUiP0k6RmxvYXQ2NEFycmF5LCIlRmluYWxpemF0aW9uUmVnaXN0cnklIjp0eXBlb2YgRmluYWxpemF0aW9uUmVnaXN0cnk+InUiP0k6RmluYWxpemF0aW9uUmVnaXN0''@;'; put 'put ''cnksIiVGdW5jdGlvbiUiOmVlLCIlR2VuZXJhdG9yRnVuY3Rpb24lIjpiLCIlSW50OEFycmF5JSI6dHlwZW9mIEludDhBcnJheT4idSI/STpJbnQ4QXJyYXksIiVJbnQxNkFycmF5JSI6dHlwZW9mIEludDE2QXJyYXk+InUiP0k6SW50MTZBcnJheSwiJUludDMyQXJyYXklIjp0eXBlb2YgSW50''@;'; put 'put ''MzJBcnJheT4idSI/STpJbnQzMkFycmF5LCIlaXNGaW5pdGUlIjppc0Zpbml0ZSwiJWlzTmFOJSI6aXNOYU4sIiVJdGVyYXRvclByb3RvdHlwZSUiOl9lJiZUZT9UZShUZShbXVtTeW1ib2wuaXRlcmF0b3JdKCkpKTpJLCIlSlNPTiUiOiJvYmplY3QiPT10eXBlb2YgSlNPTj9KU09OOkksIiVN''@;'; put 'put ''YXAlIjp0eXBlb2YgTWFwPiJ1Ij9JOk1hcCwiJU1hcEl0ZXJhdG9yUHJvdG90eXBlJSI6dHlwZW9mIE1hcD4idSJ8fCFfZXx8IVRlP0k6VGUoKG5ldyBNYXApW1N5bWJvbC5pdGVyYXRvcl0oKSksIiVNYXRoJSI6TWF0aCwiJU51bWJlciUiOk51bWJlciwiJU9iamVjdCUiOl8sIiVPYmplY3Qu''@;'; put 'put ''Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yJSI6bmUsIiVwYXJzZUZsb2F0JSI6cGFyc2VGbG9hdCwiJXBhcnNlSW50JSI6cGFyc2VJbnQsIiVQcm9taXNlJSI6dHlwZW9mIFByb21pc2U+InUiP0k6UHJvbWlzZSwiJVByb3h5JSI6dHlwZW9mIFByb3h5PiJ1Ij9JOlByb3h5LCIlUmFuZ2VFcnJv''@;'; put 'put ''ciUiOncsIiVSZWZlcmVuY2VFcnJvciUiOlAsIiVSZWZsZWN0JSI6dHlwZW9mIFJlZmxlY3Q+InUiP0k6UmVmbGVjdCwiJVJlZ0V4cCUiOlJlZ0V4cCwiJVNldCUiOnR5cGVvZiBTZXQ+InUiP0k6U2V0LCIlU2V0SXRlcmF0b3JQcm90b3R5cGUlIjp0eXBlb2YgU2V0PiJ1Inx8IV9lfHwhVGU/''@;'; put 'put ''STpUZSgobmV3IFNldClbU3ltYm9sLml0ZXJhdG9yXSgpKSwiJVNoYXJlZEFycmF5QnVmZmVyJSI6dHlwZW9mIFNoYXJlZEFycmF5QnVmZmVyPiJ1Ij9JOlNoYXJlZEFycmF5QnVmZmVyLCIlU3RyaW5nJSI6U3RyaW5nLCIlU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUlIjpfZSYmVGU/VGUoIiJb''@;'; put 'put ''U3ltYm9sLml0ZXJhdG9yXSgpKTpJLCIlU3ltYm9sJSI6X2U/U3ltYm9sOkksIiVTeW50YXhFcnJvciUiOkYsIiVUaHJvd1R5cGVFcnJvciUiOm1lLCIlVHlwZWRBcnJheSUiOngsIiVUeXBlRXJyb3IlIjpPLCIlVWludDhBcnJheSUiOnR5cGVvZiBVaW50OEFycmF5PiJ1Ij9JOlVpbnQ4QXJy''@;'; put 'put ''YXksIiVVaW50OENsYW1wZWRBcnJheSUiOnR5cGVvZiBVaW50OENsYW1wZWRBcnJheT4idSI/STpVaW50OENsYW1wZWRBcnJheSwiJVVpbnQxNkFycmF5JSI6dHlwZW9mIFVpbnQxNkFycmF5PiJ1Ij9JOlVpbnQxNkFycmF5LCIlVWludDMyQXJyYXklIjp0eXBlb2YgVWludDMyQXJyYXk+InUi''@;'; put 'put ''P0k6VWludDMyQXJyYXksIiVVUklFcnJvciUiOnosIiVXZWFrTWFwJSI6dHlwZW9mIFdlYWtNYXA+InUiP0k6V2Vha01hcCwiJVdlYWtSZWYlIjp0eXBlb2YgV2Vha1JlZj4idSI/STpXZWFrUmVmLCIlV2Vha1NldCUiOnR5cGVvZiBXZWFrU2V0PiJ1Ij9JOldlYWtTZXQsIiVGdW5jdGlvbi5w''@;'; put 'put ''cm90b3R5cGUuY2FsbCUiOnAsIiVGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHklIjpWLCIlT2JqZWN0LmRlZmluZVByb3BlcnR5JSI6aWUsIiVPYmplY3QuZ2V0UHJvdG90eXBlT2YlIjpTZSwiJU1hdGguYWJzJSI6TiwiJU1hdGguZmxvb3IlIjpMLCIlTWF0aC5tYXglIjpLLCIlTWF0aC5taW4l''@;'; put 'put ''IjpVLCIlTWF0aC5wb3clIjpXLCIlTWF0aC5yb3VuZCUiOlksIiVNYXRoLnNpZ24lIjpxLCIlUmVmbGVjdC5nZXRQcm90b3R5cGVPZiUiOmplfTtpZihUZSl0cnl7bnVsbC5lcnJvcn1jYXRjaCh2ZSl7dmFyIFQ9VGUoVGUodmUpKTtDWyIlRXJyb3IucHJvdG90eXBlJSJdPVR9dmFyIEg9ZnVu''@;'; put 'put ''Y3Rpb24gdmUoWGUpe3ZhciB6ZTtpZigiJUFzeW5jRnVuY3Rpb24lIj09PVhlKXplPUooImFzeW5jIGZ1bmN0aW9uICgpIHt9Iik7ZWxzZSBpZigiJUdlbmVyYXRvckZ1bmN0aW9uJSI9PT1YZSl6ZT1KKCJmdW5jdGlvbiogKCkge30iKTtlbHNlIGlmKCIlQXN5bmNHZW5lcmF0b3JGdW5jdGlv''@;'; put 'put ''biUiPT09WGUpemU9SigiYXN5bmMgZnVuY3Rpb24qICgpIHt9Iik7ZWxzZSBpZigiJUFzeW5jR2VuZXJhdG9yJSI9PT1YZSl7dmFyIERlPXZlKCIlQXN5bmNHZW5lcmF0b3JGdW5jdGlvbiUiKTtEZSYmKHplPURlLnByb3RvdHlwZSl9ZWxzZSBpZigiJUFzeW5jSXRlcmF0b3JQcm90b3R5cGUl''@;'; put 'put ''Ij09PVhlKXt2YXIgRmU9dmUoIiVBc3luY0dlbmVyYXRvciUiKTtGZSYmVGUmJih6ZT1UZShGZS5wcm90b3R5cGUpKX1yZXR1cm4gQ1tYZV09emUsemV9LGo9e19fcHJvdG9fXzpudWxsLCIlQXJyYXlCdWZmZXJQcm90b3R5cGUlIjpbIkFycmF5QnVmZmVyIiwicHJvdG90eXBlIl0sIiVBcnJh''@;'; put 'put ''eVByb3RvdHlwZSUiOlsiQXJyYXkiLCJwcm90b3R5cGUiXSwiJUFycmF5UHJvdG9fZW50cmllcyUiOlsiQXJyYXkiLCJwcm90b3R5cGUiLCJlbnRyaWVzIl0sIiVBcnJheVByb3RvX2ZvckVhY2glIjpbIkFycmF5IiwicHJvdG90eXBlIiwiZm9yRWFjaCJdLCIlQXJyYXlQcm90b19rZXlzJSI6''@;'; put 'put ''WyJBcnJheSIsInByb3RvdHlwZSIsImtleXMiXSwiJUFycmF5UHJvdG9fdmFsdWVzJSI6WyJBcnJheSIsInByb3RvdHlwZSIsInZhbHVlcyJdLCIlQXN5bmNGdW5jdGlvblByb3RvdHlwZSUiOlsiQXN5bmNGdW5jdGlvbiIsInByb3RvdHlwZSJdLCIlQXN5bmNHZW5lcmF0b3IlIjpbIkFzeW5j''@;'; put 'put ''R2VuZXJhdG9yRnVuY3Rpb24iLCJwcm90b3R5cGUiXSwiJUFzeW5jR2VuZXJhdG9yUHJvdG90eXBlJSI6WyJBc3luY0dlbmVyYXRvckZ1bmN0aW9uIiwicHJvdG90eXBlIiwicHJvdG90eXBlIl0sIiVCb29sZWFuUHJvdG90eXBlJSI6WyJCb29sZWFuIiwicHJvdG90eXBlIl0sIiVEYXRhVmll''@;'; put 'put ''d1Byb3RvdHlwZSUiOlsiRGF0YVZpZXciLCJwcm90b3R5cGUiXSwiJURhdGVQcm90b3R5cGUlIjpbIkRhdGUiLCJwcm90b3R5cGUiXSwiJUVycm9yUHJvdG90eXBlJSI6WyJFcnJvciIsInByb3RvdHlwZSJdLCIlRXZhbEVycm9yUHJvdG90eXBlJSI6WyJFdmFsRXJyb3IiLCJwcm90b3R5cGUi''@;'; put 'put ''XSwiJUZsb2F0MzJBcnJheVByb3RvdHlwZSUiOlsiRmxvYXQzMkFycmF5IiwicHJvdG90eXBlIl0sIiVGbG9hdDY0QXJyYXlQcm90b3R5cGUlIjpbIkZsb2F0NjRBcnJheSIsInByb3RvdHlwZSJdLCIlRnVuY3Rpb25Qcm90b3R5cGUlIjpbIkZ1bmN0aW9uIiwicHJvdG90eXBlIl0sIiVHZW5l''@;'; put 'put ''cmF0b3IlIjpbIkdlbmVyYXRvckZ1bmN0aW9uIiwicHJvdG90eXBlIl0sIiVHZW5lcmF0b3JQcm90b3R5cGUlIjpbIkdlbmVyYXRvckZ1bmN0aW9uIiwicHJvdG90eXBlIiwicHJvdG90eXBlIl0sIiVJbnQ4QXJyYXlQcm90b3R5cGUlIjpbIkludDhBcnJheSIsInByb3RvdHlwZSJdLCIlSW50''@;'; put 'put ''MTZBcnJheVByb3RvdHlwZSUiOlsiSW50MTZBcnJheSIsInByb3RvdHlwZSJdLCIlSW50MzJBcnJheVByb3RvdHlwZSUiOlsiSW50MzJBcnJheSIsInByb3RvdHlwZSJdLCIlSlNPTlBhcnNlJSI6WyJKU09OIiwicGFyc2UiXSwiJUpTT05TdHJpbmdpZnklIjpbIkpTT04iLCJzdHJpbmdpZnki''@;'; put 'put ''XSwiJU1hcFByb3RvdHlwZSUiOlsiTWFwIiwicHJvdG90eXBlIl0sIiVOdW1iZXJQcm90b3R5cGUlIjpbIk51bWJlciIsInByb3RvdHlwZSJdLCIlT2JqZWN0UHJvdG90eXBlJSI6WyJPYmplY3QiLCJwcm90b3R5cGUiXSwiJU9ialByb3RvX3RvU3RyaW5nJSI6WyJPYmplY3QiLCJwcm90b3R5''@;'; put 'put ''cGUiLCJ0b1N0cmluZyJdLCIlT2JqUHJvdG9fdmFsdWVPZiUiOlsiT2JqZWN0IiwicHJvdG90eXBlIiwidmFsdWVPZiJdLCIlUHJvbWlzZVByb3RvdHlwZSUiOlsiUHJvbWlzZSIsInByb3RvdHlwZSJdLCIlUHJvbWlzZVByb3RvX3RoZW4lIjpbIlByb21pc2UiLCJwcm90b3R5cGUiLCJ0aGVu''@;'; put 'put ''Il0sIiVQcm9taXNlX2FsbCUiOlsiUHJvbWlzZSIsImFsbCJdLCIlUHJvbWlzZV9yZWplY3QlIjpbIlByb21pc2UiLCJyZWplY3QiXSwiJVByb21pc2VfcmVzb2x2ZSUiOlsiUHJvbWlzZSIsInJlc29sdmUiXSwiJVJhbmdlRXJyb3JQcm90b3R5cGUlIjpbIlJhbmdlRXJyb3IiLCJwcm90b3R5''@;'; put 'put ''cGUiXSwiJVJlZmVyZW5jZUVycm9yUHJvdG90eXBlJSI6WyJSZWZlcmVuY2VFcnJvciIsInByb3RvdHlwZSJdLCIlUmVnRXhwUHJvdG90eXBlJSI6WyJSZWdFeHAiLCJwcm90b3R5cGUiXSwiJVNldFByb3RvdHlwZSUiOlsiU2V0IiwicHJvdG90eXBlIl0sIiVTaGFyZWRBcnJheUJ1ZmZlclBy''@;'; put 'put ''b3RvdHlwZSUiOlsiU2hhcmVkQXJyYXlCdWZmZXIiLCJwcm90b3R5cGUiXSwiJVN0cmluZ1Byb3RvdHlwZSUiOlsiU3RyaW5nIiwicHJvdG90eXBlIl0sIiVTeW1ib2xQcm90b3R5cGUlIjpbIlN5bWJvbCIsInByb3RvdHlwZSJdLCIlU3ludGF4RXJyb3JQcm90b3R5cGUlIjpbIlN5bnRheEVy''@;'; put 'put ''cm9yIiwicHJvdG90eXBlIl0sIiVUeXBlZEFycmF5UHJvdG90eXBlJSI6WyJUeXBlZEFycmF5IiwicHJvdG90eXBlIl0sIiVUeXBlRXJyb3JQcm90b3R5cGUlIjpbIlR5cGVFcnJvciIsInByb3RvdHlwZSJdLCIlVWludDhBcnJheVByb3RvdHlwZSUiOlsiVWludDhBcnJheSIsInByb3RvdHlw''@;'; put 'put ''ZSJdLCIlVWludDhDbGFtcGVkQXJyYXlQcm90b3R5cGUlIjpbIlVpbnQ4Q2xhbXBlZEFycmF5IiwicHJvdG90eXBlIl0sIiVVaW50MTZBcnJheVByb3RvdHlwZSUiOlsiVWludDE2QXJyYXkiLCJwcm90b3R5cGUiXSwiJVVpbnQzMkFycmF5UHJvdG90eXBlJSI6WyJVaW50MzJBcnJheSIsInBy''@;'; put 'put ''b3RvdHlwZSJdLCIlVVJJRXJyb3JQcm90b3R5cGUlIjpbIlVSSUVycm9yIiwicHJvdG90eXBlIl0sIiVXZWFrTWFwUHJvdG90eXBlJSI6WyJXZWFrTWFwIiwicHJvdG90eXBlIl0sIiVXZWFrU2V0UHJvdG90eXBlJSI6WyJXZWFrU2V0IiwicHJvdG90eXBlIl19LEU9eSg4NjEyKSxtPXkoODgy''@;'; put 'put ''NCksQT1FLmNhbGwocCxBcnJheS5wcm90b3R5cGUuY29uY2F0KSxhZT1FLmNhbGwoVixBcnJheS5wcm90b3R5cGUuc3BsaWNlKSx0ZT1FLmNhbGwocCxTdHJpbmcucHJvdG90eXBlLnJlcGxhY2UpLHNlPUUuY2FsbChwLFN0cmluZy5wcm90b3R5cGUuc2xpY2UpLHdlPUUuY2FsbChwLFJlZ0V4''@;'; put 'put ''cC5wcm90b3R5cGUuZXhlYyksVWU9L1teJS5bXF1dK3xcWyg/OigtP1xkKyg/OlwuXGQrKT8pfChbIiddKSgoPzooPyFcMilbXlxcXXxcXC4pKj8pXDIpXF18KD89KD86XC58XFtcXSkoPzpcLnxcW1xdfCUkKSkvZyxKZT0vXFwoXFwpPy9nLHhlPWZ1bmN0aW9uKFhlLHplKXt2YXIgRmUsRGU9''@;'; put 'put ''WGU7aWYobShqLERlKSYmKERlPSIlIisoRmU9altEZV0pWzBdKyIlIiksbShDLERlKSl7dmFyIE9lPUNbRGVdO2lmKE9lPT09YiYmKE9lPUgoRGUpKSx0eXBlb2YgT2U+InUiJiYhemUpdGhyb3cgbmV3IE8oImludHJpbnNpYyAiK1hlKyIgZXhpc3RzLCBidXQgaXMgbm90IGF2YWlsYWJsZS4g''@;'; put 'put ''UGxlYXNlIGZpbGUgYW4gaXNzdWUhIik7cmV0dXJue2FsaWFzOkZlLG5hbWU6RGUsdmFsdWU6T2V9fXRocm93IG5ldyBGKCJpbnRyaW5zaWMgIitYZSsiIGRvZXMgbm90IGV4aXN0ISIpfTt1ZS5leHBvcnRzPWZ1bmN0aW9uKFhlLHplKXtpZigic3RyaW5nIiE9dHlwZW9mIFhlfHwwPT09WGUu''@;'; put 'put ''bGVuZ3RoKXRocm93IG5ldyBPKCJpbnRyaW5zaWMgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZyIpO2lmKGFyZ3VtZW50cy5sZW5ndGg+MSYmImJvb2xlYW4iIT10eXBlb2YgemUpdGhyb3cgbmV3IE8oJyJhbGxvd01pc3NpbmciIGFyZ3VtZW50IG11c3QgYmUgYSBib29sZWFuJyk7''@;'; put 'put ''aWYobnVsbD09PXdlKC9eJT9bXiVdKiU/JC8sWGUpKXRocm93IG5ldyBGKCJgJWAgbWF5IG5vdCBiZSBwcmVzZW50IGFueXdoZXJlIGJ1dCBhdCB0aGUgYmVnaW5uaW5nIGFuZCBlbmQgb2YgdGhlIGludHJpbnNpYyBuYW1lIik7dmFyIERlPWZ1bmN0aW9uKFhlKXt2YXIgemU9c2UoWGUsMCwx''@;'; put 'put ''KSxEZT1zZShYZSwtMSk7aWYoIiUiPT09emUmJiIlIiE9PURlKXRocm93IG5ldyBGKCJpbnZhbGlkIGludHJpbnNpYyBzeW50YXgsIGV4cGVjdGVkIGNsb3NpbmcgYCVgIik7aWYoIiUiPT09RGUmJiIlIiE9PXplKXRocm93IG5ldyBGKCJpbnZhbGlkIGludHJpbnNpYyBzeW50YXgsIGV4cGVj''@;'; put 'put ''dGVkIG9wZW5pbmcgYCVgIik7dmFyIEZlPVtdO3JldHVybiB0ZShYZSxVZSxmdW5jdGlvbihPZSxJZSxWZSxrZSl7RmVbRmUubGVuZ3RoXT1WZT90ZShrZSxKZSwiJDEiKTpJZXx8T2V9KSxGZX0oWGUpLEZlPURlLmxlbmd0aD4wP0RlWzBdOiIiLE9lPXhlKCIlIitGZSsiJSIsemUpLEllPU9l''@;'; put 'put ''Lm5hbWUsVmU9T2UudmFsdWUsa2U9ITEsQWU9T2UuYWxpYXM7QWUmJihGZT1BZVswXSxhZShEZSxBKFswLDFdLEFlKSkpO2Zvcih2YXIgX3Q9MSxudD0hMDtfdDxEZS5sZW5ndGg7X3QrPTEpe3ZhciBRZT1EZVtfdF0sdW49c2UoUWUsMCwxKSx5dD1zZShRZSwtMSk7aWYoKCciJz09PXVufHwi''@;'; put 'put ''JyI9PT11bnx8ImAiPT09dW58fCciJz09PXl0fHwiJyI9PT15dHx8ImAiPT09eXQpJiZ1biE9PXl0KXRocm93IG5ldyBGKCJwcm9wZXJ0eSBuYW1lcyB3aXRoIHF1b3RlcyBtdXN0IGhhdmUgbWF0Y2hpbmcgcXVvdGVzIik7aWYoKCJjb25zdHJ1Y3RvciI9PT1RZXx8IW50KSYmKGtlPSEwKSxt''@;'; put 'put ''KEMsSWU9IiUiKyhGZSs9Ii4iK1FlKSsiJSIpKVZlPUNbSWVdO2Vsc2UgaWYobnVsbCE9VmUpe2lmKCEoUWUgaW4gVmUpKXtpZighemUpdGhyb3cgbmV3IE8oImJhc2UgaW50cmluc2ljIGZvciAiK1hlKyIgZXhpc3RzLCBidXQgdGhlIHByb3BlcnR5IGlzIG5vdCBhdmFpbGFibGUuIik7cmV0''@;'; put 'put ''dXJufWlmKG5lJiZfdCsxPj1EZS5sZW5ndGgpe3ZhciBNdD1uZShWZSxRZSk7VmU9KG50PSEhTXQpJiYiZ2V0ImluIE10JiYhKCJvcmlnaW5hbFZhbHVlImluIE10LmdldCk/TXQuZ2V0OlZlW1FlXX1lbHNlIG50PW0oVmUsUWUpLFZlPVZlW1FlXTtudCYmIWtlJiYoQ1tJZV09VmUpfX1yZXR1''@;'; put 'put ''cm4gVmV9fSw4ODk5Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoODg5Mik7dWUuZXhwb3J0cz1JLmdldFByb3RvdHlwZU9mfHxudWxsfSw0NDM6dWU9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz10eXBlb2YgUmVmbGVjdDwidSImJlJlZmxlY3QuZ2V0UHJvdG90eXBlT2Z8fG51''@;'; put 'put ''bGx9LDE2MTg6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg0NDMpLF89eSg4ODk5KSxnPXkoNjUwNCk7dWUuZXhwb3J0cz1JP2Z1bmN0aW9uKHcpe3JldHVybiBJKHcpfTpfP2Z1bmN0aW9uKHcpe2lmKCF3fHwib2JqZWN0IiE9dHlwZW9mIHcmJiJmdW5jdGlvbiIhPXR5cGVvZiB3''@;'; put 'put ''KXRocm93IG5ldyBUeXBlRXJyb3IoImdldFByb3RvOiBub3QgYW4gb2JqZWN0Iik7cmV0dXJuIF8odyl9Omc/ZnVuY3Rpb24odyl7cmV0dXJuIGcodyl9Om51bGx9LDY5MDp1ZT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3J9LDcyOTY6''@;'; put 'put ''KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg2OTApO2lmKEkpdHJ5e0koW10sImxlbmd0aCIpfWNhdGNoe0k9bnVsbH11ZS5leHBvcnRzPUl9LDY0NTg6dWU9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz1mdW5jdGlvbiB5KEkpe2lmKG51bGw9PT1JfHwib2JqZWN0IiE9dHlwZW9m''@;'; put 'put ''IEkpcmV0dXJuIEk7aWYoSSBpbnN0YW5jZW9mIE9iamVjdCl2YXIgXz17X19wcm90b19fOlgoSSl9O2Vsc2UgXz1PYmplY3QuY3JlYXRlKG51bGwpO3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhJKS5mb3JFYWNoKGZ1bmN0aW9uKGcpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShf''@;'; put 'put ''LGcsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihJLGcpKX0pLF99O3ZhciBYPU9iamVjdC5nZXRQcm90b3R5cGVPZnx8ZnVuY3Rpb24oSSl7cmV0dXJuIEkuX19wcm90b19ffX0sNzc6KHVlLFgseSk9Pnt2YXIgTyx6LEk9eSg0MTU1KSxfPXkoNTEwOCksZz15KDU0NDMpLEI9eSgy''@;'; put 'put ''MTYxKSx3PXkoODUyMCksUD15KDY0NTgpLEY9eSg5NTM5KTtmdW5jdGlvbiBMKG5lLGllKXtPYmplY3QuZGVmaW5lUHJvcGVydHkobmUsTyx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGllfX0pfSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wuZm9y''@;'; put 'put ''PyhPPVN5bWJvbC5mb3IoImdyYWNlZnVsLWZzLnF1ZXVlIiksej1TeW1ib2wuZm9yKCJncmFjZWZ1bC1mcy5wcmV2aW91cyIpKTooTz0iX19fZ3JhY2VmdWwtZnMucXVldWUiLHo9Il9fX2dyYWNlZnVsLWZzLnByZXZpb3VzIik7dmFyIHEsSz1mdW5jdGlvbiBOKCl7fTtmdW5jdGlvbiBXKG5l''@;'; put 'put ''KXtCKG5lKSxuZS5ncmFjZWZ1bGlmeT1XLG5lLmNyZWF0ZVJlYWRTdHJlYW09ZnVuY3Rpb24gc2Uob3QseGUpe3JldHVybiBuZXcgbmUuUmVhZFN0cmVhbShvdCx4ZSl9LG5lLmNyZWF0ZVdyaXRlU3RyZWFtPWZ1bmN0aW9uIHdlKG90LHhlKXtyZXR1cm4gbmV3IG5lLldyaXRlU3RyZWFtKG90''@;'; put 'put ''LHhlKX07dmFyIGllPW5lLnJlYWRGaWxlO25lLnJlYWRGaWxlPWZ1bmN0aW9uIGxlKG90LHhlLHZlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgeGUmJih2ZT14ZSx4ZT1udWxsKSxmdW5jdGlvbiBYZSh6ZSxEZSxGZSxPZSl7cmV0dXJuIGllKHplLERlLGZ1bmN0aW9uKEllKXshSWV8fCJF''@;'; put 'put ''TUZJTEUiIT09SWUuY29kZSYmIkVORklMRSIhPT1JZS5jb2RlPyJmdW5jdGlvbiI9PXR5cGVvZiBGZSYmRmUuYXBwbHkodGhpcyxhcmd1bWVudHMpOlkoW1hlLFt6ZSxEZSxGZV0sSWUsT2V8fERhdGUubm93KCksRGF0ZS5ub3coKV0pfSl9KG90LHhlLHZlKX07dmFyIG1lPW5lLndyaXRlRmls''@;'; put 'put ''ZTtuZS53cml0ZUZpbGU9ZnVuY3Rpb24gX2Uob3QseGUsdmUsWGUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB2ZSYmKFhlPXZlLHZlPW51bGwpLGZ1bmN0aW9uIHplKERlLEZlLE9lLEllLFZlKXtyZXR1cm4gbWUoRGUsRmUsT2UsZnVuY3Rpb24oa2UpeyFrZXx8IkVNRklMRSIhPT1rZS5j''@;'; put 'put ''b2RlJiYiRU5GSUxFIiE9PWtlLmNvZGU/ImZ1bmN0aW9uIj09dHlwZW9mIEllJiZJZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6WShbemUsW0RlLEZlLE9lLEllXSxrZSxWZXx8RGF0ZS5ub3coKSxEYXRlLm5vdygpXSl9KX0ob3QseGUsdmUsWGUpfTt2YXIgVGU9bmUuYXBwZW5kRmlsZTtUZSYm''@;'; put 'put ''KG5lLmFwcGVuZEZpbGU9ZnVuY3Rpb24gU2Uob3QseGUsdmUsWGUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB2ZSYmKFhlPXZlLHZlPW51bGwpLGZ1bmN0aW9uIHplKERlLEZlLE9lLEllLFZlKXtyZXR1cm4gVGUoRGUsRmUsT2UsZnVuY3Rpb24oa2UpeyFrZXx8IkVNRklMRSIhPT1rZS5j''@;'; put 'put ''b2RlJiYiRU5GSUxFIiE9PWtlLmNvZGU/ImZ1bmN0aW9uIj09dHlwZW9mIEllJiZJZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6WShbemUsW0RlLEZlLE9lLEllXSxrZSxWZXx8RGF0ZS5ub3coKSxEYXRlLm5vdygpXSl9KX0ob3QseGUsdmUsWGUpfSk7dmFyIGplPW5lLmNvcHlGaWxlO2plJiYo''@;'; put 'put ''bmUuY29weUZpbGU9ZnVuY3Rpb24gVihvdCx4ZSx2ZSxYZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHZlJiYoWGU9dmUsdmU9MCksZnVuY3Rpb24gemUoRGUsRmUsT2UsSWUsVmUpe3JldHVybiBqZShEZSxGZSxPZSxmdW5jdGlvbihrZSl7IWtlfHwiRU1GSUxFIiE9PWtlLmNvZGUmJiJF''@;'; put 'put ''TkZJTEUiIT09a2UuY29kZT8iZnVuY3Rpb24iPT10eXBlb2YgSWUmJkllLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpZKFt6ZSxbRGUsRmUsT2UsSWVdLGtlLFZlfHxEYXRlLm5vdygpLERhdGUubm93KCldKX0pfShvdCx4ZSx2ZSxYZSl9KTt2YXIgcD1uZS5yZWFkZGlyO25lLnJlYWRkaXI9ZnVu''@;'; put 'put ''Y3Rpb24geChvdCx4ZSx2ZSl7ImZ1bmN0aW9uIj09dHlwZW9mIHhlJiYodmU9eGUseGU9bnVsbCk7dmFyIFhlPWIudGVzdChJLnZlcnNpb24pP2Z1bmN0aW9uKEZlLE9lLEllLFZlKXtyZXR1cm4gcChGZSx6ZShGZSxPZSxJZSxWZSkpfTpmdW5jdGlvbihGZSxPZSxJZSxWZSl7cmV0dXJuIHAo''@;'; put 'put ''RmUsT2UsemUoRmUsT2UsSWUsVmUpKX07cmV0dXJuIFhlKG90LHhlLHZlKTtmdW5jdGlvbiB6ZShEZSxGZSxPZSxJZSl7cmV0dXJuIGZ1bmN0aW9uKFZlLGtlKXshVmV8fCJFTUZJTEUiIT09VmUuY29kZSYmIkVORklMRSIhPT1WZS5jb2RlPyhrZSYma2Uuc29ydCYma2Uuc29ydCgpLCJmdW5j''@;'; put 'put ''dGlvbiI9PXR5cGVvZiBPZSYmT2UuY2FsbCh0aGlzLFZlLGtlKSk6WShbWGUsW0RlLEZlLE9lXSxWZSxJZXx8RGF0ZS5ub3coKSxEYXRlLm5vdygpXSl9fX07dmFyIGI9L152WzAtNV1cLi87aWYoInYwLjgiPT09SS52ZXJzaW9uLnN1YnN0cigwLDQpKXt2YXIgQz13KG5lKTttPUMuUmVhZFN0''@;'; put 'put ''cmVhbSxhZT1DLldyaXRlU3RyZWFtfXZhciBUPW5lLlJlYWRTdHJlYW07VCYmKG0ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoVC5wcm90b3R5cGUpLG0ucHJvdG90eXBlLm9wZW49ZnVuY3Rpb24gQSgpe3ZhciBvdD10aGlzO0plKG90LnBhdGgsb3QuZmxhZ3Msb3QubW9kZSxmdW5jdGlvbih4''@;'; put 'put ''ZSx2ZSl7eGU/KG90LmF1dG9DbG9zZSYmb3QuZGVzdHJveSgpLG90LmVtaXQoImVycm9yIix4ZSkpOihvdC5mZD12ZSxvdC5lbWl0KCJvcGVuIix2ZSksb3QucmVhZCgpKX0pfSk7dmFyIEg9bmUuV3JpdGVTdHJlYW07SCYmKGFlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEgucHJvdG90eXBl''@;'; put 'put ''KSxhZS5wcm90b3R5cGUub3Blbj1mdW5jdGlvbiB0ZSgpe3ZhciBvdD10aGlzO0plKG90LnBhdGgsb3QuZmxhZ3Msb3QubW9kZSxmdW5jdGlvbih4ZSx2ZSl7eGU/KG90LmRlc3Ryb3koKSxvdC5lbWl0KCJlcnJvciIseGUpKToob3QuZmQ9dmUsb3QuZW1pdCgib3BlbiIsdmUpKX0pfSksT2Jq''@;'; put 'put ''ZWN0LmRlZmluZVByb3BlcnR5KG5lLCJSZWFkU3RyZWFtIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG19LHNldDpmdW5jdGlvbihvdCl7bT1vdH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobmUsIldyaXRlU3RyZWFtIix7Z2V0OmZ1bmN0''@;'; put 'put ''aW9uKCl7cmV0dXJuIGFlfSxzZXQ6ZnVuY3Rpb24ob3Qpe2FlPW90fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pO3ZhciBqPW07T2JqZWN0LmRlZmluZVByb3BlcnR5KG5lLCJGaWxlUmVhZFN0cmVhbSIse2dldDpmdW5jdGlvbigpe3JldHVybiBqfSxzZXQ6ZnVuY3Rpb24ob3Qp''@;'; put 'put ''e2o9b3R9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSk7dmFyIEU9YWU7ZnVuY3Rpb24gbShvdCx4ZSl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBtPyhULmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0aGlzKTptLmFwcGx5KE9iamVjdC5jcmVhdGUobS5wcm90b3R5cGUpLGFyZ3VtZW50''@;'; put 'put ''cyl9ZnVuY3Rpb24gYWUob3QseGUpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgYWU/KEguYXBwbHkodGhpcyxhcmd1bWVudHMpLHRoaXMpOmFlLmFwcGx5KE9iamVjdC5jcmVhdGUoYWUucHJvdG90eXBlKSxhcmd1bWVudHMpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShuZSwiRmlsZVdyaXRlU3Ry''@;'; put 'put ''ZWFtIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEV9LHNldDpmdW5jdGlvbihvdCl7RT1vdH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KTt2YXIgVWU9bmUub3BlbjtmdW5jdGlvbiBKZShvdCx4ZSx2ZSxYZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHZlJiYoWGU9dmUsdmU9''@;'; put 'put ''bnVsbCksZnVuY3Rpb24gemUoRGUsRmUsT2UsSWUsVmUpe3JldHVybiBVZShEZSxGZSxPZSxmdW5jdGlvbihrZSxBZSl7IWtlfHwiRU1GSUxFIiE9PWtlLmNvZGUmJiJFTkZJTEUiIT09a2UuY29kZT8iZnVuY3Rpb24iPT10eXBlb2YgSWUmJkllLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpZKFt6''@;'; put 'put ''ZSxbRGUsRmUsT2UsSWVdLGtlLFZlfHxEYXRlLm5vdygpLERhdGUubm93KCldKX0pfShvdCx4ZSx2ZSxYZSl9cmV0dXJuIG5lLm9wZW49SmUsbmV9ZnVuY3Rpb24gWShuZSl7SygiRU5RVUVVRSIsbmVbMF0ubmFtZSxuZVsxXSksZ1tPXS5wdXNoKG5lKSxKKCl9ZnVuY3Rpb24gZWUoKXtmb3Io''@;'; put 'put ''dmFyIG5lPURhdGUubm93KCksaWU9MDtpZTxnW09dLmxlbmd0aDsrK2llKWdbT11baWVdLmxlbmd0aD4yJiYoZ1tPXVtpZV1bM109bmUsZ1tPXVtpZV1bNF09bmUpO0ooKX1mdW5jdGlvbiBKKCl7aWYoY2xlYXJUaW1lb3V0KHEpLHE9dm9pZCAwLDAhPT1nW09dLmxlbmd0aCl7dmFyIG5lPWdb''@;'; put 'put ''T10uc2hpZnQoKSxpZT1uZVswXSxsZT1uZVsxXSxtZT1uZVsyXSxfZT1uZVszXSxUZT1uZVs0XTtpZih2b2lkIDA9PT1fZSlLKCJSRVRSWSIsaWUubmFtZSxsZSksaWUuYXBwbHkobnVsbCxsZSk7ZWxzZSBpZihEYXRlLm5vdygpLV9lPj02ZTQpe0soIlRJTUVPVVQiLGllLm5hbWUsbGUpO3Zh''@;'; put 'put ''ciBTZT1sZS5wb3AoKTsiZnVuY3Rpb24iPT10eXBlb2YgU2UmJlNlLmNhbGwobnVsbCxtZSl9ZWxzZXt2YXIgamU9RGF0ZS5ub3coKS1UZSxWPU1hdGgubWF4KFRlLV9lLDEpO2plPj1NYXRoLm1pbigxLjIqViwxMDApPyhLKCJSRVRSWSIsaWUubmFtZSxsZSksaWUuYXBwbHkobnVsbCxsZS5j''@;'; put 'put ''b25jYXQoW19lXSkpKTpnW09dLnB1c2gobmUpfXZvaWQgMD09PXEmJihxPXNldFRpbWVvdXQoSiwwKSl9fUYuZGVidWdsb2c/Sz1GLmRlYnVnbG9nKCJnZnM0Iik6L1xiZ2ZzNFxiL2kudGVzdChJLmVudi5OT0RFX0RFQlVHfHwiIikmJihLPWZ1bmN0aW9uKCl7dmFyIG5lPUYuZm9ybWF0LmFw''@;'; put 'put ''cGx5KEYsYXJndW1lbnRzKTtuZT0iR0ZTNDogIituZS5zcGxpdCgvXG4vKS5qb2luKCJcbkdGUzQ6ICIpLF8uZXJyb3IobmUpfSksZ1tPXXx8KEwoZyx5LmdbT118fFtdKSxnLmNsb3NlPWZ1bmN0aW9uKG5lKXtmdW5jdGlvbiBpZShsZSxtZSl7cmV0dXJuIG5lLmNhbGwoZyxsZSxmdW5jdGlv''@;'; put 'put ''bihfZSl7X2V8fGVlKCksImZ1bmN0aW9uIj09dHlwZW9mIG1lJiZtZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGllLHose3ZhbHVlOm5lfSksaWV9KGcuY2xvc2UpLGcuY2xvc2VTeW5jPWZ1bmN0aW9uKG5lKXtmdW5jdGlvbiBpZShsZSl7''@;'; put 'put ''bmUuYXBwbHkoZyxhcmd1bWVudHMpLGVlKCl9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpZSx6LHt2YWx1ZTpuZX0pLGllfShnLmNsb3NlU3luYyksL1xiZ2ZzNFxiL2kudGVzdChJLmVudi5OT0RFX0RFQlVHfHwiIikmJkkub24oImV4aXQiLGZ1bmN0aW9uKCl7SyhnW09dKSx5KDky''@;'; put 'put ''ODIpLmVxdWFsKGdbT10ubGVuZ3RoLDApfSkpLHkuZ1tPXXx8TCh5LmcsZ1tPXSksdWUuZXhwb3J0cz1XKFAoZykpLEkuZW52LlRFU1RfR1JBQ0VGVUxfRlNfR0xPQkFMX1BBVENIJiYhZy5fX3BhdGNoZWQmJih1ZS5leHBvcnRzPVcoZyksZy5fX3BhdGNoZWQ9ITApfSw4NTIwOih1ZSxYLHkp''@;'; put 'put ''PT57dmFyIEk9eSg0MTU1KSxfPXkoMjgzMCkuU3RyZWFtO3VlLmV4cG9ydHM9ZnVuY3Rpb24gZyhCKXtyZXR1cm57UmVhZFN0cmVhbTpmdW5jdGlvbiB3KEYsTyl7aWYoISh0aGlzIGluc3RhbmNlb2YgdykpcmV0dXJuIG5ldyB3KEYsTyk7Xy5jYWxsKHRoaXMpO3ZhciB6PXRoaXM7dGhpcy5w''@;'; put 'put ''YXRoPUYsdGhpcy5mZD1udWxsLHRoaXMucmVhZGFibGU9ITAsdGhpcy5wYXVzZWQ9ITEsdGhpcy5mbGFncz0iciIsdGhpcy5tb2RlPTQzOCx0aGlzLmJ1ZmZlclNpemU9NjU1MzYsTz1PfHx7fTtmb3IodmFyIE49T2JqZWN0LmtleXMoTyksTD0wLEs9Ti5sZW5ndGg7TDxLO0wrKyl7dmFyIFU9''@;'; put 'put ''TltMXTt0aGlzW1VdPU9bVV19aWYodGhpcy5lbmNvZGluZyYmdGhpcy5zZXRFbmNvZGluZyh0aGlzLmVuY29kaW5nKSx2b2lkIDAhPT10aGlzLnN0YXJ0KXtpZigibnVtYmVyIiE9dHlwZW9mIHRoaXMuc3RhcnQpdGhyb3cgVHlwZUVycm9yKCJzdGFydCBtdXN0IGJlIGEgTnVtYmVyIik7aWYo''@;'; put 'put ''dm9pZCAwPT09dGhpcy5lbmQpdGhpcy5lbmQ9MS8wO2Vsc2UgaWYoIm51bWJlciIhPXR5cGVvZiB0aGlzLmVuZCl0aHJvdyBUeXBlRXJyb3IoImVuZCBtdXN0IGJlIGEgTnVtYmVyIik7aWYodGhpcy5zdGFydD50aGlzLmVuZCl0aHJvdyBuZXcgRXJyb3IoInN0YXJ0IG11c3QgYmUgPD0gZW5k''@;'; put 'put ''Iik7dGhpcy5wb3M9dGhpcy5zdGFydH1udWxsPT09dGhpcy5mZD9CLm9wZW4odGhpcy5wYXRoLHRoaXMuZmxhZ3MsdGhpcy5tb2RlLGZ1bmN0aW9uKFcsWSl7aWYoVylyZXR1cm4gei5lbWl0KCJlcnJvciIsVyksdm9pZCh6LnJlYWRhYmxlPSExKTt6LmZkPVksei5lbWl0KCJvcGVuIixZKSx6''@;'; put 'put ''Ll9yZWFkKCl9KTpJLm5leHRUaWNrKGZ1bmN0aW9uKCl7ei5fcmVhZCgpfSl9LFdyaXRlU3RyZWFtOmZ1bmN0aW9uIFAoRixPKXtpZighKHRoaXMgaW5zdGFuY2VvZiBQKSlyZXR1cm4gbmV3IFAoRixPKTtfLmNhbGwodGhpcyksdGhpcy5wYXRoPUYsdGhpcy5mZD1udWxsLHRoaXMud3JpdGFi''@;'; put 'put ''bGU9ITAsdGhpcy5mbGFncz0idyIsdGhpcy5lbmNvZGluZz0iYmluYXJ5Iix0aGlzLm1vZGU9NDM4LHRoaXMuYnl0ZXNXcml0dGVuPTAsTz1PfHx7fTtmb3IodmFyIHo9T2JqZWN0LmtleXMoTyksTj0wLEw9ei5sZW5ndGg7TjxMO04rKyl7dmFyIEs9eltOXTt0aGlzW0tdPU9bS119aWYodm9p''@;'; put 'put ''ZCAwIT09dGhpcy5zdGFydCl7aWYoIm51bWJlciIhPXR5cGVvZiB0aGlzLnN0YXJ0KXRocm93IFR5cGVFcnJvcigic3RhcnQgbXVzdCBiZSBhIE51bWJlciIpO2lmKHRoaXMuc3RhcnQ8MCl0aHJvdyBuZXcgRXJyb3IoInN0YXJ0IG11c3QgYmUgPj0gemVybyIpO3RoaXMucG9zPXRoaXMuc3Rh''@;'; put 'put ''cnR9dGhpcy5idXN5PSExLHRoaXMuX3F1ZXVlPVtdLG51bGw9PT10aGlzLmZkJiYodGhpcy5fb3Blbj1CLm9wZW4sdGhpcy5fcXVldWUucHVzaChbdGhpcy5fb3Blbix0aGlzLnBhdGgsdGhpcy5mbGFncyx0aGlzLm1vZGUsdm9pZCAwXSksdGhpcy5mbHVzaCgpKX19fX0sMjE2MToodWUsWCx5''@;'; put 'put ''KT0+e3ZhciBJPXkoNDE1NSksXz15KDMyMDgpLGc9SS5jd2QsQj1udWxsLHc9SS5lbnYuR1JBQ0VGVUxfRlNfUExBVEZPUk18fEkucGxhdGZvcm07SS5jd2Q9ZnVuY3Rpb24oKXtyZXR1cm4gQnx8KEI9Zy5jYWxsKEkpKSxCfTt0cnl7SS5jd2QoKX1jYXRjaHt9aWYoImZ1bmN0aW9uIj09dHlw''@;'; put 'put ''ZW9mIEkuY2hkaXIpe3ZhciBQPUkuY2hkaXI7SS5jaGRpcj1mdW5jdGlvbihPKXtCPW51bGwsUC5jYWxsKEksTyl9LE9iamVjdC5zZXRQcm90b3R5cGVPZiYmT2JqZWN0LnNldFByb3RvdHlwZU9mKEkuY2hkaXIsUCl9dWUuZXhwb3J0cz1mdW5jdGlvbiBGKE8pe2Z1bmN0aW9uIEwoSil7cmV0''@;'; put 'put ''dXJuIEomJmZ1bmN0aW9uKG5lLGllLGxlKXtyZXR1cm4gSi5jYWxsKE8sbmUsaWUsZnVuY3Rpb24obWUpe2VlKG1lKSYmKG1lPW51bGwpLGxlJiZsZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX19ZnVuY3Rpb24gSyhKKXtyZXR1cm4gSiYmZnVuY3Rpb24obmUsaWUpe3RyeXtyZXR1cm4gSi5j''@;'; put 'put ''YWxsKE8sbmUsaWUpfWNhdGNoKGxlKXtpZighZWUobGUpKXRocm93IGxlfX19ZnVuY3Rpb24gVShKKXtyZXR1cm4gSiYmZnVuY3Rpb24obmUsaWUsbGUsbWUpe3JldHVybiBKLmNhbGwoTyxuZSxpZSxsZSxmdW5jdGlvbihfZSl7ZWUoX2UpJiYoX2U9bnVsbCksbWUmJm1lLmFwcGx5KHRoaXMs''@;'; put 'put ''YXJndW1lbnRzKX0pfX1mdW5jdGlvbiBXKEope3JldHVybiBKJiZmdW5jdGlvbihuZSxpZSxsZSl7dHJ5e3JldHVybiBKLmNhbGwoTyxuZSxpZSxsZSl9Y2F0Y2gobWUpe2lmKCFlZShtZSkpdGhyb3cgbWV9fX1mdW5jdGlvbiBZKEope3JldHVybiBKJiZmdW5jdGlvbihuZSxpZSxsZSl7ZnVu''@;'; put 'put ''Y3Rpb24gbWUoX2UsVGUpe1RlJiYoVGUudWlkPDAmJihUZS51aWQrPTQyOTQ5NjcyOTYpLFRlLmdpZDwwJiYoVGUuZ2lkKz00Mjk0OTY3Mjk2KSksbGUmJmxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgaWUmJihsZT1pZSxpZT1udWxsKSxpZT9KLmNh''@;'; put 'put ''bGwoTyxuZSxpZSxtZSk6Si5jYWxsKE8sbmUsbWUpfX1mdW5jdGlvbiBxKEope3JldHVybiBKJiZmdW5jdGlvbihuZSxpZSl7dmFyIGxlPWllP0ouY2FsbChPLG5lLGllKTpKLmNhbGwoTyxuZSk7cmV0dXJuIGxlJiYobGUudWlkPDAmJihsZS51aWQrPTQyOTQ5NjcyOTYpLGxlLmdpZDwwJiYo''@;'; put 'put ''bGUuZ2lkKz00Mjk0OTY3Mjk2KSksbGV9fWZ1bmN0aW9uIGVlKEope3JldHVybiFKfHwiRU5PU1lTIj09PUouY29kZXx8IShJLmdldHVpZCYmMD09PUkuZ2V0dWlkKCl8fCJFSU5WQUwiIT09Si5jb2RlJiYiRVBFUk0iIT09Si5jb2RlKX1fLmhhc093blByb3BlcnR5KCJPX1NZTUxJTksiKSYm''@;'; put 'put ''SS52ZXJzaW9uLm1hdGNoKC9edjBcLjZcLlswLTJdfF52MFwuNVwuLykmJmZ1bmN0aW9uIHooSil7Si5sY2htb2Q9ZnVuY3Rpb24obmUsaWUsbGUpe0oub3BlbihuZSxfLk9fV1JPTkxZfF8uT19TWU1MSU5LLGllLGZ1bmN0aW9uKG1lLF9lKXttZT9sZSYmbGUobWUpOkouZmNobW9kKF9lLGll''@;'; put 'put ''LGZ1bmN0aW9uKFRlKXtKLmNsb3NlKF9lLGZ1bmN0aW9uKFNlKXtsZSYmbGUoVGV8fFNlKX0pfSl9KX0sSi5sY2htb2RTeW5jPWZ1bmN0aW9uKG5lLGllKXt2YXIgX2UsbGU9Si5vcGVuU3luYyhuZSxfLk9fV1JPTkxZfF8uT19TWU1MSU5LLGllKSxtZT0hMDt0cnl7X2U9Si5mY2htb2RTeW5j''@;'; put 'put ''KGxlLGllKSxtZT0hMX1maW5hbGx5e2lmKG1lKXRyeXtKLmNsb3NlU3luYyhsZSl9Y2F0Y2h7fWVsc2UgSi5jbG9zZVN5bmMobGUpfXJldHVybiBfZX19KE8pLE8ubHV0aW1lc3x8ZnVuY3Rpb24gTihKKXtfLmhhc093blByb3BlcnR5KCJPX1NZTUxJTksiKSYmSi5mdXRpbWVzPyhKLmx1dGlt''@;'; put 'put ''ZXM9ZnVuY3Rpb24obmUsaWUsbGUsbWUpe0oub3BlbihuZSxfLk9fU1lNTElOSyxmdW5jdGlvbihfZSxUZSl7X2U/bWUmJm1lKF9lKTpKLmZ1dGltZXMoVGUsaWUsbGUsZnVuY3Rpb24oU2Upe0ouY2xvc2UoVGUsZnVuY3Rpb24oamUpe21lJiZtZShTZXx8amUpfSl9KX0pfSxKLmx1dGltZXNT''@;'; put 'put ''eW5jPWZ1bmN0aW9uKG5lLGllLGxlKXt2YXIgX2UsbWU9Si5vcGVuU3luYyhuZSxfLk9fU1lNTElOSyksVGU9ITA7dHJ5e19lPUouZnV0aW1lc1N5bmMobWUsaWUsbGUpLFRlPSExfWZpbmFsbHl7aWYoVGUpdHJ5e0ouY2xvc2VTeW5jKG1lKX1jYXRjaHt9ZWxzZSBKLmNsb3NlU3luYyhtZSl9''@;'; put 'put ''cmV0dXJuIF9lfSk6Si5mdXRpbWVzJiYoSi5sdXRpbWVzPWZ1bmN0aW9uKG5lLGllLGxlLG1lKXttZSYmSS5uZXh0VGljayhtZSl9LEoubHV0aW1lc1N5bmM9ZnVuY3Rpb24oKXt9KX0oTyksTy5jaG93bj1VKE8uY2hvd24pLE8uZmNob3duPVUoTy5mY2hvd24pLE8ubGNob3duPVUoTy5sY2hv''@;'; put 'put ''d24pLE8uY2htb2Q9TChPLmNobW9kKSxPLmZjaG1vZD1MKE8uZmNobW9kKSxPLmxjaG1vZD1MKE8ubGNobW9kKSxPLmNob3duU3luYz1XKE8uY2hvd25TeW5jKSxPLmZjaG93blN5bmM9VyhPLmZjaG93blN5bmMpLE8ubGNob3duU3luYz1XKE8ubGNob3duU3luYyksTy5jaG1vZFN5bmM9SyhP''@;'; put 'put ''LmNobW9kU3luYyksTy5mY2htb2RTeW5jPUsoTy5mY2htb2RTeW5jKSxPLmxjaG1vZFN5bmM9SyhPLmxjaG1vZFN5bmMpLE8uc3RhdD1ZKE8uc3RhdCksTy5mc3RhdD1ZKE8uZnN0YXQpLE8ubHN0YXQ9WShPLmxzdGF0KSxPLnN0YXRTeW5jPXEoTy5zdGF0U3luYyksTy5mc3RhdFN5bmM9cShP''@;'; put 'put ''LmZzdGF0U3luYyksTy5sc3RhdFN5bmM9cShPLmxzdGF0U3luYyksTy5jaG1vZCYmIU8ubGNobW9kJiYoTy5sY2htb2Q9ZnVuY3Rpb24oSixuZSxpZSl7aWUmJkkubmV4dFRpY2soaWUpfSxPLmxjaG1vZFN5bmM9ZnVuY3Rpb24oKXt9KSxPLmNob3duJiYhTy5sY2hvd24mJihPLmxjaG93bj1m''@;'; put 'put ''dW5jdGlvbihKLG5lLGllLGxlKXtsZSYmSS5uZXh0VGljayhsZSl9LE8ubGNob3duU3luYz1mdW5jdGlvbigpe30pLCJ3aW4zMiI9PT13JiYoTy5yZW5hbWU9ImZ1bmN0aW9uIiE9dHlwZW9mIE8ucmVuYW1lP08ucmVuYW1lOmZ1bmN0aW9uKEope2Z1bmN0aW9uIG5lKGllLGxlLG1lKXt2YXIg''@;'; put 'put ''X2U9RGF0ZS5ub3coKSxUZT0wO0ooaWUsbGUsZnVuY3Rpb24gU2UoamUpe2lmKGplJiYoIkVBQ0NFUyI9PT1qZS5jb2RlfHwiRVBFUk0iPT09amUuY29kZXx8IkVCVVNZIj09PWplLmNvZGUpJiZEYXRlLm5vdygpLV9lPDZlNClyZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbigpe08uc3RhdChs''@;'; put 'put ''ZSxmdW5jdGlvbihWLHApe1YmJiJFTk9FTlQiPT09Vi5jb2RlP0ooaWUsbGUsU2UpOm1lKGplKX0pfSxUZSksdm9pZChUZTwxMDAmJihUZSs9MTApKTttZSYmbWUoamUpfSl9cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZiYmT2JqZWN0LnNldFByb3RvdHlwZU9mKG5lLEopLG5lfShPLnJl''@;'; put 'put ''bmFtZSkpLE8ucmVhZD0iZnVuY3Rpb24iIT10eXBlb2YgTy5yZWFkP08ucmVhZDpmdW5jdGlvbihKKXtmdW5jdGlvbiBuZShpZSxsZSxtZSxfZSxUZSxTZSl7dmFyIGplO2lmKFNlJiYiZnVuY3Rpb24iPT10eXBlb2YgU2Upe3ZhciBWPTA7amU9ZnVuY3Rpb24ocCxiLHgpe2lmKHAmJiJFQUdB''@;'; put 'put ''SU4iPT09cC5jb2RlJiZWPDEwKXJldHVybiBWKyssSi5jYWxsKE8saWUsbGUsbWUsX2UsVGUsamUpO1NlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19cmV0dXJuIEouY2FsbChPLGllLGxlLG1lLF9lLFRlLGplKX1yZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mJiZPYmplY3Quc2V0UHJvdG90''@;'; put 'put ''eXBlT2YobmUsSiksbmV9KE8ucmVhZCksTy5yZWFkU3luYz0iZnVuY3Rpb24iIT10eXBlb2YgTy5yZWFkU3luYz9PLnJlYWRTeW5jOmZ1bmN0aW9uKEope3JldHVybiBmdW5jdGlvbihuZSxpZSxsZSxtZSxfZSl7Zm9yKHZhciBUZT0wOzspdHJ5e3JldHVybiBKLmNhbGwoTyxuZSxpZSxsZSxt''@;'; put 'put ''ZSxfZSl9Y2F0Y2goU2Upe2lmKCJFQUdBSU4iPT09U2UuY29kZSYmVGU8MTApe1RlKys7Y29udGludWV9dGhyb3cgU2V9fX0oTy5yZWFkU3luYyl9fSwxMDQ0Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNDQyOSksXz1mdW5jdGlvbigpe3JldHVybiEhSX07Xy5oYXNBcnJheUxl''@;'; put 'put ''bmd0aERlZmluZUJ1Zz1mdW5jdGlvbigpe2lmKCFJKXJldHVybiBudWxsO3RyeXtyZXR1cm4gMSE9PUkoW10sImxlbmd0aCIse3ZhbHVlOjF9KS5sZW5ndGh9Y2F0Y2h7cmV0dXJuITB9fSx1ZS5leHBvcnRzPV99LDE0MDU6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9dHlwZW9mIFN5''@;'; put 'put ''bWJvbDwidSImJlN5bWJvbCxfPXkoNTQxOSk7dWUuZXhwb3J0cz1mdW5jdGlvbigpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBJJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIEkoImZvbyIpJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbCgiYmFyIikmJl8o''@;'; put 'put ''KX19LDU0MTk6dWU9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz1mdW5jdGlvbigpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBTeW1ib2x8fCJmdW5jdGlvbiIhPXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXJldHVybiExO2lmKCJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0''@;'; put 'put ''ZXJhdG9yKXJldHVybiEwO3ZhciB5PXt9LEk9U3ltYm9sKCJ0ZXN0IiksXz1PYmplY3QoSSk7aWYoInN0cmluZyI9PXR5cGVvZiBJfHwiW29iamVjdCBTeW1ib2xdIiE9PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChJKXx8IltvYmplY3QgU3ltYm9sXSIhPT1PYmplY3QucHJvdG90''@;'; put 'put ''eXBlLnRvU3RyaW5nLmNhbGwoXykpcmV0dXJuITE7Zm9yKHZhciBCIGluIHlbSV09NDIseSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgT2JqZWN0LmtleXMmJjAhPT1PYmplY3Qua2V5cyh5KS5sZW5ndGh8fCJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlO''@;'; put 'put ''YW1lcyYmMCE9PU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHkpLmxlbmd0aClyZXR1cm4hMTt2YXIgdz1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHkpO2lmKDEhPT13Lmxlbmd0aHx8d1swXSE9PUl8fCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwo''@;'; put 'put ''eSxJKSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcil7dmFyIFA9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih5LEkpO2lmKDQyIT09UC52YWx1ZXx8ITAhPT1QLmVudW1lcmFibGUpcmV0dXJuITF9cmV0dXJuITB9''@;'; put 'put ''fSw2NDEwOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNTQxOSk7dWUuZXhwb3J0cz1mdW5jdGlvbigpe3JldHVybiBJKCkmJiEhU3ltYm9sLnRvU3RyaW5nVGFnfX0sMzM0OToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDk1MDkpLkJ1ZmZlcixfPXkoMjgzMCkuVHJh''@;'; put 'put ''bnNmb3JtO2Z1bmN0aW9uIEIoTyl7Xy5jYWxsKHRoaXMpLHRoaXMuX2Jsb2NrPUkuYWxsb2NVbnNhZmUoTyksdGhpcy5fYmxvY2tTaXplPU8sdGhpcy5fYmxvY2tPZmZzZXQ9MCx0aGlzLl9sZW5ndGg9WzAsMCwwLDBdLHRoaXMuX2ZpbmFsaXplZD0hMX15KDU3MTcpKEIsXyksQi5wcm90b3R5''@;'; put 'put ''cGUuX3RyYW5zZm9ybT1mdW5jdGlvbihPLHosTil7dmFyIEw9bnVsbDt0cnl7dGhpcy51cGRhdGUoTyx6KX1jYXRjaChLKXtMPUt9TihMKX0sQi5wcm90b3R5cGUuX2ZsdXNoPWZ1bmN0aW9uKE8pe3ZhciB6PW51bGw7dHJ5e3RoaXMucHVzaCh0aGlzLmRpZ2VzdCgpKX1jYXRjaChOKXt6PU59''@;'; put 'put ''Tyh6KX07dmFyIHc9dHlwZW9mIFVpbnQ4QXJyYXk8InUiLFA9dHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYmdHlwZW9mIFVpbnQ4QXJyYXk8InUiJiZBcnJheUJ1ZmZlci5pc1ZpZXcmJihJLnByb3RvdHlwZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl8fEkuVFlQRURfQVJSQVlfU1VQUE9SVCk7Qi5w''@;'; put 'put ''cm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKE8seil7aWYodGhpcy5fZmluYWxpemVkKXRocm93IG5ldyBFcnJvcigiRGlnZXN0IGFscmVhZHkgY2FsbGVkIik7Tz1mdW5jdGlvbiBGKE8seil7aWYoTyBpbnN0YW5jZW9mIEkpcmV0dXJuIE87aWYoInN0cmluZyI9PXR5cGVvZiBPKXJldHVybiBJ''@;'; put 'put ''LmZyb20oTyx6KTtpZihQJiZBcnJheUJ1ZmZlci5pc1ZpZXcoTykpe2lmKDA9PT1PLmJ5dGVMZW5ndGgpcmV0dXJuIEkuYWxsb2MoMCk7dmFyIE49SS5mcm9tKE8uYnVmZmVyLE8uYnl0ZU9mZnNldCxPLmJ5dGVMZW5ndGgpO2lmKE4uYnl0ZUxlbmd0aD09PU8uYnl0ZUxlbmd0aClyZXR1cm4g''@;'; put 'put ''Tn1pZih3JiZPIGluc3RhbmNlb2YgVWludDhBcnJheXx8SS5pc0J1ZmZlcihPKSYmTy5jb25zdHJ1Y3RvciYmImZ1bmN0aW9uIj09dHlwZW9mIE8uY29uc3RydWN0b3IuaXNCdWZmZXImJk8uY29uc3RydWN0b3IuaXNCdWZmZXIoTykpcmV0dXJuIEkuZnJvbShPKTt0aHJvdyBuZXcgVHlwZUVy''@;'; put 'put ''cm9yKCdUaGUgImRhdGEiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBzdHJpbmcgb3IgYW4gaW5zdGFuY2Ugb2YgQnVmZmVyLCBUeXBlZEFycmF5LCBvciBEYXRhVmlldy4nKX0oTyx6KTtmb3IodmFyIE49dGhpcy5fYmxvY2ssTD0wO3RoaXMuX2Jsb2NrT2Zmc2V0K08ubGVuZ3RoLUw+PXRo''@;'; put 'put ''aXMuX2Jsb2NrU2l6ZTspe2Zvcih2YXIgSz10aGlzLl9ibG9ja09mZnNldDtLPHRoaXMuX2Jsb2NrU2l6ZTspTltLKytdPU9bTCsrXTt0aGlzLl91cGRhdGUoKSx0aGlzLl9ibG9ja09mZnNldD0wfWZvcig7TDxPLmxlbmd0aDspTlt0aGlzLl9ibG9ja09mZnNldCsrXT1PW0wrK107Zm9yKHZh''@;'; put 'put ''ciBVPTAsVz04Kk8ubGVuZ3RoO1c+MDsrK1UpdGhpcy5fbGVuZ3RoW1VdKz1XLChXPXRoaXMuX2xlbmd0aFtVXS80Mjk0OTY3Mjk2fDApPjAmJih0aGlzLl9sZW5ndGhbVV0tPTQyOTQ5NjcyOTYqVyk7cmV0dXJuIHRoaXN9LEIucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oKXt0aHJvdyBu''@;'; put 'put ''ZXcgRXJyb3IoIl91cGRhdGUgaXMgbm90IGltcGxlbWVudGVkIil9LEIucHJvdG90eXBlLmRpZ2VzdD1mdW5jdGlvbihPKXtpZih0aGlzLl9maW5hbGl6ZWQpdGhyb3cgbmV3IEVycm9yKCJEaWdlc3QgYWxyZWFkeSBjYWxsZWQiKTt0aGlzLl9maW5hbGl6ZWQ9ITA7dmFyIHo9dGhpcy5fZGln''@;'; put 'put ''ZXN0KCk7dm9pZCAwIT09TyYmKHo9ei50b1N0cmluZyhPKSksdGhpcy5fYmxvY2suZmlsbCgwKSx0aGlzLl9ibG9ja09mZnNldD0wO2Zvcih2YXIgTj0wO048NDsrK04pdGhpcy5fbGVuZ3RoW05dPTA7cmV0dXJuIHp9LEIucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24oKXt0aHJvdyBuZXcg''@;'; put 'put ''RXJyb3IoIl9kaWdlc3QgaXMgbm90IGltcGxlbWVudGVkIil9LHVlLmV4cG9ydHM9Qn0sMzcxNToodWUsWCx5KT0+e3ZhciBJPVg7SS51dGlscz15KDY0MzYpLEkuY29tbW9uPXkoNTc3MiksSS5zaGE9eSg5MDQxKSxJLnJpcGVtZD15KDI5NDkpLEkuaG1hYz15KDIzNDQpLEkuc2hhMT1JLnNo''@;'; put 'put ''YS5zaGExLEkuc2hhMjU2PUkuc2hhLnNoYTI1NixJLnNoYTIyND1JLnNoYS5zaGEyMjQsSS5zaGEzODQ9SS5zaGEuc2hhMzg0LEkuc2hhNTEyPUkuc2hhLnNoYTUxMixJLnJpcGVtZDE2MD1JLnJpcGVtZC5yaXBlbWQxNjB9LDU3NzI6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg2''@;'; put 'put ''NDM2KSxfPXkoOTc0Nik7ZnVuY3Rpb24gZygpe3RoaXMucGVuZGluZz1udWxsLHRoaXMucGVuZGluZ1RvdGFsPTAsdGhpcy5ibG9ja1NpemU9dGhpcy5jb25zdHJ1Y3Rvci5ibG9ja1NpemUsdGhpcy5vdXRTaXplPXRoaXMuY29uc3RydWN0b3Iub3V0U2l6ZSx0aGlzLmhtYWNTdHJlbmd0aD10''@;'; put 'put ''aGlzLmNvbnN0cnVjdG9yLmhtYWNTdHJlbmd0aCx0aGlzLnBhZExlbmd0aD10aGlzLmNvbnN0cnVjdG9yLnBhZExlbmd0aC84LHRoaXMuZW5kaWFuPSJiaWciLHRoaXMuX2RlbHRhOD10aGlzLmJsb2NrU2l6ZS84LHRoaXMuX2RlbHRhMzI9dGhpcy5ibG9ja1NpemUvMzJ9WC5CbG9ja0hhc2g9''@;'; put 'put ''ZyxnLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24odyxQKXtpZih3PUkudG9BcnJheSh3LFApLHRoaXMucGVuZGluZz10aGlzLnBlbmRpbmc/dGhpcy5wZW5kaW5nLmNvbmNhdCh3KTp3LHRoaXMucGVuZGluZ1RvdGFsKz13Lmxlbmd0aCx0aGlzLnBlbmRpbmcubGVuZ3RoPj10aGlzLl9kZWx0''@;'; put 'put ''YTgpe3ZhciBGPSh3PXRoaXMucGVuZGluZykubGVuZ3RoJXRoaXMuX2RlbHRhODt0aGlzLnBlbmRpbmc9dy5zbGljZSh3Lmxlbmd0aC1GLHcubGVuZ3RoKSwwPT09dGhpcy5wZW5kaW5nLmxlbmd0aCYmKHRoaXMucGVuZGluZz1udWxsKSx3PUkuam9pbjMyKHcsMCx3Lmxlbmd0aC1GLHRoaXMu''@;'; put 'put ''ZW5kaWFuKTtmb3IodmFyIE89MDtPPHcubGVuZ3RoO08rPXRoaXMuX2RlbHRhMzIpdGhpcy5fdXBkYXRlKHcsTyxPK3RoaXMuX2RlbHRhMzIpfXJldHVybiB0aGlzfSxnLnByb3RvdHlwZS5kaWdlc3Q9ZnVuY3Rpb24odyl7cmV0dXJuIHRoaXMudXBkYXRlKHRoaXMuX3BhZCgpKSxfKG51bGw9''@;'; put 'put ''PT10aGlzLnBlbmRpbmcpLHRoaXMuX2RpZ2VzdCh3KX0sZy5wcm90b3R5cGUuX3BhZD1mdW5jdGlvbigpe3ZhciB3PXRoaXMucGVuZGluZ1RvdGFsLFA9dGhpcy5fZGVsdGE4LEY9UC0odyt0aGlzLnBhZExlbmd0aCklUCxPPW5ldyBBcnJheShGK3RoaXMucGFkTGVuZ3RoKTtPWzBdPTEyODtm''@;'; put 'put ''b3IodmFyIHo9MTt6PEY7eisrKU9bel09MDtpZih3PDw9MywiYmlnIj09PXRoaXMuZW5kaWFuKXtmb3IodmFyIE49ODtOPHRoaXMucGFkTGVuZ3RoO04rKylPW3orK109MDtPW3orK109MCxPW3orK109MCxPW3orK109MCxPW3orK109MCxPW3orK109dz4+PjI0JjI1NSxPW3orK109dz4+PjE2''@;'; put 'put ''JjI1NSxPW3orK109dz4+PjgmMjU1LE9beisrXT0yNTUmd31lbHNlIGZvcihPW3orK109MjU1JncsT1t6KytdPXc+Pj44JjI1NSxPW3orK109dz4+PjE2JjI1NSxPW3orK109dz4+PjI0JjI1NSxPW3orK109MCxPW3orK109MCxPW3orK109MCxPW3orK109MCxOPTg7Tjx0aGlzLnBhZExlbmd0''@;'; put 'put ''aDtOKyspT1t6KytdPTA7cmV0dXJuIE99fSwyMzQ0Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNjQzNiksXz15KDk3NDYpO2Z1bmN0aW9uIGcoQix3LFApe2lmKCEodGhpcyBpbnN0YW5jZW9mIGcpKXJldHVybiBuZXcgZyhCLHcsUCk7dGhpcy5IYXNoPUIsdGhpcy5ibG9ja1Np''@;'; put 'put ''emU9Qi5ibG9ja1NpemUvOCx0aGlzLm91dFNpemU9Qi5vdXRTaXplLzgsdGhpcy5pbm5lcj1udWxsLHRoaXMub3V0ZXI9bnVsbCx0aGlzLl9pbml0KEkudG9BcnJheSh3LFApKX11ZS5leHBvcnRzPWcsZy5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24odyl7dy5sZW5ndGg+dGhpcy5ibG9ja1Np''@;'; put 'put ''emUmJih3PShuZXcgdGhpcy5IYXNoKS51cGRhdGUodykuZGlnZXN0KCkpLF8ody5sZW5ndGg8PXRoaXMuYmxvY2tTaXplKTtmb3IodmFyIFA9dy5sZW5ndGg7UDx0aGlzLmJsb2NrU2l6ZTtQKyspdy5wdXNoKDApO2ZvcihQPTA7UDx3Lmxlbmd0aDtQKyspd1tQXV49NTQ7Zm9yKHRoaXMuaW5u''@;'; put 'put ''ZXI9KG5ldyB0aGlzLkhhc2gpLnVwZGF0ZSh3KSxQPTA7UDx3Lmxlbmd0aDtQKyspd1tQXV49MTA2O3RoaXMub3V0ZXI9KG5ldyB0aGlzLkhhc2gpLnVwZGF0ZSh3KX0sZy5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKHcsUCl7cmV0dXJuIHRoaXMuaW5uZXIudXBkYXRlKHcsUCksdGhpc30s''@;'; put 'put ''Zy5wcm90b3R5cGUuZGlnZXN0PWZ1bmN0aW9uKHcpe3JldHVybiB0aGlzLm91dGVyLnVwZGF0ZSh0aGlzLmlubmVyLmRpZ2VzdCgpKSx0aGlzLm91dGVyLmRpZ2VzdCh3KX19LDI5NDk6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg2NDM2KSxfPXkoNTc3MiksZz1JLnJvdGwzMixC''@;'; put 'put ''PUkuc3VtMzIsdz1JLnN1bTMyXzMsUD1JLnN1bTMyXzQsRj1fLkJsb2NrSGFzaDtmdW5jdGlvbiBPKCl7aWYoISh0aGlzIGluc3RhbmNlb2YgTykpcmV0dXJuIG5ldyBPO0YuY2FsbCh0aGlzKSx0aGlzLmg9WzE3MzI1ODQxOTMsNDAyMzIzMzQxNywyNTYyMzgzMTAyLDI3MTczMzg3OCwzMjg1''@;'; put 'put ''Mzc3NTIwXSx0aGlzLmVuZGlhbj0ibGl0dGxlIn1mdW5jdGlvbiB6KHEsZWUsSixuZSl7cmV0dXJuIHE8PTE1P2VlXkpebmU6cTw9MzE/ZWUmSnx+ZWUmbmU6cTw9NDc/KGVlfH5KKV5uZTpxPD02Mz9lZSZuZXxKJn5uZTplZV4oSnx+bmUpfWZ1bmN0aW9uIEwocSl7cmV0dXJuIHE8PTE1PzEz''@;'; put 'put ''NTI4Mjk5MjY6cTw9MzE/MTU0ODYwMzY4NDpxPD00Nz8xODM2MDcyNjkxOnE8PTYzPzIwNTM5OTQyMTc6MH1JLmluaGVyaXRzKE8sRiksWC5yaXBlbWQxNjA9TyxPLmJsb2NrU2l6ZT01MTIsTy5vdXRTaXplPTE2MCxPLmhtYWNTdHJlbmd0aD0xOTIsTy5wYWRMZW5ndGg9NjQsTy5wcm90b3R5''@;'; put 'put ''cGUuX3VwZGF0ZT1mdW5jdGlvbihlZSxKKXtmb3IodmFyIG5lPXRoaXMuaFswXSxpZT10aGlzLmhbMV0sbGU9dGhpcy5oWzJdLG1lPXRoaXMuaFszXSxfZT10aGlzLmhbNF0sVGU9bmUsU2U9aWUsamU9bGUsVj1tZSxwPV9lLGI9MDtiPDgwO2IrKyl7dmFyIHg9QihnKFAobmUseihiLGllLGxl''@;'; put 'put ''LG1lKSxlZVtLW2JdK0pdLChxPWIpPD0xNT8wOnE8PTMxPzE1MTg1MDAyNDk6cTw9NDc/MTg1OTc3NTM5MzpxPD02Mz8yNDAwOTU5NzA4OjI4NDA4NTM4MzgpLFdbYl0pLF9lKTtuZT1fZSxfZT1tZSxtZT1nKGxlLDEwKSxsZT1pZSxpZT14LHg9QihnKFAoVGUseig3OS1iLFNlLGplLFYpLGVl''@;'; put 'put ''W1VbYl0rSl0sTChiKSksWVtiXSkscCksVGU9cCxwPVYsVj1nKGplLDEwKSxqZT1TZSxTZT14fXZhciBxO3g9dyh0aGlzLmhbMV0sbGUsViksdGhpcy5oWzFdPXcodGhpcy5oWzJdLG1lLHApLHRoaXMuaFsyXT13KHRoaXMuaFszXSxfZSxUZSksdGhpcy5oWzNdPXcodGhpcy5oWzRdLG5lLFNl''@;'; put 'put ''KSx0aGlzLmhbNF09dyh0aGlzLmhbMF0saWUsamUpLHRoaXMuaFswXT14fSxPLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKGVlKXtyZXR1cm4iaGV4Ij09PWVlP0kudG9IZXgzMih0aGlzLmgsImxpdHRsZSIpOkkuc3BsaXQzMih0aGlzLmgsImxpdHRsZSIpfTt2YXIgSz1bMCwxLDIsMyw0''@;'; put 'put ''LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSw3LDQsMTMsMSwxMCw2LDE1LDMsMTIsMCw5LDUsMiwxNCwxMSw4LDMsMTAsMTQsNCw5LDE1LDgsMSwyLDcsMCw2LDEzLDExLDUsMTIsMSw5LDExLDEwLDAsOCwxMiw0LDEzLDMsNywxNSwxNCw1LDYsMiw0LDAsNSw5LDcsMTIsMiwxMCwxNCwx''@;'; put 'put ''LDMsOCwxMSw2LDE1LDEzXSxVPVs1LDE0LDcsMCw5LDIsMTEsNCwxMyw2LDE1LDgsMSwxMCwzLDEyLDYsMTEsMyw3LDAsMTMsNSwxMCwxNCwxNSw4LDEyLDQsOSwxLDIsMTUsNSwxLDMsNywxNCw2LDksMTEsOCwxMiwyLDEwLDAsNCwxMyw4LDYsNCwxLDMsMTEsMTUsMCw1LDEyLDIsMTMsOSw3''@;'; put 'put ''LDEwLDE0LDEyLDE1LDEwLDQsMSw1LDgsNyw2LDIsMTMsMTQsMCwzLDksMTFdLFc9WzExLDE0LDE1LDEyLDUsOCw3LDksMTEsMTMsMTQsMTUsNiw3LDksOCw3LDYsOCwxMywxMSw5LDcsMTUsNywxMiwxNSw5LDExLDcsMTMsMTIsMTEsMTMsNiw3LDE0LDksMTMsMTUsMTQsOCwxMyw2LDUsMTIs''@;'; put 'put ''Nyw1LDExLDEyLDE0LDE1LDE0LDE1LDksOCw5LDE0LDUsNiw4LDYsNSwxMiw5LDE1LDUsMTEsNiw4LDEzLDEyLDUsMTIsMTMsMTQsMTEsOCw1LDZdLFk9WzgsOSw5LDExLDEzLDE1LDE1LDUsNyw3LDgsMTEsMTQsMTQsMTIsNiw5LDEzLDE1LDcsMTIsOCw5LDExLDcsNywxMiw3LDYsMTUsMTMs''@;'; put 'put ''MTEsOSw3LDE1LDExLDgsNiw2LDE0LDEyLDEzLDUsMTQsMTMsMTMsNyw1LDE1LDUsOCwxMSwxNCwxNCw2LDE0LDYsOSwxMiw5LDEyLDUsMTUsOCw4LDUsMTIsOSwxMiw1LDE0LDYsOCwxMyw2LDUsMTUsMTMsMTEsMTFdfSw5MDQxOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO1guc2hhMT15KDQ3''@;'; put 'put ''NjEpLFguc2hhMjI0PXkoNzk5KSxYLnNoYTI1Nj15KDkzNDQpLFguc2hhMzg0PXkoNzcyKSxYLnNoYTUxMj15KDU5MDApfSw0NzYxOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNjQzNiksXz15KDU3NzIpLGc9eSg3MDM4KSxCPUkucm90bDMyLHc9SS5zdW0zMixQPUkuc3VtMzJf''@;'; put 'put ''NSxGPWcuZnRfMSxPPV8uQmxvY2tIYXNoLHo9WzE1MTg1MDAyNDksMTg1OTc3NTM5MywyNDAwOTU5NzA4LDMzOTU0Njk3ODJdO2Z1bmN0aW9uIE4oKXtpZighKHRoaXMgaW5zdGFuY2VvZiBOKSlyZXR1cm4gbmV3IE47Ty5jYWxsKHRoaXMpLHRoaXMuaD1bMTczMjU4NDE5Myw0MDIzMjMzNDE3''@;'; put 'put ''LDI1NjIzODMxMDIsMjcxNzMzODc4LDMyODUzNzc1MjBdLHRoaXMuVz1uZXcgQXJyYXkoODApfUkuaW5oZXJpdHMoTixPKSx1ZS5leHBvcnRzPU4sTi5ibG9ja1NpemU9NTEyLE4ub3V0U2l6ZT0xNjAsTi5obWFjU3RyZW5ndGg9ODAsTi5wYWRMZW5ndGg9NjQsTi5wcm90b3R5cGUuX3VwZGF0''@;'; put 'put ''ZT1mdW5jdGlvbihLLFUpe2Zvcih2YXIgVz10aGlzLlcsWT0wO1k8MTY7WSsrKVdbWV09S1tVK1ldO2Zvcig7WTxXLmxlbmd0aDtZKyspV1tZXT1CKFdbWS0zXV5XW1ktOF1eV1tZLTE0XV5XW1ktMTZdLDEpO3ZhciBxPXRoaXMuaFswXSxlZT10aGlzLmhbMV0sSj10aGlzLmhbMl0sbmU9dGhp''@;'; put 'put ''cy5oWzNdLGllPXRoaXMuaFs0XTtmb3IoWT0wO1k8Vy5sZW5ndGg7WSsrKXt2YXIgbGU9fn4oWS8yMCksbWU9UChCKHEsNSksRihsZSxlZSxKLG5lKSxpZSxXW1ldLHpbbGVdKTtpZT1uZSxuZT1KLEo9QihlZSwzMCksZWU9cSxxPW1lfXRoaXMuaFswXT13KHRoaXMuaFswXSxxKSx0aGlzLmhb''@;'; put 'put ''MV09dyh0aGlzLmhbMV0sZWUpLHRoaXMuaFsyXT13KHRoaXMuaFsyXSxKKSx0aGlzLmhbM109dyh0aGlzLmhbM10sbmUpLHRoaXMuaFs0XT13KHRoaXMuaFs0XSxpZSl9LE4ucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24oSyl7cmV0dXJuImhleCI9PT1LP0kudG9IZXgzMih0aGlzLmgsImJp''@;'; put 'put ''ZyIpOkkuc3BsaXQzMih0aGlzLmgsImJpZyIpfX0sNzk5Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNjQzNiksXz15KDkzNDQpO2Z1bmN0aW9uIGcoKXtpZighKHRoaXMgaW5zdGFuY2VvZiBnKSlyZXR1cm4gbmV3IGc7Xy5jYWxsKHRoaXMpLHRoaXMuaD1bMzIzODM3MTAzMiw5''@;'; put 'put ''MTQxNTA2NjMsODEyNzAyOTk5LDQxNDQ5MTI2OTcsNDI5MDc3NTg1NywxNzUwNjAzMDI1LDE2OTQwNzY4MzksMzIwNDA3NTQyOF19SS5pbmhlcml0cyhnLF8pLHVlLmV4cG9ydHM9ZyxnLmJsb2NrU2l6ZT01MTIsZy5vdXRTaXplPTIyNCxnLmhtYWNTdHJlbmd0aD0xOTIsZy5wYWRMZW5ndGg9''@;'; put 'put ''NjQsZy5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbih3KXtyZXR1cm4iaGV4Ij09PXc/SS50b0hleDMyKHRoaXMuaC5zbGljZSgwLDcpLCJiaWciKTpJLnNwbGl0MzIodGhpcy5oLnNsaWNlKDAsNyksImJpZyIpfX0sOTM0NDoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDY0MzYp''@;'; put 'put ''LF89eSg1NzcyKSxnPXkoNzAzOCksQj15KDk3NDYpLHc9SS5zdW0zMixQPUkuc3VtMzJfNCxGPUkuc3VtMzJfNSxPPWcuY2gzMix6PWcubWFqMzIsTj1nLnMwXzI1NixMPWcuczFfMjU2LEs9Zy5nMF8yNTYsVT1nLmcxXzI1NixXPV8uQmxvY2tIYXNoLFk9WzExMTYzNTI0MDgsMTg5OTQ0NzQ0''@;'; put 'put ''MSwzMDQ5MzIzNDcxLDM5MjEwMDk1NzMsOTYxOTg3MTYzLDE1MDg5NzA5OTMsMjQ1MzYzNTc0OCwyODcwNzYzMjIxLDM2MjQzODEwODAsMzEwNTk4NDAxLDYwNzIyNTI3OCwxNDI2ODgxOTg3LDE5MjUwNzgzODgsMjE2MjA3ODIwNiwyNjE0ODg4MTAzLDMyNDgyMjI1ODAsMzgzNTM5MDQwMSw0''@;'; put 'put ''MDIyMjI0Nzc0LDI2NDM0NzA3OCw2MDQ4MDc2MjgsNzcwMjU1OTgzLDEyNDkxNTAxMjIsMTU1NTA4MTY5MiwxOTk2MDY0OTg2LDI1NTQyMjA4ODIsMjgyMTgzNDM0OSwyOTUyOTk2ODA4LDMyMTAzMTM2NzEsMzMzNjU3MTg5MSwzNTg0NTI4NzExLDExMzkyNjk5MywzMzgyNDE4OTUsNjY2MzA3''@;'; put 'put ''MjA1LDc3MzUyOTkxMiwxMjk0NzU3MzcyLDEzOTYxODIyOTEsMTY5NTE4MzcwMCwxOTg2NjYxMDUxLDIxNzcwMjYzNTAsMjQ1Njk1NjAzNywyNzMwNDg1OTIxLDI4MjAzMDI0MTEsMzI1OTczMDgwMCwzMzQ1NzY0NzcxLDM1MTYwNjU4MTcsMzYwMDM1MjgwNCw0MDk0NTcxOTA5LDI3NTQyMzM0''@;'; put 'put ''NCw0MzAyMjc3MzQsNTA2OTQ4NjE2LDY1OTA2MDU1Niw4ODM5OTc4NzcsOTU4MTM5NTcxLDEzMjI4MjIyMTgsMTUzNzAwMjA2MywxNzQ3ODczNzc5LDE5NTU1NjIyMjIsMjAyNDEwNDgxNSwyMjI3NzMwNDUyLDIzNjE4NTI0MjQsMjQyODQzNjQ3NCwyNzU2NzM0MTg3LDMyMDQwMzE0NzksMzMy''@;'; put 'put ''OTMyNTI5OF07ZnVuY3Rpb24gcSgpe2lmKCEodGhpcyBpbnN0YW5jZW9mIHEpKXJldHVybiBuZXcgcTtXLmNhbGwodGhpcyksdGhpcy5oPVsxNzc5MDMzNzAzLDMxNDQxMzQyNzcsMTAxMzkwNDI0MiwyNzczNDgwNzYyLDEzNTk4OTMxMTksMjYwMDgyMjkyNCw1Mjg3MzQ2MzUsMTU0MTQ1OTIy''@;'; put 'put ''NV0sdGhpcy5rPVksdGhpcy5XPW5ldyBBcnJheSg2NCl9SS5pbmhlcml0cyhxLFcpLHVlLmV4cG9ydHM9cSxxLmJsb2NrU2l6ZT01MTIscS5vdXRTaXplPTI1NixxLmhtYWNTdHJlbmd0aD0xOTIscS5wYWRMZW5ndGg9NjQscS5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihKLG5lKXtmb3Io''@;'; put 'put ''dmFyIGllPXRoaXMuVyxsZT0wO2xlPDE2O2xlKyspaWVbbGVdPUpbbmUrbGVdO2Zvcig7bGU8aWUubGVuZ3RoO2xlKyspaWVbbGVdPVAoVShpZVtsZS0yXSksaWVbbGUtN10sSyhpZVtsZS0xNV0pLGllW2xlLTE2XSk7dmFyIG1lPXRoaXMuaFswXSxfZT10aGlzLmhbMV0sVGU9dGhpcy5oWzJd''@;'; put 'put ''LFNlPXRoaXMuaFszXSxqZT10aGlzLmhbNF0sVj10aGlzLmhbNV0scD10aGlzLmhbNl0sYj10aGlzLmhbN107Zm9yKEIodGhpcy5rLmxlbmd0aD09PWllLmxlbmd0aCksbGU9MDtsZTxpZS5sZW5ndGg7bGUrKyl7dmFyIHg9RihiLEwoamUpLE8oamUsVixwKSx0aGlzLmtbbGVdLGllW2xlXSks''@;'; put 'put ''Qz13KE4obWUpLHoobWUsX2UsVGUpKTtiPXAscD1WLFY9amUsamU9dyhTZSx4KSxTZT1UZSxUZT1fZSxfZT1tZSxtZT13KHgsQyl9dGhpcy5oWzBdPXcodGhpcy5oWzBdLG1lKSx0aGlzLmhbMV09dyh0aGlzLmhbMV0sX2UpLHRoaXMuaFsyXT13KHRoaXMuaFsyXSxUZSksdGhpcy5oWzNdPXco''@;'; put 'put ''dGhpcy5oWzNdLFNlKSx0aGlzLmhbNF09dyh0aGlzLmhbNF0samUpLHRoaXMuaFs1XT13KHRoaXMuaFs1XSxWKSx0aGlzLmhbNl09dyh0aGlzLmhbNl0scCksdGhpcy5oWzddPXcodGhpcy5oWzddLGIpfSxxLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKEope3JldHVybiJoZXgiPT09Sj9J''@;'; put 'put ''LnRvSGV4MzIodGhpcy5oLCJiaWciKTpJLnNwbGl0MzIodGhpcy5oLCJiaWciKX19LDc3MjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDY0MzYpLF89eSg1OTAwKTtmdW5jdGlvbiBnKCl7aWYoISh0aGlzIGluc3RhbmNlb2YgZykpcmV0dXJuIG5ldyBnO18uY2FsbCh0aGlzKSx0''@;'; put 'put ''aGlzLmg9WzM0MTgwNzAzNjUsMzIzODM3MTAzMiwxNjU0MjcwMjUwLDkxNDE1MDY2MywyNDM4NTI5MzcwLDgxMjcwMjk5OSwzNTU0NjIzNjAsNDE0NDkxMjY5NywxNzMxNDA1NDE1LDQyOTA3NzU4NTcsMjM5NDE4MDIzMSwxNzUwNjAzMDI1LDM2NzUwMDg1MjUsMTY5NDA3NjgzOSwxMjAzMDYy''@;'; put 'put ''ODEzLDMyMDQwNzU0MjhdfUkuaW5oZXJpdHMoZyxfKSx1ZS5leHBvcnRzPWcsZy5ibG9ja1NpemU9MTAyNCxnLm91dFNpemU9Mzg0LGcuaG1hY1N0cmVuZ3RoPTE5MixnLnBhZExlbmd0aD0xMjgsZy5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbih3KXtyZXR1cm4iaGV4Ij09PXc/SS50b0hl''@;'; put 'put ''eDMyKHRoaXMuaC5zbGljZSgwLDEyKSwiYmlnIik6SS5zcGxpdDMyKHRoaXMuaC5zbGljZSgwLDEyKSwiYmlnIil9fSw1OTAwOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNjQzNiksXz15KDU3NzIpLGc9eSg5NzQ2KSxCPUkucm90cjY0X2hpLHc9SS5yb3RyNjRfbG8sUD1JLnNo''@;'; put 'put ''cjY0X2hpLEY9SS5zaHI2NF9sbyxPPUkuc3VtNjQsej1JLnN1bTY0X2hpLE49SS5zdW02NF9sbyxMPUkuc3VtNjRfNF9oaSxLPUkuc3VtNjRfNF9sbyxVPUkuc3VtNjRfNV9oaSxXPUkuc3VtNjRfNV9sbyxZPV8uQmxvY2tIYXNoLHE9WzExMTYzNTI0MDgsMzYwOTc2NzQ1OCwxODk5NDQ3NDQx''@;'; put 'put ''LDYwMjg5MTcyNSwzMDQ5MzIzNDcxLDM5NjQ0ODQzOTksMzkyMTAwOTU3MywyMTczMjk1NTQ4LDk2MTk4NzE2Myw0MDgxNjI4NDcyLDE1MDg5NzA5OTMsMzA1MzgzNDI2NSwyNDUzNjM1NzQ4LDI5Mzc2NzE1NzksMjg3MDc2MzIyMSwzNjY0NjA5NTYwLDM2MjQzODEwODAsMjczNDg4MzM5NCwz''@;'; put 'put ''MTA1OTg0MDEsMTE2NDk5NjU0Miw2MDcyMjUyNzgsMTMyMzYxMDc2NCwxNDI2ODgxOTg3LDM1OTAzMDQ5OTQsMTkyNTA3ODM4OCw0MDY4MTgyMzgzLDIxNjIwNzgyMDYsOTkxMzM2MTEzLDI2MTQ4ODgxMDMsNjMzODAzMzE3LDMyNDgyMjI1ODAsMzQ3OTc3NDg2OCwzODM1MzkwNDAxLDI2NjY2''@;'; put 'put ''MTM0NTgsNDAyMjIyNDc3NCw5NDQ3MTExMzksMjY0MzQ3MDc4LDIzNDEyNjI3NzMsNjA0ODA3NjI4LDIwMDc4MDA5MzMsNzcwMjU1OTgzLDE0OTU5OTA5MDEsMTI0OTE1MDEyMiwxODU2NDMxMjM1LDE1NTUwODE2OTIsMzE3NTIxODEzMiwxOTk2MDY0OTg2LDIxOTg5NTA4MzcsMjU1NDIyMDg4''@;'; put 'put ''MiwzOTk5NzE5MzM5LDI4MjE4MzQzNDksNzY2Nzg0MDE2LDI5NTI5OTY4MDgsMjU2NjU5NDg3OSwzMjEwMzEzNjcxLDMyMDMzMzc5NTYsMzMzNjU3MTg5MSwxMDM0NDU3MDI2LDM1ODQ1Mjg3MTEsMjQ2Njk0ODkwMSwxMTM5MjY5OTMsMzc1ODMyNjM4MywzMzgyNDE4OTUsMTY4NzE3OTM2LDY2''@;'; put 'put ''NjMwNzIwNSwxMTg4MTc5OTY0LDc3MzUyOTkxMiwxNTQ2MDQ1NzM0LDEyOTQ3NTczNzIsMTUyMjgwNTQ4NSwxMzk2MTgyMjkxLDI2NDM4MzM4MjMsMTY5NTE4MzcwMCwyMzQzNTI3MzkwLDE5ODY2NjEwNTEsMTAxNDQ3NzQ4MCwyMTc3MDI2MzUwLDEyMDY3NTkxNDIsMjQ1Njk1NjAzNywzNDQw''@;'; put 'put ''Nzc2MjcsMjczMDQ4NTkyMSwxMjkwODYzNDYwLDI4MjAzMDI0MTEsMzE1ODQ1NDI3MywzMjU5NzMwODAwLDM1MDU5NTI2NTcsMzM0NTc2NDc3MSwxMDYyMTcwMDgsMzUxNjA2NTgxNywzNjA2MDA4MzQ0LDM2MDAzNTI4MDQsMTQzMjcyNTc3Niw0MDk0NTcxOTA5LDE0NjcwMzE1OTQsMjc1NDIz''@;'; put 'put ''MzQ0LDg1MTE2OTcyMCw0MzAyMjc3MzQsMzEwMDgyMzc1Miw1MDY5NDg2MTYsMTM2MzI1ODE5NSw2NTkwNjA1NTYsMzc1MDY4NTU5Myw4ODM5OTc4NzcsMzc4NTA1MDI4MCw5NTgxMzk1NzEsMzMxODMwNzQyNywxMzIyODIyMjE4LDM4MTI3MjM0MDMsMTUzNzAwMjA2MywyMDAzMDM0OTk1LDE3''@;'; put 'put ''NDc4NzM3NzksMzYwMjAzNjg5OSwxOTU1NTYyMjIyLDE1NzU5OTAwMTIsMjAyNDEwNDgxNSwxMTI1NTkyOTI4LDIyMjc3MzA0NTIsMjcxNjkwNDMwNiwyMzYxODUyNDI0LDQ0Mjc3NjA0NCwyNDI4NDM2NDc0LDU5MzY5ODM0NCwyNzU2NzM0MTg3LDM3MzMxMTAyNDksMzIwNDAzMTQ3OSwyOTk5''@;'; put 'put ''MzUxNTczLDMzMjkzMjUyOTgsMzgxNTkyMDQyNywzMzkxNTY5NjE0LDM5MjgzODM5MDAsMzUxNTI2NzI3MSw1NjYyODA3MTEsMzk0MDE4NzYwNiwzNDU0MDY5NTM0LDQxMTg2MzAyNzEsNDAwMDIzOTk5MiwxMTY0MTg0NzQsMTkxNDEzODU1NCwxNzQyOTI0MjEsMjczMTA1NTI3MCwyODkzODAz''@;'; put 'put ''NTYsMzIwMzk5MzAwNiw0NjAzOTMyNjksMzIwNjIwMzE1LDY4NTQ3MTczMyw1ODc0OTY4MzYsODUyMTQyOTcxLDEwODY3OTI4NTEsMTAxNzAzNjI5OCwzNjU1NDMxMDAsMTEyNjAwMDU4MCwyNjE4Mjk3Njc2LDEyODgwMzM0NzAsMzQwOTg1NTE1OCwxNTAxNTA1OTQ4LDQyMzQ1MDk4NjYsMTYw''@;'; put 'put ''NzE2NzkxNSw5ODcxNjc0NjgsMTgxNjQwMjMxNiwxMjQ2MTg5NTkxXTtmdW5jdGlvbiBlZSgpe2lmKCEodGhpcyBpbnN0YW5jZW9mIGVlKSlyZXR1cm4gbmV3IGVlO1kuY2FsbCh0aGlzKSx0aGlzLmg9WzE3NzkwMzM3MDMsNDA4OTIzNTcyMCwzMTQ0MTM0Mjc3LDIyMjc4NzM1OTUsMTAxMzkw''@;'; put 'put ''NDI0Miw0MjcxMTc1NzIzLDI3NzM0ODA3NjIsMTU5NTc1MDEyOSwxMzU5ODkzMTE5LDI5MTc1NjUxMzcsMjYwMDgyMjkyNCw3MjU1MTExOTksNTI4NzM0NjM1LDQyMTUzODk1NDcsMTU0MTQ1OTIyNSwzMjcwMzMyMDldLHRoaXMuaz1xLHRoaXMuVz1uZXcgQXJyYXkoMTYwKX1mdW5jdGlvbiBK''@;'; put 'put ''KHgsQyxULEgsail7dmFyIEU9eCZUXn54Jmo7cmV0dXJuIEU8MCYmKEUrPTQyOTQ5NjcyOTYpLEV9ZnVuY3Rpb24gbmUoeCxDLFQsSCxqLEUpe3ZhciBtPUMmSF5+QyZFO3JldHVybiBtPDAmJihtKz00Mjk0OTY3Mjk2KSxtfWZ1bmN0aW9uIGllKHgsQyxULEgsail7dmFyIEU9eCZUXngmal5U''@;'; put 'put ''Jmo7cmV0dXJuIEU8MCYmKEUrPTQyOTQ5NjcyOTYpLEV9ZnVuY3Rpb24gbGUoeCxDLFQsSCxqLEUpe3ZhciBtPUMmSF5DJkVeSCZFO3JldHVybiBtPDAmJihtKz00Mjk0OTY3Mjk2KSxtfWZ1bmN0aW9uIG1lKHgsQyl7dmFyIEU9Qih4LEMsMjgpXkIoQyx4LDIpXkIoQyx4LDcpO3JldHVybiBF''@;'; put 'put ''PDAmJihFKz00Mjk0OTY3Mjk2KSxFfWZ1bmN0aW9uIF9lKHgsQyl7dmFyIEU9dyh4LEMsMjgpXncoQyx4LDIpXncoQyx4LDcpO3JldHVybiBFPDAmJihFKz00Mjk0OTY3Mjk2KSxFfWZ1bmN0aW9uIFRlKHgsQyl7dmFyIEU9Qih4LEMsMTQpXkIoeCxDLDE4KV5CKEMseCw5KTtyZXR1cm4gRTww''@;'; put 'put ''JiYoRSs9NDI5NDk2NzI5NiksRX1mdW5jdGlvbiBTZSh4LEMpe3ZhciBFPXcoeCxDLDE0KV53KHgsQywxOCledyhDLHgsOSk7cmV0dXJuIEU8MCYmKEUrPTQyOTQ5NjcyOTYpLEV9ZnVuY3Rpb24gamUoeCxDKXt2YXIgRT1CKHgsQywxKV5CKHgsQyw4KV5QKHgsQyw3KTtyZXR1cm4gRTwwJiYo''@;'; put 'put ''RSs9NDI5NDk2NzI5NiksRX1mdW5jdGlvbiBWKHgsQyl7dmFyIEU9dyh4LEMsMSledyh4LEMsOCleRih4LEMsNyk7cmV0dXJuIEU8MCYmKEUrPTQyOTQ5NjcyOTYpLEV9ZnVuY3Rpb24gcCh4LEMpe3ZhciBFPUIoeCxDLDE5KV5CKEMseCwyOSleUCh4LEMsNik7cmV0dXJuIEU8MCYmKEUrPTQy''@;'; put 'put ''OTQ5NjcyOTYpLEV9ZnVuY3Rpb24gYih4LEMpe3ZhciBFPXcoeCxDLDE5KV53KEMseCwyOSleRih4LEMsNik7cmV0dXJuIEU8MCYmKEUrPTQyOTQ5NjcyOTYpLEV9SS5pbmhlcml0cyhlZSxZKSx1ZS5leHBvcnRzPWVlLGVlLmJsb2NrU2l6ZT0xMDI0LGVlLm91dFNpemU9NTEyLGVlLmhtYWNT''@;'; put 'put ''dHJlbmd0aD0xOTIsZWUucGFkTGVuZ3RoPTEyOCxlZS5wcm90b3R5cGUuX3ByZXBhcmVCbG9jaz1mdW5jdGlvbihDLFQpe2Zvcih2YXIgSD10aGlzLlcsaj0wO2o8MzI7aisrKUhbal09Q1tUK2pdO2Zvcig7ajxILmxlbmd0aDtqKz0yKXt2YXIgRT1wKEhbai00XSxIW2otM10pLG09YihIW2ot''@;'; put 'put ''NF0sSFtqLTNdKSxBPUhbai0xNF0sYWU9SFtqLTEzXSx0ZT1qZShIW2otMzBdLEhbai0yOV0pLHNlPVYoSFtqLTMwXSxIW2otMjldKSx3ZT1IW2otMzJdLFVlPUhbai0zMV07SFtqXT1MKEUsbSxBLGFlLHRlLHNlLHdlLFVlKSxIW2orMV09SyhFLG0sQSxhZSx0ZSxzZSx3ZSxVZSl9fSxlZS5w''@;'; put 'put ''cm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihDLFQpe3RoaXMuX3ByZXBhcmVCbG9jayhDLFQpO3ZhciBIPXRoaXMuVyxqPXRoaXMuaFswXSxFPXRoaXMuaFsxXSxtPXRoaXMuaFsyXSxBPXRoaXMuaFszXSxhZT10aGlzLmhbNF0sdGU9dGhpcy5oWzVdLHNlPXRoaXMuaFs2XSx3ZT10aGlzLmhb''@;'; put 'put ''N10sVWU9dGhpcy5oWzhdLEplPXRoaXMuaFs5XSxvdD10aGlzLmhbMTBdLHhlPXRoaXMuaFsxMV0sdmU9dGhpcy5oWzEyXSxYZT10aGlzLmhbMTNdLHplPXRoaXMuaFsxNF0sRGU9dGhpcy5oWzE1XTtnKHRoaXMuay5sZW5ndGg9PT1ILmxlbmd0aCk7Zm9yKHZhciBGZT0wO0ZlPEgubGVuZ3Ro''@;'; put 'put ''O0ZlKz0yKXt2YXIgT2U9emUsSWU9RGUsVmU9VGUoVWUsSmUpLGtlPVNlKFVlLEplKSxBZT1KKFVlLDAsb3QsMCx2ZSksX3Q9bmUoMCxKZSwwLHhlLDAsWGUpLG50PXRoaXMua1tGZV0sUWU9dGhpcy5rW0ZlKzFdLHVuPUhbRmVdLHl0PUhbRmUrMV0sTXQ9VShPZSxJZSxWZSxrZSxBZSxfdCxu''@;'; put 'put ''dCxRZSx1bix5dCksRHQ9VyhPZSxJZSxWZSxrZSxBZSxfdCxudCxRZSx1bix5dCk7T2U9bWUoaixFKSxJZT1fZShqLEUpLFZlPWllKGosMCxtLDAsYWUpLGtlPWxlKDAsRSwwLEEsMCx0ZSk7dmFyIGl0PXooT2UsSWUsVmUsa2UpLCRlPU4oT2UsSWUsVmUsa2UpO3plPXZlLERlPVhlLHZlPW90''@;'; put 'put ''LFhlPXhlLG90PVVlLHhlPUplLFVlPXooc2Usd2UsTXQsRHQpLEplPU4od2Usd2UsTXQsRHQpLHNlPWFlLHdlPXRlLGFlPW0sdGU9QSxtPWosQT1FLGo9eihNdCxEdCxpdCwkZSksRT1OKE10LER0LGl0LCRlKX1PKHRoaXMuaCwwLGosRSksTyh0aGlzLmgsMixtLEEpLE8odGhpcy5oLDQsYWUs''@;'; put 'put ''dGUpLE8odGhpcy5oLDYsc2Usd2UpLE8odGhpcy5oLDgsVWUsSmUpLE8odGhpcy5oLDEwLG90LHhlKSxPKHRoaXMuaCwxMix2ZSxYZSksTyh0aGlzLmgsMTQsemUsRGUpfSxlZS5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbihDKXtyZXR1cm4iaGV4Ij09PUM/SS50b0hleDMyKHRoaXMuaCwi''@;'; put 'put ''YmlnIik6SS5zcGxpdDMyKHRoaXMuaCwiYmlnIil9fSw3MDM4Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBfPXkoNjQzNikucm90cjMyO2Z1bmN0aW9uIEIoTCxLLFUpe3JldHVybiBMJktefkwmVX1mdW5jdGlvbiB3KEwsSyxVKXtyZXR1cm4gTCZLXkwmVV5LJlV9ZnVuY3Rpb24gUChM''@;'; put 'put ''LEssVSl7cmV0dXJuIExeS15VfVguZnRfMT1mdW5jdGlvbiBnKEwsSyxVLFcpe3JldHVybiAwPT09TD9CKEssVSxXKToxPT09THx8Mz09PUw/UChLLFUsVyk6Mj09PUw/dyhLLFUsVyk6dm9pZCAwfSxYLmNoMzI9QixYLm1hajMyPXcsWC5wMzI9UCxYLnMwXzI1Nj1mdW5jdGlvbiBGKEwpe3Jl''@;'; put 'put ''dHVybiBfKEwsMileXyhMLDEzKV5fKEwsMjIpfSxYLnMxXzI1Nj1mdW5jdGlvbiBPKEwpe3JldHVybiBfKEwsNileXyhMLDExKV5fKEwsMjUpfSxYLmcwXzI1Nj1mdW5jdGlvbiB6KEwpe3JldHVybiBfKEwsNyleXyhMLDE4KV5MPj4+M30sWC5nMV8yNTY9ZnVuY3Rpb24gTihMKXtyZXR1cm4g''@;'; put 'put ''XyhMLDE3KV5fKEwsMTkpXkw+Pj4xMH19LDY0MzY6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg5NzQ2KSxfPXkoNTcxNyk7ZnVuY3Rpb24gZyhiLHgpe3JldHVybiEoNTUyOTYhPSg2NDUxMiZiLmNoYXJDb2RlQXQoeCkpfHx4PDB8fHgrMT49Yi5sZW5ndGgpJiY1NjMyMD09KDY0''@;'; put 'put ''NTEyJmIuY2hhckNvZGVBdCh4KzEpKX1mdW5jdGlvbiBQKGIpe3JldHVybihiPj4+MjR8Yj4+PjgmNjUyODB8Yjw8OCYxNjcxMTY4MHwoMjU1JmIpPDwyNCk+Pj4wfWZ1bmN0aW9uIE8oYil7cmV0dXJuIDE9PT1iLmxlbmd0aD8iMCIrYjpifWZ1bmN0aW9uIHooYil7cmV0dXJuIDc9PT1iLmxl''@;'; put 'put ''bmd0aD8iMCIrYjo2PT09Yi5sZW5ndGg/IjAwIitiOjU9PT1iLmxlbmd0aD8iMDAwIitiOjQ9PT1iLmxlbmd0aD8iMDAwMCIrYjozPT09Yi5sZW5ndGg/IjAwMDAwIitiOjI9PT1iLmxlbmd0aD8iMDAwMDAwIitiOjE9PT1iLmxlbmd0aD8iMDAwMDAwMCIrYjpifVguaW5oZXJpdHM9XyxYLnRv''@;'; put 'put ''QXJyYXk9ZnVuY3Rpb24gQihiLHgpe2lmKEFycmF5LmlzQXJyYXkoYikpcmV0dXJuIGIuc2xpY2UoKTtpZighYilyZXR1cm5bXTt2YXIgQz1bXTtpZigic3RyaW5nIj09dHlwZW9mIGIpaWYoeCl7aWYoImhleCI9PT14KWZvcigoYj1iLnJlcGxhY2UoL1teYS16MC05XSsvZ2ksIiIpKS5sZW5n''@;'; put 'put ''dGglMiE9MCYmKGI9IjAiK2IpLEg9MDtIPGIubGVuZ3RoO0grPTIpQy5wdXNoKHBhcnNlSW50KGJbSF0rYltIKzFdLDE2KSl9ZWxzZSBmb3IodmFyIFQ9MCxIPTA7SDxiLmxlbmd0aDtIKyspe3ZhciBqPWIuY2hhckNvZGVBdChIKTtqPDEyOD9DW1QrK109ajpqPDIwNDg/KENbVCsrXT1qPj42''@;'; put 'put ''fDE5MixDW1QrK109NjMmanwxMjgpOmcoYixIKT8oaj02NTUzNisoKDEwMjMmaik8PDEwKSsoMTAyMyZiLmNoYXJDb2RlQXQoKytIKSksQ1tUKytdPWo+PjE4fDI0MCxDW1QrK109aj4+MTImNjN8MTI4LENbVCsrXT1qPj42JjYzfDEyOCxDW1QrK109NjMmanwxMjgpOihDW1QrK109aj4+MTJ8''@;'; put 'put ''MjI0LENbVCsrXT1qPj42JjYzfDEyOCxDW1QrK109NjMmanwxMjgpfWVsc2UgZm9yKEg9MDtIPGIubGVuZ3RoO0grKylDW0hdPTB8YltIXTtyZXR1cm4gQ30sWC50b0hleD1mdW5jdGlvbiB3KGIpe2Zvcih2YXIgeD0iIixDPTA7QzxiLmxlbmd0aDtDKyspeCs9TyhiW0NdLnRvU3RyaW5nKDE2''@;'; put 'put ''KSk7cmV0dXJuIHh9LFguaHRvbmw9UCxYLnRvSGV4MzI9ZnVuY3Rpb24gRihiLHgpe2Zvcih2YXIgQz0iIixUPTA7VDxiLmxlbmd0aDtUKyspe3ZhciBIPWJbVF07ImxpdHRsZSI9PT14JiYoSD1QKEgpKSxDKz16KEgudG9TdHJpbmcoMTYpKX1yZXR1cm4gQ30sWC56ZXJvMj1PLFguemVybzg9''@;'; put 'put ''eixYLmpvaW4zMj1mdW5jdGlvbiBOKGIseCxDLFQpe3ZhciBIPUMteDtJKEglND09MCk7Zm9yKHZhciBqPW5ldyBBcnJheShILzQpLEU9MCxtPXg7RTxqLmxlbmd0aDtFKyssbSs9NClqW0VdPSgiYmlnIj09PVQ/YlttXTw8MjR8YlttKzFdPDwxNnxiW20rMl08PDh8YlttKzNdOmJbbSszXTw8''@;'; put 'put ''MjR8YlttKzJdPDwxNnxiW20rMV08PDh8YlttXSk+Pj4wO3JldHVybiBqfSxYLnNwbGl0MzI9ZnVuY3Rpb24gTChiLHgpe2Zvcih2YXIgQz1uZXcgQXJyYXkoNCpiLmxlbmd0aCksVD0wLEg9MDtUPGIubGVuZ3RoO1QrKyxIKz00KXt2YXIgaj1iW1RdOyJiaWciPT09eD8oQ1tIXT1qPj4+MjQs''@;'; put 'put ''Q1tIKzFdPWo+Pj4xNiYyNTUsQ1tIKzJdPWo+Pj44JjI1NSxDW0grM109MjU1JmopOihDW0grM109aj4+PjI0LENbSCsyXT1qPj4+MTYmMjU1LENbSCsxXT1qPj4+OCYyNTUsQ1tIXT0yNTUmail9cmV0dXJuIEN9LFgucm90cjMyPWZ1bmN0aW9uIEsoYix4KXtyZXR1cm4gYj4+Pnh8Yjw8MzIt''@;'; put 'put ''eH0sWC5yb3RsMzI9ZnVuY3Rpb24gVShiLHgpe3JldHVybiBiPDx4fGI+Pj4zMi14fSxYLnN1bTMyPWZ1bmN0aW9uIFcoYix4KXtyZXR1cm4gYit4Pj4+MH0sWC5zdW0zMl8zPWZ1bmN0aW9uIFkoYix4LEMpe3JldHVybiBiK3grQz4+PjB9LFguc3VtMzJfND1mdW5jdGlvbiBxKGIseCxDLFQp''@;'; put 'put ''e3JldHVybiBiK3grQytUPj4+MH0sWC5zdW0zMl81PWZ1bmN0aW9uIGVlKGIseCxDLFQsSCl7cmV0dXJuIGIreCtDK1QrSD4+PjB9LFguc3VtNjQ9ZnVuY3Rpb24gSihiLHgsQyxUKXt2YXIgRT1UK2JbeCsxXT4+PjA7Ylt4XT0oRTxUPzE6MCkrQytiW3hdPj4+MCxiW3grMV09RX0sWC5zdW02''@;'; put 'put ''NF9oaT1mdW5jdGlvbiBuZShiLHgsQyxUKXtyZXR1cm4oeCtUPj4+MDx4PzE6MCkrYitDPj4+MH0sWC5zdW02NF9sbz1mdW5jdGlvbiBpZShiLHgsQyxUKXtyZXR1cm4geCtUPj4+MH0sWC5zdW02NF80X2hpPWZ1bmN0aW9uIGxlKGIseCxDLFQsSCxqLEUsbSl7dmFyIEE9MCxhZT14O3JldHVy''@;'; put 'put ''biBBKz0oYWU9YWUrVD4+PjApPHg/MTowLEErPShhZT1hZStqPj4+MCk8aj8xOjAsYitDK0grRSsoQSs9KGFlPWFlK20+Pj4wKTxtPzE6MCk+Pj4wfSxYLnN1bTY0XzRfbG89ZnVuY3Rpb24gbWUoYix4LEMsVCxILGosRSxtKXtyZXR1cm4geCtUK2orbT4+PjB9LFguc3VtNjRfNV9oaT1mdW5j''@;'; put 'put ''dGlvbiBfZShiLHgsQyxULEgsaixFLG0sQSxhZSl7dmFyIHRlPTAsc2U9eDtyZXR1cm4gdGUrPShzZT1zZStUPj4+MCk8eD8xOjAsdGUrPShzZT1zZStqPj4+MCk8aj8xOjAsdGUrPShzZT1zZSttPj4+MCk8bT8xOjAsYitDK0grRStBKyh0ZSs9KHNlPXNlK2FlPj4+MCk8YWU/MTowKT4+PjB9''@;'; put 'put ''LFguc3VtNjRfNV9sbz1mdW5jdGlvbiBUZShiLHgsQyxULEgsaixFLG0sQSxhZSl7cmV0dXJuIHgrVCtqK20rYWU+Pj4wfSxYLnJvdHI2NF9oaT1mdW5jdGlvbiBTZShiLHgsQyl7cmV0dXJuKHg8PDMyLUN8Yj4+PkMpPj4+MH0sWC5yb3RyNjRfbG89ZnVuY3Rpb24gamUoYix4LEMpe3JldHVy''@;'; put 'put ''bihiPDwzMi1DfHg+Pj5DKT4+PjB9LFguc2hyNjRfaGk9ZnVuY3Rpb24gVihiLHgsQyl7cmV0dXJuIGI+Pj5DfSxYLnNocjY0X2xvPWZ1bmN0aW9uIHAoYix4LEMpe3JldHVybihiPDwzMi1DfHg+Pj5DKT4+PjB9fSw4ODI0Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPUZ1bmN0aW9u''@;'; put 'put ''LnByb3RvdHlwZS5jYWxsLF89T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxnPXkoODYxMik7dWUuZXhwb3J0cz1nLmNhbGwoSSxfKX0sMjE1NjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDM3MTUpLF89eSg0NTA0KSxnPXkoOTc0Nik7ZnVuY3Rpb24gQih3KXtpZigh''@;'; put 'put ''KHRoaXMgaW5zdGFuY2VvZiBCKSlyZXR1cm4gbmV3IEIodyk7dGhpcy5oYXNoPXcuaGFzaCx0aGlzLnByZWRSZXNpc3Q9ISF3LnByZWRSZXNpc3QsdGhpcy5vdXRMZW49dGhpcy5oYXNoLm91dFNpemUsdGhpcy5taW5FbnRyb3B5PXcubWluRW50cm9weXx8dGhpcy5oYXNoLmhtYWNTdHJlbmd0''@;'; put 'put ''aCx0aGlzLl9yZXNlZWQ9bnVsbCx0aGlzLnJlc2VlZEludGVydmFsPW51bGwsdGhpcy5LPW51bGwsdGhpcy5WPW51bGw7dmFyIFA9Xy50b0FycmF5KHcuZW50cm9weSx3LmVudHJvcHlFbmN8fCJoZXgiKSxGPV8udG9BcnJheSh3Lm5vbmNlLHcubm9uY2VFbmN8fCJoZXgiKSxPPV8udG9BcnJh''@;'; put 'put ''eSh3LnBlcnMsdy5wZXJzRW5jfHwiaGV4Iik7ZyhQLmxlbmd0aD49dGhpcy5taW5FbnRyb3B5LzgsIk5vdCBlbm91Z2ggZW50cm9weS4gTWluaW11bSBpczogIit0aGlzLm1pbkVudHJvcHkrIiBiaXRzIiksdGhpcy5faW5pdChQLEYsTyl9dWUuZXhwb3J0cz1CLEIucHJvdG90eXBlLl9pbml0''@;'; put 'put ''PWZ1bmN0aW9uKFAsRixPKXt2YXIgej1QLmNvbmNhdChGKS5jb25jYXQoTyk7dGhpcy5LPW5ldyBBcnJheSh0aGlzLm91dExlbi84KSx0aGlzLlY9bmV3IEFycmF5KHRoaXMub3V0TGVuLzgpO2Zvcih2YXIgTj0wO048dGhpcy5WLmxlbmd0aDtOKyspdGhpcy5LW05dPTAsdGhpcy5WW05dPTE7''@;'; put 'put ''dGhpcy5fdXBkYXRlKHopLHRoaXMuX3Jlc2VlZD0xLHRoaXMucmVzZWVkSW50ZXJ2YWw9MjgxNDc0OTc2NzEwNjU2fSxCLnByb3RvdHlwZS5faG1hYz1mdW5jdGlvbigpe3JldHVybiBuZXcgSS5obWFjKHRoaXMuaGFzaCx0aGlzLkspfSxCLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKFAp''@;'; put 'put ''e3ZhciBGPXRoaXMuX2htYWMoKS51cGRhdGUodGhpcy5WKS51cGRhdGUoWzBdKTtQJiYoRj1GLnVwZGF0ZShQKSksdGhpcy5LPUYuZGlnZXN0KCksdGhpcy5WPXRoaXMuX2htYWMoKS51cGRhdGUodGhpcy5WKS5kaWdlc3QoKSxQJiYodGhpcy5LPXRoaXMuX2htYWMoKS51cGRhdGUodGhpcy5W''@;'; put 'put ''KS51cGRhdGUoWzFdKS51cGRhdGUoUCkuZGlnZXN0KCksdGhpcy5WPXRoaXMuX2htYWMoKS51cGRhdGUodGhpcy5WKS5kaWdlc3QoKSl9LEIucHJvdG90eXBlLnJlc2VlZD1mdW5jdGlvbihQLEYsTyx6KXsic3RyaW5nIiE9dHlwZW9mIEYmJih6PU8sTz1GLEY9bnVsbCksUD1fLnRvQXJyYXko''@;'; put 'put ''UCxGKSxPPV8udG9BcnJheShPLHopLGcoUC5sZW5ndGg+PXRoaXMubWluRW50cm9weS84LCJOb3QgZW5vdWdoIGVudHJvcHkuIE1pbmltdW0gaXM6ICIrdGhpcy5taW5FbnRyb3B5KyIgYml0cyIpLHRoaXMuX3VwZGF0ZShQLmNvbmNhdChPfHxbXSkpLHRoaXMuX3Jlc2VlZD0xfSxCLnByb3Rv''@;'; put 'put ''dHlwZS5nZW5lcmF0ZT1mdW5jdGlvbihQLEYsTyx6KXtpZih0aGlzLl9yZXNlZWQ+dGhpcy5yZXNlZWRJbnRlcnZhbCl0aHJvdyBuZXcgRXJyb3IoIlJlc2VlZCBpcyByZXF1aXJlZCIpOyJzdHJpbmciIT10eXBlb2YgRiYmKHo9TyxPPUYsRj1udWxsKSxPJiYoTz1fLnRvQXJyYXkoTyx6fHwi''@;'; put 'put ''aGV4IiksdGhpcy5fdXBkYXRlKE8pKTtmb3IodmFyIE49W107Ti5sZW5ndGg8UDspdGhpcy5WPXRoaXMuX2htYWMoKS51cGRhdGUodGhpcy5WKS5kaWdlc3QoKSxOPU4uY29uY2F0KHRoaXMuVik7dmFyIEw9Ti5zbGljZSgwLFApO3JldHVybiB0aGlzLl91cGRhdGUoTyksdGhpcy5fcmVzZWVk''@;'; put 'put ''KyssXy5lbmNvZGUoTCxGKX19LDY0NToodWUsWCk9PntYLnJlYWQ9ZnVuY3Rpb24oeSxJLF8sZyxCKXt2YXIgdyxQLEY9OCpCLWctMSxPPSgxPDxGKS0xLHo9Tz4+MSxOPS03LEw9Xz9CLTE6MCxLPV8/LTE6MSxVPXlbSStMXTtmb3IoTCs9Syx3PVUmKDE8PC1OKS0xLFU+Pj0tTixOKz1GO04+''@;'; put 'put ''MDt3PTI1Nip3K3lbSStMXSxMKz1LLE4tPTgpO2ZvcihQPXcmKDE8PC1OKS0xLHc+Pj0tTixOKz1nO04+MDtQPTI1NipQK3lbSStMXSxMKz1LLE4tPTgpO2lmKDA9PT13KXc9MS16O2Vsc2V7aWYodz09PU8pcmV0dXJuIFA/TmFOOjEvMCooVT8tMToxKTtQKz1NYXRoLnBvdygyLGcpLHctPXp9''@;'; put 'put ''cmV0dXJuKFU/LTE6MSkqUCpNYXRoLnBvdygyLHctZyl9LFgud3JpdGU9ZnVuY3Rpb24oeSxJLF8sZyxCLHcpe3ZhciBQLEYsTyx6PTgqdy1CLTEsTj0oMTw8eiktMSxMPU4+PjEsSz0yMz09PUI/TWF0aC5wb3coMiwtMjQpLU1hdGgucG93KDIsLTc3KTowLFU9Zz8wOnctMSxXPWc/MTotMSxZ''@;'; put 'put ''PUk8MHx8MD09PUkmJjEvSTwwPzE6MDtmb3IoST1NYXRoLmFicyhJKSxpc05hTihJKXx8ST09PTEvMD8oRj1pc05hTihJKT8xOjAsUD1OKTooUD1NYXRoLmZsb29yKE1hdGgubG9nKEkpL01hdGguTE4yKSxJKihPPU1hdGgucG93KDIsLVApKTwxJiYoUC0tLE8qPTIpLChJKz1QK0w+PTE/Sy9P''@;'; put 'put ''OksqTWF0aC5wb3coMiwxLUwpKSpPPj0yJiYoUCsrLE8vPTIpLFArTD49Tj8oRj0wLFA9Tik6UCtMPj0xPyhGPShJKk8tMSkqTWF0aC5wb3coMixCKSxQKz1MKTooRj1JKk1hdGgucG93KDIsTC0xKSpNYXRoLnBvdygyLEIpLFA9MCkpO0I+PTg7eVtfK1VdPTI1NSZGLFUrPVcsRi89MjU2LEIt''@;'; put 'put ''PTgpO2ZvcihQPVA8PEJ8Rix6Kz1CO3o+MDt5W18rVV09MjU1JlAsVSs9VyxQLz0yNTYsei09OCk7eVtfK1UtV118PTEyOCpZfX0sNTcxNzp1ZT0+e3VlLmV4cG9ydHM9ImZ1bmN0aW9uIj09dHlwZW9mIE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oeSxJKXtJJiYoeS5zdXBlcl89SSx5LnByb3Rv''@;'; put 'put ''dHlwZT1PYmplY3QuY3JlYXRlKEkucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6eSxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSl9OmZ1bmN0aW9uKHksSSl7aWYoSSl7eS5zdXBlcl89STt2YXIgXz1mdW5jdGlvbigpe307Xy5wcm90b3R5cGU9SS5w''@;'; put 'put ''cm90b3R5cGUseS5wcm90b3R5cGU9bmV3IF8seS5wcm90b3R5cGUuY29uc3RydWN0b3I9eX19fSwyNTg0Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNjQxMCkoKSxnPXkoNzM3OSkoIk9iamVjdC5wcm90b3R5cGUudG9TdHJpbmciKSxCPWZ1bmN0aW9uKE8pe3JldHVybiEoSSYm''@;'; put 'put ''TyYmIm9iamVjdCI9PXR5cGVvZiBPJiZTeW1ib2wudG9TdHJpbmdUYWcgaW4gTykmJiJbb2JqZWN0IEFyZ3VtZW50c10iPT09ZyhPKX0sdz1mdW5jdGlvbihPKXtyZXR1cm4hIUIoTyl8fG51bGwhPT1PJiYib2JqZWN0Ij09dHlwZW9mIE8mJiJsZW5ndGgiaW4gTyYmIm51bWJlciI9PXR5cGVv''@;'; put 'put ''ZiBPLmxlbmd0aCYmTy5sZW5ndGg+PTAmJiJbb2JqZWN0IEFycmF5XSIhPT1nKE8pJiYiY2FsbGVlImluIE8mJiJbb2JqZWN0IEZ1bmN0aW9uXSI9PT1nKE8uY2FsbGVlKX0sUD1mdW5jdGlvbigpe3JldHVybiBCKGFyZ3VtZW50cyl9KCk7Qi5pc0xlZ2FjeUFyZ3VtZW50cz13LHVlLmV4cG9y''@;'; put 'put ''dHM9UD9COnd9LDUzMjA6dWU9PnsidXNlIHN0cmljdCI7dmFyIEksXyxYPUZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZyx5PSJvYmplY3QiPT10eXBlb2YgUmVmbGVjdCYmbnVsbCE9PVJlZmxlY3QmJlJlZmxlY3QuYXBwbHk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHkmJiJmdW5jdGlvbiI9''@;'; put 'put ''PXR5cGVvZiBPYmplY3QuZGVmaW5lUHJvcGVydHkpdHJ5e0k9T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCJsZW5ndGgiLHtnZXQ6ZnVuY3Rpb24oKXt0aHJvdyBffX0pLF89e30seShmdW5jdGlvbigpe3Rocm93IDQyfSxudWxsLEkpfWNhdGNoKGVlKXtlZSE9PV8mJih5PW51bGwpfWVsc2Ug''@;'; put 'put ''eT1udWxsO3ZhciBnPS9eXHMqY2xhc3NcYi8sQj1mdW5jdGlvbihKKXt0cnl7dmFyIG5lPVguY2FsbChKKTtyZXR1cm4gZy50ZXN0KG5lKX1jYXRjaHtyZXR1cm4hMX19LHc9ZnVuY3Rpb24oSil7dHJ5e3JldHVybiFCKEopJiYoWC5jYWxsKEopLCEwKX1jYXRjaHtyZXR1cm4hMX19LFA9T2Jq''@;'; put 'put ''ZWN0LnByb3RvdHlwZS50b1N0cmluZyxVPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiEhU3ltYm9sLnRvU3RyaW5nVGFnLFc9ISgwIGluWyxdKSxZPWZ1bmN0aW9uKCl7cmV0dXJuITF9O2lmKCJvYmplY3QiPT10eXBlb2YgZG9jdW1lbnQpe3ZhciBxPWRvY3VtZW50LmFsbDtQLmNhbGwo''@;'; put 'put ''cSk9PT1QLmNhbGwoZG9jdW1lbnQuYWxsKSYmKFk9ZnVuY3Rpb24oSil7aWYoKFd8fCFKKSYmKHR5cGVvZiBKPiJ1Inx8Im9iamVjdCI9PXR5cGVvZiBKKSl0cnl7dmFyIG5lPVAuY2FsbChKKTtyZXR1cm4oIltvYmplY3QgSFRNTEFsbENvbGxlY3Rpb25dIj09PW5lfHwiW29iamVjdCBIVE1M''@;'; put 'put ''IGRvY3VtZW50LmFsbCBjbGFzc10iPT09bmV8fCJbb2JqZWN0IEhUTUxDb2xsZWN0aW9uXSI9PT1uZXx8IltvYmplY3QgT2JqZWN0XSI9PT1uZSkmJm51bGw9PUooIiIpfWNhdGNoe31yZXR1cm4hMX0pfXVlLmV4cG9ydHM9eT9mdW5jdGlvbihKKXtpZihZKEopKXJldHVybiEwO2lmKCFKfHwi''@;'; put 'put ''ZnVuY3Rpb24iIT10eXBlb2YgSiYmIm9iamVjdCIhPXR5cGVvZiBKKXJldHVybiExO3RyeXt5KEosbnVsbCxJKX1jYXRjaChuZSl7aWYobmUhPT1fKXJldHVybiExfXJldHVybiFCKEopJiZ3KEopfTpmdW5jdGlvbihKKXtpZihZKEopKXJldHVybiEwO2lmKCFKfHwiZnVuY3Rpb24iIT10eXBl''@;'; put 'put ''b2YgSiYmIm9iamVjdCIhPXR5cGVvZiBKKXJldHVybiExO2lmKFUpcmV0dXJuIHcoSik7aWYoQihKKSlyZXR1cm4hMTt2YXIgbmU9UC5jYWxsKEopO3JldHVybiEoIltvYmplY3QgRnVuY3Rpb25dIiE9PW5lJiYiW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0iIT09bmUmJiEvXlxbb2JqZWN0''@;'; put 'put ''IEhUTUwvLnRlc3QobmUpKSYmdyhKKX19LDg2NjI6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIHosST15KDczNzkpLGc9eSg5MjQ2KSgvXlxzKig/OmZ1bmN0aW9uKT9cKi8pLEI9eSg2NDEwKSgpLHc9eSgxNjE4KSxQPUkoIk9iamVjdC5wcm90b3R5cGUudG9TdHJpbmciKSxGPUkoIkZ1''@;'; put 'put ''bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZyIpO3VlLmV4cG9ydHM9ZnVuY3Rpb24oTCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIEwpcmV0dXJuITE7aWYoZyhGKEwpKSlyZXR1cm4hMDtpZighQilyZXR1cm4iW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0iPT09UChMKTtpZighdylyZXR1cm4h''@;'; put 'put ''MTtpZih0eXBlb2Ygej4idSIpe3ZhciBVPWZ1bmN0aW9uKCl7aWYoIUIpcmV0dXJuITE7dHJ5e3JldHVybiBGdW5jdGlvbigicmV0dXJuIGZ1bmN0aW9uKigpIHt9IikoKX1jYXRjaHt9fSgpO3o9ISFVJiZ3KFUpfXJldHVybiB3KEwpPT09en19LDg2MTE6dWU9PnsidXNlIHN0cmljdCI7dWUu''@;'; put 'put ''ZXhwb3J0cz1mdW5jdGlvbih5KXtyZXR1cm4geSE9eX19LDM2MDoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDU1NTkpLF89eSg0Mjg5KSxnPXkoODYxMSksQj15KDk0MTUpLHc9eSgzMTk0KSxQPUkoQigpLE51bWJlcik7XyhQLHtnZXRQb2x5ZmlsbDpCLGltcGxlbWVudGF0aW9u''@;'; put 'put ''Omcsc2hpbTp3fSksdWUuZXhwb3J0cz1QfSw5NDE1Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoODYxMSk7dWUuZXhwb3J0cz1mdW5jdGlvbigpe3JldHVybiBOdW1iZXIuaXNOYU4mJk51bWJlci5pc05hTihOYU4pJiYhTnVtYmVyLmlzTmFOKCJhIik/TnVtYmVyLmlzTmFOOkl9''@;'; put 'put ''fSwzMTk0Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNDI4OSksXz15KDk0MTUpO3VlLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgQj1fKCk7cmV0dXJuIEkoTnVtYmVyLHtpc05hTjpCfSx7aXNOYU46ZnVuY3Rpb24oKXtyZXR1cm4gTnVtYmVyLmlzTmFOIT09Qn19KSxCfX0sODQy''@;'; put 'put ''MDoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgdyxJPXkoNzM3OSksXz15KDY0MTApKCksZz15KDg4MjQpLEI9eSg3Mjk2KTtpZihfKXt2YXIgUD1JKCJSZWdFeHAucHJvdG90eXBlLmV4ZWMiKSxGPXt9LE89ZnVuY3Rpb24oKXt0aHJvdyBGfSx6PXt0b1N0cmluZzpPLHZhbHVlT2Y6T307''@;'; put 'put ''InN5bWJvbCI9PXR5cGVvZiBTeW1ib2wudG9QcmltaXRpdmUmJih6W1N5bWJvbC50b1ByaW1pdGl2ZV09Tyksdz1mdW5jdGlvbihVKXtpZighVXx8Im9iamVjdCIhPXR5cGVvZiBVKXJldHVybiExO3ZhciBXPUIoVSwibGFzdEluZGV4Iik7aWYoIVd8fCFnKFcsInZhbHVlIikpcmV0dXJuITE7''@;'; put 'put ''dHJ5e1AoVSx6KX1jYXRjaChxKXtyZXR1cm4gcT09PUZ9fX1lbHNle3ZhciBOPUkoIk9iamVjdC5wcm90b3R5cGUudG9TdHJpbmciKTt3PWZ1bmN0aW9uKFUpe3JldHVybiEoIVV8fCJvYmplY3QiIT10eXBlb2YgVSYmImZ1bmN0aW9uIiE9dHlwZW9mIFUpJiYiW29iamVjdCBSZWdFeHBdIj09''@;'; put 'put ''PU4oVSl9fXVlLmV4cG9ydHM9d30sNTY5MjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDY0MzApO3VlLmV4cG9ydHM9ZnVuY3Rpb24oZyl7cmV0dXJuISFJKGcpfX0sNTgyNjp1ZT0+e3ZhciBYPXt9LnRvU3RyaW5nO3VlLmV4cG9ydHM9QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24o''@;'; put 'put ''eSl7cmV0dXJuIltvYmplY3QgQXJyYXldIj09WC5jYWxsKHkpfX0sNjgxMzoodWUsWCx5KT0+e2xldCBJO3RyeXtJPXkoNzcpfWNhdGNoe0k9eSg0MTI5KX1jb25zdCBfPXkoODk4MSkse3N0cmluZ2lmeTpnLHN0cmlwQm9tOkJ9PXkoNjc4MCk7ZnVuY3Rpb24gUCgpe3JldHVybihQPV9hc3lu''@;'; put 'put ''Y1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihXLFk9e30peyJzdHJpbmciPT10eXBlb2YgWSYmKFk9e2VuY29kaW5nOll9KTtjb25zdCBxPVkuZnN8fEksZWU9ISgidGhyb3dzImluIFkpfHxZLnRocm93cztsZXQgbmUsSj15aWVsZCBfLmZyb21DYWxsYmFjayhxLnJlYWRGaWxlKShXLFkpO0o9QihK''@;'; put 'put ''KTt0cnl7bmU9SlNPTi5wYXJzZShKLFk/WS5yZXZpdmVyOm51bGwpfWNhdGNoKGllKXtpZihlZSl0aHJvdyBpZS5tZXNzYWdlPWAke1d9OiAke2llLm1lc3NhZ2V9YCxpZTtyZXR1cm4gbnVsbH1yZXR1cm4gbmV9KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWNvbnN0IEY9Xy5mcm9tUHJvbWlz''@;'; put 'put ''ZShmdW5jdGlvbiB3KFcpe3JldHVybiBQLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pO2Z1bmN0aW9uIE4oKXtyZXR1cm4oTj1fYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiooVyxZLHE9e30pe2NvbnN0IGVlPXEuZnN8fEksSj1nKFkscSk7eWllbGQgXy5mcm9tQ2FsbGJhY2soZWUud3JpdGVG''@;'; put 'put ''aWxlKShXLEoscSl9KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWNvbnN0IEw9Xy5mcm9tUHJvbWlzZShmdW5jdGlvbiB6KFcsWSl7cmV0dXJuIE4uYXBwbHkodGhpcyxhcmd1bWVudHMpfSk7dWUuZXhwb3J0cz17cmVhZEZpbGU6RixyZWFkRmlsZVN5bmM6ZnVuY3Rpb24gTyhXLFk9e30peyJz''@;'; put 'put ''dHJpbmciPT10eXBlb2YgWSYmKFk9e2VuY29kaW5nOll9KTtjb25zdCBxPVkuZnN8fEksZWU9ISgidGhyb3dzImluIFkpfHxZLnRocm93czt0cnl7bGV0IEo9cS5yZWFkRmlsZVN5bmMoVyxZKTtyZXR1cm4gSj1CKEopLEpTT04ucGFyc2UoSixZLnJldml2ZXIpfWNhdGNoKEope2lmKGVlKXRo''@;'; put 'put ''cm93IEoubWVzc2FnZT1gJHtXfTogJHtKLm1lc3NhZ2V9YCxKO3JldHVybiBudWxsfX0sd3JpdGVGaWxlOkwsd3JpdGVGaWxlU3luYzpmdW5jdGlvbiBLKFcsWSxxPXt9KXtjb25zdCBlZT1xLmZzfHxJLEo9ZyhZLHEpO3JldHVybiBlZS53cml0ZUZpbGVTeW5jKFcsSixxKX19fSw2NzgwOih1''@;'; put 'put ''ZSxYLHkpPT57dmFyIEk9eSg4NzY0KS5CdWZmZXI7dWUuZXhwb3J0cz17c3RyaW5naWZ5OmZ1bmN0aW9uIF8oQix7RU9MOnc9IlxuIixmaW5hbEVPTDpQPSEwLHJlcGxhY2VyOkY9bnVsbCxzcGFjZXM6T309e30pe2NvbnN0IHo9UD93OiIiO3JldHVybiBKU09OLnN0cmluZ2lmeShCLEYsTyku''@;'; put 'put ''cmVwbGFjZSgvXG4vZyx3KSt6fSxzdHJpcEJvbTpmdW5jdGlvbiBnKEIpe3JldHVybiBJLmlzQnVmZmVyKEIpJiYoQj1CLnRvU3RyaW5nKCJ1dGY4IikpLEIucmVwbGFjZSgvXlx1RkVGRi8sIiIpfX19LDYyNDU6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24gSShGKXt0aGlzLm1l''@;'; put 'put ''c3NhZ2U9Rn15LnIoWCkseS5kKFgse0ludmFsaWRUb2tlbkVycm9yOigpPT5CLGRlZmF1bHQ6KCk9PlB9KSwoSS5wcm90b3R5cGU9bmV3IEVycm9yKS5uYW1lPSJJbnZhbGlkQ2hhcmFjdGVyRXJyb3IiO3ZhciBfPXR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuYXRvYiYmd2luZG93LmF0b2Iu''@;'; put 'put ''YmluZCh3aW5kb3cpfHxmdW5jdGlvbihGKXt2YXIgTz1TdHJpbmcoRikucmVwbGFjZSgvPSskLywiIik7aWYoTy5sZW5ndGglND09MSl0aHJvdyBuZXcgSSgiJ2F0b2InIGZhaWxlZDogVGhlIHN0cmluZyB0byBiZSBkZWNvZGVkIGlzIG5vdCBjb3JyZWN0bHkgZW5jb2RlZC4iKTtmb3IodmFy''@;'; put 'put ''IHosTixMPTAsSz0wLFU9IiI7Tj1PLmNoYXJBdChLKyspO35OJiYoej1MJTQ/NjQqeitOOk4sTCsrJTQpP1UrPVN0cmluZy5mcm9tQ2hhckNvZGUoMjU1Jno+PigtMipMJjYpKTowKU49IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2''@;'; put 'put ''Nzg5Ky89Ii5pbmRleE9mKE4pO3JldHVybiBVfTtmdW5jdGlvbiBCKEYpe3RoaXMubWVzc2FnZT1GfShCLnByb3RvdHlwZT1uZXcgRXJyb3IpLm5hbWU9IkludmFsaWRUb2tlbkVycm9yIjtjb25zdCBQPWZ1bmN0aW9uIHcoRixPKXtpZigic3RyaW5nIiE9dHlwZW9mIEYpdGhyb3cgbmV3IEIo''@;'; put 'put ''IkludmFsaWQgdG9rZW4gc3BlY2lmaWVkIik7dmFyIHo9ITA9PT0oTz1PfHx7fSkuaGVhZGVyPzA6MTt0cnl7cmV0dXJuIEpTT04ucGFyc2UoZnVuY3Rpb24gZyhGKXt2YXIgTz1GLnJlcGxhY2UoLy0vZywiKyIpLnJlcGxhY2UoL18vZywiLyIpO3N3aXRjaChPLmxlbmd0aCU0KXtjYXNlIDA6''@;'; put 'put ''YnJlYWs7Y2FzZSAyOk8rPSI9PSI7YnJlYWs7Y2FzZSAzOk8rPSI9IjticmVhaztkZWZhdWx0OnRocm93IklsbGVnYWwgYmFzZTY0dXJsIHN0cmluZyEifXRyeXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KF8oTykucmVwbGFjZSgvKC4pL2csZnVuY3Rpb24oTixMKXt2YXIgSz1MLmNoYXJD''@;'; put 'put ''b2RlQXQoMCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7cmV0dXJuIEsubGVuZ3RoPDImJihLPSIwIitLKSwiJSIrS30pKX1jYXRjaHtyZXR1cm4gXyhPKX19KEYuc3BsaXQoIi4iKVt6XSkpfWNhdGNoKE4pe3Rocm93IG5ldyBCKCJJbnZhbGlkIHRva2VuIHNwZWNpZmllZDogIitOLm1l''@;'; put 'put ''c3NhZ2UpfX19LDE2NTg6KHVlLFgseSk9Pnt2YXIgZz0vW1xcXiQuKis/KClbXF17fXxdL2csQj1SZWdFeHAoZy5zb3VyY2UpLFA9Im9iamVjdCI9PXR5cGVvZiBzZWxmJiZzZWxmJiZzZWxmLk9iamVjdD09PU9iamVjdCYmc2VsZixGPSJvYmplY3QiPT10eXBlb2YgeS5nJiZ5LmcmJnkuZy5P''@;'; put 'put ''YmplY3Q9PT1PYmplY3QmJnkuZ3x8UHx8RnVuY3Rpb24oInJldHVybiB0aGlzIikoKSx6PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsTj1GLlN5bWJvbCxMPU4/Ti5wcm90b3R5cGU6dm9pZCAwLEs9TD9MLnRvU3RyaW5nOnZvaWQgMDt1ZS5leHBvcnRzPWZ1bmN0aW9uIGVlKEope3JldHVy''@;'; put 'put ''bihKPWZ1bmN0aW9uIHEoSil7cmV0dXJuIG51bGw9PUo/IiI6ZnVuY3Rpb24gVShKKXtpZigic3RyaW5nIj09dHlwZW9mIEopcmV0dXJuIEo7aWYoZnVuY3Rpb24gWShKKXtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIEp8fGZ1bmN0aW9uIFcoSil7cmV0dXJuISFKJiYib2JqZWN0Ij09dHlwZW9m''@;'; put 'put ''IEp9KEopJiYiW29iamVjdCBTeW1ib2xdIj09ei5jYWxsKEopfShKKSlyZXR1cm4gSz9LLmNhbGwoSik6IiI7dmFyIG5lPUorIiI7cmV0dXJuIjAiPT1uZSYmMS9KPT0tMS8wPyItMCI6bmV9KEopfShKKSkmJkIudGVzdChKKT9KLnJlcGxhY2UoZywiXFwkJiIpOkp9fSw4MDk0OnVlPT57dmFy''@;'; put 'put ''IEk9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZzt1ZS5leHBvcnRzPWZ1bmN0aW9uIF8oQil7cmV0dXJuITA9PT1CfHwhMT09PUJ8fGZ1bmN0aW9uIGcoQil7cmV0dXJuISFCJiYib2JqZWN0Ij09dHlwZW9mIEJ9KEIpJiYiW29iamVjdCBCb29sZWFuXSI9PUkuY2FsbChCKX19LDIzMDc6KHVl''@;'; put 'put ''LFgseSk9Pnt1ZT15Lm5tZCh1ZSk7dmFyIF89Il9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iLGc9MSxCPTIsdz05MDA3MTk5MjU0NzQwOTkxLFA9IltvYmplY3QgQXJndW1lbnRzXSIsRj0iW29iamVjdCBBcnJheV0iLE89IltvYmplY3QgQXN5bmNGdW5jdGlvbl0iLHo9IltvYmplY3QgQm9v''@;'; put 'put ''bGVhbl0iLE49IltvYmplY3QgRGF0ZV0iLEw9IltvYmplY3QgRXJyb3JdIixLPSJbb2JqZWN0IEZ1bmN0aW9uXSIsVT0iW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0iLFc9IltvYmplY3QgTWFwXSIsWT0iW29iamVjdCBOdW1iZXJdIixxPSJbb2JqZWN0IE51bGxdIixlZT0iW29iamVjdCBP''@;'; put 'put ''YmplY3RdIixKPSJbb2JqZWN0IFByb21pc2VdIixuZT0iW29iamVjdCBQcm94eV0iLGllPSJbb2JqZWN0IFJlZ0V4cF0iLGxlPSJbb2JqZWN0IFNldF0iLG1lPSJbb2JqZWN0IFN0cmluZ10iLFRlPSJbb2JqZWN0IFVuZGVmaW5lZF0iLFNlPSJbb2JqZWN0IFdlYWtNYXBdIixqZT0iW29iamVj''@;'; put 'put ''dCBBcnJheUJ1ZmZlcl0iLFY9IltvYmplY3QgRGF0YVZpZXddIixhZT0vXlxbb2JqZWN0IC4rP0NvbnN0cnVjdG9yXF0kLyx0ZT0vXig/OjB8WzEtOV1cZCopJC8sc2U9e307c2VbIltvYmplY3QgRmxvYXQzMkFycmF5XSJdPXNlWyJbb2JqZWN0IEZsb2F0NjRBcnJheV0iXT1zZVsiW29iamVj''@;'; put 'put ''dCBJbnQ4QXJyYXldIl09c2VbIltvYmplY3QgSW50MTZBcnJheV0iXT1zZVsiW29iamVjdCBJbnQzMkFycmF5XSJdPXNlWyJbb2JqZWN0IFVpbnQ4QXJyYXldIl09c2VbIltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldIl09c2VbIltvYmplY3QgVWludDE2QXJyYXldIl09c2VbIltvYmplY3Qg''@;'; put 'put ''VWludDMyQXJyYXldIl09ITAsc2VbUF09c2VbRl09c2VbamVdPXNlW3pdPXNlW1ZdPXNlW05dPXNlW0xdPXNlW0tdPXNlW1ddPXNlW1ldPXNlW2VlXT1zZVtpZV09c2VbbGVdPXNlW21lXT1zZVtTZV09ITE7dmFyIHdlPSJvYmplY3QiPT10eXBlb2YgeS5nJiZ5LmcmJnkuZy5PYmplY3Q9PT1P''@;'; put 'put ''YmplY3QmJnkuZyxVZT0ib2JqZWN0Ij09dHlwZW9mIHNlbGYmJnNlbGYmJnNlbGYuT2JqZWN0PT09T2JqZWN0JiZzZWxmLEplPXdlfHxVZXx8RnVuY3Rpb24oInJldHVybiB0aGlzIikoKSxvdD1YJiYhWC5ub2RlVHlwZSYmWCx4ZT1vdCYmdWUmJiF1ZS5ub2RlVHlwZSYmdWUsdmU9eGUmJnhl''@;'; put 'put ''LmV4cG9ydHM9PT1vdCxYZT12ZSYmd2UucHJvY2Vzcyx6ZT1mdW5jdGlvbigpe3RyeXtyZXR1cm4gWGUmJlhlLmJpbmRpbmcmJlhlLmJpbmRpbmcoInV0aWwiKX1jYXRjaHt9fSgpLERlPXplJiZ6ZS5pc1R5cGVkQXJyYXk7ZnVuY3Rpb24gSWUoQW4sYW4pe2Zvcih2YXIgdmk9LTEsQXI9bnVs''@;'; put 'put ''bD09QW4/MDpBbi5sZW5ndGg7Kyt2aTxBcjspaWYoYW4oQW5bdmldLHZpLEFuKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBBZShBbixhbil7cmV0dXJuIEFuLmhhcyhhbil9ZnVuY3Rpb24gbnQoQW4pe3ZhciBhbj0tMSx2aT1BcnJheShBbi5zaXplKTtyZXR1cm4gQW4uZm9yRWFjaChm''@;'; put 'put ''dW5jdGlvbihBcixQbyl7dmlbKythbl09W1BvLEFyXX0pLHZpfWZ1bmN0aW9uIHVuKEFuKXt2YXIgYW49LTEsdmk9QXJyYXkoQW4uc2l6ZSk7cmV0dXJuIEFuLmZvckVhY2goZnVuY3Rpb24oQXIpe3ZpWysrYW5dPUFyfSksdml9dmFyIEFuLHl0PUFycmF5LnByb3RvdHlwZSxEdD1PYmplY3Qu''@;'; put 'put ''cHJvdG90eXBlLGl0PUplWyJfX2NvcmUtanNfc2hhcmVkX18iXSwkZT1GdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmcsdHQ9RHQuaGFzT3duUHJvcGVydHksSGU9KEFuPS9bXi5dKyQvLmV4ZWMoaXQmJml0LmtleXMmJml0LmtleXMuSUVfUFJPVE98fCIiKSk/IlN5bWJvbChzcmMpXzEuIitB''@;'; put 'put ''bjoiIix1dD1EdC50b1N0cmluZyxxdD1SZWdFeHAoIl4iKyRlLmNhbGwodHQpLnJlcGxhY2UoL1tcXF4kLiorPygpW1xde318XS9nLCJcXCQmIikucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXCgpfCBmb3IgLis/KD89XFxcXSkvZywiJDEuKj8iKSsiJCIpLFJ0''@;'; put 'put ''PXZlP0plLkJ1ZmZlcjp2b2lkIDAsUHQ9SmUuU3ltYm9sLGNpPUplLlVpbnQ4QXJyYXksUXQ9RHQucHJvcGVydHlJc0VudW1lcmFibGUsc249eXQuc3BsaWNlLFJpPVB0P1B0LnRvU3RyaW5nVGFnOnZvaWQgMCxobj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzLGZ0PVJ0P1J0LmlzQnVm''@;'; put 'put ''ZmVyOnZvaWQgMCxPcj1mdW5jdGlvbiBRZShBbixhbil7cmV0dXJuIGZ1bmN0aW9uKHZpKXtyZXR1cm4gQW4oYW4odmkpKX19KE9iamVjdC5rZXlzLE9iamVjdCksV3Q9WWgoSmUsIkRhdGFWaWV3IiksQXQ9WWgoSmUsIk1hcCIpLFJuPVloKEplLCJQcm9taXNlIiksc3Q9WWgoSmUsIlNldCIp''@;'; put 'put ''LFV0PVloKEplLCJXZWFrTWFwIikscmk9WWgoT2JqZWN0LCJjcmVhdGUiKSxXZT1PbChXdCksVHQ9T2woQXQpLG5yPU9sKFJuKSxodD1PbChzdCkseHQ9T2woVXQpLGpuPVB0P1B0LnByb3RvdHlwZTp2b2lkIDAscm49am4/am4udmFsdWVPZjp2b2lkIDA7ZnVuY3Rpb24genQoQW4pe3ZhciBh''@;'; put 'put ''bj0tMSx2aT1udWxsPT1Bbj8wOkFuLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrYW48dmk7KXt2YXIgQXI9QW5bYW5dO3RoaXMuc2V0KEFyWzBdLEFyWzFdKX19ZnVuY3Rpb24gZW4oQW4pe3ZhciBhbj0tMSx2aT1udWxsPT1Bbj8wOkFuLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrYW48''@;'; put 'put ''dmk7KXt2YXIgQXI9QW5bYW5dO3RoaXMuc2V0KEFyWzBdLEFyWzFdKX19ZnVuY3Rpb24gZWkoQW4pe3ZhciBhbj0tMSx2aT1udWxsPT1Bbj8wOkFuLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrYW48dmk7KXt2YXIgQXI9QW5bYW5dO3RoaXMuc2V0KEFyWzBdLEFyWzFdKX19ZnVuY3Rpb24g''@;'; put 'put ''V2koQW4pe3ZhciBhbj0tMSx2aT1udWxsPT1Bbj8wOkFuLmxlbmd0aDtmb3IodGhpcy5fX2RhdGFfXz1uZXcgZWk7Kythbjx2aTspdGhpcy5hZGQoQW5bYW5dKX1mdW5jdGlvbiBsYShBbil7dmFyIGFuPXRoaXMuX19kYXRhX189bmV3IGVuKEFuKTt0aGlzLnNpemU9YW4uc2l6ZX1mdW5jdGlv''@;'; put 'put ''biBibChBbixhbil7Zm9yKHZhciB2aT1Bbi5sZW5ndGg7dmktLTspaWYodWYoQW5bdmldWzBdLGFuKSlyZXR1cm4gdmk7cmV0dXJuLTF9ZnVuY3Rpb24gTGMoQW4pe3JldHVybiBudWxsPT1Bbj92b2lkIDA9PT1Bbj9UZTpxOlJpJiZSaSBpbiBPYmplY3QoQW4pP2Z1bmN0aW9uIGNmKEFuKXt2''@;'; put 'put ''YXIgYW49dHQuY2FsbChBbixSaSksdmk9QW5bUmldO3RyeXtBbltSaV09dm9pZCAwO3ZhciBBcj0hMH1jYXRjaHt9dmFyIFBvPXV0LmNhbGwoQW4pO3JldHVybiBBciYmKGFuP0FuW1JpXT12aTpkZWxldGUgQW5bUmldKSxQb30oQW4pOmZ1bmN0aW9uIHI1KEFuKXtyZXR1cm4gdXQuY2FsbChB''@;'; put 'put ''bil9KEFuKX1mdW5jdGlvbiBEMChBbil7cmV0dXJuIE5hKEFuKSYmTGMoQW4pPT1QfWZ1bmN0aW9uIGlyKEFuLGFuLHZpLEFyLFBvKXtyZXR1cm4gQW49PT1hbnx8KG51bGw9PUFufHxudWxsPT1hbnx8IU5hKEFuKSYmIU5hKGFuKT9BbiE9QW4mJmFuIT1hbjpmdW5jdGlvbiB4YShBbixhbix2''@;'; put 'put ''aSxBcixQbyxlbyl7dmFyIG9sPWRmKEFuKSx6bz1kZihhbiksVnM9b2w/RjpZaShBbiksU3M9em8/RjpZaShhbiksamw9KFZzPVZzPT1QP2VlOlZzKT09ZWUsSG89KFNzPVNzPT1QP2VlOlNzKT09ZWUsa289VnM9PVNzO2lmKGtvJiZoZihBbikpe2lmKCFoZihhbikpcmV0dXJuITE7b2w9ITAs''@;'; put 'put ''amw9ITF9aWYoa28mJiFqbClyZXR1cm4gZW98fChlbz1uZXcgbGEpLG9sfHxEMyhBbik/YjAoQW4sYW4sdmksQXIsUG8sZW8pOmZ1bmN0aW9uIEhhKEFuLGFuLHZpLEFyLFBvLGVvLG9sKXtzd2l0Y2godmkpe2Nhc2UgVjppZihBbi5ieXRlTGVuZ3RoIT1hbi5ieXRlTGVuZ3RofHxBbi5ieXRl''@;'; put 'put ''T2Zmc2V0IT1hbi5ieXRlT2Zmc2V0KXJldHVybiExO0FuPUFuLmJ1ZmZlcixhbj1hbi5idWZmZXI7Y2FzZSBqZTpyZXR1cm4hKEFuLmJ5dGVMZW5ndGghPWFuLmJ5dGVMZW5ndGh8fCFlbyhuZXcgY2koQW4pLG5ldyBjaShhbikpKTtjYXNlIHo6Y2FzZSBOOmNhc2UgWTpyZXR1cm4gdWYoK0Fu''@;'; put 'put ''LCthbik7Y2FzZSBMOnJldHVybiBBbi5uYW1lPT1hbi5uYW1lJiZBbi5tZXNzYWdlPT1hbi5tZXNzYWdlO2Nhc2UgaWU6Y2FzZSBtZTpyZXR1cm4gQW49PWFuKyIiO2Nhc2UgVzp2YXIgem89bnQ7Y2FzZSBsZTppZih6b3x8KHpvPXVuKSxBbi5zaXplIT1hbi5zaXplJiYhKEFyJmcpKXJldHVy''@;'; put 'put ''biExO3ZhciBTcz1vbC5nZXQoQW4pO2lmKFNzKXJldHVybiBTcz09YW47QXJ8PUIsb2wuc2V0KEFuLGFuKTt2YXIgamw9YjAoem8oQW4pLHpvKGFuKSxBcixQbyxlbyxvbCk7cmV0dXJuIG9sLmRlbGV0ZShBbiksamw7Y2FzZSJbb2JqZWN0IFN5bWJvbF0iOmlmKHJuKXJldHVybiBybi5jYWxs''@;'; put 'put ''KEFuKT09cm4uY2FsbChhbil9cmV0dXJuITF9KEFuLGFuLFZzLHZpLEFyLFBvLGVvKTtpZighKHZpJmcpKXt2YXIgU3Q9amwmJnR0LmNhbGwoQW4sIl9fd3JhcHBlZF9fIiksQnQ9SG8mJnR0LmNhbGwoYW4sIl9fd3JhcHBlZF9fIik7aWYoU3R8fEJ0KXt2YXIgX249U3Q/QW4udmFsdWUoKTpB''@;'; put 'put ''bixtbj1CdD9hbi52YWx1ZSgpOmFuO3JldHVybiBlb3x8KGVvPW5ldyBsYSksUG8oX24sbW4sdmksQXIsZW8pfX1yZXR1cm4hIWtvJiYoZW98fChlbz1uZXcgbGEpLGZ1bmN0aW9uIEx1KEFuLGFuLHZpLEFyLFBvLGVvKXt2YXIgb2w9dmkmZyx6bz1QcihBbiksVnM9em8ubGVuZ3RoO2lmKFZz''@;'; put 'put ''IT1QcihhbikubGVuZ3RoJiYhb2wpcmV0dXJuITE7Zm9yKHZhciBIbz1WcztIby0tOyl7dmFyIGtvPXpvW0hvXTtpZighKG9sP2tvIGluIGFuOnR0LmNhbGwoYW4sa28pKSlyZXR1cm4hMX12YXIgU3Q9ZW8uZ2V0KEFuKTtpZihTdCYmZW8uZ2V0KGFuKSlyZXR1cm4gU3Q9PWFuO3ZhciBCdD0h''@;'; put 'put ''MDtlby5zZXQoQW4sYW4pLGVvLnNldChhbixBbik7Zm9yKHZhciBfbj1vbDsrK0hvPFZzOyl7dmFyIG1uPUFuW2tvPXpvW0hvXV0sSW49YW5ba29dO2lmKEFyKXZhciBibj1vbD9BcihJbixtbixrbyxhbixBbixlbyk6QXIobW4sSW4sa28sQW4sYW4sZW8pO2lmKCEodm9pZCAwPT09Ym4/bW49''@;'; put 'put ''PT1Jbnx8UG8obW4sSW4sdmksQXIsZW8pOmJuKSl7QnQ9ITE7YnJlYWt9X258fChfbj0iY29uc3RydWN0b3IiPT1rbyl9aWYoQnQmJiFfbil7dmFyIHVyPUFuLmNvbnN0cnVjdG9yLGJpPWFuLmNvbnN0cnVjdG9yO3VyIT1iaSYmImNvbnN0cnVjdG9yImluIEFuJiYiY29uc3RydWN0b3IiaW4g''@;'; put 'put ''YW4mJiEoImZ1bmN0aW9uIj09dHlwZW9mIHVyJiZ1ciBpbnN0YW5jZW9mIHVyJiYiZnVuY3Rpb24iPT10eXBlb2YgYmkmJmJpIGluc3RhbmNlb2YgYmkpJiYoQnQ9ITEpfXJldHVybiBlby5kZWxldGUoQW4pLGVvLmRlbGV0ZShhbiksQnR9KEFuLGFuLHZpLEFyLFBvLGVvKSl9KEFuLGFuLHZp''@;'; put 'put ''LEFyLGlyLFBvKSl9ZnVuY3Rpb24gYjAoQW4sYW4sdmksQXIsUG8sZW8pe3ZhciBvbD12aSZnLHpvPUFuLmxlbmd0aCxWcz1hbi5sZW5ndGg7aWYoem8hPVZzJiYhKG9sJiZWcz56bykpcmV0dXJuITE7dmFyIFNzPWVvLmdldChBbik7aWYoU3MmJmVvLmdldChhbikpcmV0dXJuIFNzPT1hbjt2''@;'; put 'put ''YXIgamw9LTEsSG89ITAsa289dmkmQj9uZXcgV2k6dm9pZCAwO2Zvcihlby5zZXQoQW4sYW4pLGVvLnNldChhbixBbik7KytqbDx6bzspe3ZhciBTdD1BbltqbF0sQnQ9YW5bamxdO2lmKEFyKXZhciBfbj1vbD9BcihCdCxTdCxqbCxhbixBbixlbyk6QXIoU3QsQnQsamwsQW4sYW4sZW8pO2lm''@;'; put 'put ''KHZvaWQgMCE9PV9uKXtpZihfbiljb250aW51ZTtIbz0hMTticmVha31pZihrbyl7aWYoIUllKGFuLGZ1bmN0aW9uKG1uLEluKXtpZighQWUoa28sSW4pJiYoU3Q9PT1tbnx8UG8oU3QsbW4sdmksQXIsZW8pKSlyZXR1cm4ga28ucHVzaChJbil9KSl7SG89ITE7YnJlYWt9fWVsc2UgaWYoU3Qh''@;'; put 'put ''PT1CdCYmIVBvKFN0LEJ0LHZpLEFyLGVvKSl7SG89ITE7YnJlYWt9fXJldHVybiBlby5kZWxldGUoQW4pLGVvLmRlbGV0ZShhbiksSG99ZnVuY3Rpb24gUHIoQW4pe3JldHVybiBmdW5jdGlvbiBwdShBbixhbix2aSl7dmFyIEFyPWFuKEFuKTtyZXR1cm4gZGYoQW4pP0FyOmZ1bmN0aW9uIE9l''@;'; put 'put ''KEFuLGFuKXtmb3IodmFyIHZpPS0xLEFyPWFuLmxlbmd0aCxQbz1Bbi5sZW5ndGg7Kyt2aTxBcjspQW5bUG8rdmldPWFuW3ZpXTtyZXR1cm4gQW59KEFyLHZpKEFuKSl9KEFuLCRoLENzKX1mdW5jdGlvbiBvZChBbixhbil7dmFyIHZpPUFuLl9fZGF0YV9fO3JldHVybiBmdW5jdGlvbiBRYyhB''@;'; put 'put ''bil7dmFyIGFuPXR5cGVvZiBBbjtyZXR1cm4ic3RyaW5nIj09YW58fCJudW1iZXIiPT1hbnx8InN5bWJvbCI9PWFufHwiYm9vbGVhbiI9PWFuPyJfX3Byb3RvX18iIT09QW46bnVsbD09PUFufShhbik/dmlbInN0cmluZyI9PXR5cGVvZiBhbj8ic3RyaW5nIjoiaGFzaCJdOnZpLm1hcH1mdW5j''@;'; put 'put ''dGlvbiBZaChBbixhbil7dmFyIHZpPWZ1bmN0aW9uIF90KEFuLGFuKXtyZXR1cm4gQW4/Llthbl19KEFuLGFuKTtyZXR1cm4gZnVuY3Rpb24gdWkoQW4pe3JldHVybiEoIU9jKEFuKXx8ZnVuY3Rpb24gbjUoQW4pe3JldHVybiEhSGUmJkhlIGluIEFufShBbikpJiYoZmYoQW4pP3F0OmFlKS50''@;'; put 'put ''ZXN0KE9sKEFuKSl9KHZpKT92aTp2b2lkIDB9enQucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uIGhpKCl7dGhpcy5fX2RhdGFfXz1yaT9yaShudWxsKTp7fSx0aGlzLnNpemU9MH0senQucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbiBjbihBbil7dmFyIGFuPXRoaXMuaGFzKEFuKSYmZGVsZXRl''@;'; put 'put ''IHRoaXMuX19kYXRhX19bQW5dO3JldHVybiB0aGlzLnNpemUtPWFuPzE6MCxhbn0senQucHJvdG90eXBlLmdldD1mdW5jdGlvbiBmbihBbil7dmFyIGFuPXRoaXMuX19kYXRhX187aWYocmkpe3ZhciB2aT1hbltBbl07cmV0dXJuIHZpPT09Xz92b2lkIDA6dml9cmV0dXJuIHR0LmNhbGwoYW4s''@;'; put 'put ''QW4pP2FuW0FuXTp2b2lkIDB9LHp0LnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24gSWkoQW4pe3ZhciBhbj10aGlzLl9fZGF0YV9fO3JldHVybiByaT92b2lkIDAhPT1hbltBbl06dHQuY2FsbChhbixBbil9LHp0LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24gWHQoQW4sYW4pe3ZhciB2aT10aGlzLl9f''@;'; put 'put ''ZGF0YV9fO3JldHVybiB0aGlzLnNpemUrPXRoaXMuaGFzKEFuKT8wOjEsdmlbQW5dPXJpJiZ2b2lkIDA9PT1hbj9fOmFuLHRoaXN9LGVuLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbiB1YSgpe3RoaXMuX19kYXRhX189W10sdGhpcy5zaXplPTB9LGVuLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rp''@;'; put 'put ''b24gRWkoQW4pe3ZhciBhbj10aGlzLl9fZGF0YV9fLHZpPWJsKGFuLEFuKTtyZXR1cm4hKHZpPDB8fCh2aT09YW4ubGVuZ3RoLTE/YW4ucG9wKCk6c24uY2FsbChhbix2aSwxKSwtLXRoaXMuc2l6ZSwwKSl9LGVuLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24gdnIoQW4pe3ZhciBhbj10aGlzLl9f''@;'; put 'put ''ZGF0YV9fLHZpPWJsKGFuLEFuKTtyZXR1cm4gdmk8MD92b2lkIDA6YW5bdmldWzFdfSxlbi5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uIFduKEFuKXtyZXR1cm4gYmwodGhpcy5fX2RhdGFfXyxBbik+LTF9LGVuLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24gJGkoQW4sYW4pe3ZhciB2aT10aGlzLl9f''@;'; put 'put ''ZGF0YV9fLEFyPWJsKHZpLEFuKTtyZXR1cm4gQXI8MD8oKyt0aGlzLnNpemUsdmkucHVzaChbQW4sYW5dKSk6dmlbQXJdWzFdPWFuLHRoaXN9LGVpLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbiBRcigpe3RoaXMuc2l6ZT0wLHRoaXMuX19kYXRhX189e2hhc2g6bmV3IHp0LG1hcDpuZXcoQXR8''@;'; put 'put ''fGVuKSxzdHJpbmc6bmV3IHp0fX0sZWkucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbiBWaShBbil7dmFyIGFuPW9kKHRoaXMsQW4pLmRlbGV0ZShBbik7cmV0dXJuIHRoaXMuc2l6ZS09YW4/MTowLGFufSxlaS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uIE5pKEFuKXtyZXR1cm4gb2QodGhpcyxB''@;'; put 'put ''bikuZ2V0KEFuKX0sZWkucHJvdG90eXBlLmhhcz1mdW5jdGlvbiBEYShBbil7cmV0dXJuIG9kKHRoaXMsQW4pLmhhcyhBbil9LGVpLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24gTHIoQW4sYW4pe3ZhciB2aT1vZCh0aGlzLEFuKSxBcj12aS5zaXplO3JldHVybiB2aS5zZXQoQW4sYW4pLHRoaXMu''@;'; put 'put ''c2l6ZSs9dmkuc2l6ZT09QXI/MDoxLHRoaXN9LFdpLnByb3RvdHlwZS5hZGQ9V2kucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24gcGEoQW4pe3JldHVybiB0aGlzLl9fZGF0YV9fLnNldChBbixfKSx0aGlzfSxXaS5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uIFFuKEFuKXtyZXR1cm4gdGhpcy5fX2Rh''@;'; put 'put ''dGFfXy5oYXMoQW4pfSxsYS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24geWEoKXt0aGlzLl9fZGF0YV9fPW5ldyBlbix0aGlzLnNpemU9MH0sbGEucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbiBMYShBbil7dmFyIGFuPXRoaXMuX19kYXRhX18sdmk9YW4uZGVsZXRlKEFuKTtyZXR1cm4gdGhp''@;'; put 'put ''cy5zaXplPWFuLnNpemUsdml9LGxhLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24gRmEoQW4pe3JldHVybiB0aGlzLl9fZGF0YV9fLmdldChBbil9LGxhLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24gdGkoQW4pe3JldHVybiB0aGlzLl9fZGF0YV9fLmhhcyhBbil9LGxhLnByb3RvdHlwZS5zZXQ9ZnVu''@;'; put 'put ''Y3Rpb24gZ28oQW4sYW4pe3ZhciB2aT10aGlzLl9fZGF0YV9fO2lmKHZpIGluc3RhbmNlb2YgZW4pe3ZhciBBcj12aS5fX2RhdGFfXztpZighQXR8fEFyLmxlbmd0aDwxOTkpcmV0dXJuIEFyLnB1c2goW0FuLGFuXSksdGhpcy5zaXplPSsrdmkuc2l6ZSx0aGlzO3ZpPXRoaXMuX19kYXRhX189''@;'; put 'put ''bmV3IGVpKEFyKX1yZXR1cm4gdmkuc2V0KEFuLGFuKSx0aGlzLnNpemU9dmkuc2l6ZSx0aGlzfTt2YXIgQ3M9aG4/ZnVuY3Rpb24oQW4pe3JldHVybiBudWxsPT1Bbj9bXTooQW49T2JqZWN0KEFuKSxmdW5jdGlvbiBGZShBbixhbil7Zm9yKHZhciB2aT0tMSxBcj1udWxsPT1Bbj8wOkFuLmxl''@;'; put 'put ''bmd0aCxQbz0wLGVvPVtdOysrdmk8QXI7KXt2YXIgb2w9QW5bdmldO2FuKG9sLHZpLEFuKSYmKGVvW1BvKytdPW9sKX1yZXR1cm4gZW99KGhuKEFuKSxmdW5jdGlvbihhbil7cmV0dXJuIFF0LmNhbGwoQW4sYW4pfSkpfTpmdW5jdGlvbiBLaCgpe3JldHVybltdfSxZaT1MYztmdW5jdGlvbiB5''@;'; put 'put ''bChBbixhbil7cmV0dXJuISEoYW49YW4/P3cpJiYoIm51bWJlciI9PXR5cGVvZiBBbnx8dGUudGVzdChBbikpJiZBbj4tMSYmQW4lMT09MCYmQW48YW59ZnVuY3Rpb24gT2woQW4pe2lmKG51bGwhPUFuKXt0cnl7cmV0dXJuICRlLmNhbGwoQW4pfWNhdGNoe310cnl7cmV0dXJuIEFuKyIifWNh''@;'; put 'put ''dGNoe319cmV0dXJuIiJ9ZnVuY3Rpb24gdWYoQW4sYW4pe3JldHVybiBBbj09PWFufHxBbiE9QW4mJmFuIT1hbn0oV3QmJllpKG5ldyBXdChuZXcgQXJyYXlCdWZmZXIoMSkpKSE9Vnx8QXQmJllpKG5ldyBBdCkhPVd8fFJuJiZZaShSbi5yZXNvbHZlKCkpIT1KfHxzdCYmWWkobmV3IHN0KSE9''@;'; put 'put ''bGV8fFV0JiZZaShuZXcgVXQpIT1TZSkmJihZaT1mdW5jdGlvbihBbil7dmFyIGFuPUxjKEFuKSx2aT1hbj09ZWU/QW4uY29uc3RydWN0b3I6dm9pZCAwLEFyPXZpP09sKHZpKToiIjtpZihBcilzd2l0Y2goQXIpe2Nhc2UgV2U6cmV0dXJuIFY7Y2FzZSBUdDpyZXR1cm4gVztjYXNlIG5yOnJl''@;'; put 'put ''dHVybiBKO2Nhc2UgaHQ6cmV0dXJuIGxlO2Nhc2UgeHQ6cmV0dXJuIFNlfXJldHVybiBhbn0pO3ZhciBzZD1EMChmdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHN9KCkpP0QwOmZ1bmN0aW9uKEFuKXtyZXR1cm4gTmEoQW4pJiZ0dC5jYWxsKEFuLCJjYWxsZWUiKSYmIVF0LmNhbGwoQW4sImNh''@;'; put 'put ''bGxlZSIpfSxkZj1BcnJheS5pc0FycmF5LGhmPWZ0fHxmdW5jdGlvbiBxaCgpe3JldHVybiExfTtmdW5jdGlvbiBmZihBbil7aWYoIU9jKEFuKSlyZXR1cm4hMTt2YXIgYW49TGMoQW4pO3JldHVybiBhbj09S3x8YW49PVV8fGFuPT1PfHxhbj09bmV9ZnVuY3Rpb24gR2goQW4pe3JldHVybiJu''@;'; put 'put ''dW1iZXIiPT10eXBlb2YgQW4mJkFuPi0xJiZBbiUxPT0wJiZBbjw9d31mdW5jdGlvbiBPYyhBbil7dmFyIGFuPXR5cGVvZiBBbjtyZXR1cm4gbnVsbCE9QW4mJigib2JqZWN0Ij09YW58fCJmdW5jdGlvbiI9PWFuKX1mdW5jdGlvbiBOYShBbil7cmV0dXJuIG51bGwhPUFuJiYib2JqZWN0Ij09''@;'; put 'put ''dHlwZW9mIEFufXZhciBEMz1EZT9mdW5jdGlvbiBrZShBbil7cmV0dXJuIGZ1bmN0aW9uKGFuKXtyZXR1cm4gQW4oYW4pfX0oRGUpOmZ1bmN0aW9uIFZ0KEFuKXtyZXR1cm4gTmEoQW4pJiZHaChBbi5sZW5ndGgpJiYhIXNlW0xjKEFuKV19O2Z1bmN0aW9uICRoKEFuKXtyZXR1cm4gZnVuY3Rp''@;'; put 'put ''b24gazEoQW4pe3JldHVybiBudWxsIT1BbiYmR2goQW4ubGVuZ3RoKSYmIWZmKEFuKX0oQW4pP2Z1bmN0aW9uIE5zKEFuLGFuKXt2YXIgdmk9ZGYoQW4pLEFyPSF2aSYmc2QoQW4pLFBvPSF2aSYmIUFyJiZoZihBbiksZW89IXZpJiYhQXImJiFQbyYmRDMoQW4pLG9sPXZpfHxBcnx8UG98fGVv''@;'; put 'put ''LHpvPW9sP2Z1bmN0aW9uIFZlKEFuLGFuKXtmb3IodmFyIHZpPS0xLEFyPUFycmF5KEFuKTsrK3ZpPEFuOylBclt2aV09YW4odmkpO3JldHVybiBBcn0oQW4ubGVuZ3RoLFN0cmluZyk6W10sVnM9em8ubGVuZ3RoO2Zvcih2YXIgU3MgaW4gQW4pKGFufHx0dC5jYWxsKEFuLFNzKSkmJighb2x8''@;'; put 'put ''fCEoImxlbmd0aCI9PVNzfHxQbyYmKCJvZmZzZXQiPT1Tc3x8InBhcmVudCI9PVNzKXx8ZW8mJigiYnVmZmVyIj09U3N8fCJieXRlTGVuZ3RoIj09U3N8fCJieXRlT2Zmc2V0Ij09U3MpfHx5bChTcyxWcykpKSYmem8ucHVzaChTcyk7cmV0dXJuIHpvfShBbik6ZnVuY3Rpb24gSnIoQW4pe2lm''@;'; put 'put ''KCFmdW5jdGlvbiB5MChBbil7dmFyIGFuPUFuJiZBbi5jb25zdHJ1Y3RvcjtyZXR1cm4gQW49PT0oImZ1bmN0aW9uIj09dHlwZW9mIGFuJiZhbi5wcm90b3R5cGV8fER0KX0oQW4pKXJldHVybiBPcihBbik7dmFyIGFuPVtdO2Zvcih2YXIgdmkgaW4gT2JqZWN0KEFuKSl0dC5jYWxsKEFuLHZp''@;'; put 'put ''KSYmImNvbnN0cnVjdG9yIiE9dmkmJmFuLnB1c2godmkpO3JldHVybiBhbn0oQW4pfXVlLmV4cG9ydHM9ZnVuY3Rpb24gZWgoQW4sYW4pe3JldHVybiBpcihBbixhbil9fSw4NDIzOih1ZSxYLHkpPT57dmFyIE89Im9iamVjdCI9PXR5cGVvZiBzZWxmJiZzZWxmJiZzZWxmLk9iamVjdD09PU9i''@;'; put 'put ''amVjdCYmc2VsZix6PSJvYmplY3QiPT10eXBlb2YgeS5nJiZ5LmcmJnkuZy5PYmplY3Q9PT1PYmplY3QmJnkuZ3x8T3x8RnVuY3Rpb24oInJldHVybiB0aGlzIikoKSxOPU9iamVjdC5wcm90b3R5cGUsTD1OLmhhc093blByb3BlcnR5LEs9Ti50b1N0cmluZyxVPXouU3ltYm9sLFc9VT9VLnRv''@;'; put 'put ''U3RyaW5nVGFnOnZvaWQgMDt1ZS5leHBvcnRzPWZ1bmN0aW9uIEooaWUpe2lmKCFmdW5jdGlvbiBuZShpZSl7dmFyIGxlPXR5cGVvZiBpZTtyZXR1cm4gbnVsbCE9aWUmJigib2JqZWN0Ij09bGV8fCJmdW5jdGlvbiI9PWxlKX0oaWUpKXJldHVybiExO3ZhciBsZT1mdW5jdGlvbiBZKGllKXty''@;'; put 'put ''ZXR1cm4gbnVsbD09aWU/dm9pZCAwPT09aWU/IltvYmplY3QgVW5kZWZpbmVkXSI6IltvYmplY3QgTnVsbF0iOlcmJlcgaW4gT2JqZWN0KGllKT9mdW5jdGlvbiBxKGllKXt2YXIgbGU9TC5jYWxsKGllLFcpLG1lPWllW1ddO3RyeXtpZVtXXT12b2lkIDA7dmFyIF9lPSEwfWNhdGNoe312YXIg''@;'; put 'put ''VGU9Sy5jYWxsKGllKTtyZXR1cm4gX2UmJihsZT9pZVtXXT1tZTpkZWxldGUgaWVbV10pLFRlfShpZSk6ZnVuY3Rpb24gZWUoaWUpe3JldHVybiBLLmNhbGwoaWUpfShpZSl9KGllKTtyZXR1cm4iW29iamVjdCBGdW5jdGlvbl0iPT1sZXx8IltvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dIj09''@;'; put 'put ''bGV8fCJbb2JqZWN0IEFzeW5jRnVuY3Rpb25dIj09bGV8fCJbb2JqZWN0IFByb3h5XSI9PWxlfX0sOTcyMjp1ZT0+e3VlLmV4cG9ydHM9ZnVuY3Rpb24gWCh5KXtyZXR1cm4gbnVsbD09eX19LDk3Mzg6dWU9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz1NYXRoLmFic30sNjMyOTp1ZT0+eyJ1''@;'; put 'put ''c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPU1hdGguZmxvb3J9LDM2Nzg6dWU9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz1OdW1iZXIuaXNOYU58fGZ1bmN0aW9uKHkpe3JldHVybiB5IT15fX0sMjI2NDp1ZT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPU1hdGgubWF4fSw1NzMwOnVlPT57InVz''@;'; put 'put ''ZSBzdHJpY3QiO3VlLmV4cG9ydHM9TWF0aC5taW59LDcwNzp1ZT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPU1hdGgucG93fSwzODYyOnVlPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9TWF0aC5yb3VuZH0sOTU1MDoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDM2NzgpO3Vl''@;'; put 'put ''LmV4cG9ydHM9ZnVuY3Rpb24oZyl7cmV0dXJuIEkoZyl8fDA9PT1nP2c6ZzwwPy0xOjF9fSwyMzE4Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNTcxNyksXz15KDMzNDkpLGc9eSg5NTA5KS5CdWZmZXIsQj1uZXcgQXJyYXkoMTYpO2Z1bmN0aW9uIHcoKXtfLmNhbGwodGhpcyw2''@;'; put 'put ''NCksdGhpcy5fYT0xNzMyNTg0MTkzLHRoaXMuX2I9NDAyMzIzMzQxNyx0aGlzLl9jPTI1NjIzODMxMDIsdGhpcy5fZD0yNzE3MzM4Nzh9ZnVuY3Rpb24gUChMLEspe3JldHVybiBMPDxLfEw+Pj4zMi1LfWZ1bmN0aW9uIEYoTCxLLFUsVyxZLHEsZWUpe3JldHVybiBQKEwrKEsmVXx+SyZXKStZ''@;'; put 'put ''K3F8MCxlZSkrS3wwfWZ1bmN0aW9uIE8oTCxLLFUsVyxZLHEsZWUpe3JldHVybiBQKEwrKEsmV3xVJn5XKStZK3F8MCxlZSkrS3wwfWZ1bmN0aW9uIHooTCxLLFUsVyxZLHEsZWUpe3JldHVybiBQKEwrKEteVV5XKStZK3F8MCxlZSkrS3wwfWZ1bmN0aW9uIE4oTCxLLFUsVyxZLHEsZWUpe3Jl''@;'; put 'put ''dHVybiBQKEwrKFVeKEt8flcpKStZK3F8MCxlZSkrS3wwfUkodyxfKSx3LnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKCl7Zm9yKHZhciBMPUIsSz0wO0s8MTY7KytLKUxbS109dGhpcy5fYmxvY2sucmVhZEludDMyTEUoNCpLKTt2YXIgVT10aGlzLl9hLFc9dGhpcy5fYixZPXRoaXMuX2Ms''@;'; put 'put ''cT10aGlzLl9kO1U9RihVLFcsWSxxLExbMF0sMzYxNDA5MDM2MCw3KSxxPUYocSxVLFcsWSxMWzFdLDM5MDU0MDI3MTAsMTIpLFk9RihZLHEsVSxXLExbMl0sNjA2MTA1ODE5LDE3KSxXPUYoVyxZLHEsVSxMWzNdLDMyNTA0NDE5NjYsMjIpLFU9RihVLFcsWSxxLExbNF0sNDExODU0ODM5OSw3''@;'; put 'put ''KSxxPUYocSxVLFcsWSxMWzVdLDEyMDAwODA0MjYsMTIpLFk9RihZLHEsVSxXLExbNl0sMjgyMTczNTk1NSwxNyksVz1GKFcsWSxxLFUsTFs3XSw0MjQ5MjYxMzEzLDIyKSxVPUYoVSxXLFkscSxMWzhdLDE3NzAwMzU0MTYsNykscT1GKHEsVSxXLFksTFs5XSwyMzM2NTUyODc5LDEyKSxZPUYo''@;'; put 'put ''WSxxLFUsVyxMWzEwXSw0Mjk0OTI1MjMzLDE3KSxXPUYoVyxZLHEsVSxMWzExXSwyMzA0NTYzMTM0LDIyKSxVPUYoVSxXLFkscSxMWzEyXSwxODA0NjAzNjgyLDcpLHE9RihxLFUsVyxZLExbMTNdLDQyNTQ2MjYxOTUsMTIpLFk9RihZLHEsVSxXLExbMTRdLDI3OTI5NjUwMDYsMTcpLFU9TyhV''@;'; put 'put ''LFc9RihXLFkscSxVLExbMTVdLDEyMzY1MzUzMjksMjIpLFkscSxMWzFdLDQxMjkxNzA3ODYsNSkscT1PKHEsVSxXLFksTFs2XSwzMjI1NDY1NjY0LDkpLFk9TyhZLHEsVSxXLExbMTFdLDY0MzcxNzcxMywxNCksVz1PKFcsWSxxLFUsTFswXSwzOTIxMDY5OTk0LDIwKSxVPU8oVSxXLFkscSxM''@;'; put 'put ''WzVdLDM1OTM0MDg2MDUsNSkscT1PKHEsVSxXLFksTFsxMF0sMzgwMTYwODMsOSksWT1PKFkscSxVLFcsTFsxNV0sMzYzNDQ4ODk2MSwxNCksVz1PKFcsWSxxLFUsTFs0XSwzODg5NDI5NDQ4LDIwKSxVPU8oVSxXLFkscSxMWzldLDU2ODQ0NjQzOCw1KSxxPU8ocSxVLFcsWSxMWzE0XSwzMjc1''@;'; put 'put ''MTYzNjA2LDkpLFk9TyhZLHEsVSxXLExbM10sNDEwNzYwMzMzNSwxNCksVz1PKFcsWSxxLFUsTFs4XSwxMTYzNTMxNTAxLDIwKSxVPU8oVSxXLFkscSxMWzEzXSwyODUwMjg1ODI5LDUpLHE9TyhxLFUsVyxZLExbMl0sNDI0MzU2MzUxMiw5KSxZPU8oWSxxLFUsVyxMWzddLDE3MzUzMjg0NzMs''@;'; put 'put ''MTQpLFU9eihVLFc9TyhXLFkscSxVLExbMTJdLDIzNjgzNTk1NjIsMjApLFkscSxMWzVdLDQyOTQ1ODg3MzgsNCkscT16KHEsVSxXLFksTFs4XSwyMjcyMzkyODMzLDExKSxZPXooWSxxLFUsVyxMWzExXSwxODM5MDMwNTYyLDE2KSxXPXooVyxZLHEsVSxMWzE0XSw0MjU5NjU3NzQwLDIzKSxV''@;'; put 'put ''PXooVSxXLFkscSxMWzFdLDI3NjM5NzUyMzYsNCkscT16KHEsVSxXLFksTFs0XSwxMjcyODkzMzUzLDExKSxZPXooWSxxLFUsVyxMWzddLDQxMzk0Njk2NjQsMTYpLFc9eihXLFkscSxVLExbMTBdLDMyMDAyMzY2NTYsMjMpLFU9eihVLFcsWSxxLExbMTNdLDY4MTI3OTE3NCw0KSxxPXoocSxV''@;'; put 'put ''LFcsWSxMWzBdLDM5MzY0MzAwNzQsMTEpLFk9eihZLHEsVSxXLExbM10sMzU3MjQ0NTMxNywxNiksVz16KFcsWSxxLFUsTFs2XSw3NjAyOTE4OSwyMyksVT16KFUsVyxZLHEsTFs5XSwzNjU0NjAyODA5LDQpLHE9eihxLFUsVyxZLExbMTJdLDM4NzMxNTE0NjEsMTEpLFk9eihZLHEsVSxXLExb''@;'; put 'put ''MTVdLDUzMDc0MjUyMCwxNiksVT1OKFUsVz16KFcsWSxxLFUsTFsyXSwzMjk5NjI4NjQ1LDIzKSxZLHEsTFswXSw0MDk2MzM2NDUyLDYpLHE9TihxLFUsVyxZLExbN10sMTEyNjg5MTQxNSwxMCksWT1OKFkscSxVLFcsTFsxNF0sMjg3ODYxMjM5MSwxNSksVz1OKFcsWSxxLFUsTFs1XSw0MjM3''@;'; put 'put ''NTMzMjQxLDIxKSxVPU4oVSxXLFkscSxMWzEyXSwxNzAwNDg1NTcxLDYpLHE9TihxLFUsVyxZLExbM10sMjM5OTk4MDY5MCwxMCksWT1OKFkscSxVLFcsTFsxMF0sNDI5MzkxNTc3MywxNSksVz1OKFcsWSxxLFUsTFsxXSwyMjQwMDQ0NDk3LDIxKSxVPU4oVSxXLFkscSxMWzhdLDE4NzMzMTMz''@;'; put 'put ''NTksNikscT1OKHEsVSxXLFksTFsxNV0sNDI2NDM1NTU1MiwxMCksWT1OKFkscSxVLFcsTFs2XSwyNzM0NzY4OTE2LDE1KSxXPU4oVyxZLHEsVSxMWzEzXSwxMzA5MTUxNjQ5LDIxKSxVPU4oVSxXLFkscSxMWzRdLDQxNDk0NDQyMjYsNikscT1OKHEsVSxXLFksTFsxMV0sMzE3NDc1NjkxNywx''@;'; put 'put ''MCksWT1OKFkscSxVLFcsTFsyXSw3MTg3ODcyNTksMTUpLFc9TihXLFkscSxVLExbOV0sMzk1MTQ4MTc0NSwyMSksdGhpcy5fYT10aGlzLl9hK1V8MCx0aGlzLl9iPXRoaXMuX2IrV3wwLHRoaXMuX2M9dGhpcy5fYytZfDAsdGhpcy5fZD10aGlzLl9kK3F8MH0sdy5wcm90b3R5cGUuX2RpZ2Vz''@;'; put 'put ''dD1mdW5jdGlvbigpe3RoaXMuX2Jsb2NrW3RoaXMuX2Jsb2NrT2Zmc2V0KytdPTEyOCx0aGlzLl9ibG9ja09mZnNldD41NiYmKHRoaXMuX2Jsb2NrLmZpbGwoMCx0aGlzLl9ibG9ja09mZnNldCw2NCksdGhpcy5fdXBkYXRlKCksdGhpcy5fYmxvY2tPZmZzZXQ9MCksdGhpcy5fYmxvY2suZmls''@;'; put 'put ''bCgwLHRoaXMuX2Jsb2NrT2Zmc2V0LDU2KSx0aGlzLl9ibG9jay53cml0ZVVJbnQzMkxFKHRoaXMuX2xlbmd0aFswXSw1NiksdGhpcy5fYmxvY2sud3JpdGVVSW50MzJMRSh0aGlzLl9sZW5ndGhbMV0sNjApLHRoaXMuX3VwZGF0ZSgpO3ZhciBMPWcuYWxsb2NVbnNhZmUoMTYpO3JldHVybiBM''@;'; put 'put ''LndyaXRlSW50MzJMRSh0aGlzLl9hLDApLEwud3JpdGVJbnQzMkxFKHRoaXMuX2IsNCksTC53cml0ZUludDMyTEUodGhpcy5fYyw4KSxMLndyaXRlSW50MzJMRSh0aGlzLl9kLDEyKSxMfSx1ZS5leHBvcnRzPXd9LDMwNDc6KHVlLFgseSk9Pnt2YXIgST15KDYyNDApLF89eSg5OTMxKTtmdW5j''@;'; put 'put ''dGlvbiBnKEIpe3RoaXMucmFuZD1CfHxuZXcgXy5SYW5kfXVlLmV4cG9ydHM9ZyxnLmNyZWF0ZT1mdW5jdGlvbih3KXtyZXR1cm4gbmV3IGcodyl9LGcucHJvdG90eXBlLl9yYW5kYmVsb3c9ZnVuY3Rpb24odyl7dmFyIFA9dy5iaXRMZW5ndGgoKSxGPU1hdGguY2VpbChQLzgpO2Rve3ZhciBP''@;'; put 'put ''PW5ldyBJKHRoaXMucmFuZC5nZW5lcmF0ZShGKSl9d2hpbGUoTy5jbXAodyk+PTApO3JldHVybiBPfSxnLnByb3RvdHlwZS5fcmFuZHJhbmdlPWZ1bmN0aW9uKHcsUCl7dmFyIEY9UC5zdWIodyk7cmV0dXJuIHcuYWRkKHRoaXMuX3JhbmRiZWxvdyhGKSl9LGcucHJvdG90eXBlLnRlc3Q9ZnVu''@;'; put 'put ''Y3Rpb24odyxQLEYpe3ZhciBPPXcuYml0TGVuZ3RoKCksej1JLm1vbnQodyksTj1uZXcgSSgxKS50b1JlZCh6KTtQfHwoUD1NYXRoLm1heCgxLE8vNDh8MCkpO2Zvcih2YXIgTD13LnN1Ym4oMSksSz0wOyFMLnRlc3RuKEspO0srKyk7Zm9yKHZhciBVPXcuc2hybihLKSxXPUwudG9SZWQoeik7''@;'; put 'put ''UD4wO1AtLSl7dmFyIHE9dGhpcy5fcmFuZHJhbmdlKG5ldyBJKDIpLEwpO0YmJkYocSk7dmFyIGVlPXEudG9SZWQoeikucmVkUG93KFUpO2lmKDAhPT1lZS5jbXAoTikmJjAhPT1lZS5jbXAoVykpe2Zvcih2YXIgSj0xO0o8SztKKyspe2lmKDA9PT0oZWU9ZWUucmVkU3FyKCkpLmNtcChOKSly''@;'; put 'put ''ZXR1cm4hMTtpZigwPT09ZWUuY21wKFcpKWJyZWFrfWlmKEo9PT1LKXJldHVybiExfX1yZXR1cm4hMH0sZy5wcm90b3R5cGUuZ2V0RGl2aXNvcj1mdW5jdGlvbih3LFApe3ZhciBGPXcuYml0TGVuZ3RoKCksTz1JLm1vbnQodyksej1uZXcgSSgxKS50b1JlZChPKTtQfHwoUD1NYXRoLm1heCgx''@;'; put 'put ''LEYvNDh8MCkpO2Zvcih2YXIgTj13LnN1Ym4oMSksTD0wOyFOLnRlc3RuKEwpO0wrKyk7Zm9yKHZhciBLPXcuc2hybihMKSxVPU4udG9SZWQoTyk7UD4wO1AtLSl7dmFyIFc9dGhpcy5fcmFuZHJhbmdlKG5ldyBJKDIpLE4pLFk9dy5nY2QoVyk7aWYoMCE9PVkuY21wbigxKSlyZXR1cm4gWTt2''@;'; put 'put ''YXIgcT1XLnRvUmVkKE8pLnJlZFBvdyhLKTtpZigwIT09cS5jbXAoeikmJjAhPT1xLmNtcChVKSl7Zm9yKHZhciBlZT0xO2VlPEw7ZWUrKyl7aWYoMD09PShxPXEucmVkU3FyKCkpLmNtcCh6KSlyZXR1cm4gcS5mcm9tUmVkKCkuc3VibigxKS5nY2Qodyk7aWYoMD09PXEuY21wKFUpKWJyZWFr''@;'; put 'put ''fWlmKGVlPT09TClyZXR1cm4ocT1xLnJlZFNxcigpKS5mcm9tUmVkKCkuc3VibigxKS5nY2Qodyl9fXJldHVybiExfX0sNjI0MDpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJLF8peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBnKFYscCl7aWYoIVYpdGhyb3cgbmV3IEVycm9yKHB8fCJBc3Nl''@;'; put 'put ''cnRpb24gZmFpbGVkIil9ZnVuY3Rpb24gQihWLHApe1Yuc3VwZXJfPXA7dmFyIGI9ZnVuY3Rpb24oKXt9O2IucHJvdG90eXBlPXAucHJvdG90eXBlLFYucHJvdG90eXBlPW5ldyBiLFYucHJvdG90eXBlLmNvbnN0cnVjdG9yPVZ9ZnVuY3Rpb24gdyhWLHAsYil7aWYody5pc0JOKFYpKXJldHVy''@;'; put 'put ''biBWO3RoaXMubmVnYXRpdmU9MCx0aGlzLndvcmRzPW51bGwsdGhpcy5sZW5ndGg9MCx0aGlzLnJlZD1udWxsLG51bGwhPT1WJiYoKCJsZSI9PT1wfHwiYmUiPT09cCkmJihiPXAscD0xMCksdGhpcy5faW5pdChWfHwwLHB8fDEwLGJ8fCJiZSIpKX12YXIgUDsib2JqZWN0Ij09dHlwZW9mIEk/''@;'; put 'put ''SS5leHBvcnRzPXc6Xy5CTj13LHcuQk49dyx3LndvcmRTaXplPTI2O3RyeXtQPXR5cGVvZiB3aW5kb3c8InUiJiZ0eXBlb2Ygd2luZG93LkJ1ZmZlcjwidSI/d2luZG93LkJ1ZmZlcjp5KDY2MTkpLkJ1ZmZlcn1jYXRjaHt9ZnVuY3Rpb24gRihWLHApe3ZhciBiPVYuY2hhckNvZGVBdChwKTty''@;'; put 'put ''ZXR1cm4gYj49NjUmJmI8PTcwP2ItNTU6Yj49OTcmJmI8PTEwMj9iLTg3OmItNDgmMTV9ZnVuY3Rpb24gTyhWLHAsYil7dmFyIHg9RihWLGIpO3JldHVybiBiLTE+PXAmJih4fD1GKFYsYi0xKTw8NCkseH1mdW5jdGlvbiB6KFYscCxiLHgpe2Zvcih2YXIgQz0wLFQ9TWF0aC5taW4oVi5sZW5n''@;'; put 'put ''dGgsYiksSD1wO0g8VDtIKyspe3ZhciBqPVYuY2hhckNvZGVBdChIKS00ODtDKj14LEMrPWo+PTQ5P2otNDkrMTA6aj49MTc/ai0xNysxMDpqfXJldHVybiBDfXcuaXNCTj1mdW5jdGlvbihwKXtyZXR1cm4gcCBpbnN0YW5jZW9mIHd8fG51bGwhPT1wJiYib2JqZWN0Ij09dHlwZW9mIHAmJnAu''@;'; put 'put ''Y29uc3RydWN0b3Iud29yZFNpemU9PT13LndvcmRTaXplJiZBcnJheS5pc0FycmF5KHAud29yZHMpfSx3Lm1heD1mdW5jdGlvbihwLGIpe3JldHVybiBwLmNtcChiKT4wP3A6Yn0sdy5taW49ZnVuY3Rpb24ocCxiKXtyZXR1cm4gcC5jbXAoYik8MD9wOmJ9LHcucHJvdG90eXBlLl9pbml0PWZ1''@;'; put 'put ''bmN0aW9uKHAsYix4KXtpZigibnVtYmVyIj09dHlwZW9mIHApcmV0dXJuIHRoaXMuX2luaXROdW1iZXIocCxiLHgpO2lmKCJvYmplY3QiPT10eXBlb2YgcClyZXR1cm4gdGhpcy5faW5pdEFycmF5KHAsYix4KTsiaGV4Ij09PWImJihiPTE2KSxnKGI9PT0oMHxiKSYmYj49MiYmYjw9MzYpO3Zh''@;'; put 'put ''ciBDPTA7Ii0iPT09KHA9cC50b1N0cmluZygpLnJlcGxhY2UoL1xzKy9nLCIiKSlbMF0mJihDKyssdGhpcy5uZWdhdGl2ZT0xKSxDPHAubGVuZ3RoJiYoMTY9PT1iP3RoaXMuX3BhcnNlSGV4KHAsQyx4KToodGhpcy5fcGFyc2VCYXNlKHAsYixDKSwibGUiPT09eCYmdGhpcy5faW5pdEFycmF5''@;'; put 'put ''KHRoaXMudG9BcnJheSgpLGIseCkpKX0sdy5wcm90b3R5cGUuX2luaXROdW1iZXI9ZnVuY3Rpb24ocCxiLHgpe3A8MCYmKHRoaXMubmVnYXRpdmU9MSxwPS1wKSxwPDY3MTA4ODY0Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZwXSx0aGlzLmxlbmd0aD0xKTpwPDQ1MDM1OTk2MjczNzA0OTY/KHRo''@;'; put 'put ''aXMud29yZHM9WzY3MTA4ODYzJnAscC82NzEwODg2NCY2NzEwODg2M10sdGhpcy5sZW5ndGg9Mik6KGcocDw5MDA3MTk5MjU0NzQwOTkyKSx0aGlzLndvcmRzPVs2NzEwODg2MyZwLHAvNjcxMDg4NjQmNjcxMDg4NjMsMV0sdGhpcy5sZW5ndGg9MyksImxlIj09PXgmJnRoaXMuX2luaXRBcnJh''@;'; put 'put ''eSh0aGlzLnRvQXJyYXkoKSxiLHgpfSx3LnByb3RvdHlwZS5faW5pdEFycmF5PWZ1bmN0aW9uKHAsYix4KXtpZihnKCJudW1iZXIiPT10eXBlb2YgcC5sZW5ndGgpLHAubGVuZ3RoPD0wKXJldHVybiB0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xLHRoaXM7dGhpcy5sZW5ndGg9TWF0aC5j''@;'; put 'put ''ZWlsKHAubGVuZ3RoLzMpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIEM9MDtDPHRoaXMubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPTA7dmFyIFQsSCxqPTA7aWYoImJlIj09PXgpZm9yKEM9cC5sZW5ndGgtMSxUPTA7Qz49MDtDLT0zKXRoaXMud29yZHNbVF18''@;'; put 'put ''PShIPXBbQ118cFtDLTFdPDw4fHBbQy0yXTw8MTYpPDxqJjY3MTA4ODYzLHRoaXMud29yZHNbVCsxXT1IPj4+MjYtaiY2NzEwODg2Mywoais9MjQpPj0yNiYmKGotPTI2LFQrKyk7ZWxzZSBpZigibGUiPT09eClmb3IoQz0wLFQ9MDtDPHAubGVuZ3RoO0MrPTMpdGhpcy53b3Jkc1tUXXw9KEg9''@;'; put 'put ''cFtDXXxwW0MrMV08PDh8cFtDKzJdPDwxNik8PGomNjcxMDg4NjMsdGhpcy53b3Jkc1tUKzFdPUg+Pj4yNi1qJjY3MTA4ODYzLChqKz0yNCk+PTI2JiYoai09MjYsVCsrKTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5fcGFyc2VIZXg9ZnVuY3Rpb24ocCxiLHgpe3RoaXMubGVu''@;'; put 'put ''Z3RoPU1hdGguY2VpbCgocC5sZW5ndGgtYikvNiksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgQz0wO0M8dGhpcy5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109MDt2YXIgaixUPTAsSD0wO2lmKCJiZSI9PT14KWZvcihDPXAubGVuZ3RoLTE7Qz49YjtDLT0yKWo9''@;'; put 'put ''TyhwLGIsQyk8PFQsdGhpcy53b3Jkc1tIXXw9NjcxMDg4NjMmaixUPj0xOD8oVC09MTgsdGhpcy53b3Jkc1tIKz0xXXw9aj4+PjI2KTpUKz04O2Vsc2UgZm9yKEM9KHAubGVuZ3RoLWIpJTI9PTA/YisxOmI7QzxwLmxlbmd0aDtDKz0yKWo9TyhwLGIsQyk8PFQsdGhpcy53b3Jkc1tIXXw9Njcx''@;'; put 'put ''MDg4NjMmaixUPj0xOD8oVC09MTgsdGhpcy53b3Jkc1tIKz0xXXw9aj4+PjI2KTpUKz04O3RoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuX3BhcnNlQmFzZT1mdW5jdGlvbihwLGIseCl7dGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MTtmb3IodmFyIEM9MCxUPTE7VDw9NjcxMDg4NjM7VCo9''@;'; put 'put ''YilDKys7Qy0tLFQ9VC9ifDA7Zm9yKHZhciBIPXAubGVuZ3RoLXgsaj1IJUMsRT1NYXRoLm1pbihILEgtaikreCxtPTAsQT14O0E8RTtBKz1DKW09eihwLEEsQStDLGIpLHRoaXMuaW11bG4oVCksdGhpcy53b3Jkc1swXSttPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPW06dGhpcy5faWFkZG4o''@;'; put 'put ''bSk7aWYoMCE9PWope3ZhciBhZT0xO2ZvcihtPXoocCxBLHAubGVuZ3RoLGIpLEE9MDtBPGo7QSsrKWFlKj1iO3RoaXMuaW11bG4oYWUpLHRoaXMud29yZHNbMF0rbTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1tOnRoaXMuX2lhZGRuKG0pfXRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuY29w''@;'; put 'put ''eT1mdW5jdGlvbihwKXtwLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBiPTA7Yjx0aGlzLmxlbmd0aDtiKyspcC53b3Jkc1tiXT10aGlzLndvcmRzW2JdO3AubGVuZ3RoPXRoaXMubGVuZ3RoLHAubmVnYXRpdmU9dGhpcy5uZWdhdGl2ZSxwLnJlZD10aGlzLnJlZH0sdy5w''@;'; put 'put ''cm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgcD1uZXcgdyhudWxsKTtyZXR1cm4gdGhpcy5jb3B5KHApLHB9LHcucHJvdG90eXBlLl9leHBhbmQ9ZnVuY3Rpb24ocCl7Zm9yKDt0aGlzLmxlbmd0aDxwOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7cmV0dXJuIHRoaXN9LHcucHJv''@;'; put 'put ''dG90eXBlLnN0cmlwPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmxlbmd0aD4xJiYwPT09dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXTspdGhpcy5sZW5ndGgtLTtyZXR1cm4gdGhpcy5fbm9ybVNpZ24oKX0sdy5wcm90b3R5cGUuX25vcm1TaWduPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxl''@;'; put 'put ''bmd0aCYmMD09PXRoaXMud29yZHNbMF0mJih0aGlzLm5lZ2F0aXZlPTApLHRoaXN9LHcucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5yZWQ/IjxCTi1SOiAiOiI8Qk46ICIpK3RoaXMudG9TdHJpbmcoMTYpKyI+In07dmFyIE49WyIiLCIwIiwiMDAiLCIwMDAiLCIw''@;'; put 'put ''MDAwIiwiMDAwMDAiLCIwMDAwMDAiLCIwMDAwMDAwIiwiMDAwMDAwMDAiLCIwMDAwMDAwMDAiLCIwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAw''@;'; put 'put ''IiwiMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIw''@;'; put 'put ''MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIl0sTD1bMCwwLDI1LDE2LDEyLDExLDEwLDksOCw4LDcsNyw3LDcsNiw2LDYsNiw2LDYsNiw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1XSxLPVswLDAsMzM1NTQ0MzIsNDMwNDY3MjEsMTY3''@;'; put 'put ''NzcyMTYsNDg4MjgxMjUsNjA0NjYxNzYsNDAzNTM2MDcsMTY3NzcyMTYsNDMwNDY3MjEsMWU3LDE5NDg3MTcxLDM1ODMxODA4LDYyNzQ4NTE3LDc1Mjk1MzYsMTEzOTA2MjUsMTY3NzcyMTYsMjQxMzc1NjksMzQwMTIyMjQsNDcwNDU4ODEsNjRlNiw0MDg0MTAxLDUxNTM2MzIsNjQzNjM0Myw3''@;'; put 'put ''OTYyNjI0LDk3NjU2MjUsMTE4ODEzNzYsMTQzNDg5MDcsMTcyMTAzNjgsMjA1MTExNDksMjQzZTUsMjg2MjkxNTEsMzM1NTQ0MzIsMzkxMzUzOTMsNDU0MzU0MjQsNTI1MjE4NzUsNjA0NjYxNzZdO2Z1bmN0aW9uIFcoVixwLGIpe2IubmVnYXRpdmU9cC5uZWdhdGl2ZV5WLm5lZ2F0aXZlO3Zh''@;'; put 'put ''ciB4PVYubGVuZ3RoK3AubGVuZ3RofDA7Yi5sZW5ndGg9eCx4PXgtMXwwO3ZhciBDPTB8Vi53b3Jkc1swXSxUPTB8cC53b3Jkc1swXSxIPUMqVCxFPUgvNjcxMDg4NjR8MDtiLndvcmRzWzBdPTY3MTA4ODYzJkg7Zm9yKHZhciBtPTE7bTx4O20rKyl7Zm9yKHZhciBBPUU+Pj4yNixhZT02NzEw''@;'; put 'put ''ODg2MyZFLHRlPU1hdGgubWluKG0scC5sZW5ndGgtMSksc2U9TWF0aC5tYXgoMCxtLVYubGVuZ3RoKzEpO3NlPD10ZTtzZSsrKUErPShIPShDPTB8Vi53b3Jkc1ttLXNlfDBdKSooVD0wfHAud29yZHNbc2VdKSthZSkvNjcxMDg4NjR8MCxhZT02NzEwODg2MyZIO2Iud29yZHNbbV09MHxhZSxF''@;'; put 'put ''PTB8QX1yZXR1cm4gMCE9PUU/Yi53b3Jkc1ttXT0wfEU6Yi5sZW5ndGgtLSxiLnN0cmlwKCl9dy5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24ocCxiKXt2YXIgeDtpZihiPTB8Ynx8MSwxNj09PShwPXB8fDEwKXx8ImhleCI9PT1wKXt4PSIiO2Zvcih2YXIgQz0wLFQ9MCxIPTA7SDx0aGlz''@;'; put 'put ''Lmxlbmd0aDtIKyspe3ZhciBqPXRoaXMud29yZHNbSF0sRT0oMTY3NzcyMTUmKGo8PEN8VCkpLnRvU3RyaW5nKDE2KTtUPWo+Pj4yNC1DJjE2Nzc3MjE1LChDKz0yKT49MjYmJihDLT0yNixILS0pLHg9MCE9PVR8fEghPT10aGlzLmxlbmd0aC0xP05bNi1FLmxlbmd0aF0rRSt4OkUreH1mb3Io''@;'; put 'put ''MCE9PVQmJih4PVQudG9TdHJpbmcoMTYpK3gpO3gubGVuZ3RoJWIhPTA7KXg9IjAiK3g7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoeD0iLSIreCkseH1pZihwPT09KDB8cCkmJnA+PTImJnA8PTM2KXt2YXIgbT1MW3BdLEE9S1twXTt4PSIiO3ZhciBhZT10aGlzLmNsb25lKCk7Zm9yKGFl''@;'; put 'put ''Lm5lZ2F0aXZlPTA7IWFlLmlzWmVybygpOyl7dmFyIHRlPWFlLm1vZG4oQSkudG9TdHJpbmcocCk7eD0oYWU9YWUuaWRpdm4oQSkpLmlzWmVybygpP3RlK3g6TlttLXRlLmxlbmd0aF0rdGUreH1mb3IodGhpcy5pc1plcm8oKSYmKHg9IjAiK3gpO3gubGVuZ3RoJWIhPTA7KXg9IjAiK3g7cmV0''@;'; put 'put ''dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoeD0iLSIreCkseH1nKCExLCJCYXNlIHNob3VsZCBiZSBiZXR3ZWVuIDIgYW5kIDM2Iil9LHcucHJvdG90eXBlLnRvTnVtYmVyPWZ1bmN0aW9uKCl7dmFyIHA9dGhpcy53b3Jkc1swXTtyZXR1cm4gMj09PXRoaXMubGVuZ3RoP3ArPTY3MTA4ODY0KnRo''@;'; put 'put ''aXMud29yZHNbMV06Mz09PXRoaXMubGVuZ3RoJiYxPT09dGhpcy53b3Jkc1syXT9wKz00NTAzNTk5NjI3MzcwNDk2KzY3MTA4ODY0KnRoaXMud29yZHNbMV06dGhpcy5sZW5ndGg+MiYmZyghMSwiTnVtYmVyIGNhbiBvbmx5IHNhZmVseSBzdG9yZSB1cCB0byA1MyBiaXRzIiksMCE9PXRoaXMu''@;'; put 'put ''bmVnYXRpdmU/LXA6cH0sdy5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9TdHJpbmcoMTYpfSx3LnByb3RvdHlwZS50b0J1ZmZlcj1mdW5jdGlvbihwLGIpe3JldHVybiBnKHR5cGVvZiBQPCJ1IiksdGhpcy50b0FycmF5TGlrZShQLHAsYil9LHcucHJvdG90eXBl''@;'; put 'put ''LnRvQXJyYXk9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gdGhpcy50b0FycmF5TGlrZShBcnJheSxwLGIpfSx3LnByb3RvdHlwZS50b0FycmF5TGlrZT1mdW5jdGlvbihwLGIseCl7dmFyIEM9dGhpcy5ieXRlTGVuZ3RoKCksVD14fHxNYXRoLm1heCgxLEMpO2coQzw9VCwiYnl0ZSBhcnJheSBsb25n''@;'; put 'put ''ZXIgdGhhbiBkZXNpcmVkIGxlbmd0aCIpLGcoVD4wLCJSZXF1ZXN0ZWQgYXJyYXkgbGVuZ3RoIDw9IDAiKSx0aGlzLnN0cmlwKCk7dmFyIEUsbSxIPSJsZSI9PT1iLGo9bmV3IHAoVCksQT10aGlzLmNsb25lKCk7aWYoSCl7Zm9yKG09MDshQS5pc1plcm8oKTttKyspRT1BLmFuZGxuKDI1NSks''@;'; put 'put ''QS5pdXNocm4oOCksalttXT1FO2Zvcig7bTxUO20rKylqW21dPTB9ZWxzZXtmb3IobT0wO208VC1DO20rKylqW21dPTA7Zm9yKG09MDshQS5pc1plcm8oKTttKyspRT1BLmFuZGxuKDI1NSksQS5pdXNocm4oOCksaltULW0tMV09RX1yZXR1cm4gan0sdy5wcm90b3R5cGUuX2NvdW50Qml0cz1N''@;'; put 'put ''YXRoLmNsejMyP2Z1bmN0aW9uKHApe3JldHVybiAzMi1NYXRoLmNsejMyKHApfTpmdW5jdGlvbihwKXt2YXIgYj1wLHg9MDtyZXR1cm4gYj49NDA5NiYmKHgrPTEzLGI+Pj49MTMpLGI+PTY0JiYoeCs9NyxiPj4+PTcpLGI+PTgmJih4Kz00LGI+Pj49NCksYj49MiYmKHgrPTIsYj4+Pj0yKSx4''@;'; put 'put ''K2J9LHcucHJvdG90eXBlLl96ZXJvQml0cz1mdW5jdGlvbihwKXtpZigwPT09cClyZXR1cm4gMjY7dmFyIGI9cCx4PTA7cmV0dXJuIDgxOTEmYnx8KHgrPTEzLGI+Pj49MTMpLDEyNyZifHwoeCs9NyxiPj4+PTcpLDE1JmJ8fCh4Kz00LGI+Pj49NCksMyZifHwoeCs9MixiPj4+PTIpLDEmYnx8''@;'; put 'put ''eCsrLHh9LHcucHJvdG90eXBlLmJpdExlbmd0aD1mdW5jdGlvbigpe3ZhciBiPXRoaXMuX2NvdW50Qml0cyh0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdKTtyZXR1cm4gMjYqKHRoaXMubGVuZ3RoLTEpK2J9LHcucHJvdG90eXBlLnplcm9CaXRzPWZ1bmN0aW9uKCl7aWYodGhpcy5pc1plcm8o''@;'; put 'put ''KSlyZXR1cm4gMDtmb3IodmFyIHA9MCxiPTA7Yjx0aGlzLmxlbmd0aDtiKyspe3ZhciB4PXRoaXMuX3plcm9CaXRzKHRoaXMud29yZHNbYl0pO2lmKHArPXgsMjYhPT14KWJyZWFrfXJldHVybiBwfSx3LnByb3RvdHlwZS5ieXRlTGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguY2VpbCh0''@;'; put 'put ''aGlzLmJpdExlbmd0aCgpLzgpfSx3LnByb3RvdHlwZS50b1R3b3M9ZnVuY3Rpb24ocCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlP3RoaXMuYWJzKCkuaW5vdG4ocCkuaWFkZG4oMSk6dGhpcy5jbG9uZSgpfSx3LnByb3RvdHlwZS5mcm9tVHdvcz1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy50''@;'; put 'put ''ZXN0bihwLTEpP3RoaXMubm90bihwKS5pYWRkbigxKS5pbmVnKCk6dGhpcy5jbG9uZSgpfSx3LnByb3RvdHlwZS5pc05lZz1mdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZX0sdy5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbmVnKCl9LHcu''@;'; put 'put ''cHJvdG90eXBlLmluZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1plcm8oKXx8KHRoaXMubmVnYXRpdmVePTEpLHRoaXN9LHcucHJvdG90eXBlLml1b3I9ZnVuY3Rpb24ocCl7Zm9yKDt0aGlzLmxlbmd0aDxwLmxlbmd0aDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO2Zvcih2YXIg''@;'; put 'put ''Yj0wO2I8cC5sZW5ndGg7YisrKXRoaXMud29yZHNbYl09dGhpcy53b3Jkc1tiXXxwLndvcmRzW2JdO3JldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlvcj1mdW5jdGlvbihwKXtyZXR1cm4gZyghKHRoaXMubmVnYXRpdmV8cC5uZWdhdGl2ZSkpLHRoaXMuaXVvcihwKX0sdy5wcm90''@;'; put 'put ''b3R5cGUub3I9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pb3IocCk6cC5jbG9uZSgpLmlvcih0aGlzKX0sdy5wcm90b3R5cGUudW9yPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaXVvcihw''@;'; put 'put ''KTpwLmNsb25lKCkuaXVvcih0aGlzKX0sdy5wcm90b3R5cGUuaXVhbmQ9ZnVuY3Rpb24ocCl7dmFyIGI7Yj10aGlzLmxlbmd0aD5wLmxlbmd0aD9wOnRoaXM7Zm9yKHZhciB4PTA7eDxiLmxlbmd0aDt4KyspdGhpcy53b3Jkc1t4XT10aGlzLndvcmRzW3hdJnAud29yZHNbeF07cmV0dXJuIHRo''@;'; put 'put ''aXMubGVuZ3RoPWIubGVuZ3RoLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaWFuZD1mdW5jdGlvbihwKXtyZXR1cm4gZyghKHRoaXMubmVnYXRpdmV8cC5uZWdhdGl2ZSkpLHRoaXMuaXVhbmQocCl9LHcucHJvdG90eXBlLmFuZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5s''@;'; put 'put ''ZW5ndGg/dGhpcy5jbG9uZSgpLmlhbmQocCk6cC5jbG9uZSgpLmlhbmQodGhpcyl9LHcucHJvdG90eXBlLnVhbmQ9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdWFuZChwKTpwLmNsb25lKCkuaXVhbmQodGhpcyl9LHcucHJvdG90eXBlLml1''@;'; put 'put ''eG9yPWZ1bmN0aW9uKHApe3ZhciBiLHg7dGhpcy5sZW5ndGg+cC5sZW5ndGg/KGI9dGhpcyx4PXApOihiPXAseD10aGlzKTtmb3IodmFyIEM9MDtDPHgubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPWIud29yZHNbQ11eeC53b3Jkc1tDXTtpZih0aGlzIT09Yilmb3IoO0M8Yi5sZW5ndGg7Qysr''@;'; put 'put ''KXRoaXMud29yZHNbQ109Yi53b3Jkc1tDXTtyZXR1cm4gdGhpcy5sZW5ndGg9Yi5sZW5ndGgsdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5peG9yPWZ1bmN0aW9uKHApe3JldHVybiBnKCEodGhpcy5uZWdhdGl2ZXxwLm5lZ2F0aXZlKSksdGhpcy5pdXhvcihwKX0sdy5wcm90b3R5cGUueG9y''@;'; put 'put ''PWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaXhvcihwKTpwLmNsb25lKCkuaXhvcih0aGlzKX0sdy5wcm90b3R5cGUudXhvcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLml1eG9yKHApOnAu''@;'; put 'put ''Y2xvbmUoKS5pdXhvcih0aGlzKX0sdy5wcm90b3R5cGUuaW5vdG49ZnVuY3Rpb24ocCl7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApO3ZhciBiPTB8TWF0aC5jZWlsKHAvMjYpLHg9cCUyNjt0aGlzLl9leHBhbmQoYikseD4wJiZiLS07Zm9yKHZhciBDPTA7QzxiO0MrKyl0aGlzLndvcmRz''@;'; put 'put ''W0NdPTY3MTA4ODYzJn50aGlzLndvcmRzW0NdO3JldHVybiB4PjAmJih0aGlzLndvcmRzW0NdPX50aGlzLndvcmRzW0NdJjY3MTA4ODYzPj4yNi14KSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLm5vdG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbm90bihwKX0sdy5wcm90''@;'; put 'put ''b3R5cGUuc2V0bj1mdW5jdGlvbihwLGIpe2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKTt2YXIgeD1wLzI2fDAsQz1wJTI2O3JldHVybiB0aGlzLl9leHBhbmQoeCsxKSx0aGlzLndvcmRzW3hdPWI/dGhpcy53b3Jkc1t4XXwxPDxDOnRoaXMud29yZHNbeF0mfigxPDxDKSx0aGlzLnN0cmlw''@;'; put 'put ''KCl9LHcucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24ocCl7dmFyIGIseCxDO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09cC5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLGI9dGhpcy5pc3ViKHApLHRoaXMubmVnYXRpdmVePTEsdGhpcy5fbm9ybVNpZ24oKTtpZigwPT09dGhpcy5u''@;'; put 'put ''ZWdhdGl2ZSYmMCE9PXAubmVnYXRpdmUpcmV0dXJuIHAubmVnYXRpdmU9MCxiPXRoaXMuaXN1YihwKSxwLm5lZ2F0aXZlPTEsYi5fbm9ybVNpZ24oKTt0aGlzLmxlbmd0aD5wLmxlbmd0aD8oeD10aGlzLEM9cCk6KHg9cCxDPXRoaXMpO2Zvcih2YXIgVD0wLEg9MDtIPEMubGVuZ3RoO0grKyl0''@;'; put 'put ''aGlzLndvcmRzW0hdPTY3MTA4ODYzJihiPSgwfHgud29yZHNbSF0pKygwfEMud29yZHNbSF0pK1QpLFQ9Yj4+PjI2O2Zvcig7MCE9PVQmJkg8eC5sZW5ndGg7SCsrKXRoaXMud29yZHNbSF09NjcxMDg4NjMmKGI9KDB8eC53b3Jkc1tIXSkrVCksVD1iPj4+MjY7aWYodGhpcy5sZW5ndGg9eC5s''@;'; put 'put ''ZW5ndGgsMCE9PVQpdGhpcy53b3Jkc1t0aGlzLmxlbmd0aF09VCx0aGlzLmxlbmd0aCsrO2Vsc2UgaWYoeCE9PXRoaXMpZm9yKDtIPHgubGVuZ3RoO0grKyl0aGlzLndvcmRzW0hdPXgud29yZHNbSF07cmV0dXJuIHRoaXN9LHcucHJvdG90eXBlLmFkZD1mdW5jdGlvbihwKXt2YXIgYjtyZXR1''@;'; put 'put ''cm4gMCE9PXAubmVnYXRpdmUmJjA9PT10aGlzLm5lZ2F0aXZlPyhwLm5lZ2F0aXZlPTAsYj10aGlzLnN1YihwKSxwLm5lZ2F0aXZlXj0xLGIpOjA9PT1wLm5lZ2F0aXZlJiYwIT09dGhpcy5uZWdhdGl2ZT8odGhpcy5uZWdhdGl2ZT0wLGI9cC5zdWIodGhpcyksdGhpcy5uZWdhdGl2ZT0xLGIp''@;'; put 'put ''OnRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYWRkKHApOnAuY2xvbmUoKS5pYWRkKHRoaXMpfSx3LnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKHApe2lmKDAhPT1wLm5lZ2F0aXZlKXtwLm5lZ2F0aXZlPTA7dmFyIGI9dGhpcy5pYWRkKHApO3JldHVybiBwLm5lZ2F0aXZlPTEs''@;'; put 'put ''Yi5fbm9ybVNpZ24oKX1pZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZChwKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fbm9ybVNpZ24oKTt2YXIgQyxULHg9dGhpcy5jbXAocCk7aWYoMD09PXgpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmxl''@;'; put 'put ''bmd0aD0xLHRoaXMud29yZHNbMF09MCx0aGlzO3g+MD8oQz10aGlzLFQ9cCk6KEM9cCxUPXRoaXMpO2Zvcih2YXIgSD0wLGo9MDtqPFQubGVuZ3RoO2orKylIPShiPSgwfEMud29yZHNbal0pLSgwfFQud29yZHNbal0pK0gpPj4yNix0aGlzLndvcmRzW2pdPTY3MTA4ODYzJmI7Zm9yKDswIT09''@;'; put 'put ''SCYmajxDLmxlbmd0aDtqKyspSD0oYj0oMHxDLndvcmRzW2pdKStIKT4+MjYsdGhpcy53b3Jkc1tqXT02NzEwODg2MyZiO2lmKDA9PT1IJiZqPEMubGVuZ3RoJiZDIT09dGhpcylmb3IoO2o8Qy5sZW5ndGg7aisrKXRoaXMud29yZHNbal09Qy53b3Jkc1tqXTtyZXR1cm4gdGhpcy5sZW5ndGg9''@;'; put 'put ''TWF0aC5tYXgodGhpcy5sZW5ndGgsaiksQyE9PXRoaXMmJih0aGlzLm5lZ2F0aXZlPTEpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXN1YihwKX07dmFyIFk9ZnVuY3Rpb24ocCxiLHgpe3ZhciBFLG0sQSxDPXAud29yZHMs''@;'; put 'put ''VD1iLndvcmRzLEg9eC53b3JkcyxqPTAsYWU9MHxDWzBdLHRlPTgxOTEmYWUsc2U9YWU+Pj4xMyx3ZT0wfENbMV0sVWU9ODE5MSZ3ZSxKZT13ZT4+PjEzLG90PTB8Q1syXSx4ZT04MTkxJm90LHZlPW90Pj4+MTMsWGU9MHxDWzNdLHplPTgxOTEmWGUsRGU9WGU+Pj4xMyxGZT0wfENbNF0sT2U9''@;'; put 'put ''ODE5MSZGZSxJZT1GZT4+PjEzLFZlPTB8Q1s1XSxrZT04MTkxJlZlLEFlPVZlPj4+MTMsX3Q9MHxDWzZdLG50PTgxOTEmX3QsUWU9X3Q+Pj4xMyx1bj0wfENbN10seXQ9ODE5MSZ1bixNdD11bj4+PjEzLER0PTB8Q1s4XSxpdD04MTkxJkR0LCRlPUR0Pj4+MTMsdHQ9MHxDWzldLEhlPTgxOTEm''@;'; put 'put ''dHQsdXQ9dHQ+Pj4xMyxxdD0wfFRbMF0sUnQ9ODE5MSZxdCxQdD1xdD4+PjEzLGNpPTB8VFsxXSxRdD04MTkxJmNpLHNuPWNpPj4+MTMsUmk9MHxUWzJdLGhuPTgxOTEmUmksZnQ9Umk+Pj4xMyxPcj0wfFRbM10sV3Q9ODE5MSZPcixBdD1Pcj4+PjEzLFJuPTB8VFs0XSxzdD04MTkxJlJuLFV0''@;'; put 'put ''PVJuPj4+MTMscmk9MHxUWzVdLFdlPTgxOTEmcmksVHQ9cmk+Pj4xMyxucj0wfFRbNl0saHQ9ODE5MSZucix4dD1ucj4+PjEzLGpuPTB8VFs3XSxybj04MTkxJmpuLHp0PWpuPj4+MTMsaGk9MHxUWzhdLGNuPTgxOTEmaGksZm49aGk+Pj4xMyxJaT0wfFRbOV0sWHQ9ODE5MSZJaSxlbj1JaT4+''@;'; put 'put ''PjEzO3gubmVnYXRpdmU9cC5uZWdhdGl2ZV5iLm5lZ2F0aXZlLHgubGVuZ3RoPTE5O3ZhciB1YT0oaisoRT1NYXRoLmltdWwodGUsUnQpKXwwKSsoKDgxOTEmKG09KG09TWF0aC5pbXVsKHRlLFB0KSkrTWF0aC5pbXVsKHNlLFJ0KXwwKSk8PDEzKXwwO2o9KChBPU1hdGguaW11bChzZSxQdCkp''@;'; put 'put ''KyhtPj4+MTMpfDApKyh1YT4+PjI2KXwwLHVhJj02NzEwODg2MyxFPU1hdGguaW11bChVZSxSdCksbT0obT1NYXRoLmltdWwoVWUsUHQpKStNYXRoLmltdWwoSmUsUnQpfDAsQT1NYXRoLmltdWwoSmUsUHQpO3ZhciBFaT0oaisoRT1FK01hdGguaW11bCh0ZSxRdCl8MCl8MCkrKCg4MTkxJiht''@;'; put 'put ''PShtPW0rTWF0aC5pbXVsKHRlLHNuKXwwKStNYXRoLmltdWwoc2UsUXQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2Usc24pfDApKyhtPj4+MTMpfDApKyhFaT4+PjI2KXwwLEVpJj02NzEwODg2MyxFPU1hdGguaW11bCh4ZSxSdCksbT0obT1NYXRoLmltdWwoeGUsUHQpKStNYXRo''@;'; put 'put ''LmltdWwodmUsUnQpfDAsQT1NYXRoLmltdWwodmUsUHQpLEU9RStNYXRoLmltdWwoVWUsUXQpfDAsbT0obT1tK01hdGguaW11bChVZSxzbil8MCkrTWF0aC5pbXVsKEplLFF0KXwwLEE9QStNYXRoLmltdWwoSmUsc24pfDA7dmFyIHZyPShqKyhFPUUrTWF0aC5pbXVsKHRlLGhuKXwwKXwwKSso''@;'; put 'put ''KDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsZnQpfDApK01hdGguaW11bChzZSxobil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxmdCl8MCkrKG0+Pj4xMyl8MCkrKHZyPj4+MjYpfDAsdnImPTY3MTA4ODYzLEU9TWF0aC5pbXVsKHplLFJ0KSxtPShtPU1hdGguaW11bCh6ZSxQ''@;'; put 'put ''dCkpK01hdGguaW11bChEZSxSdCl8MCxBPU1hdGguaW11bChEZSxQdCksRT1FK01hdGguaW11bCh4ZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKHhlLHNuKXwwKStNYXRoLmltdWwodmUsUXQpfDAsQT1BK01hdGguaW11bCh2ZSxzbil8MCxFPUUrTWF0aC5pbXVsKFVlLGhuKXwwLG09KG09bStN''@;'; put 'put ''YXRoLmltdWwoVWUsZnQpfDApK01hdGguaW11bChKZSxobil8MCxBPUErTWF0aC5pbXVsKEplLGZ0KXwwO3ZhciBXbj0oaisoRT1FK01hdGguaW11bCh0ZSxXdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLEF0KXwwKStNYXRoLmltdWwoc2UsV3QpfDApKTw8MTMpfDA7aj0o''@;'; put 'put ''KEE9QStNYXRoLmltdWwoc2UsQXQpfDApKyhtPj4+MTMpfDApKyhXbj4+PjI2KXwwLFduJj02NzEwODg2MyxFPU1hdGguaW11bChPZSxSdCksbT0obT1NYXRoLmltdWwoT2UsUHQpKStNYXRoLmltdWwoSWUsUnQpfDAsQT1NYXRoLmltdWwoSWUsUHQpLEU9RStNYXRoLmltdWwoemUsUXQpfDAs''@;'; put 'put ''bT0obT1tK01hdGguaW11bCh6ZSxzbil8MCkrTWF0aC5pbXVsKERlLFF0KXwwLEE9QStNYXRoLmltdWwoRGUsc24pfDAsRT1FK01hdGguaW11bCh4ZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKHhlLGZ0KXwwKStNYXRoLmltdWwodmUsaG4pfDAsQT1BK01hdGguaW11bCh2ZSxmdCl8MCxFPUUr''@;'; put 'put ''TWF0aC5pbXVsKFVlLFd0KXwwLG09KG09bStNYXRoLmltdWwoVWUsQXQpfDApK01hdGguaW11bChKZSxXdCl8MCxBPUErTWF0aC5pbXVsKEplLEF0KXwwO3ZhciAkaT0oaisoRT1FK01hdGguaW11bCh0ZSxzdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLFV0KXwwKStNYXRo''@;'; put 'put ''LmltdWwoc2Usc3QpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsVXQpfDApKyhtPj4+MTMpfDApKygkaT4+PjI2KXwwLCRpJj02NzEwODg2MyxFPU1hdGguaW11bChrZSxSdCksbT0obT1NYXRoLmltdWwoa2UsUHQpKStNYXRoLmltdWwoQWUsUnQpfDAsQT1NYXRoLmltdWwoQWUs''@;'; put 'put ''UHQpLEU9RStNYXRoLmltdWwoT2UsUXQpfDAsbT0obT1tK01hdGguaW11bChPZSxzbil8MCkrTWF0aC5pbXVsKEllLFF0KXwwLEE9QStNYXRoLmltdWwoSWUsc24pfDAsRT1FK01hdGguaW11bCh6ZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKHplLGZ0KXwwKStNYXRoLmltdWwoRGUsaG4pfDAs''@;'; put 'put ''QT1BK01hdGguaW11bChEZSxmdCl8MCxFPUUrTWF0aC5pbXVsKHhlLFd0KXwwLG09KG09bStNYXRoLmltdWwoeGUsQXQpfDApK01hdGguaW11bCh2ZSxXdCl8MCxBPUErTWF0aC5pbXVsKHZlLEF0KXwwLEU9RStNYXRoLmltdWwoVWUsc3QpfDAsbT0obT1tK01hdGguaW11bChVZSxVdCl8MCkr''@;'; put 'put ''TWF0aC5pbXVsKEplLHN0KXwwLEE9QStNYXRoLmltdWwoSmUsVXQpfDA7dmFyIGVpPShqKyhFPUUrTWF0aC5pbXVsKHRlLFdlKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsVHQpfDApK01hdGguaW11bChzZSxXZSl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxU''@;'; put 'put ''dCl8MCkrKG0+Pj4xMyl8MCkrKGVpPj4+MjYpfDAsZWkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKG50LFJ0KSxtPShtPU1hdGguaW11bChudCxQdCkpK01hdGguaW11bChRZSxSdCl8MCxBPU1hdGguaW11bChRZSxQdCksRT1FK01hdGguaW11bChrZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKGtl''@;'; put 'put ''LHNuKXwwKStNYXRoLmltdWwoQWUsUXQpfDAsQT1BK01hdGguaW11bChBZSxzbil8MCxFPUUrTWF0aC5pbXVsKE9lLGhuKXwwLG09KG09bStNYXRoLmltdWwoT2UsZnQpfDApK01hdGguaW11bChJZSxobil8MCxBPUErTWF0aC5pbXVsKEllLGZ0KXwwLEU9RStNYXRoLmltdWwoemUsV3QpfDAs''@;'; put 'put ''bT0obT1tK01hdGguaW11bCh6ZSxBdCl8MCkrTWF0aC5pbXVsKERlLFd0KXwwLEE9QStNYXRoLmltdWwoRGUsQXQpfDAsRT1FK01hdGguaW11bCh4ZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKHhlLFV0KXwwKStNYXRoLmltdWwodmUsc3QpfDAsQT1BK01hdGguaW11bCh2ZSxVdCl8MCxFPUUr''@;'; put 'put ''TWF0aC5pbXVsKFVlLFdlKXwwLG09KG09bStNYXRoLmltdWwoVWUsVHQpfDApK01hdGguaW11bChKZSxXZSl8MCxBPUErTWF0aC5pbXVsKEplLFR0KXwwO3ZhciBRcj0oaisoRT1FK01hdGguaW11bCh0ZSxodCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLHh0KXwwKStNYXRo''@;'; put 'put ''LmltdWwoc2UsaHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UseHQpfDApKyhtPj4+MTMpfDApKyhRcj4+PjI2KXwwLFFyJj02NzEwODg2MyxFPU1hdGguaW11bCh5dCxSdCksbT0obT1NYXRoLmltdWwoeXQsUHQpKStNYXRoLmltdWwoTXQsUnQpfDAsQT1NYXRoLmltdWwoTXQs''@;'; put 'put ''UHQpLEU9RStNYXRoLmltdWwobnQsUXQpfDAsbT0obT1tK01hdGguaW11bChudCxzbil8MCkrTWF0aC5pbXVsKFFlLFF0KXwwLEE9QStNYXRoLmltdWwoUWUsc24pfDAsRT1FK01hdGguaW11bChrZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKGtlLGZ0KXwwKStNYXRoLmltdWwoQWUsaG4pfDAs''@;'; put 'put ''QT1BK01hdGguaW11bChBZSxmdCl8MCxFPUUrTWF0aC5pbXVsKE9lLFd0KXwwLG09KG09bStNYXRoLmltdWwoT2UsQXQpfDApK01hdGguaW11bChJZSxXdCl8MCxBPUErTWF0aC5pbXVsKEllLEF0KXwwLEU9RStNYXRoLmltdWwoemUsc3QpfDAsbT0obT1tK01hdGguaW11bCh6ZSxVdCl8MCkr''@;'; put 'put ''TWF0aC5pbXVsKERlLHN0KXwwLEE9QStNYXRoLmltdWwoRGUsVXQpfDAsRT1FK01hdGguaW11bCh4ZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKHhlLFR0KXwwKStNYXRoLmltdWwodmUsV2UpfDAsQT1BK01hdGguaW11bCh2ZSxUdCl8MCxFPUUrTWF0aC5pbXVsKFVlLGh0KXwwLG09KG09bStN''@;'; put 'put ''YXRoLmltdWwoVWUseHQpfDApK01hdGguaW11bChKZSxodCl8MCxBPUErTWF0aC5pbXVsKEplLHh0KXwwO3ZhciBWaT0oaisoRT1FK01hdGguaW11bCh0ZSxybil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLHp0KXwwKStNYXRoLmltdWwoc2Uscm4pfDApKTw8MTMpfDA7aj0o''@;'; put 'put ''KEE9QStNYXRoLmltdWwoc2UsenQpfDApKyhtPj4+MTMpfDApKyhWaT4+PjI2KXwwLFZpJj02NzEwODg2MyxFPU1hdGguaW11bChpdCxSdCksbT0obT1NYXRoLmltdWwoaXQsUHQpKStNYXRoLmltdWwoJGUsUnQpfDAsQT1NYXRoLmltdWwoJGUsUHQpLEU9RStNYXRoLmltdWwoeXQsUXQpfDAs''@;'; put 'put ''bT0obT1tK01hdGguaW11bCh5dCxzbil8MCkrTWF0aC5pbXVsKE10LFF0KXwwLEE9QStNYXRoLmltdWwoTXQsc24pfDAsRT1FK01hdGguaW11bChudCxobil8MCxtPShtPW0rTWF0aC5pbXVsKG50LGZ0KXwwKStNYXRoLmltdWwoUWUsaG4pfDAsQT1BK01hdGguaW11bChRZSxmdCl8MCxFPUUr''@;'; put 'put ''TWF0aC5pbXVsKGtlLFd0KXwwLG09KG09bStNYXRoLmltdWwoa2UsQXQpfDApK01hdGguaW11bChBZSxXdCl8MCxBPUErTWF0aC5pbXVsKEFlLEF0KXwwLEU9RStNYXRoLmltdWwoT2Usc3QpfDAsbT0obT1tK01hdGguaW11bChPZSxVdCl8MCkrTWF0aC5pbXVsKEllLHN0KXwwLEE9QStNYXRo''@;'; put 'put ''LmltdWwoSWUsVXQpfDAsRT1FK01hdGguaW11bCh6ZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKHplLFR0KXwwKStNYXRoLmltdWwoRGUsV2UpfDAsQT1BK01hdGguaW11bChEZSxUdCl8MCxFPUUrTWF0aC5pbXVsKHhlLGh0KXwwLG09KG09bStNYXRoLmltdWwoeGUseHQpfDApK01hdGguaW11''@;'; put 'put ''bCh2ZSxodCl8MCxBPUErTWF0aC5pbXVsKHZlLHh0KXwwLEU9RStNYXRoLmltdWwoVWUscm4pfDAsbT0obT1tK01hdGguaW11bChVZSx6dCl8MCkrTWF0aC5pbXVsKEplLHJuKXwwLEE9QStNYXRoLmltdWwoSmUsenQpfDA7dmFyIE5pPShqKyhFPUUrTWF0aC5pbXVsKHRlLGNuKXwwKXwwKSso''@;'; put 'put ''KDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsZm4pfDApK01hdGguaW11bChzZSxjbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxmbil8MCkrKG0+Pj4xMyl8MCkrKE5pPj4+MjYpfDAsTmkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLFJ0KSxtPShtPU1hdGguaW11bChIZSxQ''@;'; put 'put ''dCkpK01hdGguaW11bCh1dCxSdCl8MCxBPU1hdGguaW11bCh1dCxQdCksRT1FK01hdGguaW11bChpdCxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKGl0LHNuKXwwKStNYXRoLmltdWwoJGUsUXQpfDAsQT1BK01hdGguaW11bCgkZSxzbil8MCxFPUUrTWF0aC5pbXVsKHl0LGhuKXwwLG09KG09bStN''@;'; put 'put ''YXRoLmltdWwoeXQsZnQpfDApK01hdGguaW11bChNdCxobil8MCxBPUErTWF0aC5pbXVsKE10LGZ0KXwwLEU9RStNYXRoLmltdWwobnQsV3QpfDAsbT0obT1tK01hdGguaW11bChudCxBdCl8MCkrTWF0aC5pbXVsKFFlLFd0KXwwLEE9QStNYXRoLmltdWwoUWUsQXQpfDAsRT1FK01hdGguaW11''@;'; put 'put ''bChrZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKGtlLFV0KXwwKStNYXRoLmltdWwoQWUsc3QpfDAsQT1BK01hdGguaW11bChBZSxVdCl8MCxFPUUrTWF0aC5pbXVsKE9lLFdlKXwwLG09KG09bStNYXRoLmltdWwoT2UsVHQpfDApK01hdGguaW11bChJZSxXZSl8MCxBPUErTWF0aC5pbXVsKEll''@;'; put 'put ''LFR0KXwwLEU9RStNYXRoLmltdWwoemUsaHQpfDAsbT0obT1tK01hdGguaW11bCh6ZSx4dCl8MCkrTWF0aC5pbXVsKERlLGh0KXwwLEE9QStNYXRoLmltdWwoRGUseHQpfDAsRT1FK01hdGguaW11bCh4ZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKHhlLHp0KXwwKStNYXRoLmltdWwodmUscm4p''@;'; put 'put ''fDAsQT1BK01hdGguaW11bCh2ZSx6dCl8MCxFPUUrTWF0aC5pbXVsKFVlLGNuKXwwLG09KG09bStNYXRoLmltdWwoVWUsZm4pfDApK01hdGguaW11bChKZSxjbil8MCxBPUErTWF0aC5pbXVsKEplLGZuKXwwO3ZhciBEYT0oaisoRT1FK01hdGguaW11bCh0ZSxYdCl8MCl8MCkrKCg4MTkxJiht''@;'; put 'put ''PShtPW0rTWF0aC5pbXVsKHRlLGVuKXwwKStNYXRoLmltdWwoc2UsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsZW4pfDApKyhtPj4+MTMpfDApKyhEYT4+PjI2KXwwLERhJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxRdCksbT0obT1NYXRoLmltdWwoSGUsc24pKStNYXRo''@;'; put 'put ''LmltdWwodXQsUXQpfDAsQT1NYXRoLmltdWwodXQsc24pLEU9RStNYXRoLmltdWwoaXQsaG4pfDAsbT0obT1tK01hdGguaW11bChpdCxmdCl8MCkrTWF0aC5pbXVsKCRlLGhuKXwwLEE9QStNYXRoLmltdWwoJGUsZnQpfDAsRT1FK01hdGguaW11bCh5dCxXdCl8MCxtPShtPW0rTWF0aC5pbXVs''@;'; put 'put ''KHl0LEF0KXwwKStNYXRoLmltdWwoTXQsV3QpfDAsQT1BK01hdGguaW11bChNdCxBdCl8MCxFPUUrTWF0aC5pbXVsKG50LHN0KXwwLG09KG09bStNYXRoLmltdWwobnQsVXQpfDApK01hdGguaW11bChRZSxzdCl8MCxBPUErTWF0aC5pbXVsKFFlLFV0KXwwLEU9RStNYXRoLmltdWwoa2UsV2Up''@;'; put 'put ''fDAsbT0obT1tK01hdGguaW11bChrZSxUdCl8MCkrTWF0aC5pbXVsKEFlLFdlKXwwLEE9QStNYXRoLmltdWwoQWUsVHQpfDAsRT1FK01hdGguaW11bChPZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKE9lLHh0KXwwKStNYXRoLmltdWwoSWUsaHQpfDAsQT1BK01hdGguaW11bChJZSx4dCl8MCxF''@;'; put 'put ''PUUrTWF0aC5pbXVsKHplLHJuKXwwLG09KG09bStNYXRoLmltdWwoemUsenQpfDApK01hdGguaW11bChEZSxybil8MCxBPUErTWF0aC5pbXVsKERlLHp0KXwwLEU9RStNYXRoLmltdWwoeGUsY24pfDAsbT0obT1tK01hdGguaW11bCh4ZSxmbil8MCkrTWF0aC5pbXVsKHZlLGNuKXwwLEE9QStN''@;'; put 'put ''YXRoLmltdWwodmUsZm4pfDA7dmFyIExyPShqKyhFPUUrTWF0aC5pbXVsKFVlLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoVWUsZW4pfDApK01hdGguaW11bChKZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChKZSxlbil8MCkrKG0+Pj4xMyl8MCkrKExyPj4+''@;'; put 'put ''MjYpfDAsTHImPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLGhuKSxtPShtPU1hdGguaW11bChIZSxmdCkpK01hdGguaW11bCh1dCxobil8MCxBPU1hdGguaW11bCh1dCxmdCksRT1FK01hdGguaW11bChpdCxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKGl0LEF0KXwwKStNYXRoLmltdWwoJGUsV3Qp''@;'; put 'put ''fDAsQT1BK01hdGguaW11bCgkZSxBdCl8MCxFPUUrTWF0aC5pbXVsKHl0LHN0KXwwLG09KG09bStNYXRoLmltdWwoeXQsVXQpfDApK01hdGguaW11bChNdCxzdCl8MCxBPUErTWF0aC5pbXVsKE10LFV0KXwwLEU9RStNYXRoLmltdWwobnQsV2UpfDAsbT0obT1tK01hdGguaW11bChudCxUdCl8''@;'; put 'put ''MCkrTWF0aC5pbXVsKFFlLFdlKXwwLEE9QStNYXRoLmltdWwoUWUsVHQpfDAsRT1FK01hdGguaW11bChrZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKGtlLHh0KXwwKStNYXRoLmltdWwoQWUsaHQpfDAsQT1BK01hdGguaW11bChBZSx4dCl8MCxFPUUrTWF0aC5pbXVsKE9lLHJuKXwwLG09KG09''@;'; put 'put ''bStNYXRoLmltdWwoT2UsenQpfDApK01hdGguaW11bChJZSxybil8MCxBPUErTWF0aC5pbXVsKEllLHp0KXwwLEU9RStNYXRoLmltdWwoemUsY24pfDAsbT0obT1tK01hdGguaW11bCh6ZSxmbil8MCkrTWF0aC5pbXVsKERlLGNuKXwwLEE9QStNYXRoLmltdWwoRGUsZm4pfDA7dmFyIFdpPShq''@;'; put 'put ''KyhFPUUrTWF0aC5pbXVsKHhlLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoeGUsZW4pfDApK01hdGguaW11bCh2ZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bCh2ZSxlbil8MCkrKG0+Pj4xMyl8MCkrKFdpPj4+MjYpfDAsV2kmPTY3MTA4ODYzLEU9TWF0aC5p''@;'; put 'put ''bXVsKEhlLFd0KSxtPShtPU1hdGguaW11bChIZSxBdCkpK01hdGguaW11bCh1dCxXdCl8MCxBPU1hdGguaW11bCh1dCxBdCksRT1FK01hdGguaW11bChpdCxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKGl0LFV0KXwwKStNYXRoLmltdWwoJGUsc3QpfDAsQT1BK01hdGguaW11bCgkZSxVdCl8MCxF''@;'; put 'put ''PUUrTWF0aC5pbXVsKHl0LFdlKXwwLG09KG09bStNYXRoLmltdWwoeXQsVHQpfDApK01hdGguaW11bChNdCxXZSl8MCxBPUErTWF0aC5pbXVsKE10LFR0KXwwLEU9RStNYXRoLmltdWwobnQsaHQpfDAsbT0obT1tK01hdGguaW11bChudCx4dCl8MCkrTWF0aC5pbXVsKFFlLGh0KXwwLEE9QStN''@;'; put 'put ''YXRoLmltdWwoUWUseHQpfDAsRT1FK01hdGguaW11bChrZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKGtlLHp0KXwwKStNYXRoLmltdWwoQWUscm4pfDAsQT1BK01hdGguaW11bChBZSx6dCl8MCxFPUUrTWF0aC5pbXVsKE9lLGNuKXwwLG09KG09bStNYXRoLmltdWwoT2UsZm4pfDApK01hdGgu''@;'; put 'put ''aW11bChJZSxjbil8MCxBPUErTWF0aC5pbXVsKEllLGZuKXwwO3ZhciBwYT0oaisoRT1FK01hdGguaW11bCh6ZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHplLGVuKXwwKStNYXRoLmltdWwoRGUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoRGUsZW4pfDAp''@;'; put 'put ''KyhtPj4+MTMpfDApKyhwYT4+PjI2KXwwLHBhJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxzdCksbT0obT1NYXRoLmltdWwoSGUsVXQpKStNYXRoLmltdWwodXQsc3QpfDAsQT1NYXRoLmltdWwodXQsVXQpLEU9RStNYXRoLmltdWwoaXQsV2UpfDAsbT0obT1tK01hdGguaW11bChpdCxUdCl8''@;'; put 'put ''MCkrTWF0aC5pbXVsKCRlLFdlKXwwLEE9QStNYXRoLmltdWwoJGUsVHQpfDAsRT1FK01hdGguaW11bCh5dCxodCl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LHh0KXwwKStNYXRoLmltdWwoTXQsaHQpfDAsQT1BK01hdGguaW11bChNdCx4dCl8MCxFPUUrTWF0aC5pbXVsKG50LHJuKXwwLG09KG09''@;'; put 'put ''bStNYXRoLmltdWwobnQsenQpfDApK01hdGguaW11bChRZSxybil8MCxBPUErTWF0aC5pbXVsKFFlLHp0KXwwLEU9RStNYXRoLmltdWwoa2UsY24pfDAsbT0obT1tK01hdGguaW11bChrZSxmbil8MCkrTWF0aC5pbXVsKEFlLGNuKXwwLEE9QStNYXRoLmltdWwoQWUsZm4pfDA7dmFyIFFuPShq''@;'; put 'put ''KyhFPUUrTWF0aC5pbXVsKE9lLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoT2UsZW4pfDApK01hdGguaW11bChJZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChJZSxlbil8MCkrKG0+Pj4xMyl8MCkrKFFuPj4+MjYpfDAsUW4mPTY3MTA4ODYzLEU9TWF0aC5p''@;'; put 'put ''bXVsKEhlLFdlKSxtPShtPU1hdGguaW11bChIZSxUdCkpK01hdGguaW11bCh1dCxXZSl8MCxBPU1hdGguaW11bCh1dCxUdCksRT1FK01hdGguaW11bChpdCxodCl8MCxtPShtPW0rTWF0aC5pbXVsKGl0LHh0KXwwKStNYXRoLmltdWwoJGUsaHQpfDAsQT1BK01hdGguaW11bCgkZSx4dCl8MCxF''@;'; put 'put ''PUUrTWF0aC5pbXVsKHl0LHJuKXwwLG09KG09bStNYXRoLmltdWwoeXQsenQpfDApK01hdGguaW11bChNdCxybil8MCxBPUErTWF0aC5pbXVsKE10LHp0KXwwLEU9RStNYXRoLmltdWwobnQsY24pfDAsbT0obT1tK01hdGguaW11bChudCxmbil8MCkrTWF0aC5pbXVsKFFlLGNuKXwwLEE9QStN''@;'; put 'put ''YXRoLmltdWwoUWUsZm4pfDA7dmFyIGxhPShqKyhFPUUrTWF0aC5pbXVsKGtlLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoa2UsZW4pfDApK01hdGguaW11bChBZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChBZSxlbil8MCkrKG0+Pj4xMyl8MCkrKGxhPj4+''@;'; put 'put ''MjYpfDAsbGEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLGh0KSxtPShtPU1hdGguaW11bChIZSx4dCkpK01hdGguaW11bCh1dCxodCl8MCxBPU1hdGguaW11bCh1dCx4dCksRT1FK01hdGguaW11bChpdCxybil8MCxtPShtPW0rTWF0aC5pbXVsKGl0LHp0KXwwKStNYXRoLmltdWwoJGUscm4p''@;'; put 'put ''fDAsQT1BK01hdGguaW11bCgkZSx6dCl8MCxFPUUrTWF0aC5pbXVsKHl0LGNuKXwwLG09KG09bStNYXRoLmltdWwoeXQsZm4pfDApK01hdGguaW11bChNdCxjbil8MCxBPUErTWF0aC5pbXVsKE10LGZuKXwwO3ZhciB5YT0oaisoRT1FK01hdGguaW11bChudCxYdCl8MCl8MCkrKCg4MTkxJiht''@;'; put 'put ''PShtPW0rTWF0aC5pbXVsKG50LGVuKXwwKStNYXRoLmltdWwoUWUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoUWUsZW4pfDApKyhtPj4+MTMpfDApKyh5YT4+PjI2KXwwLHlhJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxybiksbT0obT1NYXRoLmltdWwoSGUsenQpKStNYXRo''@;'; put 'put ''LmltdWwodXQscm4pfDAsQT1NYXRoLmltdWwodXQsenQpLEU9RStNYXRoLmltdWwoaXQsY24pfDAsbT0obT1tK01hdGguaW11bChpdCxmbil8MCkrTWF0aC5pbXVsKCRlLGNuKXwwLEE9QStNYXRoLmltdWwoJGUsZm4pfDA7dmFyIExhPShqKyhFPUUrTWF0aC5pbXVsKHl0LFh0KXwwKXwwKSso''@;'; put 'put ''KDgxOTEmKG09KG09bStNYXRoLmltdWwoeXQsZW4pfDApK01hdGguaW11bChNdCxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChNdCxlbil8MCkrKG0+Pj4xMyl8MCkrKExhPj4+MjYpfDAsTGEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLGNuKSxtPShtPU1hdGguaW11bChIZSxm''@;'; put 'put ''bikpK01hdGguaW11bCh1dCxjbil8MCxBPU1hdGguaW11bCh1dCxmbik7dmFyIEZhPShqKyhFPUUrTWF0aC5pbXVsKGl0LFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoaXQsZW4pfDApK01hdGguaW11bCgkZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bCgkZSxl''@;'; put 'put ''bil8MCkrKG0+Pj4xMyl8MCkrKEZhPj4+MjYpfDAsRmEmPTY3MTA4ODYzO3ZhciB0aT0oaisoRT1NYXRoLmltdWwoSGUsWHQpKXwwKSsoKDgxOTEmKG09KG09TWF0aC5pbXVsKEhlLGVuKSkrTWF0aC5pbXVsKHV0LFh0KXwwKSk8PDEzKXwwO3JldHVybiBqPSgoQT1NYXRoLmltdWwodXQsZW4p''@;'; put 'put ''KSsobT4+PjEzKXwwKSsodGk+Pj4yNil8MCx0aSY9NjcxMDg4NjMsSFswXT11YSxIWzFdPUVpLEhbMl09dnIsSFszXT1XbixIWzRdPSRpLEhbNV09ZWksSFs2XT1RcixIWzddPVZpLEhbOF09TmksSFs5XT1EYSxIWzEwXT1McixIWzExXT1XaSxIWzEyXT1wYSxIWzEzXT1RbixIWzE0XT1sYSxI''@;'; put 'put ''WzE1XT15YSxIWzE2XT1MYSxIWzE3XT1GYSxIWzE4XT10aSwwIT09aiYmKEhbMTldPWoseC5sZW5ndGgrKykseH07ZnVuY3Rpb24gZWUoVixwLGIpe3JldHVybihuZXcgSikubXVscChWLHAsYil9ZnVuY3Rpb24gSihWLHApe3RoaXMueD1WLHRoaXMueT1wfU1hdGguaW11bHx8KFk9Vyksdy5w''@;'; put 'put ''cm90b3R5cGUubXVsVG89ZnVuY3Rpb24ocCxiKXt2YXIgeCxDPXRoaXMubGVuZ3RoK3AubGVuZ3RoO3JldHVybiB4PTEwPT09dGhpcy5sZW5ndGgmJjEwPT09cC5sZW5ndGg/WSh0aGlzLHAsYik6Qzw2Mz9XKHRoaXMscCxiKTpDPDEwMjQ/ZnVuY3Rpb24gcShWLHAsYil7Yi5uZWdhdGl2ZT1w''@;'; put 'put ''Lm5lZ2F0aXZlXlYubmVnYXRpdmUsYi5sZW5ndGg9Vi5sZW5ndGgrcC5sZW5ndGg7Zm9yKHZhciB4PTAsQz0wLFQ9MDtUPGIubGVuZ3RoLTE7VCsrKXt2YXIgSD1DO0M9MDtmb3IodmFyIGo9NjcxMDg4NjMmeCxFPU1hdGgubWluKFQscC5sZW5ndGgtMSksbT1NYXRoLm1heCgwLFQtVi5sZW5n''@;'; put 'put ''dGgrMSk7bTw9RTttKyspe3ZhciBzZT0oMHxWLndvcmRzW1QtbV0pKigwfHAud29yZHNbbV0pLHdlPTY3MTA4ODYzJnNlO2o9NjcxMDg4NjMmKHdlPXdlK2p8MCksQys9KEg9KEg9SCsoc2UvNjcxMDg4NjR8MCl8MCkrKHdlPj4+MjYpfDApPj4+MjYsSCY9NjcxMDg4NjN9Yi53b3Jkc1tUXT1q''@;'; put 'put ''LHg9SCxIPUN9cmV0dXJuIDAhPT14P2Iud29yZHNbVF09eDpiLmxlbmd0aC0tLGIuc3RyaXAoKX0odGhpcyxwLGIpOmVlKHRoaXMscCxiKSx4fSxKLnByb3RvdHlwZS5tYWtlUkJUPWZ1bmN0aW9uKHApe2Zvcih2YXIgYj1uZXcgQXJyYXkocCkseD13LnByb3RvdHlwZS5fY291bnRCaXRzKHAp''@;'; put 'put ''LTEsQz0wO0M8cDtDKyspYltDXT10aGlzLnJldkJpbihDLHgscCk7cmV0dXJuIGJ9LEoucHJvdG90eXBlLnJldkJpbj1mdW5jdGlvbihwLGIseCl7aWYoMD09PXB8fHA9PT14LTEpcmV0dXJuIHA7Zm9yKHZhciBDPTAsVD0wO1Q8YjtUKyspQ3w9KDEmcCk8PGItVC0xLHA+Pj0xO3JldHVybiBD''@;'; put 'put ''fSxKLnByb3RvdHlwZS5wZXJtdXRlPWZ1bmN0aW9uKHAsYix4LEMsVCxIKXtmb3IodmFyIGo9MDtqPEg7aisrKUNbal09YltwW2pdXSxUW2pdPXhbcFtqXV19LEoucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbihwLGIseCxDLFQsSCl7dGhpcy5wZXJtdXRlKEgscCxiLHgsQyxUKTtmb3Io''@;'; put 'put ''dmFyIGo9MTtqPFQ7ajw8PTEpZm9yKHZhciBFPWo8PDEsbT1NYXRoLmNvcygyKk1hdGguUEkvRSksQT1NYXRoLnNpbigyKk1hdGguUEkvRSksYWU9MDthZTxUO2FlKz1FKWZvcih2YXIgdGU9bSxzZT1BLHdlPTA7d2U8ajt3ZSsrKXt2YXIgVWU9eFthZSt3ZV0sSmU9Q1thZSt3ZV0sb3Q9eFth''@;'; put 'put ''ZSt3ZStqXSx4ZT1DW2FlK3dlK2pdLHZlPXRlKm90LXNlKnhlO3hlPXRlKnhlK3NlKm90LHhbYWUrd2VdPVVlKyhvdD12ZSksQ1thZSt3ZV09SmUreGUseFthZSt3ZStqXT1VZS1vdCxDW2FlK3dlK2pdPUplLXhlLHdlIT09RSYmKHZlPW0qdGUtQSpzZSxzZT1tKnNlK0EqdGUsdGU9dmUpfX0s''@;'; put 'put ''Si5wcm90b3R5cGUuZ3Vlc3NMZW4xM2I9ZnVuY3Rpb24ocCxiKXt2YXIgeD0xfE1hdGgubWF4KGIscCksQz0xJngsVD0wO2Zvcih4PXgvMnwwO3g7eD4+Pj0xKVQrKztyZXR1cm4gMTw8VCsxK0N9LEoucHJvdG90eXBlLmNvbmp1Z2F0ZT1mdW5jdGlvbihwLGIseCl7aWYoISh4PD0xKSlmb3Io''@;'; put 'put ''dmFyIEM9MDtDPHgvMjtDKyspe3ZhciBUPXBbQ107cFtDXT1wW3gtQy0xXSxwW3gtQy0xXT1ULFQ9YltDXSxiW0NdPS1iW3gtQy0xXSxiW3gtQy0xXT0tVH19LEoucHJvdG90eXBlLm5vcm1hbGl6ZTEzYj1mdW5jdGlvbihwLGIpe2Zvcih2YXIgeD0wLEM9MDtDPGIvMjtDKyspe3ZhciBUPTgx''@;'; put 'put ''OTIqTWF0aC5yb3VuZChwWzIqQysxXS9iKStNYXRoLnJvdW5kKHBbMipDXS9iKSt4O3BbQ109NjcxMDg4NjMmVCx4PVQ8NjcxMDg4NjQ/MDpULzY3MTA4ODY0fDB9cmV0dXJuIHB9LEoucHJvdG90eXBlLmNvbnZlcnQxM2I9ZnVuY3Rpb24ocCxiLHgsQyl7Zm9yKHZhciBUPTAsSD0wO0g8YjtI''@;'; put 'put ''KyspeFsyKkhdPTgxOTEmKFQrPTB8cFtIXSkseFsyKkgrMV09ODE5MSYoVD4+Pj0xMyksVD4+Pj0xMztmb3IoSD0yKmI7SDxDOysrSCl4W0hdPTA7ZygwPT09VCksZyghKC04MTkyJlQpKX0sSi5wcm90b3R5cGUuc3R1Yj1mdW5jdGlvbihwKXtmb3IodmFyIGI9bmV3IEFycmF5KHApLHg9MDt4''@;'; put 'put ''PHA7eCsrKWJbeF09MDtyZXR1cm4gYn0sSi5wcm90b3R5cGUubXVscD1mdW5jdGlvbihwLGIseCl7dmFyIEM9Mip0aGlzLmd1ZXNzTGVuMTNiKHAubGVuZ3RoLGIubGVuZ3RoKSxUPXRoaXMubWFrZVJCVChDKSxIPXRoaXMuc3R1YihDKSxqPW5ldyBBcnJheShDKSxFPW5ldyBBcnJheShDKSxt''@;'; put 'put ''PW5ldyBBcnJheShDKSxBPW5ldyBBcnJheShDKSxhZT1uZXcgQXJyYXkoQyksdGU9bmV3IEFycmF5KEMpLHNlPXgud29yZHM7c2UubGVuZ3RoPUMsdGhpcy5jb252ZXJ0MTNiKHAud29yZHMscC5sZW5ndGgsaixDKSx0aGlzLmNvbnZlcnQxM2IoYi53b3JkcyxiLmxlbmd0aCxBLEMpLHRoaXMu''@;'; put 'put ''dHJhbnNmb3JtKGosSCxFLG0sQyxUKSx0aGlzLnRyYW5zZm9ybShBLEgsYWUsdGUsQyxUKTtmb3IodmFyIHdlPTA7d2U8Qzt3ZSsrKXt2YXIgVWU9RVt3ZV0qYWVbd2VdLW1bd2VdKnRlW3dlXTttW3dlXT1FW3dlXSp0ZVt3ZV0rbVt3ZV0qYWVbd2VdLEVbd2VdPVVlfXJldHVybiB0aGlzLmNv''@;'; put 'put ''bmp1Z2F0ZShFLG0sQyksdGhpcy50cmFuc2Zvcm0oRSxtLHNlLEgsQyxUKSx0aGlzLmNvbmp1Z2F0ZShzZSxILEMpLHRoaXMubm9ybWFsaXplMTNiKHNlLEMpLHgubmVnYXRpdmU9cC5uZWdhdGl2ZV5iLm5lZ2F0aXZlLHgubGVuZ3RoPXAubGVuZ3RoK2IubGVuZ3RoLHguc3RyaXAoKX0sdy5w''@;'; put 'put ''cm90b3R5cGUubXVsPWZ1bmN0aW9uKHApe3ZhciBiPW5ldyB3KG51bGwpO3JldHVybiBiLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtwLmxlbmd0aCksdGhpcy5tdWxUbyhwLGIpfSx3LnByb3RvdHlwZS5tdWxmPWZ1bmN0aW9uKHApe3ZhciBiPW5ldyB3KG51bGwpO3JldHVybiBiLndv''@;'; put 'put ''cmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtwLmxlbmd0aCksZWUodGhpcyxwLGIpfSx3LnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkubXVsVG8ocCx0aGlzKX0sdy5wcm90b3R5cGUuaW11bG49ZnVuY3Rpb24ocCl7ZygibnVtYmVyIj09dHlwZW9mIHAp''@;'; put 'put ''LGcocDw2NzEwODg2NCk7Zm9yKHZhciBiPTAseD0wO3g8dGhpcy5sZW5ndGg7eCsrKXt2YXIgQz0oMHx0aGlzLndvcmRzW3hdKSpwLFQ9KDY3MTA4ODYzJkMpKyg2NzEwODg2MyZiKTtiPj49MjYsYis9Qy82NzEwODg2NHwwLGIrPVQ+Pj4yNix0aGlzLndvcmRzW3hdPTY3MTA4ODYzJlR9cmV0''@;'; put 'put ''dXJuIDAhPT1iJiYodGhpcy53b3Jkc1t4XT1iLHRoaXMubGVuZ3RoKyspLHRoaXN9LHcucHJvdG90eXBlLm11bG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbXVsbihwKX0sdy5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubXVsKHRoaXMpfSx3LnByb3Rv''@;'; put 'put ''dHlwZS5pc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW11bCh0aGlzLmNsb25lKCkpfSx3LnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24ocCl7dmFyIGI9ZnVuY3Rpb24gVShWKXtmb3IodmFyIHA9bmV3IEFycmF5KFYuYml0TGVuZ3RoKCkpLGI9MDtiPHAubGVuZ3RoO2IrKyl7dmFyIEM9YiUy''@;'; put 'put ''NjtwW2JdPShWLndvcmRzW2IvMjZ8MF0mMTw8Qyk+Pj5DfXJldHVybiBwfShwKTtpZigwPT09Yi5sZW5ndGgpcmV0dXJuIG5ldyB3KDEpO2Zvcih2YXIgeD10aGlzLEM9MDtDPGIubGVuZ3RoJiYwPT09YltDXTtDKysseD14LnNxcigpKTtpZigrK0M8Yi5sZW5ndGgpZm9yKHZhciBUPXguc3Fy''@;'; put 'put ''KCk7QzxiLmxlbmd0aDtDKyssVD1ULnNxcigpKTAhPT1iW0NdJiYoeD14Lm11bChUKSk7cmV0dXJuIHh9LHcucHJvdG90eXBlLml1c2hsbj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIFQsYj1wJTI2LHg9KHAtYikvMjYsQz02NzEwODg2Mz4+PjI2LWI8PDI2''@;'; put 'put ''LWI7aWYoMCE9PWIpe3ZhciBIPTA7Zm9yKFQ9MDtUPHRoaXMubGVuZ3RoO1QrKyl7dmFyIGo9dGhpcy53b3Jkc1tUXSZDO3RoaXMud29yZHNbVF09KDB8dGhpcy53b3Jkc1tUXSktajw8YnxILEg9aj4+PjI2LWJ9SCYmKHRoaXMud29yZHNbVF09SCx0aGlzLmxlbmd0aCsrKX1pZigwIT09eCl7''@;'; put 'put ''Zm9yKFQ9dGhpcy5sZW5ndGgtMTtUPj0wO1QtLSl0aGlzLndvcmRzW1QreF09dGhpcy53b3Jkc1tUXTtmb3IoVD0wO1Q8eDtUKyspdGhpcy53b3Jkc1tUXT0wO3RoaXMubGVuZ3RoKz14fXJldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlzaGxuPWZ1bmN0aW9uKHApe3JldHVybiBn''@;'; put 'put ''KDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hsbihwKX0sdy5wcm90b3R5cGUuaXVzaHJuPWZ1bmN0aW9uKHAsYix4KXt2YXIgQztnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCksQz1iPyhiLWIlMjYpLzI2OjA7dmFyIFQ9cCUyNixIPU1hdGgubWluKChwLVQpLzI2LHRoaXMubGVuZ3Ro''@;'; put 'put ''KSxqPTY3MTA4ODYzXjY3MTA4ODYzPj4+VDw8VCxFPXg7aWYoQy09SCxDPU1hdGgubWF4KDAsQyksRSl7Zm9yKHZhciBtPTA7bTxIO20rKylFLndvcmRzW21dPXRoaXMud29yZHNbbV07RS5sZW5ndGg9SH1pZigwIT09SClpZih0aGlzLmxlbmd0aD5IKWZvcih0aGlzLmxlbmd0aC09SCxtPTA7''@;'; put 'put ''bTx0aGlzLmxlbmd0aDttKyspdGhpcy53b3Jkc1ttXT10aGlzLndvcmRzW20rSF07ZWxzZSB0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MTt2YXIgQT0wO2ZvcihtPXRoaXMubGVuZ3RoLTE7bT49MCYmKDAhPT1BfHxtPj1DKTttLS0pe3ZhciBhZT0wfHRoaXMud29yZHNbbV07dGhpcy53''@;'; put 'put ''b3Jkc1ttXT1BPDwyNi1UfGFlPj4+VCxBPWFlJmp9cmV0dXJuIEUmJjAhPT1BJiYoRS53b3Jkc1tFLmxlbmd0aCsrXT1BKSwwPT09dGhpcy5sZW5ndGgmJih0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MSksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pc2hybj1mdW5jdGlvbihwLGIs''@;'; put 'put ''eCl7cmV0dXJuIGcoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaHJuKHAsYix4KX0sdy5wcm90b3R5cGUuc2hsbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaGxuKHApfSx3LnByb3RvdHlwZS51c2hsbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hs''@;'; put 'put ''bihwKX0sdy5wcm90b3R5cGUuc2hybj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaHJuKHApfSx3LnByb3RvdHlwZS51c2hybj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hybihwKX0sdy5wcm90b3R5cGUudGVzdG49ZnVuY3Rpb24ocCl7ZygibnVtYmVy''@;'; put 'put ''Ij09dHlwZW9mIHAmJnA+PTApO3ZhciBiPXAlMjYseD0ocC1iKS8yNjtyZXR1cm4hKHRoaXMubGVuZ3RoPD14fHwhKHRoaXMud29yZHNbeF0mMTw8YikpfSx3LnByb3RvdHlwZS5pbWFza249ZnVuY3Rpb24ocCl7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApO3ZhciBiPXAlMjYseD0ocC1i''@;'; put 'put ''KS8yNjtyZXR1cm4gZygwPT09dGhpcy5uZWdhdGl2ZSwiaW1hc2tuIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZSBudW1iZXJzIiksdGhpcy5sZW5ndGg8PXg/dGhpczooMCE9PWImJngrKyx0aGlzLmxlbmd0aD1NYXRoLm1pbih4LHRoaXMubGVuZ3RoKSwwIT09YiYmKHRoaXMud29yZHNbdGhp''@;'; put 'put ''cy5sZW5ndGgtMV0mPTY3MTA4ODYzXjY3MTA4ODYzPj4+Yjw8YiksdGhpcy5zdHJpcCgpKX0sdy5wcm90b3R5cGUubWFza249ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbWFza24ocCl9LHcucHJvdG90eXBlLmlhZGRuPWZ1bmN0aW9uKHApe3JldHVybiBnKCJudW1iZXIiPT10''@;'; put 'put ''eXBlb2YgcCksZyhwPDY3MTA4ODY0KSxwPDA/dGhpcy5pc3VibigtcCk6MCE9PXRoaXMubmVnYXRpdmU/MT09PXRoaXMubGVuZ3RoJiYoMHx0aGlzLndvcmRzWzBdKTxwPyh0aGlzLndvcmRzWzBdPXAtKDB8dGhpcy53b3Jkc1swXSksdGhpcy5uZWdhdGl2ZT0wLHRoaXMpOih0aGlzLm5lZ2F0''@;'; put 'put ''aXZlPTAsdGhpcy5pc3VibihwKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcyk6dGhpcy5faWFkZG4ocCl9LHcucHJvdG90eXBlLl9pYWRkbj1mdW5jdGlvbihwKXt0aGlzLndvcmRzWzBdKz1wO2Zvcih2YXIgYj0wO2I8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbYl0+PTY3MTA4ODY0O2IrKyl0aGlz''@;'; put 'put ''LndvcmRzW2JdLT02NzEwODg2NCxiPT09dGhpcy5sZW5ndGgtMT90aGlzLndvcmRzW2IrMV09MTp0aGlzLndvcmRzW2IrMV0rKztyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsYisxKSx0aGlzfSx3LnByb3RvdHlwZS5pc3Vibj1mdW5jdGlvbihwKXtpZihnKCJudW1i''@;'; put 'put ''ZXIiPT10eXBlb2YgcCksZyhwPDY3MTA4ODY0KSxwPDApcmV0dXJuIHRoaXMuaWFkZG4oLXApO2lmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkbihwKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcztpZih0aGlzLndvcmRzWzBdLT1wLDE9PT10aGlzLmxl''@;'; put 'put ''bmd0aCYmdGhpcy53b3Jkc1swXTwwKXRoaXMud29yZHNbMF09LXRoaXMud29yZHNbMF0sdGhpcy5uZWdhdGl2ZT0xO2Vsc2UgZm9yKHZhciBiPTA7Yjx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tiXTwwO2IrKyl0aGlzLndvcmRzW2JdKz02NzEwODg2NCx0aGlzLndvcmRzW2IrMV0tPTE7cmV0''@;'; put 'put ''dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuYWRkbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhZGRuKHApfSx3LnByb3RvdHlwZS5zdWJuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXN1Ym4ocCl9LHcucHJvdG90eXBlLmlhYnM9ZnVuY3Rpb24oKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXN9LHcucHJvdG90eXBlLmFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaWFicygpfSx3LnByb3RvdHlwZS5faXNobG5zdWJtdWw9ZnVuY3Rpb24ocCxiLHgpe3ZhciBUO3RoaXMuX2V4cGFuZChwLmxlbmd0aCt4KTt2YXIgSCxqPTA7''@;'; put 'put ''Zm9yKFQ9MDtUPHAubGVuZ3RoO1QrKyl7SD0oMHx0aGlzLndvcmRzW1QreF0pK2o7dmFyIEU9KDB8cC53b3Jkc1tUXSkqYjtqPSgoSC09NjcxMDg4NjMmRSk+PjI2KS0oRS82NzEwODg2NHwwKSx0aGlzLndvcmRzW1QreF09NjcxMDg4NjMmSH1mb3IoO1Q8dGhpcy5sZW5ndGgteDtUKyspaj0o''@;'; put 'put ''SD0oMHx0aGlzLndvcmRzW1QreF0pK2opPj4yNix0aGlzLndvcmRzW1QreF09NjcxMDg4NjMmSDtpZigwPT09ailyZXR1cm4gdGhpcy5zdHJpcCgpO2ZvcihnKC0xPT09aiksaj0wLFQ9MDtUPHRoaXMubGVuZ3RoO1QrKylqPShIPS0oMHx0aGlzLndvcmRzW1RdKStqKT4+MjYsdGhpcy53b3Jk''@;'; put 'put ''c1tUXT02NzEwODg2MyZIO3JldHVybiB0aGlzLm5lZ2F0aXZlPTEsdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5fd29yZERpdj1mdW5jdGlvbihwLGIpe3ZhciB4LEM9dGhpcy5jbG9uZSgpLFQ9cCxIPTB8VC53b3Jkc1tULmxlbmd0aC0xXTswIT0oeD0yNi10aGlzLl9jb3VudEJpdHMoSCkp''@;'; put 'put ''JiYoVD1ULnVzaGxuKHgpLEMuaXVzaGxuKHgpLEg9MHxULndvcmRzW1QubGVuZ3RoLTFdKTt2YXIgbSxFPUMubGVuZ3RoLVQubGVuZ3RoO2lmKCJtb2QiIT09Yil7KG09bmV3IHcobnVsbCkpLmxlbmd0aD1FKzEsbS53b3Jkcz1uZXcgQXJyYXkobS5sZW5ndGgpO2Zvcih2YXIgQT0wO0E8bS5s''@;'; put 'put ''ZW5ndGg7QSsrKW0ud29yZHNbQV09MH12YXIgYWU9Qy5jbG9uZSgpLl9pc2hsbnN1Ym11bChULDEsRSk7MD09PWFlLm5lZ2F0aXZlJiYoQz1hZSxtJiYobS53b3Jkc1tFXT0xKSk7Zm9yKHZhciB0ZT1FLTE7dGU+PTA7dGUtLSl7dmFyIHNlPTY3MTA4ODY0KigwfEMud29yZHNbVC5sZW5ndGgr''@;'; put 'put ''dGVdKSsoMHxDLndvcmRzW1QubGVuZ3RoK3RlLTFdKTtmb3Ioc2U9TWF0aC5taW4oc2UvSHwwLDY3MTA4ODYzKSxDLl9pc2hsbnN1Ym11bChULHNlLHRlKTswIT09Qy5uZWdhdGl2ZTspc2UtLSxDLm5lZ2F0aXZlPTAsQy5faXNobG5zdWJtdWwoVCwxLHRlKSxDLmlzWmVybygpfHwoQy5uZWdh''@;'; put 'put ''dGl2ZV49MSk7bSYmKG0ud29yZHNbdGVdPXNlKX1yZXR1cm4gbSYmbS5zdHJpcCgpLEMuc3RyaXAoKSwiZGl2IiE9PWImJjAhPT14JiZDLml1c2hybih4KSx7ZGl2Om18fG51bGwsbW9kOkN9fSx3LnByb3RvdHlwZS5kaXZtb2Q9ZnVuY3Rpb24ocCxiLHgpe3JldHVybiBnKCFwLmlzWmVybygp''@;'; put 'put ''KSx0aGlzLmlzWmVybygpP3tkaXY6bmV3IHcoMCksbW9kOm5ldyB3KDApfTowIT09dGhpcy5uZWdhdGl2ZSYmMD09PXAubmVnYXRpdmU/KEg9dGhpcy5uZWcoKS5kaXZtb2QocCxiKSwibW9kIiE9PWImJihDPUguZGl2Lm5lZygpKSwiZGl2IiE9PWImJihUPUgubW9kLm5lZygpLHgmJjAhPT1U''@;'; put 'put ''Lm5lZ2F0aXZlJiZULmlhZGQocCkpLHtkaXY6Qyxtb2Q6VH0pOjA9PT10aGlzLm5lZ2F0aXZlJiYwIT09cC5uZWdhdGl2ZT8oSD10aGlzLmRpdm1vZChwLm5lZygpLGIpLCJtb2QiIT09YiYmKEM9SC5kaXYubmVnKCkpLHtkaXY6Qyxtb2Q6SC5tb2R9KTp0aGlzLm5lZ2F0aXZlJnAubmVnYXRp''@;'; put 'put ''dmU/KEg9dGhpcy5uZWcoKS5kaXZtb2QocC5uZWcoKSxiKSwiZGl2IiE9PWImJihUPUgubW9kLm5lZygpLHgmJjAhPT1ULm5lZ2F0aXZlJiZULmlzdWIocCkpLHtkaXY6SC5kaXYsbW9kOlR9KTpwLmxlbmd0aD50aGlzLmxlbmd0aHx8dGhpcy5jbXAocCk8MD97ZGl2Om5ldyB3KDApLG1vZDp0''@;'; put 'put ''aGlzfToxPT09cC5sZW5ndGg/ImRpdiI9PT1iP3tkaXY6dGhpcy5kaXZuKHAud29yZHNbMF0pLG1vZDpudWxsfToibW9kIj09PWI/e2RpdjpudWxsLG1vZDpuZXcgdyh0aGlzLm1vZG4ocC53b3Jkc1swXSkpfTp7ZGl2OnRoaXMuZGl2bihwLndvcmRzWzBdKSxtb2Q6bmV3IHcodGhpcy5tb2Ru''@;'; put 'put ''KHAud29yZHNbMF0pKX06dGhpcy5fd29yZERpdihwLGIpO3ZhciBDLFQsSH0sdy5wcm90b3R5cGUuZGl2PWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmRpdm1vZChwLCJkaXYiLCExKS5kaXZ9LHcucHJvdG90eXBlLm1vZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5kaXZtb2QocCwibW9kIiwh''@;'; put 'put ''MSkubW9kfSx3LnByb3RvdHlwZS51bW9kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmRpdm1vZChwLCJtb2QiLCEwKS5tb2R9LHcucHJvdG90eXBlLmRpdlJvdW5kPWZ1bmN0aW9uKHApe3ZhciBiPXRoaXMuZGl2bW9kKHApO2lmKGIubW9kLmlzWmVybygpKXJldHVybiBiLmRpdjt2YXIgeD0w''@;'; put 'put ''IT09Yi5kaXYubmVnYXRpdmU/Yi5tb2QuaXN1YihwKTpiLm1vZCxDPXAudXNocm4oMSksVD1wLmFuZGxuKDEpLEg9eC5jbXAoQyk7cmV0dXJuIEg8MHx8MT09PVQmJjA9PT1IP2IuZGl2OjAhPT1iLmRpdi5uZWdhdGl2ZT9iLmRpdi5pc3VibigxKTpiLmRpdi5pYWRkbigxKX0sdy5wcm90b3R5''@;'; put 'put ''cGUubW9kbj1mdW5jdGlvbihwKXtnKHA8PTY3MTA4ODYzKTtmb3IodmFyIGI9KDE8PDI2KSVwLHg9MCxDPXRoaXMubGVuZ3RoLTE7Qz49MDtDLS0peD0oYip4KygwfHRoaXMud29yZHNbQ10pKSVwO3JldHVybiB4fSx3LnByb3RvdHlwZS5pZGl2bj1mdW5jdGlvbihwKXtnKHA8PTY3MTA4ODYz''@;'; put 'put ''KTtmb3IodmFyIGI9MCx4PXRoaXMubGVuZ3RoLTE7eD49MDt4LS0pe3ZhciBDPSgwfHRoaXMud29yZHNbeF0pKzY3MTA4ODY0KmI7dGhpcy53b3Jkc1t4XT1DL3B8MCxiPUMlcH1yZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5kaXZuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNs''@;'; put 'put ''b25lKCkuaWRpdm4ocCl9LHcucHJvdG90eXBlLmVnY2Q9ZnVuY3Rpb24ocCl7ZygwPT09cC5uZWdhdGl2ZSksZyghcC5pc1plcm8oKSk7dmFyIGI9dGhpcyx4PXAuY2xvbmUoKTtiPTAhPT1iLm5lZ2F0aXZlP2IudW1vZChwKTpiLmNsb25lKCk7Zm9yKHZhciBDPW5ldyB3KDEpLFQ9bmV3IHco''@;'; put 'put ''MCksSD1uZXcgdygwKSxqPW5ldyB3KDEpLEU9MDtiLmlzRXZlbigpJiZ4LmlzRXZlbigpOyliLml1c2hybigxKSx4Lml1c2hybigxKSwrK0U7Zm9yKHZhciBtPXguY2xvbmUoKSxBPWIuY2xvbmUoKTshYi5pc1plcm8oKTspe2Zvcih2YXIgYWU9MCx0ZT0xOyEoYi53b3Jkc1swXSZ0ZSkmJmFl''@;'; put 'put ''PDI2OysrYWUsdGU8PD0xKTtpZihhZT4wKWZvcihiLml1c2hybihhZSk7YWUtLSA+MDspKEMuaXNPZGQoKXx8VC5pc09kZCgpKSYmKEMuaWFkZChtKSxULmlzdWIoQSkpLEMuaXVzaHJuKDEpLFQuaXVzaHJuKDEpO2Zvcih2YXIgc2U9MCx3ZT0xOyEoeC53b3Jkc1swXSZ3ZSkmJnNlPDI2Oysr''@;'; put 'put ''c2Usd2U8PD0xKTtpZihzZT4wKWZvcih4Lml1c2hybihzZSk7c2UtLSA+MDspKEguaXNPZGQoKXx8ai5pc09kZCgpKSYmKEguaWFkZChtKSxqLmlzdWIoQSkpLEguaXVzaHJuKDEpLGouaXVzaHJuKDEpO2IuY21wKHgpPj0wPyhiLmlzdWIoeCksQy5pc3ViKEgpLFQuaXN1YihqKSk6KHguaXN1''@;'; put 'put ''YihiKSxILmlzdWIoQyksai5pc3ViKFQpKX1yZXR1cm57YTpILGI6aixnY2Q6eC5pdXNobG4oRSl9fSx3LnByb3RvdHlwZS5faW52bXA9ZnVuY3Rpb24ocCl7ZygwPT09cC5uZWdhdGl2ZSksZyghcC5pc1plcm8oKSk7dmFyIGFlLGI9dGhpcyx4PXAuY2xvbmUoKTtiPTAhPT1iLm5lZ2F0aXZl''@;'; put 'put ''P2IudW1vZChwKTpiLmNsb25lKCk7Zm9yKHZhciBDPW5ldyB3KDEpLFQ9bmV3IHcoMCksSD14LmNsb25lKCk7Yi5jbXBuKDEpPjAmJnguY21wbigxKT4wOyl7Zm9yKHZhciBqPTAsRT0xOyEoYi53b3Jkc1swXSZFKSYmajwyNjsrK2osRTw8PTEpO2lmKGo+MClmb3IoYi5pdXNocm4oaik7ai0t''@;'; put 'put ''ID4wOylDLmlzT2RkKCkmJkMuaWFkZChIKSxDLml1c2hybigxKTtmb3IodmFyIG09MCxBPTE7ISh4LndvcmRzWzBdJkEpJiZtPDI2OysrbSxBPDw9MSk7aWYobT4wKWZvcih4Lml1c2hybihtKTttLS0gPjA7KVQuaXNPZGQoKSYmVC5pYWRkKEgpLFQuaXVzaHJuKDEpO2IuY21wKHgpPj0wPyhi''@;'; put 'put ''LmlzdWIoeCksQy5pc3ViKFQpKTooeC5pc3ViKGIpLFQuaXN1YihDKSl9cmV0dXJuKGFlPTA9PT1iLmNtcG4oMSk/QzpUKS5jbXBuKDApPDAmJmFlLmlhZGQocCksYWV9LHcucHJvdG90eXBlLmdjZD1mdW5jdGlvbihwKXtpZih0aGlzLmlzWmVybygpKXJldHVybiBwLmFicygpO2lmKHAuaXNa''@;'; put 'put ''ZXJvKCkpcmV0dXJuIHRoaXMuYWJzKCk7dmFyIGI9dGhpcy5jbG9uZSgpLHg9cC5jbG9uZSgpO2IubmVnYXRpdmU9MCx4Lm5lZ2F0aXZlPTA7Zm9yKHZhciBDPTA7Yi5pc0V2ZW4oKSYmeC5pc0V2ZW4oKTtDKyspYi5pdXNocm4oMSkseC5pdXNocm4oMSk7Zm9yKDs7KXtmb3IoO2IuaXNFdmVu''@;'; put 'put ''KCk7KWIuaXVzaHJuKDEpO2Zvcig7eC5pc0V2ZW4oKTspeC5pdXNocm4oMSk7dmFyIFQ9Yi5jbXAoeCk7aWYoVDwwKXt2YXIgSD1iO2I9eCx4PUh9ZWxzZSBpZigwPT09VHx8MD09PXguY21wbigxKSlicmVhaztiLmlzdWIoeCl9cmV0dXJuIHguaXVzaGxuKEMpfSx3LnByb3RvdHlwZS5pbnZt''@;'; put 'put ''PWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmVnY2QocCkuYS51bW9kKHApfSx3LnByb3RvdHlwZS5pc0V2ZW49ZnVuY3Rpb24oKXtyZXR1cm4hKDEmdGhpcy53b3Jkc1swXSl9LHcucHJvdG90eXBlLmlzT2RkPWZ1bmN0aW9uKCl7cmV0dXJuISgxJn50aGlzLndvcmRzWzBdKX0sdy5wcm90b3R5''@;'; put 'put ''cGUuYW5kbG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMud29yZHNbMF0mcH0sdy5wcm90b3R5cGUuYmluY249ZnVuY3Rpb24ocCl7ZygibnVtYmVyIj09dHlwZW9mIHApO3ZhciBiPXAlMjYseD0ocC1iKS8yNixDPTE8PGI7aWYodGhpcy5sZW5ndGg8PXgpcmV0dXJuIHRoaXMuX2V4cGFuZCh4''@;'; put 'put ''KzEpLHRoaXMud29yZHNbeF18PUMsdGhpcztmb3IodmFyIFQ9QyxIPXg7MCE9PVQmJkg8dGhpcy5sZW5ndGg7SCsrKXt2YXIgaj0wfHRoaXMud29yZHNbSF07VD0oais9VCk+Pj4yNix0aGlzLndvcmRzW0hdPWomPTY3MTA4ODYzfXJldHVybiAwIT09VCYmKHRoaXMud29yZHNbSF09VCx0aGlz''@;'; put 'put ''Lmxlbmd0aCsrKSx0aGlzfSx3LnByb3RvdHlwZS5pc1plcm89ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXX0sdy5wcm90b3R5cGUuY21wbj1mdW5jdGlvbihwKXt2YXIgeCxiPXA8MDtpZigwIT09dGhpcy5uZWdhdGl2ZSYmIWIpcmV0dXJuLTE7''@;'; put 'put ''aWYoMD09PXRoaXMubmVnYXRpdmUmJmIpcmV0dXJuIDE7aWYodGhpcy5zdHJpcCgpLHRoaXMubGVuZ3RoPjEpeD0xO2Vsc2V7YiYmKHA9LXApLGcocDw9NjcxMDg4NjMsIk51bWJlciBpcyB0b28gYmlnIik7dmFyIEM9MHx0aGlzLndvcmRzWzBdO3g9Qz09PXA/MDpDPHA/LTE6MX1yZXR1cm4g''@;'; put 'put ''MCE9PXRoaXMubmVnYXRpdmU/MHwteDp4fSx3LnByb3RvdHlwZS5jbXA9ZnVuY3Rpb24ocCl7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1wLm5lZ2F0aXZlKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09cC5uZWdhdGl2ZSlyZXR1cm4gMTt2YXIgYj10aGlzLnVjbXAocCk7''@;'; put 'put ''cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LWI6Yn0sdy5wcm90b3R5cGUudWNtcD1mdW5jdGlvbihwKXtpZih0aGlzLmxlbmd0aD5wLmxlbmd0aClyZXR1cm4gMTtpZih0aGlzLmxlbmd0aDxwLmxlbmd0aClyZXR1cm4tMTtmb3IodmFyIGI9MCx4PXRoaXMubGVuZ3RoLTE7eD49MDt4LS0p''@;'; put 'put ''e3ZhciBDPTB8dGhpcy53b3Jkc1t4XSxUPTB8cC53b3Jkc1t4XTtpZihDIT09VCl7QzxUP2I9LTE6Qz5UJiYoYj0xKTticmVha319cmV0dXJuIGJ9LHcucHJvdG90eXBlLmd0bj1mdW5jdGlvbihwKXtyZXR1cm4gMT09PXRoaXMuY21wbihwKX0sdy5wcm90b3R5cGUuZ3Q9ZnVuY3Rpb24ocCl7''@;'; put 'put ''cmV0dXJuIDE9PT10aGlzLmNtcChwKX0sdy5wcm90b3R5cGUuZ3Rlbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbXBuKHApPj0wfSx3LnByb3RvdHlwZS5ndGU9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY21wKHApPj0wfSx3LnByb3RvdHlwZS5sdG49ZnVuY3Rpb24ocCl7cmV0dXJuLTE9''@;'; put 'put ''PT10aGlzLmNtcG4ocCl9LHcucHJvdG90eXBlLmx0PWZ1bmN0aW9uKHApe3JldHVybi0xPT09dGhpcy5jbXAocCl9LHcucHJvdG90eXBlLmx0ZW49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY21wbihwKTw9MH0sdy5wcm90b3R5cGUubHRlPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNtcChw''@;'; put 'put ''KTw9MH0sdy5wcm90b3R5cGUuZXFuPWZ1bmN0aW9uKHApe3JldHVybiAwPT09dGhpcy5jbXBuKHApfSx3LnByb3RvdHlwZS5lcT1mdW5jdGlvbihwKXtyZXR1cm4gMD09PXRoaXMuY21wKHApfSx3LnJlZD1mdW5jdGlvbihwKXtyZXR1cm4gbmV3IFNlKHApfSx3LnByb3RvdHlwZS50b1JlZD1m''@;'; put 'put ''dW5jdGlvbihwKXtyZXR1cm4gZyghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSxnKDA9PT10aGlzLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLHAuY29udmVydFRvKHRoaXMpLl9mb3JjZVJlZChwKX0sdy5wcm90b3R5''@;'; put 'put ''cGUuZnJvbVJlZD1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJmcm9tUmVkIHdvcmtzIG9ubHkgd2l0aCBudW1iZXJzIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5yZWQuY29udmVydEZyb20odGhpcyl9LHcucHJvdG90eXBlLl9mb3JjZVJlZD1mdW5jdGlvbihwKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5yZWQ9cCx0aGlzfSx3LnByb3RvdHlwZS5mb3JjZVJlZD1mdW5jdGlvbihwKXtyZXR1cm4gZyghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLl9mb3JjZVJlZChwKX0sdy5wcm90b3R5cGUucmVkQWRkPWZ1bmN0aW9uKHApe3JldHVy''@;'; put 'put ''biBnKHRoaXMucmVkLCJyZWRBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuYWRkKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZElBZGQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZElBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhp''@;'; put 'put ''cy5yZWQuaWFkZCh0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRTdWI9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZFN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zdWIodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkSVN1Yj1mdW5jdGlvbihwKXtyZXR1''@;'; put 'put ''cm4gZyh0aGlzLnJlZCwicmVkSVN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pc3ViKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZFNobD1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkU2hsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRo''@;'; put 'put ''aXMucmVkLnNobCh0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRNdWw9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLHApLHRoaXMucmVkLm11bCh0aGlzLHApfSx3LnByb3RvdHlw''@;'; put 'put ''ZS5yZWRJTXVsPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxwKSx0aGlzLnJlZC5pbXVsKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZFNxcj1mdW5jdGlvbigpe3JldHVybiBn''@;'; put 'put ''KHRoaXMucmVkLCJyZWRTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FyKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRJU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZElTcXIgd29ya3Mgb25seSB3aXRo''@;'; put 'put ''IHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaXNxcih0aGlzKX0sdy5wcm90b3R5cGUucmVkU3FydD1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWRTcXJ0IHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkx''@;'; put 'put ''KHRoaXMpLHRoaXMucmVkLnNxcnQodGhpcyl9LHcucHJvdG90eXBlLnJlZEludm09ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkSW52bSB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pbnZtKHRoaXMpfSx3LnBy''@;'; put 'put ''b3RvdHlwZS5yZWROZWc9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkTmVnIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLm5lZyh0aGlzKX0sdy5wcm90b3R5cGUucmVkUG93PWZ1bmN0aW9uKHApe3JldHVybiBn''@;'; put 'put ''KHRoaXMucmVkJiYhcC5yZWQsInJlZFBvdyhub3JtYWxOdW0pIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQucG93KHRoaXMscCl9O3ZhciBuZT17azI1NjpudWxsLHAyMjQ6bnVsbCxwMTkyOm51bGwscDI1NTE5Om51bGx9O2Z1bmN0aW9uIGllKFYscCl7dGhpcy5uYW1lPVYs''@;'; put 'put ''dGhpcy5wPW5ldyB3KHAsMTYpLHRoaXMubj10aGlzLnAuYml0TGVuZ3RoKCksdGhpcy5rPW5ldyB3KDEpLml1c2hsbih0aGlzLm4pLmlzdWIodGhpcy5wKSx0aGlzLnRtcD10aGlzLl90bXAoKX1mdW5jdGlvbiBsZSgpe2llLmNhbGwodGhpcywiazI1NiIsImZmZmZmZmZmIGZmZmZmZmZmIGZm''@;'; put 'put ''ZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmIil9ZnVuY3Rpb24gbWUoKXtpZS5jYWxsKHRoaXMsInAyMjQiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMSIpfWZ1bmN0aW9uIF9l''@;'; put 'put ''KCl7aWUuY2FsbCh0aGlzLCJwMTkyIiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYiKX1mdW5jdGlvbiBUZSgpe2llLmNhbGwodGhpcywiMjU1MTkiLCI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZm''@;'; put 'put ''ZiBmZmZmZmZmZmZmZmZmZmVkIil9ZnVuY3Rpb24gU2UoVil7aWYoInN0cmluZyI9PXR5cGVvZiBWKXt2YXIgcD13Ll9wcmltZShWKTt0aGlzLm09cC5wLHRoaXMucHJpbWU9cH1lbHNlIGcoVi5ndG4oMSksIm1vZHVsdXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gMSIpLHRoaXMubT1WLHRoaXMu''@;'; put 'put ''cHJpbWU9bnVsbH1mdW5jdGlvbiBqZShWKXtTZS5jYWxsKHRoaXMsViksdGhpcy5zaGlmdD10aGlzLm0uYml0TGVuZ3RoKCksdGhpcy5zaGlmdCUyNiE9MCYmKHRoaXMuc2hpZnQrPTI2LXRoaXMuc2hpZnQlMjYpLHRoaXMucj1uZXcgdygxKS5pdXNobG4odGhpcy5zaGlmdCksdGhpcy5yMj10''@;'; put 'put ''aGlzLmltb2QodGhpcy5yLnNxcigpKSx0aGlzLnJpbnY9dGhpcy5yLl9pbnZtcCh0aGlzLm0pLHRoaXMubWludj10aGlzLnJpbnYubXVsKHRoaXMucikuaXN1Ym4oMSkuZGl2KHRoaXMubSksdGhpcy5taW52PXRoaXMubWludi51bW9kKHRoaXMuciksdGhpcy5taW52PXRoaXMuci5zdWIodGhp''@;'; put 'put ''cy5taW52KX1pZS5wcm90b3R5cGUuX3RtcD1mdW5jdGlvbigpe3ZhciBwPW5ldyB3KG51bGwpO3JldHVybiBwLndvcmRzPW5ldyBBcnJheShNYXRoLmNlaWwodGhpcy5uLzEzKSkscH0saWUucHJvdG90eXBlLmlyZWR1Y2U9ZnVuY3Rpb24ocCl7dmFyIHgsYj1wO2Rve3RoaXMuc3BsaXQoYix0''@;'; put 'put ''aGlzLnRtcCkseD0oYj0oYj10aGlzLmltdWxLKGIpKS5pYWRkKHRoaXMudG1wKSkuYml0TGVuZ3RoKCl9d2hpbGUoeD50aGlzLm4pO3ZhciBDPXg8dGhpcy5uPy0xOmIudWNtcCh0aGlzLnApO3JldHVybiAwPT09Qz8oYi53b3Jkc1swXT0wLGIubGVuZ3RoPTEpOkM+MD9iLmlzdWIodGhpcy5w''@;'; put 'put ''KTp2b2lkIDAhPT1iLnN0cmlwP2Iuc3RyaXAoKTpiLl9zdHJpcCgpLGJ9LGllLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihwLGIpe3AuaXVzaHJuKHRoaXMubiwwLGIpfSxpZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24ocCl7cmV0dXJuIHAuaW11bCh0aGlzLmspfSxCKGxlLGllKSxsZS5w''@;'; put 'put ''cm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24ocCxiKXtmb3IodmFyIHg9NDE5NDMwMyxDPU1hdGgubWluKHAubGVuZ3RoLDkpLFQ9MDtUPEM7VCsrKWIud29yZHNbVF09cC53b3Jkc1tUXTtpZihiLmxlbmd0aD1DLHAubGVuZ3RoPD05KXJldHVybiBwLndvcmRzWzBdPTAsdm9pZChwLmxlbmd0aD0x''@;'; put 'put ''KTt2YXIgSD1wLndvcmRzWzldO2ZvcihiLndvcmRzW2IubGVuZ3RoKytdPUgmeCxUPTEwO1Q8cC5sZW5ndGg7VCsrKXt2YXIgaj0wfHAud29yZHNbVF07cC53b3Jkc1tULTEwXT0oaiZ4KTw8NHxIPj4+MjIsSD1qfXAud29yZHNbVC0xMF09SD4+Pj0yMixwLmxlbmd0aC09MD09PUgmJnAubGVu''@;'; put 'put ''Z3RoPjEwPzEwOjl9LGxlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihwKXtwLndvcmRzW3AubGVuZ3RoXT0wLHAud29yZHNbcC5sZW5ndGgrMV09MCxwLmxlbmd0aCs9Mjtmb3IodmFyIGI9MCx4PTA7eDxwLmxlbmd0aDt4Kyspe3ZhciBDPTB8cC53b3Jkc1t4XTtwLndvcmRzW3hdPTY3MTA4''@;'; put 'put ''ODYzJihiKz05NzcqQyksYj02NCpDKyhiLzY3MTA4ODY0fDApfXJldHVybiAwPT09cC53b3Jkc1twLmxlbmd0aC0xXSYmKHAubGVuZ3RoLS0sMD09PXAud29yZHNbcC5sZW5ndGgtMV0mJnAubGVuZ3RoLS0pLHB9LEIobWUsaWUpLEIoX2UsaWUpLEIoVGUsaWUpLFRlLnByb3RvdHlwZS5pbXVs''@;'; put 'put ''Sz1mdW5jdGlvbihwKXtmb3IodmFyIGI9MCx4PTA7eDxwLmxlbmd0aDt4Kyspe3ZhciBDPTE5KigwfHAud29yZHNbeF0pK2IsVD02NzEwODg2MyZDO0M+Pj49MjYscC53b3Jkc1t4XT1ULGI9Q31yZXR1cm4gMCE9PWImJihwLndvcmRzW3AubGVuZ3RoKytdPWIpLHB9LHcuX3ByaW1lPWZ1bmN0''@;'; put 'put ''aW9uKHApe2lmKG5lW3BdKXJldHVybiBuZVtwXTt2YXIgYjtpZigiazI1NiI9PT1wKWI9bmV3IGxlO2Vsc2UgaWYoInAyMjQiPT09cCliPW5ldyBtZTtlbHNlIGlmKCJwMTkyIj09PXApYj1uZXcgX2U7ZWxzZXtpZigicDI1NTE5IiE9PXApdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIHByaW1l''@;'; put 'put ''ICIrcCk7Yj1uZXcgVGV9cmV0dXJuIG5lW3BdPWIsYn0sU2UucHJvdG90eXBlLl92ZXJpZnkxPWZ1bmN0aW9uKHApe2coMD09PXAubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksZyhwLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxTZS5w''@;'; put 'put ''cm90b3R5cGUuX3ZlcmlmeTI9ZnVuY3Rpb24ocCxiKXtnKCEocC5uZWdhdGl2ZXxiLm5lZ2F0aXZlKSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxnKHAucmVkJiZwLnJlZD09PWIucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LFNlLnByb3RvdHlwZS5p''@;'; put 'put ''bW9kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLnByaW1lP3RoaXMucHJpbWUuaXJlZHVjZShwKS5fZm9yY2VSZWQodGhpcyk6cC51bW9kKHRoaXMubSkuX2ZvcmNlUmVkKHRoaXMpfSxTZS5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKHApe3JldHVybiBwLmlzWmVybygpP3AuY2xvbmUoKTp0aGlz''@;'; put 'put ''Lm0uc3ViKHApLl9mb3JjZVJlZCh0aGlzKX0sU2UucHJvdG90eXBlLmFkZD1mdW5jdGlvbihwLGIpe3RoaXMuX3ZlcmlmeTIocCxiKTt2YXIgeD1wLmFkZChiKTtyZXR1cm4geC5jbXAodGhpcy5tKT49MCYmeC5pc3ViKHRoaXMubSkseC5fZm9yY2VSZWQodGhpcyl9LFNlLnByb3RvdHlwZS5p''@;'; put 'put ''YWRkPWZ1bmN0aW9uKHAsYil7dGhpcy5fdmVyaWZ5MihwLGIpO3ZhciB4PXAuaWFkZChiKTtyZXR1cm4geC5jbXAodGhpcy5tKT49MCYmeC5pc3ViKHRoaXMubSkseH0sU2UucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihwLGIpe3RoaXMuX3ZlcmlmeTIocCxiKTt2YXIgeD1wLnN1YihiKTtyZXR1''@;'; put 'put ''cm4geC5jbXBuKDApPDAmJnguaWFkZCh0aGlzLm0pLHguX2ZvcmNlUmVkKHRoaXMpfSxTZS5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihwLGIpe3RoaXMuX3ZlcmlmeTIocCxiKTt2YXIgeD1wLmlzdWIoYik7cmV0dXJuIHguY21wbigwKTwwJiZ4LmlhZGQodGhpcy5tKSx4fSxTZS5wcm90b3R5''@;'; put 'put ''cGUuc2hsPWZ1bmN0aW9uKHAsYil7cmV0dXJuIHRoaXMuX3ZlcmlmeTEocCksdGhpcy5pbW9kKHAudXNobG4oYikpfSxTZS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihwLGIpe3JldHVybiB0aGlzLl92ZXJpZnkyKHAsYiksdGhpcy5pbW9kKHAuaW11bChiKSl9LFNlLnByb3RvdHlwZS5tdWw9''@;'; put 'put ''ZnVuY3Rpb24ocCxiKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihwLGIpLHRoaXMuaW1vZChwLm11bChiKSl9LFNlLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmltdWwocCxwLmNsb25lKCkpfSxTZS5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLm11''@;'; put 'put ''bChwLHApfSxTZS5wcm90b3R5cGUuc3FydD1mdW5jdGlvbihwKXtpZihwLmlzWmVybygpKXJldHVybiBwLmNsb25lKCk7dmFyIGI9dGhpcy5tLmFuZGxuKDMpO2lmKGcoYiUyPT0xKSwzPT09Yil7dmFyIHg9dGhpcy5tLmFkZChuZXcgdygxKSkuaXVzaHJuKDIpO3JldHVybiB0aGlzLnBvdyhw''@;'; put 'put ''LHgpfWZvcih2YXIgQz10aGlzLm0uc3VibigxKSxUPTA7IUMuaXNaZXJvKCkmJjA9PT1DLmFuZGxuKDEpOylUKyssQy5pdXNocm4oMSk7ZyghQy5pc1plcm8oKSk7dmFyIEg9bmV3IHcoMSkudG9SZWQodGhpcyksaj1ILnJlZE5lZygpLEU9dGhpcy5tLnN1Ym4oMSkuaXVzaHJuKDEpLG09dGhp''@;'; put 'put ''cy5tLmJpdExlbmd0aCgpO2ZvcihtPW5ldyB3KDIqbSptKS50b1JlZCh0aGlzKTswIT09dGhpcy5wb3cobSxFKS5jbXAoaik7KW0ucmVkSUFkZChqKTtmb3IodmFyIEE9dGhpcy5wb3cobSxDKSxhZT10aGlzLnBvdyhwLEMuYWRkbigxKS5pdXNocm4oMSkpLHRlPXRoaXMucG93KHAsQyksc2U9''@;'; put 'put ''VDswIT09dGUuY21wKEgpOyl7Zm9yKHZhciB3ZT10ZSxVZT0wOzAhPT13ZS5jbXAoSCk7VWUrKyl3ZT13ZS5yZWRTcXIoKTtnKFVlPHNlKTt2YXIgSmU9dGhpcy5wb3coQSxuZXcgdygxKS5pdXNobG4oc2UtVWUtMSkpO2FlPWFlLnJlZE11bChKZSksQT1KZS5yZWRTcXIoKSx0ZT10ZS5yZWRN''@;'; put 'put ''dWwoQSksc2U9VWV9cmV0dXJuIGFlfSxTZS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihwKXt2YXIgYj1wLl9pbnZtcCh0aGlzLm0pO3JldHVybiAwIT09Yi5uZWdhdGl2ZT8oYi5uZWdhdGl2ZT0wLHRoaXMuaW1vZChiKS5yZWROZWcoKSk6dGhpcy5pbW9kKGIpfSxTZS5wcm90b3R5cGUucG93''@;'; put 'put ''PWZ1bmN0aW9uKHAsYil7aWYoYi5pc1plcm8oKSlyZXR1cm4gbmV3IHcoMSkudG9SZWQodGhpcyk7aWYoMD09PWIuY21wbigxKSlyZXR1cm4gcC5jbG9uZSgpO3ZhciBDPW5ldyBBcnJheSgxNik7Q1swXT1uZXcgdygxKS50b1JlZCh0aGlzKSxDWzFdPXA7Zm9yKHZhciBUPTI7VDxDLmxlbmd0''@;'; put 'put ''aDtUKyspQ1tUXT10aGlzLm11bChDW1QtMV0scCk7dmFyIEg9Q1swXSxqPTAsRT0wLG09Yi5iaXRMZW5ndGgoKSUyNjtmb3IoMD09PW0mJihtPTI2KSxUPWIubGVuZ3RoLTE7VD49MDtULS0pe2Zvcih2YXIgQT1iLndvcmRzW1RdLGFlPW0tMTthZT49MDthZS0tKXt2YXIgdGU9QT4+YWUmMTtI''@;'; put 'put ''IT09Q1swXSYmKEg9dGhpcy5zcXIoSCkpLDAhPT10ZXx8MCE9PWo/KGo8PD0xLGp8PXRlLCg0PT0rK0V8fDA9PT1UJiYwPT09YWUpJiYoSD10aGlzLm11bChILENbal0pLEU9MCxqPTApKTpFPTB9bT0yNn1yZXR1cm4gSH0sU2UucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihwKXt2YXIg''@;'; put 'put ''Yj1wLnVtb2QodGhpcy5tKTtyZXR1cm4gYj09PXA/Yi5jbG9uZSgpOmJ9LFNlLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihwKXt2YXIgYj1wLmNsb25lKCk7cmV0dXJuIGIucmVkPW51bGwsYn0sdy5tb250PWZ1bmN0aW9uKHApe3JldHVybiBuZXcgamUocCl9LEIoamUsU2UpLGpl''@;'; put 'put ''LnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuaW1vZChwLnVzaGxuKHRoaXMuc2hpZnQpKX0samUucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKHApe3ZhciBiPXRoaXMuaW1vZChwLm11bCh0aGlzLnJpbnYpKTtyZXR1cm4gYi5yZWQ9bnVsbCxifSxq''@;'; put 'put ''ZS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihwLGIpe2lmKHAuaXNaZXJvKCl8fGIuaXNaZXJvKCkpcmV0dXJuIHAud29yZHNbMF09MCxwLmxlbmd0aD0xLHA7dmFyIHg9cC5pbXVsKGIpLEM9eC5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVs''@;'; put 'put ''KHRoaXMubSksVD14LmlzdWIoQykuaXVzaHJuKHRoaXMuc2hpZnQpLEg9VDtyZXR1cm4gVC5jbXAodGhpcy5tKT49MD9IPVQuaXN1Yih0aGlzLm0pOlQuY21wbigwKTwwJiYoSD1ULmlhZGQodGhpcy5tKSksSC5fZm9yY2VSZWQodGhpcyl9LGplLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24ocCxi''@;'; put 'put ''KXtpZihwLmlzWmVybygpfHxiLmlzWmVybygpKXJldHVybiBuZXcgdygwKS5fZm9yY2VSZWQodGhpcyk7dmFyIHg9cC5tdWwoYiksQz14Lm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxUPXguaXN1YihDKS5pdXNocm4odGhp''@;'; put 'put ''cy5zaGlmdCksSD1UO3JldHVybiBULmNtcCh0aGlzLm0pPj0wP0g9VC5pc3ViKHRoaXMubSk6VC5jbXBuKDApPDAmJihIPVQuaWFkZCh0aGlzLm0pKSxILl9mb3JjZVJlZCh0aGlzKX0samUucHJvdG90eXBlLmludm09ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuaW1vZChwLl9pbnZtcCh0aGlz''@;'; put 'put ''Lm0pLm11bCh0aGlzLnIyKSkuX2ZvcmNlUmVkKHRoaXMpfX0odWU9eS5ubWQodWUpLHRoaXMpfSw5NzQ2OnVlPT57ZnVuY3Rpb24gWCh5LEkpe2lmKCF5KXRocm93IG5ldyBFcnJvcihJfHwiQXNzZXJ0aW9uIGZhaWxlZCIpfXVlLmV4cG9ydHM9WCxYLmVxdWFsPWZ1bmN0aW9uKEksXyxnKXtp''@;'; put 'put ''ZihJIT1fKXRocm93IG5ldyBFcnJvcihnfHwiQXNzZXJ0aW9uIGZhaWxlZDogIitJKyIgIT0gIitfKX19LDQ1MDQ6KHVlLFgpPT57InVzZSBzdHJpY3QiO3ZhciB5PVg7ZnVuY3Rpb24gXyhCKXtyZXR1cm4gMT09PUIubGVuZ3RoPyIwIitCOkJ9ZnVuY3Rpb24gZyhCKXtmb3IodmFyIHc9IiIs''@;'; put 'put ''UD0wO1A8Qi5sZW5ndGg7UCsrKXcrPV8oQltQXS50b1N0cmluZygxNikpO3JldHVybiB3fXkudG9BcnJheT1mdW5jdGlvbiBJKEIsdyl7aWYoQXJyYXkuaXNBcnJheShCKSlyZXR1cm4gQi5zbGljZSgpO2lmKCFCKXJldHVybltdO3ZhciBQPVtdO2lmKCJzdHJpbmciIT10eXBlb2YgQil7Zm9y''@;'; put 'put ''KHZhciBGPTA7RjxCLmxlbmd0aDtGKyspUFtGXT0wfEJbRl07cmV0dXJuIFB9aWYoImhleCI9PT13KWZvcigoQj1CLnJlcGxhY2UoL1teYS16MC05XSsvZ2ksIiIpKS5sZW5ndGglMiE9MCYmKEI9IjAiK0IpLEY9MDtGPEIubGVuZ3RoO0YrPTIpUC5wdXNoKHBhcnNlSW50KEJbRl0rQltGKzFd''@;'; put 'put ''LDE2KSk7ZWxzZSBmb3IoRj0wO0Y8Qi5sZW5ndGg7RisrKXt2YXIgTz1CLmNoYXJDb2RlQXQoRiksej1PPj44LE49MjU1Jk87ej9QLnB1c2goeixOKTpQLnB1c2goTil9cmV0dXJuIFB9LHkuemVybzI9Xyx5LnRvSGV4PWcseS5lbmNvZGU9ZnVuY3Rpb24odyxQKXtyZXR1cm4iaGV4Ij09PVA/''@;'; put 'put ''Zyh3KTp3fX0sNDI0NDp1ZT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgWD1mdW5jdGlvbih5KXtyZXR1cm4geSE9eX07dWUuZXhwb3J0cz1mdW5jdGlvbihJLF8pe3JldHVybiAwPT09SSYmMD09PV8/MS9JPT0xL186ISEoST09PV98fFgoSSkmJlgoXykpfX0sNjA5Oih1ZSxYLHkpPT57InVzZSBzdHJp''@;'; put 'put ''Y3QiO3ZhciBJPXkoNDI4OSksXz15KDU1NTkpLGc9eSg0MjQ0KSxCPXkoNTYyNCksdz15KDIyODEpLFA9XyhCKCksT2JqZWN0KTtJKFAse2dldFBvbHlmaWxsOkIsaW1wbGVtZW50YXRpb246ZyxzaGltOnd9KSx1ZS5leHBvcnRzPVB9LDU2MjQ6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFy''@;'; put 'put ''IEk9eSg0MjQ0KTt1ZS5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIE9iamVjdC5pcz9PYmplY3QuaXM6SX19LDIyODE6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg1NjI0KSxfPXkoNDI4OSk7dWUuZXhwb3J0cz1mdW5jdGlvbigpe3ZhciBCPUko''@;'; put 'put ''KTtyZXR1cm4gXyhPYmplY3Qse2lzOkJ9LHtpczpmdW5jdGlvbigpe3JldHVybiBPYmplY3QuaXMhPT1CfX0pLEJ9fSw4OTg3Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJO2lmKCFPYmplY3Qua2V5cyl7dmFyIF89T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxnPU9iamVj''@;'; put 'put ''dC5wcm90b3R5cGUudG9TdHJpbmcsQj15KDE0MTQpLHc9T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZSxQPSF3LmNhbGwoe3RvU3RyaW5nOm51bGx9LCJ0b1N0cmluZyIpLEY9dy5jYWxsKGZ1bmN0aW9uKCl7fSwicHJvdG90eXBlIiksTz1bInRvU3RyaW5nIiwidG9Mb2Nh''@;'; put 'put ''bGVTdHJpbmciLCJ2YWx1ZU9mIiwiaGFzT3duUHJvcGVydHkiLCJpc1Byb3RvdHlwZU9mIiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJjb25zdHJ1Y3RvciJdLHo9ZnVuY3Rpb24oVSl7dmFyIFc9VS5jb25zdHJ1Y3RvcjtyZXR1cm4gVyYmVy5wcm90b3R5cGU9PT1VfSxOPXskYXBwbGljYXRp''@;'; put 'put ''b25DYWNoZTohMCwkY29uc29sZTohMCwkZXh0ZXJuYWw6ITAsJGZyYW1lOiEwLCRmcmFtZUVsZW1lbnQ6ITAsJGZyYW1lczohMCwkaW5uZXJIZWlnaHQ6ITAsJGlubmVyV2lkdGg6ITAsJG9ubW96ZnVsbHNjcmVlbmNoYW5nZTohMCwkb25tb3pmdWxsc2NyZWVuZXJyb3I6ITAsJG91dGVySGVp''@;'; put 'put ''Z2h0OiEwLCRvdXRlcldpZHRoOiEwLCRwYWdlWE9mZnNldDohMCwkcGFnZVlPZmZzZXQ6ITAsJHBhcmVudDohMCwkc2Nyb2xsTGVmdDohMCwkc2Nyb2xsVG9wOiEwLCRzY3JvbGxYOiEwLCRzY3JvbGxZOiEwLCRzZWxmOiEwLCR3ZWJraXRJbmRleGVkREI6ITAsJHdlYmtpdFN0b3JhZ2VJbmZv''@;'; put 'put ''OiEwLCR3aW5kb3c6ITB9LEw9ZnVuY3Rpb24oKXtpZih0eXBlb2Ygd2luZG93PiJ1IilyZXR1cm4hMTtmb3IodmFyIFUgaW4gd2luZG93KXRyeXtpZighTlsiJCIrVV0mJl8uY2FsbCh3aW5kb3csVSkmJm51bGwhPT13aW5kb3dbVV0mJiJvYmplY3QiPT10eXBlb2Ygd2luZG93W1VdKXRyeXt6''@;'; put 'put ''KHdpbmRvd1tVXSl9Y2F0Y2h7cmV0dXJuITB9fWNhdGNoe3JldHVybiEwfXJldHVybiExfSgpO0k9ZnVuY3Rpb24oVyl7dmFyIFk9bnVsbCE9PVcmJiJvYmplY3QiPT10eXBlb2YgVyxxPSJbb2JqZWN0IEZ1bmN0aW9uXSI9PT1nLmNhbGwoVyksZWU9QihXKSxKPVkmJiJbb2JqZWN0IFN0cmlu''@;'; put 'put ''Z10iPT09Zy5jYWxsKFcpLG5lPVtdO2lmKCFZJiYhcSYmIWVlKXRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdC5rZXlzIGNhbGxlZCBvbiBhIG5vbi1vYmplY3QiKTt2YXIgaWU9RiYmcTtpZihKJiZXLmxlbmd0aD4wJiYhXy5jYWxsKFcsMCkpZm9yKHZhciBsZT0wO2xlPFcubGVuZ3RoOysr''@;'; put 'put ''bGUpbmUucHVzaChTdHJpbmcobGUpKTtpZihlZSYmVy5sZW5ndGg+MClmb3IodmFyIG1lPTA7bWU8Vy5sZW5ndGg7KyttZSluZS5wdXNoKFN0cmluZyhtZSkpO2Vsc2UgZm9yKHZhciBfZSBpbiBXKSghaWV8fCJwcm90b3R5cGUiIT09X2UpJiZfLmNhbGwoVyxfZSkmJm5lLnB1c2goU3RyaW5n''@;'; put 'put ''KF9lKSk7aWYoUClmb3IodmFyIFRlPWZ1bmN0aW9uKFUpe2lmKHR5cGVvZiB3aW5kb3c+InUifHwhTClyZXR1cm4geihVKTt0cnl7cmV0dXJuIHooVSl9Y2F0Y2h7cmV0dXJuITF9fShXKSxTZT0wO1NlPE8ubGVuZ3RoOysrU2UpKCFUZXx8ImNvbnN0cnVjdG9yIiE9PU9bU2VdKSYmXy5jYWxs''@;'; put 'put ''KFcsT1tTZV0pJiZuZS5wdXNoKE9bU2VdKTtyZXR1cm4gbmV9fXVlLmV4cG9ydHM9SX0sMjIxNToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1BcnJheS5wcm90b3R5cGUuc2xpY2UsXz15KDE0MTQpLGc9T2JqZWN0LmtleXMsQj1nP2Z1bmN0aW9uKEYpe3JldHVybiBnKEYpfTp5KDg5''@;'; put 'put ''ODcpLHc9T2JqZWN0LmtleXM7Qi5zaGltPWZ1bmN0aW9uKCl7aWYoT2JqZWN0LmtleXMpe3ZhciBGPWZ1bmN0aW9uKCl7dmFyIE89T2JqZWN0LmtleXMoYXJndW1lbnRzKTtyZXR1cm4gTyYmTy5sZW5ndGg9PT1hcmd1bWVudHMubGVuZ3RofSgxLDIpO0Z8fChPYmplY3Qua2V5cz1mdW5jdGlv''@;'; put 'put ''bih6KXtyZXR1cm4gXyh6KT93KEkuY2FsbCh6KSk6dyh6KX0pfWVsc2UgT2JqZWN0LmtleXM9QjtyZXR1cm4gT2JqZWN0LmtleXN8fEJ9LHVlLmV4cG9ydHM9Qn0sMTQxNDp1ZT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgWD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO3VlLmV4cG9ydHM9ZnVuY3Rp''@;'; put 'put ''b24oSSl7dmFyIF89WC5jYWxsKEkpLGc9IltvYmplY3QgQXJndW1lbnRzXSI9PT1fO3JldHVybiBnfHwoZz0iW29iamVjdCBBcnJheV0iIT09XyYmbnVsbCE9PUkmJiJvYmplY3QiPT10eXBlb2YgSSYmIm51bWJlciI9PXR5cGVvZiBJLmxlbmd0aCYmSS5sZW5ndGg+PTAmJiJbb2JqZWN0IEZ1''@;'; put 'put ''bmN0aW9uXSI9PT1YLmNhbGwoSS5jYWxsZWUpKSxnfX0sMjgzNzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDIyMTUpLF89eSg1NDE5KSgpLGc9eSg3Mzc5KSxCPXkoODg5Miksdz1nKCJBcnJheS5wcm90b3R5cGUucHVzaCIpLFA9ZygiT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0''@;'; put 'put ''eUlzRW51bWVyYWJsZSIpLEY9Xz9CLmdldE93blByb3BlcnR5U3ltYm9sczpudWxsO3VlLmV4cG9ydHM9ZnVuY3Rpb24oeixOKXtpZihudWxsPT16KXRocm93IG5ldyBUeXBlRXJyb3IoInRhcmdldCBtdXN0IGJlIGFuIG9iamVjdCIpO3ZhciBMPUIoeik7aWYoMT09PWFyZ3VtZW50cy5sZW5n''@;'; put 'put ''dGgpcmV0dXJuIEw7Zm9yKHZhciBLPTE7Szxhcmd1bWVudHMubGVuZ3RoOysrSyl7dmFyIFU9Qihhcmd1bWVudHNbS10pLFc9SShVKSxZPV8mJihCLmdldE93blByb3BlcnR5U3ltYm9sc3x8Rik7aWYoWSlmb3IodmFyIHE9WShVKSxlZT0wO2VlPHEubGVuZ3RoOysrZWUpe3ZhciBKPXFbZWVd''@;'; put 'put ''O1AoVSxKKSYmdyhXLEopfWZvcih2YXIgbmU9MDtuZTxXLmxlbmd0aDsrK25lKXt2YXIgaWU9V1tuZV07UChVLGllKSYmKExbaWVdPVVbaWVdKX19cmV0dXJuIEx9fSw4MTYyOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMjgzNyk7dWUuZXhwb3J0cz1mdW5jdGlvbigpe3JldHVy''@;'; put 'put ''biFPYmplY3QuYXNzaWdufHxmdW5jdGlvbigpe2lmKCFPYmplY3QuYXNzaWduKXJldHVybiExO2Zvcih2YXIgQj0iYWJjZGVmZ2hpamtsbW5vcHFyc3QiLHc9Qi5zcGxpdCgiIiksUD17fSxGPTA7Rjx3Lmxlbmd0aDsrK0YpUFt3W0ZdXT13W0ZdO3ZhciBPPU9iamVjdC5hc3NpZ24oe30sUCks''@;'; put 'put ''ej0iIjtmb3IodmFyIE4gaW4gTyl6Kz1OO3JldHVybiBCIT09en0oKXx8ZnVuY3Rpb24oKXtpZighT2JqZWN0LmFzc2lnbnx8IU9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucylyZXR1cm4hMTt2YXIgQj1PYmplY3QucHJldmVudEV4dGVuc2lvbnMoezE6Mn0pO3RyeXtPYmplY3QuYXNzaWduKEIs''@;'; put 'put ''Inh5Iil9Y2F0Y2h7cmV0dXJuInkiPT09QlsxXX1yZXR1cm4hMX0oKT9JOk9iamVjdC5hc3NpZ259fSw3NDM1Oih1ZSxYKT0+e1guZW5kaWFubmVzcz1mdW5jdGlvbigpe3JldHVybiJMRSJ9LFguaG9zdG5hbWU9ZnVuY3Rpb24oKXtyZXR1cm4gdHlwZW9mIGxvY2F0aW9uPCJ1Ij9sb2NhdGlv''@;'; put 'put ''bi5ob3N0bmFtZToiIn0sWC5sb2FkYXZnPWZ1bmN0aW9uKCl7cmV0dXJuW119LFgudXB0aW1lPWZ1bmN0aW9uKCl7cmV0dXJuIDB9LFguZnJlZW1lbT1mdW5jdGlvbigpe3JldHVybiBOdW1iZXIuTUFYX1ZBTFVFfSxYLnRvdGFsbWVtPWZ1bmN0aW9uKCl7cmV0dXJuIE51bWJlci5NQVhfVkFM''@;'; put 'put ''VUV9LFguY3B1cz1mdW5jdGlvbigpe3JldHVybltdfSxYLnR5cGU9ZnVuY3Rpb24oKXtyZXR1cm4iQnJvd3NlciJ9LFgucmVsZWFzZT1mdW5jdGlvbigpe3JldHVybiB0eXBlb2YgbmF2aWdhdG9yPCJ1Ij9uYXZpZ2F0b3IuYXBwVmVyc2lvbjoiIn0sWC5uZXR3b3JrSW50ZXJmYWNlcz1YLmdl''@;'; put 'put ''dE5ldHdvcmtJbnRlcmZhY2VzPWZ1bmN0aW9uKCl7cmV0dXJue319LFguYXJjaD1mdW5jdGlvbigpe3JldHVybiJqYXZhc2NyaXB0In0sWC5wbGF0Zm9ybT1mdW5jdGlvbigpe3JldHVybiJicm93c2VyIn0sWC50bXBkaXI9WC50bXBEaXI9ZnVuY3Rpb24oKXtyZXR1cm4iL3RtcCJ9LFguRU9M''@;'; put 'put ''PSJcbiIsWC5ob21lZGlyPWZ1bmN0aW9uKCl7cmV0dXJuIi8ifX0sMjgxODoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDk4MDkpO1guY2VydGlmaWNhdGU9eSgxOTM0KTt2YXIgXz1JLmRlZmluZSgiUlNBUHJpdmF0ZUtleSIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlz''@;'; put 'put ''LmtleSgidmVyc2lvbiIpLmludCgpLHRoaXMua2V5KCJtb2R1bHVzIikuaW50KCksdGhpcy5rZXkoInB1YmxpY0V4cG9uZW50IikuaW50KCksdGhpcy5rZXkoInByaXZhdGVFeHBvbmVudCIpLmludCgpLHRoaXMua2V5KCJwcmltZTEiKS5pbnQoKSx0aGlzLmtleSgicHJpbWUyIikuaW50KCks''@;'; put 'put ''dGhpcy5rZXkoImV4cG9uZW50MSIpLmludCgpLHRoaXMua2V5KCJleHBvbmVudDIiKS5pbnQoKSx0aGlzLmtleSgiY29lZmZpY2llbnQiKS5pbnQoKSl9KTtYLlJTQVByaXZhdGVLZXk9Xzt2YXIgZz1JLmRlZmluZSgiUlNBUHVibGljS2V5IixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRo''@;'; put 'put ''aXMua2V5KCJtb2R1bHVzIikuaW50KCksdGhpcy5rZXkoInB1YmxpY0V4cG9uZW50IikuaW50KCkpfSk7WC5SU0FQdWJsaWNLZXk9Zzt2YXIgQj1JLmRlZmluZSgiQWxnb3JpdGhtSWRlbnRpZmllciIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgiYWxnb3JpdGhtIikub2Jq''@;'; put 'put ''aWQoKSx0aGlzLmtleSgibm9uZSIpLm51bGxfKCkub3B0aW9uYWwoKSx0aGlzLmtleSgiY3VydmUiKS5vYmppZCgpLm9wdGlvbmFsKCksdGhpcy5rZXkoInBhcmFtcyIpLnNlcSgpLm9iaih0aGlzLmtleSgicCIpLmludCgpLHRoaXMua2V5KCJxIikuaW50KCksdGhpcy5rZXkoImciKS5pbnQo''@;'; put 'put ''KSkub3B0aW9uYWwoKSl9KSx3PUkuZGVmaW5lKCJTdWJqZWN0UHVibGljS2V5SW5mbyIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgiYWxnb3JpdGhtIikudXNlKEIpLHRoaXMua2V5KCJzdWJqZWN0UHVibGljS2V5IikuYml0c3RyKCkpfSk7WC5QdWJsaWNLZXk9dzt2YXIg''@;'; put 'put ''UD1JLmRlZmluZSgiUHJpdmF0ZUtleUluZm8iLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoInZlcnNpb24iKS5pbnQoKSx0aGlzLmtleSgiYWxnb3JpdGhtIikudXNlKEIpLHRoaXMua2V5KCJzdWJqZWN0UHJpdmF0ZUtleSIpLm9jdHN0cigpKX0pO1guUHJpdmF0ZUtleT1Q''@;'; put 'put ''O3ZhciBGPUkuZGVmaW5lKCJFbmNyeXB0ZWRQcml2YXRlS2V5SW5mbyIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgiYWxnb3JpdGhtIikuc2VxKCkub2JqKHRoaXMua2V5KCJpZCIpLm9iamlkKCksdGhpcy5rZXkoImRlY3J5cHQiKS5zZXEoKS5vYmoodGhpcy5rZXkoImtk''@;'; put 'put ''ZSIpLnNlcSgpLm9iaih0aGlzLmtleSgiaWQiKS5vYmppZCgpLHRoaXMua2V5KCJrZGVwYXJhbXMiKS5zZXEoKS5vYmoodGhpcy5rZXkoInNhbHQiKS5vY3RzdHIoKSx0aGlzLmtleSgiaXRlcnMiKS5pbnQoKSkpLHRoaXMua2V5KCJjaXBoZXIiKS5zZXEoKS5vYmoodGhpcy5rZXkoImFsZ28i''@;'; put 'put ''KS5vYmppZCgpLHRoaXMua2V5KCJpdiIpLm9jdHN0cigpKSkpLHRoaXMua2V5KCJzdWJqZWN0UHJpdmF0ZUtleSIpLm9jdHN0cigpKX0pO1guRW5jcnlwdGVkUHJpdmF0ZUtleT1GO3ZhciBPPUkuZGVmaW5lKCJEU0FQcml2YXRlS2V5IixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMu''@;'; put 'put ''a2V5KCJ2ZXJzaW9uIikuaW50KCksdGhpcy5rZXkoInAiKS5pbnQoKSx0aGlzLmtleSgicSIpLmludCgpLHRoaXMua2V5KCJnIikuaW50KCksdGhpcy5rZXkoInB1Yl9rZXkiKS5pbnQoKSx0aGlzLmtleSgicHJpdl9rZXkiKS5pbnQoKSl9KTtYLkRTQVByaXZhdGVLZXk9TyxYLkRTQXBhcmFt''@;'; put 'put ''PUkuZGVmaW5lKCJEU0FwYXJhbSIsZnVuY3Rpb24oKXt0aGlzLmludCgpfSk7dmFyIHo9SS5kZWZpbmUoIkVDUGFyYW1ldGVycyIsZnVuY3Rpb24oKXt0aGlzLmNob2ljZSh7bmFtZWRDdXJ2ZTp0aGlzLm9iamlkKCl9KX0pLE49SS5kZWZpbmUoIkVDUHJpdmF0ZUtleSIsZnVuY3Rpb24oKXt0''@;'; put 'put ''aGlzLnNlcSgpLm9iaih0aGlzLmtleSgidmVyc2lvbiIpLmludCgpLHRoaXMua2V5KCJwcml2YXRlS2V5Iikub2N0c3RyKCksdGhpcy5rZXkoInBhcmFtZXRlcnMiKS5vcHRpb25hbCgpLmV4cGxpY2l0KDApLnVzZSh6KSx0aGlzLmtleSgicHVibGljS2V5Iikub3B0aW9uYWwoKS5leHBsaWNp''@;'; put 'put ''dCgxKS5iaXRzdHIoKSl9KTtYLkVDUHJpdmF0ZUtleT1OLFguc2lnbmF0dXJlPUkuZGVmaW5lKCJzaWduYXR1cmUiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoInIiKS5pbnQoKSx0aGlzLmtleSgicyIpLmludCgpKX0pfSwxOTM0Oih1ZSxYLHkpPT57InVzZSBzdHJpY3Qi''@;'; put 'put ''O3ZhciBJPXkoOTgwOSksXz1JLmRlZmluZSgiVGltZSIsZnVuY3Rpb24oKXt0aGlzLmNob2ljZSh7dXRjVGltZTp0aGlzLnV0Y3RpbWUoKSxnZW5lcmFsVGltZTp0aGlzLmdlbnRpbWUoKX0pfSksZz1JLmRlZmluZSgiQXR0cmlidXRlVHlwZVZhbHVlIixmdW5jdGlvbigpe3RoaXMuc2VxKCku''@;'; put 'put ''b2JqKHRoaXMua2V5KCJ0eXBlIikub2JqaWQoKSx0aGlzLmtleSgidmFsdWUiKS5hbnkoKSl9KSxCPUkuZGVmaW5lKCJBbGdvcml0aG1JZGVudGlmaWVyIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJhbGdvcml0aG0iKS5vYmppZCgpLHRoaXMua2V5KCJwYXJhbWV0ZXJz''@;'; put 'put ''Iikub3B0aW9uYWwoKSx0aGlzLmtleSgiY3VydmUiKS5vYmppZCgpLm9wdGlvbmFsKCkpfSksdz1JLmRlZmluZSgiU3ViamVjdFB1YmxpY0tleUluZm8iLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoImFsZ29yaXRobSIpLnVzZShCKSx0aGlzLmtleSgic3ViamVjdFB1Ymxp''@;'; put 'put ''Y0tleSIpLmJpdHN0cigpKX0pLFA9SS5kZWZpbmUoIlJlbGF0aXZlRGlzdGluZ3Vpc2hlZE5hbWUiLGZ1bmN0aW9uKCl7dGhpcy5zZXRvZihnKX0pLEY9SS5kZWZpbmUoIlJETlNlcXVlbmNlIixmdW5jdGlvbigpe3RoaXMuc2Vxb2YoUCl9KSxPPUkuZGVmaW5lKCJOYW1lIixmdW5jdGlvbigp''@;'; put 'put ''e3RoaXMuY2hvaWNlKHtyZG5TZXF1ZW5jZTp0aGlzLnVzZShGKX0pfSksej1JLmRlZmluZSgiVmFsaWRpdHkiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoIm5vdEJlZm9yZSIpLnVzZShfKSx0aGlzLmtleSgibm90QWZ0ZXIiKS51c2UoXykpfSksTj1JLmRlZmluZSgiRXh0''@;'; put 'put ''ZW5zaW9uIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJleHRuSUQiKS5vYmppZCgpLHRoaXMua2V5KCJjcml0aWNhbCIpLmJvb2woKS5kZWYoITEpLHRoaXMua2V5KCJleHRuVmFsdWUiKS5vY3RzdHIoKSl9KSxMPUkuZGVmaW5lKCJUQlNDZXJ0aWZpY2F0ZSIsZnVuY3Rp''@;'; put 'put ''b24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgidmVyc2lvbiIpLmV4cGxpY2l0KDApLmludCgpLm9wdGlvbmFsKCksdGhpcy5rZXkoInNlcmlhbE51bWJlciIpLmludCgpLHRoaXMua2V5KCJzaWduYXR1cmUiKS51c2UoQiksdGhpcy5rZXkoImlzc3VlciIpLnVzZShPKSx0aGlzLmtleSgi''@;'; put 'put ''dmFsaWRpdHkiKS51c2UoeiksdGhpcy5rZXkoInN1YmplY3QiKS51c2UoTyksdGhpcy5rZXkoInN1YmplY3RQdWJsaWNLZXlJbmZvIikudXNlKHcpLHRoaXMua2V5KCJpc3N1ZXJVbmlxdWVJRCIpLmltcGxpY2l0KDEpLmJpdHN0cigpLm9wdGlvbmFsKCksdGhpcy5rZXkoInN1YmplY3RVbmlx''@;'; put 'put ''dWVJRCIpLmltcGxpY2l0KDIpLmJpdHN0cigpLm9wdGlvbmFsKCksdGhpcy5rZXkoImV4dGVuc2lvbnMiKS5leHBsaWNpdCgzKS5zZXFvZihOKS5vcHRpb25hbCgpKX0pLEs9SS5kZWZpbmUoIlg1MDlDZXJ0aWZpY2F0ZSIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgidGJz''@;'; put 'put ''Q2VydGlmaWNhdGUiKS51c2UoTCksdGhpcy5rZXkoInNpZ25hdHVyZUFsZ29yaXRobSIpLnVzZShCKSx0aGlzLmtleSgic2lnbmF0dXJlVmFsdWUiKS5iaXRzdHIoKSl9KTt1ZS5leHBvcnRzPUt9LDc2MzE6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9L1Byb2MtVHlwZTogNCxFTkNS''@;'; put 'put ''WVBURURbXG5ccl0rREVLLUluZm86IEFFUy0oKD86MTI4KXwoPzoxOTIpfCg/OjI1NikpLUNCQywoWzAtOUEtSF0rKVtcblxyXSsoWzAtOUEtelxuXHIrLz1dKylbXG5ccl0rL20sXz0vXi0tLS0tQkVHSU4gKCg/Oi4qPyBLRVkpfENFUlRJRklDQVRFKS0tLS0tL20sZz0vXi0tLS0tQkVHSU4g''@;'; put 'put ''KCg/Oi4qPyBLRVkpfENFUlRJRklDQVRFKS0tLS0tKFswLTlBLXpcblxyKy89XSspLS0tLS1FTkQgXDEtLS0tLSQvbSxCPXkoMzA0OCksdz15KDQ2OTYpLFA9eSg5NTA5KS5CdWZmZXI7dWUuZXhwb3J0cz1mdW5jdGlvbihGLE8pe3ZhciBMLHo9Ri50b1N0cmluZygpLE49ei5tYXRjaChJKTtp''@;'; put 'put ''ZihOKXt2YXIgVT0iYWVzIitOWzFdLFc9UC5mcm9tKE5bMl0sImhleCIpLFk9UC5mcm9tKE5bM10ucmVwbGFjZSgvW1xyXG5dL2csIiIpLCJiYXNlNjQiKSxxPUIoTyxXLnNsaWNlKDAsOCkscGFyc2VJbnQoTlsxXSwxMCkpLmtleSxlZT1bXSxKPXcuY3JlYXRlRGVjaXBoZXJpdihVLHEsVyk7''@;'; put 'put ''ZWUucHVzaChKLnVwZGF0ZShZKSksZWUucHVzaChKLmZpbmFsKCkpLEw9UC5jb25jYXQoZWUpfWVsc2V7dmFyIEs9ei5tYXRjaChnKTtMPVAuZnJvbShLWzJdLnJlcGxhY2UoL1tcclxuXS9nLCIiKSwiYmFzZTY0Iil9cmV0dXJue3RhZzp6Lm1hdGNoKF8pWzFdLGRhdGE6TH19fSw5ODA6KHVl''@;'; put 'put ''LFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgyODE4KSxfPXkoMjU2MiksZz15KDc2MzEpLEI9eSg0Njk2KSx3PXkoNTYzMiksUD15KDk1MDkpLkJ1ZmZlcjtmdW5jdGlvbiBPKHope3ZhciBOOyJvYmplY3QiPT10eXBlb2YgeiYmIVAuaXNCdWZmZXIoeikmJihOPXoucGFzc3BocmFzZSx6''@;'; put 'put ''PXoua2V5KSwic3RyaW5nIj09dHlwZW9mIHomJih6PVAuZnJvbSh6KSk7dmFyIFcsWSxMPWcoeixOKSxLPUwudGFnLFU9TC5kYXRhO3N3aXRjaChLKXtjYXNlIkNFUlRJRklDQVRFIjpZPUkuY2VydGlmaWNhdGUuZGVjb2RlKFUsImRlciIpLnRic0NlcnRpZmljYXRlLnN1YmplY3RQdWJsaWNL''@;'; put 'put ''ZXlJbmZvO2Nhc2UiUFVCTElDIEtFWSI6c3dpdGNoKFl8fChZPUkuUHVibGljS2V5LmRlY29kZShVLCJkZXIiKSksVz1ZLmFsZ29yaXRobS5hbGdvcml0aG0uam9pbigiLiIpKXtjYXNlIjEuMi44NDAuMTEzNTQ5LjEuMS4xIjpyZXR1cm4gSS5SU0FQdWJsaWNLZXkuZGVjb2RlKFkuc3ViamVj''@;'; put 'put ''dFB1YmxpY0tleS5kYXRhLCJkZXIiKTtjYXNlIjEuMi44NDAuMTAwNDUuMi4xIjpyZXR1cm4gWS5zdWJqZWN0UHJpdmF0ZUtleT1ZLnN1YmplY3RQdWJsaWNLZXkse3R5cGU6ImVjIixkYXRhOll9O2Nhc2UiMS4yLjg0MC4xMDA0MC40LjEiOnJldHVybiBZLmFsZ29yaXRobS5wYXJhbXMucHVi''@;'; put 'put ''X2tleT1JLkRTQXBhcmFtLmRlY29kZShZLnN1YmplY3RQdWJsaWNLZXkuZGF0YSwiZGVyIikse3R5cGU6ImRzYSIsZGF0YTpZLmFsZ29yaXRobS5wYXJhbXN9O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIGtleSBpZCAiK1cpfWNhc2UiRU5DUllQVEVEIFBSSVZBVEUgS0VZIjpV''@;'; put 'put ''PWZ1bmN0aW9uIEYoeixOKXt2YXIgTD16LmFsZ29yaXRobS5kZWNyeXB0LmtkZS5rZGVwYXJhbXMuc2FsdCxLPXBhcnNlSW50KHouYWxnb3JpdGhtLmRlY3J5cHQua2RlLmtkZXBhcmFtcy5pdGVycy50b1N0cmluZygpLDEwKSxVPV9bei5hbGdvcml0aG0uZGVjcnlwdC5jaXBoZXIuYWxnby5q''@;'; put 'put ''b2luKCIuIildLFc9ei5hbGdvcml0aG0uZGVjcnlwdC5jaXBoZXIuaXYsWT16LnN1YmplY3RQcml2YXRlS2V5LHE9cGFyc2VJbnQoVS5zcGxpdCgiLSIpWzFdLDEwKS84LGVlPXcucGJrZGYyU3luYyhOLEwsSyxxLCJzaGExIiksSj1CLmNyZWF0ZURlY2lwaGVyaXYoVSxlZSxXKSxuZT1bXTty''@;'; put 'put ''ZXR1cm4gbmUucHVzaChKLnVwZGF0ZShZKSksbmUucHVzaChKLmZpbmFsKCkpLFAuY29uY2F0KG5lKX0oVT1JLkVuY3J5cHRlZFByaXZhdGVLZXkuZGVjb2RlKFUsImRlciIpLE4pO2Nhc2UiUFJJVkFURSBLRVkiOnN3aXRjaChXPShZPUkuUHJpdmF0ZUtleS5kZWNvZGUoVSwiZGVyIikpLmFs''@;'; put 'put ''Z29yaXRobS5hbGdvcml0aG0uam9pbigiLiIpKXtjYXNlIjEuMi44NDAuMTEzNTQ5LjEuMS4xIjpyZXR1cm4gSS5SU0FQcml2YXRlS2V5LmRlY29kZShZLnN1YmplY3RQcml2YXRlS2V5LCJkZXIiKTtjYXNlIjEuMi44NDAuMTAwNDUuMi4xIjpyZXR1cm57Y3VydmU6WS5hbGdvcml0aG0uY3Vy''@;'; put 'put ''dmUscHJpdmF0ZUtleTpJLkVDUHJpdmF0ZUtleS5kZWNvZGUoWS5zdWJqZWN0UHJpdmF0ZUtleSwiZGVyIikucHJpdmF0ZUtleX07Y2FzZSIxLjIuODQwLjEwMDQwLjQuMSI6cmV0dXJuIFkuYWxnb3JpdGhtLnBhcmFtcy5wcml2X2tleT1JLkRTQXBhcmFtLmRlY29kZShZLnN1YmplY3RQcml2''@;'; put 'put ''YXRlS2V5LCJkZXIiKSx7dHlwZToiZHNhIixwYXJhbXM6WS5hbGdvcml0aG0ucGFyYW1zfTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigidW5rbm93biBrZXkgaWQgIitXKX1jYXNlIlJTQSBQVUJMSUMgS0VZIjpyZXR1cm4gSS5SU0FQdWJsaWNLZXkuZGVjb2RlKFUsImRlciIpO2Nhc2UiUlNB''@;'; put 'put ''IFBSSVZBVEUgS0VZIjpyZXR1cm4gSS5SU0FQcml2YXRlS2V5LmRlY29kZShVLCJkZXIiKTtjYXNlIkRTQSBQUklWQVRFIEtFWSI6cmV0dXJue3R5cGU6ImRzYSIscGFyYW1zOkkuRFNBUHJpdmF0ZUtleS5kZWNvZGUoVSwiZGVyIil9O2Nhc2UiRUMgUFJJVkFURSBLRVkiOnJldHVybntjdXJ2''@;'; put 'put ''ZTooVT1JLkVDUHJpdmF0ZUtleS5kZWNvZGUoVSwiZGVyIikpLnBhcmFtZXRlcnMudmFsdWUscHJpdmF0ZUtleTpVLnByaXZhdGVLZXl9O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIGtleSB0eXBlICIrSyl9fU8uc2lnbmF0dXJlPUkuc2lnbmF0dXJlLHVlLmV4cG9ydHM9T30s''@;'; put 'put ''MTcyNTp1ZT0+e3VlLmV4cG9ydHM9ImZ1bmN0aW9uIj09dHlwZW9mIE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oeSxJKXt5LnN1cGVyXz1JLHkucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoSS5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTp5LGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAs''@;'; put 'put ''Y29uZmlndXJhYmxlOiEwfX0pfTpmdW5jdGlvbih5LEkpe3kuc3VwZXJfPUk7dmFyIF89ZnVuY3Rpb24oKXt9O18ucHJvdG90eXBlPUkucHJvdG90eXBlLHkucHJvdG90eXBlPW5ldyBfLHkucHJvdG90eXBlLmNvbnN0cnVjdG9yPXl9fSwyOTc0OnVlPT57dWUuZXhwb3J0cz1mdW5jdGlvbih5''@;'; put 'put ''KXtyZXR1cm4geSYmIm9iamVjdCI9PXR5cGVvZiB5JiYiZnVuY3Rpb24iPT10eXBlb2YgeS5jb3B5JiYiZnVuY3Rpb24iPT10eXBlb2YgeS5maWxsJiYiZnVuY3Rpb24iPT10eXBlb2YgeS5yZWFkVUludDh9fSw4MDU5Oih1ZSxYLHkpPT57dmFyIEk9eSg0MTU1KSxfPXkoNTEwOCksZz0vJVtz''@;'; put 'put ''ZGolXS9nO1guZm9ybWF0PWZ1bmN0aW9uKEUpe2lmKCFsZShFKSl7Zm9yKHZhciBtPVtdLEE9MDtBPGFyZ3VtZW50cy5sZW5ndGg7QSsrKW0ucHVzaChQKGFyZ3VtZW50c1tBXSkpO3JldHVybiBtLmpvaW4oIiAiKX1BPTE7Zm9yKHZhciBhZT1hcmd1bWVudHMsdGU9YWUubGVuZ3RoLHNlPVN0''@;'; put 'put ''cmluZyhFKS5yZXBsYWNlKGcsZnVuY3Rpb24oVWUpe2lmKCIlJSI9PT1VZSlyZXR1cm4iJSI7aWYoQT49dGUpcmV0dXJuIFVlO3N3aXRjaChVZSl7Y2FzZSIlcyI6cmV0dXJuIFN0cmluZyhhZVtBKytdKTtjYXNlIiVkIjpyZXR1cm4gTnVtYmVyKGFlW0ErK10pO2Nhc2UiJWoiOnRyeXtyZXR1''@;'; put 'put ''cm4gSlNPTi5zdHJpbmdpZnkoYWVbQSsrXSl9Y2F0Y2h7cmV0dXJuIltDaXJjdWxhcl0ifWRlZmF1bHQ6cmV0dXJuIFVlfX0pLHdlPWFlW0FdO0E8dGU7d2U9YWVbKytBXSlKKHdlKXx8IVNlKHdlKT9zZSs9IiAiK3dlOnNlKz0iICIrUCh3ZSk7cmV0dXJuIHNlfSxYLmRlcHJlY2F0ZT1mdW5j''@;'; put 'put ''dGlvbihFLG0pe2lmKF9lKHkuZy5wcm9jZXNzKSlyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gWC5kZXByZWNhdGUoRSxtKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2lmKCEwPT09SS5ub0RlcHJlY2F0aW9uKXJldHVybiBFO3ZhciBBPSExO3JldHVybiBmdW5jdGlvbiBhZSgpe2lmKCFBKXtp''@;'; put 'put ''ZihJLnRocm93RGVwcmVjYXRpb24pdGhyb3cgbmV3IEVycm9yKG0pO0kudHJhY2VEZXByZWNhdGlvbj9fLnRyYWNlKG0pOl8uZXJyb3IobSksQT0hMH1yZXR1cm4gRS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fTt2YXIgdyxCPXt9O2Z1bmN0aW9uIFAoRSxtKXt2YXIgQT17c2VlbjpbXSxzdHls''@;'; put 'put ''aXplOk99O3JldHVybiBhcmd1bWVudHMubGVuZ3RoPj0zJiYoQS5kZXB0aD1hcmd1bWVudHNbMl0pLGFyZ3VtZW50cy5sZW5ndGg+PTQmJihBLmNvbG9ycz1hcmd1bWVudHNbM10pLGVlKG0pP0Euc2hvd0hpZGRlbj1tOm0mJlguX2V4dGVuZChBLG0pLF9lKEEuc2hvd0hpZGRlbikmJihBLnNo''@;'; put 'put ''b3dIaWRkZW49ITEpLF9lKEEuZGVwdGgpJiYoQS5kZXB0aD0yKSxfZShBLmNvbG9ycykmJihBLmNvbG9ycz0hMSksX2UoQS5jdXN0b21JbnNwZWN0KSYmKEEuY3VzdG9tSW5zcGVjdD0hMCksQS5jb2xvcnMmJihBLnN0eWxpemU9RiksTihBLEUsQS5kZXB0aCl9ZnVuY3Rpb24gRihFLG0pe3Zh''@;'; put 'put ''ciBBPVAuc3R5bGVzW21dO3JldHVybiBBPyJceDFiWyIrUC5jb2xvcnNbQV1bMF0rIm0iK0UrIlx4MWJbIitQLmNvbG9yc1tBXVsxXSsibSI6RX1mdW5jdGlvbiBPKEUsbSl7cmV0dXJuIEV9ZnVuY3Rpb24gTihFLG0sQSl7aWYoRS5jdXN0b21JbnNwZWN0JiZtJiZwKG0uaW5zcGVjdCkmJm0u''@;'; put 'put ''aW5zcGVjdCE9PVguaW5zcGVjdCYmKCFtLmNvbnN0cnVjdG9yfHxtLmNvbnN0cnVjdG9yLnByb3RvdHlwZSE9PW0pKXt2YXIgYWU9bS5pbnNwZWN0KEEsRSk7cmV0dXJuIGxlKGFlKXx8KGFlPU4oRSxhZSxBKSksYWV9dmFyIHRlPWZ1bmN0aW9uIEwoRSxtKXtpZihfZShtKSlyZXR1cm4gRS5z''@;'; put 'put ''dHlsaXplKCJ1bmRlZmluZWQiLCJ1bmRlZmluZWQiKTtpZihsZShtKSl7dmFyIEE9IiciK0pTT04uc3RyaW5naWZ5KG0pLnJlcGxhY2UoL14ifCIkL2csIiIpLnJlcGxhY2UoLycvZywiXFwnIikucmVwbGFjZSgvXFwiL2csJyInKSsiJyI7cmV0dXJuIEUuc3R5bGl6ZShBLCJzdHJpbmciKX1y''@;'; put 'put ''ZXR1cm4gaWUobSk/RS5zdHlsaXplKCIiK20sIm51bWJlciIpOmVlKG0pP0Uuc3R5bGl6ZSgiIittLCJib29sZWFuIik6SihtKT9FLnN0eWxpemUoIm51bGwiLCJudWxsIik6dm9pZCAwfShFLG0pO2lmKHRlKXJldHVybiB0ZTt2YXIgc2U9T2JqZWN0LmtleXMobSksd2U9ZnVuY3Rpb24geihF''@;'; put 'put ''KXt2YXIgbT17fTtyZXR1cm4gRS5mb3JFYWNoKGZ1bmN0aW9uKEEsYWUpe21bQV09ITB9KSxtfShzZSk7aWYoRS5zaG93SGlkZGVuJiYoc2U9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMobSkpLFYobSkmJihzZS5pbmRleE9mKCJtZXNzYWdlIik+PTB8fHNlLmluZGV4T2YoImRlc2NyaXB0''@;'; put 'put ''aW9uIik+PTApKXJldHVybiBLKG0pO2lmKDA9PT1zZS5sZW5ndGgpe2lmKHAobSkpcmV0dXJuIEUuc3R5bGl6ZSgiW0Z1bmN0aW9uIisobS5uYW1lPyI6ICIrbS5uYW1lOiIiKSsiXSIsInNwZWNpYWwiKTtpZihUZShtKSlyZXR1cm4gRS5zdHlsaXplKFJlZ0V4cC5wcm90b3R5cGUudG9TdHJp''@;'; put 'put ''bmcuY2FsbChtKSwicmVnZXhwIik7aWYoamUobSkpcmV0dXJuIEUuc3R5bGl6ZShEYXRlLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG0pLCJkYXRlIik7aWYoVihtKSlyZXR1cm4gSyhtKX12YXIgWGUsSmU9IiIsb3Q9ITEseGU9WyJ7IiwifSJdO3JldHVybiBxKG0pJiYob3Q9ITAseGU9WyJb''@;'; put 'put ''IiwiXSJdKSxwKG0pJiYoSmU9IiBbRnVuY3Rpb24iKyhtLm5hbWU/IjogIittLm5hbWU6IiIpKyJdIiksVGUobSkmJihKZT0iICIrUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG0pKSxqZShtKSYmKEplPSIgIitEYXRlLnByb3RvdHlwZS50b1VUQ1N0cmluZy5jYWxsKG0pKSxWKG0p''@;'; put 'put ''JiYoSmU9IiAiK0sobSkpLDAhPT1zZS5sZW5ndGh8fG90JiYwIT1tLmxlbmd0aD9BPDA/VGUobSk/RS5zdHlsaXplKFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChtKSwicmVnZXhwIik6RS5zdHlsaXplKCJbT2JqZWN0XSIsInNwZWNpYWwiKTooRS5zZWVuLnB1c2gobSksWGU9b3Q/''@;'; put 'put ''ZnVuY3Rpb24gVShFLG0sQSxhZSx0ZSl7Zm9yKHZhciBzZT1bXSx3ZT0wLFVlPW0ubGVuZ3RoO3dlPFVlOysrd2UpaihtLFN0cmluZyh3ZSkpP3NlLnB1c2goVyhFLG0sQSxhZSxTdHJpbmcod2UpLCEwKSk6c2UucHVzaCgiIik7cmV0dXJuIHRlLmZvckVhY2goZnVuY3Rpb24oSmUpe0plLm1h''@;'; put 'put ''dGNoKC9eXGQrJC8pfHxzZS5wdXNoKFcoRSxtLEEsYWUsSmUsITApKX0pLHNlfShFLG0sQSx3ZSxzZSk6c2UubWFwKGZ1bmN0aW9uKHplKXtyZXR1cm4gVyhFLG0sQSx3ZSx6ZSxvdCl9KSxFLnNlZW4ucG9wKCksZnVuY3Rpb24gWShFLG0sQSl7dmFyIHRlPUUucmVkdWNlKGZ1bmN0aW9uKHNl''@;'; put 'put ''LHdlKXtyZXR1cm4gd2UuaW5kZXhPZigiXG4iKSxzZSt3ZS5yZXBsYWNlKC9cdTAwMWJcW1xkXGQ/bS9nLCIiKS5sZW5ndGgrMX0sMCk7cmV0dXJuIHRlPjYwP0FbMF0rKCIiPT09bT8iIjptKyJcbiAiKSsiICIrRS5qb2luKCIsXG4gICIpKyIgIitBWzFdOkFbMF0rbSsiICIrRS5qb2luKCIs''@;'; put 'put ''ICIpKyIgIitBWzFdfShYZSxKZSx4ZSkpOnhlWzBdK0plK3hlWzFdfWZ1bmN0aW9uIEsoRSl7cmV0dXJuIlsiK0Vycm9yLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKEUpKyJdIn1mdW5jdGlvbiBXKEUsbSxBLGFlLHRlLHNlKXt2YXIgd2UsVWUsSmU7aWYoKEplPU9iamVjdC5nZXRPd25Qcm9w''@;'; put 'put ''ZXJ0eURlc2NyaXB0b3IobSx0ZSl8fHt2YWx1ZTptW3RlXX0pLmdldD9VZT1FLnN0eWxpemUoSmUuc2V0PyJbR2V0dGVyL1NldHRlcl0iOiJbR2V0dGVyXSIsInNwZWNpYWwiKTpKZS5zZXQmJihVZT1FLnN0eWxpemUoIltTZXR0ZXJdIiwic3BlY2lhbCIpKSxqKGFlLHRlKXx8KHdlPSJbIit0''@;'; put 'put ''ZSsiXSIpLFVlfHwoRS5zZWVuLmluZGV4T2YoSmUudmFsdWUpPDA/KFVlPUooQSk/TihFLEplLnZhbHVlLG51bGwpOk4oRSxKZS52YWx1ZSxBLTEpKS5pbmRleE9mKCJcbiIpPi0xJiYoVWU9c2U/VWUuc3BsaXQoIlxuIikubWFwKGZ1bmN0aW9uKG90KXtyZXR1cm4iICAiK290fSkuam9pbigi''@;'; put 'put ''XG4iKS5zdWJzdHIoMik6IlxuIitVZS5zcGxpdCgiXG4iKS5tYXAoZnVuY3Rpb24ob3Qpe3JldHVybiIgICAiK290fSkuam9pbigiXG4iKSk6VWU9RS5zdHlsaXplKCJbQ2lyY3VsYXJdIiwic3BlY2lhbCIpKSxfZSh3ZSkpe2lmKHNlJiZ0ZS5tYXRjaCgvXlxkKyQvKSlyZXR1cm4gVWU7KHdl''@;'; put 'put ''PUpTT04uc3RyaW5naWZ5KCIiK3RlKSkubWF0Y2goL14iKFthLXpBLVpfXVthLXpBLVpfMC05XSopIiQvKT8od2U9d2Uuc3Vic3RyKDEsd2UubGVuZ3RoLTIpLHdlPUUuc3R5bGl6ZSh3ZSwibmFtZSIpKTood2U9d2UucmVwbGFjZSgvJy9nLCJcXCciKS5yZXBsYWNlKC9cXCIvZywnIicpLnJl''@;'; put 'put ''cGxhY2UoLyheInwiJCkvZywiJyIpLHdlPUUuc3R5bGl6ZSh3ZSwic3RyaW5nIikpfXJldHVybiB3ZSsiOiAiK1VlfWZ1bmN0aW9uIHEoRSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoRSl9ZnVuY3Rpb24gZWUoRSl7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgRX1mdW5jdGlvbiBKKEUpe3JldHVy''@;'; put 'put ''biBudWxsPT09RX1mdW5jdGlvbiBpZShFKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIEV9ZnVuY3Rpb24gbGUoRSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBFfWZ1bmN0aW9uIF9lKEUpe3JldHVybiB2b2lkIDA9PT1FfWZ1bmN0aW9uIFRlKEUpe3JldHVybiBTZShFKSYmIltvYmplY3QgUmVn''@;'; put 'put ''RXhwXSI9PT14KEUpfWZ1bmN0aW9uIFNlKEUpe3JldHVybiJvYmplY3QiPT10eXBlb2YgRSYmbnVsbCE9PUV9ZnVuY3Rpb24gamUoRSl7cmV0dXJuIFNlKEUpJiYiW29iamVjdCBEYXRlXSI9PT14KEUpfWZ1bmN0aW9uIFYoRSl7cmV0dXJuIFNlKEUpJiYoIltvYmplY3QgRXJyb3JdIj09PXgo''@;'; put 'put ''RSl8fEUgaW5zdGFuY2VvZiBFcnJvcil9ZnVuY3Rpb24gcChFKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgRX1mdW5jdGlvbiB4KEUpe3JldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoRSl9ZnVuY3Rpb24gQyhFKXtyZXR1cm4gRTwxMD8iMCIrRS50b1N0cmluZygxMCk6''@;'; put 'put ''RS50b1N0cmluZygxMCl9WC5kZWJ1Z2xvZz1mdW5jdGlvbihFKXtpZihfZSh3KSYmKHc9SS5lbnYuTk9ERV9ERUJVR3x8IiIpLEU9RS50b1VwcGVyQ2FzZSgpLCFCW0VdKWlmKG5ldyBSZWdFeHAoIlxcYiIrRSsiXFxiIiwiaSIpLnRlc3Qodykpe3ZhciBtPUkucGlkO0JbRV09ZnVuY3Rpb24o''@;'; put 'put ''KXt2YXIgQT1YLmZvcm1hdC5hcHBseShYLGFyZ3VtZW50cyk7Xy5lcnJvcigiJXMgJWQ6ICVzIixFLG0sQSl9fWVsc2UgQltFXT1mdW5jdGlvbigpe307cmV0dXJuIEJbRV19LFguaW5zcGVjdD1QLFAuY29sb3JzPXtib2xkOlsxLDIyXSxpdGFsaWM6WzMsMjNdLHVuZGVybGluZTpbNCwyNF0s''@;'; put 'put ''aW52ZXJzZTpbNywyN10sd2hpdGU6WzM3LDM5XSxncmV5Ols5MCwzOV0sYmxhY2s6WzMwLDM5XSxibHVlOlszNCwzOV0sY3lhbjpbMzYsMzldLGdyZWVuOlszMiwzOV0sbWFnZW50YTpbMzUsMzldLHJlZDpbMzEsMzldLHllbGxvdzpbMzMsMzldfSxQLnN0eWxlcz17c3BlY2lhbDoiY3lhbiIs''@;'; put 'put ''bnVtYmVyOiJ5ZWxsb3ciLGJvb2xlYW46InllbGxvdyIsdW5kZWZpbmVkOiJncmV5IixudWxsOiJib2xkIixzdHJpbmc6ImdyZWVuIixkYXRlOiJtYWdlbnRhIixyZWdleHA6InJlZCJ9LFguaXNBcnJheT1xLFguaXNCb29sZWFuPWVlLFguaXNOdWxsPUosWC5pc051bGxPclVuZGVmaW5lZD1m''@;'; put 'put ''dW5jdGlvbiBuZShFKXtyZXR1cm4gbnVsbD09RX0sWC5pc051bWJlcj1pZSxYLmlzU3RyaW5nPWxlLFguaXNTeW1ib2w9ZnVuY3Rpb24gbWUoRSl7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBFfSxYLmlzVW5kZWZpbmVkPV9lLFguaXNSZWdFeHA9VGUsWC5pc09iamVjdD1TZSxYLmlzRGF0ZT1q''@;'; put 'put ''ZSxYLmlzRXJyb3I9VixYLmlzRnVuY3Rpb249cCxYLmlzUHJpbWl0aXZlPWZ1bmN0aW9uIGIoRSl7cmV0dXJuIG51bGw9PT1FfHwiYm9vbGVhbiI9PXR5cGVvZiBFfHwibnVtYmVyIj09dHlwZW9mIEV8fCJzdHJpbmciPT10eXBlb2YgRXx8InN5bWJvbCI9PXR5cGVvZiBFfHx0eXBlb2YgRT4i''@;'; put 'put ''dSJ9LFguaXNCdWZmZXI9eSgyOTc0KTt2YXIgVD1bIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdO2Z1bmN0aW9uIGooRSxtKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEUs''@;'; put 'put ''bSl9WC5sb2c9ZnVuY3Rpb24oKXtfLmxvZygiJXMgLSAlcyIsZnVuY3Rpb24gSCgpe3ZhciBFPW5ldyBEYXRlLG09W0MoRS5nZXRIb3VycygpKSxDKEUuZ2V0TWludXRlcygpKSxDKEUuZ2V0U2Vjb25kcygpKV0uam9pbigiOiIpO3JldHVybltFLmdldERhdGUoKSxUW0UuZ2V0TW9udGgoKV0s''@;'; put 'put ''bV0uam9pbigiICIpfSgpLFguZm9ybWF0LmFwcGx5KFgsYXJndW1lbnRzKSl9LFguaW5oZXJpdHM9eSgxNzI1KSxYLl9leHRlbmQ9ZnVuY3Rpb24oRSxtKXtpZighbXx8IVNlKG0pKXJldHVybiBFO2Zvcih2YXIgQT1PYmplY3Qua2V5cyhtKSxhZT1BLmxlbmd0aDthZS0tOylFW0FbYWVdXT1t''@;'; put 'put ''W0FbYWVdXTtyZXR1cm4gRX19LDI1MjA6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg0MTU1KSxfPSJ3aW4zMiI9PT1JLnBsYXRmb3JtLGc9eSg4MDU5KTtmdW5jdGlvbiBCKFkscSl7Zm9yKHZhciBlZT1bXSxKPTA7SjxZLmxlbmd0aDtKKyspe3ZhciBuZT1ZW0pdOyFuZXx8Ii4i''@;'; put 'put ''PT09bmV8fCgiLi4iPT09bmU/ZWUubGVuZ3RoJiYiLi4iIT09ZWVbZWUubGVuZ3RoLTFdP2VlLnBvcCgpOnEmJmVlLnB1c2goIi4uIik6ZWUucHVzaChuZSkpfXJldHVybiBlZX1mdW5jdGlvbiB3KFkpe2Zvcih2YXIgcT1ZLmxlbmd0aC0xLGVlPTA7ZWU8PXEmJiFZW2VlXTtlZSsrKTtmb3Io''@;'; put 'put ''dmFyIEo9cTtKPj0wJiYhWVtKXTtKLS0pO3JldHVybiAwPT09ZWUmJko9PT1xP1k6ZWU+Sj9bXTpZLnNsaWNlKGVlLEorMSl9dmFyIFA9L14oW2EtekEtWl06fFtcXFwvXXsyfVteXFxcL10rW1xcXC9dK1teXFxcL10rKT8oW1xcXC9dKT8oW1xzXFNdKj8pJC8sRj0vXihbXHNcU10qPykoKD86''@;'; put 'put ''XC57MSwyfXxbXlxcXC9dKz98KShcLlteLlwvXFxdKnwpKSg/OltcXFwvXSopJC8sTz17fTtmdW5jdGlvbiB6KFkpe3ZhciBxPVAuZXhlYyhZKSxlZT0ocVsxXXx8IiIpKyhxWzJdfHwiIiksbmU9Ri5leGVjKHFbM118fCIiKTtyZXR1cm5bZWUsbmVbMV0sbmVbMl0sbmVbM11dfWZ1bmN0aW9u''@;'; put 'put ''IE4oWSl7dmFyIHE9UC5leGVjKFkpLGVlPXFbMV18fCIiLEo9ISFlZSYmIjoiIT09ZWVbMV07cmV0dXJue2RldmljZTplZSxpc1VuYzpKLGlzQWJzb2x1dGU6Snx8ISFxWzJdLHRhaWw6cVszXX19ZnVuY3Rpb24gTChZKXtyZXR1cm4iXFxcXCIrWS5yZXBsYWNlKC9eW1xcXC9dKy8sIiIpLnJl''@;'; put 'put ''cGxhY2UoL1tcXFwvXSsvZywiXFwiKX1PLnJlc29sdmU9ZnVuY3Rpb24oKXtmb3IodmFyIFk9IiIscT0iIixlZT0hMSxKPWFyZ3VtZW50cy5sZW5ndGgtMTtKPj0tMTtKLS0pe3ZhciBuZTtpZihKPj0wP25lPWFyZ3VtZW50c1tKXTpZPyghKG5lPUkuZW52WyI9IitZXSl8fG5lLnN1YnN0cigw''@;'; put 'put ''LDMpLnRvTG93ZXJDYXNlKCkhPT1ZLnRvTG93ZXJDYXNlKCkrIlxcIikmJihuZT1ZKyJcXCIpOm5lPUkuY3dkKCksIWcuaXNTdHJpbmcobmUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50cyB0byBwYXRoLnJlc29sdmUgbXVzdCBiZSBzdHJpbmdzIik7aWYobmUpe3ZhciBpZT1OKG5l''@;'; put 'put ''KSxsZT1pZS5kZXZpY2UsbWU9aWUuaXNVbmMsX2U9aWUuaXNBYnNvbHV0ZSxUZT1pZS50YWlsO2lmKCghbGV8fCFZfHxsZS50b0xvd2VyQ2FzZSgpPT09WS50b0xvd2VyQ2FzZSgpKSYmKFl8fChZPWxlKSxlZXx8KHE9VGUrIlxcIitxLGVlPV9lKSxZJiZlZSkpYnJlYWt9fXJldHVybiBtZSYm''@;'; put 'put ''KFk9TChZKSksWSsoZWU/IlxcIjoiIikrKHE9QihxLnNwbGl0KC9bXFxcL10rLyksIWVlKS5qb2luKCJcXCIpKXx8Ii4ifSxPLm5vcm1hbGl6ZT1mdW5jdGlvbihZKXt2YXIgcT1OKFkpLGVlPXEuZGV2aWNlLEo9cS5pc1VuYyxuZT1xLmlzQWJzb2x1dGUsaWU9cS50YWlsLGxlPS9bXFxcL10k''@;'; put 'put ''Ly50ZXN0KGllKTtyZXR1cm4hKGllPUIoaWUuc3BsaXQoL1tcXFwvXSsvKSwhbmUpLmpvaW4oIlxcIikpJiYhbmUmJihpZT0iLiIpLGllJiZsZSYmKGllKz0iXFwiKSxKJiYoZWU9TChlZSkpLGVlKyhuZT8iXFwiOiIiKStpZX0sTy5pc0Fic29sdXRlPWZ1bmN0aW9uKFkpe3JldHVybiBOKFkp''@;'; put 'put ''LmlzQWJzb2x1dGV9LE8uam9pbj1mdW5jdGlvbigpe2Zvcih2YXIgWT1bXSxxPTA7cTxhcmd1bWVudHMubGVuZ3RoO3ErKyl7dmFyIGVlPWFyZ3VtZW50c1txXTtpZighZy5pc1N0cmluZyhlZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnRzIHRvIHBhdGguam9pbiBtdXN0IGJlIHN0''@;'; put 'put ''cmluZ3MiKTtlZSYmWS5wdXNoKGVlKX12YXIgSj1ZLmpvaW4oIlxcIik7cmV0dXJuL15bXFxcL117Mn1bXlxcXC9dLy50ZXN0KFlbMF0pfHwoSj1KLnJlcGxhY2UoL15bXFxcL117Mix9LywiXFwiKSksTy5ub3JtYWxpemUoSil9LE8ucmVsYXRpdmU9ZnVuY3Rpb24oWSxxKXtZPU8ucmVzb2x2''@;'; put 'put ''ZShZKSxxPU8ucmVzb2x2ZShxKTtmb3IodmFyIGVlPVkudG9Mb3dlckNhc2UoKSxKPXEudG9Mb3dlckNhc2UoKSxuZT13KHEuc3BsaXQoIlxcIikpLGllPXcoZWUuc3BsaXQoIlxcIikpLGxlPXcoSi5zcGxpdCgiXFwiKSksbWU9TWF0aC5taW4oaWUubGVuZ3RoLGxlLmxlbmd0aCksX2U9bWUs''@;'; put 'put ''VGU9MDtUZTxtZTtUZSsrKWlmKGllW1RlXSE9PWxlW1RlXSl7X2U9VGU7YnJlYWt9aWYoMD09X2UpcmV0dXJuIHE7dmFyIFNlPVtdO2ZvcihUZT1fZTtUZTxpZS5sZW5ndGg7VGUrKylTZS5wdXNoKCIuLiIpO3JldHVybihTZT1TZS5jb25jYXQobmUuc2xpY2UoX2UpKSkuam9pbigiXFwiKX0s''@;'; put 'put ''Ty5fbWFrZUxvbmc9ZnVuY3Rpb24oWSl7aWYoIWcuaXNTdHJpbmcoWSkpcmV0dXJuIFk7aWYoIVkpcmV0dXJuIiI7dmFyIHE9Ty5yZXNvbHZlKFkpO3JldHVybi9eW2EtekEtWl1cOlxcLy50ZXN0KHEpPyJcXFxcP1xcIitxOi9eXFxcXFtePy5dLy50ZXN0KHEpPyJcXFxcP1xcVU5DXFwiK3Eu''@;'; put 'put ''c3Vic3RyaW5nKDIpOll9LE8uZGlybmFtZT1mdW5jdGlvbihZKXt2YXIgcT16KFkpLGVlPXFbMF0sSj1xWzFdO3JldHVybiBlZXx8Sj8oSiYmKEo9Si5zdWJzdHIoMCxKLmxlbmd0aC0xKSksZWUrSik6Ii4ifSxPLmJhc2VuYW1lPWZ1bmN0aW9uKFkscSl7dmFyIGVlPXooWSlbMl07cmV0dXJu''@;'; put 'put ''IHEmJmVlLnN1YnN0cigtMSpxLmxlbmd0aCk9PT1xJiYoZWU9ZWUuc3Vic3RyKDAsZWUubGVuZ3RoLXEubGVuZ3RoKSksZWV9LE8uZXh0bmFtZT1mdW5jdGlvbihZKXtyZXR1cm4geihZKVszXX0sTy5mb3JtYXQ9ZnVuY3Rpb24oWSl7aWYoIWcuaXNPYmplY3QoWSkpdGhyb3cgbmV3IFR5cGVF''@;'; put 'put ''cnJvcigiUGFyYW1ldGVyICdwYXRoT2JqZWN0JyBtdXN0IGJlIGFuIG9iamVjdCwgbm90ICIrdHlwZW9mIFkpO2lmKCFnLmlzU3RyaW5nKFkucm9vdHx8IiIpKXRocm93IG5ldyBUeXBlRXJyb3IoIidwYXRoT2JqZWN0LnJvb3QnIG11c3QgYmUgYSBzdHJpbmcgb3IgdW5kZWZpbmVkLCBub3Qg''@;'; put 'put ''Iit0eXBlb2YgWS5yb290KTt2YXIgZWU9WS5kaXIsSj1ZLmJhc2V8fCIiO3JldHVybiBlZT9lZVtlZS5sZW5ndGgtMV09PT1PLnNlcD9lZStKOmVlK08uc2VwK0o6Sn0sTy5wYXJzZT1mdW5jdGlvbihZKXtpZighZy5pc1N0cmluZyhZKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJQYXJhbWV0ZXIg''@;'; put 'put ''J3BhdGhTdHJpbmcnIG11c3QgYmUgYSBzdHJpbmcsIG5vdCAiK3R5cGVvZiBZKTt2YXIgcT16KFkpO2lmKCFxfHw0IT09cS5sZW5ndGgpdGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBwYXRoICciK1krIiciKTtyZXR1cm57cm9vdDpxWzBdLGRpcjpxWzBdK3FbMV0uc2xpY2UoMCwtMSks''@;'; put 'put ''YmFzZTpxWzJdLGV4dDpxWzNdLG5hbWU6cVsyXS5zbGljZSgwLHFbMl0ubGVuZ3RoLXFbM10ubGVuZ3RoKX19LE8uc2VwPSJcXCIsTy5kZWxpbWl0ZXI9IjsiO3ZhciBLPS9eKFwvP3wpKFtcc1xTXSo/KSgoPzpcLnsxLDJ9fFteXC9dKz98KShcLlteLlwvXSp8KSkoPzpbXC9dKikkLyxVPXt9''@;'; put 'put ''O2Z1bmN0aW9uIFcoWSl7cmV0dXJuIEsuZXhlYyhZKS5zbGljZSgxKX1VLnJlc29sdmU9ZnVuY3Rpb24oKXtmb3IodmFyIFk9IiIscT0hMSxlZT1hcmd1bWVudHMubGVuZ3RoLTE7ZWU+PS0xJiYhcTtlZS0tKXt2YXIgSj1lZT49MD9hcmd1bWVudHNbZWVdOkkuY3dkKCk7aWYoIWcuaXNTdHJp''@;'; put 'put ''bmcoSikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnRzIHRvIHBhdGgucmVzb2x2ZSBtdXN0IGJlIHN0cmluZ3MiKTtKJiYoWT1KKyIvIitZLHE9Ii8iPT09SlswXSl9cmV0dXJuKHE/Ii8iOiIiKSsoWT1CKFkuc3BsaXQoIi8iKSwhcSkuam9pbigiLyIpKXx8Ii4ifSxVLm5vcm1hbGl6''@;'; put 'put ''ZT1mdW5jdGlvbihZKXt2YXIgcT1VLmlzQWJzb2x1dGUoWSksZWU9WSYmIi8iPT09WVtZLmxlbmd0aC0xXTtyZXR1cm4hKFk9QihZLnNwbGl0KCIvIiksIXEpLmpvaW4oIi8iKSkmJiFxJiYoWT0iLiIpLFkmJmVlJiYoWSs9Ii8iKSwocT8iLyI6IiIpK1l9LFUuaXNBYnNvbHV0ZT1mdW5jdGlv''@;'; put 'put ''bihZKXtyZXR1cm4iLyI9PT1ZLmNoYXJBdCgwKX0sVS5qb2luPWZ1bmN0aW9uKCl7Zm9yKHZhciBZPSIiLHE9MDtxPGFyZ3VtZW50cy5sZW5ndGg7cSsrKXt2YXIgZWU9YXJndW1lbnRzW3FdO2lmKCFnLmlzU3RyaW5nKGVlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudHMgdG8gcGF0''@;'; put 'put ''aC5qb2luIG11c3QgYmUgc3RyaW5ncyIpO2VlJiYoWSs9WT8iLyIrZWU6ZWUpfXJldHVybiBVLm5vcm1hbGl6ZShZKX0sVS5yZWxhdGl2ZT1mdW5jdGlvbihZLHEpe1k9VS5yZXNvbHZlKFkpLnN1YnN0cigxKSxxPVUucmVzb2x2ZShxKS5zdWJzdHIoMSk7Zm9yKHZhciBlZT13KFkuc3BsaXQo''@;'; put 'put ''Ii8iKSksSj13KHEuc3BsaXQoIi8iKSksbmU9TWF0aC5taW4oZWUubGVuZ3RoLEoubGVuZ3RoKSxpZT1uZSxsZT0wO2xlPG5lO2xlKyspaWYoZWVbbGVdIT09SltsZV0pe2llPWxlO2JyZWFrfXZhciBtZT1bXTtmb3IobGU9aWU7bGU8ZWUubGVuZ3RoO2xlKyspbWUucHVzaCgiLi4iKTtyZXR1''@;'; put 'put ''cm4obWU9bWUuY29uY2F0KEouc2xpY2UoaWUpKSkuam9pbigiLyIpfSxVLl9tYWtlTG9uZz1mdW5jdGlvbihZKXtyZXR1cm4gWX0sVS5kaXJuYW1lPWZ1bmN0aW9uKFkpe3ZhciBxPVcoWSksZWU9cVswXSxKPXFbMV07cmV0dXJuIGVlfHxKPyhKJiYoSj1KLnN1YnN0cigwLEoubGVuZ3RoLTEp''@;'; put 'put ''KSxlZStKKToiLiJ9LFUuYmFzZW5hbWU9ZnVuY3Rpb24oWSxxKXt2YXIgZWU9VyhZKVsyXTtyZXR1cm4gcSYmZWUuc3Vic3RyKC0xKnEubGVuZ3RoKT09PXEmJihlZT1lZS5zdWJzdHIoMCxlZS5sZW5ndGgtcS5sZW5ndGgpKSxlZX0sVS5leHRuYW1lPWZ1bmN0aW9uKFkpe3JldHVybiBXKFkp''@;'; put 'put ''WzNdfSxVLmZvcm1hdD1mdW5jdGlvbihZKXtpZighZy5pc09iamVjdChZKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJQYXJhbWV0ZXIgJ3BhdGhPYmplY3QnIG11c3QgYmUgYW4gb2JqZWN0LCBub3QgIit0eXBlb2YgWSk7aWYoIWcuaXNTdHJpbmcoWS5yb290fHwiIikpdGhyb3cgbmV3IFR5cGVF''@;'; put 'put ''cnJvcigiJ3BhdGhPYmplY3Qucm9vdCcgbXVzdCBiZSBhIHN0cmluZyBvciB1bmRlZmluZWQsIG5vdCAiK3R5cGVvZiBZLnJvb3QpO3JldHVybihZLmRpcj9ZLmRpcitVLnNlcDoiIikrKFkuYmFzZXx8IiIpfSxVLnBhcnNlPWZ1bmN0aW9uKFkpe2lmKCFnLmlzU3RyaW5nKFkpKXRocm93IG5l''@;'; put 'put ''dyBUeXBlRXJyb3IoIlBhcmFtZXRlciAncGF0aFN0cmluZycgbXVzdCBiZSBhIHN0cmluZywgbm90ICIrdHlwZW9mIFkpO3ZhciBxPVcoWSk7aWYoIXF8fDQhPT1xLmxlbmd0aCl0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIHBhdGggJyIrWSsiJyIpO3JldHVybiBxWzFdPXFbMV18fCIi''@;'; put 'put ''LHFbMl09cVsyXXx8IiIscVszXT1xWzNdfHwiIix7cm9vdDpxWzBdLGRpcjpxWzBdK3FbMV0uc2xpY2UoMCwtMSksYmFzZTpxWzJdLGV4dDpxWzNdLG5hbWU6cVsyXS5zbGljZSgwLHFbMl0ubGVuZ3RoLXFbM10ubGVuZ3RoKX19LFUuc2VwPSIvIixVLmRlbGltaXRlcj0iOiIsdWUuZXhwb3J0''@;'; put 'put ''cz1fP086VSx1ZS5leHBvcnRzLnBvc2l4PVUsdWUuZXhwb3J0cy53aW4zMj1PfSw1NjMyOih1ZSxYLHkpPT57WC5wYmtkZjI9eSg4NjM4KSxYLnBia2RmMlN5bmM9eSgxMjU3KX0sODYzODoodWUsWCx5KT0+e3ZhciBQLEwsST15KDk1MDkpLkJ1ZmZlcixfPXkoNzM1NyksZz15KDIzNjgpLEI9''@;'; put 'put ''eSgxMjU3KSx3PXkoNzc3NyksRj15LmcuY3J5cHRvJiZ5LmcuY3J5cHRvLnN1YnRsZSxPPXtzaGE6IlNIQS0xIiwic2hhLTEiOiJTSEEtMSIsc2hhMToiU0hBLTEiLHNoYTI1NjoiU0hBLTI1NiIsInNoYS0yNTYiOiJTSEEtMjU2IixzaGEzODQ6IlNIQS0zODQiLCJzaGEtMzg0IjoiU0hBLTM4''@;'; put 'put ''NCIsInNoYS01MTIiOiJTSEEtNTEyIixzaGE1MTI6IlNIQS01MTIifSx6PVtdO2Z1bmN0aW9uIEsoKXtyZXR1cm4gTHx8KEw9eS5nLnByb2Nlc3MmJnkuZy5wcm9jZXNzLm5leHRUaWNrP3kuZy5wcm9jZXNzLm5leHRUaWNrOnkuZy5xdWV1ZU1pY3JvdGFzaz95LmcucXVldWVNaWNyb3Rhc2s6''@;'; put 'put ''eS5nLnNldEltbWVkaWF0ZT95Lmcuc2V0SW1tZWRpYXRlOnkuZy5zZXRUaW1lb3V0KX1mdW5jdGlvbiBVKFkscSxlZSxKLG5lKXtyZXR1cm4gRi5pbXBvcnRLZXkoInJhdyIsWSx7bmFtZToiUEJLREYyIn0sITEsWyJkZXJpdmVCaXRzIl0pLnRoZW4oZnVuY3Rpb24oaWUpe3JldHVybiBGLmRl''@;'; put 'put ''cml2ZUJpdHMoe25hbWU6IlBCS0RGMiIsc2FsdDpxLGl0ZXJhdGlvbnM6ZWUsaGFzaDp7bmFtZTpuZX19LGllLEo8PDMpfSkudGhlbihmdW5jdGlvbihpZSl7cmV0dXJuIEkuZnJvbShpZSl9KX11ZS5leHBvcnRzPWZ1bmN0aW9uKFkscSxlZSxKLG5lLGllKXsiZnVuY3Rpb24iPT10eXBlb2Yg''@;'; put 'put ''bmUmJihpZT1uZSxuZT12b2lkIDApO3ZhciBsZT1PWyhuZT1uZXx8InNoYTEiKS50b0xvd2VyQ2FzZSgpXTtpZihsZSYmImZ1bmN0aW9uIj09dHlwZW9mIHkuZy5Qcm9taXNlKXtpZihfKGVlLEopLFk9dyhZLGcsIlBhc3N3b3JkIikscT13KHEsZywiU2FsdCIpLCJmdW5jdGlvbiIhPXR5cGVv''@;'; put 'put ''ZiBpZSl0aHJvdyBuZXcgRXJyb3IoIk5vIGNhbGxiYWNrIHByb3ZpZGVkIHRvIHBia2RmMiIpOyFmdW5jdGlvbiBXKFkscSl7WS50aGVuKGZ1bmN0aW9uKGVlKXtLKCkoZnVuY3Rpb24oKXtxKG51bGwsZWUpfSl9LGZ1bmN0aW9uKGVlKXtLKCkoZnVuY3Rpb24oKXtxKGVlKX0pfSl9KGZ1bmN0''@;'; put 'put ''aW9uIE4oWSl7aWYoeS5nLnByb2Nlc3MmJiF5LmcucHJvY2Vzcy5icm93c2VyfHwhRnx8IUYuaW1wb3J0S2V5fHwhRi5kZXJpdmVCaXRzKXJldHVybiBQcm9taXNlLnJlc29sdmUoITEpO2lmKHZvaWQgMCE9PXpbWV0pcmV0dXJuIHpbWV07dmFyIHE9VShQPVB8fEkuYWxsb2MoOCksUCwxMCwx''@;'; put 'put ''MjgsWSkudGhlbihmdW5jdGlvbigpe3JldHVybiEwfSkuY2F0Y2goZnVuY3Rpb24oKXtyZXR1cm4hMX0pO3JldHVybiB6W1ldPXEscX0obGUpLnRoZW4oZnVuY3Rpb24obWUpe3JldHVybiBtZT9VKFkscSxlZSxKLGxlKTpCKFkscSxlZSxKLG5lKX0pLGllKX1lbHNlIEsoKShmdW5jdGlvbigp''@;'; put 'put ''e3ZhciBtZTt0cnl7bWU9QihZLHEsZWUsSixuZSl9Y2F0Y2goX2Upe3JldHVybiBpZShfZSl9aWUobnVsbCxtZSl9KX19LDIzNjg6KHVlLFgseSk9Pnt2YXIgXyxJPXkoNDE1NSk7Xz15LmcucHJvY2VzcyYmeS5nLnByb2Nlc3MuYnJvd3Nlcj8idXRmLTgiOnkuZy5wcm9jZXNzJiZ5LmcucHJv''@;'; put 'put ''Y2Vzcy52ZXJzaW9uP3BhcnNlSW50KEkudmVyc2lvbi5zcGxpdCgiLiIpWzBdLnNsaWNlKDEpLDEwKT49Nj8idXRmLTgiOiJiaW5hcnkiOiJ1dGYtOCIsdWUuZXhwb3J0cz1ffSw3MzU3OnVlPT57dmFyIFg9TWF0aC5wb3coMiwzMCktMTt1ZS5leHBvcnRzPWZ1bmN0aW9uKHksSSl7aWYoIm51''@;'; put 'put ''bWJlciIhPXR5cGVvZiB5KXRocm93IG5ldyBUeXBlRXJyb3IoIkl0ZXJhdGlvbnMgbm90IGEgbnVtYmVyIik7aWYoeTwwKXRocm93IG5ldyBUeXBlRXJyb3IoIkJhZCBpdGVyYXRpb25zIik7aWYoIm51bWJlciIhPXR5cGVvZiBJKXRocm93IG5ldyBUeXBlRXJyb3IoIktleSBsZW5ndGggbm90''@;'; put 'put ''IGEgbnVtYmVyIik7aWYoSTwwfHxJPlh8fEkhPUkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQmFkIGtleSBsZW5ndGgiKX19LDEyNTc6KHVlLFgseSk9Pnt2YXIgST15KDgwMjgpLF89eSg5Nzg1KSxnPXkoOTA3MiksQj15KDk1MDkpLkJ1ZmZlcix3PXkoNzM1NyksUD15KDIzNjgpLEY9eSg3Nzc3''@;'; put 'put ''KSxPPUIuYWxsb2MoMTI4KSx6PXttZDU6MTYsc2hhMToyMCxzaGEyMjQ6Mjgsc2hhMjU2OjMyLHNoYTM4NDo0OCxzaGE1MTI6NjQscm1kMTYwOjIwLHJpcGVtZDE2MDoyMH07ZnVuY3Rpb24gTihVLFcsWSl7dmFyIHE9ZnVuY3Rpb24gTChVKXtyZXR1cm4icm1kMTYwIj09PVV8fCJyaXBlbWQx''@;'; put 'put ''NjAiPT09VT9mdW5jdGlvbiBZKHEpe3JldHVybihuZXcgXykudXBkYXRlKHEpLmRpZ2VzdCgpfToibWQ1Ij09PVU/STpmdW5jdGlvbiBXKHEpe3JldHVybiBnKFUpLnVwZGF0ZShxKS5kaWdlc3QoKX19KFUpLGVlPSJzaGE1MTIiPT09VXx8InNoYTM4NCI9PT1VPzEyODo2NDtXLmxlbmd0aD5l''@;'; put 'put ''ZT9XPXEoVyk6Vy5sZW5ndGg8ZWUmJihXPUIuY29uY2F0KFtXLE9dLGVlKSk7Zm9yKHZhciBKPUIuYWxsb2NVbnNhZmUoZWUreltVXSksbmU9Qi5hbGxvY1Vuc2FmZShlZSt6W1VdKSxpZT0wO2llPGVlO2llKyspSltpZV09NTReV1tpZV0sbmVbaWVdPTkyXldbaWVdO3ZhciBsZT1CLmFsbG9j''@;'; put 'put ''VW5zYWZlKGVlK1krNCk7Si5jb3B5KGxlLDAsMCxlZSksdGhpcy5pcGFkMT1sZSx0aGlzLmlwYWQyPUosdGhpcy5vcGFkPW5lLHRoaXMuYWxnPVUsdGhpcy5ibG9ja3NpemU9ZWUsdGhpcy5oYXNoPXEsdGhpcy5zaXplPXpbVV19Ti5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKFUsVyl7cmV0dXJu''@;'; put 'put ''IFUuY29weShXLHRoaXMuYmxvY2tzaXplKSx0aGlzLmhhc2goVykuY29weSh0aGlzLm9wYWQsdGhpcy5ibG9ja3NpemUpLHRoaXMuaGFzaCh0aGlzLm9wYWQpfSx1ZS5leHBvcnRzPWZ1bmN0aW9uIEsoVSxXLFkscSxlZSl7dyhZLHEpO3ZhciBKPW5ldyBOKGVlPWVlfHwic2hhMSIsVT1GKFUs''@;'; put 'put ''UCwiUGFzc3dvcmQiKSwoVz1GKFcsUCwiU2FsdCIpKS5sZW5ndGgpLG5lPUIuYWxsb2NVbnNhZmUocSksaWU9Qi5hbGxvY1Vuc2FmZShXLmxlbmd0aCs0KTtXLmNvcHkoaWUsMCwwLFcubGVuZ3RoKTtmb3IodmFyIGxlPTAsbWU9eltlZV0sX2U9TWF0aC5jZWlsKHEvbWUpLFRlPTE7VGU8PV9l''@;'; put 'put ''O1RlKyspe2llLndyaXRlVUludDMyQkUoVGUsVy5sZW5ndGgpO2Zvcih2YXIgU2U9Si5ydW4oaWUsSi5pcGFkMSksamU9U2UsVj0xO1Y8WTtWKyspe2plPUoucnVuKGplLEouaXBhZDIpO2Zvcih2YXIgcD0wO3A8bWU7cCsrKVNlW3BdXj1qZVtwXX1TZS5jb3B5KG5lLGxlKSxsZSs9bWV9cmV0''@;'; put 'put ''dXJuIG5lfX0sNzc3NzoodWUsWCx5KT0+e3ZhciBJPXkoOTUwOSkuQnVmZmVyO3VlLmV4cG9ydHM9ZnVuY3Rpb24oXyxnLEIpe2lmKEkuaXNCdWZmZXIoXykpcmV0dXJuIF87aWYoInN0cmluZyI9PXR5cGVvZiBfKXJldHVybiBJLmZyb20oXyxnKTtpZihBcnJheUJ1ZmZlci5pc1ZpZXcoXykp''@;'; put 'put ''cmV0dXJuIEkuZnJvbShfLmJ1ZmZlcik7dGhyb3cgbmV3IFR5cGVFcnJvcihCKyIgbXVzdCBiZSBhIHN0cmluZywgYSBCdWZmZXIsIGEgdHlwZWQgYXJyYXkgb3IgYSBEYXRhVmlldyIpfX0sOTkwODp1ZT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPVsiRmxvYXQxNkFycmF5IiwiRmxvYXQz''@;'; put 'put ''MkFycmF5IiwiRmxvYXQ2NEFycmF5IiwiSW50OEFycmF5IiwiSW50MTZBcnJheSIsIkludDMyQXJyYXkiLCJVaW50OEFycmF5IiwiVWludDhDbGFtcGVkQXJyYXkiLCJVaW50MTZBcnJheSIsIlVpbnQzMkFycmF5IiwiQmlnSW50NjRBcnJheSIsIkJpZ1VpbnQ2NEFycmF5Il19LDgyMTI6KHVl''@;'; put 'put ''LFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg0MTU1KTt1ZS5leHBvcnRzPXR5cGVvZiBJPiJ1Inx8IUkudmVyc2lvbnx8MD09PUkudmVyc2lvbi5pbmRleE9mKCJ2MC4iKXx8MD09PUkudmVyc2lvbi5pbmRleE9mKCJ2MS4iKSYmMCE9PUkudmVyc2lvbi5pbmRleE9mKCJ2MS44LiIpP3tu''@;'; put 'put ''ZXh0VGljazpmdW5jdGlvbiBfKGcsQix3LFApe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBnKXRocm93IG5ldyBUeXBlRXJyb3IoJyJjYWxsYmFjayIgYXJndW1lbnQgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7dmFyIE8seixGPWFyZ3VtZW50cy5sZW5ndGg7c3dpdGNoKEYpe2Nhc2UgMDpjYXNlIDE6''@;'; put 'put ''cmV0dXJuIEkubmV4dFRpY2soZyk7Y2FzZSAyOnJldHVybiBJLm5leHRUaWNrKGZ1bmN0aW9uKCl7Zy5jYWxsKG51bGwsQil9KTtjYXNlIDM6cmV0dXJuIEkubmV4dFRpY2soZnVuY3Rpb24oKXtnLmNhbGwobnVsbCxCLHcpfSk7Y2FzZSA0OnJldHVybiBJLm5leHRUaWNrKGZ1bmN0aW9uKCl7''@;'; put 'put ''Zy5jYWxsKG51bGwsQix3LFApfSk7ZGVmYXVsdDpmb3IoTz1uZXcgQXJyYXkoRi0xKSx6PTA7ejxPLmxlbmd0aDspT1t6KytdPWFyZ3VtZW50c1t6XTtyZXR1cm4gSS5uZXh0VGljayhmdW5jdGlvbigpe2cuYXBwbHkobnVsbCxPKX0pfX19Okl9LDQxNTU6dWU9Pnt2YXIgeSxJLFg9dWUuZXhw''@;'; put 'put ''b3J0cz17fTtmdW5jdGlvbiBfKCl7dGhyb3cgbmV3IEVycm9yKCJzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkIil9ZnVuY3Rpb24gZygpe3Rocm93IG5ldyBFcnJvcigiY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkIil9ZnVuY3Rpb24gQihXKXtpZih5PT09c2V0VGlt''@;'; put 'put ''ZW91dClyZXR1cm4gc2V0VGltZW91dChXLDApO2lmKCh5PT09X3x8IXkpJiZzZXRUaW1lb3V0KXJldHVybiB5PXNldFRpbWVvdXQsc2V0VGltZW91dChXLDApO3RyeXtyZXR1cm4geShXLDApfWNhdGNoe3RyeXtyZXR1cm4geS5jYWxsKG51bGwsVywwKX1jYXRjaHtyZXR1cm4geS5jYWxsKHRo''@;'; put 'put ''aXMsVywwKX19fSFmdW5jdGlvbigpe3RyeXt5PSJmdW5jdGlvbiI9PXR5cGVvZiBzZXRUaW1lb3V0P3NldFRpbWVvdXQ6X31jYXRjaHt5PV99dHJ5e0k9ImZ1bmN0aW9uIj09dHlwZW9mIGNsZWFyVGltZW91dD9jbGVhclRpbWVvdXQ6Z31jYXRjaHtJPWd9fSgpO3ZhciBPLFA9W10sRj0hMSx6''@;'; put 'put ''PS0xO2Z1bmN0aW9uIE4oKXshRnx8IU98fChGPSExLE8ubGVuZ3RoP1A9Ty5jb25jYXQoUCk6ej0tMSxQLmxlbmd0aCYmTCgpKX1mdW5jdGlvbiBMKCl7aWYoIUYpe3ZhciBXPUIoTik7Rj0hMDtmb3IodmFyIFk9UC5sZW5ndGg7WTspe2ZvcihPPVAsUD1bXTsrK3o8WTspTyYmT1t6XS5ydW4o''@;'; put 'put ''KTt6PS0xLFk9UC5sZW5ndGh9Tz1udWxsLEY9ITEsZnVuY3Rpb24gdyhXKXtpZihJPT09Y2xlYXJUaW1lb3V0KXJldHVybiBjbGVhclRpbWVvdXQoVyk7aWYoKEk9PT1nfHwhSSkmJmNsZWFyVGltZW91dClyZXR1cm4gST1jbGVhclRpbWVvdXQsY2xlYXJUaW1lb3V0KFcpO3RyeXtyZXR1cm4g''@;'; put 'put ''SShXKX1jYXRjaHt0cnl7cmV0dXJuIEkuY2FsbChudWxsLFcpfWNhdGNoe3JldHVybiBJLmNhbGwodGhpcyxXKX19fShXKX19ZnVuY3Rpb24gSyhXLFkpe3RoaXMuZnVuPVcsdGhpcy5hcnJheT1ZfWZ1bmN0aW9uIFUoKXt9WC5uZXh0VGljaz1mdW5jdGlvbihXKXt2YXIgWT1uZXcgQXJyYXko''@;'; put 'put ''YXJndW1lbnRzLmxlbmd0aC0xKTtpZihhcmd1bWVudHMubGVuZ3RoPjEpZm9yKHZhciBxPTE7cTxhcmd1bWVudHMubGVuZ3RoO3ErKylZW3EtMV09YXJndW1lbnRzW3FdO1AucHVzaChuZXcgSyhXLFkpKSwxPT09UC5sZW5ndGgmJiFGJiZCKEwpfSxLLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24o''@;'; put 'put ''KXt0aGlzLmZ1bi5hcHBseShudWxsLHRoaXMuYXJyYXkpfSxYLnRpdGxlPSJicm93c2VyIixYLmJyb3dzZXI9ITAsWC5lbnY9e30sWC5hcmd2PVtdLFgudmVyc2lvbj0iIixYLnZlcnNpb25zPXt9LFgub249VSxYLmFkZExpc3RlbmVyPVUsWC5vbmNlPVUsWC5vZmY9VSxYLnJlbW92ZUxpc3Rl''@;'; put 'put ''bmVyPVUsWC5yZW1vdmVBbGxMaXN0ZW5lcnM9VSxYLmVtaXQ9VSxYLnByZXBlbmRMaXN0ZW5lcj1VLFgucHJlcGVuZE9uY2VMaXN0ZW5lcj1VLFgubGlzdGVuZXJzPWZ1bmN0aW9uKFcpe3JldHVybltdfSxYLmJpbmRpbmc9ZnVuY3Rpb24oVyl7dGhyb3cgbmV3IEVycm9yKCJwcm9jZXNzLmJp''@;'; put 'put ''bmRpbmcgaXMgbm90IHN1cHBvcnRlZCIpfSxYLmN3ZD1mdW5jdGlvbigpe3JldHVybiIvIn0sWC5jaGRpcj1mdW5jdGlvbihXKXt0aHJvdyBuZXcgRXJyb3IoInByb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCIpfSxYLnVtYXNrPWZ1bmN0aW9uKCl7cmV0dXJuIDB9fSw3OTAwOih1ZSxY''@;'; put 'put ''LHkpPT57WC5wdWJsaWNFbmNyeXB0PXkoNjU1OSksWC5wcml2YXRlRGVjcnlwdD15KDYxMzgpLFgucHJpdmF0ZUVuY3J5cHQ9ZnVuY3Rpb24oXyxnKXtyZXR1cm4gWC5wdWJsaWNFbmNyeXB0KF8sZywhMCl9LFgucHVibGljRGVjcnlwdD1mdW5jdGlvbihfLGcpe3JldHVybiBYLnByaXZhdGVE''@;'; put 'put ''ZWNyeXB0KF8sZywhMCl9fSw5MTk5Oih1ZSxYLHkpPT57dmFyIEk9eSgzNDgyKSxfPXkoOTUwOSkuQnVmZmVyO2Z1bmN0aW9uIGcoQil7dmFyIHc9Xy5hbGxvY1Vuc2FmZSg0KTtyZXR1cm4gdy53cml0ZVVJbnQzMkJFKEIsMCksd311ZS5leHBvcnRzPWZ1bmN0aW9uKEIsdyl7Zm9yKHZhciBP''@;'; put 'put ''LFA9Xy5hbGxvYygwKSxGPTA7UC5sZW5ndGg8dzspTz1nKEYrKyksUD1fLmNvbmNhdChbUCxJKCJzaGExIikudXBkYXRlKEIpLnVwZGF0ZShPKS5kaWdlc3QoKV0pO3JldHVybiBQLnNsaWNlKDAsdyl9fSwyMTQ0OmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEksXyl7InVzZSBzdHJpY3Qi''@;'; put 'put ''O2Z1bmN0aW9uIGcoVixwKXtpZighVil0aHJvdyBuZXcgRXJyb3IocHx8IkFzc2VydGlvbiBmYWlsZWQiKX1mdW5jdGlvbiBCKFYscCl7Vi5zdXBlcl89cDt2YXIgYj1mdW5jdGlvbigpe307Yi5wcm90b3R5cGU9cC5wcm90b3R5cGUsVi5wcm90b3R5cGU9bmV3IGIsVi5wcm90b3R5cGUuY29u''@;'; put 'put ''c3RydWN0b3I9Vn1mdW5jdGlvbiB3KFYscCxiKXtpZih3LmlzQk4oVikpcmV0dXJuIFY7dGhpcy5uZWdhdGl2ZT0wLHRoaXMud29yZHM9bnVsbCx0aGlzLmxlbmd0aD0wLHRoaXMucmVkPW51bGwsbnVsbCE9PVYmJigoImxlIj09PXB8fCJiZSI9PT1wKSYmKGI9cCxwPTEwKSx0aGlzLl9pbml0''@;'; put 'put ''KFZ8fDAscHx8MTAsYnx8ImJlIikpfXZhciBQOyJvYmplY3QiPT10eXBlb2YgST9JLmV4cG9ydHM9dzpfLkJOPXcsdy5CTj13LHcud29yZFNpemU9MjY7dHJ5e1A9dHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiB3aW5kb3cuQnVmZmVyPCJ1Ij93aW5kb3cuQnVmZmVyOnkoNzEwOCkuQnVmZmVy''@;'; put 'put ''fWNhdGNoe31mdW5jdGlvbiBGKFYscCl7dmFyIGI9Vi5jaGFyQ29kZUF0KHApO3JldHVybiBiPj02NSYmYjw9NzA/Yi01NTpiPj05NyYmYjw9MTAyP2ItODc6Yi00OCYxNX1mdW5jdGlvbiBPKFYscCxiKXt2YXIgeD1GKFYsYik7cmV0dXJuIGItMT49cCYmKHh8PUYoVixiLTEpPDw0KSx4fWZ1''@;'; put 'put ''bmN0aW9uIHooVixwLGIseCl7Zm9yKHZhciBDPTAsVD1NYXRoLm1pbihWLmxlbmd0aCxiKSxIPXA7SDxUO0grKyl7dmFyIGo9Vi5jaGFyQ29kZUF0KEgpLTQ4O0MqPXgsQys9aj49NDk/ai00OSsxMDpqPj0xNz9qLTE3KzEwOmp9cmV0dXJuIEN9dy5pc0JOPWZ1bmN0aW9uKHApe3JldHVybiBw''@;'; put 'put ''IGluc3RhbmNlb2Ygd3x8bnVsbCE9PXAmJiJvYmplY3QiPT10eXBlb2YgcCYmcC5jb25zdHJ1Y3Rvci53b3JkU2l6ZT09PXcud29yZFNpemUmJkFycmF5LmlzQXJyYXkocC53b3Jkcyl9LHcubWF4PWZ1bmN0aW9uKHAsYil7cmV0dXJuIHAuY21wKGIpPjA/cDpifSx3Lm1pbj1mdW5jdGlvbihw''@;'; put 'put ''LGIpe3JldHVybiBwLmNtcChiKTwwP3A6Yn0sdy5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24ocCxiLHgpe2lmKCJudW1iZXIiPT10eXBlb2YgcClyZXR1cm4gdGhpcy5faW5pdE51bWJlcihwLGIseCk7aWYoIm9iamVjdCI9PXR5cGVvZiBwKXJldHVybiB0aGlzLl9pbml0QXJyYXkocCxiLHgp''@;'; put 'put ''OyJoZXgiPT09YiYmKGI9MTYpLGcoYj09PSgwfGIpJiZiPj0yJiZiPD0zNik7dmFyIEM9MDsiLSI9PT0ocD1wLnRvU3RyaW5nKCkucmVwbGFjZSgvXHMrL2csIiIpKVswXSYmKEMrKyx0aGlzLm5lZ2F0aXZlPTEpLEM8cC5sZW5ndGgmJigxNj09PWI/dGhpcy5fcGFyc2VIZXgocCxDLHgpOih0''@;'; put 'put ''aGlzLl9wYXJzZUJhc2UocCxiLEMpLCJsZSI9PT14JiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksYix4KSkpfSx3LnByb3RvdHlwZS5faW5pdE51bWJlcj1mdW5jdGlvbihwLGIseCl7cDwwJiYodGhpcy5uZWdhdGl2ZT0xLHA9LXApLHA8NjcxMDg4NjQ/KHRoaXMud29yZHM9WzY3''@;'; put 'put ''MTA4ODYzJnBdLHRoaXMubGVuZ3RoPTEpOnA8NDUwMzU5OTYyNzM3MDQ5Nj8odGhpcy53b3Jkcz1bNjcxMDg4NjMmcCxwLzY3MTA4ODY0JjY3MTA4ODYzXSx0aGlzLmxlbmd0aD0yKTooZyhwPDkwMDcxOTkyNTQ3NDA5OTIpLHRoaXMud29yZHM9WzY3MTA4ODYzJnAscC82NzEwODg2NCY2NzEw''@;'; put 'put ''ODg2MywxXSx0aGlzLmxlbmd0aD0zKSwibGUiPT09eCYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLGIseCl9LHcucHJvdG90eXBlLl9pbml0QXJyYXk9ZnVuY3Rpb24ocCxiLHgpe2lmKGcoIm51bWJlciI9PXR5cGVvZiBwLmxlbmd0aCkscC5sZW5ndGg8PTApcmV0dXJuIHRoaXMu''@;'; put 'put ''d29yZHM9WzBdLHRoaXMubGVuZ3RoPTEsdGhpczt0aGlzLmxlbmd0aD1NYXRoLmNlaWwocC5sZW5ndGgvMyksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgQz0wO0M8dGhpcy5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109MDt2YXIgVCxILGo9MDtpZigiYmUiPT09''@;'; put 'put ''eClmb3IoQz1wLmxlbmd0aC0xLFQ9MDtDPj0wO0MtPTMpdGhpcy53b3Jkc1tUXXw9KEg9cFtDXXxwW0MtMV08PDh8cFtDLTJdPDwxNik8PGomNjcxMDg4NjMsdGhpcy53b3Jkc1tUKzFdPUg+Pj4yNi1qJjY3MTA4ODYzLChqKz0yNCk+PTI2JiYoai09MjYsVCsrKTtlbHNlIGlmKCJsZSI9PT14''@;'; put 'put ''KWZvcihDPTAsVD0wO0M8cC5sZW5ndGg7Qys9Myl0aGlzLndvcmRzW1RdfD0oSD1wW0NdfHBbQysxXTw8OHxwW0MrMl08PDE2KTw8aiY2NzEwODg2Myx0aGlzLndvcmRzW1QrMV09SD4+PjI2LWomNjcxMDg4NjMsKGorPTI0KT49MjYmJihqLT0yNixUKyspO3JldHVybiB0aGlzLnN0cmlwKCl9''@;'; put 'put ''LHcucHJvdG90eXBlLl9wYXJzZUhleD1mdW5jdGlvbihwLGIseCl7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKChwLmxlbmd0aC1iKS82KSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT0wO3ZhciBqLFQ9''@;'; put 'put ''MCxIPTA7aWYoImJlIj09PXgpZm9yKEM9cC5sZW5ndGgtMTtDPj1iO0MtPTIpaj1PKHAsYixDKTw8VCx0aGlzLndvcmRzW0hdfD02NzEwODg2MyZqLFQ+PTE4PyhULT0xOCx0aGlzLndvcmRzW0grPTFdfD1qPj4+MjYpOlQrPTg7ZWxzZSBmb3IoQz0ocC5sZW5ndGgtYiklMj09MD9iKzE6YjtD''@;'; put 'put ''PHAubGVuZ3RoO0MrPTIpaj1PKHAsYixDKTw8VCx0aGlzLndvcmRzW0hdfD02NzEwODg2MyZqLFQ+PTE4PyhULT0xOCx0aGlzLndvcmRzW0grPTFdfD1qPj4+MjYpOlQrPTg7dGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5fcGFyc2VCYXNlPWZ1bmN0aW9uKHAsYix4KXt0aGlzLndvcmRzPVsw''@;'; put 'put ''XSx0aGlzLmxlbmd0aD0xO2Zvcih2YXIgQz0wLFQ9MTtUPD02NzEwODg2MztUKj1iKUMrKztDLS0sVD1UL2J8MDtmb3IodmFyIEg9cC5sZW5ndGgteCxqPUglQyxFPU1hdGgubWluKEgsSC1qKSt4LG09MCxBPXg7QTxFO0ErPUMpbT16KHAsQSxBK0MsYiksdGhpcy5pbXVsbihUKSx0aGlzLndv''@;'; put 'put ''cmRzWzBdK208NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9bTp0aGlzLl9pYWRkbihtKTtpZigwIT09ail7dmFyIGFlPTE7Zm9yKG09eihwLEEscC5sZW5ndGgsYiksQT0wO0E8ajtBKyspYWUqPWI7dGhpcy5pbXVsbihhZSksdGhpcy53b3Jkc1swXSttPDY3MTA4ODY0P3RoaXMud29yZHNbMF0r''@;'; put 'put ''PW06dGhpcy5faWFkZG4obSl9dGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKHApe3Aud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIGI9MDtiPHRoaXMubGVuZ3RoO2IrKylwLndvcmRzW2JdPXRoaXMud29yZHNbYl07cC5sZW5ndGg9dGhpcy5sZW5n''@;'; put 'put ''dGgscC5uZWdhdGl2ZT10aGlzLm5lZ2F0aXZlLHAucmVkPXRoaXMucmVkfSx3LnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciBwPW5ldyB3KG51bGwpO3JldHVybiB0aGlzLmNvcHkocCkscH0sdy5wcm90b3R5cGUuX2V4cGFuZD1mdW5jdGlvbihwKXtmb3IoO3RoaXMubGVuZ3RoPHA7''@;'; put 'put ''KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtyZXR1cm4gdGhpc30sdy5wcm90b3R5cGUuc3RyaXA9ZnVuY3Rpb24oKXtmb3IoO3RoaXMubGVuZ3RoPjEmJjA9PT10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdOyl0aGlzLmxlbmd0aC0tO3JldHVybiB0aGlzLl9ub3JtU2lnbigpfSx3LnBy''@;'; put 'put ''b3RvdHlwZS5fbm9ybVNpZ249ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXSYmKHRoaXMubmVnYXRpdmU9MCksdGhpc30sdy5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybih0aGlzLnJlZD8iPEJOLVI6ICI6IjxCTjogIikrdGhp''@;'; put 'put ''cy50b1N0cmluZygxNikrIj4ifTt2YXIgTj1bIiIsIjAiLCIwMCIsIjAwMCIsIjAwMDAiLCIwMDAwMCIsIjAwMDAwMCIsIjAwMDAwMDAiLCIwMDAwMDAwMCIsIjAwMDAwMDAwMCIsIjAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAiLCIwMDAw''@;'; put 'put ''MDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAw''@;'; put 'put ''MDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiXSxMPVswLDAsMjUsMTYsMTIsMTEsMTAsOSw4LDgsNyw3LDcsNyw2LDYsNiw2LDYsNiw2LDUsNSw1LDUsNSw1LDUs''@;'; put 'put ''NSw1LDUsNSw1LDUsNSw1LDVdLEs9WzAsMCwzMzU1NDQzMiw0MzA0NjcyMSwxNjc3NzIxNiw0ODgyODEyNSw2MDQ2NjE3Niw0MDM1MzYwNywxNjc3NzIxNiw0MzA0NjcyMSwxZTcsMTk0ODcxNzEsMzU4MzE4MDgsNjI3NDg1MTcsNzUyOTUzNiwxMTM5MDYyNSwxNjc3NzIxNiwyNDEzNzU2OSwz''@;'; put 'put ''NDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQwODQxMDEsNTE1MzYzMiw2NDM2MzQzLDc5NjI2MjQsOTc2NTYyNSwxMTg4MTM3NiwxNDM0ODkwNywxNzIxMDM2OCwyMDUxMTE0OSwyNDNlNSwyODYyOTE1MSwzMzU1NDQzMiwzOTEzNTM5Myw0NTQzNTQyNCw1MjUyMTg3NSw2MDQ2NjE3Nl07ZnVuY3Rp''@;'; put 'put ''b24gVyhWLHAsYil7Yi5uZWdhdGl2ZT1wLm5lZ2F0aXZlXlYubmVnYXRpdmU7dmFyIHg9Vi5sZW5ndGgrcC5sZW5ndGh8MDtiLmxlbmd0aD14LHg9eC0xfDA7dmFyIEM9MHxWLndvcmRzWzBdLFQ9MHxwLndvcmRzWzBdLEg9QypULEU9SC82NzEwODg2NHwwO2Iud29yZHNbMF09NjcxMDg4NjMm''@;'; put 'put ''SDtmb3IodmFyIG09MTttPHg7bSsrKXtmb3IodmFyIEE9RT4+PjI2LGFlPTY3MTA4ODYzJkUsdGU9TWF0aC5taW4obSxwLmxlbmd0aC0xKSxzZT1NYXRoLm1heCgwLG0tVi5sZW5ndGgrMSk7c2U8PXRlO3NlKyspQSs9KEg9KEM9MHxWLndvcmRzW20tc2V8MF0pKihUPTB8cC53b3Jkc1tzZV0p''@;'; put 'put ''K2FlKS82NzEwODg2NHwwLGFlPTY3MTA4ODYzJkg7Yi53b3Jkc1ttXT0wfGFlLEU9MHxBfXJldHVybiAwIT09RT9iLndvcmRzW21dPTB8RTpiLmxlbmd0aC0tLGIuc3RyaXAoKX13LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbihwLGIpe3ZhciB4O2lmKGI9MHxifHwxLDE2PT09KHA9cHx8''@;'; put 'put ''MTApfHwiaGV4Ij09PXApe3g9IiI7Zm9yKHZhciBDPTAsVD0wLEg9MDtIPHRoaXMubGVuZ3RoO0grKyl7dmFyIGo9dGhpcy53b3Jkc1tIXSxFPSgxNjc3NzIxNSYoajw8Q3xUKSkudG9TdHJpbmcoMTYpO1Q9aj4+PjI0LUMmMTY3NzcyMTUsKEMrPTIpPj0yNiYmKEMtPTI2LEgtLSkseD0wIT09''@;'; put 'put ''VHx8SCE9PXRoaXMubGVuZ3RoLTE/Tls2LUUubGVuZ3RoXStFK3g6RSt4fWZvcigwIT09VCYmKHg9VC50b1N0cmluZygxNikreCk7eC5sZW5ndGglYiE9MDspeD0iMCIreDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJih4PSItIit4KSx4fWlmKHA9PT0oMHxwKSYmcD49MiYmcDw9MzYpe3Zh''@;'; put 'put ''ciBtPUxbcF0sQT1LW3BdO3g9IiI7dmFyIGFlPXRoaXMuY2xvbmUoKTtmb3IoYWUubmVnYXRpdmU9MDshYWUuaXNaZXJvKCk7KXt2YXIgdGU9YWUubW9kbihBKS50b1N0cmluZyhwKTt4PShhZT1hZS5pZGl2bihBKSkuaXNaZXJvKCk/dGUreDpOW20tdGUubGVuZ3RoXSt0ZSt4fWZvcih0aGlz''@;'; put 'put ''LmlzWmVybygpJiYoeD0iMCIreCk7eC5sZW5ndGglYiE9MDspeD0iMCIreDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJih4PSItIit4KSx4fWcoITEsIkJhc2Ugc2hvdWxkIGJlIGJldHdlZW4gMiBhbmQgMzYiKX0sdy5wcm90b3R5cGUudG9OdW1iZXI9ZnVuY3Rpb24oKXt2YXIgcD10aGlz''@;'; put 'put ''LndvcmRzWzBdO3JldHVybiAyPT09dGhpcy5sZW5ndGg/cCs9NjcxMDg4NjQqdGhpcy53b3Jkc1sxXTozPT09dGhpcy5sZW5ndGgmJjE9PT10aGlzLndvcmRzWzJdP3ArPTQ1MDM1OTk2MjczNzA0OTYrNjcxMDg4NjQqdGhpcy53b3Jkc1sxXTp0aGlzLmxlbmd0aD4yJiZnKCExLCJOdW1iZXIg''@;'; put 'put ''Y2FuIG9ubHkgc2FmZWx5IHN0b3JlIHVwIHRvIDUzIGJpdHMiKSwwIT09dGhpcy5uZWdhdGl2ZT8tcDpwfSx3LnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1N0cmluZygxNil9LHcucHJvdG90eXBlLnRvQnVmZmVyPWZ1bmN0aW9uKHAsYil7cmV0dXJuIGcodHlw''@;'; put 'put ''ZW9mIFA8InUiKSx0aGlzLnRvQXJyYXlMaWtlKFAscCxiKX0sdy5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbihwLGIpe3JldHVybiB0aGlzLnRvQXJyYXlMaWtlKEFycmF5LHAsYil9LHcucHJvdG90eXBlLnRvQXJyYXlMaWtlPWZ1bmN0aW9uKHAsYix4KXt2YXIgQz10aGlzLmJ5dGVMZW5n''@;'; put 'put ''dGgoKSxUPXh8fE1hdGgubWF4KDEsQyk7ZyhDPD1ULCJieXRlIGFycmF5IGxvbmdlciB0aGFuIGRlc2lyZWQgbGVuZ3RoIiksZyhUPjAsIlJlcXVlc3RlZCBhcnJheSBsZW5ndGggPD0gMCIpLHRoaXMuc3RyaXAoKTt2YXIgRSxtLEg9ImxlIj09PWIsaj1uZXcgcChUKSxBPXRoaXMuY2xvbmUo''@;'; put 'put ''KTtpZihIKXtmb3IobT0wOyFBLmlzWmVybygpO20rKylFPUEuYW5kbG4oMjU1KSxBLml1c2hybig4KSxqW21dPUU7Zm9yKDttPFQ7bSsrKWpbbV09MH1lbHNle2ZvcihtPTA7bTxULUM7bSsrKWpbbV09MDtmb3IobT0wOyFBLmlzWmVybygpO20rKylFPUEuYW5kbG4oMjU1KSxBLml1c2hybig4''@;'; put 'put ''KSxqW1QtbS0xXT1FfXJldHVybiBqfSx3LnByb3RvdHlwZS5fY291bnRCaXRzPU1hdGguY2x6MzI/ZnVuY3Rpb24ocCl7cmV0dXJuIDMyLU1hdGguY2x6MzIocCl9OmZ1bmN0aW9uKHApe3ZhciBiPXAseD0wO3JldHVybiBiPj00MDk2JiYoeCs9MTMsYj4+Pj0xMyksYj49NjQmJih4Kz03LGI+''@;'; put 'put ''Pj49NyksYj49OCYmKHgrPTQsYj4+Pj00KSxiPj0yJiYoeCs9MixiPj4+PTIpLHgrYn0sdy5wcm90b3R5cGUuX3plcm9CaXRzPWZ1bmN0aW9uKHApe2lmKDA9PT1wKXJldHVybiAyNjt2YXIgYj1wLHg9MDtyZXR1cm4gODE5MSZifHwoeCs9MTMsYj4+Pj0xMyksMTI3JmJ8fCh4Kz03LGI+Pj49''@;'; put 'put ''NyksMTUmYnx8KHgrPTQsYj4+Pj00KSwzJmJ8fCh4Kz0yLGI+Pj49MiksMSZifHx4KysseH0sdy5wcm90b3R5cGUuYml0TGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5fY291bnRCaXRzKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0pO3JldHVybiAyNioodGhpcy5sZW5ndGgtMSkrYn0s''@;'; put 'put ''dy5wcm90b3R5cGUuemVyb0JpdHM9ZnVuY3Rpb24oKXtpZih0aGlzLmlzWmVybygpKXJldHVybiAwO2Zvcih2YXIgcD0wLGI9MDtiPHRoaXMubGVuZ3RoO2IrKyl7dmFyIHg9dGhpcy5femVyb0JpdHModGhpcy53b3Jkc1tiXSk7aWYocCs9eCwyNiE9PXgpYnJlYWt9cmV0dXJuIHB9LHcucHJv''@;'; put 'put ''dG90eXBlLmJ5dGVMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuYml0TGVuZ3RoKCkvOCl9LHcucHJvdG90eXBlLnRvVHdvcz1mdW5jdGlvbihwKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/dGhpcy5hYnMoKS5pbm90bihwKS5pYWRkbigxKTp0aGlzLmNsb25lKCl9''@;'; put 'put ''LHcucHJvdG90eXBlLmZyb21Ud29zPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLnRlc3RuKHAtMSk/dGhpcy5ub3RuKHApLmlhZGRuKDEpLmluZWcoKTp0aGlzLmNsb25lKCl9LHcucHJvdG90eXBlLmlzTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlfSx3LnByb3RvdHlw''@;'; put 'put ''ZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmluZWcoKX0sdy5wcm90b3R5cGUuaW5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzWmVybygpfHwodGhpcy5uZWdhdGl2ZV49MSksdGhpc30sdy5wcm90b3R5cGUuaXVvcj1mdW5jdGlvbihwKXtmb3IoO3RoaXMubGVuZ3Ro''@;'; put 'put ''PHAubGVuZ3RoOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7Zm9yKHZhciBiPTA7YjxwLmxlbmd0aDtiKyspdGhpcy53b3Jkc1tiXT10aGlzLndvcmRzW2JdfHAud29yZHNbYl07cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaW9yPWZ1bmN0aW9uKHApe3JldHVybiBnKCEo''@;'; put 'put ''dGhpcy5uZWdhdGl2ZXxwLm5lZ2F0aXZlKSksdGhpcy5pdW9yKHApfSx3LnByb3RvdHlwZS5vcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLmlvcihwKTpwLmNsb25lKCkuaW9yKHRoaXMpfSx3LnByb3RvdHlwZS51b3I9ZnVuY3Rpb24ocCl7''@;'; put 'put ''cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdW9yKHApOnAuY2xvbmUoKS5pdW9yKHRoaXMpfSx3LnByb3RvdHlwZS5pdWFuZD1mdW5jdGlvbihwKXt2YXIgYjtiPXRoaXMubGVuZ3RoPnAubGVuZ3RoP3A6dGhpcztmb3IodmFyIHg9MDt4PGIubGVuZ3RoO3grKyl0''@;'; put 'put ''aGlzLndvcmRzW3hdPXRoaXMud29yZHNbeF0mcC53b3Jkc1t4XTtyZXR1cm4gdGhpcy5sZW5ndGg9Yi5sZW5ndGgsdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pYW5kPWZ1bmN0aW9uKHApe3JldHVybiBnKCEodGhpcy5uZWdhdGl2ZXxwLm5lZ2F0aXZlKSksdGhpcy5pdWFuZChwKX0sdy5w''@;'; put 'put ''cm90b3R5cGUuYW5kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaWFuZChwKTpwLmNsb25lKCkuaWFuZCh0aGlzKX0sdy5wcm90b3R5cGUudWFuZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgp''@;'; put 'put ''Lml1YW5kKHApOnAuY2xvbmUoKS5pdWFuZCh0aGlzKX0sdy5wcm90b3R5cGUuaXV4b3I9ZnVuY3Rpb24ocCl7dmFyIGIseDt0aGlzLmxlbmd0aD5wLmxlbmd0aD8oYj10aGlzLHg9cCk6KGI9cCx4PXRoaXMpO2Zvcih2YXIgQz0wO0M8eC5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109Yi53b3Jk''@;'; put 'put ''c1tDXV54LndvcmRzW0NdO2lmKHRoaXMhPT1iKWZvcig7QzxiLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT1iLndvcmRzW0NdO3JldHVybiB0aGlzLmxlbmd0aD1iLmxlbmd0aCx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLml4b3I9ZnVuY3Rpb24ocCl7cmV0dXJuIGcoISh0aGlzLm5lZ2F0''@;'; put 'put ''aXZlfHAubmVnYXRpdmUpKSx0aGlzLml1eG9yKHApfSx3LnByb3RvdHlwZS54b3I9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5peG9yKHApOnAuY2xvbmUoKS5peG9yKHRoaXMpfSx3LnByb3RvdHlwZS51eG9yPWZ1bmN0aW9uKHApe3JldHVy''@;'; put 'put ''biB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaXV4b3IocCk6cC5jbG9uZSgpLml1eG9yKHRoaXMpfSx3LnByb3RvdHlwZS5pbm90bj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIGI9MHxNYXRoLmNlaWwocC8yNikseD1wJTI2O3RoaXMuX2V4''@;'; put 'put ''cGFuZChiKSx4PjAmJmItLTtmb3IodmFyIEM9MDtDPGI7QysrKXRoaXMud29yZHNbQ109NjcxMDg4NjMmfnRoaXMud29yZHNbQ107cmV0dXJuIHg+MCYmKHRoaXMud29yZHNbQ109fnRoaXMud29yZHNbQ10mNjcxMDg4NjM+PjI2LXgpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUubm90bj1m''@;'; put 'put ''dW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlub3RuKHApfSx3LnByb3RvdHlwZS5zZXRuPWZ1bmN0aW9uKHAsYil7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApO3ZhciB4PXAvMjZ8MCxDPXAlMjY7cmV0dXJuIHRoaXMuX2V4cGFuZCh4KzEpLHRoaXMud29yZHNbeF09Yj90aGlz''@;'; put 'put ''LndvcmRzW3hdfDE8PEM6dGhpcy53b3Jkc1t4XSZ+KDE8PEMpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihwKXt2YXIgYix4LEM7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1wLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsYj10aGlzLmlzdWIocCks''@;'; put 'put ''dGhpcy5uZWdhdGl2ZV49MSx0aGlzLl9ub3JtU2lnbigpO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09cC5uZWdhdGl2ZSlyZXR1cm4gcC5uZWdhdGl2ZT0wLGI9dGhpcy5pc3ViKHApLHAubmVnYXRpdmU9MSxiLl9ub3JtU2lnbigpO3RoaXMubGVuZ3RoPnAubGVuZ3RoPyh4PXRoaXMsQz1w''@;'; put 'put ''KTooeD1wLEM9dGhpcyk7Zm9yKHZhciBUPTAsSD0wO0g8Qy5sZW5ndGg7SCsrKXRoaXMud29yZHNbSF09NjcxMDg4NjMmKGI9KDB8eC53b3Jkc1tIXSkrKDB8Qy53b3Jkc1tIXSkrVCksVD1iPj4+MjY7Zm9yKDswIT09VCYmSDx4Lmxlbmd0aDtIKyspdGhpcy53b3Jkc1tIXT02NzEwODg2MyYo''@;'; put 'put ''Yj0oMHx4LndvcmRzW0hdKStUKSxUPWI+Pj4yNjtpZih0aGlzLmxlbmd0aD14Lmxlbmd0aCwwIT09VCl0aGlzLndvcmRzW3RoaXMubGVuZ3RoXT1ULHRoaXMubGVuZ3RoKys7ZWxzZSBpZih4IT09dGhpcylmb3IoO0g8eC5sZW5ndGg7SCsrKXRoaXMud29yZHNbSF09eC53b3Jkc1tIXTtyZXR1''@;'; put 'put ''cm4gdGhpc30sdy5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHApe3ZhciBiO3JldHVybiAwIT09cC5uZWdhdGl2ZSYmMD09PXRoaXMubmVnYXRpdmU/KHAubmVnYXRpdmU9MCxiPXRoaXMuc3ViKHApLHAubmVnYXRpdmVePTEsYik6MD09PXAubmVnYXRpdmUmJjAhPT10aGlzLm5lZ2F0aXZlPyh0''@;'; put 'put ''aGlzLm5lZ2F0aXZlPTAsYj1wLnN1Yih0aGlzKSx0aGlzLm5lZ2F0aXZlPTEsYik6dGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhZGQocCk6cC5jbG9uZSgpLmlhZGQodGhpcyl9LHcucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24ocCl7aWYoMCE9PXAubmVnYXRpdmUpe3AubmVn''@;'; put 'put ''YXRpdmU9MDt2YXIgYj10aGlzLmlhZGQocCk7cmV0dXJuIHAubmVnYXRpdmU9MSxiLl9ub3JtU2lnbigpfWlmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkKHApLHRoaXMubmVnYXRpdmU9MSx0aGlzLl9ub3JtU2lnbigpO3ZhciBDLFQseD10aGlz''@;'; put 'put ''LmNtcChwKTtpZigwPT09eClyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMubGVuZ3RoPTEsdGhpcy53b3Jkc1swXT0wLHRoaXM7eD4wPyhDPXRoaXMsVD1wKTooQz1wLFQ9dGhpcyk7Zm9yKHZhciBIPTAsaj0wO2o8VC5sZW5ndGg7aisrKUg9KGI9KDB8Qy53b3Jkc1tqXSktKDB8VC53b3Jk''@;'; put 'put ''c1tqXSkrSCk+PjI2LHRoaXMud29yZHNbal09NjcxMDg4NjMmYjtmb3IoOzAhPT1IJiZqPEMubGVuZ3RoO2orKylIPShiPSgwfEMud29yZHNbal0pK0gpPj4yNix0aGlzLndvcmRzW2pdPTY3MTA4ODYzJmI7aWYoMD09PUgmJmo8Qy5sZW5ndGgmJkMhPT10aGlzKWZvcig7ajxDLmxlbmd0aDtq''@;'; put 'put ''KyspdGhpcy53b3Jkc1tqXT1DLndvcmRzW2pdO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxqKSxDIT09dGhpcyYmKHRoaXMubmVnYXRpdmU9MSksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3Vi''@;'; put 'put ''KHApfTt2YXIgWT1mdW5jdGlvbihwLGIseCl7dmFyIEUsbSxBLEM9cC53b3JkcyxUPWIud29yZHMsSD14LndvcmRzLGo9MCxhZT0wfENbMF0sdGU9ODE5MSZhZSxzZT1hZT4+PjEzLHdlPTB8Q1sxXSxVZT04MTkxJndlLEplPXdlPj4+MTMsb3Q9MHxDWzJdLHhlPTgxOTEmb3QsdmU9b3Q+Pj4x''@;'; put 'put ''MyxYZT0wfENbM10semU9ODE5MSZYZSxEZT1YZT4+PjEzLEZlPTB8Q1s0XSxPZT04MTkxJkZlLEllPUZlPj4+MTMsVmU9MHxDWzVdLGtlPTgxOTEmVmUsQWU9VmU+Pj4xMyxfdD0wfENbNl0sbnQ9ODE5MSZfdCxRZT1fdD4+PjEzLHVuPTB8Q1s3XSx5dD04MTkxJnVuLE10PXVuPj4+MTMsRHQ9''@;'; put 'put ''MHxDWzhdLGl0PTgxOTEmRHQsJGU9RHQ+Pj4xMyx0dD0wfENbOV0sSGU9ODE5MSZ0dCx1dD10dD4+PjEzLHF0PTB8VFswXSxSdD04MTkxJnF0LFB0PXF0Pj4+MTMsY2k9MHxUWzFdLFF0PTgxOTEmY2ksc249Y2k+Pj4xMyxSaT0wfFRbMl0saG49ODE5MSZSaSxmdD1SaT4+PjEzLE9yPTB8VFsz''@;'; put 'put ''XSxXdD04MTkxJk9yLEF0PU9yPj4+MTMsUm49MHxUWzRdLHN0PTgxOTEmUm4sVXQ9Um4+Pj4xMyxyaT0wfFRbNV0sV2U9ODE5MSZyaSxUdD1yaT4+PjEzLG5yPTB8VFs2XSxodD04MTkxJm5yLHh0PW5yPj4+MTMsam49MHxUWzddLHJuPTgxOTEmam4senQ9am4+Pj4xMyxoaT0wfFRbOF0sY249''@;'; put 'put ''ODE5MSZoaSxmbj1oaT4+PjEzLElpPTB8VFs5XSxYdD04MTkxJklpLGVuPUlpPj4+MTM7eC5uZWdhdGl2ZT1wLm5lZ2F0aXZlXmIubmVnYXRpdmUseC5sZW5ndGg9MTk7dmFyIHVhPShqKyhFPU1hdGguaW11bCh0ZSxSdCkpfDApKygoODE5MSYobT0obT1NYXRoLmltdWwodGUsUHQpKStNYXRo''@;'; put 'put ''LmltdWwoc2UsUnQpfDApKTw8MTMpfDA7aj0oKEE9TWF0aC5pbXVsKHNlLFB0KSkrKG0+Pj4xMyl8MCkrKHVhPj4+MjYpfDAsdWEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKFVlLFJ0KSxtPShtPU1hdGguaW11bChVZSxQdCkpK01hdGguaW11bChKZSxSdCl8MCxBPU1hdGguaW11bChKZSxQdCk7''@;'; put 'put ''dmFyIEVpPShqKyhFPUUrTWF0aC5pbXVsKHRlLFF0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsc24pfDApK01hdGguaW11bChzZSxRdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxzbil8MCkrKG0+Pj4xMyl8MCkrKEVpPj4+MjYpfDAsRWkmPTY3MTA4ODYz''@;'; put 'put ''LEU9TWF0aC5pbXVsKHhlLFJ0KSxtPShtPU1hdGguaW11bCh4ZSxQdCkpK01hdGguaW11bCh2ZSxSdCl8MCxBPU1hdGguaW11bCh2ZSxQdCksRT1FK01hdGguaW11bChVZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLHNuKXwwKStNYXRoLmltdWwoSmUsUXQpfDAsQT1BK01hdGguaW11bChK''@;'; put 'put ''ZSxzbil8MDt2YXIgdnI9KGorKEU9RStNYXRoLmltdWwodGUsaG4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxmdCl8MCkrTWF0aC5pbXVsKHNlLGhuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLGZ0KXwwKSsobT4+PjEzKXwwKSsodnI+Pj4yNil8MCx2ciY9''@;'; put 'put ''NjcxMDg4NjMsRT1NYXRoLmltdWwoemUsUnQpLG09KG09TWF0aC5pbXVsKHplLFB0KSkrTWF0aC5pbXVsKERlLFJ0KXwwLEE9TWF0aC5pbXVsKERlLFB0KSxFPUUrTWF0aC5pbXVsKHhlLFF0KXwwLG09KG09bStNYXRoLmltdWwoeGUsc24pfDApK01hdGguaW11bCh2ZSxRdCl8MCxBPUErTWF0''@;'; put 'put ''aC5pbXVsKHZlLHNuKXwwLEU9RStNYXRoLmltdWwoVWUsaG4pfDAsbT0obT1tK01hdGguaW11bChVZSxmdCl8MCkrTWF0aC5pbXVsKEplLGhuKXwwLEE9QStNYXRoLmltdWwoSmUsZnQpfDA7dmFyIFduPShqKyhFPUUrTWF0aC5pbXVsKHRlLFd0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRo''@;'; put 'put ''LmltdWwodGUsQXQpfDApK01hdGguaW11bChzZSxXdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxBdCl8MCkrKG0+Pj4xMyl8MCkrKFduPj4+MjYpfDAsV24mPTY3MTA4ODYzLEU9TWF0aC5pbXVsKE9lLFJ0KSxtPShtPU1hdGguaW11bChPZSxQdCkpK01hdGguaW11bChJZSxS''@;'; put 'put ''dCl8MCxBPU1hdGguaW11bChJZSxQdCksRT1FK01hdGguaW11bCh6ZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKHplLHNuKXwwKStNYXRoLmltdWwoRGUsUXQpfDAsQT1BK01hdGguaW11bChEZSxzbil8MCxFPUUrTWF0aC5pbXVsKHhlLGhuKXwwLG09KG09bStNYXRoLmltdWwoeGUsZnQpfDAp''@;'; put 'put ''K01hdGguaW11bCh2ZSxobil8MCxBPUErTWF0aC5pbXVsKHZlLGZ0KXwwLEU9RStNYXRoLmltdWwoVWUsV3QpfDAsbT0obT1tK01hdGguaW11bChVZSxBdCl8MCkrTWF0aC5pbXVsKEplLFd0KXwwLEE9QStNYXRoLmltdWwoSmUsQXQpfDA7dmFyICRpPShqKyhFPUUrTWF0aC5pbXVsKHRlLHN0''@;'; put 'put ''KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsVXQpfDApK01hdGguaW11bChzZSxzdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxVdCl8MCkrKG0+Pj4xMyl8MCkrKCRpPj4+MjYpfDAsJGkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKGtlLFJ0KSxtPShtPU1hdGgu''@;'; put 'put ''aW11bChrZSxQdCkpK01hdGguaW11bChBZSxSdCl8MCxBPU1hdGguaW11bChBZSxQdCksRT1FK01hdGguaW11bChPZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKE9lLHNuKXwwKStNYXRoLmltdWwoSWUsUXQpfDAsQT1BK01hdGguaW11bChJZSxzbil8MCxFPUUrTWF0aC5pbXVsKHplLGhuKXww''@;'; put 'put ''LG09KG09bStNYXRoLmltdWwoemUsZnQpfDApK01hdGguaW11bChEZSxobil8MCxBPUErTWF0aC5pbXVsKERlLGZ0KXwwLEU9RStNYXRoLmltdWwoeGUsV3QpfDAsbT0obT1tK01hdGguaW11bCh4ZSxBdCl8MCkrTWF0aC5pbXVsKHZlLFd0KXwwLEE9QStNYXRoLmltdWwodmUsQXQpfDAsRT1F''@;'; put 'put ''K01hdGguaW11bChVZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLFV0KXwwKStNYXRoLmltdWwoSmUsc3QpfDAsQT1BK01hdGguaW11bChKZSxVdCl8MDt2YXIgZWk9KGorKEU9RStNYXRoLmltdWwodGUsV2UpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxUdCl8MCkrTWF0''@;'; put 'put ''aC5pbXVsKHNlLFdlKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLFR0KXwwKSsobT4+PjEzKXwwKSsoZWk+Pj4yNil8MCxlaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwobnQsUnQpLG09KG09TWF0aC5pbXVsKG50LFB0KSkrTWF0aC5pbXVsKFFlLFJ0KXwwLEE9TWF0aC5pbXVsKFFl''@;'; put 'put ''LFB0KSxFPUUrTWF0aC5pbXVsKGtlLFF0KXwwLG09KG09bStNYXRoLmltdWwoa2Usc24pfDApK01hdGguaW11bChBZSxRdCl8MCxBPUErTWF0aC5pbXVsKEFlLHNuKXwwLEU9RStNYXRoLmltdWwoT2UsaG4pfDAsbT0obT1tK01hdGguaW11bChPZSxmdCl8MCkrTWF0aC5pbXVsKEllLGhuKXww''@;'; put 'put ''LEE9QStNYXRoLmltdWwoSWUsZnQpfDAsRT1FK01hdGguaW11bCh6ZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKHplLEF0KXwwKStNYXRoLmltdWwoRGUsV3QpfDAsQT1BK01hdGguaW11bChEZSxBdCl8MCxFPUUrTWF0aC5pbXVsKHhlLHN0KXwwLG09KG09bStNYXRoLmltdWwoeGUsVXQpfDAp''@;'; put 'put ''K01hdGguaW11bCh2ZSxzdCl8MCxBPUErTWF0aC5pbXVsKHZlLFV0KXwwLEU9RStNYXRoLmltdWwoVWUsV2UpfDAsbT0obT1tK01hdGguaW11bChVZSxUdCl8MCkrTWF0aC5pbXVsKEplLFdlKXwwLEE9QStNYXRoLmltdWwoSmUsVHQpfDA7dmFyIFFyPShqKyhFPUUrTWF0aC5pbXVsKHRlLGh0''@;'; put 'put ''KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUseHQpfDApK01hdGguaW11bChzZSxodCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSx4dCl8MCkrKG0+Pj4xMyl8MCkrKFFyPj4+MjYpfDAsUXImPTY3MTA4ODYzLEU9TWF0aC5pbXVsKHl0LFJ0KSxtPShtPU1hdGgu''@;'; put 'put ''aW11bCh5dCxQdCkpK01hdGguaW11bChNdCxSdCl8MCxBPU1hdGguaW11bChNdCxQdCksRT1FK01hdGguaW11bChudCxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKG50LHNuKXwwKStNYXRoLmltdWwoUWUsUXQpfDAsQT1BK01hdGguaW11bChRZSxzbil8MCxFPUUrTWF0aC5pbXVsKGtlLGhuKXww''@;'; put 'put ''LG09KG09bStNYXRoLmltdWwoa2UsZnQpfDApK01hdGguaW11bChBZSxobil8MCxBPUErTWF0aC5pbXVsKEFlLGZ0KXwwLEU9RStNYXRoLmltdWwoT2UsV3QpfDAsbT0obT1tK01hdGguaW11bChPZSxBdCl8MCkrTWF0aC5pbXVsKEllLFd0KXwwLEE9QStNYXRoLmltdWwoSWUsQXQpfDAsRT1F''@;'; put 'put ''K01hdGguaW11bCh6ZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKHplLFV0KXwwKStNYXRoLmltdWwoRGUsc3QpfDAsQT1BK01hdGguaW11bChEZSxVdCl8MCxFPUUrTWF0aC5pbXVsKHhlLFdlKXwwLG09KG09bStNYXRoLmltdWwoeGUsVHQpfDApK01hdGguaW11bCh2ZSxXZSl8MCxBPUErTWF0''@;'; put 'put ''aC5pbXVsKHZlLFR0KXwwLEU9RStNYXRoLmltdWwoVWUsaHQpfDAsbT0obT1tK01hdGguaW11bChVZSx4dCl8MCkrTWF0aC5pbXVsKEplLGh0KXwwLEE9QStNYXRoLmltdWwoSmUseHQpfDA7dmFyIFZpPShqKyhFPUUrTWF0aC5pbXVsKHRlLHJuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRo''@;'; put 'put ''LmltdWwodGUsenQpfDApK01hdGguaW11bChzZSxybil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSx6dCl8MCkrKG0+Pj4xMyl8MCkrKFZpPj4+MjYpfDAsVmkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKGl0LFJ0KSxtPShtPU1hdGguaW11bChpdCxQdCkpK01hdGguaW11bCgkZSxS''@;'; put 'put ''dCl8MCxBPU1hdGguaW11bCgkZSxQdCksRT1FK01hdGguaW11bCh5dCxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LHNuKXwwKStNYXRoLmltdWwoTXQsUXQpfDAsQT1BK01hdGguaW11bChNdCxzbil8MCxFPUUrTWF0aC5pbXVsKG50LGhuKXwwLG09KG09bStNYXRoLmltdWwobnQsZnQpfDAp''@;'; put 'put ''K01hdGguaW11bChRZSxobil8MCxBPUErTWF0aC5pbXVsKFFlLGZ0KXwwLEU9RStNYXRoLmltdWwoa2UsV3QpfDAsbT0obT1tK01hdGguaW11bChrZSxBdCl8MCkrTWF0aC5pbXVsKEFlLFd0KXwwLEE9QStNYXRoLmltdWwoQWUsQXQpfDAsRT1FK01hdGguaW11bChPZSxzdCl8MCxtPShtPW0r''@;'; put 'put ''TWF0aC5pbXVsKE9lLFV0KXwwKStNYXRoLmltdWwoSWUsc3QpfDAsQT1BK01hdGguaW11bChJZSxVdCl8MCxFPUUrTWF0aC5pbXVsKHplLFdlKXwwLG09KG09bStNYXRoLmltdWwoemUsVHQpfDApK01hdGguaW11bChEZSxXZSl8MCxBPUErTWF0aC5pbXVsKERlLFR0KXwwLEU9RStNYXRoLmlt''@;'; put 'put ''dWwoeGUsaHQpfDAsbT0obT1tK01hdGguaW11bCh4ZSx4dCl8MCkrTWF0aC5pbXVsKHZlLGh0KXwwLEE9QStNYXRoLmltdWwodmUseHQpfDAsRT1FK01hdGguaW11bChVZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKFVlLHp0KXwwKStNYXRoLmltdWwoSmUscm4pfDAsQT1BK01hdGguaW11bChK''@;'; put 'put ''ZSx6dCl8MDt2YXIgTmk9KGorKEU9RStNYXRoLmltdWwodGUsY24pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxmbil8MCkrTWF0aC5pbXVsKHNlLGNuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLGZuKXwwKSsobT4+PjEzKXwwKSsoTmk+Pj4yNil8MCxOaSY9''@;'; put 'put ''NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsUnQpLG09KG09TWF0aC5pbXVsKEhlLFB0KSkrTWF0aC5pbXVsKHV0LFJ0KXwwLEE9TWF0aC5pbXVsKHV0LFB0KSxFPUUrTWF0aC5pbXVsKGl0LFF0KXwwLG09KG09bStNYXRoLmltdWwoaXQsc24pfDApK01hdGguaW11bCgkZSxRdCl8MCxBPUErTWF0''@;'; put 'put ''aC5pbXVsKCRlLHNuKXwwLEU9RStNYXRoLmltdWwoeXQsaG4pfDAsbT0obT1tK01hdGguaW11bCh5dCxmdCl8MCkrTWF0aC5pbXVsKE10LGhuKXwwLEE9QStNYXRoLmltdWwoTXQsZnQpfDAsRT1FK01hdGguaW11bChudCxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKG50LEF0KXwwKStNYXRoLmlt''@;'; put 'put ''dWwoUWUsV3QpfDAsQT1BK01hdGguaW11bChRZSxBdCl8MCxFPUUrTWF0aC5pbXVsKGtlLHN0KXwwLG09KG09bStNYXRoLmltdWwoa2UsVXQpfDApK01hdGguaW11bChBZSxzdCl8MCxBPUErTWF0aC5pbXVsKEFlLFV0KXwwLEU9RStNYXRoLmltdWwoT2UsV2UpfDAsbT0obT1tK01hdGguaW11''@;'; put 'put ''bChPZSxUdCl8MCkrTWF0aC5pbXVsKEllLFdlKXwwLEE9QStNYXRoLmltdWwoSWUsVHQpfDAsRT1FK01hdGguaW11bCh6ZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKHplLHh0KXwwKStNYXRoLmltdWwoRGUsaHQpfDAsQT1BK01hdGguaW11bChEZSx4dCl8MCxFPUUrTWF0aC5pbXVsKHhlLHJu''@;'; put 'put ''KXwwLG09KG09bStNYXRoLmltdWwoeGUsenQpfDApK01hdGguaW11bCh2ZSxybil8MCxBPUErTWF0aC5pbXVsKHZlLHp0KXwwLEU9RStNYXRoLmltdWwoVWUsY24pfDAsbT0obT1tK01hdGguaW11bChVZSxmbil8MCkrTWF0aC5pbXVsKEplLGNuKXwwLEE9QStNYXRoLmltdWwoSmUsZm4pfDA7''@;'; put 'put ''dmFyIERhPShqKyhFPUUrTWF0aC5pbXVsKHRlLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsZW4pfDApK01hdGguaW11bChzZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxlbil8MCkrKG0+Pj4xMyl8MCkrKERhPj4+MjYpfDAsRGEmPTY3MTA4ODYz''@;'; put 'put ''LEU9TWF0aC5pbXVsKEhlLFF0KSxtPShtPU1hdGguaW11bChIZSxzbikpK01hdGguaW11bCh1dCxRdCl8MCxBPU1hdGguaW11bCh1dCxzbiksRT1FK01hdGguaW11bChpdCxobil8MCxtPShtPW0rTWF0aC5pbXVsKGl0LGZ0KXwwKStNYXRoLmltdWwoJGUsaG4pfDAsQT1BK01hdGguaW11bCgk''@;'; put 'put ''ZSxmdCl8MCxFPUUrTWF0aC5pbXVsKHl0LFd0KXwwLG09KG09bStNYXRoLmltdWwoeXQsQXQpfDApK01hdGguaW11bChNdCxXdCl8MCxBPUErTWF0aC5pbXVsKE10LEF0KXwwLEU9RStNYXRoLmltdWwobnQsc3QpfDAsbT0obT1tK01hdGguaW11bChudCxVdCl8MCkrTWF0aC5pbXVsKFFlLHN0''@;'; put 'put ''KXwwLEE9QStNYXRoLmltdWwoUWUsVXQpfDAsRT1FK01hdGguaW11bChrZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKGtlLFR0KXwwKStNYXRoLmltdWwoQWUsV2UpfDAsQT1BK01hdGguaW11bChBZSxUdCl8MCxFPUUrTWF0aC5pbXVsKE9lLGh0KXwwLG09KG09bStNYXRoLmltdWwoT2UseHQp''@;'; put 'put ''fDApK01hdGguaW11bChJZSxodCl8MCxBPUErTWF0aC5pbXVsKEllLHh0KXwwLEU9RStNYXRoLmltdWwoemUscm4pfDAsbT0obT1tK01hdGguaW11bCh6ZSx6dCl8MCkrTWF0aC5pbXVsKERlLHJuKXwwLEE9QStNYXRoLmltdWwoRGUsenQpfDAsRT1FK01hdGguaW11bCh4ZSxjbil8MCxtPSht''@;'; put 'put ''PW0rTWF0aC5pbXVsKHhlLGZuKXwwKStNYXRoLmltdWwodmUsY24pfDAsQT1BK01hdGguaW11bCh2ZSxmbil8MDt2YXIgTHI9KGorKEU9RStNYXRoLmltdWwoVWUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChVZSxlbil8MCkrTWF0aC5pbXVsKEplLFh0KXwwKSk8PDEzKXww''@;'; put 'put ''O2o9KChBPUErTWF0aC5pbXVsKEplLGVuKXwwKSsobT4+PjEzKXwwKSsoTHI+Pj4yNil8MCxMciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsaG4pLG09KG09TWF0aC5pbXVsKEhlLGZ0KSkrTWF0aC5pbXVsKHV0LGhuKXwwLEE9TWF0aC5pbXVsKHV0LGZ0KSxFPUUrTWF0aC5pbXVsKGl0LFd0''@;'; put 'put ''KXwwLG09KG09bStNYXRoLmltdWwoaXQsQXQpfDApK01hdGguaW11bCgkZSxXdCl8MCxBPUErTWF0aC5pbXVsKCRlLEF0KXwwLEU9RStNYXRoLmltdWwoeXQsc3QpfDAsbT0obT1tK01hdGguaW11bCh5dCxVdCl8MCkrTWF0aC5pbXVsKE10LHN0KXwwLEE9QStNYXRoLmltdWwoTXQsVXQpfDAs''@;'; put 'put ''RT1FK01hdGguaW11bChudCxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKG50LFR0KXwwKStNYXRoLmltdWwoUWUsV2UpfDAsQT1BK01hdGguaW11bChRZSxUdCl8MCxFPUUrTWF0aC5pbXVsKGtlLGh0KXwwLG09KG09bStNYXRoLmltdWwoa2UseHQpfDApK01hdGguaW11bChBZSxodCl8MCxBPUEr''@;'; put 'put ''TWF0aC5pbXVsKEFlLHh0KXwwLEU9RStNYXRoLmltdWwoT2Uscm4pfDAsbT0obT1tK01hdGguaW11bChPZSx6dCl8MCkrTWF0aC5pbXVsKEllLHJuKXwwLEE9QStNYXRoLmltdWwoSWUsenQpfDAsRT1FK01hdGguaW11bCh6ZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKHplLGZuKXwwKStNYXRo''@;'; put 'put ''LmltdWwoRGUsY24pfDAsQT1BK01hdGguaW11bChEZSxmbil8MDt2YXIgV2k9KGorKEU9RStNYXRoLmltdWwoeGUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh4ZSxlbil8MCkrTWF0aC5pbXVsKHZlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHZlLGVuKXww''@;'; put 'put ''KSsobT4+PjEzKXwwKSsoV2k+Pj4yNil8MCxXaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsV3QpLG09KG09TWF0aC5pbXVsKEhlLEF0KSkrTWF0aC5pbXVsKHV0LFd0KXwwLEE9TWF0aC5pbXVsKHV0LEF0KSxFPUUrTWF0aC5pbXVsKGl0LHN0KXwwLG09KG09bStNYXRoLmltdWwoaXQsVXQp''@;'; put 'put ''fDApK01hdGguaW11bCgkZSxzdCl8MCxBPUErTWF0aC5pbXVsKCRlLFV0KXwwLEU9RStNYXRoLmltdWwoeXQsV2UpfDAsbT0obT1tK01hdGguaW11bCh5dCxUdCl8MCkrTWF0aC5pbXVsKE10LFdlKXwwLEE9QStNYXRoLmltdWwoTXQsVHQpfDAsRT1FK01hdGguaW11bChudCxodCl8MCxtPSht''@;'; put 'put ''PW0rTWF0aC5pbXVsKG50LHh0KXwwKStNYXRoLmltdWwoUWUsaHQpfDAsQT1BK01hdGguaW11bChRZSx4dCl8MCxFPUUrTWF0aC5pbXVsKGtlLHJuKXwwLG09KG09bStNYXRoLmltdWwoa2UsenQpfDApK01hdGguaW11bChBZSxybil8MCxBPUErTWF0aC5pbXVsKEFlLHp0KXwwLEU9RStNYXRo''@;'; put 'put ''LmltdWwoT2UsY24pfDAsbT0obT1tK01hdGguaW11bChPZSxmbil8MCkrTWF0aC5pbXVsKEllLGNuKXwwLEE9QStNYXRoLmltdWwoSWUsZm4pfDA7dmFyIHBhPShqKyhFPUUrTWF0aC5pbXVsKHplLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoemUsZW4pfDApK01hdGguaW11''@;'; put 'put ''bChEZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChEZSxlbil8MCkrKG0+Pj4xMyl8MCkrKHBhPj4+MjYpfDAscGEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLHN0KSxtPShtPU1hdGguaW11bChIZSxVdCkpK01hdGguaW11bCh1dCxzdCl8MCxBPU1hdGguaW11bCh1dCxVdCks''@;'; put 'put ''RT1FK01hdGguaW11bChpdCxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKGl0LFR0KXwwKStNYXRoLmltdWwoJGUsV2UpfDAsQT1BK01hdGguaW11bCgkZSxUdCl8MCxFPUUrTWF0aC5pbXVsKHl0LGh0KXwwLG09KG09bStNYXRoLmltdWwoeXQseHQpfDApK01hdGguaW11bChNdCxodCl8MCxBPUEr''@;'; put 'put ''TWF0aC5pbXVsKE10LHh0KXwwLEU9RStNYXRoLmltdWwobnQscm4pfDAsbT0obT1tK01hdGguaW11bChudCx6dCl8MCkrTWF0aC5pbXVsKFFlLHJuKXwwLEE9QStNYXRoLmltdWwoUWUsenQpfDAsRT1FK01hdGguaW11bChrZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKGtlLGZuKXwwKStNYXRo''@;'; put 'put ''LmltdWwoQWUsY24pfDAsQT1BK01hdGguaW11bChBZSxmbil8MDt2YXIgUW49KGorKEU9RStNYXRoLmltdWwoT2UsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChPZSxlbil8MCkrTWF0aC5pbXVsKEllLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKEllLGVuKXww''@;'; put 'put ''KSsobT4+PjEzKXwwKSsoUW4+Pj4yNil8MCxRbiY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsV2UpLG09KG09TWF0aC5pbXVsKEhlLFR0KSkrTWF0aC5pbXVsKHV0LFdlKXwwLEE9TWF0aC5pbXVsKHV0LFR0KSxFPUUrTWF0aC5pbXVsKGl0LGh0KXwwLG09KG09bStNYXRoLmltdWwoaXQseHQp''@;'; put 'put ''fDApK01hdGguaW11bCgkZSxodCl8MCxBPUErTWF0aC5pbXVsKCRlLHh0KXwwLEU9RStNYXRoLmltdWwoeXQscm4pfDAsbT0obT1tK01hdGguaW11bCh5dCx6dCl8MCkrTWF0aC5pbXVsKE10LHJuKXwwLEE9QStNYXRoLmltdWwoTXQsenQpfDAsRT1FK01hdGguaW11bChudCxjbil8MCxtPSht''@;'; put 'put ''PW0rTWF0aC5pbXVsKG50LGZuKXwwKStNYXRoLmltdWwoUWUsY24pfDAsQT1BK01hdGguaW11bChRZSxmbil8MDt2YXIgbGE9KGorKEU9RStNYXRoLmltdWwoa2UsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChrZSxlbil8MCkrTWF0aC5pbXVsKEFlLFh0KXwwKSk8PDEzKXww''@;'; put 'put ''O2o9KChBPUErTWF0aC5pbXVsKEFlLGVuKXwwKSsobT4+PjEzKXwwKSsobGE+Pj4yNil8MCxsYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsaHQpLG09KG09TWF0aC5pbXVsKEhlLHh0KSkrTWF0aC5pbXVsKHV0LGh0KXwwLEE9TWF0aC5pbXVsKHV0LHh0KSxFPUUrTWF0aC5pbXVsKGl0LHJu''@;'; put 'put ''KXwwLG09KG09bStNYXRoLmltdWwoaXQsenQpfDApK01hdGguaW11bCgkZSxybil8MCxBPUErTWF0aC5pbXVsKCRlLHp0KXwwLEU9RStNYXRoLmltdWwoeXQsY24pfDAsbT0obT1tK01hdGguaW11bCh5dCxmbil8MCkrTWF0aC5pbXVsKE10LGNuKXwwLEE9QStNYXRoLmltdWwoTXQsZm4pfDA7''@;'; put 'put ''dmFyIHlhPShqKyhFPUUrTWF0aC5pbXVsKG50LFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobnQsZW4pfDApK01hdGguaW11bChRZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChRZSxlbil8MCkrKG0+Pj4xMyl8MCkrKHlhPj4+MjYpfDAseWEmPTY3MTA4ODYz''@;'; put 'put ''LEU9TWF0aC5pbXVsKEhlLHJuKSxtPShtPU1hdGguaW11bChIZSx6dCkpK01hdGguaW11bCh1dCxybil8MCxBPU1hdGguaW11bCh1dCx6dCksRT1FK01hdGguaW11bChpdCxjbil8MCxtPShtPW0rTWF0aC5pbXVsKGl0LGZuKXwwKStNYXRoLmltdWwoJGUsY24pfDAsQT1BK01hdGguaW11bCgk''@;'; put 'put ''ZSxmbil8MDt2YXIgTGE9KGorKEU9RStNYXRoLmltdWwoeXQsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh5dCxlbil8MCkrTWF0aC5pbXVsKE10LFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKE10LGVuKXwwKSsobT4+PjEzKXwwKSsoTGE+Pj4yNil8MCxMYSY9''@;'; put 'put ''NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsY24pLG09KG09TWF0aC5pbXVsKEhlLGZuKSkrTWF0aC5pbXVsKHV0LGNuKXwwLEE9TWF0aC5pbXVsKHV0LGZuKTt2YXIgRmE9KGorKEU9RStNYXRoLmltdWwoaXQsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChpdCxlbil8MCkrTWF0''@;'; put 'put ''aC5pbXVsKCRlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKCRlLGVuKXwwKSsobT4+PjEzKXwwKSsoRmE+Pj4yNil8MCxGYSY9NjcxMDg4NjM7dmFyIHRpPShqKyhFPU1hdGguaW11bChIZSxYdCkpfDApKygoODE5MSYobT0obT1NYXRoLmltdWwoSGUsZW4pKStNYXRoLmltdWwo''@;'; put 'put ''dXQsWHQpfDApKTw8MTMpfDA7cmV0dXJuIGo9KChBPU1hdGguaW11bCh1dCxlbikpKyhtPj4+MTMpfDApKyh0aT4+PjI2KXwwLHRpJj02NzEwODg2MyxIWzBdPXVhLEhbMV09RWksSFsyXT12cixIWzNdPVduLEhbNF09JGksSFs1XT1laSxIWzZdPVFyLEhbN109VmksSFs4XT1OaSxIWzldPURh''@;'; put 'put ''LEhbMTBdPUxyLEhbMTFdPVdpLEhbMTJdPXBhLEhbMTNdPVFuLEhbMTRdPWxhLEhbMTVdPXlhLEhbMTZdPUxhLEhbMTddPUZhLEhbMThdPXRpLDAhPT1qJiYoSFsxOV09aix4Lmxlbmd0aCsrKSx4fTtmdW5jdGlvbiBlZShWLHAsYil7cmV0dXJuKG5ldyBKKS5tdWxwKFYscCxiKX1mdW5jdGlv''@;'; put 'put ''biBKKFYscCl7dGhpcy54PVYsdGhpcy55PXB9TWF0aC5pbXVsfHwoWT1XKSx3LnByb3RvdHlwZS5tdWxUbz1mdW5jdGlvbihwLGIpe3ZhciB4LEM9dGhpcy5sZW5ndGgrcC5sZW5ndGg7cmV0dXJuIHg9MTA9PT10aGlzLmxlbmd0aCYmMTA9PT1wLmxlbmd0aD9ZKHRoaXMscCxiKTpDPDYzP1co''@;'; put 'put ''dGhpcyxwLGIpOkM8MTAyND9mdW5jdGlvbiBxKFYscCxiKXtiLm5lZ2F0aXZlPXAubmVnYXRpdmVeVi5uZWdhdGl2ZSxiLmxlbmd0aD1WLmxlbmd0aCtwLmxlbmd0aDtmb3IodmFyIHg9MCxDPTAsVD0wO1Q8Yi5sZW5ndGgtMTtUKyspe3ZhciBIPUM7Qz0wO2Zvcih2YXIgaj02NzEwODg2MyZ4''@;'; put 'put ''LEU9TWF0aC5taW4oVCxwLmxlbmd0aC0xKSxtPU1hdGgubWF4KDAsVC1WLmxlbmd0aCsxKTttPD1FO20rKyl7dmFyIHNlPSgwfFYud29yZHNbVC1tXSkqKDB8cC53b3Jkc1ttXSksd2U9NjcxMDg4NjMmc2U7aj02NzEwODg2MyYod2U9d2UranwwKSxDKz0oSD0oSD1IKyhzZS82NzEwODg2NHww''@;'; put 'put ''KXwwKSsod2U+Pj4yNil8MCk+Pj4yNixIJj02NzEwODg2M31iLndvcmRzW1RdPWoseD1ILEg9Q31yZXR1cm4gMCE9PXg/Yi53b3Jkc1tUXT14OmIubGVuZ3RoLS0sYi5zdHJpcCgpfSh0aGlzLHAsYik6ZWUodGhpcyxwLGIpLHh9LEoucHJvdG90eXBlLm1ha2VSQlQ9ZnVuY3Rpb24ocCl7Zm9y''@;'; put 'put ''KHZhciBiPW5ldyBBcnJheShwKSx4PXcucHJvdG90eXBlLl9jb3VudEJpdHMocCktMSxDPTA7QzxwO0MrKyliW0NdPXRoaXMucmV2QmluKEMseCxwKTtyZXR1cm4gYn0sSi5wcm90b3R5cGUucmV2QmluPWZ1bmN0aW9uKHAsYix4KXtpZigwPT09cHx8cD09PXgtMSlyZXR1cm4gcDtmb3IodmFy''@;'; put 'put ''IEM9MCxUPTA7VDxiO1QrKylDfD0oMSZwKTw8Yi1ULTEscD4+PTE7cmV0dXJuIEN9LEoucHJvdG90eXBlLnBlcm11dGU9ZnVuY3Rpb24ocCxiLHgsQyxULEgpe2Zvcih2YXIgaj0wO2o8SDtqKyspQ1tqXT1iW3Bbal1dLFRbal09eFtwW2pdXX0sSi5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0''@;'; put 'put ''aW9uKHAsYix4LEMsVCxIKXt0aGlzLnBlcm11dGUoSCxwLGIseCxDLFQpO2Zvcih2YXIgaj0xO2o8VDtqPDw9MSlmb3IodmFyIEU9ajw8MSxtPU1hdGguY29zKDIqTWF0aC5QSS9FKSxBPU1hdGguc2luKDIqTWF0aC5QSS9FKSxhZT0wO2FlPFQ7YWUrPUUpZm9yKHZhciB0ZT1tLHNlPUEsd2U9''@;'; put 'put ''MDt3ZTxqO3dlKyspe3ZhciBVZT14W2FlK3dlXSxKZT1DW2FlK3dlXSxvdD14W2FlK3dlK2pdLHhlPUNbYWUrd2Ural0sdmU9dGUqb3Qtc2UqeGU7eGU9dGUqeGUrc2Uqb3QseFthZSt3ZV09VWUrKG90PXZlKSxDW2FlK3dlXT1KZSt4ZSx4W2FlK3dlK2pdPVVlLW90LENbYWUrd2Ural09SmUt''@;'; put 'put ''eGUsd2UhPT1FJiYodmU9bSp0ZS1BKnNlLHNlPW0qc2UrQSp0ZSx0ZT12ZSl9fSxKLnByb3RvdHlwZS5ndWVzc0xlbjEzYj1mdW5jdGlvbihwLGIpe3ZhciB4PTF8TWF0aC5tYXgoYixwKSxDPTEmeCxUPTA7Zm9yKHg9eC8yfDA7eDt4Pj4+PTEpVCsrO3JldHVybiAxPDxUKzErQ30sSi5wcm90''@;'; put 'put ''b3R5cGUuY29uanVnYXRlPWZ1bmN0aW9uKHAsYix4KXtpZighKHg8PTEpKWZvcih2YXIgQz0wO0M8eC8yO0MrKyl7dmFyIFQ9cFtDXTtwW0NdPXBbeC1DLTFdLHBbeC1DLTFdPVQsVD1iW0NdLGJbQ109LWJbeC1DLTFdLGJbeC1DLTFdPS1UfX0sSi5wcm90b3R5cGUubm9ybWFsaXplMTNiPWZ1''@;'; put 'put ''bmN0aW9uKHAsYil7Zm9yKHZhciB4PTAsQz0wO0M8Yi8yO0MrKyl7dmFyIFQ9ODE5MipNYXRoLnJvdW5kKHBbMipDKzFdL2IpK01hdGgucm91bmQocFsyKkNdL2IpK3g7cFtDXT02NzEwODg2MyZULHg9VDw2NzEwODg2ND8wOlQvNjcxMDg4NjR8MH1yZXR1cm4gcH0sSi5wcm90b3R5cGUuY29u''@;'; put 'put ''dmVydDEzYj1mdW5jdGlvbihwLGIseCxDKXtmb3IodmFyIFQ9MCxIPTA7SDxiO0grKyl4WzIqSF09ODE5MSYoVCs9MHxwW0hdKSx4WzIqSCsxXT04MTkxJihUPj4+PTEzKSxUPj4+PTEzO2ZvcihIPTIqYjtIPEM7KytIKXhbSF09MDtnKDA9PT1UKSxnKCEoLTgxOTImVCkpfSxKLnByb3RvdHlw''@;'; put 'put ''ZS5zdHViPWZ1bmN0aW9uKHApe2Zvcih2YXIgYj1uZXcgQXJyYXkocCkseD0wO3g8cDt4KyspYlt4XT0wO3JldHVybiBifSxKLnByb3RvdHlwZS5tdWxwPWZ1bmN0aW9uKHAsYix4KXt2YXIgQz0yKnRoaXMuZ3Vlc3NMZW4xM2IocC5sZW5ndGgsYi5sZW5ndGgpLFQ9dGhpcy5tYWtlUkJUKEMp''@;'; put 'put ''LEg9dGhpcy5zdHViKEMpLGo9bmV3IEFycmF5KEMpLEU9bmV3IEFycmF5KEMpLG09bmV3IEFycmF5KEMpLEE9bmV3IEFycmF5KEMpLGFlPW5ldyBBcnJheShDKSx0ZT1uZXcgQXJyYXkoQyksc2U9eC53b3JkcztzZS5sZW5ndGg9Qyx0aGlzLmNvbnZlcnQxM2IocC53b3JkcyxwLmxlbmd0aCxq''@;'; put 'put ''LEMpLHRoaXMuY29udmVydDEzYihiLndvcmRzLGIubGVuZ3RoLEEsQyksdGhpcy50cmFuc2Zvcm0oaixILEUsbSxDLFQpLHRoaXMudHJhbnNmb3JtKEEsSCxhZSx0ZSxDLFQpO2Zvcih2YXIgd2U9MDt3ZTxDO3dlKyspe3ZhciBVZT1FW3dlXSphZVt3ZV0tbVt3ZV0qdGVbd2VdO21bd2VdPUVb''@;'; put 'put ''d2VdKnRlW3dlXSttW3dlXSphZVt3ZV0sRVt3ZV09VWV9cmV0dXJuIHRoaXMuY29uanVnYXRlKEUsbSxDKSx0aGlzLnRyYW5zZm9ybShFLG0sc2UsSCxDLFQpLHRoaXMuY29uanVnYXRlKHNlLEgsQyksdGhpcy5ub3JtYWxpemUxM2Ioc2UsQykseC5uZWdhdGl2ZT1wLm5lZ2F0aXZlXmIubmVn''@;'; put 'put ''YXRpdmUseC5sZW5ndGg9cC5sZW5ndGgrYi5sZW5ndGgseC5zdHJpcCgpfSx3LnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24ocCl7dmFyIGI9bmV3IHcobnVsbCk7cmV0dXJuIGIud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK3AubGVuZ3RoKSx0aGlzLm11bFRvKHAsYil9LHcucHJvdG90eXBl''@;'; put 'put ''Lm11bGY9ZnVuY3Rpb24ocCl7dmFyIGI9bmV3IHcobnVsbCk7cmV0dXJuIGIud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK3AubGVuZ3RoKSxlZSh0aGlzLHAsYil9LHcucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5tdWxUbyhwLHRoaXMpfSx3LnBy''@;'; put 'put ''b3RvdHlwZS5pbXVsbj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCksZyhwPDY3MTA4ODY0KTtmb3IodmFyIGI9MCx4PTA7eDx0aGlzLmxlbmd0aDt4Kyspe3ZhciBDPSgwfHRoaXMud29yZHNbeF0pKnAsVD0oNjcxMDg4NjMmQykrKDY3MTA4ODYzJmIpO2I+Pj0yNixiKz1DLzY3''@;'; put 'put ''MTA4ODY0fDAsYis9VD4+PjI2LHRoaXMud29yZHNbeF09NjcxMDg4NjMmVH1yZXR1cm4gMCE9PWImJih0aGlzLndvcmRzW3hdPWIsdGhpcy5sZW5ndGgrKyksdGhpc30sdy5wcm90b3R5cGUubXVsbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltdWxuKHApfSx3LnByb3RvdHlw''@;'; put 'put ''ZS5zcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tdWwodGhpcyl9LHcucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSl9LHcucHJvdG90eXBlLnBvdz1mdW5jdGlvbihwKXt2YXIgYj1mdW5jdGlvbiBVKFYpe2Zvcih2YXIgcD1uZXcgQXJy''@;'; put 'put ''YXkoVi5iaXRMZW5ndGgoKSksYj0wO2I8cC5sZW5ndGg7YisrKXt2YXIgQz1iJTI2O3BbYl09KFYud29yZHNbYi8yNnwwXSYxPDxDKT4+PkN9cmV0dXJuIHB9KHApO2lmKDA9PT1iLmxlbmd0aClyZXR1cm4gbmV3IHcoMSk7Zm9yKHZhciB4PXRoaXMsQz0wO0M8Yi5sZW5ndGgmJjA9PT1iW0Nd''@;'; put 'put ''O0MrKyx4PXguc3FyKCkpO2lmKCsrQzxiLmxlbmd0aClmb3IodmFyIFQ9eC5zcXIoKTtDPGIubGVuZ3RoO0MrKyxUPVQuc3FyKCkpMCE9PWJbQ10mJih4PXgubXVsKFQpKTtyZXR1cm4geH0sdy5wcm90b3R5cGUuaXVzaGxuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0w''@;'; put 'put ''KTt2YXIgVCxiPXAlMjYseD0ocC1iKS8yNixDPTY3MTA4ODYzPj4+MjYtYjw8MjYtYjtpZigwIT09Yil7dmFyIEg9MDtmb3IoVD0wO1Q8dGhpcy5sZW5ndGg7VCsrKXt2YXIgaj10aGlzLndvcmRzW1RdJkM7dGhpcy53b3Jkc1tUXT0oMHx0aGlzLndvcmRzW1RdKS1qPDxifEgsSD1qPj4+MjYt''@;'; put 'put ''Yn1IJiYodGhpcy53b3Jkc1tUXT1ILHRoaXMubGVuZ3RoKyspfWlmKDAhPT14KXtmb3IoVD10aGlzLmxlbmd0aC0xO1Q+PTA7VC0tKXRoaXMud29yZHNbVCt4XT10aGlzLndvcmRzW1RdO2ZvcihUPTA7VDx4O1QrKyl0aGlzLndvcmRzW1RdPTA7dGhpcy5sZW5ndGgrPXh9cmV0dXJuIHRoaXMu''@;'; put 'put ''c3RyaXAoKX0sdy5wcm90b3R5cGUuaXNobG49ZnVuY3Rpb24ocCl7cmV0dXJuIGcoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaGxuKHApfSx3LnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24ocCxiLHgpe3ZhciBDO2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKSxDPWI/KGItYiUyNikv''@;'; put 'put ''MjY6MDt2YXIgVD1wJTI2LEg9TWF0aC5taW4oKHAtVCkvMjYsdGhpcy5sZW5ndGgpLGo9NjcxMDg4NjNeNjcxMDg4NjM+Pj5UPDxULEU9eDtpZihDLT1ILEM9TWF0aC5tYXgoMCxDKSxFKXtmb3IodmFyIG09MDttPEg7bSsrKUUud29yZHNbbV09dGhpcy53b3Jkc1ttXTtFLmxlbmd0aD1IfWlm''@;'; put 'put ''KDAhPT1IKWlmKHRoaXMubGVuZ3RoPkgpZm9yKHRoaXMubGVuZ3RoLT1ILG09MDttPHRoaXMubGVuZ3RoO20rKyl0aGlzLndvcmRzW21dPXRoaXMud29yZHNbbStIXTtlbHNlIHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xO3ZhciBBPTA7Zm9yKG09dGhpcy5sZW5ndGgtMTttPj0wJiYo''@;'; put 'put ''MCE9PUF8fG0+PUMpO20tLSl7dmFyIGFlPTB8dGhpcy53b3Jkc1ttXTt0aGlzLndvcmRzW21dPUE8PDI2LVR8YWU+Pj5ULEE9YWUman1yZXR1cm4gRSYmMCE9PUEmJihFLndvcmRzW0UubGVuZ3RoKytdPUEpLDA9PT10aGlzLmxlbmd0aCYmKHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0x''@;'; put 'put ''KSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlzaHJuPWZ1bmN0aW9uKHAsYix4KXtyZXR1cm4gZygwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNocm4ocCxiLHgpfSx3LnByb3RvdHlwZS5zaGxuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXNobG4ocCl9LHcucHJvdG90''@;'; put 'put ''eXBlLnVzaGxuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaGxuKHApfSx3LnByb3RvdHlwZS5zaHJuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXNocm4ocCl9LHcucHJvdG90eXBlLnVzaHJuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXVz''@;'; put 'put ''aHJuKHApfSx3LnByb3RvdHlwZS50ZXN0bj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIGI9cCUyNix4PShwLWIpLzI2O3JldHVybiEodGhpcy5sZW5ndGg8PXh8fCEodGhpcy53b3Jkc1t4XSYxPDxiKSl9LHcucHJvdG90eXBlLmltYXNrbj1mdW5jdGlvbihw''@;'; put 'put ''KXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIGI9cCUyNix4PShwLWIpLzI2O3JldHVybiBnKDA9PT10aGlzLm5lZ2F0aXZlLCJpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJlcnMiKSx0aGlzLmxlbmd0aDw9eD90aGlzOigwIT09YiYmeCsrLHRoaXMubGVuZ3Ro''@;'; put 'put ''PU1hdGgubWluKHgsdGhpcy5sZW5ndGgpLDAhPT1iJiYodGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSY9NjcxMDg4NjNeNjcxMDg4NjM+Pj5iPDxiKSx0aGlzLnN0cmlwKCkpfSx3LnByb3RvdHlwZS5tYXNrbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltYXNrbihwKX0sdy5w''@;'; put 'put ''cm90b3R5cGUuaWFkZG49ZnVuY3Rpb24ocCl7cmV0dXJuIGcoIm51bWJlciI9PXR5cGVvZiBwKSxnKHA8NjcxMDg4NjQpLHA8MD90aGlzLmlzdWJuKC1wKTowIT09dGhpcy5uZWdhdGl2ZT8xPT09dGhpcy5sZW5ndGgmJigwfHRoaXMud29yZHNbMF0pPHA/KHRoaXMud29yZHNbMF09cC0oMHx0''@;'; put 'put ''aGlzLndvcmRzWzBdKSx0aGlzLm5lZ2F0aXZlPTAsdGhpcyk6KHRoaXMubmVnYXRpdmU9MCx0aGlzLmlzdWJuKHApLHRoaXMubmVnYXRpdmU9MSx0aGlzKTp0aGlzLl9pYWRkbihwKX0sdy5wcm90b3R5cGUuX2lhZGRuPWZ1bmN0aW9uKHApe3RoaXMud29yZHNbMF0rPXA7Zm9yKHZhciBiPTA7''@;'; put 'put ''Yjx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tiXT49NjcxMDg4NjQ7YisrKXRoaXMud29yZHNbYl0tPTY3MTA4ODY0LGI9PT10aGlzLmxlbmd0aC0xP3RoaXMud29yZHNbYisxXT0xOnRoaXMud29yZHNbYisxXSsrO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxiKzEp''@;'; put 'put ''LHRoaXN9LHcucHJvdG90eXBlLmlzdWJuPWZ1bmN0aW9uKHApe2lmKGcoIm51bWJlciI9PXR5cGVvZiBwKSxnKHA8NjcxMDg4NjQpLHA8MClyZXR1cm4gdGhpcy5pYWRkbigtcCk7aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGRuKHApLHRoaXMu''@;'; put 'put ''bmVnYXRpdmU9MSx0aGlzO2lmKHRoaXMud29yZHNbMF0tPXAsMT09PXRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzWzBdPDApdGhpcy53b3Jkc1swXT0tdGhpcy53b3Jkc1swXSx0aGlzLm5lZ2F0aXZlPTE7ZWxzZSBmb3IodmFyIGI9MDtiPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW2JdPDA7Yisr''@;'; put 'put ''KXRoaXMud29yZHNbYl0rPTY3MTA4ODY0LHRoaXMud29yZHNbYisxXS09MTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5hZGRuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaWFkZG4ocCl9LHcucHJvdG90eXBlLnN1Ym49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMu''@;'; put 'put ''Y2xvbmUoKS5pc3VibihwKX0sdy5wcm90b3R5cGUuaWFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpc30sdy5wcm90b3R5cGUuYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWJzKCl9LHcucHJvdG90eXBlLl9pc2hsbnN1Ym11bD1mdW5jdGlvbihw''@;'; put 'put ''LGIseCl7dmFyIFQ7dGhpcy5fZXhwYW5kKHAubGVuZ3RoK3gpO3ZhciBILGo9MDtmb3IoVD0wO1Q8cC5sZW5ndGg7VCsrKXtIPSgwfHRoaXMud29yZHNbVCt4XSkrajt2YXIgRT0oMHxwLndvcmRzW1RdKSpiO2o9KChILT02NzEwODg2MyZFKT4+MjYpLShFLzY3MTA4ODY0fDApLHRoaXMud29y''@;'; put 'put ''ZHNbVCt4XT02NzEwODg2MyZIfWZvcig7VDx0aGlzLmxlbmd0aC14O1QrKylqPShIPSgwfHRoaXMud29yZHNbVCt4XSkraik+PjI2LHRoaXMud29yZHNbVCt4XT02NzEwODg2MyZIO2lmKDA9PT1qKXJldHVybiB0aGlzLnN0cmlwKCk7Zm9yKGcoLTE9PT1qKSxqPTAsVD0wO1Q8dGhpcy5sZW5n''@;'; put 'put ''dGg7VCsrKWo9KEg9LSgwfHRoaXMud29yZHNbVF0pK2opPj4yNix0aGlzLndvcmRzW1RdPTY3MTA4ODYzJkg7cmV0dXJuIHRoaXMubmVnYXRpdmU9MSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl93b3JkRGl2PWZ1bmN0aW9uKHAsYil7dmFyIHgsQz10aGlzLmNsb25lKCksVD1wLEg9MHxU''@;'; put 'put ''LndvcmRzW1QubGVuZ3RoLTFdOzAhPSh4PTI2LXRoaXMuX2NvdW50Qml0cyhIKSkmJihUPVQudXNobG4oeCksQy5pdXNobG4oeCksSD0wfFQud29yZHNbVC5sZW5ndGgtMV0pO3ZhciBtLEU9Qy5sZW5ndGgtVC5sZW5ndGg7aWYoIm1vZCIhPT1iKXsobT1uZXcgdyhudWxsKSkubGVuZ3RoPUUr''@;'; put 'put ''MSxtLndvcmRzPW5ldyBBcnJheShtLmxlbmd0aCk7Zm9yKHZhciBBPTA7QTxtLmxlbmd0aDtBKyspbS53b3Jkc1tBXT0wfXZhciBhZT1DLmNsb25lKCkuX2lzaGxuc3VibXVsKFQsMSxFKTswPT09YWUubmVnYXRpdmUmJihDPWFlLG0mJihtLndvcmRzW0VdPTEpKTtmb3IodmFyIHRlPUUtMTt0''@;'; put 'put ''ZT49MDt0ZS0tKXt2YXIgc2U9NjcxMDg4NjQqKDB8Qy53b3Jkc1tULmxlbmd0aCt0ZV0pKygwfEMud29yZHNbVC5sZW5ndGgrdGUtMV0pO2ZvcihzZT1NYXRoLm1pbihzZS9IfDAsNjcxMDg4NjMpLEMuX2lzaGxuc3VibXVsKFQsc2UsdGUpOzAhPT1DLm5lZ2F0aXZlOylzZS0tLEMubmVnYXRp''@;'; put 'put ''dmU9MCxDLl9pc2hsbnN1Ym11bChULDEsdGUpLEMuaXNaZXJvKCl8fChDLm5lZ2F0aXZlXj0xKTttJiYobS53b3Jkc1t0ZV09c2UpfXJldHVybiBtJiZtLnN0cmlwKCksQy5zdHJpcCgpLCJkaXYiIT09YiYmMCE9PXgmJkMuaXVzaHJuKHgpLHtkaXY6bXx8bnVsbCxtb2Q6Q319LHcucHJvdG90''@;'; put 'put ''eXBlLmRpdm1vZD1mdW5jdGlvbihwLGIseCl7cmV0dXJuIGcoIXAuaXNaZXJvKCkpLHRoaXMuaXNaZXJvKCk/e2RpdjpuZXcgdygwKSxtb2Q6bmV3IHcoMCl9OjAhPT10aGlzLm5lZ2F0aXZlJiYwPT09cC5uZWdhdGl2ZT8oSD10aGlzLm5lZygpLmRpdm1vZChwLGIpLCJtb2QiIT09YiYmKEM9''@;'; put 'put ''SC5kaXYubmVnKCkpLCJkaXYiIT09YiYmKFQ9SC5tb2QubmVnKCkseCYmMCE9PVQubmVnYXRpdmUmJlQuaWFkZChwKSkse2RpdjpDLG1vZDpUfSk6MD09PXRoaXMubmVnYXRpdmUmJjAhPT1wLm5lZ2F0aXZlPyhIPXRoaXMuZGl2bW9kKHAubmVnKCksYiksIm1vZCIhPT1iJiYoQz1ILmRpdi5u''@;'; put 'put ''ZWcoKSkse2RpdjpDLG1vZDpILm1vZH0pOnRoaXMubmVnYXRpdmUmcC5uZWdhdGl2ZT8oSD10aGlzLm5lZygpLmRpdm1vZChwLm5lZygpLGIpLCJkaXYiIT09YiYmKFQ9SC5tb2QubmVnKCkseCYmMCE9PVQubmVnYXRpdmUmJlQuaXN1YihwKSkse2RpdjpILmRpdixtb2Q6VH0pOnAubGVuZ3Ro''@;'; put 'put ''PnRoaXMubGVuZ3RofHx0aGlzLmNtcChwKTwwP3tkaXY6bmV3IHcoMCksbW9kOnRoaXN9OjE9PT1wLmxlbmd0aD8iZGl2Ij09PWI/e2Rpdjp0aGlzLmRpdm4ocC53b3Jkc1swXSksbW9kOm51bGx9OiJtb2QiPT09Yj97ZGl2Om51bGwsbW9kOm5ldyB3KHRoaXMubW9kbihwLndvcmRzWzBdKSl9''@;'; put 'put ''OntkaXY6dGhpcy5kaXZuKHAud29yZHNbMF0pLG1vZDpuZXcgdyh0aGlzLm1vZG4ocC53b3Jkc1swXSkpfTp0aGlzLl93b3JkRGl2KHAsYik7dmFyIEMsVCxIfSx3LnByb3RvdHlwZS5kaXY9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuZGl2bW9kKHAsImRpdiIsITEpLmRpdn0sdy5wcm90b3R5''@;'; put 'put ''cGUubW9kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmRpdm1vZChwLCJtb2QiLCExKS5tb2R9LHcucHJvdG90eXBlLnVtb2Q9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuZGl2bW9kKHAsIm1vZCIsITApLm1vZH0sdy5wcm90b3R5cGUuZGl2Um91bmQ9ZnVuY3Rpb24ocCl7dmFyIGI9dGhpcy5k''@;'; put 'put ''aXZtb2QocCk7aWYoYi5tb2QuaXNaZXJvKCkpcmV0dXJuIGIuZGl2O3ZhciB4PTAhPT1iLmRpdi5uZWdhdGl2ZT9iLm1vZC5pc3ViKHApOmIubW9kLEM9cC51c2hybigxKSxUPXAuYW5kbG4oMSksSD14LmNtcChDKTtyZXR1cm4gSDwwfHwxPT09VCYmMD09PUg/Yi5kaXY6MCE9PWIuZGl2Lm5l''@;'; put 'put ''Z2F0aXZlP2IuZGl2LmlzdWJuKDEpOmIuZGl2LmlhZGRuKDEpfSx3LnByb3RvdHlwZS5tb2RuPWZ1bmN0aW9uKHApe2cocDw9NjcxMDg4NjMpO2Zvcih2YXIgYj0oMTw8MjYpJXAseD0wLEM9dGhpcy5sZW5ndGgtMTtDPj0wO0MtLSl4PShiKngrKDB8dGhpcy53b3Jkc1tDXSkpJXA7cmV0dXJu''@;'; put 'put ''IHh9LHcucHJvdG90eXBlLmlkaXZuPWZ1bmN0aW9uKHApe2cocDw9NjcxMDg4NjMpO2Zvcih2YXIgYj0wLHg9dGhpcy5sZW5ndGgtMTt4Pj0wO3gtLSl7dmFyIEM9KDB8dGhpcy53b3Jkc1t4XSkrNjcxMDg4NjQqYjt0aGlzLndvcmRzW3hdPUMvcHwwLGI9QyVwfXJldHVybiB0aGlzLnN0cmlw''@;'; put 'put ''KCl9LHcucHJvdG90eXBlLmRpdm49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pZGl2bihwKX0sdy5wcm90b3R5cGUuZWdjZD1mdW5jdGlvbihwKXtnKDA9PT1wLm5lZ2F0aXZlKSxnKCFwLmlzWmVybygpKTt2YXIgYj10aGlzLHg9cC5jbG9uZSgpO2I9MCE9PWIubmVnYXRpdmU/''@;'; put 'put ''Yi51bW9kKHApOmIuY2xvbmUoKTtmb3IodmFyIEM9bmV3IHcoMSksVD1uZXcgdygwKSxIPW5ldyB3KDApLGo9bmV3IHcoMSksRT0wO2IuaXNFdmVuKCkmJnguaXNFdmVuKCk7KWIuaXVzaHJuKDEpLHguaXVzaHJuKDEpLCsrRTtmb3IodmFyIG09eC5jbG9uZSgpLEE9Yi5jbG9uZSgpOyFiLmlz''@;'; put 'put ''WmVybygpOyl7Zm9yKHZhciBhZT0wLHRlPTE7IShiLndvcmRzWzBdJnRlKSYmYWU8MjY7KythZSx0ZTw8PTEpO2lmKGFlPjApZm9yKGIuaXVzaHJuKGFlKTthZS0tID4wOykoQy5pc09kZCgpfHxULmlzT2RkKCkpJiYoQy5pYWRkKG0pLFQuaXN1YihBKSksQy5pdXNocm4oMSksVC5pdXNocm4o''@;'; put 'put ''MSk7Zm9yKHZhciBzZT0wLHdlPTE7ISh4LndvcmRzWzBdJndlKSYmc2U8MjY7KytzZSx3ZTw8PTEpO2lmKHNlPjApZm9yKHguaXVzaHJuKHNlKTtzZS0tID4wOykoSC5pc09kZCgpfHxqLmlzT2RkKCkpJiYoSC5pYWRkKG0pLGouaXN1YihBKSksSC5pdXNocm4oMSksai5pdXNocm4oMSk7Yi5j''@;'; put 'put ''bXAoeCk+PTA/KGIuaXN1Yih4KSxDLmlzdWIoSCksVC5pc3ViKGopKTooeC5pc3ViKGIpLEguaXN1YihDKSxqLmlzdWIoVCkpfXJldHVybnthOkgsYjpqLGdjZDp4Lml1c2hsbihFKX19LHcucHJvdG90eXBlLl9pbnZtcD1mdW5jdGlvbihwKXtnKDA9PT1wLm5lZ2F0aXZlKSxnKCFwLmlzWmVy''@;'; put 'put ''bygpKTt2YXIgYWUsYj10aGlzLHg9cC5jbG9uZSgpO2I9MCE9PWIubmVnYXRpdmU/Yi51bW9kKHApOmIuY2xvbmUoKTtmb3IodmFyIEM9bmV3IHcoMSksVD1uZXcgdygwKSxIPXguY2xvbmUoKTtiLmNtcG4oMSk+MCYmeC5jbXBuKDEpPjA7KXtmb3IodmFyIGo9MCxFPTE7IShiLndvcmRzWzBd''@;'; put 'put ''JkUpJiZqPDI2OysraixFPDw9MSk7aWYoaj4wKWZvcihiLml1c2hybihqKTtqLS0gPjA7KUMuaXNPZGQoKSYmQy5pYWRkKEgpLEMuaXVzaHJuKDEpO2Zvcih2YXIgbT0wLEE9MTshKHgud29yZHNbMF0mQSkmJm08MjY7KyttLEE8PD0xKTtpZihtPjApZm9yKHguaXVzaHJuKG0pO20tLSA+MDsp''@;'; put 'put ''VC5pc09kZCgpJiZULmlhZGQoSCksVC5pdXNocm4oMSk7Yi5jbXAoeCk+PTA/KGIuaXN1Yih4KSxDLmlzdWIoVCkpOih4LmlzdWIoYiksVC5pc3ViKEMpKX1yZXR1cm4oYWU9MD09PWIuY21wbigxKT9DOlQpLmNtcG4oMCk8MCYmYWUuaWFkZChwKSxhZX0sdy5wcm90b3R5cGUuZ2NkPWZ1bmN0''@;'; put 'put ''aW9uKHApe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIHAuYWJzKCk7aWYocC5pc1plcm8oKSlyZXR1cm4gdGhpcy5hYnMoKTt2YXIgYj10aGlzLmNsb25lKCkseD1wLmNsb25lKCk7Yi5uZWdhdGl2ZT0wLHgubmVnYXRpdmU9MDtmb3IodmFyIEM9MDtiLmlzRXZlbigpJiZ4LmlzRXZlbigpO0Mr''@;'; put 'put ''KyliLml1c2hybigxKSx4Lml1c2hybigxKTtmb3IoOzspe2Zvcig7Yi5pc0V2ZW4oKTspYi5pdXNocm4oMSk7Zm9yKDt4LmlzRXZlbigpOyl4Lml1c2hybigxKTt2YXIgVD1iLmNtcCh4KTtpZihUPDApe3ZhciBIPWI7Yj14LHg9SH1lbHNlIGlmKDA9PT1UfHwwPT09eC5jbXBuKDEpKWJyZWFr''@;'; put 'put ''O2IuaXN1Yih4KX1yZXR1cm4geC5pdXNobG4oQyl9LHcucHJvdG90eXBlLmludm09ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuZWdjZChwKS5hLnVtb2QocCl9LHcucHJvdG90eXBlLmlzRXZlbj1mdW5jdGlvbigpe3JldHVybiEoMSZ0aGlzLndvcmRzWzBdKX0sdy5wcm90b3R5cGUuaXNPZGQ9''@;'; put 'put ''ZnVuY3Rpb24oKXtyZXR1cm4hKDEmfnRoaXMud29yZHNbMF0pfSx3LnByb3RvdHlwZS5hbmRsbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy53b3Jkc1swXSZwfSx3LnByb3RvdHlwZS5iaW5jbj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCk7dmFyIGI9cCUyNix4PShwLWIpLzI2''@;'; put 'put ''LEM9MTw8YjtpZih0aGlzLmxlbmd0aDw9eClyZXR1cm4gdGhpcy5fZXhwYW5kKHgrMSksdGhpcy53b3Jkc1t4XXw9Qyx0aGlzO2Zvcih2YXIgVD1DLEg9eDswIT09VCYmSDx0aGlzLmxlbmd0aDtIKyspe3ZhciBqPTB8dGhpcy53b3Jkc1tIXTtUPShqKz1UKT4+PjI2LHRoaXMud29yZHNbSF09''@;'; put 'put ''aiY9NjcxMDg4NjN9cmV0dXJuIDAhPT1UJiYodGhpcy53b3Jkc1tIXT1ULHRoaXMubGVuZ3RoKyspLHRoaXN9LHcucHJvdG90eXBlLmlzWmVybz1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdfSx3LnByb3RvdHlwZS5jbXBuPWZ1bmN0aW9uKHAp''@;'; put 'put ''e3ZhciB4LGI9cDwwO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYhYilyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmYilyZXR1cm4gMTtpZih0aGlzLnN0cmlwKCksdGhpcy5sZW5ndGg+MSl4PTE7ZWxzZXtiJiYocD0tcCksZyhwPD02NzEwODg2MywiTnVtYmVyIGlzIHRvbyBiaWciKTt2''@;'; put 'put ''YXIgQz0wfHRoaXMud29yZHNbMF07eD1DPT09cD8wOkM8cD8tMToxfXJldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC14Onh9LHcucHJvdG90eXBlLmNtcD1mdW5jdGlvbihwKXtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PXAubmVnYXRpdmUpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRp''@;'; put 'put ''dmUmJjAhPT1wLm5lZ2F0aXZlKXJldHVybiAxO3ZhciBiPXRoaXMudWNtcChwKTtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtYjpifSx3LnByb3RvdHlwZS51Y21wPWZ1bmN0aW9uKHApe2lmKHRoaXMubGVuZ3RoPnAubGVuZ3RoKXJldHVybiAxO2lmKHRoaXMubGVuZ3RoPHAubGVuZ3Ro''@;'; put 'put ''KXJldHVybi0xO2Zvcih2YXIgYj0wLHg9dGhpcy5sZW5ndGgtMTt4Pj0wO3gtLSl7dmFyIEM9MHx0aGlzLndvcmRzW3hdLFQ9MHxwLndvcmRzW3hdO2lmKEMhPT1UKXtDPFQ/Yj0tMTpDPlQmJihiPTEpO2JyZWFrfX1yZXR1cm4gYn0sdy5wcm90b3R5cGUuZ3RuPWZ1bmN0aW9uKHApe3JldHVy''@;'; put 'put ''biAxPT09dGhpcy5jbXBuKHApfSx3LnByb3RvdHlwZS5ndD1mdW5jdGlvbihwKXtyZXR1cm4gMT09PXRoaXMuY21wKHApfSx3LnByb3RvdHlwZS5ndGVuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNtcG4ocCk+PTB9LHcucHJvdG90eXBlLmd0ZT1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5j''@;'; put 'put ''bXAocCk+PTB9LHcucHJvdG90eXBlLmx0bj1mdW5jdGlvbihwKXtyZXR1cm4tMT09PXRoaXMuY21wbihwKX0sdy5wcm90b3R5cGUubHQ9ZnVuY3Rpb24ocCl7cmV0dXJuLTE9PT10aGlzLmNtcChwKX0sdy5wcm90b3R5cGUubHRlbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbXBuKHApPD0w''@;'; put 'put ''fSx3LnByb3RvdHlwZS5sdGU9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY21wKHApPD0wfSx3LnByb3RvdHlwZS5lcW49ZnVuY3Rpb24ocCl7cmV0dXJuIDA9PT10aGlzLmNtcG4ocCl9LHcucHJvdG90eXBlLmVxPWZ1bmN0aW9uKHApe3JldHVybiAwPT09dGhpcy5jbXAocCl9LHcucmVkPWZ1''@;'; put 'put ''bmN0aW9uKHApe3JldHVybiBuZXcgU2UocCl9LHcucHJvdG90eXBlLnRvUmVkPWZ1bmN0aW9uKHApe3JldHVybiBnKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLGcoMD09PXRoaXMubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRp''@;'; put 'put ''dmVzIikscC5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKHApfSx3LnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLnJlZC5jb252ZXJ0RnJvbSh0''@;'; put 'put ''aGlzKX0sdy5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLnJlZD1wLHRoaXN9LHcucHJvdG90eXBlLmZvcmNlUmVkPWZ1bmN0aW9uKHApe3JldHVybiBnKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMuX2Zv''@;'; put 'put ''cmNlUmVkKHApfSx3LnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5hZGQodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlz''@;'; put 'put ''LnJlZCwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pYWRkKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZFN1Yj1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnN1''@;'; put 'put ''Yih0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlzdWIodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkU2hsPWZ1bmN0aW9uKHApe3JldHVybiBnKHRo''@;'; put 'put ''aXMucmVkLCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc2hsKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZE11bD1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92''@;'; put 'put ''ZXJpZnkyKHRoaXMscCksdGhpcy5yZWQubXVsKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLHApLHRoaXMucmVkLmltdWwo''@;'; put 'put ''dGhpcyxwKX0sdy5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXIodGhpcyl9LHcucHJvdG90eXBlLnJlZElTcXI9ZnVuY3Rp''@;'; put 'put ''b24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZFNxcnQg''@;'; put 'put ''d29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0sdy5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRo''@;'; put 'put ''aXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9LHcucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQubmVn''@;'; put 'put ''KHRoaXMpfSx3LnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQmJiFwLnJlZCwicmVkUG93KG5vcm1hbE51bSkiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3codGhpcyxwKX07dmFyIG5lPXtrMjU2Om51bGwscDIyNDpudWxsLHAxOTI6''@;'; put 'put ''bnVsbCxwMjU1MTk6bnVsbH07ZnVuY3Rpb24gaWUoVixwKXt0aGlzLm5hbWU9Vix0aGlzLnA9bmV3IHcocCwxNiksdGhpcy5uPXRoaXMucC5iaXRMZW5ndGgoKSx0aGlzLms9bmV3IHcoMSkuaXVzaGxuKHRoaXMubikuaXN1Yih0aGlzLnApLHRoaXMudG1wPXRoaXMuX3RtcCgpfWZ1bmN0aW9u''@;'; put 'put ''IGxlKCl7aWUuY2FsbCh0aGlzLCJrMjU2IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYiKX1mdW5jdGlvbiBtZSgpe2llLmNhbGwodGhpcywicDIyNCIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZm''@;'; put 'put ''ZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxIil9ZnVuY3Rpb24gX2UoKXtpZS5jYWxsKHRoaXMsInAxOTIiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZiIpfWZ1bmN0aW9uIFRlKCl7aWUuY2FsbCh0aGlzLCIyNTUxOSIsIjdm''@;'; put 'put ''ZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiKX1mdW5jdGlvbiBTZShWKXtpZigic3RyaW5nIj09dHlwZW9mIFYpe3ZhciBwPXcuX3ByaW1lKFYpO3RoaXMubT1wLnAsdGhpcy5wcmltZT1wfWVsc2UgZyhWLmd0bigxKSwi''@;'; put 'put ''bW9kdWx1cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxIiksdGhpcy5tPVYsdGhpcy5wcmltZT1udWxsfWZ1bmN0aW9uIGplKFYpe1NlLmNhbGwodGhpcyxWKSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0aGlzLnNoaWZ0JTI2IT0wJiYodGhpcy5zaGlmdCs9MjYtdGhpcy5zaGlmdCUy''@;'; put 'put ''NiksdGhpcy5yPW5ldyB3KDEpLml1c2hsbih0aGlzLnNoaWZ0KSx0aGlzLnIyPXRoaXMuaW1vZCh0aGlzLnIuc3FyKCkpLHRoaXMucmludj10aGlzLnIuX2ludm1wKHRoaXMubSksdGhpcy5taW52PXRoaXMucmludi5tdWwodGhpcy5yKS5pc3VibigxKS5kaXYodGhpcy5tKSx0aGlzLm1pbnY9''@;'; put 'put ''dGhpcy5taW52LnVtb2QodGhpcy5yKSx0aGlzLm1pbnY9dGhpcy5yLnN1Yih0aGlzLm1pbnYpfWllLnByb3RvdHlwZS5fdG1wPWZ1bmN0aW9uKCl7dmFyIHA9bmV3IHcobnVsbCk7cmV0dXJuIHAud29yZHM9bmV3IEFycmF5KE1hdGguY2VpbCh0aGlzLm4vMTMpKSxwfSxpZS5wcm90b3R5cGUu''@;'; put 'put ''aXJlZHVjZT1mdW5jdGlvbihwKXt2YXIgeCxiPXA7ZG97dGhpcy5zcGxpdChiLHRoaXMudG1wKSx4PShiPShiPXRoaXMuaW11bEsoYikpLmlhZGQodGhpcy50bXApKS5iaXRMZW5ndGgoKX13aGlsZSh4PnRoaXMubik7dmFyIEM9eDx0aGlzLm4/LTE6Yi51Y21wKHRoaXMucCk7cmV0dXJuIDA9''@;'; put 'put ''PT1DPyhiLndvcmRzWzBdPTAsYi5sZW5ndGg9MSk6Qz4wP2IuaXN1Yih0aGlzLnApOnZvaWQgMCE9PWIuc3RyaXA/Yi5zdHJpcCgpOmIuX3N0cmlwKCksYn0saWUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKHAsYil7cC5pdXNocm4odGhpcy5uLDAsYil9LGllLnByb3RvdHlwZS5pbXVsSz1m''@;'; put 'put ''dW5jdGlvbihwKXtyZXR1cm4gcC5pbXVsKHRoaXMuayl9LEIobGUsaWUpLGxlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihwLGIpe2Zvcih2YXIgeD00MTk0MzAzLEM9TWF0aC5taW4ocC5sZW5ndGgsOSksVD0wO1Q8QztUKyspYi53b3Jkc1tUXT1wLndvcmRzW1RdO2lmKGIubGVuZ3RoPUMs''@;'; put 'put ''cC5sZW5ndGg8PTkpcmV0dXJuIHAud29yZHNbMF09MCx2b2lkKHAubGVuZ3RoPTEpO3ZhciBIPXAud29yZHNbOV07Zm9yKGIud29yZHNbYi5sZW5ndGgrK109SCZ4LFQ9MTA7VDxwLmxlbmd0aDtUKyspe3ZhciBqPTB8cC53b3Jkc1tUXTtwLndvcmRzW1QtMTBdPShqJngpPDw0fEg+Pj4yMixI''@;'; put 'put ''PWp9cC53b3Jkc1tULTEwXT1IPj4+PTIyLHAubGVuZ3RoLT0wPT09SCYmcC5sZW5ndGg+MTA/MTA6OX0sbGUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHApe3Aud29yZHNbcC5sZW5ndGhdPTAscC53b3Jkc1twLmxlbmd0aCsxXT0wLHAubGVuZ3RoKz0yO2Zvcih2YXIgYj0wLHg9MDt4PHAu''@;'; put 'put ''bGVuZ3RoO3grKyl7dmFyIEM9MHxwLndvcmRzW3hdO3Aud29yZHNbeF09NjcxMDg4NjMmKGIrPTk3NypDKSxiPTY0KkMrKGIvNjcxMDg4NjR8MCl9cmV0dXJuIDA9PT1wLndvcmRzW3AubGVuZ3RoLTFdJiYocC5sZW5ndGgtLSwwPT09cC53b3Jkc1twLmxlbmd0aC0xXSYmcC5sZW5ndGgtLSks''@;'; put 'put ''cH0sQihtZSxpZSksQihfZSxpZSksQihUZSxpZSksVGUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHApe2Zvcih2YXIgYj0wLHg9MDt4PHAubGVuZ3RoO3grKyl7dmFyIEM9MTkqKDB8cC53b3Jkc1t4XSkrYixUPTY3MTA4ODYzJkM7Qz4+Pj0yNixwLndvcmRzW3hdPVQsYj1DfXJldHVybiAw''@;'; put 'put ''IT09YiYmKHAud29yZHNbcC5sZW5ndGgrK109YikscH0sdy5fcHJpbWU9ZnVuY3Rpb24ocCl7aWYobmVbcF0pcmV0dXJuIG5lW3BdO3ZhciBiO2lmKCJrMjU2Ij09PXApYj1uZXcgbGU7ZWxzZSBpZigicDIyNCI9PT1wKWI9bmV3IG1lO2Vsc2UgaWYoInAxOTIiPT09cCliPW5ldyBfZTtlbHNl''@;'; put 'put ''e2lmKCJwMjU1MTkiIT09cCl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gcHJpbWUgIitwKTtiPW5ldyBUZX1yZXR1cm4gbmVbcF09YixifSxTZS5wcm90b3R5cGUuX3ZlcmlmeTE9ZnVuY3Rpb24ocCl7ZygwPT09cC5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxn''@;'; put 'put ''KHAucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LFNlLnByb3RvdHlwZS5fdmVyaWZ5Mj1mdW5jdGlvbihwLGIpe2coIShwLm5lZ2F0aXZlfGIubmVnYXRpdmUpLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLGcocC5yZWQmJnAucmVkPT09Yi5yZWQsInJl''@;'; put 'put ''ZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sU2UucHJvdG90eXBlLmltb2Q9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMucHJpbWU/dGhpcy5wcmltZS5pcmVkdWNlKHApLl9mb3JjZVJlZCh0aGlzKTpwLnVtb2QodGhpcy5tKS5fZm9yY2VSZWQodGhpcyl9LFNlLnByb3RvdHlwZS5u''@;'; put 'put ''ZWc9ZnVuY3Rpb24ocCl7cmV0dXJuIHAuaXNaZXJvKCk/cC5jbG9uZSgpOnRoaXMubS5zdWIocCkuX2ZvcmNlUmVkKHRoaXMpfSxTZS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHAsYil7dGhpcy5fdmVyaWZ5MihwLGIpO3ZhciB4PXAuYWRkKGIpO3JldHVybiB4LmNtcCh0aGlzLm0pPj0wJiZ4''@;'; put 'put ''LmlzdWIodGhpcy5tKSx4Ll9mb3JjZVJlZCh0aGlzKX0sU2UucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24ocCxiKXt0aGlzLl92ZXJpZnkyKHAsYik7dmFyIHg9cC5pYWRkKGIpO3JldHVybiB4LmNtcCh0aGlzLm0pPj0wJiZ4LmlzdWIodGhpcy5tKSx4fSxTZS5wcm90b3R5cGUuc3ViPWZ1bmN0''@;'; put 'put ''aW9uKHAsYil7dGhpcy5fdmVyaWZ5MihwLGIpO3ZhciB4PXAuc3ViKGIpO3JldHVybiB4LmNtcG4oMCk8MCYmeC5pYWRkKHRoaXMubSkseC5fZm9yY2VSZWQodGhpcyl9LFNlLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKHAsYil7dGhpcy5fdmVyaWZ5MihwLGIpO3ZhciB4PXAuaXN1YihiKTty''@;'; put 'put ''ZXR1cm4geC5jbXBuKDApPDAmJnguaWFkZCh0aGlzLm0pLHh9LFNlLnByb3RvdHlwZS5zaGw9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MShwKSx0aGlzLmltb2QocC51c2hsbihiKSl9LFNlLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHAsYil7cmV0dXJuIHRoaXMuX3Zlcmlm''@;'; put 'put ''eTIocCxiKSx0aGlzLmltb2QocC5pbXVsKGIpKX0sU2UucHJvdG90eXBlLm11bD1mdW5jdGlvbihwLGIpe3JldHVybiB0aGlzLl92ZXJpZnkyKHAsYiksdGhpcy5pbW9kKHAubXVsKGIpKX0sU2UucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuaW11bChwLHAuY2xvbmUo''@;'; put 'put ''KSl9LFNlLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubXVsKHAscCl9LFNlLnByb3RvdHlwZS5zcXJ0PWZ1bmN0aW9uKHApe2lmKHAuaXNaZXJvKCkpcmV0dXJuIHAuY2xvbmUoKTt2YXIgYj10aGlzLm0uYW5kbG4oMyk7aWYoZyhiJTI9PTEpLDM9PT1iKXt2YXIgeD10''@;'; put 'put ''aGlzLm0uYWRkKG5ldyB3KDEpKS5pdXNocm4oMik7cmV0dXJuIHRoaXMucG93KHAseCl9Zm9yKHZhciBDPXRoaXMubS5zdWJuKDEpLFQ9MDshQy5pc1plcm8oKSYmMD09PUMuYW5kbG4oMSk7KVQrKyxDLml1c2hybigxKTtnKCFDLmlzWmVybygpKTt2YXIgSD1uZXcgdygxKS50b1JlZCh0aGlz''@;'; put 'put ''KSxqPUgucmVkTmVnKCksRT10aGlzLm0uc3VibigxKS5pdXNocm4oMSksbT10aGlzLm0uYml0TGVuZ3RoKCk7Zm9yKG09bmV3IHcoMiptKm0pLnRvUmVkKHRoaXMpOzAhPT10aGlzLnBvdyhtLEUpLmNtcChqKTspbS5yZWRJQWRkKGopO2Zvcih2YXIgQT10aGlzLnBvdyhtLEMpLGFlPXRoaXMu''@;'; put 'put ''cG93KHAsQy5hZGRuKDEpLml1c2hybigxKSksdGU9dGhpcy5wb3cocCxDKSxzZT1UOzAhPT10ZS5jbXAoSCk7KXtmb3IodmFyIHdlPXRlLFVlPTA7MCE9PXdlLmNtcChIKTtVZSsrKXdlPXdlLnJlZFNxcigpO2coVWU8c2UpO3ZhciBKZT10aGlzLnBvdyhBLG5ldyB3KDEpLml1c2hsbihzZS1V''@;'; put 'put ''ZS0xKSk7YWU9YWUucmVkTXVsKEplKSxBPUplLnJlZFNxcigpLHRlPXRlLnJlZE11bChBKSxzZT1VZX1yZXR1cm4gYWV9LFNlLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHApe3ZhciBiPXAuX2ludm1wKHRoaXMubSk7cmV0dXJuIDAhPT1iLm5lZ2F0aXZlPyhiLm5lZ2F0aXZlPTAsdGhpcy5p''@;'; put 'put ''bW9kKGIpLnJlZE5lZygpKTp0aGlzLmltb2QoYil9LFNlLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24ocCxiKXtpZihiLmlzWmVybygpKXJldHVybiBuZXcgdygxKS50b1JlZCh0aGlzKTtpZigwPT09Yi5jbXBuKDEpKXJldHVybiBwLmNsb25lKCk7dmFyIEM9bmV3IEFycmF5KDE2KTtDWzBdPW5l''@;'; put 'put ''dyB3KDEpLnRvUmVkKHRoaXMpLENbMV09cDtmb3IodmFyIFQ9MjtUPEMubGVuZ3RoO1QrKylDW1RdPXRoaXMubXVsKENbVC0xXSxwKTt2YXIgSD1DWzBdLGo9MCxFPTAsbT1iLmJpdExlbmd0aCgpJTI2O2ZvcigwPT09bSYmKG09MjYpLFQ9Yi5sZW5ndGgtMTtUPj0wO1QtLSl7Zm9yKHZhciBB''@;'; put 'put ''PWIud29yZHNbVF0sYWU9bS0xO2FlPj0wO2FlLS0pe3ZhciB0ZT1BPj5hZSYxO0ghPT1DWzBdJiYoSD10aGlzLnNxcihIKSksMCE9PXRlfHwwIT09aj8oajw8PTEsanw9dGUsKDQ9PSsrRXx8MD09PVQmJjA9PT1hZSkmJihIPXRoaXMubXVsKEgsQ1tqXSksRT0wLGo9MCkpOkU9MH1tPTI2fXJl''@;'; put 'put ''dHVybiBIfSxTZS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKHApe3ZhciBiPXAudW1vZCh0aGlzLm0pO3JldHVybiBiPT09cD9iLmNsb25lKCk6Yn0sU2UucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKHApe3ZhciBiPXAuY2xvbmUoKTtyZXR1cm4gYi5yZWQ9bnVsbCxifSx3''@;'; put 'put ''Lm1vbnQ9ZnVuY3Rpb24ocCl7cmV0dXJuIG5ldyBqZShwKX0sQihqZSxTZSksamUucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5pbW9kKHAudXNobG4odGhpcy5zaGlmdCkpfSxqZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24ocCl7dmFyIGI9dGhp''@;'; put 'put ''cy5pbW9kKHAubXVsKHRoaXMucmludikpO3JldHVybiBiLnJlZD1udWxsLGJ9LGplLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHAsYil7aWYocC5pc1plcm8oKXx8Yi5pc1plcm8oKSlyZXR1cm4gcC53b3Jkc1swXT0wLHAubGVuZ3RoPTEscDt2YXIgeD1wLmltdWwoYiksQz14Lm1hc2tuKHRo''@;'; put 'put ''aXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxUPXguaXN1YihDKS5pdXNocm4odGhpcy5zaGlmdCksSD1UO3JldHVybiBULmNtcCh0aGlzLm0pPj0wP0g9VC5pc3ViKHRoaXMubSk6VC5jbXBuKDApPDAmJihIPVQuaWFkZCh0aGlzLm0pKSxI''@;'; put 'put ''Ll9mb3JjZVJlZCh0aGlzKX0samUucHJvdG90eXBlLm11bD1mdW5jdGlvbihwLGIpe2lmKHAuaXNaZXJvKCl8fGIuaXNaZXJvKCkpcmV0dXJuIG5ldyB3KDApLl9mb3JjZVJlZCh0aGlzKTt2YXIgeD1wLm11bChiKSxDPXgubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tu''@;'; put 'put ''KHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLFQ9eC5pc3ViKEMpLml1c2hybih0aGlzLnNoaWZ0KSxIPVQ7cmV0dXJuIFQuY21wKHRoaXMubSk+PTA/SD1ULmlzdWIodGhpcy5tKTpULmNtcG4oMCk8MCYmKEg9VC5pYWRkKHRoaXMubSkpLEguX2ZvcmNlUmVkKHRoaXMpfSxqZS5wcm90b3R5cGUu''@;'; put 'put ''aW52bT1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5pbW9kKHAuX2ludm1wKHRoaXMubSkubXVsKHRoaXMucjIpKS5fZm9yY2VSZWQodGhpcyl9fSh1ZT15Lm5tZCh1ZSksdGhpcyl9LDYxMzg6KHVlLFgseSk9Pnt2YXIgST15KDk4MCksXz15KDkxOTkpLGc9eSg3ODU5KSxCPXkoMjE0NCksdz15''@;'; put 'put ''KDM2NjMpLFA9eSgzNDgyKSxGPXkoNDgxOCksTz15KDk1MDkpLkJ1ZmZlcjt1ZS5leHBvcnRzPWZ1bmN0aW9uKFUsVyxZKXt2YXIgcTtxPVUucGFkZGluZz9VLnBhZGRpbmc6WT8xOjQ7dmFyIG5lLGVlPUkoVSksSj1lZS5tb2R1bHVzLmJ5dGVMZW5ndGgoKTtpZihXLmxlbmd0aD5KfHxuZXcg''@;'; put 'put ''QihXKS5jbXAoZWUubW9kdWx1cyk+PTApdGhyb3cgbmV3IEVycm9yKCJkZWNyeXB0aW9uIGVycm9yIik7bmU9WT9GKG5ldyBCKFcpLGVlKTp3KFcsZWUpO3ZhciBpZT1PLmFsbG9jKEotbmUubGVuZ3RoKTtpZihuZT1PLmNvbmNhdChbaWUsbmVdLEopLDQ9PT1xKXJldHVybiBmdW5jdGlvbiB6''@;'; put 'put ''KEssVSl7dmFyIFc9Sy5tb2R1bHVzLmJ5dGVMZW5ndGgoKSxZPVAoInNoYTEiKS51cGRhdGUoTy5hbGxvYygwKSkuZGlnZXN0KCkscT1ZLmxlbmd0aDtpZigwIT09VVswXSl0aHJvdyBuZXcgRXJyb3IoImRlY3J5cHRpb24gZXJyb3IiKTt2YXIgZWU9VS5zbGljZSgxLHErMSksSj1VLnNsaWNl''@;'; put 'put ''KHErMSksbmU9ZyhlZSxfKEoscSkpLGllPWcoSixfKG5lLFctcS0xKSk7aWYoZnVuY3Rpb24gTChLLFUpe0s9Ty5mcm9tKEspLFU9Ty5mcm9tKFUpO3ZhciBXPTAsWT1LLmxlbmd0aDtLLmxlbmd0aCE9PVUubGVuZ3RoJiYoVysrLFk9TWF0aC5taW4oSy5sZW5ndGgsVS5sZW5ndGgpKTtmb3Io''@;'; put 'put ''dmFyIHE9LTE7KytxPFk7KVcrPUtbcV1eVVtxXTtyZXR1cm4gV30oWSxpZS5zbGljZSgwLHEpKSl0aHJvdyBuZXcgRXJyb3IoImRlY3J5cHRpb24gZXJyb3IiKTtmb3IodmFyIGxlPXE7MD09PWllW2xlXTspbGUrKztpZigxIT09aWVbbGUrK10pdGhyb3cgbmV3IEVycm9yKCJkZWNyeXB0aW9u''@;'; put 'put ''IGVycm9yIik7cmV0dXJuIGllLnNsaWNlKGxlKX0oZWUsbmUpO2lmKDE9PT1xKXJldHVybiBmdW5jdGlvbiBOKEssVSxXKXtmb3IodmFyIFk9VS5zbGljZSgwLDIpLHE9MixlZT0wOzAhPT1VW3ErK107KWlmKHE+PVUubGVuZ3RoKXtlZSsrO2JyZWFrfXZhciBKPVUuc2xpY2UoMixxLTEpO2lm''@;'; put 'put ''KCgiMDAwMiIhPT1ZLnRvU3RyaW5nKCJoZXgiKSYmIVd8fCIwMDAxIiE9PVkudG9TdHJpbmcoImhleCIpJiZXKSYmZWUrKyxKLmxlbmd0aDw4JiZlZSsrLGVlKXRocm93IG5ldyBFcnJvcigiZGVjcnlwdGlvbiBlcnJvciIpO3JldHVybiBVLnNsaWNlKHEpfSgwLG5lLFkpO2lmKDM9PT1xKXJl''@;'; put 'put ''dHVybiBuZTt0aHJvdyBuZXcgRXJyb3IoInVua25vd24gcGFkZGluZyIpfX0sNjU1OToodWUsWCx5KT0+e3ZhciBJPXkoOTgwKSxfPXkoMTc5OCksZz15KDM0ODIpLEI9eSg5MTk5KSx3PXkoNzg1OSksUD15KDIxNDQpLEY9eSg0ODE4KSxPPXkoMzY2Myksej15KDk1MDkpLkJ1ZmZlcjt1ZS5l''@;'; put 'put ''eHBvcnRzPWZ1bmN0aW9uKFcsWSxxKXt2YXIgZWU7ZWU9Vy5wYWRkaW5nP1cucGFkZGluZzpxPzE6NDt2YXIgbmUsSj1JKFcpO2lmKDQ9PT1lZSluZT1mdW5jdGlvbiBOKFUsVyl7dmFyIFk9VS5tb2R1bHVzLmJ5dGVMZW5ndGgoKSxxPVcubGVuZ3RoLGVlPWcoInNoYTEiKS51cGRhdGUoei5h''@;'; put 'put ''bGxvYygwKSkuZGlnZXN0KCksSj1lZS5sZW5ndGgsbmU9MipKO2lmKHE+WS1uZS0yKXRocm93IG5ldyBFcnJvcigibWVzc2FnZSB0b28gbG9uZyIpO3ZhciBpZT16LmFsbG9jKFktcS1uZS0yKSxsZT1ZLUotMSxtZT1fKEopLF9lPXcoei5jb25jYXQoW2VlLGllLHouYWxsb2MoMSwxKSxXXSxs''@;'; put 'put ''ZSksQihtZSxsZSkpLFRlPXcobWUsQihfZSxKKSk7cmV0dXJuIG5ldyBQKHouY29uY2F0KFt6LmFsbG9jKDEpLFRlLF9lXSxZKSl9KEosWSk7ZWxzZSBpZigxPT09ZWUpbmU9ZnVuY3Rpb24gTChVLFcsWSl7dmFyIEoscT1XLmxlbmd0aCxlZT1VLm1vZHVsdXMuYnl0ZUxlbmd0aCgpO2lmKHE+''@;'; put 'put ''ZWUtMTEpdGhyb3cgbmV3IEVycm9yKCJtZXNzYWdlIHRvbyBsb25nIik7cmV0dXJuIEo9WT96LmFsbG9jKGVlLXEtMywyNTUpOmZ1bmN0aW9uIEsoVSl7Zm9yKHZhciBKLFc9ei5hbGxvY1Vuc2FmZShVKSxZPTAscT1fKDIqVSksZWU9MDtZPFU7KWVlPT09cS5sZW5ndGgmJihxPV8oMipVKSxl''@;'; put 'put ''ZT0wKSwoSj1xW2VlKytdKSYmKFdbWSsrXT1KKTtyZXR1cm4gV30oZWUtcS0zKSxuZXcgUCh6LmNvbmNhdChbei5mcm9tKFswLFk/MToyXSksSix6LmFsbG9jKDEpLFddLGVlKSl9KEosWSxxKTtlbHNle2lmKDMhPT1lZSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gcGFkZGluZyIpO2lmKChu''@;'; put 'put ''ZT1uZXcgUChZKSkuY21wKEoubW9kdWx1cyk+PTApdGhyb3cgbmV3IEVycm9yKCJkYXRhIHRvbyBsb25nIGZvciBtb2R1bHVzIil9cmV0dXJuIHE/TyhuZSxKKTpGKG5lLEopfX0sNDgxODoodWUsWCx5KT0+e3ZhciBJPXkoMjE0NCksXz15KDk1MDkpLkJ1ZmZlcjt1ZS5leHBvcnRzPWZ1bmN0''@;'; put 'put ''aW9uIGcoQix3KXtyZXR1cm4gXy5mcm9tKEIudG9SZWQoSS5tb250KHcubW9kdWx1cykpLnJlZFBvdyhuZXcgSSh3LnB1YmxpY0V4cG9uZW50KSkuZnJvbVJlZCgpLnRvQXJyYXkoKSl9fSw3ODU5OnVlPT57dWUuZXhwb3J0cz1mdW5jdGlvbih5LEkpe2Zvcih2YXIgXz15Lmxlbmd0aCxnPS0x''@;'; put 'put ''OysrZzxfOyl5W2ddXj1JW2ddO3JldHVybiB5fX0sMzY4OToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt5LnIoWCkseS5kKFgse2RlY29kZTooKT0+U2UsZGVmYXVsdDooKT0+eCxlbmNvZGU6KCk9PmplLHRvQVNDSUk6KCk9PnAsdG9Vbmljb2RlOigpPT5WLHVjczJkZWNvZGU6KCk9PmllLHVj''@;'; put 'put ''czJlbmNvZGU6KCk9PmxlfSk7Y29uc3QgST0yMTQ3NDgzNjQ3LF89MzYsTj0vXnhuLS0vLEw9L1teXDAtXHg3Rl0vLEs9L1tceDJFXHUzMDAyXHVGRjBFXHVGRjYxXS9nLFU9e292ZXJmbG93OiJPdmVyZmxvdzogaW5wdXQgbmVlZHMgd2lkZXIgaW50ZWdlcnMgdG8gcHJvY2VzcyIsIm5vdC1i''@;'; put 'put ''YXNpYyI6IklsbGVnYWwgaW5wdXQgPj0gMHg4MCAobm90IGEgYmFzaWMgY29kZSBwb2ludCkiLCJpbnZhbGlkLWlucHV0IjoiSW52YWxpZCBpbnB1dCJ9LFk9TWF0aC5mbG9vcixxPVN0cmluZy5mcm9tQ2hhckNvZGU7ZnVuY3Rpb24gZWUoQyl7dGhyb3cgbmV3IFJhbmdlRXJyb3IoVVtDXSl9''@;'; put 'put ''ZnVuY3Rpb24gbmUoQyxUKXtjb25zdCBIPUMuc3BsaXQoIkAiKTtsZXQgaj0iIjtILmxlbmd0aD4xJiYoaj1IWzBdKyJAIixDPUhbMV0pO2NvbnN0IG09ZnVuY3Rpb24gSihDLFQpe2NvbnN0IEg9W107bGV0IGo9Qy5sZW5ndGg7Zm9yKDtqLS07KUhbal09VChDW2pdKTtyZXR1cm4gSH0oKEM9''@;'; put 'put ''Qy5yZXBsYWNlKEssIi4iKSkuc3BsaXQoIi4iKSxUKS5qb2luKCIuIik7cmV0dXJuIGorbX1mdW5jdGlvbiBpZShDKXtjb25zdCBUPVtdO2xldCBIPTA7Y29uc3Qgaj1DLmxlbmd0aDtmb3IoO0g8ajspe2NvbnN0IEU9Qy5jaGFyQ29kZUF0KEgrKyk7aWYoRT49NTUyOTYmJkU8PTU2MzE5JiZI''@;'; put 'put ''PGope2NvbnN0IG09Qy5jaGFyQ29kZUF0KEgrKyk7NTYzMjA9PSg2NDUxMiZtKT9ULnB1c2goKCgxMDIzJkUpPDwxMCkrKDEwMjMmbSkrNjU1MzYpOihULnB1c2goRSksSC0tKX1lbHNlIFQucHVzaChFKX1yZXR1cm4gVH1jb25zdCBsZT1DPT5TdHJpbmcuZnJvbUNvZGVQb2ludCguLi5DKSxt''@;'; put 'put ''ZT1mdW5jdGlvbihDKXtyZXR1cm4gQz49NDgmJkM8NTg/Qy00OCsyNjpDPj02NSYmQzw5MT9DLTY1OkM+PTk3JiZDPDEyMz9DLTk3Ol99LF9lPWZ1bmN0aW9uKEMsVCl7cmV0dXJuIEMrMjIrNzUqKEM8MjYpLSgoMCE9VCk8PDUpfSxUZT1mdW5jdGlvbihDLFQsSCl7bGV0IGo9MDtmb3IoQz1I''@;'; put 'put ''P1koQy83MDApOkM+PjEsQys9WShDL1QpO0M+NDU1O2orPV8pQz1ZKEMvMzUpO3JldHVybiBZKGorMzYqQy8oQyszOCkpfSxTZT1mdW5jdGlvbihDKXtjb25zdCBUPVtdLEg9Qy5sZW5ndGg7bGV0IGo9MCxFPTEyOCxtPTcyLEE9Qy5sYXN0SW5kZXhPZigiLSIpO0E8MCYmKEE9MCk7Zm9yKGxl''@;'; put 'put ''dCBhZT0wO2FlPEE7KythZSlDLmNoYXJDb2RlQXQoYWUpPj0xMjgmJmVlKCJub3QtYmFzaWMiKSxULnB1c2goQy5jaGFyQ29kZUF0KGFlKSk7Zm9yKGxldCBhZT1BPjA/QSsxOjA7YWU8SDspe2NvbnN0IHRlPWo7Zm9yKGxldCB3ZT0xLFVlPV87O1VlKz1fKXthZT49SCYmZWUoImludmFsaWQt''@;'; put 'put ''aW5wdXQiKTtjb25zdCBKZT1tZShDLmNoYXJDb2RlQXQoYWUrKykpO0plPj1fJiZlZSgiaW52YWxpZC1pbnB1dCIpLEplPlkoKEktaikvd2UpJiZlZSgib3ZlcmZsb3ciKSxqKz1KZSp3ZTtjb25zdCBvdD1VZTw9bT8xOlVlPj1tKzI2PzI2OlVlLW07aWYoSmU8b3QpYnJlYWs7Y29uc3QgeGU9''@;'; put 'put ''Xy1vdDt3ZT5ZKEkveGUpJiZlZSgib3ZlcmZsb3ciKSx3ZSo9eGV9Y29uc3Qgc2U9VC5sZW5ndGgrMTttPVRlKGotdGUsc2UsMD09dGUpLFkoai9zZSk+SS1FJiZlZSgib3ZlcmZsb3ciKSxFKz1ZKGovc2UpLGolPXNlLFQuc3BsaWNlKGorKywwLEUpfXJldHVybiBTdHJpbmcuZnJvbUNvZGVQ''@;'; put 'put ''b2ludCguLi5UKX0samU9ZnVuY3Rpb24oQyl7Y29uc3QgVD1bXSxIPShDPWllKEMpKS5sZW5ndGg7bGV0IGo9MTI4LEU9MCxtPTcyO2Zvcihjb25zdCB0ZSBvZiBDKXRlPDEyOCYmVC5wdXNoKHEodGUpKTtjb25zdCBBPVQubGVuZ3RoO2xldCBhZT1BO2ZvcihBJiZULnB1c2goIi0iKTthZTxI''@;'; put 'put ''Oyl7bGV0IHRlPUk7Zm9yKGNvbnN0IHdlIG9mIEMpd2U+PWomJndlPHRlJiYodGU9d2UpO2NvbnN0IHNlPWFlKzE7dGUtaj5ZKChJLUUpL3NlKSYmZWUoIm92ZXJmbG93IiksRSs9KHRlLWopKnNlLGo9dGU7Zm9yKGNvbnN0IHdlIG9mIEMpaWYod2U8aiYmKytFPkkmJmVlKCJvdmVyZmxvdyIp''@;'; put 'put ''LHdlPT09ail7bGV0IFVlPUU7Zm9yKGxldCBKZT1fOztKZSs9Xyl7Y29uc3Qgb3Q9SmU8PW0/MTpKZT49bSsyNj8yNjpKZS1tO2lmKFVlPG90KWJyZWFrO2NvbnN0IHhlPVVlLW90LHZlPV8tb3Q7VC5wdXNoKHEoX2Uob3QreGUldmUsMCkpKSxVZT1ZKHhlL3ZlKX1ULnB1c2gocShfZShVZSww''@;'; put 'put ''KSkpLG09VGUoRSxzZSxhZT09PUEpLEU9MCwrK2FlfSsrRSwrK2p9cmV0dXJuIFQuam9pbigiIil9LFY9ZnVuY3Rpb24oQyl7cmV0dXJuIG5lKEMsZnVuY3Rpb24oVCl7cmV0dXJuIE4udGVzdChUKT9TZShULnNsaWNlKDQpLnRvTG93ZXJDYXNlKCkpOlR9KX0scD1mdW5jdGlvbihDKXtyZXR1''@;'; put 'put ''cm4gbmUoQyxmdW5jdGlvbihUKXtyZXR1cm4gTC50ZXN0KFQpPyJ4bi0tIitqZShUKTpUfSl9LHg9e3ZlcnNpb246IjIuMy4xIix1Y3MyOntkZWNvZGU6aWUsZW5jb2RlOmxlfSxkZWNvZGU6U2UsZW5jb2RlOmplLHRvQVNDSUk6cCx0b1VuaWNvZGU6Vn19LDcxMjk6KHVlLFgpPT57InVzZSBz''@;'; put 'put ''dHJpY3QiO3ZhciB5PU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gXyhQKXt0cnl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChQLnJlcGxhY2UoL1wrL2csIiAiKSl9Y2F0Y2h7cmV0dXJuIG51bGx9fWZ1bmN0aW9uIGcoUCl7dHJ5e3JldHVybiBlbmNvZGVVUklD''@;'; put 'put ''b21wb25lbnQoUCl9Y2F0Y2h7cmV0dXJuIG51bGx9fVguc3RyaW5naWZ5PWZ1bmN0aW9uIHcoUCxGKXtGPUZ8fCIiO3ZhciB6LE4sTz1bXTtmb3IoTiBpbiJzdHJpbmciIT10eXBlb2YgRiYmKEY9Ij8iKSxQKWlmKHkuY2FsbChQLE4pKXtpZighKHo9UFtOXSkmJihudWxsPT16fHxpc05hTih6''@;'; put 'put ''KSkmJih6PSIiKSxOPWcoTiksej1nKHopLG51bGw9PT1OfHxudWxsPT09eiljb250aW51ZTtPLnB1c2goTisiPSIreil9cmV0dXJuIE8ubGVuZ3RoP0YrTy5qb2luKCImIik6IiJ9LFgucGFyc2U9ZnVuY3Rpb24gQihQKXtmb3IodmFyIHosRj0vKFtePT8jJl0rKT0/KFteJl0qKS9nLE89e307''@;'; put 'put ''ej1GLmV4ZWMoUCk7KXt2YXIgTj1fKHpbMV0pLEw9Xyh6WzJdKTtudWxsPT09Tnx8bnVsbD09PUx8fE4gaW4gT3x8KE9bTl09TCl9cmV0dXJuIE99fSwxNzk4Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNDE1NSksXz02NTUzNix3PXkoOTUwOSkuQnVmZmVyLFA9eS5nLmNyeXB0''@;'; put 'put ''b3x8eS5nLm1zQ3J5cHRvO3VlLmV4cG9ydHM9UCYmUC5nZXRSYW5kb21WYWx1ZXM/ZnVuY3Rpb24gRihPLHope2lmKE8+NDI5NDk2NzI5NSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigicmVxdWVzdGVkIHRvbyBtYW55IHJhbmRvbSBieXRlcyIpO3ZhciBOPXcuYWxsb2NVbnNhZmUoTyk7aWYoTz4w''@;'; put 'put ''KWlmKE8+Xylmb3IodmFyIEw9MDtMPE87TCs9XylQLmdldFJhbmRvbVZhbHVlcyhOLnNsaWNlKEwsTCtfKSk7ZWxzZSBQLmdldFJhbmRvbVZhbHVlcyhOKTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Ygej9JLm5leHRUaWNrKGZ1bmN0aW9uKCl7eihudWxsLE4pfSk6Tn06ZnVuY3Rpb24gQigp''@;'; put 'put ''e3Rocm93IG5ldyBFcnJvcigiU2VjdXJlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgYnJvd3Nlci5cblVzZSBDaHJvbWUsIEZpcmVmb3ggb3IgSW50ZXJuZXQgRXhwbG9yZXIgMTEiKX19LDc5NjM6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFy''@;'; put 'put ''IEk9eSg0MTU1KTtmdW5jdGlvbiBfKCl7dGhyb3cgbmV3IEVycm9yKCJzZWN1cmUgcmFuZG9tIG51bWJlciBnZW5lcmF0aW9uIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBicm93c2VyXG51c2UgY2hyb21lLCBGaXJlRm94IG9yIEludGVybmV0IEV4cGxvcmVyIDExIil9dmFyIGc9eSg5NTA5KSxC''@;'; put 'put ''PXkoMTc5OCksdz1nLkJ1ZmZlcixQPWcua01heExlbmd0aCxGPXkuZy5jcnlwdG98fHkuZy5tc0NyeXB0byxPPU1hdGgucG93KDIsMzIpLTE7ZnVuY3Rpb24geihXLFkpe2lmKCJudW1iZXIiIT10eXBlb2YgV3x8VyE9Vyl0aHJvdyBuZXcgVHlwZUVycm9yKCJvZmZzZXQgbXVzdCBiZSBhIG51''@;'; put 'put ''bWJlciIpO2lmKFc+T3x8VzwwKXRocm93IG5ldyBUeXBlRXJyb3IoIm9mZnNldCBtdXN0IGJlIGEgdWludDMyIik7aWYoVz5QfHxXPlkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm9mZnNldCBvdXQgb2YgcmFuZ2UiKX1mdW5jdGlvbiBOKFcsWSxxKXtpZigibnVtYmVyIiE9dHlwZW9mIFd8fFch''@;'; put 'put ''PVcpdGhyb3cgbmV3IFR5cGVFcnJvcigic2l6ZSBtdXN0IGJlIGEgbnVtYmVyIik7aWYoVz5PfHxXPDApdGhyb3cgbmV3IFR5cGVFcnJvcigic2l6ZSBtdXN0IGJlIGEgdWludDMyIik7aWYoVytZPnF8fFc+UCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiYnVmZmVyIHRvbyBzbWFsbCIpfWZ1bmN0''@;'; put 'put ''aW9uIEsoVyxZLHEsZWUpe2lmKEkuYnJvd3Nlcil7dmFyIG5lPW5ldyBVaW50OEFycmF5KFcuYnVmZmVyLFkscSk7cmV0dXJuIEYuZ2V0UmFuZG9tVmFsdWVzKG5lKSxlZT92b2lkIEkubmV4dFRpY2soZnVuY3Rpb24oKXtlZShudWxsLFcpfSk6V31pZighZWUpcmV0dXJuIEIocSkuY29weShX''@;'; put 'put ''LFkpLFc7QihxLGZ1bmN0aW9uKGxlLG1lKXtpZihsZSlyZXR1cm4gZWUobGUpO21lLmNvcHkoVyxZKSxlZShudWxsLFcpfSl9RiYmRi5nZXRSYW5kb21WYWx1ZXN8fCFJLmJyb3dzZXI/KFgucmFuZG9tRmlsbD1mdW5jdGlvbiBMKFcsWSxxLGVlKXtpZighKHcuaXNCdWZmZXIoVyl8fFcgaW5z''@;'; put 'put ''dGFuY2VvZiB5LmcuVWludDhBcnJheSkpdGhyb3cgbmV3IFR5cGVFcnJvcignImJ1ZiIgYXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBvciBVaW50OEFycmF5Jyk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFkpZWU9WSxZPTAscT1XLmxlbmd0aDtlbHNlIGlmKCJmdW5jdGlvbiI9PXR5cGVvZiBx''@;'; put 'put ''KWVlPXEscT1XLmxlbmd0aC1ZO2Vsc2UgaWYoImZ1bmN0aW9uIiE9dHlwZW9mIGVlKXRocm93IG5ldyBUeXBlRXJyb3IoJyJjYiIgYXJndW1lbnQgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7cmV0dXJuIHooWSxXLmxlbmd0aCksTihxLFksVy5sZW5ndGgpLEsoVyxZLHEsZWUpfSxYLnJhbmRvbUZp''@;'; put 'put ''bGxTeW5jPWZ1bmN0aW9uIFUoVyxZLHEpe2lmKHR5cGVvZiBZPiJ1IiYmKFk9MCksISh3LmlzQnVmZmVyKFcpfHxXIGluc3RhbmNlb2YgeS5nLlVpbnQ4QXJyYXkpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJidWYiIGFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIgb3IgVWludDhBcnJheScpO3Jl''@;'; put 'put ''dHVybiB6KFksVy5sZW5ndGgpLHZvaWQgMD09PXEmJihxPVcubGVuZ3RoLVkpLE4ocSxZLFcubGVuZ3RoKSxLKFcsWSxxKX0pOihYLnJhbmRvbUZpbGw9XyxYLnJhbmRvbUZpbGxTeW5jPV8pfSw0MjgxOnVlPT57InVzZSBzdHJpY3QiO3ZhciB5PXt9O2Z1bmN0aW9uIEkoUCxGLE8pe098fChP''@;'; put 'put ''PUVycm9yKTt2YXIgTj1mdW5jdGlvbihMKXtmdW5jdGlvbiBLKFUsVyxZKXtyZXR1cm4gTC5jYWxsKHRoaXMsZnVuY3Rpb24geihMLEssVSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBGP0Y6RihMLEssVSl9KFUsVyxZKSl8fHRoaXN9cmV0dXJuIGZ1bmN0aW9uIFgoUCxGKXtQLnByb3RvdHlw''@;'; put 'put ''ZT1PYmplY3QuY3JlYXRlKEYucHJvdG90eXBlKSxQLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1QLFAuX19wcm90b19fPUZ9KEssTCksS30oTyk7Ti5wcm90b3R5cGUubmFtZT1PLm5hbWUsTi5wcm90b3R5cGUuY29kZT1QLHlbUF09Tn1mdW5jdGlvbiBfKFAsRil7aWYoQXJyYXkuaXNBcnJheShQ''@;'; put 'put ''KSl7dmFyIE89UC5sZW5ndGg7cmV0dXJuIFA9UC5tYXAoZnVuY3Rpb24oeil7cmV0dXJuIFN0cmluZyh6KX0pLE8+Mj8ib25lIG9mICIuY29uY2F0KEYsIiAiKS5jb25jYXQoUC5zbGljZSgwLE8tMSkuam9pbigiLCAiKSwiLCBvciAiKStQW08tMV06Mj09PU8/Im9uZSBvZiAiLmNvbmNhdChG''@;'; put 'put ''LCIgIikuY29uY2F0KFBbMF0sIiBvciAiKS5jb25jYXQoUFsxXSk6Im9mICIuY29uY2F0KEYsIiAiKS5jb25jYXQoUFswXSl9cmV0dXJuIm9mICIuY29uY2F0KEYsIiAiKS5jb25jYXQoU3RyaW5nKFApKX1JKCJFUlJfSU5WQUxJRF9PUFRfVkFMVUUiLGZ1bmN0aW9uKFAsRil7cmV0dXJuJ1Ro''@;'; put 'put ''ZSB2YWx1ZSAiJytGKyciIGlzIGludmFsaWQgZm9yIG9wdGlvbiAiJytQKyciJ30sVHlwZUVycm9yKSxJKCJFUlJfSU5WQUxJRF9BUkdfVFlQRSIsZnVuY3Rpb24oUCxGLE8pe3ZhciB6LE47aWYoInN0cmluZyI9PXR5cGVvZiBGJiZmdW5jdGlvbiBnKFAsRixPKXtyZXR1cm4gUC5zdWJzdHIo''@;'; put 'put ''IU98fE88MD8wOitPLEYubGVuZ3RoKT09PUZ9KEYsIm5vdCAiKT8oej0ibXVzdCBub3QgYmUiLEY9Ri5yZXBsYWNlKC9ebm90IC8sIiIpKTp6PSJtdXN0IGJlIixmdW5jdGlvbiBCKFAsRixPKXtyZXR1cm4odm9pZCAwPT09T3x8Tz5QLmxlbmd0aCkmJihPPVAubGVuZ3RoKSxQLnN1YnN0cmlu''@;'; put 'put ''ZyhPLUYubGVuZ3RoLE8pPT09Rn0oUCwiIGFyZ3VtZW50IikpTj0iVGhlICIuY29uY2F0KFAsIiAiKS5jb25jYXQoeiwiICIpLmNvbmNhdChfKEYsInR5cGUiKSk7ZWxzZXt2YXIgTD1mdW5jdGlvbiB3KFAsRixPKXtyZXR1cm4ibnVtYmVyIiE9dHlwZW9mIE8mJihPPTApLCEoTytGLmxlbmd0''@;'; put 'put ''aD5QLmxlbmd0aCkmJi0xIT09UC5pbmRleE9mKEYsTyl9KFAsIi4iKT8icHJvcGVydHkiOiJhcmd1bWVudCI7Tj0nVGhlICInLmNvbmNhdChQLCciICcpLmNvbmNhdChMLCIgIikuY29uY2F0KHosIiAiKS5jb25jYXQoXyhGLCJ0eXBlIikpfXJldHVybiBOKyIuIFJlY2VpdmVkIHR5cGUgIi5j''@;'; put 'put ''b25jYXQodHlwZW9mIE8pfSxUeXBlRXJyb3IpLEkoIkVSUl9TVFJFQU1fUFVTSF9BRlRFUl9FT0YiLCJzdHJlYW0ucHVzaCgpIGFmdGVyIEVPRiIpLEkoIkVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVEIixmdW5jdGlvbihQKXtyZXR1cm4iVGhlICIrUCsiIG1ldGhvZCBpcyBub3QgaW1wbGVt''@;'; put 'put ''ZW50ZWQifSksSSgiRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0UiLCJQcmVtYXR1cmUgY2xvc2UiKSxJKCJFUlJfU1RSRUFNX0RFU1RST1lFRCIsZnVuY3Rpb24oUCl7cmV0dXJuIkNhbm5vdCBjYWxsICIrUCsiIGFmdGVyIGEgc3RyZWFtIHdhcyBkZXN0cm95ZWQifSksSSgiRVJSX01VTFRJ''@;'; put 'put ''UExFX0NBTExCQUNLIiwiQ2FsbGJhY2sgY2FsbGVkIG11bHRpcGxlIHRpbWVzIiksSSgiRVJSX1NUUkVBTV9DQU5OT1RfUElQRSIsIkNhbm5vdCBwaXBlLCBub3QgcmVhZGFibGUiKSxJKCJFUlJfU1RSRUFNX1dSSVRFX0FGVEVSX0VORCIsIndyaXRlIGFmdGVyIGVuZCIpLEkoIkVSUl9TVFJF''@;'; put 'put ''QU1fTlVMTF9WQUxVRVMiLCJNYXkgbm90IHdyaXRlIG51bGwgdmFsdWVzIHRvIHN0cmVhbSIsVHlwZUVycm9yKSxJKCJFUlJfVU5LTk9XTl9FTkNPRElORyIsZnVuY3Rpb24oUCl7cmV0dXJuIlVua25vd24gZW5jb2Rpbmc6ICIrUH0sVHlwZUVycm9yKSxJKCJFUlJfU1RSRUFNX1VOU0hJRlRf''@;'; put 'put ''QUZURVJfRU5EX0VWRU5UIiwic3RyZWFtLnVuc2hpZnQoKSBhZnRlciBlbmQgZXZlbnQiKSx1ZS5leHBvcnRzLnE9eX0sNjc1MzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDQxNTUpLF89T2JqZWN0LmtleXN8fGZ1bmN0aW9uKEwpe3ZhciBLPVtdO2Zvcih2YXIgVSBpbiBMKUsu''@;'; put 'put ''cHVzaChVKTtyZXR1cm4gS307dWUuZXhwb3J0cz1PO3ZhciBnPXkoOTQ4MSksQj15KDQyMjkpO3koNTcxNykoTyxnKTtmb3IodmFyIHc9XyhCLnByb3RvdHlwZSksUD0wO1A8dy5sZW5ndGg7UCsrKXt2YXIgRj13W1BdO08ucHJvdG90eXBlW0ZdfHwoTy5wcm90b3R5cGVbRl09Qi5wcm90b3R5''@;'; put 'put ''cGVbRl0pfWZ1bmN0aW9uIE8oTCl7aWYoISh0aGlzIGluc3RhbmNlb2YgTykpcmV0dXJuIG5ldyBPKEwpO2cuY2FsbCh0aGlzLEwpLEIuY2FsbCh0aGlzLEwpLHRoaXMuYWxsb3dIYWxmT3Blbj0hMCxMJiYoITE9PT1MLnJlYWRhYmxlJiYodGhpcy5yZWFkYWJsZT0hMSksITE9PT1MLndyaXRh''@;'; put 'put ''YmxlJiYodGhpcy53cml0YWJsZT0hMSksITE9PT1MLmFsbG93SGFsZk9wZW4mJih0aGlzLmFsbG93SGFsZk9wZW49ITEsdGhpcy5vbmNlKCJlbmQiLHopKSl9ZnVuY3Rpb24geigpe3RoaXMuX3dyaXRhYmxlU3RhdGUuZW5kZWR8fEkubmV4dFRpY2soTix0aGlzKX1mdW5jdGlvbiBOKEwpe0wu''@;'; put 'put ''ZW5kKCl9T2JqZWN0LmRlZmluZVByb3BlcnR5KE8ucHJvdG90eXBlLCJ3cml0YWJsZUhpZ2hXYXRlck1hcmsiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmhpZ2hXYXRlck1hcmt9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KE8ucHJv''@;'; put 'put ''dG90eXBlLCJ3cml0YWJsZUJ1ZmZlciIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3dyaXRhYmxlU3RhdGUuZ2V0QnVmZmVyKCl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KE8ucHJvdG90eXBlLCJ3cml0YWJsZUxlbmd0''@;'; put 'put ''aCIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUubGVuZ3RofX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLnByb3RvdHlwZSwiZGVzdHJveWVkIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09dGhp''@;'; put 'put ''cy5fcmVhZGFibGVTdGF0ZSYmdm9pZCAwIT09dGhpcy5fd3JpdGFibGVTdGF0ZSYmdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQmJnRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkfSxzZXQ6ZnVuY3Rpb24oSyl7dm9pZCAwPT09dGhpcy5fcmVhZGFibGVTdGF0ZXx8dm9pZCAwPT09''@;'; put 'put ''dGhpcy5fd3JpdGFibGVTdGF0ZXx8KHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkPUssdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ9Syl9fSl9LDI3MjU6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz1fO3ZhciBJPXkoNDYwNSk7ZnVuY3Rpb24gXyhnKXtpZigh''@;'; put 'put ''KHRoaXMgaW5zdGFuY2VvZiBfKSlyZXR1cm4gbmV3IF8oZyk7SS5jYWxsKHRoaXMsZyl9eSg1NzE3KShfLEkpLF8ucHJvdG90eXBlLl90cmFuc2Zvcm09ZnVuY3Rpb24oZyxCLHcpe3cobnVsbCxnKX19LDk0ODE6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIF8sST15KDQxNTUpO3VlLmV4''@;'; put 'put ''cG9ydHM9cCxwLlJlYWRhYmxlU3RhdGU9Vix5KDcxODcpO3ZhciBMLEI9ZnVuY3Rpb24oT2UsSWUpe3JldHVybiBPZS5saXN0ZW5lcnMoSWUpLmxlbmd0aH0sdz15KDI1MDMpLFA9eSg4NzY0KS5CdWZmZXIsRj0odHlwZW9mIHkuZzwidSI/eS5nOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp0''@;'; put 'put ''eXBlb2Ygc2VsZjwidSI/c2VsZjp7fSkuVWludDhBcnJheXx8ZnVuY3Rpb24oKXt9LE49eSg0NjE2KTtMPU4mJk4uZGVidWdsb2c/Ti5kZWJ1Z2xvZygic3RyZWFtIik6ZnVuY3Rpb24oKXt9O3ZhciBsZSxtZSxfZSxLPXkoNzMyNyksVT15KDExOTUpLFk9eSgyNDU3KS5nZXRIaWdoV2F0ZXJN''@;'; put 'put ''YXJrLHE9eSg0MjgxKS5xLGVlPXEuRVJSX0lOVkFMSURfQVJHX1RZUEUsSj1xLkVSUl9TVFJFQU1fUFVTSF9BRlRFUl9FT0YsbmU9cS5FUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRCxpZT1xLkVSUl9TVFJFQU1fVU5TSElGVF9BRlRFUl9FTkRfRVZFTlQ7eSg1NzE3KShwLHcpO3ZhciBUZT1V''@;'; put 'put ''LmVycm9yT3JEZXN0cm95LFNlPVsiZXJyb3IiLCJjbG9zZSIsImRlc3Ryb3kiLCJwYXVzZSIsInJlc3VtZSJdO2Z1bmN0aW9uIFYoRmUsT2UsSWUpe189X3x8eSg2NzUzKSwiYm9vbGVhbiIhPXR5cGVvZiBJZSYmKEllPU9lIGluc3RhbmNlb2YgXyksdGhpcy5vYmplY3RNb2RlPSEhKEZlPUZl''@;'; put 'put ''fHx7fSkub2JqZWN0TW9kZSxJZSYmKHRoaXMub2JqZWN0TW9kZT10aGlzLm9iamVjdE1vZGV8fCEhRmUucmVhZGFibGVPYmplY3RNb2RlKSx0aGlzLmhpZ2hXYXRlck1hcms9WSh0aGlzLEZlLCJyZWFkYWJsZUhpZ2hXYXRlck1hcmsiLEllKSx0aGlzLmJ1ZmZlcj1uZXcgSyx0aGlzLmxlbmd0''@;'; put 'put ''aD0wLHRoaXMucGlwZXM9bnVsbCx0aGlzLnBpcGVzQ291bnQ9MCx0aGlzLmZsb3dpbmc9bnVsbCx0aGlzLmVuZGVkPSExLHRoaXMuZW5kRW1pdHRlZD0hMSx0aGlzLnJlYWRpbmc9ITEsdGhpcy5zeW5jPSEwLHRoaXMubmVlZFJlYWRhYmxlPSExLHRoaXMuZW1pdHRlZFJlYWRhYmxlPSExLHRo''@;'; put 'put ''aXMucmVhZGFibGVMaXN0ZW5pbmc9ITEsdGhpcy5yZXN1bWVTY2hlZHVsZWQ9ITEsdGhpcy5wYXVzZWQ9ITAsdGhpcy5lbWl0Q2xvc2U9ITEhPT1GZS5lbWl0Q2xvc2UsdGhpcy5hdXRvRGVzdHJveT0hIUZlLmF1dG9EZXN0cm95LHRoaXMuZGVzdHJveWVkPSExLHRoaXMuZGVmYXVsdEVuY29k''@;'; put 'put ''aW5nPUZlLmRlZmF1bHRFbmNvZGluZ3x8InV0ZjgiLHRoaXMuYXdhaXREcmFpbj0wLHRoaXMucmVhZGluZ01vcmU9ITEsdGhpcy5kZWNvZGVyPW51bGwsdGhpcy5lbmNvZGluZz1udWxsLEZlLmVuY29kaW5nJiYobGV8fChsZT15KDI1NTMpLnMpLHRoaXMuZGVjb2Rlcj1uZXcgbGUoRmUuZW5j''@;'; put 'put ''b2RpbmcpLHRoaXMuZW5jb2Rpbmc9RmUuZW5jb2RpbmcpfWZ1bmN0aW9uIHAoRmUpe2lmKF89X3x8eSg2NzUzKSwhKHRoaXMgaW5zdGFuY2VvZiBwKSlyZXR1cm4gbmV3IHAoRmUpO3RoaXMuX3JlYWRhYmxlU3RhdGU9bmV3IFYoRmUsdGhpcyx0aGlzIGluc3RhbmNlb2YgXyksdGhpcy5yZWFk''@;'; put 'put ''YWJsZT0hMCxGZSYmKCJmdW5jdGlvbiI9PXR5cGVvZiBGZS5yZWFkJiYodGhpcy5fcmVhZD1GZS5yZWFkKSwiZnVuY3Rpb24iPT10eXBlb2YgRmUuZGVzdHJveSYmKHRoaXMuX2Rlc3Ryb3k9RmUuZGVzdHJveSkpLHcuY2FsbCh0aGlzKX1mdW5jdGlvbiBiKEZlLE9lLEllLFZlLGtlKXtMKCJy''@;'; put 'put ''ZWFkYWJsZUFkZENodW5rIixPZSk7dmFyIF90LEFlPUZlLl9yZWFkYWJsZVN0YXRlO2lmKG51bGw9PT1PZSlBZS5yZWFkaW5nPSExLGZ1bmN0aW9uIEUoRmUsT2Upe2lmKEwoIm9uRW9mQ2h1bmsiKSwhT2UuZW5kZWQpe2lmKE9lLmRlY29kZXIpe3ZhciBJZT1PZS5kZWNvZGVyLmVuZCgpO0ll''@;'; put 'put ''JiZJZS5sZW5ndGgmJihPZS5idWZmZXIucHVzaChJZSksT2UubGVuZ3RoKz1PZS5vYmplY3RNb2RlPzE6SWUubGVuZ3RoKX1PZS5lbmRlZD0hMCxPZS5zeW5jP20oRmUpOihPZS5uZWVkUmVhZGFibGU9ITEsT2UuZW1pdHRlZFJlYWRhYmxlfHwoT2UuZW1pdHRlZFJlYWRhYmxlPSEwLEEoRmUp''@;'; put 'put ''KSl9fShGZSxBZSk7ZWxzZSBpZihrZXx8KF90PWZ1bmN0aW9uIEMoRmUsT2Upe3ZhciBJZTtyZXR1cm4hZnVuY3Rpb24geihGZSl7cmV0dXJuIFAuaXNCdWZmZXIoRmUpfHxGZSBpbnN0YW5jZW9mIEZ9KE9lKSYmInN0cmluZyIhPXR5cGVvZiBPZSYmdm9pZCAwIT09T2UmJiFGZS5vYmplY3RN''@;'; put 'put ''b2RlJiYoSWU9bmV3IGVlKCJjaHVuayIsWyJzdHJpbmciLCJCdWZmZXIiLCJVaW50OEFycmF5Il0sT2UpKSxJZX0oQWUsT2UpKSxfdClUZShGZSxfdCk7ZWxzZSBpZihBZS5vYmplY3RNb2RlfHxPZSYmT2UubGVuZ3RoPjApaWYoInN0cmluZyIhPXR5cGVvZiBPZSYmIUFlLm9iamVjdE1vZGUm''@;'; put 'put ''Jk9iamVjdC5nZXRQcm90b3R5cGVPZihPZSkhPT1QLnByb3RvdHlwZSYmKE9lPWZ1bmN0aW9uIE8oRmUpe3JldHVybiBQLmZyb20oRmUpfShPZSkpLFZlKUFlLmVuZEVtaXR0ZWQ/VGUoRmUsbmV3IGllKTp4KEZlLEFlLE9lLCEwKTtlbHNlIGlmKEFlLmVuZGVkKVRlKEZlLG5ldyBKKTtlbHNl''@;'; put 'put ''e2lmKEFlLmRlc3Ryb3llZClyZXR1cm4hMTtBZS5yZWFkaW5nPSExLEFlLmRlY29kZXImJiFJZT8oT2U9QWUuZGVjb2Rlci53cml0ZShPZSksQWUub2JqZWN0TW9kZXx8MCE9PU9lLmxlbmd0aD94KEZlLEFlLE9lLCExKTphZShGZSxBZSkpOngoRmUsQWUsT2UsITEpfWVsc2UgVmV8fChBZS5y''@;'; put 'put ''ZWFkaW5nPSExLGFlKEZlLEFlKSk7cmV0dXJuIUFlLmVuZGVkJiYoQWUubGVuZ3RoPEFlLmhpZ2hXYXRlck1hcmt8fDA9PT1BZS5sZW5ndGgpfWZ1bmN0aW9uIHgoRmUsT2UsSWUsVmUpe09lLmZsb3dpbmcmJjA9PT1PZS5sZW5ndGgmJiFPZS5zeW5jPyhPZS5hd2FpdERyYWluPTAsRmUuZW1p''@;'; put 'put ''dCgiZGF0YSIsSWUpKTooT2UubGVuZ3RoKz1PZS5vYmplY3RNb2RlPzE6SWUubGVuZ3RoLFZlP09lLmJ1ZmZlci51bnNoaWZ0KEllKTpPZS5idWZmZXIucHVzaChJZSksT2UubmVlZFJlYWRhYmxlJiZtKEZlKSksYWUoRmUsT2UpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShwLnByb3RvdHlwZSwi''@;'; put 'put ''ZGVzdHJveWVkIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5fcmVhZGFibGVTdGF0ZSYmdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWR9LHNldDpmdW5jdGlvbihPZSl7dGhpcy5fcmVhZGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3Rh''@;'; put 'put ''dGUuZGVzdHJveWVkPU9lKX19KSxwLnByb3RvdHlwZS5kZXN0cm95PVUuZGVzdHJveSxwLnByb3RvdHlwZS5fdW5kZXN0cm95PVUudW5kZXN0cm95LHAucHJvdG90eXBlLl9kZXN0cm95PWZ1bmN0aW9uKEZlLE9lKXtPZShGZSl9LHAucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oRmUsT2Upe3Zh''@;'; put 'put ''ciBWZSxJZT10aGlzLl9yZWFkYWJsZVN0YXRlO3JldHVybiBJZS5vYmplY3RNb2RlP1ZlPSEwOiJzdHJpbmciPT10eXBlb2YgRmUmJigoT2U9T2V8fEllLmRlZmF1bHRFbmNvZGluZykhPT1JZS5lbmNvZGluZyYmKEZlPVAuZnJvbShGZSxPZSksT2U9IiIpLFZlPSEwKSxiKHRoaXMsRmUsT2Us''@;'; put 'put ''ITEsVmUpfSxwLnByb3RvdHlwZS51bnNoaWZ0PWZ1bmN0aW9uKEZlKXtyZXR1cm4gYih0aGlzLEZlLG51bGwsITAsITEpfSxwLnByb3RvdHlwZS5pc1BhdXNlZD1mdW5jdGlvbigpe3JldHVybiExPT09dGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nfSxwLnByb3RvdHlwZS5zZXRFbmNvZGlu''@;'; put 'put ''Zz1mdW5jdGlvbihGZSl7bGV8fChsZT15KDI1NTMpLnMpO3ZhciBPZT1uZXcgbGUoRmUpO3RoaXMuX3JlYWRhYmxlU3RhdGUuZGVjb2Rlcj1PZSx0aGlzLl9yZWFkYWJsZVN0YXRlLmVuY29kaW5nPXRoaXMuX3JlYWRhYmxlU3RhdGUuZGVjb2Rlci5lbmNvZGluZztmb3IodmFyIEllPXRoaXMu''@;'; put 'put ''X3JlYWRhYmxlU3RhdGUuYnVmZmVyLmhlYWQsVmU9IiI7bnVsbCE9PUllOylWZSs9T2Uud3JpdGUoSWUuZGF0YSksSWU9SWUubmV4dDtyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5idWZmZXIuY2xlYXIoKSwiIiE9PVZlJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmJ1ZmZlci5wdXNoKFZlKSx0''@;'; put 'put ''aGlzLl9yZWFkYWJsZVN0YXRlLmxlbmd0aD1WZS5sZW5ndGgsdGhpc307dmFyIFQ9MTA3Mzc0MTgyNDtmdW5jdGlvbiBqKEZlLE9lKXtyZXR1cm4gRmU8PTB8fDA9PT1PZS5sZW5ndGgmJk9lLmVuZGVkPzA6T2Uub2JqZWN0TW9kZT8xOkZlIT1GZT9PZS5mbG93aW5nJiZPZS5sZW5ndGg/T2Uu''@;'; put 'put ''YnVmZmVyLmhlYWQuZGF0YS5sZW5ndGg6T2UubGVuZ3RoOihGZT5PZS5oaWdoV2F0ZXJNYXJrJiYoT2UuaGlnaFdhdGVyTWFyaz1mdW5jdGlvbiBIKEZlKXtyZXR1cm4gRmU+PVQ/RmU9VDooRmUtLSxGZXw9RmU+Pj4xLEZlfD1GZT4+PjIsRmV8PUZlPj4+NCxGZXw9RmU+Pj44LEZlfD1GZT4+''@;'; put 'put ''PjE2LEZlKyspLEZlfShGZSkpLEZlPD1PZS5sZW5ndGg/RmU6T2UuZW5kZWQ/T2UubGVuZ3RoOihPZS5uZWVkUmVhZGFibGU9ITAsMCkpfWZ1bmN0aW9uIG0oRmUpe3ZhciBPZT1GZS5fcmVhZGFibGVTdGF0ZTtMKCJlbWl0UmVhZGFibGUiLE9lLm5lZWRSZWFkYWJsZSxPZS5lbWl0dGVkUmVh''@;'; put 'put ''ZGFibGUpLE9lLm5lZWRSZWFkYWJsZT0hMSxPZS5lbWl0dGVkUmVhZGFibGV8fChMKCJlbWl0UmVhZGFibGUiLE9lLmZsb3dpbmcpLE9lLmVtaXR0ZWRSZWFkYWJsZT0hMCxJLm5leHRUaWNrKEEsRmUpKX1mdW5jdGlvbiBBKEZlKXt2YXIgT2U9RmUuX3JlYWRhYmxlU3RhdGU7TCgiZW1pdFJl''@;'; put 'put ''YWRhYmxlXyIsT2UuZGVzdHJveWVkLE9lLmxlbmd0aCxPZS5lbmRlZCksIU9lLmRlc3Ryb3llZCYmKE9lLmxlbmd0aHx8T2UuZW5kZWQpJiYoRmUuZW1pdCgicmVhZGFibGUiKSxPZS5lbWl0dGVkUmVhZGFibGU9ITEpLE9lLm5lZWRSZWFkYWJsZT0hT2UuZmxvd2luZyYmIU9lLmVuZGVkJiZP''@;'; put 'put ''ZS5sZW5ndGg8PU9lLmhpZ2hXYXRlck1hcmsseGUoRmUpfWZ1bmN0aW9uIGFlKEZlLE9lKXtPZS5yZWFkaW5nTW9yZXx8KE9lLnJlYWRpbmdNb3JlPSEwLEkubmV4dFRpY2sodGUsRmUsT2UpKX1mdW5jdGlvbiB0ZShGZSxPZSl7Zm9yKDshT2UucmVhZGluZyYmIU9lLmVuZGVkJiYoT2UubGVu''@;'; put 'put ''Z3RoPE9lLmhpZ2hXYXRlck1hcmt8fE9lLmZsb3dpbmcmJjA9PT1PZS5sZW5ndGgpOyl7dmFyIEllPU9lLmxlbmd0aDtpZihMKCJtYXliZVJlYWRNb3JlIHJlYWQgMCIpLEZlLnJlYWQoMCksSWU9PT1PZS5sZW5ndGgpYnJlYWt9T2UucmVhZGluZ01vcmU9ITF9ZnVuY3Rpb24gd2UoRmUpe3Zh''@;'; put 'put ''ciBPZT1GZS5fcmVhZGFibGVTdGF0ZTtPZS5yZWFkYWJsZUxpc3RlbmluZz1GZS5saXN0ZW5lckNvdW50KCJyZWFkYWJsZSIpPjAsT2UucmVzdW1lU2NoZWR1bGVkJiYhT2UucGF1c2VkP09lLmZsb3dpbmc9ITA6RmUubGlzdGVuZXJDb3VudCgiZGF0YSIpPjAmJkZlLnJlc3VtZSgpfWZ1bmN0''@;'; put 'put ''aW9uIFVlKEZlKXtMKCJyZWFkYWJsZSBuZXh0dGljayByZWFkIDAiKSxGZS5yZWFkKDApfWZ1bmN0aW9uIG90KEZlLE9lKXtMKCJyZXN1bWUiLE9lLnJlYWRpbmcpLE9lLnJlYWRpbmd8fEZlLnJlYWQoMCksT2UucmVzdW1lU2NoZWR1bGVkPSExLEZlLmVtaXQoInJlc3VtZSIpLHhlKEZlKSxP''@;'; put 'put ''ZS5mbG93aW5nJiYhT2UucmVhZGluZyYmRmUucmVhZCgwKX1mdW5jdGlvbiB4ZShGZSl7dmFyIE9lPUZlLl9yZWFkYWJsZVN0YXRlO2ZvcihMKCJmbG93IixPZS5mbG93aW5nKTtPZS5mbG93aW5nJiZudWxsIT09RmUucmVhZCgpOyk7fWZ1bmN0aW9uIHZlKEZlLE9lKXtyZXR1cm4gMD09PU9l''@;'; put 'put ''Lmxlbmd0aD9udWxsOihPZS5vYmplY3RNb2RlP0llPU9lLmJ1ZmZlci5zaGlmdCgpOiFGZXx8RmU+PU9lLmxlbmd0aD8oSWU9T2UuZGVjb2Rlcj9PZS5idWZmZXIuam9pbigiIik6MT09PU9lLmJ1ZmZlci5sZW5ndGg/T2UuYnVmZmVyLmZpcnN0KCk6T2UuYnVmZmVyLmNvbmNhdChPZS5sZW5n''@;'; put 'put ''dGgpLE9lLmJ1ZmZlci5jbGVhcigpKTpJZT1PZS5idWZmZXIuY29uc3VtZShGZSxPZS5kZWNvZGVyKSxJZSk7dmFyIEllfWZ1bmN0aW9uIFhlKEZlKXt2YXIgT2U9RmUuX3JlYWRhYmxlU3RhdGU7TCgiZW5kUmVhZGFibGUiLE9lLmVuZEVtaXR0ZWQpLE9lLmVuZEVtaXR0ZWR8fChPZS5lbmRl''@;'; put 'put ''ZD0hMCxJLm5leHRUaWNrKHplLE9lLEZlKSl9ZnVuY3Rpb24gemUoRmUsT2Upe2lmKEwoImVuZFJlYWRhYmxlTlQiLEZlLmVuZEVtaXR0ZWQsRmUubGVuZ3RoKSwhRmUuZW5kRW1pdHRlZCYmMD09PUZlLmxlbmd0aCYmKEZlLmVuZEVtaXR0ZWQ9ITAsT2UucmVhZGFibGU9ITEsT2UuZW1pdCgi''@;'; put 'put ''ZW5kIiksRmUuYXV0b0Rlc3Ryb3kpKXt2YXIgSWU9T2UuX3dyaXRhYmxlU3RhdGU7KCFJZXx8SWUuYXV0b0Rlc3Ryb3kmJkllLmZpbmlzaGVkKSYmT2UuZGVzdHJveSgpfX1mdW5jdGlvbiBEZShGZSxPZSl7Zm9yKHZhciBJZT0wLFZlPUZlLmxlbmd0aDtJZTxWZTtJZSsrKWlmKEZlW0llXT09''@;'; put 'put ''PU9lKXJldHVybiBJZTtyZXR1cm4tMX1wLnByb3RvdHlwZS5yZWFkPWZ1bmN0aW9uKEZlKXtMKCJyZWFkIixGZSksRmU9cGFyc2VJbnQoRmUsMTApO3ZhciBPZT10aGlzLl9yZWFkYWJsZVN0YXRlLEllPUZlO2lmKDAhPT1GZSYmKE9lLmVtaXR0ZWRSZWFkYWJsZT0hMSksMD09PUZlJiZPZS5u''@;'; put 'put ''ZWVkUmVhZGFibGUmJigoMCE9PU9lLmhpZ2hXYXRlck1hcms/T2UubGVuZ3RoPj1PZS5oaWdoV2F0ZXJNYXJrOk9lLmxlbmd0aD4wKXx8T2UuZW5kZWQpKXJldHVybiBMKCJyZWFkOiBlbWl0UmVhZGFibGUiLE9lLmxlbmd0aCxPZS5lbmRlZCksMD09PU9lLmxlbmd0aCYmT2UuZW5kZWQ/WGUo''@;'; put 'put ''dGhpcyk6bSh0aGlzKSxudWxsO2lmKDA9PT0oRmU9aihGZSxPZSkpJiZPZS5lbmRlZClyZXR1cm4gMD09PU9lLmxlbmd0aCYmWGUodGhpcyksbnVsbDt2YXIga2UsVmU9T2UubmVlZFJlYWRhYmxlO3JldHVybiBMKCJuZWVkIHJlYWRhYmxlIixWZSksKDA9PT1PZS5sZW5ndGh8fE9lLmxlbmd0''@;'; put 'put ''aC1GZTxPZS5oaWdoV2F0ZXJNYXJrKSYmTCgibGVuZ3RoIGxlc3MgdGhhbiB3YXRlcm1hcmsiLFZlPSEwKSxPZS5lbmRlZHx8T2UucmVhZGluZz9MKCJyZWFkaW5nIG9yIGVuZGVkIixWZT0hMSk6VmUmJihMKCJkbyByZWFkIiksT2UucmVhZGluZz0hMCxPZS5zeW5jPSEwLDA9PT1PZS5sZW5n''@;'; put 'put ''dGgmJihPZS5uZWVkUmVhZGFibGU9ITApLHRoaXMuX3JlYWQoT2UuaGlnaFdhdGVyTWFyayksT2Uuc3luYz0hMSxPZS5yZWFkaW5nfHwoRmU9aihJZSxPZSkpKSxudWxsPT09KGtlPUZlPjA/dmUoRmUsT2UpOm51bGwpPyhPZS5uZWVkUmVhZGFibGU9T2UubGVuZ3RoPD1PZS5oaWdoV2F0ZXJN''@;'; put 'put ''YXJrLEZlPTApOihPZS5sZW5ndGgtPUZlLE9lLmF3YWl0RHJhaW49MCksMD09PU9lLmxlbmd0aCYmKE9lLmVuZGVkfHwoT2UubmVlZFJlYWRhYmxlPSEwKSxJZSE9PUZlJiZPZS5lbmRlZCYmWGUodGhpcykpLG51bGwhPT1rZSYmdGhpcy5lbWl0KCJkYXRhIixrZSksa2V9LHAucHJvdG90eXBl''@;'; put 'put ''Ll9yZWFkPWZ1bmN0aW9uKEZlKXtUZSh0aGlzLG5ldyBuZSgiX3JlYWQoKSIpKX0scC5wcm90b3R5cGUucGlwZT1mdW5jdGlvbihGZSxPZSl7dmFyIEllPXRoaXMsVmU9dGhpcy5fcmVhZGFibGVTdGF0ZTtzd2l0Y2goVmUucGlwZXNDb3VudCl7Y2FzZSAwOlZlLnBpcGVzPUZlO2JyZWFrO2Nh''@;'; put 'put ''c2UgMTpWZS5waXBlcz1bVmUucGlwZXMsRmVdO2JyZWFrO2RlZmF1bHQ6VmUucGlwZXMucHVzaChGZSl9VmUucGlwZXNDb3VudCs9MSxMKCJwaXBlIGNvdW50PSVkIG9wdHM9JWoiLFZlLnBpcGVzQ291bnQsT2UpO3ZhciBBZT1PZSYmITE9PT1PZS5lbmR8fEZlPT09SS5zdGRvdXR8fEZlPT09''@;'; put 'put ''SS5zdGRlcnI/dHQ6bnQ7ZnVuY3Rpb24gbnQoKXtMKCJvbmVuZCIpLEZlLmVuZCgpfVZlLmVuZEVtaXR0ZWQ/SS5uZXh0VGljayhBZSk6SWUub25jZSgiZW5kIixBZSksRmUub24oInVucGlwZSIsZnVuY3Rpb24gX3QoSGUsdXQpe0woIm9udW5waXBlIiksSGU9PT1JZSYmdXQmJiExPT09dXQu''@;'; put 'put ''aGFzVW5waXBlZCYmKHV0Lmhhc1VucGlwZWQ9ITAsZnVuY3Rpb24geXQoKXtMKCJjbGVhbnVwIiksRmUucmVtb3ZlTGlzdGVuZXIoImNsb3NlIixpdCksRmUucmVtb3ZlTGlzdGVuZXIoImZpbmlzaCIsJGUpLEZlLnJlbW92ZUxpc3RlbmVyKCJkcmFpbiIsUWUpLEZlLnJlbW92ZUxpc3RlbmVy''@;'; put 'put ''KCJlcnJvciIsRHQpLEZlLnJlbW92ZUxpc3RlbmVyKCJ1bnBpcGUiLF90KSxJZS5yZW1vdmVMaXN0ZW5lcigiZW5kIixudCksSWUucmVtb3ZlTGlzdGVuZXIoImVuZCIsdHQpLEllLnJlbW92ZUxpc3RlbmVyKCJkYXRhIixNdCksdW49ITAsVmUuYXdhaXREcmFpbiYmKCFGZS5fd3JpdGFibGVT''@;'; put 'put ''dGF0ZXx8RmUuX3dyaXRhYmxlU3RhdGUubmVlZERyYWluKSYmUWUoKX0oKSl9KTt2YXIgUWU9ZnVuY3Rpb24gc2UoRmUpe3JldHVybiBmdW5jdGlvbigpe3ZhciBJZT1GZS5fcmVhZGFibGVTdGF0ZTtMKCJwaXBlT25EcmFpbiIsSWUuYXdhaXREcmFpbiksSWUuYXdhaXREcmFpbiYmSWUuYXdh''@;'; put 'put ''aXREcmFpbi0tLDA9PT1JZS5hd2FpdERyYWluJiZCKEZlLCJkYXRhIikmJihJZS5mbG93aW5nPSEwLHhlKEZlKSl9fShJZSk7RmUub24oImRyYWluIixRZSk7dmFyIHVuPSExO2Z1bmN0aW9uIE10KEhlKXtMKCJvbmRhdGEiKTt2YXIgdXQ9RmUud3JpdGUoSGUpO0woImRlc3Qud3JpdGUiLHV0''@;'; put 'put ''KSwhMT09PXV0JiYoKDE9PT1WZS5waXBlc0NvdW50JiZWZS5waXBlcz09PUZlfHxWZS5waXBlc0NvdW50PjEmJi0xIT09RGUoVmUucGlwZXMsRmUpKSYmIXVuJiYoTCgiZmFsc2Ugd3JpdGUgcmVzcG9uc2UsIHBhdXNlIixWZS5hd2FpdERyYWluKSxWZS5hd2FpdERyYWluKyspLEllLnBhdXNl''@;'; put 'put ''KCkpfWZ1bmN0aW9uIER0KEhlKXtMKCJvbmVycm9yIixIZSksdHQoKSxGZS5yZW1vdmVMaXN0ZW5lcigiZXJyb3IiLER0KSwwPT09QihGZSwiZXJyb3IiKSYmVGUoRmUsSGUpfWZ1bmN0aW9uIGl0KCl7RmUucmVtb3ZlTGlzdGVuZXIoImZpbmlzaCIsJGUpLHR0KCl9ZnVuY3Rpb24gJGUoKXtM''@;'; put 'put ''KCJvbmZpbmlzaCIpLEZlLnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIsaXQpLHR0KCl9ZnVuY3Rpb24gdHQoKXtMKCJ1bnBpcGUiKSxJZS51bnBpcGUoRmUpfXJldHVybiBJZS5vbigiZGF0YSIsTXQpLGZ1bmN0aW9uIGplKEZlLE9lLEllKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgRmUucHJlcGVu''@;'; put 'put ''ZExpc3RlbmVyKXJldHVybiBGZS5wcmVwZW5kTGlzdGVuZXIoT2UsSWUpO0ZlLl9ldmVudHMmJkZlLl9ldmVudHNbT2VdP0FycmF5LmlzQXJyYXkoRmUuX2V2ZW50c1tPZV0pP0ZlLl9ldmVudHNbT2VdLnVuc2hpZnQoSWUpOkZlLl9ldmVudHNbT2VdPVtJZSxGZS5fZXZlbnRzW09lXV06RmUu''@;'; put 'put ''b24oT2UsSWUpfShGZSwiZXJyb3IiLER0KSxGZS5vbmNlKCJjbG9zZSIsaXQpLEZlLm9uY2UoImZpbmlzaCIsJGUpLEZlLmVtaXQoInBpcGUiLEllKSxWZS5mbG93aW5nfHwoTCgicGlwZSByZXN1bWUiKSxJZS5yZXN1bWUoKSksRmV9LHAucHJvdG90eXBlLnVucGlwZT1mdW5jdGlvbihGZSl7''@;'; put 'put ''dmFyIE9lPXRoaXMuX3JlYWRhYmxlU3RhdGUsSWU9e2hhc1VucGlwZWQ6ITF9O2lmKDA9PT1PZS5waXBlc0NvdW50KXJldHVybiB0aGlzO2lmKDE9PT1PZS5waXBlc0NvdW50KXJldHVybiBGZSYmRmUhPT1PZS5waXBlc3x8KEZlfHwoRmU9T2UucGlwZXMpLE9lLnBpcGVzPW51bGwsT2UucGlw''@;'; put 'put ''ZXNDb3VudD0wLE9lLmZsb3dpbmc9ITEsRmUmJkZlLmVtaXQoInVucGlwZSIsdGhpcyxJZSkpLHRoaXM7aWYoIUZlKXt2YXIgVmU9T2UucGlwZXMsa2U9T2UucGlwZXNDb3VudDtPZS5waXBlcz1udWxsLE9lLnBpcGVzQ291bnQ9MCxPZS5mbG93aW5nPSExO2Zvcih2YXIgQWU9MDtBZTxrZTtB''@;'; put 'put ''ZSsrKVZlW0FlXS5lbWl0KCJ1bnBpcGUiLHRoaXMse2hhc1VucGlwZWQ6ITF9KTtyZXR1cm4gdGhpc312YXIgX3Q9RGUoT2UucGlwZXMsRmUpO3JldHVybi0xPT09X3R8fChPZS5waXBlcy5zcGxpY2UoX3QsMSksT2UucGlwZXNDb3VudC09MSwxPT09T2UucGlwZXNDb3VudCYmKE9lLnBpcGVz''@;'; put 'put ''PU9lLnBpcGVzWzBdKSxGZS5lbWl0KCJ1bnBpcGUiLHRoaXMsSWUpKSx0aGlzfSxwLnByb3RvdHlwZS5hZGRMaXN0ZW5lcj1wLnByb3RvdHlwZS5vbj1mdW5jdGlvbihGZSxPZSl7dmFyIEllPXcucHJvdG90eXBlLm9uLmNhbGwodGhpcyxGZSxPZSksVmU9dGhpcy5fcmVhZGFibGVTdGF0ZTty''@;'; put 'put ''ZXR1cm4iZGF0YSI9PT1GZT8oVmUucmVhZGFibGVMaXN0ZW5pbmc9dGhpcy5saXN0ZW5lckNvdW50KCJyZWFkYWJsZSIpPjAsITEhPT1WZS5mbG93aW5nJiZ0aGlzLnJlc3VtZSgpKToicmVhZGFibGUiPT09RmUmJiFWZS5lbmRFbWl0dGVkJiYhVmUucmVhZGFibGVMaXN0ZW5pbmcmJihWZS5y''@;'; put 'put ''ZWFkYWJsZUxpc3RlbmluZz1WZS5uZWVkUmVhZGFibGU9ITAsVmUuZmxvd2luZz0hMSxWZS5lbWl0dGVkUmVhZGFibGU9ITEsTCgib24gcmVhZGFibGUiLFZlLmxlbmd0aCxWZS5yZWFkaW5nKSxWZS5sZW5ndGg/bSh0aGlzKTpWZS5yZWFkaW5nfHxJLm5leHRUaWNrKFVlLHRoaXMpKSxJZX0s''@;'; put 'put ''cC5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXI9ZnVuY3Rpb24oRmUsT2Upe3ZhciBJZT13LnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lci5jYWxsKHRoaXMsRmUsT2UpO3JldHVybiJyZWFkYWJsZSI9PT1GZSYmSS5uZXh0VGljayh3ZSx0aGlzKSxJZX0scC5wcm90b3R5cGUucmVtb3ZlQWxsTGlz''@;'; put 'put ''dGVuZXJzPWZ1bmN0aW9uKEZlKXt2YXIgT2U9dy5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4oInJlYWRhYmxlIj09PUZlfHx2b2lkIDA9PT1GZSkmJkkubmV4dFRpY2sod2UsdGhpcyksT2V9LHAucHJvdG90eXBlLnJlc3VtZT1mdW5j''@;'; put 'put ''dGlvbigpe3ZhciBGZT10aGlzLl9yZWFkYWJsZVN0YXRlO3JldHVybiBGZS5mbG93aW5nfHwoTCgicmVzdW1lIiksRmUuZmxvd2luZz0hRmUucmVhZGFibGVMaXN0ZW5pbmcsZnVuY3Rpb24gSmUoRmUsT2Upe09lLnJlc3VtZVNjaGVkdWxlZHx8KE9lLnJlc3VtZVNjaGVkdWxlZD0hMCxJLm5l''@;'; put 'put ''eHRUaWNrKG90LEZlLE9lKSl9KHRoaXMsRmUpKSxGZS5wYXVzZWQ9ITEsdGhpc30scC5wcm90b3R5cGUucGF1c2U9ZnVuY3Rpb24oKXtyZXR1cm4gTCgiY2FsbCBwYXVzZSBmbG93aW5nPSVqIix0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcpLCExIT09dGhpcy5fcmVhZGFibGVTdGF0ZS5m''@;'; put 'put ''bG93aW5nJiYoTCgicGF1c2UiKSx0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmc9ITEsdGhpcy5lbWl0KCJwYXVzZSIpKSx0aGlzLl9yZWFkYWJsZVN0YXRlLnBhdXNlZD0hMCx0aGlzfSxwLnByb3RvdHlwZS53cmFwPWZ1bmN0aW9uKEZlKXt2YXIgT2U9dGhpcyxJZT10aGlzLl9yZWFkYWJs''@;'; put 'put ''ZVN0YXRlLFZlPSExO2Zvcih2YXIga2UgaW4gRmUub24oImVuZCIsZnVuY3Rpb24oKXtpZihMKCJ3cmFwcGVkIGVuZCIpLEllLmRlY29kZXImJiFJZS5lbmRlZCl7dmFyIF90PUllLmRlY29kZXIuZW5kKCk7X3QmJl90Lmxlbmd0aCYmT2UucHVzaChfdCl9T2UucHVzaChudWxsKX0pLEZlLm9u''@;'; put 'put ''KCJkYXRhIixmdW5jdGlvbihfdCl7TCgid3JhcHBlZCBkYXRhIiksSWUuZGVjb2RlciYmKF90PUllLmRlY29kZXIud3JpdGUoX3QpKSxJZS5vYmplY3RNb2RlJiZudWxsPT1fdHx8IShJZS5vYmplY3RNb2RlfHxfdCYmX3QubGVuZ3RoKXx8T2UucHVzaChfdCl8fChWZT0hMCxGZS5wYXVzZSgp''@;'; put 'put ''KX0pLEZlKXZvaWQgMD09PXRoaXNba2VdJiYiZnVuY3Rpb24iPT10eXBlb2YgRmVba2VdJiYodGhpc1trZV09ZnVuY3Rpb24obnQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBGZVtudF0uYXBwbHkoRmUsYXJndW1lbnRzKX19KGtlKSk7Zm9yKHZhciBBZT0wO0FlPFNlLmxlbmd0aDtBZSsr''@;'; put 'put ''KUZlLm9uKFNlW0FlXSx0aGlzLmVtaXQuYmluZCh0aGlzLFNlW0FlXSkpO3JldHVybiB0aGlzLl9yZWFkPWZ1bmN0aW9uKF90KXtMKCJ3cmFwcGVkIF9yZWFkIixfdCksVmUmJihWZT0hMSxGZS5yZXN1bWUoKSl9LHRoaXN9LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihwLnByb3RvdHlw''@;'; put 'put ''ZVtTeW1ib2wuYXN5bmNJdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwPT09bWUmJihtZT15KDU4NTApKSxtZSh0aGlzKX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwLnByb3RvdHlwZSwicmVhZGFibGVIaWdoV2F0ZXJNYXJrIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24o''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5oaWdoV2F0ZXJNYXJrfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwLnByb3RvdHlwZSwicmVhZGFibGVCdWZmZXIiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlJiZ0aGlzLl9yZWFk''@;'; put 'put ''YWJsZVN0YXRlLmJ1ZmZlcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkocC5wcm90b3R5cGUsInJlYWRhYmxlRmxvd2luZyIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZ30sc2V0OmZ1bmN0aW9uKE9lKXt0aGlzLl9yZWFk''@;'; put 'put ''YWJsZVN0YXRlJiYodGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nPU9lKX19KSxwLl9mcm9tTGlzdD12ZSxPYmplY3QuZGVmaW5lUHJvcGVydHkocC5wcm90b3R5cGUsInJlYWRhYmxlTGVuZ3RoIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVhZGFibGVT''@;'; put 'put ''dGF0ZS5sZW5ndGh9fSksImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKHAuZnJvbT1mdW5jdGlvbihGZSxPZSl7cmV0dXJuIHZvaWQgMD09PV9lJiYoX2U9eSg1MTY3KSksX2UocCxGZSxPZSl9KX0sNDYwNToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPU87dmFyIEk9eSg0''@;'; put 'put ''MjgxKS5xLF89SS5FUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRCxnPUkuRVJSX01VTFRJUExFX0NBTExCQUNLLEI9SS5FUlJfVFJBTlNGT1JNX0FMUkVBRFlfVFJBTlNGT1JNSU5HLHc9SS5FUlJfVFJBTlNGT1JNX1dJVEhfTEVOR1RIXzAsUD15KDY3NTMpO2Z1bmN0aW9uIEYoTCxLKXt2YXIg''@;'; put 'put ''VT10aGlzLl90cmFuc2Zvcm1TdGF0ZTtVLnRyYW5zZm9ybWluZz0hMTt2YXIgVz1VLndyaXRlY2I7aWYobnVsbD09PVcpcmV0dXJuIHRoaXMuZW1pdCgiZXJyb3IiLG5ldyBnKTtVLndyaXRlY2h1bms9bnVsbCxVLndyaXRlY2I9bnVsbCxudWxsIT1LJiZ0aGlzLnB1c2goSyksVyhMKTt2YXIg''@;'; put 'put ''WT10aGlzLl9yZWFkYWJsZVN0YXRlO1kucmVhZGluZz0hMSwoWS5uZWVkUmVhZGFibGV8fFkubGVuZ3RoPFkuaGlnaFdhdGVyTWFyaykmJnRoaXMuX3JlYWQoWS5oaWdoV2F0ZXJNYXJrKX1mdW5jdGlvbiBPKEwpe2lmKCEodGhpcyBpbnN0YW5jZW9mIE8pKXJldHVybiBuZXcgTyhMKTtQLmNh''@;'; put 'put ''bGwodGhpcyxMKSx0aGlzLl90cmFuc2Zvcm1TdGF0ZT17YWZ0ZXJUcmFuc2Zvcm06Ri5iaW5kKHRoaXMpLG5lZWRUcmFuc2Zvcm06ITEsdHJhbnNmb3JtaW5nOiExLHdyaXRlY2I6bnVsbCx3cml0ZWNodW5rOm51bGwsd3JpdGVlbmNvZGluZzpudWxsfSx0aGlzLl9yZWFkYWJsZVN0YXRlLm5l''@;'; put 'put ''ZWRSZWFkYWJsZT0hMCx0aGlzLl9yZWFkYWJsZVN0YXRlLnN5bmM9ITEsTCYmKCJmdW5jdGlvbiI9PXR5cGVvZiBMLnRyYW5zZm9ybSYmKHRoaXMuX3RyYW5zZm9ybT1MLnRyYW5zZm9ybSksImZ1bmN0aW9uIj09dHlwZW9mIEwuZmx1c2gmJih0aGlzLl9mbHVzaD1MLmZsdXNoKSksdGhpcy5v''@;'; put 'put ''bigicHJlZmluaXNoIix6KX1mdW5jdGlvbiB6KCl7dmFyIEw9dGhpczsiZnVuY3Rpb24iIT10eXBlb2YgdGhpcy5fZmx1c2h8fHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkP04odGhpcyxudWxsLG51bGwpOnRoaXMuX2ZsdXNoKGZ1bmN0aW9uKEssVSl7TihMLEssVSl9KX1mdW5jdGlv''@;'; put 'put ''biBOKEwsSyxVKXtpZihLKXJldHVybiBMLmVtaXQoImVycm9yIixLKTtpZihudWxsIT1VJiZMLnB1c2goVSksTC5fd3JpdGFibGVTdGF0ZS5sZW5ndGgpdGhyb3cgbmV3IHc7aWYoTC5fdHJhbnNmb3JtU3RhdGUudHJhbnNmb3JtaW5nKXRocm93IG5ldyBCO3JldHVybiBMLnB1c2gobnVsbCl9''@;'; put 'put ''eSg1NzE3KShPLFApLE8ucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oTCxLKXtyZXR1cm4gdGhpcy5fdHJhbnNmb3JtU3RhdGUubmVlZFRyYW5zZm9ybT0hMSxQLnByb3RvdHlwZS5wdXNoLmNhbGwodGhpcyxMLEspfSxPLnByb3RvdHlwZS5fdHJhbnNmb3JtPWZ1bmN0aW9uKEwsSyxVKXtVKG5l''@;'; put 'put ''dyBfKCJfdHJhbnNmb3JtKCkiKSl9LE8ucHJvdG90eXBlLl93cml0ZT1mdW5jdGlvbihMLEssVSl7dmFyIFc9dGhpcy5fdHJhbnNmb3JtU3RhdGU7aWYoVy53cml0ZWNiPVUsVy53cml0ZWNodW5rPUwsVy53cml0ZWVuY29kaW5nPUssIVcudHJhbnNmb3JtaW5nKXt2YXIgWT10aGlzLl9yZWFk''@;'; put 'put ''YWJsZVN0YXRlOyhXLm5lZWRUcmFuc2Zvcm18fFkubmVlZFJlYWRhYmxlfHxZLmxlbmd0aDxZLmhpZ2hXYXRlck1hcmspJiZ0aGlzLl9yZWFkKFkuaGlnaFdhdGVyTWFyayl9fSxPLnByb3RvdHlwZS5fcmVhZD1mdW5jdGlvbihMKXt2YXIgSz10aGlzLl90cmFuc2Zvcm1TdGF0ZTtudWxsPT09''@;'; put 'put ''Sy53cml0ZWNodW5rfHxLLnRyYW5zZm9ybWluZz9LLm5lZWRUcmFuc2Zvcm09ITA6KEsudHJhbnNmb3JtaW5nPSEwLHRoaXMuX3RyYW5zZm9ybShLLndyaXRlY2h1bmssSy53cml0ZWVuY29kaW5nLEsuYWZ0ZXJUcmFuc2Zvcm0pKX0sTy5wcm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24oTCxL''@;'; put 'put ''KXtQLnByb3RvdHlwZS5fZGVzdHJveS5jYWxsKHRoaXMsTCxmdW5jdGlvbihVKXtLKFUpfSl9fSw0MjI5Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBCLEk9eSg0MTU1KTtmdW5jdGlvbiBnKHhlKXt2YXIgdmU9dGhpczt0aGlzLm5leHQ9bnVsbCx0aGlzLmVudHJ5PW51bGwsdGhpcy5m''@;'; put 'put ''aW5pc2g9ZnVuY3Rpb24oKXshZnVuY3Rpb24gb3QoeGUsdmUsWGUpe3ZhciB6ZT14ZS5lbnRyeTtmb3IoeGUuZW50cnk9bnVsbDt6ZTspe3ZhciBEZT16ZS5jYWxsYmFjazt2ZS5wZW5kaW5nY2ItLSxEZShYZSksemU9emUubmV4dH12ZS5jb3JrZWRSZXF1ZXN0c0ZyZWUubmV4dD14ZX0odmUs''@;'; put 'put ''eGUpfX11ZS5leHBvcnRzPVYsVi5Xcml0YWJsZVN0YXRlPVNlO3ZhciBqZSx3PXtkZXByZWNhdGU6eSg0OTI3KX0sUD15KDI1MDMpLEY9eSg4NzY0KS5CdWZmZXIsTz0odHlwZW9mIHkuZzwidSI/eS5nOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp0eXBlb2Ygc2VsZjwidSI/c2VsZjp7fSku''@;'; put 'put ''VWludDhBcnJheXx8ZnVuY3Rpb24oKXt9LEw9eSgxMTk1KSxVPXkoMjQ1NykuZ2V0SGlnaFdhdGVyTWFyayxXPXkoNDI4MSkucSxZPVcuRVJSX0lOVkFMSURfQVJHX1RZUEUscT1XLkVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVELGVlPVcuRVJSX01VTFRJUExFX0NBTExCQUNLLEo9Vy5FUlJf''@;'; put 'put ''U1RSRUFNX0NBTk5PVF9QSVBFLG5lPVcuRVJSX1NUUkVBTV9ERVNUUk9ZRUQsaWU9Vy5FUlJfU1RSRUFNX05VTExfVkFMVUVTLGxlPVcuRVJSX1NUUkVBTV9XUklURV9BRlRFUl9FTkQsbWU9Vy5FUlJfVU5LTk9XTl9FTkNPRElORyxfZT1MLmVycm9yT3JEZXN0cm95O2Z1bmN0aW9uIFRlKCl7''@;'; put 'put ''fWZ1bmN0aW9uIFNlKHhlLHZlLFhlKXtCPUJ8fHkoNjc1MyksImJvb2xlYW4iIT10eXBlb2YgWGUmJihYZT12ZSBpbnN0YW5jZW9mIEIpLHRoaXMub2JqZWN0TW9kZT0hISh4ZT14ZXx8e30pLm9iamVjdE1vZGUsWGUmJih0aGlzLm9iamVjdE1vZGU9dGhpcy5vYmplY3RNb2RlfHwhIXhlLndy''@;'; put 'put ''aXRhYmxlT2JqZWN0TW9kZSksdGhpcy5oaWdoV2F0ZXJNYXJrPVUodGhpcyx4ZSwid3JpdGFibGVIaWdoV2F0ZXJNYXJrIixYZSksdGhpcy5maW5hbENhbGxlZD0hMSx0aGlzLm5lZWREcmFpbj0hMSx0aGlzLmVuZGluZz0hMSx0aGlzLmVuZGVkPSExLHRoaXMuZmluaXNoZWQ9ITEsdGhpcy5k''@;'; put 'put ''ZXN0cm95ZWQ9ITEsdGhpcy5kZWNvZGVTdHJpbmdzPSEoITE9PT14ZS5kZWNvZGVTdHJpbmdzKSx0aGlzLmRlZmF1bHRFbmNvZGluZz14ZS5kZWZhdWx0RW5jb2Rpbmd8fCJ1dGY4Iix0aGlzLmxlbmd0aD0wLHRoaXMud3JpdGluZz0hMSx0aGlzLmNvcmtlZD0wLHRoaXMuc3luYz0hMCx0aGlz''@;'; put 'put ''LmJ1ZmZlclByb2Nlc3Npbmc9ITEsdGhpcy5vbndyaXRlPWZ1bmN0aW9uKERlKXshZnVuY3Rpb24gRSh4ZSx2ZSl7dmFyIFhlPXhlLl93cml0YWJsZVN0YXRlLHplPVhlLnN5bmMsRGU9WGUud3JpdGVjYjtpZigiZnVuY3Rpb24iIT10eXBlb2YgRGUpdGhyb3cgbmV3IGVlO2lmKGZ1bmN0aW9u''@;'; put 'put ''IGooeGUpe3hlLndyaXRpbmc9ITEseGUud3JpdGVjYj1udWxsLHhlLmxlbmd0aC09eGUud3JpdGVsZW4seGUud3JpdGVsZW49MH0oWGUpLHZlKSFmdW5jdGlvbiBIKHhlLHZlLFhlLHplLERlKXstLXZlLnBlbmRpbmdjYixYZT8oSS5uZXh0VGljayhEZSx6ZSksSS5uZXh0VGljayhVZSx4ZSx2''@;'; put 'put ''ZSkseGUuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSEwLF9lKHhlLHplKSk6KERlKHplKSx4ZS5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITAsX2UoeGUsemUpLFVlKHhlLHZlKSl9KHhlLFhlLHplLHZlLERlKTtlbHNle3ZhciBGZT10ZShYZSl8fHhlLmRlc3Ryb3llZDshRmUm''@;'; put 'put ''JiFYZS5jb3JrZWQmJiFYZS5idWZmZXJQcm9jZXNzaW5nJiZYZS5idWZmZXJlZFJlcXVlc3QmJmFlKHhlLFhlKSx6ZT9JLm5leHRUaWNrKG0seGUsWGUsRmUsRGUpOm0oeGUsWGUsRmUsRGUpfX0odmUsRGUpfSx0aGlzLndyaXRlY2I9bnVsbCx0aGlzLndyaXRlbGVuPTAsdGhpcy5idWZmZXJl''@;'; put 'put ''ZFJlcXVlc3Q9bnVsbCx0aGlzLmxhc3RCdWZmZXJlZFJlcXVlc3Q9bnVsbCx0aGlzLnBlbmRpbmdjYj0wLHRoaXMucHJlZmluaXNoZWQ9ITEsdGhpcy5lcnJvckVtaXR0ZWQ9ITEsdGhpcy5lbWl0Q2xvc2U9ITEhPT14ZS5lbWl0Q2xvc2UsdGhpcy5hdXRvRGVzdHJveT0hIXhlLmF1dG9EZXN0''@;'; put 'put ''cm95LHRoaXMuYnVmZmVyZWRSZXF1ZXN0Q291bnQ9MCx0aGlzLmNvcmtlZFJlcXVlc3RzRnJlZT1uZXcgZyh0aGlzKX1mdW5jdGlvbiBWKHhlKXt2YXIgdmU9dGhpcyBpbnN0YW5jZW9mKEI9Qnx8eSg2NzUzKSk7aWYoIXZlJiYhamUuY2FsbChWLHRoaXMpKXJldHVybiBuZXcgVih4ZSk7dGhp''@;'; put 'put ''cy5fd3JpdGFibGVTdGF0ZT1uZXcgU2UoeGUsdGhpcyx2ZSksdGhpcy53cml0YWJsZT0hMCx4ZSYmKCJmdW5jdGlvbiI9PXR5cGVvZiB4ZS53cml0ZSYmKHRoaXMuX3dyaXRlPXhlLndyaXRlKSwiZnVuY3Rpb24iPT10eXBlb2YgeGUud3JpdGV2JiYodGhpcy5fd3JpdGV2PXhlLndyaXRldiks''@;'; put 'put ''ImZ1bmN0aW9uIj09dHlwZW9mIHhlLmRlc3Ryb3kmJih0aGlzLl9kZXN0cm95PXhlLmRlc3Ryb3kpLCJmdW5jdGlvbiI9PXR5cGVvZiB4ZS5maW5hbCYmKHRoaXMuX2ZpbmFsPXhlLmZpbmFsKSksUC5jYWxsKHRoaXMpfWZ1bmN0aW9uIFQoeGUsdmUsWGUsemUsRGUsRmUsT2Upe3ZlLndyaXRl''@;'; put 'put ''bGVuPXplLHZlLndyaXRlY2I9T2UsdmUud3JpdGluZz0hMCx2ZS5zeW5jPSEwLHZlLmRlc3Ryb3llZD92ZS5vbndyaXRlKG5ldyBuZSgid3JpdGUiKSk6WGU/eGUuX3dyaXRldihEZSx2ZS5vbndyaXRlKTp4ZS5fd3JpdGUoRGUsRmUsdmUub253cml0ZSksdmUuc3luYz0hMX1mdW5jdGlvbiBt''@;'; put 'put ''KHhlLHZlLFhlLHplKXtYZXx8ZnVuY3Rpb24gQSh4ZSx2ZSl7MD09PXZlLmxlbmd0aCYmdmUubmVlZERyYWluJiYodmUubmVlZERyYWluPSExLHhlLmVtaXQoImRyYWluIikpfSh4ZSx2ZSksdmUucGVuZGluZ2NiLS0semUoKSxVZSh4ZSx2ZSl9ZnVuY3Rpb24gYWUoeGUsdmUpe3ZlLmJ1ZmZl''@;'; put 'put ''clByb2Nlc3Npbmc9ITA7dmFyIFhlPXZlLmJ1ZmZlcmVkUmVxdWVzdDtpZih4ZS5fd3JpdGV2JiZYZSYmWGUubmV4dCl7dmFyIERlPW5ldyBBcnJheSh2ZS5idWZmZXJlZFJlcXVlc3RDb3VudCksRmU9dmUuY29ya2VkUmVxdWVzdHNGcmVlO0ZlLmVudHJ5PVhlO2Zvcih2YXIgT2U9MCxJZT0h''@;'; put 'put ''MDtYZTspRGVbT2VdPVhlLFhlLmlzQnVmfHwoSWU9ITEpLFhlPVhlLm5leHQsT2UrPTE7RGUuYWxsQnVmZmVycz1JZSxUKHhlLHZlLCEwLHZlLmxlbmd0aCxEZSwiIixGZS5maW5pc2gpLHZlLnBlbmRpbmdjYisrLHZlLmxhc3RCdWZmZXJlZFJlcXVlc3Q9bnVsbCxGZS5uZXh0Pyh2ZS5jb3Jr''@;'; put 'put ''ZWRSZXF1ZXN0c0ZyZWU9RmUubmV4dCxGZS5uZXh0PW51bGwpOnZlLmNvcmtlZFJlcXVlc3RzRnJlZT1uZXcgZyh2ZSksdmUuYnVmZmVyZWRSZXF1ZXN0Q291bnQ9MH1lbHNle2Zvcig7WGU7KXt2YXIgVmU9WGUuY2h1bms7aWYoVCh4ZSx2ZSwhMSx2ZS5vYmplY3RNb2RlPzE6VmUubGVuZ3Ro''@;'; put 'put ''LFZlLFhlLmVuY29kaW5nLFhlLmNhbGxiYWNrKSxYZT1YZS5uZXh0LHZlLmJ1ZmZlcmVkUmVxdWVzdENvdW50LS0sdmUud3JpdGluZylicmVha31udWxsPT09WGUmJih2ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0PW51bGwpfXZlLmJ1ZmZlcmVkUmVxdWVzdD1YZSx2ZS5idWZmZXJQcm9jZXNzaW5n''@;'; put 'put ''PSExfWZ1bmN0aW9uIHRlKHhlKXtyZXR1cm4geGUuZW5kaW5nJiYwPT09eGUubGVuZ3RoJiZudWxsPT09eGUuYnVmZmVyZWRSZXF1ZXN0JiYheGUuZmluaXNoZWQmJiF4ZS53cml0aW5nfWZ1bmN0aW9uIHNlKHhlLHZlKXt4ZS5fZmluYWwoZnVuY3Rpb24oWGUpe3ZlLnBlbmRpbmdjYi0tLFhl''@;'; put 'put ''JiZfZSh4ZSxYZSksdmUucHJlZmluaXNoZWQ9ITAseGUuZW1pdCgicHJlZmluaXNoIiksVWUoeGUsdmUpfSl9ZnVuY3Rpb24gVWUoeGUsdmUpe3ZhciBYZT10ZSh2ZSk7aWYoWGUmJihmdW5jdGlvbiB3ZSh4ZSx2ZSl7IXZlLnByZWZpbmlzaGVkJiYhdmUuZmluYWxDYWxsZWQmJigiZnVuY3Rp''@;'; put 'put ''b24iIT10eXBlb2YgeGUuX2ZpbmFsfHx2ZS5kZXN0cm95ZWQ/KHZlLnByZWZpbmlzaGVkPSEwLHhlLmVtaXQoInByZWZpbmlzaCIpKToodmUucGVuZGluZ2NiKyssdmUuZmluYWxDYWxsZWQ9ITAsSS5uZXh0VGljayhzZSx4ZSx2ZSkpKX0oeGUsdmUpLDA9PT12ZS5wZW5kaW5nY2ImJih2ZS5m''@;'; put 'put ''aW5pc2hlZD0hMCx4ZS5lbWl0KCJmaW5pc2giKSx2ZS5hdXRvRGVzdHJveSkpKXt2YXIgemU9eGUuX3JlYWRhYmxlU3RhdGU7KCF6ZXx8emUuYXV0b0Rlc3Ryb3kmJnplLmVuZEVtaXR0ZWQpJiZ4ZS5kZXN0cm95KCl9cmV0dXJuIFhlfXkoNTcxNykoVixQKSxTZS5wcm90b3R5cGUuZ2V0QnVm''@;'; put 'put ''ZmVyPWZ1bmN0aW9uKCl7Zm9yKHZhciB2ZT10aGlzLmJ1ZmZlcmVkUmVxdWVzdCxYZT1bXTt2ZTspWGUucHVzaCh2ZSksdmU9dmUubmV4dDtyZXR1cm4gWGV9LGZ1bmN0aW9uKCl7dHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eShTZS5wcm90b3R5cGUsImJ1ZmZlciIse2dldDp3LmRlcHJlY2F0''@;'; put 'put ''ZShmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldEJ1ZmZlcigpfSwiX3dyaXRhYmxlU3RhdGUuYnVmZmVyIGlzIGRlcHJlY2F0ZWQuIFVzZSBfd3JpdGFibGVTdGF0ZS5nZXRCdWZmZXIgaW5zdGVhZC4iLCJERVAwMDAzIil9KX1jYXRjaHt9fSgpLCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wm''@;'; put 'put ''JlN5bWJvbC5oYXNJbnN0YW5jZSYmImZ1bmN0aW9uIj09dHlwZW9mIEZ1bmN0aW9uLnByb3RvdHlwZVtTeW1ib2wuaGFzSW5zdGFuY2VdPyhqZT1GdW5jdGlvbi5wcm90b3R5cGVbU3ltYm9sLmhhc0luc3RhbmNlXSxPYmplY3QuZGVmaW5lUHJvcGVydHkoVixTeW1ib2wuaGFzSW5zdGFuY2Us''@;'; put 'put ''e3ZhbHVlOmZ1bmN0aW9uKHZlKXtyZXR1cm4hIWplLmNhbGwodGhpcyx2ZSl8fHRoaXM9PT1WJiZ2ZSYmdmUuX3dyaXRhYmxlU3RhdGUgaW5zdGFuY2VvZiBTZX19KSk6amU9ZnVuY3Rpb24odmUpe3JldHVybiB2ZSBpbnN0YW5jZW9mIHRoaXN9LFYucHJvdG90eXBlLnBpcGU9ZnVuY3Rpb24o''@;'; put 'put ''KXtfZSh0aGlzLG5ldyBKKX0sVi5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oeGUsdmUsWGUpe3ZhciB6ZT10aGlzLl93cml0YWJsZVN0YXRlLERlPSExLEZlPSF6ZS5vYmplY3RNb2RlJiZmdW5jdGlvbiBOKHhlKXtyZXR1cm4gRi5pc0J1ZmZlcih4ZSl8fHhlIGluc3RhbmNlb2YgT30oeGUp''@;'; put 'put ''O3JldHVybiBGZSYmIUYuaXNCdWZmZXIoeGUpJiYoeGU9ZnVuY3Rpb24geih4ZSl7cmV0dXJuIEYuZnJvbSh4ZSl9KHhlKSksImZ1bmN0aW9uIj09dHlwZW9mIHZlJiYoWGU9dmUsdmU9bnVsbCksRmU/dmU9ImJ1ZmZlciI6dmV8fCh2ZT16ZS5kZWZhdWx0RW5jb2RpbmcpLCJmdW5jdGlvbiIh''@;'; put 'put ''PXR5cGVvZiBYZSYmKFhlPVRlKSx6ZS5lbmRpbmc/ZnVuY3Rpb24gcCh4ZSx2ZSl7dmFyIFhlPW5ldyBsZTtfZSh4ZSxYZSksSS5uZXh0VGljayh2ZSxYZSl9KHRoaXMsWGUpOihGZXx8ZnVuY3Rpb24gYih4ZSx2ZSxYZSx6ZSl7dmFyIERlO3JldHVybiBudWxsPT09WGU/RGU9bmV3IGllOiJz''@;'; put 'put ''dHJpbmciIT10eXBlb2YgWGUmJiF2ZS5vYmplY3RNb2RlJiYoRGU9bmV3IFkoImNodW5rIixbInN0cmluZyIsIkJ1ZmZlciJdLFhlKSksIURlfHwoX2UoeGUsRGUpLEkubmV4dFRpY2soemUsRGUpLCExKX0odGhpcyx6ZSx4ZSxYZSkpJiYoemUucGVuZGluZ2NiKyssRGU9ZnVuY3Rpb24gQyh4''@;'; put 'put ''ZSx2ZSxYZSx6ZSxEZSxGZSl7aWYoIVhlKXt2YXIgT2U9ZnVuY3Rpb24geCh4ZSx2ZSxYZSl7cmV0dXJuIXhlLm9iamVjdE1vZGUmJiExIT09eGUuZGVjb2RlU3RyaW5ncyYmInN0cmluZyI9PXR5cGVvZiB2ZSYmKHZlPUYuZnJvbSh2ZSxYZSkpLHZlfSh2ZSx6ZSxEZSk7emUhPT1PZSYmKFhl''@;'; put 'put ''PSEwLERlPSJidWZmZXIiLHplPU9lKX12YXIgSWU9dmUub2JqZWN0TW9kZT8xOnplLmxlbmd0aDt2ZS5sZW5ndGgrPUllO3ZhciBWZT12ZS5sZW5ndGg8dmUuaGlnaFdhdGVyTWFyaztpZihWZXx8KHZlLm5lZWREcmFpbj0hMCksdmUud3JpdGluZ3x8dmUuY29ya2VkKXt2YXIga2U9dmUubGFz''@;'; put 'put ''dEJ1ZmZlcmVkUmVxdWVzdDt2ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0PXtjaHVuazp6ZSxlbmNvZGluZzpEZSxpc0J1ZjpYZSxjYWxsYmFjazpGZSxuZXh0Om51bGx9LGtlP2tlLm5leHQ9dmUubGFzdEJ1ZmZlcmVkUmVxdWVzdDp2ZS5idWZmZXJlZFJlcXVlc3Q9dmUubGFzdEJ1ZmZlcmVkUmVx''@;'; put 'put ''dWVzdCx2ZS5idWZmZXJlZFJlcXVlc3RDb3VudCs9MX1lbHNlIFQoeGUsdmUsITEsSWUsemUsRGUsRmUpO3JldHVybiBWZX0odGhpcyx6ZSxGZSx4ZSx2ZSxYZSkpLERlfSxWLnByb3RvdHlwZS5jb3JrPWZ1bmN0aW9uKCl7dGhpcy5fd3JpdGFibGVTdGF0ZS5jb3JrZWQrK30sVi5wcm90b3R5''@;'; put 'put ''cGUudW5jb3JrPWZ1bmN0aW9uKCl7dmFyIHhlPXRoaXMuX3dyaXRhYmxlU3RhdGU7eGUuY29ya2VkJiYoeGUuY29ya2VkLS0sIXhlLndyaXRpbmcmJiF4ZS5jb3JrZWQmJiF4ZS5idWZmZXJQcm9jZXNzaW5nJiZ4ZS5idWZmZXJlZFJlcXVlc3QmJmFlKHRoaXMseGUpKX0sVi5wcm90b3R5cGUu''@;'; put 'put ''c2V0RGVmYXVsdEVuY29kaW5nPWZ1bmN0aW9uKHZlKXtpZigic3RyaW5nIj09dHlwZW9mIHZlJiYodmU9dmUudG9Mb3dlckNhc2UoKSksIShbImhleCIsInV0ZjgiLCJ1dGYtOCIsImFzY2lpIiwiYmluYXJ5IiwiYmFzZTY0IiwidWNzMiIsInVjcy0yIiwidXRmMTZsZSIsInV0Zi0xNmxlIiwi''@;'; put 'put ''cmF3Il0uaW5kZXhPZigodmUrIiIpLnRvTG93ZXJDYXNlKCkpPi0xKSl0aHJvdyBuZXcgbWUodmUpO3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmRlZmF1bHRFbmNvZGluZz12ZSx0aGlzfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoVi5wcm90b3R5cGUsIndyaXRhYmxlQnVmZmVyIix7ZW51''@;'; put 'put ''bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZSYmdGhpcy5fd3JpdGFibGVTdGF0ZS5nZXRCdWZmZXIoKX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoVi5wcm90b3R5cGUsIndyaXRhYmxlSGlnaFdhdGVyTWFyayIse2VudW1lcmFibGU6ITEsZ2V0''@;'; put 'put ''OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUuaGlnaFdhdGVyTWFya319KSxWLnByb3RvdHlwZS5fd3JpdGU9ZnVuY3Rpb24oeGUsdmUsWGUpe1hlKG5ldyBxKCJfd3JpdGUoKSIpKX0sVi5wcm90b3R5cGUuX3dyaXRldj1udWxsLFYucHJvdG90eXBlLmVuZD1mdW5jdGlv''@;'; put 'put ''bih4ZSx2ZSxYZSl7dmFyIHplPXRoaXMuX3dyaXRhYmxlU3RhdGU7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHhlPyhYZT14ZSx4ZT1udWxsLHZlPW51bGwpOiJmdW5jdGlvbiI9PXR5cGVvZiB2ZSYmKFhlPXZlLHZlPW51bGwpLG51bGwhPXhlJiZ0aGlzLndyaXRlKHhlLHZlKSx6ZS5jb3Jr''@;'; put 'put ''ZWQmJih6ZS5jb3JrZWQ9MSx0aGlzLnVuY29yaygpKSx6ZS5lbmRpbmd8fGZ1bmN0aW9uIEplKHhlLHZlLFhlKXt2ZS5lbmRpbmc9ITAsVWUoeGUsdmUpLFhlJiYodmUuZmluaXNoZWQ/SS5uZXh0VGljayhYZSk6eGUub25jZSgiZmluaXNoIixYZSkpLHZlLmVuZGVkPSEwLHhlLndyaXRhYmxl''@;'; put 'put ''PSExfSh0aGlzLHplLFhlKSx0aGlzfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoVi5wcm90b3R5cGUsIndyaXRhYmxlTGVuZ3RoIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5sZW5ndGh9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFYu''@;'; put 'put ''cHJvdG90eXBlLCJkZXN0cm95ZWQiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzLl93cml0YWJsZVN0YXRlJiZ0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZH0sc2V0OmZ1bmN0aW9uKHZlKXt0aGlzLl93cml0YWJsZVN0YXRlJiYodGhpcy5f''@;'; put 'put ''d3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ9dmUpfX0pLFYucHJvdG90eXBlLmRlc3Ryb3k9TC5kZXN0cm95LFYucHJvdG90eXBlLl91bmRlc3Ryb3k9TC51bmRlc3Ryb3ksVi5wcm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24oeGUsdmUpe3ZlKHhlKX19LDU4NTA6KHVlLFgseSk9PnsidXNlIHN0''@;'; put 'put ''cmljdCI7dmFyIF8sST15KDQxNTUpO2Z1bmN0aW9uIGcobGUsbWUsX2Upe3JldHVybiBtZT1mdW5jdGlvbiBCKGxlKXt2YXIgbWU9ZnVuY3Rpb24gdyhsZSxtZSl7aWYoIm9iamVjdCIhPXR5cGVvZiBsZXx8bnVsbD09PWxlKXJldHVybiBsZTt2YXIgX2U9bGVbU3ltYm9sLnRvUHJpbWl0aXZl''@;'; put 'put ''XTtpZih2b2lkIDAhPT1fZSl7dmFyIFRlPV9lLmNhbGwobGUsbWV8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBUZSlyZXR1cm4gVGU7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmlu''@;'; put 'put ''ZyI9PT1tZT9TdHJpbmc6TnVtYmVyKShsZSl9KGxlLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIG1lP21lOlN0cmluZyhtZSl9KG1lKSxtZSBpbiBsZT9PYmplY3QuZGVmaW5lUHJvcGVydHkobGUsbWUse3ZhbHVlOl9lLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdy''@;'; put 'put ''aXRhYmxlOiEwfSk6bGVbbWVdPV9lLGxlfXZhciBQPXkoODYxMCksRj1TeW1ib2woImxhc3RSZXNvbHZlIiksTz1TeW1ib2woImxhc3RSZWplY3QiKSx6PVN5bWJvbCgiZXJyb3IiKSxOPVN5bWJvbCgiZW5kZWQiKSxMPVN5bWJvbCgibGFzdFByb21pc2UiKSxLPVN5bWJvbCgiaGFuZGxlUHJv''@;'; put 'put ''bWlzZSIpLFU9U3ltYm9sKCJzdHJlYW0iKTtmdW5jdGlvbiBXKGxlLG1lKXtyZXR1cm57dmFsdWU6bGUsZG9uZTptZX19ZnVuY3Rpb24gWShsZSl7dmFyIG1lPWxlW0ZdO2lmKG51bGwhPT1tZSl7dmFyIF9lPWxlW1VdLnJlYWQoKTtudWxsIT09X2UmJihsZVtMXT1udWxsLGxlW0ZdPW51bGws''@;'; put 'put ''bGVbT109bnVsbCxtZShXKF9lLCExKSkpfX1mdW5jdGlvbiBxKGxlKXtJLm5leHRUaWNrKFksbGUpfXZhciBKPU9iamVjdC5nZXRQcm90b3R5cGVPZihmdW5jdGlvbigpe30pLG5lPU9iamVjdC5zZXRQcm90b3R5cGVPZigoZyhfPXtnZXQgc3RyZWFtKCl7cmV0dXJuIHRoaXNbVV19LG5leHQ6''@;'; put 'put ''ZnVuY3Rpb24oKXt2YXIgbWU9dGhpcyxfZT10aGlzW3pdO2lmKG51bGwhPT1fZSlyZXR1cm4gUHJvbWlzZS5yZWplY3QoX2UpO2lmKHRoaXNbTl0pcmV0dXJuIFByb21pc2UucmVzb2x2ZShXKHZvaWQgMCwhMCkpO2lmKHRoaXNbVV0uZGVzdHJveWVkKXJldHVybiBuZXcgUHJvbWlzZShmdW5j''@;'; put 'put ''dGlvbihWLHApe0kubmV4dFRpY2soZnVuY3Rpb24oKXttZVt6XT9wKG1lW3pdKTpWKFcodm9pZCAwLCEwKSl9KX0pO3ZhciBTZSxUZT10aGlzW0xdO2lmKFRlKVNlPW5ldyBQcm9taXNlKGZ1bmN0aW9uIGVlKGxlLG1lKXtyZXR1cm4gZnVuY3Rpb24oX2UsVGUpe2xlLnRoZW4oZnVuY3Rpb24o''@;'; put 'put ''KXttZVtOXT9fZShXKHZvaWQgMCwhMCkpOm1lW0tdKF9lLFRlKX0sVGUpfX0oVGUsdGhpcykpO2Vsc2V7dmFyIGplPXRoaXNbVV0ucmVhZCgpO2lmKG51bGwhPT1qZSlyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFcoamUsITEpKTtTZT1uZXcgUHJvbWlzZSh0aGlzW0tdKX1yZXR1cm4gdGhpc1tM''@;'; put 'put ''XT1TZSxTZX19LFN5bWJvbC5hc3luY0l0ZXJhdG9yLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxnKF8sInJldHVybiIsZnVuY3Rpb24oKXt2YXIgbWU9dGhpcztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oX2UsVGUpe21lW1VdLmRlc3Ryb3kobnVsbCxmdW5jdGlvbihTZSl7U2U/VGUo''@;'; put 'put ''U2UpOl9lKFcodm9pZCAwLCEwKSl9KX0pfSksXyksSik7dWUuZXhwb3J0cz1mdW5jdGlvbihtZSl7dmFyIF9lLFRlPU9iamVjdC5jcmVhdGUobmUsKGcoX2U9e30sVSx7dmFsdWU6bWUsd3JpdGFibGU6ITB9KSxnKF9lLEYse3ZhbHVlOm51bGwsd3JpdGFibGU6ITB9KSxnKF9lLE8se3ZhbHVl''@;'; put 'put ''Om51bGwsd3JpdGFibGU6ITB9KSxnKF9lLHose3ZhbHVlOm51bGwsd3JpdGFibGU6ITB9KSxnKF9lLE4se3ZhbHVlOm1lLl9yZWFkYWJsZVN0YXRlLmVuZEVtaXR0ZWQsd3JpdGFibGU6ITB9KSxnKF9lLEsse3ZhbHVlOmZ1bmN0aW9uKGplLFYpe3ZhciBwPVRlW1VdLnJlYWQoKTtwPyhUZVtM''@;'; put 'put ''XT1udWxsLFRlW0ZdPW51bGwsVGVbT109bnVsbCxqZShXKHAsITEpKSk6KFRlW0ZdPWplLFRlW09dPVYpfSx3cml0YWJsZTohMH0pLF9lKSk7cmV0dXJuIFRlW0xdPW51bGwsUChtZSxmdW5jdGlvbihTZSl7aWYoU2UmJiJFUlJfU1RSRUFNX1BSRU1BVFVSRV9DTE9TRSIhPT1TZS5jb2RlKXt2''@;'; put 'put ''YXIgamU9VGVbT107cmV0dXJuIG51bGwhPT1qZSYmKFRlW0xdPW51bGwsVGVbRl09bnVsbCxUZVtPXT1udWxsLGplKFNlKSksdm9pZChUZVt6XT1TZSl9dmFyIFY9VGVbRl07bnVsbCE9PVYmJihUZVtMXT1udWxsLFRlW0ZdPW51bGwsVGVbT109bnVsbCxWKFcodm9pZCAwLCEwKSkpLFRlW05d''@;'; put 'put ''PSEwfSksbWUub24oInJlYWRhYmxlIixxLmJpbmQobnVsbCxUZSkpLFRlfX0sNzMyNzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBJKFkscSl7dmFyIGVlPU9iamVjdC5rZXlzKFkpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBKPU9iamVjdC5nZXRPd25Q''@;'; put 'put ''cm9wZXJ0eVN5bWJvbHMoWSk7cSYmKEo9Si5maWx0ZXIoZnVuY3Rpb24obmUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFksbmUpLmVudW1lcmFibGV9KSksZWUucHVzaC5hcHBseShlZSxKKX1yZXR1cm4gZWV9ZnVuY3Rpb24gXyhZKXtmb3IodmFyIHE9MTtxPGFy''@;'; put 'put ''Z3VtZW50cy5sZW5ndGg7cSsrKXt2YXIgZWU9bnVsbCE9YXJndW1lbnRzW3FdP2FyZ3VtZW50c1txXTp7fTtxJTI/SShPYmplY3QoZWUpLCEwKS5mb3JFYWNoKGZ1bmN0aW9uKEope2coWSxKLGVlW0pdKX0pOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQ''@;'; put 'put ''cm9wZXJ0aWVzKFksT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoZWUpKTpJKE9iamVjdChlZSkpLmZvckVhY2goZnVuY3Rpb24oSil7T2JqZWN0LmRlZmluZVByb3BlcnR5KFksSixPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGVlLEopKX0pfXJldHVybiBZfWZ1bmN0''@;'; put 'put ''aW9uIGcoWSxxLGVlKXtyZXR1cm4ocT1GKHEpKWluIFk/T2JqZWN0LmRlZmluZVByb3BlcnR5KFkscSx7dmFsdWU6ZWUsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpZW3FdPWVlLFl9ZnVuY3Rpb24gdyhZLHEpe2Zvcih2YXIgZWU9MDtlZTxxLmxlbmd0aDtl''@;'; put 'put ''ZSsrKXt2YXIgSj1xW2VlXTtKLmVudW1lcmFibGU9Si5lbnVtZXJhYmxlfHwhMSxKLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gSiYmKEoud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShZLEYoSi5rZXkpLEopfX1mdW5jdGlvbiBGKFkpe3ZhciBxPWZ1bmN0aW9uIE8oWSxx''@;'; put 'put ''KXtpZigib2JqZWN0IiE9dHlwZW9mIFl8fG51bGw9PT1ZKXJldHVybiBZO3ZhciBlZT1ZW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09ZWUpe3ZhciBKPWVlLmNhbGwoWSxxfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgSilyZXR1cm4gSjt0aHJvdyBuZXcgVHlwZUVy''@;'; put 'put ''cm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PXE/U3RyaW5nOk51bWJlcikoWSl9KFksInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgcT9xOlN0cmluZyhxKX12YXIgTj15KDg3NjQpLkJ1ZmZlcixLPXko''@;'; put 'put ''MjM2MSkuaW5zcGVjdCxVPUsmJksuY3VzdG9tfHwiaW5zcGVjdCI7ZnVuY3Rpb24gVyhZLHEsZWUpe04ucHJvdG90eXBlLmNvcHkuY2FsbChZLHEsZWUpfXVlLmV4cG9ydHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBZKCl7KGZ1bmN0aW9uIEIoWSxxKXtpZighKFkgaW5zdGFuY2VvZiBxKSl0aHJv''@;'; put 'put ''dyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0pKHRoaXMsWSksdGhpcy5oZWFkPW51bGwsdGhpcy50YWlsPW51bGwsdGhpcy5sZW5ndGg9MH1yZXR1cm4gZnVuY3Rpb24gUChZLHEsZWUpe3EmJncoWS5wcm90b3R5cGUscSksZWUmJncoWSxlZSks''@;'; put 'put ''T2JqZWN0LmRlZmluZVByb3BlcnR5KFksInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSl9KFksW3trZXk6InB1c2giLHZhbHVlOmZ1bmN0aW9uKGVlKXt2YXIgSj17ZGF0YTplZSxuZXh0Om51bGx9O3RoaXMubGVuZ3RoPjA/dGhpcy50YWlsLm5leHQ9Sjp0aGlzLmhlYWQ9Six0aGlzLnRhaWw9''@;'; put 'put ''SiwrK3RoaXMubGVuZ3RofX0se2tleToidW5zaGlmdCIsdmFsdWU6ZnVuY3Rpb24oZWUpe3ZhciBKPXtkYXRhOmVlLG5leHQ6dGhpcy5oZWFkfTswPT09dGhpcy5sZW5ndGgmJih0aGlzLnRhaWw9SiksdGhpcy5oZWFkPUosKyt0aGlzLmxlbmd0aH19LHtrZXk6InNoaWZ0Iix2YWx1ZTpmdW5j''@;'; put 'put ''dGlvbigpe2lmKDAhPT10aGlzLmxlbmd0aCl7dmFyIGVlPXRoaXMuaGVhZC5kYXRhO3JldHVybiB0aGlzLmhlYWQ9MT09PXRoaXMubGVuZ3RoP3RoaXMudGFpbD1udWxsOnRoaXMuaGVhZC5uZXh0LC0tdGhpcy5sZW5ndGgsZWV9fX0se2tleToiY2xlYXIiLHZhbHVlOmZ1bmN0aW9uKCl7dGhp''@;'; put 'put ''cy5oZWFkPXRoaXMudGFpbD1udWxsLHRoaXMubGVuZ3RoPTB9fSx7a2V5OiJqb2luIix2YWx1ZTpmdW5jdGlvbihlZSl7aWYoMD09PXRoaXMubGVuZ3RoKXJldHVybiIiO2Zvcih2YXIgSj10aGlzLmhlYWQsbmU9IiIrSi5kYXRhO0o9Si5uZXh0OyluZSs9ZWUrSi5kYXRhO3JldHVybiBuZX19''@;'; put 'put ''LHtrZXk6ImNvbmNhdCIsdmFsdWU6ZnVuY3Rpb24oZWUpe2lmKDA9PT10aGlzLmxlbmd0aClyZXR1cm4gTi5hbGxvYygwKTtmb3IodmFyIEo9Ti5hbGxvY1Vuc2FmZShlZT4+PjApLG5lPXRoaXMuaGVhZCxpZT0wO25lOylXKG5lLmRhdGEsSixpZSksaWUrPW5lLmRhdGEubGVuZ3RoLG5lPW5l''@;'; put 'put ''Lm5leHQ7cmV0dXJuIEp9fSx7a2V5OiJjb25zdW1lIix2YWx1ZTpmdW5jdGlvbihlZSxKKXt2YXIgbmU7cmV0dXJuIGVlPHRoaXMuaGVhZC5kYXRhLmxlbmd0aD8obmU9dGhpcy5oZWFkLmRhdGEuc2xpY2UoMCxlZSksdGhpcy5oZWFkLmRhdGE9dGhpcy5oZWFkLmRhdGEuc2xpY2UoZWUpKTpu''@;'; put 'put ''ZT1lZT09PXRoaXMuaGVhZC5kYXRhLmxlbmd0aD90aGlzLnNoaWZ0KCk6Sj90aGlzLl9nZXRTdHJpbmcoZWUpOnRoaXMuX2dldEJ1ZmZlcihlZSksbmV9fSx7a2V5OiJmaXJzdCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oZWFkLmRhdGF9fSx7a2V5OiJfZ2V0U3RyaW5nIix2YWx1''@;'; put 'put ''ZTpmdW5jdGlvbihlZSl7dmFyIEo9dGhpcy5oZWFkLG5lPTEsaWU9Si5kYXRhO2ZvcihlZS09aWUubGVuZ3RoO0o9Si5uZXh0Oyl7dmFyIGxlPUouZGF0YSxtZT1lZT5sZS5sZW5ndGg/bGUubGVuZ3RoOmVlO2lmKGllKz1tZT09PWxlLmxlbmd0aD9sZTpsZS5zbGljZSgwLGVlKSwwPT0oZWUt''@;'; put 'put ''PW1lKSl7bWU9PT1sZS5sZW5ndGg/KCsrbmUsdGhpcy5oZWFkPUoubmV4dD9KLm5leHQ6dGhpcy50YWlsPW51bGwpOih0aGlzLmhlYWQ9SixKLmRhdGE9bGUuc2xpY2UobWUpKTticmVha30rK25lfXJldHVybiB0aGlzLmxlbmd0aC09bmUsaWV9fSx7a2V5OiJfZ2V0QnVmZmVyIix2YWx1ZTpm''@;'; put 'put ''dW5jdGlvbihlZSl7dmFyIEo9Ti5hbGxvY1Vuc2FmZShlZSksbmU9dGhpcy5oZWFkLGllPTE7Zm9yKG5lLmRhdGEuY29weShKKSxlZS09bmUuZGF0YS5sZW5ndGg7bmU9bmUubmV4dDspe3ZhciBsZT1uZS5kYXRhLG1lPWVlPmxlLmxlbmd0aD9sZS5sZW5ndGg6ZWU7aWYobGUuY29weShKLEou''@;'; put 'put ''bGVuZ3RoLWVlLDAsbWUpLDA9PShlZS09bWUpKXttZT09PWxlLmxlbmd0aD8oKytpZSx0aGlzLmhlYWQ9bmUubmV4dD9uZS5uZXh0OnRoaXMudGFpbD1udWxsKToodGhpcy5oZWFkPW5lLG5lLmRhdGE9bGUuc2xpY2UobWUpKTticmVha30rK2llfXJldHVybiB0aGlzLmxlbmd0aC09aWUsSn19''@;'; put 'put ''LHtrZXk6VSx2YWx1ZTpmdW5jdGlvbihlZSxKKXtyZXR1cm4gSyh0aGlzLF8oXyh7fSxKKSx7fSx7ZGVwdGg6MCxjdXN0b21JbnNwZWN0OiExfSkpfX1dKSxZfSgpfSwxMTk1Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNDE1NSk7ZnVuY3Rpb24gZyhPLHope1AoTyx6KSxCKE8p''@;'; put 'put ''fWZ1bmN0aW9uIEIoTyl7Ty5fd3JpdGFibGVTdGF0ZSYmIU8uX3dyaXRhYmxlU3RhdGUuZW1pdENsb3NlfHxPLl9yZWFkYWJsZVN0YXRlJiYhTy5fcmVhZGFibGVTdGF0ZS5lbWl0Q2xvc2V8fE8uZW1pdCgiY2xvc2UiKX1mdW5jdGlvbiBQKE8seil7Ty5lbWl0KCJlcnJvciIseil9dWUuZXhw''@;'; put 'put ''b3J0cz17ZGVzdHJveTpmdW5jdGlvbiBfKE8seil7dmFyIE49dGhpcztyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZSYmdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWR8fHRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPyh6P3ooTyk6TyYmKHRo''@;'; put 'put ''aXMuX3dyaXRhYmxlU3RhdGU/dGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWR8fCh0aGlzLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMCxJLm5leHRUaWNrKFAsdGhpcyxPKSk6SS5uZXh0VGljayhQLHRoaXMsTykpLHRoaXMpOih0aGlzLl9yZWFkYWJsZVN0YXRlJiYodGhp''@;'; put 'put ''cy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ9ITApLHRoaXMuX3dyaXRhYmxlU3RhdGUmJih0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD0hMCksdGhpcy5fZGVzdHJveShPfHxudWxsLGZ1bmN0aW9uKFUpeyF6JiZVP04uX3dyaXRhYmxlU3RhdGU/Ti5fd3JpdGFibGVTdGF0ZS5lcnJv''@;'; put 'put ''ckVtaXR0ZWQ/SS5uZXh0VGljayhCLE4pOihOLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMCxJLm5leHRUaWNrKGcsTixVKSk6SS5uZXh0VGljayhnLE4sVSk6ej8oSS5uZXh0VGljayhCLE4pLHooVSkpOkkubmV4dFRpY2soQixOKX0pLHRoaXMpfSx1bmRlc3Ryb3k6ZnVuY3Rpb24g''@;'; put 'put ''dygpe3RoaXMuX3JlYWRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD0hMSx0aGlzLl9yZWFkYWJsZVN0YXRlLnJlYWRpbmc9ITEsdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmRlZD0hMSx0aGlzLl9yZWFkYWJsZVN0YXRlLmVuZEVtaXR0ZWQ9ITEpLHRoaXMuX3dyaXRh''@;'; put 'put ''YmxlU3RhdGUmJih0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLmVuZGVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kaW5nPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZmluYWxDYWxsZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5wcmVmaW5p''@;'; put 'put ''c2hlZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLmZpbmlzaGVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSExKX0sZXJyb3JPckRlc3Ryb3k6ZnVuY3Rpb24gRihPLHope3ZhciBOPU8uX3JlYWRhYmxlU3RhdGUsTD1PLl93cml0YWJsZVN0YXRlO04mJk4uYXV0b0Rlc3Ry''@;'; put 'put ''b3l8fEwmJkwuYXV0b0Rlc3Ryb3k/Ty5kZXN0cm95KHopOk8uZW1pdCgiZXJyb3IiLHopfX19LDg2MTA6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg0MjgxKS5xLkVSUl9TVFJFQU1fUFJFTUFUVVJFX0NMT1NFO2Z1bmN0aW9uIGcoKXt9dWUuZXhwb3J0cz1mdW5jdGlvbiB3KFAs''@;'; put 'put ''RixPKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgRilyZXR1cm4gdyhQLG51bGwsRik7Rnx8KEY9e30pLE89ZnVuY3Rpb24gXyhQKXt2YXIgRj0hMTtyZXR1cm4gZnVuY3Rpb24oKXtpZighRil7Rj0hMDtmb3IodmFyIE89YXJndW1lbnRzLmxlbmd0aCx6PW5ldyBBcnJheShPKSxOPTA7TjxPO04r''@;'; put 'put ''Kyl6W05dPWFyZ3VtZW50c1tOXTtQLmFwcGx5KHRoaXMseil9fX0oT3x8Zyk7dmFyIHo9Ri5yZWFkYWJsZXx8ITEhPT1GLnJlYWRhYmxlJiZQLnJlYWRhYmxlLE49Ri53cml0YWJsZXx8ITEhPT1GLndyaXRhYmxlJiZQLndyaXRhYmxlLEw9ZnVuY3Rpb24oKXtQLndyaXRhYmxlfHxVKCl9LEs9''@;'; put 'put ''UC5fd3JpdGFibGVTdGF0ZSYmUC5fd3JpdGFibGVTdGF0ZS5maW5pc2hlZCxVPWZ1bmN0aW9uKCl7Tj0hMSxLPSEwLHp8fE8uY2FsbChQKX0sVz1QLl9yZWFkYWJsZVN0YXRlJiZQLl9yZWFkYWJsZVN0YXRlLmVuZEVtaXR0ZWQsWT1mdW5jdGlvbigpe3o9ITEsVz0hMCxOfHxPLmNhbGwoUCl9''@;'; put 'put ''LHE9ZnVuY3Rpb24oaWUpe08uY2FsbChQLGllKX0sZWU9ZnVuY3Rpb24oKXt2YXIgaWU7cmV0dXJuIHomJiFXPygoIVAuX3JlYWRhYmxlU3RhdGV8fCFQLl9yZWFkYWJsZVN0YXRlLmVuZGVkKSYmKGllPW5ldyBJKSxPLmNhbGwoUCxpZSkpOk4mJiFLPygoIVAuX3dyaXRhYmxlU3RhdGV8fCFQ''@;'; put 'put ''Ll93cml0YWJsZVN0YXRlLmVuZGVkKSYmKGllPW5ldyBJKSxPLmNhbGwoUCxpZSkpOnZvaWQgMH0sSj1mdW5jdGlvbigpe1AucmVxLm9uKCJmaW5pc2giLFUpfTtyZXR1cm4gZnVuY3Rpb24gQihQKXtyZXR1cm4gUC5zZXRIZWFkZXImJiJmdW5jdGlvbiI9PXR5cGVvZiBQLmFib3J0fShQKT8o''@;'; put 'put ''UC5vbigiY29tcGxldGUiLFUpLFAub24oImFib3J0IixlZSksUC5yZXE/SigpOlAub24oInJlcXVlc3QiLEopKTpOJiYhUC5fd3JpdGFibGVTdGF0ZSYmKFAub24oImVuZCIsTCksUC5vbigiY2xvc2UiLEwpKSxQLm9uKCJlbmQiLFkpLFAub24oImZpbmlzaCIsVSksITEhPT1GLmVycm9yJiZQ''@;'; put 'put ''Lm9uKCJlcnJvciIscSksUC5vbigiY2xvc2UiLGVlKSxmdW5jdGlvbigpe1AucmVtb3ZlTGlzdGVuZXIoImNvbXBsZXRlIixVKSxQLnJlbW92ZUxpc3RlbmVyKCJhYm9ydCIsZWUpLFAucmVtb3ZlTGlzdGVuZXIoInJlcXVlc3QiLEopLFAucmVxJiZQLnJlcS5yZW1vdmVMaXN0ZW5lcigiZmlu''@;'; put 'put ''aXNoIixVKSxQLnJlbW92ZUxpc3RlbmVyKCJlbmQiLEwpLFAucmVtb3ZlTGlzdGVuZXIoImNsb3NlIixMKSxQLnJlbW92ZUxpc3RlbmVyKCJmaW5pc2giLFUpLFAucmVtb3ZlTGlzdGVuZXIoImVuZCIsWSksUC5yZW1vdmVMaXN0ZW5lcigiZXJyb3IiLHEpLFAucmVtb3ZlTGlzdGVuZXIoImNs''@;'; put 'put ''b3NlIixlZSl9fX0sNTE2Nzp1ZT0+e3VlLmV4cG9ydHM9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIlJlYWRhYmxlLmZyb20gaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgYnJvd3NlciIpfX0sOTk0NjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgSSxnPXkoNDI4MSkucSxCPWcuRVJS''@;'; put 'put ''X01JU1NJTkdfQVJHUyx3PWcuRVJSX1NUUkVBTV9ERVNUUk9ZRUQ7ZnVuY3Rpb24gUChVKXtpZihVKXRocm93IFV9ZnVuY3Rpb24geihVKXtVKCl9ZnVuY3Rpb24gTihVLFcpe3JldHVybiBVLnBpcGUoVyl9dWUuZXhwb3J0cz1mdW5jdGlvbiBLKCl7Zm9yKHZhciBVPWFyZ3VtZW50cy5sZW5n''@;'; put 'put ''dGgsVz1uZXcgQXJyYXkoVSksWT0wO1k8VTtZKyspV1tZXT1hcmd1bWVudHNbWV07dmFyIHE9ZnVuY3Rpb24gTChVKXtyZXR1cm4gVS5sZW5ndGgmJiJmdW5jdGlvbiI9PXR5cGVvZiBVW1UubGVuZ3RoLTFdP1UucG9wKCk6UH0oVyk7aWYoQXJyYXkuaXNBcnJheShXWzBdKSYmKFc9V1swXSks''@;'; put 'put ''Vy5sZW5ndGg8Mil0aHJvdyBuZXcgQigic3RyZWFtcyIpO3ZhciBlZSxKPVcubWFwKGZ1bmN0aW9uKG5lLGllKXt2YXIgbGU9aWU8Vy5sZW5ndGgtMTtyZXR1cm4gZnVuY3Rpb24gTyhVLFcsWSxxKXtxPWZ1bmN0aW9uIF8oVSl7dmFyIFc9ITE7cmV0dXJuIGZ1bmN0aW9uKCl7V3x8KFc9ITAs''@;'; put 'put ''VS5hcHBseSh2b2lkIDAsYXJndW1lbnRzKSl9fShxKTt2YXIgZWU9ITE7VS5vbigiY2xvc2UiLGZ1bmN0aW9uKCl7ZWU9ITB9KSx2b2lkIDA9PT1JJiYoST15KDg2MTApKSxJKFUse3JlYWRhYmxlOlcsd3JpdGFibGU6WX0sZnVuY3Rpb24obmUpe2lmKG5lKXJldHVybiBxKG5lKTtlZT0hMCxx''@;'; put 'put ''KCl9KTt2YXIgSj0hMTtyZXR1cm4gZnVuY3Rpb24obmUpe2lmKCFlZSYmIUope2lmKEo9ITAsZnVuY3Rpb24gRihVKXtyZXR1cm4gVS5zZXRIZWFkZXImJiJmdW5jdGlvbiI9PXR5cGVvZiBVLmFib3J0fShVKSlyZXR1cm4gVS5hYm9ydCgpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBVLmRlc3Ry''@;'; put 'put ''b3kpcmV0dXJuIFUuZGVzdHJveSgpO3EobmV8fG5ldyB3KCJwaXBlIikpfX19KG5lLGxlLGllPjAsZnVuY3Rpb24oX2Upe2VlfHwoZWU9X2UpLF9lJiZKLmZvckVhY2goeiksIWxlJiYoSi5mb3JFYWNoKHopLHEoZWUpKX0pfSk7cmV0dXJuIFcucmVkdWNlKE4pfX0sMjQ1NzoodWUsWCx5KT0+''@;'; put 'put ''eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDQyODEpLnEuRVJSX0lOVkFMSURfT1BUX1ZBTFVFO3VlLmV4cG9ydHM9e2dldEhpZ2hXYXRlck1hcms6ZnVuY3Rpb24gZyhCLHcsUCxGKXt2YXIgTz1mdW5jdGlvbiBfKEIsdyxQKXtyZXR1cm4gbnVsbCE9Qi5oaWdoV2F0ZXJNYXJrP0IuaGlnaFdhdGVy''@;'; put 'put ''TWFyazp3P0JbUF06bnVsbH0odyxGLFApO2lmKG51bGwhPU8pe2lmKCFpc0Zpbml0ZShPKXx8TWF0aC5mbG9vcihPKSE9PU98fE88MCl0aHJvdyBuZXcgSShGP1A6ImhpZ2hXYXRlck1hcmsiLE8pO3JldHVybiBNYXRoLmZsb29yKE8pfXJldHVybiBCLm9iamVjdE1vZGU/MTY6MTYzODR9fX0s''@;'; put 'put ''MjUwMzoodWUsWCx5KT0+e3VlLmV4cG9ydHM9eSg3MTg3KS5FdmVudEVtaXR0ZXJ9LDc0MTg6dWU9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz1mdW5jdGlvbih5LEkpe2lmKEk9SS5zcGxpdCgiOiIpWzBdLCEoeT0reSkpcmV0dXJuITE7c3dpdGNoKEkpe2Nhc2UiaHR0cCI6Y2FzZSJ3cyI6''@;'; put 'put ''cmV0dXJuIDgwIT09eTtjYXNlImh0dHBzIjpjYXNlIndzcyI6cmV0dXJuIDQ0MyE9PXk7Y2FzZSJmdHAiOnJldHVybiAyMSE9PXk7Y2FzZSJnb3BoZXIiOnJldHVybiA3MCE9PXk7Y2FzZSJmaWxlIjpyZXR1cm4hMX1yZXR1cm4gMCE9PXl9fSw5Nzg1Oih1ZSxYLHkpPT57InVzZSBzdHJpY3Qi''@;'; put 'put ''O3ZhciBJPXkoODc2NCkuQnVmZmVyLF89eSg1NzE3KSxnPXkoMzM0OSksQj1uZXcgQXJyYXkoMTYpLHc9WzAsMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsNyw0LDEzLDEsMTAsNiwxNSwzLDEyLDAsOSw1LDIsMTQsMTEsOCwzLDEwLDE0LDQsOSwxNSw4LDEsMiw3LDAsNiwx''@;'; put 'put ''MywxMSw1LDEyLDEsOSwxMSwxMCwwLDgsMTIsNCwxMywzLDcsMTUsMTQsNSw2LDIsNCwwLDUsOSw3LDEyLDIsMTAsMTQsMSwzLDgsMTEsNiwxNSwxM10sUD1bNSwxNCw3LDAsOSwyLDExLDQsMTMsNiwxNSw4LDEsMTAsMywxMiw2LDExLDMsNywwLDEzLDUsMTAsMTQsMTUsOCwxMiw0LDksMSwy''@;'; put 'put ''LDE1LDUsMSwzLDcsMTQsNiw5LDExLDgsMTIsMiwxMCwwLDQsMTMsOCw2LDQsMSwzLDExLDE1LDAsNSwxMiwyLDEzLDksNywxMCwxNCwxMiwxNSwxMCw0LDEsNSw4LDcsNiwyLDEzLDE0LDAsMyw5LDExXSxGPVsxMSwxNCwxNSwxMiw1LDgsNyw5LDExLDEzLDE0LDE1LDYsNyw5LDgsNyw2LDgs''@;'; put 'put ''MTMsMTEsOSw3LDE1LDcsMTIsMTUsOSwxMSw3LDEzLDEyLDExLDEzLDYsNywxNCw5LDEzLDE1LDE0LDgsMTMsNiw1LDEyLDcsNSwxMSwxMiwxNCwxNSwxNCwxNSw5LDgsOSwxNCw1LDYsOCw2LDUsMTIsOSwxNSw1LDExLDYsOCwxMywxMiw1LDEyLDEzLDE0LDExLDgsNSw2XSxPPVs4LDksOSwx''@;'; put 'put ''MSwxMywxNSwxNSw1LDcsNyw4LDExLDE0LDE0LDEyLDYsOSwxMywxNSw3LDEyLDgsOSwxMSw3LDcsMTIsNyw2LDE1LDEzLDExLDksNywxNSwxMSw4LDYsNiwxNCwxMiwxMyw1LDE0LDEzLDEzLDcsNSwxNSw1LDgsMTEsMTQsMTQsNiwxNCw2LDksMTIsOSwxMiw1LDE1LDgsOCw1LDEyLDksMTIs''@;'; put 'put ''NSwxNCw2LDgsMTMsNiw1LDE1LDEzLDExLDExXSx6PVswLDE1MTg1MDAyNDksMTg1OTc3NTM5MywyNDAwOTU5NzA4LDI4NDA4NTM4MzhdLE49WzEzNTI4Mjk5MjYsMTU0ODYwMzY4NCwxODM2MDcyNjkxLDIwNTM5OTQyMTcsMF07ZnVuY3Rpb24gTCgpe2cuY2FsbCh0aGlzLDY0KSx0aGlzLl9h''@;'; put 'put ''PTE3MzI1ODQxOTMsdGhpcy5fYj00MDIzMjMzNDE3LHRoaXMuX2M9MjU2MjM4MzEwMix0aGlzLl9kPTI3MTczMzg3OCx0aGlzLl9lPTMyODUzNzc1MjB9ZnVuY3Rpb24gSyhKLG5lKXtyZXR1cm4gSjw8bmV8Sj4+PjMyLW5lfWZ1bmN0aW9uIFUoSixuZSxpZSxsZSxtZSxfZSxUZSxTZSl7cmV0''@;'; put 'put ''dXJuIEsoSisobmVeaWVebGUpK19lK1RlfDAsU2UpK21lfDB9ZnVuY3Rpb24gVyhKLG5lLGllLGxlLG1lLF9lLFRlLFNlKXtyZXR1cm4gSyhKKyhuZSZpZXx+bmUmbGUpK19lK1RlfDAsU2UpK21lfDB9ZnVuY3Rpb24gWShKLG5lLGllLGxlLG1lLF9lLFRlLFNlKXtyZXR1cm4gSyhKKygobmV8''@;'; put 'put ''fmllKV5sZSkrX2UrVGV8MCxTZSkrbWV8MH1mdW5jdGlvbiBxKEosbmUsaWUsbGUsbWUsX2UsVGUsU2Upe3JldHVybiBLKEorKG5lJmxlfGllJn5sZSkrX2UrVGV8MCxTZSkrbWV8MH1mdW5jdGlvbiBlZShKLG5lLGllLGxlLG1lLF9lLFRlLFNlKXtyZXR1cm4gSyhKKyhuZV4oaWV8fmxlKSkr''@;'; put 'put ''X2UrVGV8MCxTZSkrbWV8MH1fKEwsZyksTC5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbigpe2Zvcih2YXIgSj1CLG5lPTA7bmU8MTY7KytuZSlKW25lXT10aGlzLl9ibG9jay5yZWFkSW50MzJMRSg0Km5lKTtmb3IodmFyIGllPTB8dGhpcy5fYSxsZT0wfHRoaXMuX2IsbWU9MHx0aGlzLl9j''@;'; put 'put ''LF9lPTB8dGhpcy5fZCxUZT0wfHRoaXMuX2UsU2U9MHx0aGlzLl9hLGplPTB8dGhpcy5fYixWPTB8dGhpcy5fYyxwPTB8dGhpcy5fZCxiPTB8dGhpcy5fZSx4PTA7eDw4MDt4Kz0xKXt2YXIgQyxUO3g8MTY/KEM9VShpZSxsZSxtZSxfZSxUZSxKW3dbeF1dLHpbMF0sRlt4XSksVD1lZShTZSxq''@;'; put 'put ''ZSxWLHAsYixKW1BbeF1dLE5bMF0sT1t4XSkpOng8MzI/KEM9VyhpZSxsZSxtZSxfZSxUZSxKW3dbeF1dLHpbMV0sRlt4XSksVD1xKFNlLGplLFYscCxiLEpbUFt4XV0sTlsxXSxPW3hdKSk6eDw0OD8oQz1ZKGllLGxlLG1lLF9lLFRlLEpbd1t4XV0selsyXSxGW3hdKSxUPVkoU2UsamUsVixw''@;'; put 'put ''LGIsSltQW3hdXSxOWzJdLE9beF0pKTp4PDY0PyhDPXEoaWUsbGUsbWUsX2UsVGUsSlt3W3hdXSx6WzNdLEZbeF0pLFQ9VyhTZSxqZSxWLHAsYixKW1BbeF1dLE5bM10sT1t4XSkpOihDPWVlKGllLGxlLG1lLF9lLFRlLEpbd1t4XV0sels0XSxGW3hdKSxUPVUoU2UsamUsVixwLGIsSltQW3hd''@;'; put 'put ''XSxOWzRdLE9beF0pKSxpZT1UZSxUZT1fZSxfZT1LKG1lLDEwKSxtZT1sZSxsZT1DLFNlPWIsYj1wLHA9SyhWLDEwKSxWPWplLGplPVR9dmFyIEg9dGhpcy5fYittZStwfDA7dGhpcy5fYj10aGlzLl9jK19lK2J8MCx0aGlzLl9jPXRoaXMuX2QrVGUrU2V8MCx0aGlzLl9kPXRoaXMuX2UraWUr''@;'; put 'put ''amV8MCx0aGlzLl9lPXRoaXMuX2ErbGUrVnwwLHRoaXMuX2E9SH0sTC5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbigpe3RoaXMuX2Jsb2NrW3RoaXMuX2Jsb2NrT2Zmc2V0KytdPTEyOCx0aGlzLl9ibG9ja09mZnNldD41NiYmKHRoaXMuX2Jsb2NrLmZpbGwoMCx0aGlzLl9ibG9ja09mZnNl''@;'; put 'put ''dCw2NCksdGhpcy5fdXBkYXRlKCksdGhpcy5fYmxvY2tPZmZzZXQ9MCksdGhpcy5fYmxvY2suZmlsbCgwLHRoaXMuX2Jsb2NrT2Zmc2V0LDU2KSx0aGlzLl9ibG9jay53cml0ZVVJbnQzMkxFKHRoaXMuX2xlbmd0aFswXSw1NiksdGhpcy5fYmxvY2sud3JpdGVVSW50MzJMRSh0aGlzLl9sZW5n''@;'; put 'put ''dGhbMV0sNjApLHRoaXMuX3VwZGF0ZSgpO3ZhciBKPUkuYWxsb2M/SS5hbGxvYygyMCk6bmV3IEkoMjApO3JldHVybiBKLndyaXRlSW50MzJMRSh0aGlzLl9hLDApLEoud3JpdGVJbnQzMkxFKHRoaXMuX2IsNCksSi53cml0ZUludDMyTEUodGhpcy5fYyw4KSxKLndyaXRlSW50MzJMRSh0aGlz''@;'; put 'put ''Ll9kLDEyKSxKLndyaXRlSW50MzJMRSh0aGlzLl9lLDE2KSxKfSx1ZS5leHBvcnRzPUx9LDk1MDk6KHVlLFgseSk9Pnt2YXIgST15KDg3NjQpLF89SS5CdWZmZXI7ZnVuY3Rpb24gZyh3LFApe2Zvcih2YXIgRiBpbiB3KVBbRl09d1tGXX1mdW5jdGlvbiBCKHcsUCxGKXtyZXR1cm4gXyh3LFAs''@;'; put 'put ''Ril9Xy5mcm9tJiZfLmFsbG9jJiZfLmFsbG9jVW5zYWZlJiZfLmFsbG9jVW5zYWZlU2xvdz91ZS5leHBvcnRzPUk6KGcoSSxYKSxYLkJ1ZmZlcj1CKSxCLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKF8ucHJvdG90eXBlKSxnKF8sQiksQi5mcm9tPWZ1bmN0aW9uKHcsUCxGKXtpZigibnVtYmVy''@;'; put 'put ''Ij09dHlwZW9mIHcpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBub3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gXyh3LFAsRil9LEIuYWxsb2M9ZnVuY3Rpb24odyxQLEYpe2lmKCJudW1iZXIiIT10eXBlb2Ygdyl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJl''@;'; put 'put ''IGEgbnVtYmVyIik7dmFyIE89Xyh3KTtyZXR1cm4gdm9pZCAwIT09UD8ic3RyaW5nIj09dHlwZW9mIEY/Ty5maWxsKFAsRik6Ty5maWxsKFApOk8uZmlsbCgwKSxPfSxCLmFsbG9jVW5zYWZlPWZ1bmN0aW9uKHcpe2lmKCJudW1iZXIiIT10eXBlb2Ygdyl0aHJvdyBuZXcgVHlwZUVycm9yKCJB''@;'; put 'put ''cmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7cmV0dXJuIF8odyl9LEIuYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKHcpe2lmKCJudW1iZXIiIT10eXBlb2Ygdyl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7cmV0dXJuIEkuU2xvd0J1ZmZlcih3KX19''@;'; put 'put ''LDkyNDY6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg3Mzc5KSxfPXkoODQyMCksZz1JKCJSZWdFeHAucHJvdG90eXBlLmV4ZWMiKSxCPXkoNDQ1Myk7dWUuZXhwb3J0cz1mdW5jdGlvbihQKXtpZighXyhQKSl0aHJvdyBuZXcgQigiYHJlZ2V4YCBtdXN0IGJlIGEgUmVnRXhwIik7''@;'; put 'put ''cmV0dXJuIGZ1bmN0aW9uKE8pe3JldHVybiBudWxsIT09ZyhQLE8pfX19LDc3NzE6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgyMTApLF89eSgyMjk2KSxnPXkoMTA0NCkoKSxCPXkoNzI5Niksdz15KDQ0NTMpLFA9SSgiJU1hdGguZmxvb3IlIik7dWUuZXhwb3J0cz1mdW5jdGlv''@;'; put 'put ''bihPLHope2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBPKXRocm93IG5ldyB3KCJgZm5gIGlzIG5vdCBhIGZ1bmN0aW9uIik7aWYoIm51bWJlciIhPXR5cGVvZiB6fHx6PDB8fHo+NDI5NDk2NzI5NXx8UCh6KSE9PXopdGhyb3cgbmV3IHcoImBsZW5ndGhgIG11c3QgYmUgYSBwb3NpdGl2ZSAzMi1i''@;'; put 'put ''aXQgaW50ZWdlciIpO3ZhciBOPWFyZ3VtZW50cy5sZW5ndGg+MiYmISFhcmd1bWVudHNbMl0sTD0hMCxLPSEwO2lmKCJsZW5ndGgiaW4gTyYmQil7dmFyIFU9QihPLCJsZW5ndGgiKTtVJiYhVS5jb25maWd1cmFibGUmJihMPSExKSxVJiYhVS53cml0YWJsZSYmKEs9ITEpfXJldHVybihMfHxL''@;'; put 'put ''fHwhTikmJihnP18oTywibGVuZ3RoIix6LCEwLCEwKTpfKE8sImxlbmd0aCIseikpLE99fSw0MTg5Oih1ZSxYLHkpPT57dmFyIEk9eSg5NTA5KS5CdWZmZXI7ZnVuY3Rpb24gXyhnLEIpe3RoaXMuX2Jsb2NrPUkuYWxsb2MoZyksdGhpcy5fZmluYWxTaXplPUIsdGhpcy5fYmxvY2tTaXplPWcs''@;'; put 'put ''dGhpcy5fbGVuPTB9Xy5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKGcsQil7InN0cmluZyI9PXR5cGVvZiBnJiYoZz1JLmZyb20oZyxCPUJ8fCJ1dGY4IikpO2Zvcih2YXIgdz10aGlzLl9ibG9jayxQPXRoaXMuX2Jsb2NrU2l6ZSxGPWcubGVuZ3RoLE89dGhpcy5fbGVuLHo9MDt6PEY7KXtm''@;'; put 'put ''b3IodmFyIE49TyVQLEw9TWF0aC5taW4oRi16LFAtTiksSz0wO0s8TDtLKyspd1tOK0tdPWdbeitLXTt6Kz1MLChPKz1MKSVQPT0wJiZ0aGlzLl91cGRhdGUodyl9cmV0dXJuIHRoaXMuX2xlbis9Rix0aGlzfSxfLnByb3RvdHlwZS5kaWdlc3Q9ZnVuY3Rpb24oZyl7dmFyIEI9dGhpcy5fbGVu''@;'; put 'put ''JXRoaXMuX2Jsb2NrU2l6ZTt0aGlzLl9ibG9ja1tCXT0xMjgsdGhpcy5fYmxvY2suZmlsbCgwLEIrMSksQj49dGhpcy5fZmluYWxTaXplJiYodGhpcy5fdXBkYXRlKHRoaXMuX2Jsb2NrKSx0aGlzLl9ibG9jay5maWxsKDApKTt2YXIgdz04KnRoaXMuX2xlbjtpZih3PD00Mjk0OTY3Mjk1KXRo''@;'; put 'put ''aXMuX2Jsb2NrLndyaXRlVUludDMyQkUodyx0aGlzLl9ibG9ja1NpemUtNCk7ZWxzZXt2YXIgUD0oNDI5NDk2NzI5NSZ3KT4+PjA7dGhpcy5fYmxvY2sud3JpdGVVSW50MzJCRSgody1QKS80Mjk0OTY3Mjk2LHRoaXMuX2Jsb2NrU2l6ZS04KSx0aGlzLl9ibG9jay53cml0ZVVJbnQzMkJFKFAs''@;'; put 'put ''dGhpcy5fYmxvY2tTaXplLTQpfXRoaXMuX3VwZGF0ZSh0aGlzLl9ibG9jayk7dmFyIE89dGhpcy5faGFzaCgpO3JldHVybiBnP08udG9TdHJpbmcoZyk6T30sXy5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiX3VwZGF0ZSBtdXN0IGJlIGltcGxlbWVudGVk''@;'; put 'put ''IGJ5IHN1YmNsYXNzIil9LHVlLmV4cG9ydHM9X30sOTA3MjoodWUsWCx5KT0+e3ZhciBJPXVlLmV4cG9ydHM9ZnVuY3Rpb24oZyl7Zz1nLnRvTG93ZXJDYXNlKCk7dmFyIEI9SVtnXTtpZighQil0aHJvdyBuZXcgRXJyb3IoZysiIGlzIG5vdCBzdXBwb3J0ZWQgKHdlIGFjY2VwdCBwdWxsIHJl''@;'; put 'put ''cXVlc3RzKSIpO3JldHVybiBuZXcgQn07SS5zaGE9eSg0NDQ4KSxJLnNoYTE9eSg4MzM2KSxJLnNoYTIyND15KDg0MzIpLEkuc2hhMjU2PXkoNzQ5OSksSS5zaGEzODQ9eSgxNjg2KSxJLnNoYTUxMj15KDc4MTYpfSw0NDQ4Oih1ZSxYLHkpPT57dmFyIEk9eSg1NzE3KSxfPXkoNDE4OSksZz15''@;'; put 'put ''KDk1MDkpLkJ1ZmZlcixCPVsxNTE4NTAwMjQ5LDE4NTk3NzUzOTMsLTE4OTQwMDc1ODgsLTg5OTQ5NzUxNF0sdz1uZXcgQXJyYXkoODApO2Z1bmN0aW9uIFAoKXt0aGlzLmluaXQoKSx0aGlzLl93PXcsXy5jYWxsKHRoaXMsNjQsNTYpfWZ1bmN0aW9uIEYoTil7cmV0dXJuIE48PDV8Tj4+PjI3''@;'; put 'put ''fWZ1bmN0aW9uIE8oTil7cmV0dXJuIE48PDMwfE4+Pj4yfWZ1bmN0aW9uIHooTixMLEssVSl7cmV0dXJuIDA9PT1OP0wmS3x+TCZVOjI9PT1OP0wmS3xMJlV8SyZVOkxeS15VfUkoUCxfKSxQLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2E9MTczMjU4NDE5Myx0aGlz''@;'; put 'put ''Ll9iPTQwMjMyMzM0MTcsdGhpcy5fYz0yNTYyMzgzMTAyLHRoaXMuX2Q9MjcxNzMzODc4LHRoaXMuX2U9MzI4NTM3NzUyMCx0aGlzfSxQLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKE4pe2Zvcih2YXIgTD10aGlzLl93LEs9MHx0aGlzLl9hLFU9MHx0aGlzLl9iLFc9MHx0aGlzLl9jLFk9''@;'; put 'put ''MHx0aGlzLl9kLHE9MHx0aGlzLl9lLGVlPTA7ZWU8MTY7KytlZSlMW2VlXT1OLnJlYWRJbnQzMkJFKDQqZWUpO2Zvcig7ZWU8ODA7KytlZSlMW2VlXT1MW2VlLTNdXkxbZWUtOF1eTFtlZS0xNF1eTFtlZS0xNl07Zm9yKHZhciBKPTA7Sjw4MDsrK0ope3ZhciBuZT1+fihKLzIwKSxpZT1GKEsp''@;'; put 'put ''K3oobmUsVSxXLFkpK3ErTFtKXStCW25lXXwwO3E9WSxZPVcsVz1PKFUpLFU9SyxLPWllfXRoaXMuX2E9Syt0aGlzLl9hfDAsdGhpcy5fYj1VK3RoaXMuX2J8MCx0aGlzLl9jPVcrdGhpcy5fY3wwLHRoaXMuX2Q9WSt0aGlzLl9kfDAsdGhpcy5fZT1xK3RoaXMuX2V8MH0sUC5wcm90b3R5cGUu''@;'; put 'put ''X2hhc2g9ZnVuY3Rpb24oKXt2YXIgTj1nLmFsbG9jVW5zYWZlKDIwKTtyZXR1cm4gTi53cml0ZUludDMyQkUoMHx0aGlzLl9hLDApLE4ud3JpdGVJbnQzMkJFKDB8dGhpcy5fYiw0KSxOLndyaXRlSW50MzJCRSgwfHRoaXMuX2MsOCksTi53cml0ZUludDMyQkUoMHx0aGlzLl9kLDEyKSxOLndy''@;'; put 'put ''aXRlSW50MzJCRSgwfHRoaXMuX2UsMTYpLE59LHVlLmV4cG9ydHM9UH0sODMzNjoodWUsWCx5KT0+e3ZhciBJPXkoNTcxNyksXz15KDQxODkpLGc9eSg5NTA5KS5CdWZmZXIsQj1bMTUxODUwMDI0OSwxODU5Nzc1MzkzLC0xODk0MDA3NTg4LC04OTk0OTc1MTRdLHc9bmV3IEFycmF5KDgwKTtm''@;'; put 'put ''dW5jdGlvbiBQKCl7dGhpcy5pbml0KCksdGhpcy5fdz13LF8uY2FsbCh0aGlzLDY0LDU2KX1mdW5jdGlvbiBGKEwpe3JldHVybiBMPDwxfEw+Pj4zMX1mdW5jdGlvbiBPKEwpe3JldHVybiBMPDw1fEw+Pj4yN31mdW5jdGlvbiB6KEwpe3JldHVybiBMPDwzMHxMPj4+Mn1mdW5jdGlvbiBOKEws''@;'; put 'put ''SyxVLFcpe3JldHVybiAwPT09TD9LJlV8fksmVzoyPT09TD9LJlV8SyZXfFUmVzpLXlVeV31JKFAsXyksUC5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hPTE3MzI1ODQxOTMsdGhpcy5fYj00MDIzMjMzNDE3LHRoaXMuX2M9MjU2MjM4MzEwMix0aGlzLl9kPTI3MTcz''@;'; put 'put ''Mzg3OCx0aGlzLl9lPTMyODUzNzc1MjAsdGhpc30sUC5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihMKXtmb3IodmFyIEs9dGhpcy5fdyxVPTB8dGhpcy5fYSxXPTB8dGhpcy5fYixZPTB8dGhpcy5fYyxxPTB8dGhpcy5fZCxlZT0wfHRoaXMuX2UsSj0wO0o8MTY7KytKKUtbSl09TC5yZWFk''@;'; put 'put ''SW50MzJCRSg0KkopO2Zvcig7Sjw4MDsrK0opS1tKXT1GKEtbSi0zXV5LW0otOF1eS1tKLTE0XV5LW0otMTZdKTtmb3IodmFyIG5lPTA7bmU8ODA7KytuZSl7dmFyIGllPX5+KG5lLzIwKSxsZT1PKFUpK04oaWUsVyxZLHEpK2VlK0tbbmVdK0JbaWVdfDA7ZWU9cSxxPVksWT16KFcpLFc9VSxV''@;'; put 'put ''PWxlfXRoaXMuX2E9VSt0aGlzLl9hfDAsdGhpcy5fYj1XK3RoaXMuX2J8MCx0aGlzLl9jPVkrdGhpcy5fY3wwLHRoaXMuX2Q9cSt0aGlzLl9kfDAsdGhpcy5fZT1lZSt0aGlzLl9lfDB9LFAucHJvdG90eXBlLl9oYXNoPWZ1bmN0aW9uKCl7dmFyIEw9Zy5hbGxvY1Vuc2FmZSgyMCk7cmV0dXJu''@;'; put 'put ''IEwud3JpdGVJbnQzMkJFKDB8dGhpcy5fYSwwKSxMLndyaXRlSW50MzJCRSgwfHRoaXMuX2IsNCksTC53cml0ZUludDMyQkUoMHx0aGlzLl9jLDgpLEwud3JpdGVJbnQzMkJFKDB8dGhpcy5fZCwxMiksTC53cml0ZUludDMyQkUoMHx0aGlzLl9lLDE2KSxMfSx1ZS5leHBvcnRzPVB9LDg0MzI6''@;'; put 'put ''KHVlLFgseSk9Pnt2YXIgST15KDU3MTcpLF89eSg3NDk5KSxnPXkoNDE4OSksQj15KDk1MDkpLkJ1ZmZlcix3PW5ldyBBcnJheSg2NCk7ZnVuY3Rpb24gUCgpe3RoaXMuaW5pdCgpLHRoaXMuX3c9dyxnLmNhbGwodGhpcyw2NCw1Nil9SShQLF8pLFAucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24o''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5fYT0zMjM4MzcxMDMyLHRoaXMuX2I9OTE0MTUwNjYzLHRoaXMuX2M9ODEyNzAyOTk5LHRoaXMuX2Q9NDE0NDkxMjY5Nyx0aGlzLl9lPTQyOTA3NzU4NTcsdGhpcy5fZj0xNzUwNjAzMDI1LHRoaXMuX2c9MTY5NDA3NjgzOSx0aGlzLl9oPTMyMDQwNzU0MjgsdGhpc30s''@;'; put 'put ''UC5wcm90b3R5cGUuX2hhc2g9ZnVuY3Rpb24oKXt2YXIgRj1CLmFsbG9jVW5zYWZlKDI4KTtyZXR1cm4gRi53cml0ZUludDMyQkUodGhpcy5fYSwwKSxGLndyaXRlSW50MzJCRSh0aGlzLl9iLDQpLEYud3JpdGVJbnQzMkJFKHRoaXMuX2MsOCksRi53cml0ZUludDMyQkUodGhpcy5fZCwxMiks''@;'; put 'put ''Ri53cml0ZUludDMyQkUodGhpcy5fZSwxNiksRi53cml0ZUludDMyQkUodGhpcy5fZiwyMCksRi53cml0ZUludDMyQkUodGhpcy5fZywyNCksRn0sdWUuZXhwb3J0cz1QfSw3NDk5Oih1ZSxYLHkpPT57dmFyIEk9eSg1NzE3KSxfPXkoNDE4OSksZz15KDk1MDkpLkJ1ZmZlcixCPVsxMTE2MzUy''@;'; put 'put ''NDA4LDE4OTk0NDc0NDEsMzA0OTMyMzQ3MSwzOTIxMDA5NTczLDk2MTk4NzE2MywxNTA4OTcwOTkzLDI0NTM2MzU3NDgsMjg3MDc2MzIyMSwzNjI0MzgxMDgwLDMxMDU5ODQwMSw2MDcyMjUyNzgsMTQyNjg4MTk4NywxOTI1MDc4Mzg4LDIxNjIwNzgyMDYsMjYxNDg4ODEwMywzMjQ4MjIyNTgw''@;'; put 'put ''LDM4MzUzOTA0MDEsNDAyMjIyNDc3NCwyNjQzNDcwNzgsNjA0ODA3NjI4LDc3MDI1NTk4MywxMjQ5MTUwMTIyLDE1NTUwODE2OTIsMTk5NjA2NDk4NiwyNTU0MjIwODgyLDI4MjE4MzQzNDksMjk1Mjk5NjgwOCwzMjEwMzEzNjcxLDMzMzY1NzE4OTEsMzU4NDUyODcxMSwxMTM5MjY5OTMsMzM4''@;'; put 'put ''MjQxODk1LDY2NjMwNzIwNSw3NzM1Mjk5MTIsMTI5NDc1NzM3MiwxMzk2MTgyMjkxLDE2OTUxODM3MDAsMTk4NjY2MTA1MSwyMTc3MDI2MzUwLDI0NTY5NTYwMzcsMjczMDQ4NTkyMSwyODIwMzAyNDExLDMyNTk3MzA4MDAsMzM0NTc2NDc3MSwzNTE2MDY1ODE3LDM2MDAzNTI4MDQsNDA5NDU3''@;'; put 'put ''MTkwOSwyNzU0MjMzNDQsNDMwMjI3NzM0LDUwNjk0ODYxNiw2NTkwNjA1NTYsODgzOTk3ODc3LDk1ODEzOTU3MSwxMzIyODIyMjE4LDE1MzcwMDIwNjMsMTc0Nzg3Mzc3OSwxOTU1NTYyMjIyLDIwMjQxMDQ4MTUsMjIyNzczMDQ1MiwyMzYxODUyNDI0LDI0Mjg0MzY0NzQsMjc1NjczNDE4Nywz''@;'; put 'put ''MjA0MDMxNDc5LDMzMjkzMjUyOThdLHc9bmV3IEFycmF5KDY0KTtmdW5jdGlvbiBQKCl7dGhpcy5pbml0KCksdGhpcy5fdz13LF8uY2FsbCh0aGlzLDY0LDU2KX1mdW5jdGlvbiBGKFUsVyxZKXtyZXR1cm4gWV5VJihXXlkpfWZ1bmN0aW9uIE8oVSxXLFkpe3JldHVybiBVJld8WSYoVXxXKX1m''@;'; put 'put ''dW5jdGlvbiB6KFUpe3JldHVybihVPj4+MnxVPDwzMCleKFU+Pj4xM3xVPDwxOSleKFU+Pj4yMnxVPDwxMCl9ZnVuY3Rpb24gTihVKXtyZXR1cm4oVT4+PjZ8VTw8MjYpXihVPj4+MTF8VTw8MjEpXihVPj4+MjV8VTw8Nyl9ZnVuY3Rpb24gTChVKXtyZXR1cm4oVT4+Pjd8VTw8MjUpXihVPj4+''@;'; put 'put ''MTh8VTw8MTQpXlU+Pj4zfWZ1bmN0aW9uIEsoVSl7cmV0dXJuKFU+Pj4xN3xVPDwxNSleKFU+Pj4xOXxVPDwxMyleVT4+PjEwfUkoUCxfKSxQLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2E9MTc3OTAzMzcwMyx0aGlzLl9iPTMxNDQxMzQyNzcsdGhpcy5fYz0xMDEz''@;'; put 'put ''OTA0MjQyLHRoaXMuX2Q9Mjc3MzQ4MDc2Mix0aGlzLl9lPTEzNTk4OTMxMTksdGhpcy5fZj0yNjAwODIyOTI0LHRoaXMuX2c9NTI4NzM0NjM1LHRoaXMuX2g9MTU0MTQ1OTIyNSx0aGlzfSxQLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKFUpe2Zvcih2YXIgVz10aGlzLl93LFk9MHx0aGlz''@;'; put 'put ''Ll9hLHE9MHx0aGlzLl9iLGVlPTB8dGhpcy5fYyxKPTB8dGhpcy5fZCxuZT0wfHRoaXMuX2UsaWU9MHx0aGlzLl9mLGxlPTB8dGhpcy5fZyxtZT0wfHRoaXMuX2gsX2U9MDtfZTwxNjsrK19lKVdbX2VdPVUucmVhZEludDMyQkUoNCpfZSk7Zm9yKDtfZTw2NDsrK19lKVdbX2VdPUsoV1tfZS0y''@;'; put 'put ''XSkrV1tfZS03XStMKFdbX2UtMTVdKStXW19lLTE2XXwwO2Zvcih2YXIgVGU9MDtUZTw2NDsrK1RlKXt2YXIgU2U9bWUrTihuZSkrRihuZSxpZSxsZSkrQltUZV0rV1tUZV18MCxqZT16KFkpK08oWSxxLGVlKXwwO21lPWxlLGxlPWllLGllPW5lLG5lPUorU2V8MCxKPWVlLGVlPXEscT1ZLFk9''@;'; put 'put ''U2UramV8MH10aGlzLl9hPVkrdGhpcy5fYXwwLHRoaXMuX2I9cSt0aGlzLl9ifDAsdGhpcy5fYz1lZSt0aGlzLl9jfDAsdGhpcy5fZD1KK3RoaXMuX2R8MCx0aGlzLl9lPW5lK3RoaXMuX2V8MCx0aGlzLl9mPWllK3RoaXMuX2Z8MCx0aGlzLl9nPWxlK3RoaXMuX2d8MCx0aGlzLl9oPW1lK3Ro''@;'; put 'put ''aXMuX2h8MH0sUC5wcm90b3R5cGUuX2hhc2g9ZnVuY3Rpb24oKXt2YXIgVT1nLmFsbG9jVW5zYWZlKDMyKTtyZXR1cm4gVS53cml0ZUludDMyQkUodGhpcy5fYSwwKSxVLndyaXRlSW50MzJCRSh0aGlzLl9iLDQpLFUud3JpdGVJbnQzMkJFKHRoaXMuX2MsOCksVS53cml0ZUludDMyQkUodGhp''@;'; put 'put ''cy5fZCwxMiksVS53cml0ZUludDMyQkUodGhpcy5fZSwxNiksVS53cml0ZUludDMyQkUodGhpcy5fZiwyMCksVS53cml0ZUludDMyQkUodGhpcy5fZywyNCksVS53cml0ZUludDMyQkUodGhpcy5faCwyOCksVX0sdWUuZXhwb3J0cz1QfSwxNjg2Oih1ZSxYLHkpPT57dmFyIEk9eSg1NzE3KSxf''@;'; put 'put ''PXkoNzgxNiksZz15KDQxODkpLEI9eSg5NTA5KS5CdWZmZXIsdz1uZXcgQXJyYXkoMTYwKTtmdW5jdGlvbiBQKCl7dGhpcy5pbml0KCksdGhpcy5fdz13LGcuY2FsbCh0aGlzLDEyOCwxMTIpfUkoUCxfKSxQLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FoPTM0MTgw''@;'; put 'put ''NzAzNjUsdGhpcy5fYmg9MTY1NDI3MDI1MCx0aGlzLl9jaD0yNDM4NTI5MzcwLHRoaXMuX2RoPTM1NTQ2MjM2MCx0aGlzLl9laD0xNzMxNDA1NDE1LHRoaXMuX2ZoPTIzOTQxODAyMzEsdGhpcy5fZ2g9MzY3NTAwODUyNSx0aGlzLl9oaD0xMjAzMDYyODEzLHRoaXMuX2FsPTMyMzgzNzEwMzIs''@;'; put 'put ''dGhpcy5fYmw9OTE0MTUwNjYzLHRoaXMuX2NsPTgxMjcwMjk5OSx0aGlzLl9kbD00MTQ0OTEyNjk3LHRoaXMuX2VsPTQyOTA3NzU4NTcsdGhpcy5fZmw9MTc1MDYwMzAyNSx0aGlzLl9nbD0xNjk0MDc2ODM5LHRoaXMuX2hsPTMyMDQwNzU0MjgsdGhpc30sUC5wcm90b3R5cGUuX2hhc2g9ZnVu''@;'; put 'put ''Y3Rpb24oKXt2YXIgRj1CLmFsbG9jVW5zYWZlKDQ4KTtmdW5jdGlvbiBPKHosTixMKXtGLndyaXRlSW50MzJCRSh6LEwpLEYud3JpdGVJbnQzMkJFKE4sTCs0KX1yZXR1cm4gTyh0aGlzLl9haCx0aGlzLl9hbCwwKSxPKHRoaXMuX2JoLHRoaXMuX2JsLDgpLE8odGhpcy5fY2gsdGhpcy5fY2ws''@;'; put 'put ''MTYpLE8odGhpcy5fZGgsdGhpcy5fZGwsMjQpLE8odGhpcy5fZWgsdGhpcy5fZWwsMzIpLE8odGhpcy5fZmgsdGhpcy5fZmwsNDApLEZ9LHVlLmV4cG9ydHM9UH0sNzgxNjoodWUsWCx5KT0+e3ZhciBJPXkoNTcxNyksXz15KDQxODkpLGc9eSg5NTA5KS5CdWZmZXIsQj1bMTExNjM1MjQwOCwz''@;'; put 'put ''NjA5NzY3NDU4LDE4OTk0NDc0NDEsNjAyODkxNzI1LDMwNDkzMjM0NzEsMzk2NDQ4NDM5OSwzOTIxMDA5NTczLDIxNzMyOTU1NDgsOTYxOTg3MTYzLDQwODE2Mjg0NzIsMTUwODk3MDk5MywzMDUzODM0MjY1LDI0NTM2MzU3NDgsMjkzNzY3MTU3OSwyODcwNzYzMjIxLDM2NjQ2MDk1NjAsMzYy''@;'; put 'put ''NDM4MTA4MCwyNzM0ODgzMzk0LDMxMDU5ODQwMSwxMTY0OTk2NTQyLDYwNzIyNTI3OCwxMzIzNjEwNzY0LDE0MjY4ODE5ODcsMzU5MDMwNDk5NCwxOTI1MDc4Mzg4LDQwNjgxODIzODMsMjE2MjA3ODIwNiw5OTEzMzYxMTMsMjYxNDg4ODEwMyw2MzM4MDMzMTcsMzI0ODIyMjU4MCwzNDc5Nzc0''@;'; put 'put ''ODY4LDM4MzUzOTA0MDEsMjY2NjYxMzQ1OCw0MDIyMjI0Nzc0LDk0NDcxMTEzOSwyNjQzNDcwNzgsMjM0MTI2Mjc3Myw2MDQ4MDc2MjgsMjAwNzgwMDkzMyw3NzAyNTU5ODMsMTQ5NTk5MDkwMSwxMjQ5MTUwMTIyLDE4NTY0MzEyMzUsMTU1NTA4MTY5MiwzMTc1MjE4MTMyLDE5OTYwNjQ5ODYs''@;'; put 'put ''MjE5ODk1MDgzNywyNTU0MjIwODgyLDM5OTk3MTkzMzksMjgyMTgzNDM0OSw3NjY3ODQwMTYsMjk1Mjk5NjgwOCwyNTY2NTk0ODc5LDMyMTAzMTM2NzEsMzIwMzMzNzk1NiwzMzM2NTcxODkxLDEwMzQ0NTcwMjYsMzU4NDUyODcxMSwyNDY2OTQ4OTAxLDExMzkyNjk5MywzNzU4MzI2MzgzLDMz''@;'; put 'put ''ODI0MTg5NSwxNjg3MTc5MzYsNjY2MzA3MjA1LDExODgxNzk5NjQsNzczNTI5OTEyLDE1NDYwNDU3MzQsMTI5NDc1NzM3MiwxNTIyODA1NDg1LDEzOTYxODIyOTEsMjY0MzgzMzgyMywxNjk1MTgzNzAwLDIzNDM1MjczOTAsMTk4NjY2MTA1MSwxMDE0NDc3NDgwLDIxNzcwMjYzNTAsMTIwNjc1''@;'; put 'put ''OTE0MiwyNDU2OTU2MDM3LDM0NDA3NzYyNywyNzMwNDg1OTIxLDEyOTA4NjM0NjAsMjgyMDMwMjQxMSwzMTU4NDU0MjczLDMyNTk3MzA4MDAsMzUwNTk1MjY1NywzMzQ1NzY0NzcxLDEwNjIxNzAwOCwzNTE2MDY1ODE3LDM2MDYwMDgzNDQsMzYwMDM1MjgwNCwxNDMyNzI1Nzc2LDQwOTQ1NzE5''@;'; put 'put ''MDksMTQ2NzAzMTU5NCwyNzU0MjMzNDQsODUxMTY5NzIwLDQzMDIyNzczNCwzMTAwODIzNzUyLDUwNjk0ODYxNiwxMzYzMjU4MTk1LDY1OTA2MDU1NiwzNzUwNjg1NTkzLDg4Mzk5Nzg3NywzNzg1MDUwMjgwLDk1ODEzOTU3MSwzMzE4MzA3NDI3LDEzMjI4MjIyMTgsMzgxMjcyMzQwMywxNTM3''@;'; put 'put ''MDAyMDYzLDIwMDMwMzQ5OTUsMTc0Nzg3Mzc3OSwzNjAyMDM2ODk5LDE5NTU1NjIyMjIsMTU3NTk5MDAxMiwyMDI0MTA0ODE1LDExMjU1OTI5MjgsMjIyNzczMDQ1MiwyNzE2OTA0MzA2LDIzNjE4NTI0MjQsNDQyNzc2MDQ0LDI0Mjg0MzY0NzQsNTkzNjk4MzQ0LDI3NTY3MzQxODcsMzczMzEx''@;'; put 'put ''MDI0OSwzMjA0MDMxNDc5LDI5OTkzNTE1NzMsMzMyOTMyNTI5OCwzODE1OTIwNDI3LDMzOTE1Njk2MTQsMzkyODM4MzkwMCwzNTE1MjY3MjcxLDU2NjI4MDcxMSwzOTQwMTg3NjA2LDM0NTQwNjk1MzQsNDExODYzMDI3MSw0MDAwMjM5OTkyLDExNjQxODQ3NCwxOTE0MTM4NTU0LDE3NDI5MjQy''@;'; put 'put ''MSwyNzMxMDU1MjcwLDI4OTM4MDM1NiwzMjAzOTkzMDA2LDQ2MDM5MzI2OSwzMjA2MjAzMTUsNjg1NDcxNzMzLDU4NzQ5NjgzNiw4NTIxNDI5NzEsMTA4Njc5Mjg1MSwxMDE3MDM2Mjk4LDM2NTU0MzEwMCwxMTI2MDAwNTgwLDI2MTgyOTc2NzYsMTI4ODAzMzQ3MCwzNDA5ODU1MTU4LDE1MDE1''@;'; put 'put ''MDU5NDgsNDIzNDUwOTg2NiwxNjA3MTY3OTE1LDk4NzE2NzQ2OCwxODE2NDAyMzE2LDEyNDYxODk1OTFdLHc9bmV3IEFycmF5KDE2MCk7ZnVuY3Rpb24gUCgpe3RoaXMuaW5pdCgpLHRoaXMuX3c9dyxfLmNhbGwodGhpcywxMjgsMTEyKX1mdW5jdGlvbiBGKHEsZWUsSil7cmV0dXJuIEpecSYo''@;'; put 'put ''ZWVeSil9ZnVuY3Rpb24gTyhxLGVlLEope3JldHVybiBxJmVlfEomKHF8ZWUpfWZ1bmN0aW9uIHoocSxlZSl7cmV0dXJuKHE+Pj4yOHxlZTw8NCleKGVlPj4+MnxxPDwzMCleKGVlPj4+N3xxPDwyNSl9ZnVuY3Rpb24gTihxLGVlKXtyZXR1cm4ocT4+PjE0fGVlPDwxOCleKHE+Pj4xOHxlZTw8''@;'; put 'put ''MTQpXihlZT4+Pjl8cTw8MjMpfWZ1bmN0aW9uIEwocSxlZSl7cmV0dXJuKHE+Pj4xfGVlPDwzMSleKHE+Pj44fGVlPDwyNClecT4+Pjd9ZnVuY3Rpb24gSyhxLGVlKXtyZXR1cm4ocT4+PjF8ZWU8PDMxKV4ocT4+Pjh8ZWU8PDI0KV4ocT4+Pjd8ZWU8PDI1KX1mdW5jdGlvbiBVKHEsZWUpe3Jl''@;'; put 'put ''dHVybihxPj4+MTl8ZWU8PDEzKV4oZWU+Pj4yOXxxPDwzKV5xPj4+Nn1mdW5jdGlvbiBXKHEsZWUpe3JldHVybihxPj4+MTl8ZWU8PDEzKV4oZWU+Pj4yOXxxPDwzKV4ocT4+PjZ8ZWU8PDI2KX1mdW5jdGlvbiBZKHEsZWUpe3JldHVybiBxPj4+MDxlZT4+PjA/MTowfUkoUCxfKSxQLnByb3Rv''@;'; put 'put ''dHlwZS5pbml0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FoPTE3NzkwMzM3MDMsdGhpcy5fYmg9MzE0NDEzNDI3Nyx0aGlzLl9jaD0xMDEzOTA0MjQyLHRoaXMuX2RoPTI3NzM0ODA3NjIsdGhpcy5fZWg9MTM1OTg5MzExOSx0aGlzLl9maD0yNjAwODIyOTI0LHRoaXMuX2doPTUyODczNDYz''@;'; put 'put ''NSx0aGlzLl9oaD0xNTQxNDU5MjI1LHRoaXMuX2FsPTQwODkyMzU3MjAsdGhpcy5fYmw9MjIyNzg3MzU5NSx0aGlzLl9jbD00MjcxMTc1NzIzLHRoaXMuX2RsPTE1OTU3NTAxMjksdGhpcy5fZWw9MjkxNzU2NTEzNyx0aGlzLl9mbD03MjU1MTExOTksdGhpcy5fZ2w9NDIxNTM4OTU0Nyx0aGlz''@;'; put 'put ''Ll9obD0zMjcwMzMyMDksdGhpc30sUC5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihxKXtmb3IodmFyIGVlPXRoaXMuX3csSj0wfHRoaXMuX2FoLG5lPTB8dGhpcy5fYmgsaWU9MHx0aGlzLl9jaCxsZT0wfHRoaXMuX2RoLG1lPTB8dGhpcy5fZWgsX2U9MHx0aGlzLl9maCxUZT0wfHRoaXMu''@;'; put 'put ''X2doLFNlPTB8dGhpcy5faGgsamU9MHx0aGlzLl9hbCxWPTB8dGhpcy5fYmwscD0wfHRoaXMuX2NsLGI9MHx0aGlzLl9kbCx4PTB8dGhpcy5fZWwsQz0wfHRoaXMuX2ZsLFQ9MHx0aGlzLl9nbCxIPTB8dGhpcy5faGwsaj0wO2o8MzI7ais9MillZVtqXT1xLnJlYWRJbnQzMkJFKDQqaiksZWVb''@;'; put 'put ''aisxXT1xLnJlYWRJbnQzMkJFKDQqais0KTtmb3IoO2o8MTYwO2orPTIpe3ZhciBFPWVlW2otMzBdLG09ZWVbai0zMCsxXSxBPUwoRSxtKSxhZT1LKG0sRSksdGU9VShFPWVlW2otNF0sbT1lZVtqLTQrMV0pLHNlPVcobSxFKSxKZT1lZVtqLTMyXSxvdD1lZVtqLTMyKzFdLHhlPWFlK2VlW2ot''@;'; put 'put ''MTQrMV18MCx2ZT1BK2VlW2otMTRdK1koeGUsYWUpfDA7dmU9KHZlPXZlK3RlK1koeGU9eGUrc2V8MCxzZSl8MCkrSmUrWSh4ZT14ZStvdHwwLG90KXwwLGVlW2pdPXZlLGVlW2orMV09eGV9Zm9yKHZhciBYZT0wO1hlPDE2MDtYZSs9Mil7dmU9ZWVbWGVdLHhlPWVlW1hlKzFdO3ZhciB6ZT1P''@;'; put 'put ''KEosbmUsaWUpLERlPU8oamUsVixwKSxGZT16KEosamUpLE9lPXooamUsSiksSWU9TihtZSx4KSxWZT1OKHgsbWUpLGtlPUJbWGVdLEFlPUJbWGUrMV0sX3Q9RihtZSxfZSxUZSksbnQ9Rih4LEMsVCksUWU9SCtWZXwwLHVuPVNlK0llK1koUWUsSCl8MDt1bj0odW49KHVuPXVuK190K1koUWU9''@;'; put 'put ''UWUrbnR8MCxudCl8MCkra2UrWShRZT1RZStBZXwwLEFlKXwwKSt2ZStZKFFlPVFlK3hlfDAseGUpfDA7dmFyIHl0PU9lK0RlfDAsTXQ9RmUremUrWSh5dCxPZSl8MDtTZT1UZSxIPVQsVGU9X2UsVD1DLF9lPW1lLEM9eCxtZT1sZSt1bitZKHg9YitRZXwwLGIpfDAsbGU9aWUsYj1wLGllPW5l''@;'; put 'put ''LHA9VixuZT1KLFY9amUsSj11bitNdCtZKGplPVFlK3l0fDAsUWUpfDB9dGhpcy5fYWw9dGhpcy5fYWwramV8MCx0aGlzLl9ibD10aGlzLl9ibCtWfDAsdGhpcy5fY2w9dGhpcy5fY2wrcHwwLHRoaXMuX2RsPXRoaXMuX2RsK2J8MCx0aGlzLl9lbD10aGlzLl9lbCt4fDAsdGhpcy5fZmw9dGhp''@;'; put 'put ''cy5fZmwrQ3wwLHRoaXMuX2dsPXRoaXMuX2dsK1R8MCx0aGlzLl9obD10aGlzLl9obCtIfDAsdGhpcy5fYWg9dGhpcy5fYWgrSitZKHRoaXMuX2FsLGplKXwwLHRoaXMuX2JoPXRoaXMuX2JoK25lK1kodGhpcy5fYmwsVil8MCx0aGlzLl9jaD10aGlzLl9jaCtpZStZKHRoaXMuX2NsLHApfDAs''@;'; put 'put ''dGhpcy5fZGg9dGhpcy5fZGgrbGUrWSh0aGlzLl9kbCxiKXwwLHRoaXMuX2VoPXRoaXMuX2VoK21lK1kodGhpcy5fZWwseCl8MCx0aGlzLl9maD10aGlzLl9maCtfZStZKHRoaXMuX2ZsLEMpfDAsdGhpcy5fZ2g9dGhpcy5fZ2grVGUrWSh0aGlzLl9nbCxUKXwwLHRoaXMuX2hoPXRoaXMuX2ho''@;'; put 'put ''K1NlK1kodGhpcy5faGwsSCl8MH0sUC5wcm90b3R5cGUuX2hhc2g9ZnVuY3Rpb24oKXt2YXIgcT1nLmFsbG9jVW5zYWZlKDY0KTtmdW5jdGlvbiBlZShKLG5lLGllKXtxLndyaXRlSW50MzJCRShKLGllKSxxLndyaXRlSW50MzJCRShuZSxpZSs0KX1yZXR1cm4gZWUodGhpcy5fYWgsdGhpcy5f''@;'; put 'put ''YWwsMCksZWUodGhpcy5fYmgsdGhpcy5fYmwsOCksZWUodGhpcy5fY2gsdGhpcy5fY2wsMTYpLGVlKHRoaXMuX2RoLHRoaXMuX2RsLDI0KSxlZSh0aGlzLl9laCx0aGlzLl9lbCwzMiksZWUodGhpcy5fZmgsdGhpcy5fZmwsNDApLGVlKHRoaXMuX2doLHRoaXMuX2dsLDQ4KSxlZSh0aGlzLl9o''@;'; put 'put ''aCx0aGlzLl9obCw1NikscX0sdWUuZXhwb3J0cz1QfSwyODMwOih1ZSxYLHkpPT57dWUuZXhwb3J0cz1nO3ZhciBJPXkoNzE4NykuRXZlbnRFbWl0dGVyO2Z1bmN0aW9uIGcoKXtJLmNhbGwodGhpcyl9eSg1NzE3KShnLEkpLGcuUmVhZGFibGU9eSg5NDgxKSxnLldyaXRhYmxlPXkoNDIyOSks''@;'; put 'put ''Zy5EdXBsZXg9eSg2NzUzKSxnLlRyYW5zZm9ybT15KDQ2MDUpLGcuUGFzc1Rocm91Z2g9eSgyNzI1KSxnLmZpbmlzaGVkPXkoODYxMCksZy5waXBlbGluZT15KDk5NDYpLGcuU3RyZWFtPWcsZy5wcm90b3R5cGUucGlwZT1mdW5jdGlvbihCLHcpe3ZhciBQPXRoaXM7ZnVuY3Rpb24gRihXKXtC''@;'; put 'put ''LndyaXRhYmxlJiYhMT09PUIud3JpdGUoVykmJlAucGF1c2UmJlAucGF1c2UoKX1mdW5jdGlvbiBPKCl7UC5yZWFkYWJsZSYmUC5yZXN1bWUmJlAucmVzdW1lKCl9UC5vbigiZGF0YSIsRiksQi5vbigiZHJhaW4iLE8pLCFCLl9pc1N0ZGlvJiYoIXd8fCExIT09dy5lbmQpJiYoUC5vbigiZW5k''@;'; put 'put ''IixOKSxQLm9uKCJjbG9zZSIsTCkpO3ZhciB6PSExO2Z1bmN0aW9uIE4oKXt6fHwoej0hMCxCLmVuZCgpKX1mdW5jdGlvbiBMKCl7enx8KHo9ITAsImZ1bmN0aW9uIj09dHlwZW9mIEIuZGVzdHJveSYmQi5kZXN0cm95KCkpfWZ1bmN0aW9uIEsoVyl7aWYoVSgpLDA9PT1JLmxpc3RlbmVyQ291''@;'; put 'put ''bnQodGhpcywiZXJyb3IiKSl0aHJvdyBXfWZ1bmN0aW9uIFUoKXtQLnJlbW92ZUxpc3RlbmVyKCJkYXRhIixGKSxCLnJlbW92ZUxpc3RlbmVyKCJkcmFpbiIsTyksUC5yZW1vdmVMaXN0ZW5lcigiZW5kIixOKSxQLnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIsTCksUC5yZW1vdmVMaXN0ZW5lcigi''@;'; put 'put ''ZXJyb3IiLEspLEIucmVtb3ZlTGlzdGVuZXIoImVycm9yIixLKSxQLnJlbW92ZUxpc3RlbmVyKCJlbmQiLFUpLFAucmVtb3ZlTGlzdGVuZXIoImNsb3NlIixVKSxCLnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIsVSl9cmV0dXJuIFAub24oImVycm9yIixLKSxCLm9uKCJlcnJvciIsSyksUC5vbigi''@;'; put 'put ''ZW5kIixVKSxQLm9uKCJjbG9zZSIsVSksQi5vbigiY2xvc2UiLFUpLEIuZW1pdCgicGlwZSIsUCksQn19LDI1NTM6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg5NTA5KS5CdWZmZXIsXz1JLmlzRW5jb2Rpbmd8fGZ1bmN0aW9uKEope3N3aXRjaCgoSj0iIitKKSYmSi50b0xvd2Vy''@;'; put 'put ''Q2FzZSgpKXtjYXNlImhleCI6Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpjYXNlImFzY2lpIjpjYXNlImJpbmFyeSI6Y2FzZSJiYXNlNjQiOmNhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpjYXNlInJhdyI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4h''@;'; put 'put ''MX19O2Z1bmN0aW9uIHcoSil7dmFyIG5lO3N3aXRjaCh0aGlzLmVuY29kaW5nPWZ1bmN0aW9uIEIoSil7dmFyIG5lPWZ1bmN0aW9uIGcoSil7aWYoIUopcmV0dXJuInV0ZjgiO2Zvcih2YXIgbmU7Oylzd2l0Y2goSil7Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpyZXR1cm4idXRmOCI7Y2FzZSJ1''@;'; put 'put ''Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiJ1dGYxNmxlIjtjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiJsYXRpbjEiO2Nhc2UiYmFzZTY0IjpjYXNlImFzY2lpIjpjYXNlImhleCI6cmV0dXJuIEo7ZGVmYXVsdDppZihuZSlyZXR1''@;'; put 'put ''cm47Sj0oIiIrSikudG9Mb3dlckNhc2UoKSxuZT0hMH19KEopO2lmKCJzdHJpbmciIT10eXBlb2YgbmUmJihJLmlzRW5jb2Rpbmc9PT1ffHwhXyhKKSkpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK0opO3JldHVybiBuZXx8Sn0oSiksdGhpcy5lbmNvZGluZyl7Y2FzZSJ1''@;'; put 'put ''dGYxNmxlIjp0aGlzLnRleHQ9Syx0aGlzLmVuZD1VLG5lPTQ7YnJlYWs7Y2FzZSJ1dGY4Ijp0aGlzLmZpbGxMYXN0PXosbmU9NDticmVhaztjYXNlImJhc2U2NCI6dGhpcy50ZXh0PVcsdGhpcy5lbmQ9WSxuZT0zO2JyZWFrO2RlZmF1bHQ6cmV0dXJuIHRoaXMud3JpdGU9cSx2b2lkKHRoaXMu''@;'; put 'put ''ZW5kPWVlKX10aGlzLmxhc3ROZWVkPTAsdGhpcy5sYXN0VG90YWw9MCx0aGlzLmxhc3RDaGFyPUkuYWxsb2NVbnNhZmUobmUpfWZ1bmN0aW9uIFAoSil7cmV0dXJuIEo8PTEyNz8wOko+PjU9PTY/MjpKPj40PT0xND8zOko+PjM9PTMwPzQ6Sj4+Nj09Mj8tMTotMn1mdW5jdGlvbiB6KEope3Zh''@;'; put 'put ''ciBuZT10aGlzLmxhc3RUb3RhbC10aGlzLmxhc3ROZWVkLGllPWZ1bmN0aW9uIE8oSixuZSxpZSl7aWYoMTI4IT0oMTkyJm5lWzBdKSlyZXR1cm4gSi5sYXN0TmVlZD0wLCJcdWZmZmQiO2lmKEoubGFzdE5lZWQ+MSYmbmUubGVuZ3RoPjEpe2lmKDEyOCE9KDE5MiZuZVsxXSkpcmV0dXJuIEou''@;'; put 'put ''bGFzdE5lZWQ9MSwiXHVmZmZkIjtpZihKLmxhc3ROZWVkPjImJm5lLmxlbmd0aD4yJiYxMjghPSgxOTImbmVbMl0pKXJldHVybiBKLmxhc3ROZWVkPTIsIlx1ZmZmZCJ9fSh0aGlzLEopO3JldHVybiB2b2lkIDAhPT1pZT9pZTp0aGlzLmxhc3ROZWVkPD1KLmxlbmd0aD8oSi5jb3B5KHRoaXMu''@;'; put 'put ''bGFzdENoYXIsbmUsMCx0aGlzLmxhc3ROZWVkKSx0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcsMCx0aGlzLmxhc3RUb3RhbCkpOihKLmNvcHkodGhpcy5sYXN0Q2hhcixuZSwwLEoubGVuZ3RoKSx2b2lkKHRoaXMubGFzdE5lZWQtPUoubGVuZ3RoKSl9ZnVuY3Rpb24gSyhK''@;'; put 'put ''LG5lKXtpZigoSi5sZW5ndGgtbmUpJTI9PTApe3ZhciBpZT1KLnRvU3RyaW5nKCJ1dGYxNmxlIixuZSk7aWYoaWUpe3ZhciBsZT1pZS5jaGFyQ29kZUF0KGllLmxlbmd0aC0xKTtpZihsZT49NTUyOTYmJmxlPD01NjMxOSlyZXR1cm4gdGhpcy5sYXN0TmVlZD0yLHRoaXMubGFzdFRvdGFsPTQs''@;'; put 'put ''dGhpcy5sYXN0Q2hhclswXT1KW0oubGVuZ3RoLTJdLHRoaXMubGFzdENoYXJbMV09SltKLmxlbmd0aC0xXSxpZS5zbGljZSgwLC0xKX1yZXR1cm4gaWV9cmV0dXJuIHRoaXMubGFzdE5lZWQ9MSx0aGlzLmxhc3RUb3RhbD0yLHRoaXMubGFzdENoYXJbMF09SltKLmxlbmd0aC0xXSxKLnRvU3Ry''@;'; put 'put ''aW5nKCJ1dGYxNmxlIixuZSxKLmxlbmd0aC0xKX1mdW5jdGlvbiBVKEope3ZhciBuZT1KJiZKLmxlbmd0aD90aGlzLndyaXRlKEopOiIiO3JldHVybiB0aGlzLmxhc3ROZWVkP25lK3RoaXMubGFzdENoYXIudG9TdHJpbmcoInV0ZjE2bGUiLDAsdGhpcy5sYXN0VG90YWwtdGhpcy5sYXN0TmVl''@;'; put 'put ''ZCk6bmV9ZnVuY3Rpb24gVyhKLG5lKXt2YXIgaWU9KEoubGVuZ3RoLW5lKSUzO3JldHVybiAwPT09aWU/Si50b1N0cmluZygiYmFzZTY0IixuZSk6KHRoaXMubGFzdE5lZWQ9My1pZSx0aGlzLmxhc3RUb3RhbD0zLDE9PT1pZT90aGlzLmxhc3RDaGFyWzBdPUpbSi5sZW5ndGgtMV06KHRoaXMu''@;'; put 'put ''bGFzdENoYXJbMF09SltKLmxlbmd0aC0yXSx0aGlzLmxhc3RDaGFyWzFdPUpbSi5sZW5ndGgtMV0pLEoudG9TdHJpbmcoImJhc2U2NCIsbmUsSi5sZW5ndGgtaWUpKX1mdW5jdGlvbiBZKEope3ZhciBuZT1KJiZKLmxlbmd0aD90aGlzLndyaXRlKEopOiIiO3JldHVybiB0aGlzLmxhc3ROZWVk''@;'; put 'put ''P25lK3RoaXMubGFzdENoYXIudG9TdHJpbmcoImJhc2U2NCIsMCwzLXRoaXMubGFzdE5lZWQpOm5lfWZ1bmN0aW9uIHEoSil7cmV0dXJuIEoudG9TdHJpbmcodGhpcy5lbmNvZGluZyl9ZnVuY3Rpb24gZWUoSil7cmV0dXJuIEomJkoubGVuZ3RoP3RoaXMud3JpdGUoSik6IiJ9WC5zPXcsdy5w''@;'; put 'put ''cm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oSil7aWYoMD09PUoubGVuZ3RoKXJldHVybiIiO3ZhciBuZSxpZTtpZih0aGlzLmxhc3ROZWVkKXtpZih2b2lkIDA9PT0obmU9dGhpcy5maWxsTGFzdChKKSkpcmV0dXJuIiI7aWU9dGhpcy5sYXN0TmVlZCx0aGlzLmxhc3ROZWVkPTB9ZWxzZSBpZT0w''@;'; put 'put ''O3JldHVybiBpZTxKLmxlbmd0aD9uZT9uZSt0aGlzLnRleHQoSixpZSk6dGhpcy50ZXh0KEosaWUpOm5lfHwiIn0sdy5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uIEwoSil7dmFyIG5lPUomJkoubGVuZ3RoP3RoaXMud3JpdGUoSik6IiI7cmV0dXJuIHRoaXMubGFzdE5lZWQ/bmUrIlx1ZmZmZCI6''@;'; put 'put ''bmV9LHcucHJvdG90eXBlLnRleHQ9ZnVuY3Rpb24gTihKLG5lKXt2YXIgaWU9ZnVuY3Rpb24gRihKLG5lLGllKXt2YXIgbGU9bmUubGVuZ3RoLTE7aWYobGU8aWUpcmV0dXJuIDA7dmFyIG1lPVAobmVbbGVdKTtyZXR1cm4gbWU+PTA/KG1lPjAmJihKLmxhc3ROZWVkPW1lLTEpLG1lKTotLWxl''@;'; put 'put ''PGllfHwtMj09PW1lPzA6KG1lPVAobmVbbGVdKSk+PTA/KG1lPjAmJihKLmxhc3ROZWVkPW1lLTIpLG1lKTotLWxlPGllfHwtMj09PW1lPzA6KG1lPVAobmVbbGVdKSk+PTA/KG1lPjAmJigyPT09bWU/bWU9MDpKLmxhc3ROZWVkPW1lLTMpLG1lKTowfSh0aGlzLEosbmUpO2lmKCF0aGlzLmxh''@;'; put 'put ''c3ROZWVkKXJldHVybiBKLnRvU3RyaW5nKCJ1dGY4IixuZSk7dGhpcy5sYXN0VG90YWw9aWU7dmFyIGxlPUoubGVuZ3RoLShpZS10aGlzLmxhc3ROZWVkKTtyZXR1cm4gSi5jb3B5KHRoaXMubGFzdENoYXIsMCxsZSksSi50b1N0cmluZygidXRmOCIsbmUsbGUpfSx3LnByb3RvdHlwZS5maWxs''@;'; put 'put ''TGFzdD1mdW5jdGlvbihKKXtpZih0aGlzLmxhc3ROZWVkPD1KLmxlbmd0aClyZXR1cm4gSi5jb3B5KHRoaXMubGFzdENoYXIsdGhpcy5sYXN0VG90YWwtdGhpcy5sYXN0TmVlZCwwLHRoaXMubGFzdE5lZWQpLHRoaXMubGFzdENoYXIudG9TdHJpbmcodGhpcy5lbmNvZGluZywwLHRoaXMubGFz''@;'; put 'put ''dFRvdGFsKTtKLmNvcHkodGhpcy5sYXN0Q2hhcix0aGlzLmxhc3RUb3RhbC10aGlzLmxhc3ROZWVkLDAsSi5sZW5ndGgpLHRoaXMubGFzdE5lZWQtPUoubGVuZ3RofX0sNzg1NzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBJPXkoMzY4OSksXz15KDQ1NjQpLGc9eSg3NTIpLEI9eSgy''@;'; put 'put ''MjI0KS55LHc9eSg1NzYxKS5tLFA9eSg4OTcxKS5VLEY9eSg3NjUyKSxPPXkoNDU2KSx7ZnJvbUNhbGxiYWNrOnp9PXkoNzA0MSkse2dldEN1c3RvbUluc3BlY3RTeW1ib2w6Tn09eSgxMjY5KSxMPS9eW1x4MjFceDIzLVx4MkJceDJELVx4M0FceDNDLVx4NUJceDVELVx4N0VdKyQvLEs9L1tc''@;'; put 'put ''eDAwLVx4MUZdLyxVPVsiXG4iLCJcciIsIlwwIl0sVz0vW1x4MjAtXHgzQVx4M0MtXHg3RV0rLyxZPS9bXHgwOVx4MjAtXHgyRlx4M0ItXHg0MFx4NUItXHg2MFx4N0ItXHg3RV0vLHE9e2phbjowLGZlYjoxLG1hcjoyLGFwcjozLG1heTo0LGp1bjo1LGp1bDo2LGF1Zzo3LHNlcDo4LG9jdDo5''@;'; put 'put ''LG5vdjoxMCxkZWM6MTF9LGVlPTIxNDc0ODM2NDdlMyxuZT0nSW52YWxpZCBzYW1lU2l0ZUNvbnRleHQgb3B0aW9uIGZvciBnZXRDb29raWVzKCk7IGV4cGVjdGVkIG9uZSBvZiAic3RyaWN0IiwgImxheCIsIG9yICJub25lIic7ZnVuY3Rpb24gaWUoemUpe0YudmFsaWRhdGUoRi5pc05vbkVt''@;'; put 'put ''cHR5U3RyaW5nKHplKSx6ZSk7Y29uc3QgRGU9U3RyaW5nKHplKS50b0xvd2VyQ2FzZSgpO3JldHVybiJub25lIj09PURlfHwibGF4Ij09PURlfHwic3RyaWN0Ij09PURlP0RlOm51bGx9Y29uc3QgbGU9T2JqZWN0LmZyZWV6ZSh7U0lMRU5UOiJzaWxlbnQiLFNUUklDVDoic3RyaWN0IixESVNB''@;'; put 'put ''QkxFRDoidW5zYWZlLWRpc2FibGVkIn0pLG1lPS8oPzpeKD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XVxkfFxkKSg/OlwuKD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XVxkfFxkKSl7M30kKXwoPzpeKD86KD86W2EtZlxkXXsxLDR9Oil7N30oPzpbYS1mXGRdezEsNH18Oil8''@;'; put 'put ''KD86W2EtZlxkXXsxLDR9Oil7Nn0oPzooPzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldXGR8XGQpKD86XC4oPzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldXGR8XGQpKXszfXw6W2EtZlxkXXsxLDR9fDopfCg/OlthLWZcZF17MSw0fTopezV9KD86Oig/OjI1WzAtNV18MlswLTRd''@;'; put 'put ''XGR8MVxkXGR8WzEtOV1cZHxcZCkoPzpcLig/OjI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV1cZHxcZCkpezN9fCg/OjpbYS1mXGRdezEsNH0pezEsMn18Oil8KD86W2EtZlxkXXsxLDR9Oil7NH0oPzooPzo6W2EtZlxkXXsxLDR9KXswLDF9Oig/OjI1WzAtNV18MlswLTRdXGR8MVxkXGR8''@;'; put 'put ''WzEtOV1cZHxcZCkoPzpcLig/OjI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV1cZHxcZCkpezN9fCg/OjpbYS1mXGRdezEsNH0pezEsM318Oil8KD86W2EtZlxkXXsxLDR9Oil7M30oPzooPzo6W2EtZlxkXXsxLDR9KXswLDJ9Oig/OjI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV1cZHxc''@;'; put 'put ''ZCkoPzpcLig/OjI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV1cZHxcZCkpezN9fCg/OjpbYS1mXGRdezEsNH0pezEsNH18Oil8KD86W2EtZlxkXXsxLDR9Oil7Mn0oPzooPzo6W2EtZlxkXXsxLDR9KXswLDN9Oig/OjI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV1cZHxcZCkoPzpcLig/''@;'; put 'put ''OjI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV1cZHxcZCkpezN9fCg/OjpbYS1mXGRdezEsNH0pezEsNX18Oil8KD86W2EtZlxkXXsxLDR9Oil7MX0oPzooPzo6W2EtZlxkXXsxLDR9KXswLDR9Oig/OjI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV1cZHxcZCkoPzpcLig/OjI1WzAtNV18''@;'; put 'put ''MlswLTRdXGR8MVxkXGR8WzEtOV1cZHxcZCkpezN9fCg/OjpbYS1mXGRdezEsNH0pezEsNn18Oil8KD86Oig/Oig/OjpbYS1mXGRdezEsNH0pezAsNX06KD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XVxkfFxkKSg/OlwuKD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XVxkfFxk''@;'; put 'put ''KSl7M318KD86OlthLWZcZF17MSw0fSl7MSw3fXw6KSkpJCkvLF9lPSJcblxcWz8oPzpcbig/OlthLWZBLUZcXGRdezEsNH06KXs3fSg/OlthLWZBLUZcXGRdezEsNH18Oil8XG4oPzpbYS1mQS1GXFxkXXsxLDR9Oil7Nn0oPzooPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldXFxk''@;'; put 'put ''fFxcZCkoPzpcXC4oPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldXFxkfFxcZCkpezN9fDpbYS1mQS1GXFxkXXsxLDR9fDopfFxuKD86W2EtZkEtRlxcZF17MSw0fTopezV9KD86Oig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV1cXGR8XFxkKSg/OlxcLig/OjI1WzAt''@;'; put 'put ''NV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV1cXGR8XFxkKSl7M318KD86OlthLWZBLUZcXGRdezEsNH0pezEsMn18Oil8XG4oPzpbYS1mQS1GXFxkXXsxLDR9Oil7NH0oPzooPzo6W2EtZkEtRlxcZF17MSw0fSl7MCwxfTooPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldXFxkfFxc''@;'; put 'put ''ZCkoPzpcXC4oPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldXFxkfFxcZCkpezN9fCg/OjpbYS1mQS1GXFxkXXsxLDR9KXsxLDN9fDopfFxuKD86W2EtZkEtRlxcZF17MSw0fTopezN9KD86KD86OlthLWZBLUZcXGRdezEsNH0pezAsMn06KD86MjVbMC01XXwyWzAtNF1cXGR8MVxc''@;'; put 'put ''ZFxcZHxbMS05XVxcZHxcXGQpKD86XFwuKD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XVxcZHxcXGQpKXszfXwoPzo6W2EtZkEtRlxcZF17MSw0fSl7MSw0fXw6KXxcbig/OlthLWZBLUZcXGRdezEsNH06KXsyfSg/Oig/OjpbYS1mQS1GXFxkXXsxLDR9KXswLDN9Oig/OjI1WzAt''@;'; put 'put ''NV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV1cXGR8XFxkKSg/OlxcLig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV1cXGR8XFxkKSl7M318KD86OlthLWZBLUZcXGRdezEsNH0pezEsNX18Oil8XG4oPzpbYS1mQS1GXFxkXXsxLDR9Oil7MX0oPzooPzo6W2EtZkEtRlxcZF17MSw0''@;'; put 'put ''fSl7MCw0fTooPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldXFxkfFxcZCkoPzpcXC4oPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldXFxkfFxcZCkpezN9fCg/OjpbYS1mQS1GXFxkXXsxLDR9KXsxLDZ9fDopfFxuKD86Oig/Oig/OjpbYS1mQS1GXFxkXXsxLDR9KXsw''@;'; put 'put ''LDV9Oig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV1cXGR8XFxkKSg/OlxcLig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV1cXGR8XFxkKSl7M318KD86OlthLWZBLUZcXGRdezEsNH0pezEsN318OikpXG4pKD86JVswLTlhLXpBLVpdezEsfSk/XFxdP1xuIi5yZXBs''@;'; put 'put ''YWNlKC9ccypcL1wvLiokL2dtLCIiKS5yZXBsYWNlKC9cbi9nLCIiKS50cmltKCksVGU9bmV3IFJlZ0V4cChgXiR7X2V9JGApO2Z1bmN0aW9uIFNlKHplLERlLEZlLE9lKXtsZXQgSWU9MDtmb3IoO0llPHplLmxlbmd0aDspe2NvbnN0IFZlPXplLmNoYXJDb2RlQXQoSWUpO2lmKFZlPD00N3x8''@;'; put 'put ''VmU+PTU4KWJyZWFrO0llKyt9cmV0dXJuIEllPERlfHxJZT5GZXx8IU9lJiZJZSE9emUubGVuZ3RoP251bGw6cGFyc2VJbnQoemUuc3Vic3RyKDAsSWUpLDEwKX1mdW5jdGlvbiBqZSh6ZSl7Y29uc3QgRGU9emUuc3BsaXQoIjoiKSxGZT1bMCwwLDBdO2lmKDMhPT1EZS5sZW5ndGgpcmV0dXJu''@;'; put 'put ''IG51bGw7Zm9yKGxldCBPZT0wO09lPDM7T2UrKyl7Y29uc3QgVmU9U2UoRGVbT2VdLDEsMiwyPT1PZSk7aWYobnVsbD09PVZlKXJldHVybiBudWxsO0ZlW09lXT1WZX1yZXR1cm4gRmV9ZnVuY3Rpb24gVih6ZSl7emU9U3RyaW5nKHplKS5zdWJzdHIoMCwzKS50b0xvd2VyQ2FzZSgpO2NvbnN0''@;'; put 'put ''IERlPXFbemVdO3JldHVybiBEZT49MD9EZTpudWxsfWZ1bmN0aW9uIHAoemUpe2lmKCF6ZSlyZXR1cm47Y29uc3QgRGU9emUuc3BsaXQoWSk7aWYoIURlKXJldHVybjtsZXQgRmU9bnVsbCxPZT1udWxsLEllPW51bGwsVmU9bnVsbCxrZT1udWxsLEFlPW51bGw7Zm9yKGxldCBfdD0wO190PERl''@;'; put 'put ''Lmxlbmd0aDtfdCsrKXtjb25zdCBudD1EZVtfdF0udHJpbSgpO2lmKCFudC5sZW5ndGgpY29udGludWU7bGV0IFFlO251bGw9PT1JZSYmKFFlPWplKG50KSxRZSk/KEZlPVFlWzBdLE9lPVFlWzFdLEllPVFlWzJdKTpudWxsIT09VmV8fChRZT1TZShudCwxLDIsITApLG51bGw9PT1RZSk/bnVs''@;'; put 'put ''bCE9PWtlfHwoUWU9VihudCksbnVsbD09PVFlKT9udWxsPT09QWUmJihRZT1TZShudCwyLDQsITApLG51bGwhPT1RZSYmKEFlPVFlLEFlPj03MCYmQWU8PTk5P0FlKz0xOTAwOkFlPj0wJiZBZTw9NjkmJihBZSs9MmUzKSkpOmtlPVFlOlZlPVFlfXJldHVybiBudWxsPT09VmV8fG51bGw9PT1r''@;'; put 'put ''ZXx8bnVsbD09PUFlfHxudWxsPT09SWV8fFZlPDF8fFZlPjMxfHxBZTwxNjAxfHxGZT4yM3x8T2U+NTl8fEllPjU5P3ZvaWQgMDpuZXcgRGF0ZShEYXRlLlVUQyhBZSxrZSxWZSxGZSxPZSxJZSkpfWZ1bmN0aW9uIGIoemUpe3JldHVybiBGLnZhbGlkYXRlKEYuaXNEYXRlKHplKSx6ZSksemUu''@;'; put 'put ''dG9VVENTdHJpbmcoKX1mdW5jdGlvbiB4KHplKXtyZXR1cm4gbnVsbD09emU/bnVsbDooemU9emUudHJpbSgpLnJlcGxhY2UoL15cLi8sIiIpLFRlLnRlc3QoemUpJiYoemU9emUucmVwbGFjZSgiWyIsIiIpLnJlcGxhY2UoIl0iLCIiKSksSSYmL1teXHUwMDAxLVx1MDA3Zl0vLnRlc3QoemUp''@;'; put 'put ''JiYoemU9SS50b0FTQ0lJKHplKSksemUudG9Mb3dlckNhc2UoKSl9ZnVuY3Rpb24gQyh6ZSxEZSxGZSl7aWYobnVsbD09emV8fG51bGw9PURlKXJldHVybiBudWxsO2lmKCExIT09RmUmJih6ZT14KHplKSxEZT14KERlKSksemU9PURlKXJldHVybiEwO2NvbnN0IE9lPXplLmxhc3RJbmRleE9m''@;'; put 'put ''KERlKTtyZXR1cm4hKE9lPD0wfHx6ZS5sZW5ndGghPT1EZS5sZW5ndGgrT2V8fCIuIiE9PXplLnN1YnN0cihPZS0xLDEpfHxtZS50ZXN0KHplKSl9ZnVuY3Rpb24gVCh6ZSl7aWYoIXplfHwiLyIhPT16ZS5zdWJzdHIoMCwxKSlyZXR1cm4iLyI7aWYoIi8iPT09emUpcmV0dXJuIHplO2NvbnN0''@;'; put 'put ''IERlPXplLmxhc3RJbmRleE9mKCIvIik7cmV0dXJuIDA9PT1EZT8iLyI6emUuc2xpY2UoMCxEZSl9ZnVuY3Rpb24gRSh6ZSxEZSl7aWYoKCFEZXx8Im9iamVjdCIhPXR5cGVvZiBEZSkmJihEZT17fSksRi5pc0VtcHR5U3RyaW5nKHplKXx8IUYuaXNTdHJpbmcoemUpKXJldHVybiBudWxsO2Nv''@;'; put 'put ''bnN0IEZlPSh6ZT16ZS50cmltKCkpLmluZGV4T2YoIjsiKSxJZT1mdW5jdGlvbiBqKHplLERlKXt6ZT1mdW5jdGlvbiBIKHplKXtpZihGLmlzRW1wdHlTdHJpbmcoemUpKXJldHVybiB6ZTtmb3IobGV0IERlPTA7RGU8VS5sZW5ndGg7RGUrKyl7Y29uc3QgRmU9emUuaW5kZXhPZihVW0RlXSk7''@;'; put 'put ''LTEhPT1GZSYmKHplPXplLnN1YnN0cigwLEZlKSl9cmV0dXJuIHplfSh6ZSksRi52YWxpZGF0ZShGLmlzU3RyaW5nKHplKSx6ZSk7bGV0IE9lLEllLEZlPXplLmluZGV4T2YoIj0iKTtpZihEZSkwPT09RmUmJihGZT0oemU9emUuc3Vic3RyKDEpKS5pbmRleE9mKCI9IikpO2Vsc2UgaWYoRmU8''@;'; put 'put ''PTApcmV0dXJuO2lmKEZlPD0wPyhPZT0iIixJZT16ZS50cmltKCkpOihPZT16ZS5zdWJzdHIoMCxGZSkudHJpbSgpLEllPXplLnN1YnN0cihGZSsxKS50cmltKCkpLEsudGVzdChPZSl8fEsudGVzdChJZSkpcmV0dXJuO2NvbnN0IFZlPW5ldyBvdDtyZXR1cm4gVmUua2V5PU9lLFZlLnZhbHVl''@;'; put 'put ''PUllLFZlfSgtMT09PUZlP3plOnplLnN1YnN0cigwLEZlKSwhIURlLmxvb3NlKTtpZighSWUpcmV0dXJuO2lmKC0xPT09RmUpcmV0dXJuIEllO2NvbnN0IFZlPXplLnNsaWNlKEZlKzEpLnRyaW0oKTtpZigwPT09VmUubGVuZ3RoKXJldHVybiBJZTtjb25zdCBrZT1WZS5zcGxpdCgiOyIpO2Zv''@;'; put 'put ''cig7a2UubGVuZ3RoOyl7Y29uc3QgQWU9a2Uuc2hpZnQoKS50cmltKCk7aWYoMD09PUFlLmxlbmd0aCljb250aW51ZTtjb25zdCBfdD1BZS5pbmRleE9mKCI9Iik7bGV0IG50LFFlO3N3aXRjaCgtMT09PV90PyhudD1BZSxRZT1udWxsKToobnQ9QWUuc3Vic3RyKDAsX3QpLFFlPUFlLnN1YnN0''@;'; put 'put ''cihfdCsxKSksbnQ9bnQudHJpbSgpLnRvTG93ZXJDYXNlKCksUWUmJihRZT1RZS50cmltKCkpLG50KXtjYXNlImV4cGlyZXMiOmlmKFFlKXtjb25zdCB5dD1wKFFlKTt5dCYmKEllLmV4cGlyZXM9eXQpfWJyZWFrO2Nhc2UibWF4LWFnZSI6aWYoUWUmJi9eLT9bMC05XSskLy50ZXN0KFFlKSl7''@;'; put 'put ''Y29uc3QgeXQ9cGFyc2VJbnQoUWUsMTApO0llLnNldE1heEFnZSh5dCl9YnJlYWs7Y2FzZSJkb21haW4iOmlmKFFlKXtjb25zdCB5dD1RZS50cmltKCkucmVwbGFjZSgvXlwuLywiIik7eXQmJihJZS5kb21haW49eXQudG9Mb3dlckNhc2UoKSl9YnJlYWs7Y2FzZSJwYXRoIjpJZS5wYXRoPVFl''@;'; put 'put ''JiYiLyI9PT1RZVswXT9RZTpudWxsO2JyZWFrO2Nhc2Uic2VjdXJlIjpJZS5zZWN1cmU9ITA7YnJlYWs7Y2FzZSJodHRwb25seSI6SWUuaHR0cE9ubHk9ITA7YnJlYWs7Y2FzZSJzYW1lc2l0ZSI6c3dpdGNoKFFlP1FlLnRvTG93ZXJDYXNlKCk6IiIpe2Nhc2Uic3RyaWN0IjpJZS5zYW1lU2l0''@;'; put 'put ''ZT0ic3RyaWN0IjticmVhaztjYXNlImxheCI6SWUuc2FtZVNpdGU9ImxheCI7YnJlYWs7Y2FzZSJub25lIjpJZS5zYW1lU2l0ZT0ibm9uZSI7YnJlYWs7ZGVmYXVsdDpJZS5zYW1lU2l0ZT12b2lkIDB9YnJlYWs7ZGVmYXVsdDpJZS5leHRlbnNpb25zPUllLmV4dGVuc2lvbnN8fFtdLEllLmV4''@;'; put 'put ''dGVuc2lvbnMucHVzaChBZSl9fXJldHVybiBJZX1mdW5jdGlvbiBhZSh6ZSl7bGV0IERlO3RyeXtEZT1KU09OLnBhcnNlKHplKX1jYXRjaChGZSl7cmV0dXJuIEZlfXJldHVybiBEZX1mdW5jdGlvbiB0ZSh6ZSl7aWYoIXplfHxGLmlzRW1wdHlTdHJpbmcoemUpKXJldHVybiBudWxsO2xldCBE''@;'; put 'put ''ZTtpZigic3RyaW5nIj09dHlwZW9mIHplKXtpZihEZT1hZSh6ZSksRGUgaW5zdGFuY2VvZiBFcnJvcilyZXR1cm4gbnVsbH1lbHNlIERlPXplO2NvbnN0IEZlPW5ldyBvdDtmb3IobGV0IE9lPTA7T2U8b3Quc2VyaWFsaXphYmxlUHJvcGVydGllcy5sZW5ndGg7T2UrKyl7Y29uc3QgSWU9b3Qu''@;'; put 'put ''c2VyaWFsaXphYmxlUHJvcGVydGllc1tPZV07dm9pZCAwPT09RGVbSWVdfHxEZVtJZV09PT1KZVtJZV18fChGZVtJZV09ImV4cGlyZXMiPT09SWV8fCJjcmVhdGlvbiI9PT1JZXx8Imxhc3RBY2Nlc3NlZCI9PT1JZT9udWxsPT09RGVbSWVdP251bGw6IkluZmluaXR5Ij09RGVbSWVdPyJJbmZp''@;'; put 'put ''bml0eSI6bmV3IERhdGUoRGVbSWVdKTpEZVtJZV0pfXJldHVybiBGZX1mdW5jdGlvbiBzZSh6ZSxEZSl7Ri52YWxpZGF0ZShGLmlzT2JqZWN0KHplKSx6ZSksRi52YWxpZGF0ZShGLmlzT2JqZWN0KERlKSxEZSk7bGV0IEZlPTA7cmV0dXJuIEZlPShEZS5wYXRoP0RlLnBhdGgubGVuZ3RoOjAp''@;'; put 'put ''LSh6ZS5wYXRoP3plLnBhdGgubGVuZ3RoOjApLDAhPT1GZXx8KEZlPSh6ZS5jcmVhdGlvbj96ZS5jcmVhdGlvbi5nZXRUaW1lKCk6ZWUpLShEZS5jcmVhdGlvbj9EZS5jcmVhdGlvbi5nZXRUaW1lKCk6ZWUpLDAhPT1GZXx8KEZlPXplLmNyZWF0aW9uSW5kZXgtRGUuY3JlYXRpb25JbmRleCkp''@;'; put 'put ''LEZlfWZ1bmN0aW9uIFVlKHplKXtpZih6ZSBpbnN0YW5jZW9mIE9iamVjdClyZXR1cm4gemU7dHJ5e3plPWRlY29kZVVSSSh6ZSl9Y2F0Y2h7fXJldHVybiBfKHplKX1jb25zdCBKZT17a2V5OiIiLHZhbHVlOiIiLGV4cGlyZXM6IkluZmluaXR5IixtYXhBZ2U6bnVsbCxkb21haW46bnVsbCxw''@;'; put 'put ''YXRoOm51bGwsc2VjdXJlOiExLGh0dHBPbmx5OiExLGV4dGVuc2lvbnM6bnVsbCxob3N0T25seTpudWxsLHBhdGhJc0RlZmF1bHQ6bnVsbCxjcmVhdGlvbjpudWxsLGxhc3RBY2Nlc3NlZDpudWxsLHNhbWVTaXRlOnZvaWQgMH07Y2xhc3Mgb3R7Y29uc3RydWN0b3IoRGU9e30pe2NvbnN0IEZl''@;'; put 'put ''PU4oKTtGZSYmKHRoaXNbRmVdPXRoaXMuaW5zcGVjdCksT2JqZWN0LmFzc2lnbih0aGlzLEplLERlKSx0aGlzLmNyZWF0aW9uPXRoaXMuY3JlYXRpb258fG5ldyBEYXRlLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJjcmVhdGlvbkluZGV4Iix7Y29uZmlndXJhYmxlOiExLGVudW1lcmFi''@;'; put 'put ''bGU6ITEsd3JpdGFibGU6ITAsdmFsdWU6KytvdC5jb29raWVzQ3JlYXRlZH0pfWluc3BlY3QoKXtjb25zdCBEZT1EYXRlLm5vdygpLEZlPW51bGwhPXRoaXMuaG9zdE9ubHk/dGhpcy5ob3N0T25seToiPyIsT2U9dGhpcy5jcmVhdGlvbj9EZS10aGlzLmNyZWF0aW9uLmdldFRpbWUoKSsibXMi''@;'; put 'put ''OiI/IixJZT10aGlzLmxhc3RBY2Nlc3NlZD9EZS10aGlzLmxhc3RBY2Nlc3NlZC5nZXRUaW1lKCkrIm1zIjoiPyI7cmV0dXJuYENvb2tpZT0iJHt0aGlzLnRvU3RyaW5nKCl9OyBob3N0T25seT0ke0ZlfTsgYUFnZT0ke0llfTsgY0FnZT0ke09lfSJgfXRvSlNPTigpe2NvbnN0IERlPXt9O2Zv''@;'; put 'put ''cihjb25zdCBGZSBvZiBvdC5zZXJpYWxpemFibGVQcm9wZXJ0aWVzKXRoaXNbRmVdIT09SmVbRmVdJiYoImV4cGlyZXMiPT09RmV8fCJjcmVhdGlvbiI9PT1GZXx8Imxhc3RBY2Nlc3NlZCI9PT1GZT9EZVtGZV09bnVsbD09PXRoaXNbRmVdP251bGw6IkluZmluaXR5Ij09dGhpc1tGZV0/Iklu''@;'; put 'put ''ZmluaXR5Ijp0aGlzW0ZlXS50b0lTT1N0cmluZygpOiJtYXhBZ2UiPT09RmU/bnVsbCE9PXRoaXNbRmVdJiYoRGVbRmVdPXRoaXNbRmVdPT0xLzB8fHRoaXNbRmVdPT0tMS8wP3RoaXNbRmVdLnRvU3RyaW5nKCk6dGhpc1tGZV0pOnRoaXNbRmVdIT09SmVbRmVdJiYoRGVbRmVdPXRoaXNbRmVd''@;'; put 'put ''KSk7cmV0dXJuIERlfWNsb25lKCl7cmV0dXJuIHRlKHRoaXMudG9KU09OKCkpfXZhbGlkYXRlKCl7aWYoIUwudGVzdCh0aGlzLnZhbHVlKXx8dGhpcy5leHBpcmVzIT0xLzAmJiEodGhpcy5leHBpcmVzIGluc3RhbmNlb2YgRGF0ZSkmJiFwKHRoaXMuZXhwaXJlcyl8fG51bGwhPXRoaXMubWF4''@;'; put 'put ''QWdlJiZ0aGlzLm1heEFnZTw9MHx8bnVsbCE9dGhpcy5wYXRoJiYhVy50ZXN0KHRoaXMucGF0aCkpcmV0dXJuITE7Y29uc3QgRGU9dGhpcy5jZG9tYWluKCk7cmV0dXJuIShEZSYmKERlLm1hdGNoKC9cLiQvKXx8bnVsbD09Zy5nZXRQdWJsaWNTdWZmaXgoRGUpKSl9c2V0RXhwaXJlcyhEZSl7''@;'; put 'put ''dGhpcy5leHBpcmVzPURlIGluc3RhbmNlb2YgRGF0ZT9EZTpwKERlKXx8IkluZmluaXR5In1zZXRNYXhBZ2UoRGUpe3RoaXMubWF4QWdlPURlPT09MS8wfHxEZT09PS0xLzA/RGUudG9TdHJpbmcoKTpEZX1jb29raWVTdHJpbmcoKXtsZXQgRGU9dGhpcy52YWx1ZTtyZXR1cm4gbnVsbD09RGUm''@;'; put 'put ''JihEZT0iIiksIiI9PT10aGlzLmtleT9EZTpgJHt0aGlzLmtleX09JHtEZX1gfXRvU3RyaW5nKCl7bGV0IERlPXRoaXMuY29va2llU3RyaW5nKCk7aWYodGhpcy5leHBpcmVzIT0xLzAmJih0aGlzLmV4cGlyZXMgaW5zdGFuY2VvZiBEYXRlP0RlKz1gOyBFeHBpcmVzPSR7Yih0aGlzLmV4cGly''@;'; put 'put ''ZXMpfWA6RGUrPWA7IEV4cGlyZXM9JHt0aGlzLmV4cGlyZXN9YCksbnVsbCE9dGhpcy5tYXhBZ2UmJnRoaXMubWF4QWdlIT0xLzAmJihEZSs9YDsgTWF4LUFnZT0ke3RoaXMubWF4QWdlfWApLHRoaXMuZG9tYWluJiYhdGhpcy5ob3N0T25seSYmKERlKz1gOyBEb21haW49JHt0aGlzLmRvbWFp''@;'; put 'put ''bn1gKSx0aGlzLnBhdGgmJihEZSs9YDsgUGF0aD0ke3RoaXMucGF0aH1gKSx0aGlzLnNlY3VyZSYmKERlKz0iOyBTZWN1cmUiKSx0aGlzLmh0dHBPbmx5JiYoRGUrPSI7IEh0dHBPbmx5IiksdGhpcy5zYW1lU2l0ZSYmIm5vbmUiIT09dGhpcy5zYW1lU2l0ZSl7Y29uc3QgRmU9b3Quc2FtZVNp''@;'; put 'put ''dGVDYW5vbmljYWxbdGhpcy5zYW1lU2l0ZS50b0xvd2VyQ2FzZSgpXTtEZSs9YDsgU2FtZVNpdGU9JHtGZXx8dGhpcy5zYW1lU2l0ZX1gfXJldHVybiB0aGlzLmV4dGVuc2lvbnMmJnRoaXMuZXh0ZW5zaW9ucy5mb3JFYWNoKEZlPT57RGUrPWA7ICR7RmV9YH0pLERlfVRUTChEZSl7aWYobnVs''@;'; put 'put ''bCE9dGhpcy5tYXhBZ2UpcmV0dXJuIHRoaXMubWF4QWdlPD0wPzA6MWUzKnRoaXMubWF4QWdlO2xldCBGZT10aGlzLmV4cGlyZXM7cmV0dXJuIEZlIT0xLzA/KEZlIGluc3RhbmNlb2YgRGF0ZXx8KEZlPXAoRmUpfHwxLzApLEZlPT0xLzA/MS8wOkZlLmdldFRpbWUoKS0oRGV8fERhdGUubm93''@;'; put 'put ''KCkpKToxLzB9ZXhwaXJ5VGltZShEZSl7aWYobnVsbCE9dGhpcy5tYXhBZ2Upe2NvbnN0IE9lPXRoaXMubWF4QWdlPD0wPy0xLzA6MWUzKnRoaXMubWF4QWdlO3JldHVybihEZXx8dGhpcy5jcmVhdGlvbnx8bmV3IERhdGUpLmdldFRpbWUoKStPZX1yZXR1cm4gdGhpcy5leHBpcmVzPT0xLzA/''@;'; put 'put ''MS8wOnRoaXMuZXhwaXJlcy5nZXRUaW1lKCl9ZXhwaXJ5RGF0ZShEZSl7Y29uc3QgRmU9dGhpcy5leHBpcnlUaW1lKERlKTtyZXR1cm4gRmU9PTEvMD9uZXcgRGF0ZShlZSk6RmU9PS0xLzA/bmV3IERhdGUoMCk6bmV3IERhdGUoRmUpfWlzUGVyc2lzdGVudCgpe3JldHVybiBudWxsIT10aGlz''@;'; put 'put ''Lm1heEFnZXx8dGhpcy5leHBpcmVzIT0xLzB9Y2Fub25pY2FsaXplZERvbWFpbigpe3JldHVybiBudWxsPT10aGlzLmRvbWFpbj9udWxsOngodGhpcy5kb21haW4pfWNkb21haW4oKXtyZXR1cm4gdGhpcy5jYW5vbmljYWxpemVkRG9tYWluKCl9fWZ1bmN0aW9uIHhlKHplKXtpZihudWxsIT16''@;'; put 'put ''ZSl7Y29uc3QgRGU9emUudG9Mb3dlckNhc2UoKTtzd2l0Y2goRGUpe2Nhc2UgbGUuU1RSSUNUOmNhc2UgbGUuU0lMRU5UOmNhc2UgbGUuRElTQUJMRUQ6cmV0dXJuIERlfX1yZXR1cm4gbGUuU0lMRU5UfW90LmNvb2tpZXNDcmVhdGVkPTAsb3QucGFyc2U9RSxvdC5mcm9tSlNPTj10ZSxvdC5z''@;'; put 'put ''ZXJpYWxpemFibGVQcm9wZXJ0aWVzPU9iamVjdC5rZXlzKEplKSxvdC5zYW1lU2l0ZUxldmVsPXtzdHJpY3Q6MyxsYXg6Mixub25lOjF9LG90LnNhbWVTaXRlQ2Fub25pY2FsPXtzdHJpY3Q6IlN0cmljdCIsbGF4OiJMYXgifTtjbGFzcyB2ZXtjb25zdHJ1Y3RvcihEZSxGZT17cmVqZWN0UHVi''@;'; put 'put ''bGljU3VmZml4ZXM6ITB9KXsiYm9vbGVhbiI9PXR5cGVvZiBGZSYmKEZlPXtyZWplY3RQdWJsaWNTdWZmaXhlczpGZX0pLEYudmFsaWRhdGUoRi5pc09iamVjdChGZSksRmUpLHRoaXMucmVqZWN0UHVibGljU3VmZml4ZXM9RmUucmVqZWN0UHVibGljU3VmZml4ZXMsdGhpcy5lbmFibGVMb29z''@;'; put 'put ''ZU1vZGU9ISFGZS5sb29zZU1vZGUsdGhpcy5hbGxvd1NwZWNpYWxVc2VEb21haW49ImJvb2xlYW4iIT10eXBlb2YgRmUuYWxsb3dTcGVjaWFsVXNlRG9tYWlufHxGZS5hbGxvd1NwZWNpYWxVc2VEb21haW4sdGhpcy5zdG9yZT1EZXx8bmV3IHcsdGhpcy5wcmVmaXhTZWN1cml0eT14ZShGZS5w''@;'; put 'put ''cmVmaXhTZWN1cml0eSksdGhpcy5fY2xvbmVTeW5jPVhlKCJjbG9uZSIpLHRoaXMuX2ltcG9ydENvb2tpZXNTeW5jPVhlKCJfaW1wb3J0Q29va2llcyIpLHRoaXMuZ2V0Q29va2llc1N5bmM9WGUoImdldENvb2tpZXMiKSx0aGlzLmdldENvb2tpZVN0cmluZ1N5bmM9WGUoImdldENvb2tpZVN0''@;'; put 'put ''cmluZyIpLHRoaXMuZ2V0U2V0Q29va2llU3RyaW5nc1N5bmM9WGUoImdldFNldENvb2tpZVN0cmluZ3MiKSx0aGlzLnJlbW92ZUFsbENvb2tpZXNTeW5jPVhlKCJyZW1vdmVBbGxDb29raWVzIiksdGhpcy5zZXRDb29raWVTeW5jPVhlKCJzZXRDb29raWUiKSx0aGlzLnNlcmlhbGl6ZVN5bmM9''@;'; put 'put ''WGUoInNlcmlhbGl6ZSIpfXNldENvb2tpZShEZSxGZSxPZSxJZSl7bGV0IFZlO2lmKEYudmFsaWRhdGUoRi5pc05vbkVtcHR5U3RyaW5nKEZlKSxJZSxPZSksRi5pc0Z1bmN0aW9uKEZlKSlyZXR1cm4oSWU9RmUpKG5ldyBFcnJvcigiTm8gVVJMIHdhcyBzcGVjaWZpZWQiKSk7Y29uc3Qga2U9''@;'; put 'put ''VWUoRmUpO2lmKEYuaXNGdW5jdGlvbihPZSkmJihJZT1PZSxPZT17fSksRi52YWxpZGF0ZShGLmlzRnVuY3Rpb24oSWUpLEllKSwhRi5pc05vbkVtcHR5U3RyaW5nKERlKSYmIUYuaXNPYmplY3QoRGUpJiZEZSBpbnN0YW5jZW9mIFN0cmluZyYmMD09RGUubGVuZ3RoKXJldHVybiBJZShudWxs''@;'; put 'put ''KTtjb25zdCBBZT14KGtlLmhvc3RuYW1lKSxfdD1PZS5sb29zZXx8dGhpcy5lbmFibGVMb29zZU1vZGU7bGV0IG50PW51bGw7aWYoT2Uuc2FtZVNpdGVDb250ZXh0JiYobnQ9aWUoT2Uuc2FtZVNpdGVDb250ZXh0KSwhbnQpKXJldHVybiBJZShuZXcgRXJyb3IobmUpKTtpZigic3RyaW5nIj09''@;'; put 'put ''dHlwZW9mIERlfHxEZSBpbnN0YW5jZW9mIFN0cmluZyl7aWYoIShEZT1vdC5wYXJzZShEZSx7bG9vc2U6X3R9KSkpcmV0dXJuIFZlPW5ldyBFcnJvcigiQ29va2llIGZhaWxlZCB0byBwYXJzZSIpLEllKE9lLmlnbm9yZUVycm9yP251bGw6VmUpfWVsc2UgaWYoIShEZSBpbnN0YW5jZW9mIG90''@;'; put 'put ''KSlyZXR1cm4gVmU9bmV3IEVycm9yKCJGaXJzdCBhcmd1bWVudCB0byBzZXRDb29raWUgbXVzdCBiZSBhIENvb2tpZSBvYmplY3Qgb3Igc3RyaW5nIiksSWUoT2UuaWdub3JlRXJyb3I/bnVsbDpWZSk7Y29uc3QgUWU9T2Uubm93fHxuZXcgRGF0ZTtpZih0aGlzLnJlamVjdFB1YmxpY1N1ZmZp''@;'; put 'put ''eGVzJiZEZS5kb21haW4mJm51bGw9PWcuZ2V0UHVibGljU3VmZml4KERlLmNkb21haW4oKSx7YWxsb3dTcGVjaWFsVXNlRG9tYWluOnRoaXMuYWxsb3dTcGVjaWFsVXNlRG9tYWluLGlnbm9yZUVycm9yOk9lLmlnbm9yZUVycm9yfSkmJiFUZS50ZXN0KERlLmRvbWFpbikpcmV0dXJuIFZlPW5l''@;'; put 'put ''dyBFcnJvcigiQ29va2llIGhhcyBkb21haW4gc2V0IHRvIGEgcHVibGljIHN1ZmZpeCIpLEllKE9lLmlnbm9yZUVycm9yP251bGw6VmUpO2lmKERlLmRvbWFpbil7aWYoIUMoQWUsRGUuY2RvbWFpbigpLCExKSlyZXR1cm4gVmU9bmV3IEVycm9yKGBDb29raWUgbm90IGluIHRoaXMgaG9zdCdz''@;'; put 'put ''IGRvbWFpbi4gQ29va2llOiR7RGUuY2RvbWFpbigpfSBSZXF1ZXN0OiR7QWV9YCksSWUoT2UuaWdub3JlRXJyb3I/bnVsbDpWZSk7bnVsbD09RGUuaG9zdE9ubHkmJihEZS5ob3N0T25seT0hMSl9ZWxzZSBEZS5ob3N0T25seT0hMCxEZS5kb21haW49QWU7aWYoKCFEZS5wYXRofHwiLyIhPT1E''@;'; put 'put ''ZS5wYXRoWzBdKSYmKERlLnBhdGg9VChrZS5wYXRobmFtZSksRGUucGF0aElzRGVmYXVsdD0hMCksITE9PT1PZS5odHRwJiZEZS5odHRwT25seSlyZXR1cm4gVmU9bmV3IEVycm9yKCJDb29raWUgaXMgSHR0cE9ubHkgYW5kIHRoaXMgaXNuJ3QgYW4gSFRUUCBBUEkiKSxJZShPZS5pZ25vcmVF''@;'; put 'put ''cnJvcj9udWxsOlZlKTtpZigibm9uZSIhPT1EZS5zYW1lU2l0ZSYmdm9pZCAwIT09RGUuc2FtZVNpdGUmJm50JiYibm9uZSI9PT1udClyZXR1cm4gVmU9bmV3IEVycm9yKCJDb29raWUgaXMgU2FtZVNpdGUgYnV0IHRoaXMgaXMgYSBjcm9zcy1vcmlnaW4gcmVxdWVzdCIpLEllKE9lLmlnbm9y''@;'; put 'put ''ZUVycm9yP251bGw6VmUpO2NvbnN0IHVuPXRoaXMucHJlZml4U2VjdXJpdHk9PT1sZS5TSUxFTlQ7aWYodGhpcy5wcmVmaXhTZWN1cml0eSE9PWxlLkRJU0FCTEVEKXtsZXQgJGUsaXQ9ITE7aWYoZnVuY3Rpb24gbSh6ZSl7cmV0dXJuIEYudmFsaWRhdGUoRi5pc09iamVjdCh6ZSksemUpLCF6''@;'; put 'put ''ZS5rZXkuc3RhcnRzV2l0aCgiX19TZWN1cmUtIil8fHplLnNlY3VyZX0oRGUpP2Z1bmN0aW9uIEEoemUpe3JldHVybiBGLnZhbGlkYXRlKEYuaXNPYmplY3QoemUpKSwhemUua2V5LnN0YXJ0c1dpdGgoIl9fSG9zdC0iKXx8emUuc2VjdXJlJiZ6ZS5ob3N0T25seSYmbnVsbCE9emUucGF0aCYm''@;'; put 'put ''Ii8iPT09emUucGF0aH0oRGUpfHwoaXQ9ITAsJGU9IkNvb2tpZSBoYXMgX19Ib3N0IHByZWZpeCBidXQgZWl0aGVyIFNlY3VyZSBvciBIb3N0T25seSBhdHRyaWJ1dGUgaXMgbm90IHNldCBvciBQYXRoIGlzIG5vdCAnLyciKTooaXQ9ITAsJGU9IkNvb2tpZSBoYXMgX19TZWN1cmUgcHJlZml4''@;'; put 'put ''IGJ1dCBTZWN1cmUgYXR0cmlidXRlIGlzIG5vdCBzZXQiKSxpdClyZXR1cm4gSWUoT2UuaWdub3JlRXJyb3J8fHVuP251bGw6bmV3IEVycm9yKCRlKSl9Y29uc3QgTXQ9dGhpcy5zdG9yZTtNdC51cGRhdGVDb29raWV8fChNdC51cGRhdGVDb29raWU9ZnVuY3Rpb24oaXQsJGUsdHQpe3RoaXMu''@;'; put 'put ''cHV0Q29va2llKCRlLHR0KX0pLE10LmZpbmRDb29raWUoRGUuZG9tYWluLERlLnBhdGgsRGUua2V5LGZ1bmN0aW9uIER0KGl0LCRlKXtpZihpdClyZXR1cm4gSWUoaXQpO2NvbnN0IHR0PWZ1bmN0aW9uKEhlKXtpZihIZSlyZXR1cm4gSWUoSGUpO0llKG51bGwsRGUpfTtpZigkZSl7aWYoITE9''@;'; put 'put ''PT1PZS5odHRwJiYkZS5odHRwT25seSlyZXR1cm4gaXQ9bmV3IEVycm9yKCJvbGQgQ29va2llIGlzIEh0dHBPbmx5IGFuZCB0aGlzIGlzbid0IGFuIEhUVFAgQVBJIiksSWUoT2UuaWdub3JlRXJyb3I/bnVsbDppdCk7RGUuY3JlYXRpb249JGUuY3JlYXRpb24sRGUuY3JlYXRpb25JbmRleD0k''@;'; put 'put ''ZS5jcmVhdGlvbkluZGV4LERlLmxhc3RBY2Nlc3NlZD1RZSxNdC51cGRhdGVDb29raWUoJGUsRGUsdHQpfWVsc2UgRGUuY3JlYXRpb249RGUubGFzdEFjY2Vzc2VkPVFlLE10LnB1dENvb2tpZShEZSx0dCl9KX1nZXRDb29raWVzKERlLEZlLE9lKXtGLnZhbGlkYXRlKEYuaXNOb25FbXB0eVN0''@;'; put 'put ''cmluZyhEZSksT2UsRGUpO2NvbnN0IEllPVVlKERlKTtGLmlzRnVuY3Rpb24oRmUpJiYoT2U9RmUsRmU9e30pLEYudmFsaWRhdGUoRi5pc09iamVjdChGZSksT2UsRmUpLEYudmFsaWRhdGUoRi5pc0Z1bmN0aW9uKE9lKSxPZSk7Y29uc3QgVmU9eChJZS5ob3N0bmFtZSksa2U9SWUucGF0aG5h''@;'; put 'put ''bWV8fCIvIjtsZXQgQWU9RmUuc2VjdXJlO251bGw9PUFlJiZJZS5wcm90b2NvbCYmKCJodHRwczoiPT1JZS5wcm90b2NvbHx8IndzczoiPT1JZS5wcm90b2NvbCkmJihBZT0hMCk7bGV0IF90PTA7aWYoRmUuc2FtZVNpdGVDb250ZXh0KXtjb25zdCBpdD1pZShGZS5zYW1lU2l0ZUNvbnRleHQp''@;'; put 'put ''O2lmKF90PW90LnNhbWVTaXRlTGV2ZWxbaXRdLCFfdClyZXR1cm4gT2UobmV3IEVycm9yKG5lKSl9bGV0IG50PUZlLmh0dHA7bnVsbD09bnQmJihudD0hMCk7Y29uc3QgUWU9RmUubm93fHxEYXRlLm5vdygpLHVuPSExIT09RmUuZXhwaXJlLHl0PSEhRmUuYWxsUGF0aHMsTXQ9dGhpcy5zdG9y''@;'; put 'put ''ZTtmdW5jdGlvbiBEdChpdCl7aWYoaXQuaG9zdE9ubHkpe2lmKGl0LmRvbWFpbiE9VmUpcmV0dXJuITF9ZWxzZSBpZighQyhWZSxpdC5kb21haW4sITEpKXJldHVybiExO3JldHVybiEoIXl0JiYhUChrZSxpdC5wYXRoKXx8aXQuc2VjdXJlJiYhQWV8fGl0Lmh0dHBPbmx5JiYhbnR8fF90JiZv''@;'; put 'put ''dC5zYW1lU2l0ZUxldmVsW2l0LnNhbWVTaXRlfHwibm9uZSJdPl90fHx1biYmaXQuZXhwaXJ5VGltZSgpPD1RZSYmKE10LnJlbW92ZUNvb2tpZShpdC5kb21haW4saXQucGF0aCxpdC5rZXksKCk9Pnt9KSwxKSl9TXQuZmluZENvb2tpZXMoVmUseXQ/bnVsbDprZSx0aGlzLmFsbG93U3BlY2lh''@;'; put 'put ''bFVzZURvbWFpbiwoaXQsJGUpPT57aWYoaXQpcmV0dXJuIE9lKGl0KTskZT0kZS5maWx0ZXIoRHQpLCExIT09RmUuc29ydCYmKCRlPSRlLnNvcnQoc2UpKTtjb25zdCB0dD1uZXcgRGF0ZTtmb3IoY29uc3QgSGUgb2YgJGUpSGUubGFzdEFjY2Vzc2VkPXR0O09lKG51bGwsJGUpfSl9Z2V0Q29v''@;'; put 'put ''a2llU3RyaW5nKC4uLkRlKXtjb25zdCBGZT1EZS5wb3AoKTtGLnZhbGlkYXRlKEYuaXNGdW5jdGlvbihGZSksRmUpLERlLnB1c2goZnVuY3Rpb24oSWUsVmUpe0llP0ZlKEllKTpGZShudWxsLFZlLnNvcnQoc2UpLm1hcChrZT0+a2UuY29va2llU3RyaW5nKCkpLmpvaW4oIjsgIikpfSksdGhp''@;'; put 'put ''cy5nZXRDb29raWVzLmFwcGx5KHRoaXMsRGUpfWdldFNldENvb2tpZVN0cmluZ3MoLi4uRGUpe2NvbnN0IEZlPURlLnBvcCgpO0YudmFsaWRhdGUoRi5pc0Z1bmN0aW9uKEZlKSxGZSksRGUucHVzaChmdW5jdGlvbihJZSxWZSl7SWU/RmUoSWUpOkZlKG51bGwsVmUubWFwKGtlPT5rZS50b1N0''@;'; put 'put ''cmluZygpKSl9KSx0aGlzLmdldENvb2tpZXMuYXBwbHkodGhpcyxEZSl9c2VyaWFsaXplKERlKXtGLnZhbGlkYXRlKEYuaXNGdW5jdGlvbihEZSksRGUpO2xldCBGZT10aGlzLnN0b3JlLmNvbnN0cnVjdG9yLm5hbWU7Ri5pc09iamVjdChGZSkmJihGZT1udWxsKTtjb25zdCBPZT17dmVyc2lv''@;'; put 'put ''bjpgdG91Z2gtY29va2llQCR7T31gLHN0b3JlVHlwZTpGZSxyZWplY3RQdWJsaWNTdWZmaXhlczohIXRoaXMucmVqZWN0UHVibGljU3VmZml4ZXMsZW5hYmxlTG9vc2VNb2RlOiEhdGhpcy5lbmFibGVMb29zZU1vZGUsYWxsb3dTcGVjaWFsVXNlRG9tYWluOiEhdGhpcy5hbGxvd1NwZWNpYWxV''@;'; put 'put ''c2VEb21haW4scHJlZml4U2VjdXJpdHk6eGUodGhpcy5wcmVmaXhTZWN1cml0eSksY29va2llczpbXX07aWYoIXRoaXMuc3RvcmUuZ2V0QWxsQ29va2llc3x8ImZ1bmN0aW9uIiE9dHlwZW9mIHRoaXMuc3RvcmUuZ2V0QWxsQ29va2llcylyZXR1cm4gRGUobmV3IEVycm9yKCJzdG9yZSBkb2Vz''@;'; put 'put ''IG5vdCBzdXBwb3J0IGdldEFsbENvb2tpZXMgYW5kIGNhbm5vdCBiZSBzZXJpYWxpemVkIikpO3RoaXMuc3RvcmUuZ2V0QWxsQ29va2llcygoSWUsVmUpPT5JZT9EZShJZSk6KE9lLmNvb2tpZXM9VmUubWFwKGtlPT4oZGVsZXRlKGtlPWtlIGluc3RhbmNlb2Ygb3Q/a2UudG9KU09OKCk6a2Up''@;'; put 'put ''LmNyZWF0aW9uSW5kZXgsa2UpKSxEZShudWxsLE9lKSkpfXRvSlNPTigpe3JldHVybiB0aGlzLnNlcmlhbGl6ZVN5bmMoKX1faW1wb3J0Q29va2llcyhEZSxGZSl7bGV0IE9lPURlLmNvb2tpZXM7aWYoIU9lfHwhQXJyYXkuaXNBcnJheShPZSkpcmV0dXJuIEZlKG5ldyBFcnJvcigic2VyaWFs''@;'; put 'put ''aXplZCBqYXIgaGFzIG5vIGNvb2tpZXMgYXJyYXkiKSk7T2U9T2Uuc2xpY2UoKTtjb25zdCBJZT1WZT0+e2lmKFZlKXJldHVybiBGZShWZSk7aWYoIU9lLmxlbmd0aClyZXR1cm4gRmUoVmUsdGhpcyk7bGV0IGtlO3RyeXtrZT10ZShPZS5zaGlmdCgpKX1jYXRjaChBZSl7cmV0dXJuIEZlKEFl''@;'; put 'put ''KX1pZihudWxsPT09a2UpcmV0dXJuIEllKG51bGwpO3RoaXMuc3RvcmUucHV0Q29va2llKGtlLEllKX07SWUoKX1jbG9uZShEZSxGZSl7MT09PWFyZ3VtZW50cy5sZW5ndGgmJihGZT1EZSxEZT1udWxsKSx0aGlzLnNlcmlhbGl6ZSgoT2UsSWUpPT57aWYoT2UpcmV0dXJuIEZlKE9lKTt2ZS5k''@;'; put 'put ''ZXNlcmlhbGl6ZShJZSxEZSxGZSl9KX1jbG9uZVN5bmMoRGUpe2lmKDA9PT1hcmd1bWVudHMubGVuZ3RoKXJldHVybiB0aGlzLl9jbG9uZVN5bmMoKTtpZighRGUuc3luY2hyb25vdXMpdGhyb3cgbmV3IEVycm9yKCJDb29raWVKYXIgY2xvbmUgZGVzdGluYXRpb24gc3RvcmUgaXMgbm90IHN5''@;'; put 'put ''bmNocm9ub3VzOyB1c2UgYXN5bmMgQVBJIGluc3RlYWQuIik7cmV0dXJuIHRoaXMuX2Nsb25lU3luYyhEZSl9cmVtb3ZlQWxsQ29va2llcyhEZSl7Ri52YWxpZGF0ZShGLmlzRnVuY3Rpb24oRGUpLERlKTtjb25zdCBGZT10aGlzLnN0b3JlO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBGZS5yZW1v''@;'; put 'put ''dmVBbGxDb29raWVzJiZGZS5yZW1vdmVBbGxDb29raWVzIT09Qi5wcm90b3R5cGUucmVtb3ZlQWxsQ29va2llcylyZXR1cm4gRmUucmVtb3ZlQWxsQ29va2llcyhEZSk7RmUuZ2V0QWxsQ29va2llcygoT2UsSWUpPT57aWYoT2UpcmV0dXJuIERlKE9lKTtpZigwPT09SWUubGVuZ3RoKXJldHVy''@;'; put 'put ''biBEZShudWxsKTtsZXQgVmU9MDtjb25zdCBrZT1bXTtmdW5jdGlvbiBBZShfdCl7aWYoX3QmJmtlLnB1c2goX3QpLFZlKyssVmU9PT1JZS5sZW5ndGgpcmV0dXJuIERlKGtlLmxlbmd0aD9rZVswXTpudWxsKX1JZS5mb3JFYWNoKF90PT57RmUucmVtb3ZlQ29va2llKF90LmRvbWFpbixfdC5w''@;'; put 'put ''YXRoLF90LmtleSxBZSl9KX0pfXN0YXRpYyBkZXNlcmlhbGl6ZShEZSxGZSxPZSl7bGV0IEllO2lmKDMhPT1hcmd1bWVudHMubGVuZ3RoJiYoT2U9RmUsRmU9bnVsbCksRi52YWxpZGF0ZShGLmlzRnVuY3Rpb24oT2UpLE9lKSwic3RyaW5nIj09dHlwZW9mIERlKXtpZihJZT1hZShEZSksSWUg''@;'; put 'put ''aW5zdGFuY2VvZiBFcnJvcilyZXR1cm4gT2UoSWUpfWVsc2UgSWU9RGU7Y29uc3QgVmU9bmV3IHZlKEZlLHtyZWplY3RQdWJsaWNTdWZmaXhlczpJZS5yZWplY3RQdWJsaWNTdWZmaXhlcyxsb29zZU1vZGU6SWUuZW5hYmxlTG9vc2VNb2RlLGFsbG93U3BlY2lhbFVzZURvbWFpbjpJZS5hbGxv''@;'; put 'put ''d1NwZWNpYWxVc2VEb21haW4scHJlZml4U2VjdXJpdHk6SWUucHJlZml4U2VjdXJpdHl9KTtWZS5faW1wb3J0Q29va2llcyhJZSxrZT0+e2lmKGtlKXJldHVybiBPZShrZSk7T2UobnVsbCxWZSl9KX1zdGF0aWMgZGVzZXJpYWxpemVTeW5jKERlLEZlKXtjb25zdCBPZT0ic3RyaW5nIj09dHlw''@;'; put 'put ''ZW9mIERlP0pTT04ucGFyc2UoRGUpOkRlLEllPW5ldyB2ZShGZSx7cmVqZWN0UHVibGljU3VmZml4ZXM6T2UucmVqZWN0UHVibGljU3VmZml4ZXMsbG9vc2VNb2RlOk9lLmVuYWJsZUxvb3NlTW9kZX0pO2lmKCFJZS5zdG9yZS5zeW5jaHJvbm91cyl0aHJvdyBuZXcgRXJyb3IoIkNvb2tpZUph''@;'; put 'put ''ciBzdG9yZSBpcyBub3Qgc3luY2hyb25vdXM7IHVzZSBhc3luYyBBUEkgaW5zdGVhZC4iKTtyZXR1cm4gSWUuX2ltcG9ydENvb2tpZXNTeW5jKE9lKSxJZX19ZnVuY3Rpb24gWGUoemUpe3JldHVybiBmdW5jdGlvbiguLi5EZSl7aWYoIXRoaXMuc3RvcmUuc3luY2hyb25vdXMpdGhyb3cgbmV3''@;'; put 'put ''IEVycm9yKCJDb29raWVKYXIgc3RvcmUgaXMgbm90IHN5bmNocm9ub3VzOyB1c2UgYXN5bmMgQVBJIGluc3RlYWQuIik7bGV0IEZlLE9lO2lmKHRoaXNbemVdKC4uLkRlLChJZSxWZSk9PntGZT1JZSxPZT1WZX0pLEZlKXRocm93IEZlO3JldHVybiBPZX19dmUuZnJvbUpTT049dmUuZGVzZXJp''@;'; put 'put ''YWxpemVTeW5jLFsiX2ltcG9ydENvb2tpZXMiLCJjbG9uZSIsImdldENvb2tpZXMiLCJnZXRDb29raWVTdHJpbmciLCJnZXRTZXRDb29raWVTdHJpbmdzIiwicmVtb3ZlQWxsQ29va2llcyIsInNlcmlhbGl6ZSIsInNldENvb2tpZSJdLmZvckVhY2goemU9Pnt2ZS5wcm90b3R5cGVbemVdPXoo''@;'; put 'put ''dmUucHJvdG90eXBlW3plXSl9KSx2ZS5kZXNlcmlhbGl6ZT16KHZlLmRlc2VyaWFsaXplKSxYLnZlcnNpb249TyxYLkNvb2tpZUphcj12ZSxYLkNvb2tpZT1vdCxYLlN0b3JlPUIsWC5NZW1vcnlDb29raWVTdG9yZT13LFgucGFyc2VEYXRlPXAsWC5mb3JtYXREYXRlPWIsWC5wYXJzZT1FLFgu''@;'; put 'put ''ZnJvbUpTT049dGUsWC5kb21haW5NYXRjaD1DLFguZGVmYXVsdFBhdGg9VCxYLnBhdGhNYXRjaD1QLFguZ2V0UHVibGljU3VmZml4PWcuZ2V0UHVibGljU3VmZml4LFguY29va2llQ29tcGFyZT1zZSxYLnBlcm11dGVEb21haW49eSg3MzI0KS5wZXJtdXRlRG9tYWluLFgucGVybXV0ZVBhdGg9''@;'; put 'put ''ZnVuY3Rpb24gd2UoemUpe2lmKEYudmFsaWRhdGUoRi5pc1N0cmluZyh6ZSkpLCIvIj09PXplKXJldHVyblsiLyJdO2NvbnN0IERlPVt6ZV07Zm9yKDt6ZS5sZW5ndGg+MTspe2NvbnN0IEZlPXplLmxhc3RJbmRleE9mKCIvIik7aWYoMD09PUZlKWJyZWFrO3plPXplLnN1YnN0cigwLEZlKSxE''@;'; put 'put ''ZS5wdXNoKHplKX1yZXR1cm4gRGUucHVzaCgiLyIpLERlfSxYLmNhbm9uaWNhbERvbWFpbj14LFguUHJlZml4U2VjdXJpdHlFbnVtPWxlLFguUGFyYW1ldGVyRXJyb3I9Ri5QYXJhbWV0ZXJFcnJvcn0sNTc2MToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdHtmcm9tQ2FsbGJhY2s6X309''@;'; put 'put ''eSg3MDQxKSxnPXkoMjIyNCkueSxCPXkoNzMyNCkucGVybXV0ZURvbWFpbix3PXkoODk3MSkuVSx7Z2V0Q3VzdG9tSW5zcGVjdFN5bWJvbDpQLGdldFV0aWxJbnNwZWN0OkZ9PXkoMTI2OSk7Y2xhc3MgTyBleHRlbmRzIGd7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuc3luY2hyb25vdXM9''@;'; put 'put ''ITAsdGhpcy5pZHg9T2JqZWN0LmNyZWF0ZShudWxsKTtjb25zdCBVPVAoKTtVJiYodGhpc1tVXT10aGlzLmluc3BlY3QpfWluc3BlY3QoKXtyZXR1cm5geyBpZHg6ICR7Rih6KSh0aGlzLmlkeCwhMSwyKX0gfWB9ZmluZENvb2tpZShVLFcsWSxxKXtyZXR1cm4gcShudWxsLHRoaXMuaWR4W1Vd''@;'; put 'put ''JiZ0aGlzLmlkeFtVXVtXXT90aGlzLmlkeFtVXVtXXVtZXXx8bnVsbDp2b2lkIDApfWZpbmRDb29raWVzKFUsVyxZLHEpe2NvbnN0IGVlPVtdO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBZJiYocT1ZLFk9ITApLCFVKXJldHVybiBxKG51bGwsW10pO2xldCBKO0o9Vz9mdW5jdGlvbihtZSl7T2Jq''@;'; put 'put ''ZWN0LmtleXMobWUpLmZvckVhY2goX2U9PntpZih3KFcsX2UpKXtjb25zdCBUZT1tZVtfZV07Zm9yKGNvbnN0IFNlIGluIFRlKWVlLnB1c2goVGVbU2VdKX19KX06ZnVuY3Rpb24obWUpe2Zvcihjb25zdCBfZSBpbiBtZSl7Y29uc3QgVGU9bWVbX2VdO2Zvcihjb25zdCBTZSBpbiBUZSllZS5w''@;'; put 'put ''dXNoKFRlW1NlXSl9fTtjb25zdCBuZT1CKFUsWSl8fFtVXSxpZT10aGlzLmlkeDtuZS5mb3JFYWNoKGxlPT57Y29uc3QgbWU9aWVbbGVdO21lJiZKKG1lKX0pLHEobnVsbCxlZSl9cHV0Q29va2llKFUsVyl7dGhpcy5pZHhbVS5kb21haW5dfHwodGhpcy5pZHhbVS5kb21haW5dPU9iamVjdC5j''@;'; put 'put ''cmVhdGUobnVsbCkpLHRoaXMuaWR4W1UuZG9tYWluXVtVLnBhdGhdfHwodGhpcy5pZHhbVS5kb21haW5dW1UucGF0aF09T2JqZWN0LmNyZWF0ZShudWxsKSksdGhpcy5pZHhbVS5kb21haW5dW1UucGF0aF1bVS5rZXldPVUsVyhudWxsKX11cGRhdGVDb29raWUoVSxXLFkpe3RoaXMucHV0Q29v''@;'; put 'put ''a2llKFcsWSl9cmVtb3ZlQ29va2llKFUsVyxZLHEpe3RoaXMuaWR4W1VdJiZ0aGlzLmlkeFtVXVtXXSYmdGhpcy5pZHhbVV1bV11bWV0mJmRlbGV0ZSB0aGlzLmlkeFtVXVtXXVtZXSxxKG51bGwpfXJlbW92ZUNvb2tpZXMoVSxXLFkpe3JldHVybiB0aGlzLmlkeFtVXSYmKFc/ZGVsZXRlIHRo''@;'; put 'put ''aXMuaWR4W1VdW1ddOmRlbGV0ZSB0aGlzLmlkeFtVXSksWShudWxsKX1yZW1vdmVBbGxDb29raWVzKFUpe3JldHVybiB0aGlzLmlkeD1PYmplY3QuY3JlYXRlKG51bGwpLFUobnVsbCl9Z2V0QWxsQ29va2llcyhVKXtjb25zdCBXPVtdLFk9dGhpcy5pZHg7T2JqZWN0LmtleXMoWSkuZm9yRWFj''@;'; put 'put ''aChlZT0+e09iamVjdC5rZXlzKFlbZWVdKS5mb3JFYWNoKG5lPT57T2JqZWN0LmtleXMoWVtlZV1bbmVdKS5mb3JFYWNoKGxlPT57bnVsbCE9PWxlJiZXLnB1c2goWVtlZV1bbmVdW2xlXSl9KX0pfSksVy5zb3J0KChlZSxKKT0+KGVlLmNyZWF0aW9uSW5kZXh8fDApLShKLmNyZWF0aW9uSW5k''@;'; put 'put ''ZXh8fDApKSxVKG51bGwsVyl9fWZ1bmN0aW9uIHooSyl7Y29uc3QgVT1PYmplY3Qua2V5cyhLKTtpZigwPT09VS5sZW5ndGgpcmV0dXJuIltPYmplY3Q6IG51bGwgcHJvdG90eXBlXSB7fSI7bGV0IFc9IltPYmplY3Q6IG51bGwgcHJvdG90eXBlXSB7XG4iO3JldHVybiBPYmplY3Qua2V5cyhL''@;'; put 'put ''KS5mb3JFYWNoKChZLHEpPT57Vys9ZnVuY3Rpb24gTihLLFUpe2xldCBZPWAgICcke0t9JzogW09iamVjdDogbnVsbCBwcm90b3R5cGVdIHtcbmA7cmV0dXJuIE9iamVjdC5rZXlzKFUpLmZvckVhY2goKHEsZWUsSik9PntZKz1mdW5jdGlvbiBMKEssVSl7Y29uc3QgVz0iICAgICI7bGV0IFk9''@;'; put 'put ''YCR7V30nJHtLfSc6IFtPYmplY3Q6IG51bGwgcHJvdG90eXBlXSB7XG5gO3JldHVybiBPYmplY3Qua2V5cyhVKS5mb3JFYWNoKChxLGVlLEopPT57WSs9YCAgICAgICR7cX06ICR7VVtxXS5pbnNwZWN0KCl9YCxlZTxKLmxlbmd0aC0xJiYoWSs9IiwiKSxZKz0iXG4ifSksWSs9YCR7V319YCxZ''@;'; put 'put ''fShxLFVbcV0pLGVlPEoubGVuZ3RoLTEmJihZKz0iLCIpLFkrPSJcbiJ9KSxZKz0iICB9IixZfShZLEtbWV0pLHE8VS5sZW5ndGgtMSYmKFcrPSIsIiksVys9IlxuIn0pLFcrPSJ9IixXfVsiZmluZENvb2tpZSIsImZpbmRDb29raWVzIiwicHV0Q29va2llIiwidXBkYXRlQ29va2llIiwicmVt''@;'; put 'put ''b3ZlQ29va2llIiwicmVtb3ZlQ29va2llcyIsInJlbW92ZUFsbENvb2tpZXMiLCJnZXRBbGxDb29raWVzIl0uZm9yRWFjaChLPT57Ty5wcm90b3R5cGVbS109XyhPLnByb3RvdHlwZVtLXSl9KSxYLm09T30sODk3MToodWUsWCk9PnsidXNlIHN0cmljdCI7WC5VPWZ1bmN0aW9uIHkoSSxfKXty''@;'; put 'put ''ZXR1cm4gXz09PUl8fDA9PT1JLmluZGV4T2YoXykmJigiLyI9PT1fLnN1YnN0cigtMSl8fCIvIj09PUkuc3Vic3RyKF8ubGVuZ3RoLDEpKX19LDczMjQ6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7Y29uc3QgST15KDc1Mik7WC5wZXJtdXRlRG9tYWluPWZ1bmN0aW9uIF8oZyxCKXtjb25zdCB3''@;'; put 'put ''PUkuZ2V0UHVibGljU3VmZml4KGcse2FsbG93U3BlY2lhbFVzZURvbWFpbjpCfSk7aWYoIXcpcmV0dXJuIG51bGw7aWYodz09ZylyZXR1cm5bZ107Ii4iPT1nLnNsaWNlKC0xKSYmKGc9Zy5zbGljZSgwLC0xKSk7Y29uc3QgRj1nLnNsaWNlKDAsLSh3Lmxlbmd0aCsxKSkuc3BsaXQoIi4iKS5y''@;'; put 'put ''ZXZlcnNlKCk7bGV0IE89dztjb25zdCB6PVtPXTtmb3IoO0YubGVuZ3RoOylPPWAke0Yuc2hpZnQoKX0uJHtPfWAsei5wdXNoKE8pO3JldHVybiB6fX0sNzUyOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO2NvbnN0IEk9eSg4NTY2KSxfPVsibG9jYWwiLCJleGFtcGxlIiwiaW52YWxpZCIsImxv''@;'; put 'put ''Y2FsaG9zdCIsInRlc3QiXSxnPVsibG9jYWxob3N0IiwiaW52YWxpZCJdO1guZ2V0UHVibGljU3VmZml4PWZ1bmN0aW9uIEIodyxQPXt9KXtjb25zdCBGPXcuc3BsaXQoIi4iKSxPPUZbRi5sZW5ndGgtMV0sTj0hIVAuaWdub3JlRXJyb3I7aWYoUC5hbGxvd1NwZWNpYWxVc2VEb21haW4mJl8u''@;'; put 'put ''aW5jbHVkZXMoTykpe2lmKEYubGVuZ3RoPjEpcmV0dXJuYCR7RltGLmxlbmd0aC0yXX0uJHtPfWA7aWYoZy5pbmNsdWRlcyhPKSlyZXR1cm5gJHtPfWB9aWYoIU4mJl8uaW5jbHVkZXMoTykpdGhyb3cgbmV3IEVycm9yKGBDb29raWUgaGFzIGRvbWFpbiBzZXQgdG8gdGhlIHB1YmxpYyBzdWZm''@;'; put 'put ''aXggIiR7T30iIHdoaWNoIGlzIGEgc3BlY2lhbCB1c2UgZG9tYWluLiBUbyBhbGxvdyB0aGlzLCBjb25maWd1cmUgeW91ciBDb29raWVKYXIgd2l0aCB7YWxsb3dTcGVjaWFsVXNlRG9tYWluOnRydWUsIHJlamVjdFB1YmxpY1N1ZmZpeGVzOiBmYWxzZX0uYCk7cmV0dXJuIEkuZ2V0KHcpfX0s''@;'; put 'put ''MjIyNDoodWUsWCk9PnsidXNlIHN0cmljdCI7WC55PWNsYXNzIHl7Y29uc3RydWN0b3IoKXt0aGlzLnN5bmNocm9ub3VzPSExfWZpbmRDb29raWUoXyxnLEIsdyl7dGhyb3cgbmV3IEVycm9yKCJmaW5kQ29va2llIGlzIG5vdCBpbXBsZW1lbnRlZCIpfWZpbmRDb29raWVzKF8sZyxCLHcpe3Ro''@;'; put 'put ''cm93IG5ldyBFcnJvcigiZmluZENvb2tpZXMgaXMgbm90IGltcGxlbWVudGVkIil9cHV0Q29va2llKF8sZyl7dGhyb3cgbmV3IEVycm9yKCJwdXRDb29raWUgaXMgbm90IGltcGxlbWVudGVkIil9dXBkYXRlQ29va2llKF8sZyxCKXt0aHJvdyBuZXcgRXJyb3IoInVwZGF0ZUNvb2tpZSBpcyBu''@;'; put 'put ''b3QgaW1wbGVtZW50ZWQiKX1yZW1vdmVDb29raWUoXyxnLEIsdyl7dGhyb3cgbmV3IEVycm9yKCJyZW1vdmVDb29raWUgaXMgbm90IGltcGxlbWVudGVkIil9cmVtb3ZlQ29va2llcyhfLGcsQil7dGhyb3cgbmV3IEVycm9yKCJyZW1vdmVDb29raWVzIGlzIG5vdCBpbXBsZW1lbnRlZCIpfXJl''@;'; put 'put ''bW92ZUFsbENvb2tpZXMoXyl7dGhyb3cgbmV3IEVycm9yKCJyZW1vdmVBbGxDb29raWVzIGlzIG5vdCBpbXBsZW1lbnRlZCIpfWdldEFsbENvb2tpZXMoXyl7dGhyb3cgbmV3IEVycm9yKCJnZXRBbGxDb29raWVzIGlzIG5vdCBpbXBsZW1lbnRlZCAodGhlcmVmb3JlIGphciBjYW5ub3QgYmUg''@;'; put 'put ''c2VyaWFsaXplZCkiKX19fSwxMjY5Oih1ZSxYLHkpPT57ZnVuY3Rpb24gSSgpe3RyeXtyZXR1cm4geSg5NTM5KX1jYXRjaHtyZXR1cm4gbnVsbH19ZnVuY3Rpb24gXygpe3JldHVybiBTeW1ib2wuZm9yKCJub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbSIpfVguZ2V0VXRpbEluc3BlY3Q9ZnVu''@;'; put 'put ''Y3Rpb24odyxQPXt9KXtjb25zdCBPPShQLnJlcXVpcmVVdGlsfHxJKSgpO3JldHVybiBmdW5jdGlvbihOLEwsSyl7cmV0dXJuIE8/Ty5pbnNwZWN0KE4sTCxLKTp3KE4pfX0sWC5nZXRDdXN0b21JbnNwZWN0U3ltYm9sPWZ1bmN0aW9uKHc9e30pe3JldHVybih3Lmxvb2t1cEN1c3RvbUluc3Bl''@;'; put 'put ''Y3RTeW1ib2x8fF8pKCl8fGZ1bmN0aW9uIGcoQil7Y29uc3QgUD0oQi5yZXF1aXJlVXRpbHx8SSkoKTtyZXR1cm4gUD9QLmluc3BlY3QuY3VzdG9tOm51bGx9KHcpfX0sNzY1MjoodWUsWCk9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24geShOKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgTn1m''@;'; put 'put ''dW5jdGlvbiBCKE4pe3JldHVybiJzdHJpbmciPT10eXBlb2YgTnx8TiBpbnN0YW5jZW9mIFN0cmluZ31mdW5jdGlvbiB3KE4pe3JldHVybiJbb2JqZWN0IE9iamVjdF0iPT09dG9TdHJpbmcuY2FsbChOKX1jbGFzcyB6IGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoLi4uTCl7c3VwZXIoLi4u''@;'; put 'put ''TCl9fVguUGFyYW1ldGVyRXJyb3I9eixYLmlzRnVuY3Rpb249eSxYLmlzTm9uRW1wdHlTdHJpbmc9ZnVuY3Rpb24gSShOKXtyZXR1cm4gQihOKSYmIiIhPT1OfSxYLmlzRGF0ZT1mdW5jdGlvbiBfKE4pe3JldHVybiBmdW5jdGlvbiBQKE4sTCl7dHJ5e3JldHVybiBOIGluc3RhbmNlb2YgTH1j''@;'; put 'put ''YXRjaHtyZXR1cm4hMX19KE4sRGF0ZSkmJmZ1bmN0aW9uIEYoTil7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBOJiZOJTE9PTB9KE4uZ2V0VGltZSgpKX0sWC5pc0VtcHR5U3RyaW5nPWZ1bmN0aW9uIGcoTil7cmV0dXJuIiI9PT1OfHxOIGluc3RhbmNlb2YgU3RyaW5nJiYiIj09PU4udG9TdHJp''@;'; put 'put ''bmcoKX0sWC5pc1N0cmluZz1CLFguaXNPYmplY3Q9dyxYLnZhbGlkYXRlPWZ1bmN0aW9uIE8oTixMLEspe2lmKHkoTCl8fChLPUwsTD1udWxsKSx3KEspfHwoSz17RXJyb3I6IkZhaWxlZCBDaGVjayJ9KSwhTil7aWYoIUwpdGhyb3cgbmV3IHooSyk7TChuZXcgeihLKSl9fX0sNDU2OnVlPT57''@;'; put 'put ''dWUuZXhwb3J0cz0iNC4xLjMifSw3MDQxOih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtYLmZyb21DYWxsYmFjaz1mdW5jdGlvbih5KXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGZ1bmN0aW9uKCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoLTFd''@;'; put 'put ''KXJldHVybiBuZXcgUHJvbWlzZSgoSSxfKT0+e2FyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoXT0oZyxCKT0+e2lmKGcpcmV0dXJuIF8oZyk7SShCKX0sYXJndW1lbnRzLmxlbmd0aCsrLHkuYXBwbHkodGhpcyxhcmd1bWVudHMpfSk7eS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LCJuYW1lIix7''@;'; put 'put ''dmFsdWU6eS5uYW1lfSl9LFguZnJvbVByb21pc2U9ZnVuY3Rpb24oeSl7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmdW5jdGlvbigpe2NvbnN0IEk9YXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGgtMV07aWYoImZ1bmN0aW9uIiE9dHlwZW9mIEkpcmV0dXJuIHkuYXBwbHkodGhpcyxh''@;'; put 'put ''cmd1bWVudHMpO2RlbGV0ZSBhcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aC0xXSxhcmd1bWVudHMubGVuZ3RoLS0seS5hcHBseSh0aGlzLGFyZ3VtZW50cykudGhlbihfPT5JKG51bGwsXyksSSl9LCJuYW1lIix7dmFsdWU6eS5uYW1lfSl9fSw2NzI6ZnVuY3Rpb24odWUsWCx5KXsidXNlIHN0''@;'; put 'put ''cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKHcsUCxGLE8pe3JldHVybiBuZXcoRnx8KEY9UHJvbWlzZSkpKGZ1bmN0aW9uKE4sTCl7ZnVuY3Rpb24gSyhZKXt0cnl7VyhPLm5leHQoWSkpfWNhdGNoKHEpe0wocSl9fWZ1bmN0aW9uIFUoWSl7dHJ5e1coTy50aHJv''@;'; put 'put ''dyhZKSl9Y2F0Y2gocSl7TChxKX19ZnVuY3Rpb24gVyhZKXtZLmRvbmU/TihZLnZhbHVlKTpmdW5jdGlvbiB6KE4pe3JldHVybiBOIGluc3RhbmNlb2YgRj9OOm5ldyBGKGZ1bmN0aW9uKEwpe0woTil9KX0oWS52YWx1ZSkudGhlbihLLFUpfVcoKE89Ty5hcHBseSh3LFB8fFtdKSkubmV4dCgp''@;'; put 'put ''KX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5Db250ZXh0TWFuYWdlcj12b2lkIDA7Y29uc3QgXz15KDU5MjgpLGc9eSg5Nzc4KTtYLkNvbnRleHRNYW5hZ2VyPWNsYXNzIEJ7Z2V0IGdldERlZmF1bHRDb21wdXRlQ29udGV4dHMoKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5kZWZhdWx0Q29tcHV0ZUNvbnRleHRzfWdldCBnZXREZWZhdWx0TGF1bmNoZXJDb250ZXh0cygpe3JldHVybiB0aGlzLmRlZmF1bHRMYXVuY2hlckNvbnRleHRzfWNvbnN0cnVjdG9yKFAsRil7dGhpcy5zZXJ2ZXJVcmw9UCx0aGlzLnJlcXVlc3RDbGllbnQ9Rix0aGlzLmRlZmF1''@;'; put 'put ''bHRDb21wdXRlQ29udGV4dHM9WyJDQVMgRm9ybWF0cyBzZXJ2aWNlIGNvbXB1dGUgY29udGV4dCIsIkRhdGEgTWluaW5nIGNvbXB1dGUgY29udGV4dCIsIkltcG9ydCA5IHNlcnZpY2UgY29tcHV0ZSBjb250ZXh0IiwiU0FTIEpvYiBFeGVjdXRpb24gY29tcHV0ZSBjb250ZXh0IiwiU0FTIE1v''@;'; put 'put ''ZGVsIE1hbmFnZXIgY29tcHV0ZSBjb250ZXh0IiwiU0FTIFN0dWRpbyBjb21wdXRlIGNvbnRleHQiLCJTQVMgVmlzdWFsIEZvcmVjYXN0aW5nIGNvbXB1dGUgY29udGV4dCJdLHRoaXMuZGVmYXVsdExhdW5jaGVyQ29udGV4dHM9WyJDQVMgRm9ybWF0cyBzZXJ2aWNlIGxhdW5jaGVyIGNvbnRl''@;'; put 'put ''eHQiLCJEYXRhIE1pbmluZyBsYXVuY2hlciBjb250ZXh0IiwiSW1wb3J0IDkgc2VydmljZSBsYXVuY2hlciBjb250ZXh0IiwiSm9iIEZsb3cgRXhlY3V0aW9uIGxhdW5jaGVyIGNvbnRleHQiLCJTQVMgSm9iIEV4ZWN1dGlvbiBsYXVuY2hlciBjb250ZXh0IiwiU0FTIE1vZGVsIE1hbmFnZXIg''@;'; put 'put ''bGF1bmNoZXIgY29udGV4dCIsIlNBUyBTdHVkaW8gbGF1bmNoZXIgY29udGV4dCIsIlNBUyBWaXN1YWwgRm9yZWNhc3RpbmcgbGF1bmNoZXIgY29udGV4dCJdLFAmJigwLF8uaXNVcmwpKFApfWdldENvbXB1dGVDb250ZXh0cyhQKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rp''@;'; put 'put ''b24qKCl7Y29uc3R7cmVzdWx0OkZ9PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5nZXQoYCR7dGhpcy5zZXJ2ZXJVcmx9L2NvbXB1dGUvY29udGV4dHM/bGltaXQ9MTAwMDBgLFApLmNhdGNoKHo9Pnt0aHJvdygwLGcucHJlZml4TWVzc2FnZSkoeiwiRXJyb3Igd2hpbGUgZ2V0dGluZyBjb21w''@;'; put 'put ''dXRlIGNvbnRleHRzLiAiKX0pO3JldHVybihGJiZGLml0ZW1zP0YuaXRlbXM6W10pLm1hcCh6PT4oe2NyZWF0ZWRCeTp6LmNyZWF0ZWRCeSxpZDp6LmlkLG5hbWU6ei5uYW1lLHZlcnNpb246ei52ZXJzaW9uLGF0dHJpYnV0ZXM6e319KSl9KX1nZXRMYXVuY2hlckNvbnRleHRzKFApe3JldHVy''@;'; put 'put ''biBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdHtyZXN1bHQ6Rn09eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmdldChgJHt0aGlzLnNlcnZlclVybH0vbGF1bmNoZXIvY29udGV4dHM/bGltaXQ9MTAwMDBgLFApLmNhdGNoKHo9Pnt0aHJvdygwLGcucHJlZml4TWVzc2Fn''@;'; put 'put ''ZSkoeiwiRXJyb3Igd2hpbGUgZ2V0dGluZyBsYXVuY2hlciBjb250ZXh0cy4gIil9KTtyZXR1cm4oRiYmRi5pdGVtcz9GLml0ZW1zOltdKS5tYXAoej0+KHtjcmVhdGVkQnk6ei5jcmVhdGVkQnksaWQ6ei5pZCxuYW1lOnoubmFtZSx2ZXJzaW9uOnoudmVyc2lvbixhdHRyaWJ1dGVzOnt9fSkp''@;'; put 'put ''fSl9Y3JlYXRlQ29tcHV0ZUNvbnRleHQoUCxGLE8seixOLEwpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtpZih0aGlzLnZhbGlkYXRlQ29udGV4dE5hbWUoUCksdGhpcy5pc0RlZmF1bHRDb250ZXh0KFAsdGhpcy5kZWZhdWx0Q29tcHV0ZUNvbnRleHRzLGBDb21w''@;'; put 'put ''dXRlIGNvbnRleHQgJyR7UH0nIGFscmVhZHkgZXhpc3RzLmApLCh5aWVsZCB0aGlzLmdldENvbXB1dGVDb250ZXh0cyhOKSkuZmluZChlZT0+ZWUubmFtZT09PVApKXRocm93IG5ldyBFcnJvcihgQ29tcHV0ZSBjb250ZXh0ICcke1B9JyBhbHJlYWR5IGV4aXN0cy5gKTtpZihGJiYhdGhpcy5k''@;'; put 'put ''ZWZhdWx0TGF1bmNoZXJDb250ZXh0cy5pbmNsdWRlcyhGKSYmISh5aWVsZCB0aGlzLmdldExhdW5jaGVyQ29udGV4dHMoTikpLmZpbmQoSj0+Si5uYW1lPT09Rikpe2NvbnN0IEo9YFRoZSBsYXVuY2hlciBjb250ZXh0IGZvciAke0Z9YCxpZT15aWVsZCB0aGlzLmNyZWF0ZUxhdW5jaGVyQ29u''@;'; put 'put ''dGV4dChGLEosImRpcmVjdCIsTikuY2F0Y2gobGU9Pnt0aHJvdyBuZXcgRXJyb3IoYEVycm9yIHdoaWxlIGNyZWF0aW5nIGxhdW5jaGVyIGNvbnRleHQuICR7bGV9YCl9KTtpZighaWV8fCFpZS5uYW1lKXRocm93IG5ldyBFcnJvcigiRXJyb3Igd2hpbGUgY3JlYXRpbmcgbGF1bmNoZXIgY29u''@;'; put 'put ''dGV4dC4iKTtGPWllLm5hbWV9bGV0IFc9e3JldXNlU2VydmVyUHJvY2Vzc2VzOiEwfTtPJiYoVz1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sVykse3J1blNlcnZlckFzOk99KSk7Y29uc3QgWT17bmFtZTpQLGxhdW5jaENvbnRleHQ6e2NvbnRleHROYW1lOkZ8fCIifSxhdHRyaWJ1''@;'; put 'put ''dGVzOld9O0wmJkwubGVuZ3RoP1kuYXV0aG9yaXplZFVzZXJzPUw6WS5hdXRob3JpemVBbGxBdXRoZW50aWNhdGVkVXNlcnM9ITAseiYmKFkuZW52aXJvbm1lbnQ9e2F1dG9FeGVjTGluZXM6en0pO2NvbnN0e3Jlc3VsdDpxfT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQucG9zdChgJHt0aGlz''@;'; put 'put ''LnNlcnZlclVybH0vY29tcHV0ZS9jb250ZXh0c2AsWSxOKS5jYXRjaChlZT0+e3Rocm93KDAsZy5wcmVmaXhNZXNzYWdlKShlZSwiRXJyb3Igd2hpbGUgY3JlYXRpbmcgY29tcHV0ZSBjb250ZXh0LiAiKX0pO3JldHVybiBxfSl9Y3JlYXRlTGF1bmNoZXJDb250ZXh0KFAsRixPPSJkaXJlY3Qi''@;'; put 'put ''LHope3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtpZighUCl0aHJvdyBuZXcgRXJyb3IoIkNvbnRleHQgbmFtZSBpcyByZXF1aXJlZC4iKTtpZih0aGlzLmlzRGVmYXVsdENvbnRleHQoUCx0aGlzLmRlZmF1bHRMYXVuY2hlckNvbnRleHRzLGBMYXVuY2hlciBjb250''@;'; put 'put ''ZXh0ICcke1B9JyBhbHJlYWR5IGV4aXN0cy5gKSwoeWllbGQgdGhpcy5nZXRMYXVuY2hlckNvbnRleHRzKHopKS5maW5kKFc9PlcubmFtZT09PVApKXRocm93IG5ldyBFcnJvcihgTGF1bmNoZXIgY29udGV4dCAnJHtQfScgYWxyZWFkeSBleGlzdHMuYCk7Y29uc3QgSz17bmFtZTpQLGRlc2Ny''@;'; put 'put ''aXB0aW9uOkYsbGF1bmNoVHlwZTpPfSx7cmVzdWx0OlV9PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5wb3N0KGAke3RoaXMuc2VydmVyVXJsfS9sYXVuY2hlci9jb250ZXh0c2AsSyx6KS5jYXRjaChXPT57dGhyb3coMCxnLnByZWZpeE1lc3NhZ2UpKFcsIkVycm9yIHdoaWxlIGNyZWF0aW5n''@;'; put 'put ''IGxhdW5jaGVyIGNvbnRleHQuICIpfSk7cmV0dXJuIFV9KX1lZGl0Q29tcHV0ZUNvbnRleHQoUCxGLE8pe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtsZXQgejt0aGlzLnZhbGlkYXRlQ29udGV4dE5hbWUoUCksdGhpcy5pc0RlZmF1bHRDb250ZXh0KFAsdGhpcy5k''@;'; put 'put ''ZWZhdWx0Q29tcHV0ZUNvbnRleHRzLCJFZGl0aW5nIGRlZmF1bHQgU0FTIGNvbXB1dGUgY29udGV4dHMgaXMgbm90IGFsbG93ZWQuIiwhMCksej15aWVsZCB0aGlzLmdldENvbXB1dGVDb250ZXh0QnlOYW1lKFAsTyksenx8KHo9eWllbGQgdGhpcy5nZXRDb21wdXRlQ29udGV4dEJ5SWQoRi5p''@;'; put 'put ''ZCxPKSk7Y29uc3R7cmVzdWx0Ok4sZXRhZzpMfT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KGAke3RoaXMuc2VydmVyVXJsfS9jb21wdXRlL2NvbnRleHRzLyR7ei5pZH1gLE8pLmNhdGNoKEs9Pnt0aHJvdyBLJiY0MDQ9PT1LLnN0YXR1cz9uZXcgRXJyb3IoYFRoZSBjb250ZXh0ICck''@;'; put 'put ''e1B9JyB3YXMgbm90IGZvdW5kIG9uIHRoaXMgc2VydmVyLmApOkt9KTtyZXR1cm4geWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LnB1dChgL2NvbXB1dGUvY29udGV4dHMvJHtOLmlkfWAsT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sTiksRikse2F0dHJpYnV0''@;'; put 'put ''ZXM6T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LE4uYXR0cmlidXRlcyksRi5hdHRyaWJ1dGVzKX0pLE8seyJJZi1NYXRjaCI6TH0pfSl9Z2V0Q29tcHV0ZUNvbnRleHRCeU5hbWUoUCxGKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3R7cmVzdWx0''@;'; put 'put ''Ok99PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5nZXQoYCR7dGhpcy5zZXJ2ZXJVcmx9L2NvbXB1dGUvY29udGV4dHM/ZmlsdGVyPWVxKG5hbWUsICIke1B9IilgLEYpLmNhdGNoKHo9Pnt0aHJvdygwLGcucHJlZml4TWVzc2FnZSkoeiwiRXJyb3Igd2hpbGUgZ2V0dGluZyBjb21wdXRlIGNv''@;'; put 'put ''bnRleHQgYnkgbmFtZS4gIil9KTtpZighT3x8IU8uaXRlbXN8fCFPLml0ZW1zLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoYFRoZSBjb250ZXh0ICcke1B9JyB3YXMgbm90IGZvdW5kIGF0ICcke3RoaXMuc2VydmVyVXJsfScuYCk7cmV0dXJuIE8uaXRlbXNbMF19KX1nZXRDb21wdXRlQ29udGV4''@;'; put 'put ''dEJ5SWQoUCxGKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3R7cmVzdWx0Ok99PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5nZXQoYCR7dGhpcy5zZXJ2ZXJVcmx9L2NvbXB1dGUvY29udGV4dHMvJHtQfWAsRikuY2F0Y2goej0+e3Rocm93KDAsZy5wcmVm''@;'; put 'put ''aXhNZXNzYWdlKSh6LCJFcnJvciB3aGlsZSBnZXR0aW5nIGNvbXB1dGUgY29udGV4dCBieSBpZC4gIil9KTtyZXR1cm4gT30pfWdldEV4ZWN1dGFibGVDb250ZXh0cyhQLEYpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdHtyZXN1bHQ6T309eWllbGQgdGhp''@;'; put 'put ''cy5yZXF1ZXN0Q2xpZW50LmdldChgJHt0aGlzLnNlcnZlclVybH0vY29tcHV0ZS9jb250ZXh0cz9saW1pdD0xMDAwMGAsRj8uYWNjZXNzX3Rva2VuKS5jYXRjaChVPT57dGhyb3coMCxnLnByZWZpeE1lc3NhZ2UpKFUsIkVycm9yIHdoaWxlIGZldGNoaW5nIGNvbXB1dGUgY29udGV4dHMuIil9''@;'; put 'put ''KSx6PU8uaXRlbXN8fFtdLE49W10sTD16Lm1hcChVPT57Y29uc3QgVz1bIiVwdXQgJj1zeXN1c2VyaWQ7Il07cmV0dXJuKCk9PlAoYHRlc3QtJHtVLm5hbWV9YCxXLFUubmFtZSxGLG51bGwsITEsITAsITApLmNhdGNoKFk9PlkpfSk7bGV0IEs9W107Zm9yKGNvbnN0IFUgb2YgTClLLnB1c2go''@;'; put 'put ''eWllbGQgVSgpKTtyZXR1cm4gSy5mb3JFYWNoKChVLFcpPT57aWYoVSYmVS5sb2cpdHJ5e2xldCBxPSIiO2NvbnN0IGVlPVUubG9nLnNwbGl0KCJcbiIpLmZpbmQoSj0+Si5zdGFydHNXaXRoKCJTWVNVU0VSSUQ9IikpO2VlJiYocT1lZS5yZXBsYWNlKCJTWVNVU0VSSUQ9IiwiIiksTi5wdXNo''@;'; put 'put ''KHtjcmVhdGVkQnk6eltXXS5jcmVhdGVkQnksaWQ6eltXXS5pZCxuYW1lOnpbV10ubmFtZSx2ZXJzaW9uOnpbV10udmVyc2lvbixhdHRyaWJ1dGVzOntzeXNVc2VySWQ6cX19KSl9Y2F0Y2goWSl7dGhyb3cgWX19KSxOfSl9ZGVsZXRlQ29tcHV0ZUNvbnRleHQoUCxGKXtyZXR1cm4gSSh0aGlz''@;'; put 'put ''LHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7dGhpcy52YWxpZGF0ZUNvbnRleHROYW1lKFApLHRoaXMuaXNEZWZhdWx0Q29udGV4dChQLHRoaXMuZGVmYXVsdENvbXB1dGVDb250ZXh0cywiRGVsZXRpbmcgZGVmYXVsdCBTQVMgY29tcHV0ZSBjb250ZXh0cyBpcyBub3QgYWxsb3dlZC4iLCEw''@;'; put 'put ''KTtjb25zdCB6PXlpZWxkIHRoaXMuZ2V0Q29tcHV0ZUNvbnRleHRCeU5hbWUoUCxGKTtyZXR1cm4geWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmRlbGV0ZShgJHt0aGlzLnNlcnZlclVybH0vY29tcHV0ZS9jb250ZXh0cy8ke3ouaWR9YCxGKX0pfXZhbGlkYXRlQ29udGV4dE5hbWUoUCl7aWYo''@;'; put 'put ''IVApdGhyb3cgbmV3IEVycm9yKCJDb250ZXh0IG5hbWUgaXMgcmVxdWlyZWQuIil9aXNEZWZhdWx0Q29udGV4dChQLEY9dGhpcy5kZWZhdWx0Q29tcHV0ZUNvbnRleHRzLE89IiIsej0hMSl7aWYoRi5pbmNsdWRlcyhQKSl0aHJvdyBuZXcgRXJyb3IoYCR7T30ke3o/IlxuRGVmYXVsdCBjb250''@;'; put 'put ''ZXh0czoiK0YubWFwKChOLEwpPT5gXG4ke0wrMX0uICR7Tn1gKToiIn1gKX19fSw4MzA2OmZ1bmN0aW9uKHVlLFgseSl7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbih6LE4sTCxLKXtyZXR1cm4gbmV3KEx8fChMPVByb21pc2UpKShmdW5jdGlvbihX''@;'; put 'put ''LFkpe2Z1bmN0aW9uIHEobmUpe3RyeXtKKEsubmV4dChuZSkpfWNhdGNoKGllKXtZKGllKX19ZnVuY3Rpb24gZWUobmUpe3RyeXtKKEsudGhyb3cobmUpKX1jYXRjaChpZSl7WShpZSl9fWZ1bmN0aW9uIEoobmUpe25lLmRvbmU/VyhuZS52YWx1ZSk6ZnVuY3Rpb24gVShXKXtyZXR1cm4gVyBp''@;'; put 'put ''bnN0YW5jZW9mIEw/VzpuZXcgTChmdW5jdGlvbihZKXtZKFcpfSl9KG5lLnZhbHVlKS50aGVuKHEsZWUpfUooKEs9Sy5hcHBseSh6LE58fFtdKSkubmV4dCgpKX0pfSxfPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbih6KXtyZXR1cm4geiYmei5fX2VzTW9kdWxlP3o6e2Rl''@;'; put 'put ''ZmF1bHQ6en19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLlNBUzlBcGlDbGllbnQ9dm9pZCAwO2NvbnN0IGc9eSg3NzU3KSxCPV8oeSg2MjMwKSksdz15KDc5NSksUD15KDU5MjgpO1guU0FTOUFwaUNsaWVudD1jbGFzcyBGe2NvbnN0cnVjdG9y''@;'; put 'put ''KE4sTCxLKXt0aGlzLnNlcnZlclVybD1OLHRoaXMuam9ic1BhdGg9TCxOJiYoMCxQLmlzVXJsKShOKSx0aGlzLnJlcXVlc3RDbGllbnQ9bmV3IHcuU2FzOVJlcXVlc3RDbGllbnQoTixLKX1nZXRDb25maWcoKXtyZXR1cm57c2VydmVyVXJsOnRoaXMuc2VydmVyVXJsfX1zZXRDb25maWcoTil7''@;'; put 'put ''TiYmKHRoaXMuc2VydmVyVXJsPU4pfWV4ZWN1dGVTY3JpcHQoTixMLEspe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXt5aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQubG9naW4oTCxLLHRoaXMuam9ic1BhdGgpO2NvbnN0IFc9TyhbLi4uTiwiZGF0YSBfbnVsbF87Iiwi''@;'; put 'put ''ZmlsZSBfd2Vib3V0OyIsInB1dCAnRXhlY3V0ZWQgc2FzanMgcnVuJzsiLCJydW47Il0uam9pbigiXG4iKSksWT1gL1VzZXIgRm9sZGVycy8ke0x9L015IEZvbGRlci9zYXNqcy9ydW5uZXJgLHE9Im11bHRpcGFydC9mb3JtLWRhdGE7IGJvdW5kYXJ5PSIrVy5nZXRCb3VuZGFyeSgpLEo9eyJj''@;'; put 'put ''YWNoZS1jb250cm9sIjoibm8tY2FjaGUiLEFjY2VwdDoiKi8qIiwiQ29udGVudC1UeXBlIjpxLCJDb250ZW50LUxlbmd0aCI6Vy5nZXRMZW5ndGhTeW5jKCksQ29ubmVjdGlvbjoia2VlcC1hbGl2ZSJ9LG5lPWAke3RoaXMuam9ic1BhdGh9Lz8keyJfcHJvZ3JhbT0iK1krIiZfZGVidWc9bG9n''@;'; put 'put ''In1gO3JldHVybih5aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQucG9zdChuZSxXLHZvaWQgMCxxLEopKS5yZXN1bHR9KX19O2NvbnN0IE89ej0+e2NvbnN0IE49bmV3IEIuZGVmYXVsdCxMPWBzYXNqcy1leGVjdXRlLXNhczktJHsoMCxnLmdlbmVyYXRlVGltZXN0YW1wKSgiIil9LnNhc2A7cmV0''@;'; put 'put ''dXJuIE4uYXBwZW5kKEwseix7ZmlsZW5hbWU6TCxjb250ZW50VHlwZToidGV4dC9wbGFpbiJ9KSxOfX0sOTgyMTpmdW5jdGlvbih1ZSxYLHkpeyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDQxNTUpLF89eSg1MTA4KSxnPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihuZSxpZSxsZSxtZSl7''@;'; put 'put ''cmV0dXJuIG5ldyhsZXx8KGxlPVByb21pc2UpKShmdW5jdGlvbihUZSxTZSl7ZnVuY3Rpb24gamUoYil7dHJ5e3AobWUubmV4dChiKSl9Y2F0Y2goeCl7U2UoeCl9fWZ1bmN0aW9uIFYoYil7dHJ5e3AobWUudGhyb3coYikpfWNhdGNoKHgpe1NlKHgpfX1mdW5jdGlvbiBwKGIpe2IuZG9uZT9U''@;'; put 'put ''ZShiLnZhbHVlKTpmdW5jdGlvbiBfZShUZSl7cmV0dXJuIFRlIGluc3RhbmNlb2YgbGU/VGU6bmV3IGxlKGZ1bmN0aW9uKFNlKXtTZShUZSl9KX0oYi52YWx1ZSkudGhlbihqZSxWKX1wKChtZT1tZS5hcHBseShuZSxpZXx8W10pKS5uZXh0KCkpfSl9LEI9dGhpcyYmdGhpcy5fX2ltcG9ydERl''@;'; put 'put ''ZmF1bHR8fGZ1bmN0aW9uKG5lKXtyZXR1cm4gbmUmJm5lLl9fZXNNb2R1bGU/bmU6e2RlZmF1bHQ6bmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5TQVNWaXlhQXBpQ2xpZW50PXZvaWQgMDtjb25zdCB3PXkoNTkyOCksUD1CKHkoNjIzMCkp''@;'; put 'put ''LEY9eSgxMzk1KSxPPXkoNjkwMyksej15KDY3MiksTj15KDkwOTcpLEw9eSg5Nzc4KSxLPXkoMTM0MyksVT15KDcwNCksVz15KDY0OTYpLFk9eSgxNjIyKSxxPXkoMzU2OSksZWU9eSgzNjYpO1guU0FTVml5YUFwaUNsaWVudD1jbGFzcyBKe2NvbnN0cnVjdG9yKGllLGxlLG1lLF9lKXt0aGlz''@;'; put 'put ''LnNlcnZlclVybD1pZSx0aGlzLnJvb3RGb2xkZXJOYW1lPWxlLHRoaXMuY29udGV4dE5hbWU9bWUsdGhpcy5yZXF1ZXN0Q2xpZW50PV9lLHRoaXMuX2RlYnVnPSExLHRoaXMuc2Vzc2lvbk1hbmFnZXI9bmV3IE8uU2Vzc2lvbk1hbmFnZXIodGhpcy5zZXJ2ZXJVcmwsdGhpcy5jb250ZXh0TmFt''@;'; put 'put ''ZSx0aGlzLnJlcXVlc3RDbGllbnQpLHRoaXMuY29udGV4dE1hbmFnZXI9bmV3IHouQ29udGV4dE1hbmFnZXIodGhpcy5zZXJ2ZXJVcmwsdGhpcy5yZXF1ZXN0Q2xpZW50KSx0aGlzLmZvbGRlck1hcD1uZXcgTWFwLGllJiYoMCx3LmlzVXJsKShpZSl9YXBwZW5kUmVxdWVzdChpZSxsZSxtZSl7''@;'; put 'put ''dGhpcy5yZXF1ZXN0Q2xpZW50LmFwcGVuZFJlcXVlc3QoaWUsbGUsbWUpfWdldCBkZWJ1Zygpe3JldHVybiB0aGlzLl9kZWJ1Z31zZXQgZGVidWcoaWUpe3RoaXMuX2RlYnVnPWllLHRoaXMuc2Vzc2lvbk1hbmFnZXImJih0aGlzLnNlc3Npb25NYW5hZ2VyLmRlYnVnPWllKX1nZXRKb2JzSW5G''@;'; put 'put ''b2xkZXIoaWUpe3JldHVybiBnKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBsZT0oMCx3LmlzUmVsYXRpdmVQYXRoKShpZSk/YCR7dGhpcy5yb290Rm9sZGVyTmFtZX0vJHtpZX1gOmllO3JldHVybiB0aGlzLmZvbGRlck1hcC5nZXQobGUpfHwoeWllbGQgdGhpcy5wb3B1''@;'; put 'put ''bGF0ZUZvbGRlck1hcChsZSkpLHRoaXMuZm9sZGVyTWFwLmdldChsZSl9KX1nZXRDb25maWcoKXtyZXR1cm57c2VydmVyVXJsOnRoaXMuc2VydmVyVXJsLHJvb3RGb2xkZXJOYW1lOnRoaXMucm9vdEZvbGRlck5hbWV9fXNldENvbmZpZyhpZSxsZSl7aWUmJih0aGlzLnNlcnZlclVybD1pZSks''@;'; put 'put ''bGUmJih0aGlzLnJvb3RGb2xkZXJOYW1lPWxlKX1nZXRDb21wdXRlQ29udGV4dHMoaWUpe3JldHVybiBnKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5jb250ZXh0TWFuYWdlci5nZXRDb21wdXRlQ29udGV4dHMoaWUpfSl9Z2V0RGVmYXVsdENvbXB1''@;'; put 'put ''dGVDb250ZXh0cygpe3JldHVybiB0aGlzLmNvbnRleHRNYW5hZ2VyLmdldERlZmF1bHRDb21wdXRlQ29udGV4dHN9Z2V0TGF1bmNoZXJDb250ZXh0cyhpZSl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLmNvbnRleHRNYW5hZ2VyLmdl''@;'; put 'put ''dExhdW5jaGVyQ29udGV4dHMoaWUpfSl9Z2V0RXhlY3V0YWJsZUNvbnRleHRzKGllKXtyZXR1cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgbGU9dGhpcy5leGVjdXRlU2NyaXB0LmJpbmQodGhpcyk7cmV0dXJuIHlpZWxkIHRoaXMuY29udGV4dE1hbmFnZXIuZ2V0''@;'; put 'put ''RXhlY3V0YWJsZUNvbnRleHRzKGxlLGllKX0pfWNyZWF0ZVNlc3Npb24oaWUsbGUpe3JldHVybiBnKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdHtyZXN1bHQ6X2V9PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5nZXQoIi9jb21wdXRlL2NvbnRleHRzP2xpbWl0PTEwMDAw''@;'; put 'put ''IixsZSksVGU9X2UuaXRlbXMmJl9lLml0ZW1zLmxlbmd0aD9fZS5pdGVtcy5maW5kKGplPT5qZS5uYW1lPT09aWUpOm51bGw7aWYoIVRlKXRocm93IG5ldyBFcnJvcihgRXhlY3V0aW9uIGNvbnRleHQgJHtpZX0gbm90IGZvdW5kLmApO2NvbnN0e3Jlc3VsdDpTZX09eWllbGQgdGhpcy5yZXF1''@;'; put 'put ''ZXN0Q2xpZW50LnBvc3QoYC9jb21wdXRlL2NvbnRleHRzLyR7VGUuaWR9L3Nlc3Npb25zYCx7fSxsZSk7cmV0dXJuIFNlfSl9Y3JlYXRlQ29tcHV0ZUNvbnRleHQoaWUsbGUsbWUsX2UsVGUsU2Upe3JldHVybiBnKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4geWllbGQg''@;'; put 'put ''dGhpcy5jb250ZXh0TWFuYWdlci5jcmVhdGVDb21wdXRlQ29udGV4dChpZSxsZSxtZSxfZSxUZSxTZSl9KX1jcmVhdGVMYXVuY2hlckNvbnRleHQoaWUsbGUsbWU9ImRpcmVjdCIsX2Upe3JldHVybiBnKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5j''@;'; put 'put ''b250ZXh0TWFuYWdlci5jcmVhdGVMYXVuY2hlckNvbnRleHQoaWUsbGUsbWUsX2UpfSl9ZWRpdENvbXB1dGVDb250ZXh0KGllLGxlLG1lKXtyZXR1cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuY29udGV4dE1hbmFnZXIuZWRpdENvbXB1dGVD''@;'; put 'put ''b250ZXh0KGllLGxlLG1lKX0pfWRlbGV0ZUNvbXB1dGVDb250ZXh0KGllLGxlKXtyZXR1cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuY29udGV4dE1hbmFnZXIuZGVsZXRlQ29tcHV0ZUNvbnRleHQoaWUsbGUpfSl9ZXhlY3V0ZVNjcmlwdChp''@;'; put 'put ''ZSxsZSxtZSxfZSxUZT1udWxsLFNlPSExLGplPSExLFY9ITAscCxiPSExLHgpe3JldHVybiBnKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4oMCxZLmV4ZWN1dGVPbkNvbXB1dGVBcGkpKHRoaXMucmVxdWVzdENsaWVudCx0aGlzLnNlc3Npb25NYW5hZ2VyLHRoaXMucm9v''@;'; put 'put ''dEZvbGRlck5hbWUsaWUsbGUsbWUsX2UsVGUsU2UsamUsVixwLGIseCl9KX1nZXRGaWxlQ29udGVudChpZSxsZSxtZSl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IF9lPXlpZWxkIHRoaXMuZ2V0RmlsZVVyaShpZSxsZSxtZSkuY2F0Y2goVGU9Pnt0aHJv''@;'; put 'put ''dygwLEwucHJlZml4TWVzc2FnZSkoVGUsYEVycm9yIHdoaWxlIGdldHRpbmcgZmlsZSBVUkkgZm9yOiAke2xlfSBpbiBmb2xkZXI6ICR7aWV9LiBgKX0pO3JldHVybiB5aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KGAke3RoaXMuc2VydmVyVXJsfSR7X2V9L2NvbnRlbnRgLG1lKS50aGVu''@;'; put 'put ''KFRlPT5UZS5yZXN1bHQpfSl9dXBkYXRlRmlsZUNvbnRlbnQoaWUsbGUsbWUsX2Upe3JldHVybiBnKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBUZT15aWVsZCB0aGlzLmdldEZpbGVVcmkoaWUsbGUsX2UpLmNhdGNoKFY9Pnt0aHJvdygwLEwucHJlZml4TWVzc2FnZSko''@;'; put 'put ''VixgRXJyb3Igd2hpbGUgZ2V0dGluZyBmaWxlIFVSSSBmb3I6ICR7bGV9IGluIGZvbGRlcjogJHtpZX0uIGApfSkse3Jlc3VsdDpTZSxldGFnOmplfT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KGAke3RoaXMuc2VydmVyVXJsfSR7VGV9YCxfZSk7aWYoIVNlfHwhamUpdGhyb3cgbmV3''@;'; put 'put ''IEVycm9yKGBGaWxlICR7bGV9IGRvZXMgbm90IGhhdmUgYW4gRVRhZywgb3IgcmVxdWVzdCBmYWlsZWQuYCk7cmV0dXJuIHlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5wdXQoYCR7dGhpcy5zZXJ2ZXJVcmx9JHtUZX0vY29udGVudGAsbWUsX2UseyJJZi1NYXRjaCI6amUsIkNvbnRlbnQtVHlw''@;'; put 'put ''ZSI6U2UuY29udGVudFR5cGV9KS50aGVuKFY9PlYucmVzdWx0KX0pfWdldEZvbGRlcihpZSxsZSl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KGAvZm9sZGVycy9mb2xkZXJzL0BpdGVtP3BhdGg9JHtp''@;'; put 'put ''ZX1gLGxlKS50aGVuKG1lPT5tZS5yZXN1bHQpfSl9Y3JlYXRlRmlsZShpZSxsZSxtZSxfZSxUZSl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2lmKCFtZSYmIV9lKXRocm93IG5ldyBFcnJvcigiUGF0aCBvciBVUkkgb2YgdGhlIHBhcmVudCBmb2xkZXIgaXMgcmVx''@;'; put 'put ''dWlyZWQuIik7IV9lJiZtZSYmKF9lPXlpZWxkIHRoaXMuZ2V0Rm9sZGVyVXJpKG1lLFRlKSk7Y29uc3QgU2U9e0FjY2VwdDoiYXBwbGljYXRpb24vdm5kLnNhcy5maWxlK2pzb24iLCJDb250ZW50LURpc3Bvc2l0aW9uIjpgZmlsZW5hbWU9IiR7aWV9IjtgfSxqZT1uZXcgUC5kZWZhdWx0O3Jl''@;'; put 'put ''dHVybiBqZS5hcHBlbmQoImZpbGUiLGxlLGllKSwoeWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QoYC9maWxlcy9maWxlcz9wYXJlbnRGb2xkZXJVcmk9JHtfZX0mdHlwZURlZk5hbWU9ZmlsZSNyYXdVcGxvYWRgLGplLFRlLCJtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0iK2pl''@;'; put 'put ''Ll9ib3VuZGFyeSxTZSkpLnJlc3VsdH0pfWNyZWF0ZUZvbGRlcihpZSxsZSxtZSxfZSxUZSl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IFNlPUkubG9nZ2VyfHxfO2lmKCFsZSYmIW1lKXRocm93IG5ldyBFcnJvcigiUGF0aCBvciBVUkkgb2YgdGhlIHBh''@;'; put 'put ''cmVudCBmb2xkZXIgaXMgcmVxdWlyZWQuIik7aWYoIW1lJiZsZSlpZihtZT15aWVsZCB0aGlzLmdldEZvbGRlclVyaShsZSxfZSkpe2lmKFRlKXtjb25zdCBWPWxlKyIvIitpZTsoeWllbGQgdGhpcy5nZXRGb2xkZXJVcmkoVixfZSkpJiYoeWllbGQgdGhpcy5kZWxldGVGb2xkZXIobGUrIi8i''@;'; put 'put ''K2llLF9lKSl9fWVsc2V7U2UuaW5mbyhgUGFyZW50IGZvbGRlciBhdCBwYXRoICcke2xlfScgaXMgbm90IHByZXNlbnQuYCk7Y29uc3QgVj1sZS5zdWJzdHJpbmcoMCxsZS5sYXN0SW5kZXhPZigiLyIpKSxwPWAke2xlLnNwbGl0KCIvIikucG9wKCl9YDtpZigiIj09PVYpdGhyb3cgbmV3IEYu''@;'; put 'put ''Um9vdEZvbGRlck5vdEZvdW5kRXJyb3IobGUsdGhpcy5zZXJ2ZXJVcmwsX2UpO1NlLmluZm8oYENyZWF0aW5nIHBhcmVudCBmb2xkZXI6XG4nJHtwfScgaW4gJyR7Vn0nYCk7Y29uc3QgYj15aWVsZCB0aGlzLmNyZWF0ZUZvbGRlcihwLFYsdm9pZCAwLF9lKTtTZS5pbmZvKGBQYXJlbnQgZm9s''@;'; put 'put ''ZGVyICcke3B9JyBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgY3JlYXRlZC5gKSxtZT1gL2ZvbGRlcnMvZm9sZGVycy8ke2IuaWR9YH1jb25zdHtyZXN1bHQ6amV9PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5wb3N0KGAvZm9sZGVycy9mb2xkZXJzP3BhcmVudEZvbGRlclVyaT0ke21lfWAse25h''@;'; put 'put ''bWU6aWUsdHlwZToiZm9sZGVyIn0sX2UpLmNhdGNoKFY9Pntjb25zdHttZXNzYWdlOnAscmVzcG9uc2U6Yn09VjtpZihwJiZiJiZiLmRhdGEmJmIuZGF0YS5tZXNzYWdlKXtjb25zdHtzdGF0dXM6eH09Yix7bWVzc2FnZTpDfT1iLmRhdGEsVD1bcCxDXS5tYXAoaj0+L1wuJC8udGVzdChqKT9q''@;'; put 'put ''OmAke2p9LmApO3Rocm93IVRlJiY0MDk9PT14JiZULnB1c2goJ1RvIG92ZXJyaWRlLCBwbGVhc2Ugc2V0ICJpc0ZvcmNlZCIgdG8gInRydWUiLicpLFQuam9pbigiICIpfXRocm93IFZ9KTtyZXR1cm4geWllbGQgdGhpcy5wb3B1bGF0ZUZvbGRlck1hcChgJHtsZX0vJHtpZX1gLF9lKSxqZX0p''@;'; put 'put ''fWNyZWF0ZUpvYkRlZmluaXRpb24oaWUsbGUsbWUsX2UsVGUpe3JldHVybiBnKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtpZighbWUmJiFfZSl0aHJvdyBuZXcgRXJyb3IoIlBhdGggdG8gb3IgVVJJIG9mIHRoZSBwYXJlbnQgZm9sZGVyIGlzIHJlcXVpcmVkLiIpO3JldHVybiFf''@;'; put 'put ''ZSYmbWUmJihfZT15aWVsZCB0aGlzLmdldEZvbGRlclVyaShtZSxUZSkpLHlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5wb3N0KGAke3RoaXMuc2VydmVyVXJsfS9qb2JEZWZpbml0aW9ucy9kZWZpbml0aW9ucz9wYXJlbnRGb2xkZXJVcmk9JHtfZX1gLHtuYW1lOmllLHBhcmFtZXRlcnM6W3tu''@;'; put 'put ''YW1lOiJfYWRkamVzYmVnaW5lbmRtYWNyb3MiLHR5cGU6IkNIQVJBQ1RFUiIsZGVmYXVsdFZhbHVlOiJmYWxzZSJ9XSx0eXBlOiJDb21wdXRlIixjb2RlOmxlfSxUZSl9KX1nZXRBdXRoQ29kZShpZSl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IGxlPWAk''@;'; put 'put ''e3RoaXMuc2VydmVyVXJsfS9TQVNMb2dvbi9vYXV0aC9hdXRob3JpemU/Y2xpZW50X2lkPSR7aWV9JnJlc3BvbnNlX3R5cGU9Y29kZWA7cmV0dXJuIHlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5nZXQobGUsdm9pZCAwLCJ0ZXh0L3BsYWluIikudGhlbihfZT0+X2UucmVzdWx0KS50aGVuKF9l''@;'; put 'put ''PT5nKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtsZXQgVGU9IiI7aWYoKDAsTi5pc0F1dGhvcml6ZUZvcm1SZXF1aXJlZCkoX2UpKXtjb25zdCBqZT0oeWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmF1dGhvcml6ZShfZSkpLnNwbGl0KCI8Ym9keT4iKVsxXS5zcGxpdCgiPC9ib2R5''@;'; put 'put ''PiIpWzBdLFY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIFYuaW5uZXJIVE1MPWplLFRlPVYucXVlcnlTZWxlY3RvcigiLmluZm9ib3ggaDQiKS5pbm5lclRleHQsVGV9e2NvbnN0IFNlPV9lLnNwbGl0KCI8Ym9keT4iKVsxXS5zcGxpdCgiPC9ib2R5PiIpWzBdLGplPWRv''@;'; put 'put ''Y3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiBqZS5pbm5lckhUTUw9U2UsamUmJihUZT1qZS5xdWVyeVNlbGVjdG9yKCIuaW5mb2JveCBoNCIpLmlubmVyVGV4dCksVGV9fSkpLmNhdGNoKCgpPT5udWxsKX0pfWdldEFjY2Vzc1Rva2VuKGllLGxlLG1lKXtyZXR1cm4gZyh0aGlz''@;'; put 'put ''LHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuKDAscS5nZXRBY2Nlc3NUb2tlbkZvclZpeWEpKHRoaXMucmVxdWVzdENsaWVudCxpZSxsZSxtZSl9KX1yZWZyZXNoVG9rZW5zKGllLGxlLG1lKXtyZXR1cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuKDAs''@;'; put 'put ''ZWUucmVmcmVzaFRva2Vuc0ZvclZpeWEpKHRoaXMucmVxdWVzdENsaWVudCxpZSxsZSxtZSl9KX1kZWxldGVDbGllbnQoaWUsbGUpe3JldHVybiBnKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBtZT10aGlzLnNlcnZlclVybCtgL29hdXRoL2NsaWVudHMvJHtpZX1gO3Jl''@;'; put 'put ''dHVybih5aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZGVsZXRlKG1lLGxlKSkucmVzdWx0fSl9ZXhlY3V0ZUNvbXB1dGVKb2IoaWUsbGUsbWUsX2UsVGUsU2U9ITAsamU9ITEsVixwPSExLGIpe3JldHVybiBnKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtsZXQgeD0oVGV8fHt9KS5h''@;'; put 'put ''Y2Nlc3NfdG9rZW47aWYoVGUmJih7YWNjZXNzX3Rva2VuOnh9PXlpZWxkKDAsVS5nZXRUb2tlbnMpKHRoaXMucmVxdWVzdENsaWVudCxUZSkpLCgwLHcuaXNSZWxhdGl2ZVBhdGgpKGllKSYmIXRoaXMucm9vdEZvbGRlck5hbWUpdGhyb3cgbmV3IEVycm9yKCJSZWxhdGl2ZSBwYXRocyBjYW5u''@;'; put 'put ''b3QgYmUgdXNlZCB3aXRob3V0IHNwZWNpZnlpbmcgYSByb290IGZvbGRlciBuYW1lIik7Y29uc3QgQz1pZS5zcGxpdCgiLyIpLFQ9Qy5wb3AoKSxIPUMuam9pbigiLyIpLGo9KDAsdy5pc1JlbGF0aXZlUGF0aCkoaWUpP2Ake3RoaXMucm9vdEZvbGRlck5hbWV9LyR7SH1gOkg7eWllbGQgdGhp''@;'; put 'put ''cy5wb3B1bGF0ZUZvbGRlck1hcChqLHgpLmNhdGNoKHRlPT57dGhyb3coMCxMLnByZWZpeE1lc3NhZ2UpKHRlLCJFcnJvciB3aGlsZSBwb3B1bGF0aW5nIGZvbGRlciBtYXAuICIpfSk7Y29uc3QgRT10aGlzLmZvbGRlck1hcC5nZXQoaik7aWYoIUUpdGhyb3cgbmV3IEVycm9yKGBUaGUgZm9s''@;'; put 'put ''ZGVyICcke2p9JyB3YXMgbm90IGZvdW5kIG9uICcke3RoaXMuc2VydmVyVXJsfSdgKTtjb25zdCBtPUU/LmZpbmQodGU9PnRlLm5hbWU9PT1UKTtpZighbSl0aHJvdyBuZXcgRXJyb3IoIkpvYiB3YXMgbm90IGZvdW5kLiIpO2xldCBBPW0/LmNvZGU7aWYoIUEpe2NvbnN0IHRlPW0/Lmxpbmtz''@;'; put 'put ''LmZpbmQod2U9PiJnZXRSZXNvdXJjZSI9PT13ZS5yZWwpO2lmKCF0ZSl0aHJvdyBuZXcgRXJyb3IoIlVSSSBvZiBqb2IgZGVmaW5pdGlvbiB3YXMgbm90IGZvdW5kLiIpO2NvbnN0e3Jlc3VsdDpzZX09eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmdldChgJHt0aGlzLnNlcnZlclVybH0ke3Rl''@;'; put 'put ''LmhyZWZ9YCx4KS5jYXRjaCh3ZT0+e3Rocm93KDAsTC5wcmVmaXhNZXNzYWdlKSh3ZSwiRXJyb3Igd2hpbGUgZ2V0dGluZyBqb2IgZGVmaW5pdGlvbi4gIil9KTtBPXNlLmNvZGUsbS5jb2RlPUF9QXx8KEE9IiIpO2NvbnN0IGFlPUEucmVwbGFjZSgvXHJcbi9nLCJcbiIpLnNwbGl0KCJcbiIp''@;'; put 'put ''O3JldHVybiB5aWVsZCB0aGlzLmV4ZWN1dGVTY3JpcHQoaWUsYWUsbGUsVGUsX2UsbWUsamUsU2UsVixwLGIpfSl9ZXhlY3V0ZUpvYihpZSxsZSxtZSxfZSxUZSl7dmFyIFNlLGplLFY7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2xldCBwPShUZXx8e30pLmFjY2Vz''@;'; put 'put ''c190b2tlbjtpZihUZSYmKHthY2Nlc3NfdG9rZW46cH09eWllbGQoMCxVLmdldFRva2VucykodGhpcy5yZXF1ZXN0Q2xpZW50LFRlKSksKDAsdy5pc1JlbGF0aXZlUGF0aCkoaWUpJiYhdGhpcy5yb290Rm9sZGVyTmFtZSl0aHJvdyBuZXcgRXJyb3IoIlJlbGF0aXZlIHBhdGhzIGNhbm5vdCBi''@;'; put 'put ''ZSB1c2VkIHdpdGhvdXQgc3BlY2lmeWluZyBhIHJvb3QgZm9sZGVyIG5hbWUuIik7Y29uc3QgYj1pZS5zcGxpdCgiLyIpLHg9Yi5wb3AoKSxDPWIuam9pbigiLyIpLFQ9KDAsdy5pc1JlbGF0aXZlUGF0aCkoaWUpP2Ake3RoaXMucm9vdEZvbGRlck5hbWV9LyR7Q31gOkM7eWllbGQgdGhpcy5w''@;'; put 'put ''b3B1bGF0ZUZvbGRlck1hcChULHApO2NvbnN0IEg9dGhpcy5mb2xkZXJNYXAuZ2V0KFQpO2lmKCFIKXRocm93IG5ldyBFcnJvcihgVGhlIGZvbGRlciAnJHtUfScgd2FzIG5vdCBmb3VuZCBvbiAnJHt0aGlzLnNlcnZlclVybH0nLmApO2NvbnN0IGo9SD8uZmluZChEZT0+RGUubmFtZT09PXgp''@;'; put 'put ''O2xldCBFPVtdO2lmKF9lJiZPYmplY3Qua2V5cyhfZSkubGVuZ3RoJiYoRT15aWVsZCB0aGlzLnVwbG9hZFRhYmxlcyhfZSxwKSksIWopdGhyb3cgbmV3IEVycm9yKCJKb2Igd2FzIG5vdCBmb3VuZC4iKTtjb25zdCBtPW51bGw9PT0oU2U9aj8ubGlua3MuZmluZChEZT0+ImdldFJlc291cmNl''@;'; put 'put ''Ij09PURlLnJlbCkpfHx2b2lkIDA9PT1TZT92b2lkIDA6U2UuaHJlZix7cmVzdWx0OkF9PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5nZXQoYCR7dGhpcy5zZXJ2ZXJVcmx9JHttfWAscCksYWU9e19jb250ZXh0TmFtZTpsZSxfcHJvZ3JhbTpgJHtUfS8ke3h9YCxfd2ViaW5fZmlsZV9jb3Vu''@;'; put 'put ''dDpFLmxlbmd0aCxfT01JVEpTT05MSVNUSU5HOiEwLF9PTUlUSlNPTkxPRzohMCxfT01JVFNFU1NJT05SRVNVTFRTOiEwLF9PTUlUVEVYVExJU1RJTkc6ITAsX09NSVRURVhUTE9HOiEwfTttZSYmKGFlLl9PTUlUVEVYVExPRz0iZmFsc2UiLGFlLl9PTUlUU0VTU0lPTlJFU1VMVFM9ImZhbHNl''@;'; put 'put ''IixhZS5fREVCVUc9MTMxKSxFLmZvckVhY2goKERlLEZlKT0+e2FlW2Bfd2ViaW5fZmlsZXVyaSR7RmUrMX1gXT1gL2ZpbGVzL2ZpbGVzLyR7RGUuZmlsZS5pZH1gLGFlW2Bfd2ViaW5fbmFtZSR7RmUrMX1gXT1EZS50YWJsZU5hbWV9KTtjb25zdCB0ZT17bmFtZTpgZXhlYy0ke3h9YCxkZXNj''@;'; put 'put ''cmlwdGlvbjoiUG93ZXJlZCBieSBTQVNqcyIsam9iRGVmaW5pdGlvbjpBLGFyZ3VtZW50czphZX0se3Jlc3VsdDpzZX09eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QoYCR7dGhpcy5zZXJ2ZXJVcmx9L2pvYkV4ZWN1dGlvbi9qb2JzP19hY3Rpb249d2FpdGAsdGUscCksd2U9eWllbGQg''@;'; put 'put ''dGhpcy5wb2xsSm9iU3RhdGUoc2UsVGUpLmNhdGNoKERlPT57dGhyb3coMCxMLnByZWZpeE1lc3NhZ2UpKERlLCJFcnJvciB3aGlsZSBwb2xsaW5nIGpvYiBzdGF0dXMuICIpfSkse3Jlc3VsdDpVZX09eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmdldChgJHt0aGlzLnNlcnZlclVybH0vam9i''@;'; put 'put ''RXhlY3V0aW9uL2pvYnMvJHtzZS5pZH1gLHApO2xldCBKZSxvdDtjb25zdCB4ZT1VZS5yZXN1bHRzWyJfd2Vib3V0Lmpzb24iXSx2ZT1VZS5saW5rcy5maW5kKERlPT4ibG9nIj09PURlLnJlbCk7aWYoeGUmJihKZT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KGAke3RoaXMuc2VydmVy''@;'; put 'put ''VXJsfSR7eGV9L2NvbnRlbnRgLHAsInRleHQvcGxhaW4iKSksbWUmJnZlJiYob3Q9eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmdldChgJHt0aGlzLnNlcnZlclVybH0ke3ZlLmhyZWZ9L2NvbnRlbnRgLHApLnRoZW4oRGU9PkRlLnJlc3VsdC5pdGVtcy5tYXAoRmU9PkZlLmxpbmUpLmpvaW4o''@;'; put 'put ''IlxuIikpKSwiZmFpbGVkIj09PXdlKXRocm93IG5ldyBGLkpvYkV4ZWN1dGlvbkVycm9yKG51bGw9PT0oamU9VWUuZXJyb3IpfHx2b2lkIDA9PT1qZT92b2lkIDA6amUuZXJyb3JDb2RlLG51bGw9PT0oVj1VZS5lcnJvcil8fHZvaWQgMD09PVY/dm9pZCAwOlYubWVzc2FnZSxvdCk7Y29uc3Qg''@;'; put 'put ''WGU9e3Jlc3VsdDpKZT8ucmVzdWx0LGxvZzpvdH0se2Vycm9yOnplfT1VZTtyZXR1cm4gemUmJihYZS5lcnJvcj16ZSksWGV9KX1wb3B1bGF0ZUZvbGRlck1hcChpZSxsZSl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IG1lPSgwLHcuaXNSZWxhdGl2ZVBh''@;'; put 'put ''dGgpKGllKT9gJHt0aGlzLnJvb3RGb2xkZXJOYW1lfS8ke2llfWA6aWU7aWYodGhpcy5mb2xkZXJNYXAuZ2V0KG1lKSlyZXR1cm47Y29uc3QgX2U9Ii9mb2xkZXJzL2ZvbGRlcnMvQGl0ZW0/cGF0aD0iK21lLHtyZXN1bHQ6VGV9PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5nZXQoYCR7X2V9''@;'; put 'put ''YCxsZSkuY2F0Y2goVj0+e3Rocm93KDAsTC5wcmVmaXhNZXNzYWdlKShWLCJFcnJvciB3aGlsZSBnZXR0aW5nIGZvbGRlci4gIil9KTtpZighVGUpdGhyb3cgbmV3IEVycm9yKGBUaGUgcGF0aCAke21lfSBkb2VzIG5vdCBleGlzdCBvbiAke3RoaXMuc2VydmVyVXJsfWApO2NvbnN0e3Jlc3Vs''@;'; put 'put ''dDpTZX09eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmdldChgL2ZvbGRlcnMvZm9sZGVycy8ke1RlLmlkfS9tZW1iZXJzP2xpbWl0PSR7VGUubWVtYmVyQ291bnQ8NTAwPzUwMDpUZS5tZW1iZXJDb3VudH1gLGxlKS5jYXRjaChWPT57dGhyb3coMCxMLnByZWZpeE1lc3NhZ2UpKFYsIkVycm9y''@;'; put 'put ''IHdoaWxlIGdldHRpbmcgbWVtYmVycy4gIil9KTt0aGlzLmZvbGRlck1hcC5zZXQobWUsU2UuaXRlbXMpfSl9cG9sbEpvYlN0YXRlKGllLGxlLG1lKXtyZXR1cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuKDAsSy5wb2xsSm9iU3RhdGUpKHRoaXMucmVxdWVzdENs''@;'; put 'put ''aWVudCxpZSx0aGlzLmRlYnVnLGxlLG1lKX0pfXVwbG9hZFRhYmxlcyhpZSxsZSl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybigwLFcudXBsb2FkVGFibGVzKSh0aGlzLnJlcXVlc3RDbGllbnQsaWUsbGUpfSl9Z2V0Rm9sZGVyRGV0YWlscyhpZSxsZSl7''@;'; put 'put ''cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IG1lPSgwLHcuaXNVcmkpKGllKT9pZTpgL2ZvbGRlcnMvZm9sZGVycy9AaXRlbT9wYXRoPSR7aWV9YCx7cmVzdWx0Ol9lfT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KGAke3RoaXMuc2VydmVyVXJsfSR7''@;'; put 'put ''bWV9YCxsZSkuY2F0Y2goVGU9PntpZihUZSBpbnN0YW5jZW9mIEYuQ2VydGlmaWNhdGVFcnJvcil0aHJvdyBUZTtyZXR1cm57cmVzdWx0Om51bGx9fSk7aWYoX2UpcmV0dXJuIF9lfSl9Z2V0Rm9sZGVyVXJpKGllLGxlKXtyZXR1cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7''@;'; put 'put ''Y29uc3QgbWU9eWllbGQgdGhpcy5nZXRGb2xkZXJEZXRhaWxzKGllLGxlKTtpZihtZSlyZXR1cm5gL2ZvbGRlcnMvZm9sZGVycy8ke21lLmlkfWB9KX1nZXRGaWxlVXJpKGllLGxlLG1lKXt2YXIgX2U7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IFRlPXlp''@;'; put 'put ''ZWxkIHRoaXMubGlzdEZvbGRlcihpZSxtZSwxZTMse3JldHVybkRldGFpbHM6ITB9KS5jYXRjaChqZT0+e3Rocm93KDAsTC5wcmVmaXhNZXNzYWdlKShqZSxgRXJyb3Igd2hpbGUgbGlzdGluZyBmb2xkZXI6ICR7aWV9LiBgKX0pO2lmKCFUZXx8IVRlLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3Io''@;'; put 'put ''YE5vIG1lbWJlcnMgZm91bmQgaW4gZm9sZGVyOiAke2llfWApO2NvbnN0IFNlPW51bGw9PT0oX2U9VGUuZmluZChqZT0+amUubmFtZT09PWxlKSl8fHZvaWQgMD09PV9lP3ZvaWQgMDpfZS51cmk7aWYoIVNlKXRocm93IG5ldyBFcnJvcihgRmlsZSAke2xlfSBub3QgZm91bmQgaW4gZm9sZGVy''@;'; put 'put ''OiAke2llfWApO3JldHVybiBTZX0pfWdldFJlY3ljbGVCaW5VcmkoaWUpe3JldHVybiBnKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdHtyZXN1bHQ6bWV9PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5nZXQoYCR7dGhpcy5zZXJ2ZXJVcmx9L2ZvbGRlcnMvZm9sZGVycy9A''@;'; put 'put ''bXlSZWN5Y2xlQmluYCxpZSkuY2F0Y2goX2U9PntpZihfZSBpbnN0YW5jZW9mIEYuQ2VydGlmaWNhdGVFcnJvcil0aHJvdyBfZTtyZXR1cm57cmVzdWx0Om51bGx9fSk7aWYobWUpcmV0dXJuYC9mb2xkZXJzL2ZvbGRlcnMvJHttZS5pZH1gfSl9Z2V0Q29tcHV0ZUNvbnRleHRCeU5hbWUoaWUs''@;'; put 'put ''bGUpe3JldHVybiBnKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5jb250ZXh0TWFuYWdlci5nZXRDb21wdXRlQ29udGV4dEJ5TmFtZShpZSxsZSl9KX1nZXRDb21wdXRlQ29udGV4dEJ5SWQoaWUsbGUpe3JldHVybiBnKHRoaXMsdm9pZCAwLHZvaWQg''@;'; put 'put ''MCxmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5jb250ZXh0TWFuYWdlci5nZXRDb21wdXRlQ29udGV4dEJ5SWQoaWUsbGUpfSl9bGlzdEZvbGRlcihpZSxsZSxtZT0yMCxfZSl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IFRlPSgwLHcuaXNVcmkp''@;'; put 'put ''KGllKT9pZTp5aWVsZCB0aGlzLmdldEZvbGRlclVyaShpZSxsZSkse3Jlc3VsdDpTZX09eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmdldChgJHt0aGlzLnNlcnZlclVybH0ke1RlfS9tZW1iZXJzP2xpbWl0PSR7bWV9YCxsZSk7bGV0IGplPVtdO3JldHVybiBTZSYmU2UuaXRlbXMmJihqZT1f''@;'; put 'put ''ZT8ucmV0dXJuRGV0YWlscz9TZS5pdGVtczpTZS5pdGVtcy5tYXAoVj0+Vi5uYW1lKSksamV9KX1tb3ZlRm9sZGVyKGllLGxlLG1lLF9lKXtyZXR1cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgVGU9aWUuc3BsaXQoIi8iKS5wb3AoKTtpZih5aWVsZCB0aGlzLmdl''@;'; put 'put ''dEZvbGRlckRldGFpbHMobGUsX2UpKW1lPVRlO2Vsc2V7bGV0IHg9bGUuc3BsaXQoIi8iKTt4LnNwbGljZSh4Lmxlbmd0aC0xLDEpLGxlPXguam9pbigiLyIpfWNvbnN0IGplPXlpZWxkIHRoaXMuZ2V0Rm9sZGVyVXJpKGllLF9lKSxWPXlpZWxkIHRoaXMuZ2V0Rm9sZGVyVXJpKGxlLF9lKTtp''@;'; put 'put ''ZighamUpcmV0dXJuO2NvbnN0IHA9amU/LnNwbGl0KCIvIikucG9wKCkse3Jlc3VsdDpifT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQucGF0Y2goYCR7dGhpcy5zZXJ2ZXJVcmx9JHtqZX1gLHtpZDpwLG5hbWU6bWUscGFyZW50Rm9sZGVyVXJpOlZ9LF9lKS5jYXRjaCh4PT57dGhyb3cgeC5j''@;'; put 'put ''b2RlJiYiRU5PVEZPVU5EIj09PXguY29kZT97Ym9keTp7bWVzc2FnZTpgRm9sZGVyICcke2llLnNwbGl0KCIvIikucG9wKCl9JyB3YXMgbm90IGZvdW5kLmB9fTp4fSk7cmV0dXJuIGJ8fHZvaWQgMH0pfWRlbGV0ZUZvbGRlcihpZSxsZSl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1''@;'; put 'put ''bmN0aW9uKigpe2NvbnN0IG1lPXlpZWxkIHRoaXMuZ2V0UmVjeWNsZUJpblVyaShsZSksX2U9aWUuc3BsaXQoIi8iKS5wb3AoKXx8IiIsVGU9bmV3IERhdGUsamU9X2UrIiAiK1RlLnRvTG9jYWxlRGF0ZVN0cmluZygpKyIgIitUZS50b0xvY2FsZVRpbWVTdHJpbmcoKTtyZXR1cm4geWllbGQg''@;'; put 'put ''dGhpcy5tb3ZlRm9sZGVyKGllLG1lLGplLGxlKX0pfX19LDU5NTY6ZnVuY3Rpb24odWUsWCx5KXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKFcsWSxxLGVlKXtyZXR1cm4gbmV3KHF8fChxPVByb21pc2UpKShmdW5jdGlvbihuZSxpZSl7ZnVuY3Rp''@;'; put 'put ''b24gbGUoVGUpe3RyeXtfZShlZS5uZXh0KFRlKSl9Y2F0Y2goU2Upe2llKFNlKX19ZnVuY3Rpb24gbWUoVGUpe3RyeXtfZShlZS50aHJvdyhUZSkpfWNhdGNoKFNlKXtpZShTZSl9fWZ1bmN0aW9uIF9lKFRlKXtUZS5kb25lP25lKFRlLnZhbHVlKTpmdW5jdGlvbiBKKG5lKXtyZXR1cm4gbmUg''@;'; put 'put ''aW5zdGFuY2VvZiBxP25lOm5ldyBxKGZ1bmN0aW9uKGllKXtpZShuZSl9KX0oVGUudmFsdWUpLnRoZW4obGUsbWUpfV9lKChlZT1lZS5hcHBseShXLFl8fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7Y29uc3QgXz15KDU5''@;'; put 'put ''MjgpLGc9eSgxMjMwKSxCPXkoOTgyMSksdz15KDgzMDYpLFA9eSgzNDY3KSxGPXkoMTUyNyksTz15KDM5MDApLHo9eSg0NTg4KSxOPXkoMzYwMiksTD15KDgyMTcpLEs9e3NlcnZlclVybDoiIixwYXRoU0FTSlM6Ii9TQVNqc0FwaS9zdHAvZXhlY3V0ZSIscGF0aFNBUzk6Ii9TQVNTdG9yZWRQ''@;'; put 'put ''cm9jZXNzL2RvIixwYXRoU0FTVml5YToiL1NBU0pvYkV4ZWN1dGlvbiIsYXBwTG9jOiIvUHVibGljL3NlZWRhcHAiLHNlcnZlclR5cGU6Ty5TZXJ2ZXJUeXBlLlNhc1ZpeWEsZGVidWc6ITEsY29udGV4dE5hbWU6IlNBUyBKb2IgRXhlY3V0aW9uIGNvbXB1dGUgY29udGV4dCIsdXNlQ29tcHV0''@;'; put 'put ''ZUFwaTpudWxsLGxvZ2luTWVjaGFuaXNtOmcuTG9naW5NZWNoYW5pc20uRGVmYXVsdH07WC5kZWZhdWx0PWNsYXNzIFV7Y29uc3RydWN0b3IoWSl7dGhpcy5zYXNqc0NvbmZpZz1uZXcgZy5TQVNqc0NvbmZpZyx0aGlzLmpvYnNQYXRoPSIiLHRoaXMuc2FzVml5YUFwaUNsaWVudD1udWxsLHRo''@;'; put 'put ''aXMuc2FzOUFwaUNsaWVudD1udWxsLHRoaXMuc2FzSlNBcGlDbGllbnQ9bnVsbCx0aGlzLmZpbGVVcGxvYWRlcj1udWxsLHRoaXMuYXV0aE1hbmFnZXI9bnVsbCx0aGlzLnJlcXVlc3RDbGllbnQ9bnVsbCx0aGlzLndlYkpvYkV4ZWN1dG9yPW51bGwsdGhpcy5zYXNqc0pvYkV4ZWN1dG9yPW51''@;'; put 'put ''bGwsdGhpcy5jb21wdXRlSm9iRXhlY3V0b3I9bnVsbCx0aGlzLmplc0pvYkV4ZWN1dG9yPW51bGwsdGhpcy5zYXM5Sm9iRXhlY3V0b3I9bnVsbCx0aGlzLnJlc2VuZFdhaXRpbmdSZXF1ZXN0cz0oKT0+SSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7dmFyIHEsZWUsSixuZSxpZTt5''@;'; put 'put ''aWVsZCBudWxsPT09KHE9dGhpcy53ZWJKb2JFeGVjdXRvcil8fHZvaWQgMD09PXE/dm9pZCAwOnEucmVzZW5kV2FpdGluZ1JlcXVlc3RzKCkseWllbGQgbnVsbD09PShlZT10aGlzLmNvbXB1dGVKb2JFeGVjdXRvcil8fHZvaWQgMD09PWVlP3ZvaWQgMDplZS5yZXNlbmRXYWl0aW5nUmVxdWVz''@;'; put 'put ''dHMoKSx5aWVsZCBudWxsPT09KEo9dGhpcy5qZXNKb2JFeGVjdXRvcil8fHZvaWQgMD09PUo/dm9pZCAwOkoucmVzZW5kV2FpdGluZ1JlcXVlc3RzKCkseWllbGQgbnVsbD09PShuZT10aGlzLmZpbGVVcGxvYWRlcil8fHZvaWQgMD09PW5lP3ZvaWQgMDpuZS5yZXNlbmRXYWl0aW5nUmVxdWVz''@;'; put 'put ''dHMoKSx5aWVsZCBudWxsPT09KGllPXRoaXMuc2FzanNKb2JFeGVjdXRvcil8fHZvaWQgMD09PWllP3ZvaWQgMDppZS5yZXNlbmRXYWl0aW5nUmVxdWVzdHMoKX0pLHRoaXMuc2V0VmVyYm9zZU1vZGU9cT0+e3ZhciBlZTtudWxsPT09KGVlPXRoaXMucmVxdWVzdENsaWVudCl8fHZvaWQgMD09''@;'; put 'put ''PWVlfHxlZS5zZXRWZXJib3NlTW9kZShxKX0sdGhpcy5zYXNqc0NvbmZpZz1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sSyksWSksdGhpcy5zZXR1cENvbmZpZ3VyYXRpb24oKX1nZXRDc3JmVG9rZW4oWT0iZ2VuZXJhbCIpe3ZhciBxO3JldHVybiBudWxsPT09KHE9dGhpcy5yZXF1''@;'; put 'put ''ZXN0Q2xpZW50KXx8dm9pZCAwPT09cT92b2lkIDA6cS5nZXRDc3JmVG9rZW4oWSl9ZXhlY3V0ZVNjcmlwdCh7bGluZXNPZkNvZGU6WSxmaWxlTmFtZTpxLGNvbnRleHROYW1lOmVlLHJ1blRpbWU6SixhdXRoQ29uZmlnOm5lLGF1dGhDb25maWdTYXM5OmllLGRlYnVnOmxlfSl7dmFyIG1lLF9l''@;'; put 'put ''O3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtpZih0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJleGVjdXRlU2NyaXB0IixbTy5TZXJ2ZXJUeXBlLlNhczksTy5TZXJ2ZXJUeXBlLlNhc2pzLE8uU2VydmVyVHlwZS5TYXNWaXlhXSksdGhpcy5zYXNqc0NvbmZpZy5zZXJ2''@;'; put 'put ''ZXJUeXBlPT09Ty5TZXJ2ZXJUeXBlLlNhczkpe2lmKCFpZSl0aHJvdyBuZXcgRXJyb3IoIkF1dGggY29uZmlnIGZvciBzYXM5IGlzIG5vdCBwcm92aWRlZCIpO3JldHVybiB5aWVsZCBudWxsPT09KG1lPXRoaXMuc2FzOUFwaUNsaWVudCl8fHZvaWQgMD09PW1lP3ZvaWQgMDptZS5leGVjdXRl''@;'; put 'put ''U2NyaXB0KFksaWUudXNlck5hbWUsaWUucGFzc3dvcmQpfWlmKHRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZT09PU8uU2VydmVyVHlwZS5TYXNqcylyZXR1cm4geWllbGQgbnVsbD09PShfZT10aGlzLnNhc0pTQXBpQ2xpZW50KXx8dm9pZCAwPT09X2U/dm9pZCAwOl9lLmV4ZWN1dGVTY3Jp''@;'; put 'put ''cHQoWS5qb2luKCJcbiIpLEosbmUpO2lmKHRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZT09PU8uU2VydmVyVHlwZS5TYXNWaXlhKXtpZighKGVlPWVlfHx0aGlzLnNhc2pzQ29uZmlnLmNvbnRleHROYW1lKSl0aHJvdyBuZXcgRXJyb3IoIkNvbnRleHQgbmFtZSBpcyB1bmRlZmluZWQuIFBs''@;'; put 'put ''ZWFzZSBzZXQgYSBgY29udGV4dE5hbWVgIGluIHlvdXIgU0FTanMgb3Igb3ZlcnJpZGUgY29uZmlnLiIpO2lmKCFxKXRocm93IG5ldyBFcnJvcigiRmlsZSBuYW1lIGlzIHJlcXVpcmVkIGluIGNhc2Ugb2YgU0FTIFZJWUEuIFBsZWFzZSBwcm92aWRlIGEgYGZpbGVOYW1lYC4iKTtyZXR1cm4g''@;'; put 'put ''eWllbGQgdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmV4ZWN1dGVTY3JpcHQocSxZLGVlLG5lLG51bGwsbGV8fHRoaXMuc2FzanNDb25maWcuZGVidWcpfX0pfWV4ZWN1dGVKb2IoWSxxLGVlKXt2YXIgSjtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMu''@;'; put 'put ''aXNNZXRob2RTdXBwb3J0ZWQoImV4ZWN1dGVTY3JpcHQiLFtPLlNlcnZlclR5cGUuU2FzanNdKSx5aWVsZCBudWxsPT09KEo9dGhpcy5zYXNKU0FwaUNsaWVudCl8fHZvaWQgMD09PUo/dm9pZCAwOkouZXhlY3V0ZUpvYihZLHEsZWUpfSl9Z2V0Q29tcHV0ZUNvbnRleHRzKFkpe3JldHVybiBJ''@;'; put 'put ''KHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiZ2V0Q29tcHV0ZUNvbnRleHRzIixbTy5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSx5aWVsZCB0aGlzLnNhc1ZpeWFBcGlDbGllbnQuZ2V0Q29tcHV0ZUNvbnRleHRzKFkpfSl9Z2V0TGF1''@;'; put 'put ''bmNoZXJDb250ZXh0cyhZKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImdldExhdW5jaGVyQ29udGV4dHMiLFtPLlNlcnZlclR5cGUuU2FzVml5YV0pLHlpZWxkIHRoaXMuc2FzVml5YUFwaUNsaWVudC5nZXRM''@;'; put 'put ''YXVuY2hlckNvbnRleHRzKFkpfSl9Z2V0RGVmYXVsdENvbXB1dGVDb250ZXh0cygpe3JldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJnZXREZWZhdWx0Q29tcHV0ZUNvbnRleHRzIixbTy5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSx0aGlzLnNhc1ZpeWFBcGlDbGllbnQuZ2V0RGVmYXVsdENv''@;'; put 'put ''bXB1dGVDb250ZXh0cygpfWdldEV4ZWN1dGFibGVDb250ZXh0cyhZKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImdldEV4ZWN1dGFibGVDb250ZXh0cyIsW08uU2VydmVyVHlwZS5TYXNWaXlhXSkseWllbGQg''@;'; put 'put ''dGhpcy5zYXNWaXlhQXBpQ2xpZW50LmdldEV4ZWN1dGFibGVDb250ZXh0cyhZKX0pfWNyZWF0ZUNvbXB1dGVDb250ZXh0KFkscSxlZSxKLG5lLGllKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImNyZWF0ZUNv''@;'; put 'put ''bXB1dGVDb250ZXh0IixbTy5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSx5aWVsZCB0aGlzLnNhc1ZpeWFBcGlDbGllbnQuY3JlYXRlQ29tcHV0ZUNvbnRleHQoWSxxLGVlLEosbmUsaWUpfSl9Y3JlYXRlTGF1bmNoZXJDb250ZXh0KFkscSxlZSxKKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAs''@;'; put 'put ''ZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImNyZWF0ZUxhdW5jaGVyQ29udGV4dCIsW08uU2VydmVyVHlwZS5TYXNWaXlhXSkseWllbGQgdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmNyZWF0ZUxhdW5jaGVyQ29udGV4dChZLHEsZWUsSil9KX1lZGl0Q29tcHV0ZUNv''@;'; put 'put ''bnRleHQoWSxxLGVlKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImVkaXRDb21wdXRlQ29udGV4dCIsW08uU2VydmVyVHlwZS5TYXNWaXlhXSkseWllbGQgdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmVkaXRDb21w''@;'; put 'put ''dXRlQ29udGV4dChZLHEsZWUpfSl9ZGVsZXRlQ29tcHV0ZUNvbnRleHQoWSxxKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImRlbGV0ZUNvbXB1dGVDb250ZXh0IixbTy5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSx5''@;'; put 'put ''aWVsZCB0aGlzLnNhc1ZpeWFBcGlDbGllbnQuZGVsZXRlQ29tcHV0ZUNvbnRleHQoWSxxKX0pfWdldENvbXB1dGVDb250ZXh0QnlOYW1lKFkscSl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJnZXRDb21wdXRl''@;'; put 'put ''Q29udGV4dEJ5TmFtZSIsW08uU2VydmVyVHlwZS5TYXNWaXlhXSkseWllbGQgdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmdldENvbXB1dGVDb250ZXh0QnlOYW1lKFkscSl9KX1nZXRDb21wdXRlQ29udGV4dEJ5SWQoWSxxKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7''@;'; put 'put ''cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImdldENvbXB1dGVDb250ZXh0QnlJZCIsW08uU2VydmVyVHlwZS5TYXNWaXlhXSkseWllbGQgdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmdldENvbXB1dGVDb250ZXh0QnlJZChZLHEpfSl9Y3JlYXRlU2Vzc2lvbihZLHEpe3JldHVybiBJKHRo''@;'; put 'put ''aXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiY3JlYXRlU2Vzc2lvbiIsW08uU2VydmVyVHlwZS5TYXNWaXlhXSkseWllbGQgdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmNyZWF0ZVNlc3Npb24oWSxxKX0pfWNyZWF0ZUZvbGRlcihZLHEs''@;'; put 'put ''ZWUsSixuZSxpZSl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiBuZT95aWVsZCBuZS5jcmVhdGVGb2xkZXIoWSxxLGVlLEosaWUpOnlpZWxkIHRoaXMuc2FzVml5YUFwaUNsaWVudC5jcmVhdGVGb2xkZXIoWSxxLGVlLEosaWUpfSl9Y3JlYXRlRmlsZShZ''@;'; put 'put ''LHEsZWUsSixuZSxpZSl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiBpZT95aWVsZCBpZS5jcmVhdGVGaWxlKFkscSxlZSxKLG5lKTp5aWVsZCB0aGlzLnNhc1ZpeWFBcGlDbGllbnQuY3JlYXRlRmlsZShZLHEsZWUsSixuZSl9KX1nZXRGaWxlQ29udGVu''@;'; put 'put ''dChZLHEsZWUpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiZ2V0RmlsZUNvbnRlbnQiLFtPLlNlcnZlclR5cGUuU2FzVml5YV0pLHlpZWxkIHRoaXMuc2FzVml5YUFwaUNsaWVudC5nZXRGaWxlQ29udGVudChZ''@;'; put 'put ''LHEsZWUpfSl9dXBkYXRlRmlsZUNvbnRlbnQoWSxxLGVlLEope3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgidXBkYXRlRmlsZUNvbnRlbnQiLFtPLlNlcnZlclR5cGUuU2FzVml5YV0pLHlpZWxkIHRoaXMuc2Fz''@;'; put 'put ''Vml5YUFwaUNsaWVudC51cGRhdGVGaWxlQ29udGVudChZLHEsZWUsSil9KX1nZXRGb2xkZXIoWSxxKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImdldEZvbGRlciIsW08uU2VydmVyVHlwZS5TYXNWaXlhXSks''@;'; put 'put ''eWllbGQgdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmdldEZvbGRlcihZLHEpfSl9ZGVsZXRlRm9sZGVyKFkscSl7dmFyIGVlO3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiZGVsZXRlRm9sZGVyIixbTy5TZXJ2ZXJU''@;'; put 'put ''eXBlLlNhc1ZpeWFdKSx5aWVsZCBudWxsPT09KGVlPXRoaXMuc2FzVml5YUFwaUNsaWVudCl8fHZvaWQgMD09PWVlP3ZvaWQgMDplZS5kZWxldGVGb2xkZXIoWSxxKX0pfWxpc3RGb2xkZXIoWSxxLGVlLEo9ITEpe3ZhciBuZTtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24q''@;'; put 'put ''KCl7cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImxpc3RGb2xkZXIiLFtPLlNlcnZlclR5cGUuU2FzVml5YV0pLHlpZWxkIG51bGw9PT0obmU9dGhpcy5zYXNWaXlhQXBpQ2xpZW50KXx8dm9pZCAwPT09bmU/dm9pZCAwOm5lLmxpc3RGb2xkZXIoWSxxLGVlLHtyZXR1cm5EZXRhaWxz''@;'; put 'put ''Okp9KX0pfW1vdmVGb2xkZXIoWSxxLGVlLEope3ZhciBuZTtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoIm1vdmVGb2xkZXIiLFtPLlNlcnZlclR5cGUuU2FzVml5YV0pLHlpZWxkIG51bGw9PT0obmU9dGhpcy5z''@;'; put 'put ''YXNWaXlhQXBpQ2xpZW50KXx8dm9pZCAwPT09bmU/dm9pZCAwOm5lLm1vdmVGb2xkZXIoWSxxLGVlLEopfSl9Y3JlYXRlSm9iRGVmaW5pdGlvbihZLHEsZWUsSixuZSxpZSl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9y''@;'; put 'put ''dGVkKCJjcmVhdGVKb2JEZWZpbml0aW9uIixbTy5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSxpZT95aWVsZCBpZS5jcmVhdGVKb2JEZWZpbml0aW9uKFkscSxlZSxKLG5lKTp5aWVsZCB0aGlzLnNhc1ZpeWFBcGlDbGllbnQuY3JlYXRlSm9iRGVmaW5pdGlvbihZLHEsZWUsSixuZSl9KX1nZXRBdXRo''@;'; put 'put ''Q29kZShZKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImdldEF1dGhDb2RlIixbTy5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSx5aWVsZCB0aGlzLnNhc1ZpeWFBcGlDbGllbnQuZ2V0QXV0aENvZGUoWSl9KX1nZXRB''@;'; put 'put ''Y2Nlc3NUb2tlbihZLHEsZWUpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiZ2V0QWNjZXNzVG9rZW4iLFtPLlNlcnZlclR5cGUuU2FzVml5YSxPLlNlcnZlclR5cGUuU2FzanNdKSx0aGlzLnNhc2pzQ29uZmln''@;'; put 'put ''LnNlcnZlclR5cGU9PT1PLlNlcnZlclR5cGUuU2FzanM/eWllbGQgdGhpcy5zYXNKU0FwaUNsaWVudC5nZXRBY2Nlc3NUb2tlbihZLGVlKTp5aWVsZCB0aGlzLnNhc1ZpeWFBcGlDbGllbnQuZ2V0QWNjZXNzVG9rZW4oWSxxLGVlKX0pfXJlZnJlc2hUb2tlbnMoWSxxLGVlKXtyZXR1cm4gSSh0''@;'; put 'put ''aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoInJlZnJlc2hUb2tlbnMiLFtPLlNlcnZlclR5cGUuU2FzVml5YSxPLlNlcnZlclR5cGUuU2FzanNdKSx0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGU9PT1PLlNlcnZlclR5cGUuU2Fz''@;'; put 'put ''anM/eWllbGQgdGhpcy5zYXNKU0FwaUNsaWVudC5yZWZyZXNoVG9rZW5zKGVlKTp5aWVsZCB0aGlzLnNhc1ZpeWFBcGlDbGllbnQucmVmcmVzaFRva2VucyhZLHEsZWUpfSl9ZGVsZXRlQ2xpZW50KFkscSl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB0''@;'; put 'put ''aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJkZWxldGVDbGllbnQiLFtPLlNlcnZlclR5cGUuU2FzVml5YV0pLHlpZWxkIHRoaXMuc2FzVml5YUFwaUNsaWVudC5kZWxldGVDbGllbnQoWSxxKX0pfWdldFNhc2pzQ29uZmlnKCl7cmV0dXJuIHRoaXMuc2FzanNDb25maWd9Z2V0VXNlck5hbWUoKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5hdXRoTWFuYWdlci51c2VyTmFtZX1zZXRTQVNqc0NvbmZpZyhZKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7dGhpcy5zYXNqc0NvbmZpZz1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdGhpcy5zYXNqc0NvbmZpZyksWSksdGhpcy5z''@;'; put 'put ''ZXR1cENvbmZpZ3VyYXRpb24oKX0pfXNldERlYnVnU3RhdGUoWSl7dGhpcy5zYXNqc0NvbmZpZy5kZWJ1Zz1ZLHRoaXMuc2FzVml5YUFwaUNsaWVudCYmKHRoaXMuc2FzVml5YUFwaUNsaWVudC5kZWJ1Zz1ZKX1jaGVja1Nlc3Npb24oKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVu''@;'; put 'put ''Y3Rpb24qKCl7cmV0dXJuIHRoaXMuYXV0aE1hbmFnZXIuY2hlY2tTZXNzaW9uKCl9KX1sb2dJbihZLHEsZWUsSj17fSl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2lmKHRoaXMuc2FzanNDb25maWcubG9naW5NZWNoYW5pc209PT1nLkxvZ2luTWVjaGFuaXNtLkRl''@;'; put 'put ''ZmF1bHQpe2lmKCFZfHwhcSl0aHJvdyBuZXcgRXJyb3IoIkEgdXNlcm5hbWUgYW5kIHBhc3N3b3JkIGFyZSByZXF1aXJlZCB3aGVuIHVzaW5nIHRoZSBkZWZhdWx0IGxvZ2luIG1lY2hhbmlzbS4iKTtyZXR1cm4gdGhpcy5hdXRoTWFuYWdlci5sb2dJbihZLHEpfWlmKHR5cGVvZiB3aW5kb3c+''@;'; put 'put ''InUiKXRocm93IG5ldyBFcnJvcigiVGhlIHJlZGlyZWN0ZWQgbG9naW4gbWVjaGFuaXNtIGlzIG9ubHkgYXZhaWxhYmxlIGZvciB1c2UgaW4gdGhlIGJyb3dzZXIuIik7cmV0dXJuIHRoaXMuYXV0aE1hbmFnZXIucmVkaXJlY3RlZExvZ0luKEopfSl9bG9nT3V0KCl7cmV0dXJuIHRoaXMuYXV0''@;'; put 'put ''aE1hbmFnZXIubG9nT3V0KCl9dXBsb2FkRmlsZShZLHEsZWUsSj17fSxuZSl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe0o9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHRoaXMuc2FzanNDb25maWcpLEopO2NvbnN0IGllPXtmaWxlczpxLHBhcmFtczpl''@;'; put 'put ''ZX07cmV0dXJuIHlpZWxkIHRoaXMuZmlsZVVwbG9hZGVyLmV4ZWN1dGUoWSxpZSxKLG5lKX0pfXJlcXVlc3QoWSxxLGVlPXt9LEosbmUsaWU9W10pe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtlZT1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdGhpcy5z''@;'; put 'put ''YXNqc0NvbmZpZyksZWUpO2NvbnN0IGxlPSgwLF8udmFsaWRhdGVJbnB1dCkocSk7cmV0dXJuIGxlLnN0YXR1cz9lZS5zZXJ2ZXJUeXBlPT09Ty5TZXJ2ZXJUeXBlLlNhc2pzP3lpZWxkIHRoaXMuc2FzanNKb2JFeGVjdXRvci5leGVjdXRlKFkscSxlZSxKLG5lLGllKTplZS5zZXJ2ZXJUeXBl''@;'; put 'put ''PT09Ty5TZXJ2ZXJUeXBlLlNhc1ZpeWEmJm51bGwhPWVlLnVzZUNvbXB1dGVBcGk/ZWUudXNlQ29tcHV0ZUFwaT95aWVsZCB0aGlzLmNvbXB1dGVKb2JFeGVjdXRvci5leGVjdXRlKFkscSxlZSxKLG5lKTooZWUuY29udGV4dE5hbWV8fChlZT1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24o''@;'; put 'put ''e30sZWUpLHtjb250ZXh0TmFtZToiU0FTIEpvYiBFeGVjdXRpb24gY29tcHV0ZSBjb250ZXh0In0pKSx5aWVsZCB0aGlzLmplc0pvYkV4ZWN1dG9yLmV4ZWN1dGUoWSxxLGVlLEosbmUsaWUpKTplZS5zZXJ2ZXJUeXBlPT09Ty5TZXJ2ZXJUeXBlLlNhczkmJmVlLnVzZXJuYW1lJiZlZS5wYXNz''@;'; put 'put ''d29yZD95aWVsZCB0aGlzLnNhczlKb2JFeGVjdXRvci5leGVjdXRlKFkscSxlZSk6eWllbGQgdGhpcy53ZWJKb2JFeGVjdXRvci5leGVjdXRlKFkscSxlZSxKLG5lLGllKTpQcm9taXNlLnJlamVjdChuZXcgZy5FcnJvclJlc3BvbnNlKGxlLm1zZykpfSl9ZGVwbG95U2VydmljZVBhY2soWSxx''@;'; put 'put ''LGVlLEosbmU9ITEpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXt0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJkZXBsb3lTZXJ2aWNlUGFjayIsW08uU2VydmVyVHlwZS5TYXNWaXlhXSk7bGV0IGllPW51bGw7aWYoZWV8fHEpZWV8fChlZT10aGlzLnNhc2pzQ29uZmln''@;'; put 'put ''LnNlcnZlclVybCkscXx8KHE9dGhpcy5zYXNqc0NvbmZpZy5hcHBMb2MpLHRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZT09PU8uU2VydmVyVHlwZS5TYXNWaXlhPyhpZT1uZXcgQi5TQVNWaXlhQXBpQ2xpZW50KGVlLHEsdGhpcy5zYXNqc0NvbmZpZy5jb250ZXh0TmFtZSx0aGlzLnJlcXVl''@;'; put 'put ''c3RDbGllbnQpLGllLmRlYnVnPXRoaXMuc2FzanNDb25maWcuZGVidWcpOnRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZT09PU8uU2VydmVyVHlwZS5TYXM5JiYoaWU9bmV3IHcuU0FTOUFwaUNsaWVudChlZSx0aGlzLmpvYnNQYXRoLHRoaXMuc2FzanNDb25maWcuaHR0cHNBZ2VudE9wdGlv''@;'; put 'put ''bnMpKTtlbHNle2xldCBtZT1udWxsO3RoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZT09PU8uU2VydmVyVHlwZS5TYXNWaXlhP21lPXRoaXMuc2FzVml5YUFwaUNsaWVudC5nZXRDb25maWcoKTp0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGU9PT1PLlNlcnZlclR5cGUuU2FzOSYmKG1lPXRo''@;'; put 'put ''aXMuc2FzOUFwaUNsaWVudC5nZXRDb25maWcoKSksZWU9bWUuc2VydmVyVXJsLHE9bWUucm9vdEZvbGRlck5hbWV9WS5tZW1iZXJzWzBdLm1lbWJlcnMmJlkubWVtYmVyc1swXS5tZW1iZXJzLnNvcnQobWU9PiJmb2xkZXIiPT09bWUudHlwZT8tMToxKTtjb25zdCBsZT1ZLm1lbWJlcnM7eWll''@;'; put 'put ''bGQgdGhpcy5jcmVhdGVGb2xkZXJzQW5kU2VydmljZXMocSxsZSxKLGllLG5lKX0pfXN0YXJ0Q29tcHV0ZUpvYihZLHEsZWU9e30sSixuZSxpZSxsZT0hMSxtZSxfZSl7dmFyIFRlLFNlLGplLFY7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2lmKGVlPU9iamVjdC5h''@;'; put 'put ''c3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0aGlzLnNhc2pzQ29uZmlnKSxlZSksdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgic3RhcnRDb21wdXRlSm9iIixbTy5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSwhZWUuY29udGV4dE5hbWUpdGhyb3cgbmV3IEVycm9yKCJDb250ZXh0IG5hbWUgaXMgdW5kZWZp''@;'; put 'put ''bmVkLiBQbGVhc2Ugc2V0IGEgYGNvbnRleHROYW1lYCBpbiB5b3VyIFNBU2pzIG9yIG92ZXJyaWRlIGNvbmZpZy4iKTtyZXR1cm4gX2U/KG51bGw9PT0oVGU9dGhpcy5yZXF1ZXN0Q2xpZW50KXx8dm9pZCAwPT09VGV8fFRlLnNldFZlcmJvc2VNb2RlKF9lKSxudWxsPT09KFNlPXRoaXMucmVx''@;'; put 'put ''dWVzdENsaWVudCl8fHZvaWQgMD09PVNlfHxTZS5lbmFibGVWZXJib3NlTW9kZSgpKTohMT09PV9lJiYobnVsbD09PShqZT10aGlzLnJlcXVlc3RDbGllbnQpfHx2b2lkIDA9PT1qZXx8amUuZGlzYWJsZVZlcmJvc2VNb2RlKCkpLG51bGw9PT0oVj10aGlzLnNhc1ZpeWFBcGlDbGllbnQpfHx2''@;'; put 'put ''b2lkIDA9PT1WP3ZvaWQgMDpWLmV4ZWN1dGVDb21wdXRlSm9iKFksZWUuY29udGV4dE5hbWUsZWUuZGVidWcscSxKLCEhbmUsITEsaWUsbGUsbWUpfSl9ZmV0Y2hMb2dGaWxlQ29udGVudChZLHEpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4geWllbGQg''@;'; put 'put ''dGhpcy5yZXF1ZXN0Q2xpZW50LmdldChZLHEpLnRoZW4oZWU9PntpZighZWUpcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBnLkVycm9yUmVzcG9uc2UoIkVycm9yIHdoaWxlIGZldGNoaW5nIGxvZy4gUmVzcG9uc2Ugd2FzIG5vdCBwcm92aWRlZC4iKSk7dHJ5e3JldHVybiBKU09OLnN0cmlu''@;'; put 'put ''Z2lmeShlZS5yZXN1bHQpfWNhdGNoKEope3JldHVybiBQcm9taXNlLnJlamVjdChuZXcgZy5FcnJvclJlc3BvbnNlKCJFcnJvciB3aGlsZSBmZXRjaGluZyBsb2cuIFRoZSByZXN1bHQgaXMgbm90IHZhbGlkLiIsSikpfX0pfSl9Z2V0U2FzUmVxdWVzdHMoKXtyZXR1cm5bLi4udGhpcy5yZXF1''@;'; put 'put ''ZXN0Q2xpZW50LmdldFJlcXVlc3RzKCldLnNvcnQoXy5jb21wYXJlVGltZXN0YW1wcyl9Y2xlYXJTYXNSZXF1ZXN0cygpe3RoaXMucmVxdWVzdENsaWVudC5jbGVhclJlcXVlc3RzKCl9c2V0dXBDb25maWd1cmF0aW9uKCl7aWYodm9pZCAwPT09dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmx8''@;'; put 'put ''fCIiPT09dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwpaWYodHlwZW9mIGxvY2F0aW9uPCJ1Iil7bGV0IFk9YCR7bG9jYXRpb24ucHJvdG9jb2x9Ly8ke2xvY2F0aW9uLmhvc3RuYW1lfWA7bG9jYXRpb24ucG9ydCYmKFk9YCR7WX06JHtsb2NhdGlvbi5wb3J0fWApLHRoaXMuc2FzanNDb25m''@;'; put 'put ''aWcuc2VydmVyVXJsPVl9ZWxzZSB0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybD0iIjsiLyI9PT10aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybC5zbGljZSgtMSkmJih0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybD10aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybC5zbGljZSgwLC0xKSksdGhp''@;'; put 'put ''cy5yZXF1ZXN0Q2xpZW50P3RoaXMucmVxdWVzdENsaWVudC5zZXRDb25maWcodGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwsdGhpcy5zYXNqc0NvbmZpZy5odHRwc0FnZW50T3B0aW9ucyk6dGhpcy5yZXF1ZXN0Q2xpZW50PW5ldyh0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGU9PT1PLlNl''@;'; put 'put ''cnZlclR5cGUuU2FzanM/Ti5TYXNqc1JlcXVlc3RDbGllbnQ6ei5SZXF1ZXN0Q2xpZW50KSh0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCx0aGlzLnNhc2pzQ29uZmlnLmh0dHBzQWdlbnRPcHRpb25zLHRoaXMuc2FzanNDb25maWcucmVxdWVzdEhpc3RvcnlMaW1pdCx0aGlzLnNhc2pzQ29u''@;'; put 'put ''ZmlnLnZlcmJvc2UpLHRoaXMuam9ic1BhdGg9dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlPT09Ty5TZXJ2ZXJUeXBlLlNhc1ZpeWE/dGhpcy5zYXNqc0NvbmZpZy5wYXRoU0FTVml5YTp0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGU9PT1PLlNlcnZlclR5cGUuU2FzOT90aGlzLnNhc2pz''@;'; put 'put ''Q29uZmlnLnBhdGhTQVM5OnRoaXMuc2FzanNDb25maWcucGF0aFNBU0pTLHRoaXMuYXV0aE1hbmFnZXI9bmV3IEYuQXV0aE1hbmFnZXIodGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwsdGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlLHRoaXMucmVxdWVzdENsaWVudCx0aGlzLnJlc2VuZFdh''@;'; put 'put ''aXRpbmdSZXF1ZXN0cyksdGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlPT09Ty5TZXJ2ZXJUeXBlLlNhc1ZpeWEmJih0aGlzLnNhc1ZpeWFBcGlDbGllbnQ/dGhpcy5zYXNWaXlhQXBpQ2xpZW50LnNldENvbmZpZyh0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCx0aGlzLnNhc2pzQ29uZmln''@;'; put 'put ''LmFwcExvYyk6dGhpcy5zYXNWaXlhQXBpQ2xpZW50PW5ldyBCLlNBU1ZpeWFBcGlDbGllbnQodGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwsdGhpcy5zYXNqc0NvbmZpZy5hcHBMb2MsdGhpcy5zYXNqc0NvbmZpZy5jb250ZXh0TmFtZSx0aGlzLnJlcXVlc3RDbGllbnQpLHRoaXMuc2FzVml5''@;'; put 'put ''YUFwaUNsaWVudC5kZWJ1Zz10aGlzLnNhc2pzQ29uZmlnLmRlYnVnKSx0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGU9PT1PLlNlcnZlclR5cGUuU2FzOSYmKHRoaXMuc2FzOUFwaUNsaWVudD90aGlzLnNhczlBcGlDbGllbnQuc2V0Q29uZmlnKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJs''@;'; put 'put ''KTp0aGlzLnNhczlBcGlDbGllbnQ9bmV3IHcuU0FTOUFwaUNsaWVudCh0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCx0aGlzLmpvYnNQYXRoLHRoaXMuc2FzanNDb25maWcuaHR0cHNBZ2VudE9wdGlvbnMpKSx0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGU9PT1PLlNlcnZlclR5cGUuU2Fz''@;'; put 'put ''anMmJih0aGlzLnNhc0pTQXBpQ2xpZW50fHwodGhpcy5zYXNKU0FwaUNsaWVudD1uZXcgUC5TQVNqc0FwaUNsaWVudCh0aGlzLnJlcXVlc3RDbGllbnQpKSksdGhpcy5maWxlVXBsb2FkZXI9bmV3IEwuRmlsZVVwbG9hZGVyKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsLHRoaXMuc2FzanND''@;'; put 'put ''b25maWcuc2VydmVyVHlwZSx0aGlzLmpvYnNQYXRoLHRoaXMucmVxdWVzdENsaWVudCksdGhpcy53ZWJKb2JFeGVjdXRvcj1uZXcgTC5XZWJKb2JFeGVjdXRvcih0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCx0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGUsdGhpcy5qb2JzUGF0aCx0aGlz''@;'; put 'put ''LnJlcXVlc3RDbGllbnQsdGhpcy5zYXNWaXlhQXBpQ2xpZW50KSx0aGlzLnNhc2pzSm9iRXhlY3V0b3I9bmV3IEwuU2FzanNKb2JFeGVjdXRvcih0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCx0aGlzLmpvYnNQYXRoLHRoaXMucmVxdWVzdENsaWVudCksdGhpcy5zYXM5Sm9iRXhlY3V0b3I9''@;'; put 'put ''bmV3IEwuU2FzOUpvYkV4ZWN1dG9yKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsLHRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZSx0aGlzLmpvYnNQYXRoLHRoaXMucmVxdWVzdENsaWVudCx0aGlzLnNhc2pzQ29uZmlnLmh0dHBzQWdlbnRPcHRpb25zKSx0aGlzLmNvbXB1dGVKb2JFeGVj''@;'; put 'put ''dXRvcj1uZXcgTC5Db21wdXRlSm9iRXhlY3V0b3IodGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwsdGhpcy5zYXNWaXlhQXBpQ2xpZW50KSx0aGlzLmplc0pvYkV4ZWN1dG9yPW5ldyBMLkplc0pvYkV4ZWN1dG9yKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsLHRoaXMuc2FzVml5YUFwaUNs''@;'; put 'put ''aWVudCl9Y3JlYXRlRm9sZGVyc0FuZFNlcnZpY2VzKFkscSxlZSxKLG5lKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7eWllbGQoMCxfLmFzeW5jRm9yRWFjaCkocSxpZT0+SSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7c3dpdGNoKGllLnR5cGUpe2Nh''@;'; put 'put ''c2UiZm9sZGVyIjp5aWVsZCB0aGlzLmNyZWF0ZUZvbGRlcihpZS5uYW1lLFksdm9pZCAwLGVlLEosbmUpO2JyZWFrO2Nhc2UiZmlsZSI6eWllbGQgdGhpcy5jcmVhdGVGaWxlKGllLm5hbWUsaWUuY29kZSxZLHZvaWQgMCxlZSxKKTticmVhaztjYXNlInNlcnZpY2UiOnlpZWxkIHRoaXMuY3Jl''@;'; put 'put ''YXRlSm9iRGVmaW5pdGlvbihpZS5uYW1lLGllLmNvZGUsWSx2b2lkIDAsZWUsSik7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYFVuaWRlbnRpZmllZCBtZW1iZXIgJyR7aWUubmFtZX0nIHByb3ZpZGVkLmApfSJmb2xkZXIiPT09aWUudHlwZSYmaWUubWVtYmVycyYmaWUubWVtYmVy''@;'; put 'put ''cy5sZW5ndGgmJih5aWVsZCB0aGlzLmNyZWF0ZUZvbGRlcnNBbmRTZXJ2aWNlcyhgJHtZfS8ke2llLm5hbWV9YCxpZS5tZW1iZXJzLGVlLEosbmUpKX0pKX0pfWlzTWV0aG9kU3VwcG9ydGVkKFkscSl7aWYoIXRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZXx8IXEuaW5jbHVkZXModGhpcy5z''@;'; put 'put ''YXNqc0NvbmZpZy5zZXJ2ZXJUeXBlKSl0aHJvdyBuZXcgRXJyb3IoYE1ldGhvZCAnJHtZfScgaXMgb25seSBzdXBwb3J0ZWQgb24gJHtxLmpvaW4oIiwgIil9IHNlcnZlcnMuYCl9ZW5hYmxlVmVyYm9zZU1vZGUoWSxxKXt2YXIgZWU7bnVsbD09PShlZT10aGlzLnJlcXVlc3RDbGllbnQpfHx2''@;'; put 'put ''b2lkIDA9PT1lZXx8ZWUuZW5hYmxlVmVyYm9zZU1vZGUoWSxxKX1kaXNhYmxlVmVyYm9zZU1vZGUoKXt2YXIgWTtudWxsPT09KFk9dGhpcy5yZXF1ZXN0Q2xpZW50KXx8dm9pZCAwPT09WXx8WS5kaXNhYmxlVmVyYm9zZU1vZGUoKX19fSwzNDY3OmZ1bmN0aW9uKHVlLFgseSl7InVzZSBzdHJp''@;'; put 'put ''Y3QiO3ZhciBJPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihOLEwsSyxVKXtyZXR1cm4gbmV3KEt8fChLPVByb21pc2UpKShmdW5jdGlvbihZLHEpe2Z1bmN0aW9uIGVlKGllKXt0cnl7bmUoVS5uZXh0KGllKSl9Y2F0Y2gobGUpe3EobGUpfX1mdW5jdGlvbiBKKGllKXt0cnl7bmUo''@;'; put 'put ''VS50aHJvdyhpZSkpfWNhdGNoKGxlKXtxKGxlKX19ZnVuY3Rpb24gbmUoaWUpe2llLmRvbmU/WShpZS52YWx1ZSk6ZnVuY3Rpb24gVyhZKXtyZXR1cm4gWSBpbnN0YW5jZW9mIEs/WTpuZXcgSyhmdW5jdGlvbihxKXtxKFkpfSl9KGllLnZhbHVlKS50aGVuKGVlLEopfW5lKChVPVUuYXBwbHko''@;'; put 'put ''TixMfHxbXSkpLm5leHQoKSl9KX0sXz10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oTil7cmV0dXJuIE4mJk4uX19lc01vZHVsZT9OOntkZWZhdWx0Ok59fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5TQVNqc0FwaUNsaWVu''@;'; put 'put ''dD12b2lkIDA7Y29uc3QgZz1fKHkoNjIzMCkpLEI9eSgzOTAwKSx3PXkoOTc3OCksUD15KDU3KSxGPXkoMjQ5KSxPPXkoNzA0KTtYLlNBU2pzQXBpQ2xpZW50PWNsYXNzIHp7Y29uc3RydWN0b3IoTCl7dGhpcy5yZXF1ZXN0Q2xpZW50PUx9Z2V0QWNjZXNzVG9rZW5Gb3JSZXF1ZXN0KEwpe3Jl''@;'; put 'put ''dHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtpZihMKXtjb25zdHthY2Nlc3NfdG9rZW46S309eWllbGQoMCxPLmdldFRva2VucykodGhpcy5yZXF1ZXN0Q2xpZW50LEwsQi5TZXJ2ZXJUeXBlLlNhc2pzKTtyZXR1cm4gS319KX1kZXBsb3koTCxLLFUpe3JldHVybiBJKHRo''@;'; put 'put ''aXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBXPXlpZWxkIHRoaXMuZ2V0QWNjZXNzVG9rZW5Gb3JSZXF1ZXN0KFUpO0wuYXBwTG9jPUwuYXBwTG9jfHxLO2NvbnN0e3Jlc3VsdDpZfT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQucG9zdCgiU0FTanNBcGkvZHJpdmUvZGVwbG95''@;'; put 'put ''IixMLFcsdm9pZCAwLHt9LHttYXhDb250ZW50TGVuZ3RoOjEvMCxtYXhCb2R5TGVuZ3RoOjEvMH0pO3JldHVybiBQcm9taXNlLnJlc29sdmUoWSl9KX1kZXBsb3laaXBGaWxlKEwsSyl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0e2NyZWF0ZVJlYWRTdHJl''@;'; put 'put ''YW06VX09eSgyOTc1KSxXPXlpZWxkIHRoaXMuZ2V0QWNjZXNzVG9rZW5Gb3JSZXF1ZXN0KEspLFk9eWllbGQgVShMKSxxPW5ldyBnLmRlZmF1bHQ7cS5hcHBlbmQoImZpbGUiLFkpO2NvbnN0IGVlPWBtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0ke3EuZ2V0Qm91bmRhcnkoKX1gLHty''@;'; put 'put ''ZXN1bHQ6Sn09eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QoIlNBU2pzQXBpL2RyaXZlL2RlcGxveS91cGxvYWQiLHEsVyxlZSx7fSx7bWF4Q29udGVudExlbmd0aDoxLzAsbWF4Qm9keUxlbmd0aDoxLzB9KTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKEopfSl9ZXhlY3V0ZUpvYihMLEss''@;'; put 'put ''VSl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IFc9VT9VLmFjY2Vzc190b2tlbjp2b2lkIDA7bGV0IFk7WT1MLl9wcm9ncmFtLnN0YXJ0c1dpdGgoIi8iKT9MLl9wcm9ncmFtOmAke0t9LyR7TC5fcHJvZ3JhbX1gO2NvbnN0IHE9eWllbGQgdGhpcy5yZXF1''@;'; put 'put ''ZXN0Q2xpZW50LnBvc3QoIlNBU2pzQXBpL3N0cC9leGVjdXRlIixPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe19kZWJ1ZzoxMzF9LEwpLHtfcHJvZ3JhbTpZfSksVyk7cmV0dXJue3Jlc3VsdDpxLnJlc3VsdCxsb2c6cS5sb2d9fSl9ZXhlY3V0ZVNjcmlwdChMLEs9InNhcyIsVSl7cmV0''@;'; put 'put ''dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IFc9eWllbGQgdGhpcy5nZXRBY2Nlc3NUb2tlbkZvclJlcXVlc3QoVSksWT17bG9nOiIifTtyZXR1cm4geWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QoIlNBU2pzQXBpL2NvZGUvZXhlY3V0ZSIse2NvZGU6TCxy''@;'; put 'put ''dW5UaW1lOkt9LFcpLnRoZW4ocT0+e2NvbnN0e2xvZzplZSxwcmludE91dHB1dDpKLHJlc3VsdDpuZX09cTtZLmxvZz1lZSxKJiYoWS5wcmludE91dHB1dD1KKSxuZSYmKFkud2Vib3V0PW5lKX0pLmNhdGNoKHE9Pnt0aHJvdygwLHcucHJlZml4TWVzc2FnZSkocSwiRXJyb3Igd2hpbGUgc2Vu''@;'; put 'put ''ZGluZyBQT1NUIHJlcXVlc3QgdG8gZXhlY3V0ZSBjb2RlLiAiKX0pLFl9KX1nZXRBY2Nlc3NUb2tlbihMLEspe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4oMCxQLmdldEFjY2Vzc1Rva2VuRm9yU2FzanMpKHRoaXMucmVxdWVzdENsaWVudCxMLEspfSl9''@;'; put 'put ''cmVmcmVzaFRva2VucyhMKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuKDAsRi5yZWZyZXNoVG9rZW5zRm9yU2FzanMpKHRoaXMucmVxdWVzdENsaWVudCxMKX0pfX19LDY5MDM6ZnVuY3Rpb24odWUsWCx5KXsidXNlIHN0cmljdCI7dmFyIEk9eSg0MTU1''@;'; put 'put ''KSxfPXkoNTEwOCksZz10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oTixMLEssVSl7cmV0dXJuIG5ldyhLfHwoSz1Qcm9taXNlKSkoZnVuY3Rpb24oWSxxKXtmdW5jdGlvbiBlZShpZSl7dHJ5e25lKFUubmV4dChpZSkpfWNhdGNoKGxlKXtxKGxlKX19ZnVuY3Rpb24gSihpZSl7dHJ5''@;'; put 'put ''e25lKFUudGhyb3coaWUpKX1jYXRjaChsZSl7cShsZSl9fWZ1bmN0aW9uIG5lKGllKXtpZS5kb25lP1koaWUudmFsdWUpOmZ1bmN0aW9uIFcoWSl7cmV0dXJuIFkgaW5zdGFuY2VvZiBLP1k6bmV3IEsoZnVuY3Rpb24ocSl7cShZKX0pfShpZS52YWx1ZSkudGhlbihlZSxKKX1uZSgoVT1VLmFw''@;'; put 'put ''cGx5KE4sTHx8W10pKS5uZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLlNlc3Npb25NYW5hZ2VyPXZvaWQgMDtjb25zdCBCPXkoMTIzMCksdz15KDEzOTUpLFA9eSg1OTI4KSxGPXkoOTc3OCk7WC5TZXNzaW9uTWFuYWdlcj1jbGFz''@;'; put 'put ''cyB6e2NvbnN0cnVjdG9yKEwsSyxVKXt0aGlzLnNlcnZlclVybD1MLHRoaXMuY29udGV4dE5hbWU9Syx0aGlzLnJlcXVlc3RDbGllbnQ9VSx0aGlzLmxvZ2dlZEVycm9ycz1bXSx0aGlzLnNlc3Npb25TdGF0ZUxpbmtFcnJvcj0iRXJyb3Igd2hpbGUgZ2V0dGluZyBzZXNzaW9uIHN0YXRlIGxp''@;'; put 'put ''bmsuICIsdGhpcy5zZXNzaW9ucz1bXSx0aGlzLmN1cnJlbnRDb250ZXh0PW51bGwsdGhpcy5zZXR0aW5nQ29udGV4dD0hMSx0aGlzLl9kZWJ1Zz0hMSx0aGlzLnByaW50ZWRTZXNzaW9uU3RhdGU9e3ByaW50ZWQ6ITEsc3RhdGU6Qi5TZXNzaW9uU3RhdGUuTm9TdGF0ZX0sTCYmKDAsUC5pc1Vy''@;'; put 'put ''bCkoTCl9Z2V0IGRlYnVnKCl7cmV0dXJuIHRoaXMuX2RlYnVnfXNldCBkZWJ1ZyhMKXt0aGlzLl9kZWJ1Zz1MfWlzU2Vzc2lvblZhbGlkKEwpe2lmKCFMKXJldHVybiExO2NvbnN0IEs9KChuZXcgRGF0ZSkuZ2V0VGltZSgpLW5ldyBEYXRlKEwuY3JlYXRpb25UaW1lU3RhbXApLmdldFRpbWUo''@;'; put 'put ''KSkvMWUzO3JldHVybiEoIUwuYXR0cmlidXRlc3x8Sz49TC5hdHRyaWJ1dGVzLnNlc3Npb25JbmFjdGl2ZVRpbWVvdXQpfXJlbW92ZVNlc3Npb25Gcm9tUG9vbChMKXt0aGlzLnNlc3Npb25zPXRoaXMuc2Vzc2lvbnMuZmlsdGVyKEs9PksuaWQhPT1MLmlkKX1yZW1vdmVFeHBpcmVkU2Vzc2lv''@;'; put 'put ''bnMoKXt0aGlzLnNlc3Npb25zPXRoaXMuc2Vzc2lvbnMuZmlsdGVyKEw9PnRoaXMuaXNTZXNzaW9uVmFsaWQoTCkpfXRocm93RXJyb3JzKEwsSyl7dGhyb3cgSz8oMCxGLnByZWZpeE1lc3NhZ2UpKG5ldyBFcnJvcihMLmpvaW4oIi4gIikpLEspOm5ldyBFcnJvcihMLm1hcChVPT5VLm1lc3Nh''@;'; put 'put ''Z2U/VS5tZXNzYWdlOlUpLmpvaW4oIi4gIikpfWdldFNlc3Npb24oTCl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IEs9W107bGV0IFU9ITE7Y29uc3QgVz0oKT0+e0subGVuZ3RoJiYhVSYmKFU9ITAsdGhpcy50aHJvd0Vycm9ycyhLKSl9O2lmKHRoaXMu''@;'; put 'put ''cmVtb3ZlRXhwaXJlZFNlc3Npb25zKCksdGhpcy5zZXNzaW9ucy5sZW5ndGgpe2NvbnN0IFk9dGhpcy5zZXNzaW9uc1swXTtyZXR1cm4gdGhpcy5yZW1vdmVTZXNzaW9uRnJvbVBvb2woWSksdGhpcy5jcmVhdGVTZXNzaW9ucyhMKS5jYXRjaChxPT57Sy5wdXNoKHEpfSksdGhpcy5jcmVhdGVB''@;'; put 'put ''bmRXYWl0Rm9yU2Vzc2lvbihMKS5jYXRjaChxPT57Sy5wdXNoKHEpfSksVygpLFl9e3RoaXMuY3JlYXRlU2Vzc2lvbnMoTCkuY2F0Y2gocT0+e0sucHVzaChxKX0pLHlpZWxkIHRoaXMuY3JlYXRlQW5kV2FpdEZvclNlc3Npb24oTCkuY2F0Y2gocT0+e0sucHVzaChxKX0pLHRoaXMucmVtb3Zl''@;'; put 'put ''RXhwaXJlZFNlc3Npb25zKCk7Y29uc3QgWT10aGlzLnNlc3Npb25zLnBvcCgpO3JldHVybiB0aGlzLnJlbW92ZVNlc3Npb25Gcm9tUG9vbChZKSxXKCksWX19KX1nZXRFcnJvck1lc3NhZ2UoTCxLLFUpe3JldHVybmAke1V9IHJlcXVlc3QgdG8gJHtLfSBmYWlsZWQgd2l0aCBzdGF0dXMgY29k''@;'; put 'put ''ZSAke0wucmVzcG9uc2Uuc3RhdHVzfHwidW5rbm93biJ9LiBgK0wucmVzcG9uc2UuZGF0YS5tZXNzYWdlfHwiIn1jbGVhclNlc3Npb24oTCxLKXtyZXR1cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgVT1gL2NvbXB1dGUvc2Vzc2lvbnMvJHtMfWA7cmV0dXJuIHlp''@;'; put 'put ''ZWxkIHRoaXMucmVxdWVzdENsaWVudC5kZWxldGUoVSxLKS50aGVuKCgpPT57dGhpcy5zZXNzaW9ucz10aGlzLnNlc3Npb25zLmZpbHRlcihXPT5XLmlkIT09TCl9KS5jYXRjaChXPT57dGhyb3coMCxGLnByZWZpeE1lc3NhZ2UpKHRoaXMuZ2V0RXJyb3JNZXNzYWdlKFcsVSwiREVMRVRFIiks''@;'; put 'put ''IkVycm9yIHdoaWxlIGRlbGV0aW5nIHNlc3Npb24uICIpfSl9KX1jcmVhdGVTZXNzaW9ucyhMKXtyZXR1cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgSz1bXTt0aGlzLnNlc3Npb25zLmxlbmd0aHx8KHlpZWxkKDAsUC5hc3luY0ZvckVhY2gpKG5ldyBBcnJheSgx''@;'; put 'put ''KSwoKT0+Zyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5jcmVhdGVBbmRXYWl0Rm9yU2Vzc2lvbihMKS5jYXRjaChVPT57Sy5wdXNoKFUpfSl9KSkpLEsubGVuZ3RoJiZ0aGlzLnRocm93RXJyb3JzKEssIkVycm9yIHdoaWxlIGNyZWF0aW5nIHNlc3Npb24uICIp''@;'; put 'put ''fSl9d2FpdEZvckN1cnJlbnRDb250ZXh0KCl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiBuZXcgUHJvbWlzZShMPT57Y29uc3QgSz1zZXRJbnRlcnZhbCgoKT0+e3RoaXMuY3VycmVudENvbnRleHQmJih0aGlzLnNldHRpbmdDb250ZXh0PSExLGNsZWFy''@;'; put 'put ''SW50ZXJ2YWwoSyksTCgpKX0sMTAwKX0pfSl9Y3JlYXRlQW5kV2FpdEZvclNlc3Npb24oTCl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3RoaXMuY3VycmVudENvbnRleHR8fCh0aGlzLnNldHRpbmdDb250ZXh0P3lpZWxkIHRoaXMud2FpdEZvckN1cnJlbnRDb250''@;'; put 'put ''ZXh0KCk6eWllbGQgdGhpcy5zZXRDdXJyZW50Q29udGV4dChMKSk7Y29uc3QgSz1gJHt0aGlzLnNlcnZlclVybH0vY29tcHV0ZS9jb250ZXh0cy8ke3RoaXMuY3VycmVudENvbnRleHQuaWR9L3Nlc3Npb25zYCx7cmVzdWx0OlUsZXRhZzpXfT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQucG9z''@;'; put 'put ''dChLLHt9LEwpLmNhdGNoKHE9Pnt0aHJvdygwLEYucHJlZml4TWVzc2FnZSkodGhpcy5nZXRFcnJvck1lc3NhZ2UocSxLLCJQT1NUIiksIkVycm9yIHdoaWxlIGNyZWF0aW5nIHNlc3Npb24uICIpfSk7VS5ldGFnPVc7Y29uc3QgWT1VLmxpbmtzLmZpbmQocT0+InN0YXRlIj09PXEucmVsKTtp''@;'; put 'put ''ZighWSl0aHJvdyB0aGlzLnNlc3Npb25TdGF0ZUxpbmtFcnJvcjtyZXR1cm4gVS5zdGF0ZVVybD1ZLmhyZWYseWllbGQgdGhpcy53YWl0Rm9yU2Vzc2lvbihVLFcsTCksdGhpcy5zZXNzaW9ucy5wdXNoKFUpLFV9KX1zZXRDdXJyZW50Q29udGV4dChMKXtyZXR1cm4gZyh0aGlzLHZvaWQgMCx2''@;'; put 'put ''b2lkIDAsZnVuY3Rpb24qKCl7aWYoIXRoaXMuY3VycmVudENvbnRleHQpe2NvbnN0IEs9YCR7dGhpcy5zZXJ2ZXJVcmx9L2NvbXB1dGUvY29udGV4dHM/bGltaXQ9MTAwMDBgO3RoaXMuc2V0dGluZ0NvbnRleHQ9ITA7Y29uc3R7cmVzdWx0OlV9PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5n''@;'; put 'put ''ZXQoSyxMKS5jYXRjaChxPT57dGhyb3coMCxGLnByZWZpeE1lc3NhZ2UpKHRoaXMuZ2V0RXJyb3JNZXNzYWdlKHEsSywiR0VUIiksIkVycm9yIHdoaWxlIGdldHRpbmcgbGlzdCBvZiBjb250ZXh0cy4gIil9KSxZPShVJiZVLml0ZW1zJiZVLml0ZW1zLmxlbmd0aD9VLml0ZW1zOltdKS5maW5k''@;'; put 'put ''KHE9PnEubmFtZT09PXRoaXMuY29udGV4dE5hbWUpO2lmKCFZKXRocm93IG5ldyBFcnJvcihgVGhlIGNvbnRleHQgJyR7dGhpcy5jb250ZXh0TmFtZX0nIHdhcyBub3QgZm91bmQgb24gdGhlIHNlcnZlciAke3RoaXMuc2VydmVyVXJsfS5gKTt0aGlzLmN1cnJlbnRDb250ZXh0PVksUHJvbWlz''@;'; put 'put ''ZS5yZXNvbHZlKCl9fSl9d2FpdEZvclNlc3Npb24oTCxLLFUpe3ZhciBXO3JldHVybiBnKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtsZXR7c3RhdGU6WX09TDtjb25zdHtzdGF0ZVVybDpxfT1MLGVlPUkubG9nZ2VyfHxfO2lmKFk9PT1CLlNlc3Npb25TdGF0ZS5QZW5kaW5nfHxZ''@;'; put 'put ''PT09Qi5TZXNzaW9uU3RhdGUuUnVubmluZ3x8WT09PUIuU2Vzc2lvblN0YXRlLk5vU3RhdGUpe2lmKHEpe3RoaXMuZGVidWcmJiF0aGlzLnByaW50ZWRTZXNzaW9uU3RhdGUucHJpbnRlZCYmKGVlLmluZm8oYFBvbGxpbmc6ICR7dGhpcy5zZXJ2ZXJVcmwrcX1gKSx0aGlzLnByaW50ZWRTZXNz''@;'; put 'put ''aW9uU3RhdGUucHJpbnRlZD0hMCk7Y29uc3QgSj1gJHt0aGlzLnNlcnZlclVybH0ke3F9P3dhaXQ9MzBgLHtyZXN1bHQ6bmUscmVzcG9uc2VTdGF0dXM6aWV9PXlpZWxkIHRoaXMuZ2V0U2Vzc2lvblN0YXRlKEosSyxVKS5jYXRjaChsZT0+e3Rocm93KDAsRi5wcmVmaXhNZXNzYWdlKShsZSwi''@;'; put 'put ''RXJyb3Igd2hpbGUgd2FpdGluZyBmb3Igc2Vzc2lvbi4gIil9KTtpZihZPW5lLnRyaW0oKSx0aGlzLmRlYnVnJiZ0aGlzLnByaW50ZWRTZXNzaW9uU3RhdGUuc3RhdGUhPT1ZJiYoZWUuaW5mbyhgQ3VycmVudCBzZXNzaW9uIHN0YXRlIGlzICcke1l9J2ApLHRoaXMucHJpbnRlZFNlc3Npb25T''@;'; put 'put ''dGF0ZS5zdGF0ZT1ZLHRoaXMucHJpbnRlZFNlc3Npb25TdGF0ZS5wcmludGVkPSExKSwhWSl7Y29uc3QgbGU9bmV3IHcuTm9TZXNzaW9uU3RhdGVFcnJvcihpZSx0aGlzLnNlcnZlclVybCtxLG51bGw9PT0oVz1MLmxpbmtzLmZpbmQobWU9PiJsb2ciPT09bWUucmVsKSl8fHZvaWQgMD09PVc/''@;'; put 'put ''dm9pZCAwOlcuaHJlZik7cmV0dXJuIHRoaXMubG9nZ2VkRXJyb3JzLmZpbmQobWU9Pm1lLnNlcnZlclJlc3BvbnNlU3RhdHVzPT09bGUuc2VydmVyUmVzcG9uc2VTdGF0dXMpfHwodGhpcy5sb2dnZWRFcnJvcnMucHVzaChsZSksZWUuaW5mbyhsZS5tZXNzYWdlKSkseWllbGQgdGhpcy53YWl0''@;'; put 'put ''Rm9yU2Vzc2lvbihMLEssVSl9cmV0dXJuIHRoaXMubG9nZ2VkRXJyb3JzPVtdLFl9dGhyb3cgdGhpcy5zZXNzaW9uU3RhdGVMaW5rRXJyb3J9cmV0dXJuIHRoaXMubG9nZ2VkRXJyb3JzPVtdLFl9KX1nZXRTZXNzaW9uU3RhdGUoTCxLLFUpe3JldHVybiBnKHRoaXMsdm9pZCAwLHZvaWQgMCxm''@;'; put 'put ''dW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmdldChMLFUsInRleHQvcGxhaW4iLHsiSWYtTm9uZS1NYXRjaCI6S30pLnRoZW4oVz0+KHtyZXN1bHQ6Vy5yZXN1bHQscmVzcG9uc2VTdGF0dXM6Vy5zdGF0dXN9KSkuY2F0Y2goVz0+e3Rocm93KDAsRi5wcmVmaXhN''@;'; put 'put ''ZXNzYWdlKSh0aGlzLmdldEVycm9yTWVzc2FnZShXLEwsIkdFVCIpLCJFcnJvciB3aGlsZSBnZXR0aW5nIHNlc3Npb24gc3RhdGUuICIpfSl9KX1nZXRWYXJpYWJsZShMLEssVSl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IFc9YCR7dGhpcy5zZXJ2ZXJV''@;'; put 'put ''cmx9L2NvbXB1dGUvc2Vzc2lvbnMvJHtMfS92YXJpYWJsZXMvJHtLfWA7cmV0dXJuIHlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5nZXQoVyxVKS5jYXRjaChZPT57dGhyb3coMCxGLnByZWZpeE1lc3NhZ2UpKHRoaXMuZ2V0RXJyb3JNZXNzYWdlKFksVywiR0VUIiksYEVycm9yIHdoaWxlIGZl''@;'; put 'put ''dGNoaW5nIHNlc3Npb24gdmFyaWFibGUgJyR7S30nLiBgKX0pfSl9fX0sMTYyMjpmdW5jdGlvbih1ZSxYLHkpeyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDQxNTUpLF89eSg1MTA4KSxnPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihVLFcsWSxxKXtyZXR1cm4gbmV3KFl8fChZPVByb21p''@;'; put 'put ''c2UpKShmdW5jdGlvbihKLG5lKXtmdW5jdGlvbiBpZShfZSl7dHJ5e21lKHEubmV4dChfZSkpfWNhdGNoKFRlKXtuZShUZSl9fWZ1bmN0aW9uIGxlKF9lKXt0cnl7bWUocS50aHJvdyhfZSkpfWNhdGNoKFRlKXtuZShUZSl9fWZ1bmN0aW9uIG1lKF9lKXtfZS5kb25lP0ooX2UudmFsdWUpOmZ1''@;'; put 'put ''bmN0aW9uIGVlKEope3JldHVybiBKIGluc3RhbmNlb2YgWT9KOm5ldyBZKGZ1bmN0aW9uKG5lKXtuZShKKX0pfShfZS52YWx1ZSkudGhlbihpZSxsZSl9bWUoKHE9cS5hcHBseShVLFd8fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVl''@;'; put 'put ''OiEwfSksWC5leGVjdXRlT25Db21wdXRlQXBpPXZvaWQgMDtjb25zdCBCPXkoNzc1Nyksdz15KDk3NzgpLFA9eSgzNjA3KSxGPXkoNzA0KSxPPXkoNTkyOCksej15KDcxNCksTj15KDEzNDMpLEw9eSg2NDk2KTtYLmV4ZWN1dGVPbkNvbXB1dGVBcGk9ZnVuY3Rpb24gSyhVLFcsWSxxLGVlLEos''@;'; put 'put ''bmUsaWU9bnVsbCxsZT0hMSxtZT0hMSxfZT0hMCxUZSxTZT0hMSxqZSl7dmFyIFYscDtyZXR1cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7bGV0IGI9KG5lfHx7fSkuYWNjZXNzX3Rva2VuO25lJiYoe2FjY2Vzc190b2tlbjpifT15aWVsZCgwLEYuZ2V0VG9rZW5zKShVLG5l''@;'; put 'put ''KSk7Y29uc3QgeD1JLmxvZ2dlcnx8Xzt0cnl7bGV0IEM7Y29uc3QgVD15aWVsZCBXLmdldFNlc3Npb24oYikuY2F0Y2goeGU9Pnt0aHJvdygwLHcucHJlZml4TWVzc2FnZSkoeGUsIkVycm9yIHdoaWxlIGdldHRpbmcgc2Vzc2lvbi4gIil9KTtpZihDPVQuaWQsU2Upe2NvbnN0e3Jlc3VsdDp4''@;'; put 'put ''ZX09eWllbGQgVy5nZXRWYXJpYWJsZShDLCJTWVNKT0JJRCIsYikuY2F0Y2godmU9Pnt0aHJvdygwLHcucHJlZml4TWVzc2FnZSkodmUsIkVycm9yIHdoaWxlIGdldHRpbmcgc2Vzc2lvbiB2YXJpYWJsZS4gIil9KTtpZih4ZSYmeGUudmFsdWUpe2NvbnN0IHZlPVk/cS5zcGxpdChZKS5qb2lu''@;'; put 'put ''KCIiKS5yZXBsYWNlKC9eXC8vLCIiKTpxOyhJLmxvZ2dlcnx8XykuaW5mbyhgVHJpZ2dlcmluZyAnJHt2ZX0nIHdpdGggUElEICR7eGUudmFsdWV9IGF0ICR7KDAsQi50aW1lc3RhbXBUb1lZWVlNTURESEhNTVNTKSgpfWApfX1sZXQgSDtIPSgwLE8uaXNSZWxhdGl2ZVBhdGgpKHEpP2BleGVj''@;'; put 'put ''LSR7cS5pbmNsdWRlcygiLyIpP3Euc3BsaXQoIi8iKVsxXTpxfWA6cS5zcGxpdCgiLyIpLnBvcCgpO2xldCBqPXtTWVNfSkVTX0pPQl9VUkk6IiIsX3Byb2dyYW06KDAsTy5pc1JlbGF0aXZlUGF0aCkocSk/WSsiLyIrcTpxfTtqZSYmKGo9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9''@;'; put 'put ''LGopLGplKSksbGUmJihqPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxqKSx7X0RFQlVHOjEzMX0pKTtsZXQgRT1bXTtpZSYmKEpTT04uc3RyaW5naWZ5KGllKS5pbmNsdWRlcygiOyIpPyhFPXlpZWxkKDAsTC51cGxvYWRUYWJsZXMpKFUsaWUsYikuY2F0Y2goeGU9Pnt0aHJvdygw''@;'; put 'put ''LHcucHJlZml4TWVzc2FnZSkoeGUsIkVycm9yIHdoaWxlIHVwbG9hZGluZyB0YWJsZXMuICIpfSksai5fd2ViaW5fZmlsZV9jb3VudD1FLmxlbmd0aCxFLmZvckVhY2goKHhlLHZlKT0+e2pbYF93ZWJpbl9maWxldXJpJHt2ZSsxfWBdPWAvZmlsZXMvZmlsZXMvJHt4ZS5maWxlLmlkfWAsaltg''@;'; put 'put ''X3dlYmluX25hbWUke3ZlKzF9YF09eGUudGFibGVOYW1lfSkpOmo9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGopLCgwLHouZm9ybWF0RGF0YUZvclJlcXVlc3QpKGllKSkpO2NvbnN0IG09e25hbWU6SHx8IkRlZmF1bHQgSm9iIE5hbWUiLGRlc2NyaXB0aW9uOiJQb3dlcmVkIGJ5''@;'; put 'put ''IFNBU2pzIixjb2RlOmVlLHZhcmlhYmxlczpqLHZlcnNpb246Mn0se3Jlc3VsdDpBfT15aWVsZCBVLnBvc3QoYC9jb21wdXRlL3Nlc3Npb25zLyR7Q30vam9ic2AsbSxiKS5jYXRjaCh4ZT0+e3Rocm93KDAsdy5wcmVmaXhNZXNzYWdlKSh4ZSwiRXJyb3Igd2hpbGUgcG9zdGluZyBqb2IuICIp''@;'; put 'put ''fSk7aWYoIV9lKXJldHVybiBUO2xlJiYoeC5pbmZvKGBKb2IgaGFzIGJlZW4gc3VibWl0dGVkIGZvciAnJHtIfScuYCkseC5pbmZvKGBZb3UgY2FuIG1vbml0b3IgdGhlIGpvYiBwcm9ncmVzcyBhdCAnJHtVLmdldEJhc2VVcmwoKX0ke0EubGlua3MuZmluZCh4ZT0+InN0YXRlIj09PXhlLnJl''@;'; put 'put ''bCkuaHJlZn0nLmApKTtjb25zdCB0ZT15aWVsZCgwLE4ucG9sbEpvYlN0YXRlKShVLEEsbGUsbmUsVGUse3Nlc3Npb246VCxzZXNzaW9uTWFuYWdlcjpXfSkuY2F0Y2goeGU9PmcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3ZhciB2ZSxYZTtjb25zdCB6ZT1udWxsPT09KHZlPXhl''@;'; put 'put ''Py5yZXNwb25zZSl8fHZvaWQgMD09PXZlP3ZvaWQgMDp2ZS5kYXRhLERlPS9lcnI9WzAtOV0qLC8uZXhlYyh6ZSk7aWYoIjUxMTMiPT09KG51bGw9PT0oWGU9RGU/LlswXSl8fHZvaWQgMD09PVhlP3ZvaWQgMDpYZS5zbGljZSg0LC0xKSkpe2NvbnN0IEllPUEubGlua3MuZmluZChWZT0+InVw''@;'; put 'put ''Ij09PVZlLnJlbCkuaHJlZisiL2xvZyI7eGUubG9nPXlpZWxkKDAsTy5mZXRjaExvZ0J5Q2h1bmtzKShVLGIsSWUsMWU2KX10aHJvdygwLHcucHJlZml4TWVzc2FnZSkoeGUsIkVycm9yIHdoaWxlIHBvbGxpbmcgam9iIHN0YXR1cy4gIil9KSk7bmUmJih7YWNjZXNzX3Rva2VuOmJ9PXlpZWxk''@;'; put 'put ''KDAsRi5nZXRUb2tlbnMpKFUsbmUpKTtjb25zdHtyZXN1bHQ6c2V9PXlpZWxkIFUuZ2V0KGAvY29tcHV0ZS9zZXNzaW9ucy8ke0N9L2pvYnMvJHtBLmlkfWAsYikuY2F0Y2goeGU9Pnt0aHJvdygwLHcucHJlZml4TWVzc2FnZSkoeGUsIkVycm9yIHdoaWxlIGdldHRpbmcgam9iLiAiKX0pO2xl''@;'; put 'put ''dCB3ZSxVZT0iIjtjb25zdCBKZT1zZS5saW5rcy5maW5kKHhlPT4ibG9nIj09PXhlLnJlbCk7aWYobGUmJkplKXtjb25zdCB4ZT1gJHtKZS5ocmVmfS9jb250ZW50YCx2ZT1udWxsIT09KHA9bnVsbD09PShWPXNlLmxvZ1N0YXRpc3RpY3MpfHx2b2lkIDA9PT1WP3ZvaWQgMDpWLmxpbmVDb3Vu''@;'; put 'put ''dCkmJnZvaWQgMCE9PXA/cDoxZTY7VWU9eWllbGQoMCxPLmZldGNoTG9nQnlDaHVua3MpKFUsYix4ZSx2ZSl9aWYodGU9PT1OLkpvYlN0YXRlLkZhaWxlZHx8dGU9PT1OLkpvYlN0YXRlLkVycm9yKXRocm93IG5ldyBQLkNvbXB1dGVKb2JFeGVjdXRpb25FcnJvcihzZSxVZSk7aWYoIW1lKXJl''@;'; put 'put ''dHVybntqb2I6c2UsbG9nOlVlfTtjb25zdCBvdD1gL2NvbXB1dGUvc2Vzc2lvbnMvJHtDfS9maWxlcmVmcy9fd2Vib3V0L2NvbnRlbnRgO3JldHVybiB3ZT15aWVsZCBVLmdldChvdCxiLCJ0ZXh0L3BsYWluIikuY2F0Y2goeGU9PmcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3Zh''@;'; put 'put ''ciB2ZSxYZTtpZih4ZSBpbnN0YW5jZW9mIFAuTm90Rm91bmRFcnJvciYmSmUpe2NvbnN0IHplPWAke0plLmhyZWZ9L2NvbnRlbnRgLERlPW51bGwhPT0oWGU9bnVsbD09PSh2ZT1zZS5sb2dTdGF0aXN0aWNzKXx8dm9pZCAwPT09dmU/dm9pZCAwOnZlLmxpbmVDb3VudCkmJnZvaWQgMCE9PVhl''@;'; put 'put ''P1hlOjFlNjtyZXR1cm4gVWU9eWllbGQoMCxPLmZldGNoTG9nQnlDaHVua3MpKFUsYix6ZSxEZSksUHJvbWlzZS5yZWplY3Qoe3N0YXR1czo1MDAsbG9nOlVlfSl9cmV0dXJue3Jlc3VsdDpKU09OLnN0cmluZ2lmeSh4ZSl9fSkpLHlpZWxkIFcuY2xlYXJTZXNzaW9uKEMsYikuY2F0Y2goeGU9''@;'; put 'put ''Pnt0aHJvdygwLHcucHJlZml4TWVzc2FnZSkoeGUsIkVycm9yIHdoaWxlIGNsZWFyaW5nIHNlc3Npb24uICIpfSkse3Jlc3VsdDp3ZT8ucmVzdWx0LGxvZzpVZX19Y2F0Y2goQyl7aWYoNDA0PT09Qy5zdGF0dXMpcmV0dXJuIEsoVSxXLFkscSxlZSxKLG5lLGllLGxlLCExLCEwKTt0aHJvdygw''@;'; put 'put ''LHcucHJlZml4TWVzc2FnZSkoQywiRXJyb3Igd2hpbGUgZXhlY3V0aW5nIHNjcmlwdC4gIil9fSl9fSw3NDU4OmZ1bmN0aW9uKHVlLFgseSl7InVzZSBzdHJpY3QiO3ZhciBJPXkoNDE1NSksXz10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oUCxGLE8seil7cmV0dXJuIG5ldyhPfHwo''@;'; put 'put ''Tz1Qcm9taXNlKSkoZnVuY3Rpb24oTCxLKXtmdW5jdGlvbiBVKHEpe3RyeXtZKHoubmV4dChxKSl9Y2F0Y2goZWUpe0soZWUpfX1mdW5jdGlvbiBXKHEpe3RyeXtZKHoudGhyb3cocSkpfWNhdGNoKGVlKXtLKGVlKX19ZnVuY3Rpb24gWShxKXtxLmRvbmU/TChxLnZhbHVlKTpmdW5jdGlvbiBO''@;'; put 'put ''KEwpe3JldHVybiBMIGluc3RhbmNlb2YgTz9MOm5ldyBPKGZ1bmN0aW9uKEspe0soTCl9KX0ocS52YWx1ZSkudGhlbihVLFcpfVkoKHo9ei5hcHBseShQLEZ8fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5nZXRGaWxl''@;'; put 'put ''U3RyZWFtPXZvaWQgMDtjb25zdCBnPXkoMjk3NSksQj15KDc3NTcpO1guZ2V0RmlsZVN0cmVhbT0oUCxGKT0+Xyh2b2lkIDAsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdHtjcmVhdGVXcml0ZVN0cmVhbTpPfT15KDI5NzUpLHo9Rnx8SS5jd2QoKTtpZih5aWVsZCgwLGcuaXNGb2xk''@;'; put 'put ''ZXIpKHopKXtjb25zdCBMPWAke1AubmFtZXx8ImpvYiJ9LSR7KDAsQi5nZW5lcmF0ZVRpbWVzdGFtcCkoKX0ubG9nYCxVPXkoMjUyMCkuam9pbihGfHxJLmN3ZCgpLEwpO3JldHVybiB5aWVsZCBPKFUpfXJldHVybiB5aWVsZCBPKHopfSl9LDEzNDM6ZnVuY3Rpb24odWUsWCx5KXsidXNlIHN0''@;'; put 'put ''cmljdCI7dmFyIEk9eSg0MTU1KSxfPXkoNTEwOCksZz10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oVyxZLHEsZWUpe3JldHVybiBuZXcocXx8KHE9UHJvbWlzZSkpKGZ1bmN0aW9uKG5lLGllKXtmdW5jdGlvbiBsZShUZSl7dHJ5e19lKGVlLm5leHQoVGUpKX1jYXRjaChTZSl7aWUo''@;'; put 'put ''U2UpfX1mdW5jdGlvbiBtZShUZSl7dHJ5e19lKGVlLnRocm93KFRlKSl9Y2F0Y2goU2Upe2llKFNlKX19ZnVuY3Rpb24gX2UoVGUpe1RlLmRvbmU/bmUoVGUudmFsdWUpOmZ1bmN0aW9uIEoobmUpe3JldHVybiBuZSBpbnN0YW5jZW9mIHE/bmU6bmV3IHEoZnVuY3Rpb24oaWUpe2llKG5lKX0p''@;'; put 'put ''fShUZS52YWx1ZSkudGhlbihsZSxtZSl9X2UoKGVlPWVlLmFwcGx5KFcsWXx8W10pKS5uZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLmRvUG9sbD1YLnBvbGxKb2JTdGF0ZT1YLkpvYlN0YXRlPXZvaWQgMDtjb25zdCBCPXkoNzA0''@;'; put 'put ''KSx3PXkoMTM5NSksUD15KDEyMzApLEY9eSg1OTI4KTt2YXIgTyxXOyhXPU89WC5Kb2JTdGF0ZXx8KFguSm9iU3RhdGU9e30pKS5Db21wbGV0ZWQ9ImNvbXBsZXRlZCIsVy5SdW5uaW5nPSJydW5uaW5nIixXLlBlbmRpbmc9InBlbmRpbmciLFcuVW5hdmFpbGFibGU9InVuYXZhaWxhYmxlIixX''@;'; put 'put ''Lk5vU3RhdGU9IiIsVy5GYWlsZWQ9ImZhaWxlZCIsVy5FcnJvcj0iZXJyb3IiLFgucG9sbEpvYlN0YXRlPWZ1bmN0aW9uIHooVyxZLHEsZWUsSixuZSl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IGllPUkubG9nZ2VyfHxfLGxlPUo/LnN0cmVhbUxvZ3x8''@;'; put 'put ''ITEsbWU9W3ttYXhQb2xsQ291bnQ6MjAwLHBvbGxJbnRlcnZhbDozMDB9LHttYXhQb2xsQ291bnQ6MzAwLHBvbGxJbnRlcnZhbDozZTN9LHttYXhQb2xsQ291bnQ6NTAwLHBvbGxJbnRlcnZhbDozZTR9LHttYXhQb2xsQ291bnQ6MzQwMCxwb2xsSW50ZXJ2YWw6NmU0fV07bGV0IF9lO2lmKHZv''@;'; put 'put ''aWQgMCE9PUope19lPVtKXTtsZXR7cG9sbFN0cmF0ZWd5Onh9PUo7dm9pZCAwIT09eD8oVSh4KSx4PXguc29ydCgoQyxUKT0+Qy5tYXhQb2xsQ291bnQtVC5tYXhQb2xsQ291bnQpLF9lPVsuLi5fZSwuLi54XSk6X2U9Wy4uLl9lLC4uLm1lXX1lbHNlIF9lPW1lO2xldCBUZT1fZS5zcGxpY2Uo''@;'; put 'put ''MCwxKVswXTtKPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxUZSksSnx8e30pO2NvbnN0IFNlPVkubGlua3MuZmluZCh4PT4ic3RhdGUiPT09eC5yZWwpO2lmKCFTZSl0aHJvdyBuZXcgRXJyb3IoIkpvYiBzdGF0ZSBsaW5rIHdhcyBub3QgZm91bmQuIik7bGV0IHAsamU9eWllbGQg''@;'; put 'put ''TihXLFksTy5Ob1N0YXRlLHEsZWUpLmNhdGNoKHg9PihpZS5lcnJvcihgRXJyb3IgZmV0Y2hpbmcgam9iIHN0YXRlIGZyb20gJHtTZS5ocmVmfS4gU3RhcnRpbmcgcG9sbCwgYXNzdW1pbmcgam9iIHRvIGJlIHJ1bm5pbmcuYCx4KSxPLlVuYXZhaWxhYmxlKSksVj0wO2lmKGplPT09Ty5Db21w''@;'; put 'put ''bGV0ZWQpcmV0dXJuIFByb21pc2UucmVzb2x2ZShqZSk7aWYobGUmJigwLEYuaXNOb2RlKSgpKXtjb25zdHtnZXRGaWxlU3RyZWFtOnh9PXkoNzQ1OCk7cD15aWVsZCB4KFksSi5sb2dGb2xkZXJQYXRoKX1sZXQgYj15aWVsZCgwLFguZG9Qb2xsKShXLFksamUscSxWLEosZWUsbGUscCxuZSk7''@;'; put 'put ''aWYoamU9Yi5zdGF0ZSxWPWIucG9sbENvdW50LCFMKGplKXx8Vj49Si5tYXhQb2xsQ291bnQmJiFfZS5sZW5ndGgpcmV0dXJuIGplO2Zvcig7X2UubGVuZ3RoJiZMKGplKTspVGU9X2Uuc3BsaWNlKDAsMSlbMF0sSiYmKFRlLmxvZ0ZvbGRlclBhdGg9Si5sb2dGb2xkZXJQYXRoKSxiPXlpZWxk''@;'; put 'put ''KDAsWC5kb1BvbGwpKFcsWSxqZSxxLFYsVGUsZWUsbGUscCxuZSksamU9Yi5zdGF0ZSxWPWIucG9sbENvdW50O3JldHVybiBwJiZwLmVuZCgpLGplfSl9O2NvbnN0IE49KFcsWSxxLGVlLEopPT5nKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IG5lPVkubGlua3MuZmlu''@;'; put 'put ''ZChpZT0+InN0YXRlIj09PWllLnJlbCk7aWYoTChxKSl7bGV0IGllO0omJihpZT15aWVsZCgwLEIuZ2V0VG9rZW5zKShXLEopKTtjb25zdHtyZXN1bHQ6bGV9PXlpZWxkIFcuZ2V0KGAke25lLmhyZWZ9P19hY3Rpb249d2FpdCZ3YWl0PTMwMGAsaWU/LmFjY2Vzc190b2tlbiwidGV4dC9wbGFp''@;'; put 'put ''biIse30sZWUpLmNhdGNoKG1lPT57dGhyb3cgbmV3IHcuSm9iU3RhdGVQb2xsRXJyb3IoWS5pZCxtZSl9KTtyZXR1cm4gbGUudHJpbSgpfXJldHVybiBxfSksTD1XPT5XPT09Ty5SdW5uaW5nfHxXPT09Ty5Ob1N0YXRlfHxXPT09Ty5QZW5kaW5nfHxXPT09Ty5VbmF2YWlsYWJsZTtYLmRvUG9s''@;'; put 'put ''bD0oVyxZLHEsZWUsSixuZSxpZSxsZSxtZSxfZSk9Pmcodm9pZCAwLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7dmFyIFRlLFNlO2NvbnN0e21heFBvbGxDb3VudDpqZSxwb2xsSW50ZXJ2YWw6Vn09bmUscD1JLmxvZ2dlcnx8XyxiPVkubGlua3MuZmluZChFPT4ic3RhdGUiPT09RS5yZWwp''@;'; put 'put ''O2xldCBDPTAsVD1xLEg9Ty5Ob1N0YXRlLGo9MDtmb3IoO0woVCkmJko8PWplOyl7aWYoX2UmJkomJkolMTA9PTAmJmllKXtjb25zdHtzZXNzaW9uOm0sc2Vzc2lvbk1hbmFnZXI6QX09X2Use3N0YXRlVXJsOmFlLGV0YWc6dGUsaWQ6c2V9PW0se2FjY2Vzc190b2tlbjp3ZX09aWUse2lkOlVl''@;'; put 'put ''fT1ZLHtyZXN1bHQ6SmUscmVzcG9uc2VTdGF0dXM6b3R9PXlpZWxkIEEuZ2V0U2Vzc2lvblN0YXRlKGFlLHRlLHdlKS5jYXRjaCh2ZT0+e3Rocm93IG5ldyB3LkpvYlN0YXRlUG9sbEVycm9yKFVlLHZlKX0pLHhlPXZlPT5bUC5TZXNzaW9uU3RhdGUuUnVubmluZyxQLlNlc3Npb25TdGF0ZS5J''@;'; put 'put ''ZGxlXS5pbmNsdWRlcyh2ZSk7aWYoIXhlKEplKXx8MjAwIT09b3Qpe0EuY2xlYXJTZXNzaW9uKHNlLHdlKTtjb25zdCB2ZT14ZShKZSk/YFNlc3Npb24gcmVzcG9uc2Ugc3RhdHVzIGlzIG5vdCAyMDAuIFNlc3Npb24gcmVzcG9uc2Ugc3RhdHVzIGlzICR7b3R9LmA6YFNlc3Npb24gc3RhdGUg''@;'; put 'put ''b2YgdGhlIGpvYiBpcyBub3QgJ3J1bm5pbmcnIG9yICdpZGxlJy4gU2Vzc2lvbiBzdGF0ZSBpcyAnJHtKZX0nYDt0aHJvdyBuZXcgdy5Kb2JTdGF0ZVBvbGxFcnJvcihVZSxuZXcgRXJyb3IodmUpKX19VD15aWVsZCBOKFcsWSxULGVlLGllKS5jYXRjaChtPT57aWYoQysrLEo+PWplfHxDPj01''@;'; put 'put ''KXRocm93IG07cmV0dXJuIHAuZXJyb3IoYEVycm9yIGZldGNoaW5nIGpvYiBzdGF0ZSBmcm9tICR7Yi5ocmVmfS4gUmVzdW1pbmcgcG9sbCwgYXNzdW1pbmcgam9iIHRvIGJlIHJ1bm5pbmcuYCxtKSxPLlVuYXZhaWxhYmxlfSksSisrO2NvbnN0IEU9WS5saW5rcy5maW5kKG09PiJzZWxmIj09''@;'; put 'put ''PW0ucmVsKS5ocmVmO2lmKGxlKXtjb25zdHtyZXN1bHQ6bX09eWllbGQgVy5nZXQoRSxpZT8uYWNjZXNzX3Rva2VuKSxBPW51bGwhPT0oU2U9bnVsbD09PShUZT1tLmxvZ1N0YXRpc3RpY3MpfHx2b2lkIDA9PT1UZT92b2lkIDA6VGUubGluZUNvdW50KSYmdm9pZCAwIT09U2U/U2U6MWU2LHtz''@;'; put 'put ''YXZlTG9nOmFlfT0oMCxGLmlzTm9kZSkoKT95KDIwODApOntzYXZlTG9nOm51bGx9O2FlJiYoeWllbGQgYWUoWSxXLGosQSxtZSxpZT8uYWNjZXNzX3Rva2VuKSksais9QX1lZSYmSCE9PVQmJihwLmluZm8oYFBvbGxpbmc6ICR7Vy5nZXRCYXNlVXJsKCkrRX0vc3RhdGVgKSxwLmluZm8oYEN1''@;'; put 'put ''cnJlbnQgam9iIHN0YXRlOiAke1R9YCksSD1UKSxUIT09Ty5VbmF2YWlsYWJsZSYmQz4wJiYoQz0wKSxUIT09Ty5Db21wbGV0ZWQmJih5aWVsZCgwLEYuZGVsYXkpKFYpKX1yZXR1cm57c3RhdGU6VCxwb2xsQ291bnQ6Sn19KTtjb25zdCBVPVc9Pntjb25zdCBZPShxLGVlKT0+e3Rocm93IG5l''@;'; put 'put ''dyBFcnJvcihgUG9sbCBzdHJhdGVnaWVzIGFyZSBub3QgdmFsaWQuJHtxP2AgJHtxfWA6IiJ9JHtlZT9gIEludmFsaWQgcG9sbCBzdHJhdGVneTogXG4ke0pTT04uc3RyaW5naWZ5KGVlLG51bGwsMil9YDoiIn1gKX07Vy5mb3JFYWNoKChxLGVlKT0+e2NvbnN0e21heFBvbGxDb3VudDpKLHBv''@;'; put 'put ''bGxJbnRlcnZhbDpuZX09cTtKPDE/WSgiJ21heFBvbGxDb3VudCcgaGFzIHRvIGJlIGdyZWF0ZXIgdGhhbiAwLiIscSk6MCE9PWVlP0o8PVdbZWUtMV0ubWF4UG9sbENvdW50JiZZKCInbWF4UG9sbENvdW50JyBoYXMgdG8gYmUgZ3JlYXRlciB0aGFuICdtYXhQb2xsQ291bnQnIGluIHByZXZp''@;'; put 'put ''b3VzIHBvbGwgc3RyYXRlZ3kuIixxKTpuZTwxJiZZKCIncG9sbEludGVydmFsJyBoYXMgdG8gYmUgZ3JlYXRlciB0aGFuIDAuIixxKX0pfX0sMjA4MDpmdW5jdGlvbih1ZSxYLHkpeyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDQxNTUpLF89eSg1MTA4KSxnPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxm''@;'; put 'put ''dW5jdGlvbihGLE8seixOKXtyZXR1cm4gbmV3KHp8fCh6PVByb21pc2UpKShmdW5jdGlvbihLLFUpe2Z1bmN0aW9uIFcoZWUpe3RyeXtxKE4ubmV4dChlZSkpfWNhdGNoKEope1UoSil9fWZ1bmN0aW9uIFkoZWUpe3RyeXtxKE4udGhyb3coZWUpKX1jYXRjaChKKXtVKEopfX1mdW5jdGlvbiBx''@;'; put 'put ''KGVlKXtlZS5kb25lP0soZWUudmFsdWUpOmZ1bmN0aW9uIEwoSyl7cmV0dXJuIEsgaW5zdGFuY2VvZiB6P0s6bmV3IHooZnVuY3Rpb24oVSl7VShLKX0pfShlZS52YWx1ZSkudGhlbihXLFkpfXEoKE49Ti5hcHBseShGLE98fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHko''@;'; put 'put ''WCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5zYXZlTG9nPXZvaWQgMDtjb25zdCBCPXkoNTkyOCksdz15KDYxMzEpO1guc2F2ZUxvZz1mdW5jdGlvbiBQKEYsTyx6LE4sTCxLKXtyZXR1cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7aWYoIUspdGhyb3cgbmV3IEVycm9y''@;'; put 'put ''KGBMb2dzIGZvciBqb2IgJHtGLmlkfSBjYW5ub3QgYmUgZmV0Y2hlZCB3aXRob3V0IGEgdmFsaWQgYWNjZXNzIHRva2VuLmApO2lmKCFMKXRocm93IG5ldyBFcnJvcihgTG9ncyBmb3Igam9iICR7Ri5pZH0gY2Fubm90IGJlIHdyaXR0ZW4gd2l0aG91dCBhIHZhbGlkIHdyaXRlIHN0cmVhbS5g''@;'; put 'put ''KTtjb25zdCBVPUkubG9nZ2VyfHxfLFc9Ri5saW5rcy5maW5kKHE9PiJsb2ciPT09cS5yZWwpO2lmKCFXKXRocm93IG5ldyBFcnJvcihgTG9nIFVSTCBmb3Igam9iICR7Ri5pZH0gd2FzIG5vdCBmb3VuZC5gKTtjb25zdCBZPXlpZWxkKDAsQi5mZXRjaExvZykoTyxLLGAke1cuaHJlZn0vY29u''@;'; put 'put ''dGVudGAseixOKTtVLmluZm8oYFdyaXRpbmcgbG9ncyB0byAke0wucGF0aH1gKSx5aWVsZCgwLHcud3JpdGVTdHJlYW0pKEwsWXx8IiIpfSl9fSw2NDk2OmZ1bmN0aW9uKHVlLFgseSl7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbih3LFAsRixPKXty''@;'; put 'put ''ZXR1cm4gbmV3KEZ8fChGPVByb21pc2UpKShmdW5jdGlvbihOLEwpe2Z1bmN0aW9uIEsoWSl7dHJ5e1coTy5uZXh0KFkpKX1jYXRjaChxKXtMKHEpfX1mdW5jdGlvbiBVKFkpe3RyeXtXKE8udGhyb3coWSkpfWNhdGNoKHEpe0wocSl9fWZ1bmN0aW9uIFcoWSl7WS5kb25lP04oWS52YWx1ZSk6''@;'; put 'put ''ZnVuY3Rpb24geihOKXtyZXR1cm4gTiBpbnN0YW5jZW9mIEY/TjpuZXcgRihmdW5jdGlvbihMKXtMKE4pfSl9KFkudmFsdWUpLnRoZW4oSyxVKX1XKChPPU8uYXBwbHkodyxQfHxbXSkpLm5leHQoKSl9KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0p''@;'; put 'put ''LFgudXBsb2FkVGFibGVzPXZvaWQgMDtjb25zdCBfPXkoOTc3OCksZz15KDI0MDIpO1gudXBsb2FkVGFibGVzPWZ1bmN0aW9uIEIodyxQLEYpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBPPVtdO2Zvcihjb25zdCB6IGluIFApe2NvbnN0IE49KDAsZy5j''@;'; put 'put ''b252ZXJ0VG9DU1YpKFAseik7aWYoIkVSUk9SOiBMQVJHRSBTVFJJTkcgTEVOR1RIIj09PU4pdGhyb3cgbmV3IEVycm9yKCJUaGUgbWF4IGxlbmd0aCBvZiBhIHN0cmluZyB2YWx1ZSBpbiBTQVNqcyBpcyAzMjc2NSBjaGFyYWN0ZXJzLiIpO2NvbnN0IEw9eWllbGQgdy51cGxvYWRGaWxlKCIv''@;'; put 'put ''ZmlsZXMvZmlsZXMjcmF3VXBsb2FkIixOLEYpLmNhdGNoKEs9Pnt0aHJvdygwLF8ucHJlZml4TWVzc2FnZSkoSywiRXJyb3Igd2hpbGUgdXBsb2FkaW5nIGZpbGUuICIpfSk7Ty5wdXNoKHt0YWJsZU5hbWU6eixmaWxlOkwucmVzdWx0fSl9cmV0dXJuIE99KX19LDYxMzE6ZnVuY3Rpb24odWUs''@;'; put 'put ''WCl7InVzZSBzdHJpY3QiO3ZhciB5PXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihfLGcsQix3KXtyZXR1cm4gbmV3KEJ8fChCPVByb21pc2UpKShmdW5jdGlvbihGLE8pe2Z1bmN0aW9uIHooSyl7dHJ5e0wody5uZXh0KEspKX1jYXRjaChVKXtPKFUpfX1mdW5jdGlvbiBOKEspe3Ry''@;'; put 'put ''eXtMKHcudGhyb3coSykpfWNhdGNoKFUpe08oVSl9fWZ1bmN0aW9uIEwoSyl7Sy5kb25lP0YoSy52YWx1ZSk6ZnVuY3Rpb24gUChGKXtyZXR1cm4gRiBpbnN0YW5jZW9mIEI/RjpuZXcgQihmdW5jdGlvbihPKXtPKEYpfSl9KEsudmFsdWUpLnRoZW4oeixOKX1MKCh3PXcuYXBwbHkoXyxnfHxb''@;'; put 'put ''XSkpLm5leHQoKSl9KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFgud3JpdGVTdHJlYW09dm9pZCAwLFgud3JpdGVTdHJlYW09KF8sZyk9Pnkodm9pZCAwLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIG5ldyBQcm9taXNlKChCLHcp''@;'; put 'put ''PT57Xy53cml0ZShnKyJcbiIsUD0+e1A/dyhQKTpCKCEwKX0pfSl9KX0sMjg1MTpmdW5jdGlvbih1ZSxYLHkpeyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDUxMDgpLF89eSg0MTU1KSxnPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihXLFkscSxlZSl7cmV0dXJuIG5ldyhxfHwocT1Qcm9t''@;'; put 'put ''aXNlKSkoZnVuY3Rpb24obmUsaWUpe2Z1bmN0aW9uIGxlKFRlKXt0cnl7X2UoZWUubmV4dChUZSkpfWNhdGNoKFNlKXtpZShTZSl9fWZ1bmN0aW9uIG1lKFRlKXt0cnl7X2UoZWUudGhyb3coVGUpKX1jYXRjaChTZSl7aWUoU2UpfX1mdW5jdGlvbiBfZShUZSl7VGUuZG9uZT9uZShUZS52YWx1''@;'; put 'put ''ZSk6ZnVuY3Rpb24gSihuZSl7cmV0dXJuIG5lIGluc3RhbmNlb2YgcT9uZTpuZXcgcShmdW5jdGlvbihpZSl7aWUobmUpfSl9KFRlLnZhbHVlKS50aGVuKGxlLG1lKX1fZSgoZWU9ZWUuYXBwbHkoVyxZfHxbXSkpLm5leHQoKSl9KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1''@;'; put 'put ''bGUiLHt2YWx1ZTohMH0pLFguQXV0aE1hbmFnZXI9dm9pZCAwO2NvbnN0IEI9eSgzOTAwKSx3PXkoMTM5NSksUD15KDU5MjgpLEY9eSgxMTcwKSxPPXkoNTQxOCksej15KDQ1ODIpLE49eSg2NTQ3KSxMPXkoMTUyNyk7WC5BdXRoTWFuYWdlcj1jbGFzcyBLe2NvbnN0cnVjdG9yKFkscSxlZSxK''@;'; put 'put ''KXt0aGlzLnNlcnZlclVybD1ZLHRoaXMuc2VydmVyVHlwZT1xLHRoaXMucmVxdWVzdENsaWVudD1lZSx0aGlzLmxvZ2luQ2FsbGJhY2s9Six0aGlzLnVzZXJOYW1lPSIiLHRoaXMudXNlckxvbmdOYW1lPSIiLHRoaXMucmVkaXJlY3RlZExvZ2luVXJsPSIvU0FTTG9nb24iLHRoaXMuZXh0cmFj''@;'; put 'put ''dFVzZXJOYW1lPW5lPT57c3dpdGNoKHRoaXMuc2VydmVyVHlwZSl7Y2FzZSBCLlNlcnZlclR5cGUuU2FzVml5YTpyZXR1cm4gbmU/LmlkO2Nhc2UgQi5TZXJ2ZXJUeXBlLlNhczk6cmV0dXJuIiI7Y2FzZSBCLlNlcnZlclR5cGUuU2FzanM6cmV0dXJuIG5lPy51c2VybmFtZTtkZWZhdWx0OnJl''@;'; put 'put ''dHVybiBJLmVycm9yKCJTZXJ2ZXIgVHlwZSBub3QgZm91bmQgaW4gZXh0cmFjdFVzZXJOYW1lIGZ1bmN0aW9uIiksIiJ9fSx0aGlzLmV4dHJhY3RVc2VyTG9uZ05hbWU9bmU9Pntzd2l0Y2godGhpcy5zZXJ2ZXJUeXBlKXtjYXNlIEIuU2VydmVyVHlwZS5TYXNWaXlhOnJldHVybiBuZT8ubmFt''@;'; put 'put ''ZTtjYXNlIEIuU2VydmVyVHlwZS5TYXM5OnJldHVybigwLEYuZXh0cmFjdFVzZXJMb25nTmFtZVNhczkpKG5lKTtjYXNlIEIuU2VydmVyVHlwZS5TYXNqczpyZXR1cm4gbmU/LmRpc3BsYXlOYW1lO2RlZmF1bHQ6cmV0dXJuIEkuZXJyb3IoIlNlcnZlciBUeXBlIG5vdCBmb3VuZCBpbiBleHRy''@;'; put 'put ''YWN0VXNlck5hbWUgZnVuY3Rpb24iKSwiIn19LHRoaXMuc2V0TG9naW5Vcmw9bmU9PntsZXQgaWU9bmVbMV0ucmVwbGFjZSgvXD8uKi8sIiIpO2lmKCIvIj09PWllWzBdKXtpZT1pZS5zdWJzdHIoMSk7Y29uc3QgbGU9dGhpcy5zZXJ2ZXJVcmw/YCR7dGhpcy5zZXJ2ZXJVcmx9LyR7aWV9YDpg''@;'; put 'put ''JHtpZX1gO3RoaXMubG9naW5Vcmw9dGhpcy5zZXJ2ZXJUeXBlPT09Qi5TZXJ2ZXJUeXBlLlNhc1ZpeWE/bGU6bGUucmVwbGFjZSgiL1NBU0xvZ29uL2xvZ2luLmRvIiwiL1NBU0xvZ29uL2xvZ2luIil9fSx0aGlzLmxvZ2luVXJsPSIvU0FTTG9nb24vbG9naW4iLHRoaXMubG9nb3V0VXJsPXRo''@;'; put 'put ''aXMuc2VydmVyVHlwZT09PUIuU2VydmVyVHlwZS5TYXM5PyIvU0FTTG9nb24vbG9nb3V0PyI6dGhpcy5zZXJ2ZXJUeXBlPT09Qi5TZXJ2ZXJUeXBlLlNhc1ZpeWE/Ii9TQVNMb2dvbi9sb2dvdXQuZG8/IjoiL1NBU0xvZ29uL2xvZ291dCIsdGhpcy5yZWRpcmVjdGVkTG9naW5Vcmw9dGhpcy5z''@;'; put 'put ''ZXJ2ZXJVcmwrdGhpcy5yZWRpcmVjdGVkTG9naW5Vcmx9cmVkaXJlY3RlZExvZ0luKHtvbkxvZ2dlZE91dDpZfSl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0e2lzTG9nZ2VkSW46cSx1c2VyTmFtZTplZSx1c2VyTG9uZ05hbWU6Sn09eWllbGQgdGhpcy5m''@;'; put 'put ''ZXRjaFVzZXJOYW1lKCk7aWYocSlyZXR1cm4oXy5sb2dnZXJ8fEkpLmxvZygibG9naW4gd2FzIG5vdCBhdHRlbXB0ZWQgYXMgYSB2YWxpZCBzZXNzaW9uIGFscmVhZHkgZXhpc3RzIikseWllbGQgdGhpcy5sb2dpbkNhbGxiYWNrKCkse2lzTG9nZ2VkSW46ITAsdXNlck5hbWU6ZWUsdXNlckxv''@;'; put 'put ''bmdOYW1lOkp9O2NvbnN0IG5lPXlpZWxkKDAsTy5vcGVuV2ViUGFnZSkodGhpcy5yZWRpcmVjdGVkTG9naW5VcmwsIlNBU0xvZ29uIix7d2lkdGg6NTAwLGhlaWdodDo2MDB9LFkpO2lmKCFuZSlyZXR1cm57aXNMb2dnZWRJbjohMSx1c2VyTmFtZToiIix1c2VyTG9uZ05hbWU6IiJ9O2NvbnN0''@;'; put 'put ''e2lzTG9nZ2VkSW46aWV9PXRoaXMuc2VydmVyVHlwZT09PUIuU2VydmVyVHlwZS5TYXNWaXlhP3lpZWxkKDAsTi52ZXJpZnlTYXNWaXlhTG9naW4pKG5lKTp5aWVsZCgwLHoudmVyaWZ5U2FzOUxvZ2luKShuZSk7aWYobmUuY2xvc2UoKSxpZSl7dGhpcy5zZXJ2ZXJUeXBlPT09Qi5TZXJ2ZXJU''@;'; put 'put ''eXBlLlNhczkmJih5aWVsZCB0aGlzLnBlcmZvcm1DQVNTZWN1cml0eUNoZWNrKCkpO2NvbnN0e3VzZXJOYW1lOmxlLHVzZXJMb25nTmFtZTptZX09eWllbGQgdGhpcy5mZXRjaFVzZXJOYW1lKCk7cmV0dXJuIHlpZWxkIHRoaXMubG9naW5DYWxsYmFjaygpLHtpc0xvZ2dlZEluOiEwLHVzZXJO''@;'; put 'put ''YW1lOmxlLHVzZXJMb25nTmFtZTptZX19cmV0dXJue2lzTG9nZ2VkSW46ITEsdXNlck5hbWU6IiIsdXNlckxvbmdOYW1lOiIifX0pfWxvZ0luKFkscSl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IGVlPXtfc2VydmljZToiZGVmYXVsdCIsdXNlcm5hbWU6''@;'; put 'put ''WSxwYXNzd29yZDpxfTt0aGlzLnVzZXJOYW1lPSIiLHRoaXMudXNlckxvbmdOYW1lPSIiO2xldHtpc0xvZ2dlZEluOkosbG9naW5Gb3JtOm5lLHVzZXJMb25nTmFtZTppZX09eWllbGQgdGhpcy5jaGVja1Nlc3Npb24oKTtpZihKKXJldHVybihfLmxvZ2dlcnx8SSkubG9nKCJsb2dpbiB3YXMg''@;'; put 'put ''bm90IGF0dGVtcHRlZCBhcyBhIHZhbGlkIHNlc3Npb24gYWxyZWFkeSBleGlzdHMiKSx5aWVsZCB0aGlzLmxvZ2luQ2FsbGJhY2soKSx0aGlzLnVzZXJOYW1lPWVlLnVzZXJuYW1lLHRoaXMudXNlckxvbmdOYW1lPWllLHtpc0xvZ2dlZEluOiEwLHVzZXJOYW1lOnRoaXMudXNlck5hbWUsdXNl''@;'; put 'put ''ckxvbmdOYW1lOnRoaXMudXNlckxvbmdOYW1lfTtsZXQgbGU9eWllbGQgdGhpcy5zZW5kTG9naW5SZXF1ZXN0KG5lLGVlKSxtZT0oMCxMLmlzTG9nSW5TdWNjZXNzSGVhZGVyUHJlc2VudCkodGhpcy5zZXJ2ZXJUeXBlLGxlKTtpZighbWUpe2lmKFUobGUpKXtjb25zdCBUZT15aWVsZCB0aGlz''@;'; put 'put ''LmdldExvZ2luRm9ybShsZSk7bGU9eWllbGQgdGhpcy5zZW5kTG9naW5SZXF1ZXN0KFRlLGVlKX1jb25zdCBfZT15aWVsZCB0aGlzLmNoZWNrU2Vzc2lvbigpO21lPV9lLmlzTG9nZ2VkSW4sdGhpcy51c2VyTG9uZ05hbWU9X2UudXNlckxvbmdOYW1lfXJldHVybiBtZSYmKHRoaXMuc2VydmVy''@;'; put 'put ''VHlwZT09PUIuU2VydmVyVHlwZS5TYXM5JiYoeWllbGQgdGhpcy5wZXJmb3JtQ0FTU2VjdXJpdHlDaGVjaygpKSx0aGlzLmxvZ2luQ2FsbGJhY2soKSx0aGlzLnVzZXJOYW1lPWVlLnVzZXJuYW1lKSx7aXNMb2dnZWRJbjptZSx1c2VyTmFtZTp0aGlzLnVzZXJOYW1lLHVzZXJMb25nTmFtZTp0''@;'; put 'put ''aGlzLnVzZXJMb25nTmFtZX19KX1wZXJmb3JtQ0FTU2VjdXJpdHlDaGVjaygpe3JldHVybiBnKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBZPWAke3RoaXMuc2VydmVyVXJsfS9TQVNTdG9yZWRQcm9jZXNzL2pfc3ByaW5nX2Nhc19zZWN1cml0eV9jaGVja2A7eWllbGQg''@;'; put 'put ''dGhpcy5yZXF1ZXN0Q2xpZW50LmdldChgL1NBU0xvZ29uL2xvZ2luP3NlcnZpY2U9JHtZfWAsdm9pZCAwKS5jYXRjaChxPT57aWYoIShxIGluc3RhbmNlb2Ygdy5Ob3RGb3VuZEVycm9yKSl0aHJvdyBxfSl9KX1zZW5kTG9naW5SZXF1ZXN0KFkscSl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9p''@;'; put 'put ''ZCAwLGZ1bmN0aW9uKigpe2lmKHRoaXMuc2VydmVyVHlwZT09PUIuU2VydmVyVHlwZS5TYXNqcyl7Y29uc3R7dXNlcm5hbWU6bmUscGFzc3dvcmQ6aWV9PXEse3Jlc3VsdDpsZX09eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QodGhpcy5sb2dpblVybCx7dXNlcm5hbWU6bmUscGFzc3dv''@;'; put 'put ''cmQ6aWV9LHZvaWQgMCk7cmV0dXJuIGxlfWZvcihjb25zdCBuZSBpbiBZKXFbbmVdPVlbbmVdO2NvbnN0IGVlPSgwLFAuc2VyaWFsaXplKShxKSx7cmVzdWx0Okp9PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5wb3N0KHRoaXMubG9naW5VcmwsZWUsdm9pZCAwLCJ0ZXh0L3BsYWluIix7IkNv''@;'; put 'put ''bnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIsQWNjZXB0OiIqLyoifSk7cmV0dXJuIEp9KX1jaGVja1Nlc3Npb24oKXtyZXR1cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3R7aXNMb2dnZWRJbjpZLHVzZXJOYW1lOnEsdXNlckxv''@;'; put 'put ''bmdOYW1lOmVlfT15aWVsZCB0aGlzLmZldGNoVXNlck5hbWUoKTtsZXQgSj1udWxsO3JldHVybiBZfHwoeWllbGQgdGhpcy5sb2dPdXQoKSxKPXlpZWxkIHRoaXMuZ2V0TmV3TG9naW5Gb3JtKCkpLFByb21pc2UucmVzb2x2ZSh7aXNMb2dnZWRJbjpZLHVzZXJOYW1lOnEsdXNlckxvbmdOYW1l''@;'; put 'put ''OmVlLGxvZ2luRm9ybTpKfSl9KX1nZXROZXdMb2dpbkZvcm0oKXtyZXR1cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7aWYodGhpcy5zZXJ2ZXJUeXBlPT09Qi5TZXJ2ZXJUeXBlLlNhc2pzKXJldHVybiB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KCIvIix2b2lkIDApLnRoZW4o''@;'; put 'put ''KHtyZXN1bHQ6cX0pPT57dmFyIGVlO2NvbnN0IEo9bnVsbD09PShlZT0vPHNjcmlwdD5kb2N1bWVudC5jb29raWUgPSAnKFhTUkYtVE9LRU49Lio7IE1heC1BZ2U9ODY0MDA7IFNhbWVTaXRlPVN0cmljdDsgUGF0aD1cLzspJzxcL3NjcmlwdD4vLmV4ZWMocSkpfHx2b2lkIDA9PT1lZT92b2lk''@;'; put 'put ''IDA6ZWVbMV07SiYmKGRvY3VtZW50LmNvb2tpZT1KKX0pO2NvbnN0e3Jlc3VsdDpZfT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KHRoaXMubG9naW5VcmwucmVwbGFjZSgiL1NBU0xvZ29uL2xvZ2luLmRvIiwiL1NBU0xvZ29uL2xvZ2luIiksdm9pZCAwLCJ0ZXh0L3BsYWluIik7cmV0''@;'; put 'put ''dXJuIHlpZWxkIHRoaXMuZ2V0TG9naW5Gb3JtKFkpfSl9ZmV0Y2hVc2VyTmFtZSgpe3JldHVybiBnKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBZPXRoaXMuc2VydmVyVHlwZT09PUIuU2VydmVyVHlwZS5TYXNWaXlhP2Ake3RoaXMuc2VydmVyVXJsfS9pZGVudGl0aWVz''@;'; put 'put ''L3VzZXJzL0BjdXJyZW50VXNlcmA6dGhpcy5zZXJ2ZXJUeXBlPT09Qi5TZXJ2ZXJUeXBlLlNhczk/YCR7dGhpcy5zZXJ2ZXJVcmx9L1NBU1N0b3JlZFByb2Nlc3NgOmAke3RoaXMuc2VydmVyVXJsfS9TQVNqc0FwaS9zZXNzaW9uYCx7cmVzdWx0OnF9PXlpZWxkIHRoaXMucmVxdWVzdENsaWVu''@;'; put 'put ''dC5nZXQoWSx2b2lkIDAsInRleHQvcGxhaW4iKS5jYXRjaChKPT4oe3Jlc3VsdDoiYXV0aEVyciJ9KSksZWU9ImF1dGhFcnIiIT09cTtyZXR1cm4gZWU/e2lzTG9nZ2VkSW46ZWUsdXNlck5hbWU6dGhpcy5leHRyYWN0VXNlck5hbWUocSksdXNlckxvbmdOYW1lOnRoaXMuZXh0cmFjdFVzZXJM''@;'; put 'put ''b25nTmFtZShxKX06KHlpZWxkIHRoaXMubG9nT3V0KCkse2lzTG9nZ2VkSW46ZWUsdXNlck5hbWU6IiIsdXNlckxvbmdOYW1lOiIifSl9KX1nZXRMb2dpbkZvcm0oWSl7Y29uc3QgZWU9Lzxmb3JtLithY3Rpb249IiguKihMb2dvbnxsb2dpbilbXiJdKikuKj4vLmV4ZWMoWSksSj17fTtpZihl''@;'; put 'put ''ZSYmZWUubGVuZ3RoKXt0aGlzLnNldExvZ2luVXJsKGVlKTtjb25zdCBuZT0oWT1ZLnJlcGxhY2UoLzxpbnB1dC9nLCJcbjxpbnB1dCIpKS5tYXRjaCgvPGlucHV0LioiaGlkZGVuIltePl0qPi9nKTtuZSYmbmUuZm9yRWFjaChpZT0+e2NvbnN0IGxlPWllLm1hdGNoKC9uYW1lPSIoW14iXSop''@;'; put 'put ''IlxzdmFsdWU9IihbXiJdKikvKTtsZSYmbGUubGVuZ3RoJiYoSltsZVsxXV09bGVbMl0pfSl9cmV0dXJuIE9iamVjdC5rZXlzKEopLmxlbmd0aD9KOm51bGx9bG9nT3V0KCl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLnJlcXVlc3RDbGllbnQu''@;'; put 'put ''Y2xlYXJDc3JmVG9rZW5zKCksdGhpcy5yZXF1ZXN0Q2xpZW50LmdldCh0aGlzLmxvZ291dFVybCx2b2lkIDApLnRoZW4oKCk9PiEwKX0pfX07Y29uc3QgVT1XPT4vQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgdGhlIHN5c3RlbSB3YXMgdmVyaWZ5aW5nIHlvdXIgY3JlZGVudGlhbHMuIFBsZWFz''@;'; put 'put ''ZSBlbnRlciB5b3VyIGNyZWRlbnRpYWxzIGFnYWluLi9nbS50ZXN0KFcpfSw1NzpmdW5jdGlvbih1ZSxYLHkpeyJ1c2Ugc3RyaWN0Ijt2YXIgST10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oUCxGLE8seil7cmV0dXJuIG5ldyhPfHwoTz1Qcm9taXNlKSkoZnVuY3Rpb24oTCxLKXtm''@;'; put 'put ''dW5jdGlvbiBVKHEpe3RyeXtZKHoubmV4dChxKSl9Y2F0Y2goZWUpe0soZWUpfX1mdW5jdGlvbiBXKHEpe3RyeXtZKHoudGhyb3cocSkpfWNhdGNoKGVlKXtLKGVlKX19ZnVuY3Rpb24gWShxKXtxLmRvbmU/TChxLnZhbHVlKTpmdW5jdGlvbiBOKEwpe3JldHVybiBMIGluc3RhbmNlb2YgTz9M''@;'; put 'put ''Om5ldyBPKGZ1bmN0aW9uKEspe0soTCl9KX0ocS52YWx1ZSkudGhlbihVLFcpfVkoKHo9ei5hcHBseShQLEZ8fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5nZXRBY2Nlc3NUb2tlbkZvclNhc2pzPXZvaWQgMDtjb25z''@;'; put 'put ''dCBfPXkoOTc3OCksZz15KDkwMTcpLEI9eSgzOTAwKTtYLmdldEFjY2Vzc1Rva2VuRm9yU2FzanM9ZnVuY3Rpb24gdyhQLEYsTyl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IHo9Ii9TQVNqc0FwaS9hdXRoL3Rva2VuIixOPXtjbGllbnRJZDpGLGNvZGU6''@;'; put 'put ''T307cmV0dXJuIHlpZWxkIFAucG9zdCh6LE4sdm9pZCAwKS50aGVuKEw9Pntjb25zdCBLPUwucmVzdWx0O3JldHVybnthY2Nlc3NfdG9rZW46Sy5hY2Nlc3NUb2tlbixyZWZyZXNoX3Rva2VuOksucmVmcmVzaFRva2VufX0pLmNhdGNoKEw9Pnt0aHJvdygwLF8ucHJlZml4TWVzc2FnZSkoTCwo''@;'; put 'put ''MCxnLmdldFRva2VuUmVxdWVzdEVycm9yUHJlZml4KSgiZmV0Y2hpbmcgYWNjZXNzIHRva2VuIiwiZ2V0QWNjZXNzVG9rZW5Gb3JTYXNqcyIsQi5TZXJ2ZXJUeXBlLlNhc2pzLHosTixGKSl9KX0pfX0sMzU2OTpmdW5jdGlvbih1ZSxYLHkpeyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDg3NjQpLkJ1''@;'; put 'put ''ZmZlcixfPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihPLHosTixMKXtyZXR1cm4gbmV3KE58fChOPVByb21pc2UpKShmdW5jdGlvbihVLFcpe2Z1bmN0aW9uIFkoSil7dHJ5e2VlKEwubmV4dChKKSl9Y2F0Y2gobmUpe1cobmUpfX1mdW5jdGlvbiBxKEope3RyeXtlZShMLnRocm93''@;'; put 'put ''KEopKX1jYXRjaChuZSl7VyhuZSl9fWZ1bmN0aW9uIGVlKEope0ouZG9uZT9VKEoudmFsdWUpOmZ1bmN0aW9uIEsoVSl7cmV0dXJuIFUgaW5zdGFuY2VvZiBOP1U6bmV3IE4oZnVuY3Rpb24oVyl7VyhVKX0pfShKLnZhbHVlKS50aGVuKFkscSl9ZWUoKEw9TC5hcHBseShPLHp8fFtdKSkubmV4''@;'; put 'put ''dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5nZXRBY2Nlc3NUb2tlbkZvclZpeWE9dm9pZCAwO2NvbnN0IGc9eSgzOTAwKSxCPXkoOTc3OCksdz15KDEzOTUpLFA9eSg5MDE3KTtYLmdldEFjY2Vzc1Rva2VuRm9yVml5YT1mdW5jdGlv''@;'; put 'put ''biBGKE8seixOLEwpe3JldHVybiBfKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtsZXQgSztLPXR5cGVvZiBJPiJ1Ij9idG9hKHorIjoiK04pOkkuZnJvbSh6KyI6IitOKS50b1N0cmluZygiYmFzZTY0Iik7Y29uc3QgVT0iL1NBU0xvZ29uL29hdXRoL3Rva2VuIixXPXtBdXRob3Jp''@;'; put 'put ''emF0aW9uOiJCYXNpYyAiK0ssQWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uIn0sWT1uZXcgVVJMU2VhcmNoUGFyYW1zKHtncmFudF90eXBlOiJhdXRob3JpemF0aW9uX2NvZGUiLGNvZGU6TH0pLHE9bmV3IFVSTFNlYXJjaFBhcmFtcyhZKTtyZXR1cm4geWllbGQgTy5wb3N0KFUscSx2b2lkIDAs''@;'; put 'put ''ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIsVykudGhlbihKPT5KLnJlc3VsdCkuY2F0Y2goSj0+e3Rocm93IEogaW5zdGFuY2VvZiB3LkNlcnRpZmljYXRlRXJyb3I/SjooMCxCLnByZWZpeE1lc3NhZ2UpKEosKDAsUC5nZXRUb2tlblJlcXVlc3RFcnJvclByZWZpeCkoImZl''@;'; put 'put ''dGNoaW5nIGFjY2VzcyB0b2tlbiIsImdldEFjY2Vzc1Rva2VuRm9yVml5YSIsZy5TZXJ2ZXJUeXBlLlNhc1ZpeWEsVSxZLFcseixOKSl9KX0pfX0sOTAxNzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5n''@;'; put 'put ''ZXRUb2tlblJlcXVlc3RFcnJvclByZWZpeFJlc3BvbnNlPVguZ2V0VG9rZW5SZXF1ZXN0RXJyb3JQcmVmaXg9dm9pZCAwO2NvbnN0IEk9eSgzOTAwKSxnPVA9PmBSZXNwb25zZSBmcm9tICR7KFA9PlA9PT1JLlNlcnZlclR5cGUuU2FzVml5YT8iVml5YSI6IlNhc2pzIikoUCl9IGlzIGJlbG93''@;'; put 'put ''LmA7WC5nZXRUb2tlblJlcXVlc3RFcnJvclByZWZpeD0oUCxGLE8seixOLEwsSyxVKT0+e2NvbnN0IFc9cT0+SlNPTi5zdHJpbmdpZnkocSxudWxsLDIpLFk9W2BFcnJvciB3aGlsZSAke1B9IGZyb20gJHt6fWAsYFRocm93biBieSB0aGUgQHNhc2pzL2FkYXB0ZXIgJHtGfSBmdW5jdGlvbi5g''@;'; put 'put ''XTtyZXR1cm4gTiYmKFkucHVzaCgiUGF5bG9hZDoiKSxZLnB1c2goVyhOKSkpLEwmJihZLnB1c2goIkhlYWRlcnM6IiksWS5wdXNoKFcoTCkpKSxLJiZZLnB1c2goYENsaWVudElkOiAke0t9YCksVSYmWS5wdXNoKGBDbGllbnRTZWNyZXQ6ICR7VX1gKSxZLnB1c2goIiIpLFkucHVzaChgJHtn''@;'; put 'put ''KE8pfWApLFkucHVzaCgiIiksWS5qb2luKCJcbiIpfSxYLmdldFRva2VuUmVxdWVzdEVycm9yUHJlZml4UmVzcG9uc2U9KFAsRik9PlAuc3BsaXQoYCR7ZyhGKX1cbmApLnBvcCgpfSw3MDQ6ZnVuY3Rpb24odWUsWCx5KXsidXNlIHN0cmljdCI7dmFyIEk9eSg0MTU1KSxfPXkoNTEwOCksZz10''@;'; put 'put ''aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oeixOLEwsSyl7cmV0dXJuIG5ldyhMfHwoTD1Qcm9taXNlKSkoZnVuY3Rpb24oVyxZKXtmdW5jdGlvbiBxKG5lKXt0cnl7SihLLm5leHQobmUpKX1jYXRjaChpZSl7WShpZSl9fWZ1bmN0aW9uIGVlKG5lKXt0cnl7SihLLnRocm93KG5lKSl9''@;'; put 'put ''Y2F0Y2goaWUpe1koaWUpfX1mdW5jdGlvbiBKKG5lKXtuZS5kb25lP1cobmUudmFsdWUpOmZ1bmN0aW9uIFUoVyl7cmV0dXJuIFcgaW5zdGFuY2VvZiBMP1c6bmV3IEwoZnVuY3Rpb24oWSl7WShXKX0pfShuZS52YWx1ZSkudGhlbihxLGVlKX1KKChLPUsuYXBwbHkoeixOfHxbXSkpLm5leHQo''@;'; put 'put ''KSl9KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguZ2V0VG9rZW5zPXZvaWQgMDtjb25zdCBCPXkoNjc5OSksdz15KDM5MDApLFA9eSgzNjYpLEY9eSgyNDkpO1guZ2V0VG9rZW5zPWZ1bmN0aW9uIE8oeixOLEw9dy5TZXJ2ZXJUeXBlLlNhc1Zp''@;'; put 'put ''eWEpe3JldHVybiBnKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBLPUkubG9nZ2VyfHxfO2xldHthY2Nlc3NfdG9rZW46VSxyZWZyZXNoX3Rva2VuOlcsY2xpZW50Olksc2VjcmV0OnF9PU47aWYoKDAsQi5pc0FjY2Vzc1Rva2VuRXhwaXJpbmcpKFUpfHwoMCxCLmlzUmVm''@;'; put 'put ''cmVzaFRva2VuRXhwaXJpbmcpKFcpKXtpZigoMCxCLmhhc1Rva2VuRXhwaXJlZCkoVykpe2NvbnN0IEo9IlVuYWJsZSB0byBvYnRhaW4gbmV3IGFjY2VzcyB0b2tlbi4gWW91ciByZWZyZXNoIHRva2VuIGhhcyBleHBpcmVkLiI7dGhyb3cgSy5lcnJvcihKKSxuZXcgRXJyb3IoSil9Sy5pbmZv''@;'; put 'put ''KCJSZWZyZXNoaW5nIGFjY2VzcyBhbmQgcmVmcmVzaCB0b2tlbnMuIiksKHthY2Nlc3NfdG9rZW46VSxyZWZyZXNoX3Rva2VuOld9PUw9PT13LlNlcnZlclR5cGUuU2FzVml5YT95aWVsZCgwLFAucmVmcmVzaFRva2Vuc0ZvclZpeWEpKHosWSxxLFcpOnlpZWxkKDAsRi5yZWZyZXNoVG9rZW5z''@;'; put 'put ''Rm9yU2FzanMpKHosVykpfXJldHVybnthY2Nlc3NfdG9rZW46VSxyZWZyZXNoX3Rva2VuOlcsY2xpZW50Olksc2VjcmV0OnF9fSl9fSwxNTI3OmZ1bmN0aW9uKHVlLFgseSl7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5j''@;'; put 'put ''dGlvbihnLEIsdyxQKXt2b2lkIDA9PT1QJiYoUD13KTt2YXIgRj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEIsdyk7KCFGfHwoImdldCJpbiBGPyFCLl9fZXNNb2R1bGU6Ri53cml0YWJsZXx8Ri5jb25maWd1cmFibGUpKSYmKEY9e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9u''@;'; put 'put ''KCl7cmV0dXJuIEJbd119fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGcsUCxGKX06ZnVuY3Rpb24oZyxCLHcsUCl7dm9pZCAwPT09UCYmKFA9dyksZ1tQXT1CW3ddfSksXz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZyxCKXtmb3IodmFyIHcgaW4gZykiZGVmYXVsdCIhPT13''@;'; put 'put ''JiYhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEIsdykmJkkoQixnLHcpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksXyh5KDI4NTEpLFgpLF8oeSg5MDk3KSxYKSxfKHkoOTE2NiksWCksXyh5KDY2NDMpLFgpfSw5MDk3Oih1''@;'; put 'put ''ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5pc0F1dGhvcml6ZUZvcm1SZXF1aXJlZD12b2lkIDAsWC5pc0F1dGhvcml6ZUZvcm1SZXF1aXJlZD1JPT4vPGZvcm0uK2FjdGlvbj0iKC4qTG9nb25cL29hdXRoXC9h''@;'; put 'put ''dXRob3JpemVbXiJdKikuKj4vZ20udGVzdChJKX0sOTE2NjoodWUsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguaXNMb2dJblJlcXVpcmVkPXZvaWQgMCxYLmlzTG9nSW5SZXF1aXJlZD1JPT4vPGZvcm0uK2FjdGlv''@;'; put 'put ''bj0iKC4qKExvZ29uKXwobG9naW4pW14iXSopLio+L2dtLnRlc3QoSSl9LDY2NDM6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguaXNMb2dJblN1Y2Nlc3NIZWFkZXJQcmVzZW50PVguZ2V0RXhwZWN0ZWRM''@;'; put 'put ''b2dJblN1Y2Nlc3NIZWFkZXI9WC5sb2dpblN1Y2Nlc3NIZWFkZXJzPVguZGVmYXVsdFN1Y2Nlc3NIZWFkZXJLZXk9dm9pZCAwO2NvbnN0IEk9eSgzOTAwKSxfPXkoNTkyOCksZz0iWW91IGhhdmUgc2lnbmVkIGluLiI7WC5kZWZhdWx0U3VjY2Vzc0hlYWRlcktleT0iZGVmYXVsdCIsWC5sb2dp''@;'; put 'put ''blN1Y2Nlc3NIZWFkZXJzPXtlczoiWWEgc2UgaGEgaW5pY2lhZG8gbGEgc2VzaVx4ZjNuLiIsdGg6Ilx1MGUwNFx1MGUzOFx1MGUxM1x1MGUyNVx1MGUwN1x1MGUwYVx1MGUzN1x1MGU0OFx1MGUyZFx1MGU0MFx1MGUwMlx1MGU0OVx1MGUzMlx1MGU0M1x1MGUwYVx1MGU0OVx1MGU0MVx1MGUy''@;'; put 'put ''NVx1MGU0OVx1MGUyNyIsamE6Ilx1MzBiNVx1MzBhNFx1MzBmM1x1MzBhNFx1MzBmM1x1MzA1N1x1MzA3ZVx1MzA1N1x1MzA1Zlx1MzAwMiIsbmI6IkR1IGhhciBsb2dnZXQgZGVnIHBceGU1LiIsc2w6IlByaWphdmlsaSBzdGUgc2UuIixhcjoiXHUwNjQ0XHUwNjQyXHUwNjJmIFx1MDY0Mlx1''@;'; put 'put ''MDY0NVx1MDYyYSAiLHNrOiJQcmlobFx4ZTFzaWxpIHN0ZSBzYS4iLHpoX0hLOiJcdTYwYThcdTVkZjJcdTc2N2JcdTUxNjVcdTMwMDIiLHpoX0NOOiJcdTYwYThcdTVkZjJcdTc2N2JcdTVmNTVcdTMwMDIiLGl0OiJMJ3V0ZW50ZSBzaSBceGU4IGNvbm5lc3NvLiIsc3Y6IkR1IGhhciBsb2dn''@;'; put 'put ''YXQgaW4uIixoZToiXHUwNWUwXHUwNWRiXHUwNWUwXHUwNWUxXHUwNWVhICIsbmw6IlUgaGVidCB6aWNoIGFhbmdlbWVsZC4iLHBsOiJab3N0YVx1MDE0MmVcdTAxNWIgemFsb2dvd2FueS4iLGtvOiJcdWI4NWNcdWFkZjhcdWM3NzhcdWQ1ODhcdWMyYjVcdWIyYzhcdWIyZTQuIix6aF9UVzoi''@;'; put 'put ''XHU2MGE4XHU1ZGYyXHU3NjdiXHU1MTY1XHUzMDAyIix0cjoiT3R1cnVtIGFceGU3dFx1MDEzMW5cdTAxMzF6LiIsaXc6Ilx1MDVlMFx1MDVkYlx1MDVlMFx1MDVlMVx1MDVlYSAiLGZyOiJWb3VzIFx4ZWF0ZXMgY29ubmVjdFx4ZTkuIix1azoiXHUwNDEyXHUwNDM4IFx1MDQzMlx1MDQzMlx1''@;'; put 'put ''MDQ1Nlx1MDQzOVx1MDQ0OFx1MDQzYlx1MDQzOCBcdTA0MzIgXHUwNDNlXHUwNDMxXHUwNDNiXHUwNDU2XHUwNDNhXHUwNDNlXHUwNDMyXHUwNDM4XHUwNDM5IFx1MDQzN1x1MDQzMFx1MDQzZlx1MDQzOFx1MDQ0MS4iLHB0X0JSOiJWb2NceGVhIHNlIGNvbmVjdG91LiIsbm86IkR1IGhhciBs''@;'; put 'put ''b2dnZXQgZGVnIHBceGU1LiIsY3M6IkpzdGUgcFx1MDE1OWlobFx4ZTFcdTAxNjFlbmkuIixmaToiT2xldCBraXJqYXV0dW51dCBzaXNceGU0XHhlNG4uIixydToiXHUwNDEyXHUwNDRiIFx1MDQzMlx1MDQ0Ylx1MDQzZlx1MDQzZVx1MDQzYlx1MDQzZFx1MDQzOFx1MDQzYlx1MDQzOCBcdTA0''@;'; put 'put ''MzJcdTA0NDVcdTA0M2VcdTA0MzQgXHUwNDMyIFx1MDQ0MVx1MDQzOFx1MDQ0MVx1MDQ0Mlx1MDQzNVx1MDQzY1x1MDQ0My4iLGVsOiJcdTAzODhcdTAzYzdcdTAzYjVcdTAzYzRcdTAzYjUgXHUwM2MzXHUwM2M1XHUwM2JkXHUwM2I0XHUwM2I1XHUwM2I4XHUwM2I1XHUwM2FmLiIsaHI6IlBy''@;'; put 'put ''aWphdmlsaSBzdGUgc2UuIixkYToiRHUgZXIgbG9nZ2V0IHBceGU1LiIsZGU6IlNpZSBzaW5kIGpldHp0IGFuZ2VtZWxkZXQuIixzaDoiUHJpamF2bGplbmkgc3RlLiIscHQ6IkluaWNpb3Ugc2Vzc1x4ZTNvLiIsaHU6IkJlamVsZW50a2V6ZXR0LiIsc3I6IlByaWphdmxqZW5pIHN0ZS4iLGVu''@;'; put 'put ''OmcsW1guZGVmYXVsdFN1Y2Nlc3NIZWFkZXJLZXldOmd9LFguZ2V0RXhwZWN0ZWRMb2dJblN1Y2Nlc3NIZWFkZXI9KCk9PntsZXQgUD1YLmxvZ2luU3VjY2Vzc0hlYWRlcnNbWC5kZWZhdWx0U3VjY2Vzc0hlYWRlcktleV07Y29uc3QgRj0oMCxfLmdldFVzZXJMYW5ndWFnZSkoKTtpZihGKXts''@;'; put 'put ''ZXQgTz1YLmxvZ2luU3VjY2Vzc0hlYWRlcnNbRl07aWYoTylQPU87ZWxzZXtjb25zdCBOPU9iamVjdC5rZXlzKFgubG9naW5TdWNjZXNzSGVhZGVycykuZmluZChMPT5uZXcgUmVnRXhwKEwsImkiKS50ZXN0KEYpKTtOJiYoUD1YLmxvZ2luU3VjY2Vzc0hlYWRlcnNbTl0pfX1yZXR1cm4gUH0s''@;'; put 'put ''WC5pc0xvZ0luU3VjY2Vzc0hlYWRlclByZXNlbnQ9KFAsRik9PlA9PT1JLlNlcnZlclR5cGUuU2FzanM/Rj8ubG9nZ2VkSW46bmV3IFJlZ0V4cCgoMCxYLmdldEV4cGVjdGVkTG9nSW5TdWNjZXNzSGVhZGVyKSgpLCJnbSIpLnRlc3QoRil9LDU0MTg6ZnVuY3Rpb24odWUsWCx5KXsidXNlIHN0''@;'; put 'put ''cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKHcsUCxGLE8pe3JldHVybiBuZXcoRnx8KEY9UHJvbWlzZSkpKGZ1bmN0aW9uKE4sTCl7ZnVuY3Rpb24gSyhZKXt0cnl7VyhPLm5leHQoWSkpfWNhdGNoKHEpe0wocSl9fWZ1bmN0aW9uIFUoWSl7dHJ5e1coTy50aHJv''@;'; put 'put ''dyhZKSl9Y2F0Y2gocSl7TChxKX19ZnVuY3Rpb24gVyhZKXtZLmRvbmU/TihZLnZhbHVlKTpmdW5jdGlvbiB6KE4pe3JldHVybiBOIGluc3RhbmNlb2YgRj9OOm5ldyBGKGZ1bmN0aW9uKEwpe0woTil9KX0oWS52YWx1ZSkudGhlbihLLFUpfVcoKE89Ty5hcHBseSh3LFB8fFtdKSkubmV4dCgp''@;'; put 'put ''KX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5vcGVuV2ViUGFnZT12b2lkIDA7Y29uc3QgXz15KDEyMTApLGc9e3dpZHRoOjUwMCxoZWlnaHQ6NjAwfTtYLm9wZW5XZWJQYWdlPWZ1bmN0aW9uIEIodyxQPSIiLEY9ZyxPKXtyZXR1cm4gSSh0''@;'; put 'put ''aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3R7d2lkdGg6eixoZWlnaHQ6Tn09RixMPXNjcmVlbi53aWR0aC8yLXovMixLPXNjcmVlbi5oZWlnaHQvMi1OLzI7cmV0dXJuIHdpbmRvdy5vcGVuKHcsUCxgdG9vbGJhcj0wLGxvY2F0aW9uPTAsbWVudWJhcj0wLHdpZHRoPSR7en0s''@;'; put 'put ''aGVpZ2h0PSR7Tn0sbGVmdD0ke0x9LHRvcD0ke0t9YCl8fCgoeWllbGQoTz8/Xy5vcGVuTG9naW5Qcm9tcHQpKCkpP3dpbmRvdy5vcGVuKHcsUCxgdG9vbGJhcj0wLGxvY2F0aW9uPTAsbWVudWJhcj0wLHdpZHRoPSR7en0saGVpZ2h0PSR7Tn0sbGVmdD0ke0x9LHRvcD0ke0t9YCk6bnVsbCl9''@;'; put 'put ''KX19LDI0OTpmdW5jdGlvbih1ZSxYLHkpeyJ1c2Ugc3RyaWN0Ijt2YXIgST10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oUCxGLE8seil7cmV0dXJuIG5ldyhPfHwoTz1Qcm9taXNlKSkoZnVuY3Rpb24oTCxLKXtmdW5jdGlvbiBVKHEpe3RyeXtZKHoubmV4dChxKSl9Y2F0Y2goZWUp''@;'; put 'put ''e0soZWUpfX1mdW5jdGlvbiBXKHEpe3RyeXtZKHoudGhyb3cocSkpfWNhdGNoKGVlKXtLKGVlKX19ZnVuY3Rpb24gWShxKXtxLmRvbmU/TChxLnZhbHVlKTpmdW5jdGlvbiBOKEwpe3JldHVybiBMIGluc3RhbmNlb2YgTz9MOm5ldyBPKGZ1bmN0aW9uKEspe0soTCl9KX0ocS52YWx1ZSkudGhl''@;'; put 'put ''bihVLFcpfVkoKHo9ei5hcHBseShQLEZ8fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5yZWZyZXNoVG9rZW5zRm9yU2FzanM9dm9pZCAwO2NvbnN0IF89eSg5Nzc4KSxnPXkoOTAxNyksQj15KDM5MDApO1gucmVmcmVz''@;'; put 'put ''aFRva2Vuc0ZvclNhc2pzPWZ1bmN0aW9uIHcoUCxGKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgTz0iL1NBU2pzQXBpL2F1dGgvcmVmcmVzaCIsej17QXV0aG9yaXphdGlvbjoiQmVhcmVyICIrRn07cmV0dXJuIHlpZWxkIFAucG9zdChPLHZvaWQgMCx2''@;'; put 'put ''b2lkIDAsdm9pZCAwLHopLnRoZW4oTD0+e2NvbnN0IEs9TC5yZXN1bHQ7cmV0dXJue2FjY2Vzc190b2tlbjpLLmFjY2Vzc1Rva2VuLHJlZnJlc2hfdG9rZW46Sy5yZWZyZXNoVG9rZW59fSkuY2F0Y2goTD0+e3Rocm93KDAsXy5wcmVmaXhNZXNzYWdlKShMLCgwLGcuZ2V0VG9rZW5SZXF1ZXN0''@;'; put 'put ''RXJyb3JQcmVmaXgpKCJyZWZyZXNoaW5nIHRva2VucyIsInJlZnJlc2hUb2tlbnNGb3JTYXNqcyIsQi5TZXJ2ZXJUeXBlLlNhc2pzLE8pKX0pfSl9fSwzNjY6ZnVuY3Rpb24odWUsWCx5KXsidXNlIHN0cmljdCI7dmFyIEk9eSg4NzY0KS5CdWZmZXIsXz10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8''@;'; put 'put ''ZnVuY3Rpb24oTixMLEssVSl7cmV0dXJuIG5ldyhLfHwoSz1Qcm9taXNlKSkoZnVuY3Rpb24oWSxxKXtmdW5jdGlvbiBlZShpZSl7dHJ5e25lKFUubmV4dChpZSkpfWNhdGNoKGxlKXtxKGxlKX19ZnVuY3Rpb24gSihpZSl7dHJ5e25lKFUudGhyb3coaWUpKX1jYXRjaChsZSl7cShsZSl9fWZ1''@;'; put 'put ''bmN0aW9uIG5lKGllKXtpZS5kb25lP1koaWUudmFsdWUpOmZ1bmN0aW9uIFcoWSl7cmV0dXJuIFkgaW5zdGFuY2VvZiBLP1k6bmV3IEsoZnVuY3Rpb24ocSl7cShZKX0pfShpZS52YWx1ZSkudGhlbihlZSxKKX1uZSgoVT1VLmFwcGx5KE4sTHx8W10pKS5uZXh0KCkpfSl9LGc9dGhpcyYmdGhp''@;'; put 'put ''cy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKE4pe3JldHVybiBOJiZOLl9fZXNNb2R1bGU/Tjp7ZGVmYXVsdDpOfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFgucmVmcmVzaFRva2Vuc0ZvclZpeWE9dm9pZCAwO2NvbnN0IEI9eSgzOTAwKSx3''@;'; put 'put ''PXkoOTc3OCksUD1nKHkoNjIzMCkpLEY9eSg1OTI4KSxPPXkoOTAxNyk7WC5yZWZyZXNoVG9rZW5zRm9yVml5YT1mdW5jdGlvbiB6KE4sTCxLLFUpe3JldHVybiBfKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtpZighKDAsRi5pc05vZGUpKCkpdGhyb3cgbmV3IEVycm9yKCJNZXRo''@;'; put 'put ''b2QgJ3JlZnJlc2hUb2tlbnNGb3JWaXlhJyBjYW4gb25seSBiZSB1c2VkIGJ5IE5vZGUuIik7Y29uc3QgVz0iL1NBU0xvZ29uL29hdXRoL3Rva2VuIixxPXtBdXRob3JpemF0aW9uOiJCYXNpYyAiKyh0eXBlb2YgST4idSI/YnRvYShMKyI6IitLKTpJLmZyb20oTCsiOiIrSykudG9TdHJpbmco''@;'; put 'put ''ImJhc2U2NCIpKX0sZWU9bmV3IFAuZGVmYXVsdDtyZXR1cm4gZWUuYXBwZW5kKCJncmFudF90eXBlIiwicmVmcmVzaF90b2tlbiIpLGVlLmFwcGVuZCgicmVmcmVzaF90b2tlbiIsVSkseWllbGQgTi5wb3N0KFcsZWUsdm9pZCAwLCJtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0iK2Vl''@;'; put 'put ''Ll9ib3VuZGFyeSxxKS50aGVuKG5lPT5uZS5yZXN1bHQpLmNhdGNoKG5lPT57dGhyb3coMCx3LnByZWZpeE1lc3NhZ2UpKG5lLCgwLE8uZ2V0VG9rZW5SZXF1ZXN0RXJyb3JQcmVmaXgpKCJyZWZyZXNoaW5nIHRva2VucyIsInJlZnJlc2hUb2tlbnNGb3JWaXlhIixCLlNlcnZlclR5cGUuU2Fz''@;'; put 'put ''Vml5YSxXLGVlLHEsTCxLKSl9KX0pfX0sNDU4MjpmdW5jdGlvbih1ZSxYLHkpeyJ1c2Ugc3RyaWN0Ijt2YXIgST10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24odyxQLEYsTyl7cmV0dXJuIG5ldyhGfHwoRj1Qcm9taXNlKSkoZnVuY3Rpb24oTixMKXtmdW5jdGlvbiBLKFkpe3RyeXtX''@;'; put 'put ''KE8ubmV4dChZKSl9Y2F0Y2gocSl7TChxKX19ZnVuY3Rpb24gVShZKXt0cnl7VyhPLnRocm93KFkpKX1jYXRjaChxKXtMKHEpfX1mdW5jdGlvbiBXKFkpe1kuZG9uZT9OKFkudmFsdWUpOmZ1bmN0aW9uIHooTil7cmV0dXJuIE4gaW5zdGFuY2VvZiBGP046bmV3IEYoZnVuY3Rpb24oTCl7TChO''@;'; put 'put ''KX0pfShZLnZhbHVlKS50aGVuKEssVSl9VygoTz1PLmFwcGx5KHcsUHx8W10pKS5uZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLnZlcmlmeVNhczlMb2dpbj12b2lkIDA7Y29uc3QgXz15KDU5MjgpLGc9eSgxNTI3KTtYLnZlcmlm''@;'; put 'put ''eVNhczlMb2dpbj1mdW5jdGlvbiBCKHcpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtsZXQgUD0hMSxGPW5ldyBEYXRlLE89MDtkb3tpZih5aWVsZCgwLF8uZGVsYXkpKDFlMyksdy5jbG9zZWQpYnJlYWs7UD13LndpbmRvdy5sb2NhdGlvbi5ocmVmLmluY2x1ZGVz''@;'; put 'put ''KCJTQVNMb2dvbiIpJiZ3LndpbmRvdy5kb2N1bWVudC5ib2R5LmlubmVyVGV4dC5pbmNsdWRlcygoMCxnLmdldEV4cGVjdGVkTG9nSW5TdWNjZXNzSGVhZGVyKSgpKSxPPSgobmV3IERhdGUpLnZhbHVlT2YoKS1GLnZhbHVlT2YoKSkvMWUzfXdoaWxlKCFQJiZPPDMwMCk7cmV0dXJue2lzTG9n''@;'; put 'put ''Z2VkSW46UH19KX19LDY1NDc6ZnVuY3Rpb24odWUsWCx5KXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKFAsRixPLHope3JldHVybiBuZXcoT3x8KE89UHJvbWlzZSkpKGZ1bmN0aW9uKEwsSyl7ZnVuY3Rpb24gVShxKXt0cnl7WSh6Lm5leHQocSkp''@;'; put 'put ''fWNhdGNoKGVlKXtLKGVlKX19ZnVuY3Rpb24gVyhxKXt0cnl7WSh6LnRocm93KHEpKX1jYXRjaChlZSl7SyhlZSl9fWZ1bmN0aW9uIFkocSl7cS5kb25lP0wocS52YWx1ZSk6ZnVuY3Rpb24gTihMKXtyZXR1cm4gTCBpbnN0YW5jZW9mIE8/TDpuZXcgTyhmdW5jdGlvbihLKXtLKEwpfSl9KHEu''@;'; put 'put ''dmFsdWUpLnRoZW4oVSxXKX1ZKCh6PXouYXBwbHkoUCxGfHxbXSkpLm5leHQoKSl9KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguaXNMb2dnZWRJblNBU1ZJWUE9WC52ZXJpZnlTYXNWaXlhTG9naW49dm9pZCAwO2NvbnN0IF89eSg1OTI4KSxn''@;'; put 'put ''PXkoMTUyNyk7WC52ZXJpZnlTYXNWaXlhTG9naW49ZnVuY3Rpb24gQihQKXt2YXIgRixPO3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtsZXQgej0hMSxOPW5ldyBEYXRlLEw9MDtkb3tpZih5aWVsZCgwLF8uZGVsYXkpKDFlMyksUC5jbG9zZWQpYnJlYWs7ej0oMCxY''@;'; put 'put ''LmlzTG9nZ2VkSW5TQVNWSVlBKSgpLEw9KChuZXcgRGF0ZSkudmFsdWVPZigpLU4udmFsdWVPZigpKS8xZTN9d2hpbGUoIXomJkw8MzAwKTtsZXQgSz0hMTtOPW5ldyBEYXRlO2Rve2lmKHlpZWxkKDAsXy5kZWxheSkoMWUzKSxQLmNsb3NlZClicmVhaztLPVAud2luZG93LmxvY2F0aW9uLmhy''@;'; put 'put ''ZWYuaW5jbHVkZXMoIlNBU0xvZ29uIil8fChudWxsPT09KE89bnVsbD09PShGPVAud2luZG93LmRvY3VtZW50LmJvZHkpfHx2b2lkIDA9PT1GP3ZvaWQgMDpGLmlubmVyVGV4dCl8fHZvaWQgMD09PU8/dm9pZCAwOk8uaW5jbHVkZXMoKDAsZy5nZXRFeHBlY3RlZExvZ0luU3VjY2Vzc0hlYWRl''@;'; put 'put ''cikoKSkpLEw9KChuZXcgRGF0ZSkudmFsdWVPZigpLU4udmFsdWVPZigpKS8xZTN9d2hpbGUoIUsmJkw8MzAwKTtyZXR1cm57aXNMb2dnZWRJbjp6JiZLfX0pfSxYLmlzTG9nZ2VkSW5TQVNWSVlBPSgpPT5kb2N1bWVudC5jb29raWUuaW5jbHVkZXMoIkN1cnJlbnQtVXNlciIpJiZkb2N1bWVu''@;'; put 'put ''dC5jb29raWUuaW5jbHVkZXMoInVzZXJJZCIpfSw0MDM3Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLmdlbmVyYXRlRmlsZVVwbG9hZEZvcm09dm9pZCAwO2NvbnN0IEk9eSgyNDAyKSxfPXkoNTkyOCk7''@;'; put 'put ''WC5nZW5lcmF0ZUZpbGVVcGxvYWRGb3JtPShCLHcpPT57Zm9yKGNvbnN0IFAgaW4gdyl7aWYoIUFycmF5LmlzQXJyYXkod1tQXSkpY29udGludWU7Y29uc3QgRj1QLE89KDAsSS5jb252ZXJ0VG9DU1YpKHcsUCk7aWYoIkVSUk9SOiBMQVJHRSBTVFJJTkcgTEVOR1RIIj09PU8pdGhyb3cgbmV3''@;'; put 'put ''IEVycm9yKCJUaGUgbWF4IGxlbmd0aCBvZiBhIHN0cmluZyB2YWx1ZSBpbiBTQVNqcyBpcyAzMjc2NSBjaGFyYWN0ZXJzLiIpO2lmKCgwLF8uaXNOb2RlKSgpKUIuYXBwZW5kKEYsTyx7ZmlsZW5hbWU6YCR7Rn0uY3N2YCxjb250ZW50VHlwZToiYXBwbGljYXRpb24vY3N2In0pO2Vsc2V7Y29u''@;'; put 'put ''c3Qgej1uZXcgQmxvYihbT10se3R5cGU6ImFwcGxpY2F0aW9uL2NzdiJ9KTtCLmFwcGVuZChGLHosYCR7Rn0uY3N2YCl9fXJldHVybiBCfX0sMjE3MDoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5nZW5l''@;'; put 'put ''cmF0ZVRhYmxlVXBsb2FkRm9ybT12b2lkIDA7Y29uc3QgST15KDI0MDIpLF89eSg0Nzk5KTtYLmdlbmVyYXRlVGFibGVVcGxvYWRGb3JtPShCLHcpPT57Y29uc3QgUD1bXSxGPXt9O2xldCBPPTA7Zm9yKGNvbnN0IHogaW4gdyl7TysrLCgwLEkuaXNGb3JtYXRzVGFibGUpKHopfHxQLnB1c2go''@;'; put 'put ''eik7Y29uc3QgTj0oMCxJLmNvbnZlcnRUb0NTVikodyx6KTtpZigiRVJST1I6IExBUkdFIFNUUklORyBMRU5HVEgiPT09Til0aHJvdyBuZXcgRXJyb3IoIlRoZSBtYXggbGVuZ3RoIG9mIGEgc3RyaW5nIHZhbHVlIGluIFNBU2pzIGlzIDMyNzY1IGNoYXJhY3RlcnMuIik7Ti5sZW5ndGg+MTZl''@;'; put 'put ''Mz8oMCxfLnNwbGl0Q2h1bmtzKShOKS5tYXAoSz0+e0IuYXBwZW5kKGBzYXNqcyR7T31kYXRhYCxLKX0pOkZbYHNhc2pzJHtPfWRhdGFgXT1OfXJldHVybiBGLnNhc2pzX3RhYmxlcz1QLmpvaW4oIiAiKSx7Zm9ybURhdGE6QixyZXF1ZXN0UGFyYW1zOkZ9fX0sMzYwNzpmdW5jdGlvbih1ZSxY''@;'; put 'put ''LHkpeyJ1c2Ugc3RyaWN0Ijt2YXIgST10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24odyxQLEYsTyl7dm9pZCAwPT09TyYmKE89Rik7dmFyIHo9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihQLEYpOyghenx8KCJnZXQiaW4gej8hUC5f''@;'; put 'put ''X2VzTW9kdWxlOnoud3JpdGFibGV8fHouY29uZmlndXJhYmxlKSkmJih6PXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBQW0ZdfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3LE8seil9OmZ1bmN0aW9uKHcsUCxGLE8pe3ZvaWQgMD09PU8mJihPPUYpLHdbT109UFtGXX0p''@;'; put 'put ''LF89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKHcsUCl7Zm9yKHZhciBGIGluIHcpImRlZmF1bHQiIT09RiYmIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChQLEYpJiZJKFAsdyxGKX0sZz10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24o''@;'; put 'put ''dyl7cmV0dXJuIHcmJncuX19lc01vZHVsZT93OntkZWZhdWx0Ond9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7Y29uc3QgQj1nKHkoNTk1NikpO18oeSgxMjMwKSxYKSxfKHkoMTM5NSksWCksXyh5KDk4MjEpLFgpLF8oeSg4MzA2KSxYKSxfKHko''@;'; put 'put ''MzQ2NyksWCksXyh5KDM2MDIpLFgpLFguZGVmYXVsdD1CLmRlZmF1bHR9LDE1NzA6ZnVuY3Rpb24odWUsWCx5KXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKFAsRixPLHope3JldHVybiBuZXcoT3x8KE89UHJvbWlzZSkpKGZ1bmN0aW9uKEwsSyl7''@;'; put 'put ''ZnVuY3Rpb24gVShxKXt0cnl7WSh6Lm5leHQocSkpfWNhdGNoKGVlKXtLKGVlKX19ZnVuY3Rpb24gVyhxKXt0cnl7WSh6LnRocm93KHEpKX1jYXRjaChlZSl7SyhlZSl9fWZ1bmN0aW9uIFkocSl7cS5kb25lP0wocS52YWx1ZSk6ZnVuY3Rpb24gTihMKXtyZXR1cm4gTCBpbnN0YW5jZW9mIE8/''@;'; put 'put ''TDpuZXcgTyhmdW5jdGlvbihLKXtLKEwpfSl9KHEudmFsdWUpLnRoZW4oVSxXKX1ZKCh6PXouYXBwbHkoUCxGfHxbXSkpLm5leHQoKSl9KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguQ29tcHV0ZUpvYkV4ZWN1dG9yPXZvaWQgMDtjb25zdCBf''@;'; put 'put ''PXkoMzkwMCksZz15KDEzOTUpLEI9eSg2MTE4KTtYLkNvbXB1dGVKb2JFeGVjdXRvcj1jbGFzcyB3IGV4dGVuZHMgQi5CYXNlSm9iRXhlY3V0b3J7Y29uc3RydWN0b3IoRixPKXtzdXBlcihGLF8uU2VydmVyVHlwZS5TYXNWaXlhKSx0aGlzLnNhc1ZpeWFBcGlDbGllbnQ9T31leGVjdXRlKEYs''@;'; put 'put ''Tyx6LE4sTCl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IEs9Tnx8KCgpPT5Qcm9taXNlLnJlc29sdmUoKSk7cmV0dXJuIG5ldyBQcm9taXNlKChxLGVlKT0+e3ZhciBKO251bGw9PT0oSj10aGlzLnNhc1ZpeWFBcGlDbGllbnQpfHx2b2lkIDA9PT1KfHxK''@;'; put 'put ''LmV4ZWN1dGVDb21wdXRlSm9iKEYsei5jb250ZXh0TmFtZSx6LmRlYnVnLE8sTCwhMCwhMCkudGhlbihuZT0+e3RoaXMuc2FzVml5YUFwaUNsaWVudC5hcHBlbmRSZXF1ZXN0KG5lLEYsei5kZWJ1ZykscShuZS5yZXN1bHQpfSkuY2F0Y2gobmU9PkkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0''@;'; put 'put ''aW9uKigpe25lIGluc3RhbmNlb2YgZy5Db21wdXRlSm9iRXhlY3V0aW9uRXJyb3ImJih0aGlzLnNhc1ZpeWFBcGlDbGllbnQuYXBwZW5kUmVxdWVzdChuZSxGLHouZGVidWcpLGVlKG5ldyBnLkVycm9yUmVzcG9uc2UobmU/Lm1lc3NhZ2UsbmUpKSksbmUgaW5zdGFuY2VvZiBnLkxvZ2luUmVx''@;'; put 'put ''dWlyZWRFcnJvcj8odGhpcy5hcHBlbmRXYWl0aW5nUmVxdWVzdCgoKT0+dGhpcy5leGVjdXRlKEYsTyx6LE4pLnRoZW4oaWU9PntxKGllKX0saWU9PntlZShpZSl9KSkseWllbGQgSygpKTplZShuZXcgZy5FcnJvclJlc3BvbnNlKG5lPy5tZXNzYWdlLG5lKSl9KSl9KX0pfX19LDM0OTE6ZnVu''@;'; put 'put ''Y3Rpb24odWUsWCx5KXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKEYsTyx6LE4pe3JldHVybiBuZXcoenx8KHo9UHJvbWlzZSkpKGZ1bmN0aW9uKEssVSl7ZnVuY3Rpb24gVyhlZSl7dHJ5e3EoTi5uZXh0KGVlKSl9Y2F0Y2goSil7VShKKX19ZnVu''@;'; put 'put ''Y3Rpb24gWShlZSl7dHJ5e3EoTi50aHJvdyhlZSkpfWNhdGNoKEope1UoSil9fWZ1bmN0aW9uIHEoZWUpe2VlLmRvbmU/SyhlZS52YWx1ZSk6ZnVuY3Rpb24gTChLKXtyZXR1cm4gSyBpbnN0YW5jZW9mIHo/SzpuZXcgeihmdW5jdGlvbihVKXtVKEspfSl9KGVlLnZhbHVlKS50aGVuKFcsWSl9''@;'; put 'put ''cSgoTj1OLmFwcGx5KEYsT3x8W10pKS5uZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLkZpbGVVcGxvYWRlcj12b2lkIDA7Y29uc3QgXz15KDU5MjgpLGc9eSgxMzk1KSxCPXkoMzkwMCksdz15KDYxMTgpO1guRmlsZVVwbG9hZGVy''@;'; put 'put ''PWNsYXNzIFAgZXh0ZW5kcyB3LkJhc2VKb2JFeGVjdXRvcntjb25zdHJ1Y3RvcihPLHosTixMKXtzdXBlcihPLHopLHRoaXMuam9ic1BhdGg9Tix0aGlzLnJlcXVlc3RDbGllbnQ9TH1leGVjdXRlKE8seixOLEwpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25z''@;'; put 'put ''dHtmaWxlczpLLHBhcmFtczpVfT16LFc9THx8KCgpPT5Qcm9taXNlLnJlc29sdmUoKSk7aWYoIUs/Lmxlbmd0aCl0aHJvdyBuZXcgZy5FcnJvclJlc3BvbnNlKCJBdCBsZWFzdCBvbmUgZmlsZSBtdXN0IGJlIHByb3ZpZGVkLiIpO2lmKCFPfHwiIj09PU8pdGhyb3cgbmV3IGcuRXJyb3JSZXNw''@;'; put 'put ''b25zZSgic2FzSm9iIG11c3QgYmUgcHJvdmlkZWQuIik7bGV0IFk9IiI7Zm9yKGxldCBtZSBpbiBVKVUuaGFzT3duUHJvcGVydHkobWUpJiYoWSs9YCYke21lfT0ke1VbbWVdfWApO2NvbnN0IHE9Ti5hcHBMb2M/Ti5hcHBMb2MucmVwbGFjZSgvXC8/JC8sIi8iKStPLnJlcGxhY2UoL15cLy8s''@;'; put 'put ''IiIpOk8sZWU9YCR7dGhpcy5qb2JzUGF0aH0vPyR7Il9wcm9ncmFtPSIrcX0ke1l9YCxKPW5ldyBGb3JtRGF0YTtmb3IobGV0IG1lIG9mIEspSi5hcHBlbmQoImZpbGUiLG1lLmZpbGUsbWUuZmlsZU5hbWUpO2NvbnN0IG5lPXRoaXMucmVxdWVzdENsaWVudC5nZXRDc3JmVG9rZW4oImZpbGUi''@;'; put 'put ''KTtuZSYmSi5hcHBlbmQoIl9jc3JmIixuZS52YWx1ZSksTi5kZWJ1ZyYmSi5hcHBlbmQoIl9kZWJ1ZyIsIjEzMSIpLE4uc2VydmVyVHlwZT09PUIuU2VydmVyVHlwZS5TYXNWaXlhJiZOLmNvbnRleHROYW1lJiZKLmFwcGVuZCgiX2NvbnRleHRuYW1lIixOLmNvbnRleHROYW1lKTtjb25zdCBp''@;'; put 'put ''ZT17ImNhY2hlLWNvbnRyb2wiOiJuby1jYWNoZSIsQWNjZXB0OiIqLyoiLCJDb250ZW50LVR5cGUiOiJ0ZXh0L3BsYWluIn07cmV0dXJuIG5ldyBQcm9taXNlKChtZSxfZSk9Pnt0aGlzLnJlcXVlc3RDbGllbnQucG9zdChlZSxKLHZvaWQgMCwiYXBwbGljYXRpb24vanNvbiIsaWUpLnRoZW4o''@;'; put 'put ''VGU9PkkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3RoaXMucmVxdWVzdENsaWVudC5hcHBlbmRSZXF1ZXN0KFRlLE8sTi5kZWJ1Zyk7bGV0IFNlPVRlLnJlc3VsdDtpZihOLmRlYnVnKXN3aXRjaCh0aGlzLnNlcnZlclR5cGUpe2Nhc2UgQi5TZXJ2ZXJUeXBlLlNhc1ZpeWE6U2U9''@;'; put 'put ''eWllbGQoMCxfLnBhcnNlU2FzVml5YURlYnVnUmVzcG9uc2UpKFRlLnJlc3VsdCx0aGlzLnJlcXVlc3RDbGllbnQsTi5zZXJ2ZXJVcmwpO2JyZWFrO2Nhc2UgQi5TZXJ2ZXJUeXBlLlNhczk6U2U9InN0cmluZyI9PXR5cGVvZiBUZS5yZXN1bHQ/KDAsXy5wYXJzZVdlYm91dFJlc3BvbnNlKShU''@;'; put 'put ''ZS5yZXN1bHQsZWUpOlRlLnJlc3VsdDticmVhaztjYXNlIEIuU2VydmVyVHlwZS5TYXNqczpTZT0ic3RyaW5nIj09dHlwZW9mIFRlLnJlc3VsdD8oMCxfLmdldFZhbGlkSnNvbikoVGUucmVzdWx0KTpUZS5yZXN1bHR9ZWxzZSBTZT0ic3RyaW5nIj09dHlwZW9mIFRlLnJlc3VsdD8oMCxfLmdl''@;'; put 'put ''dFZhbGlkSnNvbikoVGUucmVzdWx0KTpUZS5yZXN1bHQ7bWUoU2UpfSkpLmNhdGNoKFRlPT5JKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtUZSBpbnN0YW5jZW9mIGcuSm9iRXhlY3V0aW9uRXJyb3ImJih0aGlzLnJlcXVlc3RDbGllbnQuYXBwZW5kUmVxdWVzdChUZSxPLE4uZGVi''@;'; put 'put ''dWcpLF9lKG5ldyBnLkVycm9yUmVzcG9uc2UoVGU/Lm1lc3NhZ2UsVGUpKSksVGUgaW5zdGFuY2VvZiBnLkxvZ2luUmVxdWlyZWRFcnJvcj8odGhpcy5hcHBlbmRXYWl0aW5nUmVxdWVzdCgoKT0+dGhpcy5leGVjdXRlKE8seixOLEwpLnRoZW4oU2U9PnttZShTZSl9LFNlPT57X2UoU2UpfSkp''@;'; put 'put ''LHlpZWxkIFcoKSk6X2UobmV3IGcuRXJyb3JSZXNwb25zZSgiRmlsZSB1cGxvYWQgcmVxdWVzdCBmYWlsZWQuIixUZSkpfSkpfSl9KX19fSw0NDQ2OmZ1bmN0aW9uKHVlLFgseSl7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihGLE8seixOKXtyZXR1''@;'; put 'put ''cm4gbmV3KHp8fCh6PVByb21pc2UpKShmdW5jdGlvbihLLFUpe2Z1bmN0aW9uIFcoZWUpe3RyeXtxKE4ubmV4dChlZSkpfWNhdGNoKEope1UoSil9fWZ1bmN0aW9uIFkoZWUpe3RyeXtxKE4udGhyb3coZWUpKX1jYXRjaChKKXtVKEopfX1mdW5jdGlvbiBxKGVlKXtlZS5kb25lP0soZWUudmFs''@;'; put 'put ''dWUpOmZ1bmN0aW9uIEwoSyl7cmV0dXJuIEsgaW5zdGFuY2VvZiB6P0s6bmV3IHooZnVuY3Rpb24oVSl7VShLKX0pfShlZS52YWx1ZSkudGhlbihXLFkpfXEoKE49Ti5hcHBseShGLE98fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVl''@;'; put 'put ''OiEwfSksWC5KZXNKb2JFeGVjdXRvcj12b2lkIDA7Y29uc3QgXz15KDM5MDApLGc9eSgxMzk1KSxCPXkoNjExOCksdz15KDU5MjgpO1guSmVzSm9iRXhlY3V0b3I9Y2xhc3MgUCBleHRlbmRzIEIuQmFzZUpvYkV4ZWN1dG9ye2NvbnN0cnVjdG9yKE8seil7c3VwZXIoTyxfLlNlcnZlclR5cGUu''@;'; put 'put ''U2FzVml5YSksdGhpcy5zYXNWaXlhQXBpQ2xpZW50PXp9ZXhlY3V0ZShPLHosTixMLEssVT1bXSl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IFc9THx8KCgpPT5Qcm9taXNlLnJlc29sdmUoKSk7cmV0dXJuIG5ldyBQcm9taXNlKChxLGVlKT0+e3ZhciBK''@;'; put 'put ''O251bGw9PT0oSj10aGlzLnNhc1ZpeWFBcGlDbGllbnQpfHx2b2lkIDA9PT1KfHxKLmV4ZWN1dGVKb2IoTyxOLmNvbnRleHROYW1lLE4uZGVidWcseixLKS50aGVuKG5lPT57dGhpcy5zYXNWaXlhQXBpQ2xpZW50LmFwcGVuZFJlcXVlc3QobmUsTyxOLmRlYnVnKTtjb25zdCBpZT0oMCx3LmFw''@;'; put 'put ''cGVuZEV4dHJhUmVzcG9uc2VBdHRyaWJ1dGVzKShuZSxVKTtxKGllKX0pLmNhdGNoKG5lPT5JKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtuZSBpbnN0YW5jZW9mIGcuSm9iRXhlY3V0aW9uRXJyb3ImJih0aGlzLnNhc1ZpeWFBcGlDbGllbnQuYXBwZW5kUmVxdWVzdChuZSxPLE4u''@;'; put 'put ''ZGVidWcpLGVlKG5ldyBnLkVycm9yUmVzcG9uc2UobmU/Lm1lc3NhZ2UsbmUpKSksbmUgaW5zdGFuY2VvZiBnLkxvZ2luUmVxdWlyZWRFcnJvcj8odGhpcy5hcHBlbmRXYWl0aW5nUmVxdWVzdCgoKT0+dGhpcy5leGVjdXRlKE8seixOLEwsSyxVKS50aGVuKGllPT57cShpZSl9LGllPT57ZWUo''@;'; put 'put ''aWUpfSkpLHlpZWxkIFcoKSk6ZWUobmV3IGcuRXJyb3JSZXNwb25zZShuZT8ubWVzc2FnZSxuZSkpfSkpfSl9KX19fSw2MTE4OmZ1bmN0aW9uKHVlLFgseSl7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihCLHcsUCxGKXtyZXR1cm4gbmV3KFB8fChQ''@;'; put 'put ''PVByb21pc2UpKShmdW5jdGlvbih6LE4pe2Z1bmN0aW9uIEwoVyl7dHJ5e1UoRi5uZXh0KFcpKX1jYXRjaChZKXtOKFkpfX1mdW5jdGlvbiBLKFcpe3RyeXtVKEYudGhyb3coVykpfWNhdGNoKFkpe04oWSl9fWZ1bmN0aW9uIFUoVyl7Vy5kb25lP3ooVy52YWx1ZSk6ZnVuY3Rpb24gTyh6KXty''@;'; put 'put ''ZXR1cm4geiBpbnN0YW5jZW9mIFA/ejpuZXcgUChmdW5jdGlvbihOKXtOKHopfSl9KFcudmFsdWUpLnRoZW4oTCxLKX1VKChGPUYuYXBwbHkoQix3fHxbXSkpLm5leHQoKSl9KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguQmFzZUpvYkV4ZWN1''@;'; put 'put ''dG9yPXZvaWQgMDtjb25zdCBfPXkoNTkyOCk7WC5CYXNlSm9iRXhlY3V0b3I9Y2xhc3MgZ3tjb25zdHJ1Y3Rvcih3LFApe3RoaXMuc2VydmVyVXJsPXcsdGhpcy5zZXJ2ZXJUeXBlPVAsdGhpcy53YWl0aW5nUmVxdWVzdHM9W10sdGhpcy5yZXNlbmRXYWl0aW5nUmVxdWVzdHM9KCk9PkkodGhp''@;'; put 'put ''cyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3lpZWxkKDAsXy5hc3luY0ZvckVhY2gpKHRoaXMud2FpdGluZ1JlcXVlc3RzLEY9PkkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3lpZWxkIEYoKX0pKSx0aGlzLndhaXRpbmdSZXF1ZXN0cz1bXX0pfWFwcGVuZFdhaXRpbmdSZXF1''@;'; put 'put ''ZXN0KHcpe3RoaXMud2FpdGluZ1JlcXVlc3RzLnB1c2godyl9Z2V0UmVxdWVzdFBhcmFtcyh3KXtjb25zdCBQPXt9O3JldHVybiB3LmRlYnVnJiYoUC5fb21pdHRleHRsb2c9ImZhbHNlIixQLl9vbWl0c2Vzc2lvbnJlc3VsdHM9ImZhbHNlIixQLl9kZWJ1Zz0xMzEpLFB9fX0sMjY5MzpmdW5j''@;'; put 'put ''dGlvbih1ZSxYLHkpeyJ1c2Ugc3RyaWN0Ijt2YXIgST10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oTixMLEssVSl7cmV0dXJuIG5ldyhLfHwoSz1Qcm9taXNlKSkoZnVuY3Rpb24oWSxxKXtmdW5jdGlvbiBlZShpZSl7dHJ5e25lKFUubmV4dChpZSkpfWNhdGNoKGxlKXtxKGxlKX19''@;'; put 'put ''ZnVuY3Rpb24gSihpZSl7dHJ5e25lKFUudGhyb3coaWUpKX1jYXRjaChsZSl7cShsZSl9fWZ1bmN0aW9uIG5lKGllKXtpZS5kb25lP1koaWUudmFsdWUpOmZ1bmN0aW9uIFcoWSl7cmV0dXJuIFkgaW5zdGFuY2VvZiBLP1k6bmV3IEsoZnVuY3Rpb24ocSl7cShZKX0pfShpZS52YWx1ZSkudGhl''@;'; put 'put ''bihlZSxKKX1uZSgoVT1VLmFwcGx5KE4sTHx8W10pKS5uZXh0KCkpfSl9LF89dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKE4pe3JldHVybiBOJiZOLl9fZXNNb2R1bGU/Tjp7ZGVmYXVsdDpOfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1''@;'; put 'put ''ZTohMH0pLFguU2FzOUpvYkV4ZWN1dG9yPXZvaWQgMDtjb25zdCBnPV8oeSg2MjMwKSksQj15KDEzOTUpLHc9eSg1OTI4KSxQPXkoNjExOCksRj15KDc5NSk7WC5TYXM5Sm9iRXhlY3V0b3I9Y2xhc3MgTyBleHRlbmRzIFAuQmFzZUpvYkV4ZWN1dG9ye2NvbnN0cnVjdG9yKEwsSyxVLFcsWSl7''@;'; put 'put ''c3VwZXIoTCxLKSx0aGlzLmpvYnNQYXRoPVUsdGhpcy5yZXF1ZXN0Q2xpZW50PVcsdGhpcy5zYXM5UmVxdWVzdENsaWVudD1uZXcgRi5TYXM5UmVxdWVzdENsaWVudChMLFkpfWV4ZWN1dGUoTCxLLFUpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBXPSgw''@;'; put 'put ''LHcuaXNSZWxhdGl2ZVBhdGgpKEwpJiZVLmFwcExvYz9VLmFwcExvYy5yZXBsYWNlKC9cLz8kLywiLyIpK0wucmVwbGFjZSgvXlwvLywiIik6TDtsZXQgWT1gJHtVLnNlcnZlclVybH0ke3RoaXMuam9ic1BhdGh9PyR7Il9wcm9ncmFtPSIrV31gO1k9YCR7WX0ke1UudXNlcm5hbWUmJlUucGFz''@;'; put 'put ''c3dvcmQ/IiZfdXNlcm5hbWU9IitVLnVzZXJuYW1lKyImX3Bhc3N3b3JkPSIrVS5wYXNzd29yZDoiIn1gLFk9YCR7WX0ke1UuZGVidWc/IiZfZGVidWc9MTMxIjoiIn1gO2xldCBxPU9iamVjdC5hc3NpZ24oe30sdGhpcy5nZXRSZXF1ZXN0UGFyYW1zKFUpKSxlZT1uZXcgZy5kZWZhdWx0O2lm''@;'; put 'put ''KEspdHJ5e2VlPXooZWUsSyl9Y2F0Y2goaWUpe3JldHVybiBQcm9taXNlLnJlamVjdChuZXcgQi5FcnJvclJlc3BvbnNlKGllPy5tZXNzYWdlLGllKSl9ZWxzZSBLPSIiO2Zvcihjb25zdCBpZSBpbiBxKXEuaGFzT3duUHJvcGVydHkoaWUpJiZlZS5hcHBlbmQoaWUscVtpZV0pO3lpZWxkIHRo''@;'; put 'put ''aXMuc2FzOVJlcXVlc3RDbGllbnQubG9naW4oVS51c2VybmFtZSxVLnBhc3N3b3JkLHRoaXMuam9ic1BhdGgpO2NvbnN0IEo9SyYmT2JqZWN0LmtleXMoSykubGVuZ3RoPyJtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0iK2VlLl9ib3VuZGFyeToidGV4dC9wbGFpbiI7cmV0dXJuIG5l''@;'; put 'put ''dyBQcm9taXNlKChpZSxsZSk9PnRoaXMuc2FzOVJlcXVlc3RDbGllbnQucG9zdChZLGVlLHZvaWQgMCxKLHtBY2NlcHQ6IiovKiIsQ29ubmVjdGlvbjoiS2VlcC1BbGl2ZSJ9KS50aGVuKG1lPT57dGhpcy5yZXF1ZXN0Q2xpZW50LmFwcGVuZFJlcXVlc3QobWUsTCxVLmRlYnVnKSxpZShtZSl9''@;'; put 'put ''KS5jYXRjaChtZT0+e2xldCBfZT1tZTttZS5yZXN1bHQmJiIiIT09bWUucmVzdWx0P19lPW1lLnJlc3VsdDptZS5tZXNzYWdlJiYoX2U9bWUubWVzc2FnZSksdGhpcy5yZXF1ZXN0Q2xpZW50LmFwcGVuZFJlcXVlc3QoX2UsTCxVLmRlYnVnKSxsZShuZXcgQi5FcnJvclJlc3BvbnNlKG1lPy5t''@;'; put 'put ''ZXNzYWdlLG1lKSl9KSl9KX1nZXRSZXF1ZXN0UGFyYW1zKEwpe2NvbnN0IEs9e307cmV0dXJuIEwuZGVidWcmJihLLl9kZWJ1Zz0xMzEpLEt9fTtjb25zdCB6PShOLEwpPT57Zm9yKGNvbnN0IEsgaW4gTCl7Y29uc3QgVT1LLFc9KDAsdy5jb252ZXJ0VG9DU1YpKEwsSyk7aWYoIkVSUk9SOiBM''@;'; put 'put ''QVJHRSBTVFJJTkcgTEVOR1RIIj09PVcpdGhyb3cgbmV3IEVycm9yKCJUaGUgbWF4IGxlbmd0aCBvZiBhIHN0cmluZyB2YWx1ZSBpbiBTQVNqcyBpcyAzMjc2NSBjaGFyYWN0ZXJzLiIpO04uYXBwZW5kKFUsVyx7ZmlsZW5hbWU6YCR7VX0uY3N2YCxjb250ZW50VHlwZToiYXBwbGljYXRpb24v''@;'; put 'put ''Y3N2In0pfXJldHVybiBOfX0sMTA2NTpmdW5jdGlvbih1ZSxYLHkpeyJ1c2Ugc3RyaWN0Ijt2YXIgST10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oTCxLLFUsVyl7cmV0dXJuIG5ldyhVfHwoVT1Qcm9taXNlKSkoZnVuY3Rpb24ocSxlZSl7ZnVuY3Rpb24gSihsZSl7dHJ5e2llKFcu''@;'; put 'put ''bmV4dChsZSkpfWNhdGNoKG1lKXtlZShtZSl9fWZ1bmN0aW9uIG5lKGxlKXt0cnl7aWUoVy50aHJvdyhsZSkpfWNhdGNoKG1lKXtlZShtZSl9fWZ1bmN0aW9uIGllKGxlKXtsZS5kb25lP3EobGUudmFsdWUpOmZ1bmN0aW9uIFkocSl7cmV0dXJuIHEgaW5zdGFuY2VvZiBVP3E6bmV3IFUoZnVu''@;'; put 'put ''Y3Rpb24oZWUpe2VlKHEpfSl9KGxlLnZhbHVlKS50aGVuKEosbmUpfWllKChXPVcuYXBwbHkoTCxLfHxbXSkpLm5leHQoKSl9KX0sXz10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oTCl7cmV0dXJuIEwmJkwuX19lc01vZHVsZT9MOntkZWZhdWx0Okx9fTtPYmplY3QuZGVm''@;'; put 'put ''aW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5TYXNqc0pvYkV4ZWN1dG9yPXZvaWQgMDtjb25zdCBnPV8oeSg2MjMwKSksQj15KDM5MDApLHc9eSgxMzk1KSxQPXkoNDAzNyksRj15KDU5MjgpLE89eSg1OTI4KSx6PXkoNjExOCk7WC5TYXNqc0pvYkV4ZWN1dG9yPWNs''@;'; put 'put ''YXNzIE4gZXh0ZW5kcyB6LkJhc2VKb2JFeGVjdXRvcntjb25zdHJ1Y3RvcihLLFUsVyl7c3VwZXIoSyxCLlNlcnZlclR5cGUuU2FzanMpLHRoaXMuam9ic1BhdGg9VSx0aGlzLnJlcXVlc3RDbGllbnQ9V31leGVjdXRlKEssVSxXLFkscSxlZT1bXSl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9p''@;'; put 'put ''ZCAwLGZ1bmN0aW9uKigpe2NvbnN0IEo9WSxuZT0oMCxPLmlzUmVsYXRpdmVQYXRoKShLKSYmVy5hcHBMb2M/Vy5hcHBMb2MucmVwbGFjZSgvXC8/JC8sIi8iKStLLnJlcGxhY2UoL15cLy8sIiIpOks7bGV0IGllPWAke1cuc2VydmVyVXJsfSR7dGhpcy5qb2JzUGF0aH0vPyR7Il9wcm9ncmFt''@;'; put 'put ''PSIrbmV9YCxsZT1PYmplY3QuYXNzaWduKHt9LHRoaXMuZ2V0UmVxdWVzdFBhcmFtcyhXKSksbWU9KDAsRi5nZXRGb3JtRGF0YSkoKTtpZihVKXRyeXttZT0oMCxQLmdlbmVyYXRlRmlsZVVwbG9hZEZvcm0pKG1lLFUpfWNhdGNoKFNlKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IHcuRXJy''@;'; put 'put ''b3JSZXNwb25zZShTZT8ubWVzc2FnZSxTZSkpfWZvcihjb25zdCBTZSBpbiBsZSlsZS5oYXNPd25Qcm9wZXJ0eShTZSkmJm1lLmFwcGVuZChTZSxsZVtTZV0pO2NvbnN0IF9lPW1lIGluc3RhbmNlb2YgZy5kZWZhdWx0JiZ0eXBlb2YgRm9ybURhdGE+InUiP2BtdWx0aXBhcnQvZm9ybS1kYXRh''@;'; put 'put ''OyBib3VuZGFyeT0ke21lLmdldEhlYWRlcnMoKVsiY29udGVudC10eXBlIl19YDoibXVsdGlwYXJ0L2Zvcm0tZGF0YSI7cmV0dXJuIG5ldyBQcm9taXNlKChTZSxqZSk9Pnt0aGlzLnJlcXVlc3RDbGllbnQucG9zdChpZSxtZSxxPy5hY2Nlc3NfdG9rZW4sX2UpLnRoZW4oVj0+SSh0aGlzLHZv''@;'; put 'put ''aWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7aWYoT2JqZWN0LmVudHJpZXMoVi5yZXN1bHQpLmxlbmd0aDwxKXRocm93IG5ldyB3LkpvYkV4ZWN1dGlvbkVycm9yKDAsYE5vIHdlYm91dCB3YXMgcmV0dXJuZWQgYnkgam9iICR7bmV9LiAgUGxlYXNlIGNoZWNrIHRoZSBTQVMgbG9nIGZvciBtb3Jl''@;'; put 'put ''IGluZm8uYCxWLmxvZyk7Y29uc3R7cmVzdWx0OnB9PVY7cCYmInN0cmluZyI9PXR5cGVvZiBwJiZwLnRyaW0oKSYmKFYucmVzdWx0PSgwLE8uZ2V0VmFsaWRKc29uKShwKSksdGhpcy5yZXF1ZXN0Q2xpZW50LmFwcGVuZFJlcXVlc3QoVixLLFcuZGVidWcpO2NvbnN0IGI9KDAsTy5hcHBlbmRF''@;'; put 'put ''eHRyYVJlc3BvbnNlQXR0cmlidXRlcykoVixlZSk7U2UoYil9KSkuY2F0Y2goVj0+SSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7ViBpbnN0YW5jZW9mIHcuSm9iRXhlY3V0aW9uRXJyb3ImJih0aGlzLnJlcXVlc3RDbGllbnQuYXBwZW5kUmVxdWVzdChWLEssVy5kZWJ1ZyksamUo''@;'; put 'put ''bmV3IHcuRXJyb3JSZXNwb25zZShWPy5tZXNzYWdlLFYpKSksViBpbnN0YW5jZW9mIHcuTG9naW5SZXF1aXJlZEVycm9yPyhZfHxqZShuZXcgdy5FcnJvclJlc3BvbnNlKCJSZXF1ZXN0IGlzIG5vdCBhdXRoZW50aWNhdGVkLiBNYWtlIHN1cmUgLmVudiBmaWxlIGV4aXN0cyB3aXRoIHZhbGlk''@;'; put 'put ''IGNyZWRlbnRpYWxzLiIsVikpLHRoaXMuYXBwZW5kV2FpdGluZ1JlcXVlc3QoKCk9PnRoaXMuZXhlY3V0ZShLLFUsVyxZLHEsZWUpLnRoZW4ocD0+e1NlKHApfSxwPT57amUocCl9KSksSiYmKHlpZWxkIEooKSkpOmplKG5ldyB3LkVycm9yUmVzcG9uc2UoVj8ubWVzc2FnZSxWKSl9KSl9KX0p''@;'; put 'put ''fX19LDYwODQ6ZnVuY3Rpb24odWUsWCx5KXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKEwsSyxVLFcpe3JldHVybiBuZXcoVXx8KFU9UHJvbWlzZSkpKGZ1bmN0aW9uKHEsZWUpe2Z1bmN0aW9uIEoobGUpe3RyeXtpZShXLm5leHQobGUpKX1jYXRj''@;'; put 'put ''aChtZSl7ZWUobWUpfX1mdW5jdGlvbiBuZShsZSl7dHJ5e2llKFcudGhyb3cobGUpKX1jYXRjaChtZSl7ZWUobWUpfX1mdW5jdGlvbiBpZShsZSl7bGUuZG9uZT9xKGxlLnZhbHVlKTpmdW5jdGlvbiBZKHEpe3JldHVybiBxIGluc3RhbmNlb2YgVT9xOm5ldyBVKGZ1bmN0aW9uKGVlKXtlZShx''@;'; put 'put ''KX0pfShsZS52YWx1ZSkudGhlbihKLG5lKX1pZSgoVz1XLmFwcGx5KEwsS3x8W10pKS5uZXh0KCkpfSl9LF89dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKEwpe3JldHVybiBMJiZMLl9fZXNNb2R1bGU/TDp7ZGVmYXVsdDpMfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgs''@;'; put 'put ''Il9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguV2ViSm9iRXhlY3V0b3I9dm9pZCAwO2NvbnN0IGc9Xyh5KDYyMzApKSxCPXkoMzkwMCksdz15KDEzOTUpLFA9eSg0MDM3KSxGPXkoMjE3MCksTz15KDU5MjgpLHo9eSg2MTE4KTtYLldlYkpvYkV4ZWN1dG9yPWNsYXNzIE4gZXh0ZW5kcyB6LkJh''@;'; put 'put ''c2VKb2JFeGVjdXRvcntjb25zdHJ1Y3RvcihLLFUsVyxZLHEpe3N1cGVyKEssVSksdGhpcy5qb2JzUGF0aD1XLHRoaXMucmVxdWVzdENsaWVudD1ZLHRoaXMuc2FzVml5YUFwaUNsaWVudD1xfWV4ZWN1dGUoSyxVLFcsWSxxLGVlPVtdKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVu''@;'; put 'put ''Y3Rpb24qKCl7Y29uc3QgSj1ZLG5lPSgwLE8uaXNSZWxhdGl2ZVBhdGgpKEspJiZXLmFwcExvYz9XLmFwcExvYy5yZXBsYWNlKC9cLz8kLywiLyIpK0sucmVwbGFjZSgvXlwvLywiIik6SztsZXQgaWU9YCR7Vy5zZXJ2ZXJVcmx9JHt0aGlzLmpvYnNQYXRofS8/JHsiX3Byb2dyYW09IituZX1g''@;'; put 'put ''O2lmKFcuc2VydmVyVHlwZT09PUIuU2VydmVyVHlwZS5TYXNWaXlhKXtsZXQgU2U7dHJ5e1NlPXlpZWxkIHRoaXMuZ2V0Sm9iVXJpKEspfWNhdGNoKGplKXtyZXR1cm4gbmV3IFByb21pc2UoKFYscCk9PkkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2plIGluc3RhbmNlb2Ygdy5M''@;'; put 'put ''b2dpblJlcXVpcmVkRXJyb3I/KHRoaXMuYXBwZW5kV2FpdGluZ1JlcXVlc3QoKCk9PnRoaXMuZXhlY3V0ZShLLFUsVyxZLHEsZWUpLnRoZW4oYj0+e1YoYil9LGI9PntwKGIpfSkpLEomJih5aWVsZCBKKCkpKTpwKG5ldyB3LkVycm9yUmVzcG9uc2UoamU/Lm1lc3NhZ2UsamUpKX0pKX1pZSs9''@;'; put 'put ''U2UubGVuZ3RoPjA/IiZfam9iPSIrU2U6IiIsU2UubGVuZ3RoPjAmJihpZSs9IiZfam9iPSIrU2UsaWU9aWUucmVwbGFjZSgiX3Byb2dyYW09IiwiX19wcm9ncmFtPSIpKSxpZSs9Vy5jb250ZXh0TmFtZSYmIS9ccy8udGVzdChXLmNvbnRleHROYW1lKT9gJl9jb250ZXh0bmFtZT0ke1cuY29u''@;'; put 'put ''dGV4dE5hbWV9YDoiIn1sZXQgbGU9T2JqZWN0LmFzc2lnbih7fSx0aGlzLmdldFJlcXVlc3RQYXJhbXMoVykpLG1lPSgwLE8uZ2V0Rm9ybURhdGEpKCk7aWYoVSl7Y29uc3QgU2U9SlNPTi5zdHJpbmdpZnkoVSk7aWYoVy5zZXJ2ZXJUeXBlPT09Qi5TZXJ2ZXJUeXBlLlNhczl8fFNlLmxlbmd0''@;'; put 'put ''aD41ZTV8fFNlLmluY2x1ZGVzKCI7IikpdHJ5e21lPSgwLFAuZ2VuZXJhdGVGaWxlVXBsb2FkRm9ybSkobWUsVSl9Y2F0Y2goamUpe3JldHVybiBQcm9taXNlLnJlamVjdChuZXcgdy5FcnJvclJlc3BvbnNlKGplPy5tZXNzYWdlLGplKSl9ZWxzZSB0cnl7Y29uc3R7Zm9ybURhdGE6amUscmVx''@;'; put 'put ''dWVzdFBhcmFtczpWfT0oMCxGLmdlbmVyYXRlVGFibGVVcGxvYWRGb3JtKShtZSxVKTttZT1qZSxsZT1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sbGUpLFYpfWNhdGNoKGplKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IHcuRXJyb3JSZXNwb25zZShqZT8ubWVzc2FnZSxqZSkp''@;'; put 'put ''fX1mb3IoY29uc3QgU2UgaW4gbGUpbGUuaGFzT3duUHJvcGVydHkoU2UpJiZtZS5hcHBlbmQoU2UsbGVbU2VdKTtjb25zdCBfZT1tZSBpbnN0YW5jZW9mIGcuZGVmYXVsdCYmdHlwZW9mIEZvcm1EYXRhPiJ1Ij9gbXVsdGlwYXJ0L2Zvcm0tZGF0YTsgYm91bmRhcnk9JHttZS5nZXRIZWFkZXJz''@;'; put 'put ''KClbImNvbnRlbnQtdHlwZSJdfWA6Im11bHRpcGFydC9mb3JtLWRhdGEiO3JldHVybiBuZXcgUHJvbWlzZSgoU2UsamUpPT57dGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QoaWUsbWUscT8uYWNjZXNzX3Rva2VuLF9lKS50aGVuKFY9PkkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3Ro''@;'; put 'put ''aXMucmVxdWVzdENsaWVudC5hcHBlbmRSZXF1ZXN0KFYsSyxXLmRlYnVnKTtsZXQgcD1WLnJlc3VsdDtpZihXLmRlYnVnKXN3aXRjaCh0aGlzLnNlcnZlclR5cGUpe2Nhc2UgQi5TZXJ2ZXJUeXBlLlNhc1ZpeWE6cD15aWVsZCgwLE8ucGFyc2VTYXNWaXlhRGVidWdSZXNwb25zZSkoVi5yZXN1''@;'; put 'put ''bHQsdGhpcy5yZXF1ZXN0Q2xpZW50LHRoaXMuc2VydmVyVXJsKTticmVhaztjYXNlIEIuU2VydmVyVHlwZS5TYXM5OnA9InN0cmluZyI9PXR5cGVvZiBWLnJlc3VsdD8oMCxPLnBhcnNlV2Vib3V0UmVzcG9uc2UpKFYucmVzdWx0LGllKTpWLnJlc3VsdH1jb25zdCBiPSgwLE8uYXBwZW5kRXh0''@;'; put 'put ''cmFSZXNwb25zZUF0dHJpYnV0ZXMpKHtyZXN1bHQ6cCxsb2c6Vi5sb2d9LGVlKTtTZShiKX0pKS5jYXRjaChWPT5JKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtWIGluc3RhbmNlb2Ygdy5Kb2JFeGVjdXRpb25FcnJvciYmKHRoaXMucmVxdWVzdENsaWVudC5hcHBlbmRSZXF1ZXN0''@;'; put 'put ''KFYsSyxXLmRlYnVnKSxqZShuZXcgdy5FcnJvclJlc3BvbnNlKFY/Lm1lc3NhZ2UsVikpKSxWIGluc3RhbmNlb2Ygdy5Mb2dpblJlcXVpcmVkRXJyb3I/KFl8fGplKG5ldyB3LkVycm9yUmVzcG9uc2UoIlJlcXVlc3QgaXMgbm90IGF1dGhlbnRpY2F0ZWQuIE1ha2Ugc3VyZSAuZW52IGZpbGUg''@;'; put 'put ''ZXhpc3RzIHdpdGggdmFsaWQgY3JlZGVudGlhbHMuIixWKSksdGhpcy5hcHBlbmRXYWl0aW5nUmVxdWVzdCgoKT0+dGhpcy5leGVjdXRlKEssVSxXLFkscSxlZSkudGhlbihwPT57U2UocCl9LHA9PntqZShwKX0pKSxKJiYoeWllbGQgSigpKSk6amUobmV3IHcuRXJyb3JSZXNwb25zZShWPy5t''@;'; put 'put ''ZXNzYWdlLFYpKX0pKX0pfSl9Z2V0Sm9iVXJpKEspe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtpZighdGhpcy5zYXNWaXlhQXBpQ2xpZW50KXJldHVybiIiO2xldCBXLFksVT0iIjtpZigoMCxPLmlzUmVsYXRpdmVQYXRoKShLKSl7Y29uc3QgZWU9Sy5zcGxpdCgi''@;'; put 'put ''LyIpO1c9ZWUubGVuZ3RoPjE/ZWVbMF06IiIsWT1lZS5sZW5ndGg+MT9lZVsxXToiIn1lbHNle2NvbnN0IGVlPUsuc3BsaXQoIi8iKTtZPWVlLnBvcCgpfHwiIixXPWVlLmpvaW4oIi8iKX1pZighWSl0aHJvdyBuZXcgRXJyb3IoIkpvYiBuYW1lIGlzIGVtcHR5LCBudWxsIG9yIHVuZGVmaW5l''@;'; put 'put ''ZC4iKTtjb25zdCBxPXlpZWxkIHRoaXMuc2FzVml5YUFwaUNsaWVudC5nZXRKb2JzSW5Gb2xkZXIoVyk7aWYocSl7Y29uc3QgZWU9cS5maW5kKEo9PkoubmFtZT09PVkmJiJqb2JEZWZpbml0aW9uIj09PUouY29udGVudFR5cGUpO2VlJiYoVT1lZS51cmkpfXJldHVybiBVfSl9fX0sODIxNzpm''@;'; put 'put ''dW5jdGlvbih1ZSxYLHkpeyJ1c2Ugc3RyaWN0Ijt2YXIgST10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZyxCLHcsUCl7dm9pZCAwPT09UCYmKFA9dyk7dmFyIEY9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihCLHcpOyghRnx8KCJn''@;'; put 'put ''ZXQiaW4gRj8hQi5fX2VzTW9kdWxlOkYud3JpdGFibGV8fEYuY29uZmlndXJhYmxlKSkmJihGPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBCW3ddfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShnLFAsRil9OmZ1bmN0aW9uKGcsQix3LFApe3ZvaWQgMD09PVAmJihQPXcp''@;'; put 'put ''LGdbUF09Qlt3XX0pLF89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGcsQil7Zm9yKHZhciB3IGluIGcpImRlZmF1bHQiIT09dyYmIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChCLHcpJiZJKEIsZyx3KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9f''@;'; put 'put ''ZXNNb2R1bGUiLHt2YWx1ZTohMH0pLF8oeSgxNTcwKSxYKSxfKHkoMzQ5MSksWCksXyh5KDQ0NDYpLFgpLF8oeSg2MTE4KSxYKSxfKHkoMjY5MyksWCksXyh5KDYwODQpLFgpLF8oeSgxMDY1KSxYKX0sNDU4ODpmdW5jdGlvbih1ZSxYLHkpeyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDQxNTUpLF89''@;'; put 'put ''eSg1MTA4KSxnPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihuZSxpZSxsZSxtZSl7dm9pZCAwPT09bWUmJihtZT1sZSk7dmFyIF9lPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaWUsbGUpOyghX2V8fCgiZ2V0ImluIF9lPyFpZS5f''@;'; put 'put ''X2VzTW9kdWxlOl9lLndyaXRhYmxlfHxfZS5jb25maWd1cmFibGUpKSYmKF9lPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBpZVtsZV19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KG5lLG1lLF9lKX06ZnVuY3Rpb24obmUsaWUsbGUsbWUpe3ZvaWQgMD09PW1lJiYobWU9''@;'; put 'put ''bGUpLG5lW21lXT1pZVtsZV19KSxCPXRoaXMmJnRoaXMuX19zZXRNb2R1bGVEZWZhdWx0fHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihuZSxpZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KG5lLCJkZWZhdWx0Iix7ZW51bWVyYWJsZTohMCx2YWx1ZTppZX0pfTpmdW5jdGlvbihuZSxpZSl7bmUu''@;'; put 'put ''ZGVmYXVsdD1pZX0pLHc9dGhpcyYmdGhpcy5fX2ltcG9ydFN0YXJ8fGZ1bmN0aW9uKG5lKXtpZihuZSYmbmUuX19lc01vZHVsZSlyZXR1cm4gbmU7dmFyIGllPXt9O2lmKG51bGwhPW5lKWZvcih2YXIgbGUgaW4gbmUpImRlZmF1bHQiIT09bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJv''@;'; put 'put ''cGVydHkuY2FsbChuZSxsZSkmJmcoaWUsbmUsbGUpO3JldHVybiBCKGllLG5lKSxpZX0sUD10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24obmUsaWUsbGUsbWUpe3JldHVybiBuZXcobGV8fChsZT1Qcm9taXNlKSkoZnVuY3Rpb24oVGUsU2Upe2Z1bmN0aW9uIGplKGIpe3RyeXtwKG1l''@;'; put 'put ''Lm5leHQoYikpfWNhdGNoKHgpe1NlKHgpfX1mdW5jdGlvbiBWKGIpe3RyeXtwKG1lLnRocm93KGIpKX1jYXRjaCh4KXtTZSh4KX19ZnVuY3Rpb24gcChiKXtiLmRvbmU/VGUoYi52YWx1ZSk6ZnVuY3Rpb24gX2UoVGUpe3JldHVybiBUZSBpbnN0YW5jZW9mIGxlP1RlOm5ldyBsZShmdW5jdGlv''@;'; put 'put ''bihTZSl7U2UoVGUpfSl9KGIudmFsdWUpLnRoZW4oamUsVil9cCgobWU9bWUuYXBwbHkobmUsaWV8fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC50aHJvd0lmRXJyb3I9WC5SZXF1ZXN0Q2xpZW50PXZvaWQgMDtjb25z''@;'; put 'put ''dCBGPXcoeSg4MzczKSksTz15KDE1MjcpLHo9eSgxMzk1KSxOPXkoMjgxMyksTD15KDk3NzgpLEs9eSg5NTI2KSxVPXkoNTkyOCksVz15KDEwMDUpLFk9eSg5NTM5KTtYLlJlcXVlc3RDbGllbnQ9Y2xhc3MgcXtjb25zdHJ1Y3RvcihpZSxsZSxtZSxfZSl7dGhpcy5iYXNlVXJsPWllLHRoaXMu''@;'; put 'put ''cmVxdWVzdHM9W10sdGhpcy5yZXF1ZXN0c0xpbWl0PTEwLHRoaXMudmVyYm9zZU1vZGU9ITEsdGhpcy5jc3JmVG9rZW49e2hlYWRlck5hbWU6IiIsdmFsdWU6IiJ9LHRoaXMuZ2V0UmVxdWVzdHM9KCk9PnRoaXMucmVxdWVzdHMsdGhpcy5jbGVhclJlcXVlc3RzPSgpPT57dGhpcy5yZXF1ZXN0''@;'; put 'put ''cz1bXX0sdGhpcy5hdXRob3JpemU9VGU9PlAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2xldCBTZT1udWxsO2NvbnN0IGplPXt9LFY9VGUuc3BsaXQoIjxib2R5PiIpWzFdLnNwbGl0KCI8L2JvZHk+IilbMF0scD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtwLmlubmVy''@;'; put 'put ''SFRNTD1WO2NvbnN0IGI9cC5xdWVyeVNlbGVjdG9yKCIjYXBwbGljYXRpb25fYXV0aG9yaXphdGlvbiIpO1NlPWI/dGhpcy5iYXNlVXJsK2IuZ2V0QXR0cmlidXRlKCJhY3Rpb24iKTpudWxsO2NvbnN0IHg9Yj8ucXVlcnlTZWxlY3RvckFsbCgiaW5wdXQiKTtmb3IoY29uc3QgSCBvZiB4KSJ1''@;'; put 'put ''c2VyX29hdXRoX2FwcHJvdmFsIj09PUgubmFtZSYmKEgudmFsdWU9InRydWUiKSxqZVtILm5hbWVdPUgudmFsdWU7Y29uc3QgQz1PYmplY3Qua2V5cyhqZSkuZmluZChIPT5IPy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCJjc3JmIikpO0MmJih0aGlzLmNzcmZUb2tlbi52YWx1ZT1qZVtDXSx0''@;'; put 'put ''aGlzLmNzcmZUb2tlbi5oZWFkZXJOYW1lPXRoaXMuY3NyZlRva2VuLmhlYWRlck5hbWV8fCJ4LWNzcmYtdG9rZW4iKTtjb25zdCBUPW5ldyBGb3JtRGF0YTtmb3IoY29uc3QgSCBpbiBqZSlqZS5oYXNPd25Qcm9wZXJ0eShIKSYmVC5hcHBlbmQoSCxqZVtIXSk7aWYoIVNlKXRocm93IG5ldyBF''@;'; put 'put ''cnJvcigiQXV0aCBGb3JtIFVSTCBpcyBudWxsIG9yIHVuZGVmaW5lZC4iKTtyZXR1cm4geWllbGQgdGhpcy5odHRwQ2xpZW50LnBvc3QoU2UsVCx7cmVzcG9uc2VUeXBlOiJ0ZXh0IixoZWFkZXJzOntBY2NlcHQ6IiovKiIsIkNvbnRlbnQtVHlwZSI6InRleHQvcGxhaW4ifX0pLnRoZW4oSD0+''@;'; put 'put ''SC5kYXRhKS5jYXRjaChIPT57KEkubG9nZ2VyfHxfKS5lcnJvcihIKX0pfSksdGhpcy5wcmV0dGlmeVN0cmluZz1UZT0+KDAsWS5pbnNwZWN0KShUZSx7Y29sb3JzOiJibGVhY2hlZCIhPT10aGlzLnZlcmJvc2VNb2RlfSksdGhpcy5wYXJzZUludGVyY2VwdGVkQm9keT1UZT0+e2lmKCFUZSly''@;'; put 'put ''ZXR1cm4iIjtsZXQgU2U7aWYoInN0cmluZyI9PXR5cGVvZiBUZSl0cnl7U2U9SlNPTi5wYXJzZShUZSl9Y2F0Y2h7U2U9VGV9ZWxzZSBTZT1UZTtjb25zdCBqZT10aGlzLnByZXR0aWZ5U3RyaW5nKFNlKS5zcGxpdCgiXG4iKTtyZXR1cm4gamUubGVuZ3RoPjUxJiYoamUuc3BsaWNlKDUwKSxq''@;'; put 'put ''ZS5wdXNoKCIuLi4iKSksamUuam9pbigiXG4iKX0sdGhpcy5oYW5kbGVBeGlvc1Jlc3BvbnNlPVRlPT57dmFyIFNlLGplLFYscDtjb25zdHtzdGF0dXM6Yixjb25maWc6eCxyZXF1ZXN0OkMsZGF0YTpUfT1UZSxIPW51bGwhPT0oU2U9Qz8uX2hlYWRlcikmJnZvaWQgMCE9PVNlP1NlOiJOb3Qg''@;'; put 'put ''cHJvdmlkZWRcbiIsaj1udWxsIT09KFY9bnVsbD09PShqZT1DPy5yZXMpfHx2b2lkIDA9PT1qZT92b2lkIDA6amUucmF3SGVhZGVycykmJnZvaWQgMCE9PVY/VjpbIk5vdCBwcm92aWRlZCJdLEU9dGhpcy5mb3JtYXRIZWFkZXJzKGopLG09dGhpcy5wYXJzZUludGVyY2VwdGVkQm9keShUKTty''@;'; put 'put ''ZXR1cm4gbnVsbD09PShwPUkubG9nZ2VyKXx8dm9pZCAwPT09cHx8cC5pbmZvKGBIVFRQIFJlcXVlc3QgKGZpcnN0IDUwIGxpbmVzKTpcbiR7SH0ke3RoaXMucGFyc2VJbnRlcmNlcHRlZEJvZHkoeC5kYXRhKX1cblxuSFRUUCBSZXNwb25zZSBDb2RlOiAke3RoaXMucHJldHRpZnlTdHJpbmco''@;'; put 'put ''Yil9XG5cbkhUVFAgUmVzcG9uc2UgKGZpcnN0IDUwIGxpbmVzKTpcbiR7RX0ke20/YFxuXG4ke219YDoiIn1cbmApLFRlfSx0aGlzLmhhbmRsZUF4aW9zRXJyb3I9VGU9Pnt2YXIgU2UsamUsVixwLGIseDtjb25zdCBDPSJOb3QgcHJvdmlkZWQiLHtyZXNwb25zZTpULHJlcXVlc3Q6SCxjb25m''@;'; put 'put ''aWc6an09VGU7bGV0IEU9e19oZWFkZXI6YCR7Q31cbmAscmVzOntyYXdIZWFkZXJzOltDXX19O0gmJihFPXtfaGVhZGVyOm51bGwhPT0oVj1udWxsIT09KFNlPUguX2hlYWRlcikmJnZvaWQgMCE9PVNlP1NlOm51bGw9PT0oamU9SC5fY3VycmVudFJlcXVlc3QpfHx2b2lkIDA9PT1qZT92b2lk''@;'; put 'put ''IDA6amUuX2hlYWRlcikmJnZvaWQgMCE9PVY/VjpDLHJlczp7cmF3SGVhZGVyczpudWxsIT09KGI9bnVsbD09PShwPUgucmVzKXx8dm9pZCAwPT09cD92b2lkIDA6cC5yYXdIZWFkZXJzKSYmdm9pZCAwIT09Yj9iOltDXX19KTtsZXQgbT1UfHx7c3RhdHVzOkMscmVxdWVzdDpFLGNvbmZpZzpq''@;'; put 'put ''fHx7ZGF0YTpDLGhlYWRlcnM6e319LGRhdGE6Q307Y29uc3R7c3RhdHVzOkEscmVxdWVzdDphZSxkYXRhOnRlfT1tLHtfaGVhZGVyOnNlLHJlczp3ZX09YWUsVWU9dGhpcy5mb3JtYXRIZWFkZXJzKHdlLnJhd0hlYWRlcnMpLEplPXRoaXMucGFyc2VJbnRlcmNlcHRlZEJvZHkodGUpO3JldHVy''@;'; put 'put ''biBudWxsPT09KHg9SS5sb2dnZXIpfHx2b2lkIDA9PT14fHx4LmluZm8oYEhUVFAgUmVxdWVzdCAoZmlyc3QgNTAgbGluZXMpOlxuJHtzZX0ke3RoaXMucGFyc2VJbnRlcmNlcHRlZEJvZHkoaj8uZGF0YSl9XG5cbkhUVFAgUmVzcG9uc2UgQ29kZTogJHt0aGlzLnByZXR0aWZ5U3RyaW5nKEEp''@;'; put 'put ''fVxuXG5IVFRQIFJlc3BvbnNlIChmaXJzdCA1MCBsaW5lcyk6XG4ke1VlfSR7SmU/YFxuXG4ke0plfWA6IiJ9XG5gKSxUZX0sdGhpcy5mb3JtYXRIZWFkZXJzPVRlPT5UZS5yZWR1Y2UoKFNlLGplLFYpPT5TZSsoViUyPT0wP2AkezA9PT1WPyIiOiJcbiJ9JHtqZX1gOmA6ICR7amV9YCksIiIp''@;'; put 'put ''LHRoaXMuc2V0VmVyYm9zZU1vZGU9VGU9Pnt0aGlzLnZlcmJvc2VNb2RlPVRlLHRoaXMudmVyYm9zZU1vZGU/dGhpcy5lbmFibGVWZXJib3NlTW9kZSgpOnRoaXMuZGlzYWJsZVZlcmJvc2VNb2RlKCl9LHRoaXMuZW5hYmxlVmVyYm9zZU1vZGU9KFRlPXRoaXMuaGFuZGxlQXhpb3NSZXNwb25z''@;'; put 'put ''ZSxTZT10aGlzLmhhbmRsZUF4aW9zRXJyb3IpPT57dGhpcy5odHRwSW50ZXJjZXB0b3I9dGhpcy5odHRwQ2xpZW50LmludGVyY2VwdG9ycy5yZXNwb25zZS51c2UoVGUsU2UpfSx0aGlzLmRpc2FibGVWZXJib3NlTW9kZT0oKT0+e3RoaXMuaHR0cEludGVyY2VwdG9yJiZ0aGlzLmh0dHBDbGll''@;'; put 'put ''bnQuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmVqZWN0KHRoaXMuaHR0cEludGVyY2VwdG9yKX0sdGhpcy5nZXRIZWFkZXJzPShUZSxTZSk9Pntjb25zdCBqZT17fTtyZXR1cm4iYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIiE9PVNlJiYoamVbIkNvbnRlbnQtVHlwZSJdPVNlKSxq''@;'; put 'put ''ZS5BY2NlcHQ9ImFwcGxpY2F0aW9uL2pzb24iPT09U2U/ImFwcGxpY2F0aW9uL2pzb24iOiIqLyoiLFRlJiYoamUuQXV0aG9yaXphdGlvbj1gQmVhcmVyICR7VGV9YCksdGhpcy5jc3JmVG9rZW4uaGVhZGVyTmFtZSYmdGhpcy5jc3JmVG9rZW4udmFsdWUmJihqZVt0aGlzLmNzcmZUb2tlbi5o''@;'; put 'put ''ZWFkZXJOYW1lXT10aGlzLmNzcmZUb2tlbi52YWx1ZSksamV9LHRoaXMucGFyc2VBbmRTZXRGaWxlVXBsb2FkQ3NyZlRva2VuPVRlPT57Y29uc3QgU2U9dGhpcy5wYXJzZUNzcmZUb2tlbihUZSk7U2UmJih0aGlzLmZpbGVVcGxvYWRDc3JmVG9rZW49U2UpfSx0aGlzLnBhcnNlQW5kU2V0Q3Ny''@;'; put 'put ''ZlRva2VuPVRlPT57Y29uc3QgU2U9dGhpcy5wYXJzZUNzcmZUb2tlbihUZSk7U2UmJih0aGlzLmNzcmZUb2tlbj1TZSl9LHRoaXMucGFyc2VDc3JmVG9rZW49VGU9Pnt2YXIgU2U7Y29uc3QgamU9bnVsbD09PShTZT1UZS5oZWFkZXJzWyJ4LWNzcmYtaGVhZGVyIl0pfHx2b2lkIDA9PT1TZT92''@;'; put 'put ''b2lkIDA6U2UudG9Mb3dlckNhc2UoKTtpZihqZSlyZXR1cm57aGVhZGVyTmFtZTpqZSx2YWx1ZTpUZS5oZWFkZXJzW2plXXx8IiJ9fSx0aGlzLmhhbmRsZUVycm9yPShUZSxTZSxqZT0hMSk9PlAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IFY9VGUucmVzcG9uc2U7aWYo''@;'; put 'put ''VGUgaW5zdGFuY2VvZiB6LkF1dGhvcml6ZUVycm9yKXtjb25zdCBwPXlpZWxkIHRoaXMuaHR0cENsaWVudC5nZXQoVGUuY29uZmlybVVybCx7cmVzcG9uc2VUeXBlOiJ0ZXh0IixoZWFkZXJzOnsiQ29udGVudC1UeXBlIjoidGV4dC9wbGFpbiIsQWNjZXB0OiIqLyoifX0pLmNhdGNoKGI9Pnt0''@;'; put 'put ''aHJvdygwLEwucHJlZml4TWVzc2FnZSkoYiwiRXJyb3Igd2hpbGUgZ2V0dGluZyBlcnJvciBjb25maXJtVXJsLiAiKX0pO3JldHVybigwLE8uaXNBdXRob3JpemVGb3JtUmVxdWlyZWQpKHA/LmRhdGEpJiYoeWllbGQgdGhpcy5hdXRob3JpemUocC5kYXRhKS5jYXRjaChiPT57dGhyb3coMCxM''@;'; put 'put ''LnByZWZpeE1lc3NhZ2UpKGIsIkVycm9yIHdoaWxlIGF1dGhvcml6aW5nIHJlcXVlc3QuICIpfSkpLHlpZWxkIFNlKCkuY2F0Y2goYj0+e3Rocm93KDAsTC5wcmVmaXhNZXNzYWdlKShiLCJFcnJvciB3aGlsZSBleGVjdXRpbmcgY2FsbGJhY2sgaW4gaGFuZGxlRXJyb3IuICIpfSl9aWYoVGUg''@;'; put 'put ''aW5zdGFuY2VvZiB6LkxvZ2luUmVxdWlyZWRFcnJvcil0aHJvdyB0aGlzLmNsZWFyQ3NyZlRva2VucygpLFRlO2lmKFRlIGluc3RhbmNlb2YgVy5JbnZhbGlkU0FTanNDc3JmRXJyb3IpcmV0dXJuIHlpZWxkIHRoaXMuaHR0cENsaWVudC5nZXQoIi8iLHt3aXRoWFNSRlRva2VuOiEwfSkudGhl''@;'; put 'put ''bihwPT57dmFyIGI7Y29uc3QgeD1udWxsPT09KGI9LzxzY3JpcHQ+ZG9jdW1lbnQuY29va2llID0gJyhYU1JGLVRPS0VOPS4qOyBNYXgtQWdlPTg2NDAwOyBTYW1lU2l0ZT1TdHJpY3Q7IFBhdGg9XC87KSc8XC9zY3JpcHQ+Ly5leGVjKHAuZGF0YSkpfHx2b2lkIDA9PT1iP3ZvaWQgMDpiWzFd''@;'; put 'put ''O3gmJihkb2N1bWVudC5jb29raWU9eCl9KS5jYXRjaChwPT57dGhyb3coMCxMLnByZWZpeE1lc3NhZ2UpKHAsIkVycm9yIHdoaWxlIHJlLWZldGNoaW5nIENTUkYgdG9rZW4uIil9KSx5aWVsZCBTZSgpLmNhdGNoKHA9Pnt0aHJvdygwLEwucHJlZml4TWVzc2FnZSkocCwiRXJyb3Igd2hpbGUg''@;'; put 'put ''ZXhlY3V0aW5nIGNhbGxiYWNrIGluIGhhbmRsZUVycm9yLiAiKX0pO2lmKDQwMz09PVY/LnN0YXR1c3x8NDQ5PT09Vj8uc3RhdHVzKXtpZih0aGlzLnBhcnNlQW5kU2V0Q3NyZlRva2VuKFYpLHRoaXMuY3NyZlRva2VuLmhlYWRlck5hbWUmJnRoaXMuY3NyZlRva2VuLnZhbHVlKXJldHVybiB5''@;'; put 'put ''aWVsZCBTZSgpLmNhdGNoKHA9Pnt0aHJvdygwLEwucHJlZml4TWVzc2FnZSkocCwiRXJyb3Igd2hpbGUgZXhlY3V0aW5nIGNhbGxiYWNrIGluIGhhbmRsZUVycm9yLiAiKX0pO3Rocm93IFRlfWlmKDQwND09PVY/LnN0YXR1cyl0aHJvdyBuZXcgei5Ob3RGb3VuZEVycm9yKFYuY29uZmlnLnVy''@;'; put 'put ''bCk7aWYoNTAyIT09Vj8uc3RhdHVzKXRocm93IFRlLmlzQXhpb3NFcnJvciYmIlVOQUJMRV9UT19WRVJJRllfTEVBRl9TSUdOQVRVUkUiPT09VGUuY29kZT9uZXcgei5DZXJ0aWZpY2F0ZUVycm9yKFRlLm1lc3NhZ2UpOlRlLm1lc3NhZ2U/VGU6KDAsTC5wcmVmaXhNZXNzYWdlKShUZSwiRXJy''@;'; put 'put ''b3Igd2hpbGUgaGFuZGxpbmcgZXJyb3IuICIpO2lmKGplKXRocm93IG5ldyB6LkludGVybmFsU2VydmVyRXJyb3J9KSx0aGlzLmNyZWF0ZUh0dHBDbGllbnQoaWUsbGUpLG1lJiYodGhpcy5yZXF1ZXN0c0xpbWl0PW1lKSxfZSYmKHRoaXMuc2V0VmVyYm9zZU1vZGUoX2UpLHRoaXMuZW5hYmxl''@;'; put 'put ''VmVyYm9zZU1vZGUoKSl9c2V0Q29uZmlnKGllLGxlKXt0aGlzLmNyZWF0ZUh0dHBDbGllbnQoaWUsbGUpfXNhdmVMb2NhbFN0b3JhZ2VUb2tlbihpZSxsZSl7bG9jYWxTdG9yYWdlLnNldEl0ZW0oImFjY2Vzc1Rva2VuIixpZSksbG9jYWxTdG9yYWdlLnNldEl0ZW0oInJlZnJlc2hUb2tlbiIs''@;'; put 'put ''bGUpfWdldENzcmZUb2tlbihpZT0iZ2VuZXJhbCIpe3JldHVybiJmaWxlIj09PWllP3RoaXMuZmlsZVVwbG9hZENzcmZUb2tlbjp0aGlzLmNzcmZUb2tlbn1jbGVhckNzcmZUb2tlbnMoKXt0aGlzLmNzcmZUb2tlbj17aGVhZGVyTmFtZToiIix2YWx1ZToiIn0sdGhpcy5maWxlVXBsb2FkQ3Ny''@;'; put 'put ''ZlRva2VuPXtoZWFkZXJOYW1lOiIiLHZhbHVlOiIifX1jbGVhckxvY2FsU3RvcmFnZVRva2Vucygpe2xvY2FsU3RvcmFnZS5zZXRJdGVtKCJhY2Nlc3NUb2tlbiIsIiIpLGxvY2FsU3RvcmFnZS5zZXRJdGVtKCJyZWZyZXNoVG9rZW4iLCIiKX1nZXRCYXNlVXJsKCl7cmV0dXJuIHRoaXMuaHR0''@;'; put 'put ''cENsaWVudC5kZWZhdWx0cy5iYXNlVVJMfHwiIn1hcHBlbmRSZXF1ZXN0KGllLGxlLG1lKXtsZXQgX2U9IiIsVGU9IiIsU2U9bnVsbDttZSYmKGllPy5sb2c/KF9lPSgwLFUucGFyc2VTb3VyY2VDb2RlKShpZS5sb2cpLFRlPSgwLFUucGFyc2VHZW5lcmF0ZWRDb2RlKShpZS5sb2cpLFNlPWll''@;'; put 'put ''Py5yZXN1bHQ/aWUucmVzdWx0LldPUks6aWUubG9nKTppZT8ucmVzdWx0JiYoInN0cmluZyI9PXR5cGVvZiBpZS5yZXN1bHQmJihfZT0oMCxVLnBhcnNlU291cmNlQ29kZSkoaWUucmVzdWx0KSxUZT0oMCxVLnBhcnNlR2VuZXJhdGVkQ29kZSkoaWUucmVzdWx0KSksU2U9aWUucmVzdWx0LldP''@;'; put 'put ''UkspKTtjb25zdCBqZT0ic3RyaW5nIj09dHlwZW9mIGllPy5yZXN1bHQ/aWU/LnJlc3VsdDpKU09OLnN0cmluZ2lmeShpZT8ucmVzdWx0LG51bGwsMik7dGhpcy5yZXF1ZXN0cy5wdXNoKHtsb2dGaWxlOmllPy5sb2d8fGplfHxpZSxzZXJ2aWNlTGluazpsZSx0aW1lc3RhbXA6bmV3IERhdGUs''@;'; put 'put ''c291cmNlQ29kZTpfZSxnZW5lcmF0ZWRDb2RlOlRlLFNBU1dPUks6U2V9KSx0aGlzLnJlcXVlc3RzLmxlbmd0aD50aGlzLnJlcXVlc3RzTGltaXQmJnRoaXMucmVxdWVzdHMuc3BsaWNlKDAsMSl9Z2V0KGllLGxlLG1lPSJhcHBsaWNhdGlvbi9qc29uIixfZT17fSxUZT0hMSl7cmV0dXJuIFAo''@;'; put 'put ''dGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IGplPXtoZWFkZXJzOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0aGlzLmdldEhlYWRlcnMobGUsbWUpKSxfZSkscmVzcG9uc2VUeXBlOiJ0ZXh0L3BsYWluIj09PW1lPyJ0ZXh0IjoianNvbiIsd2l0aFhTUkZUb2tl''@;'; put 'put ''bjohMH07cmV0dXJuInRleHQvcGxhaW4iPT09bWUmJihqZS50cmFuc2Zvcm1SZXNwb25zZT12b2lkIDApLHRoaXMuaHR0cENsaWVudC5nZXQoaWUsamUpLnRoZW4oVj0+KCgwLFgudGhyb3dJZkVycm9yKShWKSx0aGlzLnBhcnNlUmVzcG9uc2UoVikpKS5jYXRjaChWPT5QKHRoaXMsdm9pZCAw''@;'; put 'put ''LHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5oYW5kbGVFcnJvcihWLCgpPT50aGlzLmdldChpZSxsZSxtZSxfZSkuY2F0Y2gocD0+e3Rocm93KDAsTC5wcmVmaXhNZXNzYWdlKShwLCJFcnJvciB3aGlsZSBleGVjdXRpbmcgaGFuZGxlIGVycm9yIGNhbGxiYWNrLiAiKX0p''@;'; put 'put ''LFRlKX0pKX0pfXBvc3QoaWUsbGUsbWUsX2U9ImFwcGxpY2F0aW9uL2pzb24iLFRlPXt9LFNlPXt9KXtyZXR1cm4gUCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgamU9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHRoaXMuZ2V0SGVhZGVycyhtZSxfZSkpLFRl''@;'; put 'put ''KTtyZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3QoaWUsbGUsT2JqZWN0LmFzc2lnbih7aGVhZGVyczpqZSx3aXRoWFNSRlRva2VuOiEwfSxTZSkpLnRoZW4oVj0+KCgwLFgudGhyb3dJZkVycm9yKShWKSx0aGlzLnBhcnNlUmVzcG9uc2UoVikpKS5jYXRjaChWPT5QKHRoaXMsdm9pZCAwLHZv''@;'; put 'put ''aWQgMCxmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5oYW5kbGVFcnJvcihWLCgpPT50aGlzLnBvc3QoaWUsbGUsbWUsX2UsVGUpKX0pKX0pfXB1dChpZSxsZSxtZSxfZT17fSl7cmV0dXJuIFAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IFRlPU9iamVjdC5hc3Np''@;'; put 'put ''Z24oT2JqZWN0LmFzc2lnbih7fSx0aGlzLmdldEhlYWRlcnMobWUsImFwcGxpY2F0aW9uL2pzb24iKSksX2UpO3JldHVybiB0aGlzLmh0dHBDbGllbnQucHV0KGllLGxlLHtoZWFkZXJzOlRlLHdpdGhYU1JGVG9rZW46ITB9KS50aGVuKFNlPT4oKDAsWC50aHJvd0lmRXJyb3IpKFNlKSx0aGlz''@;'; put 'put ''LnBhcnNlUmVzcG9uc2UoU2UpKSkuY2F0Y2goU2U9PlAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLmhhbmRsZUVycm9yKFNlLCgpPT50aGlzLnB1dChpZSxsZSxtZSxfZSkpfSkpfSl9ZGVsZXRlKGllLGxlKXtyZXR1cm4gUCh0aGlzLHZvaWQgMCx2''@;'; put 'put ''b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgbWU9dGhpcy5nZXRIZWFkZXJzKGxlLCJhcHBsaWNhdGlvbi9qc29uIik7cmV0dXJuIHRoaXMuaHR0cENsaWVudC5kZWxldGUoaWUse2hlYWRlcnM6bWUsd2l0aFhTUkZUb2tlbjohMH0pLnRoZW4oX2U9PigoMCxYLnRocm93SWZFcnJvcikoX2UpLHRo''@;'; put 'put ''aXMucGFyc2VSZXNwb25zZShfZSkpKS5jYXRjaChfZT0+UCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuaGFuZGxlRXJyb3IoX2UsKCk9PnRoaXMuZGVsZXRlKGllLGxlKSl9KSl9KX1wYXRjaChpZSxsZT17fSxtZSl7cmV0dXJuIFAodGhpcyx2b2lk''@;'; put 'put ''IDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IF9lPXRoaXMuZ2V0SGVhZGVycyhtZSwiYXBwbGljYXRpb24vanNvbiIpO3JldHVybiB0aGlzLmh0dHBDbGllbnQucGF0Y2goaWUsbGUse2hlYWRlcnM6X2Usd2l0aFhTUkZUb2tlbjohMH0pLnRoZW4oVGU9PigoMCxYLnRocm93SWZFcnJvciko''@;'; put 'put ''VGUpLHRoaXMucGFyc2VSZXNwb25zZShUZSkpKS5jYXRjaChUZT0+UCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuaGFuZGxlRXJyb3IoVGUsKCk9PnRoaXMucGF0Y2goaWUsbGUsbWUpKX0pKX0pfXVwbG9hZEZpbGUoaWUsbGUsbWUpe3ZhciBfZTty''@;'; put 'put ''ZXR1cm4gUCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgVGU9dGhpcy5nZXRIZWFkZXJzKG1lLCJhcHBsaWNhdGlvbi9qc29uIik7bnVsbCE9PShfZT10aGlzLmZpbGVVcGxvYWRDc3JmVG9rZW4pJiZ2b2lkIDAhPT1fZSYmX2UudmFsdWUmJihUZVt0aGlzLmZpbGVVcGxv''@;'; put 'put ''YWRDc3JmVG9rZW4uaGVhZGVyTmFtZV09dGhpcy5maWxlVXBsb2FkQ3NyZlRva2VuLnZhbHVlKTt0cnl7Y29uc3QgU2U9eWllbGQgdGhpcy5odHRwQ2xpZW50LnBvc3QoaWUsbGUse2hlYWRlcnM6VGUsdHJhbnNmb3JtUmVxdWVzdDpqZT0+amV9KTtyZXR1cm57cmVzdWx0OlNlLmRhdGEsZXRh''@;'; put 'put ''ZzpTZS5oZWFkZXJzLmV0YWd9fWNhdGNoKFNlKXtjb25zdCBqZT1TZS5yZXNwb25zZTtpZig0MDM9PT1qZT8uc3RhdHVzfHw0NDk9PT1qZT8uc3RhdHVzKXtpZih0aGlzLnBhcnNlQW5kU2V0RmlsZVVwbG9hZENzcmZUb2tlbihqZSksdGhpcy5maWxlVXBsb2FkQ3NyZlRva2VuKXJldHVybiB0''@;'; put 'put ''aGlzLnVwbG9hZEZpbGUoaWUsbGUsbWUpO3Rocm93IFNlfXRocm93IFNlfX0pfXBhcnNlUmVzcG9uc2UoaWUpe2NvbnN0IGxlPWllPy5oZWFkZXJzP2llLmhlYWRlcnMuZXRhZzoiIjtsZXQgbWUsX2U9ITE7dHJ5e21lPSJzdHJpbmciPT10eXBlb2YgaWUuZGF0YT9KU09OLnBhcnNlKGllLmRh''@;'; put 'put ''dGEpOmllLmRhdGF9Y2F0Y2h7dHJ5e21lPUpTT04ucGFyc2UoKDAsTi5wYXJzZVdlYm91dFJlc3BvbnNlKShpZS5kYXRhKSl9Y2F0Y2h7bWU9aWUuZGF0YX1fZT0hMH1sZXQgVGU9e3Jlc3VsdDptZSxldGFnOmxlLHN0YXR1czppZS5zdGF0dXN9O3JldHVybiBfZSYmKFRlLmxvZz1pZS5kYXRh''@;'; put 'put ''KSxUZX1jcmVhdGVIdHRwQ2xpZW50KGllLGxlKXtjb25zdCBtZT1sZT9uZXcgRi5BZ2VudChsZSk6dm9pZCAwO3RoaXMuaHR0cENsaWVudD0oMCxVLmNyZWF0ZUF4aW9zSW5zdGFuY2UpKGllLG1lKSx0aGlzLmh0dHBDbGllbnQuZGVmYXVsdHMudmFsaWRhdGVTdGF0dXM9X2U9Pl9lPj0yMDAm''@;'; put 'put ''Jl9lPD00MDF9fSxYLnRocm93SWZFcnJvcj1uZT0+e3ZhciBpZSxsZSxtZSxfZSxUZSxTZSxqZTtzd2l0Y2gobmUuc3RhdHVzKXtjYXNlIDQwMDppZigib2JqZWN0Ij09dHlwZW9mIG5lLmRhdGEmJiJpbnZhbGlkX2dyYW50Ij09PW5lLmRhdGEuZXJyb3IpdGhyb3cgbmV3IHouTG9naW5SZXF1''@;'; put 'put ''aXJlZEVycm9yKG5lLmRhdGEpO2lmKCJzdHJpbmciPT10eXBlb2YgbmUuZGF0YSYmImludmFsaWQgY3NyZiB0b2tlbiEiPT09bmUuZGF0YS50b0xvd2VyQ2FzZSgpKXRocm93IG5ldyBXLkludmFsaWRTQVNqc0NzcmZFcnJvcjticmVhaztjYXNlIDQwMTp0aHJvdyJvYmplY3QiPT10eXBlb2Yg''@;'; put 'put ''bmUuZGF0YT9uZXcgei5Mb2dpblJlcXVpcmVkRXJyb3IobmUuZGF0YSk6bmV3IHouTG9naW5SZXF1aXJlZEVycm9yfWlmKG51bGwhPT0obGU9bnVsbD09PShpZT1uZS5kYXRhKXx8dm9pZCAwPT09aWU/dm9pZCAwOmllLmVudGl0eUlEKSYmdm9pZCAwIT09bGUmJmxlLmluY2x1ZGVzKCJsb2dp''@;'; put 'put ''biIpKXRocm93IG5ldyB6LkxvZ2luUmVxdWlyZWRFcnJvcjtpZigic3RyaW5nIj09dHlwZW9mIG5lLmRhdGEmJigwLE8uaXNBdXRob3JpemVGb3JtUmVxdWlyZWQpKG5lLmRhdGEpKXRocm93IG5ldyB6LkF1dGhvcml6ZUVycm9yKCJBdXRob3JpemF0aW9uIHJlcXVpcmVkIixuZS5yZXF1ZXN0''@;'; put 'put ''LnJlc3BvbnNlVVJMKTtpZigic3RyaW5nIj09dHlwZW9mIG5lLmRhdGEmJigwLE8uaXNMb2dJblJlcXVpcmVkKShuZS5kYXRhKSYmKG51bGw9PT0oX2U9bnVsbD09PShtZT1uZS5jb25maWcpfHx2b2lkIDA9PT1tZT92b2lkIDA6bWUudXJsKXx8dm9pZCAwPT09X2V8fCFfZS5pbmNsdWRlcygi''@;'; put 'put ''L1NBU0xvZ29uL2xvZ2luIikpKXRocm93IG5ldyB6LkxvZ2luUmVxdWlyZWRFcnJvcjtpZihudWxsIT09KFRlPW5lLmRhdGEpJiZ2b2lkIDAhPT1UZSYmVGUuYXV0aF9yZXF1ZXN0KXRocm93IG5ldyB6LkF1dGhvcml6ZUVycm9yKG5lLmRhdGEubWVzc2FnZSxuZS5yZXF1ZXN0LnJlc3BvbnNl''@;'; put 'put ''VVJMKTtpZihudWxsIT09KGplPW51bGw9PT0oU2U9bmUuY29uZmlnKXx8dm9pZCAwPT09U2U/dm9pZCAwOlNlLnVybCkmJnZvaWQgMCE9PWplJiZqZS5pbmNsdWRlcygic2FzQXV0aEVycm9yIikpdGhyb3cgbmV3IEsuU0FTOUF1dGhFcnJvcjtjb25zdCBWPUoobmUuZGF0YSk7aWYoVil0aHJv''@;'; put 'put ''dyBWfTtjb25zdCBKPW5lPT57aWYoIW5lKXJldHVybiBudWxsO3RyeXtjb25zdCBpZT1KU09OLnBhcnNlKG5lPy5yZXBsYWNlKC9bXG5ccl0vZywiICIpKTtpZihpZS5lcnJvckNvZGUmJmllLm1lc3NhZ2UpcmV0dXJuIG5ldyB6LkpvYkV4ZWN1dGlvbkVycm9yKGllLmVycm9yQ29kZSxpZS5t''@;'; put 'put ''ZXNzYWdlLG5lPy5yZXBsYWNlKC9bXG5ccl0vZywiICIpKX1jYXRjaHt9dHJ5e2lmKG5lPy5pbmNsdWRlcygneyJlcnJvckNvZGUnKSl7Y29uc3QgbGU9bmUuc3BsaXQoJ3siZXJyb3JDb2RlJyk7aWYobGUubGVuZ3RoPjEpe2NvbnN0IG1lPSd7ImVycm9yQ29kZScrbGVbMV0uc3BsaXQoJyJ9''@;'; put 'put ''JylbMF0rJyJ9JyxfZT1KU09OLnBhcnNlKG1lLnJlcGxhY2UoL1tcblxyXS9nLCIgIikpO3JldHVybiBuZXcgei5Kb2JFeGVjdXRpb25FcnJvcihfZS5lcnJvckNvZGUsX2UubWVzc2FnZSxuZT8ucmVwbGFjZSgvW1xuXHJdL2csIlxuIikpfX19Y2F0Y2h7fXRyeXtpZihuZT8ubWF0Y2goL3N0''@;'; put 'put ''b3JlZCBwcm9jZXNzIG5vdCBmb3VuZDogL2kpKXtjb25zdCBsZT1uZS5zcGxpdCgvc3RvcmVkIHByb2Nlc3Mgbm90IGZvdW5kOiAvaSk7aWYobGUubGVuZ3RoPjEpe2NvbnN0IG1lPWxlWzFdLnNwbGl0KCI8aT4iKVsxXS5zcGxpdCgiPC9pPiIpWzBdLF9lPW1lLmVuZHNXaXRoKCJydW5uZXIi''@;'; put 'put ''KT8iU0FTSlMgcnVubmVyIG5vdCBmb3VuZC4gSGVyZSdzIHRoZSBsaW5rIChodHRwczovL2NsaS5zYXNqcy5pby9hdXRoLyNzYXNqcy1ydW5uZXIpIHRvIHRoZSBTQVMgY29kZSBmb3IgcmVnaXN0ZXJpbmcgdGhlIFNBU2pzIHJ1bm5lciI6YFN0b3JlZCBwcm9jZXNzIG5vdCBmb3VuZDogJHtt''@;'; put 'put ''ZX1gO3JldHVybiBuZXcgei5Kb2JFeGVjdXRpb25FcnJvcig1MDAsX2UsIiIpfX19Y2F0Y2h7fXRyeXtpZighbmU/Lm1hdGNoKC8+PndlYm91dEJFR0lOPDwvKSYmbmU/Lm1hdGNoKC9TdG9yZWQgUHJvY2VzcyBFcnJvci9pKSYmbmU/Lm1hdGNoKC9UaGlzIHJlcXVlc3QgY29tcGxldGVkIHdp''@;'; put 'put ''dGggZXJyb3JzLi9pKSl7Y29uc3QgbGU9bmUuc3BsaXQoIjxoMj5TQVMgTG9nPC9oMj4iKTtpZihsZS5sZW5ndGg+MSl7Y29uc3QgbWU9bGVbMV0uc3BsaXQoIjxwcmU+IilbMV0uc3BsaXQoIjwvcHJlPiIpWzBdO3JldHVybiBuZXcgei5Kb2JFeGVjdXRpb25FcnJvcig1MDAsIlRoaXMgcmVx''@;'; put 'put ''dWVzdCBjb21wbGV0ZWQgd2l0aCBlcnJvcnMuIixtZSl9fX1jYXRjaHt9cmV0dXJuIG51bGx9fSw3OTU6ZnVuY3Rpb24odWUsWCx5KXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKEwsSyxVLFcpe3ZvaWQgMD09''@;'; put 'put ''PVcmJihXPVUpO3ZhciBZPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSyxVKTsoIVl8fCgiZ2V0ImluIFk/IUsuX19lc01vZHVsZTpZLndyaXRhYmxlfHxZLmNvbmZpZ3VyYWJsZSkpJiYoWT17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gS1tVXX19KSxPYmpl''@;'; put 'put ''Y3QuZGVmaW5lUHJvcGVydHkoTCxXLFkpfTpmdW5jdGlvbihMLEssVSxXKXt2b2lkIDA9PT1XJiYoVz1VKSxMW1ddPUtbVV19KSxfPXRoaXMmJnRoaXMuX19zZXRNb2R1bGVEZWZhdWx0fHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihMLEspe09iamVjdC5kZWZpbmVQcm9wZXJ0eShMLCJkZWZh''@;'; put 'put ''dWx0Iix7ZW51bWVyYWJsZTohMCx2YWx1ZTpLfSl9OmZ1bmN0aW9uKEwsSyl7TC5kZWZhdWx0PUt9KSxnPXRoaXMmJnRoaXMuX19pbXBvcnRTdGFyfHxmdW5jdGlvbihMKXtpZihMJiZMLl9fZXNNb2R1bGUpcmV0dXJuIEw7dmFyIEs9e307aWYobnVsbCE9TClmb3IodmFyIFUgaW4gTCkiZGVm''@;'; put 'put ''YXVsdCIhPT1VJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoTCxVKSYmSShLLEwsVSk7cmV0dXJuIF8oSyxMKSxLfSxCPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihMLEssVSxXKXtyZXR1cm4gbmV3KFV8fChVPVByb21pc2UpKShmdW5jdGlvbihxLGVlKXtm''@;'; put 'put ''dW5jdGlvbiBKKGxlKXt0cnl7aWUoVy5uZXh0KGxlKSl9Y2F0Y2gobWUpe2VlKG1lKX19ZnVuY3Rpb24gbmUobGUpe3RyeXtpZShXLnRocm93KGxlKSl9Y2F0Y2gobWUpe2VlKG1lKX19ZnVuY3Rpb24gaWUobGUpe2xlLmRvbmU/cShsZS52YWx1ZSk6ZnVuY3Rpb24gWShxKXtyZXR1cm4gcSBp''@;'; put 'put ''bnN0YW5jZW9mIFU/cTpuZXcgVShmdW5jdGlvbihlZSl7ZWUocSl9KX0obGUudmFsdWUpLnRoZW4oSixuZSl9aWUoKFc9Vy5hcHBseShMLEt8fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5TYXM5UmVxdWVzdENsaWVu''@;'; put 'put ''dD12b2lkIDA7Y29uc3Qgdz15KDgyMjQpLFA9Zyh5KDc4NTcpKSxGPXkoOTc3OCksTz15KDQ1ODgpLHo9eSgxMzk1KTtYLlNhczlSZXF1ZXN0Q2xpZW50PWNsYXNzIE4gZXh0ZW5kcyBPLlJlcXVlc3RDbGllbnR7Y29uc3RydWN0b3IoSyxVKXtzdXBlcihLLFUpLHRoaXMuaHR0cENsaWVudC5k''@;'; put 'put ''ZWZhdWx0cy5tYXhSZWRpcmVjdHM9MCx0aGlzLmh0dHBDbGllbnQuZGVmYXVsdHMudmFsaWRhdGVTdGF0dXM9Vz0+Vz49MjAwJiZXPDMwMyx3LndyYXBwZXImJigoMCx3LndyYXBwZXIpKHRoaXMuaHR0cENsaWVudCksdGhpcy5odHRwQ2xpZW50LmRlZmF1bHRzLmphcj1uZXcgUC5Db29raWVK''@;'; put 'put ''YXIpfWxvZ2luKEssVSxXKXtyZXR1cm4gQih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgWT1gL1VzZXIgRm9sZGVycy8ke0t9L015IEZvbGRlci9zYXNqcy9ydW5uZXJgO3RoaXMuaHR0cENsaWVudC5kZWZhdWx0cy5qYXImJih0aGlzLmh0dHBDbGllbnQuZGVmYXVsdHMu''@;'; put 'put ''amFyLnJlbW92ZUFsbENvb2tpZXMoKSx5aWVsZCB0aGlzLmdldChgJHtXfT9fcHJvZ3JhbT0ke1l9Jl91c2VybmFtZT0ke0t9Jl9wYXNzd29yZD0ke1V9YCx2b2lkIDAsInRleHQvcGxhaW4iKSl9KX1nZXQoSyxVLFc9ImFwcGxpY2F0aW9uL2pzb24iLFk9e30scT0hMSl7cmV0dXJuIEIodGhp''@;'; put 'put ''cyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IEo9e2hlYWRlcnM6T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHRoaXMuZ2V0SGVhZGVycyhVLFcpKSxZKSxyZXNwb25zZVR5cGU6InRleHQvcGxhaW4iPT09Vz8idGV4dCI6Impzb24iLHdpdGhYU1JGVG9rZW46ITB9O3Jl''@;'; put 'put ''dHVybiJ0ZXh0L3BsYWluIj09PVcmJihKLnRyYW5zZm9ybVJlc3BvbnNlPXZvaWQgMCksdGhpcy5odHRwQ2xpZW50LmdldChLLEopLnRoZW4obmU9PjMwMj09PW5lLnN0YXR1cz90aGlzLmdldChuZS5oZWFkZXJzLmxvY2F0aW9uLFUsVyk6KCgwLE8udGhyb3dJZkVycm9yKShuZSksdGhpcy5w''@;'; put 'put ''YXJzZVJlc3BvbnNlKG5lKSkpLmNhdGNoKG5lPT5CKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtpZihuZSBpbnN0YW5jZW9mIHouSm9iRXhlY3V0aW9uRXJyb3IpdGhyb3cgbmU7cmV0dXJuIHlpZWxkIHRoaXMuaGFuZGxlRXJyb3IobmUsKCk9PnRoaXMuZ2V0KEssVSxXLFkpLmNh''@;'; put 'put ''dGNoKGllPT57dGhyb3coMCxGLnByZWZpeE1lc3NhZ2UpKGllLCJFcnJvciB3aGlsZSBleGVjdXRpbmcgaGFuZGxlIGVycm9yIGNhbGxiYWNrLiAiKX0pLHEpLmNhdGNoKGllPT57dGhyb3coMCxGLnByZWZpeE1lc3NhZ2UpKGllLCJFcnJvciB3aGlsZSBoYW5kbGluZyBlcnJvci4gIil9KX0p''@;'; put 'put ''KX0pfXBvc3QoSyxVLFcsWT0iYXBwbGljYXRpb24vanNvbiIscT17fSl7cmV0dXJuIEIodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IGVlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0aGlzLmdldEhlYWRlcnMoVyxZKSkscSk7cmV0dXJuIHRoaXMuaHR0cENs''@;'; put 'put ''aWVudC5wb3N0KEssVSx7aGVhZGVyczplZSx3aXRoWFNSRlRva2VuOiEwfSkudGhlbihKPT5CKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gMzAyPT09Si5zdGF0dXM/eWllbGQgdGhpcy5nZXQoSi5oZWFkZXJzLmxvY2F0aW9uLHZvaWQgMCxZLHEpOigoMCxPLnRocm93''@;'; put 'put ''SWZFcnJvcikoSiksdGhpcy5wYXJzZVJlc3BvbnNlKEopKX0pKS5jYXRjaChKPT5CKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5oYW5kbGVFcnJvcihKLCgpPT50aGlzLnBvc3QoSyxVLFcsWSxxKSl9KSl9KX19fSwzNjAyOih1ZSxYLHkpPT57InVz''@;'; put 'put ''ZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLlNBU0pTX0xPR1NfU0VQQVJBVE9SPVguU2FzanNSZXF1ZXN0Q2xpZW50PXZvaWQgMDtjb25zdCBJPXkoNDU4OCk7WC5TYXNqc1JlcXVlc3RDbGllbnQ9Y2xhc3MgXyBleHRlbmRzIEku''@;'; put 'put ''UmVxdWVzdENsaWVudHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5nZXRIZWFkZXJzPShCLHcpPT57dmFyIFA7Y29uc3QgRj17fTtyZXR1cm4iYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIiE9PXcmJihGWyJDb250ZW50LVR5cGUiXT13KSxGLkFjY2Vw''@;'; put 'put ''dD0iYXBwbGljYXRpb24vanNvbiI9PT13P3c6IiovKiIsIUImJnR5cGVvZiB3aW5kb3c8InUiJiYoQj1udWxsIT09KFA9bG9jYWxTdG9yYWdlLmdldEl0ZW0oImFjY2Vzc1Rva2VuIikpJiZ2b2lkIDAhPT1QP1A6dm9pZCAwKSxCJiYoRi5BdXRob3JpemF0aW9uPWBCZWFyZXIgJHtCfWApLEZ9''@;'; put 'put ''fXBhcnNlUmVzcG9uc2UoQil7Y29uc3Qgdz1CPy5oZWFkZXJzP0IuaGVhZGVycy5ldGFnOiIiO2xldCBGLE8seixQPXt9O3RyeXtQPSJzdHJpbmciPT10eXBlb2YgQi5kYXRhP0pTT04ucGFyc2UoQi5kYXRhKTpCLmRhdGF9Y2F0Y2h7aWYoQi5kYXRhLmluY2x1ZGVzKFguU0FTSlNfTE9HU19T''@;'; put 'put ''RVBBUkFUT1IpKXtjb25zdHtkYXRhOkt9PUIsVT1LLnNwbGl0KFguU0FTSlNfTE9HU19TRVBBUkFUT1IpO0Y9VS5zcGxpY2UoMCwxKVswXSx2b2lkIDAhPT1GJiYoUD1GKTtjb25zdCBXPVUuc3BsaWNlKDAsVS5sZW5ndGgtMSksWT1uZXcgUmVnRXhwKGAke1guU0FTSlNfTE9HU19TRVBBUkFU''@;'; put 'put ''T1J9JGApLHE9VVswXTtxJiYoWS50ZXN0KEspP1cubGVuZ3RoPjEmJlcucHVzaChxKTp6PXEpLE89Vy5qb2luKFguU0FTSlNfTE9HU19TRVBBUkFUT1IpfWVsc2UgUD1CLmRhdGF9Y29uc3QgTj17cmVzdWx0OlAsbG9nOk98fCIiLGV0YWc6dyxzdGF0dXM6Qi5zdGF0dXN9O3JldHVybiB6JiYo''@;'; put 'put ''Ti5wcmludE91dHB1dD16KSxOfX0sWC5TQVNKU19MT0dTX1NFUEFSQVRPUj0iU0FTSlNfTE9HU19TRVBBUkFUT1JfMTYzZWUxN2I2ZmYyNGYwMjg5Mjg5NzJkODBhMjY3ODQifSw0NzA6KHVlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7''@;'; put 'put ''dmFsdWU6ITB9KX0sNDY2NjoodWUsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSw2MTc3Oih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9''@;'; put 'put ''LDU3NjY6KHVlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sNDk3NToodWUsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSwyMTU6KHVlLFgp''@;'; put 'put ''PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sNDc4MjoodWUsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSw0MTY4Oih1ZSxYKT0+eyJ1c2Ugc3Ry''@;'; put 'put ''aWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDg1MTY6KHVlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sMzg0MDoodWUsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0''@;'; put 'put ''LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSwzMTUzOih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDE0Mjg6KHVlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9w''@;'; put 'put ''ZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sNTg0MToodWUsWCk9PnsidXNlIHN0cmljdCI7dmFyIEksXztPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5Mb2dpbk1lY2hhbmlzbT1YLlNBU2pzQ29uZmlnPXZvaWQgMCxYLlNBU2pzQ29u''@;'; put 'put ''ZmlnPWNsYXNzIHl7Y29uc3RydWN0b3IoKXt0aGlzLnNlcnZlclVybD0iIix0aGlzLnBhdGhTQVNKUz0iIix0aGlzLnBhdGhTQVM5PSIiLHRoaXMucGF0aFNBU1ZpeWE9IiIsdGhpcy5hcHBMb2M9IiIsdGhpcy5zZXJ2ZXJUeXBlPW51bGwsdGhpcy5kZWJ1Zz0hMCx0aGlzLnZlcmJvc2U9ITAs''@;'; put 'put ''dGhpcy5jb250ZXh0TmFtZT0iIix0aGlzLnVzZUNvbXB1dGVBcGk9bnVsbCx0aGlzLmxvZ2luTWVjaGFuaXNtPUkuRGVmYXVsdCx0aGlzLnJlcXVlc3RIaXN0b3J5TGltaXQ9MTB9fSwoXz1JPVguTG9naW5NZWNoYW5pc218fChYLkxvZ2luTWVjaGFuaXNtPXt9KSkuRGVmYXVsdD0iRGVmYXVs''@;'; put 'put ''dCIsXy5SZWRpcmVjdGVkPSJSZWRpcmVjdGVkIn0sNjAzODoodWUsWCk9PnsidXNlIHN0cmljdCI7dmFyIEk7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguU2Vzc2lvblN0YXRlPXZvaWQgMCwoST1YLlNlc3Npb25TdGF0ZXx8KFguU2Vzc2lvblN0''@;'; put 'put ''YXRlPXt9KSkuQ29tcGxldGVkPSJjb21wbGV0ZWQiLEkuUnVubmluZz0icnVubmluZyIsSS5QZW5kaW5nPSJwZW5kaW5nIixJLklkbGU9ImlkbGUiLEkuVW5hdmFpbGFibGU9InVuYXZhaWxhYmxlIixJLk5vU3RhdGU9IiIsSS5GYWlsZWQ9ImZhaWxlZCIsSS5FcnJvcj0iZXJyb3IifSw5NDkz''@;'; put 'put ''Oih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDg2NTA6KHVlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sMTI0Oih1ZSxYKT0+eyJ1''@;'; put 'put ''c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5BdXRob3JpemVFcnJvcj12b2lkIDA7Y2xhc3MgeSBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKF8sZyl7c3VwZXIoXyksdGhpcy5tZXNzYWdlPV8sdGhpcy5jb25maXJtVXJsPWcs''@;'; put 'put ''dGhpcy5uYW1lPSJBdXRob3JpemVFcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMseS5wcm90b3R5cGUpfX1YLkF1dGhvcml6ZUVycm9yPXl9LDk0NjU6KHVlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxY''@;'; put 'put ''LkNlcnRpZmljYXRlRXJyb3I9dm9pZCAwO2NsYXNzIEkgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihnKXtzdXBlcihgJHtnfVxuUGxlYXNlIHZpc2l0IHRoZSBsaW5rIGJlbG93IGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uIG9uIHRoaXMgaXNzdWU6XG4tIGh0dHBzOi8vZ2l0aHViLmNvbS9z''@;'; put 'put ''YXNqcy9jbGkvaXNzdWVzLzExODEjaXNzdWVjb21tZW50LTEwOTA2Mzg1ODRcbmApLHRoaXMubmFtZT0iQ2VydGlmaWNhdGVFcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsSS5wcm90b3R5cGUpfX1YLkNlcnRpZmljYXRlRXJyb3I9SX0sNTI2NzoodWUsWCk9PnsidXNlIHN0cmlj''@;'; put 'put ''dCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguQ29tcHV0ZUpvYkV4ZWN1dGlvbkVycm9yPXZvaWQgMDtjbGFzcyB5IGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoXyxnKXtzdXBlcigiRXJyb3I6IEpvYiBleGVjdXRpb24gZmFpbGVkIiksdGhp''@;'; put 'put ''cy5qb2I9Xyx0aGlzLmxvZz1nLHRoaXMubmFtZT0iQ29tcHV0ZUpvYkV4ZWN1dGlvbkVycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyx5LnByb3RvdHlwZSl9fVguQ29tcHV0ZUpvYkV4ZWN1dGlvbkVycm9yPXl9LDkyMzI6KHVlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZp''@;'; put 'put ''bmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLkVycm9yUmVzcG9uc2U9dm9pZCAwLFguRXJyb3JSZXNwb25zZT1jbGFzcyB5e2NvbnN0cnVjdG9yKF8sZyxCKXtsZXQgdz1nO2lmKCJvYmplY3QiIT10eXBlb2YgZyl0cnl7dz1KU09OLnBhcnNlKGcpfWNhdGNoe0I9Zyx3''@;'; put 'put ''PSIifXRoaXMuZXJyb3I9e21lc3NhZ2U6XyxkZXRhaWxzOncscmF3OkJ9fX19LDUxMDk6KHVlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLkludGVybmFsU2VydmVyRXJyb3I9dm9pZCAwO2NsYXNzIHkgZXh0ZW5k''@;'; put 'put ''cyBFcnJvcntjb25zdHJ1Y3Rvcigpe3N1cGVyKCJFcnJvcjogSW50ZXJuYWwgc2VydmVyIGVycm9yLiIpLHRoaXMubmFtZT0iSW50ZXJuYWxTZXJ2ZXJFcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMseS5wcm90b3R5cGUpfX1YLkludGVybmFsU2VydmVyRXJyb3I9eX0sNTUxODoo''@;'; put 'put ''dWUsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguSW52YWxpZEpzb25FcnJvcj12b2lkIDA7Y2xhc3MgeSBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKCl7c3VwZXIoIkVycm9yOiBpbnZhbGlkIEpzb24gc3RyaW5n''@;'; put 'put ''IiksdGhpcy5uYW1lPSJJbnZhbGlkSnNvbkVycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyx5LnByb3RvdHlwZSl9fVguSW52YWxpZEpzb25FcnJvcj15fSwxMDA1Oih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVl''@;'; put 'put ''OiEwfSksWC5JbnZhbGlkU0FTanNDc3JmRXJyb3I9dm9pZCAwO2NsYXNzIHkgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcigpe3N1cGVyKCJBdXRoIGVycm9yOiBJbnZhbGlkIENTUkYgdG9rZW4hIiksdGhpcy5uYW1lPSJJbnZhbGlkU0FTanNDc3JmRXJyb3IiLE9iamVjdC5zZXRQcm90b3R5''@;'; put 'put ''cGVPZih0aGlzLHkucHJvdG90eXBlKX19WC5JbnZhbGlkU0FTanNDc3JmRXJyb3I9eX0sODUzMToodWUsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguSm9iRXhlY3V0aW9uRXJyb3I9dm9pZCAwO2NsYXNzIHkgZXh0''@;'; put 'put ''ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihfLGcsQil7c3VwZXIoYEVycm9yIENvZGUgJHtffTogJHtnfWApLHRoaXMuZXJyb3JDb2RlPV8sdGhpcy5lcnJvck1lc3NhZ2U9Zyx0aGlzLnJlc3VsdD1CLHRoaXMubmFtZT0iSm9iRXhlY3V0aW9uRXJyb3IiLE9iamVjdC5zZXRQcm90b3R5cGVPZih0''@;'; put 'put ''aGlzLHkucHJvdG90eXBlKX19WC5Kb2JFeGVjdXRpb25FcnJvcj15fSw5MDc5Oih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5Kb2JTdGF0ZVBvbGxFcnJvcj12b2lkIDA7Y2xhc3MgeSBleHRlbmRzIEVycm9y''@;'; put 'put ''e2NvbnN0cnVjdG9yKF8sZyl7c3VwZXIoYEVycm9yIHdoaWxlIHBvbGxpbmcgam9iIHN0YXRlIGZvciBqb2IgJHtffTogJHtnLm1lc3NhZ2V8fGd9YCksdGhpcy5vcmlnaW5hbEVycm9yPWcsdGhpcy5uYW1lPSJKb2JTdGF0ZVBvbGxFcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMs''@;'; put 'put ''eS5wcm90b3R5cGUpfX1YLkpvYlN0YXRlUG9sbEVycm9yPXl9LDMwOTY6KHVlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLkpzb25QYXJzZUFycmF5RXJyb3I9dm9pZCAwO2NsYXNzIHkgZXh0ZW5kcyBFcnJvcntj''@;'; put 'put ''b25zdHJ1Y3Rvcigpe3N1cGVyKCJDYW4gbm90IHBhcnNlIGFycmF5IG9iamVjdCB0byBqc29uLiIpLHRoaXMubmFtZT0iSnNvblBhcnNlQXJyYXlFcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMseS5wcm90b3R5cGUpfX1YLkpzb25QYXJzZUFycmF5RXJyb3I9eX0sNjc0MzoodWUs''@;'; put 'put ''WCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguTG9naW5SZXF1aXJlZEVycm9yPXZvaWQgMDtjbGFzcyB5IGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoXyl7c3VwZXIoYEF1dGggZXJyb3I6ICR7Xz9KU09OLnN0cmlu''@;'; put 'put ''Z2lmeShfLG51bGwsMik6IllvdSBtdXN0IGJlIGxvZ2dlZCBpbiB0byBhY2Nlc3MgdGhpcyByZXNvdXJjZSJ9YCksdGhpcy5uYW1lPSJMb2dpblJlcXVpcmVkRXJyb3IiLE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLHkucHJvdG90eXBlKX19WC5Mb2dpblJlcXVpcmVkRXJyb3I9eX0sNzg2''@;'; put 'put ''NDoodWUsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguTm9TZXNzaW9uU3RhdGVFcnJvcj12b2lkIDA7Y2xhc3MgeSBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKF8sZyxCKXtzdXBlcihgQ291bGQgbm90IGdldCBz''@;'; put 'put ''ZXNzaW9uIHN0YXRlLiBTZXJ2ZXIgcmVzcG9uZGVkIHdpdGggJHtffSB3aGlsc3QgY2hlY2tpbmcgc3RhdGU6ICR7Z31gKSx0aGlzLnNlcnZlclJlc3BvbnNlU3RhdHVzPV8sdGhpcy5zZXNzaW9uU3RhdGVVcmw9Zyx0aGlzLmxvZ1VybD1CLHRoaXMubmFtZT0iTm9TZXNzaW9uU3RhdHVzIixP''@;'; put 'put ''YmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyx5LnByb3RvdHlwZSl9fVguTm9TZXNzaW9uU3RhdGVFcnJvcj15fSw5NTc3Oih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5Ob3RGb3VuZEVycm9yPXZvaWQgMDtj''@;'; put 'put ''bGFzcyB5IGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoXyl7c3VwZXIoYEVycm9yOiBSZXNvdXJjZSBhdCAke199IHdhcyBub3QgZm91bmRgKSx0aGlzLnVybD1fLHRoaXMubmFtZT0iTm90Rm91bmRFcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMseS5wcm90b3R5cGUpfX1YLk5v''@;'; put 'put ''dEZvdW5kRXJyb3I9eX0sOTI3OToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5Sb290Rm9sZGVyTm90Rm91bmRFcnJvcj12b2lkIDA7Y29uc3QgST15KDY3OTkpO2NsYXNzIF8gZXh0ZW5kcyBFcnJvcntj''@;'; put 'put ''b25zdHJ1Y3RvcihCLHcsUCl7bGV0IEY9YFJvb3QgZm9sZGVyICR7Qn0gd2FzIG5vdCBmb3VuZC5cblBsZWFzZSBjaGVjayAke3d9L1NBU0RyaXZlLlxuSWYgdGhlIGZvbGRlciBET0VTIGV4aXN0IHRoZW4gaXQgaXMgbGlrZWx5IGEgcGVybWlzc2lvbiBwcm9ibGVtLlxuYDtpZihQKXtsZXQg''@;'; put 'put ''ej0oMCxJLmRlY29kZVRva2VuKShQKS5zY29wZTt6PXoubWFwKE49PiIqICIrTiksRis9IllvdXIgYWNjZXNzIHRva2VuIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgc2NvcGVzOlxuIit6LmpvaW4oIlxuIil9c3VwZXIoRiksdGhpcy5uYW1lPSJSb290Rm9sZGVyTm90Rm91bmRFcnJvciIsT2Jq''@;'; put 'put ''ZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsXy5wcm90b3R5cGUpfX1YLlJvb3RGb2xkZXJOb3RGb3VuZEVycm9yPV99LDk1MjY6KHVlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLlNBUzlBdXRoRXJyb3I9dm9pZCAw''@;'; put 'put ''O2NsYXNzIHkgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcigpe3N1cGVyKCJUaGUgY3JlZGVudGlhbHMgeW91IHByb3ZpZGVkIGNhbm5vdCBiZSBhdXRoZW50aWNhdGVkLiBQbGVhc2UgcHJvdmlkZSBhIHZhbGlkIHNldCBvZiBjcmVkZW50aWFscy4iKSx0aGlzLm5hbWU9IkF1dGhvcml6ZUVy''@;'; put 'put ''cm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyx5LnByb3RvdHlwZSl9fVguU0FTOUF1dGhFcnJvcj15fSw4ODc1Oih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5XZWJvdXRSZXNwb25zZUVycm9yPXZv''@;'; put 'put ''aWQgMDtjbGFzcyB5IGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoXyl7c3VwZXIoYEVycm9yOiBlcnJvciB3aGlsZSBwYXJzaW5nIHJlc3BvbnNlIGZyb20gJHtffWApLHRoaXMudXJsPV8sdGhpcy5uYW1lPSJXZWJvdXRSZXNwb25zZUVycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YodGhp''@;'; put 'put ''cyx5LnByb3RvdHlwZSl9fVguV2Vib3V0UmVzcG9uc2VFcnJvcj15fSwxMzk1OmZ1bmN0aW9uKHVlLFgseSl7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihnLEIsdyxQKXt2b2lkIDA9PT1QJiYoUD13KTt2YXIg''@;'; put 'put ''Rj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEIsdyk7KCFGfHwoImdldCJpbiBGPyFCLl9fZXNNb2R1bGU6Ri53cml0YWJsZXx8Ri5jb25maWd1cmFibGUpKSYmKEY9e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEJbd119fSksT2JqZWN0LmRlZmluZVByb3Bl''@;'; put 'put ''cnR5KGcsUCxGKX06ZnVuY3Rpb24oZyxCLHcsUCl7dm9pZCAwPT09UCYmKFA9dyksZ1tQXT1CW3ddfSksXz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZyxCKXtmb3IodmFyIHcgaW4gZykiZGVmYXVsdCIhPT13JiYhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5j''@;'; put 'put ''YWxsKEIsdykmJkkoQixnLHcpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksXyh5KDEyNCksWCksXyh5KDk0NjUpLFgpLF8oeSg1MjY3KSxYKSxfKHkoOTIzMiksWCksXyh5KDUxMDkpLFgpLF8oeSg1NTE4KSxYKSxfKHkoODUzMSksWCksXyh5KDkw''@;'; put 'put ''NzkpLFgpLF8oeSgzMDk2KSxYKSxfKHkoNjc0MyksWCksXyh5KDc4NjQpLFgpLF8oeSg5NTc3KSxYKSxfKHkoOTI3OSksWCksXyh5KDg4NzUpLFgpfSwxMjMwOmZ1bmN0aW9uKHVlLFgseSl7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNy''@;'; put 'put ''ZWF0ZT9mdW5jdGlvbihnLEIsdyxQKXt2b2lkIDA9PT1QJiYoUD13KTt2YXIgRj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEIsdyk7KCFGfHwoImdldCJpbiBGPyFCLl9fZXNNb2R1bGU6Ri53cml0YWJsZXx8Ri5jb25maWd1cmFibGUpKSYmKEY9e2VudW1lcmFibGU6ITAsZ2V0''@;'; put 'put ''OmZ1bmN0aW9uKCl7cmV0dXJuIEJbd119fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGcsUCxGKX06ZnVuY3Rpb24oZyxCLHcsUCl7dm9pZCAwPT09UCYmKFA9dyksZ1tQXT1CW3ddfSksXz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZyxCKXtmb3IodmFyIHcgaW4gZykiZGVm''@;'; put 'put ''YXVsdCIhPT13JiYhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEIsdykmJkkoQixnLHcpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksXyh5KDQ3MCksWCksXyh5KDQ2NjYpLFgpLF8oeSg0OTc1KSxYKSxfKHkoNTc2NiksWCks''@;'; put 'put ''Xyh5KDIxNSksWCksXyh5KDQ3ODIpLFgpLF8oeSg0MTY4KSxYKSxfKHkoODUxNiksWCksXyh5KDM4NDApLFgpLF8oeSg1ODQxKSxYKSxfKHkoMTQyOCksWCksXyh5KDYwMzgpLFgpLF8oeSg5NDkzKSxYKSxfKHkoMzE1MyksWCksXyh5KDg2NTApLFgpLF8oeSg2MTc3KSxYKSxfKHkoMTM5NSks''@;'; put 'put ''WCl9LDMzMDI6ZnVuY3Rpb24odWUsWCl7InVzZSBzdHJpY3QiO3ZhciB5PXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihfLGcsQix3KXtyZXR1cm4gbmV3KEJ8fChCPVByb21pc2UpKShmdW5jdGlvbihGLE8pe2Z1bmN0aW9uIHooSyl7dHJ5e0wody5uZXh0KEspKX1jYXRjaChVKXtP''@;'; put 'put ''KFUpfX1mdW5jdGlvbiBOKEspe3RyeXtMKHcudGhyb3coSykpfWNhdGNoKFUpe08oVSl9fWZ1bmN0aW9uIEwoSyl7Sy5kb25lP0YoSy52YWx1ZSk6ZnVuY3Rpb24gUChGKXtyZXR1cm4gRiBpbnN0YW5jZW9mIEI/RjpuZXcgQihmdW5jdGlvbihPKXtPKEYpfSl9KEsudmFsdWUpLnRoZW4oeixO''@;'; put 'put ''KX1MKCh3PXcuYXBwbHkoXyxnfHxbXSkpLm5leHQoKSl9KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguYXBwZW5kRXh0cmFSZXNwb25zZUF0dHJpYnV0ZXM9dm9pZCAwLFguYXBwZW5kRXh0cmFSZXNwb25zZUF0dHJpYnV0ZXM9ZnVuY3Rpb24g''@;'; put 'put ''SShfLGcpe3JldHVybiB5KHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtsZXQgQj17fTtpZihnPy5sZW5ndGgpe2NvbnN0IHc9Zy5yZWR1Y2UoKFAsRik9PihQW0ZdPV9bRl0sUCkse30pO0I9T2JqZWN0LmFzc2lnbih7cmVzdWx0Ol8ucmVzdWx0fSx3KX1lbHNlIEI9Xy5yZXN1bHQ7''@;'; put 'put ''cmV0dXJuIEJ9KX19LDc5MjI6ZnVuY3Rpb24odWUsWCl7InVzZSBzdHJpY3QiO3ZhciB5PXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihfLGcsQix3KXtyZXR1cm4gbmV3KEJ8fChCPVByb21pc2UpKShmdW5jdGlvbihGLE8pe2Z1bmN0aW9uIHooSyl7dHJ5e0wody5uZXh0KEspKX1j''@;'; put 'put ''YXRjaChVKXtPKFUpfX1mdW5jdGlvbiBOKEspe3RyeXtMKHcudGhyb3coSykpfWNhdGNoKFUpe08oVSl9fWZ1bmN0aW9uIEwoSyl7Sy5kb25lP0YoSy52YWx1ZSk6ZnVuY3Rpb24gUChGKXtyZXR1cm4gRiBpbnN0YW5jZW9mIEI/RjpuZXcgQihmdW5jdGlvbihPKXtPKEYpfSl9KEsudmFsdWUp''@;'; put 'put ''LnRoZW4oeixOKX1MKCh3PXcuYXBwbHkoXyxnfHxbXSkpLm5leHQoKSl9KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguYXN5bmNGb3JFYWNoPXZvaWQgMCxYLmFzeW5jRm9yRWFjaD1mdW5jdGlvbiBJKF8sZyl7cmV0dXJuIHkodGhpcyx2b2lk''@;'; put 'put ''IDAsdm9pZCAwLGZ1bmN0aW9uKigpe2ZvcihsZXQgQj0wO0I8Xy5sZW5ndGg7QisrKXlpZWxkIGcoX1tCXSxCLF8pfSl9fSwzNzkzOih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5jb21wYXJlVGltZXN0YW1w''@;'; put 'put ''cz12b2lkIDAsWC5jb21wYXJlVGltZXN0YW1wcz0oSSxfKT0+Xy50aW1lc3RhbXAuZ2V0VGltZSgpLUkudGltZXN0YW1wLmdldFRpbWUoKX0sMjQwMjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDUxMDgpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFs''@;'; put 'put ''dWU6ITB9KSxYLmlzRm9ybWF0c1RhYmxlPVguY29udmVydFRvQ1NWPXZvaWQgMDtjb25zdCBfPXkoNjQ2NyksZz15KDk3NzgpO1guY29udmVydFRvQ1NWPShGLE8pPT57dmFyIHo7aWYoIUZbT10pe2NvbnN0IGVlPSgwLGcucHJlZml4TWVzc2FnZSkoIk5vIHRhYmxlIHByb3ZpZGVkIHRvIGJl''@;'; put 'put ''IGNvbnZlcnRlZCB0byBDU1YuIiwiRXJyb3Igd2hpbGUgY29udmVydGluZyB0byBDU1YuICIpO3Rocm93InN0cmluZyI9PXR5cGVvZiBlZT9uZXcgRXJyb3IoZWUpOmVlfWNvbnN0IE49RltPXTtpZighQXJyYXkuaXNBcnJheShOKSlyZXR1cm4iIjtsZXQgVSxMPW51bGw9PT0oej1GW2AkJHtP''@;'; put 'put ''fWBdKXx8dm9pZCAwPT09ej92b2lkIDA6ei5mb3JtYXRzLEs9W10sVz0hMTtMJiYoSz1PYmplY3Qua2V5cyhMKS5tYXAoZWU9PmAke2VlfToke0xbZWVdfWApKTtjb25zdCBZPU9iamVjdC5rZXlzKE5bMF0pO3JldHVybiBZLmZvckVhY2goZWU9PntpZighTHx8IU9iamVjdC5rZXlzKEwpLmlu''@;'; put 'put ''Y2x1ZGVzKGVlKSl7bGV0IEo9ITEsbmU9ITE7aWYoTi5mb3JFYWNoKGllPT57bnVsbD09PWllW2VlXXx8Im51bWJlciI9PXR5cGVvZiBpZVtlZV0/Sj0hMDoic3RyaW5nIj09dHlwZW9mIGllW2VlXSYmKDAsXy5pc1NwZWNpYWxNaXNzaW5nKShpZVtlZV0pJiYobmU9ITApfSksSiYmbmUpSy5w''@;'; put 'put ''dXNoKGAke2VlfTpiZXN0LmApLEx8fChMPXt9KSxMW2VlXT0iYmVzdC4iO2Vsc2V7bGV0IGllPW51bGwsbGU9ITEsbWU9LTE7Y29uc3QgX2U9Ti5tYXAoKFRlLFNlKT0+e2lmKFRlW2VlXXx8IiI9PT1UZVtlZV0pe2xldCBqZTtyZXR1cm4gaWU/bGV8fChsZT0oIiI9PT1UZVtlZV18fCJzdHJp''@;'; put 'put ''bmciPT10eXBlb2YgVGVbZWVdPyJjaGFycyI6Im51bWJlciIpIT09aWUsbWU9bGU/U2UrMTotMSk6aWU9IiI9PT1UZVtlZV18fCJzdHJpbmciPT10eXBlb2YgVGVbZWVdPyJjaGFycyI6Im51bWJlciIsInN0cmluZyI9PXR5cGVvZiBUZVtlZV0mJihqZT1QKFRlW2VlXSkpLGplfX0pLnNvcnQo''@;'; put 'put ''KFRlLFNlKT0+U2UtVGUpWzBdO19lJiZfZT4zMjc2NSYmKFc9ITApLGxlJiZJLmVycm9yKGBSb3cgKCR7bWV9KSwgQ29sdW1uICgke2VlfSkgaGFzIG1peGVkIHR5cGVzOiBFUlJPUmApLEsucHVzaChgJHtlZX06JHsiY2hhcnMiPT09aWU/IiRjaGFyIjoiIn0ke19lfHwoImNoYXJzIj09PWll''@;'; put 'put ''PyIxIjoiYmVzdCIpfS5gKX19fSksTCYmKEs9Sy5zb3J0KChlZSxKKT0+WS5pbmRleE9mKGVlLnJlcGxhY2UoLzouKi8sIiIpKS1ZLmluZGV4T2YoSi5yZXBsYWNlKC86LiovLCIiKSkpKSxXPyJFUlJPUjogTEFSR0UgU1RSSU5HIExFTkdUSCI6KFU9Ti5tYXAoZWU9Pk9iamVjdC5rZXlzKGVl''@;'; put 'put ''KS5tYXAoKG5lLGllKT0+e2xldCBsZTtjb25zdCBtZT1lZVtuZV07aWYoIm51bWJlciI9PXR5cGVvZiBtZSlyZXR1cm4gbWU7aWYobGU9bnVsbD09PW1lPyIiOm1lLEwmJiJiZXN0LiI9PT1MW25lXSl7aWYobGUmJiEoMCxfLmlzU3BlY2lhbE1pc3NpbmcpKGxlKSl0aHJvdyBuZXcgRXJyb3Io''@;'; put 'put ''IkEgU3BlY2lhbCBtaXNzaW5nIHZhbHVlIGNhbiBvbmx5IGJlIGEgc2luZ2xlIGNoYXJhY3RlciBmcm9tICdBJyB0byAnWicsICdfJywgJy5bYS16XScsICcuXyciKTtyZXR1cm5gJHtsZS5pbmNsdWRlcygiLiIpPyIiOiIuIn0ke2xlLnRvTG93ZXJDYXNlKCl9YH1yZXR1cm4gbGU9bGUucmVw''@;'; put 'put ''bGFjZSgvIi9nLCciIicpLGxlPWAiJHtsZX0iYCxsZS5zdWJzdHJpbmcoMSxsZS5sZW5ndGgtMSkuc2VhcmNoKC8oXHR8XG58XHJ8LHxcJ3xcIikvZ20pPDAmJihsZT1sZS5zdWJzdHJpbmcoMSxsZS5sZW5ndGgtMSkpLGxlPWxlLnJlcGxhY2UoL1xyXG4vZ20sIlxuIiksIiI9PT1sZSYmS1tp''@;'; put 'put ''ZV0uaW5jbHVkZXMoImJlc3QiKSYmKGxlPSIuIiksbGV9KS5qb2luKCIsIikpLEsuam9pbigiLCIpLnJlcGxhY2UoLywvZywiICIpKyJcclxuIitVLmpvaW4oIlxyXG4iKSl9LFguaXNGb3JtYXRzVGFibGU9Rj0+L15cJC4qLy50ZXN0KEYpO2NvbnN0IFA9Rj0+e2xldCBPPUYubGVuZ3RoO2Zv''@;'; put 'put ''cihsZXQgej1GLmxlbmd0aC0xO3o+PTA7ei0tKXtjb25zdCBOPUYuY2hhckNvZGVBdCh6KTtOPjEyNyYmTjw9MjA0Nz9PKys6Tj4yMDQ3JiZOPD02NTUzNSYmKE8rPTIpLE4+PTU2MzIwJiZOPD01NzM0MyYmei0tfXJldHVybiBPfX0sNjExNjpmdW5jdGlvbih1ZSxYLHkpeyJ1c2Ugc3RyaWN0''@;'; put 'put ''Ijt2YXIgST10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oQil7cmV0dXJuIEImJkIuX19lc01vZHVsZT9COntkZWZhdWx0OkJ9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5jcmVhdGVBeGlvc0luc3RhbmNlPXZvaWQgMDtj''@;'; put 'put ''b25zdCBfPUkoeSg3MjE4KSk7WC5jcmVhdGVBeGlvc0luc3RhbmNlPShCLHcpPT5fLmRlZmF1bHQuY3JlYXRlKHtiYXNlVVJMOkIsaHR0cHNBZ2VudDp3fSl9LDk4MjU6KHVlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9''@;'; put 'put ''KSxYLmRlbGF5PXZvaWQgMCxYLmRlbGF5PUk9Pm5ldyBQcm9taXNlKF89PnNldFRpbWVvdXQoXyxJKSl9LDk5MDpmdW5jdGlvbih1ZSxYLHkpeyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDQxNTUpLF89eSg1MTA4KSxnPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihGLE8seixOKXtyZXR1''@;'; put 'put ''cm4gbmV3KHp8fCh6PVByb21pc2UpKShmdW5jdGlvbihLLFUpe2Z1bmN0aW9uIFcoZWUpe3RyeXtxKE4ubmV4dChlZSkpfWNhdGNoKEope1UoSil9fWZ1bmN0aW9uIFkoZWUpe3RyeXtxKE4udGhyb3coZWUpKX1jYXRjaChKKXtVKEopfX1mdW5jdGlvbiBxKGVlKXtlZS5kb25lP0soZWUudmFs''@;'; put 'put ''dWUpOmZ1bmN0aW9uIEwoSyl7cmV0dXJuIEsgaW5zdGFuY2VvZiB6P0s6bmV3IHooZnVuY3Rpb24oVSl7VShLKX0pfShlZS52YWx1ZSkudGhlbihXLFkpfXEoKE49Ti5hcHBseShGLE98fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVl''@;'; put 'put ''OiEwfSksWC5mZXRjaExvZz1YLmZldGNoTG9nQnlDaHVua3M9dm9pZCAwO2NvbnN0IEI9eSg5Nzc4KTtYLmZldGNoTG9nQnlDaHVua3M9KEYsTyx6LE4pPT5nKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCgwLFguZmV0Y2hMb2cpKEYsTyx6LDAsTil9KSxY''@;'; put 'put ''LmZldGNoTG9nPShGLE8seixOLEwpPT5nKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IEs9SS5sb2dnZXJ8fF87bGV0IFU9IiI7Y29uc3QgVz1MPDFlND9MOjFlNDtkb3tLLmluZm8oYEZldGNoaW5nIGxvZ3MgZnJvbSBsaW5lIG5vOiAke04rMX0gdG8gJHtOK1d9IG9m''@;'; put 'put ''ICR7TH0uYCk7Y29uc3QgWT15aWVsZCBGLmdldChgJHt6fT9zdGFydD0ke059JmxpbWl0PSR7V31gLE8pLnRoZW4oZWU9PmVlLnJlc3VsdCkuY2F0Y2goZWU9Pnt0aHJvdygwLEIucHJlZml4TWVzc2FnZSkoZWUsIkVycm9yIHdoaWxlIGdldHRpbmcgbG9nLiAiKX0pO2lmKDA9PT1ZLml0ZW1z''@;'; put 'put ''Lmxlbmd0aClicmVhaztVKz1ZLml0ZW1zLm1hcChlZT0+ZWUubGluZSkuam9pbigiXG4iKSxOKz1XfXdoaWxlKE48TCk7cmV0dXJuIFV9KX0sNzE0Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLmZvcm1h''@;'; put 'put ''dERhdGFGb3JSZXF1ZXN0PXZvaWQgMDtjb25zdCBJPXkoMjQwMiksXz15KDQ3OTkpO1guZm9ybWF0RGF0YUZvclJlcXVlc3Q9Qj0+e2NvbnN0IHc9W107bGV0IFA9MDtjb25zdCBGPXt9O2Zvcihjb25zdCBPIGluIEIpe2lmKCgwLEkuaXNGb3JtYXRzVGFibGUpKE8pJiZPYmplY3Qua2V5cyhC''@;'; put 'put ''KS5pbmNsdWRlcyhPLnJlcGxhY2UoL15cJC8sIiIpKSljb250aW51ZTtQKyssKDAsSS5pc0Zvcm1hdHNUYWJsZSkoTyl8fHcucHVzaChPKTtjb25zdCB6PSgwLEkuY29udmVydFRvQ1NWKShCLE8pO2lmKCJFUlJPUjogTEFSR0UgU1RSSU5HIExFTkdUSCI9PT16KXRocm93IG5ldyBFcnJvcigi''@;'; put 'put ''VGhlIG1heCBsZW5ndGggb2YgYSBzdHJpbmcgdmFsdWUgaW4gU0FTanMgaXMgMzI3NjUgY2hhcmFjdGVycy4iKTtpZih6Lmxlbmd0aD4xNmUzKXtjb25zdCBOPSgwLF8uc3BsaXRDaHVua3MpKHopO0ZbYHNhc2pzJHtQfWRhdGEwYF09Ti5sZW5ndGgsTi5mb3JFYWNoKChMLEspPT57Rltgc2Fz''@;'; put 'put ''anMke1B9ZGF0YSR7SysxfWBdPUx9KX1lbHNlIEZbYHNhc2pzJHtQfWRhdGFgXT16fXJldHVybiBGLnNhc2pzX3RhYmxlcz13LmpvaW4oIiAiKSxGfX0sODQ1ODpmdW5jdGlvbih1ZSxYLHkpeyJ1c2Ugc3RyaWN0Ijt2YXIgST10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24o''@;'; put 'put ''dyl7cmV0dXJuIHcmJncuX19lc01vZHVsZT93OntkZWZhdWx0Ond9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5nZXRGb3JtRGF0YT12b2lkIDA7Y29uc3QgXz15KDU5MjgpLGc9SSh5KDYyMzApKTtYLmdldEZvcm1EYXRhPSgpPT4oMCxfLmlz''@;'; put 'put ''Tm9kZSkoKT9uZXcgZy5kZWZhdWx0Om5ldyBGb3JtRGF0YX0sMzI2MDoodWUsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguZ2V0VXNlckxhbmd1YWdlPXZvaWQgMCxYLmdldFVzZXJMYW5ndWFnZT0oKT0+d2luZG93''@;'; put 'put ''Lm5hdmlnYXRvci5sYW5ndWFnZXx8d2luZG93Lm5hdmlnYXRvci51c2VyTGFuZ3VhZ2V9LDE4ODQ6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguZ2V0VmFsaWRKc29uPXZvaWQgMDtjb25zdCBJPXkoMTM5''@;'; put 'put ''NSk7WC5nZXRWYWxpZEpzb249Zz0+e3RyeXtpZihudWxsPT1nKXRocm93IG5ldyBJLkludmFsaWRKc29uRXJyb3I7aWYoQXJyYXkuaXNBcnJheShnKSl0aHJvdyBuZXcgSS5Kc29uUGFyc2VBcnJheUVycm9yO3JldHVybiJvYmplY3QiPT10eXBlb2YgZz9nOiIiPT09Zz97fTpKU09OLnBhcnNl''@;'; put 'put ''KGcpfWNhdGNoKEIpe3Rocm93IEIgaW5zdGFuY2VvZiBJLkpzb25QYXJzZUFycmF5RXJyb3I/QjpuZXcgSS5JbnZhbGlkSnNvbkVycm9yfX19LDU5Mjg6ZnVuY3Rpb24odWUsWCx5KXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRl''@;'; put 'put ''P2Z1bmN0aW9uKGcsQix3LFApe3ZvaWQgMD09PVAmJihQPXcpO3ZhciBGPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoQix3KTsoIUZ8fCgiZ2V0ImluIEY/IUIuX19lc01vZHVsZTpGLndyaXRhYmxlfHxGLmNvbmZpZ3VyYWJsZSkpJiYoRj17ZW51bWVyYWJsZTohMCxnZXQ6ZnVu''@;'; put 'put ''Y3Rpb24oKXtyZXR1cm4gQlt3XX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZyxQLEYpfTpmdW5jdGlvbihnLEIsdyxQKXt2b2lkIDA9PT1QJiYoUD13KSxnW1BdPUJbd119KSxfPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihnLEIpe2Zvcih2YXIgdyBpbiBnKSJkZWZhdWx0''@;'; put 'put ''IiE9PXcmJiFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoQix3KSYmSShCLGcsdyl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxfKHkoMzMwMiksWCksXyh5KDc5MjIpLFgpLF8oeSgzNzkzKSxYKSxfKHkoMjQwMiksWCksXyh5''@;'; put 'put ''KDYxMTYpLFgpLF8oeSg5ODI1KSxYKSxfKHkoOTkwKSxYKSxfKHkoMTg4NCksWCksXyh5KDQyNDMpLFgpLF8oeSgyNTcpLFgpLF8oeSgyKSxYKSxfKHkoMjYxNSksWCksXyh5KDI5MjApLFgpLF8oeSgyNDIyKSxYKSxfKHkoMzEpLFgpLF8oeSg2NTE1KSxYKSxfKHkoNjQxNiksWCksXyh5KDI4''@;'; put 'put ''MTMpLFgpLF8oeSg5ODk2KSxYKSxfKHkoNDc5OSksWCksXyh5KDQ1MTYpLFgpLF8oeSg4NDU4KSxYKSxfKHkoMzI2MCksWCl9LDQyNDM6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg0MTU1KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSks''@;'; put 'put ''WC5pc05vZGU9dm9pZCAwLFguaXNOb2RlPSgpPT50eXBlb2YgSTwidSImJm51bGwhPUkudmVyc2lvbnMmJm51bGwhPUkudmVyc2lvbnMubm9kZX0sMjU3Oih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5pc1Jl''@;'; put 'put ''bGF0aXZlUGF0aD12b2lkIDAsWC5pc1JlbGF0aXZlUGF0aD1JPT4hIUkmJiFJLnN0YXJ0c1dpdGgoIi8iKX0sMjoodWUsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguaXNVcmk9dm9pZCAwLFguaXNVcmk9ST0+L15c''@;'; put 'put ''L2ZvbGRlcnNcL2ZvbGRlcnNcLy8udGVzdChJKX0sMjYxNToodWUsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguaXNVcmw9dm9pZCAwLFguaXNVcmw9ST0+e2NvbnN0IF89WyJodHRwOiIsImh0dHBzOiJdO3RyeXtj''@;'; put 'put ''b25zdCBnPW5ldyBVUkwoSSk7aWYoIV8uaW5jbHVkZXMoZy5wcm90b2NvbCkpcmV0dXJuITF9Y2F0Y2h7cmV0dXJuITF9cmV0dXJuITB9fSwxMjEwOmZ1bmN0aW9uKHVlLFgpeyJ1c2Ugc3RyaWN0Ijt2YXIgeT10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oRixPLHosTil7cmV0dXJu''@;'; put 'put ''IG5ldyh6fHwoej1Qcm9taXNlKSkoZnVuY3Rpb24oSyxVKXtmdW5jdGlvbiBXKGVlKXt0cnl7cShOLm5leHQoZWUpKX1jYXRjaChKKXtVKEopfX1mdW5jdGlvbiBZKGVlKXt0cnl7cShOLnRocm93KGVlKSl9Y2F0Y2goSil7VShKKX19ZnVuY3Rpb24gcShlZSl7ZWUuZG9uZT9LKGVlLnZhbHVl''@;'; put 'put ''KTpmdW5jdGlvbiBMKEspe3JldHVybiBLIGluc3RhbmNlb2Ygej9LOm5ldyB6KGZ1bmN0aW9uKFUpe1UoSyl9KX0oZWUudmFsdWUpLnRoZW4oVyxZKX1xKChOPU4uYXBwbHkoRixPfHxbXSkpLm5leHQoKSl9KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZToh''@;'; put 'put ''MH0pLFgub3BlbkxvZ2luUHJvbXB0PXZvaWQgMDt2YXIgST1mdW5jdGlvbihGKXtyZXR1cm4gRi5zdHlsZXM9InNhc2pzQWRhcHRlclN0eWxlcyIsRi5vdmVybGF5PSJzYXNqc0FkYXB0ZXJMb2dpblByb21wdEJHIixGLmRpYWxvZz0ic2FzanNBZGFwdGVyTG9naW5Qcm9tcHQiLEZ9KEl8fHt9''@;'; put 'put ''KTtjb25zdCBfPSJzYXNqcy1hZGFwdGVyIixnPXtwb3BVcDpgJHtffXBvcFVwYCxwb3BVcEJHOmAke199cG9wVXBCR2B9O1gub3BlbkxvZ2luUHJvbXB0PSgpPT5uZXcgUHJvbWlzZShGPT55KHZvaWQgMCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IE89ZG9jdW1lbnQuY3JlYXRl''@;'; put 'put ''RWxlbWVudCgic3R5bGUiKTtPLmlkPUkuc3R5bGVzLE8uaW5uZXJUZXh0PVA7Y29uc3Qgej1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTt6LmlkPUkub3ZlcmxheSx6LmNsYXNzTGlzdC5hZGQoZy5wb3BVcEJHKTtjb25zdCBOPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO04u''@;'; put 'put ''aWQ9SS5kaWFsb2csTi5jbGFzc0xpc3QuYWRkKGcucG9wVXApO2NvbnN0IEw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaDEiKTtMLmlubmVyVGV4dD0iU2Vzc2lvbiBFeHBpcmVkISIsTi5hcHBlbmRDaGlsZChMKTtjb25zdCBLPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLFU9ZG9j''@;'; put 'put ''dW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpO1UuaW5uZXJUZXh0PSJZb3UgbmVlZCB0byByZWxvZ2luLCBjbGljayBPSyB0byBsb2dpbi4iLEsuYXBwZW5kQ2hpbGQoVSksTi5hcHBlbmRDaGlsZChLKTtjb25zdCBXPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIpO1cuY2xhc3NM''@;'; put 'put ''aXN0LmFkZCgiY2FuY2VsIiksVy5pbm5lclRleHQ9IkNhbmNlbCIsVy5vbmNsaWNrPSgpPT57dygpLEYoITEpfSxOLmFwcGVuZENoaWxkKFcpO2NvbnN0IFk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnV0dG9uIik7WS5jbGFzc0xpc3QuYWRkKCJjb25maXJtIiksWS5pbm5lclRleHQ9Ik9r''@;'; put 'put ''IixZLm9uY2xpY2s9KCk9Pnt3KCksRighMCl9LE4uYXBwZW5kQ2hpbGQoWSksZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdz0iaGlkZGVuIixkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKE8pLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoeiksZG9jdW1lbnQuYm9keS5hcHBlbmRDaGls''@;'; put 'put ''ZChOKX0pKTtjb25zdCB3PSgpPT57T2JqZWN0LnZhbHVlcyhJKS5mb3JFYWNoKEY9Pnt2YXIgTztjb25zdCB6PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKEYpO251bGw9PT0oTz16Py5wYXJlbnROb2RlKXx8dm9pZCAwPT09T3x8Ty5yZW1vdmVDaGlsZCh6KX0pLGRvY3VtZW50LmJvZHkuc3R5''@;'; put 'put ''bGUub3ZlcmZsb3c9ImF1dG8ifSxQPWBcbi4ke2cucG9wVXBCR30gLFxuLiR7Zy5wb3BVcH0ge1xuICB6LWluZGV4OiAxMDAwMDtcbn1cbi4ke2cucG9wVXB9IHtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAtbW96LWJv''@;'; put 'put ''eC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHRvcDogNDAlO1xuICBsZWZ0OiA1MCU7XG4gIHBhZGRpbmc6IDA7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgZm9udC1mYW1pbHk6ICdQVCBTYW5zJywgc2Fucy1zZXJpZjtcbiAg''@;'; put 'put ''Y29sb3I6ICNmZmY7XG4gIGJvcmRlci1zdHlsZTogbm9uZTtcbiAgei1pbmRleDogOTk5O1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMik7XG4gIG1hcmdpbjogMDtcbiAgd2lkdGg6IDEwMCU7XG4gIG1heC13aWR0aDogMzAwcHg7XG4gIGhl''@;'; put 'put ''aWdodDogYXV0bztcbiAgbWF4LWhlaWdodDogMzAwcHg7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xufVxuLiR7Zy5wb3BVcH0gPiBoMSB7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgLW1vei1i''@;'; put 'put ''b3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBwYWRkaW5nOiA1cHg7XG4gIG1pbi1oZWlnaHQ6IDQwcHg7XG4gIGZvbnQtc2l6ZTogMS4yZW07XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGNvbG9yOiAjZmZmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0''@;'; put 'put ''cmFuc3BhcmVudDtcbiAgYm9yZGVyLXN0eWxlOiBub25lO1xuICBib3JkZXItd2lkdGg6IDVweDtcbiAgYm9yZGVyLWNvbG9yOiBibGFjaztcbn1cbi4ke2cucG9wVXB9ID4gZGl2IHtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogY2FsYygxMDAlIC0xMDhweCk7XG4gIG1hcmdpbjogMDtc''@;'; put 'put ''biAgZGlzcGxheTogYmxvY2s7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBwYWRkaW5nOiA1JTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBib3JkZXItd2lk''@;'; put 'put ''dGg6IDFweDtcbiAgYm9yZGVyLWNvbG9yOiAjY2NjO1xuICBib3JkZXItc3R5bGU6IG5vbmUgbm9uZSBzb2xpZCBub25lO1xuICBvdmVyZmxvdzogYXV0bztcbn1cbi4ke2cucG9wVXB9ID4gZGl2ID4gc3BhbiB7XG4gIGRpc3BsYXk6IHRhYmxlLWNlbGw7XG4gIGJveC1zaXppbmc6IGJvcmRl''@;'; put 'put ''ci1ib3g7XG4gIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDA7XG4gIHdpZHRoOiAzMDBweDtcbiAgaGVpZ2h0OiAxMDhweDtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtc''@;'; put 'put ''biAgYm9yZGVyLXN0eWxlOiBub25lO1xufVxuLiR7Zy5wb3BVcH0gLmNhbmNlbCB7XG4gIGZsb2F0OiBsZWZ0O1xufVxuLiR7Zy5wb3BVcH0gLmNvbmZpcm0ge1xuICBmbG9hdDogcmlnaHQ7XG59XG4uJHtnLnBvcFVwfSA+IGJ1dHRvbiB7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4g''@;'; put 'put ''IC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDEwcHg7XG4gIHdpZHRoOiA1MCU7XG4gIGJvcmRlcjogMXB4IG5vbmUgI2NjYztcbiAgY29sb3I6ICNmZmY7XG4gIGZvbnQtZmFt''@;'; put 'put ''aWx5OiBpbmhlcml0O1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGhlaWdodDogNTBweDtcbiAgYmFja2dyb3VuZDogcmdiYSgxLCAxLCAxLCAwLjIpO1xufVxuLiR7Zy5wb3BVcH0gPiBidXR0b246aG92ZXIge1xuICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMik7XG59XG4uJHtnLnBv''@;'; put 'put ''cFVwQkd9IHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDA7XG4gIG9wYWNpdHk6IDAuOTU7XG4gIHotaW5kZXg6IDUw''@;'; put 'put ''O1xuICBiYWNrZ3JvdW5kLWltYWdlOiByYWRpYWwtZ3JhZGllbnQoIzAzNzhjZCwgIzAxMjAzNik7XG59XG5gfSwyOTIwOih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5uZWVkc1JldHJ5PXZvaWQgMCxYLm5l''@;'; put 'put ''ZWRzUmV0cnk9ST0+ISFJJiYoSS5pbmNsdWRlcygnImVycm9yQ29kZSI6NDAzJykmJkkuaW5jbHVkZXMoIl9jc3JmIikmJkkuaW5jbHVkZXMoIlgtQ1NSRi1UT0tFTiIpfHxJLmluY2x1ZGVzKCcic3RhdHVzIjo0MDMnKSYmSS5pbmNsdWRlcygnImVycm9yIjoiRm9yYmlkZGVuIicpfHxJLmlu''@;'; put 'put ''Y2x1ZGVzKCcic3RhdHVzIjo0NDknKSYmSS5pbmNsdWRlcygiQXV0aGVudGljYXRpb24gc3VjY2VzcywgcmV0cnkgb3JpZ2luYWwgcmVxdWVzdCIpKX0sMjQyMjoodWUsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFgu''@;'; put 'put ''cGFyc2VHZW5lcmF0ZWRDb2RlPXZvaWQgMCxYLnBhcnNlR2VuZXJhdGVkQ29kZT1JPT5JLnNwbGl0KCJcbiIpLmZpbHRlcih3PT53LnRyaW0oKS5zdGFydHNXaXRoKCJNUFJJTlQiKSkuam9pbigiXHJcbiIpfSwzMToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDUxMDgpO09iamVj''@;'; put 'put ''dC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLnBhcnNlU2FzVml5YUxvZz12b2lkIDAsWC5wYXJzZVNhc1ZpeWFMb2c9Zz0+e2xldCBCO3RyeXtCPWcuaXRlbXM/Zy5pdGVtcy5tYXAodz0+dy5saW5lKS5qb2luKCJcbiIpOkpTT04uc3RyaW5naWZ5KGcpfWNh''@;'; put 'put ''dGNoKHcpe0kuZXJyb3IoIkFuIGVycm9yIGhhcyBvY2N1cnJlZCB3aGlsZSBwYXJzaW5nIHRoZSBsb2cgcmVzcG9uc2UiLHcpLEI9Z31yZXR1cm4gQn19LDY1MTU6KHVlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxY''@;'; put 'put ''LnBhcnNlU291cmNlQ29kZT12b2lkIDAsWC5wYXJzZVNvdXJjZUNvZGU9ST0+SS5zcGxpdCgiXG4iKS5maWx0ZXIoQj0+Qi50cmltKCkuc3Vic3RyaW5nKDAsMTApLnRyaW1TdGFydCgpLm1hdGNoKC9eXGQvKSkuam9pbigiXHJcbiIpfSw2NDE2OmZ1bmN0aW9uKHVlLFgseSl7InVzZSBzdHJp''@;'; put 'put ''Y3QiO3ZhciBJPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihCLHcsUCxGKXtyZXR1cm4gbmV3KFB8fChQPVByb21pc2UpKShmdW5jdGlvbih6LE4pe2Z1bmN0aW9uIEwoVyl7dHJ5e1UoRi5uZXh0KFcpKX1jYXRjaChZKXtOKFkpfX1mdW5jdGlvbiBLKFcpe3RyeXtVKEYudGhyb3co''@;'; put 'put ''VykpfWNhdGNoKFkpe04oWSl9fWZ1bmN0aW9uIFUoVyl7Vy5kb25lP3ooVy52YWx1ZSk6ZnVuY3Rpb24gTyh6KXtyZXR1cm4geiBpbnN0YW5jZW9mIFA/ejpuZXcgUChmdW5jdGlvbihOKXtOKHopfSl9KFcudmFsdWUpLnRoZW4oTCxLKX1VKChGPUYuYXBwbHkoQix3fHxbXSkpLm5leHQoKSl9''@;'; put 'put ''KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFgucGFyc2VTYXNWaXlhRGVidWdSZXNwb25zZT12b2lkIDA7Y29uc3QgXz15KDU5MjgpO1gucGFyc2VTYXNWaXlhRGVidWdSZXNwb25zZT0oQix3LFApPT5JKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGZ1''@;'; put 'put ''bmN0aW9uKigpe2NvbnN0IEY9Qi5zcGxpdCgvPGlmcmFtZSBzdHlsZT0id2lkdGg6IDk5JTsgaGVpZ2h0OiA1MDBweCIgc3JjPSJ8PGlmcmFtZSBzdHlsZT0id2lkdGg6IDk5JTsgaGVpZ2h0OiA1MDBweDsgYmFja2dyb3VuZC1jb2xvcjpDYW52YXM7IiBzcmM9LylbMV0sTz1GP0Yuc3BsaXQo''@;'; put 'put ''LyI+PFwvaWZyYW1lPnw+PFwvaWZyYW1lPi8pWzBdOm51bGw7aWYoIU8pdGhyb3cgbmV3IEVycm9yKCJVbmFibGUgdG8gZmluZCB3ZWJvdXQgZmlsZSBVUkwuIik7cmV0dXJuIHcuZ2V0KFArTyx2b2lkIDAsInRleHQvcGxhaW4iKS50aGVuKHo9PigwLF8uZ2V0VmFsaWRKc29uKSh6LnJlc3Vs''@;'; put 'put ''dCkpfSl9LDI4MTM6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg1MTA4KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5wYXJzZVdlYm91dFJlc3BvbnNlPXZvaWQgMDtjb25zdCBfPXkoMTM5NSk7WC5wYXJzZVdlYm91dFJlc3BvbnNl''@;'; put 'put ''PShCLHcpPT57bGV0IFA9IiI7aWYoQi5pbmNsdWRlcygiPj53ZWJvdXRCRUdJTjw8IikpdHJ5e1A9Qi5zcGxpdCgiPj53ZWJvdXRCRUdJTjw8IilbMV0uc3BsaXQoIj4+d2Vib3V0RU5EPDwiKVswXX1jYXRjaChGKXtpZih3KXRocm93IG5ldyBfLldlYm91dFJlc3BvbnNlRXJyb3Iodyk7UD0i''@;'; put 'put ''IixJLmVycm9yKEYpfXJldHVybiBQfX0sMTE3MDoodWUsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguZXh0cmFjdFVzZXJMb25nTmFtZVNhczk9dm9pZCAwO2NvbnN0IHk9WyJMb2cgT2ZmIl07WC5leHRyYWN0VXNl''@;'; put 'put ''ckxvbmdOYW1lU2FzOT1fPT57Y29uc3QgQj1fPy5tYXRjaCgvInRpdGxlIjpccz8iLio/Ii8pO2xldCB3PUI/LlswXS5zcGxpdCgiOiIpWzFdLnRyaW0oKSxQPXc/LmluZGV4T2YoIiAiKTtyZXR1cm4gdz8oeS5tYXAoRj0+e2NvbnN0IE89dz8uaW5kZXhPZihGKXx8LTE7Tz4tMSYmKFA9TytG''@;'; put 'put ''Lmxlbmd0aCl9KSx3LnNsaWNlKFAsLTEpLnRyaW0oKSk6InVua25vd24ifX0sOTg5NjoodWUsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguc2VyaWFsaXplPXZvaWQgMCxYLnNlcmlhbGl6ZT1JPT57Y29uc3QgXz1b''@;'; put 'put ''XTtmb3IoY29uc3QgZyBpbiBJKWlmKEkuaGFzT3duUHJvcGVydHkoZykpaWYoSVtnXWluc3RhbmNlb2YgQXJyYXkpZm9yKGxldCBCPTAsdz1JW2ddLmxlbmd0aDtCPHc7QisrKV8ucHVzaChlbmNvZGVVUklDb21wb25lbnQoZykrIj0iK2VuY29kZVVSSUNvbXBvbmVudChJW2ddW0JdKSk7ZWxz''@;'; put 'put ''ZSBfLnB1c2goZW5jb2RlVVJJQ29tcG9uZW50KGcpKyI9IitlbmNvZGVVUklDb21wb25lbnQoSVtnXSkpO3JldHVybiBfLmpvaW4oIiYiKX19LDQ3OTk6KHVlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLnNwbGl0''@;'; put 'put ''Q2h1bmtzPXZvaWQgMCxYLnNwbGl0Q2h1bmtzPUk9Pntjb25zdCBnPU1hdGguY2VpbChJLmxlbmd0aC8xNmUzKSxCPW5ldyBBcnJheShnKTtmb3IobGV0IHc9MCxQPTA7dzxnOysrdyxQKz0xNmUzKUJbd109SS5zdWJzdHIoUCwxNmUzKTtyZXR1cm4gQn19LDQ1MTY6KHVlLFgpPT57InVzZSBz''@;'; put 'put ''dHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLnZhbGlkYXRlSW5wdXQ9WC5JTlZBTElEX1RBQkxFX1NUUlVDVFVSRT1YLk1PUkVfSU5GTz12b2lkIDAsWC5NT1JFX0lORk89IkZvciBtb3JlIGluZm8gc2VlIGh0dHBzOi8vc2FzanMuaW8v''@;'; put 'put ''c2FzanMtYWRhcHRlci8jcmVxdWVzdC1yZXNwb25zZSIsWC5JTlZBTElEX1RBQkxFX1NUUlVDVFVSRT1gUGFyYW1ldGVyIGRhdGEgY29udGFpbnMgaW52YWxpZCB0YWJsZSBzdHJ1Y3R1cmUuICR7WC5NT1JFX0lORk99YCxYLnZhbGlkYXRlSW5wdXQ9Xz0+e2lmKG51bGw9PT1fKXJldHVybntz''@;'; put 'put ''dGF0dXM6ITAsbXNnOiIifTtpZigib2JqZWN0IiE9PUkoXykpcmV0dXJue3N0YXR1czohMSxtc2c6WC5JTlZBTElEX1RBQkxFX1NUUlVDVFVSRX07Y29uc3QgZz1CPT5CLm1hdGNoKC9eXCQuKi8pJiZPYmplY3Qua2V5cyhfKS5pbmNsdWRlcyhCLnJlcGxhY2UoL15cJC8sIiIpKTtmb3IoY29u''@;'; put 'put ''c3QgQiBpbiBfKXtpZighQi5tYXRjaCgvXlthLXpBLVpfXS8pJiYhZyhCKSlyZXR1cm57c3RhdHVzOiExLG1zZzoiRmlyc3QgbGV0dGVyIG9mIHRhYmxlIHNob3VsZCBiZSBhbHBoYWJldCBvciB1bmRlcnNjb3JlLiJ9O2lmKCFCLm1hdGNoKC9eW2EtekEtWl9dW2EtekEtWjAtOV9dKiQvKSYm''@;'; put 'put ''IWcoQikpcmV0dXJue3N0YXR1czohMSxtc2c6IlRhYmxlIG5hbWUgc2hvdWxkIGJlIGFscGhhbnVtZXJpYy4ifTtpZihCLmxlbmd0aD4zMilyZXR1cm57c3RhdHVzOiExLG1zZzoiTWF4aW11bSBsZW5ndGggZm9yIHRhYmxlIG5hbWUgY291bGQgYmUgMzIgY2hhcmFjdGVycy4ifTtpZigiQXJy''@;'; put 'put ''YXkiIT09SShfW0JdKSYmIWcoQikpcmV0dXJue3N0YXR1czohMSxtc2c6WC5JTlZBTElEX1RBQkxFX1NUUlVDVFVSRX07aWYoQXJyYXkuaXNBcnJheShfW0JdKSlmb3IoY29uc3QgdyBvZiBfW0JdKXtpZigib2JqZWN0IiE9PUkodykpcmV0dXJue3N0YXR1czohMSxtc2c6YFRhYmxlICR7Qn0g''@;'; put 'put ''Y29udGFpbnMgaW52YWxpZCBzdHJ1Y3R1cmUuICR7WC5NT1JFX0lORk99YH07e2NvbnN0IFA9T2JqZWN0LmtleXModyk7Zm9yKGNvbnN0IEYgb2YgUClpZih2b2lkIDA9PT13W0ZdKXJldHVybntzdGF0dXM6ITEsbXNnOmBBIHJvdyBpbiB0YWJsZSAke0J9IGNvbnRhaW5zIGludmFsaWQgdmFs''@;'; put 'put ''dWUuIENhbid0IGFzc2lnbiB1bmRlZmluZWQgdG8gJHtGfS5gfX19fXJldHVybntzdGF0dXM6ITAsbXNnOiIifX07Y29uc3QgST1fPT5BcnJheS5pc0FycmF5KF8pPyJBcnJheSI6dHlwZW9mIF99LDg5ODE6KHVlLFgpPT57InVzZSBzdHJpY3QiO1guZnJvbUNhbGxiYWNrPWZ1bmN0aW9uKHkp''@;'; put 'put ''e3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZnVuY3Rpb24oLi4uSSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIElbSS5sZW5ndGgtMV0pcmV0dXJuIG5ldyBQcm9taXNlKChfLGcpPT57SS5wdXNoKChCLHcpPT5udWxsIT1CP2coQik6Xyh3KSkseS5hcHBseSh0aGlzLEkpfSk7eS5hcHBs''@;'; put 'put ''eSh0aGlzLEkpfSwibmFtZSIse3ZhbHVlOnkubmFtZX0pfSxYLmZyb21Qcm9taXNlPWZ1bmN0aW9uKHkpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZnVuY3Rpb24oLi4uSSl7Y29uc3QgXz1JW0kubGVuZ3RoLTFdO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBfKXJldHVybiB5LmFwcGx5''@;'; put 'put ''KHRoaXMsSSk7SS5wb3AoKSx5LmFwcGx5KHRoaXMsSSkudGhlbihnPT5fKG51bGwsZyksXyl9LCJuYW1lIix7dmFsdWU6eS5uYW1lfSl9fSw0NTY0Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNzQxOCksXz15KDcxMjkpLGc9L15bXHgwMC1ceDIwXHUwMGEwXHUxNjgwXHUyMDAw''@;'; put 'put ''LVx1MjAwYVx1MjAyOFx1MjAyOVx1MjAyZlx1MjA1Zlx1MzAwMFx1ZmVmZl0rLyxCPS9bXG5cclx0XS9nLHc9L15bQS1aYS16XVtBLVphLXowLTkrLS5dKjpcL1wvLyxQPS86XGQrJC8sRj0vXihbYS16XVthLXowLTkuKy1dKjopPyhcL1wvKT8oW1xcL10rKT8oW1xTXHNdKikvaSxPPS9eW2Et''@;'; put 'put ''ekEtWl06LztmdW5jdGlvbiB6KG5lKXtyZXR1cm4obmV8fCIiKS50b1N0cmluZygpLnJlcGxhY2UoZywiIil9dmFyIE49W1siIyIsImhhc2giXSxbIj8iLCJxdWVyeSJdLGZ1bmN0aW9uKGllLGxlKXtyZXR1cm4gVShsZS5wcm90b2NvbCk/aWUucmVwbGFjZSgvXFwvZywiLyIpOmllfSxbIi8i''@;'; put 'put ''LCJwYXRobmFtZSJdLFsiQCIsImF1dGgiLDFdLFtOYU4sImhvc3QiLHZvaWQgMCwxLDFdLFsvOihcZCopJC8sInBvcnQiLHZvaWQgMCwxXSxbTmFOLCJob3N0bmFtZSIsdm9pZCAwLDEsMV1dLEw9e2hhc2g6MSxxdWVyeToxfTtmdW5jdGlvbiBLKG5lKXt2YXIgaWU7aWU9dHlwZW9mIHdpbmRv''@;'; put 'put ''dzwidSI/d2luZG93OnR5cGVvZiB5Lmc8InUiP3kuZzp0eXBlb2Ygc2VsZjwidSI/c2VsZjp7fTt2YXIgVGUsbWU9e30sX2U9dHlwZW9mKG5lPW5lfHxpZS5sb2NhdGlvbnx8e30pO2lmKCJibG9iOiI9PT1uZS5wcm90b2NvbCltZT1uZXcgcSh1bmVzY2FwZShuZS5wYXRobmFtZSkse30pO2Vs''@;'; put 'put ''c2UgaWYoInN0cmluZyI9PT1fZSlmb3IoVGUgaW4gbWU9bmV3IHEobmUse30pLEwpZGVsZXRlIG1lW1RlXTtlbHNlIGlmKCJvYmplY3QiPT09X2Upe2ZvcihUZSBpbiBuZSlUZSBpbiBMfHwobWVbVGVdPW5lW1RlXSk7dm9pZCAwPT09bWUuc2xhc2hlcyYmKG1lLnNsYXNoZXM9dy50ZXN0KG5l''@;'; put 'put ''LmhyZWYpKX1yZXR1cm4gbWV9ZnVuY3Rpb24gVShuZSl7cmV0dXJuImZpbGU6Ij09PW5lfHwiZnRwOiI9PT1uZXx8Imh0dHA6Ij09PW5lfHwiaHR0cHM6Ij09PW5lfHwid3M6Ij09PW5lfHwid3NzOiI9PT1uZX1mdW5jdGlvbiBXKG5lLGllKXtuZT0obmU9eihuZSkpLnJlcGxhY2UoQiwiIiks''@;'; put 'put ''aWU9aWV8fHt9O3ZhciBqZSxsZT1GLmV4ZWMobmUpLG1lPWxlWzFdP2xlWzFdLnRvTG93ZXJDYXNlKCk6IiIsX2U9ISFsZVsyXSxUZT0hIWxlWzNdLFNlPTA7cmV0dXJuIF9lP1RlPyhqZT1sZVsyXStsZVszXStsZVs0XSxTZT1sZVsyXS5sZW5ndGgrbGVbM10ubGVuZ3RoKTooamU9bGVbMl0r''@;'; put 'put ''bGVbNF0sU2U9bGVbMl0ubGVuZ3RoKTpUZT8oamU9bGVbM10rbGVbNF0sU2U9bGVbM10ubGVuZ3RoKTpqZT1sZVs0XSwiZmlsZToiPT09bWU/U2U+PTImJihqZT1qZS5zbGljZSgyKSk6VShtZSk/amU9bGVbNF06bWU/X2UmJihqZT1qZS5zbGljZSgyKSk6U2U+PTImJlUoaWUucHJvdG9jb2wp''@;'; put 'put ''JiYoamU9bGVbNF0pLHtwcm90b2NvbDptZSxzbGFzaGVzOl9lfHxVKG1lKSxzbGFzaGVzQ291bnQ6U2UscmVzdDpqZX19ZnVuY3Rpb24gcShuZSxpZSxsZSl7aWYobmU9KG5lPXoobmUpKS5yZXBsYWNlKEIsIiIpLCEodGhpcyBpbnN0YW5jZW9mIHEpKXJldHVybiBuZXcgcShuZSxpZSxsZSk7''@;'; put 'put ''dmFyIG1lLF9lLFRlLFNlLGplLFYscD1OLnNsaWNlKCksYj10eXBlb2YgaWUseD10aGlzLEM9MDtmb3IoIm9iamVjdCIhPT1iJiYic3RyaW5nIiE9PWImJihsZT1pZSxpZT1udWxsKSxsZSYmImZ1bmN0aW9uIiE9dHlwZW9mIGxlJiYobGU9Xy5wYXJzZSksbWU9IShfZT1XKG5lfHwiIixpZT1L''@;'; put 'put ''KGllKSkpLnByb3RvY29sJiYhX2Uuc2xhc2hlcyx4LnNsYXNoZXM9X2Uuc2xhc2hlc3x8bWUmJmllLnNsYXNoZXMseC5wcm90b2NvbD1fZS5wcm90b2NvbHx8aWUucHJvdG9jb2x8fCIiLG5lPV9lLnJlc3QsKCJmaWxlOiI9PT1fZS5wcm90b2NvbCYmKDIhPT1fZS5zbGFzaGVzQ291bnR8fE8u''@;'; put 'put ''dGVzdChuZSkpfHwhX2Uuc2xhc2hlcyYmKF9lLnByb3RvY29sfHxfZS5zbGFzaGVzQ291bnQ8Mnx8IVUoeC5wcm90b2NvbCkpKSYmKHBbM109Wy8oLiopLywicGF0aG5hbWUiXSk7QzxwLmxlbmd0aDtDKyspImZ1bmN0aW9uIiE9dHlwZW9mKFNlPXBbQ10pPyhWPVNlWzFdLChUZT1TZVswXSkh''@;'; put 'put ''PVRlP3hbVl09bmU6InN0cmluZyI9PXR5cGVvZiBUZT9+KGplPSJAIj09PVRlP25lLmxhc3RJbmRleE9mKFRlKTpuZS5pbmRleE9mKFRlKSkmJigibnVtYmVyIj09dHlwZW9mIFNlWzJdPyh4W1ZdPW5lLnNsaWNlKDAsamUpLG5lPW5lLnNsaWNlKGplK1NlWzJdKSk6KHhbVl09bmUuc2xpY2Uo''@;'; put 'put ''amUpLG5lPW5lLnNsaWNlKDAsamUpKSk6KGplPVRlLmV4ZWMobmUpKSYmKHhbVl09amVbMV0sbmU9bmUuc2xpY2UoMCxqZS5pbmRleCkpLHhbVl09eFtWXXx8bWUmJlNlWzNdJiZpZVtWXXx8IiIsU2VbNF0mJih4W1ZdPXhbVl0udG9Mb3dlckNhc2UoKSkpOm5lPVNlKG5lLHgpO2xlJiYoeC5x''@;'; put 'put ''dWVyeT1sZSh4LnF1ZXJ5KSksbWUmJmllLnNsYXNoZXMmJiIvIiE9PXgucGF0aG5hbWUuY2hhckF0KDApJiYoIiIhPT14LnBhdGhuYW1lfHwiIiE9PWllLnBhdGhuYW1lKSYmKHgucGF0aG5hbWU9ZnVuY3Rpb24gWShuZSxpZSl7aWYoIiI9PT1uZSlyZXR1cm4gaWU7Zm9yKHZhciBsZT0oaWV8''@;'; put 'put ''fCIvIikuc3BsaXQoIi8iKS5zbGljZSgwLC0xKS5jb25jYXQobmUuc3BsaXQoIi8iKSksbWU9bGUubGVuZ3RoLF9lPWxlW21lLTFdLFRlPSExLFNlPTA7bWUtLTspIi4iPT09bGVbbWVdP2xlLnNwbGljZShtZSwxKToiLi4iPT09bGVbbWVdPyhsZS5zcGxpY2UobWUsMSksU2UrKyk6U2UmJigw''@;'; put 'put ''PT09bWUmJihUZT0hMCksbGUuc3BsaWNlKG1lLDEpLFNlLS0pO3JldHVybiBUZSYmbGUudW5zaGlmdCgiIiksKCIuIj09PV9lfHwiLi4iPT09X2UpJiZsZS5wdXNoKCIiKSxsZS5qb2luKCIvIil9KHgucGF0aG5hbWUsaWUucGF0aG5hbWUpKSwiLyIhPT14LnBhdGhuYW1lLmNoYXJBdCgwKSYm''@;'; put 'put ''VSh4LnByb3RvY29sKSYmKHgucGF0aG5hbWU9Ii8iK3gucGF0aG5hbWUpLEkoeC5wb3J0LHgucHJvdG9jb2wpfHwoeC5ob3N0PXguaG9zdG5hbWUseC5wb3J0PSIiKSx4LnVzZXJuYW1lPXgucGFzc3dvcmQ9IiIseC5hdXRoJiYofihqZT14LmF1dGguaW5kZXhPZigiOiIpKT8oeC51c2VybmFt''@;'; put 'put ''ZT14LmF1dGguc2xpY2UoMCxqZSkseC51c2VybmFtZT1lbmNvZGVVUklDb21wb25lbnQoZGVjb2RlVVJJQ29tcG9uZW50KHgudXNlcm5hbWUpKSx4LnBhc3N3b3JkPXguYXV0aC5zbGljZShqZSsxKSx4LnBhc3N3b3JkPWVuY29kZVVSSUNvbXBvbmVudChkZWNvZGVVUklDb21wb25lbnQoeC5w''@;'; put 'put ''YXNzd29yZCkpKTp4LnVzZXJuYW1lPWVuY29kZVVSSUNvbXBvbmVudChkZWNvZGVVUklDb21wb25lbnQoeC5hdXRoKSkseC5hdXRoPXgucGFzc3dvcmQ/eC51c2VybmFtZSsiOiIreC5wYXNzd29yZDp4LnVzZXJuYW1lKSx4Lm9yaWdpbj0iZmlsZToiIT09eC5wcm90b2NvbCYmVSh4LnByb3Rv''@;'; put 'put ''Y29sKSYmeC5ob3N0P3gucHJvdG9jb2wrIi8vIit4Lmhvc3Q6Im51bGwiLHguaHJlZj14LnRvU3RyaW5nKCl9cS5wcm90b3R5cGU9e3NldDpmdW5jdGlvbiBlZShuZSxpZSxsZSl7dmFyIG1lPXRoaXM7c3dpdGNoKG5lKXtjYXNlInF1ZXJ5Ijoic3RyaW5nIj09dHlwZW9mIGllJiZpZS5sZW5n''@;'; put 'put ''dGgmJihpZT0obGV8fF8ucGFyc2UpKGllKSksbWVbbmVdPWllO2JyZWFrO2Nhc2UicG9ydCI6bWVbbmVdPWllLEkoaWUsbWUucHJvdG9jb2wpP2llJiYobWUuaG9zdD1tZS5ob3N0bmFtZSsiOiIraWUpOihtZS5ob3N0PW1lLmhvc3RuYW1lLG1lW25lXT0iIik7YnJlYWs7Y2FzZSJob3N0bmFt''@;'; put 'put ''ZSI6bWVbbmVdPWllLG1lLnBvcnQmJihpZSs9IjoiK21lLnBvcnQpLG1lLmhvc3Q9aWU7YnJlYWs7Y2FzZSJob3N0IjptZVtuZV09aWUsUC50ZXN0KGllKT8oaWU9aWUuc3BsaXQoIjoiKSxtZS5wb3J0PWllLnBvcCgpLG1lLmhvc3RuYW1lPWllLmpvaW4oIjoiKSk6KG1lLmhvc3RuYW1lPWll''@;'; put 'put ''LG1lLnBvcnQ9IiIpO2JyZWFrO2Nhc2UicHJvdG9jb2wiOm1lLnByb3RvY29sPWllLnRvTG93ZXJDYXNlKCksbWUuc2xhc2hlcz0hbGU7YnJlYWs7Y2FzZSJwYXRobmFtZSI6Y2FzZSJoYXNoIjppZihpZSl7dmFyIF9lPSJwYXRobmFtZSI9PT1uZT8iLyI6IiMiO21lW25lXT1pZS5jaGFyQXQo''@;'; put 'put ''MCkhPT1fZT9fZStpZTppZX1lbHNlIG1lW25lXT1pZTticmVhaztjYXNlInVzZXJuYW1lIjpjYXNlInBhc3N3b3JkIjptZVtuZV09ZW5jb2RlVVJJQ29tcG9uZW50KGllKTticmVhaztjYXNlImF1dGgiOnZhciBUZT1pZS5pbmRleE9mKCI6Iik7flRlPyhtZS51c2VybmFtZT1pZS5zbGljZSgw''@;'; put 'put ''LFRlKSxtZS51c2VybmFtZT1lbmNvZGVVUklDb21wb25lbnQoZGVjb2RlVVJJQ29tcG9uZW50KG1lLnVzZXJuYW1lKSksbWUucGFzc3dvcmQ9aWUuc2xpY2UoVGUrMSksbWUucGFzc3dvcmQ9ZW5jb2RlVVJJQ29tcG9uZW50KGRlY29kZVVSSUNvbXBvbmVudChtZS5wYXNzd29yZCkpKTptZS51''@;'; put 'put ''c2VybmFtZT1lbmNvZGVVUklDb21wb25lbnQoZGVjb2RlVVJJQ29tcG9uZW50KGllKSl9Zm9yKHZhciBTZT0wO1NlPE4ubGVuZ3RoO1NlKyspe3ZhciBqZT1OW1NlXTtqZVs0XSYmKG1lW2plWzFdXT1tZVtqZVsxXV0udG9Mb3dlckNhc2UoKSl9cmV0dXJuIG1lLmF1dGg9bWUucGFzc3dvcmQ/''@;'; put 'put ''bWUudXNlcm5hbWUrIjoiK21lLnBhc3N3b3JkOm1lLnVzZXJuYW1lLG1lLm9yaWdpbj0iZmlsZToiIT09bWUucHJvdG9jb2wmJlUobWUucHJvdG9jb2wpJiZtZS5ob3N0P21lLnByb3RvY29sKyIvLyIrbWUuaG9zdDoibnVsbCIsbWUuaHJlZj1tZS50b1N0cmluZygpLG1lfSx0b1N0cmluZzpm''@;'; put 'put ''dW5jdGlvbiBKKG5lKXsoIW5lfHwiZnVuY3Rpb24iIT10eXBlb2YgbmUpJiYobmU9Xy5zdHJpbmdpZnkpO3ZhciBpZSxsZT10aGlzLG1lPWxlLmhvc3QsX2U9bGUucHJvdG9jb2w7X2UmJiI6IiE9PV9lLmNoYXJBdChfZS5sZW5ndGgtMSkmJihfZSs9IjoiKTt2YXIgVGU9X2UrKGxlLnByb3Rv''@;'; put 'put ''Y29sJiZsZS5zbGFzaGVzfHxVKGxlLnByb3RvY29sKT8iLy8iOiIiKTtyZXR1cm4gbGUudXNlcm5hbWU/KFRlKz1sZS51c2VybmFtZSxsZS5wYXNzd29yZCYmKFRlKz0iOiIrbGUucGFzc3dvcmQpLFRlKz0iQCIpOmxlLnBhc3N3b3JkPyhUZSs9IjoiK2xlLnBhc3N3b3JkLFRlKz0iQCIpOiJm''@;'; put 'put ''aWxlOiIhPT1sZS5wcm90b2NvbCYmVShsZS5wcm90b2NvbCkmJiFtZSYmIi8iIT09bGUucGF0aG5hbWUmJihUZSs9IkAiKSwoIjoiPT09bWVbbWUubGVuZ3RoLTFdfHxQLnRlc3QobGUuaG9zdG5hbWUpJiYhbGUucG9ydCkmJihtZSs9IjoiKSxUZSs9bWUrbGUucGF0aG5hbWUsKGllPSJvYmpl''@;'; put 'put ''Y3QiPT10eXBlb2YgbGUucXVlcnk/bmUobGUucXVlcnkpOmxlLnF1ZXJ5KSYmKFRlKz0iPyIhPT1pZS5jaGFyQXQoMCk/Ij8iK2llOmllKSxsZS5oYXNoJiYoVGUrPWxlLmhhc2gpLFRlfX0scS5leHRyYWN0UHJvdG9jb2w9VyxxLmxvY2F0aW9uPUsscS50cmltTGVmdD16LHEucXM9Xyx1ZS5l''@;'; put 'put ''eHBvcnRzPXF9LDQ5Mjc6KHVlLFgseSk9Pnt2YXIgST15KDUxMDgpO2Z1bmN0aW9uIGcoQil7dHJ5e2lmKCF5LmcubG9jYWxTdG9yYWdlKXJldHVybiExfWNhdGNoe3JldHVybiExfXZhciB3PXkuZy5sb2NhbFN0b3JhZ2VbQl07cmV0dXJuIG51bGwhPXcmJiJ0cnVlIj09PVN0cmluZyh3KS50''@;'; put 'put ''b0xvd2VyQ2FzZSgpfXVlLmV4cG9ydHM9ZnVuY3Rpb24gXyhCLHcpe2lmKGcoIm5vRGVwcmVjYXRpb24iKSlyZXR1cm4gQjt2YXIgUD0hMTtyZXR1cm4gZnVuY3Rpb24gRigpe2lmKCFQKXtpZihnKCJ0aHJvd0RlcHJlY2F0aW9uIikpdGhyb3cgbmV3IEVycm9yKHcpO2coInRyYWNlRGVwcmVj''@;'; put 'put ''YXRpb24iKT9JLnRyYWNlKHcpOkkud2Fybih3KSxQPSEwfXJldHVybiBCLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19fSwzODQ6dWU9Pnt1ZS5leHBvcnRzPWZ1bmN0aW9uKHkpe3JldHVybiB5JiYib2JqZWN0Ij09dHlwZW9mIHkmJiJmdW5jdGlvbiI9PXR5cGVvZiB5LmNvcHkmJiJmdW5jdGlv''@;'; put 'put ''biI9PXR5cGVvZiB5LmZpbGwmJiJmdW5jdGlvbiI9PXR5cGVvZiB5LnJlYWRVSW50OH19LDU5NTU6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgyNTg0KSxfPXkoODY2MiksZz15KDY0MzApLEI9eSg1NjkyKTtmdW5jdGlvbiB3KEFlKXtyZXR1cm4gQWUuY2FsbC5iaW5kKEFlKX12''@;'; put 'put ''YXIgUD10eXBlb2YgQmlnSW50PCJ1IixGPXR5cGVvZiBTeW1ib2w8InUiLE89dyhPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nKSx6PXcoTnVtYmVyLnByb3RvdHlwZS52YWx1ZU9mKSxOPXcoU3RyaW5nLnByb3RvdHlwZS52YWx1ZU9mKSxMPXcoQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZik7''@;'; put 'put ''aWYoUCl2YXIgSz13KEJpZ0ludC5wcm90b3R5cGUudmFsdWVPZik7aWYoRil2YXIgVT13KFN5bWJvbC5wcm90b3R5cGUudmFsdWVPZik7ZnVuY3Rpb24gVyhBZSxfdCl7aWYoIm9iamVjdCIhPXR5cGVvZiBBZSlyZXR1cm4hMTt0cnl7cmV0dXJuIF90KEFlKSwhMH1jYXRjaHtyZXR1cm4hMX19''@;'; put 'put ''ZnVuY3Rpb24gcChBZSl7cmV0dXJuIltvYmplY3QgTWFwXSI9PT1PKEFlKX1mdW5jdGlvbiB4KEFlKXtyZXR1cm4iW29iamVjdCBTZXRdIj09PU8oQWUpfWZ1bmN0aW9uIFQoQWUpe3JldHVybiJbb2JqZWN0IFdlYWtNYXBdIj09PU8oQWUpfWZ1bmN0aW9uIGooQWUpe3JldHVybiJbb2JqZWN0''@;'; put 'put ''IFdlYWtTZXRdIj09PU8oQWUpfWZ1bmN0aW9uIG0oQWUpe3JldHVybiJbb2JqZWN0IEFycmF5QnVmZmVyXSI9PT1PKEFlKX1mdW5jdGlvbiBBKEFlKXtyZXR1cm4hKHR5cGVvZiBBcnJheUJ1ZmZlcj4idSIpJiYobS53b3JraW5nP20oQWUpOkFlIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpfWZ1''@;'; put 'put ''bmN0aW9uIGFlKEFlKXtyZXR1cm4iW29iamVjdCBEYXRhVmlld10iPT09TyhBZSl9ZnVuY3Rpb24gdGUoQWUpe3JldHVybiEodHlwZW9mIERhdGFWaWV3PiJ1IikmJihhZS53b3JraW5nP2FlKEFlKTpBZSBpbnN0YW5jZW9mIERhdGFWaWV3KX1YLmlzQXJndW1lbnRzT2JqZWN0PUksWC5pc0dl''@;'; put 'put ''bmVyYXRvckZ1bmN0aW9uPV8sWC5pc1R5cGVkQXJyYXk9QixYLmlzUHJvbWlzZT1mdW5jdGlvbiBZKEFlKXtyZXR1cm4gdHlwZW9mIFByb21pc2U8InUiJiZBZSBpbnN0YW5jZW9mIFByb21pc2V8fG51bGwhPT1BZSYmIm9iamVjdCI9PXR5cGVvZiBBZSYmImZ1bmN0aW9uIj09dHlwZW9mIEFl''@;'; put 'put ''LnRoZW4mJiJmdW5jdGlvbiI9PXR5cGVvZiBBZS5jYXRjaH0sWC5pc0FycmF5QnVmZmVyVmlldz1mdW5jdGlvbiBxKEFlKXtyZXR1cm4gdHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYmQXJyYXlCdWZmZXIuaXNWaWV3P0FycmF5QnVmZmVyLmlzVmlldyhBZSk6QihBZSl8fHRlKEFlKX0sWC5pc1Vp''@;'; put 'put ''bnQ4QXJyYXk9ZnVuY3Rpb24gZWUoQWUpe3JldHVybiJVaW50OEFycmF5Ij09PWcoQWUpfSxYLmlzVWludDhDbGFtcGVkQXJyYXk9ZnVuY3Rpb24gSihBZSl7cmV0dXJuIlVpbnQ4Q2xhbXBlZEFycmF5Ij09PWcoQWUpfSxYLmlzVWludDE2QXJyYXk9ZnVuY3Rpb24gbmUoQWUpe3JldHVybiJV''@;'; put 'put ''aW50MTZBcnJheSI9PT1nKEFlKX0sWC5pc1VpbnQzMkFycmF5PWZ1bmN0aW9uIGllKEFlKXtyZXR1cm4iVWludDMyQXJyYXkiPT09ZyhBZSl9LFguaXNJbnQ4QXJyYXk9ZnVuY3Rpb24gbGUoQWUpe3JldHVybiJJbnQ4QXJyYXkiPT09ZyhBZSl9LFguaXNJbnQxNkFycmF5PWZ1bmN0aW9uIG1l''@;'; put 'put ''KEFlKXtyZXR1cm4iSW50MTZBcnJheSI9PT1nKEFlKX0sWC5pc0ludDMyQXJyYXk9ZnVuY3Rpb24gX2UoQWUpe3JldHVybiJJbnQzMkFycmF5Ij09PWcoQWUpfSxYLmlzRmxvYXQzMkFycmF5PWZ1bmN0aW9uIFRlKEFlKXtyZXR1cm4iRmxvYXQzMkFycmF5Ij09PWcoQWUpfSxYLmlzRmxvYXQ2''@;'; put 'put ''NEFycmF5PWZ1bmN0aW9uIFNlKEFlKXtyZXR1cm4iRmxvYXQ2NEFycmF5Ij09PWcoQWUpfSxYLmlzQmlnSW50NjRBcnJheT1mdW5jdGlvbiBqZShBZSl7cmV0dXJuIkJpZ0ludDY0QXJyYXkiPT09ZyhBZSl9LFguaXNCaWdVaW50NjRBcnJheT1mdW5jdGlvbiBWKEFlKXtyZXR1cm4iQmlnVWlu''@;'; put 'put ''dDY0QXJyYXkiPT09ZyhBZSl9LHAud29ya2luZz10eXBlb2YgTWFwPCJ1IiYmcChuZXcgTWFwKSxYLmlzTWFwPWZ1bmN0aW9uIGIoQWUpe3JldHVybiEodHlwZW9mIE1hcD4idSIpJiYocC53b3JraW5nP3AoQWUpOkFlIGluc3RhbmNlb2YgTWFwKX0seC53b3JraW5nPXR5cGVvZiBTZXQ8InUi''@;'; put 'put ''JiZ4KG5ldyBTZXQpLFguaXNTZXQ9ZnVuY3Rpb24gQyhBZSl7cmV0dXJuISh0eXBlb2YgU2V0PiJ1IikmJih4Lndvcmtpbmc/eChBZSk6QWUgaW5zdGFuY2VvZiBTZXQpfSxULndvcmtpbmc9dHlwZW9mIFdlYWtNYXA8InUiJiZUKG5ldyBXZWFrTWFwKSxYLmlzV2Vha01hcD1mdW5jdGlvbiBI''@;'; put 'put ''KEFlKXtyZXR1cm4hKHR5cGVvZiBXZWFrTWFwPiJ1IikmJihULndvcmtpbmc/VChBZSk6QWUgaW5zdGFuY2VvZiBXZWFrTWFwKX0sai53b3JraW5nPXR5cGVvZiBXZWFrU2V0PCJ1IiYmaihuZXcgV2Vha1NldCksWC5pc1dlYWtTZXQ9ZnVuY3Rpb24gRShBZSl7cmV0dXJuIGooQWUpfSxtLndv''@;'; put 'put ''cmtpbmc9dHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYmbShuZXcgQXJyYXlCdWZmZXIpLFguaXNBcnJheUJ1ZmZlcj1BLGFlLndvcmtpbmc9dHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYmdHlwZW9mIERhdGFWaWV3PCJ1IiYmYWUobmV3IERhdGFWaWV3KG5ldyBBcnJheUJ1ZmZlcigxKSwwLDEpKSxY''@;'; put 'put ''LmlzRGF0YVZpZXc9dGU7dmFyIHNlPXR5cGVvZiBTaGFyZWRBcnJheUJ1ZmZlcjwidSI/U2hhcmVkQXJyYXlCdWZmZXI6dm9pZCAwO2Z1bmN0aW9uIHdlKEFlKXtyZXR1cm4iW29iamVjdCBTaGFyZWRBcnJheUJ1ZmZlcl0iPT09TyhBZSl9ZnVuY3Rpb24gVWUoQWUpe3JldHVybiEodHlwZW9m''@;'; put 'put ''IHNlPiJ1IikmJih0eXBlb2Ygd2Uud29ya2luZz4idSImJih3ZS53b3JraW5nPXdlKG5ldyBzZSkpLHdlLndvcmtpbmc/d2UoQWUpOkFlIGluc3RhbmNlb2Ygc2UpfWZ1bmN0aW9uIHplKEFlKXtyZXR1cm4gVyhBZSx6KX1mdW5jdGlvbiBEZShBZSl7cmV0dXJuIFcoQWUsTil9ZnVuY3Rpb24g''@;'; put 'put ''RmUoQWUpe3JldHVybiBXKEFlLEwpfWZ1bmN0aW9uIE9lKEFlKXtyZXR1cm4gUCYmVyhBZSxLKX1mdW5jdGlvbiBJZShBZSl7cmV0dXJuIEYmJlcoQWUsVSl9WC5pc1NoYXJlZEFycmF5QnVmZmVyPVVlLFguaXNBc3luY0Z1bmN0aW9uPWZ1bmN0aW9uIEplKEFlKXtyZXR1cm4iW29iamVjdCBB''@;'; put 'put ''c3luY0Z1bmN0aW9uXSI9PT1PKEFlKX0sWC5pc01hcEl0ZXJhdG9yPWZ1bmN0aW9uIG90KEFlKXtyZXR1cm4iW29iamVjdCBNYXAgSXRlcmF0b3JdIj09PU8oQWUpfSxYLmlzU2V0SXRlcmF0b3I9ZnVuY3Rpb24geGUoQWUpe3JldHVybiJbb2JqZWN0IFNldCBJdGVyYXRvcl0iPT09TyhBZSl9''@;'; put 'put ''LFguaXNHZW5lcmF0b3JPYmplY3Q9ZnVuY3Rpb24gdmUoQWUpe3JldHVybiJbb2JqZWN0IEdlbmVyYXRvcl0iPT09TyhBZSl9LFguaXNXZWJBc3NlbWJseUNvbXBpbGVkTW9kdWxlPWZ1bmN0aW9uIFhlKEFlKXtyZXR1cm4iW29iamVjdCBXZWJBc3NlbWJseS5Nb2R1bGVdIj09PU8oQWUpfSxY''@;'; put 'put ''LmlzTnVtYmVyT2JqZWN0PXplLFguaXNTdHJpbmdPYmplY3Q9RGUsWC5pc0Jvb2xlYW5PYmplY3Q9RmUsWC5pc0JpZ0ludE9iamVjdD1PZSxYLmlzU3ltYm9sT2JqZWN0PUllLFguaXNCb3hlZFByaW1pdGl2ZT1mdW5jdGlvbiBWZShBZSl7cmV0dXJuIHplKEFlKXx8RGUoQWUpfHxGZShBZSl8''@;'; put 'put ''fE9lKEFlKXx8SWUoQWUpfSxYLmlzQW55QXJyYXlCdWZmZXI9ZnVuY3Rpb24ga2UoQWUpe3JldHVybiB0eXBlb2YgVWludDhBcnJheTwidSImJihBKEFlKXx8VWUoQWUpKX0sWyJpc1Byb3h5IiwiaXNFeHRlcm5hbCIsImlzTW9kdWxlTmFtZXNwYWNlT2JqZWN0Il0uZm9yRWFjaChmdW5jdGlv''@;'; put 'put ''bihBZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsQWUse2VudW1lcmFibGU6ITEsdmFsdWU6ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoQWUrIiBpcyBub3Qgc3VwcG9ydGVkIGluIHVzZXJsYW5kIil9fSl9KX0sOTUzOToodWUsWCx5KT0+e3ZhciBJPXkoNDE1NSksXz15KDUxMDgpLGc9''@;'; put 'put ''T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnN8fGZ1bmN0aW9uKHdlKXtmb3IodmFyIFVlPU9iamVjdC5rZXlzKHdlKSxKZT17fSxvdD0wO290PFVlLmxlbmd0aDtvdCsrKUplW1VlW290XV09T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih3ZSxVZVtvdF0pO3JldHVybiBK''@;'; put 'put ''ZX0sQj0vJVtzZGolXS9nO1guZm9ybWF0PWZ1bmN0aW9uKHNlKXtpZighX2Uoc2UpKXtmb3IodmFyIHdlPVtdLFVlPTA7VWU8YXJndW1lbnRzLmxlbmd0aDtVZSsrKXdlLnB1c2goTyhhcmd1bWVudHNbVWVdKSk7cmV0dXJuIHdlLmpvaW4oIiAiKX1VZT0xO2Zvcih2YXIgSmU9YXJndW1lbnRz''@;'; put 'put ''LG90PUplLmxlbmd0aCx4ZT1TdHJpbmcoc2UpLnJlcGxhY2UoQixmdW5jdGlvbihYZSl7aWYoIiUlIj09PVhlKXJldHVybiIlIjtpZihVZT49b3QpcmV0dXJuIFhlO3N3aXRjaChYZSl7Y2FzZSIlcyI6cmV0dXJuIFN0cmluZyhKZVtVZSsrXSk7Y2FzZSIlZCI6cmV0dXJuIE51bWJlcihKZVtV''@;'; put 'put ''ZSsrXSk7Y2FzZSIlaiI6dHJ5e3JldHVybiBKU09OLnN0cmluZ2lmeShKZVtVZSsrXSl9Y2F0Y2h7cmV0dXJuIltDaXJjdWxhcl0ifWRlZmF1bHQ6cmV0dXJuIFhlfX0pLHZlPUplW1VlXTtVZTxvdDt2ZT1KZVsrK1VlXSlpZSh2ZSl8fCFWKHZlKT94ZSs9IiAiK3ZlOnhlKz0iICIrTyh2ZSk7''@;'; put 'put ''cmV0dXJuIHhlfSxYLmRlcHJlY2F0ZT1mdW5jdGlvbihzZSx3ZSl7aWYodHlwZW9mIEk8InUiJiYhMD09PUkubm9EZXByZWNhdGlvbilyZXR1cm4gc2U7aWYodHlwZW9mIEk+InUiKXJldHVybiBmdW5jdGlvbigpe3JldHVybiBYLmRlcHJlY2F0ZShzZSx3ZSkuYXBwbHkodGhpcyxhcmd1bWVu''@;'; put 'put ''dHMpfTt2YXIgVWU9ITE7cmV0dXJuIGZ1bmN0aW9uIEplKCl7aWYoIVVlKXtpZihJLnRocm93RGVwcmVjYXRpb24pdGhyb3cgbmV3IEVycm9yKHdlKTtJLnRyYWNlRGVwcmVjYXRpb24/Xy50cmFjZSh3ZSk6Xy5lcnJvcih3ZSksVWU9ITB9cmV0dXJuIHNlLmFwcGx5KHRoaXMsYXJndW1lbnRz''@;'; put 'put ''KX19O3ZhciB3PXt9LFA9L14kLztpZihJLmVudi5OT0RFX0RFQlVHKXt2YXIgRj1JLmVudi5OT0RFX0RFQlVHO0Y9Ri5yZXBsYWNlKC9bfFxce30oKVtcXV4kKz8uXS9nLCJcXCQmIikucmVwbGFjZSgvXCovZywiLioiKS5yZXBsYWNlKC8sL2csIiR8XiIpLnRvVXBwZXJDYXNlKCksUD1uZXcg''@;'; put 'put ''UmVnRXhwKCJeIitGKyIkIiwiaSIpfWZ1bmN0aW9uIE8oc2Usd2Upe3ZhciBVZT17c2VlbjpbXSxzdHlsaXplOk59O3JldHVybiBhcmd1bWVudHMubGVuZ3RoPj0zJiYoVWUuZGVwdGg9YXJndW1lbnRzWzJdKSxhcmd1bWVudHMubGVuZ3RoPj00JiYoVWUuY29sb3JzPWFyZ3VtZW50c1szXSks''@;'; put 'put ''bmUod2UpP1VlLnNob3dIaWRkZW49d2U6d2UmJlguX2V4dGVuZChVZSx3ZSksU2UoVWUuc2hvd0hpZGRlbikmJihVZS5zaG93SGlkZGVuPSExKSxTZShVZS5kZXB0aCkmJihVZS5kZXB0aD0yKSxTZShVZS5jb2xvcnMpJiYoVWUuY29sb3JzPSExKSxTZShVZS5jdXN0b21JbnNwZWN0KSYmKFVl''@;'; put 'put ''LmN1c3RvbUluc3BlY3Q9ITApLFVlLmNvbG9ycyYmKFVlLnN0eWxpemU9eiksSyhVZSxzZSxVZS5kZXB0aCl9ZnVuY3Rpb24geihzZSx3ZSl7dmFyIFVlPU8uc3R5bGVzW3dlXTtyZXR1cm4gVWU/Ilx4MWJbIitPLmNvbG9yc1tVZV1bMF0rIm0iK3NlKyJceDFiWyIrTy5jb2xvcnNbVWVdWzFd''@;'; put 'put ''KyJtIjpzZX1mdW5jdGlvbiBOKHNlLHdlKXtyZXR1cm4gc2V9ZnVuY3Rpb24gSyhzZSx3ZSxVZSl7aWYoc2UuY3VzdG9tSW5zcGVjdCYmd2UmJngod2UuaW5zcGVjdCkmJndlLmluc3BlY3QhPT1YLmluc3BlY3QmJighd2UuY29uc3RydWN0b3J8fHdlLmNvbnN0cnVjdG9yLnByb3RvdHlwZSE9''@;'; put 'put ''PXdlKSl7dmFyIEplPXdlLmluc3BlY3QoVWUsc2UpO3JldHVybiBfZShKZSl8fChKZT1LKHNlLEplLFVlKSksSmV9dmFyIG90PWZ1bmN0aW9uIFUoc2Usd2Upe2lmKFNlKHdlKSlyZXR1cm4gc2Uuc3R5bGl6ZSgidW5kZWZpbmVkIiwidW5kZWZpbmVkIik7aWYoX2Uod2UpKXt2YXIgVWU9Iici''@;'; put 'put ''K0pTT04uc3RyaW5naWZ5KHdlKS5yZXBsYWNlKC9eInwiJC9nLCIiKS5yZXBsYWNlKC8nL2csIlxcJyIpLnJlcGxhY2UoL1xcIi9nLCciJykrIiciO3JldHVybiBzZS5zdHlsaXplKFVlLCJzdHJpbmciKX1yZXR1cm4gbWUod2UpP3NlLnN0eWxpemUoIiIrd2UsIm51bWJlciIpOm5lKHdlKT9z''@;'; put 'put ''ZS5zdHlsaXplKCIiK3dlLCJib29sZWFuIik6aWUod2UpP3NlLnN0eWxpemUoIm51bGwiLCJudWxsIik6dm9pZCAwfShzZSx3ZSk7aWYob3QpcmV0dXJuIG90O3ZhciB4ZT1PYmplY3Qua2V5cyh3ZSksdmU9ZnVuY3Rpb24gTChzZSl7dmFyIHdlPXt9O3JldHVybiBzZS5mb3JFYWNoKGZ1bmN0''@;'; put 'put ''aW9uKFVlLEplKXt3ZVtVZV09ITB9KSx3ZX0oeGUpO2lmKHNlLnNob3dIaWRkZW4mJih4ZT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh3ZSkpLGIod2UpJiYoeGUuaW5kZXhPZigibWVzc2FnZSIpPj0wfHx4ZS5pbmRleE9mKCJkZXNjcmlwdGlvbiIpPj0wKSlyZXR1cm4gVyh3ZSk7aWYo''@;'; put 'put ''MD09PXhlLmxlbmd0aCl7aWYoeCh3ZSkpcmV0dXJuIHNlLnN0eWxpemUoIltGdW5jdGlvbiIrKHdlLm5hbWU/IjogIit3ZS5uYW1lOiIiKSsiXSIsInNwZWNpYWwiKTtpZihqZSh3ZSkpcmV0dXJuIHNlLnN0eWxpemUoUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHdlKSwicmVnZXhw''@;'; put 'put ''Iik7aWYocCh3ZSkpcmV0dXJuIHNlLnN0eWxpemUoRGF0ZS5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh3ZSksImRhdGUiKTtpZihiKHdlKSlyZXR1cm4gVyh3ZSl9dmFyIEllLHplPSIiLERlPSExLEZlPVsieyIsIn0iXTtyZXR1cm4gSih3ZSkmJihEZT0hMCxGZT1bIlsiLCJdIl0pLHgod2Up''@;'; put 'put ''JiYoemU9IiBbRnVuY3Rpb24iKyh3ZS5uYW1lPyI6ICIrd2UubmFtZToiIikrIl0iKSxqZSh3ZSkmJih6ZT0iICIrUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHdlKSkscCh3ZSkmJih6ZT0iICIrRGF0ZS5wcm90b3R5cGUudG9VVENTdHJpbmcuY2FsbCh3ZSkpLGIod2UpJiYoemU9''@;'; put 'put ''IiAiK1cod2UpKSwwIT09eGUubGVuZ3RofHxEZSYmMCE9d2UubGVuZ3RoP1VlPDA/amUod2UpP3NlLnN0eWxpemUoUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHdlKSwicmVnZXhwIik6c2Uuc3R5bGl6ZSgiW09iamVjdF0iLCJzcGVjaWFsIik6KHNlLnNlZW4ucHVzaCh3ZSksSWU9''@;'; put 'put ''RGU/ZnVuY3Rpb24gWShzZSx3ZSxVZSxKZSxvdCl7Zm9yKHZhciB4ZT1bXSx2ZT0wLFhlPXdlLmxlbmd0aDt2ZTxYZTsrK3ZlKW0od2UsU3RyaW5nKHZlKSk/eGUucHVzaChxKHNlLHdlLFVlLEplLFN0cmluZyh2ZSksITApKTp4ZS5wdXNoKCIiKTtyZXR1cm4gb3QuZm9yRWFjaChmdW5jdGlv''@;'; put 'put ''bih6ZSl7emUubWF0Y2goL15cZCskLyl8fHhlLnB1c2gocShzZSx3ZSxVZSxKZSx6ZSwhMCkpfSkseGV9KHNlLHdlLFVlLHZlLHhlKTp4ZS5tYXAoZnVuY3Rpb24oVmUpe3JldHVybiBxKHNlLHdlLFVlLHZlLFZlLERlKX0pLHNlLnNlZW4ucG9wKCksZnVuY3Rpb24gZWUoc2Usd2UsVWUpe3Zh''@;'; put 'put ''ciBvdD1zZS5yZWR1Y2UoZnVuY3Rpb24oeGUsdmUpe3JldHVybiB2ZS5pbmRleE9mKCJcbiIpLHhlK3ZlLnJlcGxhY2UoL1x1MDAxYlxbXGRcZD9tL2csIiIpLmxlbmd0aCsxfSwwKTtyZXR1cm4gb3Q+NjA/VWVbMF0rKCIiPT09d2U/IiI6d2UrIlxuICIpKyIgIitzZS5qb2luKCIsXG4gICIp''@;'; put 'put ''KyIgIitVZVsxXTpVZVswXSt3ZSsiICIrc2Uuam9pbigiLCAiKSsiICIrVWVbMV19KEllLHplLEZlKSk6RmVbMF0remUrRmVbMV19ZnVuY3Rpb24gVyhzZSl7cmV0dXJuIlsiK0Vycm9yLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHNlKSsiXSJ9ZnVuY3Rpb24gcShzZSx3ZSxVZSxKZSxvdCx4''@;'; put 'put ''ZSl7dmFyIHZlLFhlLHplO2lmKCh6ZT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHdlLG90KXx8e3ZhbHVlOndlW290XX0pLmdldD9YZT1zZS5zdHlsaXplKHplLnNldD8iW0dldHRlci9TZXR0ZXJdIjoiW0dldHRlcl0iLCJzcGVjaWFsIik6emUuc2V0JiYoWGU9c2Uuc3R5bGl6''@;'; put 'put ''ZSgiW1NldHRlcl0iLCJzcGVjaWFsIikpLG0oSmUsb3QpfHwodmU9IlsiK290KyJdIiksWGV8fChzZS5zZWVuLmluZGV4T2YoemUudmFsdWUpPDA/KFhlPWllKFVlKT9LKHNlLHplLnZhbHVlLG51bGwpOksoc2UsemUudmFsdWUsVWUtMSkpLmluZGV4T2YoIlxuIik+LTEmJihYZT14ZT9YZS5z''@;'; put 'put ''cGxpdCgiXG4iKS5tYXAoZnVuY3Rpb24oRGUpe3JldHVybiIgICIrRGV9KS5qb2luKCJcbiIpLnNsaWNlKDIpOiJcbiIrWGUuc3BsaXQoIlxuIikubWFwKGZ1bmN0aW9uKERlKXtyZXR1cm4iICAgIitEZX0pLmpvaW4oIlxuIikpOlhlPXNlLnN0eWxpemUoIltDaXJjdWxhcl0iLCJzcGVjaWFs''@;'; put 'put ''IikpLFNlKHZlKSl7aWYoeGUmJm90Lm1hdGNoKC9eXGQrJC8pKXJldHVybiBYZTsodmU9SlNPTi5zdHJpbmdpZnkoIiIrb3QpKS5tYXRjaCgvXiIoW2EtekEtWl9dW2EtekEtWl8wLTldKikiJC8pPyh2ZT12ZS5zbGljZSgxLC0xKSx2ZT1zZS5zdHlsaXplKHZlLCJuYW1lIikpOih2ZT12ZS5y''@;'; put 'put ''ZXBsYWNlKC8nL2csIlxcJyIpLnJlcGxhY2UoL1xcIi9nLCciJykucmVwbGFjZSgvKF4ifCIkKS9nLCInIiksdmU9c2Uuc3R5bGl6ZSh2ZSwic3RyaW5nIikpfXJldHVybiB2ZSsiOiAiK1hlfWZ1bmN0aW9uIEooc2Upe3JldHVybiBBcnJheS5pc0FycmF5KHNlKX1mdW5jdGlvbiBuZShzZSl7''@;'; put 'put ''cmV0dXJuImJvb2xlYW4iPT10eXBlb2Ygc2V9ZnVuY3Rpb24gaWUoc2Upe3JldHVybiBudWxsPT09c2V9ZnVuY3Rpb24gbWUoc2Upe3JldHVybiJudW1iZXIiPT10eXBlb2Ygc2V9ZnVuY3Rpb24gX2Uoc2Upe3JldHVybiJzdHJpbmciPT10eXBlb2Ygc2V9ZnVuY3Rpb24gU2Uoc2Upe3JldHVy''@;'; put 'put ''biB2b2lkIDA9PT1zZX1mdW5jdGlvbiBqZShzZSl7cmV0dXJuIFYoc2UpJiYiW29iamVjdCBSZWdFeHBdIj09PVQoc2UpfWZ1bmN0aW9uIFYoc2Upe3JldHVybiJvYmplY3QiPT10eXBlb2Ygc2UmJm51bGwhPT1zZX1mdW5jdGlvbiBwKHNlKXtyZXR1cm4gVihzZSkmJiJbb2JqZWN0IERhdGVd''@;'; put 'put ''Ij09PVQoc2UpfWZ1bmN0aW9uIGIoc2Upe3JldHVybiBWKHNlKSYmKCJbb2JqZWN0IEVycm9yXSI9PT1UKHNlKXx8c2UgaW5zdGFuY2VvZiBFcnJvcil9ZnVuY3Rpb24geChzZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHNlfWZ1bmN0aW9uIFQoc2Upe3JldHVybiBPYmplY3QucHJvdG90''@;'; put 'put ''eXBlLnRvU3RyaW5nLmNhbGwoc2UpfWZ1bmN0aW9uIEgoc2Upe3JldHVybiBzZTwxMD8iMCIrc2UudG9TdHJpbmcoMTApOnNlLnRvU3RyaW5nKDEwKX1YLmRlYnVnbG9nPWZ1bmN0aW9uKHNlKXtpZihzZT1zZS50b1VwcGVyQ2FzZSgpLCF3W3NlXSlpZihQLnRlc3Qoc2UpKXt2YXIgd2U9SS5w''@;'; put 'put ''aWQ7d1tzZV09ZnVuY3Rpb24oKXt2YXIgVWU9WC5mb3JtYXQuYXBwbHkoWCxhcmd1bWVudHMpO18uZXJyb3IoIiVzICVkOiAlcyIsc2Usd2UsVWUpfX1lbHNlIHdbc2VdPWZ1bmN0aW9uKCl7fTtyZXR1cm4gd1tzZV19LFguaW5zcGVjdD1PLE8uY29sb3JzPXtib2xkOlsxLDIyXSxpdGFsaWM6''@;'; put 'put ''WzMsMjNdLHVuZGVybGluZTpbNCwyNF0saW52ZXJzZTpbNywyN10sd2hpdGU6WzM3LDM5XSxncmV5Ols5MCwzOV0sYmxhY2s6WzMwLDM5XSxibHVlOlszNCwzOV0sY3lhbjpbMzYsMzldLGdyZWVuOlszMiwzOV0sbWFnZW50YTpbMzUsMzldLHJlZDpbMzEsMzldLHllbGxvdzpbMzMsMzldfSxP''@;'; put 'put ''LnN0eWxlcz17c3BlY2lhbDoiY3lhbiIsbnVtYmVyOiJ5ZWxsb3ciLGJvb2xlYW46InllbGxvdyIsdW5kZWZpbmVkOiJncmV5IixudWxsOiJib2xkIixzdHJpbmc6ImdyZWVuIixkYXRlOiJtYWdlbnRhIixyZWdleHA6InJlZCJ9LFgudHlwZXM9eSg1OTU1KSxYLmlzQXJyYXk9SixYLmlzQm9v''@;'; put 'put ''bGVhbj1uZSxYLmlzTnVsbD1pZSxYLmlzTnVsbE9yVW5kZWZpbmVkPWZ1bmN0aW9uIGxlKHNlKXtyZXR1cm4gbnVsbD09c2V9LFguaXNOdW1iZXI9bWUsWC5pc1N0cmluZz1fZSxYLmlzU3ltYm9sPWZ1bmN0aW9uIFRlKHNlKXtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIHNlfSxYLmlzVW5kZWZp''@;'; put 'put ''bmVkPVNlLFguaXNSZWdFeHA9amUsWC50eXBlcy5pc1JlZ0V4cD1qZSxYLmlzT2JqZWN0PVYsWC5pc0RhdGU9cCxYLnR5cGVzLmlzRGF0ZT1wLFguaXNFcnJvcj1iLFgudHlwZXMuaXNOYXRpdmVFcnJvcj1iLFguaXNGdW5jdGlvbj14LFguaXNQcmltaXRpdmU9ZnVuY3Rpb24gQyhzZSl7cmV0''@;'; put 'put ''dXJuIG51bGw9PT1zZXx8ImJvb2xlYW4iPT10eXBlb2Ygc2V8fCJudW1iZXIiPT10eXBlb2Ygc2V8fCJzdHJpbmciPT10eXBlb2Ygc2V8fCJzeW1ib2wiPT10eXBlb2Ygc2V8fHR5cGVvZiBzZT4idSJ9LFguaXNCdWZmZXI9eSgzODQpO3ZhciBqPVsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwi''@;'; put 'put ''TWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl07ZnVuY3Rpb24gbShzZSx3ZSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzZSx3ZSl9WC5sb2c9ZnVuY3Rpb24oKXtfLmxvZygiJXMgLSAlcyIsZnVuY3Rpb24gRSgpe3Zh''@;'; put 'put ''ciBzZT1uZXcgRGF0ZSx3ZT1bSChzZS5nZXRIb3VycygpKSxIKHNlLmdldE1pbnV0ZXMoKSksSChzZS5nZXRTZWNvbmRzKCkpXS5qb2luKCI6Iik7cmV0dXJuW3NlLmdldERhdGUoKSxqW3NlLmdldE1vbnRoKCldLHdlXS5qb2luKCIgIil9KCksWC5mb3JtYXQuYXBwbHkoWCxhcmd1bWVudHMp''@;'; put 'put ''KX0sWC5pbmhlcml0cz15KDU3MTcpLFguX2V4dGVuZD1mdW5jdGlvbihzZSx3ZSl7aWYoIXdlfHwhVih3ZSkpcmV0dXJuIHNlO2Zvcih2YXIgVWU9T2JqZWN0LmtleXMod2UpLEplPVVlLmxlbmd0aDtKZS0tOylzZVtVZVtKZV1dPXdlW1VlW0plXV07cmV0dXJuIHNlfTt2YXIgQT10eXBlb2Yg''@;'; put 'put ''U3ltYm9sPCJ1Ij9TeW1ib2woInV0aWwucHJvbWlzaWZ5LmN1c3RvbSIpOnZvaWQgMDtmdW5jdGlvbiBhZShzZSx3ZSl7aWYoIXNlKXt2YXIgVWU9bmV3IEVycm9yKCJQcm9taXNlIHdhcyByZWplY3RlZCB3aXRoIGEgZmFsc3kgdmFsdWUiKTtVZS5yZWFzb249c2Usc2U9VWV9cmV0dXJuIHdl''@;'; put 'put ''KHNlKX1YLnByb21pc2lmeT1mdW5jdGlvbih3ZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHdlKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAib3JpZ2luYWwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBGdW5jdGlvbicpO2lmKEEmJndlW0FdKXt2YXIgVWU7aWYoImZ1bmN0aW9uIiE9dHlw''@;'; put 'put ''ZW9mKFVlPXdlW0FdKSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInV0aWwucHJvbWlzaWZ5LmN1c3RvbSIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIEZ1bmN0aW9uJyk7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShVZSxBLHt2YWx1ZTpVZSxlbnVtZXJhYmxlOiExLHdyaXRhYmxl''@;'; put 'put ''OiExLGNvbmZpZ3VyYWJsZTohMH0pLFVlfWZ1bmN0aW9uIFVlKCl7Zm9yKHZhciBKZSxvdCx4ZT1uZXcgUHJvbWlzZShmdW5jdGlvbih6ZSxEZSl7SmU9emUsb3Q9RGV9KSx2ZT1bXSxYZT0wO1hlPGFyZ3VtZW50cy5sZW5ndGg7WGUrKyl2ZS5wdXNoKGFyZ3VtZW50c1tYZV0pO3ZlLnB1c2go''@;'; put 'put ''ZnVuY3Rpb24oemUsRGUpe3plP290KHplKTpKZShEZSl9KTt0cnl7d2UuYXBwbHkodGhpcyx2ZSl9Y2F0Y2goemUpe290KHplKX1yZXR1cm4geGV9cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZihVZSxPYmplY3QuZ2V0UHJvdG90eXBlT2Yod2UpKSxBJiZPYmplY3QuZGVmaW5lUHJvcGVy''@;'; put 'put ''dHkoVWUsQSx7dmFsdWU6VWUsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhVZSxnKHdlKSl9LFgucHJvbWlzaWZ5LmN1c3RvbT1BLFguY2FsbGJhY2tpZnk9ZnVuY3Rpb24gdGUoc2Upe2lmKCJmdW5jdGlvbiIhPXR5''@;'; put 'put ''cGVvZiBzZSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgIm9yaWdpbmFsIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgRnVuY3Rpb24nKTtmdW5jdGlvbiB3ZSgpe2Zvcih2YXIgVWU9W10sSmU9MDtKZTxhcmd1bWVudHMubGVuZ3RoO0plKyspVWUucHVzaChhcmd1bWVudHNbSmVdKTt2YXIg''@;'; put 'put ''b3Q9VWUucG9wKCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIG90KXRocm93IG5ldyBUeXBlRXJyb3IoIlRoZSBsYXN0IGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBGdW5jdGlvbiIpO3ZhciB4ZT10aGlzLHZlPWZ1bmN0aW9uKCl7cmV0dXJuIG90LmFwcGx5KHhlLGFyZ3VtZW50cyl9O3NlLmFw''@;'; put 'put ''cGx5KHRoaXMsVWUpLnRoZW4oZnVuY3Rpb24oWGUpe0kubmV4dFRpY2sodmUuYmluZChudWxsLG51bGwsWGUpKX0sZnVuY3Rpb24oWGUpe0kubmV4dFRpY2soYWUuYmluZChudWxsLFhlLHZlKSl9KX1yZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mKHdlLE9iamVjdC5nZXRQcm90b3R5cGVP''@;'; put 'put ''ZihzZSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHdlLGcoc2UpKSx3ZX19LDQ4MToodWUsWCx5KT0+eyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5leHBvcnRzLmlzX3VyaT1nLEkuZXhwb3J0cy5pc19odHRwX3VyaT1CLEkuZXhwb3J0cy5pc19odHRwc191cmk9dyxJLmV4cG9ydHMu''@;'; put 'put ''aXNfd2ViX3VyaT1QLEkuZXhwb3J0cy5pc1VyaT1nLEkuZXhwb3J0cy5pc0h0dHBVcmk9QixJLmV4cG9ydHMuaXNIdHRwc1VyaT13LEkuZXhwb3J0cy5pc1dlYlVyaT1QO3ZhciBfPWZ1bmN0aW9uKEYpe3JldHVybiBGLm1hdGNoKC8oPzooW146XC8/I10rKTopPyg/OlwvXC8oW15cLz8jXSop''@;'; put 'put ''KT8oW14/I10qKSg/Olw/KFteI10qKSk/KD86IyguKikpPy8pfTtmdW5jdGlvbiBnKEYpe2lmKEYmJiEvW15hLXowLTlcOlwvXD9cI1xbXF1cQFwhXCRcJlwnXChcKVwqXCtcLFw7XD1cLlwtXF9cflwlXS9pLnRlc3QoRikmJiEvJVteMC05YS1mXS9pLnRlc3QoRikmJiEvJVswLTlhLWZdKDo/''@;'; put 'put ''W14wLTlhLWZdfCQpL2kudGVzdChGKSl7dmFyIE8sTixMLEssVSx6PSIiLFc9IiI7aWYoTj0oTz1fKEYpKVsyXSxMPU9bM10sSz1PWzRdLFU9T1s1XSwoej1PWzFdKSYmei5sZW5ndGgmJkwubGVuZ3RoPj0wKXtpZihOJiZOLmxlbmd0aCl7aWYoMCE9PUwubGVuZ3RoJiYhL15cLy8udGVzdChM''@;'; put 'put ''KSlyZXR1cm59ZWxzZSBpZigvXlwvXC8vLnRlc3QoTCkpcmV0dXJuO2lmKC9eW2Etel1bYS16MC05XCtcLVwuXSokLy50ZXN0KHoudG9Mb3dlckNhc2UoKSkpcmV0dXJuIFcrPXorIjoiLE4mJk4ubGVuZ3RoJiYoVys9Ii8vIitOKSxXKz1MLEsmJksubGVuZ3RoJiYoVys9Ij8iK0spLFUmJlUu''@;'; put 'put ''bGVuZ3RoJiYoVys9IiMiK1UpLFd9fX1mdW5jdGlvbiBCKEYsTyl7aWYoZyhGKSl7dmFyIHosSyxXLFksTj0iIixMPSIiLFU9IiIscT0iIjtpZihMPSh6PV8oRikpWzJdLEs9elszXSxXPXpbNF0sWT16WzVdLE49elsxXSl7aWYoTyl7aWYoImh0dHBzIiE9Ti50b0xvd2VyQ2FzZSgpKXJldHVy''@;'; put 'put ''bn1lbHNlIGlmKCJodHRwIiE9Ti50b0xvd2VyQ2FzZSgpKXJldHVybjtpZihMKXJldHVybi86KFxkKykkLy50ZXN0KEwpJiYoVT1MLm1hdGNoKC86KFxkKykkLylbMF0sTD1MLnJlcGxhY2UoLzpcZCskLywiIikpLHErPU4rIjoiLHErPSIvLyIrTCxVJiYocSs9VSkscSs9SyxXJiZXLmxlbmd0''@;'; put 'put ''aCYmKHErPSI/IitXKSxZJiZZLmxlbmd0aCYmKHErPSIjIitZKSxxfX19ZnVuY3Rpb24gdyhGKXtyZXR1cm4gQihGLCEwKX1mdW5jdGlvbiBQKEYpe3JldHVybiBCKEYpfHx3KEYpfX0odWU9eS5ubWQodWUpKX0sNTE0MDooX191bnVzZWRfd2VicGFja19tb2R1bGUsZXhwb3J0cyk9Pnt2YXIg''@;'; put 'put ''aW5kZXhPZj1mdW5jdGlvbih1ZSxYKXtpZih1ZS5pbmRleE9mKXJldHVybiB1ZS5pbmRleE9mKFgpO2Zvcih2YXIgeT0wO3k8dWUubGVuZ3RoO3krKylpZih1ZVt5XT09PVgpcmV0dXJuIHk7cmV0dXJuLTF9LE9iamVjdF9rZXlzPWZ1bmN0aW9uKHVlKXtpZihPYmplY3Qua2V5cylyZXR1cm4g''@;'; put 'put ''T2JqZWN0LmtleXModWUpO3ZhciBYPVtdO2Zvcih2YXIgeSBpbiB1ZSlYLnB1c2goeSk7cmV0dXJuIFh9LGZvckVhY2g9ZnVuY3Rpb24odWUsWCl7aWYodWUuZm9yRWFjaClyZXR1cm4gdWUuZm9yRWFjaChYKTtmb3IodmFyIHk9MDt5PHVlLmxlbmd0aDt5KyspWCh1ZVt5XSx5LHVlKX0sZGVm''@;'; put 'put ''aW5lUHJvcD1mdW5jdGlvbigpe3RyeXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCJfIix7fSksZnVuY3Rpb24odWUsWCx5KXtPYmplY3QuZGVmaW5lUHJvcGVydHkodWUsWCx7d3JpdGFibGU6ITAsZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITAsdmFsdWU6eX0pfX1jYXRj''@;'; put 'put ''aHtyZXR1cm4gZnVuY3Rpb24oWCx5LEkpe1hbeV09SX19fSgpLGdsb2JhbHM9WyJBcnJheSIsIkJvb2xlYW4iLCJEYXRlIiwiRXJyb3IiLCJFdmFsRXJyb3IiLCJGdW5jdGlvbiIsIkluZmluaXR5IiwiSlNPTiIsIk1hdGgiLCJOYU4iLCJOdW1iZXIiLCJPYmplY3QiLCJSYW5nZUVycm9yIiwi''@;'; put 'put ''UmVmZXJlbmNlRXJyb3IiLCJSZWdFeHAiLCJTdHJpbmciLCJTeW50YXhFcnJvciIsIlR5cGVFcnJvciIsIlVSSUVycm9yIiwiZGVjb2RlVVJJIiwiZGVjb2RlVVJJQ29tcG9uZW50IiwiZW5jb2RlVVJJIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiZXNjYXBlIiwiZXZhbCIsImlzRmluaXRlIiwi''@;'; put 'put ''aXNOYU4iLCJwYXJzZUZsb2F0IiwicGFyc2VJbnQiLCJ1bmRlZmluZWQiLCJ1bmVzY2FwZSJdO2Z1bmN0aW9uIENvbnRleHQoKXt9Q29udGV4dC5wcm90b3R5cGU9e307dmFyIFNjcmlwdD1leHBvcnRzLlNjcmlwdD1mdW5jdGlvbihYKXtpZighKHRoaXMgaW5zdGFuY2VvZiBTY3JpcHQpKXJl''@;'; put 'put ''dHVybiBuZXcgU2NyaXB0KFgpO3RoaXMuY29kZT1YfTtTY3JpcHQucHJvdG90eXBlLnJ1bkluQ29udGV4dD1mdW5jdGlvbih1ZSl7aWYoISh1ZSBpbnN0YW5jZW9mIENvbnRleHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIm5lZWRzIGEgJ2NvbnRleHQnIGFyZ3VtZW50LiIpO3ZhciBYPWRvY3Vt''@;'; put 'put ''ZW50LmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIpO1guc3R5bGV8fChYLnN0eWxlPXt9KSxYLnN0eWxlLmRpc3BsYXk9Im5vbmUiLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoWCk7dmFyIHk9WC5jb250ZW50V2luZG93LEk9eS5ldmFsLF89eS5leGVjU2NyaXB0OyFJJiZfJiYoXy5jYWxsKHks''@;'; put 'put ''Im51bGwiKSxJPXkuZXZhbCksZm9yRWFjaChPYmplY3Rfa2V5cyh1ZSksZnVuY3Rpb24odyl7eVt3XT11ZVt3XX0pLGZvckVhY2goZ2xvYmFscyxmdW5jdGlvbih3KXt1ZVt3XSYmKHlbd109dWVbd10pfSk7dmFyIGc9T2JqZWN0X2tleXMoeSksQj1JLmNhbGwoeSx0aGlzLmNvZGUpO3JldHVy''@;'; put 'put ''biBmb3JFYWNoKE9iamVjdF9rZXlzKHkpLGZ1bmN0aW9uKHcpeyh3IGluIHVlfHwtMT09PWluZGV4T2YoZyx3KSkmJih1ZVt3XT15W3ddKX0pLGZvckVhY2goZ2xvYmFscyxmdW5jdGlvbih3KXt3IGluIHVlfHxkZWZpbmVQcm9wKHVlLHcseVt3XSl9KSxkb2N1bWVudC5ib2R5LnJlbW92ZUNo''@;'; put 'put ''aWxkKFgpLEJ9LFNjcmlwdC5wcm90b3R5cGUucnVuSW5UaGlzQ29udGV4dD1mdW5jdGlvbigpe3JldHVybiBldmFsKHRoaXMuY29kZSl9LFNjcmlwdC5wcm90b3R5cGUucnVuSW5OZXdDb250ZXh0PWZ1bmN0aW9uKHVlKXt2YXIgWD1TY3JpcHQuY3JlYXRlQ29udGV4dCh1ZSkseT10aGlzLnJ1''@;'; put 'put ''bkluQ29udGV4dChYKTtyZXR1cm4gdWUmJmZvckVhY2goT2JqZWN0X2tleXMoWCksZnVuY3Rpb24oSSl7dWVbSV09WFtJXX0pLHl9LGZvckVhY2goT2JqZWN0X2tleXMoU2NyaXB0LnByb3RvdHlwZSksZnVuY3Rpb24odWUpe2V4cG9ydHNbdWVdPVNjcmlwdFt1ZV09ZnVuY3Rpb24oWCl7dmFy''@;'; put 'put ''IHk9U2NyaXB0KFgpO3JldHVybiB5W3VlXS5hcHBseSh5LFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpKX19KSxleHBvcnRzLmlzQ29udGV4dD1mdW5jdGlvbih1ZSl7cmV0dXJuIHVlIGluc3RhbmNlb2YgQ29udGV4dH0sZXhwb3J0cy5jcmVhdGVTY3JpcHQ9ZnVuY3Rpb24odWUpe3JldHVy''@;'; put 'put ''biBleHBvcnRzLlNjcmlwdCh1ZSl9LGV4cG9ydHMuY3JlYXRlQ29udGV4dD1TY3JpcHQuY3JlYXRlQ29udGV4dD1mdW5jdGlvbih1ZSl7dmFyIFg9bmV3IENvbnRleHQ7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiB1ZSYmZm9yRWFjaChPYmplY3Rfa2V5cyh1ZSksZnVuY3Rpb24oeSl7WFt5XT11''@;'; put 'put ''ZVt5XX0pLFh9fSw2NDMwOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNDAyOSksXz15KDMwODMpLGc9eSg1NTU5KSxCPXkoNzM3OSksdz15KDcyOTYpLFA9QigiT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyIpLEY9eSg2NDEwKSgpLE89dHlwZW9mIGdsb2JhbFRoaXM+InUiP3ku''@;'; put 'put ''ZzpnbG9iYWxUaGlzLHo9XygpLE49QigiU3RyaW5nLnByb3RvdHlwZS5zbGljZSIpLEw9T2JqZWN0LmdldFByb3RvdHlwZU9mLEs9QigiQXJyYXkucHJvdG90eXBlLmluZGV4T2YiLCEwKXx8ZnVuY3Rpb24oZWUsSil7Zm9yKHZhciBuZT0wO25lPGVlLmxlbmd0aDtuZSs9MSlpZihlZVtuZV09''@;'; put 'put ''PT1KKXJldHVybiBuZTtyZXR1cm4tMX0sVT17X19wcm90b19fOm51bGx9O0koeixGJiZ3JiZMP2Z1bmN0aW9uKHEpe3ZhciBlZT1uZXcgT1txXTtpZihTeW1ib2wudG9TdHJpbmdUYWcgaW4gZWUpe3ZhciBKPUwoZWUpLG5lPXcoSixTeW1ib2wudG9TdHJpbmdUYWcpO2lmKCFuZSl7dmFyIGll''@;'; put 'put ''PUwoSik7bmU9dyhpZSxTeW1ib2wudG9TdHJpbmdUYWcpfVVbIiQiK3FdPWcobmUuZ2V0KX19OmZ1bmN0aW9uKHEpe3ZhciBlZT1uZXcgT1txXSxKPWVlLnNsaWNlfHxlZS5zZXQ7SiYmKFVbIiQiK3FdPWcoSikpfSksdWUuZXhwb3J0cz1mdW5jdGlvbihlZSl7aWYoIWVlfHwib2JqZWN0IiE9''@;'; put 'put ''dHlwZW9mIGVlKXJldHVybiExO2lmKCFGKXt2YXIgSj1OKFAoZWUpLDgsLTEpO3JldHVybiBLKHosSik+LTE/SjoiT2JqZWN0Ij09PUomJmZ1bmN0aW9uKGVlKXt2YXIgSj0hMTtyZXR1cm4gSShVLGZ1bmN0aW9uKG5lLGllKXtpZighSil0cnl7bmUoZWUpLEo9TihpZSwxKX1jYXRjaHt9fSks''@;'; put 'put ''Sn0oZWUpfXJldHVybiB3P2Z1bmN0aW9uKGVlKXt2YXIgSj0hMTtyZXR1cm4gSShVLGZ1bmN0aW9uKG5lLGllKXtpZighSil0cnl7IiQiK25lKGVlKT09PWllJiYoSj1OKGllLDEpKX1jYXRjaHt9fSksSn0oZWUpOm51bGx9fSw4NjQ2OigpPT57fSw5NTA6KCk9Pnt9LDY2MDE6KCk9Pnt9LDky''@;'; put 'put ''MTQ6KCk9Pnt9LDY0MTk6KCk9Pnt9LDYzNTM6KCk9Pnt9LDg2MjM6KCk9Pnt9LDc3NDg6KCk9Pnt9LDU1Njg6KCk9Pnt9LDU0NDM6KCk9Pnt9LDQxMjk6KCk9Pnt9LDY2MTk6KCk9Pnt9LDcxMDg6KCk9Pnt9LDIzNjE6KCk9Pnt9LDQ2MTY6KCk9Pnt9LDgzNzM6KCk9Pnt9LDMwODM6KHVlLFgs''@;'; put 'put ''eSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg5OTA4KSxfPXR5cGVvZiBnbG9iYWxUaGlzPiJ1Ij95Lmc6Z2xvYmFsVGhpczt1ZS5leHBvcnRzPWZ1bmN0aW9uKCl7Zm9yKHZhciBCPVtdLHc9MDt3PEkubGVuZ3RoO3crKykiZnVuY3Rpb24iPT10eXBlb2YgX1tJW3ddXSYmKEJbQi5sZW5ndGhd''@;'; put 'put ''PUlbd10pO3JldHVybiBCfX0sNzIxODoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDQxNTUpLF89eSg4NzY0KS5CdWZmZXIsZz15KDUxMDgpO2Z1bmN0aW9uIEIoU3QsQnQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBTdC5hcHBseShCdCxhcmd1bWVudHMpfX1jb25zdHt0b1N0''@;'; put 'put ''cmluZzp3fT1PYmplY3QucHJvdG90eXBlLHtnZXRQcm90b3R5cGVPZjpQfT1PYmplY3QsRj0oU3Q9PkJ0PT57Y29uc3QgX249dy5jYWxsKEJ0KTtyZXR1cm4gU3RbX25dfHwoU3RbX25dPV9uLnNsaWNlKDgsLTEpLnRvTG93ZXJDYXNlKCkpfSkoT2JqZWN0LmNyZWF0ZShudWxsKSksTz1TdD0+''@;'; put 'put ''KFN0PVN0LnRvTG93ZXJDYXNlKCksQnQ9PkYoQnQpPT09U3QpLHo9U3Q9PkJ0PT50eXBlb2YgQnQ9PT1TdCx7aXNBcnJheTpOfT1BcnJheSxMPXooInVuZGVmaW5lZCIpLFU9TygiQXJyYXlCdWZmZXIiKSxZPXooInN0cmluZyIpLHE9eigiZnVuY3Rpb24iKSxlZT16KCJudW1iZXIiKSxKPVN0''@;'; put 'put ''PT5udWxsIT09U3QmJiJvYmplY3QiPT10eXBlb2YgU3QsaWU9U3Q9PntpZigib2JqZWN0IiE9PUYoU3QpKXJldHVybiExO2NvbnN0IEJ0PVAoU3QpO3JldHVybiEobnVsbCE9PUJ0JiZCdCE9PU9iamVjdC5wcm90b3R5cGUmJm51bGwhPT1PYmplY3QuZ2V0UHJvdG90eXBlT2YoQnQpfHxTeW1i''@;'; put 'put ''b2wudG9TdHJpbmdUYWcgaW4gU3R8fFN5bWJvbC5pdGVyYXRvciBpbiBTdCl9LGxlPU8oIkRhdGUiKSxtZT1PKCJGaWxlIiksX2U9TygiQmxvYiIpLFRlPU8oIkZpbGVMaXN0IiksVj1PKCJVUkxTZWFyY2hQYXJhbXMiKSxbcCxiLHgsQ109WyJSZWFkYWJsZVN0cmVhbSIsIlJlcXVlc3QiLCJS''@;'; put 'put ''ZXNwb25zZSIsIkhlYWRlcnMiXS5tYXAoTyk7ZnVuY3Rpb24gSChTdCxCdCx7YWxsT3duS2V5czpfbj0hMX09e30pe2lmKG51bGw9PT1TdHx8dHlwZW9mIFN0PiJ1IilyZXR1cm47bGV0IG1uLEluO2lmKCJvYmplY3QiIT10eXBlb2YgU3QmJihTdD1bU3RdKSxOKFN0KSlmb3IobW49MCxJbj1T''@;'; put 'put ''dC5sZW5ndGg7bW48SW47bW4rKylCdC5jYWxsKG51bGwsU3RbbW5dLG1uLFN0KTtlbHNle2NvbnN0IGJuPV9uP09iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKFN0KTpPYmplY3Qua2V5cyhTdCksdXI9Ym4ubGVuZ3RoO2xldCBiaTtmb3IobW49MDttbjx1cjttbisrKWJpPWJuW21uXSxCdC5j''@;'; put 'put ''YWxsKG51bGwsU3RbYmldLGJpLFN0KX19ZnVuY3Rpb24gaihTdCxCdCl7QnQ9QnQudG9Mb3dlckNhc2UoKTtjb25zdCBfbj1PYmplY3Qua2V5cyhTdCk7bGV0IEluLG1uPV9uLmxlbmd0aDtmb3IoO21uLS0gPjA7KWlmKEluPV9uW21uXSxCdD09PUluLnRvTG93ZXJDYXNlKCkpcmV0dXJuIElu''@;'; put 'put ''O3JldHVybiBudWxsfWNvbnN0IEU9dHlwZW9mIGdsb2JhbFRoaXM8InUiP2dsb2JhbFRoaXM6dHlwZW9mIHNlbGY8InUiP3NlbGY6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93OnkuZyxtPVN0PT4hTChTdCkmJlN0IT09RSxvdD0oU3Q9PkJ0PT5TdCYmQnQgaW5zdGFuY2VvZiBTdCkodHlwZW9m''@;'; put 'put ''IFVpbnQ4QXJyYXk8InUiJiZQKFVpbnQ4QXJyYXkpKSxYZT1PKCJIVE1MRm9ybUVsZW1lbnQiKSxEZT0oKHtoYXNPd25Qcm9wZXJ0eTpTdH0pPT4oQnQsX24pPT5TdC5jYWxsKEJ0LF9uKSkoT2JqZWN0LnByb3RvdHlwZSksRmU9TygiUmVnRXhwIiksT2U9KFN0LEJ0KT0+e2NvbnN0IF9uPU9i''@;'; put 'put ''amVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKFN0KSxtbj17fTtIKF9uLChJbixibik9PntsZXQgdXI7ITEhPT0odXI9QnQoSW4sYm4sU3QpKSYmKG1uW2JuXT11cnx8SW4pfSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoU3QsbW4pfSxRZT1PKCJBc3luY0Z1bmN0aW9uIikseXQ9KFN0''@;'; put 'put ''PSJmdW5jdGlvbiI9PXR5cGVvZiBzZXRJbW1lZGlhdGUsQnQ9cShFLnBvc3RNZXNzYWdlKSxTdD9zZXRJbW1lZGlhdGU6QnQ/KF9uPWBheGlvc0Ake01hdGgucmFuZG9tKCl9YCxtbj1bXSxFLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCh7c291cmNlOkluLGRhdGE6Ym59KT0+e0luPT09''@;'; put 'put ''RSYmYm49PT1fbiYmbW4ubGVuZ3RoJiZtbi5zaGlmdCgpKCl9LCExKSxJbj0+e21uLnB1c2goSW4pLEUucG9zdE1lc3NhZ2UoX24sIioiKX0pOl9uPT5zZXRUaW1lb3V0KF9uKSksTXQ9dHlwZW9mIHF1ZXVlTWljcm90YXNrPCJ1Ij9xdWV1ZU1pY3JvdGFzay5iaW5kKEUpOnR5cGVvZiBJPCJ1''@;'; put 'put ''IiYmSS5uZXh0VGlja3x8eXQ7dmFyIFN0LEJ0LF9uLG1uLER0PXtpc0FycmF5Ok4saXNBcnJheUJ1ZmZlcjpVLGlzQnVmZmVyOmZ1bmN0aW9uIEsoU3Qpe3JldHVybiBudWxsIT09U3QmJiFMKFN0KSYmbnVsbCE9PVN0LmNvbnN0cnVjdG9yJiYhTChTdC5jb25zdHJ1Y3RvcikmJnEoU3QuY29u''@;'; put 'put ''c3RydWN0b3IuaXNCdWZmZXIpJiZTdC5jb25zdHJ1Y3Rvci5pc0J1ZmZlcihTdCl9LGlzRm9ybURhdGE6U3Q9PntsZXQgQnQ7cmV0dXJuIFN0JiYoImZ1bmN0aW9uIj09dHlwZW9mIEZvcm1EYXRhJiZTdCBpbnN0YW5jZW9mIEZvcm1EYXRhfHxxKFN0LmFwcGVuZCkmJigiZm9ybWRhdGEiPT09''@;'; put 'put ''KEJ0PUYoU3QpKXx8Im9iamVjdCI9PT1CdCYmcShTdC50b1N0cmluZykmJiJbb2JqZWN0IEZvcm1EYXRhXSI9PT1TdC50b1N0cmluZygpKSl9LGlzQXJyYXlCdWZmZXJWaWV3OmZ1bmN0aW9uIFcoU3Qpe2xldCBCdDtyZXR1cm4gQnQ9dHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYmQXJyYXlCdWZm''@;'; put 'put ''ZXIuaXNWaWV3P0FycmF5QnVmZmVyLmlzVmlldyhTdCk6U3QmJlN0LmJ1ZmZlciYmVShTdC5idWZmZXIpLEJ0fSxpc1N0cmluZzpZLGlzTnVtYmVyOmVlLGlzQm9vbGVhbjpTdD0+ITA9PT1TdHx8ITE9PT1TdCxpc09iamVjdDpKLGlzUGxhaW5PYmplY3Q6aWUsaXNSZWFkYWJsZVN0cmVhbTpw''@;'; put 'put ''LGlzUmVxdWVzdDpiLGlzUmVzcG9uc2U6eCxpc0hlYWRlcnM6Qyxpc1VuZGVmaW5lZDpMLGlzRGF0ZTpsZSxpc0ZpbGU6bWUsaXNCbG9iOl9lLGlzUmVnRXhwOkZlLGlzRnVuY3Rpb246cSxpc1N0cmVhbTpTdD0+SihTdCkmJnEoU3QucGlwZSksaXNVUkxTZWFyY2hQYXJhbXM6Vixpc1R5cGVk''@;'; put 'put ''QXJyYXk6b3QsaXNGaWxlTGlzdDpUZSxmb3JFYWNoOkgsbWVyZ2U6ZnVuY3Rpb24gQSgpe2NvbnN0e2Nhc2VsZXNzOlN0fT1tKHRoaXMpJiZ0aGlzfHx7fSxCdD17fSxfbj0obW4sSW4pPT57Y29uc3QgYm49U3QmJmooQnQsSW4pfHxJbjtCdFtibl09aWUoQnRbYm5dKSYmaWUobW4pP0EoQnRb''@;'; put 'put ''Ym5dLG1uKTppZShtbik/QSh7fSxtbik6Tihtbik/bW4uc2xpY2UoKTptbn07Zm9yKGxldCBtbj0wLEluPWFyZ3VtZW50cy5sZW5ndGg7bW48SW47bW4rKylhcmd1bWVudHNbbW5dJiZIKGFyZ3VtZW50c1ttbl0sX24pO3JldHVybiBCdH0sZXh0ZW5kOihTdCxCdCxfbix7YWxsT3duS2V5czpt''@;'; put 'put ''bn09e30pPT4oSChCdCwoSW4sYm4pPT57U3RbYm5dPV9uJiZxKEluKT9CKEluLF9uKTpJbn0se2FsbE93bktleXM6bW59KSxTdCksdHJpbTpTdD0+U3QudHJpbT9TdC50cmltKCk6U3QucmVwbGFjZSgvXltcc1x1RkVGRlx4QTBdK3xbXHNcdUZFRkZceEEwXSskL2csIiIpLHN0cmlwQk9NOlN0''@;'; put 'put ''PT4oNjUyNzk9PT1TdC5jaGFyQ29kZUF0KDApJiYoU3Q9U3Quc2xpY2UoMSkpLFN0KSxpbmhlcml0czooU3QsQnQsX24sbW4pPT57U3QucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoQnQucHJvdG90eXBlLG1uKSxTdC5wcm90b3R5cGUuY29uc3RydWN0b3I9U3QsT2JqZWN0LmRlZmluZVByb3Bl''@;'; put 'put ''cnR5KFN0LCJzdXBlciIse3ZhbHVlOkJ0LnByb3RvdHlwZX0pLF9uJiZPYmplY3QuYXNzaWduKFN0LnByb3RvdHlwZSxfbil9LHRvRmxhdE9iamVjdDooU3QsQnQsX24sbW4pPT57bGV0IEluLGJuLHVyO2NvbnN0IGJpPXt9O2lmKEJ0PUJ0fHx7fSxudWxsPT1TdClyZXR1cm4gQnQ7ZG97Zm9y''@;'; put 'put ''KEluPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKFN0KSxibj1Jbi5sZW5ndGg7Ym4tLSA+MDspdXI9SW5bYm5dLCghbW58fG1uKHVyLFN0LEJ0KSkmJiFiaVt1cl0mJihCdFt1cl09U3RbdXJdLGJpW3VyXT0hMCk7U3Q9ITEhPT1fbiYmUChTdCl9d2hpbGUoU3QmJighX258fF9uKFN0LEJ0''@;'; put 'put ''KSkmJlN0IT09T2JqZWN0LnByb3RvdHlwZSk7cmV0dXJuIEJ0fSxraW5kT2Y6RixraW5kT2ZUZXN0Ok8sZW5kc1dpdGg6KFN0LEJ0LF9uKT0+e1N0PVN0cmluZyhTdCksKHZvaWQgMD09PV9ufHxfbj5TdC5sZW5ndGgpJiYoX249U3QubGVuZ3RoKTtjb25zdCBtbj1TdC5pbmRleE9mKEJ0LF9u''@;'; put 'put ''LT1CdC5sZW5ndGgpO3JldHVybi0xIT09bW4mJm1uPT09X259LHRvQXJyYXk6U3Q9PntpZighU3QpcmV0dXJuIG51bGw7aWYoTihTdCkpcmV0dXJuIFN0O2xldCBCdD1TdC5sZW5ndGg7aWYoIWVlKEJ0KSlyZXR1cm4gbnVsbDtjb25zdCBfbj1uZXcgQXJyYXkoQnQpO2Zvcig7QnQtLSA+MDsp''@;'; put 'put ''X25bQnRdPVN0W0J0XTtyZXR1cm4gX259LGZvckVhY2hFbnRyeTooU3QsQnQpPT57Y29uc3QgbW49KFN0JiZTdFtTeW1ib2wuaXRlcmF0b3JdKS5jYWxsKFN0KTtsZXQgSW47Zm9yKDsoSW49bW4ubmV4dCgpKSYmIUluLmRvbmU7KXtjb25zdCBibj1Jbi52YWx1ZTtCdC5jYWxsKFN0LGJuWzBd''@;'; put 'put ''LGJuWzFdKX19LG1hdGNoQWxsOihTdCxCdCk9PntsZXQgX247Y29uc3QgbW49W107Zm9yKDtudWxsIT09KF9uPVN0LmV4ZWMoQnQpKTspbW4ucHVzaChfbik7cmV0dXJuIG1ufSxpc0hUTUxGb3JtOlhlLGhhc093blByb3BlcnR5OkRlLGhhc093blByb3A6RGUscmVkdWNlRGVzY3JpcHRvcnM6''@;'; put 'put ''T2UsZnJlZXplTWV0aG9kczpTdD0+e09lKFN0LChCdCxfbik9PntpZihxKFN0KSYmLTEhPT1bImFyZ3VtZW50cyIsImNhbGxlciIsImNhbGxlZSJdLmluZGV4T2YoX24pKXJldHVybiExO2lmKHEoU3RbX25dKSl7aWYoQnQuZW51bWVyYWJsZT0hMSwid3JpdGFibGUiaW4gQnQpcmV0dXJuIHZv''@;'; put 'put ''aWQoQnQud3JpdGFibGU9ITEpO0J0LnNldHx8KEJ0LnNldD0oKT0+e3Rocm93IEVycm9yKCJDYW4gbm90IHJld3JpdGUgcmVhZC1vbmx5IG1ldGhvZCAnIitfbisiJyIpfSl9fSl9LHRvT2JqZWN0U2V0OihTdCxCdCk9Pntjb25zdCBfbj17fSxtbj1Jbj0+e0luLmZvckVhY2goYm49Pntfblti''@;'; put 'put ''bl09ITB9KX07cmV0dXJuIE4oU3QpP21uKFN0KTptbihTdHJpbmcoU3QpLnNwbGl0KEJ0KSksX259LHRvQ2FtZWxDYXNlOlN0PT5TdC50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1stX1xzXShbYS16XGRdKShcdyopL2csZnVuY3Rpb24oX24sbW4sSW4pe3JldHVybiBtbi50b1VwcGVyQ2FzZSgp''@;'; put 'put ''K0lufSksbm9vcDooKT0+e30sdG9GaW5pdGVOdW1iZXI6KFN0LEJ0KT0+bnVsbCE9U3QmJk51bWJlci5pc0Zpbml0ZShTdD0rU3QpP1N0OkJ0LGZpbmRLZXk6aixnbG9iYWw6RSxpc0NvbnRleHREZWZpbmVkOm0saXNTcGVjQ29tcGxpYW50Rm9ybTpmdW5jdGlvbiBfdChTdCl7cmV0dXJuISEo''@;'; put 'put ''U3QmJnEoU3QuYXBwZW5kKSYmIkZvcm1EYXRhIj09PVN0W1N5bWJvbC50b1N0cmluZ1RhZ10mJlN0W1N5bWJvbC5pdGVyYXRvcl0pfSx0b0pTT05PYmplY3Q6U3Q9Pntjb25zdCBCdD1uZXcgQXJyYXkoMTApLF9uPShtbixJbik9PntpZihKKG1uKSl7aWYoQnQuaW5kZXhPZihtbik+PTApcmV0''@;'; put 'put ''dXJuO2lmKCEoInRvSlNPTiJpbiBtbikpe0J0W0luXT1tbjtjb25zdCBibj1OKG1uKT9bXTp7fTtyZXR1cm4gSChtbiwodXIsYmkpPT57Y29uc3QgRnI9X24odXIsSW4rMSk7IUwoRnIpJiYoYm5bYmldPUZyKX0pLEJ0W0luXT12b2lkIDAsYm59fXJldHVybiBtbn07cmV0dXJuIF9uKFN0LDAp''@;'; put 'put ''fSxpc0FzeW5jRm46UWUsaXNUaGVuYWJsZTpTdD0+U3QmJihKKFN0KXx8cShTdCkpJiZxKFN0LnRoZW4pJiZxKFN0LmNhdGNoKSxzZXRJbW1lZGlhdGU6eXQsYXNhcDpNdH07ZnVuY3Rpb24gaXQoU3QsQnQsX24sbW4sSW4pe0Vycm9yLmNhbGwodGhpcyksRXJyb3IuY2FwdHVyZVN0YWNrVHJh''@;'; put 'put ''Y2U/RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcyx0aGlzLmNvbnN0cnVjdG9yKTp0aGlzLnN0YWNrPShuZXcgRXJyb3IpLnN0YWNrLHRoaXMubWVzc2FnZT1TdCx0aGlzLm5hbWU9IkF4aW9zRXJyb3IiLEJ0JiYodGhpcy5jb2RlPUJ0KSxfbiYmKHRoaXMuY29uZmlnPV9uKSxtbiYmKHRo''@;'; put 'put ''aXMucmVxdWVzdD1tbiksSW4mJih0aGlzLnJlc3BvbnNlPUluLHRoaXMuc3RhdHVzPUluLnN0YXR1cz9Jbi5zdGF0dXM6bnVsbCl9RHQuaW5oZXJpdHMoaXQsRXJyb3Ise3RvSlNPTjpmdW5jdGlvbigpe3JldHVybnttZXNzYWdlOnRoaXMubWVzc2FnZSxuYW1lOnRoaXMubmFtZSxkZXNjcmlw''@;'; put 'put ''dGlvbjp0aGlzLmRlc2NyaXB0aW9uLG51bWJlcjp0aGlzLm51bWJlcixmaWxlTmFtZTp0aGlzLmZpbGVOYW1lLGxpbmVOdW1iZXI6dGhpcy5saW5lTnVtYmVyLGNvbHVtbk51bWJlcjp0aGlzLmNvbHVtbk51bWJlcixzdGFjazp0aGlzLnN0YWNrLGNvbmZpZzpEdC50b0pTT05PYmplY3QodGhp''@;'; put 'put ''cy5jb25maWcpLGNvZGU6dGhpcy5jb2RlLHN0YXR1czp0aGlzLnN0YXR1c319fSk7Y29uc3QgJGU9aXQucHJvdG90eXBlLHR0PXt9O2Z1bmN0aW9uIHV0KFN0KXtyZXR1cm4gRHQuaXNQbGFpbk9iamVjdChTdCl8fER0LmlzQXJyYXkoU3QpfWZ1bmN0aW9uIHF0KFN0KXtyZXR1cm4gRHQuZW5k''@;'; put 'put ''c1dpdGgoU3QsIltdIik/U3Quc2xpY2UoMCwtMik6U3R9ZnVuY3Rpb24gUnQoU3QsQnQsX24pe3JldHVybiBTdD9TdC5jb25jYXQoQnQpLm1hcChmdW5jdGlvbihJbixibil7cmV0dXJuIEluPXF0KEluKSwhX24mJmJuPyJbIitJbisiXSI6SW59KS5qb2luKF9uPyIuIjoiIik6QnR9WyJFUlJf''@;'; put 'put ''QkFEX09QVElPTl9WQUxVRSIsIkVSUl9CQURfT1BUSU9OIiwiRUNPTk5BQk9SVEVEIiwiRVRJTUVET1VUIiwiRVJSX05FVFdPUksiLCJFUlJfRlJfVE9PX01BTllfUkVESVJFQ1RTIiwiRVJSX0RFUFJFQ0FURUQiLCJFUlJfQkFEX1JFU1BPTlNFIiwiRVJSX0JBRF9SRVFVRVNUIiwiRVJSX0NB''@;'; put 'put ''TkNFTEVEIiwiRVJSX05PVF9TVVBQT1JUIiwiRVJSX0lOVkFMSURfVVJMIl0uZm9yRWFjaChTdD0+e3R0W1N0XT17dmFsdWU6U3R9fSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoaXQsdHQpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSgkZSwiaXNBeGlvc0Vycm9yIix7dmFsdWU6ITB9KSxpdC5m''@;'; put 'put ''cm9tPShTdCxCdCxfbixtbixJbixibik9Pntjb25zdCB1cj1PYmplY3QuY3JlYXRlKCRlKTtyZXR1cm4gRHQudG9GbGF0T2JqZWN0KFN0LHVyLGZ1bmN0aW9uKEZyKXtyZXR1cm4gRnIhPT1FcnJvci5wcm90b3R5cGV9LGJpPT4iaXNBeGlvc0Vycm9yIiE9PWJpKSxpdC5jYWxsKHVyLFN0Lm1l''@;'; put 'put ''c3NhZ2UsQnQsX24sbW4sSW4pLHVyLmNhdXNlPVN0LHVyLm5hbWU9U3QubmFtZSxibiYmT2JqZWN0LmFzc2lnbih1cixibiksdXJ9O2NvbnN0IGNpPUR0LnRvRmxhdE9iamVjdChEdCx7fSxudWxsLGZ1bmN0aW9uKEJ0KXtyZXR1cm4vXmlzW0EtWl0vLnRlc3QoQnQpfSk7ZnVuY3Rpb24gUXQo''@;'; put 'put ''U3QsQnQsX24pe2lmKCFEdC5pc09iamVjdChTdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigidGFyZ2V0IG11c3QgYmUgYW4gb2JqZWN0Iik7QnQ9QnR8fG5ldyBGb3JtRGF0YTtjb25zdCBtbj0oX249RHQudG9GbGF0T2JqZWN0KF9uLHttZXRhVG9rZW5zOiEwLGRvdHM6ITEsaW5kZXhlczohMX0s''@;'; put 'put ''ITEsZnVuY3Rpb24oX28samkpe3JldHVybiFEdC5pc1VuZGVmaW5lZChqaVtfb10pfSkpLm1ldGFUb2tlbnMsSW49X24udmlzaXRvcnx8b2EsYm49X24uZG90cyx1cj1fbi5pbmRleGVzLEZyPShfbi5CbG9ifHx0eXBlb2YgQmxvYjwidSImJkJsb2IpJiZEdC5pc1NwZWNDb21wbGlhbnRGb3Jt''@;'; put 'put ''KEJ0KTtpZighRHQuaXNGdW5jdGlvbihJbikpdGhyb3cgbmV3IFR5cGVFcnJvcigidmlzaXRvciBtdXN0IGJlIGEgZnVuY3Rpb24iKTtmdW5jdGlvbiB0YSh0byl7aWYobnVsbD09PXRvKXJldHVybiIiO2lmKER0LmlzRGF0ZSh0bykpcmV0dXJuIHRvLnRvSVNPU3RyaW5nKCk7aWYoIUZyJiZE''@;'; put 'put ''dC5pc0Jsb2IodG8pKXRocm93IG5ldyBpdCgiQmxvYiBpcyBub3Qgc3VwcG9ydGVkLiBVc2UgYSBCdWZmZXIgaW5zdGVhZC4iKTtyZXR1cm4gRHQuaXNBcnJheUJ1ZmZlcih0byl8fER0LmlzVHlwZWRBcnJheSh0byk/RnImJiJmdW5jdGlvbiI9PXR5cGVvZiBCbG9iP25ldyBCbG9iKFt0b10p''@;'; put 'put ''Ol8uZnJvbSh0byk6dG99ZnVuY3Rpb24gb2EodG8sX28samkpe2xldCBQYz10bztpZih0byYmIWppJiYib2JqZWN0Ij09dHlwZW9mIHRvKWlmKER0LmVuZHNXaXRoKF9vLCJ7fSIpKV9vPW1uP19vOl9vLnNsaWNlKDAsLTIpLHRvPUpTT04uc3RyaW5naWZ5KHRvKTtlbHNlIGlmKER0LmlzQXJy''@;'; put 'put ''YXkodG8pJiZmdW5jdGlvbiBQdChTdCl7cmV0dXJuIER0LmlzQXJyYXkoU3QpJiYhU3Quc29tZSh1dCl9KHRvKXx8KER0LmlzRmlsZUxpc3QodG8pfHxEdC5lbmRzV2l0aChfbywiW10iKSkmJihQYz1EdC50b0FycmF5KHRvKSkpcmV0dXJuIF9vPXF0KF9vKSxQYy5mb3JFYWNoKGZ1bmN0aW9u''@;'; put 'put ''KENhLFRhKXshRHQuaXNVbmRlZmluZWQoQ2EpJiZudWxsIT09Q2EmJkJ0LmFwcGVuZCghMD09PXVyP1J0KFtfb10sVGEsYm4pOm51bGw9PT11cj9fbzpfbysiW10iLHRhKENhKSl9KSwhMTtyZXR1cm4hIXV0KHRvKXx8KEJ0LmFwcGVuZChSdChqaSxfbyxibiksdGEodG8pKSwhMSl9Y29uc3Qg''@;'; put 'put ''VmE9W10sJG89T2JqZWN0LmFzc2lnbihjaSx7ZGVmYXVsdFZpc2l0b3I6b2EsY29udmVydFZhbHVlOnRhLGlzVmlzaXRhYmxlOnV0fSk7aWYoIUR0LmlzT2JqZWN0KFN0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJkYXRhIG11c3QgYmUgYW4gb2JqZWN0Iik7cmV0dXJuIGZ1bmN0aW9uIFhsKHRv''@;'; put 'put ''LF9vKXtpZighRHQuaXNVbmRlZmluZWQodG8pKXtpZigtMSE9PVZhLmluZGV4T2YodG8pKXRocm93IEVycm9yKCJDaXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0ZWQgaW4gIitfby5qb2luKCIuIikpO1ZhLnB1c2godG8pLER0LmZvckVhY2godG8sZnVuY3Rpb24oUGMsemwpeyEwPT09KCEoRHQu''@;'; put 'put ''aXNVbmRlZmluZWQoUGMpfHxudWxsPT09UGMpJiZJbi5jYWxsKEJ0LFBjLER0LmlzU3RyaW5nKHpsKT96bC50cmltKCk6emwsX28sJG8pKSYmWGwoUGMsX28/X28uY29uY2F0KHpsKTpbemxdKX0pLFZhLnBvcCgpfX0oU3QpLEJ0fWZ1bmN0aW9uIHNuKFN0KXtjb25zdCBCdD17IiEiOiIlMjEi''@;'; put 'put ''LCInIjoiJTI3IiwiKCI6IiUyOCIsIikiOiIlMjkiLCJ+IjoiJTdFIiwiJTIwIjoiKyIsIiUwMCI6IlwwIn07cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChTdCkucmVwbGFjZSgvWyEnKCl+XXwlMjB8JTAwL2csZnVuY3Rpb24obW4pe3JldHVybiBCdFttbl19KX1mdW5jdGlvbiBSaShTdCxC''@;'; put 'put ''dCl7dGhpcy5fcGFpcnM9W10sU3QmJlF0KFN0LHRoaXMsQnQpfWNvbnN0IGhuPVJpLnByb3RvdHlwZTtmdW5jdGlvbiBmdChTdCl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChTdCkucmVwbGFjZSgvJTNBL2dpLCI6IikucmVwbGFjZSgvJTI0L2csIiQiKS5yZXBsYWNlKC8lMkMvZ2ksIiwi''@;'; put 'put ''KS5yZXBsYWNlKC8lMjAvZywiKyIpLnJlcGxhY2UoLyU1Qi9naSwiWyIpLnJlcGxhY2UoLyU1RC9naSwiXSIpfWZ1bmN0aW9uIE9yKFN0LEJ0LF9uKXtpZighQnQpcmV0dXJuIFN0O2NvbnN0IG1uPV9uJiZfbi5lbmNvZGV8fGZ0O0R0LmlzRnVuY3Rpb24oX24pJiYoX249e3NlcmlhbGl6ZTpf''@;'; put 'put ''bn0pO2NvbnN0IEluPV9uJiZfbi5zZXJpYWxpemU7bGV0IGJuO2lmKGJuPUluP0luKEJ0LF9uKTpEdC5pc1VSTFNlYXJjaFBhcmFtcyhCdCk/QnQudG9TdHJpbmcoKTpuZXcgUmkoQnQsX24pLnRvU3RyaW5nKG1uKSxibil7Y29uc3QgdXI9U3QuaW5kZXhPZigiIyIpOy0xIT09dXImJihTdD1T''@;'; put 'put ''dC5zbGljZSgwLHVyKSksU3QrPSgtMT09PVN0LmluZGV4T2YoIj8iKT8iPyI6IiYiKStibn1yZXR1cm4gU3R9aG4uYXBwZW5kPWZ1bmN0aW9uKEJ0LF9uKXt0aGlzLl9wYWlycy5wdXNoKFtCdCxfbl0pfSxobi50b1N0cmluZz1mdW5jdGlvbihCdCl7Y29uc3QgX249QnQ/ZnVuY3Rpb24obW4p''@;'; put 'put ''e3JldHVybiBCdC5jYWxsKHRoaXMsbW4sc24pfTpzbjtyZXR1cm4gdGhpcy5fcGFpcnMubWFwKGZ1bmN0aW9uKEluKXtyZXR1cm4gX24oSW5bMF0pKyI9IitfbihJblsxXSl9LCIiKS5qb2luKCImIil9O3ZhciBBdD1jbGFzcyBXdHtjb25zdHJ1Y3Rvcigpe3RoaXMuaGFuZGxlcnM9W119dXNl''@;'; put 'put ''KEJ0LF9uLG1uKXtyZXR1cm4gdGhpcy5oYW5kbGVycy5wdXNoKHtmdWxmaWxsZWQ6QnQscmVqZWN0ZWQ6X24sc3luY2hyb25vdXM6ISFtbiYmbW4uc3luY2hyb25vdXMscnVuV2hlbjptbj9tbi5ydW5XaGVuOm51bGx9KSx0aGlzLmhhbmRsZXJzLmxlbmd0aC0xfWVqZWN0KEJ0KXt0aGlzLmhh''@;'; put 'put ''bmRsZXJzW0J0XSYmKHRoaXMuaGFuZGxlcnNbQnRdPW51bGwpfWNsZWFyKCl7dGhpcy5oYW5kbGVycyYmKHRoaXMuaGFuZGxlcnM9W10pfWZvckVhY2goQnQpe0R0LmZvckVhY2godGhpcy5oYW5kbGVycyxmdW5jdGlvbihtbil7bnVsbCE9PW1uJiZCdChtbil9KX19LFJuPXtzaWxlbnRKU09O''@;'; put 'put ''UGFyc2luZzohMCxmb3JjZWRKU09OUGFyc2luZzohMCxjbGFyaWZ5VGltZW91dEVycm9yOiExfSxXZT17aXNCcm93c2VyOiEwLGNsYXNzZXM6e1VSTFNlYXJjaFBhcmFtczp0eXBlb2YgVVJMU2VhcmNoUGFyYW1zPCJ1Ij9VUkxTZWFyY2hQYXJhbXM6UmksRm9ybURhdGE6dHlwZW9mIEZvcm1E''@;'; put 'put ''YXRhPCJ1Ij9Gb3JtRGF0YTpudWxsLEJsb2I6dHlwZW9mIEJsb2I8InUiP0Jsb2I6bnVsbH0scHJvdG9jb2xzOlsiaHR0cCIsImh0dHBzIiwiZmlsZSIsImJsb2IiLCJ1cmwiLCJkYXRhIl19O2NvbnN0IFR0PXR5cGVvZiB3aW5kb3c8InUiJiZ0eXBlb2YgZG9jdW1lbnQ8InUiLG5yPSJvYmpl''@;'; put 'put ''Y3QiPT10eXBlb2YgbmF2aWdhdG9yJiZuYXZpZ2F0b3J8fHZvaWQgMCxodD1UdCYmKCFucnx8WyJSZWFjdE5hdGl2ZSIsIk5hdGl2ZVNjcmlwdCIsIk5TIl0uaW5kZXhPZihuci5wcm9kdWN0KTwwKSx4dD10eXBlb2YgV29ya2VyR2xvYmFsU2NvcGU8InUiJiZzZWxmIGluc3RhbmNlb2YgV29y''@;'; put 'put ''a2VyR2xvYmFsU2NvcGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBzZWxmLmltcG9ydFNjcmlwdHMsam49VHQmJndpbmRvdy5sb2NhdGlvbi5ocmVmfHwiaHR0cDovL2xvY2FsaG9zdCI7dmFyIHp0PXsuLi5PYmplY3QuZnJlZXplKHtfX3Byb3RvX186bnVsbCxoYXNCcm93c2VyRW52OlR0LGhhc1N0''@;'; put 'put ''YW5kYXJkQnJvd3NlcldlYldvcmtlckVudjp4dCxoYXNTdGFuZGFyZEJyb3dzZXJFbnY6aHQsbmF2aWdhdG9yOm5yLG9yaWdpbjpqbn0pLC4uLldlfTtmdW5jdGlvbiBJaShTdCl7ZnVuY3Rpb24gQnQoX24sbW4sSW4sYm4pe2xldCB1cj1fbltibisrXTtpZigiX19wcm90b19fIj09PXVyKXJl''@;'; put 'put ''dHVybiEwO2NvbnN0IGJpPU51bWJlci5pc0Zpbml0ZSgrdXIpLEZyPWJuPj1fbi5sZW5ndGg7cmV0dXJuIHVyPSF1ciYmRHQuaXNBcnJheShJbik/SW4ubGVuZ3RoOnVyLEZyPyhJblt1cl09RHQuaGFzT3duUHJvcChJbix1cik/W0luW3VyXSxtbl06bW4sIWJpKTooKCFJblt1cl18fCFEdC5p''@;'; put 'put ''c09iamVjdChJblt1cl0pKSYmKEluW3VyXT1bXSksQnQoX24sbW4sSW5bdXJdLGJuKSYmRHQuaXNBcnJheShJblt1cl0pJiYoSW5bdXJdPWZ1bmN0aW9uIGZuKFN0KXtjb25zdCBCdD17fSxfbj1PYmplY3Qua2V5cyhTdCk7bGV0IG1uO2NvbnN0IEluPV9uLmxlbmd0aDtsZXQgYm47Zm9yKG1u''@;'; put 'put ''PTA7bW48SW47bW4rKylibj1fblttbl0sQnRbYm5dPVN0W2JuXTtyZXR1cm4gQnR9KEluW3VyXSkpLCFiaSl9aWYoRHQuaXNGb3JtRGF0YShTdCkmJkR0LmlzRnVuY3Rpb24oU3QuZW50cmllcykpe2NvbnN0IF9uPXt9O3JldHVybiBEdC5mb3JFYWNoRW50cnkoU3QsKG1uLEluKT0+e0J0KGZ1''@;'; put 'put ''bmN0aW9uIGNuKFN0KXtyZXR1cm4gRHQubWF0Y2hBbGwoL1x3K3xcWyhcdyopXS9nLFN0KS5tYXAoQnQ9PiJbXSI9PT1CdFswXT8iIjpCdFsxXXx8QnRbMF0pfShtbiksSW4sX24sMCl9KSxfbn1yZXR1cm4gbnVsbH1jb25zdCBlbj17dHJhbnNpdGlvbmFsOlJuLGFkYXB0ZXI6WyJ4aHIiLCJo''@;'; put 'put ''dHRwIiwiZmV0Y2giXSx0cmFuc2Zvcm1SZXF1ZXN0OltmdW5jdGlvbihCdCxfbil7Y29uc3QgbW49X24uZ2V0Q29udGVudFR5cGUoKXx8IiIsSW49bW4uaW5kZXhPZigiYXBwbGljYXRpb24vanNvbiIpPi0xLGJuPUR0LmlzT2JqZWN0KEJ0KTtpZihibiYmRHQuaXNIVE1MRm9ybShCdCkmJihC''@;'; put 'put ''dD1uZXcgRm9ybURhdGEoQnQpKSxEdC5pc0Zvcm1EYXRhKEJ0KSlyZXR1cm4gSW4/SlNPTi5zdHJpbmdpZnkoSWkoQnQpKTpCdDtpZihEdC5pc0FycmF5QnVmZmVyKEJ0KXx8RHQuaXNCdWZmZXIoQnQpfHxEdC5pc1N0cmVhbShCdCl8fER0LmlzRmlsZShCdCl8fER0LmlzQmxvYihCdCl8fER0''@;'; put 'put ''LmlzUmVhZGFibGVTdHJlYW0oQnQpKXJldHVybiBCdDtpZihEdC5pc0FycmF5QnVmZmVyVmlldyhCdCkpcmV0dXJuIEJ0LmJ1ZmZlcjtpZihEdC5pc1VSTFNlYXJjaFBhcmFtcyhCdCkpcmV0dXJuIF9uLnNldENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7''@;'; put 'put ''Y2hhcnNldD11dGYtOCIsITEpLEJ0LnRvU3RyaW5nKCk7bGV0IGJpO2lmKGJuKXtpZihtbi5pbmRleE9mKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKT4tMSlyZXR1cm4gZnVuY3Rpb24gaGkoU3QsQnQpe3JldHVybiBRdChTdCxuZXcgenQuY2xhc3Nlcy5VUkxTZWFyY2hQ''@;'; put 'put ''YXJhbXMsT2JqZWN0LmFzc2lnbih7dmlzaXRvcjpmdW5jdGlvbihfbixtbixJbixibil7cmV0dXJuIHp0LmlzTm9kZSYmRHQuaXNCdWZmZXIoX24pPyh0aGlzLmFwcGVuZChtbixfbi50b1N0cmluZygiYmFzZTY0IikpLCExKTpibi5kZWZhdWx0VmlzaXRvci5hcHBseSh0aGlzLGFyZ3VtZW50''@;'; put 'put ''cyl9fSxCdCkpfShCdCx0aGlzLmZvcm1TZXJpYWxpemVyKS50b1N0cmluZygpO2lmKChiaT1EdC5pc0ZpbGVMaXN0KEJ0KSl8fG1uLmluZGV4T2YoIm11bHRpcGFydC9mb3JtLWRhdGEiKT4tMSl7Y29uc3QgRnI9dGhpcy5lbnYmJnRoaXMuZW52LkZvcm1EYXRhO3JldHVybiBRdChiaT97ImZp''@;'; put 'put ''bGVzW10iOkJ0fTpCdCxGciYmbmV3IEZyLHRoaXMuZm9ybVNlcmlhbGl6ZXIpfX1yZXR1cm4gYm58fEluPyhfbi5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24vanNvbiIsITEpLGZ1bmN0aW9uIFh0KFN0LEJ0LF9uKXtpZihEdC5pc1N0cmluZyhTdCkpdHJ5e3JldHVybihCdHx8SlNPTi5w''@;'; put 'put ''YXJzZSkoU3QpLER0LnRyaW0oU3QpfWNhdGNoKG1uKXtpZigiU3ludGF4RXJyb3IiIT09bW4ubmFtZSl0aHJvdyBtbn1yZXR1cm4oX258fEpTT04uc3RyaW5naWZ5KShTdCl9KEJ0KSk6QnR9XSx0cmFuc2Zvcm1SZXNwb25zZTpbZnVuY3Rpb24oQnQpe2NvbnN0IF9uPXRoaXMudHJhbnNpdGlv''@;'; put 'put ''bmFsfHxlbi50cmFuc2l0aW9uYWwsbW49X24mJl9uLmZvcmNlZEpTT05QYXJzaW5nLEluPSJqc29uIj09PXRoaXMucmVzcG9uc2VUeXBlO2lmKER0LmlzUmVzcG9uc2UoQnQpfHxEdC5pc1JlYWRhYmxlU3RyZWFtKEJ0KSlyZXR1cm4gQnQ7aWYoQnQmJkR0LmlzU3RyaW5nKEJ0KSYmKG1uJiYh''@;'; put 'put ''dGhpcy5yZXNwb25zZVR5cGV8fEluKSl7Y29uc3QgdXI9IShfbiYmX24uc2lsZW50SlNPTlBhcnNpbmcpJiZJbjt0cnl7cmV0dXJuIEpTT04ucGFyc2UoQnQpfWNhdGNoKGJpKXtpZih1cil0aHJvdyJTeW50YXhFcnJvciI9PT1iaS5uYW1lP2l0LmZyb20oYmksaXQuRVJSX0JBRF9SRVNQT05T''@;'; put 'put ''RSx0aGlzLG51bGwsdGhpcy5yZXNwb25zZSk6Yml9fXJldHVybiBCdH1dLHRpbWVvdXQ6MCx4c3JmQ29va2llTmFtZToiWFNSRi1UT0tFTiIseHNyZkhlYWRlck5hbWU6IlgtWFNSRi1UT0tFTiIsbWF4Q29udGVudExlbmd0aDotMSxtYXhCb2R5TGVuZ3RoOi0xLGVudjp7Rm9ybURhdGE6enQu''@;'; put 'put ''Y2xhc3Nlcy5Gb3JtRGF0YSxCbG9iOnp0LmNsYXNzZXMuQmxvYn0sdmFsaWRhdGVTdGF0dXM6ZnVuY3Rpb24oQnQpe3JldHVybiBCdD49MjAwJiZCdDwzMDB9LGhlYWRlcnM6e2NvbW1vbjp7QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLyoiLCJDb250ZW50LVR5cGUi''@;'; put 'put ''OnZvaWQgMH19fTtEdC5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsInBvc3QiLCJwdXQiLCJwYXRjaCJdLFN0PT57ZW4uaGVhZGVyc1tTdF09e319KTt2YXIgdWE9ZW47Y29uc3QgRWk9RHQudG9PYmplY3RTZXQoWyJhZ2UiLCJhdXRob3JpemF0aW9uIiwiY29udGVudC1sZW5ndGgi''@;'; put 'put ''LCJjb250ZW50LXR5cGUiLCJldGFnIiwiZXhwaXJlcyIsImZyb20iLCJob3N0IiwiaWYtbW9kaWZpZWQtc2luY2UiLCJpZi11bm1vZGlmaWVkLXNpbmNlIiwibGFzdC1tb2RpZmllZCIsImxvY2F0aW9uIiwibWF4LWZvcndhcmRzIiwicHJveHktYXV0aG9yaXphdGlvbiIsInJlZmVyZXIiLCJy''@;'; put 'put ''ZXRyeS1hZnRlciIsInVzZXItYWdlbnQiXSksV249U3ltYm9sKCJpbnRlcm5hbHMiKTtmdW5jdGlvbiAkaShTdCl7cmV0dXJuIFN0JiZTdHJpbmcoU3QpLnRyaW0oKS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIGVpKFN0KXtyZXR1cm4hMT09PVN0fHxudWxsPT1TdD9TdDpEdC5pc0FycmF5KFN0''@;'; put 'put ''KT9TdC5tYXAoZWkpOlN0cmluZyhTdCl9ZnVuY3Rpb24gTmkoU3QsQnQsX24sbW4sSW4pe2lmKER0LmlzRnVuY3Rpb24obW4pKXJldHVybiBtbi5jYWxsKHRoaXMsQnQsX24pO2lmKEluJiYoQnQ9X24pLER0LmlzU3RyaW5nKEJ0KSl7aWYoRHQuaXNTdHJpbmcobW4pKXJldHVybi0xIT09QnQu''@;'; put 'put ''aW5kZXhPZihtbik7aWYoRHQuaXNSZWdFeHAobW4pKXJldHVybiBtbi50ZXN0KEJ0KX19Y2xhc3MgV2l7Y29uc3RydWN0b3IoQnQpe0J0JiZ0aGlzLnNldChCdCl9c2V0KEJ0LF9uLG1uKXtjb25zdCBJbj10aGlzO2Z1bmN0aW9uIGJuKGJpLEZyLHRhKXtjb25zdCBvYT0kaShGcik7aWYoIW9h''@;'; put 'put ''KXRocm93IG5ldyBFcnJvcigiaGVhZGVyIG5hbWUgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmciKTtjb25zdCBWYT1EdC5maW5kS2V5KEluLG9hKTsoIVZhfHx2b2lkIDA9PT1JbltWYV18fCEwPT09dGF8fHZvaWQgMD09PXRhJiYhMSE9PUluW1ZhXSkmJihJbltWYXx8RnJdPWVpKGJpKSl9''@;'; put 'put ''Y29uc3QgdXI9KGJpLEZyKT0+RHQuZm9yRWFjaChiaSwodGEsb2EpPT5ibih0YSxvYSxGcikpO2lmKER0LmlzUGxhaW5PYmplY3QoQnQpfHxCdCBpbnN0YW5jZW9mIHRoaXMuY29uc3RydWN0b3IpdXIoQnQsX24pO2Vsc2UgaWYoRHQuaXNTdHJpbmcoQnQpJiYoQnQ9QnQudHJpbSgpKSYmIShT''@;'; put 'put ''dD0+L15bLV9hLXpBLVowLTleYHx+LCEjJCUmJyorLl0rJC8udGVzdChTdC50cmltKCkpKShCdCkpdXIoKFN0PT57Y29uc3QgQnQ9e307bGV0IF9uLG1uLEluO3JldHVybiBTdCYmU3Quc3BsaXQoIlxuIikuZm9yRWFjaChmdW5jdGlvbih1cil7SW49dXIuaW5kZXhPZigiOiIpLF9uPXVyLnN1''@;'; put 'put ''YnN0cmluZygwLEluKS50cmltKCkudG9Mb3dlckNhc2UoKSxtbj11ci5zdWJzdHJpbmcoSW4rMSkudHJpbSgpLCEoIV9ufHxCdFtfbl0mJkVpW19uXSkmJigic2V0LWNvb2tpZSI9PT1fbj9CdFtfbl0/QnRbX25dLnB1c2gobW4pOkJ0W19uXT1bbW5dOkJ0W19uXT1CdFtfbl0/QnRbX25dKyIs''@;'; put 'put ''ICIrbW46bW4pfSksQnR9KShCdCksX24pO2Vsc2UgaWYoRHQuaXNIZWFkZXJzKEJ0KSlmb3IoY29uc3RbYmksRnJdb2YgQnQuZW50cmllcygpKWJuKEZyLGJpLG1uKTtlbHNlIG51bGwhPUJ0JiZibihfbixCdCxtbik7cmV0dXJuIHRoaXN9Z2V0KEJ0LF9uKXtpZihCdD0kaShCdCkpe2NvbnN0''@;'; put 'put ''IG1uPUR0LmZpbmRLZXkodGhpcyxCdCk7aWYobW4pe2NvbnN0IEluPXRoaXNbbW5dO2lmKCFfbilyZXR1cm4gSW47aWYoITA9PT1fbilyZXR1cm4gZnVuY3Rpb24gUXIoU3Qpe2NvbnN0IEJ0PU9iamVjdC5jcmVhdGUobnVsbCksX249LyhbXlxzLDs9XSspXHMqKD86PVxzKihbXiw7XSspKT8v''@;'; put 'put ''ZztsZXQgbW47Zm9yKDttbj1fbi5leGVjKFN0KTspQnRbbW5bMV1dPW1uWzJdO3JldHVybiBCdH0oSW4pO2lmKER0LmlzRnVuY3Rpb24oX24pKXJldHVybiBfbi5jYWxsKHRoaXMsSW4sbW4pO2lmKER0LmlzUmVnRXhwKF9uKSlyZXR1cm4gX24uZXhlYyhJbik7dGhyb3cgbmV3IFR5cGVFcnJv''@;'; put 'put ''cigicGFyc2VyIG11c3QgYmUgYm9vbGVhbnxyZWdleHB8ZnVuY3Rpb24iKX19fWhhcyhCdCxfbil7aWYoQnQ9JGkoQnQpKXtjb25zdCBtbj1EdC5maW5kS2V5KHRoaXMsQnQpO3JldHVybiEoIW1ufHx2b2lkIDA9PT10aGlzW21uXXx8X24mJiFOaSgwLHRoaXNbbW5dLG1uLF9uKSl9cmV0dXJu''@;'; put 'put ''ITF9ZGVsZXRlKEJ0LF9uKXtjb25zdCBtbj10aGlzO2xldCBJbj0hMTtmdW5jdGlvbiBibih1cil7aWYodXI9JGkodXIpKXtjb25zdCBiaT1EdC5maW5kS2V5KG1uLHVyKTtiaSYmKCFfbnx8TmkoMCxtbltiaV0sYmksX24pKSYmKGRlbGV0ZSBtbltiaV0sSW49ITApfX1yZXR1cm4gRHQuaXNB''@;'; put 'put ''cnJheShCdCk/QnQuZm9yRWFjaChibik6Ym4oQnQpLElufWNsZWFyKEJ0KXtjb25zdCBfbj1PYmplY3Qua2V5cyh0aGlzKTtsZXQgbW49X24ubGVuZ3RoLEluPSExO2Zvcig7bW4tLTspe2NvbnN0IGJuPV9uW21uXTsoIUJ0fHxOaSgwLHRoaXNbYm5dLGJuLEJ0LCEwKSkmJihkZWxldGUgdGhp''@;'; put 'put ''c1tibl0sSW49ITApfXJldHVybiBJbn1ub3JtYWxpemUoQnQpe2NvbnN0IF9uPXRoaXMsbW49e307cmV0dXJuIER0LmZvckVhY2godGhpcywoSW4sYm4pPT57Y29uc3QgdXI9RHQuZmluZEtleShtbixibik7aWYodXIpcmV0dXJuIF9uW3VyXT1laShJbiksdm9pZCBkZWxldGUgX25bYm5dO2Nv''@;'; put 'put ''bnN0IGJpPUJ0P2Z1bmN0aW9uIERhKFN0KXtyZXR1cm4gU3QudHJpbSgpLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvKFthLXpcZF0pKFx3KikvZywoQnQsX24sbW4pPT5fbi50b1VwcGVyQ2FzZSgpK21uKX0oYm4pOlN0cmluZyhibikudHJpbSgpO2JpIT09Ym4mJmRlbGV0ZSBfbltibl0sX25b''@;'; put 'put ''YmldPWVpKEluKSxtbltiaV09ITB9KSx0aGlzfWNvbmNhdCguLi5CdCl7cmV0dXJuIHRoaXMuY29uc3RydWN0b3IuY29uY2F0KHRoaXMsLi4uQnQpfXRvSlNPTihCdCl7Y29uc3QgX249T2JqZWN0LmNyZWF0ZShudWxsKTtyZXR1cm4gRHQuZm9yRWFjaCh0aGlzLChtbixJbik9PntudWxsIT1t''@;'; put 'put ''biYmITEhPT1tbiYmKF9uW0luXT1CdCYmRHQuaXNBcnJheShtbik/bW4uam9pbigiLCAiKTptbil9KSxfbn1bU3ltYm9sLml0ZXJhdG9yXSgpe3JldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKVtTeW1ib2wuaXRlcmF0b3JdKCl9dG9TdHJpbmcoKXtyZXR1cm4gT2JqZWN0LmVu''@;'; put 'put ''dHJpZXModGhpcy50b0pTT04oKSkubWFwKChbQnQsX25dKT0+QnQrIjogIitfbikuam9pbigiXG4iKX1nZXRbU3ltYm9sLnRvU3RyaW5nVGFnXSgpe3JldHVybiJBeGlvc0hlYWRlcnMifXN0YXRpYyBmcm9tKEJ0KXtyZXR1cm4gQnQgaW5zdGFuY2VvZiB0aGlzP0J0Om5ldyB0aGlzKEJ0KX1z''@;'; put 'put ''dGF0aWMgY29uY2F0KEJ0LC4uLl9uKXtjb25zdCBtbj1uZXcgdGhpcyhCdCk7cmV0dXJuIF9uLmZvckVhY2goSW49Pm1uLnNldChJbikpLG1ufXN0YXRpYyBhY2Nlc3NvcihCdCl7Y29uc3QgbW49KHRoaXNbV25dPXRoaXNbV25dPXthY2Nlc3NvcnM6e319KS5hY2Nlc3NvcnMsSW49dGhpcy5w''@;'; put 'put ''cm90b3R5cGU7ZnVuY3Rpb24gYm4odXIpe2NvbnN0IGJpPSRpKHVyKTttbltiaV18fChmdW5jdGlvbiBMcihTdCxCdCl7Y29uc3QgX249RHQudG9DYW1lbENhc2UoIiAiK0J0KTtbImdldCIsInNldCIsImhhcyJdLmZvckVhY2gobW49PntPYmplY3QuZGVmaW5lUHJvcGVydHkoU3QsbW4rX24s''@;'; put 'put ''e3ZhbHVlOmZ1bmN0aW9uKEluLGJuLHVyKXtyZXR1cm4gdGhpc1ttbl0uY2FsbCh0aGlzLEJ0LEluLGJuLHVyKX0sY29uZmlndXJhYmxlOiEwfSl9KX0oSW4sdXIpLG1uW2JpXT0hMCl9cmV0dXJuIER0LmlzQXJyYXkoQnQpP0J0LmZvckVhY2goYm4pOmJuKEJ0KSx0aGlzfX1XaS5hY2Nlc3Nv''@;'; put 'put ''cihbIkNvbnRlbnQtVHlwZSIsIkNvbnRlbnQtTGVuZ3RoIiwiQWNjZXB0IiwiQWNjZXB0LUVuY29kaW5nIiwiVXNlci1BZ2VudCIsIkF1dGhvcml6YXRpb24iXSksRHQucmVkdWNlRGVzY3JpcHRvcnMoV2kucHJvdG90eXBlLCh7dmFsdWU6U3R9LEJ0KT0+e2xldCBfbj1CdFswXS50b1VwcGVy''@;'; put 'put ''Q2FzZSgpK0J0LnNsaWNlKDEpO3JldHVybntnZXQ6KCk9PlN0LHNldChtbil7dGhpc1tfbl09bW59fX0pLER0LmZyZWV6ZU1ldGhvZHMoV2kpO3ZhciBwYT1XaTtmdW5jdGlvbiBRbihTdCxCdCl7Y29uc3QgX249dGhpc3x8dWEsbW49QnR8fF9uLEluPXBhLmZyb20obW4uaGVhZGVycyk7bGV0''@;'; put 'put ''IGJuPW1uLmRhdGE7cmV0dXJuIER0LmZvckVhY2goU3QsZnVuY3Rpb24oYmkpe2JuPWJpLmNhbGwoX24sYm4sSW4ubm9ybWFsaXplKCksQnQ/QnQuc3RhdHVzOnZvaWQgMCl9KSxJbi5ub3JtYWxpemUoKSxibn1mdW5jdGlvbiBsYShTdCl7cmV0dXJuISghU3R8fCFTdC5fX0NBTkNFTF9fKX1m''@;'; put 'put ''dW5jdGlvbiB5YShTdCxCdCxfbil7aXQuY2FsbCh0aGlzLFN0Pz8iY2FuY2VsZWQiLGl0LkVSUl9DQU5DRUxFRCxCdCxfbiksdGhpcy5uYW1lPSJDYW5jZWxlZEVycm9yIn1mdW5jdGlvbiBMYShTdCxCdCxfbil7Y29uc3QgbW49X24uY29uZmlnLnZhbGlkYXRlU3RhdHVzO19uLnN0YXR1cyYm''@;'; put 'put ''bW4mJiFtbihfbi5zdGF0dXMpP0J0KG5ldyBpdCgiUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZSAiK19uLnN0YXR1cyxbaXQuRVJSX0JBRF9SRVFVRVNULGl0LkVSUl9CQURfUkVTUE9OU0VdW01hdGguZmxvb3IoX24uc3RhdHVzLzEwMCktNF0sX24uY29uZmlnLF9uLnJlcXVlc3Qs''@;'; put 'put ''X24pKTpTdChfbil9RHQuaW5oZXJpdHMoeWEsaXQse19fQ0FOQ0VMX186ITB9KTtjb25zdCBOcz0oU3QsQnQsX249Myk9PntsZXQgbW49MDtjb25zdCBJbj1mdW5jdGlvbiB0aShTdCxCdCl7U3Q9U3R8fDEwO2NvbnN0IF9uPW5ldyBBcnJheShTdCksbW49bmV3IEFycmF5KFN0KTtsZXQgdXIs''@;'; put 'put ''SW49MCxibj0wO3JldHVybiBCdD12b2lkIDAhPT1CdD9CdDoxZTMsZnVuY3Rpb24oRnIpe2NvbnN0IHRhPURhdGUubm93KCksb2E9bW5bYm5dO3VyfHwodXI9dGEpLF9uW0luXT1GcixtbltJbl09dGE7bGV0IFZhPWJuLCRvPTA7Zm9yKDtWYSE9PUluOykkbys9X25bVmErK10sVmElPVN0O2lm''@;'; put 'put ''KEluPShJbisxKSVTdCxJbj09PWJuJiYoYm49KGJuKzEpJVN0KSx0YS11cjxCdClyZXR1cm47Y29uc3QgWGw9b2EmJnRhLW9hO3JldHVybiBYbD9NYXRoLnJvdW5kKDFlMyokby9YbCk6dm9pZCAwfX0oNTAsMjUwKTtyZXR1cm4gZnVuY3Rpb24gZ28oU3QsQnQpe2xldCBJbixibixfbj0wLG1u''@;'; put 'put ''PTFlMy9CdDtjb25zdCB1cj0odGEsb2E9RGF0ZS5ub3coKSk9Pntfbj1vYSxJbj1udWxsLGJuJiYoY2xlYXJUaW1lb3V0KGJuKSxibj1udWxsKSxTdC5hcHBseShudWxsLHRhKX07cmV0dXJuWyguLi50YSk9Pntjb25zdCBvYT1EYXRlLm5vdygpLFZhPW9hLV9uO1ZhPj1tbj91cih0YSxvYSk6''@;'; put 'put ''KEluPXRhLGJufHwoYm49c2V0VGltZW91dCgoKT0+e2JuPW51bGwsdXIoSW4pfSxtbi1WYSkpKX0sKCk9PkluJiZ1cihJbildfShibj0+e2NvbnN0IHVyPWJuLmxvYWRlZCxiaT1ibi5sZW5ndGhDb21wdXRhYmxlP2JuLnRvdGFsOnZvaWQgMCxGcj11ci1tbix0YT1JbihGcik7bW49dXIsU3Qo''@;'; put 'put ''e2xvYWRlZDp1cix0b3RhbDpiaSxwcm9ncmVzczpiaT91ci9iaTp2b2lkIDAsYnl0ZXM6RnIscmF0ZTp0YXx8dm9pZCAwLGVzdGltYXRlZDp0YSYmYmkmJnVyPD1iaT8oYmktdXIpL3RhOnZvaWQgMCxldmVudDpibixsZW5ndGhDb21wdXRhYmxlOm51bGwhPWJpLFtCdD8iZG93bmxvYWQiOiJ1''@;'; put 'put ''cGxvYWQiXTohMH0pfSxfbil9LGJsPShTdCxCdCk9Pntjb25zdCBfbj1udWxsIT1TdDtyZXR1cm5bbW49PkJ0WzBdKHtsZW5ndGhDb21wdXRhYmxlOl9uLHRvdGFsOlN0LGxvYWRlZDptbn0pLEJ0WzFdXX0scHU9U3Q9PiguLi5CdCk9PkR0LmFzYXAoKCk9PlN0KC4uLkJ0KSk7dmFyIExjPXp0''@;'; put 'put ''Lmhhc1N0YW5kYXJkQnJvd3NlckVudj8oKFN0LEJ0KT0+X249Pihfbj1uZXcgVVJMKF9uLHp0Lm9yaWdpbiksU3QucHJvdG9jb2w9PT1fbi5wcm90b2NvbCYmU3QuaG9zdD09PV9uLmhvc3QmJihCdHx8U3QucG9ydD09PV9uLnBvcnQpKSkobmV3IFVSTCh6dC5vcmlnaW4pLHp0Lm5hdmlnYXRv''@;'; put 'put ''ciYmLyhtc2llfHRyaWRlbnQpL2kudGVzdCh6dC5uYXZpZ2F0b3IudXNlckFnZW50KSk6KCk9PiEwLEQwPXp0Lmhhc1N0YW5kYXJkQnJvd3NlckVudj97d3JpdGUoU3QsQnQsX24sbW4sSW4sYm4pe2NvbnN0IHVyPVtTdCsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KEJ0KV07RHQuaXNOdW1iZXIo''@;'; put 'put ''X24pJiZ1ci5wdXNoKCJleHBpcmVzPSIrbmV3IERhdGUoX24pLnRvR01UU3RyaW5nKCkpLER0LmlzU3RyaW5nKG1uKSYmdXIucHVzaCgicGF0aD0iK21uKSxEdC5pc1N0cmluZyhJbikmJnVyLnB1c2goImRvbWFpbj0iK0luKSwhMD09PWJuJiZ1ci5wdXNoKCJzZWN1cmUiKSxkb2N1bWVudC5j''@;'; put 'put ''b29raWU9dXIuam9pbigiOyAiKX0scmVhZChTdCl7Y29uc3QgQnQ9ZG9jdW1lbnQuY29va2llLm1hdGNoKG5ldyBSZWdFeHAoIihefDtcXHMqKSgiK1N0KyIpPShbXjtdKikiKSk7cmV0dXJuIEJ0P2RlY29kZVVSSUNvbXBvbmVudChCdFszXSk6bnVsbH0scmVtb3ZlKFN0KXt0aGlzLndyaXRl''@;'; put 'put ''KFN0LCIiLERhdGUubm93KCktODY0ZTUpfX06e3dyaXRlKCl7fSxyZWFkOigpPT5udWxsLHJlbW92ZSgpe319O2Z1bmN0aW9uIHVpKFN0LEJ0LF9uKXtsZXQgbW49IWZ1bmN0aW9uIGlyKFN0KXtyZXR1cm4vXihbYS16XVthLXpcZCtcLS5dKjopP1wvXC8vaS50ZXN0KFN0KX0oQnQpO3JldHVy''@;'; put 'put ''biBTdCYmbW58fDA9PV9uP2Z1bmN0aW9uIHhhKFN0LEJ0KXtyZXR1cm4gQnQ/U3QucmVwbGFjZSgvXC8/XC8kLywiIikrIi8iK0J0LnJlcGxhY2UoL15cLysvLCIiKTpTdH0oU3QsQnQpOkJ0fWNvbnN0IFZ0PVN0PT5TdCBpbnN0YW5jZW9mIHBhP3suLi5TdH06U3Q7ZnVuY3Rpb24gSnIoU3Qs''@;'; put 'put ''QnQpe0J0PUJ0fHx7fTtjb25zdCBfbj17fTtmdW5jdGlvbiBtbih0YSxvYSxWYSwkbyl7cmV0dXJuIER0LmlzUGxhaW5PYmplY3QodGEpJiZEdC5pc1BsYWluT2JqZWN0KG9hKT9EdC5tZXJnZS5jYWxsKHtjYXNlbGVzczokb30sdGEsb2EpOkR0LmlzUGxhaW5PYmplY3Qob2EpP0R0Lm1lcmdl''@;'; put 'put ''KHt9LG9hKTpEdC5pc0FycmF5KG9hKT9vYS5zbGljZSgpOm9hfWZ1bmN0aW9uIEluKHRhLG9hLFZhLCRvKXtyZXR1cm4gRHQuaXNVbmRlZmluZWQob2EpP0R0LmlzVW5kZWZpbmVkKHRhKT92b2lkIDA6bW4odm9pZCAwLHRhLDAsJG8pOm1uKHRhLG9hLDAsJG8pfWZ1bmN0aW9uIGJuKHRhLG9h''@;'; put 'put ''KXtpZighRHQuaXNVbmRlZmluZWQob2EpKXJldHVybiBtbih2b2lkIDAsb2EpfWZ1bmN0aW9uIHVyKHRhLG9hKXtyZXR1cm4gRHQuaXNVbmRlZmluZWQob2EpP0R0LmlzVW5kZWZpbmVkKHRhKT92b2lkIDA6bW4odm9pZCAwLHRhKTptbih2b2lkIDAsb2EpfWZ1bmN0aW9uIGJpKHRhLG9hLFZh''@;'; put 'put ''KXtyZXR1cm4gVmEgaW4gQnQ/bW4odGEsb2EpOlZhIGluIFN0P21uKHZvaWQgMCx0YSk6dm9pZCAwfWNvbnN0IEZyPXt1cmw6Ym4sbWV0aG9kOmJuLGRhdGE6Ym4sYmFzZVVSTDp1cix0cmFuc2Zvcm1SZXF1ZXN0OnVyLHRyYW5zZm9ybVJlc3BvbnNlOnVyLHBhcmFtc1NlcmlhbGl6ZXI6dXIs''@;'; put 'put ''dGltZW91dDp1cix0aW1lb3V0TWVzc2FnZTp1cix3aXRoQ3JlZGVudGlhbHM6dXIsd2l0aFhTUkZUb2tlbjp1cixhZGFwdGVyOnVyLHJlc3BvbnNlVHlwZTp1cix4c3JmQ29va2llTmFtZTp1cix4c3JmSGVhZGVyTmFtZTp1cixvblVwbG9hZFByb2dyZXNzOnVyLG9uRG93bmxvYWRQcm9ncmVz''@;'; put 'put ''czp1cixkZWNvbXByZXNzOnVyLG1heENvbnRlbnRMZW5ndGg6dXIsbWF4Qm9keUxlbmd0aDp1cixiZWZvcmVSZWRpcmVjdDp1cix0cmFuc3BvcnQ6dXIsaHR0cEFnZW50OnVyLGh0dHBzQWdlbnQ6dXIsY2FuY2VsVG9rZW46dXIsc29ja2V0UGF0aDp1cixyZXNwb25zZUVuY29kaW5nOnVyLHZh''@;'; put 'put ''bGlkYXRlU3RhdHVzOmJpLGhlYWRlcnM6KHRhLG9hLFZhKT0+SW4oVnQodGEpLFZ0KG9hKSwwLCEwKX07cmV0dXJuIER0LmZvckVhY2goT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSxTdCxCdCkpLGZ1bmN0aW9uKG9hKXtjb25zdCBWYT1GcltvYV18fEluLCRvPVZhKFN0W29hXSxCdFtv''@;'; put 'put ''YV0sb2EpO0R0LmlzVW5kZWZpbmVkKCRvKSYmVmEhPT1iaXx8KF9uW29hXT0kbyl9KSxfbn12YXIgYjA9U3Q9Pntjb25zdCBCdD1Kcih7fSxTdCk7bGV0IEZyLHtkYXRhOl9uLHdpdGhYU1JGVG9rZW46bW4seHNyZkhlYWRlck5hbWU6SW4seHNyZkNvb2tpZU5hbWU6Ym4saGVhZGVyczp1cixh''@;'; put 'put ''dXRoOmJpfT1CdDtpZihCdC5oZWFkZXJzPXVyPXBhLmZyb20odXIpLEJ0LnVybD1Pcih1aShCdC5iYXNlVVJMLEJ0LnVybCksU3QucGFyYW1zLFN0LnBhcmFtc1NlcmlhbGl6ZXIpLGJpJiZ1ci5zZXQoIkF1dGhvcml6YXRpb24iLCJCYXNpYyAiK2J0b2EoKGJpLnVzZXJuYW1lfHwiIikrIjoi''@;'; put 'put ''KyhiaS5wYXNzd29yZD91bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoYmkucGFzc3dvcmQpKToiIikpKSxEdC5pc0Zvcm1EYXRhKF9uKSlpZih6dC5oYXNTdGFuZGFyZEJyb3dzZXJFbnZ8fHp0Lmhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudil1ci5zZXRDb250ZW50VHlwZSh2b2lk''@;'; put 'put ''IDApO2Vsc2UgaWYoITEhPT0oRnI9dXIuZ2V0Q29udGVudFR5cGUoKSkpe2NvbnN0W3RhLC4uLm9hXT1Gcj9Gci5zcGxpdCgiOyIpLm1hcChWYT0+VmEudHJpbSgpKS5maWx0ZXIoQm9vbGVhbik6W107dXIuc2V0Q29udGVudFR5cGUoW3RhfHwibXVsdGlwYXJ0L2Zvcm0tZGF0YSIsLi4ub2Fd''@;'; put 'put ''LmpvaW4oIjsgIikpfWlmKHp0Lmhhc1N0YW5kYXJkQnJvd3NlckVudiYmKG1uJiZEdC5pc0Z1bmN0aW9uKG1uKSYmKG1uPW1uKEJ0KSksbW58fCExIT09bW4mJkxjKEJ0LnVybCkpKXtjb25zdCB0YT1JbiYmYm4mJkQwLnJlYWQoYm4pO3RhJiZ1ci5zZXQoSW4sdGEpfXJldHVybiBCdH0sTHU9''@;'; put 'put ''dHlwZW9mIFhNTEh0dHBSZXF1ZXN0PCJ1IiYmZnVuY3Rpb24oU3Qpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihfbixtbil7Y29uc3QgSW49YjAoU3QpO2xldCBibj1Jbi5kYXRhO2NvbnN0IHVyPXBhLmZyb20oSW4uaGVhZGVycykubm9ybWFsaXplKCk7bGV0IG9hLFZhLCRvLFhsLHRv''@;'; put 'put ''LHtyZXNwb25zZVR5cGU6Ymksb25VcGxvYWRQcm9ncmVzczpGcixvbkRvd25sb2FkUHJvZ3Jlc3M6dGF9PUluO2Z1bmN0aW9uIF9vKCl7WGwmJlhsKCksdG8mJnRvKCksSW4uY2FuY2VsVG9rZW4mJkluLmNhbmNlbFRva2VuLnVuc3Vic2NyaWJlKG9hKSxJbi5zaWduYWwmJkluLnNpZ25hbC5y''@;'; put 'put ''ZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIsb2EpfWxldCBqaT1uZXcgWE1MSHR0cFJlcXVlc3Q7ZnVuY3Rpb24gUGMoKXtpZighamkpcmV0dXJuO2NvbnN0IENhPXBhLmZyb20oImdldEFsbFJlc3BvbnNlSGVhZGVycyJpbiBqaSYmamkuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpO0xhKGZ1''@;'; put 'put ''bmN0aW9uKCQwKXtfbigkMCksX28oKX0sZnVuY3Rpb24oJDApe21uKCQwKSxfbygpfSx7ZGF0YTpiaSYmInRleHQiIT09YmkmJiJqc29uIiE9PWJpP2ppLnJlc3BvbnNlOmppLnJlc3BvbnNlVGV4dCxzdGF0dXM6amkuc3RhdHVzLHN0YXR1c1RleHQ6amkuc3RhdHVzVGV4dCxoZWFkZXJzOkNh''@;'; put 'put ''LGNvbmZpZzpTdCxyZXF1ZXN0OmppfSksamk9bnVsbH1qaS5vcGVuKEluLm1ldGhvZC50b1VwcGVyQ2FzZSgpLEluLnVybCwhMCksamkudGltZW91dD1Jbi50aW1lb3V0LCJvbmxvYWRlbmQiaW4gamk/amkub25sb2FkZW5kPVBjOmppLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpeyFq''@;'; put 'put ''aXx8NCE9PWppLnJlYWR5U3RhdGV8fDA9PT1qaS5zdGF0dXMmJighamkucmVzcG9uc2VVUkx8fDAhPT1qaS5yZXNwb25zZVVSTC5pbmRleE9mKCJmaWxlOiIpKXx8c2V0VGltZW91dChQYyl9LGppLm9uYWJvcnQ9ZnVuY3Rpb24oKXtqaSYmKG1uKG5ldyBpdCgiUmVxdWVzdCBhYm9ydGVkIixp''@;'; put 'put ''dC5FQ09OTkFCT1JURUQsU3QsamkpKSxqaT1udWxsKX0samkub25lcnJvcj1mdW5jdGlvbigpe21uKG5ldyBpdCgiTmV0d29yayBFcnJvciIsaXQuRVJSX05FVFdPUkssU3QsamkpKSxqaT1udWxsfSxqaS5vbnRpbWVvdXQ9ZnVuY3Rpb24oKXtsZXQgVGE9SW4udGltZW91dD8idGltZW91dCBv''@;'; put 'put ''ZiAiK0luLnRpbWVvdXQrIm1zIGV4Y2VlZGVkIjoidGltZW91dCBleGNlZWRlZCI7SW4udGltZW91dEVycm9yTWVzc2FnZSYmKFRhPUluLnRpbWVvdXRFcnJvck1lc3NhZ2UpLG1uKG5ldyBpdChUYSwoSW4udHJhbnNpdGlvbmFsfHxSbikuY2xhcmlmeVRpbWVvdXRFcnJvcj9pdC5FVElNRURP''@;'; put 'put ''VVQ6aXQuRUNPTk5BQk9SVEVELFN0LGppKSksamk9bnVsbH0sdm9pZCAwPT09Ym4mJnVyLnNldENvbnRlbnRUeXBlKG51bGwpLCJzZXRSZXF1ZXN0SGVhZGVyImluIGppJiZEdC5mb3JFYWNoKHVyLnRvSlNPTigpLGZ1bmN0aW9uKFRhLFhoKXtqaS5zZXRSZXF1ZXN0SGVhZGVyKFhoLFRhKX0p''@;'; put 'put ''LER0LmlzVW5kZWZpbmVkKEluLndpdGhDcmVkZW50aWFscyl8fChqaS53aXRoQ3JlZGVudGlhbHM9ISFJbi53aXRoQ3JlZGVudGlhbHMpLGJpJiYianNvbiIhPT1iaSYmKGppLnJlc3BvbnNlVHlwZT1Jbi5yZXNwb25zZVR5cGUpLHRhJiYoWyRvLHRvXT1Ocyh0YSwhMCksamkuYWRkRXZlbnRM''@;'; put 'put ''aXN0ZW5lcigicHJvZ3Jlc3MiLCRvKSksRnImJmppLnVwbG9hZCYmKFtWYSxYbF09TnMoRnIpLGppLnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsVmEpLGppLnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCJsb2FkZW5kIixYbCkpLChJbi5jYW5jZWxUb2tlbnx8SW4uc2lnbmFs''@;'; put 'put ''KSYmKG9hPUNhPT57amkmJihtbighQ2F8fENhLnR5cGU/bmV3IHlhKG51bGwsU3QsamkpOkNhKSxqaS5hYm9ydCgpLGppPW51bGwpfSxJbi5jYW5jZWxUb2tlbiYmSW4uY2FuY2VsVG9rZW4uc3Vic2NyaWJlKG9hKSxJbi5zaWduYWwmJihJbi5zaWduYWwuYWJvcnRlZD9vYSgpOkluLnNpZ25h''@;'; put 'put ''bC5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsb2EpKSk7Y29uc3Qgemw9ZnVuY3Rpb24gRmEoU3Qpe2NvbnN0IEJ0PS9eKFstK1x3XXsxLDI1fSkoOj9cL1wvfDopLy5leGVjKFN0KTtyZXR1cm4gQnQmJkJ0WzFdfHwiIn0oSW4udXJsKTt6bCYmLTE9PT16dC5wcm90b2NvbHMuaW5kZXhPZih6''@;'; put 'put ''bCk/bW4obmV3IGl0KCJVbnN1cHBvcnRlZCBwcm90b2NvbCAiK3psKyI6IixpdC5FUlJfQkFEX1JFUVVFU1QsU3QpKTpqaS5zZW5kKGJufHxudWxsKX0pfSxvZD0oU3QsQnQpPT57Y29uc3R7bGVuZ3RoOl9ufT1TdD1TdD9TdC5maWx0ZXIoQm9vbGVhbik6W107aWYoQnR8fF9uKXtsZXQgSW4s''@;'; put 'put ''bW49bmV3IEFib3J0Q29udHJvbGxlcjtjb25zdCBibj1mdW5jdGlvbih0YSl7aWYoIUluKXtJbj0hMCxiaSgpO2NvbnN0IG9hPXRhIGluc3RhbmNlb2YgRXJyb3I/dGE6dGhpcy5yZWFzb247bW4uYWJvcnQob2EgaW5zdGFuY2VvZiBpdD9vYTpuZXcgeWEob2EgaW5zdGFuY2VvZiBFcnJvcj9v''@;'; put 'put ''YS5tZXNzYWdlOm9hKSl9fTtsZXQgdXI9QnQmJnNldFRpbWVvdXQoKCk9Pnt1cj1udWxsLGJuKG5ldyBpdChgdGltZW91dCAke0J0fSBvZiBtcyBleGNlZWRlZGAsaXQuRVRJTUVET1VUKSl9LEJ0KTtjb25zdCBiaT0oKT0+e1N0JiYodXImJmNsZWFyVGltZW91dCh1ciksdXI9bnVsbCxTdC5m''@;'; put 'put ''b3JFYWNoKHRhPT57dGEudW5zdWJzY3JpYmU/dGEudW5zdWJzY3JpYmUoYm4pOnRhLnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0Iixibil9KSxTdD1udWxsKX07U3QuZm9yRWFjaCh0YT0+dGEuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGJuKSk7Y29uc3R7c2lnbmFsOkZyfT1tbjtyZXR1''@;'; put 'put ''cm4gRnIudW5zdWJzY3JpYmU9KCk9PkR0LmFzYXAoYmkpLEZyfX07Y29uc3QgWWg9ZnVuY3Rpb24qKFN0LEJ0KXtsZXQgX249U3QuYnl0ZUxlbmd0aDtpZighQnR8fF9uPEJ0KXJldHVybiB2b2lkKHlpZWxkIFN0KTtsZXQgSW4sbW49MDtmb3IoO21uPF9uOylJbj1tbitCdCx5aWVsZCBTdC5z''@;'; put 'put ''bGljZShtbixJbiksbW49SW59LGNmPWZ1bmN0aW9uKCl7dmFyIFN0PV93cmFwQXN5bmNHZW5lcmF0b3IoZnVuY3Rpb24qKEJ0LF9uKXt2YXIgYm4sbW49ITEsSW49ITE7dHJ5e2Zvcih2YXIgYmksdXI9X2FzeW5jSXRlcmF0b3IoQ3MoQnQpKTttbj0hKGJpPXlpZWxkIF9hd2FpdEFzeW5jR2Vu''@;'; put 'put ''ZXJhdG9yKHVyLm5leHQoKSkpLmRvbmU7bW49ITEpe2NvbnN0IEZyPWJpLnZhbHVlO3lpZWxkKl9hc3luY0dlbmVyYXRvckRlbGVnYXRlKF9hc3luY0l0ZXJhdG9yKFloKEZyLF9uKSksX2F3YWl0QXN5bmNHZW5lcmF0b3IpfX1jYXRjaChGcil7SW49ITAsYm49RnJ9ZmluYWxseXt0cnl7bW4m''@;'; put 'put ''Jm51bGwhPXVyLnJldHVybiYmKHlpZWxkIF9hd2FpdEFzeW5jR2VuZXJhdG9yKHVyLnJldHVybigpKSl9ZmluYWxseXtpZihJbil0aHJvdyBibn19fSk7cmV0dXJuIGZ1bmN0aW9uKF9uLG1uKXtyZXR1cm4gU3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSxDcz1mdW5jdGlvbigpe3ZhciBT''@;'; put 'put ''dD1fd3JhcEFzeW5jR2VuZXJhdG9yKGZ1bmN0aW9uKihCdCl7aWYoQnRbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKXJldHVybiB2b2lkKHlpZWxkKl9hc3luY0dlbmVyYXRvckRlbGVnYXRlKF9hc3luY0l0ZXJhdG9yKEJ0KSxfYXdhaXRBc3luY0dlbmVyYXRvcikpO2NvbnN0IF9uPUJ0LmdldFJl''@;'; put 'put ''YWRlcigpO3RyeXtmb3IoOzspe2NvbnN0e2RvbmU6bW4sdmFsdWU6SW59PXlpZWxkIF9hd2FpdEFzeW5jR2VuZXJhdG9yKF9uLnJlYWQoKSk7aWYobW4pYnJlYWs7eWllbGQgSW59fWZpbmFsbHl7eWllbGQgX2F3YWl0QXN5bmNHZW5lcmF0b3IoX24uY2FuY2VsKCkpfX0pO3JldHVybiBmdW5j''@;'; put 'put ''dGlvbihfbil7cmV0dXJuIFN0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCksWWk9KFN0LEJ0LF9uLG1uKT0+e2NvbnN0IEluPWNmKFN0LEJ0KTtsZXQgdXIsYm49MCxiaT1Gcj0+e3VyfHwodXI9ITAsbW4mJm1uKEZyKSl9O3JldHVybiBuZXcgUmVhZGFibGVTdHJlYW0oe3B1bGw6RnI9Pl9h''@;'; put 'put ''c3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKigpe3RyeXtjb25zdHtkb25lOnRhLHZhbHVlOm9hfT15aWVsZCBJbi5uZXh0KCk7aWYodGEpcmV0dXJuIGJpKCksdm9pZCBGci5jbG9zZSgpO2lmKF9uKXtsZXQgJG89Ym4rPW9hLmJ5dGVMZW5ndGg7X24oJG8pfUZyLmVucXVldWUobmV3IFVpbnQ4''@;'; put 'put ''QXJyYXkob2EpKX1jYXRjaCh0YSl7dGhyb3cgYmkodGEpLHRhfX0pKCksY2FuY2VsOkZyPT4oYmkoRnIpLEluLnJldHVybigpKX0se2hpZ2hXYXRlck1hcms6Mn0pfSx5bD0iZnVuY3Rpb24iPT10eXBlb2YgZmV0Y2gmJiJmdW5jdGlvbiI9PXR5cGVvZiBSZXF1ZXN0JiYiZnVuY3Rpb24iPT10''@;'; put 'put ''eXBlb2YgUmVzcG9uc2UsUWM9eWwmJiJmdW5jdGlvbiI9PXR5cGVvZiBSZWFkYWJsZVN0cmVhbSxuNT15bCYmKCJmdW5jdGlvbiI9PXR5cGVvZiBUZXh0RW5jb2Rlcj8oU3Q9PkJ0PT5TdC5lbmNvZGUoQnQpKShuZXcgVGV4dEVuY29kZXIpOmZ1bmN0aW9uKCl7dmFyIFN0PV9hc3luY1RvR2Vu''@;'; put 'put ''ZXJhdG9yKGZ1bmN0aW9uKihCdCl7cmV0dXJuIG5ldyBVaW50OEFycmF5KHlpZWxkIG5ldyBSZXNwb25zZShCdCkuYXJyYXlCdWZmZXIoKSl9KTtyZXR1cm4gZnVuY3Rpb24oQnQpe3JldHVybiBTdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpKSx5MD0oU3QsLi4uQnQpPT57dHJ5e3JldHVy''@;'; put 'put ''biEhU3QoLi4uQnQpfWNhdGNoe3JldHVybiExfX0scjU9UWMmJnkwKCgpPT57bGV0IFN0PSExO2NvbnN0IEJ0PW5ldyBSZXF1ZXN0KHp0Lm9yaWdpbix7Ym9keTpuZXcgUmVhZGFibGVTdHJlYW0sbWV0aG9kOiJQT1NUIixnZXQgZHVwbGV4KCl7cmV0dXJuIFN0PSEwLCJoYWxmIn19KS5oZWFk''@;'; put 'put ''ZXJzLmhhcygiQ29udGVudC1UeXBlIik7cmV0dXJuIFN0JiYhQnR9KSx1Zj1RYyYmeTAoKCk9PkR0LmlzUmVhZGFibGVTdHJlYW0obmV3IFJlc3BvbnNlKCIiKS5ib2R5KSksc2Q9e3N0cmVhbTp1ZiYmKFN0PT5TdC5ib2R5KX07eWwmJihTdD0+e1sidGV4dCIsImFycmF5QnVmZmVyIiwiYmxv''@;'; put 'put ''YiIsImZvcm1EYXRhIiwic3RyZWFtIl0uZm9yRWFjaChCdD0+eyFzZFtCdF0mJihzZFtCdF09RHQuaXNGdW5jdGlvbihTdFtCdF0pP19uPT5fbltCdF0oKTooX24sbW4pPT57dGhyb3cgbmV3IGl0KGBSZXNwb25zZSB0eXBlICcke0J0fScgaXMgbm90IHN1cHBvcnRlZGAsaXQuRVJSX05PVF9T''@;'; put 'put ''VVBQT1JULG1uKX0pfSl9KShuZXcgUmVzcG9uc2UpO2NvbnN0IGRmPWZ1bmN0aW9uKCl7dmFyIFN0PV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihCdCl7cmV0dXJuIG51bGw9PUJ0PzA6RHQuaXNCbG9iKEJ0KT9CdC5zaXplOkR0LmlzU3BlY0NvbXBsaWFudEZvcm0oQnQpPyh5aWVsZCBu''@;'; put 'put ''ZXcgUmVxdWVzdCh6dC5vcmlnaW4se21ldGhvZDoiUE9TVCIsYm9keTpCdH0pLmFycmF5QnVmZmVyKCkpLmJ5dGVMZW5ndGg6RHQuaXNBcnJheUJ1ZmZlclZpZXcoQnQpfHxEdC5pc0FycmF5QnVmZmVyKEJ0KT9CdC5ieXRlTGVuZ3RoOihEdC5pc1VSTFNlYXJjaFBhcmFtcyhCdCkmJihCdCs9''@;'; put 'put ''IiIpLER0LmlzU3RyaW5nKEJ0KT8oeWllbGQgbjUoQnQpKS5ieXRlTGVuZ3RoOnZvaWQgMCl9KTtyZXR1cm4gZnVuY3Rpb24oX24pe3JldHVybiBTdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpLGsxPWZ1bmN0aW9uKCl7dmFyIFN0PV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihCdCxf''@;'; put 'put ''bil7cmV0dXJuIER0LnRvRmluaXRlTnVtYmVyKEJ0LmdldENvbnRlbnRMZW5ndGgoKSk/P2RmKF9uKX0pO3JldHVybiBmdW5jdGlvbihfbixtbil7cmV0dXJuIFN0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCk7dmFyIGhmPXlsJiZmdW5jdGlvbigpe3ZhciBTdD1fYXN5bmNUb0dlbmVyYXRv''@;'; put 'put ''cihmdW5jdGlvbiooQnQpe2xldHt1cmw6X24sbWV0aG9kOm1uLGRhdGE6SW4sc2lnbmFsOmJuLGNhbmNlbFRva2VuOnVyLHRpbWVvdXQ6Ymksb25Eb3dubG9hZFByb2dyZXNzOkZyLG9uVXBsb2FkUHJvZ3Jlc3M6dGEscmVzcG9uc2VUeXBlOm9hLGhlYWRlcnM6VmEsd2l0aENyZWRlbnRpYWxz''@;'; put 'put ''OiRvPSJzYW1lLW9yaWdpbiIsZmV0Y2hPcHRpb25zOlhsfT1iMChCdCk7b2E9b2E/KG9hKyIiKS50b0xvd2VyQ2FzZSgpOiJ0ZXh0IjtsZXQgX28sdG89b2QoW2JuLHVyJiZ1ci50b0Fib3J0U2lnbmFsKCldLGJpKTtjb25zdCBqaT10byYmdG8udW5zdWJzY3JpYmUmJigoKT0+e3RvLnVuc3Vi''@;'; put 'put ''c2NyaWJlKCl9KTtsZXQgUGM7dHJ5e2lmKHRhJiZyNSYmImdldCIhPT1tbiYmImhlYWQiIT09bW4mJjAhPT0oUGM9eWllbGQgazEoVmEsSW4pKSl7bGV0ICQwLEcwPW5ldyBSZXF1ZXN0KF9uLHttZXRob2Q6IlBPU1QiLGJvZHk6SW4sZHVwbGV4OiJoYWxmIn0pO2lmKER0LmlzRm9ybURhdGEo''@;'; put 'put ''SW4pJiYoJDA9RzAuaGVhZGVycy5nZXQoImNvbnRlbnQtdHlwZSIpKSYmVmEuc2V0Q29udGVudFR5cGUoJDApLEcwLmJvZHkpe2NvbnN0W05vLHFpXT1ibChQYyxOcyhwdSh0YSkpKTtJbj1ZaShHMC5ib2R5LDY1NTM2LE5vLHFpKX19RHQuaXNTdHJpbmcoJG8pfHwoJG89JG8/ImluY2x1ZGUi''@;'; put 'put ''OiJvbWl0Iik7Y29uc3Qgemw9ImNyZWRlbnRpYWxzImluIFJlcXVlc3QucHJvdG90eXBlO19vPW5ldyBSZXF1ZXN0KF9uLHsuLi5YbCxzaWduYWw6dG8sbWV0aG9kOm1uLnRvVXBwZXJDYXNlKCksaGVhZGVyczpWYS5ub3JtYWxpemUoKS50b0pTT04oKSxib2R5OkluLGR1cGxleDoiaGFsZiIs''@;'; put 'put ''Y3JlZGVudGlhbHM6emw/JG86dm9pZCAwfSk7bGV0IENhPXlpZWxkIGZldGNoKF9vKTtjb25zdCBUYT11ZiYmKCJzdHJlYW0iPT09b2F8fCJyZXNwb25zZSI9PT1vYSk7aWYodWYmJihGcnx8VGEmJmppKSl7Y29uc3QgRzA9e307WyJzdGF0dXMiLCJzdGF0dXNUZXh0IiwiaGVhZGVycyJdLmZv''@;'; put 'put ''ckVhY2goTXM9PntHMFtNc109Q2FbTXNdfSk7Y29uc3QgJDA9RHQudG9GaW5pdGVOdW1iZXIoQ2EuaGVhZGVycy5nZXQoImNvbnRlbnQtbGVuZ3RoIikpLFtObyxxaV09RnImJmJsKCQwLE5zKHB1KEZyKSwhMCkpfHxbXTtDYT1uZXcgUmVzcG9uc2UoWWkoQ2EuYm9keSw2NTUzNixObywoKT0+''@;'; put 'put ''e3FpJiZxaSgpLGppJiZqaSgpfSksRzApfW9hPW9hfHwidGV4dCI7bGV0IFhoPXlpZWxkIHNkW0R0LmZpbmRLZXkoc2Qsb2EpfHwidGV4dCJdKENhLEJ0KTtyZXR1cm4hVGEmJmppJiZqaSgpLHlpZWxkIG5ldyBQcm9taXNlKChHMCwkMCk9PntMYShHMCwkMCx7ZGF0YTpYaCxoZWFkZXJzOnBh''@;'; put 'put ''LmZyb20oQ2EuaGVhZGVycyksc3RhdHVzOkNhLnN0YXR1cyxzdGF0dXNUZXh0OkNhLnN0YXR1c1RleHQsY29uZmlnOkJ0LHJlcXVlc3Q6X299KX0pfWNhdGNoKHpsKXt0aHJvdyBqaSYmamkoKSx6bCYmIlR5cGVFcnJvciI9PT16bC5uYW1lJiYvZmV0Y2gvaS50ZXN0KHpsLm1lc3NhZ2UpP09i''@;'; put 'put ''amVjdC5hc3NpZ24obmV3IGl0KCJOZXR3b3JrIEVycm9yIixpdC5FUlJfTkVUV09SSyxCdCxfbykse2NhdXNlOnpsLmNhdXNlfHx6bH0pOml0LmZyb20oemwsemwmJnpsLmNvZGUsQnQsX28pfX0pO3JldHVybiBmdW5jdGlvbihCdCl7cmV0dXJuIFN0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19''@;'; put 'put ''KCk7Y29uc3QgZWg9e2h0dHA6bnVsbCx4aHI6THUsZmV0Y2g6aGZ9O0R0LmZvckVhY2goZWgsKFN0LEJ0KT0+e2lmKFN0KXt0cnl7T2JqZWN0LmRlZmluZVByb3BlcnR5KFN0LCJuYW1lIix7dmFsdWU6QnR9KX1jYXRjaHt9T2JqZWN0LmRlZmluZVByb3BlcnR5KFN0LCJhZGFwdGVyTmFtZSIs''@;'; put 'put ''e3ZhbHVlOkJ0fSl9fSk7Y29uc3QgZmY9U3Q9PmAtICR7U3R9YCxHaD1TdD0+RHQuaXNGdW5jdGlvbihTdCl8fG51bGw9PT1TdHx8ITE9PT1TdDt2YXIgT2NfZ2V0QWRhcHRlcj1TdD0+e1N0PUR0LmlzQXJyYXkoU3QpP1N0OltTdF07Y29uc3R7bGVuZ3RoOkJ0fT1TdDtsZXQgX24sbW47Y29u''@;'; put 'put ''c3QgSW49e307Zm9yKGxldCBibj0wO2JuPEJ0O2JuKyspe2xldCB1cjtpZihfbj1TdFtibl0sbW49X24sIUdoKF9uKSYmKG1uPWVoWyh1cj1TdHJpbmcoX24pKS50b0xvd2VyQ2FzZSgpXSx2b2lkIDA9PT1tbikpdGhyb3cgbmV3IGl0KGBVbmtub3duIGFkYXB0ZXIgJyR7dXJ9J2ApO2lmKG1u''@;'; put 'put ''KWJyZWFrO0luW3VyfHwiIyIrYm5dPW1ufWlmKCFtbil7Y29uc3QgYm49T2JqZWN0LmVudHJpZXMoSW4pLm1hcCgoW2JpLEZyXSk9PmBhZGFwdGVyICR7Yml9IGArKCExPT09RnI/ImlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGVudmlyb25tZW50IjoiaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUg''@;'; put 'put ''YnVpbGQiKSk7dGhyb3cgbmV3IGl0KCJUaGVyZSBpcyBubyBzdWl0YWJsZSBhZGFwdGVyIHRvIGRpc3BhdGNoIHRoZSByZXF1ZXN0ICIrKEJ0P2JuLmxlbmd0aD4xPyJzaW5jZSA6XG4iK2JuLm1hcChmZikuam9pbigiXG4iKToiICIrZmYoYm5bMF0pOiJhcyBubyBhZGFwdGVyIHNwZWNpZmll''@;'; put 'put ''ZCIpLCJFUlJfTk9UX1NVUFBPUlQiKX1yZXR1cm4gbW59O2Z1bmN0aW9uIE5hKFN0KXtpZihTdC5jYW5jZWxUb2tlbiYmU3QuY2FuY2VsVG9rZW4udGhyb3dJZlJlcXVlc3RlZCgpLFN0LnNpZ25hbCYmU3Quc2lnbmFsLmFib3J0ZWQpdGhyb3cgbmV3IHlhKG51bGwsU3QpfWZ1bmN0aW9uIEQz''@;'; put 'put ''KFN0KXtyZXR1cm4gTmEoU3QpLFN0LmhlYWRlcnM9cGEuZnJvbShTdC5oZWFkZXJzKSxTdC5kYXRhPVFuLmNhbGwoU3QsU3QudHJhbnNmb3JtUmVxdWVzdCksLTEhPT1bInBvc3QiLCJwdXQiLCJwYXRjaCJdLmluZGV4T2YoU3QubWV0aG9kKSYmU3QuaGVhZGVycy5zZXRDb250ZW50VHlwZSgi''@;'; put 'put ''YXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIiwhMSksT2NfZ2V0QWRhcHRlcihTdC5hZGFwdGVyfHx1YS5hZGFwdGVyKShTdCkudGhlbihmdW5jdGlvbihtbil7cmV0dXJuIE5hKFN0KSxtbi5kYXRhPVFuLmNhbGwoU3QsU3QudHJhbnNmb3JtUmVzcG9uc2UsbW4pLG1uLmhlYWRl''@;'; put 'put ''cnM9cGEuZnJvbShtbi5oZWFkZXJzKSxtbn0sZnVuY3Rpb24obW4pe3JldHVybiBsYShtbil8fChOYShTdCksbW4mJm1uLnJlc3BvbnNlJiYobW4ucmVzcG9uc2UuZGF0YT1Rbi5jYWxsKFN0LFN0LnRyYW5zZm9ybVJlc3BvbnNlLG1uLnJlc3BvbnNlKSxtbi5yZXNwb25zZS5oZWFkZXJzPXBh''@;'; put 'put ''LmZyb20obW4ucmVzcG9uc2UuaGVhZGVycykpKSxQcm9taXNlLnJlamVjdChtbil9KX1jb25zdCBLaD17fTtbIm9iamVjdCIsImJvb2xlYW4iLCJudW1iZXIiLCJmdW5jdGlvbiIsInN0cmluZyIsInN5bWJvbCJdLmZvckVhY2goKFN0LEJ0KT0+e0toW1N0XT1mdW5jdGlvbihtbil7cmV0dXJu''@;'; put 'put ''IHR5cGVvZiBtbj09PVN0fHwiYSIrKEJ0PDE/Im4gIjoiICIpK1N0fX0pO2NvbnN0IHFoPXt9O0toLnRyYW5zaXRpb25hbD1mdW5jdGlvbihCdCxfbixtbil7ZnVuY3Rpb24gSW4oYm4sdXIpe3JldHVybiJbQXhpb3MgdjEuOC4yXSBUcmFuc2l0aW9uYWwgb3B0aW9uICciK2JuKyInIit1ciso''@;'; put 'put ''bW4/Ii4gIittbjoiIil9cmV0dXJuKGJuLHVyLGJpKT0+e2lmKCExPT09QnQpdGhyb3cgbmV3IGl0KEluKHVyLCIgaGFzIGJlZW4gcmVtb3ZlZCIrKF9uPyIgaW4gIitfbjoiIikpLGl0LkVSUl9ERVBSRUNBVEVEKTtyZXR1cm4gX24mJiFxaFt1cl0mJihxaFt1cl09ITAsZy53YXJuKEluKHVy''@;'; put 'put ''LCIgaGFzIGJlZW4gZGVwcmVjYXRlZCBzaW5jZSB2IitfbisiIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5lYXIgZnV0dXJlIikpKSwhQnR8fEJ0KGJuLHVyLGJpKX19LEtoLnNwZWxsaW5nPWZ1bmN0aW9uKEJ0KXtyZXR1cm4oX24sbW4pPT4oZy53YXJuKGAke21ufSBpcyBsaWtlbHkg''@;'; put 'put ''YSBtaXNzcGVsbGluZyBvZiAke0J0fWApLCEwKX07dmFyIGFuPXthc3NlcnRPcHRpb25zOmZ1bmN0aW9uIEFuKFN0LEJ0LF9uKXtpZigib2JqZWN0IiE9dHlwZW9mIFN0KXRocm93IG5ldyBpdCgib3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCIsaXQuRVJSX0JBRF9PUFRJT05fVkFMVUUpO2Nv''@;'; put 'put ''bnN0IG1uPU9iamVjdC5rZXlzKFN0KTtsZXQgSW49bW4ubGVuZ3RoO2Zvcig7SW4tLSA+MDspe2NvbnN0IGJuPW1uW0luXSx1cj1CdFtibl07aWYodXIpe2NvbnN0IGJpPVN0W2JuXSxGcj12b2lkIDA9PT1iaXx8dXIoYmksYm4sU3QpO2lmKCEwIT09RnIpdGhyb3cgbmV3IGl0KCJvcHRpb24g''@;'; put 'put ''IitibisiIG11c3QgYmUgIitGcixpdC5FUlJfQkFEX09QVElPTl9WQUxVRSl9ZWxzZSBpZighMCE9PV9uKXRocm93IG5ldyBpdCgiVW5rbm93biBvcHRpb24gIitibixpdC5FUlJfQkFEX09QVElPTil9fSx2YWxpZGF0b3JzOktofTtjb25zdCB2aT1hbi52YWxpZGF0b3JzO2NsYXNzIEFye2Nv''@;'; put 'put ''bnN0cnVjdG9yKEJ0KXt0aGlzLmRlZmF1bHRzPUJ0LHRoaXMuaW50ZXJjZXB0b3JzPXtyZXF1ZXN0Om5ldyBBdCxyZXNwb25zZTpuZXcgQXR9fXJlcXVlc3QoQnQsX24pe3ZhciBtbj10aGlzO3JldHVybiBfYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiooKXt0cnl7cmV0dXJuIHlpZWxkIG1u''@;'; put 'put ''Ll9yZXF1ZXN0KEJ0LF9uKX1jYXRjaChJbil7aWYoSW4gaW5zdGFuY2VvZiBFcnJvcil7bGV0IGJuPXt9O0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlP0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlKGJuKTpibj1uZXcgRXJyb3I7Y29uc3QgdXI9Ym4uc3RhY2s/Ym4uc3RhY2sucmVwbGFjZSgvXi4r''@;'; put 'put ''XG4vLCIiKToiIjt0cnl7SW4uc3RhY2s/dXImJiFTdHJpbmcoSW4uc3RhY2spLmVuZHNXaXRoKHVyLnJlcGxhY2UoL14uK1xuLitcbi8sIiIpKSYmKEluLnN0YWNrKz0iXG4iK3VyKTpJbi5zdGFjaz11cn1jYXRjaHt9fXRocm93IElufX0pKCl9X3JlcXVlc3QoQnQsX24peyJzdHJpbmciPT10''@;'; put 'put ''eXBlb2YgQnQ/KF9uPV9ufHx7fSkudXJsPUJ0Ol9uPUJ0fHx7fSxfbj1Kcih0aGlzLmRlZmF1bHRzLF9uKTtjb25zdHt0cmFuc2l0aW9uYWw6bW4scGFyYW1zU2VyaWFsaXplcjpJbixoZWFkZXJzOmJufT1fbjt2b2lkIDAhPT1tbiYmYW4uYXNzZXJ0T3B0aW9ucyhtbix7c2lsZW50SlNPTlBh''@;'; put 'put ''cnNpbmc6dmkudHJhbnNpdGlvbmFsKHZpLmJvb2xlYW4pLGZvcmNlZEpTT05QYXJzaW5nOnZpLnRyYW5zaXRpb25hbCh2aS5ib29sZWFuKSxjbGFyaWZ5VGltZW91dEVycm9yOnZpLnRyYW5zaXRpb25hbCh2aS5ib29sZWFuKX0sITEpLG51bGwhPUluJiYoRHQuaXNGdW5jdGlvbihJbik/X24u''@;'; put 'put ''cGFyYW1zU2VyaWFsaXplcj17c2VyaWFsaXplOklufTphbi5hc3NlcnRPcHRpb25zKEluLHtlbmNvZGU6dmkuZnVuY3Rpb24sc2VyaWFsaXplOnZpLmZ1bmN0aW9ufSwhMCkpLHZvaWQgMCE9PV9uLmFsbG93QWJzb2x1dGVVcmxzfHwoX24uYWxsb3dBYnNvbHV0ZVVybHM9dm9pZCAwPT09dGhp''@;'; put 'put ''cy5kZWZhdWx0cy5hbGxvd0Fic29sdXRlVXJsc3x8dGhpcy5kZWZhdWx0cy5hbGxvd0Fic29sdXRlVXJscyksYW4uYXNzZXJ0T3B0aW9ucyhfbix7YmFzZVVybDp2aS5zcGVsbGluZygiYmFzZVVSTCIpLHdpdGhYc3JmVG9rZW46dmkuc3BlbGxpbmcoIndpdGhYU1JGVG9rZW4iKX0sITApLF9u''@;'; put 'put ''Lm1ldGhvZD0oX24ubWV0aG9kfHx0aGlzLmRlZmF1bHRzLm1ldGhvZHx8ImdldCIpLnRvTG93ZXJDYXNlKCk7bGV0IHVyPWJuJiZEdC5tZXJnZShibi5jb21tb24sYm5bX24ubWV0aG9kXSk7Ym4mJkR0LmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwicG9zdCIsInB1dCIsInBhdGNo''@;'; put 'put ''IiwiY29tbW9uIl0sdG89PntkZWxldGUgYm5bdG9dfSksX24uaGVhZGVycz1wYS5jb25jYXQodXIsYm4pO2NvbnN0IGJpPVtdO2xldCBGcj0hMDt0aGlzLmludGVyY2VwdG9ycy5yZXF1ZXN0LmZvckVhY2goZnVuY3Rpb24oX28peyJmdW5jdGlvbiI9PXR5cGVvZiBfby5ydW5XaGVuJiYhMT09''@;'; put 'put ''PV9vLnJ1bldoZW4oX24pfHwoRnI9RnImJl9vLnN5bmNocm9ub3VzLGJpLnVuc2hpZnQoX28uZnVsZmlsbGVkLF9vLnJlamVjdGVkKSl9KTtjb25zdCB0YT1bXTt0aGlzLmludGVyY2VwdG9ycy5yZXNwb25zZS5mb3JFYWNoKGZ1bmN0aW9uKF9vKXt0YS5wdXNoKF9vLmZ1bGZpbGxlZCxfby5y''@;'; put 'put ''ZWplY3RlZCl9KTtsZXQgb2EsJG8sVmE9MDtpZighRnIpe2NvbnN0IHRvPVtEMy5iaW5kKHRoaXMpLHZvaWQgMF07Zm9yKHRvLnVuc2hpZnQuYXBwbHkodG8sYmkpLHRvLnB1c2guYXBwbHkodG8sdGEpLCRvPXRvLmxlbmd0aCxvYT1Qcm9taXNlLnJlc29sdmUoX24pO1ZhPCRvOylvYT1vYS50''@;'; put 'put ''aGVuKHRvW1ZhKytdLHRvW1ZhKytdKTtyZXR1cm4gb2F9JG89YmkubGVuZ3RoO2xldCBYbD1fbjtmb3IoVmE9MDtWYTwkbzspe2NvbnN0IHRvPWJpW1ZhKytdLF9vPWJpW1ZhKytdO3RyeXtYbD10byhYbCl9Y2F0Y2goamkpe19vLmNhbGwodGhpcyxqaSk7YnJlYWt9fXRyeXtvYT1EMy5jYWxs''@;'; put 'put ''KHRoaXMsWGwpfWNhdGNoKHRvKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QodG8pfWZvcihWYT0wLCRvPXRhLmxlbmd0aDtWYTwkbzspb2E9b2EudGhlbih0YVtWYSsrXSx0YVtWYSsrXSk7cmV0dXJuIG9hfWdldFVyaShCdCl7cmV0dXJuIE9yKHVpKChCdD1Kcih0aGlzLmRlZmF1bHRzLEJ0KSku''@;'; put 'put ''YmFzZVVSTCxCdC51cmwsQnQuYWxsb3dBYnNvbHV0ZVVybHMpLEJ0LnBhcmFtcyxCdC5wYXJhbXNTZXJpYWxpemVyKX19RHQuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJvcHRpb25zIl0sZnVuY3Rpb24oQnQpe0FyLnByb3RvdHlwZVtCdF09ZnVuY3Rpb24oX24sbW4pe3JldHVy''@;'; put 'put ''biB0aGlzLnJlcXVlc3QoSnIobW58fHt9LHttZXRob2Q6QnQsdXJsOl9uLGRhdGE6KG1ufHx7fSkuZGF0YX0pKX19KSxEdC5mb3JFYWNoKFsicG9zdCIsInB1dCIsInBhdGNoIl0sZnVuY3Rpb24oQnQpe2Z1bmN0aW9uIF9uKG1uKXtyZXR1cm4gZnVuY3Rpb24oYm4sdXIsYmkpe3JldHVybiB0''@;'; put 'put ''aGlzLnJlcXVlc3QoSnIoYml8fHt9LHttZXRob2Q6QnQsaGVhZGVyczptbj97IkNvbnRlbnQtVHlwZSI6Im11bHRpcGFydC9mb3JtLWRhdGEifTp7fSx1cmw6Ym4sZGF0YTp1cn0pKX19QXIucHJvdG90eXBlW0J0XT1fbigpLEFyLnByb3RvdHlwZVtCdCsiRm9ybSJdPV9uKCEwKX0pO3ZhciBQ''@;'; put 'put ''bz1BcjtjbGFzcyBlb3tjb25zdHJ1Y3RvcihCdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIEJ0KXRocm93IG5ldyBUeXBlRXJyb3IoImV4ZWN1dG9yIG11c3QgYmUgYSBmdW5jdGlvbi4iKTtsZXQgX247dGhpcy5wcm9taXNlPW5ldyBQcm9taXNlKGZ1bmN0aW9uKGJuKXtfbj1ibn0pO2NvbnN0''@;'; put 'put ''IG1uPXRoaXM7dGhpcy5wcm9taXNlLnRoZW4oSW49PntpZighbW4uX2xpc3RlbmVycylyZXR1cm47bGV0IGJuPW1uLl9saXN0ZW5lcnMubGVuZ3RoO2Zvcig7Ym4tLSA+MDspbW4uX2xpc3RlbmVyc1tibl0oSW4pO21uLl9saXN0ZW5lcnM9bnVsbH0pLHRoaXMucHJvbWlzZS50aGVuPUluPT57''@;'; put 'put ''bGV0IGJuO2NvbnN0IHVyPW5ldyBQcm9taXNlKGJpPT57bW4uc3Vic2NyaWJlKGJpKSxibj1iaX0pLnRoZW4oSW4pO3JldHVybiB1ci5jYW5jZWw9ZnVuY3Rpb24oKXttbi51bnN1YnNjcmliZShibil9LHVyfSxCdChmdW5jdGlvbihibix1cixiaSl7bW4ucmVhc29ufHwobW4ucmVhc29uPW5l''@;'; put 'put ''dyB5YShibix1cixiaSksX24obW4ucmVhc29uKSl9KX10aHJvd0lmUmVxdWVzdGVkKCl7aWYodGhpcy5yZWFzb24pdGhyb3cgdGhpcy5yZWFzb259c3Vic2NyaWJlKEJ0KXt0aGlzLnJlYXNvbj9CdCh0aGlzLnJlYXNvbik6dGhpcy5fbGlzdGVuZXJzP3RoaXMuX2xpc3RlbmVycy5wdXNoKEJ0''@;'; put 'put ''KTp0aGlzLl9saXN0ZW5lcnM9W0J0XX11bnN1YnNjcmliZShCdCl7aWYoIXRoaXMuX2xpc3RlbmVycylyZXR1cm47Y29uc3QgX249dGhpcy5fbGlzdGVuZXJzLmluZGV4T2YoQnQpOy0xIT09X24mJnRoaXMuX2xpc3RlbmVycy5zcGxpY2UoX24sMSl9dG9BYm9ydFNpZ25hbCgpe2NvbnN0IEJ0''@;'; put 'put ''PW5ldyBBYm9ydENvbnRyb2xsZXIsX249bW49PntCdC5hYm9ydChtbil9O3JldHVybiB0aGlzLnN1YnNjcmliZShfbiksQnQuc2lnbmFsLnVuc3Vic2NyaWJlPSgpPT50aGlzLnVuc3Vic2NyaWJlKF9uKSxCdC5zaWduYWx9c3RhdGljIHNvdXJjZSgpe2xldCBCdDtyZXR1cm57dG9rZW46bmV3''@;'; put 'put ''IGVvKGZ1bmN0aW9uKEluKXtCdD1Jbn0pLGNhbmNlbDpCdH19fXZhciBvbD1lbztjb25zdCBTcz17Q29udGludWU6MTAwLFN3aXRjaGluZ1Byb3RvY29sczoxMDEsUHJvY2Vzc2luZzoxMDIsRWFybHlIaW50czoxMDMsT2s6MjAwLENyZWF0ZWQ6MjAxLEFjY2VwdGVkOjIwMixOb25BdXRob3Jp''@;'; put 'put ''dGF0aXZlSW5mb3JtYXRpb246MjAzLE5vQ29udGVudDoyMDQsUmVzZXRDb250ZW50OjIwNSxQYXJ0aWFsQ29udGVudDoyMDYsTXVsdGlTdGF0dXM6MjA3LEFscmVhZHlSZXBvcnRlZDoyMDgsSW1Vc2VkOjIyNixNdWx0aXBsZUNob2ljZXM6MzAwLE1vdmVkUGVybWFuZW50bHk6MzAxLEZvdW5k''@;'; put 'put ''OjMwMixTZWVPdGhlcjozMDMsTm90TW9kaWZpZWQ6MzA0LFVzZVByb3h5OjMwNSxVbnVzZWQ6MzA2LFRlbXBvcmFyeVJlZGlyZWN0OjMwNyxQZXJtYW5lbnRSZWRpcmVjdDozMDgsQmFkUmVxdWVzdDo0MDAsVW5hdXRob3JpemVkOjQwMSxQYXltZW50UmVxdWlyZWQ6NDAyLEZvcmJpZGRlbjo0''@;'; put 'put ''MDMsTm90Rm91bmQ6NDA0LE1ldGhvZE5vdEFsbG93ZWQ6NDA1LE5vdEFjY2VwdGFibGU6NDA2LFByb3h5QXV0aGVudGljYXRpb25SZXF1aXJlZDo0MDcsUmVxdWVzdFRpbWVvdXQ6NDA4LENvbmZsaWN0OjQwOSxHb25lOjQxMCxMZW5ndGhSZXF1aXJlZDo0MTEsUHJlY29uZGl0aW9uRmFpbGVk''@;'; put 'put ''OjQxMixQYXlsb2FkVG9vTGFyZ2U6NDEzLFVyaVRvb0xvbmc6NDE0LFVuc3VwcG9ydGVkTWVkaWFUeXBlOjQxNSxSYW5nZU5vdFNhdGlzZmlhYmxlOjQxNixFeHBlY3RhdGlvbkZhaWxlZDo0MTcsSW1BVGVhcG90OjQxOCxNaXNkaXJlY3RlZFJlcXVlc3Q6NDIxLFVucHJvY2Vzc2FibGVFbnRp''@;'; put 'put ''dHk6NDIyLExvY2tlZDo0MjMsRmFpbGVkRGVwZW5kZW5jeTo0MjQsVG9vRWFybHk6NDI1LFVwZ3JhZGVSZXF1aXJlZDo0MjYsUHJlY29uZGl0aW9uUmVxdWlyZWQ6NDI4LFRvb01hbnlSZXF1ZXN0czo0MjksUmVxdWVzdEhlYWRlckZpZWxkc1Rvb0xhcmdlOjQzMSxVbmF2YWlsYWJsZUZvckxl''@;'; put 'put ''Z2FsUmVhc29uczo0NTEsSW50ZXJuYWxTZXJ2ZXJFcnJvcjo1MDAsTm90SW1wbGVtZW50ZWQ6NTAxLEJhZEdhdGV3YXk6NTAyLFNlcnZpY2VVbmF2YWlsYWJsZTo1MDMsR2F0ZXdheVRpbWVvdXQ6NTA0LEh0dHBWZXJzaW9uTm90U3VwcG9ydGVkOjUwNSxWYXJpYW50QWxzb05lZ290aWF0ZXM6''@;'; put 'put ''NTA2LEluc3VmZmljaWVudFN0b3JhZ2U6NTA3LExvb3BEZXRlY3RlZDo1MDgsTm90RXh0ZW5kZWQ6NTEwLE5ldHdvcmtBdXRoZW50aWNhdGlvblJlcXVpcmVkOjUxMX07T2JqZWN0LmVudHJpZXMoU3MpLmZvckVhY2goKFtTdCxCdF0pPT57U3NbQnRdPVN0fSk7dmFyIGpsPVNzO2NvbnN0IGtv''@;'; put 'put ''PWZ1bmN0aW9uIEhvKFN0KXtjb25zdCBCdD1uZXcgUG8oU3QpLF9uPUIoUG8ucHJvdG90eXBlLnJlcXVlc3QsQnQpO3JldHVybiBEdC5leHRlbmQoX24sUG8ucHJvdG90eXBlLEJ0LHthbGxPd25LZXlzOiEwfSksRHQuZXh0ZW5kKF9uLEJ0LG51bGwse2FsbE93bktleXM6ITB9KSxfbi5jcmVh''@;'; put 'put ''dGU9ZnVuY3Rpb24oSW4pe3JldHVybiBIbyhKcihTdCxJbikpfSxfbn0odWEpO2tvLkF4aW9zPVBvLGtvLkNhbmNlbGVkRXJyb3I9eWEsa28uQ2FuY2VsVG9rZW49b2wsa28uaXNDYW5jZWw9bGEsa28uVkVSU0lPTj0iMS44LjIiLGtvLnRvRm9ybURhdGE9UXQsa28uQXhpb3NFcnJvcj1pdCxr''@;'; put 'put ''by5DYW5jZWw9a28uQ2FuY2VsZWRFcnJvcixrby5hbGw9ZnVuY3Rpb24oQnQpe3JldHVybiBQcm9taXNlLmFsbChCdCl9LGtvLnNwcmVhZD1mdW5jdGlvbiB6byhTdCl7cmV0dXJuIGZ1bmN0aW9uKF9uKXtyZXR1cm4gU3QuYXBwbHkobnVsbCxfbil9fSxrby5pc0F4aW9zRXJyb3I9ZnVuY3Rp''@;'; put 'put ''b24gVnMoU3Qpe3JldHVybiBEdC5pc09iamVjdChTdCkmJiEwPT09U3QuaXNBeGlvc0Vycm9yfSxrby5tZXJnZUNvbmZpZz1Kcixrby5BeGlvc0hlYWRlcnM9cGEsa28uZm9ybVRvSlNPTj1TdD0+SWkoRHQuaXNIVE1MRm9ybShTdCk/bmV3IEZvcm1EYXRhKFN0KTpTdCksa28uZ2V0QWRhcHRl''@;'; put 'put ''cj1PY19nZXRBZGFwdGVyLGtvLkh0dHBTdGF0dXNDb2RlPWpsLGtvLmRlZmF1bHQ9a28sdWUuZXhwb3J0cz1rb30sODU2NjoodWUsWCk9PnsidXNlIHN0cmljdCI7dmFyIEksXztPYmplY3QuZGVmaW5lUHJvcGVydGllcyhYLHtfX2VzTW9kdWxlOnt2YWx1ZTohMH0sW1N5bWJvbC50b1N0cmlu''@;'; put 'put ''Z1RhZ106e3ZhbHVlOiJNb2R1bGUifX0pO2NvbnN0IHc9ZnVuY3Rpb24geShZKXtyZXR1cm4gWSYmWS5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoWSwiZGVmYXVsdCIpP1kuZGVmYXVsdDpZfShmdW5jdGlvbiBnKCl7aWYoXylyZXR1cm4gSTtfPTE7''@;'; put 'put ''Y29uc3QgWT0yMTQ3NDgzNjQ3LHE9MzYsVGU9L154bi0tLyxTZT0vW15cMC1ceDdGXS8samU9L1tceDJFXHUzMDAyXHVGRjBFXHVGRjYxXS9nLFY9e292ZXJmbG93OiJPdmVyZmxvdzogaW5wdXQgbmVlZHMgd2lkZXIgaW50ZWdlcnMgdG8gcHJvY2VzcyIsIm5vdC1iYXNpYyI6IklsbGVnYWwg''@;'; put 'put ''aW5wdXQgPj0gMHg4MCAobm90IGEgYmFzaWMgY29kZSBwb2ludCkiLCJpbnZhbGlkLWlucHV0IjoiSW52YWxpZCBpbnB1dCJ9LGI9TWF0aC5mbG9vcix4PVN0cmluZy5mcm9tQ2hhckNvZGU7ZnVuY3Rpb24gQyh3ZSl7dGhyb3cgbmV3IFJhbmdlRXJyb3IoVlt3ZV0pfWZ1bmN0aW9uIEgod2Us''@;'; put 'put ''VWUpe2NvbnN0IEplPXdlLnNwbGl0KCJAIik7bGV0IG90PSIiO0plLmxlbmd0aD4xJiYob3Q9SmVbMF0rIkAiLHdlPUplWzFdKTtjb25zdCB2ZT1mdW5jdGlvbiBUKHdlLFVlKXtjb25zdCBKZT1bXTtsZXQgb3Q9d2UubGVuZ3RoO2Zvcig7b3QtLTspSmVbb3RdPVVlKHdlW290XSk7cmV0dXJu''@;'; put 'put ''IEplfSgod2U9d2UucmVwbGFjZShqZSwiLiIpKS5zcGxpdCgiLiIpLFVlKS5qb2luKCIuIik7cmV0dXJuIG90K3ZlfWZ1bmN0aW9uIGood2Upe2NvbnN0IFVlPVtdO2xldCBKZT0wO2NvbnN0IG90PXdlLmxlbmd0aDtmb3IoO0plPG90Oyl7Y29uc3QgeGU9d2UuY2hhckNvZGVBdChKZSsrKTtp''@;'; put 'put ''Zih4ZT49NTUyOTYmJnhlPD01NjMxOSYmSmU8b3Qpe2NvbnN0IHZlPXdlLmNoYXJDb2RlQXQoSmUrKyk7NTYzMjA9PSg2NDUxMiZ2ZSk/VWUucHVzaCgoKDEwMjMmeGUpPDwxMCkrKDEwMjMmdmUpKzY1NTM2KTooVWUucHVzaCh4ZSksSmUtLSl9ZWxzZSBVZS5wdXNoKHhlKX1yZXR1cm4gVWV9''@;'; put 'put ''Y29uc3QgbT1mdW5jdGlvbih3ZSl7cmV0dXJuIHdlPj00OCYmd2U8NTg/d2UtNDgrMjY6d2U+PTY1JiZ3ZTw5MT93ZS02NTp3ZT49OTcmJndlPDEyMz93ZS05NzpxfSxBPWZ1bmN0aW9uKHdlLFVlKXtyZXR1cm4gd2UrMjIrNzUqKHdlPDI2KS0oKDAhPVVlKTw8NSl9LGFlPWZ1bmN0aW9uKHdl''@;'; put 'put ''LFVlLEplKXtsZXQgb3Q9MDtmb3Iod2U9SmU/Yih3ZS83MDApOndlPj4xLHdlKz1iKHdlL1VlKTt3ZT40NTU7b3QrPXEpd2U9Yih3ZS8zNSk7cmV0dXJuIGIob3QrMzYqd2UvKHdlKzM4KSl9LHRlPWZ1bmN0aW9uKHdlKXtjb25zdCBVZT1bXSxKZT13ZS5sZW5ndGg7bGV0IG90PTAseGU9MTI4''@;'; put 'put ''LHZlPTcyLFhlPXdlLmxhc3RJbmRleE9mKCItIik7WGU8MCYmKFhlPTApO2ZvcihsZXQgemU9MDt6ZTxYZTsrK3plKXdlLmNoYXJDb2RlQXQoemUpPj0xMjgmJkMoIm5vdC1iYXNpYyIpLFVlLnB1c2god2UuY2hhckNvZGVBdCh6ZSkpO2ZvcihsZXQgemU9WGU+MD9YZSsxOjA7emU8SmU7KXtj''@;'; put 'put ''b25zdCBEZT1vdDtmb3IobGV0IE9lPTEsSWU9cTs7SWUrPXEpe3plPj1KZSYmQygiaW52YWxpZC1pbnB1dCIpO2NvbnN0IFZlPW0od2UuY2hhckNvZGVBdCh6ZSsrKSk7VmU+PXEmJkMoImludmFsaWQtaW5wdXQiKSxWZT5iKChZLW90KS9PZSkmJkMoIm92ZXJmbG93Iiksb3QrPVZlKk9lO2Nv''@;'; put 'put ''bnN0IGtlPUllPD12ZT8xOkllPj12ZSsyNj8yNjpJZS12ZTtpZihWZTxrZSlicmVhaztjb25zdCBBZT1xLWtlO09lPmIoWS9BZSkmJkMoIm92ZXJmbG93IiksT2UqPUFlfWNvbnN0IEZlPVVlLmxlbmd0aCsxO3ZlPWFlKG90LURlLEZlLDA9PURlKSxiKG90L0ZlKT5ZLXhlJiZDKCJvdmVyZmxv''@;'; put 'put ''dyIpLHhlKz1iKG90L0ZlKSxvdCU9RmUsVWUuc3BsaWNlKG90KyssMCx4ZSl9cmV0dXJuIFN0cmluZy5mcm9tQ29kZVBvaW50KC4uLlVlKX0sc2U9ZnVuY3Rpb24od2Upe2NvbnN0IFVlPVtdLEplPSh3ZT1qKHdlKSkubGVuZ3RoO2xldCBvdD0xMjgseGU9MCx2ZT03Mjtmb3IoY29uc3QgRGUg''@;'; put 'put ''b2Ygd2UpRGU8MTI4JiZVZS5wdXNoKHgoRGUpKTtjb25zdCBYZT1VZS5sZW5ndGg7bGV0IHplPVhlO2ZvcihYZSYmVWUucHVzaCgiLSIpO3plPEplOyl7bGV0IERlPVk7Zm9yKGNvbnN0IE9lIG9mIHdlKU9lPj1vdCYmT2U8RGUmJihEZT1PZSk7Y29uc3QgRmU9emUrMTtEZS1vdD5iKChZLXhl''@;'; put 'put ''KS9GZSkmJkMoIm92ZXJmbG93IikseGUrPShEZS1vdCkqRmUsb3Q9RGU7Zm9yKGNvbnN0IE9lIG9mIHdlKWlmKE9lPG90JiYrK3hlPlkmJkMoIm92ZXJmbG93IiksT2U9PT1vdCl7bGV0IEllPXhlO2ZvcihsZXQgVmU9cTs7VmUrPXEpe2NvbnN0IGtlPVZlPD12ZT8xOlZlPj12ZSsyNj8yNjpW''@;'; put 'put ''ZS12ZTtpZihJZTxrZSlicmVhaztjb25zdCBBZT1JZS1rZSxfdD1xLWtlO1VlLnB1c2goeChBKGtlK0FlJV90LDApKSksSWU9YihBZS9fdCl9VWUucHVzaCh4KEEoSWUsMCkpKSx2ZT1hZSh4ZSxGZSx6ZT09PVhlKSx4ZT0wLCsremV9Kyt4ZSwrK290fXJldHVybiBVZS5qb2luKCIiKX07cmV0''@;'; put 'put ''dXJuIEk9e3ZlcnNpb246IjIuMy4xIix1Y3MyOntkZWNvZGU6aixlbmNvZGU6d2U9PlN0cmluZy5mcm9tQ29kZVBvaW50KC4uLndlKX0sZGVjb2RlOnRlLGVuY29kZTpzZSx0b0FTQ0lJOmZ1bmN0aW9uKHdlKXtyZXR1cm4gSCh3ZSxmdW5jdGlvbihVZSl7cmV0dXJuIFNlLnRlc3QoVWUpPyJ4''@;'; put 'put ''bi0tIitzZShVZSk6VWV9KX0sdG9Vbmljb2RlOmZ1bmN0aW9uKHdlKXtyZXR1cm4gSCh3ZSxmdW5jdGlvbihVZSl7cmV0dXJuIFRlLnRlc3QoVWUpP3RlKFVlLnNsaWNlKDQpLnRvTG93ZXJDYXNlKCkpOlVlfSl9fX0oKSksRj1bImFjIiwiY29tLmFjIiwiZWR1LmFjIiwiZ292LmFjIiwibWls''@;'; put 'put ''LmFjIiwibmV0LmFjIiwib3JnLmFjIiwiYWQiLCJhZSIsImFjLmFlIiwiY28uYWUiLCJnb3YuYWUiLCJtaWwuYWUiLCJuZXQuYWUiLCJvcmcuYWUiLCJzY2guYWUiLCJhZXJvIiwiYWlybGluZS5hZXJvIiwiYWlycG9ydC5hZXJvIiwiYWNjaWRlbnQtaW52ZXN0aWdhdGlvbi5hZXJvIiwiYWNj''@;'; put 'put ''aWRlbnQtcHJldmVudGlvbi5hZXJvIiwiYWVyb2JhdGljLmFlcm8iLCJhZXJvY2x1Yi5hZXJvIiwiYWVyb2Ryb21lLmFlcm8iLCJhZ2VudHMuYWVybyIsImFpci1zdXJ2ZWlsbGFuY2UuYWVybyIsImFpci10cmFmZmljLWNvbnRyb2wuYWVybyIsImFpcmNyYWZ0LmFlcm8iLCJhaXJ0cmFmZmlj''@;'; put 'put ''LmFlcm8iLCJhbWJ1bGFuY2UuYWVybyIsImFzc29jaWF0aW9uLmFlcm8iLCJhdXRob3IuYWVybyIsImJhbGxvb25pbmcuYWVybyIsImJyb2tlci5hZXJvIiwiY2FhLmFlcm8iLCJjYXJnby5hZXJvIiwiY2F0ZXJpbmcuYWVybyIsImNlcnRpZmljYXRpb24uYWVybyIsImNoYW1waW9uc2hpcC5h''@;'; put 'put ''ZXJvIiwiY2hhcnRlci5hZXJvIiwiY2l2aWxhdmlhdGlvbi5hZXJvIiwiY2x1Yi5hZXJvIiwiY29uZmVyZW5jZS5hZXJvIiwiY29uc3VsdGFudC5hZXJvIiwiY29uc3VsdGluZy5hZXJvIiwiY29udHJvbC5hZXJvIiwiY291bmNpbC5hZXJvIiwiY3Jldy5hZXJvIiwiZGVzaWduLmFlcm8iLCJk''@;'; put 'put ''Z2NhLmFlcm8iLCJlZHVjYXRvci5hZXJvIiwiZW1lcmdlbmN5LmFlcm8iLCJlbmdpbmUuYWVybyIsImVuZ2luZWVyLmFlcm8iLCJlbnRlcnRhaW5tZW50LmFlcm8iLCJlcXVpcG1lbnQuYWVybyIsImV4Y2hhbmdlLmFlcm8iLCJleHByZXNzLmFlcm8iLCJmZWRlcmF0aW9uLmFlcm8iLCJmbGln''@;'; put 'put ''aHQuYWVybyIsImZyZWlnaHQuYWVybyIsImZ1ZWwuYWVybyIsImdsaWRpbmcuYWVybyIsImdvdmVybm1lbnQuYWVybyIsImdyb3VuZGhhbmRsaW5nLmFlcm8iLCJncm91cC5hZXJvIiwiaGFuZ2dsaWRpbmcuYWVybyIsImhvbWVidWlsdC5hZXJvIiwiaW5zdXJhbmNlLmFlcm8iLCJqb3VybmFs''@;'; put 'put ''LmFlcm8iLCJqb3VybmFsaXN0LmFlcm8iLCJsZWFzaW5nLmFlcm8iLCJsb2dpc3RpY3MuYWVybyIsIm1hZ2F6aW5lLmFlcm8iLCJtYWludGVuYW5jZS5hZXJvIiwibWFya2V0cGxhY2UuYWVybyIsIm1lZGlhLmFlcm8iLCJtaWNyb2xpZ2h0LmFlcm8iLCJtb2RlbGxpbmcuYWVybyIsIm5hdmln''@;'; put 'put ''YXRpb24uYWVybyIsInBhcmFjaHV0aW5nLmFlcm8iLCJwYXJhZ2xpZGluZy5hZXJvIiwicGFzc2VuZ2VyLWFzc29jaWF0aW9uLmFlcm8iLCJwaWxvdC5hZXJvIiwicHJlc3MuYWVybyIsInByb2R1Y3Rpb24uYWVybyIsInJlY3JlYXRpb24uYWVybyIsInJlcGJvZHkuYWVybyIsInJlcy5hZXJv''@;'; put 'put ''IiwicmVzZWFyY2guYWVybyIsInJvdG9yY3JhZnQuYWVybyIsInNhZmV0eS5hZXJvIiwic2NpZW50aXN0LmFlcm8iLCJzZXJ2aWNlcy5hZXJvIiwic2hvdy5hZXJvIiwic2t5ZGl2aW5nLmFlcm8iLCJzb2Z0d2FyZS5hZXJvIiwic3R1ZGVudC5hZXJvIiwidGF4aS5hZXJvIiwidHJhZGVyLmFl''@;'; put 'put ''cm8iLCJ0cmFkaW5nLmFlcm8iLCJ0cmFpbmVyLmFlcm8iLCJ1bmlvbi5hZXJvIiwid29ya2luZ2dyb3VwLmFlcm8iLCJ3b3Jrcy5hZXJvIiwiYWYiLCJjb20uYWYiLCJlZHUuYWYiLCJnb3YuYWYiLCJuZXQuYWYiLCJvcmcuYWYiLCJhZyIsImNvLmFnIiwiY29tLmFnIiwibmV0LmFnIiwibm9t''@;'; put 'put ''LmFnIiwib3JnLmFnIiwiYWkiLCJjb20uYWkiLCJuZXQuYWkiLCJvZmYuYWkiLCJvcmcuYWkiLCJhbCIsImNvbS5hbCIsImVkdS5hbCIsImdvdi5hbCIsIm1pbC5hbCIsIm5ldC5hbCIsIm9yZy5hbCIsImFtIiwiY28uYW0iLCJjb20uYW0iLCJjb21tdW5lLmFtIiwibmV0LmFtIiwib3JnLmFt''@;'; put 'put ''IiwiYW8iLCJjby5hbyIsImVkLmFvIiwiZWR1LmFvIiwiZ292LmFvIiwiZ3YuYW8iLCJpdC5hbyIsIm9nLmFvIiwib3JnLmFvIiwicGIuYW8iLCJhcSIsImFyIiwiYmV0LmFyIiwiY29tLmFyIiwiY29vcC5hciIsImVkdS5hciIsImdvYi5hciIsImdvdi5hciIsImludC5hciIsIm1pbC5hciIs''@;'; put 'put ''Im11c2ljYS5hciIsIm11dHVhbC5hciIsIm5ldC5hciIsIm9yZy5hciIsInNlbmFzYS5hciIsInR1ci5hciIsImFycGEiLCJlMTY0LmFycGEiLCJob21lLmFycGEiLCJpbi1hZGRyLmFycGEiLCJpcDYuYXJwYSIsImlyaXMuYXJwYSIsInVyaS5hcnBhIiwidXJuLmFycGEiLCJhcyIsImdvdi5h''@;'; put 'put ''cyIsImFzaWEiLCJhdCIsImFjLmF0Iiwic3RoLmFjLmF0IiwiY28uYXQiLCJndi5hdCIsIm9yLmF0IiwiYXUiLCJhc24uYXUiLCJjb20uYXUiLCJlZHUuYXUiLCJnb3YuYXUiLCJpZC5hdSIsIm5ldC5hdSIsIm9yZy5hdSIsImNvbmYuYXUiLCJvei5hdSIsImFjdC5hdSIsIm5zdy5hdSIsIm50''@;'; put 'put ''LmF1IiwicWxkLmF1Iiwic2EuYXUiLCJ0YXMuYXUiLCJ2aWMuYXUiLCJ3YS5hdSIsImFjdC5lZHUuYXUiLCJjYXRob2xpYy5lZHUuYXUiLCJuc3cuZWR1LmF1IiwibnQuZWR1LmF1IiwicWxkLmVkdS5hdSIsInNhLmVkdS5hdSIsInRhcy5lZHUuYXUiLCJ2aWMuZWR1LmF1Iiwid2EuZWR1LmF1''@;'; put 'put ''IiwicWxkLmdvdi5hdSIsInNhLmdvdi5hdSIsInRhcy5nb3YuYXUiLCJ2aWMuZ292LmF1Iiwid2EuZ292LmF1Iiwic2Nob29scy5uc3cuZWR1LmF1IiwiYXciLCJjb20uYXciLCJheCIsImF6IiwiYml6LmF6IiwiY29tLmF6IiwiZWR1LmF6IiwiZ292LmF6IiwiaW5mby5heiIsImludC5heiIs''@;'; put 'put ''Im1pbC5heiIsIm5hbWUuYXoiLCJuZXQuYXoiLCJvcmcuYXoiLCJwcC5heiIsInByby5heiIsImJhIiwiY29tLmJhIiwiZWR1LmJhIiwiZ292LmJhIiwibWlsLmJhIiwibmV0LmJhIiwib3JnLmJhIiwiYmIiLCJiaXouYmIiLCJjby5iYiIsImNvbS5iYiIsImVkdS5iYiIsImdvdi5iYiIsImlu''@;'; put 'put ''Zm8uYmIiLCJuZXQuYmIiLCJvcmcuYmIiLCJzdG9yZS5iYiIsInR2LmJiIiwiKi5iZCIsImJlIiwiYWMuYmUiLCJiZiIsImdvdi5iZiIsImJnIiwiMC5iZyIsIjEuYmciLCIyLmJnIiwiMy5iZyIsIjQuYmciLCI1LmJnIiwiNi5iZyIsIjcuYmciLCI4LmJnIiwiOS5iZyIsImEuYmciLCJiLmJn''@;'; put 'put ''IiwiYy5iZyIsImQuYmciLCJlLmJnIiwiZi5iZyIsImcuYmciLCJoLmJnIiwiaS5iZyIsImouYmciLCJrLmJnIiwibC5iZyIsIm0uYmciLCJuLmJnIiwiby5iZyIsInAuYmciLCJxLmJnIiwici5iZyIsInMuYmciLCJ0LmJnIiwidS5iZyIsInYuYmciLCJ3LmJnIiwieC5iZyIsInkuYmciLCJ6''@;'; put 'put ''LmJnIiwiYmgiLCJjb20uYmgiLCJlZHUuYmgiLCJnb3YuYmgiLCJuZXQuYmgiLCJvcmcuYmgiLCJiaSIsImNvLmJpIiwiY29tLmJpIiwiZWR1LmJpIiwib3IuYmkiLCJvcmcuYmkiLCJiaXoiLCJiaiIsImFmcmljYS5iaiIsImFncm8uYmoiLCJhcmNoaXRlY3Rlcy5iaiIsImFzc3VyLmJqIiwi''@;'; put 'put ''YXZvY2F0cy5iaiIsImNvLmJqIiwiY29tLmJqIiwiZWNvLmJqIiwiZWNvbm8uYmoiLCJlZHUuYmoiLCJpbmZvLmJqIiwibG9pc2lycy5iaiIsIm1vbmV5LmJqIiwibmV0LmJqIiwib3JnLmJqIiwib3RlLmJqIiwicmVzdGF1cmFudC5iaiIsInJlc3RvLmJqIiwidG91cmlzbS5iaiIsInVuaXYu''@;'; put 'put ''YmoiLCJibSIsImNvbS5ibSIsImVkdS5ibSIsImdvdi5ibSIsIm5ldC5ibSIsIm9yZy5ibSIsImJuIiwiY29tLmJuIiwiZWR1LmJuIiwiZ292LmJuIiwibmV0LmJuIiwib3JnLmJuIiwiYm8iLCJjb20uYm8iLCJlZHUuYm8iLCJnb2IuYm8iLCJpbnQuYm8iLCJtaWwuYm8iLCJuZXQuYm8iLCJv''@;'; put 'put ''cmcuYm8iLCJ0di5ibyIsIndlYi5ibyIsImFjYWRlbWlhLmJvIiwiYWdyby5ibyIsImFydGUuYm8iLCJibG9nLmJvIiwiYm9saXZpYS5ibyIsImNpZW5jaWEuYm8iLCJjb29wZXJhdGl2YS5ibyIsImRlbW9jcmFjaWEuYm8iLCJkZXBvcnRlLmJvIiwiZWNvbG9naWEuYm8iLCJlY29ub21pYS5i''@;'; put 'put ''byIsImVtcHJlc2EuYm8iLCJpbmRpZ2VuYS5ibyIsImluZHVzdHJpYS5ibyIsImluZm8uYm8iLCJtZWRpY2luYS5ibyIsIm1vdmltaWVudG8uYm8iLCJtdXNpY2EuYm8iLCJuYXR1cmFsLmJvIiwibm9tYnJlLmJvIiwibm90aWNpYXMuYm8iLCJwYXRyaWEuYm8iLCJwbHVyaW5hY2lvbmFsLmJv''@;'; put 'put ''IiwicG9saXRpY2EuYm8iLCJwcm9mZXNpb25hbC5ibyIsInB1ZWJsby5ibyIsInJldmlzdGEuYm8iLCJzYWx1ZC5ibyIsInRlY25vbG9naWEuYm8iLCJ0a3NhdC5ibyIsInRyYW5zcG9ydGUuYm8iLCJ3aWtpLmJvIiwiYnIiLCI5Z3VhY3UuYnIiLCJhYmMuYnIiLCJhZG0uYnIiLCJhZHYuYnIi''@;'; put 'put ''LCJhZ3IuYnIiLCJhanUuYnIiLCJhbS5iciIsImFuYW5pLmJyIiwiYXBhcmVjaWRhLmJyIiwiYXBwLmJyIiwiYXJxLmJyIiwiYXJ0LmJyIiwiYXRvLmJyIiwiYi5iciIsImJhcnVlcmkuYnIiLCJiZWxlbS5iciIsImJldC5iciIsImJoei5iciIsImJpYi5iciIsImJpby5iciIsImJsb2cuYnIi''@;'; put 'put ''LCJibWQuYnIiLCJib2F2aXN0YS5iciIsImJzYi5iciIsImNhbXBpbmFncmFuZGUuYnIiLCJjYW1waW5hcy5iciIsImNheGlhcy5iciIsImNpbS5iciIsImNuZy5iciIsImNudC5iciIsImNvbS5iciIsImNvbnRhZ2VtLmJyIiwiY29vcC5iciIsImNvei5iciIsImNyaS5iciIsImN1aWFiYS5i''@;'; put 'put ''ciIsImN1cml0aWJhLmJyIiwiZGVmLmJyIiwiZGVzLmJyIiwiZGV0LmJyIiwiZGV2LmJyIiwiZWNuLmJyIiwiZWNvLmJyIiwiZWR1LmJyIiwiZW1wLmJyIiwiZW5mLmJyIiwiZW5nLmJyIiwiZXNwLmJyIiwiZXRjLmJyIiwiZXRpLmJyIiwiZmFyLmJyIiwiZmVpcmEuYnIiLCJmbG9nLmJyIiwi''@;'; put 'put ''ZmxvcmlwYS5iciIsImZtLmJyIiwiZm5kLmJyIiwiZm9ydGFsLmJyIiwiZm90LmJyIiwiZm96LmJyIiwiZnN0LmJyIiwiZzEyLmJyIiwiZ2VvLmJyIiwiZ2dmLmJyIiwiZ29pYW5pYS5iciIsImdvdi5iciIsImFjLmdvdi5iciIsImFsLmdvdi5iciIsImFtLmdvdi5iciIsImFwLmdvdi5iciIs''@;'; put 'put ''ImJhLmdvdi5iciIsImNlLmdvdi5iciIsImRmLmdvdi5iciIsImVzLmdvdi5iciIsImdvLmdvdi5iciIsIm1hLmdvdi5iciIsIm1nLmdvdi5iciIsIm1zLmdvdi5iciIsIm10Lmdvdi5iciIsInBhLmdvdi5iciIsInBiLmdvdi5iciIsInBlLmdvdi5iciIsInBpLmdvdi5iciIsInByLmdvdi5i''@;'; put 'put ''ciIsInJqLmdvdi5iciIsInJuLmdvdi5iciIsInJvLmdvdi5iciIsInJyLmdvdi5iciIsInJzLmdvdi5iciIsInNjLmdvdi5iciIsInNlLmdvdi5iciIsInNwLmdvdi5iciIsInRvLmdvdi5iciIsImdydS5iciIsImltYi5iciIsImluZC5iciIsImluZi5iciIsImphYi5iciIsImphbXBhLmJy''@;'; put 'put ''IiwiamRmLmJyIiwiam9pbnZpbGxlLmJyIiwiam9yLmJyIiwianVzLmJyIiwibGVnLmJyIiwibGVpbGFvLmJyIiwibGVsLmJyIiwibG9nLmJyIiwibG9uZHJpbmEuYnIiLCJtYWNhcGEuYnIiLCJtYWNlaW8uYnIiLCJtYW5hdXMuYnIiLCJtYXJpbmdhLmJyIiwibWF0LmJyIiwibWVkLmJyIiwi''@;'; put 'put ''bWlsLmJyIiwibW9yZW5hLmJyIiwibXAuYnIiLCJtdXMuYnIiLCJuYXRhbC5iciIsIm5ldC5iciIsIm5pdGVyb2kuYnIiLCIqLm5vbS5iciIsIm5vdC5iciIsIm50ci5iciIsIm9kby5iciIsIm9uZy5iciIsIm9yZy5iciIsIm9zYXNjby5iciIsInBhbG1hcy5iciIsInBvYS5iciIsInBwZy5i''@;'; put 'put ''ciIsInByby5iciIsInBzYy5iciIsInBzaS5iciIsInB2aC5iciIsInFzbC5iciIsInJhZGlvLmJyIiwicmVjLmJyIiwicmVjaWZlLmJyIiwicmVwLmJyIiwicmliZWlyYW8uYnIiLCJyaW8uYnIiLCJyaW9icmFuY28uYnIiLCJyaW9wcmV0by5iciIsInNhbHZhZG9yLmJyIiwic2FtcGEuYnIi''@;'; put 'put ''LCJzYW50YW1hcmlhLmJyIiwic2FudG9hbmRyZS5iciIsInNhb2Jlcm5hcmRvLmJyIiwic2FvZ29uY2EuYnIiLCJzZWcuYnIiLCJzamMuYnIiLCJzbGcuYnIiLCJzbHouYnIiLCJzb3JvY2FiYS5iciIsInNydi5iciIsInRheGkuYnIiLCJ0Yy5iciIsInRlYy5iciIsInRlby5iciIsInRoZS5i''@;'; put 'put ''ciIsInRtcC5iciIsInRyZC5iciIsInR1ci5iciIsInR2LmJyIiwidWRpLmJyIiwidmV0LmJyIiwidml4LmJyIiwidmxvZy5iciIsIndpa2kuYnIiLCJ6bGcuYnIiLCJicyIsImNvbS5icyIsImVkdS5icyIsImdvdi5icyIsIm5ldC5icyIsIm9yZy5icyIsImJ0IiwiY29tLmJ0IiwiZWR1LmJ0''@;'; put 'put ''IiwiZ292LmJ0IiwibmV0LmJ0Iiwib3JnLmJ0IiwiYnYiLCJidyIsImNvLmJ3Iiwib3JnLmJ3IiwiYnkiLCJnb3YuYnkiLCJtaWwuYnkiLCJjb20uYnkiLCJvZi5ieSIsImJ6IiwiY28uYnoiLCJjb20uYnoiLCJlZHUuYnoiLCJnb3YuYnoiLCJuZXQuYnoiLCJvcmcuYnoiLCJjYSIsImFiLmNh''@;'; put 'put ''IiwiYmMuY2EiLCJtYi5jYSIsIm5iLmNhIiwibmYuY2EiLCJubC5jYSIsIm5zLmNhIiwibnQuY2EiLCJudS5jYSIsIm9uLmNhIiwicGUuY2EiLCJxYy5jYSIsInNrLmNhIiwieWsuY2EiLCJnYy5jYSIsImNhdCIsImNjIiwiY2QiLCJnb3YuY2QiLCJjZiIsImNnIiwiY2giLCJjaSIsImFjLmNp''@;'; put 'put ''IiwiYVx4ZTlyb3BvcnQuY2kiLCJhc3NvLmNpIiwiY28uY2kiLCJjb20uY2kiLCJlZC5jaSIsImVkdS5jaSIsImdvLmNpIiwiZ291di5jaSIsImludC5jaSIsIm5ldC5jaSIsIm9yLmNpIiwib3JnLmNpIiwiKi5jayIsIiF3d3cuY2siLCJjbCIsImNvLmNsIiwiZ29iLmNsIiwiZ292LmNsIiwi''@;'; put 'put ''bWlsLmNsIiwiY20iLCJjby5jbSIsImNvbS5jbSIsImdvdi5jbSIsIm5ldC5jbSIsImNuIiwiYWMuY24iLCJjb20uY24iLCJlZHUuY24iLCJnb3YuY24iLCJtaWwuY24iLCJuZXQuY24iLCJvcmcuY24iLCJcdTUxNmNcdTUzZjguY24iLCJcdTdkYjJcdTdkNjEuY24iLCJcdTdmNTFcdTdlZGMu''@;'; put 'put ''Y24iLCJhaC5jbiIsImJqLmNuIiwiY3EuY24iLCJmai5jbiIsImdkLmNuIiwiZ3MuY24iLCJneC5jbiIsImd6LmNuIiwiaGEuY24iLCJoYi5jbiIsImhlLmNuIiwiaGkuY24iLCJoay5jbiIsImhsLmNuIiwiaG4uY24iLCJqbC5jbiIsImpzLmNuIiwianguY24iLCJsbi5jbiIsIm1vLmNuIiwi''@;'; put 'put ''bm0uY24iLCJueC5jbiIsInFoLmNuIiwic2MuY24iLCJzZC5jbiIsInNoLmNuIiwic24uY24iLCJzeC5jbiIsInRqLmNuIiwidHcuY24iLCJ4ai5jbiIsInh6LmNuIiwieW4uY24iLCJ6ai5jbiIsImNvIiwiY29tLmNvIiwiZWR1LmNvIiwiZ292LmNvIiwibWlsLmNvIiwibmV0LmNvIiwibm9t''@;'; put 'put ''LmNvIiwib3JnLmNvIiwiY29tIiwiY29vcCIsImNyIiwiYWMuY3IiLCJjby5jciIsImVkLmNyIiwiZmkuY3IiLCJnby5jciIsIm9yLmNyIiwic2EuY3IiLCJjdSIsImNvbS5jdSIsImVkdS5jdSIsImdvYi5jdSIsImluZi5jdSIsIm5hdC5jdSIsIm5ldC5jdSIsIm9yZy5jdSIsImN2IiwiY29t''@;'; put 'put ''LmN2IiwiZWR1LmN2IiwiaWQuY3YiLCJpbnQuY3YiLCJuZXQuY3YiLCJub21lLmN2Iiwib3JnLmN2IiwicHVibC5jdiIsImN3IiwiY29tLmN3IiwiZWR1LmN3IiwibmV0LmN3Iiwib3JnLmN3IiwiY3giLCJnb3YuY3giLCJjeSIsImFjLmN5IiwiYml6LmN5IiwiY29tLmN5IiwiZWtsb2dlcy5j''@;'; put 'put ''eSIsImdvdi5jeSIsImx0ZC5jeSIsIm1pbC5jeSIsIm5ldC5jeSIsIm9yZy5jeSIsInByZXNzLmN5IiwicHJvLmN5IiwidG0uY3kiLCJjeiIsImRlIiwiZGoiLCJkayIsImRtIiwiY28uZG0iLCJjb20uZG0iLCJlZHUuZG0iLCJnb3YuZG0iLCJuZXQuZG0iLCJvcmcuZG0iLCJkbyIsImFydC5k''@;'; put 'put ''byIsImNvbS5kbyIsImVkdS5kbyIsImdvYi5kbyIsImdvdi5kbyIsIm1pbC5kbyIsIm5ldC5kbyIsIm9yZy5kbyIsInNsZC5kbyIsIndlYi5kbyIsImR6IiwiYXJ0LmR6IiwiYXNzby5keiIsImNvbS5keiIsImVkdS5keiIsImdvdi5keiIsIm5ldC5keiIsIm9yZy5keiIsInBvbC5keiIsInNv''@;'; put 'put ''Yy5keiIsInRtLmR6IiwiZWMiLCJjb20uZWMiLCJlZHUuZWMiLCJmaW4uZWMiLCJnb2IuZWMiLCJnb3YuZWMiLCJpbmZvLmVjIiwiazEyLmVjIiwibWVkLmVjIiwibWlsLmVjIiwibmV0LmVjIiwib3JnLmVjIiwicHJvLmVjIiwiZWR1IiwiZWUiLCJhaXAuZWUiLCJjb20uZWUiLCJlZHUuZWUi''@;'; put 'put ''LCJmaWUuZWUiLCJnb3YuZWUiLCJsaWIuZWUiLCJtZWQuZWUiLCJvcmcuZWUiLCJwcmkuZWUiLCJyaWlrLmVlIiwiZWciLCJhYy5lZyIsImNvbS5lZyIsImVkdS5lZyIsImV1bi5lZyIsImdvdi5lZyIsImluZm8uZWciLCJtZS5lZyIsIm1pbC5lZyIsIm5hbWUuZWciLCJuZXQuZWciLCJvcmcu''@;'; put 'put ''ZWciLCJzY2kuZWciLCJzcG9ydC5lZyIsInR2LmVnIiwiKi5lciIsImVzIiwiY29tLmVzIiwiZWR1LmVzIiwiZ29iLmVzIiwibm9tLmVzIiwib3JnLmVzIiwiZXQiLCJiaXouZXQiLCJjb20uZXQiLCJlZHUuZXQiLCJnb3YuZXQiLCJpbmZvLmV0IiwibmFtZS5ldCIsIm5ldC5ldCIsIm9yZy5l''@;'; put 'put ''dCIsImV1IiwiZmkiLCJhbGFuZC5maSIsImZqIiwiYWMuZmoiLCJiaXouZmoiLCJjb20uZmoiLCJnb3YuZmoiLCJpbmZvLmZqIiwibWlsLmZqIiwibmFtZS5maiIsIm5ldC5maiIsIm9yZy5maiIsInByby5maiIsIiouZmsiLCJmbSIsImNvbS5mbSIsImVkdS5mbSIsIm5ldC5mbSIsIm9yZy5m''@;'; put 'put ''bSIsImZvIiwiZnIiLCJhc3NvLmZyIiwiY29tLmZyIiwiZ291di5mciIsIm5vbS5mciIsInByZC5mciIsInRtLmZyIiwiYXZvdWVzLmZyIiwiY2NpLmZyIiwiZ3JldGEuZnIiLCJodWlzc2llci1qdXN0aWNlLmZyIiwiZ2EiLCJnYiIsImdkIiwiZWR1LmdkIiwiZ292LmdkIiwiZ2UiLCJjb20u''@;'; put 'put ''Z2UiLCJlZHUuZ2UiLCJnb3YuZ2UiLCJuZXQuZ2UiLCJvcmcuZ2UiLCJwdnQuZ2UiLCJzY2hvb2wuZ2UiLCJnZiIsImdnIiwiY28uZ2ciLCJuZXQuZ2ciLCJvcmcuZ2ciLCJnaCIsImNvbS5naCIsImVkdS5naCIsImdvdi5naCIsIm1pbC5naCIsIm9yZy5naCIsImdpIiwiY29tLmdpIiwiZWR1''@;'; put 'put ''LmdpIiwiZ292LmdpIiwibHRkLmdpIiwibW9kLmdpIiwib3JnLmdpIiwiZ2wiLCJjby5nbCIsImNvbS5nbCIsImVkdS5nbCIsIm5ldC5nbCIsIm9yZy5nbCIsImdtIiwiZ24iLCJhYy5nbiIsImNvbS5nbiIsImVkdS5nbiIsImdvdi5nbiIsIm5ldC5nbiIsIm9yZy5nbiIsImdvdiIsImdwIiwi''@;'; put 'put ''YXNzby5ncCIsImNvbS5ncCIsImVkdS5ncCIsIm1vYmkuZ3AiLCJuZXQuZ3AiLCJvcmcuZ3AiLCJncSIsImdyIiwiY29tLmdyIiwiZWR1LmdyIiwiZ292LmdyIiwibmV0LmdyIiwib3JnLmdyIiwiZ3MiLCJndCIsImNvbS5ndCIsImVkdS5ndCIsImdvYi5ndCIsImluZC5ndCIsIm1pbC5ndCIs''@;'; put 'put ''Im5ldC5ndCIsIm9yZy5ndCIsImd1IiwiY29tLmd1IiwiZWR1Lmd1IiwiZ292Lmd1IiwiZ3VhbS5ndSIsImluZm8uZ3UiLCJuZXQuZ3UiLCJvcmcuZ3UiLCJ3ZWIuZ3UiLCJndyIsImd5IiwiY28uZ3kiLCJjb20uZ3kiLCJlZHUuZ3kiLCJnb3YuZ3kiLCJuZXQuZ3kiLCJvcmcuZ3kiLCJoayIs''@;'; put 'put ''ImNvbS5oayIsImVkdS5oayIsImdvdi5oayIsImlkdi5oayIsIm5ldC5oayIsIm9yZy5oayIsIlx1NGUyYVx1NGViYS5oayIsIlx1NTAwYlx1NGViYS5oayIsIlx1NTE2Y1x1NTNmOC5oayIsIlx1NjUzZlx1NWU5Yy5oayIsIlx1NjU0ZVx1ODBiMi5oayIsIlx1NjU1OVx1ODBiMi5oayIsIlx1''@;'; put 'put ''N2I4N1x1NGViYS5oayIsIlx1N2Q0NFx1N2U1NC5oayIsIlx1N2Q0NFx1N2VjNy5oayIsIlx1N2RiMlx1N2Q2MS5oayIsIlx1N2RiMlx1N2VkYy5oayIsIlx1N2VjNFx1N2U1NC5oayIsIlx1N2VjNFx1N2VjNy5oayIsIlx1N2Y1MVx1N2Q2MS5oayIsIlx1N2Y1MVx1N2VkYy5oayIsImhtIiwi''@;'; put 'put ''aG4iLCJjb20uaG4iLCJlZHUuaG4iLCJnb2IuaG4iLCJtaWwuaG4iLCJuZXQuaG4iLCJvcmcuaG4iLCJociIsImNvbS5ociIsImZyb20uaHIiLCJpei5ociIsIm5hbWUuaHIiLCJodCIsImFkdWx0Lmh0IiwiYXJ0Lmh0IiwiYXNzby5odCIsImNvbS5odCIsImNvb3AuaHQiLCJlZHUuaHQiLCJm''@;'; put 'put ''aXJtLmh0IiwiZ291di5odCIsImluZm8uaHQiLCJtZWQuaHQiLCJuZXQuaHQiLCJvcmcuaHQiLCJwZXJzby5odCIsInBvbC5odCIsInByby5odCIsInJlbC5odCIsInNob3AuaHQiLCJodSIsIjIwMDAuaHUiLCJhZ3Jhci5odSIsImJvbHQuaHUiLCJjYXNpbm8uaHUiLCJjaXR5Lmh1IiwiY28u''@;'; put 'put ''aHUiLCJlcm90aWNhLmh1IiwiZXJvdGlrYS5odSIsImZpbG0uaHUiLCJmb3J1bS5odSIsImdhbWVzLmh1IiwiaG90ZWwuaHUiLCJpbmZvLmh1IiwiaW5nYXRsYW4uaHUiLCJqb2dhc3ouaHUiLCJrb255dmVsby5odSIsImxha2FzLmh1IiwibWVkaWEuaHUiLCJuZXdzLmh1Iiwib3JnLmh1Iiwi''@;'; put 'put ''cHJpdi5odSIsInJla2xhbS5odSIsInNleC5odSIsInNob3AuaHUiLCJzcG9ydC5odSIsInN1bGkuaHUiLCJzemV4Lmh1IiwidG0uaHUiLCJ0b3pzZGUuaHUiLCJ1dGF6YXMuaHUiLCJ2aWRlby5odSIsImlkIiwiYWMuaWQiLCJiaXouaWQiLCJjby5pZCIsImRlc2EuaWQiLCJnby5pZCIsIm1p''@;'; put 'put ''bC5pZCIsIm15LmlkIiwibmV0LmlkIiwib3IuaWQiLCJwb25wZXMuaWQiLCJzY2guaWQiLCJ3ZWIuaWQiLCJpZSIsImdvdi5pZSIsImlsIiwiYWMuaWwiLCJjby5pbCIsImdvdi5pbCIsImlkZi5pbCIsImsxMi5pbCIsIm11bmkuaWwiLCJuZXQuaWwiLCJvcmcuaWwiLCJcdTA1ZDlcdTA1ZTlc''@;'; put 'put ''dTA1ZThcdTA1ZDBcdTA1ZGMiLCJcdTA1ZDBcdTA1ZTdcdTA1ZDNcdTA1ZGVcdTA1ZDlcdTA1ZDQuXHUwNWQ5XHUwNWU5XHUwNWU4XHUwNWQwXHUwNWRjIiwiXHUwNWQ5XHUwNWU5XHUwNWQ1XHUwNWQxLlx1MDVkOVx1MDVlOVx1MDVlOFx1MDVkMFx1MDVkYyIsIlx1MDVlNlx1MDVkNFx1MDVk''@;'; put 'put ''Yy5cdTA1ZDlcdTA1ZTlcdTA1ZThcdTA1ZDBcdTA1ZGMiLCJcdTA1ZGVcdTA1ZGVcdTA1ZTlcdTA1ZGMuXHUwNWQ5XHUwNWU5XHUwNWU4XHUwNWQwXHUwNWRjIiwiaW0iLCJhYy5pbSIsImNvLmltIiwibHRkLmNvLmltIiwicGxjLmNvLmltIiwiY29tLmltIiwibmV0LmltIiwib3JnLmltIiwi''@;'; put 'put ''dHQuaW0iLCJ0di5pbSIsImluIiwiNWcuaW4iLCI2Zy5pbiIsImFjLmluIiwiYWkuaW4iLCJhbS5pbiIsImJpaGFyLmluIiwiYml6LmluIiwiYnVzaW5lc3MuaW4iLCJjYS5pbiIsImNuLmluIiwiY28uaW4iLCJjb20uaW4iLCJjb29wLmluIiwiY3MuaW4iLCJkZWxoaS5pbiIsImRyLmluIiwi''@;'; put 'put ''ZWR1LmluIiwiZXIuaW4iLCJmaXJtLmluIiwiZ2VuLmluIiwiZ292LmluIiwiZ3VqYXJhdC5pbiIsImluZC5pbiIsImluZm8uaW4iLCJpbnQuaW4iLCJpbnRlcm5ldC5pbiIsImlvLmluIiwibWUuaW4iLCJtaWwuaW4iLCJuZXQuaW4iLCJuaWMuaW4iLCJvcmcuaW4iLCJwZy5pbiIsInBvc3Qu''@;'; put 'put ''aW4iLCJwcm8uaW4iLCJyZXMuaW4iLCJ0cmF2ZWwuaW4iLCJ0di5pbiIsInVrLmluIiwidXAuaW4iLCJ1cy5pbiIsImluZm8iLCJpbnQiLCJldS5pbnQiLCJpbyIsImNvLmlvIiwiY29tLmlvIiwiZWR1LmlvIiwiZ292LmlvIiwibWlsLmlvIiwibmV0LmlvIiwibm9tLmlvIiwib3JnLmlvIiwi''@;'; put 'put ''aXEiLCJjb20uaXEiLCJlZHUuaXEiLCJnb3YuaXEiLCJtaWwuaXEiLCJuZXQuaXEiLCJvcmcuaXEiLCJpciIsImFjLmlyIiwiY28uaXIiLCJnb3YuaXIiLCJpZC5pciIsIm5ldC5pciIsIm9yZy5pciIsInNjaC5pciIsIlx1MDYyN1x1MDZjY1x1MDYzMVx1MDYyN1x1MDY0Ni5pciIsIlx1MDYy''@;'; put 'put ''N1x1MDY0YVx1MDYzMVx1MDYyN1x1MDY0Ni5pciIsImlzIiwiaXQiLCJlZHUuaXQiLCJnb3YuaXQiLCJhYnIuaXQiLCJhYnJ1enpvLml0IiwiYW9zdGEtdmFsbGV5Lml0IiwiYW9zdGF2YWxsZXkuaXQiLCJiYXMuaXQiLCJiYXNpbGljYXRhLml0IiwiY2FsLml0IiwiY2FsYWJyaWEuaXQiLCJj''@;'; put 'put ''YW0uaXQiLCJjYW1wYW5pYS5pdCIsImVtaWxpYS1yb21hZ25hLml0IiwiZW1pbGlhcm9tYWduYS5pdCIsImVtci5pdCIsImZyaXVsaS12LWdpdWxpYS5pdCIsImZyaXVsaS12ZS1naXVsaWEuaXQiLCJmcml1bGktdmVnaXVsaWEuaXQiLCJmcml1bGktdmVuZXppYS1naXVsaWEuaXQiLCJmcml1''@;'; put 'put ''bGktdmVuZXppYWdpdWxpYS5pdCIsImZyaXVsaS12Z2l1bGlhLml0IiwiZnJpdWxpdi1naXVsaWEuaXQiLCJmcml1bGl2ZS1naXVsaWEuaXQiLCJmcml1bGl2ZWdpdWxpYS5pdCIsImZyaXVsaXZlbmV6aWEtZ2l1bGlhLml0IiwiZnJpdWxpdmVuZXppYWdpdWxpYS5pdCIsImZyaXVsaXZnaXVs''@;'; put 'put ''aWEuaXQiLCJmdmcuaXQiLCJsYXouaXQiLCJsYXppby5pdCIsImxpZy5pdCIsImxpZ3VyaWEuaXQiLCJsb20uaXQiLCJsb21iYXJkaWEuaXQiLCJsb21iYXJkeS5pdCIsImx1Y2FuaWEuaXQiLCJtYXIuaXQiLCJtYXJjaGUuaXQiLCJtb2wuaXQiLCJtb2xpc2UuaXQiLCJwaWVkbW9udC5pdCIs''@;'; put 'put ''InBpZW1vbnRlLml0IiwicG1uLml0IiwicHVnLml0IiwicHVnbGlhLml0Iiwic2FyLml0Iiwic2FyZGVnbmEuaXQiLCJzYXJkaW5pYS5pdCIsInNpYy5pdCIsInNpY2lsaWEuaXQiLCJzaWNpbHkuaXQiLCJ0YWEuaXQiLCJ0b3MuaXQiLCJ0b3NjYW5hLml0IiwidHJlbnRpbi1zdWQtdGlyb2wu''@;'; put 'put ''aXQiLCJ0cmVudGluLXNceGZjZC10aXJvbC5pdCIsInRyZW50aW4tc3VkdGlyb2wuaXQiLCJ0cmVudGluLXNceGZjZHRpcm9sLml0IiwidHJlbnRpbi1zdWVkLXRpcm9sLml0IiwidHJlbnRpbi1zdWVkdGlyb2wuaXQiLCJ0cmVudGluby5pdCIsInRyZW50aW5vLWEtYWRpZ2UuaXQiLCJ0cmVu''@;'; put 'put ''dGluby1hYWRpZ2UuaXQiLCJ0cmVudGluby1hbHRvLWFkaWdlLml0IiwidHJlbnRpbm8tYWx0b2FkaWdlLml0IiwidHJlbnRpbm8tcy10aXJvbC5pdCIsInRyZW50aW5vLXN0aXJvbC5pdCIsInRyZW50aW5vLXN1ZC10aXJvbC5pdCIsInRyZW50aW5vLXNceGZjZC10aXJvbC5pdCIsInRyZW50''@;'; put 'put ''aW5vLXN1ZHRpcm9sLml0IiwidHJlbnRpbm8tc1x4ZmNkdGlyb2wuaXQiLCJ0cmVudGluby1zdWVkLXRpcm9sLml0IiwidHJlbnRpbm8tc3VlZHRpcm9sLml0IiwidHJlbnRpbm9hLWFkaWdlLml0IiwidHJlbnRpbm9hYWRpZ2UuaXQiLCJ0cmVudGlub2FsdG8tYWRpZ2UuaXQiLCJ0cmVudGlu''@;'; put 'put ''b2FsdG9hZGlnZS5pdCIsInRyZW50aW5vcy10aXJvbC5pdCIsInRyZW50aW5vc3Rpcm9sLml0IiwidHJlbnRpbm9zdWQtdGlyb2wuaXQiLCJ0cmVudGlub3NceGZjZC10aXJvbC5pdCIsInRyZW50aW5vc3VkdGlyb2wuaXQiLCJ0cmVudGlub3NceGZjZHRpcm9sLml0IiwidHJlbnRpbm9zdWVk''@;'; put 'put ''LXRpcm9sLml0IiwidHJlbnRpbm9zdWVkdGlyb2wuaXQiLCJ0cmVudGluc3VkLXRpcm9sLml0IiwidHJlbnRpbnNceGZjZC10aXJvbC5pdCIsInRyZW50aW5zdWR0aXJvbC5pdCIsInRyZW50aW5zXHhmY2R0aXJvbC5pdCIsInRyZW50aW5zdWVkLXRpcm9sLml0IiwidHJlbnRpbnN1ZWR0aXJv''@;'; put 'put ''bC5pdCIsInR1c2NhbnkuaXQiLCJ1bWIuaXQiLCJ1bWJyaWEuaXQiLCJ2YWwtZC1hb3N0YS5pdCIsInZhbC1kYW9zdGEuaXQiLCJ2YWxkLWFvc3RhLml0IiwidmFsZGFvc3RhLml0IiwidmFsbGUtYW9zdGEuaXQiLCJ2YWxsZS1kLWFvc3RhLml0IiwidmFsbGUtZGFvc3RhLml0IiwidmFsbGVh''@;'; put 'put ''b3N0YS5pdCIsInZhbGxlZC1hb3N0YS5pdCIsInZhbGxlZGFvc3RhLml0IiwidmFsbGVlLWFvc3RlLml0IiwidmFsbFx4ZTllLWFvc3RlLml0IiwidmFsbGVlLWQtYW9zdGUuaXQiLCJ2YWxsXHhlOWUtZC1hb3N0ZS5pdCIsInZhbGxlZWFvc3RlLml0IiwidmFsbFx4ZTllYW9zdGUuaXQiLCJ2''@;'; put 'put ''YWxsZWVkYW9zdGUuaXQiLCJ2YWxsXHhlOWVkYW9zdGUuaXQiLCJ2YW8uaXQiLCJ2ZGEuaXQiLCJ2ZW4uaXQiLCJ2ZW5ldG8uaXQiLCJhZy5pdCIsImFncmlnZW50by5pdCIsImFsLml0IiwiYWxlc3NhbmRyaWEuaXQiLCJhbHRvLWFkaWdlLml0IiwiYWx0b2FkaWdlLml0IiwiYW4uaXQiLCJh''@;'; put 'put ''bmNvbmEuaXQiLCJhbmRyaWEtYmFybGV0dGEtdHJhbmkuaXQiLCJhbmRyaWEtdHJhbmktYmFybGV0dGEuaXQiLCJhbmRyaWFiYXJsZXR0YXRyYW5pLml0IiwiYW5kcmlhdHJhbmliYXJsZXR0YS5pdCIsImFvLml0IiwiYW9zdGEuaXQiLCJhb3N0ZS5pdCIsImFwLml0IiwiYXEuaXQiLCJhcXVp''@;'; put 'put ''bGEuaXQiLCJhci5pdCIsImFyZXp6by5pdCIsImFzY29saS1waWNlbm8uaXQiLCJhc2NvbGlwaWNlbm8uaXQiLCJhc3RpLml0IiwiYXQuaXQiLCJhdi5pdCIsImF2ZWxsaW5vLml0IiwiYmEuaXQiLCJiYWxzYW4uaXQiLCJiYWxzYW4tc3VkdGlyb2wuaXQiLCJiYWxzYW4tc1x4ZmNkdGlyb2wu''@;'; put 'put ''aXQiLCJiYWxzYW4tc3VlZHRpcm9sLml0IiwiYmFyaS5pdCIsImJhcmxldHRhLXRyYW5pLWFuZHJpYS5pdCIsImJhcmxldHRhdHJhbmlhbmRyaWEuaXQiLCJiZWxsdW5vLml0IiwiYmVuZXZlbnRvLml0IiwiYmVyZ2Ftby5pdCIsImJnLml0IiwiYmkuaXQiLCJiaWVsbGEuaXQiLCJibC5pdCIs''@;'; put 'put ''ImJuLml0IiwiYm8uaXQiLCJib2xvZ25hLml0IiwiYm9semFuby5pdCIsImJvbHphbm8tYWx0b2FkaWdlLml0IiwiYm96ZW4uaXQiLCJib3plbi1zdWR0aXJvbC5pdCIsImJvemVuLXNceGZjZHRpcm9sLml0IiwiYm96ZW4tc3VlZHRpcm9sLml0IiwiYnIuaXQiLCJicmVzY2lhLml0IiwiYnJp''@;'; put 'put ''bmRpc2kuaXQiLCJicy5pdCIsImJ0Lml0IiwiYnVsc2FuLml0IiwiYnVsc2FuLXN1ZHRpcm9sLml0IiwiYnVsc2FuLXNceGZjZHRpcm9sLml0IiwiYnVsc2FuLXN1ZWR0aXJvbC5pdCIsImJ6Lml0IiwiY2EuaXQiLCJjYWdsaWFyaS5pdCIsImNhbHRhbmlzc2V0dGEuaXQiLCJjYW1waWRhbm8t''@;'; put 'put ''bWVkaW8uaXQiLCJjYW1waWRhbm9tZWRpby5pdCIsImNhbXBvYmFzc28uaXQiLCJjYXJib25pYS1pZ2xlc2lhcy5pdCIsImNhcmJvbmlhaWdsZXNpYXMuaXQiLCJjYXJyYXJhLW1hc3NhLml0IiwiY2FycmFyYW1hc3NhLml0IiwiY2FzZXJ0YS5pdCIsImNhdGFuaWEuaXQiLCJjYXRhbnphcm8u''@;'; put 'put ''aXQiLCJjYi5pdCIsImNlLml0IiwiY2VzZW5hLWZvcmxpLml0IiwiY2VzZW5hLWZvcmxceGVjLml0IiwiY2VzZW5hZm9ybGkuaXQiLCJjZXNlbmFmb3JsXHhlYy5pdCIsImNoLml0IiwiY2hpZXRpLml0IiwiY2kuaXQiLCJjbC5pdCIsImNuLml0IiwiY28uaXQiLCJjb21vLml0IiwiY29zZW56''@;'; put 'put ''YS5pdCIsImNyLml0IiwiY3JlbW9uYS5pdCIsImNyb3RvbmUuaXQiLCJjcy5pdCIsImN0Lml0IiwiY3VuZW8uaXQiLCJjei5pdCIsImRlbGwtb2dsaWFzdHJhLml0IiwiZGVsbG9nbGlhc3RyYS5pdCIsImVuLml0IiwiZW5uYS5pdCIsImZjLml0IiwiZmUuaXQiLCJmZXJtby5pdCIsImZlcnJh''@;'; put 'put ''cmEuaXQiLCJmZy5pdCIsImZpLml0IiwiZmlyZW56ZS5pdCIsImZsb3JlbmNlLml0IiwiZm0uaXQiLCJmb2dnaWEuaXQiLCJmb3JsaS1jZXNlbmEuaXQiLCJmb3JsXHhlYy1jZXNlbmEuaXQiLCJmb3JsaWNlc2VuYS5pdCIsImZvcmxceGVjY2VzZW5hLml0IiwiZnIuaXQiLCJmcm9zaW5vbmUu''@;'; put 'put ''aXQiLCJnZS5pdCIsImdlbm9hLml0IiwiZ2Vub3ZhLml0IiwiZ28uaXQiLCJnb3JpemlhLml0IiwiZ3IuaXQiLCJncm9zc2V0by5pdCIsImlnbGVzaWFzLWNhcmJvbmlhLml0IiwiaWdsZXNpYXNjYXJib25pYS5pdCIsImltLml0IiwiaW1wZXJpYS5pdCIsImlzLml0IiwiaXNlcm5pYS5pdCIs''@;'; put 'put ''ImtyLml0IiwibGEtc3BlemlhLml0IiwibGFxdWlsYS5pdCIsImxhc3BlemlhLml0IiwibGF0aW5hLml0IiwibGMuaXQiLCJsZS5pdCIsImxlY2NlLml0IiwibGVjY28uaXQiLCJsaS5pdCIsImxpdm9ybm8uaXQiLCJsby5pdCIsImxvZGkuaXQiLCJsdC5pdCIsImx1Lml0IiwibHVjY2EuaXQi''@;'; put 'put ''LCJtYWNlcmF0YS5pdCIsIm1hbnRvdmEuaXQiLCJtYXNzYS1jYXJyYXJhLml0IiwibWFzc2FjYXJyYXJhLml0IiwibWF0ZXJhLml0IiwibWIuaXQiLCJtYy5pdCIsIm1lLml0IiwibWVkaW8tY2FtcGlkYW5vLml0IiwibWVkaW9jYW1waWRhbm8uaXQiLCJtZXNzaW5hLml0IiwibWkuaXQiLCJt''@;'; put 'put ''aWxhbi5pdCIsIm1pbGFuby5pdCIsIm1uLml0IiwibW8uaXQiLCJtb2RlbmEuaXQiLCJtb256YS5pdCIsIm1vbnphLWJyaWFuemEuaXQiLCJtb256YS1lLWRlbGxhLWJyaWFuemEuaXQiLCJtb256YWJyaWFuemEuaXQiLCJtb256YWVicmlhbnphLml0IiwibW9uemFlZGVsbGFicmlhbnphLml0''@;'; put 'put ''IiwibXMuaXQiLCJtdC5pdCIsIm5hLml0IiwibmFwbGVzLml0IiwibmFwb2xpLml0Iiwibm8uaXQiLCJub3ZhcmEuaXQiLCJudS5pdCIsIm51b3JvLml0Iiwib2cuaXQiLCJvZ2xpYXN0cmEuaXQiLCJvbGJpYS10ZW1waW8uaXQiLCJvbGJpYXRlbXBpby5pdCIsIm9yLml0Iiwib3Jpc3Rhbm8u''@;'; put 'put ''aXQiLCJvdC5pdCIsInBhLml0IiwicGFkb3ZhLml0IiwicGFkdWEuaXQiLCJwYWxlcm1vLml0IiwicGFybWEuaXQiLCJwYXZpYS5pdCIsInBjLml0IiwicGQuaXQiLCJwZS5pdCIsInBlcnVnaWEuaXQiLCJwZXNhcm8tdXJiaW5vLml0IiwicGVzYXJvdXJiaW5vLml0IiwicGVzY2FyYS5pdCIs''@;'; put 'put ''InBnLml0IiwicGkuaXQiLCJwaWFjZW56YS5pdCIsInBpc2EuaXQiLCJwaXN0b2lhLml0IiwicG4uaXQiLCJwby5pdCIsInBvcmRlbm9uZS5pdCIsInBvdGVuemEuaXQiLCJwci5pdCIsInByYXRvLml0IiwicHQuaXQiLCJwdS5pdCIsInB2Lml0IiwicHouaXQiLCJyYS5pdCIsInJhZ3VzYS5p''@;'; put 'put ''dCIsInJhdmVubmEuaXQiLCJyYy5pdCIsInJlLml0IiwicmVnZ2lvLWNhbGFicmlhLml0IiwicmVnZ2lvLWVtaWxpYS5pdCIsInJlZ2dpb2NhbGFicmlhLml0IiwicmVnZ2lvZW1pbGlhLml0IiwicmcuaXQiLCJyaS5pdCIsInJpZXRpLml0IiwicmltaW5pLml0Iiwicm0uaXQiLCJybi5pdCIs''@;'; put 'put ''InJvLml0Iiwicm9tYS5pdCIsInJvbWUuaXQiLCJyb3ZpZ28uaXQiLCJzYS5pdCIsInNhbGVybm8uaXQiLCJzYXNzYXJpLml0Iiwic2F2b25hLml0Iiwic2kuaXQiLCJzaWVuYS5pdCIsInNpcmFjdXNhLml0Iiwic28uaXQiLCJzb25kcmlvLml0Iiwic3AuaXQiLCJzci5pdCIsInNzLml0Iiwi''@;'; put 'put ''c1x4ZmNkdGlyb2wuaXQiLCJzdWVkdGlyb2wuaXQiLCJzdi5pdCIsInRhLml0IiwidGFyYW50by5pdCIsInRlLml0IiwidGVtcGlvLW9sYmlhLml0IiwidGVtcGlvb2xiaWEuaXQiLCJ0ZXJhbW8uaXQiLCJ0ZXJuaS5pdCIsInRuLml0IiwidG8uaXQiLCJ0b3Jpbm8uaXQiLCJ0cC5pdCIsInRy''@;'; put 'put ''Lml0IiwidHJhbmktYW5kcmlhLWJhcmxldHRhLml0IiwidHJhbmktYmFybGV0dGEtYW5kcmlhLml0IiwidHJhbmlhbmRyaWFiYXJsZXR0YS5pdCIsInRyYW5pYmFybGV0dGFhbmRyaWEuaXQiLCJ0cmFwYW5pLml0IiwidHJlbnRvLml0IiwidHJldmlzby5pdCIsInRyaWVzdGUuaXQiLCJ0cy5p''@;'; put 'put ''dCIsInR1cmluLml0IiwidHYuaXQiLCJ1ZC5pdCIsInVkaW5lLml0IiwidXJiaW5vLXBlc2Fyby5pdCIsInVyYmlub3Blc2Fyby5pdCIsInZhLml0IiwidmFyZXNlLml0IiwidmIuaXQiLCJ2Yy5pdCIsInZlLml0IiwidmVuZXppYS5pdCIsInZlbmljZS5pdCIsInZlcmJhbmlhLml0IiwidmVy''@;'; put 'put ''Y2VsbGkuaXQiLCJ2ZXJvbmEuaXQiLCJ2aS5pdCIsInZpYm8tdmFsZW50aWEuaXQiLCJ2aWJvdmFsZW50aWEuaXQiLCJ2aWNlbnphLml0Iiwidml0ZXJiby5pdCIsInZyLml0IiwidnMuaXQiLCJ2dC5pdCIsInZ2Lml0IiwiamUiLCJjby5qZSIsIm5ldC5qZSIsIm9yZy5qZSIsIiouam0iLCJq''@;'; put 'put ''byIsImFncmkuam8iLCJhaS5qbyIsImNvbS5qbyIsImVkdS5qbyIsImVuZy5qbyIsImZtLmpvIiwiZ292LmpvIiwibWlsLmpvIiwibmV0LmpvIiwib3JnLmpvIiwicGVyLmpvIiwicGhkLmpvIiwic2NoLmpvIiwidHYuam8iLCJqb2JzIiwianAiLCJhYy5qcCIsImFkLmpwIiwiY28uanAiLCJl''@;'; put 'put ''ZC5qcCIsImdvLmpwIiwiZ3IuanAiLCJsZy5qcCIsIm5lLmpwIiwib3IuanAiLCJhaWNoaS5qcCIsImFraXRhLmpwIiwiYW9tb3JpLmpwIiwiY2hpYmEuanAiLCJlaGltZS5qcCIsImZ1a3VpLmpwIiwiZnVrdW9rYS5qcCIsImZ1a3VzaGltYS5qcCIsImdpZnUuanAiLCJndW5tYS5qcCIsImhp''@;'; put 'put ''cm9zaGltYS5qcCIsImhva2thaWRvLmpwIiwiaHlvZ28uanAiLCJpYmFyYWtpLmpwIiwiaXNoaWthd2EuanAiLCJpd2F0ZS5qcCIsImthZ2F3YS5qcCIsImthZ29zaGltYS5qcCIsImthbmFnYXdhLmpwIiwia29jaGkuanAiLCJrdW1hbW90by5qcCIsImt5b3RvLmpwIiwibWllLmpwIiwibWl5''@;'; put 'put ''YWdpLmpwIiwibWl5YXpha2kuanAiLCJuYWdhbm8uanAiLCJuYWdhc2FraS5qcCIsIm5hcmEuanAiLCJuaWlnYXRhLmpwIiwib2l0YS5qcCIsIm9rYXlhbWEuanAiLCJva2luYXdhLmpwIiwib3Nha2EuanAiLCJzYWdhLmpwIiwic2FpdGFtYS5qcCIsInNoaWdhLmpwIiwic2hpbWFuZS5qcCIs''@;'; put 'put ''InNoaXp1b2thLmpwIiwidG9jaGlnaS5qcCIsInRva3VzaGltYS5qcCIsInRva3lvLmpwIiwidG90dG9yaS5qcCIsInRveWFtYS5qcCIsIndha2F5YW1hLmpwIiwieWFtYWdhdGEuanAiLCJ5YW1hZ3VjaGkuanAiLCJ5YW1hbmFzaGkuanAiLCJcdTRlMDlcdTkxY2QuanAiLCJcdTRlYWNcdTkw''@;'; put 'put ''ZmQuanAiLCJcdTRmNTBcdThjYzAuanAiLCJcdTUxNzVcdTVlYWIuanAiLCJcdTUzMTdcdTZkNzdcdTkwNTMuanAiLCJcdTUzNDNcdTg0NDkuanAiLCJcdTU0OGNcdTZiNGNcdTVjNzEuanAiLCJcdTU3ZmNcdTczODkuanAiLCJcdTU5MjdcdTUyMDYuanAiLCJcdTU5MjdcdTk2MmEuanAiLCJc''@;'; put 'put ''dTU5NDhcdTgyNmYuanAiLCJcdTViYWVcdTU3Y2UuanAiLCJcdTViYWVcdTVkMGUuanAiLCJcdTViY2NcdTVjNzEuanAiLCJcdTVjNzFcdTUzZTMuanAiLCJcdTVjNzFcdTVmNjIuanAiLCJcdTVjNzFcdTY4YTguanAiLCJcdTVjOTBcdTk2MWMuanAiLCJcdTVjYTFcdTVjNzEuanAiLCJcdTVj''@;'; put 'put ''YTlcdTYyNGIuanAiLCJcdTVjZjZcdTY4MzkuanAiLCJcdTVlODNcdTVjZjYuanAiLCJcdTVmYjNcdTVjZjYuanAiLCJcdTYxMWJcdTVhOWIuanAiLCJcdTYxMWJcdTc3ZTUuanAiLCJcdTY1YjBcdTZmNWYuanAiLCJcdTY3NzFcdTRlYWMuanAiLCJcdTY4MDNcdTY3MjguanAiLCJcdTZjOTZc''@;'; put 'put ''dTdlMDQuanAiLCJcdTZlY2JcdThjYzAuanAiLCJcdTcxOGFcdTY3MmMuanAiLCJcdTc3ZjNcdTVkZGQuanAiLCJcdTc5NWVcdTU5NDhcdTVkZGQuanAiLCJcdTc5OGZcdTRlOTUuanAiLCJcdTc5OGZcdTVjYTEuanAiLCJcdTc5OGZcdTVjZjYuanAiLCJcdTc5Y2JcdTc1MzAuanAiLCJcdTdm''@;'; put 'put ''YTRcdTk5YWMuanAiLCJcdTgzMjhcdTU3Y2UuanAiLCJcdTk1NzdcdTVkMGUuanAiLCJcdTk1NzdcdTkxY2UuanAiLCJcdTk3NTJcdTY4ZWUuanAiLCJcdTk3NTlcdTVjYTEuanAiLCJcdTk5OTlcdTVkZGQuanAiLCJcdTlhZDhcdTc3ZTUuanAiLCJcdTljZTVcdTUzZDYuanAiLCJcdTllN2Zc''@;'; put 'put ''dTUxNTBcdTVjZjYuanAiLCIqLmthd2FzYWtpLmpwIiwiIWNpdHkua2F3YXNha2kuanAiLCIqLmtpdGFreXVzaHUuanAiLCIhY2l0eS5raXRha3l1c2h1LmpwIiwiKi5rb2JlLmpwIiwiIWNpdHkua29iZS5qcCIsIioubmFnb3lhLmpwIiwiIWNpdHkubmFnb3lhLmpwIiwiKi5zYXBwb3JvLmpw''@;'; put 'put ''IiwiIWNpdHkuc2FwcG9yby5qcCIsIiouc2VuZGFpLmpwIiwiIWNpdHkuc2VuZGFpLmpwIiwiKi55b2tvaGFtYS5qcCIsIiFjaXR5Lnlva29oYW1hLmpwIiwiYWlzYWkuYWljaGkuanAiLCJhbWEuYWljaGkuanAiLCJhbmpvLmFpY2hpLmpwIiwiYXN1a2UuYWljaGkuanAiLCJjaGlyeXUuYWlj''@;'; put 'put ''aGkuanAiLCJjaGl0YS5haWNoaS5qcCIsImZ1c28uYWljaGkuanAiLCJnYW1hZ29yaS5haWNoaS5qcCIsImhhbmRhLmFpY2hpLmpwIiwiaGF6dS5haWNoaS5qcCIsImhla2luYW4uYWljaGkuanAiLCJoaWdhc2hpdXJhLmFpY2hpLmpwIiwiaWNoaW5vbWl5YS5haWNoaS5qcCIsImluYXphd2Eu''@;'; put 'put ''YWljaGkuanAiLCJpbnV5YW1hLmFpY2hpLmpwIiwiaXNzaGlraS5haWNoaS5qcCIsIml3YWt1cmEuYWljaGkuanAiLCJrYW5pZS5haWNoaS5qcCIsImthcml5YS5haWNoaS5qcCIsImthc3VnYWkuYWljaGkuanAiLCJraXJhLmFpY2hpLmpwIiwia2l5b3N1LmFpY2hpLmpwIiwia29tYWtpLmFp''@;'; put 'put ''Y2hpLmpwIiwia29uYW4uYWljaGkuanAiLCJrb3RhLmFpY2hpLmpwIiwibWloYW1hLmFpY2hpLmpwIiwibWl5b3NoaS5haWNoaS5qcCIsIm5pc2hpby5haWNoaS5qcCIsIm5pc3NoaW4uYWljaGkuanAiLCJvYnUuYWljaGkuanAiLCJvZ3VjaGkuYWljaGkuanAiLCJvaGFydS5haWNoaS5qcCIs''@;'; put 'put ''Im9rYXpha2kuYWljaGkuanAiLCJvd2FyaWFzYWhpLmFpY2hpLmpwIiwic2V0by5haWNoaS5qcCIsInNoaWthdHN1LmFpY2hpLmpwIiwic2hpbnNoaXJvLmFpY2hpLmpwIiwic2hpdGFyYS5haWNoaS5qcCIsInRhaGFyYS5haWNoaS5qcCIsInRha2FoYW1hLmFpY2hpLmpwIiwidG9iaXNoaW1h''@;'; put 'put ''LmFpY2hpLmpwIiwidG9laS5haWNoaS5qcCIsInRvZ28uYWljaGkuanAiLCJ0b2thaS5haWNoaS5qcCIsInRva29uYW1lLmFpY2hpLmpwIiwidG95b2FrZS5haWNoaS5qcCIsInRveW9oYXNoaS5haWNoaS5qcCIsInRveW9rYXdhLmFpY2hpLmpwIiwidG95b25lLmFpY2hpLmpwIiwidG95b3Rh''@;'; put 'put ''LmFpY2hpLmpwIiwidHN1c2hpbWEuYWljaGkuanAiLCJ5YXRvbWkuYWljaGkuanAiLCJha2l0YS5ha2l0YS5qcCIsImRhaXNlbi5ha2l0YS5qcCIsImZ1amlzYXRvLmFraXRhLmpwIiwiZ29qb21lLmFraXRhLmpwIiwiaGFjaGlyb2dhdGEuYWtpdGEuanAiLCJoYXBwb3UuYWtpdGEuanAiLCJo''@;'; put 'put ''aWdhc2hpbmFydXNlLmFraXRhLmpwIiwiaG9uam8uYWtpdGEuanAiLCJob25qeW8uYWtpdGEuanAiLCJpa2F3YS5ha2l0YS5qcCIsImthbWlrb2FuaS5ha2l0YS5qcCIsImthbWlva2EuYWtpdGEuanAiLCJrYXRhZ2FtaS5ha2l0YS5qcCIsImthenVuby5ha2l0YS5qcCIsImtpdGFha2l0YS5h''@;'; put 'put ''a2l0YS5qcCIsImtvc2FrYS5ha2l0YS5qcCIsImt5b3dhLmFraXRhLmpwIiwibWlzYXRvLmFraXRhLmpwIiwibWl0YW5lLmFraXRhLmpwIiwibW9yaXlvc2hpLmFraXRhLmpwIiwibmlrYWhvLmFraXRhLmpwIiwibm9zaGlyby5ha2l0YS5qcCIsIm9kYXRlLmFraXRhLmpwIiwib2dhLmFraXRh''@;'; put 'put ''LmpwIiwib2dhdGEuYWtpdGEuanAiLCJzZW1ib2t1LmFraXRhLmpwIiwieW9rb3RlLmFraXRhLmpwIiwieXVyaWhvbmpvLmFraXRhLmpwIiwiYW9tb3JpLmFvbW9yaS5qcCIsImdvbm9oZS5hb21vcmkuanAiLCJoYWNoaW5vaGUuYW9tb3JpLmpwIiwiaGFzaGlrYW1pLmFvbW9yaS5qcCIsImhp''@;'; put 'put ''cmFuYWkuYW9tb3JpLmpwIiwiaGlyb3Nha2kuYW9tb3JpLmpwIiwiaXRheWFuYWdpLmFvbW9yaS5qcCIsImt1cm9pc2hpLmFvbW9yaS5qcCIsIm1pc2F3YS5hb21vcmkuanAiLCJtdXRzdS5hb21vcmkuanAiLCJuYWthZG9tYXJpLmFvbW9yaS5qcCIsIm5vaGVqaS5hb21vcmkuanAiLCJvaXJh''@;'; put 'put ''c2UuYW9tb3JpLmpwIiwib3dhbmkuYW9tb3JpLmpwIiwicm9rdW5vaGUuYW9tb3JpLmpwIiwic2Fubm9oZS5hb21vcmkuanAiLCJzaGljaGlub2hlLmFvbW9yaS5qcCIsInNoaW5nby5hb21vcmkuanAiLCJ0YWtrby5hb21vcmkuanAiLCJ0b3dhZGEuYW9tb3JpLmpwIiwidHN1Z2FydS5hb21v''@;'; put 'put ''cmkuanAiLCJ0c3VydXRhLmFvbW9yaS5qcCIsImFiaWtvLmNoaWJhLmpwIiwiYXNhaGkuY2hpYmEuanAiLCJjaG9uYW4uY2hpYmEuanAiLCJjaG9zZWkuY2hpYmEuanAiLCJjaG9zaGkuY2hpYmEuanAiLCJjaHVvLmNoaWJhLmpwIiwiZnVuYWJhc2hpLmNoaWJhLmpwIiwiZnV0dHN1LmNoaWJh''@;'; put 'put ''LmpwIiwiaGFuYW1pZ2F3YS5jaGliYS5qcCIsImljaGloYXJhLmNoaWJhLmpwIiwiaWNoaWthd2EuY2hpYmEuanAiLCJpY2hpbm9taXlhLmNoaWJhLmpwIiwiaW56YWkuY2hpYmEuanAiLCJpc3VtaS5jaGliYS5qcCIsImthbWFnYXlhLmNoaWJhLmpwIiwia2Ftb2dhd2EuY2hpYmEuanAiLCJr''@;'; put 'put ''YXNoaXdhLmNoaWJhLmpwIiwia2F0b3JpLmNoaWJhLmpwIiwia2F0c3V1cmEuY2hpYmEuanAiLCJraW1pdHN1LmNoaWJhLmpwIiwia2lzYXJhenUuY2hpYmEuanAiLCJrb3pha2kuY2hpYmEuanAiLCJrdWp1a3VyaS5jaGliYS5qcCIsImt5b25hbi5jaGliYS5qcCIsIm1hdHN1ZG8uY2hpYmEu''@;'; put 'put ''anAiLCJtaWRvcmkuY2hpYmEuanAiLCJtaWhhbWEuY2hpYmEuanAiLCJtaW5hbWlib3NvLmNoaWJhLmpwIiwibW9iYXJhLmNoaWJhLmpwIiwibXV0c3V6YXdhLmNoaWJhLmpwIiwibmFnYXJhLmNoaWJhLmpwIiwibmFnYXJleWFtYS5jaGliYS5qcCIsIm5hcmFzaGluby5jaGliYS5qcCIsIm5h''@;'; put 'put ''cml0YS5jaGliYS5qcCIsIm5vZGEuY2hpYmEuanAiLCJvYW1pc2hpcmFzYXRvLmNoaWJhLmpwIiwib21pZ2F3YS5jaGliYS5qcCIsIm9uanVrdS5jaGliYS5qcCIsIm90YWtpLmNoaWJhLmpwIiwic2FrYWUuY2hpYmEuanAiLCJzYWt1cmEuY2hpYmEuanAiLCJzaGltb2Z1c2EuY2hpYmEuanAi''@;'; put 'put ''LCJzaGlyYWtvLmNoaWJhLmpwIiwic2hpcm9pLmNoaWJhLmpwIiwic2hpc3VpLmNoaWJhLmpwIiwic29kZWdhdXJhLmNoaWJhLmpwIiwic29zYS5jaGliYS5qcCIsInRha28uY2hpYmEuanAiLCJ0YXRleWFtYS5jaGliYS5qcCIsInRvZ2FuZS5jaGliYS5qcCIsInRvaG5vc2hvLmNoaWJhLmpw''@;'; put 'put ''IiwidG9taXNhdG8uY2hpYmEuanAiLCJ1cmF5YXN1LmNoaWJhLmpwIiwieWFjaGltYXRhLmNoaWJhLmpwIiwieWFjaGl5by5jaGliYS5qcCIsInlva2FpY2hpYmEuY2hpYmEuanAiLCJ5b2tvc2hpYmFoaWthcmkuY2hpYmEuanAiLCJ5b3RzdWthaWRvLmNoaWJhLmpwIiwiYWluYW4uZWhpbWUu''@;'; put 'put ''anAiLCJob25haS5laGltZS5qcCIsImlrYXRhLmVoaW1lLmpwIiwiaW1hYmFyaS5laGltZS5qcCIsIml5by5laGltZS5qcCIsImthbWlqaW1hLmVoaW1lLmpwIiwia2lob2t1LmVoaW1lLmpwIiwia3VtYWtvZ2VuLmVoaW1lLmpwIiwibWFzYWtpLmVoaW1lLmpwIiwibWF0c3Vuby5laGltZS5q''@;'; put 'put ''cCIsIm1hdHN1eWFtYS5laGltZS5qcCIsIm5hbWlrYXRhLmVoaW1lLmpwIiwibmlpaGFtYS5laGltZS5qcCIsIm96dS5laGltZS5qcCIsInNhaWpvLmVoaW1lLmpwIiwic2VpeW8uZWhpbWUuanAiLCJzaGlrb2t1Y2h1by5laGltZS5qcCIsInRvYmUuZWhpbWUuanAiLCJ0b29uLmVoaW1lLmpw''@;'; put 'put ''IiwidWNoaWtvLmVoaW1lLmpwIiwidXdhamltYS5laGltZS5qcCIsInlhd2F0YWhhbWEuZWhpbWUuanAiLCJlY2hpemVuLmZ1a3VpLmpwIiwiZWloZWlqaS5mdWt1aS5qcCIsImZ1a3VpLmZ1a3VpLmpwIiwiaWtlZGEuZnVrdWkuanAiLCJrYXRzdXlhbWEuZnVrdWkuanAiLCJtaWhhbWEuZnVr''@;'; put 'put ''dWkuanAiLCJtaW5hbWllY2hpemVuLmZ1a3VpLmpwIiwib2JhbWEuZnVrdWkuanAiLCJvaGkuZnVrdWkuanAiLCJvbm8uZnVrdWkuanAiLCJzYWJhZS5mdWt1aS5qcCIsInNha2FpLmZ1a3VpLmpwIiwidGFrYWhhbWEuZnVrdWkuanAiLCJ0c3VydWdhLmZ1a3VpLmpwIiwid2FrYXNhLmZ1a3Vp''@;'; put 'put ''LmpwIiwiYXNoaXlhLmZ1a3Vva2EuanAiLCJidXplbi5mdWt1b2thLmpwIiwiY2hpa3Vnby5mdWt1b2thLmpwIiwiY2hpa3Voby5mdWt1b2thLmpwIiwiY2hpa3Vqby5mdWt1b2thLmpwIiwiY2hpa3VzaGluby5mdWt1b2thLmpwIiwiY2hpa3V6ZW4uZnVrdW9rYS5qcCIsImNodW8uZnVrdW9r''@;'; put 'put ''YS5qcCIsImRhemFpZnUuZnVrdW9rYS5qcCIsImZ1a3VjaGkuZnVrdW9rYS5qcCIsImhha2F0YS5mdWt1b2thLmpwIiwiaGlnYXNoaS5mdWt1b2thLmpwIiwiaGlyb2thd2EuZnVrdW9rYS5qcCIsImhpc2F5YW1hLmZ1a3Vva2EuanAiLCJpaXp1a2EuZnVrdW9rYS5qcCIsImluYXRzdWtpLmZ1''@;'; put 'put ''a3Vva2EuanAiLCJrYWhvLmZ1a3Vva2EuanAiLCJrYXN1Z2EuZnVrdW9rYS5qcCIsImthc3V5YS5mdWt1b2thLmpwIiwia2F3YXJhLmZ1a3Vva2EuanAiLCJrZWlzZW4uZnVrdW9rYS5qcCIsImtvZ2EuZnVrdW9rYS5qcCIsImt1cmF0ZS5mdWt1b2thLmpwIiwia3Vyb2dpLmZ1a3Vva2EuanAi''@;'; put 'put ''LCJrdXJ1bWUuZnVrdW9rYS5qcCIsIm1pbmFtaS5mdWt1b2thLmpwIiwibWl5YWtvLmZ1a3Vva2EuanAiLCJtaXlhbWEuZnVrdW9rYS5qcCIsIm1peWF3YWthLmZ1a3Vva2EuanAiLCJtaXp1bWFraS5mdWt1b2thLmpwIiwibXVuYWthdGEuZnVrdW9rYS5qcCIsIm5ha2FnYXdhLmZ1a3Vva2Eu''@;'; put 'put ''anAiLCJuYWthbWEuZnVrdW9rYS5qcCIsIm5pc2hpLmZ1a3Vva2EuanAiLCJub2dhdGEuZnVrdW9rYS5qcCIsIm9nb3JpLmZ1a3Vva2EuanAiLCJva2FnYWtpLmZ1a3Vva2EuanAiLCJva2F3YS5mdWt1b2thLmpwIiwib2tpLmZ1a3Vva2EuanAiLCJvbXV0YS5mdWt1b2thLmpwIiwib25nYS5m''@;'; put 'put ''dWt1b2thLmpwIiwib25vam8uZnVrdW9rYS5qcCIsIm90by5mdWt1b2thLmpwIiwic2FpZ2F3YS5mdWt1b2thLmpwIiwic2FzYWd1cmkuZnVrdW9rYS5qcCIsInNoaW5ndS5mdWt1b2thLmpwIiwic2hpbnlvc2hpdG9taS5mdWt1b2thLmpwIiwic2hvbmFpLmZ1a3Vva2EuanAiLCJzb2VkYS5m''@;'; put 'put ''dWt1b2thLmpwIiwic3VlLmZ1a3Vva2EuanAiLCJ0YWNoaWFyYWkuZnVrdW9rYS5qcCIsInRhZ2F3YS5mdWt1b2thLmpwIiwidGFrYXRhLmZ1a3Vva2EuanAiLCJ0b2hvLmZ1a3Vva2EuanAiLCJ0b3lvdHN1LmZ1a3Vva2EuanAiLCJ0c3Vpa2kuZnVrdW9rYS5qcCIsInVraWhhLmZ1a3Vva2Eu''@;'; put 'put ''anAiLCJ1bWkuZnVrdW9rYS5qcCIsInVzdWkuZnVrdW9rYS5qcCIsInlhbWFkYS5mdWt1b2thLmpwIiwieWFtZS5mdWt1b2thLmpwIiwieWFuYWdhd2EuZnVrdW9rYS5qcCIsInl1a3VoYXNoaS5mdWt1b2thLmpwIiwiYWl6dWJhbmdlLmZ1a3VzaGltYS5qcCIsImFpenVtaXNhdG8uZnVrdXNo''@;'; put 'put ''aW1hLmpwIiwiYWl6dXdha2FtYXRzdS5mdWt1c2hpbWEuanAiLCJhc2FrYXdhLmZ1a3VzaGltYS5qcCIsImJhbmRhaS5mdWt1c2hpbWEuanAiLCJkYXRlLmZ1a3VzaGltYS5qcCIsImZ1a3VzaGltYS5mdWt1c2hpbWEuanAiLCJmdXJ1ZG9uby5mdWt1c2hpbWEuanAiLCJmdXRhYmEuZnVrdXNo''@;'; put 'put ''aW1hLmpwIiwiaGFuYXdhLmZ1a3VzaGltYS5qcCIsImhpZ2FzaGkuZnVrdXNoaW1hLmpwIiwiaGlyYXRhLmZ1a3VzaGltYS5qcCIsImhpcm9uby5mdWt1c2hpbWEuanAiLCJpaXRhdGUuZnVrdXNoaW1hLmpwIiwiaW5hd2FzaGlyby5mdWt1c2hpbWEuanAiLCJpc2hpa2F3YS5mdWt1c2hpbWEu''@;'; put 'put ''anAiLCJpd2FraS5mdWt1c2hpbWEuanAiLCJpenVtaXpha2kuZnVrdXNoaW1hLmpwIiwia2FnYW1paXNoaS5mdWt1c2hpbWEuanAiLCJrYW5leWFtYS5mdWt1c2hpbWEuanAiLCJrYXdhbWF0YS5mdWt1c2hpbWEuanAiLCJraXRha2F0YS5mdWt1c2hpbWEuanAiLCJraXRhc2hpb2JhcmEuZnVr''@;'; put 'put ''dXNoaW1hLmpwIiwia29vcmkuZnVrdXNoaW1hLmpwIiwia29yaXlhbWEuZnVrdXNoaW1hLmpwIiwia3VuaW1pLmZ1a3VzaGltYS5qcCIsIm1paGFydS5mdWt1c2hpbWEuanAiLCJtaXNoaW1hLmZ1a3VzaGltYS5qcCIsIm5hbWllLmZ1a3VzaGltYS5qcCIsIm5hbmdvLmZ1a3VzaGltYS5qcCIs''@;'; put 'put ''Im5pc2hpYWl6dS5mdWt1c2hpbWEuanAiLCJuaXNoaWdvLmZ1a3VzaGltYS5qcCIsIm9rdW1hLmZ1a3VzaGltYS5qcCIsIm9tb3RlZ28uZnVrdXNoaW1hLmpwIiwib25vLmZ1a3VzaGltYS5qcCIsIm90YW1hLmZ1a3VzaGltYS5qcCIsInNhbWVnYXdhLmZ1a3VzaGltYS5qcCIsInNoaW1vZ28u''@;'; put 'put ''ZnVrdXNoaW1hLmpwIiwic2hpcmFrYXdhLmZ1a3VzaGltYS5qcCIsInNob3dhLmZ1a3VzaGltYS5qcCIsInNvbWEuZnVrdXNoaW1hLmpwIiwic3VrYWdhd2EuZnVrdXNoaW1hLmpwIiwidGFpc2hpbi5mdWt1c2hpbWEuanAiLCJ0YW1ha2F3YS5mdWt1c2hpbWEuanAiLCJ0YW5hZ3VyYS5mdWt1''@;'; put 'put ''c2hpbWEuanAiLCJ0ZW5laS5mdWt1c2hpbWEuanAiLCJ5YWJ1a2kuZnVrdXNoaW1hLmpwIiwieWFtYXRvLmZ1a3VzaGltYS5qcCIsInlhbWF0c3VyaS5mdWt1c2hpbWEuanAiLCJ5YW5haXp1LmZ1a3VzaGltYS5qcCIsInl1Z2F3YS5mdWt1c2hpbWEuanAiLCJhbnBhY2hpLmdpZnUuanAiLCJl''@;'; put 'put ''bmEuZ2lmdS5qcCIsImdpZnUuZ2lmdS5qcCIsImdpbmFuLmdpZnUuanAiLCJnb2RvLmdpZnUuanAiLCJndWpvLmdpZnUuanAiLCJoYXNoaW1hLmdpZnUuanAiLCJoaWNoaXNvLmdpZnUuanAiLCJoaWRhLmdpZnUuanAiLCJoaWdhc2hpc2hpcmFrYXdhLmdpZnUuanAiLCJpYmlnYXdhLmdpZnUu''@;'; put 'put ''anAiLCJpa2VkYS5naWZ1LmpwIiwia2FrYW1pZ2FoYXJhLmdpZnUuanAiLCJrYW5pLmdpZnUuanAiLCJrYXNhaGFyYS5naWZ1LmpwIiwia2FzYW1hdHN1LmdpZnUuanAiLCJrYXdhdWUuZ2lmdS5qcCIsImtpdGFnYXRhLmdpZnUuanAiLCJtaW5vLmdpZnUuanAiLCJtaW5va2Ftby5naWZ1Lmpw''@;'; put 'put ''IiwibWl0YWtlLmdpZnUuanAiLCJtaXp1bmFtaS5naWZ1LmpwIiwibW90b3N1LmdpZnUuanAiLCJuYWthdHN1Z2F3YS5naWZ1LmpwIiwib2dha2kuZ2lmdS5qcCIsInNha2Fob2dpLmdpZnUuanAiLCJzZWtpLmdpZnUuanAiLCJzZWtpZ2FoYXJhLmdpZnUuanAiLCJzaGlyYWthd2EuZ2lmdS5q''@;'; put 'put ''cCIsInRhamltaS5naWZ1LmpwIiwidGFrYXlhbWEuZ2lmdS5qcCIsInRhcnVpLmdpZnUuanAiLCJ0b2tpLmdpZnUuanAiLCJ0b21pa2EuZ2lmdS5qcCIsIndhbm91Y2hpLmdpZnUuanAiLCJ5YW1hZ2F0YS5naWZ1LmpwIiwieWFvdHN1LmdpZnUuanAiLCJ5b3JvLmdpZnUuanAiLCJhbm5ha2Eu''@;'; put 'put ''Z3VubWEuanAiLCJjaGl5b2RhLmd1bm1hLmpwIiwiZnVqaW9rYS5ndW5tYS5qcCIsImhpZ2FzaGlhZ2F0c3VtYS5ndW5tYS5qcCIsImlzZXNha2kuZ3VubWEuanAiLCJpdGFrdXJhLmd1bm1hLmpwIiwia2FubmEuZ3VubWEuanAiLCJrYW5yYS5ndW5tYS5qcCIsImthdGFzaGluYS5ndW5tYS5q''@;'; put 'put ''cCIsImthd2FiYS5ndW5tYS5qcCIsImtpcnl1Lmd1bm1hLmpwIiwia3VzYXRzdS5ndW5tYS5qcCIsIm1hZWJhc2hpLmd1bm1hLmpwIiwibWVpd2EuZ3VubWEuanAiLCJtaWRvcmkuZ3VubWEuanAiLCJtaW5ha2FtaS5ndW5tYS5qcCIsIm5hZ2Fub2hhcmEuZ3VubWEuanAiLCJuYWthbm9qby5n''@;'; put 'put ''dW5tYS5qcCIsIm5hbm1va3UuZ3VubWEuanAiLCJudW1hdGEuZ3VubWEuanAiLCJvaXp1bWkuZ3VubWEuanAiLCJvcmEuZ3VubWEuanAiLCJvdGEuZ3VubWEuanAiLCJzaGlidWthd2EuZ3VubWEuanAiLCJzaGltb25pdGEuZ3VubWEuanAiLCJzaGludG8uZ3VubWEuanAiLCJzaG93YS5ndW5t''@;'; put 'put ''YS5qcCIsInRha2FzYWtpLmd1bm1hLmpwIiwidGFrYXlhbWEuZ3VubWEuanAiLCJ0YW1hbXVyYS5ndW5tYS5qcCIsInRhdGViYXlhc2hpLmd1bm1hLmpwIiwidG9taW9rYS5ndW5tYS5qcCIsInRzdWtpeW9uby5ndW5tYS5qcCIsInRzdW1hZ29pLmd1bm1hLmpwIiwidWVuby5ndW5tYS5qcCIs''@;'; put 'put ''Inlvc2hpb2thLmd1bm1hLmpwIiwiYXNhbWluYW1pLmhpcm9zaGltYS5qcCIsImRhaXdhLmhpcm9zaGltYS5qcCIsImV0YWppbWEuaGlyb3NoaW1hLmpwIiwiZnVjaHUuaGlyb3NoaW1hLmpwIiwiZnVrdXlhbWEuaGlyb3NoaW1hLmpwIiwiaGF0c3VrYWljaGkuaGlyb3NoaW1hLmpwIiwiaGln''@;'; put 'put ''YXNoaWhpcm9zaGltYS5oaXJvc2hpbWEuanAiLCJob25nby5oaXJvc2hpbWEuanAiLCJqaW5zZWtpa29nZW4uaGlyb3NoaW1hLmpwIiwia2FpdGEuaGlyb3NoaW1hLmpwIiwia3VpLmhpcm9zaGltYS5qcCIsImt1bWFuby5oaXJvc2hpbWEuanAiLCJrdXJlLmhpcm9zaGltYS5qcCIsIm1paGFy''@;'; put 'put ''YS5oaXJvc2hpbWEuanAiLCJtaXlvc2hpLmhpcm9zaGltYS5qcCIsIm5ha2EuaGlyb3NoaW1hLmpwIiwib25vbWljaGkuaGlyb3NoaW1hLmpwIiwib3Nha2lrYW1pamltYS5oaXJvc2hpbWEuanAiLCJvdGFrZS5oaXJvc2hpbWEuanAiLCJzYWthLmhpcm9zaGltYS5qcCIsInNlcmEuaGlyb3No''@;'; put 'put ''aW1hLmpwIiwic2VyYW5pc2hpLmhpcm9zaGltYS5qcCIsInNoaW5pY2hpLmhpcm9zaGltYS5qcCIsInNob2JhcmEuaGlyb3NoaW1hLmpwIiwidGFrZWhhcmEuaGlyb3NoaW1hLmpwIiwiYWJhc2hpcmkuaG9ra2FpZG8uanAiLCJhYmlyYS5ob2trYWlkby5qcCIsImFpYmV0c3UuaG9ra2FpZG8u''@;'; put 'put ''anAiLCJha2FiaXJhLmhva2thaWRvLmpwIiwiYWtrZXNoaS5ob2trYWlkby5qcCIsImFzYWhpa2F3YS5ob2trYWlkby5qcCIsImFzaGliZXRzdS5ob2trYWlkby5qcCIsImFzaG9yby5ob2trYWlkby5qcCIsImFzc2FidS5ob2trYWlkby5qcCIsImF0c3VtYS5ob2trYWlkby5qcCIsImJpYmFp''@;'; put 'put ''Lmhva2thaWRvLmpwIiwiYmllaS5ob2trYWlkby5qcCIsImJpZnVrYS5ob2trYWlkby5qcCIsImJpaG9yby5ob2trYWlkby5qcCIsImJpcmF0b3JpLmhva2thaWRvLmpwIiwiY2hpcHB1YmV0c3UuaG9ra2FpZG8uanAiLCJjaGl0b3NlLmhva2thaWRvLmpwIiwiZGF0ZS5ob2trYWlkby5qcCIs''@;'; put 'put ''ImViZXRzdS5ob2trYWlkby5qcCIsImVtYmV0c3UuaG9ra2FpZG8uanAiLCJlbml3YS5ob2trYWlkby5qcCIsImVyaW1vLmhva2thaWRvLmpwIiwiZXNhbi5ob2trYWlkby5qcCIsImVzYXNoaS5ob2trYWlkby5qcCIsImZ1a2FnYXdhLmhva2thaWRvLmpwIiwiZnVrdXNoaW1hLmhva2thaWRv''@;'; put 'put ''LmpwIiwiZnVyYW5vLmhva2thaWRvLmpwIiwiZnVydWJpcmEuaG9ra2FpZG8uanAiLCJoYWJvcm8uaG9ra2FpZG8uanAiLCJoYWtvZGF0ZS5ob2trYWlkby5qcCIsImhhbWF0b25iZXRzdS5ob2trYWlkby5qcCIsImhpZGFrYS5ob2trYWlkby5qcCIsImhpZ2FzaGlrYWd1cmEuaG9ra2FpZG8u''@;'; put 'put ''anAiLCJoaWdhc2hpa2F3YS5ob2trYWlkby5qcCIsImhpcm9vLmhva2thaWRvLmpwIiwiaG9rdXJ5dS5ob2trYWlkby5qcCIsImhva3V0by5ob2trYWlkby5qcCIsImhvbmJldHN1Lmhva2thaWRvLmpwIiwiaG9yb2thbmFpLmhva2thaWRvLmpwIiwiaG9yb25vYmUuaG9ra2FpZG8uanAiLCJp''@;'; put 'put ''a2VkYS5ob2trYWlkby5qcCIsImltYWthbmUuaG9ra2FpZG8uanAiLCJpc2hpa2FyaS5ob2trYWlkby5qcCIsIml3YW1pemF3YS5ob2trYWlkby5qcCIsIml3YW5haS5ob2trYWlkby5qcCIsImthbWlmdXJhbm8uaG9ra2FpZG8uanAiLCJrYW1pa2F3YS5ob2trYWlkby5qcCIsImthbWlzaGlo''@;'; put 'put ''b3JvLmhva2thaWRvLmpwIiwia2FtaXN1bmFnYXdhLmhva2thaWRvLmpwIiwia2Ftb2VuYWkuaG9ra2FpZG8uanAiLCJrYXlhYmUuaG9ra2FpZG8uanAiLCJrZW1idWNoaS5ob2trYWlkby5qcCIsImtpa29uYWkuaG9ra2FpZG8uanAiLCJraW1vYmV0c3UuaG9ra2FpZG8uanAiLCJraXRhaGly''@;'; put 'put ''b3NoaW1hLmhva2thaWRvLmpwIiwia2l0YW1pLmhva2thaWRvLmpwIiwia2l5b3NhdG8uaG9ra2FpZG8uanAiLCJrb3NoaW1penUuaG9ra2FpZG8uanAiLCJrdW5uZXBwdS5ob2trYWlkby5qcCIsImt1cml5YW1hLmhva2thaWRvLmpwIiwia3Vyb21hdHN1bmFpLmhva2thaWRvLmpwIiwia3Vz''@;'; put 'put ''aGlyby5ob2trYWlkby5qcCIsImt1dGNoYW4uaG9ra2FpZG8uanAiLCJreW93YS5ob2trYWlkby5qcCIsIm1hc2hpa2UuaG9ra2FpZG8uanAiLCJtYXRzdW1hZS5ob2trYWlkby5qcCIsIm1pa2FzYS5ob2trYWlkby5qcCIsIm1pbmFtaWZ1cmFuby5ob2trYWlkby5qcCIsIm1vbWJldHN1Lmhv''@;'; put 'put ''a2thaWRvLmpwIiwibW9zZXVzaGkuaG9ra2FpZG8uanAiLCJtdWthd2EuaG9ra2FpZG8uanAiLCJtdXJvcmFuLmhva2thaWRvLmpwIiwibmFpZS5ob2trYWlkby5qcCIsIm5ha2FnYXdhLmhva2thaWRvLmpwIiwibmFrYXNhdHN1bmFpLmhva2thaWRvLmpwIiwibmFrYXRvbWJldHN1Lmhva2th''@;'; put 'put ''aWRvLmpwIiwibmFuYWUuaG9ra2FpZG8uanAiLCJuYW5wb3JvLmhva2thaWRvLmpwIiwibmF5b3JvLmhva2thaWRvLmpwIiwibmVtdXJvLmhva2thaWRvLmpwIiwibmlpa2FwcHUuaG9ra2FpZG8uanAiLCJuaWtpLmhva2thaWRvLmpwIiwibmlzaGlva29wcGUuaG9ra2FpZG8uanAiLCJub2Jv''@;'; put 'put ''cmliZXRzdS5ob2trYWlkby5qcCIsIm51bWF0YS5ob2trYWlkby5qcCIsIm9iaWhpcm8uaG9ra2FpZG8uanAiLCJvYmlyYS5ob2trYWlkby5qcCIsIm9rZXRvLmhva2thaWRvLmpwIiwib2tvcHBlLmhva2thaWRvLmpwIiwib3RhcnUuaG9ra2FpZG8uanAiLCJvdG9iZS5ob2trYWlkby5qcCIs''@;'; put 'put ''Im90b2Z1a2UuaG9ra2FpZG8uanAiLCJvdG9pbmVwcHUuaG9ra2FpZG8uanAiLCJvdW11Lmhva2thaWRvLmpwIiwib3pvcmEuaG9ra2FpZG8uanAiLCJwaXBwdS5ob2trYWlkby5qcCIsInJhbmtvc2hpLmhva2thaWRvLmpwIiwicmVidW4uaG9ra2FpZG8uanAiLCJyaWt1YmV0c3UuaG9ra2Fp''@;'; put 'put ''ZG8uanAiLCJyaXNoaXJpLmhva2thaWRvLmpwIiwicmlzaGlyaWZ1amkuaG9ra2FpZG8uanAiLCJzYXJvbWEuaG9ra2FpZG8uanAiLCJzYXJ1ZnV0c3UuaG9ra2FpZG8uanAiLCJzaGFrb3Rhbi5ob2trYWlkby5qcCIsInNoYXJpLmhva2thaWRvLmpwIiwic2hpYmVjaGEuaG9ra2FpZG8uanAi''@;'; put 'put ''LCJzaGliZXRzdS5ob2trYWlkby5qcCIsInNoaWthYmUuaG9ra2FpZG8uanAiLCJzaGlrYW9pLmhva2thaWRvLmpwIiwic2hpbWFtYWtpLmhva2thaWRvLmpwIiwic2hpbWl6dS5ob2trYWlkby5qcCIsInNoaW1va2F3YS5ob2trYWlkby5qcCIsInNoaW5zaGlub3RzdS5ob2trYWlkby5qcCIs''@;'; put 'put ''InNoaW50b2t1Lmhva2thaWRvLmpwIiwic2hpcmFudWthLmhva2thaWRvLmpwIiwic2hpcmFvaS5ob2trYWlkby5qcCIsInNoaXJpdWNoaS5ob2trYWlkby5qcCIsInNvYmV0c3UuaG9ra2FpZG8uanAiLCJzdW5hZ2F3YS5ob2trYWlkby5qcCIsInRhaWtpLmhva2thaWRvLmpwIiwidGFrYXN1''@;'; put 'put ''Lmhva2thaWRvLmpwIiwidGFraWthd2EuaG9ra2FpZG8uanAiLCJ0YWtpbm91ZS5ob2trYWlkby5qcCIsInRlc2hpa2FnYS5ob2trYWlkby5qcCIsInRvYmV0c3UuaG9ra2FpZG8uanAiLCJ0b2htYS5ob2trYWlkby5qcCIsInRvbWFrb21haS5ob2trYWlkby5qcCIsInRvbWFyaS5ob2trYWlk''@;'; put 'put ''by5qcCIsInRveWEuaG9ra2FpZG8uanAiLCJ0b3lha28uaG9ra2FpZG8uanAiLCJ0b3lvdG9taS5ob2trYWlkby5qcCIsInRveW91cmEuaG9ra2FpZG8uanAiLCJ0c3ViZXRzdS5ob2trYWlkby5qcCIsInRzdWtpZ2F0YS5ob2trYWlkby5qcCIsInVyYWthd2EuaG9ra2FpZG8uanAiLCJ1cmF1''@;'; put 'put ''c3UuaG9ra2FpZG8uanAiLCJ1cnl1Lmhva2thaWRvLmpwIiwidXRhc2hpbmFpLmhva2thaWRvLmpwIiwid2Fra2FuYWkuaG9ra2FpZG8uanAiLCJ3YXNzYW11Lmhva2thaWRvLmpwIiwieWFrdW1vLmhva2thaWRvLmpwIiwieW9pY2hpLmhva2thaWRvLmpwIiwiYWlvaS5oeW9nby5qcCIsImFr''@;'; put 'put ''YXNoaS5oeW9nby5qcCIsImFrby5oeW9nby5qcCIsImFtYWdhc2FraS5oeW9nby5qcCIsImFvZ2FraS5oeW9nby5qcCIsImFzYWdvLmh5b2dvLmpwIiwiYXNoaXlhLmh5b2dvLmpwIiwiYXdhamkuaHlvZ28uanAiLCJmdWt1c2FraS5oeW9nby5qcCIsImdvc2hpa2kuaHlvZ28uanAiLCJoYXJp''@;'; put 'put ''bWEuaHlvZ28uanAiLCJoaW1lamkuaHlvZ28uanAiLCJpY2hpa2F3YS5oeW9nby5qcCIsImluYWdhd2EuaHlvZ28uanAiLCJpdGFtaS5oeW9nby5qcCIsImtha29nYXdhLmh5b2dvLmpwIiwia2FtaWdvcmkuaHlvZ28uanAiLCJrYW1pa2F3YS5oeW9nby5qcCIsImthc2FpLmh5b2dvLmpwIiwi''@;'; put 'put ''a2FzdWdhLmh5b2dvLmpwIiwia2F3YW5pc2hpLmh5b2dvLmpwIiwibWlraS5oeW9nby5qcCIsIm1pbmFtaWF3YWppLmh5b2dvLmpwIiwibmlzaGlub21peWEuaHlvZ28uanAiLCJuaXNoaXdha2kuaHlvZ28uanAiLCJvbm8uaHlvZ28uanAiLCJzYW5kYS5oeW9nby5qcCIsInNhbm5hbi5oeW9n''@;'; put 'put ''by5qcCIsInNhc2F5YW1hLmh5b2dvLmpwIiwic2F5by5oeW9nby5qcCIsInNoaW5ndS5oeW9nby5qcCIsInNoaW5vbnNlbi5oeW9nby5qcCIsInNoaXNvLmh5b2dvLmpwIiwic3Vtb3RvLmh5b2dvLmpwIiwidGFpc2hpLmh5b2dvLmpwIiwidGFrYS5oeW9nby5qcCIsInRha2FyYXp1a2EuaHlv''@;'; put 'put ''Z28uanAiLCJ0YWthc2Fnby5oeW9nby5qcCIsInRha2luby5oeW9nby5qcCIsInRhbWJhLmh5b2dvLmpwIiwidGF0c3Vuby5oeW9nby5qcCIsInRveW9va2EuaHlvZ28uanAiLCJ5YWJ1Lmh5b2dvLmpwIiwieWFzaGlyby5oeW9nby5qcCIsInlva2EuaHlvZ28uanAiLCJ5b2thd2EuaHlvZ28u''@;'; put 'put ''anAiLCJhbWkuaWJhcmFraS5qcCIsImFzYWhpLmliYXJha2kuanAiLCJiYW5kby5pYmFyYWtpLmpwIiwiY2hpa3VzZWkuaWJhcmFraS5qcCIsImRhaWdvLmliYXJha2kuanAiLCJmdWppc2hpcm8uaWJhcmFraS5qcCIsImhpdGFjaGkuaWJhcmFraS5qcCIsImhpdGFjaGluYWthLmliYXJha2ku''@;'; put 'put ''anAiLCJoaXRhY2hpb21peWEuaWJhcmFraS5qcCIsImhpdGFjaGlvdGEuaWJhcmFraS5qcCIsImliYXJha2kuaWJhcmFraS5qcCIsImluYS5pYmFyYWtpLmpwIiwiaW5hc2hpa2kuaWJhcmFraS5qcCIsIml0YWtvLmliYXJha2kuanAiLCJpd2FtYS5pYmFyYWtpLmpwIiwiam9zby5pYmFyYWtp''@;'; put 'put ''LmpwIiwia2FtaXN1LmliYXJha2kuanAiLCJrYXNhbWEuaWJhcmFraS5qcCIsImthc2hpbWEuaWJhcmFraS5qcCIsImthc3VtaWdhdXJhLmliYXJha2kuanAiLCJrb2dhLmliYXJha2kuanAiLCJtaWhvLmliYXJha2kuanAiLCJtaXRvLmliYXJha2kuanAiLCJtb3JpeWEuaWJhcmFraS5qcCIs''@;'; put 'put ''Im5ha2EuaWJhcmFraS5qcCIsIm5hbWVnYXRhLmliYXJha2kuanAiLCJvYXJhaS5pYmFyYWtpLmpwIiwib2dhd2EuaWJhcmFraS5qcCIsIm9taXRhbWEuaWJhcmFraS5qcCIsInJ5dWdhc2FraS5pYmFyYWtpLmpwIiwic2FrYWkuaWJhcmFraS5qcCIsInNha3VyYWdhd2EuaWJhcmFraS5qcCIs''@;'; put 'put ''InNoaW1vZGF0ZS5pYmFyYWtpLmpwIiwic2hpbW90c3VtYS5pYmFyYWtpLmpwIiwic2hpcm9zYXRvLmliYXJha2kuanAiLCJzb3dhLmliYXJha2kuanAiLCJzdWlmdS5pYmFyYWtpLmpwIiwidGFrYWhhZ2kuaWJhcmFraS5qcCIsInRhbWF0c3VrdXJpLmliYXJha2kuanAiLCJ0b2thaS5pYmFy''@;'; put 'put ''YWtpLmpwIiwidG9tb2JlLmliYXJha2kuanAiLCJ0b25lLmliYXJha2kuanAiLCJ0b3JpZGUuaWJhcmFraS5qcCIsInRzdWNoaXVyYS5pYmFyYWtpLmpwIiwidHN1a3ViYS5pYmFyYWtpLmpwIiwidWNoaWhhcmEuaWJhcmFraS5qcCIsInVzaGlrdS5pYmFyYWtpLmpwIiwieWFjaGl5by5pYmFy''@;'; put 'put ''YWtpLmpwIiwieWFtYWdhdGEuaWJhcmFraS5qcCIsInlhd2FyYS5pYmFyYWtpLmpwIiwieXVraS5pYmFyYWtpLmpwIiwiYW5hbWl6dS5pc2hpa2F3YS5qcCIsImhha3VpLmlzaGlrYXdhLmpwIiwiaGFrdXNhbi5pc2hpa2F3YS5qcCIsImthZ2EuaXNoaWthd2EuanAiLCJrYWhva3UuaXNoaWth''@;'; put 'put ''d2EuanAiLCJrYW5hemF3YS5pc2hpa2F3YS5qcCIsImthd2FraXRhLmlzaGlrYXdhLmpwIiwia29tYXRzdS5pc2hpa2F3YS5qcCIsIm5ha2Fub3RvLmlzaGlrYXdhLmpwIiwibmFuYW8uaXNoaWthd2EuanAiLCJub21pLmlzaGlrYXdhLmpwIiwibm9ub2ljaGkuaXNoaWthd2EuanAiLCJub3Rv''@;'; put 'put ''LmlzaGlrYXdhLmpwIiwic2hpa2EuaXNoaWthd2EuanAiLCJzdXp1LmlzaGlrYXdhLmpwIiwidHN1YmF0YS5pc2hpa2F3YS5qcCIsInRzdXJ1Z2kuaXNoaWthd2EuanAiLCJ1Y2hpbmFkYS5pc2hpa2F3YS5qcCIsIndhamltYS5pc2hpa2F3YS5qcCIsImZ1ZGFpLml3YXRlLmpwIiwiZnVqaXNh''@;'; put 'put ''d2EuaXdhdGUuanAiLCJoYW5hbWFraS5pd2F0ZS5qcCIsImhpcmFpenVtaS5pd2F0ZS5qcCIsImhpcm9uby5pd2F0ZS5qcCIsImljaGlub2hlLml3YXRlLmpwIiwiaWNoaW5vc2VraS5pd2F0ZS5qcCIsIml3YWl6dW1pLml3YXRlLmpwIiwiaXdhdGUuaXdhdGUuanAiLCJqb2JvamkuaXdhdGUu''@;'; put 'put ''anAiLCJrYW1haXNoaS5pd2F0ZS5qcCIsImthbmVnYXNha2kuaXdhdGUuanAiLCJrYXJ1bWFpLml3YXRlLmpwIiwia2F3YWkuaXdhdGUuanAiLCJraXRha2FtaS5pd2F0ZS5qcCIsImt1amkuaXdhdGUuanAiLCJrdW5vaGUuaXdhdGUuanAiLCJrdXp1bWFraS5pd2F0ZS5qcCIsIm1peWFrby5p''@;'; put 'put ''d2F0ZS5qcCIsIm1penVzYXdhLml3YXRlLmpwIiwibW9yaW9rYS5pd2F0ZS5qcCIsIm5pbm9oZS5pd2F0ZS5qcCIsIm5vZGEuaXdhdGUuanAiLCJvZnVuYXRvLml3YXRlLmpwIiwib3NodS5pd2F0ZS5qcCIsIm90c3VjaGkuaXdhdGUuanAiLCJyaWt1emVudGFrYXRhLml3YXRlLmpwIiwic2hp''@;'; put 'put ''d2EuaXdhdGUuanAiLCJzaGl6dWt1aXNoaS5pd2F0ZS5qcCIsInN1bWl0YS5pd2F0ZS5qcCIsInRhbm9oYXRhLml3YXRlLmpwIiwidG9uby5pd2F0ZS5qcCIsInlhaGFiYS5pd2F0ZS5qcCIsInlhbWFkYS5pd2F0ZS5qcCIsImF5YWdhd2Eua2FnYXdhLmpwIiwiaGlnYXNoaWthZ2F3YS5rYWdh''@;'; put 'put ''d2EuanAiLCJrYW5vbmppLmthZ2F3YS5qcCIsImtvdG9oaXJhLmthZ2F3YS5qcCIsIm1hbm5vLmthZ2F3YS5qcCIsIm1hcnVnYW1lLmthZ2F3YS5qcCIsIm1pdG95by5rYWdhd2EuanAiLCJuYW9zaGltYS5rYWdhd2EuanAiLCJzYW51a2kua2FnYXdhLmpwIiwidGFkb3RzdS5rYWdhd2EuanAi''@;'; put 'put ''LCJ0YWthbWF0c3Uua2FnYXdhLmpwIiwidG9ub3Noby5rYWdhd2EuanAiLCJ1Y2hpbm9taS5rYWdhd2EuanAiLCJ1dGF6dS5rYWdhd2EuanAiLCJ6ZW50c3VqaS5rYWdhd2EuanAiLCJha3VuZS5rYWdvc2hpbWEuanAiLCJhbWFtaS5rYWdvc2hpbWEuanAiLCJoaW9raS5rYWdvc2hpbWEuanAi''@;'; put 'put ''LCJpc2Eua2Fnb3NoaW1hLmpwIiwiaXNlbi5rYWdvc2hpbWEuanAiLCJpenVtaS5rYWdvc2hpbWEuanAiLCJrYWdvc2hpbWEua2Fnb3NoaW1hLmpwIiwia2Fub3lhLmthZ29zaGltYS5qcCIsImthd2FuYWJlLmthZ29zaGltYS5qcCIsImtpbmtvLmthZ29zaGltYS5qcCIsImtvdXlhbWEua2Fn''@;'; put 'put ''b3NoaW1hLmpwIiwibWFrdXJhemFraS5rYWdvc2hpbWEuanAiLCJtYXRzdW1vdG8ua2Fnb3NoaW1hLmpwIiwibWluYW1pdGFuZS5rYWdvc2hpbWEuanAiLCJuYWthdGFuZS5rYWdvc2hpbWEuanAiLCJuaXNoaW5vb21vdGUua2Fnb3NoaW1hLmpwIiwic2F0c3VtYXNlbmRhaS5rYWdvc2hpbWEu''@;'; put 'put ''anAiLCJzb28ua2Fnb3NoaW1hLmpwIiwidGFydW1penUua2Fnb3NoaW1hLmpwIiwieXVzdWkua2Fnb3NoaW1hLmpwIiwiYWlrYXdhLmthbmFnYXdhLmpwIiwiYXRzdWdpLmthbmFnYXdhLmpwIiwiYXlhc2Uua2FuYWdhd2EuanAiLCJjaGlnYXNha2kua2FuYWdhd2EuanAiLCJlYmluYS5rYW5h''@;'; put 'put ''Z2F3YS5qcCIsImZ1amlzYXdhLmthbmFnYXdhLmpwIiwiaGFkYW5vLmthbmFnYXdhLmpwIiwiaGFrb25lLmthbmFnYXdhLmpwIiwiaGlyYXRzdWthLmthbmFnYXdhLmpwIiwiaXNlaGFyYS5rYW5hZ2F3YS5qcCIsImthaXNlaS5rYW5hZ2F3YS5qcCIsImthbWFrdXJhLmthbmFnYXdhLmpwIiwi''@;'; put 'put ''a2l5b2thd2Eua2FuYWdhd2EuanAiLCJtYXRzdWRhLmthbmFnYXdhLmpwIiwibWluYW1pYXNoaWdhcmEua2FuYWdhd2EuanAiLCJtaXVyYS5rYW5hZ2F3YS5qcCIsIm5ha2FpLmthbmFnYXdhLmpwIiwibmlub21peWEua2FuYWdhd2EuanAiLCJvZGF3YXJhLmthbmFnYXdhLmpwIiwib2kua2Fu''@;'; put 'put ''YWdhd2EuanAiLCJvaXNvLmthbmFnYXdhLmpwIiwic2FnYW1paGFyYS5rYW5hZ2F3YS5qcCIsInNhbXVrYXdhLmthbmFnYXdhLmpwIiwidHN1a3VpLmthbmFnYXdhLmpwIiwieWFtYWtpdGEua2FuYWdhd2EuanAiLCJ5YW1hdG8ua2FuYWdhd2EuanAiLCJ5b2tvc3VrYS5rYW5hZ2F3YS5qcCIs''@;'; put 'put ''Inl1Z2F3YXJhLmthbmFnYXdhLmpwIiwiemFtYS5rYW5hZ2F3YS5qcCIsInp1c2hpLmthbmFnYXdhLmpwIiwiYWtpLmtvY2hpLmpwIiwiZ2Vpc2VpLmtvY2hpLmpwIiwiaGlkYWthLmtvY2hpLmpwIiwiaGlnYXNoaXRzdW5vLmtvY2hpLmpwIiwiaW5vLmtvY2hpLmpwIiwia2FnYW1pLmtvY2hp''@;'; put 'put ''LmpwIiwia2FtaS5rb2NoaS5qcCIsImtpdGFnYXdhLmtvY2hpLmpwIiwia29jaGkua29jaGkuanAiLCJtaWhhcmEua29jaGkuanAiLCJtb3RveWFtYS5rb2NoaS5qcCIsIm11cm90by5rb2NoaS5qcCIsIm5haGFyaS5rb2NoaS5qcCIsIm5ha2FtdXJhLmtvY2hpLmpwIiwibmFua29rdS5rb2No''@;'; put 'put ''aS5qcCIsIm5pc2hpdG9zYS5rb2NoaS5qcCIsIm5peW9kb2dhd2Eua29jaGkuanAiLCJvY2hpLmtvY2hpLmpwIiwib2thd2Eua29jaGkuanAiLCJvdG95by5rb2NoaS5qcCIsIm90c3VraS5rb2NoaS5qcCIsInNha2F3YS5rb2NoaS5qcCIsInN1a3Vtby5rb2NoaS5qcCIsInN1c2FraS5rb2No''@;'; put 'put ''aS5qcCIsInRvc2Eua29jaGkuanAiLCJ0b3Nhc2hpbWl6dS5rb2NoaS5qcCIsInRveW8ua29jaGkuanAiLCJ0c3Vuby5rb2NoaS5qcCIsInVtYWppLmtvY2hpLmpwIiwieWFzdWRhLmtvY2hpLmpwIiwieXVzdWhhcmEua29jaGkuanAiLCJhbWFrdXNhLmt1bWFtb3RvLmpwIiwiYXJhby5rdW1h''@;'; put 'put ''bW90by5qcCIsImFzby5rdW1hbW90by5qcCIsImNob3lvLmt1bWFtb3RvLmpwIiwiZ3lva3V0by5rdW1hbW90by5qcCIsImthbWlhbWFrdXNhLmt1bWFtb3RvLmpwIiwia2lrdWNoaS5rdW1hbW90by5qcCIsImt1bWFtb3RvLmt1bWFtb3RvLmpwIiwibWFzaGlraS5rdW1hbW90by5qcCIsIm1p''@;'; put 'put ''ZnVuZS5rdW1hbW90by5qcCIsIm1pbmFtYXRhLmt1bWFtb3RvLmpwIiwibWluYW1pb2d1bmkua3VtYW1vdG8uanAiLCJuYWdhc3Uua3VtYW1vdG8uanAiLCJuaXNoaWhhcmEua3VtYW1vdG8uanAiLCJvZ3VuaS5rdW1hbW90by5qcCIsIm96dS5rdW1hbW90by5qcCIsInN1bW90by5rdW1hbW90''@;'; put 'put ''by5qcCIsInRha2Ftb3JpLmt1bWFtb3RvLmpwIiwidWtpLmt1bWFtb3RvLmpwIiwidXRvLmt1bWFtb3RvLmpwIiwieWFtYWdhLmt1bWFtb3RvLmpwIiwieWFtYXRvLmt1bWFtb3RvLmpwIiwieWF0c3VzaGlyby5rdW1hbW90by5qcCIsImF5YWJlLmt5b3RvLmpwIiwiZnVrdWNoaXlhbWEua3lv''@;'; put 'put ''dG8uanAiLCJoaWdhc2hpeWFtYS5reW90by5qcCIsImlkZS5reW90by5qcCIsImluZS5reW90by5qcCIsImpveW8ua3lvdG8uanAiLCJrYW1lb2thLmt5b3RvLmpwIiwia2Ftby5reW90by5qcCIsImtpdGEua3lvdG8uanAiLCJraXp1Lmt5b3RvLmpwIiwia3VtaXlhbWEua3lvdG8uanAiLCJr''@;'; put 'put ''eW90YW1iYS5reW90by5qcCIsImt5b3RhbmFiZS5reW90by5qcCIsImt5b3RhbmdvLmt5b3RvLmpwIiwibWFpenVydS5reW90by5qcCIsIm1pbmFtaS5reW90by5qcCIsIm1pbmFtaXlhbWFzaGlyby5reW90by5qcCIsIm1peWF6dS5reW90by5qcCIsIm11a28ua3lvdG8uanAiLCJuYWdhb2th''@;'; put 'put ''a3lvLmt5b3RvLmpwIiwibmFrYWd5by5reW90by5qcCIsIm5hbnRhbi5reW90by5qcCIsIm95YW1hemFraS5reW90by5qcCIsInNha3lvLmt5b3RvLmpwIiwic2Vpa2Eua3lvdG8uanAiLCJ0YW5hYmUua3lvdG8uanAiLCJ1amkua3lvdG8uanAiLCJ1aml0YXdhcmEua3lvdG8uanAiLCJ3YXp1''@;'; put 'put ''a2Eua3lvdG8uanAiLCJ5YW1hc2hpbmEua3lvdG8uanAiLCJ5YXdhdGEua3lvdG8uanAiLCJhc2FoaS5taWUuanAiLCJpbmFiZS5taWUuanAiLCJpc2UubWllLmpwIiwia2FtZXlhbWEubWllLmpwIiwia2F3YWdvZS5taWUuanAiLCJraWhvLm1pZS5qcCIsImtpc29zYWtpLm1pZS5qcCIsImtp''@;'; put 'put ''d2EubWllLmpwIiwia29tb25vLm1pZS5qcCIsImt1bWFuby5taWUuanAiLCJrdXdhbmEubWllLmpwIiwibWF0c3VzYWthLm1pZS5qcCIsIm1laXdhLm1pZS5qcCIsIm1paGFtYS5taWUuanAiLCJtaW5hbWlpc2UubWllLmpwIiwibWlzdWdpLm1pZS5qcCIsIm1peWFtYS5taWUuanAiLCJuYWJh''@;'; put 'put ''cmkubWllLmpwIiwic2hpbWEubWllLmpwIiwic3V6dWthLm1pZS5qcCIsInRhZG8ubWllLmpwIiwidGFpa2kubWllLmpwIiwidGFraS5taWUuanAiLCJ0YW1ha2kubWllLmpwIiwidG9iYS5taWUuanAiLCJ0c3UubWllLmpwIiwidWRvbm8ubWllLmpwIiwidXJlc2hpbm8ubWllLmpwIiwid2F0''@;'; put 'put ''YXJhaS5taWUuanAiLCJ5b2trYWljaGkubWllLmpwIiwiZnVydWthd2EubWl5YWdpLmpwIiwiaGlnYXNoaW1hdHN1c2hpbWEubWl5YWdpLmpwIiwiaXNoaW5vbWFraS5taXlhZ2kuanAiLCJpd2FudW1hLm1peWFnaS5qcCIsImtha3VkYS5taXlhZ2kuanAiLCJrYW1pLm1peWFnaS5qcCIsImth''@;'; put 'put ''d2FzYWtpLm1peWFnaS5qcCIsIm1hcnVtb3JpLm1peWFnaS5qcCIsIm1hdHN1c2hpbWEubWl5YWdpLmpwIiwibWluYW1pc2FucmlrdS5taXlhZ2kuanAiLCJtaXNhdG8ubWl5YWdpLmpwIiwibXVyYXRhLm1peWFnaS5qcCIsIm5hdG9yaS5taXlhZ2kuanAiLCJvZ2F3YXJhLm1peWFnaS5qcCIs''@;'; put 'put ''Im9oaXJhLm1peWFnaS5qcCIsIm9uYWdhd2EubWl5YWdpLmpwIiwib3Nha2kubWl5YWdpLmpwIiwicmlmdS5taXlhZ2kuanAiLCJzZW1pbmUubWl5YWdpLmpwIiwic2hpYmF0YS5taXlhZ2kuanAiLCJzaGljaGlrYXNodWt1Lm1peWFnaS5qcCIsInNoaWthbWEubWl5YWdpLmpwIiwic2hpb2dh''@;'; put 'put ''bWEubWl5YWdpLmpwIiwic2hpcm9pc2hpLm1peWFnaS5qcCIsInRhZ2Fqby5taXlhZ2kuanAiLCJ0YWl3YS5taXlhZ2kuanAiLCJ0b21lLm1peWFnaS5qcCIsInRvbWl5YS5taXlhZ2kuanAiLCJ3YWt1eWEubWl5YWdpLmpwIiwid2F0YXJpLm1peWFnaS5qcCIsInlhbWFtb3RvLm1peWFnaS5q''@;'; put 'put ''cCIsInphby5taXlhZ2kuanAiLCJheWEubWl5YXpha2kuanAiLCJlYmluby5taXlhemFraS5qcCIsImdva2FzZS5taXlhemFraS5qcCIsImh5dWdhLm1peWF6YWtpLmpwIiwia2Fkb2dhd2EubWl5YXpha2kuanAiLCJrYXdhbWluYW1pLm1peWF6YWtpLmpwIiwia2lqby5taXlhemFraS5qcCIs''@;'; put 'put ''ImtpdGFnYXdhLm1peWF6YWtpLmpwIiwia2l0YWthdGEubWl5YXpha2kuanAiLCJraXRhdXJhLm1peWF6YWtpLmpwIiwia29iYXlhc2hpLm1peWF6YWtpLmpwIiwia3VuaXRvbWkubWl5YXpha2kuanAiLCJrdXNoaW1hLm1peWF6YWtpLmpwIiwibWltYXRhLm1peWF6YWtpLmpwIiwibWl5YWtv''@;'; put 'put ''bm9qby5taXlhemFraS5qcCIsIm1peWF6YWtpLm1peWF6YWtpLmpwIiwibW9yb3RzdWthLm1peWF6YWtpLmpwIiwibmljaGluYW4ubWl5YXpha2kuanAiLCJuaXNoaW1lcmEubWl5YXpha2kuanAiLCJub2Jlb2thLm1peWF6YWtpLmpwIiwic2FpdG8ubWl5YXpha2kuanAiLCJzaGlpYmEubWl5''@;'; put 'put ''YXpha2kuanAiLCJzaGludG9taS5taXlhemFraS5qcCIsInRha2FoYXJ1Lm1peWF6YWtpLmpwIiwidGFrYW5hYmUubWl5YXpha2kuanAiLCJ0YWthemFraS5taXlhemFraS5qcCIsInRzdW5vLm1peWF6YWtpLmpwIiwiYWNoaS5uYWdhbm8uanAiLCJhZ2VtYXRzdS5uYWdhbm8uanAiLCJhbmFu''@;'; put 'put ''Lm5hZ2Fuby5qcCIsImFva2kubmFnYW5vLmpwIiwiYXNhaGkubmFnYW5vLmpwIiwiYXp1bWluby5uYWdhbm8uanAiLCJjaGlrdWhva3UubmFnYW5vLmpwIiwiY2hpa3VtYS5uYWdhbm8uanAiLCJjaGluby5uYWdhbm8uanAiLCJmdWppbWkubmFnYW5vLmpwIiwiaGFrdWJhLm5hZ2Fuby5qcCIs''@;'; put 'put ''ImhhcmEubmFnYW5vLmpwIiwiaGlyYXlhLm5hZ2Fuby5qcCIsImlpZGEubmFnYW5vLmpwIiwiaWlqaW1hLm5hZ2Fuby5qcCIsImlpeWFtYS5uYWdhbm8uanAiLCJpaXp1bmEubmFnYW5vLmpwIiwiaWtlZGEubmFnYW5vLmpwIiwiaWt1c2FrYS5uYWdhbm8uanAiLCJpbmEubmFnYW5vLmpwIiwi''@;'; put 'put ''a2FydWl6YXdhLm5hZ2Fuby5qcCIsImthd2FrYW1pLm5hZ2Fuby5qcCIsImtpc28ubmFnYW5vLmpwIiwia2lzb2Z1a3VzaGltYS5uYWdhbm8uanAiLCJraXRhYWlraS5uYWdhbm8uanAiLCJrb21hZ2FuZS5uYWdhbm8uanAiLCJrb21vcm8ubmFnYW5vLmpwIiwibWF0c3VrYXdhLm5hZ2Fuby5q''@;'; put 'put ''cCIsIm1hdHN1bW90by5uYWdhbm8uanAiLCJtaWFzYS5uYWdhbm8uanAiLCJtaW5hbWlhaWtpLm5hZ2Fuby5qcCIsIm1pbmFtaW1ha2kubmFnYW5vLmpwIiwibWluYW1pbWlub3dhLm5hZ2Fuby5qcCIsIm1pbm93YS5uYWdhbm8uanAiLCJtaXlhZGEubmFnYW5vLmpwIiwibWl5b3RhLm5hZ2Fu''@;'; put 'put ''by5qcCIsIm1vY2hpenVraS5uYWdhbm8uanAiLCJuYWdhbm8ubmFnYW5vLmpwIiwibmFnYXdhLm5hZ2Fuby5qcCIsIm5hZ2lzby5uYWdhbm8uanAiLCJuYWthZ2F3YS5uYWdhbm8uanAiLCJuYWthbm8ubmFnYW5vLmpwIiwibm96YXdhb25zZW4ubmFnYW5vLmpwIiwib2J1c2UubmFnYW5vLmpw''@;'; put 'put ''Iiwib2dhd2EubmFnYW5vLmpwIiwib2theWEubmFnYW5vLmpwIiwib21hY2hpLm5hZ2Fuby5qcCIsIm9taS5uYWdhbm8uanAiLCJvb2t1d2EubmFnYW5vLmpwIiwib29zaGlrYS5uYWdhbm8uanAiLCJvdGFraS5uYWdhbm8uanAiLCJvdGFyaS5uYWdhbm8uanAiLCJzYWthZS5uYWdhbm8uanAi''@;'; put 'put ''LCJzYWtha2kubmFnYW5vLmpwIiwic2FrdS5uYWdhbm8uanAiLCJzYWt1aG8ubmFnYW5vLmpwIiwic2hpbW9zdXdhLm5hZ2Fuby5qcCIsInNoaW5hbm9tYWNoaS5uYWdhbm8uanAiLCJzaGlvamlyaS5uYWdhbm8uanAiLCJzdXdhLm5hZ2Fuby5qcCIsInN1emFrYS5uYWdhbm8uanAiLCJ0YWth''@;'; put 'put ''Z2kubmFnYW5vLmpwIiwidGFrYW1vcmkubmFnYW5vLmpwIiwidGFrYXlhbWEubmFnYW5vLmpwIiwidGF0ZXNoaW5hLm5hZ2Fuby5qcCIsInRhdHN1bm8ubmFnYW5vLmpwIiwidG9nYWt1c2hpLm5hZ2Fuby5qcCIsInRvZ3VyYS5uYWdhbm8uanAiLCJ0b21pLm5hZ2Fuby5qcCIsInVlZGEubmFn''@;'; put 'put ''YW5vLmpwIiwid2FkYS5uYWdhbm8uanAiLCJ5YW1hZ2F0YS5uYWdhbm8uanAiLCJ5YW1hbm91Y2hpLm5hZ2Fuby5qcCIsInlhc2FrYS5uYWdhbm8uanAiLCJ5YXN1b2thLm5hZ2Fuby5qcCIsImNoaWppd2EubmFnYXNha2kuanAiLCJmdXRzdS5uYWdhc2FraS5qcCIsImdvdG8ubmFnYXNha2ku''@;'; put 'put ''anAiLCJoYXNhbWkubmFnYXNha2kuanAiLCJoaXJhZG8ubmFnYXNha2kuanAiLCJpa2kubmFnYXNha2kuanAiLCJpc2FoYXlhLm5hZ2FzYWtpLmpwIiwia2F3YXRhbmEubmFnYXNha2kuanAiLCJrdWNoaW5vdHN1Lm5hZ2FzYWtpLmpwIiwibWF0c3V1cmEubmFnYXNha2kuanAiLCJuYWdhc2Fr''@;'; put 'put ''aS5uYWdhc2FraS5qcCIsIm9iYW1hLm5hZ2FzYWtpLmpwIiwib211cmEubmFnYXNha2kuanAiLCJvc2V0by5uYWdhc2FraS5qcCIsInNhaWthaS5uYWdhc2FraS5qcCIsInNhc2Viby5uYWdhc2FraS5qcCIsInNlaWhpLm5hZ2FzYWtpLmpwIiwic2hpbWFiYXJhLm5hZ2FzYWtpLmpwIiwic2hp''@;'; put 'put ''bmthbWlnb3RvLm5hZ2FzYWtpLmpwIiwidG9naXRzdS5uYWdhc2FraS5qcCIsInRzdXNoaW1hLm5hZ2FzYWtpLmpwIiwidW56ZW4ubmFnYXNha2kuanAiLCJhbmRvLm5hcmEuanAiLCJnb3NlLm5hcmEuanAiLCJoZWd1cmkubmFyYS5qcCIsImhpZ2FzaGl5b3NoaW5vLm5hcmEuanAiLCJpa2Fy''@;'; put 'put ''dWdhLm5hcmEuanAiLCJpa29tYS5uYXJhLmpwIiwia2FtaWtpdGF5YW1hLm5hcmEuanAiLCJrYW5tYWtpLm5hcmEuanAiLCJrYXNoaWJhLm5hcmEuanAiLCJrYXNoaWhhcmEubmFyYS5qcCIsImthdHN1cmFnaS5uYXJhLmpwIiwia2F3YWkubmFyYS5qcCIsImthd2FrYW1pLm5hcmEuanAiLCJr''@;'; put 'put ''YXdhbmlzaGkubmFyYS5qcCIsImtvcnlvLm5hcmEuanAiLCJrdXJvdGFraS5uYXJhLmpwIiwibWl0c3VlLm5hcmEuanAiLCJtaXlha2UubmFyYS5qcCIsIm5hcmEubmFyYS5qcCIsIm5vc2VnYXdhLm5hcmEuanAiLCJvamkubmFyYS5qcCIsIm91ZGEubmFyYS5qcCIsIm95b2RvLm5hcmEuanAi''@;'; put 'put ''LCJzYWt1cmFpLm5hcmEuanAiLCJzYW5nby5uYXJhLmpwIiwic2hpbW9pY2hpLm5hcmEuanAiLCJzaGltb2tpdGF5YW1hLm5hcmEuanAiLCJzaGluam8ubmFyYS5qcCIsInNvbmkubmFyYS5qcCIsInRha2F0b3JpLm5hcmEuanAiLCJ0YXdhcmFtb3RvLm5hcmEuanAiLCJ0ZW5rYXdhLm5hcmEu''@;'; put 'put ''anAiLCJ0ZW5yaS5uYXJhLmpwIiwidWRhLm5hcmEuanAiLCJ5YW1hdG9rb3JpeWFtYS5uYXJhLmpwIiwieWFtYXRvdGFrYWRhLm5hcmEuanAiLCJ5YW1hem9lLm5hcmEuanAiLCJ5b3NoaW5vLm5hcmEuanAiLCJhZ2EubmlpZ2F0YS5qcCIsImFnYW5vLm5paWdhdGEuanAiLCJnb3Nlbi5uaWln''@;'; put 'put ''YXRhLmpwIiwiaXRvaWdhd2EubmlpZ2F0YS5qcCIsIml6dW1vemFraS5uaWlnYXRhLmpwIiwiam9ldHN1Lm5paWdhdGEuanAiLCJrYW1vLm5paWdhdGEuanAiLCJrYXJpd2EubmlpZ2F0YS5qcCIsImthc2hpd2F6YWtpLm5paWdhdGEuanAiLCJtaW5hbWl1b251bWEubmlpZ2F0YS5qcCIsIm1p''@;'; put 'put ''dHN1a2UubmlpZ2F0YS5qcCIsIm11aWthLm5paWdhdGEuanAiLCJtdXJha2FtaS5uaWlnYXRhLmpwIiwibXlva28ubmlpZ2F0YS5qcCIsIm5hZ2Fva2EubmlpZ2F0YS5qcCIsIm5paWdhdGEubmlpZ2F0YS5qcCIsIm9qaXlhLm5paWdhdGEuanAiLCJvbWkubmlpZ2F0YS5qcCIsInNhZG8ubmlp''@;'; put 'put ''Z2F0YS5qcCIsInNhbmpvLm5paWdhdGEuanAiLCJzZWlyby5uaWlnYXRhLmpwIiwic2Vpcm91Lm5paWdhdGEuanAiLCJzZWtpa2F3YS5uaWlnYXRhLmpwIiwic2hpYmF0YS5uaWlnYXRhLmpwIiwidGFnYW1pLm5paWdhdGEuanAiLCJ0YWluYWkubmlpZ2F0YS5qcCIsInRvY2hpby5uaWlnYXRh''@;'; put 'put ''LmpwIiwidG9rYW1hY2hpLm5paWdhdGEuanAiLCJ0c3ViYW1lLm5paWdhdGEuanAiLCJ0c3VuYW4ubmlpZ2F0YS5qcCIsInVvbnVtYS5uaWlnYXRhLmpwIiwieWFoaWtvLm5paWdhdGEuanAiLCJ5b2l0YS5uaWlnYXRhLmpwIiwieXV6YXdhLm5paWdhdGEuanAiLCJiZXBwdS5vaXRhLmpwIiwi''@;'; put 'put ''YnVuZ29vbm8ub2l0YS5qcCIsImJ1bmdvdGFrYWRhLm9pdGEuanAiLCJoYXNhbWEub2l0YS5qcCIsImhpamkub2l0YS5qcCIsImhpbWVzaGltYS5vaXRhLmpwIiwiaGl0YS5vaXRhLmpwIiwia2FtaXRzdWUub2l0YS5qcCIsImtva29ub2Uub2l0YS5qcCIsImt1anUub2l0YS5qcCIsImt1bmlz''@;'; put 'put ''YWtpLm9pdGEuanAiLCJrdXN1Lm9pdGEuanAiLCJvaXRhLm9pdGEuanAiLCJzYWlraS5vaXRhLmpwIiwidGFrZXRhLm9pdGEuanAiLCJ0c3VrdW1pLm9pdGEuanAiLCJ1c2Eub2l0YS5qcCIsInVzdWtpLm9pdGEuanAiLCJ5dWZ1Lm9pdGEuanAiLCJha2Fpd2Eub2theWFtYS5qcCIsImFzYWt1''@;'; put 'put ''Y2hpLm9rYXlhbWEuanAiLCJiaXplbi5va2F5YW1hLmpwIiwiaGF5YXNoaW1hLm9rYXlhbWEuanAiLCJpYmFyYS5va2F5YW1hLmpwIiwia2FnYW1pbm8ub2theWFtYS5qcCIsImthc2Fva2Eub2theWFtYS5qcCIsImtpYmljaHVvLm9rYXlhbWEuanAiLCJrdW1lbmFuLm9rYXlhbWEuanAiLCJr''@;'; put 'put ''dXJhc2hpa2kub2theWFtYS5qcCIsIm1hbml3YS5va2F5YW1hLmpwIiwibWlzYWtpLm9rYXlhbWEuanAiLCJuYWdpLm9rYXlhbWEuanAiLCJuaWltaS5va2F5YW1hLmpwIiwibmlzaGlhd2FrdXJhLm9rYXlhbWEuanAiLCJva2F5YW1hLm9rYXlhbWEuanAiLCJzYXRvc2hvLm9rYXlhbWEuanAi''@;'; put 'put ''LCJzZXRvdWNoaS5va2F5YW1hLmpwIiwic2hpbmpvLm9rYXlhbWEuanAiLCJzaG9vLm9rYXlhbWEuanAiLCJzb2phLm9rYXlhbWEuanAiLCJ0YWthaGFzaGkub2theWFtYS5qcCIsInRhbWFuby5va2F5YW1hLmpwIiwidHN1eWFtYS5va2F5YW1hLmpwIiwid2FrZS5va2F5YW1hLmpwIiwieWFr''@;'; put 'put ''YWdlLm9rYXlhbWEuanAiLCJhZ3VuaS5va2luYXdhLmpwIiwiZ2lub3dhbi5va2luYXdhLmpwIiwiZ2lub3phLm9raW5hd2EuanAiLCJndXNoaWthbWkub2tpbmF3YS5qcCIsImhhZWJhcnUub2tpbmF3YS5qcCIsImhpZ2FzaGkub2tpbmF3YS5qcCIsImhpcmFyYS5va2luYXdhLmpwIiwiaWhl''@;'; put 'put ''eWEub2tpbmF3YS5qcCIsImlzaGlnYWtpLm9raW5hd2EuanAiLCJpc2hpa2F3YS5va2luYXdhLmpwIiwiaXRvbWFuLm9raW5hd2EuanAiLCJpemVuYS5va2luYXdhLmpwIiwia2FkZW5hLm9raW5hd2EuanAiLCJraW4ub2tpbmF3YS5qcCIsImtpdGFkYWl0by5va2luYXdhLmpwIiwia2l0YW5h''@;'; put 'put ''a2FndXN1a3Uub2tpbmF3YS5qcCIsImt1bWVqaW1hLm9raW5hd2EuanAiLCJrdW5pZ2FtaS5va2luYXdhLmpwIiwibWluYW1pZGFpdG8ub2tpbmF3YS5qcCIsIm1vdG9idS5va2luYXdhLmpwIiwibmFnby5va2luYXdhLmpwIiwibmFoYS5va2luYXdhLmpwIiwibmFrYWd1c3VrdS5va2luYXdh''@;'; put 'put ''LmpwIiwibmFraWppbi5va2luYXdhLmpwIiwibmFuam8ub2tpbmF3YS5qcCIsIm5pc2hpaGFyYS5va2luYXdhLmpwIiwib2dpbWkub2tpbmF3YS5qcCIsIm9raW5hd2Eub2tpbmF3YS5qcCIsIm9ubmEub2tpbmF3YS5qcCIsInNoaW1vamkub2tpbmF3YS5qcCIsInRha2V0b21pLm9raW5hd2Eu''@;'; put 'put ''anAiLCJ0YXJhbWEub2tpbmF3YS5qcCIsInRva2FzaGlraS5va2luYXdhLmpwIiwidG9taWd1c3VrdS5va2luYXdhLmpwIiwidG9uYWtpLm9raW5hd2EuanAiLCJ1cmFzb2Uub2tpbmF3YS5qcCIsInVydW1hLm9raW5hd2EuanAiLCJ5YWVzZS5va2luYXdhLmpwIiwieW9taXRhbi5va2luYXdh''@;'; put 'put ''LmpwIiwieW9uYWJhcnUub2tpbmF3YS5qcCIsInlvbmFndW5pLm9raW5hd2EuanAiLCJ6YW1hbWkub2tpbmF3YS5qcCIsImFiZW5vLm9zYWthLmpwIiwiY2hpaGF5YWFrYXNha2Eub3Nha2EuanAiLCJjaHVvLm9zYWthLmpwIiwiZGFpdG8ub3Nha2EuanAiLCJmdWppaWRlcmEub3Nha2EuanAi''@;'; put 'put ''LCJoYWJpa2luby5vc2FrYS5qcCIsImhhbm5hbi5vc2FrYS5qcCIsImhpZ2FzaGlvc2FrYS5vc2FrYS5qcCIsImhpZ2FzaGlzdW1peW9zaGkub3Nha2EuanAiLCJoaWdhc2hpeW9kb2dhd2Eub3Nha2EuanAiLCJoaXJha2F0YS5vc2FrYS5qcCIsImliYXJha2kub3Nha2EuanAiLCJpa2VkYS5v''@;'; put 'put ''c2FrYS5qcCIsIml6dW1pLm9zYWthLmpwIiwiaXp1bWlvdHN1Lm9zYWthLmpwIiwiaXp1bWlzYW5vLm9zYWthLmpwIiwia2Fkb21hLm9zYWthLmpwIiwia2FpenVrYS5vc2FrYS5qcCIsImthbmFuLm9zYWthLmpwIiwia2FzaGl3YXJhLm9zYWthLmpwIiwia2F0YW5vLm9zYWthLmpwIiwia2F3''@;'; put 'put ''YWNoaW5hZ2Fuby5vc2FrYS5qcCIsImtpc2hpd2FkYS5vc2FrYS5qcCIsImtpdGEub3Nha2EuanAiLCJrdW1hdG9yaS5vc2FrYS5qcCIsIm1hdHN1YmFyYS5vc2FrYS5qcCIsIm1pbmF0by5vc2FrYS5qcCIsIm1pbm9oLm9zYWthLmpwIiwibWlzYWtpLm9zYWthLmpwIiwibW9yaWd1Y2hpLm9z''@;'; put 'put ''YWthLmpwIiwibmV5YWdhd2Eub3Nha2EuanAiLCJuaXNoaS5vc2FrYS5qcCIsIm5vc2Uub3Nha2EuanAiLCJvc2FrYXNheWFtYS5vc2FrYS5qcCIsInNha2FpLm9zYWthLmpwIiwic2F5YW1hLm9zYWthLmpwIiwic2VubmFuLm9zYWthLmpwIiwic2V0dHN1Lm9zYWthLmpwIiwic2hpam9uYXdh''@;'; put 'put ''dGUub3Nha2EuanAiLCJzaGltYW1vdG8ub3Nha2EuanAiLCJzdWl0YS5vc2FrYS5qcCIsInRhZGFva2Eub3Nha2EuanAiLCJ0YWlzaGkub3Nha2EuanAiLCJ0YWppcmkub3Nha2EuanAiLCJ0YWthaXNoaS5vc2FrYS5qcCIsInRha2F0c3VraS5vc2FrYS5qcCIsInRvbmRhYmF5YXNoaS5vc2Fr''@;'; put 'put ''YS5qcCIsInRveW9uYWthLm9zYWthLmpwIiwidG95b25vLm9zYWthLmpwIiwieWFvLm9zYWthLmpwIiwiYXJpYWtlLnNhZ2EuanAiLCJhcml0YS5zYWdhLmpwIiwiZnVrdWRvbWkuc2FnYS5qcCIsImdlbmthaS5zYWdhLmpwIiwiaGFtYXRhbWEuc2FnYS5qcCIsImhpemVuLnNhZ2EuanAiLCJp''@;'; put 'put ''bWFyaS5zYWdhLmpwIiwia2FtaW1pbmUuc2FnYS5qcCIsImthbnpha2kuc2FnYS5qcCIsImthcmF0c3Uuc2FnYS5qcCIsImthc2hpbWEuc2FnYS5qcCIsImtpdGFnYXRhLnNhZ2EuanAiLCJraXRhaGF0YS5zYWdhLmpwIiwia2l5YW1hLnNhZ2EuanAiLCJrb3Vob2t1LnNhZ2EuanAiLCJreXVy''@;'; put 'put ''YWdpLnNhZ2EuanAiLCJuaXNoaWFyaXRhLnNhZ2EuanAiLCJvZ2kuc2FnYS5qcCIsIm9tYWNoaS5zYWdhLmpwIiwib3VjaGkuc2FnYS5qcCIsInNhZ2Euc2FnYS5qcCIsInNoaXJvaXNoaS5zYWdhLmpwIiwidGFrdS5zYWdhLmpwIiwidGFyYS5zYWdhLmpwIiwidG9zdS5zYWdhLmpwIiwieW9z''@;'; put 'put ''aGlub2dhcmkuc2FnYS5qcCIsImFyYWthd2Euc2FpdGFtYS5qcCIsImFzYWthLnNhaXRhbWEuanAiLCJjaGljaGlidS5zYWl0YW1hLmpwIiwiZnVqaW1pLnNhaXRhbWEuanAiLCJmdWppbWluby5zYWl0YW1hLmpwIiwiZnVrYXlhLnNhaXRhbWEuanAiLCJoYW5uby5zYWl0YW1hLmpwIiwiaGFu''@;'; put 'put ''eXUuc2FpdGFtYS5qcCIsImhhc3VkYS5zYWl0YW1hLmpwIiwiaGF0b2dheWEuc2FpdGFtYS5qcCIsImhhdG95YW1hLnNhaXRhbWEuanAiLCJoaWRha2Euc2FpdGFtYS5qcCIsImhpZ2FzaGljaGljaGlidS5zYWl0YW1hLmpwIiwiaGlnYXNoaW1hdHN1eWFtYS5zYWl0YW1hLmpwIiwiaG9uam8u''@;'; put 'put ''c2FpdGFtYS5qcCIsImluYS5zYWl0YW1hLmpwIiwiaXJ1bWEuc2FpdGFtYS5qcCIsIml3YXRzdWtpLnNhaXRhbWEuanAiLCJrYW1paXp1bWkuc2FpdGFtYS5qcCIsImthbWlrYXdhLnNhaXRhbWEuanAiLCJrYW1pc2F0by5zYWl0YW1hLmpwIiwia2FzdWthYmUuc2FpdGFtYS5qcCIsImthd2Fn''@;'; put 'put ''b2Uuc2FpdGFtYS5qcCIsImthd2FndWNoaS5zYWl0YW1hLmpwIiwia2F3YWppbWEuc2FpdGFtYS5qcCIsImthem8uc2FpdGFtYS5qcCIsImtpdGFtb3RvLnNhaXRhbWEuanAiLCJrb3NoaWdheWEuc2FpdGFtYS5qcCIsImtvdW5vc3Uuc2FpdGFtYS5qcCIsImt1a2kuc2FpdGFtYS5qcCIsImt1''@;'; put 'put ''bWFnYXlhLnNhaXRhbWEuanAiLCJtYXRzdWJ1c2hpLnNhaXRhbWEuanAiLCJtaW5hbm8uc2FpdGFtYS5qcCIsIm1pc2F0by5zYWl0YW1hLmpwIiwibWl5YXNoaXJvLnNhaXRhbWEuanAiLCJtaXlvc2hpLnNhaXRhbWEuanAiLCJtb3JveWFtYS5zYWl0YW1hLmpwIiwibmFnYXRvcm8uc2FpdGFt''@;'; put 'put ''YS5qcCIsIm5hbWVnYXdhLnNhaXRhbWEuanAiLCJuaWl6YS5zYWl0YW1hLmpwIiwib2dhbm8uc2FpdGFtYS5qcCIsIm9nYXdhLnNhaXRhbWEuanAiLCJvZ29zZS5zYWl0YW1hLmpwIiwib2tlZ2F3YS5zYWl0YW1hLmpwIiwib21peWEuc2FpdGFtYS5qcCIsIm90YWtpLnNhaXRhbWEuanAiLCJy''@;'; put 'put ''YW56YW4uc2FpdGFtYS5qcCIsInJ5b2thbWkuc2FpdGFtYS5qcCIsInNhaXRhbWEuc2FpdGFtYS5qcCIsInNha2Fkby5zYWl0YW1hLmpwIiwic2F0dGUuc2FpdGFtYS5qcCIsInNheWFtYS5zYWl0YW1hLmpwIiwic2hpa2kuc2FpdGFtYS5qcCIsInNoaXJhb2thLnNhaXRhbWEuanAiLCJzb2th''@;'; put 'put ''LnNhaXRhbWEuanAiLCJzdWdpdG8uc2FpdGFtYS5qcCIsInRvZGEuc2FpdGFtYS5qcCIsInRva2lnYXdhLnNhaXRhbWEuanAiLCJ0b2tvcm96YXdhLnNhaXRhbWEuanAiLCJ0c3VydWdhc2hpbWEuc2FpdGFtYS5qcCIsInVyYXdhLnNhaXRhbWEuanAiLCJ3YXJhYmkuc2FpdGFtYS5qcCIsInlh''@;'; put 'put ''c2hpby5zYWl0YW1hLmpwIiwieW9rb3plLnNhaXRhbWEuanAiLCJ5b25vLnNhaXRhbWEuanAiLCJ5b3JpaS5zYWl0YW1hLmpwIiwieW9zaGlkYS5zYWl0YW1hLmpwIiwieW9zaGlrYXdhLnNhaXRhbWEuanAiLCJ5b3NoaW1pLnNhaXRhbWEuanAiLCJhaXNoby5zaGlnYS5qcCIsImdhbW8uc2hp''@;'; put 'put ''Z2EuanAiLCJoaWdhc2hpb21pLnNoaWdhLmpwIiwiaGlrb25lLnNoaWdhLmpwIiwia29rYS5zaGlnYS5qcCIsImtvbmFuLnNoaWdhLmpwIiwia29zZWkuc2hpZ2EuanAiLCJrb3RvLnNoaWdhLmpwIiwia3VzYXRzdS5zaGlnYS5qcCIsIm1haWJhcmEuc2hpZ2EuanAiLCJtb3JpeWFtYS5zaGln''@;'; put 'put ''YS5qcCIsIm5hZ2FoYW1hLnNoaWdhLmpwIiwibmlzaGlhemFpLnNoaWdhLmpwIiwibm90b2dhd2Euc2hpZ2EuanAiLCJvbWloYWNoaW1hbi5zaGlnYS5qcCIsIm90c3Uuc2hpZ2EuanAiLCJyaXR0by5zaGlnYS5qcCIsInJ5dW9oLnNoaWdhLmpwIiwidGFrYXNoaW1hLnNoaWdhLmpwIiwidGFr''@;'; put 'put ''YXRzdWtpLnNoaWdhLmpwIiwidG9yYWhpbWUuc2hpZ2EuanAiLCJ0b3lvc2F0by5zaGlnYS5qcCIsInlhc3Uuc2hpZ2EuanAiLCJha2FnaS5zaGltYW5lLmpwIiwiYW1hLnNoaW1hbmUuanAiLCJnb3RzdS5zaGltYW5lLmpwIiwiaGFtYWRhLnNoaW1hbmUuanAiLCJoaWdhc2hpaXp1bW8uc2hp''@;'; put 'put ''bWFuZS5qcCIsImhpa2F3YS5zaGltYW5lLmpwIiwiaGlraW1pLnNoaW1hbmUuanAiLCJpenVtby5zaGltYW5lLmpwIiwia2FraW5va2kuc2hpbWFuZS5qcCIsIm1hc3VkYS5zaGltYW5lLmpwIiwibWF0c3VlLnNoaW1hbmUuanAiLCJtaXNhdG8uc2hpbWFuZS5qcCIsIm5pc2hpbm9zaGltYS5z''@;'; put 'put ''aGltYW5lLmpwIiwib2hkYS5zaGltYW5lLmpwIiwib2tpbm9zaGltYS5zaGltYW5lLmpwIiwib2t1aXp1bW8uc2hpbWFuZS5qcCIsInNoaW1hbmUuc2hpbWFuZS5qcCIsInRhbWF5dS5zaGltYW5lLmpwIiwidHN1d2Fuby5zaGltYW5lLmpwIiwidW5uYW4uc2hpbWFuZS5qcCIsInlha3Vtby5z''@;'; put 'put ''aGltYW5lLmpwIiwieWFzdWdpLnNoaW1hbmUuanAiLCJ5YXRzdWthLnNoaW1hbmUuanAiLCJhcmFpLnNoaXp1b2thLmpwIiwiYXRhbWkuc2hpenVva2EuanAiLCJmdWppLnNoaXp1b2thLmpwIiwiZnVqaWVkYS5zaGl6dW9rYS5qcCIsImZ1amlrYXdhLnNoaXp1b2thLmpwIiwiZnVqaW5vbWl5''@;'; put 'put ''YS5zaGl6dW9rYS5qcCIsImZ1a3Vyb2kuc2hpenVva2EuanAiLCJnb3RlbWJhLnNoaXp1b2thLmpwIiwiaGFpYmFyYS5zaGl6dW9rYS5qcCIsImhhbWFtYXRzdS5zaGl6dW9rYS5qcCIsImhpZ2FzaGlpenUuc2hpenVva2EuanAiLCJpdG8uc2hpenVva2EuanAiLCJpd2F0YS5zaGl6dW9rYS5q''@;'; put 'put ''cCIsIml6dS5zaGl6dW9rYS5qcCIsIml6dW5va3VuaS5zaGl6dW9rYS5qcCIsImtha2VnYXdhLnNoaXp1b2thLmpwIiwia2FubmFtaS5zaGl6dW9rYS5qcCIsImthd2FuZWhvbi5zaGl6dW9rYS5qcCIsImthd2F6dS5zaGl6dW9rYS5qcCIsImtpa3VnYXdhLnNoaXp1b2thLmpwIiwia29zYWku''@;'; put 'put ''c2hpenVva2EuanAiLCJtYWtpbm9oYXJhLnNoaXp1b2thLmpwIiwibWF0c3V6YWtpLnNoaXp1b2thLmpwIiwibWluYW1paXp1LnNoaXp1b2thLmpwIiwibWlzaGltYS5zaGl6dW9rYS5qcCIsIm1vcmltYWNoaS5zaGl6dW9rYS5qcCIsIm5pc2hpaXp1LnNoaXp1b2thLmpwIiwibnVtYXp1LnNo''@;'; put 'put ''aXp1b2thLmpwIiwib21hZXpha2kuc2hpenVva2EuanAiLCJzaGltYWRhLnNoaXp1b2thLmpwIiwic2hpbWl6dS5zaGl6dW9rYS5qcCIsInNoaW1vZGEuc2hpenVva2EuanAiLCJzaGl6dW9rYS5zaGl6dW9rYS5qcCIsInN1c29uby5zaGl6dW9rYS5qcCIsInlhaXp1LnNoaXp1b2thLmpwIiwi''@;'; put 'put ''eW9zaGlkYS5zaGl6dW9rYS5qcCIsImFzaGlrYWdhLnRvY2hpZ2kuanAiLCJiYXRvLnRvY2hpZ2kuanAiLCJoYWdhLnRvY2hpZ2kuanAiLCJpY2hpa2FpLnRvY2hpZ2kuanAiLCJpd2FmdW5lLnRvY2hpZ2kuanAiLCJrYW1pbm9rYXdhLnRvY2hpZ2kuanAiLCJrYW51bWEudG9jaGlnaS5qcCIs''@;'; put 'put ''ImthcmFzdXlhbWEudG9jaGlnaS5qcCIsImt1cm9pc28udG9jaGlnaS5qcCIsIm1hc2hpa28udG9jaGlnaS5qcCIsIm1pYnUudG9jaGlnaS5qcCIsIm1va2EudG9jaGlnaS5qcCIsIm1vdGVnaS50b2NoaWdpLmpwIiwibmFzdS50b2NoaWdpLmpwIiwibmFzdXNoaW9iYXJhLnRvY2hpZ2kuanAi''@;'; put 'put ''LCJuaWtrby50b2NoaWdpLmpwIiwibmlzaGlrYXRhLnRvY2hpZ2kuanAiLCJub2dpLnRvY2hpZ2kuanAiLCJvaGlyYS50b2NoaWdpLmpwIiwib2h0YXdhcmEudG9jaGlnaS5qcCIsIm95YW1hLnRvY2hpZ2kuanAiLCJzYWt1cmEudG9jaGlnaS5qcCIsInNhbm8udG9jaGlnaS5qcCIsInNoaW1v''@;'; put 'put ''dHN1a2UudG9jaGlnaS5qcCIsInNoaW95YS50b2NoaWdpLmpwIiwidGFrYW5lemF3YS50b2NoaWdpLmpwIiwidG9jaGlnaS50b2NoaWdpLmpwIiwidHN1Z2EudG9jaGlnaS5qcCIsInVqaWllLnRvY2hpZ2kuanAiLCJ1dHN1bm9taXlhLnRvY2hpZ2kuanAiLCJ5YWl0YS50b2NoaWdpLmpwIiwi''@;'; put 'put ''YWl6dW1pLnRva3VzaGltYS5qcCIsImFuYW4udG9rdXNoaW1hLmpwIiwiaWNoaWJhLnRva3VzaGltYS5qcCIsIml0YW5vLnRva3VzaGltYS5qcCIsImthaW5hbi50b2t1c2hpbWEuanAiLCJrb21hdHN1c2hpbWEudG9rdXNoaW1hLmpwIiwibWF0c3VzaGlnZS50b2t1c2hpbWEuanAiLCJtaW1h''@;'; put 'put ''LnRva3VzaGltYS5qcCIsIm1pbmFtaS50b2t1c2hpbWEuanAiLCJtaXlvc2hpLnRva3VzaGltYS5qcCIsIm11Z2kudG9rdXNoaW1hLmpwIiwibmFrYWdhd2EudG9rdXNoaW1hLmpwIiwibmFydXRvLnRva3VzaGltYS5qcCIsInNhbmFnb2NoaS50b2t1c2hpbWEuanAiLCJzaGlzaGlrdWkudG9r''@;'; put 'put ''dXNoaW1hLmpwIiwidG9rdXNoaW1hLnRva3VzaGltYS5qcCIsIndhamlraS50b2t1c2hpbWEuanAiLCJhZGFjaGkudG9reW8uanAiLCJha2lydW5vLnRva3lvLmpwIiwiYWtpc2hpbWEudG9reW8uanAiLCJhb2dhc2hpbWEudG9reW8uanAiLCJhcmFrYXdhLnRva3lvLmpwIiwiYnVua3lvLnRv''@;'; put 'put ''a3lvLmpwIiwiY2hpeW9kYS50b2t5by5qcCIsImNob2Z1LnRva3lvLmpwIiwiY2h1by50b2t5by5qcCIsImVkb2dhd2EudG9reW8uanAiLCJmdWNodS50b2t5by5qcCIsImZ1c3NhLnRva3lvLmpwIiwiaGFjaGlqby50b2t5by5qcCIsImhhY2hpb2ppLnRva3lvLmpwIiwiaGFtdXJhLnRva3lv''@;'; put 'put ''LmpwIiwiaGlnYXNoaWt1cnVtZS50b2t5by5qcCIsImhpZ2FzaGltdXJheWFtYS50b2t5by5qcCIsImhpZ2FzaGl5YW1hdG8udG9reW8uanAiLCJoaW5vLnRva3lvLmpwIiwiaGlub2RlLnRva3lvLmpwIiwiaGlub2hhcmEudG9reW8uanAiLCJpbmFnaS50b2t5by5qcCIsIml0YWJhc2hpLnRv''@;'; put 'put ''a3lvLmpwIiwia2F0c3VzaGlrYS50b2t5by5qcCIsImtpdGEudG9reW8uanAiLCJraXlvc2UudG9reW8uanAiLCJrb2RhaXJhLnRva3lvLmpwIiwia29nYW5laS50b2t5by5qcCIsImtva3VidW5qaS50b2t5by5qcCIsImtvbWFlLnRva3lvLmpwIiwia290by50b2t5by5qcCIsImtvdXp1c2hp''@;'; put 'put ''bWEudG9reW8uanAiLCJrdW5pdGFjaGkudG9reW8uanAiLCJtYWNoaWRhLnRva3lvLmpwIiwibWVndXJvLnRva3lvLmpwIiwibWluYXRvLnRva3lvLmpwIiwibWl0YWthLnRva3lvLmpwIiwibWl6dWhvLnRva3lvLmpwIiwibXVzYXNoaW11cmF5YW1hLnRva3lvLmpwIiwibXVzYXNoaW5vLnRv''@;'; put 'put ''a3lvLmpwIiwibmFrYW5vLnRva3lvLmpwIiwibmVyaW1hLnRva3lvLmpwIiwib2dhc2F3YXJhLnRva3lvLmpwIiwib2t1dGFtYS50b2t5by5qcCIsIm9tZS50b2t5by5qcCIsIm9zaGltYS50b2t5by5qcCIsIm90YS50b2t5by5qcCIsInNldGFnYXlhLnRva3lvLmpwIiwic2hpYnV5YS50b2t5''@;'; put 'put ''by5qcCIsInNoaW5hZ2F3YS50b2t5by5qcCIsInNoaW5qdWt1LnRva3lvLmpwIiwic3VnaW5hbWkudG9reW8uanAiLCJzdW1pZGEudG9reW8uanAiLCJ0YWNoaWthd2EudG9reW8uanAiLCJ0YWl0by50b2t5by5qcCIsInRhbWEudG9reW8uanAiLCJ0b3NoaW1hLnRva3lvLmpwIiwiY2hpenUu''@;'; put 'put ''dG90dG9yaS5qcCIsImhpbm8udG90dG9yaS5qcCIsImthd2FoYXJhLnRvdHRvcmkuanAiLCJrb2dlLnRvdHRvcmkuanAiLCJrb3RvdXJhLnRvdHRvcmkuanAiLCJtaXNhc2EudG90dG9yaS5qcCIsIm5hbmJ1LnRvdHRvcmkuanAiLCJuaWNoaW5hbi50b3R0b3JpLmpwIiwic2FrYWltaW5hdG8u''@;'; put 'put ''dG90dG9yaS5qcCIsInRvdHRvcmkudG90dG9yaS5qcCIsIndha2FzYS50b3R0b3JpLmpwIiwieWF6dS50b3R0b3JpLmpwIiwieW9uYWdvLnRvdHRvcmkuanAiLCJhc2FoaS50b3lhbWEuanAiLCJmdWNodS50b3lhbWEuanAiLCJmdWt1bWl0c3UudG95YW1hLmpwIiwiZnVuYWhhc2hpLnRveWFt''@;'; put 'put ''YS5qcCIsImhpbWkudG95YW1hLmpwIiwiaW1penUudG95YW1hLmpwIiwiaW5hbWkudG95YW1hLmpwIiwiam9oYW5hLnRveWFtYS5qcCIsImthbWlpY2hpLnRveWFtYS5qcCIsImt1cm9iZS50b3lhbWEuanAiLCJuYWthbmlpa2F3YS50b3lhbWEuanAiLCJuYW1lcmlrYXdhLnRveWFtYS5qcCIs''@;'; put 'put ''Im5hbnRvLnRveWFtYS5qcCIsIm55dXplbi50b3lhbWEuanAiLCJveWFiZS50b3lhbWEuanAiLCJ0YWlyYS50b3lhbWEuanAiLCJ0YWthb2thLnRveWFtYS5qcCIsInRhdGV5YW1hLnRveWFtYS5qcCIsInRvZ2EudG95YW1hLmpwIiwidG9uYW1pLnRveWFtYS5qcCIsInRveWFtYS50b3lhbWEu''@;'; put 'put ''anAiLCJ1bmF6dWtpLnRveWFtYS5qcCIsInVvenUudG95YW1hLmpwIiwieWFtYWRhLnRveWFtYS5qcCIsImFyaWRhLndha2F5YW1hLmpwIiwiYXJpZGFnYXdhLndha2F5YW1hLmpwIiwiZ29iby53YWtheWFtYS5qcCIsImhhc2hpbW90by53YWtheWFtYS5qcCIsImhpZGFrYS53YWtheWFtYS5q''@;'; put 'put ''cCIsImhpcm9nYXdhLndha2F5YW1hLmpwIiwiaW5hbWkud2FrYXlhbWEuanAiLCJpd2FkZS53YWtheWFtYS5qcCIsImthaW5hbi53YWtheWFtYS5qcCIsImthbWl0b25kYS53YWtheWFtYS5qcCIsImthdHN1cmFnaS53YWtheWFtYS5qcCIsImtpbWluby53YWtheWFtYS5qcCIsImtpbm9rYXdh''@;'; put 'put ''Lndha2F5YW1hLmpwIiwia2l0YXlhbWEud2FrYXlhbWEuanAiLCJrb3lhLndha2F5YW1hLmpwIiwia296YS53YWtheWFtYS5qcCIsImtvemFnYXdhLndha2F5YW1hLmpwIiwia3Vkb3lhbWEud2FrYXlhbWEuanAiLCJrdXNoaW1vdG8ud2FrYXlhbWEuanAiLCJtaWhhbWEud2FrYXlhbWEuanAi''@;'; put 'put ''LCJtaXNhdG8ud2FrYXlhbWEuanAiLCJuYWNoaWthdHN1dXJhLndha2F5YW1hLmpwIiwic2hpbmd1Lndha2F5YW1hLmpwIiwic2hpcmFoYW1hLndha2F5YW1hLmpwIiwidGFpamkud2FrYXlhbWEuanAiLCJ0YW5hYmUud2FrYXlhbWEuanAiLCJ3YWtheWFtYS53YWtheWFtYS5qcCIsInl1YXNh''@;'; put 'put ''Lndha2F5YW1hLmpwIiwieXVyYS53YWtheWFtYS5qcCIsImFzYWhpLnlhbWFnYXRhLmpwIiwiZnVuYWdhdGEueWFtYWdhdGEuanAiLCJoaWdhc2hpbmUueWFtYWdhdGEuanAiLCJpaWRlLnlhbWFnYXRhLmpwIiwia2Fob2t1LnlhbWFnYXRhLmpwIiwia2FtaW5veWFtYS55YW1hZ2F0YS5qcCIs''@;'; put 'put ''ImthbmV5YW1hLnlhbWFnYXRhLmpwIiwia2F3YW5pc2hpLnlhbWFnYXRhLmpwIiwibWFtdXJvZ2F3YS55YW1hZ2F0YS5qcCIsIm1pa2F3YS55YW1hZ2F0YS5qcCIsIm11cmF5YW1hLnlhbWFnYXRhLmpwIiwibmFnYWkueWFtYWdhdGEuanAiLCJuYWtheWFtYS55YW1hZ2F0YS5qcCIsIm5hbnlv''@;'; put 'put ''LnlhbWFnYXRhLmpwIiwibmlzaGlrYXdhLnlhbWFnYXRhLmpwIiwib2JhbmF6YXdhLnlhbWFnYXRhLmpwIiwib2UueWFtYWdhdGEuanAiLCJvZ3VuaS55YW1hZ2F0YS5qcCIsIm9oa3VyYS55YW1hZ2F0YS5qcCIsIm9pc2hpZGEueWFtYWdhdGEuanAiLCJzYWdhZS55YW1hZ2F0YS5qcCIsInNh''@;'; put 'put ''a2F0YS55YW1hZ2F0YS5qcCIsInNha2VnYXdhLnlhbWFnYXRhLmpwIiwic2hpbmpvLnlhbWFnYXRhLmpwIiwic2hpcmF0YWthLnlhbWFnYXRhLmpwIiwic2hvbmFpLnlhbWFnYXRhLmpwIiwidGFrYWhhdGEueWFtYWdhdGEuanAiLCJ0ZW5kby55YW1hZ2F0YS5qcCIsInRvemF3YS55YW1hZ2F0''@;'; put 'put ''YS5qcCIsInRzdXJ1b2thLnlhbWFnYXRhLmpwIiwieWFtYWdhdGEueWFtYWdhdGEuanAiLCJ5YW1hbm9iZS55YW1hZ2F0YS5qcCIsInlvbmV6YXdhLnlhbWFnYXRhLmpwIiwieXV6YS55YW1hZ2F0YS5qcCIsImFidS55YW1hZ3VjaGkuanAiLCJoYWdpLnlhbWFndWNoaS5qcCIsImhpa2FyaS55''@;'; put 'put ''YW1hZ3VjaGkuanAiLCJob2Z1LnlhbWFndWNoaS5qcCIsIml3YWt1bmkueWFtYWd1Y2hpLmpwIiwia3VkYW1hdHN1LnlhbWFndWNoaS5qcCIsIm1pdG91LnlhbWFndWNoaS5qcCIsIm5hZ2F0by55YW1hZ3VjaGkuanAiLCJvc2hpbWEueWFtYWd1Y2hpLmpwIiwic2hpbW9ub3Nla2kueWFtYWd1''@;'; put 'put ''Y2hpLmpwIiwic2h1bmFuLnlhbWFndWNoaS5qcCIsInRhYnVzZS55YW1hZ3VjaGkuanAiLCJ0b2t1eWFtYS55YW1hZ3VjaGkuanAiLCJ0b3lvdGEueWFtYWd1Y2hpLmpwIiwidWJlLnlhbWFndWNoaS5qcCIsInl1dS55YW1hZ3VjaGkuanAiLCJjaHVvLnlhbWFuYXNoaS5qcCIsImRvc2hpLnlh''@;'; put 'put ''bWFuYXNoaS5qcCIsImZ1ZWZ1a2kueWFtYW5hc2hpLmpwIiwiZnVqaWthd2EueWFtYW5hc2hpLmpwIiwiZnVqaWthd2FndWNoaWtvLnlhbWFuYXNoaS5qcCIsImZ1aml5b3NoaWRhLnlhbWFuYXNoaS5qcCIsImhheWFrYXdhLnlhbWFuYXNoaS5qcCIsImhva3V0by55YW1hbmFzaGkuanAiLCJp''@;'; put 'put ''Y2hpa2F3YW1pc2F0by55YW1hbmFzaGkuanAiLCJrYWkueWFtYW5hc2hpLmpwIiwia29mdS55YW1hbmFzaGkuanAiLCJrb3NodS55YW1hbmFzaGkuanAiLCJrb3N1Z2UueWFtYW5hc2hpLmpwIiwibWluYW1pLWFscHMueWFtYW5hc2hpLmpwIiwibWlub2J1LnlhbWFuYXNoaS5qcCIsIm5ha2Ft''@;'; put 'put ''aWNoaS55YW1hbmFzaGkuanAiLCJuYW5idS55YW1hbmFzaGkuanAiLCJuYXJ1c2F3YS55YW1hbmFzaGkuanAiLCJuaXJhc2FraS55YW1hbmFzaGkuanAiLCJuaXNoaWthdHN1cmEueWFtYW5hc2hpLmpwIiwib3NoaW5vLnlhbWFuYXNoaS5qcCIsIm90c3VraS55YW1hbmFzaGkuanAiLCJzaG93''@;'; put 'put ''YS55YW1hbmFzaGkuanAiLCJ0YWJheWFtYS55YW1hbmFzaGkuanAiLCJ0c3VydS55YW1hbmFzaGkuanAiLCJ1ZW5vaGFyYS55YW1hbmFzaGkuanAiLCJ5YW1hbmFrYWtvLnlhbWFuYXNoaS5qcCIsInlhbWFuYXNoaS55YW1hbmFzaGkuanAiLCJrZSIsImFjLmtlIiwiY28ua2UiLCJnby5rZSIs''@;'; put 'put ''ImluZm8ua2UiLCJtZS5rZSIsIm1vYmkua2UiLCJuZS5rZSIsIm9yLmtlIiwic2Mua2UiLCJrZyIsImNvbS5rZyIsImVkdS5rZyIsImdvdi5rZyIsIm1pbC5rZyIsIm5ldC5rZyIsIm9yZy5rZyIsIioua2giLCJraSIsImJpei5raSIsImNvbS5raSIsImVkdS5raSIsImdvdi5raSIsImluZm8u''@;'; put 'put ''a2kiLCJuZXQua2kiLCJvcmcua2kiLCJrbSIsImFzcy5rbSIsImNvbS5rbSIsImVkdS5rbSIsImdvdi5rbSIsIm1pbC5rbSIsIm5vbS5rbSIsIm9yZy5rbSIsInByZC5rbSIsInRtLmttIiwiYXNzby5rbSIsImNvb3Aua20iLCJnb3V2LmttIiwibWVkZWNpbi5rbSIsIm5vdGFpcmVzLmttIiwi''@;'; put 'put ''cGhhcm1hY2llbnMua20iLCJwcmVzc2Uua20iLCJ2ZXRlcmluYWlyZS5rbSIsImtuIiwiZWR1LmtuIiwiZ292LmtuIiwibmV0LmtuIiwib3JnLmtuIiwia3AiLCJjb20ua3AiLCJlZHUua3AiLCJnb3Yua3AiLCJvcmcua3AiLCJyZXAua3AiLCJ0cmEua3AiLCJrciIsImFjLmtyIiwiY28ua3Ii''@;'; put 'put ''LCJlcy5rciIsImdvLmtyIiwiaHMua3IiLCJrZy5rciIsIm1pbC5rciIsIm1zLmtyIiwibmUua3IiLCJvci5rciIsInBlLmtyIiwicmUua3IiLCJzYy5rciIsImJ1c2FuLmtyIiwiY2h1bmdidWsua3IiLCJjaHVuZ25hbS5rciIsImRhZWd1LmtyIiwiZGFlamVvbi5rciIsImdhbmd3b24ua3Ii''@;'; put 'put ''LCJnd2FuZ2p1LmtyIiwiZ3llb25nYnVrLmtyIiwiZ3llb25nZ2kua3IiLCJneWVvbmduYW0ua3IiLCJpbmNoZW9uLmtyIiwiamVqdS5rciIsImplb25idWsua3IiLCJqZW9ubmFtLmtyIiwic2VvdWwua3IiLCJ1bHNhbi5rciIsImt3IiwiY29tLmt3IiwiZWR1Lmt3IiwiZW1iLmt3IiwiZ292''@;'; put 'put ''Lmt3IiwiaW5kLmt3IiwibmV0Lmt3Iiwib3JnLmt3Iiwia3kiLCJjb20ua3kiLCJlZHUua3kiLCJuZXQua3kiLCJvcmcua3kiLCJreiIsImNvbS5reiIsImVkdS5reiIsImdvdi5reiIsIm1pbC5reiIsIm5ldC5reiIsIm9yZy5reiIsImxhIiwiY29tLmxhIiwiZWR1LmxhIiwiZ292LmxhIiwi''@;'; put 'put ''aW5mby5sYSIsImludC5sYSIsIm5ldC5sYSIsIm9yZy5sYSIsInBlci5sYSIsImxiIiwiY29tLmxiIiwiZWR1LmxiIiwiZ292LmxiIiwibmV0LmxiIiwib3JnLmxiIiwibGMiLCJjby5sYyIsImNvbS5sYyIsImVkdS5sYyIsImdvdi5sYyIsIm5ldC5sYyIsIm9yZy5sYyIsImxpIiwibGsiLCJh''@;'; put 'put ''Yy5sayIsImFzc24ubGsiLCJjb20ubGsiLCJlZHUubGsiLCJnb3YubGsiLCJncnAubGsiLCJob3RlbC5sayIsImludC5sayIsImx0ZC5sayIsIm5ldC5sayIsIm5nby5sayIsIm9yZy5sayIsInNjaC5sayIsInNvYy5sayIsIndlYi5sayIsImxyIiwiY29tLmxyIiwiZWR1LmxyIiwiZ292Lmxy''@;'; put 'put ''IiwibmV0LmxyIiwib3JnLmxyIiwibHMiLCJhYy5scyIsImJpei5scyIsImNvLmxzIiwiZWR1LmxzIiwiZ292LmxzIiwiaW5mby5scyIsIm5ldC5scyIsIm9yZy5scyIsInNjLmxzIiwibHQiLCJnb3YubHQiLCJsdSIsImx2IiwiYXNuLmx2IiwiY29tLmx2IiwiY29uZi5sdiIsImVkdS5sdiIs''@;'; put 'put ''Imdvdi5sdiIsImlkLmx2IiwibWlsLmx2IiwibmV0Lmx2Iiwib3JnLmx2IiwibHkiLCJjb20ubHkiLCJlZHUubHkiLCJnb3YubHkiLCJpZC5seSIsIm1lZC5seSIsIm5ldC5seSIsIm9yZy5seSIsInBsYy5seSIsInNjaC5seSIsIm1hIiwiYWMubWEiLCJjby5tYSIsImdvdi5tYSIsIm5ldC5t''@;'; put 'put ''YSIsIm9yZy5tYSIsInByZXNzLm1hIiwibWMiLCJhc3NvLm1jIiwidG0ubWMiLCJtZCIsIm1lIiwiYWMubWUiLCJjby5tZSIsImVkdS5tZSIsImdvdi5tZSIsIml0cy5tZSIsIm5ldC5tZSIsIm9yZy5tZSIsInByaXYubWUiLCJtZyIsImNvLm1nIiwiY29tLm1nIiwiZWR1Lm1nIiwiZ292Lm1n''@;'; put 'put ''IiwibWlsLm1nIiwibm9tLm1nIiwib3JnLm1nIiwicHJkLm1nIiwibWgiLCJtaWwiLCJtayIsImNvbS5tayIsImVkdS5tayIsImdvdi5tayIsImluZi5tayIsIm5hbWUubWsiLCJuZXQubWsiLCJvcmcubWsiLCJtbCIsImNvbS5tbCIsImVkdS5tbCIsImdvdXYubWwiLCJnb3YubWwiLCJuZXQu''@;'; put 'put ''bWwiLCJvcmcubWwiLCJwcmVzc2UubWwiLCIqLm1tIiwibW4iLCJlZHUubW4iLCJnb3YubW4iLCJvcmcubW4iLCJtbyIsImNvbS5tbyIsImVkdS5tbyIsImdvdi5tbyIsIm5ldC5tbyIsIm9yZy5tbyIsIm1vYmkiLCJtcCIsIm1xIiwibXIiLCJnb3YubXIiLCJtcyIsImNvbS5tcyIsImVkdS5t''@;'; put 'put ''cyIsImdvdi5tcyIsIm5ldC5tcyIsIm9yZy5tcyIsIm10IiwiY29tLm10IiwiZWR1Lm10IiwibmV0Lm10Iiwib3JnLm10IiwibXUiLCJhYy5tdSIsImNvLm11IiwiY29tLm11IiwiZ292Lm11IiwibmV0Lm11Iiwib3IubXUiLCJvcmcubXUiLCJtdXNldW0iLCJtdiIsImFlcm8ubXYiLCJiaXou''@;'; put 'put ''bXYiLCJjb20ubXYiLCJjb29wLm12IiwiZWR1Lm12IiwiZ292Lm12IiwiaW5mby5tdiIsImludC5tdiIsIm1pbC5tdiIsIm11c2V1bS5tdiIsIm5hbWUubXYiLCJuZXQubXYiLCJvcmcubXYiLCJwcm8ubXYiLCJtdyIsImFjLm13IiwiYml6Lm13IiwiY28ubXciLCJjb20ubXciLCJjb29wLm13''@;'; put 'put ''IiwiZWR1Lm13IiwiZ292Lm13IiwiaW50Lm13IiwibmV0Lm13Iiwib3JnLm13IiwibXgiLCJjb20ubXgiLCJlZHUubXgiLCJnb2IubXgiLCJuZXQubXgiLCJvcmcubXgiLCJteSIsImJpei5teSIsImNvbS5teSIsImVkdS5teSIsImdvdi5teSIsIm1pbC5teSIsIm5hbWUubXkiLCJuZXQubXki''@;'; put 'put ''LCJvcmcubXkiLCJteiIsImFjLm16IiwiYWR2Lm16IiwiY28ubXoiLCJlZHUubXoiLCJnb3YubXoiLCJtaWwubXoiLCJuZXQubXoiLCJvcmcubXoiLCJuYSIsImFsdC5uYSIsImNvLm5hIiwiY29tLm5hIiwiZ292Lm5hIiwibmV0Lm5hIiwib3JnLm5hIiwibmFtZSIsIm5jIiwiYXNzby5uYyIs''@;'; put 'put ''Im5vbS5uYyIsIm5lIiwibmV0IiwibmYiLCJhcnRzLm5mIiwiY29tLm5mIiwiZmlybS5uZiIsImluZm8ubmYiLCJuZXQubmYiLCJvdGhlci5uZiIsInBlci5uZiIsInJlYy5uZiIsInN0b3JlLm5mIiwid2ViLm5mIiwibmciLCJjb20ubmciLCJlZHUubmciLCJnb3YubmciLCJpLm5nIiwibWls''@;'; put 'put ''Lm5nIiwibW9iaS5uZyIsIm5hbWUubmciLCJuZXQubmciLCJvcmcubmciLCJzY2gubmciLCJuaSIsImFjLm5pIiwiYml6Lm5pIiwiY28ubmkiLCJjb20ubmkiLCJlZHUubmkiLCJnb2IubmkiLCJpbi5uaSIsImluZm8ubmkiLCJpbnQubmkiLCJtaWwubmkiLCJuZXQubmkiLCJub20ubmkiLCJv''@;'; put 'put ''cmcubmkiLCJ3ZWIubmkiLCJubCIsIm5vIiwiZmhzLm5vIiwiZm9sa2ViaWJsLm5vIiwiZnlsa2VzYmlibC5ubyIsImlkcmV0dC5ubyIsIm11c2V1bS5ubyIsInByaXYubm8iLCJ2Z3Mubm8iLCJkZXAubm8iLCJoZXJhZC5ubyIsImtvbW11bmUubm8iLCJtaWwubm8iLCJzdGF0Lm5vIiwiYWEu''@;'; put 'put ''bm8iLCJhaC5ubyIsImJ1Lm5vIiwiZm0ubm8iLCJobC5ubyIsImhtLm5vIiwiamFuLW1heWVuLm5vIiwibXIubm8iLCJubC5ubyIsIm50Lm5vIiwib2Yubm8iLCJvbC5ubyIsIm9zbG8ubm8iLCJybC5ubyIsInNmLm5vIiwic3Qubm8iLCJzdmFsYmFyZC5ubyIsInRtLm5vIiwidHIubm8iLCJ2''@;'; put 'put ''YS5ubyIsInZmLm5vIiwiZ3MuYWEubm8iLCJncy5haC5ubyIsImdzLmJ1Lm5vIiwiZ3MuZm0ubm8iLCJncy5obC5ubyIsImdzLmhtLm5vIiwiZ3MuamFuLW1heWVuLm5vIiwiZ3MubXIubm8iLCJncy5ubC5ubyIsImdzLm50Lm5vIiwiZ3Mub2Yubm8iLCJncy5vbC5ubyIsImdzLm9zbG8ubm8i''@;'; put 'put ''LCJncy5ybC5ubyIsImdzLnNmLm5vIiwiZ3Muc3Qubm8iLCJncy5zdmFsYmFyZC5ubyIsImdzLnRtLm5vIiwiZ3MudHIubm8iLCJncy52YS5ubyIsImdzLnZmLm5vIiwiYWtyZWhhbW4ubm8iLCJceGU1a3JlaGFtbi5ubyIsImFsZ2FyZC5ubyIsIlx4ZTVsZ1x4ZTVyZC5ubyIsImFybmEubm8i''@;'; put 'put ''LCJicm9ubm95c3VuZC5ubyIsImJyXHhmOG5uXHhmOHlzdW5kLm5vIiwiYnJ1bXVuZGRhbC5ubyIsImJyeW5lLm5vIiwiZHJvYmFrLm5vIiwiZHJceGY4YmFrLm5vIiwiZWdlcnN1bmQubm8iLCJmZXRzdW5kLm5vIiwiZmxvcm8ubm8iLCJmbG9yXHhmOC5ubyIsImZyZWRyaWtzdGFkLm5vIiwi''@;'; put 'put ''aG9ra3N1bmQubm8iLCJob25lZm9zcy5ubyIsImhceGY4bmVmb3NzLm5vIiwiamVzc2hlaW0ubm8iLCJqb3JwZWxhbmQubm8iLCJqXHhmOHJwZWxhbmQubm8iLCJraXJrZW5lcy5ubyIsImtvcGVydmlrLm5vIiwia3Jva3N0YWRlbHZhLm5vIiwibGFuZ2V2YWcubm8iLCJsYW5nZXZceGU1Zy5u''@;'; put 'put ''byIsImxlaXJ2aWsubm8iLCJtam9uZGFsZW4ubm8iLCJtalx4ZjhuZGFsZW4ubm8iLCJtby1pLXJhbmEubm8iLCJtb3Nqb2VuLm5vIiwibW9zalx4Zjhlbi5ubyIsIm5lc29kZHRhbmdlbi5ubyIsIm9ya2FuZ2VyLm5vIiwib3NveXJvLm5vIiwib3NceGY4eXJvLm5vIiwicmFob2x0Lm5vIiwi''@;'; put 'put ''clx4ZTVob2x0Lm5vIiwic2FuZG5lc3Nqb2VuLm5vIiwic2FuZG5lc3NqXHhmOGVuLm5vIiwic2tlZHNtb2tvcnNldC5ubyIsInNsYXR0dW0ubm8iLCJzcGplbGthdmlrLm5vIiwic3RhdGhlbGxlLm5vIiwic3RhdmVybi5ubyIsInN0am9yZGFsc2hhbHNlbi5ubyIsInN0alx4ZjhyZGFsc2hh''@;'; put 'put ''bHNlbi5ubyIsInRhbmFuZ2VyLm5vIiwidHJhbmJ5Lm5vIiwidm9zc2V2YW5nZW4ubm8iLCJhYXJib3J0ZS5ubyIsImFlanJpZS5ubyIsImFmam9yZC5ubyIsIlx4ZTVmam9yZC5ubyIsImFnZGVuZXMubm8iLCJuZXMuYWtlcnNodXMubm8iLCJha25vbHVva3RhLm5vIiwiXHhlMWtcdTAxNGJv''@;'; put 'put ''bHVva3RhLm5vIiwiYWwubm8iLCJceGU1bC5ubyIsImFsYWhlYWRqdS5ubyIsIlx4ZTFsYWhlYWRqdS5ubyIsImFsZXN1bmQubm8iLCJceGU1bGVzdW5kLm5vIiwiYWxzdGFoYXVnLm5vIiwiYWx0YS5ubyIsIlx4ZTFsdFx4ZTEubm8iLCJhbHZkYWwubm8iLCJhbWxpLm5vIiwiXHhlNW1saS5u''@;'; put 'put ''byIsImFtb3Qubm8iLCJceGU1bW90Lm5vIiwiYW5kYXN1b2xvLm5vIiwiYW5kZWJ1Lm5vIiwiYW5kb3kubm8iLCJhbmRceGY4eS5ubyIsImFyZGFsLm5vIiwiXHhlNXJkYWwubm8iLCJhcmVtYXJrLm5vIiwiYXJlbmRhbC5ubyIsIlx4ZTVzLm5vIiwiYXNlcmFsLm5vIiwiXHhlNXNlcmFsLm5v''@;'; put 'put ''IiwiYXNrZXIubm8iLCJhc2tpbS5ubyIsImFza295Lm5vIiwiYXNrXHhmOHkubm8iLCJhc2t2b2xsLm5vIiwiYXNuZXMubm8iLCJceGU1c25lcy5ubyIsImF1ZG5lZGFsbi5ubyIsImF1a3JhLm5vIiwiYXVyZS5ubyIsImF1cmxhbmQubm8iLCJhdXJza29nLWhvbGFuZC5ubyIsImF1cnNrb2ct''@;'; put 'put ''aFx4ZjhsYW5kLm5vIiwiYXVzdGV2b2xsLm5vIiwiYXVzdHJoZWltLm5vIiwiYXZlcm95Lm5vIiwiYXZlclx4Zjh5Lm5vIiwiYmFkYWRkamEubm8iLCJiXHhlNWRceGU1ZGRqXHhlNS5ubyIsImJceGU2cnVtLm5vIiwiYmFoY2F2dW90bmEubm8iLCJiXHhlMWhjYXZ1b3RuYS5ubyIsImJhaGNj''@;'; put 'put ''YXZ1b3RuYS5ubyIsImJceGUxaGNjYXZ1b3RuYS5ubyIsImJhaWRhci5ubyIsImJceGUxaWRceGUxci5ubyIsImJhamRkYXIubm8iLCJiXHhlMWpkZGFyLm5vIiwiYmFsYXQubm8iLCJiXHhlMWxceGUxdC5ubyIsImJhbGVzdHJhbmQubm8iLCJiYWxsYW5nZW4ubm8iLCJiYWxzZmpvcmQubm8i''@;'; put 'put ''LCJiYW1ibGUubm8iLCJiYXJkdS5ubyIsImJhcnVtLm5vIiwiYmF0c2Zqb3JkLm5vIiwiYlx4ZTV0c2Zqb3JkLm5vIiwiYmVhcmFsdmFoa2kubm8iLCJiZWFyYWx2XHhlMWhraS5ubyIsImJlYXJkdS5ubyIsImJlaWFybi5ubyIsImJlcmcubm8iLCJiZXJnZW4ubm8iLCJiZXJsZXZhZy5ubyIs''@;'; put 'put ''ImJlcmxldlx4ZTVnLm5vIiwiYmlldmF0Lm5vIiwiYmlldlx4ZTF0Lm5vIiwiYmluZGFsLm5vIiwiYmlya2VuZXMubm8iLCJiamFya295Lm5vIiwiYmphcmtceGY4eS5ubyIsImJqZXJrcmVpbS5ubyIsImJqdWduLm5vIiwiYm9kby5ubyIsImJvZFx4Zjgubm8iLCJib2tuLm5vIiwiYm9tbG8u''@;'; put 'put ''bm8iLCJiXHhmOG1sby5ubyIsImJyZW1hbmdlci5ubyIsImJyb25ub3kubm8iLCJiclx4Zjhublx4Zjh5Lm5vIiwiYnVkZWpqdS5ubyIsIm5lcy5idXNrZXJ1ZC5ubyIsImJ5Z2xhbmQubm8iLCJieWtsZS5ubyIsImNhaGNlc3VvbG8ubm8iLCJcdTAxMGRceGUxaGNlc3VvbG8ubm8iLCJkYXZ2''@;'; put 'put ''ZW5qYXJnYS5ubyIsImRhdnZlbmpceGUxcmdhLm5vIiwiZGF2dmVzaWlkYS5ubyIsImRlYXRudS5ubyIsImRpZWxkZGFudW9ycmkubm8iLCJkaXZ0YXN2dW9kbmEubm8iLCJkaXZ0dGFzdnVvdG5hLm5vIiwiZG9ubmEubm8iLCJkXHhmOG5uYS5ubyIsImRvdnJlLm5vIiwiZHJhbW1lbi5ubyIs''@;'; put 'put ''ImRyYW5nZWRhbC5ubyIsImR5cm95Lm5vIiwiZHlyXHhmOHkubm8iLCJlaWQubm8iLCJlaWRmam9yZC5ubyIsImVpZHNiZXJnLm5vIiwiZWlkc2tvZy5ubyIsImVpZHN2b2xsLm5vIiwiZWlnZXJzdW5kLm5vIiwiZWx2ZXJ1bS5ubyIsImVuZWJha2subm8iLCJlbmdlcmRhbC5ubyIsImV0bmUu''@;'; put 'put ''bm8iLCJldG5lZGFsLm5vIiwiZXZlbmFzc2kubm8iLCJldmVuXHhlMVx1MDE2MVx1MDE2MWkubm8iLCJldmVuZXMubm8iLCJldmplLW9nLWhvcm5uZXMubm8iLCJmYXJzdW5kLm5vIiwiZmF1c2tlLm5vIiwiZmVkamUubm8iLCJmZXQubm8iLCJmaW5ub3kubm8iLCJmaW5uXHhmOHkubm8iLCJm''@;'; put 'put ''aXRqYXIubm8iLCJmamFsZXIubm8iLCJmamVsbC5ubyIsImZsYS5ubyIsImZsXHhlNS5ubyIsImZsYWtzdGFkLm5vIiwiZmxhdGFuZ2VyLm5vIiwiZmxla2tlZmpvcmQubm8iLCJmbGVzYmVyZy5ubyIsImZsb3JhLm5vIiwiZm9sbGRhbC5ubyIsImZvcmRlLm5vIiwiZlx4ZjhyZGUubm8iLCJm''@;'; put 'put ''b3JzYW5kLm5vIiwiZm9zbmVzLm5vIiwiZnJceGU2bmEubm8iLCJmcmFuYS5ubyIsImZyZWkubm8iLCJmcm9nbi5ubyIsImZyb2xhbmQubm8iLCJmcm9zdGEubm8iLCJmcm95YS5ubyIsImZyXHhmOHlhLm5vIiwiZnVvaXNrdS5ubyIsImZ1b3Nza28ubm8iLCJmdXNhLm5vIiwiZnlyZXNkYWwu''@;'; put 'put ''bm8iLCJnYWl2dW90bmEubm8iLCJnXHhlMWl2dW90bmEubm8iLCJnYWxzYS5ubyIsImdceGUxbHNceGUxLm5vIiwiZ2FtdmlrLm5vIiwiZ2FuZ2F2aWlrYS5ubyIsImdceGUxXHUwMTRiZ2F2aWlrYS5ubyIsImdhdWxhci5ubyIsImdhdXNkYWwubm8iLCJnaWVodGF2dW9hdG5hLm5vIiwiZ2ls''@;'; put 'put ''ZGVza2FsLm5vIiwiZ2lsZGVza1x4ZTVsLm5vIiwiZ2lza2Uubm8iLCJnamVtbmVzLm5vIiwiZ2plcmRydW0ubm8iLCJnamVyc3RhZC5ubyIsImdqZXNkYWwubm8iLCJnam92aWsubm8iLCJnalx4Zjh2aWsubm8iLCJnbG9wcGVuLm5vIiwiZ29sLm5vIiwiZ3Jhbi5ubyIsImdyYW5lLm5vIiwi''@;'; put 'put ''Z3JhbnZpbi5ubyIsImdyYXRhbmdlbi5ubyIsImdyaW1zdGFkLm5vIiwiZ3Jvbmcubm8iLCJncnVlLm5vIiwiZ3VsZW4ubm8iLCJndW92ZGFnZWFpZG51Lm5vIiwiaGEubm8iLCJoXHhlNS5ubyIsImhhYm1lci5ubyIsImhceGUxYm1lci5ubyIsImhhZHNlbC5ubyIsImhceGU2Z2Vib3N0YWQu''@;'; put 'put ''bm8iLCJoYWdlYm9zdGFkLm5vIiwiaGFsZGVuLm5vIiwiaGFsc2Eubm8iLCJoYW1hci5ubyIsImhhbWFyb3kubm8iLCJoYW1tYXJmZWFzdGEubm8iLCJoXHhlMW1tXHhlMXJmZWFzdGEubm8iLCJoYW1tZXJmZXN0Lm5vIiwiaGFwbWlyLm5vIiwiaFx4ZTFwbWlyLm5vIiwiaGFyYW0ubm8iLCJo''@;'; put 'put ''YXJlaWQubm8iLCJoYXJzdGFkLm5vIiwiaGFzdmlrLm5vIiwiaGF0dGZqZWxsZGFsLm5vIiwiaGF1Z2VzdW5kLm5vIiwib3MuaGVkbWFyay5ubyIsInZhbGVyLmhlZG1hcmsubm8iLCJ2XHhlNWxlci5oZWRtYXJrLm5vIiwiaGVtbmUubm8iLCJoZW1uZXMubm8iLCJoZW1zZWRhbC5ubyIsImhp''@;'; put 'put ''dHJhLm5vIiwiaGphcnRkYWwubm8iLCJoamVsbWVsYW5kLm5vIiwiaG9ib2wubm8iLCJob2JceGY4bC5ubyIsImhvZi5ubyIsImhvbC5ubyIsImhvbGUubm8iLCJob2xtZXN0cmFuZC5ubyIsImhvbHRhbGVuLm5vIiwiaG9sdFx4ZTVsZW4ubm8iLCJvcy5ob3JkYWxhbmQubm8iLCJob3JuaW5k''@;'; put 'put ''YWwubm8iLCJob3J0ZW4ubm8iLCJob3lhbmdlci5ubyIsImhceGY4eWFuZ2VyLm5vIiwiaG95bGFuZGV0Lm5vIiwiaFx4Zjh5bGFuZGV0Lm5vIiwiaHVyZGFsLm5vIiwiaHVydW0ubm8iLCJodmFsZXIubm8iLCJoeWxsZXN0YWQubm8iLCJpYmVzdGFkLm5vIiwiaW5kZXJveS5ubyIsImluZGVy''@;'; put 'put ''XHhmOHkubm8iLCJpdmVsYW5kLm5vIiwiaXZndS5ubyIsImpldm5ha2VyLm5vIiwiam9sc3Rlci5ubyIsImpceGY4bHN0ZXIubm8iLCJqb25kYWwubm8iLCJrYWZqb3JkLm5vIiwia1x4ZTVmam9yZC5ubyIsImthcmFzam9oa2Eubm8iLCJrXHhlMXJceGUxXHUwMTYxam9oa2Eubm8iLCJrYXJh''@;'; put 'put ''c2pvay5ubyIsImthcmxzb3kubm8iLCJrYXJtb3kubm8iLCJrYXJtXHhmOHkubm8iLCJrYXV0b2tlaW5vLm5vIiwia2xhYnUubm8iLCJrbFx4ZTZidS5ubyIsImtsZXBwLm5vIiwia29uZ3NiZXJnLm5vIiwia29uZ3N2aW5nZXIubm8iLCJrcmFhbmdoa2Uubm8iLCJrclx4ZTVhbmdoa2Uubm8i''@;'; put 'put ''LCJrcmFnZXJvLm5vIiwia3JhZ2VyXHhmOC5ubyIsImtyaXN0aWFuc2FuZC5ubyIsImtyaXN0aWFuc3VuZC5ubyIsImtyb2RzaGVyYWQubm8iLCJrclx4Zjhkc2hlcmFkLm5vIiwia3ZceGU2ZmpvcmQubm8iLCJrdlx4ZTZuYW5nZW4ubm8iLCJrdmFmam9yZC5ubyIsImt2YWxzdW5kLm5vIiwi''@;'; put 'put ''a3ZhbS5ubyIsImt2YW5hbmdlbi5ubyIsImt2aW5lc2RhbC5ubyIsImt2aW5uaGVyYWQubm8iLCJrdml0ZXNlaWQubm8iLCJrdml0c295Lm5vIiwia3ZpdHNceGY4eS5ubyIsImxhYWtlc3Z1ZW1pZS5ubyIsImxceGU2cmRhbC5ubyIsImxhaHBwaS5ubyIsImxceGUxaHBwaS5ubyIsImxhcmRh''@;'; put 'put ''bC5ubyIsImxhcnZpay5ubyIsImxhdmFnaXMubm8iLCJsYXZhbmdlbi5ubyIsImxlYW5nYXZpaWthLm5vIiwibGVhXHUwMTRiZ2F2aWlrYS5ubyIsImxlYmVzYnkubm8iLCJsZWlrYW5nZXIubm8iLCJsZWlyZmpvcmQubm8iLCJsZWthLm5vIiwibGVrc3Zpay5ubyIsImxlbnZpay5ubyIsImxl''@;'; put 'put ''cmRhbC5ubyIsImxlc2phLm5vIiwibGV2YW5nZXIubm8iLCJsaWVyLm5vIiwibGllcm5lLm5vIiwibGlsbGVoYW1tZXIubm8iLCJsaWxsZXNhbmQubm8iLCJsaW5kYXMubm8iLCJsaW5kXHhlNXMubm8iLCJsaW5kZXNuZXMubm8iLCJsb2FiYXQubm8iLCJsb2FiXHhlMXQubm8iLCJsb2Rpbmdl''@;'; put 'put ''bi5ubyIsImxceGY4ZGluZ2VuLm5vIiwibG9tLm5vIiwibG9wcGEubm8iLCJsb3JlbnNrb2cubm8iLCJsXHhmOHJlbnNrb2cubm8iLCJsb3Rlbi5ubyIsImxceGY4dGVuLm5vIiwibHVuZC5ubyIsImx1bm5lci5ubyIsImx1cm95Lm5vIiwibHVyXHhmOHkubm8iLCJsdXN0ZXIubm8iLCJseW5n''@;'; put 'put ''ZGFsLm5vIiwibHluZ2VuLm5vIiwibWFsYXR2dW9wbWkubm8iLCJtXHhlMWxhdHZ1b3BtaS5ubyIsIm1hbHNlbHYubm8iLCJtXHhlNWxzZWx2Lm5vIiwibWFsdmlrLm5vIiwibWFuZGFsLm5vIiwibWFya2VyLm5vIiwibWFybmFyZGFsLm5vIiwibWFzZmpvcmRlbi5ubyIsIm1hc295Lm5vIiwi''@;'; put 'put ''bVx4ZTVzXHhmOHkubm8iLCJtYXR0YS12YXJqamF0Lm5vIiwibVx4ZTF0dGEtdlx4ZTFyamphdC5ubyIsIm1lbGFuZC5ubyIsIm1lbGRhbC5ubyIsIm1lbGh1cy5ubyIsIm1lbG95Lm5vIiwibWVsXHhmOHkubm8iLCJtZXJha2VyLm5vIiwibWVyXHhlNWtlci5ubyIsIm1pZHN1bmQubm8iLCJt''@;'; put 'put ''aWR0cmUtZ2F1bGRhbC5ubyIsIm1vYXJla2Uubm8iLCJtb1x4ZTVyZWtlLm5vIiwibW9kYWxlbi5ubyIsIm1vZHVtLm5vIiwibW9sZGUubm8iLCJoZXJveS5tb3JlLW9nLXJvbXNkYWwubm8iLCJzYW5kZS5tb3JlLW9nLXJvbXNkYWwubm8iLCJoZXJceGY4eS5tXHhmOHJlLW9nLXJvbXNkYWwu''@;'; put 'put ''bm8iLCJzYW5kZS5tXHhmOHJlLW9nLXJvbXNkYWwubm8iLCJtb3NrZW5lcy5ubyIsIm1vc3Mubm8iLCJtb3N2aWsubm8iLCJtdW9zYXQubm8iLCJtdW9zXHhlMXQubm8iLCJuYWFtZXNqZXZ1ZW1pZS5ubyIsIm5ceGU1XHhlNW1lc2pldnVlbWllLm5vIiwiblx4ZTZyXHhmOHkubm8iLCJuYW1k''@;'; put 'put ''YWxzZWlkLm5vIiwibmFtc29zLm5vIiwibmFtc3Nrb2dhbi5ubyIsIm5hbm5lc3RhZC5ubyIsIm5hcm95Lm5vIiwibmFydmlpa2Eubm8iLCJuYXJ2aWsubm8iLCJuYXVzdGRhbC5ubyIsIm5hdnVvdG5hLm5vIiwiblx4ZTF2dW90bmEubm8iLCJuZWRyZS1laWtlci5ubyIsIm5lc25hLm5vIiwi''@;'; put 'put ''bmVzb2RkZW4ubm8iLCJuZXNzZWJ5Lm5vIiwibmVzc2V0Lm5vIiwibmlzc2VkYWwubm8iLCJuaXR0ZWRhbC5ubyIsIm5vcmQtYXVyZGFsLm5vIiwibm9yZC1mcm9uLm5vIiwibm9yZC1vZGFsLm5vIiwibm9yZGRhbC5ubyIsIm5vcmRrYXBwLm5vIiwiYm8ubm9yZGxhbmQubm8iLCJiXHhmOC5u''@;'; put 'put ''b3JkbGFuZC5ubyIsImhlcm95Lm5vcmRsYW5kLm5vIiwiaGVyXHhmOHkubm9yZGxhbmQubm8iLCJub3JkcmUtbGFuZC5ubyIsIm5vcmRyZWlzYS5ubyIsIm5vcmUtb2ctdXZkYWwubm8iLCJub3RvZGRlbi5ubyIsIm5vdHRlcm95Lm5vIiwiblx4Zjh0dGVyXHhmOHkubm8iLCJvZGRhLm5vIiwi''@;'; put 'put ''b2tzbmVzLm5vIiwiXHhmOGtzbmVzLm5vIiwib21hc3Z1b3RuYS5ubyIsIm9wcGRhbC5ubyIsIm9wcGVnYXJkLm5vIiwib3BwZWdceGU1cmQubm8iLCJvcmtkYWwubm8iLCJvcmxhbmQubm8iLCJceGY4cmxhbmQubm8iLCJvcnNrb2cubm8iLCJceGY4cnNrb2cubm8iLCJvcnN0YS5ubyIsIlx4''@;'; put 'put ''Zjhyc3RhLm5vIiwib3Nlbi5ubyIsIm9zdGVyb3kubm8iLCJvc3Rlclx4Zjh5Lm5vIiwidmFsZXIub3N0Zm9sZC5ubyIsInZceGU1bGVyLlx4ZjhzdGZvbGQubm8iLCJvc3RyZS10b3Rlbi5ubyIsIlx4ZjhzdHJlLXRvdGVuLm5vIiwib3ZlcmhhbGxhLm5vIiwib3ZyZS1laWtlci5ubyIsIlx4''@;'; put 'put ''Zjh2cmUtZWlrZXIubm8iLCJveWVyLm5vIiwiXHhmOHllci5ubyIsIm95Z2FyZGVuLm5vIiwiXHhmOHlnYXJkZW4ubm8iLCJveXN0cmUtc2xpZHJlLm5vIiwiXHhmOHlzdHJlLXNsaWRyZS5ubyIsInBvcnNhbmdlci5ubyIsInBvcnNhbmd1Lm5vIiwicG9yc1x4ZTFcdTAxNGJndS5ubyIsInBv''@;'; put 'put ''cnNncnVubi5ubyIsInJhZGUubm8iLCJyXHhlNWRlLm5vIiwicmFkb3kubm8iLCJyYWRceGY4eS5ubyIsInJceGU2bGluZ2VuLm5vIiwicmFoa2tlcmF2anUubm8iLCJyXHhlMWhra2VyXHhlMXZqdS5ubyIsInJhaXNhLm5vIiwiclx4ZTFpc2Eubm8iLCJyYWtrZXN0YWQubm8iLCJyYWxpbmdl''@;'; put 'put ''bi5ubyIsInJhbmEubm8iLCJyYW5kYWJlcmcubm8iLCJyYXVtYS5ubyIsInJlbmRhbGVuLm5vIiwicmVubmVidS5ubyIsInJlbm5lc295Lm5vIiwicmVubmVzXHhmOHkubm8iLCJyaW5kYWwubm8iLCJyaW5nZWJ1Lm5vIiwicmluZ2VyaWtlLm5vIiwicmluZ3Nha2VyLm5vIiwicmlzb3Iubm8i''@;'; put 'put ''LCJyaXNceGY4ci5ubyIsInJpc3NhLm5vIiwicm9hbi5ubyIsInJvZG95Lm5vIiwiclx4ZjhkXHhmOHkubm8iLCJyb2xsYWcubm8iLCJyb21zYS5ubyIsInJvbXNrb2cubm8iLCJyXHhmOG1za29nLm5vIiwicm9yb3Mubm8iLCJyXHhmOHJvcy5ubyIsInJvc3Qubm8iLCJyXHhmOHN0Lm5vIiwi''@;'; put 'put ''cm95a2VuLm5vIiwiclx4Zjh5a2VuLm5vIiwicm95cnZpay5ubyIsInJceGY4eXJ2aWsubm8iLCJydW92YXQubm8iLCJyeWdnZS5ubyIsInNhbGFuZ2VuLm5vIiwic2FsYXQubm8iLCJzXHhlMWxhdC5ubyIsInNceGUxbFx4ZTF0Lm5vIiwic2FsdGRhbC5ubyIsInNhbW5hbmdlci5ubyIsInNh''@;'; put 'put ''bmRlZmpvcmQubm8iLCJzYW5kbmVzLm5vIiwic2FuZG95Lm5vIiwic2FuZFx4Zjh5Lm5vIiwic2FycHNib3JnLm5vIiwic2F1ZGEubm8iLCJzYXVoZXJhZC5ubyIsInNlbC5ubyIsInNlbGJ1Lm5vIiwic2VsamUubm8iLCJzZWxqb3JkLm5vIiwic2llbGxhay5ubyIsInNpZ2RhbC5ubyIsInNp''@;'; put 'put ''bGphbi5ubyIsInNpcmRhbC5ubyIsInNrYW5pdC5ubyIsInNrXHhlMW5pdC5ubyIsInNrYW5sYW5kLm5vIiwic2tceGU1bmxhbmQubm8iLCJza2F1bi5ubyIsInNrZWRzbW8ubm8iLCJza2kubm8iLCJza2llbi5ubyIsInNraWVydmEubm8iLCJza2llcnZceGUxLm5vIiwic2tpcHR2ZXQubm8i''@;'; put 'put ''LCJza2phay5ubyIsInNralx4ZTVrLm5vIiwic2tqZXJ2b3kubm8iLCJza2plcnZceGY4eS5ubyIsInNrb2RqZS5ubyIsInNtb2xhLm5vIiwic21ceGY4bGEubm8iLCJzbmFhc2Uubm8iLCJzblx4ZTVhc2Uubm8iLCJzbmFzYS5ubyIsInNuXHhlNXNhLm5vIiwic25pbGxmam9yZC5ubyIsInNu''@;'; put 'put ''b2FzYS5ubyIsInNvZ25kYWwubm8iLCJzb2duZS5ubyIsInNceGY4Z25lLm5vIiwic29rbmRhbC5ubyIsInNvbGEubm8iLCJzb2x1bmQubm8iLCJzb21uYS5ubyIsInNceGY4bW5hLm5vIiwic29uZHJlLWxhbmQubm8iLCJzXHhmOG5kcmUtbGFuZC5ubyIsInNvbmdkYWxlbi5ubyIsInNvci1h''@;'; put 'put ''dXJkYWwubm8iLCJzXHhmOHItYXVyZGFsLm5vIiwic29yLWZyb24ubm8iLCJzXHhmOHItZnJvbi5ubyIsInNvci1vZGFsLm5vIiwic1x4ZjhyLW9kYWwubm8iLCJzb3ItdmFyYW5nZXIubm8iLCJzXHhmOHItdmFyYW5nZXIubm8iLCJzb3Jmb2xkLm5vIiwic1x4ZjhyZm9sZC5ubyIsInNvcnJl''@;'; put 'put ''aXNhLm5vIiwic1x4ZjhycmVpc2Eubm8iLCJzb3J0bGFuZC5ubyIsInNvcnVtLm5vIiwic1x4ZjhydW0ubm8iLCJzcHlkZWJlcmcubm8iLCJzdGFuZ2Uubm8iLCJzdGF2YW5nZXIubm8iLCJzdGVpZ2VuLm5vIiwic3RlaW5ramVyLm5vIiwic3Rqb3JkYWwubm8iLCJzdGpceGY4cmRhbC5ubyIs''@;'; put 'put ''InN0b2trZS5ubyIsInN0b3ItZWx2ZGFsLm5vIiwic3RvcmQubm8iLCJzdG9yZGFsLm5vIiwic3RvcmZqb3JkLm5vIiwic3RyYW5kLm5vIiwic3RyYW5kYS5ubyIsInN0cnluLm5vIiwic3VsYS5ubyIsInN1bGRhbC5ubyIsInN1bmQubm8iLCJzdW5uZGFsLm5vIiwic3VybmFkYWwubm8iLCJz''@;'; put 'put ''dmVpby5ubyIsInN2ZWx2aWsubm8iLCJzeWtreWx2ZW4ubm8iLCJ0YW5hLm5vIiwiYm8udGVsZW1hcmsubm8iLCJiXHhmOC50ZWxlbWFyay5ubyIsInRpbWUubm8iLCJ0aW5ndm9sbC5ubyIsInRpbm4ubm8iLCJ0amVsZHN1bmQubm8iLCJ0am9tZS5ubyIsInRqXHhmOG1lLm5vIiwidG9ra2Uu''@;'; put 'put ''bm8iLCJ0b2xnYS5ubyIsInRvbnNiZXJnLm5vIiwidFx4Zjhuc2Jlcmcubm8iLCJ0b3Jza2VuLm5vIiwidHJceGU2bmEubm8iLCJ0cmFuYS5ubyIsInRyYW5veS5ubyIsInRyYW5ceGY4eS5ubyIsInRyb2FuZGluLm5vIiwidHJvZ3N0YWQubm8iLCJ0clx4Zjhnc3RhZC5ubyIsInRyb21zYS5u''@;'; put 'put ''byIsInRyb21zby5ubyIsInRyb21zXHhmOC5ubyIsInRyb25kaGVpbS5ubyIsInRyeXNpbC5ubyIsInR2ZWRlc3RyYW5kLm5vIiwidHlkYWwubm8iLCJ0eW5zZXQubm8iLCJ0eXNmam9yZC5ubyIsInR5c25lcy5ubyIsInR5c3ZceGU2ci5ubyIsInR5c3Zhci5ubyIsInVsbGVuc2FrZXIubm8i''@;'; put 'put ''LCJ1bGxlbnN2YW5nLm5vIiwidWx2aWsubm8iLCJ1bmphcmdhLm5vIiwidW5qXHhlMXJnYS5ubyIsInV0c2lyYS5ubyIsInZhYXBzdGUubm8iLCJ2YWRzby5ubyIsInZhZHNceGY4Lm5vIiwidlx4ZTZyXHhmOHkubm8iLCJ2YWdhLm5vIiwidlx4ZTVnXHhlNS5ubyIsInZhZ2FuLm5vIiwidlx4''@;'; put 'put ''ZTVnYW4ubm8iLCJ2YWdzb3kubm8iLCJ2XHhlNWdzXHhmOHkubm8iLCJ2YWtzZGFsLm5vIiwidmFsbGUubm8iLCJ2YW5nLm5vIiwidmFueWx2ZW4ubm8iLCJ2YXJkby5ubyIsInZhcmRceGY4Lm5vIiwidmFyZ2dhdC5ubyIsInZceGUxcmdnXHhlMXQubm8iLCJ2YXJveS5ubyIsInZlZnNuLm5v''@;'; put 'put ''IiwidmVnYS5ubyIsInZlZ2Fyc2hlaS5ubyIsInZlZ1x4ZTVyc2hlaS5ubyIsInZlbm5lc2xhLm5vIiwidmVyZGFsLm5vIiwidmVycmFuLm5vIiwidmVzdGJ5Lm5vIiwic2FuZGUudmVzdGZvbGQubm8iLCJ2ZXN0bmVzLm5vIiwidmVzdHJlLXNsaWRyZS5ubyIsInZlc3RyZS10b3Rlbi5ubyIs''@;'; put 'put ''InZlc3R2YWdveS5ubyIsInZlc3R2XHhlNWdceGY4eS5ubyIsInZldmVsc3RhZC5ubyIsInZpay5ubyIsInZpa25hLm5vIiwidmluZGFmam9yZC5ubyIsInZvYWdhdC5ubyIsInZvbGRhLm5vIiwidm9zcy5ubyIsIioubnAiLCJuciIsImJpei5uciIsImNvbS5uciIsImVkdS5uciIsImdvdi5u''@;'; put 'put ''ciIsImluZm8ubnIiLCJuZXQubnIiLCJvcmcubnIiLCJudSIsIm56IiwiYWMubnoiLCJjby5ueiIsImNyaS5ueiIsImdlZWsubnoiLCJnZW4ubnoiLCJnb3Z0Lm56IiwiaGVhbHRoLm56IiwiaXdpLm56Iiwia2l3aS5ueiIsIm1hb3JpLm56IiwibVx1MDEwMW9yaS5ueiIsIm1pbC5ueiIsIm5l''@;'; put 'put ''dC5ueiIsIm9yZy5ueiIsInBhcmxpYW1lbnQubnoiLCJzY2hvb2wubnoiLCJvbSIsImNvLm9tIiwiY29tLm9tIiwiZWR1Lm9tIiwiZ292Lm9tIiwibWVkLm9tIiwibXVzZXVtLm9tIiwibmV0Lm9tIiwib3JnLm9tIiwicHJvLm9tIiwib25pb24iLCJvcmciLCJwYSIsImFiby5wYSIsImFjLnBh''@;'; put 'put ''IiwiY29tLnBhIiwiZWR1LnBhIiwiZ29iLnBhIiwiaW5nLnBhIiwibWVkLnBhIiwibmV0LnBhIiwibm9tLnBhIiwib3JnLnBhIiwic2xkLnBhIiwicGUiLCJjb20ucGUiLCJlZHUucGUiLCJnb2IucGUiLCJtaWwucGUiLCJuZXQucGUiLCJub20ucGUiLCJvcmcucGUiLCJwZiIsImNvbS5wZiIs''@;'; put 'put ''ImVkdS5wZiIsIm9yZy5wZiIsIioucGciLCJwaCIsImNvbS5waCIsImVkdS5waCIsImdvdi5waCIsImkucGgiLCJtaWwucGgiLCJuZXQucGgiLCJuZ28ucGgiLCJvcmcucGgiLCJwayIsImFjLnBrIiwiYml6LnBrIiwiY29tLnBrIiwiZWR1LnBrIiwiZmFtLnBrIiwiZ2twLnBrIiwiZ29iLnBr''@;'; put 'put ''IiwiZ29nLnBrIiwiZ29rLnBrIiwiZ29uLnBrIiwiZ29wLnBrIiwiZ29zLnBrIiwiZ292LnBrIiwibmV0LnBrIiwib3JnLnBrIiwid2ViLnBrIiwicGwiLCJjb20ucGwiLCJuZXQucGwiLCJvcmcucGwiLCJhZ3JvLnBsIiwiYWlkLnBsIiwiYXRtLnBsIiwiYXV0by5wbCIsImJpei5wbCIsImVk''@;'; put 'put ''dS5wbCIsImdtaW5hLnBsIiwiZ3NtLnBsIiwiaW5mby5wbCIsIm1haWwucGwiLCJtZWRpYS5wbCIsIm1pYXN0YS5wbCIsIm1pbC5wbCIsIm5pZXJ1Y2hvbW9zY2kucGwiLCJub20ucGwiLCJwYy5wbCIsInBvd2lhdC5wbCIsInByaXYucGwiLCJyZWFsZXN0YXRlLnBsIiwicmVsLnBsIiwic2V4''@;'; put 'put ''LnBsIiwic2hvcC5wbCIsInNrbGVwLnBsIiwic29zLnBsIiwic3prb2xhLnBsIiwidGFyZ2kucGwiLCJ0bS5wbCIsInRvdXJpc20ucGwiLCJ0cmF2ZWwucGwiLCJ0dXJ5c3R5a2EucGwiLCJnb3YucGwiLCJhcC5nb3YucGwiLCJncml3Lmdvdi5wbCIsImljLmdvdi5wbCIsImlzLmdvdi5wbCIs''@;'; put 'put ''ImttcHNwLmdvdi5wbCIsImtvbnN1bGF0Lmdvdi5wbCIsImtwcHNwLmdvdi5wbCIsImt3cC5nb3YucGwiLCJrd3BzcC5nb3YucGwiLCJtdXAuZ292LnBsIiwibXcuZ292LnBsIiwib2lhLmdvdi5wbCIsIm9pcm0uZ292LnBsIiwib2tlLmdvdi5wbCIsIm9vdy5nb3YucGwiLCJvc2Noci5nb3Yu''@;'; put 'put ''cGwiLCJvdW0uZ292LnBsIiwicGEuZ292LnBsIiwicGluYi5nb3YucGwiLCJwaXcuZ292LnBsIiwicG8uZ292LnBsIiwicHIuZ292LnBsIiwicHNwLmdvdi5wbCIsInBzc2UuZ292LnBsIiwicHVwLmdvdi5wbCIsInJ6Z3cuZ292LnBsIiwic2EuZ292LnBsIiwic2RuLmdvdi5wbCIsInNrby5n''@;'; put 'put ''b3YucGwiLCJzby5nb3YucGwiLCJzci5nb3YucGwiLCJzdGFyb3N0d28uZ292LnBsIiwidWcuZ292LnBsIiwidWdpbS5nb3YucGwiLCJ1bS5nb3YucGwiLCJ1bWlnLmdvdi5wbCIsInVwb3cuZ292LnBsIiwidXBwby5nb3YucGwiLCJ1cy5nb3YucGwiLCJ1dy5nb3YucGwiLCJ1enMuZ292LnBs''@;'; put 'put ''Iiwid2lmLmdvdi5wbCIsIndpaWguZ292LnBsIiwid2luYi5nb3YucGwiLCJ3aW9zLmdvdi5wbCIsIndpdGQuZ292LnBsIiwid2l3Lmdvdi5wbCIsIndrei5nb3YucGwiLCJ3c2EuZ292LnBsIiwid3Nrci5nb3YucGwiLCJ3c3NlLmdvdi5wbCIsInd1b3ouZ292LnBsIiwid3ptaXV3Lmdvdi5w''@;'; put 'put ''bCIsInpwLmdvdi5wbCIsInpwaXNkbi5nb3YucGwiLCJhdWd1c3Rvdy5wbCIsImJhYmlhLWdvcmEucGwiLCJiZWR6aW4ucGwiLCJiZXNraWR5LnBsIiwiYmlhbG93aWV6YS5wbCIsImJpYWx5c3Rvay5wbCIsImJpZWxhd2EucGwiLCJiaWVzemN6YWR5LnBsIiwiYm9sZXNsYXdpZWMucGwiLCJi''@;'; put 'put ''eWRnb3N6Y3oucGwiLCJieXRvbS5wbCIsImNpZXN6eW4ucGwiLCJjemVsYWR6LnBsIiwiY3plc3QucGwiLCJkbHVnb2xla2EucGwiLCJlbGJsYWcucGwiLCJlbGsucGwiLCJnbG9nb3cucGwiLCJnbmllem5vLnBsIiwiZ29ybGljZS5wbCIsImdyYWpld28ucGwiLCJpbGF3YS5wbCIsImphd29y''@;'; put 'put ''em5vLnBsIiwiamVsZW5pYS1nb3JhLnBsIiwiamdvcmEucGwiLCJrYWxpc3oucGwiLCJrYXJwYWN6LnBsIiwia2FydHV6eS5wbCIsImthc3p1YnkucGwiLCJrYXRvd2ljZS5wbCIsImthemltaWVyei1kb2xueS5wbCIsImtlcG5vLnBsIiwia2V0cnp5bi5wbCIsImtsb2R6a28ucGwiLCJrb2Jp''@;'; put 'put ''ZXJ6eWNlLnBsIiwia29sb2JyemVnLnBsIiwia29uaW4ucGwiLCJrb25za293b2xhLnBsIiwia3V0bm8ucGwiLCJsYXB5LnBsIiwibGVib3JrLnBsIiwibGVnbmljYS5wbCIsImxlemFqc2sucGwiLCJsaW1hbm93YS5wbCIsImxvbXphLnBsIiwibG93aWN6LnBsIiwibHViaW4ucGwiLCJsdWtv''@;'; put 'put ''dy5wbCIsIm1hbGJvcmsucGwiLCJtYWxvcG9sc2thLnBsIiwibWF6b3dzemUucGwiLCJtYXp1cnkucGwiLCJtaWVsZWMucGwiLCJtaWVsbm8ucGwiLCJtcmFnb3dvLnBsIiwibmFrbG8ucGwiLCJub3dhcnVkYS5wbCIsIm55c2EucGwiLCJvbGF3YS5wbCIsIm9sZWNrby5wbCIsIm9sa3Vzei5w''@;'; put 'put ''bCIsIm9sc3p0eW4ucGwiLCJvcG9jem5vLnBsIiwib3BvbGUucGwiLCJvc3Ryb2RhLnBsIiwib3N0cm9sZWthLnBsIiwib3N0cm93aWVjLnBsIiwib3N0cm93d2xrcC5wbCIsInBpbGEucGwiLCJwaXN6LnBsIiwicG9kaGFsZS5wbCIsInBvZGxhc2llLnBsIiwicG9sa293aWNlLnBsIiwicG9t''@;'; put 'put ''b3Jza2llLnBsIiwicG9tb3J6ZS5wbCIsInByb2Nob3dpY2UucGwiLCJwcnVzemtvdy5wbCIsInByemV3b3Jzay5wbCIsInB1bGF3eS5wbCIsInJhZG9tLnBsIiwicmF3YS1tYXoucGwiLCJyeWJuaWsucGwiLCJyemVzem93LnBsIiwic2Fub2sucGwiLCJzZWpueS5wbCIsInNrb2N6b3cucGwi''@;'; put 'put ''LCJzbGFzay5wbCIsInNsdXBzay5wbCIsInNvc25vd2llYy5wbCIsInN0YWxvd2Etd29sYS5wbCIsInN0YXJhY2hvd2ljZS5wbCIsInN0YXJnYXJkLnBsIiwic3V3YWxraS5wbCIsInN3aWRuaWNhLnBsIiwic3dpZWJvZHppbi5wbCIsInN3aW5vdWpzY2llLnBsIiwic3pjemVjaW4ucGwiLCJz''@;'; put 'put ''emN6eXRuby5wbCIsInRhcm5vYnJ6ZWcucGwiLCJ0Z29yeS5wbCIsInR1cmVrLnBsIiwidHljaHkucGwiLCJ1c3RrYS5wbCIsIndhbGJyenljaC5wbCIsIndhcm1pYS5wbCIsIndhcnN6YXdhLnBsIiwid2F3LnBsIiwid2Vncm93LnBsIiwid2llbHVuLnBsIiwid2xvY2wucGwiLCJ3bG9jbGF3''@;'; put 'put ''ZWsucGwiLCJ3b2R6aXNsYXcucGwiLCJ3b2xvbWluLnBsIiwid3JvY2xhdy5wbCIsInphY2hwb21vci5wbCIsInphZ2FuLnBsIiwiemFyb3cucGwiLCJ6Z29yYS5wbCIsInpnb3J6ZWxlYy5wbCIsInBtIiwicG4iLCJjby5wbiIsImVkdS5wbiIsImdvdi5wbiIsIm5ldC5wbiIsIm9yZy5wbiIs''@;'; put 'put ''InBvc3QiLCJwciIsImJpei5wciIsImNvbS5wciIsImVkdS5wciIsImdvdi5wciIsImluZm8ucHIiLCJpc2xhLnByIiwibmFtZS5wciIsIm5ldC5wciIsIm9yZy5wciIsInByby5wciIsImFjLnByIiwiZXN0LnByIiwicHJvZi5wciIsInBybyIsImFhYS5wcm8iLCJhY2EucHJvIiwiYWNjdC5w''@;'; put 'put ''cm8iLCJhdm9jYXQucHJvIiwiYmFyLnBybyIsImNwYS5wcm8iLCJlbmcucHJvIiwianVyLnBybyIsImxhdy5wcm8iLCJtZWQucHJvIiwicmVjaHQucHJvIiwicHMiLCJjb20ucHMiLCJlZHUucHMiLCJnb3YucHMiLCJuZXQucHMiLCJvcmcucHMiLCJwbG8ucHMiLCJzZWMucHMiLCJwdCIsImNv''@;'; put 'put ''bS5wdCIsImVkdS5wdCIsImdvdi5wdCIsImludC5wdCIsIm5ldC5wdCIsIm5vbWUucHQiLCJvcmcucHQiLCJwdWJsLnB0IiwicHciLCJiZWxhdS5wdyIsImNvLnB3IiwiZWQucHciLCJnby5wdyIsIm9yLnB3IiwicHkiLCJjb20ucHkiLCJjb29wLnB5IiwiZWR1LnB5IiwiZ292LnB5IiwibWls''@;'; put 'put ''LnB5IiwibmV0LnB5Iiwib3JnLnB5IiwicWEiLCJjb20ucWEiLCJlZHUucWEiLCJnb3YucWEiLCJtaWwucWEiLCJuYW1lLnFhIiwibmV0LnFhIiwib3JnLnFhIiwic2NoLnFhIiwicmUiLCJhc3NvLnJlIiwiY29tLnJlIiwicm8iLCJhcnRzLnJvIiwiY29tLnJvIiwiZmlybS5ybyIsImluZm8u''@;'; put 'put ''cm8iLCJub20ucm8iLCJudC5ybyIsIm9yZy5ybyIsInJlYy5ybyIsInN0b3JlLnJvIiwidG0ucm8iLCJ3d3cucm8iLCJycyIsImFjLnJzIiwiY28ucnMiLCJlZHUucnMiLCJnb3YucnMiLCJpbi5ycyIsIm9yZy5ycyIsInJ1IiwicnciLCJhYy5ydyIsImNvLnJ3IiwiY29vcC5ydyIsImdvdi5y''@;'; put 'put ''dyIsIm1pbC5ydyIsIm5ldC5ydyIsIm9yZy5ydyIsInNhIiwiY29tLnNhIiwiZWR1LnNhIiwiZ292LnNhIiwibWVkLnNhIiwibmV0LnNhIiwib3JnLnNhIiwicHViLnNhIiwic2NoLnNhIiwic2IiLCJjb20uc2IiLCJlZHUuc2IiLCJnb3Yuc2IiLCJuZXQuc2IiLCJvcmcuc2IiLCJzYyIsImNv''@;'; put 'put ''bS5zYyIsImVkdS5zYyIsImdvdi5zYyIsIm5ldC5zYyIsIm9yZy5zYyIsInNkIiwiY29tLnNkIiwiZWR1LnNkIiwiZ292LnNkIiwiaW5mby5zZCIsIm1lZC5zZCIsIm5ldC5zZCIsIm9yZy5zZCIsInR2LnNkIiwic2UiLCJhLnNlIiwiYWMuc2UiLCJiLnNlIiwiYmQuc2UiLCJicmFuZC5zZSIs''@;'; put 'put ''ImMuc2UiLCJkLnNlIiwiZS5zZSIsImYuc2UiLCJmaC5zZSIsImZoc2suc2UiLCJmaHYuc2UiLCJnLnNlIiwiaC5zZSIsImkuc2UiLCJrLnNlIiwia29tZm9yYi5zZSIsImtvbW11bmFsZm9yYnVuZC5zZSIsImtvbXZ1eC5zZSIsImwuc2UiLCJsYW5iaWIuc2UiLCJtLnNlIiwibi5zZSIsIm5h''@;'; put 'put ''dHVyYnJ1a3NneW1uLnNlIiwiby5zZSIsIm9yZy5zZSIsInAuc2UiLCJwYXJ0aS5zZSIsInBwLnNlIiwicHJlc3Muc2UiLCJyLnNlIiwicy5zZSIsInQuc2UiLCJ0bS5zZSIsInUuc2UiLCJ3LnNlIiwieC5zZSIsInkuc2UiLCJ6LnNlIiwic2ciLCJjb20uc2ciLCJlZHUuc2ciLCJnb3Yuc2ci''@;'; put 'put ''LCJuZXQuc2ciLCJvcmcuc2ciLCJzaCIsImNvbS5zaCIsImdvdi5zaCIsIm1pbC5zaCIsIm5ldC5zaCIsIm9yZy5zaCIsInNpIiwic2oiLCJzayIsInNsIiwiY29tLnNsIiwiZWR1LnNsIiwiZ292LnNsIiwibmV0LnNsIiwib3JnLnNsIiwic20iLCJzbiIsImFydC5zbiIsImNvbS5zbiIsImVk''@;'; put 'put ''dS5zbiIsImdvdXYuc24iLCJvcmcuc24iLCJwZXJzby5zbiIsInVuaXYuc24iLCJzbyIsImNvbS5zbyIsImVkdS5zbyIsImdvdi5zbyIsIm1lLnNvIiwibmV0LnNvIiwib3JnLnNvIiwic3IiLCJzcyIsImJpei5zcyIsImNvLnNzIiwiY29tLnNzIiwiZWR1LnNzIiwiZ292LnNzIiwibWUuc3Mi''@;'; put 'put ''LCJuZXQuc3MiLCJvcmcuc3MiLCJzY2guc3MiLCJzdCIsImNvLnN0IiwiY29tLnN0IiwiY29uc3VsYWRvLnN0IiwiZWR1LnN0IiwiZW1iYWl4YWRhLnN0IiwibWlsLnN0IiwibmV0LnN0Iiwib3JnLnN0IiwicHJpbmNpcGUuc3QiLCJzYW90b21lLnN0Iiwic3RvcmUuc3QiLCJzdSIsInN2Iiwi''@;'; put 'put ''Y29tLnN2IiwiZWR1LnN2IiwiZ29iLnN2Iiwib3JnLnN2IiwicmVkLnN2Iiwic3giLCJnb3Yuc3giLCJzeSIsImNvbS5zeSIsImVkdS5zeSIsImdvdi5zeSIsIm1pbC5zeSIsIm5ldC5zeSIsIm9yZy5zeSIsInN6IiwiYWMuc3oiLCJjby5zeiIsIm9yZy5zeiIsInRjIiwidGQiLCJ0ZWwiLCJ0''@;'; put 'put ''ZiIsInRnIiwidGgiLCJhYy50aCIsImNvLnRoIiwiZ28udGgiLCJpbi50aCIsIm1pLnRoIiwibmV0LnRoIiwib3IudGgiLCJ0aiIsImFjLnRqIiwiYml6LnRqIiwiY28udGoiLCJjb20udGoiLCJlZHUudGoiLCJnby50aiIsImdvdi50aiIsImludC50aiIsIm1pbC50aiIsIm5hbWUudGoiLCJu''@;'; put 'put ''ZXQudGoiLCJuaWMudGoiLCJvcmcudGoiLCJ0ZXN0LnRqIiwid2ViLnRqIiwidGsiLCJ0bCIsImdvdi50bCIsInRtIiwiY28udG0iLCJjb20udG0iLCJlZHUudG0iLCJnb3YudG0iLCJtaWwudG0iLCJuZXQudG0iLCJub20udG0iLCJvcmcudG0iLCJ0biIsImNvbS50biIsImVucy50biIsImZp''@;'; put 'put ''bi50biIsImdvdi50biIsImluZC50biIsImluZm8udG4iLCJpbnRsLnRuIiwibWluY29tLnRuIiwibmF0LnRuIiwibmV0LnRuIiwib3JnLnRuIiwicGVyc28udG4iLCJ0b3VyaXNtLnRuIiwidG8iLCJjb20udG8iLCJlZHUudG8iLCJnb3YudG8iLCJtaWwudG8iLCJuZXQudG8iLCJvcmcudG8i''@;'; put 'put ''LCJ0ciIsImF2LnRyIiwiYmJzLnRyIiwiYmVsLnRyIiwiYml6LnRyIiwiY29tLnRyIiwiZHIudHIiLCJlZHUudHIiLCJnZW4udHIiLCJnb3YudHIiLCJpbmZvLnRyIiwiazEyLnRyIiwia2VwLnRyIiwibWlsLnRyIiwibmFtZS50ciIsIm5ldC50ciIsIm9yZy50ciIsInBvbC50ciIsInRlbC50''@;'; put 'put ''ciIsInRzay50ciIsInR2LnRyIiwid2ViLnRyIiwibmMudHIiLCJnb3YubmMudHIiLCJ0dCIsImJpei50dCIsImNvLnR0IiwiY29tLnR0IiwiZWR1LnR0IiwiZ292LnR0IiwiaW5mby50dCIsIm1pbC50dCIsIm5hbWUudHQiLCJuZXQudHQiLCJvcmcudHQiLCJwcm8udHQiLCJ0diIsInR3Iiwi''@;'; put 'put ''Y2x1Yi50dyIsImNvbS50dyIsImViaXoudHciLCJlZHUudHciLCJnYW1lLnR3IiwiZ292LnR3IiwiaWR2LnR3IiwibWlsLnR3IiwibmV0LnR3Iiwib3JnLnR3IiwidHoiLCJhYy50eiIsImNvLnR6IiwiZ28udHoiLCJob3RlbC50eiIsImluZm8udHoiLCJtZS50eiIsIm1pbC50eiIsIm1vYmku''@;'; put 'put ''dHoiLCJuZS50eiIsIm9yLnR6Iiwic2MudHoiLCJ0di50eiIsInVhIiwiY29tLnVhIiwiZWR1LnVhIiwiZ292LnVhIiwiaW4udWEiLCJuZXQudWEiLCJvcmcudWEiLCJjaGVya2Fzc3kudWEiLCJjaGVya2FzeS51YSIsImNoZXJuaWdvdi51YSIsImNoZXJuaWhpdi51YSIsImNoZXJuaXZ0c2ku''@;'; put 'put ''dWEiLCJjaGVybm92dHN5LnVhIiwiY2sudWEiLCJjbi51YSIsImNyLnVhIiwiY3JpbWVhLnVhIiwiY3YudWEiLCJkbi51YSIsImRuZXByb3BldHJvdnNrLnVhIiwiZG5pcHJvcGV0cm92c2sudWEiLCJkb25ldHNrLnVhIiwiZHAudWEiLCJpZi51YSIsIml2YW5vLWZyYW5raXZzay51YSIsImto''@;'; put 'put ''LnVhIiwia2hhcmtpdi51YSIsImtoYXJrb3YudWEiLCJraGVyc29uLnVhIiwia2htZWxuaXRza2l5LnVhIiwia2htZWxueXRza3lpLnVhIiwia2lldi51YSIsImtpcm92b2dyYWQudWEiLCJrbS51YSIsImtyLnVhIiwia3JvcHl2bnl0c2t5aS51YSIsImtyeW0udWEiLCJrcy51YSIsImt2LnVh''@;'; put 'put ''Iiwia3lpdi51YSIsImxnLnVhIiwibHQudWEiLCJsdWdhbnNrLnVhIiwibHVoYW5zay51YSIsImx1dHNrLnVhIiwibHYudWEiLCJsdml2LnVhIiwibWsudWEiLCJteWtvbGFpdi51YSIsIm5pa29sYWV2LnVhIiwib2QudWEiLCJvZGVzYS51YSIsIm9kZXNzYS51YSIsInBsLnVhIiwicG9sdGF2''@;'; put 'put ''YS51YSIsInJpdm5lLnVhIiwicm92bm8udWEiLCJydi51YSIsInNiLnVhIiwic2ViYXN0b3BvbC51YSIsInNldmFzdG9wb2wudWEiLCJzbS51YSIsInN1bXkudWEiLCJ0ZS51YSIsInRlcm5vcGlsLnVhIiwidXoudWEiLCJ1emhnb3JvZC51YSIsInV6aGhvcm9kLnVhIiwidmlubmljYS51YSIs''@;'; put 'put ''InZpbm55dHNpYS51YSIsInZuLnVhIiwidm9seW4udWEiLCJ5YWx0YS51YSIsInpha2FycGF0dGlhLnVhIiwiemFwb3Jpemh6aGUudWEiLCJ6YXBvcml6aHpoaWEudWEiLCJ6aGl0b21pci51YSIsInpoeXRvbXlyLnVhIiwienAudWEiLCJ6dC51YSIsInVnIiwiYWMudWciLCJjby51ZyIsImNv''@;'; put 'put ''bS51ZyIsImdvLnVnIiwibmUudWciLCJvci51ZyIsIm9yZy51ZyIsInNjLnVnIiwidWsiLCJhYy51ayIsImNvLnVrIiwiZ292LnVrIiwibHRkLnVrIiwibWUudWsiLCJuZXQudWsiLCJuaHMudWsiLCJvcmcudWsiLCJwbGMudWsiLCJwb2xpY2UudWsiLCIqLnNjaC51ayIsInVzIiwiZG5pLnVz''@;'; put 'put ''IiwiZmVkLnVzIiwiaXNhLnVzIiwia2lkcy51cyIsIm5zbi51cyIsImFrLnVzIiwiYWwudXMiLCJhci51cyIsImFzLnVzIiwiYXoudXMiLCJjYS51cyIsImNvLnVzIiwiY3QudXMiLCJkYy51cyIsImRlLnVzIiwiZmwudXMiLCJnYS51cyIsImd1LnVzIiwiaGkudXMiLCJpYS51cyIsImlkLnVz''@;'; put 'put ''IiwiaWwudXMiLCJpbi51cyIsImtzLnVzIiwia3kudXMiLCJsYS51cyIsIm1hLnVzIiwibWQudXMiLCJtZS51cyIsIm1pLnVzIiwibW4udXMiLCJtby51cyIsIm1zLnVzIiwibXQudXMiLCJuYy51cyIsIm5kLnVzIiwibmUudXMiLCJuaC51cyIsIm5qLnVzIiwibm0udXMiLCJudi51cyIsIm55''@;'; put 'put ''LnVzIiwib2gudXMiLCJvay51cyIsIm9yLnVzIiwicGEudXMiLCJwci51cyIsInJpLnVzIiwic2MudXMiLCJzZC51cyIsInRuLnVzIiwidHgudXMiLCJ1dC51cyIsInZhLnVzIiwidmkudXMiLCJ2dC51cyIsIndhLnVzIiwid2kudXMiLCJ3di51cyIsInd5LnVzIiwiazEyLmFrLnVzIiwiazEy''@;'; put 'put ''LmFsLnVzIiwiazEyLmFyLnVzIiwiazEyLmFzLnVzIiwiazEyLmF6LnVzIiwiazEyLmNhLnVzIiwiazEyLmNvLnVzIiwiazEyLmN0LnVzIiwiazEyLmRjLnVzIiwiazEyLmZsLnVzIiwiazEyLmdhLnVzIiwiazEyLmd1LnVzIiwiazEyLmlhLnVzIiwiazEyLmlkLnVzIiwiazEyLmlsLnVzIiwi''@;'; put 'put ''azEyLmluLnVzIiwiazEyLmtzLnVzIiwiazEyLmt5LnVzIiwiazEyLmxhLnVzIiwiazEyLm1hLnVzIiwiazEyLm1kLnVzIiwiazEyLm1lLnVzIiwiazEyLm1pLnVzIiwiazEyLm1uLnVzIiwiazEyLm1vLnVzIiwiazEyLm1zLnVzIiwiazEyLm10LnVzIiwiazEyLm5jLnVzIiwiazEyLm5lLnVz''@;'; put 'put ''IiwiazEyLm5oLnVzIiwiazEyLm5qLnVzIiwiazEyLm5tLnVzIiwiazEyLm52LnVzIiwiazEyLm55LnVzIiwiazEyLm9oLnVzIiwiazEyLm9rLnVzIiwiazEyLm9yLnVzIiwiazEyLnBhLnVzIiwiazEyLnByLnVzIiwiazEyLnNjLnVzIiwiazEyLnRuLnVzIiwiazEyLnR4LnVzIiwiazEyLnV0''@;'; put 'put ''LnVzIiwiazEyLnZhLnVzIiwiazEyLnZpLnVzIiwiazEyLnZ0LnVzIiwiazEyLndhLnVzIiwiazEyLndpLnVzIiwiY2MuYWsudXMiLCJsaWIuYWsudXMiLCJjYy5hbC51cyIsImxpYi5hbC51cyIsImNjLmFyLnVzIiwibGliLmFyLnVzIiwiY2MuYXMudXMiLCJsaWIuYXMudXMiLCJjYy5hei51''@;'; put 'put ''cyIsImxpYi5hei51cyIsImNjLmNhLnVzIiwibGliLmNhLnVzIiwiY2MuY28udXMiLCJsaWIuY28udXMiLCJjYy5jdC51cyIsImxpYi5jdC51cyIsImNjLmRjLnVzIiwibGliLmRjLnVzIiwiY2MuZGUudXMiLCJjYy5mbC51cyIsImNjLmdhLnVzIiwiY2MuZ3UudXMiLCJjYy5oaS51cyIsImNj''@;'; put 'put ''LmlhLnVzIiwiY2MuaWQudXMiLCJjYy5pbC51cyIsImNjLmluLnVzIiwiY2Mua3MudXMiLCJjYy5reS51cyIsImNjLmxhLnVzIiwiY2MubWEudXMiLCJjYy5tZC51cyIsImNjLm1lLnVzIiwiY2MubWkudXMiLCJjYy5tbi51cyIsImNjLm1vLnVzIiwiY2MubXMudXMiLCJjYy5tdC51cyIsImNj''@;'; put 'put ''Lm5jLnVzIiwiY2MubmQudXMiLCJjYy5uZS51cyIsImNjLm5oLnVzIiwiY2MubmoudXMiLCJjYy5ubS51cyIsImNjLm52LnVzIiwiY2MubnkudXMiLCJjYy5vaC51cyIsImNjLm9rLnVzIiwiY2Mub3IudXMiLCJjYy5wYS51cyIsImNjLnByLnVzIiwiY2MucmkudXMiLCJjYy5zYy51cyIsImNj''@;'; put 'put ''LnNkLnVzIiwiY2MudG4udXMiLCJjYy50eC51cyIsImNjLnV0LnVzIiwiY2MudmEudXMiLCJjYy52aS51cyIsImNjLnZ0LnVzIiwiY2Mud2EudXMiLCJjYy53aS51cyIsImNjLnd2LnVzIiwiY2Mud3kudXMiLCJrMTIud3kudXMiLCJsaWIuZmwudXMiLCJsaWIuZ2EudXMiLCJsaWIuZ3UudXMi''@;'; put 'put ''LCJsaWIuaGkudXMiLCJsaWIuaWEudXMiLCJsaWIuaWQudXMiLCJsaWIuaWwudXMiLCJsaWIuaW4udXMiLCJsaWIua3MudXMiLCJsaWIua3kudXMiLCJsaWIubGEudXMiLCJsaWIubWEudXMiLCJsaWIubWQudXMiLCJsaWIubWUudXMiLCJsaWIubWkudXMiLCJsaWIubW4udXMiLCJsaWIubW8u''@;'; put 'put ''dXMiLCJsaWIubXMudXMiLCJsaWIubXQudXMiLCJsaWIubmMudXMiLCJsaWIubmQudXMiLCJsaWIubmUudXMiLCJsaWIubmgudXMiLCJsaWIubmoudXMiLCJsaWIubm0udXMiLCJsaWIubnYudXMiLCJsaWIubnkudXMiLCJsaWIub2gudXMiLCJsaWIub2sudXMiLCJsaWIub3IudXMiLCJsaWIu''@;'; put 'put ''cGEudXMiLCJsaWIucHIudXMiLCJsaWIucmkudXMiLCJsaWIuc2MudXMiLCJsaWIuc2QudXMiLCJsaWIudG4udXMiLCJsaWIudHgudXMiLCJsaWIudXQudXMiLCJsaWIudmEudXMiLCJsaWIudmkudXMiLCJsaWIudnQudXMiLCJsaWIud2EudXMiLCJsaWIud2kudXMiLCJsaWIud3kudXMiLCJj''@;'; put 'put ''aHRyLmsxMi5tYS51cyIsInBhcm9jaC5rMTIubWEudXMiLCJwdnQuazEyLm1hLnVzIiwiYW5uLWFyYm9yLm1pLnVzIiwiY29nLm1pLnVzIiwiZHN0Lm1pLnVzIiwiZWF0b24ubWkudXMiLCJnZW4ubWkudXMiLCJtdXMubWkudXMiLCJ0ZWMubWkudXMiLCJ3YXNodGVuYXcubWkudXMiLCJ1eSIs''@;'; put 'put ''ImNvbS51eSIsImVkdS51eSIsImd1Yi51eSIsIm1pbC51eSIsIm5ldC51eSIsIm9yZy51eSIsInV6IiwiY28udXoiLCJjb20udXoiLCJuZXQudXoiLCJvcmcudXoiLCJ2YSIsInZjIiwiY29tLnZjIiwiZWR1LnZjIiwiZ292LnZjIiwibWlsLnZjIiwibmV0LnZjIiwib3JnLnZjIiwidmUiLCJh''@;'; put 'put ''cnRzLnZlIiwiYmliLnZlIiwiY28udmUiLCJjb20udmUiLCJlMTIudmUiLCJlZHUudmUiLCJmaXJtLnZlIiwiZ29iLnZlIiwiZ292LnZlIiwiaW5mby52ZSIsImludC52ZSIsIm1pbC52ZSIsIm5ldC52ZSIsIm5vbS52ZSIsIm9yZy52ZSIsInJhci52ZSIsInJlYy52ZSIsInN0b3JlLnZlIiwi''@;'; put 'put ''dGVjLnZlIiwid2ViLnZlIiwidmciLCJ2aSIsImNvLnZpIiwiY29tLnZpIiwiazEyLnZpIiwibmV0LnZpIiwib3JnLnZpIiwidm4iLCJhYy52biIsImFpLnZuIiwiYml6LnZuIiwiY29tLnZuIiwiZWR1LnZuIiwiZ292LnZuIiwiaGVhbHRoLnZuIiwiaWQudm4iLCJpbmZvLnZuIiwiaW50LnZu''@;'; put 'put ''IiwiaW8udm4iLCJuYW1lLnZuIiwibmV0LnZuIiwib3JnLnZuIiwicHJvLnZuIiwiYW5naWFuZy52biIsImJhY2dpYW5nLnZuIiwiYmFja2FuLnZuIiwiYmFjbGlldS52biIsImJhY25pbmgudm4iLCJiYXJpYS12dW5ndGF1LnZuIiwiYmVudHJlLnZuIiwiYmluaGRpbmgudm4iLCJiaW5oZHVv''@;'; put 'put ''bmcudm4iLCJiaW5ocGh1b2Mudm4iLCJiaW5odGh1YW4udm4iLCJjYW1hdS52biIsImNhbnRoby52biIsImNhb2Jhbmcudm4iLCJkYWtsYWsudm4iLCJkYWtub25nLnZuIiwiZGFuYW5nLnZuIiwiZGllbmJpZW4udm4iLCJkb25nbmFpLnZuIiwiZG9uZ3RoYXAudm4iLCJnaWFsYWkudm4iLCJo''@;'; put 'put ''YWdpYW5nLnZuIiwiaGFpZHVvbmcudm4iLCJoYWlwaG9uZy52biIsImhhbmFtLnZuIiwiaGFub2kudm4iLCJoYXRpbmgudm4iLCJoYXVnaWFuZy52biIsImhvYWJpbmgudm4iLCJodW5neWVuLnZuIiwia2hhbmhob2Eudm4iLCJraWVuZ2lhbmcudm4iLCJrb250dW0udm4iLCJsYWljaGF1LnZu''@;'; put 'put ''IiwibGFtZG9uZy52biIsImxhbmdzb24udm4iLCJsYW9jYWkudm4iLCJsb25nYW4udm4iLCJuYW1kaW5oLnZuIiwibmdoZWFuLnZuIiwibmluaGJpbmgudm4iLCJuaW5odGh1YW4udm4iLCJwaHV0aG8udm4iLCJwaHV5ZW4udm4iLCJxdWFuZ2Jpbmgudm4iLCJxdWFuZ25hbS52biIsInF1YW5n''@;'; put 'put ''bmdhaS52biIsInF1YW5nbmluaC52biIsInF1YW5ndHJpLnZuIiwic29jdHJhbmcudm4iLCJzb25sYS52biIsInRheW5pbmgudm4iLCJ0aGFpYmluaC52biIsInRoYWluZ3V5ZW4udm4iLCJ0aGFuaGhvYS52biIsInRoYW5ocGhvaG9jaGltaW5oLnZuIiwidGh1YXRoaWVuaHVlLnZuIiwidGll''@;'; put 'put ''bmdpYW5nLnZuIiwidHJhdmluaC52biIsInR1eWVucXVhbmcudm4iLCJ2aW5obG9uZy52biIsInZpbmhwaHVjLnZuIiwieWVuYmFpLnZuIiwidnUiLCJjb20udnUiLCJlZHUudnUiLCJuZXQudnUiLCJvcmcudnUiLCJ3ZiIsIndzIiwiY29tLndzIiwiZWR1LndzIiwiZ292LndzIiwibmV0Lndz''@;'; put 'put ''Iiwib3JnLndzIiwieXQiLCJcdTA2MjdcdTA2NDVcdTA2MjdcdTA2MzFcdTA2MjdcdTA2MmEiLCJcdTA1NzBcdTA1NjFcdTA1NzUiLCJcdTA5YWNcdTA5YmVcdTA5ODJcdTA5YjJcdTA5YmUiLCJcdTA0MzFcdTA0MzMiLCJcdTA2MjdcdTA2NDRcdTA2MjhcdTA2MmRcdTA2MzFcdTA2NGFcdTA2''@;'; put 'put ''NDYiLCJcdTA0MzFcdTA0MzVcdTA0M2IiLCJcdTRlMmRcdTU2ZmQiLCJcdTRlMmRcdTU3MGIiLCJcdTA2MjdcdTA2NDRcdTA2MmNcdTA2MzJcdTA2MjdcdTA2MjZcdTA2MzEiLCJcdTA2NDVcdTA2MzVcdTA2MzEiLCJcdTA0MzVcdTA0NGUiLCJcdTAzYjVcdTAzYzUiLCJcdTA2NDVcdTA2NDhc''@;'; put 'put ''dTA2MzFcdTA2NGFcdTA2MmFcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MjciLCJcdTEwZDJcdTEwZDQiLCJcdTAzYjVcdTAzYmIiLCJcdTk5OTlcdTZlMmYiLCJcdTUwMGJcdTRlYmEuXHU5OTk5XHU2ZTJmIiwiXHU1MTZjXHU1M2Y4Llx1OTk5OVx1NmUyZiIsIlx1NjUzZlx1NWU5Yy5cdTk5OTlc''@;'; put 'put ''dTZlMmYiLCJcdTY1NTlcdTgwYjIuXHU5OTk5XHU2ZTJmIiwiXHU3ZDQ0XHU3ZTU0Llx1OTk5OVx1NmUyZiIsIlx1N2RiMlx1N2Q2MS5cdTk5OTlcdTZlMmYiLCJcdTBjYWRcdTBjYmVcdTBjYjBcdTBjYTQiLCJcdTBiMmRcdTBiM2VcdTBiMzBcdTBiMjQiLCJcdTA5YWRcdTA5YmVcdTA5ZjBc''@;'; put 'put ''dTA5YTQiLCJcdTA5MmRcdTA5M2VcdTA5MzBcdTA5MjRcdTA5MmVcdTA5NGQiLCJcdTA5MmRcdTA5M2VcdTA5MzBcdTA5NGJcdTA5MjQiLCJcdTA2ODBcdTA2MjdcdTA2MzFcdTA2MmEiLCJcdTBkMmRcdTBkM2VcdTBkMzBcdTBkMjRcdTBkMDIiLCJcdTA5MmRcdTA5M2VcdTA5MzBcdTA5MjQi''@;'; put 'put ''LCJcdTA2MjhcdTA2MjdcdTA2MzFcdTA2MmEiLCJcdTA2MjhcdTA2YmVcdTA2MjdcdTA2MzFcdTA2MmEiLCJcdTBjMmRcdTBjM2VcdTBjMzBcdTBjMjRcdTBjNGQiLCJcdTBhYWRcdTBhYmVcdTBhYjBcdTBhYTQiLCJcdTBhMmRcdTBhM2VcdTBhMzBcdTBhMjQiLCJcdTA5YWRcdTA5YmVcdTA5''@;'; put 'put ''YjBcdTA5YTQiLCJcdTBiODdcdTBiYThcdTBiY2RcdTBiYTRcdTBiYmZcdTBiYWZcdTBiYmUiLCJcdTA2MjdcdTA2Y2NcdTA2MzFcdTA2MjdcdTA2NDYiLCJcdTA2MjdcdTA2NGFcdTA2MzFcdTA2MjdcdTA2NDYiLCJcdTA2MzlcdTA2MzFcdTA2MjdcdTA2NDIiLCJcdTA2MjdcdTA2NDRcdTA2''@;'; put 'put ''MjdcdTA2MzFcdTA2MmZcdTA2NDYiLCJcdWQ1NWNcdWFkNmQiLCJcdTA0OWJcdTA0MzBcdTA0MzciLCJcdTBlYTVcdTBlYjJcdTBlYTciLCJcdTBkYmRcdTBkODJcdTBkOWFcdTBkY2YiLCJcdTBiODdcdTBiYjJcdTBiOTlcdTBiY2RcdTBiOTVcdTBiYzgiLCJcdTA2MjdcdTA2NDRcdTA2NDVc''@;'; put 'put ''dTA2M2FcdTA2MzFcdTA2MjgiLCJcdTA0M2NcdTA0M2FcdTA0MzQiLCJcdTA0M2NcdTA0M2VcdTA0M2QiLCJcdTZmYjNcdTk1ODAiLCJcdTZmYjNcdTk1ZTgiLCJcdTA2NDVcdTA2NDRcdTA2NGFcdTA2MzNcdTA2NGFcdTA2MjciLCJcdTA2MzlcdTA2NDVcdTA2MjdcdTA2NDYiLCJcdTA2N2Vc''@;'; put 'put ''dTA2MjdcdTA2YTlcdTA2MzNcdTA2MmFcdTA2MjdcdTA2NDYiLCJcdTA2N2VcdTA2MjdcdTA2NDNcdTA2MzNcdTA2MmFcdTA2MjdcdTA2NDYiLCJcdTA2NDFcdTA2NDRcdTA2MzNcdTA2MzdcdTA2NGFcdTA2NDYiLCJcdTA0NDFcdTA0NDBcdTA0MzEiLCJcdTA0MzBcdTA0M2EuXHUwNDQxXHUw''@;'; put 'put ''NDQwXHUwNDMxIiwiXHUwNDNlXHUwNDMxXHUwNDQwLlx1MDQ0MVx1MDQ0MFx1MDQzMSIsIlx1MDQzZVx1MDQzNC5cdTA0NDFcdTA0NDBcdTA0MzEiLCJcdTA0M2VcdTA0NDBcdTA0MzMuXHUwNDQxXHUwNDQwXHUwNDMxIiwiXHUwNDNmXHUwNDQwLlx1MDQ0MVx1MDQ0MFx1MDQzMSIsIlx1MDQ0''@;'; put 'put ''M1x1MDQzZlx1MDQ0MC5cdTA0NDFcdTA0NDBcdTA0MzEiLCJcdTA0NDBcdTA0NDQiLCJcdTA2NDJcdTA2MzdcdTA2MzEiLCJcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MzlcdTA2NDhcdTA2MmZcdTA2NGFcdTA2MjkiLCJcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MzlcdTA2NDhcdTA2MmZcdTA2Y2Nc''@;'; put 'put ''dTA2MjkiLCJcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MzlcdTA2NDhcdTA2MmZcdTA2Y2NcdTA2YzMiLCJcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MzlcdTA2NDhcdTA2MmZcdTA2NGFcdTA2NDciLCJcdTA2MzNcdTA2NDhcdTA2MmZcdTA2MjdcdTA2NDYiLCJcdTY1YjBcdTUyYTBcdTU3NjEiLCJc''@;'; put 'put ''dTBiOWFcdTBiYmZcdTBiOTlcdTBiY2RcdTBiOTVcdTBiYWFcdTBiY2RcdTBiYWFcdTBiYzJcdTBiYjBcdTBiY2QiLCJcdTA2MzNcdTA2NDhcdTA2MzFcdTA2NGFcdTA2MjkiLCJcdTA2MzNcdTA2NDhcdTA2MzFcdTA2NGFcdTA2MjciLCJcdTBlNDRcdTBlMTdcdTBlMjIiLCJcdTBlMTdcdTBl''@;'; put 'put ''MmJcdTBlMzJcdTBlMjMuXHUwZTQ0XHUwZTE3XHUwZTIyIiwiXHUwZTE4XHUwZTM4XHUwZTIzXHUwZTAxXHUwZTM0XHUwZTA4Llx1MGU0NFx1MGUxN1x1MGUyMiIsIlx1MGU0MFx1MGUxOVx1MGU0N1x1MGUxNS5cdTBlNDRcdTBlMTdcdTBlMjIiLCJcdTBlMjNcdTBlMzFcdTBlMTBcdTBlMWFc''@;'; put 'put ''dTBlMzJcdTBlMjUuXHUwZTQ0XHUwZTE3XHUwZTIyIiwiXHUwZTI4XHUwZTM2XHUwZTAxXHUwZTI5XHUwZTMyLlx1MGU0NFx1MGUxN1x1MGUyMiIsIlx1MGUyZFx1MGUwN1x1MGUwNFx1MGU0Y1x1MGUwMVx1MGUyMy5cdTBlNDRcdTBlMTdcdTBlMjIiLCJcdTA2MmFcdTA2NDhcdTA2NDZcdTA2''@;'; put 'put ''MzMiLCJcdTUzZjBcdTcwNjMiLCJcdTUzZjBcdTZlN2UiLCJcdTgxZmFcdTcwNjMiLCJcdTA0NDNcdTA0M2FcdTA0NDAiLCJcdTA2MjdcdTA2NDRcdTA2NGFcdTA2NDVcdTA2NDYiLCJ4eHgiLCJ5ZSIsImNvbS55ZSIsImVkdS55ZSIsImdvdi55ZSIsIm1pbC55ZSIsIm5ldC55ZSIsIm9yZy55''@;'; put 'put ''ZSIsImFjLnphIiwiYWdyaWMuemEiLCJhbHQuemEiLCJjby56YSIsImVkdS56YSIsImdvdi56YSIsImdyb25kYXIuemEiLCJsYXcuemEiLCJtaWwuemEiLCJuZXQuemEiLCJuZ28uemEiLCJuaWMuemEiLCJuaXMuemEiLCJub20uemEiLCJvcmcuemEiLCJzY2hvb2wuemEiLCJ0bS56YSIsIndl''@;'; put 'put ''Yi56YSIsInptIiwiYWMuem0iLCJiaXouem0iLCJjby56bSIsImNvbS56bSIsImVkdS56bSIsImdvdi56bSIsImluZm8uem0iLCJtaWwuem0iLCJuZXQuem0iLCJvcmcuem0iLCJzY2guem0iLCJ6dyIsImFjLnp3IiwiY28uenciLCJnb3YuenciLCJtaWwuenciLCJvcmcuenciLCJhYWEiLCJh''@;'; put 'put ''YXJwIiwiYWJiIiwiYWJib3R0IiwiYWJidmllIiwiYWJjIiwiYWJsZSIsImFib2dhZG8iLCJhYnVkaGFiaSIsImFjYWRlbXkiLCJhY2NlbnR1cmUiLCJhY2NvdW50YW50IiwiYWNjb3VudGFudHMiLCJhY28iLCJhY3RvciIsImFkcyIsImFkdWx0IiwiYWVnIiwiYWV0bmEiLCJhZmwiLCJhZnJp''@;'; put 'put ''Y2EiLCJhZ2FraGFuIiwiYWdlbmN5IiwiYWlnIiwiYWlyYnVzIiwiYWlyZm9yY2UiLCJhaXJ0ZWwiLCJha2RuIiwiYWxpYmFiYSIsImFsaXBheSIsImFsbGZpbmFueiIsImFsbHN0YXRlIiwiYWxseSIsImFsc2FjZSIsImFsc3RvbSIsImFtYXpvbiIsImFtZXJpY2FuZXhwcmVzcyIsImFtZXJp''@;'; put 'put ''Y2FuZmFtaWx5IiwiYW1leCIsImFtZmFtIiwiYW1pY2EiLCJhbXN0ZXJkYW0iLCJhbmFseXRpY3MiLCJhbmRyb2lkIiwiYW5xdWFuIiwiYW56IiwiYW9sIiwiYXBhcnRtZW50cyIsImFwcCIsImFwcGxlIiwiYXF1YXJlbGxlIiwiYXJhYiIsImFyYW1jbyIsImFyY2hpIiwiYXJteSIsImFydCIs''@;'; put 'put ''ImFydGUiLCJhc2RhIiwiYXNzb2NpYXRlcyIsImF0aGxldGEiLCJhdHRvcm5leSIsImF1Y3Rpb24iLCJhdWRpIiwiYXVkaWJsZSIsImF1ZGlvIiwiYXVzcG9zdCIsImF1dGhvciIsImF1dG8iLCJhdXRvcyIsImF3cyIsImF4YSIsImF6dXJlIiwiYmFieSIsImJhaWR1IiwiYmFuYW1leCIsImJh''@;'; put 'put ''bmQiLCJiYW5rIiwiYmFyIiwiYmFyY2Vsb25hIiwiYmFyY2xheWNhcmQiLCJiYXJjbGF5cyIsImJhcmVmb290IiwiYmFyZ2FpbnMiLCJiYXNlYmFsbCIsImJhc2tldGJhbGwiLCJiYXVoYXVzIiwiYmF5ZXJuIiwiYmJjIiwiYmJ0IiwiYmJ2YSIsImJjZyIsImJjbiIsImJlYXRzIiwiYmVhdXR5''@;'; put 'put ''IiwiYmVlciIsImJlbnRsZXkiLCJiZXJsaW4iLCJiZXN0IiwiYmVzdGJ1eSIsImJldCIsImJoYXJ0aSIsImJpYmxlIiwiYmlkIiwiYmlrZSIsImJpbmciLCJiaW5nbyIsImJpbyIsImJsYWNrIiwiYmxhY2tmcmlkYXkiLCJibG9ja2J1c3RlciIsImJsb2ciLCJibG9vbWJlcmciLCJibHVlIiwi''@;'; put 'put ''Ym1zIiwiYm13IiwiYm5wcGFyaWJhcyIsImJvYXRzIiwiYm9laHJpbmdlciIsImJvZmEiLCJib20iLCJib25kIiwiYm9vIiwiYm9vayIsImJvb2tpbmciLCJib3NjaCIsImJvc3RpayIsImJvc3RvbiIsImJvdCIsImJvdXRpcXVlIiwiYm94IiwiYnJhZGVzY28iLCJicmlkZ2VzdG9uZSIsImJy''@;'; put 'put ''b2Fkd2F5IiwiYnJva2VyIiwiYnJvdGhlciIsImJydXNzZWxzIiwiYnVpbGQiLCJidWlsZGVycyIsImJ1c2luZXNzIiwiYnV5IiwiYnV6eiIsImJ6aCIsImNhYiIsImNhZmUiLCJjYWwiLCJjYWxsIiwiY2Fsdmlua2xlaW4iLCJjYW0iLCJjYW1lcmEiLCJjYW1wIiwiY2Fub24iLCJjYXBldG93''@;'; put 'put ''biIsImNhcGl0YWwiLCJjYXBpdGFsb25lIiwiY2FyIiwiY2FyYXZhbiIsImNhcmRzIiwiY2FyZSIsImNhcmVlciIsImNhcmVlcnMiLCJjYXJzIiwiY2FzYSIsImNhc2UiLCJjYXNoIiwiY2FzaW5vIiwiY2F0ZXJpbmciLCJjYXRob2xpYyIsImNiYSIsImNibiIsImNicmUiLCJjZW50ZXIiLCJj''@;'; put 'put ''ZW8iLCJjZXJuIiwiY2ZhIiwiY2ZkIiwiY2hhbmVsIiwiY2hhbm5lbCIsImNoYXJpdHkiLCJjaGFzZSIsImNoYXQiLCJjaGVhcCIsImNoaW50YWkiLCJjaHJpc3RtYXMiLCJjaHJvbWUiLCJjaHVyY2giLCJjaXByaWFuaSIsImNpcmNsZSIsImNpc2NvIiwiY2l0YWRlbCIsImNpdGkiLCJjaXRp''@;'; put 'put ''YyIsImNpdHkiLCJjbGFpbXMiLCJjbGVhbmluZyIsImNsaWNrIiwiY2xpbmljIiwiY2xpbmlxdWUiLCJjbG90aGluZyIsImNsb3VkIiwiY2x1YiIsImNsdWJtZWQiLCJjb2FjaCIsImNvZGVzIiwiY29mZmVlIiwiY29sbGVnZSIsImNvbG9nbmUiLCJjb21tYmFuayIsImNvbW11bml0eSIsImNv''@;'; put 'put ''bXBhbnkiLCJjb21wYXJlIiwiY29tcHV0ZXIiLCJjb21zZWMiLCJjb25kb3MiLCJjb25zdHJ1Y3Rpb24iLCJjb25zdWx0aW5nIiwiY29udGFjdCIsImNvbnRyYWN0b3JzIiwiY29va2luZyIsImNvb2wiLCJjb3JzaWNhIiwiY291bnRyeSIsImNvdXBvbiIsImNvdXBvbnMiLCJjb3Vyc2VzIiwi''@;'; put 'put ''Y3BhIiwiY3JlZGl0IiwiY3JlZGl0Y2FyZCIsImNyZWRpdHVuaW9uIiwiY3JpY2tldCIsImNyb3duIiwiY3JzIiwiY3J1aXNlIiwiY3J1aXNlcyIsImN1aXNpbmVsbGEiLCJjeW1ydSIsImN5b3UiLCJkYWQiLCJkYW5jZSIsImRhdGEiLCJkYXRlIiwiZGF0aW5nIiwiZGF0c3VuIiwiZGF5Iiwi''@;'; put 'put ''ZGNsayIsImRkcyIsImRlYWwiLCJkZWFsZXIiLCJkZWFscyIsImRlZ3JlZSIsImRlbGl2ZXJ5IiwiZGVsbCIsImRlbG9pdHRlIiwiZGVsdGEiLCJkZW1vY3JhdCIsImRlbnRhbCIsImRlbnRpc3QiLCJkZXNpIiwiZGVzaWduIiwiZGV2IiwiZGhsIiwiZGlhbW9uZHMiLCJkaWV0IiwiZGlnaXRh''@;'; put 'put ''bCIsImRpcmVjdCIsImRpcmVjdG9yeSIsImRpc2NvdW50IiwiZGlzY292ZXIiLCJkaXNoIiwiZGl5IiwiZG5wIiwiZG9jcyIsImRvY3RvciIsImRvZyIsImRvbWFpbnMiLCJkb3QiLCJkb3dubG9hZCIsImRyaXZlIiwiZHR2IiwiZHViYWkiLCJkdW5sb3AiLCJkdXBvbnQiLCJkdXJiYW4iLCJk''@;'; put 'put ''dmFnIiwiZHZyIiwiZWFydGgiLCJlYXQiLCJlY28iLCJlZGVrYSIsImVkdWNhdGlvbiIsImVtYWlsIiwiZW1lcmNrIiwiZW5lcmd5IiwiZW5naW5lZXIiLCJlbmdpbmVlcmluZyIsImVudGVycHJpc2VzIiwiZXBzb24iLCJlcXVpcG1lbnQiLCJlcmljc3NvbiIsImVybmkiLCJlc3EiLCJlc3Rh''@;'; put 'put ''dGUiLCJldXJvdmlzaW9uIiwiZXVzIiwiZXZlbnRzIiwiZXhjaGFuZ2UiLCJleHBlcnQiLCJleHBvc2VkIiwiZXhwcmVzcyIsImV4dHJhc3BhY2UiLCJmYWdlIiwiZmFpbCIsImZhaXJ3aW5kcyIsImZhaXRoIiwiZmFtaWx5IiwiZmFuIiwiZmFucyIsImZhcm0iLCJmYXJtZXJzIiwiZmFzaGlv''@;'; put 'put ''biIsImZhc3QiLCJmZWRleCIsImZlZWRiYWNrIiwiZmVycmFyaSIsImZlcnJlcm8iLCJmaWRlbGl0eSIsImZpZG8iLCJmaWxtIiwiZmluYWwiLCJmaW5hbmNlIiwiZmluYW5jaWFsIiwiZmlyZSIsImZpcmVzdG9uZSIsImZpcm1kYWxlIiwiZmlzaCIsImZpc2hpbmciLCJmaXQiLCJmaXRuZXNz''@;'; put 'put ''IiwiZmxpY2tyIiwiZmxpZ2h0cyIsImZsaXIiLCJmbG9yaXN0IiwiZmxvd2VycyIsImZseSIsImZvbyIsImZvb2QiLCJmb290YmFsbCIsImZvcmQiLCJmb3JleCIsImZvcnNhbGUiLCJmb3J1bSIsImZvdW5kYXRpb24iLCJmb3giLCJmcmVlIiwiZnJlc2VuaXVzIiwiZnJsIiwiZnJvZ2FucyIs''@;'; put 'put ''ImZyb250aWVyIiwiZnRyIiwiZnVqaXRzdSIsImZ1biIsImZ1bmQiLCJmdXJuaXR1cmUiLCJmdXRib2wiLCJmeWkiLCJnYWwiLCJnYWxsZXJ5IiwiZ2FsbG8iLCJnYWxsdXAiLCJnYW1lIiwiZ2FtZXMiLCJnYXAiLCJnYXJkZW4iLCJnYXkiLCJnYml6IiwiZ2RuIiwiZ2VhIiwiZ2VudCIsImdl''@;'; put 'put ''bnRpbmciLCJnZW9yZ2UiLCJnZ2VlIiwiZ2lmdCIsImdpZnRzIiwiZ2l2ZXMiLCJnaXZpbmciLCJnbGFzcyIsImdsZSIsImdsb2JhbCIsImdsb2JvIiwiZ21haWwiLCJnbWJoIiwiZ21vIiwiZ214IiwiZ29kYWRkeSIsImdvbGQiLCJnb2xkcG9pbnQiLCJnb2xmIiwiZ29vIiwiZ29vZHllYXIi''@;'; put 'put ''LCJnb29nIiwiZ29vZ2xlIiwiZ29wIiwiZ290IiwiZ3JhaW5nZXIiLCJncmFwaGljcyIsImdyYXRpcyIsImdyZWVuIiwiZ3JpcGUiLCJncm9jZXJ5IiwiZ3JvdXAiLCJndWNjaSIsImd1Z2UiLCJndWlkZSIsImd1aXRhcnMiLCJndXJ1IiwiaGFpciIsImhhbWJ1cmciLCJoYW5nb3V0IiwiaGF1''@;'; put 'put ''cyIsImhibyIsImhkZmMiLCJoZGZjYmFuayIsImhlYWx0aCIsImhlYWx0aGNhcmUiLCJoZWxwIiwiaGVsc2lua2kiLCJoZXJlIiwiaGVybWVzIiwiaGlwaG9wIiwiaGlzYW1pdHN1IiwiaGl0YWNoaSIsImhpdiIsImhrdCIsImhvY2tleSIsImhvbGRpbmdzIiwiaG9saWRheSIsImhvbWVkZXBv''@;'; put 'put ''dCIsImhvbWVnb29kcyIsImhvbWVzIiwiaG9tZXNlbnNlIiwiaG9uZGEiLCJob3JzZSIsImhvc3BpdGFsIiwiaG9zdCIsImhvc3RpbmciLCJob3QiLCJob3RlbHMiLCJob3RtYWlsIiwiaG91c2UiLCJob3ciLCJoc2JjIiwiaHVnaGVzIiwiaHlhdHQiLCJoeXVuZGFpIiwiaWJtIiwiaWNiYyIs''@;'; put 'put ''ImljZSIsImljdSIsImllZWUiLCJpZm0iLCJpa2FubyIsImltYW1hdCIsImltZGIiLCJpbW1vIiwiaW1tb2JpbGllbiIsImluYyIsImluZHVzdHJpZXMiLCJpbmZpbml0aSIsImluZyIsImluayIsImluc3RpdHV0ZSIsImluc3VyYW5jZSIsImluc3VyZSIsImludGVybmF0aW9uYWwiLCJpbnR1''@;'; put 'put ''aXQiLCJpbnZlc3RtZW50cyIsImlwaXJhbmdhIiwiaXJpc2giLCJpc21haWxpIiwiaXN0IiwiaXN0YW5idWwiLCJpdGF1IiwiaXR2IiwiamFndWFyIiwiamF2YSIsImpjYiIsImplZXAiLCJqZXR6dCIsImpld2VscnkiLCJqaW8iLCJqbGwiLCJqbXAiLCJqbmoiLCJqb2J1cmciLCJqb3QiLCJq''@;'; put 'put ''b3kiLCJqcG1vcmdhbiIsImpwcnMiLCJqdWVnb3MiLCJqdW5pcGVyIiwia2F1ZmVuIiwia2RkaSIsImtlcnJ5aG90ZWxzIiwia2Vycnlsb2dpc3RpY3MiLCJrZXJyeXByb3BlcnRpZXMiLCJrZmgiLCJraWEiLCJraWRzIiwia2ltIiwia2luZGxlIiwia2l0Y2hlbiIsImtpd2kiLCJrb2VsbiIs''@;'; put 'put ''ImtvbWF0c3UiLCJrb3NoZXIiLCJrcG1nIiwia3BuIiwia3JkIiwia3JlZCIsImt1b2tncm91cCIsImt5b3RvIiwibGFjYWl4YSIsImxhbWJvcmdoaW5pIiwibGFtZXIiLCJsYW5jYXN0ZXIiLCJsYW5kIiwibGFuZHJvdmVyIiwibGFueGVzcyIsImxhc2FsbGUiLCJsYXQiLCJsYXRpbm8iLCJs''@;'; put 'put ''YXRyb2JlIiwibGF3IiwibGF3eWVyIiwibGRzIiwibGVhc2UiLCJsZWNsZXJjIiwibGVmcmFrIiwibGVnYWwiLCJsZWdvIiwibGV4dXMiLCJsZ2J0IiwibGlkbCIsImxpZmUiLCJsaWZlaW5zdXJhbmNlIiwibGlmZXN0eWxlIiwibGlnaHRpbmciLCJsaWtlIiwibGlsbHkiLCJsaW1pdGVkIiwi''@;'; put 'put ''bGltbyIsImxpbmNvbG4iLCJsaW5rIiwibGlwc3kiLCJsaXZlIiwibGl2aW5nIiwibGxjIiwibGxwIiwibG9hbiIsImxvYW5zIiwibG9ja2VyIiwibG9jdXMiLCJsb2wiLCJsb25kb24iLCJsb3R0ZSIsImxvdHRvIiwibG92ZSIsImxwbCIsImxwbGZpbmFuY2lhbCIsImx0ZCIsImx0ZGEiLCJs''@;'; put 'put ''dW5kYmVjayIsImx1eGUiLCJsdXh1cnkiLCJtYWRyaWQiLCJtYWlmIiwibWFpc29uIiwibWFrZXVwIiwibWFuIiwibWFuYWdlbWVudCIsIm1hbmdvIiwibWFwIiwibWFya2V0IiwibWFya2V0aW5nIiwibWFya2V0cyIsIm1hcnJpb3R0IiwibWFyc2hhbGxzIiwibWF0dGVsIiwibWJhIiwibWNr''@;'; put 'put ''aW5zZXkiLCJtZWQiLCJtZWRpYSIsIm1lZXQiLCJtZWxib3VybmUiLCJtZW1lIiwibWVtb3JpYWwiLCJtZW4iLCJtZW51IiwibWVyY2siLCJtZXJja21zZCIsIm1pYW1pIiwibWljcm9zb2Z0IiwibWluaSIsIm1pbnQiLCJtaXQiLCJtaXRzdWJpc2hpIiwibWxiIiwibWxzIiwibW1hIiwibW9i''@;'; put 'put ''aWxlIiwibW9kYSIsIm1vZSIsIm1vaSIsIm1vbSIsIm1vbmFzaCIsIm1vbmV5IiwibW9uc3RlciIsIm1vcm1vbiIsIm1vcnRnYWdlIiwibW9zY293IiwibW90byIsIm1vdG9yY3ljbGVzIiwibW92IiwibW92aWUiLCJtc2QiLCJtdG4iLCJtdHIiLCJtdXNpYyIsIm5hYiIsIm5hZ295YSIsIm5h''@;'; put 'put ''dnkiLCJuYmEiLCJuZWMiLCJuZXRiYW5rIiwibmV0ZmxpeCIsIm5ldHdvcmsiLCJuZXVzdGFyIiwibmV3IiwibmV3cyIsIm5leHQiLCJuZXh0ZGlyZWN0IiwibmV4dXMiLCJuZmwiLCJuZ28iLCJuaGsiLCJuaWNvIiwibmlrZSIsIm5pa29uIiwibmluamEiLCJuaXNzYW4iLCJuaXNzYXkiLCJu''@;'; put 'put ''b2tpYSIsIm5vcnRvbiIsIm5vdyIsIm5vd3J1eiIsIm5vd3R2IiwibnJhIiwibnJ3IiwibnR0IiwibnljIiwib2JpIiwib2JzZXJ2ZXIiLCJvZmZpY2UiLCJva2luYXdhIiwib2xheWFuIiwib2xheWFuZ3JvdXAiLCJvbGxvIiwib21lZ2EiLCJvbmUiLCJvbmciLCJvbmwiLCJvbmxpbmUiLCJv''@;'; put 'put ''b28iLCJvcGVuIiwib3JhY2xlIiwib3JhbmdlIiwib3JnYW5pYyIsIm9yaWdpbnMiLCJvc2FrYSIsIm90c3VrYSIsIm90dCIsIm92aCIsInBhZ2UiLCJwYW5hc29uaWMiLCJwYXJpcyIsInBhcnMiLCJwYXJ0bmVycyIsInBhcnRzIiwicGFydHkiLCJwYXkiLCJwY2N3IiwicGV0IiwicGZpemVy''@;'; put 'put ''IiwicGhhcm1hY3kiLCJwaGQiLCJwaGlsaXBzIiwicGhvbmUiLCJwaG90byIsInBob3RvZ3JhcGh5IiwicGhvdG9zIiwicGh5c2lvIiwicGljcyIsInBpY3RldCIsInBpY3R1cmVzIiwicGlkIiwicGluIiwicGluZyIsInBpbmsiLCJwaW9uZWVyIiwicGl6emEiLCJwbGFjZSIsInBsYXkiLCJw''@;'; put 'put ''bGF5c3RhdGlvbiIsInBsdW1iaW5nIiwicGx1cyIsInBuYyIsInBvaGwiLCJwb2tlciIsInBvbGl0aWUiLCJwb3JuIiwicHJhbWVyaWNhIiwicHJheGkiLCJwcmVzcyIsInByaW1lIiwicHJvZCIsInByb2R1Y3Rpb25zIiwicHJvZiIsInByb2dyZXNzaXZlIiwicHJvbW8iLCJwcm9wZXJ0aWVz''@;'; put 'put ''IiwicHJvcGVydHkiLCJwcm90ZWN0aW9uIiwicHJ1IiwicHJ1ZGVudGlhbCIsInB1YiIsInB3YyIsInFwb24iLCJxdWViZWMiLCJxdWVzdCIsInJhY2luZyIsInJhZGlvIiwicmVhZCIsInJlYWxlc3RhdGUiLCJyZWFsdG9yIiwicmVhbHR5IiwicmVjaXBlcyIsInJlZCIsInJlZHN0b25lIiwi''@;'; put 'put ''cmVkdW1icmVsbGEiLCJyZWhhYiIsInJlaXNlIiwicmVpc2VuIiwicmVpdCIsInJlbGlhbmNlIiwicmVuIiwicmVudCIsInJlbnRhbHMiLCJyZXBhaXIiLCJyZXBvcnQiLCJyZXB1YmxpY2FuIiwicmVzdCIsInJlc3RhdXJhbnQiLCJyZXZpZXciLCJyZXZpZXdzIiwicmV4cm90aCIsInJpY2gi''@;'; put 'put ''LCJyaWNoYXJkbGkiLCJyaWNvaCIsInJpbCIsInJpbyIsInJpcCIsInJvY2tzIiwicm9kZW8iLCJyb2dlcnMiLCJyb29tIiwicnN2cCIsInJ1Z2J5IiwicnVociIsInJ1biIsInJ3ZSIsInJ5dWt5dSIsInNhYXJsYW5kIiwic2FmZSIsInNhZmV0eSIsInNha3VyYSIsInNhbGUiLCJzYWxvbiIs''@;'; put 'put ''InNhbXNjbHViIiwic2Ftc3VuZyIsInNhbmR2aWsiLCJzYW5kdmlrY29yb21hbnQiLCJzYW5vZmkiLCJzYXAiLCJzYXJsIiwic2FzIiwic2F2ZSIsInNheG8iLCJzYmkiLCJzYnMiLCJzY2IiLCJzY2hhZWZmbGVyIiwic2NobWlkdCIsInNjaG9sYXJzaGlwcyIsInNjaG9vbCIsInNjaHVsZSIs''@;'; put 'put ''InNjaHdhcnoiLCJzY2llbmNlIiwic2NvdCIsInNlYXJjaCIsInNlYXQiLCJzZWN1cmUiLCJzZWN1cml0eSIsInNlZWsiLCJzZWxlY3QiLCJzZW5lciIsInNlcnZpY2VzIiwic2V2ZW4iLCJzZXciLCJzZXgiLCJzZXh5Iiwic2ZyIiwic2hhbmdyaWxhIiwic2hhcnAiLCJzaGVsbCIsInNoaWEi''@;'; put 'put ''LCJzaGlrc2hhIiwic2hvZXMiLCJzaG9wIiwic2hvcHBpbmciLCJzaG91amkiLCJzaG93Iiwic2lsayIsInNpbmEiLCJzaW5nbGVzIiwic2l0ZSIsInNraSIsInNraW4iLCJza3kiLCJza3lwZSIsInNsaW5nIiwic21hcnQiLCJzbWlsZSIsInNuY2YiLCJzb2NjZXIiLCJzb2NpYWwiLCJzb2Z0''@;'; put 'put ''YmFuayIsInNvZnR3YXJlIiwic29odSIsInNvbGFyIiwic29sdXRpb25zIiwic29uZyIsInNvbnkiLCJzb3kiLCJzcGEiLCJzcGFjZSIsInNwb3J0Iiwic3BvdCIsInNybCIsInN0YWRhIiwic3RhcGxlcyIsInN0YXIiLCJzdGF0ZWJhbmsiLCJzdGF0ZWZhcm0iLCJzdGMiLCJzdGNncm91cCIs''@;'; put 'put ''InN0b2NraG9sbSIsInN0b3JhZ2UiLCJzdG9yZSIsInN0cmVhbSIsInN0dWRpbyIsInN0dWR5Iiwic3R5bGUiLCJzdWNrcyIsInN1cHBsaWVzIiwic3VwcGx5Iiwic3VwcG9ydCIsInN1cmYiLCJzdXJnZXJ5Iiwic3V6dWtpIiwic3dhdGNoIiwic3dpc3MiLCJzeWRuZXkiLCJzeXN0ZW1zIiwi''@;'; put 'put ''dGFiIiwidGFpcGVpIiwidGFsayIsInRhb2JhbyIsInRhcmdldCIsInRhdGFtb3RvcnMiLCJ0YXRhciIsInRhdHRvbyIsInRheCIsInRheGkiLCJ0Y2kiLCJ0ZGsiLCJ0ZWFtIiwidGVjaCIsInRlY2hub2xvZ3kiLCJ0ZW1hc2VrIiwidGVubmlzIiwidGV2YSIsInRoZCIsInRoZWF0ZXIiLCJ0''@;'; put 'put ''aGVhdHJlIiwidGlhYSIsInRpY2tldHMiLCJ0aWVuZGEiLCJ0aXBzIiwidGlyZXMiLCJ0aXJvbCIsInRqbWF4eCIsInRqeCIsInRrbWF4eCIsInRtYWxsIiwidG9kYXkiLCJ0b2t5byIsInRvb2xzIiwidG9wIiwidG9yYXkiLCJ0b3NoaWJhIiwidG90YWwiLCJ0b3VycyIsInRvd24iLCJ0b3lv''@;'; put 'put ''dGEiLCJ0b3lzIiwidHJhZGUiLCJ0cmFkaW5nIiwidHJhaW5pbmciLCJ0cmF2ZWwiLCJ0cmF2ZWxlcnMiLCJ0cmF2ZWxlcnNpbnN1cmFuY2UiLCJ0cnVzdCIsInRydiIsInR1YmUiLCJ0dWkiLCJ0dW5lcyIsInR1c2h1IiwidHZzIiwidWJhbmsiLCJ1YnMiLCJ1bmljb20iLCJ1bml2ZXJzaXR5''@;'; put 'put ''IiwidW5vIiwidW9sIiwidXBzIiwidmFjYXRpb25zIiwidmFuYSIsInZhbmd1YXJkIiwidmVnYXMiLCJ2ZW50dXJlcyIsInZlcmlzaWduIiwidmVyc2ljaGVydW5nIiwidmV0IiwidmlhamVzIiwidmlkZW8iLCJ2aWciLCJ2aWtpbmciLCJ2aWxsYXMiLCJ2aW4iLCJ2aXAiLCJ2aXJnaW4iLCJ2''@;'; put 'put ''aXNhIiwidmlzaW9uIiwidml2YSIsInZpdm8iLCJ2bGFhbmRlcmVuIiwidm9ka2EiLCJ2b2x2byIsInZvdGUiLCJ2b3RpbmciLCJ2b3RvIiwidm95YWdlIiwid2FsZXMiLCJ3YWxtYXJ0Iiwid2FsdGVyIiwid2FuZyIsIndhbmdnb3UiLCJ3YXRjaCIsIndhdGNoZXMiLCJ3ZWF0aGVyIiwid2Vh''@;'; put 'put ''dGhlcmNoYW5uZWwiLCJ3ZWJjYW0iLCJ3ZWJlciIsIndlYnNpdGUiLCJ3ZWQiLCJ3ZWRkaW5nIiwid2VpYm8iLCJ3ZWlyIiwid2hvc3dobyIsIndpZW4iLCJ3aWtpIiwid2lsbGlhbWhpbGwiLCJ3aW4iLCJ3aW5kb3dzIiwid2luZSIsIndpbm5lcnMiLCJ3bWUiLCJ3b2x0ZXJza2x1d2VyIiwi''@;'; put 'put ''d29vZHNpZGUiLCJ3b3JrIiwid29ya3MiLCJ3b3JsZCIsIndvdyIsInd0YyIsInd0ZiIsInhib3giLCJ4ZXJveCIsInhpaHVhbiIsInhpbiIsIlx1MDkxNVx1MDk0OVx1MDkyZSIsIlx1MzBiYlx1MzBmY1x1MzBlYiIsIlx1NGY1Ylx1NWM3MSIsIlx1NjE0OFx1NTU4NCIsIlx1OTZjNlx1NTZl''@;'; put 'put ''MiIsIlx1NTcyOFx1N2ViZiIsIlx1NzBiOVx1NzcwYiIsIlx1MGUwNFx1MGUyZFx1MGUyMSIsIlx1NTE2Ylx1NTM2NiIsIlx1MDY0NVx1MDY0OFx1MDY0Mlx1MDYzOSIsIlx1NTE2Y1x1NzZjYSIsIlx1NTE2Y1x1NTNmOCIsIlx1OTk5OVx1NjgzY1x1OTFjY1x1NjJjOSIsIlx1N2Y1MVx1N2Fk''@;'; put 'put ''OSIsIlx1NzlmYlx1NTJhOCIsIlx1NjIxMVx1NzIzMVx1NGY2MCIsIlx1MDQzY1x1MDQzZVx1MDQ0MVx1MDQzYVx1MDQzMlx1MDQzMCIsIlx1MDQzYVx1MDQzMFx1MDQ0Mlx1MDQzZVx1MDQzYlx1MDQzOFx1MDQzYSIsIlx1MDQzZVx1MDQzZFx1MDQzYlx1MDQzMFx1MDQzOVx1MDQzZCIsIlx1''@;'; put 'put ''MDQ0MVx1MDQzMFx1MDQzOVx1MDQ0MiIsIlx1ODA1NFx1OTAxYSIsIlx1MDVlN1x1MDVkNVx1MDVkZCIsIlx1NjVmNlx1NWMxYSIsIlx1NWZhZVx1NTM1YSIsIlx1NmRlMVx1OWE2Y1x1OTUyMSIsIlx1MzBkNVx1MzBhMVx1MzBjM1x1MzBiN1x1MzBlN1x1MzBmMyIsIlx1MDQzZVx1MDQ0MFx1''@;'; put 'put ''MDQzMyIsIlx1MDkyOFx1MDk0N1x1MDkxZiIsIlx1MzBiOVx1MzBjOFx1MzBhMiIsIlx1MzBhMlx1MzBkZVx1MzBiZVx1MzBmMyIsIlx1YzBiY1x1YzEzMSIsIlx1NTU0Nlx1NjgwNyIsIlx1NTU0Nlx1NWU5NyIsIlx1NTU0Nlx1NTdjZSIsIlx1MDQzNFx1MDQzNVx1MDQ0Mlx1MDQzOCIsIlx1''@;'; put 'put ''MzBkZFx1MzBhNFx1MzBmM1x1MzBjOCIsIlx1NjViMFx1OTVmYiIsIlx1NWJiNlx1OTZmYiIsIlx1MDY0M1x1MDY0OFx1MDY0NSIsIlx1NGUyZFx1NjU4N1x1N2Y1MSIsIlx1NGUyZFx1NGZlMSIsIlx1NWEzMVx1NGU1MCIsIlx1OGMzN1x1NmI0YyIsIlx1OTZmYlx1OGEwYVx1NzZjOFx1Nzlk''@;'; put 'put ''MSIsIlx1OGQyZFx1NzI2OSIsIlx1MzBhZlx1MzBlOVx1MzBhNlx1MzBjOSIsIlx1OTAxYVx1OGNhOSIsIlx1N2Y1MVx1NWU5NyIsIlx1MDkzOFx1MDkwMlx1MDkxN1x1MDkyMFx1MDkyOCIsIlx1OTkxMFx1NTM4NSIsIlx1N2Y1MVx1N2VkYyIsIlx1MDQzYVx1MDQzZVx1MDQzYyIsIlx1NGU5''@;'; put 'put ''YVx1OWE2Y1x1OTAwYSIsIlx1OThkZlx1NTRjMSIsIlx1OThkZVx1NTIyOVx1NmQ2NiIsIlx1NjI0Ylx1NjczYSIsIlx1MDYyN1x1MDYzMVx1MDYyN1x1MDY0NVx1MDY0M1x1MDY0OCIsIlx1MDYyN1x1MDY0NFx1MDYzOVx1MDY0NFx1MDY0YVx1MDYyN1x1MDY0NiIsIlx1MDYyOFx1MDYyN1x1''@;'; put 'put ''MDYzMlx1MDYyN1x1MDYzMSIsIlx1MDYyN1x1MDYyOFx1MDY0OFx1MDYzOFx1MDYyOFx1MDY0YSIsIlx1MDY0M1x1MDYyN1x1MDYyYlx1MDY0OFx1MDY0NFx1MDY0YVx1MDY0MyIsIlx1MDY0N1x1MDY0NVx1MDYzMVx1MDYyN1x1MDY0NyIsIlx1YjJmN1x1Y2VmNCIsIlx1NjUzZlx1NWU5YyIs''@;'; put 'put ''Ilx1MDYzNFx1MDYyOFx1MDY0M1x1MDYyOSIsIlx1MDYyOFx1MDY0YVx1MDYyYVx1MDY0MyIsIlx1MDYzOVx1MDYzMVx1MDYyOCIsIlx1NjczYVx1Njc4NCIsIlx1N2VjNFx1N2VjN1x1NjczYVx1Njc4NCIsIlx1NTA2NVx1NWViNyIsIlx1NjJkYlx1ODA1OCIsIlx1MDQ0MFx1MDQ0M1x1MDQ0''@;'; put 'put ''MSIsIlx1NTkyN1x1NjJmZiIsIlx1MzA3Zlx1MzA5M1x1MzA2YSIsIlx1MzBiMFx1MzBmY1x1MzBiMFx1MzBlYiIsIlx1NGUxNlx1NzU0YyIsIlx1NjZmOFx1N2M0ZCIsIlx1N2Y1MVx1NTc0MCIsIlx1YjJmN1x1YjEzNyIsIlx1MzBiM1x1MzBlMCIsIlx1NTkyOVx1NGUzYlx1NjU1OSIsIlx1''@;'; put 'put ''NmUzOFx1NjIwZiIsInZlcm1ceGY2Z2Vuc2JlcmF0ZXIiLCJ2ZXJtXHhmNmdlbnNiZXJhdHVuZyIsIlx1NGYwMVx1NGUxYSIsIlx1NGZlMVx1NjA2ZiIsIlx1NTYwOVx1OTFjY1x1NTkyN1x1OTE1Mlx1NWU5NyIsIlx1NTYwOVx1OTFjYyIsIlx1NWU3Zlx1NGUxYyIsIlx1NjUzZlx1NTJhMSIs''@;'; put 'put ''Inh5eiIsInlhY2h0cyIsInlhaG9vIiwieWFtYXh1biIsInlhbmRleCIsInlvZG9iYXNoaSIsInlvZ2EiLCJ5b2tvaGFtYSIsInlvdSIsInlvdXR1YmUiLCJ5dW4iLCJ6YXBwb3MiLCJ6YXJhIiwiemVybyIsInppcCIsInpvbmUiLCJ6dWVyaWNoIiwiY28ua3JkIiwiZWR1LmtyZCIsImFydC5w''@;'; put 'put ''bCIsImdsaXdpY2UucGwiLCJrcmFrb3cucGwiLCJwb3puYW4ucGwiLCJ3cm9jLnBsIiwiemFrb3BhbmUucGwiLCJsaWIuZGUudXMiLCIxMmNoYXJzLmRldiIsIjEyY2hhcnMuaXQiLCIxMmNoYXJzLnBybyIsImNjLnVhIiwiaW5mLnVhIiwibHRkLnVhIiwiNjExLnRvIiwiYTJob3N0ZWQuY29t''@;'; put 'put ''IiwiY3BzZXJ2ZXIuY29tIiwiYWFhLnZvZGthIiwiKi5vbi1hY29ybi5pbyIsImFjdGl2ZXRyYWlsLmJpeiIsImFkYXB0YWJsZS5hcHAiLCJhZG9iZWFlbWNsb3VkLmNvbSIsIiouZGV2LmFkb2JlYWVtY2xvdWQuY29tIiwiYWVtLmxpdmUiLCJobHgubGl2ZSIsImFkb2JlYWVtY2xvdWQubmV0''@;'; put 'put ''IiwiYWVtLnBhZ2UiLCJobHgucGFnZSIsImhseDMucGFnZSIsImFkb2JlaW8tc3RhdGljLm5ldCIsImFkb2JlaW9ydW50aW1lLm5ldCIsImFmcmljYS5jb20iLCJiZWVwLnBsIiwiYWlya2l0YXBwcy5jb20iLCJhaXJraXRhcHBzLWF1LmNvbSIsImFpcmtpdGFwcHMuZXUiLCJhaXZlbmNsb3Vk''@;'; put 'put ''LmNvbSIsImFrYWRucy5uZXQiLCJha2FtYWkubmV0IiwiYWthbWFpLXN0YWdpbmcubmV0IiwiYWthbWFpZWRnZS5uZXQiLCJha2FtYWllZGdlLXN0YWdpbmcubmV0IiwiYWthbWFpaGQubmV0IiwiYWthbWFpaGQtc3RhZ2luZy5uZXQiLCJha2FtYWlvcmlnaW4ubmV0IiwiYWthbWFpb3JpZ2lu''@;'; put 'put ''LXN0YWdpbmcubmV0IiwiYWthbWFpemVkLm5ldCIsImFrYW1haXplZC1zdGFnaW5nLm5ldCIsImVkZ2VrZXkubmV0IiwiZWRnZWtleS1zdGFnaW5nLm5ldCIsImVkZ2VzdWl0ZS5uZXQiLCJlZGdlc3VpdGUtc3RhZ2luZy5uZXQiLCJiYXJzeS5jYSIsIiouY29tcHV0ZS5lc3RhdGUiLCIqLmFs''@;'; put 'put ''Y2VzLm5ldHdvcmsiLCJrYXNzZXJ2ZXIuY29tIiwiYWx0ZXJ2aXN0YS5vcmciLCJhbHdheXNkYXRhLm5ldCIsIm15YW1hemUubmV0IiwiZXhlY3V0ZS1hcGkuY24tbm9ydGgtMS5hbWF6b25hd3MuY29tLmNuIiwiZXhlY3V0ZS1hcGkuY24tbm9ydGh3ZXN0LTEuYW1hem9uYXdzLmNvbS5jbiIs''@;'; put 'put ''ImV4ZWN1dGUtYXBpLmFmLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLmFwLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkuYXAtbm9ydGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLmFwLW5vcnRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJl''@;'; put 'put ''eGVjdXRlLWFwaS5hcC1ub3J0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkuYXAtc291dGgtMS5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkuYXAtc291dGgtMi5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkuYXAtc291dGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsImV4''@;'; put 'put ''ZWN1dGUtYXBpLmFwLXNvdXRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS5hcC1zb3V0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkuYXAtc291dGhlYXN0LTQuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLmFwLXNvdXRoZWFzdC01LmFtYXpvbmF3cy5j''@;'; put 'put ''b20iLCJleGVjdXRlLWFwaS5jYS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLmNhLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkuZXUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS5ldS1jZW50cmFsLTIuYW1hem9uYXdzLmNvbSIs''@;'; put 'put ''ImV4ZWN1dGUtYXBpLmV1LW5vcnRoLTEuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLmV1LXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLmV1LXNvdXRoLTIuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLmV1LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1h''@;'; put 'put ''cGkuZXUtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS5ldS13ZXN0LTMuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLmlsLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkubWUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS5tZS1z''@;'; put 'put ''b3V0aC0xLmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS5zYS1lYXN0LTEuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLnVzLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS51cy1nb3YtZWFzdC0xLmFt''@;'; put 'put ''YXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS51cy1nb3Ytd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS51cy13ZXN0LTEuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLnVzLXdlc3QtMi5hbWF6b25hd3MuY29tIiwiY2xvdWRmcm9udC5uZXQiLCJhdXRoLmFmLXNvdXRoLTEu''@;'; put 'put ''YW1hem9uY29nbml0by5jb20iLCJhdXRoLmFwLWVhc3QtMS5hbWF6b25jb2duaXRvLmNvbSIsImF1dGguYXAtbm9ydGhlYXN0LTEuYW1hem9uY29nbml0by5jb20iLCJhdXRoLmFwLW5vcnRoZWFzdC0yLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC5hcC1ub3J0aGVhc3QtMy5hbWF6b25jb2du''@;'; put 'put ''aXRvLmNvbSIsImF1dGguYXAtc291dGgtMS5hbWF6b25jb2duaXRvLmNvbSIsImF1dGguYXAtc291dGgtMi5hbWF6b25jb2duaXRvLmNvbSIsImF1dGguYXAtc291dGhlYXN0LTEuYW1hem9uY29nbml0by5jb20iLCJhdXRoLmFwLXNvdXRoZWFzdC0yLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0''@;'; put 'put ''aC5hcC1zb3V0aGVhc3QtMy5hbWF6b25jb2duaXRvLmNvbSIsImF1dGguYXAtc291dGhlYXN0LTQuYW1hem9uY29nbml0by5jb20iLCJhdXRoLmNhLWNlbnRyYWwtMS5hbWF6b25jb2duaXRvLmNvbSIsImF1dGguY2Etd2VzdC0xLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC5ldS1jZW50cmFs''@;'; put 'put ''LTEuYW1hem9uY29nbml0by5jb20iLCJhdXRoLmV1LWNlbnRyYWwtMi5hbWF6b25jb2duaXRvLmNvbSIsImF1dGguZXUtbm9ydGgtMS5hbWF6b25jb2duaXRvLmNvbSIsImF1dGguZXUtc291dGgtMS5hbWF6b25jb2duaXRvLmNvbSIsImF1dGguZXUtc291dGgtMi5hbWF6b25jb2duaXRvLmNv''@;'; put 'put ''bSIsImF1dGguZXUtd2VzdC0xLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC5ldS13ZXN0LTIuYW1hem9uY29nbml0by5jb20iLCJhdXRoLmV1LXdlc3QtMy5hbWF6b25jb2duaXRvLmNvbSIsImF1dGguaWwtY2VudHJhbC0xLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC5tZS1jZW50cmFsLTEu''@;'; put 'put ''YW1hem9uY29nbml0by5jb20iLCJhdXRoLm1lLXNvdXRoLTEuYW1hem9uY29nbml0by5jb20iLCJhdXRoLnNhLWVhc3QtMS5hbWF6b25jb2duaXRvLmNvbSIsImF1dGgudXMtZWFzdC0xLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC1maXBzLnVzLWVhc3QtMS5hbWF6b25jb2duaXRvLmNvbSIs''@;'; put 'put ''ImF1dGgudXMtZWFzdC0yLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC1maXBzLnVzLWVhc3QtMi5hbWF6b25jb2duaXRvLmNvbSIsImF1dGgtZmlwcy51cy1nb3Ytd2VzdC0xLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC51cy13ZXN0LTEuYW1hem9uY29nbml0by5jb20iLCJhdXRoLWZpcHMu''@;'; put 'put ''dXMtd2VzdC0xLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC51cy13ZXN0LTIuYW1hem9uY29nbml0by5jb20iLCJhdXRoLWZpcHMudXMtd2VzdC0yLmFtYXpvbmNvZ25pdG8uY29tIiwiKi5jb21wdXRlLmFtYXpvbmF3cy5jb20uY24iLCIqLmNvbXB1dGUuYW1hem9uYXdzLmNvbSIsIiouY29t''@;'; put 'put ''cHV0ZS0xLmFtYXpvbmF3cy5jb20iLCJ1cy1lYXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QuY24tbm9ydGgtMS5hbWF6b25hd3MuY29tLmNuIiwiZW1ybm90ZWJvb2tzLXByb2QuY24tbm9ydGgtMS5hbWF6b25hd3MuY29tLmNuIiwiZW1yc3R1ZGlvLXByb2QuY24tbm9ydGgt''@;'; put 'put ''MS5hbWF6b25hd3MuY29tLmNuIiwiZW1yYXBwdWktcHJvZC5jbi1ub3J0aHdlc3QtMS5hbWF6b25hd3MuY29tLmNuIiwiZW1ybm90ZWJvb2tzLXByb2QuY24tbm9ydGh3ZXN0LTEuYW1hem9uYXdzLmNvbS5jbiIsImVtcnN0dWRpby1wcm9kLmNuLW5vcnRod2VzdC0xLmFtYXpvbmF3cy5jb20u''@;'; put 'put ''Y24iLCJlbXJhcHB1aS1wcm9kLmFmLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLmFmLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLmFmLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QuYXAtZWFzdC0xLmFtYXpvbmF3''@;'; put 'put ''cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC5hcC1lYXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLmFwLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC5hcC1ub3J0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2QuYXAtbm9ydGhl''@;'; put 'put ''YXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLmFwLW5vcnRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLmFwLW5vcnRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC5hcC1ub3J0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiZW1y''@;'; put 'put ''c3R1ZGlvLXByb2QuYXAtbm9ydGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QuYXAtbm9ydGhlYXN0LTMuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLmFwLW5vcnRoZWFzdC0zLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC5hcC1ub3J0aGVhc3Qt''@;'; put 'put ''My5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC5hcC1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC5hcC1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC5hcC1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLmFwLXNv''@;'; put 'put ''dXRoLTIuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLmFwLXNvdXRoLTIuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLmFwLXNvdXRoLTIuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QuYXAtc291dGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29r''@;'; put 'put ''cy1wcm9kLmFwLXNvdXRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC5hcC1zb3V0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC5hcC1zb3V0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2QuYXAtc291dGhlYXN0LTIuYW1h''@;'; put 'put ''em9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLmFwLXNvdXRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLmFwLXNvdXRoZWFzdC0zLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC5hcC1zb3V0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXBy''@;'; put 'put ''b2QuYXAtc291dGhlYXN0LTMuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QuYXAtc291dGhlYXN0LTQuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLmFwLXNvdXRoZWFzdC00LmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC5hcC1zb3V0aGVhc3QtNC5hbWF6b25h''@;'; put 'put ''d3MuY29tIiwiZW1yYXBwdWktcHJvZC5jYS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLmNhLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QuY2EtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLmNhLXdlc3Qt''@;'; put 'put ''MS5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2QuY2Etd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC5jYS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QuZXUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC5l''@;'; put 'put ''dS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLmV1LWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC5ldS1jZW50cmFsLTIuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLmV1LWNlbnRyYWwtMi5hbWF6b25hd3MuY29tIiwiZW1y''@;'; put 'put ''c3R1ZGlvLXByb2QuZXUtY2VudHJhbC0yLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLmV1LW5vcnRoLTEuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLmV1LW5vcnRoLTEuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLmV1LW5vcnRoLTEuYW1hem9uYXdzLmNv''@;'; put 'put ''bSIsImVtcmFwcHVpLXByb2QuZXUtc291dGgtMS5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2QuZXUtc291dGgtMS5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QuZXUtc291dGgtMS5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC5ldS1zb3V0aC0yLmFtYXpvbmF3''@;'; put 'put ''cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC5ldS1zb3V0aC0yLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC5ldS1zb3V0aC0yLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLmV1LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2QuZXUtd2VzdC0xLmFt''@;'; put 'put ''YXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC5ldS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QuZXUtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC5ldS13ZXN0LTIuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLmV1LXdlc3QtMi5h''@;'; put 'put ''bWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC5ldS13ZXN0LTMuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLmV1LXdlc3QtMy5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QuZXUtd2VzdC0zLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLmlsLWNlbnRyYWwt''@;'; put 'put ''MS5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2QuaWwtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC5pbC1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QubWUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3Mt''@;'; put 'put ''cHJvZC5tZS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLm1lLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC5tZS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC5tZS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJl''@;'; put 'put ''bXJzdHVkaW8tcHJvZC5tZS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLnNhLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2Quc2EtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC5zYS1lYXN0LTEuYW1hem9uYXdzLmNvbSIs''@;'; put 'put ''ImVtcmFwcHVpLXByb2QudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC51cy1lYXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLnVzLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSIs''@;'; put 'put ''ImVtcm5vdGVib29rcy1wcm9kLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLnVzLWdvdi1lYXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLnVzLWdvdi1lYXN0LTEuYW1h''@;'; put 'put ''em9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLnVzLWdvdi1lYXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QudXMtZ292LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2QudXMtZ292LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2Qu''@;'; put 'put ''dXMtZ292LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC51cy13ZXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLnVzLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QudXMtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1w''@;'; put 'put ''cm9kLnVzLXdlc3QtMi5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2QudXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC51cy13ZXN0LTIuYW1hem9uYXdzLmNvbSIsIiouY24tbm9ydGgtMS5haXJmbG93LmFtYXpvbmF3cy5jb20uY24iLCIqLmNuLW5vcnRo''@;'; put 'put ''d2VzdC0xLmFpcmZsb3cuYW1hem9uYXdzLmNvbS5jbiIsIiouYWYtc291dGgtMS5haXJmbG93LmFtYXpvbmF3cy5jb20iLCIqLmFwLWVhc3QtMS5haXJmbG93LmFtYXpvbmF3cy5jb20iLCIqLmFwLW5vcnRoZWFzdC0xLmFpcmZsb3cuYW1hem9uYXdzLmNvbSIsIiouYXAtbm9ydGhlYXN0LTIu''@;'; put 'put ''YWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5hcC1ub3J0aGVhc3QtMy5haXJmbG93LmFtYXpvbmF3cy5jb20iLCIqLmFwLXNvdXRoLTEuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5hcC1zb3V0aC0yLmFpcmZsb3cuYW1hem9uYXdzLmNvbSIsIiouYXAtc291dGhlYXN0LTEuYWlyZmxvdy5h''@;'; put 'put ''bWF6b25hd3MuY29tIiwiKi5hcC1zb3V0aGVhc3QtMi5haXJmbG93LmFtYXpvbmF3cy5jb20iLCIqLmFwLXNvdXRoZWFzdC0zLmFpcmZsb3cuYW1hem9uYXdzLmNvbSIsIiouYXAtc291dGhlYXN0LTQuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5jYS1jZW50cmFsLTEuYWlyZmxvdy5hbWF6''@;'; put 'put ''b25hd3MuY29tIiwiKi5jYS13ZXN0LTEuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5ldS1jZW50cmFsLTEuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5ldS1jZW50cmFsLTIuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5ldS1ub3J0aC0xLmFpcmZsb3cuYW1hem9uYXdzLmNvbSIsIiou''@;'; put 'put ''ZXUtc291dGgtMS5haXJmbG93LmFtYXpvbmF3cy5jb20iLCIqLmV1LXNvdXRoLTIuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5ldS13ZXN0LTEuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5ldS13ZXN0LTIuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5ldS13ZXN0LTMuYWlyZmxvdy5h''@;'; put 'put ''bWF6b25hd3MuY29tIiwiKi5pbC1jZW50cmFsLTEuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5tZS1jZW50cmFsLTEuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5tZS1zb3V0aC0xLmFpcmZsb3cuYW1hem9uYXdzLmNvbSIsIiouc2EtZWFzdC0xLmFpcmZsb3cuYW1hem9uYXdzLmNvbSIs''@;'; put 'put ''IioudXMtZWFzdC0xLmFpcmZsb3cuYW1hem9uYXdzLmNvbSIsIioudXMtZWFzdC0yLmFpcmZsb3cuYW1hem9uYXdzLmNvbSIsIioudXMtd2VzdC0xLmFpcmZsb3cuYW1hem9uYXdzLmNvbSIsIioudXMtd2VzdC0yLmFpcmZsb3cuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5jbi1ub3J0''@;'; put 'put ''aC0xLmFtYXpvbmF3cy5jb20uY24iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2suY24tbm9ydGgtMS5hbWF6b25hd3MuY29tLmNuIiwiczMtd2Vic2l0ZS5kdWFsc3RhY2suY24tbm9ydGgtMS5hbWF6b25hd3MuY29tLmNuIiwiczMuY24tbm9ydGgtMS5hbWF6b25hd3MuY29tLmNuIiwiczMt''@;'; put 'put ''YWNjZXNzcG9pbnQuY24tbm9ydGgtMS5hbWF6b25hd3MuY29tLmNuIiwiczMtZGVwcmVjYXRlZC5jbi1ub3J0aC0xLmFtYXpvbmF3cy5jb20uY24iLCJzMy1vYmplY3QtbGFtYmRhLmNuLW5vcnRoLTEuYW1hem9uYXdzLmNvbS5jbiIsInMzLXdlYnNpdGUuY24tbm9ydGgtMS5hbWF6b25hd3Mu''@;'; put 'put ''Y29tLmNuIiwiczMuZHVhbHN0YWNrLmNuLW5vcnRod2VzdC0xLmFtYXpvbmF3cy5jb20uY24iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2suY24tbm9ydGh3ZXN0LTEuYW1hem9uYXdzLmNvbS5jbiIsInMzLmNuLW5vcnRod2VzdC0xLmFtYXpvbmF3cy5jb20uY24iLCJzMy1hY2Nlc3Nwb2lu''@;'; put 'put ''dC5jbi1ub3J0aHdlc3QtMS5hbWF6b25hd3MuY29tLmNuIiwiczMtb2JqZWN0LWxhbWJkYS5jbi1ub3J0aHdlc3QtMS5hbWF6b25hd3MuY29tLmNuIiwiczMtd2Vic2l0ZS5jbi1ub3J0aHdlc3QtMS5hbWF6b25hd3MuY29tLmNuIiwiczMuZHVhbHN0YWNrLmFmLXNvdXRoLTEuYW1hem9uYXdz''@;'; put 'put ''LmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay5hZi1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay5hZi1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy5hZi1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5hZi1zb3V0aC0xLmFt''@;'; put 'put ''YXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLmFmLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuYWYtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmFwLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLmFwLWVh''@;'; put 'put ''c3QtMS5hbWF6b25hd3MuY29tIiwiczMuYXAtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5hcC1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEuYXAtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmFwLWVhc3QtMS5hbWF6b25hd3Mu''@;'; put 'put ''Y29tIiwiczMuZHVhbHN0YWNrLmFwLW5vcnRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2suYXAtbm9ydGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZHVhbHN0YWNrLmFwLW5vcnRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy5hcC1u''@;'; put 'put ''b3J0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuYXAtbm9ydGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEuYXAtbm9ydGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuYXAtbm9ydGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsInMz''@;'; put 'put ''LmR1YWxzdGFjay5hcC1ub3J0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLmFwLW5vcnRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay5hcC1ub3J0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMuYXAtbm9ydGhlYXN0''@;'; put 'put ''LTIuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmFwLW5vcnRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLmFwLW5vcnRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmFwLW5vcnRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3Rh''@;'; put 'put ''Y2suYXAtbm9ydGhlYXN0LTMuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay5hcC1ub3J0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5kdWFsc3RhY2suYXAtbm9ydGhlYXN0LTMuYW1hem9uYXdzLmNvbSIsInMzLmFwLW5vcnRoZWFzdC0zLmFtYXpv''@;'; put 'put ''bmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5hcC1ub3J0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS5hcC1ub3J0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5hcC1ub3J0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmFwLXNv''@;'; put 'put ''dXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay5hcC1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay5hcC1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy5hcC1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2lu''@;'; put 'put ''dC5hcC1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLmFwLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuYXAtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmFwLXNvdXRoLTIuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50''@;'; put 'put ''LmR1YWxzdGFjay5hcC1zb3V0aC0yLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay5hcC1zb3V0aC0yLmFtYXpvbmF3cy5jb20iLCJzMy5hcC1zb3V0aC0yLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5hcC1zb3V0aC0yLmFtYXpvbmF3cy5jb20iLCJzMy1vYmpl''@;'; put 'put ''Y3QtbGFtYmRhLmFwLXNvdXRoLTIuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuYXAtc291dGgtMi5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmFwLXNvdXRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2suYXAtc291dGhlYXN0LTEuYW1hem9u''@;'; put 'put ''YXdzLmNvbSIsInMzLXdlYnNpdGUuZHVhbHN0YWNrLmFwLXNvdXRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy5hcC1zb3V0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuYXAtc291dGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEuYXAtc291''@;'; put 'put ''dGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuYXAtc291dGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5hcC1zb3V0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLmFwLXNvdXRoZWFzdC0yLmFtYXpvbmF3cy5jb20i''@;'; put 'put ''LCJzMy13ZWJzaXRlLmR1YWxzdGFjay5hcC1zb3V0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMuYXAtc291dGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmFwLXNvdXRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLmFwLXNvdXRoZWFzdC0y''@;'; put 'put ''LmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmFwLXNvdXRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2suYXAtc291dGhlYXN0LTMuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay5hcC1zb3V0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwiczMtd2Vi''@;'; put 'put ''c2l0ZS5kdWFsc3RhY2suYXAtc291dGhlYXN0LTMuYW1hem9uYXdzLmNvbSIsInMzLmFwLXNvdXRoZWFzdC0zLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5hcC1zb3V0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS5hcC1zb3V0aGVhc3QtMy5hbWF6b25h''@;'; put 'put ''d3MuY29tIiwiczMtd2Vic2l0ZS5hcC1zb3V0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmFwLXNvdXRoZWFzdC00LmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2suYXAtc291dGhlYXN0LTQuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZHVh''@;'; put 'put ''bHN0YWNrLmFwLXNvdXRoZWFzdC00LmFtYXpvbmF3cy5jb20iLCJzMy5hcC1zb3V0aGVhc3QtNC5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuYXAtc291dGhlYXN0LTQuYW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEuYXAtc291dGhlYXN0LTQuYW1hem9uYXdzLmNvbSIs''@;'; put 'put ''InMzLXdlYnNpdGUuYXAtc291dGhlYXN0LTQuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5hcC1zb3V0aGVhc3QtNS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLmFwLXNvdXRoZWFzdC01LmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay5h''@;'; put 'put ''cC1zb3V0aGVhc3QtNS5hbWF6b25hd3MuY29tIiwiczMuYXAtc291dGhlYXN0LTUuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmFwLXNvdXRoZWFzdC01LmFtYXpvbmF3cy5jb20iLCJzMy1kZXByZWNhdGVkLmFwLXNvdXRoZWFzdC01LmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3Qt''@;'; put 'put ''bGFtYmRhLmFwLXNvdXRoZWFzdC01LmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmFwLXNvdXRoZWFzdC01LmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2suY2EtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2suY2EtY2VudHJhbC0xLmFtYXpv''@;'; put 'put ''bmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC1maXBzLmR1YWxzdGFjay5jYS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLWZpcHMuZHVhbHN0YWNrLmNhLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5kdWFsc3RhY2suY2EtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20i''@;'; put 'put ''LCJzMy5jYS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmNhLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQtZmlwcy5jYS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLWZpcHMuY2EtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJz''@;'; put 'put ''My1vYmplY3QtbGFtYmRhLmNhLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5jYS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5jYS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay5jYS13ZXN0LTEuYW1hem9u''@;'; put 'put ''YXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LWZpcHMuZHVhbHN0YWNrLmNhLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtZmlwcy5kdWFsc3RhY2suY2Etd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay5jYS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLmNhLXdl''@;'; put 'put ''c3QtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuY2Etd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC1maXBzLmNhLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtZmlwcy5jYS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEuY2Etd2Vz''@;'; put 'put ''dC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmNhLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmV1LWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLmV1LWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5k''@;'; put 'put ''dWFsc3RhY2suZXUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy5ldS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmV1LWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS5ldS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLXdl''@;'; put 'put ''YnNpdGUuZXUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2suZXUtY2VudHJhbC0yLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2suZXUtY2VudHJhbC0yLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay5ldS1jZW50cmFsLTIu''@;'; put 'put ''YW1hem9uYXdzLmNvbSIsInMzLmV1LWNlbnRyYWwtMi5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZXUtY2VudHJhbC0yLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLmV1LWNlbnRyYWwtMi5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5ldS1jZW50cmFsLTIuYW1h''@;'; put 'put ''em9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5ldS1ub3J0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2suZXUtbm9ydGgtMS5hbWF6b25hd3MuY29tIiwiczMuZXUtbm9ydGgtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZXUtbm9ydGgtMS5hbWF6''@;'; put 'put ''b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS5ldS1ub3J0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmV1LW5vcnRoLTEuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5ldS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2suZXUtc291''@;'; put 'put ''dGgtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5kdWFsc3RhY2suZXUtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMuZXUtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZXUtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS5ldS1zb3V0''@;'; put 'put ''aC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmV1LXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5ldS1zb3V0aC0yLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2suZXUtc291dGgtMi5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5kdWFs''@;'; put 'put ''c3RhY2suZXUtc291dGgtMi5hbWF6b25hd3MuY29tIiwiczMuZXUtc291dGgtMi5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZXUtc291dGgtMi5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS5ldS1zb3V0aC0yLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmV1LXNv''@;'; put 'put ''dXRoLTIuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5ldS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay5ldS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZHVhbHN0YWNrLmV1LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMuZXUt''@;'; put 'put ''d2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5ldS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWRlcHJlY2F0ZWQuZXUtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLmV1LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5ldS13ZXN0''@;'; put 'put ''LTEuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5ldS13ZXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay5ldS13ZXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLmV1LXdlc3QtMi5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZXUtd2VzdC0yLmFt''@;'; put 'put ''YXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLmV1LXdlc3QtMi5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5ldS13ZXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5ldS13ZXN0LTMuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay5ldS13ZXN0''@;'; put 'put ''LTMuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZHVhbHN0YWNrLmV1LXdlc3QtMy5hbWF6b25hd3MuY29tIiwiczMuZXUtd2VzdC0zLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5ldS13ZXN0LTMuYW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEuZXUtd2VzdC0zLmFt''@;'; put 'put ''YXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmV1LXdlc3QtMy5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmlsLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLmlsLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5kdWFsc3Rh''@;'; put 'put ''Y2suaWwtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy5pbC1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmlsLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS5pbC1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUu''@;'; put 'put ''aWwtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2subWUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2subWUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay5tZS1jZW50cmFsLTEuYW1hem9u''@;'; put 'put ''YXdzLmNvbSIsInMzLm1lLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQubWUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLm1lLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5tZS1jZW50cmFsLTEuYW1hem9uYXdz''@;'; put 'put ''LmNvbSIsInMzLmR1YWxzdGFjay5tZS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2subWUtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMubWUtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQubWUtc291dGgtMS5hbWF6b25hd3Mu''@;'; put 'put ''Y29tIiwiczMtb2JqZWN0LWxhbWJkYS5tZS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLm1lLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLmFtYXpvbmF3cy5jb20iLCJzMy0xLmFtYXpvbmF3cy5jb20iLCJzMy1hcC1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFwLW5v''@;'; put 'put ''cnRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hcC1ub3J0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMtYXAtbm9ydGhlYXN0LTMuYW1hem9uYXdzLmNvbSIsInMzLWFwLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLWFwLXNvdXRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hcC1z''@;'; put 'put ''b3V0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMtY2EtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy1ldS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLWV1LW5vcnRoLTEuYW1hem9uYXdzLmNvbSIsInMzLWV1LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtZXUtd2VzdC0yLmFt''@;'; put 'put ''YXpvbmF3cy5jb20iLCJzMy1ldS13ZXN0LTMuYW1hem9uYXdzLmNvbSIsInMzLWV4dGVybmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLWZpcHMtdXMtZ292LWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtZmlwcy11cy1nb3Ytd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJtcmFwLmFjY2Vzc3BvaW50''@;'; put 'put ''LnMzLWdsb2JhbC5hbWF6b25hd3MuY29tIiwiczMtbWUtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMtc2EtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy11cy1lYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLXVzLWdvdi1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXVzLWdvdi13ZXN0LTEu''@;'; put 'put ''YW1hem9uYXdzLmNvbSIsInMzLXVzLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtdXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLWFwLW5vcnRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLWFwLXNvdXRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJz''@;'; put 'put ''aXRlLWFwLXNvdXRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLWV1LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS1zYS1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUtdXMtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLXVzLWdvdi13''@;'; put 'put ''ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUtdXMtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLXVzLXdlc3QtMi5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLnNhLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLnNhLWVh''@;'; put 'put ''c3QtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5kdWFsc3RhY2suc2EtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy5zYS1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LnNhLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS5zYS1lYXN0LTEu''@;'; put 'put ''YW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuc2EtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2sudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2sudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC1maXBzLmR1''@;'; put 'put ''YWxzdGFjay51cy1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWZpcHMuZHVhbHN0YWNrLnVzLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5kdWFsc3RhY2sudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy51cy1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3Bv''@;'; put 'put ''aW50LnVzLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQtZmlwcy51cy1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWRlcHJlY2F0ZWQudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1maXBzLnVzLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJk''@;'; put 'put ''YS51cy1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2sudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2sudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nw''@;'; put 'put ''b2ludC1maXBzLmR1YWxzdGFjay51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLWZpcHMuZHVhbHN0YWNrLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5kdWFsc3RhY2sudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSIs''@;'; put 'put ''InMzLWFjY2Vzc3BvaW50LnVzLWVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQtZmlwcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLWRlcHJlY2F0ZWQudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1maXBzLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMt''@;'; put 'put ''b2JqZWN0LWxhbWJkYS51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2sudXMtZ292LWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLnVzLWdvdi1lYXN0LTEuYW1hem9u''@;'; put 'put ''YXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LWZpcHMuZHVhbHN0YWNrLnVzLWdvdi1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWZpcHMuZHVhbHN0YWNrLnVzLWdvdi1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLnVzLWdvdi1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50''@;'; put 'put ''LnVzLWdvdi1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LWZpcHMudXMtZ292LWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtZmlwcy51cy1nb3YtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLnVzLWdvdi1lYXN0LTEuYW1hem9uYXdzLmNvbSIs''@;'; put 'put ''InMzLXdlYnNpdGUudXMtZ292LWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLnVzLWdvdi13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay51cy1nb3Ytd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC1maXBzLmR1YWxz''@;'; put 'put ''dGFjay51cy1nb3Ytd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1maXBzLmR1YWxzdGFjay51cy1nb3Ytd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy51cy1nb3Ytd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC51cy1nb3Ytd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1h''@;'; put 'put ''Y2Nlc3Nwb2ludC1maXBzLnVzLWdvdi13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWZpcHMudXMtZ292LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS51cy1nb3Ytd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLnVzLWdvdi13ZXN0LTEuYW1hem9uYXdz''@;'; put 'put ''LmNvbSIsInMzLmR1YWxzdGFjay51cy13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay51cy13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LWZpcHMuZHVhbHN0YWNrLnVzLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtZmlwcy5kdWFs''@;'; put 'put ''c3RhY2sudXMtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay51cy13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLnVzLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQudXMtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC1m''@;'; put 'put ''aXBzLnVzLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtZmlwcy51cy13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEudXMtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLnVzLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLnVzLXdlc3Qt''@;'; put 'put ''Mi5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLnVzLXdlc3QtMi5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQtZmlwcy5kdWFsc3RhY2sudXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1maXBzLmR1YWxzdGFjay51cy13ZXN0LTIuYW1hem9uYXdzLmNv''@;'; put 'put ''bSIsInMzLXdlYnNpdGUuZHVhbHN0YWNrLnVzLXdlc3QtMi5hbWF6b25hd3MuY29tIiwiczMudXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC51cy13ZXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LWZpcHMudXMtd2VzdC0yLmFtYXpvbmF3cy5jb20i''@;'; put 'put ''LCJzMy1kZXByZWNhdGVkLnVzLXdlc3QtMi5hbWF6b25hd3MuY29tIiwiczMtZmlwcy51cy13ZXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEudXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLnVzLXdlc3QtMi5hbWF6b25hd3MuY29tIiwibGFiZWxpbmcu''@;'; put 'put ''YXAtbm9ydGhlYXN0LTEuc2FnZW1ha2VyLmF3cyIsImxhYmVsaW5nLmFwLW5vcnRoZWFzdC0yLnNhZ2VtYWtlci5hd3MiLCJsYWJlbGluZy5hcC1zb3V0aC0xLnNhZ2VtYWtlci5hd3MiLCJsYWJlbGluZy5hcC1zb3V0aGVhc3QtMS5zYWdlbWFrZXIuYXdzIiwibGFiZWxpbmcuYXAtc291dGhl''@;'; put 'put ''YXN0LTIuc2FnZW1ha2VyLmF3cyIsImxhYmVsaW5nLmNhLWNlbnRyYWwtMS5zYWdlbWFrZXIuYXdzIiwibGFiZWxpbmcuZXUtY2VudHJhbC0xLnNhZ2VtYWtlci5hd3MiLCJsYWJlbGluZy5ldS13ZXN0LTEuc2FnZW1ha2VyLmF3cyIsImxhYmVsaW5nLmV1LXdlc3QtMi5zYWdlbWFrZXIuYXdz''@;'; put 'put ''IiwibGFiZWxpbmcudXMtZWFzdC0xLnNhZ2VtYWtlci5hd3MiLCJsYWJlbGluZy51cy1lYXN0LTIuc2FnZW1ha2VyLmF3cyIsImxhYmVsaW5nLnVzLXdlc3QtMi5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2suYWYtc291dGgtMS5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2suYXAtZWFzdC0xLnNh''@;'; put 'put ''Z2VtYWtlci5hd3MiLCJub3RlYm9vay5hcC1ub3J0aGVhc3QtMS5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2suYXAtbm9ydGhlYXN0LTIuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLmFwLW5vcnRoZWFzdC0zLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay5hcC1zb3V0aC0xLnNhZ2VtYWtlci5h''@;'; put 'put ''d3MiLCJub3RlYm9vay5hcC1zb3V0aC0yLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay5hcC1zb3V0aGVhc3QtMS5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2suYXAtc291dGhlYXN0LTIuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLmFwLXNvdXRoZWFzdC0zLnNhZ2VtYWtlci5hd3MiLCJub3Rl''@;'; put 'put ''Ym9vay5hcC1zb3V0aGVhc3QtNC5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2suY2EtY2VudHJhbC0xLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay1maXBzLmNhLWNlbnRyYWwtMS5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2suY2Etd2VzdC0xLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay1maXBz''@;'; put 'put ''LmNhLXdlc3QtMS5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2suZXUtY2VudHJhbC0xLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay5ldS1jZW50cmFsLTIuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLmV1LW5vcnRoLTEuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLmV1LXNvdXRoLTEuc2FnZW1h''@;'; put 'put ''a2VyLmF3cyIsIm5vdGVib29rLmV1LXNvdXRoLTIuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLmV1LXdlc3QtMS5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2suZXUtd2VzdC0yLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay5ldS13ZXN0LTMuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLmlsLWNl''@;'; put 'put ''bnRyYWwtMS5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2subWUtY2VudHJhbC0xLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay5tZS1zb3V0aC0xLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay5zYS1lYXN0LTEuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLnVzLWVhc3QtMS5zYWdlbWFrZXIuYXdz''@;'; put 'put ''Iiwibm90ZWJvb2stZmlwcy51cy1lYXN0LTEuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLnVzLWVhc3QtMi5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2stZmlwcy51cy1lYXN0LTIuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLnVzLWdvdi1lYXN0LTEuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29r''@;'; put 'put ''LWZpcHMudXMtZ292LWVhc3QtMS5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2sudXMtZ292LXdlc3QtMS5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2stZmlwcy51cy1nb3Ytd2VzdC0xLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay51cy13ZXN0LTEuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLWZp''@;'; put 'put ''cHMudXMtd2VzdC0xLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay51cy13ZXN0LTIuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLWZpcHMudXMtd2VzdC0yLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay5jbi1ub3J0aC0xLnNhZ2VtYWtlci5jb20uY24iLCJub3RlYm9vay5jbi1ub3J0aHdlc3Qt''@;'; put 'put ''MS5zYWdlbWFrZXIuY29tLmNuIiwic3R1ZGlvLmFmLXNvdXRoLTEuc2FnZW1ha2VyLmF3cyIsInN0dWRpby5hcC1lYXN0LTEuc2FnZW1ha2VyLmF3cyIsInN0dWRpby5hcC1ub3J0aGVhc3QtMS5zYWdlbWFrZXIuYXdzIiwic3R1ZGlvLmFwLW5vcnRoZWFzdC0yLnNhZ2VtYWtlci5hd3MiLCJz''@;'; put 'put ''dHVkaW8uYXAtbm9ydGhlYXN0LTMuc2FnZW1ha2VyLmF3cyIsInN0dWRpby5hcC1zb3V0aC0xLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8uYXAtc291dGhlYXN0LTEuc2FnZW1ha2VyLmF3cyIsInN0dWRpby5hcC1zb3V0aGVhc3QtMi5zYWdlbWFrZXIuYXdzIiwic3R1ZGlvLmFwLXNvdXRoZWFz''@;'; put 'put ''dC0zLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8uY2EtY2VudHJhbC0xLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8uZXUtY2VudHJhbC0xLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8uZXUtbm9ydGgtMS5zYWdlbWFrZXIuYXdzIiwic3R1ZGlvLmV1LXNvdXRoLTEuc2FnZW1ha2VyLmF3cyIsInN0dWRp''@;'; put 'put ''by5ldS1zb3V0aC0yLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8uZXUtd2VzdC0xLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8uZXUtd2VzdC0yLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8uZXUtd2VzdC0zLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8uaWwtY2VudHJhbC0xLnNhZ2VtYWtlci5hd3MiLCJz''@;'; put 'put ''dHVkaW8ubWUtY2VudHJhbC0xLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8ubWUtc291dGgtMS5zYWdlbWFrZXIuYXdzIiwic3R1ZGlvLnNhLWVhc3QtMS5zYWdlbWFrZXIuYXdzIiwic3R1ZGlvLnVzLWVhc3QtMS5zYWdlbWFrZXIuYXdzIiwic3R1ZGlvLnVzLWVhc3QtMi5zYWdlbWFrZXIuYXdz''@;'; put 'put ''Iiwic3R1ZGlvLnVzLWdvdi1lYXN0LTEuc2FnZW1ha2VyLmF3cyIsInN0dWRpby1maXBzLnVzLWdvdi1lYXN0LTEuc2FnZW1ha2VyLmF3cyIsInN0dWRpby51cy1nb3Ytd2VzdC0xLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8tZmlwcy51cy1nb3Ytd2VzdC0xLnNhZ2VtYWtlci5hd3MiLCJzdHVk''@;'; put 'put ''aW8udXMtd2VzdC0xLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8udXMtd2VzdC0yLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8uY24tbm9ydGgtMS5zYWdlbWFrZXIuY29tLmNuIiwic3R1ZGlvLmNuLW5vcnRod2VzdC0xLnNhZ2VtYWtlci5jb20uY24iLCIqLmV4cGVyaW1lbnRzLnNhZ2VtYWtlci5h''@;'; put 'put ''d3MiLCJhbmFseXRpY3MtZ2F0ZXdheS5hcC1ub3J0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwiYW5hbHl0aWNzLWdhdGV3YXkuYXAtbm9ydGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsImFuYWx5dGljcy1nYXRld2F5LmFwLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsImFuYWx5dGljcy1nYXRld2F5''@;'; put 'put ''LmFwLXNvdXRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJhbmFseXRpY3MtZ2F0ZXdheS5hcC1zb3V0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiYW5hbHl0aWNzLWdhdGV3YXkuZXUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJhbmFseXRpY3MtZ2F0ZXdheS5ldS13ZXN0LTEuYW1hem9uYXdz''@;'; put 'put ''LmNvbSIsImFuYWx5dGljcy1nYXRld2F5LnVzLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiYW5hbHl0aWNzLWdhdGV3YXkudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJhbmFseXRpY3MtZ2F0ZXdheS51cy13ZXN0LTIuYW1hem9uYXdzLmNvbSIsImFtcGxpZnlhcHAuY29tIiwiKi5hd3NhcHBy''@;'; put 'put ''dW5uZXIuY29tIiwid2Vidmlldy1hc3NldHMuYXdzLWNsb3VkOS5hZi1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJ2ZnMuY2xvdWQ5LmFmLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmNsb3VkOS5hZi1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0''@;'; put 'put ''cy5hd3MtY2xvdWQ5LmFwLWVhc3QtMS5hbWF6b25hd3MuY29tIiwidmZzLmNsb3VkOS5hcC1lYXN0LTEuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmNsb3VkOS5hcC1lYXN0LTEuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmF3cy1jbG91ZDkuYXAtbm9ydGhlYXN0LTEu''@;'; put 'put ''YW1hem9uYXdzLmNvbSIsInZmcy5jbG91ZDkuYXAtbm9ydGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmNsb3VkOS5hcC1ub3J0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuYXdzLWNsb3VkOS5hcC1ub3J0aGVhc3QtMi5hbWF6b25hd3MuY29t''@;'; put 'put ''IiwidmZzLmNsb3VkOS5hcC1ub3J0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuY2xvdWQ5LmFwLW5vcnRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5hd3MtY2xvdWQ5LmFwLW5vcnRoZWFzdC0zLmFtYXpvbmF3cy5jb20iLCJ2ZnMuY2xvdWQ5''@;'; put 'put ''LmFwLW5vcnRoZWFzdC0zLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5jbG91ZDkuYXAtbm9ydGhlYXN0LTMuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmF3cy1jbG91ZDkuYXAtc291dGgtMS5hbWF6b25hd3MuY29tIiwidmZzLmNsb3VkOS5hcC1zb3V0aC0xLmFtYXpv''@;'; put 'put ''bmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5jbG91ZDkuYXAtc291dGgtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuYXdzLWNsb3VkOS5hcC1zb3V0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwidmZzLmNsb3VkOS5hcC1zb3V0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwid2Vidmll''@;'; put 'put ''dy1hc3NldHMuY2xvdWQ5LmFwLXNvdXRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5hd3MtY2xvdWQ5LmFwLXNvdXRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJ2ZnMuY2xvdWQ5LmFwLXNvdXRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5jbG91''@;'; put 'put ''ZDkuYXAtc291dGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmF3cy1jbG91ZDkuY2EtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJ2ZnMuY2xvdWQ5LmNhLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuY2xvdWQ5LmNhLWNlbnRyYWwtMS5h''@;'; put 'put ''bWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuYXdzLWNsb3VkOS5ldS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInZmcy5jbG91ZDkuZXUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5jbG91ZDkuZXUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2''@;'; put 'put ''aWV3LWFzc2V0cy5hd3MtY2xvdWQ5LmV1LW5vcnRoLTEuYW1hem9uYXdzLmNvbSIsInZmcy5jbG91ZDkuZXUtbm9ydGgtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuY2xvdWQ5LmV1LW5vcnRoLTEuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmF3cy1jbG91ZDkuZXUt''@;'; put 'put ''c291dGgtMS5hbWF6b25hd3MuY29tIiwidmZzLmNsb3VkOS5ldS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5jbG91ZDkuZXUtc291dGgtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuYXdzLWNsb3VkOS5ldS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInZm''@;'; put 'put ''cy5jbG91ZDkuZXUtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5jbG91ZDkuZXUtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5hd3MtY2xvdWQ5LmV1LXdlc3QtMi5hbWF6b25hd3MuY29tIiwidmZzLmNsb3VkOS5ldS13ZXN0LTIuYW1hem9uYXdz''@;'; put 'put ''LmNvbSIsIndlYnZpZXctYXNzZXRzLmNsb3VkOS5ldS13ZXN0LTIuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmF3cy1jbG91ZDkuZXUtd2VzdC0zLmFtYXpvbmF3cy5jb20iLCJ2ZnMuY2xvdWQ5LmV1LXdlc3QtMy5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuY2xvdWQ5''@;'; put 'put ''LmV1LXdlc3QtMy5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuYXdzLWNsb3VkOS5pbC1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInZmcy5jbG91ZDkuaWwtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5hd3MtY2xvdWQ5Lm1lLXNvdXRoLTEuYW1hem9u''@;'; put 'put ''YXdzLmNvbSIsInZmcy5jbG91ZDkubWUtc291dGgtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuY2xvdWQ5Lm1lLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmF3cy1jbG91ZDkuc2EtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJ2ZnMuY2xvdWQ5LnNhLWVh''@;'; put 'put ''c3QtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuY2xvdWQ5LnNhLWVhc3QtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuYXdzLWNsb3VkOS51cy1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInZmcy5jbG91ZDkudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3''@;'; put 'put ''LWFzc2V0cy5jbG91ZDkudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5hd3MtY2xvdWQ5LnVzLWVhc3QtMi5hbWF6b25hd3MuY29tIiwidmZzLmNsb3VkOS51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmNsb3VkOS51cy1lYXN0LTIuYW1h''@;'; put 'put ''em9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmF3cy1jbG91ZDkudXMtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJ2ZnMuY2xvdWQ5LnVzLXdlc3QtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuY2xvdWQ5LnVzLXdlc3QtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMu''@;'; put 'put ''YXdzLWNsb3VkOS51cy13ZXN0LTIuYW1hem9uYXdzLmNvbSIsInZmcy5jbG91ZDkudXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5jbG91ZDkudXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJhd3NhcHBzLmNvbSIsImNuLW5vcnRoLTEuZWIuYW1hem9uYXdzLmNvbS5j''@;'; put 'put ''biIsImNuLW5vcnRod2VzdC0xLmViLmFtYXpvbmF3cy5jb20uY24iLCJlbGFzdGljYmVhbnN0YWxrLmNvbSIsImFmLXNvdXRoLTEuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJhcC1lYXN0LTEuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJhcC1ub3J0aGVhc3QtMS5lbGFzdGljYmVhbnN0YWxrLmNv''@;'; put 'put ''bSIsImFwLW5vcnRoZWFzdC0yLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwiYXAtbm9ydGhlYXN0LTMuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJhcC1zb3V0aC0xLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwiYXAtc291dGhlYXN0LTEuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJhcC1zb3V0aGVhc3Qt''@;'; put 'put ''Mi5lbGFzdGljYmVhbnN0YWxrLmNvbSIsImFwLXNvdXRoZWFzdC0zLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwiY2EtY2VudHJhbC0xLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwiZXUtY2VudHJhbC0xLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwiZXUtbm9ydGgtMS5lbGFzdGljYmVhbnN0YWxrLmNv''@;'; put 'put ''bSIsImV1LXNvdXRoLTEuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJldS13ZXN0LTEuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJldS13ZXN0LTIuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJldS13ZXN0LTMuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJpbC1jZW50cmFsLTEuZWxhc3RpY2JlYW5zdGFs''@;'; put 'put ''ay5jb20iLCJtZS1zb3V0aC0xLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwic2EtZWFzdC0xLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwidXMtZWFzdC0xLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwidXMtZWFzdC0yLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwidXMtZ292LWVhc3QtMS5lbGFzdGljYmVh''@;'; put 'put ''bnN0YWxrLmNvbSIsInVzLWdvdi13ZXN0LTEuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJ1cy13ZXN0LTEuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJ1cy13ZXN0LTIuZWxhc3RpY2JlYW5zdGFsay5jb20iLCIqLmVsYi5hbWF6b25hd3MuY29tLmNuIiwiKi5lbGIuYW1hem9uYXdzLmNvbSIsImF3''@;'; put 'put ''c2dsb2JhbGFjY2VsZXJhdG9yLmNvbSIsIioucHJpdmF0ZS5yZXBvc3QuYXdzIiwiZWVyby5vbmxpbmUiLCJlZXJvLXN0YWdlLm9ubGluZSIsImFwaWdlZS5pbyIsInBhbmVsLmRldiIsInNpaWl0ZXMuY29tIiwiYXBwc3BhY2Vob3N0ZWQuY29tIiwiYXBwc3BhY2V1c2VyY29udGVudC5jb20i''@;'; put 'put ''LCJhcHB1ZG8ubmV0Iiwib24tYXB0aWJsZS5jb20iLCJmNS5zaSIsImFydmFuZWRnZS5pciIsInVzZXIuYXNlaW5ldC5uZS5qcCIsImd2LnZjIiwiZC5ndi52YyIsInVzZXIucGFydHkuZXVzIiwicGltaWVudGEub3JnIiwicG9pdnJvbi5vcmciLCJwb3RhZ2VyLm9yZyIsInN3ZWV0cGVwcGVy''@;'; put 'put ''Lm9yZyIsIm15YXN1c3Rvci5jb20iLCJjZG4ucHJvZC5hdGxhc3NpYW4tZGV2Lm5ldCIsInRyYW5zbGF0ZWQucGFnZSIsIm15ZnJpdHoubGluayIsIm15ZnJpdHoubmV0Iiwib25hdnN0YWNrLm5ldCIsIiouYXdkZXYuY2EiLCIqLmFkdmlzb3Iud3MiLCJlY29tbWVyY2Utc2hvcC5wbCIsImIt''@;'; put 'put ''ZGF0YS5pbyIsImJhbGVuYS1kZXZpY2VzLmNvbSIsImJhc2UuZWMiLCJvZmZpY2lhbC5lYyIsImJ1eXNob3AuanAiLCJmYXNoaW9uc3RvcmUuanAiLCJoYW5kY3JhZnRlZC5qcCIsImthd2FpaXNob3AuanAiLCJzdXBlcnNhbGUuanAiLCJ0aGVzaG9wLmpwIiwic2hvcHNlbGVjdC5uZXQiLCJi''@;'; put 'put ''YXNlLnNob3AiLCJiZWFnbGVib2FyZC5pbyIsIiouYmVnZXQuYXBwIiwicGFnZXMuZ2F5IiwiYm5yLmxhIiwiYml0YnVja2V0LmlvIiwiYmxhY2tiYXVkY2RuLm5ldCIsIm9mLmplIiwiYmx1ZWJpdGUuaW8iLCJib29tbGEubmV0IiwiYm91dGlyLmNvbSIsImJveGZ1c2UuaW8iLCJzcXVhcmU3''@;'; put 'put ''LmNoIiwiYnBsYWNlZC5jb20iLCJicGxhY2VkLmRlIiwic3F1YXJlNy5kZSIsImJwbGFjZWQubmV0Iiwic3F1YXJlNy5uZXQiLCIqLnMuYnJhdmUuaW8iLCJzaG9wLmJyZW5kbHkuaHIiLCJzaG9wLmJyZW5kbHkucnMiLCJicm93c2Vyc2FmZXR5bWFyay5pbyIsInJhZGlvLmFtIiwicmFkaW8u''@;'; put 'put ''Zm0iLCJ1azAuYmlndi5pbyIsImRoLmJ5dGVtYXJrLmNvLnVrIiwidm0uYnl0ZW1hcmsuY28udWsiLCJjYWZqcy5jb20iLCJjYW52YS1hcHBzLmNuIiwiKi5teS5jYW52YXNpdGUuY24iLCJjYW52YS1hcHBzLmNvbSIsIioubXkuY2FudmEuc2l0ZSIsImRyci5hYyIsInV3dS5haSIsImNhcnJk''@;'; put 'put ''LmNvIiwiY3JkLmNvIiwianUubXAiLCJhcGkuZ292LnVrIiwiY2RuNzctc3RvcmFnZS5jb20iLCJyc2MuY29udGVudHByb3h5OS5jeiIsInIuY2RuNzcubmV0IiwiY2RuNzctc3NsLm5ldCIsImMuY2RuNzcub3JnIiwicnNjLmNkbjc3Lm9yZyIsInNzbC5vcmlnaW4uY2RuNzctc2VjdXJlLm9y''@;'; put 'put ''ZyIsInphLmJ6IiwiYnIuY29tIiwiY24uY29tIiwiZGUuY29tIiwiZXUuY29tIiwianBuLmNvbSIsIm1leC5jb20iLCJydS5jb20iLCJzYS5jb20iLCJ1ay5jb20iLCJ1cy5jb20iLCJ6YS5jb20iLCJjb20uZGUiLCJnYi5uZXQiLCJodS5uZXQiLCJqcC5uZXQiLCJzZS5uZXQiLCJ1ay5uZXQi''@;'; put 'put ''LCJhZS5vcmciLCJjb20uc2UiLCJjeC51YSIsImRpc2NvdXJzZS5ncm91cCIsImRpc2NvdXJzZS50ZWFtIiwiY2xlcmsuYXBwIiwiY2xlcmtzdGFnZS5hcHAiLCIqLmxjbC5kZXYiLCIqLmxjbHN0YWdlLmRldiIsIiouc3RnLmRldiIsIiouc3Rnc3RhZ2UuZGV2IiwiY2xldmVyYXBwcy5jYyIs''@;'; put 'put ''Iiouc2VydmljZXMuY2xldmVyLWNsb3VkLmNvbSIsImNsZXZlcmFwcHMuaW8iLCJjbGV2ZXJhcHBzLnRlY2giLCJjbGlja3Jpc2luZy5uZXQiLCJjbG91ZG5zLmFzaWEiLCJjbG91ZG5zLmJlIiwiY2xvdWQtaXAuYml6IiwiY2xvdWRucy5iaXoiLCJjbG91ZG5zLmNjIiwiY2xvdWRucy5jaCIs''@;'; put 'put ''ImNsb3VkbnMuY2wiLCJjbG91ZG5zLmNsdWIiLCJkbnNhYnIuY29tIiwiaXAtZGRucy5jb20iLCJjbG91ZG5zLmN4IiwiY2xvdWRucy5ldSIsImNsb3VkbnMuaW4iLCJjbG91ZG5zLmluZm8iLCJkZG5zLWlwLm5ldCIsImRucy1jbG91ZC5uZXQiLCJkbnMtZHluYW1pYy5uZXQiLCJjbG91ZG5z''@;'; put 'put ''Lm56IiwiY2xvdWRucy5vcmciLCJpcC1keW5hbWljLm9yZyIsImNsb3VkbnMucGgiLCJjbG91ZG5zLnBybyIsImNsb3VkbnMucHciLCJjbG91ZG5zLnVzIiwiYzY2Lm1lIiwiY2xvdWQ2Ni53cyIsImNsb3VkNjYuem9uZSIsImpkZXZjbG91ZC5jb20iLCJ3cGRldmNsb3VkLmNvbSIsImNsb3Vk''@;'; put 'put ''YWNjZXNzLmhvc3QiLCJmcmVlc2l0ZS5ob3N0IiwiY2xvdWRhY2Nlc3MubmV0IiwiKi5jbG91ZGVyYS5zaXRlIiwiY2YtaXBmcy5jb20iLCJjbG91ZGZsYXJlLWlwZnMuY29tIiwidHJ5Y2xvdWRmbGFyZS5jb20iLCJwYWdlcy5kZXYiLCJyMi5kZXYiLCJ3b3JrZXJzLmRldiIsImNsb3VkZmxh''@;'; put 'put ''cmUubmV0IiwiY2RuLmNsb3VkZmxhcmUubmV0IiwiY2RuLmNsb3VkZmxhcmVhbnljYXN0Lm5ldCIsImNkbi5jbG91ZGZsYXJlY24ubmV0IiwiY2RuLmNsb3VkZmxhcmVnbG9iYWwubmV0IiwiY3VzdC5jbG91ZHNjYWxlLmNoIiwib2JqZWN0cy5scGcuY2xvdWRzY2FsZS5jaCIsIm9iamVjdHMu''@;'; put 'put ''cm1hLmNsb3Vkc2NhbGUuY2giLCJ3bmV4dC5hcHAiLCJjbnB5LmdkbiIsIioub3RhcC5jbyIsImNvLmNhIiwiY28uY29tIiwiY29kZWJlcmcucGFnZSIsImNzYi5hcHAiLCJwcmV2aWV3LmNzYi5hcHAiLCJjby5ubCIsImNvLm5vIiwid2ViaG9zdGluZy5iZSIsImhvc3RpbmctY2x1c3Rlci5u''@;'; put 'put ''bCIsImN0ZmNsb3VkLm5ldCIsImNvbnZleC5zaXRlIiwiYWMucnUiLCJlZHUucnUiLCJnb3YucnUiLCJpbnQucnUiLCJtaWwucnUiLCJ0ZXN0LnJ1IiwiZHluLmNvc2lkbnMuZGUiLCJkbnN1cGRhdGVyLmRlIiwiZHluYW1pc2NoZXMtZG5zLmRlIiwiaW50ZXJuZXQtZG5zLmRlIiwibC1vLWct''@;'; put 'put ''aS1uLmRlIiwiZHluYW1pYy1kbnMuaW5mbyIsImZlc3RlLWlwLm5ldCIsImtueC1zZXJ2ZXIubmV0Iiwic3RhdGljLWFjY2Vzcy5uZXQiLCJjcmFmdC5tZSIsInJlYWxtLmN6Iiwib24uY3Jpc3AuZW1haWwiLCIqLmNyeXB0b25vbWljLm5ldCIsImN1cnYuZGV2IiwiY2ZvbGtzLnBsIiwiY3lv''@;'; put 'put ''bi5saW5rIiwiY3lvbi5zaXRlIiwicGxhdGZvcm0wLmFwcCIsImZud2suc2l0ZSIsImZvbGlvbmV0d29yay5zaXRlIiwiYml6LmRrIiwiY28uZGsiLCJmaXJtLmRrIiwicmVnLmRrIiwic3RvcmUuZGsiLCJkeW5kbnMuZGFwcG5vZGUuaW8iLCJidWlsdHdpdGhkYXJrLmNvbSIsImRhcmtsYW5n''@;'; put 'put ''LmlvIiwiZGVtby5kYXRhZGV0ZWN0LmNvbSIsImluc3RhbmNlLmRhdGFkZXRlY3QuY29tIiwiZWRnZXN0YWNrLm1lIiwiZGF0dG9sb2NhbC5jb20iLCJkYXR0b3JlbGF5LmNvbSIsImRhdHRvd2ViLmNvbSIsIm15ZGF0dG8uY29tIiwiZGF0dG9sb2NhbC5uZXQiLCJteWRhdHRvLm5ldCIsImRk''@;'; put 'put ''bnNzLmRlIiwiZHluLmRkbnNzLmRlIiwiZHluZG5zLmRkbnNzLmRlIiwiZHluLWlwMjQuZGUiLCJkeW5kbnMxLmRlIiwiaG9tZS13ZWJzZXJ2ZXIuZGUiLCJkeW4uaG9tZS13ZWJzZXJ2ZXIuZGUiLCJteWhvbWUtc2VydmVyLmRlIiwiZGRuc3Mub3JnIiwiZGViaWFuLm5ldCIsImRlZmluaW1h''@;'; put 'put ''LmlvIiwiZGVmaW5pbWEubmV0IiwiZGVuby5kZXYiLCJkZW5vLXN0YWdpbmcuZGV2IiwiZGVkeW4uaW8iLCJkZXRhLmFwcCIsImRldGEuZGV2IiwiZGZpcm1hLnBsIiwiZGtvbnRvLnBsIiwieW91Mi5wbCIsIm9uZGlnaXRhbG9jZWFuLmFwcCIsIiouZGlnaXRhbG9jZWFuc3BhY2VzLmNvbSIs''@;'; put 'put ''InVzLmtnIiwicnNzLm15LmlkIiwiZGloZXIuc29sdXRpb25zIiwiZGlzY29yZHNheXMuY29tIiwiZGlzY29yZHNlei5jb20iLCJqb3ppLmJpeiIsImRuc2hvbWUuZGUiLCJvbmxpbmUudGgiLCJzaG9wLnRoIiwiZHJheWRkbnMuY29tIiwic2hvcGFyZW5hLnBsIiwiZHJlYW1ob3N0ZXJzLmNv''@;'; put 'put ''bSIsImR1cnVtaXMuY29tIiwibXlkcm9iby5jb20iLCJkcnVkLmlvIiwiZHJ1ZC51cyIsImR1Y2tkbnMub3JnIiwiZHkuZmkiLCJ0dW5rLm9yZyIsImR5bmRucy5iaXoiLCJmb3ItYmV0dGVyLmJpeiIsImZvci1tb3JlLmJpeiIsImZvci1zb21lLmJpeiIsImZvci10aGUuYml6Iiwic2VsZmlw''@;'; put 'put ''LmJpeiIsIndlYmhvcC5iaXoiLCJmdHBhY2Nlc3MuY2MiLCJnYW1lLXNlcnZlci5jYyIsIm15cGhvdG9zLmNjIiwic2NyYXBwaW5nLmNjIiwiYmxvZ2Rucy5jb20iLCJjZWNoaXJlLmNvbSIsImRuc2FsaWFzLmNvbSIsImRuc2Rvam8uY29tIiwiZG9lc250ZXhpc3QuY29tIiwiZG9udGV4aXN0''@;'; put 'put ''LmNvbSIsImRvb21kbnMuY29tIiwiZHluLW8tc2F1ci5jb20iLCJkeW5hbGlhcy5jb20iLCJkeW5kbnMtYXQtaG9tZS5jb20iLCJkeW5kbnMtYXQtd29yay5jb20iLCJkeW5kbnMtYmxvZy5jb20iLCJkeW5kbnMtZnJlZS5jb20iLCJkeW5kbnMtaG9tZS5jb20iLCJkeW5kbnMtaXAuY29tIiwi''@;'; put 'put ''ZHluZG5zLW1haWwuY29tIiwiZHluZG5zLW9mZmljZS5jb20iLCJkeW5kbnMtcGljcy5jb20iLCJkeW5kbnMtcmVtb3RlLmNvbSIsImR5bmRucy1zZXJ2ZXIuY29tIiwiZHluZG5zLXdlYi5jb20iLCJkeW5kbnMtd2lraS5jb20iLCJkeW5kbnMtd29yay5jb20iLCJlc3QtYS1sYS1tYWlzb24u''@;'; put 'put ''Y29tIiwiZXN0LWEtbGEtbWFzaW9uLmNvbSIsImVzdC1sZS1wYXRyb24uY29tIiwiZXN0LW1vbi1ibG9ndWV1ci5jb20iLCJmcm9tLWFrLmNvbSIsImZyb20tYWwuY29tIiwiZnJvbS1hci5jb20iLCJmcm9tLWNhLmNvbSIsImZyb20tY3QuY29tIiwiZnJvbS1kYy5jb20iLCJmcm9tLWRlLmNv''@;'; put 'put ''bSIsImZyb20tZmwuY29tIiwiZnJvbS1nYS5jb20iLCJmcm9tLWhpLmNvbSIsImZyb20taWEuY29tIiwiZnJvbS1pZC5jb20iLCJmcm9tLWlsLmNvbSIsImZyb20taW4uY29tIiwiZnJvbS1rcy5jb20iLCJmcm9tLWt5LmNvbSIsImZyb20tbWEuY29tIiwiZnJvbS1tZC5jb20iLCJmcm9tLW1p''@;'; put 'put ''LmNvbSIsImZyb20tbW4uY29tIiwiZnJvbS1tby5jb20iLCJmcm9tLW1zLmNvbSIsImZyb20tbXQuY29tIiwiZnJvbS1uYy5jb20iLCJmcm9tLW5kLmNvbSIsImZyb20tbmUuY29tIiwiZnJvbS1uaC5jb20iLCJmcm9tLW5qLmNvbSIsImZyb20tbm0uY29tIiwiZnJvbS1udi5jb20iLCJmcm9t''@;'; put 'put ''LW9oLmNvbSIsImZyb20tb2suY29tIiwiZnJvbS1vci5jb20iLCJmcm9tLXBhLmNvbSIsImZyb20tcHIuY29tIiwiZnJvbS1yaS5jb20iLCJmcm9tLXNjLmNvbSIsImZyb20tc2QuY29tIiwiZnJvbS10bi5jb20iLCJmcm9tLXR4LmNvbSIsImZyb20tdXQuY29tIiwiZnJvbS12YS5jb20iLCJm''@;'; put 'put ''cm9tLXZ0LmNvbSIsImZyb20td2EuY29tIiwiZnJvbS13aS5jb20iLCJmcm9tLXd2LmNvbSIsImZyb20td3kuY29tIiwiZ2V0bXlpcC5jb20iLCJnb3RkbnMuY29tIiwiaG9iYnktc2l0ZS5jb20iLCJob21lbGludXguY29tIiwiaG9tZXVuaXguY29tIiwiaWFtYWxsYW1hLmNvbSIsImlzLWEt''@;'; put 'put ''YW5hcmNoaXN0LmNvbSIsImlzLWEtYmxvZ2dlci5jb20iLCJpcy1hLWJvb2trZWVwZXIuY29tIiwiaXMtYS1idWxscy1mYW4uY29tIiwiaXMtYS1jYXRlcmVyLmNvbSIsImlzLWEtY2hlZi5jb20iLCJpcy1hLWNvbnNlcnZhdGl2ZS5jb20iLCJpcy1hLWNwYS5jb20iLCJpcy1hLWN1YmljbGUt''@;'; put 'put ''c2xhdmUuY29tIiwiaXMtYS1kZW1vY3JhdC5jb20iLCJpcy1hLWRlc2lnbmVyLmNvbSIsImlzLWEtZG9jdG9yLmNvbSIsImlzLWEtZmluYW5jaWFsYWR2aXNvci5jb20iLCJpcy1hLWdlZWsuY29tIiwiaXMtYS1ncmVlbi5jb20iLCJpcy1hLWd1cnUuY29tIiwiaXMtYS1oYXJkLXdvcmtlci5j''@;'; put 'put ''b20iLCJpcy1hLWh1bnRlci5jb20iLCJpcy1hLWxhbmRzY2FwZXIuY29tIiwiaXMtYS1sYXd5ZXIuY29tIiwiaXMtYS1saWJlcmFsLmNvbSIsImlzLWEtbGliZXJ0YXJpYW4uY29tIiwiaXMtYS1sbGFtYS5jb20iLCJpcy1hLW11c2ljaWFuLmNvbSIsImlzLWEtbmFzY2FyZmFuLmNvbSIsImlz''@;'; put 'put ''LWEtbnVyc2UuY29tIiwiaXMtYS1wYWludGVyLmNvbSIsImlzLWEtcGVyc29uYWx0cmFpbmVyLmNvbSIsImlzLWEtcGhvdG9ncmFwaGVyLmNvbSIsImlzLWEtcGxheWVyLmNvbSIsImlzLWEtcmVwdWJsaWNhbi5jb20iLCJpcy1hLXJvY2tzdGFyLmNvbSIsImlzLWEtc29jaWFsaXN0LmNvbSIs''@;'; put 'put ''ImlzLWEtc3R1ZGVudC5jb20iLCJpcy1hLXRlYWNoZXIuY29tIiwiaXMtYS10ZWNoaWUuY29tIiwiaXMtYS10aGVyYXBpc3QuY29tIiwiaXMtYW4tYWNjb3VudGFudC5jb20iLCJpcy1hbi1hY3Rvci5jb20iLCJpcy1hbi1hY3RyZXNzLmNvbSIsImlzLWFuLWFuYXJjaGlzdC5jb20iLCJpcy1h''@;'; put 'put ''bi1hcnRpc3QuY29tIiwiaXMtYW4tZW5naW5lZXIuY29tIiwiaXMtYW4tZW50ZXJ0YWluZXIuY29tIiwiaXMtY2VydGlmaWVkLmNvbSIsImlzLWdvbmUuY29tIiwiaXMtaW50by1hbmltZS5jb20iLCJpcy1pbnRvLWNhcnMuY29tIiwiaXMtaW50by1jYXJ0b29ucy5jb20iLCJpcy1pbnRvLWdh''@;'; put 'put ''bWVzLmNvbSIsImlzLWxlZXQuY29tIiwiaXMtbm90LWNlcnRpZmllZC5jb20iLCJpcy1zbGljay5jb20iLCJpcy11YmVybGVldC5jb20iLCJpcy13aXRoLXRoZWJhbmQuY29tIiwiaXNhLWdlZWsuY29tIiwiaXNhLWhvY2tleW51dC5jb20iLCJpc3NtYXJ0ZXJ0aGFueW91LmNvbSIsImxpa2Vz''@;'; put 'put ''LXBpZS5jb20iLCJsaWtlc2NhbmR5LmNvbSIsIm5lYXQtdXJsLmNvbSIsInNhdmVzLXRoZS13aGFsZXMuY29tIiwic2VsZmlwLmNvbSIsInNlbGxzLWZvci1sZXNzLmNvbSIsInNlbGxzLWZvci11LmNvbSIsInNlcnZlYmJzLmNvbSIsInNpbXBsZS11cmwuY29tIiwic3BhY2UtdG8tcmVudC5j''@;'; put 'put ''b20iLCJ0ZWFjaGVzLXlvZ2EuY29tIiwid3JpdGVzdGhpc2Jsb2cuY29tIiwiYXRoLmN4IiwiZnVldHRlcnRkYXNuZXR6LmRlIiwiaXN0ZWluZ2Vlay5kZSIsImlzdG1laW4uZGUiLCJsZWJ0aW1uZXR6LmRlIiwibGVpdHVuZ3Nlbi5kZSIsInRyYWV1bXRnZXJhZGUuZGUiLCJiYXJyZWwtb2Yt''@;'; put 'put ''a25vd2xlZGdlLmluZm8iLCJiYXJyZWxsLW9mLWtub3dsZWRnZS5pbmZvIiwiZHluZG5zLmluZm8iLCJmb3Itb3VyLmluZm8iLCJncm9rcy10aGUuaW5mbyIsImdyb2tzLXRoaXMuaW5mbyIsImhlcmUtZm9yLW1vcmUuaW5mbyIsImtub3dzaXRhbGwuaW5mbyIsInNlbGZpcC5pbmZvIiwid2Vi''@;'; put 'put ''aG9wLmluZm8iLCJmb3Jnb3QuaGVyLm5hbWUiLCJmb3Jnb3QuaGlzLm5hbWUiLCJhdC1iYW5kLWNhbXAubmV0IiwiYmxvZ2Rucy5uZXQiLCJicm9rZS1pdC5uZXQiLCJidXlzaG91c2VzLm5ldCIsImRuc2FsaWFzLm5ldCIsImRuc2Rvam8ubmV0IiwiZG9lcy1pdC5uZXQiLCJkb250ZXhpc3Qu''@;'; put 'put ''bmV0IiwiZHluYWxpYXMubmV0IiwiZHluYXRob21lLm5ldCIsImVuZG9maW50ZXJuZXQubmV0IiwiZnJvbS1hei5uZXQiLCJmcm9tLWNvLm5ldCIsImZyb20tbGEubmV0IiwiZnJvbS1ueS5uZXQiLCJnZXRzLWl0Lm5ldCIsImhhbS1yYWRpby1vcC5uZXQiLCJob21lZnRwLm5ldCIsImhvbWVp''@;'; put 'put ''cC5uZXQiLCJob21lbGludXgubmV0IiwiaG9tZXVuaXgubmV0IiwiaW4tdGhlLWJhbmQubmV0IiwiaXMtYS1jaGVmLm5ldCIsImlzLWEtZ2Vlay5uZXQiLCJpc2EtZ2Vlay5uZXQiLCJraWNrcy1hc3MubmV0Iiwib2ZmaWNlLW9uLXRoZS5uZXQiLCJwb2R6b25lLm5ldCIsInNjcmFwcGVyLXNp''@;'; put 'put ''dGUubmV0Iiwic2VsZmlwLm5ldCIsInNlbGxzLWl0Lm5ldCIsInNlcnZlYmJzLm5ldCIsInNlcnZlZnRwLm5ldCIsInRocnVoZXJlLm5ldCIsIndlYmhvcC5uZXQiLCJtZXJzZWluZS5udSIsIm1pbmUubnUiLCJzaGFja25ldC5udSIsImJsb2dkbnMub3JnIiwiYmxvZ3NpdGUub3JnIiwiYm9s''@;'; put 'put ''ZGx5Z29pbmdub3doZXJlLm9yZyIsImRuc2FsaWFzLm9yZyIsImRuc2Rvam8ub3JnIiwiZG9lc250ZXhpc3Qub3JnIiwiZG9udGV4aXN0Lm9yZyIsImRvb21kbnMub3JnIiwiZHZyZG5zLm9yZyIsImR5bmFsaWFzLm9yZyIsImR5bmRucy5vcmciLCJnby5keW5kbnMub3JnIiwiaG9tZS5keW5k''@;'; put 'put ''bnMub3JnIiwiZW5kb2ZpbnRlcm5ldC5vcmciLCJlbmRvZnRoZWludGVybmV0Lm9yZyIsImZyb20tbWUub3JnIiwiZ2FtZS1ob3N0Lm9yZyIsImdvdGRucy5vcmciLCJob2JieS1zaXRlLm9yZyIsImhvbWVkbnMub3JnIiwiaG9tZWZ0cC5vcmciLCJob21lbGludXgub3JnIiwiaG9tZXVuaXgu''@;'; put 'put ''b3JnIiwiaXMtYS1icnVpbnNmYW4ub3JnIiwiaXMtYS1jYW5kaWRhdGUub3JnIiwiaXMtYS1jZWx0aWNzZmFuLm9yZyIsImlzLWEtY2hlZi5vcmciLCJpcy1hLWdlZWsub3JnIiwiaXMtYS1rbmlnaHQub3JnIiwiaXMtYS1saW51eC11c2VyLm9yZyIsImlzLWEtcGF0c2Zhbi5vcmciLCJpcy1h''@;'; put 'put ''LXNveGZhbi5vcmciLCJpcy1mb3VuZC5vcmciLCJpcy1sb3N0Lm9yZyIsImlzLXNhdmVkLm9yZyIsImlzLXZlcnktYmFkLm9yZyIsImlzLXZlcnktZXZpbC5vcmciLCJpcy12ZXJ5LWdvb2Qub3JnIiwiaXMtdmVyeS1uaWNlLm9yZyIsImlzLXZlcnktc3dlZXQub3JnIiwiaXNhLWdlZWsub3Jn''@;'; put 'put ''Iiwia2lja3MtYXNzLm9yZyIsIm1pc2NvbmZ1c2VkLm9yZyIsInBvZHpvbmUub3JnIiwicmVhZG15YmxvZy5vcmciLCJzZWxmaXAub3JnIiwic2VsbHN5b3VyaG9tZS5vcmciLCJzZXJ2ZWJicy5vcmciLCJzZXJ2ZWZ0cC5vcmciLCJzZXJ2ZWdhbWUub3JnIiwic3R1ZmYtNC1zYWxlLm9yZyIs''@;'; put 'put ''IndlYmhvcC5vcmciLCJiZXR0ZXItdGhhbi50diIsImR5bmRucy50diIsIm9uLXRoZS13ZWIudHYiLCJ3b3JzZS10aGFuLnR2IiwiaXMtYnkudXMiLCJsYW5kLTQtc2FsZS51cyIsInN0dWZmLTQtc2FsZS51cyIsImR5bmRucy53cyIsIm15cGV0cy53cyIsImRkbnNmcmVlLmNvbSIsImRkbnNn''@;'; put 'put ''ZWVrLmNvbSIsImdpaXplLmNvbSIsImdsZWV6ZS5jb20iLCJrb3pvdy5jb20iLCJsb3NleW91cmlwLmNvbSIsIm9vZ3V5LmNvbSIsInRoZXdvcmtwYy5jb20iLCJjYXNhY2FtLm5ldCIsImR5bnUubmV0IiwiYWNjZXNzY2FtLm9yZyIsImNhbWR2ci5vcmciLCJmcmVlZGRucy5vcmciLCJteXdp''@;'; put 'put ''cmUub3JnIiwid2VicmVkaXJlY3Qub3JnIiwibXlkZG5zLnJvY2tzIiwiZHludjYubmV0IiwiZTQuY3oiLCJlYXN5cGFuZWwuYXBwIiwiZWFzeXBhbmVsLmhvc3QiLCIqLmV3cC5saXZlIiwidHdtYWlsLmNjIiwidHdtYWlsLm5ldCIsInR3bWFpbC5vcmciLCJteW1haWxlci5jb20udHciLCJ1''@;'; put 'put ''cmwudHciLCJhdC5lbWYuY2FtcCIsInJ0Lmh0IiwiZWxlbWVudG9yLmNsb3VkIiwiZWxlbWVudG9yLmNvb2wiLCJlbi1yb290LmZyIiwibXl0dWxlYXAuY29tIiwidHVsZWFwLXBhcnRuZXJzLmNvbSIsImVuY3IuYXBwIiwiZW5jb3JlYXBpLmNvbSIsImV1LmVuY293YXkuY2xvdWQiLCJldS5v''@;'; put 'put ''cmciLCJhbC5ldS5vcmciLCJhc3NvLmV1Lm9yZyIsImF0LmV1Lm9yZyIsImF1LmV1Lm9yZyIsImJlLmV1Lm9yZyIsImJnLmV1Lm9yZyIsImNhLmV1Lm9yZyIsImNkLmV1Lm9yZyIsImNoLmV1Lm9yZyIsImNuLmV1Lm9yZyIsImN5LmV1Lm9yZyIsImN6LmV1Lm9yZyIsImRlLmV1Lm9yZyIsImRr''@;'; put 'put ''LmV1Lm9yZyIsImVkdS5ldS5vcmciLCJlZS5ldS5vcmciLCJlcy5ldS5vcmciLCJmaS5ldS5vcmciLCJmci5ldS5vcmciLCJnci5ldS5vcmciLCJoci5ldS5vcmciLCJodS5ldS5vcmciLCJpZS5ldS5vcmciLCJpbC5ldS5vcmciLCJpbi5ldS5vcmciLCJpbnQuZXUub3JnIiwiaXMuZXUub3Jn''@;'; put 'put ''IiwiaXQuZXUub3JnIiwianAuZXUub3JnIiwia3IuZXUub3JnIiwibHQuZXUub3JnIiwibHUuZXUub3JnIiwibHYuZXUub3JnIiwibWUuZXUub3JnIiwibWsuZXUub3JnIiwibXQuZXUub3JnIiwibXkuZXUub3JnIiwibmV0LmV1Lm9yZyIsIm5nLmV1Lm9yZyIsIm5sLmV1Lm9yZyIsIm5vLmV1''@;'; put 'put ''Lm9yZyIsIm56LmV1Lm9yZyIsInBsLmV1Lm9yZyIsInB0LmV1Lm9yZyIsInJvLmV1Lm9yZyIsInJ1LmV1Lm9yZyIsInNlLmV1Lm9yZyIsInNpLmV1Lm9yZyIsInNrLmV1Lm9yZyIsInRyLmV1Lm9yZyIsInVrLmV1Lm9yZyIsInVzLmV1Lm9yZyIsImV1cm9kaXIucnUiLCJldS0xLmV2ZW5ub2Rl''@;'; put 'put ''LmNvbSIsImV1LTIuZXZlbm5vZGUuY29tIiwiZXUtMy5ldmVubm9kZS5jb20iLCJldS00LmV2ZW5ub2RlLmNvbSIsInVzLTEuZXZlbm5vZGUuY29tIiwidXMtMi5ldmVubm9kZS5jb20iLCJ1cy0zLmV2ZW5ub2RlLmNvbSIsInVzLTQuZXZlbm5vZGUuY29tIiwicmVsYXkuZXZlcnZhdWx0LmFw''@;'; put 'put ''cCIsInJlbGF5LmV2ZXJ2YXVsdC5kZXYiLCJleHBvLmFwcCIsInN0YWdpbmcuZXhwby5hcHAiLCJvbmZhYnJpY2EuY29tIiwicnUubmV0IiwiYWR5Z2V5YS5ydSIsImJhc2hraXJpYS5ydSIsImJpci5ydSIsImNiZy5ydSIsImNvbS5ydSIsImRhZ2VzdGFuLnJ1IiwiZ3Jvem55LnJ1Iiwia2Fs''@;'; put 'put ''bXlraWEucnUiLCJrdXN0YW5haS5ydSIsIm1hcmluZS5ydSIsIm1vcmRvdmlhLnJ1IiwibXNrLnJ1IiwibXl0aXMucnUiLCJuYWxjaGlrLnJ1Iiwibm92LnJ1IiwicHlhdGlnb3Jzay5ydSIsInNwYi5ydSIsInZsYWRpa2F2a2F6LnJ1IiwidmxhZGltaXIucnUiLCJhYmtoYXppYS5zdSIsImFk''@;'; put 'put ''eWdleWEuc3UiLCJha3R5dWJpbnNrLnN1IiwiYXJraGFuZ2Vsc2suc3UiLCJhcm1lbmlhLnN1IiwiYXNoZ2FiYWQuc3UiLCJhemVyYmFpamFuLnN1IiwiYmFsYXNob3Yuc3UiLCJiYXNoa2lyaWEuc3UiLCJicnlhbnNrLnN1IiwiYnVraGFyYS5zdSIsImNoaW1rZW50LnN1IiwiZGFnZXN0YW4u''@;'; put 'put ''c3UiLCJlYXN0LWthemFraHN0YW4uc3UiLCJleG5ldC5zdSIsImdlb3JnaWEuc3UiLCJncm96bnkuc3UiLCJpdmFub3ZvLnN1IiwiamFtYnlsLnN1Iiwia2FsbXlraWEuc3UiLCJrYWx1Z2Euc3UiLCJrYXJhY29sLnN1Iiwia2FyYWdhbmRhLnN1Iiwia2FyZWxpYS5zdSIsImtoYWthc3NpYS5z''@;'; put 'put ''dSIsImtyYXNub2Rhci5zdSIsImt1cmdhbi5zdSIsImt1c3RhbmFpLnN1IiwibGVudWcuc3UiLCJtYW5neXNobGFrLnN1IiwibW9yZG92aWEuc3UiLCJtc2suc3UiLCJtdXJtYW5zay5zdSIsIm5hbGNoaWsuc3UiLCJuYXZvaS5zdSIsIm5vcnRoLWthemFraHN0YW4uc3UiLCJub3Yuc3UiLCJv''@;'; put 'put ''Ym5pbnNrLnN1IiwicGVuemEuc3UiLCJwb2tyb3Zzay5zdSIsInNvY2hpLnN1Iiwic3BiLnN1IiwidGFzaGtlbnQuc3UiLCJ0ZXJtZXouc3UiLCJ0b2dsaWF0dGkuc3UiLCJ0cm9pdHNrLnN1IiwidHNlbGlub2dyYWQuc3UiLCJ0dWxhLnN1IiwidHV2YS5zdSIsInZsYWRpa2F2a2F6LnN1Iiwi''@;'; put 'put ''dmxhZGltaXIuc3UiLCJ2b2xvZ2RhLnN1IiwiY2hhbm5lbHNkdnIubmV0IiwidS5jaGFubmVsc2R2ci5uZXQiLCJlZGdlY29tcHV0ZS5hcHAiLCJmYXN0bHktZWRnZS5jb20iLCJmYXN0bHktdGVycmFyaXVtLmNvbSIsImZyZWV0bHMuZmFzdGx5Lm5ldCIsIm1hcC5mYXN0bHkubmV0IiwiYS5w''@;'; put 'put ''cm9kLmZhc3RseS5uZXQiLCJnbG9iYWwucHJvZC5mYXN0bHkubmV0IiwiYS5zc2wuZmFzdGx5Lm5ldCIsImIuc3NsLmZhc3RseS5uZXQiLCJnbG9iYWwuc3NsLmZhc3RseS5uZXQiLCJmYXN0bHlsYi5uZXQiLCJtYXAuZmFzdGx5bGIubmV0IiwiKi51c2VyLmZtIiwiZmFzdHZwcy1zZXJ2ZXIu''@;'; put 'put ''Y29tIiwiZmFzdHZwcy5ob3N0IiwibXlmYXN0Lmhvc3QiLCJmYXN0dnBzLnNpdGUiLCJteWZhc3Quc3BhY2UiLCJjb25uLnVrIiwiY29wcm8udWsiLCJob3NwLnVrIiwiZmVkb3JhaW5mcmFjbG91ZC5vcmciLCJmZWRvcmFwZW9wbGUub3JnIiwiY2xvdWQuZmVkb3JhcHJvamVjdC5vcmciLCJh''@;'; put 'put ''cHAub3MuZmVkb3JhcHJvamVjdC5vcmciLCJhcHAub3Muc3RnLmZlZG9yYXByb2plY3Qub3JnIiwibXlkb2Jpc3MuY29tIiwiZmgtbXVlbnN0ZXIuaW8iLCJmaWxlZ2Vhci5tZSIsImZpcmViYXNlYXBwLmNvbSIsImZsZHJ2LmNvbSIsImZsdXR0ZXJmbG93LmFwcCIsImZseS5kZXYiLCJzaHcu''@;'; put 'put ''aW8iLCJlZGdlYXBwLm5ldCIsImZvcmdlYmxvY2tzLmNvbSIsImlkLmZvcmdlcm9jay5pbyIsImZyYW1lci5haSIsImZyYW1lci5hcHAiLCJmcmFtZXJjYW52YXMuY29tIiwiZnJhbWVyLm1lZGlhIiwiZnJhbWVyLnBob3RvcyIsImZyYW1lci53ZWJzaXRlIiwiZnJhbWVyLndpa2kiLCIwZS52''@;'; put 'put ''YyIsImZyZWVib3gtb3MuY29tIiwiZnJlZWJveG9zLmNvbSIsImZieC1vcy5mciIsImZieG9zLmZyIiwiZnJlZWJveC1vcy5mciIsImZyZWVib3hvcy5mciIsImZyZWVkZXNrdG9wLm9yZyIsImZyZWVteWlwLmNvbSIsIiouZnJ1c2t5LmRlIiwid2llbi5mdW5rZmV1ZXIuYXQiLCJkYWVtb24u''@;'; put 'put ''YXNpYSIsImRpeC5hc2lhIiwibXlkbnMuYnoiLCIwYW0uanAiLCIwZzAuanAiLCIwajAuanAiLCIwdDAuanAiLCJteWRucy5qcCIsInBndy5qcCIsIndqZy5qcCIsImtleXdvcmQtb24ubmV0IiwibGl2ZS1vbi5uZXQiLCJzZXJ2ZXItb24ubmV0IiwibXlkbnMudHciLCJteWRucy52YyIsIiou''@;'; put 'put ''ZnV0dXJlY21zLmF0IiwiKi5leC5mdXR1cmVjbXMuYXQiLCIqLmluLmZ1dHVyZWNtcy5hdCIsImZ1dHVyZWhvc3RpbmcuYXQiLCJmdXR1cmVtYWlsaW5nLmF0IiwiKi5leC5vcnRzaW5mby5hdCIsIioua3VuZGVuLm9ydHNpbmZvLmF0IiwiKi5zdGF0aWNzLmNsb3VkIiwiYWxpYXNlczEyMS5j''@;'; put 'put ''b20iLCJjYW1wYWlnbi5nb3YudWsiLCJzZXJ2aWNlLmdvdi51ayIsImluZGVwZW5kZW50LWNvbW1pc3Npb24udWsiLCJpbmRlcGVuZGVudC1pbnF1ZXN0LnVrIiwiaW5kZXBlbmRlbnQtaW5xdWlyeS51ayIsImluZGVwZW5kZW50LXBhbmVsLnVrIiwiaW5kZXBlbmRlbnQtcmV2aWV3LnVrIiwi''@;'; put 'put ''cHVibGljLWlucXVpcnkudWsiLCJyb3lhbC1jb21taXNzaW9uLnVrIiwiZ2VoaXJuLm5lLmpwIiwidXNlcmNvbnRlbnQuanAiLCJnZW50YXBwcy5jb20iLCJnZW50bGVudGFwaXMuY29tIiwibGFiLm1zIiwiY2RuLWVkZ2VzLm5ldCIsImxvY2FsY2VydC5uZXQiLCJsb2NhbGhvc3RjZXJ0Lm5l''@;'; put 'put ''dCIsImdzai5ieiIsImdpdGh1YnVzZXJjb250ZW50LmNvbSIsImdpdGh1YnByZXZpZXcuZGV2IiwiZ2l0aHViLmlvIiwiZ2l0bGFiLmlvIiwiZ2l0YXBwLnNpIiwiZ2l0cGFnZS5zaSIsImdsaXRjaC5tZSIsIm5vZy5jb21tdW5pdHkiLCJjby5ybyIsInNob3Aucm8iLCJsb2xpcG9wLmlvIiwi''@;'; put 'put ''YW5ncnkuanAiLCJiYWJ5Ymx1ZS5qcCIsImJhYnltaWxrLmpwIiwiYmFja2Ryb3AuanAiLCJiYW1iaW5hLmpwIiwiYml0dGVyLmpwIiwiYmx1c2guanAiLCJib28uanAiLCJib3kuanAiLCJib3lmcmllbmQuanAiLCJidXQuanAiLCJjYW5keXBvcC5qcCIsImNhcG9vLmpwIiwiY2F0Zm9vZC5q''@;'; put 'put ''cCIsImNoZWFwLmpwIiwiY2hpY2FwcGEuanAiLCJjaGlsbG91dC5qcCIsImNoaXBzLmpwIiwiY2hvd2Rlci5qcCIsImNodS5qcCIsImNpYW8uanAiLCJjb2NvdHRlLmpwIiwiY29vbGJsb2cuanAiLCJjcmFua3kuanAiLCJjdXRlZ2lybC5qcCIsImRhYS5qcCIsImRlY2EuanAiLCJkZWNpLmpw''@;'; put 'put ''IiwiZGlnaWNrLmpwIiwiZWdvaXNtLmpwIiwiZmFrZWZ1ci5qcCIsImZlbS5qcCIsImZsaWVyLmpwIiwiZmxvcHB5LmpwIiwiZm9vbC5qcCIsImZyZW5jaGtpc3MuanAiLCJnaXJsZnJpZW5kLmpwIiwiZ2lybHkuanAiLCJnbG9vbXkuanAiLCJnb25uYS5qcCIsImdyZWF0ZXIuanAiLCJoYWNj''@;'; put 'put ''YS5qcCIsImhlYXZ5LmpwIiwiaGVyLmpwIiwiaGloby5qcCIsImhpcHB5LmpwIiwiaG9seS5qcCIsImh1bmdyeS5qcCIsImljdXJ1cy5qcCIsIml0aWdvLmpwIiwiamVsbHliZWFuLmpwIiwia2lraXJhcmEuanAiLCJraWxsLmpwIiwia2lsby5qcCIsImt1cm9uLmpwIiwibGl0dGxlc3Rhci5q''@;'; put 'put ''cCIsImxvbGlwb3BtYy5qcCIsImxvbGl0YXB1bmsuanAiLCJsb21vLmpwIiwibG92ZXBvcC5qcCIsImxvdmVzaWNrLmpwIiwibWFpbi5qcCIsIm1vZHMuanAiLCJtb25kLmpwIiwibW9uZ29saWFuLmpwIiwibW9vLmpwIiwibmFtYXN0ZS5qcCIsIm5pa2l0YS5qcCIsIm5vYnVzaGkuanAiLCJu''@;'; put 'put ''b29yLmpwIiwib29wcy5qcCIsInBhcmFsbGVsLmpwIiwicGFyYXNpdGUuanAiLCJwZWNvcmkuanAiLCJwZWV3ZWUuanAiLCJwZW5uZS5qcCIsInBlcHBlci5qcCIsInBlcm1hLmpwIiwicGlnYm9hdC5qcCIsInBpbm9rby5qcCIsInB1bnl1LmpwIiwicHVwdS5qcCIsInB1c3N5Y2F0LmpwIiwi''@;'; put 'put ''cHlhLmpwIiwicmFpbmRyb3AuanAiLCJyZWFkeW1hZGUuanAiLCJzYWRpc3QuanAiLCJzY2hvb2xidXMuanAiLCJzZWNyZXQuanAiLCJzdGFiYS5qcCIsInN0cmlwcGVyLmpwIiwic3ViLmpwIiwic3VubnlkYXkuanAiLCJ0aGljay5qcCIsInRvbmtvdHN1LmpwIiwidW5kZXIuanAiLCJ1cHBl''@;'; put 'put ''ci5qcCIsInZlbHZldC5qcCIsInZlcnNlLmpwIiwidmVyc3VzLmpwIiwidml2aWFuLmpwIiwid2F0c29uLmpwIiwid2VibGlrZS5qcCIsIndoaXRlc25vdy5qcCIsInpvbWJpZS5qcCIsImhldGVtbC5uZXQiLCJncmFwaGljLmRlc2lnbiIsImdvaXAuZGUiLCJibG9nc3BvdC5hZSIsImJsb2dz''@;'; put 'put ''cG90LmFsIiwiYmxvZ3Nwb3QuYW0iLCIqLmhvc3RlZC5hcHAiLCIqLnJ1bi5hcHAiLCJ3ZWIuYXBwIiwiYmxvZ3Nwb3QuY29tLmFyIiwiYmxvZ3Nwb3QuY28uYXQiLCJibG9nc3BvdC5jb20uYXUiLCJibG9nc3BvdC5iYSIsImJsb2dzcG90LmJlIiwiYmxvZ3Nwb3QuYmciLCJibG9nc3BvdC5i''@;'; put 'put ''aiIsImJsb2dzcG90LmNvbS5iciIsImJsb2dzcG90LmNvbS5ieSIsImJsb2dzcG90LmNhIiwiYmxvZ3Nwb3QuY2YiLCJibG9nc3BvdC5jaCIsImJsb2dzcG90LmNsIiwiYmxvZ3Nwb3QuY29tLmNvIiwiKi4wZW1tLmNvbSIsImFwcHNwb3QuY29tIiwiKi5yLmFwcHNwb3QuY29tIiwiYmxvZ3Nw''@;'; put 'put ''b3QuY29tIiwiY29kZXNwb3QuY29tIiwiZ29vZ2xlYXBpcy5jb20iLCJnb29nbGVjb2RlLmNvbSIsInBhZ2VzcGVlZG1vYmlsaXplci5jb20iLCJ3aXRoZ29vZ2xlLmNvbSIsIndpdGh5b3V0dWJlLmNvbSIsImJsb2dzcG90LmN2IiwiYmxvZ3Nwb3QuY29tLmN5IiwiYmxvZ3Nwb3QuY3oiLCJi''@;'; put 'put ''bG9nc3BvdC5kZSIsIiouZ2F0ZXdheS5kZXYiLCJibG9nc3BvdC5kayIsImJsb2dzcG90LmNvbS5lZSIsImJsb2dzcG90LmNvbS5lZyIsImJsb2dzcG90LmNvbS5lcyIsImJsb2dzcG90LmZpIiwiYmxvZ3Nwb3QuZnIiLCJjbG91ZC5nb29nIiwidHJhbnNsYXRlLmdvb2ciLCIqLnVzZXJjb250''@;'; put 'put ''ZW50Lmdvb2ciLCJibG9nc3BvdC5nciIsImJsb2dzcG90LmhrIiwiYmxvZ3Nwb3QuaHIiLCJibG9nc3BvdC5odSIsImJsb2dzcG90LmNvLmlkIiwiYmxvZ3Nwb3QuaWUiLCJibG9nc3BvdC5jby5pbCIsImJsb2dzcG90LmluIiwiYmxvZ3Nwb3QuaXMiLCJibG9nc3BvdC5pdCIsImJsb2dzcG90''@;'; put 'put ''LmpwIiwiYmxvZ3Nwb3QuY28ua2UiLCJibG9nc3BvdC5rciIsImJsb2dzcG90LmxpIiwiYmxvZ3Nwb3QubHQiLCJibG9nc3BvdC5sdSIsImJsb2dzcG90Lm1kIiwiYmxvZ3Nwb3QubWsiLCJibG9nc3BvdC5jb20ubXQiLCJibG9nc3BvdC5teCIsImJsb2dzcG90Lm15IiwiY2xvdWRmdW5jdGlv''@;'; put 'put ''bnMubmV0IiwiYmxvZ3Nwb3QuY29tLm5nIiwiYmxvZ3Nwb3QubmwiLCJibG9nc3BvdC5ubyIsImJsb2dzcG90LmNvLm56IiwiYmxvZ3Nwb3QucGUiLCJibG9nc3BvdC5wdCIsImJsb2dzcG90LnFhIiwiYmxvZ3Nwb3QucmUiLCJibG9nc3BvdC5ybyIsImJsb2dzcG90LnJzIiwiYmxvZ3Nwb3Qu''@;'; put 'put ''cnUiLCJibG9nc3BvdC5zZSIsImJsb2dzcG90LnNnIiwiYmxvZ3Nwb3Quc2kiLCJibG9nc3BvdC5zayIsImJsb2dzcG90LnNuIiwiYmxvZ3Nwb3QudGQiLCJibG9nc3BvdC5jb20udHIiLCJibG9nc3BvdC50dyIsImJsb2dzcG90LnVnIiwiYmxvZ3Nwb3QuY28udWsiLCJibG9nc3BvdC5jb20u''@;'; put 'put ''dXkiLCJibG9nc3BvdC52biIsImJsb2dzcG90LmNvLnphIiwiZ291cGlsZS5mciIsInB5bW50LnVrIiwiY2xvdWRhcHBzLmRpZ2l0YWwiLCJsb25kb24uY2xvdWRhcHBzLmRpZ2l0YWwiLCJnb3YubmwiLCJncmFmYW5hLWRldi5uZXQiLCJncmF5amF5bGVhZ3Vlcy5jb20iLCJnXHhmY25zdGln''@;'; put 'put ''YmVzdGVsbGVuLmRlIiwiZ1x4ZmNuc3RpZ2xpZWZlcm4uZGUiLCJmaW4uY2kiLCJmcmVlLmhyIiwiY2FhLmxpIiwidWEucnMiLCJjb25mLnNlIiwiaFx4ZTRra2luZW4uZmkiLCJocnNuLmRldiIsImhhc2hiYW5nLnNoIiwiaGFzdXJhLmFwcCIsImhhc3VyYS1hcHAuaW8iLCJoYXRlbmFibG9n''@;'; put 'put ''LmNvbSIsImhhdGVuYWRpYXJ5LmNvbSIsImhhdGVibG8uanAiLCJoYXRlbmFibG9nLmpwIiwiaGF0ZW5hZGlhcnkuanAiLCJoYXRlbmFkaWFyeS5vcmciLCJwYWdlcy5pdC5ocy1oZWlsYnJvbm4uZGUiLCJwYWdlcy1yZXNlYXJjaC5pdC5ocy1oZWlsYnJvbm4uZGUiLCJoZWl5dS5zcGFjZSIs''@;'; put 'put ''ImhlbGlvaG8uc3QiLCJoZWxpb2hvc3QudXMiLCJoZXBmb3JnZS5vcmciLCJoZXJva3VhcHAuY29tIiwiaGVyb2t1c3NsLmNvbSIsImhleWZsb3cucGFnZSIsImhleWZsb3cuc2l0ZSIsInJhdmVuZGIuY2xvdWQiLCJyYXZlbmRiLmNvbW11bml0eSIsImRldmVsb3BtZW50LnJ1biIsInJhdmVu''@;'; put 'put ''ZGIucnVuIiwiaG9tZXNrbGVwLnBsIiwiKi5raW4ub25lIiwiKi5pZC5wdWIiLCIqLmtpbi5wdWIiLCJzZWNhYXMuaGsiLCJob3BsaXguc2hvcCIsIm9yeC5iaXoiLCJiaXouZ2wiLCJiaXoubmciLCJjby5iaXoubmciLCJkbC5iaXoubmciLCJnby5iaXoubmciLCJsZy5iaXoubmciLCJvbi5i''@;'; put 'put ''aXoubmciLCJjb2wubmciLCJmaXJtLm5nIiwiZ2VuLm5nIiwibHRkLm5nIiwibmdvLm5nIiwicGxjLm5nIiwiaWUudWEiLCJob3N0eWhvc3RpbmcuaW8iLCJoZi5zcGFjZSIsInN0YXRpYy5oZi5zcGFjZSIsImh5cGVybm9kZS5pbyIsImlvYmIubmV0IiwiY28uY3oiLCIqLm1vb25zY2FsZS5p''@;'; put 'put ''byIsIm1vb25zY2FsZS5uZXQiLCJnci5jb20iLCJpa2kuZmkiLCJpYnhvcy5pdCIsImlsaWFkYm94b3MuaXQiLCJzbXVzaGNkbi5jb20iLCJ3cGhvc3RlZG1haWwuY29tIiwid3BtdWNkbi5jb20iLCJ0ZW1wdXJsLmhvc3QiLCJ3cG11ZGV2Lmhvc3QiLCJkeW4tYmVybGluLmRlIiwiaW4tYmVy''@;'; put 'put ''bGluLmRlIiwiaW4tYnJiLmRlIiwiaW4tYnV0dGVyLmRlIiwiaW4tZHNsLmRlIiwiaW4tdnBuLmRlIiwiaW4tZHNsLm5ldCIsImluLXZwbi5uZXQiLCJpbi1kc2wub3JnIiwiaW4tdnBuLm9yZyIsImJpei5hdCIsImluZm8uYXQiLCJpbmZvLmN4IiwiYWMubGVnLmJyIiwiYWwubGVnLmJyIiwi''@;'; put 'put ''YW0ubGVnLmJyIiwiYXAubGVnLmJyIiwiYmEubGVnLmJyIiwiY2UubGVnLmJyIiwiZGYubGVnLmJyIiwiZXMubGVnLmJyIiwiZ28ubGVnLmJyIiwibWEubGVnLmJyIiwibWcubGVnLmJyIiwibXMubGVnLmJyIiwibXQubGVnLmJyIiwicGEubGVnLmJyIiwicGIubGVnLmJyIiwicGUubGVnLmJy''@;'; put 'put ''IiwicGkubGVnLmJyIiwicHIubGVnLmJyIiwicmoubGVnLmJyIiwicm4ubGVnLmJyIiwicm8ubGVnLmJyIiwicnIubGVnLmJyIiwicnMubGVnLmJyIiwic2MubGVnLmJyIiwic2UubGVnLmJyIiwic3AubGVnLmJyIiwidG8ubGVnLmJyIiwicGl4b2xpbm8uY29tIiwibmE0dS5ydSIsImFwcHMt''@;'; put 'put ''MWFuZDEuY29tIiwibGl2ZS13ZWJzaXRlLmNvbSIsImFwcHMtMWFuZDEubmV0Iiwid2Vic2l0ZWJ1aWxkZXIub25saW5lIiwiYXBwLWlvbm9zLnNwYWNlIiwiaW9wc3lzLnNlIiwiKi5kd2ViLmxpbmsiLCJpcGlmb255Lm5ldCIsImlyLm1kIiwiaXMtYS1nb29kLmRldiIsImlzLWEuZGV2Iiwi''@;'; put 'put ''aXNlcnZzY2h1bGUuZGUiLCJtZWluLWlzZXJ2LmRlIiwic2NodWxwbGF0dGZvcm0uZGUiLCJzY2h1bHNlcnZlci5kZSIsInRlc3QtaXNlcnYuZGUiLCJpc2Vydi5kZXYiLCJtZWwuY2xvdWRsZXRzLmNvbS5hdSIsImNsb3VkLmludGVyaG9zdHNvbHV0aW9ucy5iZSIsImFscDEuYWUuZmxvdy5j''@;'; put 'put ''aCIsImFwcGVuZ2luZS5mbG93LmNoIiwiZXMtMS5heGFybmV0LmNsb3VkIiwiZGlhZGVtLmNsb3VkIiwidmlwLmplbGFzdGljLmNsb3VkIiwiamVsZS5jbG91ZCIsIml0MS5ldXIuYXJ1YmEuamVudi1hcnViYS5jbG91ZCIsIml0MS5qZW52LWFydWJhLmNsb3VkIiwia2VsaXdlYi5jbG91ZCIs''@;'; put 'put ''ImNzLmtlbGl3ZWIuY2xvdWQiLCJveGEuY2xvdWQiLCJ0bi5veGEuY2xvdWQiLCJ1ay5veGEuY2xvdWQiLCJwcmltZXRlbC5jbG91ZCIsInVrLnByaW1ldGVsLmNsb3VkIiwiY2EucmVjbGFpbS5jbG91ZCIsInVrLnJlY2xhaW0uY2xvdWQiLCJ1cy5yZWNsYWltLmNsb3VkIiwiY2gudHJlbmRo''@;'; put 'put ''b3N0aW5nLmNsb3VkIiwiZGUudHJlbmRob3N0aW5nLmNsb3VkIiwiamVsZS5jbHViIiwiZG9wYWFzLmNvbSIsInBhYXMuaG9zdGVkLWJ5LXByZXZpZGVyLmNvbSIsInJhZy1jbG91ZC5ob3N0ZXVyLmNvbSIsInJhZy1jbG91ZC1jaC5ob3N0ZXVyLmNvbSIsImpjbG91ZC5pay1zZXJ2ZXIuY29t''@;'; put 'put ''IiwiamNsb3VkLXZlci1qcGMuaWstc2VydmVyLmNvbSIsImRlbW8uamVsYXN0aWMuY29tIiwicGFhcy5tYXNzaXZlZ3JpZC5jb20iLCJqZWQud2FmYWljbG91ZC5jb20iLCJyeWQud2FmYWljbG91ZC5jb20iLCJqLnNjYWxlZm9yY2UuY29tLmN5IiwiamVsYXN0aWMuZG9nYWRvLmV1IiwiZmku''@;'; put 'put ''Y2xvdWRwbGF0Zm9ybS5maSIsImRlbW8uZGF0YWNlbnRlci5maSIsInBhYXMuZGF0YWNlbnRlci5maSIsImplbGUuaG9zdCIsIm1pcmNsb3VkLmhvc3QiLCJwYWFzLmJlZWJ5dGUuaW8iLCJzZWtkMS5iZWVieXRlYXBwLmlvIiwiamVsZS5pbyIsImpjLm5lZW4uaXQiLCJqY2xvdWQua3oiLCJj''@;'; put 'put ''bG91ZGppZmZ5Lm5ldCIsImZyYTEtZGUuY2xvdWRqaWZmeS5uZXQiLCJ3ZXN0MS11cy5jbG91ZGppZmZ5Lm5ldCIsImpscy1zdG8xLmVsYXN0eC5uZXQiLCJqbHMtc3RvMi5lbGFzdHgubmV0IiwiamxzLXN0bzMuZWxhc3R4Lm5ldCIsImZyLTEucGFhcy5tYXNzaXZlZ3JpZC5uZXQiLCJsb24t''@;'; put 'put ''MS5wYWFzLm1hc3NpdmVncmlkLm5ldCIsImxvbi0yLnBhYXMubWFzc2l2ZWdyaWQubmV0IiwibnktMS5wYWFzLm1hc3NpdmVncmlkLm5ldCIsIm55LTIucGFhcy5tYXNzaXZlZ3JpZC5uZXQiLCJzZy0xLnBhYXMubWFzc2l2ZWdyaWQubmV0IiwiamVsYXN0aWMuc2F2ZWluY2xvdWQubmV0Iiwi''@;'; put 'put ''bm9yZGVzdGUtaWRjLnNhdmVpbmNsb3VkLm5ldCIsImouc2NhbGVmb3JjZS5uZXQiLCJzZHNjbG91ZC5wbCIsInVuaWNsb3VkLnBsIiwibWlyY2xvdWQucnUiLCJlbnNjYWxlZC5zZyIsImplbGUuc2l0ZSIsImplbGFzdGljLnRlYW0iLCJvcmFuZ2VjbG91ZC50biIsImoubGF5ZXJzaGlmdC5j''@;'; put 'put ''by51ayIsInBoeC5lbnNjYWxlZC51cyIsIm1pcmNsb3VkLnVzIiwibXlqaW5vLnJ1IiwiKi5ob3N0aW5nLm15amluby5ydSIsIioubGFuZGluZy5teWppbm8ucnUiLCIqLnNwZWN0cnVtLm15amluby5ydSIsIioudnBzLm15amluby5ydSIsImpvdGVsdWx1LmNsb3VkIiwid2ViYWRvcnNpdGUu''@;'; put 'put ''Y29tIiwiam91d3dlYi5zaXRlIiwiKi5jbnMuam95ZW50LmNvbSIsIioudHJpdG9uLnpvbmUiLCJqcy5vcmciLCJrYWFzLmdnIiwia2hwbGF5Lm5sIiwia2Fwc2kuZmkiLCJlenByb3h5Lmt1bGV1dmVuLmJlIiwia3VsZXV2ZW4uY2xvdWQiLCJrZXltYWNoaW5lLmRlIiwia2luZ2hvc3QubmV0''@;'; put 'put ''IiwidW5pNS5uZXQiLCJrbmlnaHRwb2ludC5zeXN0ZW1zIiwia29vYmluLmV2ZW50cyIsIndlYnRoaW5ncy5pbyIsImtyZWxsaWFuLm5ldCIsIm95YS50byIsImdpdC1yZXBvcy5kZSIsImxjdWJlLXNlcnZlci5kZSIsInN2bi1yZXBvcy5kZSIsImxlYWRwYWdlcy5jbyIsImxwYWdlcy5jbyIs''@;'; put 'put ''ImxwdXNlcmNvbnRlbnQuY29tIiwibGVsdXguc2l0ZSIsImxpYnAycC5kaXJlY3QiLCJydW5jb250YWluZXJzLmRldiIsImNvLmJ1c2luZXNzIiwiY28uZWR1Y2F0aW9uIiwiY28uZXZlbnRzIiwiY28uZmluYW5jaWFsIiwiY28ubmV0d29yayIsImNvLnBsYWNlIiwiY28udGVjaG5vbG9neSIs''@;'; put 'put ''Imxpbmt5YXJkLWNsb3VkLmNoIiwibGlua3lhcmQuY2xvdWQiLCJtZW1iZXJzLmxpbm9kZS5jb20iLCIqLm5vZGViYWxhbmNlci5saW5vZGUuY29tIiwiKi5saW5vZGVvYmplY3RzLmNvbSIsImlwLmxpbm9kZXVzZXJjb250ZW50LmNvbSIsIndlLmJzIiwiZmlsZWdlYXItc2cubWUiLCJnZ2Zm''@;'; put 'put ''Lm5ldCIsIioudXNlci5sb2NhbGNlcnQuZGV2IiwibG9kei5wbCIsInBhYmlhbmljZS5wbCIsInBsb2NrLnBsIiwic2llcmFkei5wbCIsInNraWVybmlld2ljZS5wbCIsInpnaWVyei5wbCIsImxvZ2lubGluZS5hcHAiLCJsb2dpbmxpbmUuZGV2IiwibG9naW5saW5lLmlvIiwibG9naW5saW5l''@;'; put 'put ''LnNlcnZpY2VzIiwibG9naW5saW5lLnNpdGUiLCJsb2htdXMubWUiLCJzZXJ2ZXJzLnJ1biIsImtyYXNuaWsucGwiLCJsZWN6bmEucGwiLCJsdWJhcnRvdy5wbCIsImx1Ymxpbi5wbCIsInBvbmlhdG93YS5wbCIsInN3aWRuaWsucGwiLCJnbHVnLm9yZy51ayIsImx1Zy5vcmcudWsiLCJsdWdz''@;'; put 'put ''Lm9yZy51ayIsImJhcnN5LmJnIiwiYmFyc3kuY2x1YiIsImJhcnN5Y2VudGVyLmNvbSIsImJhcnN5b25saW5lLmNvbSIsImJhcnN5LmRlIiwiYmFyc3kuZGV2IiwiYmFyc3kuZXUiLCJiYXJzeS5nciIsImJhcnN5LmluIiwiYmFyc3kuaW5mbyIsImJhcnN5LmlvIiwiYmFyc3kubWUiLCJiYXJz''@;'; put 'put ''eS5tZW51IiwiYmFyc3lvbmxpbmUubWVudSIsImJhcnN5Lm1vYmkiLCJiYXJzeS5uZXQiLCJiYXJzeS5vbmxpbmUiLCJiYXJzeS5vcmciLCJiYXJzeS5wcm8iLCJiYXJzeS5wdWIiLCJiYXJzeS5ybyIsImJhcnN5LnJzIiwiYmFyc3kuc2hvcCIsImJhcnN5b25saW5lLnNob3AiLCJiYXJzeS5z''@;'; put 'put ''aXRlIiwiYmFyc3kuc3RvcmUiLCJiYXJzeS5zdXBwb3J0IiwiYmFyc3kudWsiLCJiYXJzeS5jby51ayIsImJhcnN5b25saW5lLmNvLnVrIiwiKi5tYWdlbnRvc2l0ZS5jbG91ZCIsImhiLmNsZG1haWwucnUiLCJtYXRsYWIuY2xvdWQiLCJtb2RlbHNjYXBlLmNvbSIsIm13Y2xvdWRub25wcm9k''@;'; put 'put ''LmNvbSIsInBvbHlzcGFjZS5jb20iLCJtYXlmaXJzdC5pbmZvIiwibWF5Zmlyc3Qub3JnIiwibWF6ZXBsYXkuY29tIiwibWNkaXIubWUiLCJtY2Rpci5ydSIsInZwcy5tY2Rpci5ydSIsIm1jcHJlLnJ1IiwibWVkaWF0ZWNoLmJ5IiwibWVkaWF0ZWNoLmRldiIsImhyYS5oZWFsdGgiLCJtZWR1''@;'; put 'put ''c2Fqcy5hcHAiLCJtaW5pc2VydmVyLmNvbSIsIm1lbXNldC5uZXQiLCJtZXNzZXJsaS5hcHAiLCJhdG1ldGEuY29tIiwiYXBwcy5mYnNieC5jb20iLCIqLmNsb3VkLm1ldGFjZW50cnVtLmN6IiwiY3VzdG9tLm1ldGFjZW50cnVtLmN6IiwiZmx0LmNsb3VkLm11bmkuY3oiLCJ1c3IuY2xvdWQu''@;'; put 'put ''bXVuaS5jeiIsIm1ldGVvcmFwcC5jb20iLCJldS5tZXRlb3JhcHAuY29tIiwiY28ucGwiLCIqLmF6dXJlY29udGFpbmVyLmlvIiwiYXp1cmUtYXBpLm5ldCIsImF6dXJlLW1vYmlsZS5uZXQiLCJhenVyZWVkZ2UubmV0IiwiYXp1cmVmZC5uZXQiLCJhenVyZXN0YXRpY2FwcHMubmV0IiwiMS5h''@;'; put 'put ''enVyZXN0YXRpY2FwcHMubmV0IiwiMi5henVyZXN0YXRpY2FwcHMubmV0IiwiMy5henVyZXN0YXRpY2FwcHMubmV0IiwiNC5henVyZXN0YXRpY2FwcHMubmV0IiwiNS5henVyZXN0YXRpY2FwcHMubmV0IiwiNi5henVyZXN0YXRpY2FwcHMubmV0IiwiNy5henVyZXN0YXRpY2FwcHMubmV0Iiwi''@;'; put 'put ''Y2VudHJhbHVzLmF6dXJlc3RhdGljYXBwcy5uZXQiLCJlYXN0YXNpYS5henVyZXN0YXRpY2FwcHMubmV0IiwiZWFzdHVzMi5henVyZXN0YXRpY2FwcHMubmV0Iiwid2VzdGV1cm9wZS5henVyZXN0YXRpY2FwcHMubmV0Iiwid2VzdHVzMi5henVyZXN0YXRpY2FwcHMubmV0IiwiYXp1cmV3ZWJz''@;'; put 'put ''aXRlcy5uZXQiLCJjbG91ZGFwcC5uZXQiLCJ0cmFmZmljbWFuYWdlci5uZXQiLCJibG9iLmNvcmUud2luZG93cy5uZXQiLCJzZXJ2aWNlYnVzLndpbmRvd3MubmV0Iiwicm91dGluZ3RoZWNsb3VkLmNvbSIsInNuLm15bmV0bmFtZS5uZXQiLCJyb3V0aW5ndGhlY2xvdWQubmV0Iiwicm91dGlu''@;'; put 'put ''Z3RoZWNsb3VkLm9yZyIsImNzeC5jYyIsIm15ZGJzZXJ2ZXIuY29tIiwid2Vic3BhY2Vjb25maWcuZGUiLCJtaXR0d2FsZC5pbmZvIiwibWl0dHdhbGRzZXJ2ZXIuaW5mbyIsInR5cG8zc2VydmVyLmluZm8iLCJwcm9qZWN0LnNwYWNlIiwibW9keC5kZXYiLCJibW9hdHRhY2htZW50cy5vcmci''@;'; put 'put ''LCJuZXQucnUiLCJvcmcucnUiLCJwcC5ydSIsImhvc3RlZHBpLmNvbSIsImNhcmFjYWwubXl0aGljLWJlYXN0cy5jb20iLCJjdXN0b21lci5teXRoaWMtYmVhc3RzLmNvbSIsImZlbnRpZ2VyLm15dGhpYy1iZWFzdHMuY29tIiwibHlueC5teXRoaWMtYmVhc3RzLmNvbSIsIm9jZWxvdC5teXRo''@;'; put 'put ''aWMtYmVhc3RzLmNvbSIsIm9uY2lsbGEubXl0aGljLWJlYXN0cy5jb20iLCJvbnphLm15dGhpYy1iZWFzdHMuY29tIiwic3BoaW54Lm15dGhpYy1iZWFzdHMuY29tIiwidnMubXl0aGljLWJlYXN0cy5jb20iLCJ4Lm15dGhpYy1iZWFzdHMuY29tIiwieWFsaS5teXRoaWMtYmVhc3RzLmNvbSIs''@;'; put 'put ''ImN1c3QucmV0cm9zbnViLmNvLnVrIiwidWkubmFidS5jYXNhIiwiY2xvdWQubm9zcGFtcHJveHkuY29tIiwibmV0ZnkuYXBwIiwibmV0bGlmeS5hcHAiLCI0dS5jb20iLCJuZnNob3N0LmNvbSIsImlwZnMubmZ0c3RvcmFnZS5saW5rIiwibmdvLnVzIiwibmdyb2suYXBwIiwibmdyb2stZnJl''@;'; put 'put ''ZS5hcHAiLCJuZ3Jvay5kZXYiLCJuZ3Jvay1mcmVlLmRldiIsIm5ncm9rLmlvIiwiYXAubmdyb2suaW8iLCJhdS5uZ3Jvay5pbyIsImV1Lm5ncm9rLmlvIiwiaW4ubmdyb2suaW8iLCJqcC5uZ3Jvay5pbyIsInNhLm5ncm9rLmlvIiwidXMubmdyb2suaW8iLCJuZ3Jvay5waXp6YSIsIm5ncm9r''@;'; put 'put ''LnBybyIsInRvcnVuLnBsIiwibmgtc2Vydi5jby51ayIsIm5pbXNpdGUudWsiLCJtbWFmYW4uYml6IiwibXlmdHAuYml6Iiwibm8taXAuYml6Iiwibm8taXAuY2EiLCJmYW50YXN5bGVhZ3VlLmNjIiwiZ290ZG5zLmNoIiwiM3V0aWxpdGllcy5jb20iLCJibG9nc3l0ZS5jb20iLCJjaXNjb2Zy''@;'; put 'put ''ZWFrLmNvbSIsImRhbW5zZXJ2ZXIuY29tIiwiZGRuc2tpbmcuY29tIiwiZGl0Y2h5b3VyaXAuY29tIiwiZG5zaXNraW5reS5jb20iLCJkeW5ucy5jb20iLCJnZWVrZ2FsYXh5LmNvbSIsImhlYWx0aC1jYXJlcmVmb3JtLmNvbSIsImhvbWVzZWN1cml0eW1hYy5jb20iLCJob21lc2VjdXJpdHlw''@;'; put 'put ''Yy5jb20iLCJteWFjdGl2ZWRpcmVjdG9yeS5jb20iLCJteXNlY3VyaXR5Y2FtZXJhLmNvbSIsIm15dm5jLmNvbSIsIm5ldC1mcmVha3MuY29tIiwib250aGV3aWZpLmNvbSIsInBvaW50MnRoaXMuY29tIiwicXVpY2tzeXRlcy5jb20iLCJzZWN1cml0eXRhY3RpY3MuY29tIiwic2VydmViZWVy''@;'; put 'put ''LmNvbSIsInNlcnZlY291bnRlcnN0cmlrZS5jb20iLCJzZXJ2ZWV4Y2hhbmdlLmNvbSIsInNlcnZlZnRwLmNvbSIsInNlcnZlZ2FtZS5jb20iLCJzZXJ2ZWhhbGZsaWZlLmNvbSIsInNlcnZlaHR0cC5jb20iLCJzZXJ2ZWh1bW91ci5jb20iLCJzZXJ2ZWlyYy5jb20iLCJzZXJ2ZW1wMy5jb20i''@;'; put 'put ''LCJzZXJ2ZXAycC5jb20iLCJzZXJ2ZXBpY3MuY29tIiwic2VydmVxdWFrZS5jb20iLCJzZXJ2ZXNhcmNhc20uY29tIiwic3R1ZmZ0b3JlYWQuY29tIiwidW51c3VhbHBlcnNvbi5jb20iLCJ3b3JraXNib3JpbmcuY29tIiwiZHZyY2FtLmluZm8iLCJpbG92ZWNvbGxlZ2UuaW5mbyIsIm5vLWlw''@;'; put 'put ''LmluZm8iLCJicmFzaWxpYS5tZSIsImRkbnMubWUiLCJkbnNmb3IubWUiLCJob3B0by5tZSIsImxvZ2ludG8ubWUiLCJub2lwLm1lIiwid2ViaG9wLm1lIiwiYm91bmNlbWUubmV0IiwiZGRucy5uZXQiLCJlYXRpbmctb3JnYW5pYy5uZXQiLCJteWRpc3NlbnQubmV0IiwibXllZmZlY3QubmV0''@;'; put 'put ''IiwibXltZWRpYXBjLm5ldCIsIm15cHN4Lm5ldCIsIm15c2VjdXJpdHljYW1lcmEubmV0IiwibmhsZmFuLm5ldCIsIm5vLWlwLm5ldCIsInBnYWZhbi5uZXQiLCJwcml2YXRpemVoZWFsdGhpbnN1cmFuY2UubmV0IiwicmVkaXJlY3RtZS5uZXQiLCJzZXJ2ZWJsb2cubmV0Iiwic2VydmVtaW5l''@;'; put 'put ''Y3JhZnQubmV0Iiwic3l0ZXMubmV0IiwiY2FibGUtbW9kZW0ub3JnIiwiY29sbGVnZWZhbi5vcmciLCJjb3VjaHBvdGF0b2ZyaWVzLm9yZyIsImhvcHRvLm9yZyIsIm1sYmZhbi5vcmciLCJteWZ0cC5vcmciLCJteXNlY3VyaXR5Y2FtZXJhLm9yZyIsIm5mbGZhbi5vcmciLCJuby1pcC5vcmci''@;'; put 'put ''LCJyZWFkLWJvb2tzLm9yZyIsInVmY2Zhbi5vcmciLCJ6YXB0by5vcmciLCJuby1pcC5jby51ayIsImdvbGZmYW4udXMiLCJub2lwLnVzIiwicG9pbnR0by51cyIsInN0YWdlLm5vZGVhcnQuaW8iLCIqLmRldmVsb3Blci5hcHAiLCJub29wLmFwcCIsIioubm9ydGhmbGFuay5hcHAiLCIqLmJ1''@;'; put 'put ''aWxkLnJ1biIsIiouY29kZS5ydW4iLCIqLmRhdGFiYXNlLnJ1biIsIioubWlncmF0aW9uLnJ1biIsIm5vdGljZWFibGUubmV3cyIsIm5vdGlvbi5zaXRlIiwiZG5za2luZy5jaCIsIm15cGkuY28iLCJuNHQuY28iLCIwMDF3d3cuY29tIiwibXlpcGhvc3QuY29tIiwiZm9ydW16LmluZm8iLCJz''@;'; put 'put ''b3VuZGNhc3QubWUiLCJ0Y3A0Lm1lIiwiZG5zdXAubmV0IiwiaGljYW0ubmV0Iiwibm93LWRucy5uZXQiLCJvd25pcC5uZXQiLCJ2cG5kbnMubmV0IiwiZHluc2Vydi5vcmciLCJub3ctZG5zLm9yZyIsIng0NDMucHciLCJub3ctZG5zLnRvcCIsIm50ZGxsLnRvcCIsImZyZWVkZG5zLnVzIiwi''@;'; put 'put ''bnN1cGRhdGUuaW5mbyIsIm5lcmRwb2wub3ZoIiwibnljLm1uIiwicHJ2Y3kucGFnZSIsIm9ibC5vbmciLCJvYnNlcnZhYmxlaHEuY2xvdWQiLCJzdGF0aWMub2JzZXJ2YWJsZXVzZXJjb250ZW50LmNvbSIsIm9tZy5sb2wiLCJjbG91ZHljbHVzdGVyLm5ldCIsIm9tbml3ZS5zaXRlIiwiMTIz''@;'; put 'put ''d2Vic2VpdGUuYXQiLCIxMjN3ZWJzaXRlLmJlIiwic2ltcGxlc2l0ZS5jb20uYnIiLCIxMjN3ZWJzaXRlLmNoIiwic2ltcGxlc2l0ZS5jb20iLCIxMjN3ZWJzZWl0ZS5kZSIsIjEyM2hqZW1tZXNpZGUuZGsiLCIxMjNtaXdlYi5lcyIsIjEyM2tvdGlzaXZ1LmZpIiwiMTIzc2l0ZXdlYi5mciIs''@;'; put 'put ''InNpbXBsZXNpdGUuZ3IiLCIxMjNob21lcGFnZS5pdCIsIjEyM3dlYnNpdGUubHUiLCIxMjN3ZWJzaXRlLm5sIiwiMTIzaGplbW1lc2lkZS5ubyIsInNlcnZpY2Uub25lIiwic2ltcGxlc2l0ZS5wbCIsIjEyM3BhZ2luYXdlYi5wdCIsIjEyM21pbnNpZGEuc2UiLCJpcy1hLWZ1bGxzdGFjay5k''@;'; put 'put ''ZXYiLCJpcy1jb29sLmRldiIsImlzLW5vdC1hLmRldiIsImxvY2FscGxheWVyLmRldiIsImlzLWxvY2FsLm9yZyIsIm9wZW5zb2NpYWwuc2l0ZSIsIm9wZW5jcmFmdC5ob3N0aW5nIiwiMTYtYi5pdCIsIjMyLWIuaXQiLCI2NC1iLml0Iiwib3JzaXRlcy5jb20iLCJvcGVyYXVuaXRlLmNvbSIs''@;'; put 'put ''IiouY3VzdG9tZXItb2NpLmNvbSIsIioub2NpLmN1c3RvbWVyLW9jaS5jb20iLCIqLm9jcC5jdXN0b21lci1vY2kuY29tIiwiKi5vY3MuY3VzdG9tZXItb2NpLmNvbSIsIioub3JhY2xlY2xvdWRhcHBzLmNvbSIsIioub3JhY2xlZ292Y2xvdWRhcHBzLmNvbSIsIioub3JhY2xlZ292Y2xvdWRh''@;'; put 'put ''cHBzLnVrIiwidGVjaC5vcmFuZ2UiLCJjYW4ucmUiLCJhdXRoZ2Vhci1zdGFnaW5nLmNvbSIsImF1dGhnZWFyYXBwcy5jb20iLCJza3lnZWFyYXBwLmNvbSIsIm91dHN5c3RlbXNjbG91ZC5jb20iLCIqLmhvc3Rpbmcub3ZoLm5ldCIsIioud2VicGFhcy5vdmgubmV0Iiwib3ducHJvdmlkZXIu''@;'; put 'put ''Y29tIiwib3duLnBtIiwiKi5vd28uY29kZXMiLCJveC5ycyIsIm95LmxjIiwicGdmb2cuY29tIiwicGFnZXhsLmNvbSIsImdvdHBhbnRoZW9uLmNvbSIsInBhbnRoZW9uc2l0ZS5pbyIsIioucGF5d2hpcmwuY29tIiwiKi54bWl0LmNvIiwieG1pdC5kZXYiLCJtYWRldGhpcy5zaXRlIiwic3J2''@;'; put 'put ''LnVzIiwiZ2guc3J2LnVzIiwiZ2wuc3J2LnVzIiwibGszLnJ1IiwibXlwZXAubGluayIsInBlcnNwZWN0YS5jbG91ZCIsIm9uLXdlYi5mciIsIioudXBzdW4uYXBwIiwidXBzdW5hcHAuY29tIiwiZW50LnBsYXRmb3JtLnNoIiwiZXUucGxhdGZvcm0uc2giLCJ1cy5wbGF0Zm9ybS5zaCIsIiou''@;'; put 'put ''cGxhdGZvcm1zaC5zaXRlIiwiKi50c3Quc2l0ZSIsInBsYXR0ZXItYXBwLmNvbSIsInBsYXR0ZXItYXBwLmRldiIsInBsYXR0ZXJwLnVzIiwicGxleS5nYW1lcyIsIm9ucG9ydGVyLnJ1biIsImNvLmJuIiwicG9zdG1hbi1lY2hvLmNvbSIsInBzdG1uLmlvIiwibW9jay5wc3Rtbi5pbyIsImh0''@;'; put 'put ''dHBiaW4ub3JnIiwicHJlcXVhbGlmeW1lLnRvZGF5IiwieGVuLnByZ21yLmNvbSIsInByaXYuYXQiLCJwcm90b25ldC5pbyIsImNoaXJ1cmdpZW5zLWRlbnRpc3Rlcy1lbi1mcmFuY2UuZnIiLCJieWVuLnNpdGUiLCJwdWJ0bHMub3JnIiwicHl0aG9uYW55d2hlcmUuY29tIiwiZXUucHl0aG9u''@;'; put 'put ''YW55d2hlcmUuY29tIiwicWEyLmNvbSIsInFjeC5pbyIsIiouc3lzLnFjeC5pbyIsIm15cW5hcGNsb3VkLmNuIiwiYWxwaGEtbXlxbmFwY2xvdWQuY29tIiwiZGV2LW15cW5hcGNsb3VkLmNvbSIsIm15Y2xvdWRuYXMuY29tIiwibXluYXNjbG91ZC5jb20iLCJteXFuYXBjbG91ZC5jb20iLCJx''@;'; put 'put ''b3RvLmlvIiwicXVhbGlmaW9hcHAuY29tIiwibGFkZXNrLmNvbSIsInFidXNlci5jb20iLCIqLnF1aXBlbGVtZW50cy5jb20iLCJ2YXBvci5jbG91ZCIsInZhcG9yY2xvdWQuaW8iLCJyYWNrbWF6ZS5jb20iLCJyYWNrbWF6ZS5uZXQiLCJjbG91ZHNpdGUuYnVpbGRlcnMiLCJteXJhZHdlYi5u''@;'; put 'put ''ZXQiLCJzZXJ2ZXJuYW1lLnVzIiwid2ViLmluIiwiaW4ubmV0IiwibXlyZGJ4LmlvIiwic2l0ZS5yYi1ob3N0aW5nLmlvIiwiKi5vbi1yYW5jaGVyLmNsb3VkIiwiKi5vbi1rM3MuaW8iLCIqLm9uLXJpby5pbyIsInJhdnBhZ2UuY28uaWwiLCJyZWFkdGhlZG9jcy1ob3N0ZWQuY29tIiwicmVh''@;'; put 'put ''ZHRoZWRvY3MuaW8iLCJyaGNsb3VkLmNvbSIsImluc3RhbmNlcy5zcGF3bi5jYyIsIm9ucmVuZGVyLmNvbSIsImFwcC5yZW5kZXIuY29tIiwicmVwbGl0LmFwcCIsImlkLnJlcGxpdC5hcHAiLCJmaXJld2FsbGVkcmVwbGl0LmNvIiwiaWQuZmlyZXdhbGxlZHJlcGxpdC5jbyIsInJlcGwuY28i''@;'; put 'put ''LCJpZC5yZXBsLmNvIiwicmVwbGl0LmRldiIsImFyY2hlci5yZXBsaXQuZGV2IiwiYm9uZXMucmVwbGl0LmRldiIsImNhbmFyeS5yZXBsaXQuZGV2IiwiZ2xvYmFsLnJlcGxpdC5kZXYiLCJoYWNrZXIucmVwbGl0LmRldiIsImlkLnJlcGxpdC5kZXYiLCJqYW5ld2F5LnJlcGxpdC5kZXYiLCJr''@;'; put 'put ''aW0ucmVwbGl0LmRldiIsImtpcmEucmVwbGl0LmRldiIsImtpcmsucmVwbGl0LmRldiIsIm9kby5yZXBsaXQuZGV2IiwicGFyaXMucmVwbGl0LmRldiIsInBpY2FyZC5yZXBsaXQuZGV2IiwicGlrZS5yZXBsaXQuZGV2IiwicHJlcmVsZWFzZS5yZXBsaXQuZGV2IiwicmVlZC5yZXBsaXQuZGV2''@;'; put 'put ''IiwicmlrZXIucmVwbGl0LmRldiIsInNpc2tvLnJlcGxpdC5kZXYiLCJzcG9jay5yZXBsaXQuZGV2Iiwic3RhZ2luZy5yZXBsaXQuZGV2Iiwic3VsdS5yZXBsaXQuZGV2IiwidGFycGl0LnJlcGxpdC5kZXYiLCJ0ZWFtcy5yZXBsaXQuZGV2IiwidHVja2VyLnJlcGxpdC5kZXYiLCJ3ZXNsZXku''@;'; put 'put ''cmVwbGl0LmRldiIsIndvcmYucmVwbGl0LmRldiIsInJlcGwucnVuIiwicmVzaW5kZXZpY2UuaW8iLCJkZXZpY2VzLnJlc2luc3RhZ2luZy5pbyIsImh6Yy5pbyIsImFkaW1vLmNvLnVrIiwiaXRjb3VsZGJld29yLnNlIiwiYXVzLmJhc2tldGJhbGwiLCJuei5iYXNrZXRiYWxsIiwiZ2l0LXBh''@;'; put 'put ''Z2VzLnJpdC5lZHUiLCJyb2NreS5wYWdlIiwicnViLmRlIiwicnVoci11bmktYm9jaHVtLmRlIiwiaW8ubm9jLnJ1aHItdW5pLWJvY2h1bS5kZSIsIlx1MDQzMVx1MDQzOFx1MDQzNy5cdTA0NDBcdTA0NDNcdTA0NDEiLCJcdTA0M2FcdTA0M2VcdTA0M2MuXHUwNDQwXHUwNDQzXHUwNDQxIiwi''@;'; put 'put ''XHUwNDNhXHUwNDQwXHUwNDRiXHUwNDNjLlx1MDQ0MFx1MDQ0M1x1MDQ0MSIsIlx1MDQzY1x1MDQzOFx1MDQ0MC5cdTA0NDBcdTA0NDNcdTA0NDEiLCJcdTA0M2NcdTA0NDFcdTA0M2EuXHUwNDQwXHUwNDQzXHUwNDQxIiwiXHUwNDNlXHUwNDQwXHUwNDMzLlx1MDQ0MFx1MDQ0M1x1MDQ0MSIs''@;'; put 'put ''Ilx1MDQ0MVx1MDQzMFx1MDQzY1x1MDQzMFx1MDQ0MFx1MDQzMC5cdTA0NDBcdTA0NDNcdTA0NDEiLCJcdTA0NDFcdTA0M2VcdTA0NDdcdTA0MzguXHUwNDQwXHUwNDQzXHUwNDQxIiwiXHUwNDQxXHUwNDNmXHUwNDMxLlx1MDQ0MFx1MDQ0M1x1MDQ0MSIsIlx1MDQ0Zi5cdTA0NDBcdTA0NDNc''@;'; put 'put ''dTA0NDEiLCJyYXMucnUiLCJueWF0LmFwcCIsIjE4MHIuY29tIiwiZG9qaW4uY29tIiwic2FrdXJhdGFuLmNvbSIsInNha3VyYXdlYi5jb20iLCJ4MC5jb20iLCIyLWQuanAiLCJib25hLmpwIiwiY3JhcC5qcCIsImRheW5pZ2h0LmpwIiwiZWVrLmpwIiwiZmxvcC5qcCIsImhhbGZtb29uLmpw''@;'; put 'put ''IiwiamVlei5qcCIsIm1hdHJpeC5qcCIsIm1pbW96YS5qcCIsIml2b3J5Lm5lLmpwIiwibWFpbC1ib3gubmUuanAiLCJtaW50cy5uZS5qcCIsIm1va3VyZW4ubmUuanAiLCJvcGFsLm5lLmpwIiwic2FrdXJhLm5lLmpwIiwic3Vtb21vLm5lLmpwIiwidG9wYXoubmUuanAiLCJuZXRnYW1lcnMu''@;'; put 'put ''anAiLCJueWFudGEuanAiLCJvMG8wLmpwIiwicmR5LmpwIiwicmdyLmpwIiwicnVsZXouanAiLCJzMy5pc2swMS5zYWt1cmFzdG9yYWdlLmpwIiwiczMuaXNrMDIuc2FrdXJhc3RvcmFnZS5qcCIsInNhbG9vbi5qcCIsInNibG8uanAiLCJza3IuanAiLCJ0YW5rLmpwIiwidWgtb2guanAiLCJ1''@;'; put 'put ''bmRvLmpwIiwicnMud2ViYWNjZWwuanAiLCJ1c2VyLndlYmFjY2VsLmpwIiwid2Vic296YWkuanAiLCJ4aWkuanAiLCJzcXVhcmVzLm5ldCIsImpwbi5vcmciLCJraXJhcmEuc3QiLCJ4MC50byIsImZyb20udHYiLCJzYWt1cmEudHYiLCIqLmJ1aWxkZXIuY29kZS5jb20iLCIqLmRldi1idWls''@;'; put 'put ''ZGVyLmNvZGUuY29tIiwiKi5zdGctYnVpbGRlci5jb2RlLmNvbSIsIiouMDAxLnRlc3QuY29kZS1idWlsZGVyLXN0Zy5wbGF0Zm9ybS5zYWxlc2ZvcmNlLmNvbSIsIiouZC5jcm0uZGV2IiwiKi53LmNybS5kZXYiLCIqLndhLmNybS5kZXYiLCIqLndiLmNybS5kZXYiLCIqLndjLmNybS5kZXYi''@;'; put 'put ''LCIqLndkLmNybS5kZXYiLCIqLndlLmNybS5kZXYiLCIqLndmLmNybS5kZXYiLCJzYW5kY2F0cy5pbyIsImxvZ29pcC5jb20iLCJsb2dvaXAuZGUiLCJmci1wYXItMS5iYXJlbWV0YWwuc2N3LmNsb3VkIiwiZnItcGFyLTIuYmFyZW1ldGFsLnNjdy5jbG91ZCIsIm5sLWFtcy0xLmJhcmVtZXRh''@;'; put 'put ''bC5zY3cuY2xvdWQiLCJjb2NrcGl0LmZyLXBhci5zY3cuY2xvdWQiLCJmbmMuZnItcGFyLnNjdy5jbG91ZCIsImZ1bmN0aW9ucy5mbmMuZnItcGFyLnNjdy5jbG91ZCIsIms4cy5mci1wYXIuc2N3LmNsb3VkIiwibm9kZXMuazhzLmZyLXBhci5zY3cuY2xvdWQiLCJzMy5mci1wYXIuc2N3LmNs''@;'; put 'put ''b3VkIiwiczMtd2Vic2l0ZS5mci1wYXIuc2N3LmNsb3VkIiwid2htLmZyLXBhci5zY3cuY2xvdWQiLCJwcml2Lmluc3RhbmNlcy5zY3cuY2xvdWQiLCJwdWIuaW5zdGFuY2VzLnNjdy5jbG91ZCIsIms4cy5zY3cuY2xvdWQiLCJjb2NrcGl0Lm5sLWFtcy5zY3cuY2xvdWQiLCJrOHMubmwtYW1z''@;'; put 'put ''LnNjdy5jbG91ZCIsIm5vZGVzLms4cy5ubC1hbXMuc2N3LmNsb3VkIiwiczMubmwtYW1zLnNjdy5jbG91ZCIsInMzLXdlYnNpdGUubmwtYW1zLnNjdy5jbG91ZCIsIndobS5ubC1hbXMuc2N3LmNsb3VkIiwiY29ja3BpdC5wbC13YXcuc2N3LmNsb3VkIiwiazhzLnBsLXdhdy5zY3cuY2xvdWQi''@;'; put 'put ''LCJub2Rlcy5rOHMucGwtd2F3LnNjdy5jbG91ZCIsInMzLnBsLXdhdy5zY3cuY2xvdWQiLCJzMy13ZWJzaXRlLnBsLXdhdy5zY3cuY2xvdWQiLCJzY2FsZWJvb2suc2N3LmNsb3VkIiwic21hcnRsYWJlbGluZy5zY3cuY2xvdWQiLCJkZWRpYm94LmZyIiwic2Nob2tva2Vrcy5uZXQiLCJnb3Yu''@;'; put 'put ''c2NvdCIsInNlcnZpY2UuZ292LnNjb3QiLCJzY3J5c2VjLmNvbSIsImNsaWVudC5zY3J5cHRlZC5pbyIsImZpcmV3YWxsLWdhdGV3YXkuY29tIiwiZmlyZXdhbGwtZ2F0ZXdheS5kZSIsIm15LWdhdGV3YXkuZGUiLCJteS1yb3V0ZXIuZGUiLCJzcGRucy5kZSIsInNwZG5zLmV1IiwiZmlyZXdh''@;'; put 'put ''bGwtZ2F0ZXdheS5uZXQiLCJteS1maXJld2FsbC5vcmciLCJteWZpcmV3YWxsLm9yZyIsInNwZG5zLm9yZyIsInNlaWRhdC5uZXQiLCJzZWxsZnkuc3RvcmUiLCJtaW5pc2l0ZS5tcyIsInNlbnNlZXJpbmcubmV0Iiwic2VydmVib2x0LmNsb3VkIiwiYml6LnVhIiwiY28udWEiLCJwcC51YSIs''@;'; put 'put ''ImFzLnNoLmNuIiwic2hlZXp5LmdhbWVzIiwic2hpZnRlZGl0LmlvIiwibXlzaG9wYmxvY2tzLmNvbSIsIm15c2hvcGlmeS5jb20iLCJzaG9waXRzaXRlLmNvbSIsInNob3B3YXJlLnNob3AiLCJzaG9wd2FyZS5zdG9yZSIsIm1vLXNpZW1lbnMuaW8iLCIxa2FwcC5jb20iLCJhcHBjaGl6aS5j''@;'; put 'put ''b20iLCJhcHBsaW56aS5jb20iLCJzaW5hYXBwLmNvbSIsInZpcHNpbmFhcHAuY29tIiwic2l0ZWxlYWYubmV0Iiwic21hbGwtd2ViLm9yZyIsImFlcm9wb3J0LmZyIiwiYXZvY2F0LmZyIiwiY2hhbWJhZ3JpLmZyIiwiY2hpcnVyZ2llbnMtZGVudGlzdGVzLmZyIiwiZXhwZXJ0cy1jb21wdGFi''@;'; put 'put ''bGVzLmZyIiwibWVkZWNpbi5mciIsIm5vdGFpcmVzLmZyIiwicGhhcm1hY2llbi5mciIsInBvcnQuZnIiLCJ2ZXRlcmluYWlyZS5mciIsInZwNC5tZSIsIiouc25vd2ZsYWtlLmFwcCIsIioucHJpdmF0ZWxpbmsuc25vd2ZsYWtlLmFwcCIsInN0cmVhbWxpdC5hcHAiLCJzdHJlYW1saXRhcHAu''@;'; put 'put ''Y29tIiwidHJ5LXNub3dwbG93LmNvbSIsIm1hZmVsby5uZXQiLCJwbGF5c3RhdGlvbi1jbG91ZC5jb20iLCJzcmh0LnNpdGUiLCJhcHBzLmxhaXIuaW8iLCIqLnN0b2xvcy5pbyIsInNwYWNla2l0LmlvIiwiaW5kLm1vbSIsImN1c3RvbWVyLnNwZWVkcGFydG5lci5kZSIsIm15c3ByZWFkc2hv''@;'; put 'put ''cC5hdCIsIm15c3ByZWFkc2hvcC5jb20uYXUiLCJteXNwcmVhZHNob3AuYmUiLCJteXNwcmVhZHNob3AuY2EiLCJteXNwcmVhZHNob3AuY2giLCJteXNwcmVhZHNob3AuY29tIiwibXlzcHJlYWRzaG9wLmRlIiwibXlzcHJlYWRzaG9wLmRrIiwibXlzcHJlYWRzaG9wLmVzIiwibXlzcHJlYWRz''@;'; put 'put ''aG9wLmZpIiwibXlzcHJlYWRzaG9wLmZyIiwibXlzcHJlYWRzaG9wLmllIiwibXlzcHJlYWRzaG9wLml0IiwibXlzcHJlYWRzaG9wLm5ldCIsIm15c3ByZWFkc2hvcC5ubCIsIm15c3ByZWFkc2hvcC5ubyIsIm15c3ByZWFkc2hvcC5wbCIsIm15c3ByZWFkc2hvcC5zZSIsIm15c3ByZWFkc2hv''@;'; put 'put ''cC5jby51ayIsInctY29ycC1zdGF0aWNibGl0ei5jb20iLCJ3LWNyZWRlbnRpYWxsZXNzLXN0YXRpY2JsaXR6LmNvbSIsInctc3RhdGljYmxpdHouY29tIiwic3RhY2toZXJvLW5ldHdvcmsuY29tIiwicnVucy5vbnN0YWNraXQuY2xvdWQiLCJzdGFja2l0LmdnIiwic3RhY2tpdC5yb2NrcyIs''@;'; put 'put ''InN0YWNraXQucnVuIiwic3RhY2tpdC56b25lIiwibXVzaWNpYW4uaW8iLCJub3ZlY29yZS5zaXRlIiwiYXBpLnN0ZGxpYi5jb20iLCJmZWVkYmFjay5hYyIsImZvcm1zLmFjIiwiYXNzZXNzbWVudHMuY3giLCJjYWxjdWxhdG9ycy5jeCIsImZ1bm5lbHMuY3giLCJwYXlub3cuY3giLCJxdWl6''@;'; put 'put ''emVzLmN4IiwicmVzZWFyY2hlZC5jeCIsInRlc3RzLmN4Iiwic3VydmV5cy5zbyIsInN0b3JlYmFzZS5zdG9yZSIsInN0b3JpcHJlc3MuYXBwIiwic3RvcmouZmFybSIsInN0cmFwaWFwcC5jb20iLCJtZWRpYS5zdHJhcGlhcHAuY29tIiwidnBzLWhvc3QubmV0IiwiYXRsLmplbGFzdGljLnZw''@;'; put 'put ''cy1ob3N0Lm5ldCIsIm5qcy5qZWxhc3RpYy52cHMtaG9zdC5uZXQiLCJyaWMuamVsYXN0aWMudnBzLWhvc3QubmV0Iiwic3RyZWFrLWxpbmsuY29tIiwic3RyZWFrbGlua3MuY29tIiwic3RyZWFrdXNlcmNvbnRlbnQuY29tIiwic29jLnNyY2YubmV0IiwidXNlci5zcmNmLm5ldCIsInV0d2Vu''@;'; put 'put ''dGUuaW8iLCJ0ZW1wLWRucy5jb20iLCJzdXBhYmFzZS5jbyIsInN1cGFiYXNlLmluIiwic3VwYWJhc2UubmV0Iiwic3luY2xvdWQuaXQiLCJkc2Nsb3VkLmJpeiIsImRpcmVjdC5xdWlja2Nvbm5lY3QuY24iLCJkc215bmFzLmNvbSIsImZhbWlseWRzLmNvbSIsImRpc2tzdGF0aW9uLm1lIiwi''@;'; put 'put ''ZHNjbG91ZC5tZSIsImkyMzQubWUiLCJteWRzLm1lIiwic3lub2xvZ3kubWUiLCJkc2Nsb3VkLm1vYmkiLCJkc215bmFzLm5ldCIsImZhbWlseWRzLm5ldCIsImRzbXluYXMub3JnIiwiZmFtaWx5ZHMub3JnIiwiZGlyZWN0LnF1aWNrY29ubmVjdC50byIsInZwbnBsdXMudG8iLCJteXRhYml0''@;'; put 'put ''LmNvbSIsIm15dGFiaXQuY28uaWwiLCJ0YWJpdG9yZGVyLmNvLmlsIiwidGFpZnVuLWRucy5kZSIsInRzLm5ldCIsIiouYy50cy5uZXQiLCJnZGEucGwiLCJnZGFuc2sucGwiLCJnZHluaWEucGwiLCJtZWQucGwiLCJzb3BvdC5wbCIsInRhdmV1c2VyY29udGVudC5jb20iLCJwLnRhd2suZW1h''@;'; put 'put ''aWwiLCJwLnRhd2t0by5lbWFpbCIsInNpdGUudGItaG9zdGluZy5jb20iLCJlZHVnaXQuaW8iLCJzMy50ZWNraWRzLm9yZyIsInRlbGViaXQuYXBwIiwidGVsZWJpdC5pbyIsIioudGVsZWJpdC54eXoiLCIqLmZpcmVuZXQuY2giLCIqLnN2Yy5maXJlbmV0LmNoIiwicmVzZXJ2ZC5jb20iLCJ0''@;'; put 'put ''aGluZ2R1c3RkYXRhLmNvbSIsImN1c3QuZGV2LnRoaW5nZHVzdC5pbyIsInJlc2VydmQuZGV2LnRoaW5nZHVzdC5pbyIsImN1c3QuZGlzcmVjLnRoaW5nZHVzdC5pbyIsInJlc2VydmQuZGlzcmVjLnRoaW5nZHVzdC5pbyIsImN1c3QucHJvZC50aGluZ2R1c3QuaW8iLCJjdXN0LnRlc3Rpbmcu''@;'; put 'put ''dGhpbmdkdXN0LmlvIiwicmVzZXJ2ZC50ZXN0aW5nLnRoaW5nZHVzdC5pbyIsInRpY2tldHMuaW8iLCJhcnZvLm5ldHdvcmsiLCJhemltdXRoLm5ldHdvcmsiLCJ0bG9uLm5ldHdvcmsiLCJ0b3Jwcm9qZWN0Lm5ldCIsInBhZ2VzLnRvcnByb2plY3QubmV0IiwidG93bm5ld3Mtc3RhZ2luZy5j''@;'; put 'put ''b20iLCIxMmhwLmF0IiwiMml4LmF0IiwiNGxpbWEuYXQiLCJsaW1hLWNpdHkuYXQiLCIxMmhwLmNoIiwiMml4LmNoIiwiNGxpbWEuY2giLCJsaW1hLWNpdHkuY2giLCJ0cmFmZmljcGxleC5jbG91ZCIsImRlLmNvb2wiLCIxMmhwLmRlIiwiMml4LmRlIiwiNGxpbWEuZGUiLCJsaW1hLWNpdHku''@;'; put 'put ''ZGUiLCIxMzM3LnBpY3R1cmVzIiwiY2xhbi5yaXAiLCJsaW1hLWNpdHkucm9ja3MiLCJ3ZWJzcGFjZS5yb2NrcyIsImxpbWEuem9uZSIsIioudHJhbnN1cmwuYmUiLCIqLnRyYW5zdXJsLmV1Iiwic2l0ZS50cmFuc2lwLm1lIiwiKi50cmFuc3VybC5ubCIsInR1eGZhbWlseS5vcmciLCJkZC1k''@;'; put 'put ''bnMuZGUiLCJkcmF5LWRucy5kZSIsImRyYXlkbnMuZGUiLCJkeW4tdnBuLmRlIiwiZHludnBuLmRlIiwibWVpbi12aWdvci5kZSIsIm15LXZpZ29yLmRlIiwibXktd2FuLmRlIiwic3luby1kcy5kZSIsInN5bm9sb2d5LWRpc2tzdGF0aW9uLmRlIiwic3lub2xvZ3ktZHMuZGUiLCJkaXNrc3Rh''@;'; put 'put ''dGlvbi5ldSIsImRpc2tzdGF0aW9uLm9yZyIsInR5cGVkcmVhbS5hcHAiLCJwcm8udHlwZWZvcm0uY29tIiwiKi51YmVyc3BhY2UuZGUiLCJ1YmVyLnNwYWNlIiwiaGsuY29tIiwiaW5jLmhrIiwibHRkLmhrIiwiaGsub3JnIiwiaXQuY29tIiwidW5pc29uLXNlcnZpY2VzLmNsb3VkIiwidmly''@;'; put 'put ''dHVhbC11c2VyLmRlIiwidmlydHVhbHVzZXIuZGUiLCJuYW1lLnBtIiwic2NoLnRmIiwiYml6LndmIiwic2NoLndmIiwib3JnLnl0IiwicnMuYmEiLCJiaWVsc2tvLnBsIiwidXBsaS5pbyIsInVyb3duLmNsb3VkIiwiZG5zdXBkYXRlLmluZm8iLCJ1cy5vcmciLCJ2LnVhIiwiZXhwcmVzcy52''@;'; put 'put ''YWwucnVuIiwid2ViLnZhbC5ydW4iLCJ2ZXJjZWwuYXBwIiwidjAuYnVpbGQiLCJ2ZXJjZWwuZGV2IiwidnVzZXJjb250ZW50Lm5ldCIsIm5vdy5zaCIsIjIwMzguaW8iLCJyb3V0ZXIubWFuYWdlbWVudCIsInYtaW5mby5pbmZvIiwidm9vcmxvcGVyLmNsb3VkIiwiKi52dWx0cm9iamVjdHMu''@;'; put 'put ''Y29tIiwid2FmZmxlY2VsbC5jb20iLCJ3ZWJmbG93LmlvIiwid2ViZmxvd3Rlc3QuaW8iLCIqLndlYmhhcmUuZGV2IiwiYm9va29ubGluZS5hcHAiLCJob3RlbHdpdGhmbGlnaHQuY29tIiwicmVzZXJ2ZS1vbmxpbmUuY29tIiwicmVzZXJ2ZS1vbmxpbmUubmV0IiwiY3ByYXBpZC5jb20iLCJw''@;'; put 'put ''bGVza25zLmNvbSIsIndwMi5ob3N0IiwicGRucy5wYWdlIiwicGxlc2sucGFnZSIsIndwc3F1YXJlZC5zaXRlIiwiKi53YWRsLnRvcCIsInJlbW90ZXdkLmNvbSIsImJveC5jYSIsInBhZ2VzLndpYXJkd2ViLmNvbSIsInRvb2xmb3JnZS5vcmciLCJ3bWNsb3VkLm9yZyIsIndtZmxhYnMub3Jn''@;'; put 'put ''Iiwid2RoLmFwcCIsInBhbmVsLmdnIiwiZGFlbW9uLnBhbmVsLmdnIiwid2l4c2l0ZS5jb20iLCJ3aXhzdHVkaW8uY29tIiwiZWRpdG9yeC5pbyIsIndpeHN0dWRpby5pbyIsIndpeC5ydW4iLCJtZXNzd2l0aGRucy5jb20iLCJ3b2x0bGFiLWRlbW8uY29tIiwibXlmb3J1bS5jb21tdW5pdHki''@;'; put 'put ''LCJjb21tdW5pdHktcHJvLmRlIiwiZGlza3Vzc2lvbnNiZXJlaWNoLmRlIiwiY29tbXVuaXR5LXByby5uZXQiLCJtZWluZm9ydW0ubmV0IiwiYWZmaW5pdHlsb3R0ZXJ5Lm9yZy51ayIsInJhZmZsZWVudHJ5Lm9yZy51ayIsIndlZWtseWxvdHRlcnkub3JnLnVrIiwid3BlbmdpbmVwb3dlcmVk''@;'; put 'put ''LmNvbSIsImpzLndwZW5naW5lcG93ZXJlZC5jb20iLCJoYWxmLmhvc3QiLCJ4bmJheS5jb20iLCJ1Mi54bmJheS5jb20iLCJ1Mi1sb2NhbC54bmJheS5jb20iLCJjaXN0cm9uLm5sIiwiZGVtb24ubmwiLCJ4czRhbGwuc3BhY2UiLCJ5YW5kZXhjbG91ZC5uZXQiLCJzdG9yYWdlLnlhbmRleGNs''@;'; put 'put ''b3VkLm5ldCIsIndlYnNpdGUueWFuZGV4Y2xvdWQubmV0Iiwib2ZmaWNpYWwuYWNhZGVteSIsInlvbGFzaXRlLmNvbSIsInlvbWJvLm1lIiwieW5oLmZyIiwibm9ob3N0Lm1lIiwibm9oby5zdCIsInphLm5ldCIsInphLm9yZyIsInphcC5jbG91ZCIsInplYWJ1ci5hcHAiLCJic3MuZGVzaWdu''@;'; put 'put ''IiwiYmFzaWNzZXJ2ZXIuaW8iLCJ2aXJ0dWFsc2VydmVyLmlvIiwiZW50ZXJwcmlzZWNsb3VkLm51Il0ucmVkdWNlKChZLHEpPT57Y29uc3QgZWU9cS5yZXBsYWNlKC9eKFwqXC58XCEpLywiIiksSj13LnRvQVNDSUkoZWUpLG5lPXEuY2hhckF0KDApO2lmKFkuaGFzKEopKXRocm93IG5ldyBF''@;'; put 'put ''cnJvcihgTXVsdGlwbGUgcnVsZXMgZm91bmQgZm9yICR7cX0gKCR7Sn0pYCk7cmV0dXJuIFkuc2V0KEose3J1bGU6cSxzdWZmaXg6ZWUscHVueVN1ZmZpeDpKLHdpbGRjYXJkOiIqIj09PW5lLGV4Y2VwdGlvbjoiISI9PT1uZX0pLFl9LG5ldyBNYXApLHo9e0RPTUFJTl9UT09fU0hPUlQ6IkRv''@;'; put 'put ''bWFpbiBuYW1lIHRvbyBzaG9ydC4iLERPTUFJTl9UT09fTE9ORzoiRG9tYWluIG5hbWUgdG9vIGxvbmcuIEl0IHNob3VsZCBiZSBubyBtb3JlIHRoYW4gMjU1IGNoYXJzLiIsTEFCRUxfU1RBUlRTX1dJVEhfREFTSDoiRG9tYWluIG5hbWUgbGFiZWwgY2FuIG5vdCBzdGFydCB3aXRoIGEgZGFz''@;'; put 'put ''aC4iLExBQkVMX0VORFNfV0lUSF9EQVNIOiJEb21haW4gbmFtZSBsYWJlbCBjYW4gbm90IGVuZCB3aXRoIGEgZGFzaC4iLExBQkVMX1RPT19MT05HOiJEb21haW4gbmFtZSBsYWJlbCBzaG91bGQgYmUgYXQgbW9zdCA2MyBjaGFycyBsb25nLiIsTEFCRUxfVE9PX1NIT1JUOiJEb21haW4gbmFt''@;'; put 'put ''ZSBsYWJlbCBzaG91bGQgYmUgYXQgbGVhc3QgMSBjaGFyYWN0ZXIgbG9uZy4iLExBQkVMX0lOVkFMSURfQ0hBUlM6IkRvbWFpbiBuYW1lIGxhYmVsIGNhbiBvbmx5IGNvbnRhaW4gYWxwaGFudW1lcmljIGNoYXJhY3RlcnMgb3IgZGFzaGVzLiJ9LEw9WT0+e2lmKCJzdHJpbmciIT10eXBlb2Yg''@;'; put 'put ''WSl0aHJvdyBuZXcgVHlwZUVycm9yKCJEb21haW4gbmFtZSBtdXN0IGJlIGEgc3RyaW5nLiIpO2xldCBxPVkuc2xpY2UoMCkudG9Mb3dlckNhc2UoKTsiLiI9PT1xLmNoYXJBdChxLmxlbmd0aC0xKSYmKHE9cS5zbGljZSgwLHEubGVuZ3RoLTEpKTtjb25zdCBlZT0oWT0+e2NvbnN0IHE9dy50''@;'; put 'put ''b0FTQ0lJKFkpO2lmKHEubGVuZ3RoPDEpcmV0dXJuIkRPTUFJTl9UT09fU0hPUlQiO2lmKHEubGVuZ3RoPjI1NSlyZXR1cm4iRE9NQUlOX1RPT19MT05HIjtjb25zdCBlZT1xLnNwbGl0KCIuIik7bGV0IEo7Zm9yKGxldCBuZT0wO25lPGVlLmxlbmd0aDsrK25lKXtpZihKPWVlW25lXSwhSi5s''@;'; put 'put ''ZW5ndGgpcmV0dXJuIkxBQkVMX1RPT19TSE9SVCI7aWYoSi5sZW5ndGg+NjMpcmV0dXJuIkxBQkVMX1RPT19MT05HIjtpZigiLSI9PT1KLmNoYXJBdCgwKSlyZXR1cm4iTEFCRUxfU1RBUlRTX1dJVEhfREFTSCI7aWYoIi0iPT09Si5jaGFyQXQoSi5sZW5ndGgtMSkpcmV0dXJuIkxBQkVMX0VO''@;'; put 'put ''RFNfV0lUSF9EQVNIIjtpZighL15bYS16MC05XC1fXSskLy50ZXN0KEopKXJldHVybiJMQUJFTF9JTlZBTElEX0NIQVJTIn19KShxKTtpZihlZSlyZXR1cm57aW5wdXQ6WSxlcnJvcjp7bWVzc2FnZTp6W2VlXSxjb2RlOmVlfX07Y29uc3QgSj17aW5wdXQ6WSx0bGQ6bnVsbCxzbGQ6bnVsbCxk''@;'; put 'put ''b21haW46bnVsbCxzdWJkb21haW46bnVsbCxsaXN0ZWQ6ITF9LG5lPXEuc3BsaXQoIi4iKTtpZigibG9jYWwiPT09bmVbbmUubGVuZ3RoLTFdKXJldHVybiBKO2NvbnN0IGllPSgpPT4oL3huLS0vLnRlc3QocSkmJihKLmRvbWFpbiYmKEouZG9tYWluPXcudG9BU0NJSShKLmRvbWFpbikpLEou''@;'; put 'put ''c3ViZG9tYWluJiYoSi5zdWJkb21haW49dy50b0FTQ0lJKEouc3ViZG9tYWluKSkpLEopLGxlPShZPT57Y29uc3QgcT13LnRvQVNDSUkoWSkuc3BsaXQoIi4iKTtmb3IobGV0IGVlPTA7ZWU8cS5sZW5ndGg7ZWUrKyl7Y29uc3QgSj1xLnNsaWNlKGVlKS5qb2luKCIuIiksbmU9Ri5nZXQoSik7''@;'; put 'put ''aWYobmUpcmV0dXJuIG5lfXJldHVybiBudWxsfSkocSk7aWYoIWxlKXJldHVybiBuZS5sZW5ndGg8Mj9KOihKLnRsZD1uZS5wb3AoKSxKLnNsZD1uZS5wb3AoKSxKLmRvbWFpbj1bSi5zbGQsSi50bGRdLmpvaW4oIi4iKSxuZS5sZW5ndGgmJihKLnN1YmRvbWFpbj1uZS5wb3AoKSksaWUoKSk7''@;'; put 'put ''Si5saXN0ZWQ9ITA7Y29uc3QgbWU9bGUuc3VmZml4LnNwbGl0KCIuIiksX2U9bmUuc2xpY2UoMCxuZS5sZW5ndGgtbWUubGVuZ3RoKTtyZXR1cm4gbGUuZXhjZXB0aW9uJiZfZS5wdXNoKG1lLnNoaWZ0KCkpLEoudGxkPW1lLmpvaW4oIi4iKSwhX2UubGVuZ3RofHwobGUud2lsZGNhcmQmJiht''@;'; put 'put ''ZS51bnNoaWZ0KF9lLnBvcCgpKSxKLnRsZD1tZS5qb2luKCIuIikpLCFfZS5sZW5ndGgpfHwoSi5zbGQ9X2UucG9wKCksSi5kb21haW49W0ouc2xkLEoudGxkXS5qb2luKCIuIiksX2UubGVuZ3RoJiYoSi5zdWJkb21haW49X2Uuam9pbigiLiIpKSksaWUoKX0sSz1ZPT5ZJiZMKFkpLmRvbWFp''@;'; put 'put ''bnx8bnVsbCxVPVk9Pntjb25zdCBxPUwoWSk7cmV0dXJuISghcS5kb21haW58fCFxLmxpc3RlZCl9O1guZGVmYXVsdD17cGFyc2U6TCxnZXQ6Syxpc1ZhbGlkOlV9LFguZXJyb3JDb2Rlcz16LFguZ2V0PUssWC5pc1ZhbGlkPVUsWC5wYXJzZT1MfSw0OTQ2OnVlPT57InVzZSBzdHJpY3QiO3Vl''@;'; put 'put ''LmV4cG9ydHM9SlNPTi5wYXJzZSgneyJhZXMtMTI4LWVjYiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjEyOCwiaXYiOjAsIm1vZGUiOiJFQ0IiLCJ0eXBlIjoiYmxvY2sifSwiYWVzLTE5Mi1lY2IiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxOTIsIml2IjowLCJtb2RlIjoiRUNCIiwidHlwZSI6''@;'; put 'put ''ImJsb2NrIn0sImFlcy0yNTYtZWNiIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MjU2LCJpdiI6MCwibW9kZSI6IkVDQiIsInR5cGUiOiJibG9jayJ9LCJhZXMtMTI4LWNiYyI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjEyOCwiaXYiOjE2LCJtb2RlIjoiQ0JDIiwidHlwZSI6ImJsb2NrIn0sImFl''@;'; put 'put ''cy0xOTItY2JjIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTkyLCJpdiI6MTYsIm1vZGUiOiJDQkMiLCJ0eXBlIjoiYmxvY2sifSwiYWVzLTI1Ni1jYmMiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoyNTYsIml2IjoxNiwibW9kZSI6IkNCQyIsInR5cGUiOiJibG9jayJ9LCJhZXMxMjgiOnsiY2lw''@;'; put 'put ''aGVyIjoiQUVTIiwia2V5IjoxMjgsIml2IjoxNiwibW9kZSI6IkNCQyIsInR5cGUiOiJibG9jayJ9LCJhZXMxOTIiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxOTIsIml2IjoxNiwibW9kZSI6IkNCQyIsInR5cGUiOiJibG9jayJ9LCJhZXMyNTYiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoyNTYs''@;'; put 'put ''Iml2IjoxNiwibW9kZSI6IkNCQyIsInR5cGUiOiJibG9jayJ9LCJhZXMtMTI4LWNmYiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjEyOCwiaXYiOjE2LCJtb2RlIjoiQ0ZCIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMTkyLWNmYiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjE5MiwiaXYiOjE2LCJt''@;'; put 'put ''b2RlIjoiQ0ZCIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMjU2LWNmYiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjI1NiwiaXYiOjE2LCJtb2RlIjoiQ0ZCIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMTI4LWNmYjgiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxMjgsIml2IjoxNiwibW9kZSI6IkNG''@;'; put 'put ''QjgiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0xOTItY2ZiOCI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjE5MiwiaXYiOjE2LCJtb2RlIjoiQ0ZCOCIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTI1Ni1jZmI4Ijp7ImNpcGhlciI6IkFFUyIsImtleSI6MjU2LCJpdiI6MTYsIm1vZGUiOiJDRkI4Iiwi''@;'; put 'put ''dHlwZSI6InN0cmVhbSJ9LCJhZXMtMTI4LWNmYjEiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxMjgsIml2IjoxNiwibW9kZSI6IkNGQjEiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0xOTItY2ZiMSI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjE5MiwiaXYiOjE2LCJtb2RlIjoiQ0ZCMSIsInR5cGUi''@;'; put 'put ''OiJzdHJlYW0ifSwiYWVzLTI1Ni1jZmIxIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MjU2LCJpdiI6MTYsIm1vZGUiOiJDRkIxIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMTI4LW9mYiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjEyOCwiaXYiOjE2LCJtb2RlIjoiT0ZCIiwidHlwZSI6InN0cmVh''@;'; put 'put ''bSJ9LCJhZXMtMTkyLW9mYiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjE5MiwiaXYiOjE2LCJtb2RlIjoiT0ZCIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMjU2LW9mYiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjI1NiwiaXYiOjE2LCJtb2RlIjoiT0ZCIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMt''@;'; put 'put ''MTI4LWN0ciI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjEyOCwiaXYiOjE2LCJtb2RlIjoiQ1RSIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMTkyLWN0ciI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjE5MiwiaXYiOjE2LCJtb2RlIjoiQ1RSIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMjU2LWN0ciI6''@;'; put 'put ''eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjI1NiwiaXYiOjE2LCJtb2RlIjoiQ1RSIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMTI4LWdjbSI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjEyOCwiaXYiOjEyLCJtb2RlIjoiR0NNIiwidHlwZSI6ImF1dGgifSwiYWVzLTE5Mi1nY20iOnsiY2lwaGVyIjoi''@;'; put 'put ''QUVTIiwia2V5IjoxOTIsIml2IjoxMiwibW9kZSI6IkdDTSIsInR5cGUiOiJhdXRoIn0sImFlcy0yNTYtZ2NtIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MjU2LCJpdiI6MTIsIm1vZGUiOiJHQ00iLCJ0eXBlIjoiYXV0aCJ9fScpfSw1MjA3OnVlPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9''@;'; put 'put ''SlNPTi5wYXJzZSgneyJzaGEyMjRXaXRoUlNBRW5jcnlwdGlvbiI6eyJzaWduIjoicnNhIiwiaGFzaCI6InNoYTIyNCIsImlkIjoiMzAyZDMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjA0MDUwMDA0MWMifSwiUlNBLVNIQTIyNCI6eyJzaWduIjoiZWNkc2EvcnNhIiwiaGFzaCI6InNoYTIyNCIs''@;'; put 'put ''ImlkIjoiMzAyZDMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjA0MDUwMDA0MWMifSwic2hhMjU2V2l0aFJTQUVuY3J5cHRpb24iOnsic2lnbiI6InJzYSIsImhhc2giOiJzaGEyNTYiLCJpZCI6IjMwMzEzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwMTA1MDAwNDIwIn0sIlJTQS1TSEEyNTYiOnsi''@;'; put 'put ''c2lnbiI6ImVjZHNhL3JzYSIsImhhc2giOiJzaGEyNTYiLCJpZCI6IjMwMzEzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwMTA1MDAwNDIwIn0sInNoYTM4NFdpdGhSU0FFbmNyeXB0aW9uIjp7InNpZ24iOiJyc2EiLCJoYXNoIjoic2hhMzg0IiwiaWQiOiIzMDQxMzAwZDA2MDk2MDg2NDgwMTY1''@;'; put 'put ''MDMwNDAyMDIwNTAwMDQzMCJ9LCJSU0EtU0hBMzg0Ijp7InNpZ24iOiJlY2RzYS9yc2EiLCJoYXNoIjoic2hhMzg0IiwiaWQiOiIzMDQxMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDIwNTAwMDQzMCJ9LCJzaGE1MTJXaXRoUlNBRW5jcnlwdGlvbiI6eyJzaWduIjoicnNhIiwiaGFzaCI6InNo''@;'; put 'put ''YTUxMiIsImlkIjoiMzA1MTMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjAzMDUwMDA0NDAifSwiUlNBLVNIQTUxMiI6eyJzaWduIjoiZWNkc2EvcnNhIiwiaGFzaCI6InNoYTUxMiIsImlkIjoiMzA1MTMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjAzMDUwMDA0NDAifSwiUlNBLVNIQTEiOnsic2ln''@;'; put 'put ''biI6InJzYSIsImhhc2giOiJzaGExIiwiaWQiOiIzMDIxMzAwOTA2MDUyYjBlMDMwMjFhMDUwMDA0MTQifSwiZWNkc2Etd2l0aC1TSEExIjp7InNpZ24iOiJlY2RzYSIsImhhc2giOiJzaGExIiwiaWQiOiIifSwic2hhMjU2Ijp7InNpZ24iOiJlY2RzYSIsImhhc2giOiJzaGEyNTYiLCJpZCI6''@;'; put 'put ''IiJ9LCJzaGEyMjQiOnsic2lnbiI6ImVjZHNhIiwiaGFzaCI6InNoYTIyNCIsImlkIjoiIn0sInNoYTM4NCI6eyJzaWduIjoiZWNkc2EiLCJoYXNoIjoic2hhMzg0IiwiaWQiOiIifSwic2hhNTEyIjp7InNpZ24iOiJlY2RzYSIsImhhc2giOiJzaGE1MTIiLCJpZCI6IiJ9LCJEU0EtU0hBIjp7''@;'; put 'put ''InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhMSIsImlkIjoiIn0sIkRTQS1TSEExIjp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhMSIsImlkIjoiIn0sIkRTQSI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InNoYTEiLCJpZCI6IiJ9LCJEU0EtV0lUSC1TSEEyMjQiOnsic2lnbiI6ImRzYSIsImhhc2gi''@;'; put 'put ''OiJzaGEyMjQiLCJpZCI6IiJ9LCJEU0EtU0hBMjI0Ijp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhMjI0IiwiaWQiOiIifSwiRFNBLVdJVEgtU0hBMjU2Ijp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhMjU2IiwiaWQiOiIifSwiRFNBLVNIQTI1NiI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InNo''@;'; put 'put ''YTI1NiIsImlkIjoiIn0sIkRTQS1XSVRILVNIQTM4NCI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InNoYTM4NCIsImlkIjoiIn0sIkRTQS1TSEEzODQiOnsic2lnbiI6ImRzYSIsImhhc2giOiJzaGEzODQiLCJpZCI6IiJ9LCJEU0EtV0lUSC1TSEE1MTIiOnsic2lnbiI6ImRzYSIsImhhc2giOiJz''@;'; put 'put ''aGE1MTIiLCJpZCI6IiJ9LCJEU0EtU0hBNTEyIjp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhNTEyIiwiaWQiOiIifSwiRFNBLVJJUEVNRDE2MCI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InJtZDE2MCIsImlkIjoiIn0sInJpcGVtZDE2MFdpdGhSU0EiOnsic2lnbiI6InJzYSIsImhhc2giOiJy''@;'; put 'put ''bWQxNjAiLCJpZCI6IjMwMjEzMDA5MDYwNTJiMjQwMzAyMDEwNTAwMDQxNCJ9LCJSU0EtUklQRU1EMTYwIjp7InNpZ24iOiJyc2EiLCJoYXNoIjoicm1kMTYwIiwiaWQiOiIzMDIxMzAwOTA2MDUyYjI0MDMwMjAxMDUwMDA0MTQifSwibWQ1V2l0aFJTQUVuY3J5cHRpb24iOnsic2lnbiI6InJz''@;'; put 'put ''YSIsImhhc2giOiJtZDUiLCJpZCI6IjMwMjAzMDBjMDYwODJhODY0ODg2ZjcwZDAyMDUwNTAwMDQxMCJ9LCJSU0EtTUQ1Ijp7InNpZ24iOiJyc2EiLCJoYXNoIjoibWQ1IiwiaWQiOiIzMDIwMzAwYzA2MDgyYTg2NDg4NmY3MGQwMjA1MDUwMDA0MTAifX0nKX0sMTMwODp1ZT0+eyJ1c2Ugc3Ry''@;'; put 'put ''aWN0Ijt1ZS5leHBvcnRzPUpTT04ucGFyc2UoJ3siMS4zLjEzMi4wLjEwIjoic2VjcDI1NmsxIiwiMS4zLjEzMi4wLjMzIjoicDIyNCIsIjEuMi44NDAuMTAwNDUuMy4xLjEiOiJwMTkyIiwiMS4yLjg0MC4xMDA0NS4zLjEuNyI6InAyNTYiLCIxLjMuMTMyLjAuMzQiOiJwMzg0IiwiMS4zLjEz''@;'; put 'put ''Mi4wLjM1IjoicDUyMSJ9Jyl9LDMyMDg6dWU9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz1KU09OLnBhcnNlKCd7Ik9fUkRPTkxZIjowLCJPX1dST05MWSI6MSwiT19SRFdSIjoyLCJTX0lGTVQiOjYxNDQwLCJTX0lGUkVHIjozMjc2OCwiU19JRkRJUiI6MTYzODQsIlNfSUZDSFIiOjgxOTIs''@;'; put 'put ''IlNfSUZCTEsiOjI0NTc2LCJTX0lGSUZPIjo0MDk2LCJTX0lGTE5LIjo0MDk2MCwiU19JRlNPQ0siOjQ5MTUyLCJPX0NSRUFUIjo1MTIsIk9fRVhDTCI6MjA0OCwiT19OT0NUVFkiOjEzMTA3MiwiT19UUlVOQyI6MTAyNCwiT19BUFBFTkQiOjgsIk9fRElSRUNUT1JZIjoxMDQ4NTc2LCJPX05P''@;'; put 'put ''Rk9MTE9XIjoyNTYsIk9fU1lOQyI6MTI4LCJPX1NZTUxJTksiOjIwOTcxNTIsIk9fTk9OQkxPQ0siOjQsIlNfSVJXWFUiOjQ0OCwiU19JUlVTUiI6MjU2LCJTX0lXVVNSIjoxMjgsIlNfSVhVU1IiOjY0LCJTX0lSV1hHIjo1NiwiU19JUkdSUCI6MzIsIlNfSVdHUlAiOjE2LCJTX0lYR1JQIjo4''@;'; put 'put ''LCJTX0lSV1hPIjo3LCJTX0lST1RIIjo0LCJTX0lXT1RIIjoyLCJTX0lYT1RIIjoxLCJFMkJJRyI6NywiRUFDQ0VTIjoxMywiRUFERFJJTlVTRSI6NDgsIkVBRERSTk9UQVZBSUwiOjQ5LCJFQUZOT1NVUFBPUlQiOjQ3LCJFQUdBSU4iOjM1LCJFQUxSRUFEWSI6MzcsIkVCQURGIjo5LCJFQkFE''@;'; put 'put ''TVNHIjo5NCwiRUJVU1kiOjE2LCJFQ0FOQ0VMRUQiOjg5LCJFQ0hJTEQiOjEwLCJFQ09OTkFCT1JURUQiOjUzLCJFQ09OTlJFRlVTRUQiOjYxLCJFQ09OTlJFU0VUIjo1NCwiRURFQURMSyI6MTEsIkVERVNUQUREUlJFUSI6MzksIkVET00iOjMzLCJFRFFVT1QiOjY5LCJFRVhJU1QiOjE3LCJF''@;'; put 'put ''RkFVTFQiOjE0LCJFRkJJRyI6MjcsIkVIT1NUVU5SRUFDSCI6NjUsIkVJRFJNIjo5MCwiRUlMU0VRIjo5MiwiRUlOUFJPR1JFU1MiOjM2LCJFSU5UUiI6NCwiRUlOVkFMIjoyMiwiRUlPIjo1LCJFSVNDT05OIjo1NiwiRUlTRElSIjoyMSwiRUxPT1AiOjYyLCJFTUZJTEUiOjI0LCJFTUxJTksi''@;'; put 'put ''OjMxLCJFTVNHU0laRSI6NDAsIkVNVUxUSUhPUCI6OTUsIkVOQU1FVE9PTE9ORyI6NjMsIkVORVRET1dOIjo1MCwiRU5FVFJFU0VUIjo1MiwiRU5FVFVOUkVBQ0giOjUxLCJFTkZJTEUiOjIzLCJFTk9CVUZTIjo1NSwiRU5PREFUQSI6OTYsIkVOT0RFViI6MTksIkVOT0VOVCI6MiwiRU5PRVhF''@;'; put 'put ''QyI6OCwiRU5PTENLIjo3NywiRU5PTElOSyI6OTcsIkVOT01FTSI6MTIsIkVOT01TRyI6OTEsIkVOT1BST1RPT1BUIjo0MiwiRU5PU1BDIjoyOCwiRU5PU1IiOjk4LCJFTk9TVFIiOjk5LCJFTk9TWVMiOjc4LCJFTk9UQ09OTiI6NTcsIkVOT1RESVIiOjIwLCJFTk9URU1QVFkiOjY2LCJFTk9U''@;'; put 'put ''U09DSyI6MzgsIkVOT1RTVVAiOjQ1LCJFTk9UVFkiOjI1LCJFTlhJTyI6NiwiRU9QTk9UU1VQUCI6MTAyLCJFT1ZFUkZMT1ciOjg0LCJFUEVSTSI6MSwiRVBJUEUiOjMyLCJFUFJPVE8iOjEwMCwiRVBST1RPTk9TVVBQT1JUIjo0MywiRVBST1RPVFlQRSI6NDEsIkVSQU5HRSI6MzQsIkVST0ZT''@;'; put 'put ''IjozMCwiRVNQSVBFIjoyOSwiRVNSQ0giOjMsIkVTVEFMRSI6NzAsIkVUSU1FIjoxMDEsIkVUSU1FRE9VVCI6NjAsIkVUWFRCU1kiOjI2LCJFV09VTERCTE9DSyI6MzUsIkVYREVWIjoxOCwiU0lHSFVQIjoxLCJTSUdJTlQiOjIsIlNJR1FVSVQiOjMsIlNJR0lMTCI6NCwiU0lHVFJBUCI6NSwi''@;'; put 'put ''U0lHQUJSVCI6NiwiU0lHSU9UIjo2LCJTSUdCVVMiOjEwLCJTSUdGUEUiOjgsIlNJR0tJTEwiOjksIlNJR1VTUjEiOjMwLCJTSUdTRUdWIjoxMSwiU0lHVVNSMiI6MzEsIlNJR1BJUEUiOjEzLCJTSUdBTFJNIjoxNCwiU0lHVEVSTSI6MTUsIlNJR0NITEQiOjIwLCJTSUdDT05UIjoxOSwiU0lH''@;'; put 'put ''U1RPUCI6MTcsIlNJR1RTVFAiOjE4LCJTSUdUVElOIjoyMSwiU0lHVFRPVSI6MjIsIlNJR1VSRyI6MTYsIlNJR1hDUFUiOjI0LCJTSUdYRlNaIjoyNSwiU0lHVlRBTFJNIjoyNiwiU0lHUFJPRiI6MjcsIlNJR1dJTkNIIjoyOCwiU0lHSU8iOjIzLCJTSUdTWVMiOjEyLCJTU0xfT1BfQUxMIjoy''@;'; put 'put ''MTQ3NDg2NzE5LCJTU0xfT1BfQUxMT1dfVU5TQUZFX0xFR0FDWV9SRU5FR09USUFUSU9OIjoyNjIxNDQsIlNTTF9PUF9DSVBIRVJfU0VSVkVSX1BSRUZFUkVOQ0UiOjQxOTQzMDQsIlNTTF9PUF9DSVNDT19BTllDT05ORUNUIjozMjc2OCwiU1NMX09QX0NPT0tJRV9FWENIQU5HRSI6ODE5Miwi''@;'; put 'put ''U1NMX09QX0NSWVBUT1BST19UTFNFWFRfQlVHIjoyMTQ3NDgzNjQ4LCJTU0xfT1BfRE9OVF9JTlNFUlRfRU1QVFlfRlJBR01FTlRTIjoyMDQ4LCJTU0xfT1BfRVBIRU1FUkFMX1JTQSI6MCwiU1NMX09QX0xFR0FDWV9TRVJWRVJfQ09OTkVDVCI6NCwiU1NMX09QX01JQ1JPU09GVF9CSUdfU1NM''@;'; put 'put ''VjNfQlVGRkVSIjozMiwiU1NMX09QX01JQ1JPU09GVF9TRVNTX0lEX0JVRyI6MSwiU1NMX09QX01TSUVfU1NMVjJfUlNBX1BBRERJTkciOjAsIlNTTF9PUF9ORVRTQ0FQRV9DQV9ETl9CVUciOjUzNjg3MDkxMiwiU1NMX09QX05FVFNDQVBFX0NIQUxMRU5HRV9CVUciOjIsIlNTTF9PUF9ORVRT''@;'; put 'put ''Q0FQRV9ERU1PX0NJUEhFUl9DSEFOR0VfQlVHIjoxMDczNzQxODI0LCJTU0xfT1BfTkVUU0NBUEVfUkVVU0VfQ0lQSEVSX0NIQU5HRV9CVUciOjgsIlNTTF9PUF9OT19DT01QUkVTU0lPTiI6MTMxMDcyLCJTU0xfT1BfTk9fUVVFUllfTVRVIjo0MDk2LCJTU0xfT1BfTk9fU0VTU0lPTl9SRVNV''@;'; put 'put ''TVBUSU9OX09OX1JFTkVHT1RJQVRJT04iOjY1NTM2LCJTU0xfT1BfTk9fU1NMdjIiOjE2Nzc3MjE2LCJTU0xfT1BfTk9fU1NMdjMiOjMzNTU0NDMyLCJTU0xfT1BfTk9fVElDS0VUIjoxNjM4NCwiU1NMX09QX05PX1RMU3YxIjo2NzEwODg2NCwiU1NMX09QX05PX1RMU3YxXzEiOjI2ODQzNTQ1''@;'; put 'put ''NiwiU1NMX09QX05PX1RMU3YxXzIiOjEzNDIxNzcyOCwiU1NMX09QX1BLQ1MxX0NIRUNLXzEiOjAsIlNTTF9PUF9QS0NTMV9DSEVDS18yIjowLCJTU0xfT1BfU0lOR0xFX0RIX1VTRSI6MTA0ODU3NiwiU1NMX09QX1NJTkdMRV9FQ0RIX1VTRSI6NTI0Mjg4LCJTU0xfT1BfU1NMRUFZXzA4MF9D''@;'; put 'put ''TElFTlRfREhfQlVHIjoxMjgsIlNTTF9PUF9TU0xSRUYyX1JFVVNFX0NFUlRfVFlQRV9CVUciOjAsIlNTTF9PUF9UTFNfQkxPQ0tfUEFERElOR19CVUciOjUxMiwiU1NMX09QX1RMU19ENV9CVUciOjI1NiwiU1NMX09QX1RMU19ST0xMQkFDS19CVUciOjgzODg2MDgsIkVOR0lORV9NRVRIT0Rf''@;'; put 'put ''RFNBIjoyLCJFTkdJTkVfTUVUSE9EX0RIIjo0LCJFTkdJTkVfTUVUSE9EX1JBTkQiOjgsIkVOR0lORV9NRVRIT0RfRUNESCI6MTYsIkVOR0lORV9NRVRIT0RfRUNEU0EiOjMyLCJFTkdJTkVfTUVUSE9EX0NJUEhFUlMiOjY0LCJFTkdJTkVfTUVUSE9EX0RJR0VTVFMiOjEyOCwiRU5HSU5FX01F''@;'; put 'put ''VEhPRF9TVE9SRSI6MjU2LCJFTkdJTkVfTUVUSE9EX1BLRVlfTUVUSFMiOjUxMiwiRU5HSU5FX01FVEhPRF9QS0VZX0FTTjFfTUVUSFMiOjEwMjQsIkVOR0lORV9NRVRIT0RfQUxMIjo2NTUzNSwiRU5HSU5FX01FVEhPRF9OT05FIjowLCJESF9DSEVDS19QX05PVF9TQUZFX1BSSU1FIjoyLCJE''@;'; put 'put ''SF9DSEVDS19QX05PVF9QUklNRSI6MSwiREhfVU5BQkxFX1RPX0NIRUNLX0dFTkVSQVRPUiI6NCwiREhfTk9UX1NVSVRBQkxFX0dFTkVSQVRPUiI6OCwiTlBOX0VOQUJMRUQiOjEsIlJTQV9QS0NTMV9QQURESU5HIjoxLCJSU0FfU1NMVjIzX1BBRERJTkciOjIsIlJTQV9OT19QQURESU5HIjoz''@;'; put 'put ''LCJSU0FfUEtDUzFfT0FFUF9QQURESU5HIjo0LCJSU0FfWDkzMV9QQURESU5HIjo1LCJSU0FfUEtDUzFfUFNTX1BBRERJTkciOjYsIlBPSU5UX0NPTlZFUlNJT05fQ09NUFJFU1NFRCI6MiwiUE9JTlRfQ09OVkVSU0lPTl9VTkNPTVBSRVNTRUQiOjQsIlBPSU5UX0NPTlZFUlNJT05fSFlCUklE''@;'; put 'put ''Ijo2LCJGX09LIjowLCJSX09LIjo0LCJXX09LIjoyLCJYX09LIjoxLCJVVl9VRFBfUkVVU0VBRERSIjo0fScpfSw5Nzk5OnVlPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9SlNPTi5wYXJzZSgneyJtb2RwMSI6eyJnZW4iOiIwMiIsInByaW1lIjoiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEy''@;'; put 'put ''MjE2OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzYTM2MjBmZmZmZmZmZmZmZmZm''@;'; put 'put ''ZmZmIn0sIm1vZHAyIjp7ImdlbiI6IjAyIiwicHJpbWUiOiJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRm''@;'; put 'put ''ZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjM3ZWQ2YjBiZmY1Y2I2ZjQwNmI3ZWRlZTM4NmJmYjVhODk5ZmE1YWU5ZjI0MTE3YzRiMWZlNjQ5Mjg2NjUxZWNlNjUzODFmZmZmZmZmZmZmZmZmZmZmIn0sIm1vZHA1Ijp7ImdlbiI6IjAyIiwicHJpbWUiOiJmZmZmZmZm''@;'; put 'put ''ZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjM3''@;'; put 'put ''ZWQ2YjBiZmY1Y2I2ZjQwNmI3ZWRlZTM4NmJmYjVhODk5ZmE1YWU5ZjI0MTE3YzRiMWZlNjQ5Mjg2NjUxZWNlNDViM2RjMjAwN2NiOGExNjNiZjA1OThkYTQ4MzYxYzU1ZDM5YTY5MTYzZmE4ZmQyNGNmNWY4MzY1NWQyM2RjYTNhZDk2MWM2MmYzNTYyMDg1NTJiYjllZDUyOTA3NzA5Njk2NmQ2''@;'; put 'put ''NzBjMzU0ZTRhYmM5ODA0ZjE3NDZjMDhjYTIzNzMyN2ZmZmZmZmZmZmZmZmZmZmYifSwibW9kcDE0Ijp7ImdlbiI6IjAyIiwicHJpbWUiOiJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEw''@;'; put 'put ''ODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjM3ZWQ2YjBiZmY1Y2I2ZjQwNmI3ZWRlZTM4NmJmYjVhODk5ZmE1YWU5ZjI0MTE3YzRiMWZlNjQ5Mjg2NjUxZWNlNDViM2RjMjAwN2NiOGEx''@;'; put 'put ''NjNiZjA1OThkYTQ4MzYxYzU1ZDM5YTY5MTYzZmE4ZmQyNGNmNWY4MzY1NWQyM2RjYTNhZDk2MWM2MmYzNTYyMDg1NTJiYjllZDUyOTA3NzA5Njk2NmQ2NzBjMzU0ZTRhYmM5ODA0ZjE3NDZjMDhjYTE4MjE3YzMyOTA1ZTQ2MmUzNmNlM2JlMzllNzcyYzE4MGU4NjAzOWIyNzgzYTJlYzA3YTI4''@;'; put 'put ''ZmI1YzU1ZGYwNmY0YzUyYzlkZTJiY2JmNjk1NTgxNzE4Mzk5NTQ5N2NlYTk1NmFlNTE1ZDIyNjE4OThmYTA1MTAxNTcyOGU1YThhYWNhYTY4ZmZmZmZmZmZmZmZmZmZmZiJ9LCJtb2RwMTUiOnsiZ2VuIjoiMDIiLCJwcmltZSI6ImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRj''@;'; put 'put ''NjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2MzdlZDZiMGJmZjVjYjZmNDA2YjdlZGVlMzg2YmZi''@;'; put 'put ''NWE4OTlmYTVhZTlmMjQxMTdjNGIxZmU2NDkyODY2NTFlY2U0NWIzZGMyMDA3Y2I4YTE2M2JmMDU5OGRhNDgzNjFjNTVkMzlhNjkxNjNmYThmZDI0Y2Y1ZjgzNjU1ZDIzZGNhM2FkOTYxYzYyZjM1NjIwODU1MmJiOWVkNTI5MDc3MDk2OTY2ZDY3MGMzNTRlNGFiYzk4MDRmMTc0NmMwOGNhMTgy''@;'; put 'put ''MTdjMzI5MDVlNDYyZTM2Y2UzYmUzOWU3NzJjMTgwZTg2MDM5YjI3ODNhMmVjMDdhMjhmYjVjNTVkZjA2ZjRjNTJjOWRlMmJjYmY2OTU1ODE3MTgzOTk1NDk3Y2VhOTU2YWU1MTVkMjI2MTg5OGZhMDUxMDE1NzI4ZTVhOGFhYWM0MmRhZDMzMTcwZDA0NTA3YTMzYTg1NTIxYWJkZjFjYmE2NGVj''@;'; put 'put ''ZmI4NTA0NThkYmVmMGE4YWVhNzE1NzVkMDYwYzdkYjM5NzBmODVhNmUxZTRjN2FiZjVhZThjZGIwOTMzZDcxZThjOTRlMDRhMjU2MTlkY2VlM2QyMjYxYWQyZWU2YmYxMmZmYTA2ZDk4YTA4NjRkODc2MDI3MzNlYzg2YTY0NTIxZjJiMTgxNzdiMjAwY2JiZTExNzU3N2E2MTVkNmM3NzA5ODhj''@;'; put 'put ''MGJhZDk0NmUyMDhlMjRmYTA3NGU1YWIzMTQzZGI1YmZjZTBmZDEwOGU0YjgyZDEyMGE5M2FkMmNhZmZmZmZmZmZmZmZmZmZmZiJ9LCJtb2RwMTYiOnsiZ2VuIjoiMDIiLCJwcmltZSI6ImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2''@;'; put 'put ''N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2MzdlZDZiMGJmZjVjYjZmNDA2YjdlZGVlMzg2YmZiNWE4OTlmYTVhZTlmMjQxMTdjNGIxZmU2''@;'; put 'put ''NDkyODY2NTFlY2U0NWIzZGMyMDA3Y2I4YTE2M2JmMDU5OGRhNDgzNjFjNTVkMzlhNjkxNjNmYThmZDI0Y2Y1ZjgzNjU1ZDIzZGNhM2FkOTYxYzYyZjM1NjIwODU1MmJiOWVkNTI5MDc3MDk2OTY2ZDY3MGMzNTRlNGFiYzk4MDRmMTc0NmMwOGNhMTgyMTdjMzI5MDVlNDYyZTM2Y2UzYmUzOWU3''@;'; put 'put ''NzJjMTgwZTg2MDM5YjI3ODNhMmVjMDdhMjhmYjVjNTVkZjA2ZjRjNTJjOWRlMmJjYmY2OTU1ODE3MTgzOTk1NDk3Y2VhOTU2YWU1MTVkMjI2MTg5OGZhMDUxMDE1NzI4ZTVhOGFhYWM0MmRhZDMzMTcwZDA0NTA3YTMzYTg1NTIxYWJkZjFjYmE2NGVjZmI4NTA0NThkYmVmMGE4YWVhNzE1NzVk''@;'; put 'put ''MDYwYzdkYjM5NzBmODVhNmUxZTRjN2FiZjVhZThjZGIwOTMzZDcxZThjOTRlMDRhMjU2MTlkY2VlM2QyMjYxYWQyZWU2YmYxMmZmYTA2ZDk4YTA4NjRkODc2MDI3MzNlYzg2YTY0NTIxZjJiMTgxNzdiMjAwY2JiZTExNzU3N2E2MTVkNmM3NzA5ODhjMGJhZDk0NmUyMDhlMjRmYTA3NGU1YWIz''@;'; put 'put ''MTQzZGI1YmZjZTBmZDEwOGU0YjgyZDEyMGE5MjEwODAxMWE3MjNjMTJhNzg3ZTZkNzg4NzE5YTEwYmRiYTViMjY5OWMzMjcxODZhZjRlMjNjMWE5NDY4MzRiNjE1MGJkYTI1ODNlOWNhMmFkNDRjZThkYmJiYzJkYjA0ZGU4ZWY5MmU4ZWZjMTQxZmJlY2FhNjI4N2M1OTQ3NGU2YmMwNWQ5OWIy''@;'; put 'put ''OTY0ZmEwOTBjM2EyMjMzYmExODY1MTViZTdlZDFmNjEyOTcwY2VlMmQ3YWZiODFiZGQ3NjIxNzA0ODFjZDAwNjkxMjdkNWIwNWFhOTkzYjRlYTk4OGQ4ZmRkYzE4NmZmYjdkYzkwYTZjMDhmNGRmNDM1YzkzNDA2MzE5OWZmZmZmZmZmZmZmZmZmZmYifSwibW9kcDE3Ijp7ImdlbiI6IjAyIiwi''@;'; put 'put ''cHJpbWUiOiJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3''@;'; put 'put ''ZWM2ZjQ0YzQyZTlhNjM3ZWQ2YjBiZmY1Y2I2ZjQwNmI3ZWRlZTM4NmJmYjVhODk5ZmE1YWU5ZjI0MTE3YzRiMWZlNjQ5Mjg2NjUxZWNlNDViM2RjMjAwN2NiOGExNjNiZjA1OThkYTQ4MzYxYzU1ZDM5YTY5MTYzZmE4ZmQyNGNmNWY4MzY1NWQyM2RjYTNhZDk2MWM2MmYzNTYyMDg1NTJiYjll''@;'; put 'put ''ZDUyOTA3NzA5Njk2NmQ2NzBjMzU0ZTRhYmM5ODA0ZjE3NDZjMDhjYTE4MjE3YzMyOTA1ZTQ2MmUzNmNlM2JlMzllNzcyYzE4MGU4NjAzOWIyNzgzYTJlYzA3YTI4ZmI1YzU1ZGYwNmY0YzUyYzlkZTJiY2JmNjk1NTgxNzE4Mzk5NTQ5N2NlYTk1NmFlNTE1ZDIyNjE4OThmYTA1MTAxNTcyOGU1''@;'; put 'put ''YThhYWFjNDJkYWQzMzE3MGQwNDUwN2EzM2E4NTUyMWFiZGYxY2JhNjRlY2ZiODUwNDU4ZGJlZjBhOGFlYTcxNTc1ZDA2MGM3ZGIzOTcwZjg1YTZlMWU0YzdhYmY1YWU4Y2RiMDkzM2Q3MWU4Yzk0ZTA0YTI1NjE5ZGNlZTNkMjI2MWFkMmVlNmJmMTJmZmEwNmQ5OGEwODY0ZDg3NjAyNzMzZWM4''@;'; put 'put ''NmE2NDUyMWYyYjE4MTc3YjIwMGNiYmUxMTc1NzdhNjE1ZDZjNzcwOTg4YzBiYWQ5NDZlMjA4ZTI0ZmEwNzRlNWFiMzE0M2RiNWJmY2UwZmQxMDhlNGI4MmQxMjBhOTIxMDgwMTFhNzIzYzEyYTc4N2U2ZDc4ODcxOWExMGJkYmE1YjI2OTljMzI3MTg2YWY0ZTIzYzFhOTQ2ODM0YjYxNTBiZGEy''@;'; put 'put ''NTgzZTljYTJhZDQ0Y2U4ZGJiYmMyZGIwNGRlOGVmOTJlOGVmYzE0MWZiZWNhYTYyODdjNTk0NzRlNmJjMDVkOTliMjk2NGZhMDkwYzNhMjIzM2JhMTg2NTE1YmU3ZWQxZjYxMjk3MGNlZTJkN2FmYjgxYmRkNzYyMTcwNDgxY2QwMDY5MTI3ZDViMDVhYTk5M2I0ZWE5ODhkOGZkZGMxODZmZmI3''@;'; put 'put ''ZGM5MGE2YzA4ZjRkZjQzNWM5MzQwMjg0OTIzNmMzZmFiNGQyN2M3MDI2YzFkNGRjYjI2MDI2NDZkZWM5NzUxZTc2M2RiYTM3YmRmOGZmOTQwNmFkOWU1MzBlZTVkYjM4MmY0MTMwMDFhZWIwNmE1M2VkOTAyN2Q4MzExNzk3MjdiMDg2NWE4OTE4ZGEzZWRiZWJjZjliMTRlZDQ0Y2U2Y2JhY2Vk''@;'; put 'put ''NGJiMWJkYjdmMTQ0N2U2Y2MyNTRiMzMyMDUxNTEyYmQ3YWY0MjZmYjhmNDAxMzc4Y2QyYmY1OTgzY2EwMWM2NGI5MmVjZjAzMmVhMTVkMTcyMWQwM2Y0ODJkN2NlNmU3NGZlZjZkNTVlNzAyZjQ2OTgwYzgyYjVhODQwMzE5MDBiMWM5ZTU5ZTdjOTdmYmVjN2U4ZjMyM2E5N2E3ZTM2Y2M4OGJl''@;'; put 'put ''MGYxZDQ1YjdmZjU4NWFjNTRiZDQwN2IyMmI0MTU0YWFjYzhmNmQ3ZWJmNDhlMWQ4MTRjYzVlZDIwZjgwMzdlMGE3OTcxNWVlZjI5YmUzMjgwNmExZDU4YmI3YzVkYTc2ZjU1MGFhM2Q4YTFmYmZmMGViMTljY2IxYTMxM2Q1NWNkYTU2YzllYzJlZjI5NjMyMzg3ZmU4ZDc2ZTNjMDQ2ODA0M2U4''@;'; put 'put ''ZjY2M2Y0ODYwZWUxMmJmMmQ1YjBiNzQ3NGQ2ZTY5NGY5MWU2ZGNjNDAyNGZmZmZmZmZmZmZmZmZmZmYifSwibW9kcDE4Ijp7ImdlbiI6IjAyIiwicHJpbWUiOiJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYz''@;'; put 'put ''YjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjM3ZWQ2YjBiZmY1Y2I2ZjQwNmI3ZWRlZTM4NmJmYjVhODk5ZmE1YWU5ZjI0MTE3YzRiMWZlNjQ5Mjg2NjUxZWNlNDVi''@;'; put 'put ''M2RjMjAwN2NiOGExNjNiZjA1OThkYTQ4MzYxYzU1ZDM5YTY5MTYzZmE4ZmQyNGNmNWY4MzY1NWQyM2RjYTNhZDk2MWM2MmYzNTYyMDg1NTJiYjllZDUyOTA3NzA5Njk2NmQ2NzBjMzU0ZTRhYmM5ODA0ZjE3NDZjMDhjYTE4MjE3YzMyOTA1ZTQ2MmUzNmNlM2JlMzllNzcyYzE4MGU4NjAzOWIy''@;'; put 'put ''NzgzYTJlYzA3YTI4ZmI1YzU1ZGYwNmY0YzUyYzlkZTJiY2JmNjk1NTgxNzE4Mzk5NTQ5N2NlYTk1NmFlNTE1ZDIyNjE4OThmYTA1MTAxNTcyOGU1YThhYWFjNDJkYWQzMzE3MGQwNDUwN2EzM2E4NTUyMWFiZGYxY2JhNjRlY2ZiODUwNDU4ZGJlZjBhOGFlYTcxNTc1ZDA2MGM3ZGIzOTcwZjg1''@;'; put 'put ''YTZlMWU0YzdhYmY1YWU4Y2RiMDkzM2Q3MWU4Yzk0ZTA0YTI1NjE5ZGNlZTNkMjI2MWFkMmVlNmJmMTJmZmEwNmQ5OGEwODY0ZDg3NjAyNzMzZWM4NmE2NDUyMWYyYjE4MTc3YjIwMGNiYmUxMTc1NzdhNjE1ZDZjNzcwOTg4YzBiYWQ5NDZlMjA4ZTI0ZmEwNzRlNWFiMzE0M2RiNWJmY2UwZmQx''@;'; put 'put ''MDhlNGI4MmQxMjBhOTIxMDgwMTFhNzIzYzEyYTc4N2U2ZDc4ODcxOWExMGJkYmE1YjI2OTljMzI3MTg2YWY0ZTIzYzFhOTQ2ODM0YjYxNTBiZGEyNTgzZTljYTJhZDQ0Y2U4ZGJiYmMyZGIwNGRlOGVmOTJlOGVmYzE0MWZiZWNhYTYyODdjNTk0NzRlNmJjMDVkOTliMjk2NGZhMDkwYzNhMjIz''@;'; put 'put ''M2JhMTg2NTE1YmU3ZWQxZjYxMjk3MGNlZTJkN2FmYjgxYmRkNzYyMTcwNDgxY2QwMDY5MTI3ZDViMDVhYTk5M2I0ZWE5ODhkOGZkZGMxODZmZmI3ZGM5MGE2YzA4ZjRkZjQzNWM5MzQwMjg0OTIzNmMzZmFiNGQyN2M3MDI2YzFkNGRjYjI2MDI2NDZkZWM5NzUxZTc2M2RiYTM3YmRmOGZmOTQw''@;'; put 'put ''NmFkOWU1MzBlZTVkYjM4MmY0MTMwMDFhZWIwNmE1M2VkOTAyN2Q4MzExNzk3MjdiMDg2NWE4OTE4ZGEzZWRiZWJjZjliMTRlZDQ0Y2U2Y2JhY2VkNGJiMWJkYjdmMTQ0N2U2Y2MyNTRiMzMyMDUxNTEyYmQ3YWY0MjZmYjhmNDAxMzc4Y2QyYmY1OTgzY2EwMWM2NGI5MmVjZjAzMmVhMTVkMTcy''@;'; put 'put ''MWQwM2Y0ODJkN2NlNmU3NGZlZjZkNTVlNzAyZjQ2OTgwYzgyYjVhODQwMzE5MDBiMWM5ZTU5ZTdjOTdmYmVjN2U4ZjMyM2E5N2E3ZTM2Y2M4OGJlMGYxZDQ1YjdmZjU4NWFjNTRiZDQwN2IyMmI0MTU0YWFjYzhmNmQ3ZWJmNDhlMWQ4MTRjYzVlZDIwZjgwMzdlMGE3OTcxNWVlZjI5YmUzMjgw''@;'; put 'put ''NmExZDU4YmI3YzVkYTc2ZjU1MGFhM2Q4YTFmYmZmMGViMTljY2IxYTMxM2Q1NWNkYTU2YzllYzJlZjI5NjMyMzg3ZmU4ZDc2ZTNjMDQ2ODA0M2U4ZjY2M2Y0ODYwZWUxMmJmMmQ1YjBiNzQ3NGQ2ZTY5NGY5MWU2ZGJlMTE1OTc0YTM5MjZmMTJmZWU1ZTQzODc3N2NiNmE5MzJkZjhjZDhiZWM0''@;'; put 'put ''ZDA3M2I5MzFiYTNiYzgzMmI2OGQ5ZGQzMDA3NDFmYTdiZjhhZmM0N2VkMjU3NmY2OTM2YmE0MjQ2NjNhYWI2MzljNWFlNGY1NjgzNDIzYjQ3NDJiZjFjOTc4MjM4ZjE2Y2JlMzlkNjUyZGUzZmRiOGJlZmM4NDhhZDkyMjIyMmUwNGE0MDM3YzA3MTNlYjU3YTgxYTIzZjBjNzM0NzNmYzY0NmNl''@;'; put 'put ''YTMwNmI0YmNiYzg4NjJmODM4NWRkZmE5ZDRiN2ZhMmMwODdlODc5NjgzMzAzZWQ1YmRkM2EwNjJiM2NmNWIzYTI3OGE2NmQyYTEzZjgzZjQ0ZjgyZGRmMzEwZWUwNzRhYjZhMzY0NTk3ZTg5OWEwMjU1ZGMxNjRmMzFjYzUwODQ2ODUxZGY5YWI0ODE5NWRlZDdlYTFiMWQ1MTBiZDdlZTc0ZDcz''@;'; put 'put ''ZmFmMzZiYzMxZWNmYTI2ODM1OTA0NmY0ZWI4NzlmOTI0MDA5NDM4YjQ4MWM2Y2Q3ODg5YTAwMmVkNWVlMzgyYmM5MTkwZGE2ZmMwMjZlNDc5NTU4ZTQ0NzU2NzdlOWFhOWUzMDUwZTI3NjU2OTRkZmM4MWY1NmU4ODBiOTZlNzE2MGM5ODBkZDk4ZWRkM2RmZmZmZmZmZmZmZmZmZmZmZiJ9fScp''@;'; put 'put ''fSw4NTk3OnVlPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9e2k4OiI2LjYuMSJ9fSwyNTYyOnVlPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9SlNPTi5wYXJzZSgneyIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4xIjoiYWVzLTEyOC1lY2IiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4yIjoiYWVz''@;'; put 'put ''LTEyOC1jYmMiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4zIjoiYWVzLTEyOC1vZmIiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS40IjoiYWVzLTEyOC1jZmIiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4yMSI6ImFlcy0xOTItZWNiIiwiMi4xNi44NDAuMS4xMDEuMy40LjEuMjIiOiJhZXMtMTkyLWNi''@;'; put 'put ''YyIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjIzIjoiYWVzLTE5Mi1vZmIiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4yNCI6ImFlcy0xOTItY2ZiIiwiMi4xNi44NDAuMS4xMDEuMy40LjEuNDEiOiJhZXMtMjU2LWVjYiIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjQyIjoiYWVzLTI1Ni1jYmMiLCIy''@;'; put 'put ''LjE2Ljg0MC4xLjEwMS4zLjQuMS40MyI6ImFlcy0yNTYtb2ZiIiwiMi4xNi44NDAuMS4xMDEuMy40LjEuNDQiOiJhZXMtMjU2LWNmYiJ9Jyl9fSxfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX189e307ZnVuY3Rpb24gX19uZXN0ZWRfd2VicGFja19yZXF1aXJlXzI4OTQ5MDFfXyh1ZSl7dmFyIFg9''@;'; put 'put ''X193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW3VlXTtpZih2b2lkIDAhPT1YKXJldHVybiBYLmV4cG9ydHM7dmFyIHk9X193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW3VlXT17aWQ6dWUsbG9hZGVkOiExLGV4cG9ydHM6e319O3JldHVybiBfX3dlYnBhY2tfbW9kdWxlc19fW3VlXS5jYWxsKHkuZXhw''@;'; put 'put ''b3J0cyx5LHkuZXhwb3J0cyxfX25lc3RlZF93ZWJwYWNrX3JlcXVpcmVfMjg5NDkwMV9fKSx5LmxvYWRlZD0hMCx5LmV4cG9ydHN9X19uZXN0ZWRfd2VicGFja19yZXF1aXJlXzI4OTQ5MDFfXy5kPSh1ZSxYKT0+e2Zvcih2YXIgeSBpbiBYKV9fbmVzdGVkX3dlYnBhY2tfcmVxdWlyZV8yODk0''@;'; put 'put ''OTAxX18ubyhYLHkpJiYhX19uZXN0ZWRfd2VicGFja19yZXF1aXJlXzI4OTQ5MDFfXy5vKHVlLHkpJiZPYmplY3QuZGVmaW5lUHJvcGVydHkodWUseSx7ZW51bWVyYWJsZTohMCxnZXQ6WFt5XX0pfSxfX25lc3RlZF93ZWJwYWNrX3JlcXVpcmVfMjg5NDkwMV9fLmc9ZnVuY3Rpb24oKXtpZigi''@;'; put 'put ''b2JqZWN0Ij09dHlwZW9mIGdsb2JhbFRoaXMpcmV0dXJuIGdsb2JhbFRoaXM7dHJ5e3JldHVybiB0aGlzfHxuZXcgRnVuY3Rpb24oInJldHVybiB0aGlzIikoKX1jYXRjaHtpZigib2JqZWN0Ij09dHlwZW9mIHdpbmRvdylyZXR1cm4gd2luZG93fX0oKSxfX25lc3RlZF93ZWJwYWNrX3JlcXVp''@;'; put 'put ''cmVfMjg5NDkwMV9fLm89KHVlLFgpPT5PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodWUsWCksX19uZXN0ZWRfd2VicGFja19yZXF1aXJlXzI4OTQ5MDFfXy5yPXVlPT57dHlwZW9mIFN5bWJvbDwidSImJlN5bWJvbC50b1N0cmluZ1RhZyYmT2JqZWN0LmRlZmluZVByb3Bl''@;'; put 'put ''cnR5KHVlLFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodWUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSxfX25lc3RlZF93ZWJwYWNrX3JlcXVpcmVfMjg5NDkwMV9fLm5tZD11ZT0+KHVlLnBhdGhzPVtdLHVlLmNoaWxkcmVufHwo''@;'; put 'put ''dWUuY2hpbGRyZW49W10pLHVlKTt2YXIgX19uZXN0ZWRfd2VicGFja19leHBvcnRzX189X19uZXN0ZWRfd2VicGFja19yZXF1aXJlXzI4OTQ5MDFfXygzNjA3KTtyZXR1cm4gX19uZXN0ZWRfd2VicGFja19leHBvcnRzX199KSgpLG1vZHVsZS5leHBvcnRzPXkoKX0sNTk0ODpmdW5jdGlvbih1''@;'; put 'put ''ZSxYLHkpeyJ1c2Ugc3RyaWN0Ijt2YXIgST10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oRil7cmV0dXJuIEYmJkYuX19lc01vZHVsZT9GOntkZWZhdWx0OkZ9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5pc1NwZWNpYWxN''@;'; put 'put ''aXNzaW5nPVguY2hvaWNlVmFsaWRhdG9yPVguY29uZmlybWF0aW9uVmFsaWRhdG9yPVgudXJsVmFsaWRhdG9yPXZvaWQgMDtjb25zdCBfPUkoeSgxMjk1NCkpO1gudXJsVmFsaWRhdG9yPShGLE8pPT4hIV8uZGVmYXVsdC5pc0h0dHBVcmkoRil8fCEhXy5kZWZhdWx0LmlzSHR0cHNVcmkoRil8''@;'; put 'put ''fCIiPT09Rnx8TyxYLmNvbmZpcm1hdGlvblZhbGlkYXRvcj1GPT4hMD09PUZ8fCExPT09RixYLmNob2ljZVZhbGlkYXRvcj0oRixPLHopPT5GPjAmJkY8PU98fHosWC5pc1NwZWNpYWxNaXNzaW5nPUY9Pigic3RyaW5nIiE9dHlwZW9mIEZ8fCFGLmluY2x1ZGVzKCIuLiIpKSYmbmV3IFJlZ0V4''@;'; put 'put ''cCgiXihcXC4pP1thLXpfLl17MX0kIiwiaSIpLnRlc3QoRil9LDEzMjQ3Oih1ZSxYKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgXztYLlk9dm9pZCAwLChfPVguWXx8KFguWT17fSkpLlNhc1ZpeWE9IlNBU1ZJWUEiLF8uU2FzOT0iU0FTOSIsXy5TYXNqcz0iU0FTSlMifSwyNTAwMToodWUsWCk9Pnsi''@;'; put 'put ''dXNlIHN0cmljdCI7WC5DPXZvaWQgMCxYLkM9KF8sZz0xLEI9MTA5OTUxMTYyNzc3Nik9PntpZigwPT09XylyZXR1cm4iMCBCIjtfPV8+Qj9COl87Y29uc3QgRj1nPDA/MDpnLE89TWF0aC5mbG9vcihNYXRoLmxvZyhfKS9NYXRoLmxvZygxMDI0KSk7cmV0dXJuKF8vTWF0aC5wb3coMTAyNCxP''@;'; put 'put ''KSkudG9GaXhlZChGKSsiICIrWyJCIiwiS0IiLCJNQiIsIkdCIiwiVEIiXVtPXX19LDQyOTI0OmZ1bmN0aW9uKHVlKXt2YXIgWD17dmVyc2lvbjoiMS4xNS4wIn07WFs0MzddPWZ1bmN0aW9uKCl7Zm9yKHZhciB5PSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJc''@;'; put 'put ''eDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7''@;'; put 'put ''fH1+XHg3Zlx4YzdceGZjXHhlOVx4ZTJceGU0XHhlMFx4ZTVceGU3XHhlYVx4ZWJceGU4XHhlZlx4ZWVceGVjXHhjNFx4YzVceGM5XHhlNlx4YzZceGY0XHhmNlx4ZjJceGZiXHhmOVx4ZmZceGQ2XHhkY1x4YTJceGEzXHhhNVx1MjBhN1x1MDE5Mlx4ZTFceGVkXHhmM1x4ZmFceGYxXHhkMVx4''@;'; put 'put ''YWFceGJhXHhiZlx1MjMxMFx4YWNceGJkXHhiY1x4YTFceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MjU2MVx1MjU2Mlx1MjU1Nlx1MjU1NVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MjU1Y1x1MjU1Ylx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUw''@;'; put 'put ''MFx1MjUzY1x1MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MjU2N1x1MjU2OFx1MjU2NFx1MjU2NVx1MjU1OVx1MjU1OFx1MjU1Mlx1MjU1M1x1MjU2Ylx1MjU2YVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1''@;'; put 'put ''MDNiMVx4ZGZcdTAzOTNcdTAzYzBcdTAzYTNcdTAzYzNceGI1XHUwM2M0XHUwM2E2XHUwMzk4XHUwM2E5XHUwM2I0XHUyMjFlXHUwM2M2XHUwM2I1XHUyMjI5XHUyMjYxXHhiMVx1MjI2NVx1MjI2NFx1MjMyMFx1MjMyMVx4ZjdcdTIyNDhceGIwXHUyMjE5XHhiN1x1MjIxYVx1MjA3Zlx4YjJc''@;'; put 'put ''dTI1YTBceGEwIixJPVtdLF89e30sZz0wOzI1NiE9ZzsrK2cpNjU1MzMhPT15LmNoYXJDb2RlQXQoZykmJihfW3kuY2hhckF0KGcpXT1nKSxJW2ddPXkuY2hhckF0KGcpO3JldHVybntlbmM6XyxkZWM6SX19KCksWFs2MjBdPWZ1bmN0aW9uKCl7Zm9yKHZhciB5PSJcMFx4MDFceDAyXHgwM1x4''@;'; put 'put ''MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9g''@;'; put 'put ''YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx4YzdceGZjXHhlOVx4ZTJceGU0XHhlMFx1MDEwNVx4ZTdceGVhXHhlYlx4ZThceGVmXHhlZVx1MDEwN1x4YzRcdTAxMDRcdTAxMThcdTAxMTlcdTAxNDJceGY0XHhmNlx1MDEwNlx4ZmJceGY5XHUwMTVhXHhkNlx4ZGNceGEyXHUw''@;'; put 'put ''MTQxXHhhNVx1MDE1Ylx1MDE5Mlx1MDE3OVx1MDE3Ylx4ZjNceGQzXHUwMTQ0XHUwMTQzXHUwMTdhXHUwMTdjXHhiZlx1MjMxMFx4YWNceGJkXHhiY1x4YTFceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MjU2MVx1MjU2Mlx1MjU1Nlx1MjU1NVx1MjU2M1x1MjU1MVx1''@;'; put 'put ''MjU1N1x1MjU1ZFx1MjU1Y1x1MjU1Ylx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MjU2N1x1MjU2OFx1MjU2NFx1MjU2NVx1MjU1OVx1MjU1OFx1MjU1Mlx1MjU1''@;'; put 'put ''M1x1MjU2Ylx1MjU2YVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1MDNiMVx4ZGZcdTAzOTNcdTAzYzBcdTAzYTNcdTAzYzNceGI1XHUwM2M0XHUwM2E2XHUwMzk4XHUwM2E5XHUwM2I0XHUyMjFlXHUwM2M2XHUwM2I1XHUyMjI5XHUyMjYxXHhiMVx1MjI2NVx1''@;'; put 'put ''MjI2NFx1MjMyMFx1MjMyMVx4ZjdcdTIyNDhceGIwXHUyMjE5XHhiN1x1MjIxYVx1MjA3Zlx4YjJcdTI1YTBceGEwIixJPVtdLF89e30sZz0wOzI1NiE9ZzsrK2cpNjU1MzMhPT15LmNoYXJDb2RlQXQoZykmJihfW3kuY2hhckF0KGcpXT1nKSxJW2ddPXkuY2hhckF0KGcpO3JldHVybntlbmM6''@;'; put 'put ''XyxkZWM6SX19KCksWFs3MzddPWZ1bmN0aW9uKCl7Zm9yKHZhciB5PSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJico''@;'; put 'put ''KSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1MDM5MVx1MDM5Mlx1MDM5M1x1MDM5NFx1MDM5NVx1MDM5Nlx1MDM5N1x1MDM5OFx1MDM5OVx1MDM5YVx1MDM5Ylx1MDM5Y1x1''@;'; put 'put ''MDM5ZFx1MDM5ZVx1MDM5Zlx1MDNhMFx1MDNhMVx1MDNhM1x1MDNhNFx1MDNhNVx1MDNhNlx1MDNhN1x1MDNhOFx1MDNhOVx1MDNiMVx1MDNiMlx1MDNiM1x1MDNiNFx1MDNiNVx1MDNiNlx1MDNiN1x1MDNiOFx1MDNiOVx1MDNiYVx1MDNiYlx1MDNiY1x1MDNiZFx1MDNiZVx1MDNiZlx1MDNj''@;'; put 'put ''MFx1MDNjMVx1MDNjM1x1MDNjMlx1MDNjNFx1MDNjNVx1MDNjNlx1MDNjN1x1MDNjOFx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MjU2MVx1MjU2Mlx1MjU1Nlx1MjU1NVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MjU1Y1x1MjU1Ylx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1''@;'; put 'put ''MjUxY1x1MjUwMFx1MjUzY1x1MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MjU2N1x1MjU2OFx1MjU2NFx1MjU2NVx1MjU1OVx1MjU1OFx1MjU1Mlx1MjU1M1x1MjU2Ylx1MjU2YVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5''@;'; put 'put ''MFx1MjU4MFx1MDNjOVx1MDNhY1x1MDNhZFx1MDNhZVx1MDNjYVx1MDNhZlx1MDNjY1x1MDNjZFx1MDNjYlx1MDNjZVx1MDM4Nlx1MDM4OFx1MDM4OVx1MDM4YVx1MDM4Y1x1MDM4ZVx1MDM4Zlx4YjFcdTIyNjVcdTIyNjRcdTAzYWFcdTAzYWJceGY3XHUyMjQ4XHhiMFx1MjIxOVx4YjdcdTIy''@;'; put 'put ''MWFcdTIwN2ZceGIyXHUyNWEwXHhhMCIsST1bXSxfPXt9LGc9MDsyNTYhPWc7KytnKTY1NTMzIT09eS5jaGFyQ29kZUF0KGcpJiYoX1t5LmNoYXJBdChnKV09ZyksSVtnXT15LmNoYXJBdChnKTtyZXR1cm57ZW5jOl8sZGVjOkl9fSgpLFhbODUwXT1mdW5jdGlvbigpe2Zvcih2YXIgeT0iXDBc''@;'; put 'put ''eDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNU''@;'; put 'put ''VVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZceGM3XHhmY1x4ZTlceGUyXHhlNFx4ZTBceGU1XHhlN1x4ZWFceGViXHhlOFx4ZWZceGVlXHhlY1x4YzRceGM1XHhjOVx4ZTZceGM2XHhmNFx4ZjZceGYyXHhmYlx4ZjlceGZmXHhkNlx4ZGNceGY4XHhhM1x4''@;'; put 'put ''ZDhceGQ3XHUwMTkyXHhlMVx4ZWRceGYzXHhmYVx4ZjFceGQxXHhhYVx4YmFceGJmXHhhZVx4YWNceGJkXHhiY1x4YTFceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx4YzFceGMyXHhjMFx4YTlcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRceGEyXHhhNVx1MjUxMFx1MjUx''@;'; put 'put ''NFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x4ZTNceGMzXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHhhNFx4ZjBceGQwXHhjYVx4Y2JceGM4XHUwMTMxXHhjZFx4Y2VceGNmXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHhhNlx4Y2NcdTI1ODBceGQz''@;'; put 'put ''XHhkZlx4ZDRceGQyXHhmNVx4ZDVceGI1XHhmZVx4ZGVceGRhXHhkYlx4ZDlceGZkXHhkZFx4YWZceGI0XHhhZFx4YjFcdTIwMTdceGJlXHhiNlx4YTdceGY3XHhiOFx4YjBceGE4XHhiN1x4YjlceGIzXHhiMlx1MjVhMFx4YTAiLEk9W10sXz17fSxnPTA7MjU2IT1nOysrZyk2NTUzMyE9PXku''@;'; put 'put ''Y2hhckNvZGVBdChnKSYmKF9beS5jaGFyQXQoZyldPWcpLElbZ109eS5jaGFyQXQoZyk7cmV0dXJue2VuYzpfLGRlYzpJfX0oKSxYWzg1Ml09ZnVuY3Rpb24oKXtmb3IodmFyIHk9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEy''@;'; put 'put ''XHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHhjN1x4ZmNceGU5''@;'; put 'put ''XHhlMlx4ZTRcdTAxNmZcdTAxMDdceGU3XHUwMTQyXHhlYlx1MDE1MFx1MDE1MVx4ZWVcdTAxNzlceGM0XHUwMTA2XHhjOVx1MDEzOVx1MDEzYVx4ZjRceGY2XHUwMTNkXHUwMTNlXHUwMTVhXHUwMTViXHhkNlx4ZGNcdTAxNjRcdTAxNjVcdTAxNDFceGQ3XHUwMTBkXHhlMVx4ZWRceGYzXHhm''@;'; put 'put ''YVx1MDEwNFx1MDEwNVx1MDE3ZFx1MDE3ZVx1MDExOFx1MDExOVx4YWNcdTAxN2FcdTAxMGNcdTAxNWZceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx4YzFceGMyXHUwMTFhXHUwMTVlXHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUwMTdiXHUwMTdjXHUyNTEwXHUyNTE0''@;'; put 'put ''XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUwMTAyXHUwMTAzXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHhhNFx1MDExMVx1MDExMFx1MDEwZVx4Y2JcdTAxMGZcdTAxNDdceGNkXHhjZVx1MDExYlx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MDE2''@;'; put 'put ''Mlx1MDE2ZVx1MjU4MFx4ZDNceGRmXHhkNFx1MDE0M1x1MDE0NFx1MDE0OFx1MDE2MFx1MDE2MVx1MDE1NFx4ZGFcdTAxNTVcdTAxNzBceGZkXHhkZFx1MDE2M1x4YjRceGFkXHUwMmRkXHUwMmRiXHUwMmM3XHUwMmQ4XHhhN1x4ZjdceGI4XHhiMFx4YThcdTAyZDlcdTAxNzFcdTAxNThcdTAx''@;'; put 'put ''NTlcdTI1YTBceGEwIixJPVtdLF89e30sZz0wOzI1NiE9ZzsrK2cpNjU1MzMhPT15LmNoYXJDb2RlQXQoZykmJihfW3kuY2hhckF0KGcpXT1nKSxJW2ddPXkuY2hhckF0KGcpO3JldHVybntlbmM6XyxkZWM6SX19KCksWFs4NTddPWZ1bmN0aW9uKCl7Zm9yKHZhciB5PSJcMFx4MDFceDAyXHgw''@;'; put 'put ''M1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxd''@;'; put 'put ''Xl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx4YzdceGZjXHhlOVx4ZTJceGU0XHhlMFx4ZTVceGU3XHhlYVx4ZWJceGU4XHhlZlx4ZWVcdTAxMzFceGM0XHhjNVx4YzlceGU2XHhjNlx4ZjRceGY2XHhmMlx4ZmJceGY5XHUwMTMwXHhkNlx4ZGNceGY4XHhhM1x4ZDhcdTAx''@;'; put 'put ''NWVcdTAxNWZceGUxXHhlZFx4ZjNceGZhXHhmMVx4ZDFcdTAxMWVcdTAxMWZceGJmXHhhZVx4YWNceGJkXHhiY1x4YTFceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx4YzFceGMyXHhjMFx4YTlcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRceGEyXHhhNVx1MjUxMFx1MjUx''@;'; put 'put ''NFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x4ZTNceGMzXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHhhNFx4YmFceGFhXHhjYVx4Y2JceGM4XHVmZmZkXHhjZFx4Y2VceGNmXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHhhNlx4Y2NcdTI1ODBceGQz''@;'; put 'put ''XHhkZlx4ZDRceGQyXHhmNVx4ZDVceGI1XHVmZmZkXHhkN1x4ZGFceGRiXHhkOVx4ZWNceGZmXHhhZlx4YjRceGFkXHhiMVx1ZmZmZFx4YmVceGI2XHhhN1x4ZjdceGI4XHhiMFx4YThceGI3XHhiOVx4YjNceGIyXHUyNWEwXHhhMCIsST1bXSxfPXt9LGc9MDsyNTYhPWc7KytnKTY1NTMzIT09''@;'; put 'put ''eS5jaGFyQ29kZUF0KGcpJiYoX1t5LmNoYXJBdChnKV09ZyksSVtnXT15LmNoYXJBdChnKTtyZXR1cm57ZW5jOl8sZGVjOkl9fSgpLFhbODYxXT1mdW5jdGlvbigpe2Zvcih2YXIgeT0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4''@;'; put 'put ''MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZceGM3XHhmY1x4''@;'; put 'put ''ZTlceGUyXHhlNFx4ZTBceGU1XHhlN1x4ZWFceGViXHhlOFx4ZDBceGYwXHhkZVx4YzRceGM1XHhjOVx4ZTZceGM2XHhmNFx4ZjZceGZlXHhmYlx4ZGRceGZkXHhkNlx4ZGNceGY4XHhhM1x4ZDhcdTIwYTdcdTAxOTJceGUxXHhlZFx4ZjNceGZhXHhjMVx4Y2RceGQzXHhkYVx4YmZcdTIzMTBc''@;'; put 'put ''eGFjXHhiZFx4YmNceGExXHhhYlx4YmJcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTI1NjFcdTI1NjJcdTI1NTZcdTI1NTVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTI1NWNcdTI1NWJcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTI1NWVcdTI1''@;'; put 'put ''NWZcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNcdTI1NjdcdTI1NjhcdTI1NjRcdTI1NjVcdTI1NTlcdTI1NThcdTI1NTJcdTI1NTNcdTI1NmJcdTI1NmFcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTI1OGNcdTI1OTBcdTI1ODBcdTAzYjFceGRmXHUwMzkzXHUw''@;'; put 'put ''M2MwXHUwM2EzXHUwM2MzXHhiNVx1MDNjNFx1MDNhNlx1MDM5OFx1MDNhOVx1MDNiNFx1MjIxZVx1MDNjNlx1MDNiNVx1MjIyOVx1MjI2MVx4YjFcdTIyNjVcdTIyNjRcdTIzMjBcdTIzMjFceGY3XHUyMjQ4XHhiMFx1MjIxOVx4YjdcdTIyMWFcdTIwN2ZceGIyXHUyNWEwXHhhMCIsST1bXSxf''@;'; put 'put ''PXt9LGc9MDsyNTYhPWc7KytnKTY1NTMzIT09eS5jaGFyQ29kZUF0KGcpJiYoX1t5LmNoYXJBdChnKV09ZyksSVtnXT15LmNoYXJBdChnKTtyZXR1cm57ZW5jOl8sZGVjOkl9fSgpLFhbODY1XT1mdW5jdGlvbigpe2Zvcih2YXIgeT0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJc''@;'; put 'put ''dFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3Bx''@;'; put 'put ''cnN0dXZ3eHl6e3x9flx4N2ZceGM3XHhmY1x4ZTlceGUyXHhlNFx4ZTBceGU1XHhlN1x4ZWFceGViXHhlOFx4ZWZceGVlXHhlY1x4YzRceGM1XHhjOVx4ZTZceGM2XHhmNFx4ZjZceGYyXHhmYlx4ZjlceGZmXHhkNlx4ZGNceGY4XHhhM1x4ZDhcdTIwYTdcdTAxOTJceGUxXHhlZFx4ZjNceGZh''@;'; put 'put ''XHhmMVx4ZDFceGFhXHhiYVx4YmZcdTIzMTBceGFjXHhiZFx4YmNceGExXHhhYlx4YTRcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTI1NjFcdTI1NjJcdTI1NTZcdTI1NTVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTI1NWNcdTI1NWJcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNc''@;'; put 'put ''dTI1MWNcdTI1MDBcdTI1M2NcdTI1NWVcdTI1NWZcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNcdTI1NjdcdTI1NjhcdTI1NjRcdTI1NjVcdTI1NTlcdTI1NThcdTI1NTJcdTI1NTNcdTI1NmJcdTI1NmFcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTI1OGNcdTI1''@;'; put 'put ''OTBcdTI1ODBcdTAzYjFceGRmXHUwMzkzXHUwM2MwXHUwM2EzXHUwM2MzXHhiNVx1MDNjNFx1MDNhNlx1MDM5OFx1MDNhOVx1MDNiNFx1MjIxZVx1MDNjNlx1MDNiNVx1MjIyOVx1MjI2MVx4YjFcdTIyNjVcdTIyNjRcdTIzMjBcdTIzMjFceGY3XHUyMjQ4XHhiMFx1MjIxOVx4YjdcdTIyMWFc''@;'; put 'put ''dTIwN2ZceGIyXHUyNWEwXHhhMCIsST1bXSxfPXt9LGc9MDsyNTYhPWc7KytnKTY1NTMzIT09eS5jaGFyQ29kZUF0KGcpJiYoX1t5LmNoYXJBdChnKV09ZyksSVtnXT15LmNoYXJBdChnKTtyZXR1cm57ZW5jOl8sZGVjOkl9fSgpLFhbODY2XT1mdW5jdGlvbigpe2Zvcih2YXIgeT0iXDBceDAx''@;'; put 'put ''XHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZX''@;'; put 'put ''WFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0MTRcdTA0MTVcdTA0MTZcdTA0MTdcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNc''@;'; put 'put ''dTA0MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0MjhcdTA0MjlcdTA0MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0MmVcdTA0MmZcdTA0MzBcdTA0MzFcdTA0MzJcdTA0MzNcdTA0MzRcdTA0MzVcdTA0MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0''@;'; put 'put ''M2ZcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTI1NjFcdTI1NjJcdTI1NTZcdTI1NTVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTI1NWNcdTI1NWJcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTI1NWVcdTI1NWZcdTI1NWFcdTI1NTRcdTI1Njlc''@;'; put 'put ''dTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNcdTI1NjdcdTI1NjhcdTI1NjRcdTI1NjVcdTI1NTlcdTI1NThcdTI1NTJcdTI1NTNcdTI1NmJcdTI1NmFcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTI1OGNcdTI1OTBcdTI1ODBcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0NDRcdTA0NDVcdTA0''@;'; put 'put ''NDZcdTA0NDdcdTA0NDhcdTA0NDlcdTA0NGFcdTA0NGJcdTA0NGNcdTA0NGRcdTA0NGVcdTA0NGZcdTA0MDFcdTA0NTFcdTA0MDRcdTA0NTRcdTA0MDdcdTA0NTdcdTA0MGVcdTA0NWVceGIwXHUyMjE5XHhiN1x1MjIxYVx1MjExNlx4YTRcdTI1YTBceGEwIixJPVtdLF89e30sZz0wOzI1NiE9''@;'; put 'put ''ZzsrK2cpNjU1MzMhPT15LmNoYXJDb2RlQXQoZykmJihfW3kuY2hhckF0KGcpXT1nKSxJW2ddPXkuY2hhckF0KGcpO3JldHVybntlbmM6XyxkZWM6SX19KCksWFs4NzRdPWZ1bmN0aW9uKCl7Zm9yKHZhciB5PSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBl''@;'; put 'put ''XHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+''@;'; put 'put ''XHg3Zlx1MjBhY1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjAyNlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx4YTBcdTBlMDFcdTBlMDJcdTBlMDNcdTBlMDRcdTBlMDVcdTBlMDZcdTBlMDdcdTBlMDhcdTBlMDlcdTBlMGFcdTBlMGJcdTBlMGNcdTBlMGRcdTBlMGVcdTBlMGZcdTBlMTBcdTBlMTFcdTBlMTJcdTBlMTNcdTBlMTRcdTBlMTVcdTBl''@;'; put 'put ''MTZcdTBlMTdcdTBlMThcdTBlMTlcdTBlMWFcdTBlMWJcdTBlMWNcdTBlMWRcdTBlMWVcdTBlMWZcdTBlMjBcdTBlMjFcdTBlMjJcdTBlMjNcdTBlMjRcdTBlMjVcdTBlMjZcdTBlMjdcdTBlMjhcdTBlMjlcdTBlMmFcdTBlMmJcdTBlMmNcdTBlMmRcdTBlMmVcdTBlMmZcdTBlMzBcdTBlMzFc''@;'; put 'put ''dTBlMzJcdTBlMzNcdTBlMzRcdTBlMzVcdTBlMzZcdTBlMzdcdTBlMzhcdTBlMzlcdTBlM2FcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTBlM2ZcdTBlNDBcdTBlNDFcdTBlNDJcdTBlNDNcdTBlNDRcdTBlNDVcdTBlNDZcdTBlNDdcdTBlNDhcdTBlNDlcdTBlNGFcdTBlNGJcdTBlNGNcdTBl''@;'; put 'put ''NGRcdTBlNGVcdTBlNGZcdTBlNTBcdTBlNTFcdTBlNTJcdTBlNTNcdTBlNTRcdTBlNTVcdTBlNTZcdTBlNTdcdTBlNThcdTBlNTlcdTBlNWFcdTBlNWJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLEk9W10sXz17fSxnPTA7MjU2IT1nOysrZyk2NTUzMyE9PXkuY2hhckNvZGVBdChnKSYmKF9b''@;'; put 'put ''eS5jaGFyQXQoZyldPWcpLElbZ109eS5jaGFyQXQoZyk7cmV0dXJue2VuYzpfLGRlYzpJfX0oKSxYWzg5NV09ZnVuY3Rpb24oKXtmb3IodmFyIHk9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4''@;'; put 'put ''MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHUwMTBjXHhmY1x4ZTlcdTAxMGZceGU0XHUwMTBl''@;'; put 'put ''XHUwMTY0XHUwMTBkXHUwMTFiXHUwMTFhXHUwMTM5XHhjZFx1MDEzZVx1MDFlYVx4YzRceGMxXHhjOVx1MDE3ZVx1MDE3ZFx4ZjRceGY2XHhkM1x1MDE2Zlx4ZGFceGZkXHhkNlx4ZGNcdTAxNjBcdTAxM2RceGRkXHUwMTU4XHUwMTY1XHhlMVx4ZWRceGYzXHhmYVx1MDE0OFx1MDE0N1x1MDE2''@;'; put 'put ''ZVx4ZDRcdTAxNjFcdTAxNTlcdTAxNTVcdTAxNTRceGJjXHhhN1x4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHUyNTYxXHUyNTYyXHUyNTU2XHUyNTU1XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUyNTVjXHUyNTViXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFj''@;'; put 'put ''XHUyNTAwXHUyNTNjXHUyNTVlXHUyNTVmXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHUyNTY3XHUyNTY4XHUyNTY0XHUyNTY1XHUyNTU5XHUyNTU4XHUyNTUyXHUyNTUzXHUyNTZiXHUyNTZhXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUy''@;'; put 'put ''NTgwXHUwM2IxXHhkZlx1MDM5M1x1MDNjMFx1MDNhM1x1MDNjM1x4YjVcdTAzYzRcdTAzYTZcdTAzOThcdTAzYTlcdTAzYjRcdTIyMWVcdTAzYzZcdTAzYjVcdTIyMjlcdTIyNjFceGIxXHUyMjY1XHUyMjY0XHUyMzIwXHUyMzIxXHhmN1x1MjI0OFx4YjBcdTIyMTlceGI3XHUyMjFhXHUyMDdm''@;'; put 'put ''XHhiMlx1MjVhMFx4YTAiLEk9W10sXz17fSxnPTA7MjU2IT1nOysrZyk2NTUzMyE9PXkuY2hhckNvZGVBdChnKSYmKF9beS5jaGFyQXQoZyldPWcpLElbZ109eS5jaGFyQXQoZyk7cmV0dXJue2VuYzpfLGRlYzpJfX0oKSxYWzkzMl09ZnVuY3Rpb24oKXt2YXIgZyx5PVtdLEk9e30sXz1bXTtm''@;'; put 'put ''b3IoX1swXT0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdI''@;'; put 'put ''SUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmNjFcdWZmNjJcdWZmNjNcdWZmNjRcdWZmNjVcdWZmNjZcdWZmNjdcdWZmNjhcdWZmNjlcdWZmNmFcdWZmNmJcdWZmNmNc''@;'; put 'put ''dWZmNmRcdWZmNmVcdWZmNmZcdWZmNzBcdWZmNzFcdWZmNzJcdWZmNzNcdWZmNzRcdWZmNzVcdWZmNzZcdWZmNzdcdWZmNzhcdWZmNzlcdWZmN2FcdWZmN2JcdWZmN2NcdWZmN2RcdWZmN2VcdWZmN2ZcdWZmODBcdWZmODFcdWZmODJcdWZmODNcdWZmODRcdWZmODVcdWZmODZcdWZmODdcdWZm''@;'; put 'put ''ODhcdWZmODlcdWZmOGFcdWZmOGJcdWZmOGNcdWZmOGRcdWZmOGVcdWZmOGZcdWZmOTBcdWZmOTFcdWZmOTJcdWZmOTNcdWZmOTRcdWZmOTVcdWZmOTZcdWZmOTdcdWZmOThcdWZmOTlcdWZmOWFcdWZmOWJcdWZmOWNcdWZmOWRcdWZmOWVcdWZmOWZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1swXS5sZW5ndGg7KytnKTY1NTMzIT09X1swXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzBdW2ddXT0wK2cseVswK2ddPV9bMF1bZ10pO2ZvcihfWzEyOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1MzAwMFx1MzAwMVx1MzAwMlx1ZmYwY1x1ZmYwZVx1MzBmYlx1ZmYxYVx1ZmYxYlx1ZmYxZlx1ZmYwMVx1MzA5Ylx1MzA5Y1x4YjRcdWZmNDBceGE4XHVmZjNlXHVmZmUzXHVmZjNmXHUzMGZkXHUzMGZlXHUzMDlkXHUzMDllXHUzMDAzXHU0ZWRkXHUzMDA1XHUzMDA2XHUzMDA3XHUzMGZj''@;'; put 'put ''XHUyMDE1XHUyMDEwXHVmZjBmXHVmZjNjXHVmZjVlXHUyMjI1XHVmZjVjXHUyMDI2XHUyMDI1XHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHVmZjA4XHVmZjA5XHUzMDE0XHUzMDE1XHVmZjNiXHVmZjNkXHVmZjViXHVmZjVkXHUzMDA4XHUzMDA5XHUzMDBhXHUzMDBiXHUzMDBjXHUzMDBkXHUz''@;'; put 'put ''MDBlXHUzMDBmXHUzMDEwXHUzMDExXHVmZjBiXHVmZjBkXHhiMVx4ZDdcdWZmZmRceGY3XHVmZjFkXHUyMjYwXHVmZjFjXHVmZjFlXHUyMjY2XHUyMjY3XHUyMjFlXHUyMjM0XHUyNjQyXHUyNjQwXHhiMFx1MjAzMlx1MjAzM1x1MjEwM1x1ZmZlNVx1ZmYwNFx1ZmZlMFx1ZmZlMVx1ZmYwNVx1''@;'; put 'put ''ZmYwM1x1ZmYwNlx1ZmYwYVx1ZmYyMFx4YTdcdTI2MDZcdTI2MDVcdTI1Y2JcdTI1Y2ZcdTI1Y2VcdTI1YzdcdTI1YzZcdTI1YTFcdTI1YTBcdTI1YjNcdTI1YjJcdTI1YmRcdTI1YmNcdTIwM2JcdTMwMTJcdTIxOTJcdTIxOTBcdTIxOTFcdTIxOTNcdTMwMTNcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTIyMDhcdTIyMGJcdTIyODZcdTIyODdcdTIyODJcdTIyODNcdTIyMmFcdTIyMjlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTIyMjdcdTIyMjhcdWZmZTJcdTIx''@;'; put 'put ''ZDJcdTIxZDRcdTIyMDBcdTIyMDNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTIyMjBcdTIyYTVcdTIzMTJcdTIyMDJcdTIyMDdcdTIyNjFcdTIyNTJcdTIyNmFcdTIyNmJcdTIyMWFcdTIyM2RcdTIyMWRcdTIyMzVc''@;'; put 'put ''dTIyMmJcdTIyMmNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTIxMmJcdTIwMzBcdTI2NmZcdTI2NmRcdTI2NmFcdTIwMjBcdTIwMjFceGI2XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyNWVmXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2ch''@;'; put 'put ''PV9bMTI5XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxMjldW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTI5XVtnXV09MzMwMjQrZyx5WzMzMDI0K2ddPV9bMTI5XVtnXSk7Zm9yKF9bMTMwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZjEwXHVmZjExXHVmZjEyXHVmZjEzXHVmZjE0XHVmZjE1XHVmZjE2XHVmZjE3XHVmZjE4XHVmZjE5XHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZjIxXHVmZjIyXHVmZjIzXHVmZjI0XHVmZjI1XHVmZjI2XHVmZjI3XHVmZjI4XHVmZjI5XHVmZjJhXHVmZjJiXHVmZjJjXHVmZjJkXHVmZjJlXHVmZjJmXHVmZjMwXHVmZjMxXHVmZjMyXHVmZjMzXHVmZjM0XHVmZjM1XHVmZjM2XHVmZjM3XHVm''@;'; put 'put ''ZjM4XHVmZjM5XHVmZjNhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZjQxXHVmZjQyXHVmZjQzXHVmZjQ0XHVmZjQ1XHVmZjQ2XHVmZjQ3XHVmZjQ4XHVmZjQ5XHVmZjRhXHVmZjRiXHVmZjRjXHVmZjRkXHVmZjRlXHVmZjRmXHVmZjUwXHVmZjUxXHVmZjUy''@;'; put 'put ''XHVmZjUzXHVmZjU0XHVmZjU1XHVmZjU2XHVmZjU3XHVmZjU4XHVmZjU5XHVmZjVhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMDQxXHUzMDQyXHUzMDQzXHUzMDQ0XHUzMDQ1XHUzMDQ2XHUzMDQ3XHUzMDQ4XHUzMDQ5XHUzMDRhXHUzMDRiXHUzMDRjXHUzMDRkXHUzMDRlXHUzMDRmXHUz''@;'; put 'put ''MDUwXHUzMDUxXHUzMDUyXHUzMDUzXHUzMDU0XHUzMDU1XHUzMDU2XHUzMDU3XHUzMDU4XHUzMDU5XHUzMDVhXHUzMDViXHUzMDVjXHUzMDVkXHUzMDVlXHUzMDVmXHUzMDYwXHUzMDYxXHUzMDYyXHUzMDYzXHUzMDY0XHUzMDY1XHUzMDY2XHUzMDY3XHUzMDY4XHUzMDY5XHUzMDZhXHUzMDZi''@;'; put 'put ''XHUzMDZjXHUzMDZkXHUzMDZlXHUzMDZmXHUzMDcwXHUzMDcxXHUzMDcyXHUzMDczXHUzMDc0XHUzMDc1XHUzMDc2XHUzMDc3XHUzMDc4XHUzMDc5XHUzMDdhXHUzMDdiXHUzMDdjXHUzMDdkXHUzMDdlXHUzMDdmXHUzMDgwXHUzMDgxXHUzMDgyXHUzMDgzXHUzMDg0XHUzMDg1XHUzMDg2XHUz''@;'; put 'put ''MDg3XHUzMDg4XHUzMDg5XHUzMDhhXHUzMDhiXHUzMDhjXHUzMDhkXHUzMDhlXHUzMDhmXHUzMDkwXHUzMDkxXHUzMDkyXHUzMDkzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxp''@;'; put 'put ''dCgiIiksZz0wO2chPV9bMTMwXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxMzBdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTMwXVtnXV09MzMyODArZyx5WzMzMjgwK2ddPV9bMTMwXVtnXSk7Zm9yKF9bMTMxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHUzMGExXHUzMGEyXHUzMGEzXHUzMGE0XHUzMGE1XHUzMGE2XHUzMGE3XHUzMGE4XHUzMGE5XHUzMGFhXHUzMGFiXHUzMGFjXHUzMGFkXHUzMGFlXHUzMGFmXHUzMGIwXHUzMGIxXHUzMGIyXHUzMGIzXHUzMGI0XHUzMGI1XHUzMGI2XHUzMGI3XHUzMGI4XHUzMGI5XHUzMGJh''@;'; put 'put ''XHUzMGJiXHUzMGJjXHUzMGJkXHUzMGJlXHUzMGJmXHUzMGMwXHUzMGMxXHUzMGMyXHUzMGMzXHUzMGM0XHUzMGM1XHUzMGM2XHUzMGM3XHUzMGM4XHUzMGM5XHUzMGNhXHUzMGNiXHUzMGNjXHUzMGNkXHUzMGNlXHUzMGNmXHUzMGQwXHUzMGQxXHUzMGQyXHUzMGQzXHUzMGQ0XHUzMGQ1XHUz''@;'; put 'put ''MGQ2XHUzMGQ3XHUzMGQ4XHUzMGQ5XHUzMGRhXHUzMGRiXHUzMGRjXHUzMGRkXHUzMGRlXHUzMGRmXHVmZmZkXHUzMGUwXHUzMGUxXHUzMGUyXHUzMGUzXHUzMGU0XHUzMGU1XHUzMGU2XHUzMGU3XHUzMGU4XHUzMGU5XHUzMGVhXHUzMGViXHUzMGVjXHUzMGVkXHUzMGVlXHUzMGVmXHUzMGYw''@;'; put 'put ''XHUzMGYxXHUzMGYyXHUzMGYzXHUzMGY0XHUzMGY1XHUzMGY2XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwMzkxXHUwMzkyXHUwMzkzXHUwMzk0XHUwMzk1XHUwMzk2XHUwMzk3XHUwMzk4XHUwMzk5XHUwMzlhXHUwMzliXHUwMzljXHUwMzlkXHUw''@;'; put 'put ''MzllXHUwMzlmXHUwM2EwXHUwM2ExXHUwM2EzXHUwM2E0XHUwM2E1XHUwM2E2XHUwM2E3XHUwM2E4XHUwM2E5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwM2IxXHUwM2IyXHUwM2IzXHUwM2I0XHUwM2I1XHUwM2I2XHUwM2I3XHUwM2I4XHUwM2I5''@;'; put 'put ''XHUwM2JhXHUwM2JiXHUwM2JjXHUwM2JkXHUwM2JlXHUwM2JmXHUwM2MwXHUwM2MxXHUwM2MzXHUwM2M0XHUwM2M1XHUwM2M2XHUwM2M3XHUwM2M4XHUwM2M5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTMxXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxMzFdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTMxXVtnXV09MzM1MzYrZyx5WzMzNTM2K2ddPV9bMTMxXVtnXSk7Zm9yKF9bMTMyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwNDEwXHUwNDExXHUwNDEyXHUwNDEzXHUwNDE0XHUwNDE1XHUwNDAxXHUwNDE2XHUwNDE3XHUwNDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDI0XHUwNDI1XHUwNDI2''@;'; put 'put ''XHUwNDI3XHUwNDI4XHUwNDI5XHUwNDJhXHUwNDJiXHUwNDJjXHUwNDJkXHUwNDJlXHUwNDJmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwNDMwXHUwNDMxXHUwNDMyXHUw''@;'; put 'put ''NDMzXHUwNDM0XHUwNDM1XHUwNDUxXHUwNDM2XHUwNDM3XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNkXHVmZmZkXHUwNDNlXHUwNDNmXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDQ0XHUwNDQ1XHUwNDQ2XHUwNDQ3XHUwNDQ4XHUwNDQ5XHUwNDRhXHUwNDRiXHUwNDRj''@;'; put 'put ''XHUwNDRkXHUwNDRlXHUwNDRmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyNTAwXHUyNTAyXHUyNTBjXHUyNTEwXHUyNTE4XHUyNTE0XHUyNTFjXHUyNTJjXHUyNTI0XHUyNTM0XHUyNTNjXHUy''@;'; put 'put ''NTAxXHUyNTAzXHUyNTBmXHUyNTEzXHUyNTFiXHUyNTE3XHUyNTIzXHUyNTMzXHUyNTJiXHUyNTNiXHUyNTRiXHUyNTIwXHUyNTJmXHUyNTI4XHUyNTM3XHUyNTNmXHUyNTFkXHUyNTMwXHUyNTI1XHUyNTM4XHUyNTQyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTMyXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxMzJdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTMyXVtnXV09MzM3OTIrZyx5WzMzNzkyK2ddPV9bMTMyXVtnXSk7Zm9yKF9bMTM1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyNDYwXHUyNDYxXHUyNDYyXHUyNDYzXHUyNDY0XHUyNDY1XHUyNDY2XHUyNDY3XHUyNDY4XHUyNDY5XHUyNDZhXHUyNDZiXHUyNDZjXHUyNDZkXHUyNDZlXHUyNDZmXHUyNDcwXHUyNDcxXHUyNDcyXHUyNDczXHUyMTYwXHUyMTYx''@;'; put 'put ''XHUyMTYyXHUyMTYzXHUyMTY0XHUyMTY1XHUyMTY2XHUyMTY3XHUyMTY4XHUyMTY5XHVmZmZkXHUzMzQ5XHUzMzE0XHUzMzIyXHUzMzRkXHUzMzE4XHUzMzI3XHUzMzAzXHUzMzM2XHUzMzUxXHUzMzU3XHUzMzBkXHUzMzI2XHUzMzIzXHUzMzJiXHUzMzRhXHUzMzNiXHUzMzljXHUzMzlkXHUz''@;'; put 'put ''MzllXHUzMzhlXHUzMzhmXHUzM2M0XHUzM2ExXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMzdiXHVmZmZkXHUzMDFkXHUzMDFmXHUyMTE2XHUzM2NkXHUyMTIxXHUzMmE0XHUzMmE1XHUzMmE2XHUzMmE3XHUzMmE4XHUzMjMxXHUzMjMyXHUzMjM5''@;'; put 'put ''XHUzMzdlXHUzMzdkXHUzMzdjXHUyMjUyXHUyMjYxXHUyMjJiXHUyMjJlXHUyMjExXHUyMjFhXHUyMmE1XHUyMjIwXHUyMjFmXHUyMmJmXHUyMjM1XHUyMjI5XHUyMjJhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTM1XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxMzVdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTM1XVtnXV09MzQ1NjArZyx5WzM0NTYwK2ddPV9bMTM1XVtnXSk7Zm9yKF9bMTM2XT0iXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU0ZTljXHU1NTE2XHU1YTAzXHU5NjNmXHU1NGMwXHU2MTFiXHU2MzI4XHU1''@;'; put 'put ''OWY2XHU5MDIyXHU4NDc1XHU4MzFjXHU3YTUwXHU2MGFhXHU2M2UxXHU2ZTI1XHU2NWVkXHU4NDY2XHU4MmE2XHU5YmY1XHU2ODkzXHU1NzI3XHU2NWExXHU2MjcxXHU1YjliXHU1OWQwXHU4NjdiXHU5OGY0XHU3ZDYyXHU3ZGJlXHU5YjhlXHU2MjE2XHU3YzlmXHU4OGI3XHU1Yjg5XHU1ZWI1''@;'; put 'put ''XHU2MzA5XHU2Njk3XHU2ODQ4XHU5NWM3XHU5NzhkXHU2NzRmXHU0ZWU1XHU0ZjBhXHU0ZjRkXHU0ZjlkXHU1MDQ5XHU1NmYyXHU1OTM3XHU1OWQ0XHU1YTAxXHU1YzA5XHU2MGRmXHU2MTBmXHU2MTcwXHU2NjEzXHU2OTA1XHU3MGJhXHU3NTRmXHU3NTcwXHU3OWZiXHU3ZGFkXHU3ZGVmXHU4''@;'; put 'put ''MGMzXHU4NDBlXHU4ODYzXHU4YjAyXHU5MDU1XHU5MDdhXHU1MzNiXHU0ZTk1XHU0ZWE1XHU1N2RmXHU4MGIyXHU5MGMxXHU3OGVmXHU0ZTAwXHU1OGYxXHU2ZWEyXHU5MDM4XHU3YTMyXHU4MzI4XHU4MjhiXHU5YzJmXHU1MTQxXHU1MzcwXHU1NGJkXHU1NGUxXHU1NmUwXHU1OWZiXHU1ZjE1''@;'; put 'put ''XHU5OGYyXHU2ZGViXHU4MGU0XHU4NTJkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTM2XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxMzZdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTM2XVtnXV09MzQ4MTYrZyx5WzM0ODE2K2ddPV9bMTM2XVtnXSk7Zm9yKF9bMTM3''@;'; put 'put ''XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5NjYyXHU5NjcwXHU5NmEwXHU5N2ZiXHU1NDBiXHU1M2YzXHU1Yjg3XHU3MGNmXHU3ZmJkXHU4ZmMyXHU5NmU4XHU1MzZmXHU5ZDVjXHU3YWJhXHU0ZTExXHU3ODkzXHU4MWZjXHU2ZTI2''@;'; put 'put ''XHU1NjE4XHU1NTA0XHU2YjFkXHU4NTFhXHU5YzNiXHU1OWU1XHU1M2E5XHU2ZDY2XHU3NGRjXHU5NThmXHU1NjQyXHU0ZTkxXHU5MDRiXHU5NmYyXHU4MzRmXHU5OTBjXHU1M2UxXHU1NWI2XHU1YjMwXHU1ZjcxXHU2NjIwXHU2NmYzXHU2ODA0XHU2YzM4XHU2Y2YzXHU2ZDI5XHU3NDViXHU3''@;'; put 'put ''NmM4XHU3YTRlXHU5ODM0XHU4MmYxXHU4ODViXHU4YTYwXHU5MmVkXHU2ZGIyXHU3NWFiXHU3NmNhXHU5OWM1XHU2MGE2XHU4YjAxXHU4ZDhhXHU5NWIyXHU2OThlXHU1M2FkXHU1MTg2XHVmZmZkXHU1NzEyXHU1ODMwXHU1OTQ0XHU1YmI0XHU1ZWY2XHU2MDI4XHU2M2E5XHU2M2Y0XHU2Y2Jm''@;'; put 'put ''XHU2ZjE0XHU3MDhlXHU3MTE0XHU3MTU5XHU3MWQ1XHU3MzNmXHU3ZTAxXHU4Mjc2XHU4MmQxXHU4NTk3XHU5MDYwXHU5MjViXHU5ZDFiXHU1ODY5XHU2NWJjXHU2YzVhXHU3NTI1XHU1MWY5XHU1OTJlXHU1OTY1XHU1ZjgwXHU1ZmRjXHU2MmJjXHU2NWZhXHU2YTJhXHU2YjI3XHU2YmI0XHU3''@;'; put 'put ''MzhiXHU3ZmMxXHU4OTU2XHU5ZDJjXHU5ZDBlXHU5ZWM0XHU1Y2ExXHU2Yzk2XHU4MzdiXHU1MTA0XHU1YzRiXHU2MWI2XHU4MWM2XHU2ODc2XHU3MjYxXHU0ZTU5XHU0ZmZhXHU1Mzc4XHU2MDY5XHU2ZTI5XHU3YTRmXHU5N2YzXHU0ZTBiXHU1MzE2XHU0ZWVlXHU0ZjU1XHU0ZjNkXHU0ZmEx''@;'; put 'put ''XHU0ZjczXHU1MmEwXHU1M2VmXHU1NjA5XHU1OTBmXHU1YWMxXHU1YmI2XHU1YmUxXHU3OWQxXHU2Njg3XHU2NzljXHU2N2I2XHU2YjRjXHU2Y2IzXHU3MDZiXHU3M2MyXHU3OThkXHU3OWJlXHU3YTNjXHU3Yjg3XHU4MmIxXHU4MmRiXHU4MzA0XHU4Mzc3XHU4M2VmXHU4M2QzXHU4NzY2XHU4''@;'; put 'put ''YWIyXHU1NjI5XHU4Y2E4XHU4ZmU2XHU5MDRlXHU5NzFlXHU4NjhhXHU0ZmM0XHU1Y2U4XHU2MjExXHU3MjU5XHU3NTNiXHU4MWU1XHU4MmJkXHU4NmZlXHU4Y2MwXHU5NmM1XHU5OTEzXHU5OWQ1XHU0ZWNiXHU0ZjFhXHU4OWUzXHU1NmRlXHU1ODRhXHU1OGNhXHU1ZWZiXHU1ZmViXHU2MDJh''@;'; put 'put ''XHU2MDk0XHU2MDYyXHU2MWQwXHU2MjEyXHU2MmQwXHU2NTM5XHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTM3XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxMzddW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTM3XVtnXV09MzUwNzIrZyx5WzM1MDcyK2ddPV9bMTM3XVtn''@;'; put 'put ''XSk7Zm9yKF9bMTM4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5YjQxXHU2NjY2XHU2OGIwXHU2ZDc3XHU3MDcwXHU3NTRjXHU3Njg2XHU3ZDc1XHU4MmE1XHU4N2Y5XHU5NThiXHU5NjhlXHU4YzlkXHU1MWYxXHU1MmJlXHU1OTE2''@;'; put 'put ''XHU1NGIzXHU1YmIzXHU1ZDE2XHU2MTY4XHU2OTgyXHU2ZGFmXHU3ODhkXHU4NGNiXHU4ODU3XHU4YTcyXHU5M2E3XHU5YWI4XHU2ZDZjXHU5OWE4XHU4NmQ5XHU1N2EzXHU2N2ZmXHU4NmNlXHU5MjBlXHU1MjgzXHU1Njg3XHU1NDA0XHU1ZWQzXHU2MmUxXHU2NGI5XHU2ODNjXHU2ODM4XHU2''@;'; put 'put ''YmJiXHU3MzcyXHU3OGJhXHU3YTZiXHU4OTlhXHU4OWQyXHU4ZDZiXHU4ZjAzXHU5MGVkXHU5NWEzXHU5Njk0XHU5NzY5XHU1YjY2XHU1Y2IzXHU2OTdkXHU5ODRkXHU5ODRlXHU2MzliXHU3YjIwXHU2YTJiXHVmZmZkXHU2YTdmXHU2OGI2XHU5YzBkXHU2ZjVmXHU1MjcyXHU1NTlkXHU2MDcw''@;'; put 'put ''XHU2MmVjXHU2ZDNiXHU2ZTA3XHU2ZWQxXHU4NDViXHU4OTEwXHU4ZjQ0XHU0ZTE0XHU5YzM5XHU1M2Y2XHU2OTFiXHU2YTNhXHU5Nzg0XHU2ODJhXHU1MTVjXHU3YWMzXHU4NGIyXHU5MWRjXHU5MzhjXHU1NjViXHU5ZDI4XHU2ODIyXHU4MzA1XHU4NDMxXHU3Y2E1XHU1MjA4XHU4MmM1XHU3''@;'; put 'put ''NGU2XHU0ZTdlXHU0ZjgzXHU1MWEwXHU1YmQyXHU1MjBhXHU1MmQ4XHU1MmU3XHU1ZGZiXHU1NTlhXHU1ODJhXHU1OWU2XHU1YjhjXHU1Yjk4XHU1YmRiXHU1ZTcyXHU1ZTc5XHU2MGEzXHU2MTFmXHU2MTYzXHU2MWJlXHU2M2RiXHU2NTYyXHU2N2QxXHU2ODUzXHU2OGZhXHU2YjNlXHU2YjUz''@;'; put 'put ''XHU2YzU3XHU2ZjIyXHU2Zjk3XHU2ZjQ1XHU3NGIwXHU3NTE4XHU3NmUzXHU3NzBiXHU3YWZmXHU3YmExXHU3YzIxXHU3ZGU5XHU3ZjM2XHU3ZmYwXHU4MDlkXHU4MjY2XHU4MzllXHU4OWIzXHU4YWNjXHU4Y2FiXHU5MDg0XHU5NDUxXHU5NTkzXHU5NTkxXHU5NWEyXHU5NjY1XHU5N2QzXHU5''@;'; put 'put ''OTI4XHU4MjE4XHU0ZTM4XHU1NDJiXHU1Y2I4XHU1ZGNjXHU3M2E5XHU3NjRjXHU3NzNjXHU1Y2E5XHU3ZmViXHU4ZDBiXHU5NmMxXHU5ODExXHU5ODU0XHU5ODU4XHU0ZjAxXHU0ZjBlXHU1MzcxXHU1NTljXHU1NjY4XHU1N2ZhXHU1OTQ3XHU1YjA5XHU1YmM0XHU1YzkwXHU1ZTBjXHU1ZTdl''@;'; put 'put ''XHU1ZmNjXHU2M2VlXHU2NzNhXHU2NWQ3XHU2NWUyXHU2NzFmXHU2OGNiXHU2OGM0XHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTM4XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxMzhdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTM4XVtnXV09MzUzMjgrZyx5WzM1MzI4''@;'; put 'put ''K2ddPV9bMTM4XVtnXSk7Zm9yKF9bMTM5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2YTVmXHU1ZTMwXHU2YmM1XHU2YzE3XHU2YzdkXHU3NTdmXHU3OTQ4XHU1YjYzXHU3YTAwXHU3ZDAwXHU1ZmJkXHU4OThmXHU4YTE4XHU4Y2I0''@;'; put 'put ''XHU4ZDc3XHU4ZWNjXHU4ZjFkXHU5OGUyXHU5YTBlXHU5YjNjXHU0ZTgwXHU1MDdkXHU1MTAwXHU1OTkzXHU1YjljXHU2MjJmXHU2MjgwXHU2NGVjXHU2YjNhXHU3MmEwXHU3NTkxXHU3OTQ3XHU3ZmE5XHU4N2ZiXHU4YWJjXHU4YjcwXHU2M2FjXHU4M2NhXHU5N2EwXHU1NDA5XHU1NDAzXHU1''@;'; put 'put ''NWFiXHU2ODU0XHU2YTU4XHU4YTcwXHU3ODI3XHU2Nzc1XHU5ZWNkXHU1Mzc0XHU1YmEyXHU4MTFhXHU4NjUwXHU5MDA2XHU0ZTE4XHU0ZTQ1XHU0ZWM3XHU0ZjExXHU1M2NhXHU1NDM4XHU1YmFlXHU1ZjEzXHU2MDI1XHU2NTUxXHVmZmZkXHU2NzNkXHU2YzQyXHU2YzcyXHU2Y2UzXHU3MDc4''@;'; put 'put ''XHU3NDAzXHU3YTc2XHU3YWFlXHU3YjA4XHU3ZDFhXHU3Y2ZlXHU3ZDY2XHU2NWU3XHU3MjViXHU1M2JiXHU1YzQ1XHU1ZGU4XHU2MmQyXHU2MmUwXHU2MzE5XHU2ZTIwXHU4NjVhXHU4YTMxXHU4ZGRkXHU5MmY4XHU2ZjAxXHU3OWE2XHU5YjVhXHU0ZWE4XHU0ZWFiXHU0ZWFjXHU0ZjliXHU0''@;'; put 'put ''ZmEwXHU1MGQxXHU1MTQ3XHU3YWY2XHU1MTcxXHU1MWY2XHU1MzU0XHU1MzIxXHU1MzdmXHU1M2ViXHU1NWFjXHU1ODgzXHU1Y2UxXHU1ZjM3XHU1ZjRhXHU2MDJmXHU2MDUwXHU2MDZkXHU2MzFmXHU2NTU5XHU2YTRiXHU2Y2MxXHU3MmMyXHU3MmVkXHU3N2VmXHU4MGY4XHU4MTA1XHU4MjA4''@;'; put 'put ''XHU4NTRlXHU5MGY3XHU5M2UxXHU5N2ZmXHU5OTU3XHU5YTVhXHU0ZWYwXHU1MWRkXHU1YzJkXHU2NjgxXHU2OTZkXHU1YzQwXHU2NmYyXHU2OTc1XHU3Mzg5XHU2ODUwXHU3YzgxXHU1MGM1XHU1MmU0XHU1NzQ3XHU1ZGZlXHU5MzI2XHU2NWE0XHU2YjIzXHU2YjNkXHU3NDM0XHU3OTgxXHU3''@;'; put 'put ''OWJkXHU3YjRiXHU3ZGNhXHU4MmI5XHU4M2NjXHU4ODdmXHU4OTVmXHU4YjM5XHU4ZmQxXHU5MWQxXHU1NDFmXHU5MjgwXHU0ZTVkXHU1MDM2XHU1M2U1XHU1MzNhXHU3MmQ3XHU3Mzk2XHU3N2U5XHU4MmU2XHU4ZWFmXHU5OWM2XHU5OWM4XHU5OWQyXHU1MTc3XHU2MTFhXHU4NjVlXHU1NWIw''@;'; put 'put ''XHU3YTdhXHU1MDc2XHU1YmQzXHU5MDQ3XHU5Njg1XHU0ZTMyXHU2YWRiXHU5MWU3XHU1YzUxXHU1YzQ4XHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTM5XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxMzldW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTM5XVtnXV09MzU1''@;'; put 'put ''ODQrZyx5WzM1NTg0K2ddPV9bMTM5XVtnXSk7Zm9yKF9bMTQwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2Mzk4XHU3YTlmXHU2YzkzXHU5Nzc0XHU4ZjYxXHU3YWFhXHU3MThhXHU5Njg4XHU3YzgyXHU2ODE3XHU3ZTcwXHU2ODUx''@;'; put 'put ''XHU5MzZjXHU1MmYyXHU1NDFiXHU4NWFiXHU4YTEzXHU3ZmE0XHU4ZWNkXHU5MGUxXHU1MzY2XHU4ODg4XHU3OTQxXHU0ZmMyXHU1MGJlXHU1MjExXHU1MTQ0XHU1NTUzXHU1NzJkXHU3M2VhXHU1NzhiXHU1OTUxXHU1ZjYyXHU1Zjg0XHU2MDc1XHU2MTc2XHU2MTY3XHU2MWE5XHU2M2IyXHU2''@;'; put 'put ''NDNhXHU2NTZjXHU2NjZmXHU2ODQyXHU2ZTEzXHU3NTY2XHU3YTNkXHU3Y2ZiXHU3ZDRjXHU3ZDk5XHU3ZTRiXHU3ZjZiXHU4MzBlXHU4MzRhXHU4NmNkXHU4YTA4XHU4YTYzXHU4YjY2XHU4ZWZkXHU5ODFhXHU5ZDhmXHU4MmI4XHU4ZmNlXHU5YmU4XHVmZmZkXHU1Mjg3XHU2MjFmXHU2NDgz''@;'; put 'put ''XHU2ZmMwXHU5Njk5XHU2ODQxXHU1MDkxXHU2YjIwXHU2YzdhXHU2ZjU0XHU3YTc0XHU3ZDUwXHU4ODQwXHU4YTIzXHU2NzA4XHU0ZWY2XHU1MDM5XHU1MDI2XHU1MDY1XHU1MTdjXHU1MjM4XHU1MjYzXHU1NWE3XHU1NzBmXHU1ODA1XHU1YWNjXHU1ZWZhXHU2MWIyXHU2MWY4XHU2MmYzXHU2''@;'; put 'put ''MzcyXHU2OTFjXHU2YTI5XHU3MjdkXHU3MmFjXHU3MzJlXHU3ODE0XHU3ODZmXHU3ZDc5XHU3NzBjXHU4MGE5XHU4OThiXHU4YjE5XHU4Y2UyXHU4ZWQyXHU5MDYzXHU5Mzc1XHU5NjdhXHU5ODU1XHU5YTEzXHU5ZTc4XHU1MTQzXHU1MzlmXHU1M2IzXHU1ZTdiXHU1ZjI2XHU2ZTFiXHU2ZTkw''@;'; put 'put ''XHU3Mzg0XHU3M2ZlXHU3ZDQzXHU4MjM3XHU4YTAwXHU4YWZhXHU5NjUwXHU0ZTRlXHU1MDBiXHU1M2U0XHU1NDdjXHU1NmZhXHU1OWQxXHU1YjY0XHU1ZGYxXHU1ZWFiXHU1ZjI3XHU2MjM4XHU2NTQ1XHU2N2FmXHU2ZTU2XHU3MmQwXHU3Y2NhXHU4OGI0XHU4MGExXHU4MGUxXHU4M2YwXHU4''@;'; put 'put ''NjRlXHU4YTg3XHU4ZGU4XHU5MjM3XHU5NmM3XHU5ODY3XHU5ZjEzXHU0ZTk0XHU0ZTkyXHU0ZjBkXHU1MzQ4XHU1NDQ5XHU1NDNlXHU1YTJmXHU1ZjhjXHU1ZmExXHU2MDlmXHU2OGE3XHU2YThlXHU3NDVhXHU3ODgxXHU4YTllXHU4YWE0XHU4Yjc3XHU5MTkwXHU0ZTVlXHU5YmM5XHU0ZWE0''@;'; put 'put ''XHU0ZjdjXHU0ZmFmXHU1MDE5XHU1MDE2XHU1MTQ5XHU1MTZjXHU1MjlmXHU1MmI5XHU1MmZlXHU1MzlhXHU1M2UzXHU1NDExXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTQwXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNDBdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19b''@;'; put 'put ''MTQwXVtnXV09MzU4NDArZyx5WzM1ODQwK2ddPV9bMTQwXVtnXSk7Zm9yKF9bMTQxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NDBlXHU1NTg5XHU1NzUxXHU1N2EyXHU1OTdkXHU1YjU0XHU1YjVkXHU1YjhmXHU1ZGU1XHU1ZGU3''@;'; put 'put ''XHU1ZGY3XHU1ZTc4XHU1ZTgzXHU1ZTlhXHU1ZWI3XHU1ZjE4XHU2MDUyXHU2MTRjXHU2Mjk3XHU2MmQ4XHU2M2E3XHU2NTNiXHU2NjAyXHU2NjQzXHU2NmY0XHU2NzZkXHU2ODIxXHU2ODk3XHU2OWNiXHU2YzVmXHU2ZDJhXHU2ZDY5XHU2ZTJmXHU2ZTlkXHU3NTMyXHU3Njg3XHU3ODZjXHU3''@;'; put 'put ''YTNmXHU3Y2UwXHU3ZDA1XHU3ZDE4XHU3ZDVlXHU3ZGIxXHU4MDE1XHU4MDAzXHU4MGFmXHU4MGIxXHU4MTU0XHU4MThmXHU4MjJhXHU4MzUyXHU4ODRjXHU4ODYxXHU4YjFiXHU4Y2EyXHU4Y2ZjXHU5MGNhXHU5MTc1XHU5MjcxXHU3ODNmXHU5MmZjXHU5NWE0XHU5NjRkXHVmZmZkXHU5ODA1''@;'; put 'put ''XHU5OTk5XHU5YWQ4XHU5ZDNiXHU1MjViXHU1MmFiXHU1M2Y3XHU1NDA4XHU1OGQ1XHU2MmY3XHU2ZmUwXHU4YzZhXHU4ZjVmXHU5ZWI5XHU1MTRiXHU1MjNiXHU1NDRhXHU1NmZkXHU3YTQwXHU5MTc3XHU5ZDYwXHU5ZWQyXHU3MzQ0XHU2ZjA5XHU4MTcwXHU3NTExXHU1ZmZkXHU2MGRhXHU5''@;'; put 'put ''YWE4XHU3MmRiXHU4ZmJjXHU2YjY0XHU5ODAzXHU0ZWNhXHU1NmYwXHU1NzY0XHU1OGJlXHU1YTVhXHU2MDY4XHU2MWM3XHU2NjBmXHU2NjA2XHU2ODM5XHU2OGIxXHU2ZGY3XHU3NWQ1XHU3ZDNhXHU4MjZlXHU5YjQyXHU0ZTliXHU0ZjUwXHU1M2M5XHU1NTA2XHU1ZDZmXHU1ZGU2XHU1ZGVl''@;'; put 'put ''XHU2N2ZiXHU2Yzk5XHU3NDczXHU3ODAyXHU4YTUwXHU5Mzk2XHU4OGRmXHU1NzUwXHU1ZWE3XHU2MzJiXHU1MGI1XHU1MGFjXHU1MThkXHU2NzAwXHU1NGM5XHU1ODVlXHU1OWJiXHU1YmIwXHU1ZjY5XHU2MjRkXHU2M2ExXHU2ODNkXHU2YjczXHU2ZTA4XHU3MDdkXHU5MWM3XHU3MjgwXHU3''@;'; put 'put ''ODE1XHU3ODI2XHU3OTZkXHU2NThlXHU3ZDMwXHU4M2RjXHU4OGMxXHU4ZjA5XHU5NjliXHU1MjY0XHU1NzI4XHU2NzUwXHU3ZjZhXHU4Y2ExXHU1MWI0XHU1NzQyXHU5NjJhXHU1ODNhXHU2OThhXHU4MGI0XHU1NGIyXHU1ZDBlXHU1N2ZjXHU3ODk1XHU5ZGZhXHU0ZjVjXHU1MjRhXHU1NDhi''@;'; put 'put ''XHU2NDNlXHU2NjI4XHU2NzE0XHU2N2Y1XHU3YTg0XHU3YjU2XHU3ZDIyXHU5MzJmXHU2ODVjXHU5YmFkXHU3YjM5XHU1MzE5XHU1MThhXHU1MjM3XHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTQxXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNDFdW2ddLmNoYXJDb2Rl''@;'; put 'put ''QXQoMCkmJihJW19bMTQxXVtnXV09MzYwOTYrZyx5WzM2MDk2K2ddPV9bMTQxXVtnXSk7Zm9yKF9bMTQyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1YmRmXHU2MmY2XHU2NGFlXHU2NGU2XHU2NzJkXHU2YmJhXHU4NWE5XHU5NmQx''@;'; put 'put ''XHU3NjkwXHU5YmQ2XHU2MzRjXHU5MzA2XHU5YmFiXHU3NmJmXHU2NjUyXHU0ZTA5XHU1MDk4XHU1M2MyXHU1YzcxXHU2MGU4XHU2NDkyXHU2NTYzXHU2ODVmXHU3MWU2XHU3M2NhXHU3NTIzXHU3Yjk3XHU3ZTgyXHU4Njk1XHU4YjgzXHU4Y2RiXHU5MTc4XHU5OTEwXHU2NWFjXHU2NmFiXHU2''@;'; put 'put ''YjhiXHU0ZWQ1XHU0ZWQ0XHU0ZjNhXHU0ZjdmXHU1MjNhXHU1M2Y4XHU1M2YyXHU1NWUzXHU1NmRiXHU1OGViXHU1OWNiXHU1OWM5XHU1OWZmXHU1YjUwXHU1YzRkXHU1ZTAyXHU1ZTJiXHU1ZmQ3XHU2MDFkXHU2MzA3XHU2NTJmXHU1YjVjXHU2NWFmXHU2NWJkXHU2NWU4XHU2NzlkXHU2YjYy''@;'; put 'put ''XHVmZmZkXHU2YjdiXHU2YzBmXHU3MzQ1XHU3OTQ5XHU3OWMxXHU3Y2Y4XHU3ZDE5XHU3ZDJiXHU4MGEyXHU4MTAyXHU4MWYzXHU4OTk2XHU4YTVlXHU4YTY5XHU4YTY2XHU4YThjXHU4YWVlXHU4Y2M3XHU4Y2RjXHU5NmNjXHU5OGZjXHU2YjZmXHU0ZThiXHU0ZjNjXHU0ZjhkXHU1MTUwXHU1''@;'; put 'put ''YjU3XHU1YmZhXHU2MTQ4XHU2MzAxXHU2NjQyXHU2YjIxXHU2ZWNiXHU2Y2JiXHU3MjNlXHU3NGJkXHU3NWQ0XHU3OGMxXHU3OTNhXHU4MDBjXHU4MDMzXHU4MWVhXHU4NDk0XHU4ZjllXHU2YzUwXHU5ZTdmXHU1ZjBmXHU4YjU4XHU5ZDJiXHU3YWZhXHU4ZWY4XHU1YjhkXHU5NmViXHU0ZTAz''@;'; put 'put ''XHU1M2YxXHU1N2Y3XHU1OTMxXHU1YWM5XHU1YmE0XHU2MDg5XHU2ZTdmXHU2ZjA2XHU3NWJlXHU4Y2VhXHU1YjlmXHU4NTAwXHU3YmUwXHU1MDcyXHU2N2Y0XHU4MjlkXHU1YzYxXHU4NTRhXHU3ZTFlXHU4MjBlXHU1MTk5XHU1YzA0XHU2MzY4XHU4ZDY2XHU2NTljXHU3MTZlXHU3OTNlXHU3''@;'; put 'put ''ZDE3XHU4MDA1XHU4YjFkXHU4ZWNhXHU5MDZlXHU4NmM3XHU5MGFhXHU1MDFmXHU1MmZhXHU1YzNhXHU2NzUzXHU3MDdjXHU3MjM1XHU5MTRjXHU5MWM4XHU5MzJiXHU4MmU1XHU1YmMyXHU1ZjMxXHU2MGY5XHU0ZTNiXHU1M2Q2XHU1Yjg4XHU2MjRiXHU2NzMxXHU2YjhhXHU3MmU5XHU3M2Uw''@;'; put 'put ''XHU3YTJlXHU4MTZiXHU4ZGEzXHU5MTUyXHU5OTk2XHU1MTEyXHU1M2Q3XHU1NDZhXHU1YmZmXHU2Mzg4XHU2YTM5XHU3ZGFjXHU5NzAwXHU1NmRhXHU1M2NlXHU1NDY4XHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTQyXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNDJd''@;'; put 'put ''W2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTQyXVtnXV09MzYzNTIrZyx5WzM2MzUyK2ddPV9bMTQyXVtnXSk7Zm9yKF9bMTQzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1Yjk3XHU1YzMxXHU1ZGRlXHU0ZmVlXHU2MTAxXHU2MmZl''@;'; put 'put ''XHU2ZDMyXHU3OWMwXHU3OWNiXHU3ZDQyXHU3ZTRkXHU3ZmQyXHU4MWVkXHU4MjFmXHU4NDkwXHU4ODQ2XHU4OTcyXHU4YjkwXHU4ZTc0XHU4ZjJmXHU5MDMxXHU5MTRiXHU5MTZjXHU5NmM2XHU5MTljXHU0ZWMwXHU0ZjRmXHU1MTQ1XHU1MzQxXHU1ZjkzXHU2MjBlXHU2N2Q0XHU2YzQxXHU2''@;'; put 'put ''ZTBiXHU3MzYzXHU3ZTI2XHU5MWNkXHU5MjgzXHU1M2Q0XHU1OTE5XHU1YmJmXHU2ZGQxXHU3OTVkXHU3ZTJlXHU3YzliXHU1ODdlXHU3MTlmXHU1MWZhXHU4ODUzXHU4ZmYwXHU0ZmNhXHU1Y2ZiXHU2NjI1XHU3N2FjXHU3YWUzXHU4MjFjXHU5OWZmXHU1MWM2XHU1ZmFhXHU2NWVjXHU2OTZm''@;'; put 'put ''XHU2Yjg5XHU2ZGYzXHVmZmZkXHU2ZTk2XHU2ZjY0XHU3NmZlXHU3ZDE0XHU1ZGUxXHU5MDc1XHU5MTg3XHU5ODA2XHU1MWU2XHU1MjFkXHU2MjQwXHU2NjkxXHU2NmQ5XHU2ZTFhXHU1ZWI2XHU3ZGQyXHU3ZjcyXHU2NmY4XHU4NWFmXHU4NWY3XHU4YWY4XHU1MmE5XHU1M2Q5XHU1OTczXHU1''@;'; put 'put ''ZThmXHU1ZjkwXHU2MDU1XHU5MmU0XHU5NjY0XHU1MGI3XHU1MTFmXHU1MmRkXHU1MzIwXHU1MzQ3XHU1M2VjXHU1NGU4XHU1NTQ2XHU1NTMxXHU1NjE3XHU1OTY4XHU1OWJlXHU1YTNjXHU1YmI1XHU1YzA2XHU1YzBmXHU1YzExXHU1YzFhXHU1ZTg0XHU1ZThhXHU1ZWUwXHU1ZjcwXHU2Mjdm''@;'; put 'put ''XHU2Mjg0XHU2MmRiXHU2MzhjXHU2Mzc3XHU2NjA3XHU2NjBjXHU2NjJkXHU2Njc2XHU2NzdlXHU2OGEyXHU2YTFmXHU2YTM1XHU2Y2JjXHU2ZDg4XHU2ZTA5XHU2ZTU4XHU3MTNjXHU3MTI2XHU3MTY3XHU3NWM3XHU3NzAxXHU3ODVkXHU3OTAxXHU3OTY1XHU3OWYwXHU3YWUwXHU3YjExXHU3''@;'; put 'put ''Y2E3XHU3ZDM5XHU4MDk2XHU4M2Q2XHU4NDhiXHU4NTQ5XHU4ODVkXHU4OGYzXHU4YTFmXHU4YTNjXHU4YTU0XHU4YTczXHU4YzYxXHU4Y2RlXHU5MWE0XHU5MjY2XHU5MzdlXHU5NDE4XHU5NjljXHU5Nzk4XHU0ZTBhXHU0ZTA4XHU0ZTFlXHU0ZTU3XHU1MTk3XHU1MjcwXHU1N2NlXHU1ODM0''@;'; put 'put ''XHU1OGNjXHU1YjIyXHU1ZTM4XHU2MGM1XHU2NGZlXHU2NzYxXHU2NzU2XHU2ZDQ0XHU3MmI2XHU3NTczXHU3YTYzXHU4NGI4XHU4YjcyXHU5MWI4XHU5MzIwXHU1NjMxXHU1N2Y0XHU5OGZlXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTQzXS5sZW5ndGg7KytnKTY1''@;'; put 'put ''NTMzIT09X1sxNDNdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTQzXVtnXV09MzY2MDgrZyx5WzM2NjA4K2ddPV9bMTQzXVtnXSk7Zm9yKF9bMTQ0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2MmVkXHU2OTBkXHU2Yjk2XHU3MWVk''@;'; put 'put ''XHU3ZTU0XHU4MDc3XHU4MjcyXHU4OWU2XHU5OGRmXHU4NzU1XHU4ZmIxXHU1YzNiXHU0ZjM4XHU0ZmUxXHU0ZmI1XHU1NTA3XHU1YTIwXHU1YmRkXHU1YmU5XHU1ZmMzXHU2MTRlXHU2MzJmXHU2NWIwXHU2NjRiXHU2OGVlXHU2OTliXHU2ZDc4XHU2ZGYxXHU3NTMzXHU3NWI5XHU3NzFmXHU3''@;'; put 'put ''OTVlXHU3OWU2XHU3ZDMzXHU4MWUzXHU4MmFmXHU4NWFhXHU4OWFhXHU4YTNhXHU4ZWFiXHU4ZjliXHU5MDMyXHU5MWRkXHU5NzA3XHU0ZWJhXHU0ZWMxXHU1MjAzXHU1ODc1XHU1OGVjXHU1YzBiXHU3NTFhXHU1YzNkXHU4MTRlXHU4YTBhXHU4ZmM1XHU5NjYzXHU5NzZkXHU3YjI1XHU4YWNm''@;'; put 'put ''XHU5ODA4XHU5MTYyXHU1NmYzXHU1M2E4XHVmZmZkXHU5MDE3XHU1NDM5XHU1NzgyXHU1ZTI1XHU2M2E4XHU2YzM0XHU3MDhhXHU3NzYxXHU3YzhiXHU3ZmUwXHU4ODcwXHU5MDQyXHU5MTU0XHU5MzEwXHU5MzE4XHU5NjhmXHU3NDVlXHU5YWM0XHU1ZDA3XHU1ZDY5XHU2NTcwXHU2N2EyXHU4''@;'; put 'put ''ZGE4XHU5NmRiXHU2MzZlXHU2NzQ5XHU2OTE5XHU4M2M1XHU5ODE3XHU5NmMwXHU4OGZlXHU2Zjg0XHU2NDdhXHU1YmY4XHU0ZTE2XHU3MDJjXHU3NTVkXHU2NjJmXHU1MWM0XHU1MjM2XHU1MmUyXHU1OWQzXHU1ZjgxXHU2MDI3XHU2MjEwXHU2NTNmXHU2NTc0XHU2NjFmXHU2Njc0XHU2OGYy''@;'; put 'put ''XHU2ODE2XHU2YjYzXHU2ZTA1XHU3MjcyXHU3NTFmXHU3NmRiXHU3Y2JlXHU4MDU2XHU1OGYwXHU4OGZkXHU4OTdmXHU4YWEwXHU4YTkzXHU4YWNiXHU5MDFkXHU5MTkyXHU5NzUyXHU5NzU5XHU2NTg5XHU3YTBlXHU4MTA2XHU5NmJiXHU1ZTJkXHU2MGRjXHU2MjFhXHU2NWE1XHU2NjE0XHU2''@;'; put 'put ''NzkwXHU3N2YzXHU3YTRkXHU3YzRkXHU3ZTNlXHU4MTBhXHU4Y2FjXHU4ZDY0XHU4ZGUxXHU4ZTVmXHU3OGE5XHU1MjA3XHU2MmQ5XHU2M2E1XHU2NDQyXHU2Mjk4XHU4YTJkXHU3YTgzXHU3YmMwXHU4YWFjXHU5NmVhXHU3ZDc2XHU4MjBjXHU4NzQ5XHU0ZWQ5XHU1MTQ4XHU1MzQzXHU1MzYw''@;'; put 'put ''XHU1YmEzXHU1YzAyXHU1YzE2XHU1ZGRkXHU2MjI2XHU2MjQ3XHU2NGIwXHU2ODEzXHU2ODM0XHU2Y2M5XHU2ZDQ1XHU2ZDE3XHU2N2QzXHU2ZjVjXHU3MTRlXHU3MTdkXHU2NWNiXHU3YTdmXHU3YmFkXHU3ZGRhXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTQ0XS5s''@;'; put 'put ''ZW5ndGg7KytnKTY1NTMzIT09X1sxNDRdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTQ0XVtnXV09MzY4NjQrZyx5WzM2ODY0K2ddPV9bMTQ0XVtnXSk7Zm9yKF9bMTQ1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ZTRhXHU3ZmE4''@;'; put 'put ''XHU4MTdhXHU4MjFiXHU4MjM5XHU4NWE2XHU4YTZlXHU4Y2NlXHU4ZGY1XHU5MDc4XHU5MDc3XHU5MmFkXHU5MjkxXHU5NTgzXHU5YmFlXHU1MjRkXHU1NTg0XHU2ZjM4XHU3MTM2XHU1MTY4XHU3OTg1XHU3ZTU1XHU4MWIzXHU3Y2NlXHU1NjRjXHU1ODUxXHU1Y2E4XHU2M2FhXHU2NmZlXHU2''@;'; put 'put ''NmZkXHU2OTVhXHU3MmQ5XHU3NThmXHU3NThlXHU3OTBlXHU3OTU2XHU3OWRmXHU3Yzk3XHU3ZDIwXHU3ZDQ0XHU4NjA3XHU4YTM0XHU5NjNiXHU5MDYxXHU5ZjIwXHU1MGU3XHU1Mjc1XHU1M2NjXHU1M2UyXHU1MDA5XHU1NWFhXHU1OGVlXHU1OTRmXHU3MjNkXHU1YjhiXHU1YzY0XHU1MzFk''@;'; put 'put ''XHU2MGUzXHU2MGYzXHU2MzVjXHU2MzgzXHU2MzNmXHU2M2JiXHVmZmZkXHU2NGNkXHU2NWU5XHU2NmY5XHU1ZGUzXHU2OWNkXHU2OWZkXHU2ZjE1XHU3MWU1XHU0ZTg5XHU3NWU5XHU3NmY4XHU3YTkzXHU3Y2RmXHU3ZGNmXHU3ZDljXHU4MDYxXHU4MzQ5XHU4MzU4XHU4NDZjXHU4NGJjXHU4''@;'; put 'put ''NWZiXHU4OGM1XHU4ZDcwXHU5MDAxXHU5MDZkXHU5Mzk3XHU5NzFjXHU5YTEyXHU1MGNmXHU1ODk3XHU2MThlXHU4MWQzXHU4NTM1XHU4ZDA4XHU5MDIwXHU0ZmMzXHU1MDc0XHU1MjQ3XHU1MzczXHU2MDZmXHU2MzQ5XHU2NzVmXHU2ZTJjXHU4ZGIzXHU5MDFmXHU0ZmQ3XHU1YzVlXHU4Y2Nh''@;'; put 'put ''XHU2NWNmXHU3ZDlhXHU1MzUyXHU4ODk2XHU1MTc2XHU2M2MzXHU1YjU4XHU1YjZiXHU1YzBhXHU2NDBkXHU2NzUxXHU5MDVjXHU0ZWQ2XHU1OTFhXHU1OTJhXHU2YzcwXHU4YTUxXHU1NTNlXHU1ODE1XHU1OWE1XHU2MGYwXHU2MjUzXHU2N2MxXHU4MjM1XHU2OTU1XHU5NjQwXHU5OWM0XHU5''@;'; put 'put ''YTI4XHU0ZjUzXHU1ODA2XHU1YmZlXHU4MDEwXHU1Y2IxXHU1ZTJmXHU1Zjg1XHU2MDIwXHU2MTRiXHU2MjM0XHU2NmZmXHU2Y2YwXHU2ZWRlXHU4MGNlXHU4MTdmXHU4MmQ0XHU4ODhiXHU4Y2I4XHU5MDAwXHU5MDJlXHU5NjhhXHU5ZWRiXHU5YmRiXHU0ZWUzXHU1M2YwXHU1OTI3XHU3YjJj''@;'; put 'put ''XHU5MThkXHU5ODRjXHU5ZGY5XHU2ZWRkXHU3MDI3XHU1MzUzXHU1NTQ0XHU1Yjg1XHU2MjU4XHU2MjllXHU2MmQzXHU2Y2EyXHU2ZmVmXHU3NDIyXHU4YTE3XHU5NDM4XHU2ZmMxXHU4YWZlXHU4MzM4XHU1MWU3XHU4NmY4XHU1M2VhXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0w''@;'; put 'put ''O2chPV9bMTQ1XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNDVdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTQ1XVtnXV09MzcxMjArZyx5WzM3MTIwK2ddPV9bMTQ1XVtnXSk7Zm9yKF9bMTQ2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHU1M2U5XHU0ZjQ2XHU5MDU0XHU4ZmIwXHU1OTZhXHU4MTMxXHU1ZGZkXHU3YWVhXHU4ZmJmXHU2OGRhXHU4YzM3XHU3MmY4XHU5YzQ4XHU2YTNkXHU4YWIwXHU0ZTM5XHU1MzU4XHU1NjA2XHU1NzY2XHU2MmM1XHU2M2EyXHU2NWU2XHU2YjRlXHU2ZGUxXHU2ZTViXHU3MGFkXHU3N2VkXHU3''@;'; put 'put ''YWVmXHU3YmFhXHU3ZGJiXHU4MDNkXHU4MGM2XHU4NmNiXHU4YTk1XHU5MzViXHU1NmUzXHU1OGM3XHU1ZjNlXHU2NWFkXHU2Njk2XHU2YTgwXHU2YmI1XHU3NTM3XHU4YWM3XHU1MDI0XHU3N2U1XHU1NzMwXHU1ZjFiXHU2MDY1XHU2NjdhXHU2YzYwXHU3NWY0XHU3YTFhXHU3ZjZlXHU4MWY0''@;'; put 'put ''XHU4NzE4XHU5MDQ1XHU5OWIzXHU3YmM5XHU3NTVjXHU3YWY5XHU3YjUxXHU4NGM0XHVmZmZkXHU5MDEwXHU3OWU5XHU3YTkyXHU4MzM2XHU1YWUxXHU3NzQwXHU0ZTJkXHU0ZWYyXHU1Yjk5XHU1ZmUwXHU2MmJkXHU2NjNjXHU2N2YxXHU2Y2U4XHU4NjZiXHU4ODc3XHU4YTNiXHU5MTRlXHU5''@;'; put 'put ''MmYzXHU5OWQwXHU2YTE3XHU3MDI2XHU3MzJhXHU4MmU3XHU4NDU3XHU4Y2FmXHU0ZTAxXHU1MTQ2XHU1MWNiXHU1NThiXHU1YmY1XHU1ZTE2XHU1ZTMzXHU1ZTgxXHU1ZjE0XHU1ZjM1XHU1ZjZiXHU1ZmI0XHU2MWYyXHU2MzExXHU2NmEyXHU2NzFkXHU2ZjZlXHU3MjUyXHU3NTNhXHU3NzNh''@;'; put 'put ''XHU4MDc0XHU4MTM5XHU4MTc4XHU4Nzc2XHU4YWJmXHU4YWRjXHU4ZDg1XHU4ZGYzXHU5MjlhXHU5NTc3XHU5ODAyXHU5Y2U1XHU1MmM1XHU2MzU3XHU3NmY0XHU2NzE1XHU2Yzg4XHU3M2NkXHU4Y2MzXHU5M2FlXHU5NjczXHU2ZDI1XHU1ODljXHU2OTBlXHU2OWNjXHU4ZmZkXHU5MzlhXHU3''@;'; put 'put ''NWRiXHU5MDFhXHU1ODVhXHU2ODAyXHU2M2I0XHU2OWZiXHU0ZjQzXHU2ZjJjXHU2N2Q4XHU4ZmJiXHU4NTI2XHU3ZGI0XHU5MzU0XHU2OTNmXHU2ZjcwXHU1NzZhXHU1OGY3XHU1YjJjXHU3ZDJjXHU3MjJhXHU1NDBhXHU5MWUzXHU5ZGI0XHU0ZWFkXHU0ZjRlXHU1MDVjXHU1MDc1XHU1MjQz''@;'; put 'put ''XHU4YzllXHU1NDQ4XHU1ODI0XHU1YjlhXHU1ZTFkXHU1ZTk1XHU1ZWFkXHU1ZWY3XHU1ZjFmXHU2MDhjXHU2MmI1XHU2MzNhXHU2M2QwXHU2OGFmXHU2YzQwXHU3ODg3XHU3OThlXHU3YTBiXHU3ZGUwXHU4MjQ3XHU4YTAyXHU4YWU2XHU4ZTQ0XHU5MDEzXHVmZmZkXHVmZmZkXHVmZmZkIi5z''@;'; put 'put ''cGxpdCgiIiksZz0wO2chPV9bMTQ2XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNDZdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTQ2XVtnXV09MzczNzYrZyx5WzM3Mzc2K2ddPV9bMTQ2XVtnXSk7Zm9yKF9bMTQ3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHU5MGI4XHU5MTJkXHU5MWQ4XHU5ZjBlXHU2Y2U1XHU2NDU4XHU2NGUyXHU2NTc1XHU2ZWY0XHU3Njg0XHU3YjFiXHU5MDY5XHU5M2QxXHU2ZWJhXHU1NGYyXHU1ZmI5XHU2NGE0XHU4ZjRkXHU4ZmVkXHU5MjQ0XHU1MTc4XHU1ODZiXHU1OTI5XHU1YzU1XHU1ZTk3XHU2''@;'; put 'put ''ZGZiXHU3ZThmXHU3NTFjXHU4Y2JjXHU4ZWUyXHU5ODViXHU3MGI5XHU0ZjFkXHU2YmJmXHU2ZmIxXHU3NTMwXHU5NmZiXHU1MTRlXHU1NDEwXHU1ODM1XHU1ODU3XHU1OWFjXHU1YzYwXHU1ZjkyXHU2NTk3XHU2NzVjXHU2ZTIxXHU3NjdiXHU4M2RmXHU4Y2VkXHU5MDE0XHU5MGZkXHU5MzRk''@;'; put 'put ''XHU3ODI1XHU3ODNhXHU1MmFhXHU1ZWE2XHU1NzFmXHU1OTc0XHU2MDEyXHU1MDEyXHU1MTVhXHU1MWFjXHVmZmZkXHU1MWNkXHU1MjAwXHU1NTEwXHU1ODU0XHU1ODU4XHU1OTU3XHU1Yjk1XHU1Y2Y2XHU1ZDhiXHU2MGJjXHU2Mjk1XHU2NDJkXHU2NzcxXHU2ODQzXHU2OGJjXHU2OGRmXHU3''@;'; put 'put ''NmQ3XHU2ZGQ4XHU2ZTZmXHU2ZDliXHU3MDZmXHU3MWM4XHU1ZjUzXHU3NWQ4XHU3OTc3XHU3YjQ5XHU3YjU0XHU3YjUyXHU3Y2Q2XHU3ZDcxXHU1MjMwXHU4NDYzXHU4NTY5XHU4NWU0XHU4YTBlXHU4YjA0XHU4YzQ2XHU4ZTBmXHU5MDAzXHU5MDBmXHU5NDE5XHU5Njc2XHU5ODJkXHU5YTMw''@;'; put 'put ''XHU5NWQ4XHU1MGNkXHU1MmQ1XHU1NDBjXHU1ODAyXHU1YzBlXHU2MWE3XHU2NDllXHU2ZDFlXHU3N2IzXHU3YWU1XHU4MGY0XHU4NDA0XHU5MDUzXHU5Mjg1XHU1Y2UwXHU5ZDA3XHU1MzNmXHU1Zjk3XHU1ZmIzXHU2ZDljXHU3Mjc5XHU3NzYzXHU3OWJmXHU3YmU0XHU2YmQyXHU3MmVjXHU4''@;'; put 'put ''YWFkXHU2ODAzXHU2YTYxXHU1MWY4XHU3YTgxXHU2OTM0XHU1YzRhXHU5Y2Y2XHU4MmViXHU1YmM1XHU5MTQ5XHU3MDFlXHU1Njc4XHU1YzZmXHU2MGM3XHU2NTY2XHU2YzhjXHU4YzVhXHU5MDQxXHU5ODEzXHU1NDUxXHU2NmM3XHU5MjBkXHU1OTQ4XHU5MGEzXHU1MTg1XHU0ZTRkXHU1MWVh''@;'; put 'put ''XHU4NTk5XHU4YjBlXHU3MDU4XHU2MzdhXHU5MzRiXHU2OTYyXHU5OWI0XHU3ZTA0XHU3NTc3XHU1MzU3XHU2OTYwXHU4ZWRmXHU5NmUzXHU2YzVkXHU0ZThjXHU1YzNjXHU1ZjEwXHU4ZmU5XHU1MzAyXHU4Y2QxXHU4MDg5XHU4Njc5XHU1ZWZmXHU2NWU1XHU0ZTczXHU1MTY1XHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTQ3XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNDddW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTQ3XVtnXV09Mzc2MzIrZyx5WzM3NjMyK2ddPV9bMTQ3XVtnXSk7Zm9yKF9bMTQ4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1OTgyXHU1YzNmXHU5N2VlXHU0ZWZiXHU1OThhXHU1ZmNkXHU4YThkXHU2ZmUxXHU3OWIwXHU3OTYyXHU1YmU3XHU4NDcxXHU3MzJiXHU3MWIxXHU1ZTc0XHU1ZmY1XHU2MzdiXHU2NDlhXHU3MWMzXHU3Yzk4XHU0ZTQzXHU1ZWZjXHU0ZTRiXHU1''@;'; put 'put ''N2RjXHU1NmEyXHU2MGE5XHU2ZmMzXHU3ZDBkXHU4MGZkXHU4MTMzXHU4MWJmXHU4ZmIyXHU4OTk3XHU4NmE0XHU1ZGY0XHU2MjhhXHU2NGFkXHU4OTg3XHU2Nzc3XHU2Y2UyXHU2ZDNlXHU3NDM2XHU3ODM0XHU1YTQ2XHU3Zjc1XHU4MmFkXHU5OWFjXHU0ZmYzXHU1ZWMzXHU2MmRkXHU2Mzky''@;'; put 'put ''XHU2NTU3XHU2NzZmXHU3NmMzXHU3MjRjXHU4MGNjXHU4MGJhXHU4ZjI5XHU5MTRkXHU1MDBkXHU1N2Y5XHU1YTkyXHU2ODg1XHVmZmZkXHU2OTczXHU3MTY0XHU3MmZkXHU4Y2I3XHU1OGYyXHU4Y2UwXHU5NjZhXHU5MDE5XHU4NzdmXHU3OWU0XHU3N2U3XHU4NDI5XHU0ZjJmXHU1MjY1XHU1''@;'; put 'put ''MzVhXHU2MmNkXHU2N2NmXHU2Y2NhXHU3NjdkXHU3Yjk0XHU3Yzk1XHU4MjM2XHU4NTg0XHU4ZmViXHU2NmRkXHU2ZjIwXHU3MjA2XHU3ZTFiXHU4M2FiXHU5OWMxXHU5ZWE2XHU1MWZkXHU3YmIxXHU3ODcyXHU3YmI4XHU4MDg3XHU3YjQ4XHU2YWU4XHU1ZTYxXHU4MDhjXHU3NTUxXHU3NTYw''@;'; put 'put ''XHU1MTZiXHU5MjYyXHU2ZThjXHU3NjdhXHU5MTk3XHU5YWVhXHU0ZjEwXHU3ZjcwXHU2MjljXHU3YjRmXHU5NWE1XHU5Y2U5XHU1NjdhXHU1ODU5XHU4NmU0XHU5NmJjXHU0ZjM0XHU1MjI0XHU1MzRhXHU1M2NkXHU1M2RiXHU1ZTA2XHU2NDJjXHU2NTkxXHU2NzdmXHU2YzNlXHU2YzRlXHU3''@;'; put 'put ''MjQ4XHU3MmFmXHU3M2VkXHU3NTU0XHU3ZTQxXHU4MjJjXHU4NWU5XHU4Y2E5XHU3YmM0XHU5MWM2XHU3MTY5XHU5ODEyXHU5OGVmXHU2MzNkXHU2NjY5XHU3NTZhXHU3NmU0XHU3OGQwXHU4NTQzXHU4NmVlXHU1MzJhXHU1MzUxXHU1NDI2XHU1OTgzXHU1ZTg3XHU1ZjdjXHU2MGIyXHU2MjQ5''@;'; put 'put ''XHU2Mjc5XHU2MmFiXHU2NTkwXHU2YmQ0XHU2Y2NjXHU3NWIyXHU3NmFlXHU3ODkxXHU3OWQ4XHU3ZGNiXHU3Zjc3XHU4MGE1XHU4OGFiXHU4YWI5XHU4Y2JiXHU5MDdmXHU5NzVlXHU5OGRiXHU2YTBiXHU3YzM4XHU1MDk5XHU1YzNlXHU1ZmFlXHU2Nzg3XHU2YmQ4XHU3NDM1XHU3NzA5XHU3''@;'; put 'put ''ZjhlXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTQ4XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNDhdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTQ4XVtnXV09Mzc4ODgrZyx5WzM3ODg4K2ddPV9bMTQ4XVtnXSk7Zm9yKF9bMTQ5XT0iXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5ZjNiXHU2N2NhXHU3YTE3XHU1MzM5XHU3NThiXHU5YWVkXHU1ZjY2XHU4MTlkXHU4M2YxXHU4MDk4XHU1ZjNjXHU1ZmM1XHU3NTYyXHU3YjQ2XHU5MDNjXHU2ODY3XHU1OWViXHU1YTliXHU3ZDEwXHU3NjdlXHU4YjJjXHU0''@;'; put 'put ''ZmY1XHU1ZjZhXHU2YTE5XHU2YzM3XHU2ZjAyXHU3NGUyXHU3OTY4XHU4ODY4XHU4YTU1XHU4Yzc5XHU1ZWRmXHU2M2NmXHU3NWM1XHU3OWQyXHU4MmQ3XHU5MzI4XHU5MmYyXHU4NDljXHU4NmVkXHU5YzJkXHU1NGMxXHU1ZjZjXHU2NThjXHU2ZDVjXHU3MDE1XHU4Y2E3XHU4Y2QzXHU5ODNi''@;'; put 'put ''XHU2NTRmXHU3NGY2XHU0ZTBkXHU0ZWQ4XHU1N2UwXHU1OTJiXHU1YTY2XHU1YmNjXHU1MWE4XHU1ZTAzXHU1ZTljXHU2MDE2XHU2Mjc2XHU2NTc3XHVmZmZkXHU2NWE3XHU2NjZlXHU2ZDZlXHU3MjM2XHU3YjI2XHU4MTUwXHU4MTlhXHU4Mjk5XHU4YjVjXHU4Y2EwXHU4Y2U2XHU4ZDc0XHU5''@;'; put 'put ''NjFjXHU5NjQ0XHU0ZmFlXHU2NGFiXHU2YjY2XHU4MjFlXHU4NDYxXHU4NTZhXHU5MGU4XHU1YzAxXHU2OTUzXHU5OGE4XHU4NDdhXHU4NTU3XHU0ZjBmXHU1MjZmXHU1ZmE5XHU1ZTQ1XHU2NzBkXHU3OThmXHU4MTc5XHU4OTA3XHU4OTg2XHU2ZGY1XHU1ZjE3XHU2MjU1XHU2Y2I4XHU0ZWNm''@;'; put 'put ''XHU3MjY5XHU5YjkyXHU1MjA2XHU1NDNiXHU1Njc0XHU1OGIzXHU2MWE0XHU2MjZlXHU3MTFhXHU1OTZlXHU3Yzg5XHU3Y2RlXHU3ZDFiXHU5NmYwXHU2NTg3XHU4MDVlXHU0ZTE5XHU0Zjc1XHU1MTc1XHU1ODQwXHU1ZTYzXHU1ZTczXHU1ZjBhXHU2N2M0XHU0ZTI2XHU4NTNkXHU5NTg5XHU5''@;'; put 'put ''NjViXHU3YzczXHU5ODAxXHU1MGZiXHU1OGMxXHU3NjU2XHU3OGE3XHU1MjI1XHU3N2E1XHU4NTExXHU3Yjg2XHU1MDRmXHU1OTA5XHU3MjQ3XHU3YmM3XHU3ZGU4XHU4ZmJhXHU4ZmQ0XHU5MDRkXHU0ZmJmXHU1MmM5XHU1YTI5XHU1ZjAxXHU5N2FkXHU0ZmRkXHU4MjE3XHU5MmVhXHU1NzAz''@;'; put 'put ''XHU2MzU1XHU2YjY5XHU3NTJiXHU4OGRjXHU4ZjE0XHU3YTQyXHU1MmRmXHU1ODkzXHU2MTU1XHU2MjBhXHU2NmFlXHU2YmNkXHU3YzNmXHU4M2U5XHU1MDIzXHU0ZmY4XHU1MzA1XHU1NDQ2XHU1ODMxXHU1OTQ5XHU1YjlkXHU1Y2YwXHU1Y2VmXHU1ZDI5XHU1ZTk2XHU2MmIxXHU2MzY3XHU2''@;'; put 'put ''NTNlXHU2NWI5XHU2NzBiXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTQ5XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNDldW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTQ5XVtnXV09MzgxNDQrZyx5WzM4MTQ0K2ddPV9bMTQ5XVtnXSk7Zm9yKF9bMTUwXT0iXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2Y2Q1XHU2Y2UxXHU3MGY5XHU3ODMyXHU3ZTJiXHU4MGRlXHU4MmIzXHU4NDBjXHU4NGVjXHU4NzAyXHU4OTEyXHU4YTJhXHU4YzRhXHU5MGE2XHU5MmQyXHU5OGZkXHU5Y2YzXHU5ZDZjXHU0ZTRmXHU0''@;'; put 'put ''ZWExXHU1MDhkXHU1MjU2XHU1NzRhXHU1OWE4XHU1ZTNkXHU1ZmQ4XHU1ZmQ5XHU2MjNmXHU2NmI0XHU2NzFiXHU2N2QwXHU2OGQyXHU1MTkyXHU3ZDIxXHU4MGFhXHU4MWE4XHU4YjAwXHU4YzhjXHU4Y2JmXHU5MjdlXHU5NjMyXHU1NDIwXHU5ODJjXHU1MzE3XHU1MGQ1XHU1MzVjXHU1OGE4''@;'; put 'put ''XHU2NGIyXHU2NzM0XHU3MjY3XHU3NzY2XHU3YTQ2XHU5MWU2XHU1MmMzXHU2Y2ExXHU2Yjg2XHU1ODAwXHU1ZTRjXHU1OTU0XHU2NzJjXHU3ZmZiXHU1MWUxXHU3NmM2XHVmZmZkXHU2NDY5XHU3OGU4XHU5YjU0XHU5ZWJiXHU1N2NiXHU1OWI5XHU2NjI3XHU2NzlhXHU2YmNlXHU1NGU5XHU2''@;'; put 'put ''OWQ5XHU1ZTU1XHU4MTljXHU2Nzk1XHU5YmFhXHU2N2ZlXHU5YzUyXHU2ODVkXHU0ZWE2XHU0ZmUzXHU1M2M4XHU2MmI5XHU2NzJiXHU2Y2FiXHU4ZmM0XHU0ZmFkXHU3ZTZkXHU5ZWJmXHU0ZTA3XHU2MTYyXHU2ZTgwXHU2ZjJiXHU4NTEzXHU1NDczXHU2NzJhXHU5YjQ1XHU1ZGYzXHU3Yjk1''@;'; put 'put ''XHU1Y2FjXHU1YmM2XHU4NzFjXHU2ZTRhXHU4NGQxXHU3YTE0XHU4MTA4XHU1OTk5XHU3YzhkXHU2YzExXHU3NzIwXHU1MmQ5XHU1OTIyXHU3MTIxXHU3MjVmXHU3N2RiXHU5NzI3XHU5ZDYxXHU2OTBiXHU1YTdmXHU1YTE4XHU1MWE1XHU1NDBkXHU1NDdkXHU2NjBlXHU3NmRmXHU4ZmY3XHU5''@;'; put 'put ''Mjk4XHU5Y2Y0XHU1OWVhXHU3MjVkXHU2ZWM1XHU1MTRkXHU2OGM5XHU3ZGJmXHU3ZGVjXHU5NzYyXHU5ZWJhXHU2NDc4XHU2YTIxXHU4MzAyXHU1OTg0XHU1YjVmXHU2YmRiXHU3MzFiXHU3NmYyXHU3ZGIyXHU4MDE3XHU4NDk5XHU1MTMyXHU2NzI4XHU5ZWQ5XHU3NmVlXHU2NzYyXHU1MmZm''@;'; put 'put ''XHU5OTA1XHU1YzI0XHU2MjNiXHU3YzdlXHU4Y2IwXHU1NTRmXHU2MGI2XHU3ZDBiXHU5NTgwXHU1MzAxXHU0ZTVmXHU1MWI2XHU1OTFjXHU3MjNhXHU4MDM2XHU5MWNlXHU1ZjI1XHU3N2UyXHU1Mzg0XHU1Zjc5XHU3ZDA0XHU4NWFjXHU4YTMzXHU4ZThkXHU5NzU2XHU2N2YzXHU4NWFlXHU5''@;'; put 'put ''NDUzXHU2MTA5XHU2MTA4XHU2Y2I5XHU3NjUyXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTUwXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNTBdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTUwXVtnXV09Mzg0MDArZyx5WzM4NDAwK2ddPV9bMTUwXVtnXSk7Zm9yKF9b''@;'; put 'put ''MTUxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4YWVkXHU4ZjM4XHU1NTJmXHU0ZjUxXHU1MTJhXHU1MmM3XHU1M2NiXHU1YmE1XHU1ZTdkXHU2MGEwXHU2MTgyXHU2M2Q2XHU2NzA5XHU2N2RhXHU2ZTY3XHU2ZDhjXHU3MzM2XHU3''@;'; put 'put ''MzM3XHU3NTMxXHU3OTUwXHU4OGQ1XHU4YTk4XHU5MDRhXHU5MDkxXHU5MGY1XHU5NmM0XHU4NzhkXHU1OTE1XHU0ZTg4XHU0ZjU5XHU0ZTBlXHU4YTg5XHU4ZjNmXHU5ODEwXHU1MGFkXHU1ZTdjXHU1OTk2XHU1YmI5XHU1ZWI4XHU2M2RhXHU2M2ZhXHU2NGMxXHU2NmRjXHU2OTRhXHU2OWQ4''@;'; put 'put ''XHU2ZDBiXHU2ZWI2XHU3MTk0XHU3NTI4XHU3YWFmXHU3ZjhhXHU4MDAwXHU4NDQ5XHU4NGM5XHU4OTgxXHU4YjIxXHU4ZTBhXHU5MDY1XHU5NjdkXHU5OTBhXHU2MTdlXHU2MjkxXHU2YjMyXHVmZmZkXHU2YzgzXHU2ZDc0XHU3ZmNjXHU3ZmZjXHU2ZGMwXHU3Zjg1XHU4N2JhXHU4OGY4XHU2''@;'; put 'put ''NzY1XHU4M2IxXHU5ODNjXHU5NmY3XHU2ZDFiXHU3ZDYxXHU4NDNkXHU5MTZhXHU0ZTcxXHU1Mzc1XHU1ZDUwXHU2YjA0XHU2ZmViXHU4NWNkXHU4NjJkXHU4OWE3XHU1MjI5XHU1NDBmXHU1YzY1XHU2NzRlXHU2OGE4XHU3NDA2XHU3NDgzXHU3NWUyXHU4OGNmXHU4OGUxXHU5MWNjXHU5NmUy''@;'; put 'put ''XHU5Njc4XHU1ZjhiXHU3Mzg3XHU3YWNiXHU4NDRlXHU2M2EwXHU3NTY1XHU1Mjg5XHU2ZDQxXHU2ZTljXHU3NDA5XHU3NTU5XHU3ODZiXHU3YzkyXHU5Njg2XHU3YWRjXHU5ZjhkXHU0ZmI2XHU2MTZlXHU2NWM1XHU4NjVjXHU0ZTg2XHU0ZWFlXHU1MGRhXHU0ZTIxXHU1MWNjXHU1YmVlXHU2''@;'; put 'put ''NTk5XHU2ODgxXHU2ZGJjXHU3MzFmXHU3NjQyXHU3N2FkXHU3YTFjXHU3Y2U3XHU4MjZmXHU4YWQyXHU5MDdjXHU5MWNmXHU5Njc1XHU5ODE4XHU1MjliXHU3ZGQxXHU1MDJiXHU1Mzk4XHU2Nzk3XHU2ZGNiXHU3MWQwXHU3NDMzXHU4MWU4XHU4ZjJhXHU5NmEzXHU5YzU3XHU5ZTlmXHU3NDYw''@;'; put 'put ''XHU1ODQxXHU2ZDk5XHU3ZDJmXHU5ODVlXHU0ZWU0XHU0ZjM2XHU0ZjhiXHU1MWI3XHU1MmIxXHU1ZGJhXHU2MDFjXHU3M2IyXHU3OTNjXHU4MmQzXHU5MjM0XHU5NmI3XHU5NmY2XHU5NzBhXHU5ZTk3XHU5ZjYyXHU2NmE2XHU2Yjc0XHU1MjE3XHU1MmEzXHU3MGM4XHU4OGMyXHU1ZWM5XHU2''@;'; put 'put ''MDRiXHU2MTkwXHU2ZjIzXHU3MTQ5XHU3YzNlXHU3ZGY0XHU4MDZmXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTUxXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNTFdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTUxXVtnXV09Mzg2NTYrZyx5WzM4NjU2K2ddPV9bMTUx''@;'; put 'put ''XVtnXSk7Zm9yKF9bMTUyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4NGVlXHU5MDIzXHU5MzJjXHU1NDQyXHU5YjZmXHU2YWQzXHU3MDg5XHU4Y2MyXHU4ZGVmXHU5NzMyXHU1MmI0XHU1YTQxXHU1ZWNhXHU1ZjA0XHU2NzE3XHU2''@;'; put 'put ''OTdjXHU2OTk0XHU2ZDZhXHU2ZjBmXHU3MjYyXHU3MmZjXHU3YmVkXHU4MDAxXHU4MDdlXHU4NzRiXHU5MGNlXHU1MTZkXHU5ZTkzXHU3OTg0XHU4MDhiXHU5MzMyXHU4YWQ2XHU1MDJkXHU1NDhjXHU4YTcxXHU2YjZhXHU4Y2M0XHU4MTA3XHU2MGQxXHU2N2EwXHU5ZGYyXHU0ZTk5XHU0ZTk4''@;'; put 'put ''XHU5YzEwXHU4YTZiXHU4NWMxXHU4NTY4XHU2OTAwXHU2ZTdlXHU3ODk3XHU4MTU1XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1ZjBjXHU0ZTEwXHU0ZTE1''@;'; put 'put ''XHU0ZTJhXHU0ZTMxXHU0ZTM2XHU0ZTNjXHU0ZTNmXHU0ZTQyXHU0ZTU2XHU0ZTU4XHU0ZTgyXHU0ZTg1XHU4YzZiXHU0ZThhXHU4MjEyXHU1ZjBkXHU0ZThlXHU0ZTllXHU0ZTlmXHU0ZWEwXHU0ZWEyXHU0ZWIwXHU0ZWIzXHU0ZWI2XHU0ZWNlXHU0ZWNkXHU0ZWM0XHU0ZWM2XHU0ZWMyXHU0''@;'; put 'put ''ZWQ3XHU0ZWRlXHU0ZWVkXHU0ZWRmXHU0ZWY3XHU0ZjA5XHU0ZjVhXHU0ZjMwXHU0ZjViXHU0ZjVkXHU0ZjU3XHU0ZjQ3XHU0Zjc2XHU0Zjg4XHU0ZjhmXHU0Zjk4XHU0ZjdiXHU0ZjY5XHU0ZjcwXHU0ZjkxXHU0ZjZmXHU0Zjg2XHU0Zjk2XHU1MTE4XHU0ZmQ0XHU0ZmRmXHU0ZmNlXHU0ZmQ4''@;'; put 'put ''XHU0ZmRiXHU0ZmQxXHU0ZmRhXHU0ZmQwXHU0ZmU0XHU0ZmU1XHU1MDFhXHU1MDI4XHU1MDE0XHU1MDJhXHU1MDI1XHU1MDA1XHU0ZjFjXHU0ZmY2XHU1MDIxXHU1MDI5XHU1MDJjXHU0ZmZlXHU0ZmVmXHU1MDExXHU1MDA2XHU1MDQzXHU1MDQ3XHU2NzAzXHU1MDU1XHU1MDUwXHU1MDQ4XHU1''@;'; put 'put ''MDVhXHU1MDU2XHU1MDZjXHU1MDc4XHU1MDgwXHU1MDlhXHU1MDg1XHU1MGI0XHU1MGIyXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTUyXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNTJdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTUyXVtnXV09Mzg5MTIrZyx5WzM4''@;'; put 'put ''OTEyK2ddPV9bMTUyXVtnXSk7Zm9yKF9bMTUzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1MGM5XHU1MGNhXHU1MGIzXHU1MGMyXHU1MGQ2XHU1MGRlXHU1MGU1XHU1MGVkXHU1MGUzXHU1MGVlXHU1MGY5XHU1MGY1XHU1MTA5XHU1''@;'; put 'put ''MTAxXHU1MTAyXHU1MTE2XHU1MTE1XHU1MTE0XHU1MTFhXHU1MTIxXHU1MTNhXHU1MTM3XHU1MTNjXHU1MTNiXHU1MTNmXHU1MTQwXHU1MTUyXHU1MTRjXHU1MTU0XHU1MTYyXHU3YWY4XHU1MTY5XHU1MTZhXHU1MTZlXHU1MTgwXHU1MTgyXHU1NmQ4XHU1MThjXHU1MTg5XHU1MThmXHU1MTkx''@;'; put 'put ''XHU1MTkzXHU1MTk1XHU1MTk2XHU1MWE0XHU1MWE2XHU1MWEyXHU1MWE5XHU1MWFhXHU1MWFiXHU1MWIzXHU1MWIxXHU1MWIyXHU1MWIwXHU1MWI1XHU1MWJkXHU1MWM1XHU1MWM5XHU1MWRiXHU1MWUwXHU4NjU1XHU1MWU5XHU1MWVkXHVmZmZkXHU1MWYwXHU1MWY1XHU1MWZlXHU1MjA0XHU1''@;'; put 'put ''MjBiXHU1MjE0XHU1MjBlXHU1MjI3XHU1MjJhXHU1MjJlXHU1MjMzXHU1MjM5XHU1MjRmXHU1MjQ0XHU1MjRiXHU1MjRjXHU1MjVlXHU1MjU0XHU1MjZhXHU1Mjc0XHU1MjY5XHU1MjczXHU1MjdmXHU1MjdkXHU1MjhkXHU1Mjk0XHU1MjkyXHU1MjcxXHU1Mjg4XHU1MjkxXHU4ZmE4XHU4ZmE3''@;'; put 'put ''XHU1MmFjXHU1MmFkXHU1MmJjXHU1MmI1XHU1MmMxXHU1MmNkXHU1MmQ3XHU1MmRlXHU1MmUzXHU1MmU2XHU5OGVkXHU1MmUwXHU1MmYzXHU1MmY1XHU1MmY4XHU1MmY5XHU1MzA2XHU1MzA4XHU3NTM4XHU1MzBkXHU1MzEwXHU1MzBmXHU1MzE1XHU1MzFhXHU1MzIzXHU1MzJmXHU1MzMxXHU1''@;'; put 'put ''MzMzXHU1MzM4XHU1MzQwXHU1MzQ2XHU1MzQ1XHU0ZTE3XHU1MzQ5XHU1MzRkXHU1MWQ2XHU1MzVlXHU1MzY5XHU1MzZlXHU1OTE4XHU1MzdiXHU1Mzc3XHU1MzgyXHU1Mzk2XHU1M2EwXHU1M2E2XHU1M2E1XHU1M2FlXHU1M2IwXHU1M2I2XHU1M2MzXHU3YzEyXHU5NmQ5XHU1M2RmXHU2NmZj''@;'; put 'put ''XHU3MWVlXHU1M2VlXHU1M2U4XHU1M2VkXHU1M2ZhXHU1NDAxXHU1NDNkXHU1NDQwXHU1NDJjXHU1NDJkXHU1NDNjXHU1NDJlXHU1NDM2XHU1NDI5XHU1NDFkXHU1NDRlXHU1NDhmXHU1NDc1XHU1NDhlXHU1NDVmXHU1NDcxXHU1NDc3XHU1NDcwXHU1NDkyXHU1NDdiXHU1NDgwXHU1NDc2XHU1''@;'; put 'put ''NDg0XHU1NDkwXHU1NDg2XHU1NGM3XHU1NGEyXHU1NGI4XHU1NGE1XHU1NGFjXHU1NGM0XHU1NGM4XHU1NGE4XHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTUzXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNTNdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTUzXVtnXV09''@;'; put 'put ''MzkxNjgrZyx5WzM5MTY4K2ddPV9bMTUzXVtnXSk7Zm9yKF9bMTU0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NGFiXHU1NGMyXHU1NGE0XHU1NGJlXHU1NGJjXHU1NGQ4XHU1NGU1XHU1NGU2XHU1NTBmXHU1NTE0XHU1NGZkXHU1''@;'; put 'put ''NGVlXHU1NGVkXHU1NGZhXHU1NGUyXHU1NTM5XHU1NTQwXHU1NTYzXHU1NTRjXHU1NTJlXHU1NTVjXHU1NTQ1XHU1NTU2XHU1NTU3XHU1NTM4XHU1NTMzXHU1NTVkXHU1NTk5XHU1NTgwXHU1NGFmXHU1NThhXHU1NTlmXHU1NTdiXHU1NTdlXHU1NTk4XHU1NTllXHU1NWFlXHU1NTdjXHU1NTgz''@;'; put 'put ''XHU1NWE5XHU1NTg3XHU1NWE4XHU1NWRhXHU1NWM1XHU1NWRmXHU1NWM0XHU1NWRjXHU1NWU0XHU1NWQ0XHU1NjE0XHU1NWY3XHU1NjE2XHU1NWZlXHU1NWZkXHU1NjFiXHU1NWY5XHU1NjRlXHU1NjUwXHU3MWRmXHU1NjM0XHU1NjM2XHU1NjMyXHU1NjM4XHVmZmZkXHU1NjZiXHU1NjY0XHU1''@;'; put 'put ''NjJmXHU1NjZjXHU1NjZhXHU1Njg2XHU1NjgwXHU1NjhhXHU1NmEwXHU1Njk0XHU1NjhmXHU1NmE1XHU1NmFlXHU1NmI2XHU1NmI0XHU1NmMyXHU1NmJjXHU1NmMxXHU1NmMzXHU1NmMwXHU1NmM4XHU1NmNlXHU1NmQxXHU1NmQzXHU1NmQ3XHU1NmVlXHU1NmY5XHU1NzAwXHU1NmZmXHU1NzA0''@;'; put 'put ''XHU1NzA5XHU1NzA4XHU1NzBiXHU1NzBkXHU1NzEzXHU1NzE4XHU1NzE2XHU1NWM3XHU1NzFjXHU1NzI2XHU1NzM3XHU1NzM4XHU1NzRlXHU1NzNiXHU1NzQwXHU1NzRmXHU1NzY5XHU1N2MwXHU1Nzg4XHU1NzYxXHU1NzdmXHU1Nzg5XHU1NzkzXHU1N2EwXHU1N2IzXHU1N2E0XHU1N2FhXHU1''@;'; put 'put ''N2IwXHU1N2MzXHU1N2M2XHU1N2Q0XHU1N2QyXHU1N2QzXHU1ODBhXHU1N2Q2XHU1N2UzXHU1ODBiXHU1ODE5XHU1ODFkXHU1ODcyXHU1ODIxXHU1ODYyXHU1ODRiXHU1ODcwXHU2YmMwXHU1ODUyXHU1ODNkXHU1ODc5XHU1ODg1XHU1OGI5XHU1ODlmXHU1OGFiXHU1OGJhXHU1OGRlXHU1OGJi''@;'; put 'put ''XHU1OGI4XHU1OGFlXHU1OGM1XHU1OGQzXHU1OGQxXHU1OGQ3XHU1OGQ5XHU1OGQ4XHU1OGU1XHU1OGRjXHU1OGU0XHU1OGRmXHU1OGVmXHU1OGZhXHU1OGY5XHU1OGZiXHU1OGZjXHU1OGZkXHU1OTAyXHU1OTBhXHU1OTEwXHU1OTFiXHU2OGE2XHU1OTI1XHU1OTJjXHU1OTJkXHU1OTMyXHU1''@;'; put 'put ''OTM4XHU1OTNlXHU3YWQyXHU1OTU1XHU1OTUwXHU1OTRlXHU1OTVhXHU1OTU4XHU1OTYyXHU1OTYwXHU1OTY3XHU1OTZjXHU1OTY5XHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTU0XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNTRdW2ddLmNoYXJDb2RlQXQoMCkmJihJ''@;'; put 'put ''W19bMTU0XVtnXV09Mzk0MjQrZyx5WzM5NDI0K2ddPV9bMTU0XVtnXSk7Zm9yKF9bMTU1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1OTc4XHU1OTgxXHU1OTlkXHU0ZjVlXHU0ZmFiXHU1OWEzXHU1OWIyXHU1OWM2XHU1OWU4XHU1''@;'; put 'put ''OWRjXHU1OThkXHU1OWQ5XHU1OWRhXHU1YTI1XHU1YTFmXHU1YTExXHU1YTFjXHU1YTA5XHU1YTFhXHU1YTQwXHU1YTZjXHU1YTQ5XHU1YTM1XHU1YTM2XHU1YTYyXHU1YTZhXHU1YTlhXHU1YWJjXHU1YWJlXHU1YWNiXHU1YWMyXHU1YWJkXHU1YWUzXHU1YWQ3XHU1YWU2XHU1YWU5XHU1YWQ2''@;'; put 'put ''XHU1YWZhXHU1YWZiXHU1YjBjXHU1YjBiXHU1YjE2XHU1YjMyXHU1YWQwXHU1YjJhXHU1YjM2XHU1YjNlXHU1YjQzXHU1YjQ1XHU1YjQwXHU1YjUxXHU1YjU1XHU1YjVhXHU1YjViXHU1YjY1XHU1YjY5XHU1YjcwXHU1YjczXHU1Yjc1XHU1Yjc4XHU2NTg4XHU1YjdhXHU1YjgwXHVmZmZkXHU1''@;'; put 'put ''YjgzXHU1YmE2XHU1YmI4XHU1YmMzXHU1YmM3XHU1YmM5XHU1YmQ0XHU1YmQwXHU1YmU0XHU1YmU2XHU1YmUyXHU1YmRlXHU1YmU1XHU1YmViXHU1YmYwXHU1YmY2XHU1YmYzXHU1YzA1XHU1YzA3XHU1YzA4XHU1YzBkXHU1YzEzXHU1YzIwXHU1YzIyXHU1YzI4XHU1YzM4XHU1YzM5XHU1YzQx''@;'; put 'put ''XHU1YzQ2XHU1YzRlXHU1YzUzXHU1YzUwXHU1YzRmXHU1YjcxXHU1YzZjXHU1YzZlXHU0ZTYyXHU1Yzc2XHU1Yzc5XHU1YzhjXHU1YzkxXHU1Yzk0XHU1OTliXHU1Y2FiXHU1Y2JiXHU1Y2I2XHU1Y2JjXHU1Y2I3XHU1Y2M1XHU1Y2JlXHU1Y2M3XHU1Y2Q5XHU1Y2U5XHU1Y2ZkXHU1Y2ZhXHU1''@;'; put 'put ''Y2VkXHU1ZDhjXHU1Y2VhXHU1ZDBiXHU1ZDE1XHU1ZDE3XHU1ZDVjXHU1ZDFmXHU1ZDFiXHU1ZDExXHU1ZDE0XHU1ZDIyXHU1ZDFhXHU1ZDE5XHU1ZDE4XHU1ZDRjXHU1ZDUyXHU1ZDRlXHU1ZDRiXHU1ZDZjXHU1ZDczXHU1ZDc2XHU1ZDg3XHU1ZDg0XHU1ZDgyXHU1ZGEyXHU1ZDlkXHU1ZGFj''@;'; put 'put ''XHU1ZGFlXHU1ZGJkXHU1ZDkwXHU1ZGI3XHU1ZGJjXHU1ZGM5XHU1ZGNkXHU1ZGQzXHU1ZGQyXHU1ZGQ2XHU1ZGRiXHU1ZGViXHU1ZGYyXHU1ZGY1XHU1ZTBiXHU1ZTFhXHU1ZTE5XHU1ZTExXHU1ZTFiXHU1ZTM2XHU1ZTM3XHU1ZTQ0XHU1ZTQzXHU1ZTQwXHU1ZTRlXHU1ZTU3XHU1ZTU0XHU1''@;'; put 'put ''ZTVmXHU1ZTYyXHU1ZTY0XHU1ZTQ3XHU1ZTc1XHU1ZTc2XHU1ZTdhXHU5ZWJjXHU1ZTdmXHU1ZWEwXHU1ZWMxXHU1ZWMyXHU1ZWM4XHU1ZWQwXHU1ZWNmXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTU1XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNTVdW2ddLmNoYXJD''@;'; put 'put ''b2RlQXQoMCkmJihJW19bMTU1XVtnXV09Mzk2ODArZyx5WzM5NjgwK2ddPV9bMTU1XVtnXSk7Zm9yKF9bMTU2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1ZWQ2XHU1ZWUzXHU1ZWRkXHU1ZWRhXHU1ZWRiXHU1ZWUyXHU1ZWUxXHU1''@;'; put 'put ''ZWU4XHU1ZWU5XHU1ZWVjXHU1ZWYxXHU1ZWYzXHU1ZWYwXHU1ZWY0XHU1ZWY4XHU1ZWZlXHU1ZjAzXHU1ZjA5XHU1ZjVkXHU1ZjVjXHU1ZjBiXHU1ZjExXHU1ZjE2XHU1ZjI5XHU1ZjJkXHU1ZjM4XHU1ZjQxXHU1ZjQ4XHU1ZjRjXHU1ZjRlXHU1ZjJmXHU1ZjUxXHU1ZjU2XHU1ZjU3XHU1ZjU5''@;'; put 'put ''XHU1ZjYxXHU1ZjZkXHU1ZjczXHU1Zjc3XHU1ZjgzXHU1ZjgyXHU1ZjdmXHU1ZjhhXHU1Zjg4XHU1ZjkxXHU1Zjg3XHU1ZjllXHU1Zjk5XHU1Zjk4XHU1ZmEwXHU1ZmE4XHU1ZmFkXHU1ZmJjXHU1ZmQ2XHU1ZmZiXHU1ZmU0XHU1ZmY4XHU1ZmYxXHU1ZmRkXHU2MGIzXHU1ZmZmXHU2MDIxXHU2''@;'; put 'put ''MDYwXHVmZmZkXHU2MDE5XHU2MDEwXHU2MDI5XHU2MDBlXHU2MDMxXHU2MDFiXHU2MDE1XHU2MDJiXHU2MDI2XHU2MDBmXHU2MDNhXHU2MDVhXHU2MDQxXHU2MDZhXHU2MDc3XHU2MDVmXHU2MDRhXHU2MDQ2XHU2MDRkXHU2MDYzXHU2MDQzXHU2MDY0XHU2MDQyXHU2MDZjXHU2MDZiXHU2MDU5''@;'; put 'put ''XHU2MDgxXHU2MDhkXHU2MGU3XHU2MDgzXHU2MDlhXHU2MDg0XHU2MDliXHU2MDk2XHU2MDk3XHU2MDkyXHU2MGE3XHU2MDhiXHU2MGUxXHU2MGI4XHU2MGUwXHU2MGQzXHU2MGI0XHU1ZmYwXHU2MGJkXHU2MGM2XHU2MGI1XHU2MGQ4XHU2MTRkXHU2MTE1XHU2MTA2XHU2MGY2XHU2MGY3XHU2''@;'; put 'put ''MTAwXHU2MGY0XHU2MGZhXHU2MTAzXHU2MTIxXHU2MGZiXHU2MGYxXHU2MTBkXHU2MTBlXHU2MTQ3XHU2MTNlXHU2MTI4XHU2MTI3XHU2MTRhXHU2MTNmXHU2MTNjXHU2MTJjXHU2MTM0XHU2MTNkXHU2MTQyXHU2MTQ0XHU2MTczXHU2MTc3XHU2MTU4XHU2MTU5XHU2MTVhXHU2MTZiXHU2MTc0''@;'; put 'put ''XHU2MTZmXHU2MTY1XHU2MTcxXHU2MTVmXHU2MTVkXHU2MTUzXHU2MTc1XHU2MTk5XHU2MTk2XHU2MTg3XHU2MWFjXHU2MTk0XHU2MTlhXHU2MThhXHU2MTkxXHU2MWFiXHU2MWFlXHU2MWNjXHU2MWNhXHU2MWM5XHU2MWY3XHU2MWM4XHU2MWMzXHU2MWM2XHU2MWJhXHU2MWNiXHU3Zjc5XHU2''@;'; put 'put ''MWNkXHU2MWU2XHU2MWUzXHU2MWY2XHU2MWZhXHU2MWY0XHU2MWZmXHU2MWZkXHU2MWZjXHU2MWZlXHU2MjAwXHU2MjA4XHU2MjA5XHU2MjBkXHU2MjBjXHU2MjE0XHU2MjFiXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTU2XS5sZW5ndGg7KytnKTY1NTMzIT09X1sx''@;'; put 'put ''NTZdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTU2XVtnXV09Mzk5MzYrZyx5WzM5OTM2K2ddPV9bMTU2XVtnXSk7Zm9yKF9bMTU3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2MjFlXHU2MjIxXHU2MjJhXHU2MjJlXHU2MjMwXHU2''@;'; put 'put ''MjMyXHU2MjMzXHU2MjQxXHU2MjRlXHU2MjVlXHU2MjYzXHU2MjViXHU2MjYwXHU2MjY4XHU2MjdjXHU2MjgyXHU2Mjg5XHU2MjdlXHU2MjkyXHU2MjkzXHU2Mjk2XHU2MmQ0XHU2MjgzXHU2Mjk0XHU2MmQ3XHU2MmQxXHU2MmJiXHU2MmNmXHU2MmZmXHU2MmM2XHU2NGQ0XHU2MmM4XHU2MmRj''@;'; put 'put ''XHU2MmNjXHU2MmNhXHU2MmMyXHU2MmM3XHU2MjliXHU2MmM5XHU2MzBjXHU2MmVlXHU2MmYxXHU2MzI3XHU2MzAyXHU2MzA4XHU2MmVmXHU2MmY1XHU2MzUwXHU2MzNlXHU2MzRkXHU2NDFjXHU2MzRmXHU2Mzk2XHU2MzhlXHU2MzgwXHU2M2FiXHU2Mzc2XHU2M2EzXHU2MzhmXHU2Mzg5XHU2''@;'; put 'put ''MzlmXHU2M2I1XHU2MzZiXHVmZmZkXHU2MzY5XHU2M2JlXHU2M2U5XHU2M2MwXHU2M2M2XHU2M2UzXHU2M2M5XHU2M2QyXHU2M2Y2XHU2M2M0XHU2NDE2XHU2NDM0XHU2NDA2XHU2NDEzXHU2NDI2XHU2NDM2XHU2NTFkXHU2NDE3XHU2NDI4XHU2NDBmXHU2NDY3XHU2NDZmXHU2NDc2XHU2NDRl''@;'; put 'put ''XHU2NTJhXHU2NDk1XHU2NDkzXHU2NGE1XHU2NGE5XHU2NDg4XHU2NGJjXHU2NGRhXHU2NGQyXHU2NGM1XHU2NGM3XHU2NGJiXHU2NGQ4XHU2NGMyXHU2NGYxXHU2NGU3XHU4MjA5XHU2NGUwXHU2NGUxXHU2MmFjXHU2NGUzXHU2NGVmXHU2NTJjXHU2NGY2XHU2NGY0XHU2NGYyXHU2NGZhXHU2''@;'; put 'put ''NTAwXHU2NGZkXHU2NTE4XHU2NTFjXHU2NTA1XHU2NTI0XHU2NTIzXHU2NTJiXHU2NTM0XHU2NTM1XHU2NTM3XHU2NTM2XHU2NTM4XHU3NTRiXHU2NTQ4XHU2NTU2XHU2NTU1XHU2NTRkXHU2NTU4XHU2NTVlXHU2NTVkXHU2NTcyXHU2NTc4XHU2NTgyXHU2NTgzXHU4YjhhXHU2NTliXHU2NTlm''@;'; put 'put ''XHU2NWFiXHU2NWI3XHU2NWMzXHU2NWM2XHU2NWMxXHU2NWM0XHU2NWNjXHU2NWQyXHU2NWRiXHU2NWQ5XHU2NWUwXHU2NWUxXHU2NWYxXHU2NzcyXHU2NjBhXHU2NjAzXHU2NWZiXHU2NzczXHU2NjM1XHU2NjM2XHU2NjM0XHU2NjFjXHU2NjRmXHU2NjQ0XHU2NjQ5XHU2NjQxXHU2NjVlXHU2''@;'; put 'put ''NjVkXHU2NjY0XHU2NjY3XHU2NjY4XHU2NjVmXHU2NjYyXHU2NjcwXHU2NjgzXHU2Njg4XHU2NjhlXHU2Njg5XHU2Njg0XHU2Njk4XHU2NjlkXHU2NmMxXHU2NmI5XHU2NmM5XHU2NmJlXHU2NmJjXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTU3XS5sZW5ndGg7Kytn''@;'; put 'put ''KTY1NTMzIT09X1sxNTddW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTU3XVtnXV09NDAxOTIrZyx5WzQwMTkyK2ddPV9bMTU3XVtnXSk7Zm9yKF9bMTU4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2NmM0XHU2NmI4XHU2NmQ2XHU2''@;'; put 'put ''NmRhXHU2NmUwXHU2NjNmXHU2NmU2XHU2NmU5XHU2NmYwXHU2NmY1XHU2NmY3XHU2NzBmXHU2NzE2XHU2NzFlXHU2NzI2XHU2NzI3XHU5NzM4XHU2NzJlXHU2NzNmXHU2NzM2XHU2NzQxXHU2NzM4XHU2NzM3XHU2NzQ2XHU2NzVlXHU2NzYwXHU2NzU5XHU2NzYzXHU2NzY0XHU2Nzg5XHU2Nzcw''@;'; put 'put ''XHU2N2E5XHU2NzdjXHU2NzZhXHU2NzhjXHU2NzhiXHU2N2E2XHU2N2ExXHU2Nzg1XHU2N2I3XHU2N2VmXHU2N2I0XHU2N2VjXHU2N2IzXHU2N2U5XHU2N2I4XHU2N2U0XHU2N2RlXHU2N2RkXHU2N2UyXHU2N2VlXHU2N2I5XHU2N2NlXHU2N2M2XHU2N2U3XHU2YTljXHU2ODFlXHU2ODQ2XHU2''@;'; put 'put ''ODI5XHU2ODQwXHU2ODRkXHU2ODMyXHU2ODRlXHVmZmZkXHU2OGIzXHU2ODJiXHU2ODU5XHU2ODYzXHU2ODc3XHU2ODdmXHU2ODlmXHU2ODhmXHU2OGFkXHU2ODk0XHU2ODlkXHU2ODliXHU2ODgzXHU2YWFlXHU2OGI5XHU2ODc0XHU2OGI1XHU2OGEwXHU2OGJhXHU2OTBmXHU2ODhkXHU2ODdl''@;'; put 'put ''XHU2OTAxXHU2OGNhXHU2OTA4XHU2OGQ4XHU2OTIyXHU2OTI2XHU2OGUxXHU2OTBjXHU2OGNkXHU2OGQ0XHU2OGU3XHU2OGQ1XHU2OTM2XHU2OTEyXHU2OTA0XHU2OGQ3XHU2OGUzXHU2OTI1XHU2OGY5XHU2OGUwXHU2OGVmXHU2OTI4XHU2OTJhXHU2OTFhXHU2OTIzXHU2OTIxXHU2OGM2XHU2''@;'; put 'put ''OTc5XHU2OTc3XHU2OTVjXHU2OTc4XHU2OTZiXHU2OTU0XHU2OTdlXHU2OTZlXHU2OTM5XHU2OTc0XHU2OTNkXHU2OTU5XHU2OTMwXHU2OTYxXHU2OTVlXHU2OTVkXHU2OTgxXHU2OTZhXHU2OWIyXHU2OWFlXHU2OWQwXHU2OWJmXHU2OWMxXHU2OWQzXHU2OWJlXHU2OWNlXHU1YmU4XHU2OWNh''@;'; put 'put ''XHU2OWRkXHU2OWJiXHU2OWMzXHU2OWE3XHU2YTJlXHU2OTkxXHU2OWEwXHU2OTljXHU2OTk1XHU2OWI0XHU2OWRlXHU2OWU4XHU2YTAyXHU2YTFiXHU2OWZmXHU2YjBhXHU2OWY5XHU2OWYyXHU2OWU3XHU2YTA1XHU2OWIxXHU2YTFlXHU2OWVkXHU2YTE0XHU2OWViXHU2YTBhXHU2YTEyXHU2''@;'; put 'put ''YWMxXHU2YTIzXHU2YTEzXHU2YTQ0XHU2YTBjXHU2YTcyXHU2YTM2XHU2YTc4XHU2YTQ3XHU2YTYyXHU2YTU5XHU2YTY2XHU2YTQ4XHU2YTM4XHU2YTIyXHU2YTkwXHU2YThkXHU2YWEwXHU2YTg0XHU2YWEyXHU2YWEzXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTU4''@;'; put 'put ''XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNThdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTU4XVtnXV09NDA0NDgrZyx5WzQwNDQ4K2ddPV9bMTU4XVtnXSk7Zm9yKF9bMTU5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2YTk3XHU4''@;'; put 'put ''NjE3XHU2YWJiXHU2YWMzXHU2YWMyXHU2YWI4XHU2YWIzXHU2YWFjXHU2YWRlXHU2YWQxXHU2YWRmXHU2YWFhXHU2YWRhXHU2YWVhXHU2YWZiXHU2YjA1XHU4NjE2XHU2YWZhXHU2YjEyXHU2YjE2XHU5YjMxXHU2YjFmXHU2YjM4XHU2YjM3XHU3NmRjXHU2YjM5XHU5OGVlXHU2YjQ3XHU2YjQz''@;'; put 'put ''XHU2YjQ5XHU2YjUwXHU2YjU5XHU2YjU0XHU2YjViXHU2YjVmXHU2YjYxXHU2Yjc4XHU2Yjc5XHU2YjdmXHU2YjgwXHU2Yjg0XHU2YjgzXHU2YjhkXHU2Yjk4XHU2Yjk1XHU2YjllXHU2YmE0XHU2YmFhXHU2YmFiXHU2YmFmXHU2YmIyXHU2YmIxXHU2YmIzXHU2YmI3XHU2YmJjXHU2YmM2XHU2''@;'; put 'put ''YmNiXHU2YmQzXHU2YmRmXHU2YmVjXHU2YmViXHU2YmYzXHU2YmVmXHVmZmZkXHU5ZWJlXHU2YzA4XHU2YzEzXHU2YzE0XHU2YzFiXHU2YzI0XHU2YzIzXHU2YzVlXHU2YzU1XHU2YzYyXHU2YzZhXHU2YzgyXHU2YzhkXHU2YzlhXHU2YzgxXHU2YzliXHU2YzdlXHU2YzY4XHU2YzczXHU2Yzky''@;'; put 'put ''XHU2YzkwXHU2Y2M0XHU2Y2YxXHU2Y2QzXHU2Y2JkXHU2Y2Q3XHU2Y2M1XHU2Y2RkXHU2Y2FlXHU2Y2IxXHU2Y2JlXHU2Y2JhXHU2Y2RiXHU2Y2VmXHU2Y2Q5XHU2Y2VhXHU2ZDFmXHU4ODRkXHU2ZDM2XHU2ZDJiXHU2ZDNkXHU2ZDM4XHU2ZDE5XHU2ZDM1XHU2ZDMzXHU2ZDEyXHU2ZDBjXHU2''@;'; put 'put ''ZDYzXHU2ZDkzXHU2ZDY0XHU2ZDVhXHU2ZDc5XHU2ZDU5XHU2ZDhlXHU2ZDk1XHU2ZmU0XHU2ZDg1XHU2ZGY5XHU2ZTE1XHU2ZTBhXHU2ZGI1XHU2ZGM3XHU2ZGU2XHU2ZGI4XHU2ZGM2XHU2ZGVjXHU2ZGRlXHU2ZGNjXHU2ZGU4XHU2ZGQyXHU2ZGM1XHU2ZGZhXHU2ZGQ5XHU2ZGU0XHU2ZGQ1''@;'; put 'put ''XHU2ZGVhXHU2ZGVlXHU2ZTJkXHU2ZTZlXHU2ZTJlXHU2ZTE5XHU2ZTcyXHU2ZTVmXHU2ZTNlXHU2ZTIzXHU2ZTZiXHU2ZTJiXHU2ZTc2XHU2ZTRkXHU2ZTFmXHU2ZTQzXHU2ZTNhXHU2ZTRlXHU2ZTI0XHU2ZWZmXHU2ZTFkXHU2ZTM4XHU2ZTgyXHU2ZWFhXHU2ZTk4XHU2ZWM5XHU2ZWI3XHU2''@;'; put 'put ''ZWQzXHU2ZWJkXHU2ZWFmXHU2ZWM0XHU2ZWIyXHU2ZWQ0XHU2ZWQ1XHU2ZThmXHU2ZWE1XHU2ZWMyXHU2ZTlmXHU2ZjQxXHU2ZjExXHU3MDRjXHU2ZWVjXHU2ZWY4XHU2ZWZlXHU2ZjNmXHU2ZWYyXHU2ZjMxXHU2ZWVmXHU2ZjMyXHU2ZWNjXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiks''@;'; put 'put ''Zz0wO2chPV9bMTU5XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNTldW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTU5XVtnXV09NDA3MDQrZyx5WzQwNzA0K2ddPV9bMTU5XVtnXSk7Zm9yKF9bMjI0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHU2ZjNlXHU2ZjEzXHU2ZWY3XHU2Zjg2XHU2ZjdhXHU2Zjc4XHU2ZjgxXHU2ZjgwXHU2ZjZmXHU2ZjViXHU2ZmYzXHU2ZjZkXHU2ZjgyXHU2ZjdjXHU2ZjU4XHU2ZjhlXHU2ZjkxXHU2ZmMyXHU2ZjY2XHU2ZmIzXHU2ZmEzXHU2ZmExXHU2ZmE0XHU2ZmI5XHU2ZmM2XHU2ZmFhXHU2ZmRm''@;'; put 'put ''XHU2ZmQ1XHU2ZmVjXHU2ZmQ0XHU2ZmQ4XHU2ZmYxXHU2ZmVlXHU2ZmRiXHU3MDA5XHU3MDBiXHU2ZmZhXHU3MDExXHU3MDAxXHU3MDBmXHU2ZmZlXHU3MDFiXHU3MDFhXHU2Zjc0XHU3MDFkXHU3MDE4XHU3MDFmXHU3MDMwXHU3MDNlXHU3MDMyXHU3MDUxXHU3MDYzXHU3MDk5XHU3MDkyXHU3''@;'; put 'put ''MGFmXHU3MGYxXHU3MGFjXHU3MGI4XHU3MGIzXHU3MGFlXHU3MGRmXHU3MGNiXHU3MGRkXHVmZmZkXHU3MGQ5XHU3MTA5XHU3MGZkXHU3MTFjXHU3MTE5XHU3MTY1XHU3MTU1XHU3MTg4XHU3MTY2XHU3MTYyXHU3MTRjXHU3MTU2XHU3MTZjXHU3MThmXHU3MWZiXHU3MTg0XHU3MTk1XHU3MWE4''@;'; put 'put ''XHU3MWFjXHU3MWQ3XHU3MWI5XHU3MWJlXHU3MWQyXHU3MWM5XHU3MWQ0XHU3MWNlXHU3MWUwXHU3MWVjXHU3MWU3XHU3MWY1XHU3MWZjXHU3MWY5XHU3MWZmXHU3MjBkXHU3MjEwXHU3MjFiXHU3MjI4XHU3MjJkXHU3MjJjXHU3MjMwXHU3MjMyXHU3MjNiXHU3MjNjXHU3MjNmXHU3MjQwXHU3''@;'; put 'put ''MjQ2XHU3MjRiXHU3MjU4XHU3Mjc0XHU3MjdlXHU3MjgyXHU3MjgxXHU3Mjg3XHU3MjkyXHU3Mjk2XHU3MmEyXHU3MmE3XHU3MmI5XHU3MmIyXHU3MmMzXHU3MmM2XHU3MmM0XHU3MmNlXHU3MmQyXHU3MmUyXHU3MmUwXHU3MmUxXHU3MmY5XHU3MmY3XHU1MDBmXHU3MzE3XHU3MzBhXHU3MzFj''@;'; put 'put ''XHU3MzE2XHU3MzFkXHU3MzM0XHU3MzJmXHU3MzI5XHU3MzI1XHU3MzNlXHU3MzRlXHU3MzRmXHU5ZWQ4XHU3MzU3XHU3MzZhXHU3MzY4XHU3MzcwXHU3Mzc4XHU3Mzc1XHU3MzdiXHU3MzdhXHU3M2M4XHU3M2IzXHU3M2NlXHU3M2JiXHU3M2MwXHU3M2U1XHU3M2VlXHU3M2RlXHU3NGEyXHU3''@;'; put 'put ''NDA1XHU3NDZmXHU3NDI1XHU3M2Y4XHU3NDMyXHU3NDNhXHU3NDU1XHU3NDNmXHU3NDVmXHU3NDU5XHU3NDQxXHU3NDVjXHU3NDY5XHU3NDcwXHU3NDYzXHU3NDZhXHU3NDc2XHU3NDdlXHU3NDhiXHU3NDllXHU3NGE3XHU3NGNhXHU3NGNmXHU3NGQ0XHU3M2YxXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''Ii5zcGxpdCgiIiksZz0wO2chPV9bMjI0XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMjRdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjI0XVtnXV09NTczNDQrZyx5WzU3MzQ0K2ddPV9bMjI0XVtnXSk7Zm9yKF9bMjI1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHU3NGUwXHU3NGUzXHU3NGU3XHU3NGU5XHU3NGVlXHU3NGYyXHU3NGYwXHU3NGYxXHU3NGY4XHU3NGY3XHU3NTA0XHU3NTAzXHU3NTA1XHU3NTBjXHU3NTBlXHU3NTBkXHU3NTE1XHU3NTEzXHU3NTFlXHU3NTI2XHU3NTJjXHU3NTNjXHU3NTQ0XHU3NTRkXHU3NTRh''@;'; put 'put ''XHU3NTQ5XHU3NTViXHU3NTQ2XHU3NTVhXHU3NTY5XHU3NTY0XHU3NTY3XHU3NTZiXHU3NTZkXHU3NTc4XHU3NTc2XHU3NTg2XHU3NTg3XHU3NTc0XHU3NThhXHU3NTg5XHU3NTgyXHU3NTk0XHU3NTlhXHU3NTlkXHU3NWE1XHU3NWEzXHU3NWMyXHU3NWIzXHU3NWMzXHU3NWI1XHU3NWJkXHU3''@;'; put 'put ''NWI4XHU3NWJjXHU3NWIxXHU3NWNkXHU3NWNhXHU3NWQyXHU3NWQ5XHU3NWUzXHU3NWRlXHU3NWZlXHU3NWZmXHVmZmZkXHU3NWZjXHU3NjAxXHU3NWYwXHU3NWZhXHU3NWYyXHU3NWYzXHU3NjBiXHU3NjBkXHU3NjA5XHU3NjFmXHU3NjI3XHU3NjIwXHU3NjIxXHU3NjIyXHU3NjI0XHU3NjM0''@;'; put 'put ''XHU3NjMwXHU3NjNiXHU3NjQ3XHU3NjQ4XHU3NjQ2XHU3NjVjXHU3NjU4XHU3NjYxXHU3NjYyXHU3NjY4XHU3NjY5XHU3NjZhXHU3NjY3XHU3NjZjXHU3NjcwXHU3NjcyXHU3Njc2XHU3Njc4XHU3NjdjXHU3NjgwXHU3NjgzXHU3Njg4XHU3NjhiXHU3NjhlXHU3Njk2XHU3NjkzXHU3Njk5XHU3''@;'; put 'put ''NjlhXHU3NmIwXHU3NmI0XHU3NmI4XHU3NmI5XHU3NmJhXHU3NmMyXHU3NmNkXHU3NmQ2XHU3NmQyXHU3NmRlXHU3NmUxXHU3NmU1XHU3NmU3XHU3NmVhXHU4NjJmXHU3NmZiXHU3NzA4XHU3NzA3XHU3NzA0XHU3NzI5XHU3NzI0XHU3NzFlXHU3NzI1XHU3NzI2XHU3NzFiXHU3NzM3XHU3NzM4''@;'; put 'put ''XHU3NzQ3XHU3NzVhXHU3NzY4XHU3NzZiXHU3NzViXHU3NzY1XHU3NzdmXHU3NzdlXHU3Nzc5XHU3NzhlXHU3NzhiXHU3NzkxXHU3N2EwXHU3NzllXHU3N2IwXHU3N2I2XHU3N2I5XHU3N2JmXHU3N2JjXHU3N2JkXHU3N2JiXHU3N2M3XHU3N2NkXHU3N2Q3XHU3N2RhXHU3N2RjXHU3N2UzXHU3''@;'; put 'put ''N2VlXHU3N2ZjXHU3ODBjXHU3ODEyXHU3OTI2XHU3ODIwXHU3OTJhXHU3ODQ1XHU3ODhlXHU3ODc0XHU3ODg2XHU3ODdjXHU3ODlhXHU3ODhjXHU3OGEzXHU3OGI1XHU3OGFhXHU3OGFmXHU3OGQxXHU3OGM2XHU3OGNiXHU3OGQ0XHU3OGJlXHU3OGJjXHU3OGM1XHU3OGNhXHU3OGVjXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjI1XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMjVdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjI1XVtnXV09NTc2MDArZyx5WzU3NjAwK2ddPV9bMjI1XVtnXSk7Zm9yKF9bMjI2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3OGU3XHU3OGRhXHU3OGZkXHU3OGY0XHU3OTA3XHU3OTEyXHU3OTExXHU3OTE5XHU3OTJjXHU3OTJiXHU3OTQwXHU3OTYwXHU3OTU3XHU3OTVmXHU3OTVhXHU3OTU1XHU3OTUzXHU3OTdhXHU3OTdmXHU3OThhXHU3OTlkXHU3OWE3XHU5ZjRi''@;'; put 'put ''XHU3OWFhXHU3OWFlXHU3OWIzXHU3OWI5XHU3OWJhXHU3OWM5XHU3OWQ1XHU3OWU3XHU3OWVjXHU3OWUxXHU3OWUzXHU3YTA4XHU3YTBkXHU3YTE4XHU3YTE5XHU3YTIwXHU3YTFmXHU3OTgwXHU3YTMxXHU3YTNiXHU3YTNlXHU3YTM3XHU3YTQzXHU3YTU3XHU3YTQ5XHU3YTYxXHU3YTYyXHU3''@;'; put 'put ''YTY5XHU5ZjlkXHU3YTcwXHU3YTc5XHU3YTdkXHU3YTg4XHU3YTk3XHU3YTk1XHU3YTk4XHU3YTk2XHU3YWE5XHU3YWM4XHU3YWIwXHVmZmZkXHU3YWI2XHU3YWM1XHU3YWM0XHU3YWJmXHU5MDgzXHU3YWM3XHU3YWNhXHU3YWNkXHU3YWNmXHU3YWQ1XHU3YWQzXHU3YWQ5XHU3YWRhXHU3YWRk''@;'; put 'put ''XHU3YWUxXHU3YWUyXHU3YWU2XHU3YWVkXHU3YWYwXHU3YjAyXHU3YjBmXHU3YjBhXHU3YjA2XHU3YjMzXHU3YjE4XHU3YjE5XHU3YjFlXHU3YjM1XHU3YjI4XHU3YjM2XHU3YjUwXHU3YjdhXHU3YjA0XHU3YjRkXHU3YjBiXHU3YjRjXHU3YjQ1XHU3Yjc1XHU3YjY1XHU3Yjc0XHU3YjY3XHU3''@;'; put 'put ''YjcwXHU3YjcxXHU3YjZjXHU3YjZlXHU3YjlkXHU3Yjk4XHU3YjlmXHU3YjhkXHU3YjljXHU3YjlhXHU3YjhiXHU3YjkyXHU3YjhmXHU3YjVkXHU3Yjk5XHU3YmNiXHU3YmMxXHU3YmNjXHU3YmNmXHU3YmI0XHU3YmM2XHU3YmRkXHU3YmU5XHU3YzExXHU3YzE0XHU3YmU2XHU3YmU1XHU3YzYw''@;'; put 'put ''XHU3YzAwXHU3YzA3XHU3YzEzXHU3YmYzXHU3YmY3XHU3YzE3XHU3YzBkXHU3YmY2XHU3YzIzXHU3YzI3XHU3YzJhXHU3YzFmXHU3YzM3XHU3YzJiXHU3YzNkXHU3YzRjXHU3YzQzXHU3YzU0XHU3YzRmXHU3YzQwXHU3YzUwXHU3YzU4XHU3YzVmXHU3YzY0XHU3YzU2XHU3YzY1XHU3YzZjXHU3''@;'; put 'put ''Yzc1XHU3YzgzXHU3YzkwXHU3Y2E0XHU3Y2FkXHU3Y2EyXHU3Y2FiXHU3Y2ExXHU3Y2E4XHU3Y2IzXHU3Y2IyXHU3Y2IxXHU3Y2FlXHU3Y2I5XHU3Y2JkXHU3Y2MwXHU3Y2M1XHU3Y2MyXHU3Y2Q4XHU3Y2QyXHU3Y2RjXHU3Y2UyXHU5YjNiXHU3Y2VmXHU3Y2YyXHU3Y2Y0XHU3Y2Y2XHU3Y2Zh''@;'; put 'put ''XHU3ZDA2XHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjI2XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMjZdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjI2XVtnXV09NTc4NTYrZyx5WzU3ODU2K2ddPV9bMjI2XVtnXSk7Zm9yKF9bMjI3XT0iXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ZDAyXHU3ZDFjXHU3ZDE1XHU3ZDBhXHU3ZDQ1XHU3ZDRiXHU3ZDJlXHU3ZDMyXHU3ZDNmXHU3ZDM1XHU3ZDQ2XHU3ZDczXHU3ZDU2XHU3ZDRlXHU3ZDcyXHU3ZDY4XHU3ZDZlXHU3ZDRmXHU3ZDYzXHU3ZDkzXHU3ZDg5''@;'; put 'put ''XHU3ZDViXHU3ZDhmXHU3ZDdkXHU3ZDliXHU3ZGJhXHU3ZGFlXHU3ZGEzXHU3ZGI1XHU3ZGM3XHU3ZGJkXHU3ZGFiXHU3ZTNkXHU3ZGEyXHU3ZGFmXHU3ZGRjXHU3ZGI4XHU3ZDlmXHU3ZGIwXHU3ZGQ4XHU3ZGRkXHU3ZGU0XHU3ZGRlXHU3ZGZiXHU3ZGYyXHU3ZGUxXHU3ZTA1XHU3ZTBhXHU3''@;'; put 'put ''ZTIzXHU3ZTIxXHU3ZTEyXHU3ZTMxXHU3ZTFmXHU3ZTA5XHU3ZTBiXHU3ZTIyXHU3ZTQ2XHU3ZTY2XHU3ZTNiXHU3ZTM1XHU3ZTM5XHU3ZTQzXHU3ZTM3XHVmZmZkXHU3ZTMyXHU3ZTNhXHU3ZTY3XHU3ZTVkXHU3ZTU2XHU3ZTVlXHU3ZTU5XHU3ZTVhXHU3ZTc5XHU3ZTZhXHU3ZTY5XHU3ZTdj''@;'; put 'put ''XHU3ZTdiXHU3ZTgzXHU3ZGQ1XHU3ZTdkXHU4ZmFlXHU3ZTdmXHU3ZTg4XHU3ZTg5XHU3ZThjXHU3ZTkyXHU3ZTkwXHU3ZTkzXHU3ZTk0XHU3ZTk2XHU3ZThlXHU3ZTliXHU3ZTljXHU3ZjM4XHU3ZjNhXHU3ZjQ1XHU3ZjRjXHU3ZjRkXHU3ZjRlXHU3ZjUwXHU3ZjUxXHU3ZjU1XHU3ZjU0XHU3''@;'; put 'put ''ZjU4XHU3ZjVmXHU3ZjYwXHU3ZjY4XHU3ZjY5XHU3ZjY3XHU3Zjc4XHU3ZjgyXHU3Zjg2XHU3ZjgzXHU3Zjg4XHU3Zjg3XHU3ZjhjXHU3Zjk0XHU3ZjllXHU3ZjlkXHU3ZjlhXHU3ZmEzXHU3ZmFmXHU3ZmIyXHU3ZmI5XHU3ZmFlXHU3ZmI2XHU3ZmI4XHU4YjcxXHU3ZmM1XHU3ZmM2XHU3ZmNh''@;'; put 'put ''XHU3ZmQ1XHU3ZmQ0XHU3ZmUxXHU3ZmU2XHU3ZmU5XHU3ZmYzXHU3ZmY5XHU5OGRjXHU4MDA2XHU4MDA0XHU4MDBiXHU4MDEyXHU4MDE4XHU4MDE5XHU4MDFjXHU4MDIxXHU4MDI4XHU4MDNmXHU4MDNiXHU4MDRhXHU4MDQ2XHU4MDUyXHU4MDU4XHU4MDVhXHU4MDVmXHU4MDYyXHU4MDY4XHU4''@;'; put 'put ''MDczXHU4MDcyXHU4MDcwXHU4MDc2XHU4MDc5XHU4MDdkXHU4MDdmXHU4MDg0XHU4MDg2XHU4MDg1XHU4MDliXHU4MDkzXHU4MDlhXHU4MGFkXHU1MTkwXHU4MGFjXHU4MGRiXHU4MGU1XHU4MGQ5XHU4MGRkXHU4MGM0XHU4MGRhXHU4MGQ2XHU4MTA5XHU4MGVmXHU4MGYxXHU4MTFiXHU4MTI5''@;'; put 'put ''XHU4MTIzXHU4MTJmXHU4MTRiXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjI3XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMjddW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjI3XVtnXV09NTgxMTIrZyx5WzU4MTEyK2ddPV9bMjI3XVtnXSk7Zm9yKF9bMjI4XT0iXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5NjhiXHU4MTQ2XHU4MTNlXHU4MTUzXHU4MTUxXHU4MGZjXHU4MTcxXHU4MTZlXHU4MTY1XHU4MTY2XHU4MTc0XHU4MTgzXHU4MTg4XHU4MThhXHU4MTgwXHU4MTgyXHU4MWEwXHU4MTk1XHU4MWE0''@;'; put 'put ''XHU4MWEzXHU4MTVmXHU4MTkzXHU4MWE5XHU4MWIwXHU4MWI1XHU4MWJlXHU4MWI4XHU4MWJkXHU4MWMwXHU4MWMyXHU4MWJhXHU4MWM5XHU4MWNkXHU4MWQxXHU4MWQ5XHU4MWQ4XHU4MWM4XHU4MWRhXHU4MWRmXHU4MWUwXHU4MWU3XHU4MWZhXHU4MWZiXHU4MWZlXHU4MjAxXHU4MjAyXHU4''@;'; put 'put ''MjA1XHU4MjA3XHU4MjBhXHU4MjBkXHU4MjEwXHU4MjE2XHU4MjI5XHU4MjJiXHU4MjM4XHU4MjMzXHU4MjQwXHU4MjU5XHU4MjU4XHU4MjVkXHU4MjVhXHU4MjVmXHU4MjY0XHVmZmZkXHU4MjYyXHU4MjY4XHU4MjZhXHU4MjZiXHU4MjJlXHU4MjcxXHU4Mjc3XHU4Mjc4XHU4MjdlXHU4Mjhk''@;'; put 'put ''XHU4MjkyXHU4MmFiXHU4MjlmXHU4MmJiXHU4MmFjXHU4MmUxXHU4MmUzXHU4MmRmXHU4MmQyXHU4MmY0XHU4MmYzXHU4MmZhXHU4MzkzXHU4MzAzXHU4MmZiXHU4MmY5XHU4MmRlXHU4MzA2XHU4MmRjXHU4MzA5XHU4MmQ5XHU4MzM1XHU4MzM0XHU4MzE2XHU4MzMyXHU4MzMxXHU4MzQwXHU4''@;'; put 'put ''MzM5XHU4MzUwXHU4MzQ1XHU4MzJmXHU4MzJiXHU4MzE3XHU4MzE4XHU4Mzg1XHU4MzlhXHU4M2FhXHU4MzlmXHU4M2EyXHU4Mzk2XHU4MzIzXHU4MzhlXHU4Mzg3XHU4MzhhXHU4MzdjXHU4M2I1XHU4MzczXHU4Mzc1XHU4M2EwXHU4Mzg5XHU4M2E4XHU4M2Y0XHU4NDEzXHU4M2ViXHU4M2Nl''@;'; put 'put ''XHU4M2ZkXHU4NDAzXHU4M2Q4XHU4NDBiXHU4M2MxXHU4M2Y3XHU4NDA3XHU4M2UwXHU4M2YyXHU4NDBkXHU4NDIyXHU4NDIwXHU4M2JkXHU4NDM4XHU4NTA2XHU4M2ZiXHU4NDZkXHU4NDJhXHU4NDNjXHU4NTVhXHU4NDg0XHU4NDc3XHU4NDZiXHU4NGFkXHU4NDZlXHU4NDgyXHU4NDY5XHU4''@;'; put 'put ''NDQ2XHU4NDJjXHU4NDZmXHU4NDc5XHU4NDM1XHU4NGNhXHU4NDYyXHU4NGI5XHU4NGJmXHU4NDlmXHU4NGQ5XHU4NGNkXHU4NGJiXHU4NGRhXHU4NGQwXHU4NGMxXHU4NGM2XHU4NGQ2XHU4NGExXHU4NTIxXHU4NGZmXHU4NGY0XHU4NTE3XHU4NTE4XHU4NTJjXHU4NTFmXHU4NTE1XHU4NTE0''@;'; put 'put ''XHU4NGZjXHU4NTQwXHU4NTYzXHU4NTU4XHU4NTQ4XHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjI4XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMjhdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjI4XVtnXV09NTgzNjgrZyx5WzU4MzY4K2ddPV9bMjI4XVtnXSk7Zm9y''@;'; put 'put ''KF9bMjI5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4NTQxXHU4NjAyXHU4NTRiXHU4NTU1XHU4NTgwXHU4NWE0XHU4NTg4XHU4NTkxXHU4NThhXHU4NWE4XHU4NTZkXHU4NTk0XHU4NTliXHU4NWVhXHU4NTg3XHU4NTljXHU4NTc3''@;'; put 'put ''XHU4NTdlXHU4NTkwXHU4NWM5XHU4NWJhXHU4NWNmXHU4NWI5XHU4NWQwXHU4NWQ1XHU4NWRkXHU4NWU1XHU4NWRjXHU4NWY5XHU4NjBhXHU4NjEzXHU4NjBiXHU4NWZlXHU4NWZhXHU4NjA2XHU4NjIyXHU4NjFhXHU4NjMwXHU4NjNmXHU4NjRkXHU0ZTU1XHU4NjU0XHU4NjVmXHU4NjY3XHU4''@;'; put 'put ''NjcxXHU4NjkzXHU4NmEzXHU4NmE5XHU4NmFhXHU4NjhiXHU4NjhjXHU4NmI2XHU4NmFmXHU4NmM0XHU4NmM2XHU4NmIwXHU4NmM5XHU4ODIzXHU4NmFiXHU4NmQ0XHU4NmRlXHU4NmU5XHU4NmVjXHVmZmZkXHU4NmRmXHU4NmRiXHU4NmVmXHU4NzEyXHU4NzA2XHU4NzA4XHU4NzAwXHU4NzAz''@;'; put 'put ''XHU4NmZiXHU4NzExXHU4NzA5XHU4NzBkXHU4NmY5XHU4NzBhXHU4NzM0XHU4NzNmXHU4NzM3XHU4NzNiXHU4NzI1XHU4NzI5XHU4NzFhXHU4NzYwXHU4NzVmXHU4Nzc4XHU4NzRjXHU4NzRlXHU4Nzc0XHU4NzU3XHU4NzY4XHU4NzZlXHU4NzU5XHU4NzUzXHU4NzYzXHU4NzZhXHU4ODA1XHU4''@;'; put 'put ''N2EyXHU4NzlmXHU4NzgyXHU4N2FmXHU4N2NiXHU4N2JkXHU4N2MwXHU4N2QwXHU5NmQ2XHU4N2FiXHU4N2M0XHU4N2IzXHU4N2M3XHU4N2M2XHU4N2JiXHU4N2VmXHU4N2YyXHU4N2UwXHU4ODBmXHU4ODBkXHU4N2ZlXHU4N2Y2XHU4N2Y3XHU4ODBlXHU4N2QyXHU4ODExXHU4ODE2XHU4ODE1''@;'; put 'put ''XHU4ODIyXHU4ODIxXHU4ODMxXHU4ODM2XHU4ODM5XHU4ODI3XHU4ODNiXHU4ODQ0XHU4ODQyXHU4ODUyXHU4ODU5XHU4ODVlXHU4ODYyXHU4ODZiXHU4ODgxXHU4ODdlXHU4ODllXHU4ODc1XHU4ODdkXHU4OGI1XHU4ODcyXHU4ODgyXHU4ODk3XHU4ODkyXHU4OGFlXHU4ODk5XHU4OGEyXHU4''@;'; put 'put ''ODhkXHU4OGE0XHU4OGIwXHU4OGJmXHU4OGIxXHU4OGMzXHU4OGM0XHU4OGQ0XHU4OGQ4XHU4OGQ5XHU4OGRkXHU4OGY5XHU4OTAyXHU4OGZjXHU4OGY0XHU4OGU4XHU4OGYyXHU4OTA0XHU4OTBjXHU4OTBhXHU4OTEzXHU4OTQzXHU4OTFlXHU4OTI1XHU4OTJhXHU4OTJiXHU4OTQxXHU4OTQ0''@;'; put 'put ''XHU4OTNiXHU4OTM2XHU4OTM4XHU4OTRjXHU4OTFkXHU4OTYwXHU4OTVlXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjI5XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMjldW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjI5XVtnXV09NTg2MjQrZyx5WzU4NjI0K2ddPV9b''@;'; put 'put ''MjI5XVtnXSk7Zm9yKF9bMjMwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4OTY2XHU4OTY0XHU4OTZkXHU4OTZhXHU4OTZmXHU4OTc0XHU4OTc3XHU4OTdlXHU4OTgzXHU4OTg4XHU4OThhXHU4OTkzXHU4OTk4XHU4OWExXHU4OWE5''@;'; put 'put ''XHU4OWE2XHU4OWFjXHU4OWFmXHU4OWIyXHU4OWJhXHU4OWJkXHU4OWJmXHU4OWMwXHU4OWRhXHU4OWRjXHU4OWRkXHU4OWU3XHU4OWY0XHU4OWY4XHU4YTAzXHU4YTE2XHU4YTEwXHU4YTBjXHU4YTFiXHU4YTFkXHU4YTI1XHU4YTM2XHU4YTQxXHU4YTViXHU4YTUyXHU4YTQ2XHU4YTQ4XHU4''@;'; put 'put ''YTdjXHU4YTZkXHU4YTZjXHU4YTYyXHU4YTg1XHU4YTgyXHU4YTg0XHU4YWE4XHU4YWExXHU4YTkxXHU4YWE1XHU4YWE2XHU4YTlhXHU4YWEzXHU4YWM0XHU4YWNkXHU4YWMyXHU4YWRhXHU4YWViXHU4YWYzXHU4YWU3XHVmZmZkXHU4YWU0XHU4YWYxXHU4YjE0XHU4YWUwXHU4YWUyXHU4YWY3''@;'; put 'put ''XHU4YWRlXHU4YWRiXHU4YjBjXHU4YjA3XHU4YjFhXHU4YWUxXHU4YjE2XHU4YjEwXHU4YjE3XHU4YjIwXHU4YjMzXHU5N2FiXHU4YjI2XHU4YjJiXHU4YjNlXHU4YjI4XHU4YjQxXHU4YjRjXHU4YjRmXHU4YjRlXHU4YjQ5XHU4YjU2XHU4YjViXHU4YjVhXHU4YjZiXHU4YjVmXHU4YjZjXHU4''@;'; put 'put ''YjZmXHU4Yjc0XHU4YjdkXHU4YjgwXHU4YjhjXHU4YjhlXHU4YjkyXHU4YjkzXHU4Yjk2XHU4Yjk5XHU4YjlhXHU4YzNhXHU4YzQxXHU4YzNmXHU4YzQ4XHU4YzRjXHU4YzRlXHU4YzUwXHU4YzU1XHU4YzYyXHU4YzZjXHU4Yzc4XHU4YzdhXHU4YzgyXHU4Yzg5XHU4Yzg1XHU4YzhhXHU4Yzhk''@;'; put 'put ''XHU4YzhlXHU4Yzk0XHU4YzdjXHU4Yzk4XHU2MjFkXHU4Y2FkXHU4Y2FhXHU4Y2JkXHU4Y2IyXHU4Y2IzXHU4Y2FlXHU4Y2I2XHU4Y2M4XHU4Y2MxXHU4Y2U0XHU4Y2UzXHU4Y2RhXHU4Y2ZkXHU4Y2ZhXHU4Y2ZiXHU4ZDA0XHU4ZDA1XHU4ZDBhXHU4ZDA3XHU4ZDBmXHU4ZDBkXHU4ZDEwXHU5''@;'; put 'put ''ZjRlXHU4ZDEzXHU4Y2NkXHU4ZDE0XHU4ZDE2XHU4ZDY3XHU4ZDZkXHU4ZDcxXHU4ZDczXHU4ZDgxXHU4ZDk5XHU4ZGMyXHU4ZGJlXHU4ZGJhXHU4ZGNmXHU4ZGRhXHU4ZGQ2XHU4ZGNjXHU4ZGRiXHU4ZGNiXHU4ZGVhXHU4ZGViXHU4ZGRmXHU4ZGUzXHU4ZGZjXHU4ZTA4XHU4ZTA5XHU4ZGZm''@;'; put 'put ''XHU4ZTFkXHU4ZTFlXHU4ZTEwXHU4ZTFmXHU4ZTQyXHU4ZTM1XHU4ZTMwXHU4ZTM0XHU4ZTRhXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjMwXS5sZW5ndGg7KytnKTY1NTMzIT09X1syMzBdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjMwXVtnXV09NTg4ODArZyx5''@;'; put 'put ''WzU4ODgwK2ddPV9bMjMwXVtnXSk7Zm9yKF9bMjMxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4ZTQ3XHU4ZTQ5XHU4ZTRjXHU4ZTUwXHU4ZTQ4XHU4ZTU5XHU4ZTY0XHU4ZTYwXHU4ZTJhXHU4ZTYzXHU4ZTU1XHU4ZTc2XHU4ZTcy''@;'; put 'put ''XHU4ZTdjXHU4ZTgxXHU4ZTg3XHU4ZTg1XHU4ZTg0XHU4ZThiXHU4ZThhXHU4ZTkzXHU4ZTkxXHU4ZTk0XHU4ZTk5XHU4ZWFhXHU4ZWExXHU4ZWFjXHU4ZWIwXHU4ZWM2XHU4ZWIxXHU4ZWJlXHU4ZWM1XHU4ZWM4XHU4ZWNiXHU4ZWRiXHU4ZWUzXHU4ZWZjXHU4ZWZiXHU4ZWViXHU4ZWZlXHU4''@;'; put 'put ''ZjBhXHU4ZjA1XHU4ZjE1XHU4ZjEyXHU4ZjE5XHU4ZjEzXHU4ZjFjXHU4ZjFmXHU4ZjFiXHU4ZjBjXHU4ZjI2XHU4ZjMzXHU4ZjNiXHU4ZjM5XHU4ZjQ1XHU4ZjQyXHU4ZjNlXHU4ZjRjXHU4ZjQ5XHU4ZjQ2XHU4ZjRlXHU4ZjU3XHU4ZjVjXHVmZmZkXHU4ZjYyXHU4ZjYzXHU4ZjY0XHU4Zjlj''@;'; put 'put ''XHU4ZjlmXHU4ZmEzXHU4ZmFkXHU4ZmFmXHU4ZmI3XHU4ZmRhXHU4ZmU1XHU4ZmUyXHU4ZmVhXHU4ZmVmXHU5MDg3XHU4ZmY0XHU5MDA1XHU4ZmY5XHU4ZmZhXHU5MDExXHU5MDE1XHU5MDIxXHU5MDBkXHU5MDFlXHU5MDE2XHU5MDBiXHU5MDI3XHU5MDM2XHU5MDM1XHU5MDM5XHU4ZmY4XHU5''@;'; put 'put ''MDRmXHU5MDUwXHU5MDUxXHU5MDUyXHU5MDBlXHU5MDQ5XHU5MDNlXHU5MDU2XHU5MDU4XHU5MDVlXHU5MDY4XHU5MDZmXHU5MDc2XHU5NmE4XHU5MDcyXHU5MDgyXHU5MDdkXHU5MDgxXHU5MDgwXHU5MDhhXHU5MDg5XHU5MDhmXHU5MGE4XHU5MGFmXHU5MGIxXHU5MGI1XHU5MGUyXHU5MGU0''@;'; put 'put ''XHU2MjQ4XHU5MGRiXHU5MTAyXHU5MTEyXHU5MTE5XHU5MTMyXHU5MTMwXHU5MTRhXHU5MTU2XHU5MTU4XHU5MTYzXHU5MTY1XHU5MTY5XHU5MTczXHU5MTcyXHU5MThiXHU5MTg5XHU5MTgyXHU5MWEyXHU5MWFiXHU5MWFmXHU5MWFhXHU5MWI1XHU5MWI0XHU5MWJhXHU5MWMwXHU5MWMxXHU5''@;'; put 'put ''MWM5XHU5MWNiXHU5MWQwXHU5MWQ2XHU5MWRmXHU5MWUxXHU5MWRiXHU5MWZjXHU5MWY1XHU5MWY2XHU5MjFlXHU5MWZmXHU5MjE0XHU5MjJjXHU5MjE1XHU5MjExXHU5MjVlXHU5MjU3XHU5MjQ1XHU5MjQ5XHU5MjY0XHU5MjQ4XHU5Mjk1XHU5MjNmXHU5MjRiXHU5MjUwXHU5MjljXHU5Mjk2''@;'; put 'put ''XHU5MjkzXHU5MjliXHU5MjVhXHU5MmNmXHU5MmI5XHU5MmI3XHU5MmU5XHU5MzBmXHU5MmZhXHU5MzQ0XHU5MzJlXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjMxXS5sZW5ndGg7KytnKTY1NTMzIT09X1syMzFdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjMxXVtn''@;'; put 'put ''XV09NTkxMzYrZyx5WzU5MTM2K2ddPV9bMjMxXVtnXSk7Zm9yKF9bMjMyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MzE5XHU5MzIyXHU5MzFhXHU5MzIzXHU5MzNhXHU5MzM1XHU5MzNiXHU5MzVjXHU5MzYwXHU5MzdjXHU5MzZl''@;'; put 'put ''XHU5MzU2XHU5M2IwXHU5M2FjXHU5M2FkXHU5Mzk0XHU5M2I5XHU5M2Q2XHU5M2Q3XHU5M2U4XHU5M2U1XHU5M2Q4XHU5M2MzXHU5M2RkXHU5M2QwXHU5M2M4XHU5M2U0XHU5NDFhXHU5NDE0XHU5NDEzXHU5NDAzXHU5NDA3XHU5NDEwXHU5NDM2XHU5NDJiXHU5NDM1XHU5NDIxXHU5NDNhXHU5''@;'; put 'put ''NDQxXHU5NDUyXHU5NDQ0XHU5NDViXHU5NDYwXHU5NDYyXHU5NDVlXHU5NDZhXHU5MjI5XHU5NDcwXHU5NDc1XHU5NDc3XHU5NDdkXHU5NDVhXHU5NDdjXHU5NDdlXHU5NDgxXHU5NDdmXHU5NTgyXHU5NTg3XHU5NThhXHU5NTk0XHU5NTk2XHU5NTk4XHU5NTk5XHVmZmZkXHU5NWEwXHU5NWE4''@;'; put 'put ''XHU5NWE3XHU5NWFkXHU5NWJjXHU5NWJiXHU5NWI5XHU5NWJlXHU5NWNhXHU2ZmY2XHU5NWMzXHU5NWNkXHU5NWNjXHU5NWQ1XHU5NWQ0XHU5NWQ2XHU5NWRjXHU5NWUxXHU5NWU1XHU5NWUyXHU5NjIxXHU5NjI4XHU5NjJlXHU5NjJmXHU5NjQyXHU5NjRjXHU5NjRmXHU5NjRiXHU5Njc3XHU5''@;'; put 'put ''NjVjXHU5NjVlXHU5NjVkXHU5NjVmXHU5NjY2XHU5NjcyXHU5NjZjXHU5NjhkXHU5Njk4XHU5Njk1XHU5Njk3XHU5NmFhXHU5NmE3XHU5NmIxXHU5NmIyXHU5NmIwXHU5NmI0XHU5NmI2XHU5NmI4XHU5NmI5XHU5NmNlXHU5NmNiXHU5NmM5XHU5NmNkXHU4OTRkXHU5NmRjXHU5NzBkXHU5NmQ1''@;'; put 'put ''XHU5NmY5XHU5NzA0XHU5NzA2XHU5NzA4XHU5NzEzXHU5NzBlXHU5NzExXHU5NzBmXHU5NzE2XHU5NzE5XHU5NzI0XHU5NzJhXHU5NzMwXHU5NzM5XHU5NzNkXHU5NzNlXHU5NzQ0XHU5NzQ2XHU5NzQ4XHU5NzQyXHU5NzQ5XHU5NzVjXHU5NzYwXHU5NzY0XHU5NzY2XHU5NzY4XHU1MmQyXHU5''@;'; put 'put ''NzZiXHU5NzcxXHU5Nzc5XHU5Nzg1XHU5NzdjXHU5NzgxXHU5NzdhXHU5Nzg2XHU5NzhiXHU5NzhmXHU5NzkwXHU5NzljXHU5N2E4XHU5N2E2XHU5N2EzXHU5N2IzXHU5N2I0XHU5N2MzXHU5N2M2XHU5N2M4XHU5N2NiXHU5N2RjXHU5N2VkXHU5ZjRmXHU5N2YyXHU3YWRmXHU5N2Y2XHU5N2Y1''@;'; put 'put ''XHU5ODBmXHU5ODBjXHU5ODM4XHU5ODI0XHU5ODIxXHU5ODM3XHU5ODNkXHU5ODQ2XHU5ODRmXHU5ODRiXHU5ODZiXHU5ODZmXHU5ODcwXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjMyXS5sZW5ndGg7KytnKTY1NTMzIT09X1syMzJdW2ddLmNoYXJDb2RlQXQoMCkm''@;'; put 'put ''JihJW19bMjMyXVtnXV09NTkzOTIrZyx5WzU5MzkyK2ddPV9bMjMyXVtnXSk7Zm9yKF9bMjMzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5ODcxXHU5ODc0XHU5ODczXHU5OGFhXHU5OGFmXHU5OGIxXHU5OGI2XHU5OGM0XHU5OGMz''@;'; put 'put ''XHU5OGM2XHU5OGU5XHU5OGViXHU5OTAzXHU5OTA5XHU5OTEyXHU5OTE0XHU5OTE4XHU5OTIxXHU5OTFkXHU5OTFlXHU5OTI0XHU5OTIwXHU5OTJjXHU5OTJlXHU5OTNkXHU5OTNlXHU5OTQyXHU5OTQ5XHU5OTQ1XHU5OTUwXHU5OTRiXHU5OTUxXHU5OTUyXHU5OTRjXHU5OTU1XHU5OTk3XHU5''@;'; put 'put ''OTk4XHU5OWE1XHU5OWFkXHU5OWFlXHU5OWJjXHU5OWRmXHU5OWRiXHU5OWRkXHU5OWQ4XHU5OWQxXHU5OWVkXHU5OWVlXHU5OWYxXHU5OWYyXHU5OWZiXHU5OWY4XHU5YTAxXHU5YTBmXHU5YTA1XHU5OWUyXHU5YTE5XHU5YTJiXHU5YTM3XHU5YTQ1XHU5YTQyXHU5YTQwXHU5YTQzXHVmZmZk''@;'; put 'put ''XHU5YTNlXHU5YTU1XHU5YTRkXHU5YTViXHU5YTU3XHU5YTVmXHU5YTYyXHU5YTY1XHU5YTY0XHU5YTY5XHU5YTZiXHU5YTZhXHU5YWFkXHU5YWIwXHU5YWJjXHU5YWMwXHU5YWNmXHU5YWQxXHU5YWQzXHU5YWQ0XHU5YWRlXHU5YWRmXHU5YWUyXHU5YWUzXHU5YWU2XHU5YWVmXHU5YWViXHU5''@;'; put 'put ''YWVlXHU5YWY0XHU5YWYxXHU5YWY3XHU5YWZiXHU5YjA2XHU5YjE4XHU5YjFhXHU5YjFmXHU5YjIyXHU5YjIzXHU5YjI1XHU5YjI3XHU5YjI4XHU5YjI5XHU5YjJhXHU5YjJlXHU5YjJmXHU5YjMyXHU5YjQ0XHU5YjQzXHU5YjRmXHU5YjRkXHU5YjRlXHU5YjUxXHU5YjU4XHU5Yjc0XHU5Yjkz''@;'; put 'put ''XHU5YjgzXHU5YjkxXHU5Yjk2XHU5Yjk3XHU5YjlmXHU5YmEwXHU5YmE4XHU5YmI0XHU5YmMwXHU5YmNhXHU5YmI5XHU5YmM2XHU5YmNmXHU5YmQxXHU5YmQyXHU5YmUzXHU5YmUyXHU5YmU0XHU5YmQ0XHU5YmUxXHU5YzNhXHU5YmYyXHU5YmYxXHU5YmYwXHU5YzE1XHU5YzE0XHU5YzA5XHU5''@;'; put 'put ''YzEzXHU5YzBjXHU5YzA2XHU5YzA4XHU5YzEyXHU5YzBhXHU5YzA0XHU5YzJlXHU5YzFiXHU5YzI1XHU5YzI0XHU5YzIxXHU5YzMwXHU5YzQ3XHU5YzMyXHU5YzQ2XHU5YzNlXHU5YzVhXHU5YzYwXHU5YzY3XHU5Yzc2XHU5Yzc4XHU5Y2U3XHU5Y2VjXHU5Y2YwXHU5ZDA5XHU5ZDA4XHU5Y2Vi''@;'; put 'put ''XHU5ZDAzXHU5ZDA2XHU5ZDJhXHU5ZDI2XHU5ZGFmXHU5ZDIzXHU5ZDFmXHU5ZDQ0XHU5ZDE1XHU5ZDEyXHU5ZDQxXHU5ZDNmXHU5ZDNlXHU5ZDQ2XHU5ZDQ4XHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjMzXS5sZW5ndGg7KytnKTY1NTMzIT09X1syMzNdW2ddLmNo''@;'; put 'put ''YXJDb2RlQXQoMCkmJihJW19bMjMzXVtnXV09NTk2NDgrZyx5WzU5NjQ4K2ddPV9bMjMzXVtnXSk7Zm9yKF9bMjM0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5ZDVkXHU5ZDVlXHU5ZDY0XHU5ZDUxXHU5ZDUwXHU5ZDU5XHU5ZDcy''@;'; put 'put ''XHU5ZDg5XHU5ZDg3XHU5ZGFiXHU5ZDZmXHU5ZDdhXHU5ZDlhXHU5ZGE0XHU5ZGE5XHU5ZGIyXHU5ZGM0XHU5ZGMxXHU5ZGJiXHU5ZGI4XHU5ZGJhXHU5ZGM2XHU5ZGNmXHU5ZGMyXHU5ZGQ5XHU5ZGQzXHU5ZGY4XHU5ZGU2XHU5ZGVkXHU5ZGVmXHU5ZGZkXHU5ZTFhXHU5ZTFiXHU5ZTFlXHU5''@;'; put 'put ''ZTc1XHU5ZTc5XHU5ZTdkXHU5ZTgxXHU5ZTg4XHU5ZThiXHU5ZThjXHU5ZTkyXHU5ZTk1XHU5ZTkxXHU5ZTlkXHU5ZWE1XHU5ZWE5XHU5ZWI4XHU5ZWFhXHU5ZWFkXHU5NzYxXHU5ZWNjXHU5ZWNlXHU5ZWNmXHU5ZWQwXHU5ZWQ0XHU5ZWRjXHU5ZWRlXHU5ZWRkXHU5ZWUwXHU5ZWU1XHU5ZWU4''@;'; put 'put ''XHU5ZWVmXHVmZmZkXHU5ZWY0XHU5ZWY2XHU5ZWY3XHU5ZWY5XHU5ZWZiXHU5ZWZjXHU5ZWZkXHU5ZjA3XHU5ZjA4XHU3NmI3XHU5ZjE1XHU5ZjIxXHU5ZjJjXHU5ZjNlXHU5ZjRhXHU5ZjUyXHU5ZjU0XHU5ZjYzXHU5ZjVmXHU5ZjYwXHU5ZjYxXHU5ZjY2XHU5ZjY3XHU5ZjZjXHU5ZjZhXHU5''@;'; put 'put ''Zjc3XHU5ZjcyXHU5Zjc2XHU5Zjk1XHU5ZjljXHU5ZmEwXHU1ODJmXHU2OWM3XHU5MDU5XHU3NDY0XHU1MWRjXHU3MTk5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjM0XS5sZW5ndGg7KytnKTY1NTMzIT09''@;'; put 'put ''X1syMzRdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjM0XVtnXV09NTk5MDQrZyx5WzU5OTA0K2ddPV9bMjM0XVtnXSk7Zm9yKF9bMjM3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ZThhXHU4OTFjXHU5MzQ4XHU5Mjg4XHU4NGRj''@;'; put 'put ''XHU0ZmM5XHU3MGJiXHU2NjMxXHU2OGM4XHU5MmY5XHU2NmZiXHU1ZjQ1XHU0ZTI4XHU0ZWUxXHU0ZWZjXHU0ZjAwXHU0ZjAzXHU0ZjM5XHU0ZjU2XHU0ZjkyXHU0ZjhhXHU0ZjlhXHU0Zjk0XHU0ZmNkXHU1MDQwXHU1MDIyXHU0ZmZmXHU1MDFlXHU1MDQ2XHU1MDcwXHU1MDQyXHU1MDk0XHU1''@;'; put 'put ''MGY0XHU1MGQ4XHU1MTRhXHU1MTY0XHU1MTlkXHU1MWJlXHU1MWVjXHU1MjE1XHU1MjljXHU1MmE2XHU1MmMwXHU1MmRiXHU1MzAwXHU1MzA3XHU1MzI0XHU1MzcyXHU1MzkzXHU1M2IyXHU1M2RkXHVmYTBlXHU1NDljXHU1NDhhXHU1NGE5XHU1NGZmXHU1NTg2XHU1NzU5XHU1NzY1XHU1N2Fj''@;'; put 'put ''XHU1N2M4XHU1N2M3XHVmYTBmXHVmZmZkXHVmYTEwXHU1ODllXHU1OGIyXHU1OTBiXHU1OTUzXHU1OTViXHU1OTVkXHU1OTYzXHU1OWE0XHU1OWJhXHU1YjU2XHU1YmMwXHU3NTJmXHU1YmQ4XHU1YmVjXHU1YzFlXHU1Y2E2XHU1Y2JhXHU1Y2Y1XHU1ZDI3XHU1ZDUzXHVmYTExXHU1ZDQyXHU1''@;'; put 'put ''ZDZkXHU1ZGI4XHU1ZGI5XHU1ZGQwXHU1ZjIxXHU1ZjM0XHU1ZjY3XHU1ZmI3XHU1ZmRlXHU2MDVkXHU2MDg1XHU2MDhhXHU2MGRlXHU2MGQ1XHU2MTIwXHU2MGYyXHU2MTExXHU2MTM3XHU2MTMwXHU2MTk4XHU2MjEzXHU2MmE2XHU2M2Y1XHU2NDYwXHU2NDlkXHU2NGNlXHU2NTRlXHU2NjAw''@;'; put 'put ''XHU2NjE1XHU2NjNiXHU2NjA5XHU2NjJlXHU2NjFlXHU2NjI0XHU2NjY1XHU2NjU3XHU2NjU5XHVmYTEyXHU2NjczXHU2Njk5XHU2NmEwXHU2NmIyXHU2NmJmXHU2NmZhXHU2NzBlXHVmOTI5XHU2NzY2XHU2N2JiXHU2ODUyXHU2N2MwXHU2ODAxXHU2ODQ0XHU2OGNmXHVmYTEzXHU2OTY4XHVm''@;'; put 'put ''YTE0XHU2OTk4XHU2OWUyXHU2YTMwXHU2YTZiXHU2YTQ2XHU2YTczXHU2YTdlXHU2YWUyXHU2YWU0XHU2YmQ2XHU2YzNmXHU2YzVjXHU2Yzg2XHU2YzZmXHU2Y2RhXHU2ZDA0XHU2ZDg3XHU2ZDZmXHU2ZDk2XHU2ZGFjXHU2ZGNmXHU2ZGY4XHU2ZGYyXHU2ZGZjXHU2ZTM5XHU2ZTVjXHU2ZTI3''@;'; put 'put ''XHU2ZTNjXHU2ZWJmXHU2Zjg4XHU2ZmI1XHU2ZmY1XHU3MDA1XHU3MDA3XHU3MDI4XHU3MDg1XHU3MGFiXHU3MTBmXHU3MTA0XHU3MTVjXHU3MTQ2XHU3MTQ3XHVmYTE1XHU3MWMxXHU3MWZlXHU3MmIxXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjM3XS5sZW5ndGg7''@;'; put 'put ''KytnKTY1NTMzIT09X1syMzddW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjM3XVtnXV09NjA2NzIrZyx5WzYwNjcyK2ddPV9bMjM3XVtnXSk7Zm9yKF9bMjM4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3MmJlXHU3MzI0XHVmYTE2''@;'; put 'put ''XHU3Mzc3XHU3M2JkXHU3M2M5XHU3M2Q2XHU3M2UzXHU3M2QyXHU3NDA3XHU3M2Y1XHU3NDI2XHU3NDJhXHU3NDI5XHU3NDJlXHU3NDYyXHU3NDg5XHU3NDlmXHU3NTAxXHU3NTZmXHU3NjgyXHU3NjljXHU3NjllXHU3NjliXHU3NmE2XHVmYTE3XHU3NzQ2XHU1MmFmXHU3ODIxXHU3ODRlXHU3''@;'; put 'put ''ODY0XHU3ODdhXHU3OTMwXHVmYTE4XHVmYTE5XHVmYTFhXHU3OTk0XHVmYTFiXHU3OTliXHU3YWQxXHU3YWU3XHVmYTFjXHU3YWViXHU3YjllXHVmYTFkXHU3ZDQ4XHU3ZDVjXHU3ZGI3XHU3ZGEwXHU3ZGQ2XHU3ZTUyXHU3ZjQ3XHU3ZmExXHVmYTFlXHU4MzAxXHU4MzYyXHU4MzdmXHU4M2M3''@;'; put 'put ''XHU4M2Y2XHU4NDQ4XHU4NGI0XHU4NTUzXHU4NTU5XHVmZmZkXHU4NTZiXHVmYTFmXHU4NWIwXHVmYTIwXHVmYTIxXHU4ODA3XHU4OGY1XHU4YTEyXHU4YTM3XHU4YTc5XHU4YWE3XHU4YWJlXHU4YWRmXHVmYTIyXHU4YWY2XHU4YjUzXHU4YjdmXHU4Y2YwXHU4Y2Y0XHU4ZDEyXHU4ZDc2XHVm''@;'; put 'put ''YTIzXHU4ZWNmXHVmYTI0XHVmYTI1XHU5MDY3XHU5MGRlXHVmYTI2XHU5MTE1XHU5MTI3XHU5MWRhXHU5MWQ3XHU5MWRlXHU5MWVkXHU5MWVlXHU5MWU0XHU5MWU1XHU5MjA2XHU5MjEwXHU5MjBhXHU5MjNhXHU5MjQwXHU5MjNjXHU5MjRlXHU5MjU5XHU5MjUxXHU5MjM5XHU5MjY3XHU5MmE3''@;'; put 'put ''XHU5Mjc3XHU5Mjc4XHU5MmU3XHU5MmQ3XHU5MmQ5XHU5MmQwXHVmYTI3XHU5MmQ1XHU5MmUwXHU5MmQzXHU5MzI1XHU5MzIxXHU5MmZiXHVmYTI4XHU5MzFlXHU5MmZmXHU5MzFkXHU5MzAyXHU5MzcwXHU5MzU3XHU5M2E0XHU5M2M2XHU5M2RlXHU5M2Y4XHU5NDMxXHU5NDQ1XHU5NDQ4XHU5''@;'; put 'put ''NTkyXHVmOWRjXHVmYTI5XHU5NjlkXHU5NmFmXHU5NzMzXHU5NzNiXHU5NzQzXHU5NzRkXHU5NzRmXHU5NzUxXHU5NzU1XHU5ODU3XHU5ODY1XHVmYTJhXHVmYTJiXHU5OTI3XHVmYTJjXHU5OTllXHU5YTRlXHU5YWQ5XHU5YWRjXHU5Yjc1XHU5YjcyXHU5YjhmXHU5YmIxXHU5YmJiXHU5YzAw''@;'; put 'put ''XHU5ZDcwXHU5ZDZiXHVmYTJkXHU5ZTE5XHU5ZWQxXHVmZmZkXHVmZmZkXHUyMTcwXHUyMTcxXHUyMTcyXHUyMTczXHUyMTc0XHUyMTc1XHUyMTc2XHUyMTc3XHUyMTc4XHUyMTc5XHVmZmUyXHVmZmU0XHVmZjA3XHVmZjAyXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9b''@;'; put 'put ''MjM4XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMzhdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjM4XVtnXV09NjA5MjgrZyx5WzYwOTI4K2ddPV9bMjM4XVtnXSk7Zm9yKF9bMjUwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMTcw''@;'; put 'put ''XHUyMTcxXHUyMTcyXHUyMTczXHUyMTc0XHUyMTc1XHUyMTc2XHUyMTc3XHUyMTc4XHUyMTc5XHUyMTYwXHUyMTYxXHUyMTYyXHUyMTYzXHUyMTY0XHUyMTY1XHUyMTY2XHUyMTY3XHUyMTY4XHUyMTY5XHVmZmUyXHVmZmU0XHVmZjA3XHVmZjAyXHUzMjMxXHUyMTE2XHUyMTIxXHUyMjM1XHU3''@;'; put 'put ''ZThhXHU4OTFjXHU5MzQ4XHU5Mjg4XHU4NGRjXHU0ZmM5XHU3MGJiXHU2NjMxXHU2OGM4XHU5MmY5XHU2NmZiXHU1ZjQ1XHU0ZTI4XHU0ZWUxXHU0ZWZjXHU0ZjAwXHU0ZjAzXHU0ZjM5XHU0ZjU2XHU0ZjkyXHU0ZjhhXHU0ZjlhXHU0Zjk0XHU0ZmNkXHU1MDQwXHU1MDIyXHU0ZmZmXHU1MDFl''@;'; put 'put ''XHU1MDQ2XHU1MDcwXHU1MDQyXHU1MDk0XHU1MGY0XHU1MGQ4XHU1MTRhXHVmZmZkXHU1MTY0XHU1MTlkXHU1MWJlXHU1MWVjXHU1MjE1XHU1MjljXHU1MmE2XHU1MmMwXHU1MmRiXHU1MzAwXHU1MzA3XHU1MzI0XHU1MzcyXHU1MzkzXHU1M2IyXHU1M2RkXHVmYTBlXHU1NDljXHU1NDhhXHU1''@;'; put 'put ''NGE5XHU1NGZmXHU1NTg2XHU1NzU5XHU1NzY1XHU1N2FjXHU1N2M4XHU1N2M3XHVmYTBmXHVmYTEwXHU1ODllXHU1OGIyXHU1OTBiXHU1OTUzXHU1OTViXHU1OTVkXHU1OTYzXHU1OWE0XHU1OWJhXHU1YjU2XHU1YmMwXHU3NTJmXHU1YmQ4XHU1YmVjXHU1YzFlXHU1Y2E2XHU1Y2JhXHU1Y2Y1''@;'; put 'put ''XHU1ZDI3XHU1ZDUzXHVmYTExXHU1ZDQyXHU1ZDZkXHU1ZGI4XHU1ZGI5XHU1ZGQwXHU1ZjIxXHU1ZjM0XHU1ZjY3XHU1ZmI3XHU1ZmRlXHU2MDVkXHU2MDg1XHU2MDhhXHU2MGRlXHU2MGQ1XHU2MTIwXHU2MGYyXHU2MTExXHU2MTM3XHU2MTMwXHU2MTk4XHU2MjEzXHU2MmE2XHU2M2Y1XHU2''@;'; put 'put ''NDYwXHU2NDlkXHU2NGNlXHU2NTRlXHU2NjAwXHU2NjE1XHU2NjNiXHU2NjA5XHU2NjJlXHU2NjFlXHU2NjI0XHU2NjY1XHU2NjU3XHU2NjU5XHVmYTEyXHU2NjczXHU2Njk5XHU2NmEwXHU2NmIyXHU2NmJmXHU2NmZhXHU2NzBlXHVmOTI5XHU2NzY2XHU2N2JiXHU2ODUyXHU2N2MwXHU2ODAx''@;'; put 'put ''XHU2ODQ0XHU2OGNmXHVmYTEzXHU2OTY4XHVmYTE0XHU2OTk4XHU2OWUyXHU2YTMwXHU2YTZiXHU2YTQ2XHU2YTczXHU2YTdlXHU2YWUyXHU2YWU0XHU2YmQ2XHU2YzNmXHU2YzVjXHU2Yzg2XHU2YzZmXHU2Y2RhXHU2ZDA0XHU2ZDg3XHU2ZDZmXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgi''@;'; put 'put ''IiksZz0wO2chPV9bMjUwXS5sZW5ndGg7KytnKTY1NTMzIT09X1syNTBdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjUwXVtnXV09NjRlMytnLHlbNjRlMytnXT1fWzI1MF1bZ10pO2ZvcihfWzI1MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1NmQ5Nlx1NmRhY1x1NmRjZlx1NmRmOFx1NmRmMlx1NmRmY1x1NmUzOVx1NmU1Y1x1NmUyN1x1NmUzY1x1NmViZlx1NmY4OFx1NmZiNVx1NmZmNVx1NzAwNVx1NzAwN1x1NzAyOFx1NzA4NVx1NzBhYlx1NzEwZlx1NzEwNFx1NzE1Y1x1NzE0Nlx1NzE0N1x1ZmExNVx1NzFjMVx1NzFm''@;'; put 'put ''ZVx1NzJiMVx1NzJiZVx1NzMyNFx1ZmExNlx1NzM3N1x1NzNiZFx1NzNjOVx1NzNkNlx1NzNlM1x1NzNkMlx1NzQwN1x1NzNmNVx1NzQyNlx1NzQyYVx1NzQyOVx1NzQyZVx1NzQ2Mlx1NzQ4OVx1NzQ5Zlx1NzUwMVx1NzU2Zlx1NzY4Mlx1NzY5Y1x1NzY5ZVx1NzY5Ylx1NzZhNlx1ZmExN1x1''@;'; put 'put ''Nzc0Nlx1NTJhZlx1NzgyMVx1Nzg0ZVx1Nzg2NFx1Nzg3YVx1NzkzMFx1ZmExOFx1ZmExOVx1ZmZmZFx1ZmExYVx1Nzk5NFx1ZmExYlx1Nzk5Ylx1N2FkMVx1N2FlN1x1ZmExY1x1N2FlYlx1N2I5ZVx1ZmExZFx1N2Q0OFx1N2Q1Y1x1N2RiN1x1N2RhMFx1N2RkNlx1N2U1Mlx1N2Y0N1x1N2Zh''@;'; put 'put ''MVx1ZmExZVx1ODMwMVx1ODM2Mlx1ODM3Zlx1ODNjN1x1ODNmNlx1ODQ0OFx1ODRiNFx1ODU1M1x1ODU1OVx1ODU2Ylx1ZmExZlx1ODViMFx1ZmEyMFx1ZmEyMVx1ODgwN1x1ODhmNVx1OGExMlx1OGEzN1x1OGE3OVx1OGFhN1x1OGFiZVx1OGFkZlx1ZmEyMlx1OGFmNlx1OGI1M1x1OGI3Zlx1''@;'; put 'put ''OGNmMFx1OGNmNFx1OGQxMlx1OGQ3Nlx1ZmEyM1x1OGVjZlx1ZmEyNFx1ZmEyNVx1OTA2N1x1OTBkZVx1ZmEyNlx1OTExNVx1OTEyN1x1OTFkYVx1OTFkN1x1OTFkZVx1OTFlZFx1OTFlZVx1OTFlNFx1OTFlNVx1OTIwNlx1OTIxMFx1OTIwYVx1OTIzYVx1OTI0MFx1OTIzY1x1OTI0ZVx1OTI1''@;'; put 'put ''OVx1OTI1MVx1OTIzOVx1OTI2N1x1OTJhN1x1OTI3N1x1OTI3OFx1OTJlN1x1OTJkN1x1OTJkOVx1OTJkMFx1ZmEyN1x1OTJkNVx1OTJlMFx1OTJkM1x1OTMyNVx1OTMyMVx1OTJmYlx1ZmEyOFx1OTMxZVx1OTJmZlx1OTMxZFx1OTMwMlx1OTM3MFx1OTM1N1x1OTNhNFx1OTNjNlx1OTNkZVx1''@;'; put 'put ''OTNmOFx1OTQzMVx1OTQ0NVx1OTQ0OFx1OTU5Mlx1ZjlkY1x1ZmEyOVx1OTY5ZFx1OTZhZlx1OTczM1x1OTczYlx1OTc0M1x1OTc0ZFx1OTc0Zlx1OTc1MVx1OTc1NVx1OTg1N1x1OTg2NVx1ZmEyYVx1ZmEyYlx1OTkyN1x1ZmEyY1x1OTk5ZVx1OWE0ZVx1OWFkOVx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzI1MV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjUxXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI1MV1bZ11dPTY0MjU2K2cseVs2NDI1NitnXT1fWzI1MV1bZ10pO2ZvcihfWzI1Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1OWFkY1x1OWI3NVx1OWI3Mlx1OWI4Zlx1OWJiMVx1OWJiYlx1OWMwMFx1OWQ3MFx1OWQ2Ylx1ZmEyZFx1OWUxOVx1OWVkMVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzI1Ml0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjUyXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI1Ml1bZ11dPTY0NTEyK2cseVs2NDUxMitnXT1fWzI1Ml1bZ10pO3JldHVybntlbmM6SSxkZWM6eX19KCksWFs5MzZdPWZ1bmN0aW9u''@;'; put 'put ''KCl7dmFyIGcseT1bXSxJPXt9LF89W107Zm9yKF9bMF09IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4v''@;'; put 'put ''MDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHUyMGFjXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1swXVtnXV09MCtnLHlbMCtnXT1fWzBdW2ddKTtmb3IoX1sxMjldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRlMDJcdTRlMDRcdTRlMDVcdTRlMDZcdTRlMGZcdTRlMTJcdTRlMTdcdTRlMWZcdTRlMjBcdTRlMjFcdTRlMjNcdTRlMjZcdTRlMjlcdTRlMmVcdTRlMmZcdTRlMzFcdTRlMzNcdTRlMzVcdTRlMzdcdTRlM2NcdTRlNDBcdTRlNDFcdTRlNDJc''@;'; put 'put ''dTRlNDRcdTRlNDZcdTRlNGFcdTRlNTFcdTRlNTVcdTRlNTdcdTRlNWFcdTRlNWJcdTRlNjJcdTRlNjNcdTRlNjRcdTRlNjVcdTRlNjdcdTRlNjhcdTRlNmFcdTRlNmJcdTRlNmNcdTRlNmRcdTRlNmVcdTRlNmZcdTRlNzJcdTRlNzRcdTRlNzVcdTRlNzZcdTRlNzdcdTRlNzhcdTRlNzlcdTRl''@;'; put 'put ''N2FcdTRlN2JcdTRlN2NcdTRlN2RcdTRlN2ZcdTRlODBcdTRlODFcdTRlODJcdTRlODNcdTRlODRcdTRlODVcdTRlODdcdTRlOGFcdWZmZmRcdTRlOTBcdTRlOTZcdTRlOTdcdTRlOTlcdTRlOWNcdTRlOWRcdTRlOWVcdTRlYTNcdTRlYWFcdTRlYWZcdTRlYjBcdTRlYjFcdTRlYjRcdTRlYjZc''@;'; put 'put ''dTRlYjdcdTRlYjhcdTRlYjlcdTRlYmNcdTRlYmRcdTRlYmVcdTRlYzhcdTRlY2NcdTRlY2ZcdTRlZDBcdTRlZDJcdTRlZGFcdTRlZGJcdTRlZGNcdTRlZTBcdTRlZTJcdTRlZTZcdTRlZTdcdTRlZTlcdTRlZWRcdTRlZWVcdTRlZWZcdTRlZjFcdTRlZjRcdTRlZjhcdTRlZjlcdTRlZmFcdTRl''@;'; put 'put ''ZmNcdTRlZmVcdTRmMDBcdTRmMDJcdTRmMDNcdTRmMDRcdTRmMDVcdTRmMDZcdTRmMDdcdTRmMDhcdTRmMGJcdTRmMGNcdTRmMTJcdTRmMTNcdTRmMTRcdTRmMTVcdTRmMTZcdTRmMWNcdTRmMWRcdTRmMjFcdTRmMjNcdTRmMjhcdTRmMjlcdTRmMmNcdTRmMmRcdTRmMmVcdTRmMzFcdTRmMzNc''@;'; put 'put ''dTRmMzVcdTRmMzdcdTRmMzlcdTRmM2JcdTRmM2VcdTRmM2ZcdTRmNDBcdTRmNDFcdTRmNDJcdTRmNDRcdTRmNDVcdTRmNDdcdTRmNDhcdTRmNDlcdTRmNGFcdTRmNGJcdTRmNGNcdTRmNTJcdTRmNTRcdTRmNTZcdTRmNjFcdTRmNjJcdTRmNjZcdTRmNjhcdTRmNmFcdTRmNmJcdTRmNmRcdTRm''@;'; put 'put ''NmVcdTRmNzFcdTRmNzJcdTRmNzVcdTRmNzdcdTRmNzhcdTRmNzlcdTRmN2FcdTRmN2RcdTRmODBcdTRmODFcdTRmODJcdTRmODVcdTRmODZcdTRmODdcdTRmOGFcdTRmOGNcdTRmOGVcdTRmOTBcdTRmOTJcdTRmOTNcdTRmOTVcdTRmOTZcdTRmOThcdTRmOTlcdTRmOWFcdTRmOWNcdTRmOWVc''@;'; put 'put ''dTRmOWZcdTRmYTFcdTRmYTJcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxMjldLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzEyOV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxMjldW2ddXT0zMzAyNCtnLHlbMzMwMjQrZ109X1sxMjldW2ddKTtmb3IoX1sxMzBdPSJcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRmYTRcdTRmYWJcdTRmYWRcdTRmYjBcdTRmYjFcdTRmYjJcdTRmYjNcdTRmYjRcdTRmYjZcdTRmYjdcdTRmYjhcdTRmYjlcdTRmYmFcdTRmYmJcdTRmYmNcdTRmYmRcdTRmYmVcdTRmYzBcdTRmYzFcdTRmYzJcdTRmYzZc''@;'; put 'put ''dTRmYzdcdTRmYzhcdTRmYzlcdTRmY2JcdTRmY2NcdTRmY2RcdTRmZDJcdTRmZDNcdTRmZDRcdTRmZDVcdTRmZDZcdTRmZDlcdTRmZGJcdTRmZTBcdTRmZTJcdTRmZTRcdTRmZTVcdTRmZTdcdTRmZWJcdTRmZWNcdTRmZjBcdTRmZjJcdTRmZjRcdTRmZjVcdTRmZjZcdTRmZjdcdTRmZjlcdTRm''@;'; put 'put ''ZmJcdTRmZmNcdTRmZmRcdTRmZmZcdTUwMDBcdTUwMDFcdTUwMDJcdTUwMDNcdTUwMDRcdTUwMDVcdTUwMDZcdTUwMDdcdTUwMDhcdTUwMDlcdTUwMGFcdWZmZmRcdTUwMGJcdTUwMGVcdTUwMTBcdTUwMTFcdTUwMTNcdTUwMTVcdTUwMTZcdTUwMTdcdTUwMWJcdTUwMWRcdTUwMWVcdTUwMjBc''@;'; put 'put ''dTUwMjJcdTUwMjNcdTUwMjRcdTUwMjdcdTUwMmJcdTUwMmZcdTUwMzBcdTUwMzFcdTUwMzJcdTUwMzNcdTUwMzRcdTUwMzVcdTUwMzZcdTUwMzdcdTUwMzhcdTUwMzlcdTUwM2JcdTUwM2RcdTUwM2ZcdTUwNDBcdTUwNDFcdTUwNDJcdTUwNDRcdTUwNDVcdTUwNDZcdTUwNDlcdTUwNGFcdTUw''@;'; put 'put ''NGJcdTUwNGRcdTUwNTBcdTUwNTFcdTUwNTJcdTUwNTNcdTUwNTRcdTUwNTZcdTUwNTdcdTUwNThcdTUwNTlcdTUwNWJcdTUwNWRcdTUwNWVcdTUwNWZcdTUwNjBcdTUwNjFcdTUwNjJcdTUwNjNcdTUwNjRcdTUwNjZcdTUwNjdcdTUwNjhcdTUwNjlcdTUwNmFcdTUwNmJcdTUwNmRcdTUwNmVc''@;'; put 'put ''dTUwNmZcdTUwNzBcdTUwNzFcdTUwNzJcdTUwNzNcdTUwNzRcdTUwNzVcdTUwNzhcdTUwNzlcdTUwN2FcdTUwN2NcdTUwN2RcdTUwODFcdTUwODJcdTUwODNcdTUwODRcdTUwODZcdTUwODdcdTUwODlcdTUwOGFcdTUwOGJcdTUwOGNcdTUwOGVcdTUwOGZcdTUwOTBcdTUwOTFcdTUwOTJcdTUw''@;'; put 'put ''OTNcdTUwOTRcdTUwOTVcdTUwOTZcdTUwOTdcdTUwOThcdTUwOTlcdTUwOWFcdTUwOWJcdTUwOWNcdTUwOWRcdTUwOWVcdTUwOWZcdTUwYTBcdTUwYTFcdTUwYTJcdTUwYTRcdTUwYTZcdTUwYWFcdTUwYWJcdTUwYWRcdTUwYWVcdTUwYWZcdTUwYjBcdTUwYjFcdTUwYjNcdTUwYjRcdTUwYjVc''@;'; put 'put ''dTUwYjZcdTUwYjdcdTUwYjhcdTUwYjlcdTUwYmNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxMzBdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzEzMF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxMzBdW2ddXT0zMzI4MCtnLHlbMzMyODArZ109X1sxMzBdW2ddKTtmb3IoX1sxMzFdPSJcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUwYmRcdTUwYmVcdTUwYmZcdTUwYzBcdTUwYzFcdTUwYzJcdTUwYzNcdTUwYzRcdTUwYzVcdTUwYzZcdTUwYzdcdTUwYzhcdTUwYzlcdTUwY2FcdTUwY2JcdTUwY2NcdTUwY2RcdTUwY2VcdTUwZDBc''@;'; put 'put ''dTUwZDFcdTUwZDJcdTUwZDNcdTUwZDRcdTUwZDVcdTUwZDdcdTUwZDhcdTUwZDlcdTUwZGJcdTUwZGNcdTUwZGRcdTUwZGVcdTUwZGZcdTUwZTBcdTUwZTFcdTUwZTJcdTUwZTNcdTUwZTRcdTUwZTVcdTUwZThcdTUwZTlcdTUwZWFcdTUwZWJcdTUwZWZcdTUwZjBcdTUwZjFcdTUwZjJcdTUw''@;'; put 'put ''ZjRcdTUwZjZcdTUwZjdcdTUwZjhcdTUwZjlcdTUwZmFcdTUwZmNcdTUwZmRcdTUwZmVcdTUwZmZcdTUxMDBcdTUxMDFcdTUxMDJcdTUxMDNcdTUxMDRcdTUxMDVcdTUxMDhcdWZmZmRcdTUxMDlcdTUxMGFcdTUxMGNcdTUxMGRcdTUxMGVcdTUxMGZcdTUxMTBcdTUxMTFcdTUxMTNcdTUxMTRc''@;'; put 'put ''dTUxMTVcdTUxMTZcdTUxMTdcdTUxMThcdTUxMTlcdTUxMWFcdTUxMWJcdTUxMWNcdTUxMWRcdTUxMWVcdTUxMWZcdTUxMjBcdTUxMjJcdTUxMjNcdTUxMjRcdTUxMjVcdTUxMjZcdTUxMjdcdTUxMjhcdTUxMjlcdTUxMmFcdTUxMmJcdTUxMmNcdTUxMmRcdTUxMmVcdTUxMmZcdTUxMzBcdTUx''@;'; put 'put ''MzFcdTUxMzJcdTUxMzNcdTUxMzRcdTUxMzVcdTUxMzZcdTUxMzdcdTUxMzhcdTUxMzlcdTUxM2FcdTUxM2JcdTUxM2NcdTUxM2RcdTUxM2VcdTUxNDJcdTUxNDdcdTUxNGFcdTUxNGNcdTUxNGVcdTUxNGZcdTUxNTBcdTUxNTJcdTUxNTNcdTUxNTdcdTUxNThcdTUxNTlcdTUxNWJcdTUxNWRc''@;'; put 'put ''dTUxNWVcdTUxNWZcdTUxNjBcdTUxNjFcdTUxNjNcdTUxNjRcdTUxNjZcdTUxNjdcdTUxNjlcdTUxNmFcdTUxNmZcdTUxNzJcdTUxN2FcdTUxN2VcdTUxN2ZcdTUxODNcdTUxODRcdTUxODZcdTUxODdcdTUxOGFcdTUxOGJcdTUxOGVcdTUxOGZcdTUxOTBcdTUxOTFcdTUxOTNcdTUxOTRcdTUx''@;'; put 'put ''OThcdTUxOWFcdTUxOWRcdTUxOWVcdTUxOWZcdTUxYTFcdTUxYTNcdTUxYTZcdTUxYTdcdTUxYThcdTUxYTlcdTUxYWFcdTUxYWRcdTUxYWVcdTUxYjRcdTUxYjhcdTUxYjlcdTUxYmFcdTUxYmVcdTUxYmZcdTUxYzFcdTUxYzJcdTUxYzNcdTUxYzVcdTUxYzhcdTUxY2FcdTUxY2RcdTUxY2Vc''@;'; put 'put ''dTUxZDBcdTUxZDJcdTUxZDNcdTUxZDRcdTUxZDVcdTUxZDZcdTUxZDdcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxMzFdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzEzMV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxMzFdW2ddXT0zMzUzNitnLHlbMzM1MzYrZ109X1sxMzFdW2ddKTtmb3Io''@;'; put 'put ''X1sxMzJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUxZDhcdTUxZDlcdTUxZGFcdTUxZGNcdTUxZGVcdTUxZGZcdTUxZTJcdTUxZTNcdTUxZTVcdTUxZTZcdTUxZTdcdTUxZThcdTUxZTlcdTUxZWFcdTUxZWNcdTUxZWVcdTUxZjFc''@;'; put 'put ''dTUxZjJcdTUxZjRcdTUxZjdcdTUxZmVcdTUyMDRcdTUyMDVcdTUyMDlcdTUyMGJcdTUyMGNcdTUyMGZcdTUyMTBcdTUyMTNcdTUyMTRcdTUyMTVcdTUyMWNcdTUyMWVcdTUyMWZcdTUyMjFcdTUyMjJcdTUyMjNcdTUyMjVcdTUyMjZcdTUyMjdcdTUyMmFcdTUyMmNcdTUyMmZcdTUyMzFcdTUy''@;'; put 'put ''MzJcdTUyMzRcdTUyMzVcdTUyM2NcdTUyM2VcdTUyNDRcdTUyNDVcdTUyNDZcdTUyNDdcdTUyNDhcdTUyNDlcdTUyNGJcdTUyNGVcdTUyNGZcdTUyNTJcdTUyNTNcdTUyNTVcdTUyNTdcdTUyNThcdWZmZmRcdTUyNTlcdTUyNWFcdTUyNWJcdTUyNWRcdTUyNWZcdTUyNjBcdTUyNjJcdTUyNjNc''@;'; put 'put ''dTUyNjRcdTUyNjZcdTUyNjhcdTUyNmJcdTUyNmNcdTUyNmRcdTUyNmVcdTUyNzBcdTUyNzFcdTUyNzNcdTUyNzRcdTUyNzVcdTUyNzZcdTUyNzdcdTUyNzhcdTUyNzlcdTUyN2FcdTUyN2JcdTUyN2NcdTUyN2VcdTUyODBcdTUyODNcdTUyODRcdTUyODVcdTUyODZcdTUyODdcdTUyODlcdTUy''@;'; put 'put ''OGFcdTUyOGJcdTUyOGNcdTUyOGRcdTUyOGVcdTUyOGZcdTUyOTFcdTUyOTJcdTUyOTRcdTUyOTVcdTUyOTZcdTUyOTdcdTUyOThcdTUyOTlcdTUyOWFcdTUyOWNcdTUyYTRcdTUyYTVcdTUyYTZcdTUyYTdcdTUyYWVcdTUyYWZcdTUyYjBcdTUyYjRcdTUyYjVcdTUyYjZcdTUyYjdcdTUyYjhc''@;'; put 'put ''dTUyYjlcdTUyYmFcdTUyYmJcdTUyYmNcdTUyYmRcdTUyYzBcdTUyYzFcdTUyYzJcdTUyYzRcdTUyYzVcdTUyYzZcdTUyYzhcdTUyY2FcdTUyY2NcdTUyY2RcdTUyY2VcdTUyY2ZcdTUyZDFcdTUyZDNcdTUyZDRcdTUyZDVcdTUyZDdcdTUyZDlcdTUyZGFcdTUyZGJcdTUyZGNcdTUyZGRcdTUy''@;'; put 'put ''ZGVcdTUyZTBcdTUyZTFcdTUyZTJcdTUyZTNcdTUyZTVcdTUyZTZcdTUyZTdcdTUyZThcdTUyZTlcdTUyZWFcdTUyZWJcdTUyZWNcdTUyZWRcdTUyZWVcdTUyZWZcdTUyZjFcdTUyZjJcdTUyZjNcdTUyZjRcdTUyZjVcdTUyZjZcdTUyZjdcdTUyZjhcdTUyZmJcdTUyZmNcdTUyZmRcdTUzMDFc''@;'; put 'put ''dTUzMDJcdTUzMDNcdTUzMDRcdTUzMDdcdTUzMDlcdTUzMGFcdTUzMGJcdTUzMGNcdTUzMGVcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxMzJdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzEzMl1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxMzJdW2ddXT0zMzc5MitnLHlbMzM3OTIrZ109X1sx''@;'; put 'put ''MzJdW2ddKTtmb3IoX1sxMzNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUzMTFcdTUzMTJcdTUzMTNcdTUzMTRcdTUzMThcdTUzMWJcdTUzMWNcdTUzMWVcdTUzMWZcdTUzMjJcdTUzMjRcdTUzMjVcdTUzMjdcdTUzMjhcdTUzMjlc''@;'; put 'put ''dTUzMmJcdTUzMmNcdTUzMmRcdTUzMmZcdTUzMzBcdTUzMzFcdTUzMzJcdTUzMzNcdTUzMzRcdTUzMzVcdTUzMzZcdTUzMzdcdTUzMzhcdTUzM2NcdTUzM2RcdTUzNDBcdTUzNDJcdTUzNDRcdTUzNDZcdTUzNGJcdTUzNGNcdTUzNGRcdTUzNTBcdTUzNTRcdTUzNThcdTUzNTlcdTUzNWJcdTUz''@;'; put 'put ''NWRcdTUzNjVcdTUzNjhcdTUzNmFcdTUzNmNcdTUzNmRcdTUzNzJcdTUzNzZcdTUzNzlcdTUzN2JcdTUzN2NcdTUzN2RcdTUzN2VcdTUzODBcdTUzODFcdTUzODNcdTUzODdcdTUzODhcdTUzOGFcdTUzOGVcdTUzOGZcdWZmZmRcdTUzOTBcdTUzOTFcdTUzOTJcdTUzOTNcdTUzOTRcdTUzOTZc''@;'; put 'put ''dTUzOTdcdTUzOTlcdTUzOWJcdTUzOWNcdTUzOWVcdTUzYTBcdTUzYTFcdTUzYTRcdTUzYTdcdTUzYWFcdTUzYWJcdTUzYWNcdTUzYWRcdTUzYWZcdTUzYjBcdTUzYjFcdTUzYjJcdTUzYjNcdTUzYjRcdTUzYjVcdTUzYjdcdTUzYjhcdTUzYjlcdTUzYmFcdTUzYmNcdTUzYmRcdTUzYmVcdTUz''@;'; put 'put ''YzBcdTUzYzNcdTUzYzRcdTUzYzVcdTUzYzZcdTUzYzdcdTUzY2VcdTUzY2ZcdTUzZDBcdTUzZDJcdTUzZDNcdTUzZDVcdTUzZGFcdTUzZGNcdTUzZGRcdTUzZGVcdTUzZTFcdTUzZTJcdTUzZTdcdTUzZjRcdTUzZmFcdTUzZmVcdTUzZmZcdTU0MDBcdTU0MDJcdTU0MDVcdTU0MDdcdTU0MGJc''@;'; put 'put ''dTU0MTRcdTU0MThcdTU0MTlcdTU0MWFcdTU0MWNcdTU0MjJcdTU0MjRcdTU0MjVcdTU0MmFcdTU0MzBcdTU0MzNcdTU0MzZcdTU0MzdcdTU0M2FcdTU0M2RcdTU0M2ZcdTU0NDFcdTU0NDJcdTU0NDRcdTU0NDVcdTU0NDdcdTU0NDlcdTU0NGNcdTU0NGRcdTU0NGVcdTU0NGZcdTU0NTFcdTU0''@;'; put 'put ''NWFcdTU0NWRcdTU0NWVcdTU0NWZcdTU0NjBcdTU0NjFcdTU0NjNcdTU0NjVcdTU0NjdcdTU0NjlcdTU0NmFcdTU0NmJcdTU0NmNcdTU0NmRcdTU0NmVcdTU0NmZcdTU0NzBcdTU0NzRcdTU0NzlcdTU0N2FcdTU0N2VcdTU0N2ZcdTU0ODFcdTU0ODNcdTU0ODVcdTU0ODdcdTU0ODhcdTU0ODlc''@;'; put 'put ''dTU0OGFcdTU0OGRcdTU0OTFcdTU0OTNcdTU0OTdcdTU0OThcdTU0OWNcdTU0OWVcdTU0OWZcdTU0YTBcdTU0YTFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxMzNdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzEzM11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxMzNdW2ddXT0zNDA0OCtnLHlb''@;'; put 'put ''MzQwNDgrZ109X1sxMzNdW2ddKTtmb3IoX1sxMzRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU0YTJcdTU0YTVcdTU0YWVcdTU0YjBcdTU0YjJcdTU0YjVcdTU0YjZcdTU0YjdcdTU0YjlcdTU0YmFcdTU0YmNcdTU0YmVcdTU0YzNc''@;'; put 'put ''dTU0YzVcdTU0Y2FcdTU0Y2JcdTU0ZDZcdTU0ZDhcdTU0ZGJcdTU0ZTBcdTU0ZTFcdTU0ZTJcdTU0ZTNcdTU0ZTRcdTU0ZWJcdTU0ZWNcdTU0ZWZcdTU0ZjBcdTU0ZjFcdTU0ZjRcdTU0ZjVcdTU0ZjZcdTU0ZjdcdTU0ZjhcdTU0ZjlcdTU0ZmJcdTU0ZmVcdTU1MDBcdTU1MDJcdTU1MDNcdTU1''@;'; put 'put ''MDRcdTU1MDVcdTU1MDhcdTU1MGFcdTU1MGJcdTU1MGNcdTU1MGRcdTU1MGVcdTU1MTJcdTU1MTNcdTU1MTVcdTU1MTZcdTU1MTdcdTU1MThcdTU1MTlcdTU1MWFcdTU1MWNcdTU1MWRcdTU1MWVcdTU1MWZcdTU1MjFcdTU1MjVcdTU1MjZcdWZmZmRcdTU1MjhcdTU1MjlcdTU1MmJcdTU1MmRc''@;'; put 'put ''dTU1MzJcdTU1MzRcdTU1MzVcdTU1MzZcdTU1MzhcdTU1MzlcdTU1M2FcdTU1M2JcdTU1M2RcdTU1NDBcdTU1NDJcdTU1NDVcdTU1NDdcdTU1NDhcdTU1NGJcdTU1NGNcdTU1NGRcdTU1NGVcdTU1NGZcdTU1NTFcdTU1NTJcdTU1NTNcdTU1NTRcdTU1NTdcdTU1NThcdTU1NTlcdTU1NWFcdTU1''@;'; put 'put ''NWJcdTU1NWRcdTU1NWVcdTU1NWZcdTU1NjBcdTU1NjJcdTU1NjNcdTU1NjhcdTU1NjlcdTU1NmJcdTU1NmZcdTU1NzBcdTU1NzFcdTU1NzJcdTU1NzNcdTU1NzRcdTU1NzlcdTU1N2FcdTU1N2RcdTU1N2ZcdTU1ODVcdTU1ODZcdTU1OGNcdTU1OGRcdTU1OGVcdTU1OTBcdTU1OTJcdTU1OTNc''@;'; put 'put ''dTU1OTVcdTU1OTZcdTU1OTdcdTU1OWFcdTU1OWJcdTU1OWVcdTU1YTBcdTU1YTFcdTU1YTJcdTU1YTNcdTU1YTRcdTU1YTVcdTU1YTZcdTU1YThcdTU1YTlcdTU1YWFcdTU1YWJcdTU1YWNcdTU1YWRcdTU1YWVcdTU1YWZcdTU1YjBcdTU1YjJcdTU1YjRcdTU1YjZcdTU1YjhcdTU1YmFcdTU1''@;'; put 'put ''YmNcdTU1YmZcdTU1YzBcdTU1YzFcdTU1YzJcdTU1YzNcdTU1YzZcdTU1YzdcdTU1YzhcdTU1Y2FcdTU1Y2JcdTU1Y2VcdTU1Y2ZcdTU1ZDBcdTU1ZDVcdTU1ZDdcdTU1ZDhcdTU1ZDlcdTU1ZGFcdTU1ZGJcdTU1ZGVcdTU1ZTBcdTU1ZTJcdTU1ZTdcdTU1ZTlcdTU1ZWRcdTU1ZWVcdTU1ZjBc''@;'; put 'put ''dTU1ZjFcdTU1ZjRcdTU1ZjZcdTU1ZjhcdTU1ZjlcdTU1ZmFcdTU1ZmJcdTU1ZmNcdTU1ZmZcdTU2MDJcdTU2MDNcdTU2MDRcdTU2MDVcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxMzRdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzEzNF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxMzRdW2dd''@;'; put 'put ''XT0zNDMwNCtnLHlbMzQzMDQrZ109X1sxMzRdW2ddKTtmb3IoX1sxMzVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU2MDZcdTU2MDdcdTU2MGFcdTU2MGJcdTU2MGRcdTU2MTBcdTU2MTFcdTU2MTJcdTU2MTNcdTU2MTRcdTU2MTVc''@;'; put 'put ''dTU2MTZcdTU2MTdcdTU2MTlcdTU2MWFcdTU2MWNcdTU2MWRcdTU2MjBcdTU2MjFcdTU2MjJcdTU2MjVcdTU2MjZcdTU2MjhcdTU2MjlcdTU2MmFcdTU2MmJcdTU2MmVcdTU2MmZcdTU2MzBcdTU2MzNcdTU2MzVcdTU2MzdcdTU2MzhcdTU2M2FcdTU2M2NcdTU2M2RcdTU2M2VcdTU2NDBcdTU2''@;'; put 'put ''NDFcdTU2NDJcdTU2NDNcdTU2NDRcdTU2NDVcdTU2NDZcdTU2NDdcdTU2NDhcdTU2NDlcdTU2NGFcdTU2NGJcdTU2NGZcdTU2NTBcdTU2NTFcdTU2NTJcdTU2NTNcdTU2NTVcdTU2NTZcdTU2NWFcdTU2NWJcdTU2NWRcdTU2NWVcdTU2NWZcdTU2NjBcdTU2NjFcdWZmZmRcdTU2NjNcdTU2NjVc''@;'; put 'put ''dTU2NjZcdTU2NjdcdTU2NmRcdTU2NmVcdTU2NmZcdTU2NzBcdTU2NzJcdTU2NzNcdTU2NzRcdTU2NzVcdTU2NzdcdTU2NzhcdTU2NzlcdTU2N2FcdTU2N2RcdTU2N2VcdTU2N2ZcdTU2ODBcdTU2ODFcdTU2ODJcdTU2ODNcdTU2ODRcdTU2ODdcdTU2ODhcdTU2ODlcdTU2OGFcdTU2OGJcdTU2''@;'; put 'put ''OGNcdTU2OGRcdTU2OTBcdTU2OTFcdTU2OTJcdTU2OTRcdTU2OTVcdTU2OTZcdTU2OTdcdTU2OThcdTU2OTlcdTU2OWFcdTU2OWJcdTU2OWNcdTU2OWRcdTU2OWVcdTU2OWZcdTU2YTBcdTU2YTFcdTU2YTJcdTU2YTRcdTU2YTVcdTU2YTZcdTU2YTdcdTU2YThcdTU2YTlcdTU2YWFcdTU2YWJc''@;'; put 'put ''dTU2YWNcdTU2YWRcdTU2YWVcdTU2YjBcdTU2YjFcdTU2YjJcdTU2YjNcdTU2YjRcdTU2YjVcdTU2YjZcdTU2YjhcdTU2YjlcdTU2YmFcdTU2YmJcdTU2YmRcdTU2YmVcdTU2YmZcdTU2YzBcdTU2YzFcdTU2YzJcdTU2YzNcdTU2YzRcdTU2YzVcdTU2YzZcdTU2YzdcdTU2YzhcdTU2YzlcdTU2''@;'; put 'put ''Y2JcdTU2Y2NcdTU2Y2RcdTU2Y2VcdTU2Y2ZcdTU2ZDBcdTU2ZDFcdTU2ZDJcdTU2ZDNcdTU2ZDVcdTU2ZDZcdTU2ZDhcdTU2ZDlcdTU2ZGNcdTU2ZTNcdTU2ZTVcdTU2ZTZcdTU2ZTdcdTU2ZThcdTU2ZTlcdTU2ZWFcdTU2ZWNcdTU2ZWVcdTU2ZWZcdTU2ZjJcdTU2ZjNcdTU2ZjZcdTU2Zjdc''@;'; put 'put ''dTU2ZjhcdTU2ZmJcdTU2ZmNcdTU3MDBcdTU3MDFcdTU3MDJcdTU3MDVcdTU3MDdcdTU3MGJcdTU3MGNcdTU3MGRcdTU3MGVcdTU3MGZcdTU3MTBcdTU3MTFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxMzVdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzEzNV1bZ10uY2hhckNvZGVBdCgwKSYm''@;'; put 'put ''KElbX1sxMzVdW2ddXT0zNDU2MCtnLHlbMzQ1NjArZ109X1sxMzVdW2ddKTtmb3IoX1sxMzZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU3MTJcdTU3MTNcdTU3MTRcdTU3MTVcdTU3MTZcdTU3MTdcdTU3MThcdTU3MTlcdTU3MWFc''@;'; put 'put ''dTU3MWJcdTU3MWRcdTU3MWVcdTU3MjBcdTU3MjFcdTU3MjJcdTU3MjRcdTU3MjVcdTU3MjZcdTU3MjdcdTU3MmJcdTU3MzFcdTU3MzJcdTU3MzRcdTU3MzVcdTU3MzZcdTU3MzdcdTU3MzhcdTU3M2NcdTU3M2RcdTU3M2ZcdTU3NDFcdTU3NDNcdTU3NDRcdTU3NDVcdTU3NDZcdTU3NDhcdTU3''@;'; put 'put ''NDlcdTU3NGJcdTU3NTJcdTU3NTNcdTU3NTRcdTU3NTVcdTU3NTZcdTU3NThcdTU3NTlcdTU3NjJcdTU3NjNcdTU3NjVcdTU3NjdcdTU3NmNcdTU3NmVcdTU3NzBcdTU3NzFcdTU3NzJcdTU3NzRcdTU3NzVcdTU3NzhcdTU3NzlcdTU3N2FcdTU3N2RcdTU3N2VcdTU3N2ZcdTU3ODBcdWZmZmRc''@;'; put 'put ''dTU3ODFcdTU3ODdcdTU3ODhcdTU3ODlcdTU3OGFcdTU3OGRcdTU3OGVcdTU3OGZcdTU3OTBcdTU3OTFcdTU3OTRcdTU3OTVcdTU3OTZcdTU3OTdcdTU3OThcdTU3OTlcdTU3OWFcdTU3OWNcdTU3OWRcdTU3OWVcdTU3OWZcdTU3YTVcdTU3YThcdTU3YWFcdTU3YWNcdTU3YWZcdTU3YjBcdTU3''@;'; put 'put ''YjFcdTU3YjNcdTU3YjVcdTU3YjZcdTU3YjdcdTU3YjlcdTU3YmFcdTU3YmJcdTU3YmNcdTU3YmRcdTU3YmVcdTU3YmZcdTU3YzBcdTU3YzFcdTU3YzRcdTU3YzVcdTU3YzZcdTU3YzdcdTU3YzhcdTU3YzlcdTU3Y2FcdTU3Y2NcdTU3Y2RcdTU3ZDBcdTU3ZDFcdTU3ZDNcdTU3ZDZcdTU3ZDdc''@;'; put 'put ''dTU3ZGJcdTU3ZGNcdTU3ZGVcdTU3ZTFcdTU3ZTJcdTU3ZTNcdTU3ZTVcdTU3ZTZcdTU3ZTdcdTU3ZThcdTU3ZTlcdTU3ZWFcdTU3ZWJcdTU3ZWNcdTU3ZWVcdTU3ZjBcdTU3ZjFcdTU3ZjJcdTU3ZjNcdTU3ZjVcdTU3ZjZcdTU3ZjdcdTU3ZmJcdTU3ZmNcdTU3ZmVcdTU3ZmZcdTU4MDFcdTU4''@;'; put 'put ''MDNcdTU4MDRcdTU4MDVcdTU4MDhcdTU4MDlcdTU4MGFcdTU4MGNcdTU4MGVcdTU4MGZcdTU4MTBcdTU4MTJcdTU4MTNcdTU4MTRcdTU4MTZcdTU4MTdcdTU4MThcdTU4MWFcdTU4MWJcdTU4MWNcdTU4MWRcdTU4MWZcdTU4MjJcdTU4MjNcdTU4MjVcdTU4MjZcdTU4MjdcdTU4MjhcdTU4Mjlc''@;'; put 'put ''dTU4MmJcdTU4MmNcdTU4MmRcdTU4MmVcdTU4MmZcdTU4MzFcdTU4MzJcdTU4MzNcdTU4MzRcdTU4MzZcdTU4MzdcdTU4MzhcdTU4MzlcdTU4M2FcdTU4M2JcdTU4M2NcdTU4M2RcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxMzZdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzEzNl1bZ10uY2hh''@;'; put 'put ''ckNvZGVBdCgwKSYmKElbX1sxMzZdW2ddXT0zNDgxNitnLHlbMzQ4MTYrZ109X1sxMzZdW2ddKTtmb3IoX1sxMzddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU4M2VcdTU4M2ZcdTU4NDBcdTU4NDFcdTU4NDJcdTU4NDNcdTU4NDVc''@;'; put 'put ''dTU4NDZcdTU4NDdcdTU4NDhcdTU4NDlcdTU4NGFcdTU4NGJcdTU4NGVcdTU4NGZcdTU4NTBcdTU4NTJcdTU4NTNcdTU4NTVcdTU4NTZcdTU4NTdcdTU4NTlcdTU4NWFcdTU4NWJcdTU4NWNcdTU4NWRcdTU4NWZcdTU4NjBcdTU4NjFcdTU4NjJcdTU4NjNcdTU4NjRcdTU4NjZcdTU4NjdcdTU4''@;'; put 'put ''NjhcdTU4NjlcdTU4NmFcdTU4NmRcdTU4NmVcdTU4NmZcdTU4NzBcdTU4NzFcdTU4NzJcdTU4NzNcdTU4NzRcdTU4NzVcdTU4NzZcdTU4NzdcdTU4NzhcdTU4NzlcdTU4N2FcdTU4N2JcdTU4N2NcdTU4N2RcdTU4N2ZcdTU4ODJcdTU4ODRcdTU4ODZcdTU4ODdcdTU4ODhcdTU4OGFcdTU4OGJc''@;'; put 'put ''dTU4OGNcdWZmZmRcdTU4OGRcdTU4OGVcdTU4OGZcdTU4OTBcdTU4OTFcdTU4OTRcdTU4OTVcdTU4OTZcdTU4OTdcdTU4OThcdTU4OWJcdTU4OWNcdTU4OWRcdTU4YTBcdTU4YTFcdTU4YTJcdTU4YTNcdTU4YTRcdTU4YTVcdTU4YTZcdTU4YTdcdTU4YWFcdTU4YWJcdTU4YWNcdTU4YWRcdTU4''@;'; put 'put ''YWVcdTU4YWZcdTU4YjBcdTU4YjFcdTU4YjJcdTU4YjNcdTU4YjRcdTU4YjVcdTU4YjZcdTU4YjdcdTU4YjhcdTU4YjlcdTU4YmFcdTU4YmJcdTU4YmRcdTU4YmVcdTU4YmZcdTU4YzBcdTU4YzJcdTU4YzNcdTU4YzRcdTU4YzZcdTU4YzdcdTU4YzhcdTU4YzlcdTU4Y2FcdTU4Y2JcdTU4Y2Nc''@;'; put 'put ''dTU4Y2RcdTU4Y2VcdTU4Y2ZcdTU4ZDBcdTU4ZDJcdTU4ZDNcdTU4ZDRcdTU4ZDZcdTU4ZDdcdTU4ZDhcdTU4ZDlcdTU4ZGFcdTU4ZGJcdTU4ZGNcdTU4ZGRcdTU4ZGVcdTU4ZGZcdTU4ZTBcdTU4ZTFcdTU4ZTJcdTU4ZTNcdTU4ZTVcdTU4ZTZcdTU4ZTdcdTU4ZThcdTU4ZTlcdTU4ZWFcdTU4''@;'; put 'put ''ZWRcdTU4ZWZcdTU4ZjFcdTU4ZjJcdTU4ZjRcdTU4ZjVcdTU4ZjdcdTU4ZjhcdTU4ZmFcdTU4ZmJcdTU4ZmNcdTU4ZmRcdTU4ZmVcdTU4ZmZcdTU5MDBcdTU5MDFcdTU5MDNcdTU5MDVcdTU5MDZcdTU5MDhcdTU5MDlcdTU5MGFcdTU5MGJcdTU5MGNcdTU5MGVcdTU5MTBcdTU5MTFcdTU5MTJc''@;'; put 'put ''dTU5MTNcdTU5MTdcdTU5MThcdTU5MWJcdTU5MWRcdTU5MWVcdTU5MjBcdTU5MjFcdTU5MjJcdTU5MjNcdTU5MjZcdTU5MjhcdTU5MmNcdTU5MzBcdTU5MzJcdTU5MzNcdTU5MzVcdTU5MzZcdTU5M2JcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxMzddLmxlbmd0aDsrK2cpNjU1MzMhPT1f''@;'; put 'put ''WzEzN11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxMzddW2ddXT0zNTA3MitnLHlbMzUwNzIrZ109X1sxMzddW2ddKTtmb3IoX1sxMzhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU5M2RcdTU5M2VcdTU5M2ZcdTU5NDBcdTU5NDNc''@;'; put 'put ''dTU5NDVcdTU5NDZcdTU5NGFcdTU5NGNcdTU5NGRcdTU5NTBcdTU5NTJcdTU5NTNcdTU5NTlcdTU5NWJcdTU5NWNcdTU5NWRcdTU5NWVcdTU5NWZcdTU5NjFcdTU5NjNcdTU5NjRcdTU5NjZcdTU5NjdcdTU5NjhcdTU5NjlcdTU5NmFcdTU5NmJcdTU5NmNcdTU5NmRcdTU5NmVcdTU5NmZcdTU5''@;'; put 'put ''NzBcdTU5NzFcdTU5NzJcdTU5NzVcdTU5NzdcdTU5N2FcdTU5N2JcdTU5N2NcdTU5N2VcdTU5N2ZcdTU5ODBcdTU5ODVcdTU5ODlcdTU5OGJcdTU5OGNcdTU5OGVcdTU5OGZcdTU5OTBcdTU5OTFcdTU5OTRcdTU5OTVcdTU5OThcdTU5OWFcdTU5OWJcdTU5OWNcdTU5OWRcdTU5OWZcdTU5YTBc''@;'; put 'put ''dTU5YTFcdTU5YTJcdTU5YTZcdWZmZmRcdTU5YTdcdTU5YWNcdTU5YWRcdTU5YjBcdTU5YjFcdTU5YjNcdTU5YjRcdTU5YjVcdTU5YjZcdTU5YjdcdTU5YjhcdTU5YmFcdTU5YmNcdTU5YmRcdTU5YmZcdTU5YzBcdTU5YzFcdTU5YzJcdTU5YzNcdTU5YzRcdTU5YzVcdTU5YzdcdTU5YzhcdTU5''@;'; put 'put ''YzlcdTU5Y2NcdTU5Y2RcdTU5Y2VcdTU5Y2ZcdTU5ZDVcdTU5ZDZcdTU5ZDlcdTU5ZGJcdTU5ZGVcdTU5ZGZcdTU5ZTBcdTU5ZTFcdTU5ZTJcdTU5ZTRcdTU5ZTZcdTU5ZTdcdTU5ZTlcdTU5ZWFcdTU5ZWJcdTU5ZWRcdTU5ZWVcdTU5ZWZcdTU5ZjBcdTU5ZjFcdTU5ZjJcdTU5ZjNcdTU5ZjRc''@;'; put 'put ''dTU5ZjVcdTU5ZjZcdTU5ZjdcdTU5ZjhcdTU5ZmFcdTU5ZmNcdTU5ZmRcdTU5ZmVcdTVhMDBcdTVhMDJcdTVhMGFcdTVhMGJcdTVhMGRcdTVhMGVcdTVhMGZcdTVhMTBcdTVhMTJcdTVhMTRcdTVhMTVcdTVhMTZcdTVhMTdcdTVhMTlcdTVhMWFcdTVhMWJcdTVhMWRcdTVhMWVcdTVhMjFcdTVh''@;'; put 'put ''MjJcdTVhMjRcdTVhMjZcdTVhMjdcdTVhMjhcdTVhMmFcdTVhMmJcdTVhMmNcdTVhMmRcdTVhMmVcdTVhMmZcdTVhMzBcdTVhMzNcdTVhMzVcdTVhMzdcdTVhMzhcdTVhMzlcdTVhM2FcdTVhM2JcdTVhM2RcdTVhM2VcdTVhM2ZcdTVhNDFcdTVhNDJcdTVhNDNcdTVhNDRcdTVhNDVcdTVhNDdc''@;'; put 'put ''dTVhNDhcdTVhNGJcdTVhNGNcdTVhNGRcdTVhNGVcdTVhNGZcdTVhNTBcdTVhNTFcdTVhNTJcdTVhNTNcdTVhNTRcdTVhNTZcdTVhNTdcdTVhNThcdTVhNTlcdTVhNWJcdTVhNWNcdTVhNWRcdTVhNWVcdTVhNWZcdTVhNjBcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxMzhdLmxlbmd0aDsr''@;'; put 'put ''K2cpNjU1MzMhPT1fWzEzOF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxMzhdW2ddXT0zNTMyOCtnLHlbMzUzMjgrZ109X1sxMzhdW2ddKTtmb3IoX1sxMzldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVhNjFcdTVhNjNcdTVhNjRc''@;'; put 'put ''dTVhNjVcdTVhNjZcdTVhNjhcdTVhNjlcdTVhNmJcdTVhNmNcdTVhNmRcdTVhNmVcdTVhNmZcdTVhNzBcdTVhNzFcdTVhNzJcdTVhNzNcdTVhNzhcdTVhNzlcdTVhN2JcdTVhN2NcdTVhN2RcdTVhN2VcdTVhODBcdTVhODFcdTVhODJcdTVhODNcdTVhODRcdTVhODVcdTVhODZcdTVhODdcdTVh''@;'; put 'put ''ODhcdTVhODlcdTVhOGFcdTVhOGJcdTVhOGNcdTVhOGRcdTVhOGVcdTVhOGZcdTVhOTBcdTVhOTFcdTVhOTNcdTVhOTRcdTVhOTVcdTVhOTZcdTVhOTdcdTVhOThcdTVhOTlcdTVhOWNcdTVhOWRcdTVhOWVcdTVhOWZcdTVhYTBcdTVhYTFcdTVhYTJcdTVhYTNcdTVhYTRcdTVhYTVcdTVhYTZc''@;'; put 'put ''dTVhYTdcdTVhYThcdTVhYTlcdTVhYWJcdTVhYWNcdWZmZmRcdTVhYWRcdTVhYWVcdTVhYWZcdTVhYjBcdTVhYjFcdTVhYjRcdTVhYjZcdTVhYjdcdTVhYjlcdTVhYmFcdTVhYmJcdTVhYmNcdTVhYmRcdTVhYmZcdTVhYzBcdTVhYzNcdTVhYzRcdTVhYzVcdTVhYzZcdTVhYzdcdTVhYzhcdTVh''@;'; put 'put ''Y2FcdTVhY2JcdTVhY2RcdTVhY2VcdTVhY2ZcdTVhZDBcdTVhZDFcdTVhZDNcdTVhZDVcdTVhZDdcdTVhZDlcdTVhZGFcdTVhZGJcdTVhZGRcdTVhZGVcdTVhZGZcdTVhZTJcdTVhZTRcdTVhZTVcdTVhZTdcdTVhZThcdTVhZWFcdTVhZWNcdTVhZWRcdTVhZWVcdTVhZWZcdTVhZjBcdTVhZjJc''@;'; put 'put ''dTVhZjNcdTVhZjRcdTVhZjVcdTVhZjZcdTVhZjdcdTVhZjhcdTVhZjlcdTVhZmFcdTVhZmJcdTVhZmNcdTVhZmRcdTVhZmVcdTVhZmZcdTViMDBcdTViMDFcdTViMDJcdTViMDNcdTViMDRcdTViMDVcdTViMDZcdTViMDdcdTViMDhcdTViMGFcdTViMGJcdTViMGNcdTViMGRcdTViMGVcdTVi''@;'; put 'put ''MGZcdTViMTBcdTViMTFcdTViMTJcdTViMTNcdTViMTRcdTViMTVcdTViMThcdTViMTlcdTViMWFcdTViMWJcdTViMWNcdTViMWRcdTViMWVcdTViMWZcdTViMjBcdTViMjFcdTViMjJcdTViMjNcdTViMjRcdTViMjVcdTViMjZcdTViMjdcdTViMjhcdTViMjlcdTViMmFcdTViMmJcdTViMmNc''@;'; put 'put ''dTViMmRcdTViMmVcdTViMmZcdTViMzBcdTViMzFcdTViMzNcdTViMzVcdTViMzZcdTViMzhcdTViMzlcdTViM2FcdTViM2JcdTViM2NcdTViM2RcdTViM2VcdTViM2ZcdTViNDFcdTViNDJcdTViNDNcdTViNDRcdTViNDVcdTViNDZcdTViNDdcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sx''@;'; put 'put ''MzldLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzEzOV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxMzldW2ddXT0zNTU4NCtnLHlbMzU1ODQrZ109X1sxMzldW2ddKTtmb3IoX1sxNDBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTViNDhc''@;'; put 'put ''dTViNDlcdTViNGFcdTViNGJcdTViNGNcdTViNGRcdTViNGVcdTViNGZcdTViNTJcdTViNTZcdTViNWVcdTViNjBcdTViNjFcdTViNjdcdTViNjhcdTViNmJcdTViNmRcdTViNmVcdTViNmZcdTViNzJcdTViNzRcdTViNzZcdTViNzdcdTViNzhcdTViNzlcdTViN2JcdTViN2NcdTViN2VcdTVi''@;'; put 'put ''N2ZcdTViODJcdTViODZcdTViOGFcdTViOGRcdTViOGVcdTViOTBcdTViOTFcdTViOTJcdTViOTRcdTViOTZcdTViOWZcdTViYTdcdTViYThcdTViYTlcdTViYWNcdTViYWRcdTViYWVcdTViYWZcdTViYjFcdTViYjJcdTViYjdcdTViYmFcdTViYmJcdTViYmNcdTViYzBcdTViYzFcdTViYzNc''@;'; put 'put ''dTViYzhcdTViYzlcdTViY2FcdTViY2JcdTViY2RcdTViY2VcdTViY2ZcdWZmZmRcdTViZDFcdTViZDRcdTViZDVcdTViZDZcdTViZDdcdTViZDhcdTViZDlcdTViZGFcdTViZGJcdTViZGNcdTViZTBcdTViZTJcdTViZTNcdTViZTZcdTViZTdcdTViZTlcdTViZWFcdTViZWJcdTViZWNcdTVi''@;'; put 'put ''ZWRcdTViZWZcdTViZjFcdTViZjJcdTViZjNcdTViZjRcdTViZjVcdTViZjZcdTViZjdcdTViZmRcdTViZmVcdTVjMDBcdTVjMDJcdTVjMDNcdTVjMDVcdTVjMDdcdTVjMDhcdTVjMGJcdTVjMGNcdTVjMGRcdTVjMGVcdTVjMTBcdTVjMTJcdTVjMTNcdTVjMTdcdTVjMTlcdTVjMWJcdTVjMWVc''@;'; put 'put ''dTVjMWZcdTVjMjBcdTVjMjFcdTVjMjNcdTVjMjZcdTVjMjhcdTVjMjlcdTVjMmFcdTVjMmJcdTVjMmRcdTVjMmVcdTVjMmZcdTVjMzBcdTVjMzJcdTVjMzNcdTVjMzVcdTVjMzZcdTVjMzdcdTVjNDNcdTVjNDRcdTVjNDZcdTVjNDdcdTVjNGNcdTVjNGRcdTVjNTJcdTVjNTNcdTVjNTRcdTVj''@;'; put 'put ''NTZcdTVjNTdcdTVjNThcdTVjNWFcdTVjNWJcdTVjNWNcdTVjNWRcdTVjNWZcdTVjNjJcdTVjNjRcdTVjNjdcdTVjNjhcdTVjNjlcdTVjNmFcdTVjNmJcdTVjNmNcdTVjNmRcdTVjNzBcdTVjNzJcdTVjNzNcdTVjNzRcdTVjNzVcdTVjNzZcdTVjNzdcdTVjNzhcdTVjN2JcdTVjN2NcdTVjN2Rc''@;'; put 'put ''dTVjN2VcdTVjODBcdTVjODNcdTVjODRcdTVjODVcdTVjODZcdTVjODdcdTVjODlcdTVjOGFcdTVjOGJcdTVjOGVcdTVjOGZcdTVjOTJcdTVjOTNcdTVjOTVcdTVjOWRcdTVjOWVcdTVjOWZcdTVjYTBcdTVjYTFcdTVjYTRcdTVjYTVcdTVjYTZcdTVjYTdcdTVjYThcdWZmZmQiLnNwbGl0KCIi''@;'; put 'put ''KSxnPTA7ZyE9X1sxNDBdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE0MF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNDBdW2ddXT0zNTg0MCtnLHlbMzU4NDArZ109X1sxNDBdW2ddKTtmb3IoX1sxNDFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdTVjYWFcdTVjYWVcdTVjYWZcdTVjYjBcdTVjYjJcdTVjYjRcdTVjYjZcdTVjYjlcdTVjYmFcdTVjYmJcdTVjYmNcdTVjYmVcdTVjYzBcdTVjYzJcdTVjYzNcdTVjYzVcdTVjYzZcdTVjYzdcdTVjYzhcdTVjYzlcdTVjY2FcdTVjY2NcdTVjY2RcdTVjY2VcdTVjY2ZcdTVjZDBcdTVj''@;'; put 'put ''ZDFcdTVjZDNcdTVjZDRcdTVjZDVcdTVjZDZcdTVjZDdcdTVjZDhcdTVjZGFcdTVjZGJcdTVjZGNcdTVjZGRcdTVjZGVcdTVjZGZcdTVjZTBcdTVjZTJcdTVjZTNcdTVjZTdcdTVjZTlcdTVjZWJcdTVjZWNcdTVjZWVcdTVjZWZcdTVjZjFcdTVjZjJcdTVjZjNcdTVjZjRcdTVjZjVcdTVjZjZc''@;'; put 'put ''dTVjZjdcdTVjZjhcdTVjZjlcdTVjZmFcdTVjZmNcdTVjZmRcdTVjZmVcdTVjZmZcdTVkMDBcdWZmZmRcdTVkMDFcdTVkMDRcdTVkMDVcdTVkMDhcdTVkMDlcdTVkMGFcdTVkMGJcdTVkMGNcdTVkMGRcdTVkMGZcdTVkMTBcdTVkMTFcdTVkMTJcdTVkMTNcdTVkMTVcdTVkMTdcdTVkMThcdTVk''@;'; put 'put ''MTlcdTVkMWFcdTVkMWNcdTVkMWRcdTVkMWZcdTVkMjBcdTVkMjFcdTVkMjJcdTVkMjNcdTVkMjVcdTVkMjhcdTVkMmFcdTVkMmJcdTVkMmNcdTVkMmZcdTVkMzBcdTVkMzFcdTVkMzJcdTVkMzNcdTVkMzVcdTVkMzZcdTVkMzdcdTVkMzhcdTVkMzlcdTVkM2FcdTVkM2JcdTVkM2NcdTVkM2Zc''@;'; put 'put ''dTVkNDBcdTVkNDFcdTVkNDJcdTVkNDNcdTVkNDRcdTVkNDVcdTVkNDZcdTVkNDhcdTVkNDlcdTVkNGRcdTVkNGVcdTVkNGZcdTVkNTBcdTVkNTFcdTVkNTJcdTVkNTNcdTVkNTRcdTVkNTVcdTVkNTZcdTVkNTdcdTVkNTlcdTVkNWFcdTVkNWNcdTVkNWVcdTVkNWZcdTVkNjBcdTVkNjFcdTVk''@;'; put 'put ''NjJcdTVkNjNcdTVkNjRcdTVkNjVcdTVkNjZcdTVkNjdcdTVkNjhcdTVkNmFcdTVkNmRcdTVkNmVcdTVkNzBcdTVkNzFcdTVkNzJcdTVkNzNcdTVkNzVcdTVkNzZcdTVkNzdcdTVkNzhcdTVkNzlcdTVkN2FcdTVkN2JcdTVkN2NcdTVkN2RcdTVkN2VcdTVkN2ZcdTVkODBcdTVkODFcdTVkODNc''@;'; put 'put ''dTVkODRcdTVkODVcdTVkODZcdTVkODdcdTVkODhcdTVkODlcdTVkOGFcdTVkOGJcdTVkOGNcdTVkOGRcdTVkOGVcdTVkOGZcdTVkOTBcdTVkOTFcdTVkOTJcdTVkOTNcdTVkOTRcdTVkOTVcdTVkOTZcdTVkOTdcdTVkOThcdTVkOWFcdTVkOWJcdTVkOWNcdTVkOWVcdTVkOWZcdTVkYTBcdWZm''@;'; put 'put ''ZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNDFdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE0MV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNDFdW2ddXT0zNjA5NitnLHlbMzYwOTYrZ109X1sxNDFdW2ddKTtmb3IoX1sxNDJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdTVkYTFcdTVkYTJcdTVkYTNcdTVkYTRcdTVkYTVcdTVkYTZcdTVkYTdcdTVkYThcdTVkYTlcdTVkYWFcdTVkYWJcdTVkYWNcdTVkYWRcdTVkYWVcdTVkYWZcdTVkYjBcdTVkYjFcdTVkYjJcdTVkYjNcdTVkYjRcdTVkYjVcdTVkYjZcdTVkYjhcdTVkYjlcdTVk''@;'; put 'put ''YmFcdTVkYmJcdTVkYmNcdTVkYmRcdTVkYmVcdTVkYmZcdTVkYzBcdTVkYzFcdTVkYzJcdTVkYzNcdTVkYzRcdTVkYzZcdTVkYzdcdTVkYzhcdTVkYzlcdTVkY2FcdTVkY2JcdTVkY2NcdTVkY2VcdTVkY2ZcdTVkZDBcdTVkZDFcdTVkZDJcdTVkZDNcdTVkZDRcdTVkZDVcdTVkZDZcdTVkZDdc''@;'; put 'put ''dTVkZDhcdTVkZDlcdTVkZGFcdTVkZGNcdTVkZGZcdTVkZTBcdTVkZTNcdTVkZTRcdTVkZWFcdTVkZWNcdTVkZWRcdWZmZmRcdTVkZjBcdTVkZjVcdTVkZjZcdTVkZjhcdTVkZjlcdTVkZmFcdTVkZmJcdTVkZmNcdTVkZmZcdTVlMDBcdTVlMDRcdTVlMDdcdTVlMDlcdTVlMGFcdTVlMGJcdTVl''@;'; put 'put ''MGRcdTVlMGVcdTVlMTJcdTVlMTNcdTVlMTdcdTVlMWVcdTVlMWZcdTVlMjBcdTVlMjFcdTVlMjJcdTVlMjNcdTVlMjRcdTVlMjVcdTVlMjhcdTVlMjlcdTVlMmFcdTVlMmJcdTVlMmNcdTVlMmZcdTVlMzBcdTVlMzJcdTVlMzNcdTVlMzRcdTVlMzVcdTVlMzZcdTVlMzlcdTVlM2FcdTVlM2Vc''@;'; put 'put ''dTVlM2ZcdTVlNDBcdTVlNDFcdTVlNDNcdTVlNDZcdTVlNDdcdTVlNDhcdTVlNDlcdTVlNGFcdTVlNGJcdTVlNGRcdTVlNGVcdTVlNGZcdTVlNTBcdTVlNTFcdTVlNTJcdTVlNTNcdTVlNTZcdTVlNTdcdTVlNThcdTVlNTlcdTVlNWFcdTVlNWNcdTVlNWRcdTVlNWZcdTVlNjBcdTVlNjNcdTVl''@;'; put 'put ''NjRcdTVlNjVcdTVlNjZcdTVlNjdcdTVlNjhcdTVlNjlcdTVlNmFcdTVlNmJcdTVlNmNcdTVlNmRcdTVlNmVcdTVlNmZcdTVlNzBcdTVlNzFcdTVlNzVcdTVlNzdcdTVlNzlcdTVlN2VcdTVlODFcdTVlODJcdTVlODNcdTVlODVcdTVlODhcdTVlODlcdTVlOGNcdTVlOGRcdTVlOGVcdTVlOTJc''@;'; put 'put ''dTVlOThcdTVlOWJcdTVlOWRcdTVlYTFcdTVlYTJcdTVlYTNcdTVlYTRcdTVlYThcdTVlYTlcdTVlYWFcdTVlYWJcdTVlYWNcdTVlYWVcdTVlYWZcdTVlYjBcdTVlYjFcdTVlYjJcdTVlYjRcdTVlYmFcdTVlYmJcdTVlYmNcdTVlYmRcdTVlYmZcdTVlYzBcdTVlYzFcdTVlYzJcdTVlYzNcdTVl''@;'; put 'put ''YzRcdTVlYzVcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNDJdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE0Ml1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNDJdW2ddXT0zNjM1MitnLHlbMzYzNTIrZ109X1sxNDJdW2ddKTtmb3IoX1sxNDNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVlYzZcdTVlYzdcdTVlYzhcdTVlY2JcdTVlY2NcdTVlY2RcdTVlY2VcdTVlY2ZcdTVlZDBcdTVlZDRcdTVlZDVcdTVlZDdcdTVlZDhcdTVlZDlcdTVlZGFcdTVlZGNcdTVlZGRcdTVlZGVcdTVlZGZcdTVlZTBcdTVlZTFcdTVlZTJcdTVl''@;'; put 'put ''ZTNcdTVlZTRcdTVlZTVcdTVlZTZcdTVlZTdcdTVlZTlcdTVlZWJcdTVlZWNcdTVlZWRcdTVlZWVcdTVlZWZcdTVlZjBcdTVlZjFcdTVlZjJcdTVlZjNcdTVlZjVcdTVlZjhcdTVlZjlcdTVlZmJcdTVlZmNcdTVlZmRcdTVmMDVcdTVmMDZcdTVmMDdcdTVmMDlcdTVmMGNcdTVmMGRcdTVmMGVc''@;'; put 'put ''dTVmMTBcdTVmMTJcdTVmMTRcdTVmMTZcdTVmMTlcdTVmMWFcdTVmMWNcdTVmMWRcdTVmMWVcdTVmMjFcdTVmMjJcdTVmMjNcdTVmMjRcdWZmZmRcdTVmMjhcdTVmMmJcdTVmMmNcdTVmMmVcdTVmMzBcdTVmMzJcdTVmMzNcdTVmMzRcdTVmMzVcdTVmMzZcdTVmMzdcdTVmMzhcdTVmM2JcdTVm''@;'; put 'put ''M2RcdTVmM2VcdTVmM2ZcdTVmNDFcdTVmNDJcdTVmNDNcdTVmNDRcdTVmNDVcdTVmNDZcdTVmNDdcdTVmNDhcdTVmNDlcdTVmNGFcdTVmNGJcdTVmNGNcdTVmNGRcdTVmNGVcdTVmNGZcdTVmNTFcdTVmNTRcdTVmNTlcdTVmNWFcdTVmNWJcdTVmNWNcdTVmNWVcdTVmNWZcdTVmNjBcdTVmNjNc''@;'; put 'put ''dTVmNjVcdTVmNjdcdTVmNjhcdTVmNmJcdTVmNmVcdTVmNmZcdTVmNzJcdTVmNzRcdTVmNzVcdTVmNzZcdTVmNzhcdTVmN2FcdTVmN2RcdTVmN2VcdTVmN2ZcdTVmODNcdTVmODZcdTVmOGRcdTVmOGVcdTVmOGZcdTVmOTFcdTVmOTNcdTVmOTRcdTVmOTZcdTVmOWFcdTVmOWJcdTVmOWRcdTVm''@;'; put 'put ''OWVcdTVmOWZcdTVmYTBcdTVmYTJcdTVmYTNcdTVmYTRcdTVmYTVcdTVmYTZcdTVmYTdcdTVmYTlcdTVmYWJcdTVmYWNcdTVmYWZcdTVmYjBcdTVmYjFcdTVmYjJcdTVmYjNcdTVmYjRcdTVmYjZcdTVmYjhcdTVmYjlcdTVmYmFcdTVmYmJcdTVmYmVcdTVmYmZcdTVmYzBcdTVmYzFcdTVmYzJc''@;'; put 'put ''dTVmYzdcdTVmYzhcdTVmY2FcdTVmY2JcdTVmY2VcdTVmZDNcdTVmZDRcdTVmZDVcdTVmZGFcdTVmZGJcdTVmZGNcdTVmZGVcdTVmZGZcdTVmZTJcdTVmZTNcdTVmZTVcdTVmZTZcdTVmZThcdTVmZTlcdTVmZWNcdTVmZWZcdTVmZjBcdTVmZjJcdTVmZjNcdTVmZjRcdTVmZjZcdTVmZjdcdTVm''@;'; put 'put ''ZjlcdTVmZmFcdTVmZmNcdTYwMDdcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNDNdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE0M11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNDNdW2ddXT0zNjYwOCtnLHlbMzY2MDgrZ109X1sxNDNdW2ddKTtmb3IoX1sxNDRdPSJcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYwMDhcdTYwMDlcdTYwMGJcdTYwMGNcdTYwMTBcdTYwMTFcdTYwMTNcdTYwMTdcdTYwMThcdTYwMWFcdTYwMWVcdTYwMWZcdTYwMjJcdTYwMjNcdTYwMjRcdTYwMmNcdTYwMmRcdTYwMmVcdTYwMzBcdTYwMzFcdTYw''@;'; put 'put ''MzJcdTYwMzNcdTYwMzRcdTYwMzZcdTYwMzdcdTYwMzhcdTYwMzlcdTYwM2FcdTYwM2RcdTYwM2VcdTYwNDBcdTYwNDRcdTYwNDVcdTYwNDZcdTYwNDdcdTYwNDhcdTYwNDlcdTYwNGFcdTYwNGNcdTYwNGVcdTYwNGZcdTYwNTFcdTYwNTNcdTYwNTRcdTYwNTZcdTYwNTdcdTYwNThcdTYwNWJc''@;'; put 'put ''dTYwNWNcdTYwNWVcdTYwNWZcdTYwNjBcdTYwNjFcdTYwNjVcdTYwNjZcdTYwNmVcdTYwNzFcdTYwNzJcdTYwNzRcdTYwNzVcdTYwNzdcdTYwN2VcdTYwODBcdWZmZmRcdTYwODFcdTYwODJcdTYwODVcdTYwODZcdTYwODdcdTYwODhcdTYwOGFcdTYwOGJcdTYwOGVcdTYwOGZcdTYwOTBcdTYw''@;'; put 'put ''OTFcdTYwOTNcdTYwOTVcdTYwOTdcdTYwOThcdTYwOTlcdTYwOWNcdTYwOWVcdTYwYTFcdTYwYTJcdTYwYTRcdTYwYTVcdTYwYTdcdTYwYTlcdTYwYWFcdTYwYWVcdTYwYjBcdTYwYjNcdTYwYjVcdTYwYjZcdTYwYjdcdTYwYjlcdTYwYmFcdTYwYmRcdTYwYmVcdTYwYmZcdTYwYzBcdTYwYzFc''@;'; put 'put ''dTYwYzJcdTYwYzNcdTYwYzRcdTYwYzdcdTYwYzhcdTYwYzlcdTYwY2NcdTYwY2RcdTYwY2VcdTYwY2ZcdTYwZDBcdTYwZDJcdTYwZDNcdTYwZDRcdTYwZDZcdTYwZDdcdTYwZDlcdTYwZGJcdTYwZGVcdTYwZTFcdTYwZTJcdTYwZTNcdTYwZTRcdTYwZTVcdTYwZWFcdTYwZjFcdTYwZjJcdTYw''@;'; put 'put ''ZjVcdTYwZjdcdTYwZjhcdTYwZmJcdTYwZmNcdTYwZmRcdTYwZmVcdTYwZmZcdTYxMDJcdTYxMDNcdTYxMDRcdTYxMDVcdTYxMDdcdTYxMGFcdTYxMGJcdTYxMGNcdTYxMTBcdTYxMTFcdTYxMTJcdTYxMTNcdTYxMTRcdTYxMTZcdTYxMTdcdTYxMThcdTYxMTlcdTYxMWJcdTYxMWNcdTYxMWRc''@;'; put 'put ''dTYxMWVcdTYxMjFcdTYxMjJcdTYxMjVcdTYxMjhcdTYxMjlcdTYxMmFcdTYxMmNcdTYxMmRcdTYxMmVcdTYxMmZcdTYxMzBcdTYxMzFcdTYxMzJcdTYxMzNcdTYxMzRcdTYxMzVcdTYxMzZcdTYxMzdcdTYxMzhcdTYxMzlcdTYxM2FcdTYxM2JcdTYxM2NcdTYxM2RcdTYxM2VcdTYxNDBcdTYx''@;'; put 'put ''NDFcdTYxNDJcdTYxNDNcdTYxNDRcdTYxNDVcdTYxNDZcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNDRdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE0NF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNDRdW2ddXT0zNjg2NCtnLHlbMzY4NjQrZ109X1sxNDRdW2ddKTtmb3IoX1sxNDVdPSJc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYxNDdcdTYxNDlcdTYxNGJcdTYxNGRcdTYxNGZcdTYxNTBcdTYxNTJcdTYxNTNcdTYxNTRcdTYxNTZcdTYxNTdcdTYxNThcdTYxNTlcdTYxNWFcdTYxNWJcdTYxNWNcdTYxNWVcdTYxNWZcdTYx''@;'; put 'put ''NjBcdTYxNjFcdTYxNjNcdTYxNjRcdTYxNjVcdTYxNjZcdTYxNjlcdTYxNmFcdTYxNmJcdTYxNmNcdTYxNmRcdTYxNmVcdTYxNmZcdTYxNzFcdTYxNzJcdTYxNzNcdTYxNzRcdTYxNzZcdTYxNzhcdTYxNzlcdTYxN2FcdTYxN2JcdTYxN2NcdTYxN2RcdTYxN2VcdTYxN2ZcdTYxODBcdTYxODFc''@;'; put 'put ''dTYxODJcdTYxODNcdTYxODRcdTYxODVcdTYxODZcdTYxODdcdTYxODhcdTYxODlcdTYxOGFcdTYxOGNcdTYxOGRcdTYxOGZcdTYxOTBcdTYxOTFcdTYxOTJcdTYxOTNcdTYxOTVcdWZmZmRcdTYxOTZcdTYxOTdcdTYxOThcdTYxOTlcdTYxOWFcdTYxOWJcdTYxOWNcdTYxOWVcdTYxOWZcdTYx''@;'; put 'put ''YTBcdTYxYTFcdTYxYTJcdTYxYTNcdTYxYTRcdTYxYTVcdTYxYTZcdTYxYWFcdTYxYWJcdTYxYWRcdTYxYWVcdTYxYWZcdTYxYjBcdTYxYjFcdTYxYjJcdTYxYjNcdTYxYjRcdTYxYjVcdTYxYjZcdTYxYjhcdTYxYjlcdTYxYmFcdTYxYmJcdTYxYmNcdTYxYmRcdTYxYmZcdTYxYzBcdTYxYzFc''@;'; put 'put ''dTYxYzNcdTYxYzRcdTYxYzVcdTYxYzZcdTYxYzdcdTYxYzlcdTYxY2NcdTYxY2RcdTYxY2VcdTYxY2ZcdTYxZDBcdTYxZDNcdTYxZDVcdTYxZDZcdTYxZDdcdTYxZDhcdTYxZDlcdTYxZGFcdTYxZGJcdTYxZGNcdTYxZGRcdTYxZGVcdTYxZGZcdTYxZTBcdTYxZTFcdTYxZTJcdTYxZTNcdTYx''@;'; put 'put ''ZTRcdTYxZTVcdTYxZTdcdTYxZThcdTYxZTlcdTYxZWFcdTYxZWJcdTYxZWNcdTYxZWRcdTYxZWVcdTYxZWZcdTYxZjBcdTYxZjFcdTYxZjJcdTYxZjNcdTYxZjRcdTYxZjZcdTYxZjdcdTYxZjhcdTYxZjlcdTYxZmFcdTYxZmJcdTYxZmNcdTYxZmRcdTYxZmVcdTYyMDBcdTYyMDFcdTYyMDJc''@;'; put 'put ''dTYyMDNcdTYyMDRcdTYyMDVcdTYyMDdcdTYyMDlcdTYyMTNcdTYyMTRcdTYyMTlcdTYyMWNcdTYyMWRcdTYyMWVcdTYyMjBcdTYyMjNcdTYyMjZcdTYyMjdcdTYyMjhcdTYyMjlcdTYyMmJcdTYyMmRcdTYyMmZcdTYyMzBcdTYyMzFcdTYyMzJcdTYyMzVcdTYyMzZcdTYyMzhcdTYyMzlcdTYy''@;'; put 'put ''M2FcdTYyM2JcdTYyM2NcdTYyNDJcdTYyNDRcdTYyNDVcdTYyNDZcdTYyNGFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNDVdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE0NV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNDVdW2ddXT0zNzEyMCtnLHlbMzcxMjArZ109X1sxNDVdW2ddKTtm''@;'; put 'put ''b3IoX1sxNDZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYyNGZcdTYyNTBcdTYyNTVcdTYyNTZcdTYyNTdcdTYyNTlcdTYyNWFcdTYyNWNcdTYyNWRcdTYyNWVcdTYyNWZcdTYyNjBcdTYyNjFcdTYyNjJcdTYyNjRcdTYyNjVcdTYy''@;'; put 'put ''NjhcdTYyNzFcdTYyNzJcdTYyNzRcdTYyNzVcdTYyNzdcdTYyNzhcdTYyN2FcdTYyN2JcdTYyN2RcdTYyODFcdTYyODJcdTYyODNcdTYyODVcdTYyODZcdTYyODdcdTYyODhcdTYyOGJcdTYyOGNcdTYyOGRcdTYyOGVcdTYyOGZcdTYyOTBcdTYyOTRcdTYyOTlcdTYyOWNcdTYyOWRcdTYyOWVc''@;'; put 'put ''dTYyYTNcdTYyYTZcdTYyYTdcdTYyYTlcdTYyYWFcdTYyYWRcdTYyYWVcdTYyYWZcdTYyYjBcdTYyYjJcdTYyYjNcdTYyYjRcdTYyYjZcdTYyYjdcdTYyYjhcdTYyYmFcdTYyYmVcdTYyYzBcdTYyYzFcdWZmZmRcdTYyYzNcdTYyY2JcdTYyY2ZcdTYyZDFcdTYyZDVcdTYyZGRcdTYyZGVcdTYy''@;'; put 'put ''ZTBcdTYyZTFcdTYyZTRcdTYyZWFcdTYyZWJcdTYyZjBcdTYyZjJcdTYyZjVcdTYyZjhcdTYyZjlcdTYyZmFcdTYyZmJcdTYzMDBcdTYzMDNcdTYzMDRcdTYzMDVcdTYzMDZcdTYzMGFcdTYzMGJcdTYzMGNcdTYzMGRcdTYzMGZcdTYzMTBcdTYzMTJcdTYzMTNcdTYzMTRcdTYzMTVcdTYzMTdc''@;'; put 'put ''dTYzMThcdTYzMTlcdTYzMWNcdTYzMjZcdTYzMjdcdTYzMjlcdTYzMmNcdTYzMmRcdTYzMmVcdTYzMzBcdTYzMzFcdTYzMzNcdTYzMzRcdTYzMzVcdTYzMzZcdTYzMzdcdTYzMzhcdTYzM2JcdTYzM2NcdTYzM2VcdTYzM2ZcdTYzNDBcdTYzNDFcdTYzNDRcdTYzNDdcdTYzNDhcdTYzNGFcdTYz''@;'; put 'put ''NTFcdTYzNTJcdTYzNTNcdTYzNTRcdTYzNTZcdTYzNTdcdTYzNThcdTYzNTlcdTYzNWFcdTYzNWJcdTYzNWNcdTYzNWRcdTYzNjBcdTYzNjRcdTYzNjVcdTYzNjZcdTYzNjhcdTYzNmFcdTYzNmJcdTYzNmNcdTYzNmZcdTYzNzBcdTYzNzJcdTYzNzNcdTYzNzRcdTYzNzVcdTYzNzhcdTYzNzlc''@;'; put 'put ''dTYzN2NcdTYzN2RcdTYzN2VcdTYzN2ZcdTYzODFcdTYzODNcdTYzODRcdTYzODVcdTYzODZcdTYzOGJcdTYzOGRcdTYzOTFcdTYzOTNcdTYzOTRcdTYzOTVcdTYzOTdcdTYzOTlcdTYzOWFcdTYzOWJcdTYzOWNcdTYzOWRcdTYzOWVcdTYzOWZcdTYzYTFcdTYzYTRcdTYzYTZcdTYzYWJcdTYz''@;'; put 'put ''YWZcdTYzYjFcdTYzYjJcdTYzYjVcdTYzYjZcdTYzYjlcdTYzYmJcdTYzYmRcdTYzYmZcdTYzYzBcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNDZdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE0Nl1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNDZdW2ddXT0zNzM3NitnLHlbMzczNzYrZ109''@;'; put 'put ''X1sxNDZdW2ddKTtmb3IoX1sxNDddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYzYzFcdTYzYzJcdTYzYzNcdTYzYzVcdTYzYzdcdTYzYzhcdTYzY2FcdTYzY2JcdTYzY2NcdTYzZDFcdTYzZDNcdTYzZDRcdTYzZDVcdTYzZDdcdTYz''@;'; put 'put ''ZDhcdTYzZDlcdTYzZGFcdTYzZGJcdTYzZGNcdTYzZGRcdTYzZGZcdTYzZTJcdTYzZTRcdTYzZTVcdTYzZTZcdTYzZTdcdTYzZThcdTYzZWJcdTYzZWNcdTYzZWVcdTYzZWZcdTYzZjBcdTYzZjFcdTYzZjNcdTYzZjVcdTYzZjdcdTYzZjlcdTYzZmFcdTYzZmJcdTYzZmNcdTYzZmVcdTY0MDNc''@;'; put 'put ''dTY0MDRcdTY0MDZcdTY0MDdcdTY0MDhcdTY0MDlcdTY0MGFcdTY0MGRcdTY0MGVcdTY0MTFcdTY0MTJcdTY0MTVcdTY0MTZcdTY0MTdcdTY0MThcdTY0MTlcdTY0MWFcdTY0MWRcdTY0MWZcdTY0MjJcdTY0MjNcdTY0MjRcdWZmZmRcdTY0MjVcdTY0MjdcdTY0MjhcdTY0MjlcdTY0MmJcdTY0''@;'; put 'put ''MmVcdTY0MmZcdTY0MzBcdTY0MzFcdTY0MzJcdTY0MzNcdTY0MzVcdTY0MzZcdTY0MzdcdTY0MzhcdTY0MzlcdTY0M2JcdTY0M2NcdTY0M2VcdTY0NDBcdTY0NDJcdTY0NDNcdTY0NDlcdTY0NGJcdTY0NGNcdTY0NGRcdTY0NGVcdTY0NGZcdTY0NTBcdTY0NTFcdTY0NTNcdTY0NTVcdTY0NTZc''@;'; put 'put ''dTY0NTdcdTY0NTlcdTY0NWFcdTY0NWJcdTY0NWNcdTY0NWRcdTY0NWZcdTY0NjBcdTY0NjFcdTY0NjJcdTY0NjNcdTY0NjRcdTY0NjVcdTY0NjZcdTY0NjhcdTY0NmFcdTY0NmJcdTY0NmNcdTY0NmVcdTY0NmZcdTY0NzBcdTY0NzFcdTY0NzJcdTY0NzNcdTY0NzRcdTY0NzVcdTY0NzZcdTY0''@;'; put 'put ''NzdcdTY0N2JcdTY0N2NcdTY0N2RcdTY0N2VcdTY0N2ZcdTY0ODBcdTY0ODFcdTY0ODNcdTY0ODZcdTY0ODhcdTY0ODlcdTY0OGFcdTY0OGJcdTY0OGNcdTY0OGRcdTY0OGVcdTY0OGZcdTY0OTBcdTY0OTNcdTY0OTRcdTY0OTdcdTY0OThcdTY0OWFcdTY0OWJcdTY0OWNcdTY0OWRcdTY0OWZc''@;'; put 'put ''dTY0YTBcdTY0YTFcdTY0YTJcdTY0YTNcdTY0YTVcdTY0YTZcdTY0YTdcdTY0YThcdTY0YWFcdTY0YWJcdTY0YWZcdTY0YjFcdTY0YjJcdTY0YjNcdTY0YjRcdTY0YjZcdTY0YjlcdTY0YmJcdTY0YmRcdTY0YmVcdTY0YmZcdTY0YzFcdTY0YzNcdTY0YzRcdTY0YzZcdTY0YzdcdTY0YzhcdTY0''@;'; put 'put ''YzlcdTY0Y2FcdTY0Y2JcdTY0Y2NcdTY0Y2ZcdTY0ZDFcdTY0ZDNcdTY0ZDRcdTY0ZDVcdTY0ZDZcdTY0ZDlcdTY0ZGFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNDddLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE0N11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNDddW2ddXT0zNzYzMitn''@;'; put 'put ''LHlbMzc2MzIrZ109X1sxNDddW2ddKTtmb3IoX1sxNDhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY0ZGJcdTY0ZGNcdTY0ZGRcdTY0ZGZcdTY0ZTBcdTY0ZTFcdTY0ZTNcdTY0ZTVcdTY0ZTdcdTY0ZThcdTY0ZTlcdTY0ZWFcdTY0''@;'; put 'put ''ZWJcdTY0ZWNcdTY0ZWRcdTY0ZWVcdTY0ZWZcdTY0ZjBcdTY0ZjFcdTY0ZjJcdTY0ZjNcdTY0ZjRcdTY0ZjVcdTY0ZjZcdTY0ZjdcdTY0ZjhcdTY0ZjlcdTY0ZmFcdTY0ZmJcdTY0ZmNcdTY0ZmRcdTY0ZmVcdTY0ZmZcdTY1MDFcdTY1MDJcdTY1MDNcdTY1MDRcdTY1MDVcdTY1MDZcdTY1MDdc''@;'; put 'put ''dTY1MDhcdTY1MGFcdTY1MGJcdTY1MGNcdTY1MGRcdTY1MGVcdTY1MGZcdTY1MTBcdTY1MTFcdTY1MTNcdTY1MTRcdTY1MTVcdTY1MTZcdTY1MTdcdTY1MTlcdTY1MWFcdTY1MWJcdTY1MWNcdTY1MWRcdTY1MWVcdTY1MWZcdTY1MjBcdTY1MjFcdWZmZmRcdTY1MjJcdTY1MjNcdTY1MjRcdTY1''@;'; put 'put ''MjZcdTY1MjdcdTY1MjhcdTY1MjlcdTY1MmFcdTY1MmNcdTY1MmRcdTY1MzBcdTY1MzFcdTY1MzJcdTY1MzNcdTY1MzdcdTY1M2FcdTY1M2NcdTY1M2RcdTY1NDBcdTY1NDFcdTY1NDJcdTY1NDNcdTY1NDRcdTY1NDZcdTY1NDdcdTY1NGFcdTY1NGJcdTY1NGRcdTY1NGVcdTY1NTBcdTY1NTJc''@;'; put 'put ''dTY1NTNcdTY1NTRcdTY1NTdcdTY1NThcdTY1NWFcdTY1NWNcdTY1NWZcdTY1NjBcdTY1NjFcdTY1NjRcdTY1NjVcdTY1NjdcdTY1NjhcdTY1NjlcdTY1NmFcdTY1NmRcdTY1NmVcdTY1NmZcdTY1NzFcdTY1NzNcdTY1NzVcdTY1NzZcdTY1NzhcdTY1NzlcdTY1N2FcdTY1N2JcdTY1N2NcdTY1''@;'; put 'put ''N2RcdTY1N2VcdTY1N2ZcdTY1ODBcdTY1ODFcdTY1ODJcdTY1ODNcdTY1ODRcdTY1ODVcdTY1ODZcdTY1ODhcdTY1ODlcdTY1OGFcdTY1OGRcdTY1OGVcdTY1OGZcdTY1OTJcdTY1OTRcdTY1OTVcdTY1OTZcdTY1OThcdTY1OWFcdTY1OWRcdTY1OWVcdTY1YTBcdTY1YTJcdTY1YTNcdTY1YTZc''@;'; put 'put ''dTY1YThcdTY1YWFcdTY1YWNcdTY1YWVcdTY1YjFcdTY1YjJcdTY1YjNcdTY1YjRcdTY1YjVcdTY1YjZcdTY1YjdcdTY1YjhcdTY1YmFcdTY1YmJcdTY1YmVcdTY1YmZcdTY1YzBcdTY1YzJcdTY1YzdcdTY1YzhcdTY1YzlcdTY1Y2FcdTY1Y2RcdTY1ZDBcdTY1ZDFcdTY1ZDNcdTY1ZDRcdTY1''@;'; put 'put ''ZDVcdTY1ZDhcdTY1ZDlcdTY1ZGFcdTY1ZGJcdTY1ZGNcdTY1ZGRcdTY1ZGVcdTY1ZGZcdTY1ZTFcdTY1ZTNcdTY1ZTRcdTY1ZWFcdTY1ZWJcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNDhdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE0OF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNDhd''@;'; put 'put ''W2ddXT0zNzg4OCtnLHlbMzc4ODgrZ109X1sxNDhdW2ddKTtmb3IoX1sxNDldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY1ZjJcdTY1ZjNcdTY1ZjRcdTY1ZjVcdTY1ZjhcdTY1ZjlcdTY1ZmJcdTY1ZmNcdTY1ZmRcdTY1ZmVcdTY1''@;'; put 'put ''ZmZcdTY2MDFcdTY2MDRcdTY2MDVcdTY2MDdcdTY2MDhcdTY2MDlcdTY2MGJcdTY2MGRcdTY2MTBcdTY2MTFcdTY2MTJcdTY2MTZcdTY2MTdcdTY2MThcdTY2MWFcdTY2MWJcdTY2MWNcdTY2MWVcdTY2MjFcdTY2MjJcdTY2MjNcdTY2MjRcdTY2MjZcdTY2MjlcdTY2MmFcdTY2MmJcdTY2MmNc''@;'; put 'put ''dTY2MmVcdTY2MzBcdTY2MzJcdTY2MzNcdTY2MzdcdTY2MzhcdTY2MzlcdTY2M2FcdTY2M2JcdTY2M2RcdTY2M2ZcdTY2NDBcdTY2NDJcdTY2NDRcdTY2NDVcdTY2NDZcdTY2NDdcdTY2NDhcdTY2NDlcdTY2NGFcdTY2NGRcdTY2NGVcdTY2NTBcdTY2NTFcdTY2NThcdWZmZmRcdTY2NTlcdTY2''@;'; put 'put ''NWJcdTY2NWNcdTY2NWRcdTY2NWVcdTY2NjBcdTY2NjJcdTY2NjNcdTY2NjVcdTY2NjdcdTY2NjlcdTY2NmFcdTY2NmJcdTY2NmNcdTY2NmRcdTY2NzFcdTY2NzJcdTY2NzNcdTY2NzVcdTY2NzhcdTY2NzlcdTY2N2JcdTY2N2NcdTY2N2RcdTY2N2ZcdTY2ODBcdTY2ODFcdTY2ODNcdTY2ODVc''@;'; put 'put ''dTY2ODZcdTY2ODhcdTY2ODlcdTY2OGFcdTY2OGJcdTY2OGRcdTY2OGVcdTY2OGZcdTY2OTBcdTY2OTJcdTY2OTNcdTY2OTRcdTY2OTVcdTY2OThcdTY2OTlcdTY2OWFcdTY2OWJcdTY2OWNcdTY2OWVcdTY2OWZcdTY2YTBcdTY2YTFcdTY2YTJcdTY2YTNcdTY2YTRcdTY2YTVcdTY2YTZcdTY2''@;'; put 'put ''YTlcdTY2YWFcdTY2YWJcdTY2YWNcdTY2YWRcdTY2YWZcdTY2YjBcdTY2YjFcdTY2YjJcdTY2YjNcdTY2YjVcdTY2YjZcdTY2YjdcdTY2YjhcdTY2YmFcdTY2YmJcdTY2YmNcdTY2YmRcdTY2YmZcdTY2YzBcdTY2YzFcdTY2YzJcdTY2YzNcdTY2YzRcdTY2YzVcdTY2YzZcdTY2YzdcdTY2Yzhc''@;'; put 'put ''dTY2YzlcdTY2Y2FcdTY2Y2JcdTY2Y2NcdTY2Y2RcdTY2Y2VcdTY2Y2ZcdTY2ZDBcdTY2ZDFcdTY2ZDJcdTY2ZDNcdTY2ZDRcdTY2ZDVcdTY2ZDZcdTY2ZDdcdTY2ZDhcdTY2ZGFcdTY2ZGVcdTY2ZGZcdTY2ZTBcdTY2ZTFcdTY2ZTJcdTY2ZTNcdTY2ZTRcdTY2ZTVcdTY2ZTdcdTY2ZThcdTY2''@;'; put 'put ''ZWFcdTY2ZWJcdTY2ZWNcdTY2ZWRcdTY2ZWVcdTY2ZWZcdTY2ZjFcdTY2ZjVcdTY2ZjZcdTY2ZjhcdTY2ZmFcdTY2ZmJcdTY2ZmRcdTY3MDFcdTY3MDJcdTY3MDNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNDldLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE0OV1bZ10uY2hhckNvZGVBdCgw''@;'; put 'put ''KSYmKElbX1sxNDldW2ddXT0zODE0NCtnLHlbMzgxNDQrZ109X1sxNDldW2ddKTtmb3IoX1sxNTBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY3MDRcdTY3MDVcdTY3MDZcdTY3MDdcdTY3MGNcdTY3MGVcdTY3MGZcdTY3MTFcdTY3''@;'; put 'put ''MTJcdTY3MTNcdTY3MTZcdTY3MThcdTY3MTlcdTY3MWFcdTY3MWNcdTY3MWVcdTY3MjBcdTY3MjFcdTY3MjJcdTY3MjNcdTY3MjRcdTY3MjVcdTY3MjdcdTY3MjlcdTY3MmVcdTY3MzBcdTY3MzJcdTY3MzNcdTY3MzZcdTY3MzdcdTY3MzhcdTY3MzlcdTY3M2JcdTY3M2NcdTY3M2VcdTY3M2Zc''@;'; put 'put ''dTY3NDFcdTY3NDRcdTY3NDVcdTY3NDdcdTY3NGFcdTY3NGJcdTY3NGRcdTY3NTJcdTY3NTRcdTY3NTVcdTY3NTdcdTY3NThcdTY3NTlcdTY3NWFcdTY3NWJcdTY3NWRcdTY3NjJcdTY3NjNcdTY3NjRcdTY3NjZcdTY3NjdcdTY3NmJcdTY3NmNcdTY3NmVcdTY3NzFcdTY3NzRcdTY3NzZcdWZm''@;'; put 'put ''ZmRcdTY3NzhcdTY3NzlcdTY3N2FcdTY3N2JcdTY3N2RcdTY3ODBcdTY3ODJcdTY3ODNcdTY3ODVcdTY3ODZcdTY3ODhcdTY3OGFcdTY3OGNcdTY3OGRcdTY3OGVcdTY3OGZcdTY3OTFcdTY3OTJcdTY3OTNcdTY3OTRcdTY3OTZcdTY3OTlcdTY3OWJcdTY3OWZcdTY3YTBcdTY3YTFcdTY3YTRc''@;'; put 'put ''dTY3YTZcdTY3YTlcdTY3YWNcdTY3YWVcdTY3YjFcdTY3YjJcdTY3YjRcdTY3YjlcdTY3YmFcdTY3YmJcdTY3YmNcdTY3YmRcdTY3YmVcdTY3YmZcdTY3YzBcdTY3YzJcdTY3YzVcdTY3YzZcdTY3YzdcdTY3YzhcdTY3YzlcdTY3Y2FcdTY3Y2JcdTY3Y2NcdTY3Y2RcdTY3Y2VcdTY3ZDVcdTY3''@;'; put 'put ''ZDZcdTY3ZDdcdTY3ZGJcdTY3ZGZcdTY3ZTFcdTY3ZTNcdTY3ZTRcdTY3ZTZcdTY3ZTdcdTY3ZThcdTY3ZWFcdTY3ZWJcdTY3ZWRcdTY3ZWVcdTY3ZjJcdTY3ZjVcdTY3ZjZcdTY3ZjdcdTY3ZjhcdTY3ZjlcdTY3ZmFcdTY3ZmJcdTY3ZmNcdTY3ZmVcdTY4MDFcdTY4MDJcdTY4MDNcdTY4MDRc''@;'; put 'put ''dTY4MDZcdTY4MGRcdTY4MTBcdTY4MTJcdTY4MTRcdTY4MTVcdTY4MThcdTY4MTlcdTY4MWFcdTY4MWJcdTY4MWNcdTY4MWVcdTY4MWZcdTY4MjBcdTY4MjJcdTY4MjNcdTY4MjRcdTY4MjVcdTY4MjZcdTY4MjdcdTY4MjhcdTY4MmJcdTY4MmNcdTY4MmRcdTY4MmVcdTY4MmZcdTY4MzBcdTY4''@;'; put 'put ''MzFcdTY4MzRcdTY4MzVcdTY4MzZcdTY4M2FcdTY4M2JcdTY4M2ZcdTY4NDdcdTY4NGJcdTY4NGRcdTY4NGZcdTY4NTJcdTY4NTZcdTY4NTdcdTY4NThcdTY4NTlcdTY4NWFcdTY4NWJcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNTBdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE1MF1bZ10u''@;'; put 'put ''Y2hhckNvZGVBdCgwKSYmKElbX1sxNTBdW2ddXT0zODQwMCtnLHlbMzg0MDArZ109X1sxNTBdW2ddKTtmb3IoX1sxNTFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY4NWNcdTY4NWRcdTY4NWVcdTY4NWZcdTY4NmFcdTY4NmNcdTY4''@;'; put 'put ''NmRcdTY4NmVcdTY4NmZcdTY4NzBcdTY4NzFcdTY4NzJcdTY4NzNcdTY4NzVcdTY4NzhcdTY4NzlcdTY4N2FcdTY4N2JcdTY4N2NcdTY4N2RcdTY4N2VcdTY4N2ZcdTY4ODBcdTY4ODJcdTY4ODRcdTY4ODdcdTY4ODhcdTY4ODlcdTY4OGFcdTY4OGJcdTY4OGNcdTY4OGRcdTY4OGVcdTY4OTBc''@;'; put 'put ''dTY4OTFcdTY4OTJcdTY4OTRcdTY4OTVcdTY4OTZcdTY4OThcdTY4OTlcdTY4OWFcdTY4OWJcdTY4OWNcdTY4OWRcdTY4OWVcdTY4OWZcdTY4YTBcdTY4YTFcdTY4YTNcdTY4YTRcdTY4YTVcdTY4YTlcdTY4YWFcdTY4YWJcdTY4YWNcdTY4YWVcdTY4YjFcdTY4YjJcdTY4YjRcdTY4YjZcdTY4''@;'; put 'put ''YjdcdTY4YjhcdWZmZmRcdTY4YjlcdTY4YmFcdTY4YmJcdTY4YmNcdTY4YmRcdTY4YmVcdTY4YmZcdTY4YzFcdTY4YzNcdTY4YzRcdTY4YzVcdTY4YzZcdTY4YzdcdTY4YzhcdTY4Y2FcdTY4Y2NcdTY4Y2VcdTY4Y2ZcdTY4ZDBcdTY4ZDFcdTY4ZDNcdTY4ZDRcdTY4ZDZcdTY4ZDdcdTY4ZDlc''@;'; put 'put ''dTY4ZGJcdTY4ZGNcdTY4ZGRcdTY4ZGVcdTY4ZGZcdTY4ZTFcdTY4ZTJcdTY4ZTRcdTY4ZTVcdTY4ZTZcdTY4ZTdcdTY4ZThcdTY4ZTlcdTY4ZWFcdTY4ZWJcdTY4ZWNcdTY4ZWRcdTY4ZWZcdTY4ZjJcdTY4ZjNcdTY4ZjRcdTY4ZjZcdTY4ZjdcdTY4ZjhcdTY4ZmJcdTY4ZmRcdTY4ZmVcdTY4''@;'; put 'put ''ZmZcdTY5MDBcdTY5MDJcdTY5MDNcdTY5MDRcdTY5MDZcdTY5MDdcdTY5MDhcdTY5MDlcdTY5MGFcdTY5MGNcdTY5MGZcdTY5MTFcdTY5MTNcdTY5MTRcdTY5MTVcdTY5MTZcdTY5MTdcdTY5MThcdTY5MTlcdTY5MWFcdTY5MWJcdTY5MWNcdTY5MWRcdTY5MWVcdTY5MjFcdTY5MjJcdTY5MjNc''@;'; put 'put ''dTY5MjVcdTY5MjZcdTY5MjdcdTY5MjhcdTY5MjlcdTY5MmFcdTY5MmJcdTY5MmNcdTY5MmVcdTY5MmZcdTY5MzFcdTY5MzJcdTY5MzNcdTY5MzVcdTY5MzZcdTY5MzdcdTY5MzhcdTY5M2FcdTY5M2JcdTY5M2NcdTY5M2VcdTY5NDBcdTY5NDFcdTY5NDNcdTY5NDRcdTY5NDVcdTY5NDZcdTY5''@;'; put 'put ''NDdcdTY5NDhcdTY5NDlcdTY5NGFcdTY5NGJcdTY5NGNcdTY5NGRcdTY5NGVcdTY5NGZcdTY5NTBcdTY5NTFcdTY5NTJcdTY5NTNcdTY5NTVcdTY5NTZcdTY5NThcdTY5NTlcdTY5NWJcdTY5NWNcdTY5NWZcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNTFdLmxlbmd0aDsrK2cpNjU1MzMh''@;'; put 'put ''PT1fWzE1MV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNTFdW2ddXT0zODY1NitnLHlbMzg2NTYrZ109X1sxNTFdW2ddKTtmb3IoX1sxNTJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY5NjFcdTY5NjJcdTY5NjRcdTY5NjVcdTY5''@;'; put 'put ''NjdcdTY5NjhcdTY5NjlcdTY5NmFcdTY5NmNcdTY5NmRcdTY5NmZcdTY5NzBcdTY5NzJcdTY5NzNcdTY5NzRcdTY5NzVcdTY5NzZcdTY5N2FcdTY5N2JcdTY5N2RcdTY5N2VcdTY5N2ZcdTY5ODFcdTY5ODNcdTY5ODVcdTY5OGFcdTY5OGJcdTY5OGNcdTY5OGVcdTY5OGZcdTY5OTBcdTY5OTFc''@;'; put 'put ''dTY5OTJcdTY5OTNcdTY5OTZcdTY5OTdcdTY5OTlcdTY5OWFcdTY5OWRcdTY5OWVcdTY5OWZcdTY5YTBcdTY5YTFcdTY5YTJcdTY5YTNcdTY5YTRcdTY5YTVcdTY5YTZcdTY5YTlcdTY5YWFcdTY5YWNcdTY5YWVcdTY5YWZcdTY5YjBcdTY5YjJcdTY5YjNcdTY5YjVcdTY5YjZcdTY5YjhcdTY5''@;'; put 'put ''YjlcdTY5YmFcdTY5YmNcdTY5YmRcdWZmZmRcdTY5YmVcdTY5YmZcdTY5YzBcdTY5YzJcdTY5YzNcdTY5YzRcdTY5YzVcdTY5YzZcdTY5YzdcdTY5YzhcdTY5YzlcdTY5Y2JcdTY5Y2RcdTY5Y2ZcdTY5ZDFcdTY5ZDJcdTY5ZDNcdTY5ZDVcdTY5ZDZcdTY5ZDdcdTY5ZDhcdTY5ZDlcdTY5ZGFc''@;'; put 'put ''dTY5ZGNcdTY5ZGRcdTY5ZGVcdTY5ZTFcdTY5ZTJcdTY5ZTNcdTY5ZTRcdTY5ZTVcdTY5ZTZcdTY5ZTdcdTY5ZThcdTY5ZTlcdTY5ZWFcdTY5ZWJcdTY5ZWNcdTY5ZWVcdTY5ZWZcdTY5ZjBcdTY5ZjFcdTY5ZjNcdTY5ZjRcdTY5ZjVcdTY5ZjZcdTY5ZjdcdTY5ZjhcdTY5ZjlcdTY5ZmFcdTY5''@;'; put 'put ''ZmJcdTY5ZmNcdTY5ZmVcdTZhMDBcdTZhMDFcdTZhMDJcdTZhMDNcdTZhMDRcdTZhMDVcdTZhMDZcdTZhMDdcdTZhMDhcdTZhMDlcdTZhMGJcdTZhMGNcdTZhMGRcdTZhMGVcdTZhMGZcdTZhMTBcdTZhMTFcdTZhMTJcdTZhMTNcdTZhMTRcdTZhMTVcdTZhMTZcdTZhMTlcdTZhMWFcdTZhMWJc''@;'; put 'put ''dTZhMWNcdTZhMWRcdTZhMWVcdTZhMjBcdTZhMjJcdTZhMjNcdTZhMjRcdTZhMjVcdTZhMjZcdTZhMjdcdTZhMjlcdTZhMmJcdTZhMmNcdTZhMmRcdTZhMmVcdTZhMzBcdTZhMzJcdTZhMzNcdTZhMzRcdTZhMzZcdTZhMzdcdTZhMzhcdTZhMzlcdTZhM2FcdTZhM2JcdTZhM2NcdTZhM2ZcdTZh''@;'; put 'put ''NDBcdTZhNDFcdTZhNDJcdTZhNDNcdTZhNDVcdTZhNDZcdTZhNDhcdTZhNDlcdTZhNGFcdTZhNGJcdTZhNGNcdTZhNGRcdTZhNGVcdTZhNGZcdTZhNTFcdTZhNTJcdTZhNTNcdTZhNTRcdTZhNTVcdTZhNTZcdTZhNTdcdTZhNWFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNTJdLmxlbmd0''@;'; put 'put ''aDsrK2cpNjU1MzMhPT1fWzE1Ml1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNTJdW2ddXT0zODkxMitnLHlbMzg5MTIrZ109X1sxNTJdW2ddKTtmb3IoX1sxNTNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZhNWNcdTZhNWRcdTZh''@;'; put 'put ''NWVcdTZhNWZcdTZhNjBcdTZhNjJcdTZhNjNcdTZhNjRcdTZhNjZcdTZhNjdcdTZhNjhcdTZhNjlcdTZhNmFcdTZhNmJcdTZhNmNcdTZhNmRcdTZhNmVcdTZhNmZcdTZhNzBcdTZhNzJcdTZhNzNcdTZhNzRcdTZhNzVcdTZhNzZcdTZhNzdcdTZhNzhcdTZhN2FcdTZhN2JcdTZhN2RcdTZhN2Vc''@;'; put 'put ''dTZhN2ZcdTZhODFcdTZhODJcdTZhODNcdTZhODVcdTZhODZcdTZhODdcdTZhODhcdTZhODlcdTZhOGFcdTZhOGJcdTZhOGNcdTZhOGRcdTZhOGZcdTZhOTJcdTZhOTNcdTZhOTRcdTZhOTVcdTZhOTZcdTZhOThcdTZhOTlcdTZhOWFcdTZhOWJcdTZhOWNcdTZhOWRcdTZhOWVcdTZhOWZcdTZh''@;'; put 'put ''YTFcdTZhYTJcdTZhYTNcdTZhYTRcdTZhYTVcdTZhYTZcdWZmZmRcdTZhYTdcdTZhYThcdTZhYWFcdTZhYWRcdTZhYWVcdTZhYWZcdTZhYjBcdTZhYjFcdTZhYjJcdTZhYjNcdTZhYjRcdTZhYjVcdTZhYjZcdTZhYjdcdTZhYjhcdTZhYjlcdTZhYmFcdTZhYmJcdTZhYmNcdTZhYmRcdTZhYmVc''@;'; put 'put ''dTZhYmZcdTZhYzBcdTZhYzFcdTZhYzJcdTZhYzNcdTZhYzRcdTZhYzVcdTZhYzZcdTZhYzdcdTZhYzhcdTZhYzlcdTZhY2FcdTZhY2JcdTZhY2NcdTZhY2RcdTZhY2VcdTZhY2ZcdTZhZDBcdTZhZDFcdTZhZDJcdTZhZDNcdTZhZDRcdTZhZDVcdTZhZDZcdTZhZDdcdTZhZDhcdTZhZDlcdTZh''@;'; put 'put ''ZGFcdTZhZGJcdTZhZGNcdTZhZGRcdTZhZGVcdTZhZGZcdTZhZTBcdTZhZTFcdTZhZTJcdTZhZTNcdTZhZTRcdTZhZTVcdTZhZTZcdTZhZTdcdTZhZThcdTZhZTlcdTZhZWFcdTZhZWJcdTZhZWNcdTZhZWRcdTZhZWVcdTZhZWZcdTZhZjBcdTZhZjFcdTZhZjJcdTZhZjNcdTZhZjRcdTZhZjVc''@;'; put 'put ''dTZhZjZcdTZhZjdcdTZhZjhcdTZhZjlcdTZhZmFcdTZhZmJcdTZhZmNcdTZhZmRcdTZhZmVcdTZhZmZcdTZiMDBcdTZiMDFcdTZiMDJcdTZiMDNcdTZiMDRcdTZiMDVcdTZiMDZcdTZiMDdcdTZiMDhcdTZiMDlcdTZiMGFcdTZiMGJcdTZiMGNcdTZiMGRcdTZiMGVcdTZiMGZcdTZiMTBcdTZi''@;'; put 'put ''MTFcdTZiMTJcdTZiMTNcdTZiMTRcdTZiMTVcdTZiMTZcdTZiMTdcdTZiMThcdTZiMTlcdTZiMWFcdTZiMWJcdTZiMWNcdTZiMWRcdTZiMWVcdTZiMWZcdTZiMjVcdTZiMjZcdTZiMjhcdTZiMjlcdTZiMmFcdTZiMmJcdTZiMmNcdTZiMmRcdTZiMmVcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9''@;'; put 'put ''X1sxNTNdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE1M11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNTNdW2ddXT0zOTE2OCtnLHlbMzkxNjgrZ109X1sxNTNdW2ddKTtmb3IoX1sxNTRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZi''@;'; put 'put ''MmZcdTZiMzBcdTZiMzFcdTZiMzNcdTZiMzRcdTZiMzVcdTZiMzZcdTZiMzhcdTZiM2JcdTZiM2NcdTZiM2RcdTZiM2ZcdTZiNDBcdTZiNDFcdTZiNDJcdTZiNDRcdTZiNDVcdTZiNDhcdTZiNGFcdTZiNGJcdTZiNGRcdTZiNGVcdTZiNGZcdTZiNTBcdTZiNTFcdTZiNTJcdTZiNTNcdTZiNTRc''@;'; put 'put ''dTZiNTVcdTZiNTZcdTZiNTdcdTZiNThcdTZiNWFcdTZiNWJcdTZiNWNcdTZiNWRcdTZiNWVcdTZiNWZcdTZiNjBcdTZiNjFcdTZiNjhcdTZiNjlcdTZiNmJcdTZiNmNcdTZiNmRcdTZiNmVcdTZiNmZcdTZiNzBcdTZiNzFcdTZiNzJcdTZiNzNcdTZiNzRcdTZiNzVcdTZiNzZcdTZiNzdcdTZi''@;'; put 'put ''NzhcdTZiN2FcdTZiN2RcdTZiN2VcdTZiN2ZcdTZiODBcdTZiODVcdTZiODhcdWZmZmRcdTZiOGNcdTZiOGVcdTZiOGZcdTZiOTBcdTZiOTFcdTZiOTRcdTZiOTVcdTZiOTdcdTZiOThcdTZiOTlcdTZiOWNcdTZiOWRcdTZiOWVcdTZiOWZcdTZiYTBcdTZiYTJcdTZiYTNcdTZiYTRcdTZiYTVc''@;'; put 'put ''dTZiYTZcdTZiYTdcdTZiYThcdTZiYTlcdTZiYWJcdTZiYWNcdTZiYWRcdTZiYWVcdTZiYWZcdTZiYjBcdTZiYjFcdTZiYjJcdTZiYjZcdTZiYjhcdTZiYjlcdTZiYmFcdTZiYmJcdTZiYmNcdTZiYmRcdTZiYmVcdTZiYzBcdTZiYzNcdTZiYzRcdTZiYzZcdTZiYzdcdTZiYzhcdTZiYzlcdTZi''@;'; put 'put ''Y2FcdTZiY2NcdTZiY2VcdTZiZDBcdTZiZDFcdTZiZDhcdTZiZGFcdTZiZGNcdTZiZGRcdTZiZGVcdTZiZGZcdTZiZTBcdTZiZTJcdTZiZTNcdTZiZTRcdTZiZTVcdTZiZTZcdTZiZTdcdTZiZThcdTZiZTlcdTZiZWNcdTZiZWRcdTZiZWVcdTZiZjBcdTZiZjFcdTZiZjJcdTZiZjRcdTZiZjZc''@;'; put 'put ''dTZiZjdcdTZiZjhcdTZiZmFcdTZiZmJcdTZiZmNcdTZiZmVcdTZiZmZcdTZjMDBcdTZjMDFcdTZjMDJcdTZjMDNcdTZjMDRcdTZjMDhcdTZjMDlcdTZjMGFcdTZjMGJcdTZjMGNcdTZjMGVcdTZjMTJcdTZjMTdcdTZjMWNcdTZjMWRcdTZjMWVcdTZjMjBcdTZjMjNcdTZjMjVcdTZjMmJcdTZj''@;'; put 'put ''MmNcdTZjMmRcdTZjMzFcdTZjMzNcdTZjMzZcdTZjMzdcdTZjMzlcdTZjM2FcdTZjM2JcdTZjM2NcdTZjM2VcdTZjM2ZcdTZjNDNcdTZjNDRcdTZjNDVcdTZjNDhcdTZjNGJcdTZjNGNcdTZjNGRcdTZjNGVcdTZjNGZcdTZjNTFcdTZjNTJcdTZjNTNcdTZjNTZcdTZjNThcdWZmZmQiLnNwbGl0''@;'; put 'put ''KCIiKSxnPTA7ZyE9X1sxNTRdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE1NF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNTRdW2ddXT0zOTQyNCtnLHlbMzk0MjQrZ109X1sxNTRdW2ddKTtmb3IoX1sxNTVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdTZjNTlcdTZjNWFcdTZjNjJcdTZjNjNcdTZjNjVcdTZjNjZcdTZjNjdcdTZjNmJcdTZjNmNcdTZjNmRcdTZjNmVcdTZjNmZcdTZjNzFcdTZjNzNcdTZjNzVcdTZjNzdcdTZjNzhcdTZjN2FcdTZjN2JcdTZjN2NcdTZjN2ZcdTZjODBcdTZjODRcdTZjODdcdTZjOGFcdTZjOGJc''@;'; put 'put ''dTZjOGRcdTZjOGVcdTZjOTFcdTZjOTJcdTZjOTVcdTZjOTZcdTZjOTdcdTZjOThcdTZjOWFcdTZjOWNcdTZjOWRcdTZjOWVcdTZjYTBcdTZjYTJcdTZjYThcdTZjYWNcdTZjYWZcdTZjYjBcdTZjYjRcdTZjYjVcdTZjYjZcdTZjYjdcdTZjYmFcdTZjYzBcdTZjYzFcdTZjYzJcdTZjYzNcdTZj''@;'; put 'put ''YzZcdTZjYzdcdTZjYzhcdTZjY2JcdTZjY2RcdTZjY2VcdTZjY2ZcdTZjZDFcdTZjZDJcdTZjZDhcdWZmZmRcdTZjZDlcdTZjZGFcdTZjZGNcdTZjZGRcdTZjZGZcdTZjZTRcdTZjZTZcdTZjZTdcdTZjZTlcdTZjZWNcdTZjZWRcdTZjZjJcdTZjZjRcdTZjZjlcdTZjZmZcdTZkMDBcdTZkMDJc''@;'; put 'put ''dTZkMDNcdTZkMDVcdTZkMDZcdTZkMDhcdTZkMDlcdTZkMGFcdTZkMGRcdTZkMGZcdTZkMTBcdTZkMTFcdTZkMTNcdTZkMTRcdTZkMTVcdTZkMTZcdTZkMThcdTZkMWNcdTZkMWRcdTZkMWZcdTZkMjBcdTZkMjFcdTZkMjJcdTZkMjNcdTZkMjRcdTZkMjZcdTZkMjhcdTZkMjlcdTZkMmNcdTZk''@;'; put 'put ''MmRcdTZkMmZcdTZkMzBcdTZkMzRcdTZkMzZcdTZkMzdcdTZkMzhcdTZkM2FcdTZkM2ZcdTZkNDBcdTZkNDJcdTZkNDRcdTZkNDlcdTZkNGNcdTZkNTBcdTZkNTVcdTZkNTZcdTZkNTdcdTZkNThcdTZkNWJcdTZkNWRcdTZkNWZcdTZkNjFcdTZkNjJcdTZkNjRcdTZkNjVcdTZkNjdcdTZkNjhc''@;'; put 'put ''dTZkNmJcdTZkNmNcdTZkNmRcdTZkNzBcdTZkNzFcdTZkNzJcdTZkNzNcdTZkNzVcdTZkNzZcdTZkNzlcdTZkN2FcdTZkN2JcdTZkN2RcdTZkN2VcdTZkN2ZcdTZkODBcdTZkODFcdTZkODNcdTZkODRcdTZkODZcdTZkODdcdTZkOGFcdTZkOGJcdTZkOGRcdTZkOGZcdTZkOTBcdTZkOTJcdTZk''@;'; put 'put ''OTZcdTZkOTdcdTZkOThcdTZkOTlcdTZkOWFcdTZkOWNcdTZkYTJcdTZkYTVcdTZkYWNcdTZkYWRcdTZkYjBcdTZkYjFcdTZkYjNcdTZkYjRcdTZkYjZcdTZkYjdcdTZkYjlcdTZkYmFcdTZkYmJcdTZkYmNcdTZkYmRcdTZkYmVcdTZkYzFcdTZkYzJcdTZkYzNcdTZkYzhcdTZkYzlcdTZkY2Fc''@;'; put 'put ''dWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNTVdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE1NV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNTVdW2ddXT0zOTY4MCtnLHlbMzk2ODArZ109X1sxNTVdW2ddKTtmb3IoX1sxNTZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZkY2RcdTZkY2VcdTZkY2ZcdTZkZDBcdTZkZDJcdTZkZDNcdTZkZDRcdTZkZDVcdTZkZDdcdTZkZGFcdTZkZGJcdTZkZGNcdTZkZGZcdTZkZTJcdTZkZTNcdTZkZTVcdTZkZTdcdTZkZThcdTZkZTlcdTZkZWFcdTZkZWRcdTZkZWZcdTZkZjBcdTZkZjJc''@;'; put 'put ''dTZkZjRcdTZkZjVcdTZkZjZcdTZkZjhcdTZkZmFcdTZkZmRcdTZkZmVcdTZkZmZcdTZlMDBcdTZlMDFcdTZlMDJcdTZlMDNcdTZlMDRcdTZlMDZcdTZlMDdcdTZlMDhcdTZlMDlcdTZlMGJcdTZlMGZcdTZlMTJcdTZlMTNcdTZlMTVcdTZlMThcdTZlMTlcdTZlMWJcdTZlMWNcdTZlMWVcdTZl''@;'; put 'put ''MWZcdTZlMjJcdTZlMjZcdTZlMjdcdTZlMjhcdTZlMmFcdTZlMmNcdTZlMmVcdTZlMzBcdTZlMzFcdTZlMzNcdTZlMzVcdWZmZmRcdTZlMzZcdTZlMzdcdTZlMzlcdTZlM2JcdTZlM2NcdTZlM2RcdTZlM2VcdTZlM2ZcdTZlNDBcdTZlNDFcdTZlNDJcdTZlNDVcdTZlNDZcdTZlNDdcdTZlNDhc''@;'; put 'put ''dTZlNDlcdTZlNGFcdTZlNGJcdTZlNGNcdTZlNGZcdTZlNTBcdTZlNTFcdTZlNTJcdTZlNTVcdTZlNTdcdTZlNTlcdTZlNWFcdTZlNWNcdTZlNWRcdTZlNWVcdTZlNjBcdTZlNjFcdTZlNjJcdTZlNjNcdTZlNjRcdTZlNjVcdTZlNjZcdTZlNjdcdTZlNjhcdTZlNjlcdTZlNmFcdTZlNmNcdTZl''@;'; put 'put ''NmRcdTZlNmZcdTZlNzBcdTZlNzFcdTZlNzJcdTZlNzNcdTZlNzRcdTZlNzVcdTZlNzZcdTZlNzdcdTZlNzhcdTZlNzlcdTZlN2FcdTZlN2JcdTZlN2NcdTZlN2RcdTZlODBcdTZlODFcdTZlODJcdTZlODRcdTZlODdcdTZlODhcdTZlOGFcdTZlOGJcdTZlOGNcdTZlOGRcdTZlOGVcdTZlOTFc''@;'; put 'put ''dTZlOTJcdTZlOTNcdTZlOTRcdTZlOTVcdTZlOTZcdTZlOTdcdTZlOTlcdTZlOWFcdTZlOWJcdTZlOWRcdTZlOWVcdTZlYTBcdTZlYTFcdTZlYTNcdTZlYTRcdTZlYTZcdTZlYThcdTZlYTlcdTZlYWJcdTZlYWNcdTZlYWRcdTZlYWVcdTZlYjBcdTZlYjNcdTZlYjVcdTZlYjhcdTZlYjlcdTZl''@;'; put 'put ''YmNcdTZlYmVcdTZlYmZcdTZlYzBcdTZlYzNcdTZlYzRcdTZlYzVcdTZlYzZcdTZlYzhcdTZlYzlcdTZlY2FcdTZlY2NcdTZlY2RcdTZlY2VcdTZlZDBcdTZlZDJcdTZlZDZcdTZlZDhcdTZlZDlcdTZlZGJcdTZlZGNcdTZlZGRcdTZlZTNcdTZlZTdcdTZlZWFcdTZlZWJcdTZlZWNcdTZlZWRc''@;'; put 'put ''dTZlZWVcdTZlZWZcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNTZdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE1Nl1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNTZdW2ddXT0zOTkzNitnLHlbMzk5MzYrZ109X1sxNTZdW2ddKTtmb3IoX1sxNTddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZlZjBcdTZlZjFcdTZlZjJcdTZlZjNcdTZlZjVcdTZlZjZcdTZlZjdcdTZlZjhcdTZlZmFcdTZlZmJcdTZlZmNcdTZlZmRcdTZlZmVcdTZlZmZcdTZmMDBcdTZmMDFcdTZmMDNcdTZmMDRcdTZmMDVcdTZmMDdcdTZmMDhcdTZmMGFc''@;'; put 'put ''dTZmMGJcdTZmMGNcdTZmMGRcdTZmMGVcdTZmMTBcdTZmMTFcdTZmMTJcdTZmMTZcdTZmMTdcdTZmMThcdTZmMTlcdTZmMWFcdTZmMWJcdTZmMWNcdTZmMWRcdTZmMWVcdTZmMWZcdTZmMjFcdTZmMjJcdTZmMjNcdTZmMjVcdTZmMjZcdTZmMjdcdTZmMjhcdTZmMmNcdTZmMmVcdTZmMzBcdTZm''@;'; put 'put ''MzJcdTZmMzRcdTZmMzVcdTZmMzdcdTZmMzhcdTZmMzlcdTZmM2FcdTZmM2JcdTZmM2NcdTZmM2RcdTZmM2ZcdTZmNDBcdTZmNDFcdTZmNDJcdWZmZmRcdTZmNDNcdTZmNDRcdTZmNDVcdTZmNDhcdTZmNDlcdTZmNGFcdTZmNGNcdTZmNGVcdTZmNGZcdTZmNTBcdTZmNTFcdTZmNTJcdTZmNTNc''@;'; put 'put ''dTZmNTRcdTZmNTVcdTZmNTZcdTZmNTdcdTZmNTlcdTZmNWFcdTZmNWJcdTZmNWRcdTZmNWZcdTZmNjBcdTZmNjFcdTZmNjNcdTZmNjRcdTZmNjVcdTZmNjdcdTZmNjhcdTZmNjlcdTZmNmFcdTZmNmJcdTZmNmNcdTZmNmZcdTZmNzBcdTZmNzFcdTZmNzNcdTZmNzVcdTZmNzZcdTZmNzdcdTZm''@;'; put 'put ''NzlcdTZmN2JcdTZmN2RcdTZmN2VcdTZmN2ZcdTZmODBcdTZmODFcdTZmODJcdTZmODNcdTZmODVcdTZmODZcdTZmODdcdTZmOGFcdTZmOGJcdTZmOGZcdTZmOTBcdTZmOTFcdTZmOTJcdTZmOTNcdTZmOTRcdTZmOTVcdTZmOTZcdTZmOTdcdTZmOThcdTZmOTlcdTZmOWFcdTZmOWJcdTZmOWRc''@;'; put 'put ''dTZmOWVcdTZmOWZcdTZmYTBcdTZmYTJcdTZmYTNcdTZmYTRcdTZmYTVcdTZmYTZcdTZmYThcdTZmYTlcdTZmYWFcdTZmYWJcdTZmYWNcdTZmYWRcdTZmYWVcdTZmYWZcdTZmYjBcdTZmYjFcdTZmYjJcdTZmYjRcdTZmYjVcdTZmYjdcdTZmYjhcdTZmYmFcdTZmYmJcdTZmYmNcdTZmYmRcdTZm''@;'; put 'put ''YmVcdTZmYmZcdTZmYzFcdTZmYzNcdTZmYzRcdTZmYzVcdTZmYzZcdTZmYzdcdTZmYzhcdTZmY2FcdTZmY2JcdTZmY2NcdTZmY2RcdTZmY2VcdTZmY2ZcdTZmZDBcdTZmZDNcdTZmZDRcdTZmZDVcdTZmZDZcdTZmZDdcdTZmZDhcdTZmZDlcdTZmZGFcdTZmZGJcdTZmZGNcdTZmZGRcdTZmZGZc''@;'; put 'put ''dTZmZTJcdTZmZTNcdTZmZTRcdTZmZTVcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNTddLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE1N11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNTddW2ddXT00MDE5MitnLHlbNDAxOTIrZ109X1sxNTddW2ddKTtmb3IoX1sxNThdPSJcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZmZTZcdTZmZTdcdTZmZThcdTZmZTlcdTZmZWFcdTZmZWJcdTZmZWNcdTZmZWRcdTZmZjBcdTZmZjFcdTZmZjJcdTZmZjNcdTZmZjRcdTZmZjVcdTZmZjZcdTZmZjdcdTZmZjhcdTZmZjlcdTZmZmFcdTZmZmJc''@;'; put 'put ''dTZmZmNcdTZmZmRcdTZmZmVcdTZmZmZcdTcwMDBcdTcwMDFcdTcwMDJcdTcwMDNcdTcwMDRcdTcwMDVcdTcwMDZcdTcwMDdcdTcwMDhcdTcwMDlcdTcwMGFcdTcwMGJcdTcwMGNcdTcwMGRcdTcwMGVcdTcwMGZcdTcwMTBcdTcwMTJcdTcwMTNcdTcwMTRcdTcwMTVcdTcwMTZcdTcwMTdcdTcw''@;'; put 'put ''MThcdTcwMTlcdTcwMWNcdTcwMWRcdTcwMWVcdTcwMWZcdTcwMjBcdTcwMjFcdTcwMjJcdTcwMjRcdTcwMjVcdTcwMjZcdTcwMjdcdTcwMjhcdTcwMjlcdTcwMmFcdWZmZmRcdTcwMmJcdTcwMmNcdTcwMmRcdTcwMmVcdTcwMmZcdTcwMzBcdTcwMzFcdTcwMzJcdTcwMzNcdTcwMzRcdTcwMzZc''@;'; put 'put ''dTcwMzdcdTcwMzhcdTcwM2FcdTcwM2JcdTcwM2NcdTcwM2RcdTcwM2VcdTcwM2ZcdTcwNDBcdTcwNDFcdTcwNDJcdTcwNDNcdTcwNDRcdTcwNDVcdTcwNDZcdTcwNDdcdTcwNDhcdTcwNDlcdTcwNGFcdTcwNGJcdTcwNGRcdTcwNGVcdTcwNTBcdTcwNTFcdTcwNTJcdTcwNTNcdTcwNTRcdTcw''@;'; put 'put ''NTVcdTcwNTZcdTcwNTdcdTcwNThcdTcwNTlcdTcwNWFcdTcwNWJcdTcwNWNcdTcwNWRcdTcwNWZcdTcwNjBcdTcwNjFcdTcwNjJcdTcwNjNcdTcwNjRcdTcwNjVcdTcwNjZcdTcwNjdcdTcwNjhcdTcwNjlcdTcwNmFcdTcwNmVcdTcwNzFcdTcwNzJcdTcwNzNcdTcwNzRcdTcwNzdcdTcwNzlc''@;'; put 'put ''dTcwN2FcdTcwN2JcdTcwN2RcdTcwODFcdTcwODJcdTcwODNcdTcwODRcdTcwODZcdTcwODdcdTcwODhcdTcwOGJcdTcwOGNcdTcwOGRcdTcwOGZcdTcwOTBcdTcwOTFcdTcwOTNcdTcwOTdcdTcwOThcdTcwOWFcdTcwOWJcdTcwOWVcdTcwOWZcdTcwYTBcdTcwYTFcdTcwYTJcdTcwYTNcdTcw''@;'; put 'put ''YTRcdTcwYTVcdTcwYTZcdTcwYTdcdTcwYThcdTcwYTlcdTcwYWFcdTcwYjBcdTcwYjJcdTcwYjRcdTcwYjVcdTcwYjZcdTcwYmFcdTcwYmVcdTcwYmZcdTcwYzRcdTcwYzVcdTcwYzZcdTcwYzdcdTcwYzlcdTcwY2JcdTcwY2NcdTcwY2RcdTcwY2VcdTcwY2ZcdTcwZDBcdTcwZDFcdTcwZDJc''@;'; put 'put ''dTcwZDNcdTcwZDRcdTcwZDVcdTcwZDZcdTcwZDdcdTcwZGFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNThdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE1OF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNThdW2ddXT00MDQ0OCtnLHlbNDA0NDgrZ109X1sxNThdW2ddKTtmb3IoX1sxNTld''@;'; put 'put ''PSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTcwZGNcdTcwZGRcdTcwZGVcdTcwZTBcdTcwZTFcdTcwZTJcdTcwZTNcdTcwZTVcdTcwZWFcdTcwZWVcdTcwZjBcdTcwZjFcdTcwZjJcdTcwZjNcdTcwZjRcdTcwZjVcdTcwZjZcdTcwZjhc''@;'; put 'put ''dTcwZmFcdTcwZmJcdTcwZmNcdTcwZmVcdTcwZmZcdTcxMDBcdTcxMDFcdTcxMDJcdTcxMDNcdTcxMDRcdTcxMDVcdTcxMDZcdTcxMDdcdTcxMDhcdTcxMGJcdTcxMGNcdTcxMGRcdTcxMGVcdTcxMGZcdTcxMTFcdTcxMTJcdTcxMTRcdTcxMTdcdTcxMWJcdTcxMWNcdTcxMWRcdTcxMWVcdTcx''@;'; put 'put ''MWZcdTcxMjBcdTcxMjFcdTcxMjJcdTcxMjNcdTcxMjRcdTcxMjVcdTcxMjdcdTcxMjhcdTcxMjlcdTcxMmFcdTcxMmJcdTcxMmNcdTcxMmRcdTcxMmVcdTcxMzJcdTcxMzNcdTcxMzRcdWZmZmRcdTcxMzVcdTcxMzdcdTcxMzhcdTcxMzlcdTcxM2FcdTcxM2JcdTcxM2NcdTcxM2RcdTcxM2Vc''@;'; put 'put ''dTcxM2ZcdTcxNDBcdTcxNDFcdTcxNDJcdTcxNDNcdTcxNDRcdTcxNDZcdTcxNDdcdTcxNDhcdTcxNDlcdTcxNGJcdTcxNGRcdTcxNGZcdTcxNTBcdTcxNTFcdTcxNTJcdTcxNTNcdTcxNTRcdTcxNTVcdTcxNTZcdTcxNTdcdTcxNThcdTcxNTlcdTcxNWFcdTcxNWJcdTcxNWRcdTcxNWZcdTcx''@;'; put 'put ''NjBcdTcxNjFcdTcxNjJcdTcxNjNcdTcxNjVcdTcxNjlcdTcxNmFcdTcxNmJcdTcxNmNcdTcxNmRcdTcxNmZcdTcxNzBcdTcxNzFcdTcxNzRcdTcxNzVcdTcxNzZcdTcxNzdcdTcxNzlcdTcxN2JcdTcxN2NcdTcxN2VcdTcxN2ZcdTcxODBcdTcxODFcdTcxODJcdTcxODNcdTcxODVcdTcxODZc''@;'; put 'put ''dTcxODdcdTcxODhcdTcxODlcdTcxOGJcdTcxOGNcdTcxOGRcdTcxOGVcdTcxOTBcdTcxOTFcdTcxOTJcdTcxOTNcdTcxOTVcdTcxOTZcdTcxOTdcdTcxOWFcdTcxOWJcdTcxOWNcdTcxOWRcdTcxOWVcdTcxYTFcdTcxYTJcdTcxYTNcdTcxYTRcdTcxYTVcdTcxYTZcdTcxYTdcdTcxYTlcdTcx''@;'; put 'put ''YWFcdTcxYWJcdTcxYWRcdTcxYWVcdTcxYWZcdTcxYjBcdTcxYjFcdTcxYjJcdTcxYjRcdTcxYjZcdTcxYjdcdTcxYjhcdTcxYmFcdTcxYmJcdTcxYmNcdTcxYmRcdTcxYmVcdTcxYmZcdTcxYzBcdTcxYzFcdTcxYzJcdTcxYzRcdTcxYzVcdTcxYzZcdTcxYzdcdTcxYzhcdTcxYzlcdTcxY2Fc''@;'; put 'put ''dTcxY2JcdTcxY2NcdTcxY2RcdTcxY2ZcdTcxZDBcdTcxZDFcdTcxZDJcdTcxZDNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNTldLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE1OV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNTldW2ddXT00MDcwNCtnLHlbNDA3MDQrZ109X1sxNTldW2dd''@;'; put 'put ''KTtmb3IoX1sxNjBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTcxZDZcdTcxZDdcdTcxZDhcdTcxZDlcdTcxZGFcdTcxZGJcdTcxZGNcdTcxZGRcdTcxZGVcdTcxZGZcdTcxZTFcdTcxZTJcdTcxZTNcdTcxZTRcdTcxZTZcdTcxZThc''@;'; put 'put ''dTcxZTlcdTcxZWFcdTcxZWJcdTcxZWNcdTcxZWRcdTcxZWZcdTcxZjBcdTcxZjFcdTcxZjJcdTcxZjNcdTcxZjRcdTcxZjVcdTcxZjZcdTcxZjdcdTcxZjhcdTcxZmFcdTcxZmJcdTcxZmNcdTcxZmRcdTcxZmVcdTcxZmZcdTcyMDBcdTcyMDFcdTcyMDJcdTcyMDNcdTcyMDRcdTcyMDVcdTcy''@;'; put 'put ''MDdcdTcyMDhcdTcyMDlcdTcyMGFcdTcyMGJcdTcyMGNcdTcyMGRcdTcyMGVcdTcyMGZcdTcyMTBcdTcyMTFcdTcyMTJcdTcyMTNcdTcyMTRcdTcyMTVcdTcyMTZcdTcyMTdcdTcyMThcdTcyMTlcdTcyMWFcdWZmZmRcdTcyMWJcdTcyMWNcdTcyMWVcdTcyMWZcdTcyMjBcdTcyMjFcdTcyMjJc''@;'; put 'put ''dTcyMjNcdTcyMjRcdTcyMjVcdTcyMjZcdTcyMjdcdTcyMjlcdTcyMmJcdTcyMmRcdTcyMmVcdTcyMmZcdTcyMzJcdTcyMzNcdTcyMzRcdTcyM2FcdTcyM2NcdTcyM2VcdTcyNDBcdTcyNDFcdTcyNDJcdTcyNDNcdTcyNDRcdTcyNDVcdTcyNDZcdTcyNDlcdTcyNGFcdTcyNGJcdTcyNGVcdTcy''@;'; put 'put ''NGZcdTcyNTBcdTcyNTFcdTcyNTNcdTcyNTRcdTcyNTVcdTcyNTdcdTcyNThcdTcyNWFcdTcyNWNcdTcyNWVcdTcyNjBcdTcyNjNcdTcyNjRcdTcyNjVcdTcyNjhcdTcyNmFcdTcyNmJcdTcyNmNcdTcyNmRcdTcyNzBcdTcyNzFcdTcyNzNcdTcyNzRcdTcyNzZcdTcyNzdcdTcyNzhcdTcyN2Jc''@;'; put 'put ''dTcyN2NcdTcyN2RcdTcyODJcdTcyODNcdTcyODVcdTcyODZcdTcyODdcdTcyODhcdTcyODlcdTcyOGNcdTcyOGVcdTcyOTBcdTcyOTFcdTcyOTNcdTcyOTRcdTcyOTVcdTcyOTZcdTcyOTdcdTcyOThcdTcyOTlcdTcyOWFcdTcyOWJcdTcyOWNcdTcyOWRcdTcyOWVcdTcyYTBcdTcyYTFcdTcy''@;'; put 'put ''YTJcdTcyYTNcdTcyYTRcdTcyYTVcdTcyYTZcdTcyYTdcdTcyYThcdTcyYTlcdTcyYWFcdTcyYWJcdTcyYWVcdTcyYjFcdTcyYjJcdTcyYjNcdTcyYjVcdTcyYmFcdTcyYmJcdTcyYmNcdTcyYmRcdTcyYmVcdTcyYmZcdTcyYzBcdTcyYzVcdTcyYzZcdTcyYzdcdTcyYzlcdTcyY2FcdTcyY2Jc''@;'; put 'put ''dTcyY2NcdTcyY2ZcdTcyZDFcdTcyZDNcdTcyZDRcdTcyZDVcdTcyZDZcdTcyZDhcdTcyZGFcdTcyZGJcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNjBdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE2MF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNjBdW2ddXT00MDk2MCtnLHlbNDA5NjAr''@;'; put 'put ''Z109X1sxNjBdW2ddKTtmb3IoX1sxNjFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdTMwMDBcdTMwMDFcdTMwMDJceGI3XHUwMmM5XHUwMmM3XHhhOFx1MzAwM1x1MzAwNVx1MjAxNFx1ZmY1ZVx1MjAxNlx1MjAyNlx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MzAxNFx1MzAxNVx1MzAwOFx1MzAwOVx1MzAwYVx1MzAwYlx1MzAwY1x1MzAwZFx1MzAwZVx1MzAwZlx1MzAx''@;'; put 'put ''Nlx1MzAxN1x1MzAxMFx1MzAxMVx4YjFceGQ3XHhmN1x1MjIzNlx1MjIyN1x1MjIyOFx1MjIxMVx1MjIwZlx1MjIyYVx1MjIyOVx1MjIwOFx1MjIzN1x1MjIxYVx1MjJhNVx1MjIyNVx1MjIyMFx1MjMxMlx1MjI5OVx1MjIyYlx1MjIyZVx1MjI2MVx1MjI0Y1x1MjI0OFx1MjIzZFx1MjIxZFx1''@;'; put 'put ''MjI2MFx1MjI2ZVx1MjI2Zlx1MjI2NFx1MjI2NVx1MjIxZVx1MjIzNVx1MjIzNFx1MjY0Mlx1MjY0MFx4YjBcdTIwMzJcdTIwMzNcdTIxMDNcdWZmMDRceGE0XHVmZmUwXHVmZmUxXHUyMDMwXHhhN1x1MjExNlx1MjYwNlx1MjYwNVx1MjVjYlx1MjVjZlx1MjVjZVx1MjVjN1x1MjVjNlx1MjVh''@;'; put 'put ''MVx1MjVhMFx1MjViM1x1MjViMlx1MjAzYlx1MjE5Mlx1MjE5MFx1MjE5MVx1MjE5M1x1MzAxM1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE2MV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTYxXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE2MV1bZ11dPTQxMjE2K2cseVs0MTIxNitnXT1f''@;'; put 'put ''WzE2MV1bZ10pO2ZvcihfWzE2Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''MjE3MFx1MjE3MVx1MjE3Mlx1MjE3M1x1MjE3NFx1MjE3NVx1MjE3Nlx1MjE3N1x1MjE3OFx1MjE3OVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjQ4OFx1MjQ4OVx1MjQ4YVx1MjQ4Ylx1MjQ4Y1x1MjQ4ZFx1MjQ4ZVx1MjQ4Zlx1MjQ5MFx1MjQ5MVx1MjQ5Mlx1MjQ5''@;'; put 'put ''M1x1MjQ5NFx1MjQ5NVx1MjQ5Nlx1MjQ5N1x1MjQ5OFx1MjQ5OVx1MjQ5YVx1MjQ5Ylx1MjQ3NFx1MjQ3NVx1MjQ3Nlx1MjQ3N1x1MjQ3OFx1MjQ3OVx1MjQ3YVx1MjQ3Ylx1MjQ3Y1x1MjQ3ZFx1MjQ3ZVx1MjQ3Zlx1MjQ4MFx1MjQ4MVx1MjQ4Mlx1MjQ4M1x1MjQ4NFx1MjQ4NVx1MjQ4Nlx1''@;'; put 'put ''MjQ4N1x1MjQ2MFx1MjQ2MVx1MjQ2Mlx1MjQ2M1x1MjQ2NFx1MjQ2NVx1MjQ2Nlx1MjQ2N1x1MjQ2OFx1MjQ2OVx1ZmZmZFx1ZmZmZFx1MzIyMFx1MzIyMVx1MzIyMlx1MzIyM1x1MzIyNFx1MzIyNVx1MzIyNlx1MzIyN1x1MzIyOFx1MzIyOVx1ZmZmZFx1ZmZmZFx1MjE2MFx1MjE2MVx1MjE2''@;'; put 'put ''Mlx1MjE2M1x1MjE2NFx1MjE2NVx1MjE2Nlx1MjE2N1x1MjE2OFx1MjE2OVx1MjE2YVx1MjE2Ylx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE2Ml0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTYyXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE2Ml1bZ11dPTQxNDcyK2cs''@;'; put 'put ''eVs0MTQ3MitnXT1fWzE2Ml1bZ10pO2ZvcihfWzE2M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmYwMVx1ZmYwMlx1ZmYwM1x1ZmZlNVx1ZmYwNVx1ZmYwNlx1ZmYwN1x1ZmYwOFx1ZmYwOVx1ZmYwYVx1ZmYwYlx1ZmYwY1x1ZmYwZFx1ZmYwZVx1ZmYwZlx1ZmYxMFx1ZmYxMVx1ZmYxMlx1ZmYxM1x1ZmYxNFx1ZmYxNVx1ZmYxNlx1ZmYxN1x1ZmYxOFx1ZmYxOVx1ZmYx''@;'; put 'put ''YVx1ZmYxYlx1ZmYxY1x1ZmYxZFx1ZmYxZVx1ZmYxZlx1ZmYyMFx1ZmYyMVx1ZmYyMlx1ZmYyM1x1ZmYyNFx1ZmYyNVx1ZmYyNlx1ZmYyN1x1ZmYyOFx1ZmYyOVx1ZmYyYVx1ZmYyYlx1ZmYyY1x1ZmYyZFx1ZmYyZVx1ZmYyZlx1ZmYzMFx1ZmYzMVx1ZmYzMlx1ZmYzM1x1ZmYzNFx1ZmYzNVx1''@;'; put 'put ''ZmYzNlx1ZmYzN1x1ZmYzOFx1ZmYzOVx1ZmYzYVx1ZmYzYlx1ZmYzY1x1ZmYzZFx1ZmYzZVx1ZmYzZlx1ZmY0MFx1ZmY0MVx1ZmY0Mlx1ZmY0M1x1ZmY0NFx1ZmY0NVx1ZmY0Nlx1ZmY0N1x1ZmY0OFx1ZmY0OVx1ZmY0YVx1ZmY0Ylx1ZmY0Y1x1ZmY0ZFx1ZmY0ZVx1ZmY0Zlx1ZmY1MFx1ZmY1''@;'; put 'put ''MVx1ZmY1Mlx1ZmY1M1x1ZmY1NFx1ZmY1NVx1ZmY1Nlx1ZmY1N1x1ZmY1OFx1ZmY1OVx1ZmY1YVx1ZmY1Ylx1ZmY1Y1x1ZmY1ZFx1ZmZlM1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE2M10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTYzXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE2M11b''@;'; put 'put ''Z11dPTQxNzI4K2cseVs0MTcyOCtnXT1fWzE2M11bZ10pO2ZvcihfWzE2NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MzA0MVx1MzA0Mlx1MzA0M1x1MzA0NFx1MzA0NVx1MzA0Nlx1MzA0N1x1MzA0OFx1MzA0OVx1MzA0YVx1MzA0Ylx1MzA0Y1x1MzA0ZFx1MzA0ZVx1MzA0Zlx1MzA1MFx1MzA1MVx1MzA1Mlx1MzA1M1x1MzA1NFx1MzA1NVx1MzA1Nlx1MzA1N1x1MzA1''@;'; put 'put ''OFx1MzA1OVx1MzA1YVx1MzA1Ylx1MzA1Y1x1MzA1ZFx1MzA1ZVx1MzA1Zlx1MzA2MFx1MzA2MVx1MzA2Mlx1MzA2M1x1MzA2NFx1MzA2NVx1MzA2Nlx1MzA2N1x1MzA2OFx1MzA2OVx1MzA2YVx1MzA2Ylx1MzA2Y1x1MzA2ZFx1MzA2ZVx1MzA2Zlx1MzA3MFx1MzA3MVx1MzA3Mlx1MzA3M1x1''@;'; put 'put ''MzA3NFx1MzA3NVx1MzA3Nlx1MzA3N1x1MzA3OFx1MzA3OVx1MzA3YVx1MzA3Ylx1MzA3Y1x1MzA3ZFx1MzA3ZVx1MzA3Zlx1MzA4MFx1MzA4MVx1MzA4Mlx1MzA4M1x1MzA4NFx1MzA4NVx1MzA4Nlx1MzA4N1x1MzA4OFx1MzA4OVx1MzA4YVx1MzA4Ylx1MzA4Y1x1MzA4ZFx1MzA4ZVx1MzA4''@;'; put 'put ''Zlx1MzA5MFx1MzA5MVx1MzA5Mlx1MzA5M1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE2NF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTY0XVtnXS5jaGFyQ29kZUF0KDAp''@;'; put 'put ''JiYoSVtfWzE2NF1bZ11dPTQxOTg0K2cseVs0MTk4NCtnXT1fWzE2NF1bZ10pO2ZvcihfWzE2NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MzBhMVx1MzBhMlx1MzBhM1x1MzBhNFx1MzBhNVx1MzBhNlx1MzBhN1x1MzBhOFx1MzBhOVx1MzBhYVx1MzBhYlx1MzBhY1x1MzBhZFx1MzBhZVx1MzBhZlx1MzBiMFx1MzBiMVx1MzBiMlx1MzBiM1x1MzBiNFx1MzBiNVx1MzBi''@;'; put 'put ''Nlx1MzBiN1x1MzBiOFx1MzBiOVx1MzBiYVx1MzBiYlx1MzBiY1x1MzBiZFx1MzBiZVx1MzBiZlx1MzBjMFx1MzBjMVx1MzBjMlx1MzBjM1x1MzBjNFx1MzBjNVx1MzBjNlx1MzBjN1x1MzBjOFx1MzBjOVx1MzBjYVx1MzBjYlx1MzBjY1x1MzBjZFx1MzBjZVx1MzBjZlx1MzBkMFx1MzBkMVx1''@;'; put 'put ''MzBkMlx1MzBkM1x1MzBkNFx1MzBkNVx1MzBkNlx1MzBkN1x1MzBkOFx1MzBkOVx1MzBkYVx1MzBkYlx1MzBkY1x1MzBkZFx1MzBkZVx1MzBkZlx1MzBlMFx1MzBlMVx1MzBlMlx1MzBlM1x1MzBlNFx1MzBlNVx1MzBlNlx1MzBlN1x1MzBlOFx1MzBlOVx1MzBlYVx1MzBlYlx1MzBlY1x1MzBl''@;'; put 'put ''ZFx1MzBlZVx1MzBlZlx1MzBmMFx1MzBmMVx1MzBmMlx1MzBmM1x1MzBmNFx1MzBmNVx1MzBmNlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE2NV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTY1XVtnXS5j''@;'; put 'put ''aGFyQ29kZUF0KDApJiYoSVtfWzE2NV1bZ11dPTQyMjQwK2cseVs0MjI0MCtnXT1fWzE2NV1bZ10pO2ZvcihfWzE2Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDM5MVx1MDM5Mlx1MDM5M1x1MDM5NFx1MDM5NVx1MDM5Nlx1MDM5N1x1MDM5OFx1MDM5OVx1MDM5YVx1MDM5Ylx1MDM5Y1x1MDM5ZFx1MDM5ZVx1MDM5Zlx1MDNhMFx1MDNhMVx1MDNhM1x1MDNhNFx1MDNh''@;'; put 'put ''NVx1MDNhNlx1MDNhN1x1MDNhOFx1MDNhOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDNiMVx1MDNiMlx1MDNiM1x1MDNiNFx1MDNiNVx1MDNiNlx1MDNiN1x1MDNiOFx1MDNiOVx1MDNiYVx1MDNiYlx1MDNiY1x1MDNiZFx1MDNiZVx1MDNiZlx1''@;'; put 'put ''MDNjMFx1MDNjMVx1MDNjM1x1MDNjNFx1MDNjNVx1MDNjNlx1MDNjN1x1MDNjOFx1MDNjOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmUzNVx1ZmUzNlx1ZmUzOVx1ZmUzYVx1ZmUzZlx1ZmU0MFx1ZmUzZFx1ZmUzZVx1ZmU0MVx1ZmU0Mlx1ZmU0M1x1ZmU0''@;'; put 'put ''NFx1ZmZmZFx1ZmZmZFx1ZmUzYlx1ZmUzY1x1ZmUzN1x1ZmUzOFx1ZmUzMVx1ZmZmZFx1ZmUzM1x1ZmUzNFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE2Nl0ubGVuZ3RoOysrZyk2NTUzMyE9''@;'; put 'put ''PV9bMTY2XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE2Nl1bZ11dPTQyNDk2K2cseVs0MjQ5NitnXT1fWzE2Nl1bZ10pO2ZvcihfWzE2N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDQxMFx1MDQxMVx1MDQxMlx1MDQxM1x1MDQxNFx1MDQxNVx1MDQwMVx1MDQxNlx1MDQxN1x1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQy''@;'; put 'put ''MFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQyNFx1MDQyNVx1MDQyNlx1MDQyN1x1MDQyOFx1MDQyOVx1MDQyYVx1MDQyYlx1MDQyY1x1MDQyZFx1MDQyZVx1MDQyZlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1MDQzMFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1MDQzNVx1MDQ1MVx1MDQzNlx1MDQzN1x1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1MDQ0''@;'; put 'put ''N1x1MDQ0OFx1MDQ0OVx1MDQ0YVx1MDQ0Ylx1MDQ0Y1x1MDQ0ZFx1MDQ0ZVx1MDQ0Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE2N10ubGVuZ3Ro''@;'; put 'put ''OysrZyk2NTUzMyE9PV9bMTY3XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE2N11bZ11dPTQyNzUyK2cseVs0Mjc1MitnXT1fWzE2N11bZ10pO2ZvcihfWzE2OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDJjYVx1MDJjYlx1MDJk''@;'; put 'put ''OVx1MjAxM1x1MjAxNVx1MjAyNVx1MjAzNVx1MjEwNVx1MjEwOVx1MjE5Nlx1MjE5N1x1MjE5OFx1MjE5OVx1MjIxNVx1MjIxZlx1MjIyM1x1MjI1Mlx1MjI2Nlx1MjI2N1x1MjJiZlx1MjU1MFx1MjU1MVx1MjU1Mlx1MjU1M1x1MjU1NFx1MjU1NVx1MjU1Nlx1MjU1N1x1MjU1OFx1MjU1OVx1''@;'; put 'put ''MjU1YVx1MjU1Ylx1MjU1Y1x1MjU1ZFx1MjU1ZVx1MjU1Zlx1MjU2MFx1MjU2MVx1MjU2Mlx1MjU2M1x1MjU2NFx1MjU2NVx1MjU2Nlx1MjU2N1x1MjU2OFx1MjU2OVx1MjU2YVx1MjU2Ylx1MjU2Y1x1MjU2ZFx1MjU2ZVx1MjU2Zlx1MjU3MFx1MjU3MVx1MjU3Mlx1MjU3M1x1MjU4MVx1MjU4''@;'; put 'put ''Mlx1MjU4M1x1MjU4NFx1MjU4NVx1MjU4Nlx1MjU4N1x1ZmZmZFx1MjU4OFx1MjU4OVx1MjU4YVx1MjU4Ylx1MjU4Y1x1MjU4ZFx1MjU4ZVx1MjU4Zlx1MjU5M1x1MjU5NFx1MjU5NVx1MjViY1x1MjViZFx1MjVlMlx1MjVlM1x1MjVlNFx1MjVlNVx1MjYwOVx1MjI5NVx1MzAxMlx1MzAxZFx1''@;'; put 'put ''MzAxZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDEwMVx4ZTFcdTAxY2VceGUwXHUwMTEzXHhlOVx1MDExYlx4ZThcdTAxMmJceGVkXHUwMWQwXHhlY1x1MDE0ZFx4ZjNcdTAxZDJceGYyXHUwMTZiXHhmYVx1MDFk''@;'; put 'put ''NFx4ZjlcdTAxZDZcdTAxZDhcdTAxZGFcdTAxZGNceGZjXHhlYVx1MDI1MVx1ZmZmZFx1MDE0NFx1MDE0OFx1ZmZmZFx1MDI2MVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MzEwNVx1MzEwNlx1MzEwN1x1MzEwOFx1MzEwOVx1MzEwYVx1MzEwYlx1MzEwY1x1MzEwZFx1MzEwZVx1MzEwZlx1''@;'; put 'put ''MzExMFx1MzExMVx1MzExMlx1MzExM1x1MzExNFx1MzExNVx1MzExNlx1MzExN1x1MzExOFx1MzExOVx1MzExYVx1MzExYlx1MzExY1x1MzExZFx1MzExZVx1MzExZlx1MzEyMFx1MzEyMVx1MzEyMlx1MzEyM1x1MzEyNFx1MzEyNVx1MzEyNlx1MzEyN1x1MzEyOFx1MzEyOVx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE2OF0ubGVuZ3RoOysrZyk2NTUzMyE9''@;'; put 'put ''PV9bMTY4XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE2OF1bZ11dPTQzMDA4K2cseVs0MzAwOCtnXT1fWzE2OF1bZ10pO2ZvcihfWzE2OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MzAyMVx1MzAyMlx1MzAyM1x1MzAyNFx1MzAy''@;'; put 'put ''NVx1MzAyNlx1MzAyN1x1MzAyOFx1MzAyOVx1MzJhM1x1MzM4ZVx1MzM4Zlx1MzM5Y1x1MzM5ZFx1MzM5ZVx1MzNhMVx1MzNjNFx1MzNjZVx1MzNkMVx1MzNkMlx1MzNkNVx1ZmUzMFx1ZmZlMlx1ZmZlNFx1ZmZmZFx1MjEyMVx1MzIzMVx1ZmZmZFx1MjAxMFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''MzBmY1x1MzA5Ylx1MzA5Y1x1MzBmZFx1MzBmZVx1MzAwNlx1MzA5ZFx1MzA5ZVx1ZmU0OVx1ZmU0YVx1ZmU0Ylx1ZmU0Y1x1ZmU0ZFx1ZmU0ZVx1ZmU0Zlx1ZmU1MFx1ZmU1MVx1ZmU1Mlx1ZmU1NFx1ZmU1NVx1ZmU1Nlx1ZmU1N1x1ZmU1OVx1ZmU1YVx1ZmU1Ylx1ZmU1Y1x1ZmU1ZFx1ZmU1''@;'; put 'put ''ZVx1ZmU1Zlx1ZmU2MFx1ZmU2MVx1ZmZmZFx1ZmU2Mlx1ZmU2M1x1ZmU2NFx1ZmU2NVx1ZmU2Nlx1ZmU2OFx1ZmU2OVx1ZmU2YVx1ZmU2Ylx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MzAwN1x1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjUwMFx1MjUwMVx1MjUwMlx1MjUwM1x1MjUwNFx1MjUwNVx1MjUwNlx1MjUwN1x1MjUwOFx1MjUwOVx1MjUwYVx1MjUwYlx1MjUwY1x1MjUwZFx1MjUw''@;'; put 'put ''ZVx1MjUwZlx1MjUxMFx1MjUxMVx1MjUxMlx1MjUxM1x1MjUxNFx1MjUxNVx1MjUxNlx1MjUxN1x1MjUxOFx1MjUxOVx1MjUxYVx1MjUxYlx1MjUxY1x1MjUxZFx1MjUxZVx1MjUxZlx1MjUyMFx1MjUyMVx1MjUyMlx1MjUyM1x1MjUyNFx1MjUyNVx1MjUyNlx1MjUyN1x1MjUyOFx1MjUyOVx1''@;'; put 'put ''MjUyYVx1MjUyYlx1MjUyY1x1MjUyZFx1MjUyZVx1MjUyZlx1MjUzMFx1MjUzMVx1MjUzMlx1MjUzM1x1MjUzNFx1MjUzNVx1MjUzNlx1MjUzN1x1MjUzOFx1MjUzOVx1MjUzYVx1MjUzYlx1MjUzY1x1MjUzZFx1MjUzZVx1MjUzZlx1MjU0MFx1MjU0MVx1MjU0Mlx1MjU0M1x1MjU0NFx1MjU0''@;'; put 'put ''NVx1MjU0Nlx1MjU0N1x1MjU0OFx1MjU0OVx1MjU0YVx1MjU0Ylx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE2OV0ubGVuZ3Ro''@;'; put 'put ''OysrZyk2NTUzMyE9PV9bMTY5XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE2OV1bZ11dPTQzMjY0K2cseVs0MzI2NCtnXT1fWzE2OV1bZ10pO2ZvcihfWzE3MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzJkY1x1NzJkZFx1NzJk''@;'; put 'put ''Zlx1NzJlMlx1NzJlM1x1NzJlNFx1NzJlNVx1NzJlNlx1NzJlN1x1NzJlYVx1NzJlYlx1NzJmNVx1NzJmNlx1NzJmOVx1NzJmZFx1NzJmZVx1NzJmZlx1NzMwMFx1NzMwMlx1NzMwNFx1NzMwNVx1NzMwNlx1NzMwN1x1NzMwOFx1NzMwOVx1NzMwYlx1NzMwY1x1NzMwZFx1NzMwZlx1NzMxMFx1''@;'; put 'put ''NzMxMVx1NzMxMlx1NzMxNFx1NzMxOFx1NzMxOVx1NzMxYVx1NzMxZlx1NzMyMFx1NzMyM1x1NzMyNFx1NzMyNlx1NzMyN1x1NzMyOFx1NzMyZFx1NzMyZlx1NzMzMFx1NzMzMlx1NzMzM1x1NzMzNVx1NzMzNlx1NzMzYVx1NzMzYlx1NzMzY1x1NzMzZFx1NzM0MFx1NzM0MVx1NzM0Mlx1NzM0''@;'; put 'put ''M1x1NzM0NFx1NzM0NVx1NzM0Nlx1NzM0N1x1NzM0OFx1ZmZmZFx1NzM0OVx1NzM0YVx1NzM0Ylx1NzM0Y1x1NzM0ZVx1NzM0Zlx1NzM1MVx1NzM1M1x1NzM1NFx1NzM1NVx1NzM1Nlx1NzM1OFx1NzM1OVx1NzM1YVx1NzM1Ylx1NzM1Y1x1NzM1ZFx1NzM1ZVx1NzM1Zlx1NzM2MVx1NzM2Mlx1''@;'; put 'put ''NzM2M1x1NzM2NFx1NzM2NVx1NzM2Nlx1NzM2N1x1NzM2OFx1NzM2OVx1NzM2YVx1NzM2Ylx1NzM2ZVx1NzM3MFx1NzM3MVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1f''@;'; put 'put ''WzE3MF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTcwXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE3MF1bZ11dPTQzNTIwK2cseVs0MzUyMCtnXT1fWzE3MF1bZ10pO2ZvcihfWzE3MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzM3''@;'; put 'put ''Mlx1NzM3M1x1NzM3NFx1NzM3NVx1NzM3Nlx1NzM3N1x1NzM3OFx1NzM3OVx1NzM3YVx1NzM3Ylx1NzM3Y1x1NzM3ZFx1NzM3Zlx1NzM4MFx1NzM4MVx1NzM4Mlx1NzM4M1x1NzM4NVx1NzM4Nlx1NzM4OFx1NzM4YVx1NzM4Y1x1NzM4ZFx1NzM4Zlx1NzM5MFx1NzM5Mlx1NzM5M1x1NzM5NFx1''@;'; put 'put ''NzM5NVx1NzM5N1x1NzM5OFx1NzM5OVx1NzM5YVx1NzM5Y1x1NzM5ZFx1NzM5ZVx1NzNhMFx1NzNhMVx1NzNhM1x1NzNhNFx1NzNhNVx1NzNhNlx1NzNhN1x1NzNhOFx1NzNhYVx1NzNhY1x1NzNhZFx1NzNiMVx1NzNiNFx1NzNiNVx1NzNiNlx1NzNiOFx1NzNiOVx1NzNiY1x1NzNiZFx1NzNi''@;'; put 'put ''ZVx1NzNiZlx1NzNjMVx1NzNjM1x1NzNjNFx1NzNjNVx1NzNjNlx1NzNjN1x1ZmZmZFx1NzNjYlx1NzNjY1x1NzNjZVx1NzNkMlx1NzNkM1x1NzNkNFx1NzNkNVx1NzNkNlx1NzNkN1x1NzNkOFx1NzNkYVx1NzNkYlx1NzNkY1x1NzNkZFx1NzNkZlx1NzNlMVx1NzNlMlx1NzNlM1x1NzNlNFx1''@;'; put 'put ''NzNlNlx1NzNlOFx1NzNlYVx1NzNlYlx1NzNlY1x1NzNlZVx1NzNlZlx1NzNmMFx1NzNmMVx1NzNmM1x1NzNmNFx1NzNmNVx1NzNmNlx1NzNmN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQo''@;'; put 'put ''IiIpLGc9MDtnIT1fWzE3MV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTcxXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE3MV1bZ11dPTQzNzc2K2cseVs0Mzc3NitnXT1fWzE3MV1bZ10pO2ZvcihfWzE3Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1NzNmOFx1NzNmOVx1NzNmYVx1NzNmYlx1NzNmY1x1NzNmZFx1NzNmZVx1NzNmZlx1NzQwMFx1NzQwMVx1NzQwMlx1NzQwNFx1NzQwN1x1NzQwOFx1NzQwYlx1NzQwY1x1NzQwZFx1NzQwZVx1NzQxMVx1NzQxMlx1NzQxM1x1NzQxNFx1NzQxNVx1NzQxNlx1NzQxN1x1NzQxOFx1''@;'; put 'put ''NzQxOVx1NzQxY1x1NzQxZFx1NzQxZVx1NzQxZlx1NzQyMFx1NzQyMVx1NzQyM1x1NzQyNFx1NzQyN1x1NzQyOVx1NzQyYlx1NzQyZFx1NzQyZlx1NzQzMVx1NzQzMlx1NzQzN1x1NzQzOFx1NzQzOVx1NzQzYVx1NzQzYlx1NzQzZFx1NzQzZVx1NzQzZlx1NzQ0MFx1NzQ0Mlx1NzQ0M1x1NzQ0''@;'; put 'put ''NFx1NzQ0NVx1NzQ0Nlx1NzQ0N1x1NzQ0OFx1NzQ0OVx1NzQ0YVx1NzQ0Ylx1NzQ0Y1x1NzQ0ZFx1ZmZmZFx1NzQ0ZVx1NzQ0Zlx1NzQ1MFx1NzQ1MVx1NzQ1Mlx1NzQ1M1x1NzQ1NFx1NzQ1Nlx1NzQ1OFx1NzQ1ZFx1NzQ2MFx1NzQ2MVx1NzQ2Mlx1NzQ2M1x1NzQ2NFx1NzQ2NVx1NzQ2Nlx1''@;'; put 'put ''NzQ2N1x1NzQ2OFx1NzQ2OVx1NzQ2YVx1NzQ2Ylx1NzQ2Y1x1NzQ2ZVx1NzQ2Zlx1NzQ3MVx1NzQ3Mlx1NzQ3M1x1NzQ3NFx1NzQ3NVx1NzQ3OFx1NzQ3OVx1NzQ3YVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE3Ml0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTcyXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE3Ml1bZ11dPTQ0MDMyK2cseVs0NDAzMitnXT1fWzE3Ml1bZ10pO2ZvcihfWzE3M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzQ3Ylx1NzQ3Y1x1NzQ3ZFx1NzQ3Zlx1NzQ4Mlx1NzQ4NFx1NzQ4NVx1NzQ4Nlx1NzQ4OFx1NzQ4OVx1NzQ4YVx1NzQ4Y1x1NzQ4ZFx1NzQ4Zlx1NzQ5MVx1NzQ5Mlx1NzQ5M1x1NzQ5NFx1NzQ5NVx1NzQ5Nlx1NzQ5N1x1NzQ5OFx1NzQ5OVx1NzQ5YVx1''@;'; put 'put ''NzQ5Ylx1NzQ5ZFx1NzQ5Zlx1NzRhMFx1NzRhMVx1NzRhMlx1NzRhM1x1NzRhNFx1NzRhNVx1NzRhNlx1NzRhYVx1NzRhYlx1NzRhY1x1NzRhZFx1NzRhZVx1NzRhZlx1NzRiMFx1NzRiMVx1NzRiMlx1NzRiM1x1NzRiNFx1NzRiNVx1NzRiNlx1NzRiN1x1NzRiOFx1NzRiOVx1NzRiYlx1NzRi''@;'; put 'put ''Y1x1NzRiZFx1NzRiZVx1NzRiZlx1NzRjMFx1NzRjMVx1NzRjMlx1NzRjM1x1NzRjNFx1NzRjNVx1NzRjNlx1NzRjN1x1ZmZmZFx1NzRjOFx1NzRjOVx1NzRjYVx1NzRjYlx1NzRjY1x1NzRjZFx1NzRjZVx1NzRjZlx1NzRkMFx1NzRkMVx1NzRkM1x1NzRkNFx1NzRkNVx1NzRkNlx1NzRkN1x1''@;'; put 'put ''NzRkOFx1NzRkOVx1NzRkYVx1NzRkYlx1NzRkZFx1NzRkZlx1NzRlMVx1NzRlNVx1NzRlN1x1NzRlOFx1NzRlOVx1NzRlYVx1NzRlYlx1NzRlY1x1NzRlZFx1NzRmMFx1NzRmMVx1NzRmMlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE3M10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTczXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE3M11bZ11dPTQ0Mjg4K2cseVs0NDI4OCtnXT1fWzE3M11bZ10pO2ZvcihfWzE3NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzRmM1x1NzRmNVx1NzRmOFx1NzRmOVx1NzRmYVx1NzRmYlx1NzRmY1x1NzRmZFx1NzRmZVx1NzUwMFx1NzUwMVx1NzUwMlx1NzUwM1x1NzUwNVx1NzUwNlx1NzUwN1x1NzUwOFx1NzUwOVx1NzUwYVx1NzUwYlx1NzUwY1x1NzUwZVx1''@;'; put 'put ''NzUxMFx1NzUxMlx1NzUxNFx1NzUxNVx1NzUxNlx1NzUxN1x1NzUxYlx1NzUxZFx1NzUxZVx1NzUyMFx1NzUyMVx1NzUyMlx1NzUyM1x1NzUyNFx1NzUyNlx1NzUyN1x1NzUyYVx1NzUyZVx1NzUzNFx1NzUzNlx1NzUzOVx1NzUzY1x1NzUzZFx1NzUzZlx1NzU0MVx1NzU0Mlx1NzU0M1x1NzU0''@;'; put 'put ''NFx1NzU0Nlx1NzU0N1x1NzU0OVx1NzU0YVx1NzU0ZFx1NzU1MFx1NzU1MVx1NzU1Mlx1NzU1M1x1NzU1NVx1NzU1Nlx1NzU1N1x1NzU1OFx1ZmZmZFx1NzU1ZFx1NzU1ZVx1NzU1Zlx1NzU2MFx1NzU2MVx1NzU2Mlx1NzU2M1x1NzU2NFx1NzU2N1x1NzU2OFx1NzU2OVx1NzU2Ylx1NzU2Y1x1''@;'; put 'put ''NzU2ZFx1NzU2ZVx1NzU2Zlx1NzU3MFx1NzU3MVx1NzU3M1x1NzU3NVx1NzU3Nlx1NzU3N1x1NzU3YVx1NzU3Ylx1NzU3Y1x1NzU3ZFx1NzU3ZVx1NzU4MFx1NzU4MVx1NzU4Mlx1NzU4NFx1NzU4NVx1NzU4N1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE3NF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTc0XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE3NF1bZ11dPTQ0NTQ0K2cseVs0NDU0NCtnXT1fWzE3NF1bZ10pO2ZvcihfWzE3NV09Ilx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzU4OFx1NzU4OVx1NzU4YVx1NzU4Y1x1NzU4ZFx1NzU4ZVx1NzU5MFx1NzU5M1x1NzU5NVx1NzU5OFx1NzU5Ylx1NzU5Y1x1NzU5ZVx1NzVhMlx1NzVhNlx1NzVhN1x1NzVhOFx1NzVhOVx1NzVhYVx1NzVhZFx1''@;'; put 'put ''NzViNlx1NzViN1x1NzViYVx1NzViYlx1NzViZlx1NzVjMFx1NzVjMVx1NzVjNlx1NzVjYlx1NzVjY1x1NzVjZVx1NzVjZlx1NzVkMFx1NzVkMVx1NzVkM1x1NzVkN1x1NzVkOVx1NzVkYVx1NzVkY1x1NzVkZFx1NzVkZlx1NzVlMFx1NzVlMVx1NzVlNVx1NzVlOVx1NzVlY1x1NzVlZFx1NzVl''@;'; put 'put ''ZVx1NzVlZlx1NzVmMlx1NzVmM1x1NzVmNVx1NzVmNlx1NzVmN1x1NzVmOFx1NzVmYVx1NzVmYlx1NzVmZFx1NzVmZVx1NzYwMlx1NzYwNFx1NzYwNlx1NzYwN1x1ZmZmZFx1NzYwOFx1NzYwOVx1NzYwYlx1NzYwZFx1NzYwZVx1NzYwZlx1NzYxMVx1NzYxMlx1NzYxM1x1NzYxNFx1NzYxNlx1''@;'; put 'put ''NzYxYVx1NzYxY1x1NzYxZFx1NzYxZVx1NzYyMVx1NzYyM1x1NzYyN1x1NzYyOFx1NzYyY1x1NzYyZVx1NzYyZlx1NzYzMVx1NzYzMlx1NzYzNlx1NzYzN1x1NzYzOVx1NzYzYVx1NzYzYlx1NzYzZFx1NzY0MVx1NzY0Mlx1NzY0NFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE3NV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTc1XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE3NV1bZ11dPTQ0ODAwK2cseVs0NDgwMCtnXT1fWzE3NV1bZ10pO2ZvcihfWzE3Nl09''@;'; put 'put ''Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzY0NVx1NzY0Nlx1NzY0N1x1NzY0OFx1NzY0OVx1NzY0YVx1NzY0Ylx1NzY0ZVx1NzY0Zlx1NzY1MFx1NzY1MVx1NzY1Mlx1NzY1M1x1NzY1NVx1NzY1N1x1NzY1OFx1NzY1OVx1NzY1YVx1''@;'; put 'put ''NzY1Ylx1NzY1ZFx1NzY1Zlx1NzY2MFx1NzY2MVx1NzY2Mlx1NzY2NFx1NzY2NVx1NzY2Nlx1NzY2N1x1NzY2OFx1NzY2OVx1NzY2YVx1NzY2Y1x1NzY2ZFx1NzY2ZVx1NzY3MFx1NzY3MVx1NzY3Mlx1NzY3M1x1NzY3NFx1NzY3NVx1NzY3Nlx1NzY3N1x1NzY3OVx1NzY3YVx1NzY3Y1x1NzY3''@;'; put 'put ''Zlx1NzY4MFx1NzY4MVx1NzY4M1x1NzY4NVx1NzY4OVx1NzY4YVx1NzY4Y1x1NzY4ZFx1NzY4Zlx1NzY5MFx1NzY5Mlx1NzY5NFx1NzY5NVx1NzY5N1x1NzY5OFx1NzY5YVx1NzY5Ylx1ZmZmZFx1NzY5Y1x1NzY5ZFx1NzY5ZVx1NzY5Zlx1NzZhMFx1NzZhMVx1NzZhMlx1NzZhM1x1NzZhNVx1''@;'; put 'put ''NzZhNlx1NzZhN1x1NzZhOFx1NzZhOVx1NzZhYVx1NzZhYlx1NzZhY1x1NzZhZFx1NzZhZlx1NzZiMFx1NzZiM1x1NzZiNVx1NzZiNlx1NzZiN1x1NzZiOFx1NzZiOVx1NzZiYVx1NzZiYlx1NzZiY1x1NzZiZFx1NzZiZVx1NzZjMFx1NzZjMVx1NzZjM1x1NTU0YVx1OTYzZlx1NTdjM1x1NjMy''@;'; put 'put ''OFx1NTRjZVx1NTUwOVx1NTRjMFx1NzY5MVx1NzY0Y1x1ODUzY1x1NzdlZVx1ODI3ZVx1Nzg4ZFx1NzIzMVx1OTY5OFx1OTc4ZFx1NmMyOFx1NWI4OVx1NGZmYVx1NjMwOVx1NjY5N1x1NWNiOFx1ODBmYVx1Njg0OFx1ODBhZVx1NjYwMlx1NzZjZVx1NTFmOVx1NjU1Nlx1NzFhY1x1N2ZmMVx1''@;'; put 'put ''ODg4NFx1NTBiMlx1NTk2NVx1NjFjYVx1NmZiM1x1ODJhZFx1NjM0Y1x1NjI1Mlx1NTNlZFx1NTQyN1x1N2IwNlx1NTE2Ylx1NzVhNFx1NWRmNFx1NjJkNFx1OGRjYlx1OTc3Nlx1NjI4YVx1ODAxOVx1NTc1ZFx1OTczOFx1N2Y2Mlx1NzIzOFx1NzY3ZFx1NjdjZlx1NzY3ZVx1NjQ0Nlx1NGY3''@;'; put 'put ''MFx1OGQyNVx1NjJkY1x1N2ExN1x1NjU5MVx1NzNlZFx1NjQyY1x1NjI3M1x1ODIyY1x1OTg4MVx1Njc3Zlx1NzI0OFx1NjI2ZVx1NjJjY1x1NGYzNFx1NzRlM1x1NTM0YVx1NTI5ZVx1N2VjYVx1OTBhNlx1NWUyZVx1Njg4Nlx1Njk5Y1x1ODE4MFx1N2VkMVx1NjhkMlx1NzhjNVx1ODY4Y1x1''@;'; put 'put ''OTU1MVx1NTA4ZFx1OGMyNFx1ODJkZVx1ODBkZVx1NTMwNVx1ODkxMlx1NTI2NVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE3Nl0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTc2XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE3Nl1bZ11dPTQ1MDU2K2cseVs0NTA1NitnXT1fWzE3Nl1bZ10p''@;'; put 'put ''O2ZvcihfWzE3N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzZjNFx1NzZjN1x1NzZjOVx1NzZjYlx1NzZjY1x1NzZkM1x1NzZkNVx1NzZkOVx1NzZkYVx1NzZkY1x1NzZkZFx1NzZkZVx1NzZlMFx1NzZlMVx1NzZlMlx1NzZlM1x1''@;'; put 'put ''NzZlNFx1NzZlNlx1NzZlN1x1NzZlOFx1NzZlOVx1NzZlYVx1NzZlYlx1NzZlY1x1NzZlZFx1NzZmMFx1NzZmM1x1NzZmNVx1NzZmNlx1NzZmN1x1NzZmYVx1NzZmYlx1NzZmZFx1NzZmZlx1NzcwMFx1NzcwMlx1NzcwM1x1NzcwNVx1NzcwNlx1NzcwYVx1NzcwY1x1NzcwZVx1NzcwZlx1Nzcx''@;'; put 'put ''MFx1NzcxMVx1NzcxMlx1NzcxM1x1NzcxNFx1NzcxNVx1NzcxNlx1NzcxN1x1NzcxOFx1NzcxYlx1NzcxY1x1NzcxZFx1NzcxZVx1NzcyMVx1NzcyM1x1NzcyNFx1NzcyNVx1NzcyN1x1NzcyYVx1NzcyYlx1ZmZmZFx1NzcyY1x1NzcyZVx1NzczMFx1NzczMVx1NzczMlx1NzczM1x1NzczNFx1''@;'; put 'put ''NzczOVx1NzczYlx1NzczZFx1NzczZVx1NzczZlx1Nzc0Mlx1Nzc0NFx1Nzc0NVx1Nzc0Nlx1Nzc0OFx1Nzc0OVx1Nzc0YVx1Nzc0Ylx1Nzc0Y1x1Nzc0ZFx1Nzc0ZVx1Nzc0Zlx1Nzc1Mlx1Nzc1M1x1Nzc1NFx1Nzc1NVx1Nzc1Nlx1Nzc1N1x1Nzc1OFx1Nzc1OVx1Nzc1Y1x1ODU4NFx1OTZm''@;'; put 'put ''OVx1NGZkZFx1NTgyMVx1OTk3MVx1NWI5ZFx1NjJiMVx1NjJhNVx1NjZiNFx1OGM3OVx1OWM4ZFx1NzIwNlx1Njc2Zlx1Nzg5MVx1NjBiMlx1NTM1MVx1NTMxN1x1OGY4OFx1ODBjY1x1OGQxZFx1OTRhMVx1NTAwZFx1NzJjOFx1NTkwN1x1NjBlYlx1NzExOVx1ODhhYlx1NTk1NFx1ODJlZlx1''@;'; put 'put ''NjcyY1x1N2IyOFx1NWQyOVx1N2VmN1x1NzUyZFx1NmNmNVx1OGU2Nlx1OGZmOFx1OTAzY1x1OWYzYlx1NmJkNFx1OTExOVx1N2IxNFx1NWY3Y1x1NzhhN1x1ODRkNlx1ODUzZFx1NmJkNVx1NmJkOVx1NmJkNlx1NWUwMVx1NWU4N1x1NzVmOVx1OTVlZFx1NjU1ZFx1NWYwYVx1NWZjNVx1OGY5''@;'; put 'put ''Zlx1NThjMVx1ODFjMlx1OTA3Zlx1OTY1Ylx1OTdhZFx1OGZiOVx1N2YxNlx1OGQyY1x1NjI0MVx1NGZiZlx1NTNkOFx1NTM1ZVx1OGZhOFx1OGZhOVx1OGZhYlx1OTA0ZFx1NjgwN1x1NWY2YVx1ODE5OFx1ODg2OFx1OWNkNlx1NjE4Ylx1NTIyYlx1NzYyYVx1NWY2Y1x1NjU4Y1x1NmZkMlx1''@;'; put 'put ''NmVlOFx1NWJiZVx1NjQ0OFx1NTE3NVx1NTFiMFx1NjdjNFx1NGUxOVx1NzljOVx1OTk3Y1x1NzBiM1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE3N10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTc3XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE3N11bZ11dPTQ1MzEyK2cseVs0NTMxMitn''@;'; put 'put ''XT1fWzE3N11bZ10pO2ZvcihfWzE3OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Nzc1ZFx1Nzc1ZVx1Nzc1Zlx1Nzc2MFx1Nzc2NFx1Nzc2N1x1Nzc2OVx1Nzc2YVx1Nzc2ZFx1Nzc2ZVx1Nzc2Zlx1Nzc3MFx1Nzc3MVx1Nzc3Mlx1''@;'; put 'put ''Nzc3M1x1Nzc3NFx1Nzc3NVx1Nzc3Nlx1Nzc3N1x1Nzc3OFx1Nzc3YVx1Nzc3Ylx1Nzc3Y1x1Nzc4MVx1Nzc4Mlx1Nzc4M1x1Nzc4Nlx1Nzc4N1x1Nzc4OFx1Nzc4OVx1Nzc4YVx1Nzc4Ylx1Nzc4Zlx1Nzc5MFx1Nzc5M1x1Nzc5NFx1Nzc5NVx1Nzc5Nlx1Nzc5N1x1Nzc5OFx1Nzc5OVx1Nzc5''@;'; put 'put ''YVx1Nzc5Ylx1Nzc5Y1x1Nzc5ZFx1Nzc5ZVx1NzdhMVx1NzdhM1x1NzdhNFx1NzdhNlx1NzdhOFx1NzdhYlx1NzdhZFx1NzdhZVx1NzdhZlx1NzdiMVx1NzdiMlx1NzdiNFx1NzdiNlx1NzdiN1x1NzdiOFx1NzdiOVx1NzdiYVx1ZmZmZFx1NzdiY1x1NzdiZVx1NzdjMFx1NzdjMVx1NzdjMlx1''@;'; put 'put ''NzdjM1x1NzdjNFx1NzdjNVx1NzdjNlx1NzdjN1x1NzdjOFx1NzdjOVx1NzdjYVx1NzdjYlx1NzdjY1x1NzdjZVx1NzdjZlx1NzdkMFx1NzdkMVx1NzdkMlx1NzdkM1x1NzdkNFx1NzdkNVx1NzdkNlx1NzdkOFx1NzdkOVx1NzdkYVx1NzdkZFx1NzdkZVx1NzdkZlx1NzdlMFx1NzdlMVx1Nzdl''@;'; put 'put ''NFx1NzVjNVx1NWU3Nlx1NzNiYlx1ODNlMFx1NjRhZFx1NjJlOFx1OTRiNVx1NmNlMlx1NTM1YVx1NTJjM1x1NjQwZlx1OTRjMlx1N2I5NFx1NGYyZlx1NWUxYlx1ODIzNlx1ODExNlx1ODE4YVx1NmUyNFx1NmNjYVx1OWE3M1x1NjM1NVx1NTM1Y1x1NTRmYVx1ODg2NVx1NTdlMFx1NGUwZFx1''@;'; put 'put ''NWUwM1x1NmI2NVx1N2MzZlx1OTBlOFx1NjAxNlx1NjRlNlx1NzMxY1x1ODhjMVx1Njc1MFx1NjI0ZFx1OGQyMlx1Nzc2Y1x1OGUyOVx1OTFjN1x1NWY2OVx1ODNkY1x1ODUyMVx1OTkxMFx1NTNjMlx1ODY5NVx1NmI4Ylx1NjBlZFx1NjBlOFx1NzA3Zlx1ODJjZFx1ODIzMVx1NGVkM1x1NmNh''@;'; put 'put ''N1x1ODVjZlx1NjRjZFx1N2NkOVx1NjlmZFx1NjZmOVx1ODM0OVx1NTM5NVx1N2I1Nlx1NGZhN1x1NTE4Y1x1NmQ0Ylx1NWM0Mlx1OGU2ZFx1NjNkMlx1NTNjOVx1ODMyY1x1ODMzNlx1NjdlNVx1NzhiNFx1NjQzZFx1NWJkZlx1NWM5NFx1NWRlZVx1OGJlN1x1NjJjNlx1NjdmNFx1OGM3YVx1''@;'; put 'put ''NjQwMFx1NjNiYVx1ODc0OVx1OTk4Ylx1OGMxN1x1N2YyMFx1OTRmMlx1NGVhN1x1OTYxMFx1OThhNFx1NjYwY1x1NzMxNlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE3OF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTc4XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE3OF1bZ11dPTQ1NTY4''@;'; put 'put ''K2cseVs0NTU2OCtnXT1fWzE3OF1bZ10pO2ZvcihfWzE3OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzdlNlx1NzdlOFx1NzdlYVx1NzdlZlx1NzdmMFx1NzdmMVx1NzdmMlx1NzdmNFx1NzdmNVx1NzdmN1x1NzdmOVx1NzdmYVx1''@;'; put 'put ''NzdmYlx1NzdmY1x1NzgwM1x1NzgwNFx1NzgwNVx1NzgwNlx1NzgwN1x1NzgwOFx1NzgwYVx1NzgwYlx1NzgwZVx1NzgwZlx1NzgxMFx1NzgxM1x1NzgxNVx1NzgxOVx1NzgxYlx1NzgxZVx1NzgyMFx1NzgyMVx1NzgyMlx1NzgyNFx1NzgyOFx1NzgyYVx1NzgyYlx1NzgyZVx1NzgyZlx1Nzgz''@;'; put 'put ''MVx1NzgzMlx1NzgzM1x1NzgzNVx1NzgzNlx1NzgzZFx1NzgzZlx1Nzg0MVx1Nzg0Mlx1Nzg0M1x1Nzg0NFx1Nzg0Nlx1Nzg0OFx1Nzg0OVx1Nzg0YVx1Nzg0Ylx1Nzg0ZFx1Nzg0Zlx1Nzg1MVx1Nzg1M1x1Nzg1NFx1Nzg1OFx1Nzg1OVx1Nzg1YVx1ZmZmZFx1Nzg1Ylx1Nzg1Y1x1Nzg1ZVx1''@;'; put 'put ''Nzg1Zlx1Nzg2MFx1Nzg2MVx1Nzg2Mlx1Nzg2M1x1Nzg2NFx1Nzg2NVx1Nzg2Nlx1Nzg2N1x1Nzg2OFx1Nzg2OVx1Nzg2Zlx1Nzg3MFx1Nzg3MVx1Nzg3Mlx1Nzg3M1x1Nzg3NFx1Nzg3NVx1Nzg3Nlx1Nzg3OFx1Nzg3OVx1Nzg3YVx1Nzg3Ylx1Nzg3ZFx1Nzg3ZVx1Nzg3Zlx1Nzg4MFx1Nzg4''@;'; put 'put ''MVx1Nzg4Mlx1Nzg4M1x1NTczYVx1NWMxZFx1NWUzOFx1OTU3Zlx1NTA3Zlx1ODBhMFx1NTM4Mlx1NjU1ZVx1NzU0NVx1NTUzMVx1NTAyMVx1OGQ4NVx1NjI4NFx1OTQ5ZVx1NjcxZFx1NTYzMlx1NmY2ZVx1NWRlMlx1NTQzNVx1NzA5Mlx1OGY2Nlx1NjI2Zlx1NjRhNFx1NjNhM1x1NWY3Ylx1''@;'; put 'put ''NmY4OFx1OTBmNFx1ODFlM1x1OGZiMFx1NWMxOFx1NjY2OFx1NWZmMVx1NmM4OVx1OTY0OFx1OGQ4MVx1ODg2Y1x1NjQ5MVx1NzlmMFx1NTdjZVx1NmE1OVx1NjIxMFx1NTQ0OFx1NGU1OFx1N2EwYlx1NjBlOVx1NmY4NFx1OGJkYVx1NjI3Zlx1OTAxZVx1OWE4Ylx1NzllNFx1NTQwM1x1NzVm''@;'; put 'put ''NFx1NjMwMVx1NTMxOVx1NmM2MFx1OGZkZlx1NWYxYlx1OWE3MFx1ODAzYlx1OWY3Zlx1NGY4OFx1NWMzYVx1OGQ2NFx1N2ZjNVx1NjVhNVx1NzBiZFx1NTE0NVx1NTFiMlx1ODY2Ylx1NWQwN1x1NWJhMFx1NjJiZFx1OTE2Y1x1NzU3NFx1OGUwY1x1N2EyMFx1NjEwMVx1N2I3OVx1NGVjN1x1''@;'; put 'put ''N2VmOFx1Nzc4NVx1NGUxMVx1ODFlZFx1NTIxZFx1NTFmYVx1NmE3MVx1NTNhOFx1OGU4N1x1OTUwNFx1OTZjZlx1NmVjMVx1OTY2NFx1Njk1YVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE3OV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTc5XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE3''@;'; put 'put ''OV1bZ11dPTQ1ODI0K2cseVs0NTgyNCtnXT1fWzE3OV1bZ10pO2ZvcihfWzE4MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Nzg4NFx1Nzg4NVx1Nzg4Nlx1Nzg4OFx1Nzg4YVx1Nzg4Ylx1Nzg4Zlx1Nzg5MFx1Nzg5Mlx1Nzg5NFx1''@;'; put 'put ''Nzg5NVx1Nzg5Nlx1Nzg5OVx1Nzg5ZFx1Nzg5ZVx1NzhhMFx1NzhhMlx1NzhhNFx1NzhhNlx1NzhhOFx1NzhhOVx1NzhhYVx1NzhhYlx1NzhhY1x1NzhhZFx1NzhhZVx1NzhhZlx1NzhiNVx1NzhiNlx1NzhiN1x1NzhiOFx1NzhiYVx1NzhiYlx1NzhiY1x1NzhiZFx1NzhiZlx1NzhjMFx1Nzhj''@;'; put 'put ''Mlx1NzhjM1x1NzhjNFx1NzhjNlx1NzhjN1x1NzhjOFx1NzhjY1x1NzhjZFx1NzhjZVx1NzhjZlx1NzhkMVx1NzhkMlx1NzhkM1x1NzhkNlx1NzhkN1x1NzhkOFx1NzhkYVx1NzhkYlx1NzhkY1x1NzhkZFx1NzhkZVx1NzhkZlx1NzhlMFx1NzhlMVx1NzhlMlx1NzhlM1x1ZmZmZFx1NzhlNFx1''@;'; put 'put ''NzhlNVx1NzhlNlx1NzhlN1x1NzhlOVx1NzhlYVx1NzhlYlx1NzhlZFx1NzhlZVx1NzhlZlx1NzhmMFx1NzhmMVx1NzhmM1x1NzhmNVx1NzhmNlx1NzhmOFx1NzhmOVx1NzhmYlx1NzhmY1x1NzhmZFx1NzhmZVx1NzhmZlx1NzkwMFx1NzkwMlx1NzkwM1x1NzkwNFx1NzkwNlx1NzkwN1x1Nzkw''@;'; put 'put ''OFx1NzkwOVx1NzkwYVx1NzkwYlx1NzkwY1x1Nzg0MFx1NTBhOFx1NzdkN1x1NjQxMFx1ODllNlx1NTkwNFx1NjNlM1x1NWRkZFx1N2E3Zlx1NjkzZFx1NGYyMFx1ODIzOVx1NTU5OFx1NGUzMlx1NzVhZVx1N2E5N1x1NWU2Mlx1NWU4YVx1OTVlZlx1NTIxYlx1NTQzOVx1NzA4YVx1NjM3Nlx1''@;'; put 'put ''OTUyNFx1NTc4Mlx1NjYyNVx1NjkzZlx1OTE4N1x1NTUwN1x1NmRmM1x1N2VhZlx1ODgyMlx1NjIzM1x1N2VmMFx1NzViNVx1ODMyOFx1NzhjMVx1OTZjY1x1OGY5ZVx1NjE0OFx1NzRmN1x1OGJjZFx1NmI2NFx1NTIzYVx1OGQ1MFx1NmIyMVx1ODA2YVx1ODQ3MVx1NTZmMVx1NTMwNlx1NGVj''@;'; put 'put ''ZVx1NGUxYlx1NTFkMVx1N2M5N1x1OTE4Ylx1N2MwN1x1NGZjM1x1OGU3Zlx1N2JlMVx1N2E5Y1x1NjQ2N1x1NWQxNFx1NTBhY1x1ODEwNlx1NzYwMVx1N2NiOVx1NmRlY1x1N2ZlMFx1Njc1MVx1NWI1OFx1NWJmOFx1NzhjYlx1NjRhZVx1NjQxM1x1NjNhYVx1NjMyYlx1OTUxOVx1NjQyZFx1''@;'; put 'put ''OGZiZVx1N2I1NFx1NzYyOVx1NjI1M1x1NTkyN1x1NTQ0Nlx1NmI3OVx1NTBhM1x1NjIzNFx1NWUyNlx1NmI4Nlx1NGVlM1x1OGQzN1x1ODg4Ylx1NWY4NVx1OTAyZVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE4MF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTgwXVtnXS5jaGFyQ29kZUF0''@;'; put 'put ''KDApJiYoSVtfWzE4MF1bZ11dPTQ2MDgwK2cseVs0NjA4MCtnXT1fWzE4MF1bZ10pO2ZvcihfWzE4MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzkwZFx1NzkwZVx1NzkwZlx1NzkxMFx1NzkxMVx1NzkxMlx1NzkxNFx1NzkxNVx1''@;'; put 'put ''NzkxNlx1NzkxN1x1NzkxOFx1NzkxOVx1NzkxYVx1NzkxYlx1NzkxY1x1NzkxZFx1NzkxZlx1NzkyMFx1NzkyMVx1NzkyMlx1NzkyM1x1NzkyNVx1NzkyNlx1NzkyN1x1NzkyOFx1NzkyOVx1NzkyYVx1NzkyYlx1NzkyY1x1NzkyZFx1NzkyZVx1NzkyZlx1NzkzMFx1NzkzMVx1NzkzMlx1Nzkz''@;'; put 'put ''M1x1NzkzNVx1NzkzNlx1NzkzN1x1NzkzOFx1NzkzOVx1NzkzZFx1NzkzZlx1Nzk0Mlx1Nzk0M1x1Nzk0NFx1Nzk0NVx1Nzk0N1x1Nzk0YVx1Nzk0Ylx1Nzk0Y1x1Nzk0ZFx1Nzk0ZVx1Nzk0Zlx1Nzk1MFx1Nzk1MVx1Nzk1Mlx1Nzk1NFx1Nzk1NVx1Nzk1OFx1Nzk1OVx1Nzk2MVx1Nzk2M1x1''@;'; put 'put ''ZmZmZFx1Nzk2NFx1Nzk2Nlx1Nzk2OVx1Nzk2YVx1Nzk2Ylx1Nzk2Y1x1Nzk2ZVx1Nzk3MFx1Nzk3MVx1Nzk3Mlx1Nzk3M1x1Nzk3NFx1Nzk3NVx1Nzk3Nlx1Nzk3OVx1Nzk3Ylx1Nzk3Y1x1Nzk3ZFx1Nzk3ZVx1Nzk3Zlx1Nzk4Mlx1Nzk4M1x1Nzk4Nlx1Nzk4N1x1Nzk4OFx1Nzk4OVx1Nzk4''@;'; put 'put ''Ylx1Nzk4Y1x1Nzk4ZFx1Nzk4ZVx1Nzk5MFx1Nzk5MVx1Nzk5Mlx1NjAyMFx1ODAzZFx1NjJjNVx1NGUzOVx1NTM1NVx1OTBmOFx1NjNiOFx1ODBjNlx1NjVlNlx1NmMyZVx1NGY0Nlx1NjBlZVx1NmRlMVx1OGJkZVx1NWYzOVx1ODZjYlx1NWY1M1x1NjMyMVx1NTE1YVx1ODM2MVx1Njg2M1x1''@;'; put 'put ''NTIwMFx1NjM2M1x1OGU0OFx1NTAxMlx1NWM5Ylx1Nzk3N1x1NWJmY1x1NTIzMFx1N2EzYlx1NjBiY1x1OTA1M1x1NzZkN1x1NWZiN1x1NWY5N1x1NzY4NFx1OGU2Y1x1NzA2Zlx1NzY3Ylx1N2I0OVx1NzdhYVx1NTFmM1x1OTA5M1x1NTgyNFx1NGY0ZVx1NmVmNFx1OGZlYVx1NjU0Y1x1N2Ix''@;'; put 'put ''Ylx1NzJjNFx1NmRhNFx1N2ZkZlx1NWFlMVx1NjJiNVx1NWU5NVx1NTczMFx1ODQ4Mlx1N2IyY1x1NWUxZFx1NWYxZlx1OTAxMlx1N2YxNFx1OThhMFx1NjM4Mlx1NmVjN1x1Nzg5OFx1NzBiOVx1NTE3OFx1OTc1Ylx1NTdhYlx1NzUzNVx1NGY0M1x1NzUzOFx1NWU5N1x1NjBlNlx1NTk2MFx1''@;'; put 'put ''NmRjMFx1NmJiZlx1Nzg4OVx1NTNmY1x1OTZkNVx1NTFjYlx1NTIwMVx1NjM4OVx1NTQwYVx1OTQ5M1x1OGMwM1x1OGRjY1x1NzIzOVx1Nzg5Zlx1ODc3Nlx1OGZlZFx1OGMwZFx1NTNlMFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE4MV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTgxXVtn''@;'; put 'put ''XS5jaGFyQ29kZUF0KDApJiYoSVtfWzE4MV1bZ11dPTQ2MzM2K2cseVs0NjMzNitnXT1fWzE4MV1bZ10pO2ZvcihfWzE4Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Nzk5M1x1Nzk5NFx1Nzk5NVx1Nzk5Nlx1Nzk5N1x1Nzk5OFx1''@;'; put 'put ''Nzk5OVx1Nzk5Ylx1Nzk5Y1x1Nzk5ZFx1Nzk5ZVx1Nzk5Zlx1NzlhMFx1NzlhMVx1NzlhMlx1NzlhM1x1NzlhNFx1NzlhNVx1NzlhNlx1NzlhOFx1NzlhOVx1NzlhYVx1NzlhYlx1NzlhY1x1NzlhZFx1NzlhZVx1NzlhZlx1NzliMFx1NzliMVx1NzliMlx1NzliNFx1NzliNVx1NzliNlx1Nzli''@;'; put 'put ''N1x1NzliOFx1NzliY1x1NzliZlx1NzljMlx1NzljNFx1NzljNVx1NzljN1x1NzljOFx1NzljYVx1NzljY1x1NzljZVx1NzljZlx1NzlkMFx1NzlkM1x1NzlkNFx1NzlkNlx1NzlkN1x1NzlkOVx1NzlkYVx1NzlkYlx1NzlkY1x1NzlkZFx1NzlkZVx1NzllMFx1NzllMVx1NzllMlx1NzllNVx1''@;'; put 'put ''NzllOFx1NzllYVx1ZmZmZFx1NzllY1x1NzllZVx1NzlmMVx1NzlmMlx1NzlmM1x1NzlmNFx1NzlmNVx1NzlmNlx1NzlmN1x1NzlmOVx1NzlmYVx1NzlmY1x1NzlmZVx1NzlmZlx1N2EwMVx1N2EwNFx1N2EwNVx1N2EwN1x1N2EwOFx1N2EwOVx1N2EwYVx1N2EwY1x1N2EwZlx1N2ExMFx1N2Ex''@;'; put 'put ''MVx1N2ExMlx1N2ExM1x1N2ExNVx1N2ExNlx1N2ExOFx1N2ExOVx1N2ExYlx1N2ExY1x1NGUwMVx1NzZlZlx1NTNlZVx1OTQ4OVx1OTg3Nlx1OWYwZVx1OTUyZFx1NWI5YVx1OGJhMlx1NGUyMlx1NGUxY1x1NTFhY1x1ODQ2M1x1NjFjMlx1NTJhOFx1NjgwYlx1NGY5N1x1NjA2Ylx1NTFiYlx1''@;'; put 'put ''NmQxZVx1NTE1Y1x1NjI5Nlx1NjU5N1x1OTY2MVx1OGM0Nlx1OTAxN1x1NzVkOFx1OTBmZFx1Nzc2M1x1NmJkMlx1NzI4YVx1NzJlY1x1OGJmYlx1NTgzNVx1Nzc3OVx1OGQ0Y1x1Njc1Y1x1OTU0MFx1ODA5YVx1NWVhNlx1NmUyMVx1NTk5Mlx1N2FlZlx1NzdlZFx1OTUzYlx1NmJiNVx1NjVh''@;'; put 'put ''ZFx1N2YwZVx1NTgwNlx1NTE1MVx1OTYxZlx1NWJmOVx1NThhOVx1NTQyOFx1OGU3Mlx1NjU2Nlx1OTg3Zlx1NTZlNFx1OTQ5ZFx1NzZmZVx1OTA0MVx1NjM4N1x1NTRjNlx1NTkxYVx1NTkzYVx1NTc5Ylx1OGViMlx1NjczNVx1OGRmYVx1ODIzNVx1NTI0MVx1NjBmMFx1NTgxNVx1ODZmZVx1''@;'; put 'put ''NWNlOFx1OWU0NVx1NGZjNFx1OTg5ZFx1OGJiOVx1NWEyNVx1NjA3Nlx1NTM4NFx1NjI3Y1x1OTA0Zlx1OTEwMlx1OTk3Zlx1NjA2OVx1ODAwY1x1NTEzZlx1ODAzM1x1NWMxNFx1OTk3NVx1NmQzMVx1NGU4Y1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE4Ml0ubGVuZ3RoOysrZyk2NTUz''@;'; put 'put ''MyE9PV9bMTgyXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE4Ml1bZ11dPTQ2NTkyK2cseVs0NjU5MitnXT1fWzE4Ml1bZ10pO2ZvcihfWzE4M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2ExZFx1N2ExZlx1N2EyMVx1N2EyMlx1''@;'; put 'put ''N2EyNFx1N2EyNVx1N2EyNlx1N2EyN1x1N2EyOFx1N2EyOVx1N2EyYVx1N2EyYlx1N2EyY1x1N2EyZFx1N2EyZVx1N2EyZlx1N2EzMFx1N2EzMVx1N2EzMlx1N2EzNFx1N2EzNVx1N2EzNlx1N2EzOFx1N2EzYVx1N2EzZVx1N2E0MFx1N2E0MVx1N2E0Mlx1N2E0M1x1N2E0NFx1N2E0NVx1N2E0''@;'; put 'put ''N1x1N2E0OFx1N2E0OVx1N2E0YVx1N2E0Ylx1N2E0Y1x1N2E0ZFx1N2E0ZVx1N2E0Zlx1N2E1MFx1N2E1Mlx1N2E1M1x1N2E1NFx1N2E1NVx1N2E1Nlx1N2E1OFx1N2E1OVx1N2E1YVx1N2E1Ylx1N2E1Y1x1N2E1ZFx1N2E1ZVx1N2E1Zlx1N2E2MFx1N2E2MVx1N2E2Mlx1N2E2M1x1N2E2NFx1''@;'; put 'put ''N2E2NVx1N2E2Nlx1N2E2N1x1N2E2OFx1ZmZmZFx1N2E2OVx1N2E2YVx1N2E2Ylx1N2E2Y1x1N2E2ZFx1N2E2ZVx1N2E2Zlx1N2E3MVx1N2E3Mlx1N2E3M1x1N2E3NVx1N2E3Ylx1N2E3Y1x1N2E3ZFx1N2E3ZVx1N2E4Mlx1N2E4NVx1N2E4N1x1N2E4OVx1N2E4YVx1N2E4Ylx1N2E4Y1x1N2E4''@;'; put 'put ''ZVx1N2E4Zlx1N2E5MFx1N2E5M1x1N2E5NFx1N2E5OVx1N2E5YVx1N2E5Ylx1N2E5ZVx1N2FhMVx1N2FhMlx1OGQzMFx1NTNkMVx1N2Y1YVx1N2I0Zlx1NGYxMFx1NGU0Zlx1OTYwMFx1NmNkNVx1NzNkMFx1ODVlOVx1NWUwNlx1NzU2YVx1N2ZmYlx1NmEwYVx1NzdmZVx1OTQ5Mlx1N2U0MVx1''@;'; put 'put ''NTFlMVx1NzBlNlx1NTNjZFx1OGZkNFx1ODMwM1x1OGQyOVx1NzJhZlx1OTk2ZFx1NmNkYlx1NTc0YVx1ODJiM1x1NjViOVx1ODBhYVx1NjIzZlx1OTYzMlx1NTlhOFx1NGVmZlx1OGJiZlx1N2ViYVx1NjUzZVx1ODNmMlx1OTc1ZVx1NTU2MVx1OThkZVx1ODBhNVx1NTMyYVx1OGJmZFx1NTQy''@;'; put 'put ''MFx1ODBiYVx1NWU5Zlx1NmNiOFx1OGQzOVx1ODJhY1x1OTE1YVx1NTQyOVx1NmMxYlx1NTIwNlx1N2ViN1x1NTc1Zlx1NzExYVx1NmM3ZVx1N2M4OVx1NTk0Ylx1NGVmZFx1NWZmZlx1NjEyNFx1N2NhYVx1NGUzMFx1NWMwMVx1NjdhYlx1ODcwMlx1NWNmMFx1OTUwYlx1OThjZVx1NzVhZlx1''@;'; put 'put ''NzBmZFx1OTAyMlx1NTFhZlx1N2YxZFx1OGJiZFx1NTk0OVx1NTFlNFx1NGY1Ylx1NTQyNlx1NTkyYlx1NjU3N1x1ODBhNFx1NWI3NVx1NjI3Nlx1NjJjMlx1OGY5MFx1NWU0NVx1NmMxZlx1N2IyNlx1NGYwZlx1NGZkOFx1NjcwZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE4M10ubGVu''@;'; put 'put ''Z3RoOysrZyk2NTUzMyE9PV9bMTgzXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE4M11bZ11dPTQ2ODQ4K2cseVs0Njg0OCtnXT1fWzE4M11bZ10pO2ZvcihfWzE4NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2FhM1x1N2FhNFx1''@;'; put 'put ''N2FhN1x1N2FhOVx1N2FhYVx1N2FhYlx1N2FhZVx1N2FhZlx1N2FiMFx1N2FiMVx1N2FiMlx1N2FiNFx1N2FiNVx1N2FiNlx1N2FiN1x1N2FiOFx1N2FiOVx1N2FiYVx1N2FiYlx1N2FiY1x1N2FiZFx1N2FiZVx1N2FjMFx1N2FjMVx1N2FjMlx1N2FjM1x1N2FjNFx1N2FjNVx1N2FjNlx1N2Fj''@;'; put 'put ''N1x1N2FjOFx1N2FjOVx1N2FjYVx1N2FjY1x1N2FjZFx1N2FjZVx1N2FjZlx1N2FkMFx1N2FkMVx1N2FkMlx1N2FkM1x1N2FkNFx1N2FkNVx1N2FkN1x1N2FkOFx1N2FkYVx1N2FkYlx1N2FkY1x1N2FkZFx1N2FlMVx1N2FlMlx1N2FlNFx1N2FlN1x1N2FlOFx1N2FlOVx1N2FlYVx1N2FlYlx1''@;'; put 'put ''N2FlY1x1N2FlZVx1N2FmMFx1N2FmMVx1N2FmMlx1N2FmM1x1ZmZmZFx1N2FmNFx1N2FmNVx1N2FmNlx1N2FmN1x1N2FmOFx1N2FmYlx1N2FmY1x1N2FmZVx1N2IwMFx1N2IwMVx1N2IwMlx1N2IwNVx1N2IwN1x1N2IwOVx1N2IwY1x1N2IwZFx1N2IwZVx1N2IxMFx1N2IxMlx1N2IxM1x1N2Ix''@;'; put 'put ''Nlx1N2IxN1x1N2IxOFx1N2IxYVx1N2IxY1x1N2IxZFx1N2IxZlx1N2IyMVx1N2IyMlx1N2IyM1x1N2IyN1x1N2IyOVx1N2IyZFx1NmQ2ZVx1NmRhYVx1Nzk4Zlx1ODhiMVx1NWYxN1x1NzUyYlx1NjI5YVx1OGY4NVx1NGZlZlx1OTFkY1x1NjVhN1x1ODEyZlx1ODE1MVx1NWU5Y1x1ODE1MFx1''@;'; put 'put ''OGQ3NFx1NTI2Zlx1ODk4Nlx1OGQ0Ylx1NTkwZFx1NTA4NVx1NGVkOFx1OTYxY1x1NzIzNlx1ODE3OVx1OGQxZlx1NWJjY1x1OGJhM1x1OTY0NFx1NTk4N1x1N2YxYVx1NTQ5MFx1NTY3Nlx1NTYwZVx1OGJlNVx1NjUzOVx1Njk4Mlx1OTQ5OVx1NzZkNlx1NmU4OVx1NWU3Mlx1NzUxOFx1Njc0''@;'; put 'put ''Nlx1NjdkMVx1N2FmZlx1ODA5ZFx1OGQ3Nlx1NjExZlx1NzljNlx1NjU2Mlx1OGQ2M1x1NTE4OFx1NTIxYVx1OTRhMlx1N2YzOFx1ODA5Ylx1N2ViMlx1NWM5N1x1NmUyZlx1Njc2MFx1N2JkOVx1NzY4Ylx1OWFkOFx1ODE4Zlx1N2Y5NFx1N2NkNVx1NjQxZVx1OTU1MFx1N2EzZlx1NTQ0YVx1''@;'; put 'put ''NTRlNVx1NmI0Y1x1NjQwMVx1NjIwOFx1OWUzZFx1ODBmM1x1NzU5OVx1NTI3Mlx1OTc2OVx1ODQ1Ylx1NjgzY1x1ODZlNFx1OTYwMVx1OTY5NFx1OTRlY1x1NGUyYVx1NTQwNFx1N2VkOVx1NjgzOVx1OGRkZlx1ODAxNVx1NjZmNFx1NWU5YVx1N2ZiOVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtn''@;'; put 'put ''IT1fWzE4NF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTg0XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE4NF1bZ11dPTQ3MTA0K2cseVs0NzEwNCtnXT1fWzE4NF1bZ10pO2ZvcihfWzE4NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''N2IyZlx1N2IzMFx1N2IzMlx1N2IzNFx1N2IzNVx1N2IzNlx1N2IzN1x1N2IzOVx1N2IzYlx1N2IzZFx1N2IzZlx1N2I0MFx1N2I0MVx1N2I0Mlx1N2I0M1x1N2I0NFx1N2I0Nlx1N2I0OFx1N2I0YVx1N2I0ZFx1N2I0ZVx1N2I1M1x1N2I1NVx1N2I1N1x1N2I1OVx1N2I1Y1x1N2I1ZVx1N2I1''@;'; put 'put ''Zlx1N2I2MVx1N2I2M1x1N2I2NFx1N2I2NVx1N2I2Nlx1N2I2N1x1N2I2OFx1N2I2OVx1N2I2YVx1N2I2Ylx1N2I2Y1x1N2I2ZFx1N2I2Zlx1N2I3MFx1N2I3M1x1N2I3NFx1N2I3Nlx1N2I3OFx1N2I3YVx1N2I3Y1x1N2I3ZFx1N2I3Zlx1N2I4MVx1N2I4Mlx1N2I4M1x1N2I4NFx1N2I4Nlx1''@;'; put 'put ''N2I4N1x1N2I4OFx1N2I4OVx1N2I4YVx1N2I4Ylx1N2I4Y1x1N2I4ZVx1N2I4Zlx1ZmZmZFx1N2I5MVx1N2I5Mlx1N2I5M1x1N2I5Nlx1N2I5OFx1N2I5OVx1N2I5YVx1N2I5Ylx1N2I5ZVx1N2I5Zlx1N2JhMFx1N2JhM1x1N2JhNFx1N2JhNVx1N2JhZVx1N2JhZlx1N2JiMFx1N2JiMlx1N2Ji''@;'; put 'put ''M1x1N2JiNVx1N2JiNlx1N2JiN1x1N2JiOVx1N2JiYVx1N2JiYlx1N2JiY1x1N2JiZFx1N2JiZVx1N2JiZlx1N2JjMFx1N2JjMlx1N2JjM1x1N2JjNFx1NTdjMlx1ODAzZlx1Njg5N1x1NWRlNVx1NjUzYlx1NTI5Zlx1NjA2ZFx1OWY5YVx1NGY5Ylx1OGVhY1x1NTE2Y1x1NWJhYlx1NWYxM1x1''@;'; put 'put ''NWRlOVx1NmM1ZVx1NjJmMVx1OGQyMVx1NTE3MVx1OTRhOVx1NTJmZVx1NmM5Zlx1ODJkZlx1NzJkN1x1NTdhMlx1Njc4NFx1OGQyZFx1NTkxZlx1OGY5Y1x1ODNjN1x1NTQ5NVx1N2I4ZFx1NGYzMFx1NmNiZFx1NWI2NFx1NTlkMVx1OWYxM1x1NTNlNFx1ODZjYVx1OWFhOFx1OGMzN1x1ODBh''@;'; put 'put ''MVx1NjU0NVx1OTg3ZVx1NTZmYVx1OTZjN1x1NTIyZVx1NzRkY1x1NTI1MFx1NWJlMVx1NjMwMlx1ODkwMlx1NGU1Nlx1NjJkMFx1NjAyYVx1NjhmYVx1NTE3M1x1NWI5OFx1NTFhMFx1ODljMlx1N2JhMVx1OTk4Nlx1N2Y1MFx1NjBlZlx1NzA0Y1x1OGQyZlx1NTE0OVx1NWU3Zlx1OTAxYlx1''@;'; put 'put ''NzQ3MFx1ODljNFx1NTcyZFx1Nzg0NVx1NWY1Mlx1OWY5Zlx1OTVmYVx1OGY2OFx1OWIzY1x1OGJlMVx1NzY3OFx1Njg0Mlx1NjdkY1x1OGRlYVx1OGQzNVx1NTIzZFx1OGY4YVx1NmVkYVx1NjhjZFx1OTUwNVx1OTBlZFx1NTZmZFx1Njc5Y1x1ODhmOVx1OGZjN1x1NTRjOFx1ZmZmZCIuc3Bs''@;'; put 'put ''aXQoIiIpLGc9MDtnIT1fWzE4NV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTg1XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE4NV1bZ11dPTQ3MzYwK2cseVs0NzM2MCtnXT1fWzE4NV1bZ10pO2ZvcihfWzE4Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1N2JjNVx1N2JjOFx1N2JjOVx1N2JjYVx1N2JjYlx1N2JjZFx1N2JjZVx1N2JjZlx1N2JkMFx1N2JkMlx1N2JkNFx1N2JkNVx1N2JkNlx1N2JkN1x1N2JkOFx1N2JkYlx1N2JkY1x1N2JkZVx1N2JkZlx1N2JlMFx1N2JlMlx1N2JlM1x1N2JlNFx1N2JlN1x1N2JlOFx1N2Jl''@;'; put 'put ''OVx1N2JlYlx1N2JlY1x1N2JlZFx1N2JlZlx1N2JmMFx1N2JmMlx1N2JmM1x1N2JmNFx1N2JmNVx1N2JmNlx1N2JmOFx1N2JmOVx1N2JmYVx1N2JmYlx1N2JmZFx1N2JmZlx1N2MwMFx1N2MwMVx1N2MwMlx1N2MwM1x1N2MwNFx1N2MwNVx1N2MwNlx1N2MwOFx1N2MwOVx1N2MwYVx1N2MwZFx1''@;'; put 'put ''N2MwZVx1N2MxMFx1N2MxMVx1N2MxMlx1N2MxM1x1N2MxNFx1N2MxNVx1N2MxN1x1N2MxOFx1N2MxOVx1ZmZmZFx1N2MxYVx1N2MxYlx1N2MxY1x1N2MxZFx1N2MxZVx1N2MyMFx1N2MyMVx1N2MyMlx1N2MyM1x1N2MyNFx1N2MyNVx1N2MyOFx1N2MyOVx1N2MyYlx1N2MyY1x1N2MyZFx1N2My''@;'; put 'put ''ZVx1N2MyZlx1N2MzMFx1N2MzMVx1N2MzMlx1N2MzM1x1N2MzNFx1N2MzNVx1N2MzNlx1N2MzN1x1N2MzOVx1N2MzYVx1N2MzYlx1N2MzY1x1N2MzZFx1N2MzZVx1N2M0Mlx1OWFiOFx1NWI2OVx1NmQ3N1x1NmMyNlx1NGVhNVx1NWJiM1x1OWE4N1x1OTE2M1x1NjFhOFx1OTBhZlx1OTdlOVx1''@;'; put 'put ''NTQyYlx1NmRiNVx1NWJkMlx1NTFmZFx1NTU4YVx1N2Y1NVx1N2ZmMFx1NjRiY1x1NjM0ZFx1NjVmMVx1NjFiZVx1NjA4ZFx1NzEwYVx1NmM1N1x1NmM0OVx1NTkyZlx1Njc2ZFx1ODIyYVx1NThkNVx1NTY4ZVx1OGM2YVx1NmJlYlx1OTBkZFx1NTk3ZFx1ODAxN1x1NTNmN1x1NmQ2OVx1NTQ3''@;'; put 'put ''NVx1NTU5ZFx1ODM3N1x1ODNjZlx1NjgzOFx1NzliZVx1NTQ4Y1x1NGY1NVx1NTQwOFx1NzZkMlx1OGM4OVx1OTYwMlx1NmNiM1x1NmRiOFx1OGQ2Ylx1ODkxMFx1OWU2NFx1OGQzYVx1NTYzZlx1OWVkMVx1NzVkNVx1NWY4OFx1NzJlMFx1NjA2OFx1NTRmY1x1NGVhOFx1NmEyYVx1ODg2MVx1''@;'; put 'put ''NjA1Mlx1OGY3MFx1NTRjNFx1NzBkOFx1ODY3OVx1OWUzZlx1NmQyYVx1NWI4Zlx1NWYxOFx1N2VhMlx1NTU4OVx1NGZhZlx1NzMzNFx1NTQzY1x1NTM5YVx1NTAxOVx1NTQwZVx1NTQ3Y1x1NGU0ZVx1NWZmZFx1NzQ1YVx1NThmNlx1ODQ2Ylx1ODBlMVx1ODc3NFx1NzJkMFx1N2NjYVx1NmU1''@;'; put 'put ''Nlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE4Nl0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTg2XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE4Nl1bZ11dPTQ3NjE2K2cseVs0NzYxNitnXT1fWzE4Nl1bZ10pO2ZvcihfWzE4N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2M0M1x1N2M0NFx1N2M0NVx1N2M0Nlx1N2M0N1x1N2M0OFx1N2M0OVx1N2M0YVx1N2M0Ylx1N2M0Y1x1N2M0ZVx1N2M0Zlx1N2M1MFx1N2M1MVx1N2M1Mlx1N2M1M1x1N2M1NFx1N2M1NVx1N2M1Nlx1N2M1N1x1N2M1OFx1N2M1OVx1N2M1YVx1N2M1''@;'; put 'put ''Ylx1N2M1Y1x1N2M1ZFx1N2M1ZVx1N2M1Zlx1N2M2MFx1N2M2MVx1N2M2Mlx1N2M2M1x1N2M2NFx1N2M2NVx1N2M2Nlx1N2M2N1x1N2M2OFx1N2M2OVx1N2M2YVx1N2M2Ylx1N2M2Y1x1N2M2ZFx1N2M2ZVx1N2M2Zlx1N2M3MFx1N2M3MVx1N2M3Mlx1N2M3NVx1N2M3Nlx1N2M3N1x1N2M3OFx1''@;'; put 'put ''N2M3OVx1N2M3YVx1N2M3ZVx1N2M3Zlx1N2M4MFx1N2M4MVx1N2M4Mlx1N2M4M1x1N2M4NFx1N2M4NVx1N2M4Nlx1N2M4N1x1ZmZmZFx1N2M4OFx1N2M4YVx1N2M4Ylx1N2M4Y1x1N2M4ZFx1N2M4ZVx1N2M4Zlx1N2M5MFx1N2M5M1x1N2M5NFx1N2M5Nlx1N2M5OVx1N2M5YVx1N2M5Ylx1N2Nh''@;'; put 'put ''MFx1N2NhMVx1N2NhM1x1N2NhNlx1N2NhN1x1N2NhOFx1N2NhOVx1N2NhYlx1N2NhY1x1N2NhZFx1N2NhZlx1N2NiMFx1N2NiNFx1N2NiNVx1N2NiNlx1N2NiN1x1N2NiOFx1N2NiYVx1N2NiYlx1NWYyN1x1ODY0ZVx1NTUyY1x1NjJhNFx1NGU5Mlx1NmNhYVx1NjIzN1x1ODJiMVx1NTRkN1x1''@;'; put 'put ''NTM0ZVx1NzMzZVx1NmVkMVx1NzUzYlx1NTIxMlx1NTMxNlx1OGJkZFx1NjlkMFx1NWY4YVx1NjAwMFx1NmRlZVx1NTc0Zlx1NmIyMlx1NzNhZlx1Njg1M1x1OGZkOFx1N2YxM1x1NjM2Mlx1NjBhM1x1NTUyNFx1NzVlYVx1OGM2Mlx1NzExNVx1NmRhM1x1NWJhNlx1NWU3Ylx1ODM1Mlx1NjE0''@;'; put 'put ''Y1x1OWVjNFx1NzhmYVx1ODc1N1x1N2MyN1x1NzY4N1x1NTFmMFx1NjBmNlx1NzE0Y1x1NjY0M1x1NWU0Y1x1NjA0ZFx1OGMwZVx1NzA3MFx1NjMyNVx1OGY4OVx1NWZiZFx1NjA2Mlx1ODZkNFx1NTZkZVx1NmJjMVx1NjA5NFx1NjE2N1x1NTM0OVx1NjBlMFx1NjY2Nlx1OGQzZlx1NzlmZFx1''@;'; put 'put ''NGYxYVx1NzBlOVx1NmM0N1x1OGJiM1x1OGJmMlx1N2VkOFx1ODM2NFx1NjYwZlx1NWE1YVx1OWI0Mlx1NmQ1MVx1NmRmN1x1OGM0MVx1NmQzYlx1NGYxOVx1NzA2Ylx1ODNiN1x1NjIxNlx1NjBkMVx1OTcwZFx1OGQyN1x1Nzk3OFx1NTFmYlx1NTczZVx1NTdmYVx1NjczYVx1NzU3OFx1N2Ez''@;'; put 'put ''ZFx1NzllZlx1N2I5NVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE4N10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTg3XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE4N11bZ11dPTQ3ODcyK2cseVs0Nzg3MitnXT1fWzE4N11bZ10pO2ZvcihfWzE4OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2NiZlx1N2NjMFx1N2NjMlx1N2NjM1x1N2NjNFx1N2NjNlx1N2NjOVx1N2NjYlx1N2NjZVx1N2NjZlx1N2NkMFx1N2NkMVx1N2NkMlx1N2NkM1x1N2NkNFx1N2NkOFx1N2NkYVx1N2NkYlx1N2NkZFx1N2NkZVx1N2NlMVx1N2Nl''@;'; put 'put ''Mlx1N2NlM1x1N2NlNFx1N2NlNVx1N2NlNlx1N2NlN1x1N2NlOVx1N2NlYVx1N2NlYlx1N2NlY1x1N2NlZFx1N2NlZVx1N2NmMFx1N2NmMVx1N2NmMlx1N2NmM1x1N2NmNFx1N2NmNVx1N2NmNlx1N2NmN1x1N2NmOVx1N2NmYVx1N2NmY1x1N2NmZFx1N2NmZVx1N2NmZlx1N2QwMFx1N2QwMVx1''@;'; put 'put ''N2QwMlx1N2QwM1x1N2QwNFx1N2QwNVx1N2QwNlx1N2QwN1x1N2QwOFx1N2QwOVx1N2QwYlx1N2QwY1x1N2QwZFx1N2QwZVx1N2QwZlx1N2QxMFx1ZmZmZFx1N2QxMVx1N2QxMlx1N2QxM1x1N2QxNFx1N2QxNVx1N2QxNlx1N2QxN1x1N2QxOFx1N2QxOVx1N2QxYVx1N2QxYlx1N2QxY1x1N2Qx''@;'; put 'put ''ZFx1N2QxZVx1N2QxZlx1N2QyMVx1N2QyM1x1N2QyNFx1N2QyNVx1N2QyNlx1N2QyOFx1N2QyOVx1N2QyYVx1N2QyY1x1N2QyZFx1N2QyZVx1N2QzMFx1N2QzMVx1N2QzMlx1N2QzM1x1N2QzNFx1N2QzNVx1N2QzNlx1ODA4Y1x1OTk2NVx1OGZmOVx1NmZjMFx1OGJhNVx1OWUyMVx1NTllY1x1''@;'; put 'put ''N2VlOVx1N2YwOVx1NTQwOVx1Njc4MVx1NjhkOFx1OGY5MVx1N2M0ZFx1OTZjNlx1NTNjYVx1NjAyNVx1NzViZVx1NmM3Mlx1NTM3M1x1NWFjOVx1N2VhN1x1NjMyNFx1NTFlMFx1ODEwYVx1NWRmMVx1ODRkZlx1NjI4MFx1NTE4MFx1NWI2M1x1NGYwZVx1Nzk2ZFx1NTI0Mlx1NjBiOFx1NmQ0''@;'; put 'put ''ZVx1NWJjNFx1NWJjMlx1OGJhMVx1OGJiMFx1NjVlMlx1NWZjY1x1OTY0NVx1NTk5M1x1N2VlN1x1N2VhYVx1NTYwOVx1NjdiN1x1NTkzOVx1NGY3M1x1NWJiNlx1NTJhMFx1ODM1YVx1OTg4YVx1OGQzZVx1NzUzMlx1OTRiZVx1NTA0N1x1N2EzY1x1NGVmN1x1NjdiNlx1OWE3ZVx1NWFjMVx1''@;'; put 'put ''NmI3Y1x1NzZkMVx1NTc1YVx1NWMxNlx1N2IzYVx1OTVmNFx1NzE0ZVx1NTE3Y1x1ODBhOVx1ODI3MFx1NTk3OFx1N2YwNFx1ODMyN1x1NjhjMFx1NjdlY1x1NzhiMVx1Nzg3N1x1NjJlM1x1NjM2MVx1N2I4MFx1NGZlZFx1NTI2YVx1NTFjZlx1ODM1MFx1NjlkYlx1OTI3NFx1OGRmNVx1OGQz''@;'; put 'put ''MVx1ODljMVx1OTUyZVx1N2JhZFx1NGVmNlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE4OF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTg4XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE4OF1bZ11dPTQ4MTI4K2cseVs0ODEyOCtnXT1fWzE4OF1bZ10pO2ZvcihfWzE4OV09Ilx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2QzN1x1N2QzOFx1N2QzOVx1N2QzYVx1N2QzYlx1N2QzY1x1N2QzZFx1N2QzZVx1N2QzZlx1N2Q0MFx1N2Q0MVx1N2Q0Mlx1N2Q0M1x1N2Q0NFx1N2Q0NVx1N2Q0Nlx1N2Q0N1x1N2Q0OFx1N2Q0OVx1N2Q0''@;'; put 'put ''YVx1N2Q0Ylx1N2Q0Y1x1N2Q0ZFx1N2Q0ZVx1N2Q0Zlx1N2Q1MFx1N2Q1MVx1N2Q1Mlx1N2Q1M1x1N2Q1NFx1N2Q1NVx1N2Q1Nlx1N2Q1N1x1N2Q1OFx1N2Q1OVx1N2Q1YVx1N2Q1Ylx1N2Q1Y1x1N2Q1ZFx1N2Q1ZVx1N2Q1Zlx1N2Q2MFx1N2Q2MVx1N2Q2Mlx1N2Q2M1x1N2Q2NFx1N2Q2NVx1''@;'; put 'put ''N2Q2Nlx1N2Q2N1x1N2Q2OFx1N2Q2OVx1N2Q2YVx1N2Q2Ylx1N2Q2Y1x1N2Q2ZFx1N2Q2Zlx1N2Q3MFx1N2Q3MVx1N2Q3Mlx1N2Q3M1x1N2Q3NFx1N2Q3NVx1N2Q3Nlx1ZmZmZFx1N2Q3OFx1N2Q3OVx1N2Q3YVx1N2Q3Ylx1N2Q3Y1x1N2Q3ZFx1N2Q3ZVx1N2Q3Zlx1N2Q4MFx1N2Q4MVx1N2Q4''@;'; put 'put ''Mlx1N2Q4M1x1N2Q4NFx1N2Q4NVx1N2Q4Nlx1N2Q4N1x1N2Q4OFx1N2Q4OVx1N2Q4YVx1N2Q4Ylx1N2Q4Y1x1N2Q4ZFx1N2Q4ZVx1N2Q4Zlx1N2Q5MFx1N2Q5MVx1N2Q5Mlx1N2Q5M1x1N2Q5NFx1N2Q5NVx1N2Q5Nlx1N2Q5N1x1N2Q5OFx1NTA2NVx1ODIzMFx1NTI1MVx1OTk2Zlx1NmUxMFx1''@;'; put 'put ''NmU4NVx1NmRhN1x1NWVmYVx1NTBmNVx1NTlkY1x1NWMwNlx1NmQ0Nlx1NmM1Zlx1NzU4Nlx1ODQ4Ylx1Njg2OFx1NTk1Nlx1OGJiMlx1NTMyMFx1OTE3MVx1OTY0ZFx1ODU0OVx1NjkxMlx1NzkwMVx1NzEyNlx1ODBmNlx1NGVhNFx1OTBjYVx1NmQ0N1x1OWE4NFx1NWEwN1x1NTZiY1x1NjQw''@;'; put 'put ''NVx1OTRmMFx1NzdlYlx1NGZhNVx1ODExYVx1NzJlMVx1ODlkMlx1OTk3YVx1N2YzNFx1N2VkZVx1NTI3Zlx1NjU1OVx1OTE3NVx1OGY3Zlx1OGY4M1x1NTNlYlx1N2E5Nlx1NjNlZFx1NjNhNVx1NzY4Nlx1NzlmOFx1ODg1N1x1OTYzNlx1NjIyYVx1NTJhYlx1ODI4Mlx1Njg1NFx1Njc3MFx1''@;'; put 'put ''NjM3N1x1Nzc2Ylx1N2FlZFx1NmQwMVx1N2VkM1x1ODllM1x1NTlkMFx1NjIxMlx1ODVjOVx1ODJhNVx1NzU0Y1x1NTAxZlx1NGVjYlx1NzVhNVx1OGJlYlx1NWM0YVx1NWRmZVx1N2I0Ylx1NjVhNFx1OTFkMVx1NGVjYVx1NmQyNVx1ODk1Zlx1N2QyN1x1OTUyNlx1NGVjNVx1OGMyOFx1OGZk''@;'; put 'put ''Ylx1OTc3M1x1NjY0Ylx1Nzk4MVx1OGZkMVx1NzBlY1x1NmQ3OFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE4OV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTg5XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE4OV1bZ11dPTQ4Mzg0K2cseVs0ODM4NCtnXT1fWzE4OV1bZ10pO2ZvcihfWzE5''@;'; put 'put ''MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2Q5OVx1N2Q5YVx1N2Q5Ylx1N2Q5Y1x1N2Q5ZFx1N2Q5ZVx1N2Q5Zlx1N2RhMFx1N2RhMVx1N2RhMlx1N2RhM1x1N2RhNFx1N2RhNVx1N2RhN1x1N2RhOFx1N2RhOVx1N2RhYVx1N2Rh''@;'; put 'put ''Ylx1N2RhY1x1N2RhZFx1N2RhZlx1N2RiMFx1N2RiMVx1N2RiMlx1N2RiM1x1N2RiNFx1N2RiNVx1N2RiNlx1N2RiN1x1N2RiOFx1N2RiOVx1N2RiYVx1N2RiYlx1N2RiY1x1N2RiZFx1N2RiZVx1N2RiZlx1N2RjMFx1N2RjMVx1N2RjMlx1N2RjM1x1N2RjNFx1N2RjNVx1N2RjNlx1N2RjN1x1''@;'; put 'put ''N2RjOFx1N2RjOVx1N2RjYVx1N2RjYlx1N2RjY1x1N2RjZFx1N2RjZVx1N2RjZlx1N2RkMFx1N2RkMVx1N2RkMlx1N2RkM1x1N2RkNFx1N2RkNVx1N2RkNlx1N2RkN1x1N2RkOFx1N2RkOVx1ZmZmZFx1N2RkYVx1N2RkYlx1N2RkY1x1N2RkZFx1N2RkZVx1N2RkZlx1N2RlMFx1N2RlMVx1N2Rl''@;'; put 'put ''Mlx1N2RlM1x1N2RlNFx1N2RlNVx1N2RlNlx1N2RlN1x1N2RlOFx1N2RlOVx1N2RlYVx1N2RlYlx1N2RlY1x1N2RlZFx1N2RlZVx1N2RlZlx1N2RmMFx1N2RmMVx1N2RmMlx1N2RmM1x1N2RmNFx1N2RmNVx1N2RmNlx1N2RmN1x1N2RmOFx1N2RmOVx1N2RmYVx1NWMzZFx1NTJiMlx1ODM0Nlx1''@;'; put 'put ''NTE2Mlx1ODMwZVx1Nzc1Ylx1NjY3Nlx1OWNiOFx1NGVhY1x1NjBjYVx1N2NiZVx1N2NiM1x1N2VjZlx1NGU5NVx1OGI2Nlx1NjY2Zlx1OTg4OFx1OTc1OVx1NTg4M1x1NjU2Y1x1OTU1Y1x1NWY4NFx1NzVjOVx1OTc1Nlx1N2FkZlx1N2FkZVx1NTFjMFx1NzBhZlx1N2E5OFx1NjNlYVx1N2E3''@;'; put 'put ''Nlx1N2VhMFx1NzM5Nlx1OTdlZFx1NGU0NVx1NzA3OFx1NGU1ZFx1OTE1Mlx1NTNhOVx1NjU1MVx1NjVlN1x1ODFmY1x1ODIwNVx1NTQ4ZVx1NWMzMVx1NzU5YVx1OTdhMFx1NjJkOFx1NzJkOVx1NzViZFx1NWM0NVx1OWE3OVx1ODNjYVx1NWM0MFx1NTQ4MFx1NzdlOVx1NGUzZVx1NmNhZVx1''@;'; put 'put ''ODA1YVx1NjJkMlx1NjM2ZVx1NWRlOFx1NTE3N1x1OGRkZFx1OGUxZVx1OTUyZlx1NGZmMVx1NTNlNVx1NjBlN1x1NzBhY1x1NTI2N1x1NjM1MFx1OWU0M1x1NWExZlx1NTAyNlx1NzczN1x1NTM3N1x1N2VlMlx1NjQ4NVx1NjUyYlx1NjI4OVx1NjM5OFx1NTAxNFx1NzIzNVx1ODljOVx1NTFi''@;'; put 'put ''M1x1OGJjMFx1N2VkZFx1NTc0N1x1ODNjY1x1OTRhN1x1NTE5Ylx1NTQxYlx1NWNmYlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE5MF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTkwXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE5MF1bZ11dPTQ4NjQwK2cseVs0ODY0MCtnXT1fWzE5MF1b''@;'; put 'put ''Z10pO2ZvcihfWzE5MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2RmYlx1N2RmY1x1N2RmZFx1N2RmZVx1N2RmZlx1N2UwMFx1N2UwMVx1N2UwMlx1N2UwM1x1N2UwNFx1N2UwNVx1N2UwNlx1N2UwN1x1N2UwOFx1N2UwOVx1N2Uw''@;'; put 'put ''YVx1N2UwYlx1N2UwY1x1N2UwZFx1N2UwZVx1N2UwZlx1N2UxMFx1N2UxMVx1N2UxMlx1N2UxM1x1N2UxNFx1N2UxNVx1N2UxNlx1N2UxN1x1N2UxOFx1N2UxOVx1N2UxYVx1N2UxYlx1N2UxY1x1N2UxZFx1N2UxZVx1N2UxZlx1N2UyMFx1N2UyMVx1N2UyMlx1N2UyM1x1N2UyNFx1N2UyNVx1''@;'; put 'put ''N2UyNlx1N2UyN1x1N2UyOFx1N2UyOVx1N2UyYVx1N2UyYlx1N2UyY1x1N2UyZFx1N2UyZVx1N2UyZlx1N2UzMFx1N2UzMVx1N2UzMlx1N2UzM1x1N2UzNFx1N2UzNVx1N2UzNlx1N2UzN1x1N2UzOFx1N2UzOVx1ZmZmZFx1N2UzYVx1N2UzY1x1N2UzZFx1N2UzZVx1N2UzZlx1N2U0MFx1N2U0''@;'; put 'put ''Mlx1N2U0M1x1N2U0NFx1N2U0NVx1N2U0Nlx1N2U0OFx1N2U0OVx1N2U0YVx1N2U0Ylx1N2U0Y1x1N2U0ZFx1N2U0ZVx1N2U0Zlx1N2U1MFx1N2U1MVx1N2U1Mlx1N2U1M1x1N2U1NFx1N2U1NVx1N2U1Nlx1N2U1N1x1N2U1OFx1N2U1OVx1N2U1YVx1N2U1Ylx1N2U1Y1x1N2U1ZFx1NGZjYVx1''@;'; put 'put ''N2FlM1x1NmQ1YVx1OTBlMVx1OWE4Zlx1NTU4MFx1NTQ5Nlx1NTM2MVx1NTRhZlx1NWYwMFx1NjNlOVx1Njk3N1x1NTFlZlx1NjE2OFx1NTIwYVx1NTgyYVx1NTJkOFx1NTc0ZVx1NzgwZFx1NzcwYlx1NWViN1x1NjE3N1x1N2NlMFx1NjI1Ylx1NjI5N1x1NGVhMlx1NzA5NVx1ODAwM1x1NjJm''@;'; put 'put ''N1x1NzBlNFx1OTc2MFx1NTc3N1x1ODJkYlx1NjdlZlx1NjhmNVx1NzhkNVx1OTg5N1x1NzlkMVx1NThmM1x1NTRiM1x1NTNlZlx1NmUzNFx1NTE0Ylx1NTIzYlx1NWJhMlx1OGJmZVx1ODBhZlx1NTU0M1x1NTdhNlx1NjA3M1x1NTc1MVx1NTQyZFx1N2E3YVx1NjA1MFx1NWI1NFx1NjNhN1x1''@;'; put 'put ''NjJhMFx1NTNlM1x1NjI2M1x1NWJjN1x1NjdhZlx1NTRlZFx1N2E5Zlx1ODJlNlx1OTE3N1x1NWU5M1x1ODhlNFx1NTkzOFx1NTdhZVx1NjMwZVx1OGRlOFx1ODBlZlx1NTc1N1x1N2I3N1x1NGZhOVx1NWZlYlx1NWJiZFx1NmIzZVx1NTMyMVx1N2I1MFx1NzJjMlx1Njg0Nlx1NzdmZlx1Nzcz''@;'; put 'put ''Nlx1NjVmN1x1NTFiNVx1NGU4Zlx1NzZkNFx1NWNiZlx1N2FhNVx1ODQ3NVx1NTk0ZVx1OWI0MVx1NTA4MFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE5MV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTkxXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE5MV1bZ11dPTQ4ODk2K2cseVs0ODg5''@;'; put 'put ''NitnXT1fWzE5MV1bZ10pO2ZvcihfWzE5Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2U1ZVx1N2U1Zlx1N2U2MFx1N2U2MVx1N2U2Mlx1N2U2M1x1N2U2NFx1N2U2NVx1N2U2Nlx1N2U2N1x1N2U2OFx1N2U2OVx1N2U2YVx1N2U2''@;'; put 'put ''Ylx1N2U2Y1x1N2U2ZFx1N2U2ZVx1N2U2Zlx1N2U3MFx1N2U3MVx1N2U3Mlx1N2U3M1x1N2U3NFx1N2U3NVx1N2U3Nlx1N2U3N1x1N2U3OFx1N2U3OVx1N2U3YVx1N2U3Ylx1N2U3Y1x1N2U3ZFx1N2U3ZVx1N2U3Zlx1N2U4MFx1N2U4MVx1N2U4M1x1N2U4NFx1N2U4NVx1N2U4Nlx1N2U4N1x1''@;'; put 'put ''N2U4OFx1N2U4OVx1N2U4YVx1N2U4Ylx1N2U4Y1x1N2U4ZFx1N2U4ZVx1N2U4Zlx1N2U5MFx1N2U5MVx1N2U5Mlx1N2U5M1x1N2U5NFx1N2U5NVx1N2U5Nlx1N2U5N1x1N2U5OFx1N2U5OVx1N2U5YVx1N2U5Y1x1N2U5ZFx1N2U5ZVx1ZmZmZFx1N2VhZVx1N2ViNFx1N2ViYlx1N2ViY1x1N2Vk''@;'; put 'put ''Nlx1N2VlNFx1N2VlY1x1N2VmOVx1N2YwYVx1N2YxMFx1N2YxZVx1N2YzN1x1N2YzOVx1N2YzYlx1N2YzY1x1N2YzZFx1N2YzZVx1N2YzZlx1N2Y0MFx1N2Y0MVx1N2Y0M1x1N2Y0Nlx1N2Y0N1x1N2Y0OFx1N2Y0OVx1N2Y0YVx1N2Y0Ylx1N2Y0Y1x1N2Y0ZFx1N2Y0ZVx1N2Y0Zlx1N2Y1Mlx1''@;'; put 'put ''N2Y1M1x1OTk4OFx1NjEyN1x1NmU4M1x1NTc2NFx1NjYwNlx1NjM0Nlx1NTZmMFx1NjJlY1x1NjI2OVx1NWVkM1x1OTYxNFx1NTc4M1x1NjJjOVx1NTU4N1x1ODcyMVx1ODE0YVx1OGZhM1x1NTU2Nlx1ODNiMVx1Njc2NVx1OGQ1Nlx1ODRkZFx1NWE2YVx1NjgwZlx1NjJlNlx1N2JlZVx1OTYx''@;'; put 'put ''MVx1NTE3MFx1NmY5Y1x1OGMzMFx1NjNmZFx1ODljOFx1NjFkMlx1N2YwNlx1NzBjMlx1NmVlNVx1NzQwNVx1Njk5NFx1NzJmY1x1NWVjYVx1OTBjZVx1NjcxN1x1NmQ2YVx1NjM1ZVx1NTJiM1x1NzI2Mlx1ODAwMVx1NGY2Y1x1NTllNVx1OTE2YVx1NzBkOVx1NmQ5ZFx1NTJkMlx1NGU1MFx1''@;'; put 'put ''OTZmN1x1OTU2ZFx1ODU3ZVx1NzhjYVx1N2QyZlx1NTEyMVx1NTc5Mlx1NjRjMlx1ODA4Ylx1N2M3Ylx1NmNlYVx1NjhmMVx1Njk1ZVx1NTFiN1x1NTM5OFx1NjhhOFx1NzI4MVx1OWVjZVx1N2JmMVx1NzJmOFx1NzliYlx1NmYxM1x1NzQwNlx1Njc0ZVx1OTFjY1x1OWNhNFx1NzkzY1x1ODM4''@;'; put 'put ''OVx1ODM1NFx1NTQwZlx1NjgxN1x1NGUzZFx1NTM4OVx1NTJiMVx1NzgzZVx1NTM4Nlx1NTIyOVx1NTA4OFx1NGY4Ylx1NGZkMFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE5Ml0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTkyXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE5Ml1bZ11dPTQ5''@;'; put 'put ''MTUyK2cseVs0OTE1MitnXT1fWzE5Ml1bZ10pO2ZvcihfWzE5M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2Y1Nlx1N2Y1OVx1N2Y1Ylx1N2Y1Y1x1N2Y1ZFx1N2Y1ZVx1N2Y2MFx1N2Y2M1x1N2Y2NFx1N2Y2NVx1N2Y2Nlx1N2Y2''@;'; put 'put ''N1x1N2Y2Ylx1N2Y2Y1x1N2Y2ZFx1N2Y2Zlx1N2Y3MFx1N2Y3M1x1N2Y3NVx1N2Y3Nlx1N2Y3N1x1N2Y3OFx1N2Y3YVx1N2Y3Ylx1N2Y3Y1x1N2Y3ZFx1N2Y3Zlx1N2Y4MFx1N2Y4Mlx1N2Y4M1x1N2Y4NFx1N2Y4NVx1N2Y4Nlx1N2Y4N1x1N2Y4OFx1N2Y4OVx1N2Y4Ylx1N2Y4ZFx1N2Y4Zlx1''@;'; put 'put ''N2Y5MFx1N2Y5MVx1N2Y5Mlx1N2Y5M1x1N2Y5NVx1N2Y5Nlx1N2Y5N1x1N2Y5OFx1N2Y5OVx1N2Y5Ylx1N2Y5Y1x1N2ZhMFx1N2ZhMlx1N2ZhM1x1N2ZhNVx1N2ZhNlx1N2ZhOFx1N2ZhOVx1N2ZhYVx1N2ZhYlx1N2ZhY1x1N2ZhZFx1N2ZhZVx1N2ZiMVx1ZmZmZFx1N2ZiM1x1N2ZiNFx1N2Zi''@;'; put 'put ''NVx1N2ZiNlx1N2ZiN1x1N2ZiYVx1N2ZiYlx1N2ZiZVx1N2ZjMFx1N2ZjMlx1N2ZjM1x1N2ZjNFx1N2ZjNlx1N2ZjN1x1N2ZjOFx1N2ZjOVx1N2ZjYlx1N2ZjZFx1N2ZjZlx1N2ZkMFx1N2ZkMVx1N2ZkMlx1N2ZkM1x1N2ZkNlx1N2ZkN1x1N2ZkOVx1N2ZkYVx1N2ZkYlx1N2ZkY1x1N2ZkZFx1''@;'; put 'put ''N2ZkZVx1N2ZlMlx1N2ZlM1x1NzVlMlx1N2FjYlx1N2M5Mlx1NmNhNVx1OTZiNlx1NTI5Ylx1NzQ4M1x1NTRlOVx1NGZlOVx1ODA1NFx1ODNiMlx1OGZkZVx1OTU3MFx1NWVjOVx1NjAxY1x1NmQ5Zlx1NWUxOFx1NjU1Ylx1ODEzOFx1OTRmZVx1NjA0Ylx1NzBiY1x1N2VjM1x1N2NhZVx1NTFj''@;'; put 'put ''OVx1Njg4MVx1N2NiMVx1ODI2Zlx1NGUyNFx1OGY4Nlx1OTFjZlx1NjY3ZVx1NGVhZVx1OGMwNVx1NjRhOVx1ODA0YVx1NTBkYVx1NzU5N1x1NzFjZVx1NWJlNVx1OGZiZFx1NmY2Nlx1NGU4Nlx1NjQ4Mlx1OTU2M1x1NWVkNlx1NjU5OVx1NTIxN1x1ODhjMlx1NzBjOFx1NTJhM1x1NzMwZVx1''@;'; put 'put ''NzQzM1x1Njc5N1x1NzhmN1x1OTcxNlx1NGUzNFx1OTBiYlx1OWNkZVx1NmRjYlx1NTFkYlx1OGQ0MVx1NTQxZFx1NjJjZVx1NzNiMlx1ODNmMVx1OTZmNlx1OWY4NFx1OTRjM1x1NGYzNlx1N2Y5YVx1NTFjY1x1NzA3NVx1OTY3NVx1NWNhZFx1OTg4Nlx1NTNlNlx1NGVlNFx1NmU5Y1x1NzQw''@;'; put 'put ''OVx1NjliNFx1Nzg2Ylx1OTk4Zlx1NzU1OVx1NTIxOFx1NzYyNFx1NmQ0MVx1NjdmM1x1NTE2ZFx1OWY5OVx1ODA0Ylx1NTQ5OVx1N2IzY1x1N2FiZlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE5M10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTkzXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtf''@;'; put 'put ''WzE5M11bZ11dPTQ5NDA4K2cseVs0OTQwOCtnXT1fWzE5M11bZ10pO2ZvcihfWzE5NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2ZlNFx1N2ZlN1x1N2ZlOFx1N2ZlYVx1N2ZlYlx1N2ZlY1x1N2ZlZFx1N2ZlZlx1N2ZmMlx1N2Zm''@;'; put 'put ''NFx1N2ZmNVx1N2ZmNlx1N2ZmN1x1N2ZmOFx1N2ZmOVx1N2ZmYVx1N2ZmZFx1N2ZmZVx1N2ZmZlx1ODAwMlx1ODAwN1x1ODAwOFx1ODAwOVx1ODAwYVx1ODAwZVx1ODAwZlx1ODAxMVx1ODAxM1x1ODAxYVx1ODAxYlx1ODAxZFx1ODAxZVx1ODAxZlx1ODAyMVx1ODAyM1x1ODAyNFx1ODAyYlx1''@;'; put 'put ''ODAyY1x1ODAyZFx1ODAyZVx1ODAyZlx1ODAzMFx1ODAzMlx1ODAzNFx1ODAzOVx1ODAzYVx1ODAzY1x1ODAzZVx1ODA0MFx1ODA0MVx1ODA0NFx1ODA0NVx1ODA0N1x1ODA0OFx1ODA0OVx1ODA0ZVx1ODA0Zlx1ODA1MFx1ODA1MVx1ODA1M1x1ODA1NVx1ODA1Nlx1ODA1N1x1ZmZmZFx1ODA1''@;'; put 'put ''OVx1ODA1Ylx1ODA1Y1x1ODA1ZFx1ODA1ZVx1ODA1Zlx1ODA2MFx1ODA2MVx1ODA2Mlx1ODA2M1x1ODA2NFx1ODA2NVx1ODA2Nlx1ODA2N1x1ODA2OFx1ODA2Ylx1ODA2Y1x1ODA2ZFx1ODA2ZVx1ODA2Zlx1ODA3MFx1ODA3Mlx1ODA3M1x1ODA3NFx1ODA3NVx1ODA3Nlx1ODA3N1x1ODA3OFx1''@;'; put 'put ''ODA3OVx1ODA3YVx1ODA3Ylx1ODA3Y1x1ODA3ZFx1OTY4Nlx1NTc4NFx1NjJlMlx1OTY0N1x1Njk3Y1x1NWEwNFx1NjQwMlx1N2JkM1x1NmYwZlx1OTY0Ylx1ODJhNlx1NTM2Mlx1OTg4NVx1NWU5MFx1NzA4OVx1NjNiM1x1NTM2NFx1ODY0Zlx1OWM4MVx1OWU5M1x1Nzg4Y1x1OTczMlx1OGRl''@;'; put 'put ''Zlx1OGQ0Mlx1OWU3Zlx1NmY1ZVx1Nzk4NFx1NWY1NVx1OTY0Nlx1NjIyZVx1OWE3NFx1NTQxNVx1OTRkZFx1NGZhM1x1NjVjNVx1NWM2NVx1NWM2MVx1N2YxNVx1ODY1MVx1NmMyZlx1NWY4Ylx1NzM4N1x1NmVlNFx1N2VmZlx1NWNlNlx1NjMxYlx1NWI2YVx1NmVlNlx1NTM3NVx1NGU3MVx1''@;'; put 'put ''NjNhMFx1NzU2NVx1NjJhMVx1OGY2ZVx1NGYyNlx1NGVkMVx1NmNhNlx1N2ViNlx1OGJiYVx1ODQxZFx1ODdiYVx1N2Y1N1x1OTAzYlx1OTUyM1x1N2JhOVx1OWFhMVx1ODhmOFx1ODQzZFx1NmQxYlx1OWE4Nlx1N2VkY1x1NTk4OFx1OWViYlx1NzM5Ylx1NzgwMVx1ODY4Mlx1OWE2Y1x1OWE4''@;'; put 'put ''Mlx1NTYxYlx1NTQxN1x1NTdjYlx1NGU3MFx1OWVhNlx1NTM1Nlx1OGZjOFx1ODEwOVx1Nzc5Mlx1OTk5Mlx1ODZlZVx1NmVlMVx1ODUxM1x1NjZmY1x1NjE2Mlx1NmYyYlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE5NF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTk0XVtnXS5jaGFyQ29k''@;'; put 'put ''ZUF0KDApJiYoSVtfWzE5NF1bZ11dPTQ5NjY0K2cseVs0OTY2NCtnXT1fWzE5NF1bZ10pO2ZvcihfWzE5NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODA3ZVx1ODA4MVx1ODA4Mlx1ODA4NVx1ODA4OFx1ODA4YVx1ODA4ZFx1ODA4''@;'; put 'put ''ZVx1ODA4Zlx1ODA5MFx1ODA5MVx1ODA5Mlx1ODA5NFx1ODA5NVx1ODA5N1x1ODA5OVx1ODA5ZVx1ODBhM1x1ODBhNlx1ODBhN1x1ODBhOFx1ODBhY1x1ODBiMFx1ODBiM1x1ODBiNVx1ODBiNlx1ODBiOFx1ODBiOVx1ODBiYlx1ODBjNVx1ODBjN1x1ODBjOFx1ODBjOVx1ODBjYVx1ODBjYlx1''@;'; put 'put ''ODBjZlx1ODBkMFx1ODBkMVx1ODBkMlx1ODBkM1x1ODBkNFx1ODBkNVx1ODBkOFx1ODBkZlx1ODBlMFx1ODBlMlx1ODBlM1x1ODBlNlx1ODBlZVx1ODBmNVx1ODBmN1x1ODBmOVx1ODBmYlx1ODBmZVx1ODBmZlx1ODEwMFx1ODEwMVx1ODEwM1x1ODEwNFx1ODEwNVx1ODEwN1x1ODEwOFx1ODEw''@;'; put 'put ''Ylx1ZmZmZFx1ODEwY1x1ODExNVx1ODExN1x1ODExOVx1ODExYlx1ODExY1x1ODExZFx1ODExZlx1ODEyMFx1ODEyMVx1ODEyMlx1ODEyM1x1ODEyNFx1ODEyNVx1ODEyNlx1ODEyN1x1ODEyOFx1ODEyOVx1ODEyYVx1ODEyYlx1ODEyZFx1ODEyZVx1ODEzMFx1ODEzM1x1ODEzNFx1ODEzNVx1''@;'; put 'put ''ODEzN1x1ODEzOVx1ODEzYVx1ODEzYlx1ODEzY1x1ODEzZFx1ODEzZlx1OGMyOVx1ODI5Mlx1ODMyYlx1NzZmMlx1NmMxM1x1NWZkOVx1ODNiZFx1NzMyYlx1ODMwNVx1OTUxYVx1NmJkYlx1NzdkYlx1OTRjNlx1NTM2Zlx1ODMwMlx1NTE5Mlx1NWUzZFx1OGM4Y1x1OGQzOFx1NGU0OFx1NzNh''@;'; put 'put ''Ylx1Njc5YVx1Njg4NVx1OTE3Nlx1OTcwOVx1NzE2NFx1NmNhMVx1NzcwOVx1NWE5Mlx1OTU0MVx1NmJjZlx1N2Y4ZVx1NjYyN1x1NWJkMFx1NTliOVx1NWE5YVx1OTVlOFx1OTVmN1x1NGVlY1x1ODQwY1x1ODQ5OVx1NmFhY1x1NzZkZlx1OTUzMFx1NzMxYlx1NjhhNlx1NWI1Zlx1NzcyZlx1''@;'; put 'put ''OTE5YVx1OTc2MVx1N2NkY1x1OGZmN1x1OGMxY1x1NWYyNVx1N2M3M1x1NzlkOFx1ODljNVx1NmNjY1x1ODcxY1x1NWJjNlx1NWU0Mlx1NjhjOVx1NzcyMFx1N2VmNVx1NTE5NVx1NTE0ZFx1NTJjOVx1NWEyOVx1N2YwNVx1OTc2Mlx1ODJkN1x1NjNjZlx1Nzc4NFx1ODVkMFx1NzlkMlx1NmUz''@;'; put 'put ''YVx1NWU5OVx1NTk5OVx1ODUxMVx1NzA2ZFx1NmMxMVx1NjJiZlx1NzZiZlx1NjU0Zlx1NjBhZlx1OTVmZFx1NjYwZVx1ODc5Zlx1OWUyM1x1OTRlZFx1NTQwZFx1NTQ3ZFx1OGMyY1x1NjQ3OFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE5NV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTk1''@;'; put 'put ''XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE5NV1bZ11dPTQ5OTIwK2cseVs0OTkyMCtnXT1fWzE5NV1bZ10pO2ZvcihfWzE5Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODE0MFx1ODE0MVx1ODE0Mlx1ODE0M1x1ODE0NFx1ODE0''@;'; put 'put ''NVx1ODE0N1x1ODE0OVx1ODE0ZFx1ODE0ZVx1ODE0Zlx1ODE1Mlx1ODE1Nlx1ODE1N1x1ODE1OFx1ODE1Ylx1ODE1Y1x1ODE1ZFx1ODE1ZVx1ODE1Zlx1ODE2MVx1ODE2Mlx1ODE2M1x1ODE2NFx1ODE2Nlx1ODE2OFx1ODE2YVx1ODE2Ylx1ODE2Y1x1ODE2Zlx1ODE3Mlx1ODE3M1x1ODE3NVx1''@;'; put 'put ''ODE3Nlx1ODE3N1x1ODE3OFx1ODE4MVx1ODE4M1x1ODE4NFx1ODE4NVx1ODE4Nlx1ODE4N1x1ODE4OVx1ODE4Ylx1ODE4Y1x1ODE4ZFx1ODE4ZVx1ODE5MFx1ODE5Mlx1ODE5M1x1ODE5NFx1ODE5NVx1ODE5Nlx1ODE5N1x1ODE5OVx1ODE5YVx1ODE5ZVx1ODE5Zlx1ODFhMFx1ODFhMVx1ODFh''@;'; put 'put ''Mlx1ODFhNFx1ODFhNVx1ZmZmZFx1ODFhN1x1ODFhOVx1ODFhYlx1ODFhY1x1ODFhZFx1ODFhZVx1ODFhZlx1ODFiMFx1ODFiMVx1ODFiMlx1ODFiNFx1ODFiNVx1ODFiNlx1ODFiN1x1ODFiOFx1ODFiOVx1ODFiY1x1ODFiZFx1ODFiZVx1ODFiZlx1ODFjNFx1ODFjNVx1ODFjN1x1ODFjOFx1''@;'; put 'put ''ODFjOVx1ODFjYlx1ODFjZFx1ODFjZVx1ODFjZlx1ODFkMFx1ODFkMVx1ODFkMlx1ODFkM1x1NjQ3OVx1ODYxMVx1NmEyMVx1ODE5Y1x1NzhlOFx1NjQ2OVx1OWI1NFx1NjJiOVx1NjcyYlx1ODNhYlx1NThhOFx1OWVkOFx1NmNhYlx1NmYyMFx1NWJkZVx1OTY0Y1x1OGMwYlx1NzI1Zlx1Njdk''@;'; put 'put ''MFx1NjJjN1x1NzI2MVx1NGVhOVx1NTljNlx1NmJjZFx1NTg5M1x1NjZhZVx1NWU1NVx1NTJkZlx1NjE1NVx1NjcyOFx1NzZlZVx1Nzc2Nlx1NzI2N1x1N2E0Nlx1NjJmZlx1NTRlYVx1NTQ1MFx1OTRhMFx1OTBhM1x1NWExY1x1N2ViM1x1NmMxNlx1NGU0M1x1NTk3Nlx1ODAxMFx1NTk0OFx1''@;'; put 'put ''NTM1N1x1NzUzN1x1OTZiZVx1NTZjYVx1NjMyMFx1ODExMVx1NjA3Y1x1OTVmOVx1NmRkNlx1NTQ2Mlx1OTk4MVx1NTE4NVx1NWFlOVx1ODBmZFx1NTlhZVx1OTcxM1x1NTAyYVx1NmNlNVx1NWMzY1x1NjJkZlx1NGY2MFx1NTMzZlx1ODE3Ylx1OTAwNlx1NmViYVx1ODUyYlx1NjJjOFx1NWU3''@;'; put 'put ''NFx1NzhiZVx1NjRiNVx1NjM3Ylx1NWZmNVx1NWExOFx1OTE3Zlx1OWUxZlx1NWMzZlx1NjM0Zlx1ODA0Mlx1NWI3ZFx1NTU2ZVx1OTU0YVx1OTU0ZFx1NmQ4NVx1NjBhOFx1NjdlMFx1NzJkZVx1NTFkZFx1NWI4MVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE5Nl0ubGVuZ3RoOysrZyk2''@;'; put 'put ''NTUzMyE9PV9bMTk2XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE5Nl1bZ11dPTUwMTc2K2cseVs1MDE3NitnXT1fWzE5Nl1bZ10pO2ZvcihfWzE5N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODFkNFx1ODFkNVx1ODFkNlx1ODFk''@;'; put 'put ''N1x1ODFkOFx1ODFkOVx1ODFkYVx1ODFkYlx1ODFkY1x1ODFkZFx1ODFkZVx1ODFkZlx1ODFlMFx1ODFlMVx1ODFlMlx1ODFlNFx1ODFlNVx1ODFlNlx1ODFlOFx1ODFlOVx1ODFlYlx1ODFlZVx1ODFlZlx1ODFmMFx1ODFmMVx1ODFmMlx1ODFmNVx1ODFmNlx1ODFmN1x1ODFmOFx1ODFmOVx1''@;'; put 'put ''ODFmYVx1ODFmZFx1ODFmZlx1ODIwM1x1ODIwN1x1ODIwOFx1ODIwOVx1ODIwYVx1ODIwYlx1ODIwZVx1ODIwZlx1ODIxMVx1ODIxM1x1ODIxNVx1ODIxNlx1ODIxN1x1ODIxOFx1ODIxOVx1ODIxYVx1ODIxZFx1ODIyMFx1ODIyNFx1ODIyNVx1ODIyNlx1ODIyN1x1ODIyOVx1ODIyZVx1ODIz''@;'; put 'put ''Mlx1ODIzYVx1ODIzY1x1ODIzZFx1ODIzZlx1ZmZmZFx1ODI0MFx1ODI0MVx1ODI0Mlx1ODI0M1x1ODI0NVx1ODI0Nlx1ODI0OFx1ODI0YVx1ODI0Y1x1ODI0ZFx1ODI0ZVx1ODI1MFx1ODI1MVx1ODI1Mlx1ODI1M1x1ODI1NFx1ODI1NVx1ODI1Nlx1ODI1N1x1ODI1OVx1ODI1Ylx1ODI1Y1x1''@;'; put 'put ''ODI1ZFx1ODI1ZVx1ODI2MFx1ODI2MVx1ODI2Mlx1ODI2M1x1ODI2NFx1ODI2NVx1ODI2Nlx1ODI2N1x1ODI2OVx1NjJlN1x1NmNkZVx1NzI1Ylx1NjI2ZFx1OTRhZVx1N2ViZFx1ODExM1x1NmQ1M1x1NTE5Y1x1NWYwNFx1NTk3NFx1NTJhYVx1NjAxMlx1NTk3M1x1NjY5Nlx1ODY1MFx1NzU5''@;'; put 'put ''Zlx1NjMyYVx1NjFlNlx1N2NlZlx1OGJmYVx1NTRlNlx1NmIyN1x1OWUyNVx1NmJiNFx1ODVkNVx1NTQ1NVx1NTA3Nlx1NmNhNFx1NTU2YVx1OGRiNFx1NzIyY1x1NWUxNVx1NjAxNVx1NzQzNlx1NjJjZFx1NjM5Mlx1NzI0Y1x1NWY5OFx1NmU0M1x1NmQzZVx1NjUwMFx1NmY1OFx1NzZkOFx1''@;'; put 'put ''NzhkMFx1NzZmY1x1NzU1NFx1NTIyNFx1NTNkYlx1NGU1M1x1NWU5ZVx1NjVjMVx1ODAyYVx1ODBkNlx1NjI5Ylx1NTQ4Nlx1NTIyOFx1NzBhZVx1ODg4ZFx1OGRkMVx1NmNlMVx1NTQ3OFx1ODBkYVx1NTdmOVx1ODhmNFx1OGQ1NFx1OTY2YVx1OTE0ZFx1NGY2OVx1NmM5Ylx1NTViN1x1NzZj''@;'; put 'put ''Nlx1NzgzMFx1NjJhOFx1NzBmOVx1NmY4ZVx1NWY2ZFx1ODRlY1x1NjhkYVx1Nzg3Y1x1N2JmN1x1ODFhOFx1NjcwYlx1OWU0Zlx1NjM2N1x1NzhiMFx1NTc2Zlx1NzgxMlx1OTczOVx1NjI3OVx1NjJhYlx1NTI4OFx1NzQzNVx1NmJkN1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE5N10u''@;'; put 'put ''bGVuZ3RoOysrZyk2NTUzMyE9PV9bMTk3XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE5N11bZ11dPTUwNDMyK2cseVs1MDQzMitnXT1fWzE5N11bZ10pO2ZvcihfWzE5OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODI2YVx1ODI2''@;'; put 'put ''Ylx1ODI2Y1x1ODI2ZFx1ODI3MVx1ODI3NVx1ODI3Nlx1ODI3N1x1ODI3OFx1ODI3Ylx1ODI3Y1x1ODI4MFx1ODI4MVx1ODI4M1x1ODI4NVx1ODI4Nlx1ODI4N1x1ODI4OVx1ODI4Y1x1ODI5MFx1ODI5M1x1ODI5NFx1ODI5NVx1ODI5Nlx1ODI5YVx1ODI5Ylx1ODI5ZVx1ODJhMFx1ODJhMlx1''@;'; put 'put ''ODJhM1x1ODJhN1x1ODJiMlx1ODJiNVx1ODJiNlx1ODJiYVx1ODJiYlx1ODJiY1x1ODJiZlx1ODJjMFx1ODJjMlx1ODJjM1x1ODJjNVx1ODJjNlx1ODJjOVx1ODJkMFx1ODJkNlx1ODJkOVx1ODJkYVx1ODJkZFx1ODJlMlx1ODJlN1x1ODJlOFx1ODJlOVx1ODJlYVx1ODJlY1x1ODJlZFx1ODJl''@;'; put 'put ''ZVx1ODJmMFx1ODJmMlx1ODJmM1x1ODJmNVx1ODJmNlx1ODJmOFx1ZmZmZFx1ODJmYVx1ODJmY1x1ODJmZFx1ODJmZVx1ODJmZlx1ODMwMFx1ODMwYVx1ODMwYlx1ODMwZFx1ODMxMFx1ODMxMlx1ODMxM1x1ODMxNlx1ODMxOFx1ODMxOVx1ODMxZFx1ODMxZVx1ODMxZlx1ODMyMFx1ODMyMVx1''@;'; put 'put ''ODMyMlx1ODMyM1x1ODMyNFx1ODMyNVx1ODMyNlx1ODMyOVx1ODMyYVx1ODMyZVx1ODMzMFx1ODMzMlx1ODMzN1x1ODMzYlx1ODMzZFx1NTU2NFx1ODEzZVx1NzViMlx1NzZhZVx1NTMzOVx1NzVkZVx1NTBmYlx1NWM0MVx1OGI2Y1x1N2JjN1x1NTA0Zlx1NzI0N1x1OWE5N1x1OThkOFx1NmYw''@;'; put 'put ''Mlx1NzRlMlx1Nzk2OFx1NjQ4N1x1NzdhNVx1NjJmY1x1OTg5MVx1OGQyYlx1NTRjMVx1ODA1OFx1NGU1Mlx1NTc2YVx1ODJmOVx1ODQwZFx1NWU3M1x1NTFlZFx1NzRmNlx1OGJjNFx1NWM0Zlx1NTc2MVx1NmNmY1x1OTg4N1x1NWE0Nlx1NzgzNFx1OWI0NFx1OGZlYlx1N2M5NVx1NTI1Nlx1''@;'; put 'put ''NjI1MVx1OTRmYVx1NGVjNlx1ODM4Nlx1ODQ2MVx1ODNlOVx1ODRiMlx1NTdkNFx1NjczNFx1NTcwM1x1NjY2ZVx1NmQ2Nlx1OGMzMVx1NjZkZFx1NzAxMVx1NjcxZlx1NmIzYVx1NjgxNlx1NjIxYVx1NTliYlx1NGUwM1x1NTFjNFx1NmYwNlx1NjdkMlx1NmM4Zlx1NTE3Nlx1NjhjYlx1NTk0''@;'; put 'put ''N1x1NmI2N1x1NzU2Nlx1NWQwZVx1ODExMFx1OWY1MFx1NjVkN1x1Nzk0OFx1Nzk0MVx1OWE5MVx1OGQ3N1x1NWM4Mlx1NGU1ZVx1NGYwMVx1NTQyZlx1NTk1MVx1NzgwY1x1NTY2OFx1NmMxNFx1OGZjNFx1NWYwM1x1NmM3ZFx1NmNlM1x1OGJhYlx1NjM5MFx1ZmZmZCIuc3BsaXQoIiIpLGc9''@;'; put 'put ''MDtnIT1fWzE5OF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTk4XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE5OF1bZ11dPTUwNjg4K2cseVs1MDY4OCtnXT1fWzE5OF1bZ10pO2ZvcihfWzE5OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ODMzZVx1ODMzZlx1ODM0MVx1ODM0Mlx1ODM0NFx1ODM0NVx1ODM0OFx1ODM0YVx1ODM0Ylx1ODM0Y1x1ODM0ZFx1ODM0ZVx1ODM1M1x1ODM1NVx1ODM1Nlx1ODM1N1x1ODM1OFx1ODM1OVx1ODM1ZFx1ODM2Mlx1ODM3MFx1ODM3MVx1ODM3Mlx1ODM3M1x1ODM3NFx1ODM3NVx1ODM3Nlx1''@;'; put 'put ''ODM3OVx1ODM3YVx1ODM3ZVx1ODM3Zlx1ODM4MFx1ODM4MVx1ODM4Mlx1ODM4M1x1ODM4NFx1ODM4N1x1ODM4OFx1ODM4YVx1ODM4Ylx1ODM4Y1x1ODM4ZFx1ODM4Zlx1ODM5MFx1ODM5MVx1ODM5NFx1ODM5NVx1ODM5Nlx1ODM5N1x1ODM5OVx1ODM5YVx1ODM5ZFx1ODM5Zlx1ODNhMVx1ODNh''@;'; put 'put ''Mlx1ODNhM1x1ODNhNFx1ODNhNVx1ODNhNlx1ODNhN1x1ODNhY1x1ODNhZFx1ODNhZVx1ZmZmZFx1ODNhZlx1ODNiNVx1ODNiYlx1ODNiZVx1ODNiZlx1ODNjMlx1ODNjM1x1ODNjNFx1ODNjNlx1ODNjOFx1ODNjOVx1ODNjYlx1ODNjZFx1ODNjZVx1ODNkMFx1ODNkMVx1ODNkMlx1ODNkM1x1''@;'; put 'put ''ODNkNVx1ODNkN1x1ODNkOVx1ODNkYVx1ODNkYlx1ODNkZVx1ODNlMlx1ODNlM1x1ODNlNFx1ODNlNlx1ODNlN1x1ODNlOFx1ODNlYlx1ODNlY1x1ODNlZFx1NjA3MFx1NmQzZFx1NzI3NVx1NjI2Nlx1OTQ4ZVx1OTRjNVx1NTM0M1x1OGZjMVx1N2I3ZVx1NGVkZlx1OGMyNlx1NGU3ZVx1OWVk''@;'; put 'put ''NFx1OTRiMVx1OTRiM1x1NTI0ZFx1NmY1Y1x1OTA2M1x1NmQ0NVx1OGMzNFx1NTgxMVx1NWQ0Y1x1NmIyMFx1NmI0OVx1NjdhYVx1NTQ1Ylx1ODE1NFx1N2Y4Y1x1NTg5OVx1ODUzN1x1NWYzYVx1NjJhMlx1NmE0N1x1OTUzOVx1NjU3Mlx1NjA4NFx1Njg2NVx1NzdhN1x1NGU1NFx1NGZhOFx1''@;'; put 'put ''NWRlN1x1OTc5OFx1NjRhY1x1N2ZkOFx1NWNlZFx1NGZjZlx1N2E4ZFx1NTIwN1x1ODMwNFx1NGUxNFx1NjAyZlx1N2E4M1x1OTRhNlx1NGZiNVx1NGViMlx1NzllNlx1NzQzNFx1NTJlNFx1ODJiOVx1NjRkMlx1NzliZFx1NWJkZFx1NmM4MVx1OTc1Mlx1OGY3Ylx1NmMyMlx1NTAzZVx1NTM3''@;'; put 'put ''Zlx1NmUwNVx1NjRjZVx1NjY3NFx1NmMzMFx1NjBjNVx1OTg3N1x1OGJmN1x1NWU4Nlx1NzQzY1x1N2E3N1x1NzljYlx1NGUxOFx1OTBiMVx1NzQwM1x1NmM0Mlx1NTZkYVx1OTE0Ylx1NmNjNVx1OGQ4Ylx1NTMzYVx1ODZjNlx1NjZmMlx1OGVhZlx1NWM0OFx1OWE3MVx1NmUyMFx1ZmZmZCIu''@;'; put 'put ''c3BsaXQoIiIpLGc9MDtnIT1fWzE5OV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTk5XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE5OV1bZ11dPTUwOTQ0K2cseVs1MDk0NCtnXT1fWzE5OV1bZ10pO2ZvcihfWzIwMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ODNlZVx1ODNlZlx1ODNmM1x1ODNmNFx1ODNmNVx1ODNmNlx1ODNmN1x1ODNmYVx1ODNmYlx1ODNmY1x1ODNmZVx1ODNmZlx1ODQwMFx1ODQwMlx1ODQwNVx1ODQwN1x1ODQwOFx1ODQwOVx1ODQwYVx1ODQxMFx1ODQxMlx1ODQxM1x1ODQxNFx1ODQxNVx1ODQxNlx1''@;'; put 'put ''ODQxN1x1ODQxOVx1ODQxYVx1ODQxYlx1ODQxZVx1ODQxZlx1ODQyMFx1ODQyMVx1ODQyMlx1ODQyM1x1ODQyOVx1ODQyYVx1ODQyYlx1ODQyY1x1ODQyZFx1ODQyZVx1ODQyZlx1ODQzMFx1ODQzMlx1ODQzM1x1ODQzNFx1ODQzNVx1ODQzNlx1ODQzN1x1ODQzOVx1ODQzYVx1ODQzYlx1ODQz''@;'; put 'put ''ZVx1ODQzZlx1ODQ0MFx1ODQ0MVx1ODQ0Mlx1ODQ0M1x1ODQ0NFx1ODQ0NVx1ODQ0N1x1ODQ0OFx1ODQ0OVx1ZmZmZFx1ODQ0YVx1ODQ0Ylx1ODQ0Y1x1ODQ0ZFx1ODQ0ZVx1ODQ0Zlx1ODQ1MFx1ODQ1Mlx1ODQ1M1x1ODQ1NFx1ODQ1NVx1ODQ1Nlx1ODQ1OFx1ODQ1ZFx1ODQ1ZVx1ODQ1Zlx1''@;'; put 'put ''ODQ2MFx1ODQ2Mlx1ODQ2NFx1ODQ2NVx1ODQ2Nlx1ODQ2N1x1ODQ2OFx1ODQ2YVx1ODQ2ZVx1ODQ2Zlx1ODQ3MFx1ODQ3Mlx1ODQ3NFx1ODQ3N1x1ODQ3OVx1ODQ3Ylx1ODQ3Y1x1NTNkNlx1NWEzNlx1OWY4Ylx1OGRhM1x1NTNiYlx1NTcwOFx1OThhN1x1Njc0M1x1OTE5Ylx1NmNjOVx1NTE2''@;'; put 'put ''OFx1NzVjYVx1NjJmM1x1NzJhY1x1NTIzOFx1NTI5ZFx1N2YzYVx1NzA5NFx1NzYzOFx1NTM3NFx1OWU0YVx1NjliN1x1Nzg2ZVx1OTZjMFx1ODhkOVx1N2ZhNFx1NzEzNlx1NzFjM1x1NTE4OVx1NjdkM1x1NzRlNFx1NThlNFx1NjUxOFx1NTZiN1x1OGJhOVx1OTk3Nlx1NjI3MFx1N2VkNVx1''@;'; put 'put ''NjBmOVx1NzBlZFx1NThlY1x1NGVjMVx1NGViYVx1NWZjZFx1OTdlN1x1NGVmYlx1OGJhNFx1NTIwM1x1NTk4YVx1N2VhYlx1NjI1NFx1NGVjZFx1NjVlNVx1NjIwZVx1ODMzOFx1ODRjOVx1ODM2M1x1ODc4ZFx1NzE5NFx1NmViNlx1NWJiOVx1N2VkMlx1NTE5N1x1NjNjOVx1NjdkNFx1ODA4''@;'; put 'put ''OVx1ODMzOVx1ODgxNVx1NTExMlx1NWI3YVx1NTk4Mlx1OGZiMVx1NGU3M1x1NmM1ZFx1NTE2NVx1ODkyNVx1OGY2Zlx1OTYyZVx1ODU0YVx1NzQ1ZVx1OTUxMFx1OTVmMFx1NmRhNlx1ODJlNVx1NWYzMVx1NjQ5Mlx1NmQxMlx1ODQyOFx1ODE2ZVx1OWNjM1x1NTg1ZVx1OGQ1Ylx1NGUwOVx1''@;'; put 'put ''NTNjMVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIwMF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjAwXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIwMF1bZ11dPTUxMjAwK2cseVs1MTIwMCtnXT1fWzIwMF1bZ10pO2ZvcihfWzIwMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODQ3ZFx1ODQ3ZVx1ODQ3Zlx1ODQ4MFx1ODQ4MVx1ODQ4M1x1ODQ4NFx1ODQ4NVx1ODQ4Nlx1ODQ4YVx1ODQ4ZFx1ODQ4Zlx1ODQ5MFx1ODQ5MVx1ODQ5Mlx1ODQ5M1x1ODQ5NFx1ODQ5NVx1ODQ5Nlx1ODQ5OFx1ODQ5YVx1ODQ5Ylx1ODQ5ZFx1''@;'; put 'put ''ODQ5ZVx1ODQ5Zlx1ODRhMFx1ODRhMlx1ODRhM1x1ODRhNFx1ODRhNVx1ODRhNlx1ODRhN1x1ODRhOFx1ODRhOVx1ODRhYVx1ODRhYlx1ODRhY1x1ODRhZFx1ODRhZVx1ODRiMFx1ODRiMVx1ODRiM1x1ODRiNVx1ODRiNlx1ODRiN1x1ODRiYlx1ODRiY1x1ODRiZVx1ODRjMFx1ODRjMlx1ODRj''@;'; put 'put ''M1x1ODRjNVx1ODRjNlx1ODRjN1x1ODRjOFx1ODRjYlx1ODRjY1x1ODRjZVx1ODRjZlx1ODRkMlx1ODRkNFx1ODRkNVx1ODRkN1x1ZmZmZFx1ODRkOFx1ODRkOVx1ODRkYVx1ODRkYlx1ODRkY1x1ODRkZVx1ODRlMVx1ODRlMlx1ODRlNFx1ODRlN1x1ODRlOFx1ODRlOVx1ODRlYVx1ODRlYlx1''@;'; put 'put ''ODRlZFx1ODRlZVx1ODRlZlx1ODRmMVx1ODRmMlx1ODRmM1x1ODRmNFx1ODRmNVx1ODRmNlx1ODRmN1x1ODRmOFx1ODRmOVx1ODRmYVx1ODRmYlx1ODRmZFx1ODRmZVx1ODUwMFx1ODUwMVx1ODUwMlx1NGYxZVx1NjU2M1x1Njg1MVx1NTVkM1x1NGUyN1x1NjQxNFx1OWE5YVx1NjI2Ylx1NWFj''@;'; put 'put ''Mlx1NzQ1Zlx1ODI3Mlx1NmRhOVx1NjhlZVx1NTBlN1x1ODM4ZVx1NzgwMlx1Njc0MFx1NTIzOVx1NmM5OVx1N2ViMVx1NTBiYlx1NTU2NVx1NzE1ZVx1N2I1Ylx1NjY1Mlx1NzNjYVx1ODJlYlx1Njc0OVx1NWM3MVx1NTIyMFx1NzE3ZFx1ODg2Ylx1OTVlYVx1OTY1NVx1NjRjNVx1OGQ2MVx1''@;'; put 'put ''ODFiM1x1NTU4NFx1NmM1NVx1NjI0N1x1N2YyZVx1NTg5Mlx1NGYyNFx1NTU0Nlx1OGQ0Zlx1NjY0Y1x1NGUwYVx1NWMxYVx1ODhmM1x1NjhhMlx1NjM0ZVx1N2EwZFx1NzBlN1x1ODI4ZFx1NTJmYVx1OTdmNlx1NWMxMVx1NTRlOFx1OTBiNVx1N2VjZFx1NTk2Mlx1OGQ0YVx1ODZjN1x1ODIw''@;'; put 'put ''Y1x1ODIwZFx1OGQ2Nlx1NjQ0NFx1NWMwNFx1NjE1MVx1NmQ4OVx1NzkzZVx1OGJiZVx1NzgzN1x1NzUzM1x1NTQ3Ylx1NGYzOFx1OGVhYlx1NmRmMVx1NWEyMFx1N2VjNVx1Nzk1ZVx1NmM4OFx1NWJhMVx1NWE3Nlx1NzUxYVx1ODBiZVx1NjE0ZVx1NmUxN1x1NThmMFx1NzUxZlx1NzUyNVx1''@;'; put 'put ''NzI3Mlx1NTM0N1x1N2VmM1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIwMV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjAxXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIwMV1bZ11dPTUxNDU2K2cseVs1MTQ1NitnXT1fWzIwMV1bZ10pO2ZvcihfWzIwMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODUwM1x1ODUwNFx1ODUwNVx1ODUwNlx1ODUwN1x1ODUwOFx1ODUwOVx1ODUwYVx1ODUwYlx1ODUwZFx1ODUwZVx1ODUwZlx1ODUxMFx1ODUxMlx1ODUxNFx1ODUxNVx1ODUxNlx1ODUxOFx1ODUxOVx1ODUxYlx1ODUxY1x1''@;'; put 'put ''ODUxZFx1ODUxZVx1ODUyMFx1ODUyMlx1ODUyM1x1ODUyNFx1ODUyNVx1ODUyNlx1ODUyN1x1ODUyOFx1ODUyOVx1ODUyYVx1ODUyZFx1ODUyZVx1ODUyZlx1ODUzMFx1ODUzMVx1ODUzMlx1ODUzM1x1ODUzNFx1ODUzNVx1ODUzNlx1ODUzZVx1ODUzZlx1ODU0MFx1ODU0MVx1ODU0Mlx1ODU0''@;'; put 'put ''NFx1ODU0NVx1ODU0Nlx1ODU0N1x1ODU0Ylx1ODU0Y1x1ODU0ZFx1ODU0ZVx1ODU0Zlx1ODU1MFx1ODU1MVx1ODU1Mlx1ODU1M1x1ODU1NFx1ODU1NVx1ZmZmZFx1ODU1N1x1ODU1OFx1ODU1YVx1ODU1Ylx1ODU1Y1x1ODU1ZFx1ODU1Zlx1ODU2MFx1ODU2MVx1ODU2Mlx1ODU2M1x1ODU2NVx1''@;'; put 'put ''ODU2Nlx1ODU2N1x1ODU2OVx1ODU2YVx1ODU2Ylx1ODU2Y1x1ODU2ZFx1ODU2ZVx1ODU2Zlx1ODU3MFx1ODU3MVx1ODU3M1x1ODU3NVx1ODU3Nlx1ODU3N1x1ODU3OFx1ODU3Y1x1ODU3ZFx1ODU3Zlx1ODU4MFx1ODU4MVx1NzcwMVx1NzZkYlx1NTI2OVx1ODBkY1x1NTcyM1x1NWUwOFx1NTkz''@;'; put 'put ''MVx1NzJlZVx1NjViZFx1NmU3Zlx1OGJkN1x1NWMzOFx1ODY3MVx1NTM0MVx1NzdmM1x1NjJmZVx1NjVmNlx1NGVjMFx1OThkZlx1ODY4MFx1NWI5ZVx1OGJjNlx1NTNmMlx1NzdlMlx1NGY3Zlx1NWM0ZVx1OWE3Nlx1NTljYlx1NWYwZlx1NzkzYVx1NThlYlx1NGUxNlx1NjdmZlx1NGU4Ylx1''@;'; put 'put ''NjJlZFx1OGE5M1x1OTAxZFx1NTJiZlx1NjYyZlx1NTVkY1x1NTY2Y1x1OTAwMlx1NGVkNVx1NGY4ZFx1OTFjYVx1OTk3MFx1NmMwZlx1NWUwMlx1NjA0M1x1NWJhNFx1ODljNlx1OGJkNVx1NjUzNlx1NjI0Ylx1OTk5Nlx1NWI4OFx1NWJmZlx1NjM4OFx1NTUyZVx1NTNkN1x1NzYyNlx1NTE3''@;'; put 'put ''ZFx1ODUyY1x1NjdhMlx1NjhiM1x1NmI4YVx1NjI5Mlx1OGY5M1x1NTNkNFx1ODIxMlx1NmRkMVx1NzU4Zlx1NGU2Nlx1OGQ0ZVx1NWI3MFx1NzE5Zlx1ODVhZlx1NjY5MVx1NjZkOVx1N2Y3Mlx1ODcwMFx1OWVjZFx1OWYyMFx1NWM1ZVx1NjcyZlx1OGZmMFx1NjgxMVx1Njc1Zlx1NjIwZFx1''@;'; put 'put ''N2FkNlx1NTg4NVx1NWViNlx1NjU3MFx1NmYzMVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIwMl0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjAyXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIwMl1bZ11dPTUxNzEyK2cseVs1MTcxMitnXT1fWzIwMl1bZ10pO2ZvcihfWzIwM109Ilx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODU4Mlx1ODU4M1x1ODU4Nlx1ODU4OFx1ODU4OVx1ODU4YVx1ODU4Ylx1ODU4Y1x1ODU4ZFx1ODU4ZVx1ODU5MFx1ODU5MVx1ODU5Mlx1ODU5M1x1ODU5NFx1ODU5NVx1ODU5Nlx1ODU5N1x1ODU5OFx1''@;'; put 'put ''ODU5OVx1ODU5YVx1ODU5ZFx1ODU5ZVx1ODU5Zlx1ODVhMFx1ODVhMVx1ODVhMlx1ODVhM1x1ODVhNVx1ODVhNlx1ODVhN1x1ODVhOVx1ODVhYlx1ODVhY1x1ODVhZFx1ODViMVx1ODViMlx1ODViM1x1ODViNFx1ODViNVx1ODViNlx1ODViOFx1ODViYVx1ODViYlx1ODViY1x1ODViZFx1ODVi''@;'; put 'put ''ZVx1ODViZlx1ODVjMFx1ODVjMlx1ODVjM1x1ODVjNFx1ODVjNVx1ODVjNlx1ODVjN1x1ODVjOFx1ODVjYVx1ODVjYlx1ODVjY1x1ODVjZFx1ODVjZVx1ODVkMVx1ODVkMlx1ZmZmZFx1ODVkNFx1ODVkNlx1ODVkN1x1ODVkOFx1ODVkOVx1ODVkYVx1ODVkYlx1ODVkZFx1ODVkZVx1ODVkZlx1''@;'; put 'put ''ODVlMFx1ODVlMVx1ODVlMlx1ODVlM1x1ODVlNVx1ODVlNlx1ODVlN1x1ODVlOFx1ODVlYVx1ODVlYlx1ODVlY1x1ODVlZFx1ODVlZVx1ODVlZlx1ODVmMFx1ODVmMVx1ODVmMlx1ODVmM1x1ODVmNFx1ODVmNVx1ODVmNlx1ODVmN1x1ODVmOFx1NjA1NVx1NTIzN1x1ODAwZFx1NjQ1NFx1ODg3''@;'; put 'put ''MFx1NzUyOVx1NWUwNVx1NjgxM1x1NjJmNFx1OTcxY1x1NTNjY1x1NzIzZFx1OGMwMVx1NmMzNFx1Nzc2MVx1N2EwZVx1NTQyZVx1NzdhY1x1OTg3YVx1ODIxY1x1OGJmNFx1Nzg1NVx1NjcxNFx1NzBjMVx1NjVhZlx1NjQ5NVx1NTYzNlx1NjAxZFx1NzljMVx1NTNmOFx1NGUxZFx1NmI3Ylx1''@;'; put 'put ''ODA4Nlx1NWJmYVx1NTVlM1x1NTZkYlx1NGYzYVx1NGYzY1x1OTk3Mlx1NWRmM1x1Njc3ZVx1ODAzOFx1NjAwMlx1OTg4Mlx1OTAwMVx1NWI4Ylx1OGJiY1x1OGJmNVx1NjQxY1x1ODI1OFx1NjRkZVx1NTVmZFx1ODJjZlx1OTE2NVx1NGZkN1x1N2QyMFx1OTAxZlx1N2M5Zlx1NTBmM1x1NTg1''@;'; put 'put ''MVx1NmVhZlx1NWJiZlx1OGJjOVx1ODA4M1x1OTE3OFx1ODQ5Y1x1N2I5N1x1ODY3ZFx1OTY4Ylx1OTY4Zlx1N2VlNVx1OWFkM1x1Nzg4ZVx1NWM4MVx1N2E1N1x1OTA0Mlx1OTZhN1x1Nzk1Zlx1NWI1OVx1NjM1Zlx1N2IwYlx1ODRkMVx1NjhhZFx1NTUwNlx1N2YyOVx1NzQxMFx1N2QyMlx1''@;'; put 'put ''OTUwMVx1NjI0MFx1NTg0Y1x1NGVkNlx1NWI4M1x1NTk3OVx1NTg1NFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIwM10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjAzXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIwM11bZ11dPTUxOTY4K2cseVs1MTk2OCtnXT1fWzIwM11bZ10pO2Zvcihf''@;'; put 'put ''WzIwNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODVmOVx1ODVmYVx1ODVmY1x1ODVmZFx1ODVmZVx1ODYwMFx1ODYwMVx1ODYwMlx1ODYwM1x1ODYwNFx1ODYwNlx1ODYwN1x1ODYwOFx1ODYwOVx1ODYwYVx1ODYwYlx1ODYwY1x1''@;'; put 'put ''ODYwZFx1ODYwZVx1ODYwZlx1ODYxMFx1ODYxMlx1ODYxM1x1ODYxNFx1ODYxNVx1ODYxN1x1ODYxOFx1ODYxOVx1ODYxYVx1ODYxYlx1ODYxY1x1ODYxZFx1ODYxZVx1ODYxZlx1ODYyMFx1ODYyMVx1ODYyMlx1ODYyM1x1ODYyNFx1ODYyNVx1ODYyNlx1ODYyOFx1ODYyYVx1ODYyYlx1ODYy''@;'; put 'put ''Y1x1ODYyZFx1ODYyZVx1ODYyZlx1ODYzMFx1ODYzMVx1ODYzMlx1ODYzM1x1ODYzNFx1ODYzNVx1ODYzNlx1ODYzN1x1ODYzOVx1ODYzYVx1ODYzYlx1ODYzZFx1ODYzZVx1ODYzZlx1ODY0MFx1ZmZmZFx1ODY0MVx1ODY0Mlx1ODY0M1x1ODY0NFx1ODY0NVx1ODY0Nlx1ODY0N1x1ODY0OFx1''@;'; put 'put ''ODY0OVx1ODY0YVx1ODY0Ylx1ODY0Y1x1ODY1Mlx1ODY1M1x1ODY1NVx1ODY1Nlx1ODY1N1x1ODY1OFx1ODY1OVx1ODY1Ylx1ODY1Y1x1ODY1ZFx1ODY1Zlx1ODY2MFx1ODY2MVx1ODY2M1x1ODY2NFx1ODY2NVx1ODY2Nlx1ODY2N1x1ODY2OFx1ODY2OVx1ODY2YVx1NzM2ZFx1NjMxZVx1OGU0''@;'; put 'put ''Ylx1OGUwZlx1ODBjZVx1ODJkNFx1NjJhY1x1NTNmMFx1NmNmMFx1OTE1ZVx1NTkyYVx1NjAwMVx1NmM3MFx1NTc0ZFx1NjQ0YVx1OGQyYVx1NzYyYlx1NmVlOVx1NTc1Ylx1NmE4MFx1NzVmMFx1NmY2ZFx1OGMyZFx1OGMwOFx1NTc2Nlx1NmJlZlx1ODg5Mlx1NzhiM1x1NjNhMlx1NTNmOVx1''@;'; put 'put ''NzBhZFx1NmM2NFx1NTg1OFx1NjQyYVx1NTgwMlx1NjhlMFx1ODE5Ylx1NTUxMFx1N2NkNlx1NTAxOFx1OGViYVx1NmRjY1x1OGQ5Zlx1NzBlYlx1NjM4Zlx1NmQ5Ylx1NmVkNFx1N2VlNlx1ODQwNFx1Njg0M1x1OTAwM1x1NmRkOFx1OTY3Nlx1OGJhOFx1NTk1N1x1NzI3OVx1ODVlNFx1ODE3''@;'; put 'put ''ZVx1NzViY1x1OGE4YVx1NjhhZlx1NTI1NFx1OGUyMlx1OTUxMVx1NjNkMFx1OTg5OFx1OGU0NFx1NTU3Y1x1NGY1M1x1NjZmZlx1NTY4Zlx1NjBkNVx1NmQ5NVx1NTI0M1x1NWM0OVx1NTkyOVx1NmRmYlx1NTg2Ylx1NzUzMFx1NzUxY1x1NjA2Y1x1ODIxNFx1ODE0Nlx1NjMxMVx1Njc2MVx1''@;'; put 'put ''OGZlMlx1NzczYVx1OGRmM1x1OGQzNFx1OTRjMVx1NWUxNlx1NTM4NVx1NTQyY1x1NzBjM1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIwNF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjA0XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIwNF1bZ11dPTUyMjI0K2cseVs1MjIyNCtnXT1fWzIw''@;'; put 'put ''NF1bZ10pO2ZvcihfWzIwNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODY2ZFx1ODY2Zlx1ODY3MFx1ODY3Mlx1ODY3M1x1ODY3NFx1ODY3NVx1ODY3Nlx1ODY3N1x1ODY3OFx1ODY4M1x1ODY4NFx1ODY4NVx1ODY4Nlx1ODY4N1x1''@;'; put 'put ''ODY4OFx1ODY4OVx1ODY4ZVx1ODY4Zlx1ODY5MFx1ODY5MVx1ODY5Mlx1ODY5NFx1ODY5Nlx1ODY5N1x1ODY5OFx1ODY5OVx1ODY5YVx1ODY5Ylx1ODY5ZVx1ODY5Zlx1ODZhMFx1ODZhMVx1ODZhMlx1ODZhNVx1ODZhNlx1ODZhYlx1ODZhZFx1ODZhZVx1ODZiMlx1ODZiM1x1ODZiN1x1ODZi''@;'; put 'put ''OFx1ODZiOVx1ODZiYlx1ODZiY1x1ODZiZFx1ODZiZVx1ODZiZlx1ODZjMVx1ODZjMlx1ODZjM1x1ODZjNVx1ODZjOFx1ODZjY1x1ODZjZFx1ODZkMlx1ODZkM1x1ODZkNVx1ODZkNlx1ODZkN1x1ODZkYVx1ODZkY1x1ZmZmZFx1ODZkZFx1ODZlMFx1ODZlMVx1ODZlMlx1ODZlM1x1ODZlNVx1''@;'; put 'put ''ODZlNlx1ODZlN1x1ODZlOFx1ODZlYVx1ODZlYlx1ODZlY1x1ODZlZlx1ODZmNVx1ODZmNlx1ODZmN1x1ODZmYVx1ODZmYlx1ODZmY1x1ODZmZFx1ODZmZlx1ODcwMVx1ODcwNFx1ODcwNVx1ODcwNlx1ODcwYlx1ODcwY1x1ODcwZVx1ODcwZlx1ODcxMFx1ODcxMVx1ODcxNFx1ODcxNlx1NmM0''@;'; put 'put ''MFx1NWVmN1x1NTA1Y1x1NGVhZFx1NWVhZFx1NjMzYVx1ODI0N1x1OTAxYVx1Njg1MFx1OTE2ZVx1NzdiM1x1NTQwY1x1OTRkY1x1NWY2NFx1N2FlNVx1Njg3Nlx1NjM0NVx1N2I1Mlx1N2VkZlx1NzVkYlx1NTA3N1x1NjI5NVx1NTkzNFx1OTAwZlx1NTFmOFx1NzljM1x1N2E4MVx1NTZmZVx1''@;'; put 'put ''NWY5Mlx1OTAxNFx1NmQ4Mlx1NWM2MFx1NTcxZlx1NTQxMFx1NTE1NFx1NmU0ZFx1NTZlMlx1NjNhOFx1OTg5M1x1ODE3Zlx1ODcxNVx1ODkyYVx1OTAwMFx1NTQxZVx1NWM2Zlx1ODFjMFx1NjJkNlx1NjI1OFx1ODEzMVx1OWUzNVx1OTY0MFx1OWE2ZVx1OWE3Y1x1NjkyZFx1NTlhNVx1NjJk''@;'; put 'put ''M1x1NTUzZVx1NjMxNlx1NTRjN1x1ODZkOVx1NmQzY1x1NWEwM1x1NzRlNlx1ODg5Y1x1NmI2YVx1NTkxNlx1OGM0Y1x1NWYyZlx1NmU3ZVx1NzNhOVx1OTg3ZFx1NGUzOFx1NzBmN1x1NWI4Y1x1Nzg5N1x1NjMzZFx1NjY1YVx1NzY5Nlx1NjBjYlx1NWI5Ylx1NWE0OVx1NGUwN1x1ODE1NVx1''@;'; put 'put ''NmM2YVx1NzM4Ylx1NGVhMVx1Njc4OVx1N2Y1MVx1NWY4MFx1NjVmYVx1NjcxYlx1NWZkOFx1NTk4NFx1NWEwMVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIwNV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjA1XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIwNV1bZ11dPTUyNDgwK2cseVs1''@;'; put 'put ''MjQ4MCtnXT1fWzIwNV1bZ10pO2ZvcihfWzIwNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODcxOVx1ODcxYlx1ODcxZFx1ODcxZlx1ODcyMFx1ODcyNFx1ODcyNlx1ODcyN1x1ODcyOFx1ODcyYVx1ODcyYlx1ODcyY1x1ODcyZFx1''@;'; put 'put ''ODcyZlx1ODczMFx1ODczMlx1ODczM1x1ODczNVx1ODczNlx1ODczOFx1ODczOVx1ODczYVx1ODczY1x1ODczZFx1ODc0MFx1ODc0MVx1ODc0Mlx1ODc0M1x1ODc0NFx1ODc0NVx1ODc0Nlx1ODc0YVx1ODc0Ylx1ODc0ZFx1ODc0Zlx1ODc1MFx1ODc1MVx1ODc1Mlx1ODc1NFx1ODc1NVx1ODc1''@;'; put 'put ''Nlx1ODc1OFx1ODc1YVx1ODc1Ylx1ODc1Y1x1ODc1ZFx1ODc1ZVx1ODc1Zlx1ODc2MVx1ODc2Mlx1ODc2Nlx1ODc2N1x1ODc2OFx1ODc2OVx1ODc2YVx1ODc2Ylx1ODc2Y1x1ODc2ZFx1ODc2Zlx1ODc3MVx1ODc3Mlx1ODc3M1x1ODc3NVx1ZmZmZFx1ODc3N1x1ODc3OFx1ODc3OVx1ODc3YVx1''@;'; put 'put ''ODc3Zlx1ODc4MFx1ODc4MVx1ODc4NFx1ODc4Nlx1ODc4N1x1ODc4OVx1ODc4YVx1ODc4Y1x1ODc4ZVx1ODc4Zlx1ODc5MFx1ODc5MVx1ODc5Mlx1ODc5NFx1ODc5NVx1ODc5Nlx1ODc5OFx1ODc5OVx1ODc5YVx1ODc5Ylx1ODc5Y1x1ODc5ZFx1ODc5ZVx1ODdhMFx1ODdhMVx1ODdhMlx1ODdh''@;'; put 'put ''M1x1ODdhNFx1NWRjZFx1NWZhZVx1NTM3MVx1OTdlNlx1OGZkZFx1Njg0NVx1NTZmNFx1NTUyZlx1NjBkZlx1NGUzYVx1NmY0ZFx1N2VmNFx1ODJjN1x1ODQwZVx1NTlkNFx1NGYxZlx1NGYyYVx1NWMzZVx1N2VhY1x1NjcyYVx1ODUxYVx1NTQ3M1x1NzU0Zlx1ODBjM1x1NTU4Mlx1OWI0Zlx1''@;'; put 'put ''NGY0ZFx1NmUyZFx1OGMxM1x1NWMwOVx1NjE3MFx1NTM2Ylx1NzYxZlx1NmUyOVx1ODY4YVx1NjU4N1x1OTVmYlx1N2ViOVx1NTQzYlx1N2EzM1x1N2QwYVx1OTVlZVx1NTVlMVx1N2ZjMVx1NzRlZVx1NjMxZFx1ODcxN1x1NmRhMVx1N2E5ZFx1NjIxMVx1NjVhMVx1NTM2N1x1NjNlMVx1NmM4''@;'; put 'put ''M1x1NWRlYlx1NTQ1Y1x1OTRhOFx1NGU0Y1x1NmM2MVx1OGJlY1x1NWM0Ylx1NjVlMFx1ODI5Y1x1NjhhN1x1NTQzZVx1NTQzNFx1NmJjYlx1NmI2Nlx1NGU5NFx1NjM0Mlx1NTM0OFx1ODIxZVx1NGYwZFx1NGZhZVx1NTc1ZVx1NjIwYVx1OTZmZVx1NjY2NFx1NzI2OVx1NTJmZlx1NTJhMVx1''@;'; put 'put ''NjA5Zlx1OGJlZlx1NjYxNFx1NzE5OVx1Njc5MFx1ODk3Zlx1Nzg1Mlx1NzdmZFx1NjY3MFx1NTYzYlx1NTQzOFx1OTUyMVx1NzI3YVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIwNl0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjA2XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIwNl1bZ11d''@;'; put 'put ''PTUyNzM2K2cseVs1MjczNitnXT1fWzIwNl1bZ10pO2ZvcihfWzIwN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODdhNVx1ODdhNlx1ODdhN1x1ODdhOVx1ODdhYVx1ODdhZVx1ODdiMFx1ODdiMVx1ODdiMlx1ODdiNFx1ODdiNlx1''@;'; put 'put ''ODdiN1x1ODdiOFx1ODdiOVx1ODdiYlx1ODdiY1x1ODdiZVx1ODdiZlx1ODdjMVx1ODdjMlx1ODdjM1x1ODdjNFx1ODdjNVx1ODdjN1x1ODdjOFx1ODdjOVx1ODdjY1x1ODdjZFx1ODdjZVx1ODdjZlx1ODdkMFx1ODdkNFx1ODdkNVx1ODdkNlx1ODdkN1x1ODdkOFx1ODdkOVx1ODdkYVx1ODdk''@;'; put 'put ''Y1x1ODdkZFx1ODdkZVx1ODdkZlx1ODdlMVx1ODdlMlx1ODdlM1x1ODdlNFx1ODdlNlx1ODdlN1x1ODdlOFx1ODdlOVx1ODdlYlx1ODdlY1x1ODdlZFx1ODdlZlx1ODdmMFx1ODdmMVx1ODdmMlx1ODdmM1x1ODdmNFx1ODdmNVx1ODdmNlx1ODdmN1x1ODdmOFx1ZmZmZFx1ODdmYVx1ODdmYlx1''@;'; put 'put ''ODdmY1x1ODdmZFx1ODdmZlx1ODgwMFx1ODgwMVx1ODgwMlx1ODgwNFx1ODgwNVx1ODgwNlx1ODgwN1x1ODgwOFx1ODgwOVx1ODgwYlx1ODgwY1x1ODgwZFx1ODgwZVx1ODgwZlx1ODgxMFx1ODgxMVx1ODgxMlx1ODgxNFx1ODgxN1x1ODgxOFx1ODgxOVx1ODgxYVx1ODgxY1x1ODgxZFx1ODgx''@;'; put 'put ''ZVx1ODgxZlx1ODgyMFx1ODgyM1x1N2EwMFx1NjA2Zlx1NWUwY1x1NjA4OVx1ODE5ZFx1NTkxNVx1NjBkY1x1NzE4NFx1NzBlZlx1NmVhYVx1NmM1MFx1NzI4MFx1NmE4NFx1ODhhZFx1NWUyZFx1NGU2MFx1NWFiM1x1NTU5Y1x1OTRlM1x1NmQxN1x1N2NmYlx1OTY5OVx1NjIwZlx1N2VjNlx1''@;'; put 'put ''Nzc4ZVx1ODY3ZVx1NTMyM1x1OTcxZVx1OGY5Nlx1NjY4N1x1NWNlMVx1NGZhMFx1NzJlZFx1NGUwYlx1NTNhNlx1NTkwZlx1NTQxM1x1NjM4MFx1OTUyOFx1NTE0OFx1NGVkOVx1OWM5Y1x1N2VhNFx1NTRiOFx1OGQyNFx1ODg1NFx1ODIzN1x1OTVmMlx1NmQ4ZVx1NWYyNlx1NWFjY1x1NjYz''@;'; put 'put ''ZVx1OTY2OVx1NzNiMFx1NzMyZVx1NTNiZlx1ODE3YVx1OTk4NVx1N2ZhMVx1NWJhYVx1OTY3N1x1OTY1MFx1N2ViZlx1NzZmOFx1NTNhMlx1OTU3Nlx1OTk5OVx1N2JiMVx1ODk0NFx1NmU1OFx1NGU2MVx1N2ZkNFx1Nzk2NVx1OGJlNlx1NjBmM1x1NTRjZFx1NGVhYlx1OTg3OVx1NWRmN1x1''@;'; put 'put ''NmE2MVx1NTBjZlx1NTQxMVx1OGM2MVx1ODQyN1x1Nzg1ZFx1OTcwNFx1NTI0YVx1NTRlZVx1NTZhM1x1OTUwMFx1NmQ4OFx1NWJiNVx1NmRjNlx1NjY1M1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIwN10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjA3XVtnXS5jaGFyQ29kZUF0KDApJiYo''@;'; put 'put ''SVtfWzIwN11bZ11dPTUyOTkyK2cseVs1Mjk5MitnXT1fWzIwN11bZ10pO2ZvcihfWzIwOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODgyNFx1ODgyNVx1ODgyNlx1ODgyN1x1ODgyOFx1ODgyOVx1ODgyYVx1ODgyYlx1ODgyY1x1''@;'; put 'put ''ODgyZFx1ODgyZVx1ODgyZlx1ODgzMFx1ODgzMVx1ODgzM1x1ODgzNFx1ODgzNVx1ODgzNlx1ODgzN1x1ODgzOFx1ODgzYVx1ODgzYlx1ODgzZFx1ODgzZVx1ODgzZlx1ODg0MVx1ODg0Mlx1ODg0M1x1ODg0Nlx1ODg0N1x1ODg0OFx1ODg0OVx1ODg0YVx1ODg0Ylx1ODg0ZVx1ODg0Zlx1ODg1''@;'; put 'put ''MFx1ODg1MVx1ODg1Mlx1ODg1M1x1ODg1NVx1ODg1Nlx1ODg1OFx1ODg1YVx1ODg1Ylx1ODg1Y1x1ODg1ZFx1ODg1ZVx1ODg1Zlx1ODg2MFx1ODg2Nlx1ODg2N1x1ODg2YVx1ODg2ZFx1ODg2Zlx1ODg3MVx1ODg3M1x1ODg3NFx1ODg3NVx1ODg3Nlx1ODg3OFx1ODg3OVx1ODg3YVx1ZmZmZFx1''@;'; put 'put ''ODg3Ylx1ODg3Y1x1ODg4MFx1ODg4M1x1ODg4Nlx1ODg4N1x1ODg4OVx1ODg4YVx1ODg4Y1x1ODg4ZVx1ODg4Zlx1ODg5MFx1ODg5MVx1ODg5M1x1ODg5NFx1ODg5NVx1ODg5N1x1ODg5OFx1ODg5OVx1ODg5YVx1ODg5Ylx1ODg5ZFx1ODg5ZVx1ODg5Zlx1ODhhMFx1ODhhMVx1ODhhM1x1ODhh''@;'; put 'put ''NVx1ODhhNlx1ODhhN1x1ODhhOFx1ODhhOVx1ODhhYVx1NWMwZlx1NWI1ZFx1NjgyMVx1ODA5Nlx1NTU3OFx1N2IxMVx1NjU0OFx1Njk1NFx1NGU5Ylx1NmI0N1x1ODc0ZVx1OTc4Ylx1NTM0Zlx1NjMxZlx1NjQzYVx1OTBhYVx1NjU5Y1x1ODBjMVx1OGMxMFx1NTE5OVx1NjhiMFx1NTM3OFx1''@;'; put 'put ''ODdmOVx1NjFjOFx1NmNjNFx1NmNmYlx1OGMyMlx1NWM1MVx1ODVhYVx1ODJhZlx1OTUwY1x1NmIyM1x1OGY5Ylx1NjViMFx1NWZmYlx1NWZjM1x1NGZlMVx1ODg0NVx1NjYxZlx1ODE2NVx1NzMyOVx1NjBmYVx1NTE3NFx1NTIxMVx1NTc4Ylx1NWY2Mlx1OTBhMlx1ODg0Y1x1OTE5Mlx1NWU3''@;'; put 'put ''OFx1Njc0Zlx1NjAyN1x1NTlkM1x1NTE0NFx1NTFmNlx1ODBmOFx1NTMwOFx1NmM3OVx1OTZjNFx1NzE4YVx1NGYxMVx1NGZlZVx1N2Y5ZVx1NjczZFx1NTVjNVx1OTUwOFx1NzljMFx1ODg5Nlx1N2VlM1x1NTg5Zlx1NjIwY1x1OTcwMFx1ODY1YVx1NTYxOFx1OTg3Ylx1NWY5MFx1OGJiOFx1''@;'; put 'put ''ODRjNFx1OTE1N1x1NTNkOVx1NjVlZFx1NWU4Zlx1NzU1Y1x1NjA2NFx1N2Q2ZVx1NWE3Zlx1N2VlYVx1N2VlZFx1OGY2OVx1NTVhN1x1NWJhM1x1NjBhY1x1NjVjYlx1NzM4NFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIwOF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjA4XVtnXS5jaGFy''@;'; put 'put ''Q29kZUF0KDApJiYoSVtfWzIwOF1bZ11dPTUzMjQ4K2cseVs1MzI0OCtnXT1fWzIwOF1bZ10pO2ZvcihfWzIwOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODhhY1x1ODhhZVx1ODhhZlx1ODhiMFx1ODhiMlx1ODhiM1x1ODhiNFx1''@;'; put 'put ''ODhiNVx1ODhiNlx1ODhiOFx1ODhiOVx1ODhiYVx1ODhiYlx1ODhiZFx1ODhiZVx1ODhiZlx1ODhjMFx1ODhjM1x1ODhjNFx1ODhjN1x1ODhjOFx1ODhjYVx1ODhjYlx1ODhjY1x1ODhjZFx1ODhjZlx1ODhkMFx1ODhkMVx1ODhkM1x1ODhkNlx1ODhkN1x1ODhkYVx1ODhkYlx1ODhkY1x1ODhk''@;'; put 'put ''ZFx1ODhkZVx1ODhlMFx1ODhlMVx1ODhlNlx1ODhlN1x1ODhlOVx1ODhlYVx1ODhlYlx1ODhlY1x1ODhlZFx1ODhlZVx1ODhlZlx1ODhmMlx1ODhmNVx1ODhmNlx1ODhmN1x1ODhmYVx1ODhmYlx1ODhmZFx1ODhmZlx1ODkwMFx1ODkwMVx1ODkwM1x1ODkwNFx1ODkwNVx1ODkwNlx1ODkwN1x1''@;'; put 'put ''ODkwOFx1ZmZmZFx1ODkwOVx1ODkwYlx1ODkwY1x1ODkwZFx1ODkwZVx1ODkwZlx1ODkxMVx1ODkxNFx1ODkxNVx1ODkxNlx1ODkxN1x1ODkxOFx1ODkxY1x1ODkxZFx1ODkxZVx1ODkxZlx1ODkyMFx1ODkyMlx1ODkyM1x1ODkyNFx1ODkyNlx1ODkyN1x1ODkyOFx1ODkyOVx1ODkyY1x1ODky''@;'; put 'put ''ZFx1ODkyZVx1ODkyZlx1ODkzMVx1ODkzMlx1ODkzM1x1ODkzNVx1ODkzN1x1OTAwOVx1NzY2M1x1NzcyOVx1N2VkYVx1OTc3NFx1ODU5Ylx1NWI2Nlx1N2E3NFx1OTZlYVx1ODg0MFx1NTJjYlx1NzE4Zlx1NWZhYVx1NjVlY1x1OGJlMlx1NWJmYlx1OWE2Zlx1NWRlMVx1NmI4OVx1NmM1Ylx1''@;'; put 'put ''OGJhZFx1OGJhZlx1OTAwYVx1OGZjNVx1NTM4Ylx1NjJiY1x1OWUyNlx1OWUyZFx1NTQ0MFx1NGUyYlx1ODJiZFx1NzI1OVx1ODY5Y1x1NWQxNlx1ODg1OVx1NmRhZlx1OTZjNVx1NTRkMVx1NGU5YVx1OGJiNlx1NzEwOVx1NTRiZFx1OTYwOVx1NzBkZlx1NmRmOVx1NzZkMFx1NGUyNVx1Nzgx''@;'; put 'put ''NFx1ODcxMlx1NWNhOVx1NWVmNlx1OGEwMFx1OTg5Y1x1OTYwZVx1NzA4ZVx1NmNiZlx1NTk0NFx1NjNhOVx1NzczY1x1ODg0ZFx1NmYxNFx1ODI3M1x1NTgzMFx1NzFkNVx1NTM4Y1x1NzgxYVx1OTZjMVx1NTUwMVx1NWY2Nlx1NzEzMFx1NWJiNFx1OGMxYVx1OWE4Y1x1NmI4M1x1NTkyZVx1''@;'; put 'put ''OWUyZlx1NzllN1x1Njc2OFx1NjI2Y1x1NGY2Zlx1NzVhMVx1N2Y4YVx1NmQwYlx1OTYzM1x1NmMyN1x1NGVmMFx1NzVkMlx1NTE3Ylx1NjgzN1x1NmYzZVx1OTA4MFx1ODE3MFx1NTk5Nlx1NzQ3Nlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIwOV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9b''@;'; put 'put ''MjA5XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIwOV1bZ11dPTUzNTA0K2cseVs1MzUwNCtnXT1fWzIwOV1bZ10pO2ZvcihfWzIxMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODkzOFx1ODkzOVx1ODkzYVx1ODkzYlx1ODkzY1x1''@;'; put 'put ''ODkzZFx1ODkzZVx1ODkzZlx1ODk0MFx1ODk0Mlx1ODk0M1x1ODk0NVx1ODk0Nlx1ODk0N1x1ODk0OFx1ODk0OVx1ODk0YVx1ODk0Ylx1ODk0Y1x1ODk0ZFx1ODk0ZVx1ODk0Zlx1ODk1MFx1ODk1MVx1ODk1Mlx1ODk1M1x1ODk1NFx1ODk1NVx1ODk1Nlx1ODk1N1x1ODk1OFx1ODk1OVx1ODk1''@;'; put 'put ''YVx1ODk1Ylx1ODk1Y1x1ODk1ZFx1ODk2MFx1ODk2MVx1ODk2Mlx1ODk2M1x1ODk2NFx1ODk2NVx1ODk2N1x1ODk2OFx1ODk2OVx1ODk2YVx1ODk2Ylx1ODk2Y1x1ODk2ZFx1ODk2ZVx1ODk2Zlx1ODk3MFx1ODk3MVx1ODk3Mlx1ODk3M1x1ODk3NFx1ODk3NVx1ODk3Nlx1ODk3N1x1ODk3OFx1''@;'; put 'put ''ODk3OVx1ODk3YVx1ODk3Y1x1ZmZmZFx1ODk3ZFx1ODk3ZVx1ODk4MFx1ODk4Mlx1ODk4NFx1ODk4NVx1ODk4N1x1ODk4OFx1ODk4OVx1ODk4YVx1ODk4Ylx1ODk4Y1x1ODk4ZFx1ODk4ZVx1ODk4Zlx1ODk5MFx1ODk5MVx1ODk5Mlx1ODk5M1x1ODk5NFx1ODk5NVx1ODk5Nlx1ODk5N1x1ODk5''@;'; put 'put ''OFx1ODk5OVx1ODk5YVx1ODk5Ylx1ODk5Y1x1ODk5ZFx1ODk5ZVx1ODk5Zlx1ODlhMFx1ODlhMVx1NjQ0N1x1NWMyN1x1OTA2NVx1N2E5MVx1OGMyM1x1NTlkYVx1NTRhY1x1ODIwMFx1ODM2Zlx1ODk4MVx1ODAwMFx1NjkzMFx1NTY0ZVx1ODAzNlx1NzIzN1x1OTFjZVx1NTFiNlx1NGU1Zlx1''@;'; put 'put ''OTg3NVx1NjM5Nlx1NGUxYVx1NTNmNlx1NjZmM1x1ODE0Ylx1NTkxY1x1NmRiMlx1NGUwMFx1NThmOVx1NTMzYlx1NjNkNlx1OTRmMVx1NGY5ZFx1NGYwYVx1ODg2M1x1OTg5MFx1NTkzN1x1OTA1N1x1NzlmYlx1NGVlYVx1ODBmMFx1NzU5MVx1NmM4Mlx1NWI5Y1x1NTllOFx1NWY1ZFx1Njkw''@;'; put 'put ''NVx1ODY4MVx1NTAxYVx1NWRmMlx1NGU1OVx1NzdlM1x1NGVlNVx1ODI3YVx1NjI5MVx1NjYxM1x1OTA5MVx1NWM3OVx1NGViZlx1NWY3OVx1ODFjNlx1OTAzOFx1ODA4NFx1NzVhYlx1NGVhNlx1ODhkNFx1NjEwZlx1NmJjNVx1NWZjNlx1NGU0OVx1NzZjYVx1NmVhMlx1OGJlM1x1OGJhZVx1''@;'; put 'put ''OGMwYVx1OGJkMVx1NWYwMlx1N2ZmY1x1N2ZjY1x1N2VjZVx1ODMzNVx1ODM2Ylx1NTZlMFx1NmJiN1x1OTdmM1x1OTYzNFx1NTlmYlx1NTQxZlx1OTRmNlx1NmRlYlx1NWJjNVx1OTk2ZVx1NWMzOVx1NWYxNVx1OTY5MFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIxMF0ubGVuZ3RoOysr''@;'; put 'put ''Zyk2NTUzMyE9PV9bMjEwXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIxMF1bZ11dPTUzNzYwK2cseVs1Mzc2MCtnXT1fWzIxMF1bZ10pO2ZvcihfWzIxMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODlhMlx1ODlhM1x1ODlhNFx1''@;'; put 'put ''ODlhNVx1ODlhNlx1ODlhN1x1ODlhOFx1ODlhOVx1ODlhYVx1ODlhYlx1ODlhY1x1ODlhZFx1ODlhZVx1ODlhZlx1ODliMFx1ODliMVx1ODliMlx1ODliM1x1ODliNFx1ODliNVx1ODliNlx1ODliN1x1ODliOFx1ODliOVx1ODliYVx1ODliYlx1ODliY1x1ODliZFx1ODliZVx1ODliZlx1ODlj''@;'; put 'put ''MFx1ODljM1x1ODljZFx1ODlkM1x1ODlkNFx1ODlkNVx1ODlkN1x1ODlkOFx1ODlkOVx1ODlkYlx1ODlkZFx1ODlkZlx1ODllMFx1ODllMVx1ODllMlx1ODllNFx1ODllN1x1ODllOFx1ODllOVx1ODllYVx1ODllY1x1ODllZFx1ODllZVx1ODlmMFx1ODlmMVx1ODlmMlx1ODlmNFx1ODlmNVx1''@;'; put 'put ''ODlmNlx1ODlmN1x1ODlmOFx1ODlmOVx1ODlmYVx1ZmZmZFx1ODlmYlx1ODlmY1x1ODlmZFx1ODlmZVx1ODlmZlx1OGEwMVx1OGEwMlx1OGEwM1x1OGEwNFx1OGEwNVx1OGEwNlx1OGEwOFx1OGEwOVx1OGEwYVx1OGEwYlx1OGEwY1x1OGEwZFx1OGEwZVx1OGEwZlx1OGExMFx1OGExMVx1OGEx''@;'; put 'put ''Mlx1OGExM1x1OGExNFx1OGExNVx1OGExNlx1OGExN1x1OGExOFx1OGExOVx1OGExYVx1OGExYlx1OGExY1x1OGExZFx1NTM3MFx1ODJmMVx1NmEzMVx1NWE3NFx1OWU3MFx1NWU5NFx1N2YyOFx1ODNiOVx1ODQyNFx1ODQyNVx1ODM2N1x1ODc0N1x1OGZjZVx1OGQ2Mlx1NzZjOFx1NWY3MVx1''@;'; put 'put ''OTg5Nlx1Nzg2Y1x1NjYyMFx1NTRkZlx1NjJlNVx1NGY2M1x1ODFjM1x1NzVjOFx1NWViOFx1OTZjZFx1OGUwYVx1ODZmOVx1NTQ4Zlx1NmNmM1x1NmQ4Y1x1NmMzOFx1NjA3Zlx1NTJjN1x1NzUyOFx1NWU3ZFx1NGYxOFx1NjBhMFx1NWZlN1x1NWMyNFx1NzUzMVx1OTBhZVx1OTRjMFx1NzJi''@;'; put 'put ''OVx1NmNiOVx1NmUzOFx1OTE0OVx1NjcwOVx1NTNjYlx1NTNmM1x1NGY1MVx1OTFjOVx1OGJmMVx1NTNjOFx1NWU3Y1x1OGZjMlx1NmRlNFx1NGU4ZVx1NzZjMlx1Njk4Nlx1ODY1ZVx1NjExYVx1ODIwNlx1NGY1OVx1NGZkZVx1OTAzZVx1OWM3Y1x1NjEwOVx1NmUxZFx1NmUxNFx1OTY4NVx1''@;'; put 'put ''NGU4OFx1NWEzMVx1OTZlOFx1NGUwZVx1NWM3Zlx1NzliOVx1NWI4N1x1OGJlZFx1N2ZiZFx1NzM4OVx1NTdkZlx1ODI4Ylx1OTBjMVx1NTQwMVx1OTA0N1x1NTViYlx1NWNlYVx1NWZhMVx1NjEwOFx1NmIzMlx1NzJmMVx1ODBiMlx1OGE4OVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIx''@;'; put 'put ''MV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjExXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIxMV1bZ11dPTU0MDE2K2cseVs1NDAxNitnXT1fWzIxMV1bZ10pO2ZvcihfWzIxMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGExZVx1''@;'; put 'put ''OGExZlx1OGEyMFx1OGEyMVx1OGEyMlx1OGEyM1x1OGEyNFx1OGEyNVx1OGEyNlx1OGEyN1x1OGEyOFx1OGEyOVx1OGEyYVx1OGEyYlx1OGEyY1x1OGEyZFx1OGEyZVx1OGEyZlx1OGEzMFx1OGEzMVx1OGEzMlx1OGEzM1x1OGEzNFx1OGEzNVx1OGEzNlx1OGEzN1x1OGEzOFx1OGEzOVx1OGEz''@;'; put 'put ''YVx1OGEzYlx1OGEzY1x1OGEzZFx1OGEzZlx1OGE0MFx1OGE0MVx1OGE0Mlx1OGE0M1x1OGE0NFx1OGE0NVx1OGE0Nlx1OGE0N1x1OGE0OVx1OGE0YVx1OGE0Ylx1OGE0Y1x1OGE0ZFx1OGE0ZVx1OGE0Zlx1OGE1MFx1OGE1MVx1OGE1Mlx1OGE1M1x1OGE1NFx1OGE1NVx1OGE1Nlx1OGE1N1x1''@;'; put 'put ''OGE1OFx1OGE1OVx1OGE1YVx1OGE1Ylx1OGE1Y1x1OGE1ZFx1OGE1ZVx1ZmZmZFx1OGE1Zlx1OGE2MFx1OGE2MVx1OGE2Mlx1OGE2M1x1OGE2NFx1OGE2NVx1OGE2Nlx1OGE2N1x1OGE2OFx1OGE2OVx1OGE2YVx1OGE2Ylx1OGE2Y1x1OGE2ZFx1OGE2ZVx1OGE2Zlx1OGE3MFx1OGE3MVx1OGE3''@;'; put 'put ''Mlx1OGE3M1x1OGE3NFx1OGE3NVx1OGE3Nlx1OGE3N1x1OGE3OFx1OGE3YVx1OGE3Ylx1OGE3Y1x1OGE3ZFx1OGE3ZVx1OGE3Zlx1OGE4MFx1NmQ3NFx1NWJkM1x1ODhkNVx1OTg4NFx1OGM2Ylx1OWE2ZFx1OWUzM1x1NmUwYVx1NTFhNFx1NTE0M1x1NTdhM1x1ODg4MVx1NTM5Zlx1NjNmNFx1''@;'; put 'put ''OGY5NVx1NTZlZFx1NTQ1OFx1NTcwNlx1NzMzZlx1NmU5MFx1N2YxOFx1OGZkY1x1ODJkMVx1NjEzZlx1NjAyOFx1OTY2Mlx1NjZmMFx1N2VhNlx1OGQ4YVx1OGRjM1x1OTRhNVx1NWNiM1x1N2NhNFx1NjcwOFx1NjBhNlx1OTYwNVx1ODAxOFx1NGU5MVx1OTBlN1x1NTMwMFx1OTY2OFx1NTE0''@;'; put 'put ''MVx1OGZkMFx1ODU3NFx1OTE1ZFx1NjY1NVx1OTdmNVx1NWI1NVx1NTMxZFx1NzgzOFx1Njc0Mlx1NjgzZFx1NTRjOVx1NzA3ZVx1NWJiMFx1OGY3ZFx1NTE4ZFx1NTcyOFx1NTRiMVx1NjUxMlx1NjY4Mlx1OGQ1ZVx1OGQ0M1x1ODEwZlx1ODQ2Y1x1OTA2ZFx1N2NkZlx1NTFmZlx1ODVmYlx1''@;'; put 'put ''NjdhM1x1NjVlOVx1NmZhMVx1ODZhNFx1OGU4MVx1NTY2YVx1OTAyMFx1NzY4Mlx1NzA3Nlx1NzFlNVx1OGQyM1x1NjJlOVx1NTIxOVx1NmNmZFx1OGQzY1x1NjAwZVx1NTg5ZVx1NjE4ZVx1NjZmZVx1OGQ2MFx1NjI0ZVx1NTViM1x1NmUyM1x1NjcyZFx1OGY2N1x1ZmZmZCIuc3BsaXQoIiIp''@;'; put 'put ''LGc9MDtnIT1fWzIxMl0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjEyXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIxMl1bZ11dPTU0MjcyK2cseVs1NDI3MitnXT1fWzIxMl1bZ10pO2ZvcihfWzIxM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1OGE4MVx1OGE4Mlx1OGE4M1x1OGE4NFx1OGE4NVx1OGE4Nlx1OGE4N1x1OGE4OFx1OGE4Ylx1OGE4Y1x1OGE4ZFx1OGE4ZVx1OGE4Zlx1OGE5MFx1OGE5MVx1OGE5Mlx1OGE5NFx1OGE5NVx1OGE5Nlx1OGE5N1x1OGE5OFx1OGE5OVx1OGE5YVx1OGE5Ylx1OGE5Y1x1OGE5ZFx1OGE5''@;'; put 'put ''ZVx1OGE5Zlx1OGFhMFx1OGFhMVx1OGFhMlx1OGFhM1x1OGFhNFx1OGFhNVx1OGFhNlx1OGFhN1x1OGFhOFx1OGFhOVx1OGFhYVx1OGFhYlx1OGFhY1x1OGFhZFx1OGFhZVx1OGFhZlx1OGFiMFx1OGFiMVx1OGFiMlx1OGFiM1x1OGFiNFx1OGFiNVx1OGFiNlx1OGFiN1x1OGFiOFx1OGFiOVx1''@;'; put 'put ''OGFiYVx1OGFiYlx1OGFiY1x1OGFiZFx1OGFiZVx1OGFiZlx1OGFjMFx1OGFjMVx1OGFjMlx1ZmZmZFx1OGFjM1x1OGFjNFx1OGFjNVx1OGFjNlx1OGFjN1x1OGFjOFx1OGFjOVx1OGFjYVx1OGFjYlx1OGFjY1x1OGFjZFx1OGFjZVx1OGFjZlx1OGFkMFx1OGFkMVx1OGFkMlx1OGFkM1x1OGFk''@;'; put 'put ''NFx1OGFkNVx1OGFkNlx1OGFkN1x1OGFkOFx1OGFkOVx1OGFkYVx1OGFkYlx1OGFkY1x1OGFkZFx1OGFkZVx1OGFkZlx1OGFlMFx1OGFlMVx1OGFlMlx1OGFlM1x1OTRlMVx1OTVmOFx1NzcyOFx1NjgwNVx1NjlhOFx1NTQ4Ylx1NGU0ZFx1NzBiOFx1OGJjOFx1NjQ1OFx1NjU4Ylx1NWI4NVx1''@;'; put 'put ''N2E4NFx1NTAzYVx1NWJlOFx1NzdiYlx1NmJlMVx1OGE3OVx1N2M5OFx1NmNiZVx1NzZjZlx1NjVhOVx1OGY5N1x1NWQyZFx1NWM1NVx1ODYzOFx1NjgwOFx1NTM2MFx1NjIxOFx1N2FkOVx1NmU1Ylx1N2VmZFx1NmExZlx1N2FlMFx1NWY3MFx1NmYzM1x1NWYyMFx1NjM4Y1x1NmRhOFx1Njc1''@;'; put 'put ''Nlx1NGUwOFx1NWUxMFx1OGQyNlx1NGVkN1x1ODBjMFx1NzYzNFx1OTY5Y1x1NjJkYlx1NjYyZFx1NjI3ZVx1NmNiY1x1OGQ3NVx1NzE2N1x1N2Y2OVx1NTE0Nlx1ODA4N1x1NTNlY1x1OTA2ZVx1NjI5OFx1NTRmMlx1ODZmMFx1OGY5OVx1ODAwNVx1OTUxN1x1ODUxN1x1OGZkOVx1NmQ1OVx1''@;'; put 'put ''NzNjZFx1NjU5Zlx1NzcxZlx1NzUwNFx1NzgyN1x1ODFmYlx1OGQxZVx1OTQ4OFx1NGZhNlx1Njc5NVx1NzViOVx1OGJjYVx1OTcwN1x1NjMyZlx1OTU0N1x1OTYzNVx1ODRiOFx1NjMyM1x1Nzc0MVx1NWY4MVx1NzJmMFx1NGU4OVx1NjAxNFx1NjU3NFx1NjJlZlx1NmI2M1x1NjUzZlx1ZmZm''@;'; put 'put ''ZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIxM10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjEzXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIxM11bZ11dPTU0NTI4K2cseVs1NDUyOCtnXT1fWzIxM11bZ10pO2ZvcihfWzIxNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1OGFlNFx1OGFlNVx1OGFlNlx1OGFlN1x1OGFlOFx1OGFlOVx1OGFlYVx1OGFlYlx1OGFlY1x1OGFlZFx1OGFlZVx1OGFlZlx1OGFmMFx1OGFmMVx1OGFmMlx1OGFmM1x1OGFmNFx1OGFmNVx1OGFmNlx1OGFmN1x1OGFmOFx1OGFmOVx1OGFmYVx1OGFmYlx1OGFm''@;'; put 'put ''Y1x1OGFmZFx1OGFmZVx1OGFmZlx1OGIwMFx1OGIwMVx1OGIwMlx1OGIwM1x1OGIwNFx1OGIwNVx1OGIwNlx1OGIwOFx1OGIwOVx1OGIwYVx1OGIwYlx1OGIwY1x1OGIwZFx1OGIwZVx1OGIwZlx1OGIxMFx1OGIxMVx1OGIxMlx1OGIxM1x1OGIxNFx1OGIxNVx1OGIxNlx1OGIxN1x1OGIxOFx1''@;'; put 'put ''OGIxOVx1OGIxYVx1OGIxYlx1OGIxY1x1OGIxZFx1OGIxZVx1OGIxZlx1OGIyMFx1OGIyMVx1OGIyMlx1OGIyM1x1ZmZmZFx1OGIyNFx1OGIyNVx1OGIyN1x1OGIyOFx1OGIyOVx1OGIyYVx1OGIyYlx1OGIyY1x1OGIyZFx1OGIyZVx1OGIyZlx1OGIzMFx1OGIzMVx1OGIzMlx1OGIzM1x1OGIz''@;'; put 'put ''NFx1OGIzNVx1OGIzNlx1OGIzN1x1OGIzOFx1OGIzOVx1OGIzYVx1OGIzYlx1OGIzY1x1OGIzZFx1OGIzZVx1OGIzZlx1OGI0MFx1OGI0MVx1OGI0Mlx1OGI0M1x1OGI0NFx1OGI0NVx1NWUyN1x1NzVjN1x1OTBkMVx1OGJjMVx1ODI5ZFx1Njc5ZFx1NjUyZlx1NTQzMVx1ODcxOFx1NzdlNVx1''@;'; put 'put ''ODBhMlx1ODEwMlx1NmM0MVx1NGU0Ylx1N2VjN1x1ODA0Y1x1NzZmNFx1NjkwZFx1NmI5Nlx1NjI2N1x1NTAzY1x1NGY4NFx1NTc0MFx1NjMwN1x1NmI2Mlx1OGRiZVx1NTNlYVx1NjVlOFx1N2ViOFx1NWZkN1x1NjMxYVx1NjNiN1x1ODFmM1x1ODFmNFx1N2Y2ZVx1NWUxY1x1NWNkOVx1NTIz''@;'; put 'put ''Nlx1NjY3YVx1NzllOVx1N2ExYVx1OGQyOFx1NzA5OVx1NzVkNFx1NmVkZVx1NmNiYlx1N2E5Mlx1NGUyZFx1NzZjNVx1NWZlMFx1OTQ5Zlx1ODg3N1x1N2VjOFx1NzljZFx1ODBiZlx1OTFjZFx1NGVmMlx1NGYxN1x1ODIxZlx1NTQ2OFx1NWRkZVx1NmQzMlx1OGJjY1x1N2NhNVx1OGY3NFx1''@;'; put 'put ''ODA5OFx1NWUxYVx1NTQ5Mlx1NzZiMVx1NWI5OVx1NjYzY1x1OWFhNFx1NzNlMFx1NjgyYVx1ODZkYlx1NjczMVx1NzMyYVx1OGJmOFx1OGJkYlx1OTAxMFx1N2FmOVx1NzBkYlx1NzE2ZVx1NjJjNFx1NzdhOVx1NTYzMVx1NGUzYlx1ODQ1N1x1NjdmMVx1NTJhOVx1ODZjMFx1OGQyZVx1OTRm''@;'; put 'put ''OFx1N2I1MVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIxNF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjE0XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIxNF1bZ11dPTU0Nzg0K2cseVs1NDc4NCtnXT1fWzIxNF1bZ10pO2ZvcihfWzIxNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGI0Nlx1OGI0N1x1OGI0OFx1OGI0OVx1OGI0YVx1OGI0Ylx1OGI0Y1x1OGI0ZFx1OGI0ZVx1OGI0Zlx1OGI1MFx1OGI1MVx1OGI1Mlx1OGI1M1x1OGI1NFx1OGI1NVx1OGI1Nlx1OGI1N1x1OGI1OFx1OGI1OVx1OGI1YVx1OGI1Ylx1OGI1''@;'; put 'put ''Y1x1OGI1ZFx1OGI1ZVx1OGI1Zlx1OGI2MFx1OGI2MVx1OGI2Mlx1OGI2M1x1OGI2NFx1OGI2NVx1OGI2N1x1OGI2OFx1OGI2OVx1OGI2YVx1OGI2Ylx1OGI2ZFx1OGI2ZVx1OGI2Zlx1OGI3MFx1OGI3MVx1OGI3Mlx1OGI3M1x1OGI3NFx1OGI3NVx1OGI3Nlx1OGI3N1x1OGI3OFx1OGI3OVx1''@;'; put 'put ''OGI3YVx1OGI3Ylx1OGI3Y1x1OGI3ZFx1OGI3ZVx1OGI3Zlx1OGI4MFx1OGI4MVx1OGI4Mlx1OGI4M1x1OGI4NFx1OGI4NVx1OGI4Nlx1ZmZmZFx1OGI4N1x1OGI4OFx1OGI4OVx1OGI4YVx1OGI4Ylx1OGI4Y1x1OGI4ZFx1OGI4ZVx1OGI4Zlx1OGI5MFx1OGI5MVx1OGI5Mlx1OGI5M1x1OGI5''@;'; put 'put ''NFx1OGI5NVx1OGI5Nlx1OGI5N1x1OGI5OFx1OGI5OVx1OGI5YVx1OGI5Ylx1OGI5Y1x1OGI5ZFx1OGI5ZVx1OGI5Zlx1OGJhY1x1OGJiMVx1OGJiYlx1OGJjN1x1OGJkMFx1OGJlYVx1OGMwOVx1OGMxZVx1NGY0Zlx1NmNlOFx1Nzk1ZFx1OWE3Ylx1NjI5M1x1NzIyYVx1NjJmZFx1NGUxM1x1''@;'; put 'put ''NzgxNlx1OGY2Y1x1NjRiMFx1OGQ1YVx1N2JjNlx1Njg2OVx1NWU4NFx1ODhjNVx1NTk4Nlx1NjQ5ZVx1NThlZVx1NzJiNlx1NjkwZVx1OTUyNVx1OGZmZFx1OGQ1OFx1NTc2MFx1N2YwMFx1OGMwNlx1NTFjNlx1NjM0OVx1NjJkOVx1NTM1M1x1Njg0Y1x1NzQyMlx1ODMwMVx1OTE0Y1x1NTU0''@;'; put 'put ''NFx1Nzc0MFx1NzA3Y1x1NmQ0YVx1NTE3OVx1NTRhOFx1OGQ0NFx1NTlmZlx1NmVjYlx1NmRjNFx1NWI1Y1x1N2QyYlx1NGVkNFx1N2M3ZFx1NmVkM1x1NWI1MFx1ODFlYVx1NmUwZFx1NWI1N1x1OWIwM1x1NjhkNVx1OGUyYVx1NWI5N1x1N2VmY1x1NjAzYlx1N2ViNVx1OTBiOVx1OGQ3MFx1''@;'; put 'put ''NTk0Zlx1NjNjZFx1NzlkZlx1OGRiM1x1NTM1Mlx1NjVjZlx1Nzk1Nlx1OGJjNVx1OTYzYlx1N2VjNFx1OTRiYlx1N2U4Mlx1NTYzNFx1OTE4OVx1NjcwMFx1N2Y2YVx1NWMwYVx1OTA3NVx1NjYyOFx1NWRlNlx1NGY1MFx1NjdkZVx1NTA1YVx1NGY1Y1x1NTc1MFx1NWVhN1x1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIxNV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjE1XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIxNV1bZ11dPTU1MDQwK2cseVs1NTA0MCtnXT1fWzIxNV1bZ10pO2ZvcihfWzIxNl09Ilx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGMzOFx1OGMzOVx1OGMzYVx1OGMzYlx1OGMzY1x1OGMzZFx1OGMzZVx1OGMzZlx1OGM0MFx1OGM0Mlx1OGM0M1x1OGM0NFx1OGM0NVx1OGM0OFx1OGM0YVx1OGM0Ylx1OGM0ZFx1OGM0ZVx1OGM0Zlx1OGM1MFx1OGM1''@;'; put 'put ''MVx1OGM1Mlx1OGM1M1x1OGM1NFx1OGM1Nlx1OGM1N1x1OGM1OFx1OGM1OVx1OGM1Ylx1OGM1Y1x1OGM1ZFx1OGM1ZVx1OGM1Zlx1OGM2MFx1OGM2M1x1OGM2NFx1OGM2NVx1OGM2Nlx1OGM2N1x1OGM2OFx1OGM2OVx1OGM2Y1x1OGM2ZFx1OGM2ZVx1OGM2Zlx1OGM3MFx1OGM3MVx1OGM3Mlx1''@;'; put 'put ''OGM3NFx1OGM3NVx1OGM3Nlx1OGM3N1x1OGM3Ylx1OGM3Y1x1OGM3ZFx1OGM3ZVx1OGM3Zlx1OGM4MFx1OGM4MVx1OGM4M1x1OGM4NFx1OGM4Nlx1OGM4N1x1ZmZmZFx1OGM4OFx1OGM4Ylx1OGM4ZFx1OGM4ZVx1OGM4Zlx1OGM5MFx1OGM5MVx1OGM5Mlx1OGM5M1x1OGM5NVx1OGM5Nlx1OGM5''@;'; put 'put ''N1x1OGM5OVx1OGM5YVx1OGM5Ylx1OGM5Y1x1OGM5ZFx1OGM5ZVx1OGM5Zlx1OGNhMFx1OGNhMVx1OGNhMlx1OGNhM1x1OGNhNFx1OGNhNVx1OGNhNlx1OGNhN1x1OGNhOFx1OGNhOVx1OGNhYVx1OGNhYlx1OGNhY1x1OGNhZFx1NGU4ZFx1NGUwY1x1NTE0MFx1NGUxMFx1NWVmZlx1NTM0NVx1''@;'; put 'put ''NGUxNVx1NGU5OFx1NGUxZVx1OWIzMlx1NWI2Y1x1NTY2OVx1NGUyOFx1NzliYVx1NGUzZlx1NTMxNVx1NGU0N1x1NTkyZFx1NzIzYlx1NTM2ZVx1NmMxMFx1NTZkZlx1ODBlNFx1OTk5N1x1NmJkM1x1Nzc3ZVx1OWYxN1x1NGUzNlx1NGU5Zlx1OWYxMFx1NGU1Y1x1NGU2OVx1NGU5M1x1ODI4''@;'; put 'put ''OFx1NWI1Ylx1NTU2Y1x1NTYwZlx1NGVjNFx1NTM4ZFx1NTM5ZFx1NTNhM1x1NTNhNVx1NTNhZVx1OTc2NVx1OGQ1ZFx1NTMxYVx1NTNmNVx1NTMyNlx1NTMyZVx1NTMzZVx1OGQ1Y1x1NTM2Nlx1NTM2M1x1NTIwMlx1NTIwOFx1NTIwZVx1NTIyZFx1NTIzM1x1NTIzZlx1NTI0MFx1NTI0Y1x1''@;'; put 'put ''NTI1ZVx1NTI2MVx1NTI1Y1x1ODRhZlx1NTI3ZFx1NTI4Mlx1NTI4MVx1NTI5MFx1NTI5M1x1NTE4Mlx1N2Y1NFx1NGViYlx1NGVjM1x1NGVjOVx1NGVjMlx1NGVlOFx1NGVlMVx1NGVlYlx1NGVkZVx1NGYxYlx1NGVmM1x1NGYyMlx1NGY2NFx1NGVmNVx1NGYyNVx1NGYyN1x1NGYwOVx1NGYy''@;'; put 'put ''Ylx1NGY1ZVx1NGY2N1x1NjUzOFx1NGY1YVx1NGY1ZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIxNl0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjE2XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIxNl1bZ11dPTU1Mjk2K2cseVs1NTI5NitnXT1fWzIxNl1bZ10pO2ZvcihfWzIxN109Ilx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGNhZVx1OGNhZlx1OGNiMFx1OGNiMVx1OGNiMlx1OGNiM1x1OGNiNFx1OGNiNVx1OGNiNlx1OGNiN1x1OGNiOFx1OGNiOVx1OGNiYVx1OGNiYlx1OGNiY1x1OGNiZFx1OGNiZVx1OGNiZlx1OGNj''@;'; put 'put ''MFx1OGNjMVx1OGNjMlx1OGNjM1x1OGNjNFx1OGNjNVx1OGNjNlx1OGNjN1x1OGNjOFx1OGNjOVx1OGNjYVx1OGNjYlx1OGNjY1x1OGNjZFx1OGNjZVx1OGNjZlx1OGNkMFx1OGNkMVx1OGNkMlx1OGNkM1x1OGNkNFx1OGNkNVx1OGNkNlx1OGNkN1x1OGNkOFx1OGNkOVx1OGNkYVx1OGNkYlx1''@;'; put 'put ''OGNkY1x1OGNkZFx1OGNkZVx1OGNkZlx1OGNlMFx1OGNlMVx1OGNlMlx1OGNlM1x1OGNlNFx1OGNlNVx1OGNlNlx1OGNlN1x1OGNlOFx1OGNlOVx1OGNlYVx1OGNlYlx1OGNlY1x1ZmZmZFx1OGNlZFx1OGNlZVx1OGNlZlx1OGNmMFx1OGNmMVx1OGNmMlx1OGNmM1x1OGNmNFx1OGNmNVx1OGNm''@;'; put 'put ''Nlx1OGNmN1x1OGNmOFx1OGNmOVx1OGNmYVx1OGNmYlx1OGNmY1x1OGNmZFx1OGNmZVx1OGNmZlx1OGQwMFx1OGQwMVx1OGQwMlx1OGQwM1x1OGQwNFx1OGQwNVx1OGQwNlx1OGQwN1x1OGQwOFx1OGQwOVx1OGQwYVx1OGQwYlx1OGQwY1x1OGQwZFx1NGY1Zlx1NGY1N1x1NGYzMlx1NGYzZFx1''@;'; put 'put ''NGY3Nlx1NGY3NFx1NGY5MVx1NGY4OVx1NGY4M1x1NGY4Zlx1NGY3ZVx1NGY3Ylx1NGZhYVx1NGY3Y1x1NGZhY1x1NGY5NFx1NGZlNlx1NGZlOFx1NGZlYVx1NGZjNVx1NGZkYVx1NGZlM1x1NGZkY1x1NGZkMVx1NGZkZlx1NGZmOFx1NTAyOVx1NTA0Y1x1NGZmM1x1NTAyY1x1NTAwZlx1NTAy''@;'; put 'put ''ZVx1NTAyZFx1NGZmZVx1NTAxY1x1NTAwY1x1NTAyNVx1NTAyOFx1NTA3ZVx1NTA0M1x1NTA1NVx1NTA0OFx1NTA0ZVx1NTA2Y1x1NTA3Ylx1NTBhNVx1NTBhN1x1NTBhOVx1NTBiYVx1NTBkNlx1NTEwNlx1NTBlZFx1NTBlY1x1NTBlNlx1NTBlZVx1NTEwN1x1NTEwYlx1NGVkZFx1NmMzZFx1''@;'; put 'put ''NGY1OFx1NGY2NVx1NGZjZVx1OWZhMFx1NmM0Nlx1N2M3NFx1NTE2ZVx1NWRmZFx1OWVjOVx1OTk5OFx1NTE4MVx1NTkxNFx1NTJmOVx1NTMwZFx1OGEwN1x1NTMxMFx1NTFlYlx1NTkxOVx1NTE1NVx1NGVhMFx1NTE1Nlx1NGViM1x1ODg2ZVx1ODhhNFx1NGViNVx1ODExNFx1ODhkMlx1Nzk4''@;'; put 'put ''MFx1NWIzNFx1ODgwM1x1N2ZiOFx1NTFhYlx1NTFiMVx1NTFiZFx1NTFiY1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIxN10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjE3XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIxN11bZ11dPTU1NTUyK2cseVs1NTU1MitnXT1fWzIxN11bZ10pO2Zv''@;'; put 'put ''cihfWzIxOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGQwZVx1OGQwZlx1OGQxMFx1OGQxMVx1OGQxMlx1OGQxM1x1OGQxNFx1OGQxNVx1OGQxNlx1OGQxN1x1OGQxOFx1OGQxOVx1OGQxYVx1OGQxYlx1OGQxY1x1OGQyMFx1OGQ1''@;'; put 'put ''MVx1OGQ1Mlx1OGQ1N1x1OGQ1Zlx1OGQ2NVx1OGQ2OFx1OGQ2OVx1OGQ2YVx1OGQ2Y1x1OGQ2ZVx1OGQ2Zlx1OGQ3MVx1OGQ3Mlx1OGQ3OFx1OGQ3OVx1OGQ3YVx1OGQ3Ylx1OGQ3Y1x1OGQ3ZFx1OGQ3ZVx1OGQ3Zlx1OGQ4MFx1OGQ4Mlx1OGQ4M1x1OGQ4Nlx1OGQ4N1x1OGQ4OFx1OGQ4OVx1''@;'; put 'put ''OGQ4Y1x1OGQ4ZFx1OGQ4ZVx1OGQ4Zlx1OGQ5MFx1OGQ5Mlx1OGQ5M1x1OGQ5NVx1OGQ5Nlx1OGQ5N1x1OGQ5OFx1OGQ5OVx1OGQ5YVx1OGQ5Ylx1OGQ5Y1x1OGQ5ZFx1OGQ5ZVx1OGRhMFx1OGRhMVx1ZmZmZFx1OGRhMlx1OGRhNFx1OGRhNVx1OGRhNlx1OGRhN1x1OGRhOFx1OGRhOVx1OGRh''@;'; put 'put ''YVx1OGRhYlx1OGRhY1x1OGRhZFx1OGRhZVx1OGRhZlx1OGRiMFx1OGRiMlx1OGRiNlx1OGRiN1x1OGRiOVx1OGRiYlx1OGRiZFx1OGRjMFx1OGRjMVx1OGRjMlx1OGRjNVx1OGRjN1x1OGRjOFx1OGRjOVx1OGRjYVx1OGRjZFx1OGRkMFx1OGRkMlx1OGRkM1x1OGRkNFx1NTFjN1x1NTE5Nlx1''@;'; put 'put ''NTFhMlx1NTFhNVx1OGJhMFx1OGJhNlx1OGJhN1x1OGJhYVx1OGJiNFx1OGJiNVx1OGJiN1x1OGJjMlx1OGJjM1x1OGJjYlx1OGJjZlx1OGJjZVx1OGJkMlx1OGJkM1x1OGJkNFx1OGJkNlx1OGJkOFx1OGJkOVx1OGJkY1x1OGJkZlx1OGJlMFx1OGJlNFx1OGJlOFx1OGJlOVx1OGJlZVx1OGJm''@;'; put 'put ''MFx1OGJmM1x1OGJmNlx1OGJmOVx1OGJmY1x1OGJmZlx1OGMwMFx1OGMwMlx1OGMwNFx1OGMwN1x1OGMwY1x1OGMwZlx1OGMxMVx1OGMxMlx1OGMxNFx1OGMxNVx1OGMxNlx1OGMxOVx1OGMxYlx1OGMxOFx1OGMxZFx1OGMxZlx1OGMyMFx1OGMyMVx1OGMyNVx1OGMyN1x1OGMyYVx1OGMyYlx1''@;'; put 'put ''OGMyZVx1OGMyZlx1OGMzMlx1OGMzM1x1OGMzNVx1OGMzNlx1NTM2OVx1NTM3YVx1OTYxZFx1OTYyMlx1OTYyMVx1OTYzMVx1OTYyYVx1OTYzZFx1OTYzY1x1OTY0Mlx1OTY0OVx1OTY1NFx1OTY1Zlx1OTY2N1x1OTY2Y1x1OTY3Mlx1OTY3NFx1OTY4OFx1OTY4ZFx1OTY5N1x1OTZiMFx1OTA5''@;'; put 'put ''N1x1OTA5Ylx1OTA5ZFx1OTA5OVx1OTBhY1x1OTBhMVx1OTBiNFx1OTBiM1x1OTBiNlx1OTBiYVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIxOF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjE4XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIxOF1bZ11dPTU1ODA4K2cseVs1NTgwOCtnXT1f''@;'; put 'put ''WzIxOF1bZ10pO2ZvcihfWzIxOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGRkNVx1OGRkOFx1OGRkOVx1OGRkY1x1OGRlMFx1OGRlMVx1OGRlMlx1OGRlNVx1OGRlNlx1OGRlN1x1OGRlOVx1OGRlZFx1OGRlZVx1OGRmMFx1OGRm''@;'; put 'put ''MVx1OGRmMlx1OGRmNFx1OGRmNlx1OGRmY1x1OGRmZVx1OGRmZlx1OGUwMFx1OGUwMVx1OGUwMlx1OGUwM1x1OGUwNFx1OGUwNlx1OGUwN1x1OGUwOFx1OGUwYlx1OGUwZFx1OGUwZVx1OGUxMFx1OGUxMVx1OGUxMlx1OGUxM1x1OGUxNVx1OGUxNlx1OGUxN1x1OGUxOFx1OGUxOVx1OGUxYVx1''@;'; put 'put ''OGUxYlx1OGUxY1x1OGUyMFx1OGUyMVx1OGUyNFx1OGUyNVx1OGUyNlx1OGUyN1x1OGUyOFx1OGUyYlx1OGUyZFx1OGUzMFx1OGUzMlx1OGUzM1x1OGUzNFx1OGUzNlx1OGUzN1x1OGUzOFx1OGUzYlx1OGUzY1x1OGUzZVx1ZmZmZFx1OGUzZlx1OGU0M1x1OGU0NVx1OGU0Nlx1OGU0Y1x1OGU0''@;'; put 'put ''ZFx1OGU0ZVx1OGU0Zlx1OGU1MFx1OGU1M1x1OGU1NFx1OGU1NVx1OGU1Nlx1OGU1N1x1OGU1OFx1OGU1YVx1OGU1Ylx1OGU1Y1x1OGU1ZFx1OGU1ZVx1OGU1Zlx1OGU2MFx1OGU2MVx1OGU2Mlx1OGU2M1x1OGU2NFx1OGU2NVx1OGU2N1x1OGU2OFx1OGU2YVx1OGU2Ylx1OGU2ZVx1OGU3MVx1''@;'; put 'put ''OTBiOFx1OTBiMFx1OTBjZlx1OTBjNVx1OTBiZVx1OTBkMFx1OTBjNFx1OTBjN1x1OTBkM1x1OTBlNlx1OTBlMlx1OTBkY1x1OTBkN1x1OTBkYlx1OTBlYlx1OTBlZlx1OTBmZVx1OTEwNFx1OTEyMlx1OTExZVx1OTEyM1x1OTEzMVx1OTEyZlx1OTEzOVx1OTE0M1x1OTE0Nlx1NTIwZFx1NTk0''@;'; put 'put ''Mlx1NTJhMlx1NTJhY1x1NTJhZFx1NTJiZVx1NTRmZlx1NTJkMFx1NTJkNlx1NTJmMFx1NTNkZlx1NzFlZVx1NzdjZFx1NWVmNFx1NTFmNVx1NTFmY1x1OWIyZlx1NTNiNlx1NWYwMVx1NzU1YVx1NWRlZlx1NTc0Y1x1NTdhOVx1NTdhMVx1NTg3ZVx1NThiY1x1NThjNVx1NThkMVx1NTcyOVx1''@;'; put 'put ''NTcyY1x1NTcyYVx1NTczM1x1NTczOVx1NTcyZVx1NTcyZlx1NTc1Y1x1NTczYlx1NTc0Mlx1NTc2OVx1NTc4NVx1NTc2Ylx1NTc4Nlx1NTc3Y1x1NTc3Ylx1NTc2OFx1NTc2ZFx1NTc3Nlx1NTc3M1x1NTdhZFx1NTdhNFx1NTc4Y1x1NTdiMlx1NTdjZlx1NTdhN1x1NTdiNFx1NTc5M1x1NTdh''@;'; put 'put ''MFx1NTdkNVx1NTdkOFx1NTdkYVx1NTdkOVx1NTdkMlx1NTdiOFx1NTdmNFx1NTdlZlx1NTdmOFx1NTdlNFx1NTdkZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIxOV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjE5XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIxOV1bZ11dPTU2MDY0K2cs''@;'; put 'put ''eVs1NjA2NCtnXT1fWzIxOV1bZ10pO2ZvcihfWzIyMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGU3M1x1OGU3NVx1OGU3N1x1OGU3OFx1OGU3OVx1OGU3YVx1OGU3Ylx1OGU3ZFx1OGU3ZVx1OGU4MFx1OGU4Mlx1OGU4M1x1OGU4''@;'; put 'put ''NFx1OGU4Nlx1OGU4OFx1OGU4OVx1OGU4YVx1OGU4Ylx1OGU4Y1x1OGU4ZFx1OGU4ZVx1OGU5MVx1OGU5Mlx1OGU5M1x1OGU5NVx1OGU5Nlx1OGU5N1x1OGU5OFx1OGU5OVx1OGU5YVx1OGU5Ylx1OGU5ZFx1OGU5Zlx1OGVhMFx1OGVhMVx1OGVhMlx1OGVhM1x1OGVhNFx1OGVhNVx1OGVhNlx1''@;'; put 'put ''OGVhN1x1OGVhOFx1OGVhOVx1OGVhYVx1OGVhZFx1OGVhZVx1OGViMFx1OGViMVx1OGViM1x1OGViNFx1OGViNVx1OGViNlx1OGViN1x1OGViOFx1OGViOVx1OGViYlx1OGViY1x1OGViZFx1OGViZVx1OGViZlx1OGVjMFx1OGVjMVx1OGVjMlx1ZmZmZFx1OGVjM1x1OGVjNFx1OGVjNVx1OGVj''@;'; put 'put ''Nlx1OGVjN1x1OGVjOFx1OGVjOVx1OGVjYVx1OGVjYlx1OGVjY1x1OGVjZFx1OGVjZlx1OGVkMFx1OGVkMVx1OGVkMlx1OGVkM1x1OGVkNFx1OGVkNVx1OGVkNlx1OGVkN1x1OGVkOFx1OGVkOVx1OGVkYVx1OGVkYlx1OGVkY1x1OGVkZFx1OGVkZVx1OGVkZlx1OGVlMFx1OGVlMVx1OGVlMlx1''@;'; put 'put ''OGVlM1x1OGVlNFx1NTgwYlx1NTgwZFx1NTdmZFx1NTdlZFx1NTgwMFx1NTgxZVx1NTgxOVx1NTg0NFx1NTgyMFx1NTg2NVx1NTg2Y1x1NTg4MVx1NTg4OVx1NTg5YVx1NTg4MFx1OTlhOFx1OWYxOVx1NjFmZlx1ODI3OVx1ODI3ZFx1ODI3Zlx1ODI4Zlx1ODI4YVx1ODJhOFx1ODI4NFx1ODI4''@;'; put 'put ''ZVx1ODI5MVx1ODI5N1x1ODI5OVx1ODJhYlx1ODJiOFx1ODJiZVx1ODJiMFx1ODJjOFx1ODJjYVx1ODJlM1x1ODI5OFx1ODJiN1x1ODJhZVx1ODJjYlx1ODJjY1x1ODJjMVx1ODJhOVx1ODJiNFx1ODJhMVx1ODJhYVx1ODI5Zlx1ODJjNFx1ODJjZVx1ODJhNFx1ODJlMVx1ODMwOVx1ODJmN1x1''@;'; put 'put ''ODJlNFx1ODMwZlx1ODMwN1x1ODJkY1x1ODJmNFx1ODJkMlx1ODJkOFx1ODMwY1x1ODJmYlx1ODJkM1x1ODMxMVx1ODMxYVx1ODMwNlx1ODMxNFx1ODMxNVx1ODJlMFx1ODJkNVx1ODMxY1x1ODM1MVx1ODM1Ylx1ODM1Y1x1ODMwOFx1ODM5Mlx1ODMzY1x1ODMzNFx1ODMzMVx1ODM5Ylx1ODM1''@;'; put 'put ''ZVx1ODMyZlx1ODM0Zlx1ODM0N1x1ODM0M1x1ODM1Zlx1ODM0MFx1ODMxN1x1ODM2MFx1ODMyZFx1ODMzYVx1ODMzM1x1ODM2Nlx1ODM2NVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIyMF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjIwXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIyMF1b''@;'; put 'put ''Z11dPTU2MzIwK2cseVs1NjMyMCtnXT1fWzIyMF1bZ10pO2ZvcihfWzIyMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGVlNVx1OGVlNlx1OGVlN1x1OGVlOFx1OGVlOVx1OGVlYVx1OGVlYlx1OGVlY1x1OGVlZFx1OGVlZVx1OGVl''@;'; put 'put ''Zlx1OGVmMFx1OGVmMVx1OGVmMlx1OGVmM1x1OGVmNFx1OGVmNVx1OGVmNlx1OGVmN1x1OGVmOFx1OGVmOVx1OGVmYVx1OGVmYlx1OGVmY1x1OGVmZFx1OGVmZVx1OGVmZlx1OGYwMFx1OGYwMVx1OGYwMlx1OGYwM1x1OGYwNFx1OGYwNVx1OGYwNlx1OGYwN1x1OGYwOFx1OGYwOVx1OGYwYVx1''@;'; put 'put ''OGYwYlx1OGYwY1x1OGYwZFx1OGYwZVx1OGYwZlx1OGYxMFx1OGYxMVx1OGYxMlx1OGYxM1x1OGYxNFx1OGYxNVx1OGYxNlx1OGYxN1x1OGYxOFx1OGYxOVx1OGYxYVx1OGYxYlx1OGYxY1x1OGYxZFx1OGYxZVx1OGYxZlx1OGYyMFx1OGYyMVx1OGYyMlx1OGYyM1x1ZmZmZFx1OGYyNFx1OGYy''@;'; put 'put ''NVx1OGYyNlx1OGYyN1x1OGYyOFx1OGYyOVx1OGYyYVx1OGYyYlx1OGYyY1x1OGYyZFx1OGYyZVx1OGYyZlx1OGYzMFx1OGYzMVx1OGYzMlx1OGYzM1x1OGYzNFx1OGYzNVx1OGYzNlx1OGYzN1x1OGYzOFx1OGYzOVx1OGYzYVx1OGYzYlx1OGYzY1x1OGYzZFx1OGYzZVx1OGYzZlx1OGY0MFx1''@;'; put 'put ''OGY0MVx1OGY0Mlx1OGY0M1x1OGY0NFx1ODM2OFx1ODMxYlx1ODM2OVx1ODM2Y1x1ODM2YVx1ODM2ZFx1ODM2ZVx1ODNiMFx1ODM3OFx1ODNiM1x1ODNiNFx1ODNhMFx1ODNhYVx1ODM5M1x1ODM5Y1x1ODM4NVx1ODM3Y1x1ODNiNlx1ODNhOVx1ODM3ZFx1ODNiOFx1ODM3Ylx1ODM5OFx1ODM5''@;'; put 'put ''ZVx1ODNhOFx1ODNiYVx1ODNiY1x1ODNjMVx1ODQwMVx1ODNlNVx1ODNkOFx1NTgwN1x1ODQxOFx1ODQwYlx1ODNkZFx1ODNmZFx1ODNkNlx1ODQxY1x1ODQzOFx1ODQxMVx1ODQwNlx1ODNkNFx1ODNkZlx1ODQwZlx1ODQwM1x1ODNmOFx1ODNmOVx1ODNlYVx1ODNjNVx1ODNjMFx1ODQyNlx1''@;'; put 'put ''ODNmMFx1ODNlMVx1ODQ1Y1x1ODQ1MVx1ODQ1YVx1ODQ1OVx1ODQ3M1x1ODQ4N1x1ODQ4OFx1ODQ3YVx1ODQ4OVx1ODQ3OFx1ODQzY1x1ODQ0Nlx1ODQ2OVx1ODQ3Nlx1ODQ4Y1x1ODQ4ZVx1ODQzMVx1ODQ2ZFx1ODRjMVx1ODRjZFx1ODRkMFx1ODRlNlx1ODRiZFx1ODRkM1x1ODRjYVx1ODRi''@;'; put 'put ''Zlx1ODRiYVx1ODRlMFx1ODRhMVx1ODRiOVx1ODRiNFx1ODQ5N1x1ODRlNVx1ODRlM1x1ODUwY1x1NzUwZFx1ODUzOFx1ODRmMFx1ODUzOVx1ODUxZlx1ODUzYVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIyMV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjIxXVtnXS5jaGFyQ29kZUF0KDAp''@;'; put 'put ''JiYoSVtfWzIyMV1bZ11dPTU2NTc2K2cseVs1NjU3NitnXT1fWzIyMV1bZ10pO2ZvcihfWzIyMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGY0NVx1OGY0Nlx1OGY0N1x1OGY0OFx1OGY0OVx1OGY0YVx1OGY0Ylx1OGY0Y1x1OGY0''@;'; put 'put ''ZFx1OGY0ZVx1OGY0Zlx1OGY1MFx1OGY1MVx1OGY1Mlx1OGY1M1x1OGY1NFx1OGY1NVx1OGY1Nlx1OGY1N1x1OGY1OFx1OGY1OVx1OGY1YVx1OGY1Ylx1OGY1Y1x1OGY1ZFx1OGY1ZVx1OGY1Zlx1OGY2MFx1OGY2MVx1OGY2Mlx1OGY2M1x1OGY2NFx1OGY2NVx1OGY2YVx1OGY4MFx1OGY4Y1x1''@;'; put 'put ''OGY5Mlx1OGY5ZFx1OGZhMFx1OGZhMVx1OGZhMlx1OGZhNFx1OGZhNVx1OGZhNlx1OGZhN1x1OGZhYVx1OGZhY1x1OGZhZFx1OGZhZVx1OGZhZlx1OGZiMlx1OGZiM1x1OGZiNFx1OGZiNVx1OGZiN1x1OGZiOFx1OGZiYVx1OGZiYlx1OGZiY1x1OGZiZlx1OGZjMFx1OGZjM1x1OGZjNlx1ZmZm''@;'; put 'put ''ZFx1OGZjOVx1OGZjYVx1OGZjYlx1OGZjY1x1OGZjZFx1OGZjZlx1OGZkMlx1OGZkNlx1OGZkN1x1OGZkYVx1OGZlMFx1OGZlMVx1OGZlM1x1OGZlN1x1OGZlY1x1OGZlZlx1OGZmMVx1OGZmMlx1OGZmNFx1OGZmNVx1OGZmNlx1OGZmYVx1OGZmYlx1OGZmY1x1OGZmZVx1OGZmZlx1OTAwN1x1''@;'; put 'put ''OTAwOFx1OTAwY1x1OTAwZVx1OTAxM1x1OTAxNVx1OTAxOFx1ODU1Nlx1ODUzYlx1ODRmZlx1ODRmY1x1ODU1OVx1ODU0OFx1ODU2OFx1ODU2NFx1ODU1ZVx1ODU3YVx1NzdhMlx1ODU0M1x1ODU3Mlx1ODU3Ylx1ODVhNFx1ODVhOFx1ODU4N1x1ODU4Zlx1ODU3OVx1ODVhZVx1ODU5Y1x1ODU4''@;'; put 'put ''NVx1ODViOVx1ODViN1x1ODViMFx1ODVkM1x1ODVjMVx1ODVkY1x1ODVmZlx1ODYyN1x1ODYwNVx1ODYyOVx1ODYxNlx1ODYzY1x1NWVmZVx1NWYwOFx1NTkzY1x1NTk0MVx1ODAzN1x1NTk1NVx1NTk1YVx1NTk1OFx1NTMwZlx1NWMyMlx1NWMyNVx1NWMyY1x1NWMzNFx1NjI0Y1x1NjI2YVx1''@;'; put 'put ''NjI5Zlx1NjJiYlx1NjJjYVx1NjJkYVx1NjJkN1x1NjJlZVx1NjMyMlx1NjJmNlx1NjMzOVx1NjM0Ylx1NjM0M1x1NjNhZFx1NjNmNlx1NjM3MVx1NjM3YVx1NjM4ZVx1NjNiNFx1NjM2ZFx1NjNhY1x1NjM4YVx1NjM2OVx1NjNhZVx1NjNiY1x1NjNmMlx1NjNmOFx1NjNlMFx1NjNmZlx1NjNj''@;'; put 'put ''NFx1NjNkZVx1NjNjZVx1NjQ1Mlx1NjNjNlx1NjNiZVx1NjQ0NVx1NjQ0MVx1NjQwYlx1NjQxYlx1NjQyMFx1NjQwY1x1NjQyNlx1NjQyMVx1NjQ1ZVx1NjQ4NFx1NjQ2ZFx1NjQ5Nlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIyMl0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjIyXVtnXS5j''@;'; put 'put ''aGFyQ29kZUF0KDApJiYoSVtfWzIyMl1bZ11dPTU2ODMyK2cseVs1NjgzMitnXT1fWzIyMl1bZ10pO2ZvcihfWzIyM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTAxOVx1OTAxY1x1OTAyM1x1OTAyNFx1OTAyNVx1OTAyN1x1OTAy''@;'; put 'put ''OFx1OTAyOVx1OTAyYVx1OTAyYlx1OTAyY1x1OTAzMFx1OTAzMVx1OTAzMlx1OTAzM1x1OTAzNFx1OTAzN1x1OTAzOVx1OTAzYVx1OTAzZFx1OTAzZlx1OTA0MFx1OTA0M1x1OTA0NVx1OTA0Nlx1OTA0OFx1OTA0OVx1OTA0YVx1OTA0Ylx1OTA0Y1x1OTA0ZVx1OTA1NFx1OTA1NVx1OTA1Nlx1''@;'; put 'put ''OTA1OVx1OTA1YVx1OTA1Y1x1OTA1ZFx1OTA1ZVx1OTA1Zlx1OTA2MFx1OTA2MVx1OTA2NFx1OTA2Nlx1OTA2N1x1OTA2OVx1OTA2YVx1OTA2Ylx1OTA2Y1x1OTA2Zlx1OTA3MFx1OTA3MVx1OTA3Mlx1OTA3M1x1OTA3Nlx1OTA3N1x1OTA3OFx1OTA3OVx1OTA3YVx1OTA3Ylx1OTA3Y1x1OTA3''@;'; put 'put ''ZVx1OTA4MVx1ZmZmZFx1OTA4NFx1OTA4NVx1OTA4Nlx1OTA4N1x1OTA4OVx1OTA4YVx1OTA4Y1x1OTA4ZFx1OTA4ZVx1OTA4Zlx1OTA5MFx1OTA5Mlx1OTA5NFx1OTA5Nlx1OTA5OFx1OTA5YVx1OTA5Y1x1OTA5ZVx1OTA5Zlx1OTBhMFx1OTBhNFx1OTBhNVx1OTBhN1x1OTBhOFx1OTBhOVx1''@;'; put 'put ''OTBhYlx1OTBhZFx1OTBiMlx1OTBiN1x1OTBiY1x1OTBiZFx1OTBiZlx1OTBjMFx1NjQ3YVx1NjRiN1x1NjRiOFx1NjQ5OVx1NjRiYVx1NjRjMFx1NjRkMFx1NjRkN1x1NjRlNFx1NjRlMlx1NjUwOVx1NjUyNVx1NjUyZVx1NWYwYlx1NWZkMlx1NzUxOVx1NWYxMVx1NTM1Zlx1NTNmMVx1NTNm''@;'; put 'put ''ZFx1NTNlOVx1NTNlOFx1NTNmYlx1NTQxMlx1NTQxNlx1NTQwNlx1NTQ0Ylx1NTQ1Mlx1NTQ1M1x1NTQ1NFx1NTQ1Nlx1NTQ0M1x1NTQyMVx1NTQ1N1x1NTQ1OVx1NTQyM1x1NTQzMlx1NTQ4Mlx1NTQ5NFx1NTQ3N1x1NTQ3MVx1NTQ2NFx1NTQ5YVx1NTQ5Ylx1NTQ4NFx1NTQ3Nlx1NTQ2Nlx1''@;'; put 'put ''NTQ5ZFx1NTRkMFx1NTRhZFx1NTRjMlx1NTRiNFx1NTRkMlx1NTRhN1x1NTRhNlx1NTRkM1x1NTRkNFx1NTQ3Mlx1NTRhM1x1NTRkNVx1NTRiYlx1NTRiZlx1NTRjY1x1NTRkOVx1NTRkYVx1NTRkY1x1NTRhOVx1NTRhYVx1NTRhNFx1NTRkZFx1NTRjZlx1NTRkZVx1NTUxYlx1NTRlN1x1NTUy''@;'; put 'put ''MFx1NTRmZFx1NTUxNFx1NTRmM1x1NTUyMlx1NTUyM1x1NTUwZlx1NTUxMVx1NTUyN1x1NTUyYVx1NTU2N1x1NTU4Zlx1NTViNVx1NTU0OVx1NTU2ZFx1NTU0MVx1NTU1NVx1NTUzZlx1NTU1MFx1NTUzY1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIyM10ubGVuZ3RoOysrZyk2NTUzMyE9''@;'; put 'put ''PV9bMjIzXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIyM11bZ11dPTU3MDg4K2cseVs1NzA4OCtnXT1fWzIyM11bZ10pO2ZvcihfWzIyNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTBjMlx1OTBjM1x1OTBjNlx1OTBjOFx1OTBj''@;'; put 'put ''OVx1OTBjYlx1OTBjY1x1OTBjZFx1OTBkMlx1OTBkNFx1OTBkNVx1OTBkNlx1OTBkOFx1OTBkOVx1OTBkYVx1OTBkZVx1OTBkZlx1OTBlMFx1OTBlM1x1OTBlNFx1OTBlNVx1OTBlOVx1OTBlYVx1OTBlY1x1OTBlZVx1OTBmMFx1OTBmMVx1OTBmMlx1OTBmM1x1OTBmNVx1OTBmNlx1OTBmN1x1''@;'; put 'put ''OTBmOVx1OTBmYVx1OTBmYlx1OTBmY1x1OTBmZlx1OTEwMFx1OTEwMVx1OTEwM1x1OTEwNVx1OTEwNlx1OTEwN1x1OTEwOFx1OTEwOVx1OTEwYVx1OTEwYlx1OTEwY1x1OTEwZFx1OTEwZVx1OTEwZlx1OTExMFx1OTExMVx1OTExMlx1OTExM1x1OTExNFx1OTExNVx1OTExNlx1OTExN1x1OTEx''@;'; put 'put ''OFx1OTExYVx1OTExYlx1OTExY1x1ZmZmZFx1OTExZFx1OTExZlx1OTEyMFx1OTEyMVx1OTEyNFx1OTEyNVx1OTEyNlx1OTEyN1x1OTEyOFx1OTEyOVx1OTEyYVx1OTEyYlx1OTEyY1x1OTEyZFx1OTEyZVx1OTEzMFx1OTEzMlx1OTEzM1x1OTEzNFx1OTEzNVx1OTEzNlx1OTEzN1x1OTEzOFx1''@;'; put 'put ''OTEzYVx1OTEzYlx1OTEzY1x1OTEzZFx1OTEzZVx1OTEzZlx1OTE0MFx1OTE0MVx1OTE0Mlx1OTE0NFx1NTUzN1x1NTU1Nlx1NTU3NVx1NTU3Nlx1NTU3N1x1NTUzM1x1NTUzMFx1NTU1Y1x1NTU4Ylx1NTVkMlx1NTU4M1x1NTViMVx1NTViOVx1NTU4OFx1NTU4MVx1NTU5Zlx1NTU3ZVx1NTVk''@;'; put 'put ''Nlx1NTU5MVx1NTU3Ylx1NTVkZlx1NTViZFx1NTViZVx1NTU5NFx1NTU5OVx1NTVlYVx1NTVmN1x1NTVjOVx1NTYxZlx1NTVkMVx1NTVlYlx1NTVlY1x1NTVkNFx1NTVlNlx1NTVkZFx1NTVjNFx1NTVlZlx1NTVlNVx1NTVmMlx1NTVmM1x1NTVjY1x1NTVjZFx1NTVlOFx1NTVmNVx1NTVlNFx1''@;'; put 'put ''OGY5NFx1NTYxZVx1NTYwOFx1NTYwY1x1NTYwMVx1NTYyNFx1NTYyM1x1NTVmZVx1NTYwMFx1NTYyN1x1NTYyZFx1NTY1OFx1NTYzOVx1NTY1N1x1NTYyY1x1NTY0ZFx1NTY2Mlx1NTY1OVx1NTY1Y1x1NTY0Y1x1NTY1NFx1NTY4Nlx1NTY2NFx1NTY3MVx1NTY2Ylx1NTY3Ylx1NTY3Y1x1NTY4''@;'; put 'put ''NVx1NTY5M1x1NTZhZlx1NTZkNFx1NTZkN1x1NTZkZFx1NTZlMVx1NTZmNVx1NTZlYlx1NTZmOVx1NTZmZlx1NTcwNFx1NTcwYVx1NTcwOVx1NTcxY1x1NWUwZlx1NWUxOVx1NWUxNFx1NWUxMVx1NWUzMVx1NWUzYlx1NWUzY1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIyNF0ubGVuZ3Ro''@;'; put 'put ''OysrZyk2NTUzMyE9PV9bMjI0XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIyNF1bZ11dPTU3MzQ0K2cseVs1NzM0NCtnXT1fWzIyNF1bZ10pO2ZvcihfWzIyNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTE0NVx1OTE0N1x1OTE0''@;'; put 'put ''OFx1OTE1MVx1OTE1M1x1OTE1NFx1OTE1NVx1OTE1Nlx1OTE1OFx1OTE1OVx1OTE1Ylx1OTE1Y1x1OTE1Zlx1OTE2MFx1OTE2Nlx1OTE2N1x1OTE2OFx1OTE2Ylx1OTE2ZFx1OTE3M1x1OTE3YVx1OTE3Ylx1OTE3Y1x1OTE4MFx1OTE4MVx1OTE4Mlx1OTE4M1x1OTE4NFx1OTE4Nlx1OTE4OFx1''@;'; put 'put ''OTE4YVx1OTE4ZVx1OTE4Zlx1OTE5M1x1OTE5NFx1OTE5NVx1OTE5Nlx1OTE5N1x1OTE5OFx1OTE5OVx1OTE5Y1x1OTE5ZFx1OTE5ZVx1OTE5Zlx1OTFhMFx1OTFhMVx1OTFhNFx1OTFhNVx1OTFhNlx1OTFhN1x1OTFhOFx1OTFhOVx1OTFhYlx1OTFhY1x1OTFiMFx1OTFiMVx1OTFiMlx1OTFi''@;'; put 'put ''M1x1OTFiNlx1OTFiN1x1OTFiOFx1OTFiOVx1OTFiYlx1ZmZmZFx1OTFiY1x1OTFiZFx1OTFiZVx1OTFiZlx1OTFjMFx1OTFjMVx1OTFjMlx1OTFjM1x1OTFjNFx1OTFjNVx1OTFjNlx1OTFjOFx1OTFjYlx1OTFkMFx1OTFkMlx1OTFkM1x1OTFkNFx1OTFkNVx1OTFkNlx1OTFkN1x1OTFkOFx1''@;'; put 'put ''OTFkOVx1OTFkYVx1OTFkYlx1OTFkZFx1OTFkZVx1OTFkZlx1OTFlMFx1OTFlMVx1OTFlMlx1OTFlM1x1OTFlNFx1OTFlNVx1NWUzN1x1NWU0NFx1NWU1NFx1NWU1Ylx1NWU1ZVx1NWU2MVx1NWM4Y1x1NWM3YVx1NWM4ZFx1NWM5MFx1NWM5Nlx1NWM4OFx1NWM5OFx1NWM5OVx1NWM5MVx1NWM5''@;'; put 'put ''YVx1NWM5Y1x1NWNiNVx1NWNhMlx1NWNiZFx1NWNhY1x1NWNhYlx1NWNiMVx1NWNhM1x1NWNjMVx1NWNiN1x1NWNjNFx1NWNkMlx1NWNlNFx1NWNjYlx1NWNlNVx1NWQwMlx1NWQwM1x1NWQyN1x1NWQyNlx1NWQyZVx1NWQyNFx1NWQxZVx1NWQwNlx1NWQxYlx1NWQ1OFx1NWQzZVx1NWQzNFx1''@;'; put 'put ''NWQzZFx1NWQ2Y1x1NWQ1Ylx1NWQ2Zlx1NWQ1ZFx1NWQ2Ylx1NWQ0Ylx1NWQ0YVx1NWQ2OVx1NWQ3NFx1NWQ4Mlx1NWQ5OVx1NWQ5ZFx1OGM3M1x1NWRiN1x1NWRjNVx1NWY3M1x1NWY3N1x1NWY4Mlx1NWY4N1x1NWY4OVx1NWY4Y1x1NWY5NVx1NWY5OVx1NWY5Y1x1NWZhOFx1NWZhZFx1NWZi''@;'; put 'put ''NVx1NWZiY1x1ODg2Mlx1NWY2MVx1NzJhZFx1NzJiMFx1NzJiNFx1NzJiN1x1NzJiOFx1NzJjM1x1NzJjMVx1NzJjZVx1NzJjZFx1NzJkMlx1NzJlOFx1NzJlZlx1NzJlOVx1NzJmMlx1NzJmNFx1NzJmN1x1NzMwMVx1NzJmM1x1NzMwM1x1NzJmYVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1f''@;'; put 'put ''WzIyNV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjI1XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIyNV1bZ11dPTU3NjAwK2cseVs1NzYwMCtnXT1fWzIyNV1bZ10pO2ZvcihfWzIyNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTFl''@;'; put 'put ''Nlx1OTFlN1x1OTFlOFx1OTFlOVx1OTFlYVx1OTFlYlx1OTFlY1x1OTFlZFx1OTFlZVx1OTFlZlx1OTFmMFx1OTFmMVx1OTFmMlx1OTFmM1x1OTFmNFx1OTFmNVx1OTFmNlx1OTFmN1x1OTFmOFx1OTFmOVx1OTFmYVx1OTFmYlx1OTFmY1x1OTFmZFx1OTFmZVx1OTFmZlx1OTIwMFx1OTIwMVx1''@;'; put 'put ''OTIwMlx1OTIwM1x1OTIwNFx1OTIwNVx1OTIwNlx1OTIwN1x1OTIwOFx1OTIwOVx1OTIwYVx1OTIwYlx1OTIwY1x1OTIwZFx1OTIwZVx1OTIwZlx1OTIxMFx1OTIxMVx1OTIxMlx1OTIxM1x1OTIxNFx1OTIxNVx1OTIxNlx1OTIxN1x1OTIxOFx1OTIxOVx1OTIxYVx1OTIxYlx1OTIxY1x1OTIx''@;'; put 'put ''ZFx1OTIxZVx1OTIxZlx1OTIyMFx1OTIyMVx1OTIyMlx1OTIyM1x1OTIyNFx1ZmZmZFx1OTIyNVx1OTIyNlx1OTIyN1x1OTIyOFx1OTIyOVx1OTIyYVx1OTIyYlx1OTIyY1x1OTIyZFx1OTIyZVx1OTIyZlx1OTIzMFx1OTIzMVx1OTIzMlx1OTIzM1x1OTIzNFx1OTIzNVx1OTIzNlx1OTIzN1x1''@;'; put 'put ''OTIzOFx1OTIzOVx1OTIzYVx1OTIzYlx1OTIzY1x1OTIzZFx1OTIzZVx1OTIzZlx1OTI0MFx1OTI0MVx1OTI0Mlx1OTI0M1x1OTI0NFx1OTI0NVx1NzJmYlx1NzMxN1x1NzMxM1x1NzMyMVx1NzMwYVx1NzMxZVx1NzMxZFx1NzMxNVx1NzMyMlx1NzMzOVx1NzMyNVx1NzMyY1x1NzMzOFx1NzMz''@;'; put 'put ''MVx1NzM1MFx1NzM0ZFx1NzM1N1x1NzM2MFx1NzM2Y1x1NzM2Zlx1NzM3ZVx1ODIxYlx1NTkyNVx1OThlN1x1NTkyNFx1NTkwMlx1OTk2M1x1OTk2N1x1OTk2OFx1OTk2OVx1OTk2YVx1OTk2Ylx1OTk2Y1x1OTk3NFx1OTk3N1x1OTk3ZFx1OTk4MFx1OTk4NFx1OTk4N1x1OTk4YVx1OTk4ZFx1''@;'; put 'put ''OTk5MFx1OTk5MVx1OTk5M1x1OTk5NFx1OTk5NVx1NWU4MFx1NWU5MVx1NWU4Ylx1NWU5Nlx1NWVhNVx1NWVhMFx1NWViOVx1NWViNVx1NWViZVx1NWViM1x1OGQ1M1x1NWVkMlx1NWVkMVx1NWVkYlx1NWVlOFx1NWVlYVx1ODFiYVx1NWZjNFx1NWZjOVx1NWZkNlx1NWZjZlx1NjAwM1x1NWZl''@;'; put 'put ''ZVx1NjAwNFx1NWZlMVx1NWZlNFx1NWZmZVx1NjAwNVx1NjAwNlx1NWZlYVx1NWZlZFx1NWZmOFx1NjAxOVx1NjAzNVx1NjAyNlx1NjAxYlx1NjAwZlx1NjAwZFx1NjAyOVx1NjAyYlx1NjAwYVx1NjAzZlx1NjAyMVx1NjA3OFx1NjA3OVx1NjA3Ylx1NjA3YVx1NjA0Mlx1ZmZmZCIuc3BsaXQo''@;'; put 'put ''IiIpLGc9MDtnIT1fWzIyNl0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjI2XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIyNl1bZ11dPTU3ODU2K2cseVs1Nzg1NitnXT1fWzIyNl1bZ10pO2ZvcihfWzIyN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1OTI0Nlx1OTI0N1x1OTI0OFx1OTI0OVx1OTI0YVx1OTI0Ylx1OTI0Y1x1OTI0ZFx1OTI0ZVx1OTI0Zlx1OTI1MFx1OTI1MVx1OTI1Mlx1OTI1M1x1OTI1NFx1OTI1NVx1OTI1Nlx1OTI1N1x1OTI1OFx1OTI1OVx1OTI1YVx1OTI1Ylx1OTI1Y1x1OTI1ZFx1OTI1ZVx1OTI1Zlx1''@;'; put 'put ''OTI2MFx1OTI2MVx1OTI2Mlx1OTI2M1x1OTI2NFx1OTI2NVx1OTI2Nlx1OTI2N1x1OTI2OFx1OTI2OVx1OTI2YVx1OTI2Ylx1OTI2Y1x1OTI2ZFx1OTI2ZVx1OTI2Zlx1OTI3MFx1OTI3MVx1OTI3Mlx1OTI3M1x1OTI3NVx1OTI3Nlx1OTI3N1x1OTI3OFx1OTI3OVx1OTI3YVx1OTI3Ylx1OTI3''@;'; put 'put ''Y1x1OTI3ZFx1OTI3ZVx1OTI3Zlx1OTI4MFx1OTI4MVx1OTI4Mlx1OTI4M1x1OTI4NFx1OTI4NVx1ZmZmZFx1OTI4Nlx1OTI4N1x1OTI4OFx1OTI4OVx1OTI4YVx1OTI4Ylx1OTI4Y1x1OTI4ZFx1OTI4Zlx1OTI5MFx1OTI5MVx1OTI5Mlx1OTI5M1x1OTI5NFx1OTI5NVx1OTI5Nlx1OTI5N1x1''@;'; put 'put ''OTI5OFx1OTI5OVx1OTI5YVx1OTI5Ylx1OTI5Y1x1OTI5ZFx1OTI5ZVx1OTI5Zlx1OTJhMFx1OTJhMVx1OTJhMlx1OTJhM1x1OTJhNFx1OTJhNVx1OTJhNlx1OTJhN1x1NjA2YVx1NjA3ZFx1NjA5Nlx1NjA5YVx1NjBhZFx1NjA5ZFx1NjA4M1x1NjA5Mlx1NjA4Y1x1NjA5Ylx1NjBlY1x1NjBi''@;'; put 'put ''Ylx1NjBiMVx1NjBkZFx1NjBkOFx1NjBjNlx1NjBkYVx1NjBiNFx1NjEyMFx1NjEyNlx1NjExNVx1NjEyM1x1NjBmNFx1NjEwMFx1NjEwZVx1NjEyYlx1NjE0YVx1NjE3NVx1NjFhY1x1NjE5NFx1NjFhN1x1NjFiN1x1NjFkNFx1NjFmNVx1NWZkZFx1OTZiM1x1OTVlOVx1OTVlYlx1OTVmMVx1''@;'; put 'put ''OTVmM1x1OTVmNVx1OTVmNlx1OTVmY1x1OTVmZVx1OTYwM1x1OTYwNFx1OTYwNlx1OTYwOFx1OTYwYVx1OTYwYlx1OTYwY1x1OTYwZFx1OTYwZlx1OTYxMlx1OTYxNVx1OTYxNlx1OTYxN1x1OTYxOVx1OTYxYVx1NGUyY1x1NzIzZlx1NjIxNVx1NmMzNVx1NmM1NFx1NmM1Y1x1NmM0YVx1NmNh''@;'; put 'put ''M1x1NmM4NVx1NmM5MFx1NmM5NFx1NmM4Y1x1NmM2OFx1NmM2OVx1NmM3NFx1NmM3Nlx1NmM4Nlx1NmNhOVx1NmNkMFx1NmNkNFx1NmNhZFx1NmNmN1x1NmNmOFx1NmNmMVx1NmNkN1x1NmNiMlx1NmNlMFx1NmNkNlx1NmNmYVx1NmNlYlx1NmNlZVx1NmNiMVx1NmNkM1x1NmNlZlx1NmNmZVx1''@;'; put 'put ''ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIyN10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjI3XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIyN11bZ11dPTU4MTEyK2cseVs1ODExMitnXT1fWzIyN11bZ10pO2ZvcihfWzIyOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTJhOFx1OTJhOVx1OTJhYVx1OTJhYlx1OTJhY1x1OTJhZFx1OTJhZlx1OTJiMFx1OTJiMVx1OTJiMlx1OTJiM1x1OTJiNFx1OTJiNVx1OTJiNlx1OTJiN1x1OTJiOFx1OTJiOVx1OTJiYVx1OTJiYlx1OTJiY1x1OTJiZFx1OTJiZVx1OTJiZlx1OTJjMFx1''@;'; put 'put ''OTJjMVx1OTJjMlx1OTJjM1x1OTJjNFx1OTJjNVx1OTJjNlx1OTJjN1x1OTJjOVx1OTJjYVx1OTJjYlx1OTJjY1x1OTJjZFx1OTJjZVx1OTJjZlx1OTJkMFx1OTJkMVx1OTJkMlx1OTJkM1x1OTJkNFx1OTJkNVx1OTJkNlx1OTJkN1x1OTJkOFx1OTJkOVx1OTJkYVx1OTJkYlx1OTJkY1x1OTJk''@;'; put 'put ''ZFx1OTJkZVx1OTJkZlx1OTJlMFx1OTJlMVx1OTJlMlx1OTJlM1x1OTJlNFx1OTJlNVx1OTJlNlx1OTJlN1x1OTJlOFx1ZmZmZFx1OTJlOVx1OTJlYVx1OTJlYlx1OTJlY1x1OTJlZFx1OTJlZVx1OTJlZlx1OTJmMFx1OTJmMVx1OTJmMlx1OTJmM1x1OTJmNFx1OTJmNVx1OTJmNlx1OTJmN1x1''@;'; put 'put ''OTJmOFx1OTJmOVx1OTJmYVx1OTJmYlx1OTJmY1x1OTJmZFx1OTJmZVx1OTJmZlx1OTMwMFx1OTMwMVx1OTMwMlx1OTMwM1x1OTMwNFx1OTMwNVx1OTMwNlx1OTMwN1x1OTMwOFx1OTMwOVx1NmQzOVx1NmQyN1x1NmQwY1x1NmQ0M1x1NmQ0OFx1NmQwN1x1NmQwNFx1NmQxOVx1NmQwZVx1NmQy''@;'; put 'put ''Ylx1NmQ0ZFx1NmQyZVx1NmQzNVx1NmQxYVx1NmQ0Zlx1NmQ1Mlx1NmQ1NFx1NmQzM1x1NmQ5MVx1NmQ2Zlx1NmQ5ZVx1NmRhMFx1NmQ1ZVx1NmQ5M1x1NmQ5NFx1NmQ1Y1x1NmQ2MFx1NmQ3Y1x1NmQ2M1x1NmUxYVx1NmRjN1x1NmRjNVx1NmRkZVx1NmUwZVx1NmRiZlx1NmRlMFx1NmUxMVx1''@;'; put 'put ''NmRlNlx1NmRkZFx1NmRkOVx1NmUxNlx1NmRhYlx1NmUwY1x1NmRhZVx1NmUyYlx1NmU2ZVx1NmU0ZVx1NmU2Ylx1NmViMlx1NmU1Zlx1NmU4Nlx1NmU1M1x1NmU1NFx1NmUzMlx1NmUyNVx1NmU0NFx1NmVkZlx1NmViMVx1NmU5OFx1NmVlMFx1NmYyZFx1NmVlMlx1NmVhNVx1NmVhN1x1NmVi''@;'; put 'put ''ZFx1NmViYlx1NmViN1x1NmVkN1x1NmViNFx1NmVjZlx1NmU4Zlx1NmVjMlx1NmU5Zlx1NmY2Mlx1NmY0Nlx1NmY0N1x1NmYyNFx1NmYxNVx1NmVmOVx1NmYyZlx1NmYzNlx1NmY0Ylx1NmY3NFx1NmYyYVx1NmYwOVx1NmYyOVx1NmY4OVx1NmY4ZFx1NmY4Y1x1NmY3OFx1NmY3Mlx1NmY3Y1x1''@;'; put 'put ''NmY3YVx1NmZkMVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIyOF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjI4XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIyOF1bZ11dPTU4MzY4K2cseVs1ODM2OCtnXT1fWzIyOF1bZ10pO2ZvcihfWzIyOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTMwYVx1OTMwYlx1OTMwY1x1OTMwZFx1OTMwZVx1OTMwZlx1OTMxMFx1OTMxMVx1OTMxMlx1OTMxM1x1OTMxNFx1OTMxNVx1OTMxNlx1OTMxN1x1OTMxOFx1OTMxOVx1OTMxYVx1OTMxYlx1OTMxY1x1OTMxZFx1OTMxZVx1OTMxZlx1''@;'; put 'put ''OTMyMFx1OTMyMVx1OTMyMlx1OTMyM1x1OTMyNFx1OTMyNVx1OTMyNlx1OTMyN1x1OTMyOFx1OTMyOVx1OTMyYVx1OTMyYlx1OTMyY1x1OTMyZFx1OTMyZVx1OTMyZlx1OTMzMFx1OTMzMVx1OTMzMlx1OTMzM1x1OTMzNFx1OTMzNVx1OTMzNlx1OTMzN1x1OTMzOFx1OTMzOVx1OTMzYVx1OTMz''@;'; put 'put ''Ylx1OTMzY1x1OTMzZFx1OTMzZlx1OTM0MFx1OTM0MVx1OTM0Mlx1OTM0M1x1OTM0NFx1OTM0NVx1OTM0Nlx1OTM0N1x1OTM0OFx1OTM0OVx1ZmZmZFx1OTM0YVx1OTM0Ylx1OTM0Y1x1OTM0ZFx1OTM0ZVx1OTM0Zlx1OTM1MFx1OTM1MVx1OTM1Mlx1OTM1M1x1OTM1NFx1OTM1NVx1OTM1Nlx1''@;'; put 'put ''OTM1N1x1OTM1OFx1OTM1OVx1OTM1YVx1OTM1Ylx1OTM1Y1x1OTM1ZFx1OTM1ZVx1OTM1Zlx1OTM2MFx1OTM2MVx1OTM2Mlx1OTM2M1x1OTM2NFx1OTM2NVx1OTM2Nlx1OTM2N1x1OTM2OFx1OTM2OVx1OTM2Ylx1NmZjOVx1NmZhN1x1NmZiOVx1NmZiNlx1NmZjMlx1NmZlMVx1NmZlZVx1NmZk''@;'; put 'put ''ZVx1NmZlMFx1NmZlZlx1NzAxYVx1NzAyM1x1NzAxYlx1NzAzOVx1NzAzNVx1NzA0Zlx1NzA1ZVx1NWI4MFx1NWI4NFx1NWI5NVx1NWI5M1x1NWJhNVx1NWJiOFx1NzUyZlx1OWE5ZVx1NjQzNFx1NWJlNFx1NWJlZVx1ODkzMFx1NWJmMFx1OGU0N1x1OGIwN1x1OGZiNlx1OGZkM1x1OGZkNVx1''@;'; put 'put ''OGZlNVx1OGZlZVx1OGZlNFx1OGZlOVx1OGZlNlx1OGZmM1x1OGZlOFx1OTAwNVx1OTAwNFx1OTAwYlx1OTAyNlx1OTAxMVx1OTAwZFx1OTAxNlx1OTAyMVx1OTAzNVx1OTAzNlx1OTAyZFx1OTAyZlx1OTA0NFx1OTA1MVx1OTA1Mlx1OTA1MFx1OTA2OFx1OTA1OFx1OTA2Mlx1OTA1Ylx1NjZi''@;'; put 'put ''OVx1OTA3NFx1OTA3ZFx1OTA4Mlx1OTA4OFx1OTA4M1x1OTA4Ylx1NWY1MFx1NWY1N1x1NWY1Nlx1NWY1OFx1NWMzYlx1NTRhYlx1NWM1MFx1NWM1OVx1NWI3MVx1NWM2M1x1NWM2Nlx1N2ZiY1x1NWYyYVx1NWYyOVx1NWYyZFx1ODI3NFx1NWYzY1x1OWIzYlx1NWM2ZVx1NTk4MVx1NTk4M1x1''@;'; put 'put ''NTk4ZFx1NTlhOVx1NTlhYVx1NTlhM1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIyOV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjI5XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIyOV1bZ11dPTU4NjI0K2cseVs1ODYyNCtnXT1fWzIyOV1bZ10pO2ZvcihfWzIzMF09Ilx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTM2Y1x1OTM2ZFx1OTM2ZVx1OTM2Zlx1OTM3MFx1OTM3MVx1OTM3Mlx1OTM3M1x1OTM3NFx1OTM3NVx1OTM3Nlx1OTM3N1x1OTM3OFx1OTM3OVx1OTM3YVx1OTM3Ylx1OTM3Y1x1OTM3ZFx1OTM3ZVx1OTM3Zlx1''@;'; put 'put ''OTM4MFx1OTM4MVx1OTM4Mlx1OTM4M1x1OTM4NFx1OTM4NVx1OTM4Nlx1OTM4N1x1OTM4OFx1OTM4OVx1OTM4YVx1OTM4Ylx1OTM4Y1x1OTM4ZFx1OTM4ZVx1OTM5MFx1OTM5MVx1OTM5Mlx1OTM5M1x1OTM5NFx1OTM5NVx1OTM5Nlx1OTM5N1x1OTM5OFx1OTM5OVx1OTM5YVx1OTM5Ylx1OTM5''@;'; put 'put ''Y1x1OTM5ZFx1OTM5ZVx1OTM5Zlx1OTNhMFx1OTNhMVx1OTNhMlx1OTNhM1x1OTNhNFx1OTNhNVx1OTNhNlx1OTNhN1x1OTNhOFx1OTNhOVx1OTNhYVx1OTNhYlx1ZmZmZFx1OTNhY1x1OTNhZFx1OTNhZVx1OTNhZlx1OTNiMFx1OTNiMVx1OTNiMlx1OTNiM1x1OTNiNFx1OTNiNVx1OTNiNlx1''@;'; put 'put ''OTNiN1x1OTNiOFx1OTNiOVx1OTNiYVx1OTNiYlx1OTNiY1x1OTNiZFx1OTNiZVx1OTNiZlx1OTNjMFx1OTNjMVx1OTNjMlx1OTNjM1x1OTNjNFx1OTNjNVx1OTNjNlx1OTNjN1x1OTNjOFx1OTNjOVx1OTNjYlx1OTNjY1x1OTNjZFx1NTk5N1x1NTljYVx1NTlhYlx1NTk5ZVx1NTlhNFx1NTlk''@;'; put 'put ''Mlx1NTliMlx1NTlhZlx1NTlkN1x1NTliZVx1NWEwNVx1NWEwNlx1NTlkZFx1NWEwOFx1NTllM1x1NTlkOFx1NTlmOVx1NWEwY1x1NWEwOVx1NWEzMlx1NWEzNFx1NWExMVx1NWEyM1x1NWExM1x1NWE0MFx1NWE2N1x1NWE0YVx1NWE1NVx1NWEzY1x1NWE2Mlx1NWE3NVx1ODBlY1x1NWFhYVx1''@;'; put 'put ''NWE5Ylx1NWE3N1x1NWE3YVx1NWFiZVx1NWFlYlx1NWFiMlx1NWFkMlx1NWFkNFx1NWFiOFx1NWFlMFx1NWFlM1x1NWFmMVx1NWFkNlx1NWFlNlx1NWFkOFx1NWFkY1x1NWIwOVx1NWIxN1x1NWIxNlx1NWIzMlx1NWIzN1x1NWI0MFx1NWMxNVx1NWMxY1x1NWI1YVx1NWI2NVx1NWI3M1x1NWI1''@;'; put 'put ''MVx1NWI1M1x1NWI2Mlx1OWE3NVx1OWE3N1x1OWE3OFx1OWE3YVx1OWE3Zlx1OWE3ZFx1OWE4MFx1OWE4MVx1OWE4NVx1OWE4OFx1OWE4YVx1OWE5MFx1OWE5Mlx1OWE5M1x1OWE5Nlx1OWE5OFx1OWE5Ylx1OWE5Y1x1OWE5ZFx1OWE5Zlx1OWFhMFx1OWFhMlx1OWFhM1x1OWFhNVx1OWFhN1x1''@;'; put 'put ''N2U5Zlx1N2VhMVx1N2VhM1x1N2VhNVx1N2VhOFx1N2VhOVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIzMF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjMwXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIzMF1bZ11dPTU4ODgwK2cseVs1ODg4MCtnXT1fWzIzMF1bZ10pO2ZvcihfWzIzMV09''@;'; put 'put ''Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTNjZVx1OTNjZlx1OTNkMFx1OTNkMVx1OTNkMlx1OTNkM1x1OTNkNFx1OTNkNVx1OTNkN1x1OTNkOFx1OTNkOVx1OTNkYVx1OTNkYlx1OTNkY1x1OTNkZFx1OTNkZVx1OTNkZlx1OTNlMFx1''@;'; put 'put ''OTNlMVx1OTNlMlx1OTNlM1x1OTNlNFx1OTNlNVx1OTNlNlx1OTNlN1x1OTNlOFx1OTNlOVx1OTNlYVx1OTNlYlx1OTNlY1x1OTNlZFx1OTNlZVx1OTNlZlx1OTNmMFx1OTNmMVx1OTNmMlx1OTNmM1x1OTNmNFx1OTNmNVx1OTNmNlx1OTNmN1x1OTNmOFx1OTNmOVx1OTNmYVx1OTNmYlx1OTNm''@;'; put 'put ''Y1x1OTNmZFx1OTNmZVx1OTNmZlx1OTQwMFx1OTQwMVx1OTQwMlx1OTQwM1x1OTQwNFx1OTQwNVx1OTQwNlx1OTQwN1x1OTQwOFx1OTQwOVx1OTQwYVx1OTQwYlx1OTQwY1x1OTQwZFx1ZmZmZFx1OTQwZVx1OTQwZlx1OTQxMFx1OTQxMVx1OTQxMlx1OTQxM1x1OTQxNFx1OTQxNVx1OTQxNlx1''@;'; put 'put ''OTQxN1x1OTQxOFx1OTQxOVx1OTQxYVx1OTQxYlx1OTQxY1x1OTQxZFx1OTQxZVx1OTQxZlx1OTQyMFx1OTQyMVx1OTQyMlx1OTQyM1x1OTQyNFx1OTQyNVx1OTQyNlx1OTQyN1x1OTQyOFx1OTQyOVx1OTQyYVx1OTQyYlx1OTQyY1x1OTQyZFx1OTQyZVx1N2VhZFx1N2ViMFx1N2ViZVx1N2Vj''@;'; put 'put ''MFx1N2VjMVx1N2VjMlx1N2VjOVx1N2VjYlx1N2VjY1x1N2VkMFx1N2VkNFx1N2VkN1x1N2VkYlx1N2VlMFx1N2VlMVx1N2VlOFx1N2VlYlx1N2VlZVx1N2VlZlx1N2VmMVx1N2VmMlx1N2YwZFx1N2VmNlx1N2VmYVx1N2VmYlx1N2VmZVx1N2YwMVx1N2YwMlx1N2YwM1x1N2YwN1x1N2YwOFx1''@;'; put 'put ''N2YwYlx1N2YwY1x1N2YwZlx1N2YxMVx1N2YxMlx1N2YxN1x1N2YxOVx1N2YxY1x1N2YxYlx1N2YxZlx1N2YyMVx1N2YyMlx1N2YyM1x1N2YyNFx1N2YyNVx1N2YyNlx1N2YyN1x1N2YyYVx1N2YyYlx1N2YyY1x1N2YyZFx1N2YyZlx1N2YzMFx1N2YzMVx1N2YzMlx1N2YzM1x1N2YzNVx1NWU3''@;'; put 'put ''YVx1NzU3Zlx1NWRkYlx1NzUzZVx1OTA5NVx1NzM4ZVx1NzM5MVx1NzNhZVx1NzNhMlx1NzM5Zlx1NzNjZlx1NzNjMlx1NzNkMVx1NzNiN1x1NzNiM1x1NzNjMFx1NzNjOVx1NzNjOFx1NzNlNVx1NzNkOVx1OTg3Y1x1NzQwYVx1NzNlOVx1NzNlN1x1NzNkZVx1NzNiYVx1NzNmMlx1NzQwZlx1''@;'; put 'put ''NzQyYVx1NzQ1Ylx1NzQyNlx1NzQyNVx1NzQyOFx1NzQzMFx1NzQyZVx1NzQyY1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIzMV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjMxXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIzMV1bZ11dPTU5MTM2K2cseVs1OTEzNitnXT1fWzIzMV1bZ10p''@;'; put 'put ''O2ZvcihfWzIzMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTQyZlx1OTQzMFx1OTQzMVx1OTQzMlx1OTQzM1x1OTQzNFx1OTQzNVx1OTQzNlx1OTQzN1x1OTQzOFx1OTQzOVx1OTQzYVx1OTQzYlx1OTQzY1x1OTQzZFx1OTQzZlx1''@;'; put 'put ''OTQ0MFx1OTQ0MVx1OTQ0Mlx1OTQ0M1x1OTQ0NFx1OTQ0NVx1OTQ0Nlx1OTQ0N1x1OTQ0OFx1OTQ0OVx1OTQ0YVx1OTQ0Ylx1OTQ0Y1x1OTQ0ZFx1OTQ0ZVx1OTQ0Zlx1OTQ1MFx1OTQ1MVx1OTQ1Mlx1OTQ1M1x1OTQ1NFx1OTQ1NVx1OTQ1Nlx1OTQ1N1x1OTQ1OFx1OTQ1OVx1OTQ1YVx1OTQ1''@;'; put 'put ''Ylx1OTQ1Y1x1OTQ1ZFx1OTQ1ZVx1OTQ1Zlx1OTQ2MFx1OTQ2MVx1OTQ2Mlx1OTQ2M1x1OTQ2NFx1OTQ2NVx1OTQ2Nlx1OTQ2N1x1OTQ2OFx1OTQ2OVx1OTQ2YVx1OTQ2Y1x1OTQ2ZFx1OTQ2ZVx1OTQ2Zlx1ZmZmZFx1OTQ3MFx1OTQ3MVx1OTQ3Mlx1OTQ3M1x1OTQ3NFx1OTQ3NVx1OTQ3Nlx1''@;'; put 'put ''OTQ3N1x1OTQ3OFx1OTQ3OVx1OTQ3YVx1OTQ3Ylx1OTQ3Y1x1OTQ3ZFx1OTQ3ZVx1OTQ3Zlx1OTQ4MFx1OTQ4MVx1OTQ4Mlx1OTQ4M1x1OTQ4NFx1OTQ5MVx1OTQ5Nlx1OTQ5OFx1OTRjN1x1OTRjZlx1OTRkM1x1OTRkNFx1OTRkYVx1OTRlNlx1OTRmYlx1OTUxY1x1OTUyMFx1NzQxYlx1NzQx''@;'; put 'put ''YVx1NzQ0MVx1NzQ1Y1x1NzQ1N1x1NzQ1NVx1NzQ1OVx1NzQ3N1x1NzQ2ZFx1NzQ3ZVx1NzQ5Y1x1NzQ4ZVx1NzQ4MFx1NzQ4MVx1NzQ4N1x1NzQ4Ylx1NzQ5ZVx1NzRhOFx1NzRhOVx1NzQ5MFx1NzRhN1x1NzRkMlx1NzRiYVx1OTdlYVx1OTdlYlx1OTdlY1x1Njc0Y1x1Njc1M1x1Njc1ZVx1''@;'; put 'put ''Njc0OFx1Njc2OVx1NjdhNVx1Njc4N1x1Njc2YVx1Njc3M1x1Njc5OFx1NjdhN1x1Njc3NVx1NjdhOFx1Njc5ZVx1NjdhZFx1Njc4Ylx1Njc3N1x1Njc3Y1x1NjdmMFx1NjgwOVx1NjdkOFx1NjgwYVx1NjdlOVx1NjdiMFx1NjgwY1x1NjdkOVx1NjdiNVx1NjdkYVx1NjdiM1x1NjdkZFx1Njgw''@;'; put 'put ''MFx1NjdjM1x1NjdiOFx1NjdlMlx1NjgwZVx1NjdjMVx1NjdmZFx1NjgzMlx1NjgzM1x1Njg2MFx1Njg2MVx1Njg0ZVx1Njg2Mlx1Njg0NFx1Njg2NFx1Njg4M1x1NjgxZFx1Njg1NVx1Njg2Nlx1Njg0MVx1Njg2N1x1Njg0MFx1NjgzZVx1Njg0YVx1Njg0OVx1NjgyOVx1NjhiNVx1Njg4Zlx1''@;'; put 'put ''Njg3NFx1Njg3N1x1Njg5M1x1Njg2Ylx1NjhjMlx1Njk2ZVx1NjhmY1x1NjkxZlx1NjkyMFx1NjhmOVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIzMl0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjMyXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIzMl1bZ11dPTU5MzkyK2cseVs1OTM5Mitn''@;'; put 'put ''XT1fWzIzMl1bZ10pO2ZvcihfWzIzM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTUyN1x1OTUzM1x1OTUzZFx1OTU0M1x1OTU0OFx1OTU0Ylx1OTU1NVx1OTU1YVx1OTU2MFx1OTU2ZVx1OTU3NFx1OTU3NVx1OTU3N1x1OTU3OFx1''@;'; put 'put ''OTU3OVx1OTU3YVx1OTU3Ylx1OTU3Y1x1OTU3ZFx1OTU3ZVx1OTU4MFx1OTU4MVx1OTU4Mlx1OTU4M1x1OTU4NFx1OTU4NVx1OTU4Nlx1OTU4N1x1OTU4OFx1OTU4OVx1OTU4YVx1OTU4Ylx1OTU4Y1x1OTU4ZFx1OTU4ZVx1OTU4Zlx1OTU5MFx1OTU5MVx1OTU5Mlx1OTU5M1x1OTU5NFx1OTU5''@;'; put 'put ''NVx1OTU5Nlx1OTU5N1x1OTU5OFx1OTU5OVx1OTU5YVx1OTU5Ylx1OTU5Y1x1OTU5ZFx1OTU5ZVx1OTU5Zlx1OTVhMFx1OTVhMVx1OTVhMlx1OTVhM1x1OTVhNFx1OTVhNVx1OTVhNlx1OTVhN1x1OTVhOFx1OTVhOVx1OTVhYVx1ZmZmZFx1OTVhYlx1OTVhY1x1OTVhZFx1OTVhZVx1OTVhZlx1''@;'; put 'put ''OTViMFx1OTViMVx1OTViMlx1OTViM1x1OTViNFx1OTViNVx1OTViNlx1OTViN1x1OTViOFx1OTViOVx1OTViYVx1OTViYlx1OTViY1x1OTViZFx1OTViZVx1OTViZlx1OTVjMFx1OTVjMVx1OTVjMlx1OTVjM1x1OTVjNFx1OTVjNVx1OTVjNlx1OTVjN1x1OTVjOFx1OTVjOVx1OTVjYVx1OTVj''@;'; put 'put ''Ylx1NjkyNFx1NjhmMFx1NjkwYlx1NjkwMVx1Njk1N1x1NjhlM1x1NjkxMFx1Njk3MVx1NjkzOVx1Njk2MFx1Njk0Mlx1Njk1ZFx1Njk4NFx1Njk2Ylx1Njk4MFx1Njk5OFx1Njk3OFx1NjkzNFx1NjljY1x1Njk4N1x1Njk4OFx1NjljZVx1Njk4OVx1Njk2Nlx1Njk2M1x1Njk3OVx1Njk5Ylx1''@;'; put 'put ''NjlhN1x1NjliYlx1NjlhYlx1NjlhZFx1NjlkNFx1NjliMVx1NjljMVx1NjljYVx1NjlkZlx1Njk5NVx1NjllMFx1Njk4ZFx1NjlmZlx1NmEyZlx1NjllZFx1NmExN1x1NmExOFx1NmE2NVx1NjlmMlx1NmE0NFx1NmEzZVx1NmFhMFx1NmE1MFx1NmE1Ylx1NmEzNVx1NmE4ZVx1NmE3OVx1NmEz''@;'; put 'put ''ZFx1NmEyOFx1NmE1OFx1NmE3Y1x1NmE5MVx1NmE5MFx1NmFhOVx1NmE5N1x1NmFhYlx1NzMzN1x1NzM1Mlx1NmI4MVx1NmI4Mlx1NmI4N1x1NmI4NFx1NmI5Mlx1NmI5M1x1NmI4ZFx1NmI5YVx1NmI5Ylx1NmJhMVx1NmJhYVx1OGY2Ylx1OGY2ZFx1OGY3MVx1OGY3Mlx1OGY3M1x1OGY3NVx1''@;'; put 'put ''OGY3Nlx1OGY3OFx1OGY3N1x1OGY3OVx1OGY3YVx1OGY3Y1x1OGY3ZVx1OGY4MVx1OGY4Mlx1OGY4NFx1OGY4N1x1OGY4Ylx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIzM10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjMzXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIzM11bZ11dPTU5NjQ4''@;'; put 'put ''K2cseVs1OTY0OCtnXT1fWzIzM11bZ10pO2ZvcihfWzIzNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTVjY1x1OTVjZFx1OTVjZVx1OTVjZlx1OTVkMFx1OTVkMVx1OTVkMlx1OTVkM1x1OTVkNFx1OTVkNVx1OTVkNlx1OTVkN1x1''@;'; put 'put ''OTVkOFx1OTVkOVx1OTVkYVx1OTVkYlx1OTVkY1x1OTVkZFx1OTVkZVx1OTVkZlx1OTVlMFx1OTVlMVx1OTVlMlx1OTVlM1x1OTVlNFx1OTVlNVx1OTVlNlx1OTVlN1x1OTVlY1x1OTVmZlx1OTYwN1x1OTYxM1x1OTYxOFx1OTYxYlx1OTYxZVx1OTYyMFx1OTYyM1x1OTYyNFx1OTYyNVx1OTYy''@;'; put 'put ''Nlx1OTYyN1x1OTYyOFx1OTYyOVx1OTYyYlx1OTYyY1x1OTYyZFx1OTYyZlx1OTYzMFx1OTYzN1x1OTYzOFx1OTYzOVx1OTYzYVx1OTYzZVx1OTY0MVx1OTY0M1x1OTY0YVx1OTY0ZVx1OTY0Zlx1OTY1MVx1OTY1Mlx1OTY1M1x1OTY1Nlx1OTY1N1x1ZmZmZFx1OTY1OFx1OTY1OVx1OTY1YVx1''@;'; put 'put ''OTY1Y1x1OTY1ZFx1OTY1ZVx1OTY2MFx1OTY2M1x1OTY2NVx1OTY2Nlx1OTY2Ylx1OTY2ZFx1OTY2ZVx1OTY2Zlx1OTY3MFx1OTY3MVx1OTY3M1x1OTY3OFx1OTY3OVx1OTY3YVx1OTY3Ylx1OTY3Y1x1OTY3ZFx1OTY3ZVx1OTY3Zlx1OTY4MFx1OTY4MVx1OTY4Mlx1OTY4M1x1OTY4NFx1OTY4''@;'; put 'put ''N1x1OTY4OVx1OTY4YVx1OGY4ZFx1OGY4ZVx1OGY4Zlx1OGY5OFx1OGY5YVx1OGVjZVx1NjIwYlx1NjIxN1x1NjIxYlx1NjIxZlx1NjIyMlx1NjIyMVx1NjIyNVx1NjIyNFx1NjIyY1x1ODFlN1x1NzRlZlx1NzRmNFx1NzRmZlx1NzUwZlx1NzUxMVx1NzUxM1x1NjUzNFx1NjVlZVx1NjVlZlx1''@;'; put 'put ''NjVmMFx1NjYwYVx1NjYxOVx1Njc3Mlx1NjYwM1x1NjYxNVx1NjYwMFx1NzA4NVx1NjZmN1x1NjYxZFx1NjYzNFx1NjYzMVx1NjYzNlx1NjYzNVx1ODAwNlx1NjY1Zlx1NjY1NFx1NjY0MVx1NjY0Zlx1NjY1Nlx1NjY2MVx1NjY1N1x1NjY3N1x1NjY4NFx1NjY4Y1x1NjZhN1x1NjY5ZFx1NjZi''@;'; put 'put ''ZVx1NjZkYlx1NjZkY1x1NjZlNlx1NjZlOVx1OGQzMlx1OGQzM1x1OGQzNlx1OGQzYlx1OGQzZFx1OGQ0MFx1OGQ0NVx1OGQ0Nlx1OGQ0OFx1OGQ0OVx1OGQ0N1x1OGQ0ZFx1OGQ1NVx1OGQ1OVx1ODljN1x1ODljYVx1ODljYlx1ODljY1x1ODljZVx1ODljZlx1ODlkMFx1ODlkMVx1NzI2ZVx1''@;'; put 'put ''NzI5Zlx1NzI1ZFx1NzI2Nlx1NzI2Zlx1NzI3ZVx1NzI3Zlx1NzI4NFx1NzI4Ylx1NzI4ZFx1NzI4Zlx1NzI5Mlx1NjMwOFx1NjMzMlx1NjNiMFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIzNF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjM0XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIz''@;'; put 'put ''NF1bZ11dPTU5OTA0K2cseVs1OTkwNCtnXT1fWzIzNF1bZ10pO2ZvcihfWzIzNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTY4Y1x1OTY4ZVx1OTY5MVx1OTY5Mlx1OTY5M1x1OTY5NVx1OTY5Nlx1OTY5YVx1OTY5Ylx1OTY5ZFx1''@;'; put 'put ''OTY5ZVx1OTY5Zlx1OTZhMFx1OTZhMVx1OTZhMlx1OTZhM1x1OTZhNFx1OTZhNVx1OTZhNlx1OTZhOFx1OTZhOVx1OTZhYVx1OTZhYlx1OTZhY1x1OTZhZFx1OTZhZVx1OTZhZlx1OTZiMVx1OTZiMlx1OTZiNFx1OTZiNVx1OTZiN1x1OTZiOFx1OTZiYVx1OTZiYlx1OTZiZlx1OTZjMlx1OTZj''@;'; put 'put ''M1x1OTZjOFx1OTZjYVx1OTZjYlx1OTZkMFx1OTZkMVx1OTZkM1x1OTZkNFx1OTZkNlx1OTZkN1x1OTZkOFx1OTZkOVx1OTZkYVx1OTZkYlx1OTZkY1x1OTZkZFx1OTZkZVx1OTZkZlx1OTZlMVx1OTZlMlx1OTZlM1x1OTZlNFx1OTZlNVx1OTZlNlx1OTZlN1x1OTZlYlx1ZmZmZFx1OTZlY1x1''@;'; put 'put ''OTZlZFx1OTZlZVx1OTZmMFx1OTZmMVx1OTZmMlx1OTZmNFx1OTZmNVx1OTZmOFx1OTZmYVx1OTZmYlx1OTZmY1x1OTZmZFx1OTZmZlx1OTcwMlx1OTcwM1x1OTcwNVx1OTcwYVx1OTcwYlx1OTcwY1x1OTcxMFx1OTcxMVx1OTcxMlx1OTcxNFx1OTcxNVx1OTcxN1x1OTcxOFx1OTcxOVx1OTcx''@;'; put 'put ''YVx1OTcxYlx1OTcxZFx1OTcxZlx1OTcyMFx1NjQzZlx1NjRkOFx1ODAwNFx1NmJlYVx1NmJmM1x1NmJmZFx1NmJmNVx1NmJmOVx1NmMwNVx1NmMwN1x1NmMwNlx1NmMwZFx1NmMxNVx1NmMxOFx1NmMxOVx1NmMxYVx1NmMyMVx1NmMyOVx1NmMyNFx1NmMyYVx1NmMzMlx1NjUzNVx1NjU1NVx1''@;'; put 'put ''NjU2Ylx1NzI0ZFx1NzI1Mlx1NzI1Nlx1NzIzMFx1ODY2Mlx1NTIxNlx1ODA5Zlx1ODA5Y1x1ODA5M1x1ODBiY1x1NjcwYVx1ODBiZFx1ODBiMVx1ODBhYlx1ODBhZFx1ODBiNFx1ODBiN1x1ODBlN1x1ODBlOFx1ODBlOVx1ODBlYVx1ODBkYlx1ODBjMlx1ODBjNFx1ODBkOVx1ODBjZFx1ODBk''@;'; put 'put ''N1x1NjcxMFx1ODBkZFx1ODBlYlx1ODBmMVx1ODBmNFx1ODBlZFx1ODEwZFx1ODEwZVx1ODBmMlx1ODBmY1x1NjcxNVx1ODExMlx1OGM1YVx1ODEzNlx1ODExZVx1ODEyY1x1ODExOFx1ODEzMlx1ODE0OFx1ODE0Y1x1ODE1M1x1ODE3NFx1ODE1OVx1ODE1YVx1ODE3MVx1ODE2MFx1ODE2OVx1''@;'; put 'put ''ODE3Y1x1ODE3ZFx1ODE2ZFx1ODE2N1x1NTg0ZFx1NWFiNVx1ODE4OFx1ODE4Mlx1ODE5MVx1NmVkNVx1ODFhM1x1ODFhYVx1ODFjY1x1NjcyNlx1ODFjYVx1ODFiYlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIzNV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjM1XVtnXS5jaGFyQ29kZUF0''@;'; put 'put ''KDApJiYoSVtfWzIzNV1bZ11dPTYwMTYwK2cseVs2MDE2MCtnXT1fWzIzNV1bZ10pO2ZvcihfWzIzNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTcyMVx1OTcyMlx1OTcyM1x1OTcyNFx1OTcyNVx1OTcyNlx1OTcyN1x1OTcyOFx1''@;'; put 'put ''OTcyOVx1OTcyYlx1OTcyY1x1OTcyZVx1OTcyZlx1OTczMVx1OTczM1x1OTczNFx1OTczNVx1OTczNlx1OTczN1x1OTczYVx1OTczYlx1OTczY1x1OTczZFx1OTczZlx1OTc0MFx1OTc0MVx1OTc0Mlx1OTc0M1x1OTc0NFx1OTc0NVx1OTc0Nlx1OTc0N1x1OTc0OFx1OTc0OVx1OTc0YVx1OTc0''@;'; put 'put ''Ylx1OTc0Y1x1OTc0ZFx1OTc0ZVx1OTc0Zlx1OTc1MFx1OTc1MVx1OTc1NFx1OTc1NVx1OTc1N1x1OTc1OFx1OTc1YVx1OTc1Y1x1OTc1ZFx1OTc1Zlx1OTc2M1x1OTc2NFx1OTc2Nlx1OTc2N1x1OTc2OFx1OTc2YVx1OTc2Ylx1OTc2Y1x1OTc2ZFx1OTc2ZVx1OTc2Zlx1OTc3MFx1OTc3MVx1''@;'; put 'put ''ZmZmZFx1OTc3Mlx1OTc3NVx1OTc3N1x1OTc3OFx1OTc3OVx1OTc3YVx1OTc3Ylx1OTc3ZFx1OTc3ZVx1OTc3Zlx1OTc4MFx1OTc4MVx1OTc4Mlx1OTc4M1x1OTc4NFx1OTc4Nlx1OTc4N1x1OTc4OFx1OTc4OVx1OTc4YVx1OTc4Y1x1OTc4ZVx1OTc4Zlx1OTc5MFx1OTc5M1x1OTc5NVx1OTc5''@;'; put 'put ''Nlx1OTc5N1x1OTc5OVx1OTc5YVx1OTc5Ylx1OTc5Y1x1OTc5ZFx1ODFjMVx1ODFhNlx1NmIyNFx1NmIzN1x1NmIzOVx1NmI0M1x1NmI0Nlx1NmI1OVx1OThkMVx1OThkMlx1OThkM1x1OThkNVx1OThkOVx1OThkYVx1NmJiM1x1NWY0MFx1NmJjMlx1ODlmM1x1NjU5MFx1OWY1MVx1NjU5M1x1''@;'; put 'put ''NjViY1x1NjVjNlx1NjVjNFx1NjVjM1x1NjVjY1x1NjVjZVx1NjVkMlx1NjVkNlx1NzA4MFx1NzA5Y1x1NzA5Nlx1NzA5ZFx1NzBiYlx1NzBjMFx1NzBiN1x1NzBhYlx1NzBiMVx1NzBlOFx1NzBjYVx1NzExMFx1NzExM1x1NzExNlx1NzEyZlx1NzEzMVx1NzE3M1x1NzE1Y1x1NzE2OFx1NzE0''@;'; put 'put ''NVx1NzE3Mlx1NzE0YVx1NzE3OFx1NzE3YVx1NzE5OFx1NzFiM1x1NzFiNVx1NzFhOFx1NzFhMFx1NzFlMFx1NzFkNFx1NzFlN1x1NzFmOVx1NzIxZFx1NzIyOFx1NzA2Y1x1NzExOFx1NzE2Nlx1NzFiOVx1NjIzZVx1NjIzZFx1NjI0M1x1NjI0OFx1NjI0OVx1NzkzYlx1Nzk0MFx1Nzk0Nlx1''@;'; put 'put ''Nzk0OVx1Nzk1Ylx1Nzk1Y1x1Nzk1M1x1Nzk1YVx1Nzk2Mlx1Nzk1N1x1Nzk2MFx1Nzk2Zlx1Nzk2N1x1Nzk3YVx1Nzk4NVx1Nzk4YVx1Nzk5YVx1NzlhN1x1NzliM1x1NWZkMVx1NWZkMFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIzNl0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjM2XVtn''@;'; put 'put ''XS5jaGFyQ29kZUF0KDApJiYoSVtfWzIzNl1bZ11dPTYwNDE2K2cseVs2MDQxNitnXT1fWzIzNl1bZ10pO2ZvcihfWzIzN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTc5ZVx1OTc5Zlx1OTdhMVx1OTdhMlx1OTdhNFx1OTdhNVx1''@;'; put 'put ''OTdhNlx1OTdhN1x1OTdhOFx1OTdhOVx1OTdhYVx1OTdhY1x1OTdhZVx1OTdiMFx1OTdiMVx1OTdiM1x1OTdiNVx1OTdiNlx1OTdiN1x1OTdiOFx1OTdiOVx1OTdiYVx1OTdiYlx1OTdiY1x1OTdiZFx1OTdiZVx1OTdiZlx1OTdjMFx1OTdjMVx1OTdjMlx1OTdjM1x1OTdjNFx1OTdjNVx1OTdj''@;'; put 'put ''Nlx1OTdjN1x1OTdjOFx1OTdjOVx1OTdjYVx1OTdjYlx1OTdjY1x1OTdjZFx1OTdjZVx1OTdjZlx1OTdkMFx1OTdkMVx1OTdkMlx1OTdkM1x1OTdkNFx1OTdkNVx1OTdkNlx1OTdkN1x1OTdkOFx1OTdkOVx1OTdkYVx1OTdkYlx1OTdkY1x1OTdkZFx1OTdkZVx1OTdkZlx1OTdlMFx1OTdlMVx1''@;'; put 'put ''OTdlMlx1OTdlM1x1ZmZmZFx1OTdlNFx1OTdlNVx1OTdlOFx1OTdlZVx1OTdlZlx1OTdmMFx1OTdmMVx1OTdmMlx1OTdmNFx1OTdmN1x1OTdmOFx1OTdmOVx1OTdmYVx1OTdmYlx1OTdmY1x1OTdmZFx1OTdmZVx1OTdmZlx1OTgwMFx1OTgwMVx1OTgwMlx1OTgwM1x1OTgwNFx1OTgwNVx1OTgw''@;'; put 'put ''Nlx1OTgwN1x1OTgwOFx1OTgwOVx1OTgwYVx1OTgwYlx1OTgwY1x1OTgwZFx1OTgwZVx1NjAzY1x1NjA1ZFx1NjA1YVx1NjA2N1x1NjA0MVx1NjA1OVx1NjA2M1x1NjBhYlx1NjEwNlx1NjEwZFx1NjE1ZFx1NjFhOVx1NjE5ZFx1NjFjYlx1NjFkMVx1NjIwNlx1ODA4MFx1ODA3Zlx1NmM5M1x1''@;'; put 'put ''NmNmNlx1NmRmY1x1NzdmNlx1NzdmOFx1NzgwMFx1NzgwOVx1NzgxN1x1NzgxOFx1NzgxMVx1NjVhYlx1NzgyZFx1NzgxY1x1NzgxZFx1NzgzOVx1NzgzYVx1NzgzYlx1NzgxZlx1NzgzY1x1NzgyNVx1NzgyY1x1NzgyM1x1NzgyOVx1Nzg0ZVx1Nzg2ZFx1Nzg1Nlx1Nzg1N1x1NzgyNlx1Nzg1''@;'; put 'put ''MFx1Nzg0N1x1Nzg0Y1x1Nzg2YVx1Nzg5Ylx1Nzg5M1x1Nzg5YVx1Nzg4N1x1Nzg5Y1x1NzhhMVx1NzhhM1x1NzhiMlx1NzhiOVx1NzhhNVx1NzhkNFx1NzhkOVx1NzhjOVx1NzhlY1x1NzhmMlx1NzkwNVx1NzhmNFx1NzkxM1x1NzkyNFx1NzkxZVx1NzkzNFx1OWY5Ylx1OWVmOVx1OWVmYlx1''@;'; put 'put ''OWVmY1x1NzZmMVx1NzcwNFx1NzcwZFx1NzZmOVx1NzcwN1x1NzcwOFx1NzcxYVx1NzcyMlx1NzcxOVx1NzcyZFx1NzcyNlx1NzczNVx1NzczOFx1Nzc1MFx1Nzc1MVx1Nzc0N1x1Nzc0M1x1Nzc1YVx1Nzc2OFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIzN10ubGVuZ3RoOysrZyk2NTUz''@;'; put 'put ''MyE9PV9bMjM3XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIzN11bZ11dPTYwNjcyK2cseVs2MDY3MitnXT1fWzIzN11bZ10pO2ZvcihfWzIzOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTgwZlx1OTgxMFx1OTgxMVx1OTgxMlx1''@;'; put 'put ''OTgxM1x1OTgxNFx1OTgxNVx1OTgxNlx1OTgxN1x1OTgxOFx1OTgxOVx1OTgxYVx1OTgxYlx1OTgxY1x1OTgxZFx1OTgxZVx1OTgxZlx1OTgyMFx1OTgyMVx1OTgyMlx1OTgyM1x1OTgyNFx1OTgyNVx1OTgyNlx1OTgyN1x1OTgyOFx1OTgyOVx1OTgyYVx1OTgyYlx1OTgyY1x1OTgyZFx1OTgy''@;'; put 'put ''ZVx1OTgyZlx1OTgzMFx1OTgzMVx1OTgzMlx1OTgzM1x1OTgzNFx1OTgzNVx1OTgzNlx1OTgzN1x1OTgzOFx1OTgzOVx1OTgzYVx1OTgzYlx1OTgzY1x1OTgzZFx1OTgzZVx1OTgzZlx1OTg0MFx1OTg0MVx1OTg0Mlx1OTg0M1x1OTg0NFx1OTg0NVx1OTg0Nlx1OTg0N1x1OTg0OFx1OTg0OVx1''@;'; put 'put ''OTg0YVx1OTg0Ylx1OTg0Y1x1OTg0ZFx1ZmZmZFx1OTg0ZVx1OTg0Zlx1OTg1MFx1OTg1MVx1OTg1Mlx1OTg1M1x1OTg1NFx1OTg1NVx1OTg1Nlx1OTg1N1x1OTg1OFx1OTg1OVx1OTg1YVx1OTg1Ylx1OTg1Y1x1OTg1ZFx1OTg1ZVx1OTg1Zlx1OTg2MFx1OTg2MVx1OTg2Mlx1OTg2M1x1OTg2''@;'; put 'put ''NFx1OTg2NVx1OTg2Nlx1OTg2N1x1OTg2OFx1OTg2OVx1OTg2YVx1OTg2Ylx1OTg2Y1x1OTg2ZFx1OTg2ZVx1Nzc2Mlx1Nzc2NVx1Nzc3Zlx1Nzc4ZFx1Nzc3ZFx1Nzc4MFx1Nzc4Y1x1Nzc5MVx1Nzc5Zlx1NzdhMFx1NzdiMFx1NzdiNVx1NzdiZFx1NzUzYVx1NzU0MFx1NzU0ZVx1NzU0Ylx1''@;'; put 'put ''NzU0OFx1NzU1Ylx1NzU3Mlx1NzU3OVx1NzU4M1x1N2Y1OFx1N2Y2MVx1N2Y1Zlx1OGE0OFx1N2Y2OFx1N2Y3NFx1N2Y3MVx1N2Y3OVx1N2Y4MVx1N2Y3ZVx1NzZjZFx1NzZlNVx1ODgzMlx1OTQ4NVx1OTQ4Nlx1OTQ4N1x1OTQ4Ylx1OTQ4YVx1OTQ4Y1x1OTQ4ZFx1OTQ4Zlx1OTQ5MFx1OTQ5''@;'; put 'put ''NFx1OTQ5N1x1OTQ5NVx1OTQ5YVx1OTQ5Ylx1OTQ5Y1x1OTRhM1x1OTRhNFx1OTRhYlx1OTRhYVx1OTRhZFx1OTRhY1x1OTRhZlx1OTRiMFx1OTRiMlx1OTRiNFx1OTRiNlx1OTRiN1x1OTRiOFx1OTRiOVx1OTRiYVx1OTRiY1x1OTRiZFx1OTRiZlx1OTRjNFx1OTRjOFx1OTRjOVx1OTRjYVx1''@;'; put 'put ''OTRjYlx1OTRjY1x1OTRjZFx1OTRjZVx1OTRkMFx1OTRkMVx1OTRkMlx1OTRkNVx1OTRkNlx1OTRkN1x1OTRkOVx1OTRkOFx1OTRkYlx1OTRkZVx1OTRkZlx1OTRlMFx1OTRlMlx1OTRlNFx1OTRlNVx1OTRlN1x1OTRlOFx1OTRlYVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIzOF0ubGVu''@;'; put 'put ''Z3RoOysrZyk2NTUzMyE9PV9bMjM4XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIzOF1bZ11dPTYwOTI4K2cseVs2MDkyOCtnXT1fWzIzOF1bZ10pO2ZvcihfWzIzOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTg2Zlx1OTg3MFx1''@;'; put 'put ''OTg3MVx1OTg3Mlx1OTg3M1x1OTg3NFx1OTg4Ylx1OTg4ZVx1OTg5Mlx1OTg5NVx1OTg5OVx1OThhM1x1OThhOFx1OThhOVx1OThhYVx1OThhYlx1OThhY1x1OThhZFx1OThhZVx1OThhZlx1OThiMFx1OThiMVx1OThiMlx1OThiM1x1OThiNFx1OThiNVx1OThiNlx1OThiN1x1OThiOFx1OThi''@;'; put 'put ''OVx1OThiYVx1OThiYlx1OThiY1x1OThiZFx1OThiZVx1OThiZlx1OThjMFx1OThjMVx1OThjMlx1OThjM1x1OThjNFx1OThjNVx1OThjNlx1OThjN1x1OThjOFx1OThjOVx1OThjYVx1OThjYlx1OThjY1x1OThjZFx1OThjZlx1OThkMFx1OThkNFx1OThkNlx1OThkN1x1OThkYlx1OThkY1x1''@;'; put 'put ''OThkZFx1OThlMFx1OThlMVx1OThlMlx1OThlM1x1OThlNFx1ZmZmZFx1OThlNVx1OThlNlx1OThlOVx1OThlYVx1OThlYlx1OThlY1x1OThlZFx1OThlZVx1OThlZlx1OThmMFx1OThmMVx1OThmMlx1OThmM1x1OThmNFx1OThmNVx1OThmNlx1OThmN1x1OThmOFx1OThmOVx1OThmYVx1OThm''@;'; put 'put ''Ylx1OThmY1x1OThmZFx1OThmZVx1OThmZlx1OTkwMFx1OTkwMVx1OTkwMlx1OTkwM1x1OTkwNFx1OTkwNVx1OTkwNlx1OTkwN1x1OTRlOVx1OTRlYlx1OTRlZVx1OTRlZlx1OTRmM1x1OTRmNFx1OTRmNVx1OTRmN1x1OTRmOVx1OTRmY1x1OTRmZFx1OTRmZlx1OTUwM1x1OTUwMlx1OTUwNlx1''@;'; put 'put ''OTUwN1x1OTUwOVx1OTUwYVx1OTUwZFx1OTUwZVx1OTUwZlx1OTUxMlx1OTUxM1x1OTUxNFx1OTUxNVx1OTUxNlx1OTUxOFx1OTUxYlx1OTUxZFx1OTUxZVx1OTUxZlx1OTUyMlx1OTUyYVx1OTUyYlx1OTUyOVx1OTUyY1x1OTUzMVx1OTUzMlx1OTUzNFx1OTUzNlx1OTUzN1x1OTUzOFx1OTUz''@;'; put 'put ''Y1x1OTUzZVx1OTUzZlx1OTU0Mlx1OTUzNVx1OTU0NFx1OTU0NVx1OTU0Nlx1OTU0OVx1OTU0Y1x1OTU0ZVx1OTU0Zlx1OTU1Mlx1OTU1M1x1OTU1NFx1OTU1Nlx1OTU1N1x1OTU1OFx1OTU1OVx1OTU1Ylx1OTU1ZVx1OTU1Zlx1OTU1ZFx1OTU2MVx1OTU2Mlx1OTU2NFx1OTU2NVx1OTU2Nlx1''@;'; put 'put ''OTU2N1x1OTU2OFx1OTU2OVx1OTU2YVx1OTU2Ylx1OTU2Y1x1OTU2Zlx1OTU3MVx1OTU3Mlx1OTU3M1x1OTUzYVx1NzdlN1x1NzdlY1x1OTZjOVx1NzlkNVx1NzllZFx1NzllM1x1NzllYlx1N2EwNlx1NWQ0N1x1N2EwM1x1N2EwMlx1N2ExZVx1N2ExNFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtn''@;'; put 'put ''IT1fWzIzOV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjM5XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIzOV1bZ11dPTYxMTg0K2cseVs2MTE4NCtnXT1fWzIzOV1bZ10pO2ZvcihfWzI0MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''OTkwOFx1OTkwOVx1OTkwYVx1OTkwYlx1OTkwY1x1OTkwZVx1OTkwZlx1OTkxMVx1OTkxMlx1OTkxM1x1OTkxNFx1OTkxNVx1OTkxNlx1OTkxN1x1OTkxOFx1OTkxOVx1OTkxYVx1OTkxYlx1OTkxY1x1OTkxZFx1OTkxZVx1OTkxZlx1OTkyMFx1OTkyMVx1OTkyMlx1OTkyM1x1OTkyNFx1OTky''@;'; put 'put ''NVx1OTkyNlx1OTkyN1x1OTkyOFx1OTkyOVx1OTkyYVx1OTkyYlx1OTkyY1x1OTkyZFx1OTkyZlx1OTkzMFx1OTkzMVx1OTkzMlx1OTkzM1x1OTkzNFx1OTkzNVx1OTkzNlx1OTkzN1x1OTkzOFx1OTkzOVx1OTkzYVx1OTkzYlx1OTkzY1x1OTkzZFx1OTkzZVx1OTkzZlx1OTk0MFx1OTk0MVx1''@;'; put 'put ''OTk0Mlx1OTk0M1x1OTk0NFx1OTk0NVx1OTk0Nlx1OTk0N1x1OTk0OFx1OTk0OVx1ZmZmZFx1OTk0YVx1OTk0Ylx1OTk0Y1x1OTk0ZFx1OTk0ZVx1OTk0Zlx1OTk1MFx1OTk1MVx1OTk1Mlx1OTk1M1x1OTk1Nlx1OTk1N1x1OTk1OFx1OTk1OVx1OTk1YVx1OTk1Ylx1OTk1Y1x1OTk1ZFx1OTk1''@;'; put 'put ''ZVx1OTk1Zlx1OTk2MFx1OTk2MVx1OTk2Mlx1OTk2NFx1OTk2Nlx1OTk3M1x1OTk3OFx1OTk3OVx1OTk3Ylx1OTk3ZVx1OTk4Mlx1OTk4M1x1OTk4OVx1N2EzOVx1N2EzN1x1N2E1MVx1OWVjZlx1OTlhNVx1N2E3MFx1NzY4OFx1NzY4ZVx1NzY5M1x1NzY5OVx1NzZhNFx1NzRkZVx1NzRlMFx1''@;'; put 'put ''NzUyY1x1OWUyMFx1OWUyMlx1OWUyOFx1OWUyOVx1OWUyYVx1OWUyYlx1OWUyY1x1OWUzMlx1OWUzMVx1OWUzNlx1OWUzOFx1OWUzN1x1OWUzOVx1OWUzYVx1OWUzZVx1OWU0MVx1OWU0Mlx1OWU0NFx1OWU0Nlx1OWU0N1x1OWU0OFx1OWU0OVx1OWU0Ylx1OWU0Y1x1OWU0ZVx1OWU1MVx1OWU1''@;'; put 'put ''NVx1OWU1N1x1OWU1YVx1OWU1Ylx1OWU1Y1x1OWU1ZVx1OWU2M1x1OWU2Nlx1OWU2N1x1OWU2OFx1OWU2OVx1OWU2YVx1OWU2Ylx1OWU2Y1x1OWU3MVx1OWU2ZFx1OWU3M1x1NzU5Mlx1NzU5NFx1NzU5Nlx1NzVhMFx1NzU5ZFx1NzVhY1x1NzVhM1x1NzViM1x1NzViNFx1NzViOFx1NzVjNFx1''@;'; put 'put ''NzViMVx1NzViMFx1NzVjM1x1NzVjMlx1NzVkNlx1NzVjZFx1NzVlM1x1NzVlOFx1NzVlNlx1NzVlNFx1NzVlYlx1NzVlN1x1NzYwM1x1NzVmMVx1NzVmY1x1NzVmZlx1NzYxMFx1NzYwMFx1NzYwNVx1NzYwY1x1NzYxN1x1NzYwYVx1NzYyNVx1NzYxOFx1NzYxNVx1NzYxOVx1ZmZmZCIuc3Bs''@;'; put 'put ''aXQoIiIpLGc9MDtnIT1fWzI0MF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjQwXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI0MF1bZ11dPTYxNDQwK2cseVs2MTQ0MCtnXT1fWzI0MF1bZ10pO2ZvcihfWzI0MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1OTk4Y1x1OTk4ZVx1OTk5YVx1OTk5Ylx1OTk5Y1x1OTk5ZFx1OTk5ZVx1OTk5Zlx1OTlhMFx1OTlhMVx1OTlhMlx1OTlhM1x1OTlhNFx1OTlhNlx1OTlhN1x1OTlhOVx1OTlhYVx1OTlhYlx1OTlhY1x1OTlhZFx1OTlhZVx1OTlhZlx1OTliMFx1OTliMVx1OTliMlx1OTli''@;'; put 'put ''M1x1OTliNFx1OTliNVx1OTliNlx1OTliN1x1OTliOFx1OTliOVx1OTliYVx1OTliYlx1OTliY1x1OTliZFx1OTliZVx1OTliZlx1OTljMFx1OTljMVx1OTljMlx1OTljM1x1OTljNFx1OTljNVx1OTljNlx1OTljN1x1OTljOFx1OTljOVx1OTljYVx1OTljYlx1OTljY1x1OTljZFx1OTljZVx1''@;'; put 'put ''OTljZlx1OTlkMFx1OTlkMVx1OTlkMlx1OTlkM1x1OTlkNFx1OTlkNVx1OTlkNlx1OTlkN1x1OTlkOFx1ZmZmZFx1OTlkOVx1OTlkYVx1OTlkYlx1OTlkY1x1OTlkZFx1OTlkZVx1OTlkZlx1OTllMFx1OTllMVx1OTllMlx1OTllM1x1OTllNFx1OTllNVx1OTllNlx1OTllN1x1OTllOFx1OTll''@;'; put 'put ''OVx1OTllYVx1OTllYlx1OTllY1x1OTllZFx1OTllZVx1OTllZlx1OTlmMFx1OTlmMVx1OTlmMlx1OTlmM1x1OTlmNFx1OTlmNVx1OTlmNlx1OTlmN1x1OTlmOFx1OTlmOVx1NzYxYlx1NzYzY1x1NzYyMlx1NzYyMFx1NzY0MFx1NzYyZFx1NzYzMFx1NzYzZlx1NzYzNVx1NzY0M1x1NzYzZVx1''@;'; put 'put ''NzYzM1x1NzY0ZFx1NzY1ZVx1NzY1NFx1NzY1Y1x1NzY1Nlx1NzY2Ylx1NzY2Zlx1N2ZjYVx1N2FlNlx1N2E3OFx1N2E3OVx1N2E4MFx1N2E4Nlx1N2E4OFx1N2E5NVx1N2FhNlx1N2FhMFx1N2FhY1x1N2FhOFx1N2FhZFx1N2FiM1x1ODg2NFx1ODg2OVx1ODg3Mlx1ODg3ZFx1ODg3Zlx1ODg4''@;'; put 'put ''Mlx1ODhhMlx1ODhjNlx1ODhiN1x1ODhiY1x1ODhjOVx1ODhlMlx1ODhjZVx1ODhlM1x1ODhlNVx1ODhmMVx1ODkxYVx1ODhmY1x1ODhlOFx1ODhmZVx1ODhmMFx1ODkyMVx1ODkxOVx1ODkxM1x1ODkxYlx1ODkwYVx1ODkzNFx1ODkyYlx1ODkzNlx1ODk0MVx1ODk2Nlx1ODk3Ylx1NzU4Ylx1''@;'; put 'put ''ODBlNVx1NzZiMlx1NzZiNFx1NzdkY1x1ODAxMlx1ODAxNFx1ODAxNlx1ODAxY1x1ODAyMFx1ODAyMlx1ODAyNVx1ODAyNlx1ODAyN1x1ODAyOVx1ODAyOFx1ODAzMVx1ODAwYlx1ODAzNVx1ODA0M1x1ODA0Nlx1ODA0ZFx1ODA1Mlx1ODA2OVx1ODA3MVx1ODk4M1x1OTg3OFx1OTg4MFx1OTg4''@;'; put 'put ''M1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzI0MV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjQxXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI0MV1bZ11dPTYxNjk2K2cseVs2MTY5NitnXT1fWzI0MV1bZ10pO2ZvcihfWzI0Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTlmYVx1OTlmYlx1OTlmY1x1OTlmZFx1OTlmZVx1OTlmZlx1OWEwMFx1OWEwMVx1OWEwMlx1OWEwM1x1OWEwNFx1OWEwNVx1OWEwNlx1OWEwN1x1OWEwOFx1OWEwOVx1OWEwYVx1OWEwYlx1OWEwY1x1OWEwZFx1OWEwZVx1OWEwZlx1OWExMFx1OWEx''@;'; put 'put ''MVx1OWExMlx1OWExM1x1OWExNFx1OWExNVx1OWExNlx1OWExN1x1OWExOFx1OWExOVx1OWExYVx1OWExYlx1OWExY1x1OWExZFx1OWExZVx1OWExZlx1OWEyMFx1OWEyMVx1OWEyMlx1OWEyM1x1OWEyNFx1OWEyNVx1OWEyNlx1OWEyN1x1OWEyOFx1OWEyOVx1OWEyYVx1OWEyYlx1OWEyY1x1''@;'; put 'put ''OWEyZFx1OWEyZVx1OWEyZlx1OWEzMFx1OWEzMVx1OWEzMlx1OWEzM1x1OWEzNFx1OWEzNVx1OWEzNlx1OWEzN1x1OWEzOFx1ZmZmZFx1OWEzOVx1OWEzYVx1OWEzYlx1OWEzY1x1OWEzZFx1OWEzZVx1OWEzZlx1OWE0MFx1OWE0MVx1OWE0Mlx1OWE0M1x1OWE0NFx1OWE0NVx1OWE0Nlx1OWE0''@;'; put 'put ''N1x1OWE0OFx1OWE0OVx1OWE0YVx1OWE0Ylx1OWE0Y1x1OWE0ZFx1OWE0ZVx1OWE0Zlx1OWE1MFx1OWE1MVx1OWE1Mlx1OWE1M1x1OWE1NFx1OWE1NVx1OWE1Nlx1OWE1N1x1OWE1OFx1OWE1OVx1OTg4OVx1OTg4Y1x1OTg4ZFx1OTg4Zlx1OTg5NFx1OTg5YVx1OTg5Ylx1OTg5ZVx1OTg5Zlx1''@;'; put 'put ''OThhMVx1OThhMlx1OThhNVx1OThhNlx1ODY0ZFx1ODY1NFx1ODY2Y1x1ODY2ZVx1ODY3Zlx1ODY3YVx1ODY3Y1x1ODY3Ylx1ODZhOFx1ODY4ZFx1ODY4Ylx1ODZhY1x1ODY5ZFx1ODZhN1x1ODZhM1x1ODZhYVx1ODY5M1x1ODZhOVx1ODZiNlx1ODZjNFx1ODZiNVx1ODZjZVx1ODZiMFx1ODZi''@;'; put 'put ''YVx1ODZiMVx1ODZhZlx1ODZjOVx1ODZjZlx1ODZiNFx1ODZlOVx1ODZmMVx1ODZmMlx1ODZlZFx1ODZmM1x1ODZkMFx1ODcxM1x1ODZkZVx1ODZmNFx1ODZkZlx1ODZkOFx1ODZkMVx1ODcwM1x1ODcwN1x1ODZmOFx1ODcwOFx1ODcwYVx1ODcwZFx1ODcwOVx1ODcyM1x1ODczYlx1ODcxZVx1''@;'; put 'put ''ODcyNVx1ODcyZVx1ODcxYVx1ODczZVx1ODc0OFx1ODczNFx1ODczMVx1ODcyOVx1ODczN1x1ODczZlx1ODc4Mlx1ODcyMlx1ODc3ZFx1ODc3ZVx1ODc3Ylx1ODc2MFx1ODc3MFx1ODc0Y1x1ODc2ZVx1ODc4Ylx1ODc1M1x1ODc2M1x1ODc3Y1x1ODc2NFx1ODc1OVx1ODc2NVx1ODc5M1x1ODdh''@;'; put 'put ''Zlx1ODdhOFx1ODdkMlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzI0Ml0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjQyXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI0Ml1bZ11dPTYxOTUyK2cseVs2MTk1MitnXT1fWzI0Ml1bZ10pO2ZvcihfWzI0M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWE1YVx1OWE1Ylx1OWE1Y1x1OWE1ZFx1OWE1ZVx1OWE1Zlx1OWE2MFx1OWE2MVx1OWE2Mlx1OWE2M1x1OWE2NFx1OWE2NVx1OWE2Nlx1OWE2N1x1OWE2OFx1OWE2OVx1OWE2YVx1OWE2Ylx1OWE3Mlx1OWE4M1x1OWE4OVx1OWE4''@;'; put 'put ''ZFx1OWE4ZVx1OWE5NFx1OWE5NVx1OWE5OVx1OWFhNlx1OWFhOVx1OWFhYVx1OWFhYlx1OWFhY1x1OWFhZFx1OWFhZVx1OWFhZlx1OWFiMlx1OWFiM1x1OWFiNFx1OWFiNVx1OWFiOVx1OWFiYlx1OWFiZFx1OWFiZVx1OWFiZlx1OWFjM1x1OWFjNFx1OWFjNlx1OWFjN1x1OWFjOFx1OWFjOVx1''@;'; put 'put ''OWFjYVx1OWFjZFx1OWFjZVx1OWFjZlx1OWFkMFx1OWFkMlx1OWFkNFx1OWFkNVx1OWFkNlx1OWFkN1x1OWFkOVx1OWFkYVx1OWFkYlx1OWFkY1x1ZmZmZFx1OWFkZFx1OWFkZVx1OWFlMFx1OWFlMlx1OWFlM1x1OWFlNFx1OWFlNVx1OWFlN1x1OWFlOFx1OWFlOVx1OWFlYVx1OWFlY1x1OWFl''@;'; put 'put ''ZVx1OWFmMFx1OWFmMVx1OWFmMlx1OWFmM1x1OWFmNFx1OWFmNVx1OWFmNlx1OWFmN1x1OWFmOFx1OWFmYVx1OWFmY1x1OWFmZFx1OWFmZVx1OWFmZlx1OWIwMFx1OWIwMVx1OWIwMlx1OWIwNFx1OWIwNVx1OWIwNlx1ODdjNlx1ODc4OFx1ODc4NVx1ODdhZFx1ODc5N1x1ODc4M1x1ODdhYlx1''@;'; put 'put ''ODdlNVx1ODdhY1x1ODdiNVx1ODdiM1x1ODdjYlx1ODdkM1x1ODdiZFx1ODdkMVx1ODdjMFx1ODdjYVx1ODdkYlx1ODdlYVx1ODdlMFx1ODdlZVx1ODgxNlx1ODgxM1x1ODdmZVx1ODgwYVx1ODgxYlx1ODgyMVx1ODgzOVx1ODgzY1x1N2YzNlx1N2Y0Mlx1N2Y0NFx1N2Y0NVx1ODIxMFx1N2Fm''@;'; put 'put ''YVx1N2FmZFx1N2IwOFx1N2IwM1x1N2IwNFx1N2IxNVx1N2IwYVx1N2IyYlx1N2IwZlx1N2I0N1x1N2IzOFx1N2IyYVx1N2IxOVx1N2IyZVx1N2IzMVx1N2IyMFx1N2IyNVx1N2IyNFx1N2IzM1x1N2IzZVx1N2IxZVx1N2I1OFx1N2I1YVx1N2I0NVx1N2I3NVx1N2I0Y1x1N2I1ZFx1N2I2MFx1''@;'; put 'put ''N2I2ZVx1N2I3Ylx1N2I2Mlx1N2I3Mlx1N2I3MVx1N2I5MFx1N2JhNlx1N2JhN1x1N2JiOFx1N2JhY1x1N2I5ZFx1N2JhOFx1N2I4NVx1N2JhYVx1N2I5Y1x1N2JhMlx1N2JhYlx1N2JiNFx1N2JkMVx1N2JjMVx1N2JjY1x1N2JkZFx1N2JkYVx1N2JlNVx1N2JlNlx1N2JlYVx1N2MwY1x1N2Jm''@;'; put 'put ''ZVx1N2JmY1x1N2MwZlx1N2MxNlx1N2MwYlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzI0M10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjQzXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI0M11bZ11dPTYyMjA4K2cseVs2MjIwOCtnXT1fWzI0M11bZ10pO2ZvcihfWzI0NF09Ilx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWIwN1x1OWIwOVx1OWIwYVx1OWIwYlx1OWIwY1x1OWIwZFx1OWIwZVx1OWIxMFx1OWIxMVx1OWIxMlx1OWIxNFx1OWIxNVx1OWIxNlx1OWIxN1x1OWIxOFx1OWIxOVx1OWIxYVx1OWIxYlx1OWIxY1x1OWIx''@;'; put 'put ''ZFx1OWIxZVx1OWIyMFx1OWIyMVx1OWIyMlx1OWIyNFx1OWIyNVx1OWIyNlx1OWIyN1x1OWIyOFx1OWIyOVx1OWIyYVx1OWIyYlx1OWIyY1x1OWIyZFx1OWIyZVx1OWIzMFx1OWIzMVx1OWIzM1x1OWIzNFx1OWIzNVx1OWIzNlx1OWIzN1x1OWIzOFx1OWIzOVx1OWIzYVx1OWIzZFx1OWIzZVx1''@;'; put 'put ''OWIzZlx1OWI0MFx1OWI0Nlx1OWI0YVx1OWI0Ylx1OWI0Y1x1OWI0ZVx1OWI1MFx1OWI1Mlx1OWI1M1x1OWI1NVx1OWI1Nlx1OWI1N1x1OWI1OFx1OWI1OVx1OWI1YVx1ZmZmZFx1OWI1Ylx1OWI1Y1x1OWI1ZFx1OWI1ZVx1OWI1Zlx1OWI2MFx1OWI2MVx1OWI2Mlx1OWI2M1x1OWI2NFx1OWI2''@;'; put 'put ''NVx1OWI2Nlx1OWI2N1x1OWI2OFx1OWI2OVx1OWI2YVx1OWI2Ylx1OWI2Y1x1OWI2ZFx1OWI2ZVx1OWI2Zlx1OWI3MFx1OWI3MVx1OWI3Mlx1OWI3M1x1OWI3NFx1OWI3NVx1OWI3Nlx1OWI3N1x1OWI3OFx1OWI3OVx1OWI3YVx1OWI3Ylx1N2MxZlx1N2MyYVx1N2MyNlx1N2MzOFx1N2M0MVx1''@;'; put 'put ''N2M0MFx1ODFmZVx1ODIwMVx1ODIwMlx1ODIwNFx1ODFlY1x1ODg0NFx1ODIyMVx1ODIyMlx1ODIyM1x1ODIyZFx1ODIyZlx1ODIyOFx1ODIyYlx1ODIzOFx1ODIzYlx1ODIzM1x1ODIzNFx1ODIzZVx1ODI0NFx1ODI0OVx1ODI0Ylx1ODI0Zlx1ODI1YVx1ODI1Zlx1ODI2OFx1ODg3ZVx1ODg4''@;'; put 'put ''NVx1ODg4OFx1ODhkOFx1ODhkZlx1ODk1ZVx1N2Y5ZFx1N2Y5Zlx1N2ZhN1x1N2ZhZlx1N2ZiMFx1N2ZiMlx1N2M3Y1x1NjU0OVx1N2M5MVx1N2M5ZFx1N2M5Y1x1N2M5ZVx1N2NhMlx1N2NiMlx1N2NiY1x1N2NiZFx1N2NjMVx1N2NjN1x1N2NjY1x1N2NjZFx1N2NjOFx1N2NjNVx1N2NkN1x1''@;'; put 'put ''N2NlOFx1ODI2ZVx1NjZhOFx1N2ZiZlx1N2ZjZVx1N2ZkNVx1N2ZlNVx1N2ZlMVx1N2ZlNlx1N2ZlOVx1N2ZlZVx1N2ZmM1x1N2NmOFx1N2Q3N1x1N2RhNlx1N2RhZVx1N2U0N1x1N2U5Ylx1OWViOFx1OWViNFx1OGQ3M1x1OGQ4NFx1OGQ5NFx1OGQ5MVx1OGRiMVx1OGQ2N1x1OGQ2ZFx1OGM0''@;'; put 'put ''N1x1OGM0OVx1OTE0YVx1OTE1MFx1OTE0ZVx1OTE0Zlx1OTE2NFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzI0NF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjQ0XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI0NF1bZ11dPTYyNDY0K2cseVs2MjQ2NCtnXT1fWzI0NF1bZ10pO2ZvcihfWzI0''@;'; put 'put ''NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWI3Y1x1OWI3ZFx1OWI3ZVx1OWI3Zlx1OWI4MFx1OWI4MVx1OWI4Mlx1OWI4M1x1OWI4NFx1OWI4NVx1OWI4Nlx1OWI4N1x1OWI4OFx1OWI4OVx1OWI4YVx1OWI4Ylx1OWI4Y1x1OWI4''@;'; put 'put ''ZFx1OWI4ZVx1OWI4Zlx1OWI5MFx1OWI5MVx1OWI5Mlx1OWI5M1x1OWI5NFx1OWI5NVx1OWI5Nlx1OWI5N1x1OWI5OFx1OWI5OVx1OWI5YVx1OWI5Ylx1OWI5Y1x1OWI5ZFx1OWI5ZVx1OWI5Zlx1OWJhMFx1OWJhMVx1OWJhMlx1OWJhM1x1OWJhNFx1OWJhNVx1OWJhNlx1OWJhN1x1OWJhOFx1''@;'; put 'put ''OWJhOVx1OWJhYVx1OWJhYlx1OWJhY1x1OWJhZFx1OWJhZVx1OWJhZlx1OWJiMFx1OWJiMVx1OWJiMlx1OWJiM1x1OWJiNFx1OWJiNVx1OWJiNlx1OWJiN1x1OWJiOFx1OWJiOVx1OWJiYVx1ZmZmZFx1OWJiYlx1OWJiY1x1OWJiZFx1OWJiZVx1OWJiZlx1OWJjMFx1OWJjMVx1OWJjMlx1OWJj''@;'; put 'put ''M1x1OWJjNFx1OWJjNVx1OWJjNlx1OWJjN1x1OWJjOFx1OWJjOVx1OWJjYVx1OWJjYlx1OWJjY1x1OWJjZFx1OWJjZVx1OWJjZlx1OWJkMFx1OWJkMVx1OWJkMlx1OWJkM1x1OWJkNFx1OWJkNVx1OWJkNlx1OWJkN1x1OWJkOFx1OWJkOVx1OWJkYVx1OWJkYlx1OTE2Mlx1OTE2MVx1OTE3MFx1''@;'; put 'put ''OTE2OVx1OTE2Zlx1OTE3ZFx1OTE3ZVx1OTE3Mlx1OTE3NFx1OTE3OVx1OTE4Y1x1OTE4NVx1OTE5MFx1OTE4ZFx1OTE5MVx1OTFhMlx1OTFhM1x1OTFhYVx1OTFhZFx1OTFhZVx1OTFhZlx1OTFiNVx1OTFiNFx1OTFiYVx1OGM1NVx1OWU3ZVx1OGRiOFx1OGRlYlx1OGUwNVx1OGU1OVx1OGU2''@;'; put 'put ''OVx1OGRiNVx1OGRiZlx1OGRiY1x1OGRiYVx1OGRjNFx1OGRkNlx1OGRkN1x1OGRkYVx1OGRkZVx1OGRjZVx1OGRjZlx1OGRkYlx1OGRjNlx1OGRlY1x1OGRmN1x1OGRmOFx1OGRlM1x1OGRmOVx1OGRmYlx1OGRlNFx1OGUwOVx1OGRmZFx1OGUxNFx1OGUxZFx1OGUxZlx1OGUyY1x1OGUyZVx1''@;'; put 'put ''OGUyM1x1OGUyZlx1OGUzYVx1OGU0MFx1OGUzOVx1OGUzNVx1OGUzZFx1OGUzMVx1OGU0OVx1OGU0MVx1OGU0Mlx1OGU1MVx1OGU1Mlx1OGU0YVx1OGU3MFx1OGU3Nlx1OGU3Y1x1OGU2Zlx1OGU3NFx1OGU4NVx1OGU4Zlx1OGU5NFx1OGU5MFx1OGU5Y1x1OGU5ZVx1OGM3OFx1OGM4Mlx1OGM4''@;'; put 'put ''YVx1OGM4NVx1OGM5OFx1OGM5NFx1NjU5Ylx1ODlkNlx1ODlkZVx1ODlkYVx1ODlkY1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzI0NV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjQ1XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI0NV1bZ11dPTYyNzIwK2cseVs2MjcyMCtnXT1fWzI0NV1b''@;'; put 'put ''Z10pO2ZvcihfWzI0Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWJkY1x1OWJkZFx1OWJkZVx1OWJkZlx1OWJlMFx1OWJlMVx1OWJlMlx1OWJlM1x1OWJlNFx1OWJlNVx1OWJlNlx1OWJlN1x1OWJlOFx1OWJlOVx1OWJlYVx1OWJl''@;'; put 'put ''Ylx1OWJlY1x1OWJlZFx1OWJlZVx1OWJlZlx1OWJmMFx1OWJmMVx1OWJmMlx1OWJmM1x1OWJmNFx1OWJmNVx1OWJmNlx1OWJmN1x1OWJmOFx1OWJmOVx1OWJmYVx1OWJmYlx1OWJmY1x1OWJmZFx1OWJmZVx1OWJmZlx1OWMwMFx1OWMwMVx1OWMwMlx1OWMwM1x1OWMwNFx1OWMwNVx1OWMwNlx1''@;'; put 'put ''OWMwN1x1OWMwOFx1OWMwOVx1OWMwYVx1OWMwYlx1OWMwY1x1OWMwZFx1OWMwZVx1OWMwZlx1OWMxMFx1OWMxMVx1OWMxMlx1OWMxM1x1OWMxNFx1OWMxNVx1OWMxNlx1OWMxN1x1OWMxOFx1OWMxOVx1OWMxYVx1ZmZmZFx1OWMxYlx1OWMxY1x1OWMxZFx1OWMxZVx1OWMxZlx1OWMyMFx1OWMy''@;'; put 'put ''MVx1OWMyMlx1OWMyM1x1OWMyNFx1OWMyNVx1OWMyNlx1OWMyN1x1OWMyOFx1OWMyOVx1OWMyYVx1OWMyYlx1OWMyY1x1OWMyZFx1OWMyZVx1OWMyZlx1OWMzMFx1OWMzMVx1OWMzMlx1OWMzM1x1OWMzNFx1OWMzNVx1OWMzNlx1OWMzN1x1OWMzOFx1OWMzOVx1OWMzYVx1OWMzYlx1ODllNVx1''@;'; put 'put ''ODllYlx1ODllZlx1OGEzZVx1OGIyNlx1OTc1M1x1OTZlOVx1OTZmM1x1OTZlZlx1OTcwNlx1OTcwMVx1OTcwOFx1OTcwZlx1OTcwZVx1OTcyYVx1OTcyZFx1OTczMFx1OTczZVx1OWY4MFx1OWY4M1x1OWY4NVx1OWY4Nlx1OWY4N1x1OWY4OFx1OWY4OVx1OWY4YVx1OWY4Y1x1OWVmZVx1OWYw''@;'; put 'put ''Ylx1OWYwZFx1OTZiOVx1OTZiY1x1OTZiZFx1OTZjZVx1OTZkMlx1NzdiZlx1OTZlMFx1OTI4ZVx1OTJhZVx1OTJjOFx1OTMzZVx1OTM2YVx1OTNjYVx1OTM4Zlx1OTQzZVx1OTQ2Ylx1OWM3Zlx1OWM4Mlx1OWM4NVx1OWM4Nlx1OWM4N1x1OWM4OFx1N2EyM1x1OWM4Ylx1OWM4ZVx1OWM5MFx1''@;'; put 'put ''OWM5MVx1OWM5Mlx1OWM5NFx1OWM5NVx1OWM5YVx1OWM5Ylx1OWM5ZVx1OWM5Zlx1OWNhMFx1OWNhMVx1OWNhMlx1OWNhM1x1OWNhNVx1OWNhNlx1OWNhN1x1OWNhOFx1OWNhOVx1OWNhYlx1OWNhZFx1OWNhZVx1OWNiMFx1OWNiMVx1OWNiMlx1OWNiM1x1OWNiNFx1OWNiNVx1OWNiNlx1OWNi''@;'; put 'put ''N1x1OWNiYVx1OWNiYlx1OWNiY1x1OWNiZFx1OWNjNFx1OWNjNVx1OWNjNlx1OWNjN1x1OWNjYVx1OWNjYlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzI0Nl0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjQ2XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI0Nl1bZ11dPTYyOTc2K2cseVs2Mjk3''@;'; put 'put ''NitnXT1fWzI0Nl1bZ10pO2ZvcihfWzI0N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWMzY1x1OWMzZFx1OWMzZVx1OWMzZlx1OWM0MFx1OWM0MVx1OWM0Mlx1OWM0M1x1OWM0NFx1OWM0NVx1OWM0Nlx1OWM0N1x1OWM0OFx1OWM0''@;'; put 'put ''OVx1OWM0YVx1OWM0Ylx1OWM0Y1x1OWM0ZFx1OWM0ZVx1OWM0Zlx1OWM1MFx1OWM1MVx1OWM1Mlx1OWM1M1x1OWM1NFx1OWM1NVx1OWM1Nlx1OWM1N1x1OWM1OFx1OWM1OVx1OWM1YVx1OWM1Ylx1OWM1Y1x1OWM1ZFx1OWM1ZVx1OWM1Zlx1OWM2MFx1OWM2MVx1OWM2Mlx1OWM2M1x1OWM2NFx1''@;'; put 'put ''OWM2NVx1OWM2Nlx1OWM2N1x1OWM2OFx1OWM2OVx1OWM2YVx1OWM2Ylx1OWM2Y1x1OWM2ZFx1OWM2ZVx1OWM2Zlx1OWM3MFx1OWM3MVx1OWM3Mlx1OWM3M1x1OWM3NFx1OWM3NVx1OWM3Nlx1OWM3N1x1OWM3OFx1OWM3OVx1OWM3YVx1ZmZmZFx1OWM3Ylx1OWM3ZFx1OWM3ZVx1OWM4MFx1OWM4''@;'; put 'put ''M1x1OWM4NFx1OWM4OVx1OWM4YVx1OWM4Y1x1OWM4Zlx1OWM5M1x1OWM5Nlx1OWM5N1x1OWM5OFx1OWM5OVx1OWM5ZFx1OWNhYVx1OWNhY1x1OWNhZlx1OWNiOVx1OWNiZVx1OWNiZlx1OWNjMFx1OWNjMVx1OWNjMlx1OWNjOFx1OWNjOVx1OWNkMVx1OWNkMlx1OWNkYVx1OWNkYlx1OWNlMFx1''@;'; put 'put ''OWNlMVx1OWNjY1x1OWNjZFx1OWNjZVx1OWNjZlx1OWNkMFx1OWNkM1x1OWNkNFx1OWNkNVx1OWNkN1x1OWNkOFx1OWNkOVx1OWNkY1x1OWNkZFx1OWNkZlx1OWNlMlx1OTc3Y1x1OTc4NVx1OTc5MVx1OTc5Mlx1OTc5NFx1OTdhZlx1OTdhYlx1OTdhM1x1OTdiMlx1OTdiNFx1OWFiMVx1OWFi''@;'; put 'put ''MFx1OWFiN1x1OWU1OFx1OWFiNlx1OWFiYVx1OWFiY1x1OWFjMVx1OWFjMFx1OWFjNVx1OWFjMlx1OWFjYlx1OWFjY1x1OWFkMVx1OWI0NVx1OWI0M1x1OWI0N1x1OWI0OVx1OWI0OFx1OWI0ZFx1OWI1MVx1OThlOFx1OTkwZFx1OTkyZVx1OTk1NVx1OTk1NFx1OWFkZlx1OWFlMVx1OWFlNlx1''@;'; put 'put ''OWFlZlx1OWFlYlx1OWFmYlx1OWFlZFx1OWFmOVx1OWIwOFx1OWIwZlx1OWIxM1x1OWIxZlx1OWIyM1x1OWViZFx1OWViZVx1N2UzYlx1OWU4Mlx1OWU4N1x1OWU4OFx1OWU4Ylx1OWU5Mlx1OTNkNlx1OWU5ZFx1OWU5Zlx1OWVkYlx1OWVkY1x1OWVkZFx1OWVlMFx1OWVkZlx1OWVlMlx1OWVl''@;'; put 'put ''OVx1OWVlN1x1OWVlNVx1OWVlYVx1OWVlZlx1OWYyMlx1OWYyY1x1OWYyZlx1OWYzOVx1OWYzN1x1OWYzZFx1OWYzZVx1OWY0NFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzI0N10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjQ3XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI0N11bZ11dPTYz''@;'; put 'put ''MjMyK2cseVs2MzIzMitnXT1fWzI0N11bZ10pO2ZvcihfWzI0OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWNlM1x1OWNlNFx1OWNlNVx1OWNlNlx1OWNlN1x1OWNlOFx1OWNlOVx1OWNlYVx1OWNlYlx1OWNlY1x1OWNlZFx1OWNl''@;'; put 'put ''ZVx1OWNlZlx1OWNmMFx1OWNmMVx1OWNmMlx1OWNmM1x1OWNmNFx1OWNmNVx1OWNmNlx1OWNmN1x1OWNmOFx1OWNmOVx1OWNmYVx1OWNmYlx1OWNmY1x1OWNmZFx1OWNmZVx1OWNmZlx1OWQwMFx1OWQwMVx1OWQwMlx1OWQwM1x1OWQwNFx1OWQwNVx1OWQwNlx1OWQwN1x1OWQwOFx1OWQwOVx1''@;'; put 'put ''OWQwYVx1OWQwYlx1OWQwY1x1OWQwZFx1OWQwZVx1OWQwZlx1OWQxMFx1OWQxMVx1OWQxMlx1OWQxM1x1OWQxNFx1OWQxNVx1OWQxNlx1OWQxN1x1OWQxOFx1OWQxOVx1OWQxYVx1OWQxYlx1OWQxY1x1OWQxZFx1OWQxZVx1OWQxZlx1OWQyMFx1OWQyMVx1ZmZmZFx1OWQyMlx1OWQyM1x1OWQy''@;'; put 'put ''NFx1OWQyNVx1OWQyNlx1OWQyN1x1OWQyOFx1OWQyOVx1OWQyYVx1OWQyYlx1OWQyY1x1OWQyZFx1OWQyZVx1OWQyZlx1OWQzMFx1OWQzMVx1OWQzMlx1OWQzM1x1OWQzNFx1OWQzNVx1OWQzNlx1OWQzN1x1OWQzOFx1OWQzOVx1OWQzYVx1OWQzYlx1OWQzY1x1OWQzZFx1OWQzZVx1OWQzZlx1''@;'; put 'put ''OWQ0MFx1OWQ0MVx1OWQ0Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzI0OF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjQ4XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtf''@;'; put 'put ''WzI0OF1bZ11dPTYzNDg4K2cseVs2MzQ4OCtnXT1fWzI0OF1bZ10pO2ZvcihfWzI0OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWQ0M1x1OWQ0NFx1OWQ0NVx1OWQ0Nlx1OWQ0N1x1OWQ0OFx1OWQ0OVx1OWQ0YVx1OWQ0Ylx1OWQ0''@;'; put 'put ''Y1x1OWQ0ZFx1OWQ0ZVx1OWQ0Zlx1OWQ1MFx1OWQ1MVx1OWQ1Mlx1OWQ1M1x1OWQ1NFx1OWQ1NVx1OWQ1Nlx1OWQ1N1x1OWQ1OFx1OWQ1OVx1OWQ1YVx1OWQ1Ylx1OWQ1Y1x1OWQ1ZFx1OWQ1ZVx1OWQ1Zlx1OWQ2MFx1OWQ2MVx1OWQ2Mlx1OWQ2M1x1OWQ2NFx1OWQ2NVx1OWQ2Nlx1OWQ2N1x1''@;'; put 'put ''OWQ2OFx1OWQ2OVx1OWQ2YVx1OWQ2Ylx1OWQ2Y1x1OWQ2ZFx1OWQ2ZVx1OWQ2Zlx1OWQ3MFx1OWQ3MVx1OWQ3Mlx1OWQ3M1x1OWQ3NFx1OWQ3NVx1OWQ3Nlx1OWQ3N1x1OWQ3OFx1OWQ3OVx1OWQ3YVx1OWQ3Ylx1OWQ3Y1x1OWQ3ZFx1OWQ3ZVx1OWQ3Zlx1OWQ4MFx1OWQ4MVx1ZmZmZFx1OWQ4''@;'; put 'put ''Mlx1OWQ4M1x1OWQ4NFx1OWQ4NVx1OWQ4Nlx1OWQ4N1x1OWQ4OFx1OWQ4OVx1OWQ4YVx1OWQ4Ylx1OWQ4Y1x1OWQ4ZFx1OWQ4ZVx1OWQ4Zlx1OWQ5MFx1OWQ5MVx1OWQ5Mlx1OWQ5M1x1OWQ5NFx1OWQ5NVx1OWQ5Nlx1OWQ5N1x1OWQ5OFx1OWQ5OVx1OWQ5YVx1OWQ5Ylx1OWQ5Y1x1OWQ5ZFx1''@;'; put 'put ''OWQ5ZVx1OWQ5Zlx1OWRhMFx1OWRhMVx1OWRhMlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzI0OV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjQ5XVtnXS5jaGFyQ29k''@;'; put 'put ''ZUF0KDApJiYoSVtfWzI0OV1bZ11dPTYzNzQ0K2cseVs2Mzc0NCtnXT1fWzI0OV1bZ10pO2ZvcihfWzI1MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWRhM1x1OWRhNFx1OWRhNVx1OWRhNlx1OWRhN1x1OWRhOFx1OWRhOVx1OWRh''@;'; put 'put ''YVx1OWRhYlx1OWRhY1x1OWRhZFx1OWRhZVx1OWRhZlx1OWRiMFx1OWRiMVx1OWRiMlx1OWRiM1x1OWRiNFx1OWRiNVx1OWRiNlx1OWRiN1x1OWRiOFx1OWRiOVx1OWRiYVx1OWRiYlx1OWRiY1x1OWRiZFx1OWRiZVx1OWRiZlx1OWRjMFx1OWRjMVx1OWRjMlx1OWRjM1x1OWRjNFx1OWRjNVx1''@;'; put 'put ''OWRjNlx1OWRjN1x1OWRjOFx1OWRjOVx1OWRjYVx1OWRjYlx1OWRjY1x1OWRjZFx1OWRjZVx1OWRjZlx1OWRkMFx1OWRkMVx1OWRkMlx1OWRkM1x1OWRkNFx1OWRkNVx1OWRkNlx1OWRkN1x1OWRkOFx1OWRkOVx1OWRkYVx1OWRkYlx1OWRkY1x1OWRkZFx1OWRkZVx1OWRkZlx1OWRlMFx1OWRl''@;'; put 'put ''MVx1ZmZmZFx1OWRlMlx1OWRlM1x1OWRlNFx1OWRlNVx1OWRlNlx1OWRlN1x1OWRlOFx1OWRlOVx1OWRlYVx1OWRlYlx1OWRlY1x1OWRlZFx1OWRlZVx1OWRlZlx1OWRmMFx1OWRmMVx1OWRmMlx1OWRmM1x1OWRmNFx1OWRmNVx1OWRmNlx1OWRmN1x1OWRmOFx1OWRmOVx1OWRmYVx1OWRmYlx1''@;'; put 'put ''OWRmY1x1OWRmZFx1OWRmZVx1OWRmZlx1OWUwMFx1OWUwMVx1OWUwMlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzI1MF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjUw''@;'; put 'put ''XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI1MF1bZ11dPTY0ZTMrZyx5WzY0ZTMrZ109X1syNTBdW2ddKTtmb3IoX1syNTFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTllMDNcdTllMDRcdTllMDVcdTllMDZcdTllMDdcdTllMDhc''@;'; put 'put ''dTllMDlcdTllMGFcdTllMGJcdTllMGNcdTllMGRcdTllMGVcdTllMGZcdTllMTBcdTllMTFcdTllMTJcdTllMTNcdTllMTRcdTllMTVcdTllMTZcdTllMTdcdTllMThcdTllMTlcdTllMWFcdTllMWJcdTllMWNcdTllMWRcdTllMWVcdTllMjRcdTllMjdcdTllMmVcdTllMzBcdTllMzRcdTll''@;'; put 'put ''M2JcdTllM2NcdTllNDBcdTllNGRcdTllNTBcdTllNTJcdTllNTNcdTllNTRcdTllNTZcdTllNTlcdTllNWRcdTllNWZcdTllNjBcdTllNjFcdTllNjJcdTllNjVcdTllNmVcdTllNmZcdTllNzJcdTllNzRcdTllNzVcdTllNzZcdTllNzdcdTllNzhcdTllNzlcdTllN2FcdTllN2JcdTllN2Nc''@;'; put 'put ''dTllN2RcdTllODBcdWZmZmRcdTllODFcdTllODNcdTllODRcdTllODVcdTllODZcdTllODlcdTllOGFcdTllOGNcdTllOGRcdTllOGVcdTllOGZcdTllOTBcdTllOTFcdTllOTRcdTllOTVcdTllOTZcdTllOTdcdTllOThcdTllOTlcdTllOWFcdTllOWJcdTllOWNcdTllOWVcdTllYTBcdTll''@;'; put 'put ''YTFcdTllYTJcdTllYTNcdTllYTRcdTllYTVcdTllYTdcdTllYThcdTllYTlcdTllYWFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syNTFdLmxlbmd0aDsrK2cpNjU1''@;'; put 'put ''MzMhPT1fWzI1MV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syNTFdW2ddXT02NDI1NitnLHlbNjQyNTYrZ109X1syNTFdW2ddKTtmb3IoX1syNTJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTllYWJcdTllYWNcdTllYWRcdTllYWVc''@;'; put 'put ''dTllYWZcdTllYjBcdTllYjFcdTllYjJcdTllYjNcdTllYjVcdTllYjZcdTllYjdcdTllYjlcdTllYmFcdTllYmNcdTllYmZcdTllYzBcdTllYzFcdTllYzJcdTllYzNcdTllYzVcdTllYzZcdTllYzdcdTllYzhcdTllY2FcdTllY2JcdTllY2NcdTllZDBcdTllZDJcdTllZDNcdTllZDVcdTll''@;'; put 'put ''ZDZcdTllZDdcdTllZDlcdTllZGFcdTllZGVcdTllZTFcdTllZTNcdTllZTRcdTllZTZcdTllZThcdTllZWJcdTllZWNcdTllZWRcdTllZWVcdTllZjBcdTllZjFcdTllZjJcdTllZjNcdTllZjRcdTllZjVcdTllZjZcdTllZjdcdTllZjhcdTllZmFcdTllZmRcdTllZmZcdTlmMDBcdTlmMDFc''@;'; put 'put ''dTlmMDJcdTlmMDNcdTlmMDRcdTlmMDVcdWZmZmRcdTlmMDZcdTlmMDdcdTlmMDhcdTlmMDlcdTlmMGFcdTlmMGNcdTlmMGZcdTlmMTFcdTlmMTJcdTlmMTRcdTlmMTVcdTlmMTZcdTlmMThcdTlmMWFcdTlmMWJcdTlmMWNcdTlmMWRcdTlmMWVcdTlmMWZcdTlmMjFcdTlmMjNcdTlmMjRcdTlm''@;'; put 'put ''MjVcdTlmMjZcdTlmMjdcdTlmMjhcdTlmMjlcdTlmMmFcdTlmMmJcdTlmMmRcdTlmMmVcdTlmMzBcdTlmMzFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syNTJdLmxl''@;'; put 'put ''bmd0aDsrK2cpNjU1MzMhPT1fWzI1Ml1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syNTJdW2ddXT02NDUxMitnLHlbNjQ1MTIrZ109X1syNTJdW2ddKTtmb3IoX1syNTNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTlmMzJcdTlmMzNc''@;'; put 'put ''dTlmMzRcdTlmMzVcdTlmMzZcdTlmMzhcdTlmM2FcdTlmM2NcdTlmM2ZcdTlmNDBcdTlmNDFcdTlmNDJcdTlmNDNcdTlmNDVcdTlmNDZcdTlmNDdcdTlmNDhcdTlmNDlcdTlmNGFcdTlmNGJcdTlmNGNcdTlmNGRcdTlmNGVcdTlmNGZcdTlmNTJcdTlmNTNcdTlmNTRcdTlmNTVcdTlmNTZcdTlm''@;'; put 'put ''NTdcdTlmNThcdTlmNTlcdTlmNWFcdTlmNWJcdTlmNWNcdTlmNWRcdTlmNWVcdTlmNWZcdTlmNjBcdTlmNjFcdTlmNjJcdTlmNjNcdTlmNjRcdTlmNjVcdTlmNjZcdTlmNjdcdTlmNjhcdTlmNjlcdTlmNmFcdTlmNmJcdTlmNmNcdTlmNmRcdTlmNmVcdTlmNmZcdTlmNzBcdTlmNzFcdTlmNzJc''@;'; put 'put ''dTlmNzNcdTlmNzRcdTlmNzVcdTlmNzZcdTlmNzdcdTlmNzhcdWZmZmRcdTlmNzlcdTlmN2FcdTlmN2JcdTlmN2NcdTlmN2RcdTlmN2VcdTlmODFcdTlmODJcdTlmOGRcdTlmOGVcdTlmOGZcdTlmOTBcdTlmOTFcdTlmOTJcdTlmOTNcdTlmOTRcdTlmOTVcdTlmOTZcdTlmOTdcdTlmOThcdTlm''@;'; put 'put ''OWNcdTlmOWRcdTlmOWVcdTlmYTFcdTlmYTJcdTlmYTNcdTlmYTRcdTlmYTVcdWY5MmNcdWY5NzlcdWY5OTVcdWY5ZTdcdWY5ZjFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7''@;'; put 'put ''ZyE9X1syNTNdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzI1M11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syNTNdW2ddXT02NDc2OCtnLHlbNjQ3NjgrZ109X1syNTNdW2ddKTtmb3IoX1syNTRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZhMGNcdWZhMGRcdWZhMGVcdWZhMGZcdWZhMTFcdWZhMTNcdWZhMTRcdWZhMThcdWZhMWZcdWZhMjBcdWZhMjFcdWZhMjNcdWZhMjRcdWZhMjdcdWZhMjhcdWZhMjlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNw''@;'; put 'put ''bGl0KCIiKSxnPTA7ZyE9X1syNTRdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzI1NF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syNTRdW2ddXT02NTAyNCtnLHlbNjUwMjQrZ109X1syNTRdW2ddKTtyZXR1cm57ZW5jOkksZGVjOnl9fSgpLFhbOTQ5XT1mdW5jdGlvbigpe3ZhciBnLHk9W10sST17''@;'; put 'put ''fSxfPVtdO2ZvcihfWzBdPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9A''@;'; put 'put ''QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzBdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzBdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMF1bZ11dPTArZyx5WzArZ109X1swXVtnXSk7Zm9yKF9bMTI5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVhYzAyXHVhYzAzXHVhYzA1XHVhYzA2XHVhYzBiXHVhYzBjXHVhYzBkXHVhYzBlXHVhYzBmXHVhYzE4XHVhYzFlXHVhYzFmXHVhYzIxXHVhYzIyXHVhYzIzXHVhYzI1XHVhYzI2XHVhYzI3XHVhYzI4XHVhYzI5XHVhYzJhXHVhYzJiXHVhYzJlXHVhYzMyXHVhYzMz''@;'; put 'put ''XHVhYzM0XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVhYzM1XHVhYzM2XHVhYzM3XHVhYzNhXHVhYzNiXHVhYzNkXHVhYzNlXHVhYzNmXHVhYzQxXHVhYzQyXHVhYzQzXHVhYzQ0XHVhYzQ1XHVhYzQ2XHVhYzQ3XHVhYzQ4XHVhYzQ5XHVhYzRhXHVhYzRjXHVhYzRlXHVh''@;'; put 'put ''YzRmXHVhYzUwXHVhYzUxXHVhYzUyXHVhYzUzXHVhYzU1XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVhYzU2XHVhYzU3XHVhYzU5XHVhYzVhXHVhYzViXHVhYzVkXHVhYzVlXHVhYzVmXHVhYzYwXHVhYzYxXHVhYzYyXHVhYzYzXHVhYzY0XHVhYzY1XHVhYzY2XHVhYzY3''@;'; put 'put ''XHVhYzY4XHVhYzY5XHVhYzZhXHVhYzZiXHVhYzZjXHVhYzZkXHVhYzZlXHVhYzZmXHVhYzcyXHVhYzczXHVhYzc1XHVhYzc2XHVhYzc5XHVhYzdiXHVhYzdjXHVhYzdkXHVhYzdlXHVhYzdmXHVhYzgyXHVhYzg3XHVhYzg4XHVhYzhkXHVhYzhlXHVhYzhmXHVhYzkxXHVhYzkyXHVhYzkzXHVh''@;'; put 'put ''Yzk1XHVhYzk2XHVhYzk3XHVhYzk4XHVhYzk5XHVhYzlhXHVhYzliXHVhYzllXHVhY2EyXHVhY2EzXHVhY2E0XHVhY2E1XHVhY2E2XHVhY2E3XHVhY2FiXHVhY2FkXHVhY2FlXHVhY2IxXHVhY2IyXHVhY2IzXHVhY2I0XHVhY2I1XHVhY2I2XHVhY2I3XHVhY2JhXHVhY2JlXHVhY2JmXHVhY2Mw''@;'; put 'put ''XHVhY2MyXHVhY2MzXHVhY2M1XHVhY2M2XHVhY2M3XHVhY2M5XHVhY2NhXHVhY2NiXHVhY2NkXHVhY2NlXHVhY2NmXHVhY2QwXHVhY2QxXHVhY2QyXHVhY2QzXHVhY2Q0XHVhY2Q2XHVhY2Q4XHVhY2Q5XHVhY2RhXHVhY2RiXHVhY2RjXHVhY2RkXHVhY2RlXHVhY2RmXHVhY2UyXHVhY2UzXHVh''@;'; put 'put ''Y2U1XHVhY2U2XHVhY2U5XHVhY2ViXHVhY2VkXHVhY2VlXHVhY2YyXHVhY2Y0XHVhY2Y3XHVhY2Y4XHVhY2Y5XHVhY2ZhXHVhY2ZiXHVhY2ZlXHVhY2ZmXHVhZDAxXHVhZDAyXHVhZDAzXHVhZDA1XHVhZDA3XHVhZDA4XHVhZDA5XHVhZDBhXHVhZDBiXHVhZDBlXHVhZDEwXHVhZDEyXHVhZDEz''@;'; put 'put ''XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTI5XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxMjldW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTI5XVtnXV09MzMwMjQrZyx5WzMzMDI0K2ddPV9bMTI5XVtnXSk7Zm9yKF9bMTMwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVhZDE0XHVhZDE1XHVhZDE2XHVhZDE3XHVhZDE5XHVhZDFhXHVhZDFiXHVhZDFkXHVhZDFlXHVhZDFmXHVhZDIxXHVhZDIyXHVhZDIzXHVhZDI0XHVhZDI1XHVhZDI2XHVhZDI3XHVhZDI4XHVhZDJhXHVhZDJiXHVhZDJlXHVhZDJmXHVhZDMw''@;'; put 'put ''XHVhZDMxXHVhZDMyXHVhZDMzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVhZDM2XHVhZDM3XHVhZDM5XHVhZDNhXHVhZDNiXHVhZDNkXHVhZDNlXHVhZDNmXHVhZDQwXHVhZDQxXHVhZDQyXHVhZDQzXHVhZDQ2XHVhZDQ4XHVhZDRhXHVhZDRiXHVhZDRjXHVhZDRkXHVh''@;'; put 'put ''ZDRlXHVhZDRmXHVhZDUxXHVhZDUyXHVhZDUzXHVhZDU1XHVhZDU2XHVhZDU3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVhZDU5XHVhZDVhXHVhZDViXHVhZDVjXHVhZDVkXHVhZDVlXHVhZDVmXHVhZDYwXHVhZDYyXHVhZDY0XHVhZDY1XHVhZDY2XHVhZDY3XHVhZDY4''@;'; put 'put ''XHVhZDY5XHVhZDZhXHVhZDZiXHVhZDZlXHVhZDZmXHVhZDcxXHVhZDcyXHVhZDc3XHVhZDc4XHVhZDc5XHVhZDdhXHVhZDdlXHVhZDgwXHVhZDgzXHVhZDg0XHVhZDg1XHVhZDg2XHVhZDg3XHVhZDhhXHVhZDhiXHVhZDhkXHVhZDhlXHVhZDhmXHVhZDkxXHVhZDkyXHVhZDkzXHVhZDk0XHVh''@;'; put 'put ''ZDk1XHVhZDk2XHVhZDk3XHVhZDk4XHVhZDk5XHVhZDlhXHVhZDliXHVhZDllXHVhZDlmXHVhZGEwXHVhZGExXHVhZGEyXHVhZGEzXHVhZGE1XHVhZGE2XHVhZGE3XHVhZGE4XHVhZGE5XHVhZGFhXHVhZGFiXHVhZGFjXHVhZGFkXHVhZGFlXHVhZGFmXHVhZGIwXHVhZGIxXHVhZGIyXHVhZGIz''@;'; put 'put ''XHVhZGI0XHVhZGI1XHVhZGI2XHVhZGI4XHVhZGI5XHVhZGJhXHVhZGJiXHVhZGJjXHVhZGJkXHVhZGJlXHVhZGJmXHVhZGMyXHVhZGMzXHVhZGM1XHVhZGM2XHVhZGM3XHVhZGM5XHVhZGNhXHVhZGNiXHVhZGNjXHVhZGNkXHVhZGNlXHVhZGNmXHVhZGQyXHVhZGQ0XHVhZGQ1XHVhZGQ2XHVh''@;'; put 'put ''ZGQ3XHVhZGQ4XHVhZGQ5XHVhZGRhXHVhZGRiXHVhZGRkXHVhZGRlXHVhZGRmXHVhZGUxXHVhZGUyXHVhZGUzXHVhZGU1XHVhZGU2XHVhZGU3XHVhZGU4XHVhZGU5XHVhZGVhXHVhZGViXHVhZGVjXHVhZGVkXHVhZGVlXHVhZGVmXHVhZGYwXHVhZGYxXHVhZGYyXHVhZGYzXHVhZGY0XHVhZGY1''@;'; put 'put ''XHVhZGY2XHVhZGY3XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTMwXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxMzBdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTMwXVtnXV09MzMyODArZyx5WzMzMjgwK2ddPV9bMTMwXVtnXSk7Zm9yKF9bMTMxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVhZGZhXHVhZGZiXHVhZGZkXHVhZGZlXHVhZTAyXHVhZTAzXHVhZTA0XHVhZTA1XHVhZTA2XHVhZTA3XHVhZTBhXHVhZTBjXHVhZTBlXHVhZTBmXHVhZTEwXHVhZTExXHVhZTEyXHVhZTEzXHVhZTE1XHVhZTE2XHVhZTE3''@;'; put 'put ''XHVhZTE4XHVhZTE5XHVhZTFhXHVhZTFiXHVhZTFjXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVhZTFkXHVhZTFlXHVhZTFmXHVhZTIwXHVhZTIxXHVhZTIyXHVhZTIzXHVhZTI0XHVhZTI1XHVhZTI2XHVhZTI3XHVhZTI4XHVhZTI5XHVhZTJhXHVhZTJiXHVhZTJjXHVh''@;'; put 'put ''ZTJkXHVhZTJlXHVhZTJmXHVhZTMyXHVhZTMzXHVhZTM1XHVhZTM2XHVhZTM5XHVhZTNiXHVhZTNjXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVhZTNkXHVhZTNlXHVhZTNmXHVhZTQyXHVhZTQ0XHVhZTQ3XHVhZTQ4XHVhZTQ5XHVhZTRiXHVhZTRmXHVhZTUxXHVhZTUy''@;'; put 'put ''XHVhZTUzXHVhZTU1XHVhZTU3XHVhZTU4XHVhZTU5XHVhZTVhXHVhZTViXHVhZTVlXHVhZTYyXHVhZTYzXHVhZTY0XHVhZTY2XHVhZTY3XHVhZTZhXHVhZTZiXHVhZTZkXHVhZTZlXHVhZTZmXHVhZTcxXHVhZTcyXHVhZTczXHVhZTc0XHVhZTc1XHVhZTc2XHVhZTc3XHVhZTdhXHVhZTdlXHVh''@;'; put 'put ''ZTdmXHVhZTgwXHVhZTgxXHVhZTgyXHVhZTgzXHVhZTg2XHVhZTg3XHVhZTg4XHVhZTg5XHVhZThhXHVhZThiXHVhZThkXHVhZThlXHVhZThmXHVhZTkwXHVhZTkxXHVhZTkyXHVhZTkzXHVhZTk0XHVhZTk1XHVhZTk2XHVhZTk3XHVhZTk4XHVhZTk5XHVhZTlhXHVhZTliXHVhZTljXHVhZTlk''@;'; put 'put ''XHVhZTllXHVhZTlmXHVhZWEwXHVhZWExXHVhZWEyXHVhZWEzXHVhZWE0XHVhZWE1XHVhZWE2XHVhZWE3XHVhZWE4XHVhZWE5XHVhZWFhXHVhZWFiXHVhZWFjXHVhZWFkXHVhZWFlXHVhZWFmXHVhZWIwXHVhZWIxXHVhZWIyXHVhZWIzXHVhZWI0XHVhZWI1XHVhZWI2XHVhZWI3XHVhZWI4XHVh''@;'; put 'put ''ZWI5XHVhZWJhXHVhZWJiXHVhZWJmXHVhZWMxXHVhZWMyXHVhZWMzXHVhZWM1XHVhZWM2XHVhZWM3XHVhZWM4XHVhZWM5XHVhZWNhXHVhZWNiXHVhZWNlXHVhZWQyXHVhZWQzXHVhZWQ0XHVhZWQ1XHVhZWQ2XHVhZWQ3XHVhZWRhXHVhZWRiXHVhZWRkXHVhZWRlXHVhZWRmXHVhZWUwXHVhZWUx''@;'; put 'put ''XHVhZWUyXHVhZWUzXHVhZWU0XHVhZWU1XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTMxXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxMzFdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTMxXVtnXV09MzM1MzYrZyx5WzMzNTM2K2ddPV9bMTMxXVtnXSk7Zm9yKF9bMTMyXT0iXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVhZWU2XHVhZWU3XHVhZWU5XHVhZWVhXHVhZWVjXHVhZWVlXHVhZWVmXHVhZWYwXHVhZWYxXHVhZWYyXHVhZWYzXHVhZWY1XHVhZWY2XHVhZWY3XHVhZWY5XHVhZWZhXHVhZWZiXHVhZWZkXHVhZWZl''@;'; put 'put ''XHVhZWZmXHVhZjAwXHVhZjAxXHVhZjAyXHVhZjAzXHVhZjA0XHVhZjA1XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVhZjA2XHVhZjA5XHVhZjBhXHVhZjBiXHVhZjBjXHVhZjBlXHVhZjBmXHVhZjExXHVhZjEyXHVhZjEzXHVhZjE0XHVhZjE1XHVhZjE2XHVhZjE3XHVh''@;'; put 'put ''ZjE4XHVhZjE5XHVhZjFhXHVhZjFiXHVhZjFjXHVhZjFkXHVhZjFlXHVhZjFmXHVhZjIwXHVhZjIxXHVhZjIyXHVhZjIzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVhZjI0XHVhZjI1XHVhZjI2XHVhZjI3XHVhZjI4XHVhZjI5XHVhZjJhXHVhZjJiXHVhZjJlXHVhZjJm''@;'; put 'put ''XHVhZjMxXHVhZjMzXHVhZjM1XHVhZjM2XHVhZjM3XHVhZjM4XHVhZjM5XHVhZjNhXHVhZjNiXHVhZjNlXHVhZjQwXHVhZjQ0XHVhZjQ1XHVhZjQ2XHVhZjQ3XHVhZjRhXHVhZjRiXHVhZjRjXHVhZjRkXHVhZjRlXHVhZjRmXHVhZjUxXHVhZjUyXHVhZjUzXHVhZjU0XHVhZjU1XHVhZjU2XHVh''@;'; put 'put ''ZjU3XHVhZjU4XHVhZjU5XHVhZjVhXHVhZjViXHVhZjVlXHVhZjVmXHVhZjYwXHVhZjYxXHVhZjYyXHVhZjYzXHVhZjY2XHVhZjY3XHVhZjY4XHVhZjY5XHVhZjZhXHVhZjZiXHVhZjZjXHVhZjZkXHVhZjZlXHVhZjZmXHVhZjcwXHVhZjcxXHVhZjcyXHVhZjczXHVhZjc0XHVhZjc1XHVhZjc2''@;'; put 'put ''XHVhZjc3XHVhZjc4XHVhZjdhXHVhZjdiXHVhZjdjXHVhZjdkXHVhZjdlXHVhZjdmXHVhZjgxXHVhZjgyXHVhZjgzXHVhZjg1XHVhZjg2XHVhZjg3XHVhZjg5XHVhZjhhXHVhZjhiXHVhZjhjXHVhZjhkXHVhZjhlXHVhZjhmXHVhZjkyXHVhZjkzXHVhZjk0XHVhZjk2XHVhZjk3XHVhZjk4XHVh''@;'; put 'put ''Zjk5XHVhZjlhXHVhZjliXHVhZjlkXHVhZjllXHVhZjlmXHVhZmEwXHVhZmExXHVhZmEyXHVhZmEzXHVhZmE0XHVhZmE1XHVhZmE2XHVhZmE3XHVhZmE4XHVhZmE5XHVhZmFhXHVhZmFiXHVhZmFjXHVhZmFkXHVhZmFlXHVhZmFmXHVhZmIwXHVhZmIxXHVhZmIyXHVhZmIzXHVhZmI0XHVhZmI1''@;'; put 'put ''XHVhZmI2XHVhZmI3XHVhZmJhXHVhZmJiXHVhZmJkXHVhZmJlXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTMyXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxMzJdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTMyXVtnXV09MzM3OTIrZyx5WzMzNzkyK2ddPV9bMTMyXVtnXSk7Zm9yKF9bMTMz''@;'; put 'put ''XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVhZmJmXHVhZmMxXHVhZmMyXHVhZmMzXHVhZmM0XHVhZmM1XHVhZmM2XHVhZmNhXHVhZmNjXHVhZmNmXHVhZmQwXHVhZmQxXHVhZmQyXHVhZmQzXHVhZmQ1XHVhZmQ2XHVhZmQ3''@;'; put 'put ''XHVhZmQ4XHVhZmQ5XHVhZmRhXHVhZmRiXHVhZmRkXHVhZmRlXHVhZmRmXHVhZmUwXHVhZmUxXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVhZmUyXHVhZmUzXHVhZmU0XHVhZmU1XHVhZmU2XHVhZmU3XHVhZmVhXHVhZmViXHVhZmVjXHVhZmVkXHVhZmVlXHVhZmVmXHVh''@;'; put 'put ''ZmYyXHVhZmYzXHVhZmY1XHVhZmY2XHVhZmY3XHVhZmY5XHVhZmZhXHVhZmZiXHVhZmZjXHVhZmZkXHVhZmZlXHVhZmZmXHViMDAyXHViMDAzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViMDA1XHViMDA2XHViMDA3XHViMDA4XHViMDA5XHViMDBhXHViMDBiXHViMDBk''@;'; put 'put ''XHViMDBlXHViMDBmXHViMDExXHViMDEyXHViMDEzXHViMDE1XHViMDE2XHViMDE3XHViMDE4XHViMDE5XHViMDFhXHViMDFiXHViMDFlXHViMDFmXHViMDIwXHViMDIxXHViMDIyXHViMDIzXHViMDI0XHViMDI1XHViMDI2XHViMDI3XHViMDI5XHViMDJhXHViMDJiXHViMDJjXHViMDJkXHVi''@;'; put 'put ''MDJlXHViMDJmXHViMDMwXHViMDMxXHViMDMyXHViMDMzXHViMDM0XHViMDM1XHViMDM2XHViMDM3XHViMDM4XHViMDM5XHViMDNhXHViMDNiXHViMDNjXHViMDNkXHViMDNlXHViMDNmXHViMDQwXHViMDQxXHViMDQyXHViMDQzXHViMDQ2XHViMDQ3XHViMDQ5XHViMDRiXHViMDRkXHViMDRm''@;'; put 'put ''XHViMDUwXHViMDUxXHViMDUyXHViMDU2XHViMDU4XHViMDVhXHViMDViXHViMDVjXHViMDVlXHViMDVmXHViMDYwXHViMDYxXHViMDYyXHViMDYzXHViMDY0XHViMDY1XHViMDY2XHViMDY3XHViMDY4XHViMDY5XHViMDZhXHViMDZiXHViMDZjXHViMDZkXHViMDZlXHViMDZmXHViMDcwXHVi''@;'; put 'put ''MDcxXHViMDcyXHViMDczXHViMDc0XHViMDc1XHViMDc2XHViMDc3XHViMDc4XHViMDc5XHViMDdhXHViMDdiXHViMDdlXHViMDdmXHViMDgxXHViMDgyXHViMDgzXHViMDg1XHViMDg2XHViMDg3XHViMDg4XHViMDg5XHViMDhhXHViMDhiXHViMDhlXHViMDkwXHViMDkyXHViMDkzXHViMDk0''@;'; put 'put ''XHViMDk1XHViMDk2XHViMDk3XHViMDliXHViMDlkXHViMDllXHViMGEzXHViMGE0XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTMzXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxMzNdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTMzXVtnXV09MzQwNDgrZyx5WzM0MDQ4K2ddPV9bMTMzXVtn''@;'; put 'put ''XSk7Zm9yKF9bMTM0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViMGE1XHViMGE2XHViMGE3XHViMGFhXHViMGIwXHViMGIyXHViMGI2XHViMGI3XHViMGI5XHViMGJhXHViMGJiXHViMGJkXHViMGJlXHViMGJmXHViMGMw''@;'; put 'put ''XHViMGMxXHViMGMyXHViMGMzXHViMGM2XHViMGNhXHViMGNiXHViMGNjXHViMGNkXHViMGNlXHViMGNmXHViMGQyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViMGQzXHViMGQ1XHViMGQ2XHViMGQ3XHViMGQ5XHViMGRhXHViMGRiXHViMGRjXHViMGRkXHViMGRlXHVi''@;'; put 'put ''MGRmXHViMGUxXHViMGUyXHViMGUzXHViMGU0XHViMGU2XHViMGU3XHViMGU4XHViMGU5XHViMGVhXHViMGViXHViMGVjXHViMGVkXHViMGVlXHViMGVmXHViMGYwXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViMGYxXHViMGYyXHViMGYzXHViMGY0XHViMGY1XHViMGY2''@;'; put 'put ''XHViMGY3XHViMGY4XHViMGY5XHViMGZhXHViMGZiXHViMGZjXHViMGZkXHViMGZlXHViMGZmXHViMTAwXHViMTAxXHViMTAyXHViMTAzXHViMTA0XHViMTA1XHViMTA2XHViMTA3XHViMTBhXHViMTBkXHViMTBlXHViMTBmXHViMTExXHViMTE0XHViMTE1XHViMTE2XHViMTE3XHViMTFhXHVi''@;'; put 'put ''MTFlXHViMTFmXHViMTIwXHViMTIxXHViMTIyXHViMTI2XHViMTI3XHViMTI5XHViMTJhXHViMTJiXHViMTJkXHViMTJlXHViMTJmXHViMTMwXHViMTMxXHViMTMyXHViMTMzXHViMTM2XHViMTNhXHViMTNiXHViMTNjXHViMTNkXHViMTNlXHViMTNmXHViMTQyXHViMTQzXHViMTQ1XHViMTQ2''@;'; put 'put ''XHViMTQ3XHViMTQ5XHViMTRhXHViMTRiXHViMTRjXHViMTRkXHViMTRlXHViMTRmXHViMTUyXHViMTUzXHViMTU2XHViMTU3XHViMTU5XHViMTVhXHViMTViXHViMTVkXHViMTVlXHViMTVmXHViMTYxXHViMTYyXHViMTYzXHViMTY0XHViMTY1XHViMTY2XHViMTY3XHViMTY4XHViMTY5XHVi''@;'; put 'put ''MTZhXHViMTZiXHViMTZjXHViMTZkXHViMTZlXHViMTZmXHViMTcwXHViMTcxXHViMTcyXHViMTczXHViMTc0XHViMTc1XHViMTc2XHViMTc3XHViMTdhXHViMTdiXHViMTdkXHViMTdlXHViMTdmXHViMTgxXHViMTgzXHViMTg0XHViMTg1XHViMTg2XHViMTg3XHViMThhXHViMThjXHViMThl''@;'; put 'put ''XHViMThmXHViMTkwXHViMTkxXHViMTk1XHViMTk2XHViMTk3XHViMTk5XHViMTlhXHViMTliXHViMTlkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTM0XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxMzRdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTM0XVtnXV09MzQzMDQrZyx5WzM0MzA0''@;'; put 'put ''K2ddPV9bMTM0XVtnXSk7Zm9yKF9bMTM1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViMTllXHViMTlmXHViMWEwXHViMWExXHViMWEyXHViMWEzXHViMWE0XHViMWE1XHViMWE2XHViMWE3XHViMWE5XHViMWFhXHViMWFi''@;'; put 'put ''XHViMWFjXHViMWFkXHViMWFlXHViMWFmXHViMWIwXHViMWIxXHViMWIyXHViMWIzXHViMWI0XHViMWI1XHViMWI2XHViMWI3XHViMWI4XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViMWI5XHViMWJhXHViMWJiXHViMWJjXHViMWJkXHViMWJlXHViMWJmXHViMWMwXHVi''@;'; put 'put ''MWMxXHViMWMyXHViMWMzXHViMWM0XHViMWM1XHViMWM2XHViMWM3XHViMWM4XHViMWM5XHViMWNhXHViMWNiXHViMWNkXHViMWNlXHViMWNmXHViMWQxXHViMWQyXHViMWQzXHViMWQ1XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViMWQ2XHViMWQ3XHViMWQ4XHViMWQ5''@;'; put 'put ''XHViMWRhXHViMWRiXHViMWRlXHViMWUwXHViMWUxXHViMWUyXHViMWUzXHViMWU0XHViMWU1XHViMWU2XHViMWU3XHViMWVhXHViMWViXHViMWVkXHViMWVlXHViMWVmXHViMWYxXHViMWYyXHViMWYzXHViMWY0XHViMWY1XHViMWY2XHViMWY3XHViMWY4XHViMWZhXHViMWZjXHViMWZlXHVi''@;'; put 'put ''MWZmXHViMjAwXHViMjAxXHViMjAyXHViMjAzXHViMjA2XHViMjA3XHViMjA5XHViMjBhXHViMjBkXHViMjBlXHViMjBmXHViMjEwXHViMjExXHViMjEyXHViMjEzXHViMjE2XHViMjE4XHViMjFhXHViMjFiXHViMjFjXHViMjFkXHViMjFlXHViMjFmXHViMjIxXHViMjIyXHViMjIzXHViMjI0''@;'; put 'put ''XHViMjI1XHViMjI2XHViMjI3XHViMjI4XHViMjI5XHViMjJhXHViMjJiXHViMjJjXHViMjJkXHViMjJlXHViMjJmXHViMjMwXHViMjMxXHViMjMyXHViMjMzXHViMjM1XHViMjM2XHViMjM3XHViMjM4XHViMjM5XHViMjNhXHViMjNiXHViMjNkXHViMjNlXHViMjNmXHViMjQwXHViMjQxXHVi''@;'; put 'put ''MjQyXHViMjQzXHViMjQ0XHViMjQ1XHViMjQ2XHViMjQ3XHViMjQ4XHViMjQ5XHViMjRhXHViMjRiXHViMjRjXHViMjRkXHViMjRlXHViMjRmXHViMjUwXHViMjUxXHViMjUyXHViMjUzXHViMjU0XHViMjU1XHViMjU2XHViMjU3XHViMjU5XHViMjVhXHViMjViXHViMjVkXHViMjVlXHViMjVm''@;'; put 'put ''XHViMjYxXHViMjYyXHViMjYzXHViMjY0XHViMjY1XHViMjY2XHViMjY3XHViMjZhXHViMjZiXHViMjZjXHViMjZkXHViMjZlXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTM1XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxMzVdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTM1XVtnXV09MzQ1''@;'; put 'put ''NjArZyx5WzM0NTYwK2ddPV9bMTM1XVtnXSk7Zm9yKF9bMTM2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViMjZmXHViMjcwXHViMjcxXHViMjcyXHViMjczXHViMjc2XHViMjc3XHViMjc4XHViMjc5XHViMjdhXHViMjdi''@;'; put 'put ''XHViMjdkXHViMjdlXHViMjdmXHViMjgwXHViMjgxXHViMjgyXHViMjgzXHViMjg2XHViMjg3XHViMjg4XHViMjhhXHViMjhiXHViMjhjXHViMjhkXHViMjhlXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViMjhmXHViMjkyXHViMjkzXHViMjk1XHViMjk2XHViMjk3XHVi''@;'; put 'put ''MjliXHViMjljXHViMjlkXHViMjllXHViMjlmXHViMmEyXHViMmE0XHViMmE3XHViMmE4XHViMmE5XHViMmFiXHViMmFkXHViMmFlXHViMmFmXHViMmIxXHViMmIyXHViMmIzXHViMmI1XHViMmI2XHViMmI3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViMmI4XHViMmI5''@;'; put 'put ''XHViMmJhXHViMmJiXHViMmJjXHViMmJkXHViMmJlXHViMmJmXHViMmMwXHViMmMxXHViMmMyXHViMmMzXHViMmM0XHViMmM1XHViMmM2XHViMmM3XHViMmNhXHViMmNiXHViMmNkXHViMmNlXHViMmNmXHViMmQxXHViMmQzXHViMmQ0XHViMmQ1XHViMmQ2XHViMmQ3XHViMmRhXHViMmRjXHVi''@;'; put 'put ''MmRlXHViMmRmXHViMmUwXHViMmUxXHViMmUzXHViMmU3XHViMmU5XHViMmVhXHViMmYwXHViMmYxXHViMmYyXHViMmY2XHViMmZjXHViMmZkXHViMmZlXHViMzAyXHViMzAzXHViMzA1XHViMzA2XHViMzA3XHViMzA5XHViMzBhXHViMzBiXHViMzBjXHViMzBkXHViMzBlXHViMzBmXHViMzEy''@;'; put 'put ''XHViMzE2XHViMzE3XHViMzE4XHViMzE5XHViMzFhXHViMzFiXHViMzFkXHViMzFlXHViMzFmXHViMzIwXHViMzIxXHViMzIyXHViMzIzXHViMzI0XHViMzI1XHViMzI2XHViMzI3XHViMzI4XHViMzI5XHViMzJhXHViMzJiXHViMzJjXHViMzJkXHViMzJlXHViMzJmXHViMzMwXHViMzMxXHVi''@;'; put 'put ''MzMyXHViMzMzXHViMzM0XHViMzM1XHViMzM2XHViMzM3XHViMzM4XHViMzM5XHViMzNhXHViMzNiXHViMzNjXHViMzNkXHViMzNlXHViMzNmXHViMzQwXHViMzQxXHViMzQyXHViMzQzXHViMzQ0XHViMzQ1XHViMzQ2XHViMzQ3XHViMzQ4XHViMzQ5XHViMzRhXHViMzRiXHViMzRjXHViMzRk''@;'; put 'put ''XHViMzRlXHViMzRmXHViMzUwXHViMzUxXHViMzUyXHViMzUzXHViMzU3XHViMzU5XHViMzVhXHViMzVkXHViMzYwXHViMzYxXHViMzYyXHViMzYzXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTM2XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxMzZdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19b''@;'; put 'put ''MTM2XVtnXV09MzQ4MTYrZyx5WzM0ODE2K2ddPV9bMTM2XVtnXSk7Zm9yKF9bMTM3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViMzY2XHViMzY4XHViMzZhXHViMzZjXHViMzZkXHViMzZmXHViMzcyXHViMzczXHViMzc1''@;'; put 'put ''XHViMzc2XHViMzc3XHViMzc5XHViMzdhXHViMzdiXHViMzdjXHViMzdkXHViMzdlXHViMzdmXHViMzgyXHViMzg2XHViMzg3XHViMzg4XHViMzg5XHViMzhhXHViMzhiXHViMzhkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViMzhlXHViMzhmXHViMzkxXHViMzkyXHVi''@;'; put 'put ''MzkzXHViMzk1XHViMzk2XHViMzk3XHViMzk4XHViMzk5XHViMzlhXHViMzliXHViMzljXHViMzlkXHViMzllXHViMzlmXHViM2EyXHViM2EzXHViM2E0XHViM2E1XHViM2E2XHViM2E3XHViM2E5XHViM2FhXHViM2FiXHViM2FkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHViM2FlXHViM2FmXHViM2IwXHViM2IxXHViM2IyXHViM2IzXHViM2I0XHViM2I1XHViM2I2XHViM2I3XHViM2I4XHViM2I5XHViM2JhXHViM2JiXHViM2JjXHViM2JkXHViM2JlXHViM2JmXHViM2MwXHViM2MxXHViM2MyXHViM2MzXHViM2M2XHViM2M3XHViM2M5XHViM2NhXHViM2NkXHVi''@;'; put 'put ''M2NmXHViM2QxXHViM2QyXHViM2QzXHViM2Q2XHViM2Q4XHViM2RhXHViM2RjXHViM2RlXHViM2RmXHViM2UxXHViM2UyXHViM2UzXHViM2U1XHViM2U2XHViM2U3XHViM2U5XHViM2VhXHViM2ViXHViM2VjXHViM2VkXHViM2VlXHViM2VmXHViM2YwXHViM2YxXHViM2YyXHViM2YzXHViM2Y0''@;'; put 'put ''XHViM2Y1XHViM2Y2XHViM2Y3XHViM2Y4XHViM2Y5XHViM2ZhXHViM2ZiXHViM2ZkXHViM2ZlXHViM2ZmXHViNDAwXHViNDAxXHViNDAyXHViNDAzXHViNDA0XHViNDA1XHViNDA2XHViNDA3XHViNDA4XHViNDA5XHViNDBhXHViNDBiXHViNDBjXHViNDBkXHViNDBlXHViNDBmXHViNDExXHVi''@;'; put 'put ''NDEyXHViNDEzXHViNDE0XHViNDE1XHViNDE2XHViNDE3XHViNDE5XHViNDFhXHViNDFiXHViNDFkXHViNDFlXHViNDFmXHViNDIxXHViNDIyXHViNDIzXHViNDI0XHViNDI1XHViNDI2XHViNDI3XHViNDJhXHViNDJjXHViNDJkXHViNDJlXHViNDJmXHViNDMwXHViNDMxXHViNDMyXHViNDMz''@;'; put 'put ''XHViNDM1XHViNDM2XHViNDM3XHViNDM4XHViNDM5XHViNDNhXHViNDNiXHViNDNjXHViNDNkXHViNDNlXHViNDNmXHViNDQwXHViNDQxXHViNDQyXHViNDQzXHViNDQ0XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTM3XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxMzddW2ddLmNoYXJDb2Rl''@;'; put 'put ''QXQoMCkmJihJW19bMTM3XVtnXV09MzUwNzIrZyx5WzM1MDcyK2ddPV9bMTM3XVtnXSk7Zm9yKF9bMTM4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViNDQ1XHViNDQ2XHViNDQ3XHViNDQ4XHViNDQ5XHViNDRhXHViNDRi''@;'; put 'put ''XHViNDRjXHViNDRkXHViNDRlXHViNDRmXHViNDUyXHViNDUzXHViNDU1XHViNDU2XHViNDU3XHViNDU5XHViNDVhXHViNDViXHViNDVjXHViNDVkXHViNDVlXHViNDVmXHViNDYyXHViNDY0XHViNDY2XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViNDY3XHViNDY4XHVi''@;'; put 'put ''NDY5XHViNDZhXHViNDZiXHViNDZkXHViNDZlXHViNDZmXHViNDcwXHViNDcxXHViNDcyXHViNDczXHViNDc0XHViNDc1XHViNDc2XHViNDc3XHViNDc4XHViNDc5XHViNDdhXHViNDdiXHViNDdjXHViNDdkXHViNDdlXHViNDdmXHViNDgxXHViNDgyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHViNDgzXHViNDg0XHViNDg1XHViNDg2XHViNDg3XHViNDg5XHViNDhhXHViNDhiXHViNDhjXHViNDhkXHViNDhlXHViNDhmXHViNDkwXHViNDkxXHViNDkyXHViNDkzXHViNDk0XHViNDk1XHViNDk2XHViNDk3XHViNDk4XHViNDk5XHViNDlhXHViNDliXHViNDljXHVi''@;'; put 'put ''NDllXHViNDlmXHViNGEwXHViNGExXHViNGEyXHViNGEzXHViNGE1XHViNGE2XHViNGE3XHViNGE5XHViNGFhXHViNGFiXHViNGFkXHViNGFlXHViNGFmXHViNGIwXHViNGIxXHViNGIyXHViNGIzXHViNGI0XHViNGI2XHViNGI4XHViNGJhXHViNGJiXHViNGJjXHViNGJkXHViNGJlXHViNGJm''@;'; put 'put ''XHViNGMxXHViNGMyXHViNGMzXHViNGM1XHViNGM2XHViNGM3XHViNGM5XHViNGNhXHViNGNiXHViNGNjXHViNGNkXHViNGNlXHViNGNmXHViNGQxXHViNGQyXHViNGQzXHViNGQ0XHViNGQ2XHViNGQ3XHViNGQ4XHViNGQ5XHViNGRhXHViNGRiXHViNGRlXHViNGRmXHViNGUxXHViNGUyXHVi''@;'; put 'put ''NGU1XHViNGU3XHViNGU4XHViNGU5XHViNGVhXHViNGViXHViNGVlXHViNGYwXHViNGYyXHViNGYzXHViNGY0XHViNGY1XHViNGY2XHViNGY3XHViNGY5XHViNGZhXHViNGZiXHViNGZjXHViNGZkXHViNGZlXHViNGZmXHViNTAwXHViNTAxXHViNTAyXHViNTAzXHViNTA0XHViNTA1XHViNTA2''@;'; put 'put ''XHViNTA3XHViNTA4XHViNTA5XHViNTBhXHViNTBiXHViNTBjXHViNTBkXHViNTBlXHViNTBmXHViNTEwXHViNTExXHViNTEyXHViNTEzXHViNTE2XHViNTE3XHViNTE5XHViNTFhXHViNTFkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTM4XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxMzhd''@;'; put 'put ''W2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTM4XVtnXV09MzUzMjgrZyx5WzM1MzI4K2ddPV9bMTM4XVtnXSk7Zm9yKF9bMTM5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViNTFlXHViNTFmXHViNTIwXHViNTIxXHViNTIy''@;'; put 'put ''XHViNTIzXHViNTI2XHViNTJiXHViNTJjXHViNTJkXHViNTJlXHViNTJmXHViNTMyXHViNTMzXHViNTM1XHViNTM2XHViNTM3XHViNTM5XHViNTNhXHViNTNiXHViNTNjXHViNTNkXHViNTNlXHViNTNmXHViNTQyXHViNTQ2XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVi''@;'; put 'put ''NTQ3XHViNTQ4XHViNTQ5XHViNTRhXHViNTRlXHViNTRmXHViNTUxXHViNTUyXHViNTUzXHViNTU1XHViNTU2XHViNTU3XHViNTU4XHViNTU5XHViNTVhXHViNTViXHViNTVlXHViNTYyXHViNTYzXHViNTY0XHViNTY1XHViNTY2XHViNTY3XHViNTY4XHViNTY5XHViNTZhXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViNTZiXHViNTZjXHViNTZkXHViNTZlXHViNTZmXHViNTcwXHViNTcxXHViNTcyXHViNTczXHViNTc0XHViNTc1XHViNTc2XHViNTc3XHViNTc4XHViNTc5XHViNTdhXHViNTdiXHViNTdjXHViNTdkXHViNTdlXHViNTdmXHViNTgwXHViNTgxXHVi''@;'; put 'put ''NTgyXHViNTgzXHViNTg0XHViNTg1XHViNTg2XHViNTg3XHViNTg4XHViNTg5XHViNThhXHViNThiXHViNThjXHViNThkXHViNThlXHViNThmXHViNTkwXHViNTkxXHViNTkyXHViNTkzXHViNTk0XHViNTk1XHViNTk2XHViNTk3XHViNTk4XHViNTk5XHViNTlhXHViNTliXHViNTljXHViNTlk''@;'; put 'put ''XHViNTllXHViNTlmXHViNWEyXHViNWEzXHViNWE1XHViNWE2XHViNWE3XHViNWE5XHViNWFjXHViNWFkXHViNWFlXHViNWFmXHViNWIyXHViNWI2XHViNWI3XHViNWI4XHViNWI5XHViNWJhXHViNWJlXHViNWJmXHViNWMxXHViNWMyXHViNWMzXHViNWM1XHViNWM2XHViNWM3XHViNWM4XHVi''@;'; put 'put ''NWM5XHViNWNhXHViNWNiXHViNWNlXHViNWQyXHViNWQzXHViNWQ0XHViNWQ1XHViNWQ2XHViNWQ3XHViNWQ5XHViNWRhXHViNWRiXHViNWRjXHViNWRkXHViNWRlXHViNWRmXHViNWUwXHViNWUxXHViNWUyXHViNWUzXHViNWU0XHViNWU1XHViNWU2XHViNWU3XHViNWU4XHViNWU5XHViNWVh''@;'; put 'put ''XHViNWViXHViNWVkXHViNWVlXHViNWVmXHViNWYwXHViNWYxXHViNWYyXHViNWYzXHViNWY0XHViNWY1XHViNWY2XHViNWY3XHViNWY4XHViNWY5XHViNWZhXHViNWZiXHViNWZjXHViNWZkXHViNWZlXHViNWZmXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTM5XS5sZW5ndGg7KytnKTY1''@;'; put 'put ''NTMzIT09X1sxMzldW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTM5XVtnXV09MzU1ODQrZyx5WzM1NTg0K2ddPV9bMTM5XVtnXSk7Zm9yKF9bMTQwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViNjAwXHViNjAxXHViNjAy''@;'; put 'put ''XHViNjAzXHViNjA0XHViNjA1XHViNjA2XHViNjA3XHViNjA4XHViNjA5XHViNjBhXHViNjBiXHViNjBjXHViNjBkXHViNjBlXHViNjBmXHViNjEyXHViNjEzXHViNjE1XHViNjE2XHViNjE3XHViNjE5XHViNjFhXHViNjFiXHViNjFjXHViNjFkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHViNjFlXHViNjFmXHViNjIwXHViNjIxXHViNjIyXHViNjIzXHViNjI0XHViNjI2XHViNjI3XHViNjI4XHViNjI5XHViNjJhXHViNjJiXHViNjJkXHViNjJlXHViNjJmXHViNjMwXHViNjMxXHViNjMyXHViNjMzXHViNjM1XHViNjM2XHViNjM3XHViNjM4XHViNjM5XHViNjNh''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViNjNiXHViNjNjXHViNjNkXHViNjNlXHViNjNmXHViNjQwXHViNjQxXHViNjQyXHViNjQzXHViNjQ0XHViNjQ1XHViNjQ2XHViNjQ3XHViNjQ5XHViNjRhXHViNjRiXHViNjRjXHViNjRkXHViNjRlXHViNjRmXHViNjUwXHVi''@;'; put 'put ''NjUxXHViNjUyXHViNjUzXHViNjU0XHViNjU1XHViNjU2XHViNjU3XHViNjU4XHViNjU5XHViNjVhXHViNjViXHViNjVjXHViNjVkXHViNjVlXHViNjVmXHViNjYwXHViNjYxXHViNjYyXHViNjYzXHViNjY1XHViNjY2XHViNjY3XHViNjY5XHViNjZhXHViNjZiXHViNjZjXHViNjZkXHViNjZl''@;'; put 'put ''XHViNjZmXHViNjcwXHViNjcxXHViNjcyXHViNjczXHViNjc0XHViNjc1XHViNjc2XHViNjc3XHViNjc4XHViNjc5XHViNjdhXHViNjdiXHViNjdjXHViNjdkXHViNjdlXHViNjdmXHViNjgwXHViNjgxXHViNjgyXHViNjgzXHViNjg0XHViNjg1XHViNjg2XHViNjg3XHViNjg4XHViNjg5XHVi''@;'; put 'put ''NjhhXHViNjhiXHViNjhjXHViNjhkXHViNjhlXHViNjhmXHViNjkwXHViNjkxXHViNjkyXHViNjkzXHViNjk0XHViNjk1XHViNjk2XHViNjk3XHViNjk4XHViNjk5XHViNjlhXHViNjliXHViNjllXHViNjlmXHViNmExXHViNmEyXHViNmEzXHViNmE1XHViNmE2XHViNmE3XHViNmE4XHViNmE5''@;'; put 'put ''XHViNmFhXHViNmFkXHViNmFlXHViNmFmXHViNmIwXHViNmIyXHViNmIzXHViNmI0XHViNmI1XHViNmI2XHViNmI3XHViNmI4XHViNmI5XHViNmJhXHViNmJiXHViNmJjXHViNmJkXHViNmJlXHViNmJmXHViNmMwXHViNmMxXHViNmMyXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTQwXS5s''@;'; put 'put ''ZW5ndGg7KytnKTY1NTMzIT09X1sxNDBdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTQwXVtnXV09MzU4NDArZyx5WzM1ODQwK2ddPV9bMTQwXVtnXSk7Zm9yKF9bMTQxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViNmMz''@;'; put 'put ''XHViNmM0XHViNmM1XHViNmM2XHViNmM3XHViNmM4XHViNmM5XHViNmNhXHViNmNiXHViNmNjXHViNmNkXHViNmNlXHViNmNmXHViNmQwXHViNmQxXHViNmQyXHViNmQzXHViNmQ1XHViNmQ2XHViNmQ3XHViNmQ4XHViNmQ5XHViNmRhXHViNmRiXHViNmRjXHViNmRkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViNmRlXHViNmRmXHViNmUwXHViNmUxXHViNmUyXHViNmUzXHViNmU0XHViNmU1XHViNmU2XHViNmU3XHViNmU4XHViNmU5XHViNmVhXHViNmViXHViNmVjXHViNmVkXHViNmVlXHViNmVmXHViNmYxXHViNmYyXHViNmYzXHViNmY1XHViNmY2XHViNmY3''@;'; put 'put ''XHViNmY5XHViNmZhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViNmZiXHViNmZjXHViNmZkXHViNmZlXHViNmZmXHViNzAyXHViNzAzXHViNzA0XHViNzA2XHViNzA3XHViNzA4XHViNzA5XHViNzBhXHViNzBiXHViNzBjXHViNzBkXHViNzBlXHViNzBmXHViNzEwXHVi''@;'; put 'put ''NzExXHViNzEyXHViNzEzXHViNzE0XHViNzE1XHViNzE2XHViNzE3XHViNzE4XHViNzE5XHViNzFhXHViNzFiXHViNzFjXHViNzFkXHViNzFlXHViNzFmXHViNzIwXHViNzIxXHViNzIyXHViNzIzXHViNzI0XHViNzI1XHViNzI2XHViNzI3XHViNzJhXHViNzJiXHViNzJkXHViNzJlXHViNzMx''@;'; put 'put ''XHViNzMyXHViNzMzXHViNzM0XHViNzM1XHViNzM2XHViNzM3XHViNzNhXHViNzNjXHViNzNkXHViNzNlXHViNzNmXHViNzQwXHViNzQxXHViNzQyXHViNzQzXHViNzQ1XHViNzQ2XHViNzQ3XHViNzQ5XHViNzRhXHViNzRiXHViNzRkXHViNzRlXHViNzRmXHViNzUwXHViNzUxXHViNzUyXHVi''@;'; put 'put ''NzUzXHViNzU2XHViNzU3XHViNzU4XHViNzU5XHViNzVhXHViNzViXHViNzVjXHViNzVkXHViNzVlXHViNzVmXHViNzYxXHViNzYyXHViNzYzXHViNzY1XHViNzY2XHViNzY3XHViNzY5XHViNzZhXHViNzZiXHViNzZjXHViNzZkXHViNzZlXHViNzZmXHViNzcyXHViNzc0XHViNzc2XHViNzc3''@;'; put 'put ''XHViNzc4XHViNzc5XHViNzdhXHViNzdiXHViNzdlXHViNzdmXHViNzgxXHViNzgyXHViNzgzXHViNzg1XHViNzg2XHViNzg3XHViNzg4XHViNzg5XHViNzhhXHViNzhiXHViNzhlXHViNzkzXHViNzk0XHViNzk1XHViNzlhXHViNzliXHViNzlkXHViNzllXHVmZmZkIi5zcGxpdCgiIiksZz0w''@;'; put 'put ''O2chPV9bMTQxXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNDFdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTQxXVtnXV09MzYwOTYrZyx5WzM2MDk2K2ddPV9bMTQxXVtnXSk7Zm9yKF9bMTQyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHViNzlmXHViN2ExXHViN2EyXHViN2EzXHViN2E0XHViN2E1XHViN2E2XHViN2E3XHViN2FhXHViN2FlXHViN2FmXHViN2IwXHViN2IxXHViN2IyXHViN2IzXHViN2I2XHViN2I3XHViN2I5XHViN2JhXHViN2JiXHViN2JjXHViN2JkXHViN2JlXHViN2JmXHViN2MwXHViN2MxXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViN2MyXHViN2MzXHViN2M0XHViN2M1XHViN2M2XHViN2M4XHViN2NhXHViN2NiXHViN2NjXHViN2NkXHViN2NlXHViN2NmXHViN2QwXHViN2QxXHViN2QyXHViN2QzXHViN2Q0XHViN2Q1XHViN2Q2XHViN2Q3XHViN2Q4XHViN2Q5''@;'; put 'put ''XHViN2RhXHViN2RiXHViN2RjXHViN2RkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViN2RlXHViN2RmXHViN2UwXHViN2UxXHViN2UyXHViN2UzXHViN2U0XHViN2U1XHViN2U2XHViN2U3XHViN2U4XHViN2U5XHViN2VhXHViN2ViXHViN2VlXHViN2VmXHViN2YxXHVi''@;'; put 'put ''N2YyXHViN2YzXHViN2Y1XHViN2Y2XHViN2Y3XHViN2Y4XHViN2Y5XHViN2ZhXHViN2ZiXHViN2ZlXHViODAyXHViODAzXHViODA0XHViODA1XHViODA2XHViODBhXHViODBiXHViODBkXHViODBlXHViODBmXHViODExXHViODEyXHViODEzXHViODE0XHViODE1XHViODE2XHViODE3XHViODFh''@;'; put 'put ''XHViODFjXHViODFlXHViODFmXHViODIwXHViODIxXHViODIyXHViODIzXHViODI2XHViODI3XHViODI5XHViODJhXHViODJiXHViODJkXHViODJlXHViODJmXHViODMwXHViODMxXHViODMyXHViODMzXHViODM2XHViODNhXHViODNiXHViODNjXHViODNkXHViODNlXHViODNmXHViODQxXHVi''@;'; put 'put ''ODQyXHViODQzXHViODQ1XHViODQ2XHViODQ3XHViODQ4XHViODQ5XHViODRhXHViODRiXHViODRjXHViODRkXHViODRlXHViODRmXHViODUwXHViODUyXHViODU0XHViODU1XHViODU2XHViODU3XHViODU4XHViODU5XHViODVhXHViODViXHViODVlXHViODVmXHViODYxXHViODYyXHViODYz''@;'; put 'put ''XHViODY1XHViODY2XHViODY3XHViODY4XHViODY5XHViODZhXHViODZiXHViODZlXHViODcwXHViODcyXHViODczXHViODc0XHViODc1XHViODc2XHViODc3XHViODc5XHViODdhXHViODdiXHViODdkXHViODdlXHViODdmXHViODgwXHViODgxXHViODgyXHViODgzXHViODg0XHVmZmZkIi5z''@;'; put 'put ''cGxpdCgiIiksZz0wO2chPV9bMTQyXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNDJdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTQyXVtnXV09MzYzNTIrZyx5WzM2MzUyK2ddPV9bMTQyXVtnXSk7Zm9yKF9bMTQzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHViODg1XHViODg2XHViODg3XHViODg4XHViODg5XHViODhhXHViODhiXHViODhjXHViODhlXHViODhmXHViODkwXHViODkxXHViODkyXHViODkzXHViODk0XHViODk1XHViODk2XHViODk3XHViODk4XHViODk5XHViODlhXHViODliXHViODljXHViODlkXHVi''@;'; put 'put ''ODllXHViODlmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViOGEwXHViOGExXHViOGEyXHViOGEzXHViOGE0XHViOGE1XHViOGE2XHViOGE3XHViOGE5XHViOGFhXHViOGFiXHViOGFjXHViOGFkXHViOGFlXHViOGFmXHViOGIxXHViOGIyXHViOGIzXHViOGI1XHViOGI2''@;'; put 'put ''XHViOGI3XHViOGI5XHViOGJhXHViOGJiXHViOGJjXHViOGJkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViOGJlXHViOGJmXHViOGMyXHViOGM0XHViOGM2XHViOGM3XHViOGM4XHViOGM5XHViOGNhXHViOGNiXHViOGNkXHViOGNlXHViOGNmXHViOGQxXHViOGQyXHVi''@;'; put 'put ''OGQzXHViOGQ1XHViOGQ2XHViOGQ3XHViOGQ4XHViOGQ5XHViOGRhXHViOGRiXHViOGRjXHViOGRlXHViOGUwXHViOGUyXHViOGUzXHViOGU0XHViOGU1XHViOGU2XHViOGU3XHViOGVhXHViOGViXHViOGVkXHViOGVlXHViOGVmXHViOGYxXHViOGYyXHViOGYzXHViOGY0XHViOGY1XHViOGY2''@;'; put 'put ''XHViOGY3XHViOGZhXHViOGZjXHViOGZlXHViOGZmXHViOTAwXHViOTAxXHViOTAyXHViOTAzXHViOTA1XHViOTA2XHViOTA3XHViOTA4XHViOTA5XHViOTBhXHViOTBiXHViOTBjXHViOTBkXHViOTBlXHViOTBmXHViOTEwXHViOTExXHViOTEyXHViOTEzXHViOTE0XHViOTE1XHViOTE2XHVi''@;'; put 'put ''OTE3XHViOTE5XHViOTFhXHViOTFiXHViOTFjXHViOTFkXHViOTFlXHViOTFmXHViOTIxXHViOTIyXHViOTIzXHViOTI0XHViOTI1XHViOTI2XHViOTI3XHViOTI4XHViOTI5XHViOTJhXHViOTJiXHViOTJjXHViOTJkXHViOTJlXHViOTJmXHViOTMwXHViOTMxXHViOTMyXHViOTMzXHViOTM0''@;'; put 'put ''XHViOTM1XHViOTM2XHViOTM3XHViOTM4XHViOTM5XHViOTNhXHViOTNiXHViOTNlXHViOTNmXHViOTQxXHViOTQyXHViOTQzXHViOTQ1XHViOTQ2XHViOTQ3XHViOTQ4XHViOTQ5XHViOTRhXHViOTRiXHViOTRkXHViOTRlXHViOTUwXHViOTUyXHViOTUzXHViOTU0XHViOTU1XHViOTU2XHVi''@;'; put 'put ''OTU3XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTQzXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNDNdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTQzXVtnXV09MzY2MDgrZyx5WzM2NjA4K2ddPV9bMTQzXVtnXSk7Zm9yKF9bMTQ0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViOTVhXHViOTViXHViOTVkXHViOTVlXHViOTVmXHViOTYxXHViOTYyXHViOTYzXHViOTY0XHViOTY1XHViOTY2XHViOTY3XHViOTZhXHViOTZjXHViOTZlXHViOTZmXHViOTcwXHViOTcxXHViOTcyXHViOTczXHViOTc2XHViOTc3XHVi''@;'; put 'put ''OTc5XHViOTdhXHViOTdiXHViOTdkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViOTdlXHViOTdmXHViOTgwXHViOTgxXHViOTgyXHViOTgzXHViOTg2XHViOTg4XHViOThiXHViOThjXHViOThmXHViOTkwXHViOTkxXHViOTkyXHViOTkzXHViOTk0XHViOTk1XHViOTk2''@;'; put 'put ''XHViOTk3XHViOTk4XHViOTk5XHViOTlhXHViOTliXHViOTljXHViOTlkXHViOTllXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViOTlmXHViOWEwXHViOWExXHViOWEyXHViOWEzXHViOWE0XHViOWE1XHViOWE2XHViOWE3XHViOWE4XHViOWE5XHViOWFhXHViOWFiXHVi''@;'; put 'put ''OWFlXHViOWFmXHViOWIxXHViOWIyXHViOWIzXHViOWI1XHViOWI2XHViOWI3XHViOWI4XHViOWI5XHViOWJhXHViOWJiXHViOWJlXHViOWMwXHViOWMyXHViOWMzXHViOWM0XHViOWM1XHViOWM2XHViOWM3XHViOWNhXHViOWNiXHViOWNkXHViOWQzXHViOWQ0XHViOWQ1XHViOWQ2XHViOWQ3''@;'; put 'put ''XHViOWRhXHViOWRjXHViOWRmXHViOWUwXHViOWUyXHViOWU2XHViOWU3XHViOWU5XHViOWVhXHViOWViXHViOWVkXHViOWVlXHViOWVmXHViOWYwXHViOWYxXHViOWYyXHViOWYzXHViOWY2XHViOWZiXHViOWZjXHViOWZkXHViOWZlXHViOWZmXHViYTAyXHViYTAzXHViYTA0XHViYTA1XHVi''@;'; put 'put ''YTA2XHViYTA3XHViYTA5XHViYTBhXHViYTBiXHViYTBjXHViYTBkXHViYTBlXHViYTBmXHViYTEwXHViYTExXHViYTEyXHViYTEzXHViYTE0XHViYTE2XHViYTE3XHViYTE4XHViYTE5XHViYTFhXHViYTFiXHViYTFjXHViYTFkXHViYTFlXHViYTFmXHViYTIwXHViYTIxXHViYTIyXHViYTIz''@;'; put 'put ''XHViYTI0XHViYTI1XHViYTI2XHViYTI3XHViYTI4XHViYTI5XHViYTJhXHViYTJiXHViYTJjXHViYTJkXHViYTJlXHViYTJmXHViYTMwXHViYTMxXHViYTMyXHViYTMzXHViYTM0XHViYTM1XHViYTM2XHViYTM3XHViYTNhXHViYTNiXHViYTNkXHViYTNlXHViYTNmXHViYTQxXHViYTQzXHVi''@;'; put 'put ''YTQ0XHViYTQ1XHViYTQ2XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTQ0XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNDRdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTQ0XVtnXV09MzY4NjQrZyx5WzM2ODY0K2ddPV9bMTQ0XVtnXSk7Zm9yKF9bMTQ1XT0iXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViYTQ3XHViYTRhXHViYTRjXHViYTRmXHViYTUwXHViYTUxXHViYTUyXHViYTU2XHViYTU3XHViYTU5XHViYTVhXHViYTViXHViYTVkXHViYTVlXHViYTVmXHViYTYwXHViYTYxXHViYTYyXHViYTYzXHViYTY2XHVi''@;'; put 'put ''YTZhXHViYTZiXHViYTZjXHViYTZkXHViYTZlXHViYTZmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViYTcyXHViYTczXHViYTc1XHViYTc2XHViYTc3XHViYTc5XHViYTdhXHViYTdiXHViYTdjXHViYTdkXHViYTdlXHViYTdmXHViYTgwXHViYTgxXHViYTgyXHViYTg2''@;'; put 'put ''XHViYTg4XHViYTg5XHViYThhXHViYThiXHViYThkXHViYThlXHViYThmXHViYTkwXHViYTkxXHViYTkyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViYTkzXHViYTk0XHViYTk1XHViYTk2XHViYTk3XHViYTk4XHViYTk5XHViYTlhXHViYTliXHViYTljXHViYTlkXHVi''@;'; put 'put ''YTllXHViYTlmXHViYWEwXHViYWExXHViYWEyXHViYWEzXHViYWE0XHViYWE1XHViYWE2XHViYWE3XHViYWFhXHViYWFkXHViYWFlXHViYWFmXHViYWIxXHViYWIzXHViYWI0XHViYWI1XHViYWI2XHViYWI3XHViYWJhXHViYWJjXHViYWJlXHViYWJmXHViYWMwXHViYWMxXHViYWMyXHViYWMz''@;'; put 'put ''XHViYWM1XHViYWM2XHViYWM3XHViYWM5XHViYWNhXHViYWNiXHViYWNjXHViYWNkXHViYWNlXHViYWNmXHViYWQwXHViYWQxXHViYWQyXHViYWQzXHViYWQ0XHViYWQ1XHViYWQ2XHViYWQ3XHViYWRhXHViYWRiXHViYWRjXHViYWRkXHViYWRlXHViYWRmXHViYWUwXHViYWUxXHViYWUyXHVi''@;'; put 'put ''YWUzXHViYWU0XHViYWU1XHViYWU2XHViYWU3XHViYWU4XHViYWU5XHViYWVhXHViYWViXHViYWVjXHViYWVkXHViYWVlXHViYWVmXHViYWYwXHViYWYxXHViYWYyXHViYWYzXHViYWY0XHViYWY1XHViYWY2XHViYWY3XHViYWY4XHViYWY5XHViYWZhXHViYWZiXHViYWZkXHViYWZlXHViYWZm''@;'; put 'put ''XHViYjAxXHViYjAyXHViYjAzXHViYjA1XHViYjA2XHViYjA3XHViYjA4XHViYjA5XHViYjBhXHViYjBiXHViYjBjXHViYjBlXHViYjEwXHViYjEyXHViYjEzXHViYjE0XHViYjE1XHViYjE2XHViYjE3XHViYjE5XHViYjFhXHViYjFiXHViYjFkXHViYjFlXHViYjFmXHViYjIxXHViYjIyXHVi''@;'; put 'put ''YjIzXHViYjI0XHViYjI1XHViYjI2XHViYjI3XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTQ1XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNDVdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTQ1XVtnXV09MzcxMjArZyx5WzM3MTIwK2ddPV9bMTQ1XVtnXSk7Zm9yKF9bMTQ2XT0iXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViYjI4XHViYjJhXHViYjJjXHViYjJkXHViYjJlXHViYjJmXHViYjMwXHViYjMxXHViYjMyXHViYjMzXHViYjM3XHViYjM5XHViYjNhXHViYjNmXHViYjQwXHViYjQxXHViYjQyXHViYjQzXHVi''@;'; put 'put ''YjQ2XHViYjQ4XHViYjRhXHViYjRiXHViYjRjXHViYjRlXHViYjUxXHViYjUyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViYjUzXHViYjU1XHViYjU2XHViYjU3XHViYjU5XHViYjVhXHViYjViXHViYjVjXHViYjVkXHViYjVlXHViYjVmXHViYjYwXHViYjYyXHViYjY0''@;'; put 'put ''XHViYjY1XHViYjY2XHViYjY3XHViYjY4XHViYjY5XHViYjZhXHViYjZiXHViYjZkXHViYjZlXHViYjZmXHViYjcwXHViYjcxXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViYjcyXHViYjczXHViYjc0XHViYjc1XHViYjc2XHViYjc3XHViYjc4XHViYjc5XHViYjdhXHVi''@;'; put 'put ''YjdiXHViYjdjXHViYjdkXHViYjdlXHViYjdmXHViYjgwXHViYjgxXHViYjgyXHViYjgzXHViYjg0XHViYjg1XHViYjg2XHViYjg3XHViYjg5XHViYjhhXHViYjhiXHViYjhkXHViYjhlXHViYjhmXHViYjkxXHViYjkyXHViYjkzXHViYjk0XHViYjk1XHViYjk2XHViYjk3XHViYjk4XHViYjk5''@;'; put 'put ''XHViYjlhXHViYjliXHViYjljXHViYjlkXHViYjllXHViYjlmXHViYmEwXHViYmExXHViYmEyXHViYmEzXHViYmE1XHViYmE2XHViYmE3XHViYmE5XHViYmFhXHViYmFiXHViYmFkXHViYmFlXHViYmFmXHViYmIwXHViYmIxXHViYmIyXHViYmIzXHViYmI1XHViYmI2XHViYmI4XHViYmI5XHVi''@;'; put 'put ''YmJhXHViYmJiXHViYmJjXHViYmJkXHViYmJlXHViYmJmXHViYmMxXHViYmMyXHViYmMzXHViYmM1XHViYmM2XHViYmM3XHViYmM5XHViYmNhXHViYmNiXHViYmNjXHViYmNkXHViYmNlXHViYmNmXHViYmQxXHViYmQyXHViYmQ0XHViYmQ1XHViYmQ2XHViYmQ3XHViYmQ4XHViYmQ5XHViYmRh''@;'; put 'put ''XHViYmRiXHViYmRjXHViYmRkXHViYmRlXHViYmRmXHViYmUwXHViYmUxXHViYmUyXHViYmUzXHViYmU0XHViYmU1XHViYmU2XHViYmU3XHViYmU4XHViYmU5XHViYmVhXHViYmViXHViYmVjXHViYmVkXHViYmVlXHViYmVmXHViYmYwXHViYmYxXHViYmYyXHViYmYzXHViYmY0XHViYmY1XHVi''@;'; put 'put ''YmY2XHViYmY3XHViYmZhXHViYmZiXHViYmZkXHViYmZlXHViYzAxXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTQ2XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNDZdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTQ2XVtnXV09MzczNzYrZyx5WzM3Mzc2K2ddPV9bMTQ2XVtnXSk7Zm9yKF9b''@;'; put 'put ''MTQ3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViYzAzXHViYzA0XHViYzA1XHViYzA2XHViYzA3XHViYzBhXHViYzBlXHViYzEwXHViYzEyXHViYzEzXHViYzE5XHViYzFhXHViYzIwXHViYzIxXHViYzIyXHViYzIzXHVi''@;'; put 'put ''YzI2XHViYzI4XHViYzJhXHViYzJiXHViYzJjXHViYzJlXHViYzJmXHViYzMyXHViYzMzXHViYzM1XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViYzM2XHViYzM3XHViYzM5XHViYzNhXHViYzNiXHViYzNjXHViYzNkXHViYzNlXHViYzNmXHViYzQyXHViYzQ2XHViYzQ3''@;'; put 'put ''XHViYzQ4XHViYzRhXHViYzRiXHViYzRlXHViYzRmXHViYzUxXHViYzUyXHViYzUzXHViYzU0XHViYzU1XHViYzU2XHViYzU3XHViYzU4XHViYzU5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViYzVhXHViYzViXHViYzVjXHViYzVlXHViYzVmXHViYzYwXHViYzYxXHVi''@;'; put 'put ''YzYyXHViYzYzXHViYzY0XHViYzY1XHViYzY2XHViYzY3XHViYzY4XHViYzY5XHViYzZhXHViYzZiXHViYzZjXHViYzZkXHViYzZlXHViYzZmXHViYzcwXHViYzcxXHViYzcyXHViYzczXHViYzc0XHViYzc1XHViYzc2XHViYzc3XHViYzc4XHViYzc5XHViYzdhXHViYzdiXHViYzdjXHViYzdk''@;'; put 'put ''XHViYzdlXHViYzdmXHViYzgwXHViYzgxXHViYzgyXHViYzgzXHViYzg2XHViYzg3XHViYzg5XHViYzhhXHViYzhkXHViYzhmXHViYzkwXHViYzkxXHViYzkyXHViYzkzXHViYzk2XHViYzk4XHViYzliXHViYzljXHViYzlkXHViYzllXHViYzlmXHViY2EyXHViY2EzXHViY2E1XHViY2E2XHVi''@;'; put 'put ''Y2E5XHViY2FhXHViY2FiXHViY2FjXHViY2FkXHViY2FlXHViY2FmXHViY2IyXHViY2I2XHViY2I3XHViY2I4XHViY2I5XHViY2JhXHViY2JiXHViY2JlXHViY2JmXHViY2MxXHViY2MyXHViY2MzXHViY2M1XHViY2M2XHViY2M3XHViY2M4XHViY2M5XHViY2NhXHViY2NiXHViY2NjXHViY2Nl''@;'; put 'put ''XHViY2QyXHViY2QzXHViY2Q0XHViY2Q2XHViY2Q3XHViY2Q5XHViY2RhXHViY2RiXHViY2RkXHViY2RlXHViY2RmXHViY2UwXHViY2UxXHViY2UyXHViY2UzXHViY2U0XHViY2U1XHViY2U2XHViY2U3XHViY2U4XHViY2U5XHViY2VhXHViY2ViXHViY2VjXHViY2VkXHViY2VlXHViY2VmXHVi''@;'; put 'put ''Y2YwXHViY2YxXHViY2YyXHViY2YzXHViY2Y3XHViY2Y5XHViY2ZhXHViY2ZiXHViY2ZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTQ3XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNDddW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTQ3XVtnXV09Mzc2MzIrZyx5WzM3NjMyK2ddPV9bMTQ3''@;'; put 'put ''XVtnXSk7Zm9yKF9bMTQ4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViY2ZlXHViY2ZmXHViZDAwXHViZDAxXHViZDAyXHViZDAzXHViZDA2XHViZDA4XHViZDBhXHViZDBiXHViZDBjXHViZDBkXHViZDBlXHViZDBmXHVi''@;'; put 'put ''ZDExXHViZDEyXHViZDEzXHViZDE1XHViZDE2XHViZDE3XHViZDE4XHViZDE5XHViZDFhXHViZDFiXHViZDFjXHViZDFkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViZDFlXHViZDFmXHViZDIwXHViZDIxXHViZDIyXHViZDIzXHViZDI1XHViZDI2XHViZDI3XHViZDI4''@;'; put 'put ''XHViZDI5XHViZDJhXHViZDJiXHViZDJkXHViZDJlXHViZDJmXHViZDMwXHViZDMxXHViZDMyXHViZDMzXHViZDM0XHViZDM1XHViZDM2XHViZDM3XHViZDM4XHViZDM5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViZDNhXHViZDNiXHViZDNjXHViZDNkXHViZDNlXHVi''@;'; put 'put ''ZDNmXHViZDQxXHViZDQyXHViZDQzXHViZDQ0XHViZDQ1XHViZDQ2XHViZDQ3XHViZDRhXHViZDRiXHViZDRkXHViZDRlXHViZDRmXHViZDUxXHViZDUyXHViZDUzXHViZDU0XHViZDU1XHViZDU2XHViZDU3XHViZDVhXHViZDViXHViZDVjXHViZDVkXHViZDVlXHViZDVmXHViZDYwXHViZDYx''@;'; put 'put ''XHViZDYyXHViZDYzXHViZDY1XHViZDY2XHViZDY3XHViZDY5XHViZDZhXHViZDZiXHViZDZjXHViZDZkXHViZDZlXHViZDZmXHViZDcwXHViZDcxXHViZDcyXHViZDczXHViZDc0XHViZDc1XHViZDc2XHViZDc3XHViZDc4XHViZDc5XHViZDdhXHViZDdiXHViZDdjXHViZDdkXHViZDdlXHVi''@;'; put 'put ''ZDdmXHViZDgyXHViZDgzXHViZDg1XHViZDg2XHViZDhiXHViZDhjXHViZDhkXHViZDhlXHViZDhmXHViZDkyXHViZDk0XHViZDk2XHViZDk3XHViZDk4XHViZDliXHViZDlkXHViZDllXHViZDlmXHViZGEwXHViZGExXHViZGEyXHViZGEzXHViZGE1XHViZGE2XHViZGE3XHViZGE4XHViZGE5''@;'; put 'put ''XHViZGFhXHViZGFiXHViZGFjXHViZGFkXHViZGFlXHViZGFmXHViZGIxXHViZGIyXHViZGIzXHViZGI0XHViZGI1XHViZGI2XHViZGI3XHViZGI5XHViZGJhXHViZGJiXHViZGJjXHViZGJkXHViZGJlXHViZGJmXHViZGMwXHViZGMxXHViZGMyXHViZGMzXHViZGM0XHViZGM1XHViZGM2XHVi''@;'; put 'put ''ZGM3XHViZGM4XHViZGM5XHViZGNhXHViZGNiXHViZGNjXHViZGNkXHViZGNlXHViZGNmXHViZGQwXHViZGQxXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTQ4XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNDhdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTQ4XVtnXV09Mzc4ODgrZyx5WzM3''@;'; put 'put ''ODg4K2ddPV9bMTQ4XVtnXSk7Zm9yKF9bMTQ5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViZGQyXHViZGQzXHViZGQ2XHViZGQ3XHViZGQ5XHViZGRhXHViZGRiXHViZGRkXHViZGRlXHViZGRmXHViZGUwXHViZGUxXHVi''@;'; put 'put ''ZGUyXHViZGUzXHViZGU0XHViZGU1XHViZGU2XHViZGU3XHViZGU4XHViZGVhXHViZGViXHViZGVjXHViZGVkXHViZGVlXHViZGVmXHViZGYxXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViZGYyXHViZGYzXHViZGY1XHViZGY2XHViZGY3XHViZGY5XHViZGZhXHViZGZi''@;'; put 'put ''XHViZGZjXHViZGZkXHViZGZlXHViZGZmXHViZTAxXHViZTAyXHViZTA0XHViZTA2XHViZTA3XHViZTA4XHViZTA5XHViZTBhXHViZTBiXHViZTBlXHViZTBmXHViZTExXHViZTEyXHViZTEzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViZTE1XHViZTE2XHViZTE3XHVi''@;'; put 'put ''ZTE4XHViZTE5XHViZTFhXHViZTFiXHViZTFlXHViZTIwXHViZTIxXHViZTIyXHViZTIzXHViZTI0XHViZTI1XHViZTI2XHViZTI3XHViZTI4XHViZTI5XHViZTJhXHViZTJiXHViZTJjXHViZTJkXHViZTJlXHViZTJmXHViZTMwXHViZTMxXHViZTMyXHViZTMzXHViZTM0XHViZTM1XHViZTM2''@;'; put 'put ''XHViZTM3XHViZTM4XHViZTM5XHViZTNhXHViZTNiXHViZTNjXHViZTNkXHViZTNlXHViZTNmXHViZTQwXHViZTQxXHViZTQyXHViZTQzXHViZTQ2XHViZTQ3XHViZTQ5XHViZTRhXHViZTRiXHViZTRkXHViZTRmXHViZTUwXHViZTUxXHViZTUyXHViZTUzXHViZTU2XHViZTU4XHViZTVjXHVi''@;'; put 'put ''ZTVkXHViZTVlXHViZTVmXHViZTYyXHViZTYzXHViZTY1XHViZTY2XHViZTY3XHViZTY5XHViZTZiXHViZTZjXHViZTZkXHViZTZlXHViZTZmXHViZTcyXHViZTc2XHViZTc3XHViZTc4XHViZTc5XHViZTdhXHViZTdlXHViZTdmXHViZTgxXHViZTgyXHViZTgzXHViZTg1XHViZTg2XHViZTg3''@;'; put 'put ''XHViZTg4XHViZTg5XHViZThhXHViZThiXHViZThlXHViZTkyXHViZTkzXHViZTk0XHViZTk1XHViZTk2XHViZTk3XHViZTlhXHViZTliXHViZTljXHViZTlkXHViZTllXHViZTlmXHViZWEwXHViZWExXHViZWEyXHViZWEzXHViZWE0XHViZWE1XHViZWE2XHViZWE3XHViZWE5XHViZWFhXHVi''@;'; put 'put ''ZWFiXHViZWFjXHViZWFkXHViZWFlXHViZWFmXHViZWIwXHViZWIxXHViZWIyXHViZWIzXHViZWI0XHViZWI1XHViZWI2XHViZWI3XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTQ5XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNDldW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTQ5XVtnXV09''@;'; put 'put ''MzgxNDQrZyx5WzM4MTQ0K2ddPV9bMTQ5XVtnXSk7Zm9yKF9bMTUwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViZWI4XHViZWI5XHViZWJhXHViZWJiXHViZWJjXHViZWJkXHViZWJlXHViZWJmXHViZWMwXHViZWMxXHVi''@;'; put 'put ''ZWMyXHViZWMzXHViZWM0XHViZWM1XHViZWM2XHViZWM3XHViZWM4XHViZWM5XHViZWNhXHViZWNiXHViZWNjXHViZWNkXHViZWNlXHViZWNmXHViZWQyXHViZWQzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViZWQ1XHViZWQ2XHViZWQ5XHViZWRhXHViZWRiXHViZWRj''@;'; put 'put ''XHViZWRkXHViZWRlXHViZWRmXHViZWUxXHViZWUyXHViZWU2XHViZWU3XHViZWU4XHViZWU5XHViZWVhXHViZWViXHViZWVkXHViZWVlXHViZWVmXHViZWYwXHViZWYxXHViZWYyXHViZWYzXHViZWY0XHViZWY1XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViZWY2XHVi''@;'; put 'put ''ZWY3XHViZWY4XHViZWY5XHViZWZhXHViZWZiXHViZWZjXHViZWZkXHViZWZlXHViZWZmXHViZjAwXHViZjAyXHViZjAzXHViZjA0XHViZjA1XHViZjA2XHViZjA3XHViZjBhXHViZjBiXHViZjBjXHViZjBkXHViZjBlXHViZjBmXHViZjEwXHViZjExXHViZjEyXHViZjEzXHViZjE0XHViZjE1''@;'; put 'put ''XHViZjE2XHViZjE3XHViZjFhXHViZjFlXHViZjFmXHViZjIwXHViZjIxXHViZjIyXHViZjIzXHViZjI0XHViZjI1XHViZjI2XHViZjI3XHViZjI4XHViZjI5XHViZjJhXHViZjJiXHViZjJjXHViZjJkXHViZjJlXHViZjJmXHViZjMwXHViZjMxXHViZjMyXHViZjMzXHViZjM0XHViZjM1XHVi''@;'; put 'put ''ZjM2XHViZjM3XHViZjM4XHViZjM5XHViZjNhXHViZjNiXHViZjNjXHViZjNkXHViZjNlXHViZjNmXHViZjQyXHViZjQzXHViZjQ1XHViZjQ2XHViZjQ3XHViZjQ5XHViZjRhXHViZjRiXHViZjRjXHViZjRkXHViZjRlXHViZjRmXHViZjUyXHViZjUzXHViZjU0XHViZjU2XHViZjU3XHViZjU4''@;'; put 'put ''XHViZjU5XHViZjVhXHViZjViXHViZjVjXHViZjVkXHViZjVlXHViZjVmXHViZjYwXHViZjYxXHViZjYyXHViZjYzXHViZjY0XHViZjY1XHViZjY2XHViZjY3XHViZjY4XHViZjY5XHViZjZhXHViZjZiXHViZjZjXHViZjZkXHViZjZlXHViZjZmXHViZjcwXHViZjcxXHViZjcyXHViZjczXHVi''@;'; put 'put ''Zjc0XHViZjc1XHViZjc2XHViZjc3XHViZjc4XHViZjc5XHViZjdhXHViZjdiXHViZjdjXHViZjdkXHViZjdlXHViZjdmXHViZjgwXHViZjgxXHViZjgyXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTUwXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNTBdW2ddLmNoYXJDb2RlQXQoMCkmJihJ''@;'; put 'put ''W19bMTUwXVtnXV09Mzg0MDArZyx5WzM4NDAwK2ddPV9bMTUwXVtnXSk7Zm9yKF9bMTUxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViZjgzXHViZjg0XHViZjg1XHViZjg2XHViZjg3XHViZjg4XHViZjg5XHViZjhhXHVi''@;'; put 'put ''ZjhiXHViZjhjXHViZjhkXHViZjhlXHViZjhmXHViZjkwXHViZjkxXHViZjkyXHViZjkzXHViZjk1XHViZjk2XHViZjk3XHViZjk4XHViZjk5XHViZjlhXHViZjliXHViZjljXHViZjlkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViZjllXHViZjlmXHViZmEwXHViZmEx''@;'; put 'put ''XHViZmEyXHViZmEzXHViZmE0XHViZmE1XHViZmE2XHViZmE3XHViZmE4XHViZmE5XHViZmFhXHViZmFiXHViZmFjXHViZmFkXHViZmFlXHViZmFmXHViZmIxXHViZmIyXHViZmIzXHViZmI0XHViZmI1XHViZmI2XHViZmI3XHViZmI4XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHViZmI5XHViZmJhXHViZmJiXHViZmJjXHViZmJkXHViZmJlXHViZmJmXHViZmMwXHViZmMxXHViZmMyXHViZmMzXHViZmM0XHViZmM2XHViZmM3XHViZmM4XHViZmM5XHViZmNhXHViZmNiXHViZmNlXHViZmNmXHViZmQxXHViZmQyXHViZmQzXHViZmQ1XHViZmQ2XHViZmQ3XHViZmQ4''@;'; put 'put ''XHViZmQ5XHViZmRhXHViZmRiXHViZmRkXHViZmRlXHViZmUwXHViZmUyXHViZmUzXHViZmU0XHViZmU1XHViZmU2XHViZmU3XHViZmU4XHViZmU5XHViZmVhXHViZmViXHViZmVjXHViZmVkXHViZmVlXHViZmVmXHViZmYwXHViZmYxXHViZmYyXHViZmYzXHViZmY0XHViZmY1XHViZmY2XHVi''@;'; put 'put ''ZmY3XHViZmY4XHViZmY5XHViZmZhXHViZmZiXHViZmZjXHViZmZkXHViZmZlXHViZmZmXHVjMDAwXHVjMDAxXHVjMDAyXHVjMDAzXHVjMDA0XHVjMDA1XHVjMDA2XHVjMDA3XHVjMDA4XHVjMDA5XHVjMDBhXHVjMDBiXHVjMDBjXHVjMDBkXHVjMDBlXHVjMDBmXHVjMDEwXHVjMDExXHVjMDEy''@;'; put 'put ''XHVjMDEzXHVjMDE0XHVjMDE1XHVjMDE2XHVjMDE3XHVjMDE4XHVjMDE5XHVjMDFhXHVjMDFiXHVjMDFjXHVjMDFkXHVjMDFlXHVjMDFmXHVjMDIwXHVjMDIxXHVjMDIyXHVjMDIzXHVjMDI0XHVjMDI1XHVjMDI2XHVjMDI3XHVjMDI4XHVjMDI5XHVjMDJhXHVjMDJiXHVjMDJjXHVjMDJkXHVj''@;'; put 'put ''MDJlXHVjMDJmXHVjMDMwXHVjMDMxXHVjMDMyXHVjMDMzXHVjMDM0XHVjMDM1XHVjMDM2XHVjMDM3XHVjMDM4XHVjMDM5XHVjMDNhXHVjMDNiXHVjMDNkXHVjMDNlXHVjMDNmXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTUxXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNTFdW2ddLmNoYXJD''@;'; put 'put ''b2RlQXQoMCkmJihJW19bMTUxXVtnXV09Mzg2NTYrZyx5WzM4NjU2K2ddPV9bMTUxXVtnXSk7Zm9yKF9bMTUyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjMDQwXHVjMDQxXHVjMDQyXHVjMDQzXHVjMDQ0XHVjMDQ1XHVj''@;'; put 'put ''MDQ2XHVjMDQ3XHVjMDQ4XHVjMDQ5XHVjMDRhXHVjMDRiXHVjMDRjXHVjMDRkXHVjMDRlXHVjMDRmXHVjMDUwXHVjMDUyXHVjMDUzXHVjMDU0XHVjMDU1XHVjMDU2XHVjMDU3XHVjMDU5XHVjMDVhXHVjMDViXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjMDVkXHVjMDVl''@;'; put 'put ''XHVjMDVmXHVjMDYxXHVjMDYyXHVjMDYzXHVjMDY0XHVjMDY1XHVjMDY2XHVjMDY3XHVjMDZhXHVjMDZiXHVjMDZjXHVjMDZkXHVjMDZlXHVjMDZmXHVjMDcwXHVjMDcxXHVjMDcyXHVjMDczXHVjMDc0XHVjMDc1XHVjMDc2XHVjMDc3XHVjMDc4XHVjMDc5XHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVjMDdhXHVjMDdiXHVjMDdjXHVjMDdkXHVjMDdlXHVjMDdmXHVjMDgwXHVjMDgxXHVjMDgyXHVjMDgzXHVjMDg0XHVjMDg1XHVjMDg2XHVjMDg3XHVjMDg4XHVjMDg5XHVjMDhhXHVjMDhiXHVjMDhjXHVjMDhkXHVjMDhlXHVjMDhmXHVjMDkyXHVjMDkzXHVjMDk1''@;'; put 'put ''XHVjMDk2XHVjMDk3XHVjMDk5XHVjMDlhXHVjMDliXHVjMDljXHVjMDlkXHVjMDllXHVjMDlmXHVjMGEyXHVjMGE0XHVjMGE2XHVjMGE3XHVjMGE4XHVjMGE5XHVjMGFhXHVjMGFiXHVjMGFlXHVjMGIxXHVjMGIyXHVjMGI3XHVjMGI4XHVjMGI5XHVjMGJhXHVjMGJiXHVjMGJlXHVjMGMyXHVj''@;'; put 'put ''MGMzXHVjMGM0XHVjMGM2XHVjMGM3XHVjMGNhXHVjMGNiXHVjMGNkXHVjMGNlXHVjMGNmXHVjMGQxXHVjMGQyXHVjMGQzXHVjMGQ0XHVjMGQ1XHVjMGQ2XHVjMGQ3XHVjMGRhXHVjMGRlXHVjMGRmXHVjMGUwXHVjMGUxXHVjMGUyXHVjMGUzXHVjMGU2XHVjMGU3XHVjMGU5XHVjMGVhXHVjMGVi''@;'; put 'put ''XHVjMGVkXHVjMGVlXHVjMGVmXHVjMGYwXHVjMGYxXHVjMGYyXHVjMGYzXHVjMGY2XHVjMGY4XHVjMGZhXHVjMGZiXHVjMGZjXHVjMGZkXHVjMGZlXHVjMGZmXHVjMTAxXHVjMTAyXHVjMTAzXHVjMTA1XHVjMTA2XHVjMTA3XHVjMTA5XHVjMTBhXHVjMTBiXHVjMTBjXHVjMTBkXHVjMTBlXHVj''@;'; put 'put ''MTBmXHVjMTExXHVjMTEyXHVjMTEzXHVjMTE0XHVjMTE2XHVjMTE3XHVjMTE4XHVjMTE5XHVjMTFhXHVjMTFiXHVjMTIxXHVjMTIyXHVjMTI1XHVjMTI4XHVjMTI5XHVjMTJhXHVjMTJiXHVjMTJlXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTUyXS5sZW5ndGg7KytnKTY1NTMzIT09X1sx''@;'; put 'put ''NTJdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTUyXVtnXV09Mzg5MTIrZyx5WzM4OTEyK2ddPV9bMTUyXVtnXSk7Zm9yKF9bMTUzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjMTMyXHVjMTMzXHVjMTM0XHVjMTM1XHVj''@;'; put 'put ''MTM3XHVjMTNhXHVjMTNiXHVjMTNkXHVjMTNlXHVjMTNmXHVjMTQxXHVjMTQyXHVjMTQzXHVjMTQ0XHVjMTQ1XHVjMTQ2XHVjMTQ3XHVjMTRhXHVjMTRlXHVjMTRmXHVjMTUwXHVjMTUxXHVjMTUyXHVjMTUzXHVjMTU2XHVjMTU3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVjMTU5XHVjMTVhXHVjMTViXHVjMTVkXHVjMTVlXHVjMTVmXHVjMTYwXHVjMTYxXHVjMTYyXHVjMTYzXHVjMTY2XHVjMTZhXHVjMTZiXHVjMTZjXHVjMTZkXHVjMTZlXHVjMTZmXHVjMTcxXHVjMTcyXHVjMTczXHVjMTc1XHVjMTc2XHVjMTc3XHVjMTc5XHVjMTdhXHVjMTdiXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjMTdjXHVjMTdkXHVjMTdlXHVjMTdmXHVjMTgwXHVjMTgxXHVjMTgyXHVjMTgzXHVjMTg0XHVjMTg2XHVjMTg3XHVjMTg4XHVjMTg5XHVjMThhXHVjMThiXHVjMThmXHVjMTkxXHVjMTkyXHVjMTkzXHVjMTk1XHVjMTk3XHVjMTk4XHVjMTk5''@;'; put 'put ''XHVjMTlhXHVjMTliXHVjMTllXHVjMWEwXHVjMWEyXHVjMWEzXHVjMWE0XHVjMWE2XHVjMWE3XHVjMWFhXHVjMWFiXHVjMWFkXHVjMWFlXHVjMWFmXHVjMWIxXHVjMWIyXHVjMWIzXHVjMWI0XHVjMWI1XHVjMWI2XHVjMWI3XHVjMWI4XHVjMWI5XHVjMWJhXHVjMWJiXHVjMWJjXHVjMWJlXHVj''@;'; put 'put ''MWJmXHVjMWMwXHVjMWMxXHVjMWMyXHVjMWMzXHVjMWM1XHVjMWM2XHVjMWM3XHVjMWM5XHVjMWNhXHVjMWNiXHVjMWNkXHVjMWNlXHVjMWNmXHVjMWQwXHVjMWQxXHVjMWQyXHVjMWQzXHVjMWQ1XHVjMWQ2XHVjMWQ5XHVjMWRhXHVjMWRiXHVjMWRjXHVjMWRkXHVjMWRlXHVjMWRmXHVjMWUx''@;'; put 'put ''XHVjMWUyXHVjMWUzXHVjMWU1XHVjMWU2XHVjMWU3XHVjMWU5XHVjMWVhXHVjMWViXHVjMWVjXHVjMWVkXHVjMWVlXHVjMWVmXHVjMWYyXHVjMWY0XHVjMWY1XHVjMWY2XHVjMWY3XHVjMWY4XHVjMWY5XHVjMWZhXHVjMWZiXHVjMWZlXHVjMWZmXHVjMjAxXHVjMjAyXHVjMjAzXHVjMjA1XHVj''@;'; put 'put ''MjA2XHVjMjA3XHVjMjA4XHVjMjA5XHVjMjBhXHVjMjBiXHVjMjBlXHVjMjEwXHVjMjEyXHVjMjEzXHVjMjE0XHVjMjE1XHVjMjE2XHVjMjE3XHVjMjFhXHVjMjFiXHVjMjFkXHVjMjFlXHVjMjIxXHVjMjIyXHVjMjIzXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTUzXS5sZW5ndGg7Kytn''@;'; put 'put ''KTY1NTMzIT09X1sxNTNdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTUzXVtnXV09MzkxNjgrZyx5WzM5MTY4K2ddPV9bMTUzXVtnXSk7Zm9yKF9bMTU0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjMjI0XHVjMjI1XHVj''@;'; put 'put ''MjI2XHVjMjI3XHVjMjJhXHVjMjJjXHVjMjJlXHVjMjMwXHVjMjMzXHVjMjM1XHVjMjM2XHVjMjM3XHVjMjM4XHVjMjM5XHVjMjNhXHVjMjNiXHVjMjNjXHVjMjNkXHVjMjNlXHVjMjNmXHVjMjQwXHVjMjQxXHVjMjQyXHVjMjQzXHVjMjQ0XHVjMjQ1XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVjMjQ2XHVjMjQ3XHVjMjQ5XHVjMjRhXHVjMjRiXHVjMjRjXHVjMjRkXHVjMjRlXHVjMjRmXHVjMjUyXHVjMjUzXHVjMjU1XHVjMjU2XHVjMjU3XHVjMjU5XHVjMjVhXHVjMjViXHVjMjVjXHVjMjVkXHVjMjVlXHVjMjVmXHVjMjYxXHVjMjYyXHVjMjYzXHVjMjY0XHVj''@;'; put 'put ''MjY2XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjMjY3XHVjMjY4XHVjMjY5XHVjMjZhXHVjMjZiXHVjMjZlXHVjMjZmXHVjMjcxXHVjMjcyXHVjMjczXHVjMjc1XHVjMjc2XHVjMjc3XHVjMjc4XHVjMjc5XHVjMjdhXHVjMjdiXHVjMjdlXHVjMjgwXHVjMjgyXHVjMjgz''@;'; put 'put ''XHVjMjg0XHVjMjg1XHVjMjg2XHVjMjg3XHVjMjhhXHVjMjhiXHVjMjhjXHVjMjhkXHVjMjhlXHVjMjhmXHVjMjkxXHVjMjkyXHVjMjkzXHVjMjk0XHVjMjk1XHVjMjk2XHVjMjk3XHVjMjk5XHVjMjlhXHVjMjljXHVjMjllXHVjMjlmXHVjMmEwXHVjMmExXHVjMmEyXHVjMmEzXHVjMmE2XHVj''@;'; put 'put ''MmE3XHVjMmE5XHVjMmFhXHVjMmFiXHVjMmFlXHVjMmFmXHVjMmIwXHVjMmIxXHVjMmIyXHVjMmIzXHVjMmI2XHVjMmI4XHVjMmJhXHVjMmJiXHVjMmJjXHVjMmJkXHVjMmJlXHVjMmJmXHVjMmMwXHVjMmMxXHVjMmMyXHVjMmMzXHVjMmM0XHVjMmM1XHVjMmM2XHVjMmM3XHVjMmM4XHVjMmM5''@;'; put 'put ''XHVjMmNhXHVjMmNiXHVjMmNjXHVjMmNkXHVjMmNlXHVjMmNmXHVjMmQwXHVjMmQxXHVjMmQyXHVjMmQzXHVjMmQ0XHVjMmQ1XHVjMmQ2XHVjMmQ3XHVjMmQ4XHVjMmQ5XHVjMmRhXHVjMmRiXHVjMmRlXHVjMmRmXHVjMmUxXHVjMmUyXHVjMmU1XHVjMmU2XHVjMmU3XHVjMmU4XHVjMmU5XHVj''@;'; put 'put ''MmVhXHVjMmVlXHVjMmYwXHVjMmYyXHVjMmYzXHVjMmY0XHVjMmY1XHVjMmY3XHVjMmZhXHVjMmZkXHVjMmZlXHVjMmZmXHVjMzAxXHVjMzAyXHVjMzAzXHVjMzA0XHVjMzA1XHVjMzA2XHVjMzA3XHVjMzBhXHVjMzBiXHVjMzBlXHVjMzBmXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTU0''@;'; put 'put ''XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNTRdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTU0XVtnXV09Mzk0MjQrZyx5WzM5NDI0K2ddPV9bMTU0XVtnXSk7Zm9yKF9bMTU1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVj''@;'; put 'put ''MzEwXHVjMzExXHVjMzEyXHVjMzE2XHVjMzE3XHVjMzE5XHVjMzFhXHVjMzFiXHVjMzFkXHVjMzFlXHVjMzFmXHVjMzIwXHVjMzIxXHVjMzIyXHVjMzIzXHVjMzI2XHVjMzI3XHVjMzJhXHVjMzJiXHVjMzJjXHVjMzJkXHVjMzJlXHVjMzJmXHVjMzMwXHVjMzMxXHVjMzMyXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjMzMzXHVjMzM0XHVjMzM1XHVjMzM2XHVjMzM3XHVjMzM4XHVjMzM5XHVjMzNhXHVjMzNiXHVjMzNjXHVjMzNkXHVjMzNlXHVjMzNmXHVjMzQwXHVjMzQxXHVjMzQyXHVjMzQzXHVjMzQ0XHVjMzQ2XHVjMzQ3XHVjMzQ4XHVjMzQ5XHVjMzRhXHVj''@;'; put 'put ''MzRiXHVjMzRjXHVjMzRkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjMzRlXHVjMzRmXHVjMzUwXHVjMzUxXHVjMzUyXHVjMzUzXHVjMzU0XHVjMzU1XHVjMzU2XHVjMzU3XHVjMzU4XHVjMzU5XHVjMzVhXHVjMzViXHVjMzVjXHVjMzVkXHVjMzVlXHVjMzVmXHVjMzYw''@;'; put 'put ''XHVjMzYxXHVjMzYyXHVjMzYzXHVjMzY0XHVjMzY1XHVjMzY2XHVjMzY3XHVjMzZhXHVjMzZiXHVjMzZkXHVjMzZlXHVjMzZmXHVjMzcxXHVjMzczXHVjMzc0XHVjMzc1XHVjMzc2XHVjMzc3XHVjMzdhXHVjMzdiXHVjMzdlXHVjMzdmXHVjMzgwXHVjMzgxXHVjMzgyXHVjMzgzXHVjMzg1XHVj''@;'; put 'put ''Mzg2XHVjMzg3XHVjMzg5XHVjMzhhXHVjMzhiXHVjMzhkXHVjMzhlXHVjMzhmXHVjMzkwXHVjMzkxXHVjMzkyXHVjMzkzXHVjMzk0XHVjMzk1XHVjMzk2XHVjMzk3XHVjMzk4XHVjMzk5XHVjMzlhXHVjMzliXHVjMzljXHVjMzlkXHVjMzllXHVjMzlmXHVjM2EwXHVjM2ExXHVjM2EyXHVjM2Ez''@;'; put 'put ''XHVjM2E0XHVjM2E1XHVjM2E2XHVjM2E3XHVjM2E4XHVjM2E5XHVjM2FhXHVjM2FiXHVjM2FjXHVjM2FkXHVjM2FlXHVjM2FmXHVjM2IwXHVjM2IxXHVjM2IyXHVjM2IzXHVjM2I0XHVjM2I1XHVjM2I2XHVjM2I3XHVjM2I4XHVjM2I5XHVjM2JhXHVjM2JiXHVjM2JjXHVjM2JkXHVjM2JlXHVj''@;'; put 'put ''M2JmXHVjM2MxXHVjM2MyXHVjM2MzXHVjM2M0XHVjM2M1XHVjM2M2XHVjM2M3XHVjM2M4XHVjM2M5XHVjM2NhXHVjM2NiXHVjM2NjXHVjM2NkXHVjM2NlXHVjM2NmXHVjM2QwXHVjM2QxXHVjM2QyXHVjM2QzXHVjM2Q0XHVjM2Q1XHVjM2Q2XHVjM2Q3XHVjM2RhXHVmZmZkIi5zcGxpdCgiIiks''@;'; put 'put ''Zz0wO2chPV9bMTU1XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNTVdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTU1XVtnXV09Mzk2ODArZyx5WzM5NjgwK2ddPV9bMTU1XVtnXSk7Zm9yKF9bMTU2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVjM2RiXHVjM2RkXHVjM2RlXHVjM2UxXHVjM2UzXHVjM2U0XHVjM2U1XHVjM2U2XHVjM2U3XHVjM2VhXHVjM2ViXHVjM2VjXHVjM2VlXHVjM2VmXHVjM2YwXHVjM2YxXHVjM2YyXHVjM2YzXHVjM2Y2XHVjM2Y3XHVjM2Y5XHVjM2ZhXHVjM2ZiXHVjM2ZjXHVjM2ZkXHVjM2Zl''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjM2ZmXHVjNDAwXHVjNDAxXHVjNDAyXHVjNDAzXHVjNDA0XHVjNDA1XHVjNDA2XHVjNDA3XHVjNDA5XHVjNDBhXHVjNDBiXHVjNDBjXHVjNDBkXHVjNDBlXHVjNDBmXHVjNDExXHVjNDEyXHVjNDEzXHVjNDE0XHVjNDE1XHVj''@;'; put 'put ''NDE2XHVjNDE3XHVjNDE4XHVjNDE5XHVjNDFhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjNDFiXHVjNDFjXHVjNDFkXHVjNDFlXHVjNDFmXHVjNDIwXHVjNDIxXHVjNDIyXHVjNDIzXHVjNDI1XHVjNDI2XHVjNDI3XHVjNDI4XHVjNDI5XHVjNDJhXHVjNDJiXHVjNDJk''@;'; put 'put ''XHVjNDJlXHVjNDJmXHVjNDMxXHVjNDMyXHVjNDMzXHVjNDM1XHVjNDM2XHVjNDM3XHVjNDM4XHVjNDM5XHVjNDNhXHVjNDNiXHVjNDNlXHVjNDNmXHVjNDQwXHVjNDQxXHVjNDQyXHVjNDQzXHVjNDQ0XHVjNDQ1XHVjNDQ2XHVjNDQ3XHVjNDQ5XHVjNDRhXHVjNDRiXHVjNDRjXHVjNDRkXHVj''@;'; put 'put ''NDRlXHVjNDRmXHVjNDUwXHVjNDUxXHVjNDUyXHVjNDUzXHVjNDU0XHVjNDU1XHVjNDU2XHVjNDU3XHVjNDU4XHVjNDU5XHVjNDVhXHVjNDViXHVjNDVjXHVjNDVkXHVjNDVlXHVjNDVmXHVjNDYwXHVjNDYxXHVjNDYyXHVjNDYzXHVjNDY2XHVjNDY3XHVjNDY5XHVjNDZhXHVjNDZiXHVjNDZk''@;'; put 'put ''XHVjNDZlXHVjNDZmXHVjNDcwXHVjNDcxXHVjNDcyXHVjNDczXHVjNDc2XHVjNDc3XHVjNDc4XHVjNDdhXHVjNDdiXHVjNDdjXHVjNDdkXHVjNDdlXHVjNDdmXHVjNDgxXHVjNDgyXHVjNDgzXHVjNDg0XHVjNDg1XHVjNDg2XHVjNDg3XHVjNDg4XHVjNDg5XHVjNDhhXHVjNDhiXHVjNDhjXHVj''@;'; put 'put ''NDhkXHVjNDhlXHVjNDhmXHVjNDkwXHVjNDkxXHVjNDkyXHVjNDkzXHVjNDk1XHVjNDk2XHVjNDk3XHVjNDk4XHVjNDk5XHVjNDlhXHVjNDliXHVjNDlkXHVjNDllXHVjNDlmXHVjNGEwXHVjNGExXHVjNGEyXHVjNGEzXHVjNGE0XHVjNGE1XHVjNGE2XHVjNGE3XHVjNGE4XHVjNGE5XHVmZmZk''@;'; put 'put ''Ii5zcGxpdCgiIiksZz0wO2chPV9bMTU2XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNTZdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTU2XVtnXV09Mzk5MzYrZyx5WzM5OTM2K2ddPV9bMTU2XVtnXSk7Zm9yKF9bMTU3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjNGFhXHVjNGFiXHVjNGFjXHVjNGFkXHVjNGFlXHVjNGFmXHVjNGIwXHVjNGIxXHVjNGIyXHVjNGIzXHVjNGI0XHVjNGI1XHVjNGI2XHVjNGI3XHVjNGI5XHVjNGJhXHVjNGJiXHVjNGJkXHVjNGJlXHVjNGJmXHVjNGMwXHVjNGMxXHVjNGMyXHVjNGMz''@;'; put 'put ''XHVjNGM0XHVjNGM1XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjNGM2XHVjNGM3XHVjNGM4XHVjNGM5XHVjNGNhXHVjNGNiXHVjNGNjXHVjNGNkXHVjNGNlXHVjNGNmXHVjNGQwXHVjNGQxXHVjNGQyXHVjNGQzXHVjNGQ0XHVjNGQ1XHVjNGQ2XHVjNGQ3XHVjNGQ4XHVj''@;'; put 'put ''NGQ5XHVjNGRhXHVjNGRiXHVjNGRjXHVjNGRkXHVjNGRlXHVjNGRmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjNGUwXHVjNGUxXHVjNGUyXHVjNGUzXHVjNGU0XHVjNGU1XHVjNGU2XHVjNGU3XHVjNGU4XHVjNGVhXHVjNGViXHVjNGVjXHVjNGVkXHVjNGVlXHVjNGVm''@;'; put 'put ''XHVjNGYyXHVjNGYzXHVjNGY1XHVjNGY2XHVjNGY3XHVjNGY5XHVjNGZiXHVjNGZjXHVjNGZkXHVjNGZlXHVjNTAyXHVjNTAzXHVjNTA0XHVjNTA1XHVjNTA2XHVjNTA3XHVjNTA4XHVjNTA5XHVjNTBhXHVjNTBiXHVjNTBkXHVjNTBlXHVjNTBmXHVjNTExXHVjNTEyXHVjNTEzXHVjNTE1XHVj''@;'; put 'put ''NTE2XHVjNTE3XHVjNTE4XHVjNTE5XHVjNTFhXHVjNTFiXHVjNTFkXHVjNTFlXHVjNTFmXHVjNTIwXHVjNTIxXHVjNTIyXHVjNTIzXHVjNTI0XHVjNTI1XHVjNTI2XHVjNTI3XHVjNTJhXHVjNTJiXHVjNTJkXHVjNTJlXHVjNTJmXHVjNTMxXHVjNTMyXHVjNTMzXHVjNTM0XHVjNTM1XHVjNTM2''@;'; put 'put ''XHVjNTM3XHVjNTNhXHVjNTNjXHVjNTNlXHVjNTNmXHVjNTQwXHVjNTQxXHVjNTQyXHVjNTQzXHVjNTQ2XHVjNTQ3XHVjNTRiXHVjNTRmXHVjNTUwXHVjNTUxXHVjNTUyXHVjNTU2XHVjNTVhXHVjNTViXHVjNTVjXHVjNTVmXHVjNTYyXHVjNTYzXHVjNTY1XHVjNTY2XHVjNTY3XHVjNTY5XHVj''@;'; put 'put ''NTZhXHVjNTZiXHVjNTZjXHVjNTZkXHVjNTZlXHVjNTZmXHVjNTcyXHVjNTc2XHVjNTc3XHVjNTc4XHVjNTc5XHVjNTdhXHVjNTdiXHVjNTdlXHVjNTdmXHVjNTgxXHVjNTgyXHVjNTgzXHVjNTg1XHVjNTg2XHVjNTg4XHVjNTg5XHVjNThhXHVjNThiXHVjNThlXHVjNTkwXHVjNTkyXHVjNTkz''@;'; put 'put ''XHVjNTk0XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTU3XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNTddW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTU3XVtnXV09NDAxOTIrZyx5WzQwMTkyK2ddPV9bMTU3XVtnXSk7Zm9yKF9bMTU4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjNTk2XHVjNTk5XHVjNTlhXHVjNTliXHVjNTlkXHVjNTllXHVjNTlmXHVjNWExXHVjNWEyXHVjNWEzXHVjNWE0XHVjNWE1XHVjNWE2XHVjNWE3XHVjNWE4XHVjNWFhXHVjNWFiXHVjNWFjXHVjNWFkXHVjNWFlXHVjNWFmXHVjNWIw''@;'; put 'put ''XHVjNWIxXHVjNWIyXHVjNWIzXHVjNWI2XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjNWI3XHVjNWJhXHVjNWJmXHVjNWMwXHVjNWMxXHVjNWMyXHVjNWMzXHVjNWNiXHVjNWNkXHVjNWNmXHVjNWQyXHVjNWQzXHVjNWQ1XHVjNWQ2XHVjNWQ3XHVjNWQ5XHVjNWRhXHVj''@;'; put 'put ''NWRiXHVjNWRjXHVjNWRkXHVjNWRlXHVjNWRmXHVjNWUyXHVjNWU0XHVjNWU2XHVjNWU3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjNWU4XHVjNWU5XHVjNWVhXHVjNWViXHVjNWVmXHVjNWYxXHVjNWYyXHVjNWYzXHVjNWY1XHVjNWY4XHVjNWY5XHVjNWZhXHVjNWZi''@;'; put 'put ''XHVjNjAyXHVjNjAzXHVjNjA0XHVjNjA5XHVjNjBhXHVjNjBiXHVjNjBkXHVjNjBlXHVjNjBmXHVjNjExXHVjNjEyXHVjNjEzXHVjNjE0XHVjNjE1XHVjNjE2XHVjNjE3XHVjNjFhXHVjNjFkXHVjNjFlXHVjNjFmXHVjNjIwXHVjNjIxXHVjNjIyXHVjNjIzXHVjNjI2XHVjNjI3XHVjNjI5XHVj''@;'; put 'put ''NjJhXHVjNjJiXHVjNjJmXHVjNjMxXHVjNjMyXHVjNjM2XHVjNjM4XHVjNjNhXHVjNjNjXHVjNjNkXHVjNjNlXHVjNjNmXHVjNjQyXHVjNjQzXHVjNjQ1XHVjNjQ2XHVjNjQ3XHVjNjQ5XHVjNjRhXHVjNjRiXHVjNjRjXHVjNjRkXHVjNjRlXHVjNjRmXHVjNjUyXHVjNjU2XHVjNjU3XHVjNjU4''@;'; put 'put ''XHVjNjU5XHVjNjVhXHVjNjViXHVjNjVlXHVjNjVmXHVjNjYxXHVjNjYyXHVjNjYzXHVjNjY0XHVjNjY1XHVjNjY2XHVjNjY3XHVjNjY4XHVjNjY5XHVjNjZhXHVjNjZiXHVjNjZkXHVjNjZlXHVjNjcwXHVjNjcyXHVjNjczXHVjNjc0XHVjNjc1XHVjNjc2XHVjNjc3XHVjNjdhXHVjNjdiXHVj''@;'; put 'put ''NjdkXHVjNjdlXHVjNjdmXHVjNjgxXHVjNjgyXHVjNjgzXHVjNjg0XHVjNjg1XHVjNjg2XHVjNjg3XHVjNjhhXHVjNjhjXHVjNjhlXHVjNjhmXHVjNjkwXHVjNjkxXHVjNjkyXHVjNjkzXHVjNjk2XHVjNjk3XHVjNjk5XHVjNjlhXHVjNjliXHVjNjlkXHVjNjllXHVjNjlmXHVjNmEwXHVjNmEx''@;'; put 'put ''XHVjNmEyXHVjNmEzXHVjNmE2XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTU4XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNThdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTU4XVtnXV09NDA0NDgrZyx5WzQwNDQ4K2ddPV9bMTU4XVtnXSk7Zm9yKF9bMTU5XT0iXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjNmE4XHVjNmFhXHVjNmFiXHVjNmFjXHVjNmFkXHVjNmFlXHVjNmFmXHVjNmIyXHVjNmIzXHVjNmI1XHVjNmI2XHVjNmI3XHVjNmJiXHVjNmJjXHVjNmJkXHVjNmJlXHVjNmJmXHVjNmMyXHVjNmM0XHVjNmM2''@;'; put 'put ''XHVjNmM3XHVjNmM4XHVjNmM5XHVjNmNhXHVjNmNiXHVjNmNlXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjNmNmXHVjNmQxXHVjNmQyXHVjNmQzXHVjNmQ1XHVjNmQ2XHVjNmQ3XHVjNmQ4XHVjNmQ5XHVjNmRhXHVjNmRiXHVjNmRlXHVjNmRmXHVjNmUyXHVjNmUzXHVj''@;'; put 'put ''NmU0XHVjNmU1XHVjNmU2XHVjNmU3XHVjNmVhXHVjNmViXHVjNmVkXHVjNmVlXHVjNmVmXHVjNmYxXHVjNmYyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjNmYzXHVjNmY0XHVjNmY1XHVjNmY2XHVjNmY3XHVjNmZhXHVjNmZiXHVjNmZjXHVjNmZlXHVjNmZmXHVjNzAw''@;'; put 'put ''XHVjNzAxXHVjNzAyXHVjNzAzXHVjNzA2XHVjNzA3XHVjNzA5XHVjNzBhXHVjNzBiXHVjNzBkXHVjNzBlXHVjNzBmXHVjNzEwXHVjNzExXHVjNzEyXHVjNzEzXHVjNzE2XHVjNzE4XHVjNzFhXHVjNzFiXHVjNzFjXHVjNzFkXHVjNzFlXHVjNzFmXHVjNzIyXHVjNzIzXHVjNzI1XHVjNzI2XHVj''@;'; put 'put ''NzI3XHVjNzI5XHVjNzJhXHVjNzJiXHVjNzJjXHVjNzJkXHVjNzJlXHVjNzJmXHVjNzMyXHVjNzM0XHVjNzM2XHVjNzM4XHVjNzM5XHVjNzNhXHVjNzNiXHVjNzNlXHVjNzNmXHVjNzQxXHVjNzQyXHVjNzQzXHVjNzQ1XHVjNzQ2XHVjNzQ3XHVjNzQ4XHVjNzQ5XHVjNzRiXHVjNzRlXHVjNzUw''@;'; put 'put ''XHVjNzU5XHVjNzVhXHVjNzViXHVjNzVkXHVjNzVlXHVjNzVmXHVjNzYxXHVjNzYyXHVjNzYzXHVjNzY0XHVjNzY1XHVjNzY2XHVjNzY3XHVjNzY5XHVjNzZhXHVjNzZjXHVjNzZkXHVjNzZlXHVjNzZmXHVjNzcwXHVjNzcxXHVjNzcyXHVjNzczXHVjNzc2XHVjNzc3XHVjNzc5XHVjNzdhXHVj''@;'; put 'put ''NzdiXHVjNzdmXHVjNzgwXHVjNzgxXHVjNzgyXHVjNzg2XHVjNzhiXHVjNzhjXHVjNzhkXHVjNzhmXHVjNzkyXHVjNzkzXHVjNzk1XHVjNzk5XHVjNzliXHVjNzljXHVjNzlkXHVjNzllXHVjNzlmXHVjN2EyXHVjN2E3XHVjN2E4XHVjN2E5XHVjN2FhXHVjN2FiXHVjN2FlXHVjN2FmXHVjN2Ix''@;'; put 'put ''XHVjN2IyXHVjN2IzXHVjN2I1XHVjN2I2XHVjN2I3XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTU5XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNTldW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTU5XVtnXV09NDA3MDQrZyx5WzQwNzA0K2ddPV9bMTU5XVtnXSk7Zm9yKF9bMTYwXT0iXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjN2I4XHVjN2I5XHVjN2JhXHVjN2JiXHVjN2JlXHVjN2MyXHVjN2MzXHVjN2M0XHVjN2M1XHVjN2M2XHVjN2M3XHVjN2NhXHVjN2NiXHVjN2NkXHVjN2NmXHVjN2QxXHVjN2QyXHVjN2Qz''@;'; put 'put ''XHVjN2Q0XHVjN2Q1XHVjN2Q2XHVjN2Q3XHVjN2Q5XHVjN2RhXHVjN2RiXHVjN2RjXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjN2RlXHVjN2RmXHVjN2UwXHVjN2UxXHVjN2UyXHVjN2UzXHVjN2U1XHVjN2U2XHVjN2U3XHVjN2U5XHVjN2VhXHVjN2ViXHVjN2VkXHVj''@;'; put 'put ''N2VlXHVjN2VmXHVjN2YwXHVjN2YxXHVjN2YyXHVjN2YzXHVjN2Y0XHVjN2Y1XHVjN2Y2XHVjN2Y3XHVjN2Y4XHVjN2Y5XHVjN2ZhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjN2ZiXHVjN2ZjXHVjN2ZkXHVjN2ZlXHVjN2ZmXHVjODAyXHVjODAzXHVjODA1XHVjODA2''@;'; put 'put ''XHVjODA3XHVjODA5XHVjODBiXHVjODBjXHVjODBkXHVjODBlXHVjODBmXHVjODEyXHVjODE0XHVjODE3XHVjODE4XHVjODE5XHVjODFhXHVjODFiXHVjODFlXHVjODFmXHVjODIxXHVjODIyXHVjODIzXHVjODI1XHVjODI2XHVjODI3XHVjODI4XHVjODI5XHVjODJhXHVjODJiXHVjODJlXHVj''@;'; put 'put ''ODMwXHVjODMyXHVjODMzXHVjODM0XHVjODM1XHVjODM2XHVjODM3XHVjODM5XHVjODNhXHVjODNiXHVjODNkXHVjODNlXHVjODNmXHVjODQxXHVjODQyXHVjODQzXHVjODQ0XHVjODQ1XHVjODQ2XHVjODQ3XHVjODRhXHVjODRiXHVjODRlXHVjODRmXHVjODUwXHVjODUxXHVjODUyXHVjODUz''@;'; put 'put ''XHVjODU1XHVjODU2XHVjODU3XHVjODU4XHVjODU5XHVjODVhXHVjODViXHVjODVjXHVjODVkXHVjODVlXHVjODVmXHVjODYwXHVjODYxXHVjODYyXHVjODYzXHVjODY0XHVjODY1XHVjODY2XHVjODY3XHVjODY4XHVjODY5XHVjODZhXHVjODZiXHVjODZjXHVjODZkXHVjODZlXHVjODZmXHVj''@;'; put 'put ''ODcyXHVjODczXHVjODc1XHVjODc2XHVjODc3XHVjODc5XHVjODdiXHVjODdjXHVjODdkXHVjODdlXHVjODdmXHVjODgyXHVjODg0XHVjODg4XHVjODg5XHVjODhhXHVjODhlXHVjODhmXHVjODkwXHVjODkxXHVjODkyXHVjODkzXHVjODk1XHVjODk2XHVjODk3XHVjODk4XHVjODk5XHVjODlh''@;'; put 'put ''XHVjODliXHVjODljXHVjODllXHVjOGEwXHVjOGEyXHVjOGEzXHVjOGE0XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTYwXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNjBdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTYwXVtnXV09NDA5NjArZyx5WzQwOTYwK2ddPV9bMTYwXVtnXSk7Zm9y''@;'; put 'put ''KF9bMTYxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjOGE1XHVjOGE2XHVjOGE3XHVjOGE5XHVjOGFhXHVjOGFiXHVjOGFjXHVjOGFkXHVjOGFlXHVjOGFmXHVjOGIwXHVjOGIxXHVjOGIyXHVjOGIzXHVjOGI0XHVjOGI1''@;'; put 'put ''XHVjOGI2XHVjOGI3XHVjOGI4XHVjOGI5XHVjOGJhXHVjOGJiXHVjOGJlXHVjOGJmXHVjOGMwXHVjOGMxXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjOGMyXHVjOGMzXHVjOGM1XHVjOGM2XHVjOGM3XHVjOGM5XHVjOGNhXHVjOGNiXHVjOGNkXHVjOGNlXHVjOGNmXHVj''@;'; put 'put ''OGQwXHVjOGQxXHVjOGQyXHVjOGQzXHVjOGQ2XHVjOGQ4XHVjOGRhXHVjOGRiXHVjOGRjXHVjOGRkXHVjOGRlXHVjOGRmXHVjOGUyXHVjOGUzXHVjOGU1XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjOGU2XHVjOGU3XHVjOGU4XHVjOGU5XHVjOGVhXHVjOGViXHVjOGVj''@;'; put 'put ''XHVjOGVkXHVjOGVlXHVjOGVmXHVjOGYwXHVjOGYxXHVjOGYyXHVjOGYzXHVjOGY0XHVjOGY2XHVjOGY3XHVjOGY4XHVjOGY5XHVjOGZhXHVjOGZiXHVjOGZlXHVjOGZmXHVjOTAxXHVjOTAyXHVjOTAzXHVjOTA3XHVjOTA4XHVjOTA5XHVjOTBhXHVjOTBiXHVjOTBlXHUzMDAwXHUzMDAxXHUz''@;'; put 'put ''MDAyXHhiN1x1MjAyNVx1MjAyNlx4YThcdTMwMDNceGFkXHUyMDE1XHUyMjI1XHVmZjNjXHUyMjNjXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUzMDE0XHUzMDE1XHUzMDA4XHUzMDA5XHUzMDBhXHUzMDBiXHUzMDBjXHUzMDBkXHUzMDBlXHUzMDBmXHUzMDEwXHUzMDExXHhiMVx4ZDdceGY3''@;'; put 'put ''XHUyMjYwXHUyMjY0XHUyMjY1XHUyMjFlXHUyMjM0XHhiMFx1MjAzMlx1MjAzM1x1MjEwM1x1MjEyYlx1ZmZlMFx1ZmZlMVx1ZmZlNVx1MjY0Mlx1MjY0MFx1MjIyMFx1MjJhNVx1MjMxMlx1MjIwMlx1MjIwN1x1MjI2MVx1MjI1Mlx4YTdcdTIwM2JcdTI2MDZcdTI2MDVcdTI1Y2JcdTI1Y2Zc''@;'; put 'put ''dTI1Y2VcdTI1YzdcdTI1YzZcdTI1YTFcdTI1YTBcdTI1YjNcdTI1YjJcdTI1YmRcdTI1YmNcdTIxOTJcdTIxOTBcdTIxOTFcdTIxOTNcdTIxOTRcdTMwMTNcdTIyNmFcdTIyNmJcdTIyMWFcdTIyM2RcdTIyMWRcdTIyMzVcdTIyMmJcdTIyMmNcdTIyMDhcdTIyMGJcdTIyODZcdTIyODdcdTIy''@;'; put 'put ''ODJcdTIyODNcdTIyMmFcdTIyMjlcdTIyMjdcdTIyMjhcdWZmZTJcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNjFdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE2MV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNjFdW2ddXT00MTIxNitnLHlbNDEyMTYrZ109X1sxNjFdW2ddKTtmb3IoX1sx''@;'; put 'put ''NjJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM5MTBcdWM5MTJcdWM5MTNcdWM5MTRcdWM5MTVcdWM5MTZcdWM5MTdcdWM5MTlcdWM5MWFcdWM5MWJcdWM5MWNcdWM5MWRcdWM5MWVcdWM5MWZcdWM5MjBcdWM5MjFcdWM5''@;'; put 'put ''MjJcdWM5MjNcdWM5MjRcdWM5MjVcdWM5MjZcdWM5MjdcdWM5MjhcdWM5MjlcdWM5MmFcdWM5MmJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM5MmRcdWM5MmVcdWM5MmZcdWM5MzBcdWM5MzFcdWM5MzJcdWM5MzNcdWM5MzVcdWM5MzZcdWM5MzdcdWM5MzhcdWM5Mzlc''@;'; put 'put ''dWM5M2FcdWM5M2JcdWM5M2NcdWM5M2RcdWM5M2VcdWM5M2ZcdWM5NDBcdWM5NDFcdWM5NDJcdWM5NDNcdWM5NDRcdWM5NDVcdWM5NDZcdWM5NDdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM5NDhcdWM5NDlcdWM5NGFcdWM5NGJcdWM5NGNcdWM5NGRcdWM5NGVcdWM5''@;'; put 'put ''NGZcdWM5NTJcdWM5NTNcdWM5NTVcdWM5NTZcdWM5NTdcdWM5NTlcdWM5NWFcdWM5NWJcdWM5NWNcdWM5NWRcdWM5NWVcdWM5NWZcdWM5NjJcdWM5NjRcdWM5NjVcdWM5NjZcdWM5NjdcdWM5NjhcdWM5NjlcdWM5NmFcdWM5NmJcdWM5NmRcdWM5NmVcdWM5NmZcdTIxZDJcdTIxZDRcdTIyMDBc''@;'; put 'put ''dTIyMDNceGI0XHVmZjVlXHUwMmM3XHUwMmQ4XHUwMmRkXHUwMmRhXHUwMmQ5XHhiOFx1MDJkYlx4YTFceGJmXHUwMmQwXHUyMjJlXHUyMjExXHUyMjBmXHhhNFx1MjEwOVx1MjAzMFx1MjVjMVx1MjVjMFx1MjViN1x1MjViNlx1MjY2NFx1MjY2MFx1MjY2MVx1MjY2NVx1MjY2N1x1MjY2M1x1''@;'; put 'put ''MjI5OVx1MjVjOFx1MjVhM1x1MjVkMFx1MjVkMVx1MjU5Mlx1MjVhNFx1MjVhNVx1MjVhOFx1MjVhN1x1MjVhNlx1MjVhOVx1MjY2OFx1MjYwZlx1MjYwZVx1MjYxY1x1MjYxZVx4YjZcdTIwMjBcdTIwMjFcdTIxOTVcdTIxOTdcdTIxOTlcdTIxOTZcdTIxOThcdTI2NmRcdTI2NjlcdTI2NmFc''@;'; put 'put ''dTI2NmNcdTMyN2ZcdTMyMWNcdTIxMTZcdTMzYzdcdTIxMjJcdTMzYzJcdTMzZDhcdTIxMjFcdTIwYWNceGFlXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTYyXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNjJdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTYyXVtnXV09NDE0NzIrZyx5WzQxNDcyK2ddPV9bMTYyXVtnXSk7Zm9yKF9bMTYz''@;'; put 'put ''XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjOTcxXHVjOTcyXHVjOTczXHVjOTc1XHVjOTc2XHVjOTc3XHVjOTc4XHVjOTc5XHVjOTdhXHVjOTdiXHVjOTdkXHVjOTdlXHVjOTdmXHVjOTgwXHVjOTgxXHVjOTgyXHVjOTgz''@;'; put 'put ''XHVjOTg0XHVjOTg1XHVjOTg2XHVjOTg3XHVjOThhXHVjOThiXHVjOThkXHVjOThlXHVjOThmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjOTkxXHVjOTkyXHVjOTkzXHVjOTk0XHVjOTk1XHVjOTk2XHVjOTk3XHVjOTlhXHVjOTljXHVjOTllXHVjOTlmXHVjOWEwXHVj''@;'; put 'put ''OWExXHVjOWEyXHVjOWEzXHVjOWE0XHVjOWE1XHVjOWE2XHVjOWE3XHVjOWE4XHVjOWE5XHVjOWFhXHVjOWFiXHVjOWFjXHVjOWFkXHVjOWFlXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjOWFmXHVjOWIwXHVjOWIxXHVjOWIyXHVjOWIzXHVjOWI0XHVjOWI1XHVjOWI2''@;'; put 'put ''XHVjOWI3XHVjOWI4XHVjOWI5XHVjOWJhXHVjOWJiXHVjOWJjXHVjOWJkXHVjOWJlXHVjOWJmXHVjOWMyXHVjOWMzXHVjOWM1XHVjOWM2XHVjOWM5XHVjOWNiXHVjOWNjXHVjOWNkXHVjOWNlXHVjOWNmXHVjOWQyXHVjOWQ0XHVjOWQ3XHVjOWQ4XHVjOWRiXHVmZjAxXHVmZjAyXHVmZjAzXHVm''@;'; put 'put ''ZjA0XHVmZjA1XHVmZjA2XHVmZjA3XHVmZjA4XHVmZjA5XHVmZjBhXHVmZjBiXHVmZjBjXHVmZjBkXHVmZjBlXHVmZjBmXHVmZjEwXHVmZjExXHVmZjEyXHVmZjEzXHVmZjE0XHVmZjE1XHVmZjE2XHVmZjE3XHVmZjE4XHVmZjE5XHVmZjFhXHVmZjFiXHVmZjFjXHVmZjFkXHVmZjFlXHVmZjFm''@;'; put 'put ''XHVmZjIwXHVmZjIxXHVmZjIyXHVmZjIzXHVmZjI0XHVmZjI1XHVmZjI2XHVmZjI3XHVmZjI4XHVmZjI5XHVmZjJhXHVmZjJiXHVmZjJjXHVmZjJkXHVmZjJlXHVmZjJmXHVmZjMwXHVmZjMxXHVmZjMyXHVmZjMzXHVmZjM0XHVmZjM1XHVmZjM2XHVmZjM3XHVmZjM4XHVmZjM5XHVmZjNhXHVm''@;'; put 'put ''ZjNiXHVmZmU2XHVmZjNkXHVmZjNlXHVmZjNmXHVmZjQwXHVmZjQxXHVmZjQyXHVmZjQzXHVmZjQ0XHVmZjQ1XHVmZjQ2XHVmZjQ3XHVmZjQ4XHVmZjQ5XHVmZjRhXHVmZjRiXHVmZjRjXHVmZjRkXHVmZjRlXHVmZjRmXHVmZjUwXHVmZjUxXHVmZjUyXHVmZjUzXHVmZjU0XHVmZjU1XHVmZjU2''@;'; put 'put ''XHVmZjU3XHVmZjU4XHVmZjU5XHVmZjVhXHVmZjViXHVmZjVjXHVmZjVkXHVmZmUzXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTYzXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNjNdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTYzXVtnXV09NDE3MjgrZyx5WzQxNzI4K2ddPV9bMTYzXVtn''@;'; put 'put ''XSk7Zm9yKF9bMTY0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjOWRlXHVjOWRmXHVjOWUxXHVjOWUzXHVjOWU1XHVjOWU2XHVjOWU4XHVjOWU5XHVjOWVhXHVjOWViXHVjOWVlXHVjOWYyXHVjOWYzXHVjOWY0XHVjOWY1''@;'; put 'put ''XHVjOWY2XHVjOWY3XHVjOWZhXHVjOWZiXHVjOWZkXHVjOWZlXHVjOWZmXHVjYTAxXHVjYTAyXHVjYTAzXHVjYTA0XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYTA1XHVjYTA2XHVjYTA3XHVjYTBhXHVjYTBlXHVjYTBmXHVjYTEwXHVjYTExXHVjYTEyXHVjYTEzXHVj''@;'; put 'put ''YTE1XHVjYTE2XHVjYTE3XHVjYTE5XHVjYTFhXHVjYTFiXHVjYTFjXHVjYTFkXHVjYTFlXHVjYTFmXHVjYTIwXHVjYTIxXHVjYTIyXHVjYTIzXHVjYTI0XHVjYTI1XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYTI2XHVjYTI3XHVjYTI4XHVjYTJhXHVjYTJiXHVjYTJj''@;'; put 'put ''XHVjYTJkXHVjYTJlXHVjYTJmXHVjYTMwXHVjYTMxXHVjYTMyXHVjYTMzXHVjYTM0XHVjYTM1XHVjYTM2XHVjYTM3XHVjYTM4XHVjYTM5XHVjYTNhXHVjYTNiXHVjYTNjXHVjYTNkXHVjYTNlXHVjYTNmXHVjYTQwXHVjYTQxXHVjYTQyXHVjYTQzXHVjYTQ0XHVjYTQ1XHVjYTQ2XHUzMTMxXHUz''@;'; put 'put ''MTMyXHUzMTMzXHUzMTM0XHUzMTM1XHUzMTM2XHUzMTM3XHUzMTM4XHUzMTM5XHUzMTNhXHUzMTNiXHUzMTNjXHUzMTNkXHUzMTNlXHUzMTNmXHUzMTQwXHUzMTQxXHUzMTQyXHUzMTQzXHUzMTQ0XHUzMTQ1XHUzMTQ2XHUzMTQ3XHUzMTQ4XHUzMTQ5XHUzMTRhXHUzMTRiXHUzMTRjXHUzMTRk''@;'; put 'put ''XHUzMTRlXHUzMTRmXHUzMTUwXHUzMTUxXHUzMTUyXHUzMTUzXHUzMTU0XHUzMTU1XHUzMTU2XHUzMTU3XHUzMTU4XHUzMTU5XHUzMTVhXHUzMTViXHUzMTVjXHUzMTVkXHUzMTVlXHUzMTVmXHUzMTYwXHUzMTYxXHUzMTYyXHUzMTYzXHUzMTY0XHUzMTY1XHUzMTY2XHUzMTY3XHUzMTY4XHUz''@;'; put 'put ''MTY5XHUzMTZhXHUzMTZiXHUzMTZjXHUzMTZkXHUzMTZlXHUzMTZmXHUzMTcwXHUzMTcxXHUzMTcyXHUzMTczXHUzMTc0XHUzMTc1XHUzMTc2XHUzMTc3XHUzMTc4XHUzMTc5XHUzMTdhXHUzMTdiXHUzMTdjXHUzMTdkXHUzMTdlXHUzMTdmXHUzMTgwXHUzMTgxXHUzMTgyXHUzMTgzXHUzMTg0''@;'; put 'put ''XHUzMTg1XHUzMTg2XHUzMTg3XHUzMTg4XHUzMTg5XHUzMThhXHUzMThiXHUzMThjXHUzMThkXHUzMThlXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTY0XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNjRdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTY0XVtnXV09NDE5ODQrZyx5WzQxOTg0''@;'; put 'put ''K2ddPV9bMTY0XVtnXSk7Zm9yKF9bMTY1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYTQ3XHVjYTQ4XHVjYTQ5XHVjYTRhXHVjYTRiXHVjYTRlXHVjYTRmXHVjYTUxXHVjYTUyXHVjYTUzXHVjYTU1XHVjYTU2XHVjYTU3''@;'; put 'put ''XHVjYTU4XHVjYTU5XHVjYTVhXHVjYTViXHVjYTVlXHVjYTYyXHVjYTYzXHVjYTY0XHVjYTY1XHVjYTY2XHVjYTY3XHVjYTY5XHVjYTZhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYTZiXHVjYTZjXHVjYTZkXHVjYTZlXHVjYTZmXHVjYTcwXHVjYTcxXHVjYTcyXHVj''@;'; put 'put ''YTczXHVjYTc0XHVjYTc1XHVjYTc2XHVjYTc3XHVjYTc4XHVjYTc5XHVjYTdhXHVjYTdiXHVjYTdjXHVjYTdlXHVjYTdmXHVjYTgwXHVjYTgxXHVjYTgyXHVjYTgzXHVjYTg1XHVjYTg2XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYTg3XHVjYTg4XHVjYTg5XHVjYThh''@;'; put 'put ''XHVjYThiXHVjYThjXHVjYThkXHVjYThlXHVjYThmXHVjYTkwXHVjYTkxXHVjYTkyXHVjYTkzXHVjYTk0XHVjYTk1XHVjYTk2XHVjYTk3XHVjYTk5XHVjYTlhXHVjYTliXHVjYTljXHVjYTlkXHVjYTllXHVjYTlmXHVjYWEwXHVjYWExXHVjYWEyXHVjYWEzXHVjYWE0XHVjYWE1XHVjYWE2XHVj''@;'; put 'put ''YWE3XHUyMTcwXHUyMTcxXHUyMTcyXHUyMTczXHUyMTc0XHUyMTc1XHUyMTc2XHUyMTc3XHUyMTc4XHUyMTc5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMTYwXHUyMTYxXHUyMTYyXHUyMTYzXHUyMTY0XHUyMTY1XHUyMTY2XHUyMTY3XHUyMTY4XHUyMTY5XHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwMzkxXHUwMzkyXHUwMzkzXHUwMzk0XHUwMzk1XHUwMzk2XHUwMzk3XHUwMzk4XHUwMzk5XHUwMzlhXHUwMzliXHUwMzljXHUwMzlkXHUwMzllXHUwMzlmXHUwM2EwXHUwM2ExXHUwM2EzXHUwM2E0XHUwM2E1XHUwM2E2XHUwM2E3XHUw''@;'; put 'put ''M2E4XHUwM2E5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwM2IxXHUwM2IyXHUwM2IzXHUwM2I0XHUwM2I1XHUwM2I2XHUwM2I3XHUwM2I4XHUwM2I5XHUwM2JhXHUwM2JiXHUwM2JjXHUwM2JkXHUwM2JlXHUwM2JmXHUwM2MwXHUwM2MxXHUwM2Mz''@;'; put 'put ''XHUwM2M0XHUwM2M1XHUwM2M2XHUwM2M3XHUwM2M4XHUwM2M5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTY1XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNjVdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTY1XVtnXV09NDIy''@;'; put 'put ''NDArZyx5WzQyMjQwK2ddPV9bMTY1XVtnXSk7Zm9yKF9bMTY2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYWE4XHVjYWE5XHVjYWFhXHVjYWFiXHVjYWFjXHVjYWFkXHVjYWFlXHVjYWFmXHVjYWIwXHVjYWIxXHVjYWIy''@;'; put 'put ''XHVjYWIzXHVjYWI0XHVjYWI1XHVjYWI2XHVjYWI3XHVjYWI4XHVjYWI5XHVjYWJhXHVjYWJiXHVjYWJlXHVjYWJmXHVjYWMxXHVjYWMyXHVjYWMzXHVjYWM1XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYWM2XHVjYWM3XHVjYWM4XHVjYWM5XHVjYWNhXHVjYWNiXHVj''@;'; put 'put ''YWNlXHVjYWQwXHVjYWQyXHVjYWQ0XHVjYWQ1XHVjYWQ2XHVjYWQ3XHVjYWRhXHVjYWRiXHVjYWRjXHVjYWRkXHVjYWRlXHVjYWRmXHVjYWUxXHVjYWUyXHVjYWUzXHVjYWU0XHVjYWU1XHVjYWU2XHVjYWU3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYWU4XHVjYWU5''@;'; put 'put ''XHVjYWVhXHVjYWViXHVjYWVkXHVjYWVlXHVjYWVmXHVjYWYwXHVjYWYxXHVjYWYyXHVjYWYzXHVjYWY1XHVjYWY2XHVjYWY3XHVjYWY4XHVjYWY5XHVjYWZhXHVjYWZiXHVjYWZjXHVjYWZkXHVjYWZlXHVjYWZmXHVjYjAwXHVjYjAxXHVjYjAyXHVjYjAzXHVjYjA0XHVjYjA1XHVjYjA2XHVj''@;'; put 'put ''YjA3XHVjYjA5XHVjYjBhXHUyNTAwXHUyNTAyXHUyNTBjXHUyNTEwXHUyNTE4XHUyNTE0XHUyNTFjXHUyNTJjXHUyNTI0XHUyNTM0XHUyNTNjXHUyNTAxXHUyNTAzXHUyNTBmXHUyNTEzXHUyNTFiXHUyNTE3XHUyNTIzXHUyNTMzXHUyNTJiXHUyNTNiXHUyNTRiXHUyNTIwXHUyNTJmXHUyNTI4''@;'; put 'put ''XHUyNTM3XHUyNTNmXHUyNTFkXHUyNTMwXHUyNTI1XHUyNTM4XHUyNTQyXHUyNTEyXHUyNTExXHUyNTFhXHUyNTE5XHUyNTE2XHUyNTE1XHUyNTBlXHUyNTBkXHUyNTFlXHUyNTFmXHUyNTIxXHUyNTIyXHUyNTI2XHUyNTI3XHUyNTI5XHUyNTJhXHUyNTJkXHUyNTJlXHUyNTMxXHUyNTMyXHUy''@;'; put 'put ''NTM1XHUyNTM2XHUyNTM5XHUyNTNhXHUyNTNkXHUyNTNlXHUyNTQwXHUyNTQxXHUyNTQzXHUyNTQ0XHUyNTQ1XHUyNTQ2XHUyNTQ3XHUyNTQ4XHUyNTQ5XHUyNTRhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTY2XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNjZdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19b''@;'; put 'put ''MTY2XVtnXV09NDI0OTYrZyx5WzQyNDk2K2ddPV9bMTY2XVtnXSk7Zm9yKF9bMTY3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYjBiXHVjYjBjXHVjYjBkXHVjYjBlXHVjYjBmXHVjYjExXHVjYjEyXHVjYjEzXHVjYjE1''@;'; put 'put ''XHVjYjE2XHVjYjE3XHVjYjE5XHVjYjFhXHVjYjFiXHVjYjFjXHVjYjFkXHVjYjFlXHVjYjFmXHVjYjIyXHVjYjIzXHVjYjI0XHVjYjI1XHVjYjI2XHVjYjI3XHVjYjI4XHVjYjI5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYjJhXHVjYjJiXHVjYjJjXHVjYjJkXHVj''@;'; put 'put ''YjJlXHVjYjJmXHVjYjMwXHVjYjMxXHVjYjMyXHVjYjMzXHVjYjM0XHVjYjM1XHVjYjM2XHVjYjM3XHVjYjM4XHVjYjM5XHVjYjNhXHVjYjNiXHVjYjNjXHVjYjNkXHVjYjNlXHVjYjNmXHVjYjQwXHVjYjQyXHVjYjQzXHVjYjQ0XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVjYjQ1XHVjYjQ2XHVjYjQ3XHVjYjRhXHVjYjRiXHVjYjRkXHVjYjRlXHVjYjRmXHVjYjUxXHVjYjUyXHVjYjUzXHVjYjU0XHVjYjU1XHVjYjU2XHVjYjU3XHVjYjVhXHVjYjViXHVjYjVjXHVjYjVlXHVjYjVmXHVjYjYwXHVjYjYxXHVjYjYyXHVjYjYzXHVjYjY1XHVjYjY2XHVjYjY3XHVj''@;'; put 'put ''YjY4XHVjYjY5XHVjYjZhXHVjYjZiXHVjYjZjXHUzMzk1XHUzMzk2XHUzMzk3XHUyMTEzXHUzMzk4XHUzM2M0XHUzM2EzXHUzM2E0XHUzM2E1XHUzM2E2XHUzMzk5XHUzMzlhXHUzMzliXHUzMzljXHUzMzlkXHUzMzllXHUzMzlmXHUzM2EwXHUzM2ExXHUzM2EyXHUzM2NhXHUzMzhkXHUzMzhl''@;'; put 'put ''XHUzMzhmXHUzM2NmXHUzMzg4XHUzMzg5XHUzM2M4XHUzM2E3XHUzM2E4XHUzM2IwXHUzM2IxXHUzM2IyXHUzM2IzXHUzM2I0XHUzM2I1XHUzM2I2XHUzM2I3XHUzM2I4XHUzM2I5XHUzMzgwXHUzMzgxXHUzMzgyXHUzMzgzXHUzMzg0XHUzM2JhXHUzM2JiXHUzM2JjXHUzM2JkXHUzM2JlXHUz''@;'; put 'put ''M2JmXHUzMzkwXHUzMzkxXHUzMzkyXHUzMzkzXHUzMzk0XHUyMTI2XHUzM2MwXHUzM2MxXHUzMzhhXHUzMzhiXHUzMzhjXHUzM2Q2XHUzM2M1XHUzM2FkXHUzM2FlXHUzM2FmXHUzM2RiXHUzM2E5XHUzM2FhXHUzM2FiXHUzM2FjXHUzM2RkXHUzM2QwXHUzM2QzXHUzM2MzXHUzM2M5XHUzM2Rj''@;'; put 'put ''XHUzM2M2XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTY3XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNjddW2ddLmNoYXJDb2Rl''@;'; put 'put ''QXQoMCkmJihJW19bMTY3XVtnXV09NDI3NTIrZyx5WzQyNzUyK2ddPV9bMTY3XVtnXSk7Zm9yKF9bMTY4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYjZkXHVjYjZlXHVjYjZmXHVjYjcwXHVjYjcxXHVjYjcyXHVjYjcz''@;'; put 'put ''XHVjYjc0XHVjYjc1XHVjYjc2XHVjYjc3XHVjYjdhXHVjYjdiXHVjYjdjXHVjYjdkXHVjYjdlXHVjYjdmXHVjYjgwXHVjYjgxXHVjYjgyXHVjYjgzXHVjYjg0XHVjYjg1XHVjYjg2XHVjYjg3XHVjYjg4XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYjg5XHVjYjhhXHVj''@;'; put 'put ''YjhiXHVjYjhjXHVjYjhkXHVjYjhlXHVjYjhmXHVjYjkwXHVjYjkxXHVjYjkyXHVjYjkzXHVjYjk0XHVjYjk1XHVjYjk2XHVjYjk3XHVjYjk4XHVjYjk5XHVjYjlhXHVjYjliXHVjYjlkXHVjYjllXHVjYjlmXHVjYmEwXHVjYmExXHVjYmEyXHVjYmEzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVjYmE0XHVjYmE1XHVjYmE2XHVjYmE3XHVjYmE4XHVjYmE5XHVjYmFhXHVjYmFiXHVjYmFjXHVjYmFkXHVjYmFlXHVjYmFmXHVjYmIwXHVjYmIxXHVjYmIyXHVjYmIzXHVjYmI0XHVjYmI1XHVjYmI2XHVjYmI3XHVjYmI5XHVjYmJhXHVjYmJiXHVjYmJjXHVjYmJkXHVj''@;'; put 'put ''YmJlXHVjYmJmXHVjYmMwXHVjYmMxXHVjYmMyXHVjYmMzXHVjYmM0XHhjNlx4ZDBceGFhXHUwMTI2XHVmZmZkXHUwMTMyXHVmZmZkXHUwMTNmXHUwMTQxXHhkOFx1MDE1Mlx4YmFceGRlXHUwMTY2XHUwMTRhXHVmZmZkXHUzMjYwXHUzMjYxXHUzMjYyXHUzMjYzXHUzMjY0XHUzMjY1XHUzMjY2''@;'; put 'put ''XHUzMjY3XHUzMjY4XHUzMjY5XHUzMjZhXHUzMjZiXHUzMjZjXHUzMjZkXHUzMjZlXHUzMjZmXHUzMjcwXHUzMjcxXHUzMjcyXHUzMjczXHUzMjc0XHUzMjc1XHUzMjc2XHUzMjc3XHUzMjc4XHUzMjc5XHUzMjdhXHUzMjdiXHUyNGQwXHUyNGQxXHUyNGQyXHUyNGQzXHUyNGQ0XHUyNGQ1XHUy''@;'; put 'put ''NGQ2XHUyNGQ3XHUyNGQ4XHUyNGQ5XHUyNGRhXHUyNGRiXHUyNGRjXHUyNGRkXHUyNGRlXHUyNGRmXHUyNGUwXHUyNGUxXHUyNGUyXHUyNGUzXHUyNGU0XHUyNGU1XHUyNGU2XHUyNGU3XHUyNGU4XHUyNGU5XHUyNDYwXHUyNDYxXHUyNDYyXHUyNDYzXHUyNDY0XHUyNDY1XHUyNDY2XHUyNDY3''@;'; put 'put ''XHUyNDY4XHUyNDY5XHUyNDZhXHUyNDZiXHUyNDZjXHUyNDZkXHUyNDZlXHhiZFx1MjE1M1x1MjE1NFx4YmNceGJlXHUyMTViXHUyMTVjXHUyMTVkXHUyMTVlXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTY4XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNjhdW2ddLmNoYXJDb2RlQXQoMCkm''@;'; put 'put ''JihJW19bMTY4XVtnXV09NDMwMDgrZyx5WzQzMDA4K2ddPV9bMTY4XVtnXSk7Zm9yKF9bMTY5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYmM1XHVjYmM2XHVjYmM3XHVjYmM4XHVjYmM5XHVjYmNhXHVjYmNiXHVjYmNj''@;'; put 'put ''XHVjYmNkXHVjYmNlXHVjYmNmXHVjYmQwXHVjYmQxXHVjYmQyXHVjYmQzXHVjYmQ1XHVjYmQ2XHVjYmQ3XHVjYmQ4XHVjYmQ5XHVjYmRhXHVjYmRiXHVjYmRjXHVjYmRkXHVjYmRlXHVjYmRmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYmUwXHVjYmUxXHVjYmUyXHVj''@;'; put 'put ''YmUzXHVjYmU1XHVjYmU2XHVjYmU4XHVjYmVhXHVjYmViXHVjYmVjXHVjYmVkXHVjYmVlXHVjYmVmXHVjYmYwXHVjYmYxXHVjYmYyXHVjYmYzXHVjYmY0XHVjYmY1XHVjYmY2XHVjYmY3XHVjYmY4XHVjYmY5XHVjYmZhXHVjYmZiXHVjYmZjXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVjYmZkXHVjYmZlXHVjYmZmXHVjYzAwXHVjYzAxXHVjYzAyXHVjYzAzXHVjYzA0XHVjYzA1XHVjYzA2XHVjYzA3XHVjYzA4XHVjYzA5XHVjYzBhXHVjYzBiXHVjYzBlXHVjYzBmXHVjYzExXHVjYzEyXHVjYzEzXHVjYzE1XHVjYzE2XHVjYzE3XHVjYzE4XHVjYzE5XHVjYzFhXHVj''@;'; put 'put ''YzFiXHVjYzFlXHVjYzFmXHVjYzIwXHVjYzIzXHVjYzI0XHhlNlx1MDExMVx4ZjBcdTAxMjdcdTAxMzFcdTAxMzNcdTAxMzhcdTAxNDBcdTAxNDJceGY4XHUwMTUzXHhkZlx4ZmVcdTAxNjdcdTAxNGJcdTAxNDlcdTMyMDBcdTMyMDFcdTMyMDJcdTMyMDNcdTMyMDRcdTMyMDVcdTMyMDZcdTMy''@;'; put 'put ''MDdcdTMyMDhcdTMyMDlcdTMyMGFcdTMyMGJcdTMyMGNcdTMyMGRcdTMyMGVcdTMyMGZcdTMyMTBcdTMyMTFcdTMyMTJcdTMyMTNcdTMyMTRcdTMyMTVcdTMyMTZcdTMyMTdcdTMyMThcdTMyMTlcdTMyMWFcdTMyMWJcdTI0OWNcdTI0OWRcdTI0OWVcdTI0OWZcdTI0YTBcdTI0YTFcdTI0YTJc''@;'; put 'put ''dTI0YTNcdTI0YTRcdTI0YTVcdTI0YTZcdTI0YTdcdTI0YThcdTI0YTlcdTI0YWFcdTI0YWJcdTI0YWNcdTI0YWRcdTI0YWVcdTI0YWZcdTI0YjBcdTI0YjFcdTI0YjJcdTI0YjNcdTI0YjRcdTI0YjVcdTI0NzRcdTI0NzVcdTI0NzZcdTI0NzdcdTI0NzhcdTI0NzlcdTI0N2FcdTI0N2JcdTI0''@;'; put 'put ''N2NcdTI0N2RcdTI0N2VcdTI0N2ZcdTI0ODBcdTI0ODFcdTI0ODJceGI5XHhiMlx4YjNcdTIwNzRcdTIwN2ZcdTIwODFcdTIwODJcdTIwODNcdTIwODRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNjldLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE2OV1bZ10uY2hhckNvZGVBdCgwKSYmKElb''@;'; put 'put ''X1sxNjldW2ddXT00MzI2NCtnLHlbNDMyNjQrZ109X1sxNjldW2ddKTtmb3IoX1sxNzBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNjMjVcdWNjMjZcdWNjMmFcdWNjMmJcdWNjMmRcdWNjMmZcdWNjMzFcdWNjMzJcdWNj''@;'; put 'put ''MzNcdWNjMzRcdWNjMzVcdWNjMzZcdWNjMzdcdWNjM2FcdWNjM2ZcdWNjNDBcdWNjNDFcdWNjNDJcdWNjNDNcdWNjNDZcdWNjNDdcdWNjNDlcdWNjNGFcdWNjNGJcdWNjNGRcdWNjNGVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNjNGZcdWNjNTBcdWNjNTFcdWNjNTJc''@;'; put 'put ''dWNjNTNcdWNjNTZcdWNjNWFcdWNjNWJcdWNjNWNcdWNjNWRcdWNjNWVcdWNjNWZcdWNjNjFcdWNjNjJcdWNjNjNcdWNjNjVcdWNjNjdcdWNjNjlcdWNjNmFcdWNjNmJcdWNjNmNcdWNjNmRcdWNjNmVcdWNjNmZcdWNjNzFcdWNjNzJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWNjNzNcdWNjNzRcdWNjNzZcdWNjNzdcdWNjNzhcdWNjNzlcdWNjN2FcdWNjN2JcdWNjN2NcdWNjN2RcdWNjN2VcdWNjN2ZcdWNjODBcdWNjODFcdWNjODJcdWNjODNcdWNjODRcdWNjODVcdWNjODZcdWNjODdcdWNjODhcdWNjODlcdWNjOGFcdWNjOGJcdWNjOGNcdWNjOGRcdWNjOGVc''@;'; put 'put ''dWNjOGZcdWNjOTBcdWNjOTFcdWNjOTJcdWNjOTNcdTMwNDFcdTMwNDJcdTMwNDNcdTMwNDRcdTMwNDVcdTMwNDZcdTMwNDdcdTMwNDhcdTMwNDlcdTMwNGFcdTMwNGJcdTMwNGNcdTMwNGRcdTMwNGVcdTMwNGZcdTMwNTBcdTMwNTFcdTMwNTJcdTMwNTNcdTMwNTRcdTMwNTVcdTMwNTZcdTMw''@;'; put 'put ''NTdcdTMwNThcdTMwNTlcdTMwNWFcdTMwNWJcdTMwNWNcdTMwNWRcdTMwNWVcdTMwNWZcdTMwNjBcdTMwNjFcdTMwNjJcdTMwNjNcdTMwNjRcdTMwNjVcdTMwNjZcdTMwNjdcdTMwNjhcdTMwNjlcdTMwNmFcdTMwNmJcdTMwNmNcdTMwNmRcdTMwNmVcdTMwNmZcdTMwNzBcdTMwNzFcdTMwNzJc''@;'; put 'put ''dTMwNzNcdTMwNzRcdTMwNzVcdTMwNzZcdTMwNzdcdTMwNzhcdTMwNzlcdTMwN2FcdTMwN2JcdTMwN2NcdTMwN2RcdTMwN2VcdTMwN2ZcdTMwODBcdTMwODFcdTMwODJcdTMwODNcdTMwODRcdTMwODVcdTMwODZcdTMwODdcdTMwODhcdTMwODlcdTMwOGFcdTMwOGJcdTMwOGNcdTMwOGRcdTMw''@;'; put 'put ''OGVcdTMwOGZcdTMwOTBcdTMwOTFcdTMwOTJcdTMwOTNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNzBdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE3MF1bZ10uY2hhckNv''@;'; put 'put ''ZGVBdCgwKSYmKElbX1sxNzBdW2ddXT00MzUyMCtnLHlbNDM1MjArZ109X1sxNzBdW2ddKTtmb3IoX1sxNzFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNjOTRcdWNjOTVcdWNjOTZcdWNjOTdcdWNjOWFcdWNjOWJcdWNj''@;'; put 'put ''OWRcdWNjOWVcdWNjOWZcdWNjYTFcdWNjYTJcdWNjYTNcdWNjYTRcdWNjYTVcdWNjYTZcdWNjYTdcdWNjYWFcdWNjYWVcdWNjYWZcdWNjYjBcdWNjYjFcdWNjYjJcdWNjYjNcdWNjYjZcdWNjYjdcdWNjYjlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNjYmFcdWNjYmJc''@;'; put 'put ''dWNjYmRcdWNjYmVcdWNjYmZcdWNjYzBcdWNjYzFcdWNjYzJcdWNjYzNcdWNjYzZcdWNjYzhcdWNjY2FcdWNjY2JcdWNjY2NcdWNjY2RcdWNjY2VcdWNjY2ZcdWNjZDFcdWNjZDJcdWNjZDNcdWNjZDVcdWNjZDZcdWNjZDdcdWNjZDhcdWNjZDlcdWNjZGFcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWNjZGJcdWNjZGNcdWNjZGRcdWNjZGVcdWNjZGZcdWNjZTBcdWNjZTFcdWNjZTJcdWNjZTNcdWNjZTVcdWNjZTZcdWNjZTdcdWNjZThcdWNjZTlcdWNjZWFcdWNjZWJcdWNjZWRcdWNjZWVcdWNjZWZcdWNjZjFcdWNjZjJcdWNjZjNcdWNjZjRcdWNjZjVcdWNjZjZc''@;'; put 'put ''dWNjZjdcdWNjZjhcdWNjZjlcdWNjZmFcdWNjZmJcdWNjZmNcdWNjZmRcdTMwYTFcdTMwYTJcdTMwYTNcdTMwYTRcdTMwYTVcdTMwYTZcdTMwYTdcdTMwYThcdTMwYTlcdTMwYWFcdTMwYWJcdTMwYWNcdTMwYWRcdTMwYWVcdTMwYWZcdTMwYjBcdTMwYjFcdTMwYjJcdTMwYjNcdTMwYjRcdTMw''@;'; put 'put ''YjVcdTMwYjZcdTMwYjdcdTMwYjhcdTMwYjlcdTMwYmFcdTMwYmJcdTMwYmNcdTMwYmRcdTMwYmVcdTMwYmZcdTMwYzBcdTMwYzFcdTMwYzJcdTMwYzNcdTMwYzRcdTMwYzVcdTMwYzZcdTMwYzdcdTMwYzhcdTMwYzlcdTMwY2FcdTMwY2JcdTMwY2NcdTMwY2RcdTMwY2VcdTMwY2ZcdTMwZDBc''@;'; put 'put ''dTMwZDFcdTMwZDJcdTMwZDNcdTMwZDRcdTMwZDVcdTMwZDZcdTMwZDdcdTMwZDhcdTMwZDlcdTMwZGFcdTMwZGJcdTMwZGNcdTMwZGRcdTMwZGVcdTMwZGZcdTMwZTBcdTMwZTFcdTMwZTJcdTMwZTNcdTMwZTRcdTMwZTVcdTMwZTZcdTMwZTdcdTMwZThcdTMwZTlcdTMwZWFcdTMwZWJcdTMw''@;'; put 'put ''ZWNcdTMwZWRcdTMwZWVcdTMwZWZcdTMwZjBcdTMwZjFcdTMwZjJcdTMwZjNcdTMwZjRcdTMwZjVcdTMwZjZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNzFdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE3''@;'; put 'put ''MV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNzFdW2ddXT00Mzc3NitnLHlbNDM3NzYrZ109X1sxNzFdW2ddKTtmb3IoX1sxNzJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNjZmVcdWNjZmZcdWNkMDBcdWNkMDJcdWNk''@;'; put 'put ''MDNcdWNkMDRcdWNkMDVcdWNkMDZcdWNkMDdcdWNkMGFcdWNkMGJcdWNkMGRcdWNkMGVcdWNkMGZcdWNkMTFcdWNkMTJcdWNkMTNcdWNkMTRcdWNkMTVcdWNkMTZcdWNkMTdcdWNkMWFcdWNkMWNcdWNkMWVcdWNkMWZcdWNkMjBcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWNkMjFcdWNkMjJcdWNkMjNcdWNkMjVcdWNkMjZcdWNkMjdcdWNkMjlcdWNkMmFcdWNkMmJcdWNkMmRcdWNkMmVcdWNkMmZcdWNkMzBcdWNkMzFcdWNkMzJcdWNkMzNcdWNkMzRcdWNkMzVcdWNkMzZcdWNkMzdcdWNkMzhcdWNkM2FcdWNkM2JcdWNkM2NcdWNkM2RcdWNkM2VcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNkM2ZcdWNkNDBcdWNkNDFcdWNkNDJcdWNkNDNcdWNkNDRcdWNkNDVcdWNkNDZcdWNkNDdcdWNkNDhcdWNkNDlcdWNkNGFcdWNkNGJcdWNkNGNcdWNkNGRcdWNkNGVcdWNkNGZcdWNkNTBcdWNkNTFcdWNkNTJcdWNkNTNcdWNkNTRcdWNkNTVc''@;'; put 'put ''dWNkNTZcdWNkNTdcdWNkNThcdWNkNTlcdWNkNWFcdWNkNWJcdWNkNWRcdWNkNWVcdWNkNWZcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0MTRcdTA0MTVcdTA0MDFcdTA0MTZcdTA0MTdcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MjBcdTA0''@;'; put 'put ''MjFcdTA0MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0MjhcdTA0MjlcdTA0MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0MmVcdTA0MmZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdTA0MzBcdTA0MzFcdTA0MzJcdTA0MzNcdTA0MzRcdTA0MzVcdTA0NTFcdTA0MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0M2ZcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0NDRcdTA0NDVcdTA0NDZcdTA0NDdcdTA0''@;'; put 'put ''NDhcdTA0NDlcdTA0NGFcdTA0NGJcdTA0NGNcdTA0NGRcdTA0NGVcdTA0NGZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNzJdLmxlbmd0aDsrK2cp''@;'; put 'put ''NjU1MzMhPT1fWzE3Ml1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNzJdW2ddXT00NDAzMitnLHlbNDQwMzIrZ109X1sxNzJdW2ddKTtmb3IoX1sxNzNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNkNjFcdWNkNjJcdWNk''@;'; put 'put ''NjNcdWNkNjVcdWNkNjZcdWNkNjdcdWNkNjhcdWNkNjlcdWNkNmFcdWNkNmJcdWNkNmVcdWNkNzBcdWNkNzJcdWNkNzNcdWNkNzRcdWNkNzVcdWNkNzZcdWNkNzdcdWNkNzlcdWNkN2FcdWNkN2JcdWNkN2NcdWNkN2RcdWNkN2VcdWNkN2ZcdWNkODBcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWNkODFcdWNkODJcdWNkODNcdWNkODRcdWNkODVcdWNkODZcdWNkODdcdWNkODlcdWNkOGFcdWNkOGJcdWNkOGNcdWNkOGRcdWNkOGVcdWNkOGZcdWNkOTBcdWNkOTFcdWNkOTJcdWNkOTNcdWNkOTZcdWNkOTdcdWNkOTlcdWNkOWFcdWNkOWJcdWNkOWRcdWNkOWVcdWNk''@;'; put 'put ''OWZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNkYTBcdWNkYTFcdWNkYTJcdWNkYTNcdWNkYTZcdWNkYThcdWNkYWFcdWNkYWJcdWNkYWNcdWNkYWRcdWNkYWVcdWNkYWZcdWNkYjFcdWNkYjJcdWNkYjNcdWNkYjRcdWNkYjVcdWNkYjZcdWNkYjdcdWNkYjhcdWNkYjlc''@;'; put 'put ''dWNkYmFcdWNkYmJcdWNkYmNcdWNkYmRcdWNkYmVcdWNkYmZcdWNkYzBcdWNkYzFcdWNkYzJcdWNkYzNcdWNkYzVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNzNd''@;'; put 'put ''Lmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE3M11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNzNdW2ddXT00NDI4OCtnLHlbNDQyODgrZ109X1sxNzNdW2ddKTtmb3IoX1sxNzRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNk''@;'; put 'put ''YzZcdWNkYzdcdWNkYzhcdWNkYzlcdWNkY2FcdWNkY2JcdWNkY2RcdWNkY2VcdWNkY2ZcdWNkZDFcdWNkZDJcdWNkZDNcdWNkZDRcdWNkZDVcdWNkZDZcdWNkZDdcdWNkZDhcdWNkZDlcdWNkZGFcdWNkZGJcdWNkZGNcdWNkZGRcdWNkZGVcdWNkZGZcdWNkZTBcdWNkZTFcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNkZTJcdWNkZTNcdWNkZTRcdWNkZTVcdWNkZTZcdWNkZTdcdWNkZTlcdWNkZWFcdWNkZWJcdWNkZWRcdWNkZWVcdWNkZWZcdWNkZjFcdWNkZjJcdWNkZjNcdWNkZjRcdWNkZjVcdWNkZjZcdWNkZjdcdWNkZmFcdWNkZmNcdWNkZmVcdWNkZmZcdWNl''@;'; put 'put ''MDBcdWNlMDFcdWNlMDJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNlMDNcdWNlMDVcdWNlMDZcdWNlMDdcdWNlMDlcdWNlMGFcdWNlMGJcdWNlMGRcdWNlMGVcdWNlMGZcdWNlMTBcdWNlMTFcdWNlMTJcdWNlMTNcdWNlMTVcdWNlMTZcdWNlMTdcdWNlMThcdWNlMWFc''@;'; put 'put ''dWNlMWJcdWNlMWNcdWNlMWRcdWNlMWVcdWNlMWZcdWNlMjJcdWNlMjNcdWNlMjVcdWNlMjZcdWNlMjdcdWNlMjlcdWNlMmFcdWNlMmJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxn''@;'; put 'put ''PTA7ZyE9X1sxNzRdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE3NF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNzRdW2ddXT00NDU0NCtnLHlbNDQ1NDQrZ109X1sxNzRdW2ddKTtmb3IoX1sxNzVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWNlMmNcdWNlMmRcdWNlMmVcdWNlMmZcdWNlMzJcdWNlMzRcdWNlMzZcdWNlMzdcdWNlMzhcdWNlMzlcdWNlM2FcdWNlM2JcdWNlM2NcdWNlM2RcdWNlM2VcdWNlM2ZcdWNlNDBcdWNlNDFcdWNlNDJcdWNlNDNcdWNlNDRcdWNlNDVcdWNlNDZcdWNlNDdcdWNlNDhcdWNlNDlc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNlNGFcdWNlNGJcdWNlNGNcdWNlNGRcdWNlNGVcdWNlNGZcdWNlNTBcdWNlNTFcdWNlNTJcdWNlNTNcdWNlNTRcdWNlNTVcdWNlNTZcdWNlNTdcdWNlNWFcdWNlNWJcdWNlNWRcdWNlNWVcdWNlNjJcdWNlNjNcdWNlNjRcdWNl''@;'; put 'put ''NjVcdWNlNjZcdWNlNjdcdWNlNmFcdWNlNmNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNlNmVcdWNlNmZcdWNlNzBcdWNlNzFcdWNlNzJcdWNlNzNcdWNlNzZcdWNlNzdcdWNlNzlcdWNlN2FcdWNlN2JcdWNlN2RcdWNlN2VcdWNlN2ZcdWNlODBcdWNlODFcdWNlODJc''@;'; put 'put ''dWNlODNcdWNlODZcdWNlODhcdWNlOGFcdWNlOGJcdWNlOGNcdWNlOGRcdWNlOGVcdWNlOGZcdWNlOTJcdWNlOTNcdWNlOTVcdWNlOTZcdWNlOTdcdWNlOTlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQi''@;'; put 'put ''LnNwbGl0KCIiKSxnPTA7ZyE9X1sxNzVdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE3NV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNzVdW2ddXT00NDgwMCtnLHlbNDQ4MDArZ109X1sxNzVdW2ddKTtmb3IoX1sxNzZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNlOWFcdWNlOWJcdWNlOWNcdWNlOWRcdWNlOWVcdWNlOWZcdWNlYTJcdWNlYTZcdWNlYTdcdWNlYThcdWNlYTlcdWNlYWFcdWNlYWJcdWNlYWVcdWNlYWZcdWNlYjBcdWNlYjFcdWNlYjJcdWNlYjNcdWNlYjRcdWNlYjVcdWNlYjZcdWNlYjdcdWNlYjhc''@;'; put 'put ''dWNlYjlcdWNlYmFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNlYmJcdWNlYmNcdWNlYmRcdWNlYmVcdWNlYmZcdWNlYzBcdWNlYzJcdWNlYzNcdWNlYzRcdWNlYzVcdWNlYzZcdWNlYzdcdWNlYzhcdWNlYzlcdWNlY2FcdWNlY2JcdWNlY2NcdWNlY2RcdWNlY2VcdWNl''@;'; put 'put ''Y2ZcdWNlZDBcdWNlZDFcdWNlZDJcdWNlZDNcdWNlZDRcdWNlZDVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNlZDZcdWNlZDdcdWNlZDhcdWNlZDlcdWNlZGFcdWNlZGJcdWNlZGNcdWNlZGRcdWNlZGVcdWNlZGZcdWNlZTBcdWNlZTFcdWNlZTJcdWNlZTNcdWNlZTZc''@;'; put 'put ''dWNlZTdcdWNlZTlcdWNlZWFcdWNlZWRcdWNlZWVcdWNlZWZcdWNlZjBcdWNlZjFcdWNlZjJcdWNlZjNcdWNlZjZcdWNlZmFcdWNlZmJcdWNlZmNcdWNlZmRcdWNlZmVcdWNlZmZcdWFjMDBcdWFjMDFcdWFjMDRcdWFjMDdcdWFjMDhcdWFjMDlcdWFjMGFcdWFjMTBcdWFjMTFcdWFjMTJcdWFj''@;'; put 'put ''MTNcdWFjMTRcdWFjMTVcdWFjMTZcdWFjMTdcdWFjMTlcdWFjMWFcdWFjMWJcdWFjMWNcdWFjMWRcdWFjMjBcdWFjMjRcdWFjMmNcdWFjMmRcdWFjMmZcdWFjMzBcdWFjMzFcdWFjMzhcdWFjMzlcdWFjM2NcdWFjNDBcdWFjNGJcdWFjNGRcdWFjNTRcdWFjNThcdWFjNWNcdWFjNzBcdWFjNzFc''@;'; put 'put ''dWFjNzRcdWFjNzdcdWFjNzhcdWFjN2FcdWFjODBcdWFjODFcdWFjODNcdWFjODRcdWFjODVcdWFjODZcdWFjODlcdWFjOGFcdWFjOGJcdWFjOGNcdWFjOTBcdWFjOTRcdWFjOWNcdWFjOWRcdWFjOWZcdWFjYTBcdWFjYTFcdWFjYThcdWFjYTlcdWFjYWFcdWFjYWNcdWFjYWZcdWFjYjBcdWFj''@;'; put 'put ''YjhcdWFjYjlcdWFjYmJcdWFjYmNcdWFjYmRcdWFjYzFcdWFjYzRcdWFjYzhcdWFjY2NcdWFjZDVcdWFjZDdcdWFjZTBcdWFjZTFcdWFjZTRcdWFjZTdcdWFjZThcdWFjZWFcdWFjZWNcdWFjZWZcdWFjZjBcdWFjZjFcdWFjZjNcdWFjZjVcdWFjZjZcdWFjZmNcdWFjZmRcdWFkMDBcdWFkMDRc''@;'; put 'put ''dWFkMDZcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNzZdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE3Nl1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNzZdW2ddXT00NTA1NitnLHlbNDUwNTYrZ109X1sxNzZdW2ddKTtmb3IoX1sxNzddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNmMDJcdWNmMDNcdWNmMDVcdWNmMDZcdWNmMDdcdWNmMDlcdWNmMGFcdWNmMGJcdWNmMGNcdWNmMGRcdWNmMGVcdWNmMGZcdWNmMTJcdWNmMTRcdWNmMTZcdWNmMTdcdWNmMThcdWNmMTlcdWNmMWFcdWNmMWJcdWNmMWRcdWNmMWVc''@;'; put 'put ''dWNmMWZcdWNmMjFcdWNmMjJcdWNmMjNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNmMjVcdWNmMjZcdWNmMjdcdWNmMjhcdWNmMjlcdWNmMmFcdWNmMmJcdWNmMmVcdWNmMzJcdWNmMzNcdWNmMzRcdWNmMzVcdWNmMzZcdWNmMzdcdWNmMzlcdWNmM2FcdWNmM2JcdWNm''@;'; put 'put ''M2NcdWNmM2RcdWNmM2VcdWNmM2ZcdWNmNDBcdWNmNDFcdWNmNDJcdWNmNDNcdWNmNDRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNmNDVcdWNmNDZcdWNmNDdcdWNmNDhcdWNmNDlcdWNmNGFcdWNmNGJcdWNmNGNcdWNmNGRcdWNmNGVcdWNmNGZcdWNmNTBcdWNmNTFc''@;'; put 'put ''dWNmNTJcdWNmNTNcdWNmNTZcdWNmNTdcdWNmNTlcdWNmNWFcdWNmNWJcdWNmNWRcdWNmNWVcdWNmNWZcdWNmNjBcdWNmNjFcdWNmNjJcdWNmNjNcdWNmNjZcdWNmNjhcdWNmNmFcdWNmNmJcdWNmNmNcdWFkMGNcdWFkMGRcdWFkMGZcdWFkMTFcdWFkMThcdWFkMWNcdWFkMjBcdWFkMjlcdWFk''@;'; put 'put ''MmNcdWFkMmRcdWFkMzRcdWFkMzVcdWFkMzhcdWFkM2NcdWFkNDRcdWFkNDVcdWFkNDdcdWFkNDlcdWFkNTBcdWFkNTRcdWFkNThcdWFkNjFcdWFkNjNcdWFkNmNcdWFkNmRcdWFkNzBcdWFkNzNcdWFkNzRcdWFkNzVcdWFkNzZcdWFkN2JcdWFkN2NcdWFkN2RcdWFkN2ZcdWFkODFcdWFkODJc''@;'; put 'put ''dWFkODhcdWFkODlcdWFkOGNcdWFkOTBcdWFkOWNcdWFkOWRcdWFkYTRcdWFkYjdcdWFkYzBcdWFkYzFcdWFkYzRcdWFkYzhcdWFkZDBcdWFkZDFcdWFkZDNcdWFkZGNcdWFkZTBcdWFkZTRcdWFkZjhcdWFkZjlcdWFkZmNcdWFkZmZcdWFlMDBcdWFlMDFcdWFlMDhcdWFlMDlcdWFlMGJcdWFl''@;'; put 'put ''MGRcdWFlMTRcdWFlMzBcdWFlMzFcdWFlMzRcdWFlMzdcdWFlMzhcdWFlM2FcdWFlNDBcdWFlNDFcdWFlNDNcdWFlNDVcdWFlNDZcdWFlNGFcdWFlNGNcdWFlNGRcdWFlNGVcdWFlNTBcdWFlNTRcdWFlNTZcdWFlNWNcdWFlNWRcdWFlNWZcdWFlNjBcdWFlNjFcdWFlNjVcdWFlNjhcdWFlNjlc''@;'; put 'put ''dWFlNmNcdWFlNzBcdWFlNzhcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNzddLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE3N11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNzddW2ddXT00NTMxMitnLHlbNDUzMTIrZ109X1sxNzddW2ddKTtmb3IoX1sxNzhdPSJcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNmNmRcdWNmNmVcdWNmNmZcdWNmNzJcdWNmNzNcdWNmNzVcdWNmNzZcdWNmNzdcdWNmNzlcdWNmN2FcdWNmN2JcdWNmN2NcdWNmN2RcdWNmN2VcdWNmN2ZcdWNmODFcdWNmODJcdWNmODNcdWNmODRcdWNmODZc''@;'; put 'put ''dWNmODdcdWNmODhcdWNmODlcdWNmOGFcdWNmOGJcdWNmOGRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNmOGVcdWNmOGZcdWNmOTBcdWNmOTFcdWNmOTJcdWNmOTNcdWNmOTRcdWNmOTVcdWNmOTZcdWNmOTdcdWNmOThcdWNmOTlcdWNmOWFcdWNmOWJcdWNmOWNcdWNm''@;'; put 'put ''OWRcdWNmOWVcdWNmOWZcdWNmYTBcdWNmYTJcdWNmYTNcdWNmYTRcdWNmYTVcdWNmYTZcdWNmYTdcdWNmYTlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNmYWFcdWNmYWJcdWNmYWNcdWNmYWRcdWNmYWVcdWNmYWZcdWNmYjFcdWNmYjJcdWNmYjNcdWNmYjRcdWNmYjVc''@;'; put 'put ''dWNmYjZcdWNmYjdcdWNmYjhcdWNmYjlcdWNmYmFcdWNmYmJcdWNmYmNcdWNmYmRcdWNmYmVcdWNmYmZcdWNmYzBcdWNmYzFcdWNmYzJcdWNmYzNcdWNmYzVcdWNmYzZcdWNmYzdcdWNmYzhcdWNmYzlcdWNmY2FcdWNmY2JcdWFlNzlcdWFlN2JcdWFlN2NcdWFlN2RcdWFlODRcdWFlODVcdWFl''@;'; put 'put ''OGNcdWFlYmNcdWFlYmRcdWFlYmVcdWFlYzBcdWFlYzRcdWFlY2NcdWFlY2RcdWFlY2ZcdWFlZDBcdWFlZDFcdWFlZDhcdWFlZDlcdWFlZGNcdWFlZThcdWFlZWJcdWFlZWRcdWFlZjRcdWFlZjhcdWFlZmNcdWFmMDdcdWFmMDhcdWFmMGRcdWFmMTBcdWFmMmNcdWFmMmRcdWFmMzBcdWFmMzJc''@;'; put 'put ''dWFmMzRcdWFmM2NcdWFmM2RcdWFmM2ZcdWFmNDFcdWFmNDJcdWFmNDNcdWFmNDhcdWFmNDlcdWFmNTBcdWFmNWNcdWFmNWRcdWFmNjRcdWFmNjVcdWFmNzlcdWFmODBcdWFmODRcdWFmODhcdWFmOTBcdWFmOTFcdWFmOTVcdWFmOWNcdWFmYjhcdWFmYjlcdWFmYmNcdWFmYzBcdWFmYzdcdWFm''@;'; put 'put ''YzhcdWFmYzlcdWFmY2JcdWFmY2RcdWFmY2VcdWFmZDRcdWFmZGNcdWFmZThcdWFmZTlcdWFmZjBcdWFmZjFcdWFmZjRcdWFmZjhcdWIwMDBcdWIwMDFcdWIwMDRcdWIwMGNcdWIwMTBcdWIwMTRcdWIwMWNcdWIwMWRcdWIwMjhcdWIwNDRcdWIwNDVcdWIwNDhcdWIwNGFcdWIwNGNcdWIwNGVc''@;'; put 'put ''dWIwNTNcdWIwNTRcdWIwNTVcdWIwNTdcdWIwNTlcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNzhdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE3OF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNzhdW2ddXT00NTU2OCtnLHlbNDU1NjgrZ109X1sxNzhdW2ddKTtmb3IoX1sxNzldPSJcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNmY2NcdWNmY2RcdWNmY2VcdWNmY2ZcdWNmZDBcdWNmZDFcdWNmZDJcdWNmZDNcdWNmZDRcdWNmZDVcdWNmZDZcdWNmZDdcdWNmZDhcdWNmZDlcdWNmZGFcdWNmZGJcdWNmZGNcdWNmZGRc''@;'; put 'put ''dWNmZGVcdWNmZGZcdWNmZTJcdWNmZTNcdWNmZTVcdWNmZTZcdWNmZTdcdWNmZTlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNmZWFcdWNmZWJcdWNmZWNcdWNmZWRcdWNmZWVcdWNmZWZcdWNmZjJcdWNmZjRcdWNmZjZcdWNmZjdcdWNmZjhcdWNmZjlcdWNmZmFcdWNm''@;'; put 'put ''ZmJcdWNmZmRcdWNmZmVcdWNmZmZcdWQwMDFcdWQwMDJcdWQwMDNcdWQwMDVcdWQwMDZcdWQwMDdcdWQwMDhcdWQwMDlcdWQwMGFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQwMGJcdWQwMGNcdWQwMGRcdWQwMGVcdWQwMGZcdWQwMTBcdWQwMTJcdWQwMTNcdWQwMTRc''@;'; put 'put ''dWQwMTVcdWQwMTZcdWQwMTdcdWQwMTlcdWQwMWFcdWQwMWJcdWQwMWNcdWQwMWRcdWQwMWVcdWQwMWZcdWQwMjBcdWQwMjFcdWQwMjJcdWQwMjNcdWQwMjRcdWQwMjVcdWQwMjZcdWQwMjdcdWQwMjhcdWQwMjlcdWQwMmFcdWQwMmJcdWQwMmNcdWIwNWRcdWIwN2NcdWIwN2RcdWIwODBcdWIw''@;'; put 'put ''ODRcdWIwOGNcdWIwOGRcdWIwOGZcdWIwOTFcdWIwOThcdWIwOTlcdWIwOWFcdWIwOWNcdWIwOWZcdWIwYTBcdWIwYTFcdWIwYTJcdWIwYThcdWIwYTlcdWIwYWJcdWIwYWNcdWIwYWRcdWIwYWVcdWIwYWZcdWIwYjFcdWIwYjNcdWIwYjRcdWIwYjVcdWIwYjhcdWIwYmNcdWIwYzRcdWIwYzVc''@;'; put 'put ''dWIwYzdcdWIwYzhcdWIwYzlcdWIwZDBcdWIwZDFcdWIwZDRcdWIwZDhcdWIwZTBcdWIwZTVcdWIxMDhcdWIxMDlcdWIxMGJcdWIxMGNcdWIxMTBcdWIxMTJcdWIxMTNcdWIxMThcdWIxMTlcdWIxMWJcdWIxMWNcdWIxMWRcdWIxMjNcdWIxMjRcdWIxMjVcdWIxMjhcdWIxMmNcdWIxMzRcdWIx''@;'; put 'put ''MzVcdWIxMzdcdWIxMzhcdWIxMzlcdWIxNDBcdWIxNDFcdWIxNDRcdWIxNDhcdWIxNTBcdWIxNTFcdWIxNTRcdWIxNTVcdWIxNThcdWIxNWNcdWIxNjBcdWIxNzhcdWIxNzlcdWIxN2NcdWIxODBcdWIxODJcdWIxODhcdWIxODlcdWIxOGJcdWIxOGRcdWIxOTJcdWIxOTNcdWIxOTRcdWIxOThc''@;'; put 'put ''dWIxOWNcdWIxYThcdWIxY2NcdWIxZDBcdWIxZDRcdWIxZGNcdWIxZGRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNzldLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE3OV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNzldW2ddXT00NTgyNCtnLHlbNDU4MjQrZ109X1sxNzldW2ddKTtmb3Io''@;'; put 'put ''X1sxODBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQwMmVcdWQwMmZcdWQwMzBcdWQwMzFcdWQwMzJcdWQwMzNcdWQwMzZcdWQwMzdcdWQwMzlcdWQwM2FcdWQwM2JcdWQwM2RcdWQwM2VcdWQwM2ZcdWQwNDBcdWQwNDFc''@;'; put 'put ''dWQwNDJcdWQwNDNcdWQwNDZcdWQwNDhcdWQwNGFcdWQwNGJcdWQwNGNcdWQwNGRcdWQwNGVcdWQwNGZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQwNTFcdWQwNTJcdWQwNTNcdWQwNTVcdWQwNTZcdWQwNTdcdWQwNTlcdWQwNWFcdWQwNWJcdWQwNWNcdWQwNWRcdWQw''@;'; put 'put ''NWVcdWQwNWZcdWQwNjFcdWQwNjJcdWQwNjNcdWQwNjRcdWQwNjVcdWQwNjZcdWQwNjdcdWQwNjhcdWQwNjlcdWQwNmFcdWQwNmJcdWQwNmVcdWQwNmZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQwNzFcdWQwNzJcdWQwNzNcdWQwNzVcdWQwNzZcdWQwNzdcdWQwNzhc''@;'; put 'put ''dWQwNzlcdWQwN2FcdWQwN2JcdWQwN2VcdWQwN2ZcdWQwODBcdWQwODJcdWQwODNcdWQwODRcdWQwODVcdWQwODZcdWQwODdcdWQwODhcdWQwODlcdWQwOGFcdWQwOGJcdWQwOGNcdWQwOGRcdWQwOGVcdWQwOGZcdWQwOTBcdWQwOTFcdWQwOTJcdWQwOTNcdWQwOTRcdWIxZGZcdWIxZThcdWIx''@;'; put 'put ''ZTlcdWIxZWNcdWIxZjBcdWIxZjlcdWIxZmJcdWIxZmRcdWIyMDRcdWIyMDVcdWIyMDhcdWIyMGJcdWIyMGNcdWIyMTRcdWIyMTVcdWIyMTdcdWIyMTlcdWIyMjBcdWIyMzRcdWIyM2NcdWIyNThcdWIyNWNcdWIyNjBcdWIyNjhcdWIyNjlcdWIyNzRcdWIyNzVcdWIyN2NcdWIyODRcdWIyODVc''@;'; put 'put ''dWIyODlcdWIyOTBcdWIyOTFcdWIyOTRcdWIyOThcdWIyOTlcdWIyOWFcdWIyYTBcdWIyYTFcdWIyYTNcdWIyYTVcdWIyYTZcdWIyYWFcdWIyYWNcdWIyYjBcdWIyYjRcdWIyYzhcdWIyYzlcdWIyY2NcdWIyZDBcdWIyZDJcdWIyZDhcdWIyZDlcdWIyZGJcdWIyZGRcdWIyZTJcdWIyZTRcdWIy''@;'; put 'put ''ZTVcdWIyZTZcdWIyZThcdWIyZWJcdWIyZWNcdWIyZWRcdWIyZWVcdWIyZWZcdWIyZjNcdWIyZjRcdWIyZjVcdWIyZjdcdWIyZjhcdWIyZjlcdWIyZmFcdWIyZmJcdWIyZmZcdWIzMDBcdWIzMDFcdWIzMDRcdWIzMDhcdWIzMTBcdWIzMTFcdWIzMTNcdWIzMTRcdWIzMTVcdWIzMWNcdWIzNTRc''@;'; put 'put ''dWIzNTVcdWIzNTZcdWIzNThcdWIzNWJcdWIzNWNcdWIzNWVcdWIzNWZcdWIzNjRcdWIzNjVcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxODBdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE4MF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxODBdW2ddXT00NjA4MCtnLHlbNDYwODArZ109X1sx''@;'; put 'put ''ODBdW2ddKTtmb3IoX1sxODFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQwOTVcdWQwOTZcdWQwOTdcdWQwOThcdWQwOTlcdWQwOWFcdWQwOWJcdWQwOWNcdWQwOWRcdWQwOWVcdWQwOWZcdWQwYTBcdWQwYTFcdWQwYTJc''@;'; put 'put ''dWQwYTNcdWQwYTZcdWQwYTdcdWQwYTlcdWQwYWFcdWQwYWJcdWQwYWRcdWQwYWVcdWQwYWZcdWQwYjBcdWQwYjFcdWQwYjJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQwYjNcdWQwYjZcdWQwYjhcdWQwYmFcdWQwYmJcdWQwYmNcdWQwYmRcdWQwYmVcdWQwYmZcdWQw''@;'; put 'put ''YzJcdWQwYzNcdWQwYzVcdWQwYzZcdWQwYzdcdWQwY2FcdWQwY2JcdWQwY2NcdWQwY2RcdWQwY2VcdWQwY2ZcdWQwZDJcdWQwZDZcdWQwZDdcdWQwZDhcdWQwZDlcdWQwZGFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQwZGJcdWQwZGVcdWQwZGZcdWQwZTFcdWQwZTJc''@;'; put 'put ''dWQwZTNcdWQwZTVcdWQwZTZcdWQwZTdcdWQwZThcdWQwZTlcdWQwZWFcdWQwZWJcdWQwZWVcdWQwZjJcdWQwZjNcdWQwZjRcdWQwZjVcdWQwZjZcdWQwZjdcdWQwZjlcdWQwZmFcdWQwZmJcdWQwZmNcdWQwZmRcdWQwZmVcdWQwZmZcdWQxMDBcdWQxMDFcdWQxMDJcdWQxMDNcdWQxMDRcdWIz''@;'; put 'put ''NjdcdWIzNjlcdWIzNmJcdWIzNmVcdWIzNzBcdWIzNzFcdWIzNzRcdWIzNzhcdWIzODBcdWIzODFcdWIzODNcdWIzODRcdWIzODVcdWIzOGNcdWIzOTBcdWIzOTRcdWIzYTBcdWIzYTFcdWIzYThcdWIzYWNcdWIzYzRcdWIzYzVcdWIzYzhcdWIzY2JcdWIzY2NcdWIzY2VcdWIzZDBcdWIzZDRc''@;'; put 'put ''dWIzZDVcdWIzZDdcdWIzZDlcdWIzZGJcdWIzZGRcdWIzZTBcdWIzZTRcdWIzZThcdWIzZmNcdWI0MTBcdWI0MThcdWI0MWNcdWI0MjBcdWI0MjhcdWI0MjlcdWI0MmJcdWI0MzRcdWI0NTBcdWI0NTFcdWI0NTRcdWI0NThcdWI0NjBcdWI0NjFcdWI0NjNcdWI0NjVcdWI0NmNcdWI0ODBcdWI0''@;'; put 'put ''ODhcdWI0OWRcdWI0YTRcdWI0YThcdWI0YWNcdWI0YjVcdWI0YjdcdWI0YjlcdWI0YzBcdWI0YzRcdWI0YzhcdWI0ZDBcdWI0ZDVcdWI0ZGNcdWI0ZGRcdWI0ZTBcdWI0ZTNcdWI0ZTRcdWI0ZTZcdWI0ZWNcdWI0ZWRcdWI0ZWZcdWI0ZjFcdWI0ZjhcdWI1MTRcdWI1MTVcdWI1MThcdWI1MWJc''@;'; put 'put ''dWI1MWNcdWI1MjRcdWI1MjVcdWI1MjdcdWI1MjhcdWI1MjlcdWI1MmFcdWI1MzBcdWI1MzFcdWI1MzRcdWI1MzhcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxODFdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE4MV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxODFdW2ddXT00NjMzNitnLHlb''@;'; put 'put ''NDYzMzYrZ109X1sxODFdW2ddKTtmb3IoX1sxODJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQxMDVcdWQxMDZcdWQxMDdcdWQxMDhcdWQxMDlcdWQxMGFcdWQxMGJcdWQxMGNcdWQxMGVcdWQxMGZcdWQxMTBcdWQxMTFc''@;'; put 'put ''dWQxMTJcdWQxMTNcdWQxMTRcdWQxMTVcdWQxMTZcdWQxMTdcdWQxMThcdWQxMTlcdWQxMWFcdWQxMWJcdWQxMWNcdWQxMWRcdWQxMWVcdWQxMWZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQxMjBcdWQxMjFcdWQxMjJcdWQxMjNcdWQxMjRcdWQxMjVcdWQxMjZcdWQx''@;'; put 'put ''MjdcdWQxMjhcdWQxMjlcdWQxMmFcdWQxMmJcdWQxMmNcdWQxMmRcdWQxMmVcdWQxMmZcdWQxMzJcdWQxMzNcdWQxMzVcdWQxMzZcdWQxMzdcdWQxMzlcdWQxM2JcdWQxM2NcdWQxM2RcdWQxM2VcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQxM2ZcdWQxNDJcdWQxNDZc''@;'; put 'put ''dWQxNDdcdWQxNDhcdWQxNDlcdWQxNGFcdWQxNGJcdWQxNGVcdWQxNGZcdWQxNTFcdWQxNTJcdWQxNTNcdWQxNTVcdWQxNTZcdWQxNTdcdWQxNThcdWQxNTlcdWQxNWFcdWQxNWJcdWQxNWVcdWQxNjBcdWQxNjJcdWQxNjNcdWQxNjRcdWQxNjVcdWQxNjZcdWQxNjdcdWQxNjlcdWQxNmFcdWQx''@;'; put 'put ''NmJcdWQxNmRcdWI1NDBcdWI1NDFcdWI1NDNcdWI1NDRcdWI1NDVcdWI1NGJcdWI1NGNcdWI1NGRcdWI1NTBcdWI1NTRcdWI1NWNcdWI1NWRcdWI1NWZcdWI1NjBcdWI1NjFcdWI1YTBcdWI1YTFcdWI1YTRcdWI1YThcdWI1YWFcdWI1YWJcdWI1YjBcdWI1YjFcdWI1YjNcdWI1YjRcdWI1YjVc''@;'; put 'put ''dWI1YmJcdWI1YmNcdWI1YmRcdWI1YzBcdWI1YzRcdWI1Y2NcdWI1Y2RcdWI1Y2ZcdWI1ZDBcdWI1ZDFcdWI1ZDhcdWI1ZWNcdWI2MTBcdWI2MTFcdWI2MTRcdWI2MThcdWI2MjVcdWI2MmNcdWI2MzRcdWI2NDhcdWI2NjRcdWI2NjhcdWI2OWNcdWI2OWRcdWI2YTBcdWI2YTRcdWI2YWJcdWI2''@;'; put 'put ''YWNcdWI2YjFcdWI2ZDRcdWI2ZjBcdWI2ZjRcdWI2ZjhcdWI3MDBcdWI3MDFcdWI3MDVcdWI3MjhcdWI3MjlcdWI3MmNcdWI3MmZcdWI3MzBcdWI3MzhcdWI3MzlcdWI3M2JcdWI3NDRcdWI3NDhcdWI3NGNcdWI3NTRcdWI3NTVcdWI3NjBcdWI3NjRcdWI3NjhcdWI3NzBcdWI3NzFcdWI3NzNc''@;'; put 'put ''dWI3NzVcdWI3N2NcdWI3N2RcdWI3ODBcdWI3ODRcdWI3OGNcdWI3OGRcdWI3OGZcdWI3OTBcdWI3OTFcdWI3OTJcdWI3OTZcdWI3OTdcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxODJdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE4Ml1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxODJdW2dd''@;'; put 'put ''XT00NjU5MitnLHlbNDY1OTIrZ109X1sxODJdW2ddKTtmb3IoX1sxODNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQxNmVcdWQxNmZcdWQxNzBcdWQxNzFcdWQxNzJcdWQxNzNcdWQxNzRcdWQxNzVcdWQxNzZcdWQxNzdc''@;'; put 'put ''dWQxNzhcdWQxNzlcdWQxN2FcdWQxN2JcdWQxN2RcdWQxN2VcdWQxN2ZcdWQxODBcdWQxODFcdWQxODJcdWQxODNcdWQxODVcdWQxODZcdWQxODdcdWQxODlcdWQxOGFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQxOGJcdWQxOGNcdWQxOGRcdWQxOGVcdWQxOGZcdWQx''@;'; put 'put ''OTBcdWQxOTFcdWQxOTJcdWQxOTNcdWQxOTRcdWQxOTVcdWQxOTZcdWQxOTdcdWQxOThcdWQxOTlcdWQxOWFcdWQxOWJcdWQxOWNcdWQxOWRcdWQxOWVcdWQxOWZcdWQxYTJcdWQxYTNcdWQxYTVcdWQxYTZcdWQxYTdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQxYTlc''@;'; put 'put ''dWQxYWFcdWQxYWJcdWQxYWNcdWQxYWRcdWQxYWVcdWQxYWZcdWQxYjJcdWQxYjRcdWQxYjZcdWQxYjdcdWQxYjhcdWQxYjlcdWQxYmJcdWQxYmRcdWQxYmVcdWQxYmZcdWQxYzFcdWQxYzJcdWQxYzNcdWQxYzRcdWQxYzVcdWQxYzZcdWQxYzdcdWQxYzhcdWQxYzlcdWQxY2FcdWQxY2JcdWQx''@;'; put 'put ''Y2NcdWQxY2RcdWQxY2VcdWQxY2ZcdWI3OThcdWI3OTlcdWI3OWNcdWI3YTBcdWI3YThcdWI3YTlcdWI3YWJcdWI3YWNcdWI3YWRcdWI3YjRcdWI3YjVcdWI3YjhcdWI3YzdcdWI3YzlcdWI3ZWNcdWI3ZWRcdWI3ZjBcdWI3ZjRcdWI3ZmNcdWI3ZmRcdWI3ZmZcdWI4MDBcdWI4MDFcdWI4MDdc''@;'; put 'put ''dWI4MDhcdWI4MDlcdWI4MGNcdWI4MTBcdWI4MThcdWI4MTlcdWI4MWJcdWI4MWRcdWI4MjRcdWI4MjVcdWI4MjhcdWI4MmNcdWI4MzRcdWI4MzVcdWI4MzdcdWI4MzhcdWI4MzlcdWI4NDBcdWI4NDRcdWI4NTFcdWI4NTNcdWI4NWNcdWI4NWRcdWI4NjBcdWI4NjRcdWI4NmNcdWI4NmRcdWI4''@;'; put 'put ''NmZcdWI4NzFcdWI4NzhcdWI4N2NcdWI4OGRcdWI4YThcdWI4YjBcdWI4YjRcdWI4YjhcdWI4YzBcdWI4YzFcdWI4YzNcdWI4YzVcdWI4Y2NcdWI4ZDBcdWI4ZDRcdWI4ZGRcdWI4ZGZcdWI4ZTFcdWI4ZThcdWI4ZTlcdWI4ZWNcdWI4ZjBcdWI4ZjhcdWI4ZjlcdWI4ZmJcdWI4ZmRcdWI5MDRc''@;'; put 'put ''dWI5MThcdWI5MjBcdWI5M2NcdWI5M2RcdWI5NDBcdWI5NDRcdWI5NGNcdWI5NGZcdWI5NTFcdWI5NThcdWI5NTlcdWI5NWNcdWI5NjBcdWI5NjhcdWI5NjlcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxODNdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE4M11bZ10uY2hhckNvZGVBdCgwKSYm''@;'; put 'put ''KElbX1sxODNdW2ddXT00Njg0OCtnLHlbNDY4NDgrZ109X1sxODNdW2ddKTtmb3IoX1sxODRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQxZDBcdWQxZDFcdWQxZDJcdWQxZDNcdWQxZDRcdWQxZDVcdWQxZDZcdWQxZDdc''@;'; put 'put ''dWQxZDlcdWQxZGFcdWQxZGJcdWQxZGNcdWQxZGRcdWQxZGVcdWQxZGZcdWQxZTBcdWQxZTFcdWQxZTJcdWQxZTNcdWQxZTRcdWQxZTVcdWQxZTZcdWQxZTdcdWQxZThcdWQxZTlcdWQxZWFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQxZWJcdWQxZWNcdWQxZWRcdWQx''@;'; put 'put ''ZWVcdWQxZWZcdWQxZjBcdWQxZjFcdWQxZjJcdWQxZjNcdWQxZjVcdWQxZjZcdWQxZjdcdWQxZjlcdWQxZmFcdWQxZmJcdWQxZmNcdWQxZmRcdWQxZmVcdWQxZmZcdWQyMDBcdWQyMDFcdWQyMDJcdWQyMDNcdWQyMDRcdWQyMDVcdWQyMDZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWQyMDhcdWQyMGFcdWQyMGJcdWQyMGNcdWQyMGRcdWQyMGVcdWQyMGZcdWQyMTFcdWQyMTJcdWQyMTNcdWQyMTRcdWQyMTVcdWQyMTZcdWQyMTdcdWQyMThcdWQyMTlcdWQyMWFcdWQyMWJcdWQyMWNcdWQyMWRcdWQyMWVcdWQyMWZcdWQyMjBcdWQyMjFcdWQyMjJcdWQyMjNcdWQy''@;'; put 'put ''MjRcdWQyMjVcdWQyMjZcdWQyMjdcdWQyMjhcdWQyMjlcdWI5NmJcdWI5NmRcdWI5NzRcdWI5NzVcdWI5NzhcdWI5N2NcdWI5ODRcdWI5ODVcdWI5ODdcdWI5ODlcdWI5OGFcdWI5OGRcdWI5OGVcdWI5YWNcdWI5YWRcdWI5YjBcdWI5YjRcdWI5YmNcdWI5YmRcdWI5YmZcdWI5YzFcdWI5Yzhc''@;'; put 'put ''dWI5YzlcdWI5Y2NcdWI5Y2VcdWI5Y2ZcdWI5ZDBcdWI5ZDFcdWI5ZDJcdWI5ZDhcdWI5ZDlcdWI5ZGJcdWI5ZGRcdWI5ZGVcdWI5ZTFcdWI5ZTNcdWI5ZTRcdWI5ZTVcdWI5ZThcdWI5ZWNcdWI5ZjRcdWI5ZjVcdWI5ZjdcdWI5ZjhcdWI5ZjlcdWI5ZmFcdWJhMDBcdWJhMDFcdWJhMDhcdWJh''@;'; put 'put ''MTVcdWJhMzhcdWJhMzlcdWJhM2NcdWJhNDBcdWJhNDJcdWJhNDhcdWJhNDlcdWJhNGJcdWJhNGRcdWJhNGVcdWJhNTNcdWJhNTRcdWJhNTVcdWJhNThcdWJhNWNcdWJhNjRcdWJhNjVcdWJhNjdcdWJhNjhcdWJhNjlcdWJhNzBcdWJhNzFcdWJhNzRcdWJhNzhcdWJhODNcdWJhODRcdWJhODVc''@;'; put 'put ''dWJhODdcdWJhOGNcdWJhYThcdWJhYTlcdWJhYWJcdWJhYWNcdWJhYjBcdWJhYjJcdWJhYjhcdWJhYjlcdWJhYmJcdWJhYmRcdWJhYzRcdWJhYzhcdWJhZDhcdWJhZDlcdWJhZmNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxODRdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE4NF1bZ10uY2hh''@;'; put 'put ''ckNvZGVBdCgwKSYmKElbX1sxODRdW2ddXT00NzEwNCtnLHlbNDcxMDQrZ109X1sxODRdW2ddKTtmb3IoX1sxODVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQyMmFcdWQyMmJcdWQyMmVcdWQyMmZcdWQyMzFcdWQyMzJc''@;'; put 'put ''dWQyMzNcdWQyMzVcdWQyMzZcdWQyMzdcdWQyMzhcdWQyMzlcdWQyM2FcdWQyM2JcdWQyM2VcdWQyNDBcdWQyNDJcdWQyNDNcdWQyNDRcdWQyNDVcdWQyNDZcdWQyNDdcdWQyNDlcdWQyNGFcdWQyNGJcdWQyNGNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQyNGRcdWQy''@;'; put 'put ''NGVcdWQyNGZcdWQyNTBcdWQyNTFcdWQyNTJcdWQyNTNcdWQyNTRcdWQyNTVcdWQyNTZcdWQyNTdcdWQyNThcdWQyNTlcdWQyNWFcdWQyNWJcdWQyNWRcdWQyNWVcdWQyNWZcdWQyNjBcdWQyNjFcdWQyNjJcdWQyNjNcdWQyNjVcdWQyNjZcdWQyNjdcdWQyNjhcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWQyNjlcdWQyNmFcdWQyNmJcdWQyNmNcdWQyNmRcdWQyNmVcdWQyNmZcdWQyNzBcdWQyNzFcdWQyNzJcdWQyNzNcdWQyNzRcdWQyNzVcdWQyNzZcdWQyNzdcdWQyNzhcdWQyNzlcdWQyN2FcdWQyN2JcdWQyN2NcdWQyN2RcdWQyN2VcdWQyN2ZcdWQyODJcdWQy''@;'; put 'put ''ODNcdWQyODVcdWQyODZcdWQyODdcdWQyODlcdWQyOGFcdWQyOGJcdWQyOGNcdWJiMDBcdWJiMDRcdWJiMGRcdWJiMGZcdWJiMTFcdWJiMThcdWJiMWNcdWJiMjBcdWJiMjlcdWJiMmJcdWJiMzRcdWJiMzVcdWJiMzZcdWJiMzhcdWJiM2JcdWJiM2NcdWJiM2RcdWJiM2VcdWJiNDRcdWJiNDVc''@;'; put 'put ''dWJiNDdcdWJiNDlcdWJiNGRcdWJiNGZcdWJiNTBcdWJiNTRcdWJiNThcdWJiNjFcdWJiNjNcdWJiNmNcdWJiODhcdWJiOGNcdWJiOTBcdWJiYTRcdWJiYThcdWJiYWNcdWJiYjRcdWJiYjdcdWJiYzBcdWJiYzRcdWJiYzhcdWJiZDBcdWJiZDNcdWJiZjhcdWJiZjlcdWJiZmNcdWJiZmZcdWJj''@;'; put 'put ''MDBcdWJjMDJcdWJjMDhcdWJjMDlcdWJjMGJcdWJjMGNcdWJjMGRcdWJjMGZcdWJjMTFcdWJjMTRcdWJjMTVcdWJjMTZcdWJjMTdcdWJjMThcdWJjMWJcdWJjMWNcdWJjMWRcdWJjMWVcdWJjMWZcdWJjMjRcdWJjMjVcdWJjMjdcdWJjMjlcdWJjMmRcdWJjMzBcdWJjMzFcdWJjMzRcdWJjMzhc''@;'; put 'put ''dWJjNDBcdWJjNDFcdWJjNDNcdWJjNDRcdWJjNDVcdWJjNDlcdWJjNGNcdWJjNGRcdWJjNTBcdWJjNWRcdWJjODRcdWJjODVcdWJjODhcdWJjOGJcdWJjOGNcdWJjOGVcdWJjOTRcdWJjOTVcdWJjOTdcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxODVdLmxlbmd0aDsrK2cpNjU1MzMhPT1f''@;'; put 'put ''WzE4NV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxODVdW2ddXT00NzM2MCtnLHlbNDczNjArZ109X1sxODVdW2ddKTtmb3IoX1sxODZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQyOGRcdWQyOGVcdWQyOGZcdWQyOTJc''@;'; put 'put ''dWQyOTNcdWQyOTRcdWQyOTZcdWQyOTdcdWQyOThcdWQyOTlcdWQyOWFcdWQyOWJcdWQyOWRcdWQyOWVcdWQyOWZcdWQyYTFcdWQyYTJcdWQyYTNcdWQyYTVcdWQyYTZcdWQyYTdcdWQyYThcdWQyYTlcdWQyYWFcdWQyYWJcdWQyYWRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWQyYWVcdWQyYWZcdWQyYjBcdWQyYjJcdWQyYjNcdWQyYjRcdWQyYjVcdWQyYjZcdWQyYjdcdWQyYmFcdWQyYmJcdWQyYmRcdWQyYmVcdWQyYzFcdWQyYzNcdWQyYzRcdWQyYzVcdWQyYzZcdWQyYzdcdWQyY2FcdWQyY2NcdWQyY2RcdWQyY2VcdWQyY2ZcdWQyZDBcdWQyZDFcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQyZDJcdWQyZDNcdWQyZDVcdWQyZDZcdWQyZDdcdWQyZDlcdWQyZGFcdWQyZGJcdWQyZGRcdWQyZGVcdWQyZGZcdWQyZTBcdWQyZTFcdWQyZTJcdWQyZTNcdWQyZTZcdWQyZTdcdWQyZThcdWQyZTlcdWQyZWFcdWQyZWJcdWQyZWNcdWQy''@;'; put 'put ''ZWRcdWQyZWVcdWQyZWZcdWQyZjJcdWQyZjNcdWQyZjVcdWQyZjZcdWQyZjdcdWQyZjlcdWQyZmFcdWJjOTlcdWJjOWFcdWJjYTBcdWJjYTFcdWJjYTRcdWJjYTdcdWJjYThcdWJjYjBcdWJjYjFcdWJjYjNcdWJjYjRcdWJjYjVcdWJjYmNcdWJjYmRcdWJjYzBcdWJjYzRcdWJjY2RcdWJjY2Zc''@;'; put 'put ''dWJjZDBcdWJjZDFcdWJjZDVcdWJjZDhcdWJjZGNcdWJjZjRcdWJjZjVcdWJjZjZcdWJjZjhcdWJjZmNcdWJkMDRcdWJkMDVcdWJkMDdcdWJkMDlcdWJkMTBcdWJkMTRcdWJkMjRcdWJkMmNcdWJkNDBcdWJkNDhcdWJkNDlcdWJkNGNcdWJkNTBcdWJkNThcdWJkNTlcdWJkNjRcdWJkNjhcdWJk''@;'; put 'put ''ODBcdWJkODFcdWJkODRcdWJkODdcdWJkODhcdWJkODlcdWJkOGFcdWJkOTBcdWJkOTFcdWJkOTNcdWJkOTVcdWJkOTlcdWJkOWFcdWJkOWNcdWJkYTRcdWJkYjBcdWJkYjhcdWJkZDRcdWJkZDVcdWJkZDhcdWJkZGNcdWJkZTlcdWJkZjBcdWJkZjRcdWJkZjhcdWJlMDBcdWJlMDNcdWJlMDVc''@;'; put 'put ''dWJlMGNcdWJlMGRcdWJlMTBcdWJlMTRcdWJlMWNcdWJlMWRcdWJlMWZcdWJlNDRcdWJlNDVcdWJlNDhcdWJlNGNcdWJlNGVcdWJlNTRcdWJlNTVcdWJlNTdcdWJlNTlcdWJlNWFcdWJlNWJcdWJlNjBcdWJlNjFcdWJlNjRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxODZdLmxlbmd0aDsr''@;'; put 'put ''K2cpNjU1MzMhPT1fWzE4Nl1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxODZdW2ddXT00NzYxNitnLHlbNDc2MTYrZ109X1sxODZdW2ddKTtmb3IoX1sxODddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQyZmJcdWQyZmNc''@;'; put 'put ''dWQyZmRcdWQyZmVcdWQyZmZcdWQzMDJcdWQzMDRcdWQzMDZcdWQzMDdcdWQzMDhcdWQzMDlcdWQzMGFcdWQzMGJcdWQzMGZcdWQzMTFcdWQzMTJcdWQzMTNcdWQzMTVcdWQzMTdcdWQzMThcdWQzMTlcdWQzMWFcdWQzMWJcdWQzMWVcdWQzMjJcdWQzMjNcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWQzMjRcdWQzMjZcdWQzMjdcdWQzMmFcdWQzMmJcdWQzMmRcdWQzMmVcdWQzMmZcdWQzMzFcdWQzMzJcdWQzMzNcdWQzMzRcdWQzMzVcdWQzMzZcdWQzMzdcdWQzM2FcdWQzM2VcdWQzM2ZcdWQzNDBcdWQzNDFcdWQzNDJcdWQzNDNcdWQzNDZcdWQzNDdcdWQzNDhc''@;'; put 'put ''dWQzNDlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQzNGFcdWQzNGJcdWQzNGNcdWQzNGRcdWQzNGVcdWQzNGZcdWQzNTBcdWQzNTFcdWQzNTJcdWQzNTNcdWQzNTRcdWQzNTVcdWQzNTZcdWQzNTdcdWQzNThcdWQzNTlcdWQzNWFcdWQzNWJcdWQzNWNcdWQzNWRcdWQz''@;'; put 'put ''NWVcdWQzNWZcdWQzNjBcdWQzNjFcdWQzNjJcdWQzNjNcdWQzNjRcdWQzNjVcdWQzNjZcdWQzNjdcdWQzNjhcdWQzNjlcdWJlNjhcdWJlNmFcdWJlNzBcdWJlNzFcdWJlNzNcdWJlNzRcdWJlNzVcdWJlN2JcdWJlN2NcdWJlN2RcdWJlODBcdWJlODRcdWJlOGNcdWJlOGRcdWJlOGZcdWJlOTBc''@;'; put 'put ''dWJlOTFcdWJlOThcdWJlOTlcdWJlYThcdWJlZDBcdWJlZDFcdWJlZDRcdWJlZDdcdWJlZDhcdWJlZTBcdWJlZTNcdWJlZTRcdWJlZTVcdWJlZWNcdWJmMDFcdWJmMDhcdWJmMDlcdWJmMThcdWJmMTlcdWJmMWJcdWJmMWNcdWJmMWRcdWJmNDBcdWJmNDFcdWJmNDRcdWJmNDhcdWJmNTBcdWJm''@;'; put 'put ''NTFcdWJmNTVcdWJmOTRcdWJmYjBcdWJmYzVcdWJmY2NcdWJmY2RcdWJmZDBcdWJmZDRcdWJmZGNcdWJmZGZcdWJmZTFcdWMwM2NcdWMwNTFcdWMwNThcdWMwNWNcdWMwNjBcdWMwNjhcdWMwNjlcdWMwOTBcdWMwOTFcdWMwOTRcdWMwOThcdWMwYTBcdWMwYTFcdWMwYTNcdWMwYTVcdWMwYWNc''@;'; put 'put ''dWMwYWRcdWMwYWZcdWMwYjBcdWMwYjNcdWMwYjRcdWMwYjVcdWMwYjZcdWMwYmNcdWMwYmRcdWMwYmZcdWMwYzBcdWMwYzFcdWMwYzVcdWMwYzhcdWMwYzlcdWMwY2NcdWMwZDBcdWMwZDhcdWMwZDlcdWMwZGJcdWMwZGNcdWMwZGRcdWMwZTRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sx''@;'; put 'put ''ODddLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE4N11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxODddW2ddXT00Nzg3MitnLHlbNDc4NzIrZ109X1sxODddW2ddKTtmb3IoX1sxODhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWQzNmFcdWQzNmJcdWQzNmNcdWQzNmRcdWQzNmVcdWQzNmZcdWQzNzBcdWQzNzFcdWQzNzJcdWQzNzNcdWQzNzRcdWQzNzVcdWQzNzZcdWQzNzdcdWQzNzhcdWQzNzlcdWQzN2FcdWQzN2JcdWQzN2VcdWQzN2ZcdWQzODFcdWQzODJcdWQzODNcdWQzODVcdWQzODZcdWQzODdcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQzODhcdWQzODlcdWQzOGFcdWQzOGJcdWQzOGVcdWQzOTJcdWQzOTNcdWQzOTRcdWQzOTVcdWQzOTZcdWQzOTdcdWQzOWFcdWQzOWJcdWQzOWRcdWQzOWVcdWQzOWZcdWQzYTFcdWQzYTJcdWQzYTNcdWQzYTRcdWQzYTVcdWQzYTZcdWQzYTdc''@;'; put 'put ''dWQzYWFcdWQzYWNcdWQzYWVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQzYWZcdWQzYjBcdWQzYjFcdWQzYjJcdWQzYjNcdWQzYjVcdWQzYjZcdWQzYjdcdWQzYjlcdWQzYmFcdWQzYmJcdWQzYmRcdWQzYmVcdWQzYmZcdWQzYzBcdWQzYzFcdWQzYzJcdWQzYzNcdWQz''@;'; put 'put ''YzZcdWQzYzdcdWQzY2FcdWQzY2JcdWQzY2NcdWQzY2RcdWQzY2VcdWQzY2ZcdWQzZDFcdWQzZDJcdWQzZDNcdWQzZDRcdWQzZDVcdWQzZDZcdWMwZTVcdWMwZThcdWMwZWNcdWMwZjRcdWMwZjVcdWMwZjdcdWMwZjlcdWMxMDBcdWMxMDRcdWMxMDhcdWMxMTBcdWMxMTVcdWMxMWNcdWMxMWRc''@;'; put 'put ''dWMxMWVcdWMxMWZcdWMxMjBcdWMxMjNcdWMxMjRcdWMxMjZcdWMxMjdcdWMxMmNcdWMxMmRcdWMxMmZcdWMxMzBcdWMxMzFcdWMxMzZcdWMxMzhcdWMxMzlcdWMxM2NcdWMxNDBcdWMxNDhcdWMxNDlcdWMxNGJcdWMxNGNcdWMxNGRcdWMxNTRcdWMxNTVcdWMxNThcdWMxNWNcdWMxNjRcdWMx''@;'; put 'put ''NjVcdWMxNjdcdWMxNjhcdWMxNjlcdWMxNzBcdWMxNzRcdWMxNzhcdWMxODVcdWMxOGNcdWMxOGRcdWMxOGVcdWMxOTBcdWMxOTRcdWMxOTZcdWMxOWNcdWMxOWRcdWMxOWZcdWMxYTFcdWMxYTVcdWMxYThcdWMxYTlcdWMxYWNcdWMxYjBcdWMxYmRcdWMxYzRcdWMxYzhcdWMxY2NcdWMxZDRc''@;'; put 'put ''dWMxZDdcdWMxZDhcdWMxZTBcdWMxZTRcdWMxZThcdWMxZjBcdWMxZjFcdWMxZjNcdWMxZmNcdWMxZmRcdWMyMDBcdWMyMDRcdWMyMGNcdWMyMGRcdWMyMGZcdWMyMTFcdWMyMThcdWMyMTlcdWMyMWNcdWMyMWZcdWMyMjBcdWMyMjhcdWMyMjlcdWMyMmJcdWMyMmRcdWZmZmQiLnNwbGl0KCIi''@;'; put 'put ''KSxnPTA7ZyE9X1sxODhdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE4OF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxODhdW2ddXT00ODEyOCtnLHlbNDgxMjgrZ109X1sxODhdW2ddKTtmb3IoX1sxODldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWQzZDdcdWQzZDlcdWQzZGFcdWQzZGJcdWQzZGNcdWQzZGRcdWQzZGVcdWQzZGZcdWQzZTBcdWQzZTJcdWQzZTRcdWQzZTVcdWQzZTZcdWQzZTdcdWQzZThcdWQzZTlcdWQzZWFcdWQzZWJcdWQzZWVcdWQzZWZcdWQzZjFcdWQzZjJcdWQzZjNcdWQzZjVcdWQzZjZcdWQz''@;'; put 'put ''ZjdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQzZjhcdWQzZjlcdWQzZmFcdWQzZmJcdWQzZmVcdWQ0MDBcdWQ0MDJcdWQ0MDNcdWQ0MDRcdWQ0MDVcdWQ0MDZcdWQ0MDdcdWQ0MDlcdWQ0MGFcdWQ0MGJcdWQ0MGNcdWQ0MGRcdWQ0MGVcdWQ0MGZcdWQ0MTBcdWQ0MTFc''@;'; put 'put ''dWQ0MTJcdWQ0MTNcdWQ0MTRcdWQ0MTVcdWQ0MTZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ0MTdcdWQ0MThcdWQ0MTlcdWQ0MWFcdWQ0MWJcdWQ0MWNcdWQ0MWVcdWQ0MWZcdWQ0MjBcdWQ0MjFcdWQ0MjJcdWQ0MjNcdWQ0MjRcdWQ0MjVcdWQ0MjZcdWQ0MjdcdWQ0''@;'; put 'put ''MjhcdWQ0MjlcdWQ0MmFcdWQ0MmJcdWQ0MmNcdWQ0MmRcdWQ0MmVcdWQ0MmZcdWQ0MzBcdWQ0MzFcdWQ0MzJcdWQ0MzNcdWQ0MzRcdWQ0MzVcdWQ0MzZcdWQ0MzdcdWMyMmZcdWMyMzFcdWMyMzJcdWMyMzRcdWMyNDhcdWMyNTBcdWMyNTFcdWMyNTRcdWMyNThcdWMyNjBcdWMyNjVcdWMyNmNc''@;'; put 'put ''dWMyNmRcdWMyNzBcdWMyNzRcdWMyN2NcdWMyN2RcdWMyN2ZcdWMyODFcdWMyODhcdWMyODlcdWMyOTBcdWMyOThcdWMyOWJcdWMyOWRcdWMyYTRcdWMyYTVcdWMyYThcdWMyYWNcdWMyYWRcdWMyYjRcdWMyYjVcdWMyYjdcdWMyYjlcdWMyZGNcdWMyZGRcdWMyZTBcdWMyZTNcdWMyZTRcdWMy''@;'; put 'put ''ZWJcdWMyZWNcdWMyZWRcdWMyZWZcdWMyZjFcdWMyZjZcdWMyZjhcdWMyZjlcdWMyZmJcdWMyZmNcdWMzMDBcdWMzMDhcdWMzMDlcdWMzMGNcdWMzMGRcdWMzMTNcdWMzMTRcdWMzMTVcdWMzMThcdWMzMWNcdWMzMjRcdWMzMjVcdWMzMjhcdWMzMjlcdWMzNDVcdWMzNjhcdWMzNjlcdWMzNmNc''@;'; put 'put ''dWMzNzBcdWMzNzJcdWMzNzhcdWMzNzlcdWMzN2NcdWMzN2RcdWMzODRcdWMzODhcdWMzOGNcdWMzYzBcdWMzZDhcdWMzZDlcdWMzZGNcdWMzZGZcdWMzZTBcdWMzZTJcdWMzZThcdWMzZTlcdWMzZWRcdWMzZjRcdWMzZjVcdWMzZjhcdWM0MDhcdWM0MTBcdWM0MjRcdWM0MmNcdWM0MzBcdWZm''@;'; put 'put ''ZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxODldLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE4OV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxODldW2ddXT00ODM4NCtnLHlbNDgzODQrZ109X1sxODldW2ddKTtmb3IoX1sxOTBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ0MzhcdWQ0MzlcdWQ0M2FcdWQ0M2JcdWQ0M2NcdWQ0M2RcdWQ0M2VcdWQ0M2ZcdWQ0NDFcdWQ0NDJcdWQ0NDNcdWQ0NDVcdWQ0NDZcdWQ0NDdcdWQ0NDhcdWQ0NDlcdWQ0NGFcdWQ0NGJcdWQ0NGNcdWQ0NGRcdWQ0NGVcdWQ0NGZcdWQ0NTBcdWQ0''@;'; put 'put ''NTFcdWQ0NTJcdWQ0NTNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ0NTRcdWQ0NTVcdWQ0NTZcdWQ0NTdcdWQ0NThcdWQ0NTlcdWQ0NWFcdWQ0NWJcdWQ0NWRcdWQ0NWVcdWQ0NWZcdWQ0NjFcdWQ0NjJcdWQ0NjNcdWQ0NjVcdWQ0NjZcdWQ0NjdcdWQ0NjhcdWQ0Njlc''@;'; put 'put ''dWQ0NmFcdWQ0NmJcdWQ0NmNcdWQ0NmVcdWQ0NzBcdWQ0NzFcdWQ0NzJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ0NzNcdWQ0NzRcdWQ0NzVcdWQ0NzZcdWQ0NzdcdWQ0N2FcdWQ0N2JcdWQ0N2RcdWQ0N2VcdWQ0ODFcdWQ0ODNcdWQ0ODRcdWQ0ODVcdWQ0ODZcdWQ0''@;'; put 'put ''ODdcdWQ0OGFcdWQ0OGNcdWQ0OGVcdWQ0OGZcdWQ0OTBcdWQ0OTFcdWQ0OTJcdWQ0OTNcdWQ0OTVcdWQ0OTZcdWQ0OTdcdWQ0OThcdWQ0OTlcdWQ0OWFcdWQ0OWJcdWQ0OWNcdWQ0OWRcdWM0MzRcdWM0M2NcdWM0M2RcdWM0NDhcdWM0NjRcdWM0NjVcdWM0NjhcdWM0NmNcdWM0NzRcdWM0NzVc''@;'; put 'put ''dWM0NzlcdWM0ODBcdWM0OTRcdWM0OWNcdWM0YjhcdWM0YmNcdWM0ZTlcdWM0ZjBcdWM0ZjFcdWM0ZjRcdWM0ZjhcdWM0ZmFcdWM0ZmZcdWM1MDBcdWM1MDFcdWM1MGNcdWM1MTBcdWM1MTRcdWM1MWNcdWM1MjhcdWM1MjlcdWM1MmNcdWM1MzBcdWM1MzhcdWM1MzlcdWM1M2JcdWM1M2RcdWM1''@;'; put 'put ''NDRcdWM1NDVcdWM1NDhcdWM1NDlcdWM1NGFcdWM1NGNcdWM1NGRcdWM1NGVcdWM1NTNcdWM1NTRcdWM1NTVcdWM1NTdcdWM1NThcdWM1NTlcdWM1NWRcdWM1NWVcdWM1NjBcdWM1NjFcdWM1NjRcdWM1NjhcdWM1NzBcdWM1NzFcdWM1NzNcdWM1NzRcdWM1NzVcdWM1N2NcdWM1N2RcdWM1ODBc''@;'; put 'put ''dWM1ODRcdWM1ODdcdWM1OGNcdWM1OGRcdWM1OGZcdWM1OTFcdWM1OTVcdWM1OTdcdWM1OThcdWM1OWNcdWM1YTBcdWM1YTlcdWM1YjRcdWM1YjVcdWM1YjhcdWM1YjlcdWM1YmJcdWM1YmNcdWM1YmRcdWM1YmVcdWM1YzRcdWM1YzVcdWM1YzZcdWM1YzdcdWM1YzhcdWM1YzlcdWM1Y2FcdWM1''@;'; put 'put ''Y2NcdWM1Y2VcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxOTBdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE5MF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxOTBdW2ddXT00ODY0MCtnLHlbNDg2NDArZ109X1sxOTBdW2ddKTtmb3IoX1sxOTFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ0OWVcdWQ0OWZcdWQ0YTBcdWQ0YTFcdWQ0YTJcdWQ0YTNcdWQ0YTRcdWQ0YTVcdWQ0YTZcdWQ0YTdcdWQ0YThcdWQ0YWFcdWQ0YWJcdWQ0YWNcdWQ0YWRcdWQ0YWVcdWQ0YWZcdWQ0YjBcdWQ0YjFcdWQ0YjJcdWQ0YjNcdWQ0''@;'; put 'put ''YjRcdWQ0YjVcdWQ0YjZcdWQ0YjdcdWQ0YjhcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ0YjlcdWQ0YmFcdWQ0YmJcdWQ0YmNcdWQ0YmRcdWQ0YmVcdWQ0YmZcdWQ0YzBcdWQ0YzFcdWQ0YzJcdWQ0YzNcdWQ0YzRcdWQ0YzVcdWQ0YzZcdWQ0YzdcdWQ0YzhcdWQ0Yzlc''@;'; put 'put ''dWQ0Y2FcdWQ0Y2JcdWQ0Y2RcdWQ0Y2VcdWQ0Y2ZcdWQ0ZDFcdWQ0ZDJcdWQ0ZDNcdWQ0ZDVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ0ZDZcdWQ0ZDdcdWQ0ZDhcdWQ0ZDlcdWQ0ZGFcdWQ0ZGJcdWQ0ZGRcdWQ0ZGVcdWQ0ZTBcdWQ0ZTFcdWQ0ZTJcdWQ0ZTNcdWQ0''@;'; put 'put ''ZTRcdWQ0ZTVcdWQ0ZTZcdWQ0ZTdcdWQ0ZTlcdWQ0ZWFcdWQ0ZWJcdWQ0ZWRcdWQ0ZWVcdWQ0ZWZcdWQ0ZjFcdWQ0ZjJcdWQ0ZjNcdWQ0ZjRcdWQ0ZjVcdWQ0ZjZcdWQ0ZjdcdWQ0ZjlcdWQ0ZmFcdWQ0ZmNcdWM1ZDBcdWM1ZDFcdWM1ZDRcdWM1ZDhcdWM1ZTBcdWM1ZTFcdWM1ZTNcdWM1ZTVc''@;'; put 'put ''dWM1ZWNcdWM1ZWRcdWM1ZWVcdWM1ZjBcdWM1ZjRcdWM1ZjZcdWM1ZjdcdWM1ZmNcdWM1ZmRcdWM1ZmVcdWM1ZmZcdWM2MDBcdWM2MDFcdWM2MDVcdWM2MDZcdWM2MDdcdWM2MDhcdWM2MGNcdWM2MTBcdWM2MThcdWM2MTlcdWM2MWJcdWM2MWNcdWM2MjRcdWM2MjVcdWM2MjhcdWM2MmNcdWM2''@;'; put 'put ''MmRcdWM2MmVcdWM2MzBcdWM2MzNcdWM2MzRcdWM2MzVcdWM2MzdcdWM2MzlcdWM2M2JcdWM2NDBcdWM2NDFcdWM2NDRcdWM2NDhcdWM2NTBcdWM2NTFcdWM2NTNcdWM2NTRcdWM2NTVcdWM2NWNcdWM2NWRcdWM2NjBcdWM2NmNcdWM2NmZcdWM2NzFcdWM2NzhcdWM2NzlcdWM2N2NcdWM2ODBc''@;'; put 'put ''dWM2ODhcdWM2ODlcdWM2OGJcdWM2OGRcdWM2OTRcdWM2OTVcdWM2OThcdWM2OWNcdWM2YTRcdWM2YTVcdWM2YTdcdWM2YTlcdWM2YjBcdWM2YjFcdWM2YjRcdWM2YjhcdWM2YjlcdWM2YmFcdWM2YzBcdWM2YzFcdWM2YzNcdWM2YzVcdWM2Y2NcdWM2Y2RcdWM2ZDBcdWM2ZDRcdWM2ZGNcdWM2''@;'; put 'put ''ZGRcdWM2ZTBcdWM2ZTFcdWM2ZThcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxOTFdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE5MV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxOTFdW2ddXT00ODg5NitnLHlbNDg4OTYrZ109X1sxOTFdW2ddKTtmb3IoX1sxOTJdPSJcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ0ZmVcdWQ0ZmZcdWQ1MDBcdWQ1MDFcdWQ1MDJcdWQ1MDNcdWQ1MDVcdWQ1MDZcdWQ1MDdcdWQ1MDlcdWQ1MGFcdWQ1MGJcdWQ1MGRcdWQ1MGVcdWQ1MGZcdWQ1MTBcdWQ1MTFcdWQ1MTJcdWQ1MTNcdWQ1''@;'; put 'put ''MTZcdWQ1MThcdWQ1MTlcdWQ1MWFcdWQ1MWJcdWQ1MWNcdWQ1MWRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ1MWVcdWQ1MWZcdWQ1MjBcdWQ1MjFcdWQ1MjJcdWQ1MjNcdWQ1MjRcdWQ1MjVcdWQ1MjZcdWQ1MjdcdWQ1MjhcdWQ1MjlcdWQ1MmFcdWQ1MmJcdWQ1MmNc''@;'; put 'put ''dWQ1MmRcdWQ1MmVcdWQ1MmZcdWQ1MzBcdWQ1MzFcdWQ1MzJcdWQ1MzNcdWQ1MzRcdWQ1MzVcdWQ1MzZcdWQ1MzdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ1MzhcdWQ1MzlcdWQ1M2FcdWQ1M2JcdWQ1M2VcdWQ1M2ZcdWQ1NDFcdWQ1NDJcdWQ1NDNcdWQ1NDVcdWQ1''@;'; put 'put ''NDZcdWQ1NDdcdWQ1NDhcdWQ1NDlcdWQ1NGFcdWQ1NGJcdWQ1NGVcdWQ1NTBcdWQ1NTJcdWQ1NTNcdWQ1NTRcdWQ1NTVcdWQ1NTZcdWQ1NTdcdWQ1NWFcdWQ1NWJcdWQ1NWRcdWQ1NWVcdWQ1NWZcdWQ1NjFcdWQ1NjJcdWQ1NjNcdWM2ZTlcdWM2ZWNcdWM2ZjBcdWM2ZjhcdWM2ZjlcdWM2ZmRc''@;'; put 'put ''dWM3MDRcdWM3MDVcdWM3MDhcdWM3MGNcdWM3MTRcdWM3MTVcdWM3MTdcdWM3MTlcdWM3MjBcdWM3MjFcdWM3MjRcdWM3MjhcdWM3MzBcdWM3MzFcdWM3MzNcdWM3MzVcdWM3MzdcdWM3M2NcdWM3M2RcdWM3NDBcdWM3NDRcdWM3NGFcdWM3NGNcdWM3NGRcdWM3NGZcdWM3NTFcdWM3NTJcdWM3''@;'; put 'put ''NTNcdWM3NTRcdWM3NTVcdWM3NTZcdWM3NTdcdWM3NThcdWM3NWNcdWM3NjBcdWM3NjhcdWM3NmJcdWM3NzRcdWM3NzVcdWM3NzhcdWM3N2NcdWM3N2RcdWM3N2VcdWM3ODNcdWM3ODRcdWM3ODVcdWM3ODdcdWM3ODhcdWM3ODlcdWM3OGFcdWM3OGVcdWM3OTBcdWM3OTFcdWM3OTRcdWM3OTZc''@;'; put 'put ''dWM3OTdcdWM3OThcdWM3OWFcdWM3YTBcdWM3YTFcdWM3YTNcdWM3YTRcdWM3YTVcdWM3YTZcdWM3YWNcdWM3YWRcdWM3YjBcdWM3YjRcdWM3YmNcdWM3YmRcdWM3YmZcdWM3YzBcdWM3YzFcdWM3YzhcdWM3YzlcdWM3Y2NcdWM3Y2VcdWM3ZDBcdWM3ZDhcdWM3ZGRcdWM3ZTRcdWM3ZThcdWM3''@;'; put 'put ''ZWNcdWM4MDBcdWM4MDFcdWM4MDRcdWM4MDhcdWM4MGFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxOTJdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE5Ml1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxOTJdW2ddXT00OTE1MitnLHlbNDkxNTIrZ109X1sxOTJdW2ddKTtmb3IoX1sxOTNdPSJc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ1NjRcdWQ1NjZcdWQ1NjdcdWQ1NmFcdWQ1NmNcdWQ1NmVcdWQ1NmZcdWQ1NzBcdWQ1NzFcdWQ1NzJcdWQ1NzNcdWQ1NzZcdWQ1NzdcdWQ1NzlcdWQ1N2FcdWQ1N2JcdWQ1N2RcdWQ1''@;'; put 'put ''N2VcdWQ1N2ZcdWQ1ODBcdWQ1ODFcdWQ1ODJcdWQ1ODNcdWQ1ODZcdWQ1OGFcdWQ1OGJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ1OGNcdWQ1OGRcdWQ1OGVcdWQ1OGZcdWQ1OTFcdWQ1OTJcdWQ1OTNcdWQ1OTRcdWQ1OTVcdWQ1OTZcdWQ1OTdcdWQ1OThcdWQ1OTlc''@;'; put 'put ''dWQ1OWFcdWQ1OWJcdWQ1OWNcdWQ1OWRcdWQ1OWVcdWQ1OWZcdWQ1YTBcdWQ1YTFcdWQ1YTJcdWQ1YTNcdWQ1YTRcdWQ1YTZcdWQ1YTdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ1YThcdWQ1YTlcdWQ1YWFcdWQ1YWJcdWQ1YWNcdWQ1YWRcdWQ1YWVcdWQ1YWZcdWQ1''@;'; put 'put ''YjBcdWQ1YjFcdWQ1YjJcdWQ1YjNcdWQ1YjRcdWQ1YjVcdWQ1YjZcdWQ1YjdcdWQ1YjhcdWQ1YjlcdWQ1YmFcdWQ1YmJcdWQ1YmNcdWQ1YmRcdWQ1YmVcdWQ1YmZcdWQ1YzBcdWQ1YzFcdWQ1YzJcdWQ1YzNcdWQ1YzRcdWQ1YzVcdWQ1YzZcdWQ1YzdcdWM4MTBcdWM4MTFcdWM4MTNcdWM4MTVc''@;'; put 'put ''dWM4MTZcdWM4MWNcdWM4MWRcdWM4MjBcdWM4MjRcdWM4MmNcdWM4MmRcdWM4MmZcdWM4MzFcdWM4MzhcdWM4M2NcdWM4NDBcdWM4NDhcdWM4NDlcdWM4NGNcdWM4NGRcdWM4NTRcdWM4NzBcdWM4NzFcdWM4NzRcdWM4NzhcdWM4N2FcdWM4ODBcdWM4ODFcdWM4ODNcdWM4ODVcdWM4ODZcdWM4''@;'; put 'put ''ODdcdWM4OGJcdWM4OGNcdWM4OGRcdWM4OTRcdWM4OWRcdWM4OWZcdWM4YTFcdWM4YThcdWM4YmNcdWM4YmRcdWM4YzRcdWM4YzhcdWM4Y2NcdWM4ZDRcdWM4ZDVcdWM4ZDdcdWM4ZDlcdWM4ZTBcdWM4ZTFcdWM4ZTRcdWM4ZjVcdWM4ZmNcdWM4ZmRcdWM5MDBcdWM5MDRcdWM5MDVcdWM5MDZc''@;'; put 'put ''dWM5MGNcdWM5MGRcdWM5MGZcdWM5MTFcdWM5MThcdWM5MmNcdWM5MzRcdWM5NTBcdWM5NTFcdWM5NTRcdWM5NThcdWM5NjBcdWM5NjFcdWM5NjNcdWM5NmNcdWM5NzBcdWM5NzRcdWM5N2NcdWM5ODhcdWM5ODlcdWM5OGNcdWM5OTBcdWM5OThcdWM5OTlcdWM5OWJcdWM5OWRcdWM5YzBcdWM5''@;'; put 'put ''YzFcdWM5YzRcdWM5YzdcdWM5YzhcdWM5Y2FcdWM5ZDBcdWM5ZDFcdWM5ZDNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxOTNdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE5M11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxOTNdW2ddXT00OTQwOCtnLHlbNDk0MDgrZ109X1sxOTNdW2ddKTtm''@;'; put 'put ''b3IoX1sxOTRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ1Y2FcdWQ1Y2JcdWQ1Y2RcdWQ1Y2VcdWQ1Y2ZcdWQ1ZDFcdWQ1ZDNcdWQ1ZDRcdWQ1ZDVcdWQ1ZDZcdWQ1ZDdcdWQ1ZGFcdWQ1ZGNcdWQ1ZGVcdWQ1ZGZcdWQ1''@;'; put 'put ''ZTBcdWQ1ZTFcdWQ1ZTJcdWQ1ZTNcdWQ1ZTZcdWQ1ZTdcdWQ1ZTlcdWQ1ZWFcdWQ1ZWJcdWQ1ZWRcdWQ1ZWVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ1ZWZcdWQ1ZjBcdWQ1ZjFcdWQ1ZjJcdWQ1ZjNcdWQ1ZjZcdWQ1ZjhcdWQ1ZmFcdWQ1ZmJcdWQ1ZmNcdWQ1ZmRc''@;'; put 'put ''dWQ1ZmVcdWQ1ZmZcdWQ2MDJcdWQ2MDNcdWQ2MDVcdWQ2MDZcdWQ2MDdcdWQ2MDlcdWQ2MGFcdWQ2MGJcdWQ2MGNcdWQ2MGRcdWQ2MGVcdWQ2MGZcdWQ2MTJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ2MTZcdWQ2MTdcdWQ2MThcdWQ2MTlcdWQ2MWFcdWQ2MWJcdWQ2''@;'; put 'put ''MWRcdWQ2MWVcdWQ2MWZcdWQ2MjFcdWQ2MjJcdWQ2MjNcdWQ2MjVcdWQ2MjZcdWQ2MjdcdWQ2MjhcdWQ2MjlcdWQ2MmFcdWQ2MmJcdWQ2MmNcdWQ2MmVcdWQ2MmZcdWQ2MzBcdWQ2MzFcdWQ2MzJcdWQ2MzNcdWQ2MzRcdWQ2MzVcdWQ2MzZcdWQ2MzdcdWQ2M2FcdWQ2M2JcdWM5ZDVcdWM5ZDZc''@;'; put 'put ''dWM5ZDlcdWM5ZGFcdWM5ZGNcdWM5ZGRcdWM5ZTBcdWM5ZTJcdWM5ZTRcdWM5ZTdcdWM5ZWNcdWM5ZWRcdWM5ZWZcdWM5ZjBcdWM5ZjFcdWM5ZjhcdWM5ZjlcdWM5ZmNcdWNhMDBcdWNhMDhcdWNhMDlcdWNhMGJcdWNhMGNcdWNhMGRcdWNhMTRcdWNhMThcdWNhMjlcdWNhNGNcdWNhNGRcdWNh''@;'; put 'put ''NTBcdWNhNTRcdWNhNWNcdWNhNWRcdWNhNWZcdWNhNjBcdWNhNjFcdWNhNjhcdWNhN2RcdWNhODRcdWNhOThcdWNhYmNcdWNhYmRcdWNhYzBcdWNhYzRcdWNhY2NcdWNhY2RcdWNhY2ZcdWNhZDFcdWNhZDNcdWNhZDhcdWNhZDlcdWNhZTBcdWNhZWNcdWNhZjRcdWNiMDhcdWNiMTBcdWNiMTRc''@;'; put 'put ''dWNiMThcdWNiMjBcdWNiMjFcdWNiNDFcdWNiNDhcdWNiNDlcdWNiNGNcdWNiNTBcdWNiNThcdWNiNTlcdWNiNWRcdWNiNjRcdWNiNzhcdWNiNzlcdWNiOWNcdWNiYjhcdWNiZDRcdWNiZTRcdWNiZTdcdWNiZTlcdWNjMGNcdWNjMGRcdWNjMTBcdWNjMTRcdWNjMWNcdWNjMWRcdWNjMjFcdWNj''@;'; put 'put ''MjJcdWNjMjdcdWNjMjhcdWNjMjlcdWNjMmNcdWNjMmVcdWNjMzBcdWNjMzhcdWNjMzlcdWNjM2JcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxOTRdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE5NF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxOTRdW2ddXT00OTY2NCtnLHlbNDk2NjQrZ109''@;'; put 'put ''X1sxOTRdW2ddKTtmb3IoX1sxOTVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ2M2RcdWQ2M2VcdWQ2M2ZcdWQ2NDFcdWQ2NDJcdWQ2NDNcdWQ2NDRcdWQ2NDZcdWQ2NDdcdWQ2NGFcdWQ2NGNcdWQ2NGVcdWQ2NGZcdWQ2''@;'; put 'put ''NTBcdWQ2NTJcdWQ2NTNcdWQ2NTZcdWQ2NTdcdWQ2NTlcdWQ2NWFcdWQ2NWJcdWQ2NWRcdWQ2NWVcdWQ2NWZcdWQ2NjBcdWQ2NjFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ2NjJcdWQ2NjNcdWQ2NjRcdWQ2NjVcdWQ2NjZcdWQ2NjhcdWQ2NmFcdWQ2NmJcdWQ2NmNc''@;'; put 'put ''dWQ2NmRcdWQ2NmVcdWQ2NmZcdWQ2NzJcdWQ2NzNcdWQ2NzVcdWQ2NzZcdWQ2NzdcdWQ2NzhcdWQ2NzlcdWQ2N2FcdWQ2N2JcdWQ2N2NcdWQ2N2RcdWQ2N2VcdWQ2N2ZcdWQ2ODBcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ2ODFcdWQ2ODJcdWQ2ODRcdWQ2ODZcdWQ2''@;'; put 'put ''ODdcdWQ2ODhcdWQ2ODlcdWQ2OGFcdWQ2OGJcdWQ2OGVcdWQ2OGZcdWQ2OTFcdWQ2OTJcdWQ2OTNcdWQ2OTVcdWQ2OTZcdWQ2OTdcdWQ2OThcdWQ2OTlcdWQ2OWFcdWQ2OWJcdWQ2OWNcdWQ2OWVcdWQ2YTBcdWQ2YTJcdWQ2YTNcdWQ2YTRcdWQ2YTVcdWQ2YTZcdWQ2YTdcdWQ2YTlcdWQ2YWFc''@;'; put 'put ''dWNjM2NcdWNjM2RcdWNjM2VcdWNjNDRcdWNjNDVcdWNjNDhcdWNjNGNcdWNjNTRcdWNjNTVcdWNjNTdcdWNjNThcdWNjNTlcdWNjNjBcdWNjNjRcdWNjNjZcdWNjNjhcdWNjNzBcdWNjNzVcdWNjOThcdWNjOTlcdWNjOWNcdWNjYTBcdWNjYThcdWNjYTlcdWNjYWJcdWNjYWNcdWNjYWRcdWNj''@;'; put 'put ''YjRcdWNjYjVcdWNjYjhcdWNjYmNcdWNjYzRcdWNjYzVcdWNjYzdcdWNjYzlcdWNjZDBcdWNjZDRcdWNjZTRcdWNjZWNcdWNjZjBcdWNkMDFcdWNkMDhcdWNkMDlcdWNkMGNcdWNkMTBcdWNkMThcdWNkMTlcdWNkMWJcdWNkMWRcdWNkMjRcdWNkMjhcdWNkMmNcdWNkMzlcdWNkNWNcdWNkNjBc''@;'; put 'put ''dWNkNjRcdWNkNmNcdWNkNmRcdWNkNmZcdWNkNzFcdWNkNzhcdWNkODhcdWNkOTRcdWNkOTVcdWNkOThcdWNkOWNcdWNkYTRcdWNkYTVcdWNkYTdcdWNkYTlcdWNkYjBcdWNkYzRcdWNkY2NcdWNkZDBcdWNkZThcdWNkZWNcdWNkZjBcdWNkZjhcdWNkZjlcdWNkZmJcdWNkZmRcdWNlMDRcdWNl''@;'; put 'put ''MDhcdWNlMGNcdWNlMTRcdWNlMTlcdWNlMjBcdWNlMjFcdWNlMjRcdWNlMjhcdWNlMzBcdWNlMzFcdWNlMzNcdWNlMzVcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxOTVdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE5NV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxOTVdW2ddXT00OTkyMCtn''@;'; put 'put ''LHlbNDk5MjArZ109X1sxOTVdW2ddKTtmb3IoX1sxOTZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ2YWJcdWQ2YWRcdWQ2YWVcdWQ2YWZcdWQ2YjFcdWQ2YjJcdWQ2YjNcdWQ2YjRcdWQ2YjVcdWQ2YjZcdWQ2YjdcdWQ2''@;'; put 'put ''YjhcdWQ2YmFcdWQ2YmNcdWQ2YmRcdWQ2YmVcdWQ2YmZcdWQ2YzBcdWQ2YzFcdWQ2YzJcdWQ2YzNcdWQ2YzZcdWQ2YzdcdWQ2YzlcdWQ2Y2FcdWQ2Y2JcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ2Y2RcdWQ2Y2VcdWQ2Y2ZcdWQ2ZDBcdWQ2ZDJcdWQ2ZDNcdWQ2ZDVc''@;'; put 'put ''dWQ2ZDZcdWQ2ZDhcdWQ2ZGFcdWQ2ZGJcdWQ2ZGNcdWQ2ZGRcdWQ2ZGVcdWQ2ZGZcdWQ2ZTFcdWQ2ZTJcdWQ2ZTNcdWQ2ZTVcdWQ2ZTZcdWQ2ZTdcdWQ2ZTlcdWQ2ZWFcdWQ2ZWJcdWQ2ZWNcdWQ2ZWRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ2ZWVcdWQ2ZWZcdWQ2''@;'; put 'put ''ZjFcdWQ2ZjJcdWQ2ZjNcdWQ2ZjRcdWQ2ZjZcdWQ2ZjdcdWQ2ZjhcdWQ2ZjlcdWQ2ZmFcdWQ2ZmJcdWQ2ZmVcdWQ2ZmZcdWQ3MDFcdWQ3MDJcdWQ3MDNcdWQ3MDVcdWQ3MDZcdWQ3MDdcdWQ3MDhcdWQ3MDlcdWQ3MGFcdWQ3MGJcdWQ3MGNcdWQ3MGRcdWQ3MGVcdWQ3MGZcdWQ3MTBcdWQ3MTJc''@;'; put 'put ''dWQ3MTNcdWQ3MTRcdWNlNThcdWNlNTlcdWNlNWNcdWNlNWZcdWNlNjBcdWNlNjFcdWNlNjhcdWNlNjlcdWNlNmJcdWNlNmRcdWNlNzRcdWNlNzVcdWNlNzhcdWNlN2NcdWNlODRcdWNlODVcdWNlODdcdWNlODlcdWNlOTBcdWNlOTFcdWNlOTRcdWNlOThcdWNlYTBcdWNlYTFcdWNlYTNcdWNl''@;'; put 'put ''YTRcdWNlYTVcdWNlYWNcdWNlYWRcdWNlYzFcdWNlZTRcdWNlZTVcdWNlZThcdWNlZWJcdWNlZWNcdWNlZjRcdWNlZjVcdWNlZjdcdWNlZjhcdWNlZjlcdWNmMDBcdWNmMDFcdWNmMDRcdWNmMDhcdWNmMTBcdWNmMTFcdWNmMTNcdWNmMTVcdWNmMWNcdWNmMjBcdWNmMjRcdWNmMmNcdWNmMmRc''@;'; put 'put ''dWNmMmZcdWNmMzBcdWNmMzFcdWNmMzhcdWNmNTRcdWNmNTVcdWNmNThcdWNmNWNcdWNmNjRcdWNmNjVcdWNmNjdcdWNmNjlcdWNmNzBcdWNmNzFcdWNmNzRcdWNmNzhcdWNmODBcdWNmODVcdWNmOGNcdWNmYTFcdWNmYThcdWNmYjBcdWNmYzRcdWNmZTBcdWNmZTFcdWNmZTRcdWNmZThcdWNm''@;'; put 'put ''ZjBcdWNmZjFcdWNmZjNcdWNmZjVcdWNmZmNcdWQwMDBcdWQwMDRcdWQwMTFcdWQwMThcdWQwMmRcdWQwMzRcdWQwMzVcdWQwMzhcdWQwM2NcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxOTZdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE5Nl1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxOTZd''@;'; put 'put ''W2ddXT01MDE3NitnLHlbNTAxNzYrZ109X1sxOTZdW2ddKTtmb3IoX1sxOTddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ3MTVcdWQ3MTZcdWQ3MTdcdWQ3MWFcdWQ3MWJcdWQ3MWRcdWQ3MWVcdWQ3MWZcdWQ3MjFcdWQ3''@;'; put 'put ''MjJcdWQ3MjNcdWQ3MjRcdWQ3MjVcdWQ3MjZcdWQ3MjdcdWQ3MmFcdWQ3MmNcdWQ3MmVcdWQ3MmZcdWQ3MzBcdWQ3MzFcdWQ3MzJcdWQ3MzNcdWQ3MzZcdWQ3MzdcdWQ3MzlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ3M2FcdWQ3M2JcdWQ3M2RcdWQ3M2VcdWQ3M2Zc''@;'; put 'put ''dWQ3NDBcdWQ3NDFcdWQ3NDJcdWQ3NDNcdWQ3NDVcdWQ3NDZcdWQ3NDhcdWQ3NGFcdWQ3NGJcdWQ3NGNcdWQ3NGRcdWQ3NGVcdWQ3NGZcdWQ3NTJcdWQ3NTNcdWQ3NTVcdWQ3NWFcdWQ3NWJcdWQ3NWNcdWQ3NWRcdWQ3NWVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ3''@;'; put 'put ''NWZcdWQ3NjJcdWQ3NjRcdWQ3NjZcdWQ3NjdcdWQ3NjhcdWQ3NmFcdWQ3NmJcdWQ3NmRcdWQ3NmVcdWQ3NmZcdWQ3NzFcdWQ3NzJcdWQ3NzNcdWQ3NzVcdWQ3NzZcdWQ3NzdcdWQ3NzhcdWQ3NzlcdWQ3N2FcdWQ3N2JcdWQ3N2VcdWQ3N2ZcdWQ3ODBcdWQ3ODJcdWQ3ODNcdWQ3ODRcdWQ3ODVc''@;'; put 'put ''dWQ3ODZcdWQ3ODdcdWQ3OGFcdWQ3OGJcdWQwNDRcdWQwNDVcdWQwNDdcdWQwNDlcdWQwNTBcdWQwNTRcdWQwNThcdWQwNjBcdWQwNmNcdWQwNmRcdWQwNzBcdWQwNzRcdWQwN2NcdWQwN2RcdWQwODFcdWQwYTRcdWQwYTVcdWQwYThcdWQwYWNcdWQwYjRcdWQwYjVcdWQwYjdcdWQwYjlcdWQw''@;'; put 'put ''YzBcdWQwYzFcdWQwYzRcdWQwYzhcdWQwYzlcdWQwZDBcdWQwZDFcdWQwZDNcdWQwZDRcdWQwZDVcdWQwZGNcdWQwZGRcdWQwZTBcdWQwZTRcdWQwZWNcdWQwZWRcdWQwZWZcdWQwZjBcdWQwZjFcdWQwZjhcdWQxMGRcdWQxMzBcdWQxMzFcdWQxMzRcdWQxMzhcdWQxM2FcdWQxNDBcdWQxNDFc''@;'; put 'put ''dWQxNDNcdWQxNDRcdWQxNDVcdWQxNGNcdWQxNGRcdWQxNTBcdWQxNTRcdWQxNWNcdWQxNWRcdWQxNWZcdWQxNjFcdWQxNjhcdWQxNmNcdWQxN2NcdWQxODRcdWQxODhcdWQxYTBcdWQxYTFcdWQxYTRcdWQxYThcdWQxYjBcdWQxYjFcdWQxYjNcdWQxYjVcdWQxYmFcdWQxYmNcdWQxYzBcdWQx''@;'; put 'put ''ZDhcdWQxZjRcdWQxZjhcdWQyMDdcdWQyMDlcdWQyMTBcdWQyMmNcdWQyMmRcdWQyMzBcdWQyMzRcdWQyM2NcdWQyM2RcdWQyM2ZcdWQyNDFcdWQyNDhcdWQyNWNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxOTddLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE5N11bZ10uY2hhckNvZGVBdCgw''@;'; put 'put ''KSYmKElbX1sxOTddW2ddXT01MDQzMitnLHlbNTA0MzIrZ109X1sxOTddW2ddKTtmb3IoX1sxOThdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ3OGRcdWQ3OGVcdWQ3OGZcdWQ3OTFcdWQ3OTJcdWQ3OTNcdWQ3OTRcdWQ3''@;'; put 'put ''OTVcdWQ3OTZcdWQ3OTdcdWQ3OWFcdWQ3OWNcdWQ3OWVcdWQ3OWZcdWQ3YTBcdWQ3YTFcdWQ3YTJcdWQ3YTNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQyNjRcdWQyODBcdWQyODFcdWQyODRcdWQyODhcdWQyOTBcdWQyOTFcdWQyOTVcdWQyOWNcdWQyYTBcdWQyYTRcdWQyYWNcdWQyYjFcdWQyYjhcdWQyYjlcdWQyYmNcdWQyYmZcdWQyYzBcdWQyYzJcdWQyYzhcdWQyYzlcdWQy''@;'; put 'put ''Y2JcdWQyZDRcdWQyZDhcdWQyZGNcdWQyZTRcdWQyZTVcdWQyZjBcdWQyZjFcdWQyZjRcdWQyZjhcdWQzMDBcdWQzMDFcdWQzMDNcdWQzMDVcdWQzMGNcdWQzMGRcdWQzMGVcdWQzMTBcdWQzMTRcdWQzMTZcdWQzMWNcdWQzMWRcdWQzMWZcdWQzMjBcdWQzMjFcdWQzMjVcdWQzMjhcdWQzMjlc''@;'; put 'put ''dWQzMmNcdWQzMzBcdWQzMzhcdWQzMzlcdWQzM2JcdWQzM2NcdWQzM2RcdWQzNDRcdWQzNDVcdWQzN2NcdWQzN2RcdWQzODBcdWQzODRcdWQzOGNcdWQzOGRcdWQzOGZcdWQzOTBcdWQzOTFcdWQzOThcdWQzOTlcdWQzOWNcdWQzYTBcdWQzYThcdWQzYTlcdWQzYWJcdWQzYWRcdWQzYjRcdWQz''@;'; put 'put ''YjhcdWQzYmNcdWQzYzRcdWQzYzVcdWQzYzhcdWQzYzlcdWQzZDBcdWQzZDhcdWQzZTFcdWQzZTNcdWQzZWNcdWQzZWRcdWQzZjBcdWQzZjRcdWQzZmNcdWQzZmRcdWQzZmZcdWQ0MDFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxOThdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE5OF1bZ10u''@;'; put 'put ''Y2hhckNvZGVBdCgwKSYmKElbX1sxOThdW2ddXT01MDY4OCtnLHlbNTA2ODgrZ109X1sxOThdW2ddKTtmb3IoX1sxOTldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ0MDhcdWQ0MWRcdWQ0NDBcdWQ0NDRcdWQ0NWNcdWQ0NjBcdWQ0NjRcdWQ0NmRcdWQ0NmZcdWQ0NzhcdWQ0NzlcdWQ0N2NcdWQ0N2ZcdWQ0ODBcdWQ0ODJcdWQ0ODhcdWQ0ODlcdWQ0OGJcdWQ0OGRcdWQ0''@;'; put 'put ''OTRcdWQ0YTlcdWQ0Y2NcdWQ0ZDBcdWQ0ZDRcdWQ0ZGNcdWQ0ZGZcdWQ0ZThcdWQ0ZWNcdWQ0ZjBcdWQ0ZjhcdWQ0ZmJcdWQ0ZmRcdWQ1MDRcdWQ1MDhcdWQ1MGNcdWQ1MTRcdWQ1MTVcdWQ1MTdcdWQ1M2NcdWQ1M2RcdWQ1NDBcdWQ1NDRcdWQ1NGNcdWQ1NGRcdWQ1NGZcdWQ1NTFcdWQ1NThc''@;'; put 'put ''dWQ1NTlcdWQ1NWNcdWQ1NjBcdWQ1NjVcdWQ1NjhcdWQ1NjlcdWQ1NmJcdWQ1NmRcdWQ1NzRcdWQ1NzVcdWQ1NzhcdWQ1N2NcdWQ1ODRcdWQ1ODVcdWQ1ODdcdWQ1ODhcdWQ1ODlcdWQ1OTBcdWQ1YTVcdWQ1YzhcdWQ1YzlcdWQ1Y2NcdWQ1ZDBcdWQ1ZDJcdWQ1ZDhcdWQ1ZDlcdWQ1ZGJcdWQ1''@;'; put 'put ''ZGRcdWQ1ZTRcdWQ1ZTVcdWQ1ZThcdWQ1ZWNcdWQ1ZjRcdWQ1ZjVcdWQ1ZjdcdWQ1ZjlcdWQ2MDBcdWQ2MDFcdWQ2MDRcdWQ2MDhcdWQ2MTBcdWQ2MTFcdWQ2MTNcdWQ2MTRcdWQ2MTVcdWQ2MWNcdWQ2MjBcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxOTldLmxlbmd0aDsrK2cpNjU1MzMh''@;'; put 'put ''PT1fWzE5OV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxOTldW2ddXT01MDk0NCtnLHlbNTA5NDQrZ109X1sxOTldW2ddKTtmb3IoX1syMDBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ2MjRcdWQ2MmRcdWQ2MzhcdWQ2MzlcdWQ2M2NcdWQ2NDBcdWQ2NDVcdWQ2NDhcdWQ2NDlcdWQ2NGJcdWQ2NGRcdWQ2NTFcdWQ2NTRcdWQ2NTVcdWQ2NThcdWQ2NWNcdWQ2NjdcdWQ2''@;'; put 'put ''NjlcdWQ2NzBcdWQ2NzFcdWQ2NzRcdWQ2ODNcdWQ2ODVcdWQ2OGNcdWQ2OGRcdWQ2OTBcdWQ2OTRcdWQ2OWRcdWQ2OWZcdWQ2YTFcdWQ2YThcdWQ2YWNcdWQ2YjBcdWQ2YjlcdWQ2YmJcdWQ2YzRcdWQ2YzVcdWQ2YzhcdWQ2Y2NcdWQ2ZDFcdWQ2ZDRcdWQ2ZDdcdWQ2ZDlcdWQ2ZTBcdWQ2ZTRc''@;'; put 'put ''dWQ2ZThcdWQ2ZjBcdWQ2ZjVcdWQ2ZmNcdWQ2ZmRcdWQ3MDBcdWQ3MDRcdWQ3MTFcdWQ3MThcdWQ3MTlcdWQ3MWNcdWQ3MjBcdWQ3MjhcdWQ3MjlcdWQ3MmJcdWQ3MmRcdWQ3MzRcdWQ3MzVcdWQ3MzhcdWQ3M2NcdWQ3NDRcdWQ3NDdcdWQ3NDlcdWQ3NTBcdWQ3NTFcdWQ3NTRcdWQ3NTZcdWQ3''@;'; put 'put ''NTdcdWQ3NThcdWQ3NTlcdWQ3NjBcdWQ3NjFcdWQ3NjNcdWQ3NjVcdWQ3NjlcdWQ3NmNcdWQ3NzBcdWQ3NzRcdWQ3N2NcdWQ3N2RcdWQ3ODFcdWQ3ODhcdWQ3ODlcdWQ3OGNcdWQ3OTBcdWQ3OThcdWQ3OTlcdWQ3OWJcdWQ3OWRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMDBdLmxlbmd0''@;'; put 'put ''aDsrK2cpNjU1MzMhPT1fWzIwMF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMDBdW2ddXT01MTIwMCtnLHlbNTEyMDArZ109X1syMDBdW2ddKTtmb3IoX1syMDJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRmM2RcdTRmNzNcdTUwNDdcdTUwZjlcdTUyYTBcdTUzZWZcdTU0NzVcdTU0ZTVcdTU2MDlcdTVhYzFcdTViYjZcdTY2ODdcdTY3YjZcdTY3YjdcdTY3ZWZcdTZi''@;'; put 'put ''NGNcdTczYzJcdTc1YzJcdTdhM2NcdTgyZGJcdTgzMDRcdTg4NTdcdTg4ODhcdThhMzZcdThjYzhcdThkY2ZcdThlZmJcdThmZTZcdTk5ZDVcdTUyM2JcdTUzNzRcdTU0MDRcdTYwNmFcdTYxNjRcdTZiYmNcdTczY2ZcdTgxMWFcdTg5YmFcdTg5ZDJcdTk1YTNcdTRmODNcdTUyMGFcdTU4YmVc''@;'; put 'put ''dTU5NzhcdTU5ZTZcdTVlNzJcdTVlNzlcdTYxYzdcdTYzYzBcdTY3NDZcdTY3ZWNcdTY4N2ZcdTZmOTdcdTc2NGVcdTc3MGJcdTc4ZjVcdTdhMDhcdTdhZmZcdTdjMjFcdTgwOWRcdTgyNmVcdTgyNzFcdThhZWJcdTk1OTNcdTRlNmJcdTU1OWRcdTY2ZjdcdTZlMzRcdTc4YTNcdTdhZWRcdTg0''@;'; put 'put ''NWJcdTg5MTBcdTg3NGVcdTk3YThcdTUyZDhcdTU3NGVcdTU4MmFcdTVkNGNcdTYxMWZcdTYxYmVcdTYyMjFcdTY1NjJcdTY3ZDFcdTZhNDRcdTZlMWJcdTc1MThcdTc1YjNcdTc2ZTNcdTc3YjBcdTdkM2FcdTkwYWZcdTk0NTFcdTk0NTJcdTlmOTVcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9''@;'; put 'put ''X1syMDJdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIwMl1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMDJdW2ddXT01MTcxMitnLHlbNTE3MTIrZ109X1syMDJdW2ddKTtmb3IoX1syMDNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUzMjNcdTVjYWNcdTc1MzJcdTgwZGJcdTkyNDBcdTk1OThcdTUyNWJcdTU4MDhcdTU5ZGNcdTVjYTFcdTVkMTdcdTVlYjdcdTVmM2FcdTVm''@;'; put 'put ''NGFcdTYxNzdcdTZjNWZcdTc1N2FcdTc1ODZcdTdjZTBcdTdkNzNcdTdkYjFcdTdmOGNcdTgxNTRcdTgyMjFcdTg1OTFcdTg5NDFcdThiMWJcdTkyZmNcdTk2NGRcdTljNDdcdTRlY2JcdTRlZjdcdTUwMGJcdTUxZjFcdTU4NGZcdTYxMzdcdTYxM2VcdTYxNjhcdTY1MzlcdTY5ZWFcdTZmMTFc''@;'; put 'put ''dTc1YTVcdTc2ODZcdTc2ZDZcdTdiODdcdTgyYTVcdTg0Y2JcdWY5MDBcdTkzYTdcdTk1OGJcdTU1ODBcdTViYTJcdTU3NTFcdWY5MDFcdTdjYjNcdTdmYjlcdTkxYjVcdTUwMjhcdTUzYmJcdTVjNDVcdTVkZThcdTYyZDJcdTYzNmVcdTY0ZGFcdTY0ZTdcdTZlMjBcdTcwYWNcdTc5NWJcdThk''@;'; put 'put ''ZGRcdThlMWVcdWY5MDJcdTkwN2RcdTkyNDVcdTkyZjhcdTRlN2VcdTRlZjZcdTUwNjVcdTVkZmVcdTVlZmFcdTYxMDZcdTY5NTdcdTgxNzFcdTg2NTRcdThlNDdcdTkzNzVcdTlhMmJcdTRlNWVcdTUwOTFcdTY3NzBcdTY4NDBcdTUxMDlcdTUyOGRcdTUyOTJcdTZhYTJcdWZmZmQiLnNwbGl0''@;'; put 'put ''KCIiKSxnPTA7ZyE9X1syMDNdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIwM11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMDNdW2ddXT01MTk2OCtnLHlbNTE5NjgrZ109X1syMDNdW2ddKTtmb3IoX1syMDRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc3YmNcdTkyMTBcdTllZDRcdTUyYWJcdTYwMmZcdThmZjJcdTUwNDhcdTYxYTlcdTYzZWRcdTY0Y2FcdTY4M2NcdTZh''@;'; put 'put ''ODRcdTZmYzBcdTgxODhcdTg5YTFcdTk2OTRcdTU4MDVcdTcyN2RcdTcyYWNcdTc1MDRcdTdkNzlcdTdlNmRcdTgwYTlcdTg5OGJcdThiNzRcdTkwNjNcdTlkNTFcdTYyODlcdTZjN2FcdTZmNTRcdTdkNTBcdTdmM2FcdThhMjNcdTUxN2NcdTYxNGFcdTdiOWRcdThiMTlcdTkyNTdcdTkzOGNc''@;'; put 'put ''dTRlYWNcdTRmZDNcdTUwMWVcdTUwYmVcdTUxMDZcdTUyYzFcdTUyY2RcdTUzN2ZcdTU3NzBcdTU4ODNcdTVlOWFcdTVmOTFcdTYxNzZcdTYxYWNcdTY0Y2VcdTY1NmNcdTY2NmZcdTY2YmJcdTY2ZjRcdTY4OTdcdTZkODdcdTcwODVcdTcwZjFcdTc0OWZcdTc0YTVcdTc0Y2FcdTc1ZDlcdTc4''@;'; put 'put ''NmNcdTc4ZWNcdTdhZGZcdTdhZjZcdTdkNDVcdTdkOTNcdTgwMTVcdTgwM2ZcdTgxMWJcdTgzOTZcdThiNjZcdThmMTVcdTkwMTVcdTkzZTFcdTk4MDNcdTk4MzhcdTlhNWFcdTliZThcdTRmYzJcdTU1NTNcdTU4M2FcdTU5NTFcdTViNjNcdTVjNDZcdTYwYjhcdTYyMTJcdTY4NDJcdTY4YjBc''@;'; put 'put ''dWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMDRdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIwNF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMDRdW2ddXT01MjIyNCtnLHlbNTIyMjQrZ109X1syMDRdW2ddKTtmb3IoX1syMDVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY4ZThcdTZlYWFcdTc1NGNcdTc2NzhcdTc4Y2VcdTdhM2RcdTdjZmJcdTdlNmJcdTdlN2NcdThh''@;'; put 'put ''MDhcdThhYTFcdThjM2ZcdTk2OGVcdTlkYzRcdTUzZTRcdTUzZTlcdTU0NGFcdTU0NzFcdTU2ZmFcdTU5ZDFcdTViNjRcdTVjM2JcdTVlYWJcdTYyZjdcdTY1MzdcdTY1NDVcdTY1NzJcdTY2YTBcdTY3YWZcdTY5YzFcdTZjYmRcdTc1ZmNcdTc2OTBcdTc3N2VcdTdhM2ZcdTdmOTRcdTgwMDNc''@;'; put 'put ''dTgwYTFcdTgxOGZcdTgyZTZcdTgyZmRcdTgzZjBcdTg1YzFcdTg4MzFcdTg4YjRcdThhYTVcdWY5MDNcdThmOWNcdTkzMmVcdTk2YzdcdTk4NjdcdTlhZDhcdTlmMTNcdTU0ZWRcdTY1OWJcdTY2ZjJcdTY4OGZcdTdhNDBcdThjMzdcdTlkNjBcdTU2ZjBcdTU3NjRcdTVkMTFcdTY2MDZcdTY4''@;'; put 'put ''YjFcdTY4Y2RcdTZlZmVcdTc0MjhcdTg4OWVcdTliZTRcdTZjNjhcdWY5MDRcdTlhYThcdTRmOWJcdTUxNmNcdTUxNzFcdTUyOWZcdTViNTRcdTVkZTVcdTYwNTBcdTYwNmRcdTYyZjFcdTYzYTdcdTY1M2JcdTczZDlcdTdhN2FcdTg2YTNcdThjYTJcdTk3OGZcdTRlMzJcdTViZTFcdTYyMDhc''@;'; put 'put ''dTY3OWNcdTc0ZGNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMDVdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIwNV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMDVdW2ddXT01MjQ4MCtnLHlbNTI0ODArZ109X1syMDVdW2ddKTtmb3IoX1syMDZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc5ZDFcdTgzZDNcdThhODdcdThhYjJcdThkZThcdTkwNGVcdTkzNGJcdTk4''@;'; put 'put ''NDZcdTVlZDNcdTY5ZThcdTg1ZmZcdTkwZWRcdWY5MDVcdTUxYTBcdTViOThcdTViZWNcdTYxNjNcdTY4ZmFcdTZiM2VcdTcwNGNcdTc0MmZcdTc0ZDhcdTdiYTFcdTdmNTBcdTgzYzVcdTg5YzBcdThjYWJcdTk1ZGNcdTk5MjhcdTUyMmVcdTYwNWRcdTYyZWNcdTkwMDJcdTRmOGFcdTUxNDlc''@;'; put 'put ''dTUzMjFcdTU4ZDlcdTVlZTNcdTY2ZTBcdTZkMzhcdTcwOWFcdTcyYzJcdTczZDZcdTdiNTBcdTgwZjFcdTk0NWJcdTUzNjZcdTYzOWJcdTdmNmJcdTRlNTZcdTUwODBcdTU4NGFcdTU4ZGVcdTYwMmFcdTYxMjdcdTYyZDBcdTY5ZDBcdTliNDFcdTViOGZcdTdkMThcdTgwYjFcdThmNWZcdTRl''@;'; put 'put ''YTRcdTUwZDFcdTU0YWNcdTU1YWNcdTViMGNcdTVkYTBcdTVkZTdcdTY1MmFcdTY1NGVcdTY4MjFcdTZhNGJcdTcyZTFcdTc2OGVcdTc3ZWZcdTdkNWVcdTdmZjlcdTgxYTBcdTg1NGVcdTg2ZGZcdThmMDNcdThmNGVcdTkwY2FcdTk5MDNcdTlhNTVcdTliYWJcdTRlMThcdTRlNDVcdTRlNWRc''@;'; put 'put ''dTRlYzdcdTRmZjFcdTUxNzdcdTUyZmVcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMDZdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIwNl1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMDZdW2ddXT01MjczNitnLHlbNTI3MzYrZ109X1syMDZdW2ddKTtmb3IoX1syMDddPSJcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUzNDBcdTUzZTNcdTUzZTVcdTU0OGVcdTU2MTRcdTU3''@;'; put 'put ''NzVcdTU3YTJcdTViYzdcdTVkODdcdTVlZDBcdTYxZmNcdTYyZDhcdTY1NTFcdTY3YjhcdTY3ZTlcdTY5Y2JcdTZiNTBcdTZiYzZcdTZiZWNcdTZjNDJcdTZlOWRcdTcwNzhcdTcyZDdcdTczOTZcdTc0MDNcdTc3YmZcdTc3ZTlcdTdhNzZcdTdkN2ZcdTgwMDlcdTgxZmNcdTgyMDVcdTgyMGFc''@;'; put 'put ''dTgyZGZcdTg4NjJcdThiMzNcdThjZmNcdThlYzBcdTkwMTFcdTkwYjFcdTkyNjRcdTkyYjZcdTk5ZDJcdTlhNDVcdTljZTlcdTlkZDdcdTlmOWNcdTU3MGJcdTVjNDBcdTgzY2FcdTk3YTBcdTk3YWJcdTllYjRcdTU0MWJcdTdhOThcdTdmYTRcdTg4ZDlcdThlY2RcdTkwZTFcdTU4MDBcdTVj''@;'; put 'put ''NDhcdTYzOThcdTdhOWZcdTViYWVcdTVmMTNcdTdhNzlcdTdhYWVcdTgyOGVcdThlYWNcdTUwMjZcdTUyMzhcdTUyZjhcdTUzNzdcdTU3MDhcdTYyZjNcdTYzNzJcdTZiMGFcdTZkYzNcdTc3MzdcdTUzYTVcdTczNTdcdTg1NjhcdThlNzZcdTk1ZDVcdTY3M2FcdTZhYzNcdTZmNzBcdThhNmRc''@;'; put 'put ''dThlY2NcdTk5NGJcdWY5MDZcdTY2NzdcdTZiNzhcdThjYjRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMDddLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIwN11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMDddW2ddXT01Mjk5MitnLHlbNTI5OTIrZ109X1syMDddW2ddKTtmb3IoX1syMDhd''@;'; put 'put ''PSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTliM2NcdWY5MDdcdTUzZWJcdTU3''@;'; put 'put ''MmRcdTU5NGVcdTYzYzZcdTY5ZmJcdTczZWFcdTc4NDVcdTdhYmFcdTdhYzVcdTdjZmVcdTg0NzVcdTg5OGZcdThkNzNcdTkwMzVcdTk1YThcdTUyZmJcdTU3NDdcdTc1NDdcdTdiNjBcdTgzY2NcdTkyMWVcdWY5MDhcdTZhNThcdTUxNGJcdTUyNGJcdTUyODdcdTYyMWZcdTY4ZDhcdTY5NzVc''@;'; put 'put ''dTk2OTlcdTUwYzVcdTUyYTRcdTUyZTRcdTYxYzNcdTY1YTRcdTY4MzlcdTY5ZmZcdTc0N2VcdTdiNGJcdTgyYjlcdTgzZWJcdTg5YjJcdThiMzlcdThmZDFcdTk5NDlcdWY5MDlcdTRlY2FcdTU5OTdcdTY0ZDJcdTY2MTFcdTZhOGVcdTc0MzRcdTc5ODFcdTc5YmRcdTgyYTlcdTg4N2VcdTg4''@;'; put 'put ''N2ZcdTg5NWZcdWY5MGFcdTkzMjZcdTRmMGJcdTUzY2FcdTYwMjVcdTYyNzFcdTZjNzJcdTdkMWFcdTdkNjZcdTRlOThcdTUxNjJcdTc3ZGNcdTgwYWZcdTRmMDFcdTRmMGVcdTUxNzZcdTUxODBcdTU1ZGNcdTU2NjhcdTU3M2JcdTU3ZmFcdTU3ZmNcdTU5MTRcdTU5NDdcdTU5OTNcdTViYzRc''@;'; put 'put ''dTVjOTBcdTVkMGVcdTVkZjFcdTVlN2VcdTVmY2NcdTYyODBcdTY1ZDdcdTY1ZTNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMDhdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIwOF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMDhdW2ddXT01MzI0OCtnLHlbNTMyNDgrZ109X1syMDhdW2dd''@;'; put 'put ''KTtmb3IoX1syMDldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY3MWVcdTY3''@;'; put 'put ''MWZcdTY3NWVcdTY4Y2JcdTY4YzRcdTZhNWZcdTZiM2FcdTZjMjNcdTZjN2RcdTZjODJcdTZkYzdcdTczOThcdTc0MjZcdTc0MmFcdTc0ODJcdTc0YTNcdTc1NzhcdTc1N2ZcdTc4ODFcdTc4ZWZcdTc5NDFcdTc5NDdcdTc5NDhcdTc5N2FcdTdiOTVcdTdkMDBcdTdkYmFcdTdmODhcdTgwMDZc''@;'; put 'put ''dTgwMmRcdTgwOGNcdThhMThcdThiNGZcdThjNDhcdThkNzdcdTkzMjFcdTkzMjRcdTk4ZTJcdTk5NTFcdTlhMGVcdTlhMGZcdTlhNjVcdTllOTJcdTdkY2FcdTRmNzZcdTU0MDlcdTYyZWVcdTY4NTRcdTkxZDFcdTU1YWJcdTUxM2FcdWY5MGJcdWY5MGNcdTVhMWNcdTYxZTZcdWY5MGRcdTYy''@;'; put 'put ''Y2ZcdTYyZmZcdWY5MGVcdWY5MGZcdWY5MTBcdWY5MTFcdWY5MTJcdWY5MTNcdTkwYTNcdWY5MTRcdWY5MTVcdWY5MTZcdWY5MTdcdWY5MThcdThhZmVcdWY5MTlcdWY5MWFcdWY5MWJcdWY5MWNcdTY2OTZcdWY5MWRcdTcxNTZcdWY5MWVcdWY5MWZcdTk2ZTNcdWY5MjBcdTYzNGZcdTYzN2Fc''@;'; put 'put ''dTUzNTdcdWY5MjFcdTY3OGZcdTY5NjBcdTZlNzNcdWY5MjJcdTc1MzdcdWY5MjNcdWY5MjRcdWY5MjVcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMDldLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIwOV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMDldW2ddXT01MzUwNCtnLHlbNTM1MDQr''@;'; put 'put ''Z109X1syMDldW2ddKTtmb3IoX1syMTBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdTdkMGRcdWY5MjZcdWY5MjdcdTg4NzJcdTU2Y2FcdTVhMThcdWY5MjhcdWY5MjlcdWY5MmFcdWY5MmJcdWY5MmNcdTRlNDNcdWY5MmRcdTUxNjdcdTU5NDhcdTY3ZjBcdTgwMTBcdWY5MmVcdTU5NzNcdTVlNzRcdTY0OWFcdTc5Y2FcdTVmZjVcdTYwNmNcdTYyYzhcdTYzN2JcdTViZTdc''@;'; put 'put ''dTViZDdcdTUyYWFcdWY5MmZcdTU5NzRcdTVmMjlcdTYwMTJcdWY5MzBcdWY5MzFcdWY5MzJcdTc0NTlcdWY5MzNcdWY5MzRcdWY5MzVcdWY5MzZcdWY5MzdcdWY5MzhcdTk5ZDFcdWY5MzlcdWY5M2FcdWY5M2JcdWY5M2NcdWY5M2RcdWY5M2VcdWY5M2ZcdWY5NDBcdWY5NDFcdWY5NDJcdWY5''@;'; put 'put ''NDNcdTZmYzNcdWY5NDRcdWY5NDVcdTgxYmZcdThmYjJcdTYwZjFcdWY5NDZcdWY5NDdcdTgxNjZcdWY5NDhcdWY5NDlcdTVjM2ZcdWY5NGFcdWY5NGJcdWY5NGNcdWY5NGRcdWY5NGVcdWY5NGZcdWY5NTBcdWY5NTFcdTVhZTlcdThhMjVcdTY3N2JcdTdkMTBcdWY5NTJcdWY5NTNcdWY5NTRc''@;'; put 'put ''dWY5NTVcdWY5NTZcdWY5NTdcdTgwZmRcdWY5NThcdWY5NTlcdTVjM2NcdTZjZTVcdTUzM2ZcdTZlYmFcdTU5MWFcdTgzMzZcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMTBdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIxMF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMTBdW2ddXT01Mzc2''@;'; put 'put ''MCtnLHlbNTM3NjArZ109X1syMTBdW2ddKTtmb3IoX1syMTFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdTRlMzlcdTRlYjZcdTRmNDZcdTU1YWVcdTU3MThcdTU4YzdcdTVmNTZcdTY1YjdcdTY1ZTZcdTZhODBcdTZiYjVcdTZlNGRcdTc3ZWRcdTdhZWZcdTdjMWVcdTdkZGVcdTg2Y2JcdTg4OTJcdTkxMzJcdTkzNWJcdTY0YmJcdTZmYmVcdTczN2FcdTc1YjhcdTkwNTRc''@;'; put 'put ''dTU1NTZcdTU3NGRcdTYxYmFcdTY0ZDRcdTY2YzdcdTZkZTFcdTZlNWJcdTZmNmRcdTZmYjlcdTc1ZjBcdTgwNDNcdTgxYmRcdTg1NDFcdTg5ODNcdThhYzdcdThiNWFcdTkzMWZcdTZjOTNcdTc1NTNcdTdiNTRcdThlMGZcdTkwNWRcdTU1MTBcdTU4MDJcdTU4NThcdTVlNjJcdTYyMDdcdTY0''@;'; put 'put ''OWVcdTY4ZTBcdTc1NzZcdTdjZDZcdTg3YjNcdTllZThcdTRlZTNcdTU3ODhcdTU3NmVcdTU5MjdcdTVjMGRcdTVjYjFcdTVlMzZcdTVmODVcdTYyMzRcdTY0ZTFcdTczYjNcdTgxZmFcdTg4OGJcdThjYjhcdTk2OGFcdTllZGJcdTViODVcdTVmYjdcdTYwYjNcdTUwMTJcdTUyMDBcdTUyMzBc''@;'; put 'put ''dTU3MTZcdTU4MzVcdTU4NTdcdTVjMGVcdTVjNjBcdTVjZjZcdTVkOGJcdTVlYTZcdTVmOTJcdTYwYmNcdTYzMTFcdTYzODlcdTY0MTdcdTY4NDNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMTFdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIxMV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sy''@;'; put 'put ''MTFdW2ddXT01NDAxNitnLHlbNTQwMTYrZ109X1syMTFdW2ddKTtmb3IoX1syMTJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY4ZjlcdTZhYzJcdTZkZDhcdTZlMjFcdTZlZDRcdTZmZTRcdTcxZmVcdTc2ZGNcdTc3NzlcdTc5YjFcdTdhM2JcdTg0MDRcdTg5YTlcdThjZWRcdThkZjNcdThlNDhcdTkwMDNcdTkwMTRcdTkwNTNcdTkwZmRcdTkzNGRcdTk2NzZcdTk3ZGNc''@;'; put 'put ''dTZiZDJcdTcwMDZcdTcyNThcdTcyYTJcdTczNjhcdTc3NjNcdTc5YmZcdTdiZTRcdTdlOWJcdThiODBcdTU4YTlcdTYwYzdcdTY1NjZcdTY1ZmRcdTY2YmVcdTZjOGNcdTcxMWVcdTcxYzlcdThjNWFcdTk4MTNcdTRlNmRcdTdhODFcdTRlZGRcdTUxYWNcdTUxY2RcdTUyZDVcdTU0MGNcdTYx''@;'; put 'put ''YTdcdTY3NzFcdTY4NTBcdTY4ZGZcdTZkMWVcdTZmN2NcdTc1YmNcdTc3YjNcdTdhZTVcdTgwZjRcdTg0NjNcdTkyODVcdTUxNWNcdTY1OTdcdTY3NWNcdTY3OTNcdTc1ZDhcdTdhYzdcdTgzNzNcdWY5NWFcdThjNDZcdTkwMTdcdTk4MmRcdTVjNmZcdTgxYzBcdTgyOWFcdTkwNDFcdTkwNmZc''@;'; put 'put ''dTkyMGRcdTVmOTdcdTVkOWRcdTZhNTlcdTcxYzhcdTc2N2JcdTdiNDlcdTg1ZTRcdThiMDRcdTkxMjdcdTlhMzBcdTU1ODdcdTYxZjZcdWY5NWJcdTc2NjlcdTdmODVcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMTJdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIxMl1bZ10uY2hhckNvZGVB''@;'; put 'put ''dCgwKSYmKElbX1syMTJdW2ddXT01NDI3MitnLHlbNTQyNzIrZ109X1syMTJdW2ddKTtmb3IoX1syMTNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg2M2ZcdTg3YmFcdTg4ZjhcdTkwOGZcdWY5NWNcdTZkMWJcdTcwZDlcdTczZGVcdTdkNjFcdTg0M2RcdWY5NWRcdTkxNmFcdTk5ZjFcdWY5NWVcdTRlODJcdTUzNzVcdTZiMDRcdTZiMTJcdTcwM2VcdTcyMWJcdTg2MmRc''@;'; put 'put ''dTllMWVcdTUyNGNcdThmYTNcdTVkNTBcdTY0ZTVcdTY1MmNcdTZiMTZcdTZmZWJcdTdjNDNcdTdlOWNcdTg1Y2RcdTg5NjRcdTg5YmRcdTYyYzlcdTgxZDhcdTg4MWZcdTVlY2FcdTY3MTdcdTZkNmFcdTcyZmNcdTc0MDVcdTc0NmZcdTg3ODJcdTkwZGVcdTRmODZcdTVkMGRcdTVmYTBcdTg0''@;'; put 'put ''MGFcdTUxYjdcdTYzYTBcdTc1NjVcdTRlYWVcdTUwMDZcdTUxNjlcdTUxYzlcdTY4ODFcdTZhMTFcdTdjYWVcdTdjYjFcdTdjZTdcdTgyNmZcdThhZDJcdThmMWJcdTkxY2ZcdTRmYjZcdTUxMzdcdTUyZjVcdTU0NDJcdTVlZWNcdTYxNmVcdTYyM2VcdTY1YzVcdTZhZGFcdTZmZmVcdTc5MmFc''@;'; put 'put ''dTg1ZGNcdTg4MjNcdTk1YWRcdTlhNjJcdTlhNmFcdTllOTdcdTllY2VcdTUyOWJcdTY2YzZcdTZiNzdcdTcwMWRcdTc5MmJcdThmNjJcdTk3NDJcdTYxOTBcdTYyMDBcdTY1MjNcdTZmMjNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMTNdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIxM11b''@;'; put 'put ''Z10uY2hhckNvZGVBdCgwKSYmKElbX1syMTNdW2ddXT01NDUyOCtnLHlbNTQ1MjgrZ109X1syMTNdW2ddKTtmb3IoX1syMTRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTcxNDlcdTc0ODlcdTdkZjRcdTgwNmZcdTg0ZWVcdThmMjZcdTkwMjNcdTkzNGFcdTUxYmRcdTUyMTdcdTUyYTNcdTZkMGNcdTcwYzhcdTg4YzJcdTVlYzlcdTY1ODJcdTZiYWVcdTZmYzJcdTdjM2Vc''@;'; put 'put ''dTczNzVcdTRlZTRcdTRmMzZcdTU2ZjlcdWY5NWZcdTVjYmFcdTVkYmFcdTYwMWNcdTczYjJcdTdiMmRcdTdmOWFcdTdmY2VcdTgwNDZcdTkwMWVcdTkyMzRcdTk2ZjZcdTk3NDhcdTk4MThcdTlmNjFcdTRmOGJcdTZmYTdcdTc5YWVcdTkxYjRcdTk2YjdcdTUyZGVcdWY5NjBcdTY0ODhcdTY0''@;'; put 'put ''YzRcdTZhZDNcdTZmNWVcdTcwMThcdTcyMTBcdTc2ZTdcdTgwMDFcdTg2MDZcdTg2NWNcdThkZWZcdThmMDVcdTk3MzJcdTliNmZcdTlkZmFcdTllNzVcdTc4OGNcdTc5N2ZcdTdkYTBcdTgzYzlcdTkzMDRcdTllN2ZcdTllOTNcdThhZDZcdTU4ZGZcdTVmMDRcdTY3MjdcdTcwMjdcdTc0Y2Zc''@;'; put 'put ''dTdjNjBcdTgwN2VcdTUxMjFcdTcwMjhcdTcyNjJcdTc4Y2FcdThjYzJcdThjZGFcdThjZjRcdTk2ZjdcdTRlODZcdTUwZGFcdTViZWVcdTVlZDZcdTY1OTlcdTcxY2VcdTc2NDJcdTc3YWRcdTgwNGFcdTg0ZmNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMTRdLmxlbmd0aDsrK2cpNjU1''@;'; put 'put ''MzMhPT1fWzIxNF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMTRdW2ddXT01NDc4NCtnLHlbNTQ3ODQrZ109X1syMTRdW2ddKTtmb3IoX1syMTVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkwN2NcdTliMjdcdTlmOGRcdTU4ZDhcdTVhNDFcdTVjNjJcdTZhMTNcdTZkZGFcdTZmMGZcdTc2M2JcdTdkMmZcdTdlMzdcdTg1MWVcdTg5MzhcdTkzZTRcdTk2NGJcdTUyODlc''@;'; put 'put ''dTY1ZDJcdTY3ZjNcdTY5YjRcdTZkNDFcdTZlOWNcdTcwMGZcdTc0MDlcdTc0NjBcdTc1NTlcdTc2MjRcdTc4NmJcdThiMmNcdTk4NWVcdTUxNmRcdTYyMmVcdTk2NzhcdTRmOTZcdTUwMmJcdTVkMTlcdTZkZWFcdTdkYjhcdThmMmFcdTVmOGJcdTYxNDRcdTY4MTdcdWY5NjFcdTk2ODZcdTUy''@;'; put 'put ''ZDJcdTgwOGJcdTUxZGNcdTUxY2NcdTY5NWVcdTdhMWNcdTdkYmVcdTgzZjFcdTk2NzVcdTRmZGFcdTUyMjlcdTUzOThcdTU0MGZcdTU1MGVcdTVjNjVcdTYwYTdcdTY3NGVcdTY4YThcdTZkNmNcdTcyODFcdTcyZjhcdTc0MDZcdTc0ODNcdWY5NjJcdTc1ZTJcdTdjNmNcdTdmNzlcdTdmYjhc''@;'; put 'put ''dTgzODlcdTg4Y2ZcdTg4ZTFcdTkxY2NcdTkxZDBcdTk2ZTJcdTliYzlcdTU0MWRcdTZmN2VcdTcxZDBcdTc0OThcdTg1ZmFcdThlYWFcdTk2YTNcdTljNTdcdTllOWZcdTY3OTdcdTZkY2JcdTc0MzNcdTgxZThcdTk3MTZcdTc4MmNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMTVdLmxl''@;'; put 'put ''bmd0aDsrK2cpNjU1MzMhPT1fWzIxNV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMTVdW2ddXT01NTA0MCtnLHlbNTUwNDArZ109X1syMTVdW2ddKTtmb3IoX1syMTZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdhY2JcdTdiMjBcdTdjOTJcdTY0NjlcdTc0NmFcdTc1ZjJcdTc4YmNcdTc4ZThcdTk5YWNcdTliNTRcdTllYmJcdTViZGVcdTVlNTVcdTZmMjBcdTgxOWNc''@;'; put 'put ''dTgzYWJcdTkwODhcdTRlMDdcdTUzNGRcdTVhMjlcdTVkZDJcdTVmNGVcdTYxNjJcdTYzM2RcdTY2NjlcdTY2ZmNcdTZlZmZcdTZmMmJcdTcwNjNcdTc3OWVcdTg0MmNcdTg1MTNcdTg4M2JcdThmMTNcdTk5NDVcdTljM2JcdTU1MWNcdTYyYjlcdTY3MmJcdTZjYWJcdTgzMDlcdTg5NmFcdTk3''@;'; put 'put ''N2FcdTRlYTFcdTU5ODRcdTVmZDhcdTVmZDlcdTY3MWJcdTdkYjJcdTdmNTRcdTgyOTJcdTgzMmJcdTgzYmRcdThmMWVcdTkwOTlcdTU3Y2JcdTU5YjlcdTVhOTJcdTViZDBcdTY2MjdcdTY3OWFcdTY4ODVcdTZiY2ZcdTcxNjRcdTdmNzVcdThjYjdcdThjZTNcdTkwODFcdTliNDVcdTgxMDhc''@;'; put 'put ''dThjOGFcdTk2NGNcdTlhNDBcdTllYTVcdTViNWZcdTZjMTNcdTczMWJcdTc2ZjJcdTc2ZGZcdTg0MGNcdTUxYWFcdTg5OTNcdTUxNGRcdTUxOTVcdTUyYzlcdTY4YzlcdTZjOTRcdTc3MDRcdTc3MjBcdTdkYmZcdTdkZWNcdTk3NjJcdTllYjVcdTZlYzVcdWZmZmQiLnNwbGl0KCIiKSxnPTA7''@;'; put 'put ''ZyE9X1syMTZdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIxNl1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMTZdW2ddXT01NTI5NitnLHlbNTUyOTYrZ109X1syMTZdW2ddKTtmb3IoX1syMTddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg1MTFcdTUxYTVcdTU0MGRcdTU0N2RcdTY2MGVcdTY2OWRcdTY5MjdcdTZlOWZcdTc2YmZcdTc3OTFcdTgzMTdcdTg0YzJcdTg3OWZc''@;'; put 'put ''dTkxNjlcdTkyOThcdTljZjRcdTg4ODJcdTRmYWVcdTUxOTJcdTUyZGZcdTU5YzZcdTVlM2RcdTYxNTVcdTY0NzhcdTY0NzlcdTY2YWVcdTY3ZDBcdTZhMjFcdTZiY2RcdTZiZGJcdTcyNWZcdTcyNjFcdTc0NDFcdTc3MzhcdTc3ZGJcdTgwMTdcdTgyYmNcdTgzMDVcdThiMDBcdThiMjhcdThj''@;'; put 'put ''OGNcdTY3MjhcdTZjOTBcdTcyNjdcdTc2ZWVcdTc3NjZcdTdhNDZcdTlkYTlcdTZiN2ZcdTZjOTJcdTU5MjJcdTY3MjZcdTg0OTlcdTUzNmZcdTU4OTNcdTU5OTlcdTVlZGZcdTYzY2ZcdTY2MzRcdTY3NzNcdTZlM2FcdTczMmJcdTdhZDdcdTgyZDdcdTkzMjhcdTUyZDlcdTVkZWJcdTYxYWVc''@;'; put 'put ''dTYxY2JcdTYyMGFcdTYyYzdcdTY0YWJcdTY1ZTBcdTY5NTlcdTZiNjZcdTZiY2JcdTcxMjFcdTczZjdcdTc1NWRcdTdlNDZcdTgyMWVcdTgzMDJcdTg1NmFcdThhYTNcdThjYmZcdTk3MjdcdTlkNjFcdTU4YThcdTllZDhcdTUwMTFcdTUyMGVcdTU0M2JcdTU1NGZcdTY1ODdcdWZmZmQiLnNw''@;'; put 'put ''bGl0KCIiKSxnPTA7ZyE9X1syMTddLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIxN11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMTddW2ddXT01NTU1MitnLHlbNTU1NTIrZ109X1syMTddW2ddKTtmb3IoX1syMThdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZjNzZcdTdkMGFcdTdkMGJcdTgwNWVcdTg2OGFcdTk1ODBcdTk2ZWZcdTUyZmZcdTZjOTVcdTcyNjlcdTU0NzNc''@;'; put 'put ''dTVhOWFcdTVjM2VcdTVkNGJcdTVmNGNcdTVmYWVcdTY3MmFcdTY4YjZcdTY5NjNcdTZlM2NcdTZlNDRcdTc3MDlcdTdjNzNcdTdmOGVcdTg1ODdcdThiMGVcdThmZjdcdTk3NjFcdTllZjRcdTVjYjdcdTYwYjZcdTYxMGRcdTYxYWJcdTY1NGZcdTY1ZmJcdTY1ZmNcdTZjMTFcdTZjZWZcdTcz''@;'; put 'put ''OWZcdTczYzlcdTdkZTFcdTk1OTRcdTViYzZcdTg3MWNcdThiMTBcdTUyNWRcdTUzNWFcdTYyY2RcdTY0MGZcdTY0YjJcdTY3MzRcdTZhMzhcdTZjY2FcdTczYzBcdTc0OWVcdTdiOTRcdTdjOTVcdTdlMWJcdTgxOGFcdTgyMzZcdTg1ODRcdThmZWJcdTk2ZjlcdTk5YzFcdTRmMzRcdTUzNGFc''@;'; put 'put ''dTUzY2RcdTUzZGJcdTYyY2NcdTY0MmNcdTY1MDBcdTY1OTFcdTY5YzNcdTZjZWVcdTZmNThcdTczZWRcdTc1NTRcdTc2MjJcdTc2ZTRcdTc2ZmNcdTc4ZDBcdTc4ZmJcdTc5MmNcdTdkNDZcdTgyMmNcdTg3ZTBcdThmZDRcdTk4MTJcdTk4ZWZcdTUyYzNcdTYyZDRcdTY0YTVcdTZlMjRcdTZm''@;'; put 'put ''NTFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMThdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIxOF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMThdW2ddXT01NTgwOCtnLHlbNTU4MDgrZ109X1syMThdW2ddKTtmb3IoX1syMTldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc2N2NcdThkY2JcdTkxYjFcdTkyNjJcdTlhZWVcdTliNDNcdTUwMjNcdTUwOGRcdTU3NGFc''@;'; put 'put ''dTU5YThcdTVjMjhcdTVlNDdcdTVmNzdcdTYyM2ZcdTY1M2VcdTY1YjlcdTY1YzFcdTY2MDlcdTY3OGJcdTY5OWNcdTZlYzJcdTc4YzVcdTdkMjFcdTgwYWFcdTgxODBcdTgyMmJcdTgyYjNcdTg0YTFcdTg2OGNcdThhMmFcdThiMTdcdTkwYTZcdTk2MzJcdTlmOTBcdTUwMGRcdTRmZjNcdWY5''@;'; put 'put ''NjNcdTU3ZjlcdTVmOThcdTYyZGNcdTYzOTJcdTY3NmZcdTZlNDNcdTcxMTlcdTc2YzNcdTgwY2NcdTgwZGFcdTg4ZjRcdTg4ZjVcdTg5MTlcdThjZTBcdThmMjlcdTkxNGRcdTk2NmFcdTRmMmZcdTRmNzBcdTVlMWJcdTY3Y2ZcdTY4MjJcdTc2N2RcdTc2N2VcdTliNDRcdTVlNjFcdTZhMGFc''@;'; put 'put ''dTcxNjlcdTcxZDRcdTc1NmFcdWY5NjRcdTdlNDFcdTg1NDNcdTg1ZTlcdTk4ZGNcdTRmMTBcdTdiNGZcdTdmNzBcdTk1YTVcdTUxZTFcdTVlMDZcdTY4YjVcdTZjM2VcdTZjNGVcdTZjZGJcdTcyYWZcdTdiYzRcdTgzMDNcdTZjZDVcdTc0M2FcdTUwZmJcdTUyODhcdTU4YzFcdTY0ZDhcdTZh''@;'; put 'put ''OTdcdTc0YTdcdTc2NTZcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMTldLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIxOV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMTldW2ddXT01NjA2NCtnLHlbNTYwNjQrZ109X1syMTldW2ddKTtmb3IoX1syMjBdPSJcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc4YTdcdTg2MTdcdTk1ZTJcdTk3MzlcdWY5NjVcdTUzNWVcdTVmMDFc''@;'; put 'put ''dThiOGFcdThmYThcdThmYWZcdTkwOGFcdTUyMjVcdTc3YTVcdTljNDlcdTlmMDhcdTRlMTlcdTUwMDJcdTUxNzVcdTVjNWJcdTVlNzdcdTY2MWVcdTY2M2FcdTY3YzRcdTY4YzVcdTcwYjNcdTc1MDFcdTc1YzVcdTc5YzlcdTdhZGRcdThmMjdcdTk5MjBcdTlhMDhcdTRmZGRcdTU4MjFcdTU4''@;'; put 'put ''MzFcdTViZjZcdTY2NmVcdTZiNjVcdTZkMTFcdTZlN2FcdTZmN2RcdTczZTRcdTc1MmJcdTgzZTlcdTg4ZGNcdTg5MTNcdThiNWNcdThmMTRcdTRmMGZcdTUwZDVcdTUzMTBcdTUzNWNcdTViOTNcdTVmYTlcdTY3MGRcdTc5OGZcdTgxNzlcdTgzMmZcdTg1MTRcdTg5MDdcdTg5ODZcdThmMzlc''@;'; put 'put ''dThmM2JcdTk5YTVcdTljMTJcdTY3MmNcdTRlNzZcdTRmZjhcdTU5NDlcdTVjMDFcdTVjZWZcdTVjZjBcdTYzNjdcdTY4ZDJcdTcwZmRcdTcxYTJcdTc0MmJcdTdlMmJcdTg0ZWNcdTg3MDJcdTkwMjJcdTkyZDJcdTljZjNcdTRlMGRcdTRlZDhcdTRmZWZcdTUwODVcdTUyNTZcdTUyNmZcdTU0''@;'; put 'put ''MjZcdTU0OTBcdTU3ZTBcdTU5MmJcdTVhNjZcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMjBdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIyMF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMjBdW2ddXT01NjMyMCtnLHlbNTYzMjArZ109X1syMjBdW2ddKTtmb3IoX1syMjFdPSJcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTViNWFcdTViNzVcdTViY2NcdTVlOWNcdWY5NjZc''@;'; put 'put ''dTYyNzZcdTY1NzdcdTY1YTdcdTZkNmVcdTZlYTVcdTcyMzZcdTdiMjZcdTdjM2ZcdTdmMzZcdTgxNTBcdTgxNTFcdTgxOWFcdTgyNDBcdTgyOTlcdTgzYTlcdThhMDNcdThjYTBcdThjZTZcdThjZmJcdThkNzRcdThkYmFcdTkwZThcdTkxZGNcdTk2MWNcdTk2NDRcdTk5ZDlcdTljZTdcdTUz''@;'; put 'put ''MTdcdTUyMDZcdTU0MjlcdTU2NzRcdTU4YjNcdTU5NTRcdTU5NmVcdTVmZmZcdTYxYTRcdTYyNmVcdTY2MTBcdTZjN2VcdTcxMWFcdTc2YzZcdTdjODlcdTdjZGVcdTdkMWJcdTgyYWNcdThjYzFcdTk2ZjBcdWY5NjdcdTRmNWJcdTVmMTdcdTVmN2ZcdTYyYzJcdTVkMjlcdTY3MGJcdTY4ZGFc''@;'; put 'put ''dTc4N2NcdTdlNDNcdTlkNmNcdTRlMTVcdTUwOTlcdTUzMTVcdTUzMmFcdTUzNTFcdTU5ODNcdTVhNjJcdTVlODdcdTYwYjJcdTYxOGFcdTYyNDlcdTYyNzlcdTY1OTBcdTY3ODdcdTY5YTdcdTZiZDRcdTZiZDZcdTZiZDdcdTZiZDhcdTZjYjhcdWY5NjhcdTc0MzVcdTc1ZmFcdTc4MTJcdTc4''@;'; put 'put ''OTFcdTc5ZDVcdTc5ZDhcdTdjODNcdTdkY2JcdTdmZTFcdTgwYTVcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMjFdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIyMV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMjFdW2ddXT01NjU3NitnLHlbNTY1NzYrZ109X1syMjFdW2ddKTtmb3IoX1sy''@;'; put 'put ''MjJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgxM2VcdTgxYzJcdTgzZjJc''@;'; put 'put ''dTg3MWFcdTg4ZThcdThhYjlcdThiNmNcdThjYmJcdTkxMTlcdTk3NWVcdTk4ZGJcdTlmM2JcdTU2YWNcdTViMmFcdTVmNmNcdTY1OGNcdTZhYjNcdTZiYWZcdTZkNWNcdTZmZjFcdTcwMTVcdTcyNWRcdTczYWRcdThjYTdcdThjZDNcdTk4M2JcdTYxOTFcdTZjMzdcdTgwNThcdTlhMDFcdTRl''@;'; put 'put ''NGRcdTRlOGJcdTRlOWJcdTRlZDVcdTRmM2FcdTRmM2NcdTRmN2ZcdTRmZGZcdTUwZmZcdTUzZjJcdTUzZjhcdTU1MDZcdTU1ZTNcdTU2ZGJcdTU4ZWJcdTU5NjJcdTVhMTFcdTViZWJcdTViZmFcdTVjMDRcdTVkZjNcdTVlMmJcdTVmOTlcdTYwMWRcdTYzNjhcdTY1OWNcdTY1YWZcdTY3ZjZc''@;'; put 'put ''dTY3ZmJcdTY4YWRcdTZiN2JcdTZjOTlcdTZjZDdcdTZlMjNcdTcwMDlcdTczNDVcdTc4MDJcdTc5M2VcdTc5NDBcdTc5NjBcdTc5YzFcdTdiZTlcdTdkMTdcdTdkNzJcdTgwODZcdTgyMGRcdTgzOGVcdTg0ZDFcdTg2YzdcdTg4ZGZcdThhNTBcdThhNWVcdThiMWRcdThjZGNcdThkNjZcdThm''@;'; put 'put ''YWRcdTkwYWFcdTk4ZmNcdTk5ZGZcdTllOWRcdTUyNGFcdWY5NjlcdTY3MTRcdWY5NmFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMjJdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIyMl1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMjJdW2ddXT01NjgzMitnLHlbNTY4MzIrZ109X1syMjJd''@;'; put 'put ''W2ddKTtmb3IoX1syMjNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUwOThc''@;'; put 'put ''dTUyMmFcdTVjNzFcdTY1NjNcdTZjNTVcdTczY2FcdTc1MjNcdTc1OWRcdTdiOTdcdTg0OWNcdTkxNzhcdTk3MzBcdTRlNzdcdTY0OTJcdTZiYmFcdTcxNWVcdTg1YTlcdTRlMDlcdWY5NmJcdTY3NDlcdTY4ZWVcdTZlMTdcdTgyOWZcdTg1MThcdTg4NmJcdTYzZjdcdTZmODFcdTkyMTJcdTk4''@;'; put 'put ''YWZcdTRlMGFcdTUwYjdcdTUwY2ZcdTUxMWZcdTU1NDZcdTU1YWFcdTU2MTdcdTViNDBcdTVjMTlcdTVjZTBcdTVlMzhcdTVlOGFcdTVlYTBcdTVlYzJcdTYwZjNcdTY4NTFcdTZhNjFcdTZlNThcdTcyM2RcdTcyNDBcdTcyYzBcdTc2ZjhcdTc5NjVcdTdiYjFcdTdmZDRcdTg4ZjNcdTg5ZjRc''@;'; put 'put ''dThhNzNcdThjNjFcdThjZGVcdTk3MWNcdTU4NWVcdTc0YmRcdThjZmRcdTU1YzdcdWY5NmNcdTdhNjFcdTdkMjJcdTgyNzJcdTcyNzJcdTc1MWZcdTc1MjVcdWY5NmRcdTdiMTlcdTU4ODVcdTU4ZmJcdTVkYmNcdTVlOGZcdTVlYjZcdTVmOTBcdTYwNTVcdTYyOTJcdTYzN2ZcdTY1NGRcdTY2''@;'; put 'put ''OTFcdTY2ZDlcdTY2ZjhcdTY4MTZcdTY4ZjJcdTcyODBcdTc0NWVcdTdiNmVcdTdkNmVcdTdkZDZcdTdmNzJcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMjNdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIyM11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMjNdW2ddXT01NzA4OCtnLHlbNTcw''@;'; put 'put ''ODgrZ109X1syMjNdW2ddKTtmb3IoX1syMjRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdTgwZTVcdTgyMTJcdTg1YWZcdTg5N2ZcdThhOTNcdTkwMWRcdTkyZTRcdTllY2RcdTlmMjBcdTU5MTVcdTU5NmRcdTVlMmRcdTYwZGNcdTY2MTRcdTY2NzNcdTY3OTBcdTZjNTBcdTZkYzVcdTZmNWZcdTc3ZjNcdTc4YTlcdTg0YzZcdTkxY2JcdTkzMmJcdTRlZDlcdTUwY2FcdTUx''@;'; put 'put ''NDhcdTU1ODRcdTViMGJcdTViYTNcdTYyNDdcdTY1N2VcdTY1Y2JcdTZlMzJcdTcxN2RcdTc0MDFcdTc0NDRcdTc0ODdcdTc0YmZcdTc2NmNcdTc5YWFcdTdkZGFcdTdlNTVcdTdmYThcdTgxN2FcdTgxYjNcdTgyMzlcdTg2MWFcdTg3ZWNcdThhNzVcdThkZTNcdTkwNzhcdTkyOTFcdTk0MjVc''@;'; put 'put ''dTk5NGRcdTliYWVcdTUzNjhcdTVjNTFcdTY5NTRcdTZjYzRcdTZkMjlcdTZlMmJcdTgyMGNcdTg1OWJcdTg5M2JcdThhMmRcdThhYWFcdTk2ZWFcdTlmNjdcdTUyNjFcdTY2YjlcdTZiYjJcdTdlOTZcdTg3ZmVcdThkMGRcdTk1ODNcdTk2NWRcdTY1MWRcdTZkODlcdTcxZWVcdWY5NmVcdTU3''@;'; put 'put ''Y2VcdTU5ZDNcdTViYWNcdTYwMjdcdTYwZmFcdTYyMTBcdTY2MWZcdTY2NWZcdTczMjlcdTczZjlcdTc2ZGJcdTc3MDFcdTdiNmNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMjRdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIyNF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMjRdW2ddXT01''@;'; put 'put ''NzM0NCtnLHlbNTczNDQrZ109X1syMjRdW2ddKTtmb3IoX1syMjVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdTgwNTZcdTgwNzJcdTgxNjVcdThhYTBcdTkxOTJcdTRlMTZcdTUyZTJcdTZiNzJcdTZkMTdcdTdhMDVcdTdiMzlcdTdkMzBcdWY5NmZcdThjYjBcdTUzZWNcdTU2MmZcdTU4NTFcdTViYjVcdTVjMGZcdTVjMTFcdTVkZTJcdTYyNDBcdTYzODNcdTY0MTRcdTY2''@;'; put 'put ''MmRcdTY4YjNcdTZjYmNcdTZkODhcdTZlYWZcdTcwMWZcdTcwYTRcdTcxZDJcdTc1MjZcdTc1OGZcdTc1OGVcdTc2MTlcdTdiMTFcdTdiZTBcdTdjMmJcdTdkMjBcdTdkMzlcdTg1MmNcdTg1NmRcdTg2MDdcdThhMzRcdTkwMGRcdTkwNjFcdTkwYjVcdTkyYjdcdTk3ZjZcdTlhMzdcdTRmZDdc''@;'; put 'put ''dTVjNmNcdTY3NWZcdTZkOTFcdTdjOWZcdTdlOGNcdThiMTZcdThkMTZcdTkwMWZcdTViNmJcdTVkZmRcdTY0MGRcdTg0YzBcdTkwNWNcdTk4ZTFcdTczODdcdTViOGJcdTYwOWFcdTY3N2VcdTZkZGVcdThhMWZcdThhYTZcdTkwMDFcdTk4MGNcdTUyMzdcdWY5NzBcdTcwNTFcdTc4OGVcdTkz''@;'; put 'put ''OTZcdTg4NzBcdTkxZDdcdTRmZWVcdTUzZDdcdTU1ZmRcdTU2ZGFcdTU3ODJcdTU4ZmRcdTVhYzJcdTViODhcdTVjYWJcdTVjYzBcdTVlMjVcdTYxMDFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMjVdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIyNV1bZ10uY2hhckNvZGVBdCgwKSYmKElb''@;'; put 'put ''X1syMjVdW2ddXT01NzYwMCtnLHlbNTc2MDArZ109X1syMjVdW2ddKTtmb3IoX1syMjZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYyMGRcdTYyNGJcdTYzODhcdTY0MWNcdTY1MzZcdTY1NzhcdTZhMzlcdTZiOGFcdTZjMzRcdTZkMTlcdTZmMzFcdTcxZTdcdTcyZTlcdTczNzhcdTc0MDdcdTc0YjJcdTc2MjZcdTc3NjFcdTc5YzBcdTdhNTdcdTdhZWFcdTdjYjlcdTdk''@;'; put 'put ''OGZcdTdkYWNcdTdlNjFcdTdmOWVcdTgxMjlcdTgzMzFcdTg0OTBcdTg0ZGFcdTg1ZWFcdTg4OTZcdThhYjBcdThiOTBcdThmMzhcdTkwNDJcdTkwODNcdTkxNmNcdTkyOTZcdTkyYjlcdTk2OGJcdTk2YTdcdTk2YThcdTk2ZDZcdTk3MDBcdTk4MDhcdTk5OTZcdTlhZDNcdTliMWFcdTUzZDRc''@;'; put 'put ''dTU4N2VcdTU5MTlcdTViNzBcdTViYmZcdTZkZDFcdTZmNWFcdTcxOWZcdTc0MjFcdTc0YjlcdTgwODVcdTgzZmRcdTVkZTFcdTVmODdcdTVmYWFcdTYwNDJcdTY1ZWNcdTY4MTJcdTY5NmZcdTZhNTNcdTZiODlcdTZkMzVcdTZkZjNcdTczZTNcdTc2ZmVcdTc3YWNcdTdiNGRcdTdkMTRcdTgx''@;'; put 'put ''MjNcdTgyMWNcdTgzNDBcdTg0ZjRcdTg1NjNcdThhNjJcdThhYzRcdTkxODdcdTkzMWVcdTk4MDZcdTk5YjRcdTYyMGNcdTg4NTNcdThmZjBcdTkyNjVcdTVkMDdcdTVkMjdcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMjZdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIyNl1bZ10uY2hhckNv''@;'; put 'put ''ZGVBdCgwKSYmKElbX1syMjZdW2ddXT01Nzg1NitnLHlbNTc4NTYrZ109X1syMjZdW2ddKTtmb3IoX1syMjddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVkNjlcdTc0NWZcdTgxOWRcdTg3NjhcdTZmZDVcdTYyZmVcdTdmZDJcdTg5MzZcdTg5NzJcdTRlMWVcdTRlNThcdTUwZTdcdTUyZGRcdTUzNDdcdTYyN2ZcdTY2MDdcdTdlNjlcdTg4MDVcdTk2NWVcdTRmOGRcdTUz''@;'; put 'put ''MTlcdTU2MzZcdTU5Y2JcdTVhYTRcdTVjMzhcdTVjNGVcdTVjNGRcdTVlMDJcdTVmMTFcdTYwNDNcdTY1YmRcdTY2MmZcdTY2NDJcdTY3YmVcdTY3ZjRcdTczMWNcdTc3ZTJcdTc5M2FcdTdmYzVcdTg0OTRcdTg0Y2RcdTg5OTZcdThhNjZcdThhNjlcdThhZTFcdThjNTVcdThjN2FcdTU3ZjRc''@;'; put 'put ''dTViZDRcdTVmMGZcdTYwNmZcdTYyZWRcdTY5MGRcdTZiOTZcdTZlNWNcdTcxODRcdTdiZDJcdTg3NTVcdThiNThcdThlZmVcdTk4ZGZcdTk4ZmVcdTRmMzhcdTRmODFcdTRmZTFcdTU0N2JcdTVhMjBcdTViYjhcdTYxM2NcdTY1YjBcdTY2NjhcdTcxZmNcdTc1MzNcdTc5NWVcdTdkMzNcdTgx''@;'; put 'put ''NGVcdTgxZTNcdTgzOThcdTg1YWFcdTg1Y2VcdTg3MDNcdThhMGFcdThlYWJcdThmOWJcdWY5NzFcdThmYzVcdTU5MzFcdTViYTRcdTViZTZcdTYwODlcdTViZTlcdTVjMGJcdTVmYzNcdTZjODFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMjddLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIy''@;'; put 'put ''N11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMjddW2ddXT01ODExMitnLHlbNTgxMTIrZ109X1syMjddW2ddKTtmb3IoX1syMjhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWY5NzJcdTZkZjFcdTcwMGJcdTc1MWFcdTgyYWZcdThhZjZcdTRlYzBcdTUzNDFcdWY5NzNcdTk2ZDlcdTZjMGZcdTRlOWVcdTRmYzRcdTUxNTJcdTU1NWVcdTVhMjVcdTVjZThcdTYyMTFcdTcy''@;'; put 'put ''NTlcdTgyYmRcdTgzYWFcdTg2ZmVcdTg4NTlcdThhMWRcdTk2M2ZcdTk2YzVcdTk5MTNcdTlkMDlcdTlkNWRcdTU4MGFcdTVjYjNcdTVkYmRcdTVlNDRcdTYwZTFcdTYxMTVcdTYzZTFcdTZhMDJcdTZlMjVcdTkxMDJcdTkzNTRcdTk4NGVcdTljMTBcdTlmNzdcdTViODlcdTVjYjhcdTYzMDlc''@;'; put 'put ''dTY2NGZcdTY4NDhcdTc3M2NcdTk2YzFcdTk3OGRcdTk4NTRcdTliOWZcdTY1YTFcdThiMDFcdThlY2JcdTk1YmNcdTU1MzVcdTVjYTlcdTVkZDZcdTVlYjVcdTY2OTdcdTc2NGNcdTgzZjRcdTk1YzdcdTU4ZDNcdTYyYmNcdTcyY2VcdTlkMjhcdTRlZjBcdTU5MmVcdTYwMGZcdTY2M2JcdTZi''@;'; put 'put ''ODNcdTc5ZTdcdTlkMjZcdTUzOTNcdTU0YzBcdTU3YzNcdTVkMTZcdTYxMWJcdTY2ZDZcdTZkYWZcdTc4OGRcdTgyN2VcdTk2OThcdTk3NDRcdTUzODRcdTYyN2NcdTYzOTZcdTZkYjJcdTdlMGFcdTgxNGJcdTk4NGRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMjhdLmxlbmd0aDsrK2cp''@;'; put 'put ''NjU1MzMhPT1fWzIyOF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMjhdW2ddXT01ODM2OCtnLHlbNTgzNjgrZ109X1syMjhdW2ddKTtmb3IoX1syMjldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZhZmJcdTdmNGNcdTlkYWZcdTllMWFcdTRlNWZcdTUwM2JcdTUxYjZcdTU5MWNcdTYwZjlcdTYzZjZcdTY5MzBcdTcyM2FcdTgwMzZcdWY5NzRcdTkxY2VcdTVmMzFcdWY5''@;'; put 'put ''NzVcdWY5NzZcdTdkMDRcdTgyZTVcdTg0NmZcdTg0YmJcdTg1ZTVcdThlOGRcdWY5NzdcdTRmNmZcdWY5NzhcdWY5NzlcdTU4ZTRcdTViNDNcdTYwNTlcdTYzZGFcdTY1MThcdTY1NmRcdTY2OThcdWY5N2FcdTY5NGFcdTZhMjNcdTZkMGJcdTcwMDFcdTcxNmNcdTc1ZDJcdTc2MGRcdTc5YjNc''@;'; put 'put ''dTdhNzBcdWY5N2JcdTdmOGFcdWY5N2NcdTg5NDRcdWY5N2RcdThiOTNcdTkxYzBcdTk2N2RcdWY5N2VcdTk5MGFcdTU3MDRcdTVmYTFcdTY1YmNcdTZmMDFcdTc2MDBcdTc5YTZcdThhOWVcdTk5YWRcdTliNWFcdTlmNmNcdTUxMDRcdTYxYjZcdTYyOTFcdTZhOGRcdTgxYzZcdTUwNDNcdTU4''@;'; put 'put ''MzBcdTVmNjZcdTcxMDlcdThhMDBcdThhZmFcdTViN2NcdTg2MTZcdTRmZmFcdTUxM2NcdTU2YjRcdTU5NDRcdTYzYTlcdTZkZjlcdTVkYWFcdTY5NmRcdTUxODZcdTRlODhcdTRmNTlcdWY5N2ZcdWY5ODBcdWY5ODFcdTU5ODJcdWY5ODJcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMjld''@;'; put 'put ''Lmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIyOV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMjldW2ddXT01ODYyNCtnLHlbNTg2MjQrZ109X1syMjldW2ddKTtmb3IoX1syMzBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWY5ODNcdTZiNWZcdTZjNWRcdWY5ODRcdTc0YjVcdTc5MTZcdWY5ODVcdTgyMDdcdTgyNDVcdTgzMzlcdThmM2ZcdThmNWRcdWY5ODZcdTk5MThcdWY5''@;'; put 'put ''ODdcdWY5ODhcdWY5ODlcdTRlYTZcdWY5OGFcdTU3ZGZcdTVmNzlcdTY2MTNcdWY5OGJcdWY5OGNcdTc1YWJcdTdlNzlcdThiNmZcdWY5OGRcdTkwMDZcdTlhNWJcdTU2YTVcdTU4MjdcdTU5ZjhcdTVhMWZcdTViYjRcdWY5OGVcdTVlZjZcdWY5OGZcdWY5OTBcdTYzNTBcdTYzM2JcdWY5OTFc''@;'; put 'put ''dTY5M2RcdTZjODdcdTZjYmZcdTZkOGVcdTZkOTNcdTZkZjVcdTZmMTRcdWY5OTJcdTcwZGZcdTcxMzZcdTcxNTlcdWY5OTNcdTcxYzNcdTcxZDVcdWY5OTRcdTc4NGZcdTc4NmZcdWY5OTVcdTdiNzVcdTdkZTNcdWY5OTZcdTdlMmZcdWY5OTdcdTg4NGRcdThlZGZcdWY5OThcdWY5OTlcdWY5''@;'; put 'put ''OWFcdTkyNWJcdWY5OWJcdTljZjZcdWY5OWNcdWY5OWRcdWY5OWVcdTYwODVcdTZkODVcdWY5OWZcdTcxYjFcdWY5YTBcdWY5YTFcdTk1YjFcdTUzYWRcdWY5YTJcdWY5YTNcdWY5YTRcdTY3ZDNcdWY5YTVcdTcwOGVcdTcxMzBcdTc0MzBcdTgyNzZcdTgyZDJcdWZmZmQiLnNwbGl0KCIiKSxn''@;'; put 'put ''PTA7ZyE9X1syMzBdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIzMF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMzBdW2ddXT01ODg4MCtnLHlbNTg4ODArZ109X1syMzBdW2ddKTtmb3IoX1syMzFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWY5YTZcdTk1YmJcdTlhZTVcdTllN2RcdTY2YzRcdWY5YTdcdTcxYzFcdTg0NDlcdWY5YThcdWY5YTlcdTU4NGJcdWY5YWFcdWY5''@;'; put 'put ''YWJcdTVkYjhcdTVmNzFcdWY5YWNcdTY2MjBcdTY2OGVcdTY5NzlcdTY5YWVcdTZjMzhcdTZjZjNcdTZlMzZcdTZmNDFcdTZmZGFcdTcwMWJcdTcwMmZcdTcxNTBcdTcxZGZcdTczNzBcdWY5YWRcdTc0NWJcdWY5YWVcdTc0ZDRcdTc2YzhcdTdhNGVcdTdlOTNcdWY5YWZcdWY5YjBcdTgyZjFc''@;'; put 'put ''dThhNjBcdThmY2VcdWY5YjFcdTkzNDhcdWY5YjJcdTk3MTlcdWY5YjNcdWY5YjRcdTRlNDJcdTUwMmFcdWY5YjVcdTUyMDhcdTUzZTFcdTY2ZjNcdTZjNmRcdTZmY2FcdTczMGFcdTc3N2ZcdTdhNjJcdTgyYWVcdTg1ZGRcdTg2MDJcdWY5YjZcdTg4ZDRcdThhNjNcdThiN2RcdThjNmJcdWY5''@;'; put 'put ''YjdcdTkyYjNcdWY5YjhcdTk3MTNcdTk4MTBcdTRlOTRcdTRmMGRcdTRmYzlcdTUwYjJcdTUzNDhcdTU0M2VcdTU0MzNcdTU1ZGFcdTU4NjJcdTU4YmFcdTU5NjdcdTVhMWJcdTViZTRcdTYwOWZcdWY5YjlcdTYxY2FcdTY1NTZcdTY1ZmZcdTY2NjRcdTY4YTdcdTZjNWFcdTZmYjNcdWZmZmQi''@;'; put 'put ''LnNwbGl0KCIiKSxnPTA7ZyE9X1syMzFdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIzMV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMzFdW2ddXT01OTEzNitnLHlbNTkxMzYrZ109X1syMzFdW2ddKTtmb3IoX1syMzJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTcwY2ZcdTcxYWNcdTczNTJcdTdiN2RcdTg3MDhcdThhYTRcdTljMzJcdTlmMDdcdTVjNGJcdTZjODNcdTcz''@;'; put 'put ''NDRcdTczODlcdTkyM2FcdTZlYWJcdTc0NjVcdTc2MWZcdTdhNjlcdTdlMTVcdTg2MGFcdTUxNDBcdTU4YzVcdTY0YzFcdTc0ZWVcdTc1MTVcdTc2NzBcdTdmYzFcdTkwOTVcdTk2Y2RcdTk5NTRcdTZlMjZcdTc0ZTZcdTdhYTlcdTdhYWFcdTgxZTVcdTg2ZDlcdTg3NzhcdThhMWJcdTVhNDlc''@;'; put 'put ''dTViOGNcdTViOWJcdTY4YTFcdTY5MDBcdTZkNjNcdTczYTlcdTc0MTNcdTc0MmNcdTc4OTdcdTdkZTlcdTdmZWJcdTgxMThcdTgxNTVcdTgzOWVcdThjNGNcdTk2MmVcdTk4MTFcdTY2ZjBcdTVmODBcdTY1ZmFcdTY3ODlcdTZjNmFcdTczOGJcdTUwMmRcdTVhMDNcdTZiNmFcdTc3ZWVcdTU5''@;'; put 'put ''MTZcdTVkNmNcdTVkY2RcdTczMjVcdTc1NGZcdWY5YmFcdWY5YmJcdTUwZTVcdTUxZjlcdTU4MmZcdTU5MmRcdTU5OTZcdTU5ZGFcdTViZTVcdWY5YmNcdWY5YmRcdTVkYTJcdTYyZDdcdTY0MTZcdTY0OTNcdTY0ZmVcdWY5YmVcdTY2ZGNcdWY5YmZcdTZhNDhcdWY5YzBcdTcxZmZcdTc0NjRc''@;'; put 'put ''dWY5YzFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMzJdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIzMl1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMzJdW2ddXT01OTM5MitnLHlbNTkzOTIrZ109X1syMzJdW2ddKTtmb3IoX1syMzNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdhODhcdTdhYWZcdTdlNDdcdTdlNWVcdTgwMDBcdTgxNzBcdWY5YzJcdTg3ZWZcdTg5''@;'; put 'put ''ODFcdThiMjBcdTkwNTlcdWY5YzNcdTkwODBcdTk5NTJcdTYxN2VcdTZiMzJcdTZkNzRcdTdlMWZcdTg5MjVcdThmYjFcdTRmZDFcdTUwYWRcdTUxOTdcdTUyYzdcdTU3YzdcdTU4ODlcdTViYjlcdTVlYjhcdTYxNDJcdTY5OTVcdTZkOGNcdTZlNjdcdTZlYjZcdTcxOTRcdTc0NjJcdTc1Mjhc''@;'; put 'put ''dTc1MmNcdTgwNzNcdTgzMzhcdTg0YzlcdThlMGFcdTkzOTRcdTkzZGVcdWY5YzRcdTRlOGVcdTRmNTFcdTUwNzZcdTUxMmFcdTUzYzhcdTUzY2JcdTUzZjNcdTViODdcdTViZDNcdTVjMjRcdTYxMWFcdTYxODJcdTY1ZjRcdTcyNWJcdTczOTdcdTc0NDBcdTc2YzJcdTc5NTBcdTc5OTFcdTc5''@;'; put 'put ''YjlcdTdkMDZcdTdmYmRcdTgyOGJcdTg1ZDVcdTg2NWVcdThmYzJcdTkwNDdcdTkwZjVcdTkxZWFcdTk2ODVcdTk2ZThcdTk2ZTlcdTUyZDZcdTVmNjdcdTY1ZWRcdTY2MzFcdTY4MmZcdTcxNWNcdTdhMzZcdTkwYzFcdTk4MGFcdTRlOTFcdWY5YzVcdTZhNTJcdTZiOWVcdTZmOTBcdTcxODlc''@;'; put 'put ''dTgwMThcdTgyYjhcdTg1NTNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMzNdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIzM11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMzNdW2ddXT01OTY0OCtnLHlbNTk2NDgrZ109X1syMzNdW2ddKTtmb3IoX1syMzRdPSJcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkwNGJcdTk2OTVcdTk2ZjJcdTk3ZmJcdTg1MWFcdTliMzFcdTRl''@;'; put 'put ''OTBcdTcxOGFcdTk2YzRcdTUxNDNcdTUzOWZcdTU0ZTFcdTU3MTNcdTU3MTJcdTU3YTNcdTVhOWJcdTVhYzRcdTViYzNcdTYwMjhcdTYxM2ZcdTYzZjRcdTZjODVcdTZkMzlcdTZlNzJcdTZlOTBcdTcyMzBcdTczM2ZcdTc0NTdcdTgyZDFcdTg4ODFcdThmNDVcdTkwNjBcdWY5YzZcdTk2NjJc''@;'; put 'put ''dTk4NThcdTlkMWJcdTY3MDhcdThkOGFcdTkyNWVcdTRmNGRcdTUwNDlcdTUwZGVcdTUzNzFcdTU3MGRcdTU5ZDRcdTVhMDFcdTVjMDlcdTYxNzBcdTY2OTBcdTZlMmRcdTcyMzJcdTc0NGJcdTdkZWZcdTgwYzNcdTg0MGVcdTg0NjZcdTg1M2ZcdTg3NWZcdTg4NWJcdTg5MThcdThiMDJcdTkw''@;'; put 'put ''NTVcdTk3Y2JcdTliNGZcdTRlNzNcdTRmOTFcdTUxMTJcdTUxNmFcdWY5YzdcdTU1MmZcdTU1YTlcdTViN2FcdTViYTVcdTVlN2NcdTVlN2RcdTVlYmVcdTYwYTBcdTYwZGZcdTYxMDhcdTYxMDlcdTYzYzRcdTY1MzhcdTY3MDlcdWY5YzhcdTY3ZDRcdTY3ZGFcdWY5YzlcdTY5NjFcdTY5NjJc''@;'; put 'put ''dTZjYjlcdTZkMjdcdWY5Y2FcdTZlMzhcdWY5Y2JcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMzRdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIzNF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMzRdW2ddXT01OTkwNCtnLHlbNTk5MDQrZ109X1syMzRdW2ddKTtmb3IoX1syMzVdPSJcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZmZTFcdTczMzZcdTczMzdcdWY5Y2NcdTc0''@;'; put 'put ''NWNcdTc1MzFcdWY5Y2RcdTc2NTJcdWY5Y2VcdWY5Y2ZcdTdkYWRcdTgxZmVcdTg0MzhcdTg4ZDVcdThhOThcdThhZGJcdThhZWRcdThlMzBcdThlNDJcdTkwNGFcdTkwM2VcdTkwN2FcdTkxNDlcdTkxYzlcdTkzNmVcdWY5ZDBcdWY5ZDFcdTU4MDlcdWY5ZDJcdTZiZDNcdTgwODlcdTgwYjJc''@;'; put 'put ''dWY5ZDNcdWY5ZDRcdTUxNDFcdTU5NmJcdTVjMzlcdWY5ZDVcdWY5ZDZcdTZmNjRcdTczYTdcdTgwZTRcdThkMDdcdWY5ZDdcdTkyMTdcdTk1OGZcdWY5ZDhcdWY5ZDlcdWY5ZGFcdWY5ZGJcdTgwN2ZcdTYyMGVcdTcwMWNcdTdkNjhcdTg3OGRcdWY5ZGNcdTU3YTBcdTYwNjlcdTYxNDdcdTZi''@;'; put 'put ''YjdcdThhYmVcdTkyODBcdTk2YjFcdTRlNTlcdTU0MWZcdTZkZWJcdTg1MmRcdTk2NzBcdTk3ZjNcdTk4ZWVcdTYzZDZcdTZjZTNcdTkwOTFcdTUxZGRcdTYxYzlcdTgxYmFcdTlkZjlcdTRmOWRcdTUwMWFcdTUxMDBcdTViOWNcdTYxMGZcdTYxZmZcdTY0ZWNcdTY5MDVcdTZiYzVcdTc1OTFc''@;'; put 'put ''dTc3ZTNcdTdmYTlcdTgyNjRcdTg1OGZcdTg3ZmJcdTg4NjNcdThhYmNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMzVdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIzNV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMzVdW2ddXT02MDE2MCtnLHlbNjAxNjArZ109X1syMzVdW2ddKTtmb3Io''@;'; put 'put ''X1syMzZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThiNzBcdTkxYWJcdTRl''@;'; put 'put ''OGNcdTRlZTVcdTRmMGFcdWY5ZGRcdWY5ZGVcdTU5MzdcdTU5ZThcdWY5ZGZcdTVkZjJcdTVmMWJcdTVmNWJcdTYwMjFcdWY5ZTBcdWY5ZTFcdWY5ZTJcdWY5ZTNcdTcyM2VcdTczZTVcdWY5ZTRcdTc1NzBcdTc1Y2RcdWY5ZTVcdTc5ZmJcdWY5ZTZcdTgwMGNcdTgwMzNcdTgwODRcdTgyZTFc''@;'; put 'put ''dTgzNTFcdWY5ZTdcdWY5ZThcdThjYmRcdThjYjNcdTkwODdcdWY5ZTlcdWY5ZWFcdTk4ZjRcdTk5MGNcdWY5ZWJcdWY5ZWNcdTcwMzdcdTc2Y2FcdTdmY2FcdTdmY2NcdTdmZmNcdThiMWFcdTRlYmFcdTRlYzFcdTUyMDNcdTUzNzBcdWY5ZWRcdTU0YmRcdTU2ZTBcdTU5ZmJcdTViYzVcdTVm''@;'; put 'put ''MTVcdTVmY2RcdTZlNmVcdWY5ZWVcdWY5ZWZcdTdkNmFcdTgzMzVcdWY5ZjBcdTg2OTNcdThhOGRcdWY5ZjFcdTk3NmRcdTk3NzdcdWY5ZjJcdWY5ZjNcdTRlMDBcdTRmNWFcdTRmN2VcdTU4ZjlcdTY1ZTVcdTZlYTJcdTkwMzhcdTkzYjBcdTk5YjlcdTRlZmJcdTU4ZWNcdTU5OGFcdTU5ZDlc''@;'; put 'put ''dTYwNDFcdWY5ZjRcdWY5ZjVcdTdhMTRcdWY5ZjZcdTgzNGZcdThjYzNcdTUxNjVcdTUzNDRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMzZdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIzNl1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMzZdW2ddXT02MDQxNitnLHlbNjA0MTYrZ109X1sy''@;'; put 'put ''MzZdW2ddKTtmb3IoX1syMzddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWY5''@;'; put 'put ''ZjdcdWY5ZjhcdWY5ZjlcdTRlY2RcdTUyNjlcdTViNTVcdTgyYmZcdTRlZDRcdTUyM2FcdTU0YThcdTU5YzlcdTU5ZmZcdTViNTBcdTViNTdcdTViNWNcdTYwNjNcdTYxNDhcdTZlY2JcdTcwOTlcdTcxNmVcdTczODZcdTc0ZjdcdTc1YjVcdTc4YzFcdTdkMmJcdTgwMDVcdTgxZWFcdTgzMjhc''@;'; put 'put ''dTg1MTdcdTg1YzlcdThhZWVcdThjYzdcdTk2Y2NcdTRmNWNcdTUyZmFcdTU2YmNcdTY1YWJcdTY2MjhcdTcwN2NcdTcwYjhcdTcyMzVcdTdkYmRcdTgyOGRcdTkxNGNcdTk2YzBcdTlkNzJcdTViNzFcdTY4ZTdcdTZiOThcdTZmN2FcdTc2ZGVcdTVjOTFcdTY2YWJcdTZmNWJcdTdiYjRcdTdj''@;'; put 'put ''MmFcdTg4MzZcdTk2ZGNcdTRlMDhcdTRlZDdcdTUzMjBcdTU4MzRcdTU4YmJcdTU4ZWZcdTU5NmNcdTVjMDdcdTVlMzNcdTVlODRcdTVmMzVcdTYzOGNcdTY2YjJcdTY3NTZcdTZhMWZcdTZhYTNcdTZiMGNcdTZmM2ZcdTcyNDZcdWY5ZmFcdTczNTBcdTc0OGJcdTdhZTBcdTdjYTdcdTgxNzhc''@;'; put 'put ''dTgxZGZcdTgxZTdcdTgzOGFcdTg0NmNcdTg1MjNcdTg1OTRcdTg1Y2ZcdTg4ZGRcdThkMTNcdTkxYWNcdTk1NzdcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMzddLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIzN11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMzddW2ddXT02MDY3MitnLHlb''@;'; put 'put ''NjA2NzIrZ109X1syMzddW2ddKTtmb3IoX1syMzhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdTk2OWNcdTUxOGRcdTU0YzlcdTU3MjhcdTViYjBcdTYyNGRcdTY3NTBcdTY4M2RcdTY4OTNcdTZlM2RcdTZlZDNcdTcwN2RcdTdlMjFcdTg4YzFcdThjYTFcdThmMDlcdTlmNGJcdTlmNGVcdTcyMmRcdTdiOGZcdThhY2RcdTkzMWFcdTRmNDdcdTRmNGVcdTUxMzJcdTU0ODBc''@;'; put 'put ''dTU5ZDBcdTVlOTVcdTYyYjVcdTY3NzVcdTY5NmVcdTZhMTdcdTZjYWVcdTZlMWFcdTcyZDlcdTczMmFcdTc1YmRcdTdiYjhcdTdkMzVcdTgyZTdcdTgzZjlcdTg0NTdcdTg1ZjdcdThhNWJcdThjYWZcdThlODdcdTkwMTlcdTkwYjhcdTk2Y2VcdTlmNWZcdTUyZTNcdTU0MGFcdTVhZTFcdTVi''@;'; put 'put ''YzJcdTY0NThcdTY1NzVcdTZlZjRcdTcyYzRcdWY5ZmJcdTc2ODRcdTdhNGRcdTdiMWJcdTdjNGRcdTdlM2VcdTdmZGZcdTgzN2JcdThiMmJcdThjY2FcdThkNjRcdThkZTFcdThlNWZcdThmZWFcdThmZjlcdTkwNjlcdTkzZDFcdTRmNDNcdTRmN2FcdTUwYjNcdTUxNjhcdTUxNzhcdTUyNGRc''@;'; put 'put ''dTUyNmFcdTU4NjFcdTU4N2NcdTU5NjBcdTVjMDhcdTVjNTVcdTVlZGJcdTYwOWJcdTYyMzBcdTY4MTNcdTZiYmZcdTZjMDhcdTZmYjFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMzhdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIzOF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMzhdW2dd''@;'; put 'put ''XT02MDkyOCtnLHlbNjA5MjgrZ109X1syMzhdW2ddKTtmb3IoX1syMzldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTcxNGVcdTc0MjBcdTc1MzBcdTc1MzhcdTc1NTFcdTc2NzJcdTdiNGNcdTdiOGJcdTdiYWRcdTdiYzZcdTdlOGZcdThhNmVcdThmM2VcdThmNDlcdTkyM2ZcdTkyOTNcdTkzMjJcdTk0MmJcdTk2ZmJcdTk4NWFcdTk4NmJcdTk5MWVcdTUyMDdcdTYyMmFc''@;'; put 'put ''dTYyOThcdTZkNTlcdTc2NjRcdTdhY2FcdTdiYzBcdTdkNzZcdTUzNjBcdTVjYmVcdTVlOTdcdTZmMzhcdTcwYjlcdTdjOThcdTk3MTFcdTliOGVcdTllZGVcdTYzYTVcdTY0N2FcdTg3NzZcdTRlMDFcdTRlOTVcdTRlYWRcdTUwNWNcdTUwNzVcdTU0NDhcdTU5YzNcdTViOWFcdTVlNDBcdTVl''@;'; put 'put ''YWRcdTVlZjdcdTVmODFcdTYwYzVcdTYzM2FcdTY1M2ZcdTY1NzRcdTY1Y2NcdTY2NzZcdTY2NzhcdTY3ZmVcdTY5NjhcdTZhODlcdTZiNjNcdTZjNDBcdTZkYzBcdTZkZThcdTZlMWZcdTZlNWVcdTcwMWVcdTcwYTFcdTczOGVcdTczZmRcdTc1M2FcdTc3NWJcdTc4ODdcdTc5OGVcdTdhMGJc''@;'; put 'put ''dTdhN2RcdTdjYmVcdTdkOGVcdTgyNDdcdThhMDJcdThhZWFcdThjOWVcdTkxMmRcdTkxNGFcdTkxZDhcdTkyNjZcdTkyY2NcdTkzMjBcdTk3MDZcdTk3NTZcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMzldLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIzOV1bZ10uY2hhckNvZGVBdCgwKSYm''@;'; put 'put ''KElbX1syMzldW2ddXT02MTE4NCtnLHlbNjExODQrZ109X1syMzldW2ddKTtmb3IoX1syNDBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk3NWNcdTk4MDJcdTlmMGVcdTUyMzZcdTUyOTFcdTU1N2NcdTU4MjRcdTVlMWRcdTVmMWZcdTYwOGNcdTYzZDBcdTY4YWZcdTZmZGZcdTc5NmRcdTdiMmNcdTgxY2RcdTg1YmFcdTg4ZmRcdThhZjhcdThlNDRcdTkxOGRcdTk2NjRc''@;'; put 'put ''dTk2OWJcdTk3M2RcdTk4NGNcdTlmNGFcdTRmY2VcdTUxNDZcdTUxY2JcdTUyYTlcdTU2MzJcdTVmMTRcdTVmNmJcdTYzYWFcdTY0Y2RcdTY1ZTlcdTY2NDFcdTY2ZmFcdTY2ZjlcdTY3MWRcdTY4OWRcdTY4ZDdcdTY5ZmRcdTZmMTVcdTZmNmVcdTcxNjdcdTcxZTVcdTcyMmFcdTc0YWFcdTc3''@;'; put 'put ''M2FcdTc5NTZcdTc5NWFcdTc5ZGZcdTdhMjBcdTdhOTVcdTdjOTdcdTdjZGZcdTdkNDRcdTdlNzBcdTgwODdcdTg1ZmJcdTg2YTRcdThhNTRcdThhYmZcdThkOTlcdThlODFcdTkwMjBcdTkwNmRcdTkxZTNcdTk2M2JcdTk2ZDVcdTljZTVcdTY1Y2ZcdTdjMDdcdThkYjNcdTkzYzNcdTViNThc''@;'; put 'put ''dTVjMGFcdTUzNTJcdTYyZDlcdTczMWRcdTUwMjdcdTViOTdcdTVmOWVcdTYwYjBcdTYxNmJcdTY4ZDVcdTZkZDlcdTc0MmVcdTdhMmVcdTdkNDJcdTdkOWNcdTdlMzFcdTgxNmJcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syNDBdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzI0MF1bZ10uY2hh''@;'; put 'put ''ckNvZGVBdCgwKSYmKElbX1syNDBdW2ddXT02MTQ0MCtnLHlbNjE0NDArZ109X1syNDBdW2ddKTtmb3IoX1syNDFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThlMmFcdThlMzVcdTkzN2VcdTk0MThcdTRmNTBcdTU3NTBcdTVkZTZcdTVlYTdcdTYzMmJcdTdmNmFcdTRlM2JcdTRmNGZcdTRmOGZcdTUwNWFcdTU5ZGRcdTgwYzRcdTU0NmFcdTU0NjhcdTU1ZmVcdTU5NGZc''@;'; put 'put ''dTViOTlcdTVkZGVcdTVlZGFcdTY2NWRcdTY3MzFcdTY3ZjFcdTY4MmFcdTZjZThcdTZkMzJcdTZlNGFcdTZmOGRcdTcwYjdcdTczZTBcdTc1ODdcdTdjNGNcdTdkMDJcdTdkMmNcdTdkYTJcdTgyMWZcdTg2ZGJcdThhM2JcdThhODVcdThkNzBcdThlOGFcdThmMzNcdTkwMzFcdTkxNGVcdTkx''@;'; put 'put ''NTJcdTk0NDRcdTk5ZDBcdTdhZjlcdTdjYTVcdTRmY2FcdTUxMDFcdTUxYzZcdTU3YzhcdTViZWZcdTVjZmJcdTY2NTlcdTZhM2RcdTZkNWFcdTZlOTZcdTZmZWNcdTcxMGNcdTc1NmZcdTdhZTNcdTg4MjJcdTkwMjFcdTkwNzVcdTk2Y2JcdTk5ZmZcdTgzMDFcdTRlMmRcdTRlZjJcdTg4NDZc''@;'; put 'put ''dTkxY2RcdTUzN2RcdTZhZGJcdTY5NmJcdTZjNDFcdTg0N2FcdTU4OWVcdTYxOGVcdTY2ZmVcdTYyZWZcdTcwZGRcdTc1MTFcdTc1YzdcdTdlNTJcdTg0YjhcdThiNDlcdThkMDhcdTRlNGJcdTUzZWFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syNDFdLmxlbmd0aDsrK2cpNjU1MzMhPT1f''@;'; put 'put ''WzI0MV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syNDFdW2ddXT02MTY5NitnLHlbNjE2OTYrZ109X1syNDFdW2ddKTtmb3IoX1syNDJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU0YWJcdTU3MzBcdTU3NDBcdTVmZDdcdTYzMDFcdTYzMDdcdTY0NmZcdTY1MmZcdTY1ZThcdTY2N2FcdTY3OWRcdTY3YjNcdTZiNjJcdTZjNjBcdTZjOWFcdTZmMmNcdTc3ZTVcdTc4MjVc''@;'; put 'put ''dTc5NDlcdTc5NTdcdTdkMTlcdTgwYTJcdTgxMDJcdTgxZjNcdTgyOWRcdTgyYjdcdTg3MThcdThhOGNcdWY5ZmNcdThkMDRcdThkYmVcdTkwNzJcdTc2ZjRcdTdhMTlcdTdhMzdcdTdlNTRcdTgwNzdcdTU1MDdcdTU1ZDRcdTU4NzVcdTYzMmZcdTY0MjJcdTY2NDlcdTY2NGJcdTY4NmRcdTY5''@;'; put 'put ''OWJcdTZiODRcdTZkMjVcdTZlYjFcdTczY2RcdTc0NjhcdTc0YTFcdTc1NWJcdTc1YjlcdTc2ZTFcdTc3MWVcdTc3OGJcdTc5ZTZcdTdlMDlcdTdlMWRcdTgxZmJcdTg1MmZcdTg4OTdcdThhM2FcdThjZDFcdThlZWJcdThmYjBcdTkwMzJcdTkzYWRcdTk2NjNcdTk2NzNcdTk3MDdcdTRmODRc''@;'; put 'put ''dTUzZjFcdTU5ZWFcdTVhYzlcdTVlMTlcdTY4NGVcdTc0YzZcdTc1YmVcdTc5ZTlcdTdhOTJcdTgxYTNcdTg2ZWRcdThjZWFcdThkY2NcdThmZWRcdTY1OWZcdTY3MTVcdWY5ZmRcdTU3ZjdcdTZmNTdcdTdkZGRcdThmMmZcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syNDJdLmxlbmd0aDsr''@;'; put 'put ''K2cpNjU1MzMhPT1fWzI0Ml1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syNDJdW2ddXT02MTk1MitnLHlbNjE5NTIrZ109X1syNDJdW2ddKTtmb3IoX1syNDNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkzZjZcdTk2YzZcdTVmYjVcdTYxZjJcdTZmODRcdTRlMTRcdTRmOThcdTUwMWZcdTUzYzlcdTU1ZGZcdTVkNmZcdTVkZWVcdTZiMjFcdTZiNjRcdTc4Y2JcdTdiOWFc''@;'; put 'put ''dWY5ZmVcdThlNDlcdThlY2FcdTkwNmVcdTYzNDlcdTY0M2VcdTc3NDBcdTdhODRcdTkzMmZcdTk0N2ZcdTlmNmFcdTY0YjBcdTZmYWZcdTcxZTZcdTc0YThcdTc0ZGFcdTdhYzRcdTdjMTJcdTdlODJcdTdjYjJcdTdlOThcdThiOWFcdThkMGFcdTk0N2RcdTk5MTBcdTk5NGNcdTUyMzlcdTVi''@;'; put 'put ''ZGZcdTY0ZTZcdTY3MmRcdTdkMmVcdTUwZWRcdTUzYzNcdTU4NzlcdTYxNThcdTYxNTlcdTYxZmFcdTY1YWNcdTdhZDlcdThiOTJcdThiOTZcdTUwMDlcdTUwMjFcdTUyNzVcdTU1MzFcdTVhM2NcdTVlZTBcdTVmNzBcdTYxMzRcdTY1NWVcdTY2MGNcdTY2MzZcdTY2YTJcdTY5Y2RcdTZlYzRc''@;'; put 'put ''dTZmMzJcdTczMTZcdTc2MjFcdTdhOTNcdTgxMzlcdTgyNTlcdTgzZDZcdTg0YmNcdTUwYjVcdTU3ZjBcdTViYzBcdTViZThcdTVmNjlcdTYzYTFcdTc4MjZcdTdkYjVcdTgzZGNcdTg1MjFcdTkxYzdcdTkxZjVcdTUxOGFcdTY3ZjVcdTdiNTZcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sy''@;'; put 'put ''NDNdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzI0M11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syNDNdW2ddXT02MjIwOCtnLHlbNjIyMDgrZ109X1syNDNdW2ddKTtmb3IoX1syNDRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThjYWNcdTUxYzRcdTU5YmJcdTYwYmRcdTg2NTVcdTUwMWNcdWY5ZmZcdTUyNTRcdTVjM2FcdTYxN2RcdTYyMWFcdTYyZDNcdTY0ZjJcdTY1YTVc''@;'; put 'put ''dTZlY2NcdTc2MjBcdTgxMGFcdThlNjBcdTk2NWZcdTk2YmJcdTRlZGZcdTUzNDNcdTU1OThcdTU5MjlcdTVkZGRcdTY0YzVcdTZjYzlcdTZkZmFcdTczOTRcdTdhN2ZcdTgyMWJcdTg1YTZcdThjZTRcdThlMTBcdTkwNzdcdTkxZTdcdTk1ZTFcdTk2MjFcdTk3YzZcdTUxZjhcdTU0ZjJcdTU1''@;'; put 'put ''ODZcdTVmYjlcdTY0YTRcdTZmODhcdTdkYjRcdThmMWZcdThmNGRcdTk0MzVcdTUwYzlcdTVjMTZcdTZjYmVcdTZkZmJcdTc1MWJcdTc3YmJcdTdjM2RcdTdjNjRcdThhNzlcdThhYzJcdTU4MWVcdTU5YmVcdTVlMTZcdTYzNzdcdTcyNTJcdTc1OGFcdTc3NmJcdThhZGNcdThjYmNcdThmMTJc''@;'; put 'put ''dTVlZjNcdTY2NzRcdTZkZjhcdTgwN2RcdTgzYzFcdThhY2JcdTk3NTFcdTliZDZcdWZhMDBcdTUyNDNcdTY2ZmZcdTZkOTVcdTZlZWZcdTdkZTBcdThhZTZcdTkwMmVcdTkwNWVcdTlhZDRcdTUyMWRcdTUyN2ZcdTU0ZThcdTYxOTRcdTYyODRcdTYyZGJcdTY4YTJcdWZmZmQiLnNwbGl0KCIi''@;'; put 'put ''KSxnPTA7ZyE9X1syNDRdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzI0NF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syNDRdW2ddXT02MjQ2NCtnLHlbNjI0NjQrZ109X1syNDRdW2ddKTtmb3IoX1syNDVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY5MTJcdTY5NWFcdTZhMzVcdTcwOTJcdTcxMjZcdTc4NWRcdTc5MDFcdTc5MGVcdTc5ZDJcdTdhMGRcdTgwOTZcdTgyNzhc''@;'; put 'put ''dTgyZDVcdTgzNDlcdTg1NDlcdThjODJcdThkODVcdTkxNjJcdTkxOGJcdTkxYWVcdTRmYzNcdTU2ZDFcdTcxZWRcdTc3ZDdcdTg3MDBcdTg5ZjhcdTViZjhcdTVmZDZcdTY3NTFcdTkwYThcdTUzZTJcdTU4NWFcdTViZjVcdTYwYTRcdTYxODFcdTY0NjBcdTdlM2RcdTgwNzBcdTg1MjVcdTky''@;'; put 'put ''ODNcdTY0YWVcdTUwYWNcdTVkMTRcdTY3MDBcdTU4OWNcdTYyYmRcdTYzYThcdTY5MGVcdTY5NzhcdTZhMWVcdTZlNmJcdTc2YmFcdTc5Y2JcdTgyYmJcdTg0MjlcdThhY2ZcdThkYThcdThmZmRcdTkxMTJcdTkxNGJcdTkxOWNcdTkzMTBcdTkzMThcdTkzOWFcdTk2ZGJcdTlhMzZcdTljMGRc''@;'; put 'put ''dTRlMTFcdTc1NWNcdTc5NWRcdTdhZmFcdTdiNTFcdTdiYzlcdTdlMmVcdTg0YzRcdThlNTlcdThlNzRcdThlZjhcdTkwMTBcdTY2MjVcdTY5M2ZcdTc0NDNcdTUxZmFcdTY3MmVcdTllZGNcdTUxNDVcdTVmZTBcdTZjOTZcdTg3ZjJcdTg4NWRcdTg4NzdcdTYwYjRcdTgxYjVcdTg0MDNcdWZm''@;'; put 'put ''ZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syNDVdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzI0NV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syNDVdW2ddXT02MjcyMCtnLHlbNjI3MjArZ109X1syNDVdW2ddKTtmb3IoX1syNDZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThkMDVcdTUzZDZcdTU0MzlcdTU2MzRcdTVhMzZcdTVjMzFcdTcwOGFcdTdmZTBcdTgwNWFcdTgxMDZc''@;'; put 'put ''dTgxZWRcdThkYTNcdTkxODlcdTlhNWZcdTlkZjJcdTUwNzRcdTRlYzRcdTUzYTBcdTYwZmJcdTZlMmNcdTVjNjRcdTRmODhcdTUwMjRcdTU1ZTRcdTVjZDlcdTVlNWZcdTYwNjVcdTY4OTRcdTZjYmJcdTZkYzRcdTcxYmVcdTc1ZDRcdTc1ZjRcdTc2NjFcdTdhMWFcdTdhNDlcdTdkYzdcdTdk''@;'; put 'put ''ZmJcdTdmNmVcdTgxZjRcdTg2YTlcdThmMWNcdTk2YzlcdTk5YjNcdTlmNTJcdTUyNDdcdTUyYzVcdTk4ZWRcdTg5YWFcdTRlMDNcdTY3ZDJcdTZmMDZcdTRmYjVcdTViZTJcdTY3OTVcdTZjODhcdTZkNzhcdTc0MWJcdTc4MjdcdTkxZGRcdTkzN2NcdTg3YzRcdTc5ZTRcdTdhMzFcdTVmZWJc''@;'; put 'put ''dTRlZDZcdTU0YTRcdTU1M2VcdTU4YWVcdTU5YTVcdTYwZjBcdTYyNTNcdTYyZDZcdTY3MzZcdTY5NTVcdTgyMzVcdTk2NDBcdTk5YjFcdTk5ZGRcdTUwMmNcdTUzNTNcdTU1NDRcdTU3N2NcdWZhMDFcdTYyNThcdWZhMDJcdTY0ZTJcdTY2NmJcdTY3ZGRcdTZmYzFcdTZmZWZcdTc0MjJcdTc0''@;'; put 'put ''MzhcdThhMTdcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syNDZdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzI0Nl1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syNDZdW2ddXT02Mjk3NitnLHlbNjI5NzYrZ109X1syNDZdW2ddKTtmb3IoX1syNDddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk0MzhcdTU0NTFcdTU2MDZcdTU3NjZcdTVmNDhcdTYxOWFcdTZiNGVcdTcwNThc''@;'; put 'put ''dTcwYWRcdTdkYmJcdThhOTVcdTU5NmFcdTgxMmJcdTYzYTJcdTc3MDhcdTgwM2RcdThjYWFcdTU4NTRcdTY0MmRcdTY5YmJcdTViOTVcdTVlMTFcdTZlNmZcdWZhMDNcdTg1NjlcdTUxNGNcdTUzZjBcdTU5MmFcdTYwMjBcdTYxNGJcdTZiODZcdTZjNzBcdTZjZjBcdTdiMWVcdTgwY2VcdTgy''@;'; put 'put ''ZDRcdThkYzZcdTkwYjBcdTk4YjFcdWZhMDRcdTY0YzdcdTZmYTRcdTY0OTFcdTY1MDRcdTUxNGVcdTU0MTBcdTU3MWZcdThhMGVcdTYxNWZcdTY4NzZcdWZhMDVcdTc1ZGJcdTdiNTJcdTdkNzFcdTkwMWFcdTU4MDZcdTY5Y2NcdTgxN2ZcdTg5MmFcdTkwMDBcdTk4MzlcdTUwNzhcdTU5NTdc''@;'; put 'put ''dTU5YWNcdTYyOTVcdTkwMGZcdTliMmFcdTYxNWRcdTcyNzlcdTk1ZDZcdTU3NjFcdTVhNDZcdTVkZjRcdTYyOGFcdTY0YWRcdTY0ZmFcdTY3NzdcdTZjZTJcdTZkM2VcdTcyMmNcdTc0MzZcdTc4MzRcdTdmNzdcdTgyYWRcdThkZGJcdTk4MTdcdTUyMjRcdTU3NDJcdTY3N2ZcdTcyNDhcdTc0''@;'; put 'put ''ZTNcdThjYTlcdThmYTZcdTkyMTFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syNDddLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzI0N11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syNDddW2ddXT02MzIzMitnLHlbNjMyMzIrZ109X1syNDddW2ddKTtmb3IoX1syNDhdPSJcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk2MmFcdTUxNmJcdTUzZWRcdTYzNGNcdTRmNjlcdTU1MDRc''@;'; put 'put ''dTYwOTZcdTY1NTdcdTZjOWJcdTZkN2ZcdTcyNGNcdTcyZmRcdTdhMTdcdTg5ODdcdThjOWRcdTVmNmRcdTZmOGVcdTcwZjlcdTgxYThcdTYxMGVcdTRmYmZcdTUwNGZcdTYyNDFcdTcyNDdcdTdiYzdcdTdkZThcdTdmZTlcdTkwNGRcdTk3YWRcdTlhMTlcdThjYjZcdTU3NmFcdTVlNzNcdTY3''@;'; put 'put ''YjBcdTg0MGRcdThhNTVcdTU0MjBcdTViMTZcdTVlNjNcdTVlZTJcdTVmMGFcdTY1ODNcdTgwYmFcdTg1M2RcdTk1ODlcdTk2NWJcdTRmNDhcdTUzMDVcdTUzMGRcdTUzMGZcdTU0ODZcdTU0ZmFcdTU3MDNcdTVlMDNcdTYwMTZcdTYyOWJcdTYyYjFcdTYzNTVcdWZhMDZcdTZjZTFcdTZkNjZc''@;'; put 'put ''dTc1YjFcdTc4MzJcdTgwZGVcdTgxMmZcdTgyZGVcdTg0NjFcdTg0YjJcdTg4OGRcdTg5MTJcdTkwMGJcdTkyZWFcdTk4ZmRcdTliOTFcdTVlNDVcdTY2YjRcdTY2ZGRcdTcwMTFcdTcyMDZcdWZhMDdcdTRmZjVcdTUyN2RcdTVmNmFcdTYxNTNcdTY3NTNcdTZhMTlcdTZmMDJcdTc0ZTJcdTc5''@;'; put 'put ''NjhcdTg4NjhcdThjNzlcdTk4YzdcdTk4YzRcdTlhNDNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syNDhdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzI0OF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syNDhdW2ddXT02MzQ4OCtnLHlbNjM0ODgrZ109X1syNDhdW2ddKTtmb3IoX1syNDldPSJc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU0YzFcdTdhMWZcdTY5NTNcdThhZjdc''@;'; put 'put ''dThjNGFcdTk4YThcdTk5YWVcdTVmN2NcdTYyYWJcdTc1YjJcdTc2YWVcdTg4YWJcdTkwN2ZcdTk2NDJcdTUzMzlcdTVmM2NcdTVmYzVcdTZjY2NcdTczY2NcdTc1NjJcdTc1OGJcdTdiNDZcdTgyZmVcdTk5OWRcdTRlNGZcdTkwM2NcdTRlMGJcdTRmNTVcdTUzYTZcdTU5MGZcdTVlYzhcdTY2''@;'; put 'put ''MzBcdTZjYjNcdTc0NTVcdTgzNzdcdTg3NjZcdThjYzBcdTkwNTBcdTk3MWVcdTljMTVcdTU4ZDFcdTViNzhcdTg2NTBcdThiMTRcdTlkYjRcdTViZDJcdTYwNjhcdTYwOGRcdTY1ZjFcdTZjNTdcdTZmMjJcdTZmYTNcdTcwMWFcdTdmNTVcdTdmZjBcdTk1OTFcdTk1OTJcdTk2NTBcdTk3ZDNc''@;'; put 'put ''dTUyNzJcdThmNDRcdTUxZmRcdTU0MmJcdTU0YjhcdTU1NjNcdTU1OGFcdTZhYmJcdTZkYjVcdTdkZDhcdTgyNjZcdTkyOWNcdTk2NzdcdTllNzlcdTU0MDhcdTU0YzhcdTc2ZDJcdTg2ZTRcdTk1YTRcdTk1ZDRcdTk2NWNcdTRlYTJcdTRmMDlcdTU5ZWVcdTVhZTZcdTVkZjdcdTYwNTJcdTYy''@;'; put 'put ''OTdcdTY3NmRcdTY4NDFcdTZjODZcdTZlMmZcdTdmMzhcdTgwOWJcdTgyMmFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syNDldLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzI0OV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syNDldW2ddXT02Mzc0NCtnLHlbNjM3NDQrZ109X1syNDldW2ddKTtm''@;'; put 'put ''b3IoX1syNTBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZhMDhcdWZhMDlc''@;'; put 'put ''dTk4MDVcdTRlYTVcdTUwNTVcdTU0YjNcdTU3OTNcdTU5NWFcdTViNjlcdTViYjNcdTYxYzhcdTY5NzdcdTZkNzdcdTcwMjNcdTg3ZjlcdTg5ZTNcdThhNzJcdThhZTdcdTkwODJcdTk5ZWRcdTlhYjhcdTUyYmVcdTY4MzhcdTUwMTZcdTVlNzhcdTY3NGZcdTgzNDdcdTg4NGNcdTRlYWJcdTU0''@;'; put 'put ''MTFcdTU2YWVcdTczZTZcdTkxMTVcdTk3ZmZcdTk5MDlcdTk5NTdcdTk5OTlcdTU2NTNcdTU4OWZcdTg2NWJcdThhMzFcdTYxYjJcdTZhZjZcdTczN2JcdThlZDJcdTZiNDdcdTk2YWFcdTlhNTdcdTU5NTVcdTcyMDBcdThkNmJcdTk3NjlcdTRmZDRcdTVjZjRcdTVmMjZcdTYxZjhcdTY2NWJc''@;'; put 'put ''dTZjZWJcdTcwYWJcdTczODRcdTczYjlcdTczZmVcdTc3MjlcdTc3NGRcdTdkNDNcdTdkNjJcdTdlMjNcdTgyMzdcdTg4NTJcdWZhMGFcdThjZTJcdTkyNDlcdTk4NmZcdTViNTFcdTdhNzRcdTg4NDBcdTk4MDFcdTVhY2NcdTRmZTBcdTUzNTRcdTU5M2VcdTVjZmRcdTYzM2VcdTZkNzlcdTcy''@;'; put 'put ''ZjlcdTgxMDVcdTgxMDdcdTgzYTJcdTkyY2ZcdTk4MzBcdTRlYThcdTUxNDRcdTUyMTFcdTU3OGJcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syNTBdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzI1MF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syNTBdW2ddXT02NGUzK2cseVs2NGUzK2ddPV9b''@;'; put 'put ''MjUwXVtnXSk7Zm9yKF9bMjUxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1''@;'; put 'put ''ZjYyXHU2Y2MyXHU2ZWNlXHU3MDA1XHU3MDUwXHU3MGFmXHU3MTkyXHU3M2U5XHU3NDY5XHU4MzRhXHU4N2EyXHU4ODYxXHU5MDA4XHU5MGEyXHU5M2EzXHU5OWE4XHU1MTZlXHU1ZjU3XHU2MGUwXHU2MTY3XHU2NmIzXHU4NTU5XHU4ZTRhXHU5MWFmXHU5NzhiXHU0ZTRlXHU0ZTkyXHU1NDdj''@;'; put 'put ''XHU1OGQ1XHU1OGZhXHU1OTdkXHU1Y2I1XHU1ZjI3XHU2MjM2XHU2MjQ4XHU2NjBhXHU2NjY3XHU2YmViXHU2ZDY5XHU2ZGNmXHU2ZTU2XHU2ZWY4XHU2Zjk0XHU2ZmUwXHU2ZmU5XHU3MDVkXHU3MmQwXHU3NDI1XHU3NDVhXHU3NGUwXHU3NjkzXHU3OTVjXHU3Y2NhXHU3ZTFlXHU4MGUxXHU4''@;'; put 'put ''MmE2XHU4NDZiXHU4NGJmXHU4NjRlXHU4NjVmXHU4Nzc0XHU4Yjc3XHU4YzZhXHU5M2FjXHU5ODAwXHU5ODY1XHU2MGQxXHU2MjE2XHU5MTc3XHU1YTVhXHU2NjBmXHU2ZGY3XHU2ZTNlXHU3NDNmXHU5YjQyXHU1ZmZkXHU2MGRhXHU3YjBmXHU1NGM0XHU1ZjE4XHU2YzVlXHU2Y2QzXHU2ZDJh''@;'; put 'put ''XHU3MGQ4XHU3ZDA1XHU4Njc5XHU4YTBjXHU5ZDNiXHU1MzE2XHU1NDhjXHU1YjA1XHU2YTNhXHU3MDZiXHU3NTc1XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjUxXS5sZW5ndGg7KytnKTY1NTMzIT09X1syNTFdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjUxXVtnXV09NjQyNTYrZyx5''@;'; put 'put ''WzY0MjU2K2ddPV9bMjUxXVtnXSk7Zm9yKF9bMjUyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHU3OThkXHU3OWJlXHU4MmIxXHU4M2VmXHU4YTcxXHU4YjQxXHU4Y2E4XHU5Nzc0XHVmYTBiXHU2NGY0XHU2NTJiXHU3OGJhXHU3OGJiXHU3YTZiXHU0ZTM4XHU1NTlhXHU1OTUwXHU1YmE2XHU1ZTdiXHU2MGEzXHU2M2RiXHU2YjYxXHU2NjY1XHU2ODUzXHU2ZTE5XHU3MTY1''@;'; put 'put ''XHU3NGIwXHU3ZDA4XHU5MDg0XHU5YTY5XHU5YzI1XHU2ZDNiXHU2ZWQxXHU3MzNlXHU4YzQxXHU5NWNhXHU1MWYwXHU1ZTRjXHU1ZmE4XHU2MDRkXHU2MGY2XHU2MTMwXHU2MTRjXHU2NjQzXHU2NjQ0XHU2OWE1XHU2Y2MxXHU2ZTVmXHU2ZWM5XHU2ZjYyXHU3MTRjXHU3NDljXHU3Njg3XHU3''@;'; put 'put ''YmMxXHU3YzI3XHU4MzUyXHU4NzU3XHU5MDUxXHU5NjhkXHU5ZWMzXHU1MzJmXHU1NmRlXHU1ZWZiXHU1ZjhhXHU2MDYyXHU2MDk0XHU2MWY3XHU2NjY2XHU2NzAzXHU2YTljXHU2ZGVlXHU2ZmFlXHU3MDcwXHU3MzZhXHU3ZTZhXHU4MWJlXHU4MzM0XHU4NmQ0XHU4YWE4XHU4Y2M0XHU1Mjgz''@;'; put 'put ''XHU3MzcyXHU1Yjk2XHU2YTZiXHU5NDA0XHU1NGVlXHU1Njg2XHU1YjVkXHU2NTQ4XHU2NTg1XHU2NmM5XHU2ODlmXHU2ZDhkXHU2ZGM2XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjUyXS5sZW5ndGg7KytnKTY1NTMzIT09X1syNTJdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjUyXVtn''@;'; put 'put ''XV09NjQ1MTIrZyx5WzY0NTEyK2ddPV9bMjUyXVtnXSk7Zm9yKF9bMjUzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3MjNiXHU4MGI0XHU5MTc1XHU5YTRkXHU0ZmFmXHU1MDE5XHU1MzlhXHU1NDBlXHU1NDNjXHU1NTg5XHU1NWM1XHU1ZTNmXHU1ZjhjXHU2NzNkXHU3MTY2XHU3M2RkXHU5MDA1XHU1MmRiXHU1MmYzXHU1ODY0XHU1OGNlXHU3MTA0XHU3MThmXHU3MWZi''@;'; put 'put ''XHU4NWIwXHU4YTEzXHU2Njg4XHU4NWE4XHU1NWE3XHU2Njg0XHU3MTRhXHU4NDMxXHU1MzQ5XHU1NTk5XHU2YmMxXHU1ZjU5XHU1ZmJkXHU2M2VlXHU2Njg5XHU3MTQ3XHU4YWYxXHU4ZjFkXHU5ZWJlXHU0ZjExXHU2NDNhXHU3MGNiXHU3NTY2XHU4NjY3XHU2MDY0XHU4YjRlXHU5ZGY4XHU1''@;'; put 'put ''MTQ3XHU1MWY2XHU1MzA4XHU2ZDM2XHU4MGY4XHU5ZWQxXHU2NjE1XHU2YjIzXHU3MDk4XHU3NWQ1XHU1NDAzXHU1Yzc5XHU3ZDA3XHU4YTE2XHU2YjIwXHU2YjNkXHU2YjQ2XHU1NDM4XHU2MDcwXHU2ZDNkXHU3ZmQ1XHU4MjA4XHU1MGQ2XHU1MWRlXHU1NTljXHU1NjZiXHU1NmNkXHU1OWVj''@;'; put 'put ''XHU1YjA5XHU1ZTBjXHU2MTk5XHU2MTk4XHU2MjMxXHU2NjVlXHU2NmU2XHU3MTk5XHU3MWI5XHU3MWJhXHU3MmE3XHU3OWE3XHU3YTAwXHU3ZmIyXHU4YTcwXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjUzXS5sZW5ndGg7KytnKTY1NTMzIT09X1syNTNdW2ddLmNoYXJDb2RlQXQoMCkm''@;'; put 'put ''JihJW19bMjUzXVtnXV09NjQ3NjgrZyx5WzY0NzY4K2ddPV9bMjUzXVtnXSk7cmV0dXJue2VuYzpJLGRlYzp5fX0oKSxYWzk1MF09ZnVuY3Rpb24oKXt2YXIgZyx5PVtdLEk9e30sXz1bXTtmb3IoX1swXT0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4''@;'; put 'put ''MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4''@;'; put 'put ''N2ZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1swXS5sZW5ndGg7KytnKTY1NTMzIT09X1swXVtnXS5jaGFy''@;'; put 'put ''Q29kZUF0KDApJiYoSVtfWzBdW2ddXT0wK2cseVswK2ddPV9bMF1bZ10pO2ZvcihfWzE2MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MzAwMFx1ZmYwY1x1MzAwMVx1MzAwMlx1ZmYwZVx1MjAyN1x1ZmYxYlx1ZmYxYVx1ZmYxZlx1''@;'; put 'put ''ZmYwMVx1ZmUzMFx1MjAyNlx1MjAyNVx1ZmU1MFx1ZmU1MVx1ZmU1Mlx4YjdcdWZlNTRcdWZlNTVcdWZlNTZcdWZlNTdcdWZmNWNcdTIwMTNcdWZlMzFcdTIwMTRcdWZlMzNcdTI1NzRcdWZlMzRcdWZlNGZcdWZmMDhcdWZmMDlcdWZlMzVcdWZlMzZcdWZmNWJcdWZmNWRcdWZlMzdcdWZlMzhc''@;'; put 'put ''dTMwMTRcdTMwMTVcdWZlMzlcdWZlM2FcdTMwMTBcdTMwMTFcdWZlM2JcdWZlM2NcdTMwMGFcdTMwMGJcdWZlM2RcdWZlM2VcdTMwMDhcdTMwMDlcdWZlM2ZcdWZlNDBcdTMwMGNcdTMwMGRcdWZlNDFcdWZlNDJcdTMwMGVcdTMwMGZcdWZlNDNcdWZlNDRcdWZlNTlcdWZlNWFcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZlNWJcdWZlNWNcdWZlNWRcdWZlNWVcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTMwMWRcdTMwMWVcdTIwMzVcdTIwMzJcdWZmMDNcdWZmMDZcdWZmMGFcdTIwM2JceGE3XHUzMDAzXHUyNWNiXHUyNWNmXHUyNWIzXHUyNWIyXHUyNWNl''@;'; put 'put ''XHUyNjA2XHUyNjA1XHUyNWM3XHUyNWM2XHUyNWExXHUyNWEwXHUyNWJkXHUyNWJjXHUzMmEzXHUyMTA1XHhhZlx1ZmZlM1x1ZmYzZlx1MDJjZFx1ZmU0OVx1ZmU0YVx1ZmU0ZFx1ZmU0ZVx1ZmU0Ylx1ZmU0Y1x1ZmU1Zlx1ZmU2MFx1ZmU2MVx1ZmYwYlx1ZmYwZFx4ZDdceGY3XHhiMVx1MjIx''@;'; put 'put ''YVx1ZmYxY1x1ZmYxZVx1ZmYxZFx1MjI2Nlx1MjI2N1x1MjI2MFx1MjIxZVx1MjI1Mlx1MjI2MVx1ZmU2Mlx1ZmU2M1x1ZmU2NFx1ZmU2NVx1ZmU2Nlx1ZmY1ZVx1MjIyOVx1MjIyYVx1MjJhNVx1MjIyMFx1MjIxZlx1MjJiZlx1MzNkMlx1MzNkMVx1MjIyYlx1MjIyZVx1MjIzNVx1MjIzNFx1''@;'; put 'put ''MjY0MFx1MjY0Mlx1MjI5NVx1MjI5OVx1MjE5MVx1MjE5M1x1MjE5MFx1MjE5Mlx1MjE5Nlx1MjE5N1x1MjE5OVx1MjE5OFx1MjIyNVx1MjIyM1x1ZmYwZlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE2MV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTYxXVtnXS5jaGFyQ29kZUF0KDApJiYo''@;'; put 'put ''SVtfWzE2MV1bZ11dPTQxMjE2K2cseVs0MTIxNitnXT1fWzE2MV1bZ10pO2ZvcihfWzE2Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmYzY1x1MjIxNVx1ZmU2OFx1ZmYwNFx1ZmZlNVx1MzAxMlx1ZmZlMFx1ZmZlMVx1ZmYwNVx1''@;'; put 'put ''ZmYyMFx1MjEwM1x1MjEwOVx1ZmU2OVx1ZmU2YVx1ZmU2Ylx1MzNkNVx1MzM5Y1x1MzM5ZFx1MzM5ZVx1MzNjZVx1MzNhMVx1MzM4ZVx1MzM4Zlx1MzNjNFx4YjBcdTUxNTlcdTUxNWJcdTUxNWVcdTUxNWRcdTUxNjFcdTUxNjNcdTU1ZTdcdTc0ZTlcdTdjY2VcdTI1ODFcdTI1ODJcdTI1ODNc''@;'; put 'put ''dTI1ODRcdTI1ODVcdTI1ODZcdTI1ODdcdTI1ODhcdTI1OGZcdTI1OGVcdTI1OGRcdTI1OGNcdTI1OGJcdTI1OGFcdTI1ODlcdTI1M2NcdTI1MzRcdTI1MmNcdTI1MjRcdTI1MWNcdTI1OTRcdTI1MDBcdTI1MDJcdTI1OTVcdTI1MGNcdTI1MTBcdTI1MTRcdTI1MThcdTI1NmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTI1NmVcdTI1NzBcdTI1NmZcdTI1NTBcdTI1NWVcdTI1NmFcdTI1NjFcdTI1ZTJcdTI1ZTNcdTI1ZTVcdTI1ZTRcdTI1NzFcdTI1NzJcdTI1NzNcdWZmMTBcdWZmMTFcdWZmMTJcdWZmMTNcdWZmMTRcdWZmMTVcdWZmMTZcdWZmMTdcdWZm''@;'; put 'put ''MThcdWZmMTlcdTIxNjBcdTIxNjFcdTIxNjJcdTIxNjNcdTIxNjRcdTIxNjVcdTIxNjZcdTIxNjdcdTIxNjhcdTIxNjlcdTMwMjFcdTMwMjJcdTMwMjNcdTMwMjRcdTMwMjVcdTMwMjZcdTMwMjdcdTMwMjhcdTMwMjlcdTUzNDFcdTUzNDRcdTUzNDVcdWZmMjFcdWZmMjJcdWZmMjNcdWZmMjRc''@;'; put 'put ''dWZmMjVcdWZmMjZcdWZmMjdcdWZmMjhcdWZmMjlcdWZmMmFcdWZmMmJcdWZmMmNcdWZmMmRcdWZmMmVcdWZmMmZcdWZmMzBcdWZmMzFcdWZmMzJcdWZmMzNcdWZmMzRcdWZmMzVcdWZmMzZcdWZmMzdcdWZmMzhcdWZmMzlcdWZmM2FcdWZmNDFcdWZmNDJcdWZmNDNcdWZmNDRcdWZmNDVcdWZm''@;'; put 'put ''NDZcdWZmNDdcdWZmNDhcdWZmNDlcdWZmNGFcdWZmNGJcdWZmNGNcdWZmNGRcdWZmNGVcdWZmNGZcdWZmNTBcdWZmNTFcdWZmNTJcdWZmNTNcdWZmNTRcdWZmNTVcdWZmNTZcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNjJdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE2Ml1bZ10uY2hhckNv''@;'; put 'put ''ZGVBdCgwKSYmKElbX1sxNjJdW2ddXT00MTQ3MitnLHlbNDE0NzIrZ109X1sxNjJdW2ddKTtmb3IoX1sxNjNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmNTdcdWZmNThcdWZmNTlcdWZmNWFcdTAzOTFcdTAzOTJcdTAzOTNcdTAz''@;'; put 'put ''OTRcdTAzOTVcdTAzOTZcdTAzOTdcdTAzOThcdTAzOTlcdTAzOWFcdTAzOWJcdTAzOWNcdTAzOWRcdTAzOWVcdTAzOWZcdTAzYTBcdTAzYTFcdTAzYTNcdTAzYTRcdTAzYTVcdTAzYTZcdTAzYTdcdTAzYThcdTAzYTlcdTAzYjFcdTAzYjJcdTAzYjNcdTAzYjRcdTAzYjVcdTAzYjZcdTAzYjdc''@;'; put 'put ''dTAzYjhcdTAzYjlcdTAzYmFcdTAzYmJcdTAzYmNcdTAzYmRcdTAzYmVcdTAzYmZcdTAzYzBcdTAzYzFcdTAzYzNcdTAzYzRcdTAzYzVcdTAzYzZcdTAzYzdcdTAzYzhcdTAzYzlcdTMxMDVcdTMxMDZcdTMxMDdcdTMxMDhcdTMxMDlcdTMxMGFcdTMxMGJcdTMxMGNcdTMxMGRcdTMxMGVcdTMx''@;'; put 'put ''MGZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTMxMTBcdTMxMTFcdTMxMTJcdTMxMTNcdTMxMTRcdTMxMTVcdTMxMTZcdTMxMTdcdTMxMThcdTMxMTlcdTMxMWFcdTMxMWJcdTMxMWNcdTMxMWRcdTMxMWVcdTMxMWZcdTMxMjBcdTMxMjFcdTMxMjJcdTMxMjNcdTMx''@;'; put 'put ''MjRcdTMxMjVcdTMxMjZcdTMxMjdcdTMxMjhcdTMxMjlcdTAyZDlcdTAyYzlcdTAyY2FcdTAyYzdcdTAyY2JcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTIwYWNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNjNdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE2''@;'; put 'put ''M11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNjNdW2ddXT00MTcyOCtnLHlbNDE3MjgrZ109X1sxNjNdW2ddKTtmb3IoX1sxNjRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRlMDBcdTRlNTlcdTRlMDFcdTRlMDNcdTRlNDNcdTRl''@;'; put 'put ''NWRcdTRlODZcdTRlOGNcdTRlYmFcdTUxM2ZcdTUxNjVcdTUxNmJcdTUxZTBcdTUyMDBcdTUyMDFcdTUyOWJcdTUzMTVcdTUzNDFcdTUzNWNcdTUzYzhcdTRlMDlcdTRlMGJcdTRlMDhcdTRlMGFcdTRlMmJcdTRlMzhcdTUxZTFcdTRlNDVcdTRlNDhcdTRlNWZcdTRlNWVcdTRlOGVcdTRlYTFc''@;'; put 'put ''dTUxNDBcdTUyMDNcdTUyZmFcdTUzNDNcdTUzYzlcdTUzZTNcdTU3MWZcdTU4ZWJcdTU5MTVcdTU5MjdcdTU5NzNcdTViNTBcdTViNTFcdTViNTNcdTViZjhcdTVjMGZcdTVjMjJcdTVjMzhcdTVjNzFcdTVkZGRcdTVkZTVcdTVkZjFcdTVkZjJcdTVkZjNcdTVkZmVcdTVlNzJcdTVlZmVcdTVm''@;'; put 'put ''MGJcdTVmMTNcdTYyNGRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRlMTFcdTRlMTBcdTRlMGRcdTRlMmRcdTRlMzBcdTRlMzlcdTRlNGJcdTVjMzlcdTRlODhcdTRlOTFcdTRlOTVcdTRlOTJcdTRlOTRcdTRlYTJcdTRlYzFcdTRlYzBcdTRlYzNcdTRlYzZcdTRl''@;'; put 'put ''YzdcdTRlY2RcdTRlY2FcdTRlY2JcdTRlYzRcdTUxNDNcdTUxNDFcdTUxNjdcdTUxNmRcdTUxNmVcdTUxNmNcdTUxOTdcdTUxZjZcdTUyMDZcdTUyMDdcdTUyMDhcdTUyZmJcdTUyZmVcdTUyZmZcdTUzMTZcdTUzMzlcdTUzNDhcdTUzNDdcdTUzNDVcdTUzNWVcdTUzODRcdTUzY2JcdTUzY2Fc''@;'; put 'put ''dTUzY2RcdTU4ZWNcdTU5MjlcdTU5MmJcdTU5MmFcdTU5MmRcdTViNTRcdTVjMTFcdTVjMjRcdTVjM2FcdTVjNmZcdTVkZjRcdTVlN2JcdTVlZmZcdTVmMTRcdTVmMTVcdTVmYzNcdTYyMDhcdTYyMzZcdTYyNGJcdTYyNGVcdTY1MmZcdTY1ODdcdTY1OTdcdTY1YTRcdTY1YjlcdTY1ZTVcdTY2''@;'; put 'put ''ZjBcdTY3MDhcdTY3MjhcdTZiMjBcdTZiNjJcdTZiNzlcdTZiY2JcdTZiZDRcdTZiZGJcdTZjMGZcdTZjMzRcdTcwNmJcdTcyMmFcdTcyMzZcdTcyM2JcdTcyNDdcdTcyNTlcdTcyNWJcdTcyYWNcdTczOGJcdTRlMTlcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNjRdLmxlbmd0aDsrK2cp''@;'; put 'put ''NjU1MzMhPT1fWzE2NF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNjRdW2ddXT00MTk4NCtnLHlbNDE5ODQrZ109X1sxNjRdW2ddKTtmb3IoX1sxNjVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRlMTZcdTRlMTVcdTRlMTRcdTRl''@;'; put 'put ''MThcdTRlM2JcdTRlNGRcdTRlNGZcdTRlNGVcdTRlZTVcdTRlZDhcdTRlZDRcdTRlZDVcdTRlZDZcdTRlZDdcdTRlZTNcdTRlZTRcdTRlZDlcdTRlZGVcdTUxNDVcdTUxNDRcdTUxODlcdTUxOGFcdTUxYWNcdTUxZjlcdTUxZmFcdTUxZjhcdTUyMGFcdTUyYTBcdTUyOWZcdTUzMDVcdTUzMDZc''@;'; put 'put ''dTUzMTdcdTUzMWRcdTRlZGZcdTUzNGFcdTUzNDlcdTUzNjFcdTUzNjBcdTUzNmZcdTUzNmVcdTUzYmJcdTUzZWZcdTUzZTRcdTUzZjNcdTUzZWNcdTUzZWVcdTUzZTlcdTUzZThcdTUzZmNcdTUzZjhcdTUzZjVcdTUzZWJcdTUzZTZcdTUzZWFcdTUzZjJcdTUzZjFcdTUzZjBcdTUzZTVcdTUz''@;'; put 'put ''ZWRcdTUzZmJcdTU2ZGJcdTU2ZGFcdTU5MTZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU5MmVcdTU5MzFcdTU5NzRcdTU5NzZcdTViNTVcdTViODNcdTVjM2NcdTVkZThcdTVkZTdcdTVkZTZcdTVlMDJcdTVlMDNcdTVlNzNcdTVlN2NcdTVmMDFcdTVmMThcdTVm''@;'; put 'put ''MTdcdTVmYzVcdTYyMGFcdTYyNTNcdTYyNTRcdTYyNTJcdTYyNTFcdTY1YTVcdTY1ZTZcdTY3MmVcdTY3MmNcdTY3MmFcdTY3MmJcdTY3MmRcdTZiNjNcdTZiY2RcdTZjMTFcdTZjMTBcdTZjMzhcdTZjNDFcdTZjNDBcdTZjM2VcdTcyYWZcdTczODRcdTczODlcdTc0ZGNcdTc0ZTZcdTc1MThc''@;'; put 'put ''dTc1MWZcdTc1MjhcdTc1MjlcdTc1MzBcdTc1MzFcdTc1MzJcdTc1MzNcdTc1OGJcdTc2N2RcdTc2YWVcdTc2YmZcdTc2ZWVcdTc3ZGJcdTc3ZTJcdTc3ZjNcdTc5M2FcdTc5YmVcdTdhNzRcdTdhY2JcdTRlMWVcdTRlMWZcdTRlNTJcdTRlNTNcdTRlNjlcdTRlOTlcdTRlYTRcdTRlYTZcdTRl''@;'; put 'put ''YTVcdTRlZmZcdTRmMDlcdTRmMTlcdTRmMGFcdTRmMTVcdTRmMGRcdTRmMTBcdTRmMTFcdTRmMGZcdTRlZjJcdTRlZjZcdTRlZmJcdTRlZjBcdTRlZjNcdTRlZmRcdTRmMDFcdTRmMGJcdTUxNDlcdTUxNDdcdTUxNDZcdTUxNDhcdTUxNjhcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNjVd''@;'; put 'put ''Lmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE2NV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNjVdW2ddXT00MjI0MCtnLHlbNDIyNDArZ109X1sxNjVdW2ddKTtmb3IoX1sxNjZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUxNzFcdTUx''@;'; put 'put ''OGRcdTUxYjBcdTUyMTdcdTUyMTFcdTUyMTJcdTUyMGVcdTUyMTZcdTUyYTNcdTUzMDhcdTUzMjFcdTUzMjBcdTUzNzBcdTUzNzFcdTU0MDlcdTU0MGZcdTU0MGNcdTU0MGFcdTU0MTBcdTU0MDFcdTU0MGJcdTU0MDRcdTU0MTFcdTU0MGRcdTU0MDhcdTU0MDNcdTU0MGVcdTU0MDZcdTU0MTJc''@;'; put 'put ''dTU2ZTBcdTU2ZGVcdTU2ZGRcdTU3MzNcdTU3MzBcdTU3MjhcdTU3MmRcdTU3MmNcdTU3MmZcdTU3MjlcdTU5MTlcdTU5MWFcdTU5MzdcdTU5MzhcdTU5ODRcdTU5NzhcdTU5ODNcdTU5N2RcdTU5NzlcdTU5ODJcdTU5ODFcdTViNTdcdTViNThcdTViODdcdTViODhcdTViODVcdTViODlcdTVi''@;'; put 'put ''ZmFcdTVjMTZcdTVjNzlcdTVkZGVcdTVlMDZcdTVlNzZcdTVlNzRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVmMGZcdTVmMWJcdTVmZDlcdTVmZDZcdTYyMGVcdTYyMGNcdTYyMGRcdTYyMTBcdTYyNjNcdTYyNWJcdTYyNThcdTY1MzZcdTY1ZTlcdTY1ZThcdTY1''@;'; put 'put ''ZWNcdTY1ZWRcdTY2ZjJcdTY2ZjNcdTY3MDlcdTY3M2RcdTY3MzRcdTY3MzFcdTY3MzVcdTZiMjFcdTZiNjRcdTZiN2JcdTZjMTZcdTZjNWRcdTZjNTdcdTZjNTlcdTZjNWZcdTZjNjBcdTZjNTBcdTZjNTVcdTZjNjFcdTZjNWJcdTZjNGRcdTZjNGVcdTcwNzBcdTcyNWZcdTcyNWRcdTc2N2Vc''@;'; put 'put ''dTdhZjlcdTdjNzNcdTdjZjhcdTdmMzZcdTdmOGFcdTdmYmRcdTgwMDFcdTgwMDNcdTgwMGNcdTgwMTJcdTgwMzNcdTgwN2ZcdTgwODlcdTgwOGJcdTgwOGNcdTgxZTNcdTgxZWFcdTgxZjNcdTgxZmNcdTgyMGNcdTgyMWJcdTgyMWZcdTgyNmVcdTgyNzJcdTgyN2VcdTg2NmJcdTg4NDBcdTg4''@;'; put 'put ''NGNcdTg4NjNcdTg5N2ZcdTk2MjFcdTRlMzJcdTRlYThcdTRmNGRcdTRmNGZcdTRmNDdcdTRmNTdcdTRmNWVcdTRmMzRcdTRmNWJcdTRmNTVcdTRmMzBcdTRmNTBcdTRmNTFcdTRmM2RcdTRmM2FcdTRmMzhcdTRmNDNcdTRmNTRcdTRmM2NcdTRmNDZcdTRmNjNcdWZmZmQiLnNwbGl0KCIiKSxn''@;'; put 'put ''PTA7ZyE9X1sxNjZdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE2Nl1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNjZdW2ddXT00MjQ5NitnLHlbNDI0OTYrZ109X1sxNjZdW2ddKTtmb3IoX1sxNjddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdTRmNWNcdTRmNjBcdTRmMmZcdTRmNGVcdTRmMzZcdTRmNTlcdTRmNWRcdTRmNDhcdTRmNWFcdTUxNGNcdTUxNGJcdTUxNGRcdTUxNzVcdTUxYjZcdTUxYjdcdTUyMjVcdTUyMjRcdTUyMjlcdTUyMmFcdTUyMjhcdTUyYWJcdTUyYTlcdTUyYWFcdTUyYWNcdTUzMjNcdTUzNzNcdTUzNzVc''@;'; put 'put ''dTU0MWRcdTU0MmRcdTU0MWVcdTU0M2VcdTU0MjZcdTU0NGVcdTU0MjdcdTU0NDZcdTU0NDNcdTU0MzNcdTU0NDhcdTU0NDJcdTU0MWJcdTU0MjlcdTU0NGFcdTU0MzlcdTU0M2JcdTU0MzhcdTU0MmVcdTU0MzVcdTU0MzZcdTU0MjBcdTU0M2NcdTU0NDBcdTU0MzFcdTU0MmJcdTU0MWZcdTU0''@;'; put 'put ''MmNcdTU2ZWFcdTU2ZjBcdTU2ZTRcdTU2ZWJcdTU3NGFcdTU3NTFcdTU3NDBcdTU3NGRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU3NDdcdTU3NGVcdTU3M2VcdTU3NTBcdTU3NGZcdTU3M2JcdTU4ZWZcdTU5M2VcdTU5OWRcdTU5OTJcdTU5YThcdTU5OWVcdTU5''@;'; put 'put ''YTNcdTU5OTlcdTU5OTZcdTU5OGRcdTU5YTRcdTU5OTNcdTU5OGFcdTU5YTVcdTViNWRcdTViNWNcdTViNWFcdTViNWJcdTViOGNcdTViOGJcdTViOGZcdTVjMmNcdTVjNDBcdTVjNDFcdTVjM2ZcdTVjM2VcdTVjOTBcdTVjOTFcdTVjOTRcdTVjOGNcdTVkZWJcdTVlMGNcdTVlOGZcdTVlODdc''@;'; put 'put ''dTVlOGFcdTVlZjdcdTVmMDRcdTVmMWZcdTVmNjRcdTVmNjJcdTVmNzdcdTVmNzlcdTVmZDhcdTVmY2NcdTVmZDdcdTVmY2RcdTVmZjFcdTVmZWJcdTVmZjhcdTVmZWFcdTYyMTJcdTYyMTFcdTYyODRcdTYyOTdcdTYyOTZcdTYyODBcdTYyNzZcdTYyODlcdTYyNmRcdTYyOGFcdTYyN2NcdTYy''@;'; put 'put ''N2VcdTYyNzlcdTYyNzNcdTYyOTJcdTYyNmZcdTYyOThcdTYyNmVcdTYyOTVcdTYyOTNcdTYyOTFcdTYyODZcdTY1MzlcdTY1M2JcdTY1MzhcdTY1ZjFcdTY2ZjRcdTY3NWZcdTY3NGVcdTY3NGZcdTY3NTBcdTY3NTFcdTY3NWNcdTY3NTZcdTY3NWVcdTY3NDlcdTY3NDZcdTY3NjBcdWZmZmQi''@;'; put 'put ''LnNwbGl0KCIiKSxnPTA7ZyE9X1sxNjddLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE2N11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNjddW2ddXT00Mjc1MitnLHlbNDI3NTIrZ109X1sxNjddW2ddKTtmb3IoX1sxNjhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdTY3NTNcdTY3NTdcdTZiNjVcdTZiY2ZcdTZjNDJcdTZjNWVcdTZjOTlcdTZjODFcdTZjODhcdTZjODlcdTZjODVcdTZjOWJcdTZjNmFcdTZjN2FcdTZjOTBcdTZjNzBcdTZjOGNcdTZjNjhcdTZjOTZcdTZjOTJcdTZjN2RcdTZjODNcdTZjNzJcdTZjN2VcdTZjNzRc''@;'; put 'put ''dTZjODZcdTZjNzZcdTZjOGRcdTZjOTRcdTZjOThcdTZjODJcdTcwNzZcdTcwN2NcdTcwN2RcdTcwNzhcdTcyNjJcdTcyNjFcdTcyNjBcdTcyYzRcdTcyYzJcdTczOTZcdTc1MmNcdTc1MmJcdTc1MzdcdTc1MzhcdTc2ODJcdTc2ZWZcdTc3ZTNcdTc5YzFcdTc5YzBcdTc5YmZcdTdhNzZcdTdj''@;'; put 'put ''ZmJcdTdmNTVcdTgwOTZcdTgwOTNcdTgwOWRcdTgwOThcdTgwOWJcdTgwOWFcdTgwYjJcdTgyNmZcdTgyOTJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgyOGJcdTgyOGRcdTg5OGJcdTg5ZDJcdThhMDBcdThjMzdcdThjNDZcdThjNTVcdThjOWRcdThkNjRcdThk''@;'; put 'put ''NzBcdThkYjNcdThlYWJcdThlY2FcdThmOWJcdThmYjBcdThmYzJcdThmYzZcdThmYzVcdThmYzRcdTVkZTFcdTkwOTFcdTkwYTJcdTkwYWFcdTkwYTZcdTkwYTNcdTkxNDlcdTkxYzZcdTkxY2NcdTk2MzJcdTk2MmVcdTk2MzFcdTk2MmFcdTk2MmNcdTRlMjZcdTRlNTZcdTRlNzNcdTRlOGJc''@;'; put 'put ''dTRlOWJcdTRlOWVcdTRlYWJcdTRlYWNcdTRmNmZcdTRmOWRcdTRmOGRcdTRmNzNcdTRmN2ZcdTRmNmNcdTRmOWJcdTRmOGJcdTRmODZcdTRmODNcdTRmNzBcdTRmNzVcdTRmODhcdTRmNjlcdTRmN2JcdTRmOTZcdTRmN2VcdTRmOGZcdTRmOTFcdTRmN2FcdTUxNTRcdTUxNTJcdTUxNTVcdTUx''@;'; put 'put ''NjlcdTUxNzdcdTUxNzZcdTUxNzhcdTUxYmRcdTUxZmRcdTUyM2JcdTUyMzhcdTUyMzdcdTUyM2FcdTUyMzBcdTUyMmVcdTUyMzZcdTUyNDFcdTUyYmVcdTUyYmJcdTUzNTJcdTUzNTRcdTUzNTNcdTUzNTFcdTUzNjZcdTUzNzdcdTUzNzhcdTUzNzlcdTUzZDZcdTUzZDRcdTUzZDdcdTU0NzNc''@;'; put 'put ''dTU0NzVcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNjhdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE2OF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNjhdW2ddXT00MzAwOCtnLHlbNDMwMDgrZ109X1sxNjhdW2ddKTtmb3IoX1sxNjldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU0OTZcdTU0NzhcdTU0OTVcdTU0ODBcdTU0N2JcdTU0NzdcdTU0ODRcdTU0OTJcdTU0ODZcdTU0N2NcdTU0OTBcdTU0NzFcdTU0NzZcdTU0OGNcdTU0OWFcdTU0NjJcdTU0NjhcdTU0OGJcdTU0N2RcdTU0OGVcdTU2ZmFcdTU3ODNcdTU3Nzdc''@;'; put 'put ''dTU3NmFcdTU3NjlcdTU3NjFcdTU3NjZcdTU3NjRcdTU3N2NcdTU5MWNcdTU5NDlcdTU5NDdcdTU5NDhcdTU5NDRcdTU5NTRcdTU5YmVcdTU5YmJcdTU5ZDRcdTU5YjlcdTU5YWVcdTU5ZDFcdTU5YzZcdTU5ZDBcdTU5Y2RcdTU5Y2JcdTU5ZDNcdTU5Y2FcdTU5YWZcdTU5YjNcdTU5ZDJcdTU5''@;'; put 'put ''YzVcdTViNWZcdTViNjRcdTViNjNcdTViOTdcdTViOWFcdTViOThcdTViOWNcdTViOTlcdTViOWJcdTVjMWFcdTVjNDhcdTVjNDVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVjNDZcdTVjYjdcdTVjYTFcdTVjYjhcdTVjYTlcdTVjYWJcdTVjYjFcdTVjYjNcdTVl''@;'; put 'put ''MThcdTVlMWFcdTVlMTZcdTVlMTVcdTVlMWJcdTVlMTFcdTVlNzhcdTVlOWFcdTVlOTdcdTVlOWNcdTVlOTVcdTVlOTZcdTVlZjZcdTVmMjZcdTVmMjdcdTVmMjlcdTVmODBcdTVmODFcdTVmN2ZcdTVmN2NcdTVmZGRcdTVmZTBcdTVmZmRcdTVmZjVcdTVmZmZcdTYwMGZcdTYwMTRcdTYwMmZc''@;'; put 'put ''dTYwMzVcdTYwMTZcdTYwMmFcdTYwMTVcdTYwMjFcdTYwMjdcdTYwMjlcdTYwMmJcdTYwMWJcdTYyMTZcdTYyMTVcdTYyM2ZcdTYyM2VcdTYyNDBcdTYyN2ZcdTYyYzlcdTYyY2NcdTYyYzRcdTYyYmZcdTYyYzJcdTYyYjlcdTYyZDJcdTYyZGJcdTYyYWJcdTYyZDNcdTYyZDRcdTYyY2JcdTYy''@;'; put 'put ''YzhcdTYyYThcdTYyYmRcdTYyYmNcdTYyZDBcdTYyZDlcdTYyYzdcdTYyY2RcdTYyYjVcdTYyZGFcdTYyYjFcdTYyZDhcdTYyZDZcdTYyZDdcdTYyYzZcdTYyYWNcdTYyY2VcdTY1M2VcdTY1YTdcdTY1YmNcdTY1ZmFcdTY2MTRcdTY2MTNcdTY2MGNcdTY2MDZcdTY2MDJcdTY2MGVcdTY2MDBc''@;'; put 'put ''dTY2MGZcdTY2MTVcdTY2MGFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNjldLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE2OV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNjldW2ddXT00MzI2NCtnLHlbNDMyNjQrZ109X1sxNjldW2ddKTtmb3IoX1sxNzBdPSJcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY2MDdcdTY3MGRcdTY3MGJcdTY3NmRcdTY3OGJcdTY3OTVcdTY3NzFcdTY3OWNcdTY3NzNcdTY3NzdcdTY3ODdcdTY3OWRcdTY3OTdcdTY3NmZcdTY3NzBcdTY3N2ZcdTY3ODlcdTY3N2VcdTY3OTBcdTY3NzVcdTY3OWFc''@;'; put 'put ''dTY3OTNcdTY3N2NcdTY3NmFcdTY3NzJcdTZiMjNcdTZiNjZcdTZiNjdcdTZiN2ZcdTZjMTNcdTZjMWJcdTZjZTNcdTZjZThcdTZjZjNcdTZjYjFcdTZjY2NcdTZjZTVcdTZjYjNcdTZjYmRcdTZjYmVcdTZjYmNcdTZjZTJcdTZjYWJcdTZjZDVcdTZjZDNcdTZjYjhcdTZjYzRcdTZjYjlcdTZj''@;'; put 'put ''YzFcdTZjYWVcdTZjZDdcdTZjYzVcdTZjZjFcdTZjYmZcdTZjYmJcdTZjZTFcdTZjZGJcdTZjY2FcdTZjYWNcdTZjZWZcdTZjZGNcdTZjZDZcdTZjZTBcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTcwOTVcdTcwOGVcdTcwOTJcdTcwOGFcdTcwOTlcdTcyMmNcdTcy''@;'; put 'put ''MmRcdTcyMzhcdTcyNDhcdTcyNjdcdTcyNjlcdTcyYzBcdTcyY2VcdTcyZDlcdTcyZDdcdTcyZDBcdTczYTlcdTczYThcdTczOWZcdTczYWJcdTczYTVcdTc1M2RcdTc1OWRcdTc1OTlcdTc1OWFcdTc2ODRcdTc2YzJcdTc2ZjJcdTc2ZjRcdTc3ZTVcdTc3ZmRcdTc5M2VcdTc5NDBcdTc5NDFc''@;'; put 'put ''dTc5YzlcdTc5YzhcdTdhN2FcdTdhNzlcdTdhZmFcdTdjZmVcdTdmNTRcdTdmOGNcdTdmOGJcdTgwMDVcdTgwYmFcdTgwYTVcdTgwYTJcdTgwYjFcdTgwYTFcdTgwYWJcdTgwYTlcdTgwYjRcdTgwYWFcdTgwYWZcdTgxZTVcdTgxZmVcdTgyMGRcdTgyYjNcdTgyOWRcdTgyOTlcdTgyYWRcdTgy''@;'; put 'put ''YmRcdTgyOWZcdTgyYjlcdTgyYjFcdTgyYWNcdTgyYTVcdTgyYWZcdTgyYjhcdTgyYTNcdTgyYjBcdTgyYmVcdTgyYjdcdTg2NGVcdTg2NzFcdTUyMWRcdTg4NjhcdThlY2JcdThmY2VcdThmZDRcdThmZDFcdTkwYjVcdTkwYjhcdTkwYjFcdTkwYjZcdTkxYzdcdTkxZDFcdTk1NzdcdTk1ODBc''@;'; put 'put ''dTk2MWNcdTk2NDBcdTk2M2ZcdTk2M2JcdTk2NDRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNzBdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE3MF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNzBdW2ddXT00MzUyMCtnLHlbNDM1MjArZ109X1sxNzBdW2ddKTtmb3IoX1sxNzFdPSJcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk2NDJcdTk2YjlcdTk2ZThcdTk3NTJcdTk3NWVcdTRlOWZcdTRlYWRcdTRlYWVcdTRmZTFcdTRmYjVcdTRmYWZcdTRmYmZcdTRmZTBcdTRmZDFcdTRmY2ZcdTRmZGRcdTRmYzNcdTRmYjZcdTRmZDhc''@;'; put 'put ''dTRmZGZcdTRmY2FcdTRmZDdcdTRmYWVcdTRmZDBcdTRmYzRcdTRmYzJcdTRmZGFcdTRmY2VcdTRmZGVcdTRmYjdcdTUxNTdcdTUxOTJcdTUxOTFcdTUxYTBcdTUyNGVcdTUyNDNcdTUyNGFcdTUyNGRcdTUyNGNcdTUyNGJcdTUyNDdcdTUyYzdcdTUyYzlcdTUyYzNcdTUyYzFcdTUzMGRcdTUz''@;'; put 'put ''NTdcdTUzN2JcdTUzOWFcdTUzZGJcdTU0YWNcdTU0YzBcdTU0YThcdTU0Y2VcdTU0YzlcdTU0YjhcdTU0YTZcdTU0YjNcdTU0YzdcdTU0YzJcdTU0YmRcdTU0YWFcdTU0YzFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU0YzRcdTU0YzhcdTU0YWZcdTU0YWJcdTU0''@;'; put 'put ''YjFcdTU0YmJcdTU0YTlcdTU0YTdcdTU0YmZcdTU2ZmZcdTU3ODJcdTU3OGJcdTU3YTBcdTU3YTNcdTU3YTJcdTU3Y2VcdTU3YWVcdTU3OTNcdTU5NTVcdTU5NTFcdTU5NGZcdTU5NGVcdTU5NTBcdTU5ZGNcdTU5ZDhcdTU5ZmZcdTU5ZTNcdTU5ZThcdTVhMDNcdTU5ZTVcdTU5ZWFcdTU5ZGFc''@;'; put 'put ''dTU5ZTZcdTVhMDFcdTU5ZmJcdTViNjlcdTViYTNcdTViYTZcdTViYTRcdTViYTJcdTViYTVcdTVjMDFcdTVjNGVcdTVjNGZcdTVjNGRcdTVjNGJcdTVjZDlcdTVjZDJcdTVkZjdcdTVlMWRcdTVlMjVcdTVlMWZcdTVlN2RcdTVlYTBcdTVlYTZcdTVlZmFcdTVmMDhcdTVmMmRcdTVmNjVcdTVm''@;'; put 'put ''ODhcdTVmODVcdTVmOGFcdTVmOGJcdTVmODdcdTVmOGNcdTVmODlcdTYwMTJcdTYwMWRcdTYwMjBcdTYwMjVcdTYwMGVcdTYwMjhcdTYwNGRcdTYwNzBcdTYwNjhcdTYwNjJcdTYwNDZcdTYwNDNcdTYwNmNcdTYwNmJcdTYwNmFcdTYwNjRcdTYyNDFcdTYyZGNcdTYzMTZcdTYzMDlcdTYyZmNc''@;'; put 'put ''dTYyZWRcdTYzMDFcdTYyZWVcdTYyZmRcdTYzMDdcdTYyZjFcdTYyZjdcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNzFdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE3MV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNzFdW2ddXT00Mzc3NitnLHlbNDM3NzYrZ109X1sxNzFdW2ddKTtmb3Io''@;'; put 'put ''X1sxNzJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYyZWZcdTYyZWNcdTYyZmVcdTYyZjRcdTYzMTFcdTYzMDJcdTY1M2ZcdTY1NDVcdTY1YWJcdTY1YmRcdTY1ZTJcdTY2MjVcdTY2MmRcdTY2MjBcdTY2MjdcdTY2MmZcdTY2MWZc''@;'; put 'put ''dTY2MjhcdTY2MzFcdTY2MjRcdTY2ZjdcdTY3ZmZcdTY3ZDNcdTY3ZjFcdTY3ZDRcdTY3ZDBcdTY3ZWNcdTY3YjZcdTY3YWZcdTY3ZjVcdTY3ZTlcdTY3ZWZcdTY3YzRcdTY3ZDFcdTY3YjRcdTY3ZGFcdTY3ZTVcdTY3YjhcdTY3Y2ZcdTY3ZGVcdTY3ZjNcdTY3YjBcdTY3ZDlcdTY3ZTJcdTY3''@;'; put 'put ''ZGRcdTY3ZDJcdTZiNmFcdTZiODNcdTZiODZcdTZiYjVcdTZiZDJcdTZiZDdcdTZjMWZcdTZjYzlcdTZkMGJcdTZkMzJcdTZkMmFcdTZkNDFcdTZkMjVcdTZkMGNcdTZkMzFcdTZkMWVcdTZkMTdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZkM2JcdTZkM2RcdTZk''@;'; put 'put ''M2VcdTZkMzZcdTZkMWJcdTZjZjVcdTZkMzlcdTZkMjdcdTZkMzhcdTZkMjlcdTZkMmVcdTZkMzVcdTZkMGVcdTZkMmJcdTcwYWJcdTcwYmFcdTcwYjNcdTcwYWNcdTcwYWZcdTcwYWRcdTcwYjhcdTcwYWVcdTcwYTRcdTcyMzBcdTcyNzJcdTcyNmZcdTcyNzRcdTcyZTlcdTcyZTBcdTcyZTFc''@;'; put 'put ''dTczYjdcdTczY2FcdTczYmJcdTczYjJcdTczY2RcdTczYzBcdTczYjNcdTc1MWFcdTc1MmRcdTc1NGZcdTc1NGNcdTc1NGVcdTc1NGJcdTc1YWJcdTc1YTRcdTc1YTVcdTc1YTJcdTc1YTNcdTc2NzhcdTc2ODZcdTc2ODdcdTc2ODhcdTc2YzhcdTc2YzZcdTc2YzNcdTc2YzVcdTc3MDFcdTc2''@;'; put 'put ''ZjlcdTc2ZjhcdTc3MDlcdTc3MGJcdTc2ZmVcdTc2ZmNcdTc3MDdcdTc3ZGNcdTc4MDJcdTc4MTRcdTc4MGNcdTc4MGRcdTc5NDZcdTc5NDlcdTc5NDhcdTc5NDdcdTc5YjlcdTc5YmFcdTc5ZDFcdTc5ZDJcdTc5Y2JcdTdhN2ZcdTdhODFcdTdhZmZcdTdhZmRcdTdjN2RcdTdkMDJcdTdkMDVc''@;'; put 'put ''dTdkMDBcdTdkMDlcdTdkMDdcdTdkMDRcdTdkMDZcdTdmMzhcdTdmOGVcdTdmYmZcdTgwMDRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNzJdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE3Ml1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNzJdW2ddXT00NDAzMitnLHlbNDQwMzIrZ109X1sx''@;'; put 'put ''NzJdW2ddKTtmb3IoX1sxNzNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgwMTBcdTgwMGRcdTgwMTFcdTgwMzZcdTgwZDZcdTgwZTVcdTgwZGFcdTgwYzNcdTgwYzRcdTgwY2NcdTgwZTFcdTgwZGJcdTgwY2VcdTgwZGVcdTgwZTRc''@;'; put 'put ''dTgwZGRcdTgxZjRcdTgyMjJcdTgyZTdcdTgzMDNcdTgzMDVcdTgyZTNcdTgyZGJcdTgyZTZcdTgzMDRcdTgyZTVcdTgzMDJcdTgzMDlcdTgyZDJcdTgyZDdcdTgyZjFcdTgzMDFcdTgyZGNcdTgyZDRcdTgyZDFcdTgyZGVcdTgyZDNcdTgyZGZcdTgyZWZcdTgzMDZcdTg2NTBcdTg2NzlcdTg2''@;'; put 'put ''N2JcdTg2N2FcdTg4NGRcdTg4NmJcdTg5ODFcdTg5ZDRcdThhMDhcdThhMDJcdThhMDNcdThjOWVcdThjYTBcdThkNzRcdThkNzNcdThkYjRcdThlY2RcdThlY2NcdThmZjBcdThmZTZcdThmZTJcdThmZWFcdThmZTVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThm''@;'; put 'put ''ZWRcdThmZWJcdThmZTRcdThmZThcdTkwY2FcdTkwY2VcdTkwYzFcdTkwYzNcdTkxNGJcdTkxNGFcdTkxY2RcdTk1ODJcdTk2NTBcdTk2NGJcdTk2NGNcdTk2NGRcdTk3NjJcdTk3NjlcdTk3Y2JcdTk3ZWRcdTk3ZjNcdTk4MDFcdTk4YThcdTk4ZGJcdTk4ZGZcdTk5OTZcdTk5OTlcdTRlNThc''@;'; put 'put ''dTRlYjNcdTUwMGNcdTUwMGRcdTUwMjNcdTRmZWZcdTUwMjZcdTUwMjVcdTRmZjhcdTUwMjlcdTUwMTZcdTUwMDZcdTUwM2NcdTUwMWZcdTUwMWFcdTUwMTJcdTUwMTFcdTRmZmFcdTUwMDBcdTUwMTRcdTUwMjhcdTRmZjFcdTUwMjFcdTUwMGJcdTUwMTlcdTUwMThcdTRmZjNcdTRmZWVcdTUw''@;'; put 'put ''MmRcdTUwMmFcdTRmZmVcdTUwMmJcdTUwMDlcdTUxN2NcdTUxYTRcdTUxYTVcdTUxYTJcdTUxY2RcdTUxY2NcdTUxYzZcdTUxY2JcdTUyNTZcdTUyNWNcdTUyNTRcdTUyNWJcdTUyNWRcdTUzMmFcdTUzN2ZcdTUzOWZcdTUzOWRcdTUzZGZcdTU0ZThcdTU1MTBcdTU1MDFcdTU1MzdcdTU0ZmNc''@;'; put 'put ''dTU0ZTVcdTU0ZjJcdTU1MDZcdTU0ZmFcdTU1MTRcdTU0ZTlcdTU0ZWRcdTU0ZTFcdTU1MDlcdTU0ZWVcdTU0ZWFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNzNdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE3M11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNzNdW2ddXT00NDI4OCtnLHlb''@;'; put 'put ''NDQyODgrZ109X1sxNzNdW2ddKTtmb3IoX1sxNzRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU0ZTZcdTU1MjdcdTU1MDdcdTU0ZmRcdTU1MGZcdTU3MDNcdTU3MDRcdTU3YzJcdTU3ZDRcdTU3Y2JcdTU3YzNcdTU4MDlcdTU5MGZc''@;'; put 'put ''dTU5NTdcdTU5NThcdTU5NWFcdTVhMTFcdTVhMThcdTVhMWNcdTVhMWZcdTVhMWJcdTVhMTNcdTU5ZWNcdTVhMjBcdTVhMjNcdTVhMjlcdTVhMjVcdTVhMGNcdTVhMDlcdTViNmJcdTVjNThcdTViYjBcdTViYjNcdTViYjZcdTViYjRcdTViYWVcdTViYjVcdTViYjlcdTViYjhcdTVjMDRcdTVj''@;'; put 'put ''NTFcdTVjNTVcdTVjNTBcdTVjZWRcdTVjZmRcdTVjZmJcdTVjZWFcdTVjZThcdTVjZjBcdTVjZjZcdTVkMDFcdTVjZjRcdTVkZWVcdTVlMmRcdTVlMmJcdTVlYWJcdTVlYWRcdTVlYTdcdTVmMzFcdTVmOTJcdTVmOTFcdTVmOTBcdTYwNTlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdTYwNjNcdTYwNjVcdTYwNTBcdTYwNTVcdTYwNmRcdTYwNjlcdTYwNmZcdTYwODRcdTYwOWZcdTYwOWFcdTYwOGRcdTYwOTRcdTYwOGNcdTYwODVcdTYwOTZcdTYyNDdcdTYyZjNcdTYzMDhcdTYyZmZcdTYzNGVcdTYzM2VcdTYzMmZcdTYzNTVcdTYzNDJcdTYzNDZcdTYzNGZc''@;'; put 'put ''dTYzNDlcdTYzM2FcdTYzNTBcdTYzM2RcdTYzMmFcdTYzMmJcdTYzMjhcdTYzNGRcdTYzNGNcdTY1NDhcdTY1NDlcdTY1OTlcdTY1YzFcdTY1YzVcdTY2NDJcdTY2NDlcdTY2NGZcdTY2NDNcdTY2NTJcdTY2NGNcdTY2NDVcdTY2NDFcdTY2ZjhcdTY3MTRcdTY3MTVcdTY3MTdcdTY4MjFcdTY4''@;'; put 'put ''MzhcdTY4NDhcdTY4NDZcdTY4NTNcdTY4MzlcdTY4NDJcdTY4NTRcdTY4MjlcdTY4YjNcdTY4MTdcdTY4NGNcdTY4NTFcdTY4M2RcdTY3ZjRcdTY4NTBcdTY4NDBcdTY4M2NcdTY4NDNcdTY4MmFcdTY4NDVcdTY4MTNcdTY4MThcdTY4NDFcdTZiOGFcdTZiODlcdTZiYjdcdTZjMjNcdTZjMjdc''@;'; put 'put ''dTZjMjhcdTZjMjZcdTZjMjRcdTZjZjBcdTZkNmFcdTZkOTVcdTZkODhcdTZkODdcdTZkNjZcdTZkNzhcdTZkNzdcdTZkNTlcdTZkOTNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNzRdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE3NF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNzRdW2dd''@;'; put 'put ''XT00NDU0NCtnLHlbNDQ1NDQrZ109X1sxNzRdW2ddKTtmb3IoX1sxNzVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZkNmNcdTZkODlcdTZkNmVcdTZkNWFcdTZkNzRcdTZkNjlcdTZkOGNcdTZkOGFcdTZkNzlcdTZkODVcdTZkNjVc''@;'; put 'put ''dTZkOTRcdTcwY2FcdTcwZDhcdTcwZTRcdTcwZDlcdTcwYzhcdTcwY2ZcdTcyMzlcdTcyNzlcdTcyZmNcdTcyZjlcdTcyZmRcdTcyZjhcdTcyZjdcdTczODZcdTczZWRcdTc0MDlcdTczZWVcdTczZTBcdTczZWFcdTczZGVcdTc1NTRcdTc1NWRcdTc1NWNcdTc1NWFcdTc1NTlcdTc1YmVcdTc1''@;'; put 'put ''YzVcdTc1YzdcdTc1YjJcdTc1YjNcdTc1YmRcdTc1YmNcdTc1YjlcdTc1YzJcdTc1YjhcdTc2OGJcdTc2YjBcdTc2Y2FcdTc2Y2RcdTc2Y2VcdTc3MjlcdTc3MWZcdTc3MjBcdTc3MjhcdTc3ZTlcdTc4MzBcdTc4MjdcdTc4MzhcdTc4MWRcdTc4MzRcdTc4MzdcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc4MjVcdTc4MmRcdTc4MjBcdTc4MWZcdTc4MzJcdTc5NTVcdTc5NTBcdTc5NjBcdTc5NWZcdTc5NTZcdTc5NWVcdTc5NWRcdTc5NTdcdTc5NWFcdTc5ZTRcdTc5ZTNcdTc5ZTdcdTc5ZGZcdTc5ZTZcdTc5ZTlcdTc5ZDhcdTdhODRcdTdhODhcdTdhZDlc''@;'; put 'put ''dTdiMDZcdTdiMTFcdTdjODlcdTdkMjFcdTdkMTdcdTdkMGJcdTdkMGFcdTdkMjBcdTdkMjJcdTdkMTRcdTdkMTBcdTdkMTVcdTdkMWFcdTdkMWNcdTdkMGRcdTdkMTlcdTdkMWJcdTdmM2FcdTdmNWZcdTdmOTRcdTdmYzVcdTdmYzFcdTgwMDZcdTgwMThcdTgwMTVcdTgwMTlcdTgwMTdcdTgw''@;'; put 'put ''M2RcdTgwM2ZcdTgwZjFcdTgxMDJcdTgwZjBcdTgxMDVcdTgwZWRcdTgwZjRcdTgxMDZcdTgwZjhcdTgwZjNcdTgxMDhcdTgwZmRcdTgxMGFcdTgwZmNcdTgwZWZcdTgxZWRcdTgxZWNcdTgyMDBcdTgyMTBcdTgyMmFcdTgyMmJcdTgyMjhcdTgyMmNcdTgyYmJcdTgzMmJcdTgzNTJcdTgzNTRc''@;'; put 'put ''dTgzNGFcdTgzMzhcdTgzNTBcdTgzNDlcdTgzMzVcdTgzMzRcdTgzNGZcdTgzMzJcdTgzMzlcdTgzMzZcdTgzMTdcdTgzNDBcdTgzMzFcdTgzMjhcdTgzNDNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNzVdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE3NV1bZ10uY2hhckNvZGVBdCgwKSYm''@;'; put 'put ''KElbX1sxNzVdW2ddXT00NDgwMCtnLHlbNDQ4MDArZ109X1sxNzVdW2ddKTtmb3IoX1sxNzZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg2NTRcdTg2OGFcdTg2YWFcdTg2OTNcdTg2YTRcdTg2YTlcdTg2OGNcdTg2YTNcdTg2OWNc''@;'; put 'put ''dTg4NzBcdTg4NzdcdTg4ODFcdTg4ODJcdTg4N2RcdTg4NzlcdThhMThcdThhMTBcdThhMGVcdThhMGNcdThhMTVcdThhMGFcdThhMTdcdThhMTNcdThhMTZcdThhMGZcdThhMTFcdThjNDhcdThjN2FcdThjNzlcdThjYTFcdThjYTJcdThkNzdcdThlYWNcdThlZDJcdThlZDRcdThlY2ZcdThm''@;'; put 'put ''YjFcdTkwMDFcdTkwMDZcdThmZjdcdTkwMDBcdThmZmFcdThmZjRcdTkwMDNcdThmZmRcdTkwMDVcdThmZjhcdTkwOTVcdTkwZTFcdTkwZGRcdTkwZTJcdTkxNTJcdTkxNGRcdTkxNGNcdTkxZDhcdTkxZGRcdTkxZDdcdTkxZGNcdTkxZDlcdTk1ODNcdTk2NjJcdTk2NjNcdTk2NjFcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk2NWJcdTk2NWRcdTk2NjRcdTk2NThcdTk2NWVcdTk2YmJcdTk4ZTJcdTk5YWNcdTlhYThcdTlhZDhcdTliMjVcdTliMzJcdTliM2NcdTRlN2VcdTUwN2FcdTUwN2RcdTUwNWNcdTUwNDdcdTUwNDNcdTUwNGNcdTUwNWFcdTUwNDlc''@;'; put 'put ''dTUwNjVcdTUwNzZcdTUwNGVcdTUwNTVcdTUwNzVcdTUwNzRcdTUwNzdcdTUwNGZcdTUwMGZcdTUwNmZcdTUwNmRcdTUxNWNcdTUxOTVcdTUxZjBcdTUyNmFcdTUyNmZcdTUyZDJcdTUyZDlcdTUyZDhcdTUyZDVcdTUzMTBcdTUzMGZcdTUzMTlcdTUzM2ZcdTUzNDBcdTUzM2VcdTUzYzNcdTY2''@;'; put 'put ''ZmNcdTU1NDZcdTU1NmFcdTU1NjZcdTU1NDRcdTU1NWVcdTU1NjFcdTU1NDNcdTU1NGFcdTU1MzFcdTU1NTZcdTU1NGZcdTU1NTVcdTU1MmZcdTU1NjRcdTU1MzhcdTU1MmVcdTU1NWNcdTU1MmNcdTU1NjNcdTU1MzNcdTU1NDFcdTU1NTdcdTU3MDhcdTU3MGJcdTU3MDlcdTU3ZGZcdTU4MDVc''@;'; put 'put ''dTU4MGFcdTU4MDZcdTU3ZTBcdTU3ZTRcdTU3ZmFcdTU4MDJcdTU4MzVcdTU3ZjdcdTU3ZjlcdTU5MjBcdTU5NjJcdTVhMzZcdTVhNDFcdTVhNDlcdTVhNjZcdTVhNmFcdTVhNDBcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNzZdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE3Nl1bZ10uY2hh''@;'; put 'put ''ckNvZGVBdCgwKSYmKElbX1sxNzZdW2ddXT00NTA1NitnLHlbNDUwNTYrZ109X1sxNzZdW2ddKTtmb3IoX1sxNzddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVhM2NcdTVhNjJcdTVhNWFcdTVhNDZcdTVhNGFcdTViNzBcdTViYzdc''@;'; put 'put ''dTViYzVcdTViYzRcdTViYzJcdTViYmZcdTViYzZcdTVjMDlcdTVjMDhcdTVjMDdcdTVjNjBcdTVjNWNcdTVjNWRcdTVkMDdcdTVkMDZcdTVkMGVcdTVkMWJcdTVkMTZcdTVkMjJcdTVkMTFcdTVkMjlcdTVkMTRcdTVkMTlcdTVkMjRcdTVkMjdcdTVkMTdcdTVkZTJcdTVlMzhcdTVlMzZcdTVl''@;'; put 'put ''MzNcdTVlMzdcdTVlYjdcdTVlYjhcdTVlYjZcdTVlYjVcdTVlYmVcdTVmMzVcdTVmMzdcdTVmNTdcdTVmNmNcdTVmNjlcdTVmNmJcdTVmOTdcdTVmOTlcdTVmOWVcdTVmOThcdTVmYTFcdTVmYTBcdTVmOWNcdTYwN2ZcdTYwYTNcdTYwODlcdTYwYTBcdTYwYThcdTYwY2JcdTYwYjRcdTYwZTZc''@;'; put 'put ''dTYwYmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYwYzVcdTYwYmJcdTYwYjVcdTYwZGNcdTYwYmNcdTYwZDhcdTYwZDVcdTYwYzZcdTYwZGZcdTYwYjhcdTYwZGFcdTYwYzdcdTYyMWFcdTYyMWJcdTYyNDhcdTYzYTBcdTYzYTdcdTYzNzJcdTYzOTZcdTYzYTJc''@;'; put 'put ''dTYzYTVcdTYzNzdcdTYzNjdcdTYzOThcdTYzYWFcdTYzNzFcdTYzYTlcdTYzODlcdTYzODNcdTYzOWJcdTYzNmJcdTYzYThcdTYzODRcdTYzODhcdTYzOTlcdTYzYTFcdTYzYWNcdTYzOTJcdTYzOGZcdTYzODBcdTYzN2JcdTYzNjlcdTYzNjhcdTYzN2FcdTY1NWRcdTY1NTZcdTY1NTFcdTY1''@;'; put 'put ''NTlcdTY1NTdcdTU1NWZcdTY1NGZcdTY1NThcdTY1NTVcdTY1NTRcdTY1OWNcdTY1OWJcdTY1YWNcdTY1Y2ZcdTY1Y2JcdTY1Y2NcdTY1Y2VcdTY2NWRcdTY2NWFcdTY2NjRcdTY2NjhcdTY2NjZcdTY2NWVcdTY2ZjlcdTUyZDdcdTY3MWJcdTY4ODFcdTY4YWZcdTY4YTJcdTY4OTNcdTY4YjVc''@;'; put 'put ''dTY4N2ZcdTY4NzZcdTY4YjFcdTY4YTdcdTY4OTdcdTY4YjBcdTY4ODNcdTY4YzRcdTY4YWRcdTY4ODZcdTY4ODVcdTY4OTRcdTY4OWRcdTY4YThcdTY4OWZcdTY4YTFcdTY4ODJcdTZiMzJcdTZiYmFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNzddLmxlbmd0aDsrK2cpNjU1MzMhPT1f''@;'; put 'put ''WzE3N11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNzddW2ddXT00NTMxMitnLHlbNDUzMTIrZ109X1sxNzddW2ddKTtmb3IoX1sxNzhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZiZWJcdTZiZWNcdTZjMmJcdTZkOGVcdTZkYmNc''@;'; put 'put ''dTZkZjNcdTZkZDlcdTZkYjJcdTZkZTFcdTZkY2NcdTZkZTRcdTZkZmJcdTZkZmFcdTZlMDVcdTZkYzdcdTZkY2JcdTZkYWZcdTZkZDFcdTZkYWVcdTZkZGVcdTZkZjlcdTZkYjhcdTZkZjdcdTZkZjVcdTZkYzVcdTZkZDJcdTZlMWFcdTZkYjVcdTZkZGFcdTZkZWJcdTZkZDhcdTZkZWFcdTZk''@;'; put 'put ''ZjFcdTZkZWVcdTZkZThcdTZkYzZcdTZkYzRcdTZkYWFcdTZkZWNcdTZkYmZcdTZkZTZcdTcwZjlcdTcxMDlcdTcxMGFcdTcwZmRcdTcwZWZcdTcyM2RcdTcyN2RcdTcyODFcdTczMWNcdTczMWJcdTczMTZcdTczMTNcdTczMTlcdTczODdcdTc0MDVcdTc0MGFcdTc0MDNcdTc0MDZcdTczZmVc''@;'; put 'put ''dTc0MGRcdTc0ZTBcdTc0ZjZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc0ZjdcdTc1MWNcdTc1MjJcdTc1NjVcdTc1NjZcdTc1NjJcdTc1NzBcdTc1OGZcdTc1ZDRcdTc1ZDVcdTc1YjVcdTc1Y2FcdTc1Y2RcdTc2OGVcdTc2ZDRcdTc2ZDJcdTc2ZGJcdTc3Mzdc''@;'; put 'put ''dTc3M2VcdTc3M2NcdTc3MzZcdTc3MzhcdTc3M2FcdTc4NmJcdTc4NDNcdTc4NGVcdTc5NjVcdTc5NjhcdTc5NmRcdTc5ZmJcdTdhOTJcdTdhOTVcdTdiMjBcdTdiMjhcdTdiMWJcdTdiMmNcdTdiMjZcdTdiMTlcdTdiMWVcdTdiMmVcdTdjOTJcdTdjOTdcdTdjOTVcdTdkNDZcdTdkNDNcdTdk''@;'; put 'put ''NzFcdTdkMmVcdTdkMzlcdTdkM2NcdTdkNDBcdTdkMzBcdTdkMzNcdTdkNDRcdTdkMmZcdTdkNDJcdTdkMzJcdTdkMzFcdTdmM2RcdTdmOWVcdTdmOWFcdTdmY2NcdTdmY2VcdTdmZDJcdTgwMWNcdTgwNGFcdTgwNDZcdTgxMmZcdTgxMTZcdTgxMjNcdTgxMmJcdTgxMjlcdTgxMzBcdTgxMjRc''@;'; put 'put ''dTgyMDJcdTgyMzVcdTgyMzdcdTgyMzZcdTgyMzlcdTgzOGVcdTgzOWVcdTgzOThcdTgzNzhcdTgzYTJcdTgzOTZcdTgzYmRcdTgzYWJcdTgzOTJcdTgzOGFcdTgzOTNcdTgzODlcdTgzYTBcdTgzNzdcdTgzN2JcdTgzN2NcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNzhdLmxlbmd0aDsr''@;'; put 'put ''K2cpNjU1MzMhPT1fWzE3OF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNzhdW2ddXT00NTU2OCtnLHlbNDU1NjgrZ109X1sxNzhdW2ddKTtmb3IoX1sxNzldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgzODZcdTgzYTdcdTg2NTVc''@;'; put 'put ''dTVmNmFcdTg2YzdcdTg2YzBcdTg2YjZcdTg2YzRcdTg2YjVcdTg2YzZcdTg2Y2JcdTg2YjFcdTg2YWZcdTg2YzlcdTg4NTNcdTg4OWVcdTg4ODhcdTg4YWJcdTg4OTJcdTg4OTZcdTg4OGRcdTg4OGJcdTg5OTNcdTg5OGZcdThhMmFcdThhMWRcdThhMjNcdThhMjVcdThhMzFcdThhMmRcdThh''@;'; put 'put ''MWZcdThhMWJcdThhMjJcdThjNDlcdThjNWFcdThjYTlcdThjYWNcdThjYWJcdThjYThcdThjYWFcdThjYTdcdThkNjdcdThkNjZcdThkYmVcdThkYmFcdThlZGJcdThlZGZcdTkwMTlcdTkwMGRcdTkwMWFcdTkwMTdcdTkwMjNcdTkwMWZcdTkwMWRcdTkwMTBcdTkwMTVcdTkwMWVcdTkwMjBc''@;'; put 'put ''dTkwMGZcdTkwMjJcdTkwMTZcdTkwMWJcdTkwMTRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkwZThcdTkwZWRcdTkwZmRcdTkxNTdcdTkxY2VcdTkxZjVcdTkxZTZcdTkxZTNcdTkxZTdcdTkxZWRcdTkxZTlcdTk1ODlcdTk2NmFcdTk2NzVcdTk2NzNcdTk2Nzhc''@;'; put 'put ''dTk2NzBcdTk2NzRcdTk2NzZcdTk2NzdcdTk2NmNcdTk2YzBcdTk2ZWFcdTk2ZTlcdTdhZTBcdTdhZGZcdTk4MDJcdTk4MDNcdTliNWFcdTljZTVcdTllNzVcdTllN2ZcdTllYTVcdTllYmJcdTUwYTJcdTUwOGRcdTUwODVcdTUwOTlcdTUwOTFcdTUwODBcdTUwOTZcdTUwOThcdTUwOWFcdTY3''@;'; put 'put ''MDBcdTUxZjFcdTUyNzJcdTUyNzRcdTUyNzVcdTUyNjlcdTUyZGVcdTUyZGRcdTUyZGJcdTUzNWFcdTUzYTVcdTU1N2JcdTU1ODBcdTU1YTdcdTU1N2NcdTU1OGFcdTU1OWRcdTU1OThcdTU1ODJcdTU1OWNcdTU1YWFcdTU1OTRcdTU1ODdcdTU1OGJcdTU1ODNcdTU1YjNcdTU1YWVcdTU1OWZc''@;'; put 'put ''dTU1M2VcdTU1YjJcdTU1OWFcdTU1YmJcdTU1YWNcdTU1YjFcdTU1N2VcdTU1ODlcdTU1YWJcdTU1OTlcdTU3MGRcdTU4MmZcdTU4MmFcdTU4MzRcdTU4MjRcdTU4MzBcdTU4MzFcdTU4MjFcdTU4MWRcdTU4MjBcdTU4ZjlcdTU4ZmFcdTU5NjBcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sx''@;'; put 'put ''NzldLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE3OV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNzldW2ddXT00NTgyNCtnLHlbNDU4MjQrZ109X1sxNzldW2ddKTtmb3IoX1sxODBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVhNzdc''@;'; put 'put ''dTVhOWFcdTVhN2ZcdTVhOTJcdTVhOWJcdTVhYTdcdTViNzNcdTViNzFcdTViZDJcdTViY2NcdTViZDNcdTViZDBcdTVjMGFcdTVjMGJcdTVjMzFcdTVkNGNcdTVkNTBcdTVkMzRcdTVkNDdcdTVkZmRcdTVlNDVcdTVlM2RcdTVlNDBcdTVlNDNcdTVlN2VcdTVlY2FcdTVlYzFcdTVlYzJcdTVl''@;'; put 'put ''YzRcdTVmM2NcdTVmNmRcdTVmYTlcdTVmYWFcdTVmYThcdTYwZDFcdTYwZTFcdTYwYjJcdTYwYjZcdTYwZTBcdTYxMWNcdTYxMjNcdTYwZmFcdTYxMTVcdTYwZjBcdTYwZmJcdTYwZjRcdTYxNjhcdTYwZjFcdTYxMGVcdTYwZjZcdTYxMDlcdTYxMDBcdTYxMTJcdTYyMWZcdTYyNDlcdTYzYTNc''@;'; put 'put ''dTYzOGNcdTYzY2ZcdTYzYzBcdTYzZTlcdTYzYzlcdTYzYzZcdTYzY2RcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYzZDJcdTYzZTNcdTYzZDBcdTYzZTFcdTYzZDZcdTYzZWRcdTYzZWVcdTYzNzZcdTYzZjRcdTYzZWFcdTYzZGJcdTY0NTJcdTYzZGFcdTYzZjlc''@;'; put 'put ''dTY1NWVcdTY1NjZcdTY1NjJcdTY1NjNcdTY1OTFcdTY1OTBcdTY1YWZcdTY2NmVcdTY2NzBcdTY2NzRcdTY2NzZcdTY2NmZcdTY2OTFcdTY2N2FcdTY2N2VcdTY2NzdcdTY2ZmVcdTY2ZmZcdTY3MWZcdTY3MWRcdTY4ZmFcdTY4ZDVcdTY4ZTBcdTY4ZDhcdTY4ZDdcdTY5MDVcdTY4ZGZcdTY4''@;'; put 'put ''ZjVcdTY4ZWVcdTY4ZTdcdTY4ZjlcdTY4ZDJcdTY4ZjJcdTY4ZTNcdTY4Y2JcdTY4Y2RcdTY5MGRcdTY5MTJcdTY5MGVcdTY4YzlcdTY4ZGFcdTY5NmVcdTY4ZmJcdTZiM2VcdTZiM2FcdTZiM2RcdTZiOThcdTZiOTZcdTZiYmNcdTZiZWZcdTZjMmVcdTZjMmZcdTZjMmNcdTZlMmZcdTZlMzhc''@;'; put 'put ''dTZlNTRcdTZlMjFcdTZlMzJcdTZlNjdcdTZlNGFcdTZlMjBcdTZlMjVcdTZlMjNcdTZlMWJcdTZlNWJcdTZlNThcdTZlMjRcdTZlNTZcdTZlNmVcdTZlMmRcdTZlMjZcdTZlNmZcdTZlMzRcdTZlNGRcdTZlM2FcdTZlMmNcdTZlNDNcdTZlMWRcdTZlM2VcdTZlY2JcdWZmZmQiLnNwbGl0KCIi''@;'; put 'put ''KSxnPTA7ZyE9X1sxODBdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE4MF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxODBdW2ddXT00NjA4MCtnLHlbNDYwODArZ109X1sxODBdW2ddKTtmb3IoX1sxODFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdTZlODlcdTZlMTlcdTZlNGVcdTZlNjNcdTZlNDRcdTZlNzJcdTZlNjlcdTZlNWZcdTcxMTlcdTcxMWFcdTcxMjZcdTcxMzBcdTcxMjFcdTcxMzZcdTcxNmVcdTcxMWNcdTcyNGNcdTcyODRcdTcyODBcdTczMzZcdTczMjVcdTczMzRcdTczMjlcdTc0M2FcdTc0MmFcdTc0MzNcdTc0''@;'; put 'put ''MjJcdTc0MjVcdTc0MzVcdTc0MzZcdTc0MzRcdTc0MmZcdTc0MWJcdTc0MjZcdTc0MjhcdTc1MjVcdTc1MjZcdTc1NmJcdTc1NmFcdTc1ZTJcdTc1ZGJcdTc1ZTNcdTc1ZDlcdTc1ZDhcdTc1ZGVcdTc1ZTBcdTc2N2JcdTc2N2NcdTc2OTZcdTc2OTNcdTc2YjRcdTc2ZGNcdTc3NGZcdTc3ZWRc''@;'; put 'put ''dTc4NWRcdTc4NmNcdTc4NmZcdTdhMGRcdTdhMDhcdTdhMGJcdTdhMDVcdTdhMDBcdTdhOThcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdhOTdcdTdhOTZcdTdhZTVcdTdhZTNcdTdiNDlcdTdiNTZcdTdiNDZcdTdiNTBcdTdiNTJcdTdiNTRcdTdiNGRcdTdiNGJc''@;'; put 'put ''dTdiNGZcdTdiNTFcdTdjOWZcdTdjYTVcdTdkNWVcdTdkNTBcdTdkNjhcdTdkNTVcdTdkMmJcdTdkNmVcdTdkNzJcdTdkNjFcdTdkNjZcdTdkNjJcdTdkNzBcdTdkNzNcdTU1ODRcdTdmZDRcdTdmZDVcdTgwMGJcdTgwNTJcdTgwODVcdTgxNTVcdTgxNTRcdTgxNGJcdTgxNTFcdTgxNGVcdTgx''@;'; put 'put ''MzlcdTgxNDZcdTgxM2VcdTgxNGNcdTgxNTNcdTgxNzRcdTgyMTJcdTgyMWNcdTgzZTlcdTg0MDNcdTgzZjhcdTg0MGRcdTgzZTBcdTgzYzVcdTg0MGJcdTgzYzFcdTgzZWZcdTgzZjFcdTgzZjRcdTg0NTdcdTg0MGFcdTgzZjBcdTg0MGNcdTgzY2NcdTgzZmRcdTgzZjJcdTgzY2FcdTg0Mzhc''@;'; put 'put ''dTg0MGVcdTg0MDRcdTgzZGNcdTg0MDdcdTgzZDRcdTgzZGZcdTg2NWJcdTg2ZGZcdTg2ZDlcdTg2ZWRcdTg2ZDRcdTg2ZGJcdTg2ZTRcdTg2ZDBcdTg2ZGVcdTg4NTdcdTg4YzFcdTg4YzJcdTg4YjFcdTg5ODNcdTg5OTZcdThhM2JcdThhNjBcdThhNTVcdThhNWVcdThhM2NcdThhNDFcdWZm''@;'; put 'put ''ZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxODFdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE4MV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxODFdW2ddXT00NjMzNitnLHlbNDYzMzYrZ109X1sxODFdW2ddKTtmb3IoX1sxODJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdThhNTRcdThhNWJcdThhNTBcdThhNDZcdThhMzRcdThhM2FcdThhMzZcdThhNTZcdThjNjFcdThjODJcdThjYWZcdThjYmNcdThjYjNcdThjYmRcdThjYzFcdThjYmJcdThjYzBcdThjYjRcdThjYjdcdThjYjZcdThjYmZcdThjYjhcdThkOGFcdThkODVcdThk''@;'; put 'put ''ODFcdThkY2VcdThkZGRcdThkY2JcdThkZGFcdThkZDFcdThkY2NcdThkZGJcdThkYzZcdThlZmJcdThlZjhcdThlZmNcdThmOWNcdTkwMmVcdTkwMzVcdTkwMzFcdTkwMzhcdTkwMzJcdTkwMzZcdTkxMDJcdTkwZjVcdTkxMDlcdTkwZmVcdTkxNjNcdTkxNjVcdTkxY2ZcdTkyMTRcdTkyMTVc''@;'; put 'put ''dTkyMjNcdTkyMDlcdTkyMWVcdTkyMGRcdTkyMTBcdTkyMDdcdTkyMTFcdTk1OTRcdTk1OGZcdTk1OGJcdTk1OTFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk1OTNcdTk1OTJcdTk1OGVcdTk2OGFcdTk2OGVcdTk2OGJcdTk2N2RcdTk2ODVcdTk2ODZcdTk2OGRc''@;'; put 'put ''dTk2NzJcdTk2ODRcdTk2YzFcdTk2YzVcdTk2YzRcdTk2YzZcdTk2YzdcdTk2ZWZcdTk2ZjJcdTk3Y2NcdTk4MDVcdTk4MDZcdTk4MDhcdTk4ZTdcdTk4ZWFcdTk4ZWZcdTk4ZTlcdTk4ZjJcdTk4ZWRcdTk5YWVcdTk5YWRcdTllYzNcdTllY2RcdTllZDFcdTRlODJcdTUwYWRcdTUwYjVcdTUw''@;'; put 'put ''YjJcdTUwYjNcdTUwYzVcdTUwYmVcdTUwYWNcdTUwYjdcdTUwYmJcdTUwYWZcdTUwYzdcdTUyN2ZcdTUyNzdcdTUyN2RcdTUyZGZcdTUyZTZcdTUyZTRcdTUyZTJcdTUyZTNcdTUzMmZcdTU1ZGZcdTU1ZThcdTU1ZDNcdTU1ZTZcdTU1Y2VcdTU1ZGNcdTU1YzdcdTU1ZDFcdTU1ZTNcdTU1ZTRc''@;'; put 'put ''dTU1ZWZcdTU1ZGFcdTU1ZTFcdTU1YzVcdTU1YzZcdTU1ZTVcdTU1YzlcdTU3MTJcdTU3MTNcdTU4NWVcdTU4NTFcdTU4NThcdTU4NTdcdTU4NWFcdTU4NTRcdTU4NmJcdTU4NGNcdTU4NmRcdTU4NGFcdTU4NjJcdTU4NTJcdTU4NGJcdTU5NjdcdTVhYzFcdTVhYzlcdTVhY2NcdTVhYmVcdTVh''@;'; put 'put ''YmRcdTVhYmNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxODJdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE4Ml1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxODJdW2ddXT00NjU5MitnLHlbNDY1OTIrZ109X1sxODJdW2ddKTtmb3IoX1sxODNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVhYjNcdTVhYzJcdTVhYjJcdTVkNjlcdTVkNmZcdTVlNGNcdTVlNzlcdTVlYzlcdTVlYzhcdTVmMTJcdTVmNTlcdTVmYWNcdTVmYWVcdTYxMWFcdTYxMGZcdTYxNDhcdTYxMWZcdTYwZjNcdTYxMWJcdTYwZjlcdTYxMDFcdTYxMDhcdTYx''@;'; put 'put ''NGVcdTYxNGNcdTYxNDRcdTYxNGRcdTYxM2VcdTYxMzRcdTYxMjdcdTYxMGRcdTYxMDZcdTYxMzdcdTYyMjFcdTYyMjJcdTY0MTNcdTY0M2VcdTY0MWVcdTY0MmFcdTY0MmRcdTY0M2RcdTY0MmNcdTY0MGZcdTY0MWNcdTY0MTRcdTY0MGRcdTY0MzZcdTY0MTZcdTY0MTdcdTY0MDZcdTY1NmNc''@;'; put 'put ''dTY1OWZcdTY1YjBcdTY2OTdcdTY2ODlcdTY2ODdcdTY2ODhcdTY2OTZcdTY2ODRcdTY2OThcdTY2OGRcdTY3MDNcdTY5OTRcdTY5NmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY5NWFcdTY5NzdcdTY5NjBcdTY5NTRcdTY5NzVcdTY5MzBcdTY5ODJcdTY5NGFc''@;'; put 'put ''dTY5NjhcdTY5NmJcdTY5NWVcdTY5NTNcdTY5NzlcdTY5ODZcdTY5NWRcdTY5NjNcdTY5NWJcdTZiNDdcdTZiNzJcdTZiYzBcdTZiYmZcdTZiZDNcdTZiZmRcdTZlYTJcdTZlYWZcdTZlZDNcdTZlYjZcdTZlYzJcdTZlOTBcdTZlOWRcdTZlYzdcdTZlYzVcdTZlYTVcdTZlOThcdTZlYmNcdTZl''@;'; put 'put ''YmFcdTZlYWJcdTZlZDFcdTZlOTZcdTZlOWNcdTZlYzRcdTZlZDRcdTZlYWFcdTZlYTdcdTZlYjRcdTcxNGVcdTcxNTlcdTcxNjlcdTcxNjRcdTcxNDlcdTcxNjdcdTcxNWNcdTcxNmNcdTcxNjZcdTcxNGNcdTcxNjVcdTcxNWVcdTcxNDZcdTcxNjhcdTcxNTZcdTcyM2FcdTcyNTJcdTczMzdc''@;'; put 'put ''dTczNDVcdTczM2ZcdTczM2VcdTc0NmZcdTc0NWFcdTc0NTVcdTc0NWZcdTc0NWVcdTc0NDFcdTc0M2ZcdTc0NTlcdTc0NWJcdTc0NWNcdTc1NzZcdTc1NzhcdTc2MDBcdTc1ZjBcdTc2MDFcdTc1ZjJcdTc1ZjFcdTc1ZmFcdTc1ZmZcdTc1ZjRcdTc1ZjNcdTc2ZGVcdTc2ZGZcdTc3NWJcdTc3''@;'; put 'put ''NmJcdTc3NjZcdTc3NWVcdTc3NjNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxODNdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE4M11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxODNdW2ddXT00Njg0OCtnLHlbNDY4NDgrZ109X1sxODNdW2ddKTtmb3IoX1sxODRdPSJcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc3NzlcdTc3NmFcdTc3NmNcdTc3NWNcdTc3NjVcdTc3NjhcdTc3NjJcdTc3ZWVcdTc4OGVcdTc4YjBcdTc4OTdcdTc4OThcdTc4OGNcdTc4ODlcdTc4N2NcdTc4OTFcdTc4OTNcdTc4N2ZcdTc5N2FcdTc5N2ZcdTc5''@;'; put 'put ''ODFcdTg0MmNcdTc5YmRcdTdhMWNcdTdhMWFcdTdhMjBcdTdhMTRcdTdhMWZcdTdhMWVcdTdhOWZcdTdhYTBcdTdiNzdcdTdiYzBcdTdiNjBcdTdiNmVcdTdiNjdcdTdjYjFcdTdjYjNcdTdjYjVcdTdkOTNcdTdkNzlcdTdkOTFcdTdkODFcdTdkOGZcdTdkNWJcdTdmNmVcdTdmNjlcdTdmNmFc''@;'; put 'put ''dTdmNzJcdTdmYTlcdTdmYThcdTdmYTRcdTgwNTZcdTgwNThcdTgwODZcdTgwODRcdTgxNzFcdTgxNzBcdTgxNzhcdTgxNjVcdTgxNmVcdTgxNzNcdTgxNmJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgxNzlcdTgxN2FcdTgxNjZcdTgyMDVcdTgyNDdcdTg0ODJc''@;'; put 'put ''dTg0NzdcdTg0M2RcdTg0MzFcdTg0NzVcdTg0NjZcdTg0NmJcdTg0NDlcdTg0NmNcdTg0NWJcdTg0M2NcdTg0MzVcdTg0NjFcdTg0NjNcdTg0NjlcdTg0NmRcdTg0NDZcdTg2NWVcdTg2NWNcdTg2NWZcdTg2ZjlcdTg3MTNcdTg3MDhcdTg3MDdcdTg3MDBcdTg2ZmVcdTg2ZmJcdTg3MDJcdTg3''@;'; put 'put ''MDNcdTg3MDZcdTg3MGFcdTg4NTlcdTg4ZGZcdTg4ZDRcdTg4ZDlcdTg4ZGNcdTg4ZDhcdTg4ZGRcdTg4ZTFcdTg4Y2FcdTg4ZDVcdTg4ZDJcdTg5OWNcdTg5ZTNcdThhNmJcdThhNzJcdThhNzNcdThhNjZcdThhNjlcdThhNzBcdThhODdcdThhN2NcdThhNjNcdThhYTBcdThhNzFcdThhODVc''@;'; put 'put ''dThhNmRcdThhNjJcdThhNmVcdThhNmNcdThhNzlcdThhN2JcdThhM2VcdThhNjhcdThjNjJcdThjOGFcdThjODlcdThjY2FcdThjYzdcdThjYzhcdThjYzRcdThjYjJcdThjYzNcdThjYzJcdThjYzVcdThkZTFcdThkZGZcdThkZThcdThkZWZcdThkZjNcdThkZmFcdThkZWFcdThkZTRcdThk''@;'; put 'put ''ZTZcdThlYjJcdThmMDNcdThmMDlcdThlZmVcdThmMGFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxODRdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE4NF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxODRdW2ddXT00NzEwNCtnLHlbNDcxMDQrZ109X1sxODRdW2ddKTtmb3IoX1sxODVdPSJc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThmOWZcdThmYjJcdTkwNGJcdTkwNGFcdTkwNTNcdTkwNDJcdTkwNTRcdTkwM2NcdTkwNTVcdTkwNTBcdTkwNDdcdTkwNGZcdTkwNGVcdTkwNGRcdTkwNTFcdTkwM2VcdTkwNDFcdTkxMTJcdTkx''@;'; put 'put ''MTdcdTkxNmNcdTkxNmFcdTkxNjlcdTkxYzlcdTkyMzdcdTkyNTdcdTkyMzhcdTkyM2RcdTkyNDBcdTkyM2VcdTkyNWJcdTkyNGJcdTkyNjRcdTkyNTFcdTkyMzRcdTkyNDlcdTkyNGRcdTkyNDVcdTkyMzlcdTkyM2ZcdTkyNWFcdTk1OThcdTk2OThcdTk2OTRcdTk2OTVcdTk2Y2RcdTk2Y2Jc''@;'; put 'put ''dTk2YzlcdTk2Y2FcdTk2ZjdcdTk2ZmJcdTk2ZjlcdTk2ZjZcdTk3NTZcdTk3NzRcdTk3NzZcdTk4MTBcdTk4MTFcdTk4MTNcdTk4MGFcdTk4MTJcdTk4MGNcdTk4ZmNcdTk4ZjRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk4ZmRcdTk4ZmVcdTk5YjNcdTk5YjFc''@;'; put 'put ''dTk5YjRcdTlhZTFcdTljZTlcdTllODJcdTlmMGVcdTlmMTNcdTlmMjBcdTUwZTdcdTUwZWVcdTUwZTVcdTUwZDZcdTUwZWRcdTUwZGFcdTUwZDVcdTUwY2ZcdTUwZDFcdTUwZjFcdTUwY2VcdTUwZTlcdTUxNjJcdTUxZjNcdTUyODNcdTUyODJcdTUzMzFcdTUzYWRcdTU1ZmVcdTU2MDBcdTU2''@;'; put 'put ''MWJcdTU2MTdcdTU1ZmRcdTU2MTRcdTU2MDZcdTU2MDlcdTU2MGRcdTU2MGVcdTU1ZjdcdTU2MTZcdTU2MWZcdTU2MDhcdTU2MTBcdTU1ZjZcdTU3MThcdTU3MTZcdTU4NzVcdTU4N2VcdTU4ODNcdTU4OTNcdTU4OGFcdTU4NzlcdTU4ODVcdTU4N2RcdTU4ZmRcdTU5MjVcdTU5MjJcdTU5MjRc''@;'; put 'put ''dTU5NmFcdTU5NjlcdTVhZTFcdTVhZTZcdTVhZTlcdTVhZDdcdTVhZDZcdTVhZDhcdTVhZTNcdTViNzVcdTViZGVcdTViZTdcdTViZTFcdTViZTVcdTViZTZcdTViZThcdTViZTJcdTViZTRcdTViZGZcdTVjMGRcdTVjNjJcdTVkODRcdTVkODdcdTVlNWJcdTVlNjNcdTVlNTVcdTVlNTdcdTVl''@;'; put 'put ''NTRcdTVlZDNcdTVlZDZcdTVmMGFcdTVmNDZcdTVmNzBcdTVmYjlcdTYxNDdcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxODVdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE4NV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxODVdW2ddXT00NzM2MCtnLHlbNDczNjArZ109X1sxODVdW2ddKTtm''@;'; put 'put ''b3IoX1sxODZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYxM2ZcdTYxNGJcdTYxNzdcdTYxNjJcdTYxNjNcdTYxNWZcdTYxNWFcdTYxNThcdTYxNzVcdTYyMmFcdTY0ODdcdTY0NThcdTY0NTRcdTY0YTRcdTY0NzhcdTY0NWZcdTY0''@;'; put 'put ''N2FcdTY0NTFcdTY0NjdcdTY0MzRcdTY0NmRcdTY0N2JcdTY1NzJcdTY1YTFcdTY1ZDdcdTY1ZDZcdTY2YTJcdTY2YThcdTY2OWRcdTY5OWNcdTY5YThcdTY5OTVcdTY5YzFcdTY5YWVcdTY5ZDNcdTY5Y2JcdTY5OWJcdTY5YjdcdTY5YmJcdTY5YWJcdTY5YjRcdTY5ZDBcdTY5Y2RcdTY5YWRc''@;'; put 'put ''dTY5Y2NcdTY5YTZcdTY5YzNcdTY5YTNcdTZiNDlcdTZiNGNcdTZjMzNcdTZmMzNcdTZmMTRcdTZlZmVcdTZmMTNcdTZlZjRcdTZmMjlcdTZmM2VcdTZmMjBcdTZmMmNcdTZmMGZcdTZmMDJcdTZmMjJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZlZmZcdTZlZWZc''@;'; put 'put ''dTZmMDZcdTZmMzFcdTZmMzhcdTZmMzJcdTZmMjNcdTZmMTVcdTZmMmJcdTZmMmZcdTZmODhcdTZmMmFcdTZlZWNcdTZmMDFcdTZlZjJcdTZlY2NcdTZlZjdcdTcxOTRcdTcxOTlcdTcxN2RcdTcxOGFcdTcxODRcdTcxOTJcdTcyM2VcdTcyOTJcdTcyOTZcdTczNDRcdTczNTBcdTc0NjRcdTc0''@;'; put 'put ''NjNcdTc0NmFcdTc0NzBcdTc0NmRcdTc1MDRcdTc1OTFcdTc2MjdcdTc2MGRcdTc2MGJcdTc2MDlcdTc2MTNcdTc2ZTFcdTc2ZTNcdTc3ODRcdTc3N2RcdTc3N2ZcdTc3NjFcdTc4YzFcdTc4OWZcdTc4YTdcdTc4YjNcdTc4YTlcdTc4YTNcdTc5OGVcdTc5OGZcdTc5OGRcdTdhMmVcdTdhMzFc''@;'; put 'put ''dTdhYWFcdTdhYTlcdTdhZWRcdTdhZWZcdTdiYTFcdTdiOTVcdTdiOGJcdTdiNzVcdTdiOTdcdTdiOWRcdTdiOTRcdTdiOGZcdTdiYjhcdTdiODdcdTdiODRcdTdjYjlcdTdjYmRcdTdjYmVcdTdkYmJcdTdkYjBcdTdkOWNcdTdkYmRcdTdkYmVcdTdkYTBcdTdkY2FcdTdkYjRcdTdkYjJcdTdk''@;'; put 'put ''YjFcdTdkYmFcdTdkYTJcdTdkYmZcdTdkYjVcdTdkYjhcdTdkYWRcdTdkZDJcdTdkYzdcdTdkYWNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxODZdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE4Nl1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxODZdW2ddXT00NzYxNitnLHlbNDc2MTYrZ109''@;'; put 'put ''X1sxODZdW2ddKTtmb3IoX1sxODddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdmNzBcdTdmZTBcdTdmZTFcdTdmZGZcdTgwNWVcdTgwNWFcdTgwODdcdTgxNTBcdTgxODBcdTgxOGZcdTgxODhcdTgxOGFcdTgxN2ZcdTgxODJcdTgx''@;'; put 'put ''ZTdcdTgxZmFcdTgyMDdcdTgyMTRcdTgyMWVcdTgyNGJcdTg0YzlcdTg0YmZcdTg0YzZcdTg0YzRcdTg0OTlcdTg0OWVcdTg0YjJcdTg0OWNcdTg0Y2JcdTg0YjhcdTg0YzBcdTg0ZDNcdTg0OTBcdTg0YmNcdTg0ZDFcdTg0Y2FcdTg3M2ZcdTg3MWNcdTg3M2JcdTg3MjJcdTg3MjVcdTg3MzRc''@;'; put 'put ''dTg3MThcdTg3NTVcdTg3MzdcdTg3MjlcdTg4ZjNcdTg5MDJcdTg4ZjRcdTg4ZjlcdTg4ZjhcdTg4ZmRcdTg4ZThcdTg5MWFcdTg4ZWZcdThhYTZcdThhOGNcdThhOWVcdThhYTNcdThhOGRcdThhYTFcdThhOTNcdThhYTRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dThhYWFcdThhYTVcdThhYThcdThhOThcdThhOTFcdThhOWFcdThhYTdcdThjNmFcdThjOGRcdThjOGNcdThjZDNcdThjZDFcdThjZDJcdThkNmJcdThkOTlcdThkOTVcdThkZmNcdThmMTRcdThmMTJcdThmMTVcdThmMTNcdThmYTNcdTkwNjBcdTkwNThcdTkwNWNcdTkwNjNcdTkwNTlcdTkw''@;'; put 'put ''NWVcdTkwNjJcdTkwNWRcdTkwNWJcdTkxMTlcdTkxMThcdTkxMWVcdTkxNzVcdTkxNzhcdTkxNzdcdTkxNzRcdTkyNzhcdTkyODBcdTkyODVcdTkyOThcdTkyOTZcdTkyN2JcdTkyOTNcdTkyOWNcdTkyYThcdTkyN2NcdTkyOTFcdTk1YTFcdTk1YThcdTk1YTlcdTk1YTNcdTk1YTVcdTk1YTRc''@;'; put 'put ''dTk2OTlcdTk2OWNcdTk2OWJcdTk2Y2NcdTk2ZDJcdTk3MDBcdTk3N2NcdTk3ODVcdTk3ZjZcdTk4MTdcdTk4MThcdTk4YWZcdTk4YjFcdTk5MDNcdTk5MDVcdTk5MGNcdTk5MDlcdTk5YzFcdTlhYWZcdTlhYjBcdTlhZTZcdTliNDFcdTliNDJcdTljZjRcdTljZjZcdTljZjNcdTllYmNcdTlm''@;'; put 'put ''M2JcdTlmNGFcdTUxMDRcdTUxMDBcdTUwZmJcdTUwZjVcdTUwZjlcdTUxMDJcdTUxMDhcdTUxMDlcdTUxMDVcdTUxZGNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxODddLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE4N11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxODddW2ddXT00Nzg3Mitn''@;'; put 'put ''LHlbNDc4NzIrZ109X1sxODddW2ddKTtmb3IoX1sxODhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUyODdcdTUyODhcdTUyODlcdTUyOGRcdTUyOGFcdTUyZjBcdTUzYjJcdTU2MmVcdTU2M2JcdTU2MzlcdTU2MzJcdTU2M2ZcdTU2''@;'; put 'put ''MzRcdTU2MjlcdTU2NTNcdTU2NGVcdTU2NTdcdTU2NzRcdTU2MzZcdTU2MmZcdTU2MzBcdTU4ODBcdTU4OWZcdTU4OWVcdTU4YjNcdTU4OWNcdTU4YWVcdTU4YTlcdTU4YTZcdTU5NmRcdTViMDlcdTVhZmJcdTViMGJcdTVhZjVcdTViMGNcdTViMDhcdTViZWVcdTViZWNcdTViZTlcdTViZWJc''@;'; put 'put ''dTVjNjRcdTVjNjVcdTVkOWRcdTVkOTRcdTVlNjJcdTVlNWZcdTVlNjFcdTVlZTJcdTVlZGFcdTVlZGZcdTVlZGRcdTVlZTNcdTVlZTBcdTVmNDhcdTVmNzFcdTVmYjdcdTVmYjVcdTYxNzZcdTYxNjdcdTYxNmVcdTYxNWRcdTYxNTVcdTYxODJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdTYxN2NcdTYxNzBcdTYxNmJcdTYxN2VcdTYxYTdcdTYxOTBcdTYxYWJcdTYxOGVcdTYxYWNcdTYxOWFcdTYxYTRcdTYxOTRcdTYxYWVcdTYyMmVcdTY0NjlcdTY0NmZcdTY0NzlcdTY0OWVcdTY0YjJcdTY0ODhcdTY0OTBcdTY0YjBcdTY0YTVcdTY0OTNcdTY0OTVcdTY0''@;'; put 'put ''YTlcdTY0OTJcdTY0YWVcdTY0YWRcdTY0YWJcdTY0OWFcdTY0YWNcdTY0OTlcdTY0YTJcdTY0YjNcdTY1NzVcdTY1NzdcdTY1NzhcdTY2YWVcdTY2YWJcdTY2YjRcdTY2YjFcdTZhMjNcdTZhMWZcdTY5ZThcdTZhMDFcdTZhMWVcdTZhMTlcdTY5ZmRcdTZhMjFcdTZhMTNcdTZhMGFcdTY5ZjNc''@;'; put 'put ''dTZhMDJcdTZhMDVcdTY5ZWRcdTZhMTFcdTZiNTBcdTZiNGVcdTZiYTRcdTZiYzVcdTZiYzZcdTZmM2ZcdTZmN2NcdTZmODRcdTZmNTFcdTZmNjZcdTZmNTRcdTZmODZcdTZmNmRcdTZmNWJcdTZmNzhcdTZmNmVcdTZmOGVcdTZmN2FcdTZmNzBcdTZmNjRcdTZmOTdcdTZmNThcdTZlZDVcdTZm''@;'; put 'put ''NmZcdTZmNjBcdTZmNWZcdTcxOWZcdTcxYWNcdTcxYjFcdTcxYThcdTcyNTZcdTcyOWJcdTczNGVcdTczNTdcdTc0NjlcdTc0OGJcdTc0ODNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxODhdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE4OF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxODhd''@;'; put 'put ''W2ddXT00ODEyOCtnLHlbNDgxMjgrZ109X1sxODhdW2ddKTtmb3IoX1sxODldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc0N2VcdTc0ODBcdTc1N2ZcdTc2MjBcdTc2MjlcdTc2MWZcdTc2MjRcdTc2MjZcdTc2MjFcdTc2MjJcdTc2''@;'; put 'put ''OWFcdTc2YmFcdTc2ZTRcdTc3OGVcdTc3ODdcdTc3OGNcdTc3OTFcdTc3OGJcdTc4Y2JcdTc4YzVcdTc4YmFcdTc4Y2FcdTc4YmVcdTc4ZDVcdTc4YmNcdTc4ZDBcdTdhM2ZcdTdhM2NcdTdhNDBcdTdhM2RcdTdhMzdcdTdhM2JcdTdhYWZcdTdhYWVcdTdiYWRcdTdiYjFcdTdiYzRcdTdiYjRc''@;'; put 'put ''dTdiYzZcdTdiYzdcdTdiYzFcdTdiYTBcdTdiY2NcdTdjY2FcdTdkZTBcdTdkZjRcdTdkZWZcdTdkZmJcdTdkZDhcdTdkZWNcdTdkZGRcdTdkZThcdTdkZTNcdTdkZGFcdTdkZGVcdTdkZTlcdTdkOWVcdTdkZDlcdTdkZjJcdTdkZjlcdTdmNzVcdTdmNzdcdTdmYWZcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdmZTlcdTgwMjZcdTgxOWJcdTgxOWNcdTgxOWRcdTgxYTBcdTgxOWFcdTgxOThcdTg1MTdcdTg1M2RcdTg1MWFcdTg0ZWVcdTg1MmNcdTg1MmRcdTg1MTNcdTg1MTFcdTg1MjNcdTg1MjFcdTg1MTRcdTg0ZWNcdTg1MjVcdTg0ZmZcdTg1MDZcdTg3''@;'; put 'put ''ODJcdTg3NzRcdTg3NzZcdTg3NjBcdTg3NjZcdTg3NzhcdTg3NjhcdTg3NTlcdTg3NTdcdTg3NGNcdTg3NTNcdTg4NWJcdTg4NWRcdTg5MTBcdTg5MDdcdTg5MTJcdTg5MTNcdTg5MTVcdTg5MGFcdThhYmNcdThhZDJcdThhYzdcdThhYzRcdThhOTVcdThhY2JcdThhZjhcdThhYjJcdThhYzlc''@;'; put 'put ''dThhYzJcdThhYmZcdThhYjBcdThhZDZcdThhY2RcdThhYjZcdThhYjlcdThhZGJcdThjNGNcdThjNGVcdThjNmNcdThjZTBcdThjZGVcdThjZTZcdThjZTRcdThjZWNcdThjZWRcdThjZTJcdThjZTNcdThjZGNcdThjZWFcdThjZTFcdThkNmRcdThkOWZcdThkYTNcdThlMmJcdThlMTBcdThl''@;'; put 'put ''MWRcdThlMjJcdThlMGZcdThlMjlcdThlMWZcdThlMjFcdThlMWVcdThlYmFcdThmMWRcdThmMWJcdThmMWZcdThmMjlcdThmMjZcdThmMmFcdThmMWNcdThmMWVcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxODldLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE4OV1bZ10uY2hhckNvZGVBdCgw''@;'; put 'put ''KSYmKElbX1sxODldW2ddXT00ODM4NCtnLHlbNDgzODQrZ109X1sxODldW2ddKTtmb3IoX1sxOTBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThmMjVcdTkwNjlcdTkwNmVcdTkwNjhcdTkwNmRcdTkwNzdcdTkxMzBcdTkxMmRcdTkx''@;'; put 'put ''MjdcdTkxMzFcdTkxODdcdTkxODlcdTkxOGJcdTkxODNcdTkyYzVcdTkyYmJcdTkyYjdcdTkyZWFcdTkyYWNcdTkyZTRcdTkyYzFcdTkyYjNcdTkyYmNcdTkyZDJcdTkyYzdcdTkyZjBcdTkyYjJcdTk1YWRcdTk1YjFcdTk3MDRcdTk3MDZcdTk3MDdcdTk3MDlcdTk3NjBcdTk3OGRcdTk3OGJc''@;'; put 'put ''dTk3OGZcdTk4MjFcdTk4MmJcdTk4MWNcdTk4YjNcdTk5MGFcdTk5MTNcdTk5MTJcdTk5MThcdTk5ZGRcdTk5ZDBcdTk5ZGZcdTk5ZGJcdTk5ZDFcdTk5ZDVcdTk5ZDJcdTk5ZDlcdTlhYjdcdTlhZWVcdTlhZWZcdTliMjdcdTliNDVcdTliNDRcdTliNzdcdTliNmZcdTlkMDZcdTlkMDlcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTlkMDNcdTllYTlcdTllYmVcdTllY2VcdTU4YThcdTlmNTJcdTUxMTJcdTUxMThcdTUxMTRcdTUxMTBcdTUxMTVcdTUxODBcdTUxYWFcdTUxZGRcdTUyOTFcdTUyOTNcdTUyZjNcdTU2NTlcdTU2NmJcdTU2NzlcdTU2NjlcdTU2''@;'; put 'put ''NjRcdTU2NzhcdTU2NmFcdTU2NjhcdTU2NjVcdTU2NzFcdTU2NmZcdTU2NmNcdTU2NjJcdTU2NzZcdTU4YzFcdTU4YmVcdTU4YzdcdTU4YzVcdTU5NmVcdTViMWRcdTViMzRcdTViNzhcdTViZjBcdTVjMGVcdTVmNGFcdTYxYjJcdTYxOTFcdTYxYTlcdTYxOGFcdTYxY2RcdTYxYjZcdTYxYmVc''@;'; put 'put ''dTYxY2FcdTYxYzhcdTYyMzBcdTY0YzVcdTY0YzFcdTY0Y2JcdTY0YmJcdTY0YmNcdTY0ZGFcdTY0YzRcdTY0YzdcdTY0YzJcdTY0Y2RcdTY0YmZcdTY0ZDJcdTY0ZDRcdTY0YmVcdTY1NzRcdTY2YzZcdTY2YzlcdTY2YjlcdTY2YzRcdTY2YzdcdTY2YjhcdTZhM2RcdTZhMzhcdTZhM2FcdTZh''@;'; put 'put ''NTlcdTZhNmJcdTZhNThcdTZhMzlcdTZhNDRcdTZhNjJcdTZhNjFcdTZhNGJcdTZhNDdcdTZhMzVcdTZhNWZcdTZhNDhcdTZiNTlcdTZiNzdcdTZjMDVcdTZmYzJcdTZmYjFcdTZmYTFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxOTBdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE5MF1bZ10u''@;'; put 'put ''Y2hhckNvZGVBdCgwKSYmKElbX1sxOTBdW2ddXT00ODY0MCtnLHlbNDg2NDArZ109X1sxOTBdW2ddKTtmb3IoX1sxOTFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZmYzNcdTZmYTRcdTZmYzFcdTZmYTdcdTZmYjNcdTZmYzBcdTZm''@;'; put 'put ''YjlcdTZmYjZcdTZmYTZcdTZmYTBcdTZmYjRcdTcxYmVcdTcxYzlcdTcxZDBcdTcxZDJcdTcxYzhcdTcxZDVcdTcxYjlcdTcxY2VcdTcxZDlcdTcxZGNcdTcxYzNcdTcxYzRcdTczNjhcdTc0OWNcdTc0YTNcdTc0OThcdTc0OWZcdTc0OWVcdTc0ZTJcdTc1MGNcdTc1MGRcdTc2MzRcdTc2Mzhc''@;'; put 'put ''dTc2M2FcdTc2ZTdcdTc2ZTVcdTc3YTBcdTc3OWVcdTc3OWZcdTc3YTVcdTc4ZThcdTc4ZGFcdTc4ZWNcdTc4ZTdcdTc5YTZcdTdhNGRcdTdhNGVcdTdhNDZcdTdhNGNcdTdhNGJcdTdhYmFcdTdiZDlcdTdjMTFcdTdiYzlcdTdiZTRcdTdiZGJcdTdiZTFcdTdiZTlcdTdiZTZcdTdjZDVcdTdj''@;'; put 'put ''ZDZcdTdlMGFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdlMTFcdTdlMDhcdTdlMWJcdTdlMjNcdTdlMWVcdTdlMWRcdTdlMDlcdTdlMTBcdTdmNzlcdTdmYjJcdTdmZjBcdTdmZjFcdTdmZWVcdTgwMjhcdTgxYjNcdTgxYTlcdTgxYThcdTgxZmJcdTgyMDhcdTgy''@;'; put 'put ''NThcdTgyNTlcdTg1NGFcdTg1NTlcdTg1NDhcdTg1NjhcdTg1NjlcdTg1NDNcdTg1NDlcdTg1NmRcdTg1NmFcdTg1NWVcdTg3ODNcdTg3OWZcdTg3OWVcdTg3YTJcdTg3OGRcdTg4NjFcdTg5MmFcdTg5MzJcdTg5MjVcdTg5MmJcdTg5MjFcdTg5YWFcdTg5YTZcdThhZTZcdThhZmFcdThhZWJc''@;'; put 'put ''dThhZjFcdThiMDBcdThhZGNcdThhZTdcdThhZWVcdThhZmVcdThiMDFcdThiMDJcdThhZjdcdThhZWRcdThhZjNcdThhZjZcdThhZmNcdThjNmJcdThjNmRcdThjOTNcdThjZjRcdThlNDRcdThlMzFcdThlMzRcdThlNDJcdThlMzlcdThlMzVcdThmM2JcdThmMmZcdThmMzhcdThmMzNcdThm''@;'; put 'put ''YThcdThmYTZcdTkwNzVcdTkwNzRcdTkwNzhcdTkwNzJcdTkwN2NcdTkwN2FcdTkxMzRcdTkxOTJcdTkzMjBcdTkzMzZcdTkyZjhcdTkzMzNcdTkzMmZcdTkzMjJcdTkyZmNcdTkzMmJcdTkzMDRcdTkzMWFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxOTFdLmxlbmd0aDsrK2cpNjU1MzMh''@;'; put 'put ''PT1fWzE5MV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxOTFdW2ddXT00ODg5NitnLHlbNDg4OTYrZ109X1sxOTFdW2ddKTtmb3IoX1sxOTJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkzMTBcdTkzMjZcdTkzMjFcdTkzMTVcdTkz''@;'; put 'put ''MmVcdTkzMTlcdTk1YmJcdTk2YTdcdTk2YThcdTk2YWFcdTk2ZDVcdTk3MGVcdTk3MTFcdTk3MTZcdTk3MGRcdTk3MTNcdTk3MGZcdTk3NWJcdTk3NWNcdTk3NjZcdTk3OThcdTk4MzBcdTk4MzhcdTk4M2JcdTk4MzdcdTk4MmRcdTk4MzlcdTk4MjRcdTk5MTBcdTk5MjhcdTk5MWVcdTk5MWJc''@;'; put 'put ''dTk5MjFcdTk5MWFcdTk5ZWRcdTk5ZTJcdTk5ZjFcdTlhYjhcdTlhYmNcdTlhZmJcdTlhZWRcdTliMjhcdTliOTFcdTlkMTVcdTlkMjNcdTlkMjZcdTlkMjhcdTlkMTJcdTlkMWJcdTllZDhcdTllZDRcdTlmOGRcdTlmOWNcdTUxMmFcdTUxMWZcdTUxMjFcdTUxMzJcdTUyZjVcdTU2OGVcdTU2''@;'; put 'put ''ODBcdTU2OTBcdTU2ODVcdTU2ODdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU2OGZcdTU4ZDVcdTU4ZDNcdTU4ZDFcdTU4Y2VcdTViMzBcdTViMmFcdTViMjRcdTViN2FcdTVjMzdcdTVjNjhcdTVkYmNcdTVkYmFcdTVkYmRcdTVkYjhcdTVlNmJcdTVmNGNcdTVm''@;'; put 'put ''YmRcdTYxYzlcdTYxYzJcdTYxYzdcdTYxZTZcdTYxY2JcdTYyMzJcdTYyMzRcdTY0Y2VcdTY0Y2FcdTY0ZDhcdTY0ZTBcdTY0ZjBcdTY0ZTZcdTY0ZWNcdTY0ZjFcdTY0ZTJcdTY0ZWRcdTY1ODJcdTY1ODNcdTY2ZDlcdTY2ZDZcdTZhODBcdTZhOTRcdTZhODRcdTZhYTJcdTZhOWNcdTZhZGJc''@;'; put 'put ''dTZhYTNcdTZhN2VcdTZhOTdcdTZhOTBcdTZhYTBcdTZiNWNcdTZiYWVcdTZiZGFcdTZjMDhcdTZmZDhcdTZmZjFcdTZmZGZcdTZmZTBcdTZmZGJcdTZmZTRcdTZmZWJcdTZmZWZcdTZmODBcdTZmZWNcdTZmZTFcdTZmZTlcdTZmZDVcdTZmZWVcdTZmZjBcdTcxZTdcdTcxZGZcdTcxZWVcdTcx''@;'; put 'put ''ZTZcdTcxZTVcdTcxZWRcdTcxZWNcdTcxZjRcdTcxZTBcdTcyMzVcdTcyNDZcdTczNzBcdTczNzJcdTc0YTlcdTc0YjBcdTc0YTZcdTc0YThcdTc2NDZcdTc2NDJcdTc2NGNcdTc2ZWFcdTc3YjNcdTc3YWFcdTc3YjBcdTc3YWNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxOTJdLmxlbmd0''@;'; put 'put ''aDsrK2cpNjU1MzMhPT1fWzE5Ml1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxOTJdW2ddXT00OTE1MitnLHlbNDkxNTIrZ109X1sxOTJdW2ddKTtmb3IoX1sxOTNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc3YTdcdTc3YWRcdTc3''@;'; put 'put ''ZWZcdTc4ZjdcdTc4ZmFcdTc4ZjRcdTc4ZWZcdTc5MDFcdTc5YTdcdTc5YWFcdTdhNTdcdTdhYmZcdTdjMDdcdTdjMGRcdTdiZmVcdTdiZjdcdTdjMGNcdTdiZTBcdTdjZTBcdTdjZGNcdTdjZGVcdTdjZTJcdTdjZGZcdTdjZDlcdTdjZGRcdTdlMmVcdTdlM2VcdTdlNDZcdTdlMzdcdTdlMzJc''@;'; put 'put ''dTdlNDNcdTdlMmJcdTdlM2RcdTdlMzFcdTdlNDVcdTdlNDFcdTdlMzRcdTdlMzlcdTdlNDhcdTdlMzVcdTdlM2ZcdTdlMmZcdTdmNDRcdTdmZjNcdTdmZmNcdTgwNzFcdTgwNzJcdTgwNzBcdTgwNmZcdTgwNzNcdTgxYzZcdTgxYzNcdTgxYmFcdTgxYzJcdTgxYzBcdTgxYmZcdTgxYmRcdTgx''@;'; put 'put ''YzlcdTgxYmVcdTgxZThcdTgyMDlcdTgyNzFcdTg1YWFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg1ODRcdTg1N2VcdTg1OWNcdTg1OTFcdTg1OTRcdTg1YWZcdTg1OWJcdTg1ODdcdTg1YThcdTg1OGFcdTg2NjdcdTg3YzBcdTg3ZDFcdTg3YjNcdTg3ZDJcdTg3''@;'; put 'put ''YzZcdTg3YWJcdTg3YmJcdTg3YmFcdTg3YzhcdTg3Y2JcdTg5M2JcdTg5MzZcdTg5NDRcdTg5MzhcdTg5M2RcdTg5YWNcdThiMGVcdThiMTdcdThiMTlcdThiMWJcdThiMGFcdThiMjBcdThiMWRcdThiMDRcdThiMTBcdThjNDFcdThjM2ZcdThjNzNcdThjZmFcdThjZmRcdThjZmNcdThjZjhc''@;'; put 'put ''dThjZmJcdThkYThcdThlNDlcdThlNGJcdThlNDhcdThlNGFcdThmNDRcdThmM2VcdThmNDJcdThmNDVcdThmM2ZcdTkwN2ZcdTkwN2RcdTkwODRcdTkwODFcdTkwODJcdTkwODBcdTkxMzlcdTkxYTNcdTkxOWVcdTkxOWNcdTkzNGRcdTkzODJcdTkzMjhcdTkzNzVcdTkzNGFcdTkzNjVcdTkz''@;'; put 'put ''NGJcdTkzMThcdTkzN2VcdTkzNmNcdTkzNWJcdTkzNzBcdTkzNWFcdTkzNTRcdTk1Y2FcdTk1Y2JcdTk1Y2NcdTk1YzhcdTk1YzZcdTk2YjFcdTk2YjhcdTk2ZDZcdTk3MWNcdTk3MWVcdTk3YTBcdTk3ZDNcdTk4NDZcdTk4YjZcdTk5MzVcdTlhMDFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9''@;'; put 'put ''X1sxOTNdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE5M11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxOTNdW2ddXT00OTQwOCtnLHlbNDk0MDgrZ109X1sxOTNdW2ddKTtmb3IoX1sxOTRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk5''@;'; put 'put ''ZmZcdTliYWVcdTliYWJcdTliYWFcdTliYWRcdTlkM2JcdTlkM2ZcdTllOGJcdTllY2ZcdTllZGVcdTllZGNcdTllZGRcdTllZGJcdTlmM2VcdTlmNGJcdTUzZTJcdTU2OTVcdTU2YWVcdTU4ZDlcdTU4ZDhcdTViMzhcdTVmNWRcdTYxZTNcdTYyMzNcdTY0ZjRcdTY0ZjJcdTY0ZmVcdTY1MDZc''@;'; put 'put ''dTY0ZmFcdTY0ZmJcdTY0ZjdcdTY1YjdcdTY2ZGNcdTY3MjZcdTZhYjNcdTZhYWNcdTZhYzNcdTZhYmJcdTZhYjhcdTZhYzJcdTZhYWVcdTZhYWZcdTZiNWZcdTZiNzhcdTZiYWZcdTcwMDlcdTcwMGJcdTZmZmVcdTcwMDZcdTZmZmFcdTcwMTFcdTcwMGZcdTcxZmJcdTcxZmNcdTcxZmVcdTcx''@;'; put 'put ''ZjhcdTczNzdcdTczNzVcdTc0YTdcdTc0YmZcdTc1MTVcdTc2NTZcdTc2NThcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc2NTJcdTc3YmRcdTc3YmZcdTc3YmJcdTc3YmNcdTc5MGVcdTc5YWVcdTdhNjFcdTdhNjJcdTdhNjBcdTdhYzRcdTdhYzVcdTdjMmJcdTdj''@;'; put 'put ''MjdcdTdjMmFcdTdjMWVcdTdjMjNcdTdjMjFcdTdjZTdcdTdlNTRcdTdlNTVcdTdlNWVcdTdlNWFcdTdlNjFcdTdlNTJcdTdlNTlcdTdmNDhcdTdmZjlcdTdmZmJcdTgwNzdcdTgwNzZcdTgxY2RcdTgxY2ZcdTgyMGFcdTg1Y2ZcdTg1YTlcdTg1Y2RcdTg1ZDBcdTg1YzlcdTg1YjBcdTg1YmFc''@;'; put 'put ''dTg1YjlcdTg1YTZcdTg3ZWZcdTg3ZWNcdTg3ZjJcdTg3ZTBcdTg5ODZcdTg5YjJcdTg5ZjRcdThiMjhcdThiMzlcdThiMmNcdThiMmJcdThjNTBcdThkMDVcdThlNTlcdThlNjNcdThlNjZcdThlNjRcdThlNWZcdThlNTVcdThlYzBcdThmNDlcdThmNGRcdTkwODdcdTkwODNcdTkwODhcdTkx''@;'; put 'put ''YWJcdTkxYWNcdTkxZDBcdTkzOTRcdTkzOGFcdTkzOTZcdTkzYTJcdTkzYjNcdTkzYWVcdTkzYWNcdTkzYjBcdTkzOThcdTkzOWFcdTkzOTdcdTk1ZDRcdTk1ZDZcdTk1ZDBcdTk1ZDVcdTk2ZTJcdTk2ZGNcdTk2ZDlcdTk2ZGJcdTk2ZGVcdTk3MjRcdTk3YTNcdTk3YTZcdWZmZmQiLnNwbGl0''@;'; put 'put ''KCIiKSxnPTA7ZyE9X1sxOTRdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE5NF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxOTRdW2ddXT00OTY2NCtnLHlbNDk2NjQrZ109X1sxOTRdW2ddKTtmb3IoX1sxOTVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdTk3YWRcdTk3ZjlcdTk4NGRcdTk4NGZcdTk4NGNcdTk4NGVcdTk4NTNcdTk4YmFcdTk5M2VcdTk5M2ZcdTk5M2RcdTk5MmVcdTk5YTVcdTlhMGVcdTlhYzFcdTliMDNcdTliMDZcdTliNGZcdTliNGVcdTliNGRcdTliY2FcdTliYzlcdTliZmRcdTliYzhcdTliYzBcdTlkNTFc''@;'; put 'put ''dTlkNWRcdTlkNjBcdTllZTBcdTlmMTVcdTlmMmNcdTUxMzNcdTU2YTVcdTU4ZGVcdTU4ZGZcdTU4ZTJcdTViZjVcdTlmOTBcdTVlZWNcdTYxZjJcdTYxZjdcdTYxZjZcdTYxZjVcdTY1MDBcdTY1MGZcdTY2ZTBcdTY2ZGRcdTZhZTVcdTZhZGRcdTZhZGFcdTZhZDNcdTcwMWJcdTcwMWZcdTcw''@;'; put 'put ''MjhcdTcwMWFcdTcwMWRcdTcwMTVcdTcwMThcdTcyMDZcdTcyMGRcdTcyNThcdTcyYTJcdTczNzhcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTczN2FcdTc0YmRcdTc0Y2FcdTc0ZTNcdTc1ODdcdTc1ODZcdTc2NWZcdTc2NjFcdTc3YzdcdTc5MTlcdTc5YjFcdTdh''@;'; put 'put ''NmJcdTdhNjlcdTdjM2VcdTdjM2ZcdTdjMzhcdTdjM2RcdTdjMzdcdTdjNDBcdTdlNmJcdTdlNmRcdTdlNzlcdTdlNjlcdTdlNmFcdTdmODVcdTdlNzNcdTdmYjZcdTdmYjlcdTdmYjhcdTgxZDhcdTg1ZTlcdTg1ZGRcdTg1ZWFcdTg1ZDVcdTg1ZTRcdTg1ZTVcdTg1ZjdcdTg3ZmJcdTg4MDVc''@;'; put 'put ''dTg4MGRcdTg3ZjlcdTg3ZmVcdTg5NjBcdTg5NWZcdTg5NTZcdTg5NWVcdThiNDFcdThiNWNcdThiNThcdThiNDlcdThiNWFcdThiNGVcdThiNGZcdThiNDZcdThiNTlcdThkMDhcdThkMGFcdThlN2NcdThlNzJcdThlODdcdThlNzZcdThlNmNcdThlN2FcdThlNzRcdThmNTRcdThmNGVcdThm''@;'; put 'put ''YWRcdTkwOGFcdTkwOGJcdTkxYjFcdTkxYWVcdTkzZTFcdTkzZDFcdTkzZGZcdTkzYzNcdTkzYzhcdTkzZGNcdTkzZGRcdTkzZDZcdTkzZTJcdTkzY2RcdTkzZDhcdTkzZTRcdTkzZDdcdTkzZThcdTk1ZGNcdTk2YjRcdTk2ZTNcdTk3MmFcdTk3MjdcdTk3NjFcdTk3ZGNcdTk3ZmJcdTk4NWVc''@;'; put 'put ''dWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxOTVdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE5NV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxOTVdW2ddXT00OTkyMCtnLHlbNDk5MjArZ109X1sxOTVdW2ddKTtmb3IoX1sxOTZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk4NThcdTk4NWJcdTk4YmNcdTk5NDVcdTk5NDlcdTlhMTZcdTlhMTlcdTliMGRcdTliZThcdTliZTdcdTliZDZcdTliZGJcdTlkODlcdTlkNjFcdTlkNzJcdTlkNmFcdTlkNmNcdTllOTJcdTllOTdcdTllOTNcdTllYjRcdTUyZjhcdTU2YThcdTU2Yjdc''@;'; put 'put ''dTU2YjZcdTU2YjRcdTU2YmNcdTU4ZTRcdTViNDBcdTViNDNcdTViN2RcdTViZjZcdTVkYzlcdTYxZjhcdTYxZmFcdTY1MThcdTY1MTRcdTY1MTlcdTY2ZTZcdTY3MjdcdTZhZWNcdTcwM2VcdTcwMzBcdTcwMzJcdTcyMTBcdTczN2JcdTc0Y2ZcdTc2NjJcdTc2NjVcdTc5MjZcdTc5MmFcdTc5''@;'; put 'put ''MmNcdTc5MmJcdTdhYzdcdTdhZjZcdTdjNGNcdTdjNDNcdTdjNGRcdTdjZWZcdTdjZjBcdThmYWVcdTdlN2RcdTdlN2NcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdlODJcdTdmNGNcdTgwMDBcdTgxZGFcdTgyNjZcdTg1ZmJcdTg1ZjlcdTg2MTFcdTg1ZmFcdTg2''@;'; put 'put ''MDZcdTg2MGJcdTg2MDdcdTg2MGFcdTg4MTRcdTg4MTVcdTg5NjRcdTg5YmFcdTg5ZjhcdThiNzBcdThiNmNcdThiNjZcdThiNmZcdThiNWZcdThiNmJcdThkMGZcdThkMGRcdThlODlcdThlODFcdThlODVcdThlODJcdTkxYjRcdTkxY2JcdTk0MThcdTk0MDNcdTkzZmRcdTk1ZTFcdTk3MzBc''@;'; put 'put ''dTk4YzRcdTk5NTJcdTk5NTFcdTk5YThcdTlhMmJcdTlhMzBcdTlhMzdcdTlhMzVcdTljMTNcdTljMGRcdTllNzlcdTllYjVcdTllZThcdTlmMmZcdTlmNWZcdTlmNjNcdTlmNjFcdTUxMzdcdTUxMzhcdTU2YzFcdTU2YzBcdTU2YzJcdTU5MTRcdTVjNmNcdTVkY2RcdTYxZmNcdTYxZmVcdTY1''@;'; put 'put ''MWRcdTY1MWNcdTY1OTVcdTY2ZTlcdTZhZmJcdTZiMDRcdTZhZmFcdTZiYjJcdTcwNGNcdTcyMWJcdTcyYTdcdTc0ZDZcdTc0ZDRcdTc2NjlcdTc3ZDNcdTdjNTBcdTdlOGZcdTdlOGNcdTdmYmNcdTg2MTdcdTg2MmRcdTg2MWFcdTg4MjNcdTg4MjJcdTg4MjFcdTg4MWZcdTg5NmFcdTg5NmNc''@;'; put 'put ''dTg5YmRcdThiNzRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxOTZdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE5Nl1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxOTZdW2ddXT01MDE3NitnLHlbNTAxNzYrZ109X1sxOTZdW2ddKTtmb3IoX1sxOTddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThiNzdcdThiN2RcdThkMTNcdThlOGFcdThlOGRcdThlOGJcdThmNWZcdThmYWZcdTkxYmFcdTk0MmVcdTk0MzNcdTk0MzVcdTk0M2FcdTk0MzhcdTk0MzJcdTk0MmJcdTk1ZTJcdTk3MzhcdTk3MzlcdTk3MzJcdTk3ZmZcdTk4Njdc''@;'; put 'put ''dTk4NjVcdTk5NTdcdTlhNDVcdTlhNDNcdTlhNDBcdTlhM2VcdTlhY2ZcdTliNTRcdTliNTFcdTljMmRcdTljMjVcdTlkYWZcdTlkYjRcdTlkYzJcdTlkYjhcdTllOWRcdTllZWZcdTlmMTlcdTlmNWNcdTlmNjZcdTlmNjdcdTUxM2NcdTUxM2JcdTU2YzhcdTU2Y2FcdTU2YzlcdTViN2ZcdTVk''@;'; put 'put ''ZDRcdTVkZDJcdTVmNGVcdTYxZmZcdTY1MjRcdTZiMGFcdTZiNjFcdTcwNTFcdTcwNThcdTczODBcdTc0ZTRcdTc1OGFcdTc2NmVcdTc2NmNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc5YjNcdTdjNjBcdTdjNWZcdTgwN2VcdTgwN2RcdTgxZGZcdTg5NzJcdTg5''@;'; put 'put ''NmZcdTg5ZmNcdThiODBcdThkMTZcdThkMTdcdThlOTFcdThlOTNcdThmNjFcdTkxNDhcdTk0NDRcdTk0NTFcdTk0NTJcdTk3M2RcdTk3M2VcdTk3YzNcdTk3YzFcdTk4NmJcdTk5NTVcdTlhNTVcdTlhNGRcdTlhZDJcdTliMWFcdTljNDlcdTljMzFcdTljM2VcdTljM2JcdTlkZDNcdTlkZDdc''@;'; put 'put ''dTlmMzRcdTlmNmNcdTlmNmFcdTlmOTRcdTU2Y2NcdTVkZDZcdTYyMDBcdTY1MjNcdTY1MmJcdTY1MmFcdTY2ZWNcdTZiMTBcdTc0ZGFcdTdhY2FcdTdjNjRcdTdjNjNcdTdjNjVcdTdlOTNcdTdlOTZcdTdlOTRcdTgxZTJcdTg2MzhcdTg2M2ZcdTg4MzFcdThiOGFcdTkwOTBcdTkwOGZcdTk0''@;'; put 'put ''NjNcdTk0NjBcdTk0NjRcdTk3NjhcdTk4NmZcdTk5NWNcdTlhNWFcdTlhNWJcdTlhNTdcdTlhZDNcdTlhZDRcdTlhZDFcdTljNTRcdTljNTdcdTljNTZcdTlkZTVcdTllOWZcdTllZjRcdTU2ZDFcdTU4ZTlcdTY1MmNcdTcwNWVcdTc2NzFcdTc2NzJcdTc3ZDdcdTdmNTBcdTdmODhcdTg4MzZc''@;'; put 'put ''dTg4MzlcdTg4NjJcdThiOTNcdThiOTJcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxOTddLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE5N11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxOTddW2ddXT01MDQzMitnLHlbNTA0MzIrZ109X1sxOTddW2ddKTtmb3IoX1sxOThdPSJcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThiOTZcdTgyNzdcdThkMWJcdTkxYzBcdTk0NmFcdTk3NDJcdTk3NDhcdTk3NDRcdTk3YzZcdTk4NzBcdTlhNWZcdTliMjJcdTliNThcdTljNWZcdTlkZjlcdTlkZmFcdTllN2NcdTllN2RcdTlmMDdcdTlmNzdc''@;'; put 'put ''dTlmNzJcdTVlZjNcdTZiMTZcdTcwNjNcdTdjNmNcdTdjNmVcdTg4M2JcdTg5YzBcdThlYTFcdTkxYzFcdTk0NzJcdTk0NzBcdTk4NzFcdTk5NWVcdTlhZDZcdTliMjNcdTllY2NcdTcwNjRcdTc3ZGFcdThiOWFcdTk0NzdcdTk3YzlcdTlhNjJcdTlhNjVcdTdlOWNcdThiOWNcdThlYWFcdTkx''@;'; put 'put ''YzVcdTk0N2RcdTk0N2VcdTk0N2NcdTljNzdcdTljNzhcdTllZjdcdThjNTRcdTk0N2ZcdTllMWFcdTcyMjhcdTlhNmFcdTliMzFcdTllMWJcdTllMWVcdTdjNzJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxOThdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE5OF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxOThdW2ddXT01MDY4OCtnLHlbNTA2ODgrZ109X1sxOThdW2ddKTtmb3IoX1syMDFd''@;'; put 'put ''PSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRlNDJcdTRlNWNcdTUxZjVcdTUzMWFcdTUzODJcdTRlMDdcdTRlMGNcdTRlNDdcdTRlOGRcdTU2ZDdcdWZhMGNcdTVjNmVcdTVmNzNcdTRlMGZcdTUxODdcdTRlMGVcdTRlMmVcdTRlOTNc''@;'; put 'put ''dTRlYzJcdTRlYzlcdTRlYzhcdTUxOThcdTUyZmNcdTUzNmNcdTUzYjlcdTU3MjBcdTU5MDNcdTU5MmNcdTVjMTBcdTVkZmZcdTY1ZTFcdTZiYjNcdTZiY2NcdTZjMTRcdTcyM2ZcdTRlMzFcdTRlM2NcdTRlZThcdTRlZGNcdTRlZTlcdTRlZTFcdTRlZGRcdTRlZGFcdTUyMGNcdTUzMWNcdTUz''@;'; put 'put ''NGNcdTU3MjJcdTU3MjNcdTU5MTdcdTU5MmZcdTViODFcdTViODRcdTVjMTJcdTVjM2JcdTVjNzRcdTVjNzNcdTVlMDRcdTVlODBcdTVlODJcdTVmYzlcdTYyMDlcdTYyNTBcdTZjMTVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZjMzZcdTZjNDNcdTZjM2ZcdTZj''@;'; put 'put ''M2JcdTcyYWVcdTcyYjBcdTczOGFcdTc5YjhcdTgwOGFcdTk2MWVcdTRmMGVcdTRmMThcdTRmMmNcdTRlZjVcdTRmMTRcdTRlZjFcdTRmMDBcdTRlZjdcdTRmMDhcdTRmMWRcdTRmMDJcdTRmMDVcdTRmMjJcdTRmMTNcdTRmMDRcdTRlZjRcdTRmMTJcdTUxYjFcdTUyMTNcdTUyMDlcdTUyMTBc''@;'; put 'put ''dTUyYTZcdTUzMjJcdTUzMWZcdTUzNGRcdTUzOGFcdTU0MDdcdTU2ZTFcdTU2ZGZcdTU3MmVcdTU3MmFcdTU3MzRcdTU5M2NcdTU5ODBcdTU5N2NcdTU5ODVcdTU5N2JcdTU5N2VcdTU5NzdcdTU5N2ZcdTViNTZcdTVjMTVcdTVjMjVcdTVjN2NcdTVjN2FcdTVjN2JcdTVjN2VcdTVkZGZcdTVl''@;'; put 'put ''NzVcdTVlODRcdTVmMDJcdTVmMWFcdTVmNzRcdTVmZDVcdTVmZDRcdTVmY2ZcdTYyNWNcdTYyNWVcdTYyNjRcdTYyNjFcdTYyNjZcdTYyNjJcdTYyNTlcdTYyNjBcdTYyNWFcdTYyNjVcdTY1ZWZcdTY1ZWVcdTY3M2VcdTY3MzlcdTY3MzhcdTY3M2JcdTY3M2FcdTY3M2ZcdTY3M2NcdTY3MzNc''@;'; put 'put ''dTZjMThcdTZjNDZcdTZjNTJcdTZjNWNcdTZjNGZcdTZjNGFcdTZjNTRcdTZjNGJcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMDFdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIwMV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMDFdW2ddXT01MTQ1NitnLHlbNTE0NTYrZ109X1syMDFdW2dd''@;'; put 'put ''KTtmb3IoX1syMDJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZjNGNcdTcwNzFcdTcyNWVcdTcyYjRcdTcyYjVcdTczOGVcdTc1MmFcdTc2N2ZcdTdhNzVcdTdmNTFcdTgyNzhcdTgyN2NcdTgyODBcdTgyN2RcdTgyN2ZcdTg2NGRc''@;'; put 'put ''dTg5N2VcdTkwOTlcdTkwOTdcdTkwOThcdTkwOWJcdTkwOTRcdTk2MjJcdTk2MjRcdTk2MjBcdTk2MjNcdTRmNTZcdTRmM2JcdTRmNjJcdTRmNDlcdTRmNTNcdTRmNjRcdTRmM2VcdTRmNjdcdTRmNTJcdTRmNWZcdTRmNDFcdTRmNThcdTRmMmRcdTRmMzNcdTRmM2ZcdTRmNjFcdTUxOGZcdTUx''@;'; put 'put ''YjlcdTUyMWNcdTUyMWVcdTUyMjFcdTUyYWRcdTUyYWVcdTUzMDlcdTUzNjNcdTUzNzJcdTUzOGVcdTUzOGZcdTU0MzBcdTU0MzdcdTU0MmFcdTU0NTRcdTU0NDVcdTU0MTlcdTU0MWNcdTU0MjVcdTU0MThcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU0M2RcdTU0''@;'; put 'put ''NGZcdTU0NDFcdTU0MjhcdTU0MjRcdTU0NDdcdTU2ZWVcdTU2ZTdcdTU2ZTVcdTU3NDFcdTU3NDVcdTU3NGNcdTU3NDlcdTU3NGJcdTU3NTJcdTU5MDZcdTU5NDBcdTU5YTZcdTU5OThcdTU5YTBcdTU5OTdcdTU5OGVcdTU5YTJcdTU5OTBcdTU5OGZcdTU5YTdcdTU5YTFcdTViOGVcdTViOTJc''@;'; put 'put ''dTVjMjhcdTVjMmFcdTVjOGRcdTVjOGZcdTVjODhcdTVjOGJcdTVjODlcdTVjOTJcdTVjOGFcdTVjODZcdTVjOTNcdTVjOTVcdTVkZTBcdTVlMGFcdTVlMGVcdTVlOGJcdTVlODlcdTVlOGNcdTVlODhcdTVlOGRcdTVmMDVcdTVmMWRcdTVmNzhcdTVmNzZcdTVmZDJcdTVmZDFcdTVmZDBcdTVm''@;'; put 'put ''ZWRcdTVmZThcdTVmZWVcdTVmZjNcdTVmZTFcdTVmZTRcdTVmZTNcdTVmZmFcdTVmZWZcdTVmZjdcdTVmZmJcdTYwMDBcdTVmZjRcdTYyM2FcdTYyODNcdTYyOGNcdTYyOGVcdTYyOGZcdTYyOTRcdTYyODdcdTYyNzFcdTYyN2JcdTYyN2FcdTYyNzBcdTYyODFcdTYyODhcdTYyNzdcdTYyN2Rc''@;'; put 'put ''dTYyNzJcdTYyNzRcdTY1MzdcdTY1ZjBcdTY1ZjRcdTY1ZjNcdTY1ZjJcdTY1ZjVcdTY3NDVcdTY3NDdcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMDJdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIwMl1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMDJdW2ddXT01MTcxMitnLHlbNTE3MTIr''@;'; put 'put ''Z109X1syMDJdW2ddKTtmb3IoX1syMDNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY3NTlcdTY3NTVcdTY3NGNcdTY3NDhcdTY3NWRcdTY3NGRcdTY3NWFcdTY3NGJcdTZiZDBcdTZjMTlcdTZjMWFcdTZjNzhcdTZjNjdcdTZjNmJc''@;'; put 'put ''dTZjODRcdTZjOGJcdTZjOGZcdTZjNzFcdTZjNmZcdTZjNjlcdTZjOWFcdTZjNmRcdTZjODdcdTZjOTVcdTZjOWNcdTZjNjZcdTZjNzNcdTZjNjVcdTZjN2JcdTZjOGVcdTcwNzRcdTcwN2FcdTcyNjNcdTcyYmZcdTcyYmRcdTcyYzNcdTcyYzZcdTcyYzFcdTcyYmFcdTcyYzVcdTczOTVcdTcz''@;'; put 'put ''OTdcdTczOTNcdTczOTRcdTczOTJcdTc1M2FcdTc1MzlcdTc1OTRcdTc1OTVcdTc2ODFcdTc5M2RcdTgwMzRcdTgwOTVcdTgwOTlcdTgwOTBcdTgwOTJcdTgwOWNcdTgyOTBcdTgyOGZcdTgyODVcdTgyOGVcdTgyOTFcdTgyOTNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdTgyOGFcdTgyODNcdTgyODRcdThjNzhcdThmYzlcdThmYmZcdTkwOWZcdTkwYTFcdTkwYTVcdTkwOWVcdTkwYTdcdTkwYTBcdTk2MzBcdTk2MjhcdTk2MmZcdTk2MmRcdTRlMzNcdTRmOThcdTRmN2NcdTRmODVcdTRmN2RcdTRmODBcdTRmODdcdTRmNzZcdTRmNzRcdTRmODlcdTRmODRc''@;'; put 'put ''dTRmNzdcdTRmNGNcdTRmOTdcdTRmNmFcdTRmOWFcdTRmNzlcdTRmODFcdTRmNzhcdTRmOTBcdTRmOWNcdTRmOTRcdTRmOWVcdTRmOTJcdTRmODJcdTRmOTVcdTRmNmJcdTRmNmVcdTUxOWVcdTUxYmNcdTUxYmVcdTUyMzVcdTUyMzJcdTUyMzNcdTUyNDZcdTUyMzFcdTUyYmNcdTUzMGFcdTUz''@;'; put 'put ''MGJcdTUzM2NcdTUzOTJcdTUzOTRcdTU0ODdcdTU0N2ZcdTU0ODFcdTU0OTFcdTU0ODJcdTU0ODhcdTU0NmJcdTU0N2FcdTU0N2VcdTU0NjVcdTU0NmNcdTU0NzRcdTU0NjZcdTU0OGRcdTU0NmZcdTU0NjFcdTU0NjBcdTU0OThcdTU0NjNcdTU0NjdcdTU0NjRcdTU2ZjdcdTU2ZjlcdTU3NmZc''@;'; put 'put ''dTU3NzJcdTU3NmRcdTU3NmJcdTU3NzFcdTU3NzBcdTU3NzZcdTU3ODBcdTU3NzVcdTU3N2JcdTU3NzNcdTU3NzRcdTU3NjJcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMDNdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIwM11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMDNdW2ddXT01MTk2''@;'; put 'put ''OCtnLHlbNTE5NjgrZ109X1syMDNdW2ddKTtmb3IoX1syMDRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU3NjhcdTU3N2RcdTU5MGNcdTU5NDVcdTU5YjVcdTU5YmFcdTU5Y2ZcdTU5Y2VcdTU5YjJcdTU5Y2NcdTU5YzFcdTU5YjZc''@;'; put 'put ''dTU5YmNcdTU5YzNcdTU5ZDZcdTU5YjFcdTU5YmRcdTU5YzBcdTU5YzhcdTU5YjRcdTU5YzdcdTViNjJcdTViNjVcdTViOTNcdTViOTVcdTVjNDRcdTVjNDdcdTVjYWVcdTVjYTRcdTVjYTBcdTVjYjVcdTVjYWZcdTVjYThcdTVjYWNcdTVjOWZcdTVjYTNcdTVjYWRcdTVjYTJcdTVjYWFcdTVj''@;'; put 'put ''YTdcdTVjOWRcdTVjYTVcdTVjYjZcdTVjYjBcdTVjYTZcdTVlMTdcdTVlMTRcdTVlMTlcdTVmMjhcdTVmMjJcdTVmMjNcdTVmMjRcdTVmNTRcdTVmODJcdTVmN2VcdTVmN2RcdTVmZGVcdTVmZTVcdTYwMmRcdTYwMjZcdTYwMTlcdTYwMzJcdTYwMGJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdTYwMzRcdTYwMGFcdTYwMTdcdTYwMzNcdTYwMWFcdTYwMWVcdTYwMmNcdTYwMjJcdTYwMGRcdTYwMTBcdTYwMmVcdTYwMTNcdTYwMTFcdTYwMGNcdTYwMDlcdTYwMWNcdTYyMTRcdTYyM2RcdTYyYWRcdTYyYjRcdTYyZDFcdTYyYmVcdTYyYWFcdTYyYjZcdTYyY2Fc''@;'; put 'put ''dTYyYWVcdTYyYjNcdTYyYWZcdTYyYmJcdTYyYTlcdTYyYjBcdTYyYjhcdTY1M2RcdTY1YThcdTY1YmJcdTY2MDlcdTY1ZmNcdTY2MDRcdTY2MTJcdTY2MDhcdTY1ZmJcdTY2MDNcdTY2MGJcdTY2MGRcdTY2MDVcdTY1ZmRcdTY2MTFcdTY2MTBcdTY2ZjZcdTY3MGFcdTY3ODVcdTY3NmNcdTY3''@;'; put 'put ''OGVcdTY3OTJcdTY3NzZcdTY3N2JcdTY3OThcdTY3ODZcdTY3ODRcdTY3NzRcdTY3OGRcdTY3OGNcdTY3N2FcdTY3OWZcdTY3OTFcdTY3OTlcdTY3ODNcdTY3N2RcdTY3ODFcdTY3NzhcdTY3NzlcdTY3OTRcdTZiMjVcdTZiODBcdTZiN2VcdTZiZGVcdTZjMWRcdTZjOTNcdTZjZWNcdTZjZWJc''@;'; put 'put ''dTZjZWVcdTZjZDlcdTZjYjZcdTZjZDRcdTZjYWRcdTZjZTdcdTZjYjdcdTZjZDBcdTZjYzJcdTZjYmFcdTZjYzNcdTZjYzZcdTZjZWRcdTZjZjJcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMDRdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIwNF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sy''@;'; put 'put ''MDRdW2ddXT01MjIyNCtnLHlbNTIyMjQrZ109X1syMDRdW2ddKTtmb3IoX1syMDVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZjZDJcdTZjZGRcdTZjYjRcdTZjOGFcdTZjOWRcdTZjODBcdTZjZGVcdTZjYzBcdTZkMzBcdTZjY2Rc''@;'; put 'put ''dTZjYzdcdTZjYjBcdTZjZjlcdTZjY2ZcdTZjZTlcdTZjZDFcdTcwOTRcdTcwOThcdTcwODVcdTcwOTNcdTcwODZcdTcwODRcdTcwOTFcdTcwOTZcdTcwODJcdTcwOWFcdTcwODNcdTcyNmFcdTcyZDZcdTcyY2JcdTcyZDhcdTcyYzlcdTcyZGNcdTcyZDJcdTcyZDRcdTcyZGFcdTcyY2NcdTcy''@;'; put 'put ''ZDFcdTczYTRcdTczYTFcdTczYWRcdTczYTZcdTczYTJcdTczYTBcdTczYWNcdTczOWRcdTc0ZGRcdTc0ZThcdTc1M2ZcdTc1NDBcdTc1M2VcdTc1OGNcdTc1OThcdTc2YWZcdTc2ZjNcdTc2ZjFcdTc2ZjBcdTc2ZjVcdTc3ZjhcdTc3ZmNcdTc3ZjlcdTc3ZmJcdTc3ZmFcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc3ZjdcdTc5NDJcdTc5M2ZcdTc5YzVcdTdhNzhcdTdhN2JcdTdhZmJcdTdjNzVcdTdjZmRcdTgwMzVcdTgwOGZcdTgwYWVcdTgwYTNcdTgwYjhcdTgwYjVcdTgwYWRcdTgyMjBcdTgyYTBcdTgyYzBcdTgyYWJcdTgyOWFcdTgyOThcdTgyOWJc''@;'; put 'put ''dTgyYjVcdTgyYTdcdTgyYWVcdTgyYmNcdTgyOWVcdTgyYmFcdTgyYjRcdTgyYThcdTgyYTFcdTgyYTlcdTgyYzJcdTgyYTRcdTgyYzNcdTgyYjZcdTgyYTJcdTg2NzBcdTg2NmZcdTg2NmRcdTg2NmVcdThjNTZcdThmZDJcdThmY2JcdThmZDNcdThmY2RcdThmZDZcdThmZDVcdThmZDdcdTkw''@;'; put 'put ''YjJcdTkwYjRcdTkwYWZcdTkwYjNcdTkwYjBcdTk2MzlcdTk2M2RcdTk2M2NcdTk2M2FcdTk2NDNcdTRmY2RcdTRmYzVcdTRmZDNcdTRmYjJcdTRmYzlcdTRmY2JcdTRmYzFcdTRmZDRcdTRmZGNcdTRmZDlcdTRmYmJcdTRmYjNcdTRmZGJcdTRmYzdcdTRmZDZcdTRmYmFcdTRmYzBcdTRmYjlc''@;'; put 'put ''dTRmZWNcdTUyNDRcdTUyNDlcdTUyYzBcdTUyYzJcdTUzM2RcdTUzN2NcdTUzOTdcdTUzOTZcdTUzOTlcdTUzOThcdTU0YmFcdTU0YTFcdTU0YWRcdTU0YTVcdTU0Y2ZcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMDVdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIwNV1bZ10uY2hhckNvZGVB''@;'; put 'put ''dCgwKSYmKElbX1syMDVdW2ddXT01MjQ4MCtnLHlbNTI0ODArZ109X1syMDVdW2ddKTtmb3IoX1syMDZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU0YzNcdTgzMGRcdTU0YjdcdTU0YWVcdTU0ZDZcdTU0YjZcdTU0YzVcdTU0YzZc''@;'; put 'put ''dTU0YTBcdTU0NzBcdTU0YmNcdTU0YTJcdTU0YmVcdTU0NzJcdTU0ZGVcdTU0YjBcdTU3YjVcdTU3OWVcdTU3OWZcdTU3YTRcdTU3OGNcdTU3OTdcdTU3OWRcdTU3OWJcdTU3OTRcdTU3OThcdTU3OGZcdTU3OTlcdTU3YTVcdTU3OWFcdTU3OTVcdTU4ZjRcdTU5MGRcdTU5NTNcdTU5ZTFcdTU5''@;'; put 'put ''ZGVcdTU5ZWVcdTVhMDBcdTU5ZjFcdTU5ZGRcdTU5ZmFcdTU5ZmRcdTU5ZmNcdTU5ZjZcdTU5ZTRcdTU5ZjJcdTU5ZjdcdTU5ZGJcdTU5ZTlcdTU5ZjNcdTU5ZjVcdTU5ZTBcdTU5ZmVcdTU5ZjRcdTU5ZWRcdTViYThcdTVjNGNcdTVjZDBcdTVjZDhcdTVjY2NcdTVjZDdcdTVjY2JcdTVjZGJc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVjZGVcdTVjZGFcdTVjYzlcdTVjYzdcdTVjY2FcdTVjZDZcdTVjZDNcdTVjZDRcdTVjY2ZcdTVjYzhcdTVjYzZcdTVjY2VcdTVjZGZcdTVjZjhcdTVkZjlcdTVlMjFcdTVlMjJcdTVlMjNcdTVlMjBcdTVlMjRcdTVlYjBc''@;'; put 'put ''dTVlYTRcdTVlYTJcdTVlOWJcdTVlYTNcdTVlYTVcdTVmMDdcdTVmMmVcdTVmNTZcdTVmODZcdTYwMzdcdTYwMzlcdTYwNTRcdTYwNzJcdTYwNWVcdTYwNDVcdTYwNTNcdTYwNDdcdTYwNDlcdTYwNWJcdTYwNGNcdTYwNDBcdTYwNDJcdTYwNWZcdTYwMjRcdTYwNDRcdTYwNThcdTYwNjZcdTYw''@;'; put 'put ''NmVcdTYyNDJcdTYyNDNcdTYyY2ZcdTYzMGRcdTYzMGJcdTYyZjVcdTYzMGVcdTYzMDNcdTYyZWJcdTYyZjlcdTYzMGZcdTYzMGNcdTYyZjhcdTYyZjZcdTYzMDBcdTYzMTNcdTYzMTRcdTYyZmFcdTYzMTVcdTYyZmJcdTYyZjBcdTY1NDFcdTY1NDNcdTY1YWFcdTY1YmZcdTY2MzZcdTY2MjFc''@;'; put 'put ''dTY2MzJcdTY2MzVcdTY2MWNcdTY2MjZcdTY2MjJcdTY2MzNcdTY2MmJcdTY2M2FcdTY2MWRcdTY2MzRcdTY2MzlcdTY2MmVcdTY3MGZcdTY3MTBcdTY3YzFcdTY3ZjJcdTY3YzhcdTY3YmFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMDZdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIwNl1b''@;'; put 'put ''Z10uY2hhckNvZGVBdCgwKSYmKElbX1syMDZdW2ddXT01MjczNitnLHlbNTI3MzYrZ109X1syMDZdW2ddKTtmb3IoX1syMDddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY3ZGNcdTY3YmJcdTY3ZjhcdTY3ZDhcdTY3YzBcdTY3Yjdc''@;'; put 'put ''dTY3YzVcdTY3ZWJcdTY3ZTRcdTY3ZGZcdTY3YjVcdTY3Y2RcdTY3YjNcdTY3ZjdcdTY3ZjZcdTY3ZWVcdTY3ZTNcdTY3YzJcdTY3YjlcdTY3Y2VcdTY3ZTdcdTY3ZjBcdTY3YjJcdTY3ZmNcdTY3YzZcdTY3ZWRcdTY3Y2NcdTY3YWVcdTY3ZTZcdTY3ZGJcdTY3ZmFcdTY3YzlcdTY3Y2FcdTY3''@;'; put 'put ''YzNcdTY3ZWFcdTY3Y2JcdTZiMjhcdTZiODJcdTZiODRcdTZiYjZcdTZiZDZcdTZiZDhcdTZiZTBcdTZjMjBcdTZjMjFcdTZkMjhcdTZkMzRcdTZkMmRcdTZkMWZcdTZkM2NcdTZkM2ZcdTZkMTJcdTZkMGFcdTZjZGFcdTZkMzNcdTZkMDRcdTZkMTlcdTZkM2FcdTZkMWFcdTZkMTFcdTZkMDBc''@;'; put 'put ''dTZkMWRcdTZkNDJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZkMDFcdTZkMThcdTZkMzdcdTZkMDNcdTZkMGZcdTZkNDBcdTZkMDdcdTZkMjBcdTZkMmNcdTZkMDhcdTZkMjJcdTZkMDlcdTZkMTBcdTcwYjdcdTcwOWZcdTcwYmVcdTcwYjFcdTcwYjBcdTcwYTFc''@;'; put 'put ''dTcwYjRcdTcwYjVcdTcwYTlcdTcyNDFcdTcyNDlcdTcyNGFcdTcyNmNcdTcyNzBcdTcyNzNcdTcyNmVcdTcyY2FcdTcyZTRcdTcyZThcdTcyZWJcdTcyZGZcdTcyZWFcdTcyZTZcdTcyZTNcdTczODVcdTczY2NcdTczYzJcdTczYzhcdTczYzVcdTczYjlcdTczYjZcdTczYjVcdTczYjRcdTcz''@;'; put 'put ''ZWJcdTczYmZcdTczYzdcdTczYmVcdTczYzNcdTczYzZcdTczYjhcdTczY2JcdTc0ZWNcdTc0ZWVcdTc1MmVcdTc1NDdcdTc1NDhcdTc1YTdcdTc1YWFcdTc2NzlcdTc2YzRcdTc3MDhcdTc3MDNcdTc3MDRcdTc3MDVcdTc3MGFcdTc2ZjdcdTc2ZmJcdTc2ZmFcdTc3ZTdcdTc3ZThcdTc4MDZc''@;'; put 'put ''dTc4MTFcdTc4MTJcdTc4MDVcdTc4MTBcdTc4MGZcdTc4MGVcdTc4MDlcdTc4MDNcdTc4MTNcdTc5NGFcdTc5NGNcdTc5NGJcdTc5NDVcdTc5NDRcdTc5ZDVcdTc5Y2RcdTc5Y2ZcdTc5ZDZcdTc5Y2VcdTdhODBcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMDddLmxlbmd0aDsrK2cpNjU1''@;'; put 'put ''MzMhPT1fWzIwN11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMDddW2ddXT01Mjk5MitnLHlbNTI5OTIrZ109X1syMDddW2ddKTtmb3IoX1syMDhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdhN2VcdTdhZDFcdTdiMDBcdTdiMDFc''@;'; put 'put ''dTdjN2FcdTdjNzhcdTdjNzlcdTdjN2ZcdTdjODBcdTdjODFcdTdkMDNcdTdkMDhcdTdkMDFcdTdmNThcdTdmOTFcdTdmOGRcdTdmYmVcdTgwMDdcdTgwMGVcdTgwMGZcdTgwMTRcdTgwMzdcdTgwZDhcdTgwYzdcdTgwZTBcdTgwZDFcdTgwYzhcdTgwYzJcdTgwZDBcdTgwYzVcdTgwZTNcdTgw''@;'; put 'put ''ZDlcdTgwZGNcdTgwY2FcdTgwZDVcdTgwYzlcdTgwY2ZcdTgwZDdcdTgwZTZcdTgwY2RcdTgxZmZcdTgyMjFcdTgyOTRcdTgyZDlcdTgyZmVcdTgyZjlcdTgzMDdcdTgyZThcdTgzMDBcdTgyZDVcdTgzM2FcdTgyZWJcdTgyZDZcdTgyZjRcdTgyZWNcdTgyZTFcdTgyZjJcdTgyZjVcdTgzMGNc''@;'; put 'put ''dTgyZmJcdTgyZjZcdTgyZjBcdTgyZWFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgyZTRcdTgyZTBcdTgyZmFcdTgyZjNcdTgyZWRcdTg2NzdcdTg2NzRcdTg2N2NcdTg2NzNcdTg4NDFcdTg4NGVcdTg4NjdcdTg4NmFcdTg4NjlcdTg5ZDNcdThhMDRcdThhMDdc''@;'; put 'put ''dThkNzJcdThmZTNcdThmZTFcdThmZWVcdThmZTBcdTkwZjFcdTkwYmRcdTkwYmZcdTkwZDVcdTkwYzVcdTkwYmVcdTkwYzdcdTkwY2JcdTkwYzhcdTkxZDRcdTkxZDNcdTk2NTRcdTk2NGZcdTk2NTFcdTk2NTNcdTk2NGFcdTk2NGVcdTUwMWVcdTUwMDVcdTUwMDdcdTUwMTNcdTUwMjJcdTUw''@;'; put 'put ''MzBcdTUwMWJcdTRmZjVcdTRmZjRcdTUwMzNcdTUwMzdcdTUwMmNcdTRmZjZcdTRmZjdcdTUwMTdcdTUwMWNcdTUwMjBcdTUwMjdcdTUwMzVcdTUwMmZcdTUwMzFcdTUwMGVcdTUxNWFcdTUxOTRcdTUxOTNcdTUxY2FcdTUxYzRcdTUxYzVcdTUxYzhcdTUxY2VcdTUyNjFcdTUyNWFcdTUyNTJc''@;'; put 'put ''dTUyNWVcdTUyNWZcdTUyNTVcdTUyNjJcdTUyY2RcdTUzMGVcdTUzOWVcdTU1MjZcdTU0ZTJcdTU1MTdcdTU1MTJcdTU0ZTdcdTU0ZjNcdTU0ZTRcdTU1MWFcdTU0ZmZcdTU1MDRcdTU1MDhcdTU0ZWJcdTU1MTFcdTU1MDVcdTU0ZjFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMDhdLmxl''@;'; put 'put ''bmd0aDsrK2cpNjU1MzMhPT1fWzIwOF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMDhdW2ddXT01MzI0OCtnLHlbNTMyNDgrZ109X1syMDhdW2ddKTtmb3IoX1syMDldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU1MGFcdTU0ZmJc''@;'; put 'put ''dTU0ZjdcdTU0ZjhcdTU0ZTBcdTU1MGVcdTU1MDNcdTU1MGJcdTU3MDFcdTU3MDJcdTU3Y2NcdTU4MzJcdTU3ZDVcdTU3ZDJcdTU3YmFcdTU3YzZcdTU3YmRcdTU3YmNcdTU3YjhcdTU3YjZcdTU3YmZcdTU3YzdcdTU3ZDBcdTU3YjlcdTU3YzFcdTU5MGVcdTU5NGFcdTVhMTlcdTVhMTZcdTVh''@;'; put 'put ''MmRcdTVhMmVcdTVhMTVcdTVhMGZcdTVhMTdcdTVhMGFcdTVhMWVcdTVhMzNcdTViNmNcdTViYTdcdTViYWRcdTViYWNcdTVjMDNcdTVjNTZcdTVjNTRcdTVjZWNcdTVjZmZcdTVjZWVcdTVjZjFcdTVjZjdcdTVkMDBcdTVjZjlcdTVlMjlcdTVlMjhcdTVlYThcdTVlYWVcdTVlYWFcdTVlYWNc''@;'; put 'put ''dTVmMzNcdTVmMzBcdTVmNjdcdTYwNWRcdTYwNWFcdTYwNjdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYwNDFcdTYwYTJcdTYwODhcdTYwODBcdTYwOTJcdTYwODFcdTYwOWRcdTYwODNcdTYwOTVcdTYwOWJcdTYwOTdcdTYwODdcdTYwOWNcdTYwOGVcdTYyMTlc''@;'; put 'put ''dTYyNDZcdTYyZjJcdTYzMTBcdTYzNTZcdTYzMmNcdTYzNDRcdTYzNDVcdTYzMzZcdTYzNDNcdTYzZTRcdTYzMzlcdTYzNGJcdTYzNGFcdTYzM2NcdTYzMjlcdTYzNDFcdTYzMzRcdTYzNThcdTYzNTRcdTYzNTlcdTYzMmRcdTYzNDdcdTYzMzNcdTYzNWFcdTYzNTFcdTYzMzhcdTYzNTdcdTYz''@;'; put 'put ''NDBcdTYzNDhcdTY1NGFcdTY1NDZcdTY1YzZcdTY1YzNcdTY1YzRcdTY1YzJcdTY2NGFcdTY2NWZcdTY2NDdcdTY2NTFcdTY3MTJcdTY3MTNcdTY4MWZcdTY4MWFcdTY4NDlcdTY4MzJcdTY4MzNcdTY4M2JcdTY4NGJcdTY4NGZcdTY4MTZcdTY4MzFcdTY4MWNcdTY4MzVcdTY4MmJcdTY4MmRc''@;'; put 'put ''dTY4MmZcdTY4NGVcdTY4NDRcdTY4MzRcdTY4MWRcdTY4MTJcdTY4MTRcdTY4MjZcdTY4MjhcdTY4MmVcdTY4NGRcdTY4M2FcdTY4MjVcdTY4MjBcdTZiMmNcdTZiMmZcdTZiMmRcdTZiMzFcdTZiMzRcdTZiNmRcdTgwODJcdTZiODhcdTZiZTZcdTZiZTRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7''@;'; put 'put ''ZyE9X1syMDldLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIwOV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMDldW2ddXT01MzUwNCtnLHlbNTM1MDQrZ109X1syMDldW2ddKTtmb3IoX1syMTBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dTZiZThcdTZiZTNcdTZiZTJcdTZiZTdcdTZjMjVcdTZkN2FcdTZkNjNcdTZkNjRcdTZkNzZcdTZkMGRcdTZkNjFcdTZkOTJcdTZkNThcdTZkNjJcdTZkNmRcdTZkNmZcdTZkOTFcdTZkOGRcdTZkZWZcdTZkN2ZcdTZkODZcdTZkNWVcdTZkNjdcdTZkNjBcdTZkOTdcdTZkNzBcdTZkN2NcdTZk''@;'; put 'put ''NWZcdTZkODJcdTZkOThcdTZkMmZcdTZkNjhcdTZkOGJcdTZkN2VcdTZkODBcdTZkODRcdTZkMTZcdTZkODNcdTZkN2JcdTZkN2RcdTZkNzVcdTZkOTBcdTcwZGNcdTcwZDNcdTcwZDFcdTcwZGRcdTcwY2JcdTdmMzlcdTcwZTJcdTcwZDdcdTcwZDJcdTcwZGVcdTcwZTBcdTcwZDRcdTcwY2Rc''@;'; put 'put ''dTcwYzVcdTcwYzZcdTcwYzdcdTcwZGFcdTcwY2VcdTcwZTFcdTcyNDJcdTcyNzhcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTcyNzdcdTcyNzZcdTczMDBcdTcyZmFcdTcyZjRcdTcyZmVcdTcyZjZcdTcyZjNcdTcyZmJcdTczMDFcdTczZDNcdTczZDlcdTczZTVc''@;'; put 'put ''dTczZDZcdTczYmNcdTczZTdcdTczZTNcdTczZTlcdTczZGNcdTczZDJcdTczZGJcdTczZDRcdTczZGRcdTczZGFcdTczZDdcdTczZDhcdTczZThcdTc0ZGVcdTc0ZGZcdTc0ZjRcdTc0ZjVcdTc1MjFcdTc1NWJcdTc1NWZcdTc1YjBcdTc1YzFcdTc1YmJcdTc1YzRcdTc1YzBcdTc1YmZcdTc1''@;'; put 'put ''YjZcdTc1YmFcdTc2OGFcdTc2YzlcdTc3MWRcdTc3MWJcdTc3MTBcdTc3MTNcdTc3MTJcdTc3MjNcdTc3MTFcdTc3MTVcdTc3MTlcdTc3MWFcdTc3MjJcdTc3MjdcdTc4MjNcdTc4MmNcdTc4MjJcdTc4MzVcdTc4MmZcdTc4MjhcdTc4MmVcdTc4MmJcdTc4MjFcdTc4MjlcdTc4MzNcdTc4MmFc''@;'; put 'put ''dTc4MzFcdTc5NTRcdTc5NWJcdTc5NGZcdTc5NWNcdTc5NTNcdTc5NTJcdTc5NTFcdTc5ZWJcdTc5ZWNcdTc5ZTBcdTc5ZWVcdTc5ZWRcdTc5ZWFcdTc5ZGNcdTc5ZGVcdTc5ZGRcdTdhODZcdTdhODlcdTdhODVcdTdhOGJcdTdhOGNcdTdhOGFcdTdhODdcdTdhZDhcdTdiMTBcdWZmZmQiLnNw''@;'; put 'put ''bGl0KCIiKSxnPTA7ZyE9X1syMTBdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIxMF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMTBdW2ddXT01Mzc2MCtnLHlbNTM3NjArZ109X1syMTBdW2ddKTtmb3IoX1syMTFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdTdiMDRcdTdiMTNcdTdiMDVcdTdiMGZcdTdiMDhcdTdiMGFcdTdiMGVcdTdiMDlcdTdiMTJcdTdjODRcdTdjOTFcdTdjOGFcdTdjOGNcdTdjODhcdTdjOGRcdTdjODVcdTdkMWVcdTdkMWRcdTdkMTFcdTdkMGVcdTdkMThcdTdkMTZcdTdkMTNcdTdkMWZcdTdkMTJcdTdk''@;'; put 'put ''MGZcdTdkMGNcdTdmNWNcdTdmNjFcdTdmNWVcdTdmNjBcdTdmNWRcdTdmNWJcdTdmOTZcdTdmOTJcdTdmYzNcdTdmYzJcdTdmYzBcdTgwMTZcdTgwM2VcdTgwMzlcdTgwZmFcdTgwZjJcdTgwZjlcdTgwZjVcdTgxMDFcdTgwZmJcdTgxMDBcdTgyMDFcdTgyMmZcdTgyMjVcdTgzMzNcdTgzMmRc''@;'; put 'put ''dTgzNDRcdTgzMTlcdTgzNTFcdTgzMjVcdTgzNTZcdTgzM2ZcdTgzNDFcdTgzMjZcdTgzMWNcdTgzMjJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgzNDJcdTgzNGVcdTgzMWJcdTgzMmFcdTgzMDhcdTgzM2NcdTgzNGRcdTgzMTZcdTgzMjRcdTgzMjBcdTgzMzdc''@;'; put 'put ''dTgzMmZcdTgzMjlcdTgzNDdcdTgzNDVcdTgzNGNcdTgzNTNcdTgzMWVcdTgzMmNcdTgzNGJcdTgzMjdcdTgzNDhcdTg2NTNcdTg2NTJcdTg2YTJcdTg2YThcdTg2OTZcdTg2OGRcdTg2OTFcdTg2OWVcdTg2ODdcdTg2OTdcdTg2ODZcdTg2OGJcdTg2OWFcdTg2ODVcdTg2YTVcdTg2OTlcdTg2''@;'; put 'put ''YTFcdTg2YTdcdTg2OTVcdTg2OThcdTg2OGVcdTg2OWRcdTg2OTBcdTg2OTRcdTg4NDNcdTg4NDRcdTg4NmRcdTg4NzVcdTg4NzZcdTg4NzJcdTg4ODBcdTg4NzFcdTg4N2ZcdTg4NmZcdTg4ODNcdTg4N2VcdTg4NzRcdTg4N2NcdThhMTJcdThjNDdcdThjNTdcdThjN2JcdThjYTRcdThjYTNc''@;'; put 'put ''dThkNzZcdThkNzhcdThkYjVcdThkYjdcdThkYjZcdThlZDFcdThlZDNcdThmZmVcdThmZjVcdTkwMDJcdThmZmZcdThmZmJcdTkwMDRcdThmZmNcdThmZjZcdTkwZDZcdTkwZTBcdTkwZDlcdTkwZGFcdTkwZTNcdTkwZGZcdTkwZTVcdTkwZDhcdTkwZGJcdTkwZDdcdTkwZGNcdTkwZTRcdTkx''@;'; put 'put ''NTBcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMTFdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIxMV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMTFdW2ddXT01NDAxNitnLHlbNTQwMTYrZ109X1syMTFdW2ddKTtmb3IoX1syMTJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkxNGVcdTkxNGZcdTkxZDVcdTkxZTJcdTkxZGFcdTk2NWNcdTk2NWZcdTk2YmNcdTk4ZTNcdTlhZGZcdTliMmZcdTRlN2ZcdTUwNzBcdTUwNmFcdTUwNjFcdTUwNWVcdTUwNjBcdTUwNTNcdTUwNGJcdTUwNWRcdTUwNzJcdTUwNDhcdTUwNGRcdTUw''@;'; put 'put ''NDFcdTUwNWJcdTUwNGFcdTUwNjJcdTUwMTVcdTUwNDVcdTUwNWZcdTUwNjlcdTUwNmJcdTUwNjNcdTUwNjRcdTUwNDZcdTUwNDBcdTUwNmVcdTUwNzNcdTUwNTdcdTUwNTFcdTUxZDBcdTUyNmJcdTUyNmRcdTUyNmNcdTUyNmVcdTUyZDZcdTUyZDNcdTUzMmRcdTUzOWNcdTU1NzVcdTU1NzZc''@;'; put 'put ''dTU1M2NcdTU1NGRcdTU1NTBcdTU1MzRcdTU1MmFcdTU1NTFcdTU1NjJcdTU1MzZcdTU1MzVcdTU1MzBcdTU1NTJcdTU1NDVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU1MGNcdTU1MzJcdTU1NjVcdTU1NGVcdTU1MzlcdTU1NDhcdTU1MmRcdTU1M2JcdTU1NDBc''@;'; put 'put ''dTU1NGJcdTU3MGFcdTU3MDdcdTU3ZmJcdTU4MTRcdTU3ZTJcdTU3ZjZcdTU3ZGNcdTU3ZjRcdTU4MDBcdTU3ZWRcdTU3ZmRcdTU4MDhcdTU3ZjhcdTU4MGJcdTU3ZjNcdTU3Y2ZcdTU4MDdcdTU3ZWVcdTU3ZTNcdTU3ZjJcdTU3ZTVcdTU3ZWNcdTU3ZTFcdTU4MGVcdTU3ZmNcdTU4MTBcdTU3''@;'; put 'put ''ZTdcdTU4MDFcdTU4MGNcdTU3ZjFcdTU3ZTlcdTU3ZjBcdTU4MGRcdTU4MDRcdTU5NWNcdTVhNjBcdTVhNThcdTVhNTVcdTVhNjdcdTVhNWVcdTVhMzhcdTVhMzVcdTVhNmRcdTVhNTBcdTVhNWZcdTVhNjVcdTVhNmNcdTVhNTNcdTVhNjRcdTVhNTdcdTVhNDNcdTVhNWRcdTVhNTJcdTVhNDRc''@;'; put 'put ''dTVhNWJcdTVhNDhcdTVhOGVcdTVhM2VcdTVhNGRcdTVhMzlcdTVhNGNcdTVhNzBcdTVhNjlcdTVhNDdcdTVhNTFcdTVhNTZcdTVhNDJcdTVhNWNcdTViNzJcdTViNmVcdTViYzFcdTViYzBcdTVjNTlcdTVkMWVcdTVkMGJcdTVkMWRcdTVkMWFcdTVkMjBcdTVkMGNcdTVkMjhcdTVkMGRcdTVk''@;'; put 'put ''MjZcdTVkMjVcdTVkMGZcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMTJdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIxMl1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMTJdW2ddXT01NDI3MitnLHlbNTQyNzIrZ109X1syMTJdW2ddKTtmb3IoX1syMTNdPSJcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVkMzBcdTVkMTJcdTVkMjNcdTVkMWZcdTVkMmVcdTVlM2VcdTVlMzRcdTVlYjFcdTVlYjRcdTVlYjlcdTVlYjJcdTVlYjNcdTVmMzZcdTVmMzhcdTVmOWJcdTVmOTZcdTVmOWZcdTYwOGFcdTYwOTBcdTYwODZcdTYwYmVcdTYw''@;'; put 'put ''YjBcdTYwYmFcdTYwZDNcdTYwZDRcdTYwY2ZcdTYwZTRcdTYwZDlcdTYwZGRcdTYwYzhcdTYwYjFcdTYwZGJcdTYwYjdcdTYwY2FcdTYwYmZcdTYwYzNcdTYwY2RcdTYwYzBcdTYzMzJcdTYzNjVcdTYzOGFcdTYzODJcdTYzN2RcdTYzYmRcdTYzOWVcdTYzYWRcdTYzOWRcdTYzOTdcdTYzYWJc''@;'; put 'put ''dTYzOGVcdTYzNmZcdTYzODdcdTYzOTBcdTYzNmVcdTYzYWZcdTYzNzVcdTYzOWNcdTYzNmRcdTYzYWVcdTYzN2NcdTYzYTRcdTYzM2JcdTYzOWZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYzNzhcdTYzODVcdTYzODFcdTYzOTFcdTYzOGRcdTYzNzBcdTY1NTNc''@;'; put 'put ''dTY1Y2RcdTY2NjVcdTY2NjFcdTY2NWJcdTY2NTlcdTY2NWNcdTY2NjJcdTY3MThcdTY4NzlcdTY4ODdcdTY4OTBcdTY4OWNcdTY4NmRcdTY4NmVcdTY4YWVcdTY4YWJcdTY5NTZcdTY4NmZcdTY4YTNcdTY4YWNcdTY4YTlcdTY4NzVcdTY4NzRcdTY4YjJcdTY4OGZcdTY4NzdcdTY4OTJcdTY4''@;'; put 'put ''N2NcdTY4NmJcdTY4NzJcdTY4YWFcdTY4ODBcdTY4NzFcdTY4N2VcdTY4OWJcdTY4OTZcdTY4OGJcdTY4YTBcdTY4ODlcdTY4YTRcdTY4NzhcdTY4N2JcdTY4OTFcdTY4OGNcdTY4OGFcdTY4N2RcdTZiMzZcdTZiMzNcdTZiMzdcdTZiMzhcdTZiOTFcdTZiOGZcdTZiOGRcdTZiOGVcdTZiOGNc''@;'; put 'put ''dTZjMmFcdTZkYzBcdTZkYWJcdTZkYjRcdTZkYjNcdTZlNzRcdTZkYWNcdTZkZTlcdTZkZTJcdTZkYjdcdTZkZjZcdTZkZDRcdTZlMDBcdTZkYzhcdTZkZTBcdTZkZGZcdTZkZDZcdTZkYmVcdTZkZTVcdTZkZGNcdTZkZGRcdTZkZGJcdTZkZjRcdTZkY2FcdTZkYmRcdTZkZWRcdTZkZjBcdTZk''@;'; put 'put ''YmFcdTZkZDVcdTZkYzJcdTZkY2ZcdTZkYzlcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMTNdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIxM11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMTNdW2ddXT01NDUyOCtnLHlbNTQ1MjgrZ109X1syMTNdW2ddKTtmb3IoX1syMTRdPSJcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZkZDBcdTZkZjJcdTZkZDNcdTZkZmRcdTZkZDdcdTZkY2RcdTZkZTNcdTZkYmJcdTcwZmFcdTcxMGRcdTcwZjdcdTcxMTdcdTcwZjRcdTcxMGNcdTcwZjBcdTcxMDRcdTcwZjNcdTcxMTBcdTcwZmNcdTcw''@;'; put 'put ''ZmZcdTcxMDZcdTcxMTNcdTcxMDBcdTcwZjhcdTcwZjZcdTcxMGJcdTcxMDJcdTcxMGVcdTcyN2VcdTcyN2JcdTcyN2NcdTcyN2ZcdTczMWRcdTczMTdcdTczMDdcdTczMTFcdTczMThcdTczMGFcdTczMDhcdTcyZmZcdTczMGZcdTczMWVcdTczODhcdTczZjZcdTczZjhcdTczZjVcdTc0MDRc''@;'; put 'put ''dTc0MDFcdTczZmRcdTc0MDdcdTc0MDBcdTczZmFcdTczZmNcdTczZmZcdTc0MGNcdTc0MGJcdTczZjRcdTc0MDhcdTc1NjRcdTc1NjNcdTc1Y2VcdTc1ZDJcdTc1Y2ZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc1Y2JcdTc1Y2NcdTc1ZDFcdTc1ZDBcdTc2OGZc''@;'; put 'put ''dTc2ODlcdTc2ZDNcdTc3MzlcdTc3MmZcdTc3MmRcdTc3MzFcdTc3MzJcdTc3MzRcdTc3MzNcdTc3M2RcdTc3MjVcdTc3M2JcdTc3MzVcdTc4NDhcdTc4NTJcdTc4NDlcdTc4NGRcdTc4NGFcdTc4NGNcdTc4MjZcdTc4NDVcdTc4NTBcdTc5NjRcdTc5NjdcdTc5NjlcdTc5NmFcdTc5NjNcdTc5''@;'; put 'put ''NmJcdTc5NjFcdTc5YmJcdTc5ZmFcdTc5ZjhcdTc5ZjZcdTc5ZjdcdTdhOGZcdTdhOTRcdTdhOTBcdTdiMzVcdTdiNDdcdTdiMzRcdTdiMjVcdTdiMzBcdTdiMjJcdTdiMjRcdTdiMzNcdTdiMThcdTdiMmFcdTdiMWRcdTdiMzFcdTdiMmJcdTdiMmRcdTdiMmZcdTdiMzJcdTdiMzhcdTdiMWFc''@;'; put 'put ''dTdiMjNcdTdjOTRcdTdjOThcdTdjOTZcdTdjYTNcdTdkMzVcdTdkM2RcdTdkMzhcdTdkMzZcdTdkM2FcdTdkNDVcdTdkMmNcdTdkMjlcdTdkNDFcdTdkNDdcdTdkM2VcdTdkM2ZcdTdkNGFcdTdkM2JcdTdkMjhcdTdmNjNcdTdmOTVcdTdmOWNcdTdmOWRcdTdmOWJcdTdmY2FcdTdmY2JcdTdm''@;'; put 'put ''Y2RcdTdmZDBcdTdmZDFcdTdmYzdcdTdmY2ZcdTdmYzlcdTgwMWZcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMTRdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIxNF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMTRdW2ddXT01NDc4NCtnLHlbNTQ3ODQrZ109X1syMTRdW2ddKTtmb3IoX1sy''@;'; put 'put ''MTVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgwMWVcdTgwMWJcdTgwNDdcdTgwNDNcdTgwNDhcdTgxMThcdTgxMjVcdTgxMTlcdTgxMWJcdTgxMmRcdTgxMWZcdTgxMmNcdTgxMWVcdTgxMjFcdTgxMTVcdTgxMjdcdTgxMWRcdTgx''@;'; put 'put ''MjJcdTgyMTFcdTgyMzhcdTgyMzNcdTgyM2FcdTgyMzRcdTgyMzJcdTgyNzRcdTgzOTBcdTgzYTNcdTgzYThcdTgzOGRcdTgzN2FcdTgzNzNcdTgzYTRcdTgzNzRcdTgzOGZcdTgzODFcdTgzOTVcdTgzOTlcdTgzNzVcdTgzOTRcdTgzYTlcdTgzN2RcdTgzODNcdTgzOGNcdTgzOWRcdTgzOWJc''@;'; put 'put ''dTgzYWFcdTgzOGJcdTgzN2VcdTgzYTVcdTgzYWZcdTgzODhcdTgzOTdcdTgzYjBcdTgzN2ZcdTgzYTZcdTgzODdcdTgzYWVcdTgzNzZcdTgzOWFcdTg2NTlcdTg2NTZcdTg2YmZcdTg2YjdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg2YzJcdTg2YzFcdTg2YzVc''@;'; put 'put ''dTg2YmFcdTg2YjBcdTg2YzhcdTg2YjlcdTg2YjNcdTg2YjhcdTg2Y2NcdTg2YjRcdTg2YmJcdTg2YmNcdTg2YzNcdTg2YmRcdTg2YmVcdTg4NTJcdTg4ODlcdTg4OTVcdTg4YThcdTg4YTJcdTg4YWFcdTg4OWFcdTg4OTFcdTg4YTFcdTg4OWZcdTg4OThcdTg4YTdcdTg4OTlcdTg4OWJcdTg4''@;'; put 'put ''OTdcdTg4YTRcdTg4YWNcdTg4OGNcdTg4OTNcdTg4OGVcdTg5ODJcdTg5ZDZcdTg5ZDlcdTg5ZDVcdThhMzBcdThhMjdcdThhMmNcdThhMWVcdThjMzlcdThjM2JcdThjNWNcdThjNWRcdThjN2RcdThjYTVcdThkN2RcdThkN2JcdThkNzlcdThkYmNcdThkYzJcdThkYjlcdThkYmZcdThkYzFc''@;'; put 'put ''dThlZDhcdThlZGVcdThlZGRcdThlZGNcdThlZDdcdThlZTBcdThlZTFcdTkwMjRcdTkwMGJcdTkwMTFcdTkwMWNcdTkwMGNcdTkwMjFcdTkwZWZcdTkwZWFcdTkwZjBcdTkwZjRcdTkwZjJcdTkwZjNcdTkwZDRcdTkwZWJcdTkwZWNcdTkwZTlcdTkxNTZcdTkxNThcdTkxNWFcdTkxNTNcdTkx''@;'; put 'put ''NTVcdTkxZWNcdTkxZjRcdTkxZjFcdTkxZjNcdTkxZjhcdTkxZTRcdTkxZjlcdTkxZWFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMTVdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIxNV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMTVdW2ddXT01NTA0MCtnLHlbNTUwNDArZ109X1syMTVd''@;'; put 'put ''W2ddKTtmb3IoX1syMTZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkxZWJcdTkxZjdcdTkxZThcdTkxZWVcdTk1N2FcdTk1ODZcdTk1ODhcdTk2N2NcdTk2NmRcdTk2NmJcdTk2NzFcdTk2NmZcdTk2YmZcdTk3NmFcdTk4MDRcdTk4''@;'; put 'put ''ZTVcdTk5OTdcdTUwOWJcdTUwOTVcdTUwOTRcdTUwOWVcdTUwOGJcdTUwYTNcdTUwODNcdTUwOGNcdTUwOGVcdTUwOWRcdTUwNjhcdTUwOWNcdTUwOTJcdTUwODJcdTUwODdcdTUxNWZcdTUxZDRcdTUzMTJcdTUzMTFcdTUzYTRcdTUzYTdcdTU1OTFcdTU1YThcdTU1YTVcdTU1YWRcdTU1Nzdc''@;'; put 'put ''dTU2NDVcdTU1YTJcdTU1OTNcdTU1ODhcdTU1OGZcdTU1YjVcdTU1ODFcdTU1YTNcdTU1OTJcdTU1YTRcdTU1N2RcdTU1OGNcdTU1YTZcdTU1N2ZcdTU1OTVcdTU1YTFcdTU1OGVcdTU3MGNcdTU4MjlcdTU4MzdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU4MTlc''@;'; put 'put ''dTU4MWVcdTU4MjdcdTU4MjNcdTU4MjhcdTU3ZjVcdTU4NDhcdTU4MjVcdTU4MWNcdTU4MWJcdTU4MzNcdTU4M2ZcdTU4MzZcdTU4MmVcdTU4MzlcdTU4MzhcdTU4MmRcdTU4MmNcdTU4M2JcdTU5NjFcdTVhYWZcdTVhOTRcdTVhOWZcdTVhN2FcdTVhYTJcdTVhOWVcdTVhNzhcdTVhYTZcdTVh''@;'; put 'put ''N2NcdTVhYTVcdTVhYWNcdTVhOTVcdTVhYWVcdTVhMzdcdTVhODRcdTVhOGFcdTVhOTdcdTVhODNcdTVhOGJcdTVhYTlcdTVhN2JcdTVhN2RcdTVhOGNcdTVhOWNcdTVhOGZcdTVhOTNcdTVhOWRcdTViZWFcdTViY2RcdTViY2JcdTViZDRcdTViZDFcdTViY2FcdTViY2VcdTVjMGNcdTVjMzBc''@;'; put 'put ''dTVkMzdcdTVkNDNcdTVkNmJcdTVkNDFcdTVkNGJcdTVkM2ZcdTVkMzVcdTVkNTFcdTVkNGVcdTVkNTVcdTVkMzNcdTVkM2FcdTVkNTJcdTVkM2RcdTVkMzFcdTVkNTlcdTVkNDJcdTVkMzlcdTVkNDlcdTVkMzhcdTVkM2NcdTVkMzJcdTVkMzZcdTVkNDBcdTVkNDVcdTVlNDRcdTVlNDFcdTVm''@;'; put 'put ''NThcdTVmYTZcdTVmYTVcdTVmYWJcdTYwYzlcdTYwYjlcdTYwY2NcdTYwZTJcdTYwY2VcdTYwYzRcdTYxMTRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMTZdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIxNl1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMTZdW2ddXT01NTI5NitnLHlbNTUy''@;'; put 'put ''OTYrZ109X1syMTZdW2ddKTtmb3IoX1syMTddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYwZjJcdTYxMGFcdTYxMTZcdTYxMDVcdTYwZjVcdTYxMTNcdTYwZjhcdTYwZmNcdTYwZmVcdTYwYzFcdTYxMDNcdTYxMThcdTYxMWRcdTYx''@;'; put 'put ''MTBcdTYwZmZcdTYxMDRcdTYxMGJcdTYyNGFcdTYzOTRcdTYzYjFcdTYzYjBcdTYzY2VcdTYzZTVcdTYzZThcdTYzZWZcdTYzYzNcdTY0OWRcdTYzZjNcdTYzY2FcdTYzZTBcdTYzZjZcdTYzZDVcdTYzZjJcdTYzZjVcdTY0NjFcdTYzZGZcdTYzYmVcdTYzZGRcdTYzZGNcdTYzYzRcdTYzZDhc''@;'; put 'put ''dTYzZDNcdTYzYzJcdTYzYzdcdTYzY2NcdTYzY2JcdTYzYzhcdTYzZjBcdTYzZDdcdTYzZDlcdTY1MzJcdTY1NjdcdTY1NmFcdTY1NjRcdTY1NWNcdTY1NjhcdTY1NjVcdTY1OGNcdTY1OWRcdTY1OWVcdTY1YWVcdTY1ZDBcdTY1ZDJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdTY2N2NcdTY2NmNcdTY2N2JcdTY2ODBcdTY2NzFcdTY2NzlcdTY2NmFcdTY2NzJcdTY3MDFcdTY5MGNcdTY4ZDNcdTY5MDRcdTY4ZGNcdTY5MmFcdTY4ZWNcdTY4ZWFcdTY4ZjFcdTY5MGZcdTY4ZDZcdTY4ZjdcdTY4ZWJcdTY4ZTRcdTY4ZjZcdTY5MTNcdTY5MTBcdTY4ZjNcdTY4''@;'; put 'put ''ZTFcdTY5MDdcdTY4Y2NcdTY5MDhcdTY5NzBcdTY4YjRcdTY5MTFcdTY4ZWZcdTY4YzZcdTY5MTRcdTY4ZjhcdTY4ZDBcdTY4ZmRcdTY4ZmNcdTY4ZThcdTY5MGJcdTY5MGFcdTY5MTdcdTY4Y2VcdTY4YzhcdTY4ZGRcdTY4ZGVcdTY4ZTZcdTY4ZjRcdTY4ZDFcdTY5MDZcdTY4ZDRcdTY4ZTlc''@;'; put 'put ''dTY5MTVcdTY5MjVcdTY4YzdcdTZiMzlcdTZiM2JcdTZiM2ZcdTZiM2NcdTZiOTRcdTZiOTdcdTZiOTlcdTZiOTVcdTZiYmRcdTZiZjBcdTZiZjJcdTZiZjNcdTZjMzBcdTZkZmNcdTZlNDZcdTZlNDdcdTZlMWZcdTZlNDlcdTZlODhcdTZlM2NcdTZlM2RcdTZlNDVcdTZlNjJcdTZlMmJcdTZl''@;'; put 'put ''M2ZcdTZlNDFcdTZlNWRcdTZlNzNcdTZlMWNcdTZlMzNcdTZlNGJcdTZlNDBcdTZlNTFcdTZlM2JcdTZlMDNcdTZlMmVcdTZlNWVcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMTddLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIxN11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMTddW2ddXT01''@;'; put 'put ''NTU1MitnLHlbNTU1NTIrZ109X1syMTddW2ddKTtmb3IoX1syMThdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZlNjhcdTZlNWNcdTZlNjFcdTZlMzFcdTZlMjhcdTZlNjBcdTZlNzFcdTZlNmJcdTZlMzlcdTZlMjJcdTZlMzBcdTZl''@;'; put 'put ''NTNcdTZlNjVcdTZlMjdcdTZlNzhcdTZlNjRcdTZlNzdcdTZlNTVcdTZlNzlcdTZlNTJcdTZlNjZcdTZlMzVcdTZlMzZcdTZlNWFcdTcxMjBcdTcxMWVcdTcxMmZcdTcwZmJcdTcxMmVcdTcxMzFcdTcxMjNcdTcxMjVcdTcxMjJcdTcxMzJcdTcxMWZcdTcxMjhcdTcxM2FcdTcxMWJcdTcyNGJc''@;'; put 'put ''dTcyNWFcdTcyODhcdTcyODlcdTcyODZcdTcyODVcdTcyOGJcdTczMTJcdTczMGJcdTczMzBcdTczMjJcdTczMzFcdTczMzNcdTczMjdcdTczMzJcdTczMmRcdTczMjZcdTczMjNcdTczMzVcdTczMGNcdTc0MmVcdTc0MmNcdTc0MzBcdTc0MmJcdTc0MTZcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdTc0MWFcdTc0MjFcdTc0MmRcdTc0MzFcdTc0MjRcdTc0MjNcdTc0MWRcdTc0MjlcdTc0MjBcdTc0MzJcdTc0ZmJcdTc1MmZcdTc1NmZcdTc1NmNcdTc1ZTdcdTc1ZGFcdTc1ZTFcdTc1ZTZcdTc1ZGRcdTc1ZGZcdTc1ZTRcdTc1ZDdcdTc2OTVcdTc2OTJcdTc2''@;'; put 'put ''ZGFcdTc3NDZcdTc3NDdcdTc3NDRcdTc3NGRcdTc3NDVcdTc3NGFcdTc3NGVcdTc3NGJcdTc3NGNcdTc3ZGVcdTc3ZWNcdTc4NjBcdTc4NjRcdTc4NjVcdTc4NWNcdTc4NmRcdTc4NzFcdTc4NmFcdTc4NmVcdTc4NzBcdTc4NjlcdTc4NjhcdTc4NWVcdTc4NjJcdTc5NzRcdTc5NzNcdTc5NzJc''@;'; put 'put ''dTc5NzBcdTdhMDJcdTdhMGFcdTdhMDNcdTdhMGNcdTdhMDRcdTdhOTlcdTdhZTZcdTdhZTRcdTdiNGFcdTdiM2JcdTdiNDRcdTdiNDhcdTdiNGNcdTdiNGVcdTdiNDBcdTdiNThcdTdiNDVcdTdjYTJcdTdjOWVcdTdjYThcdTdjYTFcdTdkNThcdTdkNmZcdTdkNjNcdTdkNTNcdTdkNTZcdTdk''@;'; put 'put ''NjdcdTdkNmFcdTdkNGZcdTdkNmRcdTdkNWNcdTdkNmJcdTdkNTJcdTdkNTRcdTdkNjlcdTdkNTFcdTdkNWZcdTdkNGVcdTdmM2VcdTdmM2ZcdTdmNjVcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMThdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIxOF1bZ10uY2hhckNvZGVBdCgwKSYmKElb''@;'; put 'put ''X1syMThdW2ddXT01NTgwOCtnLHlbNTU4MDgrZ109X1syMThdW2ddKTtmb3IoX1syMTldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdmNjZcdTdmYTJcdTdmYTBcdTdmYTFcdTdmZDdcdTgwNTFcdTgwNGZcdTgwNTBcdTgwZmVcdTgw''@;'; put 'put ''ZDRcdTgxNDNcdTgxNGFcdTgxNTJcdTgxNGZcdTgxNDdcdTgxM2RcdTgxNGRcdTgxM2FcdTgxZTZcdTgxZWVcdTgxZjdcdTgxZjhcdTgxZjlcdTgyMDRcdTgyM2NcdTgyM2RcdTgyM2ZcdTgyNzVcdTgzM2JcdTgzY2ZcdTgzZjlcdTg0MjNcdTgzYzBcdTgzZThcdTg0MTJcdTgzZTdcdTgzZTRc''@;'; put 'put ''dTgzZmNcdTgzZjZcdTg0MTBcdTgzYzZcdTgzYzhcdTgzZWJcdTgzZTNcdTgzYmZcdTg0MDFcdTgzZGRcdTgzZTVcdTgzZDhcdTgzZmZcdTgzZTFcdTgzY2JcdTgzY2VcdTgzZDZcdTgzZjVcdTgzYzlcdTg0MDlcdTg0MGZcdTgzZGVcdTg0MTFcdTg0MDZcdTgzYzJcdTgzZjNcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgzZDVcdTgzZmFcdTgzYzdcdTgzZDFcdTgzZWFcdTg0MTNcdTgzYzNcdTgzZWNcdTgzZWVcdTgzYzRcdTgzZmJcdTgzZDdcdTgzZTJcdTg0MWJcdTgzZGJcdTgzZmVcdTg2ZDhcdTg2ZTJcdTg2ZTZcdTg2ZDNcdTg2ZTNcdTg2ZGFcdTg2''@;'; put 'put ''ZWFcdTg2ZGRcdTg2ZWJcdTg2ZGNcdTg2ZWNcdTg2ZTlcdTg2ZDdcdTg2ZThcdTg2ZDFcdTg4NDhcdTg4NTZcdTg4NTVcdTg4YmFcdTg4ZDdcdTg4YjlcdTg4YjhcdTg4YzBcdTg4YmVcdTg4YjZcdTg4YmNcdTg4YjdcdTg4YmRcdTg4YjJcdTg5MDFcdTg4YzlcdTg5OTVcdTg5OThcdTg5OTdc''@;'; put 'put ''dTg5ZGRcdTg5ZGFcdTg5ZGJcdThhNGVcdThhNGRcdThhMzlcdThhNTlcdThhNDBcdThhNTdcdThhNThcdThhNDRcdThhNDVcdThhNTJcdThhNDhcdThhNTFcdThhNGFcdThhNGNcdThhNGZcdThjNWZcdThjODFcdThjODBcdThjYmFcdThjYmVcdThjYjBcdThjYjlcdThjYjVcdThkODRcdThk''@;'; put 'put ''ODBcdThkODlcdThkZDhcdThkZDNcdThkY2RcdThkYzdcdThkZDZcdThkZGNcdThkY2ZcdThkZDVcdThkZDlcdThkYzhcdThkZDdcdThkYzVcdThlZWZcdThlZjdcdThlZmFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMTldLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIxOV1bZ10uY2hhckNv''@;'; put 'put ''ZGVBdCgwKSYmKElbX1syMTldW2ddXT01NjA2NCtnLHlbNTYwNjQrZ109X1syMTldW2ddKTtmb3IoX1syMjBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThlZjlcdThlZTZcdThlZWVcdThlZTVcdThlZjVcdThlZTdcdThlZThcdThl''@;'; put 'put ''ZjZcdThlZWJcdThlZjFcdThlZWNcdThlZjRcdThlZTlcdTkwMmRcdTkwMzRcdTkwMmZcdTkxMDZcdTkxMmNcdTkxMDRcdTkwZmZcdTkwZmNcdTkxMDhcdTkwZjlcdTkwZmJcdTkxMDFcdTkxMDBcdTkxMDdcdTkxMDVcdTkxMDNcdTkxNjFcdTkxNjRcdTkxNWZcdTkxNjJcdTkxNjBcdTkyMDFc''@;'; put 'put ''dTkyMGFcdTkyMjVcdTkyMDNcdTkyMWFcdTkyMjZcdTkyMGZcdTkyMGNcdTkyMDBcdTkyMTJcdTkxZmZcdTkxZmRcdTkyMDZcdTkyMDRcdTkyMjdcdTkyMDJcdTkyMWNcdTkyMjRcdTkyMTlcdTkyMTdcdTkyMDVcdTkyMTZcdTk1N2JcdTk1OGRcdTk1OGNcdTk1OTBcdTk2ODdcdTk2N2VcdTk2''@;'; put 'put ''ODhcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk2ODlcdTk2ODNcdTk2ODBcdTk2YzJcdTk2YzhcdTk2YzNcdTk2ZjFcdTk2ZjBcdTk3NmNcdTk3NzBcdTk3NmVcdTk4MDdcdTk4YTlcdTk4ZWJcdTljZTZcdTllZjlcdTRlODNcdTRlODRcdTRlYjZcdTUwYmRcdTUw''@;'; put 'put ''YmZcdTUwYzZcdTUwYWVcdTUwYzRcdTUwY2FcdTUwYjRcdTUwYzhcdTUwYzJcdTUwYjBcdTUwYzFcdTUwYmFcdTUwYjFcdTUwY2JcdTUwYzlcdTUwYjZcdTUwYjhcdTUxZDdcdTUyN2FcdTUyNzhcdTUyN2JcdTUyN2NcdTU1YzNcdTU1ZGJcdTU1Y2NcdTU1ZDBcdTU1Y2JcdTU1Y2FcdTU1ZGRc''@;'; put 'put ''dTU1YzBcdTU1ZDRcdTU1YzRcdTU1ZTlcdTU1YmZcdTU1ZDJcdTU1OGRcdTU1Y2ZcdTU1ZDVcdTU1ZTJcdTU1ZDZcdTU1YzhcdTU1ZjJcdTU1Y2RcdTU1ZDlcdTU1YzJcdTU3MTRcdTU4NTNcdTU4NjhcdTU4NjRcdTU4NGZcdTU4NGRcdTU4NDlcdTU4NmZcdTU4NTVcdTU4NGVcdTU4NWRcdTU4''@;'; put 'put ''NTlcdTU4NjVcdTU4NWJcdTU4M2RcdTU4NjNcdTU4NzFcdTU4ZmNcdTVhYzdcdTVhYzRcdTVhY2JcdTVhYmFcdTVhYjhcdTVhYjFcdTVhYjVcdTVhYjBcdTVhYmZcdTVhYzhcdTVhYmJcdTVhYzZcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMjBdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIy''@;'; put 'put ''MF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMjBdW2ddXT01NjMyMCtnLHlbNTYzMjArZ109X1syMjBdW2ddKTtmb3IoX1syMjFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVhYjdcdTVhYzBcdTVhY2FcdTVhYjRcdTVhYjZcdTVh''@;'; put 'put ''Y2RcdTVhYjlcdTVhOTBcdTViZDZcdTViZDhcdTViZDlcdTVjMWZcdTVjMzNcdTVkNzFcdTVkNjNcdTVkNGFcdTVkNjVcdTVkNzJcdTVkNmNcdTVkNWVcdTVkNjhcdTVkNjdcdTVkNjJcdTVkZjBcdTVlNGZcdTVlNGVcdTVlNGFcdTVlNGRcdTVlNGJcdTVlYzVcdTVlY2NcdTVlYzZcdTVlY2Jc''@;'; put 'put ''dTVlYzdcdTVmNDBcdTVmYWZcdTVmYWRcdTYwZjdcdTYxNDlcdTYxNGFcdTYxMmJcdTYxNDVcdTYxMzZcdTYxMzJcdTYxMmVcdTYxNDZcdTYxMmZcdTYxNGZcdTYxMjlcdTYxNDBcdTYyMjBcdTkxNjhcdTYyMjNcdTYyMjVcdTYyMjRcdTYzYzVcdTYzZjFcdTYzZWJcdTY0MTBcdTY0MTJcdTY0''@;'; put 'put ''MDlcdTY0MjBcdTY0MjRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY0MzNcdTY0NDNcdTY0MWZcdTY0MTVcdTY0MThcdTY0MzlcdTY0MzdcdTY0MjJcdTY0MjNcdTY0MGNcdTY0MjZcdTY0MzBcdTY0MjhcdTY0NDFcdTY0MzVcdTY0MmZcdTY0MGFcdTY0MWFcdTY0''@;'; put 'put ''NDBcdTY0MjVcdTY0MjdcdTY0MGJcdTYzZTdcdTY0MWJcdTY0MmVcdTY0MjFcdTY0MGVcdTY1NmZcdTY1OTJcdTY1ZDNcdTY2ODZcdTY2OGNcdTY2OTVcdTY2OTBcdTY2OGJcdTY2OGFcdTY2OTlcdTY2OTRcdTY2NzhcdTY3MjBcdTY5NjZcdTY5NWZcdTY5MzhcdTY5NGVcdTY5NjJcdTY5NzFc''@;'; put 'put ''dTY5M2ZcdTY5NDVcdTY5NmFcdTY5MzlcdTY5NDJcdTY5NTdcdTY5NTlcdTY5N2FcdTY5NDhcdTY5NDlcdTY5MzVcdTY5NmNcdTY5MzNcdTY5M2RcdTY5NjVcdTY4ZjBcdTY5NzhcdTY5MzRcdTY5NjlcdTY5NDBcdTY5NmZcdTY5NDRcdTY5NzZcdTY5NThcdTY5NDFcdTY5NzRcdTY5NGNcdTY5''@;'; put 'put ''M2JcdTY5NGJcdTY5MzdcdTY5NWNcdTY5NGZcdTY5NTFcdTY5MzJcdTY5NTJcdTY5MmZcdTY5N2JcdTY5M2NcdTZiNDZcdTZiNDVcdTZiNDNcdTZiNDJcdTZiNDhcdTZiNDFcdTZiOWJcdWZhMGRcdTZiZmJcdTZiZmNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMjFdLmxlbmd0aDsrK2cp''@;'; put 'put ''NjU1MzMhPT1fWzIyMV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMjFdW2ddXT01NjU3NitnLHlbNTY1NzYrZ109X1syMjFdW2ddKTtmb3IoX1syMjJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZiZjlcdTZiZjdcdTZiZjhcdTZl''@;'; put 'put ''OWJcdTZlZDZcdTZlYzhcdTZlOGZcdTZlYzBcdTZlOWZcdTZlOTNcdTZlOTRcdTZlYTBcdTZlYjFcdTZlYjlcdTZlYzZcdTZlZDJcdTZlYmRcdTZlYzFcdTZlOWVcdTZlYzlcdTZlYjdcdTZlYjBcdTZlY2RcdTZlYTZcdTZlY2ZcdTZlYjJcdTZlYmVcdTZlYzNcdTZlZGNcdTZlZDhcdTZlOTlc''@;'; put 'put ''dTZlOTJcdTZlOGVcdTZlOGRcdTZlYTRcdTZlYTFcdTZlYmZcdTZlYjNcdTZlZDBcdTZlY2FcdTZlOTdcdTZlYWVcdTZlYTNcdTcxNDdcdTcxNTRcdTcxNTJcdTcxNjNcdTcxNjBcdTcxNDFcdTcxNWRcdTcxNjJcdTcxNzJcdTcxNzhcdTcxNmFcdTcxNjFcdTcxNDJcdTcxNThcdTcxNDNcdTcx''@;'; put 'put ''NGJcdTcxNzBcdTcxNWZcdTcxNTBcdTcxNTNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTcxNDRcdTcxNGRcdTcxNWFcdTcyNGZcdTcyOGRcdTcyOGNcdTcyOTFcdTcyOTBcdTcyOGVcdTczM2NcdTczNDJcdTczM2JcdTczM2FcdTczNDBcdTczNGFcdTczNDlcdTc0''@;'; put 'put ''NDRcdTc0NGFcdTc0NGJcdTc0NTJcdTc0NTFcdTc0NTdcdTc0NDBcdTc0NGZcdTc0NTBcdTc0NGVcdTc0NDJcdTc0NDZcdTc0NGRcdTc0NTRcdTc0ZTFcdTc0ZmZcdTc0ZmVcdTc0ZmRcdTc1MWRcdTc1NzlcdTc1NzdcdTY5ODNcdTc1ZWZcdTc2MGZcdTc2MDNcdTc1ZjdcdTc1ZmVcdTc1ZmNc''@;'; put 'put ''dTc1ZjlcdTc1ZjhcdTc2MTBcdTc1ZmJcdTc1ZjZcdTc1ZWRcdTc1ZjVcdTc1ZmRcdTc2OTlcdTc2YjVcdTc2ZGRcdTc3NTVcdTc3NWZcdTc3NjBcdTc3NTJcdTc3NTZcdTc3NWFcdTc3NjlcdTc3NjdcdTc3NTRcdTc3NTlcdTc3NmRcdTc3ZTBcdTc4ODdcdTc4OWFcdTc4OTRcdTc4OGZcdTc4''@;'; put 'put ''ODRcdTc4OTVcdTc4ODVcdTc4ODZcdTc4YTFcdTc4ODNcdTc4NzlcdTc4OTlcdTc4ODBcdTc4OTZcdTc4N2JcdTc5N2NcdTc5ODJcdTc5N2RcdTc5NzlcdTdhMTFcdTdhMThcdTdhMTlcdTdhMTJcdTdhMTdcdTdhMTVcdTdhMjJcdTdhMTNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMjJd''@;'; put 'put ''Lmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIyMl1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMjJdW2ddXT01NjgzMitnLHlbNTY4MzIrZ109X1syMjJdW2ddKTtmb3IoX1syMjNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdhMWJcdTdh''@;'; put 'put ''MTBcdTdhYTNcdTdhYTJcdTdhOWVcdTdhZWJcdTdiNjZcdTdiNjRcdTdiNmRcdTdiNzRcdTdiNjlcdTdiNzJcdTdiNjVcdTdiNzNcdTdiNzFcdTdiNzBcdTdiNjFcdTdiNzhcdTdiNzZcdTdiNjNcdTdjYjJcdTdjYjRcdTdjYWZcdTdkODhcdTdkODZcdTdkODBcdTdkOGRcdTdkN2ZcdTdkODVc''@;'; put 'put ''dTdkN2FcdTdkOGVcdTdkN2JcdTdkODNcdTdkN2NcdTdkOGNcdTdkOTRcdTdkODRcdTdkN2RcdTdkOTJcdTdmNmRcdTdmNmJcdTdmNjdcdTdmNjhcdTdmNmNcdTdmYTZcdTdmYTVcdTdmYTdcdTdmZGJcdTdmZGNcdTgwMjFcdTgxNjRcdTgxNjBcdTgxNzdcdTgxNWNcdTgxNjlcdTgxNWJcdTgx''@;'; put 'put ''NjJcdTgxNzJcdTY3MjFcdTgxNWVcdTgxNzZcdTgxNjdcdTgxNmZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgxNDRcdTgxNjFcdTgyMWRcdTgyNDlcdTgyNDRcdTgyNDBcdTgyNDJcdTgyNDVcdTg0ZjFcdTg0M2ZcdTg0NTZcdTg0NzZcdTg0NzlcdTg0OGZcdTg0''@;'; put 'put ''OGRcdTg0NjVcdTg0NTFcdTg0NDBcdTg0ODZcdTg0NjdcdTg0MzBcdTg0NGRcdTg0N2RcdTg0NWFcdTg0NTlcdTg0NzRcdTg0NzNcdTg0NWRcdTg1MDdcdTg0NWVcdTg0MzdcdTg0M2FcdTg0MzRcdTg0N2FcdTg0NDNcdTg0NzhcdTg0MzJcdTg0NDVcdTg0MjlcdTgzZDlcdTg0NGJcdTg0MmZc''@;'; put 'put ''dTg0NDJcdTg0MmRcdTg0NWZcdTg0NzBcdTg0MzlcdTg0NGVcdTg0NGNcdTg0NTJcdTg0NmZcdTg0YzVcdTg0OGVcdTg0M2JcdTg0NDdcdTg0MzZcdTg0MzNcdTg0NjhcdTg0N2VcdTg0NDRcdTg0MmJcdTg0NjBcdTg0NTRcdTg0NmVcdTg0NTBcdTg3MGJcdTg3MDRcdTg2ZjdcdTg3MGNcdTg2''@;'; put 'put ''ZmFcdTg2ZDZcdTg2ZjVcdTg3NGRcdTg2ZjhcdTg3MGVcdTg3MDlcdTg3MDFcdTg2ZjZcdTg3MGRcdTg3MDVcdTg4ZDZcdTg4Y2JcdTg4Y2RcdTg4Y2VcdTg4ZGVcdTg4ZGJcdTg4ZGFcdTg4Y2NcdTg4ZDBcdTg5ODVcdTg5OWJcdTg5ZGZcdTg5ZTVcdTg5ZTRcdWZmZmQiLnNwbGl0KCIiKSxn''@;'; put 'put ''PTA7ZyE9X1syMjNdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIyM11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMjNdW2ddXT01NzA4OCtnLHlbNTcwODgrZ109X1syMjNdW2ddKTtmb3IoX1syMjRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdTg5ZTFcdTg5ZTBcdTg5ZTJcdTg5ZGNcdTg5ZTZcdThhNzZcdThhODZcdThhN2ZcdThhNjFcdThhM2ZcdThhNzdcdThhODJcdThhODRcdThhNzVcdThhODNcdThhODFcdThhNzRcdThhN2FcdThjM2NcdThjNGJcdThjNGFcdThjNjVcdThjNjRcdThjNjZcdThjODZcdThjODRcdThjODVc''@;'; put 'put ''dThjY2NcdThkNjhcdThkNjlcdThkOTFcdThkOGNcdThkOGVcdThkOGZcdThkOGRcdThkOTNcdThkOTRcdThkOTBcdThkOTJcdThkZjBcdThkZTBcdThkZWNcdThkZjFcdThkZWVcdThkZDBcdThkZTlcdThkZTNcdThkZTJcdThkZTdcdThkZjJcdThkZWJcdThkZjRcdThmMDZcdThlZmZcdThm''@;'; put 'put ''MDFcdThmMDBcdThmMDVcdThmMDdcdThmMDhcdThmMDJcdThmMGJcdTkwNTJcdTkwM2ZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkwNDRcdTkwNDlcdTkwM2RcdTkxMTBcdTkxMGRcdTkxMGZcdTkxMTFcdTkxMTZcdTkxMTRcdTkxMGJcdTkxMGVcdTkxNmVcdTkx''@;'; put 'put ''NmZcdTkyNDhcdTkyNTJcdTkyMzBcdTkyM2FcdTkyNjZcdTkyMzNcdTkyNjVcdTkyNWVcdTkyODNcdTkyMmVcdTkyNGFcdTkyNDZcdTkyNmRcdTkyNmNcdTkyNGZcdTkyNjBcdTkyNjdcdTkyNmZcdTkyMzZcdTkyNjFcdTkyNzBcdTkyMzFcdTkyNTRcdTkyNjNcdTkyNTBcdTkyNzJcdTkyNGVc''@;'; put 'put ''dTkyNTNcdTkyNGNcdTkyNTZcdTkyMzJcdTk1OWZcdTk1OWNcdTk1OWVcdTk1OWJcdTk2OTJcdTk2OTNcdTk2OTFcdTk2OTdcdTk2Y2VcdTk2ZmFcdTk2ZmRcdTk2ZjhcdTk2ZjVcdTk3NzNcdTk3NzdcdTk3NzhcdTk3NzJcdTk4MGZcdTk4MGRcdTk4MGVcdTk4YWNcdTk4ZjZcdTk4ZjlcdTk5''@;'; put 'put ''YWZcdTk5YjJcdTk5YjBcdTk5YjVcdTlhYWRcdTlhYWJcdTliNWJcdTljZWFcdTljZWRcdTljZTdcdTllODBcdTllZmRcdTUwZTZcdTUwZDRcdTUwZDdcdTUwZThcdTUwZjNcdTUwZGJcdTUwZWFcdTUwZGRcdTUwZTRcdTUwZDNcdTUwZWNcdTUwZjBcdTUwZWZcdTUwZTNcdTUwZTBcdWZmZmQi''@;'; put 'put ''LnNwbGl0KCIiKSxnPTA7ZyE9X1syMjRdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIyNF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMjRdW2ddXT01NzM0NCtnLHlbNTczNDQrZ109X1syMjRdW2ddKTtmb3IoX1syMjVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdTUxZDhcdTUyODBcdTUyODFcdTUyZTlcdTUyZWJcdTUzMzBcdTUzYWNcdTU2MjdcdTU2MTVcdTU2MGNcdTU2MTJcdTU1ZmNcdTU2MGZcdTU2MWNcdTU2MDFcdTU2MTNcdTU2MDJcdTU1ZmFcdTU2MWRcdTU2MDRcdTU1ZmZcdTU1ZjlcdTU4ODlcdTU4N2NcdTU4OTBc''@;'; put 'put ''dTU4OThcdTU4ODZcdTU4ODFcdTU4N2ZcdTU4NzRcdTU4OGJcdTU4N2FcdTU4ODdcdTU4OTFcdTU4OGVcdTU4NzZcdTU4ODJcdTU4ODhcdTU4N2JcdTU4OTRcdTU4OGZcdTU4ZmVcdTU5NmJcdTVhZGNcdTVhZWVcdTVhZTVcdTVhZDVcdTVhZWFcdTVhZGFcdTVhZWRcdTVhZWJcdTVhZjNcdTVh''@;'; put 'put ''ZTJcdTVhZTBcdTVhZGJcdTVhZWNcdTVhZGVcdTVhZGRcdTVhZDlcdTVhZThcdTVhZGZcdTViNzdcdTViZTBcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTViZTNcdTVjNjNcdTVkODJcdTVkODBcdTVkN2RcdTVkODZcdTVkN2FcdTVkODFcdTVkNzdcdTVkOGFcdTVk''@;'; put 'put ''ODlcdTVkODhcdTVkN2VcdTVkN2NcdTVkOGRcdTVkNzlcdTVkN2ZcdTVlNThcdTVlNTlcdTVlNTNcdTVlZDhcdTVlZDFcdTVlZDdcdTVlY2VcdTVlZGNcdTVlZDVcdTVlZDlcdTVlZDJcdTVlZDRcdTVmNDRcdTVmNDNcdTVmNmZcdTVmYjZcdTYxMmNcdTYxMjhcdTYxNDFcdTYxNWVcdTYxNzFc''@;'; put 'put ''dTYxNzNcdTYxNTJcdTYxNTNcdTYxNzJcdTYxNmNcdTYxODBcdTYxNzRcdTYxNTRcdTYxN2FcdTYxNWJcdTYxNjVcdTYxM2JcdTYxNmFcdTYxNjFcdTYxNTZcdTYyMjlcdTYyMjdcdTYyMmJcdTY0MmJcdTY0NGRcdTY0NWJcdTY0NWRcdTY0NzRcdTY0NzZcdTY0NzJcdTY0NzNcdTY0N2RcdTY0''@;'; put 'put ''NzVcdTY0NjZcdTY0YTZcdTY0NGVcdTY0ODJcdTY0NWVcdTY0NWNcdTY0NGJcdTY0NTNcdTY0NjBcdTY0NTBcdTY0N2ZcdTY0M2ZcdTY0NmNcdTY0NmJcdTY0NTlcdTY0NjVcdTY0NzdcdTY1NzNcdTY1YTBcdTY2YTFcdTY2YTBcdTY2OWZcdTY3MDVcdTY3MDRcdTY3MjJcdTY5YjFcdTY5YjZc''@;'; put 'put ''dTY5YzlcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMjVdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIyNV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMjVdW2ddXT01NzYwMCtnLHlbNTc2MDArZ109X1syMjVdW2ddKTtmb3IoX1syMjZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY5YTBcdTY5Y2VcdTY5OTZcdTY5YjBcdTY5YWNcdTY5YmNcdTY5OTFcdTY5OTlcdTY5OGVcdTY5YTdcdTY5OGRcdTY5YTlcdTY5YmVcdTY5YWZcdTY5YmZcdTY5YzRcdTY5YmRcdTY5YTRcdTY5ZDRcdTY5YjlcdTY5Y2FcdTY5OWFcdTY5Y2Zc''@;'; put 'put ''dTY5YjNcdTY5OTNcdTY5YWFcdTY5YTFcdTY5OWVcdTY5ZDlcdTY5OTdcdTY5OTBcdTY5YzJcdTY5YjVcdTY5YTVcdTY5YzZcdTZiNGFcdTZiNGRcdTZiNGJcdTZiOWVcdTZiOWZcdTZiYTBcdTZiYzNcdTZiYzRcdTZiZmVcdTZlY2VcdTZlZjVcdTZlZjFcdTZmMDNcdTZmMjVcdTZlZjhcdTZm''@;'; put 'put ''MzdcdTZlZmJcdTZmMmVcdTZmMDlcdTZmNGVcdTZmMTlcdTZmMWFcdTZmMjdcdTZmMThcdTZmM2JcdTZmMTJcdTZlZWRcdTZmMGFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZmMzZcdTZmNzNcdTZlZjlcdTZlZWVcdTZmMmRcdTZmNDBcdTZmMzBcdTZmM2NcdTZm''@;'; put 'put ''MzVcdTZlZWJcdTZmMDdcdTZmMGVcdTZmNDNcdTZmMDVcdTZlZmRcdTZlZjZcdTZmMzlcdTZmMWNcdTZlZmNcdTZmM2FcdTZmMWZcdTZmMGRcdTZmMWVcdTZmMDhcdTZmMjFcdTcxODdcdTcxOTBcdTcxODlcdTcxODBcdTcxODVcdTcxODJcdTcxOGZcdTcxN2JcdTcxODZcdTcxODFcdTcxOTdc''@;'; put 'put ''dTcyNDRcdTcyNTNcdTcyOTdcdTcyOTVcdTcyOTNcdTczNDNcdTczNGRcdTczNTFcdTczNGNcdTc0NjJcdTc0NzNcdTc0NzFcdTc0NzVcdTc0NzJcdTc0NjdcdTc0NmVcdTc1MDBcdTc1MDJcdTc1MDNcdTc1N2RcdTc1OTBcdTc2MTZcdTc2MDhcdTc2MGNcdTc2MTVcdTc2MTFcdTc2MGFcdTc2''@;'; put 'put ''MTRcdTc2YjhcdTc3ODFcdTc3N2NcdTc3ODVcdTc3ODJcdTc3NmVcdTc3ODBcdTc3NmZcdTc3N2VcdTc3ODNcdTc4YjJcdTc4YWFcdTc4YjRcdTc4YWRcdTc4YThcdTc4N2VcdTc4YWJcdTc4OWVcdTc4YTVcdTc4YTBcdTc4YWNcdTc4YTJcdTc4YTRcdTc5OThcdTc5OGFcdTc5OGJcdTc5OTZc''@;'; put 'put ''dTc5OTVcdTc5OTRcdTc5OTNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMjZdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIyNl1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMjZdW2ddXT01Nzg1NitnLHlbNTc4NTYrZ109X1syMjZdW2ddKTtmb3IoX1syMjddPSJcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc5OTdcdTc5ODhcdTc5OTJcdTc5OTBcdTdhMmJcdTdhNGFcdTdhMzBcdTdhMmZcdTdhMjhcdTdhMjZcdTdhYThcdTdhYWJcdTdhYWNcdTdhZWVcdTdiODhcdTdiOWNcdTdiOGFcdTdiOTFcdTdiOTBcdTdiOTZcdTdiOGRc''@;'; put 'put ''dTdiOGNcdTdiOWJcdTdiOGVcdTdiODVcdTdiOThcdTUyODRcdTdiOTlcdTdiYTRcdTdiODJcdTdjYmJcdTdjYmZcdTdjYmNcdTdjYmFcdTdkYTdcdTdkYjdcdTdkYzJcdTdkYTNcdTdkYWFcdTdkYzFcdTdkYzBcdTdkYzVcdTdkOWRcdTdkY2VcdTdkYzRcdTdkYzZcdTdkY2JcdTdkY2NcdTdk''@;'; put 'put ''YWZcdTdkYjlcdTdkOTZcdTdkYmNcdTdkOWZcdTdkYTZcdTdkYWVcdTdkYTlcdTdkYTFcdTdkYzlcdTdmNzNcdTdmZTJcdTdmZTNcdTdmZTVcdTdmZGVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgwMjRcdTgwNWRcdTgwNWNcdTgxODlcdTgxODZcdTgxODNcdTgx''@;'; put 'put ''ODdcdTgxOGRcdTgxOGNcdTgxOGJcdTgyMTVcdTg0OTdcdTg0YTRcdTg0YTFcdTg0OWZcdTg0YmFcdTg0Y2VcdTg0YzJcdTg0YWNcdTg0YWVcdTg0YWJcdTg0YjlcdTg0YjRcdTg0YzFcdTg0Y2RcdTg0YWFcdTg0OWFcdTg0YjFcdTg0ZDBcdTg0OWRcdTg0YTdcdTg0YmJcdTg0YTJcdTg0OTRc''@;'; put 'put ''dTg0YzdcdTg0Y2NcdTg0OWJcdTg0YTlcdTg0YWZcdTg0YThcdTg0ZDZcdTg0OThcdTg0YjZcdTg0Y2ZcdTg0YTBcdTg0ZDdcdTg0ZDRcdTg0ZDJcdTg0ZGJcdTg0YjBcdTg0OTFcdTg2NjFcdTg3MzNcdTg3MjNcdTg3MjhcdTg3NmJcdTg3NDBcdTg3MmVcdTg3MWVcdTg3MjFcdTg3MTlcdTg3''@;'; put 'put ''MWJcdTg3NDNcdTg3MmNcdTg3NDFcdTg3M2VcdTg3NDZcdTg3MjBcdTg3MzJcdTg3MmFcdTg3MmRcdTg3M2NcdTg3MTJcdTg3M2FcdTg3MzFcdTg3MzVcdTg3NDJcdTg3MjZcdTg3MjdcdTg3MzhcdTg3MjRcdTg3MWFcdTg3MzBcdTg3MTFcdTg4ZjdcdTg4ZTdcdTg4ZjFcdTg4ZjJcdTg4ZmFc''@;'; put 'put ''dTg4ZmVcdTg4ZWVcdTg4ZmNcdTg4ZjZcdTg4ZmJcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMjddLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIyN11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMjddW2ddXT01ODExMitnLHlbNTgxMTIrZ109X1syMjddW2ddKTtmb3IoX1syMjhdPSJcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg4ZjBcdTg4ZWNcdTg4ZWJcdTg5OWRcdTg5YTFcdTg5OWZcdTg5OWVcdTg5ZTlcdTg5ZWJcdTg5ZThcdThhYWJcdThhOTlcdThhOGJcdThhOTJcdThhOGZcdThhOTZcdThjM2RcdThjNjhcdThjNjlc''@;'; put 'put ''dThjZDVcdThjY2ZcdThjZDdcdThkOTZcdThlMDlcdThlMDJcdThkZmZcdThlMGRcdThkZmRcdThlMGFcdThlMDNcdThlMDdcdThlMDZcdThlMDVcdThkZmVcdThlMDBcdThlMDRcdThmMTBcdThmMTFcdThmMGVcdThmMGRcdTkxMjNcdTkxMWNcdTkxMjBcdTkxMjJcdTkxMWZcdTkxMWRcdTkx''@;'; put 'put ''MWFcdTkxMjRcdTkxMjFcdTkxMWJcdTkxN2FcdTkxNzJcdTkxNzlcdTkxNzNcdTkyYTVcdTkyYTRcdTkyNzZcdTkyOWJcdTkyN2FcdTkyYTBcdTkyOTRcdTkyYWFcdTkyOGRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkyYTZcdTkyOWFcdTkyYWJcdTkyNzlcdTky''@;'; put 'put ''OTdcdTkyN2ZcdTkyYTNcdTkyZWVcdTkyOGVcdTkyODJcdTkyOTVcdTkyYTJcdTkyN2RcdTkyODhcdTkyYTFcdTkyOGFcdTkyODZcdTkyOGNcdTkyOTlcdTkyYTdcdTkyN2VcdTkyODdcdTkyYTlcdTkyOWRcdTkyOGJcdTkyMmRcdTk2OWVcdTk2YTFcdTk2ZmZcdTk3NThcdTk3N2RcdTk3N2Fc''@;'; put 'put ''dTk3N2VcdTk3ODNcdTk3ODBcdTk3ODJcdTk3N2JcdTk3ODRcdTk3ODFcdTk3N2ZcdTk3Y2VcdTk3Y2RcdTk4MTZcdTk4YWRcdTk4YWVcdTk5MDJcdTk5MDBcdTk5MDdcdTk5OWRcdTk5OWNcdTk5YzNcdTk5YjlcdTk5YmJcdTk5YmFcdTk5YzJcdTk5YmRcdTk5YzdcdTlhYjFcdTlhZTNcdTlh''@;'; put 'put ''ZTdcdTliM2VcdTliM2ZcdTliNjBcdTliNjFcdTliNWZcdTljZjFcdTljZjJcdTljZjVcdTllYTdcdTUwZmZcdTUxMDNcdTUxMzBcdTUwZjhcdTUxMDZcdTUxMDdcdTUwZjZcdTUwZmVcdTUxMGJcdTUxMGNcdTUwZmRcdTUxMGFcdTUyOGJcdTUyOGNcdTUyZjFcdTUyZWZcdTU2NDhcdTU2NDJc''@;'; put 'put ''dTU2NGNcdTU2MzVcdTU2NDFcdTU2NGFcdTU2NDlcdTU2NDZcdTU2NThcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMjhdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIyOF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMjhdW2ddXT01ODM2OCtnLHlbNTgzNjgrZ109X1syMjhdW2ddKTtmb3Io''@;'; put 'put ''X1syMjldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU2NWFcdTU2NDBcdTU2MzNcdTU2M2RcdTU2MmNcdTU2M2VcdTU2MzhcdTU2MmFcdTU2M2FcdTU3MWFcdTU4YWJcdTU4OWRcdTU4YjFcdTU4YTBcdTU4YTNcdTU4YWZcdTU4YWNc''@;'; put 'put ''dTU4YTVcdTU4YTFcdTU4ZmZcdTVhZmZcdTVhZjRcdTVhZmRcdTVhZjdcdTVhZjZcdTViMDNcdTVhZjhcdTViMDJcdTVhZjlcdTViMDFcdTViMDdcdTViMDVcdTViMGZcdTVjNjdcdTVkOTlcdTVkOTdcdTVkOWZcdTVkOTJcdTVkYTJcdTVkOTNcdTVkOTVcdTVkYTBcdTVkOWNcdTVkYTFcdTVk''@;'; put 'put ''OWFcdTVkOWVcdTVlNjlcdTVlNWRcdTVlNjBcdTVlNWNcdTdkZjNcdTVlZGJcdTVlZGVcdTVlZTFcdTVmNDlcdTVmYjJcdTYxOGJcdTYxODNcdTYxNzlcdTYxYjFcdTYxYjBcdTYxYTJcdTYxODlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYxOWJcdTYxOTNcdTYx''@;'; put 'put ''YWZcdTYxYWRcdTYxOWZcdTYxOTJcdTYxYWFcdTYxYTFcdTYxOGRcdTYxNjZcdTYxYjNcdTYyMmRcdTY0NmVcdTY0NzBcdTY0OTZcdTY0YTBcdTY0ODVcdTY0OTdcdTY0OWNcdTY0OGZcdTY0OGJcdTY0OGFcdTY0OGNcdTY0YTNcdTY0OWZcdTY0NjhcdTY0YjFcdTY0OThcdTY1NzZcdTY1N2Fc''@;'; put 'put ''dTY1NzlcdTY1N2JcdTY1YjJcdTY1YjNcdTY2YjVcdTY2YjBcdTY2YTlcdTY2YjJcdTY2YjdcdTY2YWFcdTY2YWZcdTZhMDBcdTZhMDZcdTZhMTdcdTY5ZTVcdTY5ZjhcdTZhMTVcdTY5ZjFcdTY5ZTRcdTZhMjBcdTY5ZmZcdTY5ZWNcdTY5ZTJcdTZhMWJcdTZhMWRcdTY5ZmVcdTZhMjdcdTY5''@;'; put 'put ''ZjJcdTY5ZWVcdTZhMTRcdTY5ZjdcdTY5ZTdcdTZhNDBcdTZhMDhcdTY5ZTZcdTY5ZmJcdTZhMGRcdTY5ZmNcdTY5ZWJcdTZhMDlcdTZhMDRcdTZhMThcdTZhMjVcdTZhMGZcdTY5ZjZcdTZhMjZcdTZhMDdcdTY5ZjRcdTZhMTZcdTZiNTFcdTZiYTVcdTZiYTNcdTZiYTJcdTZiYTZcdTZjMDFc''@;'; put 'put ''dTZjMDBcdTZiZmZcdTZjMDJcdTZmNDFcdTZmMjZcdTZmN2VcdTZmODdcdTZmYzZcdTZmOTJcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMjldLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIyOV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMjldW2ddXT01ODYyNCtnLHlbNTg2MjQrZ109X1sy''@;'; put 'put ''MjldW2ddKTtmb3IoX1syMzBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZmOGRcdTZmODlcdTZmOGNcdTZmNjJcdTZmNGZcdTZmODVcdTZmNWFcdTZmOTZcdTZmNzZcdTZmNmNcdTZmODJcdTZmNTVcdTZmNzJcdTZmNTJcdTZmNTBc''@;'; put 'put ''dTZmNTdcdTZmOTRcdTZmOTNcdTZmNWRcdTZmMDBcdTZmNjFcdTZmNmJcdTZmN2RcdTZmNjdcdTZmOTBcdTZmNTNcdTZmOGJcdTZmNjlcdTZmN2ZcdTZmOTVcdTZmNjNcdTZmNzdcdTZmNmFcdTZmN2JcdTcxYjJcdTcxYWZcdTcxOWJcdTcxYjBcdTcxYTBcdTcxOWFcdTcxYTlcdTcxYjVcdTcx''@;'; put 'put ''OWRcdTcxYTVcdTcxOWVcdTcxYTRcdTcxYTFcdTcxYWFcdTcxOWNcdTcxYTdcdTcxYjNcdTcyOThcdTcyOWFcdTczNThcdTczNTJcdTczNWVcdTczNWZcdTczNjBcdTczNWRcdTczNWJcdTczNjFcdTczNWFcdTczNTlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTcz''@;'; put 'put ''NjJcdTc0ODdcdTc0ODlcdTc0OGFcdTc0ODZcdTc0ODFcdTc0N2RcdTc0ODVcdTc0ODhcdTc0N2NcdTc0NzlcdTc1MDhcdTc1MDdcdTc1N2VcdTc2MjVcdTc2MWVcdTc2MTlcdTc2MWRcdTc2MWNcdTc2MjNcdTc2MWFcdTc2MjhcdTc2MWJcdTc2OWNcdTc2OWRcdTc2OWVcdTc2OWJcdTc3OGRc''@;'; put 'put ''dTc3OGZcdTc3ODlcdTc3ODhcdTc4Y2RcdTc4YmJcdTc4Y2ZcdTc4Y2NcdTc4ZDFcdTc4Y2VcdTc4ZDRcdTc4YzhcdTc4YzNcdTc4YzRcdTc4YzlcdTc5OWFcdTc5YTFcdTc5YTBcdTc5OWNcdTc5YTJcdTc5OWJcdTZiNzZcdTdhMzlcdTdhYjJcdTdhYjRcdTdhYjNcdTdiYjdcdTdiY2JcdTdi''@;'; put 'put ''YmVcdTdiYWNcdTdiY2VcdTdiYWZcdTdiYjlcdTdiY2FcdTdiYjVcdTdjYzVcdTdjYzhcdTdjY2NcdTdjY2JcdTdkZjdcdTdkZGJcdTdkZWFcdTdkZTdcdTdkZDdcdTdkZTFcdTdlMDNcdTdkZmFcdTdkZTZcdTdkZjZcdTdkZjFcdTdkZjBcdTdkZWVcdTdkZGZcdTdmNzZcdTdmYWNcdTdmYjBc''@;'; put 'put ''dTdmYWRcdTdmZWRcdTdmZWJcdTdmZWFcdTdmZWNcdTdmZTZcdTdmZThcdTgwNjRcdTgwNjdcdTgxYTNcdTgxOWZcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMzBdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIzMF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMzBdW2ddXT01ODg4MCtnLHlb''@;'; put 'put ''NTg4ODArZ109X1syMzBdW2ddKTtmb3IoX1syMzFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgxOWVcdTgxOTVcdTgxYTJcdTgxOTlcdTgxOTdcdTgyMTZcdTgyNGZcdTgyNTNcdTgyNTJcdTgyNTBcdTgyNGVcdTgyNTFcdTg1MjRc''@;'; put 'put ''dTg1M2JcdTg1MGZcdTg1MDBcdTg1MjlcdTg1MGVcdTg1MDlcdTg1MGRcdTg1MWZcdTg1MGFcdTg1MjdcdTg1MWNcdTg0ZmJcdTg1MmJcdTg0ZmFcdTg1MDhcdTg1MGNcdTg0ZjRcdTg1MmFcdTg0ZjJcdTg1MTVcdTg0ZjdcdTg0ZWJcdTg0ZjNcdTg0ZmNcdTg1MTJcdTg0ZWFcdTg0ZTlcdTg1''@;'; put 'put ''MTZcdTg0ZmVcdTg1MjhcdTg1MWRcdTg1MmVcdTg1MDJcdTg0ZmRcdTg1MWVcdTg0ZjZcdTg1MzFcdTg1MjZcdTg0ZTdcdTg0ZThcdTg0ZjBcdTg0ZWZcdTg0ZjlcdTg1MThcdTg1MjBcdTg1MzBcdTg1MGJcdTg1MTlcdTg1MmZcdTg2NjJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdTg3NTZcdTg3NjNcdTg3NjRcdTg3NzdcdTg3ZTFcdTg3NzNcdTg3NThcdTg3NTRcdTg3NWJcdTg3NTJcdTg3NjFcdTg3NWFcdTg3NTFcdTg3NWVcdTg3NmRcdTg3NmFcdTg3NTBcdTg3NGVcdTg3NWZcdTg3NWRcdTg3NmZcdTg3NmNcdTg3N2FcdTg3NmVcdTg3NWNcdTg3NjVc''@;'; put 'put ''dTg3NGZcdTg3N2JcdTg3NzVcdTg3NjJcdTg3NjdcdTg3NjlcdTg4NWFcdTg5MDVcdTg5MGNcdTg5MTRcdTg5MGJcdTg5MTdcdTg5MThcdTg5MTlcdTg5MDZcdTg5MTZcdTg5MTFcdTg5MGVcdTg5MDlcdTg5YTJcdTg5YTRcdTg5YTNcdTg5ZWRcdTg5ZjBcdTg5ZWNcdThhY2ZcdThhYzZcdThh''@;'; put 'put ''YjhcdThhZDNcdThhZDFcdThhZDRcdThhZDVcdThhYmJcdThhZDdcdThhYmVcdThhYzBcdThhYzVcdThhZDhcdThhYzNcdThhYmFcdThhYmRcdThhZDlcdThjM2VcdThjNGRcdThjOGZcdThjZTVcdThjZGZcdThjZDlcdThjZThcdThjZGFcdThjZGRcdThjZTdcdThkYTBcdThkOWNcdThkYTFc''@;'; put 'put ''dThkOWJcdThlMjBcdThlMjNcdThlMjVcdThlMjRcdThlMmVcdThlMTVcdThlMWJcdThlMTZcdThlMTFcdThlMTlcdThlMjZcdThlMjdcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMzFdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIzMV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMzFdW2dd''@;'; put 'put ''XT01OTEzNitnLHlbNTkxMzYrZ109X1syMzFdW2ddKTtmb3IoX1syMzJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThlMTRcdThlMTJcdThlMThcdThlMTNcdThlMWNcdThlMTdcdThlMWFcdThmMmNcdThmMjRcdThmMThcdThmMWFc''@;'; put 'put ''dThmMjBcdThmMjNcdThmMTZcdThmMTdcdTkwNzNcdTkwNzBcdTkwNmZcdTkwNjdcdTkwNmJcdTkxMmZcdTkxMmJcdTkxMjlcdTkxMmFcdTkxMzJcdTkxMjZcdTkxMmVcdTkxODVcdTkxODZcdTkxOGFcdTkxODFcdTkxODJcdTkxODRcdTkxODBcdTkyZDBcdTkyYzNcdTkyYzRcdTkyYzBcdTky''@;'; put 'put ''ZDlcdTkyYjZcdTkyY2ZcdTkyZjFcdTkyZGZcdTkyZDhcdTkyZTlcdTkyZDdcdTkyZGRcdTkyY2NcdTkyZWZcdTkyYzJcdTkyZThcdTkyY2FcdTkyYzhcdTkyY2VcdTkyZTZcdTkyY2RcdTkyZDVcdTkyYzlcdTkyZTBcdTkyZGVcdTkyZTdcdTkyZDFcdTkyZDNcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkyYjVcdTkyZTFcdTkyYzZcdTkyYjRcdTk1N2NcdTk1YWNcdTk1YWJcdTk1YWVcdTk1YjBcdTk2YTRcdTk2YTJcdTk2ZDNcdTk3MDVcdTk3MDhcdTk3MDJcdTk3NWFcdTk3OGFcdTk3OGVcdTk3ODhcdTk3ZDBcdTk3Y2ZcdTk4MWVcdTk4MWRcdTk4MjZc''@;'; put 'put ''dTk4MjlcdTk4MjhcdTk4MjBcdTk4MWJcdTk4MjdcdTk4YjJcdTk5MDhcdTk4ZmFcdTk5MTFcdTk5MTRcdTk5MTZcdTk5MTdcdTk5MTVcdTk5ZGNcdTk5Y2RcdTk5Y2ZcdTk5ZDNcdTk5ZDRcdTk5Y2VcdTk5YzlcdTk5ZDZcdTk5ZDhcdTk5Y2JcdTk5ZDdcdTk5Y2NcdTlhYjNcdTlhZWNcdTlh''@;'; put 'put ''ZWJcdTlhZjNcdTlhZjJcdTlhZjFcdTliNDZcdTliNDNcdTliNjdcdTliNzRcdTliNzFcdTliNjZcdTliNzZcdTliNzVcdTliNzBcdTliNjhcdTliNjRcdTliNmNcdTljZmNcdTljZmFcdTljZmRcdTljZmZcdTljZjdcdTlkMDdcdTlkMDBcdTljZjlcdTljZmJcdTlkMDhcdTlkMDVcdTlkMDRc''@;'; put 'put ''dTllODNcdTllZDNcdTlmMGZcdTlmMTBcdTUxMWNcdTUxMTNcdTUxMTdcdTUxMWFcdTUxMTFcdTUxZGVcdTUzMzRcdTUzZTFcdTU2NzBcdTU2NjBcdTU2NmVcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMzJdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIzMl1bZ10uY2hhckNvZGVBdCgwKSYm''@;'; put 'put ''KElbX1syMzJdW2ddXT01OTM5MitnLHlbNTkzOTIrZ109X1syMzJdW2ddKTtmb3IoX1syMzNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU2NzNcdTU2NjZcdTU2NjNcdTU2NmRcdTU2NzJcdTU2NWVcdTU2NzdcdTU3MWNcdTU3MWJc''@;'; put 'put ''dTU4YzhcdTU4YmRcdTU4YzlcdTU4YmZcdTU4YmFcdTU4YzJcdTU4YmNcdTU4YzZcdTViMTdcdTViMTlcdTViMWJcdTViMjFcdTViMTRcdTViMTNcdTViMTBcdTViMTZcdTViMjhcdTViMWFcdTViMjBcdTViMWVcdTViZWZcdTVkYWNcdTVkYjFcdTVkYTlcdTVkYTdcdTVkYjVcdTVkYjBcdTVk''@;'; put 'put ''YWVcdTVkYWFcdTVkYThcdTVkYjJcdTVkYWRcdTVkYWZcdTVkYjRcdTVlNjdcdTVlNjhcdTVlNjZcdTVlNmZcdTVlZTlcdTVlZTdcdTVlZTZcdTVlZThcdTVlZTVcdTVmNGJcdTVmYmNcdTYxOWRcdTYxYThcdTYxOTZcdTYxYzVcdTYxYjRcdTYxYzZcdTYxYzFcdTYxY2NcdTYxYmFcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYxYmZcdTYxYjhcdTYxOGNcdTY0ZDdcdTY0ZDZcdTY0ZDBcdTY0Y2ZcdTY0YzlcdTY0YmRcdTY0ODlcdTY0YzNcdTY0ZGJcdTY0ZjNcdTY0ZDlcdTY1MzNcdTY1N2ZcdTY1N2NcdTY1YTJcdTY2YzhcdTY2YmVcdTY2YzBcdTY2Y2Fc''@;'; put 'put ''dTY2Y2JcdTY2Y2ZcdTY2YmRcdTY2YmJcdTY2YmFcdTY2Y2NcdTY3MjNcdTZhMzRcdTZhNjZcdTZhNDlcdTZhNjdcdTZhMzJcdTZhNjhcdTZhM2VcdTZhNWRcdTZhNmRcdTZhNzZcdTZhNWJcdTZhNTFcdTZhMjhcdTZhNWFcdTZhM2JcdTZhM2ZcdTZhNDFcdTZhNmFcdTZhNjRcdTZhNTBcdTZh''@;'; put 'put ''NGZcdTZhNTRcdTZhNmZcdTZhNjlcdTZhNjBcdTZhM2NcdTZhNWVcdTZhNTZcdTZhNTVcdTZhNGRcdTZhNGVcdTZhNDZcdTZiNTVcdTZiNTRcdTZiNTZcdTZiYTdcdTZiYWFcdTZiYWJcdTZiYzhcdTZiYzdcdTZjMDRcdTZjMDNcdTZjMDZcdTZmYWRcdTZmY2JcdTZmYTNcdTZmYzdcdTZmYmNc''@;'; put 'put ''dTZmY2VcdTZmYzhcdTZmNWVcdTZmYzRcdTZmYmRcdTZmOWVcdTZmY2FcdTZmYThcdTcwMDRcdTZmYTVcdTZmYWVcdTZmYmFcdTZmYWNcdTZmYWFcdTZmY2ZcdTZmYmZcdTZmYjhcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMzNdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIzM11bZ10uY2hh''@;'; put 'put ''ckNvZGVBdCgwKSYmKElbX1syMzNdW2ddXT01OTY0OCtnLHlbNTk2NDgrZ109X1syMzNdW2ddKTtmb3IoX1syMzRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZmYTJcdTZmYzlcdTZmYWJcdTZmY2RcdTZmYWZcdTZmYjJcdTZmYjBc''@;'; put 'put ''dTcxYzVcdTcxYzJcdTcxYmZcdTcxYjhcdTcxZDZcdTcxYzBcdTcxYzFcdTcxY2JcdTcxZDRcdTcxY2FcdTcxYzdcdTcxY2ZcdTcxYmRcdTcxZDhcdTcxYmNcdTcxYzZcdTcxZGFcdTcxZGJcdTcyOWRcdTcyOWVcdTczNjlcdTczNjZcdTczNjdcdTczNmNcdTczNjVcdTczNmJcdTczNmFcdTc0''@;'; put 'put ''N2ZcdTc0OWFcdTc0YTBcdTc0OTRcdTc0OTJcdTc0OTVcdTc0YTFcdTc1MGJcdTc1ODBcdTc2MmZcdTc2MmRcdTc2MzFcdTc2M2RcdTc2MzNcdTc2M2NcdTc2MzVcdTc2MzJcdTc2MzBcdTc2YmJcdTc2ZTZcdTc3OWFcdTc3OWRcdTc3YTFcdTc3OWNcdTc3OWJcdTc3YTJcdTc3YTNcdTc3OTVc''@;'; put 'put ''dTc3OTlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc3OTdcdTc4ZGRcdTc4ZTlcdTc4ZTVcdTc4ZWFcdTc4ZGVcdTc4ZTNcdTc4ZGJcdTc4ZTFcdTc4ZTJcdTc4ZWRcdTc4ZGZcdTc4ZTBcdTc5YTRcdTdhNDRcdTdhNDhcdTdhNDdcdTdhYjZcdTdhYjhcdTdhYjVc''@;'; put 'put ''dTdhYjFcdTdhYjdcdTdiZGVcdTdiZTNcdTdiZTdcdTdiZGRcdTdiZDVcdTdiZTVcdTdiZGFcdTdiZThcdTdiZjlcdTdiZDRcdTdiZWFcdTdiZTJcdTdiZGNcdTdiZWJcdTdiZDhcdTdiZGZcdTdjZDJcdTdjZDRcdTdjZDdcdTdjZDBcdTdjZDFcdTdlMTJcdTdlMjFcdTdlMTdcdTdlMGNcdTdl''@;'; put 'put ''MWZcdTdlMjBcdTdlMTNcdTdlMGVcdTdlMWNcdTdlMTVcdTdlMWFcdTdlMjJcdTdlMGJcdTdlMGZcdTdlMTZcdTdlMGRcdTdlMTRcdTdlMjVcdTdlMjRcdTdmNDNcdTdmN2JcdTdmN2NcdTdmN2FcdTdmYjFcdTdmZWZcdTgwMmFcdTgwMjlcdTgwNmNcdTgxYjFcdTgxYTZcdTgxYWVcdTgxYjlc''@;'; put 'put ''dTgxYjVcdTgxYWJcdTgxYjBcdTgxYWNcdTgxYjRcdTgxYjJcdTgxYjdcdTgxYTdcdTgxZjJcdTgyNTVcdTgyNTZcdTgyNTdcdTg1NTZcdTg1NDVcdTg1NmJcdTg1NGRcdTg1NTNcdTg1NjFcdTg1NThcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMzRdLmxlbmd0aDsrK2cpNjU1MzMhPT1f''@;'; put 'put ''WzIzNF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMzRdW2ddXT01OTkwNCtnLHlbNTk5MDQrZ109X1syMzRdW2ddKTtmb3IoX1syMzVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg1NDBcdTg1NDZcdTg1NjRcdTg1NDFcdTg1NjJc''@;'; put 'put ''dTg1NDRcdTg1NTFcdTg1NDdcdTg1NjNcdTg1M2VcdTg1NWJcdTg1NzFcdTg1NGVcdTg1NmVcdTg1NzVcdTg1NTVcdTg1NjdcdTg1NjBcdTg1OGNcdTg1NjZcdTg1NWRcdTg1NTRcdTg1NjVcdTg1NmNcdTg2NjNcdTg2NjVcdTg2NjRcdTg3OWJcdTg3OGZcdTg3OTdcdTg3OTNcdTg3OTJcdTg3''@;'; put 'put ''ODhcdTg3ODFcdTg3OTZcdTg3OThcdTg3NzlcdTg3ODdcdTg3YTNcdTg3ODVcdTg3OTBcdTg3OTFcdTg3OWRcdTg3ODRcdTg3OTRcdTg3OWNcdTg3OWFcdTg3ODlcdTg5MWVcdTg5MjZcdTg5MzBcdTg5MmRcdTg5MmVcdTg5MjdcdTg5MzFcdTg5MjJcdTg5MjlcdTg5MjNcdTg5MmZcdTg5MmNc''@;'; put 'put ''dTg5MWZcdTg5ZjFcdThhZTBcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThhZTJcdThhZjJcdThhZjRcdThhZjVcdThhZGRcdThiMTRcdThhZTRcdThhZGZcdThhZjBcdThhYzhcdThhZGVcdThhZTFcdThhZThcdThhZmZcdThhZWZcdThhZmJcdThjOTFcdThjOTJc''@;'; put 'put ''dThjOTBcdThjZjVcdThjZWVcdThjZjFcdThjZjBcdThjZjNcdThkNmNcdThkNmVcdThkYTVcdThkYTdcdThlMzNcdThlM2VcdThlMzhcdThlNDBcdThlNDVcdThlMzZcdThlM2NcdThlM2RcdThlNDFcdThlMzBcdThlM2ZcdThlYmRcdThmMzZcdThmMmVcdThmMzVcdThmMzJcdThmMzlcdThm''@;'; put 'put ''MzdcdThmMzRcdTkwNzZcdTkwNzlcdTkwN2JcdTkwODZcdTkwZmFcdTkxMzNcdTkxMzVcdTkxMzZcdTkxOTNcdTkxOTBcdTkxOTFcdTkxOGRcdTkxOGZcdTkzMjdcdTkzMWVcdTkzMDhcdTkzMWZcdTkzMDZcdTkzMGZcdTkzN2FcdTkzMzhcdTkzM2NcdTkzMWJcdTkzMjNcdTkzMTJcdTkzMDFc''@;'; put 'put ''dTkzNDZcdTkzMmRcdTkzMGVcdTkzMGRcdTkyY2JcdTkzMWRcdTkyZmFcdTkzMjVcdTkzMTNcdTkyZjlcdTkyZjdcdTkzMzRcdTkzMDJcdTkzMjRcdTkyZmZcdTkzMjlcdTkzMzlcdTkzMzVcdTkzMmFcdTkzMTRcdTkzMGNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMzVdLmxlbmd0aDsr''@;'; put 'put ''K2cpNjU1MzMhPT1fWzIzNV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMzVdW2ddXT02MDE2MCtnLHlbNjAxNjArZ109X1syMzVdW2ddKTtmb3IoX1syMzZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkzMGJcdTkyZmVcdTkzMDlc''@;'; put 'put ''dTkzMDBcdTkyZmJcdTkzMTZcdTk1YmNcdTk1Y2RcdTk1YmVcdTk1YjlcdTk1YmFcdTk1YjZcdTk1YmZcdTk1YjVcdTk1YmRcdTk2YTlcdTk2ZDRcdTk3MGJcdTk3MTJcdTk3MTBcdTk3OTlcdTk3OTdcdTk3OTRcdTk3ZjBcdTk3ZjhcdTk4MzVcdTk4MmZcdTk4MzJcdTk5MjRcdTk5MWZcdTk5''@;'; put 'put ''MjdcdTk5MjlcdTk5OWVcdTk5ZWVcdTk5ZWNcdTk5ZTVcdTk5ZTRcdTk5ZjBcdTk5ZTNcdTk5ZWFcdTk5ZTlcdTk5ZTdcdTlhYjlcdTlhYmZcdTlhYjRcdTlhYmJcdTlhZjZcdTlhZmFcdTlhZjlcdTlhZjdcdTliMzNcdTliODBcdTliODVcdTliODdcdTliN2NcdTliN2VcdTliN2JcdTliODJc''@;'; put 'put ''dTliOTNcdTliOTJcdTliOTBcdTliN2FcdTliOTVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTliN2RcdTliODhcdTlkMjVcdTlkMTdcdTlkMjBcdTlkMWVcdTlkMTRcdTlkMjlcdTlkMWRcdTlkMThcdTlkMjJcdTlkMTBcdTlkMTlcdTlkMWZcdTllODhcdTllODZc''@;'; put 'put ''dTllODdcdTllYWVcdTllYWRcdTllZDVcdTllZDZcdTllZmFcdTlmMTJcdTlmM2RcdTUxMjZcdTUxMjVcdTUxMjJcdTUxMjRcdTUxMjBcdTUxMjlcdTUyZjRcdTU2OTNcdTU2OGNcdTU2OGRcdTU2ODZcdTU2ODRcdTU2ODNcdTU2N2VcdTU2ODJcdTU2N2ZcdTU2ODFcdTU4ZDZcdTU4ZDRcdTU4''@;'; put 'put ''Y2ZcdTU4ZDJcdTViMmRcdTViMjVcdTViMzJcdTViMjNcdTViMmNcdTViMjdcdTViMjZcdTViMmZcdTViMmVcdTViN2JcdTViZjFcdTViZjJcdTVkYjdcdTVlNmNcdTVlNmFcdTVmYmVcdTVmYmJcdTYxYzNcdTYxYjVcdTYxYmNcdTYxZTdcdTYxZTBcdTYxZTVcdTYxZTRcdTYxZThcdTYxZGVc''@;'; put 'put ''dTY0ZWZcdTY0ZTlcdTY0ZTNcdTY0ZWJcdTY0ZTRcdTY0ZThcdTY1ODFcdTY1ODBcdTY1YjZcdTY1ZGFcdTY2ZDJcdTZhOGRcdTZhOTZcdTZhODFcdTZhYTVcdTZhODlcdTZhOWZcdTZhOWJcdTZhYTFcdTZhOWVcdTZhODdcdTZhOTNcdTZhOGVcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sy''@;'; put 'put ''MzZdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIzNl1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMzZdW2ddXT02MDQxNitnLHlbNjA0MTYrZ109X1syMzZdW2ddKTtmb3IoX1syMzddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZhOTVc''@;'; put 'put ''dTZhODNcdTZhYThcdTZhYTRcdTZhOTFcdTZhN2ZcdTZhYTZcdTZhOWFcdTZhODVcdTZhOGNcdTZhOTJcdTZiNWJcdTZiYWRcdTZjMDlcdTZmY2NcdTZmYTlcdTZmZjRcdTZmZDRcdTZmZTNcdTZmZGNcdTZmZWRcdTZmZTdcdTZmZTZcdTZmZGVcdTZmZjJcdTZmZGRcdTZmZTJcdTZmZThcdTcx''@;'; put 'put ''ZTFcdTcxZjFcdTcxZThcdTcxZjJcdTcxZTRcdTcxZjBcdTcxZTJcdTczNzNcdTczNmVcdTczNmZcdTc0OTdcdTc0YjJcdTc0YWJcdTc0OTBcdTc0YWFcdTc0YWRcdTc0YjFcdTc0YTVcdTc0YWZcdTc1MTBcdTc1MTFcdTc1MTJcdTc1MGZcdTc1ODRcdTc2NDNcdTc2NDhcdTc2NDlcdTc2NDdc''@;'; put 'put ''dTc2YTRcdTc2ZTlcdTc3YjVcdTc3YWJcdTc3YjJcdTc3YjdcdTc3YjZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc3YjRcdTc3YjFcdTc3YThcdTc3ZjBcdTc4ZjNcdTc4ZmRcdTc5MDJcdTc4ZmJcdTc4ZmNcdTc4ZjJcdTc5MDVcdTc4ZjlcdTc4ZmVcdTc5MDRc''@;'; put 'put ''dTc5YWJcdTc5YThcdTdhNWNcdTdhNWJcdTdhNTZcdTdhNThcdTdhNTRcdTdhNWFcdTdhYmVcdTdhYzBcdTdhYzFcdTdjMDVcdTdjMGZcdTdiZjJcdTdjMDBcdTdiZmZcdTdiZmJcdTdjMGVcdTdiZjRcdTdjMGJcdTdiZjNcdTdjMDJcdTdjMDlcdTdjMDNcdTdjMDFcdTdiZjhcdTdiZmRcdTdj''@;'; put 'put ''MDZcdTdiZjBcdTdiZjFcdTdjMTBcdTdjMGFcdTdjZThcdTdlMmRcdTdlM2NcdTdlNDJcdTdlMzNcdTk4NDhcdTdlMzhcdTdlMmFcdTdlNDlcdTdlNDBcdTdlNDdcdTdlMjlcdTdlNGNcdTdlMzBcdTdlM2JcdTdlMzZcdTdlNDRcdTdlM2FcdTdmNDVcdTdmN2ZcdTdmN2VcdTdmN2RcdTdmZjRc''@;'; put 'put ''dTdmZjJcdTgwMmNcdTgxYmJcdTgxYzRcdTgxY2NcdTgxY2FcdTgxYzVcdTgxYzdcdTgxYmNcdTgxZTlcdTgyNWJcdTgyNWFcdTgyNWNcdTg1ODNcdTg1ODBcdTg1OGZcdTg1YTdcdTg1OTVcdTg1YTBcdTg1OGJcdTg1YTNcdTg1N2JcdTg1YTRcdTg1OWFcdTg1OWVcdWZmZmQiLnNwbGl0KCIi''@;'; put 'put ''KSxnPTA7ZyE9X1syMzddLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIzN11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMzddW2ddXT02MDY3MitnLHlbNjA2NzIrZ109X1syMzddW2ddKTtmb3IoX1syMzhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdTg1NzdcdTg1N2NcdTg1ODlcdTg1YTFcdTg1N2FcdTg1NzhcdTg1NTdcdTg1OGVcdTg1OTZcdTg1ODZcdTg1OGRcdTg1OTlcdTg1OWRcdTg1ODFcdTg1YTJcdTg1ODJcdTg1ODhcdTg1ODVcdTg1NzlcdTg1NzZcdTg1OThcdTg1OTBcdTg1OWZcdTg2NjhcdTg3YmVcdTg3YWFcdTg3''@;'; put 'put ''YWRcdTg3YzVcdTg3YjBcdTg3YWNcdTg3YjlcdTg3YjVcdTg3YmNcdTg3YWVcdTg3YzlcdTg3YzNcdTg3YzJcdTg3Y2NcdTg3YjdcdTg3YWZcdTg3YzRcdTg3Y2FcdTg3YjRcdTg3YjZcdTg3YmZcdTg3YjhcdTg3YmRcdTg3ZGVcdTg3YjJcdTg5MzVcdTg5MzNcdTg5M2NcdTg5M2VcdTg5NDFc''@;'; put 'put ''dTg5NTJcdTg5MzdcdTg5NDJcdTg5YWRcdTg5YWZcdTg5YWVcdTg5ZjJcdTg5ZjNcdThiMWVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThiMThcdThiMTZcdThiMTFcdThiMDVcdThiMGJcdThiMjJcdThiMGZcdThiMTJcdThiMTVcdThiMDdcdThiMGRcdThiMDhc''@;'; put 'put ''dThiMDZcdThiMWNcdThiMTNcdThiMWFcdThjNGZcdThjNzBcdThjNzJcdThjNzFcdThjNmZcdThjOTVcdThjOTRcdThjZjlcdThkNmZcdThlNGVcdThlNGRcdThlNTNcdThlNTBcdThlNGNcdThlNDdcdThmNDNcdThmNDBcdTkwODVcdTkwN2VcdTkxMzhcdTkxOWFcdTkxYTJcdTkxOWJcdTkx''@;'; put 'put ''OTlcdTkxOWZcdTkxYTFcdTkxOWRcdTkxYTBcdTkzYTFcdTkzODNcdTkzYWZcdTkzNjRcdTkzNTZcdTkzNDdcdTkzN2NcdTkzNThcdTkzNWNcdTkzNzZcdTkzNDlcdTkzNTBcdTkzNTFcdTkzNjBcdTkzNmRcdTkzOGZcdTkzNGNcdTkzNmFcdTkzNzlcdTkzNTdcdTkzNTVcdTkzNTJcdTkzNGZc''@;'; put 'put ''dTkzNzFcdTkzNzdcdTkzN2JcdTkzNjFcdTkzNWVcdTkzNjNcdTkzNjdcdTkzODBcdTkzNGVcdTkzNTlcdTk1YzdcdTk1YzBcdTk1YzlcdTk1YzNcdTk1YzVcdTk1YjdcdTk2YWVcdTk2YjBcdTk2YWNcdTk3MjBcdTk3MWZcdTk3MThcdTk3MWRcdTk3MTlcdTk3OWFcdTk3YTFcdTk3OWNcdWZm''@;'; put 'put ''ZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMzhdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIzOF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMzhdW2ddXT02MDkyOCtnLHlbNjA5MjgrZ109X1syMzhdW2ddKTtmb3IoX1syMzldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdTk3OWVcdTk3OWRcdTk3ZDVcdTk3ZDRcdTk3ZjFcdTk4NDFcdTk4NDRcdTk4NGFcdTk4NDlcdTk4NDVcdTk4NDNcdTk5MjVcdTk5MmJcdTk5MmNcdTk5MmFcdTk5MzNcdTk5MzJcdTk5MmZcdTk5MmRcdTk5MzFcdTk5MzBcdTk5OThcdTk5YTNcdTk5YTFcdTlh''@;'; put 'put ''MDJcdTk5ZmFcdTk5ZjRcdTk5ZjdcdTk5ZjlcdTk5ZjhcdTk5ZjZcdTk5ZmJcdTk5ZmRcdTk5ZmVcdTk5ZmNcdTlhMDNcdTlhYmVcdTlhZmVcdTlhZmRcdTliMDFcdTlhZmNcdTliNDhcdTliOWFcdTliYThcdTliOWVcdTliOWJcdTliYTZcdTliYTFcdTliYTVcdTliYTRcdTliODZcdTliYTJc''@;'; put 'put ''dTliYTBcdTliYWZcdTlkMzNcdTlkNDFcdTlkNjdcdTlkMzZcdTlkMmVcdTlkMmZcdTlkMzFcdTlkMzhcdTlkMzBcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTlkNDVcdTlkNDJcdTlkNDNcdTlkM2VcdTlkMzdcdTlkNDBcdTlkM2RcdTdmZjVcdTlkMmRcdTllOGFc''@;'; put 'put ''dTllODlcdTllOGRcdTllYjBcdTllYzhcdTllZGFcdTllZmJcdTllZmZcdTlmMjRcdTlmMjNcdTlmMjJcdTlmNTRcdTlmYTBcdTUxMzFcdTUxMmRcdTUxMmVcdTU2OThcdTU2OWNcdTU2OTdcdTU2OWFcdTU2OWRcdTU2OTlcdTU5NzBcdTViM2NcdTVjNjlcdTVjNmFcdTVkYzBcdTVlNmRcdTVl''@;'; put 'put ''NmVcdTYxZDhcdTYxZGZcdTYxZWRcdTYxZWVcdTYxZjFcdTYxZWFcdTYxZjBcdTYxZWJcdTYxZDZcdTYxZTlcdTY0ZmZcdTY1MDRcdTY0ZmRcdTY0ZjhcdTY1MDFcdTY1MDNcdTY0ZmNcdTY1OTRcdTY1ZGJcdTY2ZGFcdTY2ZGJcdTY2ZDhcdTZhYzVcdTZhYjlcdTZhYmRcdTZhZTFcdTZhYzZc''@;'; put 'put ''dTZhYmFcdTZhYjZcdTZhYjdcdTZhYzdcdTZhYjRcdTZhYWRcdTZiNWVcdTZiYzlcdTZjMGJcdTcwMDdcdTcwMGNcdTcwMGRcdTcwMDFcdTcwMDVcdTcwMTRcdTcwMGVcdTZmZmZcdTcwMDBcdTZmZmJcdTcwMjZcdTZmZmNcdTZmZjdcdTcwMGFcdTcyMDFcdTcxZmZcdTcxZjlcdTcyMDNcdTcx''@;'; put 'put ''ZmRcdTczNzZcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMzldLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIzOV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMzldW2ddXT02MTE4NCtnLHlbNjExODQrZ109X1syMzldW2ddKTtmb3IoX1syNDBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc0YjhcdTc0YzBcdTc0YjVcdTc0YzFcdTc0YmVcdTc0YjZcdTc0YmJcdTc0YzJcdTc1MTRcdTc1MTNcdTc2NWNcdTc2NjRcdTc2NTlcdTc2NTBcdTc2NTNcdTc2NTdcdTc2NWFcdTc2YTZcdTc2YmRcdTc2ZWNcdTc3YzJcdTc3YmFcdTc4''@;'; put 'put ''ZmZcdTc5MGNcdTc5MTNcdTc5MTRcdTc5MDlcdTc5MTBcdTc5MTJcdTc5MTFcdTc5YWRcdTc5YWNcdTdhNWZcdTdjMWNcdTdjMjlcdTdjMTlcdTdjMjBcdTdjMWZcdTdjMmRcdTdjMWRcdTdjMjZcdTdjMjhcdTdjMjJcdTdjMjVcdTdjMzBcdTdlNWNcdTdlNTBcdTdlNTZcdTdlNjNcdTdlNThc''@;'; put 'put ''dTdlNjJcdTdlNWZcdTdlNTFcdTdlNjBcdTdlNTdcdTdlNTNcdTdmYjVcdTdmYjNcdTdmZjdcdTdmZjhcdTgwNzVcdTgxZDFcdTgxZDJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgxZDBcdTgyNWZcdTgyNWVcdTg1YjRcdTg1YzZcdTg1YzBcdTg1YzNcdTg1YzJc''@;'; put 'put ''dTg1YjNcdTg1YjVcdTg1YmRcdTg1YzdcdTg1YzRcdTg1YmZcdTg1Y2JcdTg1Y2VcdTg1YzhcdTg1YzVcdTg1YjFcdTg1YjZcdTg1ZDJcdTg2MjRcdTg1YjhcdTg1YjdcdTg1YmVcdTg2NjlcdTg3ZTdcdTg3ZTZcdTg3ZTJcdTg3ZGJcdTg3ZWJcdTg3ZWFcdTg3ZTVcdTg3ZGZcdTg3ZjNcdTg3''@;'; put 'put ''ZTRcdTg3ZDRcdTg3ZGNcdTg3ZDNcdTg3ZWRcdTg3ZDhcdTg3ZTNcdTg3YTRcdTg3ZDdcdTg3ZDlcdTg4MDFcdTg3ZjRcdTg3ZThcdTg3ZGRcdTg5NTNcdTg5NGJcdTg5NGZcdTg5NGNcdTg5NDZcdTg5NTBcdTg5NTFcdTg5NDlcdThiMmFcdThiMjdcdThiMjNcdThiMzNcdThiMzBcdThiMzVc''@;'; put 'put ''dThiNDdcdThiMmZcdThiM2NcdThiM2VcdThiMzFcdThiMjVcdThiMzdcdThiMjZcdThiMzZcdThiMmVcdThiMjRcdThiM2JcdThiM2RcdThiM2FcdThjNDJcdThjNzVcdThjOTlcdThjOThcdThjOTdcdThjZmVcdThkMDRcdThkMDJcdThkMDBcdThlNWNcdThlNjJcdThlNjBcdThlNTdcdThl''@;'; put 'put ''NTZcdThlNWVcdThlNjVcdThlNjdcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syNDBdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzI0MF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syNDBdW2ddXT02MTQ0MCtnLHlbNjE0NDArZ109X1syNDBdW2ddKTtmb3IoX1syNDFdPSJcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThlNWJcdThlNWFcdThlNjFcdThlNWRcdThlNjlcdThlNTRcdThmNDZcdThmNDdcdThmNDhcdThmNGJcdTkxMjhcdTkxM2FcdTkxM2JcdTkxM2VcdTkxYThcdTkxYTVcdTkxYTdcdTkxYWZcdTkxYWFcdTkzYjVcdTkz''@;'; put 'put ''OGNcdTkzOTJcdTkzYjdcdTkzOWJcdTkzOWRcdTkzODlcdTkzYTdcdTkzOGVcdTkzYWFcdTkzOWVcdTkzYTZcdTkzOTVcdTkzODhcdTkzOTlcdTkzOWZcdTkzOGRcdTkzYjFcdTkzOTFcdTkzYjJcdTkzYTRcdTkzYThcdTkzYjRcdTkzYTNcdTkzYTVcdTk1ZDJcdTk1ZDNcdTk1ZDFcdTk2YjNc''@;'; put 'put ''dTk2ZDdcdTk2ZGFcdTVkYzJcdTk2ZGZcdTk2ZDhcdTk2ZGRcdTk3MjNcdTk3MjJcdTk3MjVcdTk3YWNcdTk3YWVcdTk3YThcdTk3YWJcdTk3YTRcdTk3YWFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk3YTJcdTk3YTVcdTk3ZDdcdTk3ZDlcdTk3ZDZcdTk3ZDhc''@;'; put 'put ''dTk3ZmFcdTk4NTBcdTk4NTFcdTk4NTJcdTk4YjhcdTk5NDFcdTk5M2NcdTk5M2FcdTlhMGZcdTlhMGJcdTlhMDlcdTlhMGRcdTlhMDRcdTlhMTFcdTlhMGFcdTlhMDVcdTlhMDdcdTlhMDZcdTlhYzBcdTlhZGNcdTliMDhcdTliMDRcdTliMDVcdTliMjlcdTliMzVcdTliNGFcdTliNGNcdTli''@;'; put 'put ''NGJcdTliYzdcdTliYzZcdTliYzNcdTliYmZcdTliYzFcdTliYjVcdTliYjhcdTliZDNcdTliYjZcdTliYzRcdTliYjlcdTliYmRcdTlkNWNcdTlkNTNcdTlkNGZcdTlkNGFcdTlkNWJcdTlkNGJcdTlkNTlcdTlkNTZcdTlkNGNcdTlkNTdcdTlkNTJcdTlkNTRcdTlkNWZcdTlkNThcdTlkNWFc''@;'; put 'put ''dTllOGVcdTllOGNcdTllZGZcdTlmMDFcdTlmMDBcdTlmMTZcdTlmMjVcdTlmMmJcdTlmMmFcdTlmMjlcdTlmMjhcdTlmNGNcdTlmNTVcdTUxMzRcdTUxMzVcdTUyOTZcdTUyZjdcdTUzYjRcdTU2YWJcdTU2YWRcdTU2YTZcdTU2YTdcdTU2YWFcdTU2YWNcdTU4ZGFcdTU4ZGRcdTU4ZGJcdTU5''@;'; put 'put ''MTJcdTViM2RcdTViM2VcdTViM2ZcdTVkYzNcdTVlNzBcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syNDFdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzI0MV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syNDFdW2ddXT02MTY5NitnLHlbNjE2OTYrZ109X1syNDFdW2ddKTtmb3IoX1syNDJdPSJc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVmYmZcdTYxZmJcdTY1MDdcdTY1MTBcdTY1MGRcdTY1MDlcdTY1MGNcdTY1MGVcdTY1ODRcdTY1ZGVcdTY1ZGRcdTY2ZGVcdTZhZTdcdTZhZTBcdTZhY2NcdTZhZDFcdTZhZDlcdTZhY2JcdTZh''@;'; put 'put ''ZGZcdTZhZGNcdTZhZDBcdTZhZWJcdTZhY2ZcdTZhY2RcdTZhZGVcdTZiNjBcdTZiYjBcdTZjMGNcdTcwMTlcdTcwMjdcdTcwMjBcdTcwMTZcdTcwMmJcdTcwMjFcdTcwMjJcdTcwMjNcdTcwMjlcdTcwMTdcdTcwMjRcdTcwMWNcdTcwMmFcdTcyMGNcdTcyMGFcdTcyMDdcdTcyMDJcdTcyMDVc''@;'; put 'put ''dTcyYTVcdTcyYTZcdTcyYTRcdTcyYTNcdTcyYTFcdTc0Y2JcdTc0YzVcdTc0YjdcdTc0YzNcdTc1MTZcdTc2NjBcdTc3YzlcdTc3Y2FcdTc3YzRcdTc3ZjFcdTc5MWRcdTc5MWJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc5MjFcdTc5MWNcdTc5MTdcdTc5MWVc''@;'; put 'put ''dTc5YjBcdTdhNjdcdTdhNjhcdTdjMzNcdTdjM2NcdTdjMzlcdTdjMmNcdTdjM2JcdTdjZWNcdTdjZWFcdTdlNzZcdTdlNzVcdTdlNzhcdTdlNzBcdTdlNzdcdTdlNmZcdTdlN2FcdTdlNzJcdTdlNzRcdTdlNjhcdTdmNGJcdTdmNGFcdTdmODNcdTdmODZcdTdmYjdcdTdmZmRcdTdmZmVcdTgw''@;'; put 'put ''NzhcdTgxZDdcdTgxZDVcdTgyNjRcdTgyNjFcdTgyNjNcdTg1ZWJcdTg1ZjFcdTg1ZWRcdTg1ZDlcdTg1ZTFcdTg1ZThcdTg1ZGFcdTg1ZDdcdTg1ZWNcdTg1ZjJcdTg1ZjhcdTg1ZDhcdTg1ZGZcdTg1ZTNcdTg1ZGNcdTg1ZDFcdTg1ZjBcdTg1ZTZcdTg1ZWZcdTg1ZGVcdTg1ZTJcdTg4MDBc''@;'; put 'put ''dTg3ZmFcdTg4MDNcdTg3ZjZcdTg3ZjdcdTg4MDlcdTg4MGNcdTg4MGJcdTg4MDZcdTg3ZmNcdTg4MDhcdTg3ZmZcdTg4MGFcdTg4MDJcdTg5NjJcdTg5NWFcdTg5NWJcdTg5NTdcdTg5NjFcdTg5NWNcdTg5NThcdTg5NWRcdTg5NTlcdTg5ODhcdTg5YjdcdTg5YjZcdTg5ZjZcdThiNTBcdThi''@;'; put 'put ''NDhcdThiNGFcdThiNDBcdThiNTNcdThiNTZcdThiNTRcdThiNGJcdThiNTVcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syNDJdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzI0Ml1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syNDJdW2ddXT02MTk1MitnLHlbNjE5NTIrZ109X1syNDJdW2ddKTtm''@;'; put 'put ''b3IoX1syNDNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThiNTFcdThiNDJcdThiNTJcdThiNTdcdThjNDNcdThjNzdcdThjNzZcdThjOWFcdThkMDZcdThkMDdcdThkMDlcdThkYWNcdThkYWFcdThkYWRcdThkYWJcdThlNmRcdThl''@;'; put 'put ''NzhcdThlNzNcdThlNmFcdThlNmZcdThlN2JcdThlYzJcdThmNTJcdThmNTFcdThmNGZcdThmNTBcdThmNTNcdThmYjRcdTkxNDBcdTkxM2ZcdTkxYjBcdTkxYWRcdTkzZGVcdTkzYzdcdTkzY2ZcdTkzYzJcdTkzZGFcdTkzZDBcdTkzZjlcdTkzZWNcdTkzY2NcdTkzZDlcdTkzYTlcdTkzZTZc''@;'; put 'put ''dTkzY2FcdTkzZDRcdTkzZWVcdTkzZTNcdTkzZDVcdTkzYzRcdTkzY2VcdTkzYzBcdTkzZDJcdTkzZTdcdTk1N2RcdTk1ZGFcdTk1ZGJcdTk2ZTFcdTk3MjlcdTk3MmJcdTk3MmNcdTk3MjhcdTk3MjZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk3YjNcdTk3Yjdc''@;'; put 'put ''dTk3YjZcdTk3ZGRcdTk3ZGVcdTk3ZGZcdTk4NWNcdTk4NTlcdTk4NWRcdTk4NTdcdTk4YmZcdTk4YmRcdTk4YmJcdTk4YmVcdTk5NDhcdTk5NDdcdTk5NDNcdTk5YTZcdTk5YTdcdTlhMWFcdTlhMTVcdTlhMjVcdTlhMWRcdTlhMjRcdTlhMWJcdTlhMjJcdTlhMjBcdTlhMjdcdTlhMjNcdTlh''@;'; put 'put ''MWVcdTlhMWNcdTlhMTRcdTlhYzJcdTliMGJcdTliMGFcdTliMGVcdTliMGNcdTliMzdcdTliZWFcdTliZWJcdTliZTBcdTliZGVcdTliZTRcdTliZTZcdTliZTJcdTliZjBcdTliZDRcdTliZDdcdTliZWNcdTliZGNcdTliZDlcdTliZTVcdTliZDVcdTliZTFcdTliZGFcdTlkNzdcdTlkODFc''@;'; put 'put ''dTlkOGFcdTlkODRcdTlkODhcdTlkNzFcdTlkODBcdTlkNzhcdTlkODZcdTlkOGJcdTlkOGNcdTlkN2RcdTlkNmJcdTlkNzRcdTlkNzVcdTlkNzBcdTlkNjlcdTlkODVcdTlkNzNcdTlkN2JcdTlkODJcdTlkNmZcdTlkNzlcdTlkN2ZcdTlkODdcdTlkNjhcdTllOTRcdTllOTFcdTllYzBcdTll''@;'; put 'put ''ZmNcdTlmMmRcdTlmNDBcdTlmNDFcdTlmNGRcdTlmNTZcdTlmNTdcdTlmNThcdTUzMzdcdTU2YjJcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syNDNdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzI0M11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syNDNdW2ddXT02MjIwOCtnLHlbNjIyMDgrZ109''@;'; put 'put ''X1syNDNdW2ddKTtmb3IoX1syNDRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU2YjVcdTU2YjNcdTU4ZTNcdTViNDVcdTVkYzZcdTVkYzdcdTVlZWVcdTVlZWZcdTVmYzBcdTVmYzFcdTYxZjlcdTY1MTdcdTY1MTZcdTY1MTVcdTY1''@;'; put 'put ''MTNcdTY1ZGZcdTY2ZThcdTY2ZTNcdTY2ZTRcdTZhZjNcdTZhZjBcdTZhZWFcdTZhZThcdTZhZjlcdTZhZjFcdTZhZWVcdTZhZWZcdTcwM2NcdTcwMzVcdTcwMmZcdTcwMzdcdTcwMzRcdTcwMzFcdTcwNDJcdTcwMzhcdTcwM2ZcdTcwM2FcdTcwMzlcdTcwNDBcdTcwM2JcdTcwMzNcdTcwNDFc''@;'; put 'put ''dTcyMTNcdTcyMTRcdTcyYThcdTczN2RcdTczN2NcdTc0YmFcdTc2YWJcdTc2YWFcdTc2YmVcdTc2ZWRcdTc3Y2NcdTc3Y2VcdTc3Y2ZcdTc3Y2RcdTc3ZjJcdTc5MjVcdTc5MjNcdTc5MjdcdTc5MjhcdTc5MjRcdTc5MjlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dTc5YjJcdTdhNmVcdTdhNmNcdTdhNmRcdTdhZjdcdTdjNDlcdTdjNDhcdTdjNGFcdTdjNDdcdTdjNDVcdTdjZWVcdTdlN2JcdTdlN2VcdTdlODFcdTdlODBcdTdmYmFcdTdmZmZcdTgwNzlcdTgxZGJcdTgxZDlcdTgyMGJcdTgyNjhcdTgyNjlcdTg2MjJcdTg1ZmZcdTg2MDFcdTg1ZmVcdTg2''@;'; put 'put ''MWJcdTg2MDBcdTg1ZjZcdTg2MDRcdTg2MDlcdTg2MDVcdTg2MGNcdTg1ZmRcdTg4MTlcdTg4MTBcdTg4MTFcdTg4MTdcdTg4MTNcdTg4MTZcdTg5NjNcdTg5NjZcdTg5YjlcdTg5ZjdcdThiNjBcdThiNmFcdThiNWRcdThiNjhcdThiNjNcdThiNjVcdThiNjdcdThiNmRcdThkYWVcdThlODZc''@;'; put 'put ''dThlODhcdThlODRcdThmNTlcdThmNTZcdThmNTdcdThmNTVcdThmNThcdThmNWFcdTkwOGRcdTkxNDNcdTkxNDFcdTkxYjdcdTkxYjVcdTkxYjJcdTkxYjNcdTk0MGJcdTk0MTNcdTkzZmJcdTk0MjBcdTk0MGZcdTk0MTRcdTkzZmVcdTk0MTVcdTk0MTBcdTk0MjhcdTk0MTlcdTk0MGRcdTkz''@;'; put 'put ''ZjVcdTk0MDBcdTkzZjdcdTk0MDdcdTk0MGVcdTk0MTZcdTk0MTJcdTkzZmFcdTk0MDlcdTkzZjhcdTk0MGFcdTkzZmZcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syNDRdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzI0NF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syNDRdW2ddXT02MjQ2NCtn''@;'; put 'put ''LHlbNjI0NjQrZ109X1syNDRdW2ddKTtmb3IoX1syNDVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkzZmNcdTk0MGNcdTkzZjZcdTk0MTFcdTk0MDZcdTk1ZGVcdTk1ZTBcdTk1ZGZcdTk3MmVcdTk3MmZcdTk3YjlcdTk3YmJcdTk3''@;'; put 'put ''ZmRcdTk3ZmVcdTk4NjBcdTk4NjJcdTk4NjNcdTk4NWZcdTk4YzFcdTk4YzJcdTk5NTBcdTk5NGVcdTk5NTlcdTk5NGNcdTk5NGJcdTk5NTNcdTlhMzJcdTlhMzRcdTlhMzFcdTlhMmNcdTlhMmFcdTlhMzZcdTlhMjlcdTlhMmVcdTlhMzhcdTlhMmRcdTlhYzdcdTlhY2FcdTlhYzZcdTliMTBc''@;'; put 'put ''dTliMTJcdTliMTFcdTljMGJcdTljMDhcdTliZjdcdTljMDVcdTljMTJcdTliZjhcdTljNDBcdTljMDdcdTljMGVcdTljMDZcdTljMTdcdTljMTRcdTljMDlcdTlkOWZcdTlkOTlcdTlkYTRcdTlkOWRcdTlkOTJcdTlkOThcdTlkOTBcdTlkOWJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdTlkYTBcdTlkOTRcdTlkOWNcdTlkYWFcdTlkOTdcdTlkYTFcdTlkOWFcdTlkYTJcdTlkYThcdTlkOWVcdTlkYTNcdTlkYmZcdTlkYTlcdTlkOTZcdTlkYTZcdTlkYTdcdTllOTlcdTllOWJcdTllOWFcdTllZTVcdTllZTRcdTllZTdcdTllZTZcdTlmMzBcdTlmMmVcdTlm''@;'; put 'put ''NWJcdTlmNjBcdTlmNWVcdTlmNWRcdTlmNTlcdTlmOTFcdTUxM2FcdTUxMzlcdTUyOThcdTUyOTdcdTU2YzNcdTU2YmRcdTU2YmVcdTViNDhcdTViNDdcdTVkY2JcdTVkY2ZcdTVlZjFcdTYxZmRcdTY1MWJcdTZiMDJcdTZhZmNcdTZiMDNcdTZhZjhcdTZiMDBcdTcwNDNcdTcwNDRcdTcwNGFc''@;'; put 'put ''dTcwNDhcdTcwNDlcdTcwNDVcdTcwNDZcdTcyMWRcdTcyMWFcdTcyMTlcdTczN2VcdTc1MTdcdTc2NmFcdTc3ZDBcdTc5MmRcdTc5MzFcdTc5MmZcdTdjNTRcdTdjNTNcdTdjZjJcdTdlOGFcdTdlODdcdTdlODhcdTdlOGJcdTdlODZcdTdlOGRcdTdmNGRcdTdmYmJcdTgwMzBcdTgxZGRcdTg2''@;'; put 'put ''MThcdTg2MmFcdTg2MjZcdTg2MWZcdTg2MjNcdTg2MWNcdTg2MTlcdTg2MjdcdTg2MmVcdTg2MjFcdTg2MjBcdTg2MjlcdTg2MWVcdTg2MjVcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syNDVdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzI0NV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syNDVd''@;'; put 'put ''W2ddXT02MjcyMCtnLHlbNjI3MjArZ109X1syNDVdW2ddKTtmb3IoX1syNDZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg4MjlcdTg4MWRcdTg4MWJcdTg4MjBcdTg4MjRcdTg4MWNcdTg4MmJcdTg4NGFcdTg5NmRcdTg5NjlcdTg5''@;'; put 'put ''NmVcdTg5NmJcdTg5ZmFcdThiNzlcdThiNzhcdThiNDVcdThiN2FcdThiN2JcdThkMTBcdThkMTRcdThkYWZcdThlOGVcdThlOGNcdThmNWVcdThmNWJcdThmNWRcdTkxNDZcdTkxNDRcdTkxNDVcdTkxYjlcdTk0M2ZcdTk0M2JcdTk0MzZcdTk0MjlcdTk0M2RcdTk0M2NcdTk0MzBcdTk0Mzlc''@;'; put 'put ''dTk0MmFcdTk0MzdcdTk0MmNcdTk0NDBcdTk0MzFcdTk1ZTVcdTk1ZTRcdTk1ZTNcdTk3MzVcdTk3M2FcdTk3YmZcdTk3ZTFcdTk4NjRcdTk4YzlcdTk4YzZcdTk4YzBcdTk5NThcdTk5NTZcdTlhMzlcdTlhM2RcdTlhNDZcdTlhNDRcdTlhNDJcdTlhNDFcdTlhM2FcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTlhM2ZcdTlhY2RcdTliMTVcdTliMTdcdTliMThcdTliMTZcdTliM2FcdTliNTJcdTljMmJcdTljMWRcdTljMWNcdTljMmNcdTljMjNcdTljMjhcdTljMjlcdTljMjRcdTljMjFcdTlkYjdcdTlkYjZcdTlkYmNcdTlkYzFcdTlkYzdcdTlkY2FcdTlk''@;'; put 'put ''Y2ZcdTlkYmVcdTlkYzVcdTlkYzNcdTlkYmJcdTlkYjVcdTlkY2VcdTlkYjlcdTlkYmFcdTlkYWNcdTlkYzhcdTlkYjFcdTlkYWRcdTlkY2NcdTlkYjNcdTlkY2RcdTlkYjJcdTllN2FcdTllOWNcdTllZWJcdTllZWVcdTllZWRcdTlmMWJcdTlmMThcdTlmMWFcdTlmMzFcdTlmNGVcdTlmNjVc''@;'; put 'put ''dTlmNjRcdTlmOTJcdTRlYjlcdTU2YzZcdTU2YzVcdTU2Y2JcdTU5NzFcdTViNGJcdTViNGNcdTVkZDVcdTVkZDFcdTVlZjJcdTY1MjFcdTY1MjBcdTY1MjZcdTY1MjJcdTZiMGJcdTZiMDhcdTZiMDlcdTZjMGRcdTcwNTVcdTcwNTZcdTcwNTdcdTcwNTJcdTcyMWVcdTcyMWZcdTcyYTlcdTcz''@;'; put 'put ''N2ZcdTc0ZDhcdTc0ZDVcdTc0ZDlcdTc0ZDdcdTc2NmRcdTc2YWRcdTc5MzVcdTc5YjRcdTdhNzBcdTdhNzFcdTdjNTdcdTdjNWNcdTdjNTlcdTdjNWJcdTdjNWFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syNDZdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzI0Nl1bZ10uY2hhckNvZGVBdCgw''@;'; put 'put ''KSYmKElbX1syNDZdW2ddXT02Mjk3NitnLHlbNjI5NzYrZ109X1syNDZdW2ddKTtmb3IoX1syNDddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdjZjRcdTdjZjFcdTdlOTFcdTdmNGZcdTdmODdcdTgxZGVcdTgyNmJcdTg2MzRcdTg2''@;'; put 'put ''MzVcdTg2MzNcdTg2MmNcdTg2MzJcdTg2MzZcdTg4MmNcdTg4MjhcdTg4MjZcdTg4MmFcdTg4MjVcdTg5NzFcdTg5YmZcdTg5YmVcdTg5ZmJcdThiN2VcdThiODRcdThiODJcdThiODZcdThiODVcdThiN2ZcdThkMTVcdThlOTVcdThlOTRcdThlOWFcdThlOTJcdThlOTBcdThlOTZcdThlOTdc''@;'; put 'put ''dThmNjBcdThmNjJcdTkxNDdcdTk0NGNcdTk0NTBcdTk0NGFcdTk0NGJcdTk0NGZcdTk0NDdcdTk0NDVcdTk0NDhcdTk0NDlcdTk0NDZcdTk3M2ZcdTk3ZTNcdTk4NmFcdTk4NjlcdTk4Y2JcdTk5NTRcdTk5NWJcdTlhNGVcdTlhNTNcdTlhNTRcdTlhNGNcdTlhNGZcdTlhNDhcdTlhNGFcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTlhNDlcdTlhNTJcdTlhNTBcdTlhZDBcdTliMTlcdTliMmJcdTliM2JcdTliNTZcdTliNTVcdTljNDZcdTljNDhcdTljM2ZcdTljNDRcdTljMzlcdTljMzNcdTljNDFcdTljM2NcdTljMzdcdTljMzRcdTljMzJcdTljM2RcdTlj''@;'; put 'put ''MzZcdTlkZGJcdTlkZDJcdTlkZGVcdTlkZGFcdTlkY2JcdTlkZDBcdTlkZGNcdTlkZDFcdTlkZGZcdTlkZTlcdTlkZDlcdTlkZDhcdTlkZDZcdTlkZjVcdTlkZDVcdTlkZGRcdTllYjZcdTllZjBcdTlmMzVcdTlmMzNcdTlmMzJcdTlmNDJcdTlmNmJcdTlmOTVcdTlmYTJcdTUxM2RcdTUyOTlc''@;'; put 'put ''dTU4ZThcdTU4ZTdcdTU5NzJcdTViNGRcdTVkZDhcdTg4MmZcdTVmNGZcdTYyMDFcdTYyMDNcdTYyMDRcdTY1MjlcdTY1MjVcdTY1OTZcdTY2ZWJcdTZiMTFcdTZiMTJcdTZiMGZcdTZiY2FcdTcwNWJcdTcwNWFcdTcyMjJcdTczODJcdTczODFcdTczODNcdTc2NzBcdTc3ZDRcdTdjNjdcdTdj''@;'; put 'put ''NjZcdTdlOTVcdTgyNmNcdTg2M2FcdTg2NDBcdTg2MzlcdTg2M2NcdTg2MzFcdTg2M2JcdTg2M2VcdTg4MzBcdTg4MzJcdTg4MmVcdTg4MzNcdTg5NzZcdTg5NzRcdTg5NzNcdTg5ZmVcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syNDddLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzI0N11bZ10u''@;'; put 'put ''Y2hhckNvZGVBdCgwKSYmKElbX1syNDddW2ddXT02MzIzMitnLHlbNjMyMzIrZ109X1syNDddW2ddKTtmb3IoX1syNDhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThiOGNcdThiOGVcdThiOGJcdThiODhcdThjNDVcdThkMTlcdThl''@;'; put 'put ''OThcdThmNjRcdThmNjNcdTkxYmNcdTk0NjJcdTk0NTVcdTk0NWRcdTk0NTdcdTk0NWVcdTk3YzRcdTk3YzVcdTk4MDBcdTlhNTZcdTlhNTlcdTliMWVcdTliMWZcdTliMjBcdTljNTJcdTljNThcdTljNTBcdTljNGFcdTljNGRcdTljNGJcdTljNTVcdTljNTlcdTljNGNcdTljNGVcdTlkZmJc''@;'; put 'put ''dTlkZjdcdTlkZWZcdTlkZTNcdTlkZWJcdTlkZjhcdTlkZTRcdTlkZjZcdTlkZTFcdTlkZWVcdTlkZTZcdTlkZjJcdTlkZjBcdTlkZTJcdTlkZWNcdTlkZjRcdTlkZjNcdTlkZThcdTlkZWRcdTllYzJcdTllZDBcdTllZjJcdTllZjNcdTlmMDZcdTlmMWNcdTlmMzhcdTlmMzdcdTlmMzZcdTlm''@;'; put 'put ''NDNcdTlmNGZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTlmNzFcdTlmNzBcdTlmNmVcdTlmNmZcdTU2ZDNcdTU2Y2RcdTViNGVcdTVjNmRcdTY1MmRcdTY2ZWRcdTY2ZWVcdTZiMTNcdTcwNWZcdTcwNjFcdTcwNWRcdTcwNjBcdTcyMjNcdTc0ZGJcdTc0ZTVcdTc3''@;'; put 'put ''ZDVcdTc5MzhcdTc5YjdcdTc5YjZcdTdjNmFcdTdlOTdcdTdmODlcdTgyNmRcdTg2NDNcdTg4MzhcdTg4MzdcdTg4MzVcdTg4NGJcdThiOTRcdThiOTVcdThlOWVcdThlOWZcdThlYTBcdThlOWRcdTkxYmVcdTkxYmRcdTkxYzJcdTk0NmJcdTk0NjhcdTk0NjlcdTk2ZTVcdTk3NDZcdTk3NDNc''@;'; put 'put ''dTk3NDdcdTk3YzdcdTk3ZTVcdTlhNWVcdTlhZDVcdTliNTlcdTljNjNcdTljNjdcdTljNjZcdTljNjJcdTljNWVcdTljNjBcdTllMDJcdTlkZmVcdTllMDdcdTllMDNcdTllMDZcdTllMDVcdTllMDBcdTllMDFcdTllMDlcdTlkZmZcdTlkZmRcdTllMDRcdTllYTBcdTlmMWVcdTlmNDZcdTlm''@;'; put 'put ''NzRcdTlmNzVcdTlmNzZcdTU2ZDRcdTY1MmVcdTY1YjhcdTZiMThcdTZiMTlcdTZiMTdcdTZiMWFcdTcwNjJcdTcyMjZcdTcyYWFcdTc3ZDhcdTc3ZDlcdTc5MzlcdTdjNjlcdTdjNmJcdTdjZjZcdTdlOWFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syNDhdLmxlbmd0aDsrK2cpNjU1MzMh''@;'; put 'put ''PT1fWzI0OF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syNDhdW2ddXT02MzQ4OCtnLHlbNjM0ODgrZ109X1syNDhdW2ddKTtmb3IoX1syNDldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdlOThcdTdlOWJcdTdlOTlcdTgxZTBcdTgx''@;'; put 'put ''ZTFcdTg2NDZcdTg2NDdcdTg2NDhcdTg5NzlcdTg5N2FcdTg5N2NcdTg5N2JcdTg5ZmZcdThiOThcdThiOTlcdThlYTVcdThlYTRcdThlYTNcdTk0NmVcdTk0NmRcdTk0NmZcdTk0NzFcdTk0NzNcdTk3NDlcdTk4NzJcdTk5NWZcdTljNjhcdTljNmVcdTljNmRcdTllMGJcdTllMGRcdTllMTBc''@;'; put 'put ''dTllMGZcdTllMTJcdTllMTFcdTllYTFcdTllZjVcdTlmMDlcdTlmNDdcdTlmNzhcdTlmN2JcdTlmN2FcdTlmNzlcdTU3MWVcdTcwNjZcdTdjNmZcdTg4M2NcdThkYjJcdThlYTZcdTkxYzNcdTk0NzRcdTk0NzhcdTk0NzZcdTk0NzVcdTlhNjBcdTljNzRcdTljNzNcdTljNzFcdTljNzVcdTll''@;'; put 'put ''MTRcdTllMTNcdTllZjZcdTlmMGFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTlmYTRcdTcwNjhcdTcwNjVcdTdjZjdcdTg2NmFcdTg4M2VcdTg4M2RcdTg4M2ZcdThiOWVcdThjOWNcdThlYTlcdThlYzlcdTk3NGJcdTk4NzNcdTk4NzRcdTk4Y2NcdTk5NjFcdTk5''@;'; put 'put ''YWJcdTlhNjRcdTlhNjZcdTlhNjdcdTliMjRcdTllMTVcdTllMTdcdTlmNDhcdTYyMDdcdTZiMWVcdTcyMjdcdTg2NGNcdThlYThcdTk0ODJcdTk0ODBcdTk0ODFcdTlhNjlcdTlhNjhcdTliMmVcdTllMTlcdTcyMjlcdTg2NGJcdThiOWZcdTk0ODNcdTljNzlcdTllYjdcdTc2NzVcdTlhNmJc''@;'; put 'put ''dTljN2FcdTllMWRcdTcwNjlcdTcwNmFcdTllYTRcdTlmN2VcdTlmNDlcdTlmOThcdTc4ODFcdTkyYjlcdTg4Y2ZcdTU4YmJcdTYwNTJcdTdjYTdcdTVhZmFcdTI1NTRcdTI1NjZcdTI1NTdcdTI1NjBcdTI1NmNcdTI1NjNcdTI1NWFcdTI1NjlcdTI1NWRcdTI1NTJcdTI1NjRcdTI1NTVcdTI1''@;'; put 'put ''NWVcdTI1NmFcdTI1NjFcdTI1NThcdTI1NjdcdTI1NWJcdTI1NTNcdTI1NjVcdTI1NTZcdTI1NWZcdTI1NmJcdTI1NjJcdTI1NTlcdTI1NjhcdTI1NWNcdTI1NTFcdTI1NTBcdTI1NmRcdTI1NmVcdTI1NzBcdTI1NmZcdTI1OTNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syNDldLmxlbmd0''@;'; put 'put ''aDsrK2cpNjU1MzMhPT1fWzI0OV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syNDldW2ddXT02Mzc0NCtnLHlbNjM3NDQrZ109X1syNDldW2ddKTtyZXR1cm57ZW5jOkksZGVjOnl9fSgpLFhbMTI1MF09ZnVuY3Rpb24oKXtmb3IodmFyIHk9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgw''@;'; put 'put ''N1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xt''@;'; put 'put ''bm9wcXJzdHV2d3h5ent8fX5ceDdmXHUyMGFjXHVmZmZkXHUyMDFhXHVmZmZkXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHVmZmZkXHUyMDMwXHUwMTYwXHUyMDM5XHUwMTVhXHUwMTY0XHUwMTdkXHUwMTc5XHVmZmZkXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0''@;'; put 'put ''XHVmZmZkXHUyMTIyXHUwMTYxXHUyMDNhXHUwMTViXHUwMTY1XHUwMTdlXHUwMTdhXHhhMFx1MDJjN1x1MDJkOFx1MDE0MVx4YTRcdTAxMDRceGE2XHhhN1x4YThceGE5XHUwMTVlXHhhYlx4YWNceGFkXHhhZVx1MDE3Ylx4YjBceGIxXHUwMmRiXHUwMTQyXHhiNFx4YjVceGI2XHhiN1x4Yjhc''@;'; put 'put ''dTAxMDVcdTAxNWZceGJiXHUwMTNkXHUwMmRkXHUwMTNlXHUwMTdjXHUwMTU0XHhjMVx4YzJcdTAxMDJceGM0XHUwMTM5XHUwMTA2XHhjN1x1MDEwY1x4YzlcdTAxMThceGNiXHUwMTFhXHhjZFx4Y2VcdTAxMGVcdTAxMTBcdTAxNDNcdTAxNDdceGQzXHhkNFx1MDE1MFx4ZDZceGQ3XHUwMTU4''@;'; put 'put ''XHUwMTZlXHhkYVx1MDE3MFx4ZGNceGRkXHUwMTYyXHhkZlx1MDE1NVx4ZTFceGUyXHUwMTAzXHhlNFx1MDEzYVx1MDEwN1x4ZTdcdTAxMGRceGU5XHUwMTE5XHhlYlx1MDExYlx4ZWRceGVlXHUwMTBmXHUwMTExXHUwMTQ0XHUwMTQ4XHhmM1x4ZjRcdTAxNTFceGY2XHhmN1x1MDE1OVx1MDE2''@;'; put 'put ''Zlx4ZmFcdTAxNzFceGZjXHhmZFx1MDE2M1x1MDJkOSIsST1bXSxfPXt9LGc9MDsyNTYhPWc7KytnKTY1NTMzIT09eS5jaGFyQ29kZUF0KGcpJiYoX1t5LmNoYXJBdChnKV09ZyksSVtnXT15LmNoYXJBdChnKTtyZXR1cm57ZW5jOl8sZGVjOkl9fSgpLFhbMTI1MV09ZnVuY3Rpb24oKXtmb3Io''@;'; put 'put ''dmFyIHk9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElK''@;'; put 'put ''S0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHUwNDAyXHUwNDAzXHUyMDFhXHUwNDUzXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHUyMGFjXHUyMDMwXHUwNDA5XHUyMDM5XHUwNDBhXHUwNDBjXHUwNDBiXHUwNDBmXHUwNDUyXHUyMDE4''@;'; put 'put ''XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHVmZmZkXHUyMTIyXHUwNDU5XHUyMDNhXHUwNDVhXHUwNDVjXHUwNDViXHUwNDVmXHhhMFx1MDQwZVx1MDQ1ZVx1MDQwOFx4YTRcdTA0OTBceGE2XHhhN1x1MDQwMVx4YTlcdTA0MDRceGFiXHhhY1x4YWRceGFlXHUwNDA3XHhi''@;'; put 'put ''MFx4YjFcdTA0MDZcdTA0NTZcdTA0OTFceGI1XHhiNlx4YjdcdTA0NTFcdTIxMTZcdTA0NTRceGJiXHUwNDU4XHUwNDA1XHUwNDU1XHUwNDU3XHUwNDEwXHUwNDExXHUwNDEyXHUwNDEzXHUwNDE0XHUwNDE1XHUwNDE2XHUwNDE3XHUwNDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFk''@;'; put 'put ''XHUwNDFlXHUwNDFmXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDI0XHUwNDI1XHUwNDI2XHUwNDI3XHUwNDI4XHUwNDI5XHUwNDJhXHUwNDJiXHUwNDJjXHUwNDJkXHUwNDJlXHUwNDJmXHUwNDMwXHUwNDMxXHUwNDMyXHUwNDMzXHUwNDM0XHUwNDM1XHUwNDM2XHUwNDM3XHUwNDM4XHUw''@;'; put 'put ''NDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNkXHUwNDNlXHUwNDNmXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDQ0XHUwNDQ1XHUwNDQ2XHUwNDQ3XHUwNDQ4XHUwNDQ5XHUwNDRhXHUwNDRiXHUwNDRjXHUwNDRkXHUwNDRlXHUwNDRmIixJPVtdLF89e30sZz0wOzI1NiE9ZzsrK2cpNjU1''@;'; put 'put ''MzMhPT15LmNoYXJDb2RlQXQoZykmJihfW3kuY2hhckF0KGcpXT1nKSxJW2ddPXkuY2hhckF0KGcpO3JldHVybntlbmM6XyxkZWM6SX19KCksWFsxMjUyXT1mdW5jdGlvbigpe2Zvcih2YXIgeT0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEw''@;'; put 'put ''XHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdTIw''@;'; put 'put ''YWNcdWZmZmRcdTIwMWFcdTAxOTJcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdTAyYzZcdTIwMzBcdTAxNjBcdTIwMzlcdTAxNTJcdWZmZmRcdTAxN2RcdWZmZmRcdWZmZmRcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdTAyZGNcdTIxMjJcdTAxNjFcdTIwM2Fc''@;'; put 'put ''dTAxNTNcdWZmZmRcdTAxN2VcdTAxNzhceGEwXHhhMVx4YTJceGEzXHhhNFx4YTVceGE2XHhhN1x4YThceGE5XHhhYVx4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4YjdceGI4XHhiOVx4YmFceGJiXHhiY1x4YmRceGJlXHhiZlx4YzBceGMxXHhjMlx4''@;'; put 'put ''YzNceGM0XHhjNVx4YzZceGM3XHhjOFx4YzlceGNhXHhjYlx4Y2NceGNkXHhjZVx4Y2ZceGQwXHhkMVx4ZDJceGQzXHhkNFx4ZDVceGQ2XHhkN1x4ZDhceGQ5XHhkYVx4ZGJceGRjXHhkZFx4ZGVceGRmXHhlMFx4ZTFceGUyXHhlM1x4ZTRceGU1XHhlNlx4ZTdceGU4XHhlOVx4ZWFceGViXHhl''@;'; put 'put ''Y1x4ZWRceGVlXHhlZlx4ZjBceGYxXHhmMlx4ZjNceGY0XHhmNVx4ZjZceGY3XHhmOFx4ZjlceGZhXHhmYlx4ZmNceGZkXHhmZVx4ZmYiLEk9W10sXz17fSxnPTA7MjU2IT1nOysrZyk2NTUzMyE9PXkuY2hhckNvZGVBdChnKSYmKF9beS5jaGFyQXQoZyldPWcpLElbZ109eS5jaGFyQXQoZyk7''@;'; put 'put ''cmV0dXJue2VuYzpfLGRlYzpJfX0oKSxYWzEyNTNdPWZ1bmN0aW9uKCl7Zm9yKHZhciB5PSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4''@;'; put 'put ''MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1MjBhY1x1ZmZmZFx1MjAxYVx1MDE5Mlx1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1ZmZmZFx1MjAzMFx1''@;'; put 'put ''ZmZmZFx1MjAzOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1ZmZmZFx1MjEyMlx1ZmZmZFx1MjAzYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx4YTBcdTAzODVcdTAzODZceGEzXHhhNFx4YTVceGE2XHhh''@;'; put 'put ''N1x4YThceGE5XHVmZmZkXHhhYlx4YWNceGFkXHhhZVx1MjAxNVx4YjBceGIxXHhiMlx4YjNcdTAzODRceGI1XHhiNlx4YjdcdTAzODhcdTAzODlcdTAzOGFceGJiXHUwMzhjXHhiZFx1MDM4ZVx1MDM4Zlx1MDM5MFx1MDM5MVx1MDM5Mlx1MDM5M1x1MDM5NFx1MDM5NVx1MDM5Nlx1MDM5N1x1''@;'; put 'put ''MDM5OFx1MDM5OVx1MDM5YVx1MDM5Ylx1MDM5Y1x1MDM5ZFx1MDM5ZVx1MDM5Zlx1MDNhMFx1MDNhMVx1ZmZmZFx1MDNhM1x1MDNhNFx1MDNhNVx1MDNhNlx1MDNhN1x1MDNhOFx1MDNhOVx1MDNhYVx1MDNhYlx1MDNhY1x1MDNhZFx1MDNhZVx1MDNhZlx1MDNiMFx1MDNiMVx1MDNiMlx1MDNi''@;'; put 'put ''M1x1MDNiNFx1MDNiNVx1MDNiNlx1MDNiN1x1MDNiOFx1MDNiOVx1MDNiYVx1MDNiYlx1MDNiY1x1MDNiZFx1MDNiZVx1MDNiZlx1MDNjMFx1MDNjMVx1MDNjMlx1MDNjM1x1MDNjNFx1MDNjNVx1MDNjNlx1MDNjN1x1MDNjOFx1MDNjOVx1MDNjYVx1MDNjYlx1MDNjY1x1MDNjZFx1MDNjZVx1''@;'; put 'put ''ZmZmZCIsST1bXSxfPXt9LGc9MDsyNTYhPWc7KytnKTY1NTMzIT09eS5jaGFyQ29kZUF0KGcpJiYoX1t5LmNoYXJBdChnKV09ZyksSVtnXT15LmNoYXJBdChnKTtyZXR1cm57ZW5jOl8sZGVjOkl9fSgpLFhbMTI1NF09ZnVuY3Rpb24oKXtmb3IodmFyIHk9IlwwXHgwMVx4MDJceDAzXHgwNFx4''@;'; put 'put ''MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNk''@;'; put 'put ''ZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHUyMGFjXHVmZmZkXHUyMDFhXHUwMTkyXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHUwMmM2XHUyMDMwXHUwMTYwXHUyMDM5XHUwMTUyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUy''@;'; put 'put ''MDEzXHUyMDE0XHUwMmRjXHUyMTIyXHUwMTYxXHUyMDNhXHUwMTUzXHVmZmZkXHVmZmZkXHUwMTc4XHhhMFx4YTFceGEyXHhhM1x4YTRceGE1XHhhNlx4YTdceGE4XHhhOVx4YWFceGFiXHhhY1x4YWRceGFlXHhhZlx4YjBceGIxXHhiMlx4YjNceGI0XHhiNVx4YjZceGI3XHhiOFx4YjlceGJh''@;'; put 'put ''XHhiYlx4YmNceGJkXHhiZVx4YmZceGMwXHhjMVx4YzJceGMzXHhjNFx4YzVceGM2XHhjN1x4YzhceGM5XHhjYVx4Y2JceGNjXHhjZFx4Y2VceGNmXHUwMTFlXHhkMVx4ZDJceGQzXHhkNFx4ZDVceGQ2XHhkN1x4ZDhceGQ5XHhkYVx4ZGJceGRjXHUwMTMwXHUwMTVlXHhkZlx4ZTBceGUxXHhl''@;'; put 'put ''Mlx4ZTNceGU0XHhlNVx4ZTZceGU3XHhlOFx4ZTlceGVhXHhlYlx4ZWNceGVkXHhlZVx4ZWZcdTAxMWZceGYxXHhmMlx4ZjNceGY0XHhmNVx4ZjZceGY3XHhmOFx4ZjlceGZhXHhmYlx4ZmNcdTAxMzFcdTAxNWZceGZmIixJPVtdLF89e30sZz0wOzI1NiE9ZzsrK2cpNjU1MzMhPT15LmNoYXJD''@;'; put 'put ''b2RlQXQoZykmJihfW3kuY2hhckF0KGcpXT1nKSxJW2ddPXkuY2hhckF0KGcpO3JldHVybntlbmM6XyxkZWM6SX19KCksWFsxMjU1XT1mdW5jdGlvbigpe2Zvcih2YXIgeT0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEz''@;'; put 'put ''XHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdTIwYWNcdWZmZmRcdTIw''@;'; put 'put ''MWFcdTAxOTJcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdTAyYzZcdTIwMzBcdWZmZmRcdTIwMzlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdTAyZGNcdTIxMjJcdWZmZmRcdTIwM2FcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRceGEwXHhhMVx4YTJceGEzXHUyMGFhXHhhNVx4YTZceGE3XHhhOFx4YTlceGQ3XHhhYlx4YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4YjhceGI5XHhmN1x4YmJceGJjXHhiZFx4YmVceGJmXHUwNWIwXHUwNWIxXHUwNWIyXHUwNWIz''@;'; put 'put ''XHUwNWI0XHUwNWI1XHUwNWI2XHUwNWI3XHUwNWI4XHUwNWI5XHVmZmZkXHUwNWJiXHUwNWJjXHUwNWJkXHUwNWJlXHUwNWJmXHUwNWMwXHUwNWMxXHUwNWMyXHUwNWMzXHUwNWYwXHUwNWYxXHUwNWYyXHUwNWYzXHUwNWY0XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHUwNWQwXHUwNWQxXHUwNWQyXHUwNWQzXHUwNWQ0XHUwNWQ1XHUwNWQ2XHUwNWQ3XHUwNWQ4XHUwNWQ5XHUwNWRhXHUwNWRiXHUwNWRjXHUwNWRkXHUwNWRlXHUwNWRmXHUwNWUwXHUwNWUxXHUwNWUyXHUwNWUzXHUwNWU0XHUwNWU1XHUwNWU2XHUwNWU3XHUwNWU4XHUwNWU5XHUwNWVh''@;'; put 'put ''XHVmZmZkXHVmZmZkXHUyMDBlXHUyMDBmXHVmZmZkIixJPVtdLF89e30sZz0wOzI1NiE9ZzsrK2cpNjU1MzMhPT15LmNoYXJDb2RlQXQoZykmJihfW3kuY2hhckF0KGcpXT1nKSxJW2ddPXkuY2hhckF0KGcpO3JldHVybntlbmM6XyxkZWM6SX19KCksWFsxMjU2XT1mdW5jdGlvbigpe2Zvcih2''@;'; put 'put ''YXIgeT0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpL''@;'; put 'put ''TE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdTIwYWNcdTA2N2VcdTIwMWFcdTAxOTJcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdTAyYzZcdTIwMzBcdTA2NzlcdTIwMzlcdTAxNTJcdTA2ODZcdTA2OThcdTA2ODhcdTA2YWZcdTIwMThc''@;'; put 'put ''dTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdTA2YTlcdTIxMjJcdTA2OTFcdTIwM2FcdTAxNTNcdTIwMGNcdTIwMGRcdTA2YmFceGEwXHUwNjBjXHhhMlx4YTNceGE0XHhhNVx4YTZceGE3XHhhOFx4YTlcdTA2YmVceGFiXHhhY1x4YWRceGFlXHhhZlx4YjBceGIxXHhiMlx4''@;'; put 'put ''YjNceGI0XHhiNVx4YjZceGI3XHhiOFx4YjlcdTA2MWJceGJiXHhiY1x4YmRceGJlXHUwNjFmXHUwNmMxXHUwNjIxXHUwNjIyXHUwNjIzXHUwNjI0XHUwNjI1XHUwNjI2XHUwNjI3XHUwNjI4XHUwNjI5XHUwNjJhXHUwNjJiXHUwNjJjXHUwNjJkXHUwNjJlXHUwNjJmXHUwNjMwXHUwNjMxXHUw''@;'; put 'put ''NjMyXHUwNjMzXHUwNjM0XHUwNjM1XHUwNjM2XHhkN1x1MDYzN1x1MDYzOFx1MDYzOVx1MDYzYVx1MDY0MFx1MDY0MVx1MDY0Mlx1MDY0M1x4ZTBcdTA2NDRceGUyXHUwNjQ1XHUwNjQ2XHUwNjQ3XHUwNjQ4XHhlN1x4ZThceGU5XHhlYVx4ZWJcdTA2NDlcdTA2NGFceGVlXHhlZlx1MDY0Ylx1''@;'; put 'put ''MDY0Y1x1MDY0ZFx1MDY0ZVx4ZjRcdTA2NGZcdTA2NTBceGY3XHUwNjUxXHhmOVx1MDY1Mlx4ZmJceGZjXHUyMDBlXHUyMDBmXHUwNmQyIixJPVtdLF89e30sZz0wOzI1NiE9ZzsrK2cpNjU1MzMhPT15LmNoYXJDb2RlQXQoZykmJihfW3kuY2hhckF0KGcpXT1nKSxJW2ddPXkuY2hhckF0KGcp''@;'; put 'put ''O3JldHVybntlbmM6XyxkZWM6SX19KCksWFsxMjU3XT1mdW5jdGlvbigpe2Zvcih2YXIgeT0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVc''@;'; put 'put ''eDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdTIwYWNcdWZmZmRcdTIwMWFcdWZmZmRcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdWZmZmRcdTIwMzBc''@;'; put 'put ''dWZmZmRcdTIwMzlcdWZmZmRceGE4XHUwMmM3XHhiOFx1ZmZmZFx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1ZmZmZFx1MjEyMlx1ZmZmZFx1MjAzYVx1ZmZmZFx4YWZcdTAyZGJcdWZmZmRceGEwXHVmZmZkXHhhMlx4YTNceGE0XHVmZmZkXHhhNlx4YTdceGQ4''@;'; put 'put ''XHhhOVx1MDE1Nlx4YWJceGFjXHhhZFx4YWVceGM2XHhiMFx4YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4YjdceGY4XHhiOVx1MDE1N1x4YmJceGJjXHhiZFx4YmVceGU2XHUwMTA0XHUwMTJlXHUwMTAwXHUwMTA2XHhjNFx4YzVcdTAxMThcdTAxMTJcdTAxMGNceGM5XHUwMTc5XHUwMTE2XHUw''@;'; put 'put ''MTIyXHUwMTM2XHUwMTJhXHUwMTNiXHUwMTYwXHUwMTQzXHUwMTQ1XHhkM1x1MDE0Y1x4ZDVceGQ2XHhkN1x1MDE3Mlx1MDE0MVx1MDE1YVx1MDE2YVx4ZGNcdTAxN2JcdTAxN2RceGRmXHUwMTA1XHUwMTJmXHUwMTAxXHUwMTA3XHhlNFx4ZTVcdTAxMTlcdTAxMTNcdTAxMGRceGU5XHUwMTdh''@;'; put 'put ''XHUwMTE3XHUwMTIzXHUwMTM3XHUwMTJiXHUwMTNjXHUwMTYxXHUwMTQ0XHUwMTQ2XHhmM1x1MDE0ZFx4ZjVceGY2XHhmN1x1MDE3M1x1MDE0Mlx1MDE1Ylx1MDE2Ylx4ZmNcdTAxN2NcdTAxN2VcdTAyZDkiLEk9W10sXz17fSxnPTA7MjU2IT1nOysrZyk2NTUzMyE9PXkuY2hhckNvZGVBdChn''@;'; put 'put ''KSYmKF9beS5jaGFyQXQoZyldPWcpLElbZ109eS5jaGFyQXQoZyk7cmV0dXJue2VuYzpfLGRlYzpJfX0oKSxYWzEyNThdPWZ1bmN0aW9uKCl7Zm9yKHZhciB5PSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgx''@;'; put 'put ''NVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1MjBhY1x1ZmZmZFx1MjAxYVx1MDE5''@;'; put 'put ''Mlx1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1MDJjNlx1MjAzMFx1ZmZmZFx1MjAzOVx1MDE1Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1MDJkY1x1MjEyMlx1ZmZmZFx1MjAzYVx1MDE1M1x1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''MDE3OFx4YTBceGExXHhhMlx4YTNceGE0XHhhNVx4YTZceGE3XHhhOFx4YTlceGFhXHhhYlx4YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4YjhceGI5XHhiYVx4YmJceGJjXHhiZFx4YmVceGJmXHhjMFx4YzFceGMyXHUwMTAyXHhjNFx4YzVceGM2XHhj''@;'; put 'put ''N1x4YzhceGM5XHhjYVx4Y2JcdTAzMDBceGNkXHhjZVx4Y2ZcdTAxMTBceGQxXHUwMzA5XHhkM1x4ZDRcdTAxYTBceGQ2XHhkN1x4ZDhceGQ5XHhkYVx4ZGJceGRjXHUwMWFmXHUwMzAzXHhkZlx4ZTBceGUxXHhlMlx1MDEwM1x4ZTRceGU1XHhlNlx4ZTdceGU4XHhlOVx4ZWFceGViXHUwMzAx''@;'; put 'put ''XHhlZFx4ZWVceGVmXHUwMTExXHhmMVx1MDMyM1x4ZjNceGY0XHUwMWExXHhmNlx4ZjdceGY4XHhmOVx4ZmFceGZiXHhmY1x1MDFiMFx1MjBhYlx4ZmYiLEk9W10sXz17fSxnPTA7MjU2IT1nOysrZyk2NTUzMyE9PXkuY2hhckNvZGVBdChnKSYmKF9beS5jaGFyQXQoZyldPWcpLElbZ109eS5j''@;'; put 'put ''aGFyQXQoZyk7cmV0dXJue2VuYzpfLGRlYzpJfX0oKSxYWzFlNF09ZnVuY3Rpb24oKXtmb3IodmFyIHk9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4''@;'; put 'put ''MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHhjNFx4YzVceGM3XHhjOVx4ZDFceGQ2XHhkY1x4ZTFceGUwXHhlMlx4ZTRceGUzXHhlNVx4''@;'; put 'put ''ZTdceGU5XHhlOFx4ZWFceGViXHhlZFx4ZWNceGVlXHhlZlx4ZjFceGYzXHhmMlx4ZjRceGY2XHhmNVx4ZmFceGY5XHhmYlx4ZmNcdTIwMjBceGIwXHhhMlx4YTNceGE3XHUyMDIyXHhiNlx4ZGZceGFlXHhhOVx1MjEyMlx4YjRceGE4XHUyMjYwXHhjNlx4ZDhcdTIyMWVceGIxXHUyMjY0XHUy''@;'; put 'put ''MjY1XHhhNVx4YjVcdTIyMDJcdTIyMTFcdTIyMGZcdTAzYzBcdTIyMmJceGFhXHhiYVx1MjEyNlx4ZTZceGY4XHhiZlx4YTFceGFjXHUyMjFhXHUwMTkyXHUyMjQ4XHUyMjA2XHhhYlx4YmJcdTIwMjZceGEwXHhjMFx4YzNceGQ1XHUwMTUyXHUwMTUzXHUyMDEzXHUyMDE0XHUyMDFjXHUyMDFk''@;'; put 'put ''XHUyMDE4XHUyMDE5XHhmN1x1MjVjYVx4ZmZcdTAxNzhcdTIwNDRceGE0XHUyMDM5XHUyMDNhXHVmYjAxXHVmYjAyXHUyMDIxXHhiN1x1MjAxYVx1MjAxZVx1MjAzMFx4YzJceGNhXHhjMVx4Y2JceGM4XHhjZFx4Y2VceGNmXHhjY1x4ZDNceGQ0XHVmZmZkXHhkMlx4ZGFceGRiXHhkOVx1MDEz''@;'; put 'put ''MVx1MDJjNlx1MDJkY1x4YWZcdTAyZDhcdTAyZDlcdTAyZGFceGI4XHUwMmRkXHUwMmRiXHUwMmM3IixJPVtdLF89e30sZz0wOzI1NiE9ZzsrK2cpNjU1MzMhPT15LmNoYXJDb2RlQXQoZykmJihfW3kuY2hhckF0KGcpXT1nKSxJW2ddPXkuY2hhckF0KGcpO3JldHVybntlbmM6XyxkZWM6SX19''@;'; put 'put ''KCksWFsxMDAwNl09ZnVuY3Rpb24oKXtmb3IodmFyIHk9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4v''@;'; put 'put ''MDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHhjNFx4YjlceGIyXHhjOVx4YjNceGQ2XHhkY1x1MDM4NVx4ZTBceGUyXHhlNFx1MDM4NFx4YThceGU3XHhlOVx4ZThceGVhXHhlYlx4YTNc''@;'; put 'put ''dTIxMjJceGVlXHhlZlx1MjAyMlx4YmRcdTIwMzBceGY0XHhmNlx4YTZceGFkXHhmOVx4ZmJceGZjXHUyMDIwXHUwMzkzXHUwMzk0XHUwMzk4XHUwMzliXHUwMzllXHUwM2EwXHhkZlx4YWVceGE5XHUwM2EzXHUwM2FhXHhhN1x1MjI2MFx4YjBcdTAzODdcdTAzOTFceGIxXHUyMjY0XHUyMjY1''@;'; put 'put ''XHhhNVx1MDM5Mlx1MDM5NVx1MDM5Nlx1MDM5N1x1MDM5OVx1MDM5YVx1MDM5Y1x1MDNhNlx1MDNhYlx1MDNhOFx1MDNhOVx1MDNhY1x1MDM5ZFx4YWNcdTAzOWZcdTAzYTFcdTIyNDhcdTAzYTRceGFiXHhiYlx1MjAyNlx4YTBcdTAzYTVcdTAzYTdcdTAzODZcdTAzODhcdTAxNTNcdTIwMTNc''@;'; put 'put ''dTIwMTVcdTIwMWNcdTIwMWRcdTIwMThcdTIwMTlceGY3XHUwMzg5XHUwMzhhXHUwMzhjXHUwMzhlXHUwM2FkXHUwM2FlXHUwM2FmXHUwM2NjXHUwMzhmXHUwM2NkXHUwM2IxXHUwM2IyXHUwM2M4XHUwM2I0XHUwM2I1XHUwM2M2XHUwM2IzXHUwM2I3XHUwM2I5XHUwM2JlXHUwM2JhXHUwM2Ji''@;'; put 'put ''XHUwM2JjXHUwM2JkXHUwM2JmXHUwM2MwXHUwM2NlXHUwM2MxXHUwM2MzXHUwM2M0XHUwM2I4XHUwM2M5XHUwM2MyXHUwM2M3XHUwM2M1XHUwM2I2XHUwM2NhXHUwM2NiXHUwMzkwXHUwM2IwXHVmZmZkIixJPVtdLF89e30sZz0wOzI1NiE9ZzsrK2cpNjU1MzMhPT15LmNoYXJDb2RlQXQoZykm''@;'; put 'put ''JihfW3kuY2hhckF0KGcpXT1nKSxJW2ddPXkuY2hhckF0KGcpO3JldHVybntlbmM6XyxkZWM6SX19KCksWFsxMDAwN109ZnVuY3Rpb24oKXtmb3IodmFyIHk9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1''@;'; put 'put ''XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHUwNDEwXHUwNDExXHUwNDEyXHUwNDEz''@;'; put 'put ''XHUwNDE0XHUwNDE1XHUwNDE2XHUwNDE3XHUwNDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDI0XHUwNDI1XHUwNDI2XHUwNDI3XHUwNDI4XHUwNDI5XHUwNDJhXHUwNDJiXHUwNDJjXHUwNDJkXHUwNDJlXHUw''@;'; put 'put ''NDJmXHUyMDIwXHhiMFx4YTJceGEzXHhhN1x1MjAyMlx4YjZcdTA0MDZceGFlXHhhOVx1MjEyMlx1MDQwMlx1MDQ1Mlx1MjI2MFx1MDQwM1x1MDQ1M1x1MjIxZVx4YjFcdTIyNjRcdTIyNjVcdTA0NTZceGI1XHUyMjAyXHUwNDA4XHUwNDA0XHUwNDU0XHUwNDA3XHUwNDU3XHUwNDA5XHUwNDU5''@;'; put 'put ''XHUwNDBhXHUwNDVhXHUwNDU4XHUwNDA1XHhhY1x1MjIxYVx1MDE5Mlx1MjI0OFx1MjIwNlx4YWJceGJiXHUyMDI2XHhhMFx1MDQwYlx1MDQ1Ylx1MDQwY1x1MDQ1Y1x1MDQ1NVx1MjAxM1x1MjAxNFx1MjAxY1x1MjAxZFx1MjAxOFx1MjAxOVx4ZjdcdTIwMWVcdTA0MGVcdTA0NWVcdTA0MGZc''@;'; put 'put ''dTA0NWZcdTIxMTZcdTA0MDFcdTA0NTFcdTA0NGZcdTA0MzBcdTA0MzFcdTA0MzJcdTA0MzNcdTA0MzRcdTA0MzVcdTA0MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0M2ZcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0NDRcdTA0NDVcdTA0''@;'; put 'put ''NDZcdTA0NDdcdTA0NDhcdTA0NDlcdTA0NGFcdTA0NGJcdTA0NGNcdTA0NGRcdTA0NGVceGE0IixJPVtdLF89e30sZz0wOzI1NiE9ZzsrK2cpNjU1MzMhPT15LmNoYXJDb2RlQXQoZykmJihfW3kuY2hhckF0KGcpXT1nKSxJW2ddPXkuY2hhckF0KGcpO3JldHVybntlbmM6XyxkZWM6SX19KCks''@;'; put 'put ''WFsxMDAwOF09ZnVuY3Rpb24oKXt2YXIgZyx5PVtdLEk9e30sXz1bXTtmb3IoX1swXT0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFm''@;'; put 'put ''ICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZceDgwXHVmOGQ4XHVmOGQ5XHVmOGRhXHVmOGRiXHVmOGRjXHVmOGRkXHVmOGRlXHVmOGRmXHVmOGUwXHVmOGUx''@;'; put 'put ''XHVmOGUyXHVmOGUzXHVmOGU0XHVmOGU1XHVmOGU2XHVmOGU3XHVmOGU4XHVmOGU5XHVmOGVhXHVmOGViXHVmOGVjXHVmOGVkXHVmOGVlXHVmOGVmXHVmOGYwXHVmOGYxXHVmOGYyXHVmOGYzXHVmOGY0XHVmOGY1XHVmOGY2XHVmOGY3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmOGY4''@;'; put 'put ''XHVmOGY5XHVmOGZhXHVmOGZiXHVmOGZjXHVmOGZkXHVmOGZlXHVmOGZmIi5zcGxpdCgiIiksZz0wO2chPV9bMF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1swXVtnXV09MCtnLHlbMCtnXT1fWzBdW2ddKTtmb3IoX1sxNjFdPSJcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTMwMDBcdTMwMDFcdTMwMDJcdTMwZmJcdTAyYzlcdTAyYzdc''@;'; put 'put ''eGE4XHUzMDAzXHUzMDA1XHUyMDE1XHVmZjVlXHVmZmZkXHUyMDI2XHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUzMDE0XHUzMDE1XHUzMDA4XHUzMDA5XHUzMDBhXHUzMDBiXHUzMDBjXHUzMDBkXHUzMDBlXHUzMDBmXHUzMDE2XHUzMDE3XHUzMDEwXHUzMDExXHhiMVx4ZDdceGY3XHUyMjM2''@;'; put 'put ''XHUyMjI3XHUyMjI4XHUyMjExXHUyMjBmXHUyMjJhXHUyMjI5XHUyMjA4XHUyMjM3XHUyMjFhXHUyMmE1XHUyMjI1XHUyMjIwXHUyMzEyXHUyMjk5XHUyMjJiXHUyMjJlXHUyMjYxXHUyMjRjXHUyMjQ4XHUyMjNkXHUyMjFkXHUyMjYwXHUyMjZlXHUyMjZmXHUyMjY0XHUyMjY1XHUyMjFlXHUy''@;'; put 'put ''MjM1XHUyMjM0XHUyNjQyXHUyNjQwXHhiMFx1MjAzMlx1MjAzM1x1MjEwM1x1ZmYwNFx4YTRcdWZmZTBcdWZmZTFcdTIwMzBceGE3XHUyMTE2XHUyNjA2XHUyNjA1XHUyNWNiXHUyNWNmXHUyNWNlXHUyNWM3XHUyNWM2XHUyNWExXHUyNWEwXHUyNWIzXHUyNWIyXHUyMDNiXHUyMTkyXHUyMTkw''@;'; put 'put ''XHUyMTkxXHUyMTkzXHUzMDEzXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTYxXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNjFdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTYxXVtnXV09NDEyMTYrZyx5WzQxMjE2K2ddPV9bMTYxXVtnXSk7Zm9yKF9bMTYyXT0iXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyNDg4XHUyNDg5XHUyNDhhXHUyNDhiXHUyNDhjXHUyNDhkXHUyNDhlXHUyNDhmXHUyNDkwXHUyNDkxXHUyNDkyXHUyNDkzXHUyNDk0XHUyNDk1XHUyNDk2XHUyNDk3XHUyNDk4XHUyNDk5''@;'; put 'put ''XHUyNDlhXHUyNDliXHUyNDc0XHUyNDc1XHUyNDc2XHUyNDc3XHUyNDc4XHUyNDc5XHUyNDdhXHUyNDdiXHUyNDdjXHUyNDdkXHUyNDdlXHUyNDdmXHUyNDgwXHUyNDgxXHUyNDgyXHUyNDgzXHUyNDg0XHUyNDg1XHUyNDg2XHUyNDg3XHUyNDYwXHUyNDYxXHUyNDYyXHUyNDYzXHUyNDY0XHUy''@;'; put 'put ''NDY1XHUyNDY2XHUyNDY3XHUyNDY4XHUyNDY5XHVmZmZkXHVmZmZkXHUzMjIwXHUzMjIxXHUzMjIyXHUzMjIzXHUzMjI0XHUzMjI1XHUzMjI2XHUzMjI3XHUzMjI4XHUzMjI5XHVmZmZkXHVmZmZkXHUyMTYwXHUyMTYxXHUyMTYyXHUyMTYzXHUyMTY0XHUyMTY1XHUyMTY2XHUyMTY3XHUyMTY4''@;'; put 'put ''XHUyMTY5XHUyMTZhXHUyMTZiXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTYyXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNjJdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTYyXVtnXV09NDE0NzIrZyx5WzQxNDcyK2ddPV9bMTYyXVtnXSk7Zm9yKF9bMTYzXT0iXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZjAxXHVmZjAyXHVmZjAzXHVmZmU1XHVm''@;'; put 'put ''ZjA1XHVmZjA2XHVmZjA3XHVmZjA4XHVmZjA5XHVmZjBhXHVmZjBiXHVmZjBjXHVmZjBkXHVmZjBlXHVmZjBmXHVmZjEwXHVmZjExXHVmZjEyXHVmZjEzXHVmZjE0XHVmZjE1XHVmZjE2XHVmZjE3XHVmZjE4XHVmZjE5XHVmZjFhXHVmZjFiXHVmZjFjXHVmZjFkXHVmZjFlXHVmZjFmXHVmZjIw''@;'; put 'put ''XHVmZjIxXHVmZjIyXHVmZjIzXHVmZjI0XHVmZjI1XHVmZjI2XHVmZjI3XHVmZjI4XHVmZjI5XHVmZjJhXHVmZjJiXHVmZjJjXHVmZjJkXHVmZjJlXHVmZjJmXHVmZjMwXHVmZjMxXHVmZjMyXHVmZjMzXHVmZjM0XHVmZjM1XHVmZjM2XHVmZjM3XHVmZjM4XHVmZjM5XHVmZjNhXHVmZjNiXHVm''@;'; put 'put ''ZjNjXHVmZjNkXHVmZjNlXHVmZjNmXHVmZjQwXHVmZjQxXHVmZjQyXHVmZjQzXHVmZjQ0XHVmZjQ1XHVmZjQ2XHVmZjQ3XHVmZjQ4XHVmZjQ5XHVmZjRhXHVmZjRiXHVmZjRjXHVmZjRkXHVmZjRlXHVmZjRmXHVmZjUwXHVmZjUxXHVmZjUyXHVmZjUzXHVmZjU0XHVmZjU1XHVmZjU2XHVmZjU3''@;'; put 'put ''XHVmZjU4XHVmZjU5XHVmZjVhXHVmZjViXHVmZjVjXHVmZjVkXHVmZmUzXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTYzXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNjNdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTYzXVtnXV09NDE3MjgrZyx5WzQxNzI4K2ddPV9bMTYzXVtnXSk7Zm9y''@;'; put 'put ''KF9bMTY0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMDQxXHUzMDQyXHUz''@;'; put 'put ''MDQzXHUzMDQ0XHUzMDQ1XHUzMDQ2XHUzMDQ3XHUzMDQ4XHUzMDQ5XHUzMDRhXHUzMDRiXHUzMDRjXHUzMDRkXHUzMDRlXHUzMDRmXHUzMDUwXHUzMDUxXHUzMDUyXHUzMDUzXHUzMDU0XHUzMDU1XHUzMDU2XHUzMDU3XHUzMDU4XHUzMDU5XHUzMDVhXHUzMDViXHUzMDVjXHUzMDVkXHUzMDVl''@;'; put 'put ''XHUzMDVmXHUzMDYwXHUzMDYxXHUzMDYyXHUzMDYzXHUzMDY0XHUzMDY1XHUzMDY2XHUzMDY3XHUzMDY4XHUzMDY5XHUzMDZhXHUzMDZiXHUzMDZjXHUzMDZkXHUzMDZlXHUzMDZmXHUzMDcwXHUzMDcxXHUzMDcyXHUzMDczXHUzMDc0XHUzMDc1XHUzMDc2XHUzMDc3XHUzMDc4XHUzMDc5XHUz''@;'; put 'put ''MDdhXHUzMDdiXHUzMDdjXHUzMDdkXHUzMDdlXHUzMDdmXHUzMDgwXHUzMDgxXHUzMDgyXHUzMDgzXHUzMDg0XHUzMDg1XHUzMDg2XHUzMDg3XHUzMDg4XHUzMDg5XHUzMDhhXHUzMDhiXHUzMDhjXHUzMDhkXHUzMDhlXHUzMDhmXHUzMDkwXHUzMDkxXHUzMDkyXHUzMDkzXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTY0XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNjRdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTY0XVtnXV09NDE5ODQrZyx5WzQxOTg0K2ddPV9b''@;'; put 'put ''MTY0XVtnXSk7Zm9yKF9bMTY1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUz''@;'; put 'put ''MGExXHUzMGEyXHUzMGEzXHUzMGE0XHUzMGE1XHUzMGE2XHUzMGE3XHUzMGE4XHUzMGE5XHUzMGFhXHUzMGFiXHUzMGFjXHUzMGFkXHUzMGFlXHUzMGFmXHUzMGIwXHUzMGIxXHUzMGIyXHUzMGIzXHUzMGI0XHUzMGI1XHUzMGI2XHUzMGI3XHUzMGI4XHUzMGI5XHUzMGJhXHUzMGJiXHUzMGJj''@;'; put 'put ''XHUzMGJkXHUzMGJlXHUzMGJmXHUzMGMwXHUzMGMxXHUzMGMyXHUzMGMzXHUzMGM0XHUzMGM1XHUzMGM2XHUzMGM3XHUzMGM4XHUzMGM5XHUzMGNhXHUzMGNiXHUzMGNjXHUzMGNkXHUzMGNlXHUzMGNmXHUzMGQwXHUzMGQxXHUzMGQyXHUzMGQzXHUzMGQ0XHUzMGQ1XHUzMGQ2XHUzMGQ3XHUz''@;'; put 'put ''MGQ4XHUzMGQ5XHUzMGRhXHUzMGRiXHUzMGRjXHUzMGRkXHUzMGRlXHUzMGRmXHUzMGUwXHUzMGUxXHUzMGUyXHUzMGUzXHUzMGU0XHUzMGU1XHUzMGU2XHUzMGU3XHUzMGU4XHUzMGU5XHUzMGVhXHUzMGViXHUzMGVjXHUzMGVkXHUzMGVlXHUzMGVmXHUzMGYwXHUzMGYxXHUzMGYyXHUzMGYz''@;'; put 'put ''XHUzMGY0XHUzMGY1XHUzMGY2XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTY1XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNjVdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTY1XVtnXV09NDIyNDArZyx5''@;'; put 'put ''WzQyMjQwK2ddPV9bMTY1XVtnXSk7Zm9yKF9bMTY2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHUwMzkxXHUwMzkyXHUwMzkzXHUwMzk0XHUwMzk1XHUwMzk2XHUwMzk3XHUwMzk4XHUwMzk5XHUwMzlhXHUwMzliXHUwMzljXHUwMzlkXHUwMzllXHUwMzlmXHUwM2EwXHUwM2ExXHUwM2EzXHUwM2E0XHUwM2E1XHUwM2E2XHUwM2E3XHUwM2E4XHUwM2E5XHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwM2IxXHUwM2IyXHUwM2IzXHUwM2I0XHUwM2I1XHUwM2I2XHUwM2I3XHUwM2I4XHUwM2I5XHUwM2JhXHUwM2JiXHUwM2JjXHUwM2JkXHUwM2JlXHUwM2JmXHUwM2MwXHUwM2MxXHUwM2MzXHUwM2M0XHUwM2M1XHUwM2M2XHUw''@;'; put 'put ''M2M3XHUwM2M4XHUwM2M5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTY2XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNjZdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTY2XVtn''@;'; put 'put ''XV09NDI0OTYrZyx5WzQyNDk2K2ddPV9bMTY2XVtnXSk7Zm9yKF9bMTY3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwNDEwXHUwNDExXHUwNDEyXHUwNDEzXHUwNDE0XHUwNDE1XHUwNDAxXHUwNDE2XHUwNDE3XHUwNDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDI0XHUwNDI1XHUwNDI2''@;'; put 'put ''XHUwNDI3XHUwNDI4XHUwNDI5XHUwNDJhXHUwNDJiXHUwNDJjXHUwNDJkXHUwNDJlXHUwNDJmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwNDMwXHUwNDMxXHUwNDMyXHUw''@;'; put 'put ''NDMzXHUwNDM0XHUwNDM1XHUwNDUxXHUwNDM2XHUwNDM3XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNkXHUwNDNlXHUwNDNmXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDQ0XHUwNDQ1XHUwNDQ2XHUwNDQ3XHUwNDQ4XHUwNDQ5XHUwNDRhXHUwNDRiXHUwNDRjXHUwNDRk''@;'; put 'put ''XHUwNDRlXHUwNDRmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTY3XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNjddW2ddLmNoYXJDb2RlQXQoMCkm''@;'; put 'put ''JihJW19bMTY3XVtnXV09NDI3NTIrZyx5WzQyNzUyK2ddPV9bMTY3XVtnXSk7Zm9yKF9bMTY4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwMTAxXHhlMVx1MDFjZVx4ZTBcdTAxMTNceGU5XHUwMTFiXHhlOFx1MDEyYlx4ZWRcdTAxZDBceGVjXHUwMTRkXHhmM1x1MDFkMlx4ZjJcdTAxNmJceGZhXHUwMWQ0XHhmOVx1MDFkNlx1MDFkOFx1MDFkYVx1MDFkY1x4ZmNceGVh''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMTA1XHUzMTA2XHUzMTA3XHUzMTA4XHUzMTA5XHUzMTBhXHUzMTBiXHUzMTBjXHUzMTBkXHUzMTBlXHUzMTBmXHUzMTEwXHUzMTExXHUzMTEyXHUzMTEzXHUzMTE0XHUzMTE1XHUz''@;'; put 'put ''MTE2XHUzMTE3XHUzMTE4XHUzMTE5XHUzMTFhXHUzMTFiXHUzMTFjXHUzMTFkXHUzMTFlXHUzMTFmXHUzMTIwXHUzMTIxXHUzMTIyXHUzMTIzXHUzMTI0XHUzMTI1XHUzMTI2XHUzMTI3XHUzMTI4XHUzMTI5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTY4XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNjhdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTY4XVtn''@;'; put 'put ''XV09NDMwMDgrZyx5WzQzMDA4K2ddPV9bMTY4XVtnXSk7Zm9yKF9bMTY5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyNTAwXHUyNTAxXHUyNTAyXHUyNTAzXHUyNTA0XHUyNTA1XHUyNTA2XHUyNTA3XHUyNTA4XHUyNTA5XHUyNTBhXHUyNTBiXHUyNTBjXHUyNTBkXHUyNTBlXHUyNTBmXHUyNTEwXHUyNTExXHUyNTEyXHUyNTEzXHUyNTE0''@;'; put 'put ''XHUyNTE1XHUyNTE2XHUyNTE3XHUyNTE4XHUyNTE5XHUyNTFhXHUyNTFiXHUyNTFjXHUyNTFkXHUyNTFlXHUyNTFmXHUyNTIwXHUyNTIxXHUyNTIyXHUyNTIzXHUyNTI0XHUyNTI1XHUyNTI2XHUyNTI3XHUyNTI4XHUyNTI5XHUyNTJhXHUyNTJiXHUyNTJjXHUyNTJkXHUyNTJlXHUyNTJmXHUy''@;'; put 'put ''NTMwXHUyNTMxXHUyNTMyXHUyNTMzXHUyNTM0XHUyNTM1XHUyNTM2XHUyNTM3XHUyNTM4XHUyNTM5XHUyNTNhXHUyNTNiXHUyNTNjXHUyNTNkXHUyNTNlXHUyNTNmXHUyNTQwXHUyNTQxXHUyNTQyXHUyNTQzXHUyNTQ0XHUyNTQ1XHUyNTQ2XHUyNTQ3XHUyNTQ4XHUyNTQ5XHUyNTRhXHUyNTRi''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTY5XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNjldW2ddLmNoYXJDb2RlQXQoMCkm''@;'; put 'put ''JihJW19bMTY5XVtnXV09NDMyNjQrZyx5WzQzMjY0K2ddPV9bMTY5XVtnXSk7Zm9yKF9bMTc2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NTRhXHU5NjNmXHU1N2MzXHU2MzI4XHU1NGNlXHU1NTA5XHU1NGMwXHU3NjkxXHU3NjRjXHU4NTNjXHU3N2VlXHU4MjdlXHU3ODhkXHU3MjMxXHU5Njk4XHU5NzhkXHU2YzI4XHU1Yjg5XHU0ZmZhXHU2MzA5XHU2Njk3XHU1Y2I4''@;'; put 'put ''XHU4MGZhXHU2ODQ4XHU4MGFlXHU2NjAyXHU3NmNlXHU1MWY5XHU2NTU2XHU3MWFjXHU3ZmYxXHU4ODg0XHU1MGIyXHU1OTY1XHU2MWNhXHU2ZmIzXHU4MmFkXHU2MzRjXHU2MjUyXHU1M2VkXHU1NDI3XHU3YjA2XHU1MTZiXHU3NWE0XHU1ZGY0XHU2MmQ0XHU4ZGNiXHU5Nzc2XHU2MjhhXHU4''@;'; put 'put ''MDE5XHU1NzVkXHU5NzM4XHU3ZjYyXHU3MjM4XHU3NjdkXHU2N2NmXHU3NjdlXHU2NDQ2XHU0ZjcwXHU4ZDI1XHU2MmRjXHU3YTE3XHU2NTkxXHU3M2VkXHU2NDJjXHU2MjczXHU4MjJjXHU5ODgxXHU2NzdmXHU3MjQ4XHU2MjZlXHU2MmNjXHU0ZjM0XHU3NGUzXHU1MzRhXHU1MjllXHU3ZWNh''@;'; put 'put ''XHU5MGE2XHU1ZTJlXHU2ODg2XHU2OTljXHU4MTgwXHU3ZWQxXHU2OGQyXHU3OGM1XHU4NjhjXHU5NTUxXHU1MDhkXHU4YzI0XHU4MmRlXHU4MGRlXHU1MzA1XHU4OTEyXHU1MjY1XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTc2XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNzZdW2ddLmNo''@;'; put 'put ''YXJDb2RlQXQoMCkmJihJW19bMTc2XVtnXV09NDUwNTYrZyx5WzQ1MDU2K2ddPV9bMTc2XVtnXSk7Zm9yKF9bMTc3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4NTg0XHU5NmY5XHU0ZmRkXHU1ODIxXHU5OTcxXHU1YjlkXHU2MmIxXHU2MmE1XHU2NmI0XHU4Yzc5XHU5YzhkXHU3MjA2XHU2NzZmXHU3ODkxXHU2MGIyXHU1MzUxXHU1MzE3XHU4Zjg4XHU4MGNjXHU4ZDFk''@;'; put 'put ''XHU5NGExXHU1MDBkXHU3MmM4XHU1OTA3XHU2MGViXHU3MTE5XHU4OGFiXHU1OTU0XHU4MmVmXHU2NzJjXHU3YjI4XHU1ZDI5XHU3ZWY3XHU3NTJkXHU2Y2Y1XHU4ZTY2XHU4ZmY4XHU5MDNjXHU5ZjNiXHU2YmQ0XHU5MTE5XHU3YjE0XHU1ZjdjXHU3OGE3XHU4NGQ2XHU4NTNkXHU2YmQ1XHU2''@;'; put 'put ''YmQ5XHU2YmQ2XHU1ZTAxXHU1ZTg3XHU3NWY5XHU5NWVkXHU2NTVkXHU1ZjBhXHU1ZmM1XHU4ZjlmXHU1OGMxXHU4MWMyXHU5MDdmXHU5NjViXHU5N2FkXHU4ZmI5XHU3ZjE2XHU4ZDJjXHU2MjQxXHU0ZmJmXHU1M2Q4XHU1MzVlXHU4ZmE4XHU4ZmE5XHU4ZmFiXHU5MDRkXHU2ODA3XHU1ZjZh''@;'; put 'put ''XHU4MTk4XHU4ODY4XHU5Y2Q2XHU2MThiXHU1MjJiXHU3NjJhXHU1ZjZjXHU2NThjXHU2ZmQyXHU2ZWU4XHU1YmJlXHU2NDQ4XHU1MTc1XHU1MWIwXHU2N2M0XHU0ZTE5XHU3OWM5XHU5OTdjXHU3MGIzXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTc3XS5sZW5ndGg7KytnKTY1NTMzIT09''@;'; put 'put ''X1sxNzddW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTc3XVtnXV09NDUzMTIrZyx5WzQ1MzEyK2ddPV9bMTc3XVtnXSk7Zm9yKF9bMTc4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NWM1XHU1ZTc2XHU3M2JiXHU4M2UwXHU2NGFkXHU2MmU4XHU5NGI1XHU2Y2UyXHU1MzVhXHU1MmMzXHU2NDBmXHU5NGMyXHU3Yjk0XHU0ZjJmXHU1ZTFiXHU4MjM2XHU4MTE2XHU4MThh''@;'; put 'put ''XHU2ZTI0XHU2Y2NhXHU5YTczXHU2MzU1XHU1MzVjXHU1NGZhXHU4ODY1XHU1N2UwXHU0ZTBkXHU1ZTAzXHU2YjY1XHU3YzNmXHU5MGU4XHU2MDE2XHU2NGU2XHU3MzFjXHU4OGMxXHU2NzUwXHU2MjRkXHU4ZDIyXHU3NzZjXHU4ZTI5XHU5MWM3XHU1ZjY5XHU4M2RjXHU4NTIxXHU5OTEwXHU1''@;'; put 'put ''M2MyXHU4Njk1XHU2YjhiXHU2MGVkXHU2MGU4XHU3MDdmXHU4MmNkXHU4MjMxXHU0ZWQzXHU2Y2E3XHU4NWNmXHU2NGNkXHU3Y2Q5XHU2OWZkXHU2NmY5XHU4MzQ5XHU1Mzk1XHU3YjU2XHU0ZmE3XHU1MThjXHU2ZDRiXHU1YzQyXHU4ZTZkXHU2M2QyXHU1M2M5XHU4MzJjXHU4MzM2XHU2N2U1''@;'; put 'put ''XHU3OGI0XHU2NDNkXHU1YmRmXHU1Yzk0XHU1ZGVlXHU4YmU3XHU2MmM2XHU2N2Y0XHU4YzdhXHU2NDAwXHU2M2JhXHU4NzQ5XHU5OThiXHU4YzE3XHU3ZjIwXHU5NGYyXHU0ZWE3XHU5NjEwXHU5OGE0XHU2NjBjXHU3MzE2XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTc4XS5sZW5ndGg7''@;'; put 'put ''KytnKTY1NTMzIT09X1sxNzhdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTc4XVtnXV09NDU1NjgrZyx5WzQ1NTY4K2ddPV9bMTc4XVtnXSk7Zm9yKF9bMTc5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NzNhXHU1YzFkXHU1ZTM4XHU5NTdmXHU1MDdmXHU4MGEwXHU1MzgyXHU2NTVlXHU3NTQ1XHU1NTMxXHU1MDIxXHU4ZDg1XHU2Mjg0XHU5NDllXHU2NzFkXHU1NjMy''@;'; put 'put ''XHU2ZjZlXHU1ZGUyXHU1NDM1XHU3MDkyXHU4ZjY2XHU2MjZmXHU2NGE0XHU2M2EzXHU1ZjdiXHU2Zjg4XHU5MGY0XHU4MWUzXHU4ZmIwXHU1YzE4XHU2NjY4XHU1ZmYxXHU2Yzg5XHU5NjQ4XHU4ZDgxXHU4ODZjXHU2NDkxXHU3OWYwXHU1N2NlXHU2YTU5XHU2MjEwXHU1NDQ4XHU0ZTU4XHU3''@;'; put 'put ''YTBiXHU2MGU5XHU2Zjg0XHU4YmRhXHU2MjdmXHU5MDFlXHU5YThiXHU3OWU0XHU1NDAzXHU3NWY0XHU2MzAxXHU1MzE5XHU2YzYwXHU4ZmRmXHU1ZjFiXHU5YTcwXHU4MDNiXHU5ZjdmXHU0Zjg4XHU1YzNhXHU4ZDY0XHU3ZmM1XHU2NWE1XHU3MGJkXHU1MTQ1XHU1MWIyXHU4NjZiXHU1ZDA3''@;'; put 'put ''XHU1YmEwXHU2MmJkXHU5MTZjXHU3NTc0XHU4ZTBjXHU3YTIwXHU2MTAxXHU3Yjc5XHU0ZWM3XHU3ZWY4XHU3Nzg1XHU0ZTExXHU4MWVkXHU1MjFkXHU1MWZhXHU2YTcxXHU1M2E4XHU4ZTg3XHU5NTA0XHU5NmNmXHU2ZWMxXHU5NjY0XHU2OTVhXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9b''@;'; put 'put ''MTc5XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNzldW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTc5XVtnXV09NDU4MjQrZyx5WzQ1ODI0K2ddPV9bMTc5XVtnXSk7Zm9yKF9bMTgwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ODQwXHU1MGE4XHU3N2Q3XHU2NDEwXHU4OWU2XHU1OTA0XHU2M2UzXHU1ZGRkXHU3YTdmXHU2OTNkXHU0ZjIwXHU4MjM5XHU1NTk4XHU0ZTMy''@;'; put 'put ''XHU3NWFlXHU3YTk3XHU1ZTYyXHU1ZThhXHU5NWVmXHU1MjFiXHU1NDM5XHU3MDhhXHU2Mzc2XHU5NTI0XHU1NzgyXHU2NjI1XHU2OTNmXHU5MTg3XHU1NTA3XHU2ZGYzXHU3ZWFmXHU4ODIyXHU2MjMzXHU3ZWYwXHU3NWI1XHU4MzI4XHU3OGMxXHU5NmNjXHU4ZjllXHU2MTQ4XHU3NGY3XHU4''@;'; put 'put ''YmNkXHU2YjY0XHU1MjNhXHU4ZDUwXHU2YjIxXHU4MDZhXHU4NDcxXHU1NmYxXHU1MzA2XHU0ZWNlXHU0ZTFiXHU1MWQxXHU3Yzk3XHU5MThiXHU3YzA3XHU0ZmMzXHU4ZTdmXHU3YmUxXHU3YTljXHU2NDY3XHU1ZDE0XHU1MGFjXHU4MTA2XHU3NjAxXHU3Y2I5XHU2ZGVjXHU3ZmUwXHU2NzUx''@;'; put 'put ''XHU1YjU4XHU1YmY4XHU3OGNiXHU2NGFlXHU2NDEzXHU2M2FhXHU2MzJiXHU5NTE5XHU2NDJkXHU4ZmJlXHU3YjU0XHU3NjI5XHU2MjUzXHU1OTI3XHU1NDQ2XHU2Yjc5XHU1MGEzXHU2MjM0XHU1ZTI2XHU2Yjg2XHU0ZWUzXHU4ZDM3XHU4ODhiXHU1Zjg1XHU5MDJlXHVmZmZkIi5zcGxpdCgi''@;'; put 'put ''IiksZz0wO2chPV9bMTgwXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxODBdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTgwXVtnXV09NDYwODArZyx5WzQ2MDgwK2ddPV9bMTgwXVtnXSk7Zm9yKF9bMTgxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2MDIwXHU4MDNkXHU2MmM1XHU0ZTM5XHU1MzU1XHU5MGY4XHU2M2I4XHU4MGM2XHU2NWU2XHU2YzJlXHU0ZjQ2XHU2MGVl''@;'; put 'put ''XHU2ZGUxXHU4YmRlXHU1ZjM5XHU4NmNiXHU1ZjUzXHU2MzIxXHU1MTVhXHU4MzYxXHU2ODYzXHU1MjAwXHU2MzYzXHU4ZTQ4XHU1MDEyXHU1YzliXHU3OTc3XHU1YmZjXHU1MjMwXHU3YTNiXHU2MGJjXHU5MDUzXHU3NmQ3XHU1ZmI3XHU1Zjk3XHU3Njg0XHU4ZTZjXHU3MDZmXHU3NjdiXHU3''@;'; put 'put ''YjQ5XHU3N2FhXHU1MWYzXHU5MDkzXHU1ODI0XHU0ZjRlXHU2ZWY0XHU4ZmVhXHU2NTRjXHU3YjFiXHU3MmM0XHU2ZGE0XHU3ZmRmXHU1YWUxXHU2MmI1XHU1ZTk1XHU1NzMwXHU4NDgyXHU3YjJjXHU1ZTFkXHU1ZjFmXHU5MDEyXHU3ZjE0XHU5OGEwXHU2MzgyXHU2ZWM3XHU3ODk4XHU3MGI5''@;'; put 'put ''XHU1MTc4XHU5NzViXHU1N2FiXHU3NTM1XHU0ZjQzXHU3NTM4XHU1ZTk3XHU2MGU2XHU1OTYwXHU2ZGMwXHU2YmJmXHU3ODg5XHU1M2ZjXHU5NmQ1XHU1MWNiXHU1MjAxXHU2Mzg5XHU1NDBhXHU5NDkzXHU4YzAzXHU4ZGNjXHU3MjM5XHU3ODlmXHU4Nzc2XHU4ZmVkXHU4YzBkXHU1M2UwXHVm''@;'; put 'put ''ZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTgxXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxODFdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTgxXVtnXV09NDYzMzYrZyx5WzQ2MzM2K2ddPV9bMTgxXVtnXSk7Zm9yKF9bMTgyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU0ZTAxXHU3NmVmXHU1M2VlXHU5NDg5XHU5ODc2XHU5ZjBlXHU5NTJkXHU1YjlhXHU4YmEyXHU0ZTIy''@;'; put 'put ''XHU0ZTFjXHU1MWFjXHU4NDYzXHU2MWMyXHU1MmE4XHU2ODBiXHU0Zjk3XHU2MDZiXHU1MWJiXHU2ZDFlXHU1MTVjXHU2Mjk2XHU2NTk3XHU5NjYxXHU4YzQ2XHU5MDE3XHU3NWQ4XHU5MGZkXHU3NzYzXHU2YmQyXHU3MjhhXHU3MmVjXHU4YmZiXHU1ODM1XHU3Nzc5XHU4ZDRjXHU2NzVjXHU5''@;'; put 'put ''NTQwXHU4MDlhXHU1ZWE2XHU2ZTIxXHU1OTkyXHU3YWVmXHU3N2VkXHU5NTNiXHU2YmI1XHU2NWFkXHU3ZjBlXHU1ODA2XHU1MTUxXHU5NjFmXHU1YmY5XHU1OGE5XHU1NDI4XHU4ZTcyXHU2NTY2XHU5ODdmXHU1NmU0XHU5NDlkXHU3NmZlXHU5MDQxXHU2Mzg3XHU1NGM2XHU1OTFhXHU1OTNh''@;'; put 'put ''XHU1NzliXHU4ZWIyXHU2NzM1XHU4ZGZhXHU4MjM1XHU1MjQxXHU2MGYwXHU1ODE1XHU4NmZlXHU1Y2U4XHU5ZTQ1XHU0ZmM0XHU5ODlkXHU4YmI5XHU1YTI1XHU2MDc2XHU1Mzg0XHU2MjdjXHU5MDRmXHU5MTAyXHU5OTdmXHU2MDY5XHU4MDBjXHU1MTNmXHU4MDMzXHU1YzE0XHU5OTc1XHU2''@;'; put 'put ''ZDMxXHU0ZThjXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTgyXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxODJdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTgyXVtnXV09NDY1OTIrZyx5WzQ2NTkyK2ddPV9bMTgyXVtnXSk7Zm9yKF9bMTgzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4ZDMwXHU1M2QxXHU3ZjVhXHU3YjRmXHU0ZjEwXHU0ZTRmXHU5NjAwXHU2Y2Q1''@;'; put 'put ''XHU3M2QwXHU4NWU5XHU1ZTA2XHU3NTZhXHU3ZmZiXHU2YTBhXHU3N2ZlXHU5NDkyXHU3ZTQxXHU1MWUxXHU3MGU2XHU1M2NkXHU4ZmQ0XHU4MzAzXHU4ZDI5XHU3MmFmXHU5OTZkXHU2Y2RiXHU1NzRhXHU4MmIzXHU2NWI5XHU4MGFhXHU2MjNmXHU5NjMyXHU1OWE4XHU0ZWZmXHU4YmJmXHU3''@;'; put 'put ''ZWJhXHU2NTNlXHU4M2YyXHU5NzVlXHU1NTYxXHU5OGRlXHU4MGE1XHU1MzJhXHU4YmZkXHU1NDIwXHU4MGJhXHU1ZTlmXHU2Y2I4XHU4ZDM5XHU4MmFjXHU5MTVhXHU1NDI5XHU2YzFiXHU1MjA2XHU3ZWI3XHU1NzVmXHU3MTFhXHU2YzdlXHU3Yzg5XHU1OTRiXHU0ZWZkXHU1ZmZmXHU2MTI0''@;'; put 'put ''XHU3Y2FhXHU0ZTMwXHU1YzAxXHU2N2FiXHU4NzAyXHU1Y2YwXHU5NTBiXHU5OGNlXHU3NWFmXHU3MGZkXHU5MDIyXHU1MWFmXHU3ZjFkXHU4YmJkXHU1OTQ5XHU1MWU0XHU0ZjViXHU1NDI2XHU1OTJiXHU2NTc3XHU4MGE0XHU1Yjc1XHU2Mjc2XHU2MmMyXHU4ZjkwXHU1ZTQ1XHU2YzFmXHU3''@;'; put 'put ''YjI2XHU0ZjBmXHU0ZmQ4XHU2NzBkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTgzXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxODNdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTgzXVtnXV09NDY4NDgrZyx5WzQ2ODQ4K2ddPV9bMTgzXVtnXSk7Zm9yKF9bMTg0XT0iXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ZDZlXHU2ZGFhXHU3OThmXHU4OGIxXHU1ZjE3XHU3NTJi''@;'; put 'put ''XHU2MjlhXHU4Zjg1XHU0ZmVmXHU5MWRjXHU2NWE3XHU4MTJmXHU4MTUxXHU1ZTljXHU4MTUwXHU4ZDc0XHU1MjZmXHU4OTg2XHU4ZDRiXHU1OTBkXHU1MDg1XHU0ZWQ4XHU5NjFjXHU3MjM2XHU4MTc5XHU4ZDFmXHU1YmNjXHU4YmEzXHU5NjQ0XHU1OTg3XHU3ZjFhXHU1NDkwXHU1Njc2XHU1''@;'; put 'put ''NjBlXHU4YmU1XHU2NTM5XHU2OTgyXHU5NDk5XHU3NmQ2XHU2ZTg5XHU1ZTcyXHU3NTE4XHU2NzQ2XHU2N2QxXHU3YWZmXHU4MDlkXHU4ZDc2XHU2MTFmXHU3OWM2XHU2NTYyXHU4ZDYzXHU1MTg4XHU1MjFhXHU5NGEyXHU3ZjM4XHU4MDliXHU3ZWIyXHU1Yzk3XHU2ZTJmXHU2NzYwXHU3YmQ5''@;'; put 'put ''XHU3NjhiXHU5YWQ4XHU4MThmXHU3Zjk0XHU3Y2Q1XHU2NDFlXHU5NTUwXHU3YTNmXHU1NDRhXHU1NGU1XHU2YjRjXHU2NDAxXHU2MjA4XHU5ZTNkXHU4MGYzXHU3NTk5XHU1MjcyXHU5NzY5XHU4NDViXHU2ODNjXHU4NmU0XHU5NjAxXHU5Njk0XHU5NGVjXHU0ZTJhXHU1NDA0XHU3ZWQ5XHU2''@;'; put 'put ''ODM5XHU4ZGRmXHU4MDE1XHU2NmY0XHU1ZTlhXHU3ZmI5XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTg0XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxODRdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTg0XVtnXV09NDcxMDQrZyx5WzQ3MTA0K2ddPV9bMTg0XVtnXSk7Zm9yKF9bMTg1XT0i''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1N2MyXHU4MDNmXHU2ODk3XHU1ZGU1''@;'; put 'put ''XHU2NTNiXHU1MjlmXHU2MDZkXHU5ZjlhXHU0ZjliXHU4ZWFjXHU1MTZjXHU1YmFiXHU1ZjEzXHU1ZGU5XHU2YzVlXHU2MmYxXHU4ZDIxXHU1MTcxXHU5NGE5XHU1MmZlXHU2YzlmXHU4MmRmXHU3MmQ3XHU1N2EyXHU2Nzg0XHU4ZDJkXHU1OTFmXHU4ZjljXHU4M2M3XHU1NDk1XHU3YjhkXHU0''@;'; put 'put ''ZjMwXHU2Y2JkXHU1YjY0XHU1OWQxXHU5ZjEzXHU1M2U0XHU4NmNhXHU5YWE4XHU4YzM3XHU4MGExXHU2NTQ1XHU5ODdlXHU1NmZhXHU5NmM3XHU1MjJlXHU3NGRjXHU1MjUwXHU1YmUxXHU2MzAyXHU4OTAyXHU0ZTU2XHU2MmQwXHU2MDJhXHU2OGZhXHU1MTczXHU1Yjk4XHU1MWEwXHU4OWMy''@;'; put 'put ''XHU3YmExXHU5OTg2XHU3ZjUwXHU2MGVmXHU3MDRjXHU4ZDJmXHU1MTQ5XHU1ZTdmXHU5MDFiXHU3NDcwXHU4OWM0XHU1NzJkXHU3ODQ1XHU1ZjUyXHU5ZjlmXHU5NWZhXHU4ZjY4XHU5YjNjXHU4YmUxXHU3Njc4XHU2ODQyXHU2N2RjXHU4ZGVhXHU4ZDM1XHU1MjNkXHU4ZjhhXHU2ZWRhXHU2''@;'; put 'put ''OGNkXHU5NTA1XHU5MGVkXHU1NmZkXHU2NzljXHU4OGY5XHU4ZmM3XHU1NGM4XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTg1XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxODVdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTg1XVtnXV09NDczNjArZyx5WzQ3MzYwK2ddPV9bMTg1XVtnXSk7''@;'; put 'put ''Zm9yKF9bMTg2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5YWI4XHU1YjY5''@;'; put 'put ''XHU2ZDc3XHU2YzI2XHU0ZWE1XHU1YmIzXHU5YTg3XHU5MTYzXHU2MWE4XHU5MGFmXHU5N2U5XHU1NDJiXHU2ZGI1XHU1YmQyXHU1MWZkXHU1NThhXHU3ZjU1XHU3ZmYwXHU2NGJjXHU2MzRkXHU2NWYxXHU2MWJlXHU2MDhkXHU3MTBhXHU2YzU3XHU2YzQ5XHU1OTJmXHU2NzZkXHU4MjJhXHU1''@;'; put 'put ''OGQ1XHU1NjhlXHU4YzZhXHU2YmViXHU5MGRkXHU1OTdkXHU4MDE3XHU1M2Y3XHU2ZDY5XHU1NDc1XHU1NTlkXHU4Mzc3XHU4M2NmXHU2ODM4XHU3OWJlXHU1NDhjXHU0ZjU1XHU1NDA4XHU3NmQyXHU4Yzg5XHU5NjAyXHU2Y2IzXHU2ZGI4XHU4ZDZiXHU4OTEwXHU5ZTY0XHU4ZDNhXHU1NjNm''@;'; put 'put ''XHU5ZWQxXHU3NWQ1XHU1Zjg4XHU3MmUwXHU2MDY4XHU1NGZjXHU0ZWE4XHU2YTJhXHU4ODYxXHU2MDUyXHU4ZjcwXHU1NGM0XHU3MGQ4XHU4Njc5XHU5ZTNmXHU2ZDJhXHU1YjhmXHU1ZjE4XHU3ZWEyXHU1NTg5XHU0ZmFmXHU3MzM0XHU1NDNjXHU1MzlhXHU1MDE5XHU1NDBlXHU1NDdjXHU0''@;'; put 'put ''ZTRlXHU1ZmZkXHU3NDVhXHU1OGY2XHU4NDZiXHU4MGUxXHU4Nzc0XHU3MmQwXHU3Y2NhXHU2ZTU2XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTg2XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxODZdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTg2XVtnXV09NDc2MTYrZyx5WzQ3NjE2K2dd''@;'; put 'put ''PV9bMTg2XVtnXSk7Zm9yKF9bMTg3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHU1ZjI3XHU4NjRlXHU1NTJjXHU2MmE0XHU0ZTkyXHU2Y2FhXHU2MjM3XHU4MmIxXHU1NGQ3XHU1MzRlXHU3MzNlXHU2ZWQxXHU3NTNiXHU1MjEyXHU1MzE2XHU4YmRkXHU2OWQwXHU1ZjhhXHU2MDAwXHU2ZGVlXHU1NzRmXHU2YjIyXHU3M2FmXHU2ODUzXHU4ZmQ4XHU3ZjEzXHU2MzYyXHU2''@;'; put 'put ''MGEzXHU1NTI0XHU3NWVhXHU4YzYyXHU3MTE1XHU2ZGEzXHU1YmE2XHU1ZTdiXHU4MzUyXHU2MTRjXHU5ZWM0XHU3OGZhXHU4NzU3XHU3YzI3XHU3Njg3XHU1MWYwXHU2MGY2XHU3MTRjXHU2NjQzXHU1ZTRjXHU2MDRkXHU4YzBlXHU3MDcwXHU2MzI1XHU4Zjg5XHU1ZmJkXHU2MDYyXHU4NmQ0''@;'; put 'put ''XHU1NmRlXHU2YmMxXHU2MDk0XHU2MTY3XHU1MzQ5XHU2MGUwXHU2NjY2XHU4ZDNmXHU3OWZkXHU0ZjFhXHU3MGU5XHU2YzQ3XHU4YmIzXHU4YmYyXHU3ZWQ4XHU4MzY0XHU2NjBmXHU1YTVhXHU5YjQyXHU2ZDUxXHU2ZGY3XHU4YzQxXHU2ZDNiXHU0ZjE5XHU3MDZiXHU4M2I3XHU2MjE2XHU2''@;'; put 'put ''MGQxXHU5NzBkXHU4ZDI3XHU3OTc4XHU1MWZiXHU1NzNlXHU1N2ZhXHU2NzNhXHU3NTc4XHU3YTNkXHU3OWVmXHU3Yjk1XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTg3XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxODddW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTg3XVtnXV09NDc4NzIr''@;'; put 'put ''Zyx5WzQ3ODcyK2ddPV9bMTg3XVtnXSk7Zm9yKF9bMTg4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHU4MDhjXHU5OTY1XHU4ZmY5XHU2ZmMwXHU4YmE1XHU5ZTIxXHU1OWVjXHU3ZWU5XHU3ZjA5XHU1NDA5XHU2NzgxXHU2OGQ4XHU4ZjkxXHU3YzRkXHU5NmM2XHU1M2NhXHU2MDI1XHU3NWJlXHU2YzcyXHU1MzczXHU1YWM5XHU3ZWE3XHU2MzI0XHU1MWUwXHU4MTBhXHU1''@;'; put 'put ''ZGYxXHU4NGRmXHU2MjgwXHU1MTgwXHU1YjYzXHU0ZjBlXHU3OTZkXHU1MjQyXHU2MGI4XHU2ZDRlXHU1YmM0XHU1YmMyXHU4YmExXHU4YmIwXHU2NWUyXHU1ZmNjXHU5NjQ1XHU1OTkzXHU3ZWU3XHU3ZWFhXHU1NjA5XHU2N2I3XHU1OTM5XHU0ZjczXHU1YmI2XHU1MmEwXHU4MzVhXHU5ODhh''@;'; put 'put ''XHU4ZDNlXHU3NTMyXHU5NGJlXHU1MDQ3XHU3YTNjXHU0ZWY3XHU2N2I2XHU5YTdlXHU1YWMxXHU2YjdjXHU3NmQxXHU1NzVhXHU1YzE2XHU3YjNhXHU5NWY0XHU3MTRlXHU1MTdjXHU4MGE5XHU4MjcwXHU1OTc4XHU3ZjA0XHU4MzI3XHU2OGMwXHU2N2VjXHU3OGIxXHU3ODc3XHU2MmUzXHU2''@;'; put 'put ''MzYxXHU3YjgwXHU0ZmVkXHU1MjZhXHU1MWNmXHU4MzUwXHU2OWRiXHU5Mjc0XHU4ZGY1XHU4ZDMxXHU4OWMxXHU5NTJlXHU3YmFkXHU0ZWY2XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTg4XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxODhdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTg4''@;'; put 'put ''XVtnXV09NDgxMjgrZyx5WzQ4MTI4K2ddPV9bMTg4XVtnXSk7Zm9yKF9bMTg5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1MDY1XHU4MjMwXHU1MjUxXHU5OTZmXHU2ZTEwXHU2ZTg1XHU2ZGE3XHU1ZWZhXHU1MGY1XHU1OWRjXHU1YzA2XHU2ZDQ2XHU2YzVmXHU3NTg2XHU4NDhiXHU2ODY4XHU1OTU2XHU4YmIyXHU1MzIwXHU5MTcxXHU5NjRkXHU4NTQ5XHU2OTEyXHU3''@;'; put 'put ''OTAxXHU3MTI2XHU4MGY2XHU0ZWE0XHU5MGNhXHU2ZDQ3XHU5YTg0XHU1YTA3XHU1NmJjXHU2NDA1XHU5NGYwXHU3N2ViXHU0ZmE1XHU4MTFhXHU3MmUxXHU4OWQyXHU5OTdhXHU3ZjM0XHU3ZWRlXHU1MjdmXHU2NTU5XHU5MTc1XHU4ZjdmXHU4ZjgzXHU1M2ViXHU3YTk2XHU2M2VkXHU2M2E1''@;'; put 'put ''XHU3Njg2XHU3OWY4XHU4ODU3XHU5NjM2XHU2MjJhXHU1MmFiXHU4MjgyXHU2ODU0XHU2NzcwXHU2Mzc3XHU3NzZiXHU3YWVkXHU2ZDAxXHU3ZWQzXHU4OWUzXHU1OWQwXHU2MjEyXHU4NWM5XHU4MmE1XHU3NTRjXHU1MDFmXHU0ZWNiXHU3NWE1XHU4YmViXHU1YzRhXHU1ZGZlXHU3YjRiXHU2''@;'; put 'put ''NWE0XHU5MWQxXHU0ZWNhXHU2ZDI1XHU4OTVmXHU3ZDI3XHU5NTI2XHU0ZWM1XHU4YzI4XHU4ZmRiXHU5NzczXHU2NjRiXHU3OTgxXHU4ZmQxXHU3MGVjXHU2ZDc4XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTg5XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxODldW2ddLmNoYXJDb2RlQXQo''@;'; put 'put ''MCkmJihJW19bMTg5XVtnXV09NDgzODQrZyx5WzQ4Mzg0K2ddPV9bMTg5XVtnXSk7Zm9yKF9bMTkwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1YzNkXHU1MmIyXHU4MzQ2XHU1MTYyXHU4MzBlXHU3NzViXHU2Njc2XHU5Y2I4XHU0ZWFjXHU2MGNhXHU3Y2JlXHU3Y2IzXHU3ZWNmXHU0ZTk1XHU4YjY2XHU2NjZmXHU5ODg4XHU5NzU5XHU1ODgzXHU2NTZjXHU5NTVjXHU1''@;'; put 'put ''Zjg0XHU3NWM5XHU5NzU2XHU3YWRmXHU3YWRlXHU1MWMwXHU3MGFmXHU3YTk4XHU2M2VhXHU3YTc2XHU3ZWEwXHU3Mzk2XHU5N2VkXHU0ZTQ1XHU3MDc4XHU0ZTVkXHU5MTUyXHU1M2E5XHU2NTUxXHU2NWU3XHU4MWZjXHU4MjA1XHU1NDhlXHU1YzMxXHU3NTlhXHU5N2EwXHU2MmQ4XHU3MmQ5''@;'; put 'put ''XHU3NWJkXHU1YzQ1XHU5YTc5XHU4M2NhXHU1YzQwXHU1NDgwXHU3N2U5XHU0ZTNlXHU2Y2FlXHU4MDVhXHU2MmQyXHU2MzZlXHU1ZGU4XHU1MTc3XHU4ZGRkXHU4ZTFlXHU5NTJmXHU0ZmYxXHU1M2U1XHU2MGU3XHU3MGFjXHU1MjY3XHU2MzUwXHU5ZTQzXHU1YTFmXHU1MDI2XHU3NzM3XHU1''@;'; put 'put ''Mzc3XHU3ZWUyXHU2NDg1XHU2NTJiXHU2Mjg5XHU2Mzk4XHU1MDE0XHU3MjM1XHU4OWM5XHU1MWIzXHU4YmMwXHU3ZWRkXHU1NzQ3XHU4M2NjXHU5NGE3XHU1MTliXHU1NDFiXHU1Y2ZiXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTkwXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxOTBdW2dd''@;'; put 'put ''LmNoYXJDb2RlQXQoMCkmJihJW19bMTkwXVtnXV09NDg2NDArZyx5WzQ4NjQwK2ddPV9bMTkwXVtnXSk7Zm9yKF9bMTkxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU0ZmNhXHU3YWUzXHU2ZDVhXHU5MGUxXHU5YThmXHU1NTgwXHU1NDk2XHU1MzYxXHU1NGFmXHU1ZjAwXHU2M2U5XHU2OTc3XHU1MWVmXHU2MTY4XHU1MjBhXHU1ODJhXHU1MmQ4XHU1NzRlXHU3ODBkXHU3''@;'; put 'put ''NzBiXHU1ZWI3XHU2MTc3XHU3Y2UwXHU2MjViXHU2Mjk3XHU0ZWEyXHU3MDk1XHU4MDAzXHU2MmY3XHU3MGU0XHU5NzYwXHU1Nzc3XHU4MmRiXHU2N2VmXHU2OGY1XHU3OGQ1XHU5ODk3XHU3OWQxXHU1OGYzXHU1NGIzXHU1M2VmXHU2ZTM0XHU1MTRiXHU1MjNiXHU1YmEyXHU4YmZlXHU4MGFm''@;'; put 'put ''XHU1NTQzXHU1N2E2XHU2MDczXHU1NzUxXHU1NDJkXHU3YTdhXHU2MDUwXHU1YjU0XHU2M2E3XHU2MmEwXHU1M2UzXHU2MjYzXHU1YmM3XHU2N2FmXHU1NGVkXHU3YTlmXHU4MmU2XHU5MTc3XHU1ZTkzXHU4OGU0XHU1OTM4XHU1N2FlXHU2MzBlXHU4ZGU4XHU4MGVmXHU1NzU3XHU3Yjc3XHU0''@;'; put 'put ''ZmE5XHU1ZmViXHU1YmJkXHU2YjNlXHU1MzIxXHU3YjUwXHU3MmMyXHU2ODQ2XHU3N2ZmXHU3NzM2XHU2NWY3XHU1MWI1XHU0ZThmXHU3NmQ0XHU1Y2JmXHU3YWE1XHU4NDc1XHU1OTRlXHU5YjQxXHU1MDgwXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTkxXS5sZW5ndGg7KytnKTY1NTMz''@;'; put 'put ''IT09X1sxOTFdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTkxXVtnXV09NDg4OTYrZyx5WzQ4ODk2K2ddPV9bMTkxXVtnXSk7Zm9yKF9bMTkyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5OTg4XHU2MTI3XHU2ZTgzXHU1NzY0XHU2NjA2XHU2MzQ2XHU1NmYwXHU2MmVjXHU2MjY5XHU1ZWQzXHU5NjE0XHU1NzgzXHU2MmM5XHU1NTg3XHU4NzIxXHU4MTRhXHU4ZmEzXHU1''@;'; put 'put ''NTY2XHU4M2IxXHU2NzY1XHU4ZDU2XHU4NGRkXHU1YTZhXHU2ODBmXHU2MmU2XHU3YmVlXHU5NjExXHU1MTcwXHU2ZjljXHU4YzMwXHU2M2ZkXHU4OWM4XHU2MWQyXHU3ZjA2XHU3MGMyXHU2ZWU1XHU3NDA1XHU2OTk0XHU3MmZjXHU1ZWNhXHU5MGNlXHU2NzE3XHU2ZDZhXHU2MzVlXHU1MmIz''@;'; put 'put ''XHU3MjYyXHU4MDAxXHU0ZjZjXHU1OWU1XHU5MTZhXHU3MGQ5XHU2ZDlkXHU1MmQyXHU0ZTUwXHU5NmY3XHU5NTZkXHU4NTdlXHU3OGNhXHU3ZDJmXHU1MTIxXHU1NzkyXHU2NGMyXHU4MDhiXHU3YzdiXHU2Y2VhXHU2OGYxXHU2OTVlXHU1MWI3XHU1Mzk4XHU2OGE4XHU3MjgxXHU5ZWNlXHU3''@;'; put 'put ''YmYxXHU3MmY4XHU3OWJiXHU2ZjEzXHU3NDA2XHU2NzRlXHU5MWNjXHU5Y2E0XHU3OTNjXHU4Mzg5XHU4MzU0XHU1NDBmXHU2ODE3XHU0ZTNkXHU1Mzg5XHU1MmIxXHU3ODNlXHU1Mzg2XHU1MjI5XHU1MDg4XHU0ZjhiXHU0ZmQwXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTkyXS5sZW5n''@;'; put 'put ''dGg7KytnKTY1NTMzIT09X1sxOTJdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTkyXVtnXV09NDkxNTIrZyx5WzQ5MTUyK2ddPV9bMTkyXVtnXSk7Zm9yKF9bMTkzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NWUyXHU3YWNiXHU3YzkyXHU2Y2E1XHU5NmI2XHU1MjliXHU3NDgzXHU1NGU5XHU0ZmU5XHU4MDU0XHU4M2IyXHU4ZmRlXHU5NTcwXHU1ZWM5XHU2MDFjXHU2''@;'; put 'put ''ZDlmXHU1ZTE4XHU2NTViXHU4MTM4XHU5NGZlXHU2MDRiXHU3MGJjXHU3ZWMzXHU3Y2FlXHU1MWM5XHU2ODgxXHU3Y2IxXHU4MjZmXHU0ZTI0XHU4Zjg2XHU5MWNmXHU2NjdlXHU0ZWFlXHU4YzA1XHU2NGE5XHU4MDRhXHU1MGRhXHU3NTk3XHU3MWNlXHU1YmU1XHU4ZmJkXHU2ZjY2XHU0ZTg2''@;'; put 'put ''XHU2NDgyXHU5NTYzXHU1ZWQ2XHU2NTk5XHU1MjE3XHU4OGMyXHU3MGM4XHU1MmEzXHU3MzBlXHU3NDMzXHU2Nzk3XHU3OGY3XHU5NzE2XHU0ZTM0XHU5MGJiXHU5Y2RlXHU2ZGNiXHU1MWRiXHU4ZDQxXHU1NDFkXHU2MmNlXHU3M2IyXHU4M2YxXHU5NmY2XHU5Zjg0XHU5NGMzXHU0ZjM2XHU3''@;'; put 'put ''ZjlhXHU1MWNjXHU3MDc1XHU5Njc1XHU1Y2FkXHU5ODg2XHU1M2U2XHU0ZWU0XHU2ZTljXHU3NDA5XHU2OWI0XHU3ODZiXHU5OThmXHU3NTU5XHU1MjE4XHU3NjI0XHU2ZDQxXHU2N2YzXHU1MTZkXHU5Zjk5XHU4MDRiXHU1NDk5XHU3YjNjXHU3YWJmXHVmZmZkIi5zcGxpdCgiIiksZz0wO2ch''@;'; put 'put ''PV9bMTkzXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxOTNdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTkzXVtnXV09NDk0MDgrZyx5WzQ5NDA4K2ddPV9bMTkzXVtnXSk7Zm9yKF9bMTk0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5Njg2XHU1Nzg0XHU2MmUyXHU5NjQ3XHU2OTdjXHU1YTA0XHU2NDAyXHU3YmQzXHU2ZjBmXHU5NjRiXHU4MmE2XHU1MzYyXHU5ODg1XHU1''@;'; put 'put ''ZTkwXHU3MDg5XHU2M2IzXHU1MzY0XHU4NjRmXHU5YzgxXHU5ZTkzXHU3ODhjXHU5NzMyXHU4ZGVmXHU4ZDQyXHU5ZTdmXHU2ZjVlXHU3OTg0XHU1ZjU1XHU5NjQ2XHU2MjJlXHU5YTc0XHU1NDE1XHU5NGRkXHU0ZmEzXHU2NWM1XHU1YzY1XHU1YzYxXHU3ZjE1XHU4NjUxXHU2YzJmXHU1Zjhi''@;'; put 'put ''XHU3Mzg3XHU2ZWU0XHU3ZWZmXHU1Y2U2XHU2MzFiXHU1YjZhXHU2ZWU2XHU1Mzc1XHU0ZTcxXHU2M2EwXHU3NTY1XHU2MmExXHU4ZjZlXHU0ZjI2XHU0ZWQxXHU2Y2E2XHU3ZWI2XHU4YmJhXHU4NDFkXHU4N2JhXHU3ZjU3XHU5MDNiXHU5NTIzXHU3YmE5XHU5YWExXHU4OGY4XHU4NDNkXHU2''@;'; put 'put ''ZDFiXHU5YTg2XHU3ZWRjXHU1OTg4XHU5ZWJiXHU3MzliXHU3ODAxXHU4NjgyXHU5YTZjXHU5YTgyXHU1NjFiXHU1NDE3XHU1N2NiXHU0ZTcwXHU5ZWE2XHU1MzU2XHU4ZmM4XHU4MTA5XHU3NzkyXHU5OTkyXHU4NmVlXHU2ZWUxXHU4NTEzXHU2NmZjXHU2MTYyXHU2ZjJiXHVmZmZkIi5zcGxp''@;'; put 'put ''dCgiIiksZz0wO2chPV9bMTk0XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxOTRdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTk0XVtnXV09NDk2NjQrZyx5WzQ5NjY0K2ddPV9bMTk0XVtnXSk7Zm9yKF9bMTk1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4YzI5XHU4MjkyXHU4MzJiXHU3NmYyXHU2YzEzXHU1ZmQ5XHU4M2JkXHU3MzJiXHU4MzA1XHU5NTFhXHU2YmRiXHU3''@;'; put 'put ''N2RiXHU5NGM2XHU1MzZmXHU4MzAyXHU1MTkyXHU1ZTNkXHU4YzhjXHU4ZDM4XHU0ZTQ4XHU3M2FiXHU2NzlhXHU2ODg1XHU5MTc2XHU5NzA5XHU3MTY0XHU2Y2ExXHU3NzA5XHU1YTkyXHU5NTQxXHU2YmNmXHU3ZjhlXHU2NjI3XHU1YmQwXHU1OWI5XHU1YTlhXHU5NWU4XHU5NWY3XHU0ZWVj''@;'; put 'put ''XHU4NDBjXHU4NDk5XHU2YWFjXHU3NmRmXHU5NTMwXHU3MzFiXHU2OGE2XHU1YjVmXHU3NzJmXHU5MTlhXHU5NzYxXHU3Y2RjXHU4ZmY3XHU4YzFjXHU1ZjI1XHU3YzczXHU3OWQ4XHU4OWM1XHU2Y2NjXHU4NzFjXHU1YmM2XHU1ZTQyXHU2OGM5XHU3NzIwXHU3ZWY1XHU1MTk1XHU1MTRkXHU1''@;'; put 'put ''MmM5XHU1YTI5XHU3ZjA1XHU5NzYyXHU4MmQ3XHU2M2NmXHU3Nzg0XHU4NWQwXHU3OWQyXHU2ZTNhXHU1ZTk5XHU1OTk5XHU4NTExXHU3MDZkXHU2YzExXHU2MmJmXHU3NmJmXHU2NTRmXHU2MGFmXHU5NWZkXHU2NjBlXHU4NzlmXHU5ZTIzXHU5NGVkXHU1NDBkXHU1NDdkXHU4YzJjXHU2NDc4''@;'; put 'put ''XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTk1XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxOTVdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTk1XVtnXV09NDk5MjArZyx5WzQ5OTIwK2ddPV9bMTk1XVtnXSk7Zm9yKF9bMTk2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2NDc5XHU4NjExXHU2YTIxXHU4MTljXHU3OGU4XHU2NDY5XHU5YjU0XHU2MmI5XHU2NzJiXHU4''@;'; put 'put ''M2FiXHU1OGE4XHU5ZWQ4XHU2Y2FiXHU2ZjIwXHU1YmRlXHU5NjRjXHU4YzBiXHU3MjVmXHU2N2QwXHU2MmM3XHU3MjYxXHU0ZWE5XHU1OWM2XHU2YmNkXHU1ODkzXHU2NmFlXHU1ZTU1XHU1MmRmXHU2MTU1XHU2NzI4XHU3NmVlXHU3NzY2XHU3MjY3XHU3YTQ2XHU2MmZmXHU1NGVhXHU1NDUw''@;'; put 'put ''XHU5NGEwXHU5MGEzXHU1YTFjXHU3ZWIzXHU2YzE2XHU0ZTQzXHU1OTc2XHU4MDEwXHU1OTQ4XHU1MzU3XHU3NTM3XHU5NmJlXHU1NmNhXHU2MzIwXHU4MTExXHU2MDdjXHU5NWY5XHU2ZGQ2XHU1NDYyXHU5OTgxXHU1MTg1XHU1YWU5XHU4MGZkXHU1OWFlXHU5NzEzXHU1MDJhXHU2Y2U1XHU1''@;'; put 'put ''YzNjXHU2MmRmXHU0ZjYwXHU1MzNmXHU4MTdiXHU5MDA2XHU2ZWJhXHU4NTJiXHU2MmM4XHU1ZTc0XHU3OGJlXHU2NGI1XHU2MzdiXHU1ZmY1XHU1YTE4XHU5MTdmXHU5ZTFmXHU1YzNmXHU2MzRmXHU4MDQyXHU1YjdkXHU1NTZlXHU5NTRhXHU5NTRkXHU2ZDg1XHU2MGE4XHU2N2UwXHU3MmRl''@;'; put 'put ''XHU1MWRkXHU1YjgxXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTk2XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxOTZdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTk2XVtnXV09NTAxNzYrZyx5WzUwMTc2K2ddPV9bMTk2XVtnXSk7Zm9yKF9bMTk3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2MmU3XHU2Y2RlXHU3MjViXHU2MjZkXHU5NGFlXHU3ZWJkXHU4MTEzXHU2''@;'; put 'put ''ZDUzXHU1MTljXHU1ZjA0XHU1OTc0XHU1MmFhXHU2MDEyXHU1OTczXHU2Njk2XHU4NjUwXHU3NTlmXHU2MzJhXHU2MWU2XHU3Y2VmXHU4YmZhXHU1NGU2XHU2YjI3XHU5ZTI1XHU2YmI0XHU4NWQ1XHU1NDU1XHU1MDc2XHU2Y2E0XHU1NTZhXHU4ZGI0XHU3MjJjXHU1ZTE1XHU2MDE1XHU3NDM2''@;'; put 'put ''XHU2MmNkXHU2MzkyXHU3MjRjXHU1Zjk4XHU2ZTQzXHU2ZDNlXHU2NTAwXHU2ZjU4XHU3NmQ4XHU3OGQwXHU3NmZjXHU3NTU0XHU1MjI0XHU1M2RiXHU0ZTUzXHU1ZTllXHU2NWMxXHU4MDJhXHU4MGQ2XHU2MjliXHU1NDg2XHU1MjI4XHU3MGFlXHU4ODhkXHU4ZGQxXHU2Y2UxXHU1NDc4XHU4''@;'; put 'put ''MGRhXHU1N2Y5XHU4OGY0XHU4ZDU0XHU5NjZhXHU5MTRkXHU0ZjY5XHU2YzliXHU1NWI3XHU3NmM2XHU3ODMwXHU2MmE4XHU3MGY5XHU2ZjhlXHU1ZjZkXHU4NGVjXHU2OGRhXHU3ODdjXHU3YmY3XHU4MWE4XHU2NzBiXHU5ZTRmXHU2MzY3XHU3OGIwXHU1NzZmXHU3ODEyXHU5NzM5XHU2Mjc5''@;'; put 'put ''XHU2MmFiXHU1Mjg4XHU3NDM1XHU2YmQ3XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTk3XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxOTddW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTk3XVtnXV09NTA0MzIrZyx5WzUwNDMyK2ddPV9bMTk3XVtnXSk7Zm9yKF9bMTk4XT0iXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NTY0XHU4MTNlXHU3NWIyXHU3NmFlXHU1MzM5XHU3''@;'; put 'put ''NWRlXHU1MGZiXHU1YzQxXHU4YjZjXHU3YmM3XHU1MDRmXHU3MjQ3XHU5YTk3XHU5OGQ4XHU2ZjAyXHU3NGUyXHU3OTY4XHU2NDg3XHU3N2E1XHU2MmZjXHU5ODkxXHU4ZDJiXHU1NGMxXHU4MDU4XHU0ZTUyXHU1NzZhXHU4MmY5XHU4NDBkXHU1ZTczXHU1MWVkXHU3NGY2XHU4YmM0XHU1YzRm''@;'; put 'put ''XHU1NzYxXHU2Y2ZjXHU5ODg3XHU1YTQ2XHU3ODM0XHU5YjQ0XHU4ZmViXHU3Yzk1XHU1MjU2XHU2MjUxXHU5NGZhXHU0ZWM2XHU4Mzg2XHU4NDYxXHU4M2U5XHU4NGIyXHU1N2Q0XHU2NzM0XHU1NzAzXHU2NjZlXHU2ZDY2XHU4YzMxXHU2NmRkXHU3MDExXHU2NzFmXHU2YjNhXHU2ODE2XHU2''@;'; put 'put ''MjFhXHU1OWJiXHU0ZTAzXHU1MWM0XHU2ZjA2XHU2N2QyXHU2YzhmXHU1MTc2XHU2OGNiXHU1OTQ3XHU2YjY3XHU3NTY2XHU1ZDBlXHU4MTEwXHU5ZjUwXHU2NWQ3XHU3OTQ4XHU3OTQxXHU5YTkxXHU4ZDc3XHU1YzgyXHU0ZTVlXHU0ZjAxXHU1NDJmXHU1OTUxXHU3ODBjXHU1NjY4XHU2YzE0''@;'; put 'put ''XHU4ZmM0XHU1ZjAzXHU2YzdkXHU2Y2UzXHU4YmFiXHU2MzkwXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTk4XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxOThdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTk4XVtnXV09NTA2ODgrZyx5WzUwNjg4K2ddPV9bMTk4XVtnXSk7Zm9yKF9bMTk5''@;'; put 'put ''XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2MDcwXHU2ZDNkXHU3Mjc1XHU2''@;'; put 'put ''MjY2XHU5NDhlXHU5NGM1XHU1MzQzXHU4ZmMxXHU3YjdlXHU0ZWRmXHU4YzI2XHU0ZTdlXHU5ZWQ0XHU5NGIxXHU5NGIzXHU1MjRkXHU2ZjVjXHU5MDYzXHU2ZDQ1XHU4YzM0XHU1ODExXHU1ZDRjXHU2YjIwXHU2YjQ5XHU2N2FhXHU1NDViXHU4MTU0XHU3ZjhjXHU1ODk5XHU4NTM3XHU1ZjNh''@;'; put 'put ''XHU2MmEyXHU2YTQ3XHU5NTM5XHU2NTcyXHU2MDg0XHU2ODY1XHU3N2E3XHU0ZTU0XHU0ZmE4XHU1ZGU3XHU5Nzk4XHU2NGFjXHU3ZmQ4XHU1Y2VkXHU0ZmNmXHU3YThkXHU1MjA3XHU4MzA0XHU0ZTE0XHU2MDJmXHU3YTgzXHU5NGE2XHU0ZmI1XHU0ZWIyXHU3OWU2XHU3NDM0XHU1MmU0XHU4''@;'; put 'put ''MmI5XHU2NGQyXHU3OWJkXHU1YmRkXHU2YzgxXHU5NzUyXHU4ZjdiXHU2YzIyXHU1MDNlXHU1MzdmXHU2ZTA1XHU2NGNlXHU2Njc0XHU2YzMwXHU2MGM1XHU5ODc3XHU4YmY3XHU1ZTg2XHU3NDNjXHU3YTc3XHU3OWNiXHU0ZTE4XHU5MGIxXHU3NDAzXHU2YzQyXHU1NmRhXHU5MTRiXHU2Y2M1''@;'; put 'put ''XHU4ZDhiXHU1MzNhXHU4NmM2XHU2NmYyXHU4ZWFmXHU1YzQ4XHU5YTcxXHU2ZTIwXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTk5XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxOTldW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTk5XVtnXV09NTA5NDQrZyx5WzUwOTQ0K2ddPV9bMTk5XVtn''@;'; put 'put ''XSk7Zm9yKF9bMjAwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1M2Q2XHU1''@;'; put 'put ''YTM2XHU5ZjhiXHU4ZGEzXHU1M2JiXHU1NzA4XHU5OGE3XHU2NzQzXHU5MTliXHU2Y2M5XHU1MTY4XHU3NWNhXHU2MmYzXHU3MmFjXHU1MjM4XHU1MjlkXHU3ZjNhXHU3MDk0XHU3NjM4XHU1Mzc0XHU5ZTRhXHU2OWI3XHU3ODZlXHU5NmMwXHU4OGQ5XHU3ZmE0XHU3MTM2XHU3MWMzXHU1MTg5''@;'; put 'put ''XHU2N2QzXHU3NGU0XHU1OGU0XHU2NTE4XHU1NmI3XHU4YmE5XHU5OTc2XHU2MjcwXHU3ZWQ1XHU2MGY5XHU3MGVkXHU1OGVjXHU0ZWMxXHU0ZWJhXHU1ZmNkXHU5N2U3XHU0ZWZiXHU4YmE0XHU1MjAzXHU1OThhXHU3ZWFiXHU2MjU0XHU0ZWNkXHU2NWU1XHU2MjBlXHU4MzM4XHU4NGM5XHU4''@;'; put 'put ''MzYzXHU4NzhkXHU3MTk0XHU2ZWI2XHU1YmI5XHU3ZWQyXHU1MTk3XHU2M2M5XHU2N2Q0XHU4MDg5XHU4MzM5XHU4ODE1XHU1MTEyXHU1YjdhXHU1OTgyXHU4ZmIxXHU0ZTczXHU2YzVkXHU1MTY1XHU4OTI1XHU4ZjZmXHU5NjJlXHU4NTRhXHU3NDVlXHU5NTEwXHU5NWYwXHU2ZGE2XHU4MmU1''@;'; put 'put ''XHU1ZjMxXHU2NDkyXHU2ZDEyXHU4NDI4XHU4MTZlXHU5Y2MzXHU1ODVlXHU4ZDViXHU0ZTA5XHU1M2MxXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjAwXS5sZW5ndGg7KytnKTY1NTMzIT09X1syMDBdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjAwXVtnXV09NTEyMDArZyx5WzUxMjAw''@;'; put 'put ''K2ddPV9bMjAwXVtnXSk7Zm9yKF9bMjAxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHU0ZjFlXHU2NTYzXHU2ODUxXHU1NWQzXHU0ZTI3XHU2NDE0XHU5YTlhXHU2MjZiXHU1YWMyXHU3NDVmXHU4MjcyXHU2ZGE5XHU2OGVlXHU1MGU3XHU4MzhlXHU3ODAyXHU2NzQwXHU1MjM5XHU2Yzk5XHU3ZWIxXHU1MGJiXHU1NTY1XHU3MTVlXHU3YjViXHU2NjUyXHU3M2NhXHU4MmVi''@;'; put 'put ''XHU2NzQ5XHU1YzcxXHU1MjIwXHU3MTdkXHU4ODZiXHU5NWVhXHU5NjU1XHU2NGM1XHU4ZDYxXHU4MWIzXHU1NTg0XHU2YzU1XHU2MjQ3XHU3ZjJlXHU1ODkyXHU0ZjI0XHU1NTQ2XHU4ZDRmXHU2NjRjXHU0ZTBhXHU1YzFhXHU4OGYzXHU2OGEyXHU2MzRlXHU3YTBkXHU3MGU3XHU4MjhkXHU1''@;'; put 'put ''MmZhXHU5N2Y2XHU1YzExXHU1NGU4XHU5MGI1XHU3ZWNkXHU1OTYyXHU4ZDRhXHU4NmM3XHU4MjBjXHU4MjBkXHU4ZDY2XHU2NDQ0XHU1YzA0XHU2MTUxXHU2ZDg5XHU3OTNlXHU4YmJlXHU3ODM3XHU3NTMzXHU1NDdiXHU0ZjM4XHU4ZWFiXHU2ZGYxXHU1YTIwXHU3ZWM1XHU3OTVlXHU2Yzg4''@;'; put 'put ''XHU1YmExXHU1YTc2XHU3NTFhXHU4MGJlXHU2MTRlXHU2ZTE3XHU1OGYwXHU3NTFmXHU3NTI1XHU3MjcyXHU1MzQ3XHU3ZWYzXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjAxXS5sZW5ndGg7KytnKTY1NTMzIT09X1syMDFdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjAxXVtnXV09NTE0''@;'; put 'put ''NTYrZyx5WzUxNDU2K2ddPV9bMjAxXVtnXSk7Zm9yKF9bMjAyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHU3NzAxXHU3NmRiXHU1MjY5XHU4MGRjXHU1NzIzXHU1ZTA4XHU1OTMxXHU3MmVlXHU2NWJkXHU2ZTdmXHU4YmQ3XHU1YzM4XHU4NjcxXHU1MzQxXHU3N2YzXHU2MmZlXHU2NWY2XHU0ZWMwXHU5OGRmXHU4NjgwXHU1YjllXHU4YmM2XHU1M2YyXHU3N2UyXHU0Zjdm''@;'; put 'put ''XHU1YzRlXHU5YTc2XHU1OWNiXHU1ZjBmXHU3OTNhXHU1OGViXHU0ZTE2XHU2N2ZmXHU0ZThiXHU2MmVkXHU4YTkzXHU5MDFkXHU1MmJmXHU2NjJmXHU1NWRjXHU1NjZjXHU5MDAyXHU0ZWQ1XHU0ZjhkXHU5MWNhXHU5OTcwXHU2YzBmXHU1ZTAyXHU2MDQzXHU1YmE0XHU4OWM2XHU4YmQ1XHU2''@;'; put 'put ''NTM2XHU2MjRiXHU5OTk2XHU1Yjg4XHU1YmZmXHU2Mzg4XHU1NTJlXHU1M2Q3XHU3NjI2XHU1MTdkXHU4NTJjXHU2N2EyXHU2OGIzXHU2YjhhXHU2MjkyXHU4ZjkzXHU1M2Q0XHU4MjEyXHU2ZGQxXHU3NThmXHU0ZTY2XHU4ZDRlXHU1YjcwXHU3MTlmXHU4NWFmXHU2NjkxXHU2NmQ5XHU3Zjcy''@;'; put 'put ''XHU4NzAwXHU5ZWNkXHU5ZjIwXHU1YzVlXHU2NzJmXHU4ZmYwXHU2ODExXHU2NzVmXHU2MjBkXHU3YWQ2XHU1ODg1XHU1ZWI2XHU2NTcwXHU2ZjMxXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjAyXS5sZW5ndGg7KytnKTY1NTMzIT09X1syMDJdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19b''@;'; put 'put ''MjAyXVtnXV09NTE3MTIrZyx5WzUxNzEyK2ddPV9bMjAyXVtnXSk7Zm9yKF9bMjAzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2MDU1XHU1MjM3XHU4MDBkXHU2NDU0XHU4ODcwXHU3NTI5XHU1ZTA1XHU2ODEzXHU2MmY0XHU5NzFjXHU1M2NjXHU3MjNkXHU4YzAxXHU2YzM0XHU3NzYxXHU3YTBlXHU1NDJlXHU3N2FjXHU5ODdhXHU4MjFjXHU4YmY0XHU3ODU1XHU2NzE0''@;'; put 'put ''XHU3MGMxXHU2NWFmXHU2NDk1XHU1NjM2XHU2MDFkXHU3OWMxXHU1M2Y4XHU0ZTFkXHU2YjdiXHU4MDg2XHU1YmZhXHU1NWUzXHU1NmRiXHU0ZjNhXHU0ZjNjXHU5OTcyXHU1ZGYzXHU2NzdlXHU4MDM4XHU2MDAyXHU5ODgyXHU5MDAxXHU1YjhiXHU4YmJjXHU4YmY1XHU2NDFjXHU4MjU4XHU2''@;'; put 'put ''NGRlXHU1NWZkXHU4MmNmXHU5MTY1XHU0ZmQ3XHU3ZDIwXHU5MDFmXHU3YzlmXHU1MGYzXHU1ODUxXHU2ZWFmXHU1YmJmXHU4YmM5XHU4MDgzXHU5MTc4XHU4NDljXHU3Yjk3XHU4NjdkXHU5NjhiXHU5NjhmXHU3ZWU1XHU5YWQzXHU3ODhlXHU1YzgxXHU3YTU3XHU5MDQyXHU5NmE3XHU3OTVm''@;'; put 'put ''XHU1YjU5XHU2MzVmXHU3YjBiXHU4NGQxXHU2OGFkXHU1NTA2XHU3ZjI5XHU3NDEwXHU3ZDIyXHU5NTAxXHU2MjQwXHU1ODRjXHU0ZWQ2XHU1YjgzXHU1OTc5XHU1ODU0XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjAzXS5sZW5ndGg7KytnKTY1NTMzIT09X1syMDNdW2ddLmNoYXJDb2Rl''@;'; put 'put ''QXQoMCkmJihJW19bMjAzXVtnXV09NTE5NjgrZyx5WzUxOTY4K2ddPV9bMjAzXVtnXSk7Zm9yKF9bMjA0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3MzZkXHU2MzFlXHU4ZTRiXHU4ZTBmXHU4MGNlXHU4MmQ0XHU2MmFjXHU1M2YwXHU2Y2YwXHU5MTVlXHU1OTJhXHU2MDAxXHU2YzcwXHU1NzRkXHU2NDRhXHU4ZDJhXHU3NjJiXHU2ZWU5XHU1NzViXHU2YTgwXHU3NWYw''@;'; put 'put ''XHU2ZjZkXHU4YzJkXHU4YzA4XHU1NzY2XHU2YmVmXHU4ODkyXHU3OGIzXHU2M2EyXHU1M2Y5XHU3MGFkXHU2YzY0XHU1ODU4XHU2NDJhXHU1ODAyXHU2OGUwXHU4MTliXHU1NTEwXHU3Y2Q2XHU1MDE4XHU4ZWJhXHU2ZGNjXHU4ZDlmXHU3MGViXHU2MzhmXHU2ZDliXHU2ZWQ0XHU3ZWU2XHU4''@;'; put 'put ''NDA0XHU2ODQzXHU5MDAzXHU2ZGQ4XHU5Njc2XHU4YmE4XHU1OTU3XHU3Mjc5XHU4NWU0XHU4MTdlXHU3NWJjXHU4YThhXHU2OGFmXHU1MjU0XHU4ZTIyXHU5NTExXHU2M2QwXHU5ODk4XHU4ZTQ0XHU1NTdjXHU0ZjUzXHU2NmZmXHU1NjhmXHU2MGQ1XHU2ZDk1XHU1MjQzXHU1YzQ5XHU1OTI5''@;'; put 'put ''XHU2ZGZiXHU1ODZiXHU3NTMwXHU3NTFjXHU2MDZjXHU4MjE0XHU4MTQ2XHU2MzExXHU2NzYxXHU4ZmUyXHU3NzNhXHU4ZGYzXHU4ZDM0XHU5NGMxXHU1ZTE2XHU1Mzg1XHU1NDJjXHU3MGMzXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjA0XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMDRd''@;'; put 'put ''W2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjA0XVtnXV09NTIyMjQrZyx5WzUyMjI0K2ddPV9bMjA0XVtnXSk7Zm9yKF9bMjA1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2YzQwXHU1ZWY3XHU1MDVjXHU0ZWFkXHU1ZWFkXHU2MzNhXHU4MjQ3XHU5MDFhXHU2ODUwXHU5MTZlXHU3N2IzXHU1NDBjXHU5NGRjXHU1ZjY0XHU3YWU1XHU2ODc2XHU2MzQ1XHU3YjUyXHU3ZWRm''@;'; put 'put ''XHU3NWRiXHU1MDc3XHU2Mjk1XHU1OTM0XHU5MDBmXHU1MWY4XHU3OWMzXHU3YTgxXHU1NmZlXHU1ZjkyXHU5MDE0XHU2ZDgyXHU1YzYwXHU1NzFmXHU1NDEwXHU1MTU0XHU2ZTRkXHU1NmUyXHU2M2E4XHU5ODkzXHU4MTdmXHU4NzE1XHU4OTJhXHU5MDAwXHU1NDFlXHU1YzZmXHU4MWMwXHU2''@;'; put 'put ''MmQ2XHU2MjU4XHU4MTMxXHU5ZTM1XHU5NjQwXHU5YTZlXHU5YTdjXHU2OTJkXHU1OWE1XHU2MmQzXHU1NTNlXHU2MzE2XHU1NGM3XHU4NmQ5XHU2ZDNjXHU1YTAzXHU3NGU2XHU4ODljXHU2YjZhXHU1OTE2XHU4YzRjXHU1ZjJmXHU2ZTdlXHU3M2E5XHU5ODdkXHU0ZTM4XHU3MGY3XHU1Yjhj''@;'; put 'put ''XHU3ODk3XHU2MzNkXHU2NjVhXHU3Njk2XHU2MGNiXHU1YjliXHU1YTQ5XHU0ZTA3XHU4MTU1XHU2YzZhXHU3MzhiXHU0ZWExXHU2Nzg5XHU3ZjUxXHU1ZjgwXHU2NWZhXHU2NzFiXHU1ZmQ4XHU1OTg0XHU1YTAxXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjA1XS5sZW5ndGg7KytnKTY1''@;'; put 'put ''NTMzIT09X1syMDVdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjA1XVtnXV09NTI0ODArZyx5WzUyNDgwK2ddPV9bMjA1XVtnXSk7Zm9yKF9bMjA2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1ZGNkXHU1ZmFlXHU1MzcxXHU5N2U2XHU4ZmRkXHU2ODQ1XHU1NmY0XHU1NTJmXHU2MGRmXHU0ZTNhXHU2ZjRkXHU3ZWY0XHU4MmM3XHU4NDBlXHU1OWQ0XHU0ZjFmXHU0ZjJh''@;'; put 'put ''XHU1YzNlXHU3ZWFjXHU2NzJhXHU4NTFhXHU1NDczXHU3NTRmXHU4MGMzXHU1NTgyXHU5YjRmXHU0ZjRkXHU2ZTJkXHU4YzEzXHU1YzA5XHU2MTcwXHU1MzZiXHU3NjFmXHU2ZTI5XHU4NjhhXHU2NTg3XHU5NWZiXHU3ZWI5XHU1NDNiXHU3YTMzXHU3ZDBhXHU5NWVlXHU1NWUxXHU3ZmMxXHU3''@;'; put 'put ''NGVlXHU2MzFkXHU4NzE3XHU2ZGExXHU3YTlkXHU2MjExXHU2NWExXHU1MzY3XHU2M2UxXHU2YzgzXHU1ZGViXHU1NDVjXHU5NGE4XHU0ZTRjXHU2YzYxXHU4YmVjXHU1YzRiXHU2NWUwXHU4MjljXHU2OGE3XHU1NDNlXHU1NDM0XHU2YmNiXHU2YjY2XHU0ZTk0XHU2MzQyXHU1MzQ4XHU4MjFl''@;'; put 'put ''XHU0ZjBkXHU0ZmFlXHU1NzVlXHU2MjBhXHU5NmZlXHU2NjY0XHU3MjY5XHU1MmZmXHU1MmExXHU2MDlmXHU4YmVmXHU2NjE0XHU3MTk5XHU2NzkwXHU4OTdmXHU3ODUyXHU3N2ZkXHU2NjcwXHU1NjNiXHU1NDM4XHU5NTIxXHU3MjdhXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjA2XS5s''@;'; put 'put ''ZW5ndGg7KytnKTY1NTMzIT09X1syMDZdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjA2XVtnXV09NTI3MzYrZyx5WzUyNzM2K2ddPV9bMjA2XVtnXSk7Zm9yKF9bMjA3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3YTAwXHU2MDZmXHU1ZTBjXHU2MDg5XHU4MTlkXHU1OTE1XHU2MGRjXHU3MTg0XHU3MGVmXHU2ZWFhXHU2YzUwXHU3MjgwXHU2YTg0XHU4OGFkXHU1ZTJk''@;'; put 'put ''XHU0ZTYwXHU1YWIzXHU1NTljXHU5NGUzXHU2ZDE3XHU3Y2ZiXHU5Njk5XHU2MjBmXHU3ZWM2XHU3NzhlXHU4NjdlXHU1MzIzXHU5NzFlXHU4Zjk2XHU2Njg3XHU1Y2UxXHU0ZmEwXHU3MmVkXHU0ZTBiXHU1M2E2XHU1OTBmXHU1NDEzXHU2MzgwXHU5NTI4XHU1MTQ4XHU0ZWQ5XHU5YzljXHU3''@;'; put 'put ''ZWE0XHU1NGI4XHU4ZDI0XHU4ODU0XHU4MjM3XHU5NWYyXHU2ZDhlXHU1ZjI2XHU1YWNjXHU2NjNlXHU5NjY5XHU3M2IwXHU3MzJlXHU1M2JmXHU4MTdhXHU5OTg1XHU3ZmExXHU1YmFhXHU5Njc3XHU5NjUwXHU3ZWJmXHU3NmY4XHU1M2EyXHU5NTc2XHU5OTk5XHU3YmIxXHU4OTQ0XHU2ZTU4''@;'; put 'put ''XHU0ZTYxXHU3ZmQ0XHU3OTY1XHU4YmU2XHU2MGYzXHU1NGNkXHU0ZWFiXHU5ODc5XHU1ZGY3XHU2YTYxXHU1MGNmXHU1NDExXHU4YzYxXHU4NDI3XHU3ODVkXHU5NzA0XHU1MjRhXHU1NGVlXHU1NmEzXHU5NTAwXHU2ZDg4XHU1YmI1XHU2ZGM2XHU2NjUzXHVmZmZkIi5zcGxpdCgiIiksZz0w''@;'; put 'put ''O2chPV9bMjA3XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMDddW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjA3XVtnXV09NTI5OTIrZyx5WzUyOTkyK2ddPV9bMjA3XVtnXSk7Zm9yKF9bMjA4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1YzBmXHU1YjVkXHU2ODIxXHU4MDk2XHU1NTc4XHU3YjExXHU2NTQ4XHU2OTU0XHU0ZTliXHU2YjQ3XHU4NzRlXHU5NzhiXHU1MzRm''@;'; put 'put ''XHU2MzFmXHU2NDNhXHU5MGFhXHU2NTljXHU4MGMxXHU4YzEwXHU1MTk5XHU2OGIwXHU1Mzc4XHU4N2Y5XHU2MWM4XHU2Y2M0XHU2Y2ZiXHU4YzIyXHU1YzUxXHU4NWFhXHU4MmFmXHU5NTBjXHU2YjIzXHU4ZjliXHU2NWIwXHU1ZmZiXHU1ZmMzXHU0ZmUxXHU4ODQ1XHU2NjFmXHU4MTY1XHU3''@;'; put 'put ''MzI5XHU2MGZhXHU1MTc0XHU1MjExXHU1NzhiXHU1ZjYyXHU5MGEyXHU4ODRjXHU5MTkyXHU1ZTc4XHU2NzRmXHU2MDI3XHU1OWQzXHU1MTQ0XHU1MWY2XHU4MGY4XHU1MzA4XHU2Yzc5XHU5NmM0XHU3MThhXHU0ZjExXHU0ZmVlXHU3ZjllXHU2NzNkXHU1NWM1XHU5NTA4XHU3OWMwXHU4ODk2''@;'; put 'put ''XHU3ZWUzXHU1ODlmXHU2MjBjXHU5NzAwXHU4NjVhXHU1NjE4XHU5ODdiXHU1ZjkwXHU4YmI4XHU4NGM0XHU5MTU3XHU1M2Q5XHU2NWVkXHU1ZThmXHU3NTVjXHU2MDY0XHU3ZDZlXHU1YTdmXHU3ZWVhXHU3ZWVkXHU4ZjY5XHU1NWE3XHU1YmEzXHU2MGFjXHU2NWNiXHU3Mzg0XHVmZmZkIi5z''@;'; put 'put ''cGxpdCgiIiksZz0wO2chPV9bMjA4XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMDhdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjA4XVtnXV09NTMyNDgrZyx5WzUzMjQ4K2ddPV9bMjA4XVtnXSk7Zm9yKF9bMjA5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MDA5XHU3NjYzXHU3NzI5XHU3ZWRhXHU5Nzc0XHU4NTliXHU1YjY2XHU3YTc0XHU5NmVhXHU4ODQwXHU1MmNi''@;'; put 'put ''XHU3MThmXHU1ZmFhXHU2NWVjXHU4YmUyXHU1YmZiXHU5YTZmXHU1ZGUxXHU2Yjg5XHU2YzViXHU4YmFkXHU4YmFmXHU5MDBhXHU4ZmM1XHU1MzhiXHU2MmJjXHU5ZTI2XHU5ZTJkXHU1NDQwXHU0ZTJiXHU4MmJkXHU3MjU5XHU4NjljXHU1ZDE2XHU4ODU5XHU2ZGFmXHU5NmM1XHU1NGQxXHU0''@;'; put 'put ''ZTlhXHU4YmI2XHU3MTA5XHU1NGJkXHU5NjA5XHU3MGRmXHU2ZGY5XHU3NmQwXHU0ZTI1XHU3ODE0XHU4NzEyXHU1Y2E5XHU1ZWY2XHU4YTAwXHU5ODljXHU5NjBlXHU3MDhlXHU2Y2JmXHU1OTQ0XHU2M2E5XHU3NzNjXHU4ODRkXHU2ZjE0XHU4MjczXHU1ODMwXHU3MWQ1XHU1MzhjXHU3ODFh''@;'; put 'put ''XHU5NmMxXHU1NTAxXHU1ZjY2XHU3MTMwXHU1YmI0XHU4YzFhXHU5YThjXHU2YjgzXHU1OTJlXHU5ZTJmXHU3OWU3XHU2NzY4XHU2MjZjXHU0ZjZmXHU3NWExXHU3ZjhhXHU2ZDBiXHU5NjMzXHU2YzI3XHU0ZWYwXHU3NWQyXHU1MTdiXHU2ODM3XHU2ZjNlXHU5MDgwXHU4MTcwXHU1OTk2XHU3''@;'; put 'put ''NDc2XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjA5XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMDldW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjA5XVtnXV09NTM1MDQrZyx5WzUzNTA0K2ddPV9bMjA5XVtnXSk7Zm9yKF9bMjEwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2NDQ3XHU1YzI3XHU5MDY1XHU3YTkxXHU4YzIzXHU1OWRhXHU1NGFjXHU4MjAwXHU4MzZm''@;'; put 'put ''XHU4OTgxXHU4MDAwXHU2OTMwXHU1NjRlXHU4MDM2XHU3MjM3XHU5MWNlXHU1MWI2XHU0ZTVmXHU5ODc1XHU2Mzk2XHU0ZTFhXHU1M2Y2XHU2NmYzXHU4MTRiXHU1OTFjXHU2ZGIyXHU0ZTAwXHU1OGY5XHU1MzNiXHU2M2Q2XHU5NGYxXHU0ZjlkXHU0ZjBhXHU4ODYzXHU5ODkwXHU1OTM3XHU5''@;'; put 'put ''MDU3XHU3OWZiXHU0ZWVhXHU4MGYwXHU3NTkxXHU2YzgyXHU1YjljXHU1OWU4XHU1ZjVkXHU2OTA1XHU4NjgxXHU1MDFhXHU1ZGYyXHU0ZTU5XHU3N2UzXHU0ZWU1XHU4MjdhXHU2MjkxXHU2NjEzXHU5MDkxXHU1Yzc5XHU0ZWJmXHU1Zjc5XHU4MWM2XHU5MDM4XHU4MDg0XHU3NWFiXHU0ZWE2''@;'; put 'put ''XHU4OGQ0XHU2MTBmXHU2YmM1XHU1ZmM2XHU0ZTQ5XHU3NmNhXHU2ZWEyXHU4YmUzXHU4YmFlXHU4YzBhXHU4YmQxXHU1ZjAyXHU3ZmZjXHU3ZmNjXHU3ZWNlXHU4MzM1XHU4MzZiXHU1NmUwXHU2YmI3XHU5N2YzXHU5NjM0XHU1OWZiXHU1NDFmXHU5NGY2XHU2ZGViXHU1YmM1XHU5OTZlXHU1''@;'; put 'put ''YzM5XHU1ZjE1XHU5NjkwXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjEwXS5sZW5ndGg7KytnKTY1NTMzIT09X1syMTBdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjEwXVtnXV09NTM3NjArZyx5WzUzNzYwK2ddPV9bMjEwXVtnXSk7Zm9yKF9bMjExXT0iXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1MzcwXHU4MmYxXHU2YTMxXHU1YTc0XHU5ZTcwXHU1ZTk0XHU3ZjI4''@;'; put 'put ''XHU4M2I5XHU4NDI0XHU4NDI1XHU4MzY3XHU4NzQ3XHU4ZmNlXHU4ZDYyXHU3NmM4XHU1ZjcxXHU5ODk2XHU3ODZjXHU2NjIwXHU1NGRmXHU2MmU1XHU0ZjYzXHU4MWMzXHU3NWM4XHU1ZWI4XHU5NmNkXHU4ZTBhXHU4NmY5XHU1NDhmXHU2Y2YzXHU2ZDhjXHU2YzM4XHU2MDdmXHU1MmM3XHU3''@;'; put 'put ''NTI4XHU1ZTdkXHU0ZjE4XHU2MGEwXHU1ZmU3XHU1YzI0XHU3NTMxXHU5MGFlXHU5NGMwXHU3MmI5XHU2Y2I5XHU2ZTM4XHU5MTQ5XHU2NzA5XHU1M2NiXHU1M2YzXHU0ZjUxXHU5MWM5XHU4YmYxXHU1M2M4XHU1ZTdjXHU4ZmMyXHU2ZGU0XHU0ZThlXHU3NmMyXHU2OTg2XHU4NjVlXHU2MTFh''@;'; put 'put ''XHU4MjA2XHU0ZjU5XHU0ZmRlXHU5MDNlXHU5YzdjXHU2MTA5XHU2ZTFkXHU2ZTE0XHU5Njg1XHU0ZTg4XHU1YTMxXHU5NmU4XHU0ZTBlXHU1YzdmXHU3OWI5XHU1Yjg3XHU4YmVkXHU3ZmJkXHU3Mzg5XHU1N2RmXHU4MjhiXHU5MGMxXHU1NDAxXHU5MDQ3XHU1NWJiXHU1Y2VhXHU1ZmExXHU2''@;'; put 'put ''MTA4XHU2YjMyXHU3MmYxXHU4MGIyXHU4YTg5XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjExXS5sZW5ndGg7KytnKTY1NTMzIT09X1syMTFdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjExXVtnXV09NTQwMTYrZyx5WzU0MDE2K2ddPV9bMjExXVtnXSk7Zm9yKF9bMjEyXT0iXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ZDc0XHU1YmQzXHU4OGQ1XHU5ODg0XHU4YzZi''@;'; put 'put ''XHU5YTZkXHU5ZTMzXHU2ZTBhXHU1MWE0XHU1MTQzXHU1N2EzXHU4ODgxXHU1MzlmXHU2M2Y0XHU4Zjk1XHU1NmVkXHU1NDU4XHU1NzA2XHU3MzNmXHU2ZTkwXHU3ZjE4XHU4ZmRjXHU4MmQxXHU2MTNmXHU2MDI4XHU5NjYyXHU2NmYwXHU3ZWE2XHU4ZDhhXHU4ZGMzXHU5NGE1XHU1Y2IzXHU3''@;'; put 'put ''Y2E0XHU2NzA4XHU2MGE2XHU5NjA1XHU4MDE4XHU0ZTkxXHU5MGU3XHU1MzAwXHU5NjY4XHU1MTQxXHU4ZmQwXHU4NTc0XHU5MTVkXHU2NjU1XHU5N2Y1XHU1YjU1XHU1MzFkXHU3ODM4XHU2NzQyXHU2ODNkXHU1NGM5XHU3MDdlXHU1YmIwXHU4ZjdkXHU1MThkXHU1NzI4XHU1NGIxXHU2NTEy''@;'; put 'put ''XHU2NjgyXHU4ZDVlXHU4ZDQzXHU4MTBmXHU4NDZjXHU5MDZkXHU3Y2RmXHU1MWZmXHU4NWZiXHU2N2EzXHU2NWU5XHU2ZmExXHU4NmE0XHU4ZTgxXHU1NjZhXHU5MDIwXHU3NjgyXHU3MDc2XHU3MWU1XHU4ZDIzXHU2MmU5XHU1MjE5XHU2Y2ZkXHU4ZDNjXHU2MDBlXHU1ODllXHU2MThlXHU2''@;'; put 'put ''NmZlXHU4ZDYwXHU2MjRlXHU1NWIzXHU2ZTIzXHU2NzJkXHU4ZjY3XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjEyXS5sZW5ndGg7KytnKTY1NTMzIT09X1syMTJdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjEyXVtnXV09NTQyNzIrZyx5WzU0MjcyK2ddPV9bMjEyXVtnXSk7Zm9yKF9b''@;'; put 'put ''MjEzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5NGUxXHU5NWY4XHU3NzI4''@;'; put 'put ''XHU2ODA1XHU2OWE4XHU1NDhiXHU0ZTRkXHU3MGI4XHU4YmM4XHU2NDU4XHU2NThiXHU1Yjg1XHU3YTg0XHU1MDNhXHU1YmU4XHU3N2JiXHU2YmUxXHU4YTc5XHU3Yzk4XHU2Y2JlXHU3NmNmXHU2NWE5XHU4Zjk3XHU1ZDJkXHU1YzU1XHU4NjM4XHU2ODA4XHU1MzYwXHU2MjE4XHU3YWQ5XHU2''@;'; put 'put ''ZTViXHU3ZWZkXHU2YTFmXHU3YWUwXHU1ZjcwXHU2ZjMzXHU1ZjIwXHU2MzhjXHU2ZGE4XHU2NzU2XHU0ZTA4XHU1ZTEwXHU4ZDI2XHU0ZWQ3XHU4MGMwXHU3NjM0XHU5NjljXHU2MmRiXHU2NjJkXHU2MjdlXHU2Y2JjXHU4ZDc1XHU3MTY3XHU3ZjY5XHU1MTQ2XHU4MDg3XHU1M2VjXHU5MDZl''@;'; put 'put ''XHU2Mjk4XHU1NGYyXHU4NmYwXHU4Zjk5XHU4MDA1XHU5NTE3XHU4NTE3XHU4ZmQ5XHU2ZDU5XHU3M2NkXHU2NTlmXHU3NzFmXHU3NTA0XHU3ODI3XHU4MWZiXHU4ZDFlXHU5NDg4XHU0ZmE2XHU2Nzk1XHU3NWI5XHU4YmNhXHU5NzA3XHU2MzJmXHU5NTQ3XHU5NjM1XHU4NGI4XHU2MzIzXHU3''@;'; put 'put ''NzQxXHU1ZjgxXHU3MmYwXHU0ZTg5XHU2MDE0XHU2NTc0XHU2MmVmXHU2YjYzXHU2NTNmXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjEzXS5sZW5ndGg7KytnKTY1NTMzIT09X1syMTNdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjEzXVtnXV09NTQ1MjgrZyx5WzU0NTI4K2ddPV9bMjEz''@;'; put 'put ''XVtnXSk7Zm9yKF9bMjE0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1ZTI3''@;'; put 'put ''XHU3NWM3XHU5MGQxXHU4YmMxXHU4MjlkXHU2NzlkXHU2NTJmXHU1NDMxXHU4NzE4XHU3N2U1XHU4MGEyXHU4MTAyXHU2YzQxXHU0ZTRiXHU3ZWM3XHU4MDRjXHU3NmY0XHU2OTBkXHU2Yjk2XHU2MjY3XHU1MDNjXHU0Zjg0XHU1NzQwXHU2MzA3XHU2YjYyXHU4ZGJlXHU1M2VhXHU2NWU4XHU3''@;'; put 'put ''ZWI4XHU1ZmQ3XHU2MzFhXHU2M2I3XHU4MWYzXHU4MWY0XHU3ZjZlXHU1ZTFjXHU1Y2Q5XHU1MjM2XHU2NjdhXHU3OWU5XHU3YTFhXHU4ZDI4XHU3MDk5XHU3NWQ0XHU2ZWRlXHU2Y2JiXHU3YTkyXHU0ZTJkXHU3NmM1XHU1ZmUwXHU5NDlmXHU4ODc3XHU3ZWM4XHU3OWNkXHU4MGJmXHU5MWNk''@;'; put 'put ''XHU0ZWYyXHU0ZjE3XHU4MjFmXHU1NDY4XHU1ZGRlXHU2ZDMyXHU4YmNjXHU3Y2E1XHU4Zjc0XHU4MDk4XHU1ZTFhXHU1NDkyXHU3NmIxXHU1Yjk5XHU2NjNjXHU5YWE0XHU3M2UwXHU2ODJhXHU4NmRiXHU2NzMxXHU3MzJhXHU4YmY4XHU4YmRiXHU5MDEwXHU3YWY5XHU3MGRiXHU3MTZlXHU2''@;'; put 'put ''MmM0XHU3N2E5XHU1NjMxXHU0ZTNiXHU4NDU3XHU2N2YxXHU1MmE5XHU4NmMwXHU4ZDJlXHU5NGY4XHU3YjUxXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjE0XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMTRdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjE0XVtnXV09NTQ3ODQrZyx5WzU0''@;'; put 'put ''Nzg0K2ddPV9bMjE0XVtnXSk7Zm9yKF9bMjE1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHU0ZjRmXHU2Y2U4XHU3OTVkXHU5YTdiXHU2MjkzXHU3MjJhXHU2MmZkXHU0ZTEzXHU3ODE2XHU4ZjZjXHU2NGIwXHU4ZDVhXHU3YmM2XHU2ODY5XHU1ZTg0XHU4OGM1XHU1OTg2XHU2NDllXHU1OGVlXHU3MmI2XHU2OTBlXHU5NTI1XHU4ZmZkXHU4ZDU4XHU1NzYwXHU3ZjAwXHU4''@;'; put 'put ''YzA2XHU1MWM2XHU2MzQ5XHU2MmQ5XHU1MzUzXHU2ODRjXHU3NDIyXHU4MzAxXHU5MTRjXHU1NTQ0XHU3NzQwXHU3MDdjXHU2ZDRhXHU1MTc5XHU1NGE4XHU4ZDQ0XHU1OWZmXHU2ZWNiXHU2ZGM0XHU1YjVjXHU3ZDJiXHU0ZWQ0XHU3YzdkXHU2ZWQzXHU1YjUwXHU4MWVhXHU2ZTBkXHU1YjU3''@;'; put 'put ''XHU5YjAzXHU2OGQ1XHU4ZTJhXHU1Yjk3XHU3ZWZjXHU2MDNiXHU3ZWI1XHU5MGI5XHU4ZDcwXHU1OTRmXHU2M2NkXHU3OWRmXHU4ZGIzXHU1MzUyXHU2NWNmXHU3OTU2XHU4YmM1XHU5NjNiXHU3ZWM0XHU5NGJiXHU3ZTgyXHU1NjM0XHU5MTg5XHU2NzAwXHU3ZjZhXHU1YzBhXHU5MDc1XHU2''@;'; put 'put ''NjI4XHU1ZGU2XHU0ZjUwXHU2N2RlXHU1MDVhXHU0ZjVjXHU1NzUwXHU1ZWE3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjE1XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMTVdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjE1XVtnXV09''@;'; put 'put ''NTUwNDArZyx5WzU1MDQwK2ddPV9bMjE1XVtnXSk7Zm9yKF9bMjE2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHU0ZThkXHU0ZTBjXHU1MTQwXHU0ZTEwXHU1ZWZmXHU1MzQ1XHU0ZTE1XHU0ZTk4XHU0ZTFlXHU5YjMyXHU1YjZjXHU1NjY5XHU0ZTI4XHU3OWJhXHU0ZTNmXHU1MzE1XHU0ZTQ3XHU1OTJkXHU3MjNiXHU1MzZlXHU2YzEwXHU1NmRmXHU4MGU0XHU5OTk3XHU2''@;'; put 'put ''YmQzXHU3NzdlXHU5ZjE3XHU0ZTM2XHU0ZTlmXHU5ZjEwXHU0ZTVjXHU0ZTY5XHU0ZTkzXHU4Mjg4XHU1YjViXHU1NTZjXHU1NjBmXHU0ZWM0XHU1MzhkXHU1MzlkXHU1M2EzXHU1M2E1XHU1M2FlXHU5NzY1XHU4ZDVkXHU1MzFhXHU1M2Y1XHU1MzI2XHU1MzJlXHU1MzNlXHU4ZDVjXHU1MzY2''@;'; put 'put ''XHU1MzYzXHU1MjAyXHU1MjA4XHU1MjBlXHU1MjJkXHU1MjMzXHU1MjNmXHU1MjQwXHU1MjRjXHU1MjVlXHU1MjYxXHU1MjVjXHU4NGFmXHU1MjdkXHU1MjgyXHU1MjgxXHU1MjkwXHU1MjkzXHU1MTgyXHU3ZjU0XHU0ZWJiXHU0ZWMzXHU0ZWM5XHU0ZWMyXHU0ZWU4XHU0ZWUxXHU0ZWViXHU0''@;'; put 'put ''ZWRlXHU0ZjFiXHU0ZWYzXHU0ZjIyXHU0ZjY0XHU0ZWY1XHU0ZjI1XHU0ZjI3XHU0ZjA5XHU0ZjJiXHU0ZjVlXHU0ZjY3XHU2NTM4XHU0ZjVhXHU0ZjVkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjE2XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMTZdW2ddLmNoYXJDb2RlQXQoMCkmJihJ''@;'; put 'put ''W19bMjE2XVtnXV09NTUyOTYrZyx5WzU1Mjk2K2ddPV9bMjE2XVtnXSk7Zm9yKF9bMjE3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU0ZjVmXHU0ZjU3XHU0ZjMyXHU0ZjNkXHU0Zjc2XHU0Zjc0XHU0ZjkxXHU0Zjg5XHU0ZjgzXHU0ZjhmXHU0ZjdlXHU0ZjdiXHU0ZmFhXHU0ZjdjXHU0ZmFjXHU0Zjk0XHU0ZmU2XHU0ZmU4XHU0ZmVhXHU0ZmM1XHU0ZmRhXHU0ZmUzXHU0''@;'; put 'put ''ZmRjXHU0ZmQxXHU0ZmRmXHU0ZmY4XHU1MDI5XHU1MDRjXHU0ZmYzXHU1MDJjXHU1MDBmXHU1MDJlXHU1MDJkXHU0ZmZlXHU1MDFjXHU1MDBjXHU1MDI1XHU1MDI4XHU1MDdlXHU1MDQzXHU1MDU1XHU1MDQ4XHU1MDRlXHU1MDZjXHU1MDdiXHU1MGE1XHU1MGE3XHU1MGE5XHU1MGJhXHU1MGQ2''@;'; put 'put ''XHU1MTA2XHU1MGVkXHU1MGVjXHU1MGU2XHU1MGVlXHU1MTA3XHU1MTBiXHU0ZWRkXHU2YzNkXHU0ZjU4XHU0ZjY1XHU0ZmNlXHU5ZmEwXHU2YzQ2XHU3Yzc0XHU1MTZlXHU1ZGZkXHU5ZWM5XHU5OTk4XHU1MTgxXHU1OTE0XHU1MmY5XHU1MzBkXHU4YTA3XHU1MzEwXHU1MWViXHU1OTE5XHU1''@;'; put 'put ''MTU1XHU0ZWEwXHU1MTU2XHU0ZWIzXHU4ODZlXHU4OGE0XHU0ZWI1XHU4MTE0XHU4OGQyXHU3OTgwXHU1YjM0XHU4ODAzXHU3ZmI4XHU1MWFiXHU1MWIxXHU1MWJkXHU1MWJjXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjE3XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMTddW2ddLmNoYXJD''@;'; put 'put ''b2RlQXQoMCkmJihJW19bMjE3XVtnXV09NTU1NTIrZyx5WzU1NTUyK2ddPV9bMjE3XVtnXSk7Zm9yKF9bMjE4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1MWM3XHU1MTk2XHU1MWEyXHU1MWE1XHU4YmEwXHU4YmE2XHU4YmE3XHU4YmFhXHU4YmI0XHU4YmI1XHU4YmI3XHU4YmMyXHU4YmMzXHU4YmNiXHU4YmNmXHU4YmNlXHU4YmQyXHU4YmQzXHU4YmQ0XHU4YmQ2XHU4''@;'; put 'put ''YmQ4XHU4YmQ5XHU4YmRjXHU4YmRmXHU4YmUwXHU4YmU0XHU4YmU4XHU4YmU5XHU4YmVlXHU4YmYwXHU4YmYzXHU4YmY2XHU4YmY5XHU4YmZjXHU4YmZmXHU4YzAwXHU4YzAyXHU4YzA0XHU4YzA3XHU4YzBjXHU4YzBmXHU4YzExXHU4YzEyXHU4YzE0XHU4YzE1XHU4YzE2XHU4YzE5XHU4YzFi''@;'; put 'put ''XHU4YzE4XHU4YzFkXHU4YzFmXHU4YzIwXHU4YzIxXHU4YzI1XHU4YzI3XHU4YzJhXHU4YzJiXHU4YzJlXHU4YzJmXHU4YzMyXHU4YzMzXHU4YzM1XHU4YzM2XHU1MzY5XHU1MzdhXHU5NjFkXHU5NjIyXHU5NjIxXHU5NjMxXHU5NjJhXHU5NjNkXHU5NjNjXHU5NjQyXHU5NjQ5XHU5NjU0XHU5''@;'; put 'put ''NjVmXHU5NjY3XHU5NjZjXHU5NjcyXHU5Njc0XHU5Njg4XHU5NjhkXHU5Njk3XHU5NmIwXHU5MDk3XHU5MDliXHU5MDlkXHU5MDk5XHU5MGFjXHU5MGExXHU5MGI0XHU5MGIzXHU5MGI2XHU5MGJhXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjE4XS5sZW5ndGg7KytnKTY1NTMzIT09X1sy''@;'; put 'put ''MThdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjE4XVtnXV09NTU4MDgrZyx5WzU1ODA4K2ddPV9bMjE4XVtnXSk7Zm9yKF9bMjE5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MGI4XHU5MGIwXHU5MGNmXHU5MGM1XHU5MGJlXHU5MGQwXHU5MGM0XHU5MGM3XHU5MGQzXHU5MGU2XHU5MGUyXHU5MGRjXHU5MGQ3XHU5MGRiXHU5MGViXHU5MGVmXHU5MGZlXHU5MTA0XHU5''@;'; put 'put ''MTIyXHU5MTFlXHU5MTIzXHU5MTMxXHU5MTJmXHU5MTM5XHU5MTQzXHU5MTQ2XHU1MjBkXHU1OTQyXHU1MmEyXHU1MmFjXHU1MmFkXHU1MmJlXHU1NGZmXHU1MmQwXHU1MmQ2XHU1MmYwXHU1M2RmXHU3MWVlXHU3N2NkXHU1ZWY0XHU1MWY1XHU1MWZjXHU5YjJmXHU1M2I2XHU1ZjAxXHU3NTVh''@;'; put 'put ''XHU1ZGVmXHU1NzRjXHU1N2E5XHU1N2ExXHU1ODdlXHU1OGJjXHU1OGM1XHU1OGQxXHU1NzI5XHU1NzJjXHU1NzJhXHU1NzMzXHU1NzM5XHU1NzJlXHU1NzJmXHU1NzVjXHU1NzNiXHU1NzQyXHU1NzY5XHU1Nzg1XHU1NzZiXHU1Nzg2XHU1NzdjXHU1NzdiXHU1NzY4XHU1NzZkXHU1Nzc2XHU1''@;'; put 'put ''NzczXHU1N2FkXHU1N2E0XHU1NzhjXHU1N2IyXHU1N2NmXHU1N2E3XHU1N2I0XHU1NzkzXHU1N2EwXHU1N2Q1XHU1N2Q4XHU1N2RhXHU1N2Q5XHU1N2QyXHU1N2I4XHU1N2Y0XHU1N2VmXHU1N2Y4XHU1N2U0XHU1N2RkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjE5XS5sZW5ndGg7Kytn''@;'; put 'put ''KTY1NTMzIT09X1syMTldW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjE5XVtnXV09NTYwNjQrZyx5WzU2MDY0K2ddPV9bMjE5XVtnXSk7Zm9yKF9bMjIwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1ODBiXHU1ODBkXHU1N2ZkXHU1N2VkXHU1ODAwXHU1ODFlXHU1ODE5XHU1ODQ0XHU1ODIwXHU1ODY1XHU1ODZjXHU1ODgxXHU1ODg5XHU1ODlhXHU1ODgwXHU5OWE4XHU5''@;'; put 'put ''ZjE5XHU2MWZmXHU4Mjc5XHU4MjdkXHU4MjdmXHU4MjhmXHU4MjhhXHU4MmE4XHU4Mjg0XHU4MjhlXHU4MjkxXHU4Mjk3XHU4Mjk5XHU4MmFiXHU4MmI4XHU4MmJlXHU4MmIwXHU4MmM4XHU4MmNhXHU4MmUzXHU4Mjk4XHU4MmI3XHU4MmFlXHU4MmNiXHU4MmNjXHU4MmMxXHU4MmE5XHU4MmI0''@;'; put 'put ''XHU4MmExXHU4MmFhXHU4MjlmXHU4MmM0XHU4MmNlXHU4MmE0XHU4MmUxXHU4MzA5XHU4MmY3XHU4MmU0XHU4MzBmXHU4MzA3XHU4MmRjXHU4MmY0XHU4MmQyXHU4MmQ4XHU4MzBjXHU4MmZiXHU4MmQzXHU4MzExXHU4MzFhXHU4MzA2XHU4MzE0XHU4MzE1XHU4MmUwXHU4MmQ1XHU4MzFjXHU4''@;'; put 'put ''MzUxXHU4MzViXHU4MzVjXHU4MzA4XHU4MzkyXHU4MzNjXHU4MzM0XHU4MzMxXHU4MzliXHU4MzVlXHU4MzJmXHU4MzRmXHU4MzQ3XHU4MzQzXHU4MzVmXHU4MzQwXHU4MzE3XHU4MzYwXHU4MzJkXHU4MzNhXHU4MzMzXHU4MzY2XHU4MzY1XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjIw''@;'; put 'put ''XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMjBdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjIwXVtnXV09NTYzMjArZyx5WzU2MzIwK2ddPV9bMjIwXVtnXSk7Zm9yKF9bMjIxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MzY4XHU4MzFiXHU4MzY5XHU4MzZjXHU4MzZhXHU4MzZkXHU4MzZlXHU4M2IwXHU4Mzc4XHU4M2IzXHU4M2I0XHU4M2EwXHU4M2FhXHU4MzkzXHU4''@;'; put 'put ''MzljXHU4Mzg1XHU4MzdjXHU4M2I2XHU4M2E5XHU4MzdkXHU4M2I4XHU4MzdiXHU4Mzk4XHU4MzllXHU4M2E4XHU4M2JhXHU4M2JjXHU4M2MxXHU4NDAxXHU4M2U1XHU4M2Q4XHU1ODA3XHU4NDE4XHU4NDBiXHU4M2RkXHU4M2ZkXHU4M2Q2XHU4NDFjXHU4NDM4XHU4NDExXHU4NDA2XHU4M2Q0''@;'; put 'put ''XHU4M2RmXHU4NDBmXHU4NDAzXHU4M2Y4XHU4M2Y5XHU4M2VhXHU4M2M1XHU4M2MwXHU4NDI2XHU4M2YwXHU4M2UxXHU4NDVjXHU4NDUxXHU4NDVhXHU4NDU5XHU4NDczXHU4NDg3XHU4NDg4XHU4NDdhXHU4NDg5XHU4NDc4XHU4NDNjXHU4NDQ2XHU4NDY5XHU4NDc2XHU4NDhjXHU4NDhlXHU4''@;'; put 'put ''NDMxXHU4NDZkXHU4NGMxXHU4NGNkXHU4NGQwXHU4NGU2XHU4NGJkXHU4NGQzXHU4NGNhXHU4NGJmXHU4NGJhXHU4NGUwXHU4NGExXHU4NGI5XHU4NGI0XHU4NDk3XHU4NGU1XHU4NGUzXHU4NTBjXHU3NTBkXHU4NTM4XHU4NGYwXHU4NTM5XHU4NTFmXHU4NTNhXHVmZmZkIi5zcGxpdCgiIiks''@;'; put 'put ''Zz0wO2chPV9bMjIxXS5sZW5ndGg7KytnKTY1NTMzIT09X1syMjFdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjIxXVtnXV09NTY1NzYrZyx5WzU2NTc2K2ddPV9bMjIxXVtnXSk7Zm9yKF9bMjIyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4NTU2XHU4NTNiXHU4NGZmXHU4NGZjXHU4NTU5XHU4NTQ4XHU4NTY4XHU4NTY0XHU4NTVlXHU4NTdhXHU3N2EyXHU4NTQzXHU4''@;'; put 'put ''NTcyXHU4NTdiXHU4NWE0XHU4NWE4XHU4NTg3XHU4NThmXHU4NTc5XHU4NWFlXHU4NTljXHU4NTg1XHU4NWI5XHU4NWI3XHU4NWIwXHU4NWQzXHU4NWMxXHU4NWRjXHU4NWZmXHU4NjI3XHU4NjA1XHU4NjI5XHU4NjE2XHU4NjNjXHU1ZWZlXHU1ZjA4XHU1OTNjXHU1OTQxXHU4MDM3XHU1OTU1''@;'; put 'put ''XHU1OTVhXHU1OTU4XHU1MzBmXHU1YzIyXHU1YzI1XHU1YzJjXHU1YzM0XHU2MjRjXHU2MjZhXHU2MjlmXHU2MmJiXHU2MmNhXHU2MmRhXHU2MmQ3XHU2MmVlXHU2MzIyXHU2MmY2XHU2MzM5XHU2MzRiXHU2MzQzXHU2M2FkXHU2M2Y2XHU2MzcxXHU2MzdhXHU2MzhlXHU2M2I0XHU2MzZkXHU2''@;'; put 'put ''M2FjXHU2MzhhXHU2MzY5XHU2M2FlXHU2M2JjXHU2M2YyXHU2M2Y4XHU2M2UwXHU2M2ZmXHU2M2M0XHU2M2RlXHU2M2NlXHU2NDUyXHU2M2M2XHU2M2JlXHU2NDQ1XHU2NDQxXHU2NDBiXHU2NDFiXHU2NDIwXHU2NDBjXHU2NDI2XHU2NDIxXHU2NDVlXHU2NDg0XHU2NDZkXHU2NDk2XHVmZmZk''@;'; put 'put ''Ii5zcGxpdCgiIiksZz0wO2chPV9bMjIyXS5sZW5ndGg7KytnKTY1NTMzIT09X1syMjJdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjIyXVtnXV09NTY4MzIrZyx5WzU2ODMyK2ddPV9bMjIyXVtnXSk7Zm9yKF9bMjIzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2NDdhXHU2NGI3XHU2NGI4XHU2NDk5XHU2NGJhXHU2NGMwXHU2NGQwXHU2NGQ3XHU2NGU0XHU2NGUyXHU2''@;'; put 'put ''NTA5XHU2NTI1XHU2NTJlXHU1ZjBiXHU1ZmQyXHU3NTE5XHU1ZjExXHU1MzVmXHU1M2YxXHU1M2ZkXHU1M2U5XHU1M2U4XHU1M2ZiXHU1NDEyXHU1NDE2XHU1NDA2XHU1NDRiXHU1NDUyXHU1NDUzXHU1NDU0XHU1NDU2XHU1NDQzXHU1NDIxXHU1NDU3XHU1NDU5XHU1NDIzXHU1NDMyXHU1NDgy''@;'; put 'put ''XHU1NDk0XHU1NDc3XHU1NDcxXHU1NDY0XHU1NDlhXHU1NDliXHU1NDg0XHU1NDc2XHU1NDY2XHU1NDlkXHU1NGQwXHU1NGFkXHU1NGMyXHU1NGI0XHU1NGQyXHU1NGE3XHU1NGE2XHU1NGQzXHU1NGQ0XHU1NDcyXHU1NGEzXHU1NGQ1XHU1NGJiXHU1NGJmXHU1NGNjXHU1NGQ5XHU1NGRhXHU1''@;'; put 'put ''NGRjXHU1NGE5XHU1NGFhXHU1NGE0XHU1NGRkXHU1NGNmXHU1NGRlXHU1NTFiXHU1NGU3XHU1NTIwXHU1NGZkXHU1NTE0XHU1NGYzXHU1NTIyXHU1NTIzXHU1NTBmXHU1NTExXHU1NTI3XHU1NTJhXHU1NTY3XHU1NThmXHU1NWI1XHU1NTQ5XHU1NTZkXHU1NTQxXHU1NTU1XHU1NTNmXHU1NTUw''@;'; put 'put ''XHU1NTNjXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjIzXS5sZW5ndGg7KytnKTY1NTMzIT09X1syMjNdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjIzXVtnXV09NTcwODgrZyx5WzU3MDg4K2ddPV9bMjIzXVtnXSk7Zm9yKF9bMjI0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NTM3XHU1NTU2XHU1NTc1XHU1NTc2XHU1NTc3XHU1NTMzXHU1NTMwXHU1NTVjXHU1''@;'; put 'put ''NThiXHU1NWQyXHU1NTgzXHU1NWIxXHU1NWI5XHU1NTg4XHU1NTgxXHU1NTlmXHU1NTdlXHU1NWQ2XHU1NTkxXHU1NTdiXHU1NWRmXHU1NWJkXHU1NWJlXHU1NTk0XHU1NTk5XHU1NWVhXHU1NWY3XHU1NWM5XHU1NjFmXHU1NWQxXHU1NWViXHU1NWVjXHU1NWQ0XHU1NWU2XHU1NWRkXHU1NWM0''@;'; put 'put ''XHU1NWVmXHU1NWU1XHU1NWYyXHU1NWYzXHU1NWNjXHU1NWNkXHU1NWU4XHU1NWY1XHU1NWU0XHU4Zjk0XHU1NjFlXHU1NjA4XHU1NjBjXHU1NjAxXHU1NjI0XHU1NjIzXHU1NWZlXHU1NjAwXHU1NjI3XHU1NjJkXHU1NjU4XHU1NjM5XHU1NjU3XHU1NjJjXHU1NjRkXHU1NjYyXHU1NjU5XHU1''@;'; put 'put ''NjVjXHU1NjRjXHU1NjU0XHU1Njg2XHU1NjY0XHU1NjcxXHU1NjZiXHU1NjdiXHU1NjdjXHU1Njg1XHU1NjkzXHU1NmFmXHU1NmQ0XHU1NmQ3XHU1NmRkXHU1NmUxXHU1NmY1XHU1NmViXHU1NmY5XHU1NmZmXHU1NzA0XHU1NzBhXHU1NzA5XHU1NzFjXHU1ZTBmXHU1ZTE5XHU1ZTE0XHU1ZTEx''@;'; put 'put ''XHU1ZTMxXHU1ZTNiXHU1ZTNjXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjI0XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMjRdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjI0XVtnXV09NTczNDQrZyx5WzU3MzQ0K2ddPV9bMjI0XVtnXSk7Zm9yKF9bMjI1XT0iXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1ZTM3XHU1ZTQ0XHU1ZTU0XHU1ZTViXHU1ZTVlXHU1ZTYxXHU1''@;'; put 'put ''YzhjXHU1YzdhXHU1YzhkXHU1YzkwXHU1Yzk2XHU1Yzg4XHU1Yzk4XHU1Yzk5XHU1YzkxXHU1YzlhXHU1YzljXHU1Y2I1XHU1Y2EyXHU1Y2JkXHU1Y2FjXHU1Y2FiXHU1Y2IxXHU1Y2EzXHU1Y2MxXHU1Y2I3XHU1Y2M0XHU1Y2QyXHU1Y2U0XHU1Y2NiXHU1Y2U1XHU1ZDAyXHU1ZDAzXHU1ZDI3''@;'; put 'put ''XHU1ZDI2XHU1ZDJlXHU1ZDI0XHU1ZDFlXHU1ZDA2XHU1ZDFiXHU1ZDU4XHU1ZDNlXHU1ZDM0XHU1ZDNkXHU1ZDZjXHU1ZDViXHU1ZDZmXHU1ZDVkXHU1ZDZiXHU1ZDRiXHU1ZDRhXHU1ZDY5XHU1ZDc0XHU1ZDgyXHU1ZDk5XHU1ZDlkXHU4YzczXHU1ZGI3XHU1ZGM1XHU1ZjczXHU1Zjc3XHU1''@;'; put 'put ''ZjgyXHU1Zjg3XHU1Zjg5XHU1ZjhjXHU1Zjk1XHU1Zjk5XHU1ZjljXHU1ZmE4XHU1ZmFkXHU1ZmI1XHU1ZmJjXHU4ODYyXHU1ZjYxXHU3MmFkXHU3MmIwXHU3MmI0XHU3MmI3XHU3MmI4XHU3MmMzXHU3MmMxXHU3MmNlXHU3MmNkXHU3MmQyXHU3MmU4XHU3MmVmXHU3MmU5XHU3MmYyXHU3MmY0''@;'; put 'put ''XHU3MmY3XHU3MzAxXHU3MmYzXHU3MzAzXHU3MmZhXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjI1XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMjVdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjI1XVtnXV09NTc2MDArZyx5WzU3NjAwK2ddPV9bMjI1XVtnXSk7Zm9yKF9bMjI2XT0iXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3MmZiXHU3MzE3XHU3MzEzXHU3MzIxXHU3''@;'; put 'put ''MzBhXHU3MzFlXHU3MzFkXHU3MzE1XHU3MzIyXHU3MzM5XHU3MzI1XHU3MzJjXHU3MzM4XHU3MzMxXHU3MzUwXHU3MzRkXHU3MzU3XHU3MzYwXHU3MzZjXHU3MzZmXHU3MzdlXHU4MjFiXHU1OTI1XHU5OGU3XHU1OTI0XHU1OTAyXHU5OTYzXHU5OTY3XHU5OTY4XHU5OTY5XHU5OTZhXHU5OTZi''@;'; put 'put ''XHU5OTZjXHU5OTc0XHU5OTc3XHU5OTdkXHU5OTgwXHU5OTg0XHU5OTg3XHU5OThhXHU5OThkXHU5OTkwXHU5OTkxXHU5OTkzXHU5OTk0XHU5OTk1XHU1ZTgwXHU1ZTkxXHU1ZThiXHU1ZTk2XHU1ZWE1XHU1ZWEwXHU1ZWI5XHU1ZWI1XHU1ZWJlXHU1ZWIzXHU4ZDUzXHU1ZWQyXHU1ZWQxXHU1''@;'; put 'put ''ZWRiXHU1ZWU4XHU1ZWVhXHU4MWJhXHU1ZmM0XHU1ZmM5XHU1ZmQ2XHU1ZmNmXHU2MDAzXHU1ZmVlXHU2MDA0XHU1ZmUxXHU1ZmU0XHU1ZmZlXHU2MDA1XHU2MDA2XHU1ZmVhXHU1ZmVkXHU1ZmY4XHU2MDE5XHU2MDM1XHU2MDI2XHU2MDFiXHU2MDBmXHU2MDBkXHU2MDI5XHU2MDJiXHU2MDBh''@;'; put 'put ''XHU2MDNmXHU2MDIxXHU2MDc4XHU2MDc5XHU2MDdiXHU2MDdhXHU2MDQyXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjI2XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMjZdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjI2XVtnXV09NTc4NTYrZyx5WzU3ODU2K2ddPV9bMjI2XVtnXSk7Zm9y''@;'; put 'put ''KF9bMjI3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2MDZhXHU2MDdkXHU2''@;'; put 'put ''MDk2XHU2MDlhXHU2MGFkXHU2MDlkXHU2MDgzXHU2MDkyXHU2MDhjXHU2MDliXHU2MGVjXHU2MGJiXHU2MGIxXHU2MGRkXHU2MGQ4XHU2MGM2XHU2MGRhXHU2MGI0XHU2MTIwXHU2MTI2XHU2MTE1XHU2MTIzXHU2MGY0XHU2MTAwXHU2MTBlXHU2MTJiXHU2MTRhXHU2MTc1XHU2MWFjXHU2MTk0''@;'; put 'put ''XHU2MWE3XHU2MWI3XHU2MWQ0XHU2MWY1XHU1ZmRkXHU5NmIzXHU5NWU5XHU5NWViXHU5NWYxXHU5NWYzXHU5NWY1XHU5NWY2XHU5NWZjXHU5NWZlXHU5NjAzXHU5NjA0XHU5NjA2XHU5NjA4XHU5NjBhXHU5NjBiXHU5NjBjXHU5NjBkXHU5NjBmXHU5NjEyXHU5NjE1XHU5NjE2XHU5NjE3XHU5''@;'; put 'put ''NjE5XHU5NjFhXHU0ZTJjXHU3MjNmXHU2MjE1XHU2YzM1XHU2YzU0XHU2YzVjXHU2YzRhXHU2Y2EzXHU2Yzg1XHU2YzkwXHU2Yzk0XHU2YzhjXHU2YzY4XHU2YzY5XHU2Yzc0XHU2Yzc2XHU2Yzg2XHU2Y2E5XHU2Y2QwXHU2Y2Q0XHU2Y2FkXHU2Y2Y3XHU2Y2Y4XHU2Y2YxXHU2Y2Q3XHU2Y2Iy''@;'; put 'put ''XHU2Y2UwXHU2Y2Q2XHU2Y2ZhXHU2Y2ViXHU2Y2VlXHU2Y2IxXHU2Y2QzXHU2Y2VmXHU2Y2ZlXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjI3XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMjddW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjI3XVtnXV09NTgxMTIrZyx5WzU4MTEyK2ddPV9b''@;'; put 'put ''MjI3XVtnXSk7Zm9yKF9bMjI4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2''@;'; put 'put ''ZDM5XHU2ZDI3XHU2ZDBjXHU2ZDQzXHU2ZDQ4XHU2ZDA3XHU2ZDA0XHU2ZDE5XHU2ZDBlXHU2ZDJiXHU2ZDRkXHU2ZDJlXHU2ZDM1XHU2ZDFhXHU2ZDRmXHU2ZDUyXHU2ZDU0XHU2ZDMzXHU2ZDkxXHU2ZDZmXHU2ZDllXHU2ZGEwXHU2ZDVlXHU2ZDkzXHU2ZDk0XHU2ZDVjXHU2ZDYwXHU2ZDdj''@;'; put 'put ''XHU2ZDYzXHU2ZTFhXHU2ZGM3XHU2ZGM1XHU2ZGRlXHU2ZTBlXHU2ZGJmXHU2ZGUwXHU2ZTExXHU2ZGU2XHU2ZGRkXHU2ZGQ5XHU2ZTE2XHU2ZGFiXHU2ZTBjXHU2ZGFlXHU2ZTJiXHU2ZTZlXHU2ZTRlXHU2ZTZiXHU2ZWIyXHU2ZTVmXHU2ZTg2XHU2ZTUzXHU2ZTU0XHU2ZTMyXHU2ZTI1XHU2''@;'; put 'put ''ZTQ0XHU2ZWRmXHU2ZWIxXHU2ZTk4XHU2ZWUwXHU2ZjJkXHU2ZWUyXHU2ZWE1XHU2ZWE3XHU2ZWJkXHU2ZWJiXHU2ZWI3XHU2ZWQ3XHU2ZWI0XHU2ZWNmXHU2ZThmXHU2ZWMyXHU2ZTlmXHU2ZjYyXHU2ZjQ2XHU2ZjQ3XHU2ZjI0XHU2ZjE1XHU2ZWY5XHU2ZjJmXHU2ZjM2XHU2ZjRiXHU2Zjc0''@;'; put 'put ''XHU2ZjJhXHU2ZjA5XHU2ZjI5XHU2Zjg5XHU2ZjhkXHU2ZjhjXHU2Zjc4XHU2ZjcyXHU2ZjdjXHU2ZjdhXHU2ZmQxXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjI4XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMjhdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjI4XVtnXV09NTgzNjgrZyx5''@;'; put 'put ''WzU4MzY4K2ddPV9bMjI4XVtnXSk7Zm9yKF9bMjI5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHU2ZmM5XHU2ZmE3XHU2ZmI5XHU2ZmI2XHU2ZmMyXHU2ZmUxXHU2ZmVlXHU2ZmRlXHU2ZmUwXHU2ZmVmXHU3MDFhXHU3MDIzXHU3MDFiXHU3MDM5XHU3MDM1XHU3MDRmXHU3MDVlXHU1YjgwXHU1Yjg0XHU1Yjk1XHU1YjkzXHU1YmE1XHU1YmI4XHU3NTJmXHU5YTllXHU2NDM0''@;'; put 'put ''XHU1YmU0XHU1YmVlXHU4OTMwXHU1YmYwXHU4ZTQ3XHU4YjA3XHU4ZmI2XHU4ZmQzXHU4ZmQ1XHU4ZmU1XHU4ZmVlXHU4ZmU0XHU4ZmU5XHU4ZmU2XHU4ZmYzXHU4ZmU4XHU5MDA1XHU5MDA0XHU5MDBiXHU5MDI2XHU5MDExXHU5MDBkXHU5MDE2XHU5MDIxXHU5MDM1XHU5MDM2XHU5MDJkXHU5''@;'; put 'put ''MDJmXHU5MDQ0XHU5MDUxXHU5MDUyXHU5MDUwXHU5MDY4XHU5MDU4XHU5MDYyXHU5MDViXHU2NmI5XHU5MDc0XHU5MDdkXHU5MDgyXHU5MDg4XHU5MDgzXHU5MDhiXHU1ZjUwXHU1ZjU3XHU1ZjU2XHU1ZjU4XHU1YzNiXHU1NGFiXHU1YzUwXHU1YzU5XHU1YjcxXHU1YzYzXHU1YzY2XHU3ZmJj''@;'; put 'put ''XHU1ZjJhXHU1ZjI5XHU1ZjJkXHU4Mjc0XHU1ZjNjXHU5YjNiXHU1YzZlXHU1OTgxXHU1OTgzXHU1OThkXHU1OWE5XHU1OWFhXHU1OWEzXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjI5XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMjldW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjI5XVtn''@;'; put 'put ''XV09NTg2MjQrZyx5WzU4NjI0K2ddPV9bMjI5XVtnXSk7Zm9yKF9bMjMwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1OTk3XHU1OWNhXHU1OWFiXHU1OTllXHU1OWE0XHU1OWQyXHU1OWIyXHU1OWFmXHU1OWQ3XHU1OWJlXHU1YTA1XHU1YTA2XHU1OWRkXHU1YTA4XHU1OWUzXHU1OWQ4XHU1OWY5XHU1YTBjXHU1YTA5XHU1YTMyXHU1YTM0XHU1YTExXHU1YTIzXHU1YTEz''@;'; put 'put ''XHU1YTQwXHU1YTY3XHU1YTRhXHU1YTU1XHU1YTNjXHU1YTYyXHU1YTc1XHU4MGVjXHU1YWFhXHU1YTliXHU1YTc3XHU1YTdhXHU1YWJlXHU1YWViXHU1YWIyXHU1YWQyXHU1YWQ0XHU1YWI4XHU1YWUwXHU1YWUzXHU1YWYxXHU1YWQ2XHU1YWU2XHU1YWQ4XHU1YWRjXHU1YjA5XHU1YjE3XHU1''@;'; put 'put ''YjE2XHU1YjMyXHU1YjM3XHU1YjQwXHU1YzE1XHU1YzFjXHU1YjVhXHU1YjY1XHU1YjczXHU1YjUxXHU1YjUzXHU1YjYyXHU5YTc1XHU5YTc3XHU5YTc4XHU5YTdhXHU5YTdmXHU5YTdkXHU5YTgwXHU5YTgxXHU5YTg1XHU5YTg4XHU5YThhXHU5YTkwXHU5YTkyXHU5YTkzXHU5YTk2XHU5YTk4''@;'; put 'put ''XHU5YTliXHU5YTljXHU5YTlkXHU5YTlmXHU5YWEwXHU5YWEyXHU5YWEzXHU5YWE1XHU5YWE3XHU3ZTlmXHU3ZWExXHU3ZWEzXHU3ZWE1XHU3ZWE4XHU3ZWE5XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjMwXS5sZW5ndGg7KytnKTY1NTMzIT09X1syMzBdW2ddLmNoYXJDb2RlQXQoMCkm''@;'; put 'put ''JihJW19bMjMwXVtnXV09NTg4ODArZyx5WzU4ODgwK2ddPV9bMjMwXVtnXSk7Zm9yKF9bMjMxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ZWFkXHU3ZWIwXHU3ZWJlXHU3ZWMwXHU3ZWMxXHU3ZWMyXHU3ZWM5XHU3ZWNiXHU3ZWNjXHU3ZWQwXHU3ZWQ0XHU3ZWQ3XHU3ZWRiXHU3ZWUwXHU3ZWUxXHU3ZWU4XHU3ZWViXHU3ZWVlXHU3ZWVmXHU3ZWYxXHU3ZWYyXHU3ZjBk''@;'; put 'put ''XHU3ZWY2XHU3ZWZhXHU3ZWZiXHU3ZWZlXHU3ZjAxXHU3ZjAyXHU3ZjAzXHU3ZjA3XHU3ZjA4XHU3ZjBiXHU3ZjBjXHU3ZjBmXHU3ZjExXHU3ZjEyXHU3ZjE3XHU3ZjE5XHU3ZjFjXHU3ZjFiXHU3ZjFmXHU3ZjIxXHU3ZjIyXHU3ZjIzXHU3ZjI0XHU3ZjI1XHU3ZjI2XHU3ZjI3XHU3ZjJhXHU3''@;'; put 'put ''ZjJiXHU3ZjJjXHU3ZjJkXHU3ZjJmXHU3ZjMwXHU3ZjMxXHU3ZjMyXHU3ZjMzXHU3ZjM1XHU1ZTdhXHU3NTdmXHU1ZGRiXHU3NTNlXHU5MDk1XHU3MzhlXHU3MzkxXHU3M2FlXHU3M2EyXHU3MzlmXHU3M2NmXHU3M2MyXHU3M2QxXHU3M2I3XHU3M2IzXHU3M2MwXHU3M2M5XHU3M2M4XHU3M2U1''@;'; put 'put ''XHU3M2Q5XHU5ODdjXHU3NDBhXHU3M2U5XHU3M2U3XHU3M2RlXHU3M2JhXHU3M2YyXHU3NDBmXHU3NDJhXHU3NDViXHU3NDI2XHU3NDI1XHU3NDI4XHU3NDMwXHU3NDJlXHU3NDJjXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjMxXS5sZW5ndGg7KytnKTY1NTMzIT09X1syMzFdW2ddLmNo''@;'; put 'put ''YXJDb2RlQXQoMCkmJihJW19bMjMxXVtnXV09NTkxMzYrZyx5WzU5MTM2K2ddPV9bMjMxXVtnXSk7Zm9yKF9bMjMyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NDFiXHU3NDFhXHU3NDQxXHU3NDVjXHU3NDU3XHU3NDU1XHU3NDU5XHU3NDc3XHU3NDZkXHU3NDdlXHU3NDljXHU3NDhlXHU3NDgwXHU3NDgxXHU3NDg3XHU3NDhiXHU3NDllXHU3NGE4XHU3NGE5XHU3NDkw''@;'; put 'put ''XHU3NGE3XHU3NGQyXHU3NGJhXHU5N2VhXHU5N2ViXHU5N2VjXHU2NzRjXHU2NzUzXHU2NzVlXHU2NzQ4XHU2NzY5XHU2N2E1XHU2Nzg3XHU2NzZhXHU2NzczXHU2Nzk4XHU2N2E3XHU2Nzc1XHU2N2E4XHU2NzllXHU2N2FkXHU2NzhiXHU2Nzc3XHU2NzdjXHU2N2YwXHU2ODA5XHU2N2Q4XHU2''@;'; put 'put ''ODBhXHU2N2U5XHU2N2IwXHU2ODBjXHU2N2Q5XHU2N2I1XHU2N2RhXHU2N2IzXHU2N2RkXHU2ODAwXHU2N2MzXHU2N2I4XHU2N2UyXHU2ODBlXHU2N2MxXHU2N2ZkXHU2ODMyXHU2ODMzXHU2ODYwXHU2ODYxXHU2ODRlXHU2ODYyXHU2ODQ0XHU2ODY0XHU2ODgzXHU2ODFkXHU2ODU1XHU2ODY2''@;'; put 'put ''XHU2ODQxXHU2ODY3XHU2ODQwXHU2ODNlXHU2ODRhXHU2ODQ5XHU2ODI5XHU2OGI1XHU2ODhmXHU2ODc0XHU2ODc3XHU2ODkzXHU2ODZiXHU2OGMyXHU2OTZlXHU2OGZjXHU2OTFmXHU2OTIwXHU2OGY5XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjMyXS5sZW5ndGg7KytnKTY1NTMzIT09''@;'; put 'put ''X1syMzJdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjMyXVtnXV09NTkzOTIrZyx5WzU5MzkyK2ddPV9bMjMyXVtnXSk7Zm9yKF9bMjMzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2OTI0XHU2OGYwXHU2OTBiXHU2OTAxXHU2OTU3XHU2OGUzXHU2OTEwXHU2OTcxXHU2OTM5XHU2OTYwXHU2OTQyXHU2OTVkXHU2OTg0XHU2OTZiXHU2OTgwXHU2OTk4XHU2OTc4XHU2OTM0''@;'; put 'put ''XHU2OWNjXHU2OTg3XHU2OTg4XHU2OWNlXHU2OTg5XHU2OTY2XHU2OTYzXHU2OTc5XHU2OTliXHU2OWE3XHU2OWJiXHU2OWFiXHU2OWFkXHU2OWQ0XHU2OWIxXHU2OWMxXHU2OWNhXHU2OWRmXHU2OTk1XHU2OWUwXHU2OThkXHU2OWZmXHU2YTJmXHU2OWVkXHU2YTE3XHU2YTE4XHU2YTY1XHU2''@;'; put 'put ''OWYyXHU2YTQ0XHU2YTNlXHU2YWEwXHU2YTUwXHU2YTViXHU2YTM1XHU2YThlXHU2YTc5XHU2YTNkXHU2YTI4XHU2YTU4XHU2YTdjXHU2YTkxXHU2YTkwXHU2YWE5XHU2YTk3XHU2YWFiXHU3MzM3XHU3MzUyXHU2YjgxXHU2YjgyXHU2Yjg3XHU2Yjg0XHU2YjkyXHU2YjkzXHU2YjhkXHU2Yjlh''@;'; put 'put ''XHU2YjliXHU2YmExXHU2YmFhXHU4ZjZiXHU4ZjZkXHU4ZjcxXHU4ZjcyXHU4ZjczXHU4Zjc1XHU4Zjc2XHU4Zjc4XHU4Zjc3XHU4Zjc5XHU4ZjdhXHU4ZjdjXHU4ZjdlXHU4ZjgxXHU4ZjgyXHU4Zjg0XHU4Zjg3XHU4ZjhiXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjMzXS5sZW5ndGg7''@;'; put 'put ''KytnKTY1NTMzIT09X1syMzNdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjMzXVtnXV09NTk2NDgrZyx5WzU5NjQ4K2ddPV9bMjMzXVtnXSk7Zm9yKF9bMjM0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4ZjhkXHU4ZjhlXHU4ZjhmXHU4Zjk4XHU4ZjlhXHU4ZWNlXHU2MjBiXHU2MjE3XHU2MjFiXHU2MjFmXHU2MjIyXHU2MjIxXHU2MjI1XHU2MjI0XHU2MjJjXHU4MWU3''@;'; put 'put ''XHU3NGVmXHU3NGY0XHU3NGZmXHU3NTBmXHU3NTExXHU3NTEzXHU2NTM0XHU2NWVlXHU2NWVmXHU2NWYwXHU2NjBhXHU2NjE5XHU2NzcyXHU2NjAzXHU2NjE1XHU2NjAwXHU3MDg1XHU2NmY3XHU2NjFkXHU2NjM0XHU2NjMxXHU2NjM2XHU2NjM1XHU4MDA2XHU2NjVmXHU2NjU0XHU2NjQxXHU2''@;'; put 'put ''NjRmXHU2NjU2XHU2NjYxXHU2NjU3XHU2Njc3XHU2Njg0XHU2NjhjXHU2NmE3XHU2NjlkXHU2NmJlXHU2NmRiXHU2NmRjXHU2NmU2XHU2NmU5XHU4ZDMyXHU4ZDMzXHU4ZDM2XHU4ZDNiXHU4ZDNkXHU4ZDQwXHU4ZDQ1XHU4ZDQ2XHU4ZDQ4XHU4ZDQ5XHU4ZDQ3XHU4ZDRkXHU4ZDU1XHU4ZDU5''@;'; put 'put ''XHU4OWM3XHU4OWNhXHU4OWNiXHU4OWNjXHU4OWNlXHU4OWNmXHU4OWQwXHU4OWQxXHU3MjZlXHU3MjlmXHU3MjVkXHU3MjY2XHU3MjZmXHU3MjdlXHU3MjdmXHU3Mjg0XHU3MjhiXHU3MjhkXHU3MjhmXHU3MjkyXHU2MzA4XHU2MzMyXHU2M2IwXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9b''@;'; put 'put ''MjM0XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMzRdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjM0XVtnXV09NTk5MDQrZyx5WzU5OTA0K2ddPV9bMjM0XVtnXSk7Zm9yKF9bMjM1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2NDNmXHU2NGQ4XHU4MDA0XHU2YmVhXHU2YmYzXHU2YmZkXHU2YmY1XHU2YmY5XHU2YzA1XHU2YzA3XHU2YzA2XHU2YzBkXHU2YzE1XHU2YzE4''@;'; put 'put ''XHU2YzE5XHU2YzFhXHU2YzIxXHU2YzI5XHU2YzI0XHU2YzJhXHU2YzMyXHU2NTM1XHU2NTU1XHU2NTZiXHU3MjRkXHU3MjUyXHU3MjU2XHU3MjMwXHU4NjYyXHU1MjE2XHU4MDlmXHU4MDljXHU4MDkzXHU4MGJjXHU2NzBhXHU4MGJkXHU4MGIxXHU4MGFiXHU4MGFkXHU4MGI0XHU4MGI3XHU4''@;'; put 'put ''MGU3XHU4MGU4XHU4MGU5XHU4MGVhXHU4MGRiXHU4MGMyXHU4MGM0XHU4MGQ5XHU4MGNkXHU4MGQ3XHU2NzEwXHU4MGRkXHU4MGViXHU4MGYxXHU4MGY0XHU4MGVkXHU4MTBkXHU4MTBlXHU4MGYyXHU4MGZjXHU2NzE1XHU4MTEyXHU4YzVhXHU4MTM2XHU4MTFlXHU4MTJjXHU4MTE4XHU4MTMy''@;'; put 'put ''XHU4MTQ4XHU4MTRjXHU4MTUzXHU4MTc0XHU4MTU5XHU4MTVhXHU4MTcxXHU4MTYwXHU4MTY5XHU4MTdjXHU4MTdkXHU4MTZkXHU4MTY3XHU1ODRkXHU1YWI1XHU4MTg4XHU4MTgyXHU4MTkxXHU2ZWQ1XHU4MWEzXHU4MWFhXHU4MWNjXHU2NzI2XHU4MWNhXHU4MWJiXHVmZmZkIi5zcGxpdCgi''@;'; put 'put ''IiksZz0wO2chPV9bMjM1XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMzVdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjM1XVtnXV09NjAxNjArZyx5WzYwMTYwK2ddPV9bMjM1XVtnXSk7Zm9yKF9bMjM2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MWMxXHU4MWE2XHU2YjI0XHU2YjM3XHU2YjM5XHU2YjQzXHU2YjQ2XHU2YjU5XHU5OGQxXHU5OGQyXHU5OGQzXHU5OGQ1''@;'; put 'put ''XHU5OGQ5XHU5OGRhXHU2YmIzXHU1ZjQwXHU2YmMyXHU4OWYzXHU2NTkwXHU5ZjUxXHU2NTkzXHU2NWJjXHU2NWM2XHU2NWM0XHU2NWMzXHU2NWNjXHU2NWNlXHU2NWQyXHU2NWQ2XHU3MDgwXHU3MDljXHU3MDk2XHU3MDlkXHU3MGJiXHU3MGMwXHU3MGI3XHU3MGFiXHU3MGIxXHU3MGU4XHU3''@;'; put 'put ''MGNhXHU3MTEwXHU3MTEzXHU3MTE2XHU3MTJmXHU3MTMxXHU3MTczXHU3MTVjXHU3MTY4XHU3MTQ1XHU3MTcyXHU3MTRhXHU3MTc4XHU3MTdhXHU3MTk4XHU3MWIzXHU3MWI1XHU3MWE4XHU3MWEwXHU3MWUwXHU3MWQ0XHU3MWU3XHU3MWY5XHU3MjFkXHU3MjI4XHU3MDZjXHU3MTE4XHU3MTY2''@;'; put 'put ''XHU3MWI5XHU2MjNlXHU2MjNkXHU2MjQzXHU2MjQ4XHU2MjQ5XHU3OTNiXHU3OTQwXHU3OTQ2XHU3OTQ5XHU3OTViXHU3OTVjXHU3OTUzXHU3OTVhXHU3OTYyXHU3OTU3XHU3OTYwXHU3OTZmXHU3OTY3XHU3OTdhXHU3OTg1XHU3OThhXHU3OTlhXHU3OWE3XHU3OWIzXHU1ZmQxXHU1ZmQwXHVm''@;'; put 'put ''ZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjM2XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMzZdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjM2XVtnXV09NjA0MTYrZyx5WzYwNDE2K2ddPV9bMjM2XVtnXSk7Zm9yKF9bMjM3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2MDNjXHU2MDVkXHU2MDVhXHU2MDY3XHU2MDQxXHU2MDU5XHU2MDYzXHU2MGFiXHU2MTA2XHU2MTBk''@;'; put 'put ''XHU2MTVkXHU2MWE5XHU2MTlkXHU2MWNiXHU2MWQxXHU2MjA2XHU4MDgwXHU4MDdmXHU2YzkzXHU2Y2Y2XHU2ZGZjXHU3N2Y2XHU3N2Y4XHU3ODAwXHU3ODA5XHU3ODE3XHU3ODE4XHU3ODExXHU2NWFiXHU3ODJkXHU3ODFjXHU3ODFkXHU3ODM5XHU3ODNhXHU3ODNiXHU3ODFmXHU3ODNjXHU3''@;'; put 'put ''ODI1XHU3ODJjXHU3ODIzXHU3ODI5XHU3ODRlXHU3ODZkXHU3ODU2XHU3ODU3XHU3ODI2XHU3ODUwXHU3ODQ3XHU3ODRjXHU3ODZhXHU3ODliXHU3ODkzXHU3ODlhXHU3ODg3XHU3ODljXHU3OGExXHU3OGEzXHU3OGIyXHU3OGI5XHU3OGE1XHU3OGQ0XHU3OGQ5XHU3OGM5XHU3OGVjXHU3OGYy''@;'; put 'put ''XHU3OTA1XHU3OGY0XHU3OTEzXHU3OTI0XHU3OTFlXHU3OTM0XHU5ZjliXHU5ZWY5XHU5ZWZiXHU5ZWZjXHU3NmYxXHU3NzA0XHU3NzBkXHU3NmY5XHU3NzA3XHU3NzA4XHU3NzFhXHU3NzIyXHU3NzE5XHU3NzJkXHU3NzI2XHU3NzM1XHU3NzM4XHU3NzUwXHU3NzUxXHU3NzQ3XHU3NzQzXHU3''@;'; put 'put ''NzVhXHU3NzY4XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjM3XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMzddW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjM3XVtnXV09NjA2NzIrZyx5WzYwNjcyK2ddPV9bMjM3XVtnXSk7Zm9yKF9bMjM4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NzYyXHU3NzY1XHU3NzdmXHU3NzhkXHU3NzdkXHU3NzgwXHU3NzhjXHU3Nzkx''@;'; put 'put ''XHU3NzlmXHU3N2EwXHU3N2IwXHU3N2I1XHU3N2JkXHU3NTNhXHU3NTQwXHU3NTRlXHU3NTRiXHU3NTQ4XHU3NTViXHU3NTcyXHU3NTc5XHU3NTgzXHU3ZjU4XHU3ZjYxXHU3ZjVmXHU4YTQ4XHU3ZjY4XHU3Zjc0XHU3ZjcxXHU3Zjc5XHU3ZjgxXHU3ZjdlXHU3NmNkXHU3NmU1XHU4ODMyXHU5''@;'; put 'put ''NDg1XHU5NDg2XHU5NDg3XHU5NDhiXHU5NDhhXHU5NDhjXHU5NDhkXHU5NDhmXHU5NDkwXHU5NDk0XHU5NDk3XHU5NDk1XHU5NDlhXHU5NDliXHU5NDljXHU5NGEzXHU5NGE0XHU5NGFiXHU5NGFhXHU5NGFkXHU5NGFjXHU5NGFmXHU5NGIwXHU5NGIyXHU5NGI0XHU5NGI2XHU5NGI3XHU5NGI4''@;'; put 'put ''XHU5NGI5XHU5NGJhXHU5NGJjXHU5NGJkXHU5NGJmXHU5NGM0XHU5NGM4XHU5NGM5XHU5NGNhXHU5NGNiXHU5NGNjXHU5NGNkXHU5NGNlXHU5NGQwXHU5NGQxXHU5NGQyXHU5NGQ1XHU5NGQ2XHU5NGQ3XHU5NGQ5XHU5NGQ4XHU5NGRiXHU5NGRlXHU5NGRmXHU5NGUwXHU5NGUyXHU5NGU0XHU5''@;'; put 'put ''NGU1XHU5NGU3XHU5NGU4XHU5NGVhXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjM4XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMzhdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjM4XVtnXV09NjA5MjgrZyx5WzYwOTI4K2ddPV9bMjM4XVtnXSk7Zm9yKF9bMjM5XT0iXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5NGU5XHU5NGViXHU5NGVlXHU5NGVmXHU5NGYzXHU5NGY0''@;'; put 'put ''XHU5NGY1XHU5NGY3XHU5NGY5XHU5NGZjXHU5NGZkXHU5NGZmXHU5NTAzXHU5NTAyXHU5NTA2XHU5NTA3XHU5NTA5XHU5NTBhXHU5NTBkXHU5NTBlXHU5NTBmXHU5NTEyXHU5NTEzXHU5NTE0XHU5NTE1XHU5NTE2XHU5NTE4XHU5NTFiXHU5NTFkXHU5NTFlXHU5NTFmXHU5NTIyXHU5NTJhXHU5''@;'; put 'put ''NTJiXHU5NTI5XHU5NTJjXHU5NTMxXHU5NTMyXHU5NTM0XHU5NTM2XHU5NTM3XHU5NTM4XHU5NTNjXHU5NTNlXHU5NTNmXHU5NTQyXHU5NTM1XHU5NTQ0XHU5NTQ1XHU5NTQ2XHU5NTQ5XHU5NTRjXHU5NTRlXHU5NTRmXHU5NTUyXHU5NTUzXHU5NTU0XHU5NTU2XHU5NTU3XHU5NTU4XHU5NTU5''@;'; put 'put ''XHU5NTViXHU5NTVlXHU5NTVmXHU5NTVkXHU5NTYxXHU5NTYyXHU5NTY0XHU5NTY1XHU5NTY2XHU5NTY3XHU5NTY4XHU5NTY5XHU5NTZhXHU5NTZiXHU5NTZjXHU5NTZmXHU5NTcxXHU5NTcyXHU5NTczXHU5NTNhXHU3N2U3XHU3N2VjXHU5NmM5XHU3OWQ1XHU3OWVkXHU3OWUzXHU3OWViXHU3''@;'; put 'put ''YTA2XHU1ZDQ3XHU3YTAzXHU3YTAyXHU3YTFlXHU3YTE0XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjM5XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMzldW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjM5XVtnXV09NjExODQrZyx5WzYxMTg0K2ddPV9bMjM5XVtnXSk7Zm9yKF9bMjQwXT0i''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3YTM5XHU3YTM3XHU3YTUxXHU5ZWNm''@;'; put 'put ''XHU5OWE1XHU3YTcwXHU3Njg4XHU3NjhlXHU3NjkzXHU3Njk5XHU3NmE0XHU3NGRlXHU3NGUwXHU3NTJjXHU5ZTIwXHU5ZTIyXHU5ZTI4XHU5ZTI5XHU5ZTJhXHU5ZTJiXHU5ZTJjXHU5ZTMyXHU5ZTMxXHU5ZTM2XHU5ZTM4XHU5ZTM3XHU5ZTM5XHU5ZTNhXHU5ZTNlXHU5ZTQxXHU5ZTQyXHU5''@;'; put 'put ''ZTQ0XHU5ZTQ2XHU5ZTQ3XHU5ZTQ4XHU5ZTQ5XHU5ZTRiXHU5ZTRjXHU5ZTRlXHU5ZTUxXHU5ZTU1XHU5ZTU3XHU5ZTVhXHU5ZTViXHU5ZTVjXHU5ZTVlXHU5ZTYzXHU5ZTY2XHU5ZTY3XHU5ZTY4XHU5ZTY5XHU5ZTZhXHU5ZTZiXHU5ZTZjXHU5ZTcxXHU5ZTZkXHU5ZTczXHU3NTkyXHU3NTk0''@;'; put 'put ''XHU3NTk2XHU3NWEwXHU3NTlkXHU3NWFjXHU3NWEzXHU3NWIzXHU3NWI0XHU3NWI4XHU3NWM0XHU3NWIxXHU3NWIwXHU3NWMzXHU3NWMyXHU3NWQ2XHU3NWNkXHU3NWUzXHU3NWU4XHU3NWU2XHU3NWU0XHU3NWViXHU3NWU3XHU3NjAzXHU3NWYxXHU3NWZjXHU3NWZmXHU3NjEwXHU3NjAwXHU3''@;'; put 'put ''NjA1XHU3NjBjXHU3NjE3XHU3NjBhXHU3NjI1XHU3NjE4XHU3NjE1XHU3NjE5XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjQwXS5sZW5ndGg7KytnKTY1NTMzIT09X1syNDBdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjQwXVtnXV09NjE0NDArZyx5WzYxNDQwK2ddPV9bMjQwXVtnXSk7''@;'; put 'put ''Zm9yKF9bMjQxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NjFiXHU3NjNj''@;'; put 'put ''XHU3NjIyXHU3NjIwXHU3NjQwXHU3NjJkXHU3NjMwXHU3NjNmXHU3NjM1XHU3NjQzXHU3NjNlXHU3NjMzXHU3NjRkXHU3NjVlXHU3NjU0XHU3NjVjXHU3NjU2XHU3NjZiXHU3NjZmXHU3ZmNhXHU3YWU2XHU3YTc4XHU3YTc5XHU3YTgwXHU3YTg2XHU3YTg4XHU3YTk1XHU3YWE2XHU3YWEwXHU3''@;'; put 'put ''YWFjXHU3YWE4XHU3YWFkXHU3YWIzXHU4ODY0XHU4ODY5XHU4ODcyXHU4ODdkXHU4ODdmXHU4ODgyXHU4OGEyXHU4OGM2XHU4OGI3XHU4OGJjXHU4OGM5XHU4OGUyXHU4OGNlXHU4OGUzXHU4OGU1XHU4OGYxXHU4OTFhXHU4OGZjXHU4OGU4XHU4OGZlXHU4OGYwXHU4OTIxXHU4OTE5XHU4OTEz''@;'; put 'put ''XHU4OTFiXHU4OTBhXHU4OTM0XHU4OTJiXHU4OTM2XHU4OTQxXHU4OTY2XHU4OTdiXHU3NThiXHU4MGU1XHU3NmIyXHU3NmI0XHU3N2RjXHU4MDEyXHU4MDE0XHU4MDE2XHU4MDFjXHU4MDIwXHU4MDIyXHU4MDI1XHU4MDI2XHU4MDI3XHU4MDI5XHU4MDI4XHU4MDMxXHU4MDBiXHU4MDM1XHU4''@;'; put 'put ''MDQzXHU4MDQ2XHU4MDRkXHU4MDUyXHU4MDY5XHU4MDcxXHU4OTgzXHU5ODc4XHU5ODgwXHU5ODgzXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjQxXS5sZW5ndGg7KytnKTY1NTMzIT09X1syNDFdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjQxXVtnXV09NjE2OTYrZyx5WzYxNjk2K2dd''@;'; put 'put ''PV9bMjQxXVtnXSk7Zm9yKF9bMjQyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHU5ODg5XHU5ODhjXHU5ODhkXHU5ODhmXHU5ODk0XHU5ODlhXHU5ODliXHU5ODllXHU5ODlmXHU5OGExXHU5OGEyXHU5OGE1XHU5OGE2XHU4NjRkXHU4NjU0XHU4NjZjXHU4NjZlXHU4NjdmXHU4NjdhXHU4NjdjXHU4NjdiXHU4NmE4XHU4NjhkXHU4NjhiXHU4NmFjXHU4NjlkXHU4NmE3XHU4''@;'; put 'put ''NmEzXHU4NmFhXHU4NjkzXHU4NmE5XHU4NmI2XHU4NmM0XHU4NmI1XHU4NmNlXHU4NmIwXHU4NmJhXHU4NmIxXHU4NmFmXHU4NmM5XHU4NmNmXHU4NmI0XHU4NmU5XHU4NmYxXHU4NmYyXHU4NmVkXHU4NmYzXHU4NmQwXHU4NzEzXHU4NmRlXHU4NmY0XHU4NmRmXHU4NmQ4XHU4NmQxXHU4NzAz''@;'; put 'put ''XHU4NzA3XHU4NmY4XHU4NzA4XHU4NzBhXHU4NzBkXHU4NzA5XHU4NzIzXHU4NzNiXHU4NzFlXHU4NzI1XHU4NzJlXHU4NzFhXHU4NzNlXHU4NzQ4XHU4NzM0XHU4NzMxXHU4NzI5XHU4NzM3XHU4NzNmXHU4NzgyXHU4NzIyXHU4NzdkXHU4NzdlXHU4NzdiXHU4NzYwXHU4NzcwXHU4NzRjXHU4''@;'; put 'put ''NzZlXHU4NzhiXHU4NzUzXHU4NzYzXHU4NzdjXHU4NzY0XHU4NzU5XHU4NzY1XHU4NzkzXHU4N2FmXHU4N2E4XHU4N2QyXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjQyXS5sZW5ndGg7KytnKTY1NTMzIT09X1syNDJdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjQyXVtnXV09NjE5NTIr''@;'; put 'put ''Zyx5WzYxOTUyK2ddPV9bMjQyXVtnXSk7Zm9yKF9bMjQzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHU4N2M2XHU4Nzg4XHU4Nzg1XHU4N2FkXHU4Nzk3XHU4NzgzXHU4N2FiXHU4N2U1XHU4N2FjXHU4N2I1XHU4N2IzXHU4N2NiXHU4N2QzXHU4N2JkXHU4N2QxXHU4N2MwXHU4N2NhXHU4N2RiXHU4N2VhXHU4N2UwXHU4N2VlXHU4ODE2XHU4ODEzXHU4N2ZlXHU4ODBhXHU4''@;'; put 'put ''ODFiXHU4ODIxXHU4ODM5XHU4ODNjXHU3ZjM2XHU3ZjQyXHU3ZjQ0XHU3ZjQ1XHU4MjEwXHU3YWZhXHU3YWZkXHU3YjA4XHU3YjAzXHU3YjA0XHU3YjE1XHU3YjBhXHU3YjJiXHU3YjBmXHU3YjQ3XHU3YjM4XHU3YjJhXHU3YjE5XHU3YjJlXHU3YjMxXHU3YjIwXHU3YjI1XHU3YjI0XHU3YjMz''@;'; put 'put ''XHU3YjNlXHU3YjFlXHU3YjU4XHU3YjVhXHU3YjQ1XHU3Yjc1XHU3YjRjXHU3YjVkXHU3YjYwXHU3YjZlXHU3YjdiXHU3YjYyXHU3YjcyXHU3YjcxXHU3YjkwXHU3YmE2XHU3YmE3XHU3YmI4XHU3YmFjXHU3YjlkXHU3YmE4XHU3Yjg1XHU3YmFhXHU3YjljXHU3YmEyXHU3YmFiXHU3YmI0XHU3''@;'; put 'put ''YmQxXHU3YmMxXHU3YmNjXHU3YmRkXHU3YmRhXHU3YmU1XHU3YmU2XHU3YmVhXHU3YzBjXHU3YmZlXHU3YmZjXHU3YzBmXHU3YzE2XHU3YzBiXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjQzXS5sZW5ndGg7KytnKTY1NTMzIT09X1syNDNdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjQz''@;'; put 'put ''XVtnXV09NjIyMDgrZyx5WzYyMjA4K2ddPV9bMjQzXVtnXSk7Zm9yKF9bMjQ0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3YzFmXHU3YzJhXHU3YzI2XHU3YzM4XHU3YzQxXHU3YzQwXHU4MWZlXHU4MjAxXHU4MjAyXHU4MjA0XHU4MWVjXHU4ODQ0XHU4MjIxXHU4MjIyXHU4MjIzXHU4MjJkXHU4MjJmXHU4MjI4XHU4MjJiXHU4MjM4XHU4MjNiXHU4MjMzXHU4MjM0XHU4''@;'; put 'put ''MjNlXHU4MjQ0XHU4MjQ5XHU4MjRiXHU4MjRmXHU4MjVhXHU4MjVmXHU4MjY4XHU4ODdlXHU4ODg1XHU4ODg4XHU4OGQ4XHU4OGRmXHU4OTVlXHU3ZjlkXHU3ZjlmXHU3ZmE3XHU3ZmFmXHU3ZmIwXHU3ZmIyXHU3YzdjXHU2NTQ5XHU3YzkxXHU3YzlkXHU3YzljXHU3YzllXHU3Y2EyXHU3Y2Iy''@;'; put 'put ''XHU3Y2JjXHU3Y2JkXHU3Y2MxXHU3Y2M3XHU3Y2NjXHU3Y2NkXHU3Y2M4XHU3Y2M1XHU3Y2Q3XHU3Y2U4XHU4MjZlXHU2NmE4XHU3ZmJmXHU3ZmNlXHU3ZmQ1XHU3ZmU1XHU3ZmUxXHU3ZmU2XHU3ZmU5XHU3ZmVlXHU3ZmYzXHU3Y2Y4XHU3ZDc3XHU3ZGE2XHU3ZGFlXHU3ZTQ3XHU3ZTliXHU5''@;'; put 'put ''ZWI4XHU5ZWI0XHU4ZDczXHU4ZDg0XHU4ZDk0XHU4ZDkxXHU4ZGIxXHU4ZDY3XHU4ZDZkXHU4YzQ3XHU4YzQ5XHU5MTRhXHU5MTUwXHU5MTRlXHU5MTRmXHU5MTY0XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjQ0XS5sZW5ndGg7KytnKTY1NTMzIT09X1syNDRdW2ddLmNoYXJDb2RlQXQo''@;'; put 'put ''MCkmJihJW19bMjQ0XVtnXV09NjI0NjQrZyx5WzYyNDY0K2ddPV9bMjQ0XVtnXSk7Zm9yKF9bMjQ1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MTYyXHU5MTYxXHU5MTcwXHU5MTY5XHU5MTZmXHU5MTdkXHU5MTdlXHU5MTcyXHU5MTc0XHU5MTc5XHU5MThjXHU5MTg1XHU5MTkwXHU5MThkXHU5MTkxXHU5MWEyXHU5MWEzXHU5MWFhXHU5MWFkXHU5MWFlXHU5MWFmXHU5''@;'; put 'put ''MWI1XHU5MWI0XHU5MWJhXHU4YzU1XHU5ZTdlXHU4ZGI4XHU4ZGViXHU4ZTA1XHU4ZTU5XHU4ZTY5XHU4ZGI1XHU4ZGJmXHU4ZGJjXHU4ZGJhXHU4ZGM0XHU4ZGQ2XHU4ZGQ3XHU4ZGRhXHU4ZGRlXHU4ZGNlXHU4ZGNmXHU4ZGRiXHU4ZGM2XHU4ZGVjXHU4ZGY3XHU4ZGY4XHU4ZGUzXHU4ZGY5''@;'; put 'put ''XHU4ZGZiXHU4ZGU0XHU4ZTA5XHU4ZGZkXHU4ZTE0XHU4ZTFkXHU4ZTFmXHU4ZTJjXHU4ZTJlXHU4ZTIzXHU4ZTJmXHU4ZTNhXHU4ZTQwXHU4ZTM5XHU4ZTM1XHU4ZTNkXHU4ZTMxXHU4ZTQ5XHU4ZTQxXHU4ZTQyXHU4ZTUxXHU4ZTUyXHU4ZTRhXHU4ZTcwXHU4ZTc2XHU4ZTdjXHU4ZTZmXHU4''@;'; put 'put ''ZTc0XHU4ZTg1XHU4ZThmXHU4ZTk0XHU4ZTkwXHU4ZTljXHU4ZTllXHU4Yzc4XHU4YzgyXHU4YzhhXHU4Yzg1XHU4Yzk4XHU4Yzk0XHU2NTliXHU4OWQ2XHU4OWRlXHU4OWRhXHU4OWRjXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjQ1XS5sZW5ndGg7KytnKTY1NTMzIT09X1syNDVdW2dd''@;'; put 'put ''LmNoYXJDb2RlQXQoMCkmJihJW19bMjQ1XVtnXV09NjI3MjArZyx5WzYyNzIwK2ddPV9bMjQ1XVtnXSk7Zm9yKF9bMjQ2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4OWU1XHU4OWViXHU4OWVmXHU4YTNlXHU4YjI2XHU5NzUzXHU5NmU5XHU5NmYzXHU5NmVmXHU5NzA2XHU5NzAxXHU5NzA4XHU5NzBmXHU5NzBlXHU5NzJhXHU5NzJkXHU5NzMwXHU5NzNlXHU5ZjgwXHU5''@;'; put 'put ''ZjgzXHU5Zjg1XHU5Zjg2XHU5Zjg3XHU5Zjg4XHU5Zjg5XHU5ZjhhXHU5ZjhjXHU5ZWZlXHU5ZjBiXHU5ZjBkXHU5NmI5XHU5NmJjXHU5NmJkXHU5NmNlXHU5NmQyXHU3N2JmXHU5NmUwXHU5MjhlXHU5MmFlXHU5MmM4XHU5MzNlXHU5MzZhXHU5M2NhXHU5MzhmXHU5NDNlXHU5NDZiXHU5Yzdm''@;'; put 'put ''XHU5YzgyXHU5Yzg1XHU5Yzg2XHU5Yzg3XHU5Yzg4XHU3YTIzXHU5YzhiXHU5YzhlXHU5YzkwXHU5YzkxXHU5YzkyXHU5Yzk0XHU5Yzk1XHU5YzlhXHU5YzliXHU5YzllXHU5YzlmXHU5Y2EwXHU5Y2ExXHU5Y2EyXHU5Y2EzXHU5Y2E1XHU5Y2E2XHU5Y2E3XHU5Y2E4XHU5Y2E5XHU5Y2FiXHU5''@;'; put 'put ''Y2FkXHU5Y2FlXHU5Y2IwXHU5Y2IxXHU5Y2IyXHU5Y2IzXHU5Y2I0XHU5Y2I1XHU5Y2I2XHU5Y2I3XHU5Y2JhXHU5Y2JiXHU5Y2JjXHU5Y2JkXHU5Y2M0XHU5Y2M1XHU5Y2M2XHU5Y2M3XHU5Y2NhXHU5Y2NiXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjQ2XS5sZW5ndGg7KytnKTY1NTMz''@;'; put 'put ''IT09X1syNDZdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjQ2XVtnXV09NjI5NzYrZyx5WzYyOTc2K2ddPV9bMjQ2XVtnXSk7Zm9yKF9bMjQ3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5Y2NjXHU5Y2NkXHU5Y2NlXHU5Y2NmXHU5Y2QwXHU5Y2QzXHU5Y2Q0XHU5Y2Q1XHU5Y2Q3XHU5Y2Q4XHU5Y2Q5XHU5Y2RjXHU5Y2RkXHU5Y2RmXHU5Y2UyXHU5NzdjXHU5Nzg1XHU5''@;'; put 'put ''NzkxXHU5NzkyXHU5Nzk0XHU5N2FmXHU5N2FiXHU5N2EzXHU5N2IyXHU5N2I0XHU5YWIxXHU5YWIwXHU5YWI3XHU5ZTU4XHU5YWI2XHU5YWJhXHU5YWJjXHU5YWMxXHU5YWMwXHU5YWM1XHU5YWMyXHU5YWNiXHU5YWNjXHU5YWQxXHU5YjQ1XHU5YjQzXHU5YjQ3XHU5YjQ5XHU5YjQ4XHU5YjRk''@;'; put 'put ''XHU5YjUxXHU5OGU4XHU5OTBkXHU5OTJlXHU5OTU1XHU5OTU0XHU5YWRmXHU5YWUxXHU5YWU2XHU5YWVmXHU5YWViXHU5YWZiXHU5YWVkXHU5YWY5XHU5YjA4XHU5YjBmXHU5YjEzXHU5YjFmXHU5YjIzXHU5ZWJkXHU5ZWJlXHU3ZTNiXHU5ZTgyXHU5ZTg3XHU5ZTg4XHU5ZThiXHU5ZTkyXHU5''@;'; put 'put ''M2Q2XHU5ZTlkXHU5ZTlmXHU5ZWRiXHU5ZWRjXHU5ZWRkXHU5ZWUwXHU5ZWRmXHU5ZWUyXHU5ZWU5XHU5ZWU3XHU5ZWU1XHU5ZWVhXHU5ZWVmXHU5ZjIyXHU5ZjJjXHU5ZjJmXHU5ZjM5XHU5ZjM3XHU5ZjNkXHU5ZjNlXHU5ZjQ0XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjQ3XS5sZW5n''@;'; put 'put ''dGg7KytnKTY1NTMzIT09X1syNDddW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjQ3XVtnXV09NjMyMzIrZyx5WzYzMjMyK2ddPV9bMjQ3XVtnXSk7cmV0dXJue2VuYzpJLGRlYzp5fX0oKSxYWzEwMDI5XT1mdW5jdGlvbigpe2Zvcih2YXIgeT0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZc''@;'; put 'put ''eDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWpr''@;'; put 'put ''bG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZceGM0XHUwMTAwXHUwMTAxXHhjOVx1MDEwNFx4ZDZceGRjXHhlMVx1MDEwNVx1MDEwY1x4ZTRcdTAxMGRcdTAxMDZcdTAxMDdceGU5XHUwMTc5XHUwMTdhXHUwMTBlXHhlZFx1MDEwZlx1MDExMlx1MDExM1x1MDExNlx4ZjNcdTAxMTdceGY0XHhmNlx4''@;'; put 'put ''ZjVceGZhXHUwMTFhXHUwMTFiXHhmY1x1MjAyMFx4YjBcdTAxMThceGEzXHhhN1x1MjAyMlx4YjZceGRmXHhhZVx4YTlcdTIxMjJcdTAxMTlceGE4XHUyMjYwXHUwMTIzXHUwMTJlXHUwMTJmXHUwMTJhXHUyMjY0XHUyMjY1XHUwMTJiXHUwMTM2XHUyMjAyXHUyMjExXHUwMTQyXHUwMTNiXHUw''@;'; put 'put ''MTNjXHUwMTNkXHUwMTNlXHUwMTM5XHUwMTNhXHUwMTQ1XHUwMTQ2XHUwMTQzXHhhY1x1MjIxYVx1MDE0NFx1MDE0N1x1MjIwNlx4YWJceGJiXHUyMDI2XHhhMFx1MDE0OFx1MDE1MFx4ZDVcdTAxNTFcdTAxNGNcdTIwMTNcdTIwMTRcdTIwMWNcdTIwMWRcdTIwMThcdTIwMTlceGY3XHUyNWNh''@;'; put 'put ''XHUwMTRkXHUwMTU0XHUwMTU1XHUwMTU4XHUyMDM5XHUyMDNhXHUwMTU5XHUwMTU2XHUwMTU3XHUwMTYwXHUyMDFhXHUyMDFlXHUwMTYxXHUwMTVhXHUwMTViXHhjMVx1MDE2NFx1MDE2NVx4Y2RcdTAxN2RcdTAxN2VcdTAxNmFceGQzXHhkNFx1MDE2Ylx1MDE2ZVx4ZGFcdTAxNmZcdTAxNzBc''@;'; put 'put ''dTAxNzFcdTAxNzJcdTAxNzNceGRkXHhmZFx1MDEzN1x1MDE3Ylx1MDE0MVx1MDE3Y1x1MDEyMlx1MDJjNyIsST1bXSxfPXt9LGc9MDsyNTYhPWc7KytnKTY1NTMzIT09eS5jaGFyQ29kZUF0KGcpJiYoX1t5LmNoYXJBdChnKV09ZyksSVtnXT15LmNoYXJBdChnKTtyZXR1cm57ZW5jOl8sZGVj''@;'; put 'put ''Okl9fSgpLFhbMTAwNzldPWZ1bmN0aW9uKCl7Zm9yKHZhciB5PSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSor''@;'; put 'put ''LC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx4YzRceGM1XHhjN1x4YzlceGQxXHhkNlx4ZGNceGUxXHhlMFx4ZTJceGU0XHhlM1x4ZTVceGU3XHhlOVx4ZThceGVhXHhlYlx4ZWRc''@;'; put 'put ''eGVjXHhlZVx4ZWZceGYxXHhmM1x4ZjJceGY0XHhmNlx4ZjVceGZhXHhmOVx4ZmJceGZjXHhkZFx4YjBceGEyXHhhM1x4YTdcdTIwMjJceGI2XHhkZlx4YWVceGE5XHUyMTIyXHhiNFx4YThcdTIyNjBceGM2XHhkOFx1MjIxZVx4YjFcdTIyNjRcdTIyNjVceGE1XHhiNVx1MjIwMlx1MjIxMVx1''@;'; put 'put ''MjIwZlx1MDNjMFx1MjIyYlx4YWFceGJhXHUyMTI2XHhlNlx4ZjhceGJmXHhhMVx4YWNcdTIyMWFcdTAxOTJcdTIyNDhcdTIyMDZceGFiXHhiYlx1MjAyNlx4YTBceGMwXHhjM1x4ZDVcdTAxNTJcdTAxNTNcdTIwMTNcdTIwMTRcdTIwMWNcdTIwMWRcdTIwMThcdTIwMTlceGY3XHUyNWNhXHhm''@;'; put 'put ''Zlx1MDE3OFx1MjA0NFx4YTRceGQwXHhmMFx4ZGVceGZlXHhmZFx4YjdcdTIwMWFcdTIwMWVcdTIwMzBceGMyXHhjYVx4YzFceGNiXHhjOFx4Y2RceGNlXHhjZlx4Y2NceGQzXHhkNFx1ZmZmZFx4ZDJceGRhXHhkYlx4ZDlcdTAxMzFcdTAyYzZcdTAyZGNceGFmXHUwMmQ4XHUwMmQ5XHUwMmRh''@;'; put 'put ''XHhiOFx1MDJkZFx1MDJkYlx1MDJjNyIsST1bXSxfPXt9LGc9MDsyNTYhPWc7KytnKTY1NTMzIT09eS5jaGFyQ29kZUF0KGcpJiYoX1t5LmNoYXJBdChnKV09ZyksSVtnXT15LmNoYXJBdChnKTtyZXR1cm57ZW5jOl8sZGVjOkl9fSgpLFhbMTAwODFdPWZ1bmN0aW9uKCl7Zm9yKHZhciB5PSJc''@;'; put 'put ''MFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFS''@;'; put 'put ''U1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx4YzRceGM1XHhjN1x4YzlceGQxXHhkNlx4ZGNceGUxXHhlMFx4ZTJceGU0XHhlM1x4ZTVceGU3XHhlOVx4ZThceGVhXHhlYlx4ZWRceGVjXHhlZVx4ZWZceGYxXHhmM1x4ZjJceGY0XHhmNlx4ZjVceGZh''@;'; put 'put ''XHhmOVx4ZmJceGZjXHUyMDIwXHhiMFx4YTJceGEzXHhhN1x1MjAyMlx4YjZceGRmXHhhZVx4YTlcdTIxMjJceGI0XHhhOFx1MjI2MFx4YzZceGQ4XHUyMjFlXHhiMVx1MjI2NFx1MjI2NVx4YTVceGI1XHUyMjAyXHUyMjExXHUyMjBmXHUwM2MwXHUyMjJiXHhhYVx4YmFcdTIxMjZceGU2XHhm''@;'; put 'put ''OFx4YmZceGExXHhhY1x1MjIxYVx1MDE5Mlx1MjI0OFx1MjIwNlx4YWJceGJiXHUyMDI2XHhhMFx4YzBceGMzXHhkNVx1MDE1Mlx1MDE1M1x1MjAxM1x1MjAxNFx1MjAxY1x1MjAxZFx1MjAxOFx1MjAxOVx4ZjdcdTI1Y2FceGZmXHUwMTc4XHUwMTFlXHUwMTFmXHUwMTMwXHUwMTMxXHUwMTVl''@;'; put 'put ''XHUwMTVmXHUyMDIxXHhiN1x1MjAxYVx1MjAxZVx1MjAzMFx4YzJceGNhXHhjMVx4Y2JceGM4XHhjZFx4Y2VceGNmXHhjY1x4ZDNceGQ0XHVmZmZkXHhkMlx4ZGFceGRiXHhkOVx1ZmZmZFx1MDJjNlx1MDJkY1x4YWZcdTAyZDhcdTAyZDlcdTAyZGFceGI4XHUwMmRkXHUwMmRiXHUwMmM3IixJ''@;'; put 'put ''PVtdLF89e30sZz0wOzI1NiE9ZzsrK2cpNjU1MzMhPT15LmNoYXJDb2RlQXQoZykmJihfW3kuY2hhckF0KGcpXT1nKSxJW2ddPXkuY2hhckF0KGcpO3JldHVybntlbmM6XyxkZWM6SX19KCksWFsyODU5MV09ZnVuY3Rpb24oKXtmb3IodmFyIHk9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2''@;'; put 'put ''XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlq''@;'; put 'put ''a2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHhhMVx4YTJc''@;'; put 'put ''eGEzXHhhNFx4YTVceGE2XHhhN1x4YThceGE5XHhhYVx4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4YjdceGI4XHhiOVx4YmFceGJiXHhiY1x4YmRceGJlXHhiZlx4YzBceGMxXHhjMlx4YzNceGM0XHhjNVx4YzZceGM3XHhjOFx4YzlceGNhXHhjYlx4''@;'; put 'put ''Y2NceGNkXHhjZVx4Y2ZceGQwXHhkMVx4ZDJceGQzXHhkNFx4ZDVceGQ2XHhkN1x4ZDhceGQ5XHhkYVx4ZGJceGRjXHhkZFx4ZGVceGRmXHhlMFx4ZTFceGUyXHhlM1x4ZTRceGU1XHhlNlx4ZTdceGU4XHhlOVx4ZWFceGViXHhlY1x4ZWRceGVlXHhlZlx4ZjBceGYxXHhmMlx4ZjNceGY0XHhm''@;'; put 'put ''NVx4ZjZceGY3XHhmOFx4ZjlceGZhXHhmYlx4ZmNceGZkXHhmZVx4ZmYiLEk9W10sXz17fSxnPTA7MjU2IT1nOysrZyk2NTUzMyE9PXkuY2hhckNvZGVBdChnKSYmKF9beS5jaGFyQXQoZyldPWcpLElbZ109eS5jaGFyQXQoZyk7cmV0dXJue2VuYzpfLGRlYzpJfX0oKSx1ZS5leHBvcnRzJiZ0''@;'; put 'put ''eXBlb2YgRE9fTk9UX0VYUE9SVF9DT0RFUEFHRT4idSImJih1ZS5leHBvcnRzPVgpLGZ1bmN0aW9uKHksSSl7InVzZSBzdHJpY3QiO2lmKHR5cGVvZiBYPiJ1Iil7dmFyIF89WDt1ZS5leHBvcnRzJiZ0eXBlb2YgRE9fTk9UX0VYUE9SVF9DT0RFUEFHRT4idSI/dWUuZXhwb3J0cz1JKF8pOnku''@;'; put 'put ''Y3B0YWJsZT1JKF8pfWVsc2UgWD1JKFgpfSh0aGlzLGZ1bmN0aW9uKHkpeyJ1c2Ugc3RyaWN0Ijt2YXIgST17MTIwMDoidXRmMTZsZSIsMTIwMToidXRmMTZiZSIsMTJlMzoidXRmMzJsZSIsMTIwMDE6InV0ZjMyYmUiLDE2OTY5OiJ1dGY2NGxlIiwyMDEyNzoiYXNjaWkiLDY1ZTM6InV0Zjci''@;'; put 'put ''LDY1MDAxOiJ1dGY4In0sXz1bODc0LDEyNTAsMTI1MSwxMjUyLDEyNTMsMTI1NCwxMjU1LDEyNTYsMWU0XSxnPVs5MzIsOTM2LDk0OSw5NTBdLEI9WzY1MDAxXSx3PXt9LFA9e30sRj17fSxPPXt9LHo9ZnVuY3Rpb24oail7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoail9LE49ZnVuY3Rp''@;'; put 'put ''b24oail7cmV0dXJuIGouY2hhckNvZGVBdCgwKX0sTD10eXBlb2YgQnVmZmVyPCJ1IixLPWZ1bmN0aW9uKCl7fTtpZihMKXt2YXIgVT0hQnVmZmVyLmZyb207aWYoIVUpdHJ5e0J1ZmZlci5mcm9tKCJmb28iLCJ1dGY4Iil9Y2F0Y2h7VT0hMH1LPVU/ZnVuY3Rpb24oSCxqKXtyZXR1cm4gaj9u''@;'; put 'put ''ZXcgQnVmZmVyKEgsaik6bmV3IEJ1ZmZlcihIKX06QnVmZmVyLmZyb20uYmluZChCdWZmZXIpLEJ1ZmZlci5hbGxvY1Vuc2FmZXx8KEJ1ZmZlci5hbGxvY1Vuc2FmZT1mdW5jdGlvbihIKXtyZXR1cm4gbmV3IEJ1ZmZlcihIKX0pO3ZhciBXPTEwMjQsWT1CdWZmZXIuYWxsb2NVbnNhZmUoVyks''@;'; put 'put ''ZWU9ZnVuY3Rpb24oail7dmFyIEU9ZnVuY3Rpb24oail7Zm9yKHZhciBFPUJ1ZmZlci5hbGxvY1Vuc2FmZSg2NTUzNiksbT0wO208NjU1MzY7KyttKUVbbV09MDtmb3IodmFyIEE9T2JqZWN0LmtleXMoaiksYWU9QS5sZW5ndGgsdGU9MCxzZT1BW3RlXTt0ZTxhZTsrK3RlKShzZT1BW3RlXSkm''@;'; put 'put ''JihFW3NlLmNoYXJDb2RlQXQoMCldPWpbc2VdKTtyZXR1cm4gRX0oeVtqXS5lbmMpO3JldHVybiBmdW5jdGlvbihBLGFlKXt2YXIgc2UsdGU9QS5sZW5ndGgsd2U9MCxVZT0wLEplPTAsb3Q9MDtpZigic3RyaW5nIj09dHlwZW9mIEEpZm9yKHNlPUJ1ZmZlci5hbGxvY1Vuc2FmZSh0ZSksd2U9''@;'; put 'put ''MDt3ZTx0ZTsrK3dlKXNlW3dlXT1FW0EuY2hhckNvZGVBdCh3ZSldO2Vsc2UgaWYoQnVmZmVyLmlzQnVmZmVyKEEpKXtmb3Ioc2U9QnVmZmVyLmFsbG9jVW5zYWZlKDIqdGUpLFVlPTAsd2U9MDt3ZTx0ZTsrK3dlKShKZT1BW3dlXSk8MTI4P3NlW1VlKytdPUVbSmVdOkplPDIyND8oc2VbVWUr''@;'; put 'put ''K109RVsoKDMxJkplKTw8NikrKDYzJkFbd2UrMV0pXSwrK3dlKTpKZTwyNDA/KHNlW1VlKytdPUVbKCgxNSZKZSk8PDEyKSsoKDYzJkFbd2UrMV0pPDw2KSsoNjMmQVt3ZSsyXSldLHdlKz0yKToob3Q9KCg3JkplKTw8MTgpKygoNjMmQVt3ZSsxXSk8PDEyKSsoKDYzJkFbd2UrMl0pPDw2KSso''@;'; put 'put ''NjMmQVt3ZSszXSksd2UrPTMsb3Q8NjU1MzY/c2VbVWUrK109RVtvdF06KHNlW1VlKytdPUVbNTUyOTYrKChvdC09NjU1MzYpPj4xMCYxMDIzKV0sc2VbVWUrK109RVs1NjMyMCsoMTAyMyZvdCldKSk7c2U9c2Uuc2xpY2UoMCxVZSl9ZWxzZSBmb3Ioc2U9QnVmZmVyLmFsbG9jVW5zYWZlKHRl''@;'; put 'put ''KSx3ZT0wO3dlPHRlOysrd2Upc2Vbd2VdPUVbQVt3ZV0uY2hhckNvZGVBdCgwKV07cmV0dXJuIGFlJiYiYnVmIiE9PWFlPyJhcnIiIT09YWU/c2UudG9TdHJpbmcoImJpbmFyeSIpOltdLnNsaWNlLmNhbGwoc2UpOnNlfX0sSj1mdW5jdGlvbihqKXt2YXIgRT15W2pdLmRlYyxtPUJ1ZmZlci5h''@;'; put 'put ''bGxvY1Vuc2FmZSgxMzEwNzIpLEE9MCxhZT0iIjtmb3IoQT0wO0E8RS5sZW5ndGg7KytBKWlmKGFlPUVbQV0pe3ZhciB0ZT1hZS5jaGFyQ29kZUF0KDApO21bMipBXT0yNTUmdGUsbVsyKkErMV09dGU+Pjh9cmV0dXJuIGZ1bmN0aW9uKHdlKXt2YXIgVWU9d2UubGVuZ3RoLEplPTAsb3Q9MDtp''@;'; put 'put ''ZigyKlVlPlcmJihXPTIqVWUsWT1CdWZmZXIuYWxsb2NVbnNhZmUoVykpLEJ1ZmZlci5pc0J1ZmZlcih3ZSkpZm9yKEplPTA7SmU8VWU7SmUrKylZWzIqSmVdPW1bb3Q9Mip3ZVtKZV1dLFlbMipKZSsxXT1tW290KzFdO2Vsc2UgaWYoInN0cmluZyI9PXR5cGVvZiB3ZSlmb3IoSmU9MDtKZTxV''@;'; put 'put ''ZTtKZSsrKW90PTIqd2UuY2hhckNvZGVBdChKZSksWVsyKkplXT1tW290XSxZWzIqSmUrMV09bVtvdCsxXTtlbHNlIGZvcihKZT0wO0plPFVlO0plKyspWVsyKkplXT1tW290PTIqd2VbSmVdXSxZWzIqSmUrMV09bVtvdCsxXTtyZXR1cm4gWS5zbGljZSgwLDIqVWUpLnRvU3RyaW5nKCJ1Y3My''@;'; put 'put ''Iil9fSxuZT1mdW5jdGlvbihqKXtmb3IodmFyIEU9eVtqXS5lbmMsbT1CdWZmZXIuYWxsb2NVbnNhZmUoMTMxMDcyKSxBPTA7QTwxMzEwNzI7KytBKW1bQV09MDtmb3IodmFyIGFlPU9iamVjdC5rZXlzKEUpLHRlPTAsc2U9YWVbdGVdO3RlPGFlLmxlbmd0aDsrK3RlKWlmKHNlPWFlW3RlXSl7''@;'; put 'put ''dmFyIHdlPXNlLmNoYXJDb2RlQXQoMCk7bVsyKndlXT0yNTUmRVtzZV0sbVsyKndlKzFdPUVbc2VdPj44fXJldHVybiBmdW5jdGlvbihKZSxvdCl7dmFyIHhlPUplLmxlbmd0aCx2ZT1CdWZmZXIuYWxsb2NVbnNhZmUoMip4ZSksWGU9MCx6ZT0wLERlPTAsRmU9MCxPZT0wO2lmKCJzdHJpbmci''@;'; put 'put ''PT10eXBlb2YgSmUpe2ZvcihYZT1GZT0wO1hlPHhlOysrWGUpemU9MipKZS5jaGFyQ29kZUF0KFhlKSx2ZVtGZSsrXT1tW3plKzFdfHxtW3plXSxtW3plKzFdPjAmJih2ZVtGZSsrXT1tW3plXSk7dmU9dmUuc2xpY2UoMCxGZSl9ZWxzZSBpZihCdWZmZXIuaXNCdWZmZXIoSmUpKXtmb3IoWGU9''@;'; put 'put ''RmU9MDtYZTx4ZTsrK1hlKShPZT1KZVtYZV0pPDEyOD96ZT1PZTpPZTwyMjQ/KHplPSgoMzEmT2UpPDw2KSsoNjMmSmVbWGUrMV0pLCsrWGUpOk9lPDI0MD8oemU9KCgxNSZPZSk8PDEyKSsoKDYzJkplW1hlKzFdKTw8NikrKDYzJkplW1hlKzJdKSxYZSs9Mik6KHplPSgoNyZPZSk8PDE4KSso''@;'; put 'put ''KDYzJkplW1hlKzFdKTw8MTIpKygoNjMmSmVbWGUrMl0pPDw2KSsoNjMmSmVbWGUrM10pLFhlKz0zKSx6ZTw2NTUzNj8odmVbRmUrK109bVsxKyh6ZSo9MildfHxtW3plXSxtW3plKzFdPjAmJih2ZVtGZSsrXT1tW3plXSkpOih2ZVtGZSsrXT1tWzErKHplPTIqKDU1Mjk2KygoRGU9emUtNjU1''@;'; put 'put ''MzYpPj4xMCYxMDIzKSkpXXx8bVt6ZV0sbVt6ZSsxXT4wJiYodmVbRmUrK109bVt6ZV0pLHZlW0ZlKytdPW1bMSsoemU9MiooNTYzMjArKDEwMjMmRGUpKSldfHxtW3plXSxtW3plKzFdPjAmJih2ZVtGZSsrXT1tW3plXSkpO3ZlPXZlLnNsaWNlKDAsRmUpfWVsc2UgZm9yKFhlPUZlPTA7WGU8''@;'; put 'put ''eGU7WGUrKyl6ZT0yKkplW1hlXS5jaGFyQ29kZUF0KDApLHZlW0ZlKytdPW1bemUrMV18fG1bemVdLG1bemUrMV0+MCYmKHZlW0ZlKytdPW1bemVdKTtyZXR1cm4gb3QmJiJidWYiIT09b3Q/ImFyciIhPT1vdD92ZS50b1N0cmluZygiYmluYXJ5Iik6W10uc2xpY2UuY2FsbCh2ZSk6dmV9fSxp''@;'; put 'put ''ZT1mdW5jdGlvbihqKXt2YXIgYWUsRT15W2pdLmRlYyxtPUJ1ZmZlci5hbGxvY1Vuc2FmZSgxMzEwNzIpLEE9MCx0ZT0wLHNlPTAsd2U9MDtmb3Iod2U9MDt3ZTw2NTUzNjsrK3dlKW1bMip3ZV09MjU1LG1bMip3ZSsxXT0yNTM7Zm9yKEE9MDtBPEUubGVuZ3RoOysrQSkoYWU9RVtBXSkmJih0''@;'; put 'put ''ZT1hZS5jaGFyQ29kZUF0KDApLG1bc2U9MipBXT0yNTUmdGUsbVtzZSsxXT10ZT4+OCk7cmV0dXJuIGZ1bmN0aW9uKEplKXt2YXIgb3Q9SmUubGVuZ3RoLHhlPUJ1ZmZlci5hbGxvY1Vuc2FmZSgyKm90KSx2ZT0wLFhlPTAsemU9MDtpZihCdWZmZXIuaXNCdWZmZXIoSmUpKWZvcih2ZT0wO3Zl''@;'; put 'put ''PG90O3ZlKyspMjU1PT09bVtYZT0yKkplW3ZlXV0mJjI1Mz09PW1bWGUrMV0mJihYZT0yKigoSmVbdmVdPDw4KStKZVt2ZSsxXSksKyt2ZSkseGVbemUrK109bVtYZV0seGVbemUrK109bVtYZSsxXTtlbHNlIGlmKCJzdHJpbmciPT10eXBlb2YgSmUpZm9yKHZlPTA7dmU8b3Q7dmUrKylYZT0y''@;'; put 'put ''KkplLmNoYXJDb2RlQXQodmUpLDI1NT09PW1bWGVdJiYyNTM9PT1tW1hlKzFdJiYoWGU9MiooKEplLmNoYXJDb2RlQXQodmUpPDw4KStKZS5jaGFyQ29kZUF0KHZlKzEpKSwrK3ZlKSx4ZVt6ZSsrXT1tW1hlXSx4ZVt6ZSsrXT1tW1hlKzFdO2Vsc2UgZm9yKHZlPTA7dmU8b3Q7dmUrKykyNTU9''@;'; put 'put ''PT1tW1hlPTIqSmVbdmVdXSYmMjUzPT09bVtYZSsxXSYmKFhlPTIqKChKZVt2ZV08PDgpK0plW3ZlKzFdKSwrK3ZlKSx4ZVt6ZSsrXT1tW1hlXSx4ZVt6ZSsrXT1tW1hlKzFdO3JldHVybiB4ZS5zbGljZSgwLHplKS50b1N0cmluZygidWNzMiIpfX07d1s2NTAwMV09ZnVuY3Rpb24gSChqKXtp''@;'; put 'put ''Zigic3RyaW5nIj09dHlwZW9mIGopcmV0dXJuIEgoai5zcGxpdCgiIikubWFwKE4pKTt2YXIgRT1qLmxlbmd0aCxtPTAsQT0wOzQqRT5XJiYoVz00KkUsWT1CdWZmZXIuYWxsb2NVbnNhZmUoVykpO3ZhciBhZT0wO0U+PTMmJjIzOT09alswXSYmMTg3PT1qWzFdJiYxOTE9PWpbMl0mJihhZT0z''@;'; put 'put ''KTtmb3IodmFyIHRlPTEsc2U9MCx3ZT0wO2FlPEU7YWUrPXRlKXRlPTEsKHdlPWpbYWVdKTwxMjg/bT13ZTp3ZTwyMjQ/KG09NjQqKDMxJndlKSsoNjMmalthZSsxXSksdGU9Mik6d2U8MjQwPyhtPSgoMTUmd2UpPDwxMikrNjQqKDYzJmpbYWUrMV0pKyg2MyZqW2FlKzJdKSx0ZT0zKToobT0y''@;'; put 'put ''NjIxNDQqKDcmd2UpKygoNjMmalthZSsxXSk8PDEyKSs2NCooNjMmalthZSsyXSkrKDYzJmpbYWUrM10pLHRlPTQpLG08NjU1MzY/KFlbc2UrK109MjU1Jm0sWVtzZSsrXT1tPj44KTooQT01NTI5NisoKG0tPTY1NTM2KT4+MTAmMTAyMyksbT01NjMyMCsoMTAyMyZtKSxZW3NlKytdPTI1NSZB''@;'; put 'put ''LFlbc2UrK109QT4+PjgsWVtzZSsrXT0yNTUmbSxZW3NlKytdPW0+Pj44JjI1NSk7cmV0dXJuIFkuc2xpY2UoMCxzZSkudG9TdHJpbmcoInVjczIiKX0sUFs2NTAwMV09ZnVuY3Rpb24oaixFKXtpZihMJiZCdWZmZXIuaXNCdWZmZXIoaikpcmV0dXJuIEUmJiJidWYiIT09RT8iYXJyIiE9PUU/''@;'; put 'put ''ai50b1N0cmluZygiYmluYXJ5Iik6W10uc2xpY2UuY2FsbChqKTpqO3ZhciBtPWoubGVuZ3RoLEE9MCxhZT0wLHRlPTAsc2U9InN0cmluZyI9PXR5cGVvZiBqOzQqbT5XJiYoVz00Km0sWT1CdWZmZXIuYWxsb2NVbnNhZmUoVykpO2Zvcih2YXIgd2U9MDt3ZTxtOysrd2UpKEE9c2U/ai5jaGFy''@;'; put 'put ''Q29kZUF0KHdlKTpqW3dlXS5jaGFyQ29kZUF0KDApKTw9MTI3P1lbdGUrK109QTpBPD0yMDQ3PyhZW3RlKytdPTE5MisoQT4+NiksWVt0ZSsrXT0xMjgrKDYzJkEpKTpBPj01NTI5NiYmQTw9NTczNDM/KEEtPTU1Mjk2LCsrd2UsYWU9KHNlP2ouY2hhckNvZGVBdCh3ZSk6alt3ZV0uY2hhckNv''@;'; put 'put ''ZGVBdCgwKSktNTYzMjArKEE8PDEwKSxZW3RlKytdPTI0MCsoYWU+Pj4xOCY3KSxZW3RlKytdPTE0NCsoYWU+Pj4xMiY2MyksWVt0ZSsrXT0xMjgrKGFlPj4+NiY2MyksWVt0ZSsrXT0xMjgrKDYzJmFlKSk6KFlbdGUrK109MjI0KyhBPj4xMiksWVt0ZSsrXT0xMjgrKEE+PjYmNjMpLFlbdGUr''@;'; put 'put ''K109MTI4Kyg2MyZBKSk7cmV0dXJuIEUmJiJidWYiIT09RT8iYXJyIiE9PUU/WS5zbGljZSgwLHRlKS50b1N0cmluZygiYmluYXJ5Iik6W10uc2xpY2UuY2FsbChZLDAsdGUpOlkuc2xpY2UoMCx0ZSl9fXZhciBsZT1mdW5jdGlvbigpe2lmKEwpe2lmKEZbX1swXV0pcmV0dXJuO3ZhciBqPTAs''@;'; put 'put ''RT0wO2ZvcihqPTA7ajxfLmxlbmd0aDsrK2opeVtFPV9bal1dJiYoRltFXT1KKEUpLE9bRV09ZWUoRSkpO2ZvcihqPTA7ajxnLmxlbmd0aDsrK2opeVtFPWdbal1dJiYoRltFXT1pZShFKSxPW0VdPW5lKEUpKTtmb3Ioaj0wO2o8Qi5sZW5ndGg7KytqKXdbRT1CW2pdXSYmKEZbRV09d1tFXSks''@;'; put 'put ''UFtFXSYmKE9bRV09UFtFXSl9fSxtZT1mdW5jdGlvbihILGope3JldHVybiIifSxfZT1mdW5jdGlvbihqKXtkZWxldGUgRltqXSxkZWxldGUgT1tqXX0sU2U9e2VuY2FjaGU6bGUsZGVjYWNoZTpmdW5jdGlvbigpe2lmKEwpe2lmKCFGW19bMF1dKXJldHVybjtfLmZvckVhY2goX2UpLGcuZm9y''@;'; put 'put ''RWFjaChfZSksQi5mb3JFYWNoKF9lKX1wPW1lLGI9MH0sc2JjczpfLGRiY3M6Z307bGUoKTt2YXIgamU9IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8iLHA9bWUsYj0wO3JldHVybiB5LnV0aWxzPXtkZWNvZGU6ZnVuY3Rp''@;'; put 'put ''b24gSChqLEUpe3ZhciBtO2lmKG09RltqXSlyZXR1cm4gbShFKTtpZigic3RyaW5nIj09dHlwZW9mIEUpcmV0dXJuIEgoaixFLnNwbGl0KCIiKS5tYXAoTikpO3ZhciB2ZSxBPUUubGVuZ3RoLGFlPW5ldyBBcnJheShBKSx0ZT0iIixzZT0wLHdlPTAsVWU9MSxKZT0wLG90PTAseGU9eVtqXSxY''@;'; put 'put ''ZT0iIjtpZih4ZSYmKHZlPXhlLmRlYykpZm9yKHdlPTA7d2U8QTt3ZSs9VWUpe2lmKFVlPTIsKHRlPXZlWyhFW3dlXTw8OCkrRVt3ZSsxXV0pfHwoVWU9MSx0ZT12ZVtFW3dlXV0pLCF0ZSl0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCBjb2RlOiAiK0Vbd2VdKyIgIitFW3dlK1VlLTFd''@;'; put 'put ''KyIgIit3ZSsiICIrVWUrIiAiK3ZlW0Vbd2VdXSk7YWVbSmUrK109dGV9ZWxzZXtpZighKFhlPUlbal0pKXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIENQOiAiK2opO3N3aXRjaChYZSl7Y2FzZSJ1dGY4Ijpmb3IoQT49MyYmMjM5PT1FWzBdJiYxODc9PUVbMV0mJjE5MT09RVsyXSYm''@;'; put 'put ''KHdlPTMpO3dlPEE7d2UrPVVlKVVlPTEsRVt3ZV08MTI4P3NlPUVbd2VdOkVbd2VdPDIyND8oc2U9NjQqKDMxJkVbd2VdKSsoNjMmRVt3ZSsxXSksVWU9Mik6RVt3ZV08MjQwPyhzZT0oKDE1JkVbd2VdKTw8MTIpKzY0Kig2MyZFW3dlKzFdKSsoNjMmRVt3ZSsyXSksVWU9Myk6KHNlPTI2MjE0''@;'; put 'put ''NCooNyZFW3dlXSkrKCg2MyZFW3dlKzFdKTw8MTIpKzY0Kig2MyZFW3dlKzJdKSsoNjMmRVt3ZSszXSksVWU9NCksc2U8NjU1MzZ8fChvdD01NTI5NisoKHNlLT02NTUzNik+PjEwJjEwMjMpLHNlPTU2MzIwKygxMDIzJnNlKSxhZVtKZSsrXT1TdHJpbmcuZnJvbUNoYXJDb2RlKG90KSksYWVb''@;'; put 'put ''SmUrK109U3RyaW5nLmZyb21DaGFyQ29kZShzZSk7YnJlYWs7Y2FzZSJhc2NpaSI6aWYoTCYmQnVmZmVyLmlzQnVmZmVyKEUpKXJldHVybiBFLnRvU3RyaW5nKFhlKTtmb3Iod2U9MDt3ZTxBO3dlKyspYWVbd2VdPVN0cmluZy5mcm9tQ2hhckNvZGUoRVt3ZV0pO0plPUE7YnJlYWs7Y2FzZSJ1''@;'; put 'put ''dGYxNmxlIjppZihBPj0yJiYyNTU9PUVbMF0mJjI1ND09RVsxXSYmKHdlPTIpLEwmJkJ1ZmZlci5pc0J1ZmZlcihFKSlyZXR1cm4gRS50b1N0cmluZyhYZSk7Zm9yKFVlPTI7d2UrMTxBO3dlKz1VZSlhZVtKZSsrXT1TdHJpbmcuZnJvbUNoYXJDb2RlKChFW3dlKzFdPDw4KStFW3dlXSk7YnJl''@;'; put 'put ''YWs7Y2FzZSJ1dGYxNmJlIjpmb3IoQT49MiYmMjU0PT1FWzBdJiYyNTU9PUVbMV0mJih3ZT0yKSxVZT0yO3dlKzE8QTt3ZSs9VWUpYWVbSmUrK109U3RyaW5nLmZyb21DaGFyQ29kZSgoRVt3ZV08PDgpK0Vbd2UrMV0pO2JyZWFrO2Nhc2UidXRmMzJsZSI6Zm9yKEE+PTQmJjI1NT09RVswXSYm''@;'; put 'put ''MjU0PT1FWzFdJiYwPT09RVsyXSYmMD09PUVbM10mJih3ZT00KSxVZT00O3dlPEE7d2UrPVVlKShzZT0oRVt3ZSszXTw8MjQpKyhFW3dlKzJdPDwxNikrKEVbd2UrMV08PDgpK0Vbd2VdKT42NTUzNT8oc2UtPTY1NTM2LGFlW0plKytdPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUyOTYrKHNlPj4x''@;'; put 'put ''MCYxMDIzKSksYWVbSmUrK109U3RyaW5nLmZyb21DaGFyQ29kZSg1NjMyMCsoMTAyMyZzZSkpKTphZVtKZSsrXT1TdHJpbmcuZnJvbUNoYXJDb2RlKHNlKTticmVhaztjYXNlInV0ZjMyYmUiOmZvcihBPj00JiYyNTU9PUVbM10mJjI1ND09RVsyXSYmMD09PUVbMV0mJjA9PT1FWzBdJiYod2U9''@;'; put 'put ''NCksVWU9NDt3ZTxBO3dlKz1VZSkoc2U9KEVbd2VdPDwyNCkrKEVbd2UrMV08PDE2KSsoRVt3ZSsyXTw8OCkrRVt3ZSszXSk+NjU1MzU/KHNlLT02NTUzNixhZVtKZSsrXT1TdHJpbmcuZnJvbUNoYXJDb2RlKDU1Mjk2KyhzZT4+MTAmMTAyMykpLGFlW0plKytdPVN0cmluZy5mcm9tQ2hhckNv''@;'; put 'put ''ZGUoNTYzMjArKDEwMjMmc2UpKSk6YWVbSmUrK109U3RyaW5nLmZyb21DaGFyQ29kZShzZSk7YnJlYWs7Y2FzZSJ1dGY3Ijpmb3IoQT49NCYmNDM9PUVbMF0mJjQ3PT1FWzFdJiYxMTg9PUVbMl0mJihBPj01JiY1Nj09RVszXSYmNDU9PUVbNF0/d2U9NTooNTY9PUVbM118fDU3PT1FWzNdfHw0''@;'; put 'put ''Mz09RVszXXx8NDc9PUVbM10pJiYod2U9NCkpO3dlPEE7d2UrPVVlKWlmKDQzPT09RVt3ZV0paWYoVWU9MSw0NSE9PUVbd2UrMV0pe2Zvcig7U3RyaW5nLmZyb21DaGFyQ29kZShFW3dlK1VlXSkubWF0Y2goL1tBLVphLXowLTkrXC9dLyk7KVVlKys7dmFyIHplPTA7NDU9PT1FW3dlK1VlXSYm''@;'; put 'put ''KCsrVWUsemU9MSk7Zm9yKHZhciBEZT1bXSxGZT0iIixrZT0wLEFlPTAsX3Q9MCxudD0wLFFlPTE7UWU8VWUtemUmJihrZT1qZS5pbmRleE9mKFN0cmluZy5mcm9tQ2hhckNvZGUoRVt3ZStRZSsrXSkpLEFlPWplLmluZGV4T2YoU3RyaW5nLmZyb21DaGFyQ29kZShFW3dlK1FlKytdKSksRGUu''@;'; put 'put ''cHVzaChrZTw8MnxBZT4+NCksLTEhPT0oX3Q9amUuaW5kZXhPZihTdHJpbmcuZnJvbUNoYXJDb2RlKEVbd2UrUWUrK10pKSkmJihEZS5wdXNoKCgxNSZBZSk8PDR8X3Q+PjIpLC0xIT09KG50PWplLmluZGV4T2YoU3RyaW5nLmZyb21DaGFyQ29kZShFW3dlK1FlKytdKSkpKSk7KW50PDY0JiZE''@;'; put 'put ''ZS5wdXNoKCgzJl90KTw8NnxudCk7Zm9yKEZlPUgoMTIwMSxEZSksUWU9MDtRZTxGZS5sZW5ndGg7KytRZSlhZVtKZSsrXT1GZS5jaGFyQXQoUWUpfWVsc2UgVWU9MixhZVtKZSsrXT0iKyI7ZWxzZSBVZT0xLGFlW0plKytdPVN0cmluZy5mcm9tQ2hhckNvZGUoRVt3ZV0pO2JyZWFrO2RlZmF1''@;'; put 'put ''bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBtYWdpYzogIitqKyIgIitJW2pdKX19cmV0dXJuIGFlLnNsaWNlKDAsSmUpLmpvaW4oIiIpfSxlbmNvZGU6ZnVuY3Rpb24gSChqLEUsbSl7aWYoaj09PWImJnApcmV0dXJuIHAoRSxtKTtpZihPW2pdKXJldHVybihwPU9bYj1qXSkoRSxt''@;'; put 'put ''KTtMJiZCdWZmZXIuaXNCdWZmZXIoRSkmJihFPUUudG9TdHJpbmcoInV0ZjgiKSk7dmFyIG90LEE9RS5sZW5ndGgsYWU9TD9CdWZmZXIuYWxsb2NVbnNhZmUoNCpBKTpbXSx0ZT0wLHNlPTAsd2U9MCxVZT0wLEplPXlbal0seGU9IiIsdmU9InN0cmluZyI9PXR5cGVvZiBFO2lmKEplJiYob3Q9''@;'; put 'put ''SmUuZW5jKSlmb3Ioc2U9MDtzZTxBOysrc2UsKyt3ZSkodGU9b3RbdmU/RS5jaGFyQXQoc2UpOkVbc2VdXSk+MjU1PyhhZVt3ZV09dGU+PjgsYWVbKyt3ZV09MjU1JnRlKTphZVt3ZV09MjU1JnRlO2Vsc2V7aWYoISh4ZT1JW2pdKSl0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCBDUDog''@;'; put 'put ''IitqKTtzd2l0Y2goeGUpe2Nhc2UidXRmOCI6aWYoTCYmdmUpe3dlPShhZT1LKEUseGUpKS5sZW5ndGg7YnJlYWt9Zm9yKHNlPTA7c2U8QTsrK3NlLCsrd2UpKHRlPXZlP0UuY2hhckNvZGVBdChzZSk6RVtzZV0uY2hhckNvZGVBdCgwKSk8PTEyNz9hZVt3ZV09dGU6dGU8PTIwNDc/KGFlW3dl''@;'; put 'put ''XT0xOTIrKHRlPj42KSxhZVsrK3dlXT0xMjgrKDYzJnRlKSk6dGU+PTU1Mjk2JiZ0ZTw9NTczNDM/KHRlLT01NTI5NixVZT0odmU/RS5jaGFyQ29kZUF0KCsrc2UpOkVbKytzZV0uY2hhckNvZGVBdCgwKSktNTYzMjArKHRlPDwxMCksYWVbd2VdPTI0MCsoVWU+Pj4xOCY3KSxhZVsrK3dlXT0x''@;'; put 'put ''NDQrKFVlPj4+MTImNjMpLGFlWysrd2VdPTEyOCsoVWU+Pj42JjYzKSxhZVsrK3dlXT0xMjgrKDYzJlVlKSk6KGFlW3dlXT0yMjQrKHRlPj4xMiksYWVbKyt3ZV09MTI4Kyh0ZT4+NiY2MyksYWVbKyt3ZV09MTI4Kyg2MyZ0ZSkpO2JyZWFrO2Nhc2UiYXNjaWkiOmlmKEwmJiJzdHJpbmciPT10''@;'; put 'put ''eXBlb2YgRSl7d2U9KGFlPUsoRSx4ZSkpLmxlbmd0aDticmVha31mb3Ioc2U9MDtzZTxBOysrc2UsKyt3ZSl7aWYoISgodGU9dmU/RS5jaGFyQ29kZUF0KHNlKTpFW3NlXS5jaGFyQ29kZUF0KDApKTw9MTI3KSl0aHJvdyBuZXcgRXJyb3IoImJhZCBhc2NpaSAiK3RlKTthZVt3ZV09dGV9YnJl''@;'; put 'put ''YWs7Y2FzZSJ1dGYxNmxlIjppZihMJiYic3RyaW5nIj09dHlwZW9mIEUpe3dlPShhZT1LKEUseGUpKS5sZW5ndGg7YnJlYWt9Zm9yKHNlPTA7c2U8QTsrK3NlKXRlPXZlP0UuY2hhckNvZGVBdChzZSk6RVtzZV0uY2hhckNvZGVBdCgwKSxhZVt3ZSsrXT0yNTUmdGUsYWVbd2UrK109dGU+Pjg7''@;'; put 'put ''YnJlYWs7Y2FzZSJ1dGYxNmJlIjpmb3Ioc2U9MDtzZTxBOysrc2UpdGU9dmU/RS5jaGFyQ29kZUF0KHNlKTpFW3NlXS5jaGFyQ29kZUF0KDApLGFlW3dlKytdPXRlPj44LGFlW3dlKytdPTI1NSZ0ZTticmVhaztjYXNlInV0ZjMybGUiOmZvcihzZT0wO3NlPEE7KytzZSkodGU9dmU/RS5jaGFy''@;'; put 'put ''Q29kZUF0KHNlKTpFW3NlXS5jaGFyQ29kZUF0KDApKT49NTUyOTYmJnRlPD01NzM0MyYmKHRlPTY1NTM2Kyh0ZS01NTI5Njw8MTApKyhFWysrc2VdLmNoYXJDb2RlQXQoMCktNTYzMjApKSxhZVt3ZSsrXT0yNTUmdGUsYWVbd2UrK109MjU1Jih0ZT4+PTgpLGFlW3dlKytdPTI1NSYodGU+Pj04''@;'; put 'put ''KSxhZVt3ZSsrXT0yNTUmKHRlPj49OCk7YnJlYWs7Y2FzZSJ1dGYzMmJlIjpmb3Ioc2U9MDtzZTxBOysrc2UpKHRlPXZlP0UuY2hhckNvZGVBdChzZSk6RVtzZV0uY2hhckNvZGVBdCgwKSk+PTU1Mjk2JiZ0ZTw9NTczNDMmJih0ZT02NTUzNisodGUtNTUyOTY8PDEwKSsoRVsrK3NlXS5jaGFy''@;'; put 'put ''Q29kZUF0KDApLTU2MzIwKSksYWVbd2UrM109MjU1JnRlLGFlW3dlKzJdPTI1NSYodGU+Pj04KSxhZVt3ZSsxXT0yNTUmKHRlPj49OCksYWVbd2VdPTI1NSYodGU+Pj04KSx3ZSs9NDticmVhaztjYXNlInV0ZjciOmZvcihzZT0wO3NlPEE7c2UrKyl7dmFyIFhlPXZlP0UuY2hhckF0KHNlKTpF''@;'; put 'put ''W3NlXS5jaGFyQXQoMCk7aWYoIisiIT09WGUpaWYoIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5JygpLC0uLzo/Ii5pbmRleE9mKFhlKT4tMSlhZVt3ZSsrXT1YZS5jaGFyQ29kZUF0KDApO2Vsc2V7dmFyIHplPUgoMTIwMSxY''@;'; put 'put ''ZSk7YWVbd2UrK109NDMsYWVbd2UrK109amUuY2hhckNvZGVBdCh6ZVswXT4+MiksYWVbd2UrK109amUuY2hhckNvZGVBdCgoKDMmemVbMF0pPDw0KSsoKHplWzFdfHwwKT4+NCkpLGFlW3dlKytdPWplLmNoYXJDb2RlQXQoKCgxNSZ6ZVsxXSk8PDIpKygoemVbMl18fDApPj42KSksYWVbd2Ur''@;'; put 'put ''K109NDV9ZWxzZSBhZVt3ZSsrXT00MyxhZVt3ZSsrXT00NX1icmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgbWFnaWM6ICIraisiICIrSVtqXSl9fXJldHVybiBhZT1hZS5zbGljZSgwLHdlKSxMP20mJiJidWYiIT09bT8iYXJyIiE9PW0/YWUudG9TdHJpbmcoImJp''@;'; put 'put ''bmFyeSIpOltdLnNsaWNlLmNhbGwoYWUpOmFlOiJzdHIiPT1tP2FlLm1hcCh6KS5qb2luKCIiKTphZX0saGFzY3A6ZnVuY3Rpb24oail7cmV0dXJuISgheVtqXSYmIUlbal0pfSxtYWdpYzpJLGNhY2hlOlNlfSx5fSl9LDMxNzk6KHVlLFgpPT57dmFyIHksSSxfOyFmdW5jdGlvbihnKXtpZih0''@;'; put 'put ''eXBlb2YgRE9fTk9UX0VYUE9SVF9KU1pJUD4idSIpdWUuZXhwb3J0cz1nKCk7ZWxzZSBpZih0eXBlb2YgRE9fTk9UX0VYUE9SVF9KU1pJUD4idSIpSlNaaXBTeW5jPWcoKSxJPVtdLHZvaWQgMCE9PShfPSJmdW5jdGlvbiI9PXR5cGVvZih5PWcpP3kuYXBwbHkoWCxJKTp5KSYmKHVlLmV4cG9y''@;'; put 'put ''dHM9Xyk7ZWxzZXt2YXIgQjt0eXBlb2YgZ2xvYmFsVGhpczwidSI/Qj1nbG9iYWxUaGlzOnR5cGVvZiB3aW5kb3c8InUiP0I9d2luZG93OnR5cGVvZiBnbG9iYWw8InUiP0I9Z2xvYmFsOnR5cGVvZiAkPCJ1IiYmJC5nbG9iYWw/Qj0kLmdsb2JhbDp0eXBlb2Ygc2VsZjwidSImJihCPXNlbGYp''@;'; put 'put ''LEIuSlNaaXBTeW5jPWcoKX19KGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIFAoRixPLHope2Z1bmN0aW9uIE4oVSxXKXtpZighT1tVXSl7aWYoIUZbVV0pe2lmKEwpcmV0dXJuIEwoVSwhMCk7dGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZmluZCBtb2R1bGUgJyIrVSsiJyIpfXZhciBxPU9b''@;'; put 'put ''VV09e2V4cG9ydHM6e319O0ZbVV1bMF0uY2FsbChxLmV4cG9ydHMsZnVuY3Rpb24oZWUpe3JldHVybiBOKEZbVV1bMV1bZWVdfHxlZSl9LHEscS5leHBvcnRzLFAsRixPLHopfXJldHVybiBPW1VdLmV4cG9ydHN9Zm9yKHZhciBMPXZvaWQgMCxLPTA7Szx6Lmxlbmd0aDtLKyspTih6W0tdKTty''@;'; put 'put ''ZXR1cm4gTn0oezE6W2Z1bmN0aW9uKFAsRixPKXsidXNlIHN0cmljdCI7dmFyIHo9IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89IjtPLmVuY29kZT1mdW5jdGlvbihOLEwpe2Zvcih2YXIgVSxXLFkscSxlZSxKLG5lLEs9''@;'; put 'put ''IiIsaWU9MDtpZTxOLmxlbmd0aDspcT0oVT1OLmNoYXJDb2RlQXQoaWUrKykpPj4yLGVlPSgzJlUpPDw0fChXPU4uY2hhckNvZGVBdChpZSsrKSk+PjQsSj0oMTUmVyk8PDJ8KFk9Ti5jaGFyQ29kZUF0KGllKyspKT4+NixuZT02MyZZLGlzTmFOKFcpP0o9bmU9NjQ6aXNOYU4oWSkmJihuZT02''@;'; put 'put ''NCksSz1LK3ouY2hhckF0KHEpK3ouY2hhckF0KGVlKSt6LmNoYXJBdChKKSt6LmNoYXJBdChuZSk7cmV0dXJuIEt9LE8uZGVjb2RlPWZ1bmN0aW9uKE4sTCl7dmFyIFcsWSxxLGVlLEosbmUsSz0iIixpZT0wO2ZvcihOPU4ucmVwbGFjZSgvW15BLVphLXowLTlcK1wvXD1dL2csIiIpO2llPE4u''@;'; put 'put ''bGVuZ3RoOylxPXouaW5kZXhPZihOLmNoYXJBdChpZSsrKSksVz0oMTUmKGVlPXouaW5kZXhPZihOLmNoYXJBdChpZSsrKSkpKTw8NHwoSj16LmluZGV4T2YoTi5jaGFyQXQoaWUrKykpKT4+MixZPSgzJkopPDw2fChuZT16LmluZGV4T2YoTi5jaGFyQXQoaWUrKykpKSxLKz1TdHJpbmcuZnJv''@;'; put 'put ''bUNoYXJDb2RlKHE8PDJ8ZWU+PjQpLDY0IT1KJiYoSys9U3RyaW5nLmZyb21DaGFyQ29kZShXKSksNjQhPW5lJiYoSys9U3RyaW5nLmZyb21DaGFyQ29kZShZKSk7cmV0dXJuIEt9fSx7fV0sMjpbZnVuY3Rpb24oUCxGLE8peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiB6KCl7dGhpcy5jb21wcmVz''@;'; put 'put ''c2VkU2l6ZT0wLHRoaXMudW5jb21wcmVzc2VkU2l6ZT0wLHRoaXMuY3JjMzI9MCx0aGlzLmNvbXByZXNzaW9uTWV0aG9kPW51bGwsdGhpcy5jb21wcmVzc2VkQ29udGVudD1udWxsfXoucHJvdG90eXBlPXtnZXRDb250ZW50OmZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LGdldENvbXByZXNzZWRD''@;'; put 'put ''b250ZW50OmZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9fSxGLmV4cG9ydHM9en0se31dLDM6W2Z1bmN0aW9uKFAsRixPKXsidXNlIHN0cmljdCI7Ty5TVE9SRT17bWFnaWM6IlwwXDAiLGNvbXByZXNzOmZ1bmN0aW9uKHope3JldHVybiB6fSx1bmNvbXByZXNzOmZ1bmN0aW9uKHope3JldHVybiB6''@;'; put 'put ''fSxjb21wcmVzc0lucHV0VHlwZTpudWxsLHVuY29tcHJlc3NJbnB1dFR5cGU6bnVsbH0sTy5ERUZMQVRFPVAoIi4vZmxhdGUiKX0seyIuL2ZsYXRlIjo4fV0sNDpbZnVuY3Rpb24oUCxGLE8peyJ1c2Ugc3RyaWN0Ijt2YXIgej1QKCIuL3V0aWxzIiksTj1bMCwxOTk2OTU5ODk0LDM5OTM5MTk3''@;'; put 'put ''ODgsMjU2NzUyNDc5NCwxMjQ2MzQxMzcsMTg4NjA1NzYxNSwzOTE1NjIxNjg1LDI2NTczOTIwMzUsMjQ5MjY4Mjc0LDIwNDQ1MDgzMjQsMzc3MjExNTIzMCwyNTQ3MTc3ODY0LDE2Mjk0MTk5NSwyMTI1NTYxMDIxLDM4ODc2MDcwNDcsMjQyODQ0NDA0OSw0OTg1MzY1NDgsMTc4OTkyNzY2Niw0''@;'; put 'put ''MDg5MDE2NjQ4LDIyMjcwNjEyMTQsNDUwNTQ4ODYxLDE4NDMyNTg2MDMsNDEwNzU4MDc1MywyMjExNjc3NjM5LDMyNTg4Mzk5MCwxNjg0Nzc3MTUyLDQyNTExMjIwNDIsMjMyMTkyNjYzNiwzMzU2MzM0ODcsMTY2MTM2NTQ2NSw0MTk1MzAyNzU1LDIzNjYxMTUzMTcsOTk3MDczMDk2LDEyODE5''@;'; put 'put ''NTM4ODYsMzU3OTg1NTMzMiwyNzI0Njg4MjQyLDEwMDY4ODgxNDUsMTI1ODYwNzY4NywzNTI0MTAxNjI5LDI3Njg5NDI0NDMsOTAxMDk3NzIyLDExMTkwMDA2ODQsMzY4NjUxNzIwNiwyODk4MDY1NzI4LDg1MzA0NDQ1MSwxMTcyMjY2MTAxLDM3MDUwMTU3NTksMjg4MjYxNjY2NSw2NTE3Njc5''@;'; put 'put ''ODAsMTM3MzUwMzU0NiwzMzY5NTU0MzA0LDMyMTgxMDQ1OTgsNTY1NTA3MjUzLDE0NTQ2MjE3MzEsMzQ4NTExMTcwNSwzMDk5NDM2MzAzLDY3MTI2Njk3NCwxNTk0MTk4MDI0LDMzMjI3MzA5MzAsMjk3MDM0NzgxMiw3OTU4MzU1MjcsMTQ4MzIzMDIyNSwzMjQ0MzY3Mjc1LDMwNjAxNDk1NjUs''@;'; put 'put ''MTk5NDE0NjE5MiwzMTE1ODUzNCwyNTYzOTA3NzcyLDQwMjM3MTc5MzAsMTkwNzQ1OTQ2NSwxMTI2MzcyMTUsMjY4MDE1MzI1MywzOTA0NDI3MDU5LDIwMTM3NzYyOTAsMjUxNzIyMDM2LDI1MTcyMTUzNzQsMzc3NTgzMDA0MCwyMTM3NjU2NzYzLDE0MTM3NjgxMywyNDM5Mjc3NzE5LDM4NjUy''@;'; put 'put ''NzEyOTcsMTgwMjE5NTQ0NCw0NzY4NjQ4NjYsMjIzODAwMTM2OCw0MDY2NTA4ODc4LDE4MTIzNzA5MjUsNDUzMDkyNzMxLDIxODE2MjUwMjUsNDExMTQ1MTIyMywxNzA2MDg4OTAyLDMxNDA0MjcwNCwyMzQ0NTMyMjAyLDQyNDAwMTc1MzIsMTY1ODY1ODI3MSwzNjY2MTk5NzcsMjM2MjY3MDMy''@;'; put 'put ''Myw0MjI0OTk0NDA1LDEzMDM1MzU5NjAsOTg0OTYxNDg2LDI3NDcwMDcwOTIsMzU2OTAzNzUzOCwxMjU2MTcwODE3LDEwMzc2MDQzMTEsMjc2NTIxMDczMywzNTU0MDc5OTk1LDExMzEwMTQ1MDYsODc5Njc5OTk2LDI5MDkyNDM0NjIsMzY2Mzc3MTg1NiwxMTQxMTI0NDY3LDg1NTg0MjI3Nywy''@;'; put 'put ''ODUyODAxNjMxLDM3MDg2NDg2NDksMTM0MjUzMzk0OCw2NTQ0NTkzMDYsMzE4ODM5NjA0OCwzMzczMDE1MTc0LDE0NjY0Nzk5MDksNTQ0MTc5NjM1LDMxMTA1MjM5MTMsMzQ2MjUyMjAxNSwxNTkxNjcxMDU0LDcwMjEzODc3NiwyOTY2NDYwNDUwLDMzNTI3OTk0MTIsMTUwNDkxODgwNyw3ODM1''@;'; put 'put ''NTE4NzMsMzA4MjY0MDQ0MywzMjMzNDQyOTg5LDM5ODgyOTIzODQsMjU5NjI1NDY0Niw2MjMxNzA2OCwxOTU3ODEwODQyLDM5Mzk4NDU5NDUsMjY0NzgxNjExMSw4MTQ3MDk5NywxOTQzODAzNTIzLDM4MTQ5MTg5MzAsMjQ4OTU5NjgwNCwyMjUyNzQ0MzAsMjA1Mzc5MDM3NiwzODI2MTc1NzU1''@;'; put 'put ''LDI0NjY5MDYwMTMsMTY3ODE2NzQzLDIwOTc2NTEzNzcsNDAyNzU1MjU4MCwyMjY1NDkwMzg2LDUwMzQ0NDA3MiwxNzYyMDUwODE0LDQxNTA0MTcyNDUsMjE1NDEyOTM1NSw0MjY1MjIyMjUsMTg1MjUwNzg3OSw0Mjc1MzEzNTI2LDIzMTIzMTc5MjAsMjgyNzUzNjI2LDE3NDI1NTU4NTIsNDE4''@;'; put 'put ''OTcwODE0MywyMzk0ODc3OTQ1LDM5NzkxNzc2MywxNjIyMTgzNjM3LDM2MDQzOTA4ODgsMjcxNDg2NjU1OCw5NTM3Mjk3MzIsMTM0MDA3NjYyNiwzNTE4NzE5OTg1LDI3OTczNjA5OTksMTA2ODgyODM4MSwxMjE5NjM4ODU5LDM2MjQ3NDE4NTAsMjkzNjY3NTE0OCw5MDYxODU0NjIsMTA5MDgx''@;'; put 'put ''MjUxMiwzNzQ3NjcyMDAzLDI4MjUzNzk2NjksODI5MzI5MTM1LDExODEzMzUxNjEsMzQxMjE3NzgwNCwzMTYwODM0ODQyLDYyODA4NTQwOCwxMzgyNjA1MzY2LDM0MjMzNjkxMDksMzEzODA3ODQ2Nyw1NzA1NjIyMzMsMTQyNjQwMDgxNSwzMzE3MzE2NTQyLDI5OTg3MzM2MDgsNzMzMjM5OTU0''@;'; put 'put ''LDE1NTUyNjE5NTYsMzI2ODkzNTU5MSwzMDUwMzYwNjI1LDc1MjQ1OTQwMywxNTQxMzIwMjIxLDI2MDcwNzE5MjAsMzk2NTk3MzAzMCwxOTY5OTIyOTcyLDQwNzM1NDk4LDI2MTc4MzcyMjUsMzk0MzU3NzE1MSwxOTEzMDg3ODc3LDgzOTA4MzcxLDI1MTIzNDE2MzQsMzgwMzc0MDY5MiwyMDc1''@;'; put 'put ''MjA4NjIyLDIxMzI2MTExMiwyNDYzMjcyNjAzLDM4NTU5OTAyODUsMjA5NDg1NDA3MSwxOTg5NTg4ODEsMjI2MjAyOTAxMiw0MDU3MjYwNjEwLDE3NTkzNTk5OTIsNTM0NDE0MTkwLDIxNzY3MTg1NDEsNDEzOTMyOTExNSwxODczODM2MDAxLDQxNDY2NDU2NywyMjgyMjQ4OTM0LDQyNzkyMDAz''@;'; put 'put ''NjgsMTcxMTY4NDU1NCwyODUyODExMTYsMjQwNTgwMTcyNyw0MTY3MjE2NzQ1LDE2MzQ0Njc3OTUsMzc2MjI5NzAxLDI2ODUwNjc4OTYsMzYwODAwNzQwNiwxMzA4OTE4NjEyLDk1NjU0MzkzOCwyODA4NTU1MTA1LDM0OTU5NTgyNjMsMTIzMTYzNjMwMSwxMDQ3NDI3MDM1LDI5MzI5NTk4MTgs''@;'; put 'put ''MzY1NDcwMzgzNiwxMDg4MzU5MjcwLDkzNjkxOGUzLDI4NDc3MTQ4OTksMzczNjgzNzgyOSwxMjAyOTAwODYzLDgxNzIzMzg5NywzMTgzMzQyMTA4LDM0MDEyMzcxMzAsMTQwNDI3NzU1Miw2MTU4MTgxNTAsMzEzNDIwNzQ5MywzNDUzNDIxMjAzLDE0MjM4NTc0NDksNjAxNDUwNDMxLDMwMDk4''@;'; put 'put ''Mzc2MTQsMzI5NDcxMDQ1NiwxNTY3MTAzNzQ2LDcxMTkyODcyNCwzMDIwNjY4NDcxLDMyNzIzODAwNjUsMTUxMDMzNDIzNSw3NTUxNjcxMTddO0YuZXhwb3J0cz1mdW5jdGlvbihLLFUpe2lmKHR5cGVvZiBLPiJ1Inx8IUsubGVuZ3RoKXJldHVybiAwO3ZhciBXPSJzdHJpbmciIT09ei5nZXRU''@;'; put 'put ''eXBlT2YoSyk7dHlwZW9mIFU+InUiJiYoVT0wKTt2YXIgZWU9MDtVPX5VO2Zvcih2YXIgSj0wLG5lPUsubGVuZ3RoO0o8bmU7SisrKWVlPVc/S1tKXTpLLmNoYXJDb2RlQXQoSiksVT1VPj4+OF5OWzI1NSYoVV5lZSldO3JldHVybn5VfX0seyIuL3V0aWxzIjoyMX1dLDU6W2Z1bmN0aW9uKFAs''@;'; put 'put ''RixPKXsidXNlIHN0cmljdCI7dmFyIHo9UCgiLi91dGlscyIpO2Z1bmN0aW9uIE4oTCl7dGhpcy5kYXRhPW51bGwsdGhpcy5sZW5ndGg9MCx0aGlzLmluZGV4PTB9Ti5wcm90b3R5cGU9e2NoZWNrT2Zmc2V0OmZ1bmN0aW9uKEwpe3RoaXMuY2hlY2tJbmRleCh0aGlzLmluZGV4K0wpfSxjaGVj''@;'; put 'put ''a0luZGV4OmZ1bmN0aW9uKEwpe2lmKHRoaXMubGVuZ3RoPEx8fEw8MCl0aHJvdyBuZXcgRXJyb3IoIkVuZCBvZiBkYXRhIHJlYWNoZWQgKGRhdGEgbGVuZ3RoID0gIit0aGlzLmxlbmd0aCsiLCBhc2tlZCBpbmRleCA9ICIrTCsiKS4gQ29ycnVwdGVkIHppcCA/Iil9LHNldEluZGV4OmZ1bmN0''@;'; put 'put ''aW9uKEwpe3RoaXMuY2hlY2tJbmRleChMKSx0aGlzLmluZGV4PUx9LHNraXA6ZnVuY3Rpb24oTCl7dGhpcy5zZXRJbmRleCh0aGlzLmluZGV4K0wpfSxieXRlQXQ6ZnVuY3Rpb24oTCl7fSxyZWFkSW50OmZ1bmN0aW9uKEwpe3ZhciBVLEs9MDtmb3IodGhpcy5jaGVja09mZnNldChMKSxVPXRo''@;'; put 'put ''aXMuaW5kZXgrTC0xO1U+PXRoaXMuaW5kZXg7VS0tKUs9KEs8PDgpK3RoaXMuYnl0ZUF0KFUpO3JldHVybiB0aGlzLmluZGV4Kz1MLEt9LHJlYWRTdHJpbmc6ZnVuY3Rpb24oTCl7cmV0dXJuIHoudHJhbnNmb3JtVG8oInN0cmluZyIsdGhpcy5yZWFkRGF0YShMKSl9LHJlYWREYXRhOmZ1bmN0''@;'; put 'put ''aW9uKEwpe30sbGFzdEluZGV4T2ZTaWduYXR1cmU6ZnVuY3Rpb24oTCl7fSxyZWFkRGF0ZTpmdW5jdGlvbigpe3ZhciBMPXRoaXMucmVhZEludCg0KTtyZXR1cm4gbmV3IERhdGUoMTk4MCsoTD4+MjUmMTI3KSwoTD4+MjEmMTUpLTEsTD4+MTYmMzEsTD4+MTEmMzEsTD4+NSY2MywoMzEmTCk8''@;'; put 'put ''PDEpfX0sRi5leHBvcnRzPU59LHsiLi91dGlscyI6MjF9XSw2OltmdW5jdGlvbihQLEYsTyl7InVzZSBzdHJpY3QiO08uYmFzZTY0PSExLE8uYmluYXJ5PSExLE8uZGlyPSExLE8uY3JlYXRlRm9sZGVycz0hMSxPLmRhdGU9bnVsbCxPLmNvbXByZXNzaW9uPW51bGwsTy5jb21tZW50PW51bGx9''@;'; put 'put ''LHt9XSw3OltmdW5jdGlvbihQLEYsTyl7InVzZSBzdHJpY3QiO3ZhciB6PVAoIi4vdXRpbHMiKTtPLnN0cmluZzJiaW5hcnk9ZnVuY3Rpb24oTil7cmV0dXJuIHouc3RyaW5nMmJpbmFyeShOKX0sTy5zdHJpbmcyVWludDhBcnJheT1mdW5jdGlvbihOKXtyZXR1cm4gei50cmFuc2Zvcm1Ubygi''@;'; put 'put ''dWludDhhcnJheSIsTil9LE8udWludDhBcnJheTJTdHJpbmc9ZnVuY3Rpb24oTil7cmV0dXJuIHoudHJhbnNmb3JtVG8oInN0cmluZyIsTil9LE8uc3RyaW5nMkJsb2I9ZnVuY3Rpb24oTil7dmFyIEw9ei50cmFuc2Zvcm1UbygiYXJyYXlidWZmZXIiLE4pO3JldHVybiB6LmFycmF5QnVmZmVy''@;'; put 'put ''MkJsb2IoTCl9LE8uYXJyYXlCdWZmZXIyQmxvYj1mdW5jdGlvbihOKXtyZXR1cm4gei5hcnJheUJ1ZmZlcjJCbG9iKE4pfSxPLnRyYW5zZm9ybVRvPWZ1bmN0aW9uKE4sTCl7cmV0dXJuIHoudHJhbnNmb3JtVG8oTixMKX0sTy5nZXRUeXBlT2Y9ZnVuY3Rpb24oTil7cmV0dXJuIHouZ2V0VHlw''@;'; put 'put ''ZU9mKE4pfSxPLmNoZWNrU3VwcG9ydD1mdW5jdGlvbihOKXtyZXR1cm4gei5jaGVja1N1cHBvcnQoTil9LE8uTUFYX1ZBTFVFXzE2QklUUz16Lk1BWF9WQUxVRV8xNkJJVFMsTy5NQVhfVkFMVUVfMzJCSVRTPXouTUFYX1ZBTFVFXzMyQklUUyxPLnByZXR0eT1mdW5jdGlvbihOKXtyZXR1cm4g''@;'; put 'put ''ei5wcmV0dHkoTil9LE8uZmluZENvbXByZXNzaW9uPWZ1bmN0aW9uKE4pe3JldHVybiB6LmZpbmRDb21wcmVzc2lvbihOKX0sTy5pc1JlZ0V4cD1mdW5jdGlvbihOKXtyZXR1cm4gei5pc1JlZ0V4cChOKX19LHsiLi91dGlscyI6MjF9XSw4OltmdW5jdGlvbihQLEYsTyl7InVzZSBzdHJpY3Qi''@;'; put 'put ''O3ZhciB6PXR5cGVvZiBVaW50OEFycmF5PCJ1IiYmdHlwZW9mIFVpbnQxNkFycmF5PCJ1IiYmdHlwZW9mIFVpbnQzMkFycmF5PCJ1IixOPVAoInBha28iKTtPLnVuY29tcHJlc3NJbnB1dFR5cGU9ej8idWludDhhcnJheSI6ImFycmF5IixPLmNvbXByZXNzSW5wdXRUeXBlPXo/InVpbnQ4YXJy''@;'; put 'put ''YXkiOiJhcnJheSIsTy5tYWdpYz0iXGJcMCIsTy5jb21wcmVzcz1mdW5jdGlvbihMKXtyZXR1cm4gTi5kZWZsYXRlUmF3KEwpfSxPLnVuY29tcHJlc3M9ZnVuY3Rpb24oTCl7cmV0dXJuIE4uaW5mbGF0ZVJhdyhMKX19LHtwYWtvOjI0fV0sOTpbZnVuY3Rpb24oUCxGLE8peyJ1c2Ugc3RyaWN0''@;'; put 'put ''Ijt2YXIgej1QKCIuL2Jhc2U2NCIpO2Z1bmN0aW9uIE4oTCxLKXtpZighKHRoaXMgaW5zdGFuY2VvZiBOKSlyZXR1cm4gbmV3IE4oTCxLKTt0aGlzLmZpbGVzPXt9LHRoaXMuY29tbWVudD1udWxsLHRoaXMucm9vdD0iIixMJiZ0aGlzLmxvYWQoTCxLKSx0aGlzLmNsb25lPWZ1bmN0aW9uKCl7''@;'; put 'put ''dmFyIFU9bmV3IE47Zm9yKHZhciBXIGluIHRoaXMpImZ1bmN0aW9uIiE9dHlwZW9mIHRoaXNbV10mJihVW1ddPXRoaXNbV10pO3JldHVybiBVfX0oTi5wcm90b3R5cGU9UCgiLi9vYmplY3QiKSkubG9hZD1QKCIuL2xvYWQiKSxOLnN1cHBvcnQ9UCgiLi9zdXBwb3J0IiksTi5kZWZhdWx0cz1Q''@;'; put 'put ''KCIuL2RlZmF1bHRzIiksTi51dGlscz1QKCIuL2RlcHJlY2F0ZWRQdWJsaWNVdGlscyIpLE4uYmFzZTY0PXtlbmNvZGU6ZnVuY3Rpb24oTCl7cmV0dXJuIHouZW5jb2RlKEwpfSxkZWNvZGU6ZnVuY3Rpb24oTCl7cmV0dXJuIHouZGVjb2RlKEwpfX0sTi5jb21wcmVzc2lvbnM9UCgiLi9jb21w''@;'; put 'put ''cmVzc2lvbnMiKSxGLmV4cG9ydHM9Tn0seyIuL2Jhc2U2NCI6MSwiLi9jb21wcmVzc2lvbnMiOjMsIi4vZGVmYXVsdHMiOjYsIi4vZGVwcmVjYXRlZFB1YmxpY1V0aWxzIjo3LCIuL2xvYWQiOjEwLCIuL29iamVjdCI6MTMsIi4vc3VwcG9ydCI6MTd9XSwxMDpbZnVuY3Rpb24oUCxGLE8peyJ1''@;'; put 'put ''c2Ugc3RyaWN0Ijt2YXIgej1QKCIuL2Jhc2U2NCIpLE49UCgiLi96aXBFbnRyaWVzIik7Ri5leHBvcnRzPWZ1bmN0aW9uKEwsSyl7dmFyIFUsVyxZLHE7Zm9yKChLPUt8fHt9KS5iYXNlNjQmJihMPXouZGVjb2RlKEwpKSxVPShXPW5ldyBOKEwsSykpLmZpbGVzLFk9MDtZPFUubGVuZ3RoO1kr''@;'; put 'put ''Kyl0aGlzLmZpbGUoKHE9VVtZXSkuZmlsZU5hbWUscS5kZWNvbXByZXNzZWQse2JpbmFyeTohMCxvcHRpbWl6ZWRCaW5hcnlTdHJpbmc6ITAsZGF0ZTpxLmRhdGUsZGlyOnEuZGlyLGNvbW1lbnQ6cS5maWxlQ29tbWVudC5sZW5ndGg/cS5maWxlQ29tbWVudDpudWxsLGNyZWF0ZUZvbGRlcnM6''@;'; put 'put ''Sy5jcmVhdGVGb2xkZXJzfSk7cmV0dXJuIFcuemlwQ29tbWVudC5sZW5ndGgmJih0aGlzLmNvbW1lbnQ9Vy56aXBDb21tZW50KSx0aGlzfX0seyIuL2Jhc2U2NCI6MSwiLi96aXBFbnRyaWVzIjoyMn1dLDExOltmdW5jdGlvbihQLEYsTyl7KGZ1bmN0aW9uKHopeyJ1c2Ugc3RyaWN0Ijt2YXIg''@;'; put 'put ''Tj1mdW5jdGlvbigpe307aWYodHlwZW9mIHo8InUiKXt2YXIgTD0hei5mcm9tO2lmKCFMKXRyeXt6LmZyb20oImZvbyIsInV0ZjgiKX1jYXRjaHtMPSEwfU49TD9mdW5jdGlvbihLLFUpe3JldHVybiBVP25ldyB6KEssVSk6bmV3IHooSyl9OnouZnJvbS5iaW5kKHopLHouYWxsb2N8fCh6LmFs''@;'; put 'put ''bG9jPWZ1bmN0aW9uKEspe3JldHVybiBuZXcgeihLKX0pfUYuZXhwb3J0cz1mdW5jdGlvbihLLFUpe3JldHVybiJudW1iZXIiPT10eXBlb2YgSz96LmFsbG9jKEspOk4oSyxVKX0sRi5leHBvcnRzLnRlc3Q9ZnVuY3Rpb24oSyl7cmV0dXJuIHouaXNCdWZmZXIoSyl9fSkuY2FsbCh0aGlzLHR5''@;'; put 'put ''cGVvZiBCdWZmZXI8InUiP0J1ZmZlcjp2b2lkIDApfSx7fV0sMTI6W2Z1bmN0aW9uKFAsRixPKXsidXNlIHN0cmljdCI7dmFyIHo9UCgiLi91aW50OEFycmF5UmVhZGVyIik7ZnVuY3Rpb24gTihMKXt0aGlzLmRhdGE9TCx0aGlzLmxlbmd0aD10aGlzLmRhdGEubGVuZ3RoLHRoaXMuaW5kZXg9''@;'; put 'put ''MH0oTi5wcm90b3R5cGU9bmV3IHopLnJlYWREYXRhPWZ1bmN0aW9uKEwpe3RoaXMuY2hlY2tPZmZzZXQoTCk7dmFyIEs9dGhpcy5kYXRhLnNsaWNlKHRoaXMuaW5kZXgsdGhpcy5pbmRleCtMKTtyZXR1cm4gdGhpcy5pbmRleCs9TCxLfSxGLmV4cG9ydHM9Tn0seyIuL3VpbnQ4QXJyYXlSZWFk''@;'; put 'put ''ZXIiOjE4fV0sMTM6W2Z1bmN0aW9uKFAsRixPKXsidXNlIHN0cmljdCI7dmFyIHo9UCgiLi9zdXBwb3J0IiksTj1QKCIuL3V0aWxzIiksTD1QKCIuL2NyYzMyIiksSz1QKCIuL3NpZ25hdHVyZSIpLFU9UCgiLi9kZWZhdWx0cyIpLFc9UCgiLi9iYXNlNjQiKSxZPVAoIi4vY29tcHJlc3Npb25z''@;'; put 'put ''IikscT1QKCIuL2NvbXByZXNzZWRPYmplY3QiKSxlZT1QKCIuL25vZGVCdWZmZXIiKSxKPVAoIi4vdXRmOCIpLG5lPVAoIi4vc3RyaW5nV3JpdGVyIiksaWU9UCgiLi91aW50OEFycmF5V3JpdGVyIiksbGU9ZnVuY3Rpb24oail7aWYoai5fZGF0YSBpbnN0YW5jZW9mIHEmJihqLl9kYXRhPWou''@;'; put 'put ''X2RhdGEuZ2V0Q29udGVudCgpLGoub3B0aW9ucy5iaW5hcnk9ITAsai5vcHRpb25zLmJhc2U2ND0hMSwidWludDhhcnJheSI9PT1OLmdldFR5cGVPZihqLl9kYXRhKSkpe3ZhciBFPWouX2RhdGE7ai5fZGF0YT1uZXcgVWludDhBcnJheShFLmxlbmd0aCksMCE9PUUubGVuZ3RoJiZqLl9kYXRh''@;'; put 'put ''LnNldChFLDApfXJldHVybiBqLl9kYXRhfSxtZT1mdW5jdGlvbihqKXt2YXIgRT1sZShqKTtyZXR1cm4ic3RyaW5nIj09PU4uZ2V0VHlwZU9mKEUpPyFqLm9wdGlvbnMuYmluYXJ5JiZ6Lm5vZGVidWZmZXI/ZWUoRSwidXRmLTgiKTpqLmFzQmluYXJ5KCk6RX0sX2U9ZnVuY3Rpb24oail7dmFy''@;'; put 'put ''IEU9bGUodGhpcyk7cmV0dXJuIG51bGw9PT1FfHx0eXBlb2YgRT4idSI/IiI6KHRoaXMub3B0aW9ucy5iYXNlNjQmJihFPVcuZGVjb2RlKEUpKSxFPWomJnRoaXMub3B0aW9ucy5iaW5hcnk/SC51dGY4ZGVjb2RlKEUpOk4udHJhbnNmb3JtVG8oInN0cmluZyIsRSksIWomJiF0aGlzLm9wdGlv''@;'; put 'put ''bnMuYmluYXJ5JiYoRT1OLnRyYW5zZm9ybVRvKCJzdHJpbmciLEgudXRmOGVuY29kZShFKSkpLEUpfSxUZT1mdW5jdGlvbihqLEUsbSl7dGhpcy5uYW1lPWosdGhpcy5kaXI9bS5kaXIsdGhpcy5kYXRlPW0uZGF0ZSx0aGlzLmNvbW1lbnQ9bS5jb21tZW50LHRoaXMuX2RhdGE9RSx0aGlzLm9w''@;'; put 'put ''dGlvbnM9bSx0aGlzLl9pbml0aWFsTWV0YWRhdGE9e2RpcjptLmRpcixkYXRlOm0uZGF0ZX19O1RlLnByb3RvdHlwZT17YXNUZXh0OmZ1bmN0aW9uKCl7cmV0dXJuIF9lLmNhbGwodGhpcywhMCl9LGFzQmluYXJ5OmZ1bmN0aW9uKCl7cmV0dXJuIF9lLmNhbGwodGhpcywhMSl9LGFzTm9kZUJ1''@;'; put 'put ''ZmZlcjpmdW5jdGlvbigpe3ZhciBqPW1lKHRoaXMpO3JldHVybiBOLnRyYW5zZm9ybVRvKCJub2RlYnVmZmVyIixqKX0sYXNVaW50OEFycmF5OmZ1bmN0aW9uKCl7dmFyIGo9bWUodGhpcyk7cmV0dXJuIE4udHJhbnNmb3JtVG8oInVpbnQ4YXJyYXkiLGopfSxhc0FycmF5QnVmZmVyOmZ1bmN0''@;'; put 'put ''aW9uKCl7cmV0dXJuIHRoaXMuYXNVaW50OEFycmF5KCkuYnVmZmVyfX07dmFyIFNlPWZ1bmN0aW9uKGosRSl7dmFyIEEsbT0iIjtmb3IoQT0wO0E8RTtBKyspbSs9U3RyaW5nLmZyb21DaGFyQ29kZSgyNTUmaiksaj4+Pj04O3JldHVybiBtfSxqZT1mdW5jdGlvbigpe3ZhciBFLG0saj17fTtm''@;'; put 'put ''b3IoRT0wO0U8YXJndW1lbnRzLmxlbmd0aDtFKyspZm9yKG0gaW4gYXJndW1lbnRzW0VdKWFyZ3VtZW50c1tFXS5oYXNPd25Qcm9wZXJ0eShtKSYmdHlwZW9mIGpbbV0+InUiJiYoalttXT1hcmd1bWVudHNbRV1bbV0pO3JldHVybiBqfSxwPWZ1bmN0aW9uKGosRSxtKXt2YXIgYWUsQT1OLmdl''@;'; put 'put ''dFR5cGVPZihFKTtpZihtPWZ1bmN0aW9uKGope3JldHVybiEwPT09KGo9anx8e30pLmJhc2U2NCYmbnVsbD09ai5iaW5hcnkmJihqLmJpbmFyeT0hMCksKGo9amUoaixVKSkuZGF0ZT1qLmRhdGV8fG5ldyBEYXRlLG51bGwhPT1qLmNvbXByZXNzaW9uJiYoai5jb21wcmVzc2lvbj1qLmNvbXBy''@;'; put 'put ''ZXNzaW9uLnRvVXBwZXJDYXNlKCkpLGp9KG0pLG0uY3JlYXRlRm9sZGVycyYmKGFlPWIoaikpJiZ4LmNhbGwodGhpcyxhZSwhMCksbS5kaXJ8fG51bGw9PT1FfHx0eXBlb2YgRT4idSIpbS5iYXNlNjQ9ITEsbS5iaW5hcnk9ITEsRT1udWxsO2Vsc2UgaWYoInN0cmluZyI9PT1BKW0uYmluYXJ5''@;'; put 'put ''JiYhbS5iYXNlNjQmJiEwIT09bS5vcHRpbWl6ZWRCaW5hcnlTdHJpbmcmJihFPU4uc3RyaW5nMmJpbmFyeShFKSk7ZWxzZXtpZihtLmJhc2U2ND0hMSxtLmJpbmFyeT0hMCwhKEF8fEUgaW5zdGFuY2VvZiBxKSl0aHJvdyBuZXcgRXJyb3IoIlRoZSBkYXRhIG9mICciK2orIicgaXMgaW4gYW4g''@;'; put 'put ''dW5zdXBwb3J0ZWQgZm9ybWF0ICEiKTsiYXJyYXlidWZmZXIiPT09QSYmKEU9Ti50cmFuc2Zvcm1UbygidWludDhhcnJheSIsRSkpfXZhciB0ZT1uZXcgVGUoaixFLG0pO3JldHVybiB0aGlzLmZpbGVzW2pdPXRlLHRlfSxiPWZ1bmN0aW9uKGopeyIvIj09ai5zbGljZSgtMSkmJihqPWouc3Vi''@;'; put 'put ''c3RyaW5nKDAsai5sZW5ndGgtMSkpO3ZhciBFPWoubGFzdEluZGV4T2YoIi8iKTtyZXR1cm4gRT4wP2ouc3Vic3RyaW5nKDAsRSk6IiJ9LHg9ZnVuY3Rpb24oaixFKXtyZXR1cm4iLyIhPWouc2xpY2UoLTEpJiYoais9Ii8iKSxFPXR5cGVvZiBFPCJ1IiYmRSx0aGlzLmZpbGVzW2pdfHxwLmNh''@;'; put 'put ''bGwodGhpcyxqLG51bGwse2RpcjohMCxjcmVhdGVGb2xkZXJzOkV9KSx0aGlzLmZpbGVzW2pdfSxDPWZ1bmN0aW9uKGosRSl7dmFyIEEsbT1uZXcgcTtyZXR1cm4gai5fZGF0YSBpbnN0YW5jZW9mIHE/KG0udW5jb21wcmVzc2VkU2l6ZT1qLl9kYXRhLnVuY29tcHJlc3NlZFNpemUsbS5jcmMz''@;'; put 'put ''Mj1qLl9kYXRhLmNyYzMyLDA9PT1tLnVuY29tcHJlc3NlZFNpemV8fGouZGlyPyhFPVkuU1RPUkUsbS5jb21wcmVzc2VkQ29udGVudD0iIixtLmNyYzMyPTApOmouX2RhdGEuY29tcHJlc3Npb25NZXRob2Q9PT1FLm1hZ2ljP20uY29tcHJlc3NlZENvbnRlbnQ9ai5fZGF0YS5nZXRDb21wcmVz''@;'; put 'put ''c2VkQ29udGVudCgpOihBPWouX2RhdGEuZ2V0Q29udGVudCgpLG0uY29tcHJlc3NlZENvbnRlbnQ9RS5jb21wcmVzcyhOLnRyYW5zZm9ybVRvKEUuY29tcHJlc3NJbnB1dFR5cGUsQSkpKSk6KCghKEE9bWUoaikpfHwwPT09QS5sZW5ndGh8fGouZGlyKSYmKEU9WS5TVE9SRSxBPSIiKSxtLnVu''@;'; put 'put ''Y29tcHJlc3NlZFNpemU9QS5sZW5ndGgsbS5jcmMzMj1MKEEpLG0uY29tcHJlc3NlZENvbnRlbnQ9RS5jb21wcmVzcyhOLnRyYW5zZm9ybVRvKEUuY29tcHJlc3NJbnB1dFR5cGUsQSkpKSxtLmNvbXByZXNzZWRTaXplPW0uY29tcHJlc3NlZENvbnRlbnQubGVuZ3RoLG0uY29tcHJlc3Npb25N''@;'; put 'put ''ZXRob2Q9RS5tYWdpYyxtfSxUPWZ1bmN0aW9uKGosRSxtLEEpe3ZhciB4ZSx2ZSxGZSxPZSx0ZT1OLnRyYW5zZm9ybVRvKCJzdHJpbmciLEoudXRmOGVuY29kZShFLm5hbWUpKSxzZT1FLmNvbW1lbnR8fCIiLHdlPU4udHJhbnNmb3JtVG8oInN0cmluZyIsSi51dGY4ZW5jb2RlKHNlKSksVWU9''@;'; put 'put ''dGUubGVuZ3RoIT09RS5uYW1lLmxlbmd0aCxKZT13ZS5sZW5ndGghPT1zZS5sZW5ndGgsb3Q9RS5vcHRpb25zLFhlPSIiLHplPSIiLERlPSIiO0ZlPUUuX2luaXRpYWxNZXRhZGF0YS5kaXIhPT1FLmRpcj9FLmRpcjpvdC5kaXIseGU9KE9lPUUuX2luaXRpYWxNZXRhZGF0YS5kYXRlIT09RS5k''@;'; put 'put ''YXRlP0UuZGF0ZTpvdC5kYXRlKS5nZXRIb3VycygpLHhlPDw9Nix4ZXw9T2UuZ2V0TWludXRlcygpLHhlPDw9NSx4ZXw9T2UuZ2V0U2Vjb25kcygpLzIsdmU9T2UuZ2V0RnVsbFllYXIoKS0xOTgwLHZlPDw9NCx2ZXw9T2UuZ2V0TW9udGgoKSsxLHZlPDw9NSx2ZXw9T2UuZ2V0RGF0ZSgpLFVl''@;'; put 'put ''JiYoemU9U2UoMSwxKStTZShMKHRlKSw0KSt0ZSxYZSs9InVwIitTZSh6ZS5sZW5ndGgsMikremUpLEplJiYoRGU9U2UoMSwxKStTZSh0aGlzLmNyYzMyKHdlKSw0KSt3ZSxYZSs9InVjIitTZShEZS5sZW5ndGgsMikrRGUpO3ZhciBJZT0iIjtyZXR1cm4gSWUrPSJcblwwIixJZSs9VWV8fEpl''@;'; put 'put ''PyJcMFxiIjoiXDBcMCIsSWUrPW0uY29tcHJlc3Npb25NZXRob2QsSWUrPVNlKHhlLDIpLEllKz1TZSh2ZSwyKSxJZSs9U2UobS5jcmMzMiw0KSxJZSs9U2UobS5jb21wcmVzc2VkU2l6ZSw0KSxJZSs9U2UobS51bmNvbXByZXNzZWRTaXplLDQpLEllKz1TZSh0ZS5sZW5ndGgsMiksSWUrPVNl''@;'; put 'put ''KFhlLmxlbmd0aCwyKSx7ZmlsZVJlY29yZDpLLkxPQ0FMX0ZJTEVfSEVBREVSK0llK3RlK1hlLGRpclJlY29yZDpLLkNFTlRSQUxfRklMRV9IRUFERVIrIlx4MTRcMCIrSWUrU2Uod2UubGVuZ3RoLDIpKyJcMFwwXDBcMCIrKCEwPT09RmU/Ilx4MTBcMFwwXDAiOiJcMFwwXDBcMCIpK1NlKEEs''@;'; put 'put ''NCkrdGUrWGUrd2UsY29tcHJlc3NlZE9iamVjdDptfX0sSD17bG9hZDpmdW5jdGlvbihqLEUpe3Rocm93IG5ldyBFcnJvcigiTG9hZCBtZXRob2QgaXMgbm90IGRlZmluZWQuIElzIHRoZSBmaWxlIGpzemlwLWxvYWQuanMgaW5jbHVkZWQgPyIpfSxmaWx0ZXI6ZnVuY3Rpb24oail7dmFyIG0s''@;'; put 'put ''QSxhZSx0ZSxFPVtdO2ZvcihtIGluIHRoaXMuZmlsZXMpdGhpcy5maWxlcy5oYXNPd25Qcm9wZXJ0eShtKSYmKHRlPW5ldyBUZSgoYWU9dGhpcy5maWxlc1ttXSkubmFtZSxhZS5fZGF0YSxqZShhZS5vcHRpb25zKSksQT1tLnNsaWNlKHRoaXMucm9vdC5sZW5ndGgsbS5sZW5ndGgpLG0uc2xp''@;'; put 'put ''Y2UoMCx0aGlzLnJvb3QubGVuZ3RoKT09PXRoaXMucm9vdCYmaihBLHRlKSYmRS5wdXNoKHRlKSk7cmV0dXJuIEV9LGZpbGU6ZnVuY3Rpb24oaixFLG0pe2lmKDE9PT1hcmd1bWVudHMubGVuZ3RoKXtpZihOLmlzUmVnRXhwKGopKXt2YXIgQT1qO3JldHVybiB0aGlzLmZpbHRlcihmdW5jdGlv''@;'; put 'put ''bihhZSx0ZSl7cmV0dXJuIXRlLmRpciYmQS50ZXN0KGFlKX0pfXJldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbihhZSx0ZSl7cmV0dXJuIXRlLmRpciYmYWU9PT1qfSlbMF18fG51bGx9cmV0dXJuIHAuY2FsbCh0aGlzLGo9dGhpcy5yb290K2osRSxtKSx0aGlzfSxmb2xkZXI6ZnVuY3Rpb24o''@;'; put 'put ''ail7aWYoIWopcmV0dXJuIHRoaXM7aWYoTi5pc1JlZ0V4cChqKSlyZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24oYWUsdGUpe3JldHVybiB0ZS5kaXImJmoudGVzdChhZSl9KTt2YXIgbT14LmNhbGwodGhpcyx0aGlzLnJvb3QraiksQT10aGlzLmNsb25lKCk7cmV0dXJuIEEucm9vdD1tLm5h''@;'; put 'put ''bWUsQX0scmVtb3ZlOmZ1bmN0aW9uKGope3ZhciBFPXRoaXMuZmlsZXNbaj10aGlzLnJvb3Qral07aWYoRXx8KCIvIiE9ai5zbGljZSgtMSkmJihqKz0iLyIpLEU9dGhpcy5maWxlc1tqXSksRSYmIUUuZGlyKWRlbGV0ZSB0aGlzLmZpbGVzW2pdO2Vsc2UgZm9yKHZhciBtPXRoaXMuZmlsdGVy''@;'; put 'put ''KGZ1bmN0aW9uKGFlLHRlKXtyZXR1cm4gdGUubmFtZS5zbGljZSgwLGoubGVuZ3RoKT09PWp9KSxBPTA7QTxtLmxlbmd0aDtBKyspZGVsZXRlIHRoaXMuZmlsZXNbbVtBXS5uYW1lXTtyZXR1cm4gdGhpc30sZ2VuZXJhdGU6ZnVuY3Rpb24oail7aj1qZShqfHx7fSx7YmFzZTY0OiEwLGNvbXBy''@;'; put 'put ''ZXNzaW9uOiJTVE9SRSIsdHlwZToiYmFzZTY0Iixjb21tZW50Om51bGx9KSxOLmNoZWNrU3VwcG9ydChqLnR5cGUpO3ZhciBhZSx0ZSxYZSxFPVtdLG09MCxBPTAsc2U9Ti50cmFuc2Zvcm1Ubygic3RyaW5nIix0aGlzLnV0ZjhlbmNvZGUoai5jb21tZW50fHx0aGlzLmNvbW1lbnR8fCIiKSk7''@;'; put 'put ''Zm9yKHZhciB3ZSBpbiB0aGlzLmZpbGVzKWlmKHRoaXMuZmlsZXMuaGFzT3duUHJvcGVydHkod2UpKXt2YXIgVWU9dGhpcy5maWxlc1t3ZV0sSmU9VWUub3B0aW9ucy5jb21wcmVzc2lvbnx8ai5jb21wcmVzc2lvbi50b1VwcGVyQ2FzZSgpLG90PVlbSmVdO2lmKCFvdCl0aHJvdyBuZXcgRXJy''@;'; put 'put ''b3IoSmUrIiBpcyBub3QgYSB2YWxpZCBjb21wcmVzc2lvbiBtZXRob2QgISIpO3ZhciB4ZT1DLmNhbGwodGhpcyxVZSxvdCksdmU9VC5jYWxsKHRoaXMsd2UsVWUseGUsbSk7bSs9dmUuZmlsZVJlY29yZC5sZW5ndGgreGUuY29tcHJlc3NlZFNpemUsQSs9dmUuZGlyUmVjb3JkLmxlbmd0aCxF''@;'; put 'put ''LnB1c2godmUpfVhlPUsuQ0VOVFJBTF9ESVJFQ1RPUllfRU5EKyJcMFwwXDBcMCIrU2UoRS5sZW5ndGgsMikrU2UoRS5sZW5ndGgsMikrU2UoQSw0KStTZShtLDQpK1NlKHNlLmxlbmd0aCwyKStzZTt2YXIgemU9ai50eXBlLnRvTG93ZXJDYXNlKCk7Zm9yKGFlPSJ1aW50OGFycmF5Ij09PXpl''@;'; put 'put ''fHwiYXJyYXlidWZmZXIiPT09emV8fCJibG9iIj09PXplfHwibm9kZWJ1ZmZlciI9PT16ZT9uZXcgaWUobStBK1hlLmxlbmd0aCk6bmV3IG5lKG0rQStYZS5sZW5ndGgpLHRlPTA7dGU8RS5sZW5ndGg7dGUrKylhZS5hcHBlbmQoRVt0ZV0uZmlsZVJlY29yZCksYWUuYXBwZW5kKEVbdGVdLmNv''@;'; put 'put ''bXByZXNzZWRPYmplY3QuY29tcHJlc3NlZENvbnRlbnQpO2Zvcih0ZT0wO3RlPEUubGVuZ3RoO3RlKyspYWUuYXBwZW5kKEVbdGVdLmRpclJlY29yZCk7YWUuYXBwZW5kKFhlKTt2YXIgRGU9YWUuZmluYWxpemUoKTtzd2l0Y2goai50eXBlLnRvTG93ZXJDYXNlKCkpe2Nhc2UidWludDhhcnJh''@;'; put 'put ''eSI6Y2FzZSJhcnJheWJ1ZmZlciI6Y2FzZSJub2RlYnVmZmVyIjpyZXR1cm4gTi50cmFuc2Zvcm1UbyhqLnR5cGUudG9Mb3dlckNhc2UoKSxEZSk7Y2FzZSJibG9iIjpyZXR1cm4gTi5hcnJheUJ1ZmZlcjJCbG9iKE4udHJhbnNmb3JtVG8oImFycmF5YnVmZmVyIixEZSkpO2Nhc2UiYmFzZTY0''@;'; put 'put ''IjpyZXR1cm4gai5iYXNlNjQ/Vy5lbmNvZGUoRGUpOkRlO2RlZmF1bHQ6cmV0dXJuIERlfX0sY3JjMzI6ZnVuY3Rpb24oaixFKXtyZXR1cm4gTChqLEUpfSx1dGY4ZW5jb2RlOmZ1bmN0aW9uKGope3JldHVybiBOLnRyYW5zZm9ybVRvKCJzdHJpbmciLEoudXRmOGVuY29kZShqKSl9LHV0Zjhk''@;'; put 'put ''ZWNvZGU6ZnVuY3Rpb24oail7cmV0dXJuIEoudXRmOGRlY29kZShqKX19O0YuZXhwb3J0cz1IfSx7Ii4vYmFzZTY0IjoxLCIuL2NvbXByZXNzZWRPYmplY3QiOjIsIi4vY29tcHJlc3Npb25zIjozLCIuL2NyYzMyIjo0LCIuL2RlZmF1bHRzIjo2LCIuL25vZGVCdWZmZXIiOjExLCIuL3NpZ25h''@;'; put 'put ''dHVyZSI6MTQsIi4vc3RyaW5nV3JpdGVyIjoxNiwiLi9zdXBwb3J0IjoxNywiLi91aW50OEFycmF5V3JpdGVyIjoxOSwiLi91dGY4IjoyMCwiLi91dGlscyI6MjF9XSwxNDpbZnVuY3Rpb24oUCxGLE8peyJ1c2Ugc3RyaWN0IjtPLkxPQ0FMX0ZJTEVfSEVBREVSPSJQS1x4MDNceDA0IixPLkNF''@;'; put 'put ''TlRSQUxfRklMRV9IRUFERVI9IlBLXHgwMVx4MDIiLE8uQ0VOVFJBTF9ESVJFQ1RPUllfRU5EPSJQS1x4MDVceDA2IixPLlpJUDY0X0NFTlRSQUxfRElSRUNUT1JZX0xPQ0FUT1I9IlBLXHgwNlx4MDciLE8uWklQNjRfQ0VOVFJBTF9ESVJFQ1RPUllfRU5EPSJQS1x4MDZceDA2IixPLkRBVEFf''@;'; put 'put ''REVTQ1JJUFRPUj0iUEtceDA3XGIifSx7fV0sMTU6W2Z1bmN0aW9uKFAsRixPKXsidXNlIHN0cmljdCI7dmFyIHo9UCgiLi9kYXRhUmVhZGVyIiksTj1QKCIuL3V0aWxzIik7ZnVuY3Rpb24gTChLLFUpe3RoaXMuZGF0YT1LLFV8fCh0aGlzLmRhdGE9Ti5zdHJpbmcyYmluYXJ5KHRoaXMuZGF0''@;'; put 'put ''YSkpLHRoaXMubGVuZ3RoPXRoaXMuZGF0YS5sZW5ndGgsdGhpcy5pbmRleD0wfShMLnByb3RvdHlwZT1uZXcgeikuYnl0ZUF0PWZ1bmN0aW9uKEspe3JldHVybiB0aGlzLmRhdGEuY2hhckNvZGVBdChLKX0sTC5wcm90b3R5cGUubGFzdEluZGV4T2ZTaWduYXR1cmU9ZnVuY3Rpb24oSyl7cmV0''@;'; put 'put ''dXJuIHRoaXMuZGF0YS5sYXN0SW5kZXhPZihLKX0sTC5wcm90b3R5cGUucmVhZERhdGE9ZnVuY3Rpb24oSyl7dGhpcy5jaGVja09mZnNldChLKTt2YXIgVT10aGlzLmRhdGEuc2xpY2UodGhpcy5pbmRleCx0aGlzLmluZGV4K0spO3JldHVybiB0aGlzLmluZGV4Kz1LLFV9LEYuZXhwb3J0cz1M''@;'; put 'put ''fSx7Ii4vZGF0YVJlYWRlciI6NSwiLi91dGlscyI6MjF9XSwxNjpbZnVuY3Rpb24oUCxGLE8peyJ1c2Ugc3RyaWN0Ijt2YXIgej1QKCIuL3V0aWxzIiksTj1mdW5jdGlvbigpe3RoaXMuZGF0YT1bXX07Ti5wcm90b3R5cGU9e2FwcGVuZDpmdW5jdGlvbihMKXtMPXoudHJhbnNmb3JtVG8oInN0''@;'; put 'put ''cmluZyIsTCksdGhpcy5kYXRhLnB1c2goTCl9LGZpbmFsaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGF0YS5qb2luKCIiKX19LEYuZXhwb3J0cz1OfSx7Ii4vdXRpbHMiOjIxfV0sMTc6W2Z1bmN0aW9uKFAsRixPKXsoZnVuY3Rpb24oeil7InVzZSBzdHJpY3QiO2lmKE8uYmFzZTY0PSEw''@;'; put 'put ''LE8uYXJyYXk9ITAsTy5zdHJpbmc9ITAsTy5hcnJheWJ1ZmZlcj10eXBlb2YgQXJyYXlCdWZmZXI8InUiJiZ0eXBlb2YgVWludDhBcnJheTwidSIsTy5ub2RlYnVmZmVyPXR5cGVvZiB6PCJ1IixPLnVpbnQ4YXJyYXk9dHlwZW9mIFVpbnQ4QXJyYXk8InUiLHR5cGVvZiBBcnJheUJ1ZmZlcj4i''@;'; put 'put ''dSIpTy5ibG9iPSExO2Vsc2V7dmFyIE49bmV3IEFycmF5QnVmZmVyKDApO3RyeXtPLmJsb2I9MD09PW5ldyBCbG9iKFtOXSx7dHlwZToiYXBwbGljYXRpb24vemlwIn0pLnNpemV9Y2F0Y2h7dHJ5e3ZhciBLPW5ldyh3aW5kb3cuQmxvYkJ1aWxkZXJ8fHdpbmRvdy5XZWJLaXRCbG9iQnVpbGRl''@;'; put 'put ''cnx8d2luZG93Lk1vekJsb2JCdWlsZGVyfHx3aW5kb3cuTVNCbG9iQnVpbGRlcik7Sy5hcHBlbmQoTiksTy5ibG9iPTA9PT1LLmdldEJsb2IoImFwcGxpY2F0aW9uL3ppcCIpLnNpemV9Y2F0Y2h7Ty5ibG9iPSExfX19fSkuY2FsbCh0aGlzLHR5cGVvZiBCdWZmZXI8InUiP0J1ZmZlcjp2b2lk''@;'; put 'put ''IDApfSx7fV0sMTg6W2Z1bmN0aW9uKFAsRixPKXsidXNlIHN0cmljdCI7dmFyIHo9UCgiLi9kYXRhUmVhZGVyIik7ZnVuY3Rpb24gTihMKXtMJiYodGhpcy5kYXRhPUwsdGhpcy5sZW5ndGg9dGhpcy5kYXRhLmxlbmd0aCx0aGlzLmluZGV4PTApfShOLnByb3RvdHlwZT1uZXcgeikuYnl0ZUF0''@;'; put 'put ''PWZ1bmN0aW9uKEwpe3JldHVybiB0aGlzLmRhdGFbTF19LE4ucHJvdG90eXBlLmxhc3RJbmRleE9mU2lnbmF0dXJlPWZ1bmN0aW9uKEwpe2Zvcih2YXIgSz1MLmNoYXJDb2RlQXQoMCksVT1MLmNoYXJDb2RlQXQoMSksVz1MLmNoYXJDb2RlQXQoMiksWT1MLmNoYXJDb2RlQXQoMykscT10aGlz''@;'; put 'put ''Lmxlbmd0aC00O3E+PTA7LS1xKWlmKHRoaXMuZGF0YVtxXT09PUsmJnRoaXMuZGF0YVtxKzFdPT09VSYmdGhpcy5kYXRhW3ErMl09PT1XJiZ0aGlzLmRhdGFbcSszXT09PVkpcmV0dXJuIHE7cmV0dXJuLTF9LE4ucHJvdG90eXBlLnJlYWREYXRhPWZ1bmN0aW9uKEwpe2lmKHRoaXMuY2hlY2tP''@;'; put 'put ''ZmZzZXQoTCksMD09PUwpcmV0dXJuIG5ldyBVaW50OEFycmF5KDApO3ZhciBLPXRoaXMuZGF0YS5zdWJhcnJheSh0aGlzLmluZGV4LHRoaXMuaW5kZXgrTCk7cmV0dXJuIHRoaXMuaW5kZXgrPUwsS30sRi5leHBvcnRzPU59LHsiLi9kYXRhUmVhZGVyIjo1fV0sMTk6W2Z1bmN0aW9uKFAsRixP''@;'; put 'put ''KXsidXNlIHN0cmljdCI7dmFyIHo9UCgiLi91dGlscyIpLE49ZnVuY3Rpb24oTCl7dGhpcy5kYXRhPW5ldyBVaW50OEFycmF5KEwpLHRoaXMuaW5kZXg9MH07Ti5wcm90b3R5cGU9e2FwcGVuZDpmdW5jdGlvbihMKXswIT09TC5sZW5ndGgmJihMPXoudHJhbnNmb3JtVG8oInVpbnQ4YXJyYXki''@;'; put 'put ''LEwpLHRoaXMuZGF0YS5zZXQoTCx0aGlzLmluZGV4KSx0aGlzLmluZGV4Kz1MLmxlbmd0aCl9LGZpbmFsaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGF0YX19LEYuZXhwb3J0cz1OfSx7Ii4vdXRpbHMiOjIxfV0sMjA6W2Z1bmN0aW9uKFAsRixPKXsidXNlIHN0cmljdCI7Zm9yKHZhciB6''@;'; put 'put ''PVAoIi4vdXRpbHMiKSxOPVAoIi4vc3VwcG9ydCIpLEw9UCgiLi9ub2RlQnVmZmVyIiksSz1uZXcgQXJyYXkoMjU2KSxVPTA7VTwyNTY7VSsrKUtbVV09VT49MjUyPzY6VT49MjQ4PzU6VT49MjQwPzQ6VT49MjI0PzM6VT49MTkyPzI6MTtLWzI1NF09S1syNTRdPTE7dmFyIFk9ZnVuY3Rpb24o''@;'; put 'put ''ZWUsSil7dmFyIG5lO2ZvcigoSj1KfHxlZS5sZW5ndGgpPmVlLmxlbmd0aCYmKEo9ZWUubGVuZ3RoKSxuZT1KLTE7bmU+PTAmJjEyOD09KDE5MiZlZVtuZV0pOyluZS0tO3JldHVybiBuZTwwfHwwPT09bmU/SjpuZStLW2VlW25lXV0+Sj9uZTpKfSxxPWZ1bmN0aW9uKGVlKXt2YXIgbmUsaWUs''@;'; put 'put ''bGUsbWUsX2U9ZWUubGVuZ3RoLFRlPW5ldyBBcnJheSgyKl9lKTtmb3IoaWU9MCxuZT0wO25lPF9lOylpZigobGU9ZWVbbmUrK10pPDEyOClUZVtpZSsrXT1sZTtlbHNlIGlmKChtZT1LW2xlXSk+NClUZVtpZSsrXT02NTUzMyxuZSs9bWUtMTtlbHNle2ZvcihsZSY9Mj09PW1lPzMxOjM9PT1t''@;'; put 'put ''ZT8xNTo3O21lPjEmJm5lPF9lOylsZT1sZTw8Nnw2MyZlZVtuZSsrXSxtZS0tO21lPjE/VGVbaWUrK109NjU1MzM6bGU8NjU1MzY/VGVbaWUrK109bGU6KFRlW2llKytdPTU1Mjk2fChsZS09NjU1MzYpPj4xMCYxMDIzLFRlW2llKytdPTU2MzIwfDEwMjMmbGUpfXJldHVybiBUZS5sZW5ndGgh''@;'; put 'put ''PT1pZSYmKFRlLnN1YmFycmF5P1RlPVRlLnN1YmFycmF5KDAsaWUpOlRlLmxlbmd0aD1pZSksei5hcHBseUZyb21DaGFyQ29kZShUZSl9O08udXRmOGVuY29kZT1mdW5jdGlvbihKKXtyZXR1cm4gTi5ub2RlYnVmZmVyP0woSiwidXRmLTgiKTpmdW5jdGlvbihlZSl7dmFyIEosbmUsaWUsbGUs''@;'; put 'put ''bWUsX2U9ZWUubGVuZ3RoLFRlPTA7Zm9yKGxlPTA7bGU8X2U7bGUrKyk1NTI5Nj09KDY0NTEyJihuZT1lZS5jaGFyQ29kZUF0KGxlKSkpJiZsZSsxPF9lJiY1NjMyMD09KDY0NTEyJihpZT1lZS5jaGFyQ29kZUF0KGxlKzEpKSkmJihuZT02NTUzNisobmUtNTUyOTY8PDEwKSsoaWUtNTYzMjAp''@;'; put 'put ''LGxlKyspLFRlKz1uZTwxMjg/MTpuZTwyMDQ4PzI6bmU8NjU1MzY/Mzo0O2ZvcihKPU4udWludDhhcnJheT9uZXcgVWludDhBcnJheShUZSk6bmV3IEFycmF5KFRlKSxtZT0wLGxlPTA7bWU8VGU7bGUrKyk1NTI5Nj09KDY0NTEyJihuZT1lZS5jaGFyQ29kZUF0KGxlKSkpJiZsZSsxPF9lJiY1''@;'; put 'put ''NjMyMD09KDY0NTEyJihpZT1lZS5jaGFyQ29kZUF0KGxlKzEpKSkmJihuZT02NTUzNisobmUtNTUyOTY8PDEwKSsoaWUtNTYzMjApLGxlKyspLG5lPDEyOD9KW21lKytdPW5lOm5lPDIwNDg/KEpbbWUrK109MTkyfG5lPj4+NixKW21lKytdPTEyOHw2MyZuZSk6bmU8NjU1MzY/KEpbbWUrK109''@;'; put 'put ''MjI0fG5lPj4+MTIsSlttZSsrXT0xMjh8bmU+Pj42JjYzLEpbbWUrK109MTI4fDYzJm5lKTooSlttZSsrXT0yNDB8bmU+Pj4xOCxKW21lKytdPTEyOHxuZT4+PjEyJjYzLEpbbWUrK109MTI4fG5lPj4+NiY2MyxKW21lKytdPTEyOHw2MyZuZSk7cmV0dXJuIEp9KEopfSxPLnV0ZjhkZWNvZGU9''@;'; put 'put ''ZnVuY3Rpb24oSil7aWYoTi5ub2RlYnVmZmVyKXJldHVybiB6LnRyYW5zZm9ybVRvKCJub2RlYnVmZmVyIixKKS50b1N0cmluZygidXRmLTgiKTtmb3IodmFyIG5lPVtdLGllPTAsbGU9KEo9ei50cmFuc2Zvcm1UbyhOLnVpbnQ4YXJyYXk/InVpbnQ4YXJyYXkiOiJhcnJheSIsSikpLmxlbmd0''@;'; put 'put ''aDtpZTxsZTspe3ZhciBfZT1ZKEosTWF0aC5taW4oaWUrNjU1MzYsbGUpKTtuZS5wdXNoKHEoTi51aW50OGFycmF5P0ouc3ViYXJyYXkoaWUsX2UpOkouc2xpY2UoaWUsX2UpKSksaWU9X2V9cmV0dXJuIG5lLmpvaW4oIiIpfX0seyIuL25vZGVCdWZmZXIiOjExLCIuL3N1cHBvcnQiOjE3LCIu''@;'; put 'put ''L3V0aWxzIjoyMX1dLDIxOltmdW5jdGlvbihQLEYsTyl7InVzZSBzdHJpY3QiO3ZhciB6PVAoIi4vc3VwcG9ydCIpLE49UCgiLi9jb21wcmVzc2lvbnMiKSxMPVAoIi4vbm9kZUJ1ZmZlciIpO2Z1bmN0aW9uIEsoZWUpe3JldHVybiBlZX1mdW5jdGlvbiBVKGVlLEope2Zvcih2YXIgbmU9MDtu''@;'; put 'put ''ZTxlZS5sZW5ndGg7KytuZSlKW25lXT0yNTUmZWUuY2hhckNvZGVBdChuZSk7cmV0dXJuIEp9ZnVuY3Rpb24gVyhlZSl7dmFyIEo9NjU1MzYsbmU9W10saWU9ZWUubGVuZ3RoLGxlPU8uZ2V0VHlwZU9mKGVlKSxtZT0wLF9lPSEwO3RyeXtzd2l0Y2gobGUpe2Nhc2UidWludDhhcnJheSI6U3Ry''@;'; put 'put ''aW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLG5ldyBVaW50OEFycmF5KDApKTticmVhaztjYXNlIm5vZGVidWZmZXIiOlN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxMKDApKX19Y2F0Y2h7X2U9ITF9aWYoIV9lKXtmb3IodmFyIFRlPSIiLFNlPTA7U2U8ZWUubGVuZ3RoO1NlKysp''@;'; put 'put ''VGUrPVN0cmluZy5mcm9tQ2hhckNvZGUoZWVbU2VdKTtyZXR1cm4gVGV9Zm9yKDttZTxpZSYmSj4xOyl0cnl7bmUucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsImFycmF5Ij09PWxlfHwibm9kZWJ1ZmZlciI9PT1sZT9lZS5zbGljZShtZSxNYXRoLm1pbihtZStKLGllKSk6''@;'; put 'put ''ZWUuc3ViYXJyYXkobWUsTWF0aC5taW4obWUrSixpZSkpKSksbWUrPUp9Y2F0Y2h7Sj1NYXRoLmZsb29yKEovMil9cmV0dXJuIG5lLmpvaW4oIiIpfWZ1bmN0aW9uIFkoZWUsSil7Zm9yKHZhciBuZT0wO25lPGVlLmxlbmd0aDtuZSsrKUpbbmVdPWVlW25lXTtyZXR1cm4gSn1PLnN0cmluZzJi''@;'; put 'put ''aW5hcnk9ZnVuY3Rpb24oZWUpe2Zvcih2YXIgSj0iIixuZT0wO25lPGVlLmxlbmd0aDtuZSsrKUorPVN0cmluZy5mcm9tQ2hhckNvZGUoMjU1JmVlLmNoYXJDb2RlQXQobmUpKTtyZXR1cm4gSn0sTy5hcnJheUJ1ZmZlcjJCbG9iPWZ1bmN0aW9uKGVlKXtPLmNoZWNrU3VwcG9ydCgiYmxvYiIp''@;'; put 'put ''O3RyeXtyZXR1cm4gbmV3IEJsb2IoW2VlXSx7dHlwZToiYXBwbGljYXRpb24vemlwIn0pfWNhdGNoe3RyeXt2YXIgbmU9bmV3KHdpbmRvdy5CbG9iQnVpbGRlcnx8d2luZG93LldlYktpdEJsb2JCdWlsZGVyfHx3aW5kb3cuTW96QmxvYkJ1aWxkZXJ8fHdpbmRvdy5NU0Jsb2JCdWlsZGVyKTty''@;'; put 'put ''ZXR1cm4gbmUuYXBwZW5kKGVlKSxuZS5nZXRCbG9iKCJhcHBsaWNhdGlvbi96aXAiKX1jYXRjaHt0aHJvdyBuZXcgRXJyb3IoIkJ1ZyA6IGNhbid0IGNvbnN0cnVjdCB0aGUgQmxvYi4iKX19fSxPLmFwcGx5RnJvbUNoYXJDb2RlPVc7dmFyIHE9e307cS5zdHJpbmc9e3N0cmluZzpLLGFycmF5''@;'; put 'put ''OmZ1bmN0aW9uKGVlKXtyZXR1cm4gVShlZSxuZXcgQXJyYXkoZWUubGVuZ3RoKSl9LGFycmF5YnVmZmVyOmZ1bmN0aW9uKGVlKXtyZXR1cm4gcS5zdHJpbmcudWludDhhcnJheShlZSkuYnVmZmVyfSx1aW50OGFycmF5OmZ1bmN0aW9uKGVlKXtyZXR1cm4gVShlZSxuZXcgVWludDhBcnJheShl''@;'; put 'put ''ZS5sZW5ndGgpKX0sbm9kZWJ1ZmZlcjpmdW5jdGlvbihlZSl7cmV0dXJuIFUoZWUsTChlZS5sZW5ndGgpKX19LHEuYXJyYXk9e3N0cmluZzpXLGFycmF5OkssYXJyYXlidWZmZXI6ZnVuY3Rpb24oZWUpe3JldHVybiBuZXcgVWludDhBcnJheShlZSkuYnVmZmVyfSx1aW50OGFycmF5OmZ1bmN0''@;'; put 'put ''aW9uKGVlKXtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoZWUpfSxub2RlYnVmZmVyOmZ1bmN0aW9uKGVlKXtyZXR1cm4gTChlZSl9fSxxLmFycmF5YnVmZmVyPXtzdHJpbmc6ZnVuY3Rpb24oZWUpe3JldHVybiBXKG5ldyBVaW50OEFycmF5KGVlKSl9LGFycmF5OmZ1bmN0aW9uKGVlKXtyZXR1cm4g''@;'; put 'put ''WShuZXcgVWludDhBcnJheShlZSksbmV3IEFycmF5KGVlLmJ5dGVMZW5ndGgpKX0sYXJyYXlidWZmZXI6Syx1aW50OGFycmF5OmZ1bmN0aW9uKGVlKXtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoZWUpfSxub2RlYnVmZmVyOmZ1bmN0aW9uKGVlKXtyZXR1cm4gTChuZXcgVWludDhBcnJheShlZSkp''@;'; put 'put ''fX0scS51aW50OGFycmF5PXtzdHJpbmc6VyxhcnJheTpmdW5jdGlvbihlZSl7cmV0dXJuIFkoZWUsbmV3IEFycmF5KGVlLmxlbmd0aCkpfSxhcnJheWJ1ZmZlcjpmdW5jdGlvbihlZSl7cmV0dXJuIGVlLmJ1ZmZlcn0sdWludDhhcnJheTpLLG5vZGVidWZmZXI6ZnVuY3Rpb24oZWUpe3JldHVy''@;'; put 'put ''biBMKGVlKX19LHEubm9kZWJ1ZmZlcj17c3RyaW5nOlcsYXJyYXk6ZnVuY3Rpb24oZWUpe3JldHVybiBZKGVlLG5ldyBBcnJheShlZS5sZW5ndGgpKX0sYXJyYXlidWZmZXI6ZnVuY3Rpb24oZWUpe3JldHVybiBxLm5vZGVidWZmZXIudWludDhhcnJheShlZSkuYnVmZmVyfSx1aW50OGFycmF5''@;'; put 'put ''OmZ1bmN0aW9uKGVlKXtyZXR1cm4gWShlZSxuZXcgVWludDhBcnJheShlZS5sZW5ndGgpKX0sbm9kZWJ1ZmZlcjpLfSxPLnRyYW5zZm9ybVRvPWZ1bmN0aW9uKGVlLEope2lmKEp8fChKPSIiKSwhZWUpcmV0dXJuIEo7Ty5jaGVja1N1cHBvcnQoZWUpO3ZhciBuZT1PLmdldFR5cGVPZihKKTty''@;'; put 'put ''ZXR1cm4gcVtuZV1bZWVdKEopfSxPLmdldFR5cGVPZj1mdW5jdGlvbihlZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlZT8ic3RyaW5nIjoiW29iamVjdCBBcnJheV0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGVlKT8iYXJyYXkiOnoubm9kZWJ1ZmZlciYmTC50ZXN0KGVl''@;'; put 'put ''KT8ibm9kZWJ1ZmZlciI6ei51aW50OGFycmF5JiZlZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXk/InVpbnQ4YXJyYXkiOnouYXJyYXlidWZmZXImJmVlIGluc3RhbmNlb2YgQXJyYXlCdWZmZXI/ImFycmF5YnVmZmVyIjp2b2lkIDB9LE8uY2hlY2tTdXBwb3J0PWZ1bmN0aW9uKGVlKXtpZigheltl''@;'; put 'put ''ZS50b0xvd2VyQ2FzZSgpXSl0aHJvdyBuZXcgRXJyb3IoZWUrIiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgYnJvd3NlciIpfSxPLk1BWF9WQUxVRV8xNkJJVFM9NjU1MzUsTy5NQVhfVkFMVUVfMzJCSVRTPS0xLE8ucHJldHR5PWZ1bmN0aW9uKGVlKXt2YXIgbmUsaWUsSj0iIjtmb3IoaWU9''@;'; put 'put ''MDtpZTwoZWV8fCIiKS5sZW5ndGg7aWUrKylKKz0iXFx4IisoKG5lPWVlLmNoYXJDb2RlQXQoaWUpKTwxNj8iMCI6IiIpK25lLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO3JldHVybiBKfSxPLmZpbmRDb21wcmVzc2lvbj1mdW5jdGlvbihlZSl7Zm9yKHZhciBKIGluIE4paWYoTi5oYXNP''@;'; put 'put ''d25Qcm9wZXJ0eShKKSYmTltKXS5tYWdpYz09PWVlKXJldHVybiBOW0pdO3JldHVybiBudWxsfSxPLmlzUmVnRXhwPWZ1bmN0aW9uKGVlKXtyZXR1cm4iW29iamVjdCBSZWdFeHBdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlZSl9fSx7Ii4vY29tcHJlc3Npb25zIjozLCIu''@;'; put 'put ''L25vZGVCdWZmZXIiOjExLCIuL3N1cHBvcnQiOjE3fV0sMjI6W2Z1bmN0aW9uKFAsRixPKXsidXNlIHN0cmljdCI7dmFyIHo9UCgiLi9zdHJpbmdSZWFkZXIiKSxOPVAoIi4vbm9kZUJ1ZmZlclJlYWRlciIpLEw9UCgiLi91aW50OEFycmF5UmVhZGVyIiksSz1QKCIuL3V0aWxzIiksVT1QKCIu''@;'; put 'put ''L3NpZ25hdHVyZSIpLFc9UCgiLi96aXBFbnRyeSIpLFk9UCgiLi9zdXBwb3J0IikscT1QKCIuL29iamVjdCIpO2Z1bmN0aW9uIGVlKEosbmUpe3RoaXMuZmlsZXM9W10sdGhpcy5sb2FkT3B0aW9ucz1uZSxKJiZ0aGlzLmxvYWQoSil9ZWUucHJvdG90eXBlPXtjaGVja1NpZ25hdHVyZTpmdW5j''@;'; put 'put ''dGlvbihKKXt2YXIgbmU9dGhpcy5yZWFkZXIucmVhZFN0cmluZyg0KTtpZihuZSE9PUopdGhyb3cgbmV3IEVycm9yKCJDb3JydXB0ZWQgemlwIG9yIGJ1ZyA6IHVuZXhwZWN0ZWQgc2lnbmF0dXJlICgiK0sucHJldHR5KG5lKSsiLCBleHBlY3RlZCAiK0sucHJldHR5KEopKyIpIil9LHJlYWRC''@;'; put 'put ''bG9ja0VuZE9mQ2VudHJhbDpmdW5jdGlvbigpe3RoaXMuZGlza051bWJlcj10aGlzLnJlYWRlci5yZWFkSW50KDIpLHRoaXMuZGlza1dpdGhDZW50cmFsRGlyU3RhcnQ9dGhpcy5yZWFkZXIucmVhZEludCgyKSx0aGlzLmNlbnRyYWxEaXJSZWNvcmRzT25UaGlzRGlzaz10aGlzLnJlYWRlci5y''@;'; put 'put ''ZWFkSW50KDIpLHRoaXMuY2VudHJhbERpclJlY29yZHM9dGhpcy5yZWFkZXIucmVhZEludCgyKSx0aGlzLmNlbnRyYWxEaXJTaXplPXRoaXMucmVhZGVyLnJlYWRJbnQoNCksdGhpcy5jZW50cmFsRGlyT2Zmc2V0PXRoaXMucmVhZGVyLnJlYWRJbnQoNCksdGhpcy56aXBDb21tZW50TGVuZ3Ro''@;'; put 'put ''PXRoaXMucmVhZGVyLnJlYWRJbnQoMiksdGhpcy56aXBDb21tZW50PXRoaXMucmVhZGVyLnJlYWRTdHJpbmcodGhpcy56aXBDb21tZW50TGVuZ3RoKSx0aGlzLnppcENvbW1lbnQ9cS51dGY4ZGVjb2RlKHRoaXMuemlwQ29tbWVudCl9LHJlYWRCbG9ja1ppcDY0RW5kT2ZDZW50cmFsOmZ1bmN0''@;'; put 'put ''aW9uKCl7dGhpcy56aXA2NEVuZE9mQ2VudHJhbFNpemU9dGhpcy5yZWFkZXIucmVhZEludCg4KSx0aGlzLnZlcnNpb25NYWRlQnk9dGhpcy5yZWFkZXIucmVhZFN0cmluZygyKSx0aGlzLnZlcnNpb25OZWVkZWQ9dGhpcy5yZWFkZXIucmVhZEludCgyKSx0aGlzLmRpc2tOdW1iZXI9dGhpcy5y''@;'; put 'put ''ZWFkZXIucmVhZEludCg0KSx0aGlzLmRpc2tXaXRoQ2VudHJhbERpclN0YXJ0PXRoaXMucmVhZGVyLnJlYWRJbnQoNCksdGhpcy5jZW50cmFsRGlyUmVjb3Jkc09uVGhpc0Rpc2s9dGhpcy5yZWFkZXIucmVhZEludCg4KSx0aGlzLmNlbnRyYWxEaXJSZWNvcmRzPXRoaXMucmVhZGVyLnJlYWRJ''@;'; put 'put ''bnQoOCksdGhpcy5jZW50cmFsRGlyU2l6ZT10aGlzLnJlYWRlci5yZWFkSW50KDgpLHRoaXMuY2VudHJhbERpck9mZnNldD10aGlzLnJlYWRlci5yZWFkSW50KDgpLHRoaXMuemlwNjRFeHRlbnNpYmxlRGF0YT17fTtmb3IodmFyIGllLGxlLG1lLEo9dGhpcy56aXA2NEVuZE9mQ2VudHJhbFNp''@;'; put 'put ''emUtNDQ7MDxKOylpZT10aGlzLnJlYWRlci5yZWFkSW50KDIpLGxlPXRoaXMucmVhZGVyLnJlYWRJbnQoNCksbWU9dGhpcy5yZWFkZXIucmVhZFN0cmluZyhsZSksdGhpcy56aXA2NEV4dGVuc2libGVEYXRhW2llXT17aWQ6aWUsbGVuZ3RoOmxlLHZhbHVlOm1lfX0scmVhZEJsb2NrWmlwNjRF''@;'; put 'put ''bmRPZkNlbnRyYWxMb2NhdG9yOmZ1bmN0aW9uKCl7aWYodGhpcy5kaXNrV2l0aFppcDY0Q2VudHJhbERpclN0YXJ0PXRoaXMucmVhZGVyLnJlYWRJbnQoNCksdGhpcy5yZWxhdGl2ZU9mZnNldEVuZE9mWmlwNjRDZW50cmFsRGlyPXRoaXMucmVhZGVyLnJlYWRJbnQoOCksdGhpcy5kaXNrc0Nv''@;'; put 'put ''dW50PXRoaXMucmVhZGVyLnJlYWRJbnQoNCksdGhpcy5kaXNrc0NvdW50PjEpdGhyb3cgbmV3IEVycm9yKCJNdWx0aS12b2x1bWVzIHppcCBhcmUgbm90IHN1cHBvcnRlZCIpfSxyZWFkTG9jYWxGaWxlczpmdW5jdGlvbigpe3ZhciBKLG5lO2ZvcihKPTA7Sjx0aGlzLmZpbGVzLmxlbmd0aDtK''@;'; put 'put ''KyspdGhpcy5yZWFkZXIuc2V0SW5kZXgoKG5lPXRoaXMuZmlsZXNbSl0pLmxvY2FsSGVhZGVyT2Zmc2V0KSx0aGlzLmNoZWNrU2lnbmF0dXJlKFUuTE9DQUxfRklMRV9IRUFERVIpLG5lLnJlYWRMb2NhbFBhcnQodGhpcy5yZWFkZXIpLG5lLmhhbmRsZVVURjgoKX0scmVhZENlbnRyYWxEaXI6''@;'; put 'put ''ZnVuY3Rpb24oKXt2YXIgSjtmb3IodGhpcy5yZWFkZXIuc2V0SW5kZXgodGhpcy5jZW50cmFsRGlyT2Zmc2V0KTt0aGlzLnJlYWRlci5yZWFkU3RyaW5nKDQpPT09VS5DRU5UUkFMX0ZJTEVfSEVBREVSOykoSj1uZXcgVyh7emlwNjQ6dGhpcy56aXA2NH0sdGhpcy5sb2FkT3B0aW9ucykpLnJl''@;'; put 'put ''YWRDZW50cmFsUGFydCh0aGlzLnJlYWRlciksdGhpcy5maWxlcy5wdXNoKEopfSxyZWFkRW5kT2ZDZW50cmFsOmZ1bmN0aW9uKCl7dmFyIEo9dGhpcy5yZWFkZXIubGFzdEluZGV4T2ZTaWduYXR1cmUoVS5DRU5UUkFMX0RJUkVDVE9SWV9FTkQpO2lmKC0xPT09Sil0aHJvdyBuZXcgRXJyb3Io''@;'; put 'put ''IkNvcnJ1cHRlZCB6aXAgOiBjYW4ndCBmaW5kIGVuZCBvZiBjZW50cmFsIGRpcmVjdG9yeSIpO2lmKHRoaXMucmVhZGVyLnNldEluZGV4KEopLHRoaXMuY2hlY2tTaWduYXR1cmUoVS5DRU5UUkFMX0RJUkVDVE9SWV9FTkQpLHRoaXMucmVhZEJsb2NrRW5kT2ZDZW50cmFsKCksdGhpcy5kaXNr''@;'; put 'put ''TnVtYmVyPT09Sy5NQVhfVkFMVUVfMTZCSVRTfHx0aGlzLmRpc2tXaXRoQ2VudHJhbERpclN0YXJ0PT09Sy5NQVhfVkFMVUVfMTZCSVRTfHx0aGlzLmNlbnRyYWxEaXJSZWNvcmRzT25UaGlzRGlzaz09PUsuTUFYX1ZBTFVFXzE2QklUU3x8dGhpcy5jZW50cmFsRGlyUmVjb3Jkcz09PUsuTUFY''@;'; put 'put ''X1ZBTFVFXzE2QklUU3x8dGhpcy5jZW50cmFsRGlyU2l6ZT09PUsuTUFYX1ZBTFVFXzMyQklUU3x8dGhpcy5jZW50cmFsRGlyT2Zmc2V0PT09Sy5NQVhfVkFMVUVfMzJCSVRTKXtpZih0aGlzLnppcDY0PSEwLC0xPT09KEo9dGhpcy5yZWFkZXIubGFzdEluZGV4T2ZTaWduYXR1cmUoVS5aSVA2''@;'; put 'put ''NF9DRU5UUkFMX0RJUkVDVE9SWV9MT0NBVE9SKSkpdGhyb3cgbmV3IEVycm9yKCJDb3JydXB0ZWQgemlwIDogY2FuJ3QgZmluZCB0aGUgWklQNjQgZW5kIG9mIGNlbnRyYWwgZGlyZWN0b3J5IGxvY2F0b3IiKTt0aGlzLnJlYWRlci5zZXRJbmRleChKKSx0aGlzLmNoZWNrU2lnbmF0dXJlKFUu''@;'; put 'put ''WklQNjRfQ0VOVFJBTF9ESVJFQ1RPUllfTE9DQVRPUiksdGhpcy5yZWFkQmxvY2taaXA2NEVuZE9mQ2VudHJhbExvY2F0b3IoKSx0aGlzLnJlYWRlci5zZXRJbmRleCh0aGlzLnJlbGF0aXZlT2Zmc2V0RW5kT2ZaaXA2NENlbnRyYWxEaXIpLHRoaXMuY2hlY2tTaWduYXR1cmUoVS5aSVA2NF9D''@;'; put 'put ''RU5UUkFMX0RJUkVDVE9SWV9FTkQpLHRoaXMucmVhZEJsb2NrWmlwNjRFbmRPZkNlbnRyYWwoKX19LHByZXBhcmVSZWFkZXI6ZnVuY3Rpb24oSil7dmFyIG5lPUsuZ2V0VHlwZU9mKEopO3RoaXMucmVhZGVyPSJzdHJpbmciIT09bmV8fFkudWludDhhcnJheT8ibm9kZWJ1ZmZlciI9PT1uZT9u''@;'; put 'put ''ZXcgTihKKTpuZXcgTChLLnRyYW5zZm9ybVRvKCJ1aW50OGFycmF5IixKKSk6bmV3IHooSix0aGlzLmxvYWRPcHRpb25zLm9wdGltaXplZEJpbmFyeVN0cmluZyl9LGxvYWQ6ZnVuY3Rpb24oSil7dGhpcy5wcmVwYXJlUmVhZGVyKEopLHRoaXMucmVhZEVuZE9mQ2VudHJhbCgpLHRoaXMucmVh''@;'; put 'put ''ZENlbnRyYWxEaXIoKSx0aGlzLnJlYWRMb2NhbEZpbGVzKCl9fSxGLmV4cG9ydHM9ZWV9LHsiLi9ub2RlQnVmZmVyUmVhZGVyIjoxMiwiLi9vYmplY3QiOjEzLCIuL3NpZ25hdHVyZSI6MTQsIi4vc3RyaW5nUmVhZGVyIjoxNSwiLi9zdXBwb3J0IjoxNywiLi91aW50OEFycmF5UmVhZGVyIjox''@;'; put 'put ''OCwiLi91dGlscyI6MjEsIi4vemlwRW50cnkiOjIzfV0sMjM6W2Z1bmN0aW9uKFAsRixPKXsidXNlIHN0cmljdCI7dmFyIHo9UCgiLi9zdHJpbmdSZWFkZXIiKSxOPVAoIi4vdXRpbHMiKSxMPVAoIi4vY29tcHJlc3NlZE9iamVjdCIpLEs9UCgiLi9vYmplY3QiKTtmdW5jdGlvbiBVKFcsWSl7''@;'; put 'put ''dGhpcy5vcHRpb25zPVcsdGhpcy5sb2FkT3B0aW9ucz1ZfVUucHJvdG90eXBlPXtpc0VuY3J5cHRlZDpmdW5jdGlvbigpe3JldHVybiEoMSZ+dGhpcy5iaXRGbGFnKX0sdXNlVVRGODpmdW5jdGlvbigpe3JldHVybiEoMjA0OCZ+dGhpcy5iaXRGbGFnKX0scHJlcGFyZUNvbXByZXNzZWRDb250''@;'; put 'put ''ZW50OmZ1bmN0aW9uKFcsWSxxKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZWU9Vy5pbmRleDtXLnNldEluZGV4KFkpO3ZhciBKPVcucmVhZERhdGEocSk7cmV0dXJuIFcuc2V0SW5kZXgoZWUpLEp9fSxwcmVwYXJlQ29udGVudDpmdW5jdGlvbihXLFkscSxlZSxKKXtyZXR1cm4gZnVuY3Rpb24o''@;'; put 'put ''KXt2YXIgbmU9Ti50cmFuc2Zvcm1UbyhlZS51bmNvbXByZXNzSW5wdXRUeXBlLHRoaXMuZ2V0Q29tcHJlc3NlZENvbnRlbnQoKSksaWU9ZWUudW5jb21wcmVzcyhuZSk7aWYoaWUubGVuZ3RoIT09Sil0aHJvdyBuZXcgRXJyb3IoIkJ1ZyA6IHVuY29tcHJlc3NlZCBkYXRhIHNpemUgbWlzbWF0''@;'; put 'put ''Y2giKTtyZXR1cm4gaWV9fSxyZWFkTG9jYWxQYXJ0OmZ1bmN0aW9uKFcpe3ZhciBZLHE7aWYoVy5za2lwKDIyKSx0aGlzLmZpbGVOYW1lTGVuZ3RoPVcucmVhZEludCgyKSxxPVcucmVhZEludCgyKSx0aGlzLmZpbGVOYW1lPVcucmVhZFN0cmluZyh0aGlzLmZpbGVOYW1lTGVuZ3RoKSxXLnNr''@;'; put 'put ''aXAocSksLTE9PXRoaXMuY29tcHJlc3NlZFNpemV8fC0xPT10aGlzLnVuY29tcHJlc3NlZFNpemUpdGhyb3cgbmV3IEVycm9yKCJCdWcgb3IgY29ycnVwdGVkIHppcCA6IGRpZG4ndCBnZXQgZW5vdWdoIGluZm9ybWF0aW9ucyBmcm9tIHRoZSBjZW50cmFsIGRpcmVjdG9yeSAoY29tcHJlc3Nl''@;'; put 'put ''ZFNpemUgPT0gLTEgfHwgdW5jb21wcmVzc2VkU2l6ZSA9PSAtMSkiKTtpZihudWxsPT09KFk9Ti5maW5kQ29tcHJlc3Npb24odGhpcy5jb21wcmVzc2lvbk1ldGhvZCkpKXRocm93IG5ldyBFcnJvcigiQ29ycnVwdGVkIHppcCA6IGNvbXByZXNzaW9uICIrTi5wcmV0dHkodGhpcy5jb21wcmVz''@;'; put 'put ''c2lvbk1ldGhvZCkrIiB1bmtub3duIChpbm5lciBmaWxlIDogIit0aGlzLmZpbGVOYW1lKyIpIik7aWYodGhpcy5kZWNvbXByZXNzZWQ9bmV3IEwsdGhpcy5kZWNvbXByZXNzZWQuY29tcHJlc3NlZFNpemU9dGhpcy5jb21wcmVzc2VkU2l6ZSx0aGlzLmRlY29tcHJlc3NlZC51bmNvbXByZXNz''@;'; put 'put ''ZWRTaXplPXRoaXMudW5jb21wcmVzc2VkU2l6ZSx0aGlzLmRlY29tcHJlc3NlZC5jcmMzMj10aGlzLmNyYzMyLHRoaXMuZGVjb21wcmVzc2VkLmNvbXByZXNzaW9uTWV0aG9kPXRoaXMuY29tcHJlc3Npb25NZXRob2QsdGhpcy5kZWNvbXByZXNzZWQuZ2V0Q29tcHJlc3NlZENvbnRlbnQ9dGhp''@;'; put 'put ''cy5wcmVwYXJlQ29tcHJlc3NlZENvbnRlbnQoVyxXLmluZGV4LHRoaXMuY29tcHJlc3NlZFNpemUsWSksdGhpcy5kZWNvbXByZXNzZWQuZ2V0Q29udGVudD10aGlzLnByZXBhcmVDb250ZW50KFcsVy5pbmRleCx0aGlzLmNvbXByZXNzZWRTaXplLFksdGhpcy51bmNvbXByZXNzZWRTaXplKSx0''@;'; put 'put ''aGlzLmxvYWRPcHRpb25zLmNoZWNrQ1JDMzImJih0aGlzLmRlY29tcHJlc3NlZD1OLnRyYW5zZm9ybVRvKCJzdHJpbmciLHRoaXMuZGVjb21wcmVzc2VkLmdldENvbnRlbnQoKSksSy5jcmMzMih0aGlzLmRlY29tcHJlc3NlZCkhPT10aGlzLmNyYzMyKSl0aHJvdyBuZXcgRXJyb3IoIkNvcnJ1''@;'; put 'put ''cHRlZCB6aXAgOiBDUkMzMiBtaXNtYXRjaCIpfSxyZWFkQ2VudHJhbFBhcnQ6ZnVuY3Rpb24oVyl7aWYodGhpcy52ZXJzaW9uTWFkZUJ5PVcucmVhZFN0cmluZygyKSx0aGlzLnZlcnNpb25OZWVkZWQ9Vy5yZWFkSW50KDIpLHRoaXMuYml0RmxhZz1XLnJlYWRJbnQoMiksdGhpcy5jb21wcmVz''@;'; put 'put ''c2lvbk1ldGhvZD1XLnJlYWRTdHJpbmcoMiksdGhpcy5kYXRlPVcucmVhZERhdGUoKSx0aGlzLmNyYzMyPVcucmVhZEludCg0KSx0aGlzLmNvbXByZXNzZWRTaXplPVcucmVhZEludCg0KSx0aGlzLnVuY29tcHJlc3NlZFNpemU9Vy5yZWFkSW50KDQpLHRoaXMuZmlsZU5hbWVMZW5ndGg9Vy5y''@;'; put 'put ''ZWFkSW50KDIpLHRoaXMuZXh0cmFGaWVsZHNMZW5ndGg9Vy5yZWFkSW50KDIpLHRoaXMuZmlsZUNvbW1lbnRMZW5ndGg9Vy5yZWFkSW50KDIpLHRoaXMuZGlza051bWJlclN0YXJ0PVcucmVhZEludCgyKSx0aGlzLmludGVybmFsRmlsZUF0dHJpYnV0ZXM9Vy5yZWFkSW50KDIpLHRoaXMuZXh0''@;'; put 'put ''ZXJuYWxGaWxlQXR0cmlidXRlcz1XLnJlYWRJbnQoNCksdGhpcy5sb2NhbEhlYWRlck9mZnNldD1XLnJlYWRJbnQoNCksdGhpcy5pc0VuY3J5cHRlZCgpKXRocm93IG5ldyBFcnJvcigiRW5jcnlwdGVkIHppcCBhcmUgbm90IHN1cHBvcnRlZCIpO3RoaXMuZmlsZU5hbWU9Vy5yZWFkU3RyaW5n''@;'; put 'put ''KHRoaXMuZmlsZU5hbWVMZW5ndGgpLHRoaXMucmVhZEV4dHJhRmllbGRzKFcpLHRoaXMucGFyc2VaSVA2NEV4dHJhRmllbGQoVyksdGhpcy5maWxlQ29tbWVudD1XLnJlYWRTdHJpbmcodGhpcy5maWxlQ29tbWVudExlbmd0aCksdGhpcy5kaXI9ISEoMTYmdGhpcy5leHRlcm5hbEZpbGVBdHRy''@;'; put 'put ''aWJ1dGVzKX0scGFyc2VaSVA2NEV4dHJhRmllbGQ6ZnVuY3Rpb24oVyl7aWYodGhpcy5leHRyYUZpZWxkc1sxXSl7dmFyIFk9bmV3IHoodGhpcy5leHRyYUZpZWxkc1sxXS52YWx1ZSk7dGhpcy51bmNvbXByZXNzZWRTaXplPT09Ti5NQVhfVkFMVUVfMzJCSVRTJiYodGhpcy51bmNvbXByZXNz''@;'; put 'put ''ZWRTaXplPVkucmVhZEludCg4KSksdGhpcy5jb21wcmVzc2VkU2l6ZT09PU4uTUFYX1ZBTFVFXzMyQklUUyYmKHRoaXMuY29tcHJlc3NlZFNpemU9WS5yZWFkSW50KDgpKSx0aGlzLmxvY2FsSGVhZGVyT2Zmc2V0PT09Ti5NQVhfVkFMVUVfMzJCSVRTJiYodGhpcy5sb2NhbEhlYWRlck9mZnNl''@;'; put 'put ''dD1ZLnJlYWRJbnQoOCkpLHRoaXMuZGlza051bWJlclN0YXJ0PT09Ti5NQVhfVkFMVUVfMzJCSVRTJiYodGhpcy5kaXNrTnVtYmVyU3RhcnQ9WS5yZWFkSW50KDQpKX19LHJlYWRFeHRyYUZpZWxkczpmdW5jdGlvbihXKXt2YXIgcSxlZSxKLFk9Vy5pbmRleDtmb3IodGhpcy5leHRyYUZpZWxk''@;'; put 'put ''cz10aGlzLmV4dHJhRmllbGRzfHx7fTtXLmluZGV4PFkrdGhpcy5leHRyYUZpZWxkc0xlbmd0aDspcT1XLnJlYWRJbnQoMiksZWU9Vy5yZWFkSW50KDIpLEo9Vy5yZWFkU3RyaW5nKGVlKSx0aGlzLmV4dHJhRmllbGRzW3FdPXtpZDpxLGxlbmd0aDplZSx2YWx1ZTpKfX0saGFuZGxlVVRGODpm''@;'; put 'put ''dW5jdGlvbigpe2lmKHRoaXMudXNlVVRGOCgpKXRoaXMuZmlsZU5hbWU9Sy51dGY4ZGVjb2RlKHRoaXMuZmlsZU5hbWUpLHRoaXMuZmlsZUNvbW1lbnQ9Sy51dGY4ZGVjb2RlKHRoaXMuZmlsZUNvbW1lbnQpO2Vsc2V7dmFyIFc9dGhpcy5maW5kRXh0cmFGaWVsZFVuaWNvZGVQYXRoKCk7bnVs''@;'; put 'put ''bCE9PVcmJih0aGlzLmZpbGVOYW1lPVcpO3ZhciBZPXRoaXMuZmluZEV4dHJhRmllbGRVbmljb2RlQ29tbWVudCgpO251bGwhPT1ZJiYodGhpcy5maWxlQ29tbWVudD1ZKX19LGZpbmRFeHRyYUZpZWxkVW5pY29kZVBhdGg6ZnVuY3Rpb24oKXt2YXIgVz10aGlzLmV4dHJhRmllbGRzWzI4Nzg5''@;'; put 'put ''XTtpZihXKXt2YXIgWT1uZXcgeihXLnZhbHVlKTtyZXR1cm4gMSE9PVkucmVhZEludCgxKXx8Sy5jcmMzMih0aGlzLmZpbGVOYW1lKSE9PVkucmVhZEludCg0KT9udWxsOksudXRmOGRlY29kZShZLnJlYWRTdHJpbmcoVy5sZW5ndGgtNSkpfXJldHVybiBudWxsfSxmaW5kRXh0cmFGaWVsZFVu''@;'; put 'put ''aWNvZGVDb21tZW50OmZ1bmN0aW9uKCl7dmFyIFc9dGhpcy5leHRyYUZpZWxkc1syNTQ2MV07aWYoVyl7dmFyIFk9bmV3IHooVy52YWx1ZSk7cmV0dXJuIDEhPT1ZLnJlYWRJbnQoMSl8fEsuY3JjMzIodGhpcy5maWxlQ29tbWVudCkhPT1ZLnJlYWRJbnQoNCk/bnVsbDpLLnV0ZjhkZWNvZGUo''@;'; put 'put ''WS5yZWFkU3RyaW5nKFcubGVuZ3RoLTUpKX1yZXR1cm4gbnVsbH19LEYuZXhwb3J0cz1VfSx7Ii4vY29tcHJlc3NlZE9iamVjdCI6MiwiLi9vYmplY3QiOjEzLCIuL3N0cmluZ1JlYWRlciI6MTUsIi4vdXRpbHMiOjIxfV0sMjQ6W2Z1bmN0aW9uKFAsRixPKXsidXNlIHN0cmljdCI7dmFyIFU9''@;'; put 'put ''e307KDAsUCgiLi9saWIvdXRpbHMvY29tbW9uIikuYXNzaWduKShVLFAoIi4vbGliL2RlZmxhdGUiKSxQKCIuL2xpYi9pbmZsYXRlIiksUCgiLi9saWIvemxpYi9jb25zdGFudHMiKSksRi5leHBvcnRzPVV9LHsiLi9saWIvZGVmbGF0ZSI6MjUsIi4vbGliL2luZmxhdGUiOjI2LCIuL2xpYi91''@;'; put 'put ''dGlscy9jb21tb24iOjI3LCIuL2xpYi96bGliL2NvbnN0YW50cyI6MzB9XSwyNTpbZnVuY3Rpb24oUCxGLE8peyJ1c2Ugc3RyaWN0Ijt2YXIgej1QKCIuL3psaWIvZGVmbGF0ZS5qcyIpLE49UCgiLi91dGlscy9jb21tb24iKSxMPVAoIi4vdXRpbHMvc3RyaW5ncyIpLEs9UCgiLi96bGliL21l''@;'; put 'put ''c3NhZ2VzIiksVT1QKCIuL3psaWIvenN0cmVhbSIpLGxlPWZ1bmN0aW9uKFNlKXt0aGlzLm9wdGlvbnM9Ti5hc3NpZ24oe2xldmVsOi0xLG1ldGhvZDo4LGNodW5rU2l6ZToxNjM4NCx3aW5kb3dCaXRzOjE1LG1lbUxldmVsOjgsc3RyYXRlZ3k6MCx0bzoiIn0sU2V8fHt9KTt2YXIgamU9dGhp''@;'; put 'put ''cy5vcHRpb25zO2plLnJhdyYmamUud2luZG93Qml0cz4wP2plLndpbmRvd0JpdHM9LWplLndpbmRvd0JpdHM6amUuZ3ppcCYmamUud2luZG93Qml0cz4wJiZqZS53aW5kb3dCaXRzPDE2JiYoamUud2luZG93Qml0cys9MTYpLHRoaXMuZXJyPTAsdGhpcy5tc2c9IiIsdGhpcy5lbmRlZD0hMSx0''@;'; put 'put ''aGlzLmNodW5rcz1bXSx0aGlzLnN0cm09bmV3IFUsdGhpcy5zdHJtLmF2YWlsX291dD0wO3ZhciBWPXouZGVmbGF0ZUluaXQyKHRoaXMuc3RybSxqZS5sZXZlbCxqZS5tZXRob2QsamUud2luZG93Qml0cyxqZS5tZW1MZXZlbCxqZS5zdHJhdGVneSk7aWYoMCE9PVYpdGhyb3cgbmV3IEVycm9y''@;'; put 'put ''KEtbVl0pO2plLmhlYWRlciYmei5kZWZsYXRlU2V0SGVhZGVyKHRoaXMuc3RybSxqZS5oZWFkZXIpfTtmdW5jdGlvbiBtZShTZSxqZSl7dmFyIFY9bmV3IGxlKGplKTtpZihWLnB1c2goU2UsITApLFYuZXJyKXRocm93IFYubXNnO3JldHVybiBWLnJlc3VsdH1sZS5wcm90b3R5cGUucHVzaD1m''@;'; put 'put ''dW5jdGlvbihTZSxqZSl7dmFyIGIseCxWPXRoaXMuc3RybSxwPXRoaXMub3B0aW9ucy5jaHVua1NpemU7aWYodGhpcy5lbmRlZClyZXR1cm4hMTt4PWplPT09fn5qZT9qZTohMD09PWplPzQ6MCxWLmlucHV0PSJzdHJpbmciPT10eXBlb2YgU2U/TC5zdHJpbmcyYnVmKFNlKTpTZSxWLm5leHRf''@;'; put 'put ''aW49MCxWLmF2YWlsX2luPVYuaW5wdXQubGVuZ3RoO2Rve2lmKDA9PT1WLmF2YWlsX291dCYmKFYub3V0cHV0PW5ldyBOLkJ1ZjgocCksVi5uZXh0X291dD0wLFYuYXZhaWxfb3V0PXApLDEhPT0oYj16LmRlZmxhdGUoVix4KSkmJjAhPT1iKXJldHVybiB0aGlzLm9uRW5kKGIpLHRoaXMuZW5k''@;'; put 'put ''ZWQ9ITAsITE7KDA9PT1WLmF2YWlsX291dHx8MD09PVYuYXZhaWxfaW4mJjQ9PT14KSYmdGhpcy5vbkRhdGEoInN0cmluZyI9PT10aGlzLm9wdGlvbnMudG8/TC5idWYyYmluc3RyaW5nKE4uc2hyaW5rQnVmKFYub3V0cHV0LFYubmV4dF9vdXQpKTpOLnNocmlua0J1ZihWLm91dHB1dCxWLm5l''@;'; put 'put ''eHRfb3V0KSl9d2hpbGUoKFYuYXZhaWxfaW4+MHx8MD09PVYuYXZhaWxfb3V0KSYmMSE9PWIpO3JldHVybiA0IT09eHx8KGI9ei5kZWZsYXRlRW5kKHRoaXMuc3RybSksdGhpcy5vbkVuZChiKSx0aGlzLmVuZGVkPSEwLDA9PT1iKX0sbGUucHJvdG90eXBlLm9uRGF0YT1mdW5jdGlvbihTZSl7''@;'; put 'put ''dGhpcy5jaHVua3MucHVzaChTZSl9LGxlLnByb3RvdHlwZS5vbkVuZD1mdW5jdGlvbihTZSl7MD09PVNlJiYodGhpcy5yZXN1bHQ9InN0cmluZyI9PT10aGlzLm9wdGlvbnMudG8/dGhpcy5jaHVua3Muam9pbigiIik6Ti5mbGF0dGVuQ2h1bmtzKHRoaXMuY2h1bmtzKSksdGhpcy5jaHVua3M9''@;'; put 'put ''W10sdGhpcy5lcnI9U2UsdGhpcy5tc2c9dGhpcy5zdHJtLm1zZ30sTy5EZWZsYXRlPWxlLE8uZGVmbGF0ZT1tZSxPLmRlZmxhdGVSYXc9ZnVuY3Rpb24gX2UoU2UsamUpe3JldHVybihqZT1qZXx8e30pLnJhdz0hMCxtZShTZSxqZSl9LE8uZ3ppcD1mdW5jdGlvbiBUZShTZSxqZSl7cmV0dXJu''@;'; put 'put ''KGplPWplfHx7fSkuZ3ppcD0hMCxtZShTZSxqZSl9fSx7Ii4vdXRpbHMvY29tbW9uIjoyNywiLi91dGlscy9zdHJpbmdzIjoyOCwiLi96bGliL2RlZmxhdGUuanMiOjMyLCIuL3psaWIvbWVzc2FnZXMiOjM3LCIuL3psaWIvenN0cmVhbSI6Mzl9XSwyNjpbZnVuY3Rpb24oUCxGLE8peyJ1c2Ug''@;'; put 'put ''c3RyaWN0Ijt2YXIgej1QKCIuL3psaWIvaW5mbGF0ZS5qcyIpLE49UCgiLi91dGlscy9jb21tb24iKSxMPVAoIi4vdXRpbHMvc3RyaW5ncyIpLEs9UCgiLi96bGliL2NvbnN0YW50cyIpLFU9UCgiLi96bGliL21lc3NhZ2VzIiksVz1QKCIuL3psaWIvenN0cmVhbSIpLFk9UCgiLi96bGliL2d6''@;'; put 'put ''aGVhZGVyIikscT1mdW5jdGlvbihuZSl7dGhpcy5vcHRpb25zPU4uYXNzaWduKHtjaHVua1NpemU6MTYzODQsd2luZG93Qml0czowLHRvOiIifSxuZXx8e30pO3ZhciBpZT10aGlzLm9wdGlvbnM7aWUucmF3JiZpZS53aW5kb3dCaXRzPj0wJiZpZS53aW5kb3dCaXRzPDE2JiYoaWUud2luZG93''@;'; put 'put ''Qml0cz0taWUud2luZG93Qml0cywwPT09aWUud2luZG93Qml0cyYmKGllLndpbmRvd0JpdHM9LTE1KSksaWUud2luZG93Qml0cz49MCYmaWUud2luZG93Qml0czwxNiYmIShuZSYmbmUud2luZG93Qml0cykmJihpZS53aW5kb3dCaXRzKz0zMiksaWUud2luZG93Qml0cz4xNSYmaWUud2luZG93''@;'; put 'put ''Qml0czw0OCYmKDE1JmllLndpbmRvd0JpdHN8fChpZS53aW5kb3dCaXRzfD0xNSkpLHRoaXMuZXJyPTAsdGhpcy5tc2c9IiIsdGhpcy5lbmRlZD0hMSx0aGlzLmNodW5rcz1bXSx0aGlzLnN0cm09bmV3IFcsdGhpcy5zdHJtLmF2YWlsX291dD0wO3ZhciBsZT16LmluZmxhdGVJbml0Mih0aGlz''@;'; put 'put ''LnN0cm0saWUud2luZG93Qml0cyk7aWYobGUhPT1LLlpfT0spdGhyb3cgbmV3IEVycm9yKFVbbGVdKTt0aGlzLmhlYWRlcj1uZXcgWSx6LmluZmxhdGVHZXRIZWFkZXIodGhpcy5zdHJtLHRoaXMuaGVhZGVyKX07ZnVuY3Rpb24gZWUobmUsaWUpe3ZhciBsZT1uZXcgcShpZSk7aWYobGUucHVz''@;'; put 'put ''aChuZSwhMCksbGUuZXJyKXRocm93IGxlLm1zZztyZXR1cm4gbGUucmVzdWx0fXEucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24obmUsaWUpe3ZhciBfZSxUZSxTZSxqZSxWLGxlPXRoaXMuc3RybSxtZT10aGlzLm9wdGlvbnMuY2h1bmtTaXplO2lmKHRoaXMuZW5kZWQpcmV0dXJuITE7VGU9aWU9''@;'; put 'put ''PT1+fmllP2llOiEwPT09aWU/Sy5aX0ZJTklTSDpLLlpfTk9fRkxVU0gsbGUuaW5wdXQ9InN0cmluZyI9PXR5cGVvZiBuZT9MLmJpbnN0cmluZzJidWYobmUpOm5lLGxlLm5leHRfaW49MCxsZS5hdmFpbF9pbj1sZS5pbnB1dC5sZW5ndGg7ZG97aWYoMD09PWxlLmF2YWlsX291dCYmKGxlLm91''@;'; put 'put ''dHB1dD1uZXcgTi5CdWY4KG1lKSxsZS5uZXh0X291dD0wLGxlLmF2YWlsX291dD1tZSksKF9lPXouaW5mbGF0ZShsZSxLLlpfTk9fRkxVU0gpKSE9PUsuWl9TVFJFQU1fRU5EJiZfZSE9PUsuWl9PSylyZXR1cm4gdGhpcy5vbkVuZChfZSksdGhpcy5lbmRlZD0hMCwhMTtsZS5uZXh0X291dCYm''@;'; put 'put ''KDA9PT1sZS5hdmFpbF9vdXR8fF9lPT09Sy5aX1NUUkVBTV9FTkR8fDA9PT1sZS5hdmFpbF9pbiYmVGU9PT1LLlpfRklOSVNIKSYmKCJzdHJpbmciPT09dGhpcy5vcHRpb25zLnRvPyhTZT1MLnV0Zjhib3JkZXIobGUub3V0cHV0LGxlLm5leHRfb3V0KSxqZT1sZS5uZXh0X291dC1TZSxWPUwu''@;'; put 'put ''YnVmMnN0cmluZyhsZS5vdXRwdXQsU2UpLGxlLm5leHRfb3V0PWplLGxlLmF2YWlsX291dD1tZS1qZSxqZSYmTi5hcnJheVNldChsZS5vdXRwdXQsbGUub3V0cHV0LFNlLGplLDApLHRoaXMub25EYXRhKFYpKTp0aGlzLm9uRGF0YShOLnNocmlua0J1ZihsZS5vdXRwdXQsbGUubmV4dF9vdXQp''@;'; put 'put ''KSl9d2hpbGUobGUuYXZhaWxfaW4+MCYmX2UhPT1LLlpfU1RSRUFNX0VORCk7cmV0dXJuIF9lPT09Sy5aX1NUUkVBTV9FTkQmJihUZT1LLlpfRklOSVNIKSxUZSE9PUsuWl9GSU5JU0h8fChfZT16LmluZmxhdGVFbmQodGhpcy5zdHJtKSx0aGlzLm9uRW5kKF9lKSx0aGlzLmVuZGVkPSEwLF9l''@;'; put 'put ''PT09Sy5aX09LKX0scS5wcm90b3R5cGUub25EYXRhPWZ1bmN0aW9uKG5lKXt0aGlzLmNodW5rcy5wdXNoKG5lKX0scS5wcm90b3R5cGUub25FbmQ9ZnVuY3Rpb24obmUpe25lPT09Sy5aX09LJiYodGhpcy5yZXN1bHQ9InN0cmluZyI9PT10aGlzLm9wdGlvbnMudG8/dGhpcy5jaHVua3Muam9p''@;'; put 'put ''bigiIik6Ti5mbGF0dGVuQ2h1bmtzKHRoaXMuY2h1bmtzKSksdGhpcy5jaHVua3M9W10sdGhpcy5lcnI9bmUsdGhpcy5tc2c9dGhpcy5zdHJtLm1zZ30sTy5JbmZsYXRlPXEsTy5pbmZsYXRlPWVlLE8uaW5mbGF0ZVJhdz1mdW5jdGlvbiBKKG5lLGllKXtyZXR1cm4oaWU9aWV8fHt9KS5yYXc9''@;'; put 'put ''ITAsZWUobmUsaWUpfSxPLnVuZ3ppcD1lZX0seyIuL3V0aWxzL2NvbW1vbiI6MjcsIi4vdXRpbHMvc3RyaW5ncyI6MjgsIi4vemxpYi9jb25zdGFudHMiOjMwLCIuL3psaWIvZ3poZWFkZXIiOjMzLCIuL3psaWIvaW5mbGF0ZS5qcyI6MzUsIi4vemxpYi9tZXNzYWdlcyI6MzcsIi4vemxpYi96''@;'; put 'put ''c3RyZWFtIjozOX1dLDI3OltmdW5jdGlvbihQLEYsTyl7InVzZSBzdHJpY3QiO3ZhciB6PXR5cGVvZiBVaW50OEFycmF5PCJ1IiYmdHlwZW9mIFVpbnQxNkFycmF5PCJ1IiYmdHlwZW9mIEludDMyQXJyYXk8InUiO08uYXNzaWduPWZ1bmN0aW9uKEspe2Zvcih2YXIgVT1BcnJheS5wcm90b3R5''@;'; put 'put ''cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSk7VS5sZW5ndGg7KXt2YXIgVz1VLnNoaWZ0KCk7aWYoVyl7aWYoIm9iamVjdCIhPXR5cGVvZiBXKXRocm93IG5ldyBUeXBlRXJyb3IoVysibXVzdCBiZSBub24tb2JqZWN0Iik7Zm9yKHZhciBZIGluIFcpVy5oYXNPd25Qcm9wZXJ0eShZKSYmKEtb''@;'; put 'put ''WV09V1tZXSl9fXJldHVybiBLfSxPLnNocmlua0J1Zj1mdW5jdGlvbihLLFUpe3JldHVybiBLLmxlbmd0aD09PVU/SzpLLnN1YmFycmF5P0suc3ViYXJyYXkoMCxVKTooSy5sZW5ndGg9VSxLKX07dmFyIE49e2FycmF5U2V0OmZ1bmN0aW9uKEssVSxXLFkscSl7aWYoVS5zdWJhcnJheSYmSy5z''@;'; put 'put ''dWJhcnJheSlLLnNldChVLnN1YmFycmF5KFcsVytZKSxxKTtlbHNlIGZvcih2YXIgZWU9MDtlZTxZO2VlKyspS1txK2VlXT1VW1crZWVdfSxmbGF0dGVuQ2h1bmtzOmZ1bmN0aW9uKEspe3ZhciBVLFcsWSxxLGVlLEo7Zm9yKFk9MCxVPTAsVz1LLmxlbmd0aDtVPFc7VSsrKVkrPUtbVV0ubGVu''@;'; put 'put ''Z3RoO2ZvcihKPW5ldyBVaW50OEFycmF5KFkpLHE9MCxVPTAsVz1LLmxlbmd0aDtVPFc7VSsrKUouc2V0KGVlPUtbVV0scSkscSs9ZWUubGVuZ3RoO3JldHVybiBKfX0sTD17YXJyYXlTZXQ6ZnVuY3Rpb24oSyxVLFcsWSxxKXtmb3IodmFyIGVlPTA7ZWU8WTtlZSsrKUtbcStlZV09VVtXK2Vl''@;'; put 'put ''XX0sZmxhdHRlbkNodW5rczpmdW5jdGlvbihLKXtyZXR1cm5bXS5jb25jYXQuYXBwbHkoW10sSyl9fTtPLnNldFR5cGVkPWZ1bmN0aW9uKEspe0s/KE8uQnVmOD1VaW50OEFycmF5LE8uQnVmMTY9VWludDE2QXJyYXksTy5CdWYzMj1JbnQzMkFycmF5LE8uYXNzaWduKE8sTikpOihPLkJ1Zjg9''@;'; put 'put ''QXJyYXksTy5CdWYxNj1BcnJheSxPLkJ1ZjMyPUFycmF5LE8uYXNzaWduKE8sTCkpfSxPLnNldFR5cGVkKHopfSx7fV0sMjg6W2Z1bmN0aW9uKFAsRixPKXsidXNlIHN0cmljdCI7dmFyIHo9UCgiLi9jb21tb24iKSxOPSEwLEw9ITA7dHJ5e1N0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVs''@;'; put 'put ''bCxbMF0pfWNhdGNoe049ITF9dHJ5e1N0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxuZXcgVWludDhBcnJheSgxKSl9Y2F0Y2h7TD0hMX1mb3IodmFyIEs9bmV3IHouQnVmOCgyNTYpLFU9MDtVPDI1NjtVKyspS1tVXT1VPj0yNTI/NjpVPj0yNDg/NTpVPj0yNDA/NDpVPj0yMjQ/MzpV''@;'; put 'put ''Pj0xOTI/MjoxO2Z1bmN0aW9uIFcoWSxxKXtpZihxPDY1NTM3JiYoWS5zdWJhcnJheSYmTHx8IVkuc3ViYXJyYXkmJk4pKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsei5zaHJpbmtCdWYoWSxxKSk7Zm9yKHZhciBlZT0iIixKPTA7SjxxO0orKyllZSs9U3RyaW5nLmZy''@;'; put 'put ''b21DaGFyQ29kZShZW0pdKTtyZXR1cm4gZWV9S1syNTRdPUtbMjU0XT0xLE8uc3RyaW5nMmJ1Zj1mdW5jdGlvbihZKXt2YXIgcSxlZSxKLG5lLGllLGxlPVkubGVuZ3RoLG1lPTA7Zm9yKG5lPTA7bmU8bGU7bmUrKyk1NTI5Nj09KDY0NTEyJihlZT1ZLmNoYXJDb2RlQXQobmUpKSkmJm5lKzE8''@;'; put 'put ''bGUmJjU2MzIwPT0oNjQ1MTImKEo9WS5jaGFyQ29kZUF0KG5lKzEpKSkmJihlZT02NTUzNisoZWUtNTUyOTY8PDEwKSsoSi01NjMyMCksbmUrKyksbWUrPWVlPDEyOD8xOmVlPDIwNDg/MjplZTw2NTUzNj8zOjQ7Zm9yKHE9bmV3IHouQnVmOChtZSksaWU9MCxuZT0wO2llPG1lO25lKyspNTUy''@;'; put 'put ''OTY9PSg2NDUxMiYoZWU9WS5jaGFyQ29kZUF0KG5lKSkpJiZuZSsxPGxlJiY1NjMyMD09KDY0NTEyJihKPVkuY2hhckNvZGVBdChuZSsxKSkpJiYoZWU9NjU1MzYrKGVlLTU1Mjk2PDwxMCkrKEotNTYzMjApLG5lKyspLGVlPDEyOD9xW2llKytdPWVlOmVlPDIwNDg/KHFbaWUrK109MTkyfGVl''@;'; put 'put ''Pj4+NixxW2llKytdPTEyOHw2MyZlZSk6ZWU8NjU1MzY/KHFbaWUrK109MjI0fGVlPj4+MTIscVtpZSsrXT0xMjh8ZWU+Pj42JjYzLHFbaWUrK109MTI4fDYzJmVlKToocVtpZSsrXT0yNDB8ZWU+Pj4xOCxxW2llKytdPTEyOHxlZT4+PjEyJjYzLHFbaWUrK109MTI4fGVlPj4+NiY2MyxxW2ll''@;'; put 'put ''KytdPTEyOHw2MyZlZSk7cmV0dXJuIHF9LE8uYnVmMmJpbnN0cmluZz1mdW5jdGlvbihZKXtyZXR1cm4gVyhZLFkubGVuZ3RoKX0sTy5iaW5zdHJpbmcyYnVmPWZ1bmN0aW9uKFkpe2Zvcih2YXIgcT1uZXcgei5CdWY4KFkubGVuZ3RoKSxlZT0wLEo9cS5sZW5ndGg7ZWU8SjtlZSsrKXFbZWVd''@;'; put 'put ''PVkuY2hhckNvZGVBdChlZSk7cmV0dXJuIHF9LE8uYnVmMnN0cmluZz1mdW5jdGlvbihZLHEpe3ZhciBlZSxKLG5lLGllLGxlPXF8fFkubGVuZ3RoLG1lPW5ldyBBcnJheSgyKmxlKTtmb3IoSj0wLGVlPTA7ZWU8bGU7KWlmKChuZT1ZW2VlKytdKTwxMjgpbWVbSisrXT1uZTtlbHNlIGlmKChp''@;'; put 'put ''ZT1LW25lXSk+NCltZVtKKytdPTY1NTMzLGVlKz1pZS0xO2Vsc2V7Zm9yKG5lJj0yPT09aWU/MzE6Mz09PWllPzE1Ojc7aWU+MSYmZWU8bGU7KW5lPW5lPDw2fDYzJllbZWUrK10saWUtLTtpZT4xP21lW0orK109NjU1MzM6bmU8NjU1MzY/bWVbSisrXT1uZToobWVbSisrXT01NTI5NnwobmUt''@;'; put 'put ''PTY1NTM2KT4+MTAmMTAyMyxtZVtKKytdPTU2MzIwfDEwMjMmbmUpfXJldHVybiBXKG1lLEopfSxPLnV0Zjhib3JkZXI9ZnVuY3Rpb24oWSxxKXt2YXIgZWU7Zm9yKChxPXF8fFkubGVuZ3RoKT5ZLmxlbmd0aCYmKHE9WS5sZW5ndGgpLGVlPXEtMTtlZT49MCYmMTI4PT0oMTkyJllbZWVdKTsp''@;'; put 'put ''ZWUtLTtyZXR1cm4gZWU8MHx8MD09PWVlP3E6ZWUrS1tZW2VlXV0+cT9lZTpxfX0seyIuL2NvbW1vbiI6Mjd9XSwyOTpbZnVuY3Rpb24oUCxGLE8peyJ1c2Ugc3RyaWN0IjtGLmV4cG9ydHM9ZnVuY3Rpb24geihOLEwsSyxVKXtmb3IodmFyIFc9NjU1MzUmTixZPU4+Pj4xNiY2NTUzNSxxPTA7''@;'; put 'put ''MCE9PUs7KXtLLT1xPUs+MmUzPzJlMzpLO2Rve1k9WSsoVz1XK0xbVSsrXXwwKXwwfXdoaWxlKC0tcSk7VyU9NjU1MjEsWSU9NjU1MjF9cmV0dXJuIFd8WTw8MTZ9fSx7fV0sMzA6W2Z1bmN0aW9uKFAsRixPKXtGLmV4cG9ydHM9e1pfTk9fRkxVU0g6MCxaX1BBUlRJQUxfRkxVU0g6MSxaX1NZ''@;'; put 'put ''TkNfRkxVU0g6MixaX0ZVTExfRkxVU0g6MyxaX0ZJTklTSDo0LFpfQkxPQ0s6NSxaX1RSRUVTOjYsWl9PSzowLFpfU1RSRUFNX0VORDoxLFpfTkVFRF9ESUNUOjIsWl9FUlJOTzotMSxaX1NUUkVBTV9FUlJPUjotMixaX0RBVEFfRVJST1I6LTMsWl9CVUZfRVJST1I6LTUsWl9OT19DT01QUkVT''@;'; put 'put ''U0lPTjowLFpfQkVTVF9TUEVFRDoxLFpfQkVTVF9DT01QUkVTU0lPTjo5LFpfREVGQVVMVF9DT01QUkVTU0lPTjotMSxaX0ZJTFRFUkVEOjEsWl9IVUZGTUFOX09OTFk6MixaX1JMRTozLFpfRklYRUQ6NCxaX0RFRkFVTFRfU1RSQVRFR1k6MCxaX0JJTkFSWTowLFpfVEVYVDoxLFpfVU5LTk9X''@;'; put 'put ''TjoyLFpfREVGTEFURUQ6OH19LHt9XSwzMTpbZnVuY3Rpb24oUCxGLE8peyJ1c2Ugc3RyaWN0Ijt2YXIgTj1mdW5jdGlvbiB6KCl7Zm9yKHZhciBLLFU9W10sVz0wO1c8MjU2O1crKyl7Sz1XO2Zvcih2YXIgWT0wO1k8ODtZKyspSz0xJks/Mzk4ODI5MjM4NF5LPj4+MTpLPj4+MTtVW1ddPUt9''@;'; put 'put ''cmV0dXJuIFV9KCk7Ri5leHBvcnRzPWZ1bmN0aW9uIEwoSyxVLFcsWSl7dmFyIHE9TixlZT1ZK1c7Sz1+Sztmb3IodmFyIEo9WTtKPGVlO0orKylLPUs+Pj44XnFbMjU1JihLXlVbSl0pXTtyZXR1cm5+S319LHt9XSwzMjpbZnVuY3Rpb24oUCxGLE8peyJ1c2Ugc3RyaWN0Ijt2YXIgej1QKCIu''@;'; put 'put ''Li91dGlscy9jb21tb24iKSxOPVAoIi4vdHJlZXMiKSxMPVAoIi4vYWRsZXIzMiIpLEs9UCgiLi9jcmMzMiIpLFU9UCgiLi9tZXNzYWdlcyIpLFc9MCxuZT0wLGxlPS0yLHg9MixDPTgsQT0yODYsYWU9MzAsdGU9MTksc2U9MipBKzEsd2U9MTUsVWU9MyxKZT0yNTgsb3Q9SmUrVWUrMSx2ZT00''@;'; put 'put ''MixPZT0xMTM7ZnVuY3Rpb24gUWUoV2UsVHQpe3JldHVybiBXZS5tc2c9VVtUdF0sVHR9ZnVuY3Rpb24gdW4oV2Upe3JldHVybihXZTw8MSktKFdlPjQ/OTowKX1mdW5jdGlvbiB5dChXZSl7Zm9yKHZhciBUdD1XZS5sZW5ndGg7LS1UdD49MDspV2VbVHRdPTB9ZnVuY3Rpb24gTXQoV2Upe3Zh''@;'; put 'put ''ciBUdD1XZS5zdGF0ZSxucj1UdC5wZW5kaW5nO25yPldlLmF2YWlsX291dCYmKG5yPVdlLmF2YWlsX291dCksMCE9PW5yJiYoei5hcnJheVNldChXZS5vdXRwdXQsVHQucGVuZGluZ19idWYsVHQucGVuZGluZ19vdXQsbnIsV2UubmV4dF9vdXQpLFdlLm5leHRfb3V0Kz1ucixUdC5wZW5kaW5n''@;'; put 'put ''X291dCs9bnIsV2UudG90YWxfb3V0Kz1ucixXZS5hdmFpbF9vdXQtPW5yLFR0LnBlbmRpbmctPW5yLDA9PT1UdC5wZW5kaW5nJiYoVHQucGVuZGluZ19vdXQ9MCkpfWZ1bmN0aW9uIER0KFdlLFR0KXtOLl90cl9mbHVzaF9ibG9jayhXZSxXZS5ibG9ja19zdGFydD49MD9XZS5ibG9ja19zdGFy''@;'; put 'put ''dDotMSxXZS5zdHJzdGFydC1XZS5ibG9ja19zdGFydCxUdCksV2UuYmxvY2tfc3RhcnQ9V2Uuc3Ryc3RhcnQsTXQoV2Uuc3RybSl9ZnVuY3Rpb24gaXQoV2UsVHQpe1dlLnBlbmRpbmdfYnVmW1dlLnBlbmRpbmcrK109VHR9ZnVuY3Rpb24gJGUoV2UsVHQpe1dlLnBlbmRpbmdfYnVmW1dlLnBl''@;'; put 'put ''bmRpbmcrK109VHQ+Pj44JjI1NSxXZS5wZW5kaW5nX2J1ZltXZS5wZW5kaW5nKytdPTI1NSZUdH1mdW5jdGlvbiB0dChXZSxUdCxucixodCl7dmFyIHh0PVdlLmF2YWlsX2luO3JldHVybiB4dD5odCYmKHh0PWh0KSwwPT09eHQ/MDooV2UuYXZhaWxfaW4tPXh0LHouYXJyYXlTZXQoVHQsV2Uu''@;'; put 'put ''aW5wdXQsV2UubmV4dF9pbix4dCxuciksMT09PVdlLnN0YXRlLndyYXA/V2UuYWRsZXI9TChXZS5hZGxlcixUdCx4dCxucik6Mj09PVdlLnN0YXRlLndyYXAmJihXZS5hZGxlcj1LKFdlLmFkbGVyLFR0LHh0LG5yKSksV2UubmV4dF9pbis9eHQsV2UudG90YWxfaW4rPXh0LHh0KX1mdW5jdGlv''@;'; put 'put ''biBIZShXZSxUdCl7dmFyIHh0LGpuLG5yPVdlLm1heF9jaGFpbl9sZW5ndGgsaHQ9V2Uuc3Ryc3RhcnQscm49V2UucHJldl9sZW5ndGgsenQ9V2UubmljZV9tYXRjaCxoaT1XZS5zdHJzdGFydD5XZS53X3NpemUtb3Q/V2Uuc3Ryc3RhcnQtKFdlLndfc2l6ZS1vdCk6MCxjbj1XZS53aW5kb3cs''@;'; put 'put ''Zm49V2Uud19tYXNrLElpPVdlLnByZXYsWHQ9V2Uuc3Ryc3RhcnQrSmUsZW49Y25baHQrcm4tMV0sdWE9Y25baHQrcm5dO1dlLnByZXZfbGVuZ3RoPj1XZS5nb29kX21hdGNoJiYobnI+Pj0yKSx6dD5XZS5sb29rYWhlYWQmJih6dD1XZS5sb29rYWhlYWQpO2Rve2lmKGNuWyh4dD1UdCkrcm5d''@;'; put 'put ''PT09dWEmJmNuW3h0K3JuLTFdPT09ZW4mJmNuW3h0XT09PWNuW2h0XSYmY25bKyt4dF09PT1jbltodCsxXSl7aHQrPTIseHQrKztkb3t9d2hpbGUoY25bKytodF09PT1jblsrK3h0XSYmY25bKytodF09PT1jblsrK3h0XSYmY25bKytodF09PT1jblsrK3h0XSYmY25bKytodF09PT1jblsrK3h0''@;'; put 'put ''XSYmY25bKytodF09PT1jblsrK3h0XSYmY25bKytodF09PT1jblsrK3h0XSYmY25bKytodF09PT1jblsrK3h0XSYmY25bKytodF09PT1jblsrK3h0XSYmaHQ8WHQpO2lmKGpuPUplLShYdC1odCksaHQ9WHQtSmUsam4+cm4pe2lmKFdlLm1hdGNoX3N0YXJ0PVR0LHJuPWpuLGpuPj16dClicmVh''@;'; put 'put ''aztlbj1jbltodCtybi0xXSx1YT1jbltodCtybl19fX13aGlsZSgoVHQ9SWlbVHQmZm5dKT5oaSYmMCE9LS1ucik7cmV0dXJuIHJuPD1XZS5sb29rYWhlYWQ/cm46V2UubG9va2FoZWFkfWZ1bmN0aW9uIHV0KFdlKXt2YXIgbnIsaHQseHQsam4scm4sVHQ9V2Uud19zaXplO2Rve2lmKGpuPVdl''@;'; put 'put ''LndpbmRvd19zaXplLVdlLmxvb2thaGVhZC1XZS5zdHJzdGFydCxXZS5zdHJzdGFydD49VHQrKFR0LW90KSl7ei5hcnJheVNldChXZS53aW5kb3csV2Uud2luZG93LFR0LFR0LDApLFdlLm1hdGNoX3N0YXJ0LT1UdCxXZS5zdHJzdGFydC09VHQsV2UuYmxvY2tfc3RhcnQtPVR0LG5yPWh0PVdl''@;'; put 'put ''Lmhhc2hfc2l6ZTtkb3t4dD1XZS5oZWFkWy0tbnJdLFdlLmhlYWRbbnJdPXh0Pj1UdD94dC1UdDowfXdoaWxlKC0taHQpO25yPWh0PVR0O2Rve3h0PVdlLnByZXZbLS1ucl0sV2UucHJldltucl09eHQ+PVR0P3h0LVR0OjB9d2hpbGUoLS1odCk7am4rPVR0fWlmKDA9PT1XZS5zdHJtLmF2YWls''@;'; put 'put ''X2luKWJyZWFrO2lmKGh0PXR0KFdlLnN0cm0sV2Uud2luZG93LFdlLnN0cnN0YXJ0K1dlLmxvb2thaGVhZCxqbiksV2UubG9va2FoZWFkKz1odCxXZS5sb29rYWhlYWQrV2UuaW5zZXJ0Pj1VZSlmb3IoV2UuaW5zX2g9V2Uud2luZG93W3JuPVdlLnN0cnN0YXJ0LVdlLmluc2VydF0sV2UuaW5z''@;'; put 'put ''X2g9KFdlLmluc19oPDxXZS5oYXNoX3NoaWZ0XldlLndpbmRvd1tybisxXSkmV2UuaGFzaF9tYXNrO1dlLmluc2VydCYmKFdlLmluc19oPShXZS5pbnNfaDw8V2UuaGFzaF9zaGlmdF5XZS53aW5kb3dbcm4rVWUtMV0pJldlLmhhc2hfbWFzayxXZS5wcmV2W3JuJldlLndfbWFza109V2UuaGVh''@;'; put 'put ''ZFtXZS5pbnNfaF0sV2UuaGVhZFtXZS5pbnNfaF09cm4scm4rKyxXZS5pbnNlcnQtLSwhKFdlLmxvb2thaGVhZCtXZS5pbnNlcnQ8VWUpKTspO313aGlsZShXZS5sb29rYWhlYWQ8b3QmJjAhPT1XZS5zdHJtLmF2YWlsX2luKX1mdW5jdGlvbiBSdChXZSxUdCl7Zm9yKHZhciBucixodDs7KXtp''@;'; put 'put ''ZihXZS5sb29rYWhlYWQ8b3Qpe2lmKHV0KFdlKSxXZS5sb29rYWhlYWQ8b3QmJlR0PT09VylyZXR1cm4gMTtpZigwPT09V2UubG9va2FoZWFkKWJyZWFrfWlmKG5yPTAsV2UubG9va2FoZWFkPj1VZSYmKFdlLmluc19oPShXZS5pbnNfaDw8V2UuaGFzaF9zaGlmdF5XZS53aW5kb3dbV2Uuc3Ry''@;'; put 'put ''c3RhcnQrVWUtMV0pJldlLmhhc2hfbWFzayxucj1XZS5wcmV2W1dlLnN0cnN0YXJ0JldlLndfbWFza109V2UuaGVhZFtXZS5pbnNfaF0sV2UuaGVhZFtXZS5pbnNfaF09V2Uuc3Ryc3RhcnQpLDAhPT1uciYmV2Uuc3Ryc3RhcnQtbnI8PVdlLndfc2l6ZS1vdCYmKFdlLm1hdGNoX2xlbmd0aD1I''@;'; put 'put ''ZShXZSxucikpLFdlLm1hdGNoX2xlbmd0aD49VWUpaWYoaHQ9Ti5fdHJfdGFsbHkoV2UsV2Uuc3Ryc3RhcnQtV2UubWF0Y2hfc3RhcnQsV2UubWF0Y2hfbGVuZ3RoLVVlKSxXZS5sb29rYWhlYWQtPVdlLm1hdGNoX2xlbmd0aCxXZS5tYXRjaF9sZW5ndGg8PVdlLm1heF9sYXp5X21hdGNoJiZX''@;'; put 'put ''ZS5sb29rYWhlYWQ+PVVlKXtXZS5tYXRjaF9sZW5ndGgtLTtkb3tXZS5zdHJzdGFydCsrLFdlLmluc19oPShXZS5pbnNfaDw8V2UuaGFzaF9zaGlmdF5XZS53aW5kb3dbV2Uuc3Ryc3RhcnQrVWUtMV0pJldlLmhhc2hfbWFzayxucj1XZS5wcmV2W1dlLnN0cnN0YXJ0JldlLndfbWFza109V2Uu''@;'; put 'put ''aGVhZFtXZS5pbnNfaF0sV2UuaGVhZFtXZS5pbnNfaF09V2Uuc3Ryc3RhcnR9d2hpbGUoMCE9LS1XZS5tYXRjaF9sZW5ndGgpO1dlLnN0cnN0YXJ0Kyt9ZWxzZSBXZS5zdHJzdGFydCs9V2UubWF0Y2hfbGVuZ3RoLFdlLm1hdGNoX2xlbmd0aD0wLFdlLmluc19oPVdlLndpbmRvd1tXZS5zdHJz''@;'; put 'put ''dGFydF0sV2UuaW5zX2g9KFdlLmluc19oPDxXZS5oYXNoX3NoaWZ0XldlLndpbmRvd1tXZS5zdHJzdGFydCsxXSkmV2UuaGFzaF9tYXNrO2Vsc2UgaHQ9Ti5fdHJfdGFsbHkoV2UsMCxXZS53aW5kb3dbV2Uuc3Ryc3RhcnRdKSxXZS5sb29rYWhlYWQtLSxXZS5zdHJzdGFydCsrO2lmKGh0JiYo''@;'; put 'put ''RHQoV2UsITEpLDA9PT1XZS5zdHJtLmF2YWlsX291dCkpcmV0dXJuIDF9cmV0dXJuIFdlLmluc2VydD1XZS5zdHJzdGFydDxVZS0xP1dlLnN0cnN0YXJ0OlVlLTEsND09PVR0PyhEdChXZSwhMCksMD09PVdlLnN0cm0uYXZhaWxfb3V0PzM6NCk6V2UubGFzdF9saXQmJihEdChXZSwhMSksMD09''@;'; put 'put ''PVdlLnN0cm0uYXZhaWxfb3V0KT8xOjJ9ZnVuY3Rpb24gUHQoV2UsVHQpe2Zvcih2YXIgbnIsaHQseHQ7Oyl7aWYoV2UubG9va2FoZWFkPG90KXtpZih1dChXZSksV2UubG9va2FoZWFkPG90JiZUdD09PVcpcmV0dXJuIDE7aWYoMD09PVdlLmxvb2thaGVhZClicmVha31pZihucj0wLFdlLmxv''@;'; put 'put ''b2thaGVhZD49VWUmJihXZS5pbnNfaD0oV2UuaW5zX2g8PFdlLmhhc2hfc2hpZnReV2Uud2luZG93W1dlLnN0cnN0YXJ0K1VlLTFdKSZXZS5oYXNoX21hc2ssbnI9V2UucHJldltXZS5zdHJzdGFydCZXZS53X21hc2tdPVdlLmhlYWRbV2UuaW5zX2hdLFdlLmhlYWRbV2UuaW5zX2hdPVdlLnN0''@;'; put 'put ''cnN0YXJ0KSxXZS5wcmV2X2xlbmd0aD1XZS5tYXRjaF9sZW5ndGgsV2UucHJldl9tYXRjaD1XZS5tYXRjaF9zdGFydCxXZS5tYXRjaF9sZW5ndGg9VWUtMSwwIT09bnImJldlLnByZXZfbGVuZ3RoPFdlLm1heF9sYXp5X21hdGNoJiZXZS5zdHJzdGFydC1ucjw9V2Uud19zaXplLW90JiYoV2Uu''@;'; put 'put ''bWF0Y2hfbGVuZ3RoPUhlKFdlLG5yKSxXZS5tYXRjaF9sZW5ndGg8PTUmJigxPT09V2Uuc3RyYXRlZ3l8fFdlLm1hdGNoX2xlbmd0aD09PVVlJiZXZS5zdHJzdGFydC1XZS5tYXRjaF9zdGFydD40MDk2KSYmKFdlLm1hdGNoX2xlbmd0aD1VZS0xKSksV2UucHJldl9sZW5ndGg+PVVlJiZXZS5t''@;'; put 'put ''YXRjaF9sZW5ndGg8PVdlLnByZXZfbGVuZ3RoKXt4dD1XZS5zdHJzdGFydCtXZS5sb29rYWhlYWQtVWUsaHQ9Ti5fdHJfdGFsbHkoV2UsV2Uuc3Ryc3RhcnQtMS1XZS5wcmV2X21hdGNoLFdlLnByZXZfbGVuZ3RoLVVlKSxXZS5sb29rYWhlYWQtPVdlLnByZXZfbGVuZ3RoLTEsV2UucHJldl9s''@;'; put 'put ''ZW5ndGgtPTI7ZG97KytXZS5zdHJzdGFydDw9eHQmJihXZS5pbnNfaD0oV2UuaW5zX2g8PFdlLmhhc2hfc2hpZnReV2Uud2luZG93W1dlLnN0cnN0YXJ0K1VlLTFdKSZXZS5oYXNoX21hc2ssbnI9V2UucHJldltXZS5zdHJzdGFydCZXZS53X21hc2tdPVdlLmhlYWRbV2UuaW5zX2hdLFdlLmhl''@;'; put 'put ''YWRbV2UuaW5zX2hdPVdlLnN0cnN0YXJ0KX13aGlsZSgwIT0tLVdlLnByZXZfbGVuZ3RoKTtpZihXZS5tYXRjaF9hdmFpbGFibGU9MCxXZS5tYXRjaF9sZW5ndGg9VWUtMSxXZS5zdHJzdGFydCsrLGh0JiYoRHQoV2UsITEpLDA9PT1XZS5zdHJtLmF2YWlsX291dCkpcmV0dXJuIDF9ZWxzZSBp''@;'; put 'put ''ZihXZS5tYXRjaF9hdmFpbGFibGUpe2lmKChodD1OLl90cl90YWxseShXZSwwLFdlLndpbmRvd1tXZS5zdHJzdGFydC0xXSkpJiZEdChXZSwhMSksV2Uuc3Ryc3RhcnQrKyxXZS5sb29rYWhlYWQtLSwwPT09V2Uuc3RybS5hdmFpbF9vdXQpcmV0dXJuIDF9ZWxzZSBXZS5tYXRjaF9hdmFpbGFi''@;'; put 'put ''bGU9MSxXZS5zdHJzdGFydCsrLFdlLmxvb2thaGVhZC0tfXJldHVybiBXZS5tYXRjaF9hdmFpbGFibGUmJihodD1OLl90cl90YWxseShXZSwwLFdlLndpbmRvd1tXZS5zdHJzdGFydC0xXSksV2UubWF0Y2hfYXZhaWxhYmxlPTApLFdlLmluc2VydD1XZS5zdHJzdGFydDxVZS0xP1dlLnN0cnN0''@;'; put 'put ''YXJ0OlVlLTEsND09PVR0PyhEdChXZSwhMCksMD09PVdlLnN0cm0uYXZhaWxfb3V0PzM6NCk6V2UubGFzdF9saXQmJihEdChXZSwhMSksMD09PVdlLnN0cm0uYXZhaWxfb3V0KT8xOjJ9dmFyIFJpLHNuPWZ1bmN0aW9uKFdlLFR0LG5yLGh0LHh0KXt0aGlzLmdvb2RfbGVuZ3RoPVdlLHRoaXMu''@;'; put 'put ''bWF4X2xhenk9VHQsdGhpcy5uaWNlX2xlbmd0aD1ucix0aGlzLm1heF9jaGFpbj1odCx0aGlzLmZ1bmM9eHR9O2Z1bmN0aW9uIGZ0KCl7dGhpcy5zdHJtPW51bGwsdGhpcy5zdGF0dXM9MCx0aGlzLnBlbmRpbmdfYnVmPW51bGwsdGhpcy5wZW5kaW5nX2J1Zl9zaXplPTAsdGhpcy5wZW5kaW5n''@;'; put 'put ''X291dD0wLHRoaXMucGVuZGluZz0wLHRoaXMud3JhcD0wLHRoaXMuZ3poZWFkPW51bGwsdGhpcy5nemluZGV4PTAsdGhpcy5tZXRob2Q9Qyx0aGlzLmxhc3RfZmx1c2g9LTEsdGhpcy53X3NpemU9MCx0aGlzLndfYml0cz0wLHRoaXMud19tYXNrPTAsdGhpcy53aW5kb3c9bnVsbCx0aGlzLndp''@;'; put 'put ''bmRvd19zaXplPTAsdGhpcy5wcmV2PW51bGwsdGhpcy5oZWFkPW51bGwsdGhpcy5pbnNfaD0wLHRoaXMuaGFzaF9zaXplPTAsdGhpcy5oYXNoX2JpdHM9MCx0aGlzLmhhc2hfbWFzaz0wLHRoaXMuaGFzaF9zaGlmdD0wLHRoaXMuYmxvY2tfc3RhcnQ9MCx0aGlzLm1hdGNoX2xlbmd0aD0wLHRo''@;'; put 'put ''aXMucHJldl9tYXRjaD0wLHRoaXMubWF0Y2hfYXZhaWxhYmxlPTAsdGhpcy5zdHJzdGFydD0wLHRoaXMubWF0Y2hfc3RhcnQ9MCx0aGlzLmxvb2thaGVhZD0wLHRoaXMucHJldl9sZW5ndGg9MCx0aGlzLm1heF9jaGFpbl9sZW5ndGg9MCx0aGlzLm1heF9sYXp5X21hdGNoPTAsdGhpcy5sZXZl''@;'; put 'put ''bD0wLHRoaXMuc3RyYXRlZ3k9MCx0aGlzLmdvb2RfbWF0Y2g9MCx0aGlzLm5pY2VfbWF0Y2g9MCx0aGlzLmR5bl9sdHJlZT1uZXcgei5CdWYxNigyKnNlKSx0aGlzLmR5bl9kdHJlZT1uZXcgei5CdWYxNigyKigyKmFlKzEpKSx0aGlzLmJsX3RyZWU9bmV3IHouQnVmMTYoMiooMip0ZSsxKSks''@;'; put 'put ''eXQodGhpcy5keW5fbHRyZWUpLHl0KHRoaXMuZHluX2R0cmVlKSx5dCh0aGlzLmJsX3RyZWUpLHRoaXMubF9kZXNjPW51bGwsdGhpcy5kX2Rlc2M9bnVsbCx0aGlzLmJsX2Rlc2M9bnVsbCx0aGlzLmJsX2NvdW50PW5ldyB6LkJ1ZjE2KHdlKzEpLHRoaXMuaGVhcD1uZXcgei5CdWYxNigyKkEr''@;'; put 'put ''MSkseXQodGhpcy5oZWFwKSx0aGlzLmhlYXBfbGVuPTAsdGhpcy5oZWFwX21heD0wLHRoaXMuZGVwdGg9bmV3IHouQnVmMTYoMipBKzEpLHl0KHRoaXMuZGVwdGgpLHRoaXMubF9idWY9MCx0aGlzLmxpdF9idWZzaXplPTAsdGhpcy5sYXN0X2xpdD0wLHRoaXMuZF9idWY9MCx0aGlzLm9wdF9s''@;'; put 'put ''ZW49MCx0aGlzLnN0YXRpY19sZW49MCx0aGlzLm1hdGNoZXM9MCx0aGlzLmluc2VydD0wLHRoaXMuYmlfYnVmPTAsdGhpcy5iaV92YWxpZD0wfWZ1bmN0aW9uIE9yKFdlKXt2YXIgVHQ7cmV0dXJuIFdlJiZXZS5zdGF0ZT8oV2UudG90YWxfaW49V2UudG90YWxfb3V0PTAsV2UuZGF0YV90eXBl''@;'; put 'put ''PXgsKFR0PVdlLnN0YXRlKS5wZW5kaW5nPTAsVHQucGVuZGluZ19vdXQ9MCxUdC53cmFwPDAmJihUdC53cmFwPS1UdC53cmFwKSxUdC5zdGF0dXM9VHQud3JhcD92ZTpPZSxXZS5hZGxlcj0yPT09VHQud3JhcD8wOjEsVHQubGFzdF9mbHVzaD1XLE4uX3RyX2luaXQoVHQpLG5lKTpRZShXZSxs''@;'; put 'put ''ZSl9ZnVuY3Rpb24gV3QoV2Upe3ZhciBUdD1PcihXZSk7cmV0dXJuIFR0PT09bmUmJmZ1bmN0aW9uIGhuKFdlKXtXZS53aW5kb3dfc2l6ZT0yKldlLndfc2l6ZSx5dChXZS5oZWFkKSxXZS5tYXhfbGF6eV9tYXRjaD1SaVtXZS5sZXZlbF0ubWF4X2xhenksV2UuZ29vZF9tYXRjaD1SaVtXZS5s''@;'; put 'put ''ZXZlbF0uZ29vZF9sZW5ndGgsV2UubmljZV9tYXRjaD1SaVtXZS5sZXZlbF0ubmljZV9sZW5ndGgsV2UubWF4X2NoYWluX2xlbmd0aD1SaVtXZS5sZXZlbF0ubWF4X2NoYWluLFdlLnN0cnN0YXJ0PTAsV2UuYmxvY2tfc3RhcnQ9MCxXZS5sb29rYWhlYWQ9MCxXZS5pbnNlcnQ9MCxXZS5tYXRj''@;'; put 'put ''aF9sZW5ndGg9V2UucHJldl9sZW5ndGg9VWUtMSxXZS5tYXRjaF9hdmFpbGFibGU9MCxXZS5pbnNfaD0wfShXZS5zdGF0ZSksVHR9ZnVuY3Rpb24gUm4oV2UsVHQsbnIsaHQseHQsam4pe2lmKCFXZSlyZXR1cm4gbGU7dmFyIHJuPTE7aWYoLTE9PT1UdCYmKFR0PTYpLGh0PDA/KHJuPTAsaHQ9''@;'; put 'put ''LWh0KTpodD4xNSYmKHJuPTIsaHQtPTE2KSx4dDwxfHx4dD45fHxuciE9PUN8fGh0PDh8fGh0PjE1fHxUdDwwfHxUdD45fHxqbjwwfHxqbj40KXJldHVybiBRZShXZSxsZSk7OD09PWh0JiYoaHQ9OSk7dmFyIHp0PW5ldyBmdDtyZXR1cm4gV2Uuc3RhdGU9enQsenQuc3RybT1XZSx6dC53cmFw''@;'; put 'put ''PXJuLHp0Lmd6aGVhZD1udWxsLHp0LndfYml0cz1odCx6dC53X3NpemU9MTw8enQud19iaXRzLHp0LndfbWFzaz16dC53X3NpemUtMSx6dC5oYXNoX2JpdHM9eHQrNyx6dC5oYXNoX3NpemU9MTw8enQuaGFzaF9iaXRzLHp0Lmhhc2hfbWFzaz16dC5oYXNoX3NpemUtMSx6dC5oYXNoX3NoaWZ0''@;'; put 'put ''PX5+KCh6dC5oYXNoX2JpdHMrVWUtMSkvVWUpLHp0LndpbmRvdz1uZXcgei5CdWY4KDIqenQud19zaXplKSx6dC5oZWFkPW5ldyB6LkJ1ZjE2KHp0Lmhhc2hfc2l6ZSksenQucHJldj1uZXcgei5CdWYxNih6dC53X3NpemUpLHp0LmxpdF9idWZzaXplPTE8PHh0KzYsenQucGVuZGluZ19idWZf''@;'; put 'put ''c2l6ZT00Knp0LmxpdF9idWZzaXplLHp0LnBlbmRpbmdfYnVmPW5ldyB6LkJ1ZjgoenQucGVuZGluZ19idWZfc2l6ZSksenQuZF9idWY9enQubGl0X2J1ZnNpemU+PjEsenQubF9idWY9Myp6dC5saXRfYnVmc2l6ZSx6dC5sZXZlbD1UdCx6dC5zdHJhdGVneT1qbix6dC5tZXRob2Q9bnIsV3Qo''@;'; put 'put ''V2UpfVJpPVtuZXcgc24oMCwwLDAsMCxmdW5jdGlvbiBxdChXZSxUdCl7dmFyIG5yPTY1NTM1O2Zvcihucj5XZS5wZW5kaW5nX2J1Zl9zaXplLTUmJihucj1XZS5wZW5kaW5nX2J1Zl9zaXplLTUpOzspe2lmKFdlLmxvb2thaGVhZDw9MSl7aWYodXQoV2UpLDA9PT1XZS5sb29rYWhlYWQmJlR0''@;'; put 'put ''PT09VylyZXR1cm4gMTtpZigwPT09V2UubG9va2FoZWFkKWJyZWFrfVdlLnN0cnN0YXJ0Kz1XZS5sb29rYWhlYWQsV2UubG9va2FoZWFkPTA7dmFyIGh0PVdlLmJsb2NrX3N0YXJ0K25yO2lmKCgwPT09V2Uuc3Ryc3RhcnR8fFdlLnN0cnN0YXJ0Pj1odCkmJihXZS5sb29rYWhlYWQ9V2Uuc3Ry''@;'; put 'put ''c3RhcnQtaHQsV2Uuc3Ryc3RhcnQ9aHQsRHQoV2UsITEpLDA9PT1XZS5zdHJtLmF2YWlsX291dCl8fFdlLnN0cnN0YXJ0LVdlLmJsb2NrX3N0YXJ0Pj1XZS53X3NpemUtb3QmJihEdChXZSwhMSksMD09PVdlLnN0cm0uYXZhaWxfb3V0KSlyZXR1cm4gMX1yZXR1cm4gV2UuaW5zZXJ0PTAsND09''@;'; put 'put ''PVR0PyhEdChXZSwhMCksMD09PVdlLnN0cm0uYXZhaWxfb3V0PzM6NCk6KFdlLnN0cnN0YXJ0PldlLmJsb2NrX3N0YXJ0JiZEdChXZSwhMSksMSl9KSxuZXcgc24oNCw0LDgsNCxSdCksbmV3IHNuKDQsNSwxNiw4LFJ0KSxuZXcgc24oNCw2LDMyLDMyLFJ0KSxuZXcgc24oNCw0LDE2LDE2LFB0''@;'; put 'put ''KSxuZXcgc24oOCwxNiwzMiwzMixQdCksbmV3IHNuKDgsMTYsMTI4LDEyOCxQdCksbmV3IHNuKDgsMzIsMTI4LDI1NixQdCksbmV3IHNuKDMyLDEyOCwyNTgsMTAyNCxQdCksbmV3IHNuKDMyLDI1OCwyNTgsNDA5NixQdCldLE8uZGVmbGF0ZUluaXQ9ZnVuY3Rpb24gc3QoV2UsVHQpe3JldHVy''@;'; put 'put ''biBSbihXZSxUdCxDLDE1LDgsMCl9LE8uZGVmbGF0ZUluaXQyPVJuLE8uZGVmbGF0ZVJlc2V0PVd0LE8uZGVmbGF0ZVJlc2V0S2VlcD1PcixPLmRlZmxhdGVTZXRIZWFkZXI9ZnVuY3Rpb24gQXQoV2UsVHQpe3JldHVybiBXZSYmV2Uuc3RhdGUmJjI9PT1XZS5zdGF0ZS53cmFwPyhXZS5zdGF0''@;'; put 'put ''ZS5nemhlYWQ9VHQsbmUpOmxlfSxPLmRlZmxhdGU9ZnVuY3Rpb24gVXQoV2UsVHQpe3ZhciBucixodCx4dCxqbjtpZighV2V8fCFXZS5zdGF0ZXx8VHQ+NXx8VHQ8MClyZXR1cm4gV2U/UWUoV2UsbGUpOmxlO2lmKGh0PVdlLnN0YXRlLCFXZS5vdXRwdXR8fCFXZS5pbnB1dCYmMCE9PVdlLmF2''@;'; put 'put ''YWlsX2lufHw2NjY9PT1odC5zdGF0dXMmJjQhPT1UdClyZXR1cm4gUWUoV2UsMD09PVdlLmF2YWlsX291dD8tNTpsZSk7aWYoaHQuc3RybT1XZSxucj1odC5sYXN0X2ZsdXNoLGh0Lmxhc3RfZmx1c2g9VHQsaHQuc3RhdHVzPT09dmUpaWYoMj09PWh0LndyYXApV2UuYWRsZXI9MCxpdChodCwz''@;'; put 'put ''MSksaXQoaHQsMTM5KSxpdChodCw4KSxodC5nemhlYWQ/KGl0KGh0LChodC5nemhlYWQudGV4dD8xOjApKyhodC5nemhlYWQuaGNyYz8yOjApKyhodC5nemhlYWQuZXh0cmE/NDowKSsoaHQuZ3poZWFkLm5hbWU/ODowKSsoaHQuZ3poZWFkLmNvbW1lbnQ/MTY6MCkpLGl0KGh0LDI1NSZodC5n''@;'; put 'put ''emhlYWQudGltZSksaXQoaHQsaHQuZ3poZWFkLnRpbWU+PjgmMjU1KSxpdChodCxodC5nemhlYWQudGltZT4+MTYmMjU1KSxpdChodCxodC5nemhlYWQudGltZT4+MjQmMjU1KSxpdChodCw5PT09aHQubGV2ZWw/MjpodC5zdHJhdGVneT49Mnx8aHQubGV2ZWw8Mj80OjApLGl0KGh0LDI1NSZo''@;'; put 'put ''dC5nemhlYWQub3MpLGh0Lmd6aGVhZC5leHRyYSYmaHQuZ3poZWFkLmV4dHJhLmxlbmd0aCYmKGl0KGh0LDI1NSZodC5nemhlYWQuZXh0cmEubGVuZ3RoKSxpdChodCxodC5nemhlYWQuZXh0cmEubGVuZ3RoPj44JjI1NSkpLGh0Lmd6aGVhZC5oY3JjJiYoV2UuYWRsZXI9SyhXZS5hZGxlcixo''@;'; put 'put ''dC5wZW5kaW5nX2J1ZixodC5wZW5kaW5nLDApKSxodC5nemluZGV4PTAsaHQuc3RhdHVzPTY5KTooaXQoaHQsMCksaXQoaHQsMCksaXQoaHQsMCksaXQoaHQsMCksaXQoaHQsMCksaXQoaHQsOT09PWh0LmxldmVsPzI6aHQuc3RyYXRlZ3k+PTJ8fGh0LmxldmVsPDI/NDowKSxpdChodCwzKSxo''@;'; put 'put ''dC5zdGF0dXM9T2UpO2Vsc2V7dmFyIHJuPUMrKGh0LndfYml0cy04PDw0KTw8ODtybnw9KGh0LnN0cmF0ZWd5Pj0yfHxodC5sZXZlbDwyPzA6aHQubGV2ZWw8Nj8xOjY9PT1odC5sZXZlbD8yOjMpPDw2LDAhPT1odC5zdHJzdGFydCYmKHJufD0zMikscm4rPTMxLXJuJTMxLGh0LnN0YXR1cz1P''@;'; put 'put ''ZSwkZShodCxybiksMCE9PWh0LnN0cnN0YXJ0JiYoJGUoaHQsV2UuYWRsZXI+Pj4xNiksJGUoaHQsNjU1MzUmV2UuYWRsZXIpKSxXZS5hZGxlcj0xfWlmKDY5PT09aHQuc3RhdHVzKWlmKGh0Lmd6aGVhZC5leHRyYSl7Zm9yKHh0PWh0LnBlbmRpbmc7aHQuZ3ppbmRleDwoNjU1MzUmaHQuZ3po''@;'; put 'put ''ZWFkLmV4dHJhLmxlbmd0aCkmJihodC5wZW5kaW5nIT09aHQucGVuZGluZ19idWZfc2l6ZXx8KGh0Lmd6aGVhZC5oY3JjJiZodC5wZW5kaW5nPnh0JiYoV2UuYWRsZXI9SyhXZS5hZGxlcixodC5wZW5kaW5nX2J1ZixodC5wZW5kaW5nLXh0LHh0KSksTXQoV2UpLHh0PWh0LnBlbmRpbmcsaHQu''@;'; put 'put ''cGVuZGluZyE9PWh0LnBlbmRpbmdfYnVmX3NpemUpKTspaXQoaHQsMjU1Jmh0Lmd6aGVhZC5leHRyYVtodC5nemluZGV4XSksaHQuZ3ppbmRleCsrO2h0Lmd6aGVhZC5oY3JjJiZodC5wZW5kaW5nPnh0JiYoV2UuYWRsZXI9SyhXZS5hZGxlcixodC5wZW5kaW5nX2J1ZixodC5wZW5kaW5nLXh0''@;'; put 'put ''LHh0KSksaHQuZ3ppbmRleD09PWh0Lmd6aGVhZC5leHRyYS5sZW5ndGgmJihodC5nemluZGV4PTAsaHQuc3RhdHVzPTczKX1lbHNlIGh0LnN0YXR1cz03MztpZig3Mz09PWh0LnN0YXR1cylpZihodC5nemhlYWQubmFtZSl7eHQ9aHQucGVuZGluZztkb3tpZihodC5wZW5kaW5nPT09aHQucGVu''@;'; put 'put ''ZGluZ19idWZfc2l6ZSYmKGh0Lmd6aGVhZC5oY3JjJiZodC5wZW5kaW5nPnh0JiYoV2UuYWRsZXI9SyhXZS5hZGxlcixodC5wZW5kaW5nX2J1ZixodC5wZW5kaW5nLXh0LHh0KSksTXQoV2UpLHh0PWh0LnBlbmRpbmcsaHQucGVuZGluZz09PWh0LnBlbmRpbmdfYnVmX3NpemUpKXtqbj0xO2Jy''@;'; put 'put ''ZWFrfWpuPWh0Lmd6aW5kZXg8aHQuZ3poZWFkLm5hbWUubGVuZ3RoPzI1NSZodC5nemhlYWQubmFtZS5jaGFyQ29kZUF0KGh0Lmd6aW5kZXgrKyk6MCxpdChodCxqbil9d2hpbGUoMCE9PWpuKTtodC5nemhlYWQuaGNyYyYmaHQucGVuZGluZz54dCYmKFdlLmFkbGVyPUsoV2UuYWRsZXIsaHQu''@;'; put 'put ''cGVuZGluZ19idWYsaHQucGVuZGluZy14dCx4dCkpLDA9PT1qbiYmKGh0Lmd6aW5kZXg9MCxodC5zdGF0dXM9OTEpfWVsc2UgaHQuc3RhdHVzPTkxO2lmKDkxPT09aHQuc3RhdHVzKWlmKGh0Lmd6aGVhZC5jb21tZW50KXt4dD1odC5wZW5kaW5nO2Rve2lmKGh0LnBlbmRpbmc9PT1odC5wZW5k''@;'; put 'put ''aW5nX2J1Zl9zaXplJiYoaHQuZ3poZWFkLmhjcmMmJmh0LnBlbmRpbmc+eHQmJihXZS5hZGxlcj1LKFdlLmFkbGVyLGh0LnBlbmRpbmdfYnVmLGh0LnBlbmRpbmcteHQseHQpKSxNdChXZSkseHQ9aHQucGVuZGluZyxodC5wZW5kaW5nPT09aHQucGVuZGluZ19idWZfc2l6ZSkpe2puPTE7YnJl''@;'; put 'put ''YWt9am49aHQuZ3ppbmRleDxodC5nemhlYWQuY29tbWVudC5sZW5ndGg/MjU1Jmh0Lmd6aGVhZC5jb21tZW50LmNoYXJDb2RlQXQoaHQuZ3ppbmRleCsrKTowLGl0KGh0LGpuKX13aGlsZSgwIT09am4pO2h0Lmd6aGVhZC5oY3JjJiZodC5wZW5kaW5nPnh0JiYoV2UuYWRsZXI9SyhXZS5hZGxl''@;'; put 'put ''cixodC5wZW5kaW5nX2J1ZixodC5wZW5kaW5nLXh0LHh0KSksMD09PWpuJiYoaHQuc3RhdHVzPTEwMyl9ZWxzZSBodC5zdGF0dXM9MTAzO2lmKDEwMz09PWh0LnN0YXR1cyYmKGh0Lmd6aGVhZC5oY3JjPyhodC5wZW5kaW5nKzI+aHQucGVuZGluZ19idWZfc2l6ZSYmTXQoV2UpLGh0LnBlbmRp''@;'; put 'put ''bmcrMjw9aHQucGVuZGluZ19idWZfc2l6ZSYmKGl0KGh0LDI1NSZXZS5hZGxlciksaXQoaHQsV2UuYWRsZXI+PjgmMjU1KSxXZS5hZGxlcj0wLGh0LnN0YXR1cz1PZSkpOmh0LnN0YXR1cz1PZSksMCE9PWh0LnBlbmRpbmcpe2lmKE10KFdlKSwwPT09V2UuYXZhaWxfb3V0KXJldHVybiBodC5s''@;'; put 'put ''YXN0X2ZsdXNoPS0xLG5lfWVsc2UgaWYoMD09PVdlLmF2YWlsX2luJiZ1bihUdCk8PXVuKG5yKSYmNCE9PVR0KXJldHVybiBRZShXZSwtNSk7aWYoNjY2PT09aHQuc3RhdHVzJiYwIT09V2UuYXZhaWxfaW4pcmV0dXJuIFFlKFdlLC01KTtpZigwIT09V2UuYXZhaWxfaW58fDAhPT1odC5sb29r''@;'; put 'put ''YWhlYWR8fFR0IT09VyYmNjY2IT09aHQuc3RhdHVzKXt2YXIgaGk9Mj09PWh0LnN0cmF0ZWd5P2Z1bmN0aW9uIFF0KFdlLFR0KXtmb3IodmFyIG5yOzspe2lmKDA9PT1XZS5sb29rYWhlYWQmJih1dChXZSksMD09PVdlLmxvb2thaGVhZCkpe2lmKFR0PT09VylyZXR1cm4gMTticmVha31pZihX''@;'; put 'put ''ZS5tYXRjaF9sZW5ndGg9MCxucj1OLl90cl90YWxseShXZSwwLFdlLndpbmRvd1tXZS5zdHJzdGFydF0pLFdlLmxvb2thaGVhZC0tLFdlLnN0cnN0YXJ0KyssbnImJihEdChXZSwhMSksMD09PVdlLnN0cm0uYXZhaWxfb3V0KSlyZXR1cm4gMX1yZXR1cm4gV2UuaW5zZXJ0PTAsND09PVR0PyhE''@;'; put 'put ''dChXZSwhMCksMD09PVdlLnN0cm0uYXZhaWxfb3V0PzM6NCk6V2UubGFzdF9saXQmJihEdChXZSwhMSksMD09PVdlLnN0cm0uYXZhaWxfb3V0KT8xOjJ9KGh0LFR0KTozPT09aHQuc3RyYXRlZ3k/ZnVuY3Rpb24gY2koV2UsVHQpe2Zvcih2YXIgbnIsaHQseHQsam4scm49V2Uud2luZG93Ozsp''@;'; put 'put ''e2lmKFdlLmxvb2thaGVhZDw9SmUpe2lmKHV0KFdlKSxXZS5sb29rYWhlYWQ8PUplJiZUdD09PVcpcmV0dXJuIDE7aWYoMD09PVdlLmxvb2thaGVhZClicmVha31pZihXZS5tYXRjaF9sZW5ndGg9MCxXZS5sb29rYWhlYWQ+PVVlJiZXZS5zdHJzdGFydD4wJiYoaHQ9cm5beHQ9V2Uuc3Ryc3Rh''@;'; put 'put ''cnQtMV0pPT09cm5bKyt4dF0mJmh0PT09cm5bKyt4dF0mJmh0PT09cm5bKyt4dF0pe2puPVdlLnN0cnN0YXJ0K0plO2Rve313aGlsZShodD09PXJuWysreHRdJiZodD09PXJuWysreHRdJiZodD09PXJuWysreHRdJiZodD09PXJuWysreHRdJiZodD09PXJuWysreHRdJiZodD09PXJuWysreHRd''@;'; put 'put ''JiZodD09PXJuWysreHRdJiZodD09PXJuWysreHRdJiZ4dDxqbik7V2UubWF0Y2hfbGVuZ3RoPUplLShqbi14dCksV2UubWF0Y2hfbGVuZ3RoPldlLmxvb2thaGVhZCYmKFdlLm1hdGNoX2xlbmd0aD1XZS5sb29rYWhlYWQpfWlmKFdlLm1hdGNoX2xlbmd0aD49VWU/KG5yPU4uX3RyX3RhbGx5''@;'; put 'put ''KFdlLDEsV2UubWF0Y2hfbGVuZ3RoLVVlKSxXZS5sb29rYWhlYWQtPVdlLm1hdGNoX2xlbmd0aCxXZS5zdHJzdGFydCs9V2UubWF0Y2hfbGVuZ3RoLFdlLm1hdGNoX2xlbmd0aD0wKToobnI9Ti5fdHJfdGFsbHkoV2UsMCxXZS53aW5kb3dbV2Uuc3Ryc3RhcnRdKSxXZS5sb29rYWhlYWQtLSxX''@;'; put 'put ''ZS5zdHJzdGFydCsrKSxuciYmKER0KFdlLCExKSwwPT09V2Uuc3RybS5hdmFpbF9vdXQpKXJldHVybiAxfXJldHVybiBXZS5pbnNlcnQ9MCw0PT09VHQ/KER0KFdlLCEwKSwwPT09V2Uuc3RybS5hdmFpbF9vdXQ/Mzo0KTpXZS5sYXN0X2xpdCYmKER0KFdlLCExKSwwPT09V2Uuc3RybS5hdmFp''@;'; put 'put ''bF9vdXQpPzE6Mn0oaHQsVHQpOlJpW2h0LmxldmVsXS5mdW5jKGh0LFR0KTtpZigoMz09PWhpfHw0PT09aGkpJiYoaHQuc3RhdHVzPTY2NiksMT09PWhpfHwzPT09aGkpcmV0dXJuIDA9PT1XZS5hdmFpbF9vdXQmJihodC5sYXN0X2ZsdXNoPS0xKSxuZTtpZigyPT09aGkmJigxPT09VHQ/Ti5f''@;'; put 'put ''dHJfYWxpZ24oaHQpOjUhPT1UdCYmKE4uX3RyX3N0b3JlZF9ibG9jayhodCwwLDAsITEpLDM9PT1UdCYmKHl0KGh0LmhlYWQpLDA9PT1odC5sb29rYWhlYWQmJihodC5zdHJzdGFydD0wLGh0LmJsb2NrX3N0YXJ0PTAsaHQuaW5zZXJ0PTApKSksTXQoV2UpLDA9PT1XZS5hdmFpbF9vdXQpKXJl''@;'; put 'put ''dHVybiBodC5sYXN0X2ZsdXNoPS0xLG5lfXJldHVybiA0IT09VHQ/bmU6aHQud3JhcDw9MD8xOigyPT09aHQud3JhcD8oaXQoaHQsMjU1JldlLmFkbGVyKSxpdChodCxXZS5hZGxlcj4+OCYyNTUpLGl0KGh0LFdlLmFkbGVyPj4xNiYyNTUpLGl0KGh0LFdlLmFkbGVyPj4yNCYyNTUpLGl0KGh0''@;'; put 'put ''LDI1NSZXZS50b3RhbF9pbiksaXQoaHQsV2UudG90YWxfaW4+PjgmMjU1KSxpdChodCxXZS50b3RhbF9pbj4+MTYmMjU1KSxpdChodCxXZS50b3RhbF9pbj4+MjQmMjU1KSk6KCRlKGh0LFdlLmFkbGVyPj4+MTYpLCRlKGh0LDY1NTM1JldlLmFkbGVyKSksTXQoV2UpLGh0LndyYXA+MCYmKGh0''@;'; put 'put ''LndyYXA9LWh0LndyYXApLDAhPT1odC5wZW5kaW5nP25lOjEpfSxPLmRlZmxhdGVFbmQ9ZnVuY3Rpb24gcmkoV2Upe3ZhciBUdDtyZXR1cm4gV2UmJldlLnN0YXRlPyhUdD1XZS5zdGF0ZS5zdGF0dXMpIT09dmUmJjY5IT09VHQmJjczIT09VHQmJjkxIT09VHQmJjEwMyE9PVR0JiZUdCE9PU9l''@;'; put 'put ''JiY2NjYhPT1UdD9RZShXZSxsZSk6KFdlLnN0YXRlPW51bGwsVHQ9PT1PZT9RZShXZSwtMyk6bmUpOmxlfSxPLmRlZmxhdGVJbmZvPSJwYWtvIGRlZmxhdGUgKGZyb20gTm9kZWNhIHByb2plY3QpIn0seyIuLi91dGlscy9jb21tb24iOjI3LCIuL2FkbGVyMzIiOjI5LCIuL2NyYzMyIjozMSwi''@;'; put 'put ''Li9tZXNzYWdlcyI6MzcsIi4vdHJlZXMiOjM4fV0sMzM6W2Z1bmN0aW9uKFAsRixPKXsidXNlIHN0cmljdCI7Ri5leHBvcnRzPWZ1bmN0aW9uIHooKXt0aGlzLnRleHQ9MCx0aGlzLnRpbWU9MCx0aGlzLnhmbGFncz0wLHRoaXMub3M9MCx0aGlzLmV4dHJhPW51bGwsdGhpcy5leHRyYV9sZW49''@;'; put 'put ''MCx0aGlzLm5hbWU9IiIsdGhpcy5jb21tZW50PSIiLHRoaXMuaGNyYz0wLHRoaXMuZG9uZT0hMX19LHt9XSwzNDpbZnVuY3Rpb24oUCxGLE8peyJ1c2Ugc3RyaWN0IjtGLmV4cG9ydHM9ZnVuY3Rpb24oSyxVKXt2YXIgVyxZLHEsZWUsSixuZSxpZSxsZSxtZSxfZSxUZSxTZSxqZSxWLHAsYix4''@;'; put 'put ''LEMsVCxILGosRSxtLEEsYWU7QT1LLmlucHV0LHE9KFk9Sy5uZXh0X2luKSsoSy5hdmFpbF9pbi01KSxhZT1LLm91dHB1dCxKPShlZT1LLm5leHRfb3V0KS0oVS1LLmF2YWlsX291dCksbmU9ZWUrKEsuYXZhaWxfb3V0LTI1NyksaWU9KFc9Sy5zdGF0ZSkuZG1heCxsZT1XLndzaXplLG1lPVcu''@;'; put 'put ''d2hhdmUsX2U9Vy53bmV4dCxUZT1XLndpbmRvdyxTZT1XLmhvbGQsamU9Vy5iaXRzLFY9Vy5sZW5jb2RlLHA9Vy5kaXN0Y29kZSxiPSgxPDxXLmxlbmJpdHMpLTEseD0oMTw8Vy5kaXN0Yml0cyktMTtlOmRve2plPDE1JiYoU2UrPUFbWSsrXTw8amUsU2UrPUFbWSsrXTw8KGplKz04KSxqZSs9''@;'; put 'put ''OCksQz1WW1NlJmJdO3Q6Zm9yKDs7KXtpZihTZT4+Pj1UPUM+Pj4yNCxqZS09VCwwPT0oVD1DPj4+MTYmMjU1KSlhZVtlZSsrXT02NTUzNSZDO2Vsc2V7aWYoISgxNiZUKSl7aWYoNjQmVCl7aWYoMzImVCl7Vy5tb2RlPTEyO2JyZWFrIGV9Sy5tc2c9ImludmFsaWQgbGl0ZXJhbC9sZW5ndGgg''@;'; put 'put ''Y29kZSIsVy5tb2RlPTMwO2JyZWFrIGV9Qz1WWyg2NTUzNSZDKSsoU2UmKDE8PFQpLTEpXTtjb250aW51ZSB0fWZvcihIPTY1NTM1JkMsKFQmPTE1KSYmKGplPFQmJihTZSs9QVtZKytdPDxqZSxqZSs9OCksSCs9U2UmKDE8PFQpLTEsU2U+Pj49VCxqZS09VCksamU8MTUmJihTZSs9QVtZKytd''@;'; put 'put ''PDxqZSxTZSs9QVtZKytdPDwoamUrPTgpLGplKz04KSxDPXBbU2UmeF07Oyl7aWYoU2U+Pj49VD1DPj4+MjQsamUtPVQsMTYmKFQ9Qz4+PjE2JjI1NSkpe2lmKGo9NjU1MzUmQyxqZTwoVCY9MTUpJiYoU2UrPUFbWSsrXTw8amUsKGplKz04KTxUJiYoU2UrPUFbWSsrXTw8amUsamUrPTgpKSwo''@;'; put 'put ''ais9U2UmKDE8PFQpLTEpPmllKXtLLm1zZz0iaW52YWxpZCBkaXN0YW5jZSB0b28gZmFyIGJhY2siLFcubW9kZT0zMDticmVhayBlfWlmKFNlPj4+PVQsamUtPVQsaj4oVD1lZS1KKSl7aWYoKFQ9ai1UKT5tZSYmVy5zYW5lKXtLLm1zZz0iaW52YWxpZCBkaXN0YW5jZSB0b28gZmFyIGJhY2si''@;'; put 'put ''LFcubW9kZT0zMDticmVhayBlfWlmKEU9MCxtPVRlLDA9PT1fZSl7aWYoRSs9bGUtVCxUPEgpe0gtPVQ7ZG97YWVbZWUrK109VGVbRSsrXX13aGlsZSgtLVQpO0U9ZWUtaixtPWFlfX1lbHNlIGlmKF9lPFQpe2lmKEUrPWxlK19lLVQsKFQtPV9lKTxIKXtILT1UO2Rve2FlW2VlKytdPVRlW0Ur''@;'; put 'put ''K119d2hpbGUoLS1UKTtpZihFPTAsX2U8SCl7SC09VD1fZTtkb3thZVtlZSsrXT1UZVtFKytdfXdoaWxlKC0tVCk7RT1lZS1qLG09YWV9fX1lbHNlIGlmKEUrPV9lLVQsVDxIKXtILT1UO2Rve2FlW2VlKytdPVRlW0UrK119d2hpbGUoLS1UKTtFPWVlLWosbT1hZX1mb3IoO0g+MjspYWVbZWUr''@;'; put 'put ''K109bVtFKytdLGFlW2VlKytdPW1bRSsrXSxhZVtlZSsrXT1tW0UrK10sSC09MztIJiYoYWVbZWUrK109bVtFKytdLEg+MSYmKGFlW2VlKytdPW1bRSsrXSkpfWVsc2V7RT1lZS1qO2Rve2FlW2VlKytdPWFlW0UrK10sYWVbZWUrK109YWVbRSsrXSxhZVtlZSsrXT1hZVtFKytdLEgtPTN9d2hp''@;'; put 'put ''bGUoSD4yKTtIJiYoYWVbZWUrK109YWVbRSsrXSxIPjEmJihhZVtlZSsrXT1hZVtFKytdKSl9YnJlYWt9aWYoNjQmVCl7Sy5tc2c9ImludmFsaWQgZGlzdGFuY2UgY29kZSIsVy5tb2RlPTMwO2JyZWFrIGV9Qz1wWyg2NTUzNSZDKSsoU2UmKDE8PFQpLTEpXX19YnJlYWt9fXdoaWxlKFk8cSYm''@;'; put 'put ''ZWU8bmUpO1NlJj0oMTw8KGplLT0oSD1qZT4+Myk8PDMpKS0xLEsubmV4dF9pbj1ZLT1ILEsubmV4dF9vdXQ9ZWUsSy5hdmFpbF9pbj1ZPHE/cS1ZKzU6NS0oWS1xKSxLLmF2YWlsX291dD1lZTxuZT9uZS1lZSsyNTc6MjU3LShlZS1uZSksVy5ob2xkPVNlLFcuYml0cz1qZX19LHt9XSwzNTpb''@;'; put 'put ''ZnVuY3Rpb24oUCxGLE8peyJ1c2Ugc3RyaWN0Ijt2YXIgej1QKCIuLi91dGlscy9jb21tb24iKSxOPVAoIi4vYWRsZXIzMiIpLEw9UCgiLi9jcmMzMiIpLEs9UCgiLi9pbmZmYXN0IiksVT1QKCIuL2luZnRyZWVzIiksaWU9MCxfZT0tMixwPTEseXQ9ODUyLE10PTU5MjtmdW5jdGlvbiAkZShB''@;'; put 'put ''dCl7cmV0dXJuKEF0Pj4+MjQmMjU1KSsoQXQ+Pj44JjY1MjgwKSsoKDY1MjgwJkF0KTw8OCkrKCgyNTUmQXQpPDwyNCl9ZnVuY3Rpb24gdHQoKXt0aGlzLm1vZGU9MCx0aGlzLmxhc3Q9ITEsdGhpcy53cmFwPTAsdGhpcy5oYXZlZGljdD0hMSx0aGlzLmZsYWdzPTAsdGhpcy5kbWF4PTAsdGhp''@;'; put 'put ''cy5jaGVjaz0wLHRoaXMudG90YWw9MCx0aGlzLmhlYWQ9bnVsbCx0aGlzLndiaXRzPTAsdGhpcy53c2l6ZT0wLHRoaXMud2hhdmU9MCx0aGlzLnduZXh0PTAsdGhpcy53aW5kb3c9bnVsbCx0aGlzLmhvbGQ9MCx0aGlzLmJpdHM9MCx0aGlzLmxlbmd0aD0wLHRoaXMub2Zmc2V0PTAsdGhpcy5l''@;'; put 'put ''eHRyYT0wLHRoaXMubGVuY29kZT1udWxsLHRoaXMuZGlzdGNvZGU9bnVsbCx0aGlzLmxlbmJpdHM9MCx0aGlzLmRpc3RiaXRzPTAsdGhpcy5uY29kZT0wLHRoaXMubmxlbj0wLHRoaXMubmRpc3Q9MCx0aGlzLmhhdmU9MCx0aGlzLm5leHQ9bnVsbCx0aGlzLmxlbnM9bmV3IHouQnVmMTYoMzIw''@;'; put 'put ''KSx0aGlzLndvcms9bmV3IHouQnVmMTYoMjg4KSx0aGlzLmxlbmR5bj1udWxsLHRoaXMuZGlzdGR5bj1udWxsLHRoaXMuc2FuZT0wLHRoaXMuYmFjaz0wLHRoaXMud2FzPTB9ZnVuY3Rpb24gSGUoQXQpe3ZhciBSbjtyZXR1cm4gQXQmJkF0LnN0YXRlPyhBdC50b3RhbF9pbj1BdC50b3RhbF9v''@;'; put 'put ''dXQ9KFJuPUF0LnN0YXRlKS50b3RhbD0wLEF0Lm1zZz0iIixSbi53cmFwJiYoQXQuYWRsZXI9MSZSbi53cmFwKSxSbi5tb2RlPXAsUm4ubGFzdD0wLFJuLmhhdmVkaWN0PTAsUm4uZG1heD0zMjc2OCxSbi5oZWFkPW51bGwsUm4uaG9sZD0wLFJuLmJpdHM9MCxSbi5sZW5jb2RlPVJuLmxlbmR5''@;'; put 'put ''bj1uZXcgei5CdWYzMih5dCksUm4uZGlzdGNvZGU9Um4uZGlzdGR5bj1uZXcgei5CdWYzMihNdCksUm4uc2FuZT0xLFJuLmJhY2s9LTEsaWUpOl9lfWZ1bmN0aW9uIHV0KEF0KXt2YXIgUm47cmV0dXJuIEF0JiZBdC5zdGF0ZT8oKFJuPUF0LnN0YXRlKS53c2l6ZT0wLFJuLndoYXZlPTAsUm4u''@;'; put 'put ''d25leHQ9MCxIZShBdCkpOl9lfWZ1bmN0aW9uIHF0KEF0LFJuKXt2YXIgc3QsVXQ7cmV0dXJuIUF0fHwhQXQuc3RhdGV8fChVdD1BdC5zdGF0ZSxSbjwwPyhzdD0wLFJuPS1Sbik6KHN0PTErKFJuPj40KSxSbjw0OCYmKFJuJj0xNSkpLFJuJiYoUm48OHx8Um4+MTUpKT9fZToobnVsbCE9PVV0''@;'; put 'put ''LndpbmRvdyYmVXQud2JpdHMhPT1SbiYmKFV0LndpbmRvdz1udWxsKSxVdC53cmFwPXN0LFV0LndiaXRzPVJuLHV0KEF0KSl9ZnVuY3Rpb24gUnQoQXQsUm4pe3ZhciBzdCxVdDtyZXR1cm4gQXQ/KFV0PW5ldyB0dCxBdC5zdGF0ZT1VdCxVdC53aW5kb3c9bnVsbCwoc3Q9cXQoQXQsUm4pKSE9''@;'; put 'put ''PWllJiYoQXQuc3RhdGU9bnVsbCksc3QpOl9lfXZhciBRdCxzbixjaT0hMDtmdW5jdGlvbiBSaShBdCl7aWYoY2kpe3ZhciBSbjtmb3IoUXQ9bmV3IHouQnVmMzIoNTEyKSxzbj1uZXcgei5CdWYzMigzMiksUm49MDtSbjwxNDQ7KUF0LmxlbnNbUm4rK109ODtmb3IoO1JuPDI1NjspQXQubGVu''@;'; put 'put ''c1tSbisrXT05O2Zvcig7Um48MjgwOylBdC5sZW5zW1JuKytdPTc7Zm9yKDtSbjwyODg7KUF0LmxlbnNbUm4rK109ODtmb3IoVSgxLEF0LmxlbnMsMCwyODgsUXQsMCxBdC53b3JrLHtiaXRzOjl9KSxSbj0wO1JuPDMyOylBdC5sZW5zW1JuKytdPTU7VSgyLEF0LmxlbnMsMCwzMixzbiwwLEF0''@;'; put 'put ''Lndvcmsse2JpdHM6NX0pLGNpPSExfUF0LmxlbmNvZGU9UXQsQXQubGVuYml0cz05LEF0LmRpc3Rjb2RlPXNuLEF0LmRpc3RiaXRzPTV9Ty5pbmZsYXRlUmVzZXQ9dXQsTy5pbmZsYXRlUmVzZXQyPXF0LE8uaW5mbGF0ZVJlc2V0S2VlcD1IZSxPLmluZmxhdGVJbml0PWZ1bmN0aW9uIFB0KEF0''@;'; put 'put ''KXtyZXR1cm4gUnQoQXQsMTUpfSxPLmluZmxhdGVJbml0Mj1SdCxPLmluZmxhdGU9ZnVuY3Rpb24gZnQoQXQsUm4pe3ZhciBzdCxVdCxyaSxXZSxUdCxucixodCx4dCxqbixybix6dCxoaSxjbixmbixYdCxlbix1YSxFaSx2cixXbiwkaSxlaSxWaSxOaSxJaT0wLFFyPW5ldyB6LkJ1ZjgoNCks''@;'; put 'put ''RGE9WzE2LDE3LDE4LDAsOCw3LDksNiwxMCw1LDExLDQsMTIsMywxMywyLDE0LDEsMTVdO2lmKCFBdHx8IUF0LnN0YXRlfHwhQXQub3V0cHV0fHwhQXQuaW5wdXQmJjAhPT1BdC5hdmFpbF9pbilyZXR1cm4gX2U7MTI9PT0oc3Q9QXQuc3RhdGUpLm1vZGUmJihzdC5tb2RlPTEzKSxUdD1BdC5u''@;'; put 'put ''ZXh0X291dCxyaT1BdC5vdXRwdXQsV2U9QXQubmV4dF9pbixVdD1BdC5pbnB1dCx4dD1zdC5ob2xkLGpuPXN0LmJpdHMscm49bnI9QXQuYXZhaWxfaW4senQ9aHQ9QXQuYXZhaWxfb3V0LGVpPWllO2U6Zm9yKDs7KXN3aXRjaChzdC5tb2RlKXtjYXNlIHA6aWYoMD09PXN0LndyYXApe3N0Lm1v''@;'; put 'put ''ZGU9MTM7YnJlYWt9Zm9yKDtqbjwxNjspe2lmKDA9PT1ucilicmVhayBlO25yLS0seHQrPVV0W1dlKytdPDxqbixqbis9OH1pZigyJnN0LndyYXAmJjM1NjE1PT09eHQpe3N0LmNoZWNrPTAsUXJbMF09MjU1Jnh0LFFyWzFdPXh0Pj4+OCYyNTUsc3QuY2hlY2s9TChzdC5jaGVjayxRciwyLDAp''@;'; put 'put ''LHh0PTAsam49MCxzdC5tb2RlPTI7YnJlYWt9aWYoc3QuZmxhZ3M9MCxzdC5oZWFkJiYoc3QuaGVhZC5kb25lPSExKSwhKDEmc3Qud3JhcCl8fCgoKDI1NSZ4dCk8PDgpKyh4dD4+OCkpJTMxKXtBdC5tc2c9ImluY29ycmVjdCBoZWFkZXIgY2hlY2siLHN0Lm1vZGU9MzA7YnJlYWt9aWYoOCE9''@;'; put 'put ''KDE1Jnh0KSl7QXQubXNnPSJ1bmtub3duIGNvbXByZXNzaW9uIG1ldGhvZCIsc3QubW9kZT0zMDticmVha31pZihqbi09NCwkaT04KygxNSYoeHQ+Pj49NCkpLDA9PT1zdC53Yml0cylzdC53Yml0cz0kaTtlbHNlIGlmKCRpPnN0LndiaXRzKXtBdC5tc2c9ImludmFsaWQgd2luZG93IHNpemUi''@;'; put 'put ''LHN0Lm1vZGU9MzA7YnJlYWt9c3QuZG1heD0xPDwkaSxBdC5hZGxlcj1zdC5jaGVjaz0xLHN0Lm1vZGU9NTEyJnh0PzEwOjEyLHh0PTAsam49MDticmVhaztjYXNlIDI6Zm9yKDtqbjwxNjspe2lmKDA9PT1ucilicmVhayBlO25yLS0seHQrPVV0W1dlKytdPDxqbixqbis9OH1pZihzdC5mbGFn''@;'; put 'put ''cz14dCw4IT0oMjU1JnN0LmZsYWdzKSl7QXQubXNnPSJ1bmtub3duIGNvbXByZXNzaW9uIG1ldGhvZCIsc3QubW9kZT0zMDticmVha31pZig1NzM0NCZzdC5mbGFncyl7QXQubXNnPSJ1bmtub3duIGhlYWRlciBmbGFncyBzZXQiLHN0Lm1vZGU9MzA7YnJlYWt9c3QuaGVhZCYmKHN0LmhlYWQu''@;'; put 'put ''dGV4dD14dD4+OCYxKSw1MTImc3QuZmxhZ3MmJihRclswXT0yNTUmeHQsUXJbMV09eHQ+Pj44JjI1NSxzdC5jaGVjaz1MKHN0LmNoZWNrLFFyLDIsMCkpLHh0PTAsam49MCxzdC5tb2RlPTM7Y2FzZSAzOmZvcig7am48MzI7KXtpZigwPT09bnIpYnJlYWsgZTtuci0tLHh0Kz1VdFtXZSsrXTw8''@;'; put 'put ''am4sam4rPTh9c3QuaGVhZCYmKHN0LmhlYWQudGltZT14dCksNTEyJnN0LmZsYWdzJiYoUXJbMF09MjU1Jnh0LFFyWzFdPXh0Pj4+OCYyNTUsUXJbMl09eHQ+Pj4xNiYyNTUsUXJbM109eHQ+Pj4yNCYyNTUsc3QuY2hlY2s9TChzdC5jaGVjayxRciw0LDApKSx4dD0wLGpuPTAsc3QubW9kZT00''@;'; put 'put ''O2Nhc2UgNDpmb3IoO2puPDE2Oyl7aWYoMD09PW5yKWJyZWFrIGU7bnItLSx4dCs9VXRbV2UrK108PGpuLGpuKz04fXN0LmhlYWQmJihzdC5oZWFkLnhmbGFncz0yNTUmeHQsc3QuaGVhZC5vcz14dD4+OCksNTEyJnN0LmZsYWdzJiYoUXJbMF09MjU1Jnh0LFFyWzFdPXh0Pj4+OCYyNTUsc3Qu''@;'; put 'put ''Y2hlY2s9TChzdC5jaGVjayxRciwyLDApKSx4dD0wLGpuPTAsc3QubW9kZT01O2Nhc2UgNTppZigxMDI0JnN0LmZsYWdzKXtmb3IoO2puPDE2Oyl7aWYoMD09PW5yKWJyZWFrIGU7bnItLSx4dCs9VXRbV2UrK108PGpuLGpuKz04fXN0Lmxlbmd0aD14dCxzdC5oZWFkJiYoc3QuaGVhZC5leHRy''@;'; put 'put ''YV9sZW49eHQpLDUxMiZzdC5mbGFncyYmKFFyWzBdPTI1NSZ4dCxRclsxXT14dD4+PjgmMjU1LHN0LmNoZWNrPUwoc3QuY2hlY2ssUXIsMiwwKSkseHQ9MCxqbj0wfWVsc2Ugc3QuaGVhZCYmKHN0LmhlYWQuZXh0cmE9bnVsbCk7c3QubW9kZT02O2Nhc2UgNjppZigxMDI0JnN0LmZsYWdzJiYo''@;'; put 'put ''KGhpPXN0Lmxlbmd0aCk+bnImJihoaT1uciksaGkmJihzdC5oZWFkJiYoJGk9c3QuaGVhZC5leHRyYV9sZW4tc3QubGVuZ3RoLHN0LmhlYWQuZXh0cmF8fChzdC5oZWFkLmV4dHJhPW5ldyBBcnJheShzdC5oZWFkLmV4dHJhX2xlbikpLHouYXJyYXlTZXQoc3QuaGVhZC5leHRyYSxVdCxXZSxo''@;'; put 'put ''aSwkaSkpLDUxMiZzdC5mbGFncyYmKHN0LmNoZWNrPUwoc3QuY2hlY2ssVXQsaGksV2UpKSxuci09aGksV2UrPWhpLHN0Lmxlbmd0aC09aGkpLHN0Lmxlbmd0aCkpYnJlYWsgZTtzdC5sZW5ndGg9MCxzdC5tb2RlPTc7Y2FzZSA3OmlmKDIwNDgmc3QuZmxhZ3Mpe2lmKDA9PT1ucilicmVhayBl''@;'; put 'put ''O2hpPTA7ZG97JGk9VXRbV2UraGkrK10sc3QuaGVhZCYmJGkmJnN0Lmxlbmd0aDw2NTUzNiYmKHN0LmhlYWQubmFtZSs9U3RyaW5nLmZyb21DaGFyQ29kZSgkaSkpfXdoaWxlKCRpJiZoaTxucik7aWYoNTEyJnN0LmZsYWdzJiYoc3QuY2hlY2s9TChzdC5jaGVjayxVdCxoaSxXZSkpLG5yLT1o''@;'; put 'put ''aSxXZSs9aGksJGkpYnJlYWsgZX1lbHNlIHN0LmhlYWQmJihzdC5oZWFkLm5hbWU9bnVsbCk7c3QubGVuZ3RoPTAsc3QubW9kZT04O2Nhc2UgODppZig0MDk2JnN0LmZsYWdzKXtpZigwPT09bnIpYnJlYWsgZTtoaT0wO2RveyRpPVV0W1dlK2hpKytdLHN0LmhlYWQmJiRpJiZzdC5sZW5ndGg8''@;'; put 'put ''NjU1MzYmJihzdC5oZWFkLmNvbW1lbnQrPVN0cmluZy5mcm9tQ2hhckNvZGUoJGkpKX13aGlsZSgkaSYmaGk8bnIpO2lmKDUxMiZzdC5mbGFncyYmKHN0LmNoZWNrPUwoc3QuY2hlY2ssVXQsaGksV2UpKSxuci09aGksV2UrPWhpLCRpKWJyZWFrIGV9ZWxzZSBzdC5oZWFkJiYoc3QuaGVhZC5j''@;'; put 'put ''b21tZW50PW51bGwpO3N0Lm1vZGU9OTtjYXNlIDk6aWYoNTEyJnN0LmZsYWdzKXtmb3IoO2puPDE2Oyl7aWYoMD09PW5yKWJyZWFrIGU7bnItLSx4dCs9VXRbV2UrK108PGpuLGpuKz04fWlmKHh0IT09KDY1NTM1JnN0LmNoZWNrKSl7QXQubXNnPSJoZWFkZXIgY3JjIG1pc21hdGNoIixzdC5t''@;'; put 'put ''b2RlPTMwO2JyZWFrfXh0PTAsam49MH1zdC5oZWFkJiYoc3QuaGVhZC5oY3JjPXN0LmZsYWdzPj45JjEsc3QuaGVhZC5kb25lPSEwKSxBdC5hZGxlcj1zdC5jaGVjaz0wLHN0Lm1vZGU9MTI7YnJlYWs7Y2FzZSAxMDpmb3IoO2puPDMyOyl7aWYoMD09PW5yKWJyZWFrIGU7bnItLSx4dCs9VXRb''@;'; put 'put ''V2UrK108PGpuLGpuKz04fUF0LmFkbGVyPXN0LmNoZWNrPSRlKHh0KSx4dD0wLGpuPTAsc3QubW9kZT0xMTtjYXNlIDExOmlmKDA9PT1zdC5oYXZlZGljdClyZXR1cm4gQXQubmV4dF9vdXQ9VHQsQXQuYXZhaWxfb3V0PWh0LEF0Lm5leHRfaW49V2UsQXQuYXZhaWxfaW49bnIsc3QuaG9sZD14''@;'; put 'put ''dCxzdC5iaXRzPWpuLDI7QXQuYWRsZXI9c3QuY2hlY2s9MSxzdC5tb2RlPTEyO2Nhc2UgMTI6aWYoNT09PVJufHw2PT09Um4pYnJlYWsgZTtjYXNlIDEzOmlmKHN0Lmxhc3Qpe3h0Pj4+PTcmam4sam4tPTcmam4sc3QubW9kZT0yNzticmVha31mb3IoO2puPDM7KXtpZigwPT09bnIpYnJlYWsg''@;'; put 'put ''ZTtuci0tLHh0Kz1VdFtXZSsrXTw8am4sam4rPTh9c3dpdGNoKHN0Lmxhc3Q9MSZ4dCxqbi09MSwzJih4dD4+Pj0xKSl7Y2FzZSAwOnN0Lm1vZGU9MTQ7YnJlYWs7Y2FzZSAxOmlmKFJpKHN0KSxzdC5tb2RlPTIwLDY9PT1Sbil7eHQ+Pj49Mixqbi09MjticmVhayBlfWJyZWFrO2Nhc2UgMjpz''@;'; put 'put ''dC5tb2RlPTE3O2JyZWFrO2Nhc2UgMzpBdC5tc2c9ImludmFsaWQgYmxvY2sgdHlwZSIsc3QubW9kZT0zMH14dD4+Pj0yLGpuLT0yO2JyZWFrO2Nhc2UgMTQ6Zm9yKHh0Pj4+PTcmam4sam4tPTcmam47am48MzI7KXtpZigwPT09bnIpYnJlYWsgZTtuci0tLHh0Kz1VdFtXZSsrXTw8am4sam4r''@;'; put 'put ''PTh9aWYoKDY1NTM1Jnh0KSE9KHh0Pj4+MTZeNjU1MzUpKXtBdC5tc2c9ImludmFsaWQgc3RvcmVkIGJsb2NrIGxlbmd0aHMiLHN0Lm1vZGU9MzA7YnJlYWt9aWYoc3QubGVuZ3RoPTY1NTM1Jnh0LHh0PTAsam49MCxzdC5tb2RlPTE1LDY9PT1SbilicmVhayBlO2Nhc2UgMTU6c3QubW9kZT0x''@;'; put 'put ''NjtjYXNlIDE2OmlmKGhpPXN0Lmxlbmd0aCl7aWYoaGk+bnImJihoaT1uciksaGk+aHQmJihoaT1odCksMD09PWhpKWJyZWFrIGU7ei5hcnJheVNldChyaSxVdCxXZSxoaSxUdCksbnItPWhpLFdlKz1oaSxodC09aGksVHQrPWhpLHN0Lmxlbmd0aC09aGk7YnJlYWt9c3QubW9kZT0xMjticmVh''@;'; put 'put ''aztjYXNlIDE3OmZvcig7am48MTQ7KXtpZigwPT09bnIpYnJlYWsgZTtuci0tLHh0Kz1VdFtXZSsrXTw8am4sam4rPTh9aWYoc3Qubmxlbj0yNTcrKDMxJnh0KSxqbi09NSxzdC5uZGlzdD0xKygzMSYoeHQ+Pj49NSkpLGpuLT01LHN0Lm5jb2RlPTQrKDE1Jih4dD4+Pj01KSkseHQ+Pj49NCxq''@;'; put 'put ''bi09NCxzdC5ubGVuPjI4Nnx8c3QubmRpc3Q+MzApe0F0Lm1zZz0idG9vIG1hbnkgbGVuZ3RoIG9yIGRpc3RhbmNlIHN5bWJvbHMiLHN0Lm1vZGU9MzA7YnJlYWt9c3QuaGF2ZT0wLHN0Lm1vZGU9MTg7Y2FzZSAxODpmb3IoO3N0LmhhdmU8c3QubmNvZGU7KXtmb3IoO2puPDM7KXtpZigwPT09''@;'; put 'put ''bnIpYnJlYWsgZTtuci0tLHh0Kz1VdFtXZSsrXTw8am4sam4rPTh9c3QubGVuc1tEYVtzdC5oYXZlKytdXT03Jnh0LHh0Pj4+PTMsam4tPTN9Zm9yKDtzdC5oYXZlPDE5OylzdC5sZW5zW0RhW3N0LmhhdmUrK11dPTA7aWYoc3QubGVuY29kZT1zdC5sZW5keW4sc3QubGVuYml0cz03LGVpPVUo''@;'; put 'put ''MCxzdC5sZW5zLDAsMTksc3QubGVuY29kZSwwLHN0LndvcmssVmk9e2JpdHM6c3QubGVuYml0c30pLHN0LmxlbmJpdHM9VmkuYml0cyxlaSl7QXQubXNnPSJpbnZhbGlkIGNvZGUgbGVuZ3RocyBzZXQiLHN0Lm1vZGU9MzA7YnJlYWt9c3QuaGF2ZT0wLHN0Lm1vZGU9MTk7Y2FzZSAxOTpmb3Io''@;'; put 'put ''O3N0LmhhdmU8c3QubmxlbitzdC5uZGlzdDspe2Zvcig7ZW49KElpPXN0LmxlbmNvZGVbeHQmKDE8PHN0LmxlbmJpdHMpLTFdKT4+PjE2JjI1NSx1YT02NTUzNSZJaSwhKChYdD1JaT4+PjI0KTw9am4pOyl7aWYoMD09PW5yKWJyZWFrIGU7bnItLSx4dCs9VXRbV2UrK108PGpuLGpuKz04fWlm''@;'; put 'put ''KHVhPDE2KXh0Pj4+PVh0LGpuLT1YdCxzdC5sZW5zW3N0LmhhdmUrK109dWE7ZWxzZXtpZigxNj09PXVhKXtmb3IoTmk9WHQrMjtqbjxOaTspe2lmKDA9PT1ucilicmVhayBlO25yLS0seHQrPVV0W1dlKytdPDxqbixqbis9OH1pZih4dD4+Pj1YdCxqbi09WHQsMD09PXN0LmhhdmUpe0F0Lm1z''@;'; put 'put ''Zz0iaW52YWxpZCBiaXQgbGVuZ3RoIHJlcGVhdCIsc3QubW9kZT0zMDticmVha30kaT1zdC5sZW5zW3N0LmhhdmUtMV0saGk9MysoMyZ4dCkseHQ+Pj49Mixqbi09Mn1lbHNlIGlmKDE3PT09dWEpe2ZvcihOaT1YdCszO2puPE5pOyl7aWYoMD09PW5yKWJyZWFrIGU7bnItLSx4dCs9VXRbV2Ur''@;'; put 'put ''K108PGpuLGpuKz04fWpuLT1YdCwkaT0wLGhpPTMrKDcmKHh0Pj4+PVh0KSkseHQ+Pj49Myxqbi09M31lbHNle2ZvcihOaT1YdCs3O2puPE5pOyl7aWYoMD09PW5yKWJyZWFrIGU7bnItLSx4dCs9VXRbV2UrK108PGpuLGpuKz04fWpuLT1YdCwkaT0wLGhpPTExKygxMjcmKHh0Pj4+PVh0KSks''@;'; put 'put ''eHQ+Pj49Nyxqbi09N31pZihzdC5oYXZlK2hpPnN0Lm5sZW4rc3QubmRpc3Qpe0F0Lm1zZz0iaW52YWxpZCBiaXQgbGVuZ3RoIHJlcGVhdCIsc3QubW9kZT0zMDticmVha31mb3IoO2hpLS07KXN0LmxlbnNbc3QuaGF2ZSsrXT0kaX19aWYoMzA9PT1zdC5tb2RlKWJyZWFrO2lmKDA9PT1zdC5s''@;'; put 'put ''ZW5zWzI1Nl0pe0F0Lm1zZz0iaW52YWxpZCBjb2RlIC0tIG1pc3NpbmcgZW5kLW9mLWJsb2NrIixzdC5tb2RlPTMwO2JyZWFrfWlmKHN0LmxlbmJpdHM9OSxlaT1VKDEsc3QubGVucywwLHN0Lm5sZW4sc3QubGVuY29kZSwwLHN0LndvcmssVmk9e2JpdHM6c3QubGVuYml0c30pLHN0LmxlbmJp''@;'; put 'put ''dHM9VmkuYml0cyxlaSl7QXQubXNnPSJpbnZhbGlkIGxpdGVyYWwvbGVuZ3RocyBzZXQiLHN0Lm1vZGU9MzA7YnJlYWt9aWYoc3QuZGlzdGJpdHM9NixzdC5kaXN0Y29kZT1zdC5kaXN0ZHluLGVpPVUoMixzdC5sZW5zLHN0Lm5sZW4sc3QubmRpc3Qsc3QuZGlzdGNvZGUsMCxzdC53b3JrLFZp''@;'; put 'put ''PXtiaXRzOnN0LmRpc3RiaXRzfSksc3QuZGlzdGJpdHM9VmkuYml0cyxlaSl7QXQubXNnPSJpbnZhbGlkIGRpc3RhbmNlcyBzZXQiLHN0Lm1vZGU9MzA7YnJlYWt9aWYoc3QubW9kZT0yMCw2PT09Um4pYnJlYWsgZTtjYXNlIDIwOnN0Lm1vZGU9MjE7Y2FzZSAyMTppZihucj49NiYmaHQ+PTI1''@;'; put 'put ''OCl7QXQubmV4dF9vdXQ9VHQsQXQuYXZhaWxfb3V0PWh0LEF0Lm5leHRfaW49V2UsQXQuYXZhaWxfaW49bnIsc3QuaG9sZD14dCxzdC5iaXRzPWpuLEsoQXQsenQpLFR0PUF0Lm5leHRfb3V0LHJpPUF0Lm91dHB1dCxodD1BdC5hdmFpbF9vdXQsV2U9QXQubmV4dF9pbixVdD1BdC5pbnB1dCxu''@;'; put 'put ''cj1BdC5hdmFpbF9pbix4dD1zdC5ob2xkLGpuPXN0LmJpdHMsMTI9PT1zdC5tb2RlJiYoc3QuYmFjaz0tMSk7YnJlYWt9Zm9yKHN0LmJhY2s9MDtlbj0oSWk9c3QubGVuY29kZVt4dCYoMTw8c3QubGVuYml0cyktMV0pPj4+MTYmMjU1LHVhPTY1NTM1JklpLCEoKFh0PUlpPj4+MjQpPD1qbik7''@;'; put 'put ''KXtpZigwPT09bnIpYnJlYWsgZTtuci0tLHh0Kz1VdFtXZSsrXTw8am4sam4rPTh9aWYoZW4mJiEoMjQwJmVuKSl7Zm9yKEVpPVh0LHZyPWVuLFduPXVhO2VuPShJaT1zdC5sZW5jb2RlW1duKygoeHQmKDE8PEVpK3ZyKS0xKT4+RWkpXSk+Pj4xNiYyNTUsdWE9NjU1MzUmSWksIShFaSsoWHQ9''@;'; put 'put ''SWk+Pj4yNCk8PWpuKTspe2lmKDA9PT1ucilicmVhayBlO25yLS0seHQrPVV0W1dlKytdPDxqbixqbis9OH14dD4+Pj1FaSxqbi09RWksc3QuYmFjays9RWl9aWYoeHQ+Pj49WHQsam4tPVh0LHN0LmJhY2srPVh0LHN0Lmxlbmd0aD11YSwwPT09ZW4pe3N0Lm1vZGU9MjY7YnJlYWt9aWYoMzIm''@;'; put 'put ''ZW4pe3N0LmJhY2s9LTEsc3QubW9kZT0xMjticmVha31pZig2NCZlbil7QXQubXNnPSJpbnZhbGlkIGxpdGVyYWwvbGVuZ3RoIGNvZGUiLHN0Lm1vZGU9MzA7YnJlYWt9c3QuZXh0cmE9MTUmZW4sc3QubW9kZT0yMjtjYXNlIDIyOmlmKHN0LmV4dHJhKXtmb3IoTmk9c3QuZXh0cmE7am48Tmk7''@;'; put 'put ''KXtpZigwPT09bnIpYnJlYWsgZTtuci0tLHh0Kz1VdFtXZSsrXTw8am4sam4rPTh9c3QubGVuZ3RoKz14dCYoMTw8c3QuZXh0cmEpLTEseHQ+Pj49c3QuZXh0cmEsam4tPXN0LmV4dHJhLHN0LmJhY2srPXN0LmV4dHJhfXN0Lndhcz1zdC5sZW5ndGgsc3QubW9kZT0yMztjYXNlIDIzOmZvcig7''@;'; put 'put ''ZW49KElpPXN0LmRpc3Rjb2RlW3h0JigxPDxzdC5kaXN0Yml0cyktMV0pPj4+MTYmMjU1LHVhPTY1NTM1JklpLCEoKFh0PUlpPj4+MjQpPD1qbik7KXtpZigwPT09bnIpYnJlYWsgZTtuci0tLHh0Kz1VdFtXZSsrXTw8am4sam4rPTh9aWYoISgyNDAmZW4pKXtmb3IoRWk9WHQsdnI9ZW4sV249''@;'; put 'put ''dWE7ZW49KElpPXN0LmRpc3Rjb2RlW1duKygoeHQmKDE8PEVpK3ZyKS0xKT4+RWkpXSk+Pj4xNiYyNTUsdWE9NjU1MzUmSWksIShFaSsoWHQ9SWk+Pj4yNCk8PWpuKTspe2lmKDA9PT1ucilicmVhayBlO25yLS0seHQrPVV0W1dlKytdPDxqbixqbis9OH14dD4+Pj1FaSxqbi09RWksc3QuYmFj''@;'; put 'put ''ays9RWl9aWYoeHQ+Pj49WHQsam4tPVh0LHN0LmJhY2srPVh0LDY0JmVuKXtBdC5tc2c9ImludmFsaWQgZGlzdGFuY2UgY29kZSIsc3QubW9kZT0zMDticmVha31zdC5vZmZzZXQ9dWEsc3QuZXh0cmE9MTUmZW4sc3QubW9kZT0yNDtjYXNlIDI0OmlmKHN0LmV4dHJhKXtmb3IoTmk9c3QuZXh0''@;'; put 'put ''cmE7am48Tmk7KXtpZigwPT09bnIpYnJlYWsgZTtuci0tLHh0Kz1VdFtXZSsrXTw8am4sam4rPTh9c3Qub2Zmc2V0Kz14dCYoMTw8c3QuZXh0cmEpLTEseHQ+Pj49c3QuZXh0cmEsam4tPXN0LmV4dHJhLHN0LmJhY2srPXN0LmV4dHJhfWlmKHN0Lm9mZnNldD5zdC5kbWF4KXtBdC5tc2c9Imlu''@;'; put 'put ''dmFsaWQgZGlzdGFuY2UgdG9vIGZhciBiYWNrIixzdC5tb2RlPTMwO2JyZWFrfXN0Lm1vZGU9MjU7Y2FzZSAyNTppZigwPT09aHQpYnJlYWsgZTtpZihzdC5vZmZzZXQ+KGhpPXp0LWh0KSl7aWYoKGhpPXN0Lm9mZnNldC1oaSk+c3Qud2hhdmUmJnN0LnNhbmUpe0F0Lm1zZz0iaW52YWxpZCBk''@;'; put 'put ''aXN0YW5jZSB0b28gZmFyIGJhY2siLHN0Lm1vZGU9MzA7YnJlYWt9Y249aGk+c3Qud25leHQ/c3Qud3NpemUtKGhpLT1zdC53bmV4dCk6c3Qud25leHQtaGksaGk+c3QubGVuZ3RoJiYoaGk9c3QubGVuZ3RoKSxmbj1zdC53aW5kb3d9ZWxzZSBmbj1yaSxjbj1UdC1zdC5vZmZzZXQsaGk9c3Qu''@;'; put 'put ''bGVuZ3RoO2hpPmh0JiYoaGk9aHQpLGh0LT1oaSxzdC5sZW5ndGgtPWhpO2Rve3JpW1R0KytdPWZuW2NuKytdfXdoaWxlKC0taGkpOzA9PT1zdC5sZW5ndGgmJihzdC5tb2RlPTIxKTticmVhaztjYXNlIDI2OmlmKDA9PT1odClicmVhayBlO3JpW1R0KytdPXN0Lmxlbmd0aCxodC0tLHN0Lm1v''@;'; put 'put ''ZGU9MjE7YnJlYWs7Y2FzZSAyNzppZihzdC53cmFwKXtmb3IoO2puPDMyOyl7aWYoMD09PW5yKWJyZWFrIGU7bnItLSx4dHw9VXRbV2UrK108PGpuLGpuKz04fWlmKEF0LnRvdGFsX291dCs9enQtPWh0LHN0LnRvdGFsKz16dCx6dCYmKEF0LmFkbGVyPXN0LmNoZWNrPXN0LmZsYWdzP0woc3Qu''@;'; put 'put ''Y2hlY2sscmksenQsVHQtenQpOk4oc3QuY2hlY2sscmksenQsVHQtenQpKSx6dD1odCwoc3QuZmxhZ3M/eHQ6JGUoeHQpKSE9PXN0LmNoZWNrKXtBdC5tc2c9ImluY29ycmVjdCBkYXRhIGNoZWNrIixzdC5tb2RlPTMwO2JyZWFrfXh0PTAsam49MH1zdC5tb2RlPTI4O2Nhc2UgMjg6aWYoc3Qu''@;'; put 'put ''d3JhcCYmc3QuZmxhZ3Mpe2Zvcig7am48MzI7KXtpZigwPT09bnIpYnJlYWsgZTtuci0tLHh0Kz1VdFtXZSsrXTw8am4sam4rPTh9aWYoeHQhPT0oNDI5NDk2NzI5NSZzdC50b3RhbCkpe0F0Lm1zZz0iaW5jb3JyZWN0IGxlbmd0aCBjaGVjayIsc3QubW9kZT0zMDticmVha314dD0wLGpuPTB9''@;'; put 'put ''c3QubW9kZT0yOTtjYXNlIDI5OmVpPTE7YnJlYWsgZTtjYXNlIDMwOmVpPS0zO2JyZWFrIGU7Y2FzZSAzMTpyZXR1cm4tNDtkZWZhdWx0OnJldHVybiBfZX1yZXR1cm4gQXQubmV4dF9vdXQ9VHQsQXQuYXZhaWxfb3V0PWh0LEF0Lm5leHRfaW49V2UsQXQuYXZhaWxfaW49bnIsc3QuaG9sZD14''@;'; put 'put ''dCxzdC5iaXRzPWpuLChzdC53c2l6ZXx8enQhPT1BdC5hdmFpbF9vdXQmJnN0Lm1vZGU8MzAmJihzdC5tb2RlPDI3fHw0IT09Um4pKSYmZnVuY3Rpb24gaG4oQXQsUm4sc3QsVXQpe3ZhciByaSxXZT1BdC5zdGF0ZTtyZXR1cm4gbnVsbD09PVdlLndpbmRvdyYmKFdlLndzaXplPTE8PFdlLndi''@;'; put 'put ''aXRzLFdlLnduZXh0PTAsV2Uud2hhdmU9MCxXZS53aW5kb3c9bmV3IHouQnVmOChXZS53c2l6ZSkpLFV0Pj1XZS53c2l6ZT8oei5hcnJheVNldChXZS53aW5kb3csUm4sc3QtV2Uud3NpemUsV2Uud3NpemUsMCksV2Uud25leHQ9MCxXZS53aGF2ZT1XZS53c2l6ZSk6KChyaT1XZS53c2l6ZS1X''@;'; put 'put ''ZS53bmV4dCk+VXQmJihyaT1VdCksei5hcnJheVNldChXZS53aW5kb3csUm4sc3QtVXQscmksV2Uud25leHQpLChVdC09cmkpPyh6LmFycmF5U2V0KFdlLndpbmRvdyxSbixzdC1VdCxVdCwwKSxXZS53bmV4dD1VdCxXZS53aGF2ZT1XZS53c2l6ZSk6KFdlLnduZXh0Kz1yaSxXZS53bmV4dD09''@;'; put 'put ''PVdlLndzaXplJiYoV2Uud25leHQ9MCksV2Uud2hhdmU8V2Uud3NpemUmJihXZS53aGF2ZSs9cmkpKSksMH0oQXQsQXQub3V0cHV0LEF0Lm5leHRfb3V0LHp0LUF0LmF2YWlsX291dCk/KHN0Lm1vZGU9MzEsLTQpOih6dC09QXQuYXZhaWxfb3V0LEF0LnRvdGFsX2luKz1ybi09QXQuYXZhaWxf''@;'; put 'put ''aW4sQXQudG90YWxfb3V0Kz16dCxzdC50b3RhbCs9enQsc3Qud3JhcCYmenQmJihBdC5hZGxlcj1zdC5jaGVjaz1zdC5mbGFncz9MKHN0LmNoZWNrLHJpLHp0LEF0Lm5leHRfb3V0LXp0KTpOKHN0LmNoZWNrLHJpLHp0LEF0Lm5leHRfb3V0LXp0KSksQXQuZGF0YV90eXBlPXN0LmJpdHMrKHN0''@;'; put 'put ''Lmxhc3Q/NjQ6MCkrKDEyPT09c3QubW9kZT8xMjg6MCkrKDIwPT09c3QubW9kZXx8MTU9PT1zdC5tb2RlPzI1NjowKSwoMD09PXJuJiYwPT09enR8fDQ9PT1SbikmJmVpPT09aWUmJihlaT0tNSksZWkpfSxPLmluZmxhdGVFbmQ9ZnVuY3Rpb24gT3IoQXQpe2lmKCFBdHx8IUF0LnN0YXRlKXJl''@;'; put 'put ''dHVybiBfZTt2YXIgUm49QXQuc3RhdGU7cmV0dXJuIFJuLndpbmRvdyYmKFJuLndpbmRvdz1udWxsKSxBdC5zdGF0ZT1udWxsLGllfSxPLmluZmxhdGVHZXRIZWFkZXI9ZnVuY3Rpb24gV3QoQXQsUm4pe3ZhciBzdDtyZXR1cm4gQXQmJkF0LnN0YXRlJiYyJihzdD1BdC5zdGF0ZSkud3JhcD8o''@;'; put 'put ''c3QuaGVhZD1SbixSbi5kb25lPSExLGllKTpfZX0sTy5pbmZsYXRlSW5mbz0icGFrbyBpbmZsYXRlIChmcm9tIE5vZGVjYSBwcm9qZWN0KSJ9LHsiLi4vdXRpbHMvY29tbW9uIjoyNywiLi9hZGxlcjMyIjoyOSwiLi9jcmMzMiI6MzEsIi4vaW5mZmFzdCI6MzQsIi4vaW5mdHJlZXMiOjM2fV0s''@;'; put 'put ''MzY6W2Z1bmN0aW9uKFAsRixPKXsidXNlIHN0cmljdCI7dmFyIHo9UCgiLi4vdXRpbHMvY29tbW9uIikscT1bMyw0LDUsNiw3LDgsOSwxMCwxMSwxMywxNSwxNywxOSwyMywyNywzMSwzNSw0Myw1MSw1OSw2Nyw4Myw5OSwxMTUsMTMxLDE2MywxOTUsMjI3LDI1OCwwLDBdLGVlPVsxNiwxNiwx''@;'; put 'put ''NiwxNiwxNiwxNiwxNiwxNiwxNywxNywxNywxNywxOCwxOCwxOCwxOCwxOSwxOSwxOSwxOSwyMCwyMCwyMCwyMCwyMSwyMSwyMSwyMSwxNiw3Miw3OF0sSj1bMSwyLDMsNCw1LDcsOSwxMywxNywyNSwzMyw0OSw2NSw5NywxMjksMTkzLDI1NywzODUsNTEzLDc2OSwxMDI1LDE1MzcsMjA0OSwz''@;'; put 'put ''MDczLDQwOTcsNjE0NSw4MTkzLDEyMjg5LDE2Mzg1LDI0NTc3LDAsMF0sbmU9WzE2LDE2LDE2LDE2LDE3LDE3LDE4LDE4LDE5LDE5LDIwLDIwLDIxLDIxLDIyLDIyLDIzLDIzLDI0LDI0LDI1LDI1LDI2LDI2LDI3LDI3LDI4LDI4LDI5LDI5LDY0LDY0XTtGLmV4cG9ydHM9ZnVuY3Rpb24obGUs''@;'; put 'put ''bWUsX2UsVGUsU2UsamUsVixwKXt2YXIgc2Usd2UsVWUsSmUsb3QsWGUsSWUsVmUsa2UsYj1wLmJpdHMseD0wLEM9MCxUPTAsSD0wLGo9MCxFPTAsbT0wLEE9MCxhZT0wLHRlPTAseGU9bnVsbCx2ZT0wLHplPW5ldyB6LkJ1ZjE2KDE2KSxEZT1uZXcgei5CdWYxNigxNiksRmU9bnVsbCxPZT0w''@;'; put 'put ''O2Zvcih4PTA7eDw9MTU7eCsrKXplW3hdPTA7Zm9yKEM9MDtDPFRlO0MrKyl6ZVttZVtfZStDXV0rKztmb3Ioaj1iLEg9MTU7SD49MSYmMD09PXplW0hdO0gtLSk7aWYoaj5IJiYoaj1IKSwwPT09SClyZXR1cm4gU2VbamUrK109MjA5NzE1MjAsU2VbamUrK109MjA5NzE1MjAscC5iaXRzPTEs''@;'; put 'put ''MDtmb3IoVD0xO1Q8SCYmMD09PXplW1RdO1QrKyk7Zm9yKGo8VCYmKGo9VCksQT0xLHg9MTt4PD0xNTt4KyspaWYoQTw8PTEsKEEtPXplW3hdKTwwKXJldHVybi0xO2lmKEE+MCYmKDA9PT1sZXx8MSE9PUgpKXJldHVybi0xO2ZvcihEZVsxXT0wLHg9MTt4PDE1O3grKylEZVt4KzFdPURlW3hd''@;'; put 'put ''K3plW3hdO2ZvcihDPTA7QzxUZTtDKyspMCE9PW1lW19lK0NdJiYoVltEZVttZVtfZStDXV0rK109Qyk7aWYoMD09PWxlPyh4ZT1GZT1WLFhlPTE5KToxPT09bGU/KHhlPXEsdmUtPTI1NyxGZT1lZSxPZS09MjU3LFhlPTI1Nik6KHhlPUosRmU9bmUsWGU9LTEpLHRlPTAsQz0wLHg9VCxvdD1q''@;'; put 'put ''ZSxFPWosbT0wLFVlPS0xLEplPShhZT0xPDxqKS0xLDE9PT1sZSYmYWU+ODUyfHwyPT09bGUmJmFlPjU5MilyZXR1cm4gMTtmb3IoOzspe0llPXgtbSxWW0NdPFhlPyhWZT0wLGtlPVZbQ10pOlZbQ10+WGU/KFZlPUZlW09lK1ZbQ11dLGtlPXhlW3ZlK1ZbQ11dKTooVmU9OTYsa2U9MCksc2U9''@;'; put 'put ''MTw8eC1tLFQ9d2U9MTw8RTtkb3tTZVtvdCsodGU+Pm0pKyh3ZS09c2UpXT1JZTw8MjR8VmU8PDE2fGtlfXdoaWxlKDAhPT13ZSk7Zm9yKHNlPTE8PHgtMTt0ZSZzZTspc2U+Pj0xO2lmKDAhPT1zZT8odGUmPXNlLTEsdGUrPXNlKTp0ZT0wLEMrKywwPT0tLXplW3hdKXtpZih4PT09SClicmVh''@;'; put 'put ''azt4PW1lW19lK1ZbQ11dfWlmKHg+aiYmKHRlJkplKSE9PVVlKXtmb3IoMD09PW0mJihtPWopLG90Kz1ULEE9MTw8KEU9eC1tKTtFK208SCYmISgoQS09emVbRSttXSk8PTApOylFKyssQTw8PTE7aWYoYWUrPTE8PEUsMT09PWxlJiZhZT44NTJ8fDI9PT1sZSYmYWU+NTkyKXJldHVybiAxO1Nl''@;'; put 'put ''W1VlPXRlJkplXT1qPDwyNHxFPDwxNnxvdC1qZX19cmV0dXJuIDAhPT10ZSYmKFNlW290K3RlXT14LW08PDI0fDY0PDwxNikscC5iaXRzPWosMH19LHsiLi4vdXRpbHMvY29tbW9uIjoyN31dLDM3OltmdW5jdGlvbihQLEYsTyl7InVzZSBzdHJpY3QiO0YuZXhwb3J0cz17MjoibmVlZCBkaWN0''@;'; put 'put ''aW9uYXJ5IiwxOiJzdHJlYW0gZW5kIiwwOiIiLCItMSI6ImZpbGUgZXJyb3IiLCItMiI6InN0cmVhbSBlcnJvciIsIi0zIjoiZGF0YSBlcnJvciIsIi00IjoiaW5zdWZmaWNpZW50IG1lbW9yeSIsIi01IjoiYnVmZmVyIGVycm9yIiwiLTYiOiJpbmNvbXBhdGlibGUgdmVyc2lvbiJ9fSx7fV0s''@;'; put 'put ''Mzg6W2Z1bmN0aW9uKFAsRixPKXsidXNlIHN0cmljdCI7dmFyIHo9UCgiLi4vdXRpbHMvY29tbW9uIik7ZnVuY3Rpb24gVyhmdCl7Zm9yKHZhciBPcj1mdC5sZW5ndGg7LS1Pcj49MDspZnRbT3JdPTB9dmFyIGplPTE1LFY9MTYsSD1bMCwwLDAsMCwwLDAsMCwwLDEsMSwxLDEsMiwyLDIsMiwz''@;'; put 'put ''LDMsMywzLDQsNCw0LDQsNSw1LDUsNSwwXSxqPVswLDAsMCwwLDEsMSwyLDIsMywzLDQsNCw1LDUsNiw2LDcsNyw4LDgsOSw5LDEwLDEwLDExLDExLDEyLDEyLDEzLDEzXSxFPVswLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDIsMyw3XSxtPVsxNiwxNywxOCwwLDgsNyw5LDYsMTAs''@;'; put 'put ''NSwxMSw0LDEyLDMsMTMsMiwxNCwxLDE1XSxhZT1uZXcgQXJyYXkoNTc2KTtXKGFlKTt2YXIgdGU9bmV3IEFycmF5KDYwKTtXKHRlKTt2YXIgc2U9bmV3IEFycmF5KDUxMik7VyhzZSk7dmFyIHdlPW5ldyBBcnJheSgyNTYpO1cod2UpO3ZhciBVZT1uZXcgQXJyYXkoMjkpO1coVWUpO3ZhciBK''@;'; put 'put ''ZT1uZXcgQXJyYXkoMzApO1coSmUpO3ZhciB4ZSx2ZSxYZSxvdD1mdW5jdGlvbihmdCxPcixXdCxBdCxSbil7dGhpcy5zdGF0aWNfdHJlZT1mdCx0aGlzLmV4dHJhX2JpdHM9T3IsdGhpcy5leHRyYV9iYXNlPVd0LHRoaXMuZWxlbXM9QXQsdGhpcy5tYXhfbGVuZ3RoPVJuLHRoaXMuaGFzX3N0''@;'; put 'put ''cmVlPWZ0JiZmdC5sZW5ndGh9LHplPWZ1bmN0aW9uKGZ0LE9yKXt0aGlzLmR5bl90cmVlPWZ0LHRoaXMubWF4X2NvZGU9MCx0aGlzLnN0YXRfZGVzYz1Pcn07ZnVuY3Rpb24gRGUoZnQpe3JldHVybiBmdDwyNTY/c2VbZnRdOnNlWzI1NisoZnQ+Pj43KV19ZnVuY3Rpb24gRmUoZnQsT3Ipe2Z0''@;'; put 'put ''LnBlbmRpbmdfYnVmW2Z0LnBlbmRpbmcrK109MjU1Jk9yLGZ0LnBlbmRpbmdfYnVmW2Z0LnBlbmRpbmcrK109T3I+Pj44JjI1NX1mdW5jdGlvbiBPZShmdCxPcixXdCl7ZnQuYmlfdmFsaWQ+Vi1XdD8oZnQuYmlfYnVmfD1Pcjw8ZnQuYmlfdmFsaWQmNjU1MzUsRmUoZnQsZnQuYmlfYnVmKSxm''@;'; put 'put ''dC5iaV9idWY9T3I+PlYtZnQuYmlfdmFsaWQsZnQuYmlfdmFsaWQrPVd0LVYpOihmdC5iaV9idWZ8PU9yPDxmdC5iaV92YWxpZCY2NTUzNSxmdC5iaV92YWxpZCs9V3QpfWZ1bmN0aW9uIEllKGZ0LE9yLFd0KXtPZShmdCxXdFsyKk9yXSxXdFsyKk9yKzFdKX1mdW5jdGlvbiBWZShmdCxPcil7''@;'; put 'put ''dmFyIFd0PTA7ZG97V3R8PTEmZnQsZnQ+Pj49MSxXdDw8PTF9d2hpbGUoLS1Pcj4wKTtyZXR1cm4gV3Q+Pj4xfWZ1bmN0aW9uIF90KGZ0LE9yLFd0KXt2YXIgc3QsVXQsQXQ9bmV3IEFycmF5KGplKzEpLFJuPTA7Zm9yKHN0PTE7c3Q8PWplO3N0KyspQXRbc3RdPVJuPVJuK1d0W3N0LTFdPDwx''@;'; put 'put ''O2ZvcihVdD0wO1V0PD1PcjtVdCsrKXt2YXIgcmk9ZnRbMipVdCsxXTswIT09cmkmJihmdFsyKlV0XT1WZShBdFtyaV0rKyxyaSkpfX1mdW5jdGlvbiBRZShmdCl7dmFyIE9yO2ZvcihPcj0wO09yPDI4NjtPcisrKWZ0LmR5bl9sdHJlZVsyKk9yXT0wO2ZvcihPcj0wO09yPDMwO09yKyspZnQu''@;'; put 'put ''ZHluX2R0cmVlWzIqT3JdPTA7Zm9yKE9yPTA7T3I8MTk7T3IrKylmdC5ibF90cmVlWzIqT3JdPTA7ZnQuZHluX2x0cmVlWzUxMl09MSxmdC5vcHRfbGVuPWZ0LnN0YXRpY19sZW49MCxmdC5sYXN0X2xpdD1mdC5tYXRjaGVzPTB9ZnVuY3Rpb24gdW4oZnQpe2Z0LmJpX3ZhbGlkPjg/RmUoZnQs''@;'; put 'put ''ZnQuYmlfYnVmKTpmdC5iaV92YWxpZD4wJiYoZnQucGVuZGluZ19idWZbZnQucGVuZGluZysrXT1mdC5iaV9idWYpLGZ0LmJpX2J1Zj0wLGZ0LmJpX3ZhbGlkPTB9ZnVuY3Rpb24gTXQoZnQsT3IsV3QsQXQpe3ZhciBSbj0yKk9yLHN0PTIqV3Q7cmV0dXJuIGZ0W1JuXTxmdFtzdF18fGZ0W1Ju''@;'; put 'put ''XT09PWZ0W3N0XSYmQXRbT3JdPD1BdFtXdF19ZnVuY3Rpb24gRHQoZnQsT3IsV3Qpe2Zvcih2YXIgQXQ9ZnQuaGVhcFtXdF0sUm49V3Q8PDE7Um48PWZ0LmhlYXBfbGVuJiYoUm48ZnQuaGVhcF9sZW4mJk10KE9yLGZ0LmhlYXBbUm4rMV0sZnQuaGVhcFtSbl0sZnQuZGVwdGgpJiZSbisrLCFN''@;'; put 'put ''dChPcixBdCxmdC5oZWFwW1JuXSxmdC5kZXB0aCkpOylmdC5oZWFwW1d0XT1mdC5oZWFwW1JuXSxXdD1SbixSbjw8PTE7ZnQuaGVhcFtXdF09QXR9ZnVuY3Rpb24gaXQoZnQsT3IsV3Qpe3ZhciBBdCxSbixVdCxyaSxzdD0wO2lmKDAhPT1mdC5sYXN0X2xpdClkb3tBdD1mdC5wZW5kaW5nX2J1''@;'; put 'put ''ZltmdC5kX2J1ZisyKnN0XTw8OHxmdC5wZW5kaW5nX2J1ZltmdC5kX2J1ZisyKnN0KzFdLFJuPWZ0LnBlbmRpbmdfYnVmW2Z0LmxfYnVmK3N0XSxzdCsrLDA9PT1BdD9JZShmdCxSbixPcik6KEllKGZ0LChVdD13ZVtSbl0pKzI1NisxLE9yKSwwIT09KHJpPUhbVXRdKSYmT2UoZnQsUm4tPVVl''@;'; put 'put ''W1V0XSxyaSksSWUoZnQsVXQ9RGUoLS1BdCksV3QpLDAhPT0ocmk9altVdF0pJiZPZShmdCxBdC09SmVbVXRdLHJpKSl9d2hpbGUoc3Q8ZnQubGFzdF9saXQpO0llKGZ0LDI1NixPcil9ZnVuY3Rpb24gJGUoZnQsT3Ipe3ZhciBVdCxyaSxUdCxXdD1Pci5keW5fdHJlZSxBdD1Pci5zdGF0X2Rl''@;'; put 'put ''c2Muc3RhdGljX3RyZWUsUm49T3Iuc3RhdF9kZXNjLmhhc19zdHJlZSxzdD1Pci5zdGF0X2Rlc2MuZWxlbXMsV2U9LTE7Zm9yKGZ0LmhlYXBfbGVuPTAsZnQuaGVhcF9tYXg9NTczLFV0PTA7VXQ8c3Q7VXQrKykwIT09V3RbMipVdF0/KGZ0LmhlYXBbKytmdC5oZWFwX2xlbl09V2U9VXQsZnQu''@;'; put 'put ''ZGVwdGhbVXRdPTApOld0WzIqVXQrMV09MDtmb3IoO2Z0LmhlYXBfbGVuPDI7KVd0WzIqKFR0PWZ0LmhlYXBbKytmdC5oZWFwX2xlbl09V2U8Mj8rK1dlOjApXT0xLGZ0LmRlcHRoW1R0XT0wLGZ0Lm9wdF9sZW4tLSxSbiYmKGZ0LnN0YXRpY19sZW4tPUF0WzIqVHQrMV0pO2ZvcihPci5tYXhf''@;'; put 'put ''Y29kZT1XZSxVdD1mdC5oZWFwX2xlbj4+MTtVdD49MTtVdC0tKUR0KGZ0LFd0LFV0KTtUdD1zdDtkb3tVdD1mdC5oZWFwWzFdLGZ0LmhlYXBbMV09ZnQuaGVhcFtmdC5oZWFwX2xlbi0tXSxEdChmdCxXdCwxKSxyaT1mdC5oZWFwWzFdLGZ0LmhlYXBbLS1mdC5oZWFwX21heF09VXQsZnQuaGVh''@;'; put 'put ''cFstLWZ0LmhlYXBfbWF4XT1yaSxXdFsyKlR0XT1XdFsyKlV0XStXdFsyKnJpXSxmdC5kZXB0aFtUdF09KGZ0LmRlcHRoW1V0XT49ZnQuZGVwdGhbcmldP2Z0LmRlcHRoW1V0XTpmdC5kZXB0aFtyaV0pKzEsV3RbMipVdCsxXT1XdFsyKnJpKzFdPVR0LGZ0LmhlYXBbMV09VHQrKyxEdChmdCxX''@;'; put 'put ''dCwxKX13aGlsZShmdC5oZWFwX2xlbj49Mik7ZnQuaGVhcFstLWZ0LmhlYXBfbWF4XT1mdC5oZWFwWzFdLGZ1bmN0aW9uIEFlKGZ0LE9yKXt2YXIgVHQsbnIsaHQseHQsam4scm4sV3Q9T3IuZHluX3RyZWUsQXQ9T3IubWF4X2NvZGUsUm49T3Iuc3RhdF9kZXNjLnN0YXRpY190cmVlLHN0PU9y''@;'; put 'put ''LnN0YXRfZGVzYy5oYXNfc3RyZWUsVXQ9T3Iuc3RhdF9kZXNjLmV4dHJhX2JpdHMscmk9T3Iuc3RhdF9kZXNjLmV4dHJhX2Jhc2UsV2U9T3Iuc3RhdF9kZXNjLm1heF9sZW5ndGgsenQ9MDtmb3IoeHQ9MDt4dDw9amU7eHQrKylmdC5ibF9jb3VudFt4dF09MDtmb3IoV3RbMipmdC5oZWFwW2Z0''@;'; put 'put ''LmhlYXBfbWF4XSsxXT0wLFR0PWZ0LmhlYXBfbWF4KzE7VHQ8NTczO1R0KyspKHh0PVd0WzIqV3RbMioobnI9ZnQuaGVhcFtUdF0pKzFdKzFdKzEpPldlJiYoeHQ9V2UsenQrKyksV3RbMipucisxXT14dCwhKG5yPkF0KSYmKGZ0LmJsX2NvdW50W3h0XSsrLGpuPTAsbnI+PXJpJiYoam49VXRb''@;'; put 'put ''bnItcmldKSxmdC5vcHRfbGVuKz0ocm49V3RbMipucl0pKih4dCtqbiksc3QmJihmdC5zdGF0aWNfbGVuKz1ybiooUm5bMipucisxXStqbikpKTtpZigwIT09enQpe2Rve2Zvcih4dD1XZS0xOzA9PT1mdC5ibF9jb3VudFt4dF07KXh0LS07ZnQuYmxfY291bnRbeHRdLS0sZnQuYmxfY291bnRb''@;'; put 'put ''eHQrMV0rPTIsZnQuYmxfY291bnRbV2VdLS0senQtPTJ9d2hpbGUoenQ+MCk7Zm9yKHh0PVdlOzAhPT14dDt4dC0tKWZvcihucj1mdC5ibF9jb3VudFt4dF07MCE9PW5yOykhKChodD1mdC5oZWFwWy0tVHRdKT5BdCkmJihXdFsyKmh0KzFdIT09eHQmJihmdC5vcHRfbGVuKz0oeHQtV3RbMipo''@;'; put 'put ''dCsxXSkqV3RbMipodF0sV3RbMipodCsxXT14dCksbnItLSl9fShmdCxPciksX3QoV3QsV2UsZnQuYmxfY291bnQpfWZ1bmN0aW9uIHR0KGZ0LE9yLFd0KXt2YXIgQXQsc3QsUm49LTEsVXQ9T3JbMV0scmk9MCxXZT03LFR0PTQ7Zm9yKDA9PT1VdCYmKFdlPTEzOCxUdD0zKSxPclsyKihXdCsx''@;'; put 'put ''KSsxXT02NTUzNSxBdD0wO0F0PD1XdDtBdCsrKXN0PVV0LFV0PU9yWzIqKEF0KzEpKzFdLCEoKytyaTxXZSYmc3Q9PT1VdCkmJihyaTxUdD9mdC5ibF90cmVlWzIqc3RdKz1yaTowIT09c3Q/KHN0IT09Um4mJmZ0LmJsX3RyZWVbMipzdF0rKyxmdC5ibF90cmVlWzMyXSsrKTpyaTw9MTA/ZnQu''@;'; put 'put ''YmxfdHJlZVszNF0rKzpmdC5ibF90cmVlWzM2XSsrLHJpPTAsUm49c3QsMD09PVV0PyhXZT0xMzgsVHQ9Myk6c3Q9PT1VdD8oV2U9NixUdD0zKTooV2U9NyxUdD00KSl9ZnVuY3Rpb24gSGUoZnQsT3IsV3Qpe3ZhciBBdCxzdCxSbj0tMSxVdD1PclsxXSxyaT0wLFdlPTcsVHQ9NDtmb3IoMD09''@;'; put 'put ''PVV0JiYoV2U9MTM4LFR0PTMpLEF0PTA7QXQ8PVd0O0F0KyspaWYoc3Q9VXQsVXQ9T3JbMiooQXQrMSkrMV0sISgrK3JpPFdlJiZzdD09PVV0KSl7aWYocmk8VHQpZG97SWUoZnQsc3QsZnQuYmxfdHJlZSl9d2hpbGUoMCE9LS1yaSk7ZWxzZSAwIT09c3Q/KHN0IT09Um4mJihJZShmdCxzdCxm''@;'; put 'put ''dC5ibF90cmVlKSxyaS0tKSxJZShmdCwxNixmdC5ibF90cmVlKSxPZShmdCxyaS0zLDIpKTpyaTw9MTA/KEllKGZ0LDE3LGZ0LmJsX3RyZWUpLE9lKGZ0LHJpLTMsMykpOihJZShmdCwxOCxmdC5ibF90cmVlKSxPZShmdCxyaS0xMSw3KSk7cmk9MCxSbj1zdCwwPT09VXQ/KFdlPTEzOCxUdD0z''@;'; put 'put ''KTpzdD09PVV0PyhXZT02LFR0PTMpOihXZT03LFR0PTQpfX12YXIgUHQ9ITE7ZnVuY3Rpb24gUXQoZnQsT3IsV3QsQXQpe09lKGZ0LDArKEF0PzE6MCksMyksZnVuY3Rpb24geXQoZnQsT3IsV3QsQXQpe3VuKGZ0KSxBdCYmKEZlKGZ0LFd0KSxGZShmdCx+V3QpKSx6LmFycmF5U2V0KGZ0LnBl''@;'; put 'put ''bmRpbmdfYnVmLGZ0LndpbmRvdyxPcixXdCxmdC5wZW5kaW5nKSxmdC5wZW5kaW5nKz1XdH0oZnQsT3IsV3QsITApfU8uX3RyX2luaXQ9ZnVuY3Rpb24gY2koZnQpe1B0fHwoZnVuY3Rpb24gbnQoKXt2YXIgZnQsT3IsV3QsQXQsUm4sc3Q9bmV3IEFycmF5KGplKzEpO2ZvcihXdD0wLEF0PTA7''@;'; put 'put ''QXQ8Mjg7QXQrKylmb3IoVWVbQXRdPVd0LGZ0PTA7ZnQ8MTw8SFtBdF07ZnQrKyl3ZVtXdCsrXT1BdDtmb3Iod2VbV3QtMV09QXQsUm49MCxBdD0wO0F0PDE2O0F0KyspZm9yKEplW0F0XT1SbixmdD0wO2Z0PDE8PGpbQXRdO2Z0Kyspc2VbUm4rK109QXQ7Zm9yKFJuPj49NztBdDwzMDtBdCsr''@;'; put 'put ''KWZvcihKZVtBdF09Um48PDcsZnQ9MDtmdDwxPDxqW0F0XS03O2Z0Kyspc2VbMjU2K1JuKytdPUF0O2ZvcihPcj0wO09yPD1qZTtPcisrKXN0W09yXT0wO2ZvcihmdD0wO2Z0PD0xNDM7KWFlWzIqZnQrMV09OCxmdCsrLHN0WzhdKys7Zm9yKDtmdDw9MjU1OylhZVsyKmZ0KzFdPTksZnQrKyxz''@;'; put 'put ''dFs5XSsrO2Zvcig7ZnQ8PTI3OTspYWVbMipmdCsxXT03LGZ0Kyssc3RbN10rKztmb3IoO2Z0PD0yODc7KWFlWzIqZnQrMV09OCxmdCsrLHN0WzhdKys7Zm9yKF90KGFlLDI4NyxzdCksZnQ9MDtmdDwzMDtmdCsrKXRlWzIqZnQrMV09NSx0ZVsyKmZ0XT1WZShmdCw1KTt4ZT1uZXcgb3QoYWUs''@;'; put 'put ''SCwyNTcsMjg2LGplKSx2ZT1uZXcgb3QodGUsaiwwLDMwLGplKSxYZT1uZXcgb3QobmV3IEFycmF5KDApLEUsMCwxOSw3KX0oKSxQdD0hMCksZnQubF9kZXNjPW5ldyB6ZShmdC5keW5fbHRyZWUseGUpLGZ0LmRfZGVzYz1uZXcgemUoZnQuZHluX2R0cmVlLHZlKSxmdC5ibF9kZXNjPW5ldyB6''@;'; put 'put ''ZShmdC5ibF90cmVlLFhlKSxmdC5iaV9idWY9MCxmdC5iaV92YWxpZD0wLFFlKGZ0KX0sTy5fdHJfc3RvcmVkX2Jsb2NrPVF0LE8uX3RyX2ZsdXNoX2Jsb2NrPWZ1bmN0aW9uIFJpKGZ0LE9yLFd0LEF0KXt2YXIgUm4sc3QsVXQ9MDtmdC5sZXZlbD4wPygyPT09ZnQuc3RybS5kYXRhX3R5cGUm''@;'; put 'put ''JihmdC5zdHJtLmRhdGFfdHlwZT1mdW5jdGlvbiBSdChmdCl7dmFyIFd0LE9yPTQwOTM2MjQ0NDc7Zm9yKFd0PTA7V3Q8PTMxO1d0KyssT3I+Pj49MSlpZigxJk9yJiYwIT09ZnQuZHluX2x0cmVlWzIqV3RdKXJldHVybiAwO2lmKDAhPT1mdC5keW5fbHRyZWVbMThdfHwwIT09ZnQuZHluX2x0''@;'; put 'put ''cmVlWzIwXXx8MCE9PWZ0LmR5bl9sdHJlZVsyNl0pcmV0dXJuIDE7Zm9yKFd0PTMyO1d0PDI1NjtXdCsrKWlmKDAhPT1mdC5keW5fbHRyZWVbMipXdF0pcmV0dXJuIDE7cmV0dXJuIDB9KGZ0KSksJGUoZnQsZnQubF9kZXNjKSwkZShmdCxmdC5kX2Rlc2MpLFV0PWZ1bmN0aW9uIHV0KGZ0KXt2''@;'; put 'put ''YXIgT3I7Zm9yKHR0KGZ0LGZ0LmR5bl9sdHJlZSxmdC5sX2Rlc2MubWF4X2NvZGUpLHR0KGZ0LGZ0LmR5bl9kdHJlZSxmdC5kX2Rlc2MubWF4X2NvZGUpLCRlKGZ0LGZ0LmJsX2Rlc2MpLE9yPTE4O09yPj0zJiYwPT09ZnQuYmxfdHJlZVsyKm1bT3JdKzFdO09yLS0pO3JldHVybiBmdC5vcHRf''@;'; put 'put ''bGVuKz0zKihPcisxKSs1KzUrNCxPcn0oZnQpLChzdD1mdC5zdGF0aWNfbGVuKzMrNz4+PjMpPD0oUm49ZnQub3B0X2xlbiszKzc+Pj4zKSYmKFJuPXN0KSk6Um49c3Q9V3QrNSxXdCs0PD1SbiYmLTEhPT1Pcj9RdChmdCxPcixXdCxBdCk6ND09PWZ0LnN0cmF0ZWd5fHxzdD09PVJuPyhPZShm''@;'; put 'put ''dCwyKyhBdD8xOjApLDMpLGl0KGZ0LGFlLHRlKSk6KE9lKGZ0LDQrKEF0PzE6MCksMyksZnVuY3Rpb24gcXQoZnQsT3IsV3QsQXQpe3ZhciBSbjtmb3IoT2UoZnQsT3ItMjU3LDUpLE9lKGZ0LFd0LTEsNSksT2UoZnQsQXQtNCw0KSxSbj0wO1JuPEF0O1JuKyspT2UoZnQsZnQuYmxfdHJlZVsy''@;'; put 'put ''Km1bUm5dKzFdLDMpO0hlKGZ0LGZ0LmR5bl9sdHJlZSxPci0xKSxIZShmdCxmdC5keW5fZHRyZWUsV3QtMSl9KGZ0LGZ0LmxfZGVzYy5tYXhfY29kZSsxLGZ0LmRfZGVzYy5tYXhfY29kZSsxLFV0KzEpLGl0KGZ0LGZ0LmR5bl9sdHJlZSxmdC5keW5fZHRyZWUpKSxRZShmdCksQXQmJnVuKGZ0''@;'; put 'put ''KX0sTy5fdHJfdGFsbHk9ZnVuY3Rpb24gaG4oZnQsT3IsV3Qpe3JldHVybiBmdC5wZW5kaW5nX2J1ZltmdC5kX2J1ZisyKmZ0Lmxhc3RfbGl0XT1Pcj4+PjgmMjU1LGZ0LnBlbmRpbmdfYnVmW2Z0LmRfYnVmKzIqZnQubGFzdF9saXQrMV09MjU1Jk9yLGZ0LnBlbmRpbmdfYnVmW2Z0LmxfYnVm''@;'; put 'put ''K2Z0Lmxhc3RfbGl0XT0yNTUmV3QsZnQubGFzdF9saXQrKywwPT09T3I/ZnQuZHluX2x0cmVlWzIqV3RdKys6KGZ0Lm1hdGNoZXMrKyxPci0tLGZ0LmR5bl9sdHJlZVsyKih3ZVtXdF0rMjU2KzEpXSsrLGZ0LmR5bl9kdHJlZVsyKkRlKE9yKV0rKyksZnQubGFzdF9saXQ9PT1mdC5saXRfYnVm''@;'; put 'put ''c2l6ZS0xfSxPLl90cl9hbGlnbj1mdW5jdGlvbiBzbihmdCl7T2UoZnQsMiwzKSxJZShmdCwyNTYsYWUpLGZ1bmN0aW9uIGtlKGZ0KXsxNj09PWZ0LmJpX3ZhbGlkPyhGZShmdCxmdC5iaV9idWYpLGZ0LmJpX2J1Zj0wLGZ0LmJpX3ZhbGlkPTApOmZ0LmJpX3ZhbGlkPj04JiYoZnQucGVuZGlu''@;'; put 'put ''Z19idWZbZnQucGVuZGluZysrXT0yNTUmZnQuYmlfYnVmLGZ0LmJpX2J1Zj4+PTgsZnQuYmlfdmFsaWQtPTgpfShmdCl9fSx7Ii4uL3V0aWxzL2NvbW1vbiI6Mjd9XSwzOTpbZnVuY3Rpb24oUCxGLE8peyJ1c2Ugc3RyaWN0IjtGLmV4cG9ydHM9ZnVuY3Rpb24geigpe3RoaXMuaW5wdXQ9bnVs''@;'; put 'put ''bCx0aGlzLm5leHRfaW49MCx0aGlzLmF2YWlsX2luPTAsdGhpcy50b3RhbF9pbj0wLHRoaXMub3V0cHV0PW51bGwsdGhpcy5uZXh0X291dD0wLHRoaXMuYXZhaWxfb3V0PTAsdGhpcy50b3RhbF9vdXQ9MCx0aGlzLm1zZz0iIix0aGlzLnN0YXRlPW51bGwsdGhpcy5kYXRhX3R5cGU9Mix0aGlz''@;'; put 'put ''LmFkbGVyPTB9fSx7fV19LHt9LFs5XSkoOSl9KX0sNjM1Nzg6KHVlLFgseSk9PnshZnVuY3Rpb24gXyh3KXt3LnZlcnNpb249IjEuMjAyMTExMjIuMSI7dmFyIFA9MTIwMCxGPTEyNTI7dHlwZW9mIGNwdGFibGU+InUiJiYodHlwZW9mIGdsb2JhbDwidSI/Z2xvYmFsLmNwdGFibGU9eSg0Mjky''@;'; put 'put ''NCk6dHlwZW9mIHdpbmRvdzwidSImJih3aW5kb3cuY3B0YWJsZT15KDQyOTI0KSkpO2Zvcih2YXIgTz1bODc0LDkzMiw5MzYsOTQ5LDk1MCwxZTRdLHo9MDt6PD04OysreilPLnB1c2goMTI1MCt6KTt2YXIgTj17MDoxMjUyLDE6NjUwMDEsMjo2NTAwMSw3NzoxZTQsMTI4OjkzMiwxMjk6OTQ5''@;'; put 'put ''LDEzMDoxMzYxLDEzNDo5MzYsMTM2Ojk1MCwxNjE6MTI1MywxNjI6MTI1NCwxNjM6MTI1OCwxNzc6MTI1NSwxNzg6MTI1NiwxODY6MTI1NywyMDQ6MTI1MSwyMjI6ODc0LDIzODoxMjUwLDI1NToxMjUyLDY5OjY5Njl9LEw9ZnVuY3Rpb24oUyl7LTEhPU8uaW5kZXhPZihTKSYmKEY9TlswXT1T''@;'; put 'put ''KX0sVT1mdW5jdGlvbihTKXtQPVMsTChTKX07ZnVuY3Rpb24gVygpe1UoMTIwMCksZnVuY3Rpb24gSygpe0woMTI1Mil9KCl9ZnVuY3Rpb24gWShTKXtmb3IodmFyIFI9W10saz0wLEc9Uy5sZW5ndGg7azxHOysraylSW2tdPVMuY2hhckNvZGVBdChrKTtyZXR1cm4gUn12YXIgSj1mdW5jdGlv''@;'; put 'put ''bihTKXt2YXIgUj1TLmNoYXJDb2RlQXQoMCksaz1TLmNoYXJDb2RlQXQoMSk7cmV0dXJuIDI1NT09UiYmMjU0PT1rP2Z1bmN0aW9uIHEoUyl7Zm9yKHZhciBSPVtdLGs9MDtrPFMubGVuZ3RoPj4xOysraylSW2tdPVN0cmluZy5mcm9tQ2hhckNvZGUoUy5jaGFyQ29kZUF0KDIqaykrKFMuY2hh''@;'; put 'put ''ckNvZGVBdCgyKmsrMSk8PDgpKTtyZXR1cm4gUi5qb2luKCIiKX0oUy5zbGljZSgyKSk6MjU0PT1SJiYyNTU9PWs/ZnVuY3Rpb24gZWUoUyl7Zm9yKHZhciBSPVtdLGs9MDtrPFMubGVuZ3RoPj4xOysraylSW2tdPVN0cmluZy5mcm9tQ2hhckNvZGUoUy5jaGFyQ29kZUF0KDIqaysxKSsoUy5j''@;'; put 'put ''aGFyQ29kZUF0KDIqayk8PDgpKTtyZXR1cm4gUi5qb2luKCIiKX0oUy5zbGljZSgyKSk6NjUyNzk9PVI/Uy5zbGljZSgxKTpTfSxuZT1mdW5jdGlvbihSKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShSKX0saWU9ZnVuY3Rpb24oUil7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoUil9''@;'; put 'put ''O3R5cGVvZiBjcHRhYmxlPCJ1IiYmKFU9ZnVuY3Rpb24oUyl7UD1TLEwoUyl9LEo9ZnVuY3Rpb24oUyl7cmV0dXJuIDI1NT09PVMuY2hhckNvZGVBdCgwKSYmMjU0PT09Uy5jaGFyQ29kZUF0KDEpP2NwdGFibGUudXRpbHMuZGVjb2RlKDEyMDAsWShTLnNsaWNlKDIpKSk6U30sbmU9ZnVuY3Rp''@;'; put 'put ''b24oUil7cmV0dXJuIDEyMDA9PT1QP1N0cmluZy5mcm9tQ2hhckNvZGUoUik6Y3B0YWJsZS51dGlscy5kZWNvZGUoUCxbMjU1JlIsUj4+OF0pWzBdfSxpZT1mdW5jdGlvbihSKXtyZXR1cm4gY3B0YWJsZS51dGlscy5kZWNvZGUoRixbUl0pWzBdfSk7dmFyIGxlPW51bGwsX2U9ZnVuY3Rpb24o''@;'; put 'put ''KXt2YXIgUj0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz0iO3JldHVybntlbmNvZGU6ZnVuY3Rpb24oayl7Zm9yKHZhciBHPSIiLFE9MCxvZT0wLGdlPTAscGU9MCx5ZT0wLFBlPTAsTmU9MCxZZT0wO1llPGsubGVuZ3Ro''@;'; put 'put ''OylwZT0oUT1rLmNoYXJDb2RlQXQoWWUrKykpPj4yLHllPSgzJlEpPDw0fChvZT1rLmNoYXJDb2RlQXQoWWUrKykpPj40LFBlPSgxNSZvZSk8PDJ8KGdlPWsuY2hhckNvZGVBdChZZSsrKSk+PjYsTmU9NjMmZ2UsaXNOYU4ob2UpP1BlPU5lPTY0OmlzTmFOKGdlKSYmKE5lPTY0KSxHKz1SLmNo''@;'; put 'put ''YXJBdChwZSkrUi5jaGFyQXQoeWUpK1IuY2hhckF0KFBlKStSLmNoYXJBdChOZSk7cmV0dXJuIEd9LGRlY29kZTpmdW5jdGlvbihHKXt2YXIgUT0iIix5ZT0wLFBlPTAsTmU9MCxZZT0wO0c9Ry5yZXBsYWNlKC9bXlx3XCtcL1w9XS9nLCIiKTtmb3IodmFyIGV0PTA7ZXQ8Ry5sZW5ndGg7KXll''@;'; put 'put ''PVIuaW5kZXhPZihHLmNoYXJBdChldCsrKSksUGU9Ui5pbmRleE9mKEcuY2hhckF0KGV0KyspKSxRKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHllPDwyfFBlPj40KSw2NCE9PShOZT1SLmluZGV4T2YoRy5jaGFyQXQoZXQrKykpKSYmKFErPVN0cmluZy5mcm9tQ2hhckNvZGUoKDE1JlBlKTw8NHxO''@;'; put 'put ''ZT4+MikpLDY0IT09KFllPVIuaW5kZXhPZihHLmNoYXJBdChldCsrKSkpJiYoUSs9U3RyaW5nLmZyb21DaGFyQ29kZSgoMyZOZSk8PDZ8WWUpKTtyZXR1cm4gUX19fSgpLFRlPXR5cGVvZiBCdWZmZXI8InUiJiZ0eXBlb2YgcHJvY2VzczwidSImJnR5cGVvZiBwcm9jZXNzLnZlcnNpb25zPCJ1''@;'; put 'put ''IiYmISFwcm9jZXNzLnZlcnNpb25zLm5vZGUsU2U9ZnVuY3Rpb24oKXt9O2lmKHR5cGVvZiBCdWZmZXI8InUiKXt2YXIgamU9IUJ1ZmZlci5mcm9tO2lmKCFqZSl0cnl7QnVmZmVyLmZyb20oImZvbyIsInV0ZjgiKX1jYXRjaHtqZT0hMH1TZT1qZT9mdW5jdGlvbihTLFIpe3JldHVybiBSP25l''@;'; put 'put ''dyBCdWZmZXIoUyxSKTpuZXcgQnVmZmVyKFMpfTpCdWZmZXIuZnJvbS5iaW5kKEJ1ZmZlciksQnVmZmVyLmFsbG9jfHwoQnVmZmVyLmFsbG9jPWZ1bmN0aW9uKFMpe3JldHVybiBuZXcgQnVmZmVyKFMpfSksQnVmZmVyLmFsbG9jVW5zYWZlfHwoQnVmZmVyLmFsbG9jVW5zYWZlPWZ1bmN0aW9u''@;'; put 'put ''KFMpe3JldHVybiBuZXcgQnVmZmVyKFMpfSl9ZnVuY3Rpb24gVihTKXtyZXR1cm4gVGU/QnVmZmVyLmFsbG9jKFMpOm5ldyBBcnJheShTKX1mdW5jdGlvbiBwKFMpe3JldHVybiBUZT9CdWZmZXIuYWxsb2NVbnNhZmUoUyk6bmV3IEFycmF5KFMpfXZhciBiPWZ1bmN0aW9uKFIpe3JldHVybiBU''@;'; put 'put ''ZT9TZShSLCJiaW5hcnkiKTpSLnNwbGl0KCIiKS5tYXAoZnVuY3Rpb24oayl7cmV0dXJuIDI1NSZrLmNoYXJDb2RlQXQoMCl9KX07ZnVuY3Rpb24geChTKXtpZih0eXBlb2YgQXJyYXlCdWZmZXI+InUiKXJldHVybiBiKFMpO2Zvcih2YXIgUj1uZXcgQXJyYXlCdWZmZXIoUy5sZW5ndGgpLGs9''@;'; put 'put ''bmV3IFVpbnQ4QXJyYXkoUiksRz0wO0chPVMubGVuZ3RoOysrRylrW0ddPTI1NSZTLmNoYXJDb2RlQXQoRyk7cmV0dXJuIFJ9ZnVuY3Rpb24gQyhTKXtpZihBcnJheS5pc0FycmF5KFMpKXJldHVybiBTLm1hcChmdW5jdGlvbihHKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShHKX0pLmpv''@;'; put 'put ''aW4oIiIpO2Zvcih2YXIgUj1bXSxrPTA7azxTLmxlbmd0aDsrK2spUltrXT1TdHJpbmcuZnJvbUNoYXJDb2RlKFNba10pO3JldHVybiBSLmpvaW4oIiIpfWZ1bmN0aW9uIEgoUyl7aWYodHlwZW9mIEFycmF5QnVmZmVyPiJ1Iil0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIik7aWYoUyBp''@;'; put 'put ''bnN0YW5jZW9mIEFycmF5QnVmZmVyKXJldHVybiBIKG5ldyBVaW50OEFycmF5KFMpKTtmb3IodmFyIFI9bmV3IEFycmF5KFMubGVuZ3RoKSxrPTA7azxTLmxlbmd0aDsrK2spUltrXT1TW2tdO3JldHVybiBSfXZhciBqPWZ1bmN0aW9uKFMpe3ZhciBSPVtdO3JldHVybiBTLmZvckVhY2goZnVu''@;'; put 'put ''Y3Rpb24oayl7QXJyYXkuaXNBcnJheShrKT9SPVIuY29uY2F0KGspOih0eXBlb2YgVWludDhBcnJheTwidSImJmsgaW5zdGFuY2VvZiBVaW50OEFycmF5fHx0eXBlb2YgQXJyYXlCdWZmZXI8InUiJiZrIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpJiYoUj1SLmNvbmNhdChIKGspKSl9KSxSfSxF''@;'; put 'put ''PS9cdTAwMDAvZyxtPS9bXHUwMDAxLVx1MDAwNl0vZyxBPXt9LGFlPWZ1bmN0aW9uKFIpe2Z1bmN0aW9uIGsobG4pe2Zvcih2YXIgRW49IiIsVW49bG4ubGVuZ3RoLTE7VW4+PTA7KUVuKz1sbi5jaGFyQXQoVW4tLSk7cmV0dXJuIEVufWZ1bmN0aW9uIEcobG4sRW4pe2Zvcih2YXIgVW49IiI7''@;'; put 'put ''VW4ubGVuZ3RoPEVuOylVbis9bG47cmV0dXJuIFVufWZ1bmN0aW9uIFEobG4sRW4pe3ZhciBVbj0iIitsbjtyZXR1cm4gVW4ubGVuZ3RoPj1Fbj9VbjpHKCIwIixFbi1Vbi5sZW5ndGgpK1VufWZ1bmN0aW9uIG9lKGxuLEVuKXt2YXIgVW49IiIrbG47cmV0dXJuIFVuLmxlbmd0aD49RW4/VW46''@;'; put 'put ''RygiICIsRW4tVW4ubGVuZ3RoKStVbn1mdW5jdGlvbiBnZShsbixFbil7dmFyIFVuPSIiK2xuO3JldHVybiBVbi5sZW5ndGg+PUVuP1VuOlVuK0coIiAiLEVuLVVuLmxlbmd0aCl9Ui52ZXJzaW9uPSIxLjIwMjEwNzI2LjEiO3ZhciBQZT1NYXRoLnBvdygyLDMyKTtmdW5jdGlvbiBOZShsbixF''@;'; put 'put ''bil7cmV0dXJuIGxuPlBlfHxsbjwtUGU/ZnVuY3Rpb24gcGUobG4sRW4pe3ZhciBVbj0iIitNYXRoLnJvdW5kKGxuKTtyZXR1cm4gVW4ubGVuZ3RoPj1Fbj9VbjpHKCIwIixFbi1Vbi5sZW5ndGgpK1VufShsbixFbik6ZnVuY3Rpb24geWUobG4sRW4pe3ZhciBVbj0iIitsbjtyZXR1cm4gVW4u''@;'; put 'put ''bGVuZ3RoPj1Fbj9VbjpHKCIwIixFbi1Vbi5sZW5ndGgpK1VufShNYXRoLnJvdW5kKGxuKSxFbil9ZnVuY3Rpb24gWWUobG4sRW4pe3JldHVybiBsbi5sZW5ndGg+PTcrKEVuPUVufHwwKSYmMTAzPT0oMzJ8bG4uY2hhckNvZGVBdChFbikpJiYxMDE9PSgzMnxsbi5jaGFyQ29kZUF0KEVuKzEp''@;'; put 'put ''KSYmMTEwPT0oMzJ8bG4uY2hhckNvZGVBdChFbisyKSkmJjEwMT09KDMyfGxuLmNoYXJDb2RlQXQoRW4rMykpJiYxMTQ9PSgzMnxsbi5jaGFyQ29kZUF0KEVuKzQpKSYmOTc9PSgzMnxsbi5jaGFyQ29kZUF0KEVuKzUpKSYmMTA4PT0oMzJ8bG4uY2hhckNvZGVBdChFbis2KSl9ZnVuY3Rpb24g''@;'; put 'put ''ZXQobG4pe2Zvcih2YXIgRW49W10sVW49T2JqZWN0LmtleXMobG4pLHhpPTA7eGkhPT1Vbi5sZW5ndGg7Kyt4aSlFbltsbltVblt4aV1dXT1Vblt4aV07cmV0dXJuIEVufXZhciBjdD1bWyJTdW4iLCJTdW5kYXkiXSxbIk1vbiIsIk1vbmRheSJdLFsiVHVlIiwiVHVlc2RheSJdLFsiV2VkIiwi''@;'; put 'put ''V2VkbmVzZGF5Il0sWyJUaHUiLCJUaHVyc2RheSJdLFsiRnJpIiwiRnJpZGF5Il0sWyJTYXQiLCJTYXR1cmRheSJdXSxFdD1bWyJKIiwiSmFuIiwiSmFudWFyeSJdLFsiRiIsIkZlYiIsIkZlYnJ1YXJ5Il0sWyJNIiwiTWFyIiwiTWFyY2giXSxbIkEiLCJBcHIiLCJBcHJpbCJdLFsiTSIsIk1h''@;'; put 'put ''eSIsIk1heSJdLFsiSiIsIkp1biIsIkp1bmUiXSxbIkoiLCJKdWwiLCJKdWx5Il0sWyJBIiwiQXVnIiwiQXVndXN0Il0sWyJTIiwiU2VwIiwiU2VwdGVtYmVyIl0sWyJPIiwiT2N0IiwiT2N0b2JlciJdLFsiTiIsIk5vdiIsIk5vdmVtYmVyIl0sWyJEIiwiRGVjIiwiRGVjZW1iZXIiXV07ZnVu''@;'; put 'put ''Y3Rpb24gYXQobG4pe2xuWzBdPSJHZW5lcmFsIixsblsxXT0iMCIsbG5bMl09IjAuMDAiLGxuWzNdPSIjLCMjMCIsbG5bNF09IiMsIyMwLjAwIixsbls5XT0iMCUiLGxuWzEwXT0iMC4wMCUiLGxuWzExXT0iMC4wMEUrMDAiLGxuWzEyXT0iIyA/Lz8iLGxuWzEzXT0iIyA/Py8/PyIsbG5bMTRd''@;'; put 'put ''PSJtL2QveXkiLGxuWzE1XT0iZC1tbW0teXkiLGxuWzE2XT0iZC1tbW0iLGxuWzE3XT0ibW1tLXl5IixsblsxOF09Img6bW0gQU0vUE0iLGxuWzE5XT0iaDptbTpzcyBBTS9QTSIsbG5bMjBdPSJoOm1tIixsblsyMV09Img6bW06c3MiLGxuWzIyXT0ibS9kL3l5IGg6bW0iLGxuWzM3XT0iIywj''@;'; put 'put ''IzAgOygjLCMjMCkiLGxuWzM4XT0iIywjIzAgO1tSZWRdKCMsIyMwKSIsbG5bMzldPSIjLCMjMC4wMDsoIywjIzAuMDApIixsbls0MF09IiMsIyMwLjAwO1tSZWRdKCMsIyMwLjAwKSIsbG5bNDVdPSJtbTpzcyIsbG5bNDZdPSJbaF06bW06c3MiLGxuWzQ3XT0ibW1zcy4wIixsbls0OF09IiMj''@;'; put 'put ''MC4wRSswIixsbls0OV09IkAiLGxuWzU2XT0nIlx1NGUwYVx1NTM0OC9cdTRlMGJcdTUzNDggImhoIlx1NjY0MiJtbSJcdTUyMDYic3MiXHU3OWQyICInLEZuKGxuKX12YXIgYnQ9e307YXQoYnQpO3ZhciBqdD1bXSxrdD0wO2ZvcihrdD01O2t0PD04Oysra3QpanRba3RdPTMyK2t0O2Zvcihr''@;'; put 'put ''dD0yMztrdDw9MjY7KytrdClqdFtrdF09MDtmb3Ioa3Q9Mjc7a3Q8PTMxOysra3QpanRba3RdPTE0O2ZvcihrdD01MDtrdDw9NTg7KytrdClqdFtrdF09MTQ7Zm9yKGt0PTU5O2t0PD02MjsrK2t0KWp0W2t0XT1rdC01ODtmb3Ioa3Q9Njc7a3Q8PTY4Oysra3QpanRba3RdPWt0LTU4O2Zvcihr''@;'; put 'put ''dD03MjtrdDw9NzU7KytrdClqdFtrdF09a3QtNTg7Zm9yKGt0PTY3O2t0PD02ODsrK2t0KWp0W2t0XT1rdC01Nztmb3Ioa3Q9NzY7a3Q8PTc4Oysra3QpanRba3RdPWt0LTU2O2ZvcihrdD03OTtrdDw9ODE7KytrdClqdFtrdF09a3QtMzQ7dmFyIE90PVtdO2Z1bmN0aW9uIEt0KGxuLEVuLFVu''@;'; put 'put ''KXtmb3IodmFyIHhpPWxuPDA/LTE6MSxvcj1sbip4aSxPaT0wLFNyPTEsUGk9MCxaYT0xLEhpPTAsbWE9MCxEaT1NYXRoLmZsb29yKG9yKTtIaTxFbiYmKFBpPShEaT1NYXRoLmZsb29yKG9yKSkqU3IrT2ksbWE9RGkqSGkrWmEsIShvci1EaTw1ZS04KSk7KW9yPTEvKG9yLURpKSxPaT1TcixT''@;'; put 'put ''cj1QaSxaYT1IaSxIaT1tYTtpZihtYT5FbiYmKEhpPkVuPyhtYT1aYSxQaT1PaSk6KG1hPUhpLFBpPVNyKSksIVVuKXJldHVyblswLHhpKlBpLG1hXTt2YXIgY3M9TWF0aC5mbG9vcih4aSpQaS9tYSk7cmV0dXJuW2NzLHhpKlBpLWNzKm1hLG1hXX1mdW5jdGlvbiBUbihsbixFbixVbil7aWYo''@;'; put 'put ''bG4+Mjk1ODQ2NXx8bG48MClyZXR1cm4gbnVsbDt2YXIgeGk9MHxsbixvcj1NYXRoLmZsb29yKDg2NDAwKihsbi14aSkpLE9pPTAsU3I9W10sUGk9e0Q6eGksVDpvcix1Ojg2NDAwKihsbi14aSktb3IseTowLG06MCxkOjAsSDowLE06MCxTOjAscTowfTtpZihNYXRoLmFicyhQaS51KTwxZS02''@;'; put 'put ''JiYoUGkudT0wKSxFbiYmRW4uZGF0ZTE5MDQmJih4aSs9MTQ2MiksUGkudT4uOTk5OSYmKFBpLnU9MCw4NjQwMD09KytvciYmKFBpLlQ9b3I9MCwrK3hpLCsrUGkuRCkpLDYwPT09eGkpU3I9VW4/WzEzMTcsMTAsMjldOlsxOTAwLDIsMjldLE9pPTM7ZWxzZSBpZigwPT09eGkpU3I9VW4/WzEz''@;'; put 'put ''MTcsOCwyOV06WzE5MDAsMSwwXSxPaT02O2Vsc2V7eGk+NjAmJi0teGk7dmFyIFphPW5ldyBEYXRlKDE5MDAsMCwxKTtaYS5zZXREYXRlKFphLmdldERhdGUoKSt4aS0xKSxTcj1bWmEuZ2V0RnVsbFllYXIoKSxaYS5nZXRNb250aCgpKzEsWmEuZ2V0RGF0ZSgpXSxPaT1aYS5nZXREYXkoKSx4''@;'; put 'put ''aTw2MCYmKE9pPShPaSs2KSU3KSxVbiYmKE9pPWZ1bmN0aW9uIHNvKGxuLEVuKXtFblswXS09NTgxO3ZhciBVbj1sbi5nZXREYXkoKTtyZXR1cm4gbG48NjAmJihVbj0oVW4rNiklNyksVW59KFphLFNyKSl9cmV0dXJuIFBpLnk9U3JbMF0sUGkubT1TclsxXSxQaS5kPVNyWzJdLFBpLlM9b3Il''@;'; put 'put ''NjAsb3I9TWF0aC5mbG9vcihvci82MCksUGkuTT1vciU2MCxvcj1NYXRoLmZsb29yKG9yLzYwKSxQaS5IPW9yLFBpLnE9T2ksUGl9T3RbNV09T3RbNjNdPSciJCIjLCMjMF8pO1xcKCIkIiMsIyMwXFwpJyxPdFs2XT1PdFs2NF09JyIkIiMsIyMwXyk7W1JlZF1cXCgiJCIjLCMjMFxcKScsT3Rb''@;'; put 'put ''N109T3RbNjVdPSciJCIjLCMjMC4wMF8pO1xcKCIkIiMsIyMwLjAwXFwpJyxPdFs4XT1PdFs2Nl09JyIkIiMsIyMwLjAwXyk7W1JlZF1cXCgiJCIjLCMjMC4wMFxcKScsT3RbNDFdPSdfKCogIywjIzBfKTtfKCogXFwoIywjIzBcXCk7XygqICItIl8pO18oQF8pJyxPdFs0Ml09J18oIiQiKiAj''@;'; put 'put ''LCMjMF8pO18oIiQiKiBcXCgjLCMjMFxcKTtfKCIkIiogIi0iXyk7XyhAXyknLE90WzQzXT0nXygqICMsIyMwLjAwXyk7XygqIFxcKCMsIyMwLjAwXFwpO18oKiAiLSI/P18pO18oQF8pJyxPdFs0NF09J18oIiQiKiAjLCMjMC4wMF8pO18oIiQiKiBcXCgjLCMjMC4wMFxcKTtfKCIkIiogIi0i''@;'; put 'put ''Pz9fKTtfKEBfKScsUi5wYXJzZV9kYXRlX2NvZGU9VG47dmFyIHJyPW5ldyBEYXRlKDE4OTksMTEsMzEsMCwwLDApLFNuPXJyLmdldFRpbWUoKSxscj1uZXcgRGF0ZSgxOTAwLDIsMSwwLDAsMCk7ZnVuY3Rpb24gWG4obG4sRW4pe3ZhciBVbj1sbi5nZXRUaW1lKCk7cmV0dXJuIEVuP1VuLT0x''@;'; put 'put ''MjYyMzA0ZTU6bG4+PWxyJiYoVW4rPTg2NGU1KSwoVW4tKFNuKzZlNCoobG4uZ2V0VGltZXpvbmVPZmZzZXQoKS1yci5nZXRUaW1lem9uZU9mZnNldCgpKSkpLzg2NGU1fXZhciBCbj0iIixmcj17ImVuLXVzIjp7eToieSIsZDoiZCIsIiwiOiIsIiwiLiI6Ii4iLGRhdGU6Il8vIn0sImRlLWRl''@;'; put 'put ''Ijp7eToiaiIsZDoidCIsIiwiOiIuIiwiLiI6IiwiLGRhdGU6Il8uIn0sIml0LWl0Ijp7eToieSIsZDoiZCIsIiwiOiIuIiwiLiI6IiwiLGRhdGU6Il8vIn19LGJyPWZyW0JuLnRvTG93ZXJDYXNlKCldfHxmclsiZW4tdXMiXSxlcj1ldChiciksTWk9IiQiLEZpPSIiLExpPSIsIixrcj0iLiIs''@;'; put 'put ''Vm49Ii8iO2Z1bmN0aW9uIEZuKGxuKXtzd2l0Y2goKEJufHwiIikudG9Mb3dlckNhc2UoKSl7Y2FzZSJ6aC10dyI6bG5bMjddPSJbJC00MDRdZS9tL2QiLGxuWzI4XT0nWyQtNDA0XWUiXHU1ZTc0Im0iXHU2NzA4ImQiXHU2NWU1IicsbG5bMjldPSdbJC00MDRdZSJcdTVlNzQibSJcdTY3MDgi''@;'; put 'put ''ZCJcdTY1ZTUiJyxsblszMF09J20iLyJkIi8ieXknLGxuWzMxXT0neXl5eSJcdTVlNzQibSJcdTY3MDgiZCJcdTY1ZTUiJyxsblszMl09J2hoIlx1NjY0MiJtbSJcdTUyMDYiJyxsblszM109J2hoIlx1NjY0MiJtbSJcdTUyMDYic3MiXHU3OWQyIicsbG5bMzRdPSdcdTRlMGFcdTUzNDgvXHU0''@;'; put 'put ''ZTBiXHU1MzQ4IGhoIlx1NjY0MiJtbSJcdTUyMDYiJyxsblszNV09J1x1NGUwYVx1NTM0OC9cdTRlMGJcdTUzNDggaGgiXHU2NjQyIm1tIlx1NTIwNiJzcyJcdTc5ZDIiJyxsblszNl09IlskLTQwNF1lL20vZCIsbG5bNTBdPSJbJC00MDRdZS9tL2QiLGxuWzUxXT0nWyQtNDA0XWUiXHU1ZTc0''@;'; put 'put ''Im0iXHU2NzA4ImQiXHU2NWU1IicsbG5bNTJdPSdcdTRlMGFcdTUzNDgvXHU0ZTBiXHU1MzQ4IGhoIlx1NjY0MiJtbSJcdTUyMDYiJyxsbls1M109J1x1NGUwYVx1NTM0OC9cdTRlMGJcdTUzNDggaGgiXHU2NjQyIm1tIlx1NTIwNiJzcyJcdTc5ZDIiJyxsbls1NF09J1skLTQwNF1lIlx1NWU3''@;'; put 'put ''NCJtIlx1NjcwOCJkIlx1NjVlNSInLGxuWzU1XT0nXHU0ZTBhXHU1MzQ4L1x1NGUwYlx1NTM0OCBoaCJcdTY2NDIibW0iXHU1MjA2IicsbG5bNTZdPSdcdTRlMGFcdTUzNDgvXHU0ZTBiXHU1MzQ4IGhoIlx1NjY0MiJtbSJcdTUyMDYic3MiXHU3OWQyIicsbG5bNTddPSJbJC00MDRdZS9tL2Qi''@;'; put 'put ''LGxuWzU4XT0nWyQtNDA0XWUiXHU1ZTc0Im0iXHU2NzA4ImQiXHU2NWU1Iic7YnJlYWs7Y2FzZSJ6aC1jbiI6bG5bMjddPSd5eXl5Ilx1NWU3NCJtIlx1NjcwOCInLGxuWzI4XT0nbSJcdTY3MDgiZCJcdTY1ZTUiJyxsblsyOV09J20iXHU2NzA4ImQiXHU2NWU1IicsbG5bMzBdPSdtIi0iZCIt''@;'; put 'put ''Inl5JyxsblszMV09J3l5eXkiXHU1ZTc0Im0iXHU2NzA4ImQiXHU2NWU1IicsbG5bMzJdPSdoIlx1NjVmNiJtbSJcdTUyMDYiJyxsblszM109J2giXHU2NWY2Im1tIlx1NTIwNiJzcyJcdTc5ZDIiJyxsblszNF09J1x1NGUwYVx1NTM0OC9cdTRlMGJcdTUzNDggaCJcdTY1ZjYibW0iXHU1MjA2''@;'; put 'put ''IicsbG5bMzVdPSdcdTRlMGFcdTUzNDgvXHU0ZTBiXHU1MzQ4IGgiXHU2NWY2Im1tIlx1NTIwNiJzcyJcdTc5ZDIiJyxsblszNl09J3l5eXkiXHU1ZTc0Im0iXHU2NzA4IicsbG5bNTBdPSd5eXl5Ilx1NWU3NCJtIlx1NjcwOCInLGxuWzUxXT0nbSJcdTY3MDgiZCJcdTY1ZTUiJyxsbls1Ml09''@;'; put 'put ''J3l5eXkiXHU1ZTc0Im0iXHU2NzA4IicsbG5bNTNdPSdtIlx1NjcwOCJkIlx1NjVlNSInLGxuWzU0XT0nbSJcdTY3MDgiZCJcdTY1ZTUiJyxsbls1NV09J1x1NGUwYVx1NTM0OC9cdTRlMGJcdTUzNDggaCJcdTY1ZjYibW0iXHU1MjA2IicsbG5bNTZdPSdcdTRlMGFcdTUzNDgvXHU0ZTBiXHU1''@;'; put 'put ''MzQ4IGgiXHU2NWY2Im1tIlx1NTIwNiJzcyJcdTc5ZDIiJyxsbls1N109J3l5eXkiXHU1ZTc0Im0iXHU2NzA4IicsbG5bNThdPSdtIlx1NjcwOCJkIlx1NjVlNSInO2JyZWFrO2Nhc2UiamEtanAiOmxuWzI3XT0nWyQtNDExXWdlIi4ibSIuImQnLGxuWzI4XT0nWyQtNDExXWdnZ2UiXHU1ZTc0''@;'; put 'put ''Im0iXHU2NzA4ImQiXHU2NWU1IicsbG5bMjldPSdbJC00MTFdZ2dnZSJcdTVlNzQibSJcdTY3MDgiZCJcdTY1ZTUiJyxsblszMF09J20iLyJkIi8ieXknLGxuWzMxXT0neXl5eSJcdTVlNzQibSJcdTY3MDgiZCJcdTY1ZTUiJyxsblszMl09J2giXHU2NjQyIm1tIlx1NTIwNiInLGxuWzMzXT0n''@;'; put 'put ''aCJcdTY2NDIibW0iXHU1MjA2InNzIlx1NzlkMiInLGxuWzM0XT0neXl5eSJcdTVlNzQibSJcdTY3MDgiJyxsblszNV09J20iXHU2NzA4ImQiXHU2NWU1IicsbG5bMzZdPSdbJC00MTFdZ2UiLiJtIi4iZCcsbG5bNTBdPSdbJC00MTFdZ2UiLiJtIi4iZCcsbG5bNTFdPSdbJC00MTFdZ2dnZSJc''@;'; put 'put ''dTVlNzQibSJcdTY3MDgiZCJcdTY1ZTUiJyxsbls1Ml09J3l5eXkiXHU1ZTc0Im0iXHU2NzA4IicsbG5bNTNdPSdtIlx1NjcwOCJkIlx1NjVlNSInLGxuWzU0XT0nWyQtNDExXWdnZ2UiXHU1ZTc0Im0iXHU2NzA4ImQiXHU2NWU1IicsbG5bNTVdPSd5eXl5Ilx1NWU3NCJtIlx1NjcwOCInLGxu''@;'; put 'put ''WzU2XT0nbSJcdTY3MDgiZCJcdTY1ZTUiJyxsbls1N109J1skLTQxMV1nZSIuIm0iLiJkJyxsbls1OF09J1skLTQxMV1nZ2dlIlx1NWU3NCJtIlx1NjcwOCJkIlx1NjVlNSInO2JyZWFrO2Nhc2Uia28ta3IiOmxuWzI3XT0neXl5eSJcdTVlNzQiIG1tIlx1NjcwOCIgZGQiXHU2NWU1IicsbG5b''@;'; put 'put ''MjhdPSJtbS1kZCIsbG5bMjldPSJtbS1kZCIsbG5bMzBdPSJtbS1kZC15eSIsbG5bMzFdPSd5eXl5Ilx1YjE0NCIgbW0iXHVjNmQ0IiBkZCJcdWM3N2MiJyxsblszMl09J2giXHVjMmRjIiBtbSJcdWJkODQiJyxsblszM109J2giXHVjMmRjIiBtbSJcdWJkODQiIHNzIlx1Y2QwOCInLGxuWzM0''@;'; put 'put ''XT0ieXl5eS1tbS1kZCIsbG5bMzVdPSJ5eXl5LW1tLWRkIixsblszNl09J3l5eXkiXHU1ZTc0IiBtbSJcdTY3MDgiIGRkIlx1NjVlNSInLGxuWzUwXT0neXl5eSJcdTVlNzQiIG1tIlx1NjcwOCIgZGQiXHU2NWU1IicsbG5bNTFdPSJtbS1kZCIsbG5bNTJdPSJ5eXl5LW1tLWRkIixsbls1M109''@;'; put 'put ''Inl5eXktbW0tZGQiLGxuWzU0XT0ibW0tZGQiLGxuWzU1XT0ieXl5eS1tbS1kZCIsbG5bNTZdPSJ5eXl5LW1tLWRkIixsbls1N109J3l5eXkiXHU1ZTc0IiBtbSJcdTY3MDgiIGRkIlx1NjVlNSInLGxuWzU4XT0ibW0tZGQiO2JyZWFrO2Nhc2UidGgtdGgiOmxuWzU5XT0nInQiMCcsbG5bNjBd''@;'; put 'put ''PScidCIwLjAwJyxsbls2MV09JyJ0IiMsIyMwJyxsbls2Ml09JyJ0IiMsIyMwLjAwJyxsbls2N109InQwJSIsbG5bNjhdPSJ0MC4wMCUiLGxuWzY5XT0idCMgPy8/Iixsbls3MF09InQjID8/Lz8/Iixsbls3MV09J1x1MGUyNyIvIlx1MGUxNCIvIlx1MGUxYlx1MGUxYlx1MGUxYlx1MGUxYics''@;'; put 'put ''bG5bNzJdPSdcdTBlMjciLSJcdTBlMTRcdTBlMTRcdTBlMTQiLSJcdTBlMWJcdTBlMWInLGxuWzczXT0nXHUwZTI3Ii0iXHUwZTE0XHUwZTE0XHUwZTE0Jyxsbls3NF09J1x1MGUxNFx1MGUxNFx1MGUxNCItIlx1MGUxYlx1MGUxYicsbG5bNzVdPSdcdTBlMGEiOiJcdTBlMTlcdTBlMTknLGxu''@;'; put 'put ''Wzc2XT0nXHUwZTBhIjoiXHUwZTE5XHUwZTE5IjoiXHUwZTE3XHUwZTE3Jyxsbls3N109J1x1MGUyNyIvIlx1MGUxNCIvIlx1MGUxYlx1MGUxYlx1MGUxYlx1MGUxYiBcdTBlMGEiOiJcdTBlMTlcdTBlMTknLGxuWzc4XT0nXHUwZTE5XHUwZTE5IjoiXHUwZTE3XHUwZTE3Jyxsbls3OV09J1tc''@;'; put 'put ''dTBlMGFdXHUwZTE5XHUwZTE5IjoiXHUwZTE3XHUwZTE3Jyxsbls4MF09J1x1MGUxOVx1MGUxOSI6Ilx1MGUxN1x1MGUxNy4wJyxsbls4MV09ImQvbS9iYiJ9fVIuX2dlbmVyYWxfaW50PWZ1bmN0aW9uIFppKGxuKXtyZXR1cm4gbG4udG9TdHJpbmcoMTApfTt2YXIgeWk9ZnVuY3Rpb24oKXt2''@;'; put 'put ''YXIgRW49Lyg/OlwuMCp8KFwuXGQqWzEtOV0pMCspJC87ZnVuY3Rpb24gVW4oSGkpe3JldHVybi0xPT1IaS5pbmRleE9mKCIuIik/SGk6SGkucmVwbGFjZShFbiwiJDEiKX12YXIgeGk9Lyg/OlwuMCp8KFwuXGQqWzEtOV0pMCspW0VlXS8sb3I9LyhFWystXSkoXGQpJC87cmV0dXJuIGZ1bmN0''@;'; put 'put ''aW9uKG1hKXt2YXIgRGk9ZnVuY3Rpb24gWmEoSGkpe3ZhciBEaSxtYT1NYXRoLmZsb29yKE1hdGgubG9nKE1hdGguYWJzKEhpKSkqTWF0aC5MT0cxMEUpO3JldHVybiBEaT1tYT49LTQmJm1hPD0tMT9IaS50b1ByZWNpc2lvbigxMCttYSk6TWF0aC5hYnMobWEpPD05P2Z1bmN0aW9uIFNyKEhp''@;'; put 'put ''KXt2YXIgbWE9SGk8MD8xMjoxMSxEaT1VbihIaS50b0ZpeGVkKDEyKSk7cmV0dXJuIERpLmxlbmd0aDw9bWF8fChEaT1IaS50b1ByZWNpc2lvbigxMCkpLmxlbmd0aDw9bWE/RGk6SGkudG9FeHBvbmVudGlhbCg1KX0oSGkpOjEwPT09bWE/SGkudG9GaXhlZCgxMCkuc3Vic3RyKDAsMTIpOmZ1''@;'; put 'put ''bmN0aW9uIFBpKEhpKXt2YXIgbWE9VW4oSGkudG9GaXhlZCgxMSkpO3JldHVybiBtYS5sZW5ndGg+KEhpPDA/MTI6MTEpfHwiMCI9PT1tYXx8Ii0wIj09PW1hP0hpLnRvUHJlY2lzaW9uKDYpOm1hfShIaSksVW4oZnVuY3Rpb24gT2koSGkpe3JldHVybi0xPT1IaS5pbmRleE9mKCJFIik/SGk6''@;'; put 'put ''SGkucmVwbGFjZSh4aSwiJDFFIikucmVwbGFjZShvciwiJDEwJDIiKX0oRGkudG9VcHBlckNhc2UoKSkpfShtYSk7cmV0dXJuIiwiPT09TGkmJiIuIj09PWtyP0RpOkRpLnJlcGxhY2UoL1ssLl0vZyxmdW5jdGlvbihjcyl7cmV0dXJuIiwiPT1jcz9MaTprcn0pfX0oKTtmdW5jdGlvbiBfYShs''@;'; put 'put ''bixFbil7c3dpdGNoKHR5cGVvZiBsbil7Y2FzZSJzdHJpbmciOnJldHVybiBsbjtjYXNlImJvb2xlYW4iOnJldHVybiBsbj8iVFJVRSI6IkZBTFNFIjtjYXNlIm51bWJlciI6cmV0dXJuKDB8bG4pPT09bG4/bG4udG9TdHJpbmcoMTApOnlpKGxuKTtjYXNlInVuZGVmaW5lZCI6cmV0dXJuIiI7''@;'; put 'put ''Y2FzZSJvYmplY3QiOmlmKG51bGw9PWxuKXJldHVybiIiO2lmKGxuIGluc3RhbmNlb2YgRGF0ZSlyZXR1cm4geXUoMTQsWG4obG4sRW4mJkVuLmRhdGUxOTA0KSxFbil9dGhyb3cgbmV3IEVycm9yKCJ1bnN1cHBvcnRlZCB2YWx1ZSBpbiBHZW5lcmFsIGZvcm1hdDogIitsbil9Ui5fZ2VuZXJh''@;'; put 'put ''bF9udW09eWksUi5fZ2VuZXJhbD1fYTt2YXIgaWE9Ilx1MGU1MFx1MGU1MVx1MGU1Mlx1MGU1M1x1MGU1NFx1MGU1NVx1MGU1Nlx1MGU1N1x1MGU1OFx1MGU1OSIuc3BsaXQoIiIpO2Z1bmN0aW9uIExvKGxuLEVuLFVuLHhpKXt2YXIgWmEsb3I9IiIsT2k9MCxTcj0wLFBpPVVuLnksSGk9MDtz''@;'; put 'put ''d2l0Y2gobG4pe2Nhc2UgOTg6UGk9VW4ueSs1NDM7Y2FzZSAxMjE6c3dpdGNoKEVuLmxlbmd0aCl7Y2FzZSAxOmNhc2UgMjpaYT1QaSUxMDAsSGk9MjticmVhaztkZWZhdWx0OlphPVBpJTFlNCxIaT00fWJyZWFrO2Nhc2UgMTA5OnN3aXRjaChFbi5sZW5ndGgpe2Nhc2UgMTpjYXNlIDI6WmE9''@;'; put 'put ''VW4ubSxIaT1Fbi5sZW5ndGg7YnJlYWs7Y2FzZSAzOnJldHVybiBFdFtVbi5tLTFdWzFdO2Nhc2UgNTpyZXR1cm4gRXRbVW4ubS0xXVswXTtkZWZhdWx0OnJldHVybiBFdFtVbi5tLTFdWzJdfWJyZWFrO2Nhc2UgMTAwOnN3aXRjaChFbi5sZW5ndGgpe2Nhc2UgMTpjYXNlIDI6WmE9VW4uZCxI''@;'; put 'put ''aT1Fbi5sZW5ndGg7YnJlYWs7Y2FzZSAzOnJldHVybiBjdFtVbi5xXVswXTtkZWZhdWx0OnJldHVybiBjdFtVbi5xXVsxXX1icmVhaztjYXNlIDEwNDpzd2l0Y2goRW4ubGVuZ3RoKXtjYXNlIDE6Y2FzZSAyOlphPTErKFVuLkgrMTEpJTEyLEhpPUVuLmxlbmd0aDticmVhaztkZWZhdWx0OnRo''@;'; put 'put ''cm93ImJhZCBob3VyIGZvcm1hdDogIitFbn1icmVhaztjYXNlIDcyOnN3aXRjaChFbi5sZW5ndGgpe2Nhc2UgMTpjYXNlIDI6WmE9VW4uSCxIaT1Fbi5sZW5ndGg7YnJlYWs7ZGVmYXVsdDp0aHJvdyJiYWQgaG91ciBmb3JtYXQ6ICIrRW59YnJlYWs7Y2FzZSA3Nzpzd2l0Y2goRW4ubGVuZ3Ro''@;'; put 'put ''KXtjYXNlIDE6Y2FzZSAyOlphPVVuLk0sSGk9RW4ubGVuZ3RoO2JyZWFrO2RlZmF1bHQ6dGhyb3ciYmFkIG1pbnV0ZSBmb3JtYXQ6ICIrRW59YnJlYWs7Y2FzZSAxMTU6aWYoInMiIT1FbiYmInNzIiE9RW4mJiIuMCIhPUVuJiYiLjAwIiE9RW4mJiIuMDAwIiE9RW4pdGhyb3ciYmFkIHNlY29u''@;'; put 'put ''ZCBmb3JtYXQ6ICIrRW47cmV0dXJuIDAhPT1Vbi51fHwicyIhPUVuJiYic3MiIT1Fbj8oU3I9eGk+PTI/Mz09PXhpPzFlMzoxMDA6MT09PXhpPzEwOjEsKE9pPU1hdGgucm91bmQoU3IqKFVuLlMrVW4udSkpKT49NjAqU3ImJihPaT0wKSwicyI9PT1Fbj8wPT09T2k/IjAiOiIiK09pL1NyOihv''@;'; put 'put ''cj1RKE9pLDIreGkpLCJzcyI9PT1Fbj9vci5zdWJzdHIoMCwyKToiLiIrb3Iuc3Vic3RyKDIsRW4ubGVuZ3RoLTEpKSk6UShVbi5TLEVuLmxlbmd0aCk7Y2FzZSA5MDpzd2l0Y2goRW4pe2Nhc2UiW2hdIjpjYXNlIltoaF0iOmNhc2UiW1x1MGUwYV0iOmNhc2UiW1x1MGUwYVx1MGUwYV0iOlph''@;'; put 'put ''PTI0KlVuLkQrVW4uSDticmVhaztjYXNlIlttXSI6Y2FzZSJbbW1dIjpjYXNlIltcdTBlMTldIjpjYXNlIltcdTBlMTlcdTBlMTldIjpaYT02MCooMjQqVW4uRCtVbi5IKStVbi5NO2JyZWFrO2Nhc2UiW3NdIjpjYXNlIltzc10iOmNhc2UiW1x1MGUxN10iOmNhc2UiW1x1MGUxN1x1MGUxN10i''@;'; put 'put ''OlphPTYwKig2MCooMjQqVW4uRCtVbi5IKStVbi5NKStNYXRoLnJvdW5kKFVuLlMrVW4udSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyJiYWQgYWJzdGltZSBmb3JtYXQ6ICIrRW59SGk9Mz09PUVuLmxlbmd0aD8xOjI7YnJlYWs7Y2FzZSAxMDE6WmE9UGksSGk9MTticmVhaztjYXNlIDM2MjM6WmE9''@;'; put 'put ''VW4uZCxIaT1Fbi5sZW5ndGg7YnJlYWs7Y2FzZSAzNjA0OnN3aXRjaChFbi5sZW5ndGgpe2Nhc2UgMTpjYXNlIDI6WmE9VW4ubSxIaT1Fbi5sZW5ndGg7YnJlYWs7Y2FzZSAzOnJldHVybiBFdFtVbi5tLTFdWzFdO2Nhc2UgNTpyZXR1cm4gRXRbVW4ubS0xXVswXTtkZWZhdWx0OnJldHVybiBF''@;'; put 'put ''dFtVbi5tLTFdWzJdfWJyZWFrO2Nhc2UgMzYxMTpzd2l0Y2goUGk9VW4ueSs1NDMsRW4ubGVuZ3RoKXtjYXNlIDE6Y2FzZSAyOlphPVBpJTEwMCxIaT0yO2JyZWFrO2RlZmF1bHQ6WmE9UGklMWU0LEhpPTR9YnJlYWs7Y2FzZSAzNTk0OlphPVVuLkgsSGk9RW4ubGVuZ3RoO2JyZWFrO2Nhc2Ug''@;'; put 'put ''MzYwOTpaYT1Vbi5NLEhpPUVuLmxlbmd0aDticmVhaztjYXNlIDM2MDc6WmE9VW4uUyxIaT1Fbi5sZW5ndGg7YnJlYWs7ZGVmYXVsdDp0aHJvdyBsbi50b1N0cmluZygxNil9dmFyIG1hPUhpPjA/UShaYSxIaSk6IiI7cmV0dXJuKDkwPT1sbj9Fbi5jaGFyQ29kZUF0KDEpPDM1ODQ6bG48MzU4''@;'; put 'put ''NCk/bWE6bWEucmVwbGFjZSgvWzAtOV0vZyxmdW5jdGlvbihEaSl7cmV0dXJuIGlhWytEaV19KX1mdW5jdGlvbiBPYShsbil7aWYobG4ubGVuZ3RoPD0zKXJldHVybiBsbjtmb3IodmFyIFVuPWxuLmxlbmd0aCUzLHhpPWxuLnN1YnN0cigwLFVuKTtVbiE9bG4ubGVuZ3RoO1VuKz0zKXhpKz0o''@;'; put 'put ''eGkubGVuZ3RoPjA/IiwiOiIiKStsbi5zdWJzdHIoVW4sMyk7cmV0dXJuIHhpfXZhciBobz1mdW5jdGlvbigpe3ZhciBFbj0vJS9nO2Z1bmN0aW9uIG9yKHduLFp0KXt2YXIgbm4seG49d24uaW5kZXhPZigiRSIpLXduLmluZGV4T2YoIi4iKS0xO2lmKHduLm1hdGNoKC9eIyswLjBFXCswJC8p''@;'; put 'put ''KXtpZigwPT1adClyZXR1cm4iMC4wRSswIjtpZihadDwwKXJldHVybiItIitvcih3biwtWnQpO3ZhciB6bj13bi5pbmRleE9mKCIuIik7LTE9PT16biYmKHpuPXduLmluZGV4T2YoIkUiKSk7dmFyIHlyPU1hdGguZmxvb3IoTWF0aC5sb2coWnQpKk1hdGguTE9HMTBFKSV6bjtpZih5cjwwJiYo''@;'; put 'put ''eXIrPXpuKSwtMT09PShubj0oWnQvTWF0aC5wb3coMTAseXIpKS50b1ByZWNpc2lvbih4bisxKyh6bit5ciklem4pKS5pbmRleE9mKCJlIikpe3ZhciBXcj1NYXRoLmZsb29yKE1hdGgubG9nKFp0KSpNYXRoLkxPRzEwRSk7Zm9yKC0xPT09bm4uaW5kZXhPZigiLiIpP25uPW5uLmNoYXJBdCgw''@;'; put 'put ''KSsiLiIrbm4uc3Vic3RyKDEpKyJFKyIrKFdyLW5uLmxlbmd0aCt5cik6bm4rPSJFKyIrKFdyLXlyKTsiMC4iPT09bm4uc3Vic3RyKDAsMik7KW5uPShubj1ubi5jaGFyQXQoMCkrbm4uc3Vic3RyKDIsem4pKyIuIitubi5zdWJzdHIoMit6bikpLnJlcGxhY2UoL14wKyhbMS05XSkvLCIkMSIp''@;'; put 'put ''LnJlcGxhY2UoL14wK1wuLywiMC4iKTtubj1ubi5yZXBsYWNlKC9cKy0vLCItIil9bm49bm4ucmVwbGFjZSgvXihbKy1dPykoXGQqKVwuKFxkKilbRWVdLyxmdW5jdGlvbihvaSxuaSxYaSxVaSl7cmV0dXJuIG5pK1hpK1VpLnN1YnN0cigwLCh6bit5ciklem4pKyIuIitVaS5zdWJzdHIoeXIp''@;'; put 'put ''KyJFIn0pfWVsc2Ugbm49WnQudG9FeHBvbmVudGlhbCh4bik7cmV0dXJuIHduLm1hdGNoKC9FXCswMCQvKSYmbm4ubWF0Y2goL2VbKy1dXGQkLykmJihubj1ubi5zdWJzdHIoMCxubi5sZW5ndGgtMSkrIjAiK25uLmNoYXJBdChubi5sZW5ndGgtMSkpLHduLm1hdGNoKC9FXC0vKSYmbm4ubWF0''@;'; put 'put ''Y2goL2VcKy8pJiYobm49bm4ucmVwbGFjZSgvZVwrLywiZSIpKSxubi5yZXBsYWNlKCJlIiwiRSIpfXZhciBPaT0vIyAoXD8rKSggPylcLyggPykoXGQrKS8sWmE9L14jKjAqXC4oWzAjXSspLyxIaT0vXCkuKlswI10vLG1hPS9cKCMjI1wpICMjI1xcPy0jIyMjLztmdW5jdGlvbiBEaSh3bil7''@;'; put 'put ''Zm9yKHZhciBubixadD0iIix4bj0wO3huIT13bi5sZW5ndGg7Kyt4bilzd2l0Y2gobm49d24uY2hhckNvZGVBdCh4bikpe2Nhc2UgMzU6YnJlYWs7Y2FzZSA2MzpadCs9IiAiO2JyZWFrO2Nhc2UgNDg6WnQrPSIwIjticmVhaztkZWZhdWx0Olp0Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKG5uKX1y''@;'; put 'put ''ZXR1cm4gWnR9ZnVuY3Rpb24gY3Mod24sWnQpe3ZhciBubj1NYXRoLnBvdygxMCxadCk7cmV0dXJuIiIrTWF0aC5yb3VuZCh3bipubikvbm59ZnVuY3Rpb24gWW8od24sWnQpe2lmKFp0PjExKXJldHVybiBZbyh3biwxMSkqTWF0aC5wb3coMTAsWnQtMTEpO3ZhciBubj13bi1NYXRoLmZsb29y''@;'; put 'put ''KHduKSx4bj1NYXRoLnBvdygxMCxadCk7cmV0dXJuIFp0PCgiIitNYXRoLnJvdW5kKG5uKnhuKSkubGVuZ3RoPzA6TWF0aC5yb3VuZChubip4bil9ZnVuY3Rpb24gRWwod24sWnQsbm4pe2lmKDQwPT09d24uY2hhckNvZGVBdCgwKSYmIVp0Lm1hdGNoKEhpKSl7dmFyIHhuPVp0LnJlcGxhY2Uo''@;'; put 'put ''L1woICovLCIiKS5yZXBsYWNlKC8gXCkvLCIiKS5yZXBsYWNlKC9cKS8sIiIpO3JldHVybiBubj49MD9FbCgibiIseG4sbm4pOiIoIitFbCgibiIseG4sLW5uKSsiKSJ9aWYoNDQ9PT1adC5jaGFyQ29kZUF0KFp0Lmxlbmd0aC0xKSlyZXR1cm4gZnVuY3Rpb24geGkod24sWnQsbm4pe2Zvcih2''@;'; put 'put ''YXIgeG49WnQubGVuZ3RoLTE7NDQ9PT1adC5jaGFyQ29kZUF0KHhuLTEpOyktLXhuO3JldHVybiBobyh3bixadC5zdWJzdHIoMCx4biksbm4vTWF0aC5wb3coMTAsMyooWnQubGVuZ3RoLXhuKSkpfSh3bixadCxubik7aWYoLTEhPT1adC5pbmRleE9mKCIlIikpcmV0dXJuIGZ1bmN0aW9uIFVu''@;'; put 'put ''KHduLFp0LG5uKXt2YXIgeG49WnQucmVwbGFjZShFbiwiIiksem49WnQubGVuZ3RoLXhuLmxlbmd0aDtyZXR1cm4gaG8od24seG4sbm4qTWF0aC5wb3coMTAsMip6bikpK0coIiUiLHpuKX0od24sWnQsbm4pO2lmKC0xIT09WnQuaW5kZXhPZigiRSIpKXJldHVybiBvcihadCxubik7aWYoMzY9''@;'; put 'put ''PT1adC5jaGFyQ29kZUF0KDApKXJldHVybiIkIitFbCh3bixadC5zdWJzdHIoIiAiPT1adC5jaGFyQXQoMSk/MjoxKSxubik7dmFyIHpuLHlyLFdyLG9pLG5pPU1hdGguYWJzKG5uKSxYaT1ubjwwPyItIjoiIjtpZihadC5tYXRjaCgvXjAwKyQvKSlyZXR1cm4gWGkrTmUobmksWnQubGVuZ3Ro''@;'; put 'put ''KTtpZihadC5tYXRjaCgvXlsjP10rJC8pKXJldHVybiIwIj09PSh6bj1OZShubiwwKSkmJih6bj0iIiksem4ubGVuZ3RoPlp0Lmxlbmd0aD96bjpEaShadC5zdWJzdHIoMCxadC5sZW5ndGgtem4ubGVuZ3RoKSkrem47aWYoeXI9WnQubWF0Y2goT2kpKXJldHVybiBmdW5jdGlvbiBTcih3bixa''@;'; put 'put ''dCxubil7dmFyIHhuPXBhcnNlSW50KHduWzRdLDEwKSx6bj1NYXRoLnJvdW5kKFp0KnhuKSx5cj1NYXRoLmZsb29yKHpuL3huKSxXcj16bi15cip4bixvaT14bjtyZXR1cm4gbm4rKDA9PT15cj8iIjoiIit5cikrIiAiKygwPT09V3I/RygiICIsd25bMV0ubGVuZ3RoKzErd25bNF0ubGVuZ3Ro''@;'; put 'put ''KTpvZShXcix3blsxXS5sZW5ndGgpK3duWzJdKyIvIit3blszXStRKG9pLHduWzRdLmxlbmd0aCkpfSh5cixuaSxYaSk7aWYoWnQubWF0Y2goL14jKzArJC8pKXJldHVybiBYaStOZShuaSxadC5sZW5ndGgtWnQuaW5kZXhPZigiMCIpKTtpZih5cj1adC5tYXRjaChaYSkpcmV0dXJuIHpuPWNz''@;'; put 'put ''KG5uLHlyWzFdLmxlbmd0aCkucmVwbGFjZSgvXihbXlwuXSspJC8sIiQxLiIrRGkoeXJbMV0pKS5yZXBsYWNlKC9cLiQvLCIuIitEaSh5clsxXSkpLnJlcGxhY2UoL1wuKFxkKikkLyxmdW5jdGlvbihUbyx4cyl7cmV0dXJuIi4iK3hzK0coIjAiLERpKHlyWzFdKS5sZW5ndGgteHMubGVuZ3Ro''@;'; put 'put ''KX0pLC0xIT09WnQuaW5kZXhPZigiMC4iKT96bjp6bi5yZXBsYWNlKC9eMFwuLywiLiIpO2lmKFp0PVp0LnJlcGxhY2UoL14jKyhbMC5dKS8sIiQxIikseXI9WnQubWF0Y2goL14oMCopXC4oIyopJC8pKXJldHVybiBYaStjcyhuaSx5clsyXS5sZW5ndGgpLnJlcGxhY2UoL1wuKFxkKlsxLTld''@;'; put 'put ''KTAqJC8sIi4kMSIpLnJlcGxhY2UoL14oLT9cZCopJC8sIiQxLiIpLnJlcGxhY2UoL14wXC4vLHlyWzFdLmxlbmd0aD8iMC4iOiIuIik7aWYoeXI9WnQubWF0Y2goL14jezEsM30sIyMwKFwuPykkLykpcmV0dXJuIFhpK09hKE5lKG5pLDApKTtpZih5cj1adC5tYXRjaCgvXiMsIyMwXC4oWyMw''@;'; put 'put ''XSowKSQvKSlyZXR1cm4gbm48MD8iLSIrRWwod24sWnQsLW5uKTpPYSgiIisoTWF0aC5mbG9vcihubikrZnVuY3Rpb24geGwod24sWnQpe3JldHVybiBadDwoIiIrTWF0aC5yb3VuZCgod24tTWF0aC5mbG9vcih3bikpKk1hdGgucG93KDEwLFp0KSkpLmxlbmd0aD8xOjB9KG5uLHlyWzFdLmxl''@;'; put 'put ''bmd0aCkpKSsiLiIrUShZbyhubix5clsxXS5sZW5ndGgpLHlyWzFdLmxlbmd0aCk7aWYoeXI9WnQubWF0Y2goL14jLCMqLCMwLykpcmV0dXJuIEVsKHduLFp0LnJlcGxhY2UoL14jLCMqLC8sIiIpLG5uKTtpZih5cj1adC5tYXRjaCgvXihbMCNdKykoXFw/LShbMCNdKykpKyQvKSlyZXR1cm4g''@;'; put 'put ''em49ayhFbCh3bixadC5yZXBsYWNlKC9bXFwtXS9nLCIiKSxubikpLFdyPTAsayhrKFp0LnJlcGxhY2UoL1xcL2csIiIpKS5yZXBsYWNlKC9bMCNdL2csZnVuY3Rpb24oVG8pe3JldHVybiBXcjx6bi5sZW5ndGg/em4uY2hhckF0KFdyKyspOiIwIj09PVRvPyIwIjoiIn0pKTtpZihadC5tYXRj''@;'; put 'put ''aChtYSkpcmV0dXJuIigiKyh6bj1FbCh3biwiIyMjIyMjIyMjIyIsbm4pKS5zdWJzdHIoMCwzKSsiKSAiK3puLnN1YnN0cigzLDMpKyItIit6bi5zdWJzdHIoNik7dmFyIFVpPSIiO2lmKHlyPVp0Lm1hdGNoKC9eKFsjMD9dKykoID8pXC8oID8pKFsjMD9dKykvKSlyZXR1cm4gV3I9TWF0aC5t''@;'; put 'put ''aW4oeXJbNF0ubGVuZ3RoLDcpLG9pPUt0KG5pLE1hdGgucG93KDEwLFdyKS0xLCExKSx6bj0iIitYaSwiICI9PShVaT1obygibiIseXJbMV0sb2lbMV0pKS5jaGFyQXQoVWkubGVuZ3RoLTEpJiYoVWk9VWkuc3Vic3RyKDAsVWkubGVuZ3RoLTEpKyIwIiksem4rPVVpK3lyWzJdKyIvIit5clsz''@;'; put 'put ''XSwoVWk9Z2Uob2lbMl0sV3IpKS5sZW5ndGg8eXJbNF0ubGVuZ3RoJiYoVWk9RGkoeXJbNF0uc3Vic3RyKHlyWzRdLmxlbmd0aC1VaS5sZW5ndGgpKStVaSksem4rPVVpO2lmKHlyPVp0Lm1hdGNoKC9eIyAoWyMwP10rKSggPylcLyggPykoWyMwP10rKS8pKXJldHVybiBXcj1NYXRoLm1pbihN''@;'; put 'put ''YXRoLm1heCh5clsxXS5sZW5ndGgseXJbNF0ubGVuZ3RoKSw3KSxYaSsoKG9pPUt0KG5pLE1hdGgucG93KDEwLFdyKS0xLCEwKSlbMF18fChvaVsxXT8iIjoiMCIpKSsiICIrKG9pWzFdP29lKG9pWzFdLFdyKSt5clsyXSsiLyIreXJbM10rZ2Uob2lbMl0sV3IpOkcoIiAiLDIqV3IrMSt5clsy''@;'; put 'put ''XS5sZW5ndGgreXJbM10ubGVuZ3RoKSk7aWYoeXI9WnQubWF0Y2goL15bIzA/XSskLykpcmV0dXJuIHpuPU5lKG5uLDApLFp0Lmxlbmd0aDw9em4ubGVuZ3RoP3puOkRpKFp0LnN1YnN0cigwLFp0Lmxlbmd0aC16bi5sZW5ndGgpKSt6bjtpZih5cj1adC5tYXRjaCgvXihbIzA/XSspXC4oWyMw''@;'; put 'put ''XSspJC8pKXt6bj0iIitubi50b0ZpeGVkKE1hdGgubWluKHlyWzJdLmxlbmd0aCwxMCkpLnJlcGxhY2UoLyhbXjBdKTArJC8sIiQxIiksV3I9em4uaW5kZXhPZigiLiIpO3ZhciBubz1adC5pbmRleE9mKCIuIiktV3IsamE9WnQubGVuZ3RoLXpuLmxlbmd0aC1ubztyZXR1cm4gRGkoWnQuc3Vi''@;'; put 'put ''c3RyKDAsbm8pK3puK1p0LnN1YnN0cihadC5sZW5ndGgtamEpKX1pZih5cj1adC5tYXRjaCgvXjAwLDAwMFwuKFsjMF0qMCkkLykpcmV0dXJuIFdyPVlvKG5uLHlyWzFdLmxlbmd0aCksbm48MD8iLSIrRWwod24sWnQsLW5uKTpPYShmdW5jdGlvbiBfdSh3bil7cmV0dXJuIHduPDIxNDc0ODM2''@;'; put 'put ''NDcmJnduPi0yMTQ3NDgzNjQ4PyIiKyh3bj49MD8wfHduOnduLTF8MCk6IiIrTWF0aC5mbG9vcih3bil9KG5uKSkucmVwbGFjZSgvXlxkLFxkezN9JC8sIjAkJiIpLnJlcGxhY2UoL15cZCokLyxmdW5jdGlvbihUbyl7cmV0dXJuIjAwLCIrKFRvLmxlbmd0aDwzP1EoMCwzLVRvLmxlbmd0aCk6''@;'; put 'put ''IiIpK1RvfSkrIi4iK1EoV3IseXJbMV0ubGVuZ3RoKTtzd2l0Y2goWnQpe2Nhc2UiIyMjLCMjMC4wMCI6cmV0dXJuIEVsKHduLCIjLCMjMC4wMCIsbm4pO2Nhc2UiIyMjLCMjIyI6Y2FzZSIjIywjIyMiOmNhc2UiIywjIyMiOnZhciB2YT1PYShOZShuaSwwKSk7cmV0dXJuIjAiIT09dmE/WGkr''@;'; put 'put ''dmE6IiI7Y2FzZSIjIyMsIyMjLjAwIjpyZXR1cm4gRWwod24sIiMjIywjIzAuMDAiLG5uKS5yZXBsYWNlKC9eMFwuLywiLiIpO2Nhc2UiIywjIyMuMDAiOnJldHVybiBFbCh3biwiIywjIzAuMDAiLG5uKS5yZXBsYWNlKC9eMFwuLywiLiIpfXRocm93IG5ldyBFcnJvcigidW5zdXBwb3J0ZWQg''@;'; put 'put ''Zm9ybWF0IHwiK1p0KyJ8Iil9ZnVuY3Rpb24gZ24od24sWnQpe3ZhciBubix4bj13bi5pbmRleE9mKCJFIiktd24uaW5kZXhPZigiLiIpLTE7aWYod24ubWF0Y2goL14jKzAuMEVcKzAkLykpe2lmKDA9PVp0KXJldHVybiIwLjBFKzAiO2lmKFp0PDApcmV0dXJuIi0iK2duKHduLC1adCk7dmFy''@;'; put 'put ''IHpuPXduLmluZGV4T2YoIi4iKTstMT09PXpuJiYoem49d24uaW5kZXhPZigiRSIpKTt2YXIgeXI9TWF0aC5mbG9vcihNYXRoLmxvZyhadCkqTWF0aC5MT0cxMEUpJXpuO2lmKHlyPDAmJih5cis9em4pLCEobm49KFp0L01hdGgucG93KDEwLHlyKSkudG9QcmVjaXNpb24oeG4rMSsoem4reXIp''@;'; put 'put ''JXpuKSkubWF0Y2goL1tFZV0vKSl7dmFyIFdyPU1hdGguZmxvb3IoTWF0aC5sb2coWnQpKk1hdGguTE9HMTBFKTstMT09PW5uLmluZGV4T2YoIi4iKT9ubj1ubi5jaGFyQXQoMCkrIi4iK25uLnN1YnN0cigxKSsiRSsiKyhXci1ubi5sZW5ndGgreXIpOm5uKz0iRSsiKyhXci15ciksbm49bm4u''@;'; put 'put ''cmVwbGFjZSgvXCstLywiLSIpfW5uPW5uLnJlcGxhY2UoL14oWystXT8pKFxkKilcLihcZCopW0VlXS8sZnVuY3Rpb24ob2ksbmksWGksVWkpe3JldHVybiBuaStYaStVaS5zdWJzdHIoMCwoem4reXIpJXpuKSsiLiIrVWkuc3Vic3RyKHlyKSsiRSJ9KX1lbHNlIG5uPVp0LnRvRXhwb25lbnRp''@;'; put 'put ''YWwoeG4pO3JldHVybiB3bi5tYXRjaCgvRVwrMDAkLykmJm5uLm1hdGNoKC9lWystXVxkJC8pJiYobm49bm4uc3Vic3RyKDAsbm4ubGVuZ3RoLTEpKyIwIitubi5jaGFyQXQobm4ubGVuZ3RoLTEpKSx3bi5tYXRjaCgvRVwtLykmJm5uLm1hdGNoKC9lXCsvKSYmKG5uPW5uLnJlcGxhY2UoL2Vc''@;'; put 'put ''Ky8sImUiKSksbm4ucmVwbGFjZSgiZSIsIkUiKX1mdW5jdGlvbiBrbih3bixadCxubil7aWYoNDA9PT13bi5jaGFyQ29kZUF0KDApJiYhWnQubWF0Y2goSGkpKXt2YXIgeG49WnQucmVwbGFjZSgvXCggKi8sIiIpLnJlcGxhY2UoLyBcKS8sIiIpLnJlcGxhY2UoL1wpLywiIik7cmV0dXJuIG5u''@;'; put 'put ''Pj0wP2tuKCJuIix4bixubik6IigiK2tuKCJuIix4biwtbm4pKyIpIn1pZig0ND09PVp0LmNoYXJDb2RlQXQoWnQubGVuZ3RoLTEpKXJldHVybiBmdW5jdGlvbiBGZih3bixadCxubil7Zm9yKHZhciB4bj1adC5sZW5ndGgtMTs0ND09PVp0LmNoYXJDb2RlQXQoeG4tMSk7KS0teG47cmV0dXJu''@;'; put 'put ''IGhvKHduLFp0LnN1YnN0cigwLHhuKSxubi9NYXRoLnBvdygxMCwzKihadC5sZW5ndGgteG4pKSl9KHduLFp0LG5uKTtpZigtMSE9PVp0LmluZGV4T2YoIiUiKSlyZXR1cm4gZnVuY3Rpb24geWQod24sWnQsbm4pe3ZhciB4bj1adC5yZXBsYWNlKEVuLCIiKSx6bj1adC5sZW5ndGgteG4ubGVu''@;'; put 'put ''Z3RoO3JldHVybiBobyh3bix4bixubipNYXRoLnBvdygxMCwyKnpuKSkrRygiJSIsem4pfSh3bixadCxubik7aWYoLTEhPT1adC5pbmRleE9mKCJFIikpcmV0dXJuIGduKFp0LG5uKTtpZigzNj09PVp0LmNoYXJDb2RlQXQoMCkpcmV0dXJuIiQiK2tuKHduLFp0LnN1YnN0cigiICI9PVp0LmNo''@;'; put 'put ''YXJBdCgxKT8yOjEpLG5uKTt2YXIgem4seXIsV3Isb2ksbmk9TWF0aC5hYnMobm4pLFhpPW5uPDA/Ii0iOiIiO2lmKFp0Lm1hdGNoKC9eMDArJC8pKXJldHVybiBYaStRKG5pLFp0Lmxlbmd0aCk7aWYoWnQubWF0Y2goL15bIz9dKyQvKSlyZXR1cm4gem49IiIrbm4sMD09PW5uJiYoem49IiIp''@;'; put 'put ''LHpuLmxlbmd0aD5adC5sZW5ndGg/em46RGkoWnQuc3Vic3RyKDAsWnQubGVuZ3RoLXpuLmxlbmd0aCkpK3puO2lmKHlyPVp0Lm1hdGNoKE9pKSlyZXR1cm4gZnVuY3Rpb24gUGkod24sWnQsbm4pe3JldHVybiBubisoMD09PVp0PyIiOiIiK1p0KStHKCIgIix3blsxXS5sZW5ndGgrMit3bls0''@;'; put 'put ''XS5sZW5ndGgpfSh5cixuaSxYaSk7aWYoWnQubWF0Y2goL14jKzArJC8pKXJldHVybiBYaStRKG5pLFp0Lmxlbmd0aC1adC5pbmRleE9mKCIwIikpO2lmKHlyPVp0Lm1hdGNoKFphKSlyZXR1cm4gem49KHpuPSgiIitubikucmVwbGFjZSgvXihbXlwuXSspJC8sIiQxLiIrRGkoeXJbMV0pKS5y''@;'; put 'put ''ZXBsYWNlKC9cLiQvLCIuIitEaSh5clsxXSkpKS5yZXBsYWNlKC9cLihcZCopJC8sZnVuY3Rpb24oVG8seHMpe3JldHVybiIuIit4cytHKCIwIixEaSh5clsxXSkubGVuZ3RoLXhzLmxlbmd0aCl9KSwtMSE9PVp0LmluZGV4T2YoIjAuIik/em46em4ucmVwbGFjZSgvXjBcLi8sIi4iKTtpZiha''@;'; put 'put ''dD1adC5yZXBsYWNlKC9eIysoWzAuXSkvLCIkMSIpLHlyPVp0Lm1hdGNoKC9eKDAqKVwuKCMqKSQvKSlyZXR1cm4gWGkrKCIiK25pKS5yZXBsYWNlKC9cLihcZCpbMS05XSkwKiQvLCIuJDEiKS5yZXBsYWNlKC9eKC0/XGQqKSQvLCIkMS4iKS5yZXBsYWNlKC9eMFwuLyx5clsxXS5sZW5ndGg/''@;'; put 'put ''IjAuIjoiLiIpO2lmKHlyPVp0Lm1hdGNoKC9eI3sxLDN9LCMjMChcLj8pJC8pKXJldHVybiBYaStPYSgiIituaSk7aWYoeXI9WnQubWF0Y2goL14jLCMjMFwuKFsjMF0qMCkkLykpcmV0dXJuIG5uPDA/Ii0iK2tuKHduLFp0LC1ubik6T2EoIiIrbm4pKyIuIitHKCIwIix5clsxXS5sZW5ndGgp''@;'; put 'put ''O2lmKHlyPVp0Lm1hdGNoKC9eIywjKiwjMC8pKXJldHVybiBrbih3bixadC5yZXBsYWNlKC9eIywjKiwvLCIiKSxubik7aWYoeXI9WnQubWF0Y2goL14oWzAjXSspKFxcPy0oWzAjXSspKSskLykpcmV0dXJuIHpuPWsoa24od24sWnQucmVwbGFjZSgvW1xcLV0vZywiIiksbm4pKSxXcj0wLGso''@;'; put 'put ''ayhadC5yZXBsYWNlKC9cXC9nLCIiKSkucmVwbGFjZSgvWzAjXS9nLGZ1bmN0aW9uKFRvKXtyZXR1cm4gV3I8em4ubGVuZ3RoP3puLmNoYXJBdChXcisrKToiMCI9PT1Ubz8iMCI6IiJ9KSk7aWYoWnQubWF0Y2gobWEpKXJldHVybiIoIisoem49a24od24sIiMjIyMjIyMjIyMiLG5uKSkuc3Vi''@;'; put 'put ''c3RyKDAsMykrIikgIit6bi5zdWJzdHIoMywzKSsiLSIrem4uc3Vic3RyKDYpO3ZhciBVaT0iIjtpZih5cj1adC5tYXRjaCgvXihbIzA/XSspKCA/KVwvKCA/KShbIzA/XSspLykpcmV0dXJuIFdyPU1hdGgubWluKHlyWzRdLmxlbmd0aCw3KSxvaT1LdChuaSxNYXRoLnBvdygxMCxXciktMSwh''@;'; put 'put ''MSksem49IiIrWGksIiAiPT0oVWk9aG8oIm4iLHlyWzFdLG9pWzFdKSkuY2hhckF0KFVpLmxlbmd0aC0xKSYmKFVpPVVpLnN1YnN0cigwLFVpLmxlbmd0aC0xKSsiMCIpLHpuKz1VaSt5clsyXSsiLyIreXJbM10sKFVpPWdlKG9pWzJdLFdyKSkubGVuZ3RoPHlyWzRdLmxlbmd0aCYmKFVpPURp''@;'; put 'put ''KHlyWzRdLnN1YnN0cih5cls0XS5sZW5ndGgtVWkubGVuZ3RoKSkrVWkpLHpuKz1VaTtpZih5cj1adC5tYXRjaCgvXiMgKFsjMD9dKykoID8pXC8oID8pKFsjMD9dKykvKSlyZXR1cm4gV3I9TWF0aC5taW4oTWF0aC5tYXgoeXJbMV0ubGVuZ3RoLHlyWzRdLmxlbmd0aCksNyksWGkrKChvaT1L''@;'; put 'put ''dChuaSxNYXRoLnBvdygxMCxXciktMSwhMCkpWzBdfHwob2lbMV0/IiI6IjAiKSkrIiAiKyhvaVsxXT9vZShvaVsxXSxXcikreXJbMl0rIi8iK3lyWzNdK2dlKG9pWzJdLFdyKTpHKCIgIiwyKldyKzEreXJbMl0ubGVuZ3RoK3lyWzNdLmxlbmd0aCkpO2lmKHlyPVp0Lm1hdGNoKC9eWyMwP10r''@;'; put 'put ''JC8pKXJldHVybiBadC5sZW5ndGg8PSh6bj0iIitubikubGVuZ3RoP3puOkRpKFp0LnN1YnN0cigwLFp0Lmxlbmd0aC16bi5sZW5ndGgpKSt6bjtpZih5cj1adC5tYXRjaCgvXihbIzBdKylcLihbIzBdKykkLykpe3puPSIiK25uLnRvRml4ZWQoTWF0aC5taW4oeXJbMl0ubGVuZ3RoLDEwKSku''@;'; put 'put ''cmVwbGFjZSgvKFteMF0pMCskLywiJDEiKSxXcj16bi5pbmRleE9mKCIuIik7dmFyIG5vPVp0LmluZGV4T2YoIi4iKS1XcixqYT1adC5sZW5ndGgtem4ubGVuZ3RoLW5vO3JldHVybiBEaShadC5zdWJzdHIoMCxubykrem4rWnQuc3Vic3RyKFp0Lmxlbmd0aC1qYSkpfWlmKHlyPVp0Lm1hdGNo''@;'; put 'put ''KC9eMDAsMDAwXC4oWyMwXSowKSQvKSlyZXR1cm4gbm48MD8iLSIra24od24sWnQsLW5uKTpPYSgiIitubikucmVwbGFjZSgvXlxkLFxkezN9JC8sIjAkJiIpLnJlcGxhY2UoL15cZCokLyxmdW5jdGlvbihUbyl7cmV0dXJuIjAwLCIrKFRvLmxlbmd0aDwzP1EoMCwzLVRvLmxlbmd0aCk6IiIp''@;'; put 'put ''K1RvfSkrIi4iK1EoMCx5clsxXS5sZW5ndGgpO3ZhciB2YT1PYSgiIituaSk7c3dpdGNoKFp0KXtjYXNlIiMjIywjIyMiOmNhc2UiIyMsIyMjIjpjYXNlIiMsIyMjIjpyZXR1cm4iMCIhPT12YT9YaSt2YToiIjtjYXNlIiMsIzAwIjpyZXR1cm4iMDAiIT09KHZhPVEodmEsMikpP1hpK3ZhOiIi''@;'; put 'put ''O2RlZmF1bHQ6aWYoWnQubWF0Y2goL1wuWzAjP10qJC8pKXJldHVybiBrbih3bixadC5zbGljZSgwLFp0Lmxhc3RJbmRleE9mKCIuIikpLG5uKStEaShadC5zbGljZShadC5sYXN0SW5kZXhPZigiLiIpKSl9dGhyb3cgbmV3IEVycm9yKCJ1bnN1cHBvcnRlZCBmb3JtYXQgfCIrWnQrInwiKX1y''@;'; put 'put ''ZXR1cm4gZnVuY3Rpb24oWnQsbm4seG4pe3JldHVybiIwLDAiPT1ubiYmKG5uPSIjLCMwMCIpLCgwfHhuKT09PXhuP2tuKFp0LG5uLHhuKTpFbChadCxubix4bil9fSgpO2Z1bmN0aW9uIEphKGxuKXtmb3IodmFyIEVuPVtdLFVuPSExLHhpPTAsb3I9MDt4aTxsbi5sZW5ndGg7Kyt4aSlzd2l0''@;'; put 'put ''Y2gobG4uY2hhckNvZGVBdCh4aSkpe2Nhc2UgMzQ6VW49IVVuO2JyZWFrO2Nhc2UgOTU6Y2FzZSA0MjpjYXNlIDkyOisreGk7YnJlYWs7Y2FzZSA1OTpFbltFbi5sZW5ndGhdPWxuLnN1YnN0cihvcix4aS1vciksb3I9eGkrMX1pZihFbltFbi5sZW5ndGhdPWxuLnN1YnN0cihvciksITA9PT1V''@;'; put 'put ''bil0aHJvdyBuZXcgRXJyb3IoIkZvcm1hdCB8IitsbisifCB1bnRlcm1pbmF0ZWQgc3RyaW5nICIpO3JldHVybiBFbn1SLl9zcGxpdD1KYTt2YXIgQmk9L1xbW0hoTW1Tc1x1MEUwQVx1MEUxOVx1MEUxN10qXF0vO2Z1bmN0aW9uIElzKGxuKXtmb3IodmFyIEVuPTAsVW49IiIseGk9IiI7RW48''@;'; put 'put ''bG4ubGVuZ3RoOylzd2l0Y2goVW49bG4uY2hhckF0KEVuKSl7Y2FzZSJHIjpZZShsbixFbikmJihFbis9NiksRW4rKzticmVhaztjYXNlJyInOmZvcig7MzQhPT1sbi5jaGFyQ29kZUF0KCsrRW4pJiZFbjxsbi5sZW5ndGg7KTsrK0VuO2JyZWFrO2Nhc2UiXFwiOmNhc2UiXyI6RW4rPTI7YnJl''@;'; put 'put ''YWs7Y2FzZSJAIjorK0VuO2JyZWFrO2Nhc2UiQiI6Y2FzZSJiIjppZigiMSI9PT1sbi5jaGFyQXQoRW4rMSl8fCIyIj09PWxuLmNoYXJBdChFbisxKSlyZXR1cm4hMDtjYXNlIk0iOmNhc2UiRCI6Y2FzZSJZIjpjYXNlIkgiOmNhc2UiUyI6Y2FzZSJFIjpjYXNlIm0iOmNhc2UiZCI6Y2FzZSJ5''@;'; put 'put ''IjpjYXNlImgiOmNhc2UicyI6Y2FzZSJlIjpjYXNlImciOnJldHVybiEwO2Nhc2UiQSI6Y2FzZSJhIjpjYXNlIlx1NGUwYSI6aWYoIkEvUCI9PT1sbi5zdWJzdHIoRW4sMykudG9VcHBlckNhc2UoKXx8IkFNL1BNIj09PWxuLnN1YnN0cihFbiw1KS50b1VwcGVyQ2FzZSgpfHwiXHU0ZTBhXHU1''@;'; put 'put ''MzQ4L1x1NGUwYlx1NTM0OCI9PT1sbi5zdWJzdHIoRW4sNSkudG9VcHBlckNhc2UoKSlyZXR1cm4hMDsrK0VuO2JyZWFrO2Nhc2UiWyI6Zm9yKHhpPVVuOyJdIiE9PWxuLmNoYXJBdChFbisrKSYmRW48bG4ubGVuZ3RoOyl4aSs9bG4uY2hhckF0KEVuKTtpZih4aS5tYXRjaChCaSkpcmV0dXJu''@;'; put 'put ''ITA7YnJlYWs7Y2FzZSIuIjpjYXNlIjAiOmNhc2UiIyI6Zm9yKDtFbjxsbi5sZW5ndGgmJigiMCM/LixFKy0lIi5pbmRleE9mKFVuPWxuLmNoYXJBdCgrK0VuKSk+LTF8fCJcXCI9PVVuJiYiLSI9PWxuLmNoYXJBdChFbisxKSYmIjAjIi5pbmRleE9mKGxuLmNoYXJBdChFbisyKSk+LTEpOyk7''@;'; put 'put ''YnJlYWs7Y2FzZSI/Ijpmb3IoO2xuLmNoYXJBdCgrK0VuKT09PVVuOyk7YnJlYWs7Y2FzZSIqIjorK0VuLCgiICI9PWxuLmNoYXJBdChFbil8fCIqIj09bG4uY2hhckF0KEVuKSkmJisrRW47YnJlYWs7Y2FzZSIoIjpjYXNlIikiOisrRW47YnJlYWs7Y2FzZSIxIjpjYXNlIjIiOmNhc2UiMyI6''@;'; put 'put ''Y2FzZSI0IjpjYXNlIjUiOmNhc2UiNiI6Y2FzZSI3IjpjYXNlIjgiOmNhc2UiOSI6Zm9yKDtFbjxsbi5sZW5ndGgmJiIwMTIzNDU2Nzg5Ii5pbmRleE9mKGxuLmNoYXJBdCgrK0VuKSk+LTE7KTticmVhaztkZWZhdWx0OisrRW59cmV0dXJuITF9ZnVuY3Rpb24gUG4obG4sRW4sVW4seGkpe2Zv''@;'; put 'put ''cih2YXIgSGksbWEsRGksb3I9W10sT2k9IiIsU3I9MCxQaT0iIixaYT0idCIsY3M9IkgiO1NyPGxuLmxlbmd0aDspc3dpdGNoKFBpPWxuLmNoYXJBdChTcikpe2Nhc2UiRyI6aWYoIVllKGxuLFNyKSl0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCBjaGFyYWN0ZXIgIitQaSsiIGluICIr''@;'; put 'put ''bG4pO29yW29yLmxlbmd0aF09e3Q6IkciLHY6IkdlbmVyYWwifSxTcis9NzticmVhaztjYXNlJyInOmZvcihPaT0iIjszNCE9PShEaT1sbi5jaGFyQ29kZUF0KCsrU3IpKSYmU3I8bG4ubGVuZ3RoOylPaSs9U3RyaW5nLmZyb21DaGFyQ29kZShEaSk7b3Jbb3IubGVuZ3RoXT17dDoidCIsdjpP''@;'; put 'put ''aX0sKytTcjticmVhaztjYXNlIlxcIjp2YXIgWW89bG4uY2hhckF0KCsrU3IpO29yW29yLmxlbmd0aF09e3Q6IigiPT09WW98fCIpIj09PVlvP1lvOiJ0Iix2OllvfSwrK1NyO2JyZWFrO2Nhc2UiXyI6b3Jbb3IubGVuZ3RoXT17dDoidCIsdjoiICJ9LFNyKz0yO2JyZWFrO2Nhc2UiQCI6b3Jb''@;'; put 'put ''b3IubGVuZ3RoXT17dDoiVCIsdjpFbn0sKytTcjticmVhaztjYXNlIkIiOmNhc2UiYiI6aWYoIjEiPT09bG4uY2hhckF0KFNyKzEpfHwiMiI9PT1sbi5jaGFyQXQoU3IrMSkpe2lmKG51bGw9PUhpJiZudWxsPT0oSGk9VG4oRW4sVW4sIjIiPT09bG4uY2hhckF0KFNyKzEpKSkpcmV0dXJuIiI7''@;'; put 'put ''b3Jbb3IubGVuZ3RoXT17dDoiWCIsdjpsbi5zdWJzdHIoU3IsMil9LFphPVBpLFNyKz0yO2JyZWFrfWNhc2UiTSI6Y2FzZSJEIjpjYXNlIlkiOmNhc2UiSCI6Y2FzZSJTIjpjYXNlIkUiOlBpPVBpLnRvTG93ZXJDYXNlKCk7Y2FzZSJtIjpjYXNlImQiOmNhc2UieSI6Y2FzZSJoIjpjYXNlInMi''@;'; put 'put ''OmNhc2UiZSI6Y2FzZSJnIjpjYXNlIlx1MGUyNyI6Y2FzZSJcdTBlMTQiOmNhc2UiXHUwZTFiIjpjYXNlIlx1MGUwYSI6Y2FzZSJcdTBlMTkiOmNhc2UiXHUwZTE3IjppZihFbjwwfHxudWxsPT1IaSYmbnVsbD09KEhpPVRuKEVuLFVuKSkpcmV0dXJuIiI7Zm9yKE9pPVBpOysrU3I8bG4ubGVu''@;'; put 'put ''Z3RoJiZsbi5jaGFyQXQoU3IpLnRvTG93ZXJDYXNlKCk9PT1QaTspT2krPVBpOyJtIj09PVBpJiYiaCI9PT1aYS50b0xvd2VyQ2FzZSgpJiYoUGk9Ik0iKSwiaCI9PT1QaSYmKFBpPWNzKSxvcltvci5sZW5ndGhdPXt0OlBpLHY6T2l9LFphPVBpO2JyZWFrO2Nhc2UiQSI6Y2FzZSJhIjpjYXNl''@;'; put 'put ''Ilx1NGUwYSI6dmFyIF91PXt0OlBpLHY6UGl9O2lmKG51bGw9PUhpJiYoSGk9VG4oRW4sVW4pKSwiQS9QIj09PWxuLnN1YnN0cihTciwzKS50b1VwcGVyQ2FzZSgpPyhudWxsIT1IaSYmKF91LnY9SGkuSD49MTI/IlAiOiJBIiksX3UudD0iVCIsY3M9ImgiLFNyKz0zKToiQU0vUE0iPT09bG4u''@;'; put 'put ''c3Vic3RyKFNyLDUpLnRvVXBwZXJDYXNlKCk/KG51bGwhPUhpJiYoX3Uudj1IaS5IPj0xMj8iUE0iOiJBTSIpLF91LnQ9IlQiLFNyKz01LGNzPSJoIik6Ilx1NGUwYVx1NTM0OC9cdTRlMGJcdTUzNDgiPT09bG4uc3Vic3RyKFNyLDUpLnRvVXBwZXJDYXNlKCk/KG51bGwhPUhpJiYoX3Uudj1I''@;'; put 'put ''aS5IPj0xMj8iXHU0ZTBiXHU1MzQ4IjoiXHU0ZTBhXHU1MzQ4IiksX3UudD0iVCIsU3IrPTUsY3M9ImgiKTooX3UudD0idCIsKytTciksbnVsbD09SGkmJiJUIj09PV91LnQpcmV0dXJuIiI7b3Jbb3IubGVuZ3RoXT1fdSxaYT1QaTticmVhaztjYXNlIlsiOmZvcihPaT1QaTsiXSIhPT1sbi5j''@;'; put 'put ''aGFyQXQoU3IrKykmJlNyPGxuLmxlbmd0aDspT2krPWxuLmNoYXJBdChTcik7aWYoIl0iIT09T2kuc2xpY2UoLTEpKXRocm93J3VudGVybWluYXRlZCAiWyIgYmxvY2s6IHwnK09pKyJ8IjtpZihPaS5tYXRjaChCaSkpe2lmKG51bGw9PUhpJiZudWxsPT0oSGk9VG4oRW4sVW4pKSlyZXR1cm4i''@;'; put 'put ''Ijtvcltvci5sZW5ndGhdPXt0OiJaIix2Ok9pLnRvTG93ZXJDYXNlKCl9LFphPU9pLmNoYXJBdCgxKX1lbHNlIE9pLmluZGV4T2YoIiQiKT4tMSYmKE9pPShPaS5tYXRjaCgvXCQoW14tXFtcXV0qKS8pfHxbXSlbMV18fCIkIixJcyhsbil8fChvcltvci5sZW5ndGhdPXt0OiJ0Iix2Ok9pfSkp''@;'; put 'put ''O2JyZWFrO2Nhc2UiLiI6aWYobnVsbCE9SGkpe2ZvcihPaT1QaTsrK1NyPGxuLmxlbmd0aCYmIjAiPT09KFBpPWxuLmNoYXJBdChTcikpOylPaSs9UGk7b3Jbb3IubGVuZ3RoXT17dDoicyIsdjpPaX07YnJlYWt9Y2FzZSIwIjpjYXNlIiMiOmZvcihPaT1QaTsrK1NyPGxuLmxlbmd0aCYmIjAj''@;'; put 'put ''Py4sRSstJSIuaW5kZXhPZihQaT1sbi5jaGFyQXQoU3IpKT4tMTspT2krPVBpO29yW29yLmxlbmd0aF09e3Q6Im4iLHY6T2l9O2JyZWFrO2Nhc2UiPyI6Zm9yKE9pPVBpO2xuLmNoYXJBdCgrK1NyKT09PVBpOylPaSs9UGk7b3Jbb3IubGVuZ3RoXT17dDpQaSx2Ok9pfSxaYT1QaTticmVhaztj''@;'; put 'put ''YXNlIioiOisrU3IsKCIgIj09bG4uY2hhckF0KFNyKXx8IioiPT1sbi5jaGFyQXQoU3IpKSYmKytTcjticmVhaztjYXNlIigiOmNhc2UiKSI6b3Jbb3IubGVuZ3RoXT17dDoxPT09eGk/InQiOlBpLHY6UGl9LCsrU3I7YnJlYWs7Y2FzZSIxIjpjYXNlIjIiOmNhc2UiMyI6Y2FzZSI0IjpjYXNl''@;'; put 'put ''IjUiOmNhc2UiNiI6Y2FzZSI3IjpjYXNlIjgiOmNhc2UiOSI6Zm9yKE9pPVBpO1NyPGxuLmxlbmd0aCYmIjAxMjM0NTY3ODkiLmluZGV4T2YobG4uY2hhckF0KCsrU3IpKT4tMTspT2krPWxuLmNoYXJBdChTcik7b3Jbb3IubGVuZ3RoXT17dDoiRCIsdjpPaX07YnJlYWs7Y2FzZSIgIjpvcltv''@;'; put 'put ''ci5sZW5ndGhdPXt0OlBpLHY6UGl9LCsrU3I7YnJlYWs7Y2FzZSIkIjpvcltvci5sZW5ndGhdPXt0OiJ0Iix2Ok1pfSwrK1NyO2JyZWFrO2Nhc2UiLyI6b3Jbb3IubGVuZ3RoXT1vci5sZW5ndGg+MCYmSXMob3Jbb3IubGVuZ3RoLTFdLnYpP3t0OiJ0Iix2OlZufTp7dDoidCIsdjoiLyJ9LCsr''@;'; put 'put ''U3I7YnJlYWs7ZGVmYXVsdDppZigtMT09PSIsJC0rLygpOiFeJid+e308Pj1cdTIwYWNhY2Zpamtsb3BxcnR1dnd4elAiLmluZGV4T2YoUGkpKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkIGNoYXJhY3RlciAiK1BpKyIgaW4gIitsbik7b3Jbb3IubGVuZ3RoXT17dDoidCIsdjpQaX0s''@;'; put 'put ''KytTcn12YXIgeWQsRWw9MCxGZj0wO2ZvcihTcj1vci5sZW5ndGgtMSxaYT0idCI7U3I+PTA7LS1Tcilzd2l0Y2gob3JbU3JdLnQpe2Nhc2UiaCI6Y2FzZSJIIjpvcltTcl0udD1jcyxaYT0iaCIsRWw8MSYmKEVsPTEpO2JyZWFrO2Nhc2UicyI6KHlkPW9yW1NyXS52Lm1hdGNoKC9cLjArJC8p''@;'; put 'put ''KSYmKEZmPU1hdGgubWF4KEZmLHlkWzBdLmxlbmd0aC0xKSksRWw8MyYmKEVsPTMpO2Nhc2UiZCI6Y2FzZSJ5IjpjYXNlIk0iOmNhc2UiZSI6WmE9b3JbU3JdLnQ7YnJlYWs7Y2FzZSJtIjoicyI9PT1aYSYmKG9yW1NyXS50PSJNIixFbDwyJiYoRWw9MikpO2JyZWFrO2Nhc2UiWCI6YnJlYWs7''@;'; put 'put ''Y2FzZSJaIjpFbDwxJiZvcltTcl0udi5tYXRjaCgvW0hoXS8pJiYoRWw9MSksRWw8MiYmb3JbU3JdLnYubWF0Y2goL1tNbV0vKSYmKEVsPTIpLEVsPDMmJm9yW1NyXS52Lm1hdGNoKC9bU3NdLykmJihFbD0zKX1zd2l0Y2goRWwpe2Nhc2UgMDpicmVhaztjYXNlIDE6SGkudT49LjUmJihIaS51''@;'; put 'put ''PTAsKytIaS5TKSxIaS5TPj02MCYmKEhpLlM9MCwrK0hpLk0pLEhpLk0+PTYwJiYoSGkuTT0wLCsrSGkuSCk7YnJlYWs7Y2FzZSAyOkhpLnU+PS41JiYoSGkudT0wLCsrSGkuUyksSGkuUz49NjAmJihIaS5TPTAsKytIaS5NKX12YXIga24sZ249IiI7Zm9yKFNyPTA7U3I8b3IubGVuZ3RoOysr''@;'; put 'put ''U3Ipc3dpdGNoKG9yW1NyXS50KXtjYXNlInQiOmNhc2UiVCI6Y2FzZSIgIjpjYXNlIkQiOmJyZWFrO2Nhc2UiWCI6b3JbU3JdLnY9IiIsb3JbU3JdLnQ9IjsiO2JyZWFrO2Nhc2UiZCI6Y2FzZSJtIjpjYXNlInkiOmNhc2UiaCI6Y2FzZSJIIjpjYXNlIk0iOmNhc2UicyI6Y2FzZSJlIjpjYXNl''@;'; put 'put ''ImIiOmNhc2UiWiI6Y2FzZSJcdTBlMjciOmNhc2UiXHUwZTE0IjpjYXNlIlx1MGUxYiI6Y2FzZSJcdTBlMGEiOmNhc2UiXHUwZTE5IjpjYXNlIlx1MGUxNyI6b3JbU3JdLnY9TG8ob3JbU3JdLnQuY2hhckNvZGVBdCgwKSxvcltTcl0udixIaSxGZiksb3JbU3JdLnQ9InQiO2JyZWFrO2Nhc2Ui''@;'; put 'put ''biI6Y2FzZSI/Ijpmb3Ioa249U3IrMTtudWxsIT1vcltrbl0mJigiPyI9PT0oUGk9b3Jba25dLnQpfHwiRCI9PT1QaXx8KCIgIj09PVBpfHwidCI9PT1QaSkmJm51bGwhPW9yW2tuKzFdJiYoIj8iPT09b3Jba24rMV0udHx8InQiPT09b3Jba24rMV0udCYmIi8iPT09b3Jba24rMV0udil8fCIo''@;'; put 'put ''Ij09PW9yW1NyXS50JiYoIiAiPT09UGl8fCJuIj09PVBpfHwiKSI9PT1QaSl8fCJ0Ij09PVBpJiYoIi8iPT09b3Jba25dLnZ8fCIgIj09PW9yW2tuXS52JiZudWxsIT1vcltrbisxXSYmIj8iPT1vcltrbisxXS50KSk7KW9yW1NyXS52Kz1vcltrbl0udixvcltrbl09e3Y6IiIsdDoiOyJ9LCsr''@;'; put 'put ''a247Z24rPW9yW1NyXS52LFNyPWtuLTE7YnJlYWs7Y2FzZSJHIjpvcltTcl0udD0idCIsb3JbU3JdLnY9X2EoRW4sVW4pfXZhciBadCxubix3bj0iIjtpZihnbi5sZW5ndGg+MCl7NDA9PWduLmNoYXJDb2RlQXQoMCk/KFp0PUVuPDAmJjQ1PT09Z24uY2hhckNvZGVBdCgwKT8tRW46RW4sbm49''@;'; put 'put ''aG8oIm4iLGduLFp0KSk6KG5uPWhvKCJuIixnbixadD1FbjwwJiZ4aT4xPy1FbjpFbiksWnQ8MCYmb3JbMF0mJiJ0Ij09b3JbMF0udCYmKG5uPW5uLnN1YnN0cigxKSxvclswXS52PSItIitvclswXS52KSksa249KG5uPW5uLnJlcGxhY2UoL1ssXC5dL2csZnVuY3Rpb24oV3Ipe3JldHVybiIu''@;'; put 'put ''Ij09V3I/a3I6TGl9KSkubGVuZ3RoLTE7dmFyIHhuPW9yLmxlbmd0aDtmb3IoU3I9MDtTcjxvci5sZW5ndGg7KytTcilpZihudWxsIT1vcltTcl0mJiJ0IiE9b3JbU3JdLnQmJm9yW1NyXS52LmluZGV4T2YoIi4iKT4tMSl7eG49U3I7YnJlYWt9dmFyIHpuPW9yLmxlbmd0aDtpZih4bj09PW9y''@;'; put 'put ''Lmxlbmd0aCYmLTE9PT1ubi5pbmRleE9mKCJFIikpe2ZvcihTcj1vci5sZW5ndGgtMTtTcj49MDstLVNyKW51bGw9PW9yW1NyXXx8LTE9PT0ibj8iLmluZGV4T2Yob3JbU3JdLnQpfHwoa24+PW9yW1NyXS52Lmxlbmd0aC0xP29yW1NyXS52PW5uLnN1YnN0cigxKyhrbi09b3JbU3JdLnYubGVu''@;'; put 'put ''Z3RoKSxvcltTcl0udi5sZW5ndGgpOmtuPDA/b3JbU3JdLnY9IiI6KG9yW1NyXS52PW5uLnN1YnN0cigwLGtuKzEpLGtuPS0xKSxvcltTcl0udD0idCIsem49U3IpO2tuPj0wJiZ6bjxvci5sZW5ndGgmJihvclt6bl0udj1ubi5zdWJzdHIoMCxrbisxKStvclt6bl0udil9ZWxzZSBpZih4biE9''@;'; put 'put ''PW9yLmxlbmd0aCYmLTE9PT1ubi5pbmRleE9mKCJFIikpe2Zvcihrbj1ubi5pbmRleE9mKGtyKS0xLFNyPXhuO1NyPj0wOy0tU3IpaWYobnVsbCE9b3JbU3JdJiYtMSE9PSJuPyIuaW5kZXhPZihvcltTcl0udCkpe2ZvcihtYT1vcltTcl0udi5pbmRleE9mKCIuIik+LTEmJlNyPT09eG4/b3Jb''@;'; put 'put ''U3JdLnYuaW5kZXhPZigiLiIpLTE6b3JbU3JdLnYubGVuZ3RoLTEsd249b3JbU3JdLnYuc3Vic3RyKG1hKzEpO21hPj0wOy0tbWEpa24+PTAmJigiMCI9PT1vcltTcl0udi5jaGFyQXQobWEpfHwiIyI9PT1vcltTcl0udi5jaGFyQXQobWEpKSYmKHduPW5uLmNoYXJBdChrbi0tKSt3bik7b3Jb''@;'; put 'put ''U3JdLnY9d24sb3JbU3JdLnQ9InQiLHpuPVNyfWZvcihrbj49MCYmem48b3IubGVuZ3RoJiYob3Jbem5dLnY9bm4uc3Vic3RyKDAsa24rMSkrb3Jbem5dLnYpLGtuPW5uLmluZGV4T2Yoa3IpKzEsU3I9eG47U3I8b3IubGVuZ3RoOysrU3IpaWYobnVsbCE9b3JbU3JdJiYoLTEhPT0ibj8oIi5p''@;'; put 'put ''bmRleE9mKG9yW1NyXS50KXx8U3I9PT14bikpe2ZvcihtYT1vcltTcl0udi5pbmRleE9mKGtyKT4tMSYmU3I9PT14bj9vcltTcl0udi5pbmRleE9mKGtyKSsxOjAsd249b3JbU3JdLnYuc3Vic3RyKDAsbWEpO21hPG9yW1NyXS52Lmxlbmd0aDsrK21hKWtuPG5uLmxlbmd0aCYmKHduKz1ubi5j''@;'; put 'put ''aGFyQXQoa24rKykpO29yW1NyXS52PXduLG9yW1NyXS50PSJ0Iix6bj1Tcn19fWZvcihTcj0wO1NyPG9yLmxlbmd0aDsrK1NyKW51bGwhPW9yW1NyXSYmIm4/Ii5pbmRleE9mKG9yW1NyXS50KT4tMSYmKG9yW1NyXS52PWhvKG9yW1NyXS50LG9yW1NyXS52LFp0PXhpPjEmJkVuPDAmJlNyPjAm''@;'; put 'put ''JiItIj09PW9yW1NyLTFdLnY/LUVuOkVuKS5yZXBsYWNlKC9cLi9nLGtyKS5yZXBsYWNlKC8sLyxMaSksb3JbU3JdLnQ9InQiKTt2YXIgeXI9IiI7Zm9yKFNyPTA7U3IhPT1vci5sZW5ndGg7KytTciludWxsIT1vcltTcl0mJih5cis9b3JbU3JdLnYpO3JldHVybiB5cn1SLmlzX2RhdGU9SXMs''@;'; put 'put ''Ui5fZXZhbD1Qbjt2YXIgaHI9L1xbWz08Pl0vLFFsPS9cWyg9fD5bPV0/fDxbPj1dPykoLT9cZCsoPzpcLlxkKik/KVxdLztmdW5jdGlvbiBZbChsbixFbil7aWYobnVsbD09RW4pcmV0dXJuITE7dmFyIFVuPXBhcnNlRmxvYXQoRW5bMl0pO3N3aXRjaChFblsxXSl7Y2FzZSI9IjppZihsbj09''@;'; put 'put ''VW4pcmV0dXJuITA7YnJlYWs7Y2FzZSI+IjppZihsbj5VbilyZXR1cm4hMDticmVhaztjYXNlIjwiOmlmKGxuPFVuKXJldHVybiEwO2JyZWFrO2Nhc2UiPD4iOmlmKGxuIT1VbilyZXR1cm4hMDticmVhaztjYXNlIj49IjppZihsbj49VW4pcmV0dXJuITA7YnJlYWs7Y2FzZSI8PSI6aWYobG48''@;'; put 'put ''PVVuKXJldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIHl1KGxuLEVuLFVuKXtudWxsPT1VbiYmKFVuPXt9KTt2YXIgeGk9IiI7c3dpdGNoKHR5cGVvZiBsbil7Y2FzZSJzdHJpbmciOnhpPSJtL2QveXkiPT1sbiYmVW4uZGF0ZU5GP1VuLmRhdGVORjpsbjticmVhaztjYXNlIm51bWJlciI6bnVs''@;'; put 'put ''bD09KHhpPTE0PT1sbiYmVW4uZGF0ZU5GP1VuLmRhdGVORjoobnVsbCE9VW4udGFibGU/VW4udGFibGU6YnQpW2xuXSkmJih4aT1Vbi50YWJsZSYmVW4udGFibGVbanRbbG5dXXx8YnRbanRbbG5dXSksbnVsbD09eGkmJih4aT1PdFtsbl18fCJHZW5lcmFsIil9aWYoWWUoeGksMCkpcmV0dXJu''@;'; put 'put ''IF9hKEVuLFVuKTtFbiBpbnN0YW5jZW9mIERhdGUmJihFbj1YbihFbixVbi5kYXRlMTkwNCkpO3ZhciBvcj1mdW5jdGlvbiBHbChsbixFbil7dmFyIFVuPUphKGxuKSx4aT1Vbi5sZW5ndGgsb3I9VW5beGktMV0uaW5kZXhPZigiQCIpO2lmKHhpPDQmJm9yPi0xJiYtLXhpLFVuLmxlbmd0aD40''@;'; put 'put ''KXRocm93IG5ldyBFcnJvcigiY2Fubm90IGZpbmQgcmlnaHQgZm9ybWF0IGZvciB8IitVbi5qb2luKCJ8IikrInwiKTtpZigibnVtYmVyIiE9dHlwZW9mIEVuKXJldHVybls0LDQ9PT1Vbi5sZW5ndGh8fG9yPi0xP1VuW1VuLmxlbmd0aC0xXToiQCJdO3N3aXRjaChVbi5sZW5ndGgpe2Nhc2Ug''@;'; put 'put ''MTpVbj1vcj4tMT9bIkdlbmVyYWwiLCJHZW5lcmFsIiwiR2VuZXJhbCIsVW5bMF1dOltVblswXSxVblswXSxVblswXSwiQCJdO2JyZWFrO2Nhc2UgMjpVbj1vcj4tMT9bVW5bMF0sVW5bMF0sVW5bMF0sVW5bMV1dOltVblswXSxVblsxXSxVblswXSwiQCJdO2JyZWFrO2Nhc2UgMzpVbj1vcj4t''@;'; put 'put ''MT9bVW5bMF0sVW5bMV0sVW5bMF0sVW5bMl1dOltVblswXSxVblsxXSxVblsyXSwiQCJdfXZhciBPaT1Fbj4wP1VuWzBdOkVuPDA/VW5bMV06VW5bMl07aWYoLTE9PT1VblswXS5pbmRleE9mKCJbIikmJi0xPT09VW5bMV0uaW5kZXhPZigiWyIpKXJldHVyblt4aSxPaV07aWYobnVsbCE9VW5b''@;'; put 'put ''MF0ubWF0Y2goaHIpfHxudWxsIT1VblsxXS5tYXRjaChocikpe3ZhciBTcj1VblswXS5tYXRjaChRbCksUGk9VW5bMV0ubWF0Y2goUWwpO3JldHVybiBZbChFbixTcik/W3hpLFVuWzBdXTpZbChFbixQaSk/W3hpLFVuWzFdXTpbeGksVW5bbnVsbCE9U3ImJm51bGwhPVBpPzI6MV1dfXJldHVy''@;'; put 'put ''blt4aSxPaV19KHhpLEVuKTtpZihZZShvclsxXSkpcmV0dXJuIF9hKEVuLFVuKTtpZighMD09PUVuKUVuPSJUUlVFIjtlbHNlIGlmKCExPT09RW4pRW49IkZBTFNFIjtlbHNlIGlmKCIiPT09RW58fG51bGw9PUVuKXJldHVybiIiO3JldHVybiBQbihvclsxXSxFbixVbixvclswXSl9ZnVuY3Rp''@;'; put 'put ''b24gTWwobG4sRW4pe2lmKCJudW1iZXIiIT10eXBlb2YgRW4pe0VuPStFbnx8LTE7Zm9yKHZhciBVbj0wO1VuPDM5MjsrK1VuKWlmKG51bGwhPWJ0W1VuXSl7aWYoYnRbVW5dPT1sbil7RW49VW47YnJlYWt9fWVsc2UgRW48MCYmKEVuPVVuKTtFbjwwJiYoRW49MzkxKX1yZXR1cm4gYnRbRW5d''@;'; put 'put ''PWxuLEVufVIubG9hZD1NbCxSLl90YWJsZT1idCxSLmdldF90YWJsZT1mdW5jdGlvbigpe3JldHVybiBidH0sUi5sb2FkX3RhYmxlPWZ1bmN0aW9uKEVuKXtmb3IodmFyIFVuPTA7MzkyIT1VbjsrK1VuKXZvaWQgMCE9PUVuW1VuXSYmTWwoRW5bVW5dLFVuKX0sUi5pbml0X3RhYmxlPWF0LFIu''@;'; put 'put ''Zm9ybWF0PXl1LFIuZ2V0bG9jYWxlPWZ1bmN0aW9uIEJyKCl7cmV0dXJuIEJufHwiZW4tVVMifSxSLnNldGxvY2FsZT1mdW5jdGlvbiBfcihsbil7aWYoZnVuY3Rpb24ganIobG4pe3ZhciBFbj0wO3N3aXRjaCgoQm58fCIiKS50b0xvd2VyQ2FzZSgpKXtjYXNlInpoLXR3IjpjYXNlInpoLWNu''@;'; put 'put ''IjpjYXNlImphLWpwIjpjYXNlImtvLWtyIjpmb3IoRW49Mjc7RW48PTM2OysrRW4pZGVsZXRlIGxuW0VuXTtmb3IoRW49NTA7RW48PTU4OysrRW4pZGVsZXRlIGxuW0VuXTticmVhaztjYXNlInRoLXRoIjpmb3IoRW49NTk7RW48PTYyOysrRW4pZGVsZXRlIGxuW0VuXTtmb3IoRW49Njc7RW48''@;'; put 'put ''PTgxOysrRW4pZGVsZXRlIGxuW0VuXX19KGJ0KSxCbj1sbixGbihidCksdHlwZW9mIEludGw8InUiKXt2YXIgRW49SW50bC5EYXRlVGltZUZvcm1hdChsbik7aWYoRW4uZm9ybWF0VG9QYXJ0cyl7Zm9yKHZhciBVbj1Fbi5mb3JtYXRUb1BhcnRzKG5ldyBEYXRlKDIwMjAsMCw1LDAsMCwwKSks''@;'; put 'put ''eGk9MDt4aTw3OysreGkpY3RbeGldWzFdPUludGwuRGF0ZVRpbWVGb3JtYXQobG4se3dlZWtkYXk6ImxvbmcifSkuZm9ybWF0VG9QYXJ0cyhuZXcgRGF0ZSgyMDIwLDAsNSt4aSwwLDAsMCkpWzBdLnZhbHVlLGN0W3hpXVswXT1JbnRsLkRhdGVUaW1lRm9ybWF0KGxuLHt3ZWVrZGF5OiJzaG9y''@;'; put 'put ''dCJ9KS5mb3JtYXRUb1BhcnRzKG5ldyBEYXRlKDIwMjAsMCw1K3hpLDAsMCwwKSlbMF0udmFsdWU7Zm9yKHZhciBvcj0wO29yPDEyOysrb3IpRXRbb3JdWzJdPUludGwuRGF0ZVRpbWVGb3JtYXQobG4se21vbnRoOiJsb25nIn0pLmZvcm1hdFRvUGFydHMobmV3IERhdGUoMjAyMCxvciwyLDAs''@;'; put 'put ''MCwwKSlbMF0udmFsdWUsRXRbb3JdWzFdPUludGwuRGF0ZVRpbWVGb3JtYXQobG4se21vbnRoOiJzaG9ydCJ9KS5mb3JtYXRUb1BhcnRzKG5ldyBEYXRlKDIwMjAsb3IsMiwwLDAsMCkpWzBdLnZhbHVlLEV0W29yXVswXT1FdFtvcl1bMV0uc2xpY2UoMCwxKTtmb3IodmFyIE9pPSIiLFNyPTA7''@;'; put 'put ''U3I8VW4ubGVuZ3RoOysrU3Ipe3ZhciBQaT1VbltTcl0udmFsdWU7c3dpdGNoKFVuW1NyXS50eXBlKXtjYXNlInllYXIiOk9pKz0yPT1QaS5sZW5ndGg/Inl5IjoieXl5eSI7YnJlYWs7Y2FzZSJtb250aCI6T2krPSIxIj09UGk/Im0iOiIwMSI9PVBpPyJtbSI6UGk9PUV0WzBdWzFdPyJtbW0i''@;'; put 'put ''OlBpPT1FdFswXVsyXT8ibW1tbSI6UGk9PUV0WzBdWzBdPyJtbW1tbSI6Im1tIjticmVhaztjYXNlImRheSI6T2krPSI1Ij09UGk/ImQiOiIwNSI9PVBpPyJkZCI6UGk9PWN0WzBdWzBdPyJkZGQiOlBpPT1jdFswXVsxXT8iZGRkZCI6ImRkIjticmVhaztjYXNlImxpdGVyYWwiOk9pKz1QaS5y''@;'; put 'put ''ZXBsYWNlKC8uL2csIlxcJCYiKSwxPT1QaS5sZW5ndGgmJihWbj1QaSl9fShsbi5tYXRjaCgvZW4vaSkmJmxuLm1hdGNoKC91cy9pKXx8IWxuKSYmKE9pPSJtL2QveXkiKSxidFsxNF09T2l9ZWxzZSJqYS1qcCI9PWxuLnRvTG93ZXJDYXNlKCkmJihidFsxNF09Inl5eXlcXC9tXFwvZCIpO3Zh''@;'; put 'put ''ciBaYT1JbnRsLk51bWJlckZvcm1hdChsbix7fSkuZm9ybWF0KDEyMzQ1NjcuODkpO1phJiYoTGk9KFphLm1hdGNoKC8xKC4qKTIvKXx8W10pWzFdLGtyPShaYS5tYXRjaCgvNyguKik4Lyl8fFtdKVsxXSl9ZnJbbG4udG9Mb3dlckNhc2UoKV18fChmcltsbi50b0xvd2VyQ2FzZSgpXT17Ii4i''@;'; put 'put ''OmtyLCIsIjpMaX0pLGVyPWV0KGJyPWZyW2xuLnRvTG93ZXJDYXNlKCldfHxmclsiZW4tdXMiXSl9LFIubm9ybWFsaXplPWZ1bmN0aW9uIFdvKGxuKXtmb3IodmFyIEVuPTAsVW49MCx4aT0iIixvcj0iIixPaT0iIixTcj1ici55fHwieSIsUGk9U3IudG9VcHBlckNhc2UoKSxaYT1ici5kfHwi''@;'; put 'put ''ZCIsSGk9WmEudG9VcHBlckNhc2UoKSxtYT1iclsiLiJdLERpPWJyWyIsIl0sY3M9IjAjP0UrLSUiK2JyWyIsIl0rbWE7RW48bG4ubGVuZ3RoOylzd2l0Y2goeGk9bG4uY2hhckF0KEVuKSl7Y2FzZSJHIjpFbisrLE9pKz14aTticmVhaztjYXNlJyInOmZvcihPaSs9eGk7MzQhPT0oVW49bG4u''@;'; put 'put ''Y2hhckNvZGVBdCgrK0VuKSkmJkVuPGxuLmxlbmd0aDspT2krPVN0cmluZy5mcm9tQ2hhckNvZGUoVW4pO09pKz0nIicsKytFbjticmVhaztjYXNlIlxcIjpjYXNlIl8iOk9pKz1sbi5zbGljZShFbixFbisyKSxFbis9MjticmVhaztjYXNlIkAiOk9pKz14aSwrK0VuO2JyZWFrO2Nhc2UiQiI6''@;'; put 'put ''Y2FzZSJiIjorK0VuLE9pKz14aTticmVhaztjYXNlIFNyOmNhc2UgUGk6Y2FzZSBaYTpjYXNlIEhpOk9pKz1lclt4aS50b0xvd2VyQ2FzZSgpXSwrK0VuO2JyZWFrO2Nhc2UiTSI6Y2FzZSJIIjpjYXNlIlMiOmNhc2UiRSI6Y2FzZSJtIjpjYXNlImgiOmNhc2UicyI6Y2FzZSJlIjpjYXNlImci''@;'; put 'put ''OmNhc2UiQSI6Y2FzZSJhIjpPaSs9eGksKytFbjticmVhaztjYXNlIlsiOmZvcihvcj14aTsiXSIhPT1sbi5jaGFyQXQoRW4rKykmJkVuPGxuLmxlbmd0aDspb3IrPWxuLmNoYXJBdChFbik7T2krPW9yO2JyZWFrO2Nhc2UgRGk6T2krPSciJyt4aSsnIicsKytFbjticmVhaztjYXNlIG1hOmlm''@;'; put 'put ''KCEoRW48bG4ubGVuZ3RoJiYoY3MuaW5kZXhPZih4aT1sbi5jaGFyQXQoKytFbikpPi0xfHwiXFwiPT14aSYmIi0iPT1sbi5jaGFyQXQoRW4rMSkmJiIwIyIuaW5kZXhPZihsbi5jaGFyQXQoRW4rMikpPi0xKSkpe09pKz0nIicrbWErJyInO2JyZWFrfXhpPW1hLC0tRW47Y2FzZSIwIjpjYXNl''@;'; put 'put ''IiMiOmZvcihPaSs9ZXJbeGkudG9Mb3dlckNhc2UoKV18fHhpO0VuPGxuLmxlbmd0aCYmKGNzLmluZGV4T2YoeGk9bG4uY2hhckF0KCsrRW4pKT4tMXx8IlxcIj09eGkmJiItIj09bG4uY2hhckF0KEVuKzEpJiYiMCMiLmluZGV4T2YobG4uY2hhckF0KEVuKzIpKT4tMSk7KU9pKz1lclt4aS50''@;'; put 'put ''b0xvd2VyQ2FzZSgpXXx8eGk7YnJlYWs7Y2FzZSI/Ijpmb3IoT2krPXhpO2xuLmNoYXJBdCgrK0VuKT09PXhpOylPaSs9eGk7YnJlYWs7Y2FzZSIqIjpPaSs9eGksKytFbiwoIiAiPT1sbi5jaGFyQXQoRW4pfHwiKiI9PWxuLmNoYXJBdChFbikpJiYoT2krPWxuLmNoYXJBdChFbiksKytFbik7''@;'; put 'put ''YnJlYWs7Y2FzZSIoIjpjYXNlIikiOk9pKz14aSwrK0VuO2JyZWFrO2Nhc2UiMSI6Y2FzZSIyIjpjYXNlIjMiOmNhc2UiNCI6Y2FzZSI1IjpjYXNlIjYiOmNhc2UiNyI6Y2FzZSI4IjpjYXNlIjkiOmZvcihPaSs9eGk7RW48bG4ubGVuZ3RoJiYiMDEyMzQ1Njc4OSIuaW5kZXhPZihsbi5jaGFy''@;'; put 'put ''QXQoKytFbikpPi0xOylPaSs9bG4uY2hhckF0KEVuKTticmVhaztkZWZhdWx0Ok9pKz14aSwrK0VufXJldHVybiBPaX0sUi5nZXRjdXJyZW5jeT1mdW5jdGlvbiBuYSgpe3JldHVybiBGaXx8IlVTRCJ9LFIuc2V0Y3VycmVuY3k9ZnVuY3Rpb24gY2EobG4pe0ZpPWxuLE1pPXR5cGVvZiBJbnRs''@;'; put 'put ''PCJ1Ij9JbnRsLk51bWJlckZvcm1hdChCbix7c3R5bGU6ImN1cnJlbmN5IixjdXJyZW5jeURpc3BsYXk6InN5bWJvbCIsY3VycmVuY3k6bG59KS5mb3JtYXQoMCkucmVwbGFjZSgvWzBcLlwsXHNdL2csIiIpOiIkIn19O2FlKEEpO3ZhciB4ZSx0ZT17IkdlbmVyYWwgTnVtYmVyIjoiR2VuZXJh''@;'; put 'put ''bCIsIkdlbmVyYWwgRGF0ZSI6QS5fdGFibGVbMjJdLCJMb25nIERhdGUiOiJkZGRkLCBtbW1tIGRkLCB5eXl5IiwiTWVkaXVtIERhdGUiOkEuX3RhYmxlWzE1XSwiU2hvcnQgRGF0ZSI6QS5fdGFibGVbMTRdLCJMb25nIFRpbWUiOkEuX3RhYmxlWzE5XSwiTWVkaXVtIFRpbWUiOkEuX3RhYmxl''@;'; put 'put ''WzE4XSwiU2hvcnQgVGltZSI6QS5fdGFibGVbMjBdLEN1cnJlbmN5OiciJCIjLCMjMC4wMF8pO1tSZWRdXFwoIiQiIywjIzAuMDBcXCknLEZpeGVkOkEuX3RhYmxlWzJdLFN0YW5kYXJkOkEuX3RhYmxlWzRdLFBlcmNlbnQ6QS5fdGFibGVbMTBdLFNjaWVudGlmaWM6QS5fdGFibGVbMTFdLCJZ''@;'; put 'put ''ZXMvTm8iOiciWWVzIjsiWWVzIjsiTm8iO0AnLCJUcnVlL0ZhbHNlIjonIlRydWUiOyJUcnVlIjsiRmFsc2UiO0AnLCJPbi9PZmYiOiciWWVzIjsiWWVzIjsiTm8iO0AnfSxzZT17NTonIiQiIywjIzBfKTtcXCgiJCIjLCMjMFxcKScsNjonIiQiIywjIzBfKTtbUmVkXVxcKCIkIiMsIyMwXFwp''@;'; put 'put ''Jyw3OiciJCIjLCMjMC4wMF8pO1xcKCIkIiMsIyMwLjAwXFwpJyw4OiciJCIjLCMjMC4wMF8pO1tSZWRdXFwoIiQiIywjIzAuMDBcXCknLDIzOiJHZW5lcmFsIiwyNDoiR2VuZXJhbCIsMjU6IkdlbmVyYWwiLDI2OiJHZW5lcmFsIiwyNzoibS9kL3l5IiwyODoibS9kL3l5IiwyOToibS9kL3l5''@;'; put 'put ''IiwzMDoibS9kL3l5IiwzMToibS9kL3l5IiwzMjoiaDptbTpzcyIsMzM6Img6bW06c3MiLDM0OiJoOm1tOnNzIiwzNToiaDptbTpzcyIsMzY6Im0vZC95eSIsNDE6J18oKiAjLCMjMF8pO18oKiAoIywjIzApO18oKiAiLSJfKTtfKEBfKScsNDI6J18oIiQiKiAjLCMjMF8pO18oIiQiKiAoIywj''@;'; put 'put ''IzApO18oIiQiKiAiLSJfKTtfKEBfKScsNDM6J18oKiAjLCMjMC4wMF8pO18oKiAoIywjIzAuMDApO18oKiAiLSI/P18pO18oQF8pJyw0NDonXygiJCIqICMsIyMwLjAwXyk7XygiJCIqICgjLCMjMC4wMCk7XygiJCIqICItIj8/Xyk7XyhAXyknLDUwOiJtL2QveXkiLDUxOiJtL2QveXkiLDUy''@;'; put 'put ''OiJtL2QveXkiLDUzOiJtL2QveXkiLDU0OiJtL2QveXkiLDU1OiJtL2QveXkiLDU2OiJtL2QveXkiLDU3OiJtL2QveXkiLDU4OiJtL2QveXkiLDU5OiIwIiw2MDoiMC4wMCIsNjE6IiMsIyMwIiw2MjoiIywjIzAuMDAiLDYzOiciJCIjLCMjMF8pO1xcKCIkIiMsIyMwXFwpJyw2NDonIiQiIywj''@;'; put 'put ''IzBfKTtbUmVkXVxcKCIkIiMsIyMwXFwpJyw2NTonIiQiIywjIzAuMDBfKTtcXCgiJCIjLCMjMC4wMFxcKScsNjY6JyIkIiMsIyMwLjAwXyk7W1JlZF1cXCgiJCIjLCMjMC4wMFxcKScsNjc6IjAlIiw2ODoiMC4wMCUiLDY5OiIjID8vPyIsNzA6IiMgPz8vPz8iLDcxOiJtL2QveXkiLDcyOiJt''@;'; put 'put ''L2QveXkiLDczOiJkLW1tbS15eSIsNzQ6ImQtbW1tIiw3NToibW1tLXl5Iiw3NjoiaDptbSIsNzc6Img6bW06c3MiLDc4OiJtL2QveXkgaDptbSIsNzk6Im1tOnNzIiw4MDoiW2hdOm1tOnNzIiw4MToibW1zcy4wIn0sd2U9L1tkRF0rfFttTV0rfFt5WWVFXSt8W0hoXSt8W1NzXSsvZzshZnVu''@;'; put 'put ''Y3Rpb24oUyl7Uy52ZXJzaW9uPSIxLjIuMCI7dmFyIGs9ZnVuY3Rpb24gUigpe2Zvcih2YXIgcGU9MCx5ZT1uZXcgQXJyYXkoMjU2KSxQZT0wOzI1NiE9UGU7KytQZSl5ZVtQZV09cGU9MSYocGU9MSYocGU9MSYocGU9MSYocGU9MSYocGU9MSYocGU9MSYocGU9MSYocGU9UGUpPy0zMDY2NzQ5''@;'; put 'put ''MTJecGU+Pj4xOnBlPj4+MSk/LTMwNjY3NDkxMl5wZT4+PjE6cGU+Pj4xKT8tMzA2Njc0OTEyXnBlPj4+MTpwZT4+PjEpPy0zMDY2NzQ5MTJecGU+Pj4xOnBlPj4+MSk/LTMwNjY3NDkxMl5wZT4+PjE6cGU+Pj4xKT8tMzA2Njc0OTEyXnBlPj4+MTpwZT4+PjEpPy0zMDY2NzQ5MTJecGU+Pj4x''@;'; put 'put ''OnBlPj4+MSk/LTMwNjY3NDkxMl5wZT4+PjE6cGU+Pj4xO3JldHVybiB0eXBlb2YgSW50MzJBcnJheTwidSI/bmV3IEludDMyQXJyYXkoeWUpOnllfSgpO1MudGFibGU9ayxTLmJzdHI9ZnVuY3Rpb24gRyhwZSx5ZSl7Zm9yKHZhciBQZT1+eWUsTmU9cGUubGVuZ3RoLTEsWWU9MDtZZTxOZTsp''@;'; put 'put ''UGU9KFBlPVBlPj4+OF5rWzI1NSYoUGVecGUuY2hhckNvZGVBdChZZSsrKSldKT4+Pjhea1syNTUmKFBlXnBlLmNoYXJDb2RlQXQoWWUrKykpXTtyZXR1cm4gWWU9PT1OZSYmKFBlPVBlPj4+OF5rWzI1NSYoUGVecGUuY2hhckNvZGVBdChZZSkpXSksflBlfSxTLmJ1Zj1mdW5jdGlvbiBRKHBl''@;'; put 'put ''LHllKXtpZihwZS5sZW5ndGg+MWU0KXJldHVybiBmdW5jdGlvbiBvZShwZSx5ZSl7Zm9yKHZhciBQZT1+eWUsTmU9cGUubGVuZ3RoLTcsWWU9MDtZZTxOZTspUGU9KFBlPShQZT0oUGU9KFBlPShQZT0oUGU9KFBlPVBlPj4+OF5rWzI1NSYoUGVecGVbWWUrK10pXSk+Pj44XmtbMjU1JihQZV5w''@;'; put 'put ''ZVtZZSsrXSldKT4+Pjhea1syNTUmKFBlXnBlW1llKytdKV0pPj4+OF5rWzI1NSYoUGVecGVbWWUrK10pXSk+Pj44XmtbMjU1JihQZV5wZVtZZSsrXSldKT4+Pjhea1syNTUmKFBlXnBlW1llKytdKV0pPj4+OF5rWzI1NSYoUGVecGVbWWUrK10pXSk+Pj44XmtbMjU1JihQZV5wZVtZZSsrXSld''@;'; put 'put ''O2Zvcig7WWU8TmUrNzspUGU9UGU+Pj44XmtbMjU1JihQZV5wZVtZZSsrXSldO3JldHVybn5QZX0ocGUseWUpO2Zvcih2YXIgUGU9fnllLE5lPXBlLmxlbmd0aC0zLFllPTA7WWU8TmU7KVBlPShQZT0oUGU9KFBlPVBlPj4+OF5rWzI1NSYoUGVecGVbWWUrK10pXSk+Pj44XmtbMjU1JihQZV5w''@;'; put 'put ''ZVtZZSsrXSldKT4+Pjhea1syNTUmKFBlXnBlW1llKytdKV0pPj4+OF5rWzI1NSYoUGVecGVbWWUrK10pXTtmb3IoO1llPE5lKzM7KVBlPVBlPj4+OF5rWzI1NSYoUGVecGVbWWUrK10pXTtyZXR1cm5+UGV9LFMuc3RyPWZ1bmN0aW9uIGdlKHBlLHllKXtmb3IodmFyIGV0LGN0LFBlPX55ZSxO''@;'; put 'put ''ZT0wLFllPXBlLmxlbmd0aDtOZTxZZTspKGV0PXBlLmNoYXJDb2RlQXQoTmUrKykpPDEyOD9QZT1QZT4+Pjhea1syNTUmKFBlXmV0KV06ZXQ8MjA0OD9QZT0oUGU9UGU+Pj44XmtbMjU1JihQZV4oMTkyfGV0Pj42JjMxKSldKT4+Pjhea1syNTUmKFBlXigxMjh8NjMmZXQpKV06ZXQ+PTU1Mjk2''@;'; put 'put ''JiZldDw1NzM0ND8oZXQ9NjQrKDEwMjMmZXQpLGN0PTEwMjMmcGUuY2hhckNvZGVBdChOZSsrKSxQZT0oUGU9KFBlPShQZT1QZT4+Pjhea1syNTUmKFBlXigyNDB8ZXQ+PjgmNykpXSk+Pj44XmtbMjU1JihQZV4oMTI4fGV0Pj4yJjYzKSldKT4+Pjhea1syNTUmKFBlXigxMjh8Y3Q+PjYmMTV8''@;'; put 'put ''KDMmZXQpPDw0KSldKT4+Pjhea1syNTUmKFBlXigxMjh8NjMmY3QpKV0pOlBlPShQZT0oUGU9UGU+Pj44XmtbMjU1JihQZV4oMjI0fGV0Pj4xMiYxNSkpXSk+Pj44XmtbMjU1JihQZV4oMTI4fGV0Pj42JjYzKSldKT4+Pjhea1syNTUmKFBlXigxMjh8NjMmZXQpKV07cmV0dXJuflBlfX0oeGU9''@;'; put 'put ''e30pO3ZhciBYZSx2ZT1mdW5jdGlvbigpe3ZhciB5ZSxSPXt9O2Z1bmN0aW9uIEcoZ24pe2lmKCIvIj09Z24uY2hhckF0KGduLmxlbmd0aC0xKSlyZXR1cm4tMT09PWduLnNsaWNlKDAsLTEpLmluZGV4T2YoIi8iKT9nbjpHKGduLnNsaWNlKDAsLTEpKTt2YXIga249Z24ubGFzdEluZGV4T2Yo''@;'; put 'put ''Ii8iKTtyZXR1cm4tMT09PWtuP2duOmduLnNsaWNlKDAsa24rMSl9ZnVuY3Rpb24gUShnbil7aWYoIi8iPT1nbi5jaGFyQXQoZ24ubGVuZ3RoLTEpKXJldHVybiBRKGduLnNsaWNlKDAsLTEpKTt2YXIga249Z24ubGFzdEluZGV4T2YoIi8iKTtyZXR1cm4tMT09PWtuP2duOmduLnNsaWNlKGtu''@;'; put 'put ''KzEpfWZ1bmN0aW9uIG9lKGduLGtuKXsic3RyaW5nIj09dHlwZW9mIGtuJiYoa249bmV3IERhdGUoa24pKTt2YXIgd249a24uZ2V0SG91cnMoKTt3bj0od249d248PDZ8a24uZ2V0TWludXRlcygpKTw8NXxrbi5nZXRTZWNvbmRzKCk+Pj4xLGduLndyaXRlX3NoaWZ0KDIsd24pO3ZhciBadD1r''@;'; put 'put ''bi5nZXRGdWxsWWVhcigpLTE5ODA7WnQ9KFp0PVp0PDw0fGtuLmdldE1vbnRoKCkrMSk8PDV8a24uZ2V0RGF0ZSgpLGduLndyaXRlX3NoaWZ0KDIsWnQpfWZ1bmN0aW9uIHBlKGduKXttbihnbiwwKTtmb3IodmFyIGtuPXt9LHduPTA7Z24ubDw9Z24ubGVuZ3RoLTQ7KXt2YXIgWnQ9Z24ucmVh''@;'; put 'put ''ZF9zaGlmdCgyKSxubj1nbi5yZWFkX3NoaWZ0KDIpLHhuPWduLmwrbm4sem49e307MjE1ODk9PT1adCYmKDEmKHduPWduLnJlYWRfc2hpZnQoMSkpJiYoem4ubXRpbWU9Z24ucmVhZF9zaGlmdCg0KSksbm4+NSYmKDImd24mJih6bi5hdGltZT1nbi5yZWFkX3NoaWZ0KDQpKSw0JnduJiYoem4u''@;'; put 'put ''Y3RpbWU9Z24ucmVhZF9zaGlmdCg0KSkpLHpuLm10aW1lJiYoem4ubXQ9bmV3IERhdGUoMWUzKnpuLm10aW1lKSkpLGduLmw9eG4sa25bWnRdPXpufXJldHVybiBrbn1mdW5jdGlvbiBQZSgpe3JldHVybiB5ZXx8KHllPXkoODMzMzcpKX1mdW5jdGlvbiBOZShnbixrbil7aWYoODA9PWduWzBd''@;'; put 'put ''JiY3NT09Z25bMV0pcmV0dXJuIERpKGduLGtuKTtpZihnbi5sZW5ndGg8NTEyKXRocm93IG5ldyBFcnJvcigiQ0ZCIGZpbGUgc2l6ZSAiK2duLmxlbmd0aCsiIDwgNTEyIik7dmFyIHduLG5uLHhuLHpuLHlyLFdyLFp0PTUxMixvaT1bXSxuaT1nbi5zbGljZSgwLDUxMik7bW4obmksMCk7dmFy''@;'; put 'put ''IFhpPWZ1bmN0aW9uIFllKGduKXtpZig4MD09Z25bZ24ubF0mJjc1PT1nbltnbi5sKzFdKXJldHVyblswLDBdO2duLmNoayhNaSwiSGVhZGVyIFNpZ25hdHVyZTogIiksZ24ubCs9MTY7dmFyIGtuPWduLnJlYWRfc2hpZnQoMiwidSIpO3JldHVybltnbi5yZWFkX3NoaWZ0KDIsInUiKSxrbl19''@;'; put 'put ''KG5pKTtzd2l0Y2god249WGlbMF0pe2Nhc2UgMzpadD01MTI7YnJlYWs7Y2FzZSA0Olp0PTQwOTY7YnJlYWs7Y2FzZSAwOmlmKDA9PVhpWzFdKXJldHVybiBEaShnbixrbik7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIk1ham9yIFZlcnNpb246IEV4cGVjdGVkIDMgb3IgNCBzYXcgIit3bil9''@;'; put 'put ''NTEyIT09WnQmJm1uKG5pPWduLnNsaWNlKDAsWnQpLDI4KTt2YXIgVWk9Z24uc2xpY2UoMCxadCk7IWZ1bmN0aW9uIGV0KGduLGtuKXt2YXIgd247c3dpdGNoKGduLmwrPTIsd249Z24ucmVhZF9zaGlmdCgyKSl7Y2FzZSA5OmlmKDMhPWtuKXRocm93IG5ldyBFcnJvcigiU2VjdG9yIFNoaWZ0''@;'; put 'put ''OiBFeHBlY3RlZCA5IHNhdyAiK3duKTticmVhaztjYXNlIDEyOmlmKDQhPWtuKXRocm93IG5ldyBFcnJvcigiU2VjdG9yIFNoaWZ0OiBFeHBlY3RlZCAxMiBzYXcgIit3bik7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlNlY3RvciBTaGlmdDogRXhwZWN0ZWQgOSBvciAxMiBzYXcg''@;'; put 'put ''Iit3bil9Z24uY2hrKCIwNjAwIiwiTWluaSBTZWN0b3IgU2hpZnQ6ICIpLGduLmNoaygiMDAwMDAwMDAwMDAwIiwiUmVzZXJ2ZWQ6ICIpfShuaSx3bik7dmFyIG5vPW5pLnJlYWRfc2hpZnQoNCwiaSIpO2lmKDM9PT13biYmMCE9PW5vKXRocm93IG5ldyBFcnJvcigiIyBEaXJlY3RvcnkgU2Vj''@;'; put 'put ''dG9yczogRXhwZWN0ZWQgMCBzYXcgIitubyk7bmkubCs9NCx6bj1uaS5yZWFkX3NoaWZ0KDQsImkiKSxuaS5sKz00LG5pLmNoaygiMDAxMDAwMDAiLCJNaW5pIFN0cmVhbSBDdXRvZmYgU2l6ZTogIikseXI9bmkucmVhZF9zaGlmdCg0LCJpIiksbm49bmkucmVhZF9zaGlmdCg0LCJpIiksV3I9''@;'; put 'put ''bmkucmVhZF9zaGlmdCg0LCJpIikseG49bmkucmVhZF9zaGlmdCg0LCJpIik7Zm9yKHZhciBqYT0tMSx2YT0wO3ZhPDEwOSYmISgoamE9bmkucmVhZF9zaGlmdCg0LCJpIikpPDApOysrdmEpb2lbdmFdPWphO3ZhciBUbz1mdW5jdGlvbiBjdChnbixrbil7Zm9yKHZhciB3bj1NYXRoLmNlaWwo''@;'; put 'put ''Z24ubGVuZ3RoL2tuKS0xLFp0PVtdLG5uPTE7bm48d247KytubiladFtubi0xXT1nbi5zbGljZShubiprbiwobm4rMSkqa24pO3JldHVybiBadFt3bi0xXT1nbi5zbGljZSh3biprbiksWnR9KGduLFp0KTtidChXcix4bixUbyxadCxvaSk7dmFyIHhzPWZ1bmN0aW9uIGt0KGduLGtuLHduLFp0''@;'; put 'put ''KXt2YXIgbm49Z24ubGVuZ3RoLHhuPVtdLHpuPVtdLHlyPVtdLFdyPVtdLG9pPVp0LTEsbmk9MCxYaT0wLFVpPTAsbm89MDtmb3Iobmk9MDtuaTxubjsrK25pKWlmKHlyPVtdLChVaT1uaStrbik+PW5uJiYoVWktPW5uKSwhem5bVWldKXtXcj1bXTt2YXIgamE9W107Zm9yKFhpPVVpO1hpPj0w''@;'; put 'put ''Oyl7amFbWGldPSEwLHpuW1hpXT0hMCx5clt5ci5sZW5ndGhdPVhpLFdyLnB1c2goZ25bWGldKTt2YXIgdmE9d25bTWF0aC5mbG9vcig0KlhpL1p0KV07aWYoWnQ8NCsobm89NCpYaSZvaSkpdGhyb3cgbmV3IEVycm9yKCJGQVQgYm91bmRhcnkgY3Jvc3NlZDogIitYaSsiIDQgIitadCk7aWYo''@;'; put 'put ''IWduW3ZhXXx8amFbWGk9VnMoZ25bdmFdLG5vKV0pYnJlYWt9eG5bVWldPXtub2Rlczp5cixkYXRhOnkwKFtXcl0pfX1yZXR1cm4geG59KFRvLHpuLG9pLFp0KTt4c1t6bl0ubmFtZT0iIURpcmVjdG9yeSIsbm4+MCYmeXIhPT1lciYmKHhzW3lyXS5uYW1lPSIhTWluaUZBVCIpLHhzW29pWzBd''@;'; put 'put ''XS5uYW1lPSIhRkFUIix4cy5mYXRfYWRkcnM9b2kseHMuc3N6PVp0O3ZhciBjMD1bXSxhMT1bXSxCOD1bXTsoZnVuY3Rpb24gT3QoZ24sa24sd24sWnQsbm4seG4sem4seXIpe2Zvcih2YXIgbm8sV3I9MCxvaT1adC5sZW5ndGg/MjowLG5pPWtuW2duXS5kYXRhLFhpPTAsVWk9MDtYaTxuaS5s''@;'; put 'put ''ZW5ndGg7WGkrPTEyOCl7dmFyIGphPW5pLnNsaWNlKFhpLFhpKzEyOCk7bW4oamEsNjQpLFVpPWphLnJlYWRfc2hpZnQoMiksbm89T2woamEsMCxVaS1vaSksWnQucHVzaChubyk7dmFyIHZhPXtuYW1lOm5vLHR5cGU6amEucmVhZF9zaGlmdCgxKSxjb2xvcjpqYS5yZWFkX3NoaWZ0KDEpLEw6''@;'; put 'put ''amEucmVhZF9zaGlmdCg0LCJpIiksUjpqYS5yZWFkX3NoaWZ0KDQsImkiKSxDOmphLnJlYWRfc2hpZnQoNCwiaSIpLGNsc2lkOmphLnJlYWRfc2hpZnQoMTYpLHN0YXRlOmphLnJlYWRfc2hpZnQoNCwiaSIpLHN0YXJ0OjAsc2l6ZTowfTswIT09amEucmVhZF9zaGlmdCgyKStqYS5yZWFkX3No''@;'; put 'put ''aWZ0KDIpK2phLnJlYWRfc2hpZnQoMikramEucmVhZF9zaGlmdCgyKSYmKHZhLmN0PUt0KGphLGphLmwtOCkpLDAhPT1qYS5yZWFkX3NoaWZ0KDIpK2phLnJlYWRfc2hpZnQoMikramEucmVhZF9zaGlmdCgyKStqYS5yZWFkX3NoaWZ0KDIpJiYodmEubXQ9S3QoamEsamEubC04KSksdmEuc3Rh''@;'; put 'put ''cnQ9amEucmVhZF9zaGlmdCg0LCJpIiksdmEuc2l6ZT1qYS5yZWFkX3NoaWZ0KDQsImkiKSx2YS5zaXplPDAmJnZhLnN0YXJ0PDAmJih2YS5zaXplPXZhLnR5cGU9MCx2YS5zdGFydD1lcix2YS5uYW1lPSIiKSw1PT09dmEudHlwZT8oV3I9dmEuc3RhcnQsbm4+MCYmV3IhPT1lciYmKGtuW1dy''@;'; put 'put ''XS5uYW1lPSIhU3RyZWFtRGF0YSIpKTp2YS5zaXplPj00MDk2Pyh2YS5zdG9yYWdlPSJmYXQiLHZvaWQgMD09PWtuW3ZhLnN0YXJ0XSYmKGtuW3ZhLnN0YXJ0XT1qdCh3bix2YS5zdGFydCxrbi5mYXRfYWRkcnMsa24uc3N6KSksa25bdmEuc3RhcnRdLm5hbWU9dmEubmFtZSx2YS5jb250ZW50''@;'; put 'put ''PWtuW3ZhLnN0YXJ0XS5kYXRhLnNsaWNlKDAsdmEuc2l6ZSkpOih2YS5zdG9yYWdlPSJtaW5pZmF0Iix2YS5zaXplPDA/dmEuc2l6ZT0wOldyIT09ZXImJnZhLnN0YXJ0IT09ZXImJmtuW1dyXSYmKHZhLmNvbnRlbnQ9YXQodmEsa25bV3JdLmRhdGEsKGtuW3lyXXx8e30pLmRhdGEpKSksdmEu''@;'; put 'put ''Y29udGVudCYmbW4odmEuY29udGVudCwwKSx4bltub109dmEsem4ucHVzaCh2YSl9fSkoem4seHMsVG8sYzAsbm4se30sYTEseXIpLGZ1bmN0aW9uIEV0KGduLGtuLHduKXtmb3IodmFyIFp0PTAsbm49MCx4bj0wLHpuPTAseXI9MCxXcj13bi5sZW5ndGgsb2k9W10sbmk9W107WnQ8V3I7Kyta''@;'; put 'put ''dClvaVtadF09bmlbWnRdPVp0LGtuW1p0XT13bltadF07Zm9yKDt5cjxuaS5sZW5ndGg7Kyt5cilubj1nbltadD1uaVt5cl1dLkwseG49Z25bWnRdLlIsem49Z25bWnRdLkMsb2lbWnRdPT09WnQmJigtMSE9PW5uJiZvaVtubl0hPT1ubiYmKG9pW1p0XT1vaVtubl0pLC0xIT09eG4mJm9pW3hu''@;'; put 'put ''XSE9PXhuJiYob2lbWnRdPW9pW3huXSkpLC0xIT09em4mJihvaVt6bl09WnQpLC0xIT09bm4mJlp0IT1vaVtadF0mJihvaVtubl09b2lbWnRdLG5pLmxhc3RJbmRleE9mKG5uKTx5ciYmbmkucHVzaChubikpLC0xIT09eG4mJlp0IT1vaVtadF0mJihvaVt4bl09b2lbWnRdLG5pLmxhc3RJbmRl''@;'; put 'put ''eE9mKHhuKTx5ciYmbmkucHVzaCh4bikpO2ZvcihadD0xO1p0PFdyOysrWnQpb2lbWnRdPT09WnQmJigtMSE9PXhuJiZvaVt4bl0hPT14bj9vaVtadF09b2lbeG5dOi0xIT09bm4mJm9pW25uXSE9PW5uJiYob2lbWnRdPW9pW25uXSkpO2ZvcihadD0xO1p0PFdyOysrWnQpaWYoMCE9PWduW1p0''@;'; put 'put ''XS50eXBlKXtpZigoeXI9WnQpIT1vaVt5cl0pZG97a25bWnRdPWtuW3lyPW9pW3lyXV0rIi8iK2tuW1p0XX13aGlsZSgwIT09eXImJi0xIT09b2lbeXJdJiZ5ciE9b2lbeXJdKTtvaVtadF09LTF9Zm9yKGtuWzBdKz0iLyIsWnQ9MTtadDxXcjsrK1p0KTIhPT1nbltadF0udHlwZSYmKGtuW1p0''@;'; put 'put ''XSs9Ii8iKX0oYTEsQjgsYzApLGMwLnNoaWZ0KCk7dmFyIFg1PXtGaWxlSW5kZXg6YTEsRnVsbFBhdGhzOkI4fTtyZXR1cm4ga24mJmtuLnJhdyYmKFg1LnJhdz17aGVhZGVyOlVpLHNlY3RvcnM6VG99KSxYNX1mdW5jdGlvbiBhdChnbixrbix3bil7Zm9yKHZhciBubj1nbi5zaXplLHhuPVtd''@;'; put 'put ''LHpuPWduLnN0YXJ0O3duJiZubj4wJiZ6bj49MDspeG4ucHVzaChrbi5zbGljZSh6bipicix6bipiciticikpLG5uLT1icix6bj1Wcyh3biw0KnpuKTtyZXR1cm4gMD09PXhuLmxlbmd0aD9ibigwKTpqKHhuKS5zbGljZSgwLGduLnNpemUpfWZ1bmN0aW9uIGJ0KGduLGtuLHduLFp0LG5uKXt2''@;'; put 'put ''YXIgeG49ZXI7aWYoZ249PT1lcil7aWYoMCE9PWtuKXRocm93IG5ldyBFcnJvcigiRElGQVQgY2hhaW4gc2hvcnRlciB0aGFuIGV4cGVjdGVkIil9ZWxzZSBpZigtMSE9PWduKXt2YXIgem49d25bZ25dLHlyPShadD4+PjIpLTE7aWYoIXpuKXJldHVybjtmb3IodmFyIFdyPTA7V3I8eXImJih4''@;'; put 'put ''bj1Wcyh6biw0KldyKSkhPT1lcjsrK1dyKW5uLnB1c2goeG4pO2J0KFZzKHpuLFp0LTQpLGtuLTEsd24sWnQsbm4pfX1mdW5jdGlvbiBqdChnbixrbix3bixadCxubil7dmFyIHhuPVtdLHpuPVtdO25ufHwobm49W10pO3ZhciB5cj1adC0xLFdyPTAsb2k9MDtmb3IoV3I9a247V3I+PTA7KXtu''@;'; put 'put ''bltXcl09ITAseG5beG4ubGVuZ3RoXT1Xcix6bi5wdXNoKGduW1dyXSk7dmFyIG5pPXduW01hdGguZmxvb3IoNCpXci9adCldO2lmKFp0PDQrKG9pPTQqV3ImeXIpKXRocm93IG5ldyBFcnJvcigiRkFUIGJvdW5kYXJ5IGNyb3NzZWQ6ICIrV3IrIiA0ICIrWnQpO2lmKCFnbltuaV0pYnJlYWs7''@;'; put 'put ''V3I9VnMoZ25bbmldLG9pKX1yZXR1cm57bm9kZXM6eG4sZGF0YTp5MChbem5dKX19ZnVuY3Rpb24gS3QoZ24sa24pe3JldHVybiBuZXcgRGF0ZSgxZTMqKHpvKGduLGtuKzQpLzFlNypNYXRoLnBvdygyLDMyKSt6byhnbixrbikvMWU3LTExNjQ0NDczNjAwKSl9ZnVuY3Rpb24gU24oZ24sa24p''@;'; put 'put ''e3ZhciB3bj1rbnx8e30sWnQ9d24ucm9vdHx8IlJvb3QgRW50cnkiO2lmKGduLkZ1bGxQYXRoc3x8KGduLkZ1bGxQYXRocz1bXSksZ24uRmlsZUluZGV4fHwoZ24uRmlsZUluZGV4PVtdKSxnbi5GdWxsUGF0aHMubGVuZ3RoIT09Z24uRmlsZUluZGV4Lmxlbmd0aCl0aHJvdyBuZXcgRXJyb3Io''@;'; put 'put ''ImluY29uc2lzdGVudCBDRkIgc3RydWN0dXJlIik7MD09PWduLkZ1bGxQYXRocy5sZW5ndGgmJihnbi5GdWxsUGF0aHNbMF09WnQrIi8iLGduLkZpbGVJbmRleFswXT17bmFtZTpadCx0eXBlOjV9KSx3bi5DTFNJRCYmKGduLkZpbGVJbmRleFswXS5jbHNpZD13bi5DTFNJRCksZnVuY3Rpb24g''@;'; put 'put ''bHIoZ24pe3ZhciBrbj0iXHgwMVNoMzN0SjUiO2lmKCF2ZS5maW5kKGduLCIvIitrbikpe3ZhciB3bj1ibig0KTt3blswXT01NSx3blsxXT13blszXT01MCx3blsyXT01NCxnbi5GaWxlSW5kZXgucHVzaCh7bmFtZTprbix0eXBlOjIsY29udGVudDp3bixzaXplOjQsTDo2OSxSOjY5LEM6Njl9''@;'; put 'put ''KSxnbi5GdWxsUGF0aHMucHVzaChnbi5GdWxsUGF0aHNbMF0ra24pLFhuKGduKX19KGduKX1mdW5jdGlvbiBYbihnbixrbil7U24oZ24pO2Zvcih2YXIgd249ITEsWnQ9ITEsbm49Z24uRnVsbFBhdGhzLmxlbmd0aC0xO25uPj0wOy0tbm4pe3ZhciB4bj1nbi5GaWxlSW5kZXhbbm5dO3N3aXRj''@;'; put 'put ''aCh4bi50eXBlKXtjYXNlIDA6WnQ/d249ITA6KGduLkZpbGVJbmRleC5wb3AoKSxnbi5GdWxsUGF0aHMucG9wKCkpO2JyZWFrO2Nhc2UgMTpjYXNlIDI6Y2FzZSA1Olp0PSEwLGlzTmFOKHhuLlIqeG4uTCp4bi5DKSYmKHduPSEwKSx4bi5SPi0xJiZ4bi5MPi0xJiZ4bi5SPT14bi5MJiYod249''@;'; put 'put ''ITApO2JyZWFrO2RlZmF1bHQ6d249ITB9fWlmKHdufHxrbil7dmFyIHpuPW5ldyBEYXRlKDE5ODcsMSwxOSkseXI9MCxXcj1bXTtmb3Iobm49MDtubjxnbi5GdWxsUGF0aHMubGVuZ3RoOysrbm4pMCE9PWduLkZpbGVJbmRleFtubl0udHlwZSYmV3IucHVzaChbZ24uRnVsbFBhdGhzW25uXSxn''@;'; put 'put ''bi5GaWxlSW5kZXhbbm5dXSk7Zm9yKG5uPTA7bm48V3IubGVuZ3RoOysrbm4pe3ZhciBvaT1HKFdyW25uXVswXSk7Zm9yKFp0PSExLHlyPTA7eXI8V3IubGVuZ3RoOysreXIpV3JbeXJdWzBdPT09b2kmJihadD0hMCk7WnR8fFdyLnB1c2goW29pLHtuYW1lOlEob2kpLnJlcGxhY2UoIi8iLCIi''@;'; put 'put ''KSx0eXBlOjEsY2xzaWQ6bmEsY3Q6em4sbXQ6em4sY29udGVudDpudWxsfV0pfWZvcihXci5zb3J0KGZ1bmN0aW9uKFVpLG5vKXtyZXR1cm4gZnVuY3Rpb24gayhnbixrbil7Zm9yKHZhciB3bj1nbi5zcGxpdCgiLyIpLFp0PWtuLnNwbGl0KCIvIiksbm49MCx4bj0wLHpuPU1hdGgubWluKHdu''@;'; put 'put ''Lmxlbmd0aCxadC5sZW5ndGgpO25uPHpuOysrbm4pe2lmKHhuPXduW25uXS5sZW5ndGgtWnRbbm5dLmxlbmd0aClyZXR1cm4geG47aWYod25bbm5dIT1adFtubl0pcmV0dXJuIHduW25uXTxadFtubl0/LTE6MX1yZXR1cm4gd24ubGVuZ3RoLVp0Lmxlbmd0aH0oVWlbMF0sbm9bMF0pfSksZ24u''@;'; put 'put ''RnVsbFBhdGhzPVtdLGduLkZpbGVJbmRleD1bXSxubj0wO25uPFdyLmxlbmd0aDsrK25uKWduLkZ1bGxQYXRoc1tubl09V3Jbbm5dWzBdLGduLkZpbGVJbmRleFtubl09V3Jbbm5dWzFdO2Zvcihubj0wO25uPFdyLmxlbmd0aDsrK25uKXt2YXIgbmk9Z24uRmlsZUluZGV4W25uXSxYaT1nbi5G''@;'; put 'put ''dWxsUGF0aHNbbm5dO2lmKG5pLm5hbWU9UShYaSkucmVwbGFjZSgiLyIsIiIpLG5pLkw9bmkuUj1uaS5DPS0obmkuY29sb3I9MSksbmkuc2l6ZT1uaS5jb250ZW50P25pLmNvbnRlbnQubGVuZ3RoOjAsbmkuc3RhcnQ9MCxuaS5jbHNpZD1uaS5jbHNpZHx8bmEsMD09PW5uKW5pLkM9V3IubGVu''@;'; put 'put ''Z3RoPjE/MTotMSxuaS5zaXplPTAsbmkudHlwZT01O2Vsc2UgaWYoIi8iPT1YaS5zbGljZSgtMSkpe2Zvcih5cj1ubisxO3lyPFdyLmxlbmd0aCYmRyhnbi5GdWxsUGF0aHNbeXJdKSE9WGk7Kyt5cik7Zm9yKG5pLkM9eXI+PVdyLmxlbmd0aD8tMTp5cix5cj1ubisxO3lyPFdyLmxlbmd0aCYm''@;'; put 'put ''Ryhnbi5GdWxsUGF0aHNbeXJdKSE9RyhYaSk7Kyt5cik7bmkuUj15cj49V3IubGVuZ3RoPy0xOnlyLG5pLnR5cGU9MX1lbHNlIEcoZ24uRnVsbFBhdGhzW25uKzFdfHwiIik9PUcoWGkpJiYobmkuUj1ubisxKSxuaS50eXBlPTJ9fX1mdW5jdGlvbiBCbihnbixrbil7dmFyIHduPWtufHx7fTtp''@;'; put 'put ''ZihYbihnbiksInppcCI9PXduLmZpbGVUeXBlKXJldHVybiBmdW5jdGlvbiBZbyhnbixrbil7dmFyIHduPWtufHx7fSxadD1bXSxubj1bXSx4bj1ibigxKSx6bj13bi5jb21wcmVzc2lvbj84OjAseXI9MCxvaT0wLG5pPTAsWGk9MCxVaT0wLG5vPWduLkZ1bGxQYXRoc1swXSxqYT1ubyx2YT1n''@;'; put 'put ''bi5GaWxlSW5kZXhbMF0sVG89W10seHM9MDtmb3Iob2k9MTtvaTxnbi5GdWxsUGF0aHMubGVuZ3RoOysrb2kpaWYoamE9Z24uRnVsbFBhdGhzW29pXS5zbGljZShuby5sZW5ndGgpLCh2YT1nbi5GaWxlSW5kZXhbb2ldKS5zaXplJiZ2YS5jb250ZW50JiYiXHgwMVNoMzN0SjUiIT1qYSl7dmFy''@;'; put 'put ''IHIxPVhpLGMwPWJuKGphLmxlbmd0aCk7Zm9yKG5pPTA7bmk8amEubGVuZ3RoOysrbmkpYzAud3JpdGVfc2hpZnQoMSwxMjcmamEuY2hhckNvZGVBdChuaSkpO2MwPWMwLnNsaWNlKDAsYzAubCksVG9bVWldPXhlLmJ1Zih2YS5jb250ZW50LDApO3ZhciBhMT12YS5jb250ZW50Ozg9PXpuJiYo''@;'; put 'put ''YTE9anIoYTEpKSwoeG49Ym4oMzApKS53cml0ZV9zaGlmdCg0LDY3MzI0NzUyKSx4bi53cml0ZV9zaGlmdCgyLDIwKSx4bi53cml0ZV9zaGlmdCgyLHlyKSx4bi53cml0ZV9zaGlmdCgyLHpuKSx2YS5tdD9vZSh4bix2YS5tdCk6eG4ud3JpdGVfc2hpZnQoNCwwKSx4bi53cml0ZV9zaGlmdCgt''@;'; put 'put ''NCw4JnlyPzA6VG9bVWldKSx4bi53cml0ZV9zaGlmdCg0LDgmeXI/MDphMS5sZW5ndGgpLHhuLndyaXRlX3NoaWZ0KDQsOCZ5cj8wOnZhLmNvbnRlbnQubGVuZ3RoKSx4bi53cml0ZV9zaGlmdCgyLGMwLmxlbmd0aCkseG4ud3JpdGVfc2hpZnQoMiwwKSxYaSs9eG4ubGVuZ3RoLFp0LnB1c2go''@;'; put 'put ''eG4pLFhpKz1jMC5sZW5ndGgsWnQucHVzaChjMCksWGkrPWExLmxlbmd0aCxadC5wdXNoKGExKSw4JnlyJiYoKHhuPWJuKDEyKSkud3JpdGVfc2hpZnQoLTQsVG9bVWldKSx4bi53cml0ZV9zaGlmdCg0LGExLmxlbmd0aCkseG4ud3JpdGVfc2hpZnQoNCx2YS5jb250ZW50Lmxlbmd0aCksWGkr''@;'; put 'put ''PXhuLmwsWnQucHVzaCh4bikpLCh4bj1ibig0NikpLndyaXRlX3NoaWZ0KDQsMzM2MzkyNDgpLHhuLndyaXRlX3NoaWZ0KDIsMCkseG4ud3JpdGVfc2hpZnQoMiwyMCkseG4ud3JpdGVfc2hpZnQoMix5cikseG4ud3JpdGVfc2hpZnQoMix6bikseG4ud3JpdGVfc2hpZnQoNCwwKSx4bi53cml0''@;'; put 'put ''ZV9zaGlmdCgtNCxUb1tVaV0pLHhuLndyaXRlX3NoaWZ0KDQsYTEubGVuZ3RoKSx4bi53cml0ZV9zaGlmdCg0LHZhLmNvbnRlbnQubGVuZ3RoKSx4bi53cml0ZV9zaGlmdCgyLGMwLmxlbmd0aCkseG4ud3JpdGVfc2hpZnQoMiwwKSx4bi53cml0ZV9zaGlmdCgyLDApLHhuLndyaXRlX3NoaWZ0''@;'; put 'put ''KDIsMCkseG4ud3JpdGVfc2hpZnQoMiwwKSx4bi53cml0ZV9zaGlmdCg0LDApLHhuLndyaXRlX3NoaWZ0KDQscjEpLHhzKz14bi5sLG5uLnB1c2goeG4pLHhzKz1jMC5sZW5ndGgsbm4ucHVzaChjMCksKytVaX1yZXR1cm4oeG49Ym4oMjIpKS53cml0ZV9zaGlmdCg0LDEwMTAxMDI1NikseG4u''@;'; put 'put ''d3JpdGVfc2hpZnQoMiwwKSx4bi53cml0ZV9zaGlmdCgyLDApLHhuLndyaXRlX3NoaWZ0KDIsVWkpLHhuLndyaXRlX3NoaWZ0KDIsVWkpLHhuLndyaXRlX3NoaWZ0KDQseHMpLHhuLndyaXRlX3NoaWZ0KDQsWGkpLHhuLndyaXRlX3NoaWZ0KDIsMCksaihbaihadCksaihubikseG5dKX0oZ24s''@;'; put 'put ''d24pO3ZhciBadD1mdW5jdGlvbihubyl7Zm9yKHZhciBqYT0wLHZhPTAsVG89MDtUbzxuby5GaWxlSW5kZXgubGVuZ3RoOysrVG8pe3ZhciB4cz1uby5GaWxlSW5kZXhbVG9dO2lmKHhzLmNvbnRlbnQpe3ZhciByMT14cy5jb250ZW50Lmxlbmd0aDtyMT4wJiYocjE8NDA5Nj9qYSs9cjErNjM+''@;'; put 'put ''PjY6dmErPXIxKzUxMT4+OSl9fWZvcih2YXIgYzA9bm8uRnVsbFBhdGhzLmxlbmd0aCszPj4yLEI4PWphKzEyNz4+NyxYNT0oamErNz4+MykrdmErYzArQjgsSjU9WDUrMTI3Pj43LE1lPUo1PD0xMDk/MDpNYXRoLmNlaWwoKEo1LTEwOSkvMTI3KTtYNStKNStNZSsxMjc+Pjc+SjU7KU1lPSsr''@;'; put 'put ''SjU8PTEwOT8wOk1hdGguY2VpbCgoSjUtMTA5KS8xMjcpO3ZhciBoaD1bMSxNZSxKNSxCOCxjMCx2YSxqYSwwXTtyZXR1cm4gbm8uRmlsZUluZGV4WzBdLnNpemU9amE8PDYsaGhbN109KG5vLkZpbGVJbmRleFswXS5zdGFydD1oaFswXStoaFsxXStoaFsyXStoaFszXStoaFs0XStoaFs1XSkr''@;'; put 'put ''KGhoWzZdKzc+PjMpLGhofShnbiksbm49Ym4oWnRbN108PDkpLHhuPTAsem49MDtmb3IoeG49MDt4bjw4OysreG4pbm4ud3JpdGVfc2hpZnQoMSxGaVt4bl0pO2Zvcih4bj0wO3huPDg7Kyt4bilubi53cml0ZV9zaGlmdCgyLDApO2Zvcihubi53cml0ZV9zaGlmdCgyLDYyKSxubi53cml0ZV9z''@;'; put 'put ''aGlmdCgyLDMpLG5uLndyaXRlX3NoaWZ0KDIsNjU1MzQpLG5uLndyaXRlX3NoaWZ0KDIsOSksbm4ud3JpdGVfc2hpZnQoMiw2KSx4bj0wO3huPDM7Kyt4bilubi53cml0ZV9zaGlmdCgyLDApO2Zvcihubi53cml0ZV9zaGlmdCg0LDApLG5uLndyaXRlX3NoaWZ0KDQsWnRbMl0pLG5uLndyaXRl''@;'; put 'put ''X3NoaWZ0KDQsWnRbMF0rWnRbMV0rWnRbMl0rWnRbM10tMSksbm4ud3JpdGVfc2hpZnQoNCwwKSxubi53cml0ZV9zaGlmdCg0LDQwOTYpLG5uLndyaXRlX3NoaWZ0KDQsWnRbM10/WnRbMF0rWnRbMV0rWnRbMl0tMTplciksbm4ud3JpdGVfc2hpZnQoNCxadFszXSksbm4ud3JpdGVfc2hpZnQo''@;'; put 'put ''LTQsWnRbMV0/WnRbMF0tMTplciksbm4ud3JpdGVfc2hpZnQoNCxadFsxXSkseG49MDt4bjwxMDk7Kyt4bilubi53cml0ZV9zaGlmdCgtNCx4bjxadFsyXT9adFsxXSt4bjotMSk7aWYoWnRbMV0pZm9yKHpuPTA7em48WnRbMV07Kyt6bil7Zm9yKDt4bjwyMzYrMTI3KnpuOysreG4pbm4ud3Jp''@;'; put 'put ''dGVfc2hpZnQoLTQseG48WnRbMl0/WnRbMV0reG46LTEpO25uLndyaXRlX3NoaWZ0KC00LHpuPT09WnRbMV0tMT9lcjp6bisxKX12YXIgeXI9ZnVuY3Rpb24obm8pe2Zvcih6bis9bm87eG48em4tMTsrK3huKW5uLndyaXRlX3NoaWZ0KC00LHhuKzEpO25vJiYoKyt4bixubi53cml0ZV9zaGlm''@;'; put 'put ''dCgtNCxlcikpfTtmb3Ioem49eG49MCx6bis9WnRbMV07eG48em47Kyt4bilubi53cml0ZV9zaGlmdCgtNCxjYS5ESUZTRUNUKTtmb3Ioem4rPVp0WzJdO3huPHpuOysreG4pbm4ud3JpdGVfc2hpZnQoLTQsY2EuRkFUU0VDVCk7eXIoWnRbM10pLHlyKFp0WzRdKTtmb3IodmFyIFdyPTAsb2k9''@;'; put 'put ''MCxuaT1nbi5GaWxlSW5kZXhbMF07V3I8Z24uRmlsZUluZGV4Lmxlbmd0aDsrK1dyKShuaT1nbi5GaWxlSW5kZXhbV3JdKS5jb250ZW50JiYhKChvaT1uaS5jb250ZW50Lmxlbmd0aCk8NDA5NikmJihuaS5zdGFydD16bix5cihvaSs1MTE+PjkpKTtmb3IoeXIoWnRbNl0rNz4+Myk7NTExJm5u''@;'; put 'put ''Lmw7KW5uLndyaXRlX3NoaWZ0KC00LGNhLkVORE9GQ0hBSU4pO2Zvcih6bj14bj0wLFdyPTA7V3I8Z24uRmlsZUluZGV4Lmxlbmd0aDsrK1dyKShuaT1nbi5GaWxlSW5kZXhbV3JdKS5jb250ZW50JiYob2k9bmkuY29udGVudC5sZW5ndGgpJiYhKG9pPj00MDk2KSYmKG5pLnN0YXJ0PXpuLHly''@;'; put 'put ''KG9pKzYzPj42KSk7Zm9yKDs1MTEmbm4ubDspbm4ud3JpdGVfc2hpZnQoLTQsY2EuRU5ET0ZDSEFJTik7Zm9yKHhuPTA7eG48WnRbNF08PDI7Kyt4bil7dmFyIFhpPWduLkZ1bGxQYXRoc1t4bl07aWYoWGkmJjAhPT1YaS5sZW5ndGgpe25pPWduLkZpbGVJbmRleFt4bl0sMD09PXhuJiYobmku''@;'; put 'put ''c3RhcnQ9bmkuc2l6ZT9uaS5zdGFydC0xOmVyKTt2YXIgVWk9MD09PXhuJiZ3bi5yb290fHxuaS5uYW1lO2lmKG9pPTIqKFVpLmxlbmd0aCsxKSxubi53cml0ZV9zaGlmdCg2NCxVaSwidXRmMTZsZSIpLG5uLndyaXRlX3NoaWZ0KDIsb2kpLG5uLndyaXRlX3NoaWZ0KDEsbmkudHlwZSksbm4u''@;'; put 'put ''d3JpdGVfc2hpZnQoMSxuaS5jb2xvciksbm4ud3JpdGVfc2hpZnQoLTQsbmkuTCksbm4ud3JpdGVfc2hpZnQoLTQsbmkuUiksbm4ud3JpdGVfc2hpZnQoLTQsbmkuQyksbmkuY2xzaWQpbm4ud3JpdGVfc2hpZnQoMTYsbmkuY2xzaWQsImhleCIpO2Vsc2UgZm9yKFdyPTA7V3I8NDsrK1dyKW5u''@;'; put 'put ''LndyaXRlX3NoaWZ0KDQsMCk7bm4ud3JpdGVfc2hpZnQoNCxuaS5zdGF0ZXx8MCksbm4ud3JpdGVfc2hpZnQoNCwwKSxubi53cml0ZV9zaGlmdCg0LDApLG5uLndyaXRlX3NoaWZ0KDQsMCksbm4ud3JpdGVfc2hpZnQoNCwwKSxubi53cml0ZV9zaGlmdCg0LG5pLnN0YXJ0KSxubi53cml0ZV9z''@;'; put 'put ''aGlmdCg0LG5pLnNpemUpLG5uLndyaXRlX3NoaWZ0KDQsMCl9ZWxzZXtmb3IoV3I9MDtXcjwxNzsrK1dyKW5uLndyaXRlX3NoaWZ0KDQsMCk7Zm9yKFdyPTA7V3I8MzsrK1dyKW5uLndyaXRlX3NoaWZ0KDQsLTEpO2ZvcihXcj0wO1dyPDEyOysrV3Ipbm4ud3JpdGVfc2hpZnQoNCwwKX19Zm9y''@;'; put 'put ''KHhuPTE7eG48Z24uRmlsZUluZGV4Lmxlbmd0aDsrK3huKWlmKChuaT1nbi5GaWxlSW5kZXhbeG5dKS5zaXplPj00MDk2KXtmb3Iobm4ubD1uaS5zdGFydCsxPDw5LFdyPTA7V3I8bmkuc2l6ZTsrK1dyKW5uLndyaXRlX3NoaWZ0KDEsbmkuY29udGVudFtXcl0pO2Zvcig7NTExJldyOysrV3Ip''@;'; put 'put ''bm4ud3JpdGVfc2hpZnQoMSwwKX1mb3IoeG49MTt4bjxnbi5GaWxlSW5kZXgubGVuZ3RoOysreG4paWYoKG5pPWduLkZpbGVJbmRleFt4bl0pLnNpemU+MCYmbmkuc2l6ZTw0MDk2KXtmb3IoV3I9MDtXcjxuaS5zaXplOysrV3Ipbm4ud3JpdGVfc2hpZnQoMSxuaS5jb250ZW50W1dyXSk7Zm9y''@;'; put 'put ''KDs2MyZXcjsrK1dyKW5uLndyaXRlX3NoaWZ0KDEsMCl9Zm9yKDtubi5sPG5uLmxlbmd0aDspbm4ud3JpdGVfc2hpZnQoMSwwKTtyZXR1cm4gbm59Ui52ZXJzaW9uPSIxLjEuNCI7dmFyIEJyLGJyPTY0LGVyPS0yLE1pPSJkMGNmMTFlMGExYjExYWUxIixGaT1bMjA4LDIwNywxNywyMjQsMTYx''@;'; put 'put ''LDE3NywyNiwyMjVdLG5hPSIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsY2E9e01BWFJFR1NFQ1Q6LTYsRElGU0VDVDotNCxGQVRTRUNUOi0zLEVORE9GQ0hBSU46ZXIsRlJFRVNFQ1Q6LTEsSEVBREVSX1NJR05BVFVSRTpNaSxIRUFERVJfTUlOT1JfVkVSU0lPTjoiM2UwMCIs''@;'; put 'put ''TUFYUkVHU0lEOi02LE5PU1RSRUFNOi0xLEhFQURFUl9DTFNJRDpuYSxFbnRyeVR5cGVzOlsidW5rbm93biIsInN0b3JhZ2UiLCJzdHJlYW0iLCJsb2NrYnl0ZXMiLCJwcm9wZXJ0eSIsInJvb3QiXX07ZnVuY3Rpb24ga3IoZ24pe2Zvcih2YXIga249bmV3IEFycmF5KGduLmxlbmd0aCksd249''@;'; put 'put ''MDt3bjxnbi5sZW5ndGg7Kyt3bilrblt3bl09U3RyaW5nLmZyb21DaGFyQ29kZShnblt3bl0pO3JldHVybiBrbi5qb2luKCIiKX1mdW5jdGlvbiBqcihnbil7cmV0dXJuIEJyP0JyLmRlZmxhdGVSYXdTeW5jKGduKTpHbChnbil9Zm9yKHZhciBnbixrbixaaT1bMTYsMTcsMTgsMCw4LDcsOSw2''@;'; put 'put ''LDEwLDUsMTEsNCwxMiwzLDEzLDIsMTQsMSwxNV0seWk9WzMsNCw1LDYsNyw4LDksMTAsMTEsMTMsMTUsMTcsMTksMjMsMjcsMzEsMzUsNDMsNTEsNTksNjcsODMsOTksMTE1LDEzMSwxNjMsMTk1LDIyNywyNThdLF9hPVsxLDIsMyw0LDUsNyw5LDEzLDE3LDI1LDMzLDQ5LDY1LDk3LDEyOSwx''@;'; put 'put ''OTMsMjU3LDM4NSw1MTMsNzY5LDEwMjUsMTUzNywyMDQ5LDMwNzMsNDA5Nyw2MTQ1LDgxOTMsMTIyODksMTYzODUsMjQ1NzddLGlhPXR5cGVvZiBVaW50OEFycmF5PCJ1IixMbz1pYT9uZXcgVWludDhBcnJheSgyNTYpOltdLE9hPTA7T2E8MjU2OysrT2EpTG9bT2FdPSh2b2lkIDAsMjU1Jigo''@;'; put 'put ''a249MTM5NTM2JigoZ249T2EpPDwxfGduPDwxMSl8NTU4MTQ0Jihnbjw8NXxnbjw8MTUpKT4+MTZ8a24+Pjh8a24pKTtmdW5jdGlvbiBobyhnbixrbil7dmFyIHduPUxvWzI1NSZnbl07cmV0dXJuIGtuPD04P3duPj4+OC1rbjood249d248PDh8TG9bZ24+PjgmMjU1XSxrbjw9MTY/d24+Pj4x''@;'; put 'put ''Ni1rbjood249d248PDh8TG9bZ24+PjE2JjI1NV0pPj4+MjQta24pfWZ1bmN0aW9uIEphKGduLGtuKXt2YXIgd249NyZrbixadD1rbj4+PjM7cmV0dXJuKGduW1p0XXwod248PTY/MDpnbltadCsxXTw8OCkpPj4+d24mM31mdW5jdGlvbiBCaShnbixrbil7dmFyIHduPTcma24sWnQ9a24+Pj4z''@;'; put 'put ''O3JldHVybihnbltadF18KHduPD01PzA6Z25bWnQrMV08PDgpKT4+PnduJjd9ZnVuY3Rpb24gUG4oZ24sa24pe3ZhciB3bj03JmtuLFp0PWtuPj4+MztyZXR1cm4oZ25bWnRdfCh3bjw9Mz8wOmduW1p0KzFdPDw4KSk+Pj53biYzMX1mdW5jdGlvbiBXbyhnbixrbil7dmFyIHduPTcma24sWnQ9''@;'; put 'put ''a24+Pj4zO3JldHVybihnbltadF18KHduPD0xPzA6Z25bWnQrMV08PDgpKT4+PnduJjEyN31mdW5jdGlvbiBocihnbixrbix3bil7dmFyIFp0PTcma24sbm49a24+Pj4zLHpuPWduW25uXT4+Plp0O3JldHVybiB3bjw4LVp0fHwoem58PWduW25uKzFdPDw4LVp0LHduPDE2LVp0KXx8KHpufD1n''@;'; put 'put ''bltubisyXTw8MTYtWnQsd248MjQtWnQpfHwoem58PWduW25uKzNdPDwyNC1adCksem4mKDE8PHduKS0xfWZ1bmN0aW9uIFFsKGduLGtuKXt2YXIgd249Z24ubGVuZ3RoLFp0PTIqd24+a24/Mip3bjprbis1LG5uPTA7aWYod24+PWtuKXJldHVybiBnbjtpZihUZSl7dmFyIHhuPXAoWnQpO2lm''@;'; put 'put ''KGduLmNvcHkpZ24uY29weSh4bik7ZWxzZSBmb3IoO25uPGduLmxlbmd0aDsrK25uKXhuW25uXT1nbltubl07cmV0dXJuIHhufWlmKGlhKXt2YXIgem49bmV3IFVpbnQ4QXJyYXkoWnQpO2lmKHpuLnNldCl6bi5zZXQoZ24pO2Vsc2UgZm9yKDtubjxnbi5sZW5ndGg7Kytubil6bltubl09Z25b''@;'; put 'put ''bm5dO3JldHVybiB6bn1yZXR1cm4gZ24ubGVuZ3RoPVp0LGdufWZ1bmN0aW9uIFlsKGduKXtmb3IodmFyIGtuPW5ldyBBcnJheShnbiksd249MDt3bjxnbjsrK3duKWtuW3duXT0wO3JldHVybiBrbn12YXIgR2w9ZnVuY3Rpb24oKXt2YXIgZ249ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24o''@;'; put 'put ''d24sWnQpe2Zvcih2YXIgbm49MDtubjx3bi5sZW5ndGg7KXt2YXIgeG49TWF0aC5taW4oNjU1MzUsd24ubGVuZ3RoLW5uKTtmb3IoWnQud3JpdGVfc2hpZnQoMSwrKG5uK3huPT13bi5sZW5ndGgpKSxadC53cml0ZV9zaGlmdCgyLHhuKSxadC53cml0ZV9zaGlmdCgyLDY1NTM1Jn54bik7eG4t''@;'; put 'put ''LSA+MDspWnRbWnQubCsrXT13bltubisrXX1yZXR1cm4gWnQubH19KCk7cmV0dXJuIGZ1bmN0aW9uKGtuKXt2YXIgd249Ym4oNTArTWF0aC5mbG9vcigxLjEqa24ubGVuZ3RoKSksWnQ9Z24oa24sd24pO3JldHVybiB3bi5zbGljZSgwLFp0KX19KCk7ZnVuY3Rpb24geXUoZ24sa24sd24pe3Zh''@;'; put 'put ''ciBadD0xLG5uPTAseG49MCx6bj0wLHlyPTAsV3I9Z24ubGVuZ3RoLG9pPWlhP25ldyBVaW50MTZBcnJheSgzMik6WWwoMzIpO2Zvcih4bj0wO3huPDMyOysreG4pb2lbeG5dPTA7Zm9yKHhuPVdyO3huPHduOysreG4pZ25beG5dPTA7V3I9Z24ubGVuZ3RoO3ZhciBuaT1pYT9uZXcgVWludDE2''@;'; put 'put ''QXJyYXkoV3IpOllsKFdyKTtmb3IoeG49MDt4bjxXcjsrK3huKW9pW25uPWduW3huXV0rKyxadDxubiYmKFp0PW5uKSxuaVt4bl09MDtmb3Iob2lbMF09MCx4bj0xO3huPD1adDsrK3huKW9pW3huKzE2XT15cj15citvaVt4bi0xXTw8MTtmb3IoeG49MDt4bjxXcjsrK3huKTAhPSh5cj1nblt4''@;'; put 'put ''bl0pJiYobmlbeG5dPW9pW3lyKzE2XSsrKTt2YXIgWGk9MDtmb3IoeG49MDt4bjxXcjsrK3huKWlmKDAhPShYaT1nblt4bl0pKWZvcih5cj1obyhuaVt4bl0sWnQpPj5adC1YaSx6bj0oMTw8WnQrNC1YaSktMTt6bj49MDstLXpuKWtuW3lyfHpuPDxYaV09MTUmWGl8eG48PDQ7cmV0dXJuIFp0''@;'; put 'put ''fXZhciBNbD1pYT9uZXcgVWludDE2QXJyYXkoNTEyKTpZbCg1MTIpLGxuPWlhP25ldyBVaW50MTZBcnJheSgzMik6WWwoMzIpO2lmKCFpYSl7Zm9yKHZhciBFbj0wO0VuPDUxMjsrK0VuKU1sW0VuXT0wO2ZvcihFbj0wO0VuPDMyOysrRW4pbG5bRW5dPTB9IWZ1bmN0aW9uKCl7Zm9yKHZhciBn''@;'; put 'put ''bj1bXSxrbj0wO2tuPDMyO2tuKyspZ24ucHVzaCg1KTt5dShnbixsbiwzMik7dmFyIHduPVtdO2Zvcihrbj0wO2tuPD0xNDM7a24rKyl3bi5wdXNoKDgpO2Zvcig7a248PTI1NTtrbisrKXduLnB1c2goOSk7Zm9yKDtrbjw9Mjc5O2tuKyspd24ucHVzaCg3KTtmb3IoO2tuPD0yODc7a24rKyl3''@;'; put 'put ''bi5wdXNoKDgpO3l1KHduLE1sLDI4OCl9KCk7dmFyIFVuPWlhP25ldyBVaW50MTZBcnJheSgzMjc2OCk6WWwoMzI3NjgpLHhpPWlhP25ldyBVaW50MTZBcnJheSgzMjc2OCk6WWwoMzI3NjgpLG9yPWlhP25ldyBVaW50MTZBcnJheSgxMjgpOllsKDEyOCksT2k9MSxTcj0xO2Z1bmN0aW9uIFBp''@;'; put 'put ''KGduLGtuKXt2YXIgd249UG4oZ24sa24pKzI1NyxadD1Qbihnbixrbis9NSkrMSxubj1mdW5jdGlvbiBJcyhnbixrbil7dmFyIHduPTcma24sWnQ9a24+Pj4zO3JldHVybihnbltadF18KHduPD00PzA6Z25bWnQrMV08PDgpKT4+PnduJjE1fShnbixrbis9NSkrNDtrbis9NDtmb3IodmFyIHhu''@;'; put 'put ''PTAsem49aWE/bmV3IFVpbnQ4QXJyYXkoMTkpOllsKDE5KSx5cj1bMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMF0sV3I9MSxvaT1pYT9uZXcgVWludDhBcnJheSg4KTpZbCg4KSxuaT1pYT9uZXcgVWludDhBcnJheSg4KTpZbCg4KSxYaT16bi5sZW5ndGgsVWk9MDtVaTxu''@;'; put 'put ''bjsrK1VpKXpuW1ppW1VpXV09eG49QmkoZ24sa24pLFdyPHhuJiYoV3I9eG4pLG9pW3huXSsrLGtuKz0zO3ZhciBubz0wO2ZvcihvaVswXT0wLFVpPTE7VWk8PVdyOysrVWkpbmlbVWldPW5vPW5vK29pW1VpLTFdPDwxO2ZvcihVaT0wO1VpPFhpOysrVWkpMCE9KG5vPXpuW1VpXSkmJih5cltV''@;'; put 'put ''aV09bmlbbm9dKyspO3ZhciBqYT0wO2ZvcihVaT0wO1VpPFhpOysrVWkpaWYoMCE9KGphPXpuW1VpXSkpe25vPUxvW3lyW1VpXV0+PjgtamE7Zm9yKHZhciB2YT0oMTw8Ny1qYSktMTt2YT49MDstLXZhKW9yW25vfHZhPDxqYV09NyZqYXxVaTw8M312YXIgVG89W107Zm9yKFdyPTE7VG8ubGVu''@;'; put 'put ''Z3RoPHduK1p0Oylzd2l0Y2gobm89b3JbV28oZ24sa24pXSxrbis9NyZubyxubz4+Pj0zKXtjYXNlIDE2OmZvcih4bj0zK0phKGduLGtuKSxrbis9Mixubz1Ub1tUby5sZW5ndGgtMV07eG4tLSA+MDspVG8ucHVzaChubyk7YnJlYWs7Y2FzZSAxNzpmb3IoeG49MytCaShnbixrbiksa24rPTM7''@;'; put 'put ''eG4tLSA+MDspVG8ucHVzaCgwKTticmVhaztjYXNlIDE4OmZvcih4bj0xMStXbyhnbixrbiksa24rPTc7eG4tLSA+MDspVG8ucHVzaCgwKTticmVhaztkZWZhdWx0OlRvLnB1c2gobm8pLFdyPG5vJiYoV3I9bm8pfXZhciB4cz1Uby5zbGljZSgwLHduKSxyMT1Uby5zbGljZSh3bik7Zm9yKFVp''@;'; put 'put ''PXduO1VpPDI4NjsrK1VpKXhzW1VpXT0wO2ZvcihVaT1adDtVaTwzMDsrK1VpKXIxW1VpXT0wO3JldHVybiBPaT15dSh4cyxVbiwyODYpLFNyPXl1KHIxLHhpLDMwKSxrbn1mdW5jdGlvbiBIaShnbixrbil7dmFyIFp0PWZ1bmN0aW9uIFphKGduLGtuKXtpZigzPT1nblswXSYmISgzJmduWzFd''@;'; put 'put ''KSlyZXR1cm5bVihrbiksMl07Zm9yKHZhciB3bj0wLFp0PTAsbm49cChrbnx8MTw8MTgpLHhuPTAsem49bm4ubGVuZ3RoPj4+MCx5cj0wLFdyPTA7ISgxJlp0KTspaWYoWnQ9QmkoZ24sd24pLHduKz0zLFp0Pj4+MSlmb3IoWnQ+Pj4xPT0xPyh5cj05LFdyPTUpOih3bj1QaShnbix3bikseXI9''@;'; put 'put ''T2ksV3I9U3IpLCFrbiYmem48eG4rMzI3NjcmJih6bj0obm49UWwobm4seG4rMzI3NjcpKS5sZW5ndGgpOzspe3ZhciBuaT1ocihnbix3bix5ciksWGk9WnQ+Pj4xPT0xP01sW25pXTpVbltuaV07aWYod24rPTE1JlhpLChYaT4+Pj00KT4+PjgmMjU1KXtpZigyNTY9PVhpKWJyZWFrO3ZhciBV''@;'; put 'put ''aT0oWGktPTI1Nyk8OD8wOlhpLTQ+PjI7VWk+NSYmKFVpPTApO3ZhciBubz14bit5aVtYaV07VWk+MCYmKG5vKz1ocihnbix3bixVaSksd24rPVVpKSxuaT1ocihnbix3bixXciksd24rPTE1JihYaT1adD4+PjE9PTE/bG5bbmldOnhpW25pXSk7dmFyIGphPShYaT4+Pj00KTw0PzA6WGktMj4+''@;'; put 'put ''MSx2YT1fYVtYaV07Zm9yKGphPjAmJih2YSs9aHIoZ24sd24samEpLHduKz1qYSksIWtuJiZ6bjxubyYmKHpuPShubj1RbChubixubykpLmxlbmd0aCk7eG48bm87KW5uW3huXT1ublt4bi12YV0sKyt4bn1lbHNlIG5uW3huKytdPVhpfWVsc2V7NyZ3biYmKHduKz04LSg3JnduKSk7dmFyIG9p''@;'; put 'put ''PWduW3duPj4+M118Z25bMSsod24+Pj4zKV08PDg7aWYod24rPTMyLCFrbiYmem48eG4rb2kmJih6bj0obm49UWwobm4seG4rb2kpKS5sZW5ndGgpLCJmdW5jdGlvbiI9PXR5cGVvZiBnbi5jb3B5KWduLmNvcHkobm4seG4sd24+Pj4zLCh3bj4+PjMpK29pKSx4bis9b2ksd24rPTgqb2k7ZWxz''@;'; put 'put ''ZSBmb3IoO29pLS0gPjA7KW5uW3huKytdPWduW3duPj4+M10sd24rPTh9cmV0dXJuW2tuP25uOm5uLnNsaWNlKDAseG4pLHduKzc+Pj4zXX0oZ24uc2xpY2UoZ24ubHx8MCksa24pO3JldHVybiBnbi5sKz1adFsxXSxadFswXX1mdW5jdGlvbiBtYShnbixrbil7aWYoIWduKXRocm93IG5ldyBF''@;'; put 'put ''cnJvcihrbik7dHlwZW9mIGNvbnNvbGU8InUiJiZjb25zb2xlLmVycm9yKGtuKX1mdW5jdGlvbiBEaShnbixrbil7dmFyIHduPWduO21uKHduLDApO3ZhciB4bj17RmlsZUluZGV4OltdLEZ1bGxQYXRoczpbXX07U24oeG4se3Jvb3Q6a24ucm9vdH0pO2Zvcih2YXIgem49d24ubGVuZ3RoLTQ7''@;'; put 'put ''KDgwIT13blt6bl18fDc1IT13blt6bisxXXx8NSE9d25bem4rMl18fDYhPXduW3puKzNdKSYmem4+PTA7KS0tem47d24ubD16bis0LHduLmwrPTQ7dmFyIHlyPXduLnJlYWRfc2hpZnQoMik7d24ubCs9Njt2YXIgV3I9d24ucmVhZF9zaGlmdCg0KTtmb3Iod24ubD1Xcix6bj0wO3puPHlyOysr''@;'; put 'put ''em4pe3duLmwrPTIwO3ZhciBvaT13bi5yZWFkX3NoaWZ0KDQpLG5pPXduLnJlYWRfc2hpZnQoNCksWGk9d24ucmVhZF9zaGlmdCgyKSxVaT13bi5yZWFkX3NoaWZ0KDIpLG5vPXduLnJlYWRfc2hpZnQoMik7d24ubCs9ODt2YXIgamE9d24ucmVhZF9zaGlmdCg0KSx2YT1wZSh3bi5zbGljZSh3''@;'; put 'put ''bi5sK1hpLHduLmwrWGkrVWkpKTt3bi5sKz1YaStVaStubzt2YXIgVG89d24ubDt3bi5sPWphKzQsY3Mod24sb2ksbmkseG4sdmEpLHduLmw9VG99cmV0dXJuIHhufWZ1bmN0aW9uIGNzKGduLGtuLHduLFp0LG5uKXtnbi5sKz0yO3ZhciB4bj1nbi5yZWFkX3NoaWZ0KDIpLHpuPWduLnJlYWRf''@;'; put 'put ''c2hpZnQoMikseXI9ZnVuY3Rpb24gZ2UoZ24pe3ZhciBrbj02NTUzNSZnbi5yZWFkX3NoaWZ0KDIpLHduPTY1NTM1JmduLnJlYWRfc2hpZnQoMiksWnQ9bmV3IERhdGUsbm49MzEmd24seG49MTUmKHduPj4+PTUpO3duPj4+PTQsWnQuc2V0TWlsbGlzZWNvbmRzKDApLFp0LnNldEZ1bGxZZWFy''@;'; put 'put ''KHduKzE5ODApLFp0LnNldE1vbnRoKHhuLTEpLFp0LnNldERhdGUobm4pO3ZhciB6bj0zMSZrbix5cj02MyYoa24+Pj49NSk7cmV0dXJuIFp0LnNldEhvdXJzKGtuPj4+PTYpLFp0LnNldE1pbnV0ZXMoeXIpLFp0LnNldFNlY29uZHMoem48PDEpLFp0fShnbik7aWYoODI1NyZ4bil0aHJvdyBu''@;'; put 'put ''ZXcgRXJyb3IoIlVuc3VwcG9ydGVkIFpJUCBlbmNyeXB0aW9uIik7Zm9yKHZhciBXcj1nbi5yZWFkX3NoaWZ0KDQpLG9pPWduLnJlYWRfc2hpZnQoNCksbmk9Z24ucmVhZF9zaGlmdCg0KSxYaT1nbi5yZWFkX3NoaWZ0KDIpLFVpPWduLnJlYWRfc2hpZnQoMiksbm89IiIsamE9MDtqYTxYaTsr''@;'; put 'put ''K2phKW5vKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGduW2duLmwrK10pO2lmKFVpKXt2YXIgdmE9cGUoZ24uc2xpY2UoZ24ubCxnbi5sK1VpKSk7KHZhWzIxNTg5XXx8e30pLm10JiYoeXI9dmFbMjE1ODldLm10KSwoKG5ufHx7fSlbMjE1ODldfHx7fSkubXQmJih5cj1ublsyMTU4OV0ubXQpfWdu''@;'; put 'put ''LmwrPVVpO3ZhciBUbz1nbi5zbGljZShnbi5sLGduLmwrb2kpO3N3aXRjaCh6bil7Y2FzZSA4OlRvPWZ1bmN0aW9uIEZuKGduLGtuKXtpZighQnIpcmV0dXJuIEhpKGduLGtuKTt2YXIgWnQ9bmV3KDAsQnIuSW5mbGF0ZVJhdyksbm49WnQuX3Byb2Nlc3NDaHVuayhnbi5zbGljZShnbi5sKSxa''@;'; put 'put ''dC5fZmluaXNoRmx1c2hGbGFnKTtyZXR1cm4gZ24ubCs9WnQuYnl0ZXNSZWFkLG5ufShnbixuaSk7YnJlYWs7Y2FzZSAwOmJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBaSVAgQ29tcHJlc3Npb24gbWV0aG9kICIrem4pfXZhciB4cz0hMTs4JnhuJiYoMTM0Njk1''@;'; put 'put ''NzYwPT0oV3I9Z24ucmVhZF9zaGlmdCg0KSkmJihXcj1nbi5yZWFkX3NoaWZ0KDQpLHhzPSEwKSxvaT1nbi5yZWFkX3NoaWZ0KDQpLG5pPWduLnJlYWRfc2hpZnQoNCkpLG9pIT1rbiYmbWEoeHMsIkJhZCBjb21wcmVzc2VkIHNpemU6ICIra24rIiAhPSAiK29pKSxuaSE9d24mJm1hKHhzLCJC''@;'; put 'put ''YWQgdW5jb21wcmVzc2VkIHNpemU6ICIrd24rIiAhPSAiK25pKTt2YXIgcjE9eGUuYnVmKFRvLDApOygwfFdyKSE9KDB8cjEpJiZtYSh4cywiQmFkIENSQzMyIGNoZWNrc3VtOiAiK1dyKyIgIT0gIityMSksX3UoWnQsbm8sVG8se3Vuc2FmZTohMCxtdDp5cn0pfWZ1bmN0aW9uIF91KGduLGtu''@;'; put 'put ''LHduLFp0KXt2YXIgbm49WnQmJlp0LnVuc2FmZTtubnx8U24oZ24pO3ZhciB4bj0hbm4mJnZlLmZpbmQoZ24sa24pO2lmKCF4bil7dmFyIHpuPWduLkZ1bGxQYXRoc1swXTtrbi5zbGljZSgwLHpuLmxlbmd0aCk9PXpuP3puPWtuOigiLyIhPXpuLnNsaWNlKC0xKSYmKHpuKz0iLyIpLHpuPSh6''@;'; put 'put ''bitrbikucmVwbGFjZSgiLy8iLCIvIikpLHhuPXtuYW1lOlEoa24pLHR5cGU6Mn0sZ24uRmlsZUluZGV4LnB1c2goeG4pLGduLkZ1bGxQYXRocy5wdXNoKHpuKSxubnx8dmUudXRpbHMuY2ZiX2djKGduKX1yZXR1cm4geG4uY29udGVudD13bix4bi5zaXplPXduP3duLmxlbmd0aDowLFp0JiYo''@;'; put 'put ''WnQuQ0xTSUQmJih4bi5jbHNpZD1adC5DTFNJRCksWnQubXQmJih4bi5tdD1adC5tdCksWnQuY3QmJih4bi5jdD1adC5jdCkpLHhufXJldHVybiBSLmZpbmQ9ZnVuY3Rpb24gZnIoZ24sa24pe3ZhciB3bj1nbi5GdWxsUGF0aHMubWFwKGZ1bmN0aW9uKFdyKXtyZXR1cm4gV3IudG9VcHBlckNh''@;'; put 'put ''c2UoKX0pLFp0PXduLm1hcChmdW5jdGlvbihXcil7dmFyIG9pPVdyLnNwbGl0KCIvIik7cmV0dXJuIG9pW29pLmxlbmd0aC0oIi8iPT1Xci5zbGljZSgtMSk/MjoxKV19KSxubj0hMTs0Nz09PWtuLmNoYXJDb2RlQXQoMCk/KG5uPSEwLGtuPXduWzBdLnNsaWNlKDAsLTEpK2tuKTpubj0tMSE9''@;'; put 'put ''PWtuLmluZGV4T2YoIi8iKTt2YXIgeG49a24udG9VcHBlckNhc2UoKSx6bj0hMD09PW5uP3duLmluZGV4T2YoeG4pOlp0LmluZGV4T2YoeG4pO2lmKC0xIT09em4pcmV0dXJuIGduLkZpbGVJbmRleFt6bl07dmFyIHlyPSF4bi5tYXRjaChtKTtmb3IoeG49eG4ucmVwbGFjZShFLCIiKSx5ciYm''@;'; put 'put ''KHhuPXhuLnJlcGxhY2UobSwiISIpKSx6bj0wO3puPHduLmxlbmd0aDsrK3puKWlmKCh5cj93blt6bl0ucmVwbGFjZShtLCIhIik6d25bem5dKS5yZXBsYWNlKEUsIiIpPT14bnx8KHlyP1p0W3puXS5yZXBsYWNlKG0sIiEiKTpadFt6bl0pLnJlcGxhY2UoRSwiIik9PXhuKXJldHVybiBnbi5G''@;'; put 'put ''aWxlSW5kZXhbem5dO3JldHVybiBudWxsfSxSLnJlYWQ9ZnVuY3Rpb24gcnIoZ24sa24pe3N3aXRjaChrbiYma24udHlwZXx8ImJhc2U2NCIpe2Nhc2UiZmlsZSI6cmV0dXJuIGZ1bmN0aW9uIFRuKGduLGtuKXtyZXR1cm4gUGUoKSxOZSh5ZS5yZWFkRmlsZVN5bmMoZ24pLGtuKX0oZ24sa24p''@;'; put 'put ''O2Nhc2UiYmFzZTY0IjpyZXR1cm4gTmUoYihfZS5kZWNvZGUoZ24pKSxrbik7Y2FzZSJiaW5hcnkiOnJldHVybiBOZShiKGduKSxrbil9cmV0dXJuIE5lKGduLGtuKX0sUi5wYXJzZT1OZSxSLndyaXRlPWZ1bmN0aW9uIFZuKGduLGtuKXt2YXIgd249Qm4oZ24sa24pO3N3aXRjaChrbiYma24u''@;'; put 'put ''dHlwZSl7Y2FzZSJmaWxlIjpyZXR1cm4gUGUoKSx5ZS53cml0ZUZpbGVTeW5jKGtuLmZpbGVuYW1lLHduKSx3bjtjYXNlImJpbmFyeSI6cmV0dXJuIGtyKHduKTtjYXNlImJhc2U2NCI6cmV0dXJuIF9lLmVuY29kZShrcih3bikpfXJldHVybiB3bn0sUi53cml0ZUZpbGU9ZnVuY3Rpb24gTGko''@;'; put 'put ''Z24sa24sd24pe1BlKCk7dmFyIFp0PUJuKGduLHduKTt5ZS53cml0ZUZpbGVTeW5jKGtuLFp0KX0sUi51dGlscz17Y2ZiX25ldzpmdW5jdGlvbiB4bChnbil7dmFyIGtuPXt9O3JldHVybiBTbihrbixnbiksa259LGNmYl9hZGQ6X3UsY2ZiX2RlbDpmdW5jdGlvbiBFbChnbixrbil7U24oZ24p''@;'; put 'put ''O3ZhciB3bj12ZS5maW5kKGduLGtuKTtpZih3bilmb3IodmFyIFp0PTA7WnQ8Z24uRmlsZUluZGV4Lmxlbmd0aDsrK1p0KWlmKGduLkZpbGVJbmRleFtadF09PXduKXJldHVybiBnbi5GaWxlSW5kZXguc3BsaWNlKFp0LDEpLGduLkZ1bGxQYXRocy5zcGxpY2UoWnQsMSksITA7cmV0dXJuITF9''@;'; put 'put ''LGNmYl9tb3Y6ZnVuY3Rpb24gRmYoZ24sa24sd24pe1NuKGduKTt2YXIgWnQ9dmUuZmluZChnbixrbik7aWYoWnQpZm9yKHZhciBubj0wO25uPGduLkZpbGVJbmRleC5sZW5ndGg7KytubilpZihnbi5GaWxlSW5kZXhbbm5dPT1adClyZXR1cm4gZ24uRmlsZUluZGV4W25uXS5uYW1lPVEod24p''@;'; put 'put ''LGduLkZ1bGxQYXRoc1tubl09d24sITA7cmV0dXJuITF9LGNmYl9nYzpmdW5jdGlvbiB5ZChnbil7WG4oZ24sITApfSxSZWFkU2hpZnQ6amwsQ2hlY2tGaWVsZDpfbixwcmVwX2Jsb2I6bW4sYmNvbmNhdDpqLHVzZV96bGliOmZ1bmN0aW9uIF9yKGduKXt0cnl7dmFyIHduPW5ldygwLGduLklu''@;'; put 'put ''ZmxhdGVSYXcpO2lmKHduLl9wcm9jZXNzQ2h1bmsobmV3IFVpbnQ4QXJyYXkoWzMsMF0pLHduLl9maW5pc2hGbHVzaEZsYWcpLCF3bi5ieXRlc1JlYWQpdGhyb3cgbmV3IEVycm9yKCJ6bGliIGRvZXMgbm90IGV4cG9zZSBieXRlc1JlYWQiKTtCcj1nbn1jYXRjaChadCl7Y29uc29sZS5lcnJv''@;'; put 'put ''cigiY2Fubm90IHVzZSBuYXRpdmUgemxpYjogIisoWnQubWVzc2FnZXx8WnQpKX19LF9kZWZsYXRlUmF3OkdsLF9pbmZsYXRlUmF3OkhpLGNvbnN0czpjYX0sUn0oKTt0cnl7WGU9eSg4MzMzNyl9Y2F0Y2h7fWZ1bmN0aW9uIHplKFMpe3JldHVybiJzdHJpbmciPT10eXBlb2YgUz94KFMpOkFy''@;'; put 'put ''cmF5LmlzQXJyYXkoUyk/ZnVuY3Rpb24gVChTKXtpZih0eXBlb2YgVWludDhBcnJheT4idSIpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCIpO3JldHVybiBuZXcgVWludDhBcnJheShTKX0oUyk6U31mdW5jdGlvbiBEZShTLFIsayl7aWYodHlwZW9mIFhlPCJ1IiYmWGUud3JpdGVGaWxl''@;'; put 'put ''U3luYylyZXR1cm4gaz9YZS53cml0ZUZpbGVTeW5jKFMsUixrKTpYZS53cml0ZUZpbGVTeW5jKFMsUik7dmFyIEc9InV0ZjgiPT1rP05zKFIpOlI7aWYodHlwZW9mIElFX1NhdmVGaWxlPCJ1IilyZXR1cm4gSUVfU2F2ZUZpbGUoRyxTKTtpZih0eXBlb2YgQmxvYjwidSIpe3ZhciBRPW5ldyBC''@;'; put 'put ''bG9iKFt6ZShHKV0se3R5cGU6ImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSJ9KTtpZih0eXBlb2YgbmF2aWdhdG9yPCJ1IiYmbmF2aWdhdG9yLm1zU2F2ZUJsb2IpcmV0dXJuIG5hdmlnYXRvci5tc1NhdmVCbG9iKFEsUyk7aWYodHlwZW9mIHNhdmVBczwidSIpcmV0dXJuIHNhdmVBcyhRLFMp''@;'; put 'put ''O2lmKHR5cGVvZiBVUkw8InUiJiZ0eXBlb2YgZG9jdW1lbnQ8InUiJiZkb2N1bWVudC5jcmVhdGVFbGVtZW50JiZVUkwuY3JlYXRlT2JqZWN0VVJMKXt2YXIgb2U9VVJMLmNyZWF0ZU9iamVjdFVSTChRKTtpZigib2JqZWN0Ij09dHlwZW9mIGNocm9tZSYmImZ1bmN0aW9uIj09dHlwZW9mKGNo''@;'; put 'put ''cm9tZS5kb3dubG9hZHN8fHt9KS5kb3dubG9hZClyZXR1cm4gVVJMLnJldm9rZU9iamVjdFVSTCYmdHlwZW9mIHNldFRpbWVvdXQ8InUiJiZzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7VVJMLnJldm9rZU9iamVjdFVSTChvZSl9LDZlNCksY2hyb21lLmRvd25sb2Fkcy5kb3dubG9hZCh7dXJsOm9l''@;'; put 'put ''LGZpbGVuYW1lOlMsc2F2ZUFzOiEwfSk7dmFyIGdlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTtpZihudWxsIT1nZS5kb3dubG9hZClyZXR1cm4gZ2UuZG93bmxvYWQ9UyxnZS5ocmVmPW9lLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZ2UpLGdlLmNsaWNrKCksZG9jdW1lbnQuYm9k''@;'; put 'put ''eS5yZW1vdmVDaGlsZChnZSksVVJMLnJldm9rZU9iamVjdFVSTCYmdHlwZW9mIHNldFRpbWVvdXQ8InUiJiZzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7VVJMLnJldm9rZU9iamVjdFVSTChvZSl9LDZlNCksb2V9fWlmKHR5cGVvZiAkPCJ1IiYmdHlwZW9mIEZpbGU8InUiJiZ0eXBlb2YgRm9sZGVy''@;'; put 'put ''PCJ1Iil0cnl7dmFyIHBlPUZpbGUoUyk7cmV0dXJuIHBlLm9wZW4oInciKSxwZS5lbmNvZGluZz0iYmluYXJ5IixBcnJheS5pc0FycmF5KFIpJiYoUj1DKFIpKSxwZS53cml0ZShSKSxwZS5jbG9zZSgpLFJ9Y2F0Y2goeWUpe2lmKCF5ZS5tZXNzYWdlfHwheWUubWVzc2FnZS5tYXRjaCgvb25z''@;'; put 'put ''dHJ1Y3QvKSl0aHJvdyB5ZX10aHJvdyBuZXcgRXJyb3IoImNhbm5vdCBzYXZlIGZpbGUgIitTKX1mdW5jdGlvbiBPZShTKXtmb3IodmFyIFI9T2JqZWN0LmtleXMoUyksaz1bXSxHPTA7RzxSLmxlbmd0aDsrK0cpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFMsUltHXSkm''@;'; put 'put ''JmsucHVzaChSW0ddKTtyZXR1cm4ga31mdW5jdGlvbiBJZShTLFIpe2Zvcih2YXIgaz1bXSxHPU9lKFMpLFE9MDtRIT09Ry5sZW5ndGg7KytRKW51bGw9PWtbU1tHW1FdXVtSXV0mJihrW1NbR1tRXV1bUl1dPUdbUV0pO3JldHVybiBrfWZ1bmN0aW9uIFZlKFMpe2Zvcih2YXIgUj1bXSxrPU9l''@;'; put 'put ''KFMpLEc9MDtHIT09ay5sZW5ndGg7KytHKVJbU1trW0ddXV09a1tHXTtyZXR1cm4gUn1mdW5jdGlvbiBrZShTKXtmb3IodmFyIFI9W10saz1PZShTKSxHPTA7RyE9PWsubGVuZ3RoOysrRylSW1Nba1tHXV1dPXBhcnNlSW50KGtbR10sMTApO3JldHVybiBSfXZhciBRZSx1bixfdD1uZXcgRGF0''@;'; put 'put ''ZSgxODk5LDExLDMwLDAsMCwwKSxudD0wO2Z1bmN0aW9uIHl0KCl7bnQ9X3QuZ2V0VGltZSgpKzZlNCooKG5ldyBEYXRlKS5nZXRUaW1lem9uZU9mZnNldCgpLV90LmdldFRpbWV6b25lT2Zmc2V0KCkpLFFlPWZ1bmN0aW9uKFIsayl7dmFyIEc9Ui5nZXRUaW1lKCk7cmV0dXJuIGsmJihHLT0x''@;'; put 'put ''MjYzMTY4ZTUpLChHLW50KS84NjRlNX0sdW49ZnVuY3Rpb24oUil7dmFyIGs9bmV3IERhdGU7cmV0dXJuIGsuc2V0VGltZSgyNCpSKjYwKjYwKjFlMytudCksa319ZnVuY3Rpb24gaXQoUyl7dmFyIFI9MCxrPTAsRz0hMSxRPVMubWF0Y2goL1AoWzAtOVwuXStZKT8oWzAtOVwuXStNKT8oWzAt''@;'; put 'put ''OVwuXStEKT9UKFswLTlcLl0rSCk/KFswLTlcLl0rTSk/KFswLTlcLl0rUyk/Lyk7aWYoIVEpdGhyb3cgbmV3IEVycm9yKCJ8IitTKyJ8IGlzIG5vdCBhbiBJU084NjAxIER1cmF0aW9uIik7Zm9yKHZhciBvZT0xO29lIT1RLmxlbmd0aDsrK29lKWlmKFFbb2VdKXtzd2l0Y2goaz0xLG9lPjMm''@;'; put 'put ''JihHPSEwKSxRW29lXS5zbGljZShRW29lXS5sZW5ndGgtMSkpe2Nhc2UiWSI6dGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBJU08gRHVyYXRpb24gRmllbGQ6ICIrUVtvZV0uc2xpY2UoUVtvZV0ubGVuZ3RoLTEpKTtjYXNlIkQiOmsqPTI0O2Nhc2UiSCI6ayo9NjA7Y2FzZSJNIjppZigh''@;'; put 'put ''Ryl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIElTTyBEdXJhdGlvbiBGaWVsZDogTSIpO2sqPTYwfVIrPWsqcGFyc2VJbnQoUVtvZV0sMTApfXJldHVybiBSfXl0KCk7dmFyICRlPW5ldyBEYXRlKCIyMDE3LTAyLTE5VDE5OjA2OjA5LjAwMFoiKTtpc05hTigkZS5nZXRGdWxsWWVhcigp''@;'; put 'put ''KSYmKCRlPW5ldyBEYXRlKCIyLzE5LzE3IikpO3ZhciB0dD0yMDE3PT0kZS5nZXRGdWxsWWVhcigpO2Z1bmN0aW9uIEhlKFMsUil7dmFyIGs9bmV3IERhdGUoUyk7aWYodHQpcmV0dXJuIFI+MD9rLnNldFRpbWUoay5nZXRUaW1lKCkrNjAqay5nZXRUaW1lem9uZU9mZnNldCgpKjFlMyk6Ujww''@;'; put 'put ''JiZrLnNldFRpbWUoay5nZXRUaW1lKCktNjAqay5nZXRUaW1lem9uZU9mZnNldCgpKjFlMyksaztpZihTIGluc3RhbmNlb2YgRGF0ZSlyZXR1cm4gUztpZigxOTE3PT0kZS5nZXRGdWxsWWVhcigpJiYhaXNOYU4oay5nZXRGdWxsWWVhcigpKSl7dmFyIEc9ay5nZXRGdWxsWWVhcigpO3JldHVy''@;'; put 'put ''biBTLmluZGV4T2YoIiIrRyk+LTF8fGsuc2V0RnVsbFllYXIoay5nZXRGdWxsWWVhcigpKzEwMCksa312YXIgUT1TLm1hdGNoKC9cZCsvZyl8fFsiMjAxNyIsIjIiLCIxOSIsIjAiLCIwIiwiMCJdLG9lPW5ldyBEYXRlKCtRWzBdLCtRWzFdLTEsK1FbMl0sK1FbM118fDAsK1FbNF18fDAsK1Fb''@;'; put 'put ''NV18fDApO3JldHVybiBTLmluZGV4T2YoIloiKT4tMSYmKG9lPW5ldyBEYXRlKG9lLmdldFRpbWUoKS02MCpvZS5nZXRUaW1lem9uZU9mZnNldCgpKjFlMykpLG9lfWZ1bmN0aW9uIHV0KFMpe2Zvcih2YXIgUj0iIixrPTA7ayE9Uy5sZW5ndGg7KytrKVIrPVN0cmluZy5mcm9tQ2hhckNvZGUo''@;'; put 'put ''U1trXSk7cmV0dXJuIFJ9ZnVuY3Rpb24gcXQoUyl7aWYoIm9iamVjdCIhPXR5cGVvZiBTfHxudWxsPT1TKXJldHVybiBTO2lmKFMgaW5zdGFuY2VvZiBEYXRlKXJldHVybiBuZXcgRGF0ZShTLmdldFRpbWUoKSk7aWYoQXJyYXkuaXNBcnJheShTKSlyZXR1cm4gZnVuY3Rpb24gUnQoUyl7Zm9y''@;'; put 'put ''KHZhciBSPVtdLGs9MDtrPFMubGVuZ3RoOysrayl7dmFyIEc9U1trXTsib2JqZWN0Ij09dHlwZW9mIEc/UltrXT1xdChHKTpudWxsIT1HJiYoUltrXT1HKX1yZXR1cm4gUn0oUyk7dmFyIFI9e307Zm9yKHZhciBrIGluIFMpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFMs''@;'; put 'put ''aykmJihSW2tdPXF0KFNba10pKTtyZXR1cm4gUn1mdW5jdGlvbiBQdChTLFIpe2lmKCJvYmplY3QiIT10eXBlb2YgUnx8bnVsbD09UilyZXR1cm4gUztmb3IodmFyIGsgaW4gUilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoUixrKSYmKFNba109cXQoUltrXSkpO3JldHVy''@;'; put 'put ''biBTfWZ1bmN0aW9uIGNpKFMsUil7Zm9yKHZhciBrPSIiO2subGVuZ3RoPFI7KWsrPVM7cmV0dXJuIGt9ZnVuY3Rpb24gUXQoUyl7dmFyIFI9TnVtYmVyKFMpO2lmKCFpc05hTihSKSlyZXR1cm4gaXNGaW5pdGUoUik/UjpOYU47aWYoIS9cZC8udGVzdChTKSlyZXR1cm4gUjt2YXIgaz0xLEc9''@;'; put 'put ''Uy5yZXBsYWNlKC8oW1xkXSksKFtcZF0pL2csIiQxJDIiKS5yZXBsYWNlKC9bJF0vZywiIikucmVwbGFjZSgvWyVdL2csZnVuY3Rpb24oKXtyZXR1cm4gayo9MTAwLCIifSk7cmV0dXJuIGlzTmFOKFI9TnVtYmVyKEcpKSYmKEc9Ry5yZXBsYWNlKC9bKF0oLiopWyldLyxmdW5jdGlvbihRLG9l''@;'; put 'put ''KXtyZXR1cm4gaz0tayxvZX0pLGlzTmFOKFI9TnVtYmVyKEcpKSk/UjpSL2t9ZnVuY3Rpb24gc24oUyl7dmFyIFI9bmV3IERhdGUoUyksaz1uZXcgRGF0ZShOYU4pLEc9Ui5nZXRZZWFyKCksUT1SLmdldE1vbnRoKCksb2U9Ui5nZXREYXRlKCk7cmV0dXJuIGlzTmFOKG9lKXx8RzwwfHxHPjgw''@;'; put 'put ''OTk/azooUT4wfHxvZT4xKSYmMTAxIT1HfHxTLnRvTG93ZXJDYXNlKCkubWF0Y2goL2phbnxmZWJ8bWFyfGFwcnxtYXl8anVufGp1bHxhdWd8c2VwfG9jdHxub3Z8ZGVjLyk/UjpTLm1hdGNoKC9bXi0wLTk6LFwvXFxdLyk/azpSfWZ1bmN0aW9uIFJpKFMsUil7aWYoUiYmUi5yYXcpcmV0dXJu''@;'; put 'put ''e3Q6InMiLHY6U307aWYoIVMpcmV0dXJue3Q6InoifTtpZigiVFJVRSI9PT1TKXJldHVybnt0OiJiIix2OiEwfTtpZigiRkFMU0UiPT09UylyZXR1cm57dDoiYiIsdjohMX07dmFyIGs9IiIsRz1OdW1iZXIoUyk7aWYoaXNGaW5pdGUoRykpcmV0dXJue3Q6Im4iLHY6R307aWYoaXNOYU4oRykm''@;'; put 'put ''Ji9cZC8udGVzdChTKSl7dmFyIFE9MSxvZT1TLnJlcGxhY2UoLyhbXGRdKSwoW1xkXSkvZyxmdW5jdGlvbihldCxjdCxFdCl7cmV0dXJuIGt8fChrPSIjLCMjMCIpLGN0K0V0fSkucmVwbGFjZSgvWyRdL2csIiIpLnJlcGxhY2UoL1wuXGQqLyxmdW5jdGlvbihldCl7a3x8KGs9IjAiKSxrKz0i''@;'; put 'put ''LiI7Zm9yKHZhciBjdD0yO2N0PD1ldC5sZW5ndGg7KytjdClrKz0iMCI7cmV0dXJuIGV0fSkucmVwbGFjZSgvWyVdL2csZnVuY3Rpb24oKXtyZXR1cm4gUSo9MTAwLGt8fChrPSIwIiksays9IiUiLCIifSk7aWYoIWlzTmFOKEc9TnVtYmVyKG9lKSkpcmV0dXJue3Q6Im4iLHY6Ry9RLHo6a307''@;'; put 'put ''aWYob2U9b2UucmVwbGFjZSgvWyhdKC4qKVspXS8sZnVuY3Rpb24oZXQsY3Qpe3JldHVybiBRPS1RLGN0fSksIWlzTmFOKEc9TnVtYmVyKG9lKSkpcmV0dXJue3Q6Im4iLHY6Ry9RLHo6KGt8fCIwIikrIl8pOygiKyhrfHwiMCIpKyIpO0AifX1lOmlmKCFSfHwhUi5yYXdEYXRlcyl7dmFyIGdl''@;'; put 'put ''PVImJlIuY2VsbERhdGVzLHBlPW5ldyBEYXRlKFMpLFBlPXBlLmdldFllYXIoKSxOZT1wZS5nZXRNb250aCgpLFllPXBlLmdldERhdGUoKTtpZihpc05hTihZZSl8fFBlPDB8fFBlPjgwOTkpYnJlYWsgZTtpZigoTmU+MHx8WWU+MSkmJjEwMSE9UGUpcmV0dXJue3Q6Z2U/ImQiOiJuIix2Omdl''@;'; put 'put ''P3BlOlFlKHBlKSx6OlIuZGF0ZU5GfHxBLl90YWJsZVsxNF19O2lmKFMudG9Mb3dlckNhc2UoKS5tYXRjaCgvamFufGZlYnxtYXJ8YXByfG1heXxqdW58anVsfGF1Z3xzZXB8b2N0fG5vdnxkZWMvKSlyZXR1cm57dDpnZT8iZCI6Im4iLHY6Z2U/cGU6UWUocGUpLHo6Ui5kYXRlTkZ8fEEuX3Rh''@;'; put 'put ''YmxlWzE0XX07aWYoUy5tYXRjaCgvW14tMC05OixcL1xcXS8pKWJyZWFrIGU7cmV0dXJuIHBlfXJldHVybnt0OiJzIix2OlN9fXZhciB6dCxobj01PT0iYWJhY2FiYSIuc3BsaXQoLyg6P2IpL2kpLmxlbmd0aDtmdW5jdGlvbiBXdChTKXtyZXR1cm4gbnVsbCE9UyYmIVN9ZnVuY3Rpb24gQXQo''@;'; put 'put ''Uyl7cmV0dXJuIFMuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrUy5zbGljZSgxKX1mdW5jdGlvbiBSbihTKXtyZXR1cm4gUz9TLmRhdGE/SihTLmRhdGEpOlMuYXNOb2RlQnVmZmVyJiZUZT9KKFMuYXNOb2RlQnVmZmVyKCkudG9TdHJpbmcoImJpbmFyeSIpKTpTLmFzQmluYXJ5P0ooUy5hc0Jp''@;'; put 'put ''bmFyeSgpKTpTLl9kYXRhJiZTLl9kYXRhLmdldENvbnRlbnQ/Sih1dChBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChTLl9kYXRhLmdldENvbnRlbnQoKSwwKSkpOlMuY29udGVudCYmUy50eXBlP0oodXQoUy5jb250ZW50KSk6bnVsbDpudWxsfWZ1bmN0aW9uIHN0KFMpe2lmKCFTKXJldHVy''@;'; put 'put ''biBudWxsO2lmKFMuZGF0YSlyZXR1cm4gWShTLmRhdGEpO2lmKFMuYXNOb2RlQnVmZmVyJiZUZSlyZXR1cm4gUy5hc05vZGVCdWZmZXIoKTtpZihTLl9kYXRhJiZTLl9kYXRhLmdldENvbnRlbnQpe3ZhciBSPVMuX2RhdGEuZ2V0Q29udGVudCgpO3JldHVybiJzdHJpbmciPT10eXBlb2YgUj9Z''@;'; put 'put ''KFIpOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKFIpfXJldHVybiBTLmNvbnRlbnQmJlMudHlwZT9TLmNvbnRlbnQ6bnVsbH1mdW5jdGlvbiByaShTLFIpe2Zvcih2YXIgaz1TLkZ1bGxQYXRoc3x8T2UoUy5maWxlcyksRz1SLnRvTG93ZXJDYXNlKCksUT1HLnJlcGxhY2UoL1wvL2csIlxc''@;'; put 'put ''Iiksb2U9MDtvZTxrLmxlbmd0aDsrK29lKXt2YXIgZ2U9a1tvZV0udG9Mb3dlckNhc2UoKTtpZihHPT1nZXx8UT09Z2UpcmV0dXJuIFMuZmlsZXNba1tvZV1dfXJldHVybiBudWxsfWZ1bmN0aW9uIFdlKFMsUil7dmFyIGs9cmkoUyxSKTtpZihudWxsPT1rKXRocm93IG5ldyBFcnJvcigiQ2Fu''@;'; put 'put ''bm90IGZpbmQgZmlsZSAiK1IrIiBpbiB6aXAiKTtyZXR1cm4ga31mdW5jdGlvbiBUdChTLFIsayl7aWYoIWspcmV0dXJuIGZ1bmN0aW9uIFV0KFMpe3JldHVybiBTJiYiLmJpbiI9PT1TLm5hbWUuc2xpY2UoLTQpP3N0KFMpOlJuKFMpfShXZShTLFIpKTtpZighUilyZXR1cm4gbnVsbDt0cnl7''@;'; put 'put ''cmV0dXJuIFR0KFMsUil9Y2F0Y2h7cmV0dXJuIG51bGx9fWZ1bmN0aW9uIG5yKFMsUixrKXtpZighaylyZXR1cm4gUm4oV2UoUyxSKSk7aWYoIVIpcmV0dXJuIG51bGw7dHJ5e3JldHVybiBucihTLFIpfWNhdGNoe3JldHVybiBudWxsfX1mdW5jdGlvbiBodChTLFIsayl7aWYoIWspcmV0dXJu''@;'; put 'put ''IHN0KFdlKFMsUikpO2lmKCFSKXJldHVybiBudWxsO3RyeXtyZXR1cm4gaHQoUyxSKX1jYXRjaHtyZXR1cm4gbnVsbH19ZnVuY3Rpb24gam4oUyxSLGspe1MuRnVsbFBhdGhzP3ZlLnV0aWxzLmNmYl9hZGQoUyxSLGspOlMuZmlsZShSLGspfWZ1bmN0aW9uIGhpKCl7cmV0dXJuIHp0P25ldyB6''@;'; put 'put ''dDp2ZS51dGlscy5jZmJfbmV3KCl9ZnVuY3Rpb24gY24oUyxSKXt2YXIgaztpZih6dClzd2l0Y2goUi50eXBlKXtjYXNlImJhc2U2NCI6az1uZXcgenQoUyx7YmFzZTY0OiEwfSk7YnJlYWs7Y2FzZSJiaW5hcnkiOmNhc2UiYXJyYXkiOms9bmV3IHp0KFMse2Jhc2U2NDohMX0pO2JyZWFrO2Nh''@;'; put 'put ''c2UiYnVmZmVyIjprPW5ldyB6dChTKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHR5cGUgIitSLnR5cGUpfWVsc2Ugc3dpdGNoKFIudHlwZSl7Y2FzZSJiYXNlNjQiOms9dmUucmVhZChTLHt0eXBlOiJiYXNlNjQifSk7YnJlYWs7Y2FzZSJiaW5hcnkiOms9''@;'; put 'put ''dmUucmVhZChTLHt0eXBlOiJiaW5hcnkifSk7YnJlYWs7Y2FzZSJidWZmZXIiOmNhc2UiYXJyYXkiOms9dmUucmVhZChTLHt0eXBlOiJidWZmZXIifSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCB0eXBlICIrUi50eXBlKX1yZXR1cm4ga31mdW5jdGlvbiBm''@;'; put 'put ''bihTLFIpe2lmKCIvIj09Uy5jaGFyQXQoMCkpcmV0dXJuIFMuc2xpY2UoMSk7dmFyIGs9Ui5zcGxpdCgiLyIpOyIvIiE9Ui5zbGljZSgtMSkmJmsucG9wKCk7Zm9yKHZhciBHPVMuc3BsaXQoIi8iKTswIT09Ry5sZW5ndGg7KXt2YXIgUT1HLnNoaWZ0KCk7Ii4uIj09PVE/ay5wb3AoKToiLiIh''@;'; put 'put ''PT1RJiZrLnB1c2goUSl9cmV0dXJuIGsuam9pbigiLyIpfXR5cGVvZiBKU1ppcFN5bmM8InUiJiYoenQ9SlNaaXBTeW5jKSx1ZS5leHBvcnRzJiZ0eXBlb2YgenQ+InUiJiYoenQ9eSgzMTc5KSk7dmFyIElpPSc8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9u''@;'; put 'put ''ZT0ieWVzIj8+XHJcbicsWHQ9Lyg/OlteIlxzPz5cL10rKVxzKj1ccyooKD86IikoPzpbXiJdKj8pKD86Iil8KD86JykoPzpbXiddKj8pKD86Jyl8KD86W14nIj5cc10rKSkvZyxlbj0vPFtcL1w/XT9bYS16QS1aMC05Ol8tXSsoPzpccytbXiJccz8+XC9dK1xzKj1ccyooPzoiW14iXSoifCdb''@;'; put 'put ''XiddKid8W14nIj5ccz1dKykpKlxzP1tcL1w/XT8+L2c7SWkubWF0Y2goZW4pfHwoZW49LzxbXj5dKj4vZyk7dmFyIHVhPS88XHcqOi8sRWk9LzwoXC8/KVx3KzovO2Z1bmN0aW9uIHZyKFMsUixrKXtmb3IodmFyIEc9e30sUT0wLG9lPTA7USE9PVMubGVuZ3RoJiYzMiE9PShvZT1TLmNoYXJD''@;'; put 'put ''b2RlQXQoUSkpJiYxMCE9PW9lJiYxMyE9PW9lOysrUSk7aWYoUnx8KEdbMF09Uy5zbGljZSgwLFEpKSxRPT09Uy5sZW5ndGgpcmV0dXJuIEc7dmFyIGdlPVMubWF0Y2goWHQpLHBlPTAseWU9IiIsUGU9MCxOZT0iIixZZT0iIixldD0xO2lmKGdlKWZvcihQZT0wO1BlIT1nZS5sZW5ndGg7KytQ''@;'; put 'put ''ZSl7Zm9yKFllPWdlW1BlXSxvZT0wO29lIT1ZZS5sZW5ndGgmJjYxIT09WWUuY2hhckNvZGVBdChvZSk7KytvZSk7Zm9yKE5lPVllLnNsaWNlKDAsb2UpLnRyaW0oKTszMj09WWUuY2hhckNvZGVBdChvZSsxKTspKytvZTtmb3IoZXQ9MzQ9PShRPVllLmNoYXJDb2RlQXQob2UrMSkpfHwzOT09''@;'; put 'put ''UT8xOjAseWU9WWUuc2xpY2Uob2UrMStldCxZZS5sZW5ndGgtZXQpLHBlPTA7cGUhPU5lLmxlbmd0aCYmNTghPT1OZS5jaGFyQ29kZUF0KHBlKTsrK3BlKTtpZihwZT09PU5lLmxlbmd0aClOZS5pbmRleE9mKCJfIik+MCYmKE5lPU5lLnNsaWNlKDAsTmUuaW5kZXhPZigiXyIpKSksR1tOZV09''@;'; put 'put ''eWUsa3x8KEdbTmUudG9Mb3dlckNhc2UoKV09eWUpO2Vsc2V7dmFyIGN0PSg1PT09cGUmJiJ4bWxucyI9PT1OZS5zbGljZSgwLDUpPyJ4bWxucyI6IiIpK05lLnNsaWNlKHBlKzEpO2lmKEdbY3RdJiYiZXh0Ij09TmUuc2xpY2UocGUtMyxwZSkpY29udGludWU7R1tjdF09eWUsa3x8KEdbY3Qu''@;'; put 'put ''dG9Mb3dlckNhc2UoKV09eWUpfX1yZXR1cm4gR31mdW5jdGlvbiBXbihTKXtyZXR1cm4gUy5yZXBsYWNlKEVpLCI8JDEiKX12YXIgJGk9eyImcXVvdDsiOiciJywiJmFwb3M7IjoiJyIsIiZndDsiOiI+IiwiJmx0OyI6IjwiLCImYW1wOyI6IiYifSxlaT1WZSgkaSksUXI9ZnVuY3Rpb24oKXt2''@;'; put 'put ''YXIgUz0vJig/OnF1b3R8YXBvc3xndHxsdHxhbXB8I3g/KFtcZGEtZkEtRl0rKSk7L2dpLFI9L194KFtcZGEtZkEtRl17NH0pXy9naTtyZXR1cm4gZnVuY3Rpb24gayhHKXt2YXIgUT1HKyIiLG9lPVEuaW5kZXhPZigiPCFbQ0RBVEFbIik7aWYoLTE9PW9lKXJldHVybiBRLnJlcGxhY2UoUyxm''@;'; put 'put ''dW5jdGlvbihwZSx5ZSl7cmV0dXJuICRpW3BlXXx8U3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludCh5ZSxwZS5pbmRleE9mKCJ4Iik+LTE/MTY6MTApKXx8cGV9KS5yZXBsYWNlKFIsZnVuY3Rpb24ocGUseWUpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KHllLDE2KSl9''@;'; put 'put ''KTt2YXIgZ2U9US5pbmRleE9mKCJdXT4iKTtyZXR1cm4gayhRLnNsaWNlKDAsb2UpKStRLnNsaWNlKG9lKzksZ2UpK2soUS5zbGljZShnZSszKSl9fSgpLFZpPS9bJjw+JyJdL2csTmk9L1tcdTAwMDAtXHUwMDA4XHUwMDBiLVx1MDAxZl0vZyxEYT0vX3hbMC05YS1mQS1GXXs0fV8vZztmdW5j''@;'; put 'put ''dGlvbiBMcihTKXtyZXR1cm4oUysiIikucmVwbGFjZShEYSwiX3gwMDVGJCYiKS5yZXBsYWNlKFZpLGZ1bmN0aW9uKGspe3JldHVybiBlaVtrXX0pLnJlcGxhY2UoTmksZnVuY3Rpb24oayl7cmV0dXJuIl94IisoIjAwMCIray5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTQp''@;'; put 'put ''KyJfIn0pfWZ1bmN0aW9uIFdpKFMpe3JldHVybiBMcihTKS5yZXBsYWNlKC9cbi9nLCJfeDAwMGFfIil9ZnVuY3Rpb24gcGEoUyl7cmV0dXJuIExyKFMpLnJlcGxhY2UoLyAvZywiX3gwMDIwXyIpfXZhciBRbj0vW1x1MDAwMC1cdTAwMWZdL2c7ZnVuY3Rpb24gbGEoUyl7cmV0dXJuKFMrIiIp''@;'; put 'put ''LnJlcGxhY2UoVmksZnVuY3Rpb24oayl7cmV0dXJuIGVpW2tdfSkucmVwbGFjZSgvXG4vZywiPGJyLz4iKS5yZXBsYWNlKFFuLGZ1bmN0aW9uKGspe3JldHVybiImI3giKygiMDAwIitrLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpKS5zbGljZSgtNCkrIjsifSl9ZnVuY3Rpb24geWEoUyl7''@;'; put 'put ''cmV0dXJuKFMrIiIpLnJlcGxhY2UoVmksZnVuY3Rpb24oayl7cmV0dXJuIGVpW2tdfSkucmVwbGFjZShRbixmdW5jdGlvbihrKXtyZXR1cm4iJiN4IitrLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCkrIjsifSl9dmFyIExhPWZ1bmN0aW9uKCl7dmFyIFM9LyYjKFxk''@;'; put 'put ''Kyk7L2c7ZnVuY3Rpb24gUihrLEcpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KEcsMTApKX1yZXR1cm4gZnVuY3Rpb24oRyl7cmV0dXJuIEcucmVwbGFjZShTLFIpfX0oKSxGYT1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihSKXtyZXR1cm4gUi5yZXBsYWNlKC8oXHJc''@;'; put 'put ''bnxbXHJcbl0pL2csIiYjMTA7Iil9fSgpO2Z1bmN0aW9uIHRpKFMpe3N3aXRjaChTKXtjYXNlIDE6Y2FzZSEwOmNhc2UiMSI6Y2FzZSJ0cnVlIjpjYXNlIlRSVUUiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fXZhciBnbz1mdW5jdGlvbihSKXtmb3IodmFyIGs9IiIsRz0wLFE9MCxvZT0w''@;'; put 'put ''LGdlPTAscGU9MCx5ZT0wO0c8Ui5sZW5ndGg7KShRPVIuY2hhckNvZGVBdChHKyspKTwxMjg/ays9U3RyaW5nLmZyb21DaGFyQ29kZShRKToob2U9Ui5jaGFyQ29kZUF0KEcrKyksUT4xOTEmJlE8MjI0PyhwZT0oMzEmUSk8PDYscGV8PTYzJm9lLGsrPVN0cmluZy5mcm9tQ2hhckNvZGUocGUp''@;'; put 'put ''KTooZ2U9Ui5jaGFyQ29kZUF0KEcrKyksUTwyNDA/ays9U3RyaW5nLmZyb21DaGFyQ29kZSgoMTUmUSk8PDEyfCg2MyZvZSk8PDZ8NjMmZ2UpOih5ZT0oKDcmUSk8PDE4fCg2MyZvZSk8PDEyfCg2MyZnZSk8PDZ8NjMmKHBlPVIuY2hhckNvZGVBdChHKyspKSktNjU1MzYsays9U3RyaW5nLmZy''@;'; put 'put ''b21DaGFyQ29kZSg1NTI5NisoeWU+Pj4xMCYxMDIzKSksays9U3RyaW5nLmZyb21DaGFyQ29kZSg1NjMyMCsoMTAyMyZ5ZSkpKSkpO3JldHVybiBrfSxOcz1mdW5jdGlvbihTKXtmb3IodmFyIFI9W10saz0wLEc9MCxRPTA7azxTLmxlbmd0aDspc3dpdGNoKEc9Uy5jaGFyQ29kZUF0KGsrKyks''@;'; put 'put ''ITApe2Nhc2UgRzwxMjg6Ui5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoRykpO2JyZWFrO2Nhc2UgRzwyMDQ4OlIucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKDE5MisoRz4+NikpKSxSLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSgxMjgrKDYzJkcpKSk7YnJlYWs7Y2FzZSBHPj01NTI5NiYm''@;'; put 'put ''Rzw1NzM0NDpHLT01NTI5NixRPVMuY2hhckNvZGVBdChrKyspLTU2MzIwKyhHPDwxMCksUi5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoMjQwKyhRPj4xOCY3KSkpLFIucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKDE0NCsoUT4+MTImNjMpKSksUi5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUo''@;'; put 'put ''MTI4KyhRPj42JjYzKSkpLFIucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKDEyOCsoNjMmUSkpKTticmVhaztkZWZhdWx0OlIucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKDIyNCsoRz4+MTIpKSksUi5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoMTI4KyhHPj42JjYzKSkpLFIucHVzaChTdHJp''@;'; put 'put ''bmcuZnJvbUNoYXJDb2RlKDEyOCsoNjMmRykpKX1yZXR1cm4gUi5qb2luKCIiKX07aWYoVGUpe3ZhciBibD1mdW5jdGlvbihSKXt2YXIgRyxRLHllLGs9QnVmZmVyLmFsbG9jKDIqUi5sZW5ndGgpLG9lPTEsZ2U9MCxwZT0wO2ZvcihRPTA7UTxSLmxlbmd0aDtRKz1vZSlvZT0xLCh5ZT1SLmNo''@;'; put 'put ''YXJDb2RlQXQoUSkpPDEyOD9HPXllOnllPDIyND8oRz02NCooMzEmeWUpKyg2MyZSLmNoYXJDb2RlQXQoUSsxKSksb2U9Mik6eWU8MjQwPyhHPTQwOTYqKDE1JnllKSs2NCooNjMmUi5jaGFyQ29kZUF0KFErMSkpKyg2MyZSLmNoYXJDb2RlQXQoUSsyKSksb2U9Myk6KG9lPTQsRz0yNjIxNDQq''@;'; put 'put ''KDcmeWUpKzQwOTYqKDYzJlIuY2hhckNvZGVBdChRKzEpKSs2NCooNjMmUi5jaGFyQ29kZUF0KFErMikpKyg2MyZSLmNoYXJDb2RlQXQoUSszKSkscGU9NTUyOTYrKChHLT02NTUzNik+Pj4xMCYxMDIzKSxHPTU2MzIwKygxMDIzJkcpKSwwIT09cGUmJihrW2dlKytdPTI1NSZwZSxrW2dlKytd''@;'; put 'put ''PXBlPj4+OCxwZT0wKSxrW2dlKytdPUclMjU2LGtbZ2UrK109Rz4+Pjg7cmV0dXJuIGsuc2xpY2UoMCxnZSkudG9TdHJpbmcoInVjczIiKX0scHU9ImZvbyBiYXIgYmF6XHhlMlx4OThceDgzXHhmMFx4OWZceDhkXHhhMyI7Z28ocHUpPT1ibChwdSkmJihnbz1ibCk7dmFyIExjPWZ1bmN0aW9u''@;'; put 'put ''KFIpe3JldHVybiBTZShSLCJiaW5hcnkiKS50b1N0cmluZygidXRmOCIpfTtnbyhwdSk9PUxjKHB1KSYmKGdvPUxjKSxOcz1mdW5jdGlvbihTKXtyZXR1cm4gU2UoUywidXRmOCIpLnRvU3RyaW5nKCJiaW5hcnkiKX19dmFyIFMsRDA9ZnVuY3Rpb24oKXt2YXIgUz17fTtyZXR1cm4gZnVuY3Rp''@;'; put 'put ''b24oayxHKXt2YXIgUT1rKyJ8IisoR3x8IiIpO3JldHVybiBTW1FdP1NbUV06U1tRXT1uZXcgUmVnRXhwKCI8KD86XFx3KzopPyIraysnKD86IHhtbDpzcGFjZT0icHJlc2VydmUiKT8oPzpbXj5dKik+KFtcXHNcXFNdKj8pPC8oPzpcXHcrOik/JytrKyI+IixHfHwiIil9fSgpLGlyPShTPVtb''@;'; put 'put ''Im5ic3AiLCIgIl0sWyJtaWRkb3QiLCJceGI3Il0sWyJxdW90IiwnIiddLFsiYXBvcyIsIiciXSxbImd0IiwiPiJdLFsibHQiLCI8Il0sWyJhbXAiLCImIl1dLm1hcChmdW5jdGlvbihSKXtyZXR1cm5bbmV3IFJlZ0V4cCgiJiIrUlswXSsiOyIsImlnIiksUlsxXV19KSxmdW5jdGlvbihrKXtm''@;'; put 'put ''b3IodmFyIEc9ay5yZXBsYWNlKC9eW1x0XG5cciBdKy8sIiIpLnJlcGxhY2UoL1tcdFxuXHIgXSskLywiIikucmVwbGFjZSgvW1x0XG5cciBdKy9nLCIgIikucmVwbGFjZSgvPFxzKltiQl1bclJdXHMqXC8/Pi9nLCJcbiIpLnJlcGxhY2UoLzxbXj5dKj4vZywiIiksUT0wO1E8Uy5sZW5ndGg7''@;'; put 'put ''KytRKUc9Ry5yZXBsYWNlKFNbUV1bMF0sU1tRXVsxXSk7cmV0dXJuIEd9KSx4YT1mdW5jdGlvbigpe3ZhciBTPXt9O3JldHVybiBmdW5jdGlvbihrKXtyZXR1cm4gdm9pZCAwIT09U1trXT9TW2tdOlNba109bmV3IFJlZ0V4cCgiPCg/OnZ0Oik/IitrKyI+KFtcXHNcXFNdKj8pPC8oPzp2dDop''@;'; put 'put ''PyIraysiPiIsImciKX19KCksdWk9LzxcLz8oPzp2dDopP3ZhcmlhbnQ+L2csVnQ9LzwoPzp2dDopKFtePl0qKT4oW1xzXFNdKik8LztmdW5jdGlvbiBKcihTLFIpe3ZhciBrPXZyKFMpLEc9Uy5tYXRjaCh4YShrLmJhc2VUeXBlKSl8fFtdLFE9W107aWYoRy5sZW5ndGghPWsuc2l6ZSl7aWYo''@;'; put 'put ''Ui5XVEYpdGhyb3cgbmV3IEVycm9yKCJ1bmV4cGVjdGVkIHZlY3RvciBsZW5ndGggIitHLmxlbmd0aCsiICE9ICIray5zaXplKTtyZXR1cm4gUX1yZXR1cm4gRy5mb3JFYWNoKGZ1bmN0aW9uKG9lKXt2YXIgZ2U9b2UucmVwbGFjZSh1aSwiIikubWF0Y2goVnQpO2dlJiZRLnB1c2goe3Y6Z28o''@;'; put 'put ''Z2VbMl0pLHQ6Z2VbMV19KX0pLFF9dmFyIGIwPS8oXlxzfFxzJHxcbikvO2Z1bmN0aW9uIEhhKFMsUil7cmV0dXJuIjwiK1MrKFIubWF0Y2goYjApPycgeG1sOnNwYWNlPSJwcmVzZXJ2ZSInOiIiKSsiPiIrUisiPC8iK1MrIj4ifWZ1bmN0aW9uIEx1KFMpe3JldHVybiBPZShTKS5tYXAoZnVu''@;'; put 'put ''Y3Rpb24oUil7cmV0dXJuIiAiK1IrJz0iJytTW1JdKyciJ30pLmpvaW4oIiIpfWZ1bmN0aW9uIFByKFMsUixrKXtyZXR1cm4iPCIrUysobnVsbCE9az9MdShrKToiIikrKG51bGwhPVI/KFIubWF0Y2goYjApPycgeG1sOnNwYWNlPSJwcmVzZXJ2ZSInOiIiKSsiPiIrUisiPC8iK1M6Ii8iKSsi''@;'; put 'put ''PiJ9ZnVuY3Rpb24gY2YoUyxSKXt0cnl7cmV0dXJuIFMudG9JU09TdHJpbmcoKS5yZXBsYWNlKC9cLlxkKi8sIiIpfWNhdGNoKGspe2lmKFIpdGhyb3cga31yZXR1cm4iIn12YXIgJGgsS2gsWWk9e2RjOiJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIsZGN0ZXJtczoiaHR0cDov''@;'; put 'put ''L3B1cmwub3JnL2RjL3Rlcm1zLyIsZGNtaXR5cGU6Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS8iLG14OiJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS9tYWMvZXhjZWwvMjAwOC9tYWluIixyOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNl''@;'; put 'put ''RG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzIixzanM6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9wYWNrYWdlLzIwMDYvc2hlZXRqcy9jb3JlLXByb3BlcnRpZXMiLHZ0OiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9k''@;'; put 'put ''b2NQcm9wc1ZUeXBlcyIseHNpOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIseHNkOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIsbWFpbjpbImh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9zcHJlYWRzaGVldG1sLzIwMDYvbWFp''@;'; put 'put ''biIsImh0dHA6Ly9wdXJsLm9jbGMub3JnL29veG1sL3NwcmVhZHNoZWV0bWwvbWFpbiIsImh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlL2V4Y2VsLzIwMDYvbWFpbiIsImh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlL2V4Y2VsLzIwMDYvMiJdfSx5bD17bzoi''@;'; put 'put ''dXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6b2ZmaWNlIix4OiJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpleGNlbCIsc3M6InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOnNwcmVhZHNoZWV0IixkdDoidXVpZDpDMkY0MTAxMC02NUIzLTExZDEtQTI5''@;'; put 'put ''Ri0wMEFBMDBDMTQ4ODIiLG12OiJodHRwOi8vbWFjVm1sU2NoZW1hVXJpIix2OiJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOnZtbCIsaHRtbDoiaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MCJ9LHkwPWZ1bmN0aW9uKFMpe2Zvcih2YXIgUj1bXSxHPTA7RzxTWzBdLmxlbmd0aDsr''@;'; put 'put ''K0cpaWYoU1swXVtHXSlmb3IodmFyIFE9MCxvZT1TWzBdW0ddLmxlbmd0aDtRPG9lO1ErPTEwMjQwKVIucHVzaC5hcHBseShSLFNbMF1bR10uc2xpY2UoUSxRKzEwMjQwKSk7cmV0dXJuIFJ9LHI1PXkwLE9sPWZ1bmN0aW9uKFMsUixrKXtmb3IodmFyIEc9W10sUT1SO1E8aztRKz0yKUcucHVz''@;'; put 'put ''aChTdHJpbmcuZnJvbUNoYXJDb2RlKGVvKFMsUSkpKTtyZXR1cm4gRy5qb2luKCIiKS5yZXBsYWNlKEUsIiIpfSx1Zj1PbCxzZD1mdW5jdGlvbihTLFIsayl7Zm9yKHZhciBHPVtdLFE9UjtRPFIrazsrK1EpRy5wdXNoKCgiMCIrU1tRXS50b1N0cmluZygxNikpLnNsaWNlKC0yKSk7cmV0dXJu''@;'; put 'put ''IEcuam9pbigiIil9LGRmPXNkLGsxPWZ1bmN0aW9uKFMsUixrKXtmb3IodmFyIEc9W10sUT1SO1E8aztRKyspRy5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoUG8oUyxRKSkpO3JldHVybiBHLmpvaW4oIiIpfSxoZj1rMSxlaD1mdW5jdGlvbihTLFIpe3ZhciBrPXpvKFMsUik7cmV0dXJuIGs+''@;'; put 'put ''MD9rMShTLFIrNCxSKzQray0xKToiIn0sZmY9ZWgsR2g9ZnVuY3Rpb24oUyxSKXt2YXIgaz16byhTLFIpO3JldHVybiBrPjA/azEoUyxSKzQsUis0K2stMSk6IiJ9LE9jPUdoLE5hPWZ1bmN0aW9uKFMsUil7dmFyIGs9Mip6byhTLFIpO3JldHVybiBrPjA/azEoUyxSKzQsUis0K2stMSk6IiJ9''@;'; put 'put ''LEQzPU5hOyRoPUtoPWZ1bmN0aW9uKFIsayl7dmFyIEc9em8oUixrKTtyZXR1cm4gRz4wP09sKFIsays0LGsrNCtHKToiIn07dmFyIGFuLHZpLHFoPWZ1bmN0aW9uKFMsUil7dmFyIGs9em8oUyxSKTtyZXR1cm4gaz4wP2sxKFMsUis0LFIrNCtrKToiIn0sQW49cWg7YW49dmk9ZnVuY3Rpb24o''@;'; put 'put ''UyxSKXtyZXR1cm4gZnVuY3Rpb24gUWMoUyxSKXtmb3IodmFyIGs9MS0yKihTW1IrN10+Pj43KSxHPSgoMTI3JlNbUis3XSk8PDQpKyhTW1IrNl0+Pj40JjE1KSxRPTE1JlNbUis2XSxvZT01O29lPj0wOy0tb2UpUT0yNTYqUStTW1Irb2VdO3JldHVybiAyMDQ3PT1HPzA9PVE/ayooMS8wKTpO''@;'; put 'put ''YU46KDA9PUc/Rz0tMTAyMjooRy09MTAyMyxRKz1NYXRoLnBvdygyLDUyKSksaypNYXRoLnBvdygyLEctNTIpKlEpfShTLFIpfTt2YXIgQXI9ZnVuY3Rpb24oUil7cmV0dXJuIEFycmF5LmlzQXJyYXkoUil9O1RlJiYoT2w9ZnVuY3Rpb24oUyxSLGspe3JldHVybiBCdWZmZXIuaXNCdWZmZXIo''@;'; put 'put ''Uyk/Uy50b1N0cmluZygidXRmMTZsZSIsUixrKS5yZXBsYWNlKEUsIiIpOnVmKFMsUixrKX0sc2Q9ZnVuY3Rpb24oUyxSLGspe3JldHVybiBCdWZmZXIuaXNCdWZmZXIoUyk/Uy50b1N0cmluZygiaGV4IixSLFIrayk6ZGYoUyxSLGspfSxlaD1mdW5jdGlvbihSLGspe2lmKCFCdWZmZXIuaXNC''@;'; put 'put ''dWZmZXIoUikpcmV0dXJuIGZmKFIsayk7dmFyIEc9Ui5yZWFkVUludDMyTEUoayk7cmV0dXJuIEc+MD9SLnRvU3RyaW5nKCJ1dGY4IixrKzQsays0K0ctMSk6IiJ9LEdoPWZ1bmN0aW9uKFIsayl7aWYoIUJ1ZmZlci5pc0J1ZmZlcihSKSlyZXR1cm4gT2MoUixrKTt2YXIgRz1SLnJlYWRVSW50''@;'; put 'put ''MzJMRShrKTtyZXR1cm4gRz4wP1IudG9TdHJpbmcoInV0ZjgiLGsrNCxrKzQrRy0xKToiIn0sTmE9ZnVuY3Rpb24oUixrKXtpZighQnVmZmVyLmlzQnVmZmVyKFIpKXJldHVybiBEMyhSLGspO3ZhciBHPTIqUi5yZWFkVUludDMyTEUoayk7cmV0dXJuIFIudG9TdHJpbmcoInV0ZjE2bGUiLGsr''@;'; put 'put ''NCxrKzQrRy0xKX0sJGg9ZnVuY3Rpb24oUixrKXtpZighQnVmZmVyLmlzQnVmZmVyKFIpKXJldHVybiBLaChSLGspO3ZhciBHPVIucmVhZFVJbnQzMkxFKGspO3JldHVybiBSLnRvU3RyaW5nKCJ1dGYxNmxlIixrKzQsays0K0cpfSxxaD1mdW5jdGlvbihSLGspe2lmKCFCdWZmZXIuaXNCdWZm''@;'; put 'put ''ZXIoUikpcmV0dXJuIEFuKFIsayk7dmFyIEc9Ui5yZWFkVUludDMyTEUoayk7cmV0dXJuIFIudG9TdHJpbmcoInV0ZjgiLGsrNCxrKzQrRyl9LGsxPWZ1bmN0aW9uKFIsayxHKXtyZXR1cm4gQnVmZmVyLmlzQnVmZmVyKFIpP1IudG9TdHJpbmcoInV0ZjgiLGssRyk6aGYoUixrLEcpfSx5MD1m''@;'; put 'put ''dW5jdGlvbihTKXtyZXR1cm4gU1swXS5sZW5ndGg+MCYmQnVmZmVyLmlzQnVmZmVyKFNbMF1bMF0pP0J1ZmZlci5jb25jYXQoU1swXSk6cjUoUyl9LGo9ZnVuY3Rpb24oUyl7cmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcihTWzBdKT9CdWZmZXIuY29uY2F0KFMpOltdLmNvbmNhdC5hcHBseShbXSxT''@;'; put 'put ''KX0sYW49ZnVuY3Rpb24oUixrKXtyZXR1cm4gQnVmZmVyLmlzQnVmZmVyKFIpP1IucmVhZERvdWJsZUxFKGspOnZpKFIsayl9LEFyPWZ1bmN0aW9uKFIpe3JldHVybiBCdWZmZXIuaXNCdWZmZXIoUil8fEFycmF5LmlzQXJyYXkoUil9KSx0eXBlb2YgY3B0YWJsZTwidSImJihPbD1mdW5jdGlv''@;'; put 'put ''bihTLFIsayl7cmV0dXJuIGNwdGFibGUudXRpbHMuZGVjb2RlKDEyMDAsUy5zbGljZShSLGspKS5yZXBsYWNlKEUsIiIpfSxrMT1mdW5jdGlvbihTLFIsayl7cmV0dXJuIGNwdGFibGUudXRpbHMuZGVjb2RlKDY1MDAxLFMuc2xpY2UoUixrKSl9LGVoPWZ1bmN0aW9uKFMsUil7dmFyIGs9em8o''@;'; put 'put ''UyxSKTtyZXR1cm4gaz4wP2NwdGFibGUudXRpbHMuZGVjb2RlKEYsUy5zbGljZShSKzQsUis0K2stMSkpOiIifSxHaD1mdW5jdGlvbihTLFIpe3ZhciBrPXpvKFMsUik7cmV0dXJuIGs+MD9jcHRhYmxlLnV0aWxzLmRlY29kZShQLFMuc2xpY2UoUis0LFIrNCtrLTEpKToiIn0sTmE9ZnVuY3Rp''@;'; put 'put ''b24oUyxSKXt2YXIgaz0yKnpvKFMsUik7cmV0dXJuIGs+MD9jcHRhYmxlLnV0aWxzLmRlY29kZSgxMjAwLFMuc2xpY2UoUis0LFIrNCtrLTEpKToiIn0sJGg9ZnVuY3Rpb24oUyxSKXt2YXIgaz16byhTLFIpO3JldHVybiBrPjA/Y3B0YWJsZS51dGlscy5kZWNvZGUoMTIwMCxTLnNsaWNlKFIr''@;'; put 'put ''NCxSKzQraykpOiIifSxxaD1mdW5jdGlvbihTLFIpe3ZhciBrPXpvKFMsUik7cmV0dXJuIGs+MD9jcHRhYmxlLnV0aWxzLmRlY29kZSg2NTAwMSxTLnNsaWNlKFIrNCxSKzQraykpOiIifSk7dmFyIFBvPWZ1bmN0aW9uKFMsUil7cmV0dXJuIFNbUl19LGVvPWZ1bmN0aW9uKFMsUil7cmV0dXJu''@;'; put 'put ''IDI1NipTW1IrMV0rU1tSXX0sb2w9ZnVuY3Rpb24oUyxSKXt2YXIgaz0yNTYqU1tSKzFdK1NbUl07cmV0dXJuIGs8MzI3Njg/azotMSooNjU1MzUtaysxKX0sem89ZnVuY3Rpb24oUyxSKXtyZXR1cm4gU1tSKzNdKigxPDwyNCkrKFNbUisyXTw8MTYpKyhTW1IrMV08PDgpK1NbUl19LFZzPWZ1''@;'; put 'put ''bmN0aW9uKFMsUil7cmV0dXJuIFNbUiszXTw8MjR8U1tSKzJdPDwxNnxTW1IrMV08PDh8U1tSXX0sU3M9ZnVuY3Rpb24oUyxSKXtyZXR1cm4gU1tSXTw8MjR8U1tSKzFdPDwxNnxTW1IrMl08PDh8U1tSKzNdfTtmdW5jdGlvbiBqbChTLFIpe3ZhciBHLFEsZ2UscGUseWUsUGUsaz0iIixvZT1b''@;'; put 'put ''XTtzd2l0Y2goUil7Y2FzZSJkYmNzIjppZihQZT10aGlzLmwsVGUmJkJ1ZmZlci5pc0J1ZmZlcih0aGlzKSlrPXRoaXMuc2xpY2UodGhpcy5sLHRoaXMubCsyKlMpLnRvU3RyaW5nKCJ1dGYxNmxlIik7ZWxzZSBmb3IoeWU9MDt5ZTxTOysreWUpays9U3RyaW5nLmZyb21DaGFyQ29kZShlbyh0''@;'; put 'put ''aGlzLFBlKSksUGUrPTI7Uyo9MjticmVhaztjYXNlInV0ZjgiOms9azEodGhpcyx0aGlzLmwsdGhpcy5sK1MpO2JyZWFrO2Nhc2UidXRmMTZsZSI6az1PbCh0aGlzLHRoaXMubCx0aGlzLmwrKFMqPTIpKTticmVhaztjYXNlIndzdHIiOmlmKCEodHlwZW9mIGNwdGFibGU8InUiKSlyZXR1cm4g''@;'; put 'put ''amwuY2FsbCh0aGlzLFMsImRiY3MiKTtrPWNwdGFibGUudXRpbHMuZGVjb2RlKFAsdGhpcy5zbGljZSh0aGlzLmwsdGhpcy5sKzIqUykpLFMqPTI7YnJlYWs7Y2FzZSJscHN0ci1hbnNpIjprPWVoKHRoaXMsdGhpcy5sKSxTPTQrem8odGhpcyx0aGlzLmwpO2JyZWFrO2Nhc2UibHBzdHItY3Ai''@;'; put 'put ''Oms9R2godGhpcyx0aGlzLmwpLFM9NCt6byh0aGlzLHRoaXMubCk7YnJlYWs7Y2FzZSJscHdzdHIiOms9TmEodGhpcyx0aGlzLmwpLFM9NCsyKnpvKHRoaXMsdGhpcy5sKTticmVhaztjYXNlImxwcDQiOlM9NCt6byh0aGlzLHRoaXMubCksaz0kaCh0aGlzLHRoaXMubCksMiZTJiYoUys9Mik7''@;'; put 'put ''YnJlYWs7Y2FzZSI4bHBwNCI6Uz00K3pvKHRoaXMsdGhpcy5sKSxrPXFoKHRoaXMsdGhpcy5sKSwzJlMmJihTKz00LSgzJlMpKTticmVhaztjYXNlImNzdHIiOmZvcihTPTAsaz0iIjswIT09KGdlPVBvKHRoaXMsdGhpcy5sK1MrKykpOylvZS5wdXNoKG5lKGdlKSk7az1vZS5qb2luKCIiKTti''@;'; put 'put ''cmVhaztjYXNlIl93c3RyIjpmb3IoUz0wLGs9IiI7MCE9PShnZT1lbyh0aGlzLHRoaXMubCtTKSk7KW9lLnB1c2gobmUoZ2UpKSxTKz0yO1MrPTIsaz1vZS5qb2luKCIiKTticmVhaztjYXNlImRiY3MtY29udCI6Zm9yKGs9IiIsUGU9dGhpcy5sLHllPTA7eWU8UzsrK3llKXtpZih0aGlzLmxl''@;'; put 'put ''bnMmJi0xIT09dGhpcy5sZW5zLmluZGV4T2YoUGUpKXJldHVybiBnZT1Qbyh0aGlzLFBlKSx0aGlzLmw9UGUrMSxwZT1qbC5jYWxsKHRoaXMsUy15ZSxnZT8iZGJjcy1jb250Ijoic2Jjcy1jb250Iiksb2Uuam9pbigiIikrcGU7b2UucHVzaChuZShlbyh0aGlzLFBlKSkpLFBlKz0yfWs9b2Uu''@;'; put 'put ''am9pbigiIiksUyo9MjticmVhaztjYXNlImNwc3RyIjppZih0eXBlb2YgY3B0YWJsZTwidSIpe2s9Y3B0YWJsZS51dGlscy5kZWNvZGUoUCx0aGlzLnNsaWNlKHRoaXMubCx0aGlzLmwrUykpO2JyZWFrfWNhc2Uic2Jjcy1jb250Ijpmb3Ioaz0iIixQZT10aGlzLmwseWU9MDt5ZSE9UzsrK3ll''@;'; put 'put ''KXtpZih0aGlzLmxlbnMmJi0xIT09dGhpcy5sZW5zLmluZGV4T2YoUGUpKXJldHVybiBnZT1Qbyh0aGlzLFBlKSx0aGlzLmw9UGUrMSxwZT1qbC5jYWxsKHRoaXMsUy15ZSxnZT8iZGJjcy1jb250Ijoic2Jjcy1jb250Iiksb2Uuam9pbigiIikrcGU7b2UucHVzaChuZShQbyh0aGlzLFBlKSkp''@;'; put 'put ''LFBlKz0xfWs9b2Uuam9pbigiIik7YnJlYWs7ZGVmYXVsdDpzd2l0Y2goUyl7Y2FzZSAxOnJldHVybiBHPVBvKHRoaXMsdGhpcy5sKSx0aGlzLmwrKyxHO2Nhc2UgMjpyZXR1cm4gRz0oImkiPT09Uj9vbDplbykodGhpcyx0aGlzLmwpLHRoaXMubCs9MixHO2Nhc2UgNDpjYXNlLTQ6cmV0dXJu''@;'; put 'put ''ImkiIT09UiYmMTI4JnRoaXNbdGhpcy5sKzNdPyhRPXpvKHRoaXMsdGhpcy5sKSx0aGlzLmwrPTQsUSk6KEc9KFM+MD9WczpTcykodGhpcyx0aGlzLmwpLHRoaXMubCs9NCxHKTtjYXNlIDg6Y2FzZS04OmlmKCJmIj09PVIpcmV0dXJuIFE9OD09Uz9hbih0aGlzLHRoaXMubCk6YW4oW3RoaXNb''@;'; put 'put ''dGhpcy5sKzddLHRoaXNbdGhpcy5sKzZdLHRoaXNbdGhpcy5sKzVdLHRoaXNbdGhpcy5sKzRdLHRoaXNbdGhpcy5sKzNdLHRoaXNbdGhpcy5sKzJdLHRoaXNbdGhpcy5sKzFdLHRoaXNbdGhpcy5sKzBdXSwwKSx0aGlzLmwrPTgsUTtTPTg7Y2FzZSAxNjprPXNkKHRoaXMsdGhpcy5sLFMpfX1y''@;'; put 'put ''ZXR1cm4gdGhpcy5sKz1TLGt9dmFyIEhvPWZ1bmN0aW9uKFMsUixrKXtTW2tdPTI1NSZSLFNbaysxXT1SPj4+OCYyNTUsU1trKzJdPVI+Pj4xNiYyNTUsU1trKzNdPVI+Pj4yNCYyNTV9LGtvPWZ1bmN0aW9uKFMsUixrKXtTW2tdPTI1NSZSLFNbaysxXT1SPj44JjI1NSxTW2srMl09Uj4+MTYm''@;'; put 'put ''MjU1LFNbayszXT1SPj4yNCYyNTV9LFN0PWZ1bmN0aW9uKFMsUixrKXtTW2tdPTI1NSZSLFNbaysxXT1SPj4+OCYyNTV9O2Z1bmN0aW9uIEJ0KFMsUixrKXt2YXIgRz0wLFE9MDtpZigiZGJjcyI9PT1rKXtmb3IoUT0wO1EhPVIubGVuZ3RoOysrUSlTdCh0aGlzLFIuY2hhckNvZGVBdChRKSx0''@;'; put 'put ''aGlzLmwrMipRKTtHPTIqUi5sZW5ndGh9ZWxzZSBpZigic2JjcyI9PT1rKXtpZih0eXBlb2YgY3B0YWJsZTwidSImJjg3ND09Rilmb3IoUT0wO1EhPVIubGVuZ3RoOysrUSl7dmFyIG9lPWNwdGFibGUudXRpbHMuZW5jb2RlKEYsUi5jaGFyQXQoUSkpO3RoaXNbdGhpcy5sK1FdPW9lWzBdfWVs''@;'; put 'put ''c2UgZm9yKFI9Ui5yZXBsYWNlKC9bXlx4MDAtXHg3Rl0vZywiXyIpLFE9MDtRIT1SLmxlbmd0aDsrK1EpdGhpc1t0aGlzLmwrUV09MjU1JlIuY2hhckNvZGVBdChRKTtHPVIubGVuZ3RofWVsc2V7aWYoImhleCI9PT1rKXtmb3IoO1E8UzsrK1EpdGhpc1t0aGlzLmwrK109cGFyc2VJbnQoUi5z''@;'; put 'put ''bGljZSgyKlEsMipRKzIpLDE2KXx8MDtyZXR1cm4gdGhpc31pZigidXRmMTZsZSI9PT1rKXt2YXIgZ2U9TWF0aC5taW4odGhpcy5sK1MsdGhpcy5sZW5ndGgpO2ZvcihRPTA7UTxNYXRoLm1pbihSLmxlbmd0aCxTKTsrK1Epe3ZhciBwZT1SLmNoYXJDb2RlQXQoUSk7dGhpc1t0aGlzLmwrK109''@;'; put 'put ''MjU1JnBlLHRoaXNbdGhpcy5sKytdPXBlPj44fWZvcig7dGhpcy5sPGdlOyl0aGlzW3RoaXMubCsrXT0wO3JldHVybiB0aGlzfXN3aXRjaChTKXtjYXNlIDE6Rz0xLHRoaXNbdGhpcy5sXT0yNTUmUjticmVhaztjYXNlIDI6Rz0yLHRoaXNbdGhpcy5sXT0yNTUmUix0aGlzW3RoaXMubCsxXT0y''@;'; put 'put ''NTUmKFI+Pj49OCk7YnJlYWs7Y2FzZSAzOkc9Myx0aGlzW3RoaXMubF09MjU1JlIsdGhpc1t0aGlzLmwrMV09MjU1JihSPj4+PTgpLHRoaXNbdGhpcy5sKzJdPTI1NSYoUj4+Pj04KTticmVhaztjYXNlIDQ6Rz00LEhvKHRoaXMsUix0aGlzLmwpO2JyZWFrO2Nhc2UgODppZihHPTgsImYiPT09''@;'; put 'put ''ayl7IWZ1bmN0aW9uIG41KFMsUixrKXt2YXIgRz0oUjwwfHwxL1I9PS0xLzA/MTowKTw8NyxRPTAsb2U9MCxnZT1HPy1SOlI7aXNGaW5pdGUoZ2UpPzA9PWdlP1E9b2U9MDooUT1NYXRoLmZsb29yKE1hdGgubG9nKGdlKS9NYXRoLkxOMiksb2U9Z2UqTWF0aC5wb3coMiw1Mi1RKSxRPD0tMTAy''@;'; put 'put ''MyYmKCFpc0Zpbml0ZShvZSl8fG9lPE1hdGgucG93KDIsNTIpKT9RPS0xMDIyOihvZS09TWF0aC5wb3coMiw1MiksUSs9MTAyMykpOihRPTIwNDcsb2U9aXNOYU4oUik/MjY5ODU6MCk7Zm9yKHZhciBwZT0wO3BlPD01OysrcGUsb2UvPTI1NilTW2srcGVdPTI1NSZvZTtTW2srNl09KDE1JlEp''@;'; put 'put ''PDw0fDE1Jm9lLFNbays3XT1RPj40fEd9KHRoaXMsUix0aGlzLmwpO2JyZWFrfWNhc2UgMTY6YnJlYWs7Y2FzZS00Okc9NCxrbyh0aGlzLFIsdGhpcy5sKX19cmV0dXJuIHRoaXMubCs9Ryx0aGlzfWZ1bmN0aW9uIF9uKFMsUil7dmFyIGs9c2QodGhpcyx0aGlzLmwsUy5sZW5ndGg+PjEpO2lm''@;'; put 'put ''KGshPT1TKXRocm93IG5ldyBFcnJvcihSKyJFeHBlY3RlZCAiK1MrIiBzYXcgIitrKTt0aGlzLmwrPVMubGVuZ3RoPj4xfWZ1bmN0aW9uIG1uKFMsUil7Uy5sPVIsUy5yZWFkX3NoaWZ0PWpsLFMuY2hrPV9uLFMud3JpdGVfc2hpZnQ9QnR9ZnVuY3Rpb24gSW4oUyxSKXtTLmwrPVJ9ZnVuY3Rp''@;'; put 'put ''b24gYm4oUyl7dmFyIFI9VihTKTtyZXR1cm4gbW4oUiwwKSxSfWZ1bmN0aW9uIHVyKFMsUixrKXtpZihTKXt2YXIgRyxRLG9lO21uKFMsUy5sfHwwKTtmb3IodmFyIGdlPVMubGVuZ3RoLHBlPTAseWU9MDtTLmw8Z2U7KXsxMjgmKHBlPVMucmVhZF9zaGlmdCgxKSkmJihwZT0oMTI3JnBlKSso''@;'; put 'put ''KDEyNyZTLnJlYWRfc2hpZnQoMSkpPDw3KSk7dmFyIFBlPUw4W3BlXXx8TDhbNjU1MzVdO2ZvcihvZT0xMjcmKEc9Uy5yZWFkX3NoaWZ0KDEpKSxRPTE7UTw0JiYxMjgmRzsrK1Epb2UrPSgxMjcmKEc9Uy5yZWFkX3NoaWZ0KDEpKSk8PDcqUTt5ZT1TLmwrb2U7dmFyIE5lPShQZS5mfHxJbiko''@;'; put 'put ''UyxvZSxrKTtpZihTLmw9eWUsUihOZSxQZS5uLHBlKSlyZXR1cm59fX1mdW5jdGlvbiBiaSgpe3ZhciBTPVtdLFI9VGU/MjU2OjIwNDgsaz1mdW5jdGlvbihQZSl7dmFyIE5lPWJuKFBlKTtyZXR1cm4gbW4oTmUsMCksTmV9LEc9ayhSKSxRPWZ1bmN0aW9uKCl7RyYmKEcubGVuZ3RoPkcubCYm''@;'; put 'put ''KChHPUcuc2xpY2UoMCxHLmwpKS5sPUcubGVuZ3RoKSxHLmxlbmd0aD4wJiZTLnB1c2goRyksRz1udWxsKX0sb2U9ZnVuY3Rpb24oUGUpe3JldHVybiBHJiZQZTxHLmxlbmd0aC1HLmw/RzooUSgpLEc9ayhNYXRoLm1heChQZSsxLFIpKSl9O3JldHVybntuZXh0Om9lLHB1c2g6ZnVuY3Rpb24o''@;'; put 'put ''UGUpe1EoKSxudWxsPT0oRz1QZSkubCYmKEcubD1HLmxlbmd0aCksb2UoUil9LGVuZDpmdW5jdGlvbigpe3JldHVybiBRKCkseTAoW1NdKX0sX2J1ZnM6U319ZnVuY3Rpb24gRnIoUyxSLGssRyl7dmFyIG9lLFE9K0h6W1JdO2lmKCFpc05hTihRKSl7R3x8KEc9TDhbUV0ucHx8KGt8fFtdKS5s''@;'; put 'put ''ZW5ndGh8fDApLG9lPTErKFE+PTEyOD8xOjApKzEsRz49MTI4JiYrK29lLEc+PTE2Mzg0JiYrK29lLEc+PTIwOTcxNTImJisrb2U7dmFyIGdlPVMubmV4dChvZSk7UTw9MTI3P2dlLndyaXRlX3NoaWZ0KDEsUSk6KGdlLndyaXRlX3NoaWZ0KDEsMTI4KygxMjcmUSkpLGdlLndyaXRlX3NoaWZ0''@;'; put 'put ''KDEsUT4+NykpO2Zvcih2YXIgcGU9MDs0IT1wZTsrK3BlKXtpZighKEc+PTEyOCkpe2dlLndyaXRlX3NoaWZ0KDEsRyk7YnJlYWt9Z2Uud3JpdGVfc2hpZnQoMSwxMjgrKDEyNyZHKSksRz4+PTd9Rz4wJiZBcihrKSYmUy5wdXNoKGspfX1mdW5jdGlvbiB0YShTLFIsayl7dmFyIEc9cXQoUyk7''@;'; put 'put ''aWYoUi5zPyhHLmNSZWwmJihHLmMrPVIucy5jKSxHLnJSZWwmJihHLnIrPVIucy5yKSk6KEcuY1JlbCYmKEcuYys9Ui5jKSxHLnJSZWwmJihHLnIrPVIucikpLCFrfHxrLmJpZmY8MTIpe2Zvcig7Ry5jPj0yNTY7KUcuYy09MjU2O2Zvcig7Ry5yPj02NTUzNjspRy5yLT02NTUzNn1yZXR1cm4g''@;'; put 'put ''R31mdW5jdGlvbiBvYShTLFIsayl7dmFyIEc9cXQoUyk7cmV0dXJuIEcucz10YShHLnMsUi5zLGspLEcuZT10YShHLmUsUi5zLGspLEd9ZnVuY3Rpb24gVmEoUyxSKXtpZihTLmNSZWwmJlMuYzwwKWZvcihTPXF0KFMpO1MuYzwwOylTLmMrPVI+OD8xNjM4NDoyNTY7aWYoUy5yUmVsJiZTLnI8''@;'; put 'put ''MClmb3IoUz1xdChTKTtTLnI8MDspUy5yKz1SPjg/MTA0ODU3NjpSPjU/NjU1MzY6MTYzODQ7aWYoUy5jUmVsJiZTLmM+PShSPjg/MTYzODQ6MjU2KSlmb3IoUz1xdChTKTtTLmM+PShSPjg/MTYzODQ6MjU2KTspUy5jLT1SPjg/MTYzODQ6MjU2O2lmKFMuclJlbCYmUy5yPj0xMDQ4NTc2KWZv''@;'; put 'put ''cihTPXF0KFMpO1Mucj49MTA0ODU3NjspUy5yLT0xMDQ4NTc2O3ZhciBrPXFpKFMpO3JldHVybiFTLmNSZWwmJm51bGwhPVMuY1JlbCYmKGs9ZnVuY3Rpb24gWGgoUyl7cmV0dXJuIFMucmVwbGFjZSgvXihbQS1aXSkvLCIkJCQxIil9KGspKSwhUy5yUmVsJiZudWxsIT1TLnJSZWwmJihrPWZ1''@;'; put 'put ''bmN0aW9uIFBjKFMpe3JldHVybiBTLnJlcGxhY2UoLyhbQS1aXXxeKShcZCspJC8sIiQxJCQkMiIpfShrKSksa31mdW5jdGlvbiAkbyhTLFIpe3JldHVybiAwIT1TLnMucnx8Uy5zLnJSZWx8fFMuZS5yIT0oUi5iaWZmPj0xMj8xMDQ4NTc1OlIuYmlmZj49OD82NTUzNjoxNjM4NCl8fFMuZS5y''@;'; put 'put ''UmVsPzAhPVMucy5jfHxTLnMuY1JlbHx8Uy5lLmMhPShSLmJpZmY+PTEyPzE2MzgzOjI1NSl8fFMuZS5jUmVsP1ZhKFMucyxSLmJpZmYpKyI6IitWYShTLmUsUi5iaWZmKTooUy5zLnJSZWw/IiI6IiQiKStqaShTLnMucikrIjoiKyhTLmUuclJlbD8iIjoiJCIpK2ppKFMuZS5yKTooUy5zLmNS''@;'; put 'put ''ZWw/IiI6IiQiKStUYShTLnMuYykrIjoiKyhTLmUuY1JlbD8iIjoiJCIpK1RhKFMuZS5jKX12YXIgWGw9e307ZnVuY3Rpb24gX28oUyl7cmV0dXJuIHBhcnNlSW50KGZ1bmN0aW9uIHpsKFMpe3JldHVybiBTLnJlcGxhY2UoL1wkKFxkKykkLywiJDEiKX0oUyksMTApLTF9ZnVuY3Rpb24gamko''@;'; put 'put ''Uyl7cmV0dXJuIiIrKFMrMSl9ZnVuY3Rpb24gQ2EoUyl7Zm9yKHZhciBSPWZ1bmN0aW9uIEcwKFMpe3JldHVybiBTLnJlcGxhY2UoL15cJChbQS1aXSkvLCIkMSIpfShTKSxrPTAsRz0wO0chPT1SLmxlbmd0aDsrK0cpaz0yNiprK1IuY2hhckNvZGVBdChHKS02NDtyZXR1cm4gay0xfWZ1bmN0''@;'; put 'put ''aW9uIFRhKFMpe2lmKFM8MCl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY29sdW1uICIrUyk7dmFyIFI9IiI7Zm9yKCsrUztTO1M9TWF0aC5mbG9vcigoUy0xKS8yNikpUj1TdHJpbmcuZnJvbUNoYXJDb2RlKChTLTEpJTI2KzY1KStSO3JldHVybiBSfWZ1bmN0aW9uIE5vKFMpe2Zvcih2YXIg''@;'; put 'put ''Uj0wLGs9MCxHPTA7RzxTLmxlbmd0aDsrK0cpe3ZhciBRPVMuY2hhckNvZGVBdChHKTtRPj00OCYmUTw9NTc/Uj0xMCpSKyhRLTQ4KTpRPj02NSYmUTw9OTAmJihrPTI2KmsrKFEtNjQpKX1yZXR1cm57YzprLTEscjpSLTF9fWZ1bmN0aW9uIHFpKFMpe2Zvcih2YXIgUj1TLmMrMSxrPSIiO1I7''@;'; put 'put ''Uj0oUi0xKS8yNnwwKWs9U3RyaW5nLmZyb21DaGFyQ29kZSgoUi0xKSUyNis2NSkraztyZXR1cm4gaysoUy5yKzEpfWZ1bmN0aW9uIE1zKFMpe3ZhciBSPVMuaW5kZXhPZigiOiIpO3JldHVybi0xPT1SP3tzOk5vKFMpLGU6Tm8oUyl9OntzOk5vKFMuc2xpY2UoMCxSKSksZTpObyhTLnNsaWNl''@;'; put 'put ''KFIrMSkpfX1mdW5jdGlvbiByYShTLFIpe3JldHVybiB0eXBlb2YgUj4idSJ8fCJudW1iZXIiPT10eXBlb2YgUj9yYShTLnMsUy5lKTooInN0cmluZyIhPXR5cGVvZiBTJiYoUz1xaShTKSksInN0cmluZyIhPXR5cGVvZiBSJiYoUj1xaShSKSksUz09Uj9TOlMrIjoiK1IpfWZ1bmN0aW9uIG9v''@;'; put 'put ''KFMpe3ZhciBSPUpTT04ucGFyc2UoJ3sicyI6eyJjIjowLCJyIjowfSwiZSI6eyJjIjowLCJyIjowfX0nKSxrPTAsRz0wLFE9MCxvZT1TLmxlbmd0aDtmb3Ioaz0wO0c8b2UmJiEoKFE9Uy5jaGFyQ29kZUF0KEcpLTY0KTwxfHxRPjI2KTsrK0cpaz0yNiprK1E7Zm9yKFIucy5jPS0tayxrPTA7''@;'; put 'put ''RzxvZSYmISgoUT1TLmNoYXJDb2RlQXQoRyktNDgpPDB8fFE+OSk7KytHKWs9MTAqaytRO2lmKFIucy5yPS0tayxHPT09b2V8fDU4PT09Uy5jaGFyQ29kZUF0KCsrRykpcmV0dXJuIFIuZS5jPVIucy5jLFIuZS5yPVIucy5yLFI7Zm9yKGs9MDtHIT1vZSYmISgoUT1TLmNoYXJDb2RlQXQoRykt''@;'; put 'put ''NjQpPDF8fFE+MjYpOysrRylrPTI2KmsrUTtmb3IoUi5lLmM9LS1rLGs9MDtHIT1vZSYmISgoUT1TLmNoYXJDb2RlQXQoRyktNDgpPDB8fFE+OSk7KytHKWs9MTAqaytRO3JldHVybiBSLmUucj0tLWssUn1mdW5jdGlvbiBhNShTLFIpe3ZhciBrPSJkIj09Uy50JiZSIGluc3RhbmNlb2YgRGF0''@;'; put 'put ''ZTtpZihudWxsIT1TLnopdHJ5e3JldHVybiBTLnc9QS5mb3JtYXQoUy56LGs/UWUoUik6Uil9Y2F0Y2h7fXRyeXtyZXR1cm4gUy53PUEuZm9ybWF0KChTLlhGfHx7fSkubnVtRm10SWR8fChrPzE0OjApLGs/UWUoUik6Uil9Y2F0Y2h7cmV0dXJuIiIrUn19ZnVuY3Rpb24gX2woUyxSLGspe3Jl''@;'; put 'put ''dHVybiBudWxsPT1TfHxudWxsPT1TLnR8fCJ6Ij09Uy50PyIiOnZvaWQgMCE9PVMudz9TLnc6KCJkIj09Uy50JiYhUy56JiZrJiZrLmRhdGVORiYmKFMuej1rLmRhdGVORiksImUiPT1TLnQ/TWNbUy52XXx8Uy52OmE1KFMsbnVsbD09Uj9TLnY6UikpfWZ1bmN0aW9uIHRoKFMsUil7dmFyIGs9''@;'; put 'put ''UiYmUi5zaGVldD9SLnNoZWV0OiJTaGVldDEiLEc9e307cmV0dXJuIEdba109Uyx7U2hlZXROYW1lczpba10sU2hlZXRzOkd9fWZ1bmN0aW9uIGY0KFMsUixrKXt2YXIgRz1rfHx7fSxRPVM/QXJyYXkuaXNBcnJheShTKTpHLmRlbnNlO251bGwhPWxlJiZudWxsPT1RJiYoUT1sZSk7dmFyIG9l''@;'; put 'put ''PVN8fChRP1tdOnt9KSxnZT0wLHBlPTA7aWYob2UmJm51bGwhPUcub3JpZ2luKXtpZigibnVtYmVyIj09dHlwZW9mIEcub3JpZ2luKWdlPUcub3JpZ2luO2Vsc2V7dmFyIHllPSJzdHJpbmciPT10eXBlb2YgRy5vcmlnaW4/Tm8oRy5vcmlnaW4pOkcub3JpZ2luO2dlPXllLnIscGU9eWUuY31v''@;'; put 'put ''ZVsiIXJlZiJdfHwob2VbIiFyZWYiXT0iQTE6QTEiKX12YXIgUGU9e3M6e2M6MWU3LHI6MWU3fSxlOntjOjAscjowfX07aWYob2VbIiFyZWYiXSl7dmFyIE5lPW9vKG9lWyIhcmVmIl0pO1BlLnMuYz1OZS5zLmMsUGUucy5yPU5lLnMucixQZS5lLmM9TWF0aC5tYXgoUGUuZS5jLE5lLmUuYyks''@;'; put 'put ''UGUuZS5yPU1hdGgubWF4KFBlLmUucixOZS5lLnIpLC0xPT1nZSYmKFBlLmUucj1nZT1OZS5lLnIrMSl9Zm9yKHZhciBZZT0wO1llIT1SLmxlbmd0aDsrK1llKWlmKFJbWWVdKXtpZighQXJyYXkuaXNBcnJheShSW1llXSkpdGhyb3cgbmV3IEVycm9yKCJhb2FfdG9fc2hlZXQgZXhwZWN0cyBh''@;'; put 'put ''biBhcnJheSBvZiBhcnJheXMiKTtmb3IodmFyIGV0PTA7ZXQhPVJbWWVdLmxlbmd0aDsrK2V0KWlmKCEodHlwZW9mIFJbWWVdW2V0XT4idSIpKXt2YXIgY3Q9e3Y6UltZZV1bZXRdfSxFdD1nZStZZSxhdD1wZStldDtpZihQZS5zLnI+RXQmJihQZS5zLnI9RXQpLFBlLnMuYz5hdCYmKFBlLnMu''@;'; put 'put ''Yz1hdCksUGUuZS5yPEV0JiYoUGUuZS5yPUV0KSxQZS5lLmM8YXQmJihQZS5lLmM9YXQpLCFSW1llXVtldF18fCJvYmplY3QiIT10eXBlb2YgUltZZV1bZXRdfHxBcnJheS5pc0FycmF5KFJbWWVdW2V0XSl8fFJbWWVdW2V0XWluc3RhbmNlb2YgRGF0ZSlpZihBcnJheS5pc0FycmF5KGN0LnYp''@;'; put 'put ''JiYoY3QuZj1SW1llXVtldF1bMV0sY3Qudj1jdC52WzBdKSxudWxsPT09Y3QudilpZihjdC5mKWN0LnQ9Im4iO2Vsc2UgaWYoRy5udWxsRXJyb3IpY3QudD0iZSIsY3Qudj0wO2Vsc2V7aWYoIUcuc2hlZXRTdHVicyljb250aW51ZTtjdC50PSJ6In1lbHNlIm51bWJlciI9PXR5cGVvZiBjdC52''@;'; put 'put ''P2N0LnQ9Im4iOiJib29sZWFuIj09dHlwZW9mIGN0LnY/Y3QudD0iYiI6Y3QudiBpbnN0YW5jZW9mIERhdGU/KGN0Lno9Ry5kYXRlTkZ8fEEuX3RhYmxlWzE0XSxHLmNlbGxEYXRlcz8oY3QudD0iZCIsY3Qudz1BLmZvcm1hdChjdC56LFFlKGN0LnYpKSk6KGN0LnQ9Im4iLGN0LnY9UWUoY3Qu''@;'; put 'put ''diksY3Qudz1BLmZvcm1hdChjdC56LGN0LnYpKSk6Y3QudD0icyI7ZWxzZSBjdD1SW1llXVtldF07aWYoY3QmJmN0LmgpdHJ5e2N0LlI9bWQuaHRtbF90b19ycyhjdC5oKSxjdC52PSIiO2Zvcih2YXIgYnQ9MDtidDxjdC5SLmxlbmd0aDsrK2J0KWN0LnYrPWN0LlJbYnRdLnZ8fCIifWNhdGNo''@;'; put 'put ''e31pZihRKW9lW0V0XXx8KG9lW0V0XT1bXSksb2VbRXRdW2F0XSYmb2VbRXRdW2F0XS5zJiYoY3Qucz1vZVtFdF1bYXRdLnMpLG9lW0V0XVthdF0mJm9lW0V0XVthdF0ueiYmKGN0Lno9b2VbRXRdW2F0XS56KSxvZVtFdF1bYXRdPWN0O2Vsc2V7dmFyIGp0PXFpKHtjOmF0LHI6RXR9KTtvZVtq''@;'; put 'put ''dF0mJm9lW2p0XS5zJiYoY3Qucz1vZVtqdF0ucyksb2VbanRdJiZvZVtqdF0ueiYmKGN0Lno9b2VbanRdLnopLG9lW2p0XT1jdH19fXJldHVybiBQZS5zLmM8MWU3JiYob2VbIiFyZWYiXT1yYShQZSkpLG9lfWZ1bmN0aW9uIHA0KFMsUil7cmV0dXJuIGY0KG51bGwsUyxSKX1mdW5jdGlvbiBL''@;'; put 'put ''MChTLFIpe3JldHVybiBSfHwoUj1ibig0KSksUi53cml0ZV9zaGlmdCg0LFMpLFJ9ZnVuY3Rpb24gZ3UoUyl7dmFyIFI9Uy5yZWFkX3NoaWZ0KDQpO3JldHVybiAwPT09Uj8iIjpTLnJlYWRfc2hpZnQoUiwiZGJjcyIpfWZ1bmN0aW9uIEZjKFMsUil7dmFyIGs9ITE7cmV0dXJuIG51bGw9PVIm''@;'; put 'put ''JihrPSEwLFI9Ym4oNCsyKlMubGVuZ3RoKSksUi53cml0ZV9zaGlmdCg0LFMubGVuZ3RoKSxTLmxlbmd0aD4wJiZSLndyaXRlX3NoaWZ0KDAsUywiZGJjcyIpLGs/Ui5zbGljZSgwLFIubCk6Un1mdW5jdGlvbiBSdyhTKXtyZXR1cm57aWNoOlMucmVhZF9zaGlmdCgyKSxpZm50OlMucmVhZF9z''@;'; put 'put ''aGlmdCgyKX19ZnVuY3Rpb24gc2woUyxSKXt2YXIgaz1TLmwsRz1TLnJlYWRfc2hpZnQoMSksUT1ndShTKSxvZT1bXSxnZT17dDpRLGg6UX07aWYoMSZHKXtmb3IodmFyIHBlPVMucmVhZF9zaGlmdCg0KSx5ZT0wO3llIT1wZTsrK3llKW9lLnB1c2goUncoUykpO2dlLnI9b2V9ZWxzZSBnZS5y''@;'; put 'put ''PVt7aWNoOjAsaWZudDowfV07cmV0dXJuIFMubD1rK1IsZ2V9IWZ1bmN0aW9uKFMsUil7dmFyIGs7aWYodHlwZW9mIGNyeXB0b0Jyb3dzZXJpZnk8InUiKWs9Y3J5cHRvQnJvd3NlcmlmeTtlbHNlIGlmKHR5cGVvZiBSPCJ1IilrPVI7ZWxzZSB0cnl7az15KDkxNDI2KX1jYXRjaHtrPW51bGx9''@;'; put 'put ''Uy5yYzQ9ZnVuY3Rpb24oRyxRKXt2YXIgb2U9bmV3IEFycmF5KDI1NiksZ2U9MCxwZT0wLHllPTAsUGU9MDtmb3IocGU9MDsyNTYhPXBlOysrcGUpb2VbcGVdPXBlO2ZvcihwZT0wOzI1NiE9cGU7KytwZSl5ZT15ZStvZVtwZV0rR1twZSVHLmxlbmd0aF0uY2hhckNvZGVBdCgwKSYyNTUsUGU9''@;'; put 'put ''b2VbcGVdLG9lW3BlXT1vZVt5ZV0sb2VbeWVdPVBlO3BlPXllPTA7dmFyIE5lPVYoUS5sZW5ndGgpO2ZvcihnZT0wO2dlIT1RLmxlbmd0aDsrK2dlKVBlPW9lW3BlPXBlKzEmMjU1XSxvZVtwZV09b2VbeWU9KHllK29lW3BlXSklMjU2XSxvZVt5ZV09UGUsTmVbZ2VdPVFbZ2VdXm9lW29lW3Bl''@;'; put 'put ''XStvZVt5ZV0mMjU1XTtyZXR1cm4gTmV9LFMubWQ1PWZ1bmN0aW9uKEcpe2lmKCFrKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgY3J5cHRvIik7cmV0dXJuIGsuY3JlYXRlSGFzaCgibWQ1IikudXBkYXRlKEJ1ZmZlci5mcm9tKEcpKS5kaWdlc3QoImhleCIpfX0oWGwsdHlwZW9mIGNy''@;'; put 'put ''eXB0bzwidSI/Y3J5cHRvOnZvaWQgMCk7dmFyIEx3PXNsO2Z1bmN0aW9uIEQxKFMpe3ZhciBSPVMucmVhZF9zaGlmdCg0KSxrPVMucmVhZF9zaGlmdCgyKTtyZXR1cm4gays9Uy5yZWFkX3NoaWZ0KDEpPDwxNixTLmwrKyx7YzpSLGlTdHlsZVJlZjprfX1mdW5jdGlvbiB4cihTLFIpe3JldHVy''@;'; put 'put ''biBudWxsPT1SJiYoUj1ibig4KSksUi53cml0ZV9zaGlmdCgtNCxTLmMpLFIud3JpdGVfc2hpZnQoMyxTLmlTdHlsZVJlZnx8Uy5zKSxSLndyaXRlX3NoaWZ0KDEsMCksUn1mdW5jdGlvbiBKaChTKXt2YXIgUj1TLnJlYWRfc2hpZnQoMik7cmV0dXJuIFIrPVMucmVhZF9zaGlmdCgxKTw8MTYs''@;'; put 'put ''Uy5sKysse2M6LTEsaVN0eWxlUmVmOlJ9fWZ1bmN0aW9uIGZpKFMsUil7cmV0dXJuIG51bGw9PVImJihSPWJuKDQpKSxSLndyaXRlX3NoaWZ0KDMsUy5pU3R5bGVSZWZ8fFMucyksUi53cml0ZV9zaGlmdCgxLDApLFJ9dmFyIG81PWd1LHM1PUZjO2Z1bmN0aW9uIHQwKFMpe3ZhciBSPVMucmVh''@;'; put 'put ''ZF9zaGlmdCg0KTtyZXR1cm4gMD09PVJ8fDQyOTQ5NjcyOTU9PT1SPyIiOlMucmVhZF9zaGlmdChSLCJkYmNzIil9ZnVuY3Rpb24gcGYoUyxSKXt2YXIgaz0hMTtyZXR1cm4gbnVsbD09UiYmKGs9ITAsUj1ibigxMjcpKSxSLndyaXRlX3NoaWZ0KDQsUy5sZW5ndGg+MD9TLmxlbmd0aDo0Mjk0''@;'; put 'put ''OTY3Mjk1KSxTLmxlbmd0aD4wJiZSLndyaXRlX3NoaWZ0KDAsUywiZGJjcyIpLGs/Ui5zbGljZSgwLFIubCk6Un12YXIgbDU9Z3UsZzQ9dDAsYzU9cGY7ZnVuY3Rpb24gSTEoUyl7dmFyIFI9Uy5zbGljZShTLmwsUy5sKzQpLGs9MSZSWzBdLEc9MiZSWzBdO1MubCs9NCxSWzBdJj0yNTI7dmFy''@;'; put 'put ''IFE9MD09PUc/YW4oWzAsMCwwLDAsUlswXSxSWzFdLFJbMl0sUlszXV0sMCk6VnMoUiwwKT4+MjtyZXR1cm4gaz9RLzEwMDpRfWZ1bmN0aW9uIHV2KFMsUil7bnVsbD09UiYmKFI9Ym4oNCkpO3ZhciBrPTAsRz0wLFE9MTAwKlM7aWYoUz09KDB8UykmJlM+PS0oMTw8MjkpJiZTPDE8PDI5P0c9''@;'; put 'put ''MTpRPT0oMHxRKSYmUT49LSgxPDwyOSkmJlE8MTw8MjkmJihHPTEsaz0xKSwhRyl0aHJvdyBuZXcgRXJyb3IoInVuc3VwcG9ydGVkIFJrTnVtYmVyICIrUyk7Ui53cml0ZV9zaGlmdCgtNCwoKGs/UTpTKTw8MikrKGsrMikpfWZ1bmN0aW9uIGxkKFMpe3ZhciBSPXtzOnt9LGU6e319O3JldHVy''@;'; put 'put ''biBSLnMucj1TLnJlYWRfc2hpZnQoNCksUi5lLnI9Uy5yZWFkX3NoaWZ0KDQpLFIucy5jPVMucmVhZF9zaGlmdCg0KSxSLmUuYz1TLnJlYWRfc2hpZnQoNCksUn12YXIgbXU9bGQsZ2Y9ZnVuY3Rpb24gVDYoUyxSKXtyZXR1cm4gUnx8KFI9Ym4oMTYpKSxSLndyaXRlX3NoaWZ0KDQsUy5zLnIp''@;'; put 'put ''LFIud3JpdGVfc2hpZnQoNCxTLmUuciksUi53cml0ZV9zaGlmdCg0LFMucy5jKSxSLndyaXRlX3NoaWZ0KDQsUy5lLmMpLFJ9O2Z1bmN0aW9uIG4wKFMpe2Zvcih2YXIgUj1TLnJlYWRfc2hpZnQoNCksaz1bXSxHPTA7RzxSOysrRyl7dmFyIFE9bXUoUyk7ay5wdXNoKHJhKFEpKX1yZXR1cm4g''@;'; put 'put ''ay5qb2luKCIsIil9ZnVuY3Rpb24gUGwoUyl7aWYoUy5sZW5ndGgtUy5sPDgpdGhyb3ciWExTIFhudW0gQnVmZmVyIHVuZGVyZmxvdyI7cmV0dXJuIFMucmVhZF9zaGlmdCg4LCJmIil9ZnVuY3Rpb24gT3UoUyxSKXtyZXR1cm4oUnx8Ym4oOCkpLndyaXRlX3NoaWZ0KDgsUywiZiIpfWZ1bmN0''@;'; put 'put ''aW9uIFFoKFMpe3ZhciBSPXt9LEc9Uy5yZWFkX3NoaWZ0KDEpPj4+MSxRPVMucmVhZF9zaGlmdCgxKSxvZT1TLnJlYWRfc2hpZnQoMiwiaSIpLGdlPVMucmVhZF9zaGlmdCgxKSxwZT1TLnJlYWRfc2hpZnQoMSkseWU9Uy5yZWFkX3NoaWZ0KDEpO3N3aXRjaChTLmwrKyxHKXtjYXNlIDA6Ui5h''@;'; put 'put ''dXRvPTE7YnJlYWs7Y2FzZSAxOlIuaW5kZXg9UTt2YXIgUGU9cjBbUV07UGUmJihSLnJnYj1oZChQZSkpO2JyZWFrO2Nhc2UgMjpSLnJnYj1oZChbZ2UscGUseWVdKTticmVhaztjYXNlIDM6Ui50aGVtZT1RfXJldHVybiAwIT1vZSYmKFIudGludD1vZT4wP29lLzMyNzY3Om9lLzMyNzY4KSxS''@;'; put 'put ''fWZ1bmN0aW9uIG1mKFMsUil7aWYoUnx8KFI9Ym4oOCkpLCFTfHxTLmF1dG8pcmV0dXJuIFIud3JpdGVfc2hpZnQoNCwwKSxSLndyaXRlX3NoaWZ0KDQsMCksUjtudWxsIT1TLmluZGV4PyhSLndyaXRlX3NoaWZ0KDEsMiksUi53cml0ZV9zaGlmdCgxLFMuaW5kZXgpKTpudWxsIT1TLnRoZW1l''@;'; put 'put ''PyhSLndyaXRlX3NoaWZ0KDEsNiksUi53cml0ZV9zaGlmdCgxLFMudGhlbWUpKTooUi53cml0ZV9zaGlmdCgxLDUpLFIud3JpdGVfc2hpZnQoMSwwKSk7dmFyIGs9Uy50aW50fHwwO2lmKGs+MD9rKj0zMjc2NzprPDAmJihrKj0zMjc2OCksUi53cml0ZV9zaGlmdCgyLGspLFMucmdiJiZudWxs''@;'; put 'put ''PT1TLnRoZW1lKXt2YXIgRz1TLnJnYnx8IkZGRkZGRiI7Im51bWJlciI9PXR5cGVvZiBHJiYoRz0oIjAwMDAwMCIrRy50b1N0cmluZygxNikpLnNsaWNlKC02KSksUi53cml0ZV9zaGlmdCgxLHBhcnNlSW50KEcuc2xpY2UoMCwyKSwxNikpLFIud3JpdGVfc2hpZnQoMSxwYXJzZUludChHLnNs''@;'; put 'put ''aWNlKDIsNCksMTYpKSxSLndyaXRlX3NoaWZ0KDEscGFyc2VJbnQoRy5zbGljZSg0LDYpLDE2KSksUi53cml0ZV9zaGlmdCgxLDI1NSl9ZWxzZSBSLndyaXRlX3NoaWZ0KDIsMCksUi53cml0ZV9zaGlmdCgxLDApLFIud3JpdGVfc2hpZnQoMSwwKTtyZXR1cm4gUn1mdW5jdGlvbiBPdyhTKXt2''@;'; put 'put ''YXIgUj1TLnJlYWRfc2hpZnQoMSk7cmV0dXJuIFMubCsrLHtmQm9sZDoxJlIsZkl0YWxpYzoyJlIsZlVuZGVybGluZTo0JlIsZlN0cmlrZW91dDo4JlIsZk91dGxpbmU6MTYmUixmU2hhZG93OjMyJlIsZkNvbmRlbnNlOjY0JlIsZkV4dGVuZDoxMjgmUn19ZnVuY3Rpb24gUHcoUyxSKXt2YXIg''@;'; put 'put ''Rz1TLnJlYWRfc2hpZnQoNCk7c3dpdGNoKEcpe2Nhc2UgMDpyZXR1cm4iIjtjYXNlIDQyOTQ5NjcyOTU6Y2FzZSA0Mjk0OTY3Mjk0OnJldHVybnsyOiJCSVRNQVAiLDM6Ik1FVEFGSUxFUElDVCIsODoiRElCIiwxNDoiRU5ITUVUQUZJTEUifVtTLnJlYWRfc2hpZnQoNCldfHwiIn1pZihHPjQw''@;'; put 'put ''MCl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIENsaXBib2FyZDogIitHLnRvU3RyaW5nKDE2KSk7cmV0dXJuIFMubC09NCxTLnJlYWRfc2hpZnQoMCwxPT1SPyJscHN0ciI6Imxwd3N0ciIpfXZhciBlMj0yLEpsPTMsSTA9MTIsTm49ODEsRnc9WzgwLE5uXSxtND17MTp7bjoiQ29kZVBh''@;'; put 'put ''Z2UiLHQ6ZTJ9LDI6e246IkNhdGVnb3J5Iix0OjgwfSwzOntuOiJQcmVzZW50YXRpb25Gb3JtYXQiLHQ6ODB9LDQ6e246IkJ5dGVDb3VudCIsdDpKbH0sNTp7bjoiTGluZUNvdW50Iix0OkpsfSw2OntuOiJQYXJhZ3JhcGhDb3VudCIsdDpKbH0sNzp7bjoiU2xpZGVDb3VudCIsdDpKbH0sODp7''@;'; put 'put ''bjoiTm90ZUNvdW50Iix0OkpsfSw5OntuOiJIaWRkZW5Db3VudCIsdDpKbH0sMTA6e246Ik11bHRpbWVkaWFDbGlwQ291bnQiLHQ6Smx9LDExOntuOiJTY2FsZUNyb3AiLHQ6MTF9LDEyOntuOiJIZWFkaW5nUGFpcnMiLHQ6NDA5NnxJMH0sMTM6e246IlRpdGxlc09mUGFydHMiLHQ6NDEyNn0s''@;'; put 'put ''MTQ6e246Ik1hbmFnZXIiLHQ6ODB9LDE1OntuOiJDb21wYW55Iix0OjgwfSwxNjp7bjoiTGlua3NVcFRvRGF0ZSIsdDoxMX0sMTc6e246IkNoYXJhY3RlckNvdW50Iix0OkpsfSwxOTp7bjoiU2hhcmVkRG9jIix0OjExfSwyMjp7bjoiSHlwZXJsaW5rc0NoYW5nZWQiLHQ6MTF9LDIzOntuOiJB''@;'; put 'put ''cHBWZXJzaW9uIix0OkpsLHA6InZlcnNpb24ifSwyNDp7bjoiRGlnU2lnIix0OjY1fSwyNjp7bjoiQ29udGVudFR5cGUiLHQ6ODB9LDI3OntuOiJDb250ZW50U3RhdHVzIix0OjgwfSwyODp7bjoiTGFuZ3VhZ2UiLHQ6ODB9LDI5OntuOiJWZXJzaW9uIix0OjgwfSwyNTU6e30sMjE0NzQ4MzY0''@;'; put 'put ''ODp7bjoiTG9jYWxlIix0OjE5fSwyMTQ3NDgzNjUxOntuOiJCZWhhdmlvciIsdDoxOX0sMTkxOTA1NDQzNDp7fX0sZDU9ezE6e246IkNvZGVQYWdlIix0OmUyfSwyOntuOiJUaXRsZSIsdDo4MH0sMzp7bjoiU3ViamVjdCIsdDo4MH0sNDp7bjoiQXV0aG9yIix0OjgwfSw1OntuOiJLZXl3b3Jk''@;'; put 'put ''cyIsdDo4MH0sNjp7bjoiQ29tbWVudHMiLHQ6ODB9LDc6e246IlRlbXBsYXRlIix0OjgwfSw4OntuOiJMYXN0QXV0aG9yIix0OjgwfSw5OntuOiJSZXZOdW1iZXIiLHQ6ODB9LDEwOntuOiJFZGl0VGltZSIsdDo2NH0sMTE6e246Ikxhc3RQcmludGVkIix0OjY0fSwxMjp7bjoiQ3JlYXRlZERh''@;'; put 'put ''dGUiLHQ6NjR9LDEzOntuOiJNb2RpZmllZERhdGUiLHQ6NjR9LDE0OntuOiJQYWdlQ291bnQiLHQ6Smx9LDE1OntuOiJXb3JkQ291bnQiLHQ6Smx9LDE2OntuOiJDaGFyQ291bnQiLHQ6Smx9LDE3OntuOiJUaHVtYm5haWwiLHQ6NzF9LDE4OntuOiJBcHBsaWNhdGlvbiIsdDo4MH0sMTk6e246''@;'; put 'put ''IkRvY1NlY3VyaXR5Iix0OkpsfSwyNTU6e30sMjE0NzQ4MzY0ODp7bjoiTG9jYWxlIix0OjE5fSwyMTQ3NDgzNjUxOntuOiJCZWhhdmlvciIsdDoxOX0sMTkxOTA1NDQzNDp7fX0saDU9SWUobTQsIm4iKSx2Zj1JZShkNSwibiIpLEQ2PXsxOiJVUyIsMjoiQ0EiLDM6IiIsNzoiUlUiLDIwOiJF''@;'; put 'put ''RyIsMzA6IkdSIiwzMToiTkwiLDMyOiJCRSIsMzM6IkZSIiwzNDoiRVMiLDM2OiJIVSIsMzk6IklUIiw0MToiQ0giLDQzOiJBVCIsNDQ6IkdCIiw0NToiREsiLDQ2OiJTRSIsNDc6Ik5PIiw0ODoiUEwiLDQ5OiJERSIsNTI6Ik1YIiw1NToiQlIiLDYxOiJBVSIsNjQ6Ik5aIiw2NjoiVEgiLDgx''@;'; put 'put ''OiJKUCIsODI6IktSIiw4NDoiVk4iLDg2OiJDTiIsOTA6IlRSIiwxMDU6IkpTIiwyMTM6IkRaIiwyMTY6Ik1BIiwyMTg6IkxZIiwzNTE6IlBUIiwzNTQ6IklTIiwzNTg6IkZJIiw0MjA6IkNaIiw4ODY6IlRXIiw5NjE6IkxCIiw5NjI6IkpPIiw5NjM6IlNZIiw5NjQ6IklRIiw5NjU6IktXIiw5''@;'; put 'put ''NjY6IlNBIiw5NzE6IkFFIiw5NzI6IklMIiw5NzQ6IlFBIiw5ODE6IklSIiw2NTUzNToiVVMifSxodj1bbnVsbCwic29saWQiLCJtZWRpdW1HcmF5IiwiZGFya0dyYXkiLCJsaWdodEdyYXkiLCJkYXJrSG9yaXpvbnRhbCIsImRhcmtWZXJ0aWNhbCIsImRhcmtEb3duIiwiZGFya1VwIiwiZGFy''@;'; put 'put ''a0dyaWQiLCJkYXJrVHJlbGxpcyIsImxpZ2h0SG9yaXpvbnRhbCIsImxpZ2h0VmVydGljYWwiLCJsaWdodERvd24iLCJsaWdodFVwIiwibGlnaHRHcmlkIiwibGlnaHRUcmVsbGlzIiwiZ3JheTEyNSIsImdyYXkwNjI1Il07ZnVuY3Rpb24gSTYoUyl7cmV0dXJuIFMubWFwKGZ1bmN0aW9uKFIp''@;'; put 'put ''e3JldHVybltSPj4xNiYyNTUsUj4+OCYyNTUsMjU1JlJdfSl9dmFyIHY0PUk2KFswLDE2Nzc3MjE1LDE2NzExNjgwLDY1MjgwLDI1NSwxNjc3Njk2MCwxNjcxMTkzNSw2NTUzNSwwLDE2Nzc3MjE1LDE2NzExNjgwLDY1MjgwLDI1NSwxNjc3Njk2MCwxNjcxMTkzNSw2NTUzNSw4Mzg4NjA4LDMy''@;'; put 'put ''NzY4LDEyOCw4NDIxMzc2LDgzODg3MzYsMzI4OTYsMTI2MzIyNTYsODQyMTUwNCwxMDA2NjQzMSwxMDA0MDE2NiwxNjc3NzE2NCwxMzQzNDg3OSw2Njg0Nzc0LDE2NzQ0NTc2LDI2MzE2LDEzNDIxODIzLDEyOCwxNjcxMTkzNSwxNjc3Njk2MCw2NTUzNSw4Mzg4NzM2LDgzODg2MDgsMzI4OTYs''@;'; put 'put ''MjU1LDUyNDc5LDEzNDM0ODc5LDEzNDM0ODI4LDE2Nzc3MTEzLDEwMDc5NDg3LDE2NzUxMDUyLDEzNDA4NzY3LDE2NzY0MDU3LDMzNjg3MDMsMzM5NDc2NCwxMDA3OTIzMiwxNjc2MzkwNCwxNjc1MDg0OCwxNjczNzc5Miw2NzEwOTM3LDk4Njg5NTAsMTMxNTgsMzM4MTYwNiwxMzA1NiwzMzU1''@;'; put 'put ''MzkyLDEwMDQwMDY0LDEwMDQwMTY2LDMzNTU1NDUsMzM1NTQ0MywwLDE2Nzc3MjE1LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDBdKSxyMD1xdCh2NCksSHc9STYoWzEyNjMyMjU2LDk4Njg5NTAsODQyMTUwNCw2NzEwODg2LDMzNTU0NDMsMTY3MTE2ODAsMzI3NjgsMTMzNjk0OTcs''@;'; put 'put ''MTI4LDMzOTQ1NjAsMjYzNjcsMTAwMjcyMTIsMTAwNTMxNzEsMTI4LDMyNzY4LDgzODg2MDgsMzI4OTYsODM4ODczNiw4NDIxMzc2LDEzNjMxNDg4LDE0NTM5OTk0LDEzMDY4ODUwLDEzOTI0MzUyLDk5Njc0OTYsOTE3NTI2Nyw5MTk1MDA4LDM2ODM1MzcsMTA2OTI1OCw4ODgwODk5LDc0OTQ2''@;'; put 'put ''NCwyODkzNDc2LDExNzQ1NzMwLDM3NTAyMDEsMTU1NTk1MDMsMTgzNzk0MSwxMjA4NDM1OSw3NjMyMjUwLDczNjMzMjgsOTUxNDU4OCw4Mjg4NjE3LDMwMzY4MTQsMTExODQ4MTBdKSxNYz17MDoiI05VTEwhIiw3OiIjRElWLzAhIiwxNToiI1ZBTFVFISIsMjM6IiNSRUYhIiwyOToiI05BTUU/''@;'; put 'put ''IiwzNjoiI05VTSEiLDQyOiIjTi9BIiw0MzoiI0dFVFRJTkdfREFUQSIsMjU1OiIjV1RGPyJ9LFAzPWtlKE1jKSxiND17ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0Lm1haW4reG1sIjoid29ya2Jvb2tzIiwiYXBwbGlj''@;'; put 'put ''YXRpb24vdm5kLm1zLWV4Y2VsLmJpbkluZGV4V3MiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmludGxtYWNyb3NoZWV0IjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5iaW5JbmRleE1zIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1w''@;'; put 'put ''YWNrYWdlLmNvcmUtcHJvcGVydGllcyt4bWwiOiJjb3JlcHJvcHMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuY3VzdG9tLXByb3BlcnRpZXMreG1sIjoiY3VzdHByb3BzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3Vt''@;'; put 'put ''ZW50LmV4dGVuZGVkLXByb3BlcnRpZXMreG1sIjoiZXh0cHJvcHMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuY3VzdG9tWG1sUHJvcGVydGllcyt4bWwiOiJjdXN0b214bWxwcm9wcyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZp''@;'; put 'put ''Y2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLmN1c3RvbVByb3BlcnR5IjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5waXZvdFRhYmxlIjoicGl2b3RzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwucGl2b3RUYWJs''@;'; put 'put ''ZSt4bWwiOiJwaXZvdHMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuZHJhd2luZ21sLmNoYXJ0K3htbCI6ImNoYXJ0b2JqcyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1vZmZpY2UuY2hhcnRjb2xvcnN0eWxlK3htbCI6ImNoYXJ0Y29sb3JzIiwiYXBwbGlj''@;'; put 'put ''YXRpb24vdm5kLm1zLW9mZmljZS5jaGFydHN0eWxlK3htbCI6ImNoYXJ0c3R5bGVzIiwiYXBwbGljYXRpb24vdm5kLm1zLW9mZmljZS5jaGFydGV4K3htbCI6ImNoYXJ0ZXhzIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmNhbGNDaGFpbiI6ImNhbGNjaGFpbnMiLCJhcHBsaWNhdGlvbi92''@;'; put 'put ''bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5jYWxjQ2hhaW4reG1sIjoiY2FsY2NoYWlucyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnByaW50ZXJTZXR0aW5ncyI6IlRPRE8iLCJhcHBs''@;'; put 'put ''aWNhdGlvbi92bmQubXMtb2ZmaWNlLmFjdGl2ZVgiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLW9mZmljZS5hY3RpdmVYK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuYXR0YWNoZWRUb29sYmFycyI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuY29u''@;'; put 'put ''bmVjdGlvbnMiOiJjb25ucyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLmNvbm5lY3Rpb25zK3htbCI6ImNvbm5zIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmV4dGVybmFsTGluayI6ImxpbmtzIiwiYXBwbGljYXRpb24v''@;'; put 'put ''dm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuZXh0ZXJuYWxMaW5rK3htbCI6ImxpbmtzIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnNoZWV0TWV0YWRhdGEiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3Vt''@;'; put 'put ''ZW50LnNwcmVhZHNoZWV0bWwuc2hlZXRNZXRhZGF0YSt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnBpdm90Q2FjaGVEZWZpbml0aW9uIjoicGl2b3RjYWNoZXMiLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwucGl2b3RDYWNoZVJlY29yZHMiOiJwaXZvdHJlY29yZHMi''@;'; put 'put ''LCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5waXZvdENhY2hlRGVmaW5pdGlvbit4bWwiOiJwaXZvdGNhY2hlcyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnBp''@;'; put 'put ''dm90Q2FjaGVSZWNvcmRzK3htbCI6InBpdm90cmVjb3JkcyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5xdWVyeVRhYmxlIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnF1ZXJ5VGFibGUreG1sIjoiVE9ETyIs''@;'; put 'put ''ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC51c2VyTmFtZXMiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnJldmlzaW9uSGVhZGVycyI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwucmV2aXNpb25Mb2ciOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxm''@;'; put 'put ''b3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwucmV2aXNpb25IZWFkZXJzK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5yZXZpc2lvbkxvZyt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5k''@;'; put 'put ''Lm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwudXNlck5hbWVzK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwudGFibGVTaW5nbGVDZWxscyI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQu''@;'; put 'put ''c3ByZWFkc2hlZXRtbC50YWJsZVNpbmdsZUNlbGxzK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuc2xpY2VyIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5zbGljZXJDYWNoZSI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuc2xpY2VyK3ht''@;'; put 'put ''bCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuc2xpY2VyQ2FjaGUreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC53c1NvcnRNYXAiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnRhYmxlIjoidGFibGVzIiwiYXBwbGljYXRpb24vdm5kLm9w''@;'; put 'put ''ZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwudGFibGUreG1sIjoidGFibGVzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnRoZW1lK3htbCI6InRoZW1lcyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZp''@;'; put 'put ''Y2Vkb2N1bWVudC50aGVtZU92ZXJyaWRlK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuVGltZWxpbmUreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5UaW1lbGluZUNhY2hlK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtb2ZmaWNlLnZi''@;'; put 'put ''YVByb2plY3QiOiJ2YmEiLCJhcHBsaWNhdGlvbi92bmQubXMtb2ZmaWNlLnZiYVByb2plY3RTaWduYXR1cmUiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLW9mZmljZS52b2xhdGlsZURlcGVuZGVuY2llcyI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNl''@;'; put 'put ''ZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC52b2xhdGlsZURlcGVuZGVuY2llcyt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmNvbnRyb2xwcm9wZXJ0aWVzK3htbCI6ImN0cmxwcm9wcyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5t''@;'; put 'put ''b2RlbCtkYXRhIjoiZGF0YW1vZGVscyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5TdXJ2ZXkreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5kcmF3aW5nK3htbCI6ImRyYXdpbmdzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxm''@;'; put 'put ''b3JtYXRzLW9mZmljZWRvY3VtZW50LmRyYXdpbmdtbC5jaGFydHNoYXBlcyt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LmRyYXdpbmdtbC5kaWFncmFtQ29sb3JzK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZv''@;'; put 'put ''cm1hdHMtb2ZmaWNlZG9jdW1lbnQuZHJhd2luZ21sLmRpYWdyYW1EYXRhK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuZHJhd2luZ21sLmRpYWdyYW1MYXlvdXQreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9y''@;'; put 'put ''bWF0cy1vZmZpY2Vkb2N1bWVudC5kcmF3aW5nbWwuZGlhZ3JhbVN0eWxlK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQudm1sRHJhd2luZyI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtcGFja2FnZS5yZWxh''@;'; put 'put ''dGlvbnNoaXBzK3htbCI6InJlbHMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQub2xlT2JqZWN0IjoiVE9ETyIsImltYWdlL3BuZyI6IlRPRE8iLHNoZWV0OiJqcyJ9LGZ2PWZ1bmN0aW9uKCl7dmFyIFM9e3dvcmtib29rczp7eGxzeDoiYXBwbGljYXRp''@;'; put 'put ''b24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQubWFpbit4bWwiLHhsc206ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5zaGVldC5tYWNyb0VuYWJsZWQubWFpbit4bWwiLHhsc2I6ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5zaGVldC5i''@;'; put 'put ''aW5hcnkubWFjcm9FbmFibGVkLm1haW4iLHhsYW06ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5hZGRpbi5tYWNyb0VuYWJsZWQubWFpbit4bWwiLHhsdHg6ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnRlbXBsYXRlLm1haW4r''@;'; put 'put ''eG1sIn0sc3Ryczp7eGxzeDoiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hhcmVkU3RyaW5ncyt4bWwiLHhsc2I6ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5zaGFyZWRTdHJpbmdzIn0sY29tbWVudHM6e3hsc3g6ImFwcGxp''@;'; put 'put ''Y2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLmNvbW1lbnRzK3htbCIseGxzYjoiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmNvbW1lbnRzIn0sc2hlZXRzOnt4bHN4OiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9j''@;'; put 'put ''dW1lbnQuc3ByZWFkc2hlZXRtbC53b3Jrc2hlZXQreG1sIix4bHNiOiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwud29ya3NoZWV0In0sY2hhcnRzOnt4bHN4OiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5jaGFydHNoZWV0K3ht''@;'; put 'put ''bCIseGxzYjoiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmNoYXJ0c2hlZXQifSxkaWFsb2dzOnt4bHN4OiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5kaWFsb2dzaGVldCt4bWwiLHhsc2I6ImFwcGxpY2F0aW9uL3ZuZC5tcy1l''@;'; put 'put ''eGNlbC5kaWFsb2dzaGVldCJ9LG1hY3Jvczp7eGxzeDoiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLm1hY3Jvc2hlZXQreG1sIix4bHNiOiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwubWFjcm9zaGVldCJ9LHRhYmxlczp7eGxzeDoiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9m''@;'; put 'put ''ZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwudGFibGUreG1sIix4bHNiOiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwudGFibGUifSxwaXZvdHM6e3hsc3g6ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnBpdm90VGFibGUreG1s''@;'; put 'put ''Iix4bHNiOiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwucGl2b3RUYWJsZSJ9LHBpdm90Y2FjaGVzOnt4bHN4OiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5waXZvdENhY2hlRGVmaW5pdGlvbit4bWwiLHhsc2I6ImFwcGxpY2F0''@;'; put 'put ''aW9uL3ZuZC5tcy1leGNlbC5waXZvdENhY2hlRGVmaW5pdGlvbiJ9LHBpdm90cmVjb3Jkczp7eGxzeDoiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwucGl2b3RDYWNoZVJlY29yZHMreG1sIix4bHNiOiJhcHBsaWNhdGlvbi92bmQu''@;'; put 'put ''bXMtZXhjZWwucGl2b3RDYWNoZVJlY29yZHMifSxjb25uczp7eGxzeDoiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuY29ubmVjdGlvbnMreG1sIix4bHNiOiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuY29ubmVjdGlvbnMifSxs''@;'; put 'put ''aW5rczp7eGxzeDoiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuZXh0ZXJuYWxMaW5rK3htbCIseGxzYjoiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmV4dGVybmFsTGluayJ9LHN0eWxlczp7eGxzeDoiYXBwbGljYXRpb24vdm5k''@;'; put 'put ''Lm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc3R5bGVzK3htbCIseGxzYjoiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnN0eWxlcyJ9fTtyZXR1cm4gT2UoUykuZm9yRWFjaChmdW5jdGlvbihSKXtbInhsc20iLCJ4bGFtIl0uZm9yRWFjaChmdW5jdGlvbihr''@;'; put 'put ''KXtTW1JdW2tdfHwoU1tSXVtrXT1TW1JdLnhsc3gpfSl9KSxPZShTKS5mb3JFYWNoKGZ1bmN0aW9uKFIpe09lKFNbUl0pLmZvckVhY2goZnVuY3Rpb24oayl7YjRbU1tSXVtrXV09Un0pfSksU30oKSxwdj1mdW5jdGlvbiBBZShTKXtmb3IodmFyIFI9W10saz1PZShTKSxHPTA7RyE9PWsubGVu''@;'; put 'put ''Z3RoOysrRyludWxsPT1SW1Nba1tHXV1dJiYoUltTW2tbR11dXT1bXSksUltTW2tbR11dXS5wdXNoKGtbR10pO3JldHVybiBSfShiNCk7WWkuQ1Q9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9wYWNrYWdlLzIwMDYvY29udGVudC10eXBlcyI7dmFyIG12PVByKCJUeXBlcyIs''@;'; put 'put ''bnVsbCx7eG1sbnM6WWkuQ1QsInhtbG5zOnhzZCI6WWkueHNkLCJ4bWxuczp4c2kiOllpLnhzaX0pLFZ3PVtbInhtbCIsImFwcGxpY2F0aW9uL3htbCJdLFsiYmluIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnNoZWV0LmJpbmFyeS5tYWNyb0VuYWJsZWQubWFpbiJdLFsidm1sIiwiYXBw''@;'; put 'put ''bGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnZtbERyYXdpbmciXSxbImRhdGEiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQubW9kZWwrZGF0YSJdLFsiYm1wIiwiaW1hZ2UvYm1wIl0sWyJwbmciLCJpbWFnZS9wbmciXSxb''@;'; put 'put ''ImdpZiIsImltYWdlL2dpZiJdLFsiZW1mIiwiaW1hZ2UveC1lbWYiXSxbIndtZiIsImltYWdlL3gtd21mIl0sWyJqcGciLCJpbWFnZS9qcGVnIl0sWyJqcGVnIiwiaW1hZ2UvanBlZyJdLFsidGlmIiwiaW1hZ2UvdGlmZiJdLFsidGlmZiIsImltYWdlL3RpZmYiXSxbInBkZiIsImFwcGxpY2F0''@;'; put 'put ''aW9uL3BkZiJdLFsicmVscyIscHYucmVsc1swXV1dLm1hcChmdW5jdGlvbihTKXtyZXR1cm4gUHIoIkRlZmF1bHQiLG51bGwse0V4dGVuc2lvbjpTWzBdLENvbnRlbnRUeXBlOlNbMV19KX0pLEthPXtXQjoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50''@;'; put 'put ''LzIwMDYvcmVsYXRpb25zaGlwcy9vZmZpY2VEb2N1bWVudCIsU0hFRVQ6Imh0dHA6Ly9zaGVldGpzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvb2ZmaWNlRG9jdW1lbnQiLEhMSU5LOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5v''@;'; put 'put ''cmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2h5cGVybGluayIsVk1MOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL3ZtbERyYXdpbmciLFhQQVRIOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9y''@;'; put 'put ''bWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2V4dGVybmFsTGlua1BhdGgiLFhNSVNTOiJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS8yMDA2L3JlbGF0aW9uc2hpcHMveGxFeHRlcm5hbExpbmtQYXRoL3hsUGF0aE1pc3NpbmciLFhMSU5LOiJo''@;'; put 'put ''dHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2V4dGVybmFsTGluayIsQ1hNTDoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9jdXN0b21YbWwi''@;'; put 'put ''LENYTUxQOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2N1c3RvbVhtbFByb3BzIixWQkE6Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlLzIwMDYvcmVsYXRpb25zaGlwcy92YmFQcm9qZWN0In07''@;'; put 'put ''ZnVuY3Rpb24gVnIoUyl7dmFyIFI9Uy5sYXN0SW5kZXhPZigiLyIpO3JldHVybiBTLnNsaWNlKDAsUisxKSsiX3JlbHMvIitTLnNsaWNlKFIrMSkrIi5yZWxzIn1mdW5jdGlvbiBiZihTLFIpe3ZhciBrPXsiIWlkIjp7fX07aWYoIVMpcmV0dXJuIGs7Ii8iIT09Ui5jaGFyQXQoMCkmJihSPSIv''@;'; put 'put ''IitSKTt2YXIgRz17fTtyZXR1cm4oUy5tYXRjaChlbil8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKFEpe3ZhciBvZT12cihRKTtpZigiPFJlbGF0aW9uc2hpcCI9PT1vZVswXSl7dmFyIGdlPXt9O2dlLlR5cGU9b2UuVHlwZSxnZS5UYXJnZXQ9b2UuVGFyZ2V0LGdlLklkPW9lLklkLGdlLlRhcmdl''@;'; put 'put ''dE1vZGU9b2UuVGFyZ2V0TW9kZTt2YXIgcGU9IkV4dGVybmFsIj09PW9lLlRhcmdldE1vZGU/b2UuVGFyZ2V0OmZuKG9lLlRhcmdldCxSKTtrW3BlXT1nZSxHW29lLklkXT1nZX19KSxrWyIhaWQiXT1HLGt9WWkuUkVMUz0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL3BhY2th''@;'; put 'put ''Z2UvMjAwNi9yZWxhdGlvbnNoaXBzIjt2YXIgZjU9UHIoIlJlbGF0aW9uc2hpcHMiLG51bGwse3htbG5zOllpLlJFTFN9KTtmdW5jdGlvbiBraShTKXt2YXIgUj1bSWksZjVdO3JldHVybiBPZShTWyIhaWQiXSkuZm9yRWFjaChmdW5jdGlvbihrKXtSW1IubGVuZ3RoXT1QcigiUmVsYXRpb25z''@;'; put 'put ''aGlwIixudWxsLFNbIiFpZCJdW2tdKX0pLFIubGVuZ3RoPjImJihSW1IubGVuZ3RoXT0iPC9SZWxhdGlvbnNoaXBzPiIsUlsxXT1SWzFdLnJlcGxhY2UoIi8+IiwiPiIpKSxSLmpvaW4oIiIpfXZhciB5ND1bS2EuSExJTkssS2EuWFBBVEgsS2EuWE1JU1NdO2Z1bmN0aW9uIEVyKFMsUixrLEcs''@;'; put 'put ''USxvZSl7aWYoUXx8KFE9e30pLFNbIiFpZCJdfHwoU1siIWlkIl09e30pLFI8MClmb3IoUj0xO1NbIiFpZCJdWyJySWQiK1JdOysrUik7aWYoUS5JZD0icklkIitSLFEuVHlwZT1HLFEuVGFyZ2V0PWssb2U/US5UYXJnZXRNb2RlPW9lOnk0LmluZGV4T2YoUS5UeXBlKT4tMSYmKFEuVGFyZ2V0''@;'; put 'put ''TW9kZT0iRXh0ZXJuYWwiKSxTWyIhaWQiXVtRLklkXSl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCByZXdyaXRlIHJJZCAiK1IpO3JldHVybiBTWyIhaWQiXVtRLklkXT1RLFNbKCIvIitRLlRhcmdldCkucmVwbGFjZSgiLy8iLCIvIildPVEsUn12YXIgbGw9ImFwcGxpY2F0aW9uL3ZuZC5vYXNp''@;'; put 'put ''cy5vcGVuZG9jdW1lbnQuc3ByZWFkc2hlZXQiO2Z1bmN0aW9uIGV1KFMsUixrKXtyZXR1cm5bJyAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IicrUysnIj5cbicsJyAgICA8cmRmOnR5cGUgcmRmOnJlc291cmNlPSJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vZmZpY2UvMS4y''@;'; put 'put ''L21ldGEvJysoa3x8Im9kZiIpKyIjIitSKyciLz5cbicsIiAgPC9yZGY6RGVzY3JpcHRpb24+XG4iXS5qb2luKCIiKX1mdW5jdGlvbiBuMihTLFIpe3JldHVyblsnICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iJytTKyciPlxuJywnICAgIDxuczA6aGFzUGFydCB4bWxuczpuczA9Imh0''@;'; put 'put ''dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29mZmljZS8xLjIvbWV0YS9wa2cjIiByZGY6cmVzb3VyY2U9IicrUisnIi8+XG4nLCIgIDwvcmRmOkRlc2NyaXB0aW9uPlxuIl0uam9pbigiIil9dmFyIFI2PWZ1bmN0aW9uKCl7dmFyIFM9JzxvZmZpY2U6ZG9jdW1lbnQtbWV0YSB4bWxuczpv''@;'; put 'put ''ZmZpY2U9InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6b2ZmaWNlOjEuMCIgeG1sbnM6bWV0YT0idXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczptZXRhOjEuMCIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxu''@;'; put 'put ''czp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgb2ZmaWNlOnZlcnNpb249IjEuMiI+PG9mZmljZTptZXRhPjxtZXRhOmdlbmVyYXRvcj5TaGVldEpTICcrdy52ZXJzaW9uKyI8L21ldGE6Z2VuZXJhdG9yPjwvb2ZmaWNlOm1ldGE+PC9vZmZpY2U6ZG9jdW1lbnQtbWV0YT4i''@;'; put 'put ''O3JldHVybiBmdW5jdGlvbigpe3JldHVybiBTfX0oKSxSMD1bWyJjcDpjYXRlZ29yeSIsIkNhdGVnb3J5Il0sWyJjcDpjb250ZW50U3RhdHVzIiwiQ29udGVudFN0YXR1cyJdLFsiY3A6a2V5d29yZHMiLCJLZXl3b3JkcyJdLFsiY3A6bGFzdE1vZGlmaWVkQnkiLCJMYXN0QXV0aG9yIl0sWyJj''@;'; put 'put ''cDpsYXN0UHJpbnRlZCIsIkxhc3RQcmludGVkIl0sWyJjcDpyZXZpc2lvbiIsIlJldk51bWJlciJdLFsiY3A6dmVyc2lvbiIsIlZlcnNpb24iXSxbImRjOmNyZWF0b3IiLCJBdXRob3IiXSxbImRjOmRlc2NyaXB0aW9uIiwiQ29tbWVudHMiXSxbImRjOmlkZW50aWZpZXIiLCJJZGVudGlmaWVy''@;'; put 'put ''Il0sWyJkYzpsYW5ndWFnZSIsIkxhbmd1YWdlIl0sWyJkYzpzdWJqZWN0IiwiU3ViamVjdCJdLFsiZGM6dGl0bGUiLCJUaXRsZSJdLFsiZGN0ZXJtczpjcmVhdGVkIiwiQ3JlYXRlZERhdGUiLCJkYXRlIl0sWyJkY3Rlcm1zOm1vZGlmaWVkIiwiTW9kaWZpZWREYXRlIiwiZGF0ZSJdXTtZaS5D''@;'; put 'put ''T1JFX1BST1BTPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvcGFja2FnZS8yMDA2L21ldGFkYXRhL2NvcmUtcHJvcGVydGllcyIsS2EuQ09SRV9QUk9QUz0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL3BhY2thZ2UvMjAwNi9yZWxhdGlvbnNoaXBzL21ldGFk''@;'; put 'put ''YXRhL2NvcmUtcHJvcGVydGllcyI7dmFyIHA1PWZ1bmN0aW9uKCl7Zm9yKHZhciBTPW5ldyBBcnJheShSMC5sZW5ndGgpLFI9MDtSPFIwLmxlbmd0aDsrK1Ipe3ZhciBrPVIwW1JdLEc9Iig/OiIra1swXS5zbGljZSgwLGtbMF0uaW5kZXhPZigiOiIpKSsiOikiK2tbMF0uc2xpY2Uoa1swXS5p''@;'; put 'put ''bmRleE9mKCI6IikrMSk7U1tSXT1uZXcgUmVnRXhwKCI8IitHKyJbXj5dKj4oW1xcc1xcU10qPyk8LyIrRysiPiIpfXJldHVybiBTfSgpO2Z1bmN0aW9uIHZ2KFMpe3ZhciBSPXt9O1M9Z28oUyk7Zm9yKHZhciBrPTA7azxSMC5sZW5ndGg7KytrKXt2YXIgRz1SMFtrXSxRPVMubWF0Y2gocDVb''@;'; put 'put ''a10pO251bGwhPVEmJlEubGVuZ3RoPjAmJihSW0dbMV1dPVFyKFFbMV0pKSwiZGF0ZSI9PT1HWzJdJiZSW0dbMV1dJiYoUltHWzFdXT1IZShSW0dbMV1dKSl9cmV0dXJuIFJ9dmFyIGp3PVByKCJjcDpjb3JlUHJvcGVydGllcyIsbnVsbCx7InhtbG5zOmNwIjpZaS5DT1JFX1BST1BTLCJ4bWxu''@;'; put 'put ''czpkYyI6WWkuZGMsInhtbG5zOmRjdGVybXMiOllpLmRjdGVybXMsInhtbG5zOmRjbWl0eXBlIjpZaS5kY21pdHlwZSwieG1sbnM6eHNpIjpZaS54c2l9KTtmdW5jdGlvbiB5ZihTLFIsayxHLFEpe251bGwhPVFbU118fG51bGw9PVJ8fCIiPT09Unx8KFFbU109UixSPUxyKFIpLEdbRy5sZW5n''@;'; put 'put ''dGhdPWs/UHIoUyxSLGspOkhhKFMsUikpfXZhciByaD1bWyJBcHBsaWNhdGlvbiIsIkFwcGxpY2F0aW9uIiwic3RyaW5nIl0sWyJBcHBWZXJzaW9uIiwiQXBwVmVyc2lvbiIsInN0cmluZyJdLFsiQ29tcGFueSIsIkNvbXBhbnkiLCJzdHJpbmciXSxbIkRvY1NlY3VyaXR5IiwiRG9jU2VjdXJp''@;'; put 'put ''dHkiLCJzdHJpbmciXSxbIk1hbmFnZXIiLCJNYW5hZ2VyIiwic3RyaW5nIl0sWyJIeXBlcmxpbmtzQ2hhbmdlZCIsIkh5cGVybGlua3NDaGFuZ2VkIiwiYm9vbCJdLFsiU2hhcmVkRG9jIiwiU2hhcmVkRG9jIiwiYm9vbCJdLFsiTGlua3NVcFRvRGF0ZSIsIkxpbmtzVXBUb0RhdGUiLCJib29s''@;'; put 'put ''Il0sWyJTY2FsZUNyb3AiLCJTY2FsZUNyb3AiLCJib29sIl0sWyJIZWFkaW5nUGFpcnMiLCJIZWFkaW5nUGFpcnMiLCJyYXciXSxbIlRpdGxlc09mUGFydHMiLCJUaXRsZXNPZlBhcnRzIiwicmF3Il1dO2Z1bmN0aW9uIF80KFMsUixrLEcpe3ZhciBRPVtdO2lmKCJzdHJpbmciPT10eXBlb2Yg''@;'; put 'put ''UylRPUpyKFMsRyk7ZWxzZSBmb3IodmFyIG9lPTA7b2U8Uy5sZW5ndGg7KytvZSlRPVEuY29uY2F0KFNbb2VdLm1hcChmdW5jdGlvbihOZSl7cmV0dXJue3Y6TmV9fSkpO3ZhciBnZT0ic3RyaW5nIj09dHlwZW9mIFI/SnIoUixHKS5tYXAoZnVuY3Rpb24oTmUpe3JldHVybiBOZS52fSk6Uixw''@;'; put 'put ''ZT0wLHllPTA7aWYoZ2UubGVuZ3RoPjApZm9yKHZhciBQZT0wO1BlIT09US5sZW5ndGg7UGUrPTIpe3N3aXRjaCh5ZT0rUVtQZSsxXS52LFFbUGVdLnYpe2Nhc2UiV29ya3NoZWV0cyI6Y2FzZSJcdTVkZTVcdTRmNWNcdTg4NjgiOmNhc2UiXHUwNDFiXHUwNDM4XHUwNDQxXHUwNDQyXHUwNDRi''@;'; put 'put ''IjpjYXNlIlx1MDYyM1x1MDY0OFx1MDYzMVx1MDYyN1x1MDY0MiBcdTA2MjdcdTA2NDRcdTA2MzlcdTA2NDVcdTA2NDQiOmNhc2UiXHUzMGVmXHUzMGZjXHUzMGFmXHUzMGI3XHUzMGZjXHUzMGM4IjpjYXNlIlx1MDVkMlx1MDVkY1x1MDVkOVx1MDVkNVx1MDVlMFx1MDVkNVx1MDVlYSBcdTA1''@;'; put 'put ''ZTJcdTA1ZDFcdTA1ZDVcdTA1ZDNcdTA1ZDQiOmNhc2UiQXJiZWl0c2JsXHhlNHR0ZXIiOmNhc2UiXHhjN2FsXHUwMTMxXHUwMTVmbWEgU2F5ZmFsYXJcdTAxMzEiOmNhc2UiRmV1aWxsZXMgZGUgY2FsY3VsIjpjYXNlIkZvZ2xpIGRpIGxhdm9ybyI6Y2FzZSJGb2xoYXMgZGUgY1x4ZTFsY3Vs''@;'; put 'put ''byI6Y2FzZSJQbGFuaWxoYXMiOmNhc2UiUmVnbmVhcmsiOmNhc2UiSG9qYXMgZGUgY1x4ZTFsY3VsbyI6Y2FzZSJXZXJrYmxhZGVuIjprLldvcmtzaGVldHM9eWUsay5TaGVldE5hbWVzPWdlLnNsaWNlKHBlLHBlK3llKTticmVhaztjYXNlIk5hbWVkIFJhbmdlcyI6Y2FzZSJSYW5nb3MgY29u''@;'; put 'put ''IG5vbWJyZSI6Y2FzZSJcdTU0MGRcdTUyNGRcdTRlZDhcdTMwNGRcdTRlMDBcdTg5YTciOmNhc2UiQmVuYW5udGUgQmVyZWljaGUiOmNhc2UiTmF2bmdpdm5lIG9tclx4ZTVkZXIiOmsuTmFtZWRSYW5nZXM9eWUsay5EZWZpbmVkTmFtZXM9Z2Uuc2xpY2UocGUscGUreWUpO2JyZWFrO2Nhc2Ui''@;'; put 'put ''Q2hhcnRzIjpjYXNlIkRpYWdyYW1tZSI6ay5DaGFydHNoZWV0cz15ZSxrLkNoYXJ0TmFtZXM9Z2Uuc2xpY2UocGUscGUreWUpfXBlKz15ZX19WWkuRVhUX1BST1BTPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9leHRlbmRlZC1wcm9wZXJ0''@;'; put 'put ''aWVzIixLYS5FWFRfUFJPUFM9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvZXh0ZW5kZWQtcHJvcGVydGllcyI7dmFyIEw2PVByKCJQcm9wZXJ0aWVzIixudWxsLHt4bWxuczpZaS5FWFRfUFJPUFMsInhtbG5zOnZ0''@;'; put 'put ''IjpZaS52dH0pO1lpLkNVU1RfUFJPUFM9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L2N1c3RvbS1wcm9wZXJ0aWVzIixLYS5DVVNUX1BST1BTPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAw''@;'; put 'put ''Ni9yZWxhdGlvbnNoaXBzL2N1c3RvbS1wcm9wZXJ0aWVzIjt2YXIgTzY9LzxbXj5dKz5bXjxdKi9nLF92PVByKCJQcm9wZXJ0aWVzIixudWxsLHt4bWxuczpZaS5DVVNUX1BST1BTLCJ4bWxuczp2dCI6WWkudnR9KTt2YXIgUDY9e1RpdGxlOiJUaXRsZSIsU3ViamVjdDoiU3ViamVjdCIsQXV0''@;'; put 'put ''aG9yOiJBdXRob3IiLEtleXdvcmRzOiJLZXl3b3JkcyIsQ29tbWVudHM6IkRlc2NyaXB0aW9uIixMYXN0QXV0aG9yOiJMYXN0QXV0aG9yIixSZXZOdW1iZXI6IlJldmlzaW9uIixBcHBsaWNhdGlvbjoiQXBwTmFtZSIsTGFzdFByaW50ZWQ6Ikxhc3RQcmludGVkIixDcmVhdGVkRGF0ZToiQ3Jl''@;'; put 'put ''YXRlZCIsTW9kaWZpZWREYXRlOiJMYXN0U2F2ZWQiLENhdGVnb3J5OiJDYXRlZ29yeSIsTWFuYWdlcjoiTWFuYWdlciIsQ29tcGFueToiQ29tcGFueSIsQXBwVmVyc2lvbjoiVmVyc2lvbiIsQ29udGVudFN0YXR1czoiQ29udGVudFN0YXR1cyIsSWRlbnRpZmllcjoiSWRlbnRpZmllciIsTGFu''@;'; put 'put ''Z3VhZ2U6Ikxhbmd1YWdlIn0sRjY9VmUoUDYpO2Z1bmN0aW9uIEYzKFMsUixrKXtTW1I9RjZbUl18fFJdPWt9ZnVuY3Rpb24gSDMoUyl7dmFyIFI9Uy5yZWFkX3NoaWZ0KDQpLGs9Uy5yZWFkX3NoaWZ0KDQpO3JldHVybiBuZXcgRGF0ZSgxZTMqKGsvMWU3Kk1hdGgucG93KDIsMzIpK1IvMWU3''@;'; put 'put ''LTExNjQ0NDczNjAwKSkudG9JU09TdHJpbmcoKS5yZXBsYWNlKC9cLjAwMC8sIiIpfWZ1bmN0aW9uIGNkKFMsUixrKXt2YXIgRz1TLmwsUT1TLnJlYWRfc2hpZnQoMCwibHBzdHItY3AiKTtpZihrKWZvcig7Uy5sLUcmMzspKytTLmw7cmV0dXJuIFF9ZnVuY3Rpb24gZzUoUyxSLGspe3ZhciBH''@;'; put 'put ''PVMucmVhZF9zaGlmdCgwLCJscHdzdHIiKTtyZXR1cm4gayYmKFMubCs9NC0oRy5sZW5ndGgrMSYzKSYzKSxHfWZ1bmN0aW9uIHd2KFMsUixrKXtyZXR1cm4gMzE9PT1SP2c1KFMpOmNkKFMsMCxrKX1mdW5jdGlvbiBONihTLFIsayl7cmV0dXJuIHd2KFMsUiwhMT09PWs/MDo0KX1mdW5jdGlv''@;'; put 'put ''biBTdihTKXt2YXIgUj1TLmwsaz13ZihTLE5uKTtyZXR1cm4gMD09U1tTLmxdJiYwPT1TW1MubCsxXSYmUy5sLVImMiYmKFMubCs9MiksW2ssd2YoUyxKbCldfWZ1bmN0aW9uIG01KFMsUil7Zm9yKHZhciBrPVMucmVhZF9zaGlmdCg0KSxHPXt9LFE9MDtRIT1rOysrUSl7dmFyIG9lPVMucmVh''@;'; put 'put ''ZF9zaGlmdCg0KSxnZT1TLnJlYWRfc2hpZnQoNCk7R1tvZV09Uy5yZWFkX3NoaWZ0KGdlLDEyMDA9PT1SPyJ1dGYxNmxlIjoidXRmOCIpLnJlcGxhY2UoRSwiIikucmVwbGFjZShtLCIhIiksMTIwMD09PVImJmdlJTImJihTLmwrPTIpfXJldHVybiAzJlMubCYmKFMubD1TLmw+PjM8PDIpLEd9''@;'; put 'put ''ZnVuY3Rpb24gcTAoUyl7dmFyIFI9Uy5yZWFkX3NoaWZ0KDQpLGs9Uy5zbGljZShTLmwsUy5sK1IpO3JldHVybiBTLmwrPVIsKDMmUik+MCYmKFMubCs9NC0oMyZSKSYzKSxrfWZ1bmN0aW9uIHdmKFMsUixrKXt2YXIgUSxHPVMucmVhZF9zaGlmdCgyKSxvZT1rfHx7fTtpZihTLmwrPTIsUiE9''@;'; put 'put ''PUkwJiZHIT09UiYmLTE9PT1Gdy5pbmRleE9mKFIpJiYoNDEyNiE9KDY1NTM0JlIpfHw0MTI2IT0oNjU1MzQmRykpKXRocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgdHlwZSAiK1IrIiBzYXcgIitHKTtzd2l0Y2goUj09PUkwP0c6Uil7Y2FzZSAyOnJldHVybiBRPVMucmVhZF9zaGlmdCgyLCJp''@;'; put 'put ''Iiksb2UucmF3fHwoUy5sKz0yKSxRO2Nhc2UgMzpyZXR1cm4gUy5yZWFkX3NoaWZ0KDQsImkiKTtjYXNlIDExOnJldHVybiAwIT09Uy5yZWFkX3NoaWZ0KDQpO2Nhc2UgMTk6cmV0dXJuIFMucmVhZF9zaGlmdCg0KTtjYXNlIDMwOnJldHVybiBjZChTLDAsNCkucmVwbGFjZShFLCIiKTtjYXNl''@;'; put 'put ''IDMxOnJldHVybiBnNShTKTtjYXNlIDY0OnJldHVybiBIMyhTKTtjYXNlIDY1OnJldHVybiBxMChTKTtjYXNlIDcxOnJldHVybiBmdW5jdGlvbiBNdihTKXt2YXIgUj17fTtyZXR1cm4gUi5TaXplPVMucmVhZF9zaGlmdCg0KSxTLmwrPVIuU2l6ZSszLShSLlNpemUtMSklNCxSfShTKTtjYXNl''@;'; put 'put ''IDgwOnJldHVybiBONihTLEcsIW9lLnJhdykucmVwbGFjZShFLCIiKTtjYXNlIDgxOnJldHVybiBmdW5jdGlvbiBDdihTLFIpe2lmKCFSKXRocm93IG5ldyBFcnJvcigiVnRVbmFsaWduZWRTdHJpbmcgbXVzdCBoYXZlIHBvc2l0aXZlIGxlbmd0aCIpO3JldHVybiB3dihTLFIsMCl9KFMsRyku''@;'; put 'put ''cmVwbGFjZShFLCIiKTtjYXNlIDQxMDg6cmV0dXJuIGZ1bmN0aW9uIFl3KFMpe2Zvcih2YXIgUj1TLnJlYWRfc2hpZnQoNCksaz1bXSxHPTA7RzxSLzI7KytHKWsucHVzaChTdihTKSk7cmV0dXJuIGt9KFMpO2Nhc2UgNDEyNjpjYXNlIDQxMjc6cmV0dXJuIDQxMjc9PUc/ZnVuY3Rpb24gTjMo''@;'; put 'put ''Uyl7Zm9yKHZhciBSPVMucmVhZF9zaGlmdCg0KSxrPVtdLEc9MDtHIT1SOysrRyl7dmFyIFE9Uy5sO2tbR109Uy5yZWFkX3NoaWZ0KDAsImxwd3N0ciIpLnJlcGxhY2UoRSwiIiksUy5sLVEmMiYmKFMubCs9Mil9cmV0dXJuIGt9KFMpOmZ1bmN0aW9uIFd3KFMpe2Zvcih2YXIgUj1TLnJlYWRf''@;'; put 'put ''c2hpZnQoNCksaz1bXSxHPTA7RyE9UjsrK0cpa1tHXT1TLnJlYWRfc2hpZnQoMCwibHBzdHItY3AiKS5yZXBsYWNlKEUsIiIpO3JldHVybiBrfShTKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVHlwZWRQcm9wZXJ0eVZhbHVlIHVucmVjb2duaXplZCB0eXBlICIrUisiICIrRyl9fWZ1bmN0''@;'; put 'put ''aW9uIENmKFMsUil7dmFyIGs9Ym4oNCksRz1ibig0KTtzd2l0Y2goay53cml0ZV9zaGlmdCg0LDgwPT1TPzMxOlMpLFMpe2Nhc2UgMzpHLndyaXRlX3NoaWZ0KC00LFIpO2JyZWFrO2Nhc2UgNTooRz1ibig4KSkud3JpdGVfc2hpZnQoOCxSLCJmIik7YnJlYWs7Y2FzZSAxMTpHLndyaXRlX3No''@;'; put 'put ''aWZ0KDQsUj8xOjApO2JyZWFrO2Nhc2UgNjQ6Rz1mdW5jdGlvbiBoYyhTKXt2YXIgaz0oInN0cmluZyI9PXR5cGVvZiBTP25ldyBEYXRlKERhdGUucGFyc2UoUykpOlMpLmdldFRpbWUoKS8xZTMrMTE2NDQ0NzM2MDAsRz1rJU1hdGgucG93KDIsMzIpLFE9KGstRykvTWF0aC5wb3coMiwzMik7''@;'; put 'put ''USo9MWU3O3ZhciBvZT0oRyo9MWU3KS9NYXRoLnBvdygyLDMyKXwwO29lPjAmJihHJT1NYXRoLnBvdygyLDMyKSxRKz1vZSk7dmFyIGdlPWJuKDgpO3JldHVybiBnZS53cml0ZV9zaGlmdCg0LEcpLGdlLndyaXRlX3NoaWZ0KDQsUSksZ2V9KFIpO2JyZWFrO2Nhc2UgMzE6Y2FzZSA4MDpmb3Io''@;'; put 'put ''KEc9Ym4oNCsyKihSLmxlbmd0aCsxKSsoUi5sZW5ndGglMj8wOjIpKSkud3JpdGVfc2hpZnQoNCxSLmxlbmd0aCsxKSxHLndyaXRlX3NoaWZ0KDAsUiwiZGJjcyIpO0cubCE9Ry5sZW5ndGg7KUcud3JpdGVfc2hpZnQoMSwwKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVHlwZWRQ''@;'; put 'put ''cm9wZXJ0eVZhbHVlIHVucmVjb2duaXplZCB0eXBlICIrUysiICIrUil9cmV0dXJuIGooW2ssR10pfWZ1bmN0aW9uIGloKFMsUil7dmFyIGs9Uy5sLEc9Uy5yZWFkX3NoaWZ0KDQpLFE9Uy5yZWFkX3NoaWZ0KDQpLG9lPVtdLGdlPTAscGU9MCx5ZT0tMSxQZT17fTtmb3IoZ2U9MDtnZSE9UTsr''@;'; put 'put ''K2dlKXt2YXIgTmU9Uy5yZWFkX3NoaWZ0KDQpLFllPVMucmVhZF9zaGlmdCg0KTtvZVtnZV09W05lLFllK2tdfW9lLnNvcnQoZnVuY3Rpb24oa3QsT3Qpe3JldHVybiBrdFsxXS1PdFsxXX0pO3ZhciBldD17fTtmb3IoZ2U9MDtnZSE9UTsrK2dlKXtpZihTLmwhPT1vZVtnZV1bMV0pe3ZhciBj''@;'; put 'put ''dD0hMDtpZihnZT4wJiZSKXN3aXRjaChSW29lW2dlLTFdWzBdXS50KXtjYXNlIDI6Uy5sKzI9PT1vZVtnZV1bMV0mJihTLmwrPTIsY3Q9ITEpO2JyZWFrO2Nhc2UgODA6Y2FzZSA0MTA4OlMubDw9b2VbZ2VdWzFdJiYoUy5sPW9lW2dlXVsxXSxjdD0hMSl9aWYoKCFSfHwwPT1nZSkmJlMubDw9''@;'; put 'put ''b2VbZ2VdWzFdJiYoY3Q9ITEsUy5sPW9lW2dlXVsxXSksY3QpdGhyb3cgbmV3IEVycm9yKCJSZWFkIEVycm9yOiBFeHBlY3RlZCBhZGRyZXNzICIrb2VbZ2VdWzFdKyIgYXQgIitTLmwrIiA6IitnZSl9aWYoUil7dmFyIEV0PVJbb2VbZ2VdWzBdXTtpZihldFtFdC5uXT13ZihTLEV0LnQse3Jh''@;'; put 'put ''dzohMH0pLCJ2ZXJzaW9uIj09PUV0LnAmJihldFtFdC5uXT1TdHJpbmcoZXRbRXQubl0+PjE2KSsiLiIrKCIwMDAwIitTdHJpbmcoNjU1MzUmZXRbRXQubl0pKS5zbGljZSgtNCkpLCJDb2RlUGFnZSI9PUV0Lm4pc3dpdGNoKGV0W0V0Lm5dKXtjYXNlIDA6ZXRbRXQubl09MTI1MjtjYXNlIDg3''@;'; put 'put ''NDpjYXNlIDkzMjpjYXNlIDkzNjpjYXNlIDk0OTpjYXNlIDk1MDpjYXNlIDEyNTA6Y2FzZSAxMjUxOmNhc2UgMTI1MzpjYXNlIDEyNTQ6Y2FzZSAxMjU1OmNhc2UgMTI1NjpjYXNlIDEyNTc6Y2FzZSAxMjU4OmNhc2UgMWU0OmNhc2UgMTIwMDpjYXNlIDEyMDE6Y2FzZSAxMjUyOmNhc2UgNjVl''@;'; put 'put ''MzpjYXNlLTUzNjpjYXNlIDY1MDAxOmNhc2UtNTM1OlUocGU9ZXRbRXQubl0+Pj4wJjY1NTM1KTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgQ29kZVBhZ2U6ICIrZXRbRXQubl0pfX1lbHNlIGlmKDE9PT1vZVtnZV1bMF0pe2lmKHBlPWV0LkNvZGVQYWdlPXdm''@;'; put 'put ''KFMsZTIpLFUocGUpLC0xIT09eWUpe3ZhciBhdD1TLmw7Uy5sPW9lW3llXVsxXSxQZT1tNShTLHBlKSxTLmw9YXR9fWVsc2UgaWYoMD09PW9lW2dlXVswXSl7aWYoMD09PXBlKXt5ZT1nZSxTLmw9b2VbZ2UrMV1bMV07Y29udGludWV9UGU9bTUoUyxwZSl9ZWxzZXt2YXIganQsYnQ9UGVbb2Vb''@;'; put 'put ''Z2VdWzBdXTtzd2l0Y2goU1tTLmxdKXtjYXNlIDY1OlMubCs9NCxqdD1xMChTKTticmVhaztjYXNlIDMwOmNhc2UgMzE6Uy5sKz00LGp0PU42KFMsU1tTLmwtNF0pLnJlcGxhY2UoL1x1MDAwMCskLywiIik7YnJlYWs7Y2FzZSAzOlMubCs9NCxqdD1TLnJlYWRfc2hpZnQoNCwiaSIpO2JyZWFr''@;'; put 'put ''O2Nhc2UgMTk6Uy5sKz00LGp0PVMucmVhZF9zaGlmdCg0KTticmVhaztjYXNlIDU6Uy5sKz00LGp0PVMucmVhZF9zaGlmdCg4LCJmIik7YnJlYWs7Y2FzZSAxMTpTLmwrPTQsanQ9dW8oUyw0KTticmVhaztjYXNlIDY0OlMubCs9NCxqdD1IZShIMyhTKSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBu''@;'; put 'put ''ZXcgRXJyb3IoInVucGFyc2VkIHZhbHVlOiAiK1NbUy5sXSl9ZXRbYnRdPWp0fX1yZXR1cm4gUy5sPWsrRyxldH12YXIgVjY9WyJDb2RlUGFnZSIsIlRodW1ibmFpbCIsIl9QSURfTElOS0JBU0UiLCJfUElEX0hMSU5LUyIsIlN5c3RlbUlkZW50aWZpZXIiLCJGTVRJRCJdLmNvbmNhdChbIldv''@;'; put 'put ''cmtzaGVldHMiLCJTaGVldE5hbWVzIiwiTmFtZWRSYW5nZXMiLCJEZWZpbmVkTmFtZXMiLCJDaGFydHNoZWV0cyIsIkNoYXJ0TmFtZXMiXSk7ZnVuY3Rpb24gSGMoUyl7c3dpdGNoKHR5cGVvZiBTKXtjYXNlImJvb2xlYW4iOnJldHVybiAxMTtjYXNlIm51bWJlciI6cmV0dXJuKDB8Uyk9PVM/''@;'; put 'put ''Mzo1O2Nhc2Uic3RyaW5nIjpyZXR1cm4gMzE7Y2FzZSJvYmplY3QiOmlmKFMgaW5zdGFuY2VvZiBEYXRlKXJldHVybiA2NH1yZXR1cm4tMX1mdW5jdGlvbiBCNihTLFIsayl7dmFyIEc9Ym4oOCksUT1bXSxvZT1bXSxnZT04LHBlPTAseWU9Ym4oOCksUGU9Ym4oOCk7aWYoeWUud3JpdGVfc2hp''@;'; put 'put ''ZnQoNCwyKSx5ZS53cml0ZV9zaGlmdCg0LDEyMDApLFBlLndyaXRlX3NoaWZ0KDQsMSksb2UucHVzaCh5ZSksUS5wdXNoKFBlKSxnZSs9OCt5ZS5sZW5ndGgsIVIpeyhQZT1ibig4KSkud3JpdGVfc2hpZnQoNCwwKSxRLnVuc2hpZnQoUGUpO3ZhciBOZT1bYm4oNCldO2ZvcihOZVswXS53cml0''@;'; put 'put ''ZV9zaGlmdCg0LFMubGVuZ3RoKSxwZT0wO3BlPFMubGVuZ3RoOysrcGUpe3ZhciBZZT1TW3BlXVswXTtmb3IoKHllPWJuKDgrMiooWWUubGVuZ3RoKzEpKyhZZS5sZW5ndGglMj8wOjIpKSkud3JpdGVfc2hpZnQoNCxwZSsyKSx5ZS53cml0ZV9zaGlmdCg0LFllLmxlbmd0aCsxKSx5ZS53cml0''@;'; put 'put ''ZV9zaGlmdCgwLFllLCJkYmNzIik7eWUubCE9eWUubGVuZ3RoOyl5ZS53cml0ZV9zaGlmdCgxLDApO05lLnB1c2goeWUpfXllPWooTmUpLG9lLnVuc2hpZnQoeWUpLGdlKz04K3llLmxlbmd0aH1mb3IocGU9MDtwZTxTLmxlbmd0aDsrK3BlKWlmKCghUnx8UltTW3BlXVswXV0pJiYhKFY2Lmlu''@;'; put 'put ''ZGV4T2YoU1twZV1bMF0pPi0xKSYmbnVsbCE9U1twZV1bMV0pe3ZhciBldD1TW3BlXVsxXSxjdD0wO2lmKFIpe3ZhciBFdD1rW2N0PStSW1NbcGVdWzBdXV07aWYoInZlcnNpb24iPT1FdC5wJiYic3RyaW5nIj09dHlwZW9mIGV0KXt2YXIgYXQ9ZXQuc3BsaXQoIi4iKTtldD0oK2F0WzBdPDwx''@;'; put 'put ''NikrKCthdFsxXXx8MCl9eWU9Q2YoRXQudCxldCl9ZWxzZXt2YXIgYnQ9SGMoZXQpOy0xPT1idCYmKGJ0PTMxLGV0PVN0cmluZyhldCkpLHllPUNmKGJ0LGV0KX1vZS5wdXNoKHllKSwoUGU9Ym4oOCkpLndyaXRlX3NoaWZ0KDQsUj9jdDoyK3BlKSxRLnB1c2goUGUpLGdlKz04K3llLmxlbmd0''@;'; put 'put ''aH12YXIganQ9OCoob2UubGVuZ3RoKzEpO2ZvcihwZT0wO3BlPG9lLmxlbmd0aDsrK3BlKVFbcGVdLndyaXRlX3NoaWZ0KDQsanQpLGp0Kz1vZVtwZV0ubGVuZ3RoO3JldHVybiBHLndyaXRlX3NoaWZ0KDQsZ2UpLEcud3JpdGVfc2hpZnQoNCxvZS5sZW5ndGgpLGooW0ddLmNvbmNhdChRKS5j''@;'; put 'put ''b25jYXQob2UpKX1mdW5jdGlvbiBqNihTLFIsayl7dmFyIEc9Uy5jb250ZW50O2lmKCFHKXJldHVybnt9O21uKEcsMCk7dmFyIFEsb2UsZ2UscGUseWU9MDtHLmNoaygiZmVmZiIsIkJ5dGUgT3JkZXI6ICIpLEcucmVhZF9zaGlmdCgyKTt2YXIgUGU9Ry5yZWFkX3NoaWZ0KDQpLE5lPUcucmVh''@;'; put 'put ''ZF9zaGlmdCgxNik7aWYoTmUhPT12ZS51dGlscy5jb25zdHMuSEVBREVSX0NMU0lEJiZOZSE9PWspdGhyb3cgbmV3IEVycm9yKCJCYWQgUHJvcGVydHlTZXQgQ0xTSUQgIitOZSk7aWYoMSE9PShRPUcucmVhZF9zaGlmdCg0KSkmJjIhPT1RKXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVk''@;'; put 'put ''ICNTZXRzOiAiK1EpO2lmKG9lPUcucmVhZF9zaGlmdCgxNikscGU9Ry5yZWFkX3NoaWZ0KDQpLDE9PT1RJiZwZSE9PUcubCl0aHJvdyBuZXcgRXJyb3IoIkxlbmd0aCBtaXNtYXRjaDogIitwZSsiICE9PSAiK0cubCk7Mj09PVEmJihnZT1HLnJlYWRfc2hpZnQoMTYpLHllPUcucmVhZF9zaGlm''@;'; put 'put ''dCg0KSk7dmFyIEV0LFllPWloKEcsUiksZXQ9e1N5c3RlbUlkZW50aWZpZXI6UGV9O2Zvcih2YXIgY3QgaW4gWWUpZXRbY3RdPVllW2N0XTtpZihldC5GTVRJRD1vZSwxPT09USlyZXR1cm4gZXQ7aWYoeWUtRy5sPT0yJiYoRy5sKz0yKSxHLmwhPT15ZSl0aHJvdyBuZXcgRXJyb3IoIkxlbmd0''@;'; put 'put ''aCBtaXNtYXRjaCAyOiAiK0cubCsiICE9PSAiK3llKTt0cnl7RXQ9aWgoRyxudWxsKX1jYXRjaHt9Zm9yKGN0IGluIEV0KWV0W2N0XT1FdFtjdF07cmV0dXJuIGV0LkZNVElEPVtvZSxnZV0sZXR9ZnVuY3Rpb24gemkoUyxSLGssRyxRLG9lKXt2YXIgZ2U9Ym4oUT82ODo0OCkscGU9W2dlXTtn''@;'; put 'put ''ZS53cml0ZV9zaGlmdCgyLDY1NTM0KSxnZS53cml0ZV9zaGlmdCgyLDApLGdlLndyaXRlX3NoaWZ0KDQsODQyNDEyNTk5KSxnZS53cml0ZV9zaGlmdCgxNix2ZS51dGlscy5jb25zdHMuSEVBREVSX0NMU0lELCJoZXgiKSxnZS53cml0ZV9zaGlmdCg0LFE/MjoxKSxnZS53cml0ZV9zaGlmdCgx''@;'; put 'put ''NixSLCJoZXgiKSxnZS53cml0ZV9zaGlmdCg0LFE/Njg6NDgpO3ZhciB5ZT1CNihTLGssRyk7aWYocGUucHVzaCh5ZSksUSl7dmFyIFBlPUI2KFEsbnVsbCxudWxsKTtnZS53cml0ZV9zaGlmdCgxNixvZSwiaGV4IiksZ2Uud3JpdGVfc2hpZnQoNCw2OCt5ZS5sZW5ndGgpLHBlLnB1c2goUGUp''@;'; put 'put ''fXJldHVybiBqKHBlKX1mdW5jdGlvbiByMihTLFIpe3JldHVybiBTLnJlYWRfc2hpZnQoUiksbnVsbH1mdW5jdGlvbiB1byhTLFIpe3JldHVybiAxPT09Uy5yZWFkX3NoaWZ0KFIpfWZ1bmN0aW9uIHR1KFMsUil7cmV0dXJuIFJ8fChSPWJuKDIpKSxSLndyaXRlX3NoaWZ0KDIsKyEhUyksUn1m''@;'; put 'put ''dW5jdGlvbiBFYyhTKXtyZXR1cm4gUy5yZWFkX3NoaWZ0KDIsInUiKX1mdW5jdGlvbiBhMChTLFIpe3JldHVybiBSfHwoUj1ibigyKSksUi53cml0ZV9zaGlmdCgyLFMpLFJ9ZnVuY3Rpb24gdzQoUyxSKXtyZXR1cm4gZnVuY3Rpb24geHYoUyxSLGspe2Zvcih2YXIgRz1bXSxRPVMubCtSO1Mu''@;'; put 'put ''bDxROylHLnB1c2goayhTLFEtUy5sKSk7aWYoUSE9PVMubCl0aHJvdyBuZXcgRXJyb3IoIlNsdXJwIGVycm9yIik7cmV0dXJuIEd9KFMsUixFYyl9ZnVuY3Rpb24gS2koUyxSLGspe3JldHVybiBrfHwoaz1ibigyKSksay53cml0ZV9zaGlmdCgxLCJlIj09Uj8rUzorISFTKSxrLndyaXRlX3No''@;'; put 'put ''aWZ0KDEsImUiPT1SPzE6MCksa31mdW5jdGlvbiBVYShTLFIsayl7dmFyIEc9Uy5yZWFkX3NoaWZ0KGsmJmsuYmlmZj49MTI/MjoxKSxRPSJzYmNzLWNvbnQiLG9lPVA7ayYmay5iaWZmPj04JiYoUD0xMjAwKSxrJiY4IT1rLmJpZmY/MTI9PWsuYmlmZiYmKFE9IndzdHIiKTpTLnJlYWRfc2hp''@;'; put 'put ''ZnQoMSkmJihRPSJkYmNzLWNvbnQiKSxrLmJpZmY+PTImJmsuYmlmZjw9NSYmKFE9ImNwc3RyIik7dmFyIHBlPUc/Uy5yZWFkX3NoaWZ0KEcsUSk6IiI7cmV0dXJuIFA9b2UscGV9ZnVuY3Rpb24gZmMoUyl7dmFyIFI9UDtQPTEyMDA7dmFyIHllLGs9Uy5yZWFkX3NoaWZ0KDIpLEc9Uy5yZWFk''@;'; put 'put ''X3NoaWZ0KDEpLFE9NCZHLG9lPTgmRyxnZT0xKygxJkcpLHBlPTAsUGU9e307b2UmJihwZT1TLnJlYWRfc2hpZnQoMikpLFEmJih5ZT1TLnJlYWRfc2hpZnQoNCkpO3ZhciBZZT0wPT09az8iIjpTLnJlYWRfc2hpZnQoaywyPT1nZT8iZGJjcy1jb250Ijoic2Jjcy1jb250Iik7aWYob2UpZm9y''@;'; put 'put ''KFBlLl9SPVtdO3BlLS0gPjA7KVBlLl9SLnB1c2goe2lkeDpTLnJlYWRfc2hpZnQoMiksaWZudDpTLnJlYWRfc2hpZnQoMil9KTtyZXR1cm4gUSYmKFMubCs9eWUpLFBlLnQ9WWUsb2V8fChQZS5yPSI8dD4iK1BlLnQrIjwvdD4iKSxQPVIsUGV9ZnVuY3Rpb24gTmMoUyxSKXt2YXIgaz1TLlIm''@;'; put 'put ''JlMuUi5sZW5ndGh8fFMucjtTLnImJihTLlI9dzUoUy5yKSk7dmFyIEc9IiIsUT0wO2s/Uy5SLmZvckVhY2goZnVuY3Rpb24oRXQpe1ErKyxHKz1FdC52fHwiIn0pOihHPVMudHx8IiIsUT0xKTt2YXIgb2U9Ym4oMysoUT4xPzI6MCkpO29lLndyaXRlX3NoaWZ0KDIsRy5sZW5ndGgpLG9lLndy''@;'; put 'put ''aXRlX3NoaWZ0KDEsMXwoUT4xPzg6MCkpLFE+MSYmb2Uud3JpdGVfc2hpZnQoMixRKTt2YXIgZ2U9Ym4oMipHLmxlbmd0aCk7Z2Uud3JpdGVfc2hpZnQoMipHLmxlbmd0aCxHLCJ1dGYxNmxlIik7dmFyIHBlPVtvZSxnZV07aWYoayl7dmFyIHllPWJuKDQqUy5SLmxlbmd0aCksUGU9MDtwZS5w''@;'; put 'put ''dXNoKHllKTtmb3IodmFyIE5lPTA7TmU8Uy5SLmxlbmd0aDsrK05lKXt2YXIgWWU9Uy5SW05lXTt5ZS53cml0ZV9zaGlmdCgyLFBlKSxQZSs9KFllLnZ8fCIiKS5sZW5ndGg7dmFyIGV0PVllLnM/bDAoUi5jZWxsWGZzLFIuY2VsbFN0eWxlWGZzLHt0OiJuIix2OjAsczpZZS5zfSxSKTowLGN0''@;'; put 'put ''PVIuY2VsbFhmc1tldF0uZm9udElkO3llLndyaXRlX3NoaWZ0KDIsY3Q8ND9jdDpjdCsxKX19cmV0dXJuIGoocGUpfWZ1bmN0aW9uIHJjKFMsUixrKXtpZihrKXtpZihrLmJpZmY+PTImJmsuYmlmZjw9NSlyZXR1cm4gUy5yZWFkX3NoaWZ0KFIsImNwc3RyIik7aWYoay5iaWZmPj0xMilyZXR1''@;'; put 'put ''cm4gUy5yZWFkX3NoaWZ0KFIsImRiY3MtY29udCIpfXZhciBRPVMucmVhZF9zaGlmdCgxKTtyZXR1cm4gUy5yZWFkX3NoaWZ0KFIsMD09PVE/InNiY3MtY29udCI6ImRiY3MtY29udCIpfWZ1bmN0aW9uIG51KFMsUixrKXt2YXIgRz1TLnJlYWRfc2hpZnQoayYmMj09ay5iaWZmPzE6Mik7cmV0''@;'; put 'put ''dXJuIDA9PT1HPyhTLmwrKywiIik6cmMoUyxHLGspfWZ1bmN0aW9uIFgwKFMsUixrKXtpZihrLmJpZmY+NSlyZXR1cm4gbnUoUywwLGspO3ZhciBHPVMucmVhZF9zaGlmdCgxKTtyZXR1cm4gMD09PUc/KFMubCsrLCIiKTpTLnJlYWRfc2hpZnQoRyxrLmJpZmY8PTR8fCFTLmxlbnM/ImNwc3Ry''@;'; put 'put ''Ijoic2Jjcy1jb250Iil9ZnVuY3Rpb24gY2woUyxSLGspe3JldHVybiBrfHwoaz1ibigzKzIqUy5sZW5ndGgpKSxrLndyaXRlX3NoaWZ0KDIsUy5sZW5ndGgpLGsud3JpdGVfc2hpZnQoMSwxKSxrLndyaXRlX3NoaWZ0KDMxLFMsInV0ZjE2bGUiKSxrfWZ1bmN0aW9uIEM0KFMpe3ZhciBSPVMu''@;'; put 'put ''cmVhZF9zaGlmdCg0KTtyZXR1cm4gUj4wP1MucmVhZF9zaGlmdChSLCJ1dGYxNmxlIikucmVwbGFjZShFLCIiKToiIn1mdW5jdGlvbiBvMChTLFIpe1J8fChSPWJuKDYrMipTLmxlbmd0aCkpLFIud3JpdGVfc2hpZnQoNCwxK1MubGVuZ3RoKTtmb3IodmFyIGs9MDtrPFMubGVuZ3RoOysraylS''@;'; put 'put ''LndyaXRlX3NoaWZ0KDIsUy5jaGFyQ29kZUF0KGspKTtyZXR1cm4gUi53cml0ZV9zaGlmdCgyLDApLFJ9ZnVuY3Rpb24gUzQoUyl7dmFyIFI9Ym4oNTEyKSxrPTAsRz1TLlRhcmdldDsiZmlsZTovLyI9PUcuc2xpY2UoMCw3KSYmKEc9Ry5zbGljZSg3KSk7dmFyIFE9Ry5pbmRleE9mKCIjIiks''@;'; put 'put ''b2U9UT4tMT8zMToyMztzd2l0Y2goRy5jaGFyQXQoMCkpe2Nhc2UiIyI6b2U9Mjg7YnJlYWs7Y2FzZSIuIjpvZSY9LTN9Ui53cml0ZV9zaGlmdCg0LDIpLFIud3JpdGVfc2hpZnQoNCxvZSk7dmFyIGdlPVs4LDY4MTU4MjcsNjYxOTIzNyw0ODQ5NzgwLDgzXTtmb3Ioaz0wO2s8Z2UubGVuZ3Ro''@;'; put 'put ''OysraylSLndyaXRlX3NoaWZ0KDQsZ2Vba10pO2lmKDI4PT1vZSlvMChHPUcuc2xpY2UoMSksUik7ZWxzZSBpZigyJm9lKXtmb3IoZ2U9ImUwIGM5IGVhIDc5IGY5IGJhIGNlIDExIDhjIDgyIDAwIGFhIDAwIDRiIGE5IDBiIi5zcGxpdCgiICIpLGs9MDtrPGdlLmxlbmd0aDsrK2spUi53cml0''@;'; put 'put ''ZV9zaGlmdCgxLHBhcnNlSW50KGdlW2tdLDE2KSk7dmFyIHBlPVE+LTE/Ry5zbGljZSgwLFEpOkc7Zm9yKFIud3JpdGVfc2hpZnQoNCwyKihwZS5sZW5ndGgrMSkpLGs9MDtrPHBlLmxlbmd0aDsrK2spUi53cml0ZV9zaGlmdCgyLHBlLmNoYXJDb2RlQXQoaykpO1Iud3JpdGVfc2hpZnQoMiww''@;'; put 'put ''KSw4Jm9lJiZvMChRPi0xP0cuc2xpY2UoUSsxKToiIixSKX1lbHNle2ZvcihnZT0iMDMgMDMgMDAgMDAgMDAgMDAgMDAgMDAgYzAgMDAgMDAgMDAgMDAgMDAgMDAgNDYiLnNwbGl0KCIgIiksaz0wO2s8Z2UubGVuZ3RoOysraylSLndyaXRlX3NoaWZ0KDEscGFyc2VJbnQoZ2Vba10sMTYpKTtm''@;'; put 'put ''b3IodmFyIHllPTA7Ii4uLyI9PUcuc2xpY2UoMyp5ZSwzKnllKzMpfHwiLi5cXCI9PUcuc2xpY2UoMyp5ZSwzKnllKzMpOykrK3llO2ZvcihSLndyaXRlX3NoaWZ0KDIseWUpLFIud3JpdGVfc2hpZnQoNCxHLmxlbmd0aC0zKnllKzEpLGs9MDtrPEcubGVuZ3RoLTMqeWU7KytrKVIud3JpdGVf''@;'; put 'put ''c2hpZnQoMSwyNTUmRy5jaGFyQ29kZUF0KGsrMyp5ZSkpO2ZvcihSLndyaXRlX3NoaWZ0KDEsMCksUi53cml0ZV9zaGlmdCgyLDY1NTM1KSxSLndyaXRlX3NoaWZ0KDIsNTcwMDUpLGs9MDtrPDY7KytrKVIud3JpdGVfc2hpZnQoNCwwKX1yZXR1cm4gUi5zbGljZSgwLFIubCl9ZnVuY3Rpb24g''@;'; put 'put ''TWYoUyl7cmV0dXJuW1MucmVhZF9zaGlmdCgxKSxTLnJlYWRfc2hpZnQoMSksUy5yZWFkX3NoaWZ0KDEpLFMucmVhZF9zaGlmdCgxKV19ZnVuY3Rpb24gdWQoUyxSKXt2YXIgaz1NZihTKTtyZXR1cm4ga1szXT0wLGt9ZnVuY3Rpb24gdzAoUyl7cmV0dXJue3I6Uy5yZWFkX3NoaWZ0KDIpLGM6''@;'; put 'put ''Uy5yZWFkX3NoaWZ0KDIpLGl4ZmU6Uy5yZWFkX3NoaWZ0KDIpfX1mdW5jdGlvbiBhMihTLFIsayxHKXtyZXR1cm4gR3x8KEc9Ym4oNikpLEcud3JpdGVfc2hpZnQoMixTKSxHLndyaXRlX3NoaWZ0KDIsUiksRy53cml0ZV9zaGlmdCgyLGt8fDApLEd9ZnVuY3Rpb24geGYoUyxSLGspe3ZhciBH''@;'; put 'put ''PWsuYmlmZj44PzQ6MjtyZXR1cm5bUy5yZWFkX3NoaWZ0KEcpLFMucmVhZF9zaGlmdChHLCJpIiksUy5yZWFkX3NoaWZ0KEcsImkiKV19ZnVuY3Rpb24gd28oUyl7cmV0dXJuW1MucmVhZF9zaGlmdCgyKSxJMShTKV19ZnVuY3Rpb24gczIoUyl7dmFyIFI9Uy5yZWFkX3NoaWZ0KDIpLGs9Uy5y''@;'; put 'put ''ZWFkX3NoaWZ0KDIpO3JldHVybntzOntjOlMucmVhZF9zaGlmdCgyKSxyOlJ9LGU6e2M6Uy5yZWFkX3NoaWZ0KDIpLHI6a319fWZ1bmN0aW9uIHZ1KFMsUil7cmV0dXJuIFJ8fChSPWJuKDgpKSxSLndyaXRlX3NoaWZ0KDIsUy5zLnIpLFIud3JpdGVfc2hpZnQoMixTLmUuciksUi53cml0ZV9z''@;'; put 'put ''aGlmdCgyLFMucy5jKSxSLndyaXRlX3NoaWZ0KDIsUy5lLmMpLFJ9ZnVuY3Rpb24gTTQoUyl7dmFyIFI9Uy5yZWFkX3NoaWZ0KDIpLGs9Uy5yZWFkX3NoaWZ0KDIpO3JldHVybntzOntjOlMucmVhZF9zaGlmdCgxKSxyOlJ9LGU6e2M6Uy5yZWFkX3NoaWZ0KDEpLHI6a319fXZhciBnYz1NNDtm''@;'; put 'put ''dW5jdGlvbiBiNShTKXtTLmwrPTQ7dmFyIFI9Uy5yZWFkX3NoaWZ0KDIpLGs9Uy5yZWFkX3NoaWZ0KDIpLEc9Uy5yZWFkX3NoaWZ0KDIpO3JldHVybiBTLmwrPTEyLFtrLFIsR119ZnVuY3Rpb24gcnUoUyl7Uy5sKz0yLFMubCs9Uy5yZWFkX3NoaWZ0KDIpfXZhciBFZj17MDpydSw0OnJ1LDU6''@;'; put 'put ''cnUsNjpydSw3OmZ1bmN0aW9uIEh1KFMpe3JldHVybiBTLmwrPTQsUy5jZj1TLnJlYWRfc2hpZnQoMikse319LDg6cnUsOTpydSwxMDpydSwxMTpydSwxMjpydSwxMzpmdW5jdGlvbiBGdShTKXt2YXIgUj17fTtyZXR1cm4gUy5sKz00LFMubCs9MTYsUi5mU2hhcmVkTm90ZT1TLnJlYWRfc2hp''@;'; put 'put ''ZnQoMiksUy5sKz00LFJ9LDE0OnJ1LDE1OnJ1LDE2OnJ1LDE3OnJ1LDE4OnJ1LDE5OnJ1LDIwOnJ1LDIxOmI1fTtmdW5jdGlvbiBWYyhTLFIpe3ZhciBrPXtCSUZGVmVyOjAsZHQ6MH07c3dpdGNoKGsuQklGRlZlcj1TLnJlYWRfc2hpZnQoMiksKFItPTIpPj0yJiYoay5kdD1TLnJlYWRfc2hp''@;'; put 'put ''ZnQoMiksUy5sLT0yKSxrLkJJRkZWZXIpe2Nhc2UgMTUzNjpjYXNlIDEyODA6Y2FzZSAxMDI0OmNhc2UgNzY4OmNhc2UgNTEyOmNhc2UgMjpjYXNlIDc6YnJlYWs7ZGVmYXVsdDppZihSPjYpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIEJJRkYgVmVyICIray5CSUZGVmVyKX1yZXR1cm4g''@;'; put 'put ''Uy5yZWFkX3NoaWZ0KFIpLGt9ZnVuY3Rpb24geDQoUyxSLGspe3ZhciBHPTE1MzYsUT0xNjtzd2l0Y2goay5ib29rVHlwZSl7Y2FzZSJiaWZmOCI6Y2FzZSJ4bGEiOmJyZWFrO2Nhc2UiYmlmZjUiOkc9MTI4MCxRPTg7YnJlYWs7Y2FzZSJiaWZmNCI6Rz00LFE9NjticmVhaztjYXNlImJpZmYz''@;'; put 'put ''IjpHPTMsUT02O2JyZWFrO2Nhc2UiYmlmZjIiOkc9MixRPTQ7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoInVuc3VwcG9ydGVkIEJJRkYgdmVyc2lvbiIpfXZhciBvZT1ibihRKTtyZXR1cm4gb2Uud3JpdGVfc2hpZnQoMixHKSxvZS53cml0ZV9zaGlmdCgyLFIpLFE+NCYmb2Uud3Jp''@;'; put 'put ''dGVfc2hpZnQoMiwyOTI4MiksUT42JiZvZS53cml0ZV9zaGlmdCgyLDE5OTcpLFE+OCYmKG9lLndyaXRlX3NoaWZ0KDIsNDkxNjEpLG9lLndyaXRlX3NoaWZ0KDIsMSksb2Uud3JpdGVfc2hpZnQoMiwxNzk4KSxvZS53cml0ZV9zaGlmdCgyLDApKSxvZX1mdW5jdGlvbiBsMihTLFIpe3ZhciBr''@;'; put 'put ''PSFSfHxSLmJpZmY+PTg/MjoxLEc9Ym4oOCtrKlMubmFtZS5sZW5ndGgpO0cud3JpdGVfc2hpZnQoNCxTLnBvcyksRy53cml0ZV9zaGlmdCgxLFMuaHN8fDApLEcud3JpdGVfc2hpZnQoMSxTLmR0KSxHLndyaXRlX3NoaWZ0KDEsUy5uYW1lLmxlbmd0aCksUi5iaWZmPj04JiZHLndyaXRlX3No''@;'; put 'put ''aWZ0KDEsMSksRy53cml0ZV9zaGlmdChrKlMubmFtZS5sZW5ndGgsUy5uYW1lLFIuYmlmZjw4PyJzYmNzIjoidXRmMTZsZSIpO3ZhciBRPUcuc2xpY2UoMCxHLmwpO3JldHVybiBRLmw9Ry5sLFF9ZnVuY3Rpb24gaWkoUyl7cmV0dXJuIFMucmVhZF9zaGlmdCg0KSxtdShTKX1mdW5jdGlvbiBT''@;'; put 'put ''byhTKXtyZXR1cm4gUy5yZWFkX3NoaWZ0KDQpLG4wKFMpfWZ1bmN0aW9uIE51KFMsUixrKXtyZXR1cm4gUy5yZWFkX3NoaWZ0KDQpLFhCKFMsMCxrKX1mdW5jdGlvbiBjMihTLFIsayl7dmFyIEc9MDtrJiYyPT1rLmJpZmZ8fChHPVMucmVhZF9zaGlmdCgyKSk7dmFyIFE9Uy5yZWFkX3NoaWZ0''@;'; put 'put ''KDIpO3JldHVybiBrJiYyPT1rLmJpZmYmJihHPTEtKFE+PjE1KSxRJj0zMjc2NyksW3tVbnN5bmNlZDoxJkcsRHlaZXJvOigyJkcpPj4xLEV4QXNjOig0JkcpPj4yLEV4RHNjOig4JkcpPj4zfSxRXX1mdW5jdGlvbiBhVihTLFIsayxHKXt2YXIgUT1rJiY1PT1rLmJpZmY7R3x8KEc9Ym4oUT8z''@;'; put 'put ''K1IubGVuZ3RoOjUrMipSLmxlbmd0aCkpLEcud3JpdGVfc2hpZnQoMixTKSxHLndyaXRlX3NoaWZ0KFE/MToyLFIubGVuZ3RoKSxRfHxHLndyaXRlX3NoaWZ0KDEsMSksRy53cml0ZV9zaGlmdCgoUT8xOjIpKlIubGVuZ3RoLFIsUT8ic2JjcyI6InV0ZjE2bGUiKTt2YXIgb2U9Ry5sZW5ndGg+''@;'; put 'put ''Ry5sP0cuc2xpY2UoMCxHLmwpOkc7cmV0dXJuIG51bGw9PW9lLmwmJihvZS5sPW9lLmxlbmd0aCksb2V9dmFyIHUyPVgwO2Z1bmN0aW9uIFh3KFMsUixrKXt2YXIgRz1TLmwrUixRPTghPWsuYmlmZiYmay5iaWZmPzI6NCxvZT1TLnJlYWRfc2hpZnQoUSksZ2U9Uy5yZWFkX3NoaWZ0KFEpLHBl''@;'; put 'put ''PVMucmVhZF9zaGlmdCgyKSx5ZT1TLnJlYWRfc2hpZnQoMik7cmV0dXJuIFMubD1HLHtzOntyOm9lLGM6cGV9LGU6e3I6Z2UsYzp5ZX19fWZ1bmN0aW9uIHk1KFMsUixrLEcpe3ZhciBvZT0ha3x8IWsuYmlmZnx8OD09ay5iaWZmO0d8fChHPWJuKGsmJjU9PWsuYmlmZj8xNjoyMCkpLEcud3Jp''@;'; put 'put ''dGVfc2hpZnQoMixvZSYmay5jZWxsU3R5bGVzJiZTLmZvbnRJZCYmKFMuZm9udElkPDQ/Uy5mb250SWQ6Uy5mb250SWQrMSl8fDApO3ZhciBnZT0xO1MucHJvdGVjdGlvbiYmKFMucHJvdGVjdGlvbi5lZGl0YWJsZSYmKGdlJj0tMiksUy5wcm90ZWN0aW9uLmhpZGRlbiYmKGdlfD0yKSksUy5z''@;'; put 'put ''dHlsZT8oRy53cml0ZV9zaGlmdCgyLFMubnVtRm10SWR8fDApLEcud3JpdGVfc2hpZnQoMiw2NTUyNHxnZSkpOihHLndyaXRlX3NoaWZ0KDIsUy5udW1GbXRJZHx8MCksRy53cml0ZV9zaGlmdCgyLFI8PDR8Z2UpKTt2YXIgcGU9Uy5hbGlnbm1lbnR8fHt9O2lmKG9lKXt2YXIgeWU9MCxQZT0w''@;'; put 'put ''O0Q1LmluZGV4T2YocGUuaG9yaXpvbnRhbCk+LTEmJih5ZXw9RDUuaW5kZXhPZihwZS5ob3Jpem9udGFsKSkscGUud3JhcFRleHQmJih5ZXw9OCksdDguaW5kZXhPZihwZS52ZXJ0aWNhbCk+LTE/eWV8PXQ4LmluZGV4T2YocGUudmVydGljYWwpPDw0Om51bGw9PXBlLnZlcnRpY2FsJiYoeWV8''@;'; put 'put ''PTMyKSxHLndyaXRlX3NoaWZ0KDEseWUpLEcud3JpdGVfc2hpZnQoMSwwKSxwZS5zaHJpbmtUb0ZpdCYmKFBlfD0xNiksRy53cml0ZV9zaGlmdCgyLFBlKTt2YXIgTmU9bnVsbDtudWxsIT1TLmJvcmRlcklkJiYoTmU9ay5Cb3JkZXJzJiZrLkJvcmRlcnNbUy5ib3JkZXJJZHx8MF18fHt9KTt2''@;'; put 'put ''YXIgWWU9MCxldD0wLGN0PTA7TmUmJihudWxsIT1OZS5sZWZ0JiZOZS5sZWZ0LnN0eWxlJiYoWWV8PShjdD1wZC5pbmRleE9mKE5lLmxlZnQuc3R5bGUpKT4tMT9jdDowKSxudWxsIT1OZS5yaWdodCYmTmUucmlnaHQuc3R5bGUmJihZZXw9KChjdD1wZC5pbmRleE9mKE5lLnJpZ2h0LnN0eWxl''@;'; put 'put ''KSk+LTE/Y3Q6MCk8PDQpLG51bGwhPU5lLnRvcCYmTmUudG9wLnN0eWxlJiYoZXR8PShjdD1wZC5pbmRleE9mKE5lLnRvcC5zdHlsZSkpPi0xP2N0OjApLG51bGwhPU5lLmJvdHRvbSYmTmUuYm90dG9tLnN0eWxlJiYoZXR8PSgoY3Q9cGQuaW5kZXhPZihOZS5ib3R0b20uc3R5bGUpKT4tMT9j''@;'; put 'put ''dDowKTw8NCkpLEcud3JpdGVfc2hpZnQoMSxZZSksRy53cml0ZV9zaGlmdCgxLGV0KSxHLndyaXRlX3NoaWZ0KDIsMCksRy53cml0ZV9zaGlmdCgyLDApLEcud3JpdGVfc2hpZnQoMSwwKTt2YXIgRXQ9MCxhdD1rLkZpbGxzJiZrLkZpbGxzW1MuZmlsbElkfHwwXXx8e307KGF0LmZnQ29sb3J8''@;'; put 'put ''fGF0LmJnQ29sb3IpJiYoRXR8PTQpLEcud3JpdGVfc2hpZnQoMSxFdCk7dmFyIGJ0PTA7YnR8PVA0KGF0LmZnQ29sb3IsNjUpLGJ0fD1QNChhdC5iZ0NvbG9yLDY1KTw8NyxHLndyaXRlX3NoaWZ0KDIsYnQpfWVsc2UgRy53cml0ZV9zaGlmdCg0LDApLEcud3JpdGVfc2hpZnQoNCwwKSxHLndy''@;'; put 'put ''aXRlX3NoaWZ0KDIsMCk7cmV0dXJuIEd9ZnVuY3Rpb24gRTQoUyxSLGspe3ZhciBHPXcwKFMpOygyPT1rLmJpZmZ8fDk9PVIpJiYrK1MubDt2YXIgUT1mdW5jdGlvbiBVbChTKXt2YXIgUj1TLnJlYWRfc2hpZnQoMSk7cmV0dXJuIDE9PT1TLnJlYWRfc2hpZnQoMSk/UjoxPT09Un0oUyk7cmV0''@;'; put 'put ''dXJuIEcudmFsPVEsRy50PSEwPT09UXx8ITE9PT1RPyJiIjoiZSIsR312YXIgSkE9ZnVuY3Rpb24gdjUoUyxSLGspe3JldHVybiAwPT09Uj8iIjpYMChTLDAsayl9O2Z1bmN0aW9uIGVDKFMsUixrKXt2YXIgUSxHPVMucmVhZF9zaGlmdCgyKSxvZT17ZkJ1aWx0SW46MSZHLGZXYW50QWR2aXNl''@;'; put 'put ''Okc+Pj4xJjEsZldhbnRQaWN0Okc+Pj4yJjEsZk9sZTpHPj4+MyYxLGZPbGVMaW5rOkc+Pj40JjEsY2Y6Rz4+PjUmMTAyMyxmSWNvbjpHPj4+MTUmMX07cmV0dXJuIDE0ODQ5PT09ay5zYmNjaCYmKFE9ZnVuY3Rpb24gejYoUyxSLGspe1MubCs9NDt2YXIgRz1TLmwrKFItPTQpLFE9VWEoUyww''@;'; put 'put ''LGspLG9lPVMucmVhZF9zaGlmdCgyKTtpZihvZSE9PShHLT1TLmwpKXRocm93IG5ldyBFcnJvcigiTWFsZm9ybWVkIEFkZGluVWRmOiBwYWRkaW5nID0gIitHKyIgIT0gIitvZSk7cmV0dXJuIFMubCs9b2UsUX0oUyxSLTIsaykpLG9lLmJvZHk9UXx8Uy5yZWFkX3NoaWZ0KFItMiksInN0cmlu''@;'; put 'put ''ZyI9PXR5cGVvZiBRJiYob2UuTmFtZT1RKSxvZX12YXIgY1Y9WyJfeGxubS5Db25zb2xpZGF0ZV9BcmVhIiwiX3hsbm0uQXV0b19PcGVuIiwiX3hsbm0uQXV0b19DbG9zZSIsIl94bG5tLkV4dHJhY3QiLCJfeGxubS5EYXRhYmFzZSIsIl94bG5tLkNyaXRlcmlhIiwiX3hsbm0uUHJpbnRfQXJl''@;'; put 'put ''YSIsIl94bG5tLlByaW50X1RpdGxlcyIsIl94bG5tLlJlY29yZGVyIiwiX3hsbm0uRGF0YV9Gb3JtIiwiX3hsbm0uQXV0b19BY3RpdmF0ZSIsIl94bG5tLkF1dG9fRGVhY3RpdmF0ZSIsIl94bG5tLlNoZWV0X1RpdGxlIiwiX3hsbm0uX0ZpbHRlckRhdGFiYXNlIl07ZnVuY3Rpb24gdEMoUyxS''@;'; put 'put ''LGspe3ZhciBHPVMubCtSLFE9Uy5yZWFkX3NoaWZ0KDIpLG9lPVMucmVhZF9zaGlmdCgxKSxnZT1TLnJlYWRfc2hpZnQoMSkscGU9Uy5yZWFkX3NoaWZ0KGsmJjI9PWsuYmlmZj8xOjIpLHllPTA7KCFrfHxrLmJpZmY+PTUpJiYoNSE9ay5iaWZmJiYoUy5sKz0yKSx5ZT1TLnJlYWRfc2hpZnQo''@;'; put 'put ''MiksNT09ay5iaWZmJiYoUy5sKz0yKSxTLmwrPTQpO3ZhciBQZT1yYyhTLGdlLGspOzMyJlEmJihQZT1jVltQZS5jaGFyQ29kZUF0KDApXSk7dmFyIE5lPUctUy5sO2smJjI9PWsuYmlmZiYmLS1OZTt2YXIgWWU9RyE9Uy5sJiYwIT09cGUmJk5lPjA/ZnVuY3Rpb24gQW5lKFMsUixrLEcpe3Zh''@;'; put 'put ''ciBnZSxRPVMubCtSLG9lPWxoKFMsRyxrKTtyZXR1cm4gUSE9PVMubCYmKGdlPUI0KFMsUS1TLmwsb2UsaykpLFtvZSxnZV19KFMsTmUsayxwZSk6W107cmV0dXJue2NoS2V5Om9lLE5hbWU6UGUsaXRhYjp5ZSxyZ2NlOlllfX1mdW5jdGlvbiBUdihTLFIsayl7aWYoay5iaWZmPDgpcmV0dXJu''@;'; put 'put ''IGZ1bmN0aW9uIG5DKFMsUixrKXszPT1TW1MubCsxXSYmU1tTLmxdKys7dmFyIEc9VWEoUywwLGspO3JldHVybiAzPT1HLmNoYXJDb2RlQXQoMCk/Ry5zbGljZSgxKTpHfShTLDAsayk7Zm9yKHZhciBHPVtdLFE9Uy5sK1Isb2U9Uy5yZWFkX3NoaWZ0KGsuYmlmZj44PzQ6Mik7MCE9b2UtLTsp''@;'; put 'put ''Ry5wdXNoKHhmKFMsMCxrKSk7aWYoUy5sIT1RKXRocm93IG5ldyBFcnJvcigiQmFkIEV4dGVyblNoZWV0OiAiK1MubCsiICE9ICIrUSk7cmV0dXJuIEd9ZnVuY3Rpb24ga3YoUyxSLGspe3ZhciBHPWdjKFMsNik7c3dpdGNoKGsuYmlmZil7Y2FzZSAyOlMubCsrLFItPTc7YnJlYWs7Y2FzZSAz''@;'; put 'put ''OmNhc2UgNDpTLmwrPTIsUi09ODticmVhaztkZWZhdWx0OlMubCs9NixSLT0xMn1yZXR1cm5bRyxjRChTLFIsayldfXZhciBlaz1bXTtmdW5jdGlvbiBmVihTKXt2YXIgUj1ibigyNCksaz1ObyhTWzBdKTtSLndyaXRlX3NoaWZ0KDIsay5yKSxSLndyaXRlX3NoaWZ0KDIsay5yKSxSLndyaXRl''@;'; put 'put ''X3NoaWZ0KDIsay5jKSxSLndyaXRlX3NoaWZ0KDIsay5jKTtmb3IodmFyIEc9ImQwIGM5IGVhIDc5IGY5IGJhIGNlIDExIDhjIDgyIDAwIGFhIDAwIDRiIGE5IDBiIi5zcGxpdCgiICIpLFE9MDtRPDE2OysrUSlSLndyaXRlX3NoaWZ0KDEscGFyc2VJbnQoR1tRXSwxNikpO3JldHVybiBqKFtS''@;'; put 'put ''LFM0KFNbMV0pXSl9ZnVuY3Rpb24gZ1YoUyl7dmFyIFI9U1sxXS5Ub29sdGlwLGs9Ym4oMTArMiooUi5sZW5ndGgrMSkpO2sud3JpdGVfc2hpZnQoMiwyMDQ4KTt2YXIgRz1ObyhTWzBdKTtrLndyaXRlX3NoaWZ0KDIsRy5yKSxrLndyaXRlX3NoaWZ0KDIsRy5yKSxrLndyaXRlX3NoaWZ0KDIs''@;'; put 'put ''Ry5jKSxrLndyaXRlX3NoaWZ0KDIsRy5jKTtmb3IodmFyIFE9MDtRPFIubGVuZ3RoOysrUSlrLndyaXRlX3NoaWZ0KDIsUi5jaGFyQ29kZUF0KFEpKTtyZXR1cm4gay53cml0ZV9zaGlmdCgyLDApLGt9ZnVuY3Rpb24gckMoUyxSLGspe2lmKCFrLmNlbGxTdHlsZXMpcmV0dXJuIEluKFMsUik7''@;'; put 'put ''dmFyIEc9ayYmay5iaWZmPj0xMj80OjIsUT1TLnJlYWRfc2hpZnQoRyksb2U9Uy5yZWFkX3NoaWZ0KEcpLGdlPVMucmVhZF9zaGlmdChHKSxwZT1TLnJlYWRfc2hpZnQoRykseWU9Uy5yZWFkX3NoaWZ0KDIpOzI9PUcmJihTLmwrPTIpO3ZhciBQZT17czpRLGU6b2UsdzpnZSxpeGZlOnBlLGZs''@;'; put 'put ''YWdzOnllfTtyZXR1cm4oay5iaWZmPj01fHwhay5iaWZmKSYmKFBlLmxldmVsPXllPj44JjcpLFBlfWVrWzhdPWZ1bmN0aW9uKFMsUil7dmFyIGs9Uy5sK1I7Uy5sKz0xMDt2YXIgRz1TLnJlYWRfc2hpZnQoMik7Uy5sKz00LFMubCs9MixTLmwrPTIsUy5sKz0yLFMubCs9NDt2YXIgUT1TLnJl''@;'; put 'put ''YWRfc2hpZnQoMSk7cmV0dXJuIFMubCs9USxTLmw9ayx7Zm10Okd9fTt2YXIgUXRlPXcwLG5rPXc0LE8wPW51O3ZhciBCMz1mdW5jdGlvbigpe3ZhciBTPXsxOjQzNywyOjg1MCwzOjEyNTIsNDoxZTQsMTAwOjg1MiwxMDE6ODY2LDEwMjo4NjUsMTAzOjg2MSwxMDQ6ODk1LDEwNTo2MjAsMTA2''@;'; put 'put ''OjczNywxMDc6ODU3LDEyMDo5NTAsMTIxOjk0OSwxMjI6OTM2LDEyMzo5MzIsMTI0Ojg3NCwxMjU6MTI1NSwxMjY6MTI1NiwxNTA6MTAwMDcsMTUxOjEwMDI5LDE1MjoxMDAwNiwyMDA6MTI1MCwyMDE6MTI1MSwyMDI6MTI1NCwyMDM6MTI1MywwOjIwMTI3LDg6ODY1LDk6NDM3LDEwOjg1MCwx''@;'; put 'put ''MTo0MzcsMTM6NDM3LDE0Ojg1MCwxNTo0MzcsMTY6ODUwLDE3OjQzNywxODo4NTAsMTk6OTMyLDIwOjg1MCwyMTo0MzcsMjI6ODUwLDIzOjg2NSwyNDo0MzcsMjU6NDM3LDI2Ojg1MCwyNzo0MzcsMjg6ODYzLDI5Ojg1MCwzMTo4NTIsMzQ6ODUyLDM1Ojg1MiwzNjo4NjAsMzc6ODUwLDM4Ojg2''@;'; put 'put ''Niw1NTo4NTAsNjQ6ODUyLDc3OjkzNiw3ODo5NDksNzk6OTUwLDgwOjg3NCw4NzoxMjUyLDg4OjEyNTIsODk6MTI1MiwxMDg6ODYzLDEzNDo3MzcsMTM1Ojg1MiwxMzY6ODU3LDIwNDoxMjU3LDI1NToxNjk2OX0sUj1WZSh7MTo0MzcsMjo4NTAsMzoxMjUyLDQ6MWU0LDEwMDo4NTIsMTAxOjg2''@;'; put 'put ''NiwxMDI6ODY1LDEwMzo4NjEsMTA0Ojg5NSwxMDU6NjIwLDEwNjo3MzcsMTA3Ojg1NywxMjA6OTUwLDEyMTo5NDksMTIyOjkzNiwxMjM6OTMyLDEyNDo4NzQsMTI1OjEyNTUsMTI2OjEyNTYsMTUwOjEwMDA3LDE1MToxMDAyOSwxNTI6MTAwMDYsMjAwOjEyNTAsMjAxOjEyNTEsMjAyOjEyNTQs''@;'; put 'put ''MjAzOjEyNTMsMDoyMDEyN30pO2Z1bmN0aW9uIFEoeWUsUGUpe3ZhciBOZT1QZXx8e307cmV0dXJuIE5lLmRhdGVORnx8KE5lLmRhdGVORj0ieXl5eW1tZGQiKSxwNChmdW5jdGlvbiBHKHllLFBlKXt2YXIgTmU9W10sWWU9VigxKTtzd2l0Y2goUGUudHlwZSl7Y2FzZSJiYXNlNjQiOlllPWIo''@;'; put 'put ''X2UuZGVjb2RlKHllKSk7YnJlYWs7Y2FzZSJiaW5hcnkiOlllPWIoeWUpO2JyZWFrO2Nhc2UiYnVmZmVyIjpjYXNlImFycmF5IjpZZT15ZX1tbihZZSwwKTt2YXIgZXQ9WWUucmVhZF9zaGlmdCgxKSxjdD0hISgxMzYmZXQpLEV0PSExLGF0PSExO3N3aXRjaChldCl7Y2FzZSAyOmNhc2UgMzpj''@;'; put 'put ''YXNlIDEzMTpjYXNlIDEzOTpjYXNlIDI0NTpicmVhaztjYXNlIDQ4OmNhc2UgNDk6RXQ9ITAsY3Q9ITA7YnJlYWs7Y2FzZSAxNDA6YXQ9ITA7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkRCRiBVbnN1cHBvcnRlZCBWZXJzaW9uOiAiK2V0LnRvU3RyaW5nKDE2KSl9dmFyIGJ0PTAs''@;'; put 'put ''anQ9NTIxOzI9PWV0JiYoYnQ9WWUucmVhZF9zaGlmdCgyKSksWWUubCs9MywyIT1ldCYmKGJ0PVllLnJlYWRfc2hpZnQoNCkpLGJ0PjEwNDg1NzYmJihidD0xZTYpLDIhPWV0JiYoanQ9WWUucmVhZF9zaGlmdCgyKSk7dmFyIGt0PVllLnJlYWRfc2hpZnQoMiksT3Q9UGUuY29kZXBhZ2V8fDEy''@;'; put 'put ''NTI7MiE9ZXQmJihZZS5sKz0xNixZZS5yZWFkX3NoaWZ0KDEpLDAhPT1ZZVtZZS5sXSYmKE90PVNbWWVbWWUubF1dKSxZZS5sKz0xLFllLmwrPTIpLGF0JiYoWWUubCs9MzYpO2Zvcih2YXIgS3Q9W10sVG49e30scnI9TWF0aC5taW4oWWUubGVuZ3RoLDI9PWV0PzUyMTpqdC0xMC0oRXQ/MjY0''@;'; put 'put ''OjApKSxTbj1hdD8zMjoxMTtZZS5sPHJyJiYxMyE9WWVbWWUubF07KXN3aXRjaChUbj17fSxUbi5uYW1lPWNwdGFibGUudXRpbHMuZGVjb2RlKE90LFllLnNsaWNlKFllLmwsWWUubCtTbikpLnJlcGxhY2UoL1tcdTAwMDBcclxuXS4qJC9nLCIiKSxZZS5sKz1TbixUbi50eXBlPVN0cmluZy5m''@;'; put 'put ''cm9tQ2hhckNvZGUoWWUucmVhZF9zaGlmdCgxKSksMiE9ZXQmJiFhdCYmKFRuLm9mZnNldD1ZZS5yZWFkX3NoaWZ0KDQpKSxUbi5sZW49WWUucmVhZF9zaGlmdCgxKSwyPT1ldCYmKFRuLm9mZnNldD1ZZS5yZWFkX3NoaWZ0KDIpKSxUbi5kZWM9WWUucmVhZF9zaGlmdCgxKSxUbi5uYW1lLmxl''@;'; put 'put ''bmd0aCYmS3QucHVzaChUbiksMiE9ZXQmJihZZS5sKz1hdD8xMzoxNCksVG4udHlwZSl7Y2FzZSJCIjooIUV0fHw4IT1Ubi5sZW4pJiZQZS5XVEYmJmNvbnNvbGUubG9nKCJTa2lwcGluZyAiK1RuLm5hbWUrIjoiK1RuLnR5cGUpO2JyZWFrO2Nhc2UiRyI6Y2FzZSJQIjpQZS5XVEYmJmNvbnNv''@;'; put 'put ''bGUubG9nKCJTa2lwcGluZyAiK1RuLm5hbWUrIjoiK1RuLnR5cGUpO2JyZWFrO2Nhc2UiKyI6Y2FzZSIwIjpjYXNlIkAiOmNhc2UiQyI6Y2FzZSJEIjpjYXNlIkYiOmNhc2UiSSI6Y2FzZSJMIjpjYXNlIk0iOmNhc2UiTiI6Y2FzZSJPIjpjYXNlIlQiOmNhc2UiWSI6YnJlYWs7ZGVmYXVsdDp0''@;'; put 'put ''aHJvdyBuZXcgRXJyb3IoIlVua25vd24gRmllbGQgVHlwZTogIitUbi50eXBlKX1pZigxMyE9PVllW1llLmxdJiYoWWUubD1qdC0xKSwxMyE9PVllLnJlYWRfc2hpZnQoMSkpdGhyb3cgbmV3IEVycm9yKCJEQkYgVGVybWluYXRvciBub3QgZm91bmQgIitZZS5sKyIgIitZZVtZZS5sXSk7WWUu''@;'; put 'put ''bD1qdDt2YXIgbHI9MCxYbj0wO2ZvcihOZVswXT1bXSxYbj0wO1huIT1LdC5sZW5ndGg7KytYbilOZVswXVtYbl09S3RbWG5dLm5hbWU7Zm9yKDtidC0tID4wOylpZig0MiE9PVllW1llLmxdKWZvcigrK1llLmwsTmVbKytscl09W10sWG49MCxYbj0wO1huIT1LdC5sZW5ndGg7KytYbil7dmFy''@;'; put 'put ''IEJuPVllLnNsaWNlKFllLmwsWWUubCtLdFtYbl0ubGVuKTtZZS5sKz1LdFtYbl0ubGVuLG1uKEJuLDApO3ZhciBmcj1jcHRhYmxlLnV0aWxzLmRlY29kZShPdCxCbik7c3dpdGNoKEt0W1huXS50eXBlKXtjYXNlIkMiOmZyLnRyaW0oKS5sZW5ndGgmJihOZVtscl1bWG5dPWZyLnJlcGxhY2Uo''@;'; put 'put ''L1xzKyQvLCIiKSk7YnJlYWs7Y2FzZSJEIjpOZVtscl1bWG5dPTg9PT1mci5sZW5ndGg/bmV3IERhdGUoK2ZyLnNsaWNlKDAsNCksK2ZyLnNsaWNlKDQsNiktMSwrZnIuc2xpY2UoNiw4KSk6ZnI7YnJlYWs7Y2FzZSJGIjpOZVtscl1bWG5dPXBhcnNlRmxvYXQoZnIudHJpbSgpKTticmVhaztj''@;'; put 'put ''YXNlIisiOmNhc2UiSSI6TmVbbHJdW1huXT1hdD8yMTQ3NDgzNjQ4XkJuLnJlYWRfc2hpZnQoLTQsImkiKTpCbi5yZWFkX3NoaWZ0KDQsImkiKTticmVhaztjYXNlIkwiOnN3aXRjaChmci50cmltKCkudG9VcHBlckNhc2UoKSl7Y2FzZSJZIjpjYXNlIlQiOk5lW2xyXVtYbl09ITA7YnJlYWs7''@;'; put 'put ''Y2FzZSJOIjpjYXNlIkYiOk5lW2xyXVtYbl09ITE7YnJlYWs7Y2FzZSIiOmNhc2UiPyI6YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkRCRiBVbnJlY29nbml6ZWQgTDp8IitmcisifCIpfWJyZWFrO2Nhc2UiTSI6aWYoIWN0KXRocm93IG5ldyBFcnJvcigiREJGIFVuZXhwZWN0ZWQg''@;'; put 'put ''TUVNTyBmb3IgdHlwZSAiK2V0LnRvU3RyaW5nKDE2KSk7TmVbbHJdW1huXT0iIyNNRU1PIyMiKyhhdD9wYXJzZUludChmci50cmltKCksMTApOkJuLnJlYWRfc2hpZnQoNCkpO2JyZWFrO2Nhc2UiTiI6KGZyPWZyLnJlcGxhY2UoL1x1MDAwMC9nLCIiKS50cmltKCkpJiYiLiIhPWZyJiYoTmVb''@;'; put 'put ''bHJdW1huXT0rZnJ8fDApO2JyZWFrO2Nhc2UiQCI6TmVbbHJdW1huXT1uZXcgRGF0ZShCbi5yZWFkX3NoaWZ0KC04LCJmIiktNjIxMzU2ODMyZTUpO2JyZWFrO2Nhc2UiVCI6TmVbbHJdW1huXT1uZXcgRGF0ZSg4NjRlNSooQm4ucmVhZF9zaGlmdCg0KS0yNDQwNTg4KStCbi5yZWFkX3NoaWZ0''@;'; put 'put ''KDQpKTticmVhaztjYXNlIlkiOk5lW2xyXVtYbl09Qm4ucmVhZF9zaGlmdCg0LCJpIikvMWU0O2JyZWFrO2Nhc2UiTyI6TmVbbHJdW1huXT0tQm4ucmVhZF9zaGlmdCgtOCwiZiIpO2JyZWFrO2Nhc2UiQiI6aWYoRXQmJjg9PUt0W1huXS5sZW4pe05lW2xyXVtYbl09Qm4ucmVhZF9zaGlmdCg4''@;'; put 'put ''LCJmIik7YnJlYWt9Y2FzZSJHIjpjYXNlIlAiOkJuLmwrPUt0W1huXS5sZW47YnJlYWs7Y2FzZSIwIjppZigiX051bGxGbGFncyI9PT1LdFtYbl0ubmFtZSlicmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiREJGIFVuc3VwcG9ydGVkIGRhdGEgdHlwZSAiK0t0W1huXS50eXBlKX19ZWxz''@;'; put 'put ''ZSBZZS5sKz1rdDtpZigyIT1ldCYmWWUubDxZZS5sZW5ndGgmJjI2IT1ZZVtZZS5sKytdKXRocm93IG5ldyBFcnJvcigiREJGIEVPRiBNYXJrZXIgbWlzc2luZyAiKyhZZS5sLTEpKyIgb2YgIitZZS5sZW5ndGgrIiAiK1llW1llLmwtMV0udG9TdHJpbmcoMTYpKTtyZXR1cm4gUGUmJlBlLnNo''@;'; put 'put ''ZWV0Um93cyYmKE5lPU5lLnNsaWNlKDAsUGUuc2hlZXRSb3dzKSksTmV9KHllLE5lKSxOZSl9dmFyIGdlPXtCOjgsQzoyNTAsTDoxLEQ6OCwiPyI6MCwiIjowfTtyZXR1cm57dmVyc2lvbnM6WzIsMyw0OCw0OSwxMzEsMTM5LDE0MCwyNDVdLHRvX3dvcmtib29rOmZ1bmN0aW9uIG9lKHllLFBl''@;'; put 'put ''KXt0cnl7cmV0dXJuIHRoKFEoeWUsUGUpLFBlKX1jYXRjaChOZSl7aWYoUGUmJlBlLldURil0aHJvdyBOZX1yZXR1cm57U2hlZXROYW1lczpbXSxTaGVldHM6e319fSx0b19zaGVldDpRLGZyb21fc2hlZXQ6ZnVuY3Rpb24gcGUoeWUsUGUpe3ZhciBOZT1QZXx8e307aWYoK05lLmNvZGVwYWdl''@;'; put 'put ''Pj0wJiZVKCtOZS5jb2RlcGFnZSksInN0cmluZyI9PU5lLnR5cGUpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3Qgd3JpdGUgREJGIHRvIEpTIHN0cmluZyIpO3ZhciBZZT1iaSgpLGV0PUs0KHllLHtoZWFkZXI6MSxyYXc6ITAsY2VsbERhdGVzOiEwfSksY3Q9ZXRbMF0sRXQ9ZXQuc2xpY2UoMSks''@;'; put 'put ''YXQ9MCxidD0wLGp0PTAsa3Q9MTtmb3IoYXQ9MDthdDxjdC5sZW5ndGg7KythdClpZihudWxsIT1hdCl7aWYoKytqdCwibnVtYmVyIj09dHlwZW9mIGN0W2F0XSYmKGN0W2F0XT1jdFthdF0udG9TdHJpbmcoMTApKSwic3RyaW5nIiE9dHlwZW9mIGN0W2F0XSl0aHJvdyBuZXcgRXJyb3IoIkRC''@;'; put 'put ''RiBJbnZhbGlkIGNvbHVtbiBuYW1lICIrY3RbYXRdKyIgfCIrdHlwZW9mIGN0W2F0XSsifCIpO2lmKGN0LmluZGV4T2YoY3RbYXRdKSE9PWF0KWZvcihidD0wO2J0PDEwMjQ7KytidClpZigtMT09Y3QuaW5kZXhPZihjdFthdF0rIl8iK2J0KSl7Y3RbYXRdKz0iXyIrYnQ7YnJlYWt9fXZhciBP''@;'; put 'put ''dD1vbyh5ZVsiIXJlZiJdKSxLdD1bXTtmb3IoYXQ9MDthdDw9T3QuZS5jLU90LnMuYzsrK2F0KXt2YXIgVG49W107Zm9yKGJ0PTA7YnQ8RXQubGVuZ3RoOysrYnQpbnVsbCE9RXRbYnRdW2F0XSYmVG4ucHVzaChFdFtidF1bYXRdKTtpZigwIT1Ubi5sZW5ndGgmJm51bGwhPWN0W2F0XSl7dmFy''@;'; put 'put ''IHJyPSIiLFNuPSIiO2ZvcihidD0wO2J0PFRuLmxlbmd0aDsrK2J0KXtzd2l0Y2godHlwZW9mIFRuW2J0XSl7Y2FzZSJudW1iZXIiOlNuPSJCIjticmVhaztjYXNlInN0cmluZyI6ZGVmYXVsdDpTbj0iQyI7YnJlYWs7Y2FzZSJib29sZWFuIjpTbj0iTCI7YnJlYWs7Y2FzZSJvYmplY3QiOlNu''@;'; put 'put ''PVRuW2J0XWluc3RhbmNlb2YgRGF0ZT8iRCI6IkMifWlmKCJDIj09KHJyPXJyJiZyciE9U24/IkMiOlNuKSlicmVha31rdCs9Z2VbcnJdfHwwLEt0W2F0XT1ycn1lbHNlIEt0W2F0XT0iPyJ9dmFyIGxyPVllLm5leHQoMzIpO2Zvcihsci53cml0ZV9zaGlmdCg0LDMxODkwMjU3NiksbHIud3Jp''@;'; put 'put ''dGVfc2hpZnQoNCxFdC5sZW5ndGgpLGxyLndyaXRlX3NoaWZ0KDIsMjk2KzMyKmp0KSxsci53cml0ZV9zaGlmdCgyLGt0KSxhdD0wO2F0PDQ7KythdClsci53cml0ZV9zaGlmdCg0LDApO2Zvcihsci53cml0ZV9zaGlmdCg0LCgrUltGXXx8Myk8PDgpLGF0PTAsYnQ9MDthdDxjdC5sZW5ndGg7''@;'; put 'put ''KythdClpZihudWxsIT1jdFthdF0pe3ZhciBYbj1ZZS5uZXh0KDMyKSxCbj0oY3RbYXRdLnNsaWNlKC0xMCkrIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDAiKS5zbGljZSgwLDExKTtYbi53cml0ZV9zaGlmdCgxLEJuLCJzYmNzIiksWG4ud3JpdGVfc2hpZnQoMSwiPyI9PUt0W2F0XT8iQyI6S3Rb''@;'; put 'put ''YXRdLCJzYmNzIiksWG4ud3JpdGVfc2hpZnQoNCxidCksWG4ud3JpdGVfc2hpZnQoMSxnZVtLdFthdF1dfHwwKSxYbi53cml0ZV9zaGlmdCgxLDApLFhuLndyaXRlX3NoaWZ0KDEsMiksWG4ud3JpdGVfc2hpZnQoNCwwKSxYbi53cml0ZV9zaGlmdCgxLDApLFhuLndyaXRlX3NoaWZ0KDQsMCks''@;'; put 'put ''WG4ud3JpdGVfc2hpZnQoNCwwKSxidCs9Z2VbS3RbYXRdXXx8MH12YXIgZnI9WWUubmV4dCgyNjQpO2Zvcihmci53cml0ZV9zaGlmdCg0LDEzKSxhdD0wO2F0PDY1OysrYXQpZnIud3JpdGVfc2hpZnQoNCwwKTtmb3IoYXQ9MDthdDxFdC5sZW5ndGg7KythdCl7dmFyIGJyPVllLm5leHQoa3Qp''@;'; put 'put ''O2Zvcihici53cml0ZV9zaGlmdCgxLDApLGJ0PTA7YnQ8Y3QubGVuZ3RoOysrYnQpaWYobnVsbCE9Y3RbYnRdKXN3aXRjaChLdFtidF0pe2Nhc2UiTCI6YnIud3JpdGVfc2hpZnQoMSxudWxsPT1FdFthdF1bYnRdPzYzOkV0W2F0XVtidF0/ODQ6NzApO2JyZWFrO2Nhc2UiQiI6YnIud3JpdGVf''@;'; put 'put ''c2hpZnQoOCxFdFthdF1bYnRdfHwwLCJmIik7YnJlYWs7Y2FzZSJEIjpFdFthdF1bYnRdPyhici53cml0ZV9zaGlmdCg0LCgiMDAwMCIrRXRbYXRdW2J0XS5nZXRGdWxsWWVhcigpKS5zbGljZSgtNCksInNiY3MiKSxici53cml0ZV9zaGlmdCgyLCgiMDAiKyhFdFthdF1bYnRdLmdldE1vbnRo''@;'; put 'put ''KCkrMSkpLnNsaWNlKC0yKSwic2JjcyIpLGJyLndyaXRlX3NoaWZ0KDIsKCIwMCIrRXRbYXRdW2J0XS5nZXREYXRlKCkpLnNsaWNlKC0yKSwic2JjcyIpKTpici53cml0ZV9zaGlmdCg4LCIwMDAwMDAwMCIsInNiY3MiKTticmVhaztjYXNlIkMiOnZhciBlcj1TdHJpbmcoRXRbYXRdW2J0XXx8''@;'; put 'put ''IiIpO2Zvcihici53cml0ZV9zaGlmdCgxLGVyLCJzYmNzIiksanQ9MDtqdDwyNTAtZXIubGVuZ3RoOysranQpYnIud3JpdGVfc2hpZnQoMSwzMil9fXJldHVybiBZZS5uZXh0KDEpLndyaXRlX3NoaWZ0KDEsMjYpLFllLmVuZCgpfX19KCksY0M9ZnVuY3Rpb24oKXt2YXIgUz17QUE6Ilx4YzAi''@;'; put 'put ''LEJBOiJceGMxIixDQToiXHhjMiIsREE6MTk1LEhBOiJceGM0IixKQToxOTcsQUU6Ilx4YzgiLEJFOiJceGM5IixDRToiXHhjYSIsSEU6Ilx4Y2IiLEFJOiJceGNjIixCSToiXHhjZCIsQ0k6Ilx4Y2UiLEhJOiJceGNmIixBTzoiXHhkMiIsQk86Ilx4ZDMiLENPOiJceGQ0IixETzoyMTMsSE86''@;'; put 'put ''Ilx4ZDYiLEFVOiJceGQ5IixCVToiXHhkYSIsQ1U6Ilx4ZGIiLEhVOiJceGRjIixBYToiXHhlMCIsQmE6Ilx4ZTEiLENhOiJceGUyIixEYToyMjcsSGE6Ilx4ZTQiLEphOjIyOSxBZToiXHhlOCIsQmU6Ilx4ZTkiLENlOiJceGVhIixIZToiXHhlYiIsQWk6Ilx4ZWMiLEJpOiJceGVkIixDaToi''@;'; put 'put ''XHhlZSIsSGk6Ilx4ZWYiLEFvOiJceGYyIixCbzoiXHhmMyIsQ286Ilx4ZjQiLERvOjI0NSxIbzoiXHhmNiIsQXU6Ilx4ZjkiLEJ1OiJceGZhIixDdToiXHhmYiIsSHU6Ilx4ZmMiLEtDOiJceGM3IixLYzoiXHhlNyIscToiXHhlNiIsejoiXHUwMTUzIixhOiJceGM2IixqOiJcdTAxNTIiLERO''@;'; put 'put ''OjIwOSxEbjoyNDEsSHk6MjU1LFM6MTY5LGM6MTcwLFI6MTc0LCJCICI6MTgwLDA6MTc2LDE6MTc3LDI6MTc4LDM6MTc5LDU6MTgxLDY6MTgyLDc6MTgzLFE6MTg1LGs6MTg2LGI6MjA4LGk6MjE2LGw6MjIyLHM6MjQwLHk6MjQ4LCIhIjoxNjEsJyInOjE2MiwiIyI6MTYzLCIoIjoxNjQsIiUi''@;'; put 'put ''OjE2NSwiJyI6MTY3LCJIICI6MTY4LCIrIjoxNzEsIjsiOjE4NywiPCI6MTg4LCI9IjoxODksIj4iOjE5MCwiPyI6MTkxLCJ7IjoyMjN9LFI9bmV3IFJlZ0V4cCgiXHgxYk4oIitPZShTKS5qb2luKCJ8IikucmVwbGFjZSgvXHxcfFx8LywifFxcfHwiKS5yZXBsYWNlKC8oWz8oKStdKS9nLCJc''@;'; put 'put ''XCQxIikrInxcXHwpIiwiZ20iKSxrPWZ1bmN0aW9uKGV0LGN0KXt2YXIgRXQ9U1tjdF07cmV0dXJuIm51bWJlciI9PXR5cGVvZiBFdD9pZShFdCk6RXR9LEc9ZnVuY3Rpb24oZXQsY3QsRXQpe3ZhciBhdD1jdC5jaGFyQ29kZUF0KDApLTMyPDw0fEV0LmNoYXJDb2RlQXQoMCktNDg7cmV0dXJu''@;'; put 'put ''IDU5PT1hdD9ldDppZShhdCl9O2Z1bmN0aW9uIG9lKGV0LGN0KXt2YXIgZnIsRXQ9ZXQuc3BsaXQoL1tcblxyXSsvKSxhdD0tMSxidD0tMSxqdD0wLGt0PTAsT3Q9W10sS3Q9W10sVG49bnVsbCxycj17fSxTbj1bXSxscj1bXSxYbj1bXSxCbj0wO2ZvcigrY3QuY29kZXBhZ2U+PTAmJlUoK2N0''@;'; put 'put ''LmNvZGVwYWdlKTtqdCE9PUV0Lmxlbmd0aDsrK2p0KXtCbj0wO3ZhciBGaSxicj1FdFtqdF0udHJpbSgpLnJlcGxhY2UoL1x4MUIoW1x4MjAtXHgyRl0pKFtceDMwLVx4M0ZdKS9nLEcpLnJlcGxhY2UoUixrKSxlcj1ici5yZXBsYWNlKC87Oy9nLCJcMCIpLnNwbGl0KCI7IikubWFwKGZ1bmN0''@;'; put 'put ''aW9uKFppKXtyZXR1cm4gWmkucmVwbGFjZSgvXHUwMDAwL2csIjsiKX0pO2lmKGJyLmxlbmd0aD4wKXN3aXRjaChlclswXSl7Y2FzZSJJRCI6Y2FzZSJFIjpjYXNlIkIiOmNhc2UiTyI6Y2FzZSJXIjpicmVhaztjYXNlIlAiOiJQIj09ZXJbMV0uY2hhckF0KDApJiZLdC5wdXNoKGJyLnNsaWNl''@;'; put 'put ''KDMpLnJlcGxhY2UoLzs7L2csIjsiKSk7YnJlYWs7Y2FzZSJDIjp2YXIgbmE9ITEsY2E9ITEsTGk9ITEsa3I9ITEsVm49LTEsQnI9LTE7Zm9yKGt0PTE7a3Q8ZXIubGVuZ3RoOysra3Qpc3dpdGNoKGVyW2t0XS5jaGFyQXQoMCkpe2Nhc2UiQSI6Y2FzZSJHIjpicmVhaztjYXNlIlgiOmJ0PXBh''@;'; put 'put ''cnNlSW50KGVyW2t0XS5zbGljZSgxKSktMSxjYT0hMDticmVhaztjYXNlIlkiOmZvcihhdD1wYXJzZUludChlcltrdF0uc2xpY2UoMSkpLTEsY2F8fChidD0wKSxmcj1PdC5sZW5ndGg7ZnI8PWF0OysrZnIpT3RbZnJdPVtdO2JyZWFrO2Nhc2UiSyI6JyInPT09KEZpPWVyW2t0XS5zbGljZSgx''@;'; put 'put ''KSkuY2hhckF0KDApP0ZpPUZpLnNsaWNlKDEsRmkubGVuZ3RoLTEpOiJUUlVFIj09PUZpP0ZpPSEwOiJGQUxTRSI9PT1GaT9GaT0hMTppc05hTihRdChGaSkpP2lzTmFOKHNuKEZpKS5nZXREYXRlKCkpfHwoRmk9SGUoRmkpKTooRmk9UXQoRmkpLG51bGwhPT1UbiYmQS5pc19kYXRlKFRuKSYm''@;'; put 'put ''KEZpPXVuKEZpKSkpLHR5cGVvZiBjcHRhYmxlPCJ1IiYmInN0cmluZyI9PXR5cGVvZiBGaSYmInN0cmluZyIhPShjdHx8e30pLnR5cGUmJihjdHx8e30pLmNvZGVwYWdlJiYoRmk9Y3B0YWJsZS51dGlscy5kZWNvZGUoY3QuY29kZXBhZ2UsRmkpKSxuYT0hMDticmVhaztjYXNlIkUiOmtyPSEw''@;'; put 'put ''O3ZhciBfcj1INShlcltrdF0uc2xpY2UoMSkse3I6YXQsYzpidH0pO090W2F0XVtidF09W090W2F0XVtidF0sX3JdO2JyZWFrO2Nhc2UiUyI6TGk9ITAsT3RbYXRdW2J0XT1bT3RbYXRdW2J0XSwiUzVTIl07YnJlYWs7Y2FzZSJSIjpWbj1wYXJzZUludChlcltrdF0uc2xpY2UoMSkpLTE7YnJl''@;'; put 'put ''YWs7Y2FzZSJDIjpCcj1wYXJzZUludChlcltrdF0uc2xpY2UoMSkpLTE7YnJlYWs7ZGVmYXVsdDppZihjdCYmY3QuV1RGKXRocm93IG5ldyBFcnJvcigiU1lMSyBiYWQgcmVjb3JkICIrYnIpfWlmKG5hJiYoT3RbYXRdW2J0XSYmMj09T3RbYXRdW2J0XS5sZW5ndGg/T3RbYXRdW2J0XVswXT1G''@;'; put 'put ''aTpPdFthdF1bYnRdPUZpLFRuPW51bGwpLExpKXtpZihrcil0aHJvdyBuZXcgRXJyb3IoIlNZTEsgc2hhcmVkIGZvcm11bGEgY2Fubm90IGhhdmUgb3duIGZvcm11bGEiKTt2YXIgRm49Vm4+LTEmJk90W1ZuXVtCcl07aWYoIUZufHwhRm5bMV0pdGhyb3cgbmV3IEVycm9yKCJTWUxLIHNoYXJl''@;'; put 'put ''ZCBmb3JtdWxhIGNhbm5vdCBmaW5kIGJhc2UiKTtPdFthdF1bYnRdWzFdPUdrKEZuWzFdLHtyOmF0LVZuLGM6YnQtQnJ9KX1icmVhaztjYXNlIkYiOnZhciBqcj0wO2ZvcihrdD0xO2t0PGVyLmxlbmd0aDsrK2t0KXN3aXRjaChlcltrdF0uY2hhckF0KDApKXtjYXNlIlgiOmJ0PXBhcnNlSW50''@;'; put 'put ''KGVyW2t0XS5zbGljZSgxKSktMSwrK2pyO2JyZWFrO2Nhc2UiWSI6Zm9yKGF0PXBhcnNlSW50KGVyW2t0XS5zbGljZSgxKSktMSxmcj1PdC5sZW5ndGg7ZnI8PWF0OysrZnIpT3RbZnJdPVtdO2JyZWFrO2Nhc2UiTSI6Qm49cGFyc2VJbnQoZXJba3RdLnNsaWNlKDEpKS8yMDticmVhaztjYXNl''@;'; put 'put ''IkYiOmNhc2UiRyI6Y2FzZSJTIjpjYXNlIkQiOmNhc2UiTiI6YnJlYWs7Y2FzZSJQIjpUbj1LdFtwYXJzZUludChlcltrdF0uc2xpY2UoMSkpXTticmVhaztjYXNlIlciOmZvcihYbj1lcltrdF0uc2xpY2UoMSkuc3BsaXQoIiAiKSxmcj1wYXJzZUludChYblswXSwxMCk7ZnI8PXBhcnNlSW50''@;'; put 'put ''KFhuWzFdLDEwKTsrK2ZyKUJuPXBhcnNlSW50KFhuWzJdLDEwKSxscltmci0xXT0wPT09Qm4/e2hpZGRlbjohMH06e3djaDpCbn0sUTAobHJbZnItMV0pO2JyZWFrO2Nhc2UiQyI6bHJbYnQ9cGFyc2VJbnQoZXJba3RdLnNsaWNlKDEpKS0xXXx8KGxyW2J0XT17fSk7YnJlYWs7Y2FzZSJSIjpT''@;'; put 'put ''blthdD1wYXJzZUludChlcltrdF0uc2xpY2UoMSkpLTFdfHwoU25bYXRdPXt9KSxCbj4wPyhTblthdF0uaHB0PUJuLFNuW2F0XS5ocHg9c2goQm4pKTowPT09Qm4mJihTblthdF0uaGlkZGVuPSEwKTticmVhaztkZWZhdWx0OmlmKGN0JiZjdC5XVEYpdGhyb3cgbmV3IEVycm9yKCJTWUxLIGJh''@;'; put 'put ''ZCByZWNvcmQgIiticil9anI8MSYmKFRuPW51bGwpO2JyZWFrO2RlZmF1bHQ6aWYoY3QmJmN0LldURil0aHJvdyBuZXcgRXJyb3IoIlNZTEsgYmFkIHJlY29yZCAiK2JyKX19cmV0dXJuIFNuLmxlbmd0aD4wJiYocnJbIiFyb3dzIl09U24pLGxyLmxlbmd0aD4wJiYocnJbIiFjb2xzIl09bHIp''@;'; put 'put ''LGN0JiZjdC5zaGVldFJvd3MmJihPdD1PdC5zbGljZSgwLGN0LnNoZWV0Um93cykpLFtPdCxycl19ZnVuY3Rpb24gZ2UoZXQsY3Qpe3ZhciBFdD1mdW5jdGlvbiBRKGV0LGN0KXtzd2l0Y2goY3QudHlwZSl7Y2FzZSJiYXNlNjQiOnJldHVybiBvZShfZS5kZWNvZGUoZXQpLGN0KTtjYXNlImJp''@;'; put 'put ''bmFyeSI6cmV0dXJuIG9lKGV0LGN0KTtjYXNlImJ1ZmZlciI6cmV0dXJuIG9lKGV0LnRvU3RyaW5nKCJiaW5hcnkiKSxjdCk7Y2FzZSJhcnJheSI6cmV0dXJuIG9lKHV0KGV0KSxjdCl9dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgdHlwZSAiK2N0LnR5cGUpfShldCxjdCksYnQ9RXRb''@;'; put 'put ''MV0sanQ9cDQoRXRbMF0sY3QpO3JldHVybiBPZShidCkuZm9yRWFjaChmdW5jdGlvbihrdCl7anRba3RdPWJ0W2t0XX0pLGp0fWZ1bmN0aW9uIHllKGV0LGN0LEV0LGF0KXt2YXIgYnQ9IkM7WSIrKEV0KzEpKyI7WCIrKGF0KzEpKyI7SyI7c3dpdGNoKGV0LnQpe2Nhc2UibiI6YnQrPWV0LnZ8''@;'; put 'put ''fDAsZXQuZiYmIWV0LkYmJihidCs9IjtFIitINChldC5mLHtyOkV0LGM6YXR9KSk7YnJlYWs7Y2FzZSJiIjpidCs9ZXQudj8iVFJVRSI6IkZBTFNFIjticmVhaztjYXNlImUiOmJ0Kz1ldC53fHxldC52O2JyZWFrO2Nhc2UiZCI6YnQrPSciJysoZXQud3x8ZXQudikrJyInO2JyZWFrO2Nhc2Ui''@;'; put 'put ''cyI6YnQrPSciJytldC52LnJlcGxhY2UoLyIvZywiIikrJyInfXJldHVybiBidH1yZXR1cm4gU1sifCJdPTI1NCx7dG9fd29ya2Jvb2s6ZnVuY3Rpb24gcGUoZXQsY3Qpe3JldHVybiB0aChnZShldCxjdCksY3QpfSx0b19zaGVldDpnZSxmcm9tX3NoZWV0OmZ1bmN0aW9uIFllKGV0LGN0KXt2''@;'; put 'put ''YXIganQsRXQ9WyJJRDtQU2hlZXRKUztOO0UiXSxhdD1bXSxidD1vbyhldFsiIXJlZiJdKSxrdD1BcnJheS5pc0FycmF5KGV0KSxPdD0iXHJcbiI7RXQucHVzaCgiUDtQR2VuZXJhbCIpLEV0LnB1c2goIkY7UDA7REcwRzg7TTI1NSIpLGV0WyIhY29scyJdJiZmdW5jdGlvbiBQZShldCxjdCl7''@;'; put 'put ''Y3QuZm9yRWFjaChmdW5jdGlvbihFdCxhdCl7dmFyIGJ0PSJGO1ciKyhhdCsxKSsiICIrKGF0KzEpKyIgIjtFdC5oaWRkZW4/YnQrPSIwIjooIm51bWJlciI9PXR5cGVvZiBFdC53aWR0aCYmIUV0LndweCYmKEV0LndweD1NNShFdC53aWR0aCkpLCJudW1iZXIiPT10eXBlb2YgRXQud3B4JiYh''@;'; put 'put ''RXQud2NoJiYoRXQud2NoPXg1KEV0LndweCkpLCJudW1iZXIiPT10eXBlb2YgRXQud2NoJiYoYnQrPU1hdGgucm91bmQoRXQud2NoKSkpLCIgIiE9YnQuY2hhckF0KGJ0Lmxlbmd0aC0xKSYmZXQucHVzaChidCl9KX0oRXQsZXRbIiFjb2xzIl0pLGV0WyIhcm93cyJdJiZmdW5jdGlvbiBOZShl''@;'; put 'put ''dCxjdCl7Y3QuZm9yRWFjaChmdW5jdGlvbihFdCxhdCl7dmFyIGJ0PSJGOyI7RXQuaGlkZGVuP2J0Kz0iTTA7IjpFdC5ocHQ/YnQrPSJNIisyMCpFdC5ocHQrIjsiOkV0LmhweCYmKGJ0Kz0iTSIrMjAqVTMoRXQuaHB4KSsiOyIpLGJ0Lmxlbmd0aD4yJiZldC5wdXNoKGJ0KyJSIisoYXQrMSkp''@;'; put 'put ''fSl9KEV0LGV0WyIhcm93cyJdKSxFdC5wdXNoKCJCO1kiKyhidC5lLnItYnQucy5yKzEpKyI7WCIrKGJ0LmUuYy1idC5zLmMrMSkrIjtEIitbYnQucy5jLGJ0LnMucixidC5lLmMsYnQuZS5yXS5qb2luKCIgIikpO2Zvcih2YXIgS3Q9YnQucy5yO0t0PD1idC5lLnI7KytLdClmb3IodmFyIFRu''@;'; put 'put ''PWJ0LnMuYztUbjw9YnQuZS5jOysrVG4pe3ZhciBycj1xaSh7cjpLdCxjOlRufSk7KGp0PWt0PyhldFtLdF18fFtdKVtUbl06ZXRbcnJdKSYmKG51bGwhPWp0LnZ8fGp0LmYmJiFqdC5GKSYmYXQucHVzaCh5ZShqdCwwLEt0LFRuKSl9cmV0dXJuIEV0LmpvaW4oT3QpK090K2F0LmpvaW4oT3Qp''@;'; put 'put ''K090KyJFIitPdH19fSgpLER2PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gUihvZSxnZSl7Zm9yKHZhciBwZT1vZS5zcGxpdCgiXG4iKSx5ZT0tMSxQZT0tMSxOZT0wLFllPVtdO05lIT09cGUubGVuZ3RoOysrTmUpaWYoIkJPVCIhPT1wZVtOZV0udHJpbSgpKXtpZighKHllPDApKXtmb3IodmFyIGV0''@;'; put 'put ''PXBlW05lXS50cmltKCkuc3BsaXQoIiwiKSxjdD1ldFswXSxFdD1ldFsxXSxhdD1wZVsrK05lXXx8IiI7MSYoYXQubWF0Y2goL1siXS9nKXx8W10pLmxlbmd0aCYmTmU8cGUubGVuZ3RoLTE7KWF0Kz0iXG4iK3BlWysrTmVdO3N3aXRjaChhdD1hdC50cmltKCksK2N0KXtjYXNlLTE6aWYoIkJP''@;'; put 'put ''VCI9PT1hdCl7WWVbKyt5ZV09W10sUGU9MDtjb250aW51ZX1pZigiRU9EIiE9PWF0KXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIERJRiBzcGVjaWFsIGNvbW1hbmQgIithdCk7YnJlYWs7Y2FzZSAwOlllW3llXVtQZV09IlRSVUUiPT09YXR8fCJGQUxTRSIhPT1hdCYmKGlzTmFOKFF0''@;'; put 'put ''KEV0KSk/aXNOYU4oc24oRXQpLmdldERhdGUoKSk/RXQ6SGUoRXQpOlF0KEV0KSksKytQZTticmVhaztjYXNlIDE6KGF0PShhdD1hdC5zbGljZSgxLGF0Lmxlbmd0aC0xKSkucmVwbGFjZSgvIiIvZywnIicpKSYmYXQubWF0Y2goL149Ii4qIiQvKSYmKGF0PWF0LnNsaWNlKDIsLTEpKSxZZVt5''@;'; put 'put ''ZV1bUGUrK109IiIhPT1hdD9hdDpudWxsfWlmKCJFT0QiPT09YXQpYnJlYWt9fWVsc2UgWWVbKyt5ZV09W10sUGU9MDtyZXR1cm4gZ2UmJmdlLnNoZWV0Um93cyYmKFllPVllLnNsaWNlKDAsZ2Uuc2hlZXRSb3dzKSksWWV9ZnVuY3Rpb24gayhvZSxnZSl7cmV0dXJuIHA0KGZ1bmN0aW9uIFMo''@;'; put 'put ''b2UsZ2Upe3N3aXRjaChnZS50eXBlKXtjYXNlImJhc2U2NCI6cmV0dXJuIFIoX2UuZGVjb2RlKG9lKSxnZSk7Y2FzZSJiaW5hcnkiOnJldHVybiBSKG9lLGdlKTtjYXNlImJ1ZmZlciI6cmV0dXJuIFIob2UudG9TdHJpbmcoImJpbmFyeSIpLGdlKTtjYXNlImFycmF5IjpyZXR1cm4gUih1dChv''@;'; put 'put ''ZSksZ2UpfXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHR5cGUgIitnZS50eXBlKX0ob2UsZ2UpLGdlKX1yZXR1cm57dG9fd29ya2Jvb2s6ZnVuY3Rpb24gRyhvZSxnZSl7cmV0dXJuIHRoKGsob2UsZ2UpLGdlKX0sdG9fc2hlZXQ6ayxmcm9tX3NoZWV0OmZ1bmN0aW9uKCl7dmFyIG9l''@;'; put 'put ''PWZ1bmN0aW9uKHllLFBlLE5lLFllLGV0KXt5ZS5wdXNoKFBlKSx5ZS5wdXNoKE5lKyIsIitZZSkseWUucHVzaCgnIicrZXQucmVwbGFjZSgvIi9nLCciIicpKyciJyl9LGdlPWZ1bmN0aW9uKHllLFBlLE5lLFllKXt5ZS5wdXNoKFBlKyIsIitOZSkseWUucHVzaCgxPT1QZT8nIicrWWUucmVw''@;'; put 'put ''bGFjZSgvIi9nLCciIicpKyciJzpZZSl9O3JldHVybiBmdW5jdGlvbih5ZSl7dmFyIFllLFBlPVtdLE5lPW9vKHllWyIhcmVmIl0pLGV0PUFycmF5LmlzQXJyYXkoeWUpO29lKFBlLCJUQUJMRSIsMCwxLCJzaGVldGpzIiksb2UoUGUsIlZFQ1RPUlMiLDAsTmUuZS5yLU5lLnMucisxLCIiKSxv''@;'; put 'put ''ZShQZSwiVFVQTEVTIiwwLE5lLmUuYy1OZS5zLmMrMSwiIiksb2UoUGUsIkRBVEEiLDAsMCwiIik7Zm9yKHZhciBjdD1OZS5zLnI7Y3Q8PU5lLmUucjsrK2N0KXtnZShQZSwtMSwwLCJCT1QiKTtmb3IodmFyIEV0PU5lLnMuYztFdDw9TmUuZS5jOysrRXQpe3ZhciBhdD1xaSh7cjpjdCxjOkV0''@;'; put 'put ''fSk7aWYoWWU9ZXQ/KHllW2N0XXx8W10pW0V0XTp5ZVthdF0pc3dpdGNoKFllLnQpe2Nhc2UibiI6dmFyIGJ0PVllLnc7IWJ0JiZudWxsIT1ZZS52JiYoYnQ9WWUudiksbnVsbD09YnQ/Z2UoUGUsMSwwLFllLmYmJiFZZS5GPyI9IitZZS5mOiIiKTpnZShQZSwwLGJ0LCJWIik7YnJlYWs7Y2Fz''@;'; put 'put ''ZSJiIjpnZShQZSwwLFllLnY/MTowLFllLnY/IlRSVUUiOiJGQUxTRSIpO2JyZWFrO2Nhc2UicyI6Z2UoUGUsMSwwLGlzTmFOKFllLnYpP1llLnY6Jz0iJytZZS52KyciJyk7YnJlYWs7Y2FzZSJkIjpZZS53fHwoWWUudz1BLmZvcm1hdChZZS56fHxBLl90YWJsZVsxNF0sUWUoSGUoWWUudikp''@;'; put 'put ''KSksZ2UoUGUsMCxZZS53LCJWIik7YnJlYWs7ZGVmYXVsdDpnZShQZSwxLDAsIiIpfWVsc2UgZ2UoUGUsMSwwLCIiKX19cmV0dXJuIGdlKFBlLC0xLDAsIkVPRCIpLFBlLmpvaW4oIlxyXG4iKX19KCl9fSgpLEs2PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gUyhZZSl7cmV0dXJuIFllLnJlcGxhY2Uo''@;'; put 'put ''L1xcYi9nLCJcXCIpLnJlcGxhY2UoL1xcYy9nLCI6IikucmVwbGFjZSgvXFxuL2csIlxuIil9ZnVuY3Rpb24gUihZZSl7cmV0dXJuIFllLnJlcGxhY2UoL1xcL2csIlxcYiIpLnJlcGxhY2UoLzovZywiXFxjIikucmVwbGFjZSgvXG4vZywiXFxuIil9ZnVuY3Rpb24gRyhZZSxldCl7cmV0dXJu''@;'; put 'put ''IHA0KGZ1bmN0aW9uIGsoWWUsZXQpe2Zvcih2YXIgY3Q9WWUuc3BsaXQoIlxuIiksRXQ9LTEsYXQ9LTEsYnQ9MCxqdD1bXTtidCE9PWN0Lmxlbmd0aDsrK2J0KXt2YXIga3Q9Y3RbYnRdLnRyaW0oKS5zcGxpdCgiOiIpO2lmKCJjZWxsIj09PWt0WzBdKXt2YXIgT3Q9Tm8oa3RbMV0pO2lmKGp0''@;'; put 'put ''Lmxlbmd0aDw9T3Qucilmb3IoRXQ9anQubGVuZ3RoO0V0PD1PdC5yOysrRXQpanRbRXRdfHwoanRbRXRdPVtdKTtzd2l0Y2goRXQ9T3QucixhdD1PdC5jLGt0WzJdKXtjYXNlInQiOmp0W0V0XVthdF09UyhrdFszXSk7YnJlYWs7Y2FzZSJ2IjpqdFtFdF1bYXRdPStrdFszXTticmVhaztjYXNl''@;'; put 'put ''InZ0ZiI6dmFyIEt0PWt0W2t0Lmxlbmd0aC0xXTtjYXNlInZ0YyI6anRbRXRdW2F0XT0ibmwiPT09a3RbM10/ISEra3RbNF06K2t0WzRdLCJ2dGYiPT1rdFsyXSYmKGp0W0V0XVthdF09W2p0W0V0XVthdF0sS3RdKX19fXJldHVybiBldCYmZXQuc2hlZXRSb3dzJiYoanQ9anQuc2xpY2UoMCxl''@;'; put 'put ''dC5zaGVldFJvd3MpKSxqdH0oWWUsZXQpLGV0KX12YXIgb2U9WyJzb2NpYWxjYWxjOnZlcnNpb246MS41IiwiTUlNRS1WZXJzaW9uOiAxLjAiLCJDb250ZW50LVR5cGU6IG11bHRpcGFydC9taXhlZDsgYm91bmRhcnk9U29jaWFsQ2FsY1NwcmVhZHNoZWV0Q29udHJvbFNhdmUiXS5qb2luKCJc''@;'; put 'put ''biIpLGdlPVsiLS1Tb2NpYWxDYWxjU3ByZWFkc2hlZXRDb250cm9sU2F2ZSIsIkNvbnRlbnQtdHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOCJdLmpvaW4oIlxuIikrIlxuIixwZT1bIiMgU29jaWFsQ2FsYyBTcHJlYWRzaGVldCBDb250cm9sIFNhdmUiLCJwYXJ0OnNoZWV0Il0uam9p''@;'; put 'put ''bigiXG4iKSx5ZT0iLS1Tb2NpYWxDYWxjU3ByZWFkc2hlZXRDb250cm9sU2F2ZS0tIjtmdW5jdGlvbiBQZShZZSl7aWYoIVllfHwhWWVbIiFyZWYiXSlyZXR1cm4iIjtmb3IodmFyIEV0LGV0PVtdLGN0PVtdLGF0PSIiLGJ0PU1zKFllWyIhcmVmIl0pLGp0PUFycmF5LmlzQXJyYXkoWWUpLGt0''@;'; put 'put ''PWJ0LnMucjtrdDw9YnQuZS5yOysra3QpZm9yKHZhciBPdD1idC5zLmM7T3Q8PWJ0LmUuYzsrK090KWlmKGF0PXFpKHtyOmt0LGM6T3R9KSwoRXQ9anQ/KFllW2t0XXx8W10pW090XTpZZVthdF0pJiZudWxsIT1FdC52JiYieiIhPT1FdC50KXtzd2l0Y2goY3Q9WyJjZWxsIixhdCwidCJdLEV0''@;'; put 'put ''LnQpe2Nhc2UicyI6Y2FzZSJzdHIiOmN0LnB1c2goUihFdC52KSk7YnJlYWs7Y2FzZSJuIjpFdC5mPyhjdFsyXT0idnRmIixjdFszXT0ibiIsY3RbNF09RXQudixjdFs1XT1SKEV0LmYpKTooY3RbMl09InYiLGN0WzNdPUV0LnYpO2JyZWFrO2Nhc2UiYiI6Y3RbMl09InZ0IisoRXQuZj8iZiI6''@;'; put 'put ''ImMiKSxjdFszXT0ibmwiLGN0WzRdPUV0LnY/IjEiOiIwIixjdFs1XT1SKEV0LmZ8fChFdC52PyJUUlVFIjoiRkFMU0UiKSk7YnJlYWs7Y2FzZSJkIjp2YXIgS3Q9UWUoSGUoRXQudikpO2N0WzJdPSJ2dGMiLGN0WzNdPSJuZCIsY3RbNF09IiIrS3QsY3RbNV09RXQud3x8QS5mb3JtYXQoRXQu''@;'; put 'put ''enx8QS5fdGFibGVbMTRdLEt0KTticmVhaztjYXNlImUiOmNvbnRpbnVlfWV0LnB1c2goY3Quam9pbigiOiIpKX1yZXR1cm4gZXQucHVzaCgic2hlZXQ6YzoiKyhidC5lLmMtYnQucy5jKzEpKyI6cjoiKyhidC5lLnItYnQucy5yKzEpKyI6dHZmOjEiKSxldC5wdXNoKCJ2YWx1ZWZvcm1hdDox''@;'; put 'put ''OnRleHQtd2lraSIpLGV0LmpvaW4oIlxuIil9cmV0dXJue3RvX3dvcmtib29rOmZ1bmN0aW9uIFEoWWUsZXQpe3JldHVybiB0aChHKFllLGV0KSxldCl9LHRvX3NoZWV0OkcsZnJvbV9zaGVldDpmdW5jdGlvbiBOZShZZSl7cmV0dXJuW29lLGdlLHBlLGdlLFBlKFllKSx5ZV0uam9pbigiXG4i''@;'; put 'put ''KX19fSgpLGozPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gUyhOZSxZZSxldCxjdCxFdCl7RXQucmF3P1llW2V0XVtjdF09TmU6IiI9PT1OZXx8KFllW2V0XVtjdF09UmkoTmUsRXQpP1JpKE5lLEV0KS52Ok5lKX12YXIgaz17NDQ6IiwiLDk6Ilx0Iiw1OToiOyJ9LEc9ezQ0OjMsOToyLDU5OjF9O2Z1''@;'; put 'put ''bmN0aW9uIFEoTmUpe2Zvcih2YXIgWWU9e30sZXQ9ITEsY3Q9MCxFdD0wO2N0PE5lLmxlbmd0aDsrK2N0KTM0PT0oRXQ9TmUuY2hhckNvZGVBdChjdCkpP2V0PSFldDohZXQmJkV0IGluIGsmJihZZVtFdF09KFllW0V0XXx8MCkrMSk7Zm9yKGN0IGluIEV0PVtdLFllKU9iamVjdC5wcm90b3R5''@;'; put 'put ''cGUuaGFzT3duUHJvcGVydHkuY2FsbChZZSxjdCkmJkV0LnB1c2goW1llW2N0XSxjdF0pO2lmKCFFdC5sZW5ndGgpZm9yKGN0IGluIFllPUcpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFllLGN0KSYmRXQucHVzaChbWWVbY3RdLGN0XSk7cmV0dXJuIEV0LnNvcnQoZnVu''@;'; put 'put ''Y3Rpb24oYXQsYnQpe3JldHVybiBhdFswXS1idFswXXx8R1thdFsxXV0tR1tidFsxXV19KSxrW0V0LnBvcCgpWzFdXX1mdW5jdGlvbiBnZShOZSxZZSl7cmV0dXJuIVllfHwhWWUuUFJOfHwic2VwPSI9PU5lLnNsaWNlKDAsNCl8fE5lLmluZGV4T2YoIlx0Iik+PTB8fE5lLmluZGV4T2YoIiwi''@;'; put 'put ''KT49MHx8TmUuaW5kZXhPZigiOyIpPj0wP2Z1bmN0aW9uIG9lKE5lLFllKXt2YXIgZXQ9WWV8fHt9LGN0PSIiO251bGwhPWxlJiZudWxsPT1ldC5kZW5zZSYmKGV0LmRlbnNlPWxlKTt2YXIgRXQ9ZXQuZGVuc2U/W106e30sYXQ9e3M6e2M6MCxyOjB9LGU6e2M6MCxyOjB9fTsic2VwPSI9PU5l''@;'; put 'put ''LnNsaWNlKDAsNCk/MTM9PU5lLmNoYXJDb2RlQXQoNSkmJjEwPT1OZS5jaGFyQ29kZUF0KDYpPyhjdD1OZS5jaGFyQXQoNCksTmU9TmUuc2xpY2UoNykpOjEzPT1OZS5jaGFyQ29kZUF0KDUpfHwxMD09TmUuY2hhckNvZGVBdCg1KT8oY3Q9TmUuY2hhckF0KDQpLE5lPU5lLnNsaWNlKDYpKTpj''@;'; put 'put ''dD1RKE5lLnNsaWNlKDAsMTAyNCkpOmN0PVEoTmUuc2xpY2UoMCwxMDI0KSk7dmFyIGJ0PTAsanQ9MCxrdD0wLE90PTAsS3Q9MCxUbj1jdC5jaGFyQ29kZUF0KDApLHJyPSExLFNuPTAsbHI9TmUuY2hhckNvZGVBdCgwKTtOZT1OZS5yZXBsYWNlKC9cclxuL2dtLCJcbiIpO3ZhciBYbj1udWxs''@;'; put 'put ''IT1ldC5kYXRlTkY/ZnVuY3Rpb24gVWUoUyl7dmFyIFI9Im51bWJlciI9PXR5cGVvZiBTP0EuX3RhYmxlW1NdOlM7cmV0dXJuIFI9Ui5yZXBsYWNlKHdlLCIoXFxkKykiKSxuZXcgUmVnRXhwKCJeIitSKyIkIil9KGV0LmRhdGVORik6bnVsbDtmdW5jdGlvbiBCbigpe3ZhciBmcj1OZS5zbGlj''@;'; put 'put ''ZShPdCxLdCksYnI9e307aWYoJyInPT1mci5jaGFyQXQoMCkmJiciJz09ZnIuY2hhckF0KGZyLmxlbmd0aC0xKSYmKGZyPWZyLnNsaWNlKDEsLTEpLnJlcGxhY2UoLyIiL2csJyInKSksMD09PWZyLmxlbmd0aClici50PSJ6IjtlbHNlIGlmKGV0LnJhdylici50PSJzIixici52PWZyO2Vsc2Ug''@;'; put 'put ''aWYoMD09PWZyLnRyaW0oKS5sZW5ndGgpYnIudD0icyIsYnIudj1mcjtlbHNlIGlmKDYxPT1mci5jaGFyQ29kZUF0KDApKTM0PT1mci5jaGFyQ29kZUF0KDEpJiYzND09ZnIuY2hhckNvZGVBdChmci5sZW5ndGgtMSk/KGJyLnQ9InMiLGJyLnY9ZnIuc2xpY2UoMiwtMSkucmVwbGFjZSgvIiIv''@;'; put 'put ''ZywnIicpKTpmdW5jdGlvbiBobmUoUyl7cmV0dXJuIDEhPVMubGVuZ3RofShmcik/KGJyLnQ9Im4iLGJyLmY9ZnIuc2xpY2UoMSkpOihici50PSJzIixici52PWZyKTtlbHNlIGlmKCJUUlVFIj09ZnIpYnIudD0iYiIsYnIudj0hMDtlbHNlIGlmKCJGQUxTRSI9PWZyKWJyLnQ9ImIiLGJyLnY9''@;'; put 'put ''ITE7ZWxzZSBpZihpc05hTihrdD1RdChmcikpKWlmKCFpc05hTihzbihmcikuZ2V0RGF0ZSgpKXx8WG4mJmZyLm1hdGNoKFhuKSl7YnIuej1ldC5kYXRlTkZ8fEEuX3RhYmxlWzE0XTt2YXIgZXI9MDtYbiYmZnIubWF0Y2goWG4pJiYoZnI9ZnVuY3Rpb24gSmUoUyxSLGspe3ZhciBHPS0xLFE9''@;'; put 'put ''LTEsb2U9LTEsZ2U9LTEscGU9LTEseWU9LTE7KFIubWF0Y2god2UpfHxbXSkuZm9yRWFjaChmdW5jdGlvbihZZSxldCl7dmFyIGN0PXBhcnNlSW50KGtbZXQrMV0sMTApO3N3aXRjaChZZS50b0xvd2VyQ2FzZSgpLmNoYXJBdCgwKSl7Y2FzZSJ5IjpHPWN0O2JyZWFrO2Nhc2UiZCI6b2U9Y3Q7''@;'; put 'put ''YnJlYWs7Y2FzZSJoIjpnZT1jdDticmVhaztjYXNlInMiOnllPWN0O2JyZWFrO2Nhc2UibSI6Z2U+PTA/cGU9Y3Q6UT1jdH19KSx5ZT49MCYmLTE9PXBlJiZRPj0wJiYocGU9USxRPS0xKTt2YXIgUGU9KCIiKyhHPj0wP0c6KG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpKSkuc2xpY2UoLTQpKyIt''@;'; put 'put ''IisoIjAwIisoUT49MT9ROjEpKS5zbGljZSgtMikrIi0iKygiMDAiKyhvZT49MT9vZToxKSkuc2xpY2UoLTIpOzc9PVBlLmxlbmd0aCYmKFBlPSIwIitQZSksOD09UGUubGVuZ3RoJiYoUGU9IjIwIitQZSk7dmFyIE5lPSgiMDAiKyhnZT49MD9nZTowKSkuc2xpY2UoLTIpKyI6IisoIjAwIiso''@;'; put 'put ''cGU+PTA/cGU6MCkpLnNsaWNlKC0yKSsiOiIrKCIwMCIrKHllPj0wP3llOjApKS5zbGljZSgtMik7cmV0dXJuLTE9PWdlJiYtMT09cGUmJi0xPT15ZT9QZTotMT09RyYmLTE9PVEmJi0xPT1vZT9OZTpQZSsiVCIrTmV9KDAsZXQuZGF0ZU5GLGZyLm1hdGNoKFhuKXx8W10pLGVyPTEpLGV0LmNl''@;'; put 'put ''bGxEYXRlcz8oYnIudD0iZCIsYnIudj1IZShmcixlcikpOihici50PSJuIixici52PVFlKEhlKGZyLGVyKSkpLCExIT09ZXQuY2VsbFRleHQmJihici53PUEuZm9ybWF0KGJyLnosYnIudiBpbnN0YW5jZW9mIERhdGU/UWUoYnIudik6YnIudikpLGV0LmNlbGxORnx8ZGVsZXRlIGJyLnp9ZWxz''@;'; put 'put ''ZSBici50PSJzIixici52PWZyO2Vsc2UgYnIudD0ibiIsITEhPT1ldC5jZWxsVGV4dCYmKGJyLnc9ZnIpLGJyLnY9a3Q7aWYoInoiPT1ici50fHwoZXQuZGVuc2U/KEV0W2J0XXx8KEV0W2J0XT1bXSksRXRbYnRdW2p0XT1icik6RXRbcWkoe2M6anQscjpidH0pXT1iciksbHI9TmUuY2hhckNv''@;'; put 'put ''ZGVBdChPdD1LdCsxKSxhdC5lLmM8anQmJihhdC5lLmM9anQpLGF0LmUucjxidCYmKGF0LmUucj1idCksU249PVRuKSsranQ7ZWxzZSBpZihqdD0wLCsrYnQsZXQuc2hlZXRSb3dzJiZldC5zaGVldFJvd3M8PWJ0KXJldHVybiEwfWU6Zm9yKDtLdDxOZS5sZW5ndGg7KytLdClzd2l0Y2goU249''@;'; put 'put ''TmUuY2hhckNvZGVBdChLdCkpe2Nhc2UgMzQ6MzQ9PT1sciYmKHJyPSFycik7YnJlYWs7Y2FzZSBUbjpjYXNlIDEwOmNhc2UgMTM6aWYoIXJyJiZCbigpKWJyZWFrIGV9cmV0dXJuIEt0LU90PjAmJkJuKCksRXRbIiFyZWYiXT1yYShhdCksRXR9KE5lLFllKTpwNChmdW5jdGlvbiBSKE5lLFll''@;'; put 'put ''KXt2YXIgZXQ9WWV8fHt9LGN0PVtdO2lmKCFOZXx8MD09PU5lLmxlbmd0aClyZXR1cm4gY3Q7Zm9yKHZhciBFdD1OZS5zcGxpdCgvW1xyXG5dLyksYXQ9RXQubGVuZ3RoLTE7YXQ+PTAmJjA9PT1FdFthdF0ubGVuZ3RoOyktLWF0O2Zvcih2YXIgYnQ9MTAsanQ9MCxrdD0wO2t0PD1hdDsrK2t0''@;'; put 'put ''KS0xPT0oanQ9RXRba3RdLmluZGV4T2YoIiAiKSk/anQ9RXRba3RdLmxlbmd0aDpqdCsrLGJ0PU1hdGgubWF4KGJ0LGp0KTtmb3Ioa3Q9MDtrdDw9YXQ7KytrdCl7Y3Rba3RdPVtdO3ZhciBPdD0wO2ZvcihTKEV0W2t0XS5zbGljZSgwLGJ0KS50cmltKCksY3Qsa3QsT3QsZXQpLE90PTE7T3Q8''@;'; put 'put ''PShFdFtrdF0ubGVuZ3RoLWJ0KS8xMCsxOysrT3QpUyhFdFtrdF0uc2xpY2UoYnQrMTAqKE90LTEpLGJ0KzEwKk90KS50cmltKCksY3Qsa3QsT3QsZXQpfXJldHVybiBldC5zaGVldFJvd3MmJihjdD1jdC5zbGljZSgwLGV0LnNoZWV0Um93cykpLGN0fShOZSxZZSksWWUpfWZ1bmN0aW9uIHBl''@;'; put 'put ''KE5lLFllKXt2YXIgZXQ9IiIsY3Q9InN0cmluZyI9PVllLnR5cGU/WzAsMCwwLDBdOlFTKE5lLFllKTtzd2l0Y2goWWUudHlwZSl7Y2FzZSJiYXNlNjQiOmV0PV9lLmRlY29kZShOZSk7YnJlYWs7Y2FzZSJiaW5hcnkiOmNhc2Uic3RyaW5nIjpldD1OZTticmVhaztjYXNlImJ1ZmZlciI6ZXQ9''@;'; put 'put ''NjUwMDE9PVllLmNvZGVwYWdlP05lLnRvU3RyaW5nKCJ1dGY4Iik6WWUuY29kZXBhZ2UmJnR5cGVvZiBjcHRhYmxlPCJ1Ij9jcHRhYmxlLnV0aWxzLmRlY29kZShZZS5jb2RlcGFnZSxOZSk6TmUudG9TdHJpbmcoImJpbmFyeSIpO2JyZWFrO2Nhc2UiYXJyYXkiOmV0PXV0KE5lKTticmVhaztk''@;'; put 'put ''ZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHR5cGUgIitZZS50eXBlKX1yZXR1cm4gMjM5PT1jdFswXSYmMTg3PT1jdFsxXSYmMTkxPT1jdFsyXT9ldD1nbyhldC5zbGljZSgzKSk6ImJpbmFyeSI9PVllLnR5cGUmJnR5cGVvZiBjcHRhYmxlPCJ1IiYmWWUuY29kZXBhZ2Um''@;'; put 'put ''JihldD1jcHRhYmxlLnV0aWxzLmRlY29kZShZZS5jb2RlcGFnZSxjcHRhYmxlLnV0aWxzLmVuY29kZSgyODU5MSxldCkpKSwic29jaWFsY2FsYzp2ZXJzaW9uOiI9PWV0LnNsaWNlKDAsMTkpP0s2LnRvX3NoZWV0KCJzdHJpbmciPT1ZZS50eXBlP2V0OmdvKGV0KSxZZSk6Z2UoZXQsWWUpfXJl''@;'; put 'put ''dHVybnt0b193b3JrYm9vazpmdW5jdGlvbiB5ZShOZSxZZSl7cmV0dXJuIHRoKHBlKE5lLFllKSxZZSl9LHRvX3NoZWV0OnBlLGZyb21fc2hlZXQ6ZnVuY3Rpb24gUGUoTmUpe2Zvcih2YXIgY3QsWWU9W10sZXQ9b28oTmVbIiFyZWYiXSksRXQ9QXJyYXkuaXNBcnJheShOZSksYXQ9ZXQucy5y''@;'; put 'put ''O2F0PD1ldC5lLnI7KythdCl7Zm9yKHZhciBidD1bXSxqdD1ldC5zLmM7anQ8PWV0LmUuYzsrK2p0KXt2YXIga3Q9cWkoe3I6YXQsYzpqdH0pO2lmKChjdD1FdD8oTmVbYXRdfHxbXSlbanRdOk5lW2t0XSkmJm51bGwhPWN0LnYpe2Zvcih2YXIgT3Q9KGN0Lnd8fChfbChjdCksY3Qudyl8fCIi''@;'; put 'put ''KS5zbGljZSgwLDEwKTtPdC5sZW5ndGg8MTA7KU90Kz0iICI7YnQucHVzaChPdCsoMD09PWp0PyIgIjoiIikpfWVsc2UgYnQucHVzaCgiICAgICAgICAgICIpfVllLnB1c2goYnQuam9pbigiIikpfXJldHVybiBZZS5qb2luKCJcbiIpfX19KCksSXY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBTKFZu''@;'; put 'put ''LEJyLF9yKXtpZihWbil7bW4oVm4sVm4ubHx8MCk7Zm9yKHZhciBGbj1fci5FbnVtfHxMaTtWbi5sPFZuLmxlbmd0aDspe3ZhciBqcj1Wbi5yZWFkX3NoaWZ0KDIpLFppPUZuW2pyXXx8Rm5bNjU1MzVdLHlpPVZuLnJlYWRfc2hpZnQoMiksX2E9Vm4ubCt5aSxzbz1aaS5mJiZaaS5mKFZuLHlp''@;'; put 'put ''LF9yKTtpZihWbi5sPV9hLEJyKHNvLFppLGpyKSlyZXR1cm59fX1mdW5jdGlvbiBrKFZuLEJyKXtpZighVm4pcmV0dXJuIFZuO3ZhciBfcj1Ccnx8e307bnVsbCE9bGUmJm51bGw9PV9yLmRlbnNlJiYoX3IuZGVuc2U9bGUpO3ZhciBGbj1fci5kZW5zZT9bXTp7fSxqcj0iU2hlZXQxIixaaT0w''@;'; put 'put ''LHlpPXt9LF9hPVtqcl0sc289W10saWE9e3M6e3I6MCxjOjB9LGU6e3I6MCxjOjB9fSxMbz1fci5zaGVldFJvd3N8fDA7aWYoMj09Vm5bMl0pX3IuRW51bT1MaSxTKFZuLGZ1bmN0aW9uKEJpLElzLFBuKXtzd2l0Y2goUG4pe2Nhc2UgMDpfci52ZXJzPUJpLEJpPj00MDk2JiYoX3IucXBybz0h''@;'; put 'put ''MCk7YnJlYWs7Y2FzZSA2OmlhPUJpO2JyZWFrO2Nhc2UgMTU6Y2FzZSA1MTpfci5xcHJvfHwoQmlbMV0udj1CaVsxXS52LnNsaWNlKDEpKTtjYXNlIDEzOmNhc2UgMTQ6Y2FzZSAxNjoxND09UG4mJiEoMTEyJn5CaVsyXSkmJigxNSZCaVsyXSk+MSYmKDE1JkJpWzJdKTwxNSYmKEJpWzFdLno9''@;'; put 'put ''X3IuZGF0ZU5GfHxBLl90YWJsZVsxNF0sX3IuY2VsbERhdGVzJiYoQmlbMV0udD0iZCIsQmlbMV0udj11bihCaVsxXS52KSkpO3ZhciBXbz1fci5kZW5zZT8oRm5bQmlbMF0ucl18fFtdKVtCaVswXS5jXTpGbltxaShCaVswXSldO2lmKFdvKXtXby50PUJpWzFdLnQsV28udj1CaVsxXS52LG51''@;'; put 'put ''bGwhPUJpWzFdLnomJihXby56PUJpWzFdLnopLG51bGwhPUJpWzFdLmYmJihXby5mPUJpWzFdLmYpO2JyZWFrfV9yLmRlbnNlPyhGbltCaVswXS5yXXx8KEZuW0JpWzBdLnJdPVtdKSxGbltCaVswXS5yXVtCaVswXS5jXT1CaVsxXSk6Rm5bcWkoQmlbMF0pXT1CaVsxXX19LF9yKTtlbHNle2lm''@;'; put 'put ''KDI2IT1WblsyXSYmMTQhPVZuWzJdKXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIExPVFVTIEJPRiAiK1ZuWzJdKTtfci5FbnVtPWtyLDE0PT1WblsyXSYmKF9yLnFwcm89ITAsVm4ubD0wKSxTKFZuLGZ1bmN0aW9uKEJpLElzLFBuKXtzd2l0Y2goUG4pe2Nhc2UgMjI6QmlbMV0udj1C''@;'; put 'put ''aVsxXS52LnNsaWNlKDEpO2Nhc2UgMjM6Y2FzZSAyNDpjYXNlIDI1OmNhc2UgMzc6Y2FzZSAzOTpjYXNlIDQwOmlmKEJpWzNdPlppJiYoRm5bIiFyZWYiXT1yYShpYSkseWlbanJdPUZuLEZuPV9yLmRlbnNlP1tdOnt9LGlhPXtzOntyOjAsYzowfSxlOntyOjAsYzowfX0sX2EucHVzaChqcj0i''@;'; put 'put ''U2hlZXQiKygoWmk9QmlbM10pKzEpKSksTG8+MCYmQmlbMF0ucj49TG8pYnJlYWs7X3IuZGVuc2U/KEZuW0JpWzBdLnJdfHwoRm5bQmlbMF0ucl09W10pLEZuW0JpWzBdLnJdW0JpWzBdLmNdPUJpWzFdKTpGbltxaShCaVswXSldPUJpWzFdLGlhLmUuYzxCaVswXS5jJiYoaWEuZS5jPUJpWzBd''@;'; put 'put ''LmMpLGlhLmUucjxCaVswXS5yJiYoaWEuZS5yPUJpWzBdLnIpO2JyZWFrO2Nhc2UgMjc6QmlbMTRlM10mJihzb1tCaVsxNGUzXVswXV09QmlbMTRlM11bMV0pfX0sX3IpfWlmKEZuWyIhcmVmIl09cmEoaWEpLHlpW2pyXT1Gbiwhc28ubGVuZ3RoKXJldHVybntTaGVldE5hbWVzOl9hLFNoZWV0''@;'; put 'put ''czp5aX07Zm9yKHZhciBPYT17fSxobz1bXSxKYT0wO0phPHNvLmxlbmd0aDsrK0phKXlpW19hW0phXV0mJihoby5wdXNoKHNvW0phXSksT2Fbc29bSmFdXT15aVtfYVtKYV1dKTtyZXR1cm57U2hlZXROYW1lczpobyxTaGVldHM6T2F9fWZ1bmN0aW9uIFBlKFZuLEJyLF9yKXt2YXIgRm49W3tj''@;'; put 'put ''OjAscjowfSx7dDoibiIsdjowfSwwXTtyZXR1cm4gX3IucXBybyYmMjA3NjghPV9yLnZlcnM/KEZuWzBdLmM9Vm4ucmVhZF9zaGlmdCgxKSxWbi5sKyssRm5bMF0ucj1Wbi5yZWFkX3NoaWZ0KDIpLFZuLmwrPTIpOihGblsyXT1Wbi5yZWFkX3NoaWZ0KDEpLEZuWzBdLmM9Vm4ucmVhZF9zaGlm''@;'; put 'put ''dCgyKSxGblswXS5yPVZuLnJlYWRfc2hpZnQoMikpLEZufWZ1bmN0aW9uIE5lKFZuLEJyLF9yKXt2YXIgRm49Vm4ubCtCcixqcj1QZShWbiwwLF9yKTtpZihqclsxXS50PSJzIiwyMDc2OD09X3IudmVycyl7Vm4ubCsrO3ZhciBaaT1Wbi5yZWFkX3NoaWZ0KDEpO3JldHVybiBqclsxXS52PVZu''@;'; put 'put ''LnJlYWRfc2hpZnQoWmksInV0ZjgiKSxqcn1yZXR1cm4gX3IucXBybyYmVm4ubCsrLGpyWzFdLnY9Vm4ucmVhZF9zaGlmdChGbi1Wbi5sLCJjc3RyIiksanJ9ZnVuY3Rpb24gWWUoVm4sQnIsX3Ipe3ZhciBGbj1ibig3K19yLmxlbmd0aCk7Rm4ud3JpdGVfc2hpZnQoMSwyNTUpLEZuLndyaXRl''@;'; put 'put ''X3NoaWZ0KDIsQnIpLEZuLndyaXRlX3NoaWZ0KDIsVm4pLEZuLndyaXRlX3NoaWZ0KDEsMzkpO2Zvcih2YXIganI9MDtqcjxGbi5sZW5ndGg7Kytqcil7dmFyIFppPV9yLmNoYXJDb2RlQXQoanIpO0ZuLndyaXRlX3NoaWZ0KDEsWmk+PTEyOD85NTpaaSl9cmV0dXJuIEZuLndyaXRlX3NoaWZ0''@;'; put 'put ''KDEsMCksRm59ZnVuY3Rpb24gY3QoVm4sQnIsX3Ipe3ZhciBGbj1ibig3KTtyZXR1cm4gRm4ud3JpdGVfc2hpZnQoMSwyNTUpLEZuLndyaXRlX3NoaWZ0KDIsQnIpLEZuLndyaXRlX3NoaWZ0KDIsVm4pLEZuLndyaXRlX3NoaWZ0KDIsX3IsImkiKSxGbn1mdW5jdGlvbiBhdChWbixCcixfcil7''@;'; put 'put ''dmFyIEZuPWJuKDEzKTtyZXR1cm4gRm4ud3JpdGVfc2hpZnQoMSwyNTUpLEZuLndyaXRlX3NoaWZ0KDIsQnIpLEZuLndyaXRlX3NoaWZ0KDIsVm4pLEZuLndyaXRlX3NoaWZ0KDgsX3IsImYiKSxGbn1mdW5jdGlvbiBqdChWbixCcixfcil7dmFyIEZuPTMyNzY4JkJyO3JldHVybiBCcj0oRm4/''@;'; put 'put ''Vm46MCkrKChCciY9LTMyNzY5KT49ODE5Mj9Cci0xNjM4NDpCciksKEZuPyIiOiIkIikrKF9yP1RhKEJyKTpqaShCcikpfXZhciBPdD17NTE6WyJGQUxTRSIsMF0sNTI6WyJUUlVFIiwwXSw3MDpbIkxFTiIsMV0sODA6WyJTVU0iLDY5XSw4MTpbIkFWRVJBR0VBIiw2OV0sODI6WyJDT1VOVEEi''@;'; put 'put ''LDY5XSw4MzpbIk1JTkEiLDY5XSw4NDpbIk1BWEEiLDY5XSwxMTE6WyJUIiwxXX0sS3Q9WyIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIrIiwiLSIsIioiLCIvIiwiXiIsIj0iLCI8PiIsIjw9IiwiPj0iLCI8IiwiPiIsIiIsIiIsIiIsIiIsIiYiLCIiLCIiLCIiLCIiLCIiLCIiLCIiXTtm''@;'; put 'put ''dW5jdGlvbiBycihWbil7dmFyIEJyPVt7YzowLHI6MH0se3Q6Im4iLHY6MH0sMF07cmV0dXJuIEJyWzBdLnI9Vm4ucmVhZF9zaGlmdCgyKSxCclszXT1WbltWbi5sKytdLEJyWzBdLmM9Vm5bVm4ubCsrXSxCcn1mdW5jdGlvbiBscihWbixCcixfcixGbil7dmFyIGpyPWJuKDYrRm4ubGVuZ3Ro''@;'; put 'put ''KTtqci53cml0ZV9zaGlmdCgyLFZuKSxqci53cml0ZV9zaGlmdCgxLF9yKSxqci53cml0ZV9zaGlmdCgxLEJyKSxqci53cml0ZV9zaGlmdCgxLDM5KTtmb3IodmFyIFppPTA7Wmk8Rm4ubGVuZ3RoOysrWmkpe3ZhciB5aT1Gbi5jaGFyQ29kZUF0KFppKTtqci53cml0ZV9zaGlmdCgxLHlpPj0x''@;'; put 'put ''Mjg/OTU6eWkpfXJldHVybiBqci53cml0ZV9zaGlmdCgxLDApLGpyfWZ1bmN0aW9uIEJuKFZuLEJyKXt2YXIgX3I9cnIoVm4pLEZuPVZuLnJlYWRfc2hpZnQoNCksanI9Vm4ucmVhZF9zaGlmdCg0KSxaaT1Wbi5yZWFkX3NoaWZ0KDIpO2lmKDY1NTM1PT1aaSlyZXR1cm4gMD09PUZuJiYzMjIx''@;'; put 'put ''MjI1NDcyPT09anI/KF9yWzFdLnQ9ImUiLF9yWzFdLnY9MTUpOjA9PT1GbiYmMzQ4OTY2MDkyOD09PWpyPyhfclsxXS50PSJlIixfclsxXS52PTQyKTpfclsxXS52PTAsX3I7dmFyIHlpPTMyNzY4JlppO3JldHVybiBaaT0oMzI3NjcmWmkpLTE2NDQ2LF9yWzFdLnY9KDEtMip5aSkqKGpyKk1h''@;'; put 'put ''dGgucG93KDIsWmkrMzIpK0ZuKk1hdGgucG93KDIsWmkpKSxfcn1mdW5jdGlvbiBmcihWbixCcixfcixGbil7dmFyIGpyPWJuKDE0KTtpZihqci53cml0ZV9zaGlmdCgyLFZuKSxqci53cml0ZV9zaGlmdCgxLF9yKSxqci53cml0ZV9zaGlmdCgxLEJyKSwwPT1GbilyZXR1cm4ganIud3JpdGVf''@;'; put 'put ''c2hpZnQoNCwwKSxqci53cml0ZV9zaGlmdCg0LDApLGpyLndyaXRlX3NoaWZ0KDIsNjU1MzUpLGpyO3ZhciBaaT0wLHlpPTAsc289MDtyZXR1cm4gRm48MCYmKFppPTEsRm49LUZuKSx5aT0wfE1hdGgubG9nMihGbiksMjE0NzQ4MzY0OCYoc289KEZuLz1NYXRoLnBvdygyLHlpLTMxKSk+Pj4w''@;'; put 'put ''KXx8KCsreWksc289KEZuLz0yKT4+PjApLEZuLT1zbyxzb3w9MjE0NzQ4MzY0OCxzbz4+Pj0wLEZuKj1NYXRoLnBvdygyLDMyKSxqci53cml0ZV9zaGlmdCg0LEZuPj4+MCksanIud3JpdGVfc2hpZnQoNCxzbyksanIud3JpdGVfc2hpZnQoMix5aSs9MTYzODMrKFppPzMyNzY4OjApKSxqcn1m''@;'; put 'put ''dW5jdGlvbiBNaShWbixCcil7dmFyIF9yPXJyKFZuKSxGbj1Wbi5yZWFkX3NoaWZ0KDgsImYiKTtyZXR1cm4gX3JbMV0udj1Gbixfcn1mdW5jdGlvbiBjYShWbixCcil7dmFyIF9yPWJuKDUrVm4ubGVuZ3RoKTtfci53cml0ZV9zaGlmdCgyLDE0ZTMpLF9yLndyaXRlX3NoaWZ0KDIsQnIpO2Zv''@;'; put 'put ''cih2YXIgRm49MDtGbjxWbi5sZW5ndGg7KytGbil7dmFyIGpyPVZuLmNoYXJDb2RlQXQoRm4pO19yW19yLmwrK109anI+MTI3Pzk1OmpyfXJldHVybiBfcltfci5sKytdPTAsX3J9dmFyIExpPXswOntuOiJCT0YiLGY6RWN9LDE6e246IkVPRiJ9LDI6e246IkNBTENNT0RFIn0sMzp7bjoiQ0FM''@;'; put 'put ''Q09SREVSIn0sNDp7bjoiU1BMSVQifSw1OntuOiJTWU5DIn0sNjp7bjoiUkFOR0UiLGY6ZnVuY3Rpb24gcGUoVm4pe3ZhciBCcj17czp7YzowLHI6MH0sZTp7YzowLHI6MH19O3JldHVybiBCci5zLmM9Vm4ucmVhZF9zaGlmdCgyKSxCci5zLnI9Vm4ucmVhZF9zaGlmdCgyKSxCci5lLmM9Vm4u''@;'; put 'put ''cmVhZF9zaGlmdCgyKSxCci5lLnI9Vm4ucmVhZF9zaGlmdCgyKSw2NTUzNT09QnIucy5jJiYoQnIucy5jPUJyLmUuYz1Cci5zLnI9QnIuZS5yPTApLEJyfX0sNzp7bjoiV0lORE9XMSJ9LDg6e246IkNPTFcxIn0sOTp7bjoiV0lOVFdPIn0sMTA6e246IkNPTFcyIn0sMTE6e246Ik5BTUUifSwx''@;'; put 'put ''Mjp7bjoiQkxBTksifSwxMzp7bjoiSU5URUdFUiIsZjpmdW5jdGlvbiBldChWbixCcixfcil7dmFyIEZuPVBlKFZuLDAsX3IpO3JldHVybiBGblsxXS52PVZuLnJlYWRfc2hpZnQoMiwiaSIpLEZufX0sMTQ6e246Ik5VTUJFUiIsZjpmdW5jdGlvbiBFdChWbixCcixfcil7dmFyIEZuPVBlKFZu''@;'; put 'put ''LDAsX3IpO3JldHVybiBGblsxXS52PVZuLnJlYWRfc2hpZnQoOCwiZiIpLEZufX0sMTU6e246IkxBQkVMIixmOk5lfSwxNjp7bjoiRk9STVVMQSIsZjpmdW5jdGlvbiBidChWbixCcixfcil7dmFyIEZuPVZuLmwrQnIsanI9UGUoVm4sMCxfcik7aWYoanJbMV0udj1Wbi5yZWFkX3NoaWZ0KDgs''@;'; put 'put ''ImYiKSxfci5xcHJvKVZuLmw9Rm47ZWxzZXt2YXIgWmk9Vm4ucmVhZF9zaGlmdCgyKTsoZnVuY3Rpb24gVG4oVm4sQnIpe21uKFZuLDApO2Zvcih2YXIgX3I9W10sRm49MCxqcj0iIixaaT0iIjtWbi5sPFZuLmxlbmd0aDspe3ZhciB5aT1WbltWbi5sKytdO3N3aXRjaCh5aSl7Y2FzZSAwOl9y''@;'; put 'put ''LnB1c2goVm4ucmVhZF9zaGlmdCg4LCJmIikpO2JyZWFrO2Nhc2UgMTpaaT1qdChCclswXS5jLFZuLnJlYWRfc2hpZnQoMiksITApLGpyPWp0KEJyWzBdLnIsVm4ucmVhZF9zaGlmdCgyKSwhMSksX3IucHVzaChaaStqcik7YnJlYWs7Y2FzZSAyOnZhciBfYT1qdChCclswXS5jLFZuLnJlYWRf''@;'; put 'put ''c2hpZnQoMiksITApLHNvPWp0KEJyWzBdLnIsVm4ucmVhZF9zaGlmdCgyKSwhMSk7Wmk9anQoQnJbMF0uYyxWbi5yZWFkX3NoaWZ0KDIpLCEwKSxqcj1qdChCclswXS5yLFZuLnJlYWRfc2hpZnQoMiksITEpLF9yLnB1c2goX2Erc28rIjoiK1ppK2pyKTticmVhaztjYXNlIDM6aWYoVm4ubDxW''@;'; put 'put ''bi5sZW5ndGgpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiV0sxIHByZW1hdHVyZSBmb3JtdWxhIGVuZCIpO2JyZWFrO2Nhc2UgNDpfci5wdXNoKCIoIitfci5wb3AoKSsiKSIpO2JyZWFrO2Nhc2UgNTpfci5wdXNoKFZuLnJlYWRfc2hpZnQoMikpO2JyZWFrO2Nhc2UgNjpmb3IodmFyIGlh''@;'; put 'put ''PSIiO3lpPVZuW1ZuLmwrK107KWlhKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHlpKTtfci5wdXNoKCciJytpYS5yZXBsYWNlKC8iL2csJyIiJykrJyInKTticmVhaztjYXNlIDg6X3IucHVzaCgiLSIrX3IucG9wKCkpO2JyZWFrO2Nhc2UgMjM6X3IucHVzaCgiKyIrX3IucG9wKCkpO2JyZWFrO2Nh''@;'; put 'put ''c2UgMjI6X3IucHVzaCgiTk9UKCIrX3IucG9wKCkrIikiKTticmVhaztjYXNlIDIwOmNhc2UgMjE6dmFyIExvPV9yLnBvcCgpLE9hPV9yLnBvcCgpO19yLnB1c2goWyJBTkQiLCJPUiJdW3lpLTIwXSsiKCIrT2ErIiwiK0xvKyIpIik7YnJlYWs7ZGVmYXVsdDppZih5aTwzMiYmS3RbeWldKUxv''@;'; put 'put ''PV9yLnBvcCgpLE9hPV9yLnBvcCgpLF9yLnB1c2goT2ErS3RbeWldK0xvKTtlbHNle2lmKCFPdFt5aV0pcmV0dXJuIHlpPD03P2NvbnNvbGUuZXJyb3IoIldLMSBpbnZhbGlkIG9wY29kZSAiK3lpLnRvU3RyaW5nKDE2KSk6eWk8PTI0P2NvbnNvbGUuZXJyb3IoIldLMSB1bnN1cHBvcnRlZCBv''@;'; put 'put ''cCAiK3lpLnRvU3RyaW5nKDE2KSk6eWk8PTMwP2NvbnNvbGUuZXJyb3IoIldLMSBpbnZhbGlkIG9wY29kZSAiK3lpLnRvU3RyaW5nKDE2KSk6eWk8PTExNT9jb25zb2xlLmVycm9yKCJXSzEgdW5zdXBwb3J0ZWQgZnVuY3Rpb24gb3Bjb2RlICIreWkudG9TdHJpbmcoMTYpKTpjb25zb2xlLmVy''@;'; put 'put ''cm9yKCJXSzEgdW5yZWNvZ25pemVkIG9wY29kZSAiK3lpLnRvU3RyaW5nKDE2KSk7aWYoNjk9PShGbj1PdFt5aV1bMV0pJiYoRm49Vm5bVm4ubCsrXSksRm4+X3IubGVuZ3RoKXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIldLMSBiYWQgZm9ybXVsYSBwYXJzZSAweCIreWkudG9TdHJpbmco''@;'; put 'put ''MTYpKyI6fCIrX3Iuam9pbigifCIpKyJ8Iik7dmFyIGhvPV9yLnNsaWNlKC1Gbik7X3IubGVuZ3RoLT1Gbixfci5wdXNoKE90W3lpXVswXSsiKCIraG8uam9pbigiLCIpKyIpIil9fX0xPT1fci5sZW5ndGg/QnJbMV0uZj0iIitfclswXTpjb25zb2xlLmVycm9yKCJXSzEgYmFkIGZvcm11bGEg''@;'; put 'put ''cGFyc2UgfCIrX3Iuam9pbigifCIpKyJ8Iil9KShWbi5zbGljZShWbi5sLFZuLmwrWmkpLGpyKSxWbi5sKz1aaX1yZXR1cm4ganJ9fSwyNDp7bjoiVEFCTEUifSwyNTp7bjoiT1JBTkdFIn0sMjY6e246IlBSQU5HRSJ9LDI3OntuOiJTUkFOR0UifSwyODp7bjoiRlJBTkdFIn0sMjk6e246IktS''@;'; put 'put ''QU5HRTEifSwzMjp7bjoiSFJBTkdFIn0sMzU6e246IktSQU5HRTIifSwzNjp7bjoiUFJPVEVDIn0sMzc6e246IkZPT1RFUiJ9LDM4OntuOiJIRUFERVIifSwzOTp7bjoiU0VUVVAifSw0MDp7bjoiTUFSR0lOUyJ9LDQxOntuOiJMQUJFTEZNVCJ9LDQyOntuOiJUSVRMRVMifSw0Mzp7bjoiU0hF''@;'; put 'put ''RVRKUyJ9LDQ1OntuOiJHUkFQSCJ9LDQ2OntuOiJOR1JBUEgifSw0Nzp7bjoiQ0FMQ0NPVU5UIn0sNDg6e246IlVORk9STUFUVEVEIn0sNDk6e246IkNVUlNPUlcxMiJ9LDUwOntuOiJXSU5ET1cifSw1MTp7bjoiU1RSSU5HIixmOk5lfSw1NTp7bjoiUEFTU1dPUkQifSw1Njp7bjoiTE9DS0VE''@;'; put 'put ''In0sNjA6e246IlFVRVJZIn0sNjE6e246IlFVRVJZTkFNRSJ9LDYyOntuOiJQUklOVCJ9LDYzOntuOiJQUklOVE5BTUUifSw2NDp7bjoiR1JBUEgyIn0sNjU6e246IkdSQVBITkFNRSJ9LDY2OntuOiJaT09NIn0sNjc6e246IlNZTVNQTElUIn0sNjg6e246Ik5TUk9XUyJ9LDY5OntuOiJOU0NP''@;'; put 'put ''TFMifSw3MDp7bjoiUlVMRVIifSw3MTp7bjoiTk5BTUUifSw3Mjp7bjoiQUNPTU0ifSw3Mzp7bjoiQU1BQ1JPIn0sNzQ6e246IlBBUlNFIn0sMTAyOntuOiJQUkFOR0VTPz8ifSwxMDM6e246IlJSQU5HRVM/PyJ9LDEwNDp7bjoiRk5BTUU/PyJ9LDEwNTp7bjoiTVJBTkdFUz8/In0sNjU1MzU6''@;'; put 'put ''e246IiJ9fSxrcj17MDp7bjoiQk9GIn0sMTp7bjoiRU9GIn0sMjp7bjoiUEFTU1dPUkQifSwzOntuOiJDQUxDU0VUIn0sNDp7bjoiV0lORE9XU0VUIn0sNTp7bjoiU0hFRVRDRUxMUFRSIn0sNjp7bjoiU0hFRVRMQVlPVVQifSw3OntuOiJDT0xVTU5XSURUSCJ9LDg6e246IkhJRERFTkNPTFVN''@;'; put 'put ''TiJ9LDk6e246IlVTRVJSQU5HRSJ9LDEwOntuOiJTWVNURU1SQU5HRSJ9LDExOntuOiJaRVJPRk9SQ0UifSwxMjp7bjoiU09SVEtFWURJUiJ9LDEzOntuOiJGSUxFU0VBTCJ9LDE0OntuOiJEQVRBRklMTE5VTVMifSwxNTp7bjoiUFJJTlRNQUlOIn0sMTY6e246IlBSSU5UU1RSSU5HIn0sMTc6''@;'; put 'put ''e246IkdSQVBITUFJTiJ9LDE4OntuOiJHUkFQSFNUUklORyJ9LDE5OntuOiI/PyJ9LDIwOntuOiJFUlJDRUxMIn0sMjE6e246Ik5BQ0VMTCJ9LDIyOntuOiJMQUJFTDE2IixmOmZ1bmN0aW9uIFNuKFZuLEJyKXt2YXIgX3I9cnIoVm4pO3JldHVybiBfclsxXS50PSJzIixfclsxXS52PVZuLnJl''@;'; put 'put ''YWRfc2hpZnQoQnItNCwiY3N0ciIpLF9yfX0sMjM6e246Ik5VTUJFUjE3IixmOkJufSwyNDp7bjoiTlVNQkVSMTgiLGY6ZnVuY3Rpb24gWG4oVm4sQnIpe3ZhciBfcj1ycihWbik7X3JbMV0udj1Wbi5yZWFkX3NoaWZ0KDIpO3ZhciBGbj1fclsxXS52Pj4xO2lmKDEmX3JbMV0udilzd2l0Y2go''@;'; put 'put ''NyZGbil7Y2FzZSAwOkZuPTVlMyooRm4+PjMpO2JyZWFrO2Nhc2UgMTpGbj01MDAqKEZuPj4zKTticmVhaztjYXNlIDI6Rm49KEZuPj4zKS8yMDticmVhaztjYXNlIDM6Rm49KEZuPj4zKS8yMDA7YnJlYWs7Y2FzZSA0OkZuPShGbj4+MykvMmUzO2JyZWFrO2Nhc2UgNTpGbj0oRm4+PjMpLzJl''@;'; put 'put ''NDticmVhaztjYXNlIDY6Rm49KEZuPj4zKS8xNjticmVhaztjYXNlIDc6Rm49KEZuPj4zKS82NH1yZXR1cm4gX3JbMV0udj1Gbixfcn19LDI1OntuOiJGT1JNVUxBMTkiLGY6ZnVuY3Rpb24gYnIoVm4sQnIpe3ZhciBfcj1CbihWbik7cmV0dXJuIFZuLmwrPUJyLTE0LF9yfX0sMjY6e246IkZP''@;'; put 'put ''Uk1VTEExQSJ9LDI3OntuOiJYRk9STUFUIixmOmZ1bmN0aW9uIG5hKFZuLEJyKXtmb3IodmFyIF9yPXt9LEZuPVZuLmwrQnI7Vm4ubDxGbjspe3ZhciBqcj1Wbi5yZWFkX3NoaWZ0KDIpO2lmKDE0ZTM9PWpyKXtmb3IoX3JbanJdPVswLCIiXSxfcltqcl1bMF09Vm4ucmVhZF9zaGlmdCgyKTtW''@;'; put 'put ''bltWbi5sXTspX3JbanJdWzFdKz1TdHJpbmcuZnJvbUNoYXJDb2RlKFZuW1ZuLmxdKSxWbi5sKys7Vm4ubCsrfX1yZXR1cm4gX3J9fSwyODp7bjoiRFRMQUJFTE1JU0MifSwyOTp7bjoiRFRMQUJFTENFTEwifSwzMDp7bjoiR1JBUEhXSU5ET1cifSwzMTp7bjoiQ1BBIn0sMzI6e246IkxQTEFV''@;'; put 'put ''VE8ifSwzMzp7bjoiUVVFUlkifSwzNDp7bjoiSElEREVOU0hFRVQifSwzNTp7bjoiPz8ifSwzNzp7bjoiTlVNQkVSMjUiLGY6ZnVuY3Rpb24gZXIoVm4sQnIpe3ZhciBfcj1ycihWbiksRm49Vm4ucmVhZF9zaGlmdCg0KTtyZXR1cm4gX3JbMV0udj1Gbj4+Nixfcn19LDM4OntuOiI/PyJ9LDM5''@;'; put 'put ''OntuOiJOVU1CRVIyNyIsZjpNaX0sNDA6e246IkZPUk1VTEEyOCIsZjpmdW5jdGlvbiBGaShWbixCcil7dmFyIF9yPU1pKFZuKTtyZXR1cm4gVm4ubCs9QnItMTAsX3J9fSwxNDI6e246Ij8/In0sMTQ3OntuOiI/PyJ9LDE1MDp7bjoiPz8ifSwxNTE6e246Ij8/In0sMTUyOntuOiI/PyJ9LDE1''@;'; put 'put ''Mzp7bjoiPz8ifSwxNTQ6e246Ij8/In0sMTU1OntuOiI/PyJ9LDE1Njp7bjoiPz8ifSwxNjM6e246Ij8/In0sMTc0OntuOiI/PyJ9LDE3NTp7bjoiPz8ifSwxNzY6e246Ij8/In0sMTc3OntuOiI/PyJ9LDE4NDp7bjoiPz8ifSwxODU6e246Ij8/In0sMTg2OntuOiI/PyJ9LDE4Nzp7bjoiPz8i''@;'; put 'put ''fSwxODg6e246Ij8/In0sMTk1OntuOiI/PyJ9LDIwMTp7bjoiPz8ifSwyMDU6e246Ij8/In0sMjA2OntuOiI/PyJ9LDIwNzp7bjoiPz8ifSwyMDg6e246Ij8/In0sMjU2OntuOiI/PyJ9LDI1OTp7bjoiPz8ifSwyNjA6e246Ij8/In0sMjYxOntuOiI/PyJ9LDI2Mjp7bjoiPz8ifSwyNjM6e246''@;'; put 'put ''Ij8/In0sMjY1OntuOiI/PyJ9LDI2Njp7bjoiPz8ifSwyNjc6e246Ij8/In0sMjY4OntuOiI/PyJ9LDI3MDp7bjoiPz8ifSwyNzE6e246Ij8/In0sMzg0OntuOiI/PyJ9LDM4OTp7bjoiPz8ifSwzOTA6e246Ij8/In0sMzkzOntuOiI/PyJ9LDM5Njp7bjoiPz8ifSw1MTI6e246Ij8/In0sNTE0''@;'; put 'put ''OntuOiI/PyJ9LDUxMzp7bjoiPz8ifSw1MTY6e246Ij8/In0sNTE3OntuOiI/PyJ9LDY0MDp7bjoiPz8ifSw2NDE6e246Ij8/In0sNjQyOntuOiI/PyJ9LDY0Mzp7bjoiPz8ifSw2NDQ6e246Ij8/In0sNjQ1OntuOiI/PyJ9LDY0Njp7bjoiPz8ifSw2NDc6e246Ij8/In0sNjQ4OntuOiI/PyJ9''@;'; put 'put ''LDY1ODp7bjoiPz8ifSw2NTk6e246Ij8/In0sNjYwOntuOiI/PyJ9LDY2MTp7bjoiPz8ifSw2NjI6e246Ij8/In0sNjY1OntuOiI/PyJ9LDY2Njp7bjoiPz8ifSw3Njg6e246Ij8/In0sNzcyOntuOiI/PyJ9LDE2MDA6e246Ij8/In0sMTYwMjp7bjoiPz8ifSwxNzkzOntuOiI/PyJ9LDE3OTQ6''@;'; put 'put ''e246Ij8/In0sMTc5NTp7bjoiPz8ifSwxNzk2OntuOiI/PyJ9LDE5MjA6e246Ij8/In0sMjA0ODp7bjoiPz8ifSwyMDQ5OntuOiI/PyJ9LDIwNTI6e246Ij8/In0sMjY4ODp7bjoiPz8ifSwxMDk5ODp7bjoiPz8ifSwxMjg0OTp7bjoiPz8ifSwyODIzMzp7bjoiPz8ifSwyODQ4NDp7bjoiPz8i''@;'; put 'put ''fSw2NTUzNTp7bjoiIn19O3JldHVybntzaGVldF90b193azE6ZnVuY3Rpb24gRyhWbixCcil7dmFyIF9yPUJyfHx7fTtpZigrX3IuY29kZXBhZ2U+PTAmJlUoK19yLmNvZGVwYWdlKSwic3RyaW5nIj09X3IudHlwZSl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCB3cml0ZSBXSzEgdG8gSlMgc3Ry''@;'; put 'put ''aW5nIik7dmFyIEZuPWJpKCksanI9b28oVm5bIiFyZWYiXSksWmk9QXJyYXkuaXNBcnJheShWbikseWk9W107R2koRm4sMCxmdW5jdGlvbiBvZShWbil7dmFyIEJyPWJuKDIpO3JldHVybiBCci53cml0ZV9zaGlmdCgyLFZuKSxCcn0oMTAzMCkpLEdpKEZuLDYsZnVuY3Rpb24geWUoVm4pe3Zh''@;'; put 'put ''ciBCcj1ibig4KTtyZXR1cm4gQnIud3JpdGVfc2hpZnQoMixWbi5zLmMpLEJyLndyaXRlX3NoaWZ0KDIsVm4ucy5yKSxCci53cml0ZV9zaGlmdCgyLFZuLmUuYyksQnIud3JpdGVfc2hpZnQoMixWbi5lLnIpLEJyfShqcikpO2Zvcih2YXIgX2E9anIucy5yO19hPD1qci5lLnI7KytfYSlmb3Io''@;'; put 'put ''dmFyIHNvPWppKF9hKSxpYT1qci5zLmM7aWE8PWpyLmUuYzsrK2lhKXtfYT09PWpyLnMuciYmKHlpW2lhXT1UYShpYSkpO3ZhciBPYT1aaT8oVm5bX2FdfHxbXSlbaWFdOlZuW3lpW2lhXStzb107T2EmJiJ6IiE9T2EudCYmKCJuIj09T2EudD8oMHxPYS52KT09T2EudiYmT2Eudj49LTMyNzY4''@;'; put 'put ''JiZPYS52PD0zMjc2Nz9HaShGbiwxMyxjdChfYSxpYSxPYS52KSk6R2koRm4sMTQsYXQoX2EsaWEsT2EudikpOkdpKEZuLDE1LFllKF9hLGlhLF9sKE9hKS5zbGljZSgwLDIzOSkpKSl9cmV0dXJuIEdpKEZuLDEpLEZuLmVuZCgpfSxib29rX3RvX3drMzpmdW5jdGlvbiBRKFZuLEJyKXt2YXIg''@;'; put 'put ''X3I9QnJ8fHt9O2lmKCtfci5jb2RlcGFnZT49MCYmVSgrX3IuY29kZXBhZ2UpLCJzdHJpbmciPT1fci50eXBlKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHdyaXRlIFdLMyB0byBKUyBzdHJpbmciKTt2YXIgRm49YmkoKTtHaShGbiwwLGZ1bmN0aW9uIGdlKFZuKXt2YXIgQnI9Ym4oMjYpO0Jy''@;'; put 'put ''LndyaXRlX3NoaWZ0KDIsNDA5NiksQnIud3JpdGVfc2hpZnQoMiw0KSxCci53cml0ZV9zaGlmdCg0LDApO2Zvcih2YXIgX3I9MCxGbj0wLGpyPTAsWmk9MDtaaTxWbi5TaGVldE5hbWVzLmxlbmd0aDsrK1ppKXt2YXIgX2E9Vm4uU2hlZXRzW1ZuLlNoZWV0TmFtZXNbWmldXTtpZihfYSYmX2Fb''@;'; put 'put ''IiFyZWYiXSl7Kytqcjt2YXIgc289TXMoX2FbIiFyZWYiXSk7X3I8c28uZS5yJiYoX3I9c28uZS5yKSxGbjxzby5lLmMmJihGbj1zby5lLmMpfX1yZXR1cm4gQnIud3JpdGVfc2hpZnQoMixfciksQnIud3JpdGVfc2hpZnQoMSxqciksQnIud3JpdGVfc2hpZnQoMSxGbiksQnIud3JpdGVfc2hp''@;'; put 'put ''ZnQoMiwwKSxCci53cml0ZV9zaGlmdCgyLDApLEJyLndyaXRlX3NoaWZ0KDEsMSksQnIud3JpdGVfc2hpZnQoMSwyKSxCci53cml0ZV9zaGlmdCg0LDApLEJyLndyaXRlX3NoaWZ0KDQsMCksQnJ9KFZuKSk7Zm9yKHZhciBqcj0wLFppPTA7anI8Vm4uU2hlZXROYW1lcy5sZW5ndGg7Kytqciko''@;'; put 'put ''Vm4uU2hlZXRzW1ZuLlNoZWV0TmFtZXNbanJdXXx8e30pWyIhcmVmIl0mJkdpKEZuLDI3LGNhKFZuLlNoZWV0TmFtZXNbanJdLFppKyspKTt2YXIgeWk9MDtmb3IoanI9MDtqcjxWbi5TaGVldE5hbWVzLmxlbmd0aDsrK2pyKXt2YXIgX2E9Vm4uU2hlZXRzW1ZuLlNoZWV0TmFtZXNbanJdXTtp''@;'; put 'put ''ZihfYSYmX2FbIiFyZWYiXSl7Zm9yKHZhciBzbz1vbyhfYVsiIXJlZiJdKSxpYT1BcnJheS5pc0FycmF5KF9hKSxMbz1bXSxPYT1zby5zLnI7T2E8PXNvLmUucjsrK09hKWZvcih2YXIgaG89amkoT2EpLEphPXNvLnMuYztKYTw9c28uZS5jOysrSmEpe09hPT09c28ucy5yJiYoTG9bSmFdPVRh''@;'; put 'put ''KEphKSk7dmFyIElzPWlhPyhfYVtPYV18fFtdKVtKYV06X2FbTG9bSmFdK2hvXTtJcyYmInoiIT1Jcy50JiYoIm4iPT1Jcy50P0dpKEZuLDIzLGZyKE9hLEphLHlpLElzLnYpKTpHaShGbiwyMixscihPYSxKYSx5aSxfbChJcykuc2xpY2UoMCwyMzkpKSkpfSsreWl9fXJldHVybiBHaShGbiwx''@;'; put 'put ''KSxGbi5lbmQoKX0sdG9fd29ya2Jvb2s6ZnVuY3Rpb24gUihWbixCcil7c3dpdGNoKEJyLnR5cGUpe2Nhc2UiYmFzZTY0IjpyZXR1cm4gayhiKF9lLmRlY29kZShWbikpLEJyKTtjYXNlImJpbmFyeSI6cmV0dXJuIGsoYihWbiksQnIpO2Nhc2UiYnVmZmVyIjpjYXNlImFycmF5IjpyZXR1cm4g''@;'; put 'put ''ayhWbixCcil9dGhyb3ciVW5zdXBwb3J0ZWQgdHlwZSAiK0JyLnR5cGV9fX0oKSx3NT1mdW5jdGlvbigpe3ZhciBTPUQwKCJ0IiksUj1EMCgiclByIik7ZnVuY3Rpb24gayhvZSl7dmFyIGdlPW9lLm1hdGNoKFMpO2lmKCFnZSlyZXR1cm57dDoicyIsdjoiIn07dmFyIHBlPXt0OiJzIix2OlFy''@;'; put 'put ''KGdlWzFdKX0seWU9b2UubWF0Y2goUik7cmV0dXJuIHllJiYocGUucz1mdW5jdGlvbiBvayhTKXt2YXIgUj17fSxrPVMubWF0Y2goZW4pLEc9MCxRPSExO2lmKGspZm9yKDtHIT1rLmxlbmd0aDsrK0cpe3ZhciBvZT12cihrW0ddKTtzd2l0Y2gob2VbMF0ucmVwbGFjZSgvXHcqOi9nLCIiKSl7''@;'; put 'put ''Y2FzZSI8Y29uZGVuc2UiOmNhc2UiPGV4dGVuZCI6YnJlYWs7Y2FzZSI8c2hhZG93IjppZighb2UudmFsKWJyZWFrO2Nhc2UiPHNoYWRvdz4iOmNhc2UiPHNoYWRvdy8+IjpSLnNoYWRvdz0xO2JyZWFrO2Nhc2UiPC9zaGFkb3c+IjpicmVhaztjYXNlIjxjaGFyc2V0IjppZigiMSI9PW9lLnZh''@;'; put 'put ''bClicmVhaztSLmNwPU5bcGFyc2VJbnQob2UudmFsLDEwKV07YnJlYWs7Y2FzZSI8b3V0bGluZSI6aWYoIW9lLnZhbClicmVhaztjYXNlIjxvdXRsaW5lPiI6Y2FzZSI8b3V0bGluZS8+IjpSLm91dGxpbmU9MTticmVhaztjYXNlIjwvb3V0bGluZT4iOmJyZWFrO2Nhc2UiPHJGb250IjpSLm5h''@;'; put 'put ''bWU9b2UudmFsO2JyZWFrO2Nhc2UiPHN6IjpSLnN6PW9lLnZhbDticmVhaztjYXNlIjxzdHJpa2UiOmlmKCFvZS52YWwpYnJlYWs7Y2FzZSI8c3RyaWtlPiI6Y2FzZSI8c3RyaWtlLz4iOlIuc3RyaWtlPTE7YnJlYWs7Y2FzZSI8L3N0cmlrZT4iOmJyZWFrO2Nhc2UiPHUiOmlmKCFvZS52YWwp''@;'; put 'put ''YnJlYWs7c3dpdGNoKG9lLnZhbCl7Y2FzZSJkb3VibGUiOlIudW5kZXJsaW5lPTI7YnJlYWs7Y2FzZSJzaW5nbGVBY2NvdW50aW5nIjpSLnVuZGVybGluZT0zMzticmVhaztjYXNlImRvdWJsZUFjY291bnRpbmciOlIudW5kZXJsaW5lPTM0fWNhc2UiPHU+IjpjYXNlIjx1Lz4iOlIudW5kZXJs''@;'; put 'put ''aW5lfHwoUi51bmRlcmxpbmU9MSk7YnJlYWs7Y2FzZSI8L3U+IjpicmVhaztjYXNlIjxiIjppZigiMCI9PW9lLnZhbClicmVhaztjYXNlIjxiPiI6Y2FzZSI8Yi8+IjpSLmJvbGQ9MTticmVhaztjYXNlIjwvYj4iOmJyZWFrO2Nhc2UiPGkiOmlmKCIwIj09b2UudmFsKWJyZWFrO2Nhc2UiPGk+''@;'; put 'put ''IjpjYXNlIjxpLz4iOlIuaXRhbGljPTE7YnJlYWs7Y2FzZSI8L2k+IjpicmVhaztjYXNlIjxjb2xvciI6b2UucmdiJiYoUi5jb2xvcj17cmdiOjg9PW9lLnJnYi5sZW5ndGg/b2UucmdiLnNsaWNlKDIsOCk6KCIwMDAwMDAiK29lLnJnYikuc2xpY2UoLTYpfSk7YnJlYWs7Y2FzZSI8ZmFtaWx5''@;'; put 'put ''IjpSLmZhbWlseT1vZS52YWw7YnJlYWs7Y2FzZSI8dmVydEFsaWduIjoibm9uZSIhPShvZS52YWx8fCJub25lIikmJihSLnZhbGlnbj1vZS52YWwucmVwbGFjZSgic2NyaXB0IiwiIikpO2JyZWFrO2Nhc2UiPHNjaGVtZSI6Y2FzZSI8ZXh0THN0IjpjYXNlIjxleHRMc3Q+IjpjYXNlIjwvZXh0''@;'; put 'put ''THN0PiI6YnJlYWs7Y2FzZSI8ZXh0IjpRPSEwO2JyZWFrO2Nhc2UiPC9leHQ+IjpRPSExO2JyZWFrO2RlZmF1bHQ6aWYoNDchPT1vZVswXS5jaGFyQ29kZUF0KDEpJiYhUSl0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCByaWNoIGZvcm1hdCAiK29lWzBdKX19cmV0dXJuIFJ9KHllWzFd''@;'; put 'put ''KSkscGV9dmFyIEc9LzwoPzpcdys6KT9yPi9nLFE9LzxcLyg/Olx3KzopP3I+LztyZXR1cm4gZnVuY3Rpb24oZ2Upe3JldHVybiBnZS5yZXBsYWNlKEcsIiIpLnNwbGl0KFEpLm1hcChrKS5maWx0ZXIoZnVuY3Rpb24ocGUpe3JldHVybiBwZS52fSl9fSgpLHdWPXsxOiJzaW5nbGUiLDI6ImRv''@;'; put 'put ''dWJsZSIsMzM6InNpbmdsZS1hY2NvdW50aW5nIiwzNDoiZG91YmxlLWFjY291bnRpbmcifSxWdT1mdW5jdGlvbigpe3ZhciBSPS8oXHJcbnxcbikvZztmdW5jdGlvbiBHKFEpe3ZhciBvZT1bW10sUS52LFtdXTtyZXR1cm4gUS52PyhRLnMmJmZ1bmN0aW9uIGsoUSxvZSxnZSl7dmFyIHBlPVtd''@;'; put 'put ''O1EudW5kZXJsaW5lJiZwZS5wdXNoKCJ0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsiKSxRLnVuZGVybGluZT4xJiZwZS5wdXNoKCJ0ZXh0LXVuZGVybGluZS1zdHlsZToiK3dWW1EudW5kZXJsaW5lXSsiOyIpLFEuc3omJnBlLnB1c2goImZvbnQtc2l6ZToiK1Euc3orInB0OyIpLFEub3V0''@;'; put 'put ''bGluZSYmcGUucHVzaCgidGV4dC1lZmZlY3Q6IG91dGxpbmU7IiksUS5zaGFkb3cmJnBlLnB1c2goInRleHQtc2hhZG93OiBhdXRvOyIpLFEuY29sb3ImJlEuY29sb3IucmdiJiZwZS5wdXNoKCJjb2xvcjogIyIrUDAoUS5jb2xvci5yZ2IpKyI7Iiksb2UucHVzaCgnPHNwYW4gc3R5bGU9Iicr''@;'; put 'put ''cGUuam9pbigiIikrJyI+JyksUS5ib2xkJiYob2UucHVzaCgiPGI+IiksZ2UucHVzaCgiPC9iPiIpKSxRLml0YWxpYyYmKG9lLnB1c2goIjxpPiIpLGdlLnB1c2goIjwvaT4iKSksUS5zdHJpa2UmJihvZS5wdXNoKCI8cz4iKSxnZS5wdXNoKCI8L3M+IikpO3ZhciB5ZT1RLnZhbGlnbnx8IiI7''@;'; put 'put ''InN1cGVyc2NyaXB0Ij09eWV8fCJzdXBlciI9PXllP3llPSJzdXAiOiJzdWJzY3JpcHQiPT15ZSYmKHllPSJzdWIiKSwiIiE9eWUmJihvZS5wdXNoKCI8Iit5ZSsiPiIpLGdlLnB1c2goIjwvIit5ZSsiPiIpKSxnZS5wdXNoKCI8L3NwYW4+Iil9KFEucyxvZVswXSxvZVsyXSksb2VbMF0uam9p''@;'; put 'put ''bigiIikrb2VbMV0ucmVwbGFjZShSLCI8YnIvPiIpK29lWzJdLmpvaW4oIiIpKToiIn1yZXR1cm4gZnVuY3Rpb24ob2Upe3JldHVybiBvZS5tYXAoRykuam9pbigiIil9fSgpO2Z1bmN0aW9uIFFzKFMpe3JldHVybiBTLm1hcChmdW5jdGlvbihrKXtyZXR1cm4gZnVuY3Rpb24gQTQoUyl7dmFy''@;'; put 'put ''IFI9IiIsaz1bXTtyZXR1cm4gUy5zJiYoUy5zLmJvbGQmJmsucHVzaCgiPGIvPiIpLFMucy5pdGFsaWMmJmsucHVzaCgiPGkvPiIpLFMucy5zdHJpa2UmJmsucHVzaCgiPHN0cmlrZS8+IiksUy5zLnVuZGVybGluZSYmay5wdXNoKCc8dSB2YWw9IicrKEE1W1Mucy51bmRlcmxpbmVdfHwic2lu''@;'; put 'put ''Z2xlIikrJyIvPicpLFMucy5jb2xvciYmay5wdXNoKGdkKFMucy5jb2xvcikpLFMucy5zeiYmay5wdXNoKCc8c3ogdmFsPSInK1Mucy5zeisnIi8+JyksUy5zLm5hbWUmJmsucHVzaCgnPHJGb250IHZhbD0iJytTLnMubmFtZSsnIi8+JyksKCJzdXBlciI9PVMucy52YWxpZ258fCJzdWIiPT1T''@;'; put 'put ''LnMudmFsaWduKSYmay5wdXNoKCc8dmVydEFsaWduIHZhbD0iJytTLnMudmFsaWduKydzY3JpcHQiLz4nKSksay5sZW5ndGgmJihSKz0iPHJQcj4iK2suam9pbigiIikrIjwvclByPiIpLCI8cj4iKyhSKz1QcigidCIsTHIoUy52KSxudWxsKSkrIjwvcj4ifShrKX0pLmpvaW4oIiIpfXZhciBD''@;'; put 'put ''Vj0vPCg/Olx3KzopP3RbXj5dKj4oW148XSopPFwvKD86XHcrOik/dD4vZyxTVj0vPCg/Olx3KzopP3JcYltePl0qPi8sTVY9LzwoPzpcdys6KT9yUGguKj8+KFtcc1xTXSo/KTxcLyg/Olx3KzopP3JQaD4vZztmdW5jdGlvbiB1QyhTLFIpe3ZhciBrPSFSfHxSLmNlbGxIVE1MLEc9e307cmV0''@;'; put 'put ''dXJuIFM/KFMubWF0Y2goL15ccyo8KD86XHcrOik/dFtePl0qPi8pPyhHLnQ9UXIoZ28oUy5zbGljZShTLmluZGV4T2YoIj4iKSsxKS5zcGxpdCgvPFwvKD86XHcrOik/dD4vKVswXXx8IiIpKSxHLnI9Z28oUyksayYmKEcuaD1sYShHLnQpKSk6Uy5tYXRjaChTVikmJihHLnI9Z28oUyksRy50''@;'; put 'put ''PVFyKGdvKChTLnJlcGxhY2UoTVYsIiIpLm1hdGNoKENWKXx8W10pLmpvaW4oIiIpLnJlcGxhY2UoZW4sIiIpKSksRy5SPXc1KEcuciksayYmKEcuaD1WdShHLlIpKSksRyk6e3Q6IiJ9fXZhciBzaz0vPCg/Olx3KzopP3NzdChbXj5dKik+KFtcc1xTXSopPFwvKD86XHcrOik/c3N0Pi8sbGs9''@;'; put 'put ''LzwoPzpcdys6KT8oPzpzaXxzc3RJdGVtKT4vZyxxNj0vPFwvKD86XHcrOik/KD86c2l8c3N0SXRlbSk+LztLYS5TU1Q9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvc2hhcmVkU3RyaW5ncyI7dmFyIHhWPS9eXHN8''@;'; put 'put ''XHMkfFtcdFxuXHJdLztmdW5jdGlvbiBSdihTLFIpe2lmKCFSLmJvb2tTU1QpcmV0dXJuIiI7dmFyIGs9W0lpXTtrW2subGVuZ3RoXT1Qcigic3N0IixudWxsLHt4bWxuczpZaS5tYWluWzBdLGNvdW50OlMuQ291bnQsdW5pcXVlQ291bnQ6Uy5VbmlxdWV9KTtmb3IodmFyIEc9MDtHIT1TLmxl''@;'; put 'put ''bmd0aDsrK0cpaWYobnVsbCE9U1tHXSl7dmFyIFE9U1tHXSxvZT0iPHNpPiI7US5yP29lKz1RLnI6KG9lKz0iPHQiLFEudHx8KFEudD0iIiksUS50Lm1hdGNoKHhWKSYmKG9lKz0nIHhtbDpzcGFjZT0icHJlc2VydmUiJyksb2UrPSI+IitMcihRLnQpKyI8L3Q+Iiksa1trLmxlbmd0aF09b2Ur''@;'; put 'put ''PSI8L3NpPiJ9cmV0dXJuIGsubGVuZ3RoPjImJihrW2subGVuZ3RoXT0iPC9zc3Q+IixrWzFdPWtbMV0ucmVwbGFjZSgiLz4iLCI+IikpLGsuam9pbigiIil9dmFyIGNrPWZ1bmN0aW9uIEkzKFMsUixrKXt2YXIgRz0xMys0KlMudC5sZW5ndGgsUT1TLlImJlMuUi5sZW5ndGh8fFMucjtTLnIm''@;'; put 'put ''JihTLlI9dzUoUy5yKSksUSYmKEcrPTQrNCpTLlIubGVuZ3RoKTt2YXIgb2U9ITE7aWYobnVsbD09ayYmKG9lPSEwLGs9Ym4oRykpLGsud3JpdGVfc2hpZnQoMSxRPzE6MCksRmMoUy50LGspLFEpe2sud3JpdGVfc2hpZnQoNCxTLlIubGVuZ3RoKTtmb3IodmFyIGdlPTAscGU9MDtwZTxTLlIu''@;'; put 'put ''bGVuZ3RoOysrcGUpe3ZhciB5ZT1TLlJbcGVdO2sud3JpdGVfc2hpZnQoMixnZSksZ2UrPSh5ZS52fHwiIikubGVuZ3RoO3ZhciBQZT15ZS5zP2wwKFIuY2VsbFhmcyxSLmNlbGxTdHlsZVhmcyx7dDoibiIsdjowLHM6eWUuc30sUik6MDtrLndyaXRlX3NoaWZ0KDIsUi5jZWxsWGZzW1BlXS5m''@;'; put 'put ''b250SWQpfX1yZXR1cm4gb2U/ay5zbGljZSgwLGsubCk6a307ZnVuY3Rpb24gdWsoUyxSKXt2YXIgaz1iaSgpO0ZyKGssIkJydEJlZ2luU3N0IixmdW5jdGlvbiBkQyhTLFIpe3JldHVybiBSfHwoUj1ibig4KSksUi53cml0ZV9zaGlmdCg0LFMuQ291bnQpLFIud3JpdGVfc2hpZnQoNCxTLlVu''@;'; put 'put ''aXF1ZSksUn0oUykpO2Zvcih2YXIgRz0wO0c8Uy5sZW5ndGg7KytHKUZyKGssIkJydFNTVEl0ZW0iLGNrKFNbR10sUikpO3JldHVybiBGcihrLCJCcnRFbmRTc3QiKSxrLmVuZCgpfWZ1bmN0aW9uIGs0KFMpe2lmKHR5cGVvZiBjcHRhYmxlPCJ1IilyZXR1cm4gY3B0YWJsZS51dGlscy5lbmNv''@;'; put 'put ''ZGUoRixTKTtmb3IodmFyIFI9W10saz1TLnNwbGl0KCIiKSxHPTA7RzxrLmxlbmd0aDsrK0cpUltHXT1rW0ddLmNoYXJDb2RlQXQoMCk7cmV0dXJuIFJ9ZnVuY3Rpb24gUDEoUyxSKXt2YXIgaz17fTtyZXR1cm4gay5NYWpvcj1TLnJlYWRfc2hpZnQoMiksay5NaW5vcj1TLnJlYWRfc2hpZnQo''@;'; put 'put ''MiksUj49NCYmKFMubCs9Ui00KSxrfWZ1bmN0aW9uIGhDKFMpe2Zvcih2YXIgUj1TLnJlYWRfc2hpZnQoNCksaz1TLmwrUi00LEc9e30sUT1TLnJlYWRfc2hpZnQoNCksb2U9W107US0tID4wOylvZS5wdXNoKHt0OlMucmVhZF9zaGlmdCg0KSx2OlMucmVhZF9zaGlmdCgwLCJscHA0Iil9KTtp''@;'; put 'put ''ZihHLm5hbWU9Uy5yZWFkX3NoaWZ0KDAsImxwcDQiKSxHLmNvbXBzPW9lLFMubCE9ayl0aHJvdyBuZXcgRXJyb3IoIkJhZCBEYXRhU3BhY2VNYXBFbnRyeTogIitTLmwrIiAhPSAiK2spO3JldHVybiBHfWZ1bmN0aW9uIElWKFMsUil7dmFyIGs9Uy5sK1IsRz17fTtHLkZsYWdzPTYzJlMucmVh''@;'; put 'put ''ZF9zaGlmdCg0KSxTLmwrPTQsRy5BbGdJRD1TLnJlYWRfc2hpZnQoNCk7dmFyIFE9ITE7c3dpdGNoKEcuQWxnSUQpe2Nhc2UgMjYxMjY6Y2FzZSAyNjEyNzpjYXNlIDI2MTI4OlE9MzY9PUcuRmxhZ3M7YnJlYWs7Y2FzZSAyNjYyNTpRPTQ9PSg1MiZHLkZsYWdzKTticmVhaztjYXNlIDA6UT0x''@;'; put 'put ''Nj09Ry5GbGFnc3x8ND09Ry5GbGFnc3x8MzY9PUcuRmxhZ3M7YnJlYWs7ZGVmYXVsdDp0aHJvdyJVbnJlY29nbml6ZWQgZW5jcnlwdGlvbiBhbGdvcml0aG06ICIrRy5BbGdJRH1pZighUSl0aHJvdyBuZXcgRXJyb3IoIkVuY3J5cHRpb24gRmxhZ3MvQWxnSUQgbWlzbWF0Y2giKTtyZXR1cm4g''@;'; put 'put ''Ry5BbGdJREhhc2g9Uy5yZWFkX3NoaWZ0KDQpLEcuS2V5U2l6ZT1TLnJlYWRfc2hpZnQoNCksRy5Qcm92aWRlclR5cGU9Uy5yZWFkX3NoaWZ0KDQpLFMubCs9OCxHLkNTUE5hbWU9Uy5yZWFkX3NoaWZ0KGstUy5sPj4xLCJ1dGYxNmxlIiksUy5sPWssR31mdW5jdGlvbiBQdihTLFIpe3ZhciBr''@;'; put 'put ''PXt9LEc9Uy5sK1I7cmV0dXJuIFMubCs9NCxrLlNhbHQ9Uy5zbGljZShTLmwsUy5sKzE2KSxTLmwrPTE2LGsuVmVyaWZpZXI9Uy5zbGljZShTLmwsUy5sKzE2KSxTLmwrPTE2LFMucmVhZF9zaGlmdCg0KSxrLlZlcmlmaWVySGFzaD1TLnNsaWNlKFMubCxHKSxTLmw9RyxrfWZ1bmN0aW9uIFJW''@;'; put 'put ''KFMpe2lmKDM2IT0oNjMmUy5yZWFkX3NoaWZ0KDQpKSl0aHJvdyBuZXcgRXJyb3IoIkVuY3J5cHRpb25JbmZvIG1pc21hdGNoIik7dmFyIGs9Uy5yZWFkX3NoaWZ0KDQpO3JldHVybnt0OiJTdGQiLGg6SVYoUyxrKSx2OlB2KFMsUy5sZW5ndGgtUy5sKX19ZnVuY3Rpb24gSjYoKXt0aHJvdyBu''@;'; put 'put ''ZXcgRXJyb3IoIkZpbGUgaXMgcGFzc3dvcmQtcHJvdGVjdGVkOiBFQ01BLTM3NiBFeHRlbnNpYmxlIil9ZnVuY3Rpb24gZkMoUyl7dmFyIFI9WyJzYWx0U2l6ZSIsImJsb2NrU2l6ZSIsImtleUJpdHMiLCJoYXNoU2l6ZSIsImNpcGhlckFsZ29yaXRobSIsImNpcGhlckNoYWluaW5nIiwiaGFz''@;'; put 'put ''aEFsZ29yaXRobSIsInNhbHRWYWx1ZSJdO1MubCs9NDt2YXIgaz1TLnJlYWRfc2hpZnQoUy5sZW5ndGgtUy5sLCJ1dGY4IiksRz17fTtyZXR1cm4gay5yZXBsYWNlKGVuLGZ1bmN0aW9uKG9lKXt2YXIgZ2U9dnIob2UpO3N3aXRjaChXbihnZVswXSkpe2Nhc2UiPD94bWwiOmNhc2UiPGVuY3J5''@;'; put 'put ''cHRpb24iOmNhc2UiPC9lbmNyeXB0aW9uPiI6Y2FzZSI8L2tleUVuY3J5cHRvcnM+IjpjYXNlIjwva2V5RW5jcnlwdG9yPiI6YnJlYWs7Y2FzZSI8a2V5RGF0YSI6Ui5mb3JFYWNoKGZ1bmN0aW9uKHBlKXtHW3BlXT1nZVtwZV19KTticmVhaztjYXNlIjxkYXRhSW50ZWdyaXR5IjpHLmVuY3J5''@;'; put 'put ''cHRlZEhtYWNLZXk9Z2UuZW5jcnlwdGVkSG1hY0tleSxHLmVuY3J5cHRlZEhtYWNWYWx1ZT1nZS5lbmNyeXB0ZWRIbWFjVmFsdWU7YnJlYWs7Y2FzZSI8a2V5RW5jcnlwdG9ycz4iOmNhc2UiPGtleUVuY3J5cHRvcnMiOkcuZW5jcz1bXTticmVhaztjYXNlIjxrZXlFbmNyeXB0b3IiOkcudXJp''@;'; put 'put ''PWdlLnVyaTticmVhaztjYXNlIjxlbmNyeXB0ZWRLZXkiOkcuZW5jcy5wdXNoKGdlKTticmVhaztkZWZhdWx0OnRocm93IGdlWzBdfX0pLEd9ZnVuY3Rpb24gSHYoUyl7dmFyIGssb2UsUj0wLEc9azQoUyksUT1HLmxlbmd0aCsxO2Zvcigoaz1WKFEpKVswXT1HLmxlbmd0aCxvZT0xO29lIT1R''@;'; put 'put ''Oysrb2Upa1tvZV09R1tvZS0xXTtmb3Iob2U9US0xO29lPj0wOy0tb2UpUj0oKDE2Mzg0JlI/MTowKXxSPDwxJjMyNzY3KV5rW29lXTtyZXR1cm4gNTI4MTFeUn12YXIgcEM9ZnVuY3Rpb24oKXt2YXIgUz1bMTg3LDI1NSwyNTUsMTg2LDI1NSwyNTUsMTg1LDEyOCwwLDE5MCwxNSwwLDE5MSwx''@;'; put 'put ''NSwwXSxSPVs1Nzg0MCw3NDM5LDUyMzgwLDMzOTg0LDQzNjQsMzYwMCw2MTkwMiwxMjYwNiw2MjU4LDU3NjU3LDU0Mjg3LDM0MDQxLDEwMjUyLDQzMzcwLDIwMTYzXSxrPVs0NDc5NiwxOTkyOSwzOTg1OCwxMDA1MywyMDEwNiw0MDIxMiwxMDc2MSwzMTU4NSw2MzE3MCw2NDkzMyw2MDI2Nyw1''@;'; put 'put ''MDkzNSw0MDM5OSwxMTE5OSwxNzc2MywzNTUyNiwxNDUzLDI5MDYsNTgxMiwxMTYyNCwyMzI0OCw4ODUsMTc3MCwzNTQwLDcwODAsMTQxNjAsMjgzMjAsNTY2NDAsNTUzNjksNDExMzksMjA4MDcsNDE2MTQsMjE4MjEsNDM2NDIsMTc2MjEsMjg0ODUsNTY5NzAsNDQzNDEsMTkwMTksMzgwMzgs''@;'; put 'put ''MTQ2MDUsMjkyMTAsNjAxOTUsNTA3OTEsNDAxNzUsMTA3NTEsMjE1MDIsNDMwMDQsMjQ1MzcsMTgzODcsMzY3NzQsMzk0OSw3ODk4LDE1Nzk2LDMxNTkyLDYzMTg0LDQ3MjAxLDI0ODAzLDQ5NjA2LDM3ODA1LDE0MjAzLDI4NDA2LDU2ODEyLDE3ODI0LDM1NjQ4LDE2OTcsMzM5NCw2Nzg4LDEz''@;'; put 'put ''NTc2LDI3MTUyLDQzNjAxLDE3NTM5LDM1MDc4LDU1NywxMTE0LDIyMjgsNDQ1NiwzMDM4OCw2MDc3Niw1MTk1MywzNDI0Myw3MDc5LDE0MTU4LDI4MzE2LDE0MTI4LDI4MjU2LDU2NTEyLDQzNDI1LDE3MjUxLDM0NTAyLDc1OTcsMTMxMDUsMjYyMTAsNTI0MjAsMzUyNDEsODgzLDE3NjYsMzUz''@;'; put 'put ''Miw0MTI5LDgyNTgsMTY1MTYsMzMwMzIsNDY1Nyw5MzE0LDE4NjI4XSxRPWZ1bmN0aW9uKGdlLHBlKXtyZXR1cm4gZnVuY3Rpb24oZ2Upe3JldHVybiAyNTUmKGdlPj4xfGdlPDw3KX0oZ2VecGUpfTtyZXR1cm4gZnVuY3Rpb24ocGUpe2Zvcih2YXIgeWU9azQocGUpLFBlPWZ1bmN0aW9uKGdl''@;'; put 'put ''KXtmb3IodmFyIHBlPVJbZ2UubGVuZ3RoLTFdLHllPTEwNCxQZT1nZS5sZW5ndGgtMTtQZT49MDstLVBlKWZvcih2YXIgTmU9Z2VbUGVdLFllPTA7NyE9WWU7KytZZSk2NCZOZSYmKHBlXj1rW3llXSksTmUqPTIsLS15ZTtyZXR1cm4gcGV9KHllKSxOZT15ZS5sZW5ndGgsWWU9VigxNiksZXQ9''@;'; put 'put ''MDsxNiE9ZXQ7KytldClZZVtldF09MDt2YXIgYXQ7Zm9yKCEoMSZ+TmUpJiYoWWVbTmVdPVEoU1swXSxQZT4+OCksWWVbLS1OZV09USh5ZVt5ZS5sZW5ndGgtMV0sMjU1JlBlKSk7TmU+MDspWWVbLS1OZV09USh5ZVtOZV0sUGU+PjgpLFllWy0tTmVdPVEoeWVbTmVdLDI1NSZQZSk7Zm9yKE5l''@;'; put 'put ''PTE1LGF0PTE1LXllLmxlbmd0aDthdD4wOylZZVtOZV09UShTW2F0XSxQZT4+OCksLS1hdCxZZVstLU5lXT1RKHllW05lXSwyNTUmUGUpLC0tTmUsLS1hdDtyZXR1cm4gWWV9fSgpO3ZhciBWdj1mdW5jdGlvbigpe2Z1bmN0aW9uIFMoUSxvZSl7c3dpdGNoKG9lLnR5cGUpe2Nhc2UiYmFzZTY0''@;'; put 'put ''IjpyZXR1cm4gUihfZS5kZWNvZGUoUSksb2UpO2Nhc2UiYmluYXJ5IjpyZXR1cm4gUihRLG9lKTtjYXNlImJ1ZmZlciI6cmV0dXJuIFIoUS50b1N0cmluZygiYmluYXJ5Iiksb2UpO2Nhc2UiYXJyYXkiOnJldHVybiBSKHV0KFEpLG9lKX10aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCB0''@;'; put 'put ''eXBlICIrb2UudHlwZSl9ZnVuY3Rpb24gUihRLG9lKXt2YXIgcGU9KG9lfHx7fSkuZGVuc2U/W106e307aWYoIVEubWF0Y2goL1xcdHJvd2QvKSl0aHJvdyBuZXcgRXJyb3IoIlJURiBtaXNzaW5nIHRhYmxlIik7cmV0dXJuIHBlWyIhcmVmIl09cmEoe3M6e2M6MCxyOjB9LGU6e2M6MCxyOjB9''@;'; put 'put ''fSkscGV9cmV0dXJue3RvX3dvcmtib29rOmZ1bmN0aW9uIGsoUSxvZSl7cmV0dXJuIHRoKFMoUSxvZSksb2UpfSx0b19zaGVldDpTLGZyb21fc2hlZXQ6ZnVuY3Rpb24gRyhRKXtmb3IodmFyIHBlLG9lPVsie1xccnRmMVxcYW5zaSJdLGdlPW9vKFFbIiFyZWYiXSkseWU9QXJyYXkuaXNBcnJh''@;'; put 'put ''eShRKSxQZT1nZS5zLnI7UGU8PWdlLmUucjsrK1BlKXtvZS5wdXNoKCJcXHRyb3dkXFx0cmF1dG9maXQxIik7Zm9yKHZhciBOZT1nZS5zLmM7TmU8PWdlLmUuYzsrK05lKW9lLnB1c2goIlxcY2VsbHgiKyhOZSsxKSk7Zm9yKG9lLnB1c2goIlxccGFyZFxcaW50YmwiKSxOZT1nZS5zLmM7TmU8''@;'; put 'put ''PWdlLmUuYzsrK05lKXt2YXIgWWU9cWkoe3I6UGUsYzpOZX0pOyhwZT15ZT8oUVtQZV18fFtdKVtOZV06UVtZZV0pJiYobnVsbCE9cGUudnx8cGUuZiYmIXBlLkYpJiYob2UucHVzaCgiICIrKHBlLnd8fChfbChwZSkscGUudykpKSxvZS5wdXNoKCJcXGNlbGwiKSl9b2UucHVzaCgiXFxwYXJk''@;'; put 'put ''XFxpbnRibFxccm93Iil9cmV0dXJuIG9lLmpvaW4oIiIpKyJ9In19fSgpO2Z1bmN0aW9uIEM1KFMpe3ZhciBSPVMuc2xpY2UoIiMiPT09U1swXT8xOjApLnNsaWNlKDAsNik7cmV0dXJuW3BhcnNlSW50KFIuc2xpY2UoMCwyKSwxNikscGFyc2VJbnQoUi5zbGljZSgyLDQpLDE2KSxwYXJzZUlu''@;'; put 'put ''dChSLnNsaWNlKDQsNiksMTYpXX1mdW5jdGlvbiBoZChTKXtmb3IodmFyIFI9MCxrPTE7MyE9UjsrK1Ipaz0yNTYqaysoU1tSXT4yNTU/MjU1OlNbUl08MD8wOlNbUl0pO3JldHVybiBrLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpLnNsaWNlKDEpfWZ1bmN0aW9uIG9oKFMsUil7aWYobnVs''@;'; put 'put ''bD09UylyZXR1cm4gbnVsbCE9UjtpZihudWxsPT1SKXJldHVybiEwO2lmKDE9PVMuYXV0byYmMT09Ui5hdXRvKXJldHVybiExO2lmKCEhUy5hdXRvIT0hIVIuYXV0b3x8bnVsbD09Uy50aGVtZSE9KG51bGw9PVIudGhlbWUpKXJldHVybiEwO2lmKG51bGwhPVMudGhlbWUpcmV0dXJuIFMudGhl''@;'; put 'put ''bWUhPVIudGhlbWV8fFMudGludCE9Ui50aW50O2lmKG51bGw9PVMucmdiJiZudWxsPT1SLnJnYilyZXR1cm4hMTt2YXIgaz1TLnJnYjsibnVtYmVyIj09dHlwZW9mIGsmJihrPWsudG9TdHJpbmcoMTYpKSxrPWsuc2xpY2UoLTYpO3ZhciBHPVIucmdiO3JldHVybiJudW1iZXIiPT10eXBlb2Yg''@;'; put 'put ''RyYmKEc9Ry50b1N0cmluZygxNikpLEc9Ry5zbGljZSgtNiksay50b0xvd2VyQ2FzZSgpIT1HLnRvTG93ZXJDYXNlKCl9ZnVuY3Rpb24gaGsoUyxSKXtyZXR1cm4gbnVsbD09Uz9udWxsIT1SOm51bGw9PVI/bnVsbCE9UzpTLnN0eWxlIT1SLnN0eWxlfHxvaChTLmNvbG9yLFIuY29sb3IpfWZ1''@;'; put 'put ''bmN0aW9uIFM1KFMsUil7aWYoMD09PVIpcmV0dXJuIFM7dmFyIGs9ZnVuY3Rpb24gUFYoUyl7dmFyIFI9U1swXS8yNTUsaz1TWzFdLzI1NSxHPVNbMl0vMjU1LFE9TWF0aC5tYXgoUixrLEcpLG9lPU1hdGgubWluKFIsayxHKSxnZT1RLW9lO2lmKDA9PT1nZSlyZXR1cm5bMCwwLFJdO3ZhciB5''@;'; put 'put ''ZSxwZT0wLFBlPVErb2U7c3dpdGNoKHllPWdlLyhQZT4xPzItUGU6UGUpLFEpe2Nhc2UgUjpwZT0oKGstRykvZ2UrNiklNjticmVhaztjYXNlIGs6cGU9KEctUikvZ2UrMjticmVhaztjYXNlIEc6cGU9KFItaykvZ2UrNH1yZXR1cm5bcGUvNix5ZSxQZS8yXX0oQzUoUykpO3JldHVybiBrWzJd''@;'; put 'put ''PVI8MD9rWzJdKigxK1IpOjEtKDEta1syXSkqKDEtUiksaGQoZnVuY3Rpb24gZGsoUyl7dmFyIHllLGs9U1sxXSxHPVNbMl0sUT0yKmsqKEc8LjU/RzoxLUcpLG9lPUctUS8yLGdlPVtvZSxvZSxvZV0scGU9NipTWzBdO2lmKDAhPT1rKXN3aXRjaCgwfHBlKXtjYXNlIDA6Y2FzZSA2OnllPVEq''@;'; put 'put ''cGUsZ2VbMF0rPVEsZ2VbMV0rPXllO2JyZWFrO2Nhc2UgMTpnZVswXSs9eWU9USooMi1wZSksZ2VbMV0rPVE7YnJlYWs7Y2FzZSAyOnllPVEqKHBlLTIpLGdlWzFdKz1RLGdlWzJdKz15ZTticmVhaztjYXNlIDM6Z2VbMV0rPXllPVEqKDQtcGUpLGdlWzJdKz1RO2JyZWFrO2Nhc2UgNDp5ZT1R''@;'; put 'put ''KihwZS00KSxnZVsyXSs9USxnZVswXSs9eWU7YnJlYWs7Y2FzZSA1OmdlWzJdKz15ZT1RKig2LXBlKSxnZVswXSs9UX1mb3IodmFyIFBlPTA7MyE9UGU7KytQZSlnZVtQZV09TWF0aC5yb3VuZCgyNTUqZ2VbUGVdKTtyZXR1cm4gZ2V9KGspKX12YXIgZms9NixUYz1maztmdW5jdGlvbiBNNShT''@;'; put 'put ''KXtyZXR1cm4gTWF0aC5mbG9vcigoUytNYXRoLnJvdW5kKDEyOC9UYykvMjU2KSpUYyl9ZnVuY3Rpb24geDUoUyl7cmV0dXJuIE1hdGguZmxvb3IoKFMtNSkvVGMqMTAwKy41KS8xMDB9ZnVuY3Rpb24ga2YoUyl7cmV0dXJuIE1hdGgucm91bmQoKFMqVGMrNSkvVGMqMjU2KS8yNTZ9ZnVuY3Rp''@;'; put 'put ''b24gUTAoUyl7Uy5iZXN0Rml0JiZkZWxldGUgUy5iZXN0Rml0LFMud2lkdGg/KFMud3B4PU01KFMud2lkdGgpLFMud2NoPXg1KFMud3B4KSxTLk1EVz1UYyk6Uy53cHg/KFMud2NoPXg1KFMud3B4KSxTLndpZHRoPWtmKFMud2NoKSxTLk1EVz1UYyk6Im51bWJlciI9PXR5cGVvZiBTLndjaCYm''@;'; put 'put ''KFMud2lkdGg9a2YoUy53Y2gpLFMud3B4PU01KFMud2lkdGgpLFMuTURXPVRjKSxTLmN1c3RvbVdpZHRoJiZkZWxldGUgUy5jdXN0b21XaWR0aH12YXIgV3M9OTYsRGY9V3M7ZnVuY3Rpb24gVTMoUyl7cmV0dXJuIDcyKlMvRGZ9ZnVuY3Rpb24gc2goUyl7cmV0dXJuIFMqRGYvNzJ9ZnVuY3Rp''@;'; put 'put ''b24gSWYoUyl7RGY9Uz17b3N4OjcyLHdpbjo5Nix3aW4xMDA6OTYsd2luMTI1OjEyMCx3aW4xNTA6MTQ0fVtTXXx8U3x8V3MsYkM9VDVbU119ZnVuY3Rpb24ganYoUyl7Uy5ocHg/Uy5ocHQ9VTMoUy5ocHgpOlMuaHB0JiYoUy5ocHg9c2goUy5ocHQpKX12YXIgbUM9e05vbmU6Im5vbmUiLFNv''@;'; put 'put ''bGlkOiJzb2xpZCIsR3JheTUwOiJtZWRpdW1HcmF5IixHcmF5NzU6ImRhcmtHcmF5IixHcmF5MjU6ImxpZ2h0R3JheSIsSG9yelN0cmlwZToiZGFya0hvcml6b250YWwiLFZlcnRTdHJpcGU6ImRhcmtWZXJ0aWNhbCIsUmV2ZXJzZURpYWdTdHJpcGU6ImRhcmtEb3duIixEaWFnU3RyaXBlOiJk''@;'; put 'put ''YXJrVXAiLERpYWdDcm9zczoiZGFya0dyaWQiLFRoaWNrRGlhZ0Nyb3NzOiJkYXJrVHJlbGxpcyIsVGhpbkhvcnpTdHJpcGU6ImxpZ2h0SG9yaXpvbnRhbCIsVGhpblZlcnRTdHJpcGU6ImxpZ2h0VmVydGljYWwiLFRoaW5SZXZlcnNlRGlhZ1N0cmlwZToibGlnaHREb3duIixUaGluSG9yekNy''@;'; put 'put ''b3NzOiJsaWdodEdyaWQifSx2Qz1WZShtQyksUTY9e29yYW5nZToxNjc1MzkyMCxibGFjazowLG5hdnk6MTI4LGJsdWU6MjU1LGdyZWVuOjMyNzY4LHRlYWw6MzI4OTYsbGltZTo2NTI4MCxhcXVhOjY1NTM1LHNpbHZlcjoxMjYzMjI1NixtYXJvb246ODM4ODYwOCxwdXJwbGU6ODM4ODczNixv''@;'; put 'put ''bGl2ZTo4NDIxMzc2LGdyYXk6ODQyMTUwNCxyZWQ6MTY3MTE2ODAsZnVjaHNpYToxNjcxMTkzNSx5ZWxsb3c6MTY3NzY5NjAsd2hpdGU6MTY3NzcyMTV9O2Z1bmN0aW9uIEU1KFMsUil7aWYoUy5yZXBsYWNlKCIjIiwiIikubWF0Y2goL15bMC05YS1mQS1GXXs2fSQvKSlyZXR1cm4gcGFyc2VJ''@;'; put 'put ''bnQoUy5yZXBsYWNlKCIjIiwiIiksMTYpO2lmKFE2W1NdKXJldHVybiBRNltTXTt2YXIgaz1TLm1hdGNoKC9yZ2JcKFxzKihcZCopXHMqLFxzKihcZCopXHMqLFxzKihcZCopXHMqXCkvKTtpZihrKXJldHVybigra1sxXTw8MTYpKygra1syXTw8OCkrICtrWzNdO2lmKGs9Uy5tYXRjaCgvcmdi''@;'; put 'put ''YVwoXHMqKFxkKilccyosXHMqKFxkKilccyosXHMqKFxkKilccyooXGQqKS8pKXJldHVybiAwIT0oa1s0XSYma1s0XS5sZW5ndGg+MCYmK2tbNF18fDApfHwra1sxXT4wfHwra1syXT4wfHwra1szXT4wPygra1sxXTw8MTYpKygra1syXTw8OCkrICtrWzNdOlI/LTE6MTY3NzcyMTU7dGhyb3cg''@;'; put 'put ''bmV3IEVycm9yKCJVbmtub3duIEhUTUwgY29sb3IgIitTKX12YXIgVDU9e307ZnVuY3Rpb24genYoUyl7Uz1TfHw5Njt2YXIgUj17Q2FsaWJyaTpbXSxBcmlhbDpbXSwiU3Bhcmthc3NlIFJnIjpbXSxcdTViOGJcdTRmNTM6W10sXHU2ZTM4XHUzMGI0XHUzMGI3XHUzMGMzXHUzMGFmOltdLCJD''@;'; put 'put ''ZW50dXJ5IEdvdGhpYyI6W119O3JldHVybiBSLkNhbGlicmlbMTFdPTcsUi5DYWxpYnJpWzEyXT17NzI6Niw5Njo4LDEyMDoxMCwxNDQ6MTJ9W1NdfHw4LFIuQ2FsaWJyaVsxM109MTAsUi5DYWxpYnJpWzE0XT0xMSxSLkNhbGlicmlbMTZdPTEyLFIuQ2FsaWJyaVsxOF09MTQsUi5DYWxpYnJp''@;'; put 'put ''WzIwXT0xNixSLlx1NWI4Ylx1NGY1M1sxMV09OCxSLlx1NmUzOFx1MzBiNFx1MzBiN1x1MzBjM1x1MzBhZlsxMV09OCxSWyJTcGFya2Fzc2UgUmciXVsxMV09NyxSLkFyaWFsWzEwXT03LFJbIkNlbnR1cnkgR290aGljIl1bMTJdPTksUn1UNVs3Ml09enYoNzIpLFQ1Wzk2XT16dig5NiksVDVb''@;'; put 'put ''MTIwXT16digxMjApLFQ1WzE0NF09enYoMTQ0KTt2YXIgYkM9VDVbOTZdO2Z1bmN0aW9uIHlDKFMpe3JldHVybihiQ1tTLm5hbWV8fFMuRm9udE5hbWVdfHxbXSlbUy5zenx8Uy5TaXplXX1mdW5jdGlvbiBJNChTKXtpZihTKXt2YXIgUj15QyhTKTtpZihSKXJldHVybiBUYz1SfXJldHVybiBU''@;'; put 'put ''Yz02fWZ1bmN0aW9uIF9DKFMsUixrKXtyZXR1cm4gaGQoZnVuY3Rpb24gcGsoUyxSLGspe3JldHVybltNYXRoLnJvdW5kKFJbMF0qaytTWzBdKigxLWspKSxNYXRoLnJvdW5kKFJbMV0qaytTWzFdKigxLWspKSxNYXRoLnJvdW5kKFJbMl0qaytTWzJdKigxLWspKV19KEM1KCJudW1iZXIiPT10''@;'; put 'put ''eXBlb2YgUy5yZ2I/KCIwMDAwMCIrUy50b1N0cmluZygxNikpLnNsaWNlKC02KTpTLnJnYiksQzUoIm51bWJlciI9PXR5cGVvZiBSLnJnYj8oIjAwMDAwIitSLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTYpOlIucmdiKSxrKSl9ZnVuY3Rpb24gVXYoUyxSLGspe2lmKGspc3dpdGNoKCtTKXtjYXNl''@;'; put 'put ''IDY0OlM9NjU7YnJlYWs7Y2FzZSA2NTpTPTY0fXZhciBHPVImJlJbK1NdfHxyMFsrU118fEh3WytTLTIwMF07aWYoODE9PStTJiYoRz1yMFsxXSksR3x8KEc9cjBbMV0pLCFHKXRocm93IG5ldyBFcnJvcigiYmFkIElDViBpbmRleCAiK1MpO3JldHVybiBoZChHKX1mdW5jdGlvbiBnayhTLFIs''@;'; put 'put ''ayl7dmFyIEc9e307cmV0dXJuIG51bGwhPVMuaW5kZXhlZCYmKEcuaW5kZXg9cGFyc2VJbnQoUy5pbmRleGVkLDEwKSxHLnJnYj1VdihHLmluZGV4LFIuSW5kZXhlZCkpLG51bGwhPVMudGhlbWUmJihHLnRoZW1lPXBhcnNlSW50KFMudGhlbWUsMTApKSxudWxsIT1TLnRpbnQmJihHLnRpbnQ9''@;'; put 'put ''cGFyc2VGbG9hdChTLnRpbnQpKSxudWxsIT1TLnJnYiYmKEcucmdiPVMucmdiLnNsaWNlKC02KSksbnVsbCE9Ry50aGVtZSYmIUcucmdiJiZrLnRoZW1lRWxlbWVudHMmJihHLnJnYj1TNShrLnRoZW1lRWxlbWVudHMuY2xyU2NoZW1lW0cudGhlbWVdLnJnYixHLnRpbnR8fDApLEcucmF3X3Jn''@;'; put 'put ''Yj1rLnRoZW1lRWxlbWVudHMuY2xyU2NoZW1lW0cudGhlbWVdLnJnYiksR31mdW5jdGlvbiB3QyhTLFIsayxHKXtSLkJvcmRlcnM9W107dmFyIFE9e30sb2U9e30sZ2U9ITE7KFNbMF0ubWF0Y2goZW4pfHxbXSkuZm9yRWFjaChmdW5jdGlvbihwZSl7dmFyIHllPXZyKHBlKTtzd2l0Y2goV24o''@;'; put 'put ''eWVbMF0pKXtjYXNlIjxib3JkZXJzIjpjYXNlIjxib3JkZXJzPiI6Y2FzZSI8L2JvcmRlcnM+IjpjYXNlIjwvYm9yZGVyPiI6Y2FzZSI8bGVmdC8+IjpjYXNlIjwvbGVmdD4iOmNhc2UiPHJpZ2h0Lz4iOmNhc2UiPC9yaWdodD4iOmNhc2UiPHRvcC8+IjpjYXNlIjwvdG9wPiI6Y2FzZSI8Ym90''@;'; put 'put ''dG9tLz4iOmNhc2UiPC9ib3R0b20+IjpjYXNlIjxkaWFnb25hbCI6Y2FzZSI8ZGlhZ29uYWw+IjpjYXNlIjxkaWFnb25hbC8+IjpjYXNlIjxob3Jpem9udGFsIjpjYXNlIjxob3Jpem9udGFsPiI6Y2FzZSI8aG9yaXpvbnRhbC8+IjpjYXNlIjx2ZXJ0aWNhbCI6Y2FzZSI8dmVydGljYWw+Ijpj''@;'; put 'put ''YXNlIjx2ZXJ0aWNhbC8+IjpjYXNlIjxzdGFydCI6Y2FzZSI8c3RhcnQ+IjpjYXNlIjxzdGFydC8+IjpjYXNlIjwvc3RhcnQ+IjpjYXNlIjxlbmQiOmNhc2UiPGVuZD4iOmNhc2UiPGVuZC8+IjpjYXNlIjwvZW5kPiI6Y2FzZSI8Y29sb3IvPiI6Y2FzZSI8L2NvbG9yPiI6Y2FzZSI8ZXh0THN0''@;'; put 'put ''IjpjYXNlIjxleHRMc3Q+IjpjYXNlIjwvZXh0THN0PiI6YnJlYWs7Y2FzZSI8Ym9yZGVyIjpjYXNlIjxib3JkZXI+IjpjYXNlIjxib3JkZXIvPiI6UT17fSx5ZS5kaWFnb25hbFVwJiYoUS5kaWFnb25hbFVwPXRpKHllLmRpYWdvbmFsVXApKSx5ZS5kaWFnb25hbERvd24mJihRLmRpYWdvbmFs''@;'; put 'put ''RG93bj10aSh5ZS5kaWFnb25hbERvd24pKSxSLkJvcmRlcnMucHVzaChRKTticmVhaztjYXNlIjxsZWZ0IjpjYXNlIjxsZWZ0PiI6b2U9US5sZWZ0PXt9LHllLnN0eWxlJiYob2Uuc3R5bGU9eWUuc3R5bGUpO2JyZWFrO2Nhc2UiPHJpZ2h0IjpjYXNlIjxyaWdodD4iOm9lPVEucmlnaHQ9e30s''@;'; put 'put ''eWUuc3R5bGUmJihvZS5zdHlsZT15ZS5zdHlsZSk7YnJlYWs7Y2FzZSI8dG9wIjpjYXNlIjx0b3A+IjpvZT1RLnRvcD17fSx5ZS5zdHlsZSYmKG9lLnN0eWxlPXllLnN0eWxlKTticmVhaztjYXNlIjxib3R0b20iOmNhc2UiPGJvdHRvbT4iOm9lPVEuYm90dG9tPXt9LHllLnN0eWxlJiYob2Uu''@;'; put 'put ''c3R5bGU9eWUuc3R5bGUpO2JyZWFrO2Nhc2UiPC9kaWFnb25hbD4iOlEuZGlhZ29uYWw9b2Usb2U9e307YnJlYWs7Y2FzZSI8L2hvcml6b250YWw+IjpRLmhvcml6b250YWw9b2Usb2U9e307YnJlYWs7Y2FzZSI8L3ZlcnRpY2FsPiI6US52ZXJ0aWNhbD1vZSxvZT17fTticmVhaztjYXNlIjxj''@;'; put 'put ''b2xvciI6Y2FzZSI8Y29sb3I+IjpvZS5jb2xvcnx8KG9lLmNvbG9yPXt9KSx5ZS5hdXRvJiYob2UuY29sb3IuYXV0bz10aSh5ZS5hdXRvKSksbnVsbCE9eWUucmdiP29lLmNvbG9yLnJnYj15ZS5yZ2Iuc2xpY2UoLTYpOnllLmluZGV4ZWQ/KG9lLmNvbG9yLmluZGV4PXBhcnNlSW50KHllLmlu''@;'; put 'put ''ZGV4ZWQsMTApLG9lLmNvbG9yLnJnYj1VdihvZS5jb2xvci5pbmRleCxSLkluZGV4ZWQsITEpKTp5ZS50aGVtZSYmKG9lLmNvbG9yLnRoZW1lPXBhcnNlSW50KHllLnRoZW1lLDEwKSx5ZS50aW50JiYob2UuY29sb3IudGludD1wYXJzZUZsb2F0KHllLnRpbnQpKSx5ZS50aGVtZSYmay50aGVt''@;'; put 'put ''ZUVsZW1lbnRzJiZrLnRoZW1lRWxlbWVudHMuY2xyU2NoZW1lJiYob2UuY29sb3IucmdiPVM1KGsudGhlbWVFbGVtZW50cy5jbHJTY2hlbWVbb2UuY29sb3IudGhlbWVdLnJnYixvZS5jb2xvci50aW50fHwwKSkpLCF5ZS5hdXRvJiZudWxsPT15ZS5yZ2ImJiF5ZS5pbmRleGVkJiZkZWxldGUg''@;'; put 'put ''b2UuY29sb3I7YnJlYWs7Y2FzZSI8ZXh0IjpnZT0hMDticmVhaztjYXNlIjwvZXh0PiI6Z2U9ITE7YnJlYWs7ZGVmYXVsdDppZihHJiZHLldURiYmIWdlKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIreWVbMF0rIiBpbiBib3JkZXJzIil9fSl9ZnVuY3Rpb24gUjQoUyxSKXt2YXIg''@;'; put 'put ''az1bIjwiK1JdO3JldHVybiBTJiZTLnN0eWxlPyhrLnB1c2goJyBzdHlsZT0iJytTLnN0eWxlKyciJyksUy5jb2xvcj8oay5wdXNoKCI+Iiksay5wdXNoKGdkKFMuY29sb3IsITApKSxrLmpvaW4oIiIpKyI8LyIrUisiPiIpOmsuam9pbigiIikrIi8+Iik6a1swXSsiLz4ifWZ1bmN0aW9uIEZW''@;'; put 'put ''KFMsUixrLEcpe1IuRmlsbHM9W107dmFyIFE9e30sb2U9e30sZ2U9ITEscGU9ITE7KFNbMF0ubWF0Y2goZW4pfHxbXSkuZm9yRWFjaChmdW5jdGlvbih5ZSl7dmFyIFBlPXZyKHllKTtzd2l0Y2goV24oUGVbMF0pKXtjYXNlIjxmaWxscyI6Y2FzZSI8ZmlsbHM+IjpjYXNlIjwvZmlsbHM+Ijpj''@;'; put 'put ''YXNlIjwvZmlsbD4iOmNhc2UiPC9ncmFkaWVudEZpbGw+IjpjYXNlIjxiZ0NvbG9yLz4iOmNhc2UiPC9iZ0NvbG9yPiI6Y2FzZSI8ZmdDb2xvci8+IjpjYXNlIjwvZmdDb2xvcj4iOmNhc2UiPGNvbG9yLz4iOmNhc2UiPC9jb2xvcj4iOmNhc2UiPHN0b3AvPiI6Y2FzZSI8ZXh0THN0IjpjYXNl''@;'; put 'put ''IjxleHRMc3Q+IjpjYXNlIjwvZXh0THN0PiI6YnJlYWs7Y2FzZSI8ZmlsbD4iOmNhc2UiPGZpbGwiOmNhc2UiPGZpbGwvPiI6Ui5GaWxscy5wdXNoKFE9e30pO2JyZWFrO2Nhc2UiPGdyYWRpZW50RmlsbD4iOlEuc3RvcHM9W107YnJlYWs7Y2FzZSI8Z3JhZGllbnRGaWxsIjpRLnN0b3BzPVtd''@;'; put 'put ''LFBlLmRlZ3JlZSYmKFEuYW5nbGU9K1BlLmRlZ3JlZSk7YnJlYWs7Y2FzZSI8cGF0dGVybkZpbGwiOmNhc2UiPHBhdHRlcm5GaWxsPiI6UGUucGF0dGVyblR5cGUmJihRLnBhdHRlcm5UeXBlPVBlLnBhdHRlcm5UeXBlKTticmVhaztjYXNlIjxwYXR0ZXJuRmlsbC8+IjpjYXNlIjwvcGF0dGVy''@;'; put 'put ''bkZpbGw+IjppZihnZSl0aHJvdyBuZXcgRXJyb3IoImJhZCBzdG9wIik7YnJlYWs7Y2FzZSI8Y29sb3IiOmNhc2UiPGJnQ29sb3IiOmNhc2UiPGZnQ29sb3IiOnZhciBOZT1XbihQZVswXSkuc2xpY2UoMSk7ImNvbG9yIiE9TmUmJiFRW05lXSYmKFFbTmVdPXt9KTt2YXIgWWU9Z2U/b2U6UVtO''@;'; put 'put ''ZV07bnVsbCE9UGUuaW5kZXhlZCYmKFllLmluZGV4PXBhcnNlSW50KFBlLmluZGV4ZWQsMTApLFllLnJnYj1VdihZZS5pbmRleCxSLkluZGV4ZWQpKSxudWxsIT1QZS50aGVtZSYmKFllLnRoZW1lPXBhcnNlSW50KFBlLnRoZW1lLDEwKSksbnVsbCE9UGUudGludCYmKFllLnRpbnQ9cGFyc2VG''@;'; put 'put ''bG9hdChQZS50aW50KSksbnVsbCE9UGUucmdiJiYoWWUucmdiPVBlLnJnYi5zbGljZSgtNikpLG51bGwhPVBlLmF1dG8mJmRlbGV0ZSBRW05lXSxudWxsIT1ZZS50aGVtZSYmIVllLnJnYiYmay50aGVtZUVsZW1lbnRzJiYoWWUucmdiPVM1KGsudGhlbWVFbGVtZW50cy5jbHJTY2hlbWVbWWUu''@;'; put 'put ''dGhlbWVdLnJnYixZZS50aW50fHwwKSxHLldURiYmKFllLnJhd19yZ2I9ay50aGVtZUVsZW1lbnRzLmNsclNjaGVtZVtZZS50aGVtZV0ucmdiKSk7YnJlYWs7Y2FzZSI8c3RvcD4iOmdlPSEwLG9lPXt9O2JyZWFrO2Nhc2UiPHN0b3AiOmdlPSEwLG9lPXt9LG51bGwhPVBlLnBvc2l0aW9uJiYo''@;'; put 'put ''b2Uudj1wYXJzZUZsb2F0KFBlLnBvc2l0aW9uKSk7YnJlYWs7Y2FzZSI8L3N0b3A+IjpnZT0hMSxRLnN0b3BzLnB1c2gob2UpO2JyZWFrO2Nhc2UiPGV4dCI6cGU9ITA7YnJlYWs7Y2FzZSI8L2V4dD4iOnBlPSExO2JyZWFrO2RlZmF1bHQ6aWYoRyYmRy5XVEYmJiFwZSl0aHJvdyBuZXcgRXJy''@;'; put 'put ''b3IoInVucmVjb2duaXplZCAiK1BlWzBdKyIgaW4gZmlsbHMiKX19KX1mdW5jdGlvbiBIVihTLFIsayxHKXtSLkZvbnRzPVtdO3ZhciBRPXt9LG9lPSExOyhTWzBdLm1hdGNoKGVuKXx8W10pLmZvckVhY2goZnVuY3Rpb24oZ2Upe3ZhciBwZT12cihnZSk7c3dpdGNoKFduKHBlWzBdKSl7Y2Fz''@;'; put 'put ''ZSI8Zm9udHMiOmNhc2UiPGZvbnRzPiI6Y2FzZSI8L2ZvbnRzPiI6YnJlYWs7Y2FzZSI8Zm9udCI6Y2FzZSI8Zm9udD4iOmlmKCIvPiIhPWdlLnNsaWNlKC0yKSlicmVhaztjYXNlIjwvZm9udD4iOmNhc2UiPGZvbnQvPiI6Ui5Gb250cy5wdXNoKFEpLFE9e307YnJlYWs7Y2FzZSI8bmFtZSI6''@;'; put 'put ''cGUudmFsJiYoUS5uYW1lPWdvKHBlLnZhbCkpO2JyZWFrO2Nhc2UiPG5hbWUvPiI6Y2FzZSI8L25hbWU+IjpicmVhaztjYXNlIjxiIjpRLmJvbGQ9cGUudmFsP3RpKHBlLnZhbCk6MTticmVhaztjYXNlIjxiLz4iOmNhc2UiPGI+IjpRLmJvbGQ9MTticmVhaztjYXNlIjwvYj4iOmJyZWFrO2Nh''@;'; put 'put ''c2UiPGkiOlEuaXRhbGljPXBlLnZhbD90aShwZS52YWwpOjE7YnJlYWs7Y2FzZSI8aS8+IjpjYXNlIjxpPiI6US5pdGFsaWM9MTticmVhaztjYXNlIjwvaT4iOmJyZWFrO2Nhc2UiPHUiOnN3aXRjaChwZS52YWwpe2Nhc2Uibm9uZSI6US51bmRlcmxpbmU9MDticmVhaztjYXNlInNpbmdsZSI6''@;'; put 'put ''US51bmRlcmxpbmU9MTticmVhaztjYXNlImRvdWJsZSI6US51bmRlcmxpbmU9MjticmVhaztjYXNlInNpbmdsZUFjY291bnRpbmciOlEudW5kZXJsaW5lPTMzO2JyZWFrO2Nhc2UiZG91YmxlQWNjb3VudGluZyI6US51bmRlcmxpbmU9MzR9YnJlYWs7Y2FzZSI8dS8+IjpjYXNlIjx1PiI6US51''@;'; put 'put ''bmRlcmxpbmU9MTticmVhaztjYXNlIjwvdT4iOmJyZWFrO2Nhc2UiPHN0cmlrZSI6US5zdHJpa2U9cGUudmFsP3RpKHBlLnZhbCk6MTticmVhaztjYXNlIjxzdHJpa2UvPiI6US5zdHJpa2U9MTticmVhaztjYXNlIjxvdXRsaW5lIjpRLm91dGxpbmU9cGUudmFsP3RpKHBlLnZhbCk6MTticmVh''@;'; put 'put ''aztjYXNlIjxvdXRsaW5lLz4iOlEub3V0bGluZT0xO2JyZWFrO2Nhc2UiPHNoYWRvdyI6US5zaGFkb3c9cGUudmFsP3RpKHBlLnZhbCk6MTticmVhaztjYXNlIjxzaGFkb3cvPiI6US5zaGFkb3c9MTticmVhaztjYXNlIjxjb25kZW5zZSI6US5jb25kZW5zZT1wZS52YWw/dGkocGUudmFsKTox''@;'; put 'put ''O2JyZWFrO2Nhc2UiPGNvbmRlbnNlLz4iOlEuY29uZGVuc2U9MTticmVhaztjYXNlIjxleHRlbmQiOlEuZXh0ZW5kPXBlLnZhbD90aShwZS52YWwpOjE7YnJlYWs7Y2FzZSI8ZXh0ZW5kLz4iOlEuZXh0ZW5kPTE7YnJlYWs7Y2FzZSI8c3oiOnBlLnZhbCYmKFEuc3o9K3BlLnZhbCk7YnJlYWs7''@;'; put 'put ''Y2FzZSI8c3ovPiI6Y2FzZSI8L3N6PiI6YnJlYWs7Y2FzZSI8dmVydEFsaWduIjoibm9uZSIhPShwZS52YWx8fCJub25lIikmJihRLnZhbGlnbj1wZS52YWwucmVwbGFjZSgic2NyaXB0IiwiIikpO2JyZWFrO2Nhc2UiPHZlcnRBbGlnbi8+IjpjYXNlIjwvdmVydEFsaWduPiI6YnJlYWs7Y2Fz''@;'; put 'put ''ZSI8ZmFtaWx5IjpwZS52YWwmJihRLmZhbWlseT1wYXJzZUludChwZS52YWwsMTApKTticmVhaztjYXNlIjxmYW1pbHkvPiI6Y2FzZSI8L2ZhbWlseT4iOmJyZWFrO2Nhc2UiPHNjaGVtZSI6cGUudmFsJiYoUS5zY2hlbWU9cGUudmFsKTticmVhaztjYXNlIjxzY2hlbWUvPiI6Y2FzZSI8L3Nj''@;'; put 'put ''aGVtZT4iOmJyZWFrO2Nhc2UiPGNoYXJzZXQiOmlmKCIxIj09cGUudmFsKWJyZWFrO3BlLmNvZGVwYWdlPU5bcGFyc2VJbnQocGUudmFsLDEwKV07YnJlYWs7Y2FzZSI8Y29sb3IiOlEuY29sb3J8fChRLmNvbG9yPXt9KSxwZS5hdXRvJiYoUS5jb2xvci5hdXRvPXRpKHBlLmF1dG8pKSxwZS5y''@;'; put 'put ''Z2I/US5jb2xvci5yZ2I9cGUucmdiLnNsaWNlKC02KTpwZS5pbmRleGVkPyhRLmNvbG9yLmluZGV4PXBhcnNlSW50KHBlLmluZGV4ZWQsMTApLFEuY29sb3IucmdiPVV2KFEuY29sb3IuaW5kZXgsUi5JbmRleGVkKSk6cGUudGhlbWUmJihRLmNvbG9yLnRoZW1lPXBhcnNlSW50KHBlLnRoZW1l''@;'; put 'put ''LDEwKSxwZS50aW50JiYoUS5jb2xvci50aW50PXBhcnNlRmxvYXQocGUudGludCkpLHBlLnRoZW1lJiZrLnRoZW1lRWxlbWVudHMmJmsudGhlbWVFbGVtZW50cy5jbHJTY2hlbWUmJihRLmNvbG9yLnJnYj1TNShrLnRoZW1lRWxlbWVudHMuY2xyU2NoZW1lW1EuY29sb3IudGhlbWVdLnJnYixR''@;'; put 'put ''LmNvbG9yLnRpbnR8fDApKSk7YnJlYWs7Y2FzZSI8Y29sb3IvPiI6Y2FzZSI8L2NvbG9yPiI6YnJlYWs7Y2FzZSI8QWx0ZXJuYXRlQ29udGVudCI6b2U9ITA7YnJlYWs7Y2FzZSI8L0FsdGVybmF0ZUNvbnRlbnQ+IjpvZT0hMTticmVhaztjYXNlIjxleHRMc3QiOmNhc2UiPGV4dExzdD4iOmNh''@;'; put 'put ''c2UiPC9leHRMc3Q+IjpicmVhaztjYXNlIjxleHQiOm9lPSEwO2JyZWFrO2Nhc2UiPC9leHQ+IjpvZT0hMTticmVhaztkZWZhdWx0OmlmKEcmJkcuV1RGJiYhb2UpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgIitwZVswXSsiIGluIGZvbnRzIil9fSl9dmFyIEE1PXswOiJub25lIiwx''@;'; put 'put ''OiJzaW5nbGUiLDI6ImRvdWJsZSIsMzM6InNpbmdsZUFjY291bnRpbmciLDM0OiJkb3VibGVBY2NvdW50aW5nIn0sWjM9WyJudW1GbXRJZCIsImZpbGxJZCIsImZvbnRJZCIsImJvcmRlcklkIiwieGZJZCJdLFczPVsiYXBwbHlBbGlnbm1lbnQiLCJhcHBseUJvcmRlciIsImFwcGx5RmlsbCIs''@;'; put 'put ''ImFwcGx5Rm9udCIsImFwcGx5TnVtYmVyRm9ybWF0IiwiYXBwbHlQcm90ZWN0aW9uIiwicGl2b3RCdXR0b24iLCJxdW90ZVByZWZpeCJdLEw0PWZ1bmN0aW9uKCl7dmFyIFM9LzwoPzpcdys6KT9mb250KFtePl0qKT5bXFNcc10qPzxcLyg/Olx3KzopP2ZvbnQ+LyxSPS88KD86XHcrOik/bnVt''@;'; put 'put ''Rm10KFtePl0qKVwvPi8saz0vPCg/Olx3KzopP2ZpbGwoW14+XSopPltcU1xzXSo/PFwvKD86XHcrOik/ZmlsbD4vLFE9LzwoPzpcdys6KT9ib3JkZXIoW14+XSopPltcU1xzXSo/PFwvKD86XHcrOik/Ym9yZGVyPi87cmV0dXJuIGZ1bmN0aW9uKHBlLHllLFBlLE5lKXt2YXIgY3QsRXQsWWU9''@;'; put 'put ''e30sZXQ9e307cmV0dXJuKGN0PXBlLm1hdGNoKFMpKSYmKEhWKGN0LFllLFBlLE5lKSwoWWUuRm9udHN8fFtdKVswXSYmUHQoZXQsWWUuRm9udHNbMF0pKSwoY3Q9cGUubWF0Y2goUikpJiYoRXQ9dnIoZ28oY3RbMF0pKSxldC56PUV0LmZvcm1hdENvZGU/UXIoRXQuZm9ybWF0Q29kZSk6KHll''@;'; put 'put ''Lk51bWJlckZtdHx8W10pWytFdC5udW1GbXRJZF18fCJHZW5lcmFsIiksKGN0PXBlLm1hdGNoKGspKSYmKEZWKGN0LFllLFBlLE5lKSwoWWUuRmlsbHN8fFtdKVswXSYmUHQoZXQsWWUuRmlsbHNbMF0pKSwoY3Q9cGUubWF0Y2goUSkpJiYod0MoY3QsWWUsUGUsTmUpLChZZS5Cb3JkZXJzfHxb''@;'; put 'put ''XSlbMF0mJlB0KGV0LFllLkJvcmRlcnNbMF0pKSxldH19KCksSmk9LzwoPzpcdys6KT9keGY+W1xTXHNdKj88XC8oPzpcdys6KT9keGY+L2csS3I9LzwoPzpcdys6KT90YWJsZVN0eWxlXGIuKj8+W1xTXHNdKj88XC8oPzpcdys6KT90YWJsZVN0eWxlPi9nO3ZhciBfaz1mdW5jdGlvbigpe3Zh''@;'; put 'put ''ciBSPS88KD86XHcrOik/bnVtRm10cyhbXj5dKik+W1xTXHNdKj88XC8oPzpcdys6KT9udW1GbXRzPi8saz0vPCg/Olx3KzopP2NlbGxTdHlsZVhmcyhbXj5dKik+W1xTXHNdKj88XC8oPzpcdys6KT9jZWxsU3R5bGVYZnM+LyxHPS88KD86XHcrOik/Y2VsbFN0eWxlcyhbXj5dKik+W1xTXHNd''@;'; put 'put ''Kj88XC8oPzpcdys6KT9jZWxsU3R5bGVzPi8sUT0vPCg/Olx3KzopP2NlbGxYZnMoW14+XSopPltcU1xzXSo/PFwvKD86XHcrOik/Y2VsbFhmcz4vLG9lPS88KD86XHcrOik/ZmlsbHMoW14+XSopPltcU1xzXSo/PFwvKD86XHcrOik/ZmlsbHM+LyxnZT0vPCg/Olx3KzopP2ZvbnRzKFtePl0q''@;'; put 'put ''KT5bXFNcc10qPzxcLyg/Olx3KzopP2ZvbnRzPi8scGU9LzwoPzpcdys6KT9ib3JkZXJzKFtePl0qKT5bXFNcc10qPzxcLyg/Olx3KzopP2JvcmRlcnM+Lyx5ZT0vPCg/Olx3KzopP2luZGV4ZWRDb2xvcnMoW14+XSopPltcU1xzXSo/PFwvKD86XHcrOik/aW5kZXhlZENvbG9ycz4vLFBlPS88''@;'; put 'put ''KD86XHcrOik/dGFibGVTdHlsZXMoW14+XSopPltcU1xzXSo/PFwvKD86XHcrOik/dGFibGVTdHlsZXM+LyxOZT0vPCg/Olx3KzopP2R4ZnMoW14+XSopPltcU1xzXSo/PFwvKD86XHcrOik/ZHhmcz4vO3JldHVybiBmdW5jdGlvbihldCxjdCxFdCl7dmFyIGJ0LGF0PXt9O3JldHVybiBldD8o''@;'; put 'put ''KGJ0PShldD1ldC5yZXBsYWNlKC88IS0tKFtcc1xTXSo/KS0tPi9nbSwiIikucmVwbGFjZSgvPCFET0NUWVBFW15cW10qXFtbXlxdXSpcXT4vZ20sIiIpKS5tYXRjaCh5ZSkpJiZmdW5jdGlvbiBOVihTLFIsayl7Ui5JbmRleGVkfHwoUi5JbmRleGVkPVtdKTt2YXIgRz0hMTsoU1swXS5tYXRj''@;'; put 'put ''aChlbil8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKFEpe3ZhciBvZT12cihRKTtzd2l0Y2goV24ob2VbMF0pKXtjYXNlIjxpbmRleGVkQ29sb3JzPiI6Y2FzZSI8aW5kZXhlZENvbG9ycyI6Y2FzZSI8aW5kZXhlZENvbG9ycy8+IjpjYXNlIjwvaW5kZXhlZENvbG9ycz4iOmNhc2UiPC9yZ2JDb2xv''@;'; put 'put ''cj4iOmNhc2UiPGV4dExzdCI6Y2FzZSI8ZXh0THN0PiI6Y2FzZSI8L2V4dExzdD4iOmJyZWFrO2Nhc2UiPHJnYkNvbG9yIjpkZWxldGUgb2VbMF07dmFyIGdlPXBhcnNlSW50KG9lLnJnYi5zbGljZSgtNiksMTYpO1IuSW5kZXhlZC5wdXNoKFtnZT4+MTYmMjU1LGdlPj44JjI1NSwyNTUmZ2Vd''@;'; put 'put ''KTticmVhaztjYXNlIjxleHQiOkc9ITA7YnJlYWs7Y2FzZSI8L2V4dD4iOkc9ITE7YnJlYWs7ZGVmYXVsdDppZihrJiZrLldURiYmIUcpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgIitvZVswXSsiIGluIGNlbGxTdHlsZXMiKX19KX0oYnQsYXQsRXQpLChidD1ldC5tYXRjaChSKSkm''@;'; put 'put ''JmZ1bmN0aW9uIHZrKFMsUixrKXtSLk51bWJlckZtdD1bXTtmb3IodmFyIEc9T2UoQS5fdGFibGUpLFE9MDtRPEcubGVuZ3RoOysrUSlSLk51bWJlckZtdFtHW1FdXT1BLl90YWJsZVtHW1FdXTt2YXIgb2U9U1swXS5tYXRjaChlbik7aWYob2UpZm9yKFE9MDtRPG9lLmxlbmd0aDsrK1Epe3Zh''@;'; put 'put ''ciBnZT12cihvZVtRXSk7c3dpdGNoKFduKGdlWzBdKSl7Y2FzZSI8bnVtRm10cyI6Y2FzZSI8L251bUZtdHM+IjpjYXNlIjxudW1GbXRzLz4iOmNhc2UiPG51bUZtdHM+IjpjYXNlIjwvbnVtRm10PiI6YnJlYWs7Y2FzZSI8bnVtRm10Ijp2YXIgcGU9UXIoZ28oZ2UuZm9ybWF0Q29kZSkpLHll''@;'; put 'put ''PXBhcnNlSW50KGdlLm51bUZtdElkLDEwKTtpZihSLk51bWJlckZtdFt5ZV09cGUseWU+MCl7aWYoeWU+MzkyKXtmb3IoeWU9MzkyO3llPjYwJiZudWxsIT1SLk51bWJlckZtdFt5ZV07LS15ZSk7Ui5OdW1iZXJGbXRbeWVdPXBlfUEubG9hZChwZSx5ZSl9YnJlYWs7ZGVmYXVsdDppZihrLldU''@;'; put 'put ''Ril0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCAiK2dlWzBdKyIgaW4gbnVtRm10cyIpfX19KGJ0LGF0LEV0KSwoYnQ9ZXQubWF0Y2goZ2UpKSYmSFYoYnQsYXQsY3QsRXQpLChidD1ldC5tYXRjaChvZSkpJiZGVihidCxhdCxjdCxFdCksKGJ0PWV0Lm1hdGNoKHBlKSkmJndDKGJ0LGF0''@;'; put 'put ''LGN0LEV0KSwoYnQ9ZXQubWF0Y2goaykpJiZmdW5jdGlvbiBybmUoUyxSLGspe1IuQ2VsbFN0eWxlWGY9W107dmFyIEcsUT0hMTsoU1swXS5tYXRjaChlbil8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKG9lKXt2YXIgZ2U9dnIob2UpLHBlPTA7c3dpdGNoKFduKGdlWzBdKSl7Y2FzZSI8Y2VsbFN0''@;'; put 'put ''eWxlWGZzIjpjYXNlIjxjZWxsU3R5bGVYZnM+IjpjYXNlIjxjZWxsU3R5bGVYZnMvPiI6Y2FzZSI8L2NlbGxTdHlsZVhmcz4iOmNhc2UiPC94Zj4iOmNhc2UiPC9hbGlnbm1lbnQ+IjpjYXNlIjwvcHJvdGVjdGlvbj4iOmNhc2UiPHByb3RlY3Rpb24vPiI6Y2FzZSI8ZXh0THN0IjpjYXNlIjxl''@;'; put 'put ''eHRMc3Q+IjpjYXNlIjwvZXh0THN0PiI6YnJlYWs7Y2FzZSI8eGYiOmNhc2UiPHhmLz4iOmZvcihkZWxldGUoRz1nZSlbMF0scGU9MDtwZTxaMy5sZW5ndGg7KytwZSlHW1ozW3BlXV0mJihHW1ozW3BlXV09cGFyc2VJbnQoR1taM1twZV1dLDEwKSk7Zm9yKHBlPTA7cGU8VzMubGVuZ3RoOysr''@;'; put 'put ''cGUpR1tXM1twZV1dJiYoR1tXM1twZV1dPXRpKEdbVzNbcGVdXSkpO2lmKFIuTnVtYmVyRm10JiZHLm51bUZtdElkPjM5Milmb3IocGU9MzkyO3BlPjYwOy0tcGUpaWYoUi5OdW1iZXJGbXRbRy5udW1GbXRJZF09PVIuTnVtYmVyRm10W3BlXSl7Ry5udW1GbXRJZD1wZTticmVha31SLkNlbGxT''@;'; put 'put ''dHlsZVhmLnB1c2goRyk7YnJlYWs7Y2FzZSI8YWxpZ25tZW50IjpjYXNlIjxhbGlnbm1lbnQvPiI6dmFyIHllPXt9O2dlLnZlcnRpY2FsJiYoeWUudmVydGljYWw9Z2UudmVydGljYWwpLGdlLmhvcml6b250YWwmJih5ZS5ob3Jpem9udGFsPWdlLmhvcml6b250YWwpLG51bGwhPWdlLnRleHRS''@;'; put 'put ''b3RhdGlvbiYmKHllLnRleHRSb3RhdGlvbj1nZS50ZXh0Um90YXRpb24pLGdlLmluZGVudCYmKHllLmluZGVudD1nZS5pbmRlbnQpLGdlLndyYXBUZXh0JiYoeWUud3JhcFRleHQ9Z2Uud3JhcFRleHQpLGdlLnNocmlua1RvRml0JiYoeWUuc2hyaW5rVG9GaXQ9dGkoZ2Uuc2hyaW5rVG9GaXQp''@;'; put 'put ''KSxHLmFsaWdubWVudD15ZTticmVhaztjYXNlIjxwcm90ZWN0aW9uIjpHLnByb3RlY3Rpb249e30sdGkoZ2UuaGlkZGVuKSYmKEcucHJvdGVjdGlvbi5oaWRkZW49ITApLG51bGwhPWdlLmxvY2tlZCYmKEcucHJvdGVjdGlvbi5lZGl0YWJsZT0hdGkoZ2UubG9ja2VkKSk7YnJlYWs7Y2FzZSI8''@;'; put 'put ''ZXh0IjpRPSEwO2JyZWFrO2Nhc2UiPC9leHQ+IjpRPSExO2JyZWFrO2RlZmF1bHQ6aWYoayYmay5XVEYmJiFRKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIrZ2VbMF0rIiBpbiBjZWxsU3R5bGVYZnMiKX19KX0oYnQsYXQsRXQpLChidD1ldC5tYXRjaChHKSkmJmZ1bmN0aW9uIGFu''@;'; put 'put ''ZShTLFIsayl7Ui5DZWxsU3R5bGVYZnx8KFIuQ2VsbFN0eWxlWGY9W10pO3ZhciBHPSExOyhTWzBdLm1hdGNoKGVuKXx8W10pLmZvckVhY2goZnVuY3Rpb24oUSl7dmFyIG9lPXZyKFEpO3N3aXRjaChXbihvZVswXSkpe2Nhc2UiPGNlbGxTdHlsZXMiOmNhc2UiPGNlbGxTdHlsZXM+IjpjYXNl''@;'; put 'put ''IjxjZWxsU3R5bGVzLz4iOmNhc2UiPC9jZWxsU3R5bGVzPiI6Y2FzZSI8L3hmPiI6Y2FzZSI8L2NlbGxTdHlsZT4iOmNhc2UiPGV4dExzdCI6Y2FzZSI8ZXh0THN0PiI6Y2FzZSI8L2V4dExzdD4iOmJyZWFrO2Nhc2UiPGNlbGxTdHlsZSI6Y2FzZSI8Y2VsbFN0eWxlLz4iOmRlbGV0ZSBvZVsw''@;'; put 'put ''XTt2YXIgZ2U9K29lLnhmSWQ7aWYoUi5DZWxsU3R5bGVYZltnZV0pUi5DZWxsU3R5bGVYZltnZV0uc3R5bGU9Z28ob2UubmFtZSk7ZWxzZSBpZighb2UuYnVpbHRpbklkKXRocm93IG5ldyBFcnJvcigiQ291bGQgbm90IGZpbmQgQ2VsbFN0eWxlICIrZ2UpO2JyZWFrO2Nhc2UiPGV4dCI6Rz0h''@;'; put 'put ''MDticmVhaztjYXNlIjwvZXh0PiI6Rz0hMTticmVhaztkZWZhdWx0OmlmKGsmJmsuV1RGJiYhRyl0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCAiK29lWzBdKyIgaW4gY2VsbFN0eWxlcyIpfX0pfShidCxhdCxFdCksKGJ0PWV0Lm1hdGNoKFEpKSYmZnVuY3Rpb24gYmsoUyxSLGspe1Iu''@;'; put 'put ''Q2VsbFhmPVtdO3ZhciBHLFE9ITE7KFNbMF0ubWF0Y2goZW4pfHxbXSkuZm9yRWFjaChmdW5jdGlvbihvZSl7dmFyIGdlPXZyKG9lKSxwZT0wO3N3aXRjaChXbihnZVswXSkpe2Nhc2UiPGNlbGxYZnMiOmNhc2UiPGNlbGxYZnM+IjpjYXNlIjxjZWxsWGZzLz4iOmNhc2UiPC9jZWxsWGZzPiI6''@;'; put 'put ''Y2FzZSI8L3hmPiI6Y2FzZSI8L2FsaWdubWVudD4iOmNhc2UiPC9wcm90ZWN0aW9uPiI6Y2FzZSI8cHJvdGVjdGlvbi8+IjpjYXNlIjxleHRMc3QiOmNhc2UiPGV4dExzdD4iOmNhc2UiPC9leHRMc3Q+IjpicmVhaztjYXNlIjx4ZiI6Y2FzZSI8eGYvPiI6Zm9yKGRlbGV0ZShHPWdlKVswXSxw''@;'; put 'put ''ZT0wO3BlPFozLmxlbmd0aDsrK3BlKUdbWjNbcGVdXSYmKEdbWjNbcGVdXT1wYXJzZUludChHW1ozW3BlXV0sMTApKTtmb3IocGU9MDtwZTxXMy5sZW5ndGg7KytwZSlHW1czW3BlXV0mJihHW1czW3BlXV09dGkoR1tXM1twZV1dKSk7aWYoUi5OdW1iZXJGbXQmJkcubnVtRm10SWQ+MzkyKWZv''@;'; put 'put ''cihwZT0zOTI7cGU+NjA7LS1wZSlpZihSLk51bWJlckZtdFtHLm51bUZtdElkXT09Ui5OdW1iZXJGbXRbcGVdKXtHLm51bUZtdElkPXBlO2JyZWFrfVIuQ2VsbFN0eWxlWGYmJkcueGZJZCYmUi5DZWxsU3R5bGVYZltHLnhmSWRdJiZSLkNlbGxTdHlsZVhmW0cueGZJZF0uc3R5bGUmJihHLnN0''@;'; put 'put ''eWxlPVIuQ2VsbFN0eWxlWGZbRy54ZklkXS5zdHlsZSksUi5DZWxsWGYucHVzaChHKTticmVhaztjYXNlIjxhbGlnbm1lbnQiOmNhc2UiPGFsaWdubWVudC8+Ijp2YXIgeWU9e307Z2UudmVydGljYWwmJih5ZS52ZXJ0aWNhbD1nZS52ZXJ0aWNhbCksZ2UuaG9yaXpvbnRhbCYmKHllLmhvcml6''@;'; put 'put ''b250YWw9Z2UuaG9yaXpvbnRhbCksbnVsbCE9Z2UudGV4dFJvdGF0aW9uJiYoeWUudGV4dFJvdGF0aW9uPWdlLnRleHRSb3RhdGlvbiksZ2UuaW5kZW50JiYoeWUuaW5kZW50PWdlLmluZGVudCksZ2Uud3JhcFRleHQmJih5ZS53cmFwVGV4dD10aShnZS53cmFwVGV4dCkpLGdlLnNocmlua1Rv''@;'; put 'put ''Rml0JiYoeWUuc2hyaW5rVG9GaXQ9dGkoZ2Uuc2hyaW5rVG9GaXQpKSxHLmFsaWdubWVudD15ZTticmVhaztjYXNlIjxwcm90ZWN0aW9uIjpHLnByb3RlY3Rpb249e30sdGkoZ2UuaGlkZGVuKSYmKEcucHJvdGVjdGlvbi5oaWRkZW49ITApLG51bGwhPWdlLmxvY2tlZCYmKEcucHJvdGVjdGlv''@;'; put 'put ''bi5lZGl0YWJsZT0hdGkoZ2UubG9ja2VkKSk7YnJlYWs7Y2FzZSI8QWx0ZXJuYXRlQ29udGVudCI6Y2FzZSI8ZXh0IjpRPSEwO2JyZWFrO2Nhc2UiPC9BbHRlcm5hdGVDb250ZW50PiI6Y2FzZSI8L2V4dD4iOlE9ITE7YnJlYWs7ZGVmYXVsdDppZihrJiZrLldURiYmIVEpdGhyb3cgbmV3IEVy''@;'; put 'put ''cm9yKCJ1bnJlY29nbml6ZWQgIitnZVswXSsiIGluIGNlbGxYZnMiKX19KX0oYnQsYXQsRXQpLChidD1ldC5tYXRjaChOZSkpJiZmdW5jdGlvbiB5ayhTLFIsayxHKXtSLkRYRnx8KFIuRFhGPVtdKSwoU1swXS5tYXRjaChKaSl8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKFEpe1IuRFhGLnB1c2go''@;'; put 'put ''TDQoUSxSLGssRykpfSl9KGJ0LGF0LGN0LEV0KSwoYnQ9ZXQubWF0Y2goUGUpKSYmZnVuY3Rpb24gQlYoUyxSLGssRyl7Ui5UYWJsZXx8KFIuVGFibGU9W10pLChTWzBdLm1hdGNoKEtyKXx8W10pLmZvckVhY2goZnVuY3Rpb24oUSl7Ui5UYWJsZS5wdXNoKGZ1bmN0aW9uIFZWKFMsUixrLEcp''@;'; put 'put ''e3ZhciBRPSExLG9lPXt9O3JldHVybihTLm1hdGNoKGVuKXx8W10pLmZvckVhY2goZnVuY3Rpb24oZ2Upe3ZhciBwZT12cihnZSk7c3dpdGNoKFduKHBlWzBdKSl7Y2FzZSI8dGFibGVTdHlsZT4iOmNhc2UiPHRhYmxlU3R5bGUiOm9lLm5hbWU9cGUubmFtZS5yZXBsYWNlKC9eKFRhYmxlfFBp''@;'; put 'put ''dm90KVN0eWxlLywiIiksb2UucmF3bmFtZT1wZS5uYW1lLG9lLnBpdm90PSFwZS5waXZvdHx8dGkocGUucGl2b3QpLG9lLnRhYmxlPSFwZS50YWJsZXx8dGkocGUudGFibGUpO2JyZWFrO2Nhc2UiPHRhYmxlU3R5bGUvPiI6Y2FzZSI8L3RhYmxlU3R5bGU+IjpjYXNlIjxleHRMc3QiOmNhc2Ui''@;'; put 'put ''PGV4dExzdD4iOmNhc2UiPC9leHRMc3Q+IjpicmVhaztjYXNlIjx0YWJsZVN0eWxlRWxlbWVudCI6aWYocGUudHlwZSYmcGUuZHhmSWQpe2lmKCFSLkRYRnx8IVIuRFhGWytwZS5keGZJZF0pdGhyb3cgbmV3IEVycm9yKGdlKyIgY2Fubm90IGZpbmQgRFhGIik7b2VbcGUudHlwZV09Ui5EWEZb''@;'; put 'put ''K3BlLmR4ZklkXX1icmVhaztjYXNlIjxleHQiOlE9ITA7YnJlYWs7Y2FzZSI8L2V4dD4iOlE9ITE7YnJlYWs7ZGVmYXVsdDppZihHJiZHLldURiYmIVEpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgIitwZVswXSsiIGluIHRhYmxlU3R5bGUiKX19KSxvZX0oUSxSLDAsRykpfSl9KGJ0''@;'; put 'put ''LGF0LDAsRXQpLChhdC5Gb250c3x8W10pWzBdJiZJNChhdC5Gb250c1swXSksYXQpOmF0fX0oKSx3az1Qcigic3R5bGVTaGVldCIsbnVsbCx7eG1sbnM6WWkubWFpblswXSwieG1sbnM6dnQiOllpLnZ0fSk7ZnVuY3Rpb24gWnYoUyxSKXt2YXIgRyxrPVtJaSx3a107Uy5TU0YmJm51bGwhPShH''@;'; put 'put ''PWZ1bmN0aW9uIGs1KFMpe3ZhciBSPVsiPG51bUZtdHM+Il07cmV0dXJuW1s1LDhdLFsyMywyNl0sWzQxLDQ0XSxbNTAsMzkyXV0uZm9yRWFjaChmdW5jdGlvbihrKXtmb3IodmFyIEc9a1swXTtHPD1rWzFdOysrRyludWxsIT1TW0ddJiYoUltSLmxlbmd0aF09UHIoIm51bUZtdCIsbnVsbCx7''@;'; put 'put ''bnVtRm10SWQ6Ryxmb3JtYXRDb2RlOkxyKFNbR10pfSkpfSksMT09PVIubGVuZ3RoPyIiOihSW1IubGVuZ3RoXT0iPC9udW1GbXRzPiIsUlswXT1QcigibnVtRm10cyIsbnVsbCx7Y291bnQ6Ui5sZW5ndGgtMn0pLnJlcGxhY2UoIi8+IiwiPiIpLFIuam9pbigiIikpfShTLlNTRikpJiYoa1tr''@;'; put 'put ''Lmxlbmd0aF09Ryksa1trLmxlbmd0aF09ZnVuY3Rpb24gZzIoUyl7dmFyIFI9W107cmV0dXJuIFMuZm9yRWFjaChmdW5jdGlvbihrKXt2YXIgRz1bIjxmb250PiJdO2suYm9sZCYmRy5wdXNoKCI8Yi8+Iiksay5pdGFsaWMmJkcucHVzaCgiPGkvPiIpLGsuc3RyaWtlJiZHLnB1c2goIjxzdHJp''@;'; put 'put ''a2UvPiIpLGsuc2hhZG93JiZHLnB1c2goIjxzaGFkb3cvPiIpLEE1WytrLnVuZGVybGluZV0mJkcucHVzaCgnPHUgdmFsPSInK0E1WytrLnVuZGVybGluZV0rJyIvPicpLGsuc3omJkcucHVzaCgnPHN6IHZhbD0iJytrLnN6KyciLz4nKSxrLmNvbG9yJiZHLnB1c2goZ2Qoay5jb2xvciwhMCkp''@;'; put 'put ''LGsubmFtZSYmRy5wdXNoKCc8bmFtZSB2YWw9Iicray5uYW1lKyciLz4nKSxrLmZhbWlseSYmRy5wdXNoKCc8ZmFtaWx5IHZhbD0iJytrLmZhbWlseSsnIi8+Jyksay5zY2hlbWUmJkcucHVzaCgnPHNjaGVtZSB2YWw9Iicray5zY2hlbWUrJyIvPicpLGsudmFsaWduJiZHLnB1c2goJzx2ZXJ0''@;'; put 'put ''QWxpZ24gdmFsPSInK2sudmFsaWduKygic3ViIj09ay52YWxpZ258fCJzdXBlciI9PWsudmFsaWduPyJzY3JpcHQiOiIiKSsnIi8+JyksUi5wdXNoKEcuam9pbigiIikrIjwvZm9udD4iKX0pLCc8Zm9udHMgY291bnQ9IicrUi5sZW5ndGgrJyI+JytSLmpvaW4oIiIpKyI8L2ZvbnRzPiJ9KChT''@;'; put 'put ''LlN0eWxlc3x8e30pLkZvbnRzfHxbXSksa1trLmxlbmd0aF09ZnVuY3Rpb24gbWsoUyl7dmFyIFI9W107cmV0dXJuIFMuZm9yRWFjaChmdW5jdGlvbihrKXt2YXIgRz1udWxsO2lmKGsuc3RvcHMmJmsuc3RvcHMubGVuZ3RoKXt2YXIgUT17fTtrLmFuZ2xlJiYoUS5kZWdyZWU9TWF0aC5yb3Vu''@;'; put 'put ''ZChrLmFuZ2xlKSksRz1rLnN0b3BzLm1hcChmdW5jdGlvbihvZSl7cmV0dXJuIFByKCJzdG9wIixnZChvZSwiY29sb3IiLCEwKSxudWxsIT1vZS52P3twb3NpdGlvbjpvZS52fTp7fSl9KSxSLnB1c2goIjxmaWxsPiIrUHIoImdyYWRpZW50RmlsbCIsRy5qb2luKCIiKSxRKSsiPC9maWxsPiIp''@;'; put 'put ''fWVsc2V7aWYoay5mZ0NvbG9yKXtpZihHPShHfHwiIikrIjxmZ0NvbG9yICIsay5mZ0NvbG9yLnRoZW1lKUcrPSd0aGVtZT0iJytrLmZnQ29sb3IudGhlbWUrJyInKyhrLmZnQ29sb3IudGludD8nIHRpbnQ9Iicray5mZ0NvbG9yLnRpbnQrJyInOiIiKSsiLz4iO2Vsc2UgaWYobnVsbCE9ay5m''@;'; put 'put ''Z0NvbG9yLmluZGV4JiZudWxsPT1rLmZnQ29sb3IucmdiKUcrPSdpbmRleGVkPSInK2suZmdDb2xvci5pbmRleCsnIi8+JztlbHNlIGlmKGsuZmdDb2xvci5hdXRvKUcrPSdhdXRvPSIxIi8+JztlbHNle2lmKG51bGw9PWsuZmdDb2xvci5yZ2IpdGhyb3cgbmV3IEVycm9yKCJCYWQgY29sb3Ig''@;'; put 'put ''IitPZShrLmZnQ29sb3IpLmpvaW4oInwiKSk7Rys9J3JnYj0iRkYnK1AwKGsuZmdDb2xvci5yZ2IpKyciLz4nfSJzb2xpZCI9PWsucGF0dGVyblR5cGUmJiFrLmJnQ29sb3ImJihrLmJnQ29sb3I9e2luZGV4OjY0fSl9aWYoay5iZ0NvbG9yKWlmKEc9KEd8fCIiKSsiPGJnQ29sb3IgIixrLmJn''@;'; put 'put ''Q29sb3IudGhlbWUpRys9J3RoZW1lPSInK2suYmdDb2xvci50aGVtZSsnIi8+JztlbHNlIGlmKG51bGwhPWsuYmdDb2xvci5pbmRleCYmbnVsbD09ay5iZ0NvbG9yLnJnYilHKz0naW5kZXhlZD0iJytrLmJnQ29sb3IuaW5kZXgrJyIvPic7ZWxzZSBpZihrLmJnQ29sb3IuYXV0bylHKz0nYXV0''@;'; put 'put ''bz0iMSIvPic7ZWxzZXtpZihudWxsPT1rLmJnQ29sb3IucmdiKXRocm93IG5ldyBFcnJvcigiQmFkIGNvbG9yICIrT2Uoay5iZ0NvbG9yKS5qb2luKCJ8IikpO0crPSdyZ2I9IkZGJytQMChrLmJnQ29sb3IucmdiKSsnIi8+J31SLnB1c2goIjxmaWxsPiIrUHIoInBhdHRlcm5GaWxsIixHLHtw''@;'; put 'put ''YXR0ZXJuVHlwZTprLnBhdHRlcm5UeXBlfSkrIjwvZmlsbD4iKX19KSwnPGZpbGxzIGNvdW50PSInK1IubGVuZ3RoKyciPicrUi5qb2luKCIiKSsiPC9maWxscz4ifSgoUy5TdHlsZXN8fHt9KS5GaWxsc3x8W10pLGtbay5sZW5ndGhdPWZ1bmN0aW9uIERzKFMpe3ZhciBSPVtdO3JldHVybiBT''@;'; put 'put ''LmZvckVhY2goZnVuY3Rpb24oayl7dmFyIEc9W107Ry5wdXNoKFI0KGsubGVmdCwibGVmdCIpKSxHLnB1c2goUjQoay5yaWdodCwicmlnaHQiKSksRy5wdXNoKFI0KGsudG9wLCJ0b3AiKSksRy5wdXNoKFI0KGsuYm90dG9tLCJib3R0b20iKSksRy5wdXNoKFI0KGsuZGlhZ29uYWwsImRpYWdv''@;'; put 'put ''bmFsIikpLFIucHVzaCgiPGJvcmRlcj4iK0cuam9pbigiIikrIjwvYm9yZGVyPiIpfSksJzxib3JkZXJzIGNvdW50PSInK1IubGVuZ3RoKyciPicrUi5qb2luKCIiKSsiPC9ib3JkZXJzPiJ9KChTLlN0eWxlc3x8e30pLkJvcmRlcnN8fFtdKSxrW2subGVuZ3RoXT1mdW5jdGlvbiBpbmUoUyl7''@;'; put 'put ''dmFyIFI9Wyc8eGYgbnVtRm10SWQ9IjAiIGZvbnRJZD0iMCIgZmlsbElkPSIwIiBib3JkZXJJZD0iMCIvPiddO2lmKFMpZm9yKHZhciBrPTE7azxTLmxlbmd0aDsrK2spUi5wdXNoKFByKCJ4ZiIsbnVsbCx7bnVtRm10SWQ6U1trXS5udW1GbXRJZHx8MCxmb250SWQ6U1trXS5mb250SWR8fDAs''@;'; put 'put ''ZmlsbElkOlNba10uZmlsbElkfHwwLGJvcmRlcklkOlNba10uYm9yZGVySWR8fDB9KSk7cmV0dXJuJzxjZWxsU3R5bGVYZnMgY291bnQ9IicrUi5sZW5ndGgrJyI+JytSLmpvaW4oIiIpKyI8L2NlbGxTdHlsZVhmcz4ifShSLmNlbGxTdHlsZVhmcyksKEc9ZnVuY3Rpb24gbm5lKFMpe3ZhciBS''@;'; put 'put ''PVtdO3JldHVybiBSW1IubGVuZ3RoXT1QcigiY2VsbFhmcyIsbnVsbCksUy5mb3JFYWNoKGZ1bmN0aW9uKGspe3ZhciBHPWsuYWxpZ25tZW50O2RlbGV0ZSBrLmFsaWdubWVudDt2YXIgUT1rLnByb3RlY3Rpb247ZGVsZXRlIGsucHJvdGVjdGlvbjt2YXIgb2U9Rz9QcigiYWxpZ25tZW50Iixu''@;'; put 'put ''dWxsLEcpOiIiO29lKz1RP1ByKCJwcm90ZWN0aW9uIixudWxsLHtoaWRkZW46US5oaWRkZW4/MTowLGxvY2tlZDpRLmVkaXRhYmxlPzA6MX0pOiIiLFJbUi5sZW5ndGhdPVByKCJ4ZiIsb2V8fG51bGwsayksRyYmKGsuYWxpZ25tZW50PUcpLFEmJihrLnByb3RlY3Rpb249USl9KSxSW1IubGVu''@;'; put 'put ''Z3RoXT0iPC9jZWxsWGZzPiIsMj09PVIubGVuZ3RoPyIiOihSWzBdPVByKCJjZWxsWGZzIixudWxsLHtjb3VudDpSLmxlbmd0aC0yfSkucmVwbGFjZSgiLz4iLCI+IiksUi5qb2luKCIiKSl9KFIuY2VsbFhmcykpJiYoa1trLmxlbmd0aF09Ryksa1trLmxlbmd0aF09ZnVuY3Rpb24gb25lKFMp''@;'; put 'put ''e3ZhciBSPVsnPGNlbGxTdHlsZSBuYW1lPSJOb3JtYWwiIHhmSWQ9IjAiIGJ1aWx0aW5JZD0iMCIvPiddO2lmKFMpZm9yKHZhciBrPTE7azxTLmxlbmd0aDsrK2spUi5wdXNoKFByKCJjZWxsU3R5bGUiLG51bGwse25hbWU6U1trXS5uYW1lLHhmSWQ6a30pKTtyZXR1cm4nPGNlbGxTdHlsZXMg''@;'; put 'put ''Y291bnQ9IicrUi5sZW5ndGgrJyI+JytSLmpvaW4oIiIpKyI8L2NlbGxTdHlsZXM+In0oUi5jZWxsU3R5bGVYZnMpLFMuU3R5bGVzLkRYRnx8KFMuU3R5bGVzLkRYRj1bXSk7dmFyIFE9ZnVuY3Rpb24gZmQoUyxSLGspe3ZhciBHPVsnPHRhYmxlU3R5bGVzIGNvdW50PSInKyhTfHxbXSkubGVu''@;'; put 'put ''Z3RoKyciIGRlZmF1bHRUYWJsZVN0eWxlPSJUYWJsZVN0eWxlTWVkaXVtOSIgZGVmYXVsdFBpdm90U3R5bGU9IlBpdm90U3R5bGVNZWRpdW00IiddO3JldHVybiBTJiZTLmxlbmd0aD8oR1swXSs9Ij4iLFMuZm9yRWFjaChmdW5jdGlvbihRKXtHLnB1c2goZnVuY3Rpb24gQ0MoUyxSLGspe3Zh''@;'; put 'put ''ciBHPVtdO1sid2hvbGVUYWJsZSIsImhlYWRlclJvdyIsInRvdGFsUm93IiwiZmlyc3RDb2x1bW4iLCJsYXN0Q29sdW1uIiwiZmlyc3RSb3dTdHJpcGUiLCJzZWNvbmRSb3dTdHJpcGUiLCJmaXJzdENvbHVtblN0cmlwZSIsInNlY29uZENvbHVtblN0cmlwZSIsImZpcnN0SGVhZGVyQ2VsbCIs''@;'; put 'put ''Imxhc3RIZWFkZXJDZWxsIiwiZmlyc3RUb3RhbENlbGwiLCJsYXN0VG90YWxDZWxsIiwiZmlyc3RTdWJ0b3RhbENvbHVtbiIsInNlY29uZFN1YnRvdGFsQ29sdW1uIiwidGhpcmRTdWJ0b3RhbENvbHVtbiIsImZpcnN0U3VidG90YWxSb3ciLCJzZWNvbmRTdWJ0b3RhbFJvdyIsInRoaXJkU3Vi''@;'; put 'put ''dG90YWxSb3ciLCJibGFua1JvdyIsImZpcnN0Q29sdW1uU3ViaGVhZGluZyIsInNlY29uZENvbHVtblN1YmhlYWRpbmciLCJ0aGlyZENvbHVtblN1YmhlYWRpbmciLCJmaXJzdFJvd1N1YmhlYWRpbmciLCJzZWNvbmRSb3dTdWJoZWFkaW5nIiwidGhpcmRSb3dTdWJoZWFkaW5nIiwicGFnZUZp''@;'; put 'put ''ZWxkTGFiZWxzIiwicGFnZUZpZWxkVmFsdWVzIl0uZm9yRWFjaChmdW5jdGlvbihvZSl7aWYoU1tvZV0pe3ZhciBnZT1sUyhSLFNbb2VdKTtHLnB1c2goJzx0YWJsZVN0eWxlRWxlbWVudCBkeGZJZD0iJytnZSsnIiB0eXBlPSInK29lKyciLz4nKX19KTt2YXIgUT0nPHRhYmxlU3R5bGUgY291''@;'; put 'put ''bnQ9IicrRy5sZW5ndGgrJyIgcGl2b3Q9IicrICshIVMucGl2b3QrJyIgbmFtZT0iJytTLm5hbWUrJyInO3JldHVybiBHLmxlbmd0aD9RKyI+IitHLmpvaW4oIiIpKyI8L3RhYmxlU3R5bGU+IjpRKyIvPiJ9KFEsUikpfSksRy5qb2luKCIiKSsiPC90YWJsZVN0eWxlcz4iKTpHWzBdKyIvPiJ9''@;'; put 'put ''KChTLlN0eWxlc3x8e30pLlRhYmxlfHxbXSxTLlN0eWxlcy5EWEYpO3JldHVybiBrW2subGVuZ3RoXT1mdW5jdGlvbiBqVihTLFIpe2lmKCFTLmxlbmd0aClyZXR1cm4nPGR4ZnMgY291bnQ9IjAiLz4nO3ZhciBrPVsnPGR4ZnMgY291bnQ9IicrUy5sZW5ndGgrJyI+J107cmV0dXJuIFMuZm9y''@;'; put 'put ''RWFjaChmdW5jdGlvbihHKXtrLnB1c2goZnVuY3Rpb24gZTgoUyxSKXt2YXIgaz17Ym9sZDoiYiIsaXRhbGljOiJpIix2YWxpZ246InZlcnRBbGlnbiJ9LEc9WyI8ZHhmPiJdLFE9W10sb2U9W10sZ2U9W10seWU9W107cmV0dXJuIE9lKFMpLmZvckVhY2goZnVuY3Rpb24oTmUpe3N3aXRjaChO''@;'; put 'put ''ZSl7Y2FzZSJib2xkIjpjYXNlIml0YWxpYyI6Y2FzZSJzdHJpa2UiOmNhc2UidW5kZXJsaW5lIjpjYXNlImNvbG9yIjpjYXNlInZhbGlnbiI6Y2FzZSJzeiI6Y2FzZSJuYW1lIjpjYXNlIm91dGxpbmUiOmNhc2Uic2hhZG93IjpjYXNlImNoYXJzZXQiOmNhc2UiZmFtaWx5IjpjYXNlImNvbmRl''@;'; put 'put ''bnNlIjpjYXNlImV4dGVuZCI6Y2FzZSJzY2hlbWUiOlEucHVzaChOZSk7YnJlYWs7Y2FzZSJiZ0NvbG9yIjpjYXNlImZnQ29sb3IiOmdlLnB1c2goTmUpO2JyZWFrO2Nhc2UieiI6b2UucHVzaChOZSk7YnJlYWs7Y2FzZSJ0b3AiOmNhc2UiYm90dG9tIjpjYXNlImxlZnQiOmNhc2UicmlnaHQi''@;'; put 'put ''OmNhc2UiZGlhZ29uYWwiOmNhc2UidmVydGljYWwiOmNhc2UiaG9yaXpvbnRhbCI6eWUucHVzaChOZSk7YnJlYWs7Y2FzZSJwYXR0ZXJuVHlwZSI6Y2FzZSJkaWFnb25hbERvd24iOmNhc2UiZGlhZ29uYWxVcCI6Y2FzZSJzdG9wcyI6Y2FzZSJkZWdyZWUiOmJyZWFrO2RlZmF1bHQ6dGhyb3ci''@;'; put 'put ''VW5yZWNvZ25pemVkICIrTmUrIiBpbiBEWEYifX0pLFEubGVuZ3RoPjAmJihHLnB1c2goIjxmb250PiIpLFEuZm9yRWFjaChmdW5jdGlvbihOZSl7c3dpdGNoKE5lKXtjYXNlImJvbGQiOmNhc2UiaXRhbGljIjpjYXNlInN0cmlrZSI6Y2FzZSJvdXRsaW5lIjpjYXNlInNoYWRvdyI6Y2FzZSJj''@;'; put 'put ''b25kZW5zZSI6Y2FzZSJleHRlbmQiOkcucHVzaCgiPCIrKGtbTmVdfHxOZSkrJyB2YWw9IicrKFNbTmVdPyIxIjoiMCIpKyciLz4nKTticmVhaztjYXNlImNvbG9yIjpHLnB1c2goZ2QoU1tOZV0sTmUsITApKTticmVhaztjYXNlImZhbWlseSI6Y2FzZSJuYW1lIjpjYXNlInN6IjpjYXNlInNj''@;'; put 'put ''aGVtZSI6Ry5wdXNoKCI8Iisoa1tOZV18fE5lKSsnIHZhbD0iJytTW05lXSsnIi8+Jyk7YnJlYWs7Y2FzZSJ1bmRlcmxpbmUiOkcucHVzaCgnPHUgdmFsPSInK0E1W1NbTmVdfHwwXSsnIi8+Jyk7YnJlYWs7Y2FzZSJ2YWxpZ24iOkcucHVzaCgnPHZlcnRBbGlnbiB2YWw9IicrUy52YWxpZ24r''@;'; put 'put ''KCJzdWIiPT1TLnZhbGlnbnx8InN1cGVyIj09Uy52YWxpZ24/InNjcmlwdCI6IiIpKyciLz4nKTticmVhaztkZWZhdWx0OnRocm93IlVuc3VwcG9ydGVkICIrTmUrIiA6IGZvbnQgRFhGIn19KSxHLnB1c2goIjwvZm9udD4iKSksb2UubGVuZ3RoPjAmJkcucHVzaCgnPG51bUZtdCBmb3JtYXRD''@;'; put 'put ''b2RlPSInK0xyKFMueikrJyIgbnVtRm10SWQ9IicrZnVuY3Rpb24gc1MoUyxSKXtpZigibnVtYmVyIj09dHlwZW9mIFMpcmV0dXJuIFM7dmFyIGs9Ui5yZXZzc2ZbUz8/IkdlbmVyYWwiXSxHPTYwO2lmKG51bGw9PWspZm9yKDtHPDM5MjsrK0cpaWYobnVsbD09Ui5zc2ZbR10pcmV0dXJuIEEu''@;'; put 'put ''bG9hZChTLEcpLFIuc3NmW0ddPVMsUi5yZXZzc2ZbU109RyxHO3JldHVybiBrfShTLnosUikrJyIvPicpLGdlLmxlbmd0aD4wJiYoRy5wdXNoKCI8ZmlsbD4iKSxHLnB1c2goIjxwYXR0ZXJuRmlsbCIrKFMucGF0dGVyblR5cGU/JyBwYXR0ZXJuVHlwZT0iJytTLnBhdHRlcm5UeXBlKyciPic6''@;'; put 'put ''Ij4iKSksZ2UuZm9yRWFjaChmdW5jdGlvbihOZSl7c3dpdGNoKE5lKXtjYXNlInBhdHRlcm5UeXBlIjpicmVhaztjYXNlImZnQ29sb3IiOmNhc2UiYmdDb2xvciI6Ry5wdXNoKGdkKFNbTmVdLE5lLCEwKSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyJVbnN1cHBvcnRlZCAiK05lKyIgOiBmaWxsIERY''@;'; put 'put ''RiJ9fSksRy5wdXNoKCI8L3BhdHRlcm5GaWxsPiIpLEcucHVzaCgiPC9maWxsPiIpKSx5ZS5sZW5ndGg+MD8oRy5wdXNoKFsiPGJvcmRlciIsbnVsbCE9Uy5kaWFnb25hbERvd24/JyBkaWFnb25hbERvd249IicrICshIVMuZGlhZ29uYWxEb3duKyciJzoiIixudWxsIT1TLmRpYWdvbmFsVXA/''@;'; put 'put ''JyBkaWFnb25hbFVwPSInKyArISFTLmRpYWdvbmFsVXArJyInOiIiLCI+Il0uam9pbigiIikpLHllLmZvckVhY2goZnVuY3Rpb24oTmUpe0cucHVzaChSNChTW05lXSxOZSkpfSksRy5wdXNoKCI8L2JvcmRlcj4iKSk6KG51bGwhPVMuZGlhZ29uYWxEb3dufHxudWxsIT1TLmRpYWdvbmFsVXAp''@;'; put 'put ''JiZHLnB1c2goWyI8Ym9yZGVyIixudWxsIT1TLmRpYWdvbmFsRG93bj8nIGRpYWdvbmFsRG93bj0iJysgKyEhUy5kaWFnb25hbERvd24rJyInOiIiLG51bGwhPVMuZGlhZ29uYWxVcD8nIGRpYWdvbmFsVXA9IicrICshIVMuZGlhZ29uYWxVcCsnIic6IiIsIi8+Il0uam9pbigiIikpLDE9PUcu''@;'; put 'put ''bGVuZ3RoPyI8ZHhmLz4iOkcuam9pbigiIikrIjwvZHhmPiJ9KEcsUikpfSksay5qb2luKCIiKSsiPC9keGZzPiJ9KFMuU3R5bGVzLkRYRixSKSxrW2subGVuZ3RoXT1RLGsubGVuZ3RoPjImJihrW2subGVuZ3RoXT0iPC9zdHlsZVNoZWV0PiIsa1sxXT1rWzFdLnJlcGxhY2UoIi8+IiwiPiIp''@;'; put 'put ''KSxrLmpvaW4oIiIpfWZ1bmN0aW9uIFNDKFMsUixrKXtrfHwoaz1ibig2KzQqUi5sZW5ndGgpKSxrLndyaXRlX3NoaWZ0KDIsUyksRmMoUixrKTt2YXIgRz1rLmxlbmd0aD5rLmw/ay5zbGljZSgwLGsubCk6aztyZXR1cm4gbnVsbD09ay5sJiYoay5sPWsubGVuZ3RoKSxHfWZ1bmN0aW9uIFpW''@;'; put 'put ''KFMpe3JldHVybntjb2xvcjpRaChTKSxwb3M6UGwoUyl9fUthLlNUWT0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9zdHlsZXMiO3ZhciBNQz1bIm5vbmUiLCJzb2xpZCIsIm1lZGl1bUdyYXkiLCJkYXJrR3JheSIs''@;'; put 'put ''ImxpZ2h0R3JheSIsImRhcmtIb3Jpem9udGFsIiwiZGFya1ZlcnRpY2FsIiwiZGFya0Rvd24iLCJkYXJrVXAiLCJkYXJrR3JpZCIsImRhcmtUcmVsbGlzIiwibGlnaHRIb3Jpem9udGFsIiwibGlnaHRWZXJ0aWNhbCIsImxpZ2h0RG93biIsImxpZ2h0VXAiLCJsaWdodEdyaWQiLCJsaWdodFRy''@;'; put 'put ''ZWxsaXMiLCJncmF5MTI1IiwiZ3JheTA2MjUiXSxXVj1WZShNQyksRDU9WyJnZW5lcmFsIiwibGVmdCIsImNlbnRlciIsInJpZ2h0IiwiZmlsbCIsImp1c3RpZnkiLCJjZW50ZXJDb250aW51b3VzIiwiZGlzdHJpYnV0ZWQiXSx0OD1bInRvcCIsImNlbnRlciIsImJvdHRvbSIsImp1c3RpZnki''@;'; put 'put ''LCJkaXN0cmlidXRlZCJdO2Z1bmN0aW9uIGp1KFMsUixrKXtrfHwoaz1ibigxNikpLGsud3JpdGVfc2hpZnQoMixSfHwwKSxrLndyaXRlX3NoaWZ0KDIsUy5udW1GbXRJZHx8MCksay53cml0ZV9zaGlmdCgyLFMuZm9udElkfHwwKSxrLndyaXRlX3NoaWZ0KDIsUy5maWxsSWR8fDApLGsud3Jp''@;'; put 'put ''dGVfc2hpZnQoMixTLmJvcmRlcklkfHwwKSxrLndyaXRlX3NoaWZ0KDEsUy5hbGlnbm1lbnQmJlMuYWxpZ25tZW50LnRleHRSb3RhdGlvbnx8MCksay53cml0ZV9zaGlmdCgxLFMuYWxpZ25tZW50JiZTLmFsaWdubWVudC5pbmRlbnR8fDApO3ZhciBHPTAsUT0wO2lmKFMuYWxpZ25tZW50KXtp''@;'; put 'put ''ZihTLmFsaWdubWVudC5ob3Jpem9udGFsKXt2YXIgb2U9RDUuaW5kZXhPZihTLmFsaWdubWVudC5ob3Jpem9udGFsKTtvZTwwJiYob2U9MCksR3w9b2V9aWYoUy5hbGlnbm1lbnQudmVydGljYWwpe3ZhciBnZT10OC5pbmRleE9mKFMuYWxpZ25tZW50LnZlcnRpY2FsKTtnZTwwJiYoZ2U9Miks''@;'; put 'put ''R3w9Z2U8PDN9Uy5hbGlnbm1lbnQud3JhcFRleHQmJihHfD02NCksUy5hbGlnbm1lbnQuc2hyaW5rVG9GaXQmJihRfD0xKX1yZXR1cm4gay53cml0ZV9zaGlmdCgxLEcpLGsud3JpdGVfc2hpZnQoMSxRKSxrLndyaXRlX3NoaWZ0KDEsMCksay53cml0ZV9zaGlmdCgxLDApLGt9dmFyIHBkPVsi''@;'; put 'put ''bm9uZSIsInRoaW4iLCJtZWRpdW0iLCJkYXNoZWQiLCJkb3R0ZWQiLCJ0aGljayIsImRvdWJsZSIsImhhaXIiLCJtZWRpdW1EYXNoZWQiLCJkYXNoRG90IiwibWVkaXVtRGFzaERvdCIsImRhc2hEb3REb3QiLCJtZWRpdW1EYXNoRG90RG90Iiwic2xhbnREYXNoRG90Il07ZnVuY3Rpb24gSTUo''@;'; put 'put ''Uyl7dmFyIFI9Uy5yZWFkX3NoaWZ0KDEpO1MubCs9MTt2YXIgaz1RaChTKTtyZXR1cm57c3R5bGU6cGRbUl0sY29sb3I6a319ZnVuY3Rpb24gUjUoUyxSKXtyZXR1cm4gUnx8KFI9Ym4oMTApKSxTJiZTLnN0eWxlJiYiIiE9Uy5zdHlsZSYmIm5vbmUiIT1TLnN0eWxlJiYtMSE9PXBkLmluZGV4''@;'; put 'put ''T2YoUy5zdHlsZSk/KFIud3JpdGVfc2hpZnQoMSxwZC5pbmRleE9mKFMuc3R5bGUpKSxSLndyaXRlX3NoaWZ0KDEsMCksUy5jb2xvcj9tZihTLmNvbG9yLFIpOihSLndyaXRlX3NoaWZ0KDQsMCksUi53cml0ZV9zaGlmdCg0LDApKSk6KFIud3JpdGVfc2hpZnQoMSwwKSxSLndyaXRlX3NoaWZ0''@;'; put 'put ''KDEsMCksUi53cml0ZV9zaGlmdCg0LDApLFIud3JpdGVfc2hpZnQoNCwwKSksUn1mdW5jdGlvbiBTayhTLFIpe3JldHVybiBSfHwoUj1ibig1MikpLFIud3JpdGVfc2hpZnQoNCxTLnhmSWQpLFIud3JpdGVfc2hpZnQoMiwxKSxSLndyaXRlX3NoaWZ0KDEsK1MuYnVpbHRpbklkKSxSLndyaXRl''@;'; put 'put ''X3NoaWZ0KDEsMCkscGYoUy5uYW1lfHwiIixSKSxSLmxlbmd0aD5SLmw/Ui5zbGljZSgwLFIubCk6Un1mdW5jdGlvbiBZdihTLFIpeyFSfHwhUi50aGVtZUVsZW1lbnRzfHwhUi50aGVtZUVsZW1lbnRzLmNsclNjaGVtZXx8bnVsbCE9Uy50aGVtZSYmKFMucmdiPVM1KFIudGhlbWVFbGVtZW50''@;'; put 'put ''cy5jbHJTY2hlbWVbUy50aGVtZV0ucmdiLFMudGludHx8MCkpfWZ1bmN0aW9uIERrKFMsUil7dmFyIGs9YmkoKTtyZXR1cm4gRnIoaywiQnJ0QmVnaW5TdHlsZVNoZWV0IiksZnVuY3Rpb24gJFYoUyxSKXtpZihSKXt2YXIgaz0wO1tbNSw4XSxbMjMsMjZdLFs0MSw0NF0sWzUwLDM5Ml1dLmZv''@;'; put 'put ''ckVhY2goZnVuY3Rpb24oRyl7Zm9yKHZhciBRPUdbMF07UTw9R1sxXTsrK1EpbnVsbCE9UltRXSYmKytrfSksMCE9ayYmKEZyKFMsIkJydEJlZ2luRm10cyIsSzAoaykpLFtbNSw4XSxbMjMsMjZdLFs0MSw0NF0sWzUwLDM5Ml1dLmZvckVhY2goZnVuY3Rpb24oRyl7Zm9yKHZhciBRPUdbMF07''@;'; put 'put ''UTw9R1sxXTsrK1EpbnVsbCE9UltRXSYmRnIoUywiQnJ0Rm10IixTQyhRLFJbUV0pKX0pLEZyKFMsIkJydEVuZEZtdHMiKSl9fShrLFMuU1NGKSxmdW5jdGlvbiBLVihTLFIpe3ZhciBrPVIubGVuZ3RoOzAhPWsmJihGcihTLCJCcnRCZWdpbkZvbnRzIixLMChrKSksUi5mb3JFYWNoKGZ1bmN0''@;'; put 'put ''aW9uKEcpe0ZyKFMsIkJydEZvbnQiLGZ1bmN0aW9uIFVWKFMsUil7Unx8KFI9Ym4oMTUzKSksUi53cml0ZV9zaGlmdCgyLDIwKlMuc3opLGZ1bmN0aW9uIGR2KFMsUil7Unx8KFI9Ym4oMikpLFIud3JpdGVfc2hpZnQoMSwoUy5pdGFsaWM/MjowKXwoUy5zdHJpa2U/ODowKXwoUy5vdXRsaW5l''@;'; put 'put ''PzE2OjApfChTLnNoYWRvdz8zMjowKXwoUy5jb25kZW5zZT82NDowKXwoUy5leHRlbmQ/MTI4OjApKSxSLndyaXRlX3NoaWZ0KDEsMCl9KFMsUiksUi53cml0ZV9zaGlmdCgyLFMuYm9sZD83MDA6NDAwKTt2YXIgaz0wOyJzdXBlciI9PVMudmFsaWduP2s9MToic3ViIj09Uy52YWxpZ24mJihr''@;'; put 'put ''PTIpLFIud3JpdGVfc2hpZnQoMixrKSxSLndyaXRlX3NoaWZ0KDEsUy51bmRlcmxpbmV8fDApLFIud3JpdGVfc2hpZnQoMSxTLmZhbWlseXx8MCksUi53cml0ZV9zaGlmdCgxLFMuY2hhcnNldHx8MCksUi53cml0ZV9zaGlmdCgxLDApLG1mKFMuY29sb3IsUik7dmFyIEc9MDtyZXR1cm4ibWFq''@;'; put 'put ''b3IiPT1TLnNjaGVtZSYmKEc9MSksIm1pbm9yIj09Uy5zY2hlbWUmJihHPTIpLFIud3JpdGVfc2hpZnQoMSxHKSxGYyhTLm5hbWUsUiksUi5sZW5ndGg+Ui5sP1Iuc2xpY2UoMCxSLmwpOlJ9KEcpKX0pLEZyKFMsIkJydEVuZEZvbnRzIikpfShrLChTLlN0eWxlc3x8e30pLkZvbnRzfHxbXSks''@;'; put 'put ''ZnVuY3Rpb24gcVYoUyxSKXt2YXIgaz1SLmxlbmd0aDswIT1rJiYoRnIoUywiQnJ0QmVnaW5GaWxscyIsSzAoaykpLFIuZm9yRWFjaChmdW5jdGlvbihHKXtGcihTLCJCcnRGaWxsIixmdW5jdGlvbiBlMShTLFIpe1J8fChSPWJuKDg0KSk7dmFyIGs9V1ZbUy5wYXR0ZXJuVHlwZV07bnVsbD09''@;'; put 'put ''ayYmKGs9NDApLFIud3JpdGVfc2hpZnQoNCxrPStrKTt2YXIgRz0wO2lmKDQwIT1rKWZvcihtZihTLmZnQ29sb3J8fHtpbmRleDo2NH0sUiksbWYoUy5iZ0NvbG9yfHx7aW5kZXg6NjV9LFIpO0c8MTI7KytHKVIud3JpdGVfc2hpZnQoNCwwKTtlbHNle2Zvcig7Rzw0OysrRylSLndyaXRlX3No''@;'; put 'put ''aWZ0KDQsMCk7Zm9yKDtHPDEyOysrRylSLndyaXRlX3NoaWZ0KDQsMCl9cmV0dXJuIFIubGVuZ3RoPlIubD9SLnNsaWNlKDAsUi5sKTpSfShHKSl9KSxGcihTLCJCcnRFbmRGaWxscyIpKX0oaywoUy5TdHlsZXN8fHt9KS5GaWxsc3x8W10pLGZ1bmN0aW9uIFhWKFMsUil7dmFyIGs9Ui5sZW5n''@;'; put 'put ''dGg7MCE9ayYmKEZyKFMsIkJydEJlZ2luQm9yZGVycyIsSzAoaykpLFIuZm9yRWFjaChmdW5jdGlvbihHKXtGcihTLCJCcnRCb3JkZXIiLGZ1bmN0aW9uIENrKFMsUil7cmV0dXJuIFJ8fChSPWJuKDUxKSksUi53cml0ZV9zaGlmdCgxLDApLFI1KFMudG9wLFIpLFI1KFMuYm90dG9tLFIpLFI1''@;'; put 'put ''KFMubGVmdCxSKSxSNShTLnJpZ2h0LFIpLFI1KG51bGwsUiksUi5sZW5ndGg+Ui5sP1Iuc2xpY2UoMCxSLmwpOlJ9KEcpKX0pLEZyKFMsIkJydEVuZEJvcmRlcnMiKSl9KGssKFMuU3R5bGVzfHx7fSkuQm9yZGVyc3x8W10pLGZ1bmN0aW9uIEVrKFMsUil7dmFyIGs9MTtpZihSJiYoaz1SLmxl''@;'; put 'put ''bmd0aCksRnIoUywiQnJ0QmVnaW5DZWxsU3R5bGVYRnMiLEswKGspKSxGcihTLCJCcnRYRiIsanUoe251bUZtdElkOjAsZm9udElkOjAsZmlsbElkOjAsYm9yZGVySWQ6MH0sNjU1MzUpKSxSKWZvcih2YXIgRz0xO0c8Ui5sZW5ndGg7KytHKUZyKFMsIkJydFhGIixqdSh7bnVtRm10SWQ6UltH''@;'; put 'put ''XS5udW1GbXRJZHx8MCxmb250SWQ6UltHXS5mb250SWR8fDAsZmlsbElkOlJbR10uZmlsbElkfHwwLGJvcmRlcklkOlJbR10uYm9yZGVySWR8fDB9LDY1NTM1KSk7RnIoUywiQnJ0RW5kQ2VsbFN0eWxlWEZzIil9KGssUi5jZWxsU3R5bGVYZnMpLGZ1bmN0aW9uIFRrKFMsUil7RnIoUywiQnJ0''@;'; put 'put ''QmVnaW5DZWxsWEZzIixLMChSLmxlbmd0aCkpLFIuZm9yRWFjaChmdW5jdGlvbihrKXtGcihTLCJCcnRYRiIsanUoaywwKSl9KSxGcihTLCJCcnRFbmRDZWxsWEZzIil9KGssUi5jZWxsWGZzKSxmdW5jdGlvbiBBayhTLFIpe3ZhciBrPTE7aWYoUiYmKGs9Ui5sZW5ndGgpLEZyKFMsIkJydEJl''@;'; put 'put ''Z2luU3R5bGVzIixLMChrKSksRnIoUywiQnJ0U3R5bGUiLFNrKHt4ZklkOjAsYnVpbHRpbklkOjAsbmFtZToiTm9ybWFsIn0pKSxSKWZvcih2YXIgRz0xO0c8Ui5sZW5ndGg7KytHKUZyKFMsIkJydFN0eWxlIixTayh7eGZJZDpHLGJ1aWx0aW5JZDowLG5hbWU6UltHXS5uYW1lfSkpO0ZyKFMs''@;'; put 'put ''IkJydEVuZFN0eWxlcyIpfShrLFIuY2VsbFN0eWxlWGZzKSxmdW5jdGlvbiBHdihTKXtGcihTLCJCcnRCZWdpbkRYRnMiLEswKDApKSxGcihTLCJCcnRFbmREWEZzIil9KGspLGZ1bmN0aW9uIGtrKFMpe0ZyKFMsIkJydEJlZ2luVGFibGVTdHlsZXMiLGZ1bmN0aW9uIE1rKFMsUixrKXt2YXIg''@;'; put 'put ''Rz1ibigyMDUyKTtyZXR1cm4gRy53cml0ZV9zaGlmdCg0LFMpLHBmKFIsRykscGYoayxHKSxHLmxlbmd0aD5HLmw/Ry5zbGljZSgwLEcubCk6R30oMCwiVGFibGVTdHlsZU1lZGl1bTkiLCJQaXZvdFN0eWxlTWVkaXVtNCIpKSxGcihTLCJCcnRFbmRUYWJsZVN0eWxlcyIpfShrKSxGcihrLCJC''@;'; put 'put ''cnRFbmRTdHlsZVNoZWV0Iiksay5lbmQoKX1LYS5USEVNRT0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy90aGVtZSI7dmFyIElrPVsiPC9hOmx0MT4iLCI8L2E6ZGsxPiIsIjwvYTpsdDI+IiwiPC9hOmRrMj4iLCI8''@;'; put 'put ''L2E6YWNjZW50MT4iLCI8L2E6YWNjZW50Mj4iLCI8L2E6YWNjZW50Mz4iLCI8L2E6YWNjZW50ND4iLCI8L2E6YWNjZW50NT4iLCI8L2E6YWNjZW50Nj4iLCI8L2E6aGxpbms+IiwiPC9hOmZvbEhsaW5rPiJdO2Z1bmN0aW9uIFFWKFMsUixrKXtSLnRoZW1lRWxlbWVudHMuY2xyU2NoZW1lPVtd''@;'; put 'put ''O3ZhciBHPXt9OyhTWzBdLm1hdGNoKGVuKXx8W10pLmZvckVhY2goZnVuY3Rpb24oUSl7dmFyIG9lPXZyKFEpO3N3aXRjaChvZVswXSl7Y2FzZSI8YTpjbHJTY2hlbWUiOmNhc2UiPC9hOmNsclNjaGVtZT4iOmNhc2UiPC9hOnNyZ2JDbHI+IjpjYXNlIjwvYTpzeXNDbHI+IjpicmVhaztjYXNl''@;'; put 'put ''IjxhOnNyZ2JDbHIiOkcucmdiPW9lLnZhbDticmVhaztjYXNlIjxhOnN5c0NsciI6Ry5yZ2I9b2UubGFzdENscjticmVhaztjYXNlIjxhOmRrMT4iOmNhc2UiPC9hOmRrMT4iOmNhc2UiPGE6bHQxPiI6Y2FzZSI8L2E6bHQxPiI6Y2FzZSI8YTpkazI+IjpjYXNlIjwvYTpkazI+IjpjYXNlIjxh''@;'; put 'put ''Omx0Mj4iOmNhc2UiPC9hOmx0Mj4iOmNhc2UiPGE6YWNjZW50MT4iOmNhc2UiPC9hOmFjY2VudDE+IjpjYXNlIjxhOmFjY2VudDI+IjpjYXNlIjwvYTphY2NlbnQyPiI6Y2FzZSI8YTphY2NlbnQzPiI6Y2FzZSI8L2E6YWNjZW50Mz4iOmNhc2UiPGE6YWNjZW50ND4iOmNhc2UiPC9hOmFjY2Vu''@;'; put 'put ''dDQ+IjpjYXNlIjxhOmFjY2VudDU+IjpjYXNlIjwvYTphY2NlbnQ1PiI6Y2FzZSI8YTphY2NlbnQ2PiI6Y2FzZSI8L2E6YWNjZW50Nj4iOmNhc2UiPGE6aGxpbms+IjpjYXNlIjwvYTpobGluaz4iOmNhc2UiPGE6Zm9sSGxpbms+IjpjYXNlIjwvYTpmb2xIbGluaz4iOiIvIj09PW9lWzBdLmNo''@;'; put 'put ''YXJBdCgxKT8oUi50aGVtZUVsZW1lbnRzLmNsclNjaGVtZVtJay5pbmRleE9mKG9lWzBdKV09RyxHPXt9KTpHLm5hbWU9b2VbMF0uc2xpY2UoMyxvZVswXS5sZW5ndGgtMSk7YnJlYWs7ZGVmYXVsdDppZihrJiZrLldURil0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCAiK29lWzBdKyIg''@;'; put 'put ''aW4gY2xyU2NoZW1lIil9fSl9ZnVuY3Rpb24gZUIoKXt9ZnVuY3Rpb24gdEIoKXt9dmFyIG5CPS88YTpjbHJTY2hlbWUoW14+XSopPltcc1xTXSo8XC9hOmNsclNjaGVtZT4vLFJrPS88YTpmb250U2NoZW1lKFtePl0qKT5bXHNcU10qPFwvYTpmb250U2NoZW1lPi8sc25lPS88YTpmbXRTY2hl''@;'; put 'put ''bWUoW14+XSopPltcc1xTXSo8XC9hOmZtdFNjaGVtZT4vLHJCPS88YTp0aGVtZUVsZW1lbnRzKFtePl0qKT5bXHNcU10qPFwvYTp0aGVtZUVsZW1lbnRzPi87ZnVuY3Rpb24gRUMoUyxSKXtpZighU3x8MD09PVMubGVuZ3RoKXJldHVybiBFQyhpQigpKTt2YXIgayxHPXt9O2lmKCEoaz1TLm1h''@;'; put 'put ''dGNoKHJCKSkpdGhyb3cgbmV3IEVycm9yKCJ0aGVtZUVsZW1lbnRzIG5vdCBmb3VuZCBpbiB0aGVtZSIpO3JldHVybiBmdW5jdGlvbiBMayhTLFIsayl7dmFyIEc7Ui50aGVtZUVsZW1lbnRzPXt9LFtbImNsclNjaGVtZSIsbkIsUVZdLFsiZm9udFNjaGVtZSIsUmssZUJdLFsiZm10U2NoZW1l''@;'; put 'put ''IixzbmUsdEJdXS5mb3JFYWNoKGZ1bmN0aW9uKFEpe2lmKCEoRz1TLm1hdGNoKFFbMV0pKSl0aHJvdyBuZXcgRXJyb3IoUVswXSsiIG5vdCBmb3VuZCBpbiB0aGVtZUVsZW1lbnRzIik7UVsyXShHLFIsayl9KX0oa1swXSxHLFIpLEcucmF3PVMsR31mdW5jdGlvbiBpQihTLFIpe2lmKFImJlIu''@;'; put 'put ''dGhlbWVYTFNYKXJldHVybiBSLnRoZW1lWExTWDtpZihTJiYic3RyaW5nIj09dHlwZW9mIFMucmF3KXJldHVybiBTLnJhdzt2YXIgaz1bSWldO3JldHVybiBrW2subGVuZ3RoXT0nPGE6dGhlbWUgeG1sbnM6YT0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL2RyYXdpbmdtbC8y''@;'; put 'put ''MDA2L21haW4iIG5hbWU9Ik9mZmljZSBUaGVtZSI+JyxrW2subGVuZ3RoXT0iPGE6dGhlbWVFbGVtZW50cz4iLGtbay5sZW5ndGhdPSc8YTpjbHJTY2hlbWUgbmFtZT0iT2ZmaWNlIj4nLGtbay5sZW5ndGhdPSc8YTpkazE+PGE6c3lzQ2xyIHZhbD0id2luZG93VGV4dCIgbGFzdENscj0iMDAw''@;'; put 'put ''MDAwIi8+PC9hOmRrMT4nLGtbay5sZW5ndGhdPSc8YTpsdDE+PGE6c3lzQ2xyIHZhbD0id2luZG93IiBsYXN0Q2xyPSJGRkZGRkYiLz48L2E6bHQxPicsa1trLmxlbmd0aF09JzxhOmRrMj48YTpzcmdiQ2xyIHZhbD0iMUY0OTdEIi8+PC9hOmRrMj4nLGtbay5sZW5ndGhdPSc8YTpsdDI+PGE6''@;'; put 'put ''c3JnYkNsciB2YWw9IkVFRUNFMSIvPjwvYTpsdDI+JyxrW2subGVuZ3RoXT0nPGE6YWNjZW50MT48YTpzcmdiQ2xyIHZhbD0iNEY4MUJEIi8+PC9hOmFjY2VudDE+JyxrW2subGVuZ3RoXT0nPGE6YWNjZW50Mj48YTpzcmdiQ2xyIHZhbD0iQzA1MDREIi8+PC9hOmFjY2VudDI+JyxrW2subGVu''@;'; put 'put ''Z3RoXT0nPGE6YWNjZW50Mz48YTpzcmdiQ2xyIHZhbD0iOUJCQjU5Ii8+PC9hOmFjY2VudDM+JyxrW2subGVuZ3RoXT0nPGE6YWNjZW50ND48YTpzcmdiQ2xyIHZhbD0iODA2NEEyIi8+PC9hOmFjY2VudDQ+JyxrW2subGVuZ3RoXT0nPGE6YWNjZW50NT48YTpzcmdiQ2xyIHZhbD0iNEJBQ0M2''@;'; put 'put ''Ii8+PC9hOmFjY2VudDU+JyxrW2subGVuZ3RoXT0nPGE6YWNjZW50Nj48YTpzcmdiQ2xyIHZhbD0iRjc5NjQ2Ii8+PC9hOmFjY2VudDY+JyxrW2subGVuZ3RoXT0nPGE6aGxpbms+PGE6c3JnYkNsciB2YWw9IjAwMDBGRiIvPjwvYTpobGluaz4nLGtbay5sZW5ndGhdPSc8YTpmb2xIbGluaz48''@;'; put 'put ''YTpzcmdiQ2xyIHZhbD0iODAwMDgwIi8+PC9hOmZvbEhsaW5rPicsa1trLmxlbmd0aF09IjwvYTpjbHJTY2hlbWU+IixrW2subGVuZ3RoXT0nPGE6Zm9udFNjaGVtZSBuYW1lPSJPZmZpY2UiPicsa1trLmxlbmd0aF09IjxhOm1ham9yRm9udD4iLGtbay5sZW5ndGhdPSc8YTpsYXRpbiB0eXBl''@;'; put 'put ''ZmFjZT0iQ2FtYnJpYSIvPicsa1trLmxlbmd0aF09JzxhOmVhIHR5cGVmYWNlPSIiLz4nLGtbay5sZW5ndGhdPSc8YTpjcyB0eXBlZmFjZT0iIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkpwYW4iIHR5cGVmYWNlPSJcdWZmMmRcdWZmMzMgXHVmZjMwXHUzMGI0XHUzMGI3XHUz''@;'; put 'put ''MGMzXHUzMGFmIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkhhbmciIHR5cGVmYWNlPSJcdWI5ZDFcdWM3NDAgXHVhY2UwXHViNTE1Ii8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkhhbnMiIHR5cGVmYWNlPSJcdTViOGJcdTRmNTMiLz4nLGtbay5sZW5ndGhdPSc8''@;'; put 'put ''YTpmb250IHNjcmlwdD0iSGFudCIgdHlwZWZhY2U9Ilx1NjViMFx1N2QzMFx1NjYwZVx1OWFkNCIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJBcmFiIiB0eXBlZmFjZT0iVGltZXMgTmV3IFJvbWFuIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkhlYnIiIHR5cGVm''@;'; put 'put ''YWNlPSJUaW1lcyBOZXcgUm9tYW4iLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iVGhhaSIgdHlwZWZhY2U9IlRhaG9tYSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJFdGhpIiB0eXBlZmFjZT0iTnlhbGEiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0i''@;'; put 'put ''QmVuZyIgdHlwZWZhY2U9IlZyaW5kYSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJHdWpyIiB0eXBlZmFjZT0iU2hydXRpIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IktobXIiIHR5cGVmYWNlPSJNb29sQm9yYW4iLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNj''@;'; put 'put ''cmlwdD0iS25kYSIgdHlwZWZhY2U9IlR1bmdhIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ikd1cnUiIHR5cGVmYWNlPSJSYWF2aSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJDYW5zIiB0eXBlZmFjZT0iRXVwaGVtaWEiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250''@;'; put 'put ''IHNjcmlwdD0iQ2hlciIgdHlwZWZhY2U9IlBsYW50YWdlbmV0IENoZXJva2VlIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IllpaWkiIHR5cGVmYWNlPSJNaWNyb3NvZnQgWWkgQmFpdGkiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iVGlidCIgdHlwZWZhY2U9Ik1p''@;'; put 'put ''Y3Jvc29mdCBIaW1hbGF5YSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJUaGFhIiB0eXBlZmFjZT0iTVYgQm9saSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJEZXZhIiB0eXBlZmFjZT0iTWFuZ2FsIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlRl''@;'; put 'put ''bHUiIHR5cGVmYWNlPSJHYXV0YW1pIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlRhbWwiIHR5cGVmYWNlPSJMYXRoYSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJTeXJjIiB0eXBlZmFjZT0iRXN0cmFuZ2VsbyBFZGVzc2EiLz4nLGtbay5sZW5ndGhdPSc8YTpm''@;'; put 'put ''b250IHNjcmlwdD0iT3J5YSIgdHlwZWZhY2U9IkthbGluZ2EiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iTWx5bSIgdHlwZWZhY2U9IkthcnRpa2EiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iTGFvbyIgdHlwZWZhY2U9IkRva0NoYW1wYSIvPicsa1trLmxlbmd0''@;'; put 'put ''aF09JzxhOmZvbnQgc2NyaXB0PSJTaW5oIiB0eXBlZmFjZT0iSXNrb29sYSBQb3RhIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ik1vbmciIHR5cGVmYWNlPSJNb25nb2xpYW4gQmFpdGkiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iVmlldCIgdHlwZWZhY2U9IlRp''@;'; put 'put ''bWVzIE5ldyBSb21hbiIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJVaWdoIiB0eXBlZmFjZT0iTWljcm9zb2Z0IFVpZ2h1ciIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJHZW9yIiB0eXBlZmFjZT0iU3lsZmFlbiIvPicsa1trLmxlbmd0aF09IjwvYTptYWpvckZv''@;'; put 'put ''bnQ+IixrW2subGVuZ3RoXT0iPGE6bWlub3JGb250PiIsa1trLmxlbmd0aF09JzxhOmxhdGluIHR5cGVmYWNlPSJDYWxpYnJpIi8+JyxrW2subGVuZ3RoXT0nPGE6ZWEgdHlwZWZhY2U9IiIvPicsa1trLmxlbmd0aF09JzxhOmNzIHR5cGVmYWNlPSIiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250''@;'; put 'put ''IHNjcmlwdD0iSnBhbiIgdHlwZWZhY2U9Ilx1ZmYyZFx1ZmYzMyBcdWZmMzBcdTMwYjRcdTMwYjdcdTMwYzNcdTMwYWYiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iSGFuZyIgdHlwZWZhY2U9Ilx1YjlkMVx1Yzc0MCBcdWFjZTBcdWI1MTUiLz4nLGtbay5sZW5ndGhdPSc8YTpm''@;'; put 'put ''b250IHNjcmlwdD0iSGFucyIgdHlwZWZhY2U9Ilx1NWI4Ylx1NGY1MyIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJIYW50IiB0eXBlZmFjZT0iXHU2NWIwXHU3ZDMwXHU2NjBlXHU5YWQ0Ii8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkFyYWIiIHR5cGVmYWNlPSJB''@;'; put 'put ''cmlhbCIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJIZWJyIiB0eXBlZmFjZT0iQXJpYWwiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iVGhhaSIgdHlwZWZhY2U9IlRhaG9tYSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJFdGhpIiB0eXBlZmFjZT0i''@;'; put 'put ''TnlhbGEiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iQmVuZyIgdHlwZWZhY2U9IlZyaW5kYSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJHdWpyIiB0eXBlZmFjZT0iU2hydXRpIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IktobXIiIHR5cGVmYWNl''@;'; put 'put ''PSJEYXVuUGVuaCIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJLbmRhIiB0eXBlZmFjZT0iVHVuZ2EiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iR3VydSIgdHlwZWZhY2U9IlJhYXZpIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkNhbnMiIHR5cGVm''@;'; put 'put ''YWNlPSJFdXBoZW1pYSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJDaGVyIiB0eXBlZmFjZT0iUGxhbnRhZ2VuZXQgQ2hlcm9rZWUiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iWWlpaSIgdHlwZWZhY2U9Ik1pY3Jvc29mdCBZaSBCYWl0aSIvPicsa1trLmxlbmd0''@;'; put 'put ''aF09JzxhOmZvbnQgc2NyaXB0PSJUaWJ0IiB0eXBlZmFjZT0iTWljcm9zb2Z0IEhpbWFsYXlhIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlRoYWEiIHR5cGVmYWNlPSJNViBCb2xpIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkRldmEiIHR5cGVmYWNlPSJNYW5n''@;'; put 'put ''YWwiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iVGVsdSIgdHlwZWZhY2U9IkdhdXRhbWkiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iVGFtbCIgdHlwZWZhY2U9IkxhdGhhIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlN5cmMiIHR5cGVmYWNlPSJF''@;'; put 'put ''c3RyYW5nZWxvIEVkZXNzYSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJPcnlhIiB0eXBlZmFjZT0iS2FsaW5nYSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJNbHltIiB0eXBlZmFjZT0iS2FydGlrYSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJM''@;'; put 'put ''YW9vIiB0eXBlZmFjZT0iRG9rQ2hhbXBhIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlNpbmgiIHR5cGVmYWNlPSJJc2tvb2xhIFBvdGEiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iTW9uZyIgdHlwZWZhY2U9Ik1vbmdvbGlhbiBCYWl0aSIvPicsa1trLmxlbmd0''@;'; put 'put ''aF09JzxhOmZvbnQgc2NyaXB0PSJWaWV0IiB0eXBlZmFjZT0iQXJpYWwiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iVWlnaCIgdHlwZWZhY2U9Ik1pY3Jvc29mdCBVaWdodXIiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iR2VvciIgdHlwZWZhY2U9IlN5bGZhZW4i''@;'; put 'put ''Lz4nLGtbay5sZW5ndGhdPSI8L2E6bWlub3JGb250PiIsa1trLmxlbmd0aF09IjwvYTpmb250U2NoZW1lPiIsa1trLmxlbmd0aF09JzxhOmZtdFNjaGVtZSBuYW1lPSJPZmZpY2UiPicsa1trLmxlbmd0aF09IjxhOmZpbGxTdHlsZUxzdD4iLGtbay5sZW5ndGhdPSc8YTpzb2xpZEZpbGw+PGE6''@;'; put 'put ''c2NoZW1lQ2xyIHZhbD0icGhDbHIiLz48L2E6c29saWRGaWxsPicsa1trLmxlbmd0aF09JzxhOmdyYWRGaWxsIHJvdFdpdGhTaGFwZT0iMSI+JyxrW2subGVuZ3RoXT0iPGE6Z3NMc3Q+IixrW2subGVuZ3RoXT0nPGE6Z3MgcG9zPSIwIj48YTpzY2hlbWVDbHIgdmFsPSJwaENsciI+PGE6dGlu''@;'; put 'put ''dCB2YWw9IjUwMDAwIi8+PGE6c2F0TW9kIHZhbD0iMzAwMDAwIi8+PC9hOnNjaGVtZUNscj48L2E6Z3M+JyxrW2subGVuZ3RoXT0nPGE6Z3MgcG9zPSIzNTAwMCI+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiPjxhOnRpbnQgdmFsPSIzNzAwMCIvPjxhOnNhdE1vZCB2YWw9IjMwMDAwMCIvPjwv''@;'; put 'put ''YTpzY2hlbWVDbHI+PC9hOmdzPicsa1trLmxlbmd0aF09JzxhOmdzIHBvcz0iMTAwMDAwIj48YTpzY2hlbWVDbHIgdmFsPSJwaENsciI+PGE6dGludCB2YWw9IjE1MDAwIi8+PGE6c2F0TW9kIHZhbD0iMzUwMDAwIi8+PC9hOnNjaGVtZUNscj48L2E6Z3M+JyxrW2subGVuZ3RoXT0iPC9hOmdz''@;'; put 'put ''THN0PiIsa1trLmxlbmd0aF09JzxhOmxpbiBhbmc9IjE2MjAwMDAwIiBzY2FsZWQ9IjEiLz4nLGtbay5sZW5ndGhdPSI8L2E6Z3JhZEZpbGw+IixrW2subGVuZ3RoXT0nPGE6Z3JhZEZpbGwgcm90V2l0aFNoYXBlPSIxIj4nLGtbay5sZW5ndGhdPSI8YTpnc0xzdD4iLGtbay5sZW5ndGhdPSc8''@;'; put 'put ''YTpncyBwb3M9IjAiPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIj48YTp0aW50IHZhbD0iMTAwMDAwIi8+PGE6c2hhZGUgdmFsPSIxMDAwMDAiLz48YTpzYXRNb2QgdmFsPSIxMzAwMDAiLz48L2E6c2NoZW1lQ2xyPjwvYTpncz4nLGtbay5sZW5ndGhdPSc8YTpncyBwb3M9IjEwMDAwMCI+PGE6''@;'; put 'put ''c2NoZW1lQ2xyIHZhbD0icGhDbHIiPjxhOnRpbnQgdmFsPSI1MDAwMCIvPjxhOnNoYWRlIHZhbD0iMTAwMDAwIi8+PGE6c2F0TW9kIHZhbD0iMzUwMDAwIi8+PC9hOnNjaGVtZUNscj48L2E6Z3M+JyxrW2subGVuZ3RoXT0iPC9hOmdzTHN0PiIsa1trLmxlbmd0aF09JzxhOmxpbiBhbmc9IjE2''@;'; put 'put ''MjAwMDAwIiBzY2FsZWQ9IjAiLz4nLGtbay5sZW5ndGhdPSI8L2E6Z3JhZEZpbGw+IixrW2subGVuZ3RoXT0iPC9hOmZpbGxTdHlsZUxzdD4iLGtbay5sZW5ndGhdPSI8YTpsblN0eWxlTHN0PiIsa1trLmxlbmd0aF09JzxhOmxuIHc9Ijk1MjUiIGNhcD0iZmxhdCIgY21wZD0ic25nIiBhbGdu''@;'; put 'put ''PSJjdHIiPjxhOnNvbGlkRmlsbD48YTpzY2hlbWVDbHIgdmFsPSJwaENsciI+PGE6c2hhZGUgdmFsPSI5NTAwMCIvPjxhOnNhdE1vZCB2YWw9IjEwNTAwMCIvPjwvYTpzY2hlbWVDbHI+PC9hOnNvbGlkRmlsbD48YTpwcnN0RGFzaCB2YWw9InNvbGlkIi8+PC9hOmxuPicsa1trLmxlbmd0aF09''@;'; put 'put ''JzxhOmxuIHc9IjI1NDAwIiBjYXA9ImZsYXQiIGNtcGQ9InNuZyIgYWxnbj0iY3RyIj48YTpzb2xpZEZpbGw+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiLz48L2E6c29saWRGaWxsPjxhOnByc3REYXNoIHZhbD0ic29saWQiLz48L2E6bG4+JyxrW2subGVuZ3RoXT0nPGE6bG4gdz0iMzgxMDAi''@;'; put 'put ''IGNhcD0iZmxhdCIgY21wZD0ic25nIiBhbGduPSJjdHIiPjxhOnNvbGlkRmlsbD48YTpzY2hlbWVDbHIgdmFsPSJwaENsciIvPjwvYTpzb2xpZEZpbGw+PGE6cHJzdERhc2ggdmFsPSJzb2xpZCIvPjwvYTpsbj4nLGtbay5sZW5ndGhdPSI8L2E6bG5TdHlsZUxzdD4iLGtbay5sZW5ndGhdPSI8''@;'; put 'put ''YTplZmZlY3RTdHlsZUxzdD4iLGtbay5sZW5ndGhdPSI8YTplZmZlY3RTdHlsZT4iLGtbay5sZW5ndGhdPSI8YTplZmZlY3RMc3Q+IixrW2subGVuZ3RoXT0nPGE6b3V0ZXJTaGR3IGJsdXJSYWQ9IjQwMDAwIiBkaXN0PSIyMDAwMCIgZGlyPSI1NDAwMDAwIiByb3RXaXRoU2hhcGU9IjAiPjxh''@;'; put 'put ''OnNyZ2JDbHIgdmFsPSIwMDAwMDAiPjxhOmFscGhhIHZhbD0iMzgwMDAiLz48L2E6c3JnYkNscj48L2E6b3V0ZXJTaGR3Picsa1trLmxlbmd0aF09IjwvYTplZmZlY3RMc3Q+IixrW2subGVuZ3RoXT0iPC9hOmVmZmVjdFN0eWxlPiIsa1trLmxlbmd0aF09IjxhOmVmZmVjdFN0eWxlPiIsa1tr''@;'; put 'put ''Lmxlbmd0aF09IjxhOmVmZmVjdExzdD4iLGtbay5sZW5ndGhdPSc8YTpvdXRlclNoZHcgYmx1clJhZD0iNDAwMDAiIGRpc3Q9IjIzMDAwIiBkaXI9IjU0MDAwMDAiIHJvdFdpdGhTaGFwZT0iMCI+PGE6c3JnYkNsciB2YWw9IjAwMDAwMCI+PGE6YWxwaGEgdmFsPSIzNTAwMCIvPjwvYTpzcmdi''@;'; put 'put ''Q2xyPjwvYTpvdXRlclNoZHc+JyxrW2subGVuZ3RoXT0iPC9hOmVmZmVjdExzdD4iLGtbay5sZW5ndGhdPSI8L2E6ZWZmZWN0U3R5bGU+IixrW2subGVuZ3RoXT0iPGE6ZWZmZWN0U3R5bGU+IixrW2subGVuZ3RoXT0iPGE6ZWZmZWN0THN0PiIsa1trLmxlbmd0aF09JzxhOm91dGVyU2hkdyBi''@;'; put 'put ''bHVyUmFkPSI0MDAwMCIgZGlzdD0iMjMwMDAiIGRpcj0iNTQwMDAwMCIgcm90V2l0aFNoYXBlPSIwIj48YTpzcmdiQ2xyIHZhbD0iMDAwMDAwIj48YTphbHBoYSB2YWw9IjM1MDAwIi8+PC9hOnNyZ2JDbHI+PC9hOm91dGVyU2hkdz4nLGtbay5sZW5ndGhdPSI8L2E6ZWZmZWN0THN0PiIsa1tr''@;'; put 'put ''Lmxlbmd0aF09JzxhOnNjZW5lM2Q+PGE6Y2FtZXJhIHByc3Q9Im9ydGhvZ3JhcGhpY0Zyb250Ij48YTpyb3QgbGF0PSIwIiBsb249IjAiIHJldj0iMCIvPjwvYTpjYW1lcmE+PGE6bGlnaHRSaWcgcmlnPSJ0aHJlZVB0IiBkaXI9InQiPjxhOnJvdCBsYXQ9IjAiIGxvbj0iMCIgcmV2PSIxMjAw''@;'; put 'put ''MDAwIi8+PC9hOmxpZ2h0UmlnPjwvYTpzY2VuZTNkPicsa1trLmxlbmd0aF09JzxhOnNwM2Q+PGE6YmV2ZWxUIHc9IjYzNTAwIiBoPSIyNTQwMCIvPjwvYTpzcDNkPicsa1trLmxlbmd0aF09IjwvYTplZmZlY3RTdHlsZT4iLGtbay5sZW5ndGhdPSI8L2E6ZWZmZWN0U3R5bGVMc3Q+IixrW2su''@;'; put 'put ''bGVuZ3RoXT0iPGE6YmdGaWxsU3R5bGVMc3Q+IixrW2subGVuZ3RoXT0nPGE6c29saWRGaWxsPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIi8+PC9hOnNvbGlkRmlsbD4nLGtbay5sZW5ndGhdPSc8YTpncmFkRmlsbCByb3RXaXRoU2hhcGU9IjEiPicsa1trLmxlbmd0aF09IjxhOmdzTHN0PiIs''@;'; put 'put ''a1trLmxlbmd0aF09JzxhOmdzIHBvcz0iMCI+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiPjxhOnRpbnQgdmFsPSI0MDAwMCIvPjxhOnNhdE1vZCB2YWw9IjM1MDAwMCIvPjwvYTpzY2hlbWVDbHI+PC9hOmdzPicsa1trLmxlbmd0aF09JzxhOmdzIHBvcz0iNDAwMDAiPjxhOnNjaGVtZUNsciB2''@;'; put 'put ''YWw9InBoQ2xyIj48YTp0aW50IHZhbD0iNDUwMDAiLz48YTpzaGFkZSB2YWw9Ijk5MDAwIi8+PGE6c2F0TW9kIHZhbD0iMzUwMDAwIi8+PC9hOnNjaGVtZUNscj48L2E6Z3M+JyxrW2subGVuZ3RoXT0nPGE6Z3MgcG9zPSIxMDAwMDAiPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIj48YTpzaGFk''@;'; put 'put ''ZSB2YWw9IjIwMDAwIi8+PGE6c2F0TW9kIHZhbD0iMjU1MDAwIi8+PC9hOnNjaGVtZUNscj48L2E6Z3M+JyxrW2subGVuZ3RoXT0iPC9hOmdzTHN0PiIsa1trLmxlbmd0aF09JzxhOnBhdGggcGF0aD0iY2lyY2xlIj48YTpmaWxsVG9SZWN0IGw9IjUwMDAwIiB0PSItODAwMDAiIHI9IjUwMDAw''@;'; put 'put ''IiBiPSIxODAwMDAiLz48L2E6cGF0aD4nLGtbay5sZW5ndGhdPSI8L2E6Z3JhZEZpbGw+IixrW2subGVuZ3RoXT0nPGE6Z3JhZEZpbGwgcm90V2l0aFNoYXBlPSIxIj4nLGtbay5sZW5ndGhdPSI8YTpnc0xzdD4iLGtbay5sZW5ndGhdPSc8YTpncyBwb3M9IjAiPjxhOnNjaGVtZUNsciB2YWw9''@;'; put 'put ''InBoQ2xyIj48YTp0aW50IHZhbD0iODAwMDAiLz48YTpzYXRNb2QgdmFsPSIzMDAwMDAiLz48L2E6c2NoZW1lQ2xyPjwvYTpncz4nLGtbay5sZW5ndGhdPSc8YTpncyBwb3M9IjEwMDAwMCI+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiPjxhOnNoYWRlIHZhbD0iMzAwMDAiLz48YTpzYXRNb2Qg''@;'; put 'put ''dmFsPSIyMDAwMDAiLz48L2E6c2NoZW1lQ2xyPjwvYTpncz4nLGtbay5sZW5ndGhdPSI8L2E6Z3NMc3Q+IixrW2subGVuZ3RoXT0nPGE6cGF0aCBwYXRoPSJjaXJjbGUiPjxhOmZpbGxUb1JlY3QgbD0iNTAwMDAiIHQ9IjUwMDAwIiByPSI1MDAwMCIgYj0iNTAwMDAiLz48L2E6cGF0aD4nLGtb''@;'; put 'put ''ay5sZW5ndGhdPSI8L2E6Z3JhZEZpbGw+IixrW2subGVuZ3RoXT0iPC9hOmJnRmlsbFN0eWxlTHN0PiIsa1trLmxlbmd0aF09IjwvYTpmbXRTY2hlbWU+IixrW2subGVuZ3RoXT0iPC9hOnRoZW1lRWxlbWVudHM+IixrW2subGVuZ3RoXT0iPGE6b2JqZWN0RGVmYXVsdHM+IixrW2subGVuZ3Ro''@;'; put 'put ''XT0iPGE6c3BEZWY+IixrW2subGVuZ3RoXT0nPGE6c3BQci8+PGE6Ym9keVByLz48YTpsc3RTdHlsZS8+PGE6c3R5bGU+PGE6bG5SZWYgaWR4PSIxIj48YTpzY2hlbWVDbHIgdmFsPSJhY2NlbnQxIi8+PC9hOmxuUmVmPjxhOmZpbGxSZWYgaWR4PSIzIj48YTpzY2hlbWVDbHIgdmFsPSJhY2Nl''@;'; put 'put ''bnQxIi8+PC9hOmZpbGxSZWY+PGE6ZWZmZWN0UmVmIGlkeD0iMiI+PGE6c2NoZW1lQ2xyIHZhbD0iYWNjZW50MSIvPjwvYTplZmZlY3RSZWY+PGE6Zm9udFJlZiBpZHg9Im1pbm9yIj48YTpzY2hlbWVDbHIgdmFsPSJsdDEiLz48L2E6Zm9udFJlZj48L2E6c3R5bGU+JyxrW2subGVuZ3RoXT0i''@;'; put 'put ''PC9hOnNwRGVmPiIsa1trLmxlbmd0aF09IjxhOmxuRGVmPiIsa1trLmxlbmd0aF09JzxhOnNwUHIvPjxhOmJvZHlQci8+PGE6bHN0U3R5bGUvPjxhOnN0eWxlPjxhOmxuUmVmIGlkeD0iMiI+PGE6c2NoZW1lQ2xyIHZhbD0iYWNjZW50MSIvPjwvYTpsblJlZj48YTpmaWxsUmVmIGlkeD0iMCI+''@;'; put 'put ''PGE6c2NoZW1lQ2xyIHZhbD0iYWNjZW50MSIvPjwvYTpmaWxsUmVmPjxhOmVmZmVjdFJlZiBpZHg9IjEiPjxhOnNjaGVtZUNsciB2YWw9ImFjY2VudDEiLz48L2E6ZWZmZWN0UmVmPjxhOmZvbnRSZWYgaWR4PSJtaW5vciI+PGE6c2NoZW1lQ2xyIHZhbD0idHgxIi8+PC9hOmZvbnRSZWY+PC9h''@;'; put 'put ''OnN0eWxlPicsa1trLmxlbmd0aF09IjwvYTpsbkRlZj4iLGtbay5sZW5ndGhdPSI8L2E6b2JqZWN0RGVmYXVsdHM+IixrW2subGVuZ3RoXT0iPGE6ZXh0cmFDbHJTY2hlbWVMc3QvPiIsa1trLmxlbmd0aF09IjwvYTp0aGVtZT4iLGsuam9pbigiIil9ZnVuY3Rpb24gJHYoUyl7dmFyIFI9Uy5y''@;'; put 'put ''ZWFkX3NoaWZ0KDIpLGs9Uy5yZWFkX3NoaWZ0KDIpLTQsRz1bUl07c3dpdGNoKFIpe2Nhc2UgNDpjYXNlIDU6Y2FzZSA3OmNhc2UgODpjYXNlIDk6Y2FzZSAxMDpjYXNlIDExOmNhc2UgMTM6R1sxXT1mdW5jdGlvbiBUQyhTKXt2YXIgUj17fTtzd2l0Y2goUi54Y2xyVHlwZT1TLnJlYWRfc2hp''@;'; put 'put ''ZnQoMiksUi5uVGludFNoYWRlPVMucmVhZF9zaGlmdCgyKSxSLnhjbHJUeXBlKXtjYXNlIDA6Y2FzZSA0OlMubCs9NDticmVhaztjYXNlIDE6Ui54Y2xyVmFsdWU9ZnVuY3Rpb24gb0IoUyxSKXtyZXR1cm4gSW4oUyxSKX0oUyw0KTticmVhaztjYXNlIDI6Ui54Y2xyVmFsdWU9TWYoUyk7YnJl''@;'; put 'put ''YWs7Y2FzZSAzOlIueGNsclZhbHVlPWZ1bmN0aW9uIE9rKFMpe3JldHVybiBTLnJlYWRfc2hpZnQoNCl9KFMpfXJldHVybiBTLmwrPTgsUn0oUyk7YnJlYWs7Y2FzZSA2OkdbMV09ZnVuY3Rpb24gWTMoUyxSKXtyZXR1cm4gSW4oUyxSKX0oUyxrKTticmVhaztjYXNlIDE0OmNhc2UgMTU6R1sx''@;'; put 'put ''XT1TLnJlYWRfc2hpZnQoMT09PWs/MToyKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIEV4dFByb3AgdHlwZTogIitSKyIgIitrKX1yZXR1cm4gR31mdW5jdGlvbiBQayhTLFIpe1IuZm9yRWFjaChmdW5jdGlvbihrKXtzd2l0Y2goa1swXSl7Y2FzZSA0OmNh''@;'; put 'put ''c2UgNTpjYXNlIDY6Y2FzZSA3OmNhc2UgODpjYXNlIDk6Y2FzZSAxMDpjYXNlIDExOmNhc2UgMTQ6Y2FzZSAxNTpicmVhaztjYXNlIDEzOlMuZm9udCYmUy5mb250LmNvbG9yJiZBcnJheS5pc0FycmF5KGtbMV0ueGNsclZhbHVlKSYmKFMuZm9udC5jb2xvci5yZ2I9aGQoa1sxXS54Y2xyVmFs''@;'; put 'put ''dWUpKX19KX1mdW5jdGlvbiBpbyhTKXtyZXR1cm4gUy85MTQ0MDAqRGZ9ZnVuY3Rpb24gRmsoUyxSKXt2YXIgaz17fTtpZihTLnBvcylrLng9aW8oUy5wb3MueCksay55PWlvKFMucG9zLnkpO2Vsc2V7aWYoIVMuZnJvbSl0aHJvdyJiYWQgYW5jaG9yIHN0YXJ0IjtrLnI9Uy5mcm9tLnJ8fDAs''@;'; put 'put ''ay5jPVMuZnJvbS5jfHwwLFMuZnJvbS5jT2ZmJiYoay54PWlvKFMuZnJvbS5jT2ZmKSksUy5mcm9tLnJPZmYmJihrLnk9aW8oUy5mcm9tLnJPZmYpKX1pZihTLmV4dClrLnc9aW8oUy5leHQueCksay5oPWlvKFMuZXh0LnkpO2Vsc2V7aWYoIVMudG8pdGhyb3ciYmFkIGFuY2hvciBlbmQiO2su''@;'; put 'put ''Qz1TLnRvLmMsay5SPVMudG8ucixTLnRvLmNPZmYmJihrLlg9aW8oUy50by5jT2ZmKSksUy50by5yT2ZmJiYoay5ZPWlvKFMudG8uck9mZikpfXJldHVybiBrfWZ1bmN0aW9uIEw1KFMsUil7dmFyIGs9e3g6LTEseTotMSx3Oi0xLGg6LTF9O2lmKFMucG9zKWsueD1pbyhTLnBvcy54KSxrLnk9''@;'; put 'put ''aW8oUy5wb3MueSk7ZWxzZXtpZighUy5mcm9tKXRocm93ImJhZCBhbmNob3Igc3RhcnQiO2sueD1PNShSLFMuZnJvbS5jLCJDIikraW8oUy5mcm9tLmNPZmYpLGsueT1PNShSLFMuZnJvbS5yLCJSIikraW8oUy5mcm9tLnJPZmYpfWlmKFMuZXh0KWsudz1pbyhTLmV4dC54KSxrLmg9aW8oUy5l''@;'; put 'put ''eHQueSk7ZWxzZXtpZighUy50byl0aHJvdyJiYWQgYW5jaG9yIGVuZCI7ay53PU81KFIsUy50by5jLCJDIikraW8oUy50by5jT2ZmKS1rLngsay5oPU81KFIsUy50by5yLCJSIikraW8oUy50by5yT2ZmKS1rLnl9cmV0dXJuIGt9ZnVuY3Rpb24gQUMoUyxSKXt2YXIgaz17cjotMSxjOi0xLHg6''@;'; put 'put ''LTEseTotMSxSOi0xLEM6LTEsWDotMSxZOi0xfTtzd2l0Y2goUy50eXBlKXtjYXNlInR3b0NlbGxBbmNob3IiOmsucj1TLmZyb20ucixrLnk9aW8oUy5mcm9tLnJPZmYpLGsuUj1TLnRvLnIsay5ZPWlvKFMudG8uck9mZiksay5jPVMuZnJvbS5jLGsueD1pbyhTLmZyb20uY09mZiksay5DPVMu''@;'; put 'put ''dG8uYyxrLlg9aW8oUy50by5jT2ZmKTticmVhaztjYXNlIm9uZUNlbGxBbmNob3IiOmsucj1TLmZyb20ucixrLnk9aW8oUy5mcm9tLnJPZmYpO3ZhciBHPVJmKFIsay5yLGsueStpbyhTLmV4dC55KSk7ay5SPUdbMF0say5ZPUdbMV0say5jPVMuZnJvbS5jLGsueD1pbyhTLmZyb20uY09mZik7''@;'; put 'put ''dmFyIFE9RzMoUixrLmMsay54K2lvKFMuZXh0LngpKTtrLkM9UVswXSxrLlg9UVsxXTticmVhaztjYXNlImFic29sdXRlQW5jaG9yIjp2YXIgb2U9UmYoUiwwLGlvKFMucG9zLnkpKTtrLnI9b2VbMF0say55PW9lWzFdO3ZhciBnZT1SZihSLGsucixrLnkraW8oUy5leHQueSkpO2suUj1nZVsw''@;'; put 'put ''XSxrLlk9Z2VbMV07dmFyIHBlPVJmKFIsMCxpbyhTLnBvcy54KSk7ay5jPXBlWzBdLGsueD1wZVsxXTt2YXIgeWU9UmYoUixrLmMsay54K2lvKFMuZXh0LngpKTtrLkM9eWVbMF0say5YPXllWzFdO2JyZWFrO2RlZmF1bHQ6dGhyb3ciYmFkIGFuY2hvciB0eXBlICIrUy50eXBlfXJldHVybiBr''@;'; put 'put ''fWZ1bmN0aW9uIEhrKFMsUil7dmFyIGs9Uy50cmltKCkuc3BsaXQoL1xzKixccyovKTtSWyIhcG9zIl09e2M6K2tbMF0seDora1sxXSxyOitrWzJdLHk6K2tbM10sQzora1s0XSxYOitrWzVdLFI6K2tbNl0sWTora1s3XX19ZnVuY3Rpb24gbEIoUyxSLGspe3ZhciBHPS0xO2lmKG51bGwhPVMu''@;'; put 'put ''Unx8bnVsbCE9Uy5DKUc9MDtlbHNle2lmKG51bGw9PVMueHx8bnVsbD09Uy55fHxudWxsPT1TLnd8fG51bGw9PVMuaCl0aHJvdyJjYW5ub3QgcGFyc2UgYW5jaG9yICIrSlNPTi5zdHJpbmdpZnkoUyk7Rz0xKzIqIShTLmN8fFMucil9aWYoRyE9Uil7c3dpdGNoKFIpe2Nhc2UgMDpjYXNlIDE6''@;'; put 'put ''aWYoMyE9RylicmVhazt2YXIgUT1HMyhrLFMuY3x8MCxTLnh8fDApO1MuYz1RWzBdLFMueD1RWzFdO3ZhciBvZT1SZihrLFMucnx8MCxTLnl8fDApO1Mucj1vZVswXSxTLnk9b2VbMV07YnJlYWs7Y2FzZSAzOmlmKDM9PUcpYnJlYWs7dmFyIGdlPVMuY3x8MCxwZT1TLnh8fDA7ZGVsZXRlIFMu''@;'; put 'put ''YyxkZWxldGUgUy54LFMueD0oZ2U/S3YoayxnZSk6MCkrcGU7dmFyIHllPVMucnx8MCxQZT1TLnl8fDA7ZGVsZXRlIFMucixkZWxldGUgUy55LFMueT0oeWU/TzQoayx5ZSk6MCkrUGU7YnJlYWs7ZGVmYXVsdDp0aHJvdyJjb252ZXJ0X2FuY2hvciB1bnJlY29nbml6ZWQgdHlwZSAiK1J9c3dp''@;'; put 'put ''dGNoKFIpe2Nhc2UgMDppZigwPT1HKWJyZWFrO3ZhciBOZT1HMyhrLFMuY3x8MCwoUy54fHwwKStTLncpO2RlbGV0ZSBTLncsUy5DPU5lWzBdLFMuWD1OZVsxXTt2YXIgWWU9UmYoayxTLnJ8fDAsKFMueXx8MCkrUy5oKTtkZWxldGUgUy5oLFMuUj1ZZVswXSxTLlk9WWVbMV07YnJlYWs7Y2Fz''@;'; put 'put ''ZSAxOmNhc2UgMzppZigwIT1HKWJyZWFrO3ZhciBldD1TLkN8fDAsY3Q9Uy5YfHwwO2RlbGV0ZSBTLkMsZGVsZXRlIFMuWCxTLnc9S3YoayxldCkrY3QtKFMuYz9LdihrLFMuYyk6MCktKFMueHx8MCk7dmFyIEV0PVMuUnx8MCxhdD1TLll8fDA7ZGVsZXRlIFMuUixkZWxldGUgUy5ZLFMuaD1P''@;'; put 'put ''NChrLEV0KSthdC0oUy5yP080KGssUy5yKTowKS0oUy55fHwwKTticmVhaztkZWZhdWx0OnRocm93ImNvbnZlcnRfYW5jaG9yIHVucmVjb2duaXplZCB0eXBlICIrUn19fWZ1bmN0aW9uIGNCKFMpe3ZhciBSPVtTLmN8fDAsTWF0aC5yb3VuZChTLnh8fDApLFMucnx8MCxNYXRoLnJvdW5kKFMu''@;'; put 'put ''eXx8MCldO3JldHVybihSPVIuY29uY2F0KFMuaCYmUy53P1tSWzBdLE1hdGgucm91bmQoUlsxXStTLncpLFJbMl0sTWF0aC5yb3VuZChSWzNdK1MuaCldOltTLkN8fDAsTWF0aC5yb3VuZChTLlh8fDApLFMuUnx8MCxNYXRoLnJvdW5kKFMuWXx8MCldKSkuam9pbigiLCAiKX1mdW5jdGlvbiBP''@;'; put 'put ''NChTLFIpe2lmKCFTKXJldHVybiAwO2Zvcih2YXIgaz0wOy0tUj49MDspe3ZhciBHPSgoU1siIXJvd3MiXXx8W10pW1JdfHx7fSkuaHB4O251bGw9PUcmJihHPSgoU1siIXNoZWV0Rm9ybWF0Il18fHt9KS5yb3d8fHt9KS5ocHgpLG51bGw9PUcmJihHPTI0KSxrKz1HfXJldHVybiBrfWZ1bmN0''@;'; put 'put ''aW9uIEt2KFMsUil7aWYoIVMpcmV0dXJuIDA7Zm9yKHZhciBrPTA7LS1SPj0wOyl7dmFyIEc9KChTWyIhY29scyJdfHxbXSlbUl18fHt9KS53cHg7aWYobnVsbD09RyYmKEc9KChTWyIhc2hlZXRGb3JtYXQiXXx8e30pLmNvbHx8e30pLndweCksbnVsbD09Ryl7dmFyIFE9e3djaDo4LjQzfTtR''@;'; put 'put ''MChRKSxTWyIhY29scyJdJiYoU1siIWNvbHMiXVtSXT1RKSxHPVEud3B4fWsrPUd9cmV0dXJuIGt9ZnVuY3Rpb24gTzUoUyxSLGspe3JldHVybiJDIj09az9LdihTLFIpOk80KFMsUil9ZnVuY3Rpb24gUmYoUyxSLGspe3ZhciBHPVtSLGtdO2lmKCFTKXJldHVybiBHO2Zvcig7Oyl7dmFyIFE9''@;'; put 'put ''KFNbIiFyb3dzIl18fFtdKVtHWzBdXXx8e307aWYoUS5oaWRkZW4pKytHWzBdO2Vsc2V7dmFyIG9lPVEuaHB4O2lmKG51bGw9PW9lJiYob2U9KChTWyIhc2hlZXRGb3JtYXQiXXx8e30pLnJvd3x8e30pLmhweCksbnVsbD09b2UmJihvZT1zaCgxNSkpLEdbMV08b2UpYnJlYWs7R1swXSsrLEdb''@;'; put 'put ''MV0tPW9lfX1yZXR1cm4gR31mdW5jdGlvbiBHMyhTLFIsayl7dmFyIEc9W1Isa107aWYoIVMpcmV0dXJuIEc7Zm9yKDs7KXt2YXIgUT0oU1siIWNvbHMiXXx8W10pW0dbMF1dfHx7fTtpZihRLmhpZGRlbnx8MD09PVEud3B4KSsrR1swXTtlbHNle3ZhciBvZT1RLndweDtpZihudWxsPT1vZSYm''@;'; put 'put ''KG9lPSgoU1siIXNoZWV0Rm9ybWF0Il18fHt9KS5jb2x8fHt9KS53cHgpLG51bGw9PW9lKXt2YXIgZ2U9e3djaDo4LjQzfTtRMChnZSksU1siIWNvbHMiXSYmKFNbIiFjb2xzIl1bR1swXV09Z2UpLG9lPWdlLndweH1pZihHWzFdPG9lKWJyZWFrO0dbMF0rKyxHWzFdLT1vZX19cmV0dXJuIEd9''@;'; put 'put ''ZnVuY3Rpb24gUDAoUyl7cmV0dXJuKCIwMDAwMDAiKygibnVtYmVyIj09dHlwZW9mIFM/Uy50b1N0cmluZygxNik6UykpLnNsaWNlKC02KX1mdW5jdGlvbiBnZChTLFIsayl7dmFyIEc9InN0cmluZyI9PXR5cGVvZiBSPyEhazohIVI7InN0cmluZyIhPXR5cGVvZiBSJiYoUj0iY29sb3IiKTt2''@;'; put 'put ''YXIgUT0iPCIrUisiICI7cmV0dXJuIFMuYXV0bz9RKydhdXRvPSIxIi8+JzpTLmluZGV4JiZudWxsPT1TLnJnYj9RKydpbmRleGVkPSInK1MuaW5kZXgrJyIvPic6bnVsbCE9Uy50aGVtZT9RKyd0aGVtZT0iJytTLnRoZW1lKyciJysoUy50aW50PycgdGludD0iJytTLnRpbnQrJyInOiIiKSsi''@;'; put 'put ''Lz4iOm51bGwhPVMucmdiP1ErJ3JnYj0iJysoRz8iRkYiOiIiKStQMChTLnJnYikrJyIvPic6USsiLz4ifWZ1bmN0aW9uIFA0KFMsUil7aWYoIVN8fG51bGw9PVMucmdiKXJldHVybiBSO2Zvcih2YXIgaz0oIjAwMDAwMCIrUy5yZ2IudG9TdHJpbmcoMTYpKS5zbGljZSgtNiksRz1bay5zbGlj''@;'; put 'put ''ZSgwLDIpLGsuc2xpY2UoMiw0KSxrLnNsaWNlKDQsNildLm1hcChmdW5jdGlvbihnZSl7cmV0dXJuIHBhcnNlSW50KGdlLDE2KX0pLFE9MDtRPHIwLmxlbmd0aDsrK1Epe3ZhciBvZT1yMFtRXTtpZihvZVswXT09R1swXSYmb2VbMV09PUdbMV0mJm9lWzJdPT1HWzJdKXJldHVybiBRfXJldHVy''@;'; put 'put ''biByMC5sZW5ndGg8NjQ/KHIwLnB1c2goW0dbMF0sR1sxXSxHWzJdXSkscjAubGVuZ3RoLTEpOlJ9ZnVuY3Rpb24gdDEoUyl7dmFyIFI9WyIiLCIiLCIiXTtpZighUylyZXR1cm5bXTt2YXIgaz0iIixHPVMmJlMucz9mdW5jdGlvbiBxdihTKXt2YXIgUj1bIiIsIiJdO2lmKCFTKXJldHVybiBS''@;'; put 'put ''O2lmKFMuc3omJihSWzBdKz0iJiIrUy5zeixSWzFdPSImMTIiK1JbMV0pLFMubmFtZSYmKFJbMF0rPScmIicrUy5uYW1lKycsUmVndWxhciInLFJbMV09JyYiLSxSZWd1bGFyIicrUlsxXSksUy5ib2xkJiYoUlswXSs9IiZCIixSWzFdPSImQiIrUlsxXSksUy51bmRlcmxpbmUpe3ZhciBrPTI9''@;'; put 'put ''PVMudW5kZXJsaW5lPyImRSI6IiZVIjtSWzBdKz1rLFJbMV09aytSWzFdfXJldHVybiBTLml0YWxpYyYmKFJbMF0rPSImSSIsUlsxXT0iJkkiK1JbMV0pLFMuY29sb3ImJm51bGwhPVMuY29sb3IucmdiJiYoUlswXSs9IiZLIitQMChTLmNvbG9yLnJnYiksUlsxXSs9IiZLMDAwMDAwIiksUy5z''@;'; put 'put ''dHJpa2UmJihSWzBdKz0iJlMiLFJbMV09IiZTIitSWzFdKSwic3VwZXIiPT1TLnZhbGlnbiYmKFJbMF0rPSImWCIsUlsxXT0iJlgiK1JbMV0pLCJzdWIiPT1TLnZhbGlnbiYmKFJbMF0rPSImWSIsUlsxXT0iJlkiK1JbMV0pLFJ9KFMucyk6WyIiLCIiXTtyZXR1cm4ic3RyaW5nIj09dHlwZW9m''@;'; put 'put ''IFM/W1MsUyxTXTpudWxsIT1TLmZpcnN0fHxudWxsIT1TLmV2ZW58fG51bGwhPVMub2RkPyhudWxsIT1TLm9kZCYmKFJbMF09dDEoUy5vZGQpWzBdKSx2b2lkIDA9PT1TLmZpcnN0JiZSWzBdJiYoUlsxXT1SWzBdKSxudWxsIT1TLmZpcnN0JiYoUlsxXT10MShTLmZpcnN0KVswXSksbnVsbCE9''@;'; put 'put ''Uy5ldmVuJiYoUlsyXT10MShTLmV2ZW4pWzBdKSxSKTpTLmxlZnR8fFMuY2VudGVyfHxTLnJpZ2h0PyhTLmxlZnQmJihrKz0iJkwiK3QxKFMubGVmdClbMF0pLFMuY2VudGVyJiYoays9IiZDIit0MShTLmNlbnRlcilbMF0pLFMucmlnaHQmJihrKz0iJlIiK3QxKFMucmlnaHQpWzBdKSxbayxr''@;'; put 'put ''LGtdKTpudWxsIT1TLnY/W2s9R1swXStTLnYucmVwbGFjZSgvJi9nLCImJiIpK0dbMV0sayxrXTpudWxsIT1TLnc/W2s9R1swXStTLncrR1sxXSxrLGtdOkFycmF5LmlzQXJyYXkoUy5SKT8oUy5SLmZvckVhY2goZnVuY3Rpb24oUSl7ays9dDEoUSlbMF19KSxbayxrLGtdKTpbXX12YXIgbjg9''@;'; put 'put ''ezE6IkxldHRlciIsMzoiVGFibG9pZCIsNToiTGVnYWwiLDc6IkV4ZWN1dGl2ZSIsODoiQTMiLDk6IkE0IiwxMToiQTUiLDEyOiJCNCIsMTM6IkI1IiwxNDoiRm9saW8iLDIwOiJFbnZlbG9wZSIsMzc6Ik1vbmFyY2giLDcwOiJBNiJ9LHVCPVZlKG44KTtLYS5DT05OPSJodHRwOi8vc2NoZW1h''@;'; put 'put ''cy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2Nvbm5lY3Rpb25zIjt2YXIgaEI9UHIoImV4dGVybmFsTGluayIsbnVsbCx7eG1sbnM6WWkubWFpblswXX0pO0thLklNRz0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmlj''@;'; put 'put ''ZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9pbWFnZSIsS2EuRFJBVz0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9kcmF3aW5nIjt2YXIgcEI9e3Q6InRvcCIsY3RyOiJjZW50ZXIiLGI6ImJvdHRvbSIsanVz''@;'; put 'put ''dDoidG9wIixkaXN0OiJ0b3AifSxQNT17Y3RyOiJjZW50ZXIiLGRpc3Q6ImNlbnRlciIsanVzdDoiY2VudGVyIixqdXN0TG93OiJjZW50ZXIiLGw6ImxlZnQiLHI6InJpZ2h0Iix0aGFpRGlzdDoiY2VudGVyIn07ZnVuY3Rpb24gbUIoKXt2YXIgUz1bSWldO3JldHVybiBTLnB1c2goJzx4ZHI6''@;'; put 'put ''d3NEciB4bWxuczp4ZHI9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9kcmF3aW5nbWwvMjAwNi9zcHJlYWRzaGVldERyYXdpbmciIHhtbG5zOmE9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9kcmF3aW5nbWwvMjAwNi9tYWluIi8+JyksUy5qb2luKCIiKX1m''@;'; put 'put ''dW5jdGlvbiBjbmUoUyl7dmFyIGssUj1TWyIhZGF0YSJdO3JldHVybiJiYXNlNjQiPT09U1siIWRhdGF0eXBlIl0/KChrPVIubWF0Y2goL15kYXRhOi4qLC8pKSYmKFI9Ui5zbGljZShrWzBdLmxlbmd0aCkpLF9lLmRlY29kZShSKSk6Un1LYS5UQUJMRT0iaHR0cDovL3NjaGVtYXMub3Blbnht''@;'; put 'put ''bGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy90YWJsZSI7dmFyIGJCPS88KD86XHcrOik/c2hhcGUoPzpbXlx3XVtePl0qKT8+KFtcc1xTXSo/KTxcLyg/Olx3KzopP3NoYXBlPi9nO2Z1bmN0aW9uIE9DKFMsUixrLEcpe3ZhciBRPVsyMTYwMCwyMTYwMF0s''@;'; put 'put ''b2U9WyJtMCwwbDAiLFFbMV0sUVswXSxRWzFdLFFbMF0sIjB4ZSJdLmpvaW4oIiwiKSxnZT1bUHIoInhtbCIsbnVsbCx7InhtbG5zOnYiOnlsLnYsInhtbG5zOm8iOnlsLm8sInhtbG5zOngiOnlsLngsInhtbG5zOm12Ijp5bC5tdn0pLnJlcGxhY2UoL1wvPi8sIj4iKSxQcigibzpzaGFwZWxh''@;'; put 'put ''eW91dCIsUHIoIm86aWRtYXAiLG51bGwseyJ2OmV4dCI6ImVkaXQifSkseyJ2OmV4dCI6ImVkaXQifSldLHBlPTEwMjQqUyx5ZT1rfHxbXTt5ZS5sZW5ndGg+MCYmZ2UucHVzaChQcigidjpzaGFwZXR5cGUiLFtQcigidjpzdHJva2UiLG51bGwse2pvaW5zdHlsZToibWl0ZXIifSksUHIoInY6''@;'; put 'put ''cGF0aCIsbnVsbCx7c2hhZG93b2s6ImYiLGV4dHJ1c2lvbm9rOiJmIixzdHJva2VvazoiZiIsZmlsbG9rOiJmIiwibzpjb25uZWN0dHlwZSI6InJlY3QifSksUHIoIm86bG9jayIsbnVsbCx7InY6ZXh0IjoiZWRpdCIsc2hhcGV0eXBlOiJ0In0pXS5qb2luKCIiKSx7aWQ6Il94MDAwMF90MjAx''@;'; put 'put ''Iixjb29yZHNpemU6US5qb2luKCIsIiksIm86c3B0IjoyMDEscGF0aDpvZX0pKSx5ZS5mb3JFYWNoKGZ1bmN0aW9uKE5lKXsrK3BlLGdlPWdlLmNvbmNhdChmdW5jdGlvbiBpOChTLFIpe3ZhciBrPXtpZDoiX3gwMDAwX3MiK1IsdHlwZToiI194MDAwMF90MjAxIixzdHlsZToibXNvLXdyYXAt''@;'; put 'put ''c3R5bGU6dGlnaHQifTsoIlJhZGlvIj09U1siIXR5cGUiXXx8IkNoZWNrYm94Ij09U1siIXR5cGUiXXx8Ikxpc3QiPT1TWyIhdHlwZSJdfHwiRHJvcCI9PVNbIiF0eXBlIl0pJiYoay5zdHJva2VkPSJmIiksIkxhYmVsIj09U1siIXR5cGUiXSYmKGsuZmlsbGVkPSJmIik7dmFyIEc9IiI7Uy50''@;'; put 'put ''JiZQQ1tTWyIhdHlwZSJdXSYmKEc9UENbU1siIXR5cGUiXV0ucmVwbGFjZSgvIyMjIy8sTHIoUy50KSkpO3ZhciBRPVtdO3JldHVybiBTLm1hY3JvJiZRLnB1c2goSGEoIng6Rm1sYU1hY3JvIixTLm1hY3JvKSksUy5saW5rJiZRLnB1c2goSGEoIng6Rm1sYUxpbmsiLFMubGluaykpLFMudmFs''@;'; put 'put ''JiZRLnB1c2goSGEoIlJhZGlvIj09U1siIXR5cGUiXXx8IkNoZWNrYm94Ij09U1siIXR5cGUiXT8ieDpDaGVja2VkIjoieDpWYWwiLFN0cmluZyhTLnZhbCkpKSxTLnJlZiYmUS5wdXNoKEhhKCJ4OkZtbGFSYW5nZSIsUy5yZWYpKSxTLnNlbCYmIkxpc3QiPT1TWyIhdHlwZSJdJiZRLnB1c2go''@;'; put 'put ''SGEoIng6U2VsVHlwZSIsUy5zZWwpKSxTLm1pbiYmUS5wdXNoKEhhKCJ4Ok1pbiIsU3RyaW5nKFMubWluKSkpLFMubWF4JiZRLnB1c2goSGEoIng6TWF4IixTdHJpbmcoUy5tYXgpKSksUy5zdGVwJiZRLnB1c2goSGEoIng6SW5jIixTdHJpbmcoUy5zdGVwKSkpLFMucGFnZSYmUS5wdXNoKEhh''@;'; put 'put ''KCJ4OlBhZ2UiLFN0cmluZyhTLnBhZ2UpKSksW10uY29uY2F0KFsiPHY6c2hhcGUiK0x1KGspKyI+Il0pLmNvbmNhdChGQ1tTWyIhdHlwZSJdXXx8W10pLmNvbmNhdChbR10pLmNvbmNhdChbJzx4OkNsaWVudERhdGEgT2JqZWN0VHlwZT0iJytTWyIhdHlwZSJdKyciPicsSGEoIng6QW5jaG9y''@;'; put 'put ''IixjQihTWyIhcG9zIl0pKSxIYSgieDpQcmludE9iamVjdCIsIkZhbHNlIildKS5jb25jYXQoUSkuY29uY2F0KHlCW1NbIiF0eXBlIl1dfHxbXSkuY29uY2F0KFsiPC94OkNsaWVudERhdGE+IiwiPC92OnNoYXBlPiJdKX0oTmUscGUpKX0pO3ZhciBQZT1SfHxbXTtyZXR1cm4gUGUubGVuZ3Ro''@;'; put 'put ''PjAmJmdlLnB1c2goUHIoInY6c2hhcGV0eXBlIixbUHIoInY6c3Ryb2tlIixudWxsLHtqb2luc3R5bGU6Im1pdGVyIn0pLFByKCJ2OnBhdGgiLG51bGwse2dyYWRpZW50c2hhcGVvazoidCIsIm86Y29ubmVjdHR5cGUiOiJyZWN0In0pXS5qb2luKCIiKSx7aWQ6Il94MDAwMF90MjAyIixjb29y''@;'; put 'put ''ZHNpemU6US5qb2luKCIsIiksIm86c3B0IjoyMDIscGF0aDpvZX0pKSxQZS5mb3JFYWNoKGZ1bmN0aW9uKE5lKXsrK3BlLGdlPWdlLmNvbmNhdChmdW5jdGlvbiBKdihTLFIsayl7dmFyIEc9Tm8oU1swXSksUT1TWzFdLmZpbGx8fHt9O1NbMV0ucyYmKFE9e3R5cGU6U1sxXS5zLnBhdHRlcm5U''@;'; put 'put ''eXBlfHwic29saWQifSxTWzFdLnMuZmdDb2xvciYmKFEuY29sb3IyPVEuY29sb3IxPSIjIitQMChTWzFdLnMuZmdDb2xvci5yZ2IpKSxTWzFdLnMuYmdDb2xvciYmKFEuY29sb3IyPSIjIitQMChTWzFdLnMuYmdDb2xvci5yZ2IpKSk7dmFyIG9lPXtjb2xvcjI6US5jb2xvcjJ8fCIjQkVGRjgy''@;'; put 'put ''Iix0eXBlOlEudHlwZXx8ImdyYWRpZW50In07ImdyYWRpZW50Ij09b2UudHlwZSYmKG9lLmFuZ2xlPSItMTgwIik7dmFyIGdlPSJncmFkaWVudCI9PW9lLnR5cGU/UHIoIm86ZmlsbCIsbnVsbCx7dHlwZToiZ3JhZGllbnRVbnNjYWxlZCIsInY6ZXh0IjoidmlldyJ9KTpudWxsLHBlPVByKCJ2''@;'; put 'put ''OmZpbGwiLGdlLG9lKSx5ZT17fTtTWzFdLnNoYWRvdyYmKFNbMV0uc2hhZG93LmNvbG9yJiYoeWUuY29sb3I9U1sxXS5zaGFkb3cuY29sb3IpLFNbMV0uc2hhZG93Lm9uJiYoeWUub249U1sxXS5zaGFkb3cub24pKSx5ZS5vYnNjdXJlZD0idCI7dmFyIFBlPSEwLE5lPSEwLFllPVNbMV1bIiFw''@;'; put 'put ''b3MiXT9xdChTWzFdWyIhcG9zIl0pOm51bGw7cmV0dXJuIFllJiYoTmU9bnVsbD09WWUuUiYmbnVsbD09WWUuQyYmbnVsbD09WWUuWCYmbnVsbD09WWUuWSxQZT0hWWUuciYmIVllLmMsbEIoWWUsMCxrKSksWyI8djpzaGFwZSIrTHUoe2lkOiJfeDAwMDBfcyIrUix0eXBlOiIjX3gwMDAwX3Qy''@;'; put 'put ''MDIiLHN0eWxlOiJwb3NpdGlvbjphYnNvbHV0ZTsgbWFyZ2luLWxlZnQ6ODBwdDttYXJnaW4tdG9wOjVwdDt3aWR0aDoxMDRwdDtoZWlnaHQ6NjRwdDt6LWluZGV4OjEwIisoU1sxXS5oaWRkZW4/Ijt2aXNpYmlsaXR5OmhpZGRlbiI6IiIpLGZpbGxjb2xvcjpRLmNvbG9yMXx8IiNFQ0ZBRDQi''@;'; put 'put ''LHN0cm9rZWNvbG9yOihTWzFdLnN0cm9rZXx8e30pLmNvbG9yfHwiI2VkZWFhMSJ9KSsiPiIscGUsUHIoInY6c2hhZG93IixudWxsLHllKSxQcigidjpwYXRoIixudWxsLHsibzpjb25uZWN0dHlwZSI6Im5vbmUifSksJzx2OnRleHRib3g+PGRpdiBzdHlsZT0idGV4dC1hbGlnbjpsZWZ0Ij48''@;'; put 'put ''L2Rpdj48L3Y6dGV4dGJveD4nLCc8eDpDbGllbnREYXRhIE9iamVjdFR5cGU9Ik5vdGUiPicsUGU/Ijx4Ok1vdmVXaXRoQ2VsbHMvPiI6IiIsTmU/Ijx4OlNpemVXaXRoQ2VsbHMvPiI6IiIsSGEoIng6QW5jaG9yIixZZT9jQihZZSk6U1sxXS5yYXdhbmNob3J8fFtHLmMrMSwwLEcucisxLDAs''@;'; put 'put ''Ry5jKzMsMjAsRy5yKzUsMjBdLmpvaW4oIiwiKSksSGEoIng6QXV0b0ZpbGwiLCJGYWxzZSIpLEhhKCJ4OlJvdyIsU3RyaW5nKEcucikpLEhhKCJ4OkNvbHVtbiIsU3RyaW5nKEcuYykpLFNbMV0uaGlkZGVuPyIiOiI8eDpWaXNpYmxlLz4iLCI8L3g6Q2xpZW50RGF0YT4iLCI8L3Y6c2hhcGU+''@;'; put 'put ''Il19KE5lLHBlLEcpKX0pLGdlLnB1c2goIjwveG1sPiIpLGdlLmpvaW4oIiIpfXZhciB5Qj17QnV0dG9uOlsiPHg6QXV0b0ZpbGw+RmFsc2U8L3g6QXV0b0ZpbGw+IiwiPHg6VGV4dEhBbGlnbj5DZW50ZXI8L3g6VGV4dEhBbGlnbj4iLCI8eDpUZXh0VkFsaWduPkNlbnRlcjwveDpUZXh0VkFs''@;'; put 'put ''aWduPiJdLEdCb3g6WyI8eDpTaXplV2l0aENlbGxzLz4iLCI8eDpBdXRvRmlsbD5GYWxzZTwveDpBdXRvRmlsbD4iLCI8eDpOb1RocmVlRC8+Il0sTGFiZWw6WyI8eDpBdXRvRmlsbD5GYWxzZTwveDpBdXRvRmlsbD4iLCI8eDpBdXRvTGluZT5GYWxzZTwveDpBdXRvTGluZT4iXSxSYWRpbzpb''@;'; put 'put ''Ijx4OlNpemVXaXRoQ2VsbHMvPiIsIjx4OkF1dG9GaWxsPkZhbHNlPC94OkF1dG9GaWxsPiIsIjx4OkF1dG9MaW5lPkZhbHNlPC94OkF1dG9MaW5lPiIsIjx4OlRleHRWQWxpZ24+Q2VudGVyPC94OlRleHRWQWxpZ24+IiwiPHg6Tm9UaHJlZUQvPiJdLENoZWNrYm94OlsiPHg6U2l6ZVdpdGhD''@;'; put 'put ''ZWxscy8+IiwiPHg6QXV0b0ZpbGw+RmFsc2U8L3g6QXV0b0ZpbGw+IiwiPHg6QXV0b0xpbmU+RmFsc2U8L3g6QXV0b0xpbmU+IiwiPHg6VGV4dFZBbGlnbj5DZW50ZXI8L3g6VGV4dFZBbGlnbj4iLCI8eDpOb1RocmVlRC8+Il0sRHJvcDpbIjx4OlNpemVXaXRoQ2VsbHMvPiIsIjx4OkF1dG9M''@;'; put 'put ''aW5lPkZhbHNlPC94OkF1dG9MaW5lPiIsIjx4Ok5vVGhyZWVEMi8+IiwiPHg6U2VsVHlwZT5TaW5nbGU8L3g6U2VsVHlwZT4iLCI8eDpEcm9wU3R5bGU+Q29tYm88L3g6RHJvcFN0eWxlPiIsIjx4OkxDVD5Ob3JtYWw8L3g6TENUPiIsIjx4OkRyb3BMaW5lcz40PC94OkRyb3BMaW5lcz4iXSxM''@;'; put 'put ''aXN0OlsiPHg6U2l6ZVdpdGhDZWxscy8+IiwiPHg6QXV0b0xpbmU+RmFsc2U8L3g6QXV0b0xpbmU+IiwiPHg6Tm9UaHJlZUQyLz4iLCI8eDpMQ1Q+Tm9ybWFsPC94OkxDVD4iLCI8eDpWYWw+MDwveDpWYWw+IiwiPHg6TWluPjA8L3g6TWluPiIsIjx4Ok1heD41PC94Ok1heD4iLCI8eDpJbmM+''@;'; put 'put ''MTwveDpJbmM+IiwiPHg6UGFnZT40PC94OlBhZ2U+IiwiPHg6RHg+MTU8L3g6RHg+Il0sU2Nyb2xsOlsiPHg6U2l6ZVdpdGhDZWxscy8+IiwiPHg6SG9yaXovPiIsIjx4OkR4PjE1PC94OkR4PiJdLFNwaW46WyI8eDpEeD4xNTwveDpEeD4iXX0sUEM9e0J1dHRvbjoiPHY6dGV4dGJveCBzdHls''@;'; put 'put ''ZT0nbXNvLWRpcmVjdGlvbi1hbHQ6YXV0bycgbzpzaW5nbGVjbGljaz0nZic+PGRpdiBzdHlsZT0ndGV4dC1hbGlnbjpjZW50ZXInPjxmb250IGZhY2U9J0NhbGlicmknIHNpemU9JzI0MCcgY29sb3I9JyMwMDAwMDAnPiMjIyM8L2ZvbnQ+PC9kaXY+PC92OnRleHRib3g+IixHQm94OiI8djp0''@;'; put 'put ''ZXh0Ym94IHN0eWxlPSdtc28tZGlyZWN0aW9uLWFsdDphdXRvJyBvOnNpbmdsZWNsaWNrPSdmJz48ZGl2IHN0eWxlPSd0ZXh0LWFsaWduOmxlZnQnPjxmb250IGZhY2U9J0x1Y2lkYSBHcmFuZGUnIHNpemU9JzI2MCcgY29sb3I9JyMwMDAwMDAnPiMjIyM8L2ZvbnQ+PC9kaXY+PC92OnRleHRi''@;'; put 'put ''b3g+IixSYWRpbzoiPHY6dGV4dGJveCBzdHlsZT0nbXNvLWRpcmVjdGlvbi1hbHQ6YXV0bycgbzpzaW5nbGVjbGljaz0nZic+PGRpdiBzdHlsZT0ndGV4dC1hbGlnbjpsZWZ0Jz48Zm9udCBmYWNlPSdMdWNpZGEgR3JhbmRlJyBzaXplPScyNjAnIGNvbG9yPSdhdXRvJz4jIyMjPC9mb250Pjwv''@;'; put 'put ''ZGl2Pjwvdjp0ZXh0Ym94PiIsTGFiZWw6Ijx2OnRleHRib3ggc3R5bGU9J21zby1kaXJlY3Rpb24tYWx0OmF1dG8nIG86c2luZ2xlY2xpY2s9J2YnPjxkaXYgc3R5bGU9J3RleHQtYWxpZ246bGVmdCc+PGZvbnQgZmFjZT0nTHVjaWRhIEdyYW5kZScgc2l6ZT0nMjYwJyBjb2xvcj0nIzAwMDAw''@;'; put 'put ''MCc+IyMjIzwvZm9udD48L2Rpdj48L3Y6dGV4dGJveD4iLENoZWNrYm94OiI8djp0ZXh0Ym94IHN0eWxlPSdtc28tZGlyZWN0aW9uLWFsdDphdXRvJyBvOnNpbmdsZWNsaWNrPSdmJz48ZGl2IHN0eWxlPSd0ZXh0LWFsaWduOmxlZnQnPjxmb250IGZhY2U9J0x1Y2lkYSBHcmFuZGUnIHNpemU9''@;'; put 'put ''JzI2MCcgY29sb3I9JyMwMDAwMDAnPiMjIyM8L2ZvbnQ+PC9kaXY+PC92OnRleHRib3g+IixzaGVldGpzOiJkYWZ1cSJ9LEZDPXtCdXR0b246Wyc8djpmaWxsIGNvbG9yMj0iI2YwZjBmMCBbNjddIiBvOmRldGVjdG1vdXNlY2xpY2s9InQiLz4nLCc8bzpsb2NrIHY6ZXh0PSJlZGl0IiByb3Rh''@;'; put 'put ''dGlvbj0idCIvPiddLEdCb3g6Wyc8bzpsb2NrIHY6ZXh0PSJlZGl0IiByb3RhdGlvbj0idCIvPiddLERyb3A6Wyc8bzpsb2NrIHY6ZXh0PSJlZGl0IiByb3RhdGlvbj0idCIgdGV4dD0idCIvPiddLExpc3Q6Wyc8bzpsb2NrIHY6ZXh0PSJlZGl0IiByb3RhdGlvbj0idCIgdGV4dD0idCIvPidd''@;'; put 'put ''LFNwaW46Wyc8bzpsb2NrIHY6ZXh0PSJlZGl0IiByb3RhdGlvbj0idCIgdGV4dD0idCIvPiddLFNjcm9sbDpbJzxvOmxvY2sgdjpleHQ9ImVkaXQiIHJvdGF0aW9uPSJ0IiB0ZXh0PSJ0Ii8+J10sTGFiZWw6Wyc8bzpsb2NrIHY6ZXh0PSJlZGl0IiByb3RhdGlvbj0idCIvPiddLFJhZGlvOlsn''@;'; put 'put ''PHY6cGF0aCBzaGFkb3dvaz0idCIgc3Ryb2tlb2s9InQiIGZpbGxvaz0idCIvPicsJzxvOmxvY2sgdjpleHQ9ImVkaXQiIHJvdGF0aW9uPSJ0Ii8+J10sQ2hlY2tib3g6Wyc8djpwYXRoIHNoYWRvd29rPSJ0IiBzdHJva2Vvaz0idCIgZmlsbG9rPSJ0Ii8+JywnPG86bG9jayB2OmV4dD0iZWRp''@;'; put 'put ''dCIgcm90YXRpb249InQiLz4nXSxzaGVldGpzOltdfTtmdW5jdGlvbiBCayhTLFIsayxHKXt2YXIgUT17IiFpZCI6e319LG9lPVtQcigieG1sIixudWxsLHsieG1sbnM6diI6eWwudiwieG1sbnM6byI6eWwubywieG1sbnM6eCI6eWwueH0pLnJlcGxhY2UoL1wvPi8sIj4iKSxQcigibzpzaGFw''@;'; put 'put ''ZWxheW91dCIsUHIoIm86aWRtYXAiLG51bGwseyJ2OmV4dCI6ImVkaXQiLGRhdGE6MX0pLHsidjpleHQiOiJlZGl0In0pLCc8djpzaGFwZXR5cGUgaWQ9Il94MDAwMF90NzUiIGNvb3Jkc2l6ZT0iMjE2MDAsMjE2MDAiIG86c3B0PSI3NSIgbzpwcmVmZXJyZWxhdGl2ZT0idCIgcGF0aD0ibUA0''@;'; put 'put ''QDVsQDRAMTFAOUAxMUA5QDV4ZSIgZmlsbGVkPSJmIiBzdHJva2VkPSJmIj4nLCc8djpzdHJva2Ugam9pbnN0eWxlPSJtaXRlciIvPicsIjx2OmZvcm11bGFzPiIsJzx2OmYgZXFuPSJpZiBsaW5lRHJhd24gcGl4ZWxMaW5lV2lkdGggMCIvPicsJzx2OmYgZXFuPSJzdW0gQDAgMSAwIi8+Jywn''@;'; put 'put ''PHY6ZiBlcW49InN1bSAwIDAgQDEiLz4nLCc8djpmIGVxbj0icHJvZCBAMiAxIDIiLz4nLCc8djpmIGVxbj0icHJvZCBAMyAyMTYwMCBwaXhlbFdpZHRoIi8+JywnPHY6ZiBlcW49InByb2QgQDMgMjE2MDAgcGl4ZWxIZWlnaHQiLz4nLCc8djpmIGVxbj0ic3VtIEAwIDAgMSIvPicsJzx2OmYg''@;'; put 'put ''ZXFuPSJwcm9kIEA2IDEgMiIvPicsJzx2OmYgZXFuPSJwcm9kIEA3IDIxNjAwIHBpeGVsV2lkdGgiLz4nLCc8djpmIGVxbj0ic3VtIEA4IDIxNjAwIDAiLz4nLCc8djpmIGVxbj0icHJvZCBANyAyMTYwMCBwaXhlbEhlaWdodCIvPicsJzx2OmYgZXFuPSJzdW0gQDEwIDIxNjAwIDAiLz4nLCI8''@;'; put 'put ''L3Y6Zm9ybXVsYXM+IiwnPHY6cGF0aCBvOmV4dHJ1c2lvbm9rPSJmIiBncmFkaWVudHNoYXBlb2s9InQiIG86Y29ubmVjdHR5cGU9InJlY3QiLz4nLCc8bzpsb2NrIHY6ZXh0PSJlZGl0IiBhc3BlY3RyYXRpbz0idCIvPicsIjwvdjpzaGFwZXR5cGU+Il0sZ2U9MTtbImhlYWRlciIsImZvb3Rl''@;'; put 'put ''ciJdLmZvckVhY2goZnVuY3Rpb24ocGUpe0dbcGVdJiZbIm9kZCIsImV2ZW4iLCJmaXJzdCJdLmZvckVhY2goZnVuY3Rpb24oeWUpe0dbcGVdW3llXSYmWyJsZWZ0IiwicmlnaHQiLCJjZW50ZXIiXS5mb3JFYWNoKGZ1bmN0aW9uKFBlKXtpZihBcnJheS5pc0FycmF5KEdbcGVdW3llXVtQZV0p''@;'; put 'put ''KWZvcih2YXIgTmU9MDtOZTxHW3BlXVt5ZV1bUGVdLmxlbmd0aDsrK05lKWlmKEdbcGVdW3llXVtQZV1bTmVdKXt2YXIgWWU9R1twZV1beWVdW1BlXVtOZV07aWYoInJlbW90ZSI9PVllWyIhZGF0YXR5cGUiXSl0aHJvdyJDYW5ub3QgdXNlIGxpbmtlZCBpbWFnZSBpbiBoZWFkZXIgb3IgZm9v''@;'; put 'put ''dGVyIjtmb3IoO3JpKFMsInhsL21lZGlhL2ltYWdlIitnZSsiLmpwZyIpOykrK2dlO1MuZmlsZSgieGwvbWVkaWEvaW1hZ2UiK2dlKyIuanBnIixjbmUoWWUpLHtiaW5hcnk6ITB9KSxFcihRLC0xLCIuLi9tZWRpYS9pbWFnZSIrZ2UrIi5qcGciLEthLklNRyk7dmFyIGV0PSJfeDAwMDBfcyIr''@;'; put 'put ''KDEwMjUrWWUuX2NudCksY3Q9InBvc2l0aW9uOmFic29sdXRlO21hcmdpbi1sZWZ0OjA7bWFyZ2luLXRvcDowO3otaW5kZXg6IisoWWUuX2NudCsxKSsiOyI7Y3QrPSJ3aWR0aDoiK1llWyIhcG9zIl0udysicHg7IixjdCs9ImhlaWdodDoiK1llWyIhcG9zIl0uaCsicHg7Ijt2YXIgRXQ9UGUu''@;'; put 'put ''Y2hhckF0KDApLnRvVXBwZXJDYXNlKCkrcGUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCk7Im9kZCIhPT15ZSYmKEV0Kz15ZS50b1VwcGVyQ2FzZSgpKSxHW3BlXVt5ZV1bUGVdLmxlbmd0aD4xJiYoRXQrPU5lKSxvZS5wdXNoKFByKCJ2OnNoYXBlIixbJzx2OmltYWdlZGF0YSBvOnJlbGlkPSJy''@;'; put 'put ''SWQnKyhZZS5fY250KzEpKyciIG86dGl0bGU9InNoZWV0anMiLz4nLCc8bzpsb2NrIHY6ZXh0PSJlZGl0IiByb3RhdGlvbj0idCIvPiddLmpvaW4oIiIpLHtpZDpFdCwibzpzcGlkIjpldCx0eXBlOiIjX3gwMDAwX3Q3NSIsc3R5bGU6Y3R9KSl9fSl9KX0pLG9lLnB1c2goIjwveG1sPiIpLFMu''@;'; put 'put ''ZmlsZSgieGwvZHJhd2luZ3Mvdm1sRHJhd2luZyIraysiSEYudm1sIixvZS5qb2luKCIiKSksUy5maWxlKCJ4bC9kcmF3aW5ncy9fcmVscy92bWxEcmF3aW5nIitrKyJIRi52bWwucmVscyIsa2koUSkpfUthLkNNTlQ9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VE''@;'; put 'put ''b2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvY29tbWVudHMiO3ZhciBRdj1QcigiY29tbWVudHMiLG51bGwse3htbG5zOllpLm1haW5bMF19KTtmdW5jdGlvbiBIQyhTKXt2YXIgUj1bSWksUXZdLGs9W107cmV0dXJuIFIucHVzaCgiPGF1dGhvcnM+IiksUy5mb3JFYWNoKGZ1bmN0aW9uKEcp''@;'; put 'put ''e0dbMV0uZm9yRWFjaChmdW5jdGlvbihRKXt2YXIgb2U9THIoUS5hKTtrLmluZGV4T2Yob2UpPi0xfHwoay5wdXNoKG9lKSxSLnB1c2goIjxhdXRob3I+IitvZSsiPC9hdXRob3I+IikpfSl9KSxSLnB1c2goIjwvYXV0aG9ycz4iKSxSLnB1c2goIjxjb21tZW50TGlzdD4iKSxTLmZvckVhY2go''@;'; put 'put ''ZnVuY3Rpb24oRyl7R1sxXS5mb3JFYWNoKGZ1bmN0aW9uKFEpe1IucHVzaCgnPGNvbW1lbnQgcmVmPSInK0dbMF0rJyIgYXV0aG9ySWQ9Iicray5pbmRleE9mKExyKFEuYSkpKyciPjx0ZXh0PicpLFIucHVzaChRLlI/UXMoUS5SKTpIYSgidCIsbnVsbD09US50PyIiOkxyKFEudCkpKSxSLnB1''@;'; put 'put ''c2goIjwvdGV4dD48L2NvbW1lbnQ+Iil9KX0pLFIucHVzaCgiPC9jb21tZW50TGlzdD4iKSxSLmxlbmd0aD4yJiYoUltSLmxlbmd0aF09IjwvY29tbWVudHM+IixSWzFdPVJbMV0ucmVwbGFjZSgiLz4iLCI+IikpLFIuam9pbigiIil9dmFyIHdCPWd1O2Z1bmN0aW9uIE5DKFMpe3ZhciBSPWJp''@;'; put 'put ''KCksaz1bXTtyZXR1cm4gRnIoUiwiQnJ0QmVnaW5Db21tZW50cyIpLEZyKFIsIkJydEJlZ2luQ29tbWVudEF1dGhvcnMiKSxTLmZvckVhY2goZnVuY3Rpb24oRyl7R1sxXS5mb3JFYWNoKGZ1bmN0aW9uKFEpe2suaW5kZXhPZihRLmEpPi0xfHwoay5wdXNoKFEuYS5zbGljZSgwLDU0KSksRnIo''@;'; put 'put ''UiwiQnJ0Q29tbWVudEF1dGhvciIsZnVuY3Rpb24gdW5lKFMpe3JldHVybiBGYyhTLnNsaWNlKDAsNTQpKX0oUS5hKSkpfSl9KSxGcihSLCJCcnRFbmRDb21tZW50QXV0aG9ycyIpLEZyKFIsIkJydEJlZ2luQ29tbWVudExpc3QiKSxTLmZvckVhY2goZnVuY3Rpb24oRyl7R1sxXS5mb3JFYWNo''@;'; put 'put ''KGZ1bmN0aW9uKFEpe1EuaWF1dGhvcj1rLmluZGV4T2YoUS5hKTt2YXIgb2U9e3M6Tm8oR1swXSksZTpObyhHWzBdKX07RnIoUiwiQnJ0QmVnaW5Db21tZW50IixmdW5jdGlvbiBfQihTLFIpe3JldHVybiBudWxsPT1SJiYoUj1ibigzNikpLFIud3JpdGVfc2hpZnQoNCxTWzFdLmlhdXRob3Ip''@;'; put 'put ''LGdmKFNbMF0sUiksUi53cml0ZV9zaGlmdCg0LDApLFIud3JpdGVfc2hpZnQoNCwwKSxSLndyaXRlX3NoaWZ0KDQsMCksUi53cml0ZV9zaGlmdCg0LDApLFJ9KFtvZSxRXSkpLFEudCYmUS50Lmxlbmd0aD4wJiZGcihSLCJCcnRDb21tZW50VGV4dCIsZnVuY3Rpb24gbmgoUyxSKXt2YXIgaz0h''@;'; put 'put ''MTtyZXR1cm4gbnVsbD09UiYmKGs9ITAsUj1ibigyMys0KlMudC5sZW5ndGgpKSxSLndyaXRlX3NoaWZ0KDEsMSksRmMoUy50LFIpLFIud3JpdGVfc2hpZnQoNCwxKSxmdW5jdGlvbiBjdihTLFIpe1J8fChSPWJuKDQpKSxSLndyaXRlX3NoaWZ0KDIsUy5pY2h8fDApLFIud3JpdGVfc2hpZnQo''@;'; put 'put ''MixTLmlmbnR8fDApfSh7aWNoOjAsaWZudDowfSxSKSxrP1Iuc2xpY2UoMCxSLmwpOlJ9KFEpKSxGcihSLCJCcnRFbmRDb21tZW50IiksZGVsZXRlIFEuaWF1dGhvcn0pfSksRnIoUiwiQnJ0RW5kQ29tbWVudExpc3QiKSxGcihSLCJCcnRFbmRDb21tZW50cyIpLFIuZW5kKCl9dmFyIFVrPSJh''@;'; put 'put ''cHBsaWNhdGlvbi92bmQubXMtb2ZmaWNlLnZiYVByb2plY3QiLFlrPVsieGxzYiIsInhsc20iLCJ4bGFtIiwiYmlmZjgiLCJ4bGEiXTtLYS5EUz0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9kaWFsb2dzaGVldCIs''@;'; put 'put ''S2EuTVM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlLzIwMDYvcmVsYXRpb25zaGlwcy94bE1hY3Jvc2hlZXQiO3ZhciBINT1mdW5jdGlvbigpe3ZhciBTPS8oXnxbXkEtWmEtel9dKVIoXFs/LT9cZCtcXXxbMS05XVxkKnwpQyhcWz8tP1xkK1xdfFsxLTldXGQqfCkoPyFb''@;'; put 'put ''QS1aYS16MC05X10pL2csUj17cjowLGM6MH07ZnVuY3Rpb24gayhHLFEsb2UsZ2Upe3ZhciBwZT0hMSx5ZT0hMTswPT1vZS5sZW5ndGg/eWU9ITA6IlsiPT1vZS5jaGFyQXQoMCkmJih5ZT0hMCxvZT1vZS5zbGljZSgxLC0xKSksMD09Z2UubGVuZ3RoP3BlPSEwOiJbIj09Z2UuY2hhckF0KDAp''@;'; put 'put ''JiYocGU9ITAsZ2U9Z2Uuc2xpY2UoMSwtMSkpO3ZhciBQZT1vZS5sZW5ndGg+MD8wfHBhcnNlSW50KG9lLDEwKTowLE5lPWdlLmxlbmd0aD4wPzB8cGFyc2VJbnQoZ2UsMTApOjA7cmV0dXJuIHBlP05lKz1SLmM6LS1OZSx5ZT9QZSs9Ui5yOi0tUGUsUSsocGU/IiI6IiQiKStUYShOZSkrKHll''@;'; put 'put ''PyIiOiIkIikramkoUGUpfXJldHVybiBmdW5jdGlvbihRLG9lKXtyZXR1cm4gUj1vZSxRLnJlcGxhY2UoUyxrKX19KCksbTI9LyhefFteLl9BLVowLTldKShbJF0/KShbQS1aXXsxLDJ9fFtBLVddW0EtWl17Mn18WFtBLUVdW0EtWl18WEZbQS1EXSkoWyRdPykoMTBbMC0zXVxkezR9fDEwNFsw''@;'; put 'put ''LTddXGR7M318MTA0OFswLTRdXGR7Mn18MTA0ODVbMC02XVxkfDEwNDg1N1swLTZdfFsxLTldXGR7MCw1fSkoPyFbXy5cKEEtWmEtejAtOV0pL2csSDQ9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oUixrKXtyZXR1cm4gUi5yZXBsYWNlKG0yLGZ1bmN0aW9uKEcsUSxvZSxnZSxwZSx5ZSl7''@;'; put 'put ''dmFyIFBlPUNhKGdlKS0ob2U/MDprLmMpLE5lPV9vKHllKS0ocGU/MDprLnIpO3JldHVybiBRKyJSIisoMD09TmU/IiI6cGU/TmUrMToiWyIrTmUrIl0iKSsiQyIrKDA9PVBlPyIiOm9lP1BlKzE6IlsiK1BlKyJdIil9KX19KCk7ZnVuY3Rpb24gR2soUyxSKXtyZXR1cm4gUy5yZXBsYWNlKG0y''@;'; put 'put ''LGZ1bmN0aW9uKGssRyxRLG9lLGdlLHBlKXtyZXR1cm4gRysoIiQiPT1RP1Erb2U6VGEoQ2Eob2UpK1IuYykpKygiJCI9PWdlP2dlK3BlOmppKF9vKHBlKStSLnIpKX0pLnJlcGxhY2UoLyhcZCspOihcZCspL2csZnVuY3Rpb24oayxHLFEpe3JldHVybiBqaShfbyhHKStSLnIpKyI6IitqaShf''@;'; put 'put ''byhRKStSLnIpfSl9ZnVuY3Rpb24gZG5lKFMsUixrKXt2YXIgUT1NcyhSKS5zLG9lPU5vKGspO3JldHVybiBHayhTLHtyOm9lLnItUS5yLGM6b2UuYy1RLmN9KX1mdW5jdGlvbiBFQihTKXtyZXR1cm4gUy5yZXBsYWNlKC9feGxmblwuL2csIiIpfWZ1bmN0aW9uIGJ1KFMpe1MubCs9MX1mdW5j''@;'; put 'put ''dGlvbiBONChTLFIpe3ZhciBrPVMucmVhZF9zaGlmdCgxPT1SPzE6Mik7cmV0dXJuWzE2MzgzJmssaz4+MTQmMSxrPj4xNSYxXX1mdW5jdGlvbiBWQyhTLFIsayl7dmFyIEc9MjtpZihrKXtpZihrLmJpZmY+PTImJmsuYmlmZjw9NSlyZXR1cm4gJGsoUyk7MTI9PWsuYmlmZiYmKEc9NCl9dmFy''@;'; put 'put ''IFE9Uy5yZWFkX3NoaWZ0KEcpLG9lPVMucmVhZF9zaGlmdChHKSxnZT1ONChTLDIpLHBlPU40KFMsMik7cmV0dXJue3M6e3I6USxjOmdlWzBdLGNSZWw6Z2VbMV0sclJlbDpnZVsyXX0sZTp7cjpvZSxjOnBlWzBdLGNSZWw6cGVbMV0sclJlbDpwZVsyXX19fWZ1bmN0aW9uICRrKFMpe3ZhciBS''@;'; put 'put ''PU40KFMsMiksaz1ONChTLDIpLEc9Uy5yZWFkX3NoaWZ0KDEpLFE9Uy5yZWFkX3NoaWZ0KDEpO3JldHVybntzOntyOlJbMF0sYzpHLGNSZWw6UlsxXSxyUmVsOlJbMl19LGU6e3I6a1swXSxjOlEsY1JlbDprWzFdLHJSZWw6a1syXX19fWZ1bmN0aW9uIEtrKFMsUixrKXtpZihrJiZrLmJpZmY+''@;'; put 'put ''PTImJmsuYmlmZjw9NSlyZXR1cm4gZnVuY3Rpb24gQUIoUyl7dmFyIFI9TjQoUywyKSxrPVMucmVhZF9zaGlmdCgxKTtyZXR1cm57cjpSWzBdLGM6ayxjUmVsOlJbMV0sclJlbDpSWzJdfX0oUyk7dmFyIEc9Uy5yZWFkX3NoaWZ0KGsmJjEyPT1rLmJpZmY/NDoyKSxRPU40KFMsMik7cmV0dXJu''@;'; put 'put ''e3I6RyxjOlFbMF0sY1JlbDpRWzFdLHJSZWw6UVsyXX19ZnVuY3Rpb24gQkMoUyl7dmFyIFI9Uy5yZWFkX3NoaWZ0KDIpLGs9Uy5yZWFkX3NoaWZ0KDIpO3JldHVybntyOlIsYzoyNTUmayxmUXVvdGVkOiEhKDE2Mzg0JmspLGNSZWw6az4+MTUsclJlbDprPj4xNX19ZnVuY3Rpb24gZUQoUyl7''@;'; put 'put ''cmV0dXJuW1MucmVhZF9zaGlmdCgxKSxTLnJlYWRfc2hpZnQoMSldfWZ1bmN0aW9uIFpDKFMsUil7dmFyIGs9W1MucmVhZF9zaGlmdCgxKV07aWYoMTI9PVIpc3dpdGNoKGtbMF0pe2Nhc2UgMjprWzBdPTQ7YnJlYWs7Y2FzZSA0OmtbMF09MTY7YnJlYWs7Y2FzZSAwOmtbMF09MTticmVhaztj''@;'; put 'put ''YXNlIDE6a1swXT0yfXN3aXRjaChrWzBdKXtjYXNlIDQ6a1sxXT11byhTLDEpPyJUUlVFIjoiRkFMU0UiLDEyIT1SJiYoUy5sKz03KTticmVhaztjYXNlIDM3OmNhc2UgMTY6a1sxXT1NY1tTW1MubF1dLFMubCs9MTI9PVI/NDo4O2JyZWFrO2Nhc2UgMDpTLmwrPTg7YnJlYWs7Y2FzZSAxOmtb''@;'; put 'put ''MV09UGwoUyk7YnJlYWs7Y2FzZSAyOmtbMV09WDAoUywwLHtiaWZmOlI+MCYmUjw4PzI6Un0pO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJCYWQgU2VyQXI6ICIra1swXSl9cmV0dXJuIGt9ZnVuY3Rpb24gaUQoUyxSLGspe2Zvcih2YXIgRz1TLnJlYWRfc2hpZnQoMTI9PWsuYmlm''@;'; put 'put ''Zj80OjIpLFE9W10sb2U9MDtvZSE9RzsrK29lKVEucHVzaCgoMTI9PWsuYmlmZj9tdTpzMikoUyw4KSk7cmV0dXJuIFF9ZnVuY3Rpb24gTkIoUyxSLGspe3ZhciBHPTAsUT0wOzEyPT1rLmJpZmY/KEc9Uy5yZWFkX3NoaWZ0KDQpLFE9Uy5yZWFkX3NoaWZ0KDQpKTooUT0xK1MucmVhZF9zaGlm''@;'; put 'put ''dCgxKSxHPTErUy5yZWFkX3NoaWZ0KDIpKSxrLmJpZmY+PTImJmsuYmlmZjw4JiYoLS1HLDA9PS0tUSYmKFE9MjU2KSk7Zm9yKHZhciBvZT0wLGdlPVtdO29lIT1HJiYoZ2Vbb2VdPVtdKTsrK29lKWZvcih2YXIgcGU9MDtwZSE9UTsrK3BlKWdlW29lXVtwZV09WkMoUyxrLmJpZmYpO3JldHVy''@;'; put 'put ''biBnZX1mdW5jdGlvbiBWNShTLFIsayl7cmV0dXJuIFMubCs9MixbQkMoUyldfWZ1bmN0aW9uIFdDKFMpe3JldHVybiBTLmwrPTYsW119dmFyIFdCPVY1LFlCPVdDLEdCPVdDLCRCPVY1O2Z1bmN0aW9uIG9EKFMpe3JldHVybiBTLmwrPTIsW0VjKFMpLDEmUy5yZWFkX3NoaWZ0KDIpXX12YXIg''@;'; put 'put ''WUM9VjUsX25lPW9ELHduZT1XQyxHQz1WNSxDbmU9VjUsU25lPVsiRGF0YSIsIkFsbCIsIkhlYWRlcnMiLCI/PyIsIj9EYXRhMiIsIj8/IiwiP0RhdGFIZWFkZXJzIiwiPz8iLCJUb3RhbHMiLCI/PyIsIj8/IiwiPz8iLCI/RGF0YVRvdGFscyIsIj8/IiwiPz8iLCI/PyIsIj9DdXJyZW50Il0s''@;'; put 'put ''aWI9ezE6e246IlB0Z0V4cCIsZjpmdW5jdGlvbiBQQihTLFIsayl7cmV0dXJuIFMubCsrLGsmJjEyPT1rLmJpZmY/W1MucmVhZF9zaGlmdCg0LCJpIiksMF06W1MucmVhZF9zaGlmdCgyKSxTLnJlYWRfc2hpZnQoayYmMj09ay5iaWZmPzE6MildfX0sMjp7bjoiUHRnVGJsIixmOklufSwzOntu''@;'; put 'put ''OiJQdGdBZGQiLGY6YnV9LDQ6e246IlB0Z1N1YiIsZjpidX0sNTp7bjoiUHRnTXVsIixmOmJ1fSw2OntuOiJQdGdEaXYiLGY6YnV9LDc6e246IlB0Z1Bvd2VyIixmOmJ1fSw4OntuOiJQdGdDb25jYXQiLGY6YnV9LDk6e246IlB0Z0x0IixmOmJ1fSwxMDp7bjoiUHRnTGUiLGY6YnV9LDExOntu''@;'; put 'put ''OiJQdGdFcSIsZjpidX0sMTI6e246IlB0Z0dlIixmOmJ1fSwxMzp7bjoiUHRnR3QiLGY6YnV9LDE0OntuOiJQdGdOZSIsZjpidX0sMTU6e246IlB0Z0lzZWN0IixmOmJ1fSwxNjp7bjoiUHRnVW5pb24iLGY6YnV9LDE3OntuOiJQdGdSYW5nZSIsZjpidX0sMTg6e246IlB0Z1VwbHVzIixmOmJ1''@;'; put 'put ''fSwxOTp7bjoiUHRnVW1pbnVzIixmOmJ1fSwyMDp7bjoiUHRnUGVyY2VudCIsZjpidX0sMjE6e246IlB0Z1BhcmVuIixmOmJ1fSwyMjp7bjoiUHRnTWlzc0FyZyIsZjpidX0sMjM6e246IlB0Z1N0ciIsZjpmdW5jdGlvbiBIQihTLFIsayl7cmV0dXJuIFMubCsrLFVhKFMsMCxrKX19LDI2Ontu''@;'; put 'put ''OiJQdGdTaGVldCIsZjpmdW5jdGlvbiBFbmUoUyxSLGspe3JldHVybiBTLmwrPTUsUy5sKz0yLFMubCs9Mj09ay5iaWZmPzE6NCxbIlBUR1NIRUVUIl19fSwyNzp7bjoiUHRnRW5kU2hlZXQiLGY6ZnVuY3Rpb24gS0IoUyxSLGspe3JldHVybiBTLmwrPTI9PWsuYmlmZj80OjUsWyJQVEdFTkRT''@;'; put 'put ''SEVFVCJdfX0sMjg6e246IlB0Z0VyciIsZjpmdW5jdGlvbiBVQyhTKXtyZXR1cm4gUy5sKyssTWNbUy5yZWFkX3NoaWZ0KDEpXX19LDI5OntuOiJQdGdCb29sIixmOmZ1bmN0aW9uIE41KFMpe3JldHVybiBTLmwrKywwIT09Uy5yZWFkX3NoaWZ0KDEpfX0sMzA6e246IlB0Z0ludCIsZjpmdW5j''@;'; put 'put ''dGlvbiBGQihTKXtyZXR1cm4gUy5sKyssUy5yZWFkX3NoaWZ0KDIpfX0sMzE6e246IlB0Z051bSIsZjpmdW5jdGlvbiBWNChTKXtyZXR1cm4gUy5sKyssUGwoUyl9fSwzMjp7bjoiUHRnQXJyYXkiLGY6ZnVuY3Rpb24gZ25lKFMsUixrKXt2YXIgRz0oOTYmU1tTLmwrK10pPj41O3JldHVybiBT''@;'; put 'put ''LmwrPTI9PWsuYmlmZj82OjEyPT1rLmJpZmY/MTQ6NyxbR119fSwzMzp7bjoiUHRnRnVuYyIsZjpmdW5jdGlvbiBMQihTLFIsayl7dmFyIEc9KDk2JlNbUy5sXSk+PjU7Uy5sKz0xO3ZhciBRPVMucmVhZF9zaGlmdChrJiZrLmJpZmY8PTM/MToyKTtyZXR1cm5bZWpbUV0scERbUV0sR119fSwz''@;'; put 'put ''NDp7bjoiUHRnRnVuY1ZhciIsZjpmdW5jdGlvbiBPQihTLFIsayl7dmFyIEc9U1tTLmwrK10sUT1TLnJlYWRfc2hpZnQoMSksb2U9ayYmay5iaWZmPD0zP1s4OD09Rz8tMTowLFMucmVhZF9zaGlmdCgxKV06ZnVuY3Rpb24gckQoUyl7cmV0dXJuW1NbUy5sKzFdPj43LDMyNzY3JlMucmVhZF9z''@;'; put 'put ''aGlmdCgyKV19KFMpO3JldHVybltRLCgwPT09b2VbMF0/cEQ6clMpW29lWzFdXV19fSwzNTp7bjoiUHRnTmFtZSIsZjpmdW5jdGlvbiBWQihTLFIsayl7dmFyIEc9Uy5yZWFkX3NoaWZ0KDEpPj4+NSYzLG9lPVMucmVhZF9zaGlmdCgha3x8ay5iaWZmPj04PzQ6Mik7c3dpdGNoKGsuYmlmZil7''@;'; put 'put ''Y2FzZSAyOlMubCs9NTticmVhaztjYXNlIDM6Y2FzZSA0OlMubCs9ODticmVhaztjYXNlIDU6Uy5sKz0xMn1yZXR1cm5bRywwLG9lXX19LDM2OntuOiJQdGdSZWYiLGY6ZnVuY3Rpb24gUkIoUyxSLGspe3ZhciBHPSg5NiZTW1MubF0pPj41O3JldHVybiBTLmwrPTEsW0csS2soUywwLGspXX19''@;'; put 'put ''LDM3OntuOiJQdGdBcmVhIixmOmZ1bmN0aW9uIHFrKFMsUixrKXtyZXR1cm5bKDk2JlNbUy5sKytdKT4+NSxWQyhTLDAsayldfX0sMzg6e246IlB0Z01lbUFyZWEiLGY6ZnVuY3Rpb24gYUQoUyxSLGspe3ZhciBHPVMucmVhZF9zaGlmdCgxKT4+PjUmMztyZXR1cm4gUy5sKz1rJiYyPT1rLmJp''@;'; put 'put ''ZmY/Mzo0LFtHLFMucmVhZF9zaGlmdChrJiYyPT1rLmJpZmY/MToyKV19fSwzOTp7bjoiUHRnTWVtRXJyIixmOklufSw0MDp7bjoiUHRnTWVtTm9NZW0iLGY6SW59LDQxOntuOiJQdGdNZW1GdW5jIixmOmZ1bmN0aW9uIGJuZShTLFIsayl7cmV0dXJuW1MucmVhZF9zaGlmdCgxKT4+PjUmMyxT''@;'; put 'put ''LnJlYWRfc2hpZnQoayYmMj09ay5iaWZmPzE6MildfX0sNDI6e246IlB0Z1JlZkVyciIsZjpmdW5jdGlvbiB5bmUoUyxSLGspe3ZhciBHPVMucmVhZF9zaGlmdCgxKT4+PjUmMztyZXR1cm4gUy5sKz00LGsuYmlmZjw4JiZTLmwtLSwxMj09ay5iaWZmJiYoUy5sKz0yKSxbR119fSw0Mzp7bjoi''@;'; put 'put ''UHRnQXJlYUVyciIsZjpmdW5jdGlvbiBKayhTLFIsayl7dmFyIEc9KDk2JlNbUy5sKytdKT4+NTtyZXR1cm4gUy5sKz1rJiZrLmJpZmY+OD8xMjprLmJpZmY8OD82OjgsW0ddfX0sNDQ6e246IlB0Z1JlZk4iLGY6ZnVuY3Rpb24gdEQoUyxSLGspe3ZhciBHPSg5NiZTW1MubF0pPj41O1MubCs9''@;'; put 'put ''MTt2YXIgUT1mdW5jdGlvbiBMZihTLFIsayl7dmFyIEc9ayYmay5iaWZmP2suYmlmZjo4O2lmKEc+PTImJkc8PTUpcmV0dXJuIGZ1bmN0aW9uIGE4KFMpe3ZhciBSPVMucmVhZF9zaGlmdCgyKSxrPVMucmVhZF9zaGlmdCgxKSxHPSgzMjc2OCZSKT4+MTUsUT0oMTYzODQmUik+PjE0O3JldHVy''@;'; put 'put ''biBSJj0xNjM4MywxPT1HJiZSPj04MTkyJiYoUi09MTYzODQpLDE9PVEmJms+PTEyOCYmKGstPTI1Nikse3I6UixjOmssY1JlbDpRLHJSZWw6R319KFMpO3ZhciBRPVMucmVhZF9zaGlmdChHPj0xMj80OjIpLG9lPVMucmVhZF9zaGlmdCgyKSxnZT0oMTYzODQmb2UpPj4xNCxwZT0oMzI3Njgm''@;'; put 'put ''b2UpPj4xNTtpZihvZSY9MTYzODMsMT09cGUpZm9yKDtRPjUyNDI4NzspUS09MTA0ODU3NjtpZigxPT1nZSlmb3IoO29lPjgxOTE7KW9lLT0xNjM4NDtyZXR1cm57cjpRLGM6b2UsY1JlbDpnZSxyUmVsOnBlfX0oUywwLGspO3JldHVybltHLFFdfX0sNDU6e246IlB0Z0FyZWFOIixmOmZ1bmN0''@;'; put 'put ''aW9uIHBuZShTLFIsayl7dmFyIEc9KDk2JlNbUy5sKytdKT4+NSxRPWZ1bmN0aW9uIFRCKFMsUixrKXtpZihrLmJpZmY8OClyZXR1cm4gJGsoUyk7dmFyIEc9Uy5yZWFkX3NoaWZ0KDEyPT1rLmJpZmY/NDoyKSxRPVMucmVhZF9zaGlmdCgxMj09ay5iaWZmPzQ6Miksb2U9TjQoUywyKSxnZT1O''@;'; put 'put ''NChTLDIpO3JldHVybntzOntyOkcsYzpvZVswXSxjUmVsOm9lWzFdLHJSZWw6b2VbMl19LGU6e3I6USxjOmdlWzBdLGNSZWw6Z2VbMV0sclJlbDpnZVsyXX19fShTLDAsayk7cmV0dXJuW0csUV19fSw0Njp7bjoiUHRnTWVtQXJlYU4iLGY6ZnVuY3Rpb24gbmIoUyl7cmV0dXJuW1MucmVhZF9z''@;'; put 'put ''aGlmdCgxKT4+PjUmMyxTLnJlYWRfc2hpZnQoMildfX0sNDc6e246IlB0Z01lbU5vTWVtTiIsZjpmdW5jdGlvbiByYihTKXtyZXR1cm5bUy5yZWFkX3NoaWZ0KDEpPj4+NSYzLFMucmVhZF9zaGlmdCgyKV19fSw1Nzp7bjoiUHRnTmFtZVgiLGY6ZnVuY3Rpb24gQkIoUyxSLGspe3JldHVybiA1''@;'; put 'put ''PT1rLmJpZmY/ZnVuY3Rpb24gakIoUyl7dmFyIFI9Uy5yZWFkX3NoaWZ0KDEpPj4+NSYzLGs9Uy5yZWFkX3NoaWZ0KDIsImkiKTtTLmwrPTg7dmFyIEc9Uy5yZWFkX3NoaWZ0KDIpO3JldHVybiBTLmwrPTEyLFtSLGssR119KFMpOltTLnJlYWRfc2hpZnQoMSk+Pj41JjMsUy5yZWFkX3NoaWZ0''@;'; put 'put ''KDIpLFMucmVhZF9zaGlmdCg0KV19fSw1ODp7bjoiUHRnUmVmM2QiLGY6ZnVuY3Rpb24gbkQoUyxSLGspe3ZhciBHPSg5NiZTW1MubF0pPj41O1MubCs9MTt2YXIgUT1TLnJlYWRfc2hpZnQoMik7cmV0dXJuIGsmJjU9PWsuYmlmZiYmKFMubCs9MTIpLFtHLFEsS2soUywwLGspXX19LDU5Ontu''@;'; put 'put ''OiJQdGdBcmVhM2QiLGY6ZnVuY3Rpb24gWGsoUyxSLGspe3ZhciBHPSg5NiZTW1MubCsrXSk+PjUsUT1TLnJlYWRfc2hpZnQoMiwiaSIpO2lmKGsmJjU9PT1rLmJpZmYpUy5sKz0xMjtyZXR1cm5bRyxRLFZDKFMsMCxrKV19fSw2MDp7bjoiUHRnUmVmRXJyM2QiLGY6ZnVuY3Rpb24gbzgoUyxS''@;'; put 'put ''LGspe3ZhciBHPSg5NiZTW1MubCsrXSk+PjUsUT1TLnJlYWRfc2hpZnQoMiksb2U9NDtpZihrKXN3aXRjaChrLmJpZmYpe2Nhc2UgNTpvZT0xNTticmVhaztjYXNlIDEyOm9lPTZ9cmV0dXJuIFMubCs9b2UsW0csUV19fSw2MTp7bjoiUHRnQXJlYUVycjNkIixmOmZ1bmN0aW9uIGZuZShTLFIs''@;'; put 'put ''ayl7dmFyIEc9KDk2JlNbUy5sKytdKT4+NSxRPVMucmVhZF9zaGlmdCgyKSxvZT04O2lmKGspc3dpdGNoKGsuYmlmZil7Y2FzZSA1OlMubCs9MTIsb2U9NjticmVhaztjYXNlIDEyOm9lPTEyfXJldHVybiBTLmwrPW9lLFtHLFFdfX0sMjU1Ont9fSxLQz17NjQ6MzIsOTY6MzIsNjU6MzMsOTc6''@;'; put 'put ''MzMsNjY6MzQsOTg6MzQsNjc6MzUsOTk6MzUsNjg6MzYsMTAwOjM2LDY5OjM3LDEwMTozNyw3MDozOCwxMDI6MzgsNzE6MzksMTAzOjM5LDcyOjQwLDEwNDo0MCw3Mzo0MSwxMDU6NDEsNzQ6NDIsMTA2OjQyLDc1OjQzLDEwNzo0Myw3Njo0NCwxMDg6NDQsNzc6NDUsMTA5OjQ1LDc4OjQ2LDEx''@;'; put 'put ''MDo0Niw3OTo0NywxMTE6NDcsODg6MzQsMTIwOjM0LDg5OjU3LDEyMTo1Nyw5MDo1OCwxMjI6NTgsOTE6NTksMTIzOjU5LDkyOjYwLDEyNDo2MCw5Mzo2MSwxMjU6NjF9OyFmdW5jdGlvbigpe2Zvcih2YXIgUyBpbiBLQylpYltTXT1pYltLQ1tTXV19KCk7dmFyIHFDPXsxOntuOiJQdGdFbGZM''@;'; put 'put ''ZWwiLGY6b0R9LDI6e246IlB0Z0VsZlJ3IixmOkdDfSwzOntuOiJQdGdFbGZDb2wiLGY6V0J9LDY6e246IlB0Z0VsZlJ3ViIsZjpDbmV9LDc6e246IlB0Z0VsZkNvbFYiLGY6JEJ9LDEwOntuOiJQdGdFbGZSYWRpY2FsIixmOllDfSwxMTp7bjoiUHRnRWxmUmFkaWNhbFMiLGY6d25lfSwxMzp7''@;'; put 'put ''bjoiUHRnRWxmQ29sUyIsZjpZQn0sMTU6e246IlB0Z0VsZkNvbFNWIixmOkdCfSwxNjp7bjoiUHRnRWxmUmFkaWNhbExlbCIsZjpfbmV9LDI1OntuOiJQdGdMaXN0IixmOmZ1bmN0aW9uIE1uZShTKXtTLmwrPTI7dmFyIFI9Uy5yZWFkX3NoaWZ0KDIpLGs9Uy5yZWFkX3NoaWZ0KDIpLEc9Uy5y''@;'; put 'put ''ZWFkX3NoaWZ0KDQpLFE9Uy5yZWFkX3NoaWZ0KDIpLG9lPVMucmVhZF9zaGlmdCgyKTtyZXR1cm57aXh0aTpSLGNvbHR5cGU6MyZrLHJ0OlNuZVtrPj4yJjMxXSxpZHg6RyxjOlEsQzpvZX19fSwyOTp7bjoiUHRnU3hOYW1lIixmOmZ1bmN0aW9uIHhuZShTKXtyZXR1cm4gUy5sKz0yLFtTLnJl''@;'; put 'put ''YWRfc2hpZnQoNCldfX0sMjU1Ont9fSwkMz17MDp7bjoiUHRnQXR0ck5vb3AiLGY6ZnVuY3Rpb24gJEMoUyl7cmV0dXJuIFMubCs9NCxbMCwwXX19LDE6e246IlB0Z0F0dHJTZW1pIixmOmZ1bmN0aW9uIGtCKFMsUixrKXt2YXIgRz0yNTUmU1tTLmwrMV0/MTowO3JldHVybiBTLmwrPWsmJjI9''@;'; put 'put ''PWsuYmlmZj8zOjQsW0ddfX0sMjp7bjoiUHRnQXR0cklmIixmOmZ1bmN0aW9uIHZuZShTLFIsayl7dmFyIEc9MjU1JlNbUy5sKzFdPzE6MDtyZXR1cm4gUy5sKz0yLFtHLFMucmVhZF9zaGlmdChrJiYyPT1rLmJpZmY/MToyKV19fSw0OntuOiJQdGdBdHRyQ2hvb3NlIixmOmZ1bmN0aW9uIHpD''@;'; put 'put ''KFMsUixrKXtTLmwrPTI7Zm9yKHZhciBHPVMucmVhZF9zaGlmdChrJiYyPT1rLmJpZmY/MToyKSxRPVtdLG9lPTA7b2U8PUc7KytvZSlRLnB1c2goUy5yZWFkX3NoaWZ0KGsmJjI9PWsuYmlmZj8xOjIpKTtyZXR1cm4gUX19LDg6e246IlB0Z0F0dHJHb3RvIixmOmZ1bmN0aW9uIG1uZShTLFIs''@;'; put 'put ''ayl7dmFyIEc9MjU1JlNbUy5sKzFdPzE6MDtyZXR1cm4gUy5sKz0yLFtHLFMucmVhZF9zaGlmdChrJiYyPT1rLmJpZmY/MToyKV19fSwxNjp7bjoiUHRnQXR0clN1bSIsZjpmdW5jdGlvbiB0YihTLFIsayl7Uy5sKz1rJiYyPT1rLmJpZmY/Mzo0fX0sMzI6e246IlB0Z0F0dHJCYXhjZWwiLGY6''@;'; put 'put ''ZnVuY3Rpb24gakMoUyl7dmFyIFI9MSZTW1MubCsxXTtyZXR1cm4gUy5sKz00LFtSLDFdfX0sNjQ6e246IlB0Z0F0dHJTcGFjZSIsZjpmdW5jdGlvbiBEQihTKXtyZXR1cm4gUy5yZWFkX3NoaWZ0KDIpLGVEKFMpfX0sNjU6e246IlB0Z0F0dHJTcGFjZVNlbWkiLGY6ZnVuY3Rpb24gSUIoUyl7''@;'; put 'put ''cmV0dXJuIFMucmVhZF9zaGlmdCgyKSxlRChTKX19LDEyODp7bjoiUHRnQXR0cklmRXJyb3IiLGY6ZnVuY3Rpb24gUWsoUyl7dmFyIFI9MjU1JlNbUy5sKzFdPzE6MDtyZXR1cm4gUy5sKz0yLFtSLFMucmVhZF9zaGlmdCgyKV19fSwyNTU6e319O2Z1bmN0aW9uIEI0KFMsUixrLEcsUSl7aWYo''@;'; put 'put ''Ry5iaWZmPDgpcmV0dXJuIEluKFMsUik7Zm9yKHZhciBvZT1TLmwrUixnZT1bXSxwZT0wO3BlIT09ay5sZW5ndGg7KytwZSlzd2l0Y2goa1twZV1bMF0pe2Nhc2UiUHRnQXJyYXkiOmtbcGVdWzFdPU5CKFMsMCxHKSxnZS5wdXNoKGtbcGVdWzFdKTticmVhaztjYXNlIlB0Z01lbUFyZWEiOmtb''@;'; put 'put ''cGVdWzJdPWlEKFMsMCxHKSxnZS5wdXNoKGtbcGVdWzJdKTticmVhaztjYXNlIlB0Z0V4cCI6RyYmMTI9PUcuYmlmZiYmKGtbcGVdWzFdWzFdPVMucmVhZF9zaGlmdCg0KSxnZS5wdXNoKGtbcGVdWzFdKSk7YnJlYWs7Y2FzZSJQdGdMaXN0IjpjYXNlIlB0Z0VsZlJhZGljYWxTIjpjYXNlIlB0''@;'; put 'put ''Z0VsZkNvbFMiOmNhc2UiUHRnRWxmQ29sU1YiOnRocm93IlVuc3VwcG9ydGVkICIra1twZV1bMF19cmV0dXJuIFI9b2UtUy5sLCFRJiYwIT09UiYmZ2UucHVzaChJbihTLFIpKSxnZX1mdW5jdGlvbiBsaChTLFIsayl7Zm9yKHZhciBRLG9lLEc9Uy5sK1IsZ2U9W107RyE9Uy5sOylSPUctUy5s''@;'; put 'put ''LFE9aWJbb2U9U1tTLmxdXSwoMjQ9PT1vZXx8MjU9PT1vZSkmJihRPSgyND09PW9lP3FDOiQzKVtTW1MubCsxXV0pLFEmJlEuZj9nZS5wdXNoKFtRLm4sUS5mKFMsUixrKV0pOkluKFMsUik7cmV0dXJuIGdlfWZ1bmN0aW9uIEYxKFMpe2Zvcih2YXIgUj1bXSxrPTA7azxTLmxlbmd0aDsrK2sp''@;'; put 'put ''e2Zvcih2YXIgRz1TW2tdLFE9W10sb2U9MDtvZTxHLmxlbmd0aDsrK29lKXt2YXIgZ2U9R1tvZV07US5wdXNoKGdlPzI9PT1nZVswXT8nIicrZ2VbMV0ucmVwbGFjZSgvIi9nLCciIicpKyciJzpnZVsxXToiIil9Ui5wdXNoKFEuam9pbigiLCIpKX1yZXR1cm4gUi5qb2luKCI7Iil9JDNbMzNd''@;'; put 'put ''PSQzWzMyXTt2YXIgY2g9e1B0Z0FkZDoiKyIsUHRnQ29uY2F0OiImIixQdGdEaXY6Ii8iLFB0Z0VxOiI9IixQdGdHZToiPj0iLFB0Z0d0OiI+IixQdGdMZToiPD0iLFB0Z0x0OiI8IixQdGdNdWw6IioiLFB0Z05lOiI8PiIsUHRnUG93ZXI6Il4iLFB0Z1N1YjoiLSJ9LHNEPW5ldyBSZWdFeHAo''@;'; put 'put ''L1teXHdcdTRFMDAtXHU5RkZGXHUzMDQwLVx1MzBGRl0vKTtmdW5jdGlvbiBsRChTLFIsayl7aWYoIVMpcmV0dXJuIlNIMzNUSlNFUlIwIjtpZihrLmJpZmY+OCYmKCFTLlhUSXx8IVMuWFRJW1JdKSlyZXR1cm4gUy5TaGVldE5hbWVzW1JdO2lmKCFTLlhUSSlyZXR1cm4iU0gzM1RKU0VSUjYi''@;'; put 'put ''O3ZhciBHPVMuWFRJW1JdO2lmKGsuYmlmZjw4KXJldHVybiBSPjFlNCYmKFItPTY1NTM2KSxSPDAmJihSPS1SKSwwPT1SPyIiOlMuWFRJW1ItMV07aWYoIUcpcmV0dXJuIlNIMzNUSlNFUlIxIjt2YXIgUT0iIjtpZihrLmJpZmY+OClzd2l0Y2goU1tHWzBdXVswXSl7Y2FzZSAzNTc6cmV0dXJu''@;'; put 'put ''IFE9LTE9PUdbMV0/IiNSRUYiOlMuU2hlZXROYW1lc1tHWzFdXSxHWzFdPT1HWzJdP1E6USsiOiIrUy5TaGVldE5hbWVzW0dbMl1dO2Nhc2UgMzU4OnJldHVybiBudWxsIT1rLlNJRD9TLlNoZWV0TmFtZXNbay5TSURdOiJTSDMzVEpTU0FNRSIrU1tHWzBdXVswXTtkZWZhdWx0OnJldHVybiJT''@;'; put 'put ''SDMzVEpTU1JDIitTW0dbMF1dWzBdfXN3aXRjaChTW0dbMF1dWzBdWzBdKXtjYXNlIDEwMjU6cmV0dXJuIFE9LTE9PUdbMV0/IiNSRUYiOlMuU2hlZXROYW1lc1tHWzFdXXx8IlNIMzNUSlNFUlIzIixHWzFdPT1HWzJdP1E6USsiOiIrUy5TaGVldE5hbWVzW0dbMl1dO2Nhc2UgMTQ4NDk6cmV0''@;'; put 'put ''dXJuIFNbR1swXV0uc2xpY2UoMSkubWFwKGZ1bmN0aW9uKG9lKXtyZXR1cm4gb2UuTmFtZX0pLmpvaW4oIjs7Iik7ZGVmYXVsdDpyZXR1cm4gU1tHWzBdXVswXVszXT8oUT0tMT09R1sxXT8iI1JFRiI6U1tHWzBdXVswXVszXVtHWzFdXXx8IlNIMzNUSlNFUlI0IixHWzFdPT1HWzJdP1E6USsi''@;'; put 'put ''OiIrU1tHWzBdXVswXVszXVtHWzJdXSk6IlNIMzNUSlNFUlIyIn19ZnVuY3Rpb24gcUIoUyxSLGspe3JldHVybiBmdW5jdGlvbiBUbmUoUyxSKXtpZighKFN8fFImJlIuYmlmZjw9NSYmUi5iaWZmPj0yKSl0aHJvdyBuZXcgRXJyb3IoImVtcHR5IHNoZWV0IG5hbWUiKTtyZXR1cm4vI1JFRi8u''@;'; put 'put ''dGVzdChTKT9TOnNELnRlc3QoUyk/IiciK1MrIiciOlN9KGxEKFMsUixrKSxrKX1mdW5jdGlvbiBzMChTLFIsayxHLFEsb2Upe3ZhciBQZSxOZSxZZSxFdCxnZT1RJiZRLmJpZmZ8fDgscGU9b2UmJm51bGwhPVI/Ujp7czp7YzowLHI6MH0sZTp7YzowLHI6MH19LHllPVtdLGV0PTAsY3Q9MCxh''@;'; put 'put ''dD0iIjtpZighU1swXXx8IVNbMF1bMF0pcmV0dXJuIiI7Zm9yKHZhciBidD0tMSxqdD0iIixrdD0wLE90PVNbMF0ubGVuZ3RoO2t0PE90Oysra3Qpe3ZhciBLdD1TWzBdW2t0XTtzd2l0Y2goS3RbMF0pe2Nhc2UiUHRnVW1pbnVzIjp5ZS5wdXNoKCItIit5ZS5wb3AoKSk7YnJlYWs7Y2FzZSJQ''@;'; put 'put ''dGdVcGx1cyI6eWUucHVzaCgiKyIreWUucG9wKCkpO2JyZWFrO2Nhc2UiUHRnUGVyY2VudCI6eWUucHVzaCh5ZS5wb3AoKSsiJSIpO2JyZWFrO2Nhc2UiUHRnQWRkIjpjYXNlIlB0Z0NvbmNhdCI6Y2FzZSJQdGdEaXYiOmNhc2UiUHRnRXEiOmNhc2UiUHRnR2UiOmNhc2UiUHRnR3QiOmNhc2Ui''@;'; put 'put ''UHRnTGUiOmNhc2UiUHRnTHQiOmNhc2UiUHRnTXVsIjpjYXNlIlB0Z05lIjpjYXNlIlB0Z1Bvd2VyIjpjYXNlIlB0Z1N1YiI6aWYoUGU9eWUucG9wKCksTmU9eWUucG9wKCksYnQ+PTApe3N3aXRjaChTWzBdW2J0XVsxXVswXSl7Y2FzZSAwOmp0PWNpKCIgIixTWzBdW2J0XVsxXVsxXSk7YnJl''@;'; put 'put ''YWs7Y2FzZSAxOmp0PWNpKCJcciIsU1swXVtidF1bMV1bMV0pO2JyZWFrO2RlZmF1bHQ6aWYoanQ9IiIsUS5XVEYpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIFB0Z0F0dHJTcGFjZVR5cGUgIitTWzBdW2J0XVsxXVswXSl9TmUrPWp0LGJ0PS0xfXllLnB1c2goTmUrY2hbS3RbMF1dK1Bl''@;'; put 'put ''KTticmVhaztjYXNlIlB0Z0lzZWN0IjpQZT15ZS5wb3AoKSxOZT15ZS5wb3AoKSx5ZS5wdXNoKE5lKyIgIitQZSk7YnJlYWs7Y2FzZSJQdGdVbmlvbiI6UGU9eWUucG9wKCksTmU9eWUucG9wKCkseWUucHVzaChOZSsiLCIrUGUpO2JyZWFrO2Nhc2UiUHRnUmFuZ2UiOlBlPXllLnBvcCgpLE5l''@;'; put 'put ''PXllLnBvcCgpLHllLnB1c2goTmUrIjoiK1BlKTticmVhaztjYXNlIlB0Z0F0dHJDaG9vc2UiOmNhc2UiUHRnQXR0ckdvdG8iOmNhc2UiUHRnQXR0cklmIjpjYXNlIlB0Z0F0dHJJZkVycm9yIjpjYXNlIlB0Z0F0dHJCYXhjZWwiOmNhc2UiUHRnQXR0clNlbWkiOmNhc2UiUHRnTWVtQXJlYSI6''@;'; put 'put ''Y2FzZSJQdGdUYmwiOmNhc2UiUHRnTWVtRXJyIjpjYXNlIlB0Z01lbUFyZWFOIjpjYXNlIlB0Z01lbU5vTWVtTiI6Y2FzZSJQdGdBdHRyTm9vcCI6Y2FzZSJQdGdTaGVldCI6Y2FzZSJQdGdFbmRTaGVldCI6Y2FzZSJQdGdNZW1GdW5jIjpjYXNlIlB0Z01lbU5vTWVtIjpicmVhaztjYXNlIlB0''@;'; put 'put ''Z1JlZiI6WWU9dGEoS3RbMV1bMV0scGUsUSkseWUucHVzaChWYShZZSxnZSkpO2JyZWFrO2Nhc2UiUHRnUmVmTiI6WWU9az90YShLdFsxXVsxXSxrLFEpOkt0WzFdWzFdLHllLnB1c2goVmEoWWUsZ2UpKTticmVhaztjYXNlIlB0Z1JlZjNkIjpldD1LdFsxXVsxXSxZZT10YShLdFsxXVsyXSxw''@;'; put 'put ''ZSxRKSxhdD1xQihHLGV0LFEpLHllLnB1c2goYXQrIiEiK1ZhKFllLGdlKSk7YnJlYWs7Y2FzZSJQdGdGdW5jIjpjYXNlIlB0Z0Z1bmNWYXIiOnZhciBycj1LdFsxXVswXSxTbj1LdFsxXVsxXTtycnx8KHJyPTApO3ZhciBscj0wPT0ocnImPTEyNyk/W106eWUuc2xpY2UoLXJyKTt5ZS5sZW5n''@;'; put 'put ''dGgtPXJyLCJVc2VyIj09PVNuJiYoU249bHIuc2hpZnQoKSkseWUucHVzaChTbisiKCIrbHIuam9pbigiLCIpKyIpIik7YnJlYWs7Y2FzZSJQdGdCb29sIjp5ZS5wdXNoKEt0WzFdPyJUUlVFIjoiRkFMU0UiKTticmVhaztjYXNlIlB0Z0ludCI6Y2FzZSJQdGdOdW0iOnllLnB1c2goU3RyaW5n''@;'; put 'put ''KEt0WzFdKSk7YnJlYWs7Y2FzZSJQdGdTdHIiOnllLnB1c2goJyInK0t0WzFdLnJlcGxhY2UoLyIvZywnIiInKSsnIicpO2JyZWFrO2Nhc2UiUHRnRXJyIjp5ZS5wdXNoKEt0WzFdKTticmVhaztjYXNlIlB0Z0FyZWFOIjpFdD1vYShLdFsxXVsxXSxrP3tzOmt9OnBlLFEpLHllLnB1c2goJG8o''@;'; put 'put ''RXQsUSkpO2JyZWFrO2Nhc2UiUHRnQXJlYSI6RXQ9b2EoS3RbMV1bMV0scGUsUSkseWUucHVzaCgkbyhFdCxRKSk7YnJlYWs7Y2FzZSJQdGdBcmVhM2QiOmV0PUt0WzFdWzFdLEV0PW9hKEt0WzFdWzJdLHBlLFEpLGF0PXFCKEcsZXQsUSkseWUucHVzaChhdCsiISIrJG8oRXQsUSkpO2JyZWFr''@;'; put 'put ''O2Nhc2UiUHRnQXR0clN1bSI6eWUucHVzaCgiU1VNKCIreWUucG9wKCkrIikiKTticmVhaztjYXNlIlB0Z05hbWUiOnZhciBYbj0oRy5uYW1lc3x8W10pWyhjdD1LdFsxXVsyXSktMV18fChHWzBdfHxbXSlbY3RdLEJuPVhuP1huLk5hbWU6IlNIMzNUSlNOQU1FIitTdHJpbmcoY3QpO0JuIGlu''@;'; put 'put ''IGFiJiYoQm49YWJbQm5dKSx5ZS5wdXNoKEJuKTticmVhaztjYXNlIlB0Z05hbWVYIjp2YXIgYnIsZnI9S3RbMV1bMV07aWYoY3Q9S3RbMV1bMl0sIShRLmJpZmY8PTUpKXt2YXIgZXI9IiI7aWYoMTQ4NDk9PSgoR1tmcl18fFtdKVswXXx8W10pWzBdfHwoMTAyNT09KChHW2ZyXXx8W10pWzBd''@;'; put 'put ''fHxbXSlbMF0/R1tmcl1bY3RdJiZHW2ZyXVtjdF0uaXRhYj4wJiYoZXI9Ry5TaGVldE5hbWVzW0dbZnJdW2N0XS5pdGFiLTFdKyIhIik6ZXI9Ry5TaGVldE5hbWVzW2N0LTFdKyIhIiksR1tmcl0mJkdbZnJdW2N0XSllcis9R1tmcl1bY3RdLk5hbWU7ZWxzZSBpZihHWzBdJiZHWzBdW2N0XSll''@;'; put 'put ''cis9R1swXVtjdF0uTmFtZTtlbHNle3ZhciBGaT0obEQoRyxmcixRKXx8IiIpLnNwbGl0KCI7OyIpO0ZpW2N0LTFdP2VyPUZpW2N0LTFdOmVyKz0iU0gzM1RKU0VSUlgifXllLnB1c2goZXIpO2JyZWFrfWZyPDAmJihmcj0tZnIpLEdbZnJdJiYoYnI9R1tmcl1bY3RdKSxicnx8KGJyPXtOYW1l''@;'; put 'put ''OiJTSDMzVEpTRVJSWSJ9KSx5ZS5wdXNoKGJyLk5hbWUpO2JyZWFrO2Nhc2UiUHRnUGFyZW4iOnZhciBuYT0iKCIsY2E9IikiO2lmKGJ0Pj0wKXtzd2l0Y2goanQ9IiIsU1swXVtidF1bMV1bMF0pe2Nhc2UgMjpuYT1jaSgiICIsU1swXVtidF1bMV1bMV0pK25hO2JyZWFrO2Nhc2UgMzpuYT1j''@;'; put 'put ''aSgiXHIiLFNbMF1bYnRdWzFdWzFdKStuYTticmVhaztjYXNlIDQ6Y2E9Y2koIiAiLFNbMF1bYnRdWzFdWzFdKStjYTticmVhaztjYXNlIDU6Y2E9Y2koIlxyIixTWzBdW2J0XVsxXVsxXSkrY2E7YnJlYWs7ZGVmYXVsdDppZihRLldURil0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgUHRn''@;'; put 'put ''QXR0clNwYWNlVHlwZSAiK1NbMF1bYnRdWzFdWzBdKX1idD0tMX15ZS5wdXNoKG5hK3llLnBvcCgpK2NhKTticmVhaztjYXNlIlB0Z1JlZkVyciI6Y2FzZSJQdGdBcmVhRXJyIjpjYXNlIlB0Z0FyZWFFcnIzZCI6Y2FzZSJQdGdSZWZFcnIzZCI6eWUucHVzaCgiI1JFRiEiKTticmVhaztjYXNl''@;'; put 'put ''IlB0Z0V4cCI6dmFyIGtyPXtjOmsuYyxyOmsucn07aWYoRy5zaGFyZWRmW3FpKFllPXtjOkt0WzFdWzFdLHI6S3RbMV1bMF19KV0pe3ZhciBWbj1HLnNoYXJlZGZbcWkoWWUpXTt5ZS5wdXNoKHMwKFZuLHBlLGtyLEcsUSkpfWVsc2V7dmFyIEJyPSExO2ZvcihQZT0wO1BlIT1HLmFycmF5Zi5s''@;'; put 'put ''ZW5ndGg7KytQZSlpZighKFllLmM8KE5lPUcuYXJyYXlmW1BlXSlbMF0ucy5jfHxZZS5jPk5lWzBdLmUuY3x8WWUucjxOZVswXS5zLnJ8fFllLnI+TmVbMF0uZS5yKSl7eWUucHVzaChzMChOZVsxXSxwZSxrcixHLFEpKSxCcj0hMDticmVha31Ccnx8eWUucHVzaChLdFsxXSl9YnJlYWs7Y2Fz''@;'; put 'put ''ZSJQdGdBcnJheSI6eWUucHVzaCgieyIrRjEoS3RbMV0pKyJ9Iik7YnJlYWs7Y2FzZSJQdGdBdHRyU3BhY2UiOmNhc2UiUHRnQXR0clNwYWNlU2VtaSI6YnQ9a3Q7YnJlYWs7Y2FzZSJQdGdNaXNzQXJnIjp5ZS5wdXNoKCIiKTticmVhaztjYXNlIlB0Z0xpc3QiOnllLnB1c2goIlRhYmxlIitL''@;'; put 'put ''dFsxXS5pZHgrIlsjIitLdFsxXS5ydCsiXSIpO2JyZWFrO2Nhc2UiUHRnRWxmQ29sIjpjYXNlIlB0Z0VsZkNvbFMiOmNhc2UiUHRnRWxmQ29sU1YiOmNhc2UiUHRnRWxmQ29sViI6Y2FzZSJQdGdFbGZMZWwiOmNhc2UiUHRnRWxmUmFkaWNhbCI6Y2FzZSJQdGdFbGZSYWRpY2FsTGVsIjpjYXNl''@;'; put 'put ''IlB0Z0VsZlJhZGljYWxTIjpjYXNlIlB0Z0VsZlJ3IjpjYXNlIlB0Z0VsZlJ3ViI6dGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBFTEZzIik7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCBGb3JtdWxhIFRva2VuOiAiK1N0cmluZyhLdCkpfWlmKDMhPVEuYmlmZiYm''@;'; put 'put ''YnQ+PTAmJi0xPT1bIlB0Z0F0dHJTcGFjZSIsIlB0Z0F0dHJTcGFjZVNlbWkiLCJQdGdBdHRyR290byJdLmluZGV4T2YoU1swXVtrdF1bMF0pKXt2YXIgRm49ITA7c3dpdGNoKChLdD1TWzBdW2J0XSlbMV1bMF0pe2Nhc2UgNDpGbj0hMTtjYXNlIDA6anQ9Y2koIiAiLEt0WzFdWzFdKTticmVh''@;'; put 'put ''aztjYXNlIDU6Rm49ITE7Y2FzZSAxOmp0PWNpKCJcciIsS3RbMV1bMV0pO2JyZWFrO2RlZmF1bHQ6aWYoanQ9IiIsUS5XVEYpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIFB0Z0F0dHJTcGFjZVR5cGUgIitLdFsxXVswXSl9eWUucHVzaCgoRm4/anQ6IiIpK3llLnBvcCgpKyhGbj8iIjpq''@;'; put 'put ''dCkpLGJ0PS0xfX1pZih5ZS5sZW5ndGg+MSYmUS5XVEYpdGhyb3cgbmV3IEVycm9yKCJiYWQgZm9ybXVsYSBzdGFjayIpO3JldHVybiB5ZVswXX1mdW5jdGlvbiBjRChTLFIsayl7dmFyIG9lLEc9Uy5sK1IsUT0yPT1rLmJpZmY/MToyLGdlPVMucmVhZF9zaGlmdChRKTtpZig2NTUzNT09Z2Up''@;'; put 'put ''cmV0dXJuW1tdLEluKFMsUi0yKV07dmFyIHBlPWxoKFMsZ2Usayk7cmV0dXJuIFIhPT1nZStRJiYob2U9QjQoUyxSLWdlLVEscGUsaykpLFMubD1HLFtwZSxvZV19ZnVuY3Rpb24gSzMoUyxSLGspe3ZhciBRLEc9Uy5sK1Isb2U9Uy5yZWFkX3NoaWZ0KDIpLGdlPWxoKFMsb2Usayk7cmV0dXJu''@;'; put 'put ''IDY1NTM1PT1vZT9bW10sSW4oUyxSLTIpXTooUiE9PW9lKzImJihRPUI0KFMsRy1vZS0yLGdlLGspKSxbZ2UsUV0pfWZ1bmN0aW9uIFFDKFMsUixrKXt2YXIgRz1TLmwrUixRPXcwKFMpOzI9PWsuYmlmZiYmKytTLmw7dmFyIG9lPWZ1bmN0aW9uIFhDKFMpe3ZhciBSO2lmKDY1NTM1IT09ZW8o''@;'; put 'put ''UyxTLmwrNikpcmV0dXJuW1BsKFMpLCJuIl07c3dpdGNoKFNbUy5sXSl7Y2FzZSAwOnJldHVybiBTLmwrPTgsWyJTdHJpbmciLCJzIl07Y2FzZSAxOnJldHVybiBSPTE9PT1TW1MubCsyXSxTLmwrPTgsW1IsImIiXTtjYXNlIDI6cmV0dXJuIFI9U1tTLmwrMl0sUy5sKz04LFtSLCJlIl07Y2Fz''@;'; put 'put ''ZSAzOnJldHVybiBTLmwrPTgsWyIiLCJzIl19cmV0dXJuW119KFMpLGdlPVMucmVhZF9zaGlmdCgxKTsyIT1rLmJpZmYmJihTLnJlYWRfc2hpZnQoMSksay5iaWZmPj01JiZTLnJlYWRfc2hpZnQoNCkpO3ZhciBwZT1mdW5jdGlvbiB1RChTLFIsayl7dmFyIG9lLEc9Uy5sK1IsUT0yPT1rLmJp''@;'; put 'put ''ZmY/MToyLGdlPVMucmVhZF9zaGlmdChRKTtpZig2NTUzNT09Z2UpcmV0dXJuW1tdLEluKFMsUi0yKV07dmFyIHBlPWxoKFMsZ2Usayk7cmV0dXJuIFIhPT1nZStRJiYob2U9QjQoUyxSLWdlLVEscGUsaykpLFMubD1HLFtwZSxvZV19KFMsRy1TLmwsayk7cmV0dXJue2NlbGw6USx2YWw6b2Vb''@;'; put 'put ''MF0sZm9ybXVsYTpwZSxzaGFyZWQ6Z2U+PjMmMSx0dDpvZVsxXX19ZnVuY3Rpb24gajQoUyxSLGspe3ZhciBHPVMucmVhZF9zaGlmdCg0KSxRPWxoKFMsRyxrKSxvZT1TLnJlYWRfc2hpZnQoNCk7cmV0dXJuW1Esb2U+MD9CNChTLG9lLFEsaywhMCk6bnVsbF19dmFyIGVTPWo0LHo0PWo0LGhE''@;'; put 'put ''PWo0LFhCPWZ1bmN0aW9uIGREKFMsUixrKXt2YXIgRz1TLnJlYWRfc2hpZnQoNCksUT1TLnJlYWRfc2hpZnQoNCksb2U9bGgoUyxHLGspO3JldHVybltvZSxRPjA/QjQoUyxRLG9lLGssITApOm51bGxdfSxmRD1qNCxKQj1qNDtmdW5jdGlvbiB0UyhTKXtpZigoMHxTKT09UyYmUzxNYXRoLnBv''@;'; put 'put ''dygyLDE2KSYmUz49MCl7dmFyIFI9Ym4oMTEpO3JldHVybiBSLndyaXRlX3NoaWZ0KDQsMyksUi53cml0ZV9zaGlmdCgxLDMwKSxSLndyaXRlX3NoaWZ0KDIsUyksUi53cml0ZV9zaGlmdCg0LDApLFJ9dmFyIGs9Ym4oMTcpO3JldHVybiBrLndyaXRlX3NoaWZ0KDQsMTEpLGsud3JpdGVfc2hp''@;'; put 'put ''ZnQoMSwzMSksay53cml0ZV9zaGlmdCg4LFMpLGsud3JpdGVfc2hpZnQoNCwwKSxrfWZ1bmN0aW9uIG5TKFMpe3ZhciBSPWJuKDcpO1Iud3JpdGVfc2hpZnQoNCwzKzIqUy5sZW5ndGgpLFIud3JpdGVfc2hpZnQoMSwyMyksUi53cml0ZV9zaGlmdCgyLFMubGVuZ3RoKTt2YXIgaz1ibigyKlMu''@;'; put 'put ''bGVuZ3RoKTtrLndyaXRlX3NoaWZ0KDIqUy5sZW5ndGgsUywidXRmMTZsZSIpO3ZhciBHPWJuKDQpO3JldHVybiBHLndyaXRlX3NoaWZ0KDQsMCksaihbUixrLEddKX1mdW5jdGlvbiBVNChTKXtpZihTLm1hdGNoKC9eIyhESVZcLzAhfEdFVFRJTkdfREFUQXxOXC9BfE5BTUVcP3xOVUxMIXxO''@;'; put 'put ''VU0hfFJFRiF8VkFMVUUhKSQvKSlyZXR1cm4gZnVuY3Rpb24gUUIoUyl7dmFyIFI9Ym4oMTApO3JldHVybiBSLndyaXRlX3NoaWZ0KDQsMiksUi53cml0ZV9zaGlmdCgxLDI4KSxSLndyaXRlX3NoaWZ0KDEsUyksUi53cml0ZV9zaGlmdCg0LDApLFJ9KCtQM1tTXSk7aWYoUy5tYXRjaCgvXlwk''@;'; put 'put ''Pyg/OltBLVddW0EtWl17Mn18WFtBLUVdW0EtWl18WEZbQS1EXXxbQS1aXXsxLDJ9KVwkPyg/OjEwWzAtM11cZHs0fXwxMDRbMC03XVxkezN9fDEwNDhbMC00XVxkezJ9fDEwNDg1WzAtNl1cZHwxMDQ4NTdbMC02XXxbMS05XVxkezAsNX0pJC8pKXJldHVybiBmdW5jdGlvbiBzOChTKXt2YXIg''@;'; put 'put ''Uj1ObyhTKSxrPWJuKDE1KTtyZXR1cm4gay53cml0ZV9zaGlmdCg0LDcpLGsud3JpdGVfc2hpZnQoMSwzNiksay53cml0ZV9zaGlmdCg0LFIuciksay53cml0ZV9zaGlmdCgyLFIuY3woIiQiPT1TLmNoYXJBdCgwKT8wOjEpPDwxNHwoUy5tYXRjaCgvXCRcZC8pPzA6MSk8PDE1KSxrLndyaXRl''@;'; put 'put ''X3NoaWZ0KDQsMCksa30oUyk7aWYoUy5tYXRjaCgvXiIuKiIkLykpcmV0dXJuIG5TKFMpO3Rocm93IkZvcm11bGEgfCIrUysifCBub3Qgc3VwcG9ydGVkIGZvciBYTFNCIn12YXIgclM9ezA6IkJFRVAiLDE6Ik9QRU4iLDI6Ik9QRU4uTElOS1MiLDM6IkNMT1NFLkFMTCIsNDoiU0FWRSIsNToi''@;'; put 'put ''U0FWRS5BUyIsNjoiRklMRS5ERUxFVEUiLDc6IlBBR0UuU0VUVVAiLDg6IlBSSU5UIiw5OiJQUklOVEVSLlNFVFVQIiwxMDoiUVVJVCIsMTE6Ik5FVy5XSU5ET1ciLDEyOiJBUlJBTkdFLkFMTCIsMTM6IldJTkRPVy5TSVpFIiwxNDoiV0lORE9XLk1PVkUiLDE1OiJGVUxMIiwxNjoiQ0xPU0Ui''@;'; put 'put ''LDE3OiJSVU4iLDIyOiJTRVQuUFJJTlQuQVJFQSIsMjM6IlNFVC5QUklOVC5USVRMRVMiLDI0OiJTRVQuUEFHRS5CUkVBSyIsMjU6IlJFTU9WRS5QQUdFLkJSRUFLIiwyNjoiRk9OVCIsMjc6IkRJU1BMQVkiLDI4OiJQUk9URUNULkRPQ1VNRU5UIiwyOToiUFJFQ0lTSU9OIiwzMDoiQTEuUjFD''@;'; put 'put ''MSIsMzE6IkNBTENVTEFURS5OT1ciLDMyOiJDQUxDVUxBVElPTiIsMzQ6IkRBVEEuRklORCIsMzU6IkVYVFJBQ1QiLDM2OiJEQVRBLkRFTEVURSIsMzc6IlNFVC5EQVRBQkFTRSIsMzg6IlNFVC5DUklURVJJQSIsMzk6IlNPUlQiLDQwOiJEQVRBLlNFUklFUyIsNDE6IlRBQkxFIiw0MjoiRk9S''@;'; put 'put ''TUFULk5VTUJFUiIsNDM6IkFMSUdOTUVOVCIsNDQ6IlNUWUxFIiw0NToiQk9SREVSIiw0NjoiQ0VMTC5QUk9URUNUSU9OIiw0NzoiQ09MVU1OLldJRFRIIiw0ODoiVU5ETyIsNDk6IkNVVCIsNTA6IkNPUFkiLDUxOiJQQVNURSIsNTI6IkNMRUFSIiw1MzoiUEFTVEUuU1BFQ0lBTCIsNTQ6IkVE''@;'; put 'put ''SVQuREVMRVRFIiw1NToiSU5TRVJUIiw1NjoiRklMTC5SSUdIVCIsNTc6IkZJTEwuRE9XTiIsNjE6IkRFRklORS5OQU1FIiw2MjoiQ1JFQVRFLk5BTUVTIiw2MzoiRk9STVVMQS5HT1RPIiw2NDoiRk9STVVMQS5GSU5EIiw2NToiU0VMRUNULkxBU1QuQ0VMTCIsNjY6IlNIT1cuQUNUSVZFLkNF''@;'; put 'put ''TEwiLDY3OiJHQUxMRVJZLkFSRUEiLDY4OiJHQUxMRVJZLkJBUiIsNjk6IkdBTExFUlkuQ09MVU1OIiw3MDoiR0FMTEVSWS5MSU5FIiw3MToiR0FMTEVSWS5QSUUiLDcyOiJHQUxMRVJZLlNDQVRURVIiLDczOiJDT01CSU5BVElPTiIsNzQ6IlBSRUZFUlJFRCIsNzU6IkFERC5PVkVSTEFZIiw3''@;'; put 'put ''NjoiR1JJRExJTkVTIiw3NzoiU0VULlBSRUZFUlJFRCIsNzg6IkFYRVMiLDc5OiJMRUdFTkQiLDgwOiJBVFRBQ0guVEVYVCIsODE6IkFERC5BUlJPVyIsODI6IlNFTEVDVC5DSEFSVCIsODM6IlNFTEVDVC5QTE9ULkFSRUEiLDg0OiJQQVRURVJOUyIsODU6Ik1BSU4uQ0hBUlQiLDg2OiJPVkVS''@;'; put 'put ''TEFZIiw4NzoiU0NBTEUiLDg4OiJGT1JNQVQuTEVHRU5EIiw4OToiRk9STUFULlRFWFQiLDkwOiJFRElULlJFUEVBVCIsOTE6IlBBUlNFIiw5MjoiSlVTVElGWSIsOTM6IkhJREUiLDk0OiJVTkhJREUiLDk1OiJXT1JLU1BBQ0UiLDk2OiJGT1JNVUxBIiw5NzoiRk9STVVMQS5GSUxMIiw5ODoi''@;'; put 'put ''Rk9STVVMQS5BUlJBWSIsOTk6IkRBVEEuRklORC5ORVhUIiwxMDA6IkRBVEEuRklORC5QUkVWIiwxMDE6IkZPUk1VTEEuRklORC5ORVhUIiwxMDI6IkZPUk1VTEEuRklORC5QUkVWIiwxMDM6IkFDVElWQVRFIiwxMDQ6IkFDVElWQVRFLk5FWFQiLDEwNToiQUNUSVZBVEUuUFJFViIsMTA2OiJV''@;'; put 'put ''TkxPQ0tFRC5ORVhUIiwxMDc6IlVOTE9DS0VELlBSRVYiLDEwODoiQ09QWS5QSUNUVVJFIiwxMDk6IlNFTEVDVCIsMTEwOiJERUxFVEUuTkFNRSIsMTExOiJERUxFVEUuRk9STUFUIiwxMTI6IlZMSU5FIiwxMTM6IkhMSU5FIiwxMTQ6IlZQQUdFIiwxMTU6IkhQQUdFIiwxMTY6IlZTQ1JPTEwi''@;'; put 'put ''LDExNzoiSFNDUk9MTCIsMTE4OiJBTEVSVCIsMTE5OiJORVciLDEyMDoiQ0FOQ0VMLkNPUFkiLDEyMToiU0hPVy5DTElQQk9BUkQiLDEyMjoiTUVTU0FHRSIsMTI0OiJQQVNURS5MSU5LIiwxMjU6IkFQUC5BQ1RJVkFURSIsMTI2OiJERUxFVEUuQVJST1ciLDEyNzoiUk9XLkhFSUdIVCIsMTI4''@;'; put 'put ''OiJGT1JNQVQuTU9WRSIsMTI5OiJGT1JNQVQuU0laRSIsMTMwOiJGT1JNVUxBLlJFUExBQ0UiLDEzMToiU0VORC5LRVlTIiwxMzI6IlNFTEVDVC5TUEVDSUFMIiwxMzM6IkFQUExZLk5BTUVTIiwxMzQ6IlJFUExBQ0UuRk9OVCIsMTM1OiJGUkVFWkUuUEFORVMiLDEzNjoiU0hPVy5JTkZPIiwx''@;'; put 'put ''Mzc6IlNQTElUIiwxMzg6Ik9OLldJTkRPVyIsMTM5OiJPTi5EQVRBIiwxNDA6IkRJU0FCTEUuSU5QVVQiLDE0MjoiT1VUTElORSIsMTQzOiJMSVNULk5BTUVTIiwxNDQ6IkZJTEUuQ0xPU0UiLDE0NToiU0FWRS5XT1JLQk9PSyIsMTQ2OiJEQVRBLkZPUk0iLDE0NzoiQ09QWS5DSEFSVCIsMTQ4''@;'; put 'put ''OiJPTi5USU1FIiwxNDk6IldBSVQiLDE1MDoiRk9STUFULkZPTlQiLDE1MToiRklMTC5VUCIsMTUyOiJGSUxMLkxFRlQiLDE1MzoiREVMRVRFLk9WRVJMQVkiLDE1NToiU0hPUlQuTUVOVVMiLDE1OToiU0VULlVQREFURS5TVEFUVVMiLDE2MToiQ09MT1IuUEFMRVRURSIsMTYyOiJERUxFVEUu''@;'; put 'put ''U1RZTEUiLDE2MzoiV0lORE9XLlJFU1RPUkUiLDE2NDoiV0lORE9XLk1BWElNSVpFIiwxNjY6IkNIQU5HRS5MSU5LIiwxNjc6IkNBTENVTEFURS5ET0NVTUVOVCIsMTY4OiJPTi5LRVkiLDE2OToiQVBQLlJFU1RPUkUiLDE3MDoiQVBQLk1PVkUiLDE3MToiQVBQLlNJWkUiLDE3MjoiQVBQLk1J''@;'; put 'put ''TklNSVpFIiwxNzM6IkFQUC5NQVhJTUlaRSIsMTc0OiJCUklORy5UTy5GUk9OVCIsMTc1OiJTRU5ELlRPLkJBQ0siLDE4NToiTUFJTi5DSEFSVC5UWVBFIiwxODY6Ik9WRVJMQVkuQ0hBUlQuVFlQRSIsMTg3OiJTRUxFQ1QuRU5EIiwxODg6Ik9QRU4uTUFJTCIsMTg5OiJTRU5ELk1BSUwiLDE5''@;'; put 'put ''MDoiU1RBTkRBUkQuRk9OVCIsMTkxOiJDT05TT0xJREFURSIsMTkyOiJTT1JULlNQRUNJQUwiLDE5MzoiR0FMTEVSWS4zRC5BUkVBIiwxOTQ6IkdBTExFUlkuM0QuQ09MVU1OIiwxOTU6IkdBTExFUlkuM0QuTElORSIsMTk2OiJHQUxMRVJZLjNELlBJRSIsMTk3OiJWSUVXLjNEIiwxOTg6IkdP''@;'; put 'put ''QUwuU0VFSyIsMTk5OiJXT1JLR1JPVVAiLDIwMDoiRklMTC5HUk9VUCIsMjAxOiJVUERBVEUuTElOSyIsMjAyOiJQUk9NT1RFIiwyMDM6IkRFTU9URSIsMjA0OiJTSE9XLkRFVEFJTCIsMjA2OiJVTkdST1VQIiwyMDc6Ik9CSkVDVC5QUk9QRVJUSUVTIiwyMDg6IlNBVkUuTkVXLk9CSkVDVCIs''@;'; put 'put ''MjA5OiJTSEFSRSIsMjEwOiJTSEFSRS5OQU1FIiwyMTE6IkRVUExJQ0FURSIsMjEyOiJBUFBMWS5TVFlMRSIsMjEzOiJBU1NJR04uVE8uT0JKRUNUIiwyMTQ6Ik9CSkVDVC5QUk9URUNUSU9OIiwyMTU6IkhJREUuT0JKRUNUIiwyMTY6IlNFVC5FWFRSQUNUIiwyMTc6IkNSRUFURS5QVUJMSVNI''@;'; put 'put ''RVIiLDIxODoiU1VCU0NSSUJFLlRPIiwyMTk6IkFUVFJJQlVURVMiLDIyMDoiU0hPVy5UT09MQkFSIiwyMjI6IlBSSU5ULlBSRVZJRVciLDIyMzoiRURJVC5DT0xPUiIsMjI0OiJTSE9XLkxFVkVMUyIsMjI1OiJGT1JNQVQuTUFJTiIsMjI2OiJGT1JNQVQuT1ZFUkxBWSIsMjI3OiJPTi5SRUNB''@;'; put 'put ''TEMiLDIyODoiRURJVC5TRVJJRVMiLDIyOToiREVGSU5FLlNUWUxFIiwyNDA6IkxJTkUuUFJJTlQiLDI0MzoiRU5URVIuREFUQSIsMjQ5OiJHQUxMRVJZLlJBREFSIiwyNTA6Ik1FUkdFLlNUWUxFUyIsMjUxOiJFRElUSU9OLk9QVElPTlMiLDI1MjoiUEFTVEUuUElDVFVSRSIsMjUzOiJQQVNU''@;'; put 'put ''RS5QSUNUVVJFLkxJTksiLDI1NDoiU1BFTExJTkciLDI1NjoiWk9PTSIsMjU5OiJJTlNFUlQuT0JKRUNUIiwyNjA6IldJTkRPVy5NSU5JTUlaRSIsMjY1OiJTT1VORC5OT1RFIiwyNjY6IlNPVU5ELlBMQVkiLDI2NzoiRk9STUFULlNIQVBFIiwyNjg6IkVYVEVORC5QT0xZR09OIiwyNjk6IkZP''@;'; put 'put ''Uk1BVC5BVVRPIiwyNzI6IkdBTExFUlkuM0QuQkFSIiwyNzM6IkdBTExFUlkuM0QuU1VSRkFDRSIsMjc0OiJGSUxMLkFVVE8iLDI3NjoiQ1VTVE9NSVpFLlRPT0xCQVIiLDI3NzoiQURELlRPT0wiLDI3ODoiRURJVC5PQkpFQ1QiLDI3OToiT04uRE9VQkxFQ0xJQ0siLDI4MDoiT04uRU5UUlki''@;'; put 'put ''LDI4MToiV09SS0JPT0suQUREIiwyODI6IldPUktCT09LLk1PVkUiLDI4MzoiV09SS0JPT0suQ09QWSIsMjg0OiJXT1JLQk9PSy5PUFRJT05TIiwyODU6IlNBVkUuV09SS1NQQUNFIiwyODg6IkNIQVJULldJWkFSRCIsMjg5OiJERUxFVEUuVE9PTCIsMjkwOiJNT1ZFLlRPT0wiLDI5MToiV09S''@;'; put 'put ''S0JPT0suU0VMRUNUIiwyOTI6IldPUktCT09LLkFDVElWQVRFIiwyOTM6IkFTU0lHTi5UTy5UT09MIiwyOTU6IkNPUFkuVE9PTCIsMjk2OiJSRVNFVC5UT09MIiwyOTc6IkNPTlNUUkFJTi5OVU1FUklDIiwyOTg6IlBBU1RFLlRPT0wiLDMwMjoiV09SS0JPT0suTkVXIiwzMDU6IlNDRU5BUklP''@;'; put 'put ''LkNFTExTIiwzMDY6IlNDRU5BUklPLkRFTEVURSIsMzA3OiJTQ0VOQVJJTy5BREQiLDMwODoiU0NFTkFSSU8uRURJVCIsMzA5OiJTQ0VOQVJJTy5TSE9XIiwzMTA6IlNDRU5BUklPLlNIT1cuTkVYVCIsMzExOiJTQ0VOQVJJTy5TVU1NQVJZIiwzMTI6IlBJVk9ULlRBQkxFLldJWkFSRCIsMzEz''@;'; put 'put ''OiJQSVZPVC5GSUVMRC5QUk9QRVJUSUVTIiwzMTQ6IlBJVk9ULkZJRUxEIiwzMTU6IlBJVk9ULklURU0iLDMxNjoiUElWT1QuQURELkZJRUxEUyIsMzE4OiJPUFRJT05TLkNBTENVTEFUSU9OIiwzMTk6Ik9QVElPTlMuRURJVCIsMzIwOiJPUFRJT05TLlZJRVciLDMyMToiQURESU4uTUFOQUdF''@;'; put 'put ''UiIsMzIyOiJNRU5VLkVESVRPUiIsMzIzOiJBVFRBQ0guVE9PTEJBUlMiLDMyNDoiVkJBQWN0aXZhdGUiLDMyNToiT1BUSU9OUy5DSEFSVCIsMzI4OiJWQkEuSU5TRVJULkZJTEUiLDMzMDoiVkJBLlBST0NFRFVSRS5ERUZJTklUSU9OIiwzMzY6IlJPVVRJTkcuU0xJUCIsMzM4OiJST1VURS5E''@;'; put 'put ''T0NVTUVOVCIsMzM5OiJNQUlMLkxPR09OIiwzNDI6IklOU0VSVC5QSUNUVVJFIiwzNDM6IkVESVQuVE9PTCIsMzQ0OiJHQUxMRVJZLkRPVUdITlVUIiwzNTA6IkNIQVJULlRSRU5EIiwzNTI6IlBJVk9ULklURU0uUFJPUEVSVElFUyIsMzU0OiJXT1JLQk9PSy5JTlNFUlQiLDM1NToiT1BUSU9O''@;'; put 'put ''Uy5UUkFOU0lUSU9OIiwzNTY6Ik9QVElPTlMuR0VORVJBTCIsMzcwOiJGSUxURVIuQURWQU5DRUQiLDM3MzoiTUFJTC5BREQuTUFJTEVSIiwzNzQ6Ik1BSUwuREVMRVRFLk1BSUxFUiIsMzc1OiJNQUlMLlJFUExZIiwzNzY6Ik1BSUwuUkVQTFkuQUxMIiwzNzc6Ik1BSUwuRk9SV0FSRCIsMzc4''@;'; put 'put ''OiJNQUlMLk5FWFQuTEVUVEVSIiwzNzk6IkRBVEEuTEFCRUwiLDM4MDoiSU5TRVJULlRJVExFIiwzODE6IkZPTlQuUFJPUEVSVElFUyIsMzgyOiJNQUNSTy5PUFRJT05TIiwzODM6IldPUktCT09LLkhJREUiLDM4NDoiV09SS0JPT0suVU5ISURFIiwzODU6IldPUktCT09LLkRFTEVURSIsMzg2''@;'; put 'put ''OiJXT1JLQk9PSy5OQU1FIiwzODg6IkdBTExFUlkuQ1VTVE9NIiwzOTA6IkFERC5DSEFSVC5BVVRPRk9STUFUIiwzOTE6IkRFTEVURS5DSEFSVC5BVVRPRk9STUFUIiwzOTI6IkNIQVJULkFERC5EQVRBIiwzOTM6IkFVVE8uT1VUTElORSIsMzk0OiJUQUIuT1JERVIiLDM5NToiU0hPVy5ESUFM''@;'; put 'put ''T0ciLDM5NjoiU0VMRUNULkFMTCIsMzk3OiJVTkdST1VQLlNIRUVUUyIsMzk4OiJTVUJUT1RBTC5DUkVBVEUiLDM5OToiU1VCVE9UQUwuUkVNT1ZFIiw0MDA6IlJFTkFNRS5PQkpFQ1QiLDQxMjoiV09SS0JPT0suU0NST0xMIiw0MTM6IldPUktCT09LLk5FWFQiLDQxNDoiV09SS0JPT0suUFJF''@;'; put 'put ''ViIsNDE1OiJXT1JLQk9PSy5UQUIuU1BMSVQiLDQxNjoiRlVMTC5TQ1JFRU4iLDQxNzoiV09SS0JPT0suUFJPVEVDVCIsNDIwOiJTQ1JPTExCQVIuUFJPUEVSVElFUyIsNDIxOiJQSVZPVC5TSE9XLlBBR0VTIiw0MjI6IlRFWFQuVE8uQ09MVU1OUyIsNDIzOiJGT1JNQVQuQ0hBUlRUWVBFIiw0''@;'; put 'put ''MjQ6IkxJTksuRk9STUFUIiw0MjU6IlRSQUNFUi5ESVNQTEFZIiw0MzA6IlRSQUNFUi5OQVZJR0FURSIsNDMxOiJUUkFDRVIuQ0xFQVIiLDQzMjoiVFJBQ0VSLkVSUk9SIiw0MzM6IlBJVk9ULkZJRUxELkdST1VQIiw0MzQ6IlBJVk9ULkZJRUxELlVOR1JPVVAiLDQzNToiQ0hFQ0tCT1guUFJP''@;'; put 'put ''UEVSVElFUyIsNDM2OiJMQUJFTC5QUk9QRVJUSUVTIiw0Mzc6IkxJU1RCT1guUFJPUEVSVElFUyIsNDM4OiJFRElUQk9YLlBST1BFUlRJRVMiLDQzOToiUElWT1QuUkVGUkVTSCIsNDQwOiJMSU5LLkNPTUJPIiw0NDE6Ik9QRU4uVEVYVCIsNDQyOiJISURFLkRJQUxPRyIsNDQzOiJTRVQuRElB''@;'; put 'put ''TE9HLkZPQ1VTIiw0NDQ6IkVOQUJMRS5PQkpFQ1QiLDQ0NToiUFVTSEJVVFRPTi5QUk9QRVJUSUVTIiw0NDY6IlNFVC5ESUFMT0cuREVGQVVMVCIsNDQ3OiJGSUxURVIiLDQ0ODoiRklMVEVSLlNIT1cuQUxMIiw0NDk6IkNMRUFSLk9VVExJTkUiLDQ1MDoiRlVOQ1RJT04uV0laQVJEIiw0NTE6''@;'; put 'put ''IkFERC5MSVNULklURU0iLDQ1MjoiU0VULkxJU1QuSVRFTSIsNDUzOiJSRU1PVkUuTElTVC5JVEVNIiw0NTQ6IlNFTEVDVC5MSVNULklURU0iLDQ1NToiU0VULkNPTlRST0wuVkFMVUUiLDQ1NjoiU0FWRS5DT1BZLkFTIiw0NTg6Ik9QVElPTlMuTElTVFMuQUREIiw0NTk6Ik9QVElPTlMuTElT''@;'; put 'put ''VFMuREVMRVRFIiw0NjA6IlNFUklFUy5BWEVTIiw0NjE6IlNFUklFUy5YIiw0NjI6IlNFUklFUy5ZIiw0NjM6IkVSUk9SQkFSLlgiLDQ2NDoiRVJST1JCQVIuWSIsNDY1OiJGT1JNQVQuQ0hBUlQiLDQ2NjoiU0VSSUVTLk9SREVSIiw0Njc6Ik1BSUwuTE9HT0ZGIiw0Njg6IkNMRUFSLlJPVVRJ''@;'; put 'put ''TkcuU0xJUCIsNDY5OiJBUFAuQUNUSVZBVEUuTUlDUk9TT0ZUIiw0NzA6Ik1BSUwuRURJVC5NQUlMRVIiLDQ3MToiT04uU0hFRVQiLDQ3MjoiU1RBTkRBUkQuV0lEVEgiLDQ3MzoiU0NFTkFSSU8uTUVSR0UiLDQ3NDoiU1VNTUFSWS5JTkZPIiw0NzU6IkZJTkQuRklMRSIsNDc2OiJBQ1RJVkUu''@;'; put 'put ''Q0VMTC5GT05UIiw0Nzc6IkVOQUJMRS5USVBXSVpBUkQiLDQ3ODoiVkJBLk1BS0UuQURESU4iLDQ4MDoiSU5TRVJUREFUQVRBQkxFIiw0ODE6IldPUktHUk9VUC5PUFRJT05TIiw0ODI6Ik1BSUwuU0VORC5NQUlMRVIiLDQ4NToiQVVUT0NPUlJFQ1QiLDQ4OToiUE9TVC5ET0NVTUVOVCIsNDkx''@;'; put 'put ''OiJQSUNLTElTVCIsNDkzOiJWSUVXLlNIT1ciLDQ5NDoiVklFVy5ERUZJTkUiLDQ5NToiVklFVy5ERUxFVEUiLDUwOToiU0hFRVQuQkFDS0dST1VORCIsNTEwOiJJTlNFUlQuTUFQLk9CSkVDVCIsNTExOiJPUFRJT05TLk1FTk9OTyIsNTE3OiJNU09DSEVDS1MiLDUxODoiTk9STUFMIiw1MTk6''@;'; put 'put ''IkxBWU9VVCIsNTIwOiJSTS5QUklOVC5BUkVBIiw1MjE6IkNMRUFSLlBSSU5ULkFSRUEiLDUyMjoiQURELlBSSU5ULkFSRUEiLDUyMzoiTU9WRS5CUksiLDU0NToiSElERUNVUlIuTk9URSIsNTQ2OiJISURFQUxMLk5PVEVTIiw1NDc6IkRFTEVURS5OT1RFIiw1NDg6IlRSQVZFUlNFLk5PVEVT''@;'; put 'put ''Iiw1NDk6IkFDVElWQVRFLk5PVEVTIiw2MjA6IlBST1RFQ1QuUkVWSVNJT05TIiw2MjE6IlVOUFJPVEVDVC5SRVZJU0lPTlMiLDY0NzoiT1BUSU9OUy5NRSIsNjUzOiJXRUIuUFVCTElTSCIsNjY3OiJORVdXRUJRVUVSWSIsNjczOiJQSVZPVC5UQUJMRS5DSEFSVCIsNzUzOiJPUFRJT05TLlNB''@;'; put 'put ''VkUiLDc1NToiT1BUSU9OUy5TUEVMTCIsODA4OiJISURFQUxMLklOS0FOTk9UUyJ9LHBEPXswOiJDT1VOVCIsMToiSUYiLDI6IklTTkEiLDM6IklTRVJST1IiLDQ6IlNVTSIsNToiQVZFUkFHRSIsNjoiTUlOIiw3OiJNQVgiLDg6IlJPVyIsOToiQ09MVU1OIiwxMDoiTkEiLDExOiJOUFYiLDEy''@;'; put 'put ''OiJTVERFViIsMTM6IkRPTExBUiIsMTQ6IkZJWEVEIiwxNToiU0lOIiwxNjoiQ09TIiwxNzoiVEFOIiwxODoiQVRBTiIsMTk6IlBJIiwyMDoiU1FSVCIsMjE6IkVYUCIsMjI6IkxOIiwyMzoiTE9HMTAiLDI0OiJBQlMiLDI1OiJJTlQiLDI2OiJTSUdOIiwyNzoiUk9VTkQiLDI4OiJMT09LVVAi''@;'; put 'put ''LDI5OiJJTkRFWCIsMzA6IlJFUFQiLDMxOiJNSUQiLDMyOiJMRU4iLDMzOiJWQUxVRSIsMzQ6IlRSVUUiLDM1OiJGQUxTRSIsMzY6IkFORCIsMzc6Ik9SIiwzODoiTk9UIiwzOToiTU9EIiw0MDoiRENPVU5UIiw0MToiRFNVTSIsNDI6IkRBVkVSQUdFIiw0MzoiRE1JTiIsNDQ6IkRNQVgiLDQ1''@;'; put 'put ''OiJEU1RERVYiLDQ2OiJWQVIiLDQ3OiJEVkFSIiw0ODoiVEVYVCIsNDk6IkxJTkVTVCIsNTA6IlRSRU5EIiw1MToiTE9HRVNUIiw1MjoiR1JPV1RIIiw1MzoiR09UTyIsNTQ6IkhBTFQiLDU1OiJSRVRVUk4iLDU2OiJQViIsNTc6IkZWIiw1ODoiTlBFUiIsNTk6IlBNVCIsNjA6IlJBVEUiLDYx''@;'; put 'put ''OiJNSVJSIiw2MjoiSVJSIiw2MzoiUkFORCIsNjQ6Ik1BVENIIiw2NToiREFURSIsNjY6IlRJTUUiLDY3OiJEQVkiLDY4OiJNT05USCIsNjk6IllFQVIiLDcwOiJXRUVLREFZIiw3MToiSE9VUiIsNzI6Ik1JTlVURSIsNzM6IlNFQ09ORCIsNzQ6Ik5PVyIsNzU6IkFSRUFTIiw3NjoiUk9XUyIs''@;'; put 'put ''Nzc6IkNPTFVNTlMiLDc4OiJPRkZTRVQiLDc5OiJBQlNSRUYiLDgwOiJSRUxSRUYiLDgxOiJBUkdVTUVOVCIsODI6IlNFQVJDSCIsODM6IlRSQU5TUE9TRSIsODQ6IkVSUk9SIiw4NToiU1RFUCIsODY6IlRZUEUiLDg3OiJFQ0hPIiw4ODoiU0VULk5BTUUiLDg5OiJDQUxMRVIiLDkwOiJERVJF''@;'; put 'put ''RiIsOTE6IldJTkRPV1MiLDkyOiJTRVJJRVMiLDkzOiJET0NVTUVOVFMiLDk0OiJBQ1RJVkUuQ0VMTCIsOTU6IlNFTEVDVElPTiIsOTY6IlJFU1VMVCIsOTc6IkFUQU4yIiw5ODoiQVNJTiIsOTk6IkFDT1MiLDEwMDoiQ0hPT1NFIiwxMDE6IkhMT09LVVAiLDEwMjoiVkxPT0tVUCIsMTAzOiJM''@;'; put 'put ''SU5LUyIsMTA0OiJJTlBVVCIsMTA1OiJJU1JFRiIsMTA2OiJHRVQuRk9STVVMQSIsMTA3OiJHRVQuTkFNRSIsMTA4OiJTRVQuVkFMVUUiLDEwOToiTE9HIiwxMTA6IkVYRUMiLDExMToiQ0hBUiIsMTEyOiJMT1dFUiIsMTEzOiJVUFBFUiIsMTE0OiJQUk9QRVIiLDExNToiTEVGVCIsMTE2OiJS''@;'; put 'put ''SUdIVCIsMTE3OiJFWEFDVCIsMTE4OiJUUklNIiwxMTk6IlJFUExBQ0UiLDEyMDoiU1VCU1RJVFVURSIsMTIxOiJDT0RFIiwxMjI6Ik5BTUVTIiwxMjM6IkRJUkVDVE9SWSIsMTI0OiJGSU5EIiwxMjU6IkNFTEwiLDEyNjoiSVNFUlIiLDEyNzoiSVNURVhUIiwxMjg6IklTTlVNQkVSIiwxMjk6''@;'; put 'put ''IklTQkxBTksiLDEzMDoiVCIsMTMxOiJOIiwxMzI6IkZPUEVOIiwxMzM6IkZDTE9TRSIsMTM0OiJGU0laRSIsMTM1OiJGUkVBRExOIiwxMzY6IkZSRUFEIiwxMzc6IkZXUklURUxOIiwxMzg6IkZXUklURSIsMTM5OiJGUE9TIiwxNDA6IkRBVEVWQUxVRSIsMTQxOiJUSU1FVkFMVUUiLDE0Mjoi''@;'; put 'put ''U0xOIiwxNDM6IlNZRCIsMTQ0OiJEREIiLDE0NToiR0VULkRFRiIsMTQ2OiJSRUZURVhUIiwxNDc6IlRFWFRSRUYiLDE0ODoiSU5ESVJFQ1QiLDE0OToiUkVHSVNURVIiLDE1MDoiQ0FMTCIsMTUxOiJBREQuQkFSIiwxNTI6IkFERC5NRU5VIiwxNTM6IkFERC5DT01NQU5EIiwxNTQ6IkVOQUJM''@;'; put 'put ''RS5DT01NQU5EIiwxNTU6IkNIRUNLLkNPTU1BTkQiLDE1NjoiUkVOQU1FLkNPTU1BTkQiLDE1NzoiU0hPVy5CQVIiLDE1ODoiREVMRVRFLk1FTlUiLDE1OToiREVMRVRFLkNPTU1BTkQiLDE2MDoiR0VULkNIQVJULklURU0iLDE2MToiRElBTE9HLkJPWCIsMTYyOiJDTEVBTiIsMTYzOiJNREVU''@;'; put 'put ''RVJNIiwxNjQ6Ik1JTlZFUlNFIiwxNjU6Ik1NVUxUIiwxNjY6IkZJTEVTIiwxNjc6IklQTVQiLDE2ODoiUFBNVCIsMTY5OiJDT1VOVEEiLDE3MDoiQ0FOQ0VMLktFWSIsMTcxOiJGT1IiLDE3MjoiV0hJTEUiLDE3MzoiQlJFQUsiLDE3NDoiTkVYVCIsMTc1OiJJTklUSUFURSIsMTc2OiJSRVFV''@;'; put 'put ''RVNUIiwxNzc6IlBPS0UiLDE3ODoiRVhFQ1VURSIsMTc5OiJURVJNSU5BVEUiLDE4MDoiUkVTVEFSVCIsMTgxOiJIRUxQIiwxODI6IkdFVC5CQVIiLDE4MzoiUFJPRFVDVCIsMTg0OiJGQUNUIiwxODU6IkdFVC5DRUxMIiwxODY6IkdFVC5XT1JLU1BBQ0UiLDE4NzoiR0VULldJTkRPVyIsMTg4''@;'; put 'put ''OiJHRVQuRE9DVU1FTlQiLDE4OToiRFBST0RVQ1QiLDE5MDoiSVNOT05URVhUIiwxOTE6IkdFVC5OT1RFIiwxOTI6Ik5PVEUiLDE5MzoiU1RERVZQIiwxOTQ6IlZBUlAiLDE5NToiRFNUREVWUCIsMTk2OiJEVkFSUCIsMTk3OiJUUlVOQyIsMTk4OiJJU0xPR0lDQUwiLDE5OToiRENPVU5UQSIs''@;'; put 'put ''MjAwOiJERUxFVEUuQkFSIiwyMDE6IlVOUkVHSVNURVIiLDIwNDoiVVNET0xMQVIiLDIwNToiRklOREIiLDIwNjoiU0VBUkNIQiIsMjA3OiJSRVBMQUNFQiIsMjA4OiJMRUZUQiIsMjA5OiJSSUdIVEIiLDIxMDoiTUlEQiIsMjExOiJMRU5CIiwyMTI6IlJPVU5EVVAiLDIxMzoiUk9VTkRET1dO''@;'; put 'put ''IiwyMTQ6IkFTQyIsMjE1OiJEQkNTIiwyMTY6IlJBTksiLDIxOToiQUREUkVTUyIsMjIwOiJEQVlTMzYwIiwyMjE6IlRPREFZIiwyMjI6IlZEQiIsMjIzOiJFTFNFIiwyMjQ6IkVMU0UuSUYiLDIyNToiRU5ELklGIiwyMjY6IkZPUi5DRUxMIiwyMjc6Ik1FRElBTiIsMjI4OiJTVU1QUk9EVUNU''@;'; put 'put ''IiwyMjk6IlNJTkgiLDIzMDoiQ09TSCIsMjMxOiJUQU5IIiwyMzI6IkFTSU5IIiwyMzM6IkFDT1NIIiwyMzQ6IkFUQU5IIiwyMzU6IkRHRVQiLDIzNjoiQ1JFQVRFLk9CSkVDVCIsMjM3OiJWT0xBVElMRSIsMjM4OiJMQVNULkVSUk9SIiwyMzk6IkNVU1RPTS5VTkRPIiwyNDA6IkNVU1RPTS5S''@;'; put 'put ''RVBFQVQiLDI0MToiRk9STVVMQS5DT05WRVJUIiwyNDI6IkdFVC5MSU5LLklORk8iLDI0MzoiVEVYVC5CT1giLDI0NDoiSU5GTyIsMjQ1OiJHUk9VUCIsMjQ2OiJHRVQuT0JKRUNUIiwyNDc6IkRCIiwyNDg6IlBBVVNFIiwyNTE6IlJFU1VNRSIsMjUyOiJGUkVRVUVOQ1kiLDI1MzoiQURELlRP''@;'; put 'put ''T0xCQVIiLDI1NDoiREVMRVRFLlRPT0xCQVIiLDI1NToiVXNlciIsMjU2OiJSRVNFVC5UT09MQkFSIiwyNTc6IkVWQUxVQVRFIiwyNTg6IkdFVC5UT09MQkFSIiwyNTk6IkdFVC5UT09MIiwyNjA6IlNQRUxMSU5HLkNIRUNLIiwyNjE6IkVSUk9SLlRZUEUiLDI2MjoiQVBQLlRJVExFIiwyNjM6''@;'; put 'put ''IldJTkRPVy5USVRMRSIsMjY0OiJTQVZFLlRPT0xCQVIiLDI2NToiRU5BQkxFLlRPT0wiLDI2NjoiUFJFU1MuVE9PTCIsMjY3OiJSRUdJU1RFUi5JRCIsMjY4OiJHRVQuV09SS0JPT0siLDI2OToiQVZFREVWIiwyNzA6IkJFVEFESVNUIiwyNzE6IkdBTU1BTE4iLDI3MjoiQkVUQUlOViIsMjcz''@;'; put 'put ''OiJCSU5PTURJU1QiLDI3NDoiQ0hJRElTVCIsMjc1OiJDSElJTlYiLDI3NjoiQ09NQklOIiwyNzc6IkNPTkZJREVOQ0UiLDI3ODoiQ1JJVEJJTk9NIiwyNzk6IkVWRU4iLDI4MDoiRVhQT05ESVNUIiwyODE6IkZESVNUIiwyODI6IkZJTlYiLDI4MzoiRklTSEVSIiwyODQ6IkZJU0hFUklOViIs''@;'; put 'put ''Mjg1OiJGTE9PUiIsMjg2OiJHQU1NQURJU1QiLDI4NzoiR0FNTUFJTlYiLDI4ODoiQ0VJTElORyIsMjg5OiJIWVBHRU9NRElTVCIsMjkwOiJMT0dOT1JNRElTVCIsMjkxOiJMT0dJTlYiLDI5MjoiTkVHQklOT01ESVNUIiwyOTM6Ik5PUk1ESVNUIiwyOTQ6Ik5PUk1TRElTVCIsMjk1OiJOT1JN''@;'; put 'put ''SU5WIiwyOTY6Ik5PUk1TSU5WIiwyOTc6IlNUQU5EQVJESVpFIiwyOTg6Ik9ERCIsMjk5OiJQRVJNVVQiLDMwMDoiUE9JU1NPTiIsMzAxOiJURElTVCIsMzAyOiJXRUlCVUxMIiwzMDM6IlNVTVhNWTIiLDMwNDoiU1VNWDJNWTIiLDMwNToiU1VNWDJQWTIiLDMwNjoiQ0hJVEVTVCIsMzA3OiJD''@;'; put 'put ''T1JSRUwiLDMwODoiQ09WQVIiLDMwOToiRk9SRUNBU1QiLDMxMDoiRlRFU1QiLDMxMToiSU5URVJDRVBUIiwzMTI6IlBFQVJTT04iLDMxMzoiUlNRIiwzMTQ6IlNURVlYIiwzMTU6IlNMT1BFIiwzMTY6IlRURVNUIiwzMTc6IlBST0IiLDMxODoiREVWU1EiLDMxOToiR0VPTUVBTiIsMzIwOiJI''@;'; put 'put ''QVJNRUFOIiwzMjE6IlNVTVNRIiwzMjI6IktVUlQiLDMyMzoiU0tFVyIsMzI0OiJaVEVTVCIsMzI1OiJMQVJHRSIsMzI2OiJTTUFMTCIsMzI3OiJRVUFSVElMRSIsMzI4OiJQRVJDRU5USUxFIiwzMjk6IlBFUkNFTlRSQU5LIiwzMzA6Ik1PREUiLDMzMToiVFJJTU1FQU4iLDMzMjoiVElOViIs''@;'; put 'put ''MzM0OiJNT1ZJRS5DT01NQU5EIiwzMzU6IkdFVC5NT1ZJRSIsMzM2OiJDT05DQVRFTkFURSIsMzM3OiJQT1dFUiIsMzM4OiJQSVZPVC5BREQuREFUQSIsMzM5OiJHRVQuUElWT1QuVEFCTEUiLDM0MDoiR0VULlBJVk9ULkZJRUxEIiwzNDE6IkdFVC5QSVZPVC5JVEVNIiwzNDI6IlJBRElBTlMi''@;'; put 'put ''LDM0MzoiREVHUkVFUyIsMzQ0OiJTVUJUT1RBTCIsMzQ1OiJTVU1JRiIsMzQ2OiJDT1VOVElGIiwzNDc6IkNPVU5UQkxBTksiLDM0ODoiU0NFTkFSSU8uR0VUIiwzNDk6Ik9QVElPTlMuTElTVFMuR0VUIiwzNTA6IklTUE1UIiwzNTE6IkRBVEVESUYiLDM1MjoiREFURVNUUklORyIsMzUzOiJO''@;'; put 'put ''VU1CRVJTVFJJTkciLDM1NDoiUk9NQU4iLDM1NToiT1BFTi5ESUFMT0ciLDM1NjoiU0FWRS5ESUFMT0ciLDM1NzoiVklFVy5HRVQiLDM1ODoiR0VUUElWT1REQVRBIiwzNTk6IkhZUEVSTElOSyIsMzYwOiJQSE9ORVRJQyIsMzYxOiJBVkVSQUdFQSIsMzYyOiJNQVhBIiwzNjM6Ik1JTkEiLDM2''@;'; put 'put ''NDoiU1RERVZQQSIsMzY1OiJWQVJQQSIsMzY2OiJTVERFVkEiLDM2NzoiVkFSQSIsMzY4OiJCQUhUVEVYVCIsMzY5OiJUSEFJREFZT0ZXRUVLIiwzNzA6IlRIQUlESUdJVCIsMzcxOiJUSEFJTU9OVEhPRllFQVIiLDM3MjoiVEhBSU5VTVNPVU5EIiwzNzM6IlRIQUlOVU1TVFJJTkciLDM3NDoi''@;'; put 'put ''VEhBSVNUUklOR0xFTkdUSCIsMzc1OiJJU1RIQUlESUdJVCIsMzc2OiJST1VOREJBSFRET1dOIiwzNzc6IlJPVU5EQkFIVFVQIiwzNzg6IlRIQUlZRUFSIiwzNzk6IlJURCIsMzgwOiJDVUJFVkFMVUUiLDM4MToiQ1VCRU1FTUJFUiIsMzgyOiJDVUJFTUVNQkVSUFJPUEVSVFkiLDM4MzoiQ1VC''@;'; put 'put ''RVJBTktFRE1FTUJFUiIsMzg0OiJIRVgyQklOIiwzODU6IkhFWDJERUMiLDM4NjoiSEVYMk9DVCIsMzg3OiJERUMyQklOIiwzODg6IkRFQzJIRVgiLDM4OToiREVDMk9DVCIsMzkwOiJPQ1QyQklOIiwzOTE6Ik9DVDJIRVgiLDM5MjoiT0NUMkRFQyIsMzkzOiJCSU4yREVDIiwzOTQ6IkJJTjJP''@;'; put 'put ''Q1QiLDM5NToiQklOMkhFWCIsMzk2OiJJTVNVQiIsMzk3OiJJTURJViIsMzk4OiJJTVBPV0VSIiwzOTk6IklNQUJTIiw0MDA6IklNU1FSVCIsNDAxOiJJTUxOIiw0MDI6IklNTE9HMiIsNDAzOiJJTUxPRzEwIiw0MDQ6IklNU0lOIiw0MDU6IklNQ09TIiw0MDY6IklNRVhQIiw0MDc6IklNQVJH''@;'; put 'put ''VU1FTlQiLDQwODoiSU1DT05KVUdBVEUiLDQwOToiSU1BR0lOQVJZIiw0MTA6IklNUkVBTCIsNDExOiJDT01QTEVYIiw0MTI6IklNU1VNIiw0MTM6IklNUFJPRFVDVCIsNDE0OiJTRVJJRVNTVU0iLDQxNToiRkFDVERPVUJMRSIsNDE2OiJTUVJUUEkiLDQxNzoiUVVPVElFTlQiLDQxODoiREVM''@;'; put 'put ''VEEiLDQxOToiR0VTVEVQIiw0MjA6IklTRVZFTiIsNDIxOiJJU09ERCIsNDIyOiJNUk9VTkQiLDQyMzoiRVJGIiw0MjQ6IkVSRkMiLDQyNToiQkVTU0VMSiIsNDI2OiJCRVNTRUxLIiw0Mjc6IkJFU1NFTFkiLDQyODoiQkVTU0VMSSIsNDI5OiJYSVJSIiw0MzA6IlhOUFYiLDQzMToiUFJJQ0VN''@;'; put 'put ''QVQiLDQzMjoiWUlFTERNQVQiLDQzMzoiSU5UUkFURSIsNDM0OiJSRUNFSVZFRCIsNDM1OiJESVNDIiw0MzY6IlBSSUNFRElTQyIsNDM3OiJZSUVMRERJU0MiLDQzODoiVEJJTExFUSIsNDM5OiJUQklMTFBSSUNFIiw0NDA6IlRCSUxMWUlFTEQiLDQ0MToiUFJJQ0UiLDQ0MjoiWUlFTEQiLDQ0''@;'; put 'put ''MzoiRE9MTEFSREUiLDQ0NDoiRE9MTEFSRlIiLDQ0NToiTk9NSU5BTCIsNDQ2OiJFRkZFQ1QiLDQ0NzoiQ1VNUFJJTkMiLDQ0ODoiQ1VNSVBNVCIsNDQ5OiJFREFURSIsNDUwOiJFT01PTlRIIiw0NTE6IllFQVJGUkFDIiw0NTI6IkNPVVBEQVlCUyIsNDUzOiJDT1VQREFZUyIsNDU0OiJDT1VQ''@;'; put 'put ''REFZU05DIiw0NTU6IkNPVVBOQ0QiLDQ1NjoiQ09VUE5VTSIsNDU3OiJDT1VQUENEIiw0NTg6IkRVUkFUSU9OIiw0NTk6Ik1EVVJBVElPTiIsNDYwOiJPRERMUFJJQ0UiLDQ2MToiT0RETFlJRUxEIiw0NjI6Ik9EREZQUklDRSIsNDYzOiJPRERGWUlFTEQiLDQ2NDoiUkFOREJFVFdFRU4iLDQ2''@;'; put 'put ''NToiV0VFS05VTSIsNDY2OiJBTU9SREVHUkMiLDQ2NzoiQU1PUkxJTkMiLDQ2ODoiQ09OVkVSVCIsNzI0OiJTSEVFVEpTIiw0Njk6IkFDQ1JJTlQiLDQ3MDoiQUNDUklOVE0iLDQ3MToiV09SS0RBWSIsNDcyOiJORVRXT1JLREFZUyIsNDczOiJHQ0QiLDQ3NDoiTVVMVElOT01JQUwiLDQ3NToi''@;'; put 'put ''TENNIiw0NzY6IkZWU0NIRURVTEUiLDQ3NzoiQ1VCRUtQSU1FTUJFUiIsNDc4OiJDVUJFU0VUIiw0Nzk6IkNVQkVTRVRDT1VOVCIsNDgwOiJJRkVSUk9SIiw0ODE6IkNPVU5USUZTIiw0ODI6IlNVTUlGUyIsNDgzOiJBVkVSQUdFSUYiLDQ4NDoiQVZFUkFHRUlGUyJ9LGVqPXsyOjEsMzoxLDEw''@;'; put 'put ''OjAsMTU6MSwxNjoxLDE3OjEsMTg6MSwxOTowLDIwOjEsMjE6MSwyMjoxLDIzOjEsMjQ6MSwyNToxLDI2OjEsMjc6MiwzMDoyLDMxOjMsMzI6MSwzMzoxLDM0OjAsMzU6MCwzODoxLDM5OjIsNDA6Myw0MTozLDQyOjMsNDM6Myw0NDozLDQ1OjMsNDc6Myw0ODoyLDUzOjEsNjE6Myw2MzowLDY1''@;'; put 'put ''OjMsNjY6Myw2NzoxLDY4OjEsNjk6MSw3MDoxLDcxOjEsNzI6MSw3MzoxLDc0OjAsNzU6MSw3NjoxLDc3OjEsNzk6Miw4MDoyLDgzOjEsODU6MCw4NjoxLDg5OjAsOTA6MSw5NDowLDk1OjAsOTc6Miw5ODoxLDk5OjEsMTAxOjMsMTAyOjMsMTA1OjEsMTA2OjEsMTA4OjIsMTExOjEsMTEyOjEs''@;'; put 'put ''MTEzOjEsMTE0OjEsMTE3OjIsMTE4OjEsMTE5OjQsMTIxOjEsMTI2OjEsMTI3OjEsMTI4OjEsMTI5OjEsMTMwOjEsMTMxOjEsMTMzOjEsMTM0OjEsMTM1OjEsMTM2OjIsMTM3OjIsMTM4OjIsMTQwOjEsMTQxOjEsMTQyOjMsMTQzOjQsMTQ0OjQsMTYxOjEsMTYyOjEsMTYzOjEsMTY0OjEsMTY1''@;'; put 'put ''OjIsMTcyOjEsMTc1OjIsMTc2OjIsMTc3OjMsMTc4OjIsMTc5OjEsMTg0OjEsMTg2OjEsMTg5OjMsMTkwOjEsMTk1OjMsMTk2OjMsMTk3OjEsMTk4OjEsMTk5OjMsMjAxOjEsMjA3OjQsMjEwOjMsMjExOjEsMjEyOjIsMjEzOjIsMjE0OjEsMjE1OjEsMjI1OjAsMjI5OjEsMjMwOjEsMjMxOjEs''@;'; put 'put ''MjMyOjEsMjMzOjEsMjM0OjEsMjM1OjMsMjQ0OjEsMjQ3OjQsMjUyOjIsMjU3OjEsMjYxOjEsMjcxOjEsMjczOjQsMjc0OjIsMjc1OjIsMjc2OjIsMjc3OjMsMjc4OjMsMjc5OjEsMjgwOjMsMjgxOjMsMjgyOjMsMjgzOjEsMjg0OjEsMjg1OjIsMjg2OjQsMjg3OjMsMjg4OjIsMjg5OjQsMjkw''@;'; put 'put ''OjMsMjkxOjMsMjkyOjMsMjkzOjQsMjk0OjEsMjk1OjMsMjk2OjEsMjk3OjMsMjk4OjEsMjk5OjIsMzAwOjMsMzAxOjMsMzAyOjQsMzAzOjIsMzA0OjIsMzA1OjIsMzA2OjIsMzA3OjIsMzA4OjIsMzA5OjMsMzEwOjIsMzExOjIsMzEyOjIsMzEzOjIsMzE0OjIsMzE1OjIsMzE2OjQsMzI1OjIs''@;'; put 'put ''MzI2OjIsMzI3OjIsMzI4OjIsMzMxOjIsMzMyOjIsMzM3OjIsMzQyOjEsMzQzOjEsMzQ2OjIsMzQ3OjEsMzUwOjQsMzUxOjMsMzUyOjEsMzUzOjIsMzYwOjEsMzY4OjEsMzY5OjEsMzcwOjEsMzcxOjEsMzcyOjEsMzczOjEsMzc0OjEsMzc1OjEsMzc2OjEsMzc3OjEsMzc4OjEsMzgyOjMsMzg1''@;'; put 'put ''OjEsMzkyOjEsMzkzOjEsMzk2OjIsMzk3OjIsMzk4OjIsMzk5OjEsNDAwOjEsNDAxOjEsNDAyOjEsNDAzOjEsNDA0OjEsNDA1OjEsNDA2OjEsNDA3OjEsNDA4OjEsNDA5OjEsNDEwOjEsNDE0OjQsNDE1OjEsNDE2OjEsNDE3OjIsNDIwOjEsNDIxOjEsNDIyOjIsNDI0OjEsNDI1OjIsNDI2OjIs''@;'; put 'put ''NDI3OjIsNDI4OjIsNDMwOjMsNDM4OjMsNDM5OjMsNDQwOjMsNDQzOjIsNDQ0OjIsNDQ1OjIsNDQ2OjIsNDQ3OjYsNDQ4OjYsNDQ5OjIsNDUwOjIsNDY0OjIsNDY4OjMsNDc2OjIsNDc5OjEsNDgwOjIsNjU1MzU6MH0sYWI9eyJfeGxmbi5BQ09UIjoiQUNPVCIsIl94bGZuLkFDT1RIIjoiQUNP''@;'; put 'put ''VEgiLCJfeGxmbi5BR0dSRUdBVEUiOiJBR0dSRUdBVEUiLCJfeGxmbi5BUkFCSUMiOiJBUkFCSUMiLCJfeGxmbi5BVkVSQUdFSUYiOiJBVkVSQUdFSUYiLCJfeGxmbi5BVkVSQUdFSUZTIjoiQVZFUkFHRUlGUyIsIl94bGZuLkJBU0UiOiJCQVNFIiwiX3hsZm4uQkVUQS5ESVNUIjoiQkVUQS5E''@;'; put 'put ''SVNUIiwiX3hsZm4uQkVUQS5JTlYiOiJCRVRBLklOViIsIl94bGZuLkJJTk9NLkRJU1QiOiJCSU5PTS5ESVNUIiwiX3hsZm4uQklOT00uRElTVC5SQU5HRSI6IkJJTk9NLkRJU1QuUkFOR0UiLCJfeGxmbi5CSU5PTS5JTlYiOiJCSU5PTS5JTlYiLCJfeGxmbi5CSVRBTkQiOiJCSVRBTkQiLCJf''@;'; put 'put ''eGxmbi5CSVRMU0hJRlQiOiJCSVRMU0hJRlQiLCJfeGxmbi5CSVRPUiI6IkJJVE9SIiwiX3hsZm4uQklUUlNISUZUIjoiQklUUlNISUZUIiwiX3hsZm4uQklUWE9SIjoiQklUWE9SIiwiX3hsZm4uQ0VJTElORy5NQVRIIjoiQ0VJTElORy5NQVRIIiwiX3hsZm4uQ0VJTElORy5QUkVDSVNFIjoi''@;'; put 'put ''Q0VJTElORy5QUkVDSVNFIiwiX3hsZm4uQ0hJU1EuRElTVCI6IkNISVNRLkRJU1QiLCJfeGxmbi5DSElTUS5ESVNULlJUIjoiQ0hJU1EuRElTVC5SVCIsIl94bGZuLkNISVNRLklOViI6IkNISVNRLklOViIsIl94bGZuLkNISVNRLklOVi5SVCI6IkNISVNRLklOVi5SVCIsIl94bGZuLkNISVNR''@;'; put 'put ''LlRFU1QiOiJDSElTUS5URVNUIiwiX3hsZm4uQ09NQklOQSI6IkNPTUJJTkEiLCJfeGxmbi5DT05DQVQiOiJDT05DQVQiLCJfeGxmbi5DT05GSURFTkNFLk5PUk0iOiJDT05GSURFTkNFLk5PUk0iLCJfeGxmbi5DT05GSURFTkNFLlQiOiJDT05GSURFTkNFLlQiLCJfeGxmbi5DT1QiOiJDT1Qi''@;'; put 'put ''LCJfeGxmbi5DT1RIIjoiQ09USCIsIl94bGZuLkNPVU5USUZTIjoiQ09VTlRJRlMiLCJfeGxmbi5DT1ZBUklBTkNFLlAiOiJDT1ZBUklBTkNFLlAiLCJfeGxmbi5DT1ZBUklBTkNFLlMiOiJDT1ZBUklBTkNFLlMiLCJfeGxmbi5DU0MiOiJDU0MiLCJfeGxmbi5DU0NIIjoiQ1NDSCIsIl94bGZu''@;'; put 'put ''LkRBWVMiOiJEQVlTIiwiX3hsZm4uREVDSU1BTCI6IkRFQ0lNQUwiLCJfeGxmbi5FQ01BLkNFSUxJTkciOiJFQ01BLkNFSUxJTkciLCJfeGxmbi5FUkYuUFJFQ0lTRSI6IkVSRi5QUkVDSVNFIiwiX3hsZm4uRVJGQy5QUkVDSVNFIjoiRVJGQy5QUkVDSVNFIiwiX3hsZm4uRVhQT04uRElTVCI6''@;'; put 'put ''IkVYUE9OLkRJU1QiLCJfeGxmbi5GLkRJU1QiOiJGLkRJU1QiLCJfeGxmbi5GLkRJU1QuUlQiOiJGLkRJU1QuUlQiLCJfeGxmbi5GLklOViI6IkYuSU5WIiwiX3hsZm4uRi5JTlYuUlQiOiJGLklOVi5SVCIsIl94bGZuLkYuVEVTVCI6IkYuVEVTVCIsIl94bGZuLkZJTFRFUlhNTCI6IkZJTFRF''@;'; put 'put ''UlhNTCIsIl94bGZuLkZMT09SLk1BVEgiOiJGTE9PUi5NQVRIIiwiX3hsZm4uRkxPT1IuUFJFQ0lTRSI6IkZMT09SLlBSRUNJU0UiLCJfeGxmbi5GT1JFQ0FTVC5FVFMiOiJGT1JFQ0FTVC5FVFMiLCJfeGxmbi5GT1JFQ0FTVC5FVFMuQ09ORklOVCI6IkZPUkVDQVNULkVUUy5DT05GSU5UIiwi''@;'; put 'put ''X3hsZm4uRk9SRUNBU1QuRVRTLlNFQVNPTkFMSVRZIjoiRk9SRUNBU1QuRVRTLlNFQVNPTkFMSVRZIiwiX3hsZm4uRk9SRUNBU1QuRVRTLlNUQVQiOiJGT1JFQ0FTVC5FVFMuU1RBVCIsIl94bGZuLkZPUkVDQVNULkxJTkVBUiI6IkZPUkVDQVNULkxJTkVBUiIsIl94bGZuLkZPUk1VTEFURVhU''@;'; put 'put ''IjoiRk9STVVMQVRFWFQiLCJfeGxmbi5HQU1NQSI6IkdBTU1BIiwiX3hsZm4uR0FNTUEuRElTVCI6IkdBTU1BLkRJU1QiLCJfeGxmbi5HQU1NQS5JTlYiOiJHQU1NQS5JTlYiLCJfeGxmbi5HQU1NQUxOLlBSRUNJU0UiOiJHQU1NQUxOLlBSRUNJU0UiLCJfeGxmbi5HQVVTUyI6IkdBVVNTIiwi''@;'; put 'put ''X3hsZm4uSFlQR0VPTS5ESVNUIjoiSFlQR0VPTS5ESVNUIiwiX3hsZm4uSUZFUlJPUiI6IklGRVJST1IiLCJfeGxmbi5JRk5BIjoiSUZOQSIsIl94bGZuLklGUyI6IklGUyIsIl94bGZuLklNQ09TSCI6IklNQ09TSCIsIl94bGZuLklNQ09UIjoiSU1DT1QiLCJfeGxmbi5JTUNTQyI6IklNQ1ND''@;'; put 'put ''IiwiX3hsZm4uSU1DU0NIIjoiSU1DU0NIIiwiX3hsZm4uSU1TRUMiOiJJTVNFQyIsIl94bGZuLklNU0VDSCI6IklNU0VDSCIsIl94bGZuLklNU0lOSCI6IklNU0lOSCIsIl94bGZuLklNVEFOIjoiSU1UQU4iLCJfeGxmbi5JU0ZPUk1VTEEiOiJJU0ZPUk1VTEEiLCJfeGxmbi5JU08uQ0VJTElO''@;'; put 'put ''RyI6IklTTy5DRUlMSU5HIiwiX3hsZm4uSVNPV0VFS05VTSI6IklTT1dFRUtOVU0iLCJfeGxmbi5MT0dOT1JNLkRJU1QiOiJMT0dOT1JNLkRJU1QiLCJfeGxmbi5MT0dOT1JNLklOViI6IkxPR05PUk0uSU5WIiwiX3hsZm4uTUFYSUZTIjoiTUFYSUZTIiwiX3hsZm4uTUlOSUZTIjoiTUlOSUZT''@;'; put 'put ''IiwiX3hsZm4uTU9ERS5NVUxUIjoiTU9ERS5NVUxUIiwiX3hsZm4uTU9ERS5TTkdMIjoiTU9ERS5TTkdMIiwiX3hsZm4uTVVOSVQiOiJNVU5JVCIsIl94bGZuLk5FR0JJTk9NLkRJU1QiOiJORUdCSU5PTS5ESVNUIiwiX3hsZm4uTkVUV09SS0RBWVMuSU5UTCI6Ik5FVFdPUktEQVlTLklOVEwi''@;'; put 'put ''LCJfeGxmbi5OSUdCSU5PTSI6Ik5JR0JJTk9NIiwiX3hsZm4uTk9STS5ESVNUIjoiTk9STS5ESVNUIiwiX3hsZm4uTk9STS5JTlYiOiJOT1JNLklOViIsIl94bGZuLk5PUk0uUy5ESVNUIjoiTk9STS5TLkRJU1QiLCJfeGxmbi5OT1JNLlMuSU5WIjoiTk9STS5TLklOViIsIl94bGZuLk5VTUJF''@;'; put 'put ''UlZBTFVFIjoiTlVNQkVSVkFMVUUiLCJfeGxmbi5QRFVSQVRJT04iOiJQRFVSQVRJT04iLCJfeGxmbi5QRVJDRU5USUxFLkVYQyI6IlBFUkNFTlRJTEUuRVhDIiwiX3hsZm4uUEVSQ0VOVElMRS5JTkMiOiJQRVJDRU5USUxFLklOQyIsIl94bGZuLlBFUkNFTlRSQU5LLkVYQyI6IlBFUkNFTlRS''@;'; put 'put ''QU5LLkVYQyIsIl94bGZuLlBFUkNFTlRSQU5LLklOQyI6IlBFUkNFTlRSQU5LLklOQyIsIl94bGZuLlBFUk1VVEFUSU9OQSI6IlBFUk1VVEFUSU9OQSIsIl94bGZuLlBISSI6IlBISSIsIl94bGZuLlBPSVNTT04uRElTVCI6IlBPSVNTT04uRElTVCIsIl94bGZuLlFVQVJUSUxFLkVYQyI6IlFV''@;'; put 'put ''QVJUSUxFLkVYQyIsIl94bGZuLlFVQVJUSUxFLklOQyI6IlFVQVJUSUxFLklOQyIsIl94bGZuLlFVRVJZU1RSSU5HIjoiUVVFUllTVFJJTkciLCJfeGxmbi5SQU5LLkFWRyI6IlJBTksuQVZHIiwiX3hsZm4uUkFOSy5FUSI6IlJBTksuRVEiLCJfeGxmbi5SUkkiOiJSUkkiLCJfeGxmbi5TRUMi''@;'; put 'put ''OiJTRUMiLCJfeGxmbi5TRUNIIjoiU0VDSCIsIl94bGZuLlNIRUVUIjoiU0hFRVQiLCJfeGxmbi5TSEVFVFMiOiJTSEVFVFMiLCJfeGxmbi5TS0VXLlAiOiJTS0VXLlAiLCJfeGxmbi5TVERFVi5QIjoiU1RERVYuUCIsIl94bGZuLlNUREVWLlMiOiJTVERFVi5TIiwiX3hsZm4uU1VNSUZTIjoi''@;'; put 'put ''U1VNSUZTIiwiX3hsZm4uU1dJVENIIjoiU1dJVENIIiwiX3hsZm4uVC5ESVNUIjoiVC5ESVNUIiwiX3hsZm4uVC5ESVNULjJUIjoiVC5ESVNULjJUIiwiX3hsZm4uVC5ESVNULlJUIjoiVC5ESVNULlJUIiwiX3hsZm4uVC5JTlYiOiJULklOViIsIl94bGZuLlQuSU5WLjJUIjoiVC5JTlYuMlQi''@;'; put 'put ''LCJfeGxmbi5ULlRFU1QiOiJULlRFU1QiLCJfeGxmbi5URVhUSk9JTiI6IlRFWFRKT0lOIiwiX3hsZm4uVU5JQ0hBUiI6IlVOSUNIQVIiLCJfeGxmbi5VTklDT0RFIjoiVU5JQ09ERSIsIl94bGZuLlZBUi5QIjoiVkFSLlAiLCJfeGxmbi5WQVIuUyI6IlZBUi5TIiwiX3hsZm4uV0VCU0VSVklD''@;'; put 'put ''RSI6IldFQlNFUlZJQ0UiLCJfeGxmbi5XRUlCVUxMLkRJU1QiOiJXRUlCVUxMLkRJU1QiLCJfeGxmbi5XT1JLREFZLklOVEwiOiJXT1JLREFZLklOVEwiLCJfeGxmbi5YT1IiOiJYT1IiLCJfeGxmbi5aLlRFU1QiOiJaLlRFU1QifTtmdW5jdGlvbiBpUyhTKXtyZXR1cm4ib2Y6Ij09Uy5zbGlj''@;'; put 'put ''ZSgwLDMpJiYoUz1TLnNsaWNlKDMpKSw2MT09Uy5jaGFyQ29kZUF0KDApJiY2MT09KFM9Uy5zbGljZSgxKSkuY2hhckNvZGVBdCgwKSYmKFM9Uy5zbGljZSgxKSksKFM9KFM9KFM9Uy5yZXBsYWNlKC9DT01cLk1JQ1JPU09GVFwuL2csIiIpKS5yZXBsYWNlKC9cWygoPzpcLltBLVpdK1swLTld''@;'; put 'put ''KykoPzo6XC5bQS1aXStbMC05XSspPylcXS9nLGZ1bmN0aW9uKFIsayl7cmV0dXJuIGsucmVwbGFjZSgvXC4vZywiIil9KSkucmVwbGFjZSgvXFsuKCNbQS1aXSpbPyFdKVxdL2csIiQxIikpLnJlcGxhY2UoL1s7fl0vZywiLCIpLnJlcGxhY2UoL1x8L2csIjsiKX1mdW5jdGlvbiBaNChTKXty''@;'; put 'put ''ZXR1cm4oIm9mOj0iK1MucmVwbGFjZShtMiwiJDFbLiQyJDMkNCQ1XSIpLnJlcGxhY2UoL1xdOlxbL2csIjoiKSkucmVwbGFjZSgvOy9nLCJ8IikucmVwbGFjZSgvLC9nLCI7Iil9ZnVuY3Rpb24gb2IoUyl7dmFyIFI9Uy5zcGxpdCgiOiIpO3JldHVybltSWzBdLnNwbGl0KCIuIilbMF0sUlsw''@;'; put 'put ''XS5zcGxpdCgiLiIpWzFdKyhSLmxlbmd0aD4xPyI6IisoUlsxXS5zcGxpdCgiLiIpWzFdfHxSWzFdLnNwbGl0KCIuIilbMF0pOiIiKV19ZnVuY3Rpb24gZ0QoUyl7cmV0dXJuIFMucmVwbGFjZSgvXC4vLCIhIil9dmFyIGw4PXt9LGM4PXt9O0thLldTPVsiaHR0cDovL3NjaGVtYXMub3Blbnht''@;'; put 'put ''bGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy93b3Jrc2hlZXQiLCJodHRwOi8vcHVybC5vY2xjLm9yZy9vb3htbC9vZmZpY2VEb2N1bWVudC9yZWxhdGlvbnNoaXBzL3dvcmtzaGVldCJdO3ZhciBxMz10eXBlb2YgTWFwPCJ1IjtmdW5jdGlvbiBhUyhTLFIs''@;'; put 'put ''ayxHKXt2YXIgUT0wLG9lPVMubGVuZ3RoO2lmKEcpe2lmKHEzP0cuaGFzKFIpOk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChHLFIpKWZvcih2YXIgZ2U9cTM/Ry5nZXQoUik6R1tSXTtRPGdlLmxlbmd0aDsrK1EpaWYoU1tnZVtRXV0udD09PVImJighU1tnZVtRXV0uciYm''@;'; put 'put ''IWt8fFNbZ2VbUV1dLnI9PWspKXJldHVybiBTLkNvdW50KyssZ2VbUV19ZWxzZSBmb3IoO1E8b2U7KytRKWlmKFNbUV0udD09PVImJighU1tRXS5yJiYha3x8U1tRXS5yPT1rKSlyZXR1cm4gUy5Db3VudCsrLFE7cmV0dXJuIFNbb2VdPXt0OlIscjprfSxTLkNvdW50KyssUy5VbmlxdWUrKyxH''@;'; put 'put ''JiYocTM/KEcuaGFzKFIpfHxHLnNldChSLFtdKSxHLmdldChSKS5wdXNoKG9lKSk6KE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChHLFIpfHwoR1tSXT1bXSksR1tSXS5wdXNoKG9lKSkpLG9lfWZ1bmN0aW9uIHU4KFMsUil7dmFyIGs9e21pbjpTKzEsbWF4OlMrMX0sRz1U''@;'; put 'put ''YztpZighUilyZXR1cm4gUjt2YXIgUT0tMTtyZXR1cm4gUi5hdXRvJiYoay5iZXN0Rml0PTEsUi5iZXN0d2lkdGgmJihRPVIuYmVzdHdpZHRoKSxkZWxldGUgUi5iZXN0d2lkdGgpLG51bGwhPVIud3B4P1E9eDUoUi53cHgpOm51bGwhPVIud2NoP1E9Ui53Y2g6bnVsbCE9Ui53aWR0aCYmKGsu''@;'; put 'put ''Y3VzdG9tV2lkdGg9MSksUT4tMT8oay53aWR0aD1rZihRKSxrLmN1c3RvbVdpZHRoPTEpOm51bGwhPVIud2lkdGgmJihrLndpZHRoPVIud2lkdGgpLFIuaGlkZGVuJiYoay5oaWRkZW49ITApLGsuYmVzdEZpdCYmZGVsZXRlIGsuY3VzdG9tV2lkdGgsVGM9RyxudWxsIT1SLmxldmVsJiYoay5v''@;'; put 'put ''dXRsaW5lTGV2ZWw9ay5sZXZlbD1SLmxldmVsKSxudWxsIT1SLnN0eWxlJiYoay5zdHlsZT1SLnN0eWxlKSxrfWZ1bmN0aW9uIG9TKFMsUixrKXt2YXIgRz1NcyhTWyIhcmVmIl0pLFE9MCxvZT1TWyIhbWVyZ2VzIl18fFtdLGdlPUFycmF5LmlzQXJyYXkoUyk7ZTpmb3IodmFyIHBlPTA7cGU8''@;'; put 'put ''PUcuZS5yOysrcGUpe2Zvcih2YXIgeWU9MDt5ZTxvZS5sZW5ndGg7Kyt5ZSlpZihvZVt5ZV0ucy5yPD1wZSYmcGU8PW9lW3llXS5lLnImJm9lW3llXS5zLmM8PWsmJms8PW9lW3llXS5lLmMpY29udGludWUgZTt2YXIgUGU9Z2U/KFNbcGVdfHxbXSlba106U1txaSh7cjpwZSxjOmt9KV07aWYo''@;'; put 'put ''UGUpe3ZhciBOZT0xO2lmKFBlLnMmJihOZT15QyhQZS5zKS9iQy5DYWxpYnJpWzEyXXx8MSksUGUudylRPU1hdGgubWF4KFEsUGUudy5sZW5ndGgqTmUpO2Vsc2Ugc3dpdGNoKFBlLnQpe2Nhc2UiYiI6Y2FzZSJlIjpRPU1hdGgubWF4KFEsNSpOZSk7YnJlYWs7Y2FzZSJzIjpRPU1hdGgubWF4''@;'; put 'put ''KFEsUGUudi5sZW5ndGgqTmUqMS4yfDApO2JyZWFrO2Nhc2UibiI6YTUoUGUsUGUudiksUT1NYXRoLm1heChRLFN0cmluZyhQZS53fHxQZS52KS5sZW5ndGgqTmUpO2JyZWFrO2Nhc2UiZCI6UT1NYXRoLm1heChRLDgqTmUpfX19UTwxJiYoUT0xKSxSLmJlc3R3aWR0aD1RfWZ1bmN0aW9uIFgz''@;'; put 'put ''KFMsUil7aWYoUyl7dmFyIGs9Wy43LC43LC43NSwuNzUsLjMsLjNdOyJ4bG1sIj09UiYmKGs9WzEsMSwxLDEsLjUsLjVdKSxudWxsPT1TLmxlZnQmJihTLmxlZnQ9a1swXSksbnVsbD09Uy5yaWdodCYmKFMucmlnaHQ9a1sxXSksbnVsbD09Uy50b3AmJihTLnRvcD1rWzJdKSxudWxsPT1TLmJv''@;'; put 'put ''dHRvbSYmKFMuYm90dG9tPWtbM10pLG51bGw9PVMuaGVhZGVyJiYoUy5oZWFkZXI9a1s0XSksbnVsbD09Uy5mb290ZXImJihTLmZvb3Rlcj1rWzVdKX19ZnVuY3Rpb24gbFMoUyxSKXtmb3IodmFyIGs9T2UoUiksRz0wO0c8Uy5sZW5ndGg7KytHKXt2YXIgUT0hMCxvZT1TW0ddO2lmKG9lJiZr''@;'; put 'put ''Lmxlbmd0aD09T2Uob2UpLmxlbmd0aCYmKGsuZm9yRWFjaChmdW5jdGlvbihnZSl7aWYoUSl7aWYobnVsbD09PVJbZ2VdIT0obnVsbD09PW9lW2dlXSkpcmV0dXJuIHZvaWQoUT0hMSk7aWYoIm9iamVjdCI9PXR5cGVvZiBSW2dlXSlpZihbImNvbG9yIiwiZmdDb2xvciIsImJnQ29sb3IiXS5p''@;'; put 'put ''bmRleE9mKGdlKT4tMSl7aWYob2goUltnZV0sb2VbZ2VdKSlyZXR1cm4gdm9pZChRPSExKX1lbHNle2lmKCEoWyJsZWZ0IiwicmlnaHQiLCJ0b3AiLCJib3R0b20iXS5pbmRleE9mKGdlKT4tMSkpcmV0dXJuIHZvaWQoUT0hMSk7aWYoaGsoUltnZV0sb2VbZ2VdKSlyZXR1cm4gdm9pZChRPSEx''@;'; put 'put ''KX1pZihSW2dlXSE9b2VbZ2VdKXJldHVybiB2b2lkKFE9ITEpfX0pLFEpKXJldHVybiBHfXJldHVybiBTW1MubGVuZ3RoXT1xdChSKSxTLmxlbmd0aC0xfWZ1bmN0aW9uIGwwKFMsUixrLEcpe3ZhciBRPUcucmV2c3NmW251bGwhPWsuej9rLno6IkdlbmVyYWwiXSxvZT02MCxnZT1TLmxlbmd0''@;'; put 'put ''aDtpZihudWxsPT1RJiZHLnNzZilmb3IoO29lPDM5MjsrK29lKWlmKG51bGw9PUcuc3NmW29lXSl7QS5sb2FkKGsueixvZSksRy5zc2Zbb2VdPWsueixHLnJldnNzZltrLnpdPVE9b2U7YnJlYWt9dmFyIHBlPTAseWU9MCxQZT0wLE5lPTA7aWYoRy5jZWxsU3R5bGVzKXtpZihrLnMpe2lmKEcu''@;'; put 'put ''Rm9udHMpe2sucy5jb2xvcnx8KGsucy5jb2xvcj17dGhlbWU6MSxyZ2I6IjAwMDAwMCJ9KTtmb3IodmFyIFllPShrLnMuYm9sZD8xOjApfChrLnMuaXRhbGljPzI6MCl8KGsucy5zdHJpa2U/NDowKXwoay5zLnNoYWRvdz84OjApO3BlPEcuRm9udHMubGVuZ3RoOysrcGUpe3ZhciBldD1HLkZv''@;'; put 'put ''bnRzW3BlXTtpZihudWxsPT1ldC5mb250aGFzaCYmKGV0LmZvbnRoYXNoPShldC5ib2xkPzE6MCl8KGV0Lml0YWxpYz8yOjApfChldC5zdHJpa2U/NDowKXwoZXQuc2hhZG93Pzg6MCkpLCEoWWUhPWV0LmZvbnRoYXNofHwhIWsucy5jb2xvciE9ISFldC5jb2xvcnx8ay5zLnZhbGlnbiE9ZXQu''@;'; put 'put ''dmFsaWdufHwoay5zLnN6fHxldC5zeikmJihrLnMuc3p8fDEyKSE9KGV0LnN6fHwxMil8fGsucy5uYW1lJiZrLnMubmFtZSE9ZXQubmFtZXx8KGsucy51bmRlcmxpbmV8fDApIT0oZXQudW5kZXJsaW5lfHwwKXx8ay5zLmNvbG9yJiZvaChrLnMuY29sb3IsZXQuY29sb3IpKSlicmVha31wZT09''@;'; put 'put ''Ry5Gb250cy5sZW5ndGgmJihHLkZvbnRzLnB1c2goe3N6Omsucy5zenx8MTIsY29sb3I6ay5zLmNvbG9yfHx7dGhlbWU6MSxyZ2I6IjAwMDAwMCJ9LG5hbWU6ay5zLm5hbWV8fCJDYWxpYnJpIixmYW1pbHk6ay5zLmZhbWlseXx8MixzY2hlbWU6ay5zLnNjaGVtZSxib2xkOmsucy5ib2xkLGl0''@;'; put 'put ''YWxpYzprLnMuaXRhbGljLHN0cmlrZTprLnMuc3RyaWtlLHNoYWRvdzprLnMuc2hhZG93LHZhbGlnbjprLnMudmFsaWduLHVuZGVybGluZTprLnMudW5kZXJsaW5lfSksMT09Ry5Gb250cy5sZW5ndGgmJkk0KEcuRm9udHNbMF0pKX1pZihHLkZpbGxzKXtmb3IoO3llPEcuRmlsbHMubGVuZ3Ro''@;'; put 'put ''OysreWUpe3ZhciBjdD1HLkZpbGxzW3llXTtpZighIWsucy5zdG9wcz09ISFjdC5zdG9wcyl7aWYoay5zLnN0b3BzKXtpZihrLnMuYW5nbGUhPWN0LmFuZ2xlKWNvbnRpbnVlO3ZhciBFdD0hMDtpZihrLnMuc3RvcHMuZm9yRWFjaChmdW5jdGlvbihrdCxPdCl7b2goa3QsY3Quc3RvcHNbT3Rd''@;'; put 'put ''KSYmKEV0PSExKSxrdC52IT1jdC5zdG9wc1tPdF0udiYmKEV0PSExKX0pLCFFdCljb250aW51ZX1lbHNle2lmKG51bGw9PWsucy5wYXR0ZXJuVHlwZSYmay5zLmZnQ29sb3ImJihrLnMucGF0dGVyblR5cGU9InNvbGlkIiksbnVsbD09ay5zLnBhdHRlcm5UeXBlKWJyZWFrO2lmKGsucy5wYXR0''@;'; put 'put ''ZXJuVHlwZSE9Y3QucGF0dGVyblR5cGV8fG9oKGsucy5mZ0NvbG9yLGN0LmZnQ29sb3IpfHxvaChrLnMuYmdDb2xvcixjdC5iZ0NvbG9yKSljb250aW51ZX1icmVha319aWYoeWU9PUcuRmlsbHMubGVuZ3RoKXt2YXIgYXQ9e307ay5zLnN0b3BzPyhudWxsIT1rLnMuYW5nbGUmJihhdC5hbmds''@;'; put 'put ''ZT1rLnMuYW5nbGUpLGF0LnN0b3BzPVtdLGsucy5zdG9wcy5mb3JFYWNoKGZ1bmN0aW9uKGt0KXthdC5zdG9wcy5wdXNoKHF0KGt0KSl9KSk6YXQ9e3BhdHRlcm5UeXBlOmsucy5wYXR0ZXJuVHlwZSxmZ0NvbG9yOmsucy5mZ0NvbG9yLGJnQ29sb3I6ay5zLmJnQ29sb3J9LEcuRmlsbHMucHVz''@;'; put 'put ''aChhdCl9fWlmKEcuQm9yZGVycyl7Zm9yKDtQZTxHLkJvcmRlcnMubGVuZ3RoOysrUGUpe3ZhciBidD1HLkJvcmRlcnNbUGVdLGp0PSJ0b3AiO2lmKGsuc1tqdF0pe2lmKCFidFtqdF18fGsuc1tqdF0uc3R5bGUhPWJ0W2p0XS5zdHlsZXx8b2goay5zW2p0XS5jb2xvcixidFtqdF0uY29sb3Ip''@;'; put 'put ''KWNvbnRpbnVlfWVsc2UgaWYobnVsbCE9YnRbanRdKWNvbnRpbnVlO2lmKGsuc1tqdD0iYm90dG9tIl0pe2lmKCFidFtqdF18fGsuc1tqdF0uc3R5bGUhPWJ0W2p0XS5zdHlsZXx8b2goay5zW2p0XS5jb2xvcixidFtqdF0uY29sb3IpKWNvbnRpbnVlfWVsc2UgaWYobnVsbCE9YnRbanRdKWNv''@;'; put 'put ''bnRpbnVlO2lmKGsuc1tqdD0ibGVmdCJdKXtpZighYnRbanRdfHxrLnNbanRdLnN0eWxlIT1idFtqdF0uc3R5bGV8fG9oKGsuc1tqdF0uY29sb3IsYnRbanRdLmNvbG9yKSljb250aW51ZX1lbHNlIGlmKG51bGwhPWJ0W2p0XSljb250aW51ZTtpZihrLnNbanQ9InJpZ2h0Il0pe2lmKCFidFtq''@;'; put 'put ''dF18fGsuc1tqdF0uc3R5bGUhPWJ0W2p0XS5zdHlsZXx8b2goay5zW2p0XS5jb2xvcixidFtqdF0uY29sb3IpKWNvbnRpbnVlfWVsc2UgaWYobnVsbCE9YnRbanRdKWNvbnRpbnVlO2JyZWFrfVBlPT1HLkJvcmRlcnMubGVuZ3RoJiZHLkJvcmRlcnMucHVzaCh7dG9wOmsucy50b3AmJnF0KGsu''@;'; put 'put ''cy50b3ApfHx2b2lkIDAsYm90dG9tOmsucy5ib3R0b20mJnF0KGsucy5ib3R0b20pfHx2b2lkIDAsbGVmdDprLnMubGVmdCYmcXQoay5zLmxlZnQpfHx2b2lkIDAscmlnaHQ6ay5zLnJpZ2h0JiZxdChrLnMucmlnaHQpfHx2b2lkIDB9KX1pZihSJiZrLnMuc3R5bGUmJiJOb3JtYWwiIT09ay5z''@;'; put 'put ''LnN0eWxlKXtmb3IoTmU9MTtOZTxSLmxlbmd0aCYmUltOZV0ubmFtZSE9ay5zLnN0eWxlOysrTmUpO05lPT1SLmxlbmd0aCYmUi5wdXNoKHtuYW1lOmsucy5zdHlsZSxudW1GbXRJZDpRLGZvbnRJZDpwZSxmaWxsSWQ6eWUsYm9yZGVySWQ6UGV9KX19Zm9yKG9lPTA7b2UhPWdlOysrb2UpaWYo''@;'; put 'put ''U1tvZV0ubnVtRm10SWQ9PVEmJlNbb2VdLmZvbnRJZD09cGUmJlNbb2VdLmZpbGxJZD09eWUmJlNbb2VdLmJvcmRlcklkPT1QZSYmU1tvZV0ueGZJZD09TmUpe2lmKGsucyYmay5zLmFsaWdubWVudCl7aWYoIVNbb2VdLmFsaWdubWVudCljb250aW51ZTtpZihrLnMuYWxpZ25tZW50Lmhvcml6''@;'; put 'put ''b250YWwhPVNbb2VdLmFsaWdubWVudC5ob3Jpem9udGFsfHxrLnMuYWxpZ25tZW50LnZlcnRpY2FsIT1TW29lXS5hbGlnbm1lbnQudmVydGljYWx8fGsucy5hbGlnbm1lbnQud3JhcFRleHQhPVNbb2VdLmFsaWdubWVudC53cmFwVGV4dHx8ay5zLmFsaWdubWVudC5zaHJpbmtUb0ZpdCE9U1tv''@;'; put 'put ''ZV0uYWxpZ25tZW50LnNocmlua1RvRml0fHxrLnMuYWxpZ25tZW50LnRleHRSb3RhdGlvbiE9U1tvZV0uYWxpZ25tZW50LnRleHRSb3RhdGlvbnx8ay5zLmFsaWdubWVudC5pbmRlbnQhPVNbb2VdLmFsaWdubWVudC5pbmRlbnQpY29udGludWV9ZWxzZSBpZihTW29lXS5hbGlnbm1lbnQpY29u''@;'; put 'put ''dGludWU7aWYoay5zKXtpZighIWsucy5oaWRkZW49PSghU1tvZV0ucHJvdGVjdGlvbnx8IVNbb2VdLnByb3RlY3Rpb24uaGlkZGVuKXx8ISFrLnMuZWRpdGFibGU9PSghU1tvZV0ucHJvdGVjdGlvbnx8IVNbb2VdLnByb3RlY3Rpb24uZWRpdGFibGUpKWNvbnRpbnVlfWVsc2UgaWYoU1tvZV0u''@;'; put 'put ''cHJvdGVjdGlvbiljb250aW51ZTtyZXR1cm4gb2V9fWVsc2UgZm9yKG9lPTA7b2UhPWdlOysrb2UpaWYoU1tvZV0ubnVtRm10SWQ9PT1RKXJldHVybiBvZTtyZXR1cm4gU1tnZV09e251bUZtdElkOlEsZm9udElkOnBlLGZpbGxJZDp5ZSxib3JkZXJJZDpQZSx4ZklkOk5lLGFwcGx5TnVtYmVy''@;'; put 'put ''Rm9ybWF0OjF9LHBlPjAmJihTW2dlXS5hcHBseUZvbnQ9MSkseWU+MCYmKFNbZ2VdLmFwcGx5RmlsbD0xKSxQZT4wJiYoU1tnZV0uYXBwbHlCb3JkZXI9MSksIVImJmsucyYmay5zLnN0eWxlJiYiTm9ybWFsIiE9ay5zLnN0eWxlJiYoU1tnZV0uc3R5bGU9ay5zLnN0eWxlKSxrLnMmJmsucy5h''@;'; put 'put ''bGlnbm1lbnQmJihTW2dlXS5hbGlnbm1lbnQ9e30sWyJob3Jpem9udGFsIiwidmVydGljYWwiLCJ3cmFwVGV4dCIsInNocmlua1RvRml0IiwiaW5kZW50IiwidGV4dFJvdGF0aW9uIl0uZm9yRWFjaChmdW5jdGlvbihrdCl7bnVsbCE9ay5zLmFsaWdubWVudFtrdF0mJihTW2dlXS5hbGlnbm1l''@;'; put 'put ''bnRba3RdPWsucy5hbGlnbm1lbnRba3RdKX0pKSxrLnMmJmsucy5oaWRkZW4mJihTW2dlXS5wcm90ZWN0aW9ufHwoU1tnZV0ucHJvdGVjdGlvbj17fSksU1tnZV0ucHJvdGVjdGlvbi5oaWRkZW49ITApLGsucyYmay5zLmVkaXRhYmxlJiYoU1tnZV0ucHJvdGVjdGlvbnx8KFNbZ2VdLnByb3Rl''@;'; put 'put ''Y3Rpb249e30pLFNbZ2VdLnByb3RlY3Rpb24uZWRpdGFibGU9ITApLGdlfWZ1bmN0aW9uIEozKFMsUixrLEcsUSxvZSxnZSxwZSl7ImQiPT09Uy50JiYic3RyaW5nIj09dHlwZW9mIFMudiYmKFMudj1IZShTLnYpKTt0cnl7b2UuY2VsbE5GJiYoUy56PUEuX3RhYmxlW1JdKX1jYXRjaChQZSl7''@;'; put 'put ''aWYob2UuV1RGKXRocm93IFBlfWlmKCghb2V8fCExIT09b2UuY2VsbFRleHQpJiYieiIhPVMudCl0cnl7aWYobnVsbD09QS5fdGFibGVbUl0mJkEubG9hZChzZVtSXXx8IkdlbmVyYWwiLFIpLCJlIj09PVMudClTLnc9Uy53fHxNY1tTLnZdO2Vsc2UgaWYoMD09PVIpaWYoIm4iPT09Uy50KVMu''@;'; put 'put ''dz0oMHxTLnYpPT09Uy52P0EuX2dlbmVyYWxfaW50KFMudik6QS5fZ2VuZXJhbF9udW0oUy52KTtlbHNlIGlmKCJkIj09PVMudCl7dmFyIHllPVFlKFMudik7Uy53PSgwfHllKT09PXllP0EuX2dlbmVyYWxfaW50KHllKTpBLl9nZW5lcmFsX251bSh5ZSl9ZWxzZXtpZih2b2lkIDA9PT1TLnYp''@;'; put 'put ''cmV0dXJuIiI7Uy53PUEuX2dlbmVyYWwoUy52LGM4KX1lbHNlIFMudz1BLmZvcm1hdChSLCJkIj09PVMudD9RZShTLnYpOlMudixjOCl9Y2F0Y2goUGUpe2lmKG9lLldURil0aHJvdyBQZX1pZihvZS5jZWxsU3R5bGVzJiZwZSl7aWYoUy5zPXt9LG51bGwhPWsmJnBlLkZpbGxzKXRyeXtQdChT''@;'; put 'put ''LnMscGUuRmlsbHNba10pfWNhdGNoKFBlKXtpZihvZS5XVEYpdGhyb3cgUGV9aWYobnVsbCE9RyYmcGUuRm9udHMpdHJ5e1B0KFMucyxwZS5Gb250c1tHXSl9Y2F0Y2goUGUpe2lmKG9lLldURil0aHJvdyBQZX1pZihudWxsIT1RJiZwZS5Cb3JkZXJzKXRyeXtQdChTLnMscGUuQm9yZGVyc1tR''@;'; put 'put ''XSl9Y2F0Y2goUGUpe2lmKG9lLldURil0aHJvdyBQZX19fWZ1bmN0aW9uIG1EKFMsUixrKXtpZihTJiZTWyIhcmVmIl0pe3ZhciBHPW9vKFNbIiFyZWYiXSk7aWYoRy5lLmM8Ry5zLmN8fEcuZS5yPEcucy5yKXRocm93IG5ldyBFcnJvcigiQmFkIHJhbmdlICgiK2srIik6ICIrU1siIXJlZiJd''@;'; put 'put ''KX19dmFyIGQ4PS88KD86XHc6KT9tZXJnZUNlbGwgcmVmPSJbQS1aMC05Ol0rIlxzKltcL10/Pi9nLHZEPS88KD86XHcrOik/c2hlZXREYXRhW14+XSo+KFtcc1xTXSopPFwvKD86XHcrOik/c2hlZXREYXRhPi8sdVM9LzwoPzpcdzopP2h5cGVybGluayBbXj5dKj4vZ20sc2I9LyIoXHcqOlx3''@;'; put 'put ''KikiLyx0aj0vPCg/Olx3Oik/Y29sXGJbXj5dKltcL10/Pi9nLGJEPS88KD86XHc6KT9jb250cm9sXGJbXj5dKltcL10/Pi9nLG5qPS88KD86XHc6KT9hdXRvRmlsdGVyW14+XSooW1wvXXw+KFtcc1xTXSopPFwvKD86XHc6KT9hdXRvRmlsdGVyKT4vZyx5RD0vPCg/Olx3Oik/cGFnZU1hcmdp''@;'; put 'put ''bnNbXj5dKlwvPi9nLF9EPS88KD86XHc6KT9zaGVldFByXGIoPzpbXj5hLXpdW14+XSopP1wvPi8sd0Q9LzwoPzpcdzopP3NoZWV0UHJvdGVjdGlvblxiKD86W14+YS16XVtePl0qKT9cLz4vLENEPS88KD86XHc6KT9zaGVldFByW14+XSooPzpbXC9dfD4oW1xzXFNdKik8XC8oPzpcdzopP3No''@;'; put 'put ''ZWV0UHIpPi8sUm89LzwoPzpcdzopP3NoZWV0Vmlld3NbXj5dKig/OltcL118PihbXHNcU10qKTxcLyg/Olx3Oik/c2hlZXRWaWV3cyk+LyxmZT0vPCg/Olx3KzopP2RhdGFWYWxpZGF0aW9uc1tePl0qKD86W1wvXXw+KFtcc1xTXSo/KTxcLyg/Olx3KzopP2RhdGFWYWxpZGF0aW9ucyk+Lyxk''@;'; put 'put ''Uz0vPCg/Olx3KzopP2NvbmRpdGlvbmFsRm9ybWF0dGluZ1xiW14+XSooPzpbXC9dfD4oW1xzXFNdKj8pPFwvKD86XHcrOik/Y29uZGl0aW9uYWxGb3JtYXR0aW5nKT4vZyxHZT0vPCg/Olx3Oik/c2hlZXRGb3JtYXRQcltePl0qXC8+LyxTRD0vPCg/Olx3KzopP3RhYmxlUGFydHMuKj8+KFtc''@;'; put 'put ''c1xTXSo/KTxcLyg/Olx3KzopP3RhYmxlUGFydHM+LyxNRD0vPCg/Olx3Oik/cGFnZVNldHVwW14+XSpcLz4vLHJqPS88KD86XHc6KT9yb3dCcmVha3NbXj5dKig/OltcL118PihbXHNcU10qKTxcLyg/Olx3Oik/cm93QnJlYWtzKT4vLGxiPS88KD86XHc6KT9jb2xCcmVha3NbXj5dKig/Oltc''@;'; put 'put ''L118PihbXHNcU10qKTxcLyg/Olx3Oik/Y29sQnJlYWtzKT4vLGo1PS88KD86XHc6KT9oZWFkZXJGb290ZXJbXj5dKig/OltcL118PihbXHNcU10qKTxcLyg/Olx3Oik/aGVhZGVyRm9vdGVyKT4vLGhTPS88KD86XHc6KT9wcmludE9wdGlvbnNcYltePlwvXSpcLz4vO3ZhciBmUz0vPCg/Olx3''@;'; put 'put ''Oik/dGFibGVQYXJ0XGJbXlwvPl0qW1wvXT8+L2c7ZnVuY3Rpb24gY2IoUyxSLGssRyl7dmFyIFE9dnIoUyk7ay5TaGVldHNbR118fChrLlNoZWV0c1tHXT17fSksUS5jb2RlTmFtZSYmKGsuU2hlZXRzW0ddLkNvZGVOYW1lPVEuY29kZU5hbWUpfXZhciBtUz0vPCg/Olx3Oik/dGFiQ29sb3Jb''@;'; put 'put ''Xj5dKltcL10/Pi8saWo9LzwoPzpcdzopP3BhZ2VTZXRVcFByW14+XSpbXC9dPz4vLGFqPS88KD86XHc6KT9vdXRsaW5lUHJbXj5dKltcL10/Pi8sVEQ9e2Rpc3BsYXllZDoiYXNEaXNwbGF5ZWQiLGVuZDoiYXRFbmQiLG5vbmU6Im5vbmUifSxBRD1WZShURCksa0Q9e2Rpc3BsYXllZDoiZGlz''@;'; put 'put ''cGxheWVkIixub25lOiJibGFuayIsZGFzaDoiZGFzaCIsIm4vYSI6Ik5BIn0sREQ9VmUoa0QpLEYwPS88KD86XHc6KT9icmtbXj5dKlwvPi9nLGJTPVsib2JqZWN0cyIsInNjZW5hcmlvcyIsInNlbGVjdExvY2tlZENlbGxzIiwic2VsZWN0VW5sb2NrZWRDZWxscyJdLExEPVsiZm9ybWF0Q29s''@;'; put 'put ''dW1ucyIsImZvcm1hdFJvd3MiLCJmb3JtYXRDZWxscyIsImluc2VydENvbHVtbnMiLCJpbnNlcnRSb3dzIiwiaW5zZXJ0SHlwZXJsaW5rcyIsImRlbGV0ZUNvbHVtbnMiLCJkZWxldGVSb3dzIiwic29ydCIsImF1dG9GaWx0ZXIiLCJwaXZvdFRhYmxlcyJdO2Z1bmN0aW9uIFBEKFMpe3ZhciBS''@;'; put 'put ''PXt9O3JldHVyblsibGVmdCIsInJpZ2h0IiwidG9wIiwiYm90dG9tIiwiaGVhZGVyIiwiZm9vdGVyIl0uZm9yRWFjaChmdW5jdGlvbihrKXtTW2tdJiYoUltrXT1wYXJzZUZsb2F0KFNba10pKX0pLFJ9dmFyIHVoPXtDdXN0b206ImN1c3RvbSIsRGF0ZToiZGF0ZSIsVGltZToidGltZSIsTGVu''@;'; put 'put ''Z3RoOiJ0ZXh0TGVuZ3RoIixMaXN0OiJsaXN0IixEZWNpbWFsOiJkZWNpbWFsIixXaG9sZToid2hvbGUiLEFueToibm9uZSJ9LF9TPVZlKHVoKSx1Yj17SU46ImJldHdlZW4iLE9UOiJub3RCZXR3ZWVuIixFUToiZXF1YWwiLE5FOiJub3RFcXVhbCIsR1Q6ImdyZWF0ZXJUaGFuIixMVDoibGVz''@;'; put 'put ''c1RoYW4iLEdFOiJncmVhdGVyVGhhbk9yRXF1YWwiLExFOiJsZXNzVGhhbk9yRXF1YWwifSxGRD1WZSh1Yik7ZnVuY3Rpb24gd1MoUyxSLGspe3ZhciBHPVtdLFE9e30sb2U9IiIsZ2U9ITEscGU9MCx5ZT0wO3JldHVybiBTLnJlcGxhY2UoZW4sZnVuY3Rpb24oUGUsTmUpe3ZhciBZZT12cihQ''@;'; put 'put ''ZSk7c3dpdGNoKFduKFllWzBdKSl7Y2FzZSI8ZGF0YVZhbGlkYXRpb25zIjpjYXNlIjxkYXRhVmFsaWRhdGlvbnM+IjpjYXNlIjwvZGF0YVZhbGlkYXRpb25zPiI6YnJlYWs7Y2FzZSI8ZGF0YVZhbGlkYXRpb24iOlE9e3Q6X1NbWWUudHlwZXx8Im5vbmUiXSxyZWY6KG9lPVllLnNxcmVmKT9v''@;'; put 'put ''ZS5pbmRleE9mKCIgIik+LTE/b2U6b28ob2UpOiIifSxZZS5vcGVyYXRvciYmKFEub3A9RkRbWWUub3BlcmF0b3JdKSxRLmJsYW5rPSEhWWUuYWxsb3dCbGFuayYmdGkoWWUuYWxsb3dCbGFuayksKCFZZS5zaG93SW5wdXRNZXNzYWdlfHwhdGkoWWUuc2hvd0lucHV0TWVzc2FnZSkpJiYoUS5p''@;'; put 'put ''bnB1dD0hMSksWWUucHJvbXB0VGl0bGUmJigoUS5pbnB1dHx8KFEuaW5wdXQ9e30pKS50aXRsZT1RcihZZS5wcm9tcHRUaXRsZSkpLFllLnByb21wdCYmKChRLmlucHV0fHwoUS5pbnB1dD17fSkpLm1lc3NhZ2U9UXIoWWUucHJvbXB0KSksKCFZZS5zaG93RXJyb3JNZXNzYWdlfHwhdGkoWWUu''@;'; put 'put ''c2hvd0Vycm9yTWVzc2FnZSkpJiYoUS5lcnJvcj0hMSksWWUuZXJyb3JUaXRsZSYmKChRLmVycm9yfHwoUS5lcnJvcj17fSkpLnRpdGxlPVFyKFllLmVycm9yVGl0bGUpKSxZZS5lcnJvciYmKChRLmVycm9yfHwoUS5lcnJvcj17fSkpLm1lc3NhZ2U9UXIoWWUuZXJyb3IpKSxRLmVycm9yP1Eu''@;'; put 'put ''ZXJyb3Iuc3R5bGU9WWUuZXJyb3JTdHlsZXx8InN0b3AiOlllLmVycm9yU3R5bGUmJihRLmVycm9yPXtzdHlsZTpZZS5lcnJvclN0eWxlfSksUS50JiZHLnB1c2goUSk7YnJlYWs7Y2FzZSI8ZGF0YVZhbGlkYXRpb24vPiI6Y2FzZSI8L2RhdGFWYWxpZGF0aW9uPiI6YnJlYWs7Y2FzZSI8c3Fy''@;'; put 'put ''ZWY+Ijp5ZT1OZStQZS5sZW5ndGg7YnJlYWs7Y2FzZSI8L3NxcmVmPiI6b2U9Uy5zbGljZSh5ZSxOZSksUS5yZWY9b2U/b2UuaW5kZXhPZigiICIpPi0xP29lOm9vKG9lKToiIjticmVhaztjYXNlIjxmPiI6Y2FzZSI8Zm9ybXVsYTEiOmNhc2UiPGZvcm11bGExPiI6Y2FzZSI8Zm9ybXVsYTIi''@;'; put 'put ''OmNhc2UiPGZvcm11bGEyPiI6cGU9TmUrUGUubGVuZ3RoO2JyZWFrO2Nhc2UiPC9mb3JtdWxhMT4iOmNhc2UiPC9mb3JtdWxhMj4iOmlmKGspYnJlYWs7Y2FzZSI8L2Y+Ijp2YXIgZXQ9UXIoZ28oUy5zbGljZShwZSxOZSkpKTtzd2l0Y2goUS50KXtjYXNlIkxpc3QiOmlmKFEubHx8US5mKWJy''@;'; put 'put ''ZWFrO2lmKDM0PT1ldC5jaGFyQ29kZUF0KDApKXtRLmw9ZXQuc2xpY2UoMSwtMSkuc3BsaXQoIiwiKTticmVha31jYXNlIkN1c3RvbSI6bnVsbD09US5mJiYoUS5mPWV0KTticmVhaztjYXNlIkRhdGUiOmNhc2UiRGVjaW1hbCI6Y2FzZSJMZW5ndGgiOmNhc2UiVGltZSI6Y2FzZSJXaG9sZSI6''@;'; put 'put ''US5vcHx8KFEub3A9IklOIiksbnVsbD09US52P1Eudj1pc05hTigrZXQpP2V0OitldDooUS5taW49US52LFEubWF4PWlzTmFOKCtldCk/ZXQ6K2V0LGRlbGV0ZSBRLnYpfWJyZWFrO2Nhc2UiPGV4dExzdCI6Y2FzZSI8ZXh0THN0PiI6Y2FzZSI8L2V4dExzdD4iOmJyZWFrO2Nhc2UiPGV4dCI6''@;'; put 'put ''Z2U9ITA7YnJlYWs7Y2FzZSI8L2V4dD4iOmdlPSExO2JyZWFrO2RlZmF1bHQ6aWYoUiYmUi5XVEYmJiFnZSl0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCAiK1llWzBdKyIgaW4gZGF0YSB2YWxpZGF0aW9uIil9cmV0dXJuIFBlfSksR312YXIgZjg9e0lOOiJjb250YWluc1RleHQiLE9U''@;'; put 'put ''OiJub3RDb250YWluc1RleHQiLFNUOiJiZWdpbnNXaXRoIixORDoiZW5kc1dpdGgifSxkYj1WZShmOCkseWo9e0xNOiJsYXN0TW9udGgiLExTOiJsYXN0N0RheXMiLExXOiJsYXN0V2VlayIsTk06Im5leHRNb250aCIsTlc6Im5leHRXZWVrIixUTToidGhpc01vbnRoIixUVzoidGhpc1dlZWsi''@;'; put 'put ''LFREOiJ0b2RheSIsVE86InRvbW9ycm93IixZUzoieWVzdGVyZGF5In0sTkQ9VmUoeWopO2Z1bmN0aW9uIHA4KFMpe3ZhciBSPXt9O3JldHVybiBudWxsIT1TLnZhbCYmKGlzTmFOKCtTLnZhbCk/Ui5mPVMudmFsOlIudj0rUy52YWwpLFIudD1TLnR5cGUsUn1mdW5jdGlvbiBXNChTKXtyZXR1''@;'; put 'put ''cm4gUHIoImNmdm8iLG51bGwse3R5cGU6Uy50LHZhbDpudWxsIT1TLnY/Uy52OkxyKFMuZil9KX1mdW5jdGlvbiB6NShTLFIsayxHKXt2YXIgUT1wOChTKTtyZXR1cm4gUS5jb2xvcj1nayhSLGssRyksUX1mdW5jdGlvbiB2MihTLFIsayxHLFEpe3ZhciBvZT0oUy5tYXRjaCgvc3FyZWY9Iihb''@;'; put 'put ''XHc6JCBdKikiLyl8fFtdKVsxXTtyZXR1cm4gZnVuY3Rpb24gQ1MoUyxSLGssRyxRLG9lKXt2YXIgZ2U9ITEscGU9W10seWU9e2Y6W119LFBlPTAsTmU9MCxZZT17Y2Z2b3M6W10sY29sb3JzOltdfSxldD17fSxjdD0tMSxFdD0wLGF0PSIiO3JldHVybiBTLnJlcGxhY2UoZW4sZnVuY3Rpb24o''@;'; put 'put ''YnQsanQpe3ZhciBrdD12cihidCk7c3dpdGNoKFduKGt0WzBdKSl7Y2FzZSI8Y29uZGl0aW9uYWxGb3JtYXR0aW5nIjpjYXNlIjwvY29uZGl0aW9uYWxGb3JtYXR0aW5nPiI6YnJlYWs7Y2FzZSI8Y2ZSdWxlIjpjYXNlIjxjZlJ1bGU+IjppZihOZT1qdCxldD1rdCx5ZT17cmVmOlIsZjpbXX0s''@;'; put 'put ''IWJ0Lm1hdGNoKC9cLz4vKSlicmVhaztjYXNlIjwvY2ZSdWxlPiI6c3dpdGNoKGV0LmR4ZklkJiZRJiZRLkRYRiYmKHllLnM9US5EWEZbK2V0LmR4ZklkXSksZXQudHlwZSl7Y2FzZSJkdXBsaWNhdGVWYWx1ZXMiOnllLnQ9ImR1cCI7YnJlYWs7Y2FzZSJ1bmlxdWVWYWx1ZXMiOnllLnQ9InVu''@;'; put 'put ''aXF1ZSI7YnJlYWs7Y2FzZSJjb250YWluc0JsYW5rcyI6eWUudD0iYmxhbmsiLHllLnY9ITA7YnJlYWs7Y2FzZSJub3RDb250YWluc0JsYW5rcyI6eWUudD0iYmxhbmsiLHllLnY9ITE7YnJlYWs7Y2FzZSJjb250YWluc0Vycm9ycyI6eWUudD0iZXJyb3IiLHllLnY9ITA7YnJlYWs7Y2FzZSJu''@;'; put 'put ''b3RDb250YWluc0Vycm9ycyI6eWUudD0iZXJyb3IiLHllLnY9ITE7YnJlYWs7Y2FzZSJjZWxsSXMiOnN3aXRjaChldC5vcGVyYXRvcil7Y2FzZSJjb250YWluc1RleHQiOmNhc2Uibm90Q29udGFpbnMiOmNhc2UiYmVnaW5zV2l0aCI6Y2FzZSJlbmRzV2l0aCI6aWYoeWUudD0idGV4dCIseWUu''@;'; put 'put ''b3A9ZGJbZXQub3BlcmF0b3JdLG51bGw9PWV0LnRleHQpdGhyb3cgbmV3IEVycm9yKCJDRiBUZXh0IFJ1bGUgIit5ZS5vcCsiIG1pc3NpbmcgdGV4dCIpO3llLnY9ZXQudGV4dCx5ZS5mPXllLmZbMF0sbnVsbD09eWUuZiYmZGVsZXRlIHllLmY7YnJlYWs7ZGVmYXVsdDp5ZS50PSJ2YWwiLHll''@;'; put 'put ''Lm9wPUZEW2V0Lm9wZXJhdG9yXSwxPT15ZS5mLmxlbmd0aD9pc05hTigreWUuZlswXSk/eWUuZj15ZS5mWzBdOih5ZS52PSt5ZS5mWzBdLGRlbGV0ZSB5ZS5mKTooeWUubWluPWlzTmFOKCt5ZS5mWzBdKT95ZS5mWzBdOit5ZS5mWzBdLHllLm1heD1pc05hTigreWUuZlsxXSk/eWUuZlsxXTor''@;'; put 'put ''eWUuZlsxXSxkZWxldGUgeWUuZil9YnJlYWs7Y2FzZSJleHByZXNzaW9uIjp5ZS50PSJmb3JtdWxhIix5ZS5mPXllLmZbMF07YnJlYWs7Y2FzZSJjb250YWluc1RleHQiOmNhc2Uibm90Q29udGFpbnNUZXh0IjpjYXNlImJlZ2luc1dpdGgiOmNhc2UiZW5kc1dpdGgiOmlmKHllLnQ9InRleHQi''@;'; put 'put ''LHllLm9wPWRiW2V0LnR5cGVdLG51bGw9PWV0LnRleHQmJnllLmYubGVuZ3RoPDIpdGhyb3cgbmV3IEVycm9yKCJDRiBUZXh0IFJ1bGUgIit5ZS5vcCsiIG1pc3NpbmcgdGV4dCIpO3llLnY9bnVsbCE9ZXQudGV4dD9ldC50ZXh0OnllLmZbMV0ubWF0Y2goLyIuKiIvKT95ZS5mWzFdLnNsaWNl''@;'; put 'put ''KDEsLTEpOnllLmZbMV0seWUuZj15ZS5mWzBdLG51bGw9PXllLmYmJmRlbGV0ZSB5ZS5mO2JyZWFrO2Nhc2UiY29sb3JTY2FsZSI6aWYoeWUudD0ic2NhbGUiLCF5ZS5jb2xvclNjYWxlKXRocm93IG5ldyBFcnJvcigibWlzc2luZyBjb2xvclNjYWxlIik7eWUuY21pbj16NSgoWWU9eWUuY29s''@;'; put 'put ''b3JTY2FsZSkuY2Z2b3NbMF0sWWUuY29sb3JzWzBdLFEsRyksMz09WWUuY2Z2b3MubGVuZ3RoJiYoeWUuY21pZD16NShZZS5jZnZvc1sxXSxZZS5jb2xvcnNbMV0sUSxHKSkseWUuY21heD16NShZZS5jZnZvc1tZZS5jZnZvcy5sZW5ndGgtMV0sWWUuY29sb3JzW1llLmNmdm9zLmxlbmd0aC0x''@;'; put 'put ''XSxRLEcpO2JyZWFrO2Nhc2UiZGF0YUJhciI6aWYoeWUudD0iYmFyIiwheWUuZGF0YUJhcil0aHJvdyBuZXcgRXJyb3IoIm1pc3NpbmcgZGF0YUJhciIpOyhZZT15ZS5kYXRhQmFyKS5jb2xvcnNbMF0mJih5ZS5jb2xvcj1nayhZZS5jb2xvcnNbMF0sUSxHKSkseWUuY21pbj1wOChZZS5jZnZv''@;'; put 'put ''c1swXSkseWUuY21heD1wOChZZS5jZnZvc1sxXSk7YnJlYWs7Y2FzZSJpY29uU2V0IjppZih5ZS50PSJpY29uIiwheWUuaWNvblNldCl0aHJvdyBuZXcgRXJyb3IoIm1pc3NpbmcgaWNvblNldCIpO3llLnRocmVzaD0oWWU9eWUuaWNvblNldCkuY2Z2b3MubWFwKGZ1bmN0aW9uKE90KXtyZXR1''@;'; put 'put ''cm4gcDgoT3QpfSkseWUudj1ZZS50YWcmJlllLnRhZy5pY29uU2V0fHwiM1RyYWZmaWNMaWdodHMxIix5ZS5yZXY9dGkoWWUudGFnLnJldmVyc2V8fCJmYWxzZSIpLHllLnBjdD10aShZZS50YWcucGVyY2VudHx8InRydWUiKSx5ZS5oaWRkZW49IXRpKFllLnRhZy5zaG93VmFsdWV8fCJ0cnVl''@;'; put 'put ''Iik7YnJlYWs7Y2FzZSJ0aW1lUGVyaW9kIjp5ZS50PSJkYXRlIix5ZS5vcD1ORFtldC50aW1lUGVyaW9kXTticmVhaztjYXNlImFib3ZlQXZlcmFnZSI6eWUudD0iYXZnIix5ZS5vcD0iMCI9PWV0LmFib3ZlQXZlcmFnZT8iTCI6IkciLHllLm9wKz1ldC5zdGREZXY/ZXQuc3RkRGV2OnRpKGV0''@;'; put 'put ''LmVxdWFsQXZlcmFnZXx8IjAiKT8iRSI6IlQiO2JyZWFrO2Nhc2UidG9wMTAiOnllLnQ9InJhbmsiLHllLm9wPSh0aShldC5ib3R0b218fCIwIik/IkIiOiJUIikrKHRpKGV0LnBlcmNlbnR8fCIwIik/IlAiOiJWIikseWUudj0rZXQucmFuazticmVhaztkZWZhdWx0OnRocm93IlVuc3VwcG9y''@;'; put 'put ''dGVkIENGIFR5cGUgIitldC50eXBlfWlmKGRlbGV0ZSB5ZS5jb2xvclNjYWxlLGRlbGV0ZSB5ZS5kYXRhQmFyLGRlbGV0ZSB5ZS5pY29uU2V0LCF5ZS50KXRocm93IGNvbnNvbGUubG9nKFMuc2xpY2UoTmUsanQrYnQubGVuZ3RoKSksImJhZCBDRiBydWxlIjtudWxsIT15ZS5mJiYheWUuZi5s''@;'; put 'put ''ZW5ndGgmJmRlbGV0ZSB5ZS5mLHllLmRlbHx8cGUucHVzaCh5ZSk7YnJlYWs7Y2FzZSI8Zm9ybXVsYSI6Y2FzZSI8Zm9ybXVsYT4iOlBlPWp0K2J0Lmxlbmd0aDticmVhaztjYXNlIjwvZm9ybXVsYT4iOnllLmYucHVzaChRcihTLnNsaWNlKFBlLGp0KSkpO2JyZWFrO2Nhc2UiPGYiOmNhc2Ui''@;'; put 'put ''PGY+IjpQZT1qdCtidC5sZW5ndGg7YnJlYWs7Y2FzZSI8L2Y+Ijp5ZS5mLnB1c2goUXIoUy5zbGljZShQZSxqdCkpKTticmVhaztjYXNlIjxzcXJlZj4iOkV0PWp0K2J0Lmxlbmd0aDticmVhaztjYXNlIjwvc3FyZWY+IjphdD1TLnNsaWNlKEV0LGp0KSxSPWF0P2F0LmluZGV4T2YoIiAiKT4t''@;'; put 'put ''MT9hdDpvbyhhdCk6IiIseWUucmVmPVIscGUuZm9yRWFjaChmdW5jdGlvbihPdCl7T3QucmVmPVJ9KTticmVhaztjYXNlIjxjb2xvclNjYWxlIjpjYXNlIjxjb2xvclNjYWxlPiI6Y2FzZSI8ZGF0YUJhciI6Y2FzZSI8ZGF0YUJhcj4iOmNhc2UiPGljb25TZXQiOmNhc2UiPGljb25TZXQ+IjpZ''@;'; put 'put ''ZT17Y2Z2b3M6W10sY29sb3JzOltdLHRhZzprdH0sUGU9anQrYnQubGVuZ3RoO2JyZWFrO2Nhc2UiPC9jb2xvclNjYWxlPiI6eWUuY29sb3JTY2FsZT1ZZTticmVhaztjYXNlIjwvZGF0YUJhcj4iOnllLmRhdGFCYXI9WWU7YnJlYWs7Y2FzZSI8L2ljb25TZXQ+Ijp5ZS5pY29uU2V0PVllO2Jy''@;'; put 'put ''ZWFrO2Nhc2UiPGNmdm8iOmNhc2UiPGNmdm8vPiI6WWUuY2Z2b3MucHVzaChrdCk7YnJlYWs7Y2FzZSI8L2Nmdm8+IjpicmVhaztjYXNlIjxjb2xvciI6WWUuY29sb3JzLnB1c2goa3QpO2JyZWFrO2Nhc2UiPC9jb2xvcj4iOmNhc2UiPGV4dExzdCI6Y2FzZSI8ZXh0THN0PiI6Y2FzZSI8L2V4''@;'; put 'put ''dExzdD4iOmJyZWFrO2Nhc2UiPGV4dCI6Z2U9ITA7YnJlYWs7Y2FzZSI8L2V4dD4iOmdlPSExO2JyZWFrO2Nhc2UiPG5lZ2F0aXZlRmlsbENvbG9yIjpjYXNlIjxheGlzQ29sb3IiOmNhc2UiPGJvcmRlckNvbG9yIjpjYXNlIjxuZWdhdGl2ZUJvcmRlckNvbG9yIjpjYXNlIjxjZkljb24iOnll''@;'; put 'put ''LmRlbD0hMDticmVhaztjYXNlIjxkeGY+IjpnZT0hMCxjdD1qdDticmVhaztjYXNlIjwvZHhmPiI6Z2U9ITEseWUucz1MNChTLnNsaWNlKGN0LGp0K2J0Lmxlbmd0aCksUSxHLGspO2JyZWFrO2RlZmF1bHQ6aWYoayYmay5XVEYpe2lmKG9lKWJyZWFrO2lmKCFnZSl0aHJvdyBuZXcgRXJyb3Io''@;'; put 'put ''InVucmVjb2duaXplZCAiK2t0WzBdKyIgaW4gY29uZGZtdCIpfX1yZXR1cm4gYnR9KSxwZX0oUyxvZSxSLGssRyxRKX12YXIgU1M9LzwoPzpcdzopP3NoZWV0Vmlldyg/OltePmEtel1bXj5dKik/XC8/Pi9nO2Z1bmN0aW9uIG04KFMsUil7dmFyIGs9MCxHPTAsUT0wLG9lPTA7aWYoIVJ8fCFS''@;'; put 'put ''LkNlbGxYZilyZXR1cm4gbnVsbDt2YXIgZ2U9Ui5DZWxsWGZbU107bnVsbCE9Z2UmJihudWxsIT1nZS5udW1GbXRJZCYmKGs9Z2UubnVtRm10SWQpLG51bGwhPWdlLmZpbGxJZCYmKEc9Z2UuZmlsbElkKSxudWxsIT1nZS5mb250SWQmJihRPWdlLmZvbnRJZCksbnVsbCE9Z2UuYm9yZGVySWQm''@;'; put 'put ''JihvZT1nZS5ib3JkZXJJZCkpO3ZhciBwZT17dDoieiJ9O3RyeXtKMyhwZSxrLEcsUSxvZSx7V1RGOjEsY2VsbFN0eWxlczohMH0sMCxSKX1jYXRjaHt9cmV0dXJuIHBlLnN9ZnVuY3Rpb24gVTUoUyxSLGssRyl7aWYodm9pZCAwPT09Uy52JiZ2b2lkIDA9PT1TLmYmJm51bGw9PVMucyYmIVMu''@;'; put 'put ''Y3x8InoiPT09Uy50JiYhUy5jJiYhRy5zaGVldFN0dWJzKXJldHVybiIiO3ZhciBRPSIiLG9lPVMudCxnZT1TLnY7aWYoInoiIT09Uy50KXN3aXRjaChTLnQpe2Nhc2UiYiI6UT1TLnY/IjEiOiIwIjticmVhaztjYXNlIm4iOlE9IiIrUy52O2JyZWFrO2Nhc2UiZSI6UT1NY1tTLnZdO2JyZWFr''@;'; put 'put ''O2Nhc2UiZCI6RyYmRy5jZWxsRGF0ZXM/UT1IZShTLnYsLTEpLnRvSVNPU3RyaW5nKCk6KChTPXF0KFMpKS50PSJuIixRPSIiKyhTLnY9UWUoSGUoUy52KSkpKSx0eXBlb2YgUy56PiJ1IiYmKFMuej1BLl90YWJsZVsxNF0pO2JyZWFrO2RlZmF1bHQ6UT1TLnZ9dmFyIHBlPSJ6Ij09Uy50PyIi''@;'; put 'put ''OkhhKCJ2IixMcihRKSkseWU9e3I6Un0sUGU9Rz9sMChHLmNlbGxYZnMsRy5jZWxsU3R5bGVYZnMsUyxHKTowO3N3aXRjaCgwIT09UGUmJih5ZS5zPVBlKSxTLnQpe2Nhc2UibiI6Y2FzZSJ6IjpicmVhaztjYXNlImQiOnllLnQ9ImQiO2JyZWFrO2Nhc2UiYiI6eWUudD0iYiI7YnJlYWs7Y2Fz''@;'; put 'put ''ZSJlIjp5ZS50PSJlIjticmVhaztkZWZhdWx0OmlmKG51bGw9PVMudil7ZGVsZXRlIFMudDticmVha31pZihHJiZHLmJvb2tTU1Qpe3BlPUhhKCJ2IiwiIithUyhHLlN0cmluZ3MsUy52LFMuUj9TLnI9UXMoUy5SKTpudWxsLEcucmV2U3RyaW5ncykpLHllLnQ9InMiO2JyZWFrfUFycmF5Lmlz''@;'; put 'put ''QXJyYXkoUy5SKT8ocGU9Ijxpcz4iK1FzKFMuUikrIjwvaXM+Iix5ZS50PSJpbmxpbmVTdHIiKTp5ZS50PSJzdHIifWlmKFMudCE9b2UmJihTLnQ9b2UsUy52PWdlKSxTLmYpe3ZhciBOZT1TLkYmJlMuRi5zbGljZSgwLFIubGVuZ3RoKT09Uj97dDoiYXJyYXkiLHJlZjpTLkZ9Om51bGw7cGU9''@;'; put 'put ''UHIoImYiLExyKFMuZiksTmUpKyhudWxsIT1TLnY/cGU6IiIpfXJldHVybiBTLmwmJmtbIiFsaW5rcyJdLnB1c2goW1IsUy5sXSksUy5jJiZrWyIhY29tbWVudHMiXS5wdXNoKFtSLFMuY10pLFByKCJjIixwZSx5ZSl9dmFyIHY4PWZ1bmN0aW9uKCl7dmFyIFM9LzwoPzpcdys6KT9jWyBcLz5d''@;'; put 'put ''LyxSPS88XC8oPzpcdys6KT9yb3c+LyxrPS9yPVsiJ10oW14iJ10qKVsiJ10vLEc9LzwoPzpcdys6KT9pcz4oW1xTXHNdKj8pPFwvKD86XHcrOik/aXM+LyxRPS9yZWY9WyInXShbXiInXSopWyInXS8sb2U9RDAoInYiKSxnZT1EMCgiZiIpO3JldHVybiBmdW5jdGlvbih5ZSxQZSxOZSxZZSxl''@;'; put 'put ''dCxjdCxFdCl7Zm9yKHZhciBTbixscixmcixicixMaSxhdD0wLGJ0PSIiLGp0PVtdLGt0PVtdLE90PTAsS3Q9MCxUbj0wLHJyPSIiLFhuPTAsQm49MCxlcj0wLE1pPTAsRmk9MCxuYT0wLGNhPUFycmF5LmlzQXJyYXkoRXQuQ2VsbFhmKSxrcj1bXSxWbj1bXSxCcj1BcnJheS5pc0FycmF5KE5l''@;'; put 'put ''KSxfcj1bXSxGbj17fSxqcj0hMSxaaT15ZS5zcGxpdChSKSx5aT0hIVllLnNoZWV0U3R1YnMsX2E9ISFZZS5jZWxsSFRNTCxzbz0hKCExPT09WWUuY2VsbFRleHQmJiFZZS5jZWxsTkYmJiFZZS5jZWxsU3R5bGVzKSxpYT0wLExvPVppLmxlbmd0aDtpYSE9TG87KytpYSl7dmFyIE9hPShidD1a''@;'; put 'put ''aVtpYV0udHJpbSgpKS5sZW5ndGg7aWYoMCE9PU9hKXt2YXIgaG89MDtlOmZvcihhdD0wO2F0PE9hOysrYXQpc3dpdGNoKGJ0W2F0XSl7Y2FzZSI+IjppZigiLyIhPWJ0W2F0LTFdKXsrK2F0O2JyZWFrIGV9WWUuY2VsbFN0eWxlcyYmbnVsbCE9KGxyPXZyKGJ0LnNsaWNlKGhvLGF0KSwhMCkp''@;'; put 'put ''LnImJnBhcnNlSW50KGxyLnIsMTApJiYoWG49cGFyc2VJbnQobHIuciwxMCksRm49e30sanI9ITEsbHIuaHQmJihqcj0hMCxGbi5ocHQ9cGFyc2VGbG9hdChsci5odCksRm4uaHB4PXNoKEZuLmhwdCkpLGxyLmR5RGVzY2VudCYmKGpyPSEwLEZuLmR5RGVzY2VudD1sci5keURlc2NlbnQpLCIx''@;'; put 'put ''Ij09bHIuaGlkZGVuJiYoanI9ITAsRm4uaGlkZGVuPSEwKSxudWxsIT1sci5vdXRsaW5lTGV2ZWwmJihqcj0hMCxGbi5sZXZlbD0rbHIub3V0bGluZUxldmVsKSxsci5zJiZFdCYmRXQuQ2VsbFhmJiYoanI9ITAsRm4ucz1tOChsci5zLEV0KSksanImJihfcltYbi0xXT1GbikpO2JyZWFrO2Nh''@;'; put 'put ''c2UiPCI6aG89YXR9aWYoaG8+PWF0KWJyZWFrO2lmKFhuPW51bGwhPShscj12cihidC5zbGljZShobyxhdCksITApKS5yP3BhcnNlSW50KGxyLnIsMTApOlhuKzEsQm49LTEsIShZZS5zaGVldFJvd3MmJlllLnNoZWV0Um93czxYbikpe1llLm5vZGltfHwoZXQucy5yPlhuLTEmJihldC5zLnI9''@;'; put 'put ''WG4tMSksZXQuZS5yPFhuLTEmJihldC5lLnI9WG4tMSkpO3ZhciBKYT17dDoicm93Iixyb3c6W10sUjpYbi0xLGlkeDpQZX07WWUuY2VsbFN0eWxlcyYmKEZuPXt9LGpyPSExLGxyLmh0JiYoanI9ITAsRm4uaHB0PXBhcnNlRmxvYXQobHIuaHQpLEZuLmhweD1zaChGbi5ocHQpKSxsci5keURl''@;'; put 'put ''c2NlbnQmJihqcj0hMCxGbi5keURlc2NlbnQ9bHIuZHlEZXNjZW50KSwiMSI9PWxyLmhpZGRlbiYmKGpyPSEwLEZuLmhpZGRlbj0hMCksbnVsbCE9bHIub3V0bGluZUxldmVsJiYoanI9ITAsRm4ubGV2ZWw9K2xyLm91dGxpbmVMZXZlbCksbHIucyYmKGpyPSEwLEZuLnM9bTgobHIucyxFdCkp''@;'; put 'put ''LGpyJiYoWWUuY2FsbGJhY2s/SmEucHJvcHM9Rm46X3JbWG4tMV09Rm4pKSxqdD1idC5zbGljZShhdCkuc3BsaXQoUyk7Zm9yKHZhciBCaT0wO0JpIT1qdC5sZW5ndGgmJiI8Ij09anRbQmldLnRyaW0oKS5jaGFyQXQoMCk7KytCaSk7Zm9yKGp0PWp0LnNsaWNlKEJpKSxhdD0wO2F0IT1qdC5s''@;'; put 'put ''ZW5ndGg7KythdClpZigwIT09KGJ0PWp0W2F0XS50cmltKCkpLmxlbmd0aCl7aWYoa3Q9YnQubWF0Y2goayksT3Q9YXQsS3Q9MCxUbj0wLGJ0PSI8YyAiKygiPCI9PWJ0LnNsaWNlKDAsMSk/Ij4iOiIiKStidCxudWxsIT1rdCYmMj09PWt0Lmxlbmd0aCl7Zm9yKE90PTAscnI9a3RbMV0sS3Q9''@;'; put 'put ''MDtLdCE9cnIubGVuZ3RoJiYhKChUbj1yci5jaGFyQ29kZUF0KEt0KS02NCk8MXx8VG4+MjYpOysrS3QpT3Q9MjYqT3QrVG47Qm49LS1PdH1lbHNlKytCbjtmb3IoS3Q9MDtLdCE9YnQubGVuZ3RoJiY2MiE9PWJ0LmNoYXJDb2RlQXQoS3QpOysrS3QpO2lmKCsrS3QsKGxyPXZyKGJ0LnNsaWNl''@;'; put 'put ''KDAsS3QpLCEwKSkucnx8KGxyLnI9cWkoe3I6WG4tMSxjOkJufSkpLFNuPXt0OiIifSxudWxsIT0oa3Q9KHJyPWJ0LnNsaWNlKEt0KSkubWF0Y2gob2UpKSYmIiIhPT1rdFsxXSYmKFNuLnY9UXIoa3RbMV0pKSxZZS5jZWxsRm9ybXVsYSl7aWYobnVsbCE9KGt0PXJyLm1hdGNoKGdlKSkmJiIi''@;'; put 'put ''IT09a3RbMV0pe2lmKFNuLmY9UXIoZ28oa3RbMV0pKS5yZXBsYWNlKC9cclxuL2csIlxuIiksWWUueGxmbnx8KFNuLmY9RUIoU24uZikpLGt0WzBdLmluZGV4T2YoJ3Q9ImFycmF5IicpPi0xKVNuLkY9KHJyLm1hdGNoKFEpfHxbXSlbMV0sU24uRi5pbmRleE9mKCI6Iik+LTEmJmtyLnB1c2go''@;'; put 'put ''W29vKFNuLkYpLFNuLkZdKTtlbHNlIGlmKGt0WzBdLmluZGV4T2YoJ3Q9InNoYXJlZCInKT4tMSl7YnI9dnIoa3RbMF0pO3ZhciBJcz1RcihnbyhrdFsxXSkpO1llLnhsZm58fChJcz1FQihJcykpLFZuW3BhcnNlSW50KGJyLnNpLDEwKV09W2JyLElzLGxyLnJdfX1lbHNlKGt0PXJyLm1hdGNo''@;'; put 'put ''KC88ZltePl0qXC8+LykpJiZWblsoYnI9dnIoa3RbMF0pKS5zaV0mJihTbi5mPWRuZShWbltici5zaV1bMV0sVm5bYnIuc2ldWzJdLGxyLnIpKTt2YXIgUG49Tm8obHIucik7Zm9yKEt0PTA7S3Q8a3IubGVuZ3RoOysrS3QpUG4ucj49a3JbS3RdWzBdLnMuciYmUG4ucjw9a3JbS3RdWzBdLmUu''@;'; put 'put ''ciYmUG4uYz49a3JbS3RdWzBdLnMuYyYmUG4uYzw9a3JbS3RdWzBdLmUuYyYmKFNuLkY9a3JbS3RdWzFdKX1pZihudWxsPT1sci50JiZ2b2lkIDA9PT1Tbi52KWlmKFNuLmZ8fFNuLkYpU24udj0wLFNuLnQ9Im4iO2Vsc2V7aWYoIXlpKWNvbnRpbnVlO1NuLnQ9InoifWVsc2UgU24udD1sci50''@;'; put 'put ''fHwibiI7c3dpdGNoKGV0LnMuYz5CbiYmKGV0LnMuYz1CbiksZXQuZS5jPEJuJiYoZXQuZS5jPUJuKSxTbi50KXtjYXNlIm4iOmlmKCIiPT1Tbi52fHxudWxsPT1Tbi52KXtpZigheWkpY29udGludWU7U24udD0ieiJ9ZWxzZSBTbi52PXBhcnNlRmxvYXQoU24udik7YnJlYWs7Y2FzZSJzIjpp''@;'; put 'put ''Zih0eXBlb2YgU24udj4idSIpe2lmKCF5aSljb250aW51ZTtTbi50PSJ6In1lbHNlIGZyPWw4W3BhcnNlSW50KFNuLnYsMTApXSxTbi52PWZyLnQsU24ucj1mci5yLGZyLlImJihTbi5SPWZyLlIpLF9hJiYoU24uaD1mci5oKTticmVhaztjYXNlInN0ciI6U24udD0icyIsU24udj1udWxsIT1T''@;'; put 'put ''bi52P2dvKFNuLnYpOiIiLF9hJiYoU24uaD1sYShTbi52KSk7YnJlYWs7Y2FzZSJpbmxpbmVTdHIiOmt0PXJyLm1hdGNoKEcpLFNuLnQ9InMiLG51bGwhPWt0JiYoZnI9dUMoa3RbMV0pKT8oU24udj1mci50LGZyLlImJihTbi5SPWZyLlIpLF9hJiYoU24uaD1mci5oKSk6U24udj0iIjticmVh''@;'; put 'put ''aztjYXNlImIiOlNuLnY9dGkoU24udik7YnJlYWs7Y2FzZSJkIjpZZS5jZWxsRGF0ZXM/U24udj1IZShTbi52LDEpOihTbi52PVFlKEhlKFNuLnYsMSkpLFNuLnQ9Im4iKTticmVhaztjYXNlImUiOiExIT09WWUuY2VsbFRleHQmJihTbi53PVNuLnYpLFNuLnY9UDNbU24udl19aWYoc28pe2Vy''@;'; put 'put ''PU1pPUZpPW5hPTAsTGk9bnVsbCxjYSYmdm9pZCAwIT09bHIucyYmbnVsbCE9KExpPUV0LkNlbGxYZltsci5zXSkmJihudWxsIT1MaS5udW1GbXRJZCYmKGVyPUxpLm51bUZtdElkKSxZZS5jZWxsU3R5bGVzJiYobnVsbCE9TGkuZmlsbElkJiYoTWk9TGkuZmlsbElkKSxudWxsIT1MaS5mb250''@;'; put 'put ''SWQmJihGaT1MaS5mb250SWQpLG51bGwhPUxpLmJvcmRlcklkJiYobmE9TGkuYm9yZGVySWQpKSk7dHJ5e0ozKFNuLGVyLE1pLEZpLG5hLFllLDAsRXQpfWNhdGNoe31ZZS5jZWxsU3R5bGVzJiZTbi5zJiYoTGkmJkxpLmFsaWdubWVudCYmKFNuLnMuYWxpZ25tZW50PXF0KExpLmFsaWdubWVu''@;'; put 'put ''dCkpLExpJiZMaS5wcm90ZWN0aW9uJiYobnVsbCE9TGkucHJvdGVjdGlvbi5oaWRkZW4mJihTbi5zLmhpZGRlbj1MaS5wcm90ZWN0aW9uLmhpZGRlbiksbnVsbCE9TGkucHJvdGVjdGlvbi5lZGl0YWJsZSYmKFNuLnMuZWRpdGFibGU9TGkucHJvdGVjdGlvbi5lZGl0YWJsZSkpLExpJiZMaS5z''@;'; put 'put ''dHlsZSYmKFNuLnMuc3R5bGU9TGkuc3R5bGUpKSxZZS5jZWxsRGF0ZXMmJmNhJiYibiI9PVNuLnQmJkEuaXNfZGF0ZShBLl90YWJsZVtlcl0pJiYoU24udD0iZCIsU24udj11bihTbi52KSl9dmFyIFdvO1llLm5vZGltJiYoV289Tm8obHIuciksZXQucy5yPldvLnImJihldC5zLnI9V28uciks''@;'; put 'put ''ZXQuZS5yPFdvLnImJihldC5lLnI9V28ucikpLFllLmNhbGxiYWNrPyhXbz1Obyhsci5yKSxKYS5yb3dbV28uY109U24pOkJyPyhOZVsoV289Tm8obHIucikpLnJdfHwoTmVbV28ucl09W10pLE5lW1dvLnJdW1dvLmNdPVNuKTpOZVtsci5yXT1Tbn1ZZS5jYWxsYmFjayYmWWUuY2FsbGJhY2so''@;'; put 'put ''SmEpfX19eWkmJiFZZS5jYWxsYmFjayYmbTgoMCxFdCksX3IubGVuZ3RoPjAmJihOZVsiIXJvd3MiXT1fcil9fSgpLGI4PVByKCJ3b3Jrc2hlZXQiLG51bGwse3htbG5zOllpLm1haW5bMF0sInhtbG5zOnIiOllpLnIsInhtbG5zOngxNGFjIjoiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNv''@;'; put 'put ''bS9vZmZpY2Uvc3ByZWFkc2hlZXRtbC8yMDA5LzkvYWMiLCJ4bWxuczptYyI6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9tYXJrdXAtY29tcGF0aWJpbGl0eS8yMDA2IiwibWM6SWdub3JhYmxlIjoieDE0YWMifSk7ZnVuY3Rpb24gVkQoUyxSLGssRyl7dmFyIGdlLFE9W0lp''@;'; put 'put ''LGI4XSxwZT0iIix5ZT1rLlNoZWV0c1trLlNoZWV0TmFtZXNbU11dO251bGw9PXllJiYoeWU9e30pO3ZhciBQZT15ZVsiIXJlZiJdfHwiQTEiLE5lPW9vKFBlKTtpZihOZS5lLmM+MTYzODN8fE5lLmUucj4xMDQ4NTc1KXtpZihSLldURil0aHJvdyBuZXcgRXJyb3IoIlJhbmdlICIrUGUrIiBl''@;'; put 'put ''eGNlZWRzIGZvcm1hdCBsaW1pdCBBMTpYRkQxMDQ4NTc2Iik7TmUuZS5jPU1hdGgubWluKE5lLmUuYywxNjM4MyksTmUuZS5yPU1hdGgubWluKE5lLmUuYywxMDQ4NTc1KSxQZT1yYShOZSl9R3x8KEc9e30pLHllWyIhY29tbWVudHMiXT1bXTt2YXIgWWU9W10sZXQ9eWVbIiFwcmludCJdO2lm''@;'; put 'put ''KGZ1bmN0aW9uIEVEKFMsUixrLEcsUSl7dmFyIG9lPSExLGdlPXt9LHBlPW51bGw7aWYoInhsc3giIT09Ry5ib29rVHlwZSYmUi52YmFyYXcpe3ZhciB5ZT1SLlNoZWV0TmFtZXNba107dHJ5e1IuV29ya2Jvb2smJih5ZT1SLldvcmtib29rLlNoZWV0c1trXS5Db2RlTmFtZXx8eWUpfWNhdGNo''@;'; put 'put ''e31vZT0hMCxnZS5jb2RlTmFtZT1Mcih5ZSl9UyYmU1siIWNvbmRmbXQiXSYmKGdlLmVuYWJsZUZvcm1hdENvbmRpdGlvbnNDYWxjdWxhdGlvbj0iMSIpLFMmJlNbIiF0YWJjb2xvciJdJiYocGU9KHBlfHwiIikrJzx0YWJDb2xvciByZ2I9IkZGJytQMChTWyIhdGFiY29sb3IiXS5yZ2IpKyci''@;'; put 'put ''Lz4nKTt2YXIgUGU9ITEsTmU9e307aWYoKCgoU3x8e30pWyIhcHJpbnQiXXx8e30pLnByb3BzfHx7fSkuZml0JiYoUGU9ITAsTmUuZml0VG9QYWdlPTEpLFBlJiYocGU9KHBlfHwiIikrUHIoInBhZ2VTZXRVcFByIixudWxsLE5lKSksUyYmU1siIW91dGxpbmUiXSl7dmFyIFllPXtzdW1tYXJ5''@;'; put 'put ''QmVsb3c6MSxzdW1tYXJ5UmlnaHQ6MX07U1siIW91dGxpbmUiXS5hYm92ZSYmKFllLnN1bW1hcnlCZWxvdz0wKSxTWyIhb3V0bGluZSJdLmxlZnQmJihZZS5zdW1tYXJ5UmlnaHQ9MCkscGU9KHBlfHwiIikrUHIoIm91dGxpbmVQciIsbnVsbCxZZSl9IW9lJiYhcGV8fChRW1EubGVuZ3RoXT1Q''@;'; put 'put ''cigic2hlZXRQciIscGUsZ2UpKX0oeWUsayxTLFIsUSksUVtRLmxlbmd0aF09UHIoImRpbWVuc2lvbiIsbnVsbCx7cmVmOlBlfSksUVtRLmxlbmd0aF09ZnVuY3Rpb24gZzgoUyxSLGssRyl7dmFyIFE9e3dvcmtib29rVmlld0lkOiIwIn07aWYoKCgoR3x8e30pLldvcmtib29rfHx7fSkuVmll''@;'; put 'put ''d3N8fFtdKS5sZW5ndGgpe3ZhciBvZT1HLldvcmtib29rLlZpZXdzLGdlPW9lW2tdfHxvZVswXTtRLnJpZ2h0VG9MZWZ0PWdlLlJUTD8iMSI6IjAiLGdlLnpvb20mJihRLnpvb21TY2FsZT1nZS56b29tKSxudWxsIT1nZS5ncmlkJiYoUS5zaG93R3JpZExpbmVzPWdlLmdyaWQpLGdlLnZpZXcm''@;'; put 'put ''JihRLnZpZXc9Z2Uudmlldyl9bnVsbCE9U1siIWdyaWRsaW5lcyJdJiYoUS5zaG93R3JpZExpbmVzPSEhU1siIWdyaWRsaW5lcyJdKTt2YXIgcGU9IiIseWU9e3I6MCxjOjB9O2lmKFNbIiFzZWwiXSl7aWYoISh5ZT1TWyIhc2VsIl0uY2VsbCkpe2lmKCFTWyIhc2VsIl0ucmFuZ2UpdGhyb3cg''@;'; put 'put ''bmV3IEVycm9yKCJNdXN0IHNwZWNpZnkgYSBzZWxlY3Rpb24gY2VsbCBvciByYW5nZSIpO3llPU1zKFNbIiFzZWwiXS5yYW5nZS5yZXBsYWNlKC9ccy4qJC8sIiIpKS5zfSJzdHJpbmciPT10eXBlb2YgeWUmJih5ZT1Obyh5ZSkpfXZhciBOZT1TWyIhZnJlZXplIl0/InN0cmluZyI9PXR5cGVv''@;'; put 'put ''ZiBTWyIhZnJlZXplIl0/Tm8oU1siIWZyZWV6ZSJdKTpTWyIhZnJlZXplIl06e2M6MCxyOjB9O2lmKFNbIiFmcmVlemUiXSl7dmFyIFllPXFpKE5lKSxldD17c3RhdGU6ImZyb3plbiIseFNwbGl0Ok5lLmMseVNwbGl0Ok5lLnIsdG9wTGVmdENlbGw6WWV9O1NbIiFzZWwiXSYmKGV0LmFjdGl2''@;'; put 'put ''ZVBhbmU9KHllLnI+PU5lLnImJk5lLnI+MD8iYm90dG9tIjoidG9wIikrKHllLmM+PU5lLmMmJk5lLmM+MD8iUmlnaHQiOiJMZWZ0IikpLHBlPVByKCJwYW5lIixudWxsLGV0KX1pZihTWyIhc2VsIl0pe3ZhciBjdD17YWN0aXZlQ2VsbDoic3RyaW5nIj09dHlwZW9mIHllP3llOnFpKHllKX07''@;'; put 'put ''Y3Quc3FyZWY9U1siIXNlbCJdLnJhbmdlP1NbIiFzZWwiXS5yYW5nZTpjdC5hY3RpdmVDZWxsKyI6IitjdC5hY3RpdmVDZWxsLHBlKz1Qcigic2VsZWN0aW9uIixudWxsLGN0KSxTWyIhZnJlZXplIl0mJihOZS5jPjAmJihjdC5wYW5lPSJ0b3BSaWdodCIscGUrPVByKCJzZWxlY3Rpb24iLG51''@;'; put 'put ''bGwsY3QpKSxOZS5yPjAmJihjdC5wYW5lPSJib3R0b21MZWZ0IixwZSs9UHIoInNlbGVjdGlvbiIsbnVsbCxjdCkpLE5lLmM+MCYmTmUucj4wJiYoY3QucGFuZT0iYm90dG9tUmlnaHQiLHBlKz1Qcigic2VsZWN0aW9uIixudWxsLGN0KSkpfXJldHVybiBQcigic2hlZXRWaWV3cyIsUHIoInNo''@;'; put 'put ''ZWV0VmlldyIscGV8fG51bGwsUSkse30pfSh5ZSwwLFMsayksUi5zaGVldEZvcm1hdCl7dmFyIGN0PXtkZWZhdWx0Um93SGVpZ2h0OlIuc2hlZXRGb3JtYXQuZGVmYXVsdFJvd0hlaWdodHx8IjE2IixiYXNlQ29sV2lkdGg6Ui5zaGVldEZvcm1hdC5iYXNlQ29sV2lkdGh8fCIxMCJ9O251bGwh''@;'; put 'put ''PVIuc2hlZXRGb3JtYXQub3V0bGluZUxldmVsUm93JiYoY3Qub3V0bGluZUxldmVsUm93PVIuc2hlZXRGb3JtYXQub3V0bGluZUxldmVsUm93KSxRW1EubGVuZ3RoXT1Qcigic2hlZXRGb3JtYXRQciIsbnVsbCxjdCl9ZWxzZSBpZih5ZVsiIXNoZWV0Rm9ybWF0Il0pe3ZhciBFdD17fSxhdD0h''@;'; put 'put ''MTt5ZVsiIXNoZWV0Rm9ybWF0Il0ucm93JiYoeWVbIiFzaGVldEZvcm1hdCJdLnJvdy5ocHQ/KGF0PSEwLEV0LmRlZmF1bHRSb3dIZWlnaHQ9eWVbIiFzaGVldEZvcm1hdCJdLnJvdy5ocHQsRXQuY3VzdG9tSGVpZ2h0PTEpOnllWyIhc2hlZXRGb3JtYXQiXS5yb3cuaHB4PyhhdD0hMCxFdC5k''@;'; put 'put ''ZWZhdWx0Um93SGVpZ2h0PVUzKHllWyIhc2hlZXRGb3JtYXQiXS5yb3cuaHB4KSxFdC5jdXN0b21IZWlnaHQ9MSk6KDA9PT15ZVsiIXNoZWV0Rm9ybWF0Il0ucm93LmhwdHx8MD09PXllWyIhc2hlZXRGb3JtYXQiXS5yb3cuaHB4fHx5ZVsiIXNoZWV0Rm9ybWF0Il0ucm93LmhpZGRlbikmJihh''@;'; put 'put ''dD0hMCxFdC5kZWZhdWx0Um93SGVpZ2h0PUV0LmRlZmF1bHRSb3dIZWlnaHR8fDE2LEV0LmN1c3RvbUhlaWdodD0xLEV0Lnplcm9IZWlnaHQ9MSkseWVbIiFzaGVldEZvcm1hdCJdLmR5RGVzY2VudCYmKEV0WyJ4MTRhYzpkeURlc2NlbnQiXT15ZVsiIXNoZWV0Rm9ybWF0Il0uZHlEZXNjZW50''@;'; put 'put ''KSkseWVbIiFzaGVldEZvcm1hdCJdLmNvbCYmKHllWyIhc2hlZXRGb3JtYXQiXS5jb2wud2NofHxRMCh5ZVsiIXNoZWV0Rm9ybWF0Il0uY29sKSxFdC5kZWZhdWx0Q29sV2lkdGg9eWVbIiFzaGVldEZvcm1hdCJdLmNvbC53Y2grNS9UY3x8MCxhdD0hMCksbnVsbD09RXQuZGVmYXVsdFJvd0hl''@;'; put 'put ''aWdodCYmKEV0LmRlZmF1bHRSb3dIZWlnaHQ9MTYpLG51bGw9PUV0LmRlZmF1bHRDb2xXaWR0aCYmKEV0LmRlZmF1bHRDb2xXaWR0aD0xMCksRXQub3V0bGluZUxldmVsUm93PUV0Lm91dGxpbmVMZXZlbFJvd3x8NyxhdCYmKFFbUS5sZW5ndGhdPVByKCJzaGVldEZvcm1hdFByIixudWxsLEV0''@;'; put 'put ''KSl9bnVsbCE9eWVbIiFjb2xzIl0mJnllWyIhY29scyJdLmxlbmd0aD4wJiYoUVtRLmxlbmd0aF09ZnVuY3Rpb24gcGooUyxSLGspe2Zvcih2YXIgUSxHPVsiPGNvbHM+Il0sb2U9MDtvZSE9Ui5sZW5ndGg7KytvZSlpZihRPVJbb2VdKXtpZihRLmF1dG8mJm9TKFMsUSxvZSksUS5zfHxRLnop''@;'; put 'put ''e3ZhciBnZT17dDoieiJ9O251bGwhPVEucyYmKGdlLnM9US5zKSxudWxsIT1RLnomJihnZS56PVEueiksUS5zdHlsZT1sMChrLmNlbGxYZnMsay5jZWxsU3R5bGVYZnMsZ2Usayl9R1tHLmxlbmd0aF09UHIoImNvbCIsbnVsbCx1OChvZSxRKSl9cmV0dXJuIEdbRy5sZW5ndGhdPSI8L2NvbHM+''@;'; put 'put ''IixHLmpvaW4oIiIpfSh5ZSx5ZVsiIWNvbHMiXSxSKSksUVtnZT1RLmxlbmd0aF09IjxzaGVldERhdGEvPiIseWVbIiFsaW5rcyJdPVtdLG51bGwhPXllWyIhcmVmIl0mJihwZT1mdW5jdGlvbiBNUyhTLFIsayxHKXt2YXIgeWUsYnQsUT1bXSxvZT1bXSxnZT1vbyhTWyIhcmVmIl0pLHBlPSIi''@;'; put 'put ''LFBlPSIiLE5lPVtdLFllPTAsZXQ9MCxjdD1TWyIhcm93cyJdLEV0PUFycmF5LmlzQXJyYXkoUyksYXQ9e3I6UGV9LGp0PS0xO2ZvcihldD1nZS5zLmM7ZXQ8PWdlLmUuYzsrK2V0KU5lW2V0XT1UYShldCk7Zm9yKFllPWdlLnMucjtZZTw9Z2UuZS5yOysrWWUpe2ZvcihvZT1bXSxQZT1qaShZ''@;'; put 'put ''ZSksZXQ9Z2Uucy5jO2V0PD1nZS5lLmM7KytldCl7eWU9TmVbZXRdK1BlO3ZhciBrdD1FdD8oU1tZZV18fFtdKVtldF06U1t5ZV07dm9pZCAwIT09a3QmJm51bGwhPShwZT1VNShrdCx5ZSxTLFIpKSYmb2UucHVzaChwZSl9KG9lLmxlbmd0aD4wfHxjdCYmY3RbWWVdKSYmKGF0PXtyOlBlfSxj''@;'; put 'put ''dCYmY3RbWWVdJiYoKGJ0PWN0W1llXSkuaGlkZGVuJiYoYXQuaGlkZGVuPTEpLGp0PS0xLGJ0LmhweD9qdD1VMyhidC5ocHgpOmJ0LmhwdCYmKGp0PWJ0LmhwdCksanQ+LTEmJihhdC5odD1qdCxhdC5jdXN0b21IZWlnaHQ9MSksYnQubGV2ZWwmJihhdC5vdXRsaW5lTGV2ZWw9YnQubGV2ZWwp''@;'; put 'put ''LGJ0LmR5RGVzY2VudCYmKGF0WyJ4MTRhYzpkeURlc2NlbnQiXT1idC5keURlc2NlbnQpLGJ0LnMmJihhdC5zPWwwKFIuY2VsbFhmcyxSLmNlbGxTdHlsZVhmcyx7dDoieiIsczpidC5zfSxSKSxhdC5jdXN0b21Gb3JtYXQ9MSkpLFFbUS5sZW5ndGhdPVByKCJyb3ciLG9lLmpvaW4oIiIpLGF0''@;'; put 'put ''KSl9aWYoY3QpZm9yKDtZZTxjdC5sZW5ndGg7KytZZSljdCYmY3RbWWVdJiYoYXQ9e3I6WWUrMX0sKGJ0PWN0W1llXSkuaGlkZGVuJiYoYXQuaGlkZGVuPTEpLGp0PS0xLGJ0LmhweD9qdD1VMyhidC5ocHgpOmJ0LmhwdCYmKGp0PWJ0LmhwdCksanQ+LTEmJihhdC5odD1qdCxhdC5jdXN0b21I''@;'; put 'put ''ZWlnaHQ9MSksYnQubGV2ZWwmJihhdC5vdXRsaW5lTGV2ZWw9YnQubGV2ZWwpLFFbUS5sZW5ndGhdPVByKCJyb3ciLCIiLGF0KSk7cmV0dXJuIFEuam9pbigiIil9KHllLFIpLHBlLmxlbmd0aD4wJiYoUVtRLmxlbmd0aF09cGUpKSxRLmxlbmd0aD5nZSsxJiYoUVtRLmxlbmd0aF09Ijwvc2hl''@;'; put 'put ''ZXREYXRhPiIsUVtnZV09UVtnZV0ucmVwbGFjZSgiLz4iLCI+IikpLHllWyIhcHJvdGVjdCJdJiYoUVtRLmxlbmd0aF09ZnVuY3Rpb24gZGooUyl7dmFyIFI9e3NoZWV0OjF9O3JldHVybiBiUy5mb3JFYWNoKGZ1bmN0aW9uKGspe251bGwhPVNba10mJlNba10mJihSW2tdPSIxIil9KSxMRC5m''@;'; put 'put ''b3JFYWNoKGZ1bmN0aW9uKGspe251bGwhPVNba10mJiFTW2tdJiYoUltrXT0iMCIpfSksUy5wYXNzd29yZD9SLnBhc3N3b3JkPUh2KFMucGFzc3dvcmQpLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpOlMuZW5jcnlwdGlvbiYmKFIuYWxnb3JpdGhtTmFtZT1TLmVuY3J5cHRpb24uYWxnbyxS''@;'; put 'put ''Lmhhc2hWYWx1ZT1TLmVuY3J5cHRpb24uaGFzaCxSLnNhbHRWYWx1ZT1TLmVuY3J5cHRpb24uc2FsdCxSLnNwaW5Db3VudD1TLmVuY3J5cHRpb24uc3BpbiksUHIoInNoZWV0UHJvdGVjdGlvbiIsbnVsbCxSKX0oeWVbIiFwcm90ZWN0Il0pKSxudWxsIT15ZVsiIWF1dG9maWx0ZXIiXSYmKFFb''@;'; put 'put ''US5sZW5ndGhdPWZ1bmN0aW9uIG1qKFMsUixrLEcpe3ZhciBRPSJzdHJpbmciPT10eXBlb2YgUy5yZWY/Uy5yZWY6cmEoUy5yZWYpO2suV29ya2Jvb2t8fChrLldvcmtib29rPXtTaGVldHM6W119KSxrLldvcmtib29rLk5hbWVzfHwoay5Xb3JrYm9vay5OYW1lcz1bXSk7dmFyIG9lPWsuV29y''@;'; put 'put ''a2Jvb2suTmFtZXMsZ2U9TXMoUSk7Z2Uucy5yPT1nZS5lLnImJihnZS5lLnI9TXMoUlsiIXJlZiJdKS5lLnIsUT1yYShnZSkpO2Zvcih2YXIgcGU9MDtwZTxvZS5sZW5ndGg7KytwZSl7dmFyIHllPW9lW3BlXTtpZigiX3hsbm0uX0ZpbHRlckRhdGFiYXNlIj09eWUuTmFtZSYmeWUuU2hlZXQ9''@;'; put 'put ''PUcpe3llLlJlZj0iJyIray5TaGVldE5hbWVzW0ddKyInISIrUTticmVha319cmV0dXJuIHBlPT1vZS5sZW5ndGgmJm9lLnB1c2goe05hbWU6Il94bG5tLl9GaWx0ZXJEYXRhYmFzZSIsU2hlZXQ6RyxSZWY6IiciK2suU2hlZXROYW1lc1tHXSsiJyEiK1F9KSxQcigiYXV0b0ZpbHRlciIsbnVs''@;'; put 'put ''bCx7cmVmOlF9KX0oeWVbIiFhdXRvZmlsdGVyIl0seWUsayxTKSksbnVsbCE9eWVbIiFtZXJnZXMiXSYmeWVbIiFtZXJnZXMiXS5sZW5ndGg+MCYmKFFbUS5sZW5ndGhdPWZ1bmN0aW9uIGdTKFMpe2lmKDA9PT1TLmxlbmd0aClyZXR1cm4iIjtmb3IodmFyIFI9JzxtZXJnZUNlbGxzIGNvdW50''@;'; put 'put ''PSInK1MubGVuZ3RoKyciPicsaz0wO2shPVMubGVuZ3RoOysraylSKz0nPG1lcmdlQ2VsbCByZWY9IicrcmEoU1trXSkrJyIvPic7cmV0dXJuIFIrIjwvbWVyZ2VDZWxscz4ifSh5ZVsiIW1lcmdlcyJdKSkseWVbIiFjb25kZm10Il0mJihRW1EubGVuZ3RoXT1mdW5jdGlvbiB3aihTLFIpe3Jl''@;'; put 'put ''dHVybiBTLm1hcChmdW5jdGlvbihrLEcpe3JldHVybiBmdW5jdGlvbiBfaihTLFIsayl7dmFyIEc9Uy5zP2xTKGsuRFhGLFMucyk6LTEsUT0ic3RyaW5nIj09dHlwZW9mIFMucmVmP1MucmVmOnJhKFMucmVmKSxnZT1vbyhRLnJlcGxhY2UoL1xzLiokLywiIikpLnM7Z2UucjwwJiYoZ2Uucj0w''@;'; put 'put ''KSxnZS5jPDAmJihnZS5jPTApO3ZhciBwZT0iIix5ZT17cHJpb3JpdHk6UisxfTtzd2l0Y2goRz4tMSYmKHllLmR4ZklkPUcpLFMudCl7Y2FzZSJ1bmlxdWUiOnllLnR5cGU9InVuaXF1ZVZhbHVlcyI7YnJlYWs7Y2FzZSJkdXAiOnllLnR5cGU9ImR1cGxpY2F0ZVZhbHVlcyI7YnJlYWs7Y2Fz''@;'; put 'put ''ZSJibGFuayI6eWUudHlwZT0oUy52PyJjIjoibm90QyIpKyJvbnRhaW5zQmxhbmtzIixwZT0iPGZvcm11bGE+TEVOKFRSSU0oIitxaShnZSkrIikpIisoUy52PyI9IjoiJmd0OyIpKyIwPC9mb3JtdWxhPiI7YnJlYWs7Y2FzZSJlcnJvciI6eWUudHlwZT0oUy52PyJjIjoibm90QyIpKyJvbnRh''@;'; put 'put ''aW5zRXJyb3JzIjticmVhaztjYXNlImZvcm11bGEiOnllLnR5cGU9ImV4cHJlc3Npb24iLHBlPVByKCJmb3JtdWxhIixMcihTLmYpLHt9KTticmVhaztjYXNlImRhdGUiOnllLnR5cGU9InRpbWVQZXJpb2QiLHllLnRpbWVQZXJpb2Q9eWpbUy5vcF07YnJlYWs7Y2FzZSJ0ZXh0Ijpzd2l0Y2go''@;'; put 'put ''eWUudHlwZT15ZS5vcGVyYXRvcj1mOFtTLm9wXSx5ZS50ZXh0PVMudixTLm9wKXtjYXNlIklOIjpwZT0nPGZvcm11bGE+Tk9UKElTRVJST1IoU0VBUkNIKCInK0xyKFMudikrJyIsJytxaShnZSkrIikpKTwvZm9ybXVsYT4iO2JyZWFrO2Nhc2UiT1QiOnBlPSc8Zm9ybXVsYT5JU0VSUk9SKFNF''@;'; put 'put ''QVJDSCgiJytMcihTLnYpKyciLCcrcWkoZ2UpKyIpKTwvZm9ybXVsYT4iO2JyZWFrO2Nhc2UiU1QiOnBlPSI8Zm9ybXVsYT5MRUZUKCIrcWkoZ2UpKycsTEVOKCInK0xyKFMudikrJyIpKT0iJytMcihTLnYpKyciPC9mb3JtdWxhPic7YnJlYWs7Y2FzZSJORCI6cGU9Ijxmb3JtdWxhPlJJR0hU''@;'; put 'put ''KCIrcWkoZ2UpKycsTEVOKCInK0xyKFMudikrJyIpKT0iJytMcihTLnYpKyciPC9mb3JtdWxhPid9YnJlYWs7Y2FzZSJ2YWwiOnllLnR5cGU9ImNlbGxJcyIseWUub3BlcmF0b3I9dWJbUy5vcF0scGU9bnVsbCE9Uy5taW4/UHIoImZvcm11bGEiLExyKFN0cmluZyhTLm1pbikpLHt9KStQcigi''@;'; put 'put ''Zm9ybXVsYSIsTHIoU3RyaW5nKFMubWF4KSkse30pOlByKCJmb3JtdWxhIixMcihudWxsIT1TLnY/U3RyaW5nKCJzdHJpbmciPT10eXBlb2YgUy52PyciJytTLnYucmVwbGFjZSgvIi9nLCciIicpKyciJzpTLnYpOlMuZikse30pO2JyZWFrO2Nhc2UiYXZnIjpzd2l0Y2goeWUudHlwZT0iYWJv''@;'; put 'put ''dmVBdmVyYWdlIix5ZS5hYm92ZUF2ZXJhZ2U9IkwiPT1TLm9wLmNoYXJBdCgwKT8iMCI6IjEiLFMub3AuY2hhckF0KDEpKXtjYXNlIlQiOnllLmVxdWFsQXZlcmFnZT0iMCI7YnJlYWs7Y2FzZSJFIjp5ZS5lcXVhbEF2ZXJhZ2U9IjEiO2JyZWFrO2RlZmF1bHQ6eWUuc3RkRGV2PVMub3AuY2hh''@;'; put 'put ''ckF0KDEpfWJyZWFrO2Nhc2UicmFuayI6eWUudHlwZT0idG9wMTAiLHllLmJvdHRvbT0iQiI9PVMub3AuY2hhckF0KDApPyIxIjoiMCIseWUucGVyY2VudD0iUCI9PVMub3AuY2hhckF0KDEpPyIxIjoiMCIseWUucmFuaz1TLnY7YnJlYWs7Y2FzZSJpY29uIjp5ZS50eXBlPSJpY29uU2V0Ijt2''@;'; put 'put ''YXIgUGU9e2ljb25TZXQ6Uy52LHBlcmNlbnQ6Uy5wY3Q/InRydWUiOiJmYWxzZSJ9O1MucmV2JiYoUGUucmV2ZXJzZT0idHJ1ZSIpLFMuaGlkZGVuJiYoUGUuc2hvd1ZhbHVlPSJmYWxzZSIpLHBlPVByKCJpY29uU2V0IixTLnRocmVzaC5tYXAoVzQpLmpvaW4oIiIpLFBlKTticmVhaztjYXNl''@;'; put 'put ''InNjYWxlIjp5ZS50eXBlPSJjb2xvclNjYWxlIixwZSs9VzQoUy5jbWluKSxTLmNtaWQmJihwZSs9VzQoUy5jbWlkKSkscGUrPVc0KFMuY21heCkscGUrPWdkKFMuY21pbi5jb2xvciksUy5jbWlkJiYocGUrPWdkKFMuY21pZC5jb2xvcikpLHBlPVByKCJjb2xvclNjYWxlIixwZSs9Z2QoUy5j''@;'; put 'put ''bWF4LmNvbG9yKSx7fSk7YnJlYWs7Y2FzZSJiYXIiOnllLnR5cGU9ImRhdGFCYXIiLHBlKz1XNChTLmNtaW4pLHBlKz1XNChTLmNtYXgpLHBlPVByKCJkYXRhQmFyIixwZSs9Z2QoUy5jb2xvcikse30pO2JyZWFrO2RlZmF1bHQ6dGhyb3cgY29uc29sZS5sb2coUyksIkNGIG1pc3NpbmcgdHlw''@;'; put 'put ''ZSAiK1MudH1yZXR1cm4nPGNvbmRpdGlvbmFsRm9ybWF0dGluZyBzcXJlZj0iJytRKyciPicrUHIoImNmUnVsZSIsIiI9PXBlP251bGw6cGUseWUpKyI8L2NvbmRpdGlvbmFsRm9ybWF0dGluZz4ifShrLEcsUil9KS5qb2luKCIiKX0oeWVbIiFjb25kZm10Il0sUikpLHllWyIhdmFsaWRhdGlv''@;'; put 'put ''bnMiXSYmKFFbUS5sZW5ndGhdPWZ1bmN0aW9uIEhEKFMpe2lmKCFTfHwwPT1TLmxlbmd0aClyZXR1cm4iIjtmb3IodmFyIFI9W10saz0wLEc9MDtHPFMubGVuZ3RoOysrRyl7dmFyIFE9U1tHXSxvZT11aFtRLnRdO2lmKFEucmVmJiYoInN0cmluZyIhPXR5cGVvZiBRLnJlZnx8LTEhPVEucmVm''@;'; put 'put ''LmluZGV4T2YoIiAiKXx8KFEucmVmPW9vKFEucmVmKSxRLnJlZi5zJiYhKFEucmVmLnMuYzwwKSkpKXsrK2s7dmFyIGdlPXt0eXBlOm9lLGFsbG93Qmxhbms6KygwIT1RLmJsYW5rKSxzaG93SW5wdXRNZXNzYWdlOisoMCE9US5pbnB1dCksc2hvd0Vycm9yTWVzc2FnZTorKDAhPVEuZXJyb3Ip''@;'; put 'put ''LHNxcmVmOiJzdHJpbmciPT10eXBlb2YgUS5yZWY/US5yZWY6cmEoUS5yZWYpfTtpZihRLmlucHV0JiYoUS5pbnB1dC50aXRsZSYmKGdlLnByb21wdFRpdGxlPVdpKFEuaW5wdXQudGl0bGUpKSxRLmlucHV0Lm1lc3NhZ2UmJihnZS5wcm9tcHQ9V2koUS5pbnB1dC5tZXNzYWdlKSkpLFEuZXJy''@;'; put 'put ''b3ImJihRLmVycm9yLnRpdGxlJiYoZ2UuZXJyb3JUaXRsZT1XaShRLmVycm9yLnRpdGxlKSksUS5lcnJvci5tZXNzYWdlJiYoZ2UuZXJyb3I9V2koUS5lcnJvci5tZXNzYWdlKSksUS5lcnJvci5zdHlsZSYmKGdlLmVycm9yU3R5bGU9US5lcnJvci5zdHlsZSkpLCFvZSl0aHJvdyBuZXcgRXJy''@;'; put 'put ''b3IoIkJhZCB2YWxpZGF0aW9uOiB1bnJlY29nbml6ZWQgdHlwZSAiK1EudCk7dmFyIHBlPSIiO3N3aXRjaChRLnQpe2Nhc2UiQW55IjpicmVhaztjYXNlIkxpc3QiOmNhc2UiQ3VzdG9tIjppZihRLmwpe2lmKFEubC5qb2luKCIsIikubGVuZ3RoPjI1MCl0aHJvdyBuZXcgRXJyb3IoIkRWIGxl''@;'; put 'put ''bmd0aCA+IDI1MCB0cmlnZ2VycyBjb3JydXB0aW9uIGVycm9ycyBpbiBFeGNlbC4gIFVzZSBhIGxvb2t1cCB0YWJsZSIpO3BlPSc8Zm9ybXVsYTE+IicrTHIoUS5sLmpvaW4oIiwiKSkrJyI8L2Zvcm11bGExPid9ZWxzZSBwZT0iPGZvcm11bGExPiIrTHIoUS5mKSsiPC9mb3JtdWxhMT4iO2Jy''@;'; put 'put ''ZWFrO2Nhc2UiRGF0ZSI6Y2FzZSJUaW1lIjpjYXNlIkRlY2ltYWwiOmNhc2UiTGVuZ3RoIjpjYXNlIldob2xlIjppZighdWJbUS5vcF0pdGhyb3cgbmV3IEVycm9yKCJCYWQgRGF0YSBWYWxpZGF0aW9uIHR5cGUgIitRLm9wKyIgZm9yICIrUS50KTtpZihnZS5vcGVyYXRvcj11YltRLm9wXSxu''@;'; put 'put ''dWxsIT1RLnYpcGU9Ijxmb3JtdWxhMT4iK0xyKFN0cmluZyhRLnYgaW5zdGFuY2VvZiBEYXRlP1FlKFEudik6US52KSkrIjwvZm9ybXVsYTE+IjtlbHNle2lmKG51bGw9PVEubWlufHxudWxsPT1RLm1heCl0aHJvdyBuZXcgRXJyb3IoIkJhZCBEYXRhIFZhbGlkYXRpb246IGB2YCBvciBgbWlu''@;'; put 'put ''YCtgbWF4YCByZXF1aXJlZCBmb3IgVHlwZSAiK1EudCk7cGU9Ijxmb3JtdWxhMT4iK0xyKFN0cmluZyhRLm1pbiBpbnN0YW5jZW9mIERhdGU/UWUoUS5taW4pOlEubWluKSkrIjwvZm9ybXVsYTE+PGZvcm11bGEyPiIrTHIoU3RyaW5nKFEubWF4IGluc3RhbmNlb2YgRGF0ZT9RZShRLm1heCk6''@;'; put 'put ''US5tYXgpKSsiPC9mb3JtdWxhMj4ifX1SLnB1c2goUHIoImRhdGFWYWxpZGF0aW9uIixwZXx8bnVsbCxnZSkpfX1yZXR1cm4gaz4wPyc8ZGF0YVZhbGlkYXRpb25zIGNvdW50PSInK2srJyI+JytSLmpvaW4oIiIpKyI8L2RhdGFWYWxpZGF0aW9ucz4iOiIifSh5ZVsiIXZhbGlkYXRpb25zIl0p''@;'; put 'put ''KTt2YXIganQsYnQ9LTEsa3Q9LTE7aWYoeWVbIiFsaW5rcyJdLmxlbmd0aD4wJiYoUVtRLmxlbmd0aF09IjxoeXBlcmxpbmtzPiIseWVbIiFsaW5rcyJdLmZvckVhY2goZnVuY3Rpb24oU24pe1NuWzFdLlRhcmdldCYmKGp0PXtyZWY6U25bMF19LCIjIiE9U25bMV0uVGFyZ2V0LmNoYXJBdCgw''@;'; put 'put ''KSYmKGt0PUVyKEcsLTEsTHIoU25bMV0uVGFyZ2V0KS5yZXBsYWNlKC8jLiokLywiIiksS2EuSExJTkspLGp0WyJyOmlkIl09InJJZCIra3QpLChidD1TblsxXS5UYXJnZXQuaW5kZXhPZigiIyIpKT4tMSYmKGp0LmxvY2F0aW9uPUxyKFNuWzFdLlRhcmdldC5zbGljZShidCsxKSkpLFNuWzFd''@;'; put 'put ''LlRvb2x0aXAmJihqdC50b29sdGlwPUxyKFNuWzFdLlRvb2x0aXApKSxRW1EubGVuZ3RoXT1QcigiaHlwZXJsaW5rIixudWxsLGp0KSl9KSxRW1EubGVuZ3RoXT0iPC9oeXBlcmxpbmtzPiIpLGRlbGV0ZSB5ZVsiIWxpbmtzIl0sZXQpe3ZhciBPdD1mdW5jdGlvbiBsaihTKXtpZihTLnByb3Bz''@;'; put 'put ''KXt2YXIgUj17fSxrPVMucHJvcHM7cmV0dXJuIGsuZ3JpZGxpbmVzJiYoUi5ncmlkTGluZXM9Ui5ncmlkTGluZXNTZXQ9MSksay5oZWFkaW5ncyYmKFIuaGVhZGluZ3M9MSksay5jZW50ZXJYJiYoUi5ob3Jpem9udGFsQ2VudGVyZWQ9MSksay5jZW50ZXJZJiYoUi52ZXJ0aWNhbENlbnRlcmVk''@;'; put 'put ''PTEpLFByKCJwcmludE9wdGlvbnMiLG51bGwsUil9cmV0dXJuIiJ9KGV0KTtPdC5sZW5ndGgmJihRW1EubGVuZ3RoXT1PdCl9aWYoKG51bGwhPXllWyIhbWFyZ2lucyJdfHxldCYmZXQubWFyZ2lucykmJihRW1EubGVuZ3RoXT1mdW5jdGlvbiBmaihTKXtyZXR1cm4gWDMoUyksUHIoInBhZ2VN''@;'; put 'put ''YXJnaW5zIixudWxsLFMpfSh5ZVsiIW1hcmdpbnMiXXx8ZXQubWFyZ2lucykpLGV0KXt2YXIgS3Q9ZnVuY3Rpb24gUkQoUyl7aWYoUy5wcm9wcyl7dmFyIFI9e30saz1TLnByb3BzO2lmKGsub3JpZW50YXRpb24mJihSLm9yaWVudGF0aW9uPWsub3JpZW50YXRpb24pLGsuc2NhbGUmJihSLnNj''@;'; put 'put ''YWxlPWsuc2NhbGUpLGsuZml0JiYobnVsbCE9ay5maXQuaGVpZ2h0JiYoUi5maXRUb0hlaWdodD1rLmZpdC5oZWlnaHQpLG51bGwhPWsuZml0LndpZHRoJiYoUi5maXRUb1dpZHRoPWsuZml0LndpZHRoKSksay5kcGkmJihSLmhvcml6b250YWxEcGk9Ui52ZXJ0aWNhbERwaT1rLmRwaSksbnVs''@;'; put 'put ''bCE9ay5maXJzdCYmKFIuZmlyc3RQYWdlTnVtYmVyPWsuZmlyc3QsUi51c2VGaXJzdFBhZ2VOdW1iZXI9MSksay5idyYmKFIuYmxhY2tBbmRXaGl0ZT0xKSxrLmRyYWZ0JiYoUi5kcmFmdD0xKSxrLmNvbW1lbnRzJiYoUi5jZWxsQ29tbWVudHM9VERbay5jb21tZW50c118fCJub25lIiksay5l''@;'; put 'put ''cnJvcnMmJihSLmVycm9ycz1rRFtrLmVycm9yc118fCJub25lIiksay5wYXBlcilzd2l0Y2godHlwZW9mIGsucGFwZXIpe2Nhc2UibnVtYmVyIjpSLnBhcGVyU2l6ZT1rLnBhcGVyO2JyZWFrO2Nhc2Uic3RyaW5nIjp1QltrLnBhcGVyXT9SLnBhcGVyU2l6ZT11QltrLnBhcGVyXToray5wYXBl''@;'; put 'put ''ciYmKFIucGFwZXJTaXplPStrLnBhcGVyKTticmVhaztjYXNlIm9iamVjdCI6aWYoIWsucGFwZXIuaGVpZ2h0fHwhay5wYXBlci53aWR0aCl0aHJvdyJDdXN0b20gUGFwZXIgU2l6ZSBtdXN0IGluY2x1ZGUgd2lkdGggYW5kIGhlaWdodCEiO1IucGFwZXJIZWlnaHQ9ay5wYXBlci5oZWlnaHQs''@;'; put 'put ''Ui5wYXBlcldpZHRoPWsucGFwZXIud2lkdGh9cmV0dXJuWzEsITAsInRydWUiLCJvdmVyIl0uaW5kZXhPZihrLm9yZGVyKT4tMSYmKFIucGFnZU9yZGVyPSJvdmVyVGhlbkRvd24iKSxQcigicGFnZVNldHVwIixudWxsLFIpfXJldHVybiIifShldCk7S3QubGVuZ3RoJiYoUVtRLmxlbmd0aF09''@;'; put 'put ''S3QpLEt0PWZ1bmN0aW9uIGJqKFMpe3ZhciBSPVtdLGs9IiIsRz0iIixRPSIiLG9lPSIiLGdlPSIiLHBlPSIiLHllPSIiLFBlPXQxKFMuaGVhZGVyKTtQZS5sZW5ndGgmJihHPVBlWzBdLHBlPVBlWzFdLG9lPVBlWzJdKTt2YXIgTmU9dDEoUy5mb290ZXIpO3JldHVybiBOZS5sZW5ndGgmJihR''@;'; put 'put ''PU5lWzBdLHllPU5lWzFdLGdlPU5lWzJdKSxHJiZSLnB1c2goIjxvZGRIZWFkZXI+IitMcihHKSsiPC9vZGRIZWFkZXI+IiksUSYmUi5wdXNoKCI8b2RkRm9vdGVyPiIrTHIoUSkrIjwvb2RkRm9vdGVyPiIpLChnZSE9UXx8b2UhPUcpJiYoays9JyBkaWZmZXJlbnRPZGRFdmVuPSIxIicsUi5w''@;'; put 'put ''dXNoKCI8ZXZlbkhlYWRlcj4iK0xyKG9lKSsiPC9ldmVuSGVhZGVyPiIpLFIucHVzaCgiPGV2ZW5Gb290ZXI+IitMcihnZSkrIjwvZXZlbkZvb3Rlcj4iKSksKHllIT1RfHxwZSE9RykmJihrKz0nIGRpZmZlcmVudEZpcnN0PSIxIicsUi5wdXNoKCI8Zmlyc3RIZWFkZXI+IitMcihwZSkrIjwv''@;'; put 'put ''Zmlyc3RIZWFkZXI+IiksUi5wdXNoKCI8Zmlyc3RGb290ZXI+IitMcih5ZSkrIjwvZmlyc3RGb290ZXI+IikpLFIubGVuZ3RoPyI8aGVhZGVyRm9vdGVyIitrKyI+IitSLmpvaW4oIiIpKyI8L2hlYWRlckZvb3Rlcj4iOiIifShldCksS3QubGVuZ3RoJiYoUVtRLmxlbmd0aF09S3QpfWlmKChu''@;'; put 'put ''dWxsIT15ZVsiIXJvd0JyZWFrcyJdfHxldCYmZXQucm93QnJlYWtzKSYmKFFbUS5sZW5ndGhdPWZ1bmN0aW9uIHVqKFMpe2lmKDA9PVMubGVuZ3RoKXJldHVybiIiO2Zvcih2YXIgUj1bJzxyb3dCcmVha3MgY291bnQ9IicrUy5sZW5ndGgrJyIgbWFudWFsQnJlYWtDb3VudD0iJytTLmxlbmd0''@;'; put 'put ''aCsnIj4nXSxrPTA7azxTLmxlbmd0aDsrK2spUi5wdXNoKCc8YnJrIGlkPSInK1Nba10uUisnIiBtYW49IjEiLz4nKTtyZXR1cm4gUi5qb2luKCIiKSsiPC9yb3dCcmVha3M+In0oeWVbIiFyb3dCcmVha3MiXXx8ZXQucm93QnJlYWtzKSksKG51bGwhPXllWyIhY29sQnJlYWtzIl18fGV0JiZl''@;'; put 'put ''dC5jb2xCcmVha3MpJiYoUVtRLmxlbmd0aF09ZnVuY3Rpb24gdlMoUyl7aWYoMD09Uy5sZW5ndGgpcmV0dXJuIiI7Zm9yKHZhciBSPVsnPGNvbEJyZWFrcyBjb3VudD0iJytTLmxlbmd0aCsnIiBtYW51YWxCcmVha0NvdW50PSInK1MubGVuZ3RoKyciPiddLGs9MDtrPFMubGVuZ3RoOysraylS''@;'; put 'put ''LnB1c2goJzxicmsgaWQ9IicrU1trXS5DKyciIG1hbj0iMSIvPicpO3JldHVybiBSLmpvaW4oIiIpKyI8L2NvbEJyZWFrcz4ifSh5ZVsiIWNvbEJyZWFrcyJdfHxldC5jb2xCcmVha3MpKSwoIVJ8fFIuaWdub3JlRUN8fG51bGw9PVIuaWdub3JlRUMpJiYoUVtRLmxlbmd0aF09SGEoImlnbm9y''@;'; put 'put ''ZWRFcnJvcnMiLFByKCJpZ25vcmVkRXJyb3IiLG51bGwse251bWJlclN0b3JlZEFzVGV4dDoxLHNxcmVmOlBlfSkpKSx5ZVsiIWNoYXJ0cyJdJiZZZS5wdXNoLmFwcGx5KFllLHllWyIhY2hhcnRzIl0pLHllWyIhaW1hZ2VzIl0mJlllLnB1c2guYXBwbHkoWWUseWVbIiFpbWFnZXMiXSkseWVb''@;'; put 'put ''IiFzaGFwZXMiXSYmWWUucHVzaC5hcHBseShZZSx5ZVsiIXNoYXBlcyJdKSxZZS5sZW5ndGg+MCYmKGt0PUVyKEcsLTEsIi4uL2RyYXdpbmdzL2RyYXdpbmciKyhTKzEpKyIueG1sIixLYS5EUkFXKSxRW1EubGVuZ3RoXT1QcigiZHJhd2luZyIsbnVsbCx7InI6aWQiOiJySWQiK2t0fSkseWVb''@;'; put 'put ''IiFkcmF3aW5nIl09WWUpLCh5ZVsiIWNvbW1lbnRzIl0ubGVuZ3RoPjB8fCh5ZVsiIWNvbnRyb2xzIl18fFtdKS5sZW5ndGg+MCkmJihrdD1FcihHLC0xLCIuLi9kcmF3aW5ncy92bWxEcmF3aW5nIisoUysxKSsiLnZtbCIsS2EuVk1MKSxRW1EubGVuZ3RoXT1QcigibGVnYWN5RHJhd2luZyIs''@;'; put 'put ''bnVsbCx7InI6aWQiOiJySWQiK2t0fSkseWVbIiFsZWdhY3kiXT1rdCkseWVbIiFwcmludCJdJiZ5ZVsiIXByaW50Il0uaW1hZ2VzKXt2YXIgVG49eWVbIiFwcmludCJdLmltYWdlcyxycj0wO1siaGVhZGVyIiwiZm9vdGVyIl0uZm9yRWFjaChmdW5jdGlvbihTbil7VG5bU25dJiZbIm9kZCIs''@;'; put 'put ''ImV2ZW4iLCJmaXJzdCJdLmZvckVhY2goZnVuY3Rpb24obHIpe1RuW1NuXVtscl0mJlsibGVmdCIsInJpZ2h0IiwiY2VudGVyIl0uZm9yRWFjaChmdW5jdGlvbihYbil7aWYoQXJyYXkuaXNBcnJheShUbltTbl1bbHJdW1huXSkpZm9yKHZhciBCbj0wO0JuPFRuW1NuXVtscl1bWG5dLmxlbmd0''@;'; put 'put ''aDsrK0JuKVRuW1NuXVtscl1bWG5dW0JuXSYmKFRuW1NuXVtscl1bWG5dW0JuXS5fY250PXJyKyspfSl9KX0pLHJyPjAmJihrdD1FcihHLC0xLCIuLi9kcmF3aW5ncy92bWxEcmF3aW5nIisoUysxKSsiSEYudm1sIixLYS5WTUwpLFFbUS5sZW5ndGhdPVByKCJsZWdhY3lEcmF3aW5nSEYiLG51''@;'; put 'put ''bGwseyJyOmlkIjoicklkIitrdH0pLHllWyIhbGVnYWN5SEYiXT1rdCl9cmV0dXJuKHllWyIhdGFibGVzIl18fFtdKS5sZW5ndGg+MCYmKFFbUS5sZW5ndGhdPSc8dGFibGVQYXJ0cyBjb3VudD0iJyt5ZVsiIXRhYmxlcyJdLmxlbmd0aCsnIj4nLHllWyIhdGFibGVzIl0uZm9yRWFjaChmdW5j''@;'; put 'put ''dGlvbihTbixscil7a3Q9RXIoRywtMSwiLi4vdGFibGVzL3RhYmxlIisoUysxKSsiXyIrbHIrIi54bWwiLEthLlRBQkxFKSxRW1EubGVuZ3RoXT0nPHRhYmxlUGFydCByOmlkPSJySWQnK2t0KyciLz4nfSksUVtRLmxlbmd0aF09IjwvdGFibGVQYXJ0cz4iKSxRLmxlbmd0aD4xJiYoUVtRLmxl''@;'; put 'put ''bmd0aF09Ijwvd29ya3NoZWV0PiIsUVsxXT1RWzFdLnJlcGxhY2UoIi8+IiwiPiIpKSxRLmpvaW4oIiIpfWZ1bmN0aW9uIE1qKFMsUixrLEcpe3ZhciBRPWZ1bmN0aW9uIFNqKFMsUixrKXt2YXIgRz1ibigxNDUpLFE9KGtbIiFyb3dzIl18fFtdKVtTXXx8e307Ry53cml0ZV9zaGlmdCg0LFMp''@;'; put 'put ''LEcud3JpdGVfc2hpZnQoNCwwKTt2YXIgb2U9MzIwO1EuaHB4P29lPTIwKlUzKFEuaHB4KTpRLmhwdCYmKG9lPTIwKlEuaHB0KSxHLndyaXRlX3NoaWZ0KDIsb2UpLEcud3JpdGVfc2hpZnQoMSwwKTt2YXIgZ2U9MDtRLmxldmVsJiYoZ2V8PVEubGV2ZWwpLFEuaGlkZGVuJiYoZ2V8PTE2KSwo''@;'; put 'put ''US5ocHh8fFEuaHB0KSYmKGdlfD0zMiksRy53cml0ZV9zaGlmdCgxLGdlKSxHLndyaXRlX3NoaWZ0KDEsMCk7dmFyIHBlPTAseWU9Ry5sO0cubCs9NDtmb3IodmFyIFBlPXtyOlMsYzowfSxOZT0wO05lPDE2OysrTmUpaWYoIShSLnMuYz5OZSsxPDwxMHx8Ui5lLmM8TmU8PDEwKSl7Zm9yKHZh''@;'; put 'put ''ciBZZT0tMSxldD0tMSxjdD1OZTw8MTA7Y3Q8TmUrMTw8MTA7KytjdClQZS5jPWN0LChBcnJheS5pc0FycmF5KGspPyhrW1BlLnJdfHxbXSlbUGUuY106a1txaShQZSldKSYmKFllPDAmJihZZT1jdCksZXQ9Y3QpO1llPDB8fCgrK3BlLEcud3JpdGVfc2hpZnQoNCxZZSksRy53cml0ZV9zaGlm''@;'; put 'put ''dCg0LGV0KSl9dmFyIGF0PUcubDtyZXR1cm4gRy5sPXllLEcud3JpdGVfc2hpZnQoNCxwZSksRy5sPWF0LEcubGVuZ3RoPkcubD9HLnNsaWNlKDAsRy5sKTpHfShHLGssUik7KFEubGVuZ3RoPjE3fHwoUlsiIXJvd3MiXXx8W10pW0ddKSYmRnIoUywiQnJ0Um93SGRyIixRKX12YXIgeGo9bXUs''@;'; put 'put ''RWo9Z2Y7ZnVuY3Rpb24gRmooUyl7cmV0dXJuW0poKFMpLFBsKFMpLCJuIl19dmFyIFdEPW11LEM4PWdmLEtEPVsibGVmdCIsInJpZ2h0IiwidG9wIiwiYm90dG9tIiwiaGVhZGVyIiwiZm9vdGVyIl0scUQ9WyJBbnkiLCJXaG9sZSIsIkRlY2ltYWwiLCJMaXN0IiwiRGF0ZSIsIlRpbWUiLCJM''@;'; put 'put ''ZW5ndGgiLCJDdXN0b20iXSxEUz1bIklOIiwiT1QiLCJFUSIsIk5FIiwiR1QiLCJMVCIsIkdFIiwiTEUiXTtmdW5jdGlvbiBYRChTKXt2YXIgUj1ibig0KSxrPVtSXSxHPXFELmluZGV4T2YoUy50KTtpZihHPDApdGhyb3cgbmV3IEVycm9yKCJCYWQgdmFsaWRhdGlvbjogdW5yZWNvZ25pemVk''@;'; put 'put ''IHR5cGUgIitTLnQpO3ZhciBvZT1EUy5pbmRleE9mKFMub3ApO3N3aXRjaChHKXtjYXNlIDA6Y2FzZSAzOmNhc2UgNzpvZT0wO2JyZWFrO2RlZmF1bHQ6aWYoLTE9PW9lKXRocm93IG5ldyBFcnJvcigiQmFkIERhdGEgVmFsaWRhdGlvbiB0eXBlICIrUy5vcCsiIGZvciAiK1MudCl9Ui53cml0''@;'; put 'put ''ZV9zaGlmdCgxLDB8RyksUi53cml0ZV9zaGlmdCgxLDEpLFIud3JpdGVfc2hpZnQoMSwxMnxvZTw8NCksUi53cml0ZV9zaGlmdCgxLDApLGsucHVzaChmdW5jdGlvbiBSMyhTKXt2YXIgUj1TLnNwbGl0KC9ccyosXHMqLyksaz1ibig0KTtrLndyaXRlX3NoaWZ0KDQsUi5sZW5ndGgpO3ZhciBH''@;'; put 'put ''PVtrXTtyZXR1cm4gUi5mb3JFYWNoKGZ1bmN0aW9uKFEpe0cucHVzaChnZihvbyhRKSkpfSksaihHKX0oInN0cmluZyI9PXR5cGVvZiBTLnJlZj9TLnJlZjpyYShTLnJlZikpKTt2YXIgZ2U9Ym4oMTYpO2dlLndyaXRlX3NoaWZ0KDQsNDI5NDk2NzI5NSksZ2Uud3JpdGVfc2hpZnQoNCw0Mjk0''@;'; put 'put ''OTY3Mjk1KSxnZS53cml0ZV9zaGlmdCg0LDQyOTQ5NjcyOTUpLGdlLndyaXRlX3NoaWZ0KDQsNDI5NDk2NzI5NSksay5wdXNoKGdlKTt2YXIgcGU9Ym4oOCk7cGUud3JpdGVfc2hpZnQoNCwwKSxwZS53cml0ZV9zaGlmdCg0LDApO3ZhciB5ZT0xO3N3aXRjaChTLnQpe2Nhc2UiQW55IjprLnB1''@;'; put 'put ''c2gocGUpLGsucHVzaChwZSk7YnJlYWs7Y2FzZSJEZWNpbWFsIjpjYXNlIkxlbmd0aCI6Y2FzZSJXaG9sZSI6aWYobnVsbCE9Uy52fHxudWxsIT1TLmYpay5wdXNoKCJudW1iZXIiPT10eXBlb2YgUy52P3RTKFMudik6VTQobnVsbD09Uy52P1MuZjpTLnYpKTtlbHNle2lmKG51bGw9PVMubWlu''@;'; put 'put ''fHxudWxsPT1TLm1heCl0aHJvdyJVbnN1cHBvcnRlZCBEYXRhIFZhbGlkYXRpb246IGB2YCBvciBgbWluYCtgbWF4YCByZXF1aXJlZCBmb3IgVHlwZSAiK1MudDtrLnB1c2goIm51bWJlciI9PXR5cGVvZiBTLm1pbj90UyhTLm1pbik6VTQoUy5taW4pKSxrLnB1c2goIm51bWJlciI9PXR5cGVv''@;'; put 'put ''ZiBTLm1heD90UyhTLm1heCk6VTQoUy5tYXgpKSx5ZT0yfWJyZWFrO2Nhc2UiTGlzdCI6aWYobnVsbCE9Uy5sKXtrLnB1c2goblMoUy5sLmpvaW4oIiwiKSkpO2JyZWFrfWNhc2UiQ3VzdG9tIjppZigibnVsbCIhPVMuZil7ay5wdXNoKFU0KFMuZikpO2JyZWFrfXRocm93IlVuc3VwcG9ydGVk''@;'; put 'put ''IERhdGEgVmFsaWRhdGlvbjogYGZgIisoIkxpc3QiPT1TLnQ/IiBvciBgbGAiOiIiKSsiIHJlcXVpcmVkIGZvciBUeXBlICIrUy50O2RlZmF1bHQ6dGhyb3ciWExTQiBkb2VzIG5vdCBzdXBwb3J0IERhdGEgVmFsaWRhdGlvbiB0eXBlICIrUy50fXJldHVybiAxPT15ZSYmay5wdXNoKHBlKSxq''@;'; put 'put ''KGspfWZ1bmN0aW9uIGV6KFMsUixrLEcsUSxvZSxnZSl7aWYodm9pZCAwPT09Ui52JiZudWxsPT1SLnN8fCJ6Ij09PVIudCYmIVEuc2hlZXRTdHVicylyZXR1cm4hMTt2YXIgcGU9IiI7c3dpdGNoKFIudCl7Y2FzZSJiIjpwZT1SLnY/IjEiOiIwIjticmVhaztjYXNlImQiOihSPXF0KFIpKS56''@;'; put 'put ''PVIuenx8QS5fdGFibGVbMTRdLFIudj1RZShIZShSLnYpKSxSLnQ9Im4iO2JyZWFrO2Nhc2UibiI6Y2FzZSJlIjpwZT0iIitSLnY7YnJlYWs7ZGVmYXVsdDpwZT1SLnZ9dmFyIHllPXtyOmssYzpHfTtzd2l0Y2goeWUucz1sMChRLmNlbGxYZnMsUS5jZWxsU3R5bGVYZnMsUixRKSxSLmwmJm9l''@;'; put 'put ''WyIhbGlua3MiXS5wdXNoKFtxaSh5ZSksUi5sXSksUi5jJiZvZVsiIWNvbW1lbnRzIl0ucHVzaChbcWkoeWUpLFIuY10pLFIudCl7Y2FzZSJzIjpjYXNlInN0ciI6aWYoUS5ib29rU1NUKXtpZihwZT1hUyhRLlN0cmluZ3MsUi52LFIuUj9SLnI9UXMoUi5SKTpudWxsLFEucmV2U3RyaW5ncyks''@;'; put 'put ''Ui5SKWZvcih2YXIgUGU9MDtQZTxSLlIubGVuZ3RoOysrUGUpUi5SW1BlXS5zJiZsMChRLmNlbGxYZnMsUS5jZWxsU3R5bGVYZnMse3Q6Im4iLHY6MCxzOlIuUltQZV0uc30sUSk7eWUudD0icyIseWUudj1wZSxnZT9GcihTLCJCcnRTaG9ydElzc3QiLGZ1bmN0aW9uIGZiKFMsUixrKXtyZXR1''@;'; put 'put ''cm4gbnVsbD09ayYmKGs9Ym4oOCkpLGZpKFIsayksay53cml0ZV9zaGlmdCg0LFIudiksa30oMCx5ZSkpOkZyKFMsIkJydENlbGxJc3N0IixmdW5jdGlvbiBMaihTLFIsayl7cmV0dXJuIG51bGw9PWsmJihrPWJuKDEyKSkseHIoUixrKSxrLndyaXRlX3NoaWZ0KDQsUi52KSxrfSgwLHllKSl9''@;'; put 'put ''ZWxzZSB5ZS50PSJzdHIiLGdlP0ZyKFMsIkJydFNob3J0U3QiLGZ1bmN0aW9uIHpqKFMsUixrKXtyZXR1cm4gbnVsbD09ayYmKGs9Ym4oOCs0KlMudi5sZW5ndGgpKSxmaShSLGspLEZjKFMudixrKSxrLmxlbmd0aD5rLmw/ay5zbGljZSgwLGsubCk6a30oUix5ZSkpOkZyKFMsIkJydENlbGxT''@;'; put 'put ''dCIsZnVuY3Rpb24gQmooUyxSLGspe3JldHVybiBudWxsPT1rJiYoaz1ibigxMis0KlMudi5sZW5ndGgpKSx4cihSLGspLEZjKFMudixrKSxrLmxlbmd0aD5rLmw/ay5zbGljZSgwLGsubCk6a30oUix5ZSkpO3JldHVybiEwO2Nhc2UibiI6cmV0dXJuIFIudj09KDB8Ui52KSYmUi52Pi0xZTMm''@;'; put 'put ''JlIudjwxZTM/Z2U/RnIoUywiQnJ0U2hvcnRSayIsZnVuY3Rpb24gVmooUyxSLGspe3JldHVybiBudWxsPT1rJiYoaz1ibig4KSksZmkoUixrKSx1dihTLnYsayksa30oUix5ZSkpOkZyKFMsIkJydENlbGxSayIsZnVuY3Rpb24gTmooUyxSLGspe3JldHVybiBudWxsPT1rJiYoaz1ibigxMikp''@;'; put 'put ''LHhyKFIsayksdXYoUy52LGspLGt9KFIseWUpKTpnZT9GcihTLCJCcnRTaG9ydFJlYWwiLGZ1bmN0aW9uIEluZShTLFIsayl7cmV0dXJuIG51bGw9PWsmJihrPWJuKDEyKSksZmkoUixrKSxPdShTLnYsayksa30oUix5ZSkpOkZyKFMsIkJydENlbGxSZWFsIixmdW5jdGlvbiBQaihTLFIsayl7''@;'; put 'put ''cmV0dXJuIG51bGw9PWsmJihrPWJuKDE2KSkseHIoUixrKSxPdShTLnYsayksa30oUix5ZSkpLCEwO2Nhc2UiYiI6cmV0dXJuIHllLnQ9ImIiLGdlP0ZyKFMsIkJydFNob3J0Qm9vbCIsZnVuY3Rpb24geFMoUyxSLGspe3JldHVybiBudWxsPT1rJiYoaz1ibig1KSksZmkoUixrKSxrLndyaXRl''@;'; put 'put ''X3NoaWZ0KDEsUy52PzE6MCksa30oUix5ZSkpOkZyKFMsIkJydENlbGxCb29sIixmdW5jdGlvbiBJaihTLFIsayl7cmV0dXJuIG51bGw9PWsmJihrPWJuKDkpKSx4cihSLGspLGsud3JpdGVfc2hpZnQoMSxTLnY/MTowKSxrfShSLHllKSksITA7Y2FzZSJlIjpyZXR1cm4geWUudD0iZSIsZ2U/''@;'; put 'put ''RnIoUywiQnJ0U2hvcnRFcnJvciIsZnVuY3Rpb24gU2woUyxSLGspe3JldHVybiBudWxsPT1rJiYoaz1ibig4KSksZmkoUixrKSxrLndyaXRlX3NoaWZ0KDEsUy52KSxrLndyaXRlX3NoaWZ0KDIsMCksay53cml0ZV9zaGlmdCgxLDApLGt9KFIseWUpKTpGcihTLCJCcnRDZWxsRXJyb3IiLGZ1''@;'; put 'put ''bmN0aW9uIHk4KFMsUixrKXtyZXR1cm4gbnVsbD09ayYmKGs9Ym4oOSkpLHhyKFIsayksay53cml0ZV9zaGlmdCgxLFMudiksa30oUix5ZSkpLCEwfXJldHVybiBnZT9GcihTLCJCcnRTaG9ydEJsYW5rIixmdW5jdGlvbiB6RChTLFIsayl7cmV0dXJuIG51bGw9PWsmJihrPWJuKDQpKSxmaShS''@;'; put 'put ''LGspfSgwLHllKSk6RnIoUywiQnJ0Q2VsbEJsYW5rIixmdW5jdGlvbiBBaihTLFIsayl7cmV0dXJuIG51bGw9PWsmJihrPWJuKDgpKSx4cihSLGspfSgwLHllKSksITB9ZnVuY3Rpb24gVzUoUyxSLGssRyl7dmFyIFE9YmkoKSxvZT1rLlNoZWV0TmFtZXNbU10sZ2U9ay5TaGVldHNbb2VdfHx7''@;'; put 'put ''fSxwZT1vZTt0cnl7ayYmay5Xb3JrYm9vayYmKHBlPWsuV29ya2Jvb2suU2hlZXRzW1NdLkNvZGVOYW1lfHxwZSl9Y2F0Y2h7fXZhciB5ZT1vbyhnZVsiIXJlZiJdfHwiQTEiKTtpZih5ZS5lLmM+MTYzODN8fHllLmUucj4xMDQ4NTc1KXtpZihSLldURil0aHJvdyBuZXcgRXJyb3IoIlJhbmdl''@;'; put 'put ''ICIrKGdlWyIhcmVmIl18fCJBMSIpKyIgZXhjZWVkcyBmb3JtYXQgbGltaXQgQTE6WEZEMTA0ODU3NiIpO3llLmUuYz1NYXRoLm1pbih5ZS5lLmMsMTYzODMpLHllLmUucj1NYXRoLm1pbih5ZS5lLmMsMTA0ODU3NSl9cmV0dXJuIGdlWyIhbGlua3MiXT1bXSxnZVsiIWNvbW1lbnRzIl09W10s''@;'; put 'put ''RnIoUSwiQnJ0QmVnaW5TaGVldCIpLChrLnZiYXJhd3x8Z2VbIiFvdXRsaW5lIl0pJiZGcihRLCJCcnRXc1Byb3AiLGZ1bmN0aW9uIFRqKFMsUixrKXtudWxsPT1rJiYoaz1ibig4NCs0KlMubGVuZ3RoKSk7dmFyIEc9MTkyO1ImJihSLmFib3ZlJiYoRyY9LTY1KSxSLmxlZnQmJihHJj0tMTI5''@;'; put 'put ''KSksay53cml0ZV9zaGlmdCgxLEcpO2Zvcih2YXIgUT0xO1E8MzsrK1Epay53cml0ZV9zaGlmdCgxLDApO3JldHVybiBtZih7YXV0bzoxfSxrKSxrLndyaXRlX3NoaWZ0KC00LC0xKSxrLndyaXRlX3NoaWZ0KC00LC0xKSxzNShTLGspLGsuc2xpY2UoMCxrLmwpfShwZSxnZVsiIW91dGxpbmUi''@;'; put 'put ''XSkpLEZyKFEsIkJydFdzRGltIixFaih5ZSkpLGZ1bmN0aW9uIGl6KFMsUixrKXtGcihTLCJCcnRCZWdpbldzVmlld3MiKSxGcihTLCJCcnRCZWdpbldzVmlldyIsZnVuY3Rpb24gTTgoUyxSLGspe251bGw9PWsmJihrPWJuKDMwKSk7dmFyIEc9OTI0O3JldHVybigoKFJ8fHt9KS5WaWV3c3x8''@;'; put 'put ''W10pWzBdfHx7fSkuUlRMJiYoR3w9MzIpLFd0KFNbIiFncmlkbGluZXMiXSkmJihHJj0tNSksV3QoKCgoUnx8e30pLlZpZXdzfHxbXSlbMF18fHt9KS5ncmlkKSYmKEcmPS01KSxrLndyaXRlX3NoaWZ0KDIsRyksay53cml0ZV9zaGlmdCg0LDApLGsud3JpdGVfc2hpZnQoNCwwKSxrLndyaXRl''@;'; put 'put ''X3NoaWZ0KDQsMCksay53cml0ZV9zaGlmdCgxLDApLGsud3JpdGVfc2hpZnQoMSwwKSxrLndyaXRlX3NoaWZ0KDIsMCksay53cml0ZV9zaGlmdCgyLDEwMCksay53cml0ZV9zaGlmdCgyLDApLGsud3JpdGVfc2hpZnQoMiwwKSxrLndyaXRlX3NoaWZ0KDIsMCksay53cml0ZV9zaGlmdCg0LDAp''@;'; put 'put ''LGt9KFIsaykpLFJbIiFmcmVlemUiXSYmRnIoUywiQnJ0UGFuZSIsZnVuY3Rpb24gWmooUyl7dmFyIFI9Tm8oU1siIWZyZWV6ZSJdKSxrPWJuKDI5KTtyZXR1cm4gay53cml0ZV9zaGlmdCg4LFIuYywiZiIpLGsud3JpdGVfc2hpZnQoOCxSLnIsImYiKSxrLndyaXRlX3NoaWZ0KDQsUi5yKSxr''@;'; put 'put ''LndyaXRlX3NoaWZ0KDQsUi5jKSxrLndyaXRlX3NoaWZ0KDQsMCksay53cml0ZV9zaGlmdCgxLDMpLGt9KFIpKSxSWyIhc2VsIl0mJkZyKFMsIkJydFNlbCIsZnVuY3Rpb24gV2ooUyxSKXt2YXIgaz1ibigzNiksRz1TLmNlbGw7aWYoIUcpe2lmKCFTLnJhbmdlKXRocm93IG5ldyBFcnJvcigi''@;'; put 'put ''TXVzdCBzcGVjaWZ5IGEgc2VsZWN0aW9uIGNlbGwgb3IgcmFuZ2UiKTtHPXFpKE1zKFMucmFuZ2UucmVwbGFjZSgvXHMuKiQvLCIiKSkucyl9dmFyIFE9InN0cmluZyI9PXR5cGVvZiBHP05vKEcpOkc7aWYoUil7dmFyIG9lPSJzdHJpbmciPT10eXBlb2YgUj9ObyhSKTpSO2sud3JpdGVfc2hp''@;'; put 'put ''ZnQoNCxRLnI+PW9lLnImJlEuYz49b2UuYz8wOlEucj49b2UuciYmUS5jPG9lLmM/MjpRLnI8b2UuciYmUS5jPj1vZS5jPzE6Myl9ZWxzZSBrLndyaXRlX3NoaWZ0KDQsMyk7cmV0dXJuIGsud3JpdGVfc2hpZnQoNCxRLnIpLGsud3JpdGVfc2hpZnQoNCxRLmMpLGsud3JpdGVfc2hpZnQoNCww''@;'; put 'put ''KSxrLndyaXRlX3NoaWZ0KDQsMSksay53cml0ZV9zaGlmdCg0LFEuciksay53cml0ZV9zaGlmdCg0LFEuciksay53cml0ZV9zaGlmdCg0LFEuYyksay53cml0ZV9zaGlmdCg0LFEuYyksa30oUlsiIXNlbCJdLFJbIiFmcmVlemUiXSkpLEZyKFMsIkJydEVuZFdzVmlldyIpLEZyKFMsIkJydEVu''@;'; put 'put ''ZFdzVmlld3MiKX0oUSxnZSxrLldvcmtib29rKSxmdW5jdGlvbiBueihTLFIpeyFSfHwhUlsiIWNvbHMiXXx8KEZyKFMsIkJydEJlZ2luQ29sSW5mb3MiKSxSWyIhY29scyJdLmZvckVhY2goZnVuY3Rpb24oayxHKXtrJiZGcihTLCJCcnRDb2xJbmZvIixmdW5jdGlvbiBHaihTLFIsayl7bnVs''@;'; put 'put ''bD09ayYmKGs9Ym4oMTgpKTt2YXIgRz11OChTLFIpO2sud3JpdGVfc2hpZnQoLTQsUyksay53cml0ZV9zaGlmdCgtNCxTKSxrLndyaXRlX3NoaWZ0KDQsMjU2KihHLndpZHRofHwxMCkpLGsud3JpdGVfc2hpZnQoNCwwKTt2YXIgUT0wO3JldHVybiBSLmhpZGRlbiYmKFF8PTEpLCJudW1iZXIi''@;'; put 'put ''PT10eXBlb2YgRy53aWR0aCYmKFF8PTIpLFIubGV2ZWwmJihRfD1SLmxldmVsPDw4KSxrLndyaXRlX3NoaWZ0KDIsUSksa30oRyxrKSl9KSxGcihTLCJCcnRFbmRDb2xJbmZvcyIpKX0oUSxnZSksZnVuY3Rpb24gSkQoUyxSLGssRyl7dmFyIFE9b28oUlsiIXJlZiJdfHwiQTEiKSxnZT0iIixw''@;'; put 'put ''ZT1bXTtGcihTLCJCcnRCZWdpblNoZWV0RGF0YSIpO3ZhciB5ZT1BcnJheS5pc0FycmF5KFIpLFBlPVEuZS5yO1JbIiFyb3dzIl0mJihQZT1NYXRoLm1heChRLmUucixSWyIhcm93cyJdLmxlbmd0aC0xKSk7Zm9yKHZhciBOZT1RLnMucjtOZTw9UGU7KytOZSl7Z2U9amkoTmUpLE1qKFMsUixR''@;'; put 'put ''LE5lKTt2YXIgWWU9ITE7aWYoTmU8PVEuZS5yKWZvcih2YXIgZXQ9US5zLmM7ZXQ8PVEuZS5jOysrZXQpe05lPT09US5zLnImJihwZVtldF09VGEoZXQpKTt2YXIgY3Q9eWU/KFJbTmVdfHxbXSlbZXRdOlJbcGVbZXRdK2dlXTtZZT0hIWN0JiZleihTLGN0LE5lLGV0LEcsUixZZSl9fUZyKFMs''@;'; put 'put ''IkJydEVuZFNoZWV0RGF0YSIpfShRLGdlLDAsUiksZnVuY3Rpb24gT25lKFMsUil7UlsiIXByb3RlY3QiXSYmRnIoUywiQnJ0U2hlZXRQcm90ZWN0aW9uIixmdW5jdGlvbiBtYihTLFIpe3JldHVybiBudWxsPT1SJiYoUj1ibig2NikpLFIud3JpdGVfc2hpZnQoMixTLnBhc3N3b3JkP0h2KFMu''@;'; put 'put ''cGFzc3dvcmQpOjApLFIud3JpdGVfc2hpZnQoNCwxKSxbWyJvYmplY3RzIiwhMV0sWyJzY2VuYXJpb3MiLCExXSxbImZvcm1hdENlbGxzIiwhMF0sWyJmb3JtYXRDb2x1bW5zIiwhMF0sWyJmb3JtYXRSb3dzIiwhMF0sWyJpbnNlcnRDb2x1bW5zIiwhMF0sWyJpbnNlcnRSb3dzIiwhMF0sWyJp''@;'; put 'put ''bnNlcnRIeXBlcmxpbmtzIiwhMF0sWyJkZWxldGVDb2x1bW5zIiwhMF0sWyJkZWxldGVSb3dzIiwhMF0sWyJzZWxlY3RMb2NrZWRDZWxscyIsITFdLFsic29ydCIsITBdLFsiYXV0b0ZpbHRlciIsITBdLFsicGl2b3RUYWJsZXMiLCEwXSxbInNlbGVjdFVubG9ja2VkQ2VsbHMiLCExXV0uZm9y''@;'; put 'put ''RWFjaChmdW5jdGlvbihrKXtSLndyaXRlX3NoaWZ0KDQsa1sxXT9udWxsPT1TW2tbMF1dfHxTW2tbMF1dPzA6MTpudWxsIT1TW2tbMF1dJiZTW2tbMF1dPzA6MSl9KSxSfShSWyIhcHJvdGVjdCJdKSl9KFEsZ2UpLGZ1bmN0aW9uIFFEKFMsUixrLEcpe2lmKFJbIiFhdXRvZmlsdGVyIl0pe3Zh''@;'; put 'put ''ciBRPVJbIiFhdXRvZmlsdGVyIl0sb2U9InN0cmluZyI9PXR5cGVvZiBRLnJlZj9RLnJlZjpyYShRLnJlZik7ay5Xb3JrYm9va3x8KGsuV29ya2Jvb2s9e1NoZWV0czpbXX0pLGsuV29ya2Jvb2suTmFtZXN8fChrLldvcmtib29rLk5hbWVzPVtdKTt2YXIgZ2U9ay5Xb3JrYm9vay5OYW1lcyxw''@;'; put 'put ''ZT1NcyhvZSk7cGUucy5yPT1wZS5lLnImJihwZS5lLnI9TXMoUlsiIXJlZiJdKS5lLnIsb2U9cmEocGUpKTtmb3IodmFyIHllPTA7eWU8Z2UubGVuZ3RoOysreWUpe3ZhciBQZT1nZVt5ZV07aWYoIl94bG5tLl9GaWx0ZXJEYXRhYmFzZSI9PVBlLk5hbWUmJlBlLlNoZWV0PT1HKXtQZS5SZWY9''@;'; put 'put ''IiciK2suU2hlZXROYW1lc1tHXSsiJyEiK29lO2JyZWFrfX15ZT09Z2UubGVuZ3RoJiZnZS5wdXNoKHtOYW1lOiJfeGxubS5fRmlsdGVyRGF0YWJhc2UiLFNoZWV0OkcsUmVmOiInIitrLlNoZWV0TmFtZXNbR10rIichIitvZX0pLEZyKFMsIkJydEJlZ2luQUZpbHRlciIsZ2Yob28ob2UpKSks''@;'; put 'put ''RnIoUywiQnJ0RW5kQUZpbHRlciIpfX0oUSxnZSxrLFMpLGZ1bmN0aW9uIHR6KFMsUil7IVJ8fCFSWyIhbWVyZ2VzIl18fChGcihTLCJCcnRCZWdpbk1lcmdlQ2VsbHMiLGZ1bmN0aW9uIFlEKFMsUil7cmV0dXJuIG51bGw9PVImJihSPWJuKDQpKSxSLndyaXRlX3NoaWZ0KDQsUyksUn0oUlsi''@;'; put 'put ''IW1lcmdlcyJdLmxlbmd0aCkpLFJbIiFtZXJnZXMiXS5mb3JFYWNoKGZ1bmN0aW9uKGspe0ZyKFMsIkJydE1lcmdlQ2VsbCIsQzgoaykpfSksRnIoUywiQnJ0RW5kTWVyZ2VDZWxscyIpKX0oUSxnZSksZnVuY3Rpb24gb3ooUyxSKXtpZihSKXtGcihTLCJCcnRCZWdpbkRWYWxzIixmdW5jdGlv''@;'; put 'put ''biB2YihTLFIpe251bGw9PVImJihSPWJuKDE4KSksUi53cml0ZV9zaGlmdCgyLDApLFIud3JpdGVfc2hpZnQoNCwwKSxSLndyaXRlX3NoaWZ0KDQsMCksUi53cml0ZV9zaGlmdCg0LDApO2Zvcih2YXIgaz0wLEc9MDtHPFMubGVuZ3RoOysrRykoKFNbR118fHt9KS5yZWZ8fHt9KS5zJiZTW0dd''@;'; put 'put ''LnJlZi5zLmM8MHx8KytrO3JldHVybiBSLndyaXRlX3NoaWZ0KDQsayksUn0oUikpO2Zvcih2YXIgaz0wO2s8Ui5sZW5ndGg7KytrKSgoUltrXXx8e30pLnJlZnx8e30pLnMmJlJba10ucmVmLnMuYzwwfHxGcihTLCJCcnREVmFsIixYRChSW2tdKSk7RnIoUywiQnJ0RW5kRFZhbHMiKX19KFEs''@;'; put 'put ''Z2VbIiF2YWxpZGF0aW9ucyJdKSxmdW5jdGlvbiBiYihTLFIsayl7UlsiIWxpbmtzIl0uZm9yRWFjaChmdW5jdGlvbihHKXtpZihHWzFdLlRhcmdldCl7dmFyIFE9RXIoaywtMSxHWzFdLlRhcmdldC5yZXBsYWNlKC8jLiokLywiIiksS2EuSExJTkspO0ZyKFMsIkJydEhMaW5rIixmdW5jdGlv''@;'; put 'put ''biBTOChTLFIpe3ZhciBrPWJuKDUwKzQqKFNbMV0uVGFyZ2V0Lmxlbmd0aCsoU1sxXS5Ub29sdGlwfHwiIikubGVuZ3RoKSk7Z2Yoe3M6Tm8oU1swXSksZTpObyhTWzBdKX0sayksYzUoInJJZCIrUixrKTt2YXIgRz1TWzFdLlRhcmdldC5pbmRleE9mKCIjIik7cmV0dXJuIEZjKCgtMT09Rz8i''@;'; put 'put ''IjpTWzFdLlRhcmdldC5zbGljZShHKzEpKXx8IiIsayksRmMoU1sxXS5Ub29sdGlwfHwiIixrKSxGYygiIixrKSxrLnNsaWNlKDAsay5sKX0oRyxRKSl9fSksZGVsZXRlIFJbIiFsaW5rcyJdfShRLGdlLEcpLGdlWyIhbWFyZ2lucyJdJiZGcihRLCJCcnRNYXJnaW5zIixmdW5jdGlvbiBLaihT''@;'; put 'put ''LFIpe3JldHVybiBudWxsPT1SJiYoUj1ibig0OCkpLFgzKFMpLEtELmZvckVhY2goZnVuY3Rpb24oayl7T3UoU1trXSxSKX0pLFJ9KGdlWyIhbWFyZ2lucyJdKSksKCFSfHxSLmlnbm9yZUVDfHxudWxsPT1SLmlnbm9yZUVDKSYmZnVuY3Rpb24gWjUoUyxSKXshUnx8IVJbIiFyZWYiXXx8KEZy''@;'; put 'put ''KFMsIkJydEJlZ2luQ2VsbElnbm9yZUVDcyIpLEZyKFMsIkJydENlbGxJZ25vcmVFQyIsZnVuY3Rpb24gcWooUyl7dmFyIFI9Ym4oMjQpO3JldHVybiBSLndyaXRlX3NoaWZ0KDQsNCksUi53cml0ZV9zaGlmdCg0LDEpLGdmKFMsUiksUn0ob28oUlsiIXJlZiJdKSkpLEZyKFMsIkJydEVuZENl''@;'; put 'put ''bGxJZ25vcmVFQ3MiKSl9KFEsZ2UpLGZ1bmN0aW9uIHJ6KFMsUixrLEcpe2lmKFJbIiFjb21tZW50cyJdLmxlbmd0aD4wKXt2YXIgUT1FcihHLC0xLCIuLi9kcmF3aW5ncy92bWxEcmF3aW5nIisoaysxKSsiLnZtbCIsS2EuVk1MKTtGcihTLCJCcnRMZWdhY3lEcmF3aW5nIixjNSgicklkIitR''@;'; put 'put ''KSksUlsiIWxlZ2FjeSJdPVF9fShRLGdlLFMsRyksRnIoUSwiQnJ0RW5kU2hlZXQiKSxRLmVuZCgpfWZ1bmN0aW9uIHg4KFMpe3ZhciBHLFI9W10saz1TLm1hdGNoKC9ePGM6bnVtQ2FjaGU+Lyk7KFMubWF0Y2goLzxjOnB0IGlkeD0iKFxkKikiPiguKj8pPFwvYzpwdD4vZ20pfHxbXSkuZm9y''@;'; put 'put ''RWFjaChmdW5jdGlvbihvZSl7dmFyIGdlPW9lLm1hdGNoKC88YzpwdCBpZHg9IihcZCo/KSI+PGM6dj4oLiopPFwvYzp2PjxcL2M6cHQ+Lyk7Z2UmJihSWytnZVsxXV09az8rZ2VbMl06Z2VbMl0pfSk7dmFyIFE9UXIoKFMubWF0Y2goLzxjOmZvcm1hdENvZGU+KFtcc1xTXSo/KTxcL2M6Zm9y''@;'; put 'put ''bWF0Q29kZT4vKXx8WyIiLCJHZW5lcmFsIl0pWzFdKTtyZXR1cm4oUy5tYXRjaCgvPGM6Zj4oLio/KTxcL2M6Zj4vZ20pfHxbXSkuZm9yRWFjaChmdW5jdGlvbihvZSl7Rz1vZS5yZXBsYWNlKC88Lio/Pi9nLCIiKX0pLFtSLFEsR119S2EuQ0hBUlQ9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxm''@;'; put 'put ''b3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvY2hhcnQiLEthLkNIQVJURVg9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlLzIwMTQvcmVsYXRpb25zaGlwcy9jaGFydEV4Ijt2YXIgbHo9LzwoPzpcdys6KT9jaGFydD4oW1xzXFNdKj8pPFwv''@;'; put 'put ''KD86XHcrOik/Y2hhcnQ+LyxSUz0vPCg/Olx3KzopP3Bsb3RBcmVhPihbXHNcU10qPyk8XC8oPzpcdys6KT9wbG90QXJlYT4vLFBuZT0vPCg/Olx3KzopP2xlZ2VuZD4oW1xzXFNdKj8pPFwvKD86XHcrOik/bGVnZW5kPi8sZUk9LzwoPzpcdys6KT90aXRsZT4oW1xzXFNdKj8pPFwvKD86XHcr''@;'; put 'put ''Oik/dGl0bGU+LztmdW5jdGlvbiBiMihTLFIsayxHLFEsb2UsZ2UscGUpe3ZhciB5ZT1vZXx8eyIhdHlwZSI6ImNoYXJ0In07aWYoIVMpcmV0dXJuIG9lO2dlJiZnZS5BbmNob3ImJih5ZVsiIXBvcyJdPUw1KGdlLkFuY2hvcixwZSkseWVbIiFwb3NUeXBlIl09Z2UuQW5jaG9yLnR5cGUucmVw''@;'; put 'put ''bGFjZSgvQW5jaG9yLywiIikseWVbIiFhYnNwb3MiXT1MNShnZS5BbmNob3IscGUpLHllWyIhcmVscG9zIl09QUMoZ2UuQW5jaG9yLHBlKSkseWVbIiFwbG90Il09W107dmFyIFBlPSIiLE5lPSIiLFllPVMubWF0Y2gobHopO1llPyhQZT1TLnNsaWNlKDAsWWUuaW5kZXgpLE5lPVMuc2xpY2Uo''@;'; put 'put ''WWUuaW5kZXgrWWVbMF0ubGVuZ3RoKSk6UGU9TmU9Uzt2YXIgZXQ9W10sY3Q9UGUubWF0Y2goLzxjOmxhbmcuKj8+Lyl8fFMubWF0Y2goLzxjOmxhbmcuKj8+Lyl8fE5lLm1hdGNoKC88YzpsYW5nLio/Pi8pO3JldHVybiBjdCYmKHllWyIhbGFuZyJdPSh2cihjdFswXSl8fHt9KS52YWx8fCJl''@;'; put 'put ''bi1VUyIpLFllJiYoKGV0PVllWzFdLm1hdGNoKGVJKSkmJmZ1bmN0aW9uIHN6KFMsUil7dmFyIGs9IiI7Uy5tYXRjaCgvPGM6cmljaD4vKSYmUy5yZXBsYWNlKC88YTp0PihbXHNcU10qPyk8XC9hOnQ+L2csZnVuY3Rpb24oRyxRKXtrKz1RfSksUlsiIXRpdGxlIl09a3x8IkNoYXJ0IFRpdGxl''@;'; put 'put ''In0oZXRbMV0seWUpLGZ1bmN0aW9uIEZuZShTLFIpe2lmKFMpe3ZhciBrPTAsRz0wLFE9IkEiLG9lPXtzOntyOjJlNixjOjJlNn0sZTp7cjowLGM6MH19O1MucmVwbGFjZSh0SSxmdW5jdGlvbihnZSxwZSl7dmFyIHllPXt0OnBlLGM6ayx3OjAsc2VyOltdfSxQZT1bXSxOZT0oZ2UubWF0Y2go''@;'; put 'put ''LzxjOnNlci8pfHxbXSkuaW5kZXgsWWU9TmU/Z2Uuc2xpY2UoMCxOZSk6Z2U7InNjYXR0ZXIiPT1wZSYmKFBlPWdlLm1hdGNoKC88YzpzY2F0dGVyU3R5bGUoW15cLz5dKilcLz4vbSkpJiZ2cihQZVswXSksImJhciI9PXBlJiYoUGU9Z2UubWF0Y2goLzxjOmJhckRpcihbXlwvPl0qKVwvPi9t''@;'; put 'put ''KSkmJih5ZS5iYXJEaXI9ImJhciI9PXZyKFBlWzBdKS52YWw/ImgiOiJ2IiksKFBlPVllLm1hdGNoKC88Yzpncm91cGluZyhbXlwvPl0qKVwvPi9tKSkmJih5ZS5ncm91cGluZz12cihQZVswXSkudmFsfHwic3RhbmRhcmQiKSwoZ2UubWF0Y2goY3opfHxbXSkuZm9yRWFjaChmdW5jdGlvbihj''@;'; put 'put ''dCl7dmFyIEV0PVtdLGF0PXt9LGJ0PVtdO2lmKGN0Lm1hdGNoKC88Yzp0eD4vKSl7dmFyIGp0PXg4KChjdC5tYXRjaCgvPGM6dHg+KFtcc1xTXSo/KTxcL2M6dHg+Lyl8fFtdKVsxXXx8IiIpfHxbXTtqdFswXSYmanRbMF1bMF0mJihhdC5uYW1lPWp0WzBdWzBdKSxqdFsyXSYmKGF0Lm5hbWVy''@;'; put 'put ''ZWY9anRbMl0pfVsieFZhbCIsInlWYWwiLCJjYXQiLCJ2YWwiLCJidWJibGVTaXplIl0uZm9yRWFjaChmdW5jdGlvbihrdCl7dmFyIEt0LE90PWN0Lm1hdGNoKG5ldyBSZWdFeHAoIjxjOiIra3QrIj5bXFxzXFxTXSo/PFxcL2M6IitrdCsiPiIsImdtIikpO090JiYoKE90WzBdLm1hdGNoKC88''@;'; put 'put ''YzpmPiguKj8pPFwvYzpmPi9nbSl8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKFRuKXtLdD1Ubi5yZXBsYWNlKC88Lio/Pi9nLCIiKX0pLChPdFswXS5tYXRjaCgvPGM6KD86XHcqKUNhY2hlPltcc1xTXSo/PFwvYzooPzpcdyopQ2FjaGU+L2dtKXx8W10pLmZvckVhY2goZnVuY3Rpb24oVG4pe3Zh''@;'; put 'put ''ciBycj14OChUbik7b2Uucy5yPW9lLnMuYz0wLG9lLmUuYz1rLFE9VGEoaykscnJbMF0uZm9yRWFjaChmdW5jdGlvbihTbixscil7UltRK2ppKGxyKV09e3Q6Im51bWJlciI9PXR5cGVvZiBTbj8ibiI6InMiLHY6U24sejpyclsxXX0sRz1scn0pLG9lLmUucjxHJiYob2UuZS5yPUcpLCsrayx5''@;'; put 'put ''ZS53KyssRXQucHVzaChrdCksKHJyWzJdfHxLdCkmJmJ0LnB1c2gocnJbMl18fEt0KSwidmFsIj09a3QmJihhdC56PXJyWzFdfHwiR2VuZXJhbCIpfSkpfSksKFBlPWdlLm1hdGNoKC88YzpzbW9vdGgoW15cLz5dKilcLz4vbSkpJiYoYXQuc21vb3RoPW51bGw9PXZyKFBlWzBdKS52YWx8fHRp''@;'; put 'put ''KHZyKFBlWzBdKS52YWwpKSxhdC5jb2xzPUV0LGF0LnJhbmdlcz1idCx5ZS5zZXIucHVzaChhdCl9KSwiZG91Z2hudXQiPT1wZSYmKFBlPWdlLm1hdGNoKC88Yzpob2xlU2l6ZShbXlwvPl0qKVwvPi9tKSkmJih5ZS5ob2xlPSh2cihQZVswXSkudmFsfHwxMCkvMTAwKSxSWyIhcGxvdCJdLnB1''@;'; put 'put ''c2goeWUpfSksaz4wJiYoUlsiIXJlZiJdPXJhKG9lKSl9fSgoWWVbMV0ubWF0Y2goUlMpfHxbXSlbMV0seWUpLG51bGwhPShldD1ZZVsxXS5tYXRjaChQbmUpKSYmZnVuY3Rpb24gRW8oUyxSKXt2YXIgaztSWyIhbGVnZW5kIl09e3BvczoiciJ9LChrPVMubWF0Y2goLzxjOmxlZ2VuZFBvcyhb''@;'; put 'put ''XlwvPl0qKVwvPi9tKSkmJihSWyIhbGVnZW5kIl0ucG9zPXZyKGtbMF0pLnZhbHx8InIiKX0oZXRbMF0seWUpKSx5ZX12YXIgdEk9LzxjOigoPzphcmVhfGxpbmV8c3RvY2t8cmFkYXJ8c2NhdHRlcnxwaWV8ZG91Z2hudXR8YmFyfG9mUGllfHN1cmZhY2V8YnViYmxlKSg/OjNEKT8pQ2hhcnRb''@;'; put 'put ''Xj5dKj4oW1xzXFNdKj8pPFwvYzooPzphcmVhfGxpbmV8c3RvY2t8cmFkYXJ8c2NhdHRlcnxwaWV8ZG91Z2hudXR8YmFyfG9mUGllfHN1cmZhY2V8YnViYmxlKSg/OjNEKT9DaGFydD4vZ20sY3o9LzxjOnNlcj4oW1xzXFNdKj8pPFwvYzpzZXI+L2dtO0thLkNTPSJodHRwOi8vc2NoZW1hcy5v''@;'; put 'put ''cGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2NoYXJ0c2hlZXQiO3ZhciBXYT1QcigiY2hhcnRzaGVldCIsbnVsbCx7eG1sbnM6WWkubWFpblswXSwieG1sbnM6ciI6WWkucn0pO2Z1bmN0aW9uIExTKFMsUixrLEcpe3ZhciBRPVtJaSxXYV07cmV0''@;'; put 'put ''dXJuIFEucHVzaCgiPHNoZWV0UHIvPiIpLFEucHVzaCgnPHNoZWV0Vmlld3M+PHNoZWV0VmlldyB6b29tU2NhbGU9IjEwMCIgd29ya2Jvb2tWaWV3SWQ9IjAiIHpvb21Ub0ZpdD0iMSIvPjwvc2hlZXRWaWV3cz4nKSxRW1EubGVuZ3RoXT1QcigiZHJhd2luZyIsbnVsbCx7InI6aWQiOiJySWQx''@;'; put 'put ''In0pLEVyKEcsLTEsIi4uL2RyYXdpbmdzL2RyYXdpbmciKyhTKzEpKyIueG1sIixLYS5EUkFXKSxRLmxlbmd0aD4yJiYoUVtRLmxlbmd0aF09IjwvY2hhcnRzaGVldD4iLFFbMV09UVsxXS5yZXBsYWNlKCIvPiIsIj4iKSksUS5qb2luKCIiKX1mdW5jdGlvbiBPUygpe3ZhciBTPWJpKCk7cmV0''@;'; put 'put ''dXJuIEZyKFMsIkJydEJlZ2luU2hlZXQiKSxGcihTLCJCcnRFbmRTaGVldCIpLFMuZW5kKCl9dmFyIHliPVtbImFsbG93UmVmcmVzaFF1ZXJ5IiwhMSwiYm9vbCJdLFsiYXV0b0NvbXByZXNzUGljdHVyZXMiLCEwLCJib29sIl0sWyJiYWNrdXBGaWxlIiwhMSwiYm9vbCJdLFsiY2hlY2tDb21w''@;'; put 'put ''YXRpYmlsaXR5IiwhMSwiYm9vbCJdLFsiQ29kZU5hbWUiLCIiXSxbImRhdGUxOTA0IiwhMSwiYm9vbCJdLFsiZGVmYXVsdFRoZW1lVmVyc2lvbiIsMCwiaW50Il0sWyJmaWx0ZXJQcml2YWN5IiwhMSwiYm9vbCJdLFsiaGlkZVBpdm90RmllbGRMaXN0IiwhMSwiYm9vbCJdLFsicHJvbXB0ZWRT''@;'; put 'put ''b2x1dGlvbnMiLCExLCJib29sIl0sWyJwdWJsaXNoSXRlbXMiLCExLCJib29sIl0sWyJyZWZyZXNoQWxsQ29ubmVjdGlvbnMiLCExLCJib29sIl0sWyJzYXZlRXh0ZXJuYWxMaW5rVmFsdWVzIiwhMCwiYm9vbCJdLFsic2hvd0JvcmRlclVuc2VsZWN0ZWRUYWJsZXMiLCEwLCJib29sIl0sWyJz''@;'; put 'put ''aG93SW5rQW5ub3RhdGlvbiIsITAsImJvb2wiXSxbInNob3dPYmplY3RzIiwiYWxsIl0sWyJzaG93UGl2b3RDaGFydEZpbHRlciIsITEsImJvb2wiXSxbInVwZGF0ZUxpbmtzIiwidXNlclNldCJdXSxuST1bWyJhY3RpdmVUYWIiLDAsImludCJdLFsiYXV0b0ZpbHRlckRhdGVHcm91cGluZyIs''@;'; put 'put ''ITAsImJvb2wiXSxbImZpcnN0U2hlZXQiLDAsImludCJdLFsibWluaW1pemVkIiwhMSwiYm9vbCJdLFsic2hvd0hvcml6b250YWxTY3JvbGwiLCEwLCJib29sIl0sWyJzaG93U2hlZXRUYWJzIiwhMCwiYm9vbCJdLFsic2hvd1ZlcnRpY2FsU2Nyb2xsIiwhMCwiYm9vbCJdLFsidGFiUmF0aW8i''@;'; put 'put ''LDYwMCwiaW50Il0sWyJ2aXNpYmlsaXR5IiwidmlzaWJsZSJdXSxyST1bXSxmej1bWyJjYWxjQ29tcGxldGVkIiwidHJ1ZSJdLFsiY2FsY01vZGUiLCJhdXRvIl0sWyJjYWxjT25TYXZlIiwidHJ1ZSJdLFsiY29uY3VycmVudENhbGMiLCJ0cnVlIl0sWyJmdWxsQ2FsY09uTG9hZCIsImZhbHNl''@;'; put 'put ''Il0sWyJmdWxsUHJlY2lzaW9uIiwidHJ1ZSJdLFsiaXRlcmF0ZSIsImZhbHNlIl0sWyJpdGVyYXRlQ291bnQiLCIxMDAiXSxbIml0ZXJhdGVEZWx0YSIsIjAuMDAxIl0sWyJyZWZNb2RlIiwiQTEiXV07ZnVuY3Rpb24gaUkoUyxSKXtmb3IodmFyIGs9MDtrIT1TLmxlbmd0aDsrK2spZm9yKHZh''@;'; put 'put ''ciBHPVNba10sUT0wO1EhPVIubGVuZ3RoOysrUSl7dmFyIG9lPVJbUV07aWYobnVsbD09R1tvZVswXV0pR1tvZVswXV09b2VbMV07ZWxzZSBzd2l0Y2gob2VbMl0pe2Nhc2UiYm9vbCI6InN0cmluZyI9PXR5cGVvZiBHW29lWzBdXSYmKEdbb2VbMF1dPXRpKEdbb2VbMF1dKSk7YnJlYWs7Y2Fz''@;'; put 'put ''ZSJpbnQiOiJzdHJpbmciPT10eXBlb2YgR1tvZVswXV0mJihHW29lWzBdXT1wYXJzZUludChHW29lWzBdXSwxMCkpfX19ZnVuY3Rpb24gUTMoUyxSKXtmb3IodmFyIGs9MDtrIT1SLmxlbmd0aDsrK2spe3ZhciBHPVJba107aWYobnVsbD09U1tHWzBdXSlTW0dbMF1dPUdbMV07ZWxzZSBzd2l0''@;'; put 'put ''Y2goR1syXSl7Y2FzZSJib29sIjoic3RyaW5nIj09dHlwZW9mIFNbR1swXV0mJihTW0dbMF1dPXRpKFNbR1swXV0pKTticmVhaztjYXNlImludCI6InN0cmluZyI9PXR5cGVvZiBTW0dbMF1dJiYoU1tHWzBdXT1wYXJzZUludChTW0dbMF1dLDEwKSl9fX1mdW5jdGlvbiBQUyhTKXtRMyhTLldC''@;'; put 'put ''UHJvcHMseWIpLFEzKFMuQ2FsY1ByLGZ6KSxpSShTLldCVmlldyxuSSksaUkoUy5TaGVldHMsckkpLGM4LmRhdGUxOTA0PXRpKFMuV0JQcm9wcy5kYXRlMTkwNCl9dmFyIHB6PSJdWyo/L1xcIi5zcGxpdCgiIik7ZnVuY3Rpb24gX2IoUyxSKXtpZihTLmxlbmd0aD4zMSl7aWYoUilyZXR1cm4h''@;'; put 'put ''MTt0aHJvdyBuZXcgRXJyb3IoIlNoZWV0IG5hbWVzIGNhbm5vdCBleGNlZWQgMzEgY2hhcnMiKX12YXIgaz0hMDtyZXR1cm4gcHouZm9yRWFjaChmdW5jdGlvbihHKXtpZigtMSE9Uy5pbmRleE9mKEcpKXtpZighUil0aHJvdyBuZXcgRXJyb3IoIlNoZWV0IG5hbWUgY2Fubm90IGNvbnRhaW4g''@;'; put 'put ''OiBcXCAvID8gKiBbIF0iKTtrPSExfX0pLGt9dmFyIEU4PS88XHcrOndvcmtib29rLyxzST1Qcigid29ya2Jvb2siLG51bGwse3htbG5zOllpLm1haW5bMF0sInhtbG5zOnIiOllpLnJ9KTtmdW5jdGlvbiBUOChTLFIpe3ZhciBrPVJ8fHt9LEc9W0lpXTtHW0cubGVuZ3RoXT1zSTt2YXIgUT1T''@;'; put 'put ''Lldvcmtib29rJiYoUy5Xb3JrYm9vay5OYW1lc3x8W10pLmxlbmd0aD4wO1MuV29ya2Jvb2smJlMuV29ya2Jvb2suTW9kaWZ5JiYoR1tHLmxlbmd0aF09ZnVuY3Rpb24gZXAoUyl7dmFyIFI9e307cmV0dXJuIFMud2FybiYmKFIucmVhZE9ubHlSZWNvbW1lbmRlZD0xKSxSLnVzZXJOYW1lPVMu''@;'; put 'put ''dXNlcnx8IlNoZWV0IEpTIixTLmVuY3J5cHRpb24mJihTLmVuY3J5cHRpb24uYWxnbyYmKFIuYWxnb3JpdGhtTmFtZT1TLmVuY3J5cHRpb24uYWxnbyksUy5lbmNyeXB0aW9uLmhhc2gmJihSLmhhc2hWYWx1ZT1TLmVuY3J5cHRpb24uaGFzaCksUy5lbmNyeXB0aW9uLnNhbHQmJihSLnNhbHRW''@;'; put 'put ''YWx1ZT1TLmVuY3J5cHRpb24uc2FsdCksUy5lbmNyeXB0aW9uLnNwaW4mJihSLnNwaW5Db3VudD1TLmVuY3J5cHRpb24uc3BpbikpLFByKCJmaWxlU2hhcmluZyIsbnVsbCxSKX0oUy5Xb3JrYm9vay5Nb2RpZnkpKTt2YXIgb2U9e2NvZGVOYW1lOiJUaGlzV29ya2Jvb2sifTtTLldvcmtib29r''@;'; put 'put ''JiZTLldvcmtib29rLldCUHJvcHMmJih5Yi5mb3JFYWNoKGZ1bmN0aW9uKFBlKXtudWxsIT1TLldvcmtib29rLldCUHJvcHNbUGVbMF1dJiZTLldvcmtib29rLldCUHJvcHNbUGVbMF1dIT1QZVsxXSYmKG9lW1BlWzBdXT1TLldvcmtib29rLldCUHJvcHNbUGVbMF1dKX0pLFMuV29ya2Jvb2su''@;'; put 'put ''V0JQcm9wcy5Db2RlTmFtZSYmKG9lLmNvZGVOYW1lPVMuV29ya2Jvb2suV0JQcm9wcy5Db2RlTmFtZSxkZWxldGUgb2UuQ29kZU5hbWUpKSxHW0cubGVuZ3RoXT1Qcigid29ya2Jvb2tQciIsbnVsbCxvZSksUy5Xb3JrYm9vayYmUy5Xb3JrYm9vay5Qcm90ZWN0aW9uJiYoR1tHLmxlbmd0aF09''@;'; put 'put ''ZnVuY3Rpb24gd2IoUyl7dmFyIFI9e307cmV0dXJuIFMubG9ja1N0cnVjdHVyZSYmKFIubG9ja1N0cnVjdHVyZT0xKSxTLmxvY2tXaW5kb3dzJiYoUi5sb2NrV2luZG93cz0xKSxTLmVuY3J5cHRpb24mJihTLmVuY3J5cHRpb24uYWxnbyYmKFIud29ya2Jvb2tBbGdvcml0aG1OYW1lPVMuZW5j''@;'; put 'put ''cnlwdGlvbi5hbGdvKSxTLmVuY3J5cHRpb24uaGFzaCYmKFIud29ya2Jvb2tIYXNoVmFsdWU9Uy5lbmNyeXB0aW9uLmhhc2gpLFMuZW5jcnlwdGlvbi5zYWx0JiYoUi53b3JrYm9va1NhbHRWYWx1ZT1TLmVuY3J5cHRpb24uc2FsdCksUy5lbmNyeXB0aW9uLnNwaW4mJihSLndvcmtib29rU3Bp''@;'; put 'put ''bkNvdW50PVMuZW5jcnlwdGlvbi5zcGluKSksUHIoIndvcmtib29rUHJvdGVjdGlvbiIsbnVsbCxSKX0oUy5Xb3JrYm9vay5Qcm90ZWN0aW9uKSk7dmFyIGdlPVMuV29ya2Jvb2smJlMuV29ya2Jvb2suU2hlZXRzfHxbXSxwZT0wO2lmKGdlJiZnZVswXSYmZ2VbMF0uSGlkZGVuKXtmb3IoR1tH''@;'; put 'put ''Lmxlbmd0aF09Ijxib29rVmlld3M+IixwZT0wO3BlIT1TLlNoZWV0TmFtZXMubGVuZ3RoJiZnZVtwZV0mJmdlW3BlXS5IaWRkZW47KytwZSk7cGU9PVMuU2hlZXROYW1lcy5sZW5ndGgmJihwZT0wKSxHW0cubGVuZ3RoXT0nPHdvcmtib29rVmlldyBmaXJzdFNoZWV0PSInK3BlKyciIGFjdGl2''@;'; put 'put ''ZVRhYj0iJytwZSsnIi8+JyxHW0cubGVuZ3RoXT0iPC9ib29rVmlld3M+In1mb3IoR1tHLmxlbmd0aF09IjxzaGVldHM+IixwZT0wO3BlIT1TLlNoZWV0TmFtZXMubGVuZ3RoOysrcGUpe3ZhciB5ZT17bmFtZTpMcihTLlNoZWV0TmFtZXNbcGVdLnNsaWNlKDAsMzEpKX07aWYoeWUuc2hlZXRJ''@;'; put 'put ''ZD0iIisocGUrMSkseWVbInI6aWQiXT0icklkIisocGUrMSksZ2VbcGVdKXN3aXRjaChnZVtwZV0uSGlkZGVuKXtjYXNlIDE6eWUuc3RhdGU9ImhpZGRlbiI7YnJlYWs7Y2FzZSAyOnllLnN0YXRlPSJ2ZXJ5SGlkZGVuIn1HW0cubGVuZ3RoXT1Qcigic2hlZXQiLG51bGwseWUpfXJldHVybiBH''@;'; put 'put ''W0cubGVuZ3RoXT0iPC9zaGVldHM+IixTLkV4dGVybmFsV0ImJlMuRXh0ZXJuYWxXQi5sZW5ndGgmJihHW0cubGVuZ3RoXT0iPGV4dGVybmFsUmVmZXJlbmNlcz4iLChTLkV4dGVybmFsV0J8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKFBlLE5lKXt2YXIgWWU9RXIoay53YnJlbHMsLTEsImV4dGVy''@;'; put 'put ''bmFsTGlua3MvZXh0ZXJuYWxMaW5rIisoTmUrMSkrIi54bWwiLEthLlhMSU5LKTtHW0cubGVuZ3RoXT0nPGV4dGVybmFsUmVmZXJlbmNlIHI6aWQ9InJJZCcrWWUrJyIvPid9KSxHW0cubGVuZ3RoXT0iPC9leHRlcm5hbFJlZmVyZW5jZXM+IiksUSYmKEdbRy5sZW5ndGhdPSI8ZGVmaW5lZE5h''@;'; put 'put ''bWVzPiIsUy5Xb3JrYm9vayYmUy5Xb3JrYm9vay5OYW1lcyYmUy5Xb3JrYm9vay5OYW1lcy5mb3JFYWNoKGZ1bmN0aW9uKFBlKXt2YXIgTmU9e25hbWU6UGUuTmFtZX07UGUuQ29tbWVudCYmKE5lLmNvbW1lbnQ9UGUuQ29tbWVudCksbnVsbCE9UGUuU2hlZXQmJihOZS5sb2NhbFNoZWV0SWQ9''@;'; put 'put ''IiIrUGUuU2hlZXQpLFBlLkhpZGRlbiYmKE5lLmhpZGRlbj0iMSIpLFBlLlJlZiYmKEdbRy5sZW5ndGhdPVByKCJkZWZpbmVkTmFtZSIsTHIoUGUuUmVmKSxOZSkpfSksR1tHLmxlbmd0aF09IjwvZGVmaW5lZE5hbWVzPiIpLGsmJmsucGl2b3RzJiZrLnBpdm90cy5sZW5ndGg+MCYmKEcucHVz''@;'; put 'put ''aCgiPHBpdm90Q2FjaGVzPiIpLGsucGl2b3RzLmZvckVhY2goZnVuY3Rpb24oUGUsTmUpe0cucHVzaCgnPHBpdm90Q2FjaGUgY2FjaGVJZD0iJysoTmUrMSkrJyIgcjppZD0icklkJytQZVsyXSsnIi8+Jyl9KSxHLnB1c2goIjwvcGl2b3RDYWNoZXM+IikpLEcubGVuZ3RoPjImJihHW0cubGVu''@;'; put 'put ''Z3RoXT0iPC93b3JrYm9vaz4iLEdbMV09R1sxXS5yZXBsYWNlKCIvPiIsIj4iKSksRy5qb2luKCIiKX1mdW5jdGlvbiBteihTLFIpe3JldHVybiBSfHwoUj1ibigxMjcpKSxSLndyaXRlX3NoaWZ0KDQsUy5IaWRkZW4pLFIud3JpdGVfc2hpZnQoNCxTLmlUYWJJRCksYzUoUy5zdHJSZWxJRCxS''@;'; put 'put ''KSxGYyhTLm5hbWUuc2xpY2UoMCwzMSksUiksUi5sZW5ndGg+Ui5sP1Iuc2xpY2UoMCxSLmwpOlJ9ZnVuY3Rpb24gdHAoUyxSKXt2YXIgaz17fTtyZXR1cm4gUy5yZWFkX3NoaWZ0KDQpLGsuQXJjaElEPVMucmVhZF9zaGlmdCg0KSxTLmwrPVItOCxrfWZ1bmN0aW9uIFNiKFMsUil7dmFyIGs9''@;'; put 'put ''YmkoKTtyZXR1cm4gRnIoaywiQnJ0QmVnaW5Cb29rIiksRnIoaywiQnJ0RmlsZVZlcnNpb24iLGZ1bmN0aW9uIGNJKFMsUil7Unx8KFI9Ym4oMTI3KSk7Zm9yKHZhciBrPTA7NCE9azsrK2spUi53cml0ZV9zaGlmdCg0LDApO3JldHVybiBGYygiU2hlZXRKUyIsUiksRmMody52ZXJzaW9uLFIp''@;'; put 'put ''LEZjKHcudmVyc2lvbixSKSxGYygiNzI2MiIsUiksUi5sZW5ndGg+Ui5sP1Iuc2xpY2UoMCxSLmwpOlJ9KCkpLEZyKGssIkJydFdiUHJvcCIsZnVuY3Rpb24gbEkoUyxSKXtSfHwoUj1ibig3MikpO3ZhciBrPTA7cmV0dXJuIFMmJlMuZmlsdGVyUHJpdmFjeSYmKGt8PTgpLFIud3JpdGVfc2hp''@;'; put 'put ''ZnQoNCxrKSxSLndyaXRlX3NoaWZ0KDQsMCksczUoUyYmUy5Db2RlTmFtZXx8IlRoaXNXb3JrYm9vayIsUiksUi5zbGljZSgwLFIubCl9KFMuV29ya2Jvb2smJlMuV29ya2Jvb2suV0JQcm9wc3x8bnVsbCkpLGZ1bmN0aW9uIHZ6KFMsUil7aWYoUi5Xb3JrYm9vayYmUi5Xb3JrYm9vay5TaGVl''@;'; put 'put ''dHMpe2Zvcih2YXIgaz1SLldvcmtib29rLlNoZWV0cyxHPTAsUT0tMSxvZT0tMTtHPGsubGVuZ3RoOysrRykha1tHXXx8IWtbR10uSGlkZGVuJiYtMT09UT9RPUc6MT09a1tHXS5IaWRkZW4mJi0xPT1vZSYmKG9lPUcpO29lPlF8fChGcihTLCJCcnRCZWdpbkJvb2tWaWV3cyIpLEZyKFMsIkJy''@;'; put 'put ''dEJvb2tWaWV3IixmdW5jdGlvbiB1SShTLFIpe3JldHVybiBSfHwoUj1ibigyOSkpLFIud3JpdGVfc2hpZnQoLTQsMCksUi53cml0ZV9zaGlmdCgtNCw0NjApLFIud3JpdGVfc2hpZnQoNCwyODgwMCksUi53cml0ZV9zaGlmdCg0LDE3NjAwKSxSLndyaXRlX3NoaWZ0KDQsNTAwKSxSLndyaXRl''@;'; put 'put ''X3NoaWZ0KDQsUyksUi53cml0ZV9zaGlmdCg0LFMpLFIud3JpdGVfc2hpZnQoMSwxMjApLFIubGVuZ3RoPlIubD9SLnNsaWNlKDAsUi5sKTpSfShRKSksRnIoUywiQnJ0RW5kQm9va1ZpZXdzIikpfX0oayxTKSxmdW5jdGlvbiBDYihTLFIpe0ZyKFMsIkJydEJlZ2luQnVuZGxlU2hzIik7Zm9y''@;'; put 'put ''KHZhciBrPTA7ayE9Ui5TaGVldE5hbWVzLmxlbmd0aDsrK2spRnIoUywiQnJ0QnVuZGxlU2giLG16KHtIaWRkZW46Ui5Xb3JrYm9vayYmUi5Xb3JrYm9vay5TaGVldHMmJlIuV29ya2Jvb2suU2hlZXRzW2tdJiZSLldvcmtib29rLlNoZWV0c1trXS5IaWRkZW58fDAsaVRhYklEOmsrMSxzdHJS''@;'; put 'put ''ZWxJRDoicklkIisoaysxKSxuYW1lOlIuU2hlZXROYW1lc1trXX0pKTtGcihTLCJCcnRFbmRCdW5kbGVTaHMiKX0oayxTKSxGcihrLCJCcnRFbmRCb29rIiksay5lbmQoKX1mdW5jdGlvbiBkSShTLFIsayxHLFEpe3JldHVybigiLmJpbiI9PT1SLnNsaWNlKC00KT9XNTpWRCkoUyxrLEcsUSl9''@;'; put 'put ''ZnVuY3Rpb24gaEkoUyxSLGssRyxRKXtyZXR1cm4oIi5iaW4iPT09Ui5zbGljZSgtNCk/T1M6TFMpKFMsayxHLFEpfWZ1bmN0aW9uIGZJKFMsUixrKXtyZXR1cm4oIi5iaW4iPT09Ui5zbGljZSgtNCk/dWs6UnYpKFMsayl9ZnVuY3Rpb24gQXooUyxSLGspe3JldHVybigiLmJpbiI9PT1SLnNs''@;'; put 'put ''aWNlKC00KT9OQzpIQykoUyxrKX12YXIgQlM9LyhbXHc6XSspPSgoPzoiKShbXiJdKikoPzoiKXwoPzonKShbXiddKikoPzonKSkvZyxNYj0vKFtcdzpdKyk9KCg/OiIpKD86W14iXSopKD86Iil8KD86JykoPzpbXiddKikoPzonKSkvO2Z1bmN0aW9uIEgwKFMsUil7dmFyIGs9Uy5zcGxpdCgv''@;'; put 'put ''XHMrLyksRz1bXTtpZihSfHwoR1swXT1rWzBdKSwxPT09ay5sZW5ndGgpcmV0dXJuIEc7dmFyIG9lLGdlLHllLFE9Uy5tYXRjaChCUyk7aWYoUSlmb3IoeWU9MDt5ZSE9US5sZW5ndGg7Kyt5ZSktMT09PShnZT0ob2U9UVt5ZV0ubWF0Y2goTWIpKVsxXS5pbmRleE9mKCI6IikpP0dbb2VbMV1d''@;'; put 'put ''PW9lWzJdLnNsaWNlKDEsb2VbMl0ubGVuZ3RoLTEpOkdbInhtbG5zOiI9PT1vZVsxXS5zbGljZSgwLDYpPyJ4bWxucyIrb2VbMV0uc2xpY2UoNik6b2VbMV0uc2xpY2UoZ2UrMSldPW9lWzJdLnNsaWNlKDEsb2VbMl0ubGVuZ3RoLTEpO3JldHVybiBHfWZ1bmN0aW9uIGpTKFMpe3ZhciBrPXt9''@;'; put 'put ''O2lmKDE9PT1TLnNwbGl0KC9ccysvKS5sZW5ndGgpcmV0dXJuIGs7dmFyIFEsb2UscGUsRz1TLm1hdGNoKEJTKTtpZihHKWZvcihwZT0wO3BlIT1HLmxlbmd0aDsrK3BlKS0xPT09KG9lPShRPUdbcGVdLm1hdGNoKE1iKSlbMV0uaW5kZXhPZigiOiIpKT9rW1FbMV1dPVFbMl0uc2xpY2UoMSxR''@;'; put 'put ''WzJdLmxlbmd0aC0xKTprWyJ4bWxuczoiPT09UVsxXS5zbGljZSgwLDYpPyJ4bWxucyIrUVsxXS5zbGljZSg2KTpRWzFdLnNsaWNlKG9lKzEpXT1RWzJdLnNsaWNlKDEsUVsyXS5sZW5ndGgtMSk7cmV0dXJuIGt9ZnVuY3Rpb24ga3ooUyl7dmFyIFI9e307aWYoUy5EZWZhdWx0Um93SGVpZ2h0''@;'; put 'put ''KXt2YXIgaz17aHB4OjQqcGFyc2VJbnQoUy5EZWZhdWx0Um93SGVpZ2h0KS8zfTtqdihrKSxSLnJvdz1rfWlmKFMuRGVmYXVsdENvbFdpZHRoKXt2YXIgRz17d3B4OjQqcGFyc2VJbnQoUy5EZWZhdWx0Q29sV2lkdGgpLzN9O1EwKEcpLFIuY29sPUd9cmV0dXJuIFJ9ZnVuY3Rpb24gSXooUyxS''@;'; put 'put ''LGssRyl7dmFyIFE9Rztzd2l0Y2goKGtbMF0ubWF0Y2goL2R0OmR0PSIoW1x3Ll0rKSIvKXx8WyIiLCIiXSlbMV0pe2Nhc2UiYm9vbGVhbiI6UT10aShHKTticmVhaztjYXNlImkyIjpjYXNlImludCI6UT1wYXJzZUludChHLDEwKTticmVhaztjYXNlInI0IjpjYXNlImZsb2F0IjpRPXBhcnNl''@;'; put 'put ''RmxvYXQoRyk7YnJlYWs7Y2FzZSJkYXRlIjpjYXNlImRhdGVUaW1lLnR6IjpRPUhlKEcpO2JyZWFrO2Nhc2UiaTgiOmNhc2Uic3RyaW5nIjpjYXNlImZpeGVkIjpjYXNlInV1aWQiOmNhc2UiYmluLmJhc2U2NCI6YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImJhZCBjdXN0cHJvcDoi''@;'; put 'put ''K2tbMF0pfVNbUXIoUildPVF9dmFyIHhiPXswOiJOb25lIiwxOiJTaW5nbGUiLDI6IkRvdWJsZSIsMzM6IlNpbmdsZUFjY291bnRpbmciLDM0OiJEb3VibGVBY2NvdW50aW5nIn0scEk9a2UoeGIpO2Z1bmN0aW9uIFVTKFMsUixrLEcpe2lmKEcuY2VsbFN0eWxlcyl7aWYoaz1rLnJlcGxhY2Uo''@;'; put 'put ''L1xzKy9nLCIgIiksUi5JbnRlcmlvcil7dmFyIFE9Ui5JbnRlcmlvcjtRLlBhdHRlcm4mJihRLnBhdHRlcm5UeXBlPW1DW1EuUGF0dGVybl18fFEuUGF0dGVybiksUS5Db2xvciYmUS5Db2xvci5tYXRjaCgvI1swLTlBLUZhLWZdKi8pJiYoUS5mZ0NvbG9yPXtyZ2I6US5Db2xvci5zbGljZSgx''@;'; put 'put ''KX0pfSFmdW5jdGlvbiBSeihTKXtTLkJvcmRlcnMmJihTLkJvcmRlcnMuZm9yRWFjaChmdW5jdGlvbihSKXt2YXIgaz1SLlBvc2l0aW9uLnRvTG93ZXJDYXNlKCk7U1trXT17c3R5bGU6WlMoUi5MaW5lU3R5bGUsK1IuV2VpZ2h0KSxjb2xvcjp7cmdiOihSLkNvbG9yfHwiIzAwMDAwMCIpLnNs''@;'; put 'put ''aWNlKDEpfX19KSxkZWxldGUgUy5Cb3JkZXJzKX0oUik7dmFyIGdlLG9lPWsubWF0Y2goLzwoPzpcdys6KT9Gb250XHNbXj5dKj4vKTtvZSYmKHRpKChnZT12cihvZVswXSkpLkJvbGQpJiYoUi5Cb2xkPSEwKSx0aShnZS5JdGFsaWMpJiYoUi5JdGFsaWM9ITApLHRpKGdlLlN0cmlrZVRocm91''@;'; put 'put ''Z2gpJiYoUi5TdHJpa2U9ITApLGdlLlNpemUmJihSLlNpemU9K2dlLlNpemUpLFIuRm9udE5hbWU9Z2UuRm9udE5hbWU/Z2UuRm9udE5hbWU6IkFyaWFsIixnZS5VbmRlcmxpbmUmJihSLlVuZGVybGluZT1wSVtnZS5VbmRlcmxpbmVdKSxnZS5Db2xvciYmKFIuUkdCPWdlLkNvbG9yLnNsaWNl''@;'; put 'put ''KC02KSkpLFIuQWxpZ25tZW50JiYoUi5hbGlnbm1lbnQ9e30sUi5BbGlnbm1lbnQuVmVydGljYWwmJihSLmFsaWdubWVudC52ZXJ0aWNhbD1SLkFsaWdubWVudC5WZXJ0aWNhbC50b0xvd2VyQ2FzZSgpKSxSLkFsaWdubWVudC5Ib3Jpem9udGFsJiYoUi5hbGlnbm1lbnQuaG9yaXpvbnRhbD1S''@;'; put 'put ''LkFsaWdubWVudC5Ib3Jpem9udGFsLnRvTG93ZXJDYXNlKCkpLHRpKFIuQWxpZ25tZW50LldyYXBUZXh0fHwiMCIpP1IuYWxpZ25tZW50LndyYXBUZXh0PSEwOm51bGw9PVIuQWxpZ25tZW50LldyYXBUZXh0JiZkZWxldGUgUi5hbGlnbm1lbnQud3JhcFRleHQsdGkoUi5BbGlnbm1lbnQuU2hy''@;'; put 'put ''aW5rVG9GaXR8fCIwIikmJihSLmFsaWdubWVudC5zaHJpbmtUb0ZpdD0hMCksK1IuQWxpZ25tZW50LkluZGVudCYmKFIuYWxpZ25tZW50LmluZGVudD0rUi5BbGlnbm1lbnQuSW5kZW50fHwwKSwrUi5BbGlnbm1lbnQuUm90YXRlJiYoUi5hbGlnbm1lbnQudGV4dFJvdGF0aW9uPStSLkFsaWdu''@;'; put 'put ''bWVudC5Sb3RhdGV8fDApKX1TW1IuSURdPVIsKCJEZWZhdWx0Ij09Ui5JRHx8Ik5vcm1hbCI9PVIuTmFtZSkmJkk0KFIpfWZ1bmN0aW9uIFpTKFMsUil7c3dpdGNoKFMpe2Nhc2UiTm9uZSI6cmV0dXJuIm5vbmUiO2Nhc2UiRGFzaCI6cmV0dXJuImRhc2hlZCI7Y2FzZSJEb3QiOnJldHVybiJk''@;'; put 'put ''b3R0ZWQiO2Nhc2UiRGFzaERvdCI6cmV0dXJuImRhc2hEb3QiO2Nhc2UiRGFzaERvdERvdCI6cmV0dXJuImRhc2hEb3REb3QiO2Nhc2UiU2xhbnREYXNoRG90IjpyZXR1cm4ic2xhbnREYXNoRG90IjtjYXNlIkRvdWJsZSI6cmV0dXJuImRvdWJsZSI7Y2FzZSJDb250aW51b3VzIjpzd2l0Y2go''@;'; put 'put ''K1J8fDApe2Nhc2UgMDpyZXR1cm4iaGFpciI7Y2FzZSAxOnJldHVybiJ0aGluIjtjYXNlIDI6cmV0dXJuIm1lZGl1bSI7Y2FzZSAzOnJldHVybiJ0aGljayJ9cmV0dXJuInRoaW4ifXJldHVybiBTfWZ1bmN0aW9uIGdJKFMsUixrLEcsUSxvZSxnZSxwZSx5ZSxQZSl7dmFyIE5lPSJHZW5lcmFs''@;'; put 'put ''IixZZT1HLlN0eWxlSUQsZXQ9e307UGU9UGV8fHt9O3ZhciBjdD1bXSxFdD0wO2Zvcih2b2lkIDA9PT1ZZSYmcGUmJihZZT1wZS5TdHlsZUlEKSx2b2lkIDA9PT1ZZSYmZ2UmJihZZT1nZS5TdHlsZUlEKTt2b2lkIDAhPT1vZVtZZV07KXt2YXIgYXQ9b2VbWWVdO2lmKCJHZW5lcmFsIj09TmUm''@;'; put 'put ''JmF0Lm5mJiYoTmU9b2VbWWVdLm5mKSxhdC5JbnRlcmlvciYmY3QucHVzaChvZVtZZV0uSW50ZXJpb3IpLGF0LmFsaWdubWVudCYmKGV0LmFsaWdubWVudHx8KGV0LmFsaWdubWVudD1xdChhdC5hbGlnbm1lbnQpKSksbnVsbD09ZXQuYm9sZCYmYXQuQm9sZCYmKGV0LmJvbGQ9ITApLG51bGw9''@;'; put 'put ''PWV0Lml0YWxpYyYmYXQuSXRhbGljJiYoZXQuaXRhbGljPSEwKSxudWxsPT1ldC5zdHJpa2UmJmF0LlN0cmlrZSYmKGV0LnN0cmlrZT0hMCksbnVsbD09ZXQuc3omJmF0LlNpemUmJihldC5zej1hdC5TaXplKSxudWxsPT1ldC5uYW1lJiZhdC5Gb250TmFtZSYmKGV0Lm5hbWU9YXQuRm9udE5h''@;'; put 'put ''bWUpLG51bGw9PWV0LnVuZGVybGluZSYmYXQuVW5kZXJsaW5lJiYoZXQudW5kZXJsaW5lPWF0LlVuZGVybGluZSksbnVsbD09ZXQuY29sb3ImJmF0LlJHQiYmKGV0LmNvbG9yPXtyZ2I6YXQuUkdCfSksWyJ0b3AiLCJib3R0b20iLCJsZWZ0IiwicmlnaHQiXS5mb3JFYWNoKGZ1bmN0aW9uKE90''@;'; put 'put ''KXtudWxsPT1ldFtPdF0mJmF0W090XSYmKGV0W090XT1xdChhdFtPdF0pKX0pLCJEZWZhdWx0Ij09WWUpYnJlYWs7WWU9YXQuUGFyZW50fHwiRGVmYXVsdCJ9ZXQubmFtZXx8KGV0Lm5hbWU9b2UuRGVmYXVsdCYmb2UuRGVmYXVsdC5Gb250TmFtZXx8IkFyaWFsIiksZXQuc3p8fChldC5zej1v''@;'; put 'put ''ZS5EZWZhdWx0JiZvZS5EZWZhdWx0LlNpemV8fDEyKTt2YXIgYnQ9IiI7aWYoU3x8Ry5Gb3JtdWxhfHwiU3RyaW5nIj09ay5UeXBlfHwiTnVtYmVyIj09ay5UeXBlKXN3aXRjaChrLlR5cGUpe2Nhc2UiQm9vbGVhbiI6Ry50PSJiIixHLnY9dGkoUyk7YnJlYWs7Y2FzZSJTdHJpbmciOkcudD0i''@;'; put 'put ''cyIsYnQ9TGEoUXIoUykpLEcudj1TLmluZGV4T2YoIjwiKT4tMT9RcihSfHxTKS5yZXBsYWNlKC88W15dKj8+L2csIiIpOmJ0LFMuaW5kZXhPZigiPCIpPi0xJiYoRy5SPW1kLmh0bWxfdG9fcnMoUXIoUykpKTticmVhaztjYXNlIkRhdGVUaW1lIjoiWiIhPVMuc2xpY2UoLTEpJiYoUys9Iloi''@;'; put 'put ''KSxHLnY9KEhlKFMpLW5ldyBEYXRlKERhdGUuVVRDKDE4OTksMTEsMzApKSkvODY0ZTUsRy52IT1HLnY/Ry52PVFyKFMpOkcudjw2MCYmKEcudj1HLnYtMSksKCFOZXx8IkdlbmVyYWwiPT1OZSkmJihOZT0ieXl5eS1tbS1kZCIpO2Nhc2UiTnVtYmVyIjp2b2lkIDA9PT1HLnYmJihHLnY9K1Mp''@;'; put 'put ''LEcudHx8KEcudD0ibiIpO2JyZWFrO2Nhc2UiRXJyb3IiOkcudD0iZSIsRy52PVAzW1NdLCExIT09UGUuY2VsbFRleHQmJihHLnc9Uyk7YnJlYWs7ZGVmYXVsdDoiIj09UyYmIiI9PVI/Ry50PSJ6IjooRy50PSJzIixidD1MYShRcihTKSksRy52PVMuaW5kZXhPZigiPCIpPi0xP1FyKFJ8fFMp''@;'; put 'put ''LnJlcGxhY2UoLzxbXl0qPz4vZywiIik6YnQsUy5pbmRleE9mKCI8Iik+LTEmJihHLlI9bWQuaHRtbF90b19ycyhRcihTKSkpKX1lbHNlIEcudD0ieiIsZGVsZXRlIEcudjtpZihmdW5jdGlvbiB6UyhTLFIsayl7aWYoInoiIT09Uy50KXtpZigha3x8ITEhPT1rLmNlbGxUZXh0KXRyeXtTLnc9''@;'; put 'put ''ImUiPT09Uy50P1Mud3x8TWNbUy52XToiR2VuZXJhbCI9PT1SPyJuIj09PVMudD8oMHxTLnYpPT09Uy52P0EuX2dlbmVyYWxfaW50KFMudik6QS5fZ2VuZXJhbF9udW0oUy52KTpBLl9nZW5lcmFsKFMudik6ZnVuY3Rpb24gRHooUyxSKXt2YXIgaz10ZVtTXXx8UXIoUyk7cmV0dXJuIkdlbmVy''@;'; put 'put ''YWwiPT09az9BLl9nZW5lcmFsKFIpOkEuZm9ybWF0KGssUil9KFJ8fCJHZW5lcmFsIixTLnYpfWNhdGNoKG9lKXtpZihrLldURil0aHJvdyBvZX10cnl7dmFyIEc9dGVbUl18fFJ8fCJHZW5lcmFsIjtpZihrLmNlbGxORiYmKFMuej1HKSxrLmNlbGxEYXRlcyYmIm4iPT1TLnQmJkEuaXNfZGF0''@;'; put 'put ''ZShHKSl7dmFyIFE9QS5wYXJzZV9kYXRlX2NvZGUoUy52KTtRJiYoUy50PSJkIixTLnY9bmV3IERhdGUoUS55LFEubS0xLFEuZCxRLkgsUS5NLFEuUyxRLnUpKX19Y2F0Y2gob2Upe2lmKGsuV1RGKXRocm93IG9lfX19KEcsTmUsUGUpLCExIT09UGUuY2VsbEZvcm11bGEpaWYoRy5Gb3JtdWxh''@;'; put 'put ''KXt2YXIganQ9UXIoRy5Gb3JtdWxhKTs2MT09anQuY2hhckNvZGVBdCgwKSYmKGp0PWp0LnNsaWNlKDEpKSxHLmY9SDUoanQsUSksZGVsZXRlIEcuRm9ybXVsYSwiUkMiPT1HLkFycmF5UmFuZ2U/Ry5GPUg1KCJSQzpSQyIsUSk6Ry5BcnJheVJhbmdlJiYoRy5GPUg1KEcuQXJyYXlSYW5nZSxR''@;'; put 'put ''KSx5ZS5wdXNoKFtvbyhHLkYpLEcuRl0pKX1lbHNlIGZvcihFdD0wO0V0PHllLmxlbmd0aDsrK0V0KVEucj49eWVbRXRdWzBdLnMuciYmUS5yPD15ZVtFdF1bMF0uZS5yJiZRLmM+PXllW0V0XVswXS5zLmMmJlEuYzw9eWVbRXRdWzBdLmUuYyYmKEcuRj15ZVtFdF1bMV0pO2lmKFBlLmNlbGxT''@;'; put 'put ''dHlsZXMmJihjdC5mb3JFYWNoKGZ1bmN0aW9uKE90KXshZXQucGF0dGVyblR5cGUmJk90LnBhdHRlcm5UeXBlJiYoZXQucGF0dGVyblR5cGU9T3QucGF0dGVyblR5cGUpLCFldC5mZ0NvbG9yJiZPdC5mZ0NvbG9yJiYoZXQuZmdDb2xvcj1PdC5mZ0NvbG9yKX0pLEcucz1ldCksdm9pZCAwIT09''@;'; put 'put ''Ry5TdHlsZUlEJiYoRy5peGZlPUcuU3R5bGVJRCksRy5SJiZHLnMpe3ZhciBrdD1xdChHLnMpO2RlbGV0ZSBrdC5ib2xkLGRlbGV0ZSBrdC5pdGFsaWMsZGVsZXRlIGt0LnVuZGVybGluZSxkZWxldGUga3Quc3RyaWtlLEcuUi5mb3JFYWNoKGZ1bmN0aW9uKE90KXtPdC5zPVB0KHF0KGt0KSxP''@;'; put 'put ''dC5zKX0pfX1mdW5jdGlvbiBMeihTKXtTLnQ9Uy52fHwiIixTLnQ9Uy50LnJlcGxhY2UoL1xyXG4vZywiXG4iKS5yZXBsYWNlKC9cci9nLCJcbiIpLFMudj1TLnc9Uy5peGZlPXZvaWQgMH1mdW5jdGlvbiBXUyhTKXtpZihUZSYmQnVmZmVyLmlzQnVmZmVyKFMpKXJldHVybiBTLnRvU3RyaW5n''@;'; put 'put ''KCJ1dGY4Iik7aWYoInN0cmluZyI9PXR5cGVvZiBTKXJldHVybiBTO2lmKHR5cGVvZiBVaW50OEFycmF5PCJ1IiYmUyBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpcmV0dXJuIGdvKEMoSChTKSkpO3Rocm93IG5ldyBFcnJvcigiQmFkIGlucHV0IGZvcm1hdDogZXhwZWN0ZWQgQnVmZmVyIG9yIHN0''@;'; put 'put ''cmluZyIpfXZhciBZNT0vPChcLz8pKFteXHM/PjwhXC86XSo6fCkoW15ccz88PjpcL1xbXSspKD86W1xzPzo8XC9dW14+XSopPz4vZ207ZnVuY3Rpb24gRDgoUyxSKXt2YXIgaz1SfHx7fSxHPUooV1MoUykpOygiYmluYXJ5Ij09ay50eXBlfHwiYXJyYXkiPT1rLnR5cGV8fCJiYXNlNjQiPT1r''@;'; put 'put ''LnR5cGUpJiYoRz10eXBlb2YgY3B0YWJsZTwidSI/Y3B0YWJsZS51dGlscy5kZWNvZGUoNjUwMDEsWShHKSk6Z28oRykpO3ZhciBRPUcuc2xpY2UoMCwxMDI0KS50b0xvd2VyQ2FzZSgpLG9lPSExO2lmKCgxMDIzJlEuaW5kZXhPZigiPiIpKT5NYXRoLm1pbigxMDIzJlEuaW5kZXhPZigiLCIp''@;'; put 'put ''LDEwMjMmUS5pbmRleE9mKCI7IikpKXt2YXIgZ2U9cXQoayk7cmV0dXJuIGdlLnR5cGU9InN0cmluZyIsajMudG9fd29ya2Jvb2soRyxnZSl9aWYoLTE9PVEuaW5kZXhPZigiPD94bWwiKSYmWyJodG1sIiwidGFibGUiLCJoZWFkIiwibWV0YSIsInNjcmlwdCIsInN0eWxlIiwiZGl2Il0uZm9y''@;'; put 'put ''RWFjaChmdW5jdGlvbih5dSl7US5pbmRleE9mKCI8Iit5dSk+PTAmJihvZT0hMCl9KSxvZSlyZXR1cm4gbWQudG9fd29ya2Jvb2soRyxrKTt2YXIgcGUsUGUseWU9W107bnVsbCE9bGUmJm51bGw9PWsuZGVuc2UmJihrLmRlbnNlPWxlKTt2YXIga3IsTmU9e30sWWU9W10sZXQ9ay5kZW5zZT9b''@;'; put 'put ''XTp7fSxjdD0iIixFdD17fSxhdD17fSxidD17fSxqdD1IMCgnPERhdGEgc3M6VHlwZT0iU3RyaW5nIj4nKSxrdD0wLE90PTAsS3Q9MCxUbj17czp7cjoyZTYsYzoyZTZ9LGU6e3I6MCxjOjB9fSxycj17fSxTbj17fSxscj0iIixYbj0wLEJuPVtdLGZyPXt9LGJyPXt9LGVyPTAsTWk9W10sRmk9''@;'; put 'put ''e30sbmE9W10sY2E9e30sTGk9W10sVm49ITEsQnI9W10sX3I9W10sRm49e30sanI9MCxaaT0wLHlpPXtTaGVldHM6W10sV0JQcm9wczp7ZGF0ZTE5MDQ6ITF9fSxfYT17fTtZNS5sYXN0SW5kZXg9MCxHPUcucmVwbGFjZSgvPCEtLShbXHNcU10qPyktLT4vZ20sIiIpO2Zvcih2YXIgc289IiI7''@;'; put 'put ''cGU9WTUuZXhlYyhHKTspc3dpdGNoKHBlWzNdPShzbz1wZVszXSkudG9Mb3dlckNhc2UoKSl7Y2FzZSJkYXRhIjppZigiZGF0YSI9PXNvKXtpZigiLyI9PT1wZVsxXSl7aWYoKFBlPXllLnBvcCgpKVswXSE9PXBlWzNdKXRocm93IG5ldyBFcnJvcigiQmFkIHN0YXRlOiAiK1BlLmpvaW4oInwi''@;'; put 'put ''KSl9ZWxzZSIvIiE9PXBlWzBdLmNoYXJBdChwZVswXS5sZW5ndGgtMikmJnllLnB1c2goW3BlWzNdLCEwXSk7YnJlYWt9aWYoeWVbeWUubGVuZ3RoLTFdWzFdKWJyZWFrOyIvIj09PXBlWzFdP2dJKEcuc2xpY2Uoa3QscGUuaW5kZXgpLGxyLGp0LCJjb21tZW50Ij09eWVbeWUubGVuZ3RoLTFd''@;'; put 'put ''WzBdP2NhOmF0LHtjOk90LHI6S3R9LHJyLExpW090XSxidCxCcixrKToobHI9IiIsanQ9SDAocGVbMF0pLGt0PXBlLmluZGV4K3BlWzBdLmxlbmd0aCk7YnJlYWs7Y2FzZSJjZWxsIjppZigiLyI9PT1wZVsxXXx8Ii8+Ij09PXBlWzBdLnNsaWNlKC0yKSl7aWYoIi8+Ij09PXBlWzBdLnNsaWNl''@;'; put 'put ''KC0yKSl7aWYoKGF0PWpTKHBlWzBdKSkuSW5kZXgmJihPdD0rYXQuSW5kZXgtMSksT3Q8VG4ucy5jJiYoVG4ucy5jPU90KSxPdD5Ubi5lLmMmJihUbi5lLmM9T3QpLG5hPVtdLCFrLnNoZWV0U3R1YnMpeysrT3Q7YnJlYWt9Z0koIiIsIiIse30sImNvbW1lbnQiPT15ZVt5ZS5sZW5ndGgtMV1b''@;'; put 'put ''MF0/Y2E6YXQse2M6T3QscjpLdH0scnIsTGlbT3RdLGJ0LEJyLGspfWlmKG5hLmxlbmd0aD4wJiYoYXQuYz1uYSksKCFrLnNoZWV0Um93c3x8ay5zaGVldFJvd3M+S3QpJiYodm9pZCAwIT09YXQudnx8ay5zaGVldFN0dWJzKSYmKGsuZGVuc2U/KGV0W0t0XXx8KGV0W0t0XT1bXSksZXRbS3Rd''@;'; put 'put ''W090XT1hdCk6ZXRbVGEoT3QpK2ppKEt0KV09YXQpLGF0LkhSZWYmJihhdC5sPXtUYXJnZXQ6UXIoYXQuSFJlZil9LGF0LkhSZWZTY3JlZW5UaXAmJihhdC5sLlRvb2x0aXA9YXQuSFJlZlNjcmVlblRpcCksZGVsZXRlIGF0LkhSZWYsZGVsZXRlIGF0LkhSZWZTY3JlZW5UaXApLChhdC5NZXJn''@;'; put 'put ''ZUFjcm9zc3x8YXQuTWVyZ2VEb3duKSYmKGpyPU90KygwfHBhcnNlSW50KGF0Lk1lcmdlQWNyb3NzLDEwKSksWmk9S3QrKDB8cGFyc2VJbnQoYXQuTWVyZ2VEb3duLDEwKSksKGpyPk90fHxaaT5LdCkmJkJuLnB1c2goe3M6e2M6T3QscjpLdH0sZTp7YzpqcixyOlppfX0pKSxrLnNoZWV0U3R1''@;'; put 'put ''YnMpaWYoYXQuTWVyZ2VBY3Jvc3N8fGF0Lk1lcmdlRG93bil7Zm9yKHZhciBpYT1PdDtpYTw9anI7KytpYSlmb3IodmFyIExvPUt0O0xvPD1aaTsrK0xvKShpYT5PdHx8TG8+S3QpJiYoay5kZW5zZT8oZXRbTG9dfHwoZXRbTG9dPVtdKSxldFtMb11baWFdPXt0OiJ6In0pOmV0W1RhKGlhKStq''@;'; put 'put ''aShMbyldPXt0OiJ6In0pO090PWpyKzF9ZWxzZSsrT3Q7ZWxzZSBhdC5NZXJnZUFjcm9zcz9PdD1qcisxOisrT3R9ZWxzZShhdD1qUyhwZVswXSkpLkluZGV4JiYoT3Q9K2F0LkluZGV4LTEpLE90PFRuLnMuYyYmKFRuLnMuYz1PdCksT3Q+VG4uZS5jJiYoVG4uZS5jPU90KSwiLz4iPT09cGVb''@;'; put 'put ''MF0uc2xpY2UoLTIpJiYrK090LG5hPVtdO2JyZWFrO2Nhc2Uicm93IjoiLyI9PT1wZVsxXXx8Ii8+Ij09PXBlWzBdLnNsaWNlKC0yKT8oS3Q8VG4ucy5yJiYoVG4ucy5yPUt0KSxLdD5Ubi5lLnImJihUbi5lLnI9S3QpLCIvPiI9PT1wZVswXS5zbGljZSgtMikmJihidD1IMChwZVswXSkpLklu''@;'; put 'put ''ZGV4JiYoS3Q9K2J0LkluZGV4LTEpLE90PTAsKytLdCk6KChidD1IMChwZVswXSkpLkluZGV4JiYoS3Q9K2J0LkluZGV4LTEpLEZuPXt9LCgiMCI9PWJ0LkF1dG9GaXRIZWlnaHR8fGJ0LkhlaWdodCkmJihGbi5ocHQ9cGFyc2VGbG9hdChidC5IZWlnaHQpLEZuLmhweD1zaChGbi5ocHQpLF9y''@;'; put 'put ''W0t0XT1GbiksIjEiPT1idC5IaWRkZW4mJihGbi5oaWRkZW49ITAsX3JbS3RdPUZuKSk7YnJlYWs7Y2FzZSJ3b3Jrc2hlZXQiOmlmKCIvIj09PXBlWzFdKXtpZigoUGU9eWUucG9wKCkpWzBdIT09cGVbM10pdGhyb3cgbmV3IEVycm9yKCJCYWQgc3RhdGU6ICIrUGUuam9pbigifCIpKTtZZS5w''@;'; put 'put ''dXNoKGN0KSxUbi5zLnI8PVRuLmUuciYmVG4ucy5jPD1Ubi5lLmMmJihldFsiIXJlZiJdPXJhKFRuKSxrLnNoZWV0Um93cyYmay5zaGVldFJvd3M8PVRuLmUuciYmKGV0WyIhZnVsbHJlZiJdPWV0WyIhcmVmIl0sVG4uZS5yPWsuc2hlZXRSb3dzLTEsZXRbIiFyZWYiXT1yYShUbikpKSxCbi5s''@;'; put 'put ''ZW5ndGgmJihldFsiIW1lcmdlcyJdPUJuKSxMaS5sZW5ndGg+MCYmKGV0WyIhY29scyJdPUxpKSxfci5sZW5ndGg+MCYmKGV0WyIhcm93cyJdPV9yKSxFdCYmKGV0WyIhc2hlZXRGb3JtYXQiXT1reihFdCkpLE5lW2N0XT1ldH1lbHNlIFRuPXtzOntyOjJlNixjOjJlNn0sZTp7cjowLGM6MH19''@;'; put 'put ''LEt0PU90PTAseWUucHVzaChbcGVbM10sITFdKSxQZT1IMChwZVswXSksY3Q9UXIoUGUuTmFtZSksZXQ9ay5kZW5zZT9bXTp7fSxCbj1bXSxCcj1bXSxfcj1bXSx5aS5TaGVldHMucHVzaChfYT17bmFtZTpjdCxIaWRkZW46MH0pO2JyZWFrO2Nhc2UidGFibGUiOmlmKCIvIj09PXBlWzFdKXtp''@;'; put 'put ''ZigoUGU9eWUucG9wKCkpWzBdIT09cGVbM10pdGhyb3cgbmV3IEVycm9yKCJCYWQgc3RhdGU6ICIrUGUuam9pbigifCIpKX1lbHNle2lmKCIvPiI9PXBlWzBdLnNsaWNlKC0yKSlicmVhaztFdD1IMChwZVswXSkseWUucHVzaChbcGVbM10sITFdKSxMaT1bXSxWbj0hMX1icmVhaztjYXNlInN0''@;'; put 'put ''eWxlIjoiLyI9PT1wZVsxXT9VUyhycixTbixscixrKTooU249SDAocGVbMF0pLGxyPSIiKTticmVhaztjYXNlIm51bWJlcmZvcm1hdCI6U24ubmY9UXIoSDAocGVbMF0pLkZvcm1hdHx8IkdlbmVyYWwiKSx0ZVtTbi5uZl0mJihTbi5uZj10ZVtTbi5uZl0pO2Zvcih2YXIgT2E9MDszOTIhPU9h''@;'; put 'put ''JiZBLl90YWJsZVtPYV0hPVNuLm5mOysrT2EpO2lmKDM5Mj09T2EpZm9yKE9hPTU3OzM5MiE9T2E7KytPYSlpZihudWxsPT1BLl90YWJsZVtPYV0pe0EubG9hZChTbi5uZixPYSk7YnJlYWt9YnJlYWs7Y2FzZSJjb2x1bW4iOmlmKCJ0YWJsZSIhPT15ZVt5ZS5sZW5ndGgtMV1bMF18fCIvIj09''@;'; put 'put ''PXBlWzFdKWJyZWFrO2lmKChrcj1IMChwZVswXSkpLkhpZGRlbiYmKGtyLmhpZGRlbj0hMCxkZWxldGUga3IuSGlkZGVuKSxrci5XaWR0aD9rci53cHg9NCpwYXJzZUludChrci5XaWR0aCwxMCkvMzora3IuQXV0b0ZpdFdpZHRoJiYoa3IuYXV0bz0xKSwhVm4mJmtyLndweD4xMCl7Vm49ITAs''@;'; put 'put ''VGM9Zms7Zm9yKHZhciBobz0wO2hvPExpLmxlbmd0aDsrK2hvKUxpW2hvXSYmUTAoTGlbaG9dKX1WbiYmUTAoa3IpLExpW2tyLkluZGV4LTF8fExpLmxlbmd0aF09a3I7Zm9yKHZhciBKYT0wO0phPCtrci5TcGFuOysrSmEpTGlbTGkubGVuZ3RoXT1xdChrcik7YnJlYWs7Y2FzZSJuYW1lZHJh''@;'; put 'put ''bmdlIjppZigiLyI9PT1wZVsxXSlicmVhazt5aS5OYW1lc3x8KHlpLk5hbWVzPVtdKTt2YXIgQmk9dnIocGVbMF0pLElzPXtOYW1lOkJpLk5hbWUsUmVmOkg1KEJpLlJlZmVyc1RvLnNsaWNlKDEpLHtyOjAsYzowfSl9O3lpLlNoZWV0cy5sZW5ndGg+MCYmKElzLlNoZWV0PXlpLlNoZWV0cy5s''@;'; put 'put ''ZW5ndGgtMSkseWkuTmFtZXMucHVzaChJcyk7YnJlYWs7Y2FzZSJuYW1lZGNlbGwiOmNhc2UiYiI6Y2FzZSJpIjpjYXNlInUiOmNhc2UicyI6Y2FzZSJlbSI6Y2FzZSJoMiI6Y2FzZSJoMyI6Y2FzZSJzdWIiOmNhc2Uic3VwIjpjYXNlInNwYW4iOmNhc2UicHJvdGVjdGlvbiI6Y2FzZSJwYXJh''@;'; put 'put ''Z3JhcGhzIjpjYXNlIm5hbWUiOmJyZWFrO2Nhc2UiYWxpZ25tZW50IjppZighay5jZWxsU3R5bGVzfHwiLyI9PT1wZVsxXSlicmVhaztTbi5BbGlnbm1lbnQ9SDAocGVbMF0pO2JyZWFrO2Nhc2UiYm9yZGVycyI6Ii8iIT09cGVbMV0mJihTbi5Cb3JkZXJzPVtdKTticmVhaztjYXNlImJvcmRl''@;'; put 'put ''ciI6aWYoIi8iPT09cGVbMV0pYnJlYWs7U24uQm9yZGVyc3x8KFNuLkJvcmRlcnM9W10pLFNuLkJvcmRlcnMucHVzaChIMChwZVswXSkpO2JyZWFrO2Nhc2UiZm9udCI6aWYoIi8+Ij09PXBlWzBdLnNsaWNlKC0yKSl7bHIrPXBlWzBdO2JyZWFrfSIvIj09PXBlWzFdP2xyKz1HLnNsaWNlKFhu''@;'; put 'put ''LHBlLmluZGV4K3BlWzBdLmxlbmd0aCk6WG49cGUuaW5kZXg7YnJlYWs7Y2FzZSJpbnRlcmlvciI6aWYoIWsuY2VsbFN0eWxlc3x8Ii8iPT09cGVbMV0pYnJlYWs7U24uSW50ZXJpb3I9SDAocGVbMF0pO2JyZWFrO2Nhc2UiYXV0aG9yIjpjYXNlInRpdGxlIjpjYXNlImRlc2NyaXB0aW9uIjpj''@;'; put 'put ''YXNlImNyZWF0ZWQiOmNhc2Uia2V5d29yZHMiOmNhc2Uic3ViamVjdCI6Y2FzZSJjYXRlZ29yeSI6Y2FzZSJjb21wYW55IjpjYXNlImxhc3RhdXRob3IiOmNhc2UibGFzdHNhdmVkIjpjYXNlImxhc3RwcmludGVkIjpjYXNlInZlcnNpb24iOmNhc2UicmV2aXNpb24iOmNhc2UidG90YWx0aW1l''@;'; put 'put ''IjpjYXNlImh5cGVybGlua2Jhc2UiOmNhc2UibWFuYWdlciI6Y2FzZSJjb250ZW50c3RhdHVzIjpjYXNlImlkZW50aWZpZXIiOmNhc2UibGFuZ3VhZ2UiOmNhc2UiYXBwbmFtZSI6aWYoIi8+Ij09PXBlWzBdLnNsaWNlKC0yKSlicmVhazsiLyI9PT1wZVsxXT9GMyhmcixzbyxHLnNsaWNlKGVy''@;'; put 'put ''LHBlLmluZGV4KSk6ZXI9cGUuaW5kZXgrcGVbMF0ubGVuZ3RoO2JyZWFrO2Nhc2Uic3R5bGVzIjpjYXNlIndvcmtib29rIjppZigiLyI9PT1wZVsxXSl7aWYoKFBlPXllLnBvcCgpKVswXSE9PXBlWzNdKXRocm93IG5ldyBFcnJvcigiQmFkIHN0YXRlOiAiK1BlLmpvaW4oInwiKSl9ZWxzZSB5''@;'; put 'put ''ZS5wdXNoKFtwZVszXSwhMV0pO2JyZWFrO2Nhc2UiY29tbWVudCI6aWYoIi8iPT09cGVbMV0pe2lmKChQZT15ZS5wb3AoKSlbMF0hPT1wZVszXSl0aHJvdyBuZXcgRXJyb3IoIkJhZCBzdGF0ZTogIitQZS5qb2luKCJ8IikpO0x6KGNhKSxuYS5wdXNoKGNhKX1lbHNlIHllLnB1c2goW3BlWzNd''@;'; put 'put ''LCExXSksY2E9e2E6KFBlPUgwKHBlWzBdKSkuQXV0aG9yfTticmVhaztjYXNlImF1dG9maWx0ZXIiOmlmKCIvIj09PXBlWzFdKXtpZigoUGU9eWUucG9wKCkpWzBdIT09cGVbM10pdGhyb3cgbmV3IEVycm9yKCJCYWQgc3RhdGU6ICIrUGUuam9pbigifCIpKX1lbHNlIGlmKCIvIiE9PXBlWzBd''@;'; put 'put ''LmNoYXJBdChwZVswXS5sZW5ndGgtMikpe3ZhciBQbj1IMChwZVswXSk7ZXRbIiFhdXRvZmlsdGVyIl09e3JlZjpINShQbi5SYW5nZSkucmVwbGFjZSgvXCQvZywiIil9LHllLnB1c2goW3BlWzNdLCEwXSl9YnJlYWs7Y2FzZSJkYXRhdmFsaWRhdGlvbiI6aWYoZXRbIiF2YWxpZGF0aW9ucyJd''@;'; put 'put ''fHwoZXRbIiF2YWxpZGF0aW9ucyJdPVtdKSwiLyI9PT1wZVsxXSl7aWYoKFBlPXllLnBvcCgpKVswXSE9PXBlWzNdKXRocm93IG5ldyBFcnJvcigiQmFkIHN0YXRlOiAiK1BlLmpvaW4oInwiKSl9ZWxzZSIvIiE9PXBlWzBdLmNoYXJBdChwZVswXS5sZW5ndGgtMikmJnllLnB1c2goW3BlWzNd''@;'; put 'put ''LCEwXSksRmk9e307YnJlYWs7Y2FzZSJwaXhlbHNwZXJpbmNoIjppZigiLyI9PT1wZVsxXSl7dmFyIFdvPStHLnNsaWNlKGt0LHBlLmluZGV4KTsoNzI9PVdvfHw5Nj09V28pJiZJZihXbyl9ZWxzZSBrdD1wZS5pbmRleCtwZVswXS5sZW5ndGg7YnJlYWs7Y2FzZSJjb21wb25lbnRvcHRpb25z''@;'; put 'put ''IjpjYXNlImRvY3VtZW50cHJvcGVydGllcyI6Y2FzZSJjdXN0b21kb2N1bWVudHByb3BlcnRpZXMiOmNhc2Uib2ZmaWNlZG9jdW1lbnRzZXR0aW5ncyI6Y2FzZSJwaXZvdHRhYmxlIjpjYXNlInBpdm90Y2FjaGUiOmNhc2UibmFtZXMiOmNhc2UibWFwaW5mbyI6Y2FzZSJwYWdlYnJlYWtzIjpj''@;'; put 'put ''YXNlInF1ZXJ5dGFibGUiOmNhc2Uic29ydGluZyI6Y2FzZSJzY2hlbWEiOmNhc2UiY29uZGl0aW9uYWxmb3JtYXR0aW5nIjpjYXNlInNtYXJ0dGFndHlwZSI6Y2FzZSJzbWFydHRhZ3MiOmNhc2UiZXhjZWx3b3JrYm9vayI6Y2FzZSJ3b3JrYm9va29wdGlvbnMiOmNhc2Uid29ya3NoZWV0b3B0''@;'; put 'put ''aW9ucyI6aWYoIi8iPT09cGVbMV0pe2lmKChQZT15ZS5wb3AoKSlbMF0hPT1wZVszXSl0aHJvdyBuZXcgRXJyb3IoIkJhZCBzdGF0ZTogIitQZS5qb2luKCJ8IikpfWVsc2UiLyIhPT1wZVswXS5jaGFyQXQocGVbMF0ubGVuZ3RoLTIpJiZ5ZS5wdXNoKFtwZVszXSwhMF0pO2JyZWFrO2RlZmF1''@;'; put 'put ''bHQ6aWYoMD09eWUubGVuZ3RoJiYiZG9jdW1lbnQiPT1wZVszXXx8MD09eWUubGVuZ3RoJiYidW9mIj09cGVbM10pcmV0dXJuIElJKEcsayk7dmFyIGhyPSEwO3N3aXRjaCh5ZVt5ZS5sZW5ndGgtMV1bMF0pe2Nhc2Uib2ZmaWNlZG9jdW1lbnRzZXR0aW5ncyI6c3dpdGNoKHBlWzNdKXtjYXNl''@;'; put 'put ''ImFsbG93cG5nIjpjYXNlInJlbW92ZXBlcnNvbmFsaW5mb3JtYXRpb24iOmNhc2UiZG93bmxvYWRjb21wb25lbnRzIjpjYXNlImxvY2F0aW9ub2Zjb21wb25lbnRzIjpjYXNlImNvbG9ycyI6Y2FzZSJjb2xvciI6Y2FzZSJpbmRleCI6Y2FzZSJyZ2IiOmNhc2UidGFyZ2V0c2NyZWVuc2l6ZSI6''@;'; put 'put ''Y2FzZSJyZWFkb25seXJlY29tbWVuZGVkIjpicmVhaztkZWZhdWx0OmhyPSExfWJyZWFrO2Nhc2UiY29tcG9uZW50b3B0aW9ucyI6c3dpdGNoKHBlWzNdKXtjYXNlInRvb2xiYXIiOmNhc2UiaGlkZW9mZmljZWxvZ28iOmNhc2Uic3ByZWFkc2hlZXRhdXRvZml0IjpjYXNlImxhYmVsIjpjYXNl''@;'; put 'put ''ImNhcHRpb24iOmNhc2UibWF4aGVpZ2h0IjpjYXNlIm1heHdpZHRoIjpjYXNlIm5leHRzaGVldG51bWJlciI6YnJlYWs7ZGVmYXVsdDpocj0hMX1icmVhaztjYXNlImV4Y2Vsd29ya2Jvb2siOnN3aXRjaChwZVszXSl7Y2FzZSJkYXRlMTkwNCI6eWkuV0JQcm9wcy5kYXRlMTkwND0hMDticmVh''@;'; put 'put ''aztjYXNlIndpbmRvd2hlaWdodCI6Y2FzZSJ3aW5kb3d3aWR0aCI6Y2FzZSJ3aW5kb3d0b3B4IjpjYXNlIndpbmRvd3RvcHkiOmNhc2UidGFicmF0aW8iOmNhc2UicHJvdGVjdHN0cnVjdHVyZSI6Y2FzZSJwcm90ZWN0d2luZG93IjpjYXNlInByb3RlY3R3aW5kb3dzIjpjYXNlImFjdGl2ZXNo''@;'; put 'put ''ZWV0IjpjYXNlImRpc3BsYXlpbmtub3RlcyI6Y2FzZSJmaXJzdHZpc2libGVzaGVldCI6Y2FzZSJzdXBib29rIjpjYXNlInNoZWV0bmFtZSI6Y2FzZSJzaGVldGluZGV4IjpjYXNlInNoZWV0aW5kZXhmaXJzdCI6Y2FzZSJzaGVldGluZGV4bGFzdCI6Y2FzZSJkbGwiOmNhc2UiYWNjZXB0bGFi''@;'; put 'put ''ZWxzaW5mb3JtdWxhcyI6Y2FzZSJkb25vdHNhdmVsaW5rdmFsdWVzIjpjYXNlIml0ZXJhdGlvbiI6Y2FzZSJtYXhpdGVyYXRpb25zIjpjYXNlIm1heGNoYW5nZSI6Y2FzZSJwYXRoIjpjYXNlInhjdCI6Y2FzZSJjb3VudCI6Y2FzZSJzZWxlY3RlZHNoZWV0cyI6Y2FzZSJjYWxjdWxhdGlvbiI6''@;'; put 'put ''Y2FzZSJ1bmNhbGNlZCI6Y2FzZSJzdGFydHVwcHJvbXB0IjpjYXNlImNybiI6Y2FzZSJleHRlcm5uYW1lIjpjYXNlImZvcm11bGEiOmNhc2UiY29sZmlyc3QiOmNhc2UiY29sbGFzdCI6Y2FzZSJ3YW50YWR2aXNlIjpjYXNlImJvb2xlYW4iOmNhc2UiZXJyb3IiOmNhc2UidGV4dCI6Y2FzZSJv''@;'; put 'put ''bGUiOmNhc2Uibm9hdXRvcmVjb3ZlciI6Y2FzZSJwdWJsaXNob2JqZWN0cyI6Y2FzZSJkb25vdGNhbGN1bGF0ZWJlZm9yZXNhdmUiOmNhc2UibnVtYmVyIjpjYXNlInJlZm1vZGVyMWMxIjpjYXNlImVtYmVkc2F2ZXNtYXJ0dGFncyI6YnJlYWs7ZGVmYXVsdDpocj0hMX1icmVhaztjYXNlIndv''@;'; put 'put ''cmtib29rb3B0aW9ucyI6c3dpdGNoKHBlWzNdKXtjYXNlIm93Y3ZlcnNpb24iOmNhc2UiaGVpZ2h0IjpjYXNlIndpZHRoIjpicmVhaztkZWZhdWx0OmhyPSExfWJyZWFrO2Nhc2Uid29ya3NoZWV0b3B0aW9ucyI6c3dpdGNoKHBlWzNdKXtjYXNlInZpc2libGUiOmlmKCIvPiIhPT1wZVswXS5z''@;'; put 'put ''bGljZSgtMikpaWYoIi8iPT09cGVbMV0pc3dpdGNoKEcuc2xpY2UoZXIscGUuaW5kZXgpKXtjYXNlIlNoZWV0SGlkZGVuIjpfYS5IaWRkZW49MTticmVhaztjYXNlIlNoZWV0VmVyeUhpZGRlbiI6X2EuSGlkZGVuPTJ9ZWxzZSBlcj1wZS5pbmRleCtwZVswXS5sZW5ndGg7YnJlYWs7Y2FzZSJo''@;'; put 'put ''ZWFkZXIiOmV0WyIhbWFyZ2lucyJdfHxYMyhldFsiIW1hcmdpbnMiXT17fSwieGxtbCIpLGV0WyIhbWFyZ2lucyJdLmhlYWRlcj12cihwZVswXSkuTWFyZ2luO2JyZWFrO2Nhc2UiZm9vdGVyIjpldFsiIW1hcmdpbnMiXXx8WDMoZXRbIiFtYXJnaW5zIl09e30sInhsbWwiKSxldFsiIW1hcmdp''@;'; put 'put ''bnMiXS5mb290ZXI9dnIocGVbMF0pLk1hcmdpbjticmVhaztjYXNlInBhZ2VtYXJnaW5zIjp2YXIgUWw9dnIocGVbMF0pO2V0WyIhbWFyZ2lucyJdfHxYMyhldFsiIW1hcmdpbnMiXT17fSwieGxtbCIpLFFsLlRvcCYmKGV0WyIhbWFyZ2lucyJdLnRvcD1RbC5Ub3ApLFFsLkxlZnQmJihldFsi''@;'; put 'put ''IW1hcmdpbnMiXS5sZWZ0PVFsLkxlZnQpLFFsLlJpZ2h0JiYoZXRbIiFtYXJnaW5zIl0ucmlnaHQ9UWwuUmlnaHQpLFFsLkJvdHRvbSYmKGV0WyIhbWFyZ2lucyJdLmJvdHRvbT1RbC5Cb3R0b20pO2JyZWFrO2Nhc2UiZGlzcGxheXJpZ2h0dG9sZWZ0Ijp5aS5WaWV3c3x8KHlpLlZpZXdzPVtd''@;'; put 'put ''KSx5aS5WaWV3c1swXXx8KHlpLlZpZXdzWzBdPXt9KSx5aS5WaWV3c1swXS5SVEw9ITA7YnJlYWs7Y2FzZSJmcmVlemVwYW5lcyI6Y2FzZSJmcm96ZW5ub3NwbGl0IjpjYXNlImFjdGl2ZXJvdyI6Y2FzZSJhY3RpdmVjb2wiOmNhc2UidG9wcm93Ym90dG9tcGFuZSI6Y2FzZSJsZWZ0Y29sdW1u''@;'; put 'put ''cmlnaHRwYW5lIjpjYXNlInVuc3luY2VkIjpjYXNlInByaW50IjpjYXNlInByaW50ZXJyb3JzIjpjYXNlInBhbmVzIjpjYXNlInNjYWxlIjpjYXNlInBhbmUiOmNhc2UibnVtYmVyIjpjYXNlImxheW91dCI6Y2FzZSJwYWdlc2V0dXAiOmNhc2Uic2VsZWN0ZWQiOmNhc2UicHJvdGVjdG9iamVj''@;'; put 'put ''dHMiOmNhc2UiZW5hYmxlc2VsZWN0aW9uIjpjYXNlInByb3RlY3RzY2VuYXJpb3MiOmNhc2UidmFsaWRwcmludGVyaW5mbyI6Y2FzZSJob3Jpem9udGFscmVzb2x1dGlvbiI6Y2FzZSJ2ZXJ0aWNhbHJlc29sdXRpb24iOmNhc2UibnVtYmVyb2Zjb3BpZXMiOmNhc2UiYWN0aXZlcGFuZSI6Y2Fz''@;'; put 'put ''ZSJ0b3Byb3d2aXNpYmxlIjpjYXNlImxlZnRjb2x1bW52aXNpYmxlIjpjYXNlImZpdHRvcGFnZSI6Y2FzZSJyYW5nZXNlbGVjdGlvbiI6Y2FzZSJwYXBlcnNpemVpbmRleCI6Y2FzZSJwYWdlbGF5b3V0em9vbSI6Y2FzZSJwYWdlYnJlYWt6b29tIjpjYXNlImZpbHRlcm9uIjpjYXNlImZpdHdp''@;'; put 'put ''ZHRoIjpjYXNlImZpdGhlaWdodCI6Y2FzZSJjb21tZW50c2xheW91dCI6Y2FzZSJ6b29tIjpjYXNlImxlZnR0b3JpZ2h0IjpjYXNlImdyaWRsaW5lcyI6Y2FzZSJhbGxvd3NvcnQiOmNhc2UiYWxsb3dmaWx0ZXIiOmNhc2UiYWxsb3dpbnNlcnRyb3dzIjpjYXNlImFsbG93ZGVsZXRlcm93cyI6''@;'; put 'put ''Y2FzZSJhbGxvd2luc2VydGNvbHMiOmNhc2UiYWxsb3dkZWxldGVjb2xzIjpjYXNlImFsbG93aW5zZXJ0aHlwZXJsaW5rcyI6Y2FzZSJhbGxvd2Zvcm1hdGNlbGxzIjpjYXNlImFsbG93c2l6ZWNvbHMiOmNhc2UiYWxsb3dzaXplcm93cyI6Y2FzZSJ0YWJjb2xvcmluZGV4IjpjYXNlImRvbm90''@;'; put 'put ''ZGlzcGxheWhlYWRpbmdzIjpjYXNlInNob3dwYWdlbGF5b3V0em9vbSI6Y2FzZSJibGFja2FuZHdoaXRlIjpjYXNlImRvbm90ZGlzcGxheXplcm9zIjpjYXNlImRpc3BsYXlwYWdlYnJlYWsiOmNhc2Uicm93Y29saGVhZGluZ3MiOmNhc2UiZG9ub3RkaXNwbGF5b3V0bGluZSI6Y2FzZSJub29y''@;'; put 'put ''aWVudGF0aW9uIjpjYXNlImFsbG93dXNlcGl2b3R0YWJsZXMiOmNhc2UiemVyb2hlaWdodCI6Y2FzZSJ2aWV3YWJsZXJhbmdlIjpjYXNlInNlbGVjdGlvbiI6Y2FzZSJwcm90ZWN0Y29udGVudHMiOmJyZWFrO2Nhc2Uic3BsaXRob3Jpem9udGFsIjpjYXNlInNwbGl0dmVydGljYWwiOmlmKCIv''@;'; put 'put ''PiIhPT1wZVswXS5zbGljZSgtMikpaWYoIi8iPT1wZVsxXSl7ZXRbIiFmcmVlemUiXXx8KGV0WyIhZnJlZXplIl09IkExIik7dmFyIFlsPU5vKGV0WyIhZnJlZXplIl0pOyJzcGxpdGhvcml6b250YWwiPT1wZVszXT9ZbC5yPStHLnNsaWNlKGVyLHBlLmluZGV4KTpZbC5jPStHLnNsaWNlKGVy''@;'; put 'put ''LHBlLmluZGV4KSxldFsiIWZyZWV6ZSJdPXFpKFlsKX1lbHNlIGVyPXBlLmluZGV4K3BlWzBdLmxlbmd0aDticmVhaztjYXNlImRvbm90ZGlzcGxheWdyaWRsaW5lcyI6ZXRbIiFncmlkbGluZXMiXT0hMTticmVhaztjYXNlIm5vc3VtbWFyeXJvd3NiZWxvd2RldGFpbCI6ZXRbIiFvdXRsaW5l''@;'; put 'put ''Il18fChldFsiIW91dGxpbmUiXT17fSksZXRbIiFvdXRsaW5lIl0uYWJvdmU9ITA7YnJlYWs7Y2FzZSJub3N1bW1hcnljb2x1bW5zcmlnaHRkZXRhaWwiOmV0WyIhb3V0bGluZSJdfHwoZXRbIiFvdXRsaW5lIl09e30pLGV0WyIhb3V0bGluZSJdLmxlZnQ9ITA7YnJlYWs7ZGVmYXVsdDpocj0h''@;'; put 'put ''MX1icmVhaztjYXNlInBpdm90dGFibGUiOmNhc2UicGl2b3RjYWNoZSI6c3dpdGNoKHBlWzNdKXtjYXNlImltbWVkaWF0ZWl0ZW1zb25kcm9wIjpjYXNlInNob3dwYWdlbXVsdGlwbGVpdGVtbGFiZWwiOmNhc2UiY29tcGFjdHJvd2luZGVudCI6Y2FzZSJsb2NhdGlvbiI6Y2FzZSJwaXZvdGZp''@;'; put 'put ''ZWxkIjpjYXNlIm9yaWVudGF0aW9uIjpjYXNlImxheW91dGZvcm0iOmNhc2UibGF5b3V0c3VidG90YWxsb2NhdGlvbiI6Y2FzZSJsYXlvdXRjb21wYWN0cm93IjpjYXNlInBvc2l0aW9uIjpjYXNlInBpdm90aXRlbSI6Y2FzZSJkYXRhdHlwZSI6Y2FzZSJkYXRhZmllbGQiOmNhc2Uic291cmNl''@;'; put 'put ''bmFtZSI6Y2FzZSJwYXJlbnRmaWVsZCI6Y2FzZSJwdGxpbmVpdGVtcyI6Y2FzZSJwdGxpbmVpdGVtIjpjYXNlImNvdW50b2ZzYW1laXRlbXMiOmNhc2UiaXRlbSI6Y2FzZSJpdGVtdHlwZSI6Y2FzZSJwdHNvdXJjZSI6Y2FzZSJjYWNoZWluZGV4IjpjYXNlImNvbnNvbGlkYXRpb25yZWZlcmVu''@;'; put 'put ''Y2UiOmNhc2UiZmlsZW5hbWUiOmNhc2UicmVmZXJlbmNlIjpjYXNlIm5vY29sdW1uZ3JhbmQiOmNhc2Uibm9yb3dncmFuZCI6Y2FzZSJibGFua2xpbmVhZnRlcml0ZW1zIjpjYXNlImhpZGRlbiI6Y2FzZSJzdWJ0b3RhbCI6Y2FzZSJiYXNlZmllbGQiOmNhc2UibWFwY2hpbGRpdGVtcyI6Y2Fz''@;'; put 'put ''ZSJmdW5jdGlvbiI6Y2FzZSJyZWZyZXNob25maWxlb3BlbiI6Y2FzZSJwcmludHNldHRpdGxlcyI6Y2FzZSJtZXJnZWxhYmVscyI6Y2FzZSJkZWZhdWx0dmVyc2lvbiI6Y2FzZSJyZWZyZXNobmFtZSI6Y2FzZSJyZWZyZXNoZGF0ZSI6Y2FzZSJyZWZyZXNoZGF0ZWNvcHkiOmNhc2UidmVyc2lv''@;'; put 'put ''bmxhc3RyZWZyZXNoIjpjYXNlInZlcnNpb25sYXN0dXBkYXRlIjpjYXNlInZlcnNpb251cGRhdGVhYmxlbWluIjpjYXNlInZlcnNpb25yZWZyZXNoYWJsZW1pbiI6Y2FzZSJjYWxjdWxhdGlvbiI6YnJlYWs7ZGVmYXVsdDpocj0hMX1icmVhaztjYXNlInBhZ2VicmVha3MiOnN3aXRjaChwZVsz''@;'; put 'put ''XSl7Y2FzZSJjb2xicmVha3MiOmNhc2UiY29sYnJlYWsiOmNhc2Uicm93YnJlYWtzIjpjYXNlInJvd2JyZWFrIjpjYXNlImNvbHN0YXJ0IjpjYXNlImNvbGVuZCI6Y2FzZSJyb3dlbmQiOmJyZWFrO2RlZmF1bHQ6aHI9ITF9YnJlYWs7Y2FzZSJhdXRvZmlsdGVyIjpzd2l0Y2gocGVbM10pe2Nh''@;'; put 'put ''c2UiYXV0b2ZpbHRlcmNvbHVtbiI6Y2FzZSJhdXRvZmlsdGVyY29uZGl0aW9uIjpjYXNlImF1dG9maWx0ZXJhbmQiOmNhc2UiYXV0b2ZpbHRlcm9yIjpicmVhaztkZWZhdWx0OmhyPSExfWJyZWFrO2Nhc2UicXVlcnl0YWJsZSI6c3dpdGNoKHBlWzNdKXtjYXNlImlkIjpjYXNlImF1dG9mb3Jt''@;'; put 'put ''YXRmb250IjpjYXNlImF1dG9mb3JtYXRwYXR0ZXJuIjpjYXNlInF1ZXJ5c291cmNlIjpjYXNlInF1ZXJ5dHlwZSI6Y2FzZSJlbmFibGVyZWRpcmVjdGlvbnMiOmNhc2UicmVmcmVzaGVkaW54bDkiOmNhc2UidXJsc3RyaW5nIjpjYXNlImh0bWx0YWJsZXMiOmNhc2UiY29ubmVjdGlvbiI6Y2Fz''@;'; put 'put ''ZSJjb21tYW5kdGV4dCI6Y2FzZSJyZWZyZXNoaW5mbyI6Y2FzZSJub3RpdGxlcyI6Y2FzZSJuZXh0aWQiOmNhc2UiY29sdW1uaW5mbyI6Y2FzZSJvdmVyd3JpdGVjZWxscyI6Y2FzZSJkb25vdHByb21wdGZvcmZpbGUiOmNhc2UidGV4dHdpemFyZHNldHRpbmdzIjpjYXNlInNvdXJjZSI6Y2Fz''@;'; put 'put ''ZSJudW1iZXIiOmNhc2UiZGVjaW1hbCI6Y2FzZSJ0aG91c2FuZHNlcGFyYXRvciI6Y2FzZSJ0cmFpbGluZ21pbnVzbnVtYmVycyI6Y2FzZSJmb3JtYXRzZXR0aW5ncyI6Y2FzZSJmaWVsZHR5cGUiOmNhc2UiZGVsaW1pdGVycyI6Y2FzZSJ0YWIiOmNhc2UiY29tbWEiOmNhc2UiYXV0b2Zvcm1h''@;'; put 'put ''dG5hbWUiOmNhc2UidmVyc2lvbmxhc3RlZGl0IjpjYXNlInZlcnNpb25sYXN0cmVmcmVzaCI6YnJlYWs7ZGVmYXVsdDpocj0hMX1icmVhaztjYXNlImRhdGF2YWxpZGF0aW9uIjpzd2l0Y2gocGVbM10pe2Nhc2UicmFuZ2UiOkZpLnJlZj1wZTticmVhaztjYXNlInR5cGUiOmNhc2UibWluIjpj''@;'; put 'put ''YXNlIm1heCI6Y2FzZSJzb3J0IjpjYXNlImRlc2NlbmRpbmciOmNhc2Uib3JkZXIiOmNhc2UiY2FzZXNlbnNpdGl2ZSI6Y2FzZSJ2YWx1ZSI6Y2FzZSJlcnJvcnN0eWxlIjpjYXNlImVycm9ybWVzc2FnZSI6Y2FzZSJlcnJvcnRpdGxlIjpjYXNlImlucHV0bWVzc2FnZSI6Y2FzZSJpbnB1dHRp''@;'; put 'put ''dGxlIjpjYXNlImNvbWJvaGlkZSI6Y2FzZSJpbnB1dGhpZGUiOmNhc2UiY29uZGl0aW9uIjpjYXNlInF1YWxpZmllciI6Y2FzZSJ1c2VibGFuayI6Y2FzZSJ2YWx1ZTEiOmNhc2UidmFsdWUyIjpjYXNlImZvcm1hdCI6Y2FzZSJjZWxscmFuZ2VsaXN0IjpicmVhaztkZWZhdWx0OmhyPSExfWJy''@;'; put 'put ''ZWFrO2Nhc2Uic29ydGluZyI6Y2FzZSJjb25kaXRpb25hbGZvcm1hdHRpbmciOnN3aXRjaChwZVszXSl7Y2FzZSJyYW5nZSI6Y2FzZSJ0eXBlIjpjYXNlIm1pbiI6Y2FzZSJtYXgiOmNhc2Uic29ydCI6Y2FzZSJkZXNjZW5kaW5nIjpjYXNlIm9yZGVyIjpjYXNlImNhc2VzZW5zaXRpdmUiOmNh''@;'; put 'put ''c2UidmFsdWUiOmNhc2UiZXJyb3JzdHlsZSI6Y2FzZSJlcnJvcm1lc3NhZ2UiOmNhc2UiZXJyb3J0aXRsZSI6Y2FzZSJjZWxscmFuZ2VsaXN0IjpjYXNlImlucHV0bWVzc2FnZSI6Y2FzZSJpbnB1dHRpdGxlIjpjYXNlImNvbWJvaGlkZSI6Y2FzZSJpbnB1dGhpZGUiOmNhc2UiY29uZGl0aW9u''@;'; put 'put ''IjpjYXNlInF1YWxpZmllciI6Y2FzZSJ1c2VibGFuayI6Y2FzZSJ2YWx1ZTEiOmNhc2UidmFsdWUyIjpjYXNlImZvcm1hdCI6YnJlYWs7ZGVmYXVsdDpocj0hMX1icmVhaztjYXNlIm1hcGluZm8iOmNhc2Uic2NoZW1hIjpjYXNlImRhdGEiOnN3aXRjaChwZVszXSl7Y2FzZSJtYXAiOmNhc2Ui''@;'; put 'put ''ZW50cnkiOmNhc2UicmFuZ2UiOmNhc2UieHBhdGgiOmNhc2UiZmllbGQiOmNhc2UieHNkdHlwZSI6Y2FzZSJmaWx0ZXJvbiI6Y2FzZSJhZ2dyZWdhdGUiOmNhc2UiZWxlbWVudHR5cGUiOmNhc2UiYXR0cmlidXRldHlwZSI6Y2FzZSJzY2hlbWEiOmNhc2UiZWxlbWVudCI6Y2FzZSJjb21wbGV4''@;'; put 'put ''dHlwZSI6Y2FzZSJkYXRhdHlwZSI6Y2FzZSJhbGwiOmNhc2UiYXR0cmlidXRlIjpjYXNlImV4dGVuZHMiOmNhc2Uicm93IjpicmVhaztkZWZhdWx0OmhyPSExfWJyZWFrO2Nhc2Uic21hcnR0YWdzIjpicmVhaztkZWZhdWx0OmhyPSExfWlmKGhyfHxwZVszXS5tYXRjaCgvIVxbQ0RBVEEvKSli''@;'; put 'put ''cmVhaztpZigheWVbeWUubGVuZ3RoLTFdWzFdKXRocm93IlVucmVjb2duaXplZCB0YWc6ICIrcGVbM10rInwiK3llLmpvaW4oInwiKTtpZigiY3VzdG9tZG9jdW1lbnRwcm9wZXJ0aWVzIj09PXllW3llLmxlbmd0aC0xXVswXSl7aWYoIi8+Ij09PXBlWzBdLnNsaWNlKC0yKSlicmVhazsiLyI9''@;'; put 'put ''PT1wZVsxXT9JeihicixzbyxNaSxHLnNsaWNlKGVyLHBlLmluZGV4KSk6KE1pPXBlLGVyPXBlLmluZGV4K3BlWzBdLmxlbmd0aCk7YnJlYWt9aWYoay5XVEYpdGhyb3ciVW5yZWNvZ25pemVkIHRhZzogIitwZVszXSsifCIreWUuam9pbigifCIpfXZhciBHbD17fTtyZXR1cm4hay5ib29rU2hl''@;'; put 'put ''ZXRzJiYhay5ib29rUHJvcHMmJihHbC5TaGVldHM9TmUpLEdsLlNoZWV0TmFtZXM9WWUsR2wuV29ya2Jvb2s9eWksR2wuU1NGPUEuZ2V0X3RhYmxlKCksR2wuUHJvcHM9ZnIsR2wuQ3VzdHByb3BzPWJyLEdsLlNoZWV0cyYmR2wuU2hlZXROYW1lcy5mb3JFYWNoKGZ1bmN0aW9uKHl1KXt2YXIg''@;'; put 'put ''TWw9R2wuU2hlZXRzW3l1XTtNbFsiIW1lcmdlcyJdJiZNbFsiIW1lcmdlcyJdLmZvckVhY2goZnVuY3Rpb24obG4peyJzdHJpbmciPT10eXBlb2YgbG4mJihsbj13LnV0aWxzLmRlY29kZV9yYW5nZShsbikpO3ZhciBFbj13LnV0aWxzLmVuY29kZV9jZWxsKGxuLnMpLFVuPUFycmF5LmlzQXJy''@;'; put 'put ''YXkoTWwpPyhNbFtsbi5zLnJdfHxbXSlbbG4ucy5jXTpNbFtFbl07VW4mJlVuLnMmJihudWxsIT1Vbi5zLnRvcCYmenUuc2hlZXRfc2V0X3JhbmdlX3N0eWxlKE1sLGxuLHt0b3A6VW4ucy50b3B9KSxudWxsIT1Vbi5zLmJvdHRvbSYmenUuc2hlZXRfc2V0X3JhbmdlX3N0eWxlKE1sLGxuLHti''@;'; put 'put ''b3R0b206VW4ucy5ib3R0b219KSxudWxsIT1Vbi5zLmxlZnQmJnp1LnNoZWV0X3NldF9yYW5nZV9zdHlsZShNbCxsbix7bGVmdDpVbi5zLmxlZnR9KSxudWxsIT1Vbi5zLnJpZ2h0JiZ6dS5zaGVldF9zZXRfcmFuZ2Vfc3R5bGUoTWwsbG4se3JpZ2h0OlVuLnMucmlnaHR9KSl9KX0pLEdsfWZ1''@;'; put 'put ''bmN0aW9uIEk4KFMsUil7c3dpdGNoKE5JKFI9Unx8e30pLFIudHlwZXx8ImJhc2U2NCIpe2Nhc2UiYmFzZTY0IjpyZXR1cm4gRDgoX2UuZGVjb2RlKFMpLFIpO2Nhc2UiYmluYXJ5IjpjYXNlImJ1ZmZlciI6Y2FzZSJmaWxlIjpyZXR1cm4gRDgoUyxSKTtjYXNlImFycmF5IjpyZXR1cm4gRDgo''@;'; put 'put ''QyhTKSxSKX19ZnVuY3Rpb24geUkoUyl7cmV0dXJuIFByKCJOYW1lZFJhbmdlIixudWxsLHsic3M6TmFtZSI6Uy5OYW1lLCJzczpSZWZlcnNUbyI6Ij0iK0g0KFMuUmVmLHtyOjAsYzowfSl9KX1mdW5jdGlvbiBObmUoUyxSLGssRyxRLG9lLGdlKXtpZighU3x8bnVsbD09Uy52JiZudWxsPT1T''@;'; put 'put ''LmYmJiFHLnNoZWV0U3R1YnMpcmV0dXJuIiI7dmFyIHBlPXt9O2lmKFMuZiYmKHBlWyJzczpGb3JtdWxhIl09Ij0iK0xyKEg0KFMuZixnZSkpKSxTLkYmJlMuRi5zbGljZSgwLFIubGVuZ3RoKT09Uil7dmFyIHllPU5vKFMuRi5zbGljZShSLmxlbmd0aCsxKSk7cGVbInNzOkFycmF5UmFuZ2Ui''@;'; put 'put ''XT0iUkM6UiIrKHllLnI9PWdlLnI/IiI6IlsiKyh5ZS5yLWdlLnIpKyJdIikrIkMiKyh5ZS5jPT1nZS5jPyIiOiJbIisoeWUuYy1nZS5jKSsiXSIpfWlmKFMubCYmUy5sLlRhcmdldCYmKHBlWyJzczpIUmVmIl09THIoUy5sLlRhcmdldCksUy5sLlRvb2x0aXAmJihwZVsieDpIUmVmU2NyZWVu''@;'; put 'put ''VGlwIl09THIoUy5sLlRvb2x0aXApKSksa1siIW1lcmdlcyJdKWZvcih2YXIgUGU9a1siIW1lcmdlcyJdLE5lPTA7TmUhPVBlLmxlbmd0aDsrK05lKVBlW05lXS5zLmMhPWdlLmN8fFBlW05lXS5zLnIhPWdlLnJ8fChQZVtOZV0uZS5jPlBlW05lXS5zLmMmJihwZVsic3M6TWVyZ2VBY3Jvc3Mi''@;'; put 'put ''XT1QZVtOZV0uZS5jLVBlW05lXS5zLmMpLFBlW05lXS5lLnI+UGVbTmVdLnMuciYmKHBlWyJzczpNZXJnZURvd24iXT1QZVtOZV0uZS5yLVBlW05lXS5zLnIpKTt2YXIgWWU9IiIsZXQ9IiI7c3dpdGNoKFMudCl7Y2FzZSJ6IjppZighRy5zaGVldFN0dWJzKXJldHVybiIiO2JyZWFrO2Nhc2Ui''@;'; put 'put ''biI6WWU9Ik51bWJlciIsZXQ9U3RyaW5nKFMudik7YnJlYWs7Y2FzZSJiIjpZZT0iQm9vbGVhbiIsZXQ9Uy52PyIxIjoiMCI7YnJlYWs7Y2FzZSJlIjpZZT0iRXJyb3IiLGV0PU1jW1Mudl07YnJlYWs7Y2FzZSJkIjpZZT0iRGF0ZVRpbWUiLGV0PW5ldyBEYXRlKFMudikudG9JU09TdHJpbmco''@;'; put 'put ''KSxudWxsPT1TLnomJihTLno9Uy56fHxBLl90YWJsZVsxNF0pO2JyZWFrO2Nhc2UicyI6WWU9IlN0cmluZyIsZXQ9eWEoUy52fHwiIil9dmFyIGN0PWwwKEcuY2VsbFhmcyxudWxsLFMsRyk7cGVbInNzOlN0eWxlSUQiXT0icyIrKDIxK2N0KSxwZVsic3M6SW5kZXgiXT1nZS5jKzE7dmFyIEV0''@;'; put 'put ''PW51bGwhPVMudj9ldDoiIixhdD0ieiI9PVMudD8iIjpTLlI/ZnVuY3Rpb24gRWIoUyl7cmV0dXJuJzxzczpEYXRhIHNzOlR5cGU9IlN0cmluZyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAiPicrUy5tYXAoZnVuY3Rpb24oayl7dmFyIEc9eWEoay52KTtyZXR1cm4g''@;'; put 'put ''ay5zJiYoay5zLmJvbGQmJihHPSI8Qj4iK0crIjwvQj4iKSxrLnMuaXRhbGljJiYoRz0iPEk+IitHKyI8L0k+Iiksay5zLnN0cmlrZSYmKEc9IjxTPiIrRysiPC9TPiIpLGsucy51bmRlcmxpbmUmJihHPSI8VT4iK0crIjwvVT4iKSwic3VwZXIiPT1rLnMudmFsaWduJiYoRz0iPFN1cD4iK0cr''@;'; put 'put ''IjwvU3VwPiIpLCJzdWIiPT1rLnMudmFsaWduJiYoRz0iPFN1Yj4iK0crIjwvU3ViPiIpLChrLnMubmFtZXx8ay5zLnN6fHxrLnMuY29sb3ImJm51bGwhPWsucy5jb2xvci5yZ2IpJiYoRz1bIjxGb250IixrLnMubmFtZT8nIGh0bWw6RmFjZT0iJytrLnMubmFtZSsnIic6IiIsay5zLnN6Pycg''@;'; put 'put ''aHRtbDpTaXplPSInK2sucy5zeisnIic6IiIsay5zLmNvbG9yPycgaHRtbDpDb2xvcj0iIycrKCIwMDAwMDAiKygibnVtYmVyIj09dHlwZW9mIGsucy5jb2xvci5yZ2I/ay5zLmNvbG9yLnJnYi50b1N0cmluZygxNik6ay5zLmNvbG9yLnJnYikpLnNsaWNlKC02KSsnIic6IiIsIj4iLEcsIjwv''@;'; put 'put ''Rm9udD4iXS5qb2luKCIiKSkpLEd9KS5qb2luKCIiKSsiPC9EYXRhPiJ9KFMuUik6JzxEYXRhIHNzOlR5cGU9IicrWWUrJyI+JytFdCsiPC9EYXRhPiI7cmV0dXJuKFMuY3x8W10pLmxlbmd0aD4wJiYoYXQrPWZ1bmN0aW9uIHdJKFMpe3JldHVybiBTLm1hcChmdW5jdGlvbihSKXt2YXIgRz1Q''@;'; put 'put ''cigic3M6RGF0YSIsRmEoUi50fHwiIikse3htbG5zOiJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwIn0pO3JldHVybiBQcigiQ29tbWVudCIsRyx7InNzOkF1dGhvciI6Ui5hfSl9KS5qb2luKCIiKX0oUy5jKSksUHIoIkNlbGwiLGF0LHBlKX1mdW5jdGlvbiBWbmUoUyxSKXt2YXIg''@;'; put 'put ''az0nPFJvdyBzczpJbmRleD0iJysoUysxKSsnIic7cmV0dXJuIFImJihSLmhweCYmIVIuaHB0JiYoUi5ocHQ9VTMoUi5ocHgpKSxSLmhwdCYmKGsrPScgc3M6QXV0b0ZpdEhlaWdodD0iMCIgc3M6SGVpZ2h0PSInK1IuaHB0KyciJyksUi5oaWRkZW4mJihrKz0nIHNzOkhpZGRlbj0iMSInKSks''@;'; put 'put ''aysiPiJ9ZnVuY3Rpb24gQ0koUyxSLGspe3ZhciBHPVtdLG9lPWsuU2hlZXRzW2suU2hlZXROYW1lc1tTXV0sZ2U9b2U/ZnVuY3Rpb24gT3ooUyxSLGssRyl7aWYoIVN8fCEoKEd8fHt9KS5Xb3JrYm9va3x8e30pLk5hbWVzKXJldHVybiIiO2Zvcih2YXIgUT1HLldvcmtib29rLk5hbWVzLG9l''@;'; put 'put ''PVtdLGdlPTA7Z2U8US5sZW5ndGg7KytnZSl7dmFyIHBlPVFbZ2VdO3BlLlNoZWV0PT1rJiYocGUuTmFtZS5tYXRjaCgvXl94bGZuXC4vKXx8b2UucHVzaCh5SShwZSkpKX1yZXR1cm4gb2Uuam9pbigiIil9KG9lLDAsUyxrKToiIjtyZXR1cm4gZ2UubGVuZ3RoPjAmJkcucHVzaCgiPE5hbWVz''@;'; put 'put ''PiIrZ2UrIjwvTmFtZXM+IiksZ2U9b2U/ZnVuY3Rpb24gUHooUyxSLGssRyl7aWYoIVNbIiFyZWYiXSlyZXR1cm4iIjt2YXIgUT1vbyhTWyIhcmVmIl0pLG9lPVNbIiFtZXJnZXMiXXx8W10sZ2U9MCxwZT1bXTtTWyIhY29scyJdJiZTWyIhY29scyJdLmZvckVhY2goZnVuY3Rpb24oYnQsanQp''@;'; put 'put ''e1EwKGJ0KTt2YXIga3Q9ISFidC53aWR0aCxPdD11OChqdCxidCksS3Q9eyJzczpJbmRleCI6anQrMX07a3QmJihLdFsic3M6V2lkdGgiXT1NNShPdC53aWR0aCkpLGJ0LmhpZGRlbiYmKEt0WyJzczpIaWRkZW4iXT0iMSIpLHBlLnB1c2goUHIoIkNvbHVtbiIsbnVsbCxLdCkpfSk7Zm9yKHZh''@;'; put 'put ''ciB5ZT1BcnJheS5pc0FycmF5KFMpLFBlPVEucy5yO1BlPD1RLmUucjsrK1BlKXtmb3IodmFyIE5lPVtWbmUoUGUsKFNbIiFyb3dzIl18fFtdKVtQZV0pXSxZZT1RLnMuYztZZTw9US5lLmM7KytZZSl7dmFyIGV0PSExO2ZvcihnZT0wO2dlIT1vZS5sZW5ndGg7KytnZSlpZighKG9lW2dlXS5z''@;'; put 'put ''LmM+WWV8fG9lW2dlXS5zLnI+UGV8fG9lW2dlXS5lLmM8WWV8fG9lW2dlXS5lLnI8UGUpKXsob2VbZ2VdLnMuYyE9WWV8fG9lW2dlXS5zLnIhPVBlKSYmKGV0PSEwKTticmVha31pZighZXQpe3ZhciBjdD17cjpQZSxjOlllfSxFdD1xaShjdCk7TmUucHVzaChObmUoeWU/KFNbUGVdfHxbXSlb''@;'; put 'put ''WWVdOlNbRXRdLEV0LFMsUiwwLDAsY3QpKX19TmUucHVzaCgiPC9Sb3c+IiksTmUubGVuZ3RoPjImJnBlLnB1c2goTmUuam9pbigiIikpfXJldHVybiBwZS5qb2luKCIiKX0ob2UsUik6IiIsZ2UubGVuZ3RoPjAmJkcucHVzaCgiPFRhYmxlPiIrZ2UrIjwvVGFibGU+IiksRy5wdXNoKGZ1bmN0''@;'; put 'put ''aW9uIFlTKFMsUixrLEcpe2lmKCFTKXJldHVybiIiO3ZhciBRPVtdO2lmKFNbIiFtYXJnaW5zIl0mJihRLnB1c2goIjxQYWdlU2V0dXA+IiksU1siIW1hcmdpbnMiXS5oZWFkZXImJlEucHVzaChQcigiSGVhZGVyIixudWxsLHsieDpNYXJnaW4iOlNbIiFtYXJnaW5zIl0uaGVhZGVyfSkpLFNb''@;'; put 'put ''IiFtYXJnaW5zIl0uZm9vdGVyJiZRLnB1c2goUHIoIkZvb3RlciIsbnVsbCx7Ing6TWFyZ2luIjpTWyIhbWFyZ2lucyJdLmZvb3Rlcn0pKSxRLnB1c2goUHIoIlBhZ2VNYXJnaW5zIixudWxsLHsieDpCb3R0b20iOlNbIiFtYXJnaW5zIl0uYm90dG9tfHwiMC43NSIsIng6TGVmdCI6U1siIW1h''@;'; put 'put ''cmdpbnMiXS5sZWZ0fHwiMC43IiwieDpSaWdodCI6U1siIW1hcmdpbnMiXS5yaWdodHx8IjAuNyIsIng6VG9wIjpTWyIhbWFyZ2lucyJdLnRvcHx8IjAuNzUifSkpLFEucHVzaCgiPC9QYWdlU2V0dXA+IikpLEcmJkcuV29ya2Jvb2smJkcuV29ya2Jvb2suU2hlZXRzJiZHLldvcmtib29rLlNo''@;'; put 'put ''ZWV0c1trXSlpZihHLldvcmtib29rLlNoZWV0c1trXS5IaWRkZW4pUS5wdXNoKFByKCJWaXNpYmxlIiwxPT1HLldvcmtib29rLlNoZWV0c1trXS5IaWRkZW4/IlNoZWV0SGlkZGVuIjoiU2hlZXRWZXJ5SGlkZGVuIix7fSkpO2Vsc2V7Zm9yKHZhciBvZT0wO29lPGsmJighRy5Xb3JrYm9vay5T''@;'; put 'put ''aGVldHNbb2VdfHxHLldvcmtib29rLlNoZWV0c1tvZV0uSGlkZGVuKTsrK29lKTtvZT09ayYmUS5wdXNoKCI8U2VsZWN0ZWQvPiIpfWlmKCgoKChHfHx7fSkuV29ya2Jvb2t8fHt9KS5WaWV3c3x8W10pWzBdfHx7fSkuUlRMJiZRLnB1c2goIjxEaXNwbGF5UmlnaHRUb0xlZnQvPiIpLFd0KFNb''@;'; put 'put ''IiFncmlkbGluZXMiXSkmJlEucHVzaCgiPERvTm90RGlzcGxheUdyaWRsaW5lcy8+IiksU1siIWZyZWV6ZSJdKXtRLnB1c2goIjxGcmVlemVQYW5lcy8+IiksUS5wdXNoKCI8RnJvemVuTm9TcGxpdC8+Iik7dmFyIGdlPU5vKFNbIiFmcmVlemUiXSk7Z2Uucj4wJiYoUS5wdXNoKEhhKCJTcGxp''@;'; put 'put ''dEhvcml6b250YWwiLCIiK2dlLnIpKSxRLnB1c2goSGEoIlRvcFJvd0JvdHRvbVBhbmUiLCIiK2dlLnIpKSksZ2UuYz4wJiYoUS5wdXNoKEhhKCJTcGxpdFZlcnRpY2FsIiwiIitnZS5jKSksUS5wdXNoKEhhKCJMZWZ0Q29sdW1uUmlnaHRQYW5lIiwiIitnZS5jKSkpfXJldHVybiBTWyIhcHJv''@;'; put 'put ''dGVjdCJdJiYoUS5wdXNoKEhhKCJQcm90ZWN0Q29udGVudHMiLCJUcnVlIikpLFNbIiFwcm90ZWN0Il0ub2JqZWN0cyYmUS5wdXNoKEhhKCJQcm90ZWN0T2JqZWN0cyIsIlRydWUiKSksU1siIXByb3RlY3QiXS5zY2VuYXJpb3MmJlEucHVzaChIYSgiUHJvdGVjdFNjZW5hcmlvcyIsIlRydWUi''@;'; put 'put ''KSksbnVsbD09U1siIXByb3RlY3QiXS5zZWxlY3RMb2NrZWRDZWxsc3x8U1siIXByb3RlY3QiXS5zZWxlY3RMb2NrZWRDZWxscz9udWxsIT1TWyIhcHJvdGVjdCJdLnNlbGVjdFVubG9ja2VkQ2VsbHMmJiFTWyIhcHJvdGVjdCJdLnNlbGVjdFVubG9ja2VkQ2VsbHMmJlEucHVzaChIYSgiRW5h''@;'; put 'put ''YmxlU2VsZWN0aW9uIiwiVW5sb2NrZWRDZWxscyIpKTpRLnB1c2goSGEoIkVuYWJsZVNlbGVjdGlvbiIsIk5vU2VsZWN0aW9uIikpLFtbImZvcm1hdENlbGxzIiwiQWxsb3dGb3JtYXRDZWxscyJdLFsiZm9ybWF0Q29sdW1ucyIsIkFsbG93U2l6ZUNvbHMiXSxbImZvcm1hdFJvd3MiLCJBbGxv''@;'; put 'put ''d1NpemVSb3dzIl0sWyJpbnNlcnRDb2x1bW5zIiwiQWxsb3dJbnNlcnRDb2xzIl0sWyJpbnNlcnRSb3dzIiwiQWxsb3dJbnNlcnRSb3dzIl0sWyJpbnNlcnRIeXBlcmxpbmtzIiwiQWxsb3dJbnNlcnRIeXBlcmxpbmtzIl0sWyJkZWxldGVDb2x1bW5zIiwiQWxsb3dEZWxldGVDb2xzIl0sWyJk''@;'; put 'put ''ZWxldGVSb3dzIiwiQWxsb3dEZWxldGVSb3dzIl0sWyJzb3J0IiwiQWxsb3dTb3J0Il0sWyJhdXRvRmlsdGVyIiwiQWxsb3dGaWx0ZXIiXSxbInBpdm90VGFibGVzIiwiQWxsb3dVc2VQaXZvdFRhYmxlcyJdXS5mb3JFYWNoKGZ1bmN0aW9uKHBlKXtTWyIhcHJvdGVjdCJdW3BlWzBdXSYmUS5w''@;'; put 'put ''dXNoKCI8IitwZVsxXSsiLz4iKX0pKSwwPT1RLmxlbmd0aD8iIjpQcigiV29ya3NoZWV0T3B0aW9ucyIsUS5qb2luKCIiKSx7eG1sbnM6eWwueH0pfShvZSwwLFMsaykpLEcuam9pbigiIil9ZnVuY3Rpb24gU0koUyxSKXtSfHwoUj17fSksUy5TU0Z8fChTLlNTRj1BLmdldF90YWJsZSgpKSxT''@;'; put 'put ''LlNTRiYmKGFlKEEpLEEubG9hZF90YWJsZShTLlNTRiksUi5yZXZzc2Y9a2UoUy5TU0YpLFIucmV2c3NmW1MuU1NGWzY1NTM1XV09MCxSLnNzZj1TLlNTRixTLlN0eWxlcz17Rm9udHM6Ui5Gb250cz1be3N6OjEyLGNvbG9yOnt0aGVtZToxLHJnYjoiMDAwMDAwIn0sbmFtZToiQ2FsaWJyaSIs''@;'; put 'put ''ZmFtaWx5OjIsc2NoZW1lOiJtaW5vciJ9XSxGaWxsczpSLkZpbGxzPVt7cGF0dGVyblR5cGU6Im5vbmUifSx7cGF0dGVyblR5cGU6ImdyYXkxMjUifV0sQm9yZGVyczpSLkJvcmRlcnM9W3t9XX0sUi5jZWxsWGZzPVtdLFIuY2VsbFN0eWxlWGZzPVt7bmFtZToiTm9ybWFsIn1dLGwwKFIuY2Vs''@;'; put 'put ''bFhmcyxudWxsLHt9LHtyZXZzc2Y6e0dlbmVyYWw6MH19KSk7dmFyIGs9W107ay5wdXNoKGZ1bmN0aW9uIG1JKFMsUil7dmFyIGs9W107cmV0dXJuIFMuUHJvcHMmJmsucHVzaChmdW5jdGlvbiBadyhTLFIpe3ZhciBrPVtdO3JldHVybiBPZShQNikubWFwKGZ1bmN0aW9uKEcpe2Zvcih2YXIg''@;'; put 'put ''UT0wO1E8UjAubGVuZ3RoOysrUSlpZihSMFtRXVsxXT09RylyZXR1cm4gUjBbUV07Zm9yKFE9MDtRPHJoLmxlbmd0aDsrK1EpaWYocmhbUV1bMV09PUcpcmV0dXJuIHJoW1FdO3Rocm93IEd9KS5mb3JFYWNoKGZ1bmN0aW9uKEcpe2lmKG51bGwhPVNbR1sxXV0pe3ZhciBRPVImJlIuUHJvcHMm''@;'; put 'put ''Jm51bGwhPVIuUHJvcHNbR1sxXV0/Ui5Qcm9wc1tHWzFdXTpTW0dbMV1dOyJkYXRlIj09PUdbMl0mJihRPW5ldyBEYXRlKFEpLnRvSVNPU3RyaW5nKCkucmVwbGFjZSgvXC5cZCpaLywiWiIpKSwibnVtYmVyIj09dHlwZW9mIFE/UT1TdHJpbmcoUSk6ITA9PT1RfHwhMT09PVE/UT1RPyIxIjoi''@;'; put 'put ''MCI6USBpbnN0YW5jZW9mIERhdGUmJihRPW5ldyBEYXRlKFEpLnRvSVNPU3RyaW5nKCkucmVwbGFjZSgvXC5cZCpaLywiIikpLGsucHVzaChIYShQNltHWzFdXXx8R1sxXSxRKSl9fSksUHIoIkRvY3VtZW50UHJvcGVydGllcyIsay5qb2luKCIiKSx7eG1sbnM6eWwub30pfShTLlByb3BzLFIp''@;'; put 'put ''KSxTLkN1c3Rwcm9wcyYmay5wdXNoKGZ1bmN0aW9uIEg2KFMsUil7dmFyIGs9WyJXb3Jrc2hlZXRzIiwiU2hlZXROYW1lcyJdLEc9IkN1c3RvbURvY3VtZW50UHJvcGVydGllcyIsUT1bXTtyZXR1cm4gUyYmT2UoUykuZm9yRWFjaChmdW5jdGlvbihvZSl7aWYoT2JqZWN0LnByb3RvdHlwZS5o''@;'; put 'put ''YXNPd25Qcm9wZXJ0eS5jYWxsKFMsb2UpKXtmb3IodmFyIGdlPTA7Z2U8UjAubGVuZ3RoOysrZ2UpaWYob2U9PVIwW2dlXVsxXSlyZXR1cm47Zm9yKGdlPTA7Z2U8cmgubGVuZ3RoOysrZ2UpaWYob2U9PXJoW2dlXVsxXSlyZXR1cm47Zm9yKGdlPTA7Z2U8ay5sZW5ndGg7KytnZSlpZihvZT09''@;'; put 'put ''a1tnZV0pcmV0dXJuO3ZhciBwZT1TW29lXSx5ZT0ic3RyaW5nIjsibnVtYmVyIj09dHlwZW9mIHBlPyh5ZT0iZmxvYXQiLHBlPVN0cmluZyhwZSkpOiEwPT09cGV8fCExPT09cGU/KHllPSJib29sZWFuIixwZT1wZT8iMSI6IjAiKTpwZT1TdHJpbmcocGUpLFEucHVzaChQcihwYShvZSkscGUs''@;'; put 'put ''eyJkdDpkdCI6eWV9KSl9fSksUiYmT2UoUikuZm9yRWFjaChmdW5jdGlvbihvZSl7aWYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFIsb2UpJiYoIVN8fCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoUyxvZSkpKXt2YXIgZ2U9UltvZV0scGU9InN0''@;'; put 'put ''cmluZyI7Im51bWJlciI9PXR5cGVvZiBnZT8ocGU9ImZsb2F0IixnZT1TdHJpbmcoZ2UpKTohMD09PWdlfHwhMT09PWdlPyhwZT0iYm9vbGVhbiIsZ2U9Z2U/IjEiOiIwIik6Z2UgaW5zdGFuY2VvZiBEYXRlPyhwZT0iZGF0ZVRpbWUudHoiLGdlPWdlLnRvSVNPU3RyaW5nKCkpOmdlPVN0cmlu''@;'; put 'put ''ZyhnZSksUS5wdXNoKFByKHBhKG9lKSxnZSx7ImR0OmR0IjpwZX0pKX19KSwiPCIrRysnIHhtbG5zPSInK3lsLm8rJyI+JytRLmpvaW4oIiIpKyI8LyIrRysiPiJ9KFMuUHJvcHMsUy5DdXN0cHJvcHMpKSxrLmpvaW4oIiIpfShTLFIpKSxrLnB1c2goIiIpLGsucHVzaCgiIiksay5wdXNoKCIi''@;'; put 'put ''KTtmb3IodmFyIEc9MDtHPFMuU2hlZXROYW1lcy5sZW5ndGg7KytHKWsucHVzaChQcigiV29ya3NoZWV0IixDSShHLFIsUykseyJzczpOYW1lIjpMcihTLlNoZWV0TmFtZXNbR10pfSkpO3JldHVybiBrWzJdPWZ1bmN0aW9uIGJJKFMsUil7dmFyIEc9W1snPFN0eWxlIHNzOklEPSJEZWZhdWx0''@;'; put 'put ''IiBzczpOYW1lPSJOb3JtYWwiPicsJzxBbGlnbm1lbnQgc3M6VmVydGljYWw9IkJvdHRvbSIvPicsIjxCb3JkZXJzLz4iLCc8Rm9udCBzczpGb250TmFtZT0iQ2FsaWJyaSIgeDpGYW1pbHk9IlN3aXNzIiBzczpTaXplPSIxMiIgc3M6Q29sb3I9IiMwMDAwMDAiLz4nLCI8SW50ZXJpb3IvPiIs''@;'; put 'put ''IjxOdW1iZXJGb3JtYXQvPiIsIjxQcm90ZWN0aW9uLz4iLCI8L1N0eWxlPiJdLmpvaW4oIiIpXTtyZXR1cm4gUi5jZWxsWGZzLmZvckVhY2goZnVuY3Rpb24oUSxvZSl7dmFyIGdlPVtdO2lmKFEuYWxpZ25tZW50KXt2YXIgcGU9e307US5hbGlnbm1lbnQuc2hyaW5rVG9GaXQmJihwZVsic3M6''@;'; put 'put ''U2hyaW5rVG9GaXQiXT0iMSIpLFEuYWxpZ25tZW50LndyYXBUZXh0JiYocGVbInNzOldyYXBUZXh0Il09IjEiKSxRLmFsaWdubWVudC52ZXJ0aWNhbCYmKHBlWyJzczpWZXJ0aWNhbCJdPUF0KFEuYWxpZ25tZW50LnZlcnRpY2FsKSksUS5hbGlnbm1lbnQuaG9yaXpvbnRhbCYmKHBlWyJzczpI''@;'; put 'put ''b3Jpem9udGFsIl09QXQoUS5hbGlnbm1lbnQuaG9yaXpvbnRhbCkpLFEuYWxpZ25tZW50LmluZGVudCYmKHBlWyJzczpJbmRlbnQiXT1RLmFsaWdubWVudC5pbmRlbnQpLFEuYWxpZ25tZW50LnRleHRSb3RhdGlvbiYmKHBlWyJzczpSb3RhdGUiXT1RLmFsaWdubWVudC50ZXh0Um90YXRpb24p''@;'; put 'put ''LGdlLnB1c2goUHIoIkFsaWdubWVudCIsbnVsbCxwZSkpfWU6aWYobnVsbCE9US5mb250SWQpe3ZhciB5ZT1SLkZvbnRzW1EuZm9udElkXTtpZigheWUpYnJlYWsgZTt2YXIgUGU9eyJzczpGb250TmFtZSI6IkNhbGlicmkiLCJzczpTaXplIjoiMTIifSxOZT0hMTt5ZS5ib2xkJiYoTmU9ITAs''@;'; put 'put ''UGVbInNzOkJvbGQiXT0iMSIpLHllLml0YWxpYyYmKE5lPSEwLFBlWyJzczpJdGFsaWMiXT0iMSIpLHllLnN0cmlrZSYmKE5lPSEwLFBlWyJzczpTdHJpa2VUaHJvdWdoIl09IjEiKSxudWxsIT15ZS51bmRlcmxpbmUmJihOZT0hMCxQZVsic3M6VW5kZXJsaW5lIl09eGJbeWUudW5kZXJsaW5l''@;'; put 'put ''XXx8KHllLnVuZGVybGluZT8iU2luZ2xlIjoiTm9uZSIpKSxudWxsIT15ZS5zeiYmKE5lPSEwLFBlWyJzczpTaXplIl09eWUuc3opLG51bGwhPXllLm5hbWUmJihOZT0hMCxQZVsic3M6Rm9udE5hbWUiXT15ZS5uYW1lKSx5ZS5jb2xvciYmbnVsbCE9eWUuY29sb3IucmdiJiYoTmU9ITAsUGVb''@;'; put 'put ''InNzOkNvbG9yIl09IiMiKygibnVtYmVyIj09dHlwZW9mIHllLmNvbG9yLnJnYj8iMDAwMDAwIit5ZS5jb2xvci5yZ2IudG9TdHJpbmcoMTYpOnllLmNvbG9yLnJnYikuc2xpY2UoLTYpKSxbInN1YiIsInN1cGVyIl0uaW5kZXhPZih5ZS52YWxpZ24pPi0xJiYoUGVbInNzOlZlcnRpY2FsQWxp''@;'; put 'put ''Z24iXT1BdCh5ZS52YWxpZ24pKyJzY3JpcHQiKSxOZSYmZ2UucHVzaChQcigiRm9udCIsbnVsbCxQZSkpfWU6aWYoUS5maWxsSWQ+MCl7dmFyIFllPVIuRmlsbHNbUS5maWxsSWRdO2lmKCFZZXx8IVllLmZnQ29sb3J8fG51bGw9PVllLmZnQ29sb3IucmdiKWJyZWFrIGU7Z2UucHVzaChQcigi''@;'; put 'put ''SW50ZXJpb3IiLG51bGwseyJzczpQYXR0ZXJuIjp2Q1tZZS5wYXR0ZXJuVHlwZV18fCJTb2xpZCIsInNzOkNvbG9yIjoiIyIrKCJudW1iZXIiPT10eXBlb2YgWWUuZmdDb2xvci5yZ2I/IjAwIitZZS5mZ0NvbG9yLnJnYi50b1N0cmluZygxNik6WWUuZmdDb2xvci5yZ2IpLnNsaWNlKC02KX0p''@;'; put 'put ''KX1nZS5wdXNoKFByKCJOdW1iZXJGb3JtYXQiLG51bGwseyJzczpGb3JtYXQiOkxyKEEuX3RhYmxlW1EubnVtRm10SWRdKX0pKTt2YXIgZXQ9eyJzczpJRCI6InMiKygyMStvZSl9O1Euc3R5bGUmJihldFsic3M6TmFtZSJdPVEuc3R5bGUpLEcucHVzaChQcigiU3R5bGUiLGdlLmpvaW4oIiIp''@;'; put 'put ''LGV0KSl9KSxQcigiU3R5bGVzIixHLmpvaW4oIiIpKX0oMCxSKSxrWzNdPWZ1bmN0aW9uIF9JKFMpe2lmKCEoKFN8fHt9KS5Xb3JrYm9va3x8e30pLk5hbWVzKXJldHVybiIiO2Zvcih2YXIgUj1TLldvcmtib29rLk5hbWVzLGs9W10sRz0wO0c8Ui5sZW5ndGg7KytHKXt2YXIgUT1SW0ddO251''@;'; put 'put ''bGw9PVEuU2hlZXQmJihRLk5hbWUubWF0Y2goL15feGxmblwuLyl8fGsucHVzaCh5SShRKSkpfXJldHVybiBQcigiTmFtZXMiLGsuam9pbigiIikpfShTKSxJaStQcigiV29ya2Jvb2siLGsuam9pbigiIikse3htbG5zOnlsLnNzLCJ4bWxuczpvIjp5bC5vLCJ4bWxuczp4Ijp5bC54LCJ4bWxu''@;'; put 'put ''czpzcyI6eWwuc3MsInhtbG5zOmR0Ijp5bC5kdCwieG1sbnM6aHRtbCI6eWwuaHRtbH0pfWZ1bmN0aW9uIE1JKFMsUixrLEcpe3ZhciBRPWssb2U9W10sZ2U9Ui5zbGljZShSLmwsUi5sK1EpO2lmKEcmJkcuZW5jJiZHLmVuYy5pbnNpdHUmJmdlLmxlbmd0aD4wKXN3aXRjaChTLm4pe2Nhc2Ui''@;'; put 'put ''Qk9GIjpjYXNlIkZpbGVQYXNzIjpjYXNlIkZpbGVMb2NrIjpjYXNlIkludGVyZmFjZUhkciI6Y2FzZSJSUkRJbmZvIjpjYXNlIlJSREhlYWQiOmNhc2UiVXNyRXhjbCI6Y2FzZSJFT0YiOkcuZW5jLmluc2l0dShTZSh7bGVuZ3RoOmdlLmxlbmd0aH0pLCJza2lwIik7YnJlYWs7Y2FzZSJCb3Vu''@;'; put 'put ''ZFNoZWV0OCI6Ry5lbmMuaW5zaXR1KFNlKHtsZW5ndGg6NH0pLCJza2lwIiksZ2U9QnVmZmVyLmNvbmNhdChbQnVmZmVyLmZyb20oZ2Uuc2xpY2UoMCw0KSksQnVmZmVyLmZyb20oRy5lbmMuaW5zaXR1KGdlLnNsaWNlKDQpKSldKTticmVhaztkZWZhdWx0OmdlPUcuZW5jLmluc2l0dShnZSl9''@;'; put 'put ''QXJyYXkuaXNBcnJheShSKSYmIUFycmF5LmlzQXJyYXkoZ2UpJiYoZ2U9QXJyYXkuZnJvbShnZSkpLG9lLnB1c2goZ2UpLFIubCs9UTtmb3IodmFyIHBlPUtTW2VvKFIsUi5sKV0seWU9MDtudWxsIT1wZSYmIkNvbnRpbnVlIj09PXBlLm4uc2xpY2UoMCw4KTspUT1lbyhSLFIubCsyKSx5ZT1S''@;'; put 'put ''LmwrNCxHJiZHLmVuYyYmRy5lbmMuaW5zaXR1JiZHLmVuYy5pbnNpdHUoU2Uoe2xlbmd0aDo0fSksInNraXAiKSwiQ29udGludWVGcnQiPT1wZS5uP3llKz00OiJDb250aW51ZUZydCI9PXBlLm4uc2xpY2UoMCwxMSkmJih5ZSs9MTIsRyYmRy5lbmMmJkcuZW5jLmluc2l0dSYmRy5lbmMuaW5z''@;'; put 'put ''aXR1KFNlKHtsZW5ndGg6OH0pLCJza2lwIikpLGdlPVIuc2xpY2UoeWUsUi5sKzQrUSksRyYmRy5lbmMmJkcuZW5jLmluc2l0dSYmZ2UubGVuZ3RoPjAmJihnZT1HLmVuYy5pbnNpdHUoZ2UpKSxvZS5wdXNoKGdlKSxSLmwrPTQrUSxwZT1LU1tlbyhSLFIubCldO3ZhciBQZT1qKG9lKTttbihQ''@;'; put 'put ''ZSwwKTt2YXIgTmU9MDtQZS5sZW5zPVtdO2Zvcih2YXIgWWU9MDtZZTxvZS5sZW5ndGg7KytZZSlQZS5sZW5zLnB1c2goTmUpLE5lKz1vZVtZZV0ubGVuZ3RoO2lmKFBlLmxlbmd0aDxrKXRocm93IlhMUyBSZWNvcmQgIisoUyYmUy5ufHwiPz8iKSsiIFRydW5jYXRlZDogIitQZS5sZW5ndGgr''@;'; put 'put ''IiA8ICIraztyZXR1cm4gUy5mKFBlLFBlLmxlbmd0aCxHKX1mdW5jdGlvbiBkaChTLFIsayl7aWYoInoiIT09Uy50JiZTLlhGKXt2YXIgRz0wO3RyeXtHPVMuenx8Uy5YRi5udW1GbXRJZHx8MCxSLmNlbGxORiYmKFMuej1BLl90YWJsZVtHXSl9Y2F0Y2gob2Upe2lmKFIuV1RGKXRocm93IG9l''@;'; put 'put ''fWlmKCFSfHwhMSE9PVIuY2VsbFRleHQpdHJ5e1Mudz0iZSI9PT1TLnQ/Uy53fHxNY1tTLnZdOjA9PT1HfHwiR2VuZXJhbCI9PUc/Im4iPT09Uy50PygwfFMudik9PT1TLnY/QS5fZ2VuZXJhbF9pbnQoUy52KTpBLl9nZW5lcmFsX251bShTLnYpOkEuX2dlbmVyYWwoUy52KTpBLmZvcm1hdChH''@;'; put 'put ''LFMudix7ZGF0ZTE5MDQ6ISFrLGRhdGVORjpSJiZSLmRhdGVORn0pfWNhdGNoKG9lKXtpZihSLldURil0aHJvdyBvZX1pZihSLmNlbGxEYXRlcyYmRyYmIm4iPT1TLnQmJkEuaXNfZGF0ZShBLl90YWJsZVtHXXx8U3RyaW5nKEcpKSl7dmFyIFE9QS5wYXJzZV9kYXRlX2NvZGUoUy52KTtRJiYo''@;'; put 'put ''Uy50PSJkIixTLnY9bmV3IERhdGUoUS55LFEubS0xLFEuZCxRLkgsUS5NLFEuUyxRLnUpKX19fWZ1bmN0aW9uIFI4KFMsUixrKXtyZXR1cm57djpTLGl4ZmU6Uix0Omt9fXZhciB4ST1mdW5jdGlvbihTLFIsayl7UlsiIW9iamVjdHMiXT1TfSxUYj17U0k6ImUwODU5ZmYyZjk0ZjY4MTBhYjkx''@;'; put 'put ''MDgwMDJiMjdiM2Q5IixEU0k6IjAyZDVjZGQ1OWMyZTFiMTA5Mzk3MDgwMDJiMmNmOWFlIixVREk6IjA1ZDVjZGQ1OWMyZTFiMTA5Mzk3MDgwMDJiMmNmOWFlIn07ZnVuY3Rpb24gJFMoUyxSKXt2YXIgayxHLFEsb2U7aWYoUnx8KFI9e30pLE5JKFIpLFcoKSxSLmNvZGVwYWdlJiZMKFIuY29k''@;'; put 'put ''ZXBhZ2UpLFMuRnVsbFBhdGhzKXtpZih2ZS5maW5kKFMsIi9lbmNyeXB0aW9uIikpdGhyb3cgbmV3IEVycm9yKCJGaWxlIGlzIHBhc3N3b3JkLXByb3RlY3RlZCIpO2s9dmUuZmluZChTLCIhQ29tcE9iaiIpLEc9dmUuZmluZChTLCIvV29ya2Jvb2siKXx8dmUuZmluZChTLCIvQm9vayIpfWVs''@;'; put 'put ''c2V7c3dpdGNoKFIudHlwZSl7Y2FzZSJiYXNlNjQiOlM9YihfZS5kZWNvZGUoUykpO2JyZWFrO2Nhc2UiYmluYXJ5IjpTPWIoUyk7YnJlYWs7Y2FzZSJidWZmZXIiOmJyZWFrO2Nhc2UiYXJyYXkiOkFycmF5LmlzQXJyYXkoUyl8fChTPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKFMpKX1t''@;'; put 'put ''bihTLDApLEc9e2NvbnRlbnQ6U319aWYoayYmZnVuY3Rpb24gR1MoUyl7dmFyIFI9e30saz1TLmNvbnRlbnQ7aWYoay5sPTI4LFIuQW5zaVVzZXJUeXBlPWsucmVhZF9zaGlmdCgwLCJscHN0ci1hbnNpIiksUi5BbnNpQ2xpcGJvYXJkRm9ybWF0PWZ1bmN0aW9uIF8wKFMpe3JldHVybiBQdyhT''@;'; put 'put ''LDEpfShrKSxrLmxlbmd0aC1rLmw8PTQpcmV0dXJuIFI7dmFyIEc9ay5yZWFkX3NoaWZ0KDQpO2lmKDA9PUd8fEc+NDB8fChrLmwtPTQsUi5SZXNlcnZlZDE9ay5yZWFkX3NoaWZ0KDAsImxwc3RyLWFuc2kiKSxrLmxlbmd0aC1rLmw8PTQpfHwxOTA3NTA1NjUyIT09KEc9ay5yZWFkX3NoaWZ0''@;'; put 'put ''KDQpKXx8KFIuVW5pY29kZUNsaXBib2FyZEZvcm1hdD1mdW5jdGlvbiBBNihTKXtyZXR1cm4gUHcoUywyKX0oayksMD09KEc9ay5yZWFkX3NoaWZ0KDQpKXx8Rz40MCkpcmV0dXJuIFI7ay5sLT00LFIuUmVzZXJ2ZWQyPWsucmVhZF9zaGlmdCgwLCJscHdzdHIiKX0oayksUi5ib29rUHJvcHMm''@;'; put 'put ''JiFSLmJvb2tTaGVldHMpUT17fTtlbHNle3ZhciBnZT1UZT8iYnVmZmVyIjoiYXJyYXkiO2lmKEcmJkcuY29udGVudClRPWZ1bmN0aW9uIEZ6KFMsUil7dmFyIGs9e29wdHM6e319LEc9e307bnVsbCE9bGUmJm51bGw9PVIuZGVuc2UmJihSLmRlbnNlPWxlKTt2YXIgWWUsY3QsYXQsYnQsT3Qs''@;'; put 'put ''S3QsUT1SLmRlbnNlP1tdOnt9LG9lPXt9LGdlPXt9LHBlPW51bGwseWU9W10sUGU9IiIsTmU9e30sZXQ9IiIsanQ9e30sa3Q9W10sVG49W10scnI9W10sU249e1NoZWV0czpbXSxXQlByb3BzOntkYXRlMTkwNDohMX0sVmlld3M6W3t9XX0sbHI9e30sWG49e0ZvbnRzOltdfSxCbj1mdW5jdGlv''@;'; put 'put ''bihEaSl7cmV0dXJuIERpPDg/cjBbRGldOkRpPDY0JiZycltEaS04XXx8cjBbRGldfSxmcj1mdW5jdGlvbihEaSxjcyl7dmFyIHhsLFlvPURpLlhGLmRhdGE7WW8mJihZby5wYXR0ZXJuVHlwZXx8bnVsbCE9WW8uaWN2Rm9yZSkmJmNzJiZjcy5jZWxsU3R5bGVzJiYoRGkucz17fSxEaS5zLnBh''@;'; put 'put ''dHRlcm5UeXBlPVlvLnBhdHRlcm5UeXBlLERpLlhGLmZvbnQmJlB0KERpLnMsRGkuWEYuZm9udCksWW8uZldyYXAmJigoRGkucy5hbGlnbm1lbnR8fChEaS5zLmFsaWdubWVudD17fSkpLndyYXBUZXh0PSEwKSxZby5mU2hyaW5rVG9GaXQmJigoRGkucy5hbGlnbm1lbnR8fChEaS5zLmFsaWdu''@;'; put 'put ''bWVudD17fSkpLnNocmlua1RvRml0PSEwKSxZby5oYWxpZ24mJigoRGkucy5hbGlnbm1lbnR8fChEaS5zLmFsaWdubWVudD17fSkpLmhvcml6b250YWw9WW8uaGFsaWduKSxZby52YWxpZ24mJigoRGkucy5hbGlnbm1lbnR8fChEaS5zLmFsaWdubWVudD17fSkpLnZlcnRpY2FsPVlvLnZhbGln''@;'; put 'put ''biksWW8uY0luZGVudCYmKChEaS5zLmFsaWdubWVudHx8KERpLnMuYWxpZ25tZW50PXt9KSkuaW5kZW50PVlvLmNJbmRlbnQpLDY0IT1Zby5pY3ZGb3JlJiY2NSE9WW8uaWN2QmFjayYmKCh4bD1oZChCbihZby5pY3ZGb3JlKSkpJiYoRGkucy5mZ0NvbG9yPXtyZ2I6eGx9KSwoeGw9aGQoQm4o''@;'; put 'put ''WW8uaWN2QmFjaykpKSYmKERpLnMuYmdDb2xvcj17cmdiOnhsfSkpLFsiTGVmdCIsIlJpZ2h0IiwiVG9wIiwiQm90dG9tIl0uZm9yRWFjaChmdW5jdGlvbihfdSl7WW9bImRnIitfdV0mJihEaS5zW191LnRvTG93ZXJDYXNlKCldPXtzdHlsZTpwZFtZb1siZGciK191XV0sY29sb3I6e3JnYjpo''@;'; put 'put ''ZChCbihZb1siaWN2IitfdV0pKX19KX0pKX0sYnI9ZnVuY3Rpb24oRGksY3MsWW8pe2lmKCEoWmk+MXx8WW8uc2hlZXRSb3dzJiZEaS5yPj1Zby5zaGVldFJvd3MpKXtpZihZby5jZWxsU3R5bGVzJiZjcy5YRiYmY3MuWEYuZGF0YSYmZnIoY3MsWW8pLGRlbGV0ZSBjcy5peGZlLGRlbGV0ZSBj''@;'; put 'put ''cy5YRixZZT1EaSxldD1xaShEaSksKCFnZXx8IWdlLnN8fCFnZS5lKSYmKGdlPXtzOntyOjAsYzowfSxlOntyOjAsYzowfX0pLERpLnI8Z2Uucy5yJiYoZ2Uucy5yPURpLnIpLERpLmM8Z2Uucy5jJiYoZ2Uucy5jPURpLmMpLERpLnIrMT5nZS5lLnImJihnZS5lLnI9RGkucisxKSxEaS5jKzE+''@;'; put 'put ''Z2UuZS5jJiYoZ2UuZS5jPURpLmMrMSksWW8uY2VsbEZvcm11bGEmJmNzLmYpZm9yKHZhciB4bD0wO3hsPGt0Lmxlbmd0aDsrK3hsKWlmKCEoa3RbeGxdWzBdLnMuYz5EaS5jfHxrdFt4bF1bMF0ucy5yPkRpLnJ8fGt0W3hsXVswXS5lLmM8RGkuY3x8a3RbeGxdWzBdLmUucjxEaS5yKSl7Y3Mu''@;'; put 'put ''Rj1yYShrdFt4bF1bMF0pLChrdFt4bF1bMF0ucy5jIT1EaS5jfHxrdFt4bF1bMF0ucy5yIT1EaS5yKSYmZGVsZXRlIGNzLmYsY3MuZiYmKGNzLmY9IiIrczAoa3RbeGxdWzFdLGdlLERpLEZuLGVyKSk7YnJlYWt9WW8uZGVuc2U/KFFbRGkucl18fChRW0RpLnJdPVtdKSxRW0RpLnJdW0RpLmNd''@;'; put 'put ''PWNzKTpRW2V0XT1jc319LGVyPXtlbmM6ITEsc2JjY2g6MCxzbmFtZXM6W10sc2hhcmVkZjpqdCxhcnJheWY6a3QscnJ0YWJpZDpbXSxsYXN0dXNlcjoiIixiaWZmOjgsY29kZXBhZ2U6MCx3aW5sb2NrZWQ6MCxjZWxsU3R5bGVzOiEhUiYmISFSLmNlbGxTdHlsZXMsV1RGOiEhUiYmISFSLnd0''@;'; put 'put ''Zn07ZXIucGFzc3dvcmQ9Ui5wYXNzd29yZD9SLnBhc3N3b3JkOiJWZWx2ZXRTd2VhdHNob3AiO3ZhciBGaSxNaT1udWxsLG5hPVtdLGNhPVtdLExpPVtdLGtyPVtdLF9yPSExLEZuPVtdO0ZuLlNoZWV0TmFtZXM9ZXIuc25hbWVzLEZuLnNoYXJlZGY9ZXIuc2hhcmVkZixGbi5hcnJheWY9ZXIu''@;'; put 'put ''YXJyYXlmLEZuLm5hbWVzPVtdLEZuLlhUST1bXTt2YXIgaWEsanI9IiIsWmk9MCx5aT0wLF9hPVtdLHNvPVtdO2VyLmNvZGVwYWdlPTEyMDAsVSgxMjAwKTtmb3IodmFyIExvPSExO1MubDxTLmxlbmd0aC0xOyl7dmFyIE9hPVMubCxobz1TLnJlYWRfc2hpZnQoMik7aWYoZXImJmVyLmVuYyYm''@;'; put 'put ''ZXIuZW5jLmluc2l0dSYmZXIuZW5jLmluc2l0dShTZShbMCwwXSksImhlYWRlci0wIiksMD09PWhvJiYiRU9GIj09PWpyKWJyZWFrO3ZhciBKYT1TLmw9PT1TLmxlbmd0aD8wOlMucmVhZF9zaGlmdCgyKTtlciYmZXIuZW5jJiZlci5lbmMuaW5zaXR1JiZlci5lbmMuaW5zaXR1KFNlKFswLDBd''@;'; put 'put ''KSwibGVuZ3RoLTAiKTt2YXIgQmk9S1NbaG9dO2lmKEJpJiZCaS5mKXtpZihSLmJvb2tTaGVldHMmJiJCb3VuZFNoZWV0OCI9PT1qciYmIkJvdW5kU2hlZXQ4IiE9PUJpLm4pYnJlYWs7aWYoanI9QmkubiwyPT09Qmkucnx8MTI9PUJpLnIpe3ZhciBJcz1TLnJlYWRfc2hpZnQoMik7aWYoSmEt''@;'; put 'put ''PTIsZXImJmVyLmVuYyYmZXIuZW5jLmluc2l0dSYmZXIuZW5jLmluc2l0dShTZShbMCwwXSkpLCFlci5lbmMmJklzIT09aG8mJigoMjU1JklzKTw8OHxJcz4+OCkhPT1obyl0aHJvdyBuZXcgRXJyb3IoInJ0IG1pc21hdGNoOiAiK0lzKyIhPSIraG8pOzEyPT1CaS5yJiYoUy5sKz0xMCxKYS09''@;'; put 'put ''MTAsZXImJmVyLmVuYyYmZXIuZW5jLmluc2l0dSYmZXIuZW5jLmluc2l0dShTZShbMCwwLDAsMCwwLDAsMCwwLDAsMF0pKSl9dmFyIFBuPU1JKEJpLFMsSmEsZXIpLFdvPUJpLm47aWYoMD09WmkmJiJCT0YiIT1Xbyljb250aW51ZTtzd2l0Y2goV28pe2Nhc2UiRGF0ZTE5MDQiOmsub3B0cy5E''@;'; put 'put ''YXRlMTkwND1Tbi5XQlByb3BzLmRhdGUxOTA0PVBuO2JyZWFrO2Nhc2UiV3JpdGVQcm90ZWN0IjprLm9wdHMuV3JpdGVQcm90ZWN0PSEwO2JyZWFrO2Nhc2UiRmlsZVBhc3MiOmlmKGVyLmVuY3x8KFMubD0wLFppPTApLGVyLmVuYz1QbiwhUi5wYXNzd29yZCYmbnVsbD09UG4udmFsaWQpdGhy''@;'; put 'put ''b3cgbmV3IEVycm9yKCJGaWxlIGlzIHBhc3N3b3JkLXByb3RlY3RlZCIpO2lmKG51bGw9PVBuLnZhbGlkKXRocm93IG5ldyBFcnJvcigiRW5jcnlwdGlvbiBzY2hlbWUgdW5zdXBwb3J0ZWQiKTtpZighUG4udmFsaWQpdGhyb3cgbmV3IEVycm9yKCJQYXNzd29yZCBpcyBpbmNvcnJlY3QiKTti''@;'; put 'put ''cmVhaztjYXNlIldyaXRlQWNjZXNzIjplci5sYXN0dXNlcj1QbjticmVhaztjYXNlIkZpbGVTaGFyaW5nIjpjYXNlIlRlbXBsYXRlIjpjYXNlIkJvb2tCb29sIjpjYXNlIlVzZXNFTEZzIjpjYXNlIk1UUlNldHRpbmdzIjpjYXNlIlVuY2FsY2VkIjpjYXNlIkV4dFNTVCI6Y2FzZSJCb29rRXh0''@;'; put 'put ''IjpjYXNlIlJpY2hUZXh0U3RyZWFtIjpjYXNlIkJrSGltIjpjYXNlIkluZGV4IjpjYXNlIlByb3Q0UmV2IjpjYXNlIlByb3Q0UmV2UGFzcyI6YnJlYWs7Y2FzZSJDb2RlUGFnZSI6dmFyIGhyPU51bWJlcihQbik7c3dpdGNoKGhyKXtjYXNlIDIxMDEwOmhyPTEyMDA7YnJlYWs7Y2FzZSAzMjc2''@;'; put 'put ''ODpocj0xZTQ7YnJlYWs7Y2FzZSAzMjc2OTpocj0xMjUyfVUoZXIuY29kZXBhZ2U9aHIpLExvPSEwO2JyZWFrO2Nhc2UiUlJUYWJJZCI6ZXIucnJ0YWJpZD1QbjticmVhaztjYXNlIldpblByb3RlY3QiOmVyLndpbmxvY2tlZD1QbjticmVhaztjYXNlIlJlZnJlc2hBbGwiOmNhc2UiQ2FsY0Nv''@;'; put 'put ''dW50IjpjYXNlIkNhbGNEZWx0YSI6Y2FzZSJDYWxjSXRlciI6Y2FzZSJDYWxjTW9kZSI6Y2FzZSJDYWxjUHJlY2lzaW9uIjpjYXNlIkNhbGNTYXZlUmVjYWxjIjprLm9wdHNbV29dPVBuO2JyZWFrO2Nhc2UiQ2FsY1JlZk1vZGUiOmVyLkNhbGNSZWZNb2RlPVBuO2JyZWFrO2Nhc2UiRm9yY2VG''@;'; put 'put ''dWxsQ2FsY3VsYXRpb24iOmsub3B0cy5GdWxsQ2FsYz1QbjticmVhaztjYXNlIldzQm9vbCI6UG4uZkRpYWxvZyYmKFFbIiF0eXBlIl09ImRpYWxvZyIpLFBuLmZCZWxvd3x8KChRWyIhb3V0bGluZSJdfHwoUVsiIW91dGxpbmUiXT17fSkpLmFib3ZlPSEwKSxQbi5mUmlnaHR8fCgoUVsiIW91''@;'; put 'put ''dGxpbmUiXXx8KFFbIiFvdXRsaW5lIl09e30pKS5sZWZ0PSEwKTticmVhaztjYXNlIlhGIjpQbi5mb250PVhuLkZvbnRzW1BuLmlmbnQ8ND9Qbi5pZm50OlBuLmlmbnQtMV0sVG4ucHVzaChQbik7YnJlYWs7Y2FzZSJTdXBCb29rIjpGbi5wdXNoKFtQbl0pLEZuW0ZuLmxlbmd0aC0xXS5YVEk9''@;'; put 'put ''W107YnJlYWs7Y2FzZSJFeHRlcm5OYW1lIjpGbltGbi5sZW5ndGgtMV0ucHVzaChQbik7YnJlYWs7Y2FzZSJMYmwiOmlhPXtOYW1lOlBuLk5hbWUsUmVmOnMwKFBuLnJnY2UsZ2UsbnVsbCxGbixlcil9LFBuLml0YWI+MCYmKGlhLlNoZWV0PVBuLml0YWItMSksRm4ubmFtZXMucHVzaChpYSks''@;'; put 'put ''Rm5bMF18fChGblswXT1bXSxGblswXS5YVEk9W10pLEZuW0ZuLmxlbmd0aC0xXS5wdXNoKFBuKSwiX3hsbm0uX0ZpbHRlckRhdGFiYXNlIj09UG4uTmFtZSYmUG4uaXRhYj4wJiZQbi5yZ2NlJiZQbi5yZ2NlWzBdJiZQbi5yZ2NlWzBdWzBdJiYiUHRnQXJlYTNkIj09UG4ucmdjZVswXVswXVsw''@;'; put 'put ''XSYmKHNvW1BuLml0YWItMV09e3JlZjpyYShQbi5yZ2NlWzBdWzBdWzFdWzJdKX0pO2JyZWFrO2Nhc2UiRXh0ZXJuQ291bnQiOmVyLkV4dGVybkNvdW50PVBuO2JyZWFrO2Nhc2UiRXh0ZXJuU2hlZXQiOjA9PUZuLmxlbmd0aCYmKEZuWzBdPVtdLEZuWzBdLlhUST1bXSksRm5bRm4ubGVuZ3Ro''@;'; put 'put ''LTFdLlhUST1GbltGbi5sZW5ndGgtMV0uWFRJLmNvbmNhdChQbiksRm4uWFRJPUZuLlhUSS5jb25jYXQoUG4pO2JyZWFrO2Nhc2UiTmFtZUNtdCI6aWYoZXIuYmlmZjw4KWJyZWFrO251bGwhPWlhJiYoaWEuQ29tbWVudD1QblsxXSk7YnJlYWs7Y2FzZSJQcm90ZWN0IjpRWyIhcHJvdGVjdCJd''@;'; put 'put ''PVBuO2JyZWFrO2Nhc2UiUGFzc3dvcmQiOjAhPT1QbiYmZXIuV1RGJiZjb25zb2xlLmVycm9yKCJQYXNzd29yZCB2ZXJpZmllcjogIitQbik7YnJlYWs7Y2FzZSJCb3VuZFNoZWV0OCI6b2VbUG4ucG9zXT1Qbixlci5zbmFtZXMucHVzaChQbi5uYW1lKTticmVhaztjYXNlIkVPRiI6aWYoUVsi''@;'; put 'put ''IWdyaWRsaW5lcyJdPSFNaXx8TWkuZ3JpZCxNaT1udWxsLC0tWmkpYnJlYWs7aWYoZ2UuZSl7aWYoZ2UuZS5yPjAmJmdlLmUuYz4wKXtpZihnZS5lLnItLSxnZS5lLmMtLSxRWyIhcmVmIl09cmEoZ2UpLFIuc2hlZXRSb3dzJiZSLnNoZWV0Um93czw9Z2UuZS5yKXt2YXIgUWw9Z2UuZS5yO2dl''@;'; put 'put ''LmUucj1SLnNoZWV0Um93cy0xLFFbIiFmdWxscmVmIl09UVsiIXJlZiJdLFFbIiFyZWYiXT1yYShnZSksZ2UuZS5yPVFsfWdlLmUucisrLGdlLmUuYysrfW5hLmxlbmd0aD4wJiYoUVsiIW1lcmdlcyJdPW5hKSxjYS5sZW5ndGg+MCYmeEkoY2EsUSxYbiksTGkubGVuZ3RoPjAmJihRWyIhY29s''@;'; put 'put ''cyJdPUxpKSxrci5sZW5ndGg+MCYmKFFbIiFyb3dzIl09a3IpLFNuLlNoZWV0cy5wdXNoKGxyKX0iIj09PVBlP05lPVE6R1tQZV09USxRPVIuZGVuc2U/W106e307YnJlYWs7Y2FzZSJCT0YiOmlmKDg9PT1lci5iaWZmJiYoZXIuYmlmZj17OToyLDUyMTozLDEwMzM6NH1baG9dfHx7NTEyOjIs''@;'; put 'put ''NzY4OjMsMTAyNDo0LDEyODA6NSwxNTM2OjgsMjoyLDc6Mn1bUG4uQklGRlZlcl18fDgpLGVyLmJpZmZndWVzcz0wPT1Qbi5CSUZGVmVyLDA9PVBuLkJJRkZWZXImJjQwOTY9PVBuLmR0JiYoZXIuYmlmZj01LExvPSEwLFUoZXIuY29kZXBhZ2U9Mjg1OTEpKSw4PT1lci5iaWZmJiYwPT1Qbi5C''@;'; put 'put ''SUZGVmVyJiYxNj09UG4uZHQmJihlci5iaWZmPTIpLFppKyspYnJlYWs7aWYoUT1SLmRlbnNlP1tdOnt9LGVyLmJpZmY8OCYmIUxvJiYoTG89ITAsVShlci5jb2RlcGFnZT1SLmNvZGVwYWdlfHwxMjUyKSksZXIuYmlmZjw1fHwwPT1Qbi5CSUZGVmVyJiY0MDk2PT1Qbi5kdCl7IiI9PT1QZSYm''@;'; put 'put ''KFBlPSJTaGVldDEiKSxnZT17czp7cjowLGM6MH0sZTp7cjowLGM6MH19O3ZhciBZbD17cG9zOlMubC1KYSxuYW1lOlBlfTtvZVtZbC5wb3NdPVlsLGVyLnNuYW1lcy5wdXNoKFBlKX1lbHNlIFBlPShvZVtPYV18fHtuYW1lOiIifSkubmFtZTszMj09UG4uZHQmJihRWyIhdHlwZSJdPSJjaGFy''@;'; put 'put ''dCIpLDY0PT1Qbi5kdCYmKFFbIiF0eXBlIl09Im1hY3JvIiksbmE9W10sY2E9W10sZXIuYXJyYXlmPWt0PVtdLExpPVtdLGtyPVtdLF9yPSExLGxyPXtIaWRkZW46KG9lW09hXXx8e2hzOjB9KS5ocyxuYW1lOlBlfTticmVhaztjYXNlIk51bWJlciI6Y2FzZSJCSUZGMk5VTSI6Y2FzZSJCSUZG''@;'; put 'put ''MklOVCI6ImNoYXJ0Ij09UVsiIXR5cGUiXSYmKFIuZGVuc2U/KFFbUG4ucl18fFtdKVtQbi5jXTpRW3FpKHtjOlBuLmMscjpQbi5yfSldKSYmKytQbi5jLE90PXtpeGZlOlBuLml4ZmUsWEY6VG5bUG4uaXhmZV18fHt9LHY6UG4udmFsLHQ6Im4ifSx5aT4wJiYoT3Quej1fYVtPdC5peGZlPj44''@;'; put 'put ''JjYzXSksZGgoT3QsUixrLm9wdHMuRGF0ZTE5MDQpLGJyKHtjOlBuLmMscjpQbi5yfSxPdCxSKTticmVhaztjYXNlIkJvb2xFcnIiOk90PXtpeGZlOlBuLml4ZmUsWEY6VG5bUG4uaXhmZV0sdjpQbi52YWwsdDpQbi50fSx5aT4wJiYoT3Quej1fYVtPdC5peGZlPj44JjYzXSksZGgoT3QsUixr''@;'; put 'put ''Lm9wdHMuRGF0ZTE5MDQpLGJyKHtjOlBuLmMscjpQbi5yfSxPdCxSKTticmVhaztjYXNlIlJLIjpPdD17aXhmZTpQbi5peGZlLFhGOlRuW1BuLml4ZmVdLHY6UG4ucmtudW0sdDoibiJ9LHlpPjAmJihPdC56PV9hW090Lml4ZmU+PjgmNjNdKSxkaChPdCxSLGsub3B0cy5EYXRlMTkwNCksYnIo''@;'; put 'put ''e2M6UG4uYyxyOlBuLnJ9LE90LFIpO2JyZWFrO2Nhc2UiTXVsUmsiOmZvcih2YXIgR2w9UG4uYztHbDw9UG4uQzsrK0dsKXt2YXIgeXU9UG4ucmtyZWNbR2wtUG4uY11bMF07T3Q9e2l4ZmU6eXUsWEY6VG5beXVdLHY6UG4ucmtyZWNbR2wtUG4uY11bMV0sdDoibiJ9LHlpPjAmJihPdC56PV9h''@;'; put 'put ''W090Lml4ZmU+PjgmNjNdKSxkaChPdCxSLGsub3B0cy5EYXRlMTkwNCksYnIoe2M6R2wscjpQbi5yfSxPdCxSKX1icmVhaztjYXNlIkZvcm11bGEiOmlmKCJTdHJpbmciPT1Qbi52YWwpe3BlPVBuO2JyZWFrfWlmKChPdD1SOChQbi52YWwsUG4uY2VsbC5peGZlLFBuLnR0KSkuWEY9VG5bT3Qu''@;'; put 'put ''aXhmZV0sUi5jZWxsRm9ybXVsYSl7dmFyIE1sPVBuLmZvcm11bGE7aWYoTWwmJk1sWzBdJiZNbFswXVswXSYmIlB0Z0V4cCI9PU1sWzBdWzBdWzBdKXt2YXIgbG49TWxbMF1bMF1bMV1bMF0sRW49TWxbMF1bMF1bMV1bMV0sVW49cWkoe3I6bG4sYzpFbn0pO2p0W1VuXT9PdC5mPSIiK3MwKFBu''@;'; put 'put ''LmZvcm11bGEsZ2UsUG4uY2VsbCxGbixlcik6T3QuRj0oKFIuZGVuc2U/KFFbbG5dfHxbXSlbRW5dOlFbVW5dKXx8e30pLkZ9ZWxzZSBPdC5mPSIiK3MwKFBuLmZvcm11bGEsZ2UsUG4uY2VsbCxGbixlcil9eWk+MCYmKE90Lno9X2FbT3QuaXhmZT4+OCY2M10pLGRoKE90LFIsay5vcHRzLkRh''@;'; put 'put ''dGUxOTA0KSxicihQbi5jZWxsLE90LFIpLHBlPVBuO2JyZWFrO2Nhc2UiU3RyaW5nIjppZighcGUpdGhyb3cgbmV3IEVycm9yKCJTdHJpbmcgcmVjb3JkIGV4cGVjdHMgRm9ybXVsYSIpO3BlLnZhbD1QbiwoT3Q9UjgoUG4scGUuY2VsbC5peGZlLCJzIikpLlhGPVRuW090Lml4ZmVdLFIuY2Vs''@;'; put 'put ''bEZvcm11bGEmJihPdC5mPSIiK3MwKHBlLmZvcm11bGEsZ2UscGUuY2VsbCxGbixlcikpLHlpPjAmJihPdC56PV9hW090Lml4ZmU+PjgmNjNdKSxkaChPdCxSLGsub3B0cy5EYXRlMTkwNCksYnIocGUuY2VsbCxPdCxSKSxwZT1udWxsO2JyZWFrO2Nhc2UiQXJyYXkiOmt0LnB1c2goUG4pO3Zh''@;'; put 'put ''ciB4aT1xaShQblswXS5zKTtpZihjdD1SLmRlbnNlPyhRW1BuWzBdLnMucl18fFtdKVtQblswXS5zLmNdOlFbeGldLFIuY2VsbEZvcm11bGEmJmN0KXtpZighcGV8fCF4aXx8IWN0KWJyZWFrO2N0LmY9IiIrczAoUG5bMV0sZ2UsUG5bMF0sRm4sZXIpLGN0LkY9cmEoUG5bMF0pfWJyZWFrO2Nh''@;'; put 'put ''c2UiU2hyRm1sYSI6aWYoIVIuY2VsbEZvcm11bGEpYnJlYWs7aWYoZXQpe2lmKCFwZSlicmVhaztqdFtxaShwZS5jZWxsKV09UG5bMF0sKChjdD1SLmRlbnNlPyhRW3BlLmNlbGwucl18fFtdKVtwZS5jZWxsLmNdOlFbcWkocGUuY2VsbCldKXx8e30pLmY9IiIrczAoUG5bMF0sZ2UsWWUsRm4s''@;'; put 'put ''ZXIpfWJyZWFrO2Nhc2UiTGFiZWxTc3QiOk90PVI4KHllW1BuLmlzc3RdLnQsUG4uaXhmZSwicyIpLHllW1BuLmlzc3RdLmgmJihPdC5oPXllW1BuLmlzc3RdLmgpLE90LlhGPVRuW090Lml4ZmVdLHlpPjAmJihPdC56PV9hW090Lml4ZmU+PjgmNjNdKSxkaChPdCxSLGsub3B0cy5EYXRlMTkw''@;'; put 'put ''NCksYnIoe2M6UG4uYyxyOlBuLnJ9LE90LFIpLHllW1BuLmlzc3RdLlImJihPdC5SPXllW1BuLmlzc3RdLlIubWFwKGZ1bmN0aW9uKG1hKXt2YXIgRGk9cXQobWEpO3JldHVybiBtYS5zPT1Ybi5Gb250c1swXSYmKERpLnM9T3QucyksRGl9KSk7YnJlYWs7Y2FzZSJCbGFuayI6Ui5zaGVldFN0''@;'; put 'put ''dWJzJiYoT3Q9e2l4ZmU6UG4uaXhmZSxYRjpUbltQbi5peGZlXSx0OiJ6In0seWk+MCYmKE90Lno9X2FbT3QuaXhmZT4+OCY2M10pLGRoKE90LFIsay5vcHRzLkRhdGUxOTA0KSxicih7YzpQbi5jLHI6UG4ucn0sT3QsUikpO2JyZWFrO2Nhc2UiTXVsQmxhbmsiOmlmKFIuc2hlZXRTdHVicylm''@;'; put 'put ''b3IodmFyIG9yPVBuLmM7b3I8PVBuLkM7Kytvcil7dmFyIE9pPVBuLml4ZmVbb3ItUG4uY107T3Q9e2l4ZmU6T2ksWEY6VG5bT2ldLHQ6InoifSx5aT4wJiYoT3Quej1fYVtPdC5peGZlPj44JjYzXSksZGgoT3QsUixrLm9wdHMuRGF0ZTE5MDQpLGJyKHtjOm9yLHI6UG4ucn0sT3QsUil9YnJl''@;'; put 'put ''YWs7Y2FzZSJSU3RyaW5nIjpjYXNlIkxhYmVsIjpjYXNlIkJJRkYyU1RSIjooT3Q9UjgoUG4udmFsLFBuLml4ZmUsInMiKSkuWEY9VG5bT3QuaXhmZV0seWk+MCYmKE90Lno9X2FbT3QuaXhmZT4+OCY2M10pLGRoKE90LFIsay5vcHRzLkRhdGUxOTA0KSxicih7YzpQbi5jLHI6UG4ucn0sT3Qs''@;'; put 'put ''Uik7YnJlYWs7Y2FzZSJEaW1lbnNpb25zIjoxPT09WmkmJihnZT1Qbik7YnJlYWs7Y2FzZSJTU1QiOih5ZT1QbikuZm9yRWFjaChmdW5jdGlvbihtYSl7bWEuX1I/KG1hLl9SWzBdJiZtYS5fUlswXS5pZHg+MCYmbWEuX1IudW5zaGlmdCh7aWR4OjAsaWZudDowfSksbWEuUj1tYS5fUi5tYXAo''@;'; put 'put ''ZnVuY3Rpb24oRGksY3Mpe3JldHVybnt0OiJzIix2Om1hLnQuc2xpY2UoRGkuaWR4LChtYS5fUltjcysxXXx8e30pLmlkeCksczpYbi5Gb250c1tEaS5pZm50PDQ/RGkuaWZudDpEaS5pZm50LTFdfX0pLFIuY2VsbEhUTUwmJihtYS5oPVZ1KG1hLlIpKSk6Ui5jZWxsSFRNTCYmKG1hLmg9bGEo''@;'; put 'put ''bWEudCkpLGRlbGV0ZSBtYS5fUn0pO2JyZWFrO2Nhc2UiRm9ybWF0IjppZig0PT1lci5iaWZmKXtfYVt5aSsrXT1QblsxXTtmb3IodmFyIFNyPTA7U3I8eWkrMTYzJiZBLl90YWJsZVtTcl0hPVBuWzFdOysrU3IpO1NyPj0xNjMmJkEubG9hZChQblsxXSx5aSsxNjMpfWVsc2UgQS5sb2FkKFBu''@;'; put 'put ''WzFdLFBuWzBdKTticmVhaztjYXNlIkJJRkYyRk9STUFUIjpfYVt5aSsrXT1Qbjtmb3IodmFyIFBpPTA7UGk8eWkrMTYzJiZBLl90YWJsZVtQaV0hPVBuOysrUGkpO1BpPj0xNjMmJkEubG9hZChQbix5aSsxNjMpO2JyZWFrO2Nhc2UiTWVyZ2VDZWxscyI6bmE9bmEuY29uY2F0KFBuKTticmVh''@;'; put 'put ''aztjYXNlIk9iaiI6Y2FbUG4uY21vWzBdXT1lci5sYXN0b2JqPVBuO2JyZWFrO2Nhc2UiVHhPIjplci5sYXN0b2JqLlR4Tz1QbjticmVhaztjYXNlIkltRGF0YSI6ZXIubGFzdG9iai5JbURhdGE9UG47YnJlYWs7Y2FzZSJITGluayI6Zm9yKGJ0PVBuWzBdLnMucjtidDw9UG5bMF0uZS5yOysr''@;'; put 'put ''YnQpZm9yKGF0PVBuWzBdLnMuYzthdDw9UG5bMF0uZS5jOysrYXQpKGN0PVIuZGVuc2U/KFFbYnRdfHxbXSlbYXRdOlFbcWkoe2M6YXQscjpidH0pXSkmJihjdC5sPVBuWzFdKTticmVhaztjYXNlIkhMaW5rVG9vbHRpcCI6Zm9yKGJ0PVBuWzBdLnMucjtidDw9UG5bMF0uZS5yOysrYnQpZm9y''@;'; put 'put ''KGF0PVBuWzBdLnMuYzthdDw9UG5bMF0uZS5jOysrYXQpKGN0PVIuZGVuc2U/KFFbYnRdfHxbXSlbYXRdOlFbcWkoe2M6YXQscjpidH0pXSkmJmN0LmwmJihjdC5sLlRvb2x0aXA9UG5bMV0pO2JyZWFrO2Nhc2UiTm90ZSI6aWYoZXIuYmlmZjw9NSYmZXIuYmlmZj49MilicmVhaztjdD1SLmRl''@;'; put 'put ''bnNlPyhRW1BuWzBdLnJdfHxbXSlbUG5bMF0uY106UVtxaShQblswXSldO3ZhciBaYT1jYVtQblsyXV07Y3R8fChSLmRlbnNlPyhRW1BuWzBdLnJdfHwoUVtQblswXS5yXT1bXSksY3Q9UVtQblswXS5yXVtQblswXS5jXT17dDoieiJ9KTpjdD1RW3FpKFBuWzBdKV09e3Q6InoifSxnZS5lLnI9''@;'; put 'put ''TWF0aC5tYXgoZ2UuZS5yLFBuWzBdLnIpLGdlLnMucj1NYXRoLm1pbihnZS5zLnIsUG5bMF0uciksZ2UuZS5jPU1hdGgubWF4KGdlLmUuYyxQblswXS5jKSxnZS5zLmM9TWF0aC5taW4oZ2Uucy5jLFBuWzBdLmMpKSxjdC5jfHwoY3QuYz1bXSksY3QuYy5wdXNoKHthOlBuWzFdLHQ6WmEuVHhP''@;'; put 'put ''LnR9KTticmVhaztkZWZhdWx0OnN3aXRjaChCaS5uKXtjYXNlIkNscnRDbGllbnQiOmNhc2UiSGVhZGVyIjpjYXNlIkZvb3RlciI6Y2FzZSJIQ2VudGVyIjpjYXNlIlZDZW50ZXIiOmNhc2UiUGxzIjpjYXNlIkdDVyI6Y2FzZSJMSFJlY29yZCI6Y2FzZSJEQkNlbGwiOmNhc2UiRW50RXhVMiI6''@;'; put 'put ''Y2FzZSJTeFZpZXciOmNhc2UiU3h2ZCI6Y2FzZSJTWFZJIjpjYXNlIlNYVkRFeCI6Y2FzZSJTeEl2ZCI6Y2FzZSJTWFN0cmluZyI6Y2FzZSJTeW5jIjpjYXNlIkFkZGluIjpjYXNlIlNYREkiOmNhc2UiU1hMSSI6Y2FzZSJTWEV4IjpjYXNlIlFzaVNYVGFnIjpjYXNlIkZlYXQiOmNhc2UiRmVh''@;'; put 'put ''dEhkciI6Y2FzZSJGZWF0SGRyMTEiOmNhc2UiRmVhdHVyZTExIjpjYXNlIkZlYXR1cmUxMiI6Y2FzZSJMaXN0MTIiOmNhc2UiUmVjYWxjSWQiOmNhc2UiRHhHQ29sIjpjYXNlIkZiaSI6Y2FzZSJGYmkyIjpjYXNlIkdlbEZyYW1lIjpjYXNlIlhGQ1JDIjpjYXNlIlN0eWxlIjpjYXNlIlN0eWxl''@;'; put 'put ''RXh0IjpjYXNlIlNjZW5hcmlvUHJvdGVjdCI6Y2FzZSJPYmpQcm90ZWN0IjpjYXNlIkNvbmRGbXQxMiI6Y2FzZSJUYWJsZSI6Y2FzZSJUYWJsZVN0eWxlcyI6Y2FzZSJUYWJsZVN0eWxlIjpjYXNlIlRhYmxlU3R5bGVFbGVtZW50IjpjYXNlIlNYU3RyZWFtSUQiOmNhc2UiU1hWUyI6Y2FzZSJE''@;'; put 'put ''Q29uUmVmIjpjYXNlIlNYQWRkbCI6Y2FzZSJEQ29uQmluIjpjYXNlIkRDb25OYW1lIjpjYXNlIlNYUEkiOmNhc2UiU3hGb3JtYXQiOmNhc2UiU3hTZWxlY3QiOmNhc2UiU3hSdWxlIjpjYXNlIlN4RmlsdCI6Y2FzZSJTeEl0bSI6Y2FzZSJTeERYRiI6Y2FzZSJTY2VuTWFuIjpjYXNlIkRDb24i''@;'; put 'put ''OmNhc2UiQ2VsbFdhdGNoIjpjYXNlIlByaW50Um93Q29sIjpjYXNlIlByaW50R3JpZCI6Y2FzZSJQcmludFNpemUiOmNhc2UiWENUIjpjYXNlIkNSTiI6Y2FzZSJTY2wiOmNhc2UiU2hlZXRFeHQiOmNhc2UiU2hlZXRFeHRPcHRpb25hbCI6Y2FzZSJPYk5vTWFjcm9zIjpjYXNlIk9iUHJvaiI6''@;'; put 'put ''Y2FzZSJHVUlEVHlwZUxpYiI6Y2FzZSJXT3B0IjpjYXNlIlBob25ldGljSW5mbyI6Y2FzZSJPbGVPYmplY3RTaXplIjpjYXNlIkRYRiI6Y2FzZSJEWEZOIjpjYXNlIkRYRk4xMiI6Y2FzZSJEWEZOMTJMaXN0IjpjYXNlIkRYRk4xMk5vQ0IiOmNhc2UiRHYiOmNhc2UiRFZhbCI6Y2FzZSJCUkFJ''@;'; put 'put ''IjpjYXNlIlNlcmllcyI6Y2FzZSJTZXJpZXNUZXh0IjpjYXNlIkRDb25uIjpjYXNlIkRiT3JQYXJhbVFyeSI6Y2FzZSJEQlF1ZXJ5RXh0IjpjYXNlIk9sZURiQ29ubiI6Y2FzZSJFeHRTdHJpbmciOmNhc2UiSUZtdFJlY29yZCI6Y2FzZSJDb25kRm10IjpjYXNlIkNGIjpjYXNlIkNGMTIiOmNh''@;'; put 'put ''c2UiQ0ZFeCI6Y2FzZSJFeGNlbDlGaWxlIjpjYXNlIlVuaXRzIjpjYXNlIkludGVyZmFjZUhkciI6Y2FzZSJNbXMiOmNhc2UiSW50ZXJmYWNlRW5kIjpjYXNlIkRTRiI6Y2FzZSJCdWlsdEluRm5Hcm91cENvdW50IjpjYXNlIldpbmRvdzEiOmNhc2UiSGlkZU9iaiI6Y2FzZSJHcmlkU2V0Ijpj''@;'; put 'put ''YXNlIkd1dHMiOmNhc2UiVXNlckJWaWV3IjpjYXNlIlVzZXJTVmlld0JlZ2luIjpjYXNlIlVzZXJTVmlld0VuZCI6Y2FzZSJEZWZDb2xXaWR0aCI6Y2FzZSJEZWZhdWx0Um93SGVpZ2h0IjpicmVhaztjYXNlIlhGRXh0IjpQayhUbltQbi5peGZlXSxQbi5leHQpO2JyZWFrO2Nhc2UiQ29sSW5m''@;'; put 'put ''byI6aWYoIWVyLmNlbGxTdHlsZXMpYnJlYWs7Zm9yKDtQbi5lPj1Qbi5zOylMaVtQbi5lLS1dPXt3aWR0aDpQbi53LzI1NixsZXZlbDpQbi5sZXZlbHx8MCxoaWRkZW46ISEoMSZQbi5mbGFncyl9LF9yfHwoX3I9ITApLFEwKExpW1BuLmUrMV0pO2JyZWFrO2Nhc2UiUm93Ijp2YXIgSGk9e307''@;'; put 'put ''bnVsbCE9UG4ubGV2ZWwmJihrcltQbi5yXT1IaSxIaS5sZXZlbD1Qbi5sZXZlbCksUG4uaGlkZGVuJiYoa3JbUG4ucl09SGksSGkuaGlkZGVuPSEwKSxQbi5ocHQmJihrcltQbi5yXT1IaSxIaS5ocHQ9UG4uaHB0LEhpLmhweD1zaChQbi5ocHQpKSxQbi5peGZlJiYoa3JbUG4ucl09SGksZnIo''@;'; put 'put ''T3Q9e2l4ZmU6UG4uaXhmZSxYRjpUbltQbi5peGZlXXx8e30sdjowLHQ6Im4ifSxSKSxIaS5zPU90LnMpO2JyZWFrO2Nhc2UiTGVmdE1hcmdpbiI6Y2FzZSJSaWdodE1hcmdpbiI6Y2FzZSJUb3BNYXJnaW4iOmNhc2UiQm90dG9tTWFyZ2luIjpRWyIhbWFyZ2lucyJdfHxYMyhRWyIhbWFyZ2lu''@;'; put 'put ''cyJdPXt9KSxRWyIhbWFyZ2lucyJdW1dvLnNsaWNlKDAsLTYpLnRvTG93ZXJDYXNlKCldPVBuO2JyZWFrO2Nhc2UiU2VsZWN0aW9uIjpRWyIhc2VsIl09UG47YnJlYWs7Y2FzZSJTZXR1cCI6UVsiIW1hcmdpbnMiXXx8WDMoUVsiIW1hcmdpbnMiXT17fSksUVsiIW1hcmdpbnMiXS5oZWFkZXI9''@;'; put 'put ''UG4uaGVhZGVyLFFbIiFtYXJnaW5zIl0uZm9vdGVyPVBuLmZvb3RlcjticmVhaztjYXNlIldpbmRvdzIiOlBuLlJUTCYmKFNuLlZpZXdzWzBdLlJUTD0hMCksTWk9UG47YnJlYWs7Y2FzZSJDb3VudHJ5IjpLdD1QbjticmVhaztjYXNlIkZvbnQiOlBuLmljdiYmQm4oUG4uaWN2KSYmKFBuLmNv''@;'; put 'put ''bG9yPXtyZ2I6aGQoQm4oUG4uaWN2KSl9KSxkZWxldGUgUG4uaWN2LDA9PVhuLkZvbnRzLmxlbmd0aCYmSTQoUG4pLFhuLkZvbnRzLnB1c2goUG4pO2JyZWFrO2Nhc2UiUGFsZXR0ZSI6cnI9UG47YnJlYWs7Y2FzZSJUaGVtZSI6Rmk9UG47YnJlYWs7Y2FzZSJDb2RlTmFtZSI6UGU/bHIuQ29k''@;'; put 'put ''ZU5hbWU9UG58fGxyLm5hbWU6U24uV0JQcm9wcy5Db2RlTmFtZT1Qbnx8IlRoaXNXb3JrYm9vayI7YnJlYWs7Y2FzZSJQYW5lIjooTWl8fHt9KS5mcm96ZW4mJihRWyIhZnJlZXplIl09cWkoe3I6UG4ueXx8MCxjOlBuLnh8fDB9KSk7YnJlYWs7ZGVmYXVsdDpzd2l0Y2goQmkubil7Y2FzZSJE''@;'; put 'put ''YXQiOmNhc2UiQmVnaW4iOmNhc2UiRW5kIjpjYXNlIlN0YXJ0QmxvY2siOmNhc2UiRW5kQmxvY2siOmNhc2UiRnJhbWUiOmNhc2UiQXJlYSI6Y2FzZSJBeGlzIjpjYXNlIkF4aXNMaW5lIjpjYXNlIlRpY2siOmNhc2UiQXhlc1VzZWQiOmNhc2UiQ3J0TGF5b3V0MTIiOmNhc2UiQ3J0TGF5b3V0''@;'; put 'put ''MTJBIjpjYXNlIkNydExpbmsiOmNhc2UiQ3J0TGluZSI6Y2FzZSJDcnRNbEZydCI6Y2FzZSJDcnRNbEZydENvbnRpbnVlIjpjYXNlIkxpbmVGb3JtYXQiOmNhc2UiQXJlYUZvcm1hdCI6Y2FzZSJDaGFydCI6Y2FzZSJDaGFydDNkIjpjYXNlIkNoYXJ0M0RCYXJTaGFwZSI6Y2FzZSJDaGFydEZv''@;'; put 'put ''cm1hdCI6Y2FzZSJDaGFydEZydEluZm8iOmNhc2UiUGxvdEFyZWEiOmNhc2UiUGxvdEdyb3d0aCI6Y2FzZSJTZXJpZXNMaXN0IjpjYXNlIlNlclBhcmVudCI6Y2FzZSJTZXJBdXhUcmVuZCI6Y2FzZSJEYXRhRm9ybWF0IjpjYXNlIlNlclRvQ3J0IjpjYXNlIkZvbnRYIjpjYXNlIkNhdFNlclJh''@;'; put 'put ''bmdlIjpjYXNlIkF4Y0V4dCI6Y2FzZSJTZXJGbXQiOmNhc2UiU2h0UHJvcHMiOmNhc2UiRGVmYXVsdFRleHQiOmNhc2UiVGV4dCI6Y2FzZSJDYXRMYWIiOmNhc2UiRGF0YUxhYkV4dENvbnRlbnRzIjpjYXNlIkxlZ2VuZCI6Y2FzZSJMZWdlbmRFeGNlcHRpb24iOmNhc2UiUGllIjpjYXNlIlNj''@;'; put 'put ''YXR0ZXIiOmNhc2UiUGllRm9ybWF0IjpjYXNlIk1hcmtlckZvcm1hdCI6Y2FzZSJTdGFydE9iamVjdCI6Y2FzZSJFbmRPYmplY3QiOmNhc2UiQWxSdW5zIjpjYXNlIk9iamVjdExpbmsiOmNhc2UiU0lJbmRleCI6Y2FzZSJBdHRhY2hlZExhYmVsIjpjYXNlIllNdWx0IjpjYXNlIkxpbmUiOmNh''@;'; put 'put ''c2UiQmFyIjpjYXNlIlN1cmYiOmNhc2UiQXhpc1BhcmVudCI6Y2FzZSJQb3MiOmNhc2UiVmFsdWVSYW5nZSI6Y2FzZSJTWFZpZXdFeDkiOmNhc2UiU1hWaWV3TGluayI6Y2FzZSJQaXZvdENoYXJ0Qml0cyI6Y2FzZSJTQmFzZVJlZiI6Y2FzZSJUZXh0UHJvcHNTdHJlYW0iOmNhc2UiTG5FeHQi''@;'; put 'put ''OmNhc2UiTWtyRXh0IjpjYXNlIkNydENvb3B0IjpjYXNlIlFzaSI6Y2FzZSJRc2lmIjpjYXNlIlFzaXIiOmNhc2UiUXNpU1hUYWciOmNhc2UiVHh0UXJ5IjpjYXNlIkZpbHRlck1vZGUiOmNhc2UiQXV0b0ZpbHRlciI6Y2FzZSJBdXRvRmlsdGVySW5mbyI6Y2FzZSJBdXRvRmlsdGVyMTIiOmNh''@;'; put 'put ''c2UiRHJvcERvd25PYmpJZHMiOmNhc2UiU29ydCI6Y2FzZSJTb3J0RGF0YSI6Y2FzZSJTaGFwZVByb3BzU3RyZWFtIjpjYXNlIk1zb0RyYXdpbmciOmNhc2UiTXNvRHJhd2luZ0dyb3VwIjpjYXNlIk1zb0RyYXdpbmdTZWxlY3Rpb24iOmNhc2UiV2ViUHViIjpjYXNlIkF1dG9XZWJQdWIiOmNh''@;'; put 'put ''c2UiSGVhZGVyRm9vdGVyIjpjYXNlIkhGUGljdHVyZSI6Y2FzZSJQTFYiOmNhc2UiSG9yaXpvbnRhbFBhZ2VCcmVha3MiOmNhc2UiVmVydGljYWxQYWdlQnJlYWtzIjpjYXNlIkJhY2t1cCI6Y2FzZSJDb21wcmVzc1BpY3R1cmVzIjpjYXNlIkNvbXBhdDEyIjpjYXNlIkNvbnRpbnVlIjpjYXNl''@;'; put 'put ''IkNvbnRpbnVlRnJ0MTIiOmNhc2UiRnJ0Rm9udExpc3QiOmNhc2UiRnJ0V3JhcHBlciI6YnJlYWs7ZGVmYXVsdDpzd2l0Y2goQmkubil7Y2FzZSJUYWJJZENvbmYiOmNhc2UiUmFkYXIiOmNhc2UiUmFkYXJBcmVhIjpjYXNlIkRyb3BCYXIiOmNhc2UiSW50bCI6Y2FzZSJDb29yZExpc3QiOmNh''@;'; put 'put ''c2UiU2VyQXV4RXJyQmFyIjpjYXNlIkJJRkYyRk9OVENMUiI6Y2FzZSJCSUZGMkZNVENOVCI6Y2FzZSJCSUZGMkZPTlRYVFJBIjpjYXNlIkJJRkYyWEYiOmNhc2UiQklGRjNYRiI6Y2FzZSJCSUZGNFhGIjpjYXNlIkJJRkYyWEZJTkRFWCI6Y2FzZSJCSUZGNEZNVENOVCI6Y2FzZSJCSUZGMlJP''@;'; put 'put ''VyI6Y2FzZSJCSUZGMldJTkRPVzIiOmNhc2UiU0NFTkFSSU8iOmNhc2UiRENvbkJpbiI6Y2FzZSJQaWNGIjpjYXNlIkRhdGFMYWJFeHQiOmNhc2UiTGVsIjpjYXNlIkJvcFBvcCI6Y2FzZSJCb3BQb3BDdXN0b20iOmNhc2UiUmVhbFRpbWVEYXRhIjpjYXNlIk5hbWUiOmNhc2UiTEhOR3JhcGgi''@;'; put 'put ''OmNhc2UiRm5Hcm91cE5hbWUiOmNhc2UiQWRkTWVudSI6Y2FzZSJMUHIiOmNhc2UiTGlzdE9iaiI6Y2FzZSJMaXN0RmllbGQiOmNhc2UiUlJTb3J0IjpjYXNlIkJpZ05hbWUiOmNhc2UiVG9vbGJhckhkciI6Y2FzZSJUb29sYmFyRW5kIjpjYXNlIkRERU9iak5hbWUiOmNhc2UiRlJUQXJjaElk''@;'; put 'put ''JCI6YnJlYWs7ZGVmYXVsdDppZihSLldURil0aHJvdyJVbnJlY29nbml6ZWQgUmVjb3JkICIrQmkubn19fX19ZWxzZSBTLmwrPUphLGVyJiZlci5lbmMmJmVyLmVuYy5pbnNpdHUmJmVyLmVuYy5pbnNpdHUoU2Uoe2xlbmd0aDpKYX0pKX1yZXR1cm4gay5TaGVldE5hbWVzPU9lKG9lKS5zb3J0''@;'; put 'put ''KGZ1bmN0aW9uKG1hLERpKXtyZXR1cm4gTnVtYmVyKG1hKS1OdW1iZXIoRGkpfSkubWFwKGZ1bmN0aW9uKG1hKXtyZXR1cm4gb2VbbWFdLm5hbWV9KSxSLmJvb2tTaGVldHN8fChrLlNoZWV0cz1HKSwhay5TaGVldE5hbWVzLmxlbmd0aCYmTmVbIiFyZWYiXT8oay5TaGVldE5hbWVzLnB1c2go''@;'; put 'put ''IlNoZWV0MSIpLGsuU2hlZXRzJiYoay5TaGVldHMuU2hlZXQxPU5lKSk6ay5QcmVhbWJsZT1OZSxrLlNoZWV0cyYmc28uZm9yRWFjaChmdW5jdGlvbihtYSxEaSl7ay5TaGVldHNbay5TaGVldE5hbWVzW0RpXV1bIiFhdXRvZmlsdGVyIl09bWF9KSxrLlN0cmluZ3M9eWUsay5TU0Y9QS5nZXRf''@;'; put 'put ''dGFibGUoKSxlci5lbmMmJihrLkVuY3J5cHRpb249ZXIuZW5jKSxGaSYmKGsuVGhlbWVzPUZpKSxrLk1ldGFkYXRhPXt9LHZvaWQgMCE9PUt0JiYoay5NZXRhZGF0YS5Db3VudHJ5PUt0KSxGbi5uYW1lcy5sZW5ndGg+MCYmKFNuLk5hbWVzPUZuLm5hbWVzKSxrLldvcmtib29rPVNuLGt9KEcu''@;'; put 'put ''Y29udGVudCxSKTtlbHNlIGlmKChvZT12ZS5maW5kKFMsIlBlcmZlY3RPZmZpY2VfTUFJTiIpKSYmb2UuY29udGVudClRPUl2LnRvX3dvcmtib29rKG9lLmNvbnRlbnQsKFIudHlwZT1nZSxSKSk7ZWxzZXtpZighKG9lPXZlLmZpbmQoUywiTmF0aXZlQ29udGVudF9NQUlOIikpfHwhb2UuY29u''@;'; put 'put ''dGVudCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBmaW5kIFdvcmtib29rIHN0cmVhbSIpO1E9SXYudG9fd29ya2Jvb2sob2UuY29udGVudCwoUi50eXBlPWdlLFIpKX1SLmJvb2tWQkEmJlMuRnVsbFBhdGhzJiZ2ZS5maW5kKFMsIi9fVkJBX1BST0pFQ1RfQ1VSL1ZCQS9kaXIiKSYmKFEudmJh''@;'; put 'put ''cmF3PWZ1bmN0aW9uIFprKFMpe3ZhciBSPXZlLnV0aWxzLmNmYl9uZXcoe3Jvb3Q6IlIifSk7cmV0dXJuIFMuRnVsbFBhdGhzLmZvckVhY2goZnVuY3Rpb24oayxHKXtpZigiLyIhPT1rLnNsaWNlKC0xKSYmay5tYXRjaCgvX1ZCQV9QUk9KRUNUX0NVUi8pKXt2YXIgUT1rLnJlcGxhY2UoL15b''@;'; put 'put ''XlwvXSovLCJSIikucmVwbGFjZSgvXC9fVkJBX1BST0pFQ1RfQ1VSXHUwMDAwKi8sIiIpO3ZlLnV0aWxzLmNmYl9hZGQoUixRLFMuRmlsZUluZGV4W0ddLmNvbnRlbnQpfX0pLHZlLndyaXRlKFIpfShTKSl9dmFyIHBlPXt9O3JldHVybiBTLkZ1bGxQYXRocyYmZnVuY3Rpb24gQm5lKFMsUixr''@;'; put 'put ''KXt2YXIgRz12ZS5maW5kKFMsIiFEb2N1bWVudFN1bW1hcnlJbmZvcm1hdGlvbiIpO2lmKEcmJkcuc2l6ZT4wKXRyeXt2YXIgUT1qNihHLG00LFRiLkRTSSk7Zm9yKHZhciBvZSBpbiBRKVJbb2VdPVFbb2VdfWNhdGNoKFBlKXtpZihrLldURil0aHJvdyBQZX12YXIgZ2U9dmUuZmluZChTLCIh''@;'; put 'put ''U3VtbWFyeUluZm9ybWF0aW9uIik7aWYoZ2UmJmdlLnNpemU+MCl0cnl7dmFyIHBlPWo2KGdlLGQ1LFRiLlNJKTtmb3IodmFyIHllIGluIHBlKW51bGw9PVJbeWVdJiYoUlt5ZV09cGVbeWVdKX1jYXRjaChQZSl7aWYoay5XVEYpdGhyb3cgUGV9Ui5IZWFkaW5nUGFpcnMmJlIuVGl0bGVzT2ZQ''@;'; put 'put ''YXJ0cyYmKF80KFIuSGVhZGluZ1BhaXJzLFIuVGl0bGVzT2ZQYXJ0cyxSLGspLGRlbGV0ZSBSLkhlYWRpbmdQYWlycyxkZWxldGUgUi5UaXRsZXNPZlBhcnRzKX0oUyxwZSxSKSxRLlByb3BzPVEuQ3VzdHByb3BzPXBlLFIuYm9va0ZpbGVzJiYoUS5jZmI9UyksUX12YXIgTDg9ezA6e246IkJy''@;'; put 'put ''dFJvd0hkciIsZjpmdW5jdGlvbiBCRChTLFIpe3ZhciBrPXt9LEc9Uy5sK1I7ay5yPVMucmVhZF9zaGlmdCg0KSxTLmwrPTQ7dmFyIFE9Uy5yZWFkX3NoaWZ0KDIpO1MubCs9MTt2YXIgb2U9Uy5yZWFkX3NoaWZ0KDEpO3JldHVybiBTLmw9Ryw3Jm9lJiYoay5sZXZlbD03Jm9lKSwxNiZvZSYm''@;'; put 'put ''KGsuaGlkZGVuPSEwKSwzMiZvZSYmKGsuaHB0PVEvMjApLGt9fSwxOntuOiJCcnRDZWxsQmxhbmsiLGY6ZnVuY3Rpb24gRG5lKFMpe3JldHVybltEMShTKV19fSwyOntuOiJCcnRDZWxsUmsiLGY6ZnVuY3Rpb24gSGooUyl7cmV0dXJuW0QxKFMpLEkxKFMpLCJuIl19fSwzOntuOiJCcnRDZWxs''@;'; put 'put ''RXJyb3IiLGY6ZnVuY3Rpb24gWkQoUyl7cmV0dXJuW0QxKFMpLFMucmVhZF9zaGlmdCgxKSwiZSJdfX0sNDp7bjoiQnJ0Q2VsbEJvb2wiLGY6ZnVuY3Rpb24gRGooUyl7cmV0dXJuW0QxKFMpLFMucmVhZF9zaGlmdCgxKSwiYiJdfX0sNTp7bjoiQnJ0Q2VsbFJlYWwiLGY6ZnVuY3Rpb24gRVMo''@;'; put 'put ''Uyl7cmV0dXJuW0QxKFMpLFBsKFMpLCJuIl19fSw2OntuOiJCcnRDZWxsU3QiLGY6ZnVuY3Rpb24gTG5lKFMpe3JldHVybltEMShTKSxndShTKSwic3RyIl19fSw3OntuOiJCcnRDZWxsSXNzdCIsZjpmdW5jdGlvbiBSaihTKXtyZXR1cm5bRDEoUyksUy5yZWFkX3NoaWZ0KDQpLCJzIl19fSw4''@;'; put 'put ''OntuOiJCcnRGbWxhU3RyaW5nIixmOmZ1bmN0aW9uIHBiKFMsUixrKXt2YXIgRz1TLmwrUixRPUQxKFMpO1Eucj1rWyIhcm93Il07dmFyIGdlPVtRLGd1KFMpLCJzdHIiXTtpZihrLmNlbGxGb3JtdWxhKXtTLmwrPTI7dmFyIHBlPXo0KFMsRy1TLmwsayk7Z2VbM109czAocGUsbnVsbCxRLGsu''@;'; put 'put ''c3VwYm9va3Msayl9ZWxzZSBTLmw9RztyZXR1cm4gZ2V9fSw5OntuOiJCcnRGbWxhTnVtIixmOmZ1bmN0aW9uIEFTKFMsUixrKXt2YXIgRz1TLmwrUixRPUQxKFMpO1Eucj1rWyIhcm93Il07dmFyIGdlPVtRLFBsKFMpLCJuIl07aWYoay5jZWxsRm9ybXVsYSl7Uy5sKz0yO3ZhciBwZT16NChT''@;'; put 'put ''LEctUy5sLGspO2dlWzNdPXMwKHBlLG51bGwsUSxrLnN1cGJvb2tzLGspfWVsc2UgUy5sPUc7cmV0dXJuIGdlfX0sMTA6e246IkJydEZtbGFCb29sIixmOmZ1bmN0aW9uIFRTKFMsUixrKXt2YXIgRz1TLmwrUixRPUQxKFMpO1Eucj1rWyIhcm93Il07dmFyIGdlPVtRLFMucmVhZF9zaGlmdCgx''@;'; put 'put ''KSwiYiJdO2lmKGsuY2VsbEZvcm11bGEpe1MubCs9Mjt2YXIgcGU9ejQoUyxHLVMubCxrKTtnZVszXT1zMChwZSxudWxsLFEsay5zdXBib29rcyxrKX1lbHNlIFMubD1HO3JldHVybiBnZX19LDExOntuOiJCcnRGbWxhRXJyb3IiLGY6ZnVuY3Rpb24gdzgoUyxSLGspe3ZhciBHPVMubCtSLFE9''@;'; put 'put ''RDEoUyk7US5yPWtbIiFyb3ciXTt2YXIgZ2U9W1EsUy5yZWFkX3NoaWZ0KDEpLCJlIl07aWYoay5jZWxsRm9ybXVsYSl7Uy5sKz0yO3ZhciBwZT16NChTLEctUy5sLGspO2dlWzNdPXMwKHBlLG51bGwsUSxrLnN1cGJvb2tzLGspfWVsc2UgUy5sPUc7cmV0dXJuIGdlfX0sMTI6e246IkJydFNo''@;'; put 'put ''b3J0QmxhbmsiLGY6ZnVuY3Rpb24ga2ooUyl7cmV0dXJuW0poKFMpXX19LDEzOntuOiJCcnRTaG9ydFJrIixmOmZ1bmN0aW9uIFJuZShTKXtyZXR1cm5bSmgoUyksSTEoUyksIm4iXX19LDE0OntuOiJCcnRTaG9ydEVycm9yIixmOmZ1bmN0aW9uIF84KFMpe3JldHVybltKaChTKSxTLnJlYWRf''@;'; put 'put ''c2hpZnQoMSksImUiXX19LDE1OntuOiJCcnRTaG9ydEJvb2wiLGY6ZnVuY3Rpb24gVUQoUyl7cmV0dXJuW0poKFMpLFMucmVhZF9zaGlmdCgxKSwiYiJdfX0sMTY6e246IkJydFNob3J0UmVhbCIsZjpGan0sMTc6e246IkJydFNob3J0U3QiLGY6ZnVuY3Rpb24gamooUyl7cmV0dXJuW0poKFMp''@;'; put 'put ''LGd1KFMpLCJzdHIiXX19LDE4OntuOiJCcnRTaG9ydElzc3QiLGY6ZnVuY3Rpb24gT2ooUyl7cmV0dXJuW0poKFMpLFMucmVhZF9zaGlmdCg0KSwicyJdfX0sMTk6e246IkJydFNTVEl0ZW0iLGY6c2x9LDIwOntuOiJCcnRQQ0RJTWlzc2luZyJ9LDIxOntuOiJCcnRQQ0RJTnVtYmVyIn0sMjI6''@;'; put 'put ''e246IkJydFBDRElCb29sZWFuIn0sMjM6e246IkJydFBDRElFcnJvciJ9LDI0OntuOiJCcnRQQ0RJU3RyaW5nIn0sMjU6e246IkJydFBDRElEYXRldGltZSJ9LDI2OntuOiJCcnRQQ0RJSW5kZXgifSwyNzp7bjoiQnJ0UENESUFNaXNzaW5nIn0sMjg6e246IkJydFBDRElBTnVtYmVyIn0sMjk6''@;'; put 'put ''e246IkJydFBDRElBQm9vbGVhbiJ9LDMwOntuOiJCcnRQQ0RJQUVycm9yIn0sMzE6e246IkJydFBDRElBU3RyaW5nIn0sMzI6e246IkJydFBDRElBRGF0ZXRpbWUifSwzMzp7bjoiQnJ0UENSUmVjb3JkIn0sMzQ6e246IkJydFBDUlJlY29yZER0In0sMzU6e246IkJydEZSVEJlZ2luIn0sMzY6''@;'; put 'put ''e246IkJydEZSVEVuZCJ9LDM3OntuOiJCcnRBQ0JlZ2luIn0sMzg6e246IkJydEFDRW5kIn0sMzk6e246IkJydE5hbWUiLGY6ZnVuY3Rpb24gQTgoUyxSLGspe3ZhciBHPVMubCtSO1MubCs9NCxTLmwrPTE7dmFyIFE9Uy5yZWFkX3NoaWZ0KDQpLG9lPWw1KFMpLGdlPWZEKFMsMCxrKSxwZT10''@;'; put 'put ''MChTKTtTLmw9Rzt2YXIgeWU9e05hbWU6b2UsUHRnOmdlfTtyZXR1cm4gUTwyNjg0MzU0NTUmJih5ZS5TaGVldD1RKSxwZSYmKHllLkNvbW1lbnQ9cGUpLHllfX0sNDA6e246IkJydEluZGV4Um93QmxvY2sifSw0Mjp7bjoiQnJ0SW5kZXhCbG9jayJ9LDQzOntuOiJCcnRGb250IixmOmZ1bmN0''@;'; put 'put ''aW9uIHpWKFMsUixrKXt2YXIgRz17fTtHLnN6PVMucmVhZF9zaGlmdCgyKS8yMDt2YXIgUT1PdyhTKTtzd2l0Y2goUS5mQm9sZCYmKEcuYm9sZD0xKSxRLmZJdGFsaWMmJihHLml0YWxpYz0xKSxRLmZVbmRlcmxpbmUmJihHLnVuZGVybGluZT0xKSxRLmZDb25kZW5zZSYmKEcuY29uZGVuc2U9''@;'; put 'put ''MSksUS5mRXh0ZW5kJiYoRy5leHRlbmQ9MSksUS5mU2hhZG93JiYoRy5zaGFkb3c9MSksUS5mT3V0bGluZSYmKEcub3V0bGluZT0xKSxRLmZTdHJpa2VvdXQmJihHLnN0cmlrZT0xKSw3MDA9PT1TLnJlYWRfc2hpZnQoMikmJihHLmJvbGQ9MSksUy5yZWFkX3NoaWZ0KDIpKXtjYXNlIDE6Ry52''@;'; put 'put ''YWxpZ249InN1cGVyIjticmVhaztjYXNlIDI6Ry52YWxpZ249InN1YiJ9dmFyIGdlPVMucmVhZF9zaGlmdCgxKTswIT1nZSYmKEcudW5kZXJsaW5lPWdlKTt2YXIgcGU9Uy5yZWFkX3NoaWZ0KDEpO3BlPjAmJihHLmZhbWlseT1wZSk7dmFyIHllPVMucmVhZF9zaGlmdCgxKTtzd2l0Y2goeWU+''@;'; put 'put ''MCYmKEcuY2hhcnNldD15ZSksUy5sKyssRy5jb2xvcj1RaChTKSxTLnJlYWRfc2hpZnQoMSkpe2Nhc2UgMTpHLnNjaGVtZT0ibWFqb3IiO2JyZWFrO2Nhc2UgMjpHLnNjaGVtZT0ibWlub3IifXJldHVybiBHLm5hbWU9Z3UoUyksR319LDQ0OntuOiJCcnRGbXQiLGY6ZnVuY3Rpb24gV3YoUyxS''@;'; put 'put ''KXtyZXR1cm5bUy5yZWFkX3NoaWZ0KDIpLGd1KFMpXX19LDQ1OntuOiJCcnRGaWxsIixmOmZ1bmN0aW9uIFlWKFMsUil7dmFyIGs9Uy5sK1IsRz17fSxRPVMucmVhZF9zaGlmdCg0KTtpZig0MCE9USl7Ry5wYXR0ZXJuVHlwZT1NQ1tRXTt2YXIgb2U9UWgoUyk7NjQhPW9lLmluZGV4JiYoRy5m''@;'; put 'put ''Z0NvbG9yPW9lKTt2YXIgZ2U9UWgoUyk7NjUhPWdlLmluZGV4JiYoRy5iZ0NvbG9yPWdlKX1lbHNle1MubCs9MTYsUy5yZWFkX3NoaWZ0KDQpLFBsKFMpLFBsKFMpLFBsKFMpLFBsKFMpLFBsKFMpO2Zvcih2YXIgcGU9Uy5yZWFkX3NoaWZ0KDQpLHllPVtdLFBlPTA7UGU8cGU7KytQZSl5ZS5w''@;'; put 'put ''dXNoKFpWKFMpKX1yZXR1cm4gUy5sPWssR319LDQ2OntuOiJCcnRCb3JkZXIiLGY6ZnVuY3Rpb24gR1YoUyl7dmFyIFI9e307Uy5yZWFkX3NoaWZ0KDEpO3ZhciBrPUk1KFMpOyJub25lIiE9ay5zdHlsZSYmKFIudG9wPWspO3ZhciBHPUk1KFMpOyJub25lIiE9Ry5zdHlsZSYmKFIuYm90dG9t''@;'; put 'put ''PUcpO3ZhciBRPUk1KFMpOyJub25lIiE9US5zdHlsZSYmKFIubGVmdD1RKTt2YXIgb2U9STUoUyk7Im5vbmUiIT1vZS5zdHlsZSYmKFIucmlnaHQ9b2UpO3ZhciBnZT1JNShTKTtyZXR1cm4ibm9uZSIhPWdlLnN0eWxlJiYoUi5kaWFnPWdlKSxSfX0sNDc6e246IkJydFhGIixmOmZ1bmN0aW9u''@;'; put 'put ''IHhDKFMsUil7dmFyIGs9Uy5sK1IsRz17fSxRPVMucmVhZF9zaGlmdCgyKSxvZT1TLnJlYWRfc2hpZnQoMiksZ2U9Uy5yZWFkX3NoaWZ0KDIpLHBlPVMucmVhZF9zaGlmdCgyKSx5ZT1TLnJlYWRfc2hpZnQoMiksUGU9Uy5yZWFkX3NoaWZ0KDEpO1MucmVhZF9zaGlmdCgxKTt2YXIgTmU9Uy5y''@;'; put 'put ''ZWFkX3NoaWZ0KDIpLFllPVMucmVhZF9zaGlmdCgxKTtTLmw9ayxHLnhmSWQ9USxHLm51bUZtdElkPW9lLEcuZm9udElkPWdlLEcuZmlsbElkPXBlLEcuYm9yZGVySWQ9eWUsMSZZZSYmMCE9Ry5udW1GbXRJZCYmKEcuYXBwbHlOdW1iZXJGb3JtYXQ9ITApLEcuYWxpZ25tZW50PXt9LFBlPjAm''@;'; put 'put ''JihHLmFsaWdubWVudC50ZXh0Um90YXRpb249UGUpO3ZhciBldD0hMTtyZXR1cm4gNyZOZSYmKGV0PSEwLEcuYWxpZ25tZW50Lmhvcml6b250YWw9RDVbNyZOZV0pLEcuYWxpZ25tZW50LnZlcnRpY2FsPXQ4W05lPj4+MyY3XSxHLmFsaWdubWVudC52ZXJ0aWNhbCYmKGV0PSEwKSxOZT4+PjYm''@;'; put 'put ''MSYmKEcuYWxpZ25tZW50LndyYXBUZXh0PSEwKSxOZT4+PjgmMSYmKEcuYWxpZ25tZW50LnNocmlua1RvRml0PSEwKSxldHx8ZGVsZXRlIEcuYWxpZ25tZW50LDQmWWUmJmV0JiYoRy5hcHBseUFsaWdubWVudD0hMCksR319LDQ4OntuOiJCcnRTdHlsZSJ9LDQ5OntuOiJCcnRDZWxsTWV0YSJ9''@;'; put 'put ''LDUwOntuOiJCcnRWYWx1ZU1ldGEifSw1MTp7bjoiQnJ0TWRiIn0sNTI6e246IkJydEJlZ2luRm1kIn0sNTM6e246IkJydEVuZEZtZCJ9LDU0OntuOiJCcnRCZWdpbk1keCJ9LDU1OntuOiJCcnRFbmRNZHgifSw1Njp7bjoiQnJ0QmVnaW5NZHhUdXBsZSJ9LDU3OntuOiJCcnRFbmRNZHhUdXBs''@;'; put 'put ''ZSJ9LDU4OntuOiJCcnRNZHhNYnJJc3RyIn0sNTk6e246IkJydFN0ciJ9LDYwOntuOiJCcnRDb2xJbmZvIixmOnJDfSw2Mjp7bjoiQnJ0Q2VsbFJTdHJpbmcifSw2Mzp7bjoiQnJ0Q2FsY0NoYWluSXRlbSQiLGY6ZnVuY3Rpb24gcjgoUyl7dmFyIFI9e307Ui5pPVMucmVhZF9zaGlmdCg0KTt2''@;'; put 'put ''YXIgaz17fTtrLnI9Uy5yZWFkX3NoaWZ0KDQpLGsuYz1TLnJlYWRfc2hpZnQoNCksUi5yPXFpKGspO3ZhciBHPVMucmVhZF9zaGlmdCgxKTtyZXR1cm4gMiZHJiYoUi5sPSIxIiksOCZHJiYoUi5hPSIxIiksUn19LDY0OntuOiJCcnREVmFsIixmOmZ1bmN0aW9uIFhqKFMsUixrKXt2YXIgRz1T''@;'; put 'put ''LmwrUixRPVMucmVhZF9zaGlmdCg0KSxvZT1uMChTKSxnZT10MChTKSxwZT10MChTKSx5ZT10MChTKSxQZT10MChTKSxOZT1oRChTLFIsayksWWU9Uy5sPEc/aEQoUyxSLGspOm51bGwsZXQ9MTUmUSxjdD17dDpxRFtldF0sc3FyZng6b2UsczpbZ2UscGUseWUsUGVdfTtyZXR1cm4gTmUmJihj''@;'; put 'put ''dC5mMT1OZSksWWUmJihjdC5mMj1ZZSksMD09ZXR8fDM9PWV0fHw3PT1ldHx8KGN0Lm9wPURTW1E+PjIwJjE1XSksY3R9fSw2NTp7bjoiQnJ0U3h2Y2VsbE51bSJ9LDY2OntuOiJCcnRTeHZjZWxsU3RyIn0sNjc6e246IkJydFN4dmNlbGxCb29sIn0sNjg6e246IkJydFN4dmNlbGxFcnIifSw2''@;'; put 'put ''OTp7bjoiQnJ0U3h2Y2VsbERhdGUifSw3MDp7bjoiQnJ0U3h2Y2VsbE5pbCJ9LDEyODp7bjoiQnJ0RmlsZVZlcnNpb24ifSwxMjk6e246IkJydEJlZ2luU2hlZXQifSwxMzA6e246IkJydEVuZFNoZWV0In0sMTMxOntuOiJCcnRCZWdpbkJvb2siLGY6SW4scDowfSwxMzI6e246IkJydEVuZEJv''@;'; put 'put ''b2sifSwxMzM6e246IkJydEJlZ2luV3NWaWV3cyJ9LDEzNDp7bjoiQnJ0RW5kV3NWaWV3cyJ9LDEzNTp7bjoiQnJ0QmVnaW5Cb29rVmlld3MifSwxMzY6e246IkJydEVuZEJvb2tWaWV3cyJ9LDEzNzp7bjoiQnJ0QmVnaW5Xc1ZpZXciLGY6ZnVuY3Rpb24ga1MoUyl7dmFyIFI9Uy5yZWFkX3No''@;'; put 'put ''aWZ0KDIpO3JldHVybiBTLmwrPTI4LHtSVEw6MzImUixncmlkOiEhKDQmUil9fX0sMTM4OntuOiJCcnRFbmRXc1ZpZXcifSwxMzk6e246IkJydEJlZ2luQ3NWaWV3cyJ9LDE0MDp7bjoiQnJ0RW5kQ3NWaWV3cyJ9LDE0MTp7bjoiQnJ0QmVnaW5Dc1ZpZXcifSwxNDI6e246IkJydEVuZENzVmll''@;'; put 'put ''dyJ9LDE0Mzp7bjoiQnJ0QmVnaW5CdW5kbGVTaHMifSwxNDQ6e246IkJydEVuZEJ1bmRsZVNocyJ9LDE0NTp7bjoiQnJ0QmVnaW5TaGVldERhdGEifSwxNDY6e246IkJydEVuZFNoZWV0RGF0YSJ9LDE0Nzp7bjoiQnJ0V3NQcm9wIixmOmZ1bmN0aW9uIGhiKFMsUil7dmFyIGs9e30sRz1TW1Mu''@;'; put 'put ''bF07cmV0dXJuKytTLmwsay5hYm92ZT0hKDY0JkcpLGsubGVmdD0hKDEyOCZHKSxTLmwrPTE4LGsubmFtZT1vNShTLFItMTkpLGt9fSwxNDg6e246IkJydFdzRGltIixmOnhqLHA6MTZ9LDE1MTp7bjoiQnJ0UGFuZSIsZjpmdW5jdGlvbiBHRChTLFIpe3ZhciBrPVMubCtSO1BsKFMpLFBsKFMp''@;'; put 'put ''O3ZhciBHPVMucmVhZF9zaGlmdCg0LCJpIiksUT1TLnJlYWRfc2hpZnQoNCwiaSIpO2lmKFMucmVhZF9zaGlmdCg0KSxTLnJlYWRfc2hpZnQoMSksayE9Uy5sKXRocm93IG5ldyBFcnJvcigiQmFkIEJydFBhbmU6ICIraysiICE9ICIrUy5sKTtyZXR1cm5bcWkoe3I6RyxjOlF9KV19fSwxNTI6''@;'; put 'put ''e246IkJydFNlbCIsZjpmdW5jdGlvbiAkRChTLFIpe3JldHVybiBTLnJlYWRfc2hpZnQoNCkse2NlbGw6cWkoe3I6Uy5yZWFkX3NoaWZ0KDQpLGM6Uy5yZWFkX3NoaWZ0KDQpfSl9fX0sMTUzOntuOiJCcnRXYlByb3AiLGY6ZnVuY3Rpb24gTlMoUyxSKXt2YXIgaz17fSxHPVMucmVhZF9zaGlm''@;'; put 'put ''dCg0KTtrLmRlZmF1bHRUaGVtZVZlcnNpb249Uy5yZWFkX3NoaWZ0KDQpO3ZhciBRPVI+OD9ndShTKToiIjtyZXR1cm4gUS5sZW5ndGg+MCYmKGsuQ29kZU5hbWU9USksay5hdXRvQ29tcHJlc3NQaWN0dXJlcz0hISg2NTUzNiZHKSxrLmJhY2t1cEZpbGU9ISEoNjQmRyksay5jaGVja0NvbXBh''@;'; put 'put ''dGliaWxpdHk9ISEoNDA5NiZHKSxrLmRhdGUxOTA0PSEhKDEmRyksay5maWx0ZXJQcml2YWN5PSEhKDgmRyksay5oaWRlUGl2b3RGaWVsZExpc3Q9ISEoMTAyNCZHKSxrLnByb21wdGVkU29sdXRpb25zPSEhKDE2JkcpLGsucHVibGlzaEl0ZW1zPSEhKDIwNDgmRyksay5yZWZyZXNoQWxsQ29u''@;'; put 'put ''bmVjdGlvbnM9ISEoMjYyMTQ0JkcpLGsuc2F2ZUV4dGVybmFsTGlua1ZhbHVlcz0hISgxMjgmRyksay5zaG93Qm9yZGVyVW5zZWxlY3RlZFRhYmxlcz0hISg0JkcpLGsuc2hvd0lua0Fubm90YXRpb249ISEoMzImRyksay5zaG93T2JqZWN0cz1bImFsbCIsInBsYWNlaG9sZGVycyIsIm5vbmUi''@;'; put 'put ''XVtHPj4xMyYzXSxrLnNob3dQaXZvdENoYXJ0RmlsdGVyPSEhKDMyNzY4JkcpLGsudXBkYXRlTGlua3M9WyJ1c2VyU2V0IiwibmV2ZXIiLCJhbHdheXMiXVtHPj44JjNdLGt9fSwxNTQ6e246IkJydFdiRmFjdG9pZCJ9LDE1NTp7bjoiQnJ0RmlsZVJlY292ZXIifSwxNTY6e246IkJydEJ1bmRs''@;'; put 'put ''ZVNoIixmOmZ1bmN0aW9uIGd6KFMsUil7dmFyIGs9e307cmV0dXJuIGsuSGlkZGVuPVMucmVhZF9zaGlmdCg0KSxrLmlUYWJJRD1TLnJlYWRfc2hpZnQoNCksay5zdHJSZWxJRD1nNChTLFItOCksay5uYW1lPWd1KFMpLGt9fSwxNTc6e246IkJydENhbGNQcm9wIn0sMTU4OntuOiJCcnRCb29r''@;'; put 'put ''VmlldyJ9LDE1OTp7bjoiQnJ0QmVnaW5Tc3QiLGY6ZnVuY3Rpb24gTHYoUyl7cmV0dXJuW1MucmVhZF9zaGlmdCg0KSxTLnJlYWRfc2hpZnQoNCldfX0sMTYwOntuOiJCcnRFbmRTc3QifSwxNjE6e246IkJydEJlZ2luQUZpbHRlciIsZjptdX0sMTYyOntuOiJCcnRFbmRBRmlsdGVyIn0sMTYz''@;'; put 'put ''OntuOiJCcnRCZWdpbkZpbHRlckNvbHVtbiJ9LDE2NDp7bjoiQnJ0RW5kRmlsdGVyQ29sdW1uIn0sMTY1OntuOiJCcnRCZWdpbkZpbHRlcnMifSwxNjY6e246IkJydEVuZEZpbHRlcnMifSwxNjc6e246IkJydEZpbHRlciJ9LDE2ODp7bjoiQnJ0Q29sb3JGaWx0ZXIifSwxNjk6e246IkJydElj''@;'; put 'put ''b25GaWx0ZXIifSwxNzA6e246IkJydFRvcDEwRmlsdGVyIn0sMTcxOntuOiJCcnREeW5hbWljRmlsdGVyIn0sMTcyOntuOiJCcnRCZWdpbkN1c3RvbUZpbHRlcnMifSwxNzM6e246IkJydEVuZEN1c3RvbUZpbHRlcnMifSwxNzQ6e246IkJydEN1c3RvbUZpbHRlciJ9LDE3NTp7bjoiQnJ0QUZp''@;'; put 'put ''bHRlckRhdGVHcm91cEl0ZW0ifSwxNzY6e246IkJydE1lcmdlQ2VsbCIsZjpXRH0sMTc3OntuOiJCcnRCZWdpbk1lcmdlQ2VsbHMifSwxNzg6e246IkJydEVuZE1lcmdlQ2VsbHMifSwxNzk6e246IkJydEJlZ2luUGl2b3RDYWNoZURlZiJ9LDE4MDp7bjoiQnJ0RW5kUGl2b3RDYWNoZURlZiJ9''@;'; put 'put ''LDE4MTp7bjoiQnJ0QmVnaW5QQ0RGaWVsZHMifSwxODI6e246IkJydEVuZFBDREZpZWxkcyJ9LDE4Mzp7bjoiQnJ0QmVnaW5QQ0RGaWVsZCJ9LDE4NDp7bjoiQnJ0RW5kUENERmllbGQifSwxODU6e246IkJydEJlZ2luUENEU291cmNlIn0sMTg2OntuOiJCcnRFbmRQQ0RTb3VyY2UifSwxODc6''@;'; put 'put ''e246IkJydEJlZ2luUENEU1JhbmdlIn0sMTg4OntuOiJCcnRFbmRQQ0RTUmFuZ2UifSwxODk6e246IkJydEJlZ2luUENERkF0YmwifSwxOTA6e246IkJydEVuZFBDREZBdGJsIn0sMTkxOntuOiJCcnRCZWdpblBDRElSdW4ifSwxOTI6e246IkJydEVuZFBDRElSdW4ifSwxOTM6e246IkJydEJl''@;'; put 'put ''Z2luUGl2b3RDYWNoZVJlY29yZHMifSwxOTQ6e246IkJydEVuZFBpdm90Q2FjaGVSZWNvcmRzIn0sMTk1OntuOiJCcnRCZWdpblBDREhpZXJhcmNoaWVzIn0sMTk2OntuOiJCcnRFbmRQQ0RIaWVyYXJjaGllcyJ9LDE5Nzp7bjoiQnJ0QmVnaW5QQ0RIaWVyYXJjaHkifSwxOTg6e246IkJydEVu''@;'; put 'put ''ZFBDREhpZXJhcmNoeSJ9LDE5OTp7bjoiQnJ0QmVnaW5QQ0RIRmllbGRzVXNhZ2UifSwyMDA6e246IkJydEVuZFBDREhGaWVsZHNVc2FnZSJ9LDIwMTp7bjoiQnJ0QmVnaW5FeHRDb25uZWN0aW9uIn0sMjAyOntuOiJCcnRFbmRFeHRDb25uZWN0aW9uIn0sMjAzOntuOiJCcnRCZWdpbkVDRGJQ''@;'; put 'put ''cm9wcyJ9LDIwNDp7bjoiQnJ0RW5kRUNEYlByb3BzIn0sMjA1OntuOiJCcnRCZWdpbkVDT2xhcFByb3BzIn0sMjA2OntuOiJCcnRFbmRFQ09sYXBQcm9wcyJ9LDIwNzp7bjoiQnJ0QmVnaW5QQ0RTQ29uc29sIn0sMjA4OntuOiJCcnRFbmRQQ0RTQ29uc29sIn0sMjA5OntuOiJCcnRCZWdpblBD''@;'; put 'put ''RFNDUGFnZXMifSwyMTA6e246IkJydEVuZFBDRFNDUGFnZXMifSwyMTE6e246IkJydEJlZ2luUENEU0NQYWdlIn0sMjEyOntuOiJCcnRFbmRQQ0RTQ1BhZ2UifSwyMTM6e246IkJydEJlZ2luUENEU0NQSXRlbSJ9LDIxNDp7bjoiQnJ0RW5kUENEU0NQSXRlbSJ9LDIxNTp7bjoiQnJ0QmVnaW5Q''@;'; put 'put ''Q0RTQ1NldHMifSwyMTY6e246IkJydEVuZFBDRFNDU2V0cyJ9LDIxNzp7bjoiQnJ0QmVnaW5QQ0RTQ1NldCJ9LDIxODp7bjoiQnJ0RW5kUENEU0NTZXQifSwyMTk6e246IkJydEJlZ2luUENERkdyb3VwIn0sMjIwOntuOiJCcnRFbmRQQ0RGR3JvdXAifSwyMjE6e246IkJydEJlZ2luUENERkdJ''@;'; put 'put ''dGVtcyJ9LDIyMjp7bjoiQnJ0RW5kUENERkdJdGVtcyJ9LDIyMzp7bjoiQnJ0QmVnaW5QQ0RGR1JhbmdlIn0sMjI0OntuOiJCcnRFbmRQQ0RGR1JhbmdlIn0sMjI1OntuOiJCcnRCZWdpblBDREZHRGlzY3JldGUifSwyMjY6e246IkJydEVuZFBDREZHRGlzY3JldGUifSwyMjc6e246IkJydEJl''@;'; put 'put ''Z2luUENEU0RUdXBsZUNhY2hlIn0sMjI4OntuOiJCcnRFbmRQQ0RTRFR1cGxlQ2FjaGUifSwyMjk6e246IkJydEJlZ2luUENEU0RUQ0VudHJpZXMifSwyMzA6e246IkJydEVuZFBDRFNEVENFbnRyaWVzIn0sMjMxOntuOiJCcnRCZWdpblBDRFNEVENFTWVtYmVycyJ9LDIzMjp7bjoiQnJ0RW5k''@;'; put 'put ''UENEU0RUQ0VNZW1iZXJzIn0sMjMzOntuOiJCcnRCZWdpblBDRFNEVENFTWVtYmVyIn0sMjM0OntuOiJCcnRFbmRQQ0RTRFRDRU1lbWJlciJ9LDIzNTp7bjoiQnJ0QmVnaW5QQ0RTRFRDUXVlcmllcyJ9LDIzNjp7bjoiQnJ0RW5kUENEU0RUQ1F1ZXJpZXMifSwyMzc6e246IkJydEJlZ2luUENE''@;'; put 'put ''U0RUQ1F1ZXJ5In0sMjM4OntuOiJCcnRFbmRQQ0RTRFRDUXVlcnkifSwyMzk6e246IkJydEJlZ2luUENEU0RUQ1NldHMifSwyNDA6e246IkJydEVuZFBDRFNEVENTZXRzIn0sMjQxOntuOiJCcnRCZWdpblBDRFNEVENTZXQifSwyNDI6e246IkJydEVuZFBDRFNEVENTZXQifSwyNDM6e246IkJy''@;'; put 'put ''dEJlZ2luUENEQ2FsY0l0ZW1zIn0sMjQ0OntuOiJCcnRFbmRQQ0RDYWxjSXRlbXMifSwyNDU6e246IkJydEJlZ2luUENEQ2FsY0l0ZW0ifSwyNDY6e246IkJydEVuZFBDRENhbGNJdGVtIn0sMjQ3OntuOiJCcnRCZWdpblBSdWxlIn0sMjQ4OntuOiJCcnRFbmRQUnVsZSJ9LDI0OTp7bjoiQnJ0''@;'; put 'put ''QmVnaW5QUkZpbHRlcnMifSwyNTA6e246IkJydEVuZFBSRmlsdGVycyJ9LDI1MTp7bjoiQnJ0QmVnaW5QUkZpbHRlciJ9LDI1Mjp7bjoiQnJ0RW5kUFJGaWx0ZXIifSwyNTM6e246IkJydEJlZ2luUE5hbWVzIn0sMjU0OntuOiJCcnRFbmRQTmFtZXMifSwyNTU6e246IkJydEJlZ2luUE5hbWUi''@;'; put 'put ''fSwyNTY6e246IkJydEVuZFBOYW1lIn0sMjU3OntuOiJCcnRCZWdpblBOUGFpcnMifSwyNTg6e246IkJydEVuZFBOUGFpcnMifSwyNTk6e246IkJydEJlZ2luUE5QYWlyIn0sMjYwOntuOiJCcnRFbmRQTlBhaXIifSwyNjE6e246IkJydEJlZ2luRUNXZWJQcm9wcyJ9LDI2Mjp7bjoiQnJ0RW5k''@;'; put 'put ''RUNXZWJQcm9wcyJ9LDI2Mzp7bjoiQnJ0QmVnaW5FY1dwVGFibGVzIn0sMjY0OntuOiJCcnRFbmRFQ1dQVGFibGVzIn0sMjY1OntuOiJCcnRCZWdpbkVDUGFyYW1zIn0sMjY2OntuOiJCcnRFbmRFQ1BhcmFtcyJ9LDI2Nzp7bjoiQnJ0QmVnaW5FQ1BhcmFtIn0sMjY4OntuOiJCcnRFbmRFQ1Bh''@;'; put 'put ''cmFtIn0sMjY5OntuOiJCcnRCZWdpblBDREtQSXMifSwyNzA6e246IkJydEVuZFBDREtQSXMifSwyNzE6e246IkJydEJlZ2luUENES1BJIn0sMjcyOntuOiJCcnRFbmRQQ0RLUEkifSwyNzM6e246IkJydEJlZ2luRGltcyJ9LDI3NDp7bjoiQnJ0RW5kRGltcyJ9LDI3NTp7bjoiQnJ0QmVnaW5E''@;'; put 'put ''aW0ifSwyNzY6e246IkJydEVuZERpbSJ9LDI3Nzp7bjoiQnJ0SW5kZXhQYXJ0RW5kIn0sMjc4OntuOiJCcnRCZWdpblN0eWxlU2hlZXQifSwyNzk6e246IkJydEVuZFN0eWxlU2hlZXQifSwyODA6e246IkJydEJlZ2luU1hWaWV3In0sMjgxOntuOiJCcnRFbmRTWFZJIn0sMjgyOntuOiJCcnRC''@;'; put 'put ''ZWdpblNYVkkifSwyODM6e246IkJydEJlZ2luU1hWSXMifSwyODQ6e246IkJydEVuZFNYVklzIn0sMjg1OntuOiJCcnRCZWdpblNYVkQifSwyODY6e246IkJydEVuZFNYVkQifSwyODc6e246IkJydEJlZ2luU1hWRHMifSwyODg6e246IkJydEVuZFNYVkRzIn0sMjg5OntuOiJCcnRCZWdpblNY''@;'; put 'put ''UEkifSwyOTA6e246IkJydEVuZFNYUEkifSwyOTE6e246IkJydEJlZ2luU1hQSXMifSwyOTI6e246IkJydEVuZFNYUElzIn0sMjkzOntuOiJCcnRCZWdpblNYREkifSwyOTQ6e246IkJydEVuZFNYREkifSwyOTU6e246IkJydEJlZ2luU1hESXMifSwyOTY6e246IkJydEVuZFNYRElzIn0sMjk3''@;'; put 'put ''OntuOiJCcnRCZWdpblNYTEkifSwyOTg6e246IkJydEVuZFNYTEkifSwyOTk6e246IkJydEJlZ2luU1hMSVJ3cyJ9LDMwMDp7bjoiQnJ0RW5kU1hMSVJ3cyJ9LDMwMTp7bjoiQnJ0QmVnaW5TWExJQ29scyJ9LDMwMjp7bjoiQnJ0RW5kU1hMSUNvbHMifSwzMDM6e246IkJydEJlZ2luU1hGb3Jt''@;'; put 'put ''YXQifSwzMDQ6e246IkJydEVuZFNYRm9ybWF0In0sMzA1OntuOiJCcnRCZWdpblNYRm9ybWF0cyJ9LDMwNjp7bjoiQnJ0RW5kU3hGb3JtYXRzIn0sMzA3OntuOiJCcnRCZWdpblN4U2VsZWN0In0sMzA4OntuOiJCcnRFbmRTeFNlbGVjdCJ9LDMwOTp7bjoiQnJ0QmVnaW5JU1hWRFJ3cyJ9LDMx''@;'; put 'put ''MDp7bjoiQnJ0RW5kSVNYVkRSd3MifSwzMTE6e246IkJydEJlZ2luSVNYVkRDb2xzIn0sMzEyOntuOiJCcnRFbmRJU1hWRENvbHMifSwzMTM6e246IkJydEVuZFNYTG9jYXRpb24ifSwzMTQ6e246IkJydEJlZ2luU1hMb2NhdGlvbiJ9LDMxNTp7bjoiQnJ0RW5kU1hWaWV3In0sMzE2OntuOiJC''@;'; put 'put ''cnRCZWdpblNYVEhzIn0sMzE3OntuOiJCcnRFbmRTWFRIcyJ9LDMxODp7bjoiQnJ0QmVnaW5TWFRIIn0sMzE5OntuOiJCcnRFbmRTWFRIIn0sMzIwOntuOiJCcnRCZWdpbklTWFRIUndzIn0sMzIxOntuOiJCcnRFbmRJU1hUSFJ3cyJ9LDMyMjp7bjoiQnJ0QmVnaW5JU1hUSENvbHMifSwzMjM6''@;'; put 'put ''e246IkJydEVuZElTWFRIQ29scyJ9LDMyNDp7bjoiQnJ0QmVnaW5TWFRETVBTIn0sMzI1OntuOiJCcnRFbmRTWFRETVBzIn0sMzI2OntuOiJCcnRCZWdpblNYVERNUCJ9LDMyNzp7bjoiQnJ0RW5kU1hURE1QIn0sMzI4OntuOiJCcnRCZWdpblNYVEhJdGVtcyJ9LDMyOTp7bjoiQnJ0RW5kU1hU''@;'; put 'put ''SEl0ZW1zIn0sMzMwOntuOiJCcnRCZWdpblNYVEhJdGVtIn0sMzMxOntuOiJCcnRFbmRTWFRISXRlbSJ9LDMzMjp7bjoiQnJ0QmVnaW5NZXRhZGF0YSJ9LDMzMzp7bjoiQnJ0RW5kTWV0YWRhdGEifSwzMzQ6e246IkJydEJlZ2luRXNtZHRpbmZvIn0sMzM1OntuOiJCcnRNZHRpbmZvIn0sMzM2''@;'; put 'put ''OntuOiJCcnRFbmRFc21kdGluZm8ifSwzMzc6e246IkJydEJlZ2luRXNtZGIifSwzMzg6e246IkJydEVuZEVzbWRiIn0sMzM5OntuOiJCcnRCZWdpbkVzZm1kIn0sMzQwOntuOiJCcnRFbmRFc2ZtZCJ9LDM0MTp7bjoiQnJ0QmVnaW5TaW5nbGVDZWxscyJ9LDM0Mjp7bjoiQnJ0RW5kU2luZ2xl''@;'; put 'put ''Q2VsbHMifSwzNDM6e246IkJydEJlZ2luTGlzdCJ9LDM0NDp7bjoiQnJ0RW5kTGlzdCJ9LDM0NTp7bjoiQnJ0QmVnaW5MaXN0Q29scyJ9LDM0Njp7bjoiQnJ0RW5kTGlzdENvbHMifSwzNDc6e246IkJydEJlZ2luTGlzdENvbCJ9LDM0ODp7bjoiQnJ0RW5kTGlzdENvbCJ9LDM0OTp7bjoiQnJ0''@;'; put 'put ''QmVnaW5MaXN0WG1sQ1ByIn0sMzUwOntuOiJCcnRFbmRMaXN0WG1sQ1ByIn0sMzUxOntuOiJCcnRMaXN0Q0NGbWxhIn0sMzUyOntuOiJCcnRMaXN0VHJGbWxhIn0sMzUzOntuOiJCcnRCZWdpbkV4dGVybmFscyJ9LDM1NDp7bjoiQnJ0RW5kRXh0ZXJuYWxzIn0sMzU1OntuOiJCcnRTdXBCb29r''@;'; put 'put ''U3JjIixmOmc0fSwzNTc6e246IkJydFN1cFNlbGYifSwzNTg6e246IkJydFN1cFNhbWUifSwzNTk6e246IkJydFN1cFRhYnMifSwzNjA6e246IkJydEJlZ2luU3VwQm9vayJ9LDM2MTp7bjoiQnJ0UGxhY2Vob2xkZXJOYW1lIn0sMzYyOntuOiJCcnRFeHRlcm5TaGVldCIsZjpUdn0sMzYzOntu''@;'; put 'put ''OiJCcnRFeHRlcm5UYWJsZVN0YXJ0In0sMzY0OntuOiJCcnRFeHRlcm5UYWJsZUVuZCJ9LDM2Njp7bjoiQnJ0RXh0ZXJuUm93SGRyIn0sMzY3OntuOiJCcnRFeHRlcm5DZWxsQmxhbmsifSwzNjg6e246IkJydEV4dGVybkNlbGxSZWFsIn0sMzY5OntuOiJCcnRFeHRlcm5DZWxsQm9vbCJ9LDM3''@;'; put 'put ''MDp7bjoiQnJ0RXh0ZXJuQ2VsbEVycm9yIn0sMzcxOntuOiJCcnRFeHRlcm5DZWxsU3RyaW5nIn0sMzcyOntuOiJCcnRCZWdpbkVzbWR4In0sMzczOntuOiJCcnRFbmRFc21keCJ9LDM3NDp7bjoiQnJ0QmVnaW5NZHhTZXQifSwzNzU6e246IkJydEVuZE1keFNldCJ9LDM3Njp7bjoiQnJ0QmVn''@;'; put 'put ''aW5NZHhNYnJQcm9wIn0sMzc3OntuOiJCcnRFbmRNZHhNYnJQcm9wIn0sMzc4OntuOiJCcnRCZWdpbk1keEtQSSJ9LDM3OTp7bjoiQnJ0RW5kTWR4S1BJIn0sMzgwOntuOiJCcnRCZWdpbkVzc3RyIn0sMzgxOntuOiJCcnRFbmRFc3N0ciJ9LDM4Mjp7bjoiQnJ0QmVnaW5QUkZJdGVtIn0sMzgz''@;'; put 'put ''OntuOiJCcnRFbmRQUkZJdGVtIn0sMzg0OntuOiJCcnRCZWdpblBpdm90Q2FjaGVJRHMifSwzODU6e246IkJydEVuZFBpdm90Q2FjaGVJRHMifSwzODY6e246IkJydEJlZ2luUGl2b3RDYWNoZUlEIn0sMzg3OntuOiJCcnRFbmRQaXZvdENhY2hlSUQifSwzODg6e246IkJydEJlZ2luSVNYVklz''@;'; put 'put ''In0sMzg5OntuOiJCcnRFbmRJU1hWSXMifSwzOTA6e246IkJydEJlZ2luQ29sSW5mb3MifSwzOTE6e246IkJydEVuZENvbEluZm9zIn0sMzkyOntuOiJCcnRCZWdpblJ3QnJrIn0sMzkzOntuOiJCcnRFbmRSd0JyayJ9LDM5NDp7bjoiQnJ0QmVnaW5Db2xCcmsifSwzOTU6e246IkJydEVuZENv''@;'; put 'put ''bEJyayJ9LDM5Njp7bjoiQnJ0QnJrIn0sMzk3OntuOiJCcnRVc2VyQm9va1ZpZXcifSwzOTg6e246IkJydEluZm8ifSwzOTk6e246IkJydENVc3IifSw0MDA6e246IkJydFVzciJ9LDQwMTp7bjoiQnJ0QmVnaW5Vc2VycyJ9LDQwMzp7bjoiQnJ0RU9GIn0sNDA0OntuOiJCcnRVQ1IifSw0MDU6''@;'; put 'put ''e246IkJydFJSSW5zRGVsIn0sNDA2OntuOiJCcnRSUkVuZEluc0RlbCJ9LDQwNzp7bjoiQnJ0UlJNb3ZlIn0sNDA4OntuOiJCcnRSUkVuZE1vdmUifSw0MDk6e246IkJydFJSQ2hnQ2VsbCJ9LDQxMDp7bjoiQnJ0UlJFbmRDaGdDZWxsIn0sNDExOntuOiJCcnRSUkhlYWRlciJ9LDQxMjp7bjoi''@;'; put 'put ''QnJ0UlJVc2VyVmlldyJ9LDQxMzp7bjoiQnJ0UlJSZW5TaGVldCJ9LDQxNDp7bjoiQnJ0UlJJbnNlcnRTaCJ9LDQxNTp7bjoiQnJ0UlJEZWZOYW1lIn0sNDE2OntuOiJCcnRSUk5vdGUifSw0MTc6e246IkJydFJSQ29uZmxpY3QifSw0MTg6e246IkJydFJSVFFTSUYifSw0MTk6e246IkJydFJS''@;'; put 'put ''Rm9ybWF0In0sNDIwOntuOiJCcnRSUkVuZEZvcm1hdCJ9LDQyMTp7bjoiQnJ0UlJBdXRvRm10In0sNDIyOntuOiJCcnRCZWdpblVzZXJTaFZpZXdzIn0sNDIzOntuOiJCcnRCZWdpblVzZXJTaFZpZXcifSw0MjQ6e246IkJydEVuZFVzZXJTaFZpZXcifSw0MjU6e246IkJydEVuZFVzZXJTaFZp''@;'; put 'put ''ZXdzIn0sNDI2OntuOiJCcnRBcnJGbWxhIixmOmZ1bmN0aW9uIGdiKFMsUixrKXt2YXIgRz1TLmwrUixRPWxkKFMpLG9lPVMucmVhZF9zaGlmdCgxKSxnZT1bUV07aWYoZ2VbMl09b2Usay5jZWxsRm9ybXVsYSl7dmFyIHBlPWVTKFMsRy1TLmwsayk7Z2VbMV09cGV9ZWxzZSBTLmw9RztyZXR1''@;'; put 'put ''cm4gZ2V9fSw0Mjc6e246IkJydFNockZtbGEiLGY6ZnVuY3Rpb24gWWooUyxSLGspe3ZhciBHPVMubCtSLG9lPVttdShTLDE2KV07aWYoay5jZWxsRm9ybXVsYSl7dmFyIGdlPUpCKFMsRy1TLmwsayk7b2VbMV09Z2UsUy5sPUd9ZWxzZSBTLmw9RztyZXR1cm4gb2V9fSw0Mjg6e246IkJydFRh''@;'; put 'put ''YmxlIn0sNDI5OntuOiJCcnRCZWdpbkV4dENvbm5lY3Rpb25zIn0sNDMwOntuOiJCcnRFbmRFeHRDb25uZWN0aW9ucyJ9LDQzMTp7bjoiQnJ0QmVnaW5QQ0RDYWxjTWVtcyJ9LDQzMjp7bjoiQnJ0RW5kUENEQ2FsY01lbXMifSw0MzM6e246IkJydEJlZ2luUENEQ2FsY01lbSJ9LDQzNDp7bjoi''@;'; put 'put ''QnJ0RW5kUENEQ2FsY01lbSJ9LDQzNTp7bjoiQnJ0QmVnaW5QQ0RIR0xldmVscyJ9LDQzNjp7bjoiQnJ0RW5kUENESEdMZXZlbHMifSw0Mzc6e246IkJydEJlZ2luUENESEdMZXZlbCJ9LDQzODp7bjoiQnJ0RW5kUENESEdMZXZlbCJ9LDQzOTp7bjoiQnJ0QmVnaW5QQ0RIR0xHcm91cHMifSw0''@;'; put 'put ''NDA6e246IkJydEVuZFBDREhHTEdyb3VwcyJ9LDQ0MTp7bjoiQnJ0QmVnaW5QQ0RIR0xHcm91cCJ9LDQ0Mjp7bjoiQnJ0RW5kUENESEdMR3JvdXAifSw0NDM6e246IkJydEJlZ2luUENESEdMR01lbWJlcnMifSw0NDQ6e246IkJydEVuZFBDREhHTEdNZW1iZXJzIn0sNDQ1OntuOiJCcnRCZWdp''@;'; put 'put ''blBDREhHTEdNZW1iZXIifSw0NDY6e246IkJydEVuZFBDREhHTEdNZW1iZXIifSw0NDc6e246IkJydEJlZ2luUVNJIn0sNDQ4OntuOiJCcnRFbmRRU0kifSw0NDk6e246IkJydEJlZ2luUVNJUiJ9LDQ1MDp7bjoiQnJ0RW5kUVNJUiJ9LDQ1MTp7bjoiQnJ0QmVnaW5EZWxldGVkTmFtZXMifSw0''@;'; put 'put ''NTI6e246IkJydEVuZERlbGV0ZWROYW1lcyJ9LDQ1Mzp7bjoiQnJ0QmVnaW5EZWxldGVkTmFtZSJ9LDQ1NDp7bjoiQnJ0RW5kRGVsZXRlZE5hbWUifSw0NTU6e246IkJydEJlZ2luUVNJRnMifSw0NTY6e246IkJydEVuZFFTSUZzIn0sNDU3OntuOiJCcnRCZWdpblFTSUYifSw0NTg6e246IkJy''@;'; put 'put ''dEVuZFFTSUYifSw0NTk6e246IkJydEJlZ2luQXV0b1NvcnRTY29wZSJ9LDQ2MDp7bjoiQnJ0RW5kQXV0b1NvcnRTY29wZSJ9LDQ2MTp7bjoiQnJ0QmVnaW5Db25kaXRpb25hbEZvcm1hdHRpbmcifSw0NjI6e246IkJydEVuZENvbmRpdGlvbmFsRm9ybWF0dGluZyJ9LDQ2Mzp7bjoiQnJ0QmVn''@;'; put 'put ''aW5DRlJ1bGUifSw0NjQ6e246IkJydEVuZENGUnVsZSJ9LDQ2NTp7bjoiQnJ0QmVnaW5JY29uU2V0In0sNDY2OntuOiJCcnRFbmRJY29uU2V0In0sNDY3OntuOiJCcnRCZWdpbkRhdGFiYXIifSw0Njg6e246IkJydEVuZERhdGFiYXIifSw0Njk6e246IkJydEJlZ2luQ29sb3JTY2FsZSJ9LDQ3''@;'; put 'put ''MDp7bjoiQnJ0RW5kQ29sb3JTY2FsZSJ9LDQ3MTp7bjoiQnJ0Q0ZWTyJ9LDQ3Mjp7bjoiQnJ0RXh0ZXJuVmFsdWVNZXRhIn0sNDczOntuOiJCcnRCZWdpbkNvbG9yUGFsZXR0ZSJ9LDQ3NDp7bjoiQnJ0RW5kQ29sb3JQYWxldHRlIn0sNDc1OntuOiJCcnRJbmRleGVkQ29sb3IifSw0NzY6e246''@;'; put 'put ''IkJydE1hcmdpbnMiLGY6ZnVuY3Rpb24gJGooUyl7dmFyIFI9e307cmV0dXJuIEtELmZvckVhY2goZnVuY3Rpb24oayl7UltrXT1QbChTKX0pLFJ9fSw0Nzc6e246IkJydFByaW50T3B0aW9ucyJ9LDQ3ODp7bjoiQnJ0UGFnZVNldHVwIn0sNDc5OntuOiJCcnRCZWdpbkhlYWRlckZvb3RlciJ9''@;'; put 'put ''LDQ4MDp7bjoiQnJ0RW5kSGVhZGVyRm9vdGVyIn0sNDgxOntuOiJCcnRCZWdpblNYQ3J0Rm9ybWF0In0sNDgyOntuOiJCcnRFbmRTWENydEZvcm1hdCJ9LDQ4Mzp7bjoiQnJ0QmVnaW5TWENydEZvcm1hdHMifSw0ODQ6e246IkJydEVuZFNYQ3J0Rm9ybWF0cyJ9LDQ4NTp7bjoiQnJ0V3NGbXRJ''@;'; put 'put ''bmZvIixmOmZ1bmN0aW9uIGpEKFMpe3ZhciBSPXt9LGs9e30sRz17fSxRPVMucmVhZF9zaGlmdCg0KSxvZT1TLnJlYWRfc2hpZnQoMik7Ry53Y2g9UTw9NjU1MzY/US8yNTY6b2U7dmFyIGdlPVMucmVhZF9zaGlmdCgyKTtrLmhwdD1nZS8yMDt2YXIgcGU9Uy5yZWFkX3NoaWZ0KDIpO3JldHVy''@;'; put 'put ''biAyJnBlJiYoay5oaWRkZW49ITApLDQmcGUmJihSLnRvcHRoaWNrPSEwKSw4JnBlJiYoUi5ib3R0aGljaz0hMCksUi5yb3dvdXRsaW5lPVMucmVhZF9zaGlmdCgxKSxSLmNvbG91dGxpbmU9Uy5yZWFkX3NoaWZ0KDEpLGp2KGspLFIucm93PWssUTAoRyksUi5jb2w9RyxSfX0sNDg2OntuOiJC''@;'; put 'put ''cnRCZWdpbk1ncyJ9LDQ4Nzp7bjoiQnJ0RW5kTUdzIn0sNDg4OntuOiJCcnRCZWdpbk1HTWFwcyJ9LDQ4OTp7bjoiQnJ0RW5kTUdNYXBzIn0sNDkwOntuOiJCcnRCZWdpbk1HIn0sNDkxOntuOiJCcnRFbmRNRyJ9LDQ5Mjp7bjoiQnJ0QmVnaW5NYXAifSw0OTM6e246IkJydEVuZE1hcCJ9LDQ5''@;'; put 'put ''NDp7bjoiQnJ0SExpbmsiLGY6ZnVuY3Rpb24gVWooUyxSKXt2YXIgaz1TLmwrUixHPW11KFMsMTYpLFE9dDAoUyksb2U9Z3UoUyksZ2U9Z3UoUykscGU9Z3UoUyk7Uy5sPWs7dmFyIHllPXtyZng6RyxyZWxJZDpRLGxvYzpvZSxkaXNwbGF5OnBlfTtyZXR1cm4gZ2UmJih5ZS5Ub29sdGlwPWdl''@;'; put 'put ''KSx5ZX19LDQ5NTp7bjoiQnJ0QmVnaW5EQ29uIn0sNDk2OntuOiJCcnRFbmREQ29uIn0sNDk3OntuOiJCcnRCZWdpbkRSZWZzIn0sNDk4OntuOiJCcnRFbmREUmVmcyJ9LDQ5OTp7bjoiQnJ0RFJlZiJ9LDUwMDp7bjoiQnJ0QmVnaW5TY2VuTWFuIn0sNTAxOntuOiJCcnRFbmRTY2VuTWFuIn0s''@;'; put 'put ''NTAyOntuOiJCcnRCZWdpblNjdCJ9LDUwMzp7bjoiQnJ0RW5kU2N0In0sNTA0OntuOiJCcnRTbGMifSw1MDU6e246IkJydEJlZ2luRFhGcyJ9LDUwNjp7bjoiQnJ0RW5kRFhGcyJ9LDUwNzp7bjoiQnJ0RFhGIn0sNTA4OntuOiJCcnRCZWdpblRhYmxlU3R5bGVzIn0sNTA5OntuOiJCcnRFbmRU''@;'; put 'put ''YWJsZVN0eWxlcyJ9LDUxMDp7bjoiQnJ0QmVnaW5UYWJsZVN0eWxlIn0sNTExOntuOiJCcnRFbmRUYWJsZVN0eWxlIn0sNTEyOntuOiJCcnRUYWJsZVN0eWxlRWxlbWVudCJ9LDUxMzp7bjoiQnJ0VGFibGVTdHlsZUNsaWVudCJ9LDUxNDp7bjoiQnJ0QmVnaW5Wb2xEZXBzIn0sNTE1OntuOiJC''@;'; put 'put ''cnRFbmRWb2xEZXBzIn0sNTE2OntuOiJCcnRCZWdpblZvbFR5cGUifSw1MTc6e246IkJydEVuZFZvbFR5cGUifSw1MTg6e246IkJydEJlZ2luVm9sTWFpbiJ9LDUxOTp7bjoiQnJ0RW5kVm9sTWFpbiJ9LDUyMDp7bjoiQnJ0QmVnaW5Wb2xUb3BpYyJ9LDUyMTp7bjoiQnJ0RW5kVm9sVG9waWMi''@;'; put 'put ''fSw1MjI6e246IkJydFZvbFN1YnRvcGljIn0sNTIzOntuOiJCcnRWb2xSZWYifSw1MjQ6e246IkJydFZvbE51bSJ9LDUyNTp7bjoiQnJ0Vm9sRXJyIn0sNTI2OntuOiJCcnRWb2xTdHIifSw1Mjc6e246IkJydFZvbEJvb2wifSw1Mjg6e246IkJydEJlZ2luQ2FsY0NoYWluJCJ9LDUyOTp7bjoi''@;'; put 'put ''QnJ0RW5kQ2FsY0NoYWluJCJ9LDUzMDp7bjoiQnJ0QmVnaW5Tb3J0U3RhdGUifSw1MzE6e246IkJydEVuZFNvcnRTdGF0ZSJ9LDUzMjp7bjoiQnJ0QmVnaW5Tb3J0Q29uZCJ9LDUzMzp7bjoiQnJ0RW5kU29ydENvbmQifSw1MzQ6e246IkJydEJvb2tQcm90ZWN0aW9uIn0sNTM1OntuOiJCcnRT''@;'; put 'put ''aGVldFByb3RlY3Rpb24ifSw1MzY6e246IkJydFJhbmdlUHJvdGVjdGlvbiJ9LDUzNzp7bjoiQnJ0UGhvbmV0aWNJbmZvIn0sNTM4OntuOiJCcnRCZWdpbkVDVHh0V2l6In0sNTM5OntuOiJCcnRFbmRFQ1R4dFdpeiJ9LDU0MDp7bjoiQnJ0QmVnaW5FQ1RXRmxkSW5mb0xzdCJ9LDU0MTp7bjoi''@;'; put 'put ''QnJ0RW5kRUNUV0ZsZEluZm9Mc3QifSw1NDI6e246IkJydEJlZ2luRUNUd0ZsZEluZm8ifSw1NDg6e246IkJydEZpbGVTaGFyaW5nIn0sNTQ5OntuOiJCcnRPbGVTaXplIn0sNTUwOntuOiJCcnREcmF3aW5nIixmOmc0fSw1NTE6e246IkJydExlZ2FjeURyYXdpbmcifSw1NTI6e246IkJydExl''@;'; put 'put ''Z2FjeURyYXdpbmdIRiJ9LDU1Mzp7bjoiQnJ0V2ViT3B0In0sNTU0OntuOiJCcnRCZWdpbldlYlB1Ykl0ZW1zIn0sNTU1OntuOiJCcnRFbmRXZWJQdWJJdGVtcyJ9LDU1Njp7bjoiQnJ0QmVnaW5XZWJQdWJJdGVtIn0sNTU3OntuOiJCcnRFbmRXZWJQdWJJdGVtIn0sNTU4OntuOiJCcnRCZWdp''@;'; put 'put ''blNYQ29uZEZtdCJ9LDU1OTp7bjoiQnJ0RW5kU1hDb25kRm10In0sNTYwOntuOiJCcnRCZWdpblNYQ29uZEZtdHMifSw1NjE6e246IkJydEVuZFNYQ29uZEZtdHMifSw1NjI6e246IkJydEJrSGltIn0sNTY0OntuOiJCcnRDb2xvciJ9LDU2NTp7bjoiQnJ0QmVnaW5JbmRleGVkQ29sb3JzIn0s''@;'; put 'put ''NTY2OntuOiJCcnRFbmRJbmRleGVkQ29sb3JzIn0sNTY5OntuOiJCcnRCZWdpbk1SVUNvbG9ycyJ9LDU3MDp7bjoiQnJ0RW5kTVJVQ29sb3JzIn0sNTcyOntuOiJCcnRNUlVDb2xvciJ9LDU3Mzp7bjoiQnJ0QmVnaW5EVmFscyJ9LDU3NDp7bjoiQnJ0RW5kRFZhbHMifSw1Nzc6e246IkJydFN1''@;'; put 'put ''cE5hbWVTdGFydCJ9LDU3ODp7bjoiQnJ0U3VwTmFtZVZhbHVlU3RhcnQifSw1Nzk6e246IkJydFN1cE5hbWVWYWx1ZUVuZCJ9LDU4MDp7bjoiQnJ0U3VwTmFtZU51bSJ9LDU4MTp7bjoiQnJ0U3VwTmFtZUVyciJ9LDU4Mjp7bjoiQnJ0U3VwTmFtZVN0In0sNTgzOntuOiJCcnRTdXBOYW1lTmls''@;'; put 'put ''In0sNTg0OntuOiJCcnRTdXBOYW1lQm9vbCJ9LDU4NTp7bjoiQnJ0U3VwTmFtZUZtbGEifSw1ODY6e246IkJydFN1cE5hbWVCaXRzIn0sNTg3OntuOiJCcnRTdXBOYW1lRW5kIn0sNTg4OntuOiJCcnRFbmRTdXBCb29rIn0sNTg5OntuOiJCcnRDZWxsU21hcnRUYWdQcm9wZXJ0eSJ9LDU5MDp7''@;'; put 'put ''bjoiQnJ0QmVnaW5DZWxsU21hcnRUYWcifSw1OTE6e246IkJydEVuZENlbGxTbWFydFRhZyJ9LDU5Mjp7bjoiQnJ0QmVnaW5DZWxsU21hcnRUYWdzIn0sNTkzOntuOiJCcnRFbmRDZWxsU21hcnRUYWdzIn0sNTk0OntuOiJCcnRCZWdpblNtYXJ0VGFncyJ9LDU5NTp7bjoiQnJ0RW5kU21hcnRU''@;'; put 'put ''YWdzIn0sNTk2OntuOiJCcnRTbWFydFRhZ1R5cGUifSw1OTc6e246IkJydEJlZ2luU21hcnRUYWdUeXBlcyJ9LDU5ODp7bjoiQnJ0RW5kU21hcnRUYWdUeXBlcyJ9LDU5OTp7bjoiQnJ0QmVnaW5TWEZpbHRlcnMifSw2MDA6e246IkJydEVuZFNYRmlsdGVycyJ9LDYwMTp7bjoiQnJ0QmVnaW5T''@;'; put 'put ''WEZJTFRFUiJ9LDYwMjp7bjoiQnJ0RW5kU1hGaWx0ZXIifSw2MDM6e246IkJydEJlZ2luRmlsbHMifSw2MDQ6e246IkJydEVuZEZpbGxzIn0sNjA1OntuOiJCcnRCZWdpbkNlbGxXYXRjaGVzIn0sNjA2OntuOiJCcnRFbmRDZWxsV2F0Y2hlcyJ9LDYwNzp7bjoiQnJ0Q2VsbFdhdGNoIn0sNjA4''@;'; put 'put ''OntuOiJCcnRCZWdpbkNSRXJycyJ9LDYwOTp7bjoiQnJ0RW5kQ1JFcnJzIn0sNjEwOntuOiJCcnRDcmFzaFJlY0VyciJ9LDYxMTp7bjoiQnJ0QmVnaW5Gb250cyJ9LDYxMjp7bjoiQnJ0RW5kRm9udHMifSw2MTM6e246IkJydEJlZ2luQm9yZGVycyJ9LDYxNDp7bjoiQnJ0RW5kQm9yZGVycyJ9''@;'; put 'put ''LDYxNTp7bjoiQnJ0QmVnaW5GbXRzIn0sNjE2OntuOiJCcnRFbmRGbXRzIn0sNjE3OntuOiJCcnRCZWdpbkNlbGxYRnMifSw2MTg6e246IkJydEVuZENlbGxYRnMifSw2MTk6e246IkJydEJlZ2luU3R5bGVzIn0sNjIwOntuOiJCcnRFbmRTdHlsZXMifSw2MjU6e246IkJydEJpZ05hbWUifSw2''@;'; put 'put ''MjY6e246IkJydEJlZ2luQ2VsbFN0eWxlWEZzIn0sNjI3OntuOiJCcnRFbmRDZWxsU3R5bGVYRnMifSw2Mjg6e246IkJydEJlZ2luQ29tbWVudHMifSw2Mjk6e246IkJydEVuZENvbW1lbnRzIn0sNjMwOntuOiJCcnRCZWdpbkNvbW1lbnRBdXRob3JzIn0sNjMxOntuOiJCcnRFbmRDb21tZW50''@;'; put 'put ''QXV0aG9ycyJ9LDYzMjp7bjoiQnJ0Q29tbWVudEF1dGhvciIsZjp3Qn0sNjMzOntuOiJCcnRCZWdpbkNvbW1lbnRMaXN0In0sNjM0OntuOiJCcnRFbmRDb21tZW50TGlzdCJ9LDYzNTp7bjoiQnJ0QmVnaW5Db21tZW50IixmOmZ1bmN0aW9uIEY1KFMpe3ZhciBSPXt9O1IuaWF1dGhvcj1TLnJl''@;'; put 'put ''YWRfc2hpZnQoNCk7dmFyIGs9bXUoUywxNik7cmV0dXJuIFIucmZ4PWsucyxSLnJlZj1xaShrLnMpLFMubCs9MTYsUn19LDYzNjp7bjoiQnJ0RW5kQ29tbWVudCJ9LDYzNzp7bjoiQnJ0Q29tbWVudFRleHQiLGY6THd9LDYzODp7bjoiQnJ0QmVnaW5PbGVPYmplY3RzIn0sNjM5OntuOiJCcnRP''@;'; put 'put ''bGVPYmplY3QifSw2NDA6e246IkJydEVuZE9sZU9iamVjdHMifSw2NDE6e246IkJydEJlZ2luU3hydWxlcyJ9LDY0Mjp7bjoiQnJ0RW5kU3hSdWxlcyJ9LDY0Mzp7bjoiQnJ0QmVnaW5BY3RpdmVYQ29udHJvbHMifSw2NDQ6e246IkJydEFjdGl2ZVgifSw2NDU6e246IkJydEVuZEFjdGl2ZVhD''@;'; put 'put ''b250cm9scyJ9LDY0Njp7bjoiQnJ0QmVnaW5QQ0RTRFRDRU1lbWJlcnNTb3J0QnkifSw2NDg6e246IkJydEJlZ2luQ2VsbElnbm9yZUVDcyJ9LDY0OTp7bjoiQnJ0Q2VsbElnbm9yZUVDIn0sNjUwOntuOiJCcnRFbmRDZWxsSWdub3JlRUNzIn0sNjUxOntuOiJCcnRDc1Byb3AiLGY6ZnVuY3Rp''@;'; put 'put ''b24gZHooUyxSKXtyZXR1cm4gUy5sKz0xMCx7bmFtZTpndShTKX19fSw2NTI6e246IkJydENzUGFnZVNldHVwIn0sNjUzOntuOiJCcnRCZWdpblVzZXJDc1ZpZXdzIn0sNjU0OntuOiJCcnRFbmRVc2VyQ3NWaWV3cyJ9LDY1NTp7bjoiQnJ0QmVnaW5Vc2VyQ3NWaWV3In0sNjU2OntuOiJCcnRF''@;'; put 'put ''bmRVc2VyQ3NWaWV3In0sNjU3OntuOiJCcnRCZWdpblBjZFNGQ0lFbnRyaWVzIn0sNjU4OntuOiJCcnRFbmRQQ0RTRkNJRW50cmllcyJ9LDY1OTp7bjoiQnJ0UENEU0ZDSUVudHJ5In0sNjYwOntuOiJCcnRCZWdpbkxpc3RQYXJ0cyJ9LDY2MTp7bjoiQnJ0TGlzdFBhcnQifSw2NjI6e246IkJy''@;'; put 'put ''dEVuZExpc3RQYXJ0cyJ9LDY2Mzp7bjoiQnJ0U2hlZXRDYWxjUHJvcCJ9LDY2NDp7bjoiQnJ0QmVnaW5Gbkdyb3VwIn0sNjY1OntuOiJCcnRGbkdyb3VwIn0sNjY2OntuOiJCcnRFbmRGbkdyb3VwIn0sNjY3OntuOiJCcnRTdXBBZGRpbiJ9LDY2ODp7bjoiQnJ0U1hURE1QT3JkZXIifSw2Njk6''@;'; put 'put ''e246IkJydENzUHJvdGVjdGlvbiJ9LDY3MTp7bjoiQnJ0QmVnaW5Xc1NvcnRNYXAifSw2NzI6e246IkJydEVuZFdzU29ydE1hcCJ9LDY3Mzp7bjoiQnJ0QmVnaW5SUlNvcnQifSw2NzQ6e246IkJydEVuZFJSU29ydCJ9LDY3NTp7bjoiQnJ0UlJTb3J0SXRlbSJ9LDY3Njp7bjoiQnJ0RmlsZVNo''@;'; put 'put ''YXJpbmdJc28ifSw2Nzc6e246IkJydEJvb2tQcm90ZWN0aW9uSXNvIn0sNjc4OntuOiJCcnRTaGVldFByb3RlY3Rpb25Jc28ifSw2Nzk6e246IkJydENzUHJvdGVjdGlvbklzbyJ9LDY4MDp7bjoiQnJ0UmFuZ2VQcm90ZWN0aW9uSXNvIn0sNjgxOntuOiJCcnREVmFsTGlzdCJ9LDEwMjQ6e246''@;'; put 'put ''IkJydFJ3RGVzY2VudCJ9LDEwMjU6e246IkJydEtub3duRm9udHMifSwxMDI2OntuOiJCcnRCZWdpblNYVHVwbGVTZXQifSwxMDI3OntuOiJCcnRFbmRTWFR1cGxlU2V0In0sMTAyODp7bjoiQnJ0QmVnaW5TWFR1cGxlU2V0SGVhZGVyIn0sMTAyOTp7bjoiQnJ0RW5kU1hUdXBsZVNldEhlYWRl''@;'; put 'put ''ciJ9LDEwMzA6e246IkJydFNYVHVwbGVTZXRIZWFkZXJJdGVtIn0sMTAzMTp7bjoiQnJ0QmVnaW5TWFR1cGxlU2V0RGF0YSJ9LDEwMzI6e246IkJydEVuZFNYVHVwbGVTZXREYXRhIn0sMTAzMzp7bjoiQnJ0QmVnaW5TWFR1cGxlU2V0Um93In0sMTAzNDp7bjoiQnJ0RW5kU1hUdXBsZVNldFJv''@;'; put 'put ''dyJ9LDEwMzU6e246IkJydFNYVHVwbGVTZXRSb3dJdGVtIn0sMTAzNjp7bjoiQnJ0TmFtZUV4dCJ9LDEwMzc6e246IkJydFBDREgxNCJ9LDEwMzg6e246IkJydEJlZ2luUENEQ2FsY01lbTE0In0sMTAzOTp7bjoiQnJ0RW5kUENEQ2FsY01lbTE0In0sMTA0MDp7bjoiQnJ0U1hUSDE0In0sMTA0''@;'; put 'put ''MTp7bjoiQnJ0QmVnaW5TcGFya2xpbmVHcm91cCJ9LDEwNDI6e246IkJydEVuZFNwYXJrbGluZUdyb3VwIn0sMTA0Mzp7bjoiQnJ0U3BhcmtsaW5lIn0sMTA0NDp7bjoiQnJ0U1hESTE0In0sMTA0NTp7bjoiQnJ0V3NGbXRJbmZvRXgxNCJ9LDEwNDY6e246IkJydEJlZ2luQ29uZGl0aW9uYWxG''@;'; put 'put ''b3JtYXR0aW5nMTQifSwxMDQ3OntuOiJCcnRFbmRDb25kaXRpb25hbEZvcm1hdHRpbmcxNCJ9LDEwNDg6e246IkJydEJlZ2luQ0ZSdWxlMTQifSwxMDQ5OntuOiJCcnRFbmRDRlJ1bGUxNCJ9LDEwNTA6e246IkJydENGVk8xNCJ9LDEwNTE6e246IkJydEJlZ2luRGF0YWJhcjE0In0sMTA1Mjp7''@;'; put 'put ''bjoiQnJ0QmVnaW5JY29uU2V0MTQifSwxMDUzOntuOiJCcnREVmFsMTQiLGY6ZnVuY3Rpb24gSVMoUyxSLGspe3ZhciBHPWZ1bmN0aW9uIGRuKFMsUixrKXt2YXIgRz1TLnJlYWRfc2hpZnQoNCksUT17fTtyZXR1cm4gMSZHJiYoUS5yZWZzPWZ1bmN0aW9uIHFuKFMpe2Zvcih2YXIgUj1TLnJl''@;'; put 'put ''YWRfc2hpZnQoNCksaz1bXTtSLS0gPjA7KWsucHVzaChpaShTKSk7cmV0dXJuIGt9KFMpKSwyJkcmJihRLnNxcmVmcz1mdW5jdGlvbiBJYShTKXtmb3IodmFyIFI9Uy5yZWFkX3NoaWZ0KDQpLGs9W107Ui0tID4wOylrLnB1c2goU28oUykpO3JldHVybiBrfShTKSksNCZHJiYoUS5mb3JtdWxh''@;'; put 'put ''cz1mdW5jdGlvbiBmcyhTLFIsayl7Zm9yKHZhciBHPVMucmVhZF9zaGlmdCg0KSxRPVtdO0ctLSA+MDspUS5wdXNoKE51KFMsMCxrKSk7cmV0dXJuIFF9KFMsMCxrKSksOCZHJiYoUS5yZWxJRD1mdW5jdGlvbiBsdihTKXt2YXIgUj1TLnJlYWRfc2hpZnQoMik7cmV0dXJuIDA9PT1SPyIiOlMu''@;'; put 'put ''cmVhZF9zaGlmdChSLCJ1dGYxNmxlIil9KFMpKSxRfShTLDAsayksUT1TLnJlYWRfc2hpZnQoNCksb2U9dDAoUyksZ2U9dDAoUykscGU9dDAoUykseWU9dDAoUyksUGU9KEcuZm9ybXVsYXN8fFtdKVswXSxOZT0oRy5mb3JtdWxhc3x8W10pWzFdLFllPTE1JlEsZXQ9e3Q6cURbWWVdLHNxcmZ4''@;'; put 'put ''Okcuc3FyZWZzWzBdLHM6W29lLGdlLHBlLHllXX07cmV0dXJuIFBlJiYoZXQuZjE9UGUpLE5lJiYoZXQuZjI9TmUpLDA9PVllfHwzPT1ZZXx8Nz09WWV8fChldC5vcD1EU1tRPj4yMCYxNV0pLGV0fX0sMTA1NDp7bjoiQnJ0QmVnaW5EVmFsczE0In0sMTA1NTp7bjoiQnJ0Q29sb3IxNCJ9LDEw''@;'; put 'put ''NTY6e246IkJydEJlZ2luU3BhcmtsaW5lcyJ9LDEwNTc6e246IkJydEVuZFNwYXJrbGluZXMifSwxMDU4OntuOiJCcnRCZWdpblNwYXJrbGluZUdyb3VwcyJ9LDEwNTk6e246IkJydEVuZFNwYXJrbGluZUdyb3VwcyJ9LDEwNjE6e246IkJydFNYVkQxNCJ9LDEwNjI6e246IkJydEJlZ2luU1hW''@;'; put 'put ''aWV3MTQifSwxMDYzOntuOiJCcnRFbmRTWFZpZXcxNCJ9LDEwNjQ6e246IkJydEJlZ2luU1hWaWV3MTYifSwxMDY1OntuOiJCcnRFbmRTWFZpZXcxNiJ9LDEwNjY6e246IkJydEJlZ2luUENEMTQifSwxMDY3OntuOiJCcnRFbmRQQ0QxNCJ9LDEwNjg6e246IkJydEJlZ2luRXh0Q29ubjE0In0s''@;'; put 'put ''MTA2OTp7bjoiQnJ0RW5kRXh0Q29ubjE0In0sMTA3MDp7bjoiQnJ0QmVnaW5TbGljZXJDYWNoZUlEcyJ9LDEwNzE6e246IkJydEVuZFNsaWNlckNhY2hlSURzIn0sMTA3Mjp7bjoiQnJ0QmVnaW5TbGljZXJDYWNoZUlEIn0sMTA3Mzp7bjoiQnJ0RW5kU2xpY2VyQ2FjaGVJRCJ9LDEwNzU6e246''@;'; put 'put ''IkJydEJlZ2luU2xpY2VyQ2FjaGUifSwxMDc2OntuOiJCcnRFbmRTbGljZXJDYWNoZSJ9LDEwNzc6e246IkJydEJlZ2luU2xpY2VyQ2FjaGVEZWYifSwxMDc4OntuOiJCcnRFbmRTbGljZXJDYWNoZURlZiJ9LDEwNzk6e246IkJydEJlZ2luU2xpY2Vyc0V4In0sMTA4MDp7bjoiQnJ0RW5kU2xp''@;'; put 'put ''Y2Vyc0V4In0sMTA4MTp7bjoiQnJ0QmVnaW5TbGljZXJFeCJ9LDEwODI6e246IkJydEVuZFNsaWNlckV4In0sMTA4Mzp7bjoiQnJ0QmVnaW5TbGljZXIifSwxMDg0OntuOiJCcnRFbmRTbGljZXIifSwxMDg1OntuOiJCcnRTbGljZXJDYWNoZVBpdm90VGFibGVzIn0sMTA4Njp7bjoiQnJ0QmVn''@;'; put 'put ''aW5TbGljZXJDYWNoZU9sYXBJbXBsIn0sMTA4Nzp7bjoiQnJ0RW5kU2xpY2VyQ2FjaGVPbGFwSW1wbCJ9LDEwODg6e246IkJydEJlZ2luU2xpY2VyQ2FjaGVMZXZlbHNEYXRhIn0sMTA4OTp7bjoiQnJ0RW5kU2xpY2VyQ2FjaGVMZXZlbHNEYXRhIn0sMTA5MDp7bjoiQnJ0QmVnaW5TbGljZXJD''@;'; put 'put ''YWNoZUxldmVsRGF0YSJ9LDEwOTE6e246IkJydEVuZFNsaWNlckNhY2hlTGV2ZWxEYXRhIn0sMTA5Mjp7bjoiQnJ0QmVnaW5TbGljZXJDYWNoZVNpUmFuZ2VzIn0sMTA5Mzp7bjoiQnJ0RW5kU2xpY2VyQ2FjaGVTaVJhbmdlcyJ9LDEwOTQ6e246IkJydEJlZ2luU2xpY2VyQ2FjaGVTaVJhbmdl''@;'; put 'put ''In0sMTA5NTp7bjoiQnJ0RW5kU2xpY2VyQ2FjaGVTaVJhbmdlIn0sMTA5Njp7bjoiQnJ0U2xpY2VyQ2FjaGVPbGFwSXRlbSJ9LDEwOTc6e246IkJydEJlZ2luU2xpY2VyQ2FjaGVTZWxlY3Rpb25zIn0sMTA5ODp7bjoiQnJ0U2xpY2VyQ2FjaGVTZWxlY3Rpb24ifSwxMDk5OntuOiJCcnRFbmRT''@;'; put 'put ''bGljZXJDYWNoZVNlbGVjdGlvbnMifSwxMTAwOntuOiJCcnRCZWdpblNsaWNlckNhY2hlTmF0aXZlIn0sMTEwMTp7bjoiQnJ0RW5kU2xpY2VyQ2FjaGVOYXRpdmUifSwxMTAyOntuOiJCcnRTbGljZXJDYWNoZU5hdGl2ZUl0ZW0ifSwxMTAzOntuOiJCcnRSYW5nZVByb3RlY3Rpb24xNCJ9LDEx''@;'; put 'put ''MDQ6e246IkJydFJhbmdlUHJvdGVjdGlvbklzbzE0In0sMTEwNTp7bjoiQnJ0Q2VsbElnbm9yZUVDMTQifSwxMTExOntuOiJCcnRMaXN0MTQifSwxMTEyOntuOiJCcnRDRkljb24ifSwxMTEzOntuOiJCcnRCZWdpblNsaWNlckNhY2hlc1Bpdm90Q2FjaGVJRHMifSwxMTE0OntuOiJCcnRFbmRT''@;'; put 'put ''bGljZXJDYWNoZXNQaXZvdENhY2hlSURzIn0sMTExNTp7bjoiQnJ0QmVnaW5TbGljZXJzIn0sMTExNjp7bjoiQnJ0RW5kU2xpY2VycyJ9LDExMTc6e246IkJydFdiUHJvcDE0In0sMTExODp7bjoiQnJ0QmVnaW5TWEVkaXQifSwxMTE5OntuOiJCcnRFbmRTWEVkaXQifSwxMTIwOntuOiJCcnRC''@;'; put 'put ''ZWdpblNYRWRpdHMifSwxMTIxOntuOiJCcnRFbmRTWEVkaXRzIn0sMTEyMjp7bjoiQnJ0QmVnaW5TWENoYW5nZSJ9LDExMjM6e246IkJydEVuZFNYQ2hhbmdlIn0sMTEyNDp7bjoiQnJ0QmVnaW5TWENoYW5nZXMifSwxMTI1OntuOiJCcnRFbmRTWENoYW5nZXMifSwxMTI2OntuOiJCcnRTWFR1''@;'; put 'put ''cGxlSXRlbXMifSwxMTI4OntuOiJCcnRCZWdpblNsaWNlclN0eWxlIn0sMTEyOTp7bjoiQnJ0RW5kU2xpY2VyU3R5bGUifSwxMTMwOntuOiJCcnRTbGljZXJTdHlsZUVsZW1lbnQifSwxMTMxOntuOiJCcnRCZWdpblN0eWxlU2hlZXRFeHQxNCJ9LDExMzI6e246IkJydEVuZFN0eWxlU2hlZXRF''@;'; put 'put ''eHQxNCJ9LDExMzM6e246IkJydEJlZ2luU2xpY2VyQ2FjaGVzUGl2b3RDYWNoZUlEIn0sMTEzNDp7bjoiQnJ0RW5kU2xpY2VyQ2FjaGVzUGl2b3RDYWNoZUlEIn0sMTEzNTp7bjoiQnJ0QmVnaW5Db25kaXRpb25hbEZvcm1hdHRpbmdzIn0sMTEzNjp7bjoiQnJ0RW5kQ29uZGl0aW9uYWxGb3Jt''@;'; put 'put ''YXR0aW5ncyJ9LDExMzc6e246IkJydEJlZ2luUENEQ2FsY01lbUV4dCJ9LDExMzg6e246IkJydEVuZFBDRENhbGNNZW1FeHQifSwxMTM5OntuOiJCcnRCZWdpblBDRENhbGNNZW1zRXh0In0sMTE0MDp7bjoiQnJ0RW5kUENEQ2FsY01lbXNFeHQifSwxMTQxOntuOiJCcnRQQ0RGaWVsZDE0In0s''@;'; put 'put ''MTE0Mjp7bjoiQnJ0QmVnaW5TbGljZXJTdHlsZXMifSwxMTQzOntuOiJCcnRFbmRTbGljZXJTdHlsZXMifSwxMTQ0OntuOiJCcnRCZWdpblNsaWNlclN0eWxlRWxlbWVudHMifSwxMTQ1OntuOiJCcnRFbmRTbGljZXJTdHlsZUVsZW1lbnRzIn0sMTE0Njp7bjoiQnJ0Q0ZSdWxlRXh0In0sMTE0''@;'; put 'put ''Nzp7bjoiQnJ0QmVnaW5TWENvbmRGbXQxNCJ9LDExNDg6e246IkJydEVuZFNYQ29uZEZtdDE0In0sMTE0OTp7bjoiQnJ0QmVnaW5TWENvbmRGbXRzMTQifSwxMTUwOntuOiJCcnRFbmRTWENvbmRGbXRzMTQifSwxMTUyOntuOiJCcnRCZWdpblNvcnRDb25kMTQifSwxMTUzOntuOiJCcnRFbmRT''@;'; put 'put ''b3J0Q29uZDE0In0sMTE1NDp7bjoiQnJ0RW5kRFZhbHMxNCJ9LDExNTU6e246IkJydEVuZEljb25TZXQxNCJ9LDExNTY6e246IkJydEVuZERhdGFiYXIxNCJ9LDExNTc6e246IkJydEJlZ2luQ29sb3JTY2FsZTE0In0sMTE1ODp7bjoiQnJ0RW5kQ29sb3JTY2FsZTE0In0sMTE1OTp7bjoiQnJ0''@;'; put 'put ''QmVnaW5TeHJ1bGVzMTQifSwxMTYwOntuOiJCcnRFbmRTeHJ1bGVzMTQifSwxMTYxOntuOiJCcnRCZWdpblBSdWxlMTQifSwxMTYyOntuOiJCcnRFbmRQUnVsZTE0In0sMTE2Mzp7bjoiQnJ0QmVnaW5QUkZpbHRlcnMxNCJ9LDExNjQ6e246IkJydEVuZFBSRmlsdGVyczE0In0sMTE2NTp7bjoi''@;'; put 'put ''QnJ0QmVnaW5QUkZpbHRlcjE0In0sMTE2Njp7bjoiQnJ0RW5kUFJGaWx0ZXIxNCJ9LDExNjc6e246IkJydEJlZ2luUFJGSXRlbTE0In0sMTE2ODp7bjoiQnJ0RW5kUFJGSXRlbTE0In0sMTE2OTp7bjoiQnJ0QmVnaW5DZWxsSWdub3JlRUNzMTQifSwxMTcwOntuOiJCcnRFbmRDZWxsSWdub3Jl''@;'; put 'put ''RUNzMTQifSwxMTcxOntuOiJCcnREeGYxNCJ9LDExNzI6e246IkJydEJlZ2luRHhGMTRzIn0sMTE3Mzp7bjoiQnJ0RW5kRHhmMTRzIn0sMTE3Nzp7bjoiQnJ0RmlsdGVyMTQifSwxMTc4OntuOiJCcnRCZWdpbkN1c3RvbUZpbHRlcnMxNCJ9LDExODA6e246IkJydEN1c3RvbUZpbHRlcjE0In0s''@;'; put 'put ''MTE4MTp7bjoiQnJ0SWNvbkZpbHRlcjE0In0sMTE4Mjp7bjoiQnJ0UGl2b3RDYWNoZUNvbm5lY3Rpb25OYW1lIn0sMjA0ODp7bjoiQnJ0QmVnaW5EZWNvdXBsZWRQaXZvdENhY2hlSURzIn0sMjA0OTp7bjoiQnJ0RW5kRGVjb3VwbGVkUGl2b3RDYWNoZUlEcyJ9LDIwNTA6e246IkJydERlY291''@;'; put 'put ''cGxlZFBpdm90Q2FjaGVJRCJ9LDIwNTE6e246IkJydEJlZ2luUGl2b3RUYWJsZVJlZnMifSwyMDUyOntuOiJCcnRFbmRQaXZvdFRhYmxlUmVmcyJ9LDIwNTM6e246IkJydFBpdm90VGFibGVSZWYifSwyMDU0OntuOiJCcnRTbGljZXJDYWNoZUJvb2tQaXZvdFRhYmxlcyJ9LDIwNTU6e246IkJy''@;'; put 'put ''dEJlZ2luU3h2Y2VsbHMifSwyMDU2OntuOiJCcnRFbmRTeHZjZWxscyJ9LDIwNTc6e246IkJydEJlZ2luU3hSb3cifSwyMDU4OntuOiJCcnRFbmRTeFJvdyJ9LDIwNjA6e246IkJydFBjZENhbGNNZW0xNSJ9LDIwNjc6e246IkJydFFzaTE1In0sMjA2ODp7bjoiQnJ0QmVnaW5XZWJFeHRlbnNp''@;'; put 'put ''b25zIn0sMjA2OTp7bjoiQnJ0RW5kV2ViRXh0ZW5zaW9ucyJ9LDIwNzA6e246IkJydFdlYkV4dGVuc2lvbiJ9LDIwNzE6e246IkJydEFic1BhdGgxNSJ9LDIwNzI6e246IkJydEJlZ2luUGl2b3RUYWJsZVVJU2V0dGluZ3MifSwyMDczOntuOiJCcnRFbmRQaXZvdFRhYmxlVUlTZXR0aW5ncyJ9''@;'; put 'put ''LDIwNzU6e246IkJydFRhYmxlU2xpY2VyQ2FjaGVJRHMifSwyMDc2OntuOiJCcnRUYWJsZVNsaWNlckNhY2hlSUQifSwyMDc3OntuOiJCcnRCZWdpblRhYmxlU2xpY2VyQ2FjaGUifSwyMDc4OntuOiJCcnRFbmRUYWJsZVNsaWNlckNhY2hlIn0sMjA3OTp7bjoiQnJ0U3hGaWx0ZXIxNSJ9LDIw''@;'; put 'put ''ODA6e246IkJydEJlZ2luVGltZWxpbmVDYWNoZVBpdm90Q2FjaGVJRHMifSwyMDgxOntuOiJCcnRFbmRUaW1lbGluZUNhY2hlUGl2b3RDYWNoZUlEcyJ9LDIwODI6e246IkJydFRpbWVsaW5lQ2FjaGVQaXZvdENhY2hlSUQifSwyMDgzOntuOiJCcnRCZWdpblRpbWVsaW5lQ2FjaGVJRHMifSwy''@;'; put 'put ''MDg0OntuOiJCcnRFbmRUaW1lbGluZUNhY2hlSURzIn0sMjA4NTp7bjoiQnJ0QmVnaW5UaW1lbGluZUNhY2hlSUQifSwyMDg2OntuOiJCcnRFbmRUaW1lbGluZUNhY2hlSUQifSwyMDg3OntuOiJCcnRCZWdpblRpbWVsaW5lc0V4In0sMjA4ODp7bjoiQnJ0RW5kVGltZWxpbmVzRXgifSwyMDg5''@;'; put 'put ''OntuOiJCcnRCZWdpblRpbWVsaW5lRXgifSwyMDkwOntuOiJCcnRFbmRUaW1lbGluZUV4In0sMjA5MTp7bjoiQnJ0V29ya0Jvb2tQcjE1In0sMjA5Mjp7bjoiQnJ0UENESDE1In0sMjA5Mzp7bjoiQnJ0QmVnaW5UaW1lbGluZVN0eWxlIn0sMjA5NDp7bjoiQnJ0RW5kVGltZWxpbmVTdHlsZSJ9''@;'; put 'put ''LDIwOTU6e246IkJydFRpbWVsaW5lU3R5bGVFbGVtZW50In0sMjA5Njp7bjoiQnJ0QmVnaW5UaW1lbGluZVN0eWxlc2hlZXRFeHQxNSJ9LDIwOTc6e246IkJydEVuZFRpbWVsaW5lU3R5bGVzaGVldEV4dDE1In0sMjA5ODp7bjoiQnJ0QmVnaW5UaW1lbGluZVN0eWxlcyJ9LDIwOTk6e246IkJy''@;'; put 'put ''dEVuZFRpbWVsaW5lU3R5bGVzIn0sMjEwMDp7bjoiQnJ0QmVnaW5UaW1lbGluZVN0eWxlRWxlbWVudHMifSwyMTAxOntuOiJCcnRFbmRUaW1lbGluZVN0eWxlRWxlbWVudHMifSwyMTAyOntuOiJCcnREeGYxNSJ9LDIxMDM6e246IkJydEJlZ2luRHhmczE1In0sMjEwNDp7bjoiYnJ0RW5kRHhm''@;'; put 'put ''czE1In0sMjEwNTp7bjoiQnJ0U2xpY2VyQ2FjaGVIaWRlSXRlbXNXaXRoTm9EYXRhIn0sMjEwNjp7bjoiQnJ0QmVnaW5JdGVtVW5pcXVlTmFtZXMifSwyMTA3OntuOiJCcnRFbmRJdGVtVW5pcXVlTmFtZXMifSwyMTA4OntuOiJCcnRJdGVtVW5pcXVlTmFtZSJ9LDIxMDk6e246IkJydEJlZ2lu''@;'; put 'put ''RXh0Q29ubjE1In0sMjExMDp7bjoiQnJ0RW5kRXh0Q29ubjE1In0sMjExMTp7bjoiQnJ0QmVnaW5PbGVkYlByMTUifSwyMTEyOntuOiJCcnRFbmRPbGVkYlByMTUifSwyMTEzOntuOiJCcnRCZWdpbkRhdGFGZWVkUHIxNSJ9LDIxMTQ6e246IkJydEVuZERhdGFGZWVkUHIxNSJ9LDIxMTU6e246''@;'; put 'put ''IkJydFRleHRQcjE1In0sMjExNjp7bjoiQnJ0UmFuZ2VQcjE1In0sMjExNzp7bjoiQnJ0RGJDb21tYW5kMTUifSwyMTE4OntuOiJCcnRCZWdpbkRiVGFibGVzMTUifSwyMTE5OntuOiJCcnRFbmREYlRhYmxlczE1In0sMjEyMDp7bjoiQnJ0RGJUYWJsZTE1In0sMjEyMTp7bjoiQnJ0QmVnaW5E''@;'; put 'put ''YXRhTW9kZWwifSwyMTIyOntuOiJCcnRFbmREYXRhTW9kZWwifSwyMTIzOntuOiJCcnRCZWdpbk1vZGVsVGFibGVzIn0sMjEyNDp7bjoiQnJ0RW5kTW9kZWxUYWJsZXMifSwyMTI1OntuOiJCcnRNb2RlbFRhYmxlIn0sMjEyNjp7bjoiQnJ0QmVnaW5Nb2RlbFJlbGF0aW9uc2hpcHMifSwyMTI3''@;'; put 'put ''OntuOiJCcnRFbmRNb2RlbFJlbGF0aW9uc2hpcHMifSwyMTI4OntuOiJCcnRNb2RlbFJlbGF0aW9uc2hpcCJ9LDIxMjk6e246IkJydEJlZ2luRUNUeHRXaXoxNSJ9LDIxMzA6e246IkJydEVuZEVDVHh0V2l6MTUifSwyMTMxOntuOiJCcnRCZWdpbkVDVFdGbGRJbmZvTHN0MTUifSwyMTMyOntu''@;'; put 'put ''OiJCcnRFbmRFQ1RXRmxkSW5mb0xzdDE1In0sMjEzMzp7bjoiQnJ0QmVnaW5FQ1RXRmxkSW5mbzE1In0sMjEzNDp7bjoiQnJ0RmllbGRMaXN0QWN0aXZlSXRlbSJ9LDIxMzU6e246IkJydFBpdm90Q2FjaGVJZFZlcnNpb24ifSwyMTM2OntuOiJCcnRTWERJMTUifSwyMTM3OntuOiJCcnRCZWdp''@;'; put 'put ''bk1vZGVsVGltZUdyb3VwaW5ncyJ9LDIxMzg6e246IkJydEVuZE1vZGVsVGltZUdyb3VwaW5ncyJ9LDIxMzk6e246IkJydEJlZ2luTW9kZWxUaW1lR3JvdXBpbmcifSwyMTQwOntuOiJCcnRFbmRNb2RlbFRpbWVHcm91cGluZyJ9LDIxNDE6e246IkJydE1vZGVsVGltZUdyb3VwaW5nQ2FsY0Nv''@;'; put 'put ''bCJ9LDMwNzI6e246IkJydFVpZCJ9LDMwNzM6e246IkJydFJldmlzaW9uUHRyIn0sNTA5NTp7bjoiQnJ0QmVnaW5DYWxjRmVhdHVyZXMifSw1MDk2OntuOiJCcnRFbmRDYWxjRmVhdHVyZXMifSw1MDk3OntuOiJCcnRDYWxjRmVhdHVyZSJ9LDY1NTM1OntuOiIifX0sSHo9SWUoTDgsIm4iKTtI''@;'; put 'put ''ei5CcnRGUlRBcmNoSUQkPTE2O3ZhciBLUz17Njp7bjoiRm9ybXVsYSIsZjpRQ30sMTA6e246IkVPRiIsZjpyMn0sMTI6e246IkNhbGNDb3VudCIsZjpFY30sMTM6e246IkNhbGNNb2RlIixmOkVjfSwxNDp7bjoiQ2FsY1ByZWNpc2lvbiIsZjp1b30sMTU6e246IkNhbGNSZWZNb2RlIixmOnVv''@;'; put 'put ''fSwxNjp7bjoiQ2FsY0RlbHRhIixmOlBsfSwxNzp7bjoiQ2FsY0l0ZXIiLGY6dW99LDE4OntuOiJQcm90ZWN0IixmOnVvfSwxOTp7bjoiUGFzc3dvcmQiLGY6RWN9LDIwOntuOiJIZWFkZXIiLGY6SkF9LDIxOntuOiJGb290ZXIiLGY6SkF9LDIzOntuOiJFeHRlcm5TaGVldCIsZjpUdn0sMjQ6''@;'; put 'put ''e246IkxibCIsZjp0Q30sMjU6e246IldpblByb3RlY3QiLGY6dW99LDI2OntuOiJWZXJ0aWNhbFBhZ2VCcmVha3MifSwyNzp7bjoiSG9yaXpvbnRhbFBhZ2VCcmVha3MifSwyODp7bjoiTm90ZSIsZjpmdW5jdGlvbiBRQShTLFIsayl7cmV0dXJuIGZ1bmN0aW9uIENvKFMsUixrKXtpZighKGsu''@;'; put 'put ''YmlmZjw4KSl7dmFyIEc9Uy5yZWFkX3NoaWZ0KDIpLFE9Uy5yZWFkX3NoaWZ0KDIpLG9lPVMucmVhZF9zaGlmdCgyKSxnZT1TLnJlYWRfc2hpZnQoMikscGU9WDAoUywwLGspO3JldHVybiBrLmJpZmY8OCYmUy5yZWFkX3NoaWZ0KDEpLFt7cjpHLGM6UX0scGUsZ2Usb2VdfX0oUywwLGspfX0s''@;'; put 'put ''Mjk6e246IlNlbGVjdGlvbiIsZjpmdW5jdGlvbiBUZihTLFIsayl7cmV0dXJuIGsmJmsuYmlmZjw1PyhTLmwrPVIse2NlbGw6e3I6MCxjOjB9fSk6KFMucmVhZF9zaGlmdCgxKSx7Y2VsbDpxaSh7cjpTLnJlYWRfc2hpZnQoMiksYzpTLnJlYWRfc2hpZnQoMil9KX0pfX0sMzQ6e246IkRhdGUx''@;'; put 'put ''OTA0IixmOnVvfSwzNTp7bjoiRXh0ZXJuTmFtZSIsZjplQ30sMzg6e246IkxlZnRNYXJnaW4iLGY6UGx9LDM5OntuOiJSaWdodE1hcmdpbiIsZjpQbH0sNDA6e246IlRvcE1hcmdpbiIsZjpQbH0sNDE6e246IkJvdHRvbU1hcmdpbiIsZjpQbH0sNDI6e246IlByaW50Um93Q29sIixmOnVvfSw0''@;'; put 'put ''Mzp7bjoiUHJpbnRHcmlkIixmOnVvfSw0Nzp7bjoiRmlsZVBhc3MiLGY6ZnVuY3Rpb24gZ0MoUyxSLGspe2lmKGsuZW5jKXJldHVybiBrLmVuYzt2YXIgRz17VHlwZTprLmJpZmY+PTg/Uy5yZWFkX3NoaWZ0KDIpOjB9O3JldHVybiBHLlR5cGU/ZnVuY3Rpb24gTnYoUyxSLGssRyl7dmFyIFE9''@;'; put 'put ''R3x8e307aWYoUS5JbmZvPVMucmVhZF9zaGlmdCgyKSxTLmwtPTIsMT09PVEuSW5mbyl7aWYoUS5EYXRhPWZ1bmN0aW9uIHRuZShTKXt2YXIgUj17fSxrPVIuRW5jcnlwdGlvblZlcnNpb25JbmZvPVAxKFMsNCk7aWYoMSE9ay5NYWpvcnx8MSE9ay5NaW5vcil0aHJvdyJ1bnJlY29nbml6ZWQg''@;'; put 'put ''dmVyc2lvbiBjb2RlICIray5NYWpvcisiIDogIitrLk1pbm9yO3JldHVybiBSLlNhbHQ9Uy5yZWFkX3NoaWZ0KDE2KSxSLkVuY3J5cHRlZFZlcmlmaWVyPVMucmVhZF9zaGlmdCgxNiksUi5FbmNyeXB0ZWRWZXJpZmllckhhc2g9Uy5yZWFkX3NoaWZ0KDE2KSxSfShTKSxrLnBhc3N3b3JkJiZ0''@;'; put 'put ''eXBlb2YgRzQ8InUiKXt2YXIgb2U9RzQoay5wYXNzd29yZCxRLkRhdGEuU2FsdCwiMDAwMDAwMDAiKSxnZT1TZShRLkRhdGEuRW5jcnlwdGVkVmVyaWZpZXIrUS5EYXRhLkVuY3J5cHRlZFZlcmlmaWVySGFzaCwiaGV4IikscGU9WGwucmM0KFNlKG9lLCJoZXgiKS50b1N0cmluZygiYmluYXJ5''@;'; put 'put ''IiksZ2UpO0cudmFsaWQ9WGwubWQ1KHBlLnNsaWNlKDAsMTYpKT09QnVmZmVyLmZyb20ocGUuc2xpY2UoMTYpKS50b1N0cmluZygiaGV4IiksUS5EYXRhLktleT1vZSxHLmluc2l0dT1mdW5jdGlvbiBxeihTLFIpe3ZhciBrPW5ldyBBcnJheSgyNTYpLEc9MCxRPTAsb2U9MCxnZT0wO2Z1bmN0''@;'; put 'put ''aW9uIHBlKGV0KXtmb3IoRz0wLFE9MCxvZT0wLGdlPTAsUT0wOzI1NiE9UTsrK1Epa1tRXT1RO2ZvcihvZT0wLFE9MDsyNTYhPVE7KytRKXt0cnl7b2U9b2Ura1tRXStldFtRJWV0Lmxlbmd0aF0uY2hhckNvZGVBdCgwKSYyNTV9Y2F0Y2goY3Qpe3Rocm93IGNvbnNvbGUubG9nKFEsZXRbUSVl''@;'; put 'put ''dC5sZW5ndGhdKSxjdH1nZT1rW1FdLGtbUV09a1tvZV0sa1tvZV09Z2V9UT1vZT0wfWZ1bmN0aW9uIHllKGV0KXt2YXIgY3Q9VihldC5sZW5ndGgpO2ZvcihHPTA7RyE9ZXQubGVuZ3RoOysrRylnZT1rW1E9USsxJjI1NV0sa1tRXT1rW29lPShvZStrW1FdKSUyNTZdLGtbb2VdPWdlLGN0W0dd''@;'; put 'put ''PWV0W0ddXmtba1tRXStrW29lXSYyNTVdO3JldHVybiBCdWZmZXIuZnJvbShjdCl9dmFyIFBlPVMuS2V5LE5lPTA7cGUoU2UoUGUsImhleCIpLnRvU3RyaW5nKCJiaW5hcnkiKSk7dmFyIFllPTA7cmV0dXJuIGZ1bmN0aW9uKGV0KXtpZihZZStldC5sZW5ndGg8MTAyNClyZXR1cm4gWWUrPWV0''@;'; put 'put ''Lmxlbmd0aCx5ZShldCk7dmFyIGF0PTAsYnQ9U2UoZXQuc2xpY2UoYXQsYXQrKEV0PTEwMjQtWWUpKSk7YXQrPUV0LFllPTA7dmFyIGp0PXllKGJ0KTtmb3IoYXQ9PWV0Lmxlbmd0aCYmKCsrTmUsUGU9RzQoUixTLlNhbHQsRjgoTmUpKSxwZShTZShQZSwiaGV4IikudG9TdHJpbmcoImJpbmFy''@;'; put 'put ''eSIpKSk7YXQ8ZXQubGVuZ3RoOyl7KytOZSxQZT1HNChSLFMuU2FsdCxGOChOZSkpLHBlKEJ1ZmZlci5mcm9tKFBlLCJoZXgiKS50b1N0cmluZygiYmluYXJ5IikpO3ZhciBFdD1NYXRoLm1pbigxMDI0LGV0Lmxlbmd0aC1hdCk7YnQ9U2UoZXQuc2xpY2UoYXQsYXQrRXQpKSxhdCs9RXQsWWU9''@;'; put 'put ''RXQsanQ9QnVmZmVyLmNvbmNhdChbanQseWUoYnQpXSl9cmV0dXJuIGp0fX0oUS5EYXRhLGsucGFzc3dvcmQpfX1lbHNlIGlmKFEuRGF0YT1mdW5jdGlvbiBGdihTLFIpe3ZhciBrPXt9LEc9ay5FbmNyeXB0aW9uVmVyc2lvbkluZm89UDEoUyw0KTtpZihSLT00LDIhPUcuTWlub3IpdGhyb3cg''@;'; put 'put ''bmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgbWlub3IgdmVyc2lvbiBjb2RlOiAiK0cuTWlub3IpO2lmKEcuTWFqb3I+NHx8Ry5NYWpvcjwyKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkIG1ham9yIHZlcnNpb24gY29kZTogIitHLk1ham9yKTtrLkZsYWdzPVMucmVhZF9zaGlmdCg0KSxS''@;'; put 'put ''LT00O3ZhciBRPVMucmVhZF9zaGlmdCg0KTtyZXR1cm4gUi09NCxrLkVuY3J5cHRpb25IZWFkZXI9SVYoUyxRKSxrLkVuY3J5cHRpb25WZXJpZmllcj1QdihTLFItPVEpLGt9KFMsUiksUS5EYXRhJiZRLkRhdGEuRW5jcnlwdGlvbkhlYWRlciYmMjY2MjU9PT1RLkRhdGEuRW5jcnlwdGlvbkhl''@;'; put 'put ''YWRlci5BbGdJRCYmay5wYXNzd29yZCYmdHlwZW9mICQ0PCJ1Iil7dmFyIHllPSQ0KGsucGFzc3dvcmQsUS5EYXRhLkVuY3J5cHRpb25WZXJpZmllci5TYWx0LnRvU3RyaW5nKCJoZXgiKSwiMDAwMDAwMDAiKSxQZT1RLkRhdGEuRW5jcnlwdGlvbkhlYWRlci5LZXlTaXplPj4+Mzs1PT1QZXx8''@;'; put 'put ''UGU8eWUubGVuZ3RoJiYoeWU9eWUuc2xpY2UoMCxQZSkpO3ZhciBOZT1TZShRLkRhdGEuRW5jcnlwdGlvblZlcmlmaWVyLlZlcmlmaWVyLnRvU3RyaW5nKCJoZXgiKStRLkRhdGEuRW5jcnlwdGlvblZlcmlmaWVyLlZlcmlmaWVySGFzaC50b1N0cmluZygiaGV4IiksImhleCIpLFllPVhsLnJj''@;'; put 'put ''NCh5ZS50b1N0cmluZygiYmluYXJ5IiksTmUpO0cudmFsaWQ9bWMoWWUuc2xpY2UoMCxQZSksIlNIQTEiKS50b1N0cmluZygiaGV4Iik9PVllLnNsaWNlKFBlKS50b1N0cmluZygiaGV4IiksUS5EYXRhLktleT15ZSxHLnZhbGlkJiYoRy5pbnNpdHU9ZnVuY3Rpb24gdHJlKFMsUil7dmFyIGs9''@;'; put 'put ''bmV3IEFycmF5KDI1NiksRz0wLFE9MCxvZT0wLGdlPTAscGU9Uy5FbmNyeXB0aW9uSGVhZGVyLktleVNpemU+Pj4zO2Z1bmN0aW9uIHllKGN0KXtmb3IoY3Q9QnVmZmVyLmZyb20oY3Quc2xpY2UoMCxwZSkpLEc9MCxRPTAsb2U9MCxnZT0wLFE9MDsyNTYhPVE7KytRKWtbUV09UTtmb3Iob2U9''@;'; put 'put ''MCxRPTA7MjU2IT1ROysrUSl7dmFyIEV0PWN0W1ElY3QubGVuZ3RoXTtvZT1vZStrW1FdKygic3RyaW5nIj09dHlwZW9mIEV0P0V0LmNoYXJDb2RlQXQoMCk6RXQpJjI1NSxnZT1rW1FdLGtbUV09a1tvZV0sa1tvZV09Z2V9UT1vZT0wfWZ1bmN0aW9uIFBlKGN0KXt2YXIgRXQ9VihjdC5sZW5n''@;'; put 'put ''dGgpO2ZvcihHPTA7RyE9Y3QubGVuZ3RoOysrRylnZT1rW1E9USsxJjI1NV0sa1tRXT1rW29lPShvZStrW1FdKSUyNTZdLGtbb2VdPWdlLEV0W0ddPWN0W0ddXmtba1tRXStrW29lXSYyNTVdO3JldHVybiBCdWZmZXIuZnJvbShFdCl9dmFyIE5lPVMuS2V5LFllPTA7eWUoU2UoTmUsImhleCIp''@;'; put 'put ''LnRvU3RyaW5nKCJiaW5hcnkiKSk7dmFyIGV0PTA7cmV0dXJuIGZ1bmN0aW9uKGN0KXtpZihldCtjdC5sZW5ndGg8MTAyNClyZXR1cm4gZXQrPWN0Lmxlbmd0aCxQZShjdCk7dmFyIGF0PTEwMjQtZXQsYnQ9MCxqdD1CdWZmZXIuZnJvbShjdC5zbGljZShidCxidCthdCkpO2J0Kz1hdCxldD0w''@;'; put 'put ''O3ZhciBrdD1QZShqdCk7Zm9yKGJ0PT1jdC5sZW5ndGgmJigrK1llLE5lPSQ0KFIsUy5FbmNyeXB0aW9uVmVyaWZpZXIuU2FsdCxGOChZZSkpLHllKEJ1ZmZlci5mcm9tKE5lLCJoZXgiKS50b1N0cmluZygiYmluYXJ5IikpKTtidDxjdC5sZW5ndGg7KSsrWWUsTmU9JDQoUixTLkVuY3J5cHRp''@;'; put 'put ''b25WZXJpZmllci5TYWx0LEY4KFllKSkseWUoQnVmZmVyLmZyb20oTmUsImhleCIpLnRvU3RyaW5nKCJiaW5hcnkiKSksYXQ9TWF0aC5taW4oMTAyNCxjdC5sZW5ndGgtYnQpLGp0PUJ1ZmZlci5mcm9tKGN0LnNsaWNlKGJ0LGJ0K2F0KSksYnQrPWF0LGF0PDEwMjQmJihldD1hdCksa3Q9QnVm''@;'; put 'put ''ZmVyLmNvbmNhdChba3QsUGUoanQpXSk7cmV0dXJuIGt0fX0oUS5EYXRhLGsucGFzc3dvcmQpKX1yZXR1cm4gUX0oUyxSLTIsayxHKTpmdW5jdGlvbiBPVihTLFIsayxHKXt2YXIgUT17a2V5OkVjKFMpLHZlcmlmaWNhdGlvbkJ5dGVzOkVjKFMpfTtrLnBhc3N3b3JkJiYoUS52ZXJpZmllcj1I''@;'; put 'put ''dihrLnBhc3N3b3JkKSksRy52YWxpZD1RLnZlcmlmaWNhdGlvbkJ5dGVzPT09US52ZXJpZmllcixHLnZhbGlkJiYoRy5pbnNpdHU9ZnVuY3Rpb24oUyxSKXt2YXIgaz1SfHwwLEc9cEMoUyk7cmV0dXJuIGZ1bmN0aW9uKFEpe3ZhciBvZT1mdW5jdGlvbihTLFIsayxHLFEpe3ZhciBvZSxnZTtm''@;'; put 'put ''b3IoUXx8KFE9UiksR3x8KEc9cEMoIiIpKSxvZT0wO29lIT1SLmxlbmd0aDsrK29lKWdlPTI1NSYoKGdlPVJbb2VdKT4+NXxnZTw8MyksUVtvZV09Z2VePUdba10saz1rKzEmMTU7cmV0dXJuW1EsayxHXX0oMCxRLGssRyk7cmV0dXJuIGs9b2VbMV0sb2VbMF19fShrLnBhc3N3b3JkLDApKX0o''@;'; put 'put ''UywwLGssRyksR319LDQ5OntuOiJGb250IixmOmZ1bmN0aW9uIEdBKFMsUixrKXt2YXIgRz17c3o6Uy5yZWFkX3NoaWZ0KDIpLzIwfSxRPU93KFMpO1EuZkJvbGQmJihHLmJvbGQ9MSksUS5mSXRhbGljJiYoRy5pdGFsaWM9MSksUS5mVW5kZXJsaW5lJiYoRy51bmRlcmxpbmU9MSksUS5mQ29u''@;'; put 'put ''ZGVuc2UmJihHLmNvbmRlbnNlPTEpLFEuZkV4dGVuZCYmKEcuZXh0ZW5kPTEpLFEuZlNoYWRvdyYmKEcuc2hhZG93PTEpLFEuZk91dGxpbmUmJihHLm91dGxpbmU9MSksUS5mU3RyaWtlb3V0JiYoRy5zdHJpa2U9MSk7dmFyIG9lPWsmJmsuYmlmZnx8ODtpZigyIT1vZSYmKEcuaWN2PVMucmVh''@;'; put 'put ''ZF9zaGlmdCgyKSwzIT1vZSYmNCE9b2UpKXtzd2l0Y2goNzAwPT09Uy5yZWFkX3NoaWZ0KDIpJiYoRy5ib2xkPTEpLFMucmVhZF9zaGlmdCgyKSl7Y2FzZSAxOkcudmFsaWduPSJzdXBlciI7YnJlYWs7Y2FzZSAyOkcudmFsaWduPSJzdWIifXZhciBwZT1TLnJlYWRfc2hpZnQoMSk7MCE9cGUm''@;'; put 'put ''JihHLnVuZGVybGluZT1wZSk7dmFyIHllPVMucmVhZF9zaGlmdCgxKTt5ZT4wJiYoRy5mYW1pbHk9eWUpO3ZhciBQZT1TLnJlYWRfc2hpZnQoMSk7UGU+MCYmKEcuY2hhcnNldD1QZSksUy5sKz0xfXJldHVybiBHLm5hbWU9VWEoUywwLGspLEd9fSw1MTp7bjoiUHJpbnRTaXplIixmOkVjfSw2''@;'; put 'put ''MDp7bjoiQ29udGludWUifSw2MTp7bjoiV2luZG93MSIsZjpmdW5jdGlvbiAkdGUoUyl7cmV0dXJue1BvczpbUy5yZWFkX3NoaWZ0KDIpLFMucmVhZF9zaGlmdCgyKV0sRGltOltTLnJlYWRfc2hpZnQoMiksUy5yZWFkX3NoaWZ0KDIpXSxGbGFnczpTLnJlYWRfc2hpZnQoMiksQ3VyVGFiOlMu''@;'; put 'put ''cmVhZF9zaGlmdCgyKSxGaXJzdFRhYjpTLnJlYWRfc2hpZnQoMiksU2VsZWN0ZWQ6Uy5yZWFkX3NoaWZ0KDIpLFRhYlJhdGlvOlMucmVhZF9zaGlmdCgyKX19fSw2NDp7bjoiQmFja3VwIixmOnVvfSw2NTp7bjoiUGFuZSIsZjpmdW5jdGlvbiBZQShTLFIsayl7aWYoayYmay5iaWZmPDUpcmV0''@;'; put 'put ''dXJue307dmFyIEc9e307cmV0dXJuIEcueD1TLnJlYWRfc2hpZnQoMiksRy55PVMucmVhZF9zaGlmdCgyKSxHLnJ3VG9wPVMucmVhZF9zaGlmdCgyKSxHLmNvbExlZnQ9Uy5yZWFkX3NoaWZ0KDIpLEcucG5uQWNjdD1TLnJlYWRfc2hpZnQoMSksUy5yZWFkX3NoaWZ0KDEpLEd9fSw2Njp7bjoi''@;'; put 'put ''Q29kZVBhZ2UiLGY6RWN9LDc3OntuOiJQbHMiLGY6SW59LDgwOntuOiJEQ29uIn0sODE6e246IkRDb25SZWYifSw4Mjp7bjoiRENvbk5hbWUifSw4NTp7bjoiRGVmQ29sV2lkdGgiLGY6RWN9LDg5OntuOiJYQ1QifSw5MDp7bjoiQ1JOIn0sOTE6e246IkZpbGVTaGFyaW5nIn0sOTI6e246Ildy''@;'; put 'put ''aXRlQWNjZXNzIixmOmZ1bmN0aW9uIEt3KFMsUixrKXtpZihrLmVuYylyZXR1cm4gUy5sKz1SLCIiO3ZhciBHPVMubCxRPVgwKFMsMCxrKTtyZXR1cm4gUy5yZWFkX3NoaWZ0KFIrRy1TLmwpLFF9fSw5Mzp7bjoiT2JqIixmOmZ1bmN0aW9uIGRWKFMsUixrKXtpZihrJiZrLmJpZmY8OClyZXR1''@;'; put 'put ''cm4gZnVuY3Rpb24gdGsoUyxSLGspe1MubCs9NDt2YXIgRz1TLnJlYWRfc2hpZnQoMiksUT1TLnJlYWRfc2hpZnQoMiksb2U9Uy5yZWFkX3NoaWZ0KDIpO1MubCs9MixTLmwrPTIsUy5sKz0yLFMubCs9MixTLmwrPTIsUy5sKz0yLFMubCs9MixTLmwrPTIsUy5sKz0yLFMubCs9Njt2YXIgZ2U9''@;'; put 'put ''W107cmV0dXJuIGdlLnB1c2goKGVrW0ddfHxJbikoUyxSLT0zNixrKSkse2NtbzpbUSxHLG9lXSxmdDpnZX19KFMsUixrKTt2YXIgRz1iNShTKSxRPWZ1bmN0aW9uIEowKFMsUixrKXtmb3IodmFyIEc9Uy5sK1IsUT1bXTtTLmw8Rzspe3ZhciBvZT1TLnJlYWRfc2hpZnQoMik7Uy5sLT0yO3Ry''@;'; put 'put ''eXtRW29lXT1FZltvZV0oUyxHLVMubCl9Y2F0Y2h7cmV0dXJuIFMubD1HLFF9fXJldHVybiBTLmwhPUcmJihTLmw9RyksUX0oUyxSLTIyKTtyZXR1cm57Y21vOkcsZnQ6UX19fSw5NDp7bjoiVW5jYWxjZWQifSw5NTp7bjoiQ2FsY1NhdmVSZWNhbGMiLGY6dW99LDk2OntuOiJUZW1wbGF0ZSJ9''@;'; put 'put ''LDk3OntuOiJJbnRsIn0sOTk6e246Ik9ialByb3RlY3QiLGY6dW99LDEyNTp7bjoiQ29sSW5mbyIsZjpyQ30sMTI4OntuOiJHdXRzIixmOmZ1bmN0aW9uIHNWKFMpe1MubCs9NDt2YXIgUj1bUy5yZWFkX3NoaWZ0KDIpLFMucmVhZF9zaGlmdCgyKV07aWYoMCE9PVJbMF0mJlJbMF0tLSwwIT09''@;'; put 'put ''UlsxXSYmUlsxXS0tLFJbMF0+N3x8UlsxXT43KXRocm93IG5ldyBFcnJvcigiQmFkIEd1dHRlcnM6ICIrUi5qb2luKCJ8IikpO3JldHVybiBSfX0sMTI5OntuOiJXc0Jvb2wiLGY6ZnVuY3Rpb24gRXYoUyxSLGspe3ZhciBHPWsmJjg9PWsuYmlmZnx8Mj09Uj9TLnJlYWRfc2hpZnQoMik6KFMu''@;'; put 'put ''bCs9UiwwKTtyZXR1cm57ZkRpYWxvZzoxNiZHLGZCZWxvdzo2NCZHLGZSaWdodDoxMjgmR319fSwxMzA6e246IkdyaWRTZXQiLGY6RWN9LDEzMTp7bjoiSENlbnRlciIsZjp1b30sMTMyOntuOiJWQ2VudGVyIixmOnVvfSwxMzM6e246IkJvdW5kU2hlZXQ4IixmOmZ1bmN0aW9uIFo2KFMsUixr''@;'; put 'put ''KXt2YXIgRz1TLnJlYWRfc2hpZnQoNCksUT0zJlMucmVhZF9zaGlmdCgxKSxvZT1TLnJlYWRfc2hpZnQoMSk7c3dpdGNoKG9lKXtjYXNlIDA6b2U9IldvcmtzaGVldCI7YnJlYWs7Y2FzZSAxOm9lPSJNYWNyb3NoZWV0IjticmVhaztjYXNlIDI6b2U9IkNoYXJ0c2hlZXQiO2JyZWFrO2Nhc2Ug''@;'; put 'put ''NjpvZT0iVkJBTW9kdWxlIn12YXIgZ2U9VWEoUywwLGspO3JldHVybiAwPT09Z2UubGVuZ3RoJiYoZ2U9IlNoZWV0MSIpLHtwb3M6RyxoczpRLGR0Om9lLG5hbWU6Z2V9fX0sMTM0OntuOiJXcml0ZVByb3RlY3QifSwxNDA6e246IkNvdW50cnkiLGY6ZnVuY3Rpb24gbVYoUyl7dmFyIGssUj1b''@;'; put 'put ''MCwwXTtyZXR1cm4gaz1TLnJlYWRfc2hpZnQoMiksUlswXT1ENltrXXx8ayxrPVMucmVhZF9zaGlmdCgyKSxSWzFdPUQ2W2tdfHxrLFJ9fSwxNDE6e246IkhpZGVPYmoiLGY6RWN9LDE0NDp7bjoiU29ydCJ9LDE0Njp7bjoiUGFsZXR0ZSIsZjpmdW5jdGlvbiB3dChTKXtmb3IodmFyIFI9Uy5y''@;'; put 'put ''ZWFkX3NoaWZ0KDIpLGs9W107Ui0tID4wOylrLnB1c2godWQoUykpO3JldHVybiBrfX0sMTUxOntuOiJTeW5jIn0sMTUyOntuOiJMUHIifSwxNTM6e246IkR4R0NvbCJ9LDE1NDp7bjoiRm5Hcm91cE5hbWUifSwxNTU6e246IkZpbHRlck1vZGUifSwxNTY6e246IkJ1aWx0SW5Gbkdyb3VwQ291''@;'; put 'put ''bnQiLGY6RWN9LDE1Nzp7bjoiQXV0b0ZpbHRlckluZm8ifSwxNTg6e246IkF1dG9GaWx0ZXIifSwxNjA6e246IlNjbCIsZjpua30sMTYxOntuOiJTZXR1cCIsZjpmdW5jdGlvbiBoMihTLFIpe3ZhciBrPXt9O3JldHVybiBSPDMyfHwoUy5sKz0xNixrLmhlYWRlcj1QbChTKSxrLmZvb3Rlcj1Q''@;'; put 'put ''bChTKSxTLmwrPTIpLGt9fSwxNzQ6e246IlNjZW5NYW4ifSwxNzU6e246IlNDRU5BUklPIn0sMTc2OntuOiJTeFZpZXcifSwxNzc6e246IlN4dmQifSwxNzg6e246IlNYVkkifSwxODA6e246IlN4SXZkIn0sMTgxOntuOiJTWExJIn0sMTgyOntuOiJTWFBJIn0sMTg0OntuOiJEb2NSb3V0ZSJ9''@;'; put 'put ''LDE4NTp7bjoiUmVjaXBOYW1lIn0sMTg5OntuOiJNdWxSayIsZjpmdW5jdGlvbiBvVihTLFIpe2Zvcih2YXIgaz1TLmwrUi0yLEc9Uy5yZWFkX3NoaWZ0KDIpLFE9Uy5yZWFkX3NoaWZ0KDIpLG9lPVtdO1MubDxrOylvZS5wdXNoKHdvKFMpKTtpZihTLmwhPT1rKXRocm93IG5ldyBFcnJvcigi''@;'; put 'put ''TXVsUksgcmVhZCBlcnJvciIpO3ZhciBnZT1TLnJlYWRfc2hpZnQoMik7aWYob2UubGVuZ3RoIT1nZS1RKzEpdGhyb3cgbmV3IEVycm9yKCJNdWxSSyBsZW5ndGggbWlzbWF0Y2giKTtyZXR1cm57cjpHLGM6USxDOmdlLHJrcmVjOm9lfX19LDE5MDp7bjoiTXVsQmxhbmsiLGY6ZnVuY3Rpb24g''@;'; put 'put ''WHRlKFMsUil7Zm9yKHZhciBrPVMubCtSLTIsRz1TLnJlYWRfc2hpZnQoMiksUT1TLnJlYWRfc2hpZnQoMiksb2U9W107Uy5sPGs7KW9lLnB1c2goUy5yZWFkX3NoaWZ0KDIpKTtpZihTLmwhPT1rKXRocm93IG5ldyBFcnJvcigiTXVsQmxhbmsgcmVhZCBlcnJvciIpO3ZhciBnZT1TLnJlYWRf''@;'; put 'put ''c2hpZnQoMik7aWYob2UubGVuZ3RoIT1nZS1RKzEpdGhyb3cgbmV3IEVycm9yKCJNdWxCbGFuayBsZW5ndGggbWlzbWF0Y2giKTtyZXR1cm57cjpHLGM6USxDOmdlLGl4ZmU6b2V9fX0sMTkzOntuOiJNbXMiLGY6cjJ9LDE5Nzp7bjoiU1hESSJ9LDE5ODp7bjoiU1hEQiJ9LDE5OTp7bjoiU1hG''@;'; put 'put ''REIifSwyMDA6e246IlNYREJCIn0sMjAxOntuOiJTWE51bSJ9LDIwMjp7bjoiU3hCb29sIixmOnVvfSwyMDM6e246IlN4RXJyIn0sMjA0OntuOiJTWEludCJ9LDIwNTp7bjoiU1hTdHJpbmcifSwyMDY6e246IlNYRHRyIn0sMjA3OntuOiJTeE5pbCJ9LDIwODp7bjoiU1hUYmwifSwyMDk6e246''@;'; put 'put ''IlNYVEJSR0lJVE0ifSwyMTA6e246IlN4VGJwZyJ9LDIxMTp7bjoiT2JQcm9qIn0sMjEzOntuOiJTWFN0cmVhbUlEIn0sMjE1OntuOiJEQkNlbGwifSwyMTY6e246IlNYUm5nIn0sMjE3OntuOiJTeElzeG9wZXIifSwyMTg6e246IkJvb2tCb29sIixmOkVjfSwyMjA6e246IkRiT3JQYXJhbVFy''@;'; put 'put ''eSJ9LDIyMTp7bjoiU2NlbmFyaW9Qcm90ZWN0IixmOnVvfSwyMjI6e246Ik9sZU9iamVjdFNpemUifSwyMjQ6e246IlhGIixmOmZ1bmN0aW9uIEp3KFMsUixrKXt2YXIgRz17fTtyZXR1cm4gRy5pZm50PVMucmVhZF9zaGlmdCgyKSxHLm51bUZtdElkPVMucmVhZF9zaGlmdCgyKSxHLmZsYWdz''@;'; put 'put ''PVMucmVhZF9zaGlmdCgyKSxHLmZTdHlsZT1HLmZsYWdzPj4yJjEsRy5kYXRhPWZ1bmN0aW9uIENsKFMsUixrLEcpe3ZhciBRPXt9LG9lPVMucmVhZF9zaGlmdCg0KSxnZT1TLnJlYWRfc2hpZnQoNCkscGU9Uy5yZWFkX3NoaWZ0KDQpLHllPVMucmVhZF9zaGlmdCgyKTtpZihRLnBhdHRlcm5U''@;'; put 'put ''eXBlPWh2W3BlPj4yNl0sIUcuY2VsbFN0eWxlcylyZXR1cm4gUTt2YXIgUGU9NyZvZTtzd2l0Y2goUGUpe2Nhc2UgMTpRLmhhbGlnbj0ibGVmdCI7YnJlYWs7Y2FzZSAyOlEuaGFsaWduPSJjZW50ZXIiO2JyZWFrO2Nhc2UgMzpRLmhhbGlnbj0icmlnaHQifXN3aXRjaChRLmZXcmFwPW9lPj4z''@;'; put 'put ''JjEsUGU9b2U+PjQmNyl7Y2FzZSAwOlEudmFsaWduPSJ0b3AiO2JyZWFrO2Nhc2UgMTpRLnZhbGlnbj0iY2VudGVyIjticmVhaztjYXNlIDI6US52YWxpZ249ImJvdHRvbSJ9cmV0dXJuIFEuZkp1c3RMYXN0PW9lPj43JjEsUS50cm90PW9lPj44JjI1NSxRLmNJbmRlbnQ9b2U+PjE2JjE1LFEu''@;'; put 'put ''ZlNocmlua1RvRml0PW9lPj4yMCYxLFEuaVJlYWRPcmRlcj1vZT4+MjImMixRLmZBdHJOdW09b2U+PjI2JjEsUS5mQXRyRm50PW9lPj4yNyYxLFEuZkF0ckFsYz1vZT4+MjgmMSxRLmZBdHJCZHI9b2U+PjI5JjEsUS5mQXRyUGF0PW9lPj4zMCYxLFEuZkF0clByb3Q9b2U+PjMxJjEsUS5kZ0xl''@;'; put 'put ''ZnQ9MTUmZ2UsUS5kZ1JpZ2h0PWdlPj40JjE1LFEuZGdUb3A9Z2U+PjgmMTUsUS5kZ0JvdHRvbT1nZT4+MTImMTUsUS5pY3ZMZWZ0PWdlPj4xNiYxMjcsUS5pY3ZSaWdodD1nZT4+MjMmMTI3LFEuZ3JiaXREaWFnPWdlPj4zMCYzLFEuaWN2VG9wPTEyNyZwZSxRLmljdkJvdHRvbT1wZT4+NyYx''@;'; put 'put ''MjcsUS5pY3ZEaWFnPXBlPj4xNCYxMjcsUS5kZ0RpYWc9cGU+PjIxJjE1LFEuaWN2Rm9yZT0xMjcmeWUsUS5pY3ZCYWNrPXllPj43JjEyNyxRLmZzeEJ1dHRvbj15ZT4+MTQmMSxRfShTLDAsMCxrKSxHfX0sMjI1OntuOiJJbnRlcmZhY2VIZHIiLGY6ZnVuY3Rpb24gJHcoUyxSKXtyZXR1cm4g''@;'; put 'put ''MD09PVJ8fFMucmVhZF9zaGlmdCgyKSwxMjAwfX0sMjI2OntuOiJJbnRlcmZhY2VFbmQiLGY6cjJ9LDIyNzp7bjoiU1hWUyJ9LDIyOTp7bjoiTWVyZ2VDZWxscyIsZjpmdW5jdGlvbiBKdGUoUyxSKXtmb3IodmFyIGs9W10sRz1TLnJlYWRfc2hpZnQoMik7Ry0tOylrLnB1c2goczIoUykpO3Jl''@;'; put 'put ''dHVybiBrfX0sMjMzOntuOiJCa0hpbSJ9LDIzNTp7bjoiTXNvRHJhd2luZ0dyb3VwIn0sMjM2OntuOiJNc29EcmF3aW5nIn0sMjM3OntuOiJNc29EcmF3aW5nU2VsZWN0aW9uIn0sMjM5OntuOiJQaG9uZXRpY0luZm8ifSwyNDA6e246IlN4UnVsZSJ9LDI0MTp7bjoiU1hFeCJ9LDI0Mjp7bjoi''@;'; put 'put ''U3hGaWx0In0sMjQ0OntuOiJTeERYRiJ9LDI0NTp7bjoiU3hJdG0ifSwyNDY6e246IlN4TmFtZSJ9LDI0Nzp7bjoiU3hTZWxlY3QifSwyNDg6e246IlNYUGFpciJ9LDI0OTp7bjoiU3hGbWxhIn0sMjUxOntuOiJTeEZvcm1hdCJ9LDI1Mjp7bjoiU1NUIixmOmZ1bmN0aW9uIFc2KFMsUil7Zm9y''@;'; put 'put ''KHZhciBrPVMubCtSLEc9Uy5yZWFkX3NoaWZ0KDQpLFE9Uy5yZWFkX3NoaWZ0KDQpLG9lPVtdLGdlPTA7Z2UhPVEmJlMubDxrOysrZ2Upb2UucHVzaChmYyhTKSk7cmV0dXJuIG9lLkNvdW50PUcsb2UuVW5pcXVlPVEsb2V9fSwyNTM6e246IkxhYmVsU3N0IixmOmZ1bmN0aW9uIHJWKFMpe3Zh''@;'; put 'put ''ciBSPXcwKFMpO3JldHVybiBSLmlzc3Q9Uy5yZWFkX3NoaWZ0KDQpLFJ9fSwyNTU6e246IkV4dFNTVCIsZjpmdW5jdGlvbiBDZShTLFIpe3ZhciBrPXt9O3JldHVybiBrLmRzc3Q9Uy5yZWFkX3NoaWZ0KDIpLFMubCs9Ui0yLGt9fSwyNTY6e246IlNYVkRFeCJ9LDI1OTp7bjoiU1hGb3JtdWxh''@;'; put 'put ''In0sMjkwOntuOiJTWERCRXgifSwzMTE6e246IlJSREluc0RlbCJ9LDMxMjp7bjoiUlJESGVhZCJ9LDMxNTp7bjoiUlJEQ2hnQ2VsbCJ9LDMxNzp7bjoiUlJUYWJJZCIsZjp3NH0sMzE4OntuOiJSUkRSZW5TaGVldCJ9LDMxOTp7bjoiUlJTb3J0In0sMzIwOntuOiJSUkRNb3ZlIn0sMzMwOntu''@;'; put 'put ''OiJSUkZvcm1hdCJ9LDMzMTp7bjoiUlJBdXRvRm10In0sMzMzOntuOiJSUkluc2VydFNoIn0sMzM0OntuOiJSUkRNb3ZlQmVnaW4ifSwzMzU6e246IlJSRE1vdmVFbmQifSwzMzY6e246IlJSREluc0RlbEJlZ2luIn0sMzM3OntuOiJSUkRJbnNEZWxFbmQifSwzMzg6e246IlJSRENvbmZsaWN0''@;'; put 'put ''In0sMzM5OntuOiJSUkREZWZOYW1lIn0sMzQwOntuOiJSUkRSc3RFdHhwIn0sMzUxOntuOiJMUm5nIn0sMzUyOntuOiJVc2VzRUxGcyIsZjp1b30sMzUzOntuOiJEU0YiLGY6cjJ9LDQwMTp7bjoiQ1VzciJ9LDQwMjp7bjoiQ2JVc3IifSw0MDM6e246IlVzckluZm8ifSw0MDQ6e246IlVzckV4''@;'; put 'put ''Y2wifSw0MDU6e246IkZpbGVMb2NrIn0sNDA2OntuOiJSUkRJbmZvIn0sNDA3OntuOiJCQ1VzcnMifSw0MDg6e246IlVzckNoayJ9LDQyNTp7bjoiVXNlckJWaWV3In0sNDI2OntuOiJVc2VyU1ZpZXdCZWdpbiJ9LDQyNzp7bjoiVXNlclNWaWV3RW5kIn0sNDI4OntuOiJSUkRVc2VyVmlldyJ9''@;'; put 'put ''LDQyOTp7bjoiUXNpIn0sNDMwOntuOiJTdXBCb29rIixmOmZ1bmN0aW9uIGQyKFMsUixrKXt2YXIgRz1TLmwrUixRPVMucmVhZF9zaGlmdCgyKSxvZT1TLnJlYWRfc2hpZnQoMik7aWYoay5zYmNjaD1vZSwxMDI1PT1vZXx8MTQ4NDk9PW9lKXJldHVybltvZSxRXTtpZihvZTwxfHxvZT4yNTUp''@;'; put 'put ''dGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIFN1cEJvb2sgdHlwZTogIitvZSk7Zm9yKHZhciBnZT1yYyhTLG9lKSxwZT1bXTtHPlMubDspcGUucHVzaChudShTKSk7cmV0dXJuW29lLFEsZ2UscGVdfX0sNDMxOntuOiJQcm90NFJldiIsZjp1b30sNDMyOntuOiJDb25kRm10In0sNDMzOntu''@;'; put 'put ''OiJDRiJ9LDQzNDp7bjoiRFZhbCJ9LDQzNzp7bjoiRENvbkJpbiJ9LDQzODp7bjoiVHhPIixmOmZ1bmN0aW9uIF81KFMsUixrKXt2YXIgRz1TLmwsUT0iIixvZT0tMTt0cnl7Uy5sKz00LC0xPT1bMCw1LDcsMTEsMTIsMTRdLmluZGV4T2YoKGsubGFzdG9ianx8e2NtbzpbMCwwXX0pLmNtb1sx''@;'; put 'put ''XSk/Uy5sKz02OmZ1bmN0aW9uIHBjKFMpe3ZhciBSPVMucmVhZF9zaGlmdCgxKTtTLmwrKzt2YXIgaz1TLnJlYWRfc2hpZnQoMik7Uy5sKz0yfShTKTt2YXIgeWU9Uy5yZWFkX3NoaWZ0KDIpO1MucmVhZF9zaGlmdCgyKSxvZT1TLnJlYWRfc2hpZnQoMik7dmFyIE5lPVMucmVhZF9zaGlmdCgy''@;'; put 'put ''KTtTLmwrPU5lO2Zvcih2YXIgWWU9MTtZZTxTLmxlbnMubGVuZ3RoLTE7KytZZSl7aWYoUy5sLUchPVMubGVuc1tZZV0pdGhyb3cgbmV3IEVycm9yKCJUeE86IGJhZCBjb250aW51ZSByZWNvcmQiKTt2YXIgZXQ9U1tTLmxdO2lmKChRKz1yYyhTLFMubGVuc1tZZSsxXS1TLmxlbnNbWWVdLTEp''@;'; put 'put ''KS5sZW5ndGg+PShldD95ZToyKnllKSlicmVha31pZihRLmxlbmd0aCE9PXllJiZRLmxlbmd0aCE9PTIqeWUpdGhyb3cgbmV3IEVycm9yKCJjY2hUZXh0OiAiK3llKyIgIT0gIitRLmxlbmd0aCk7cmV0dXJuIFMubD1HK1Ise3Q6USxpZm50Om9lfX1jYXRjaHtyZXR1cm4gUy5sPUcrUix7dDpR''@;'; put 'put ''LGlmbnQ6b2V9fX19LDQzOTp7bjoiUmVmcmVzaEFsbCIsZjp1b30sNDQwOntuOiJITGluayIsZjpmdW5jdGlvbiBoVihTLFIpe3ZhciBrPXMyKFMpO1MubCs9MTY7dmFyIEc9ZnVuY3Rpb24gWmwoUyxSKXt2YXIgaz1TLmwrUixHPVMucmVhZF9zaGlmdCg0KTtpZigyIT09Ryl0aHJvdyBuZXcg''@;'; put 'put ''RXJyb3IoIlVucmVjb2duaXplZCBzdHJlYW1WZXJzaW9uOiAiK0cpO3ZhciBRPVMucmVhZF9zaGlmdCgyKTtTLmwrPTI7dmFyIG9lLGdlLHBlLHllLE5lLFllLFBlPSIiOzE2JlEmJihvZT1DNChTKSksMTI4JlEmJihnZT1DNChTKSksISgyNTcmflEpJiYocGU9QzQoUykpLDE9PSgyNTcmUSkm''@;'; put 'put ''Jih5ZT1mdW5jdGlvbiBTZihTLFIpe3ZhciBrPVMucmVhZF9zaGlmdCgxNik7c3dpdGNoKGspe2Nhc2UiZTBjOWVhNzlmOWJhY2UxMThjODIwMGFhMDA0YmE5MGIiOnJldHVybiBmdW5jdGlvbiBMMShTKXt2YXIgUj1TLnJlYWRfc2hpZnQoNCksaz1TLmwsRz0hMTtSPjI0JiYoUy5sKz1SLTI0''@;'; put 'put ''LCI3OTU4ODFmNDNiMWQ3ZjQ4YWYyYzgyNWRjNDg1Mjc2MyI9PT1TLnJlYWRfc2hpZnQoMTYpJiYoRz0hMCksUy5sPWspO3ZhciBRPVMucmVhZF9zaGlmdCgoRz9SLTI0OlIpPj4xLCJ1dGYxNmxlIikucmVwbGFjZShFLCIiKTtyZXR1cm4gRyYmKFMubCs9MjQpLFF9KFMpO2Nhc2UiMDMwMzAw''@;'; put 'put ''MDAwMDAwMDAwMGMwMDAwMDAwMDAwMDAwNDYiOnJldHVybiBmdW5jdGlvbiBibyhTKXtmb3IodmFyIFI9Uy5yZWFkX3NoaWZ0KDIpLGs9IiI7Ui0tID4wOylrKz0iLi4vIjt2YXIgRz1TLnJlYWRfc2hpZnQoMCwibHBzdHItYW5zaSIpO2lmKFMubCs9Miw1NzAwNSE9Uy5yZWFkX3NoaWZ0KDIp''@;'; put 'put ''KXRocm93IG5ldyBFcnJvcigiQmFkIEZpbGVNb25pa2VyIik7aWYoMD09PVMucmVhZF9zaGlmdCg0KSlyZXR1cm4gaytHLnJlcGxhY2UoL1xcL2csIi8iKTt2YXIgb2U9Uy5yZWFkX3NoaWZ0KDQpO2lmKDMhPVMucmVhZF9zaGlmdCgyKSl0aHJvdyBuZXcgRXJyb3IoIkJhZCBGaWxlTW9uaWtl''@;'; put 'put ''ciIpO3JldHVybiBrK1MucmVhZF9zaGlmdChvZT4+MSwidXRmMTZsZSIpLnJlcGxhY2UoRSwiIil9KFMpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBNb25pa2VyICIrayl9fShTKSksOCZRJiYoUGU9QzQoUykpLDMyJlEmJihOZT1TLnJlYWRfc2hpZnQoMTYpKSw2NCZR''@;'; put 'put ''JiYoWWU9SDMoUykpLFMubD1rO3ZhciBldD1nZXx8cGV8fHllfHwiIjtldCYmUGUmJihldCs9IiMiK1BlKSxldHx8KGV0PSIjIitQZSksMiZRJiYiLyI9PWV0LmNoYXJBdCgwKSYmIi8iIT1ldC5jaGFyQXQoMSkmJihldD0iZmlsZTovLyIrZXQpO3ZhciBjdD17VGFyZ2V0OmV0fTtyZXR1cm4g''@;'; put 'put ''TmUmJihjdC5ndWlkPU5lKSxZZSYmKGN0LnRpbWU9WWUpLG9lJiYoY3QuVG9vbHRpcD1vZSksY3R9KFMsUi0yNCk7cmV0dXJuW2ssR119fSw0NDE6e246IkxlbCJ9LDQ0Mjp7bjoiQ29kZU5hbWUiLGY6bnV9LDQ0Mzp7bjoiU1hGREJUeXBlIn0sNDQ0OntuOiJQcm90NFJldlBhc3MiLGY6RWN9''@;'; put 'put ''LDQ0NTp7bjoiT2JOb01hY3JvcyJ9LDQ0Njp7bjoiRHYifSw0NDg6e246IkV4Y2VsOUZpbGUiLGY6cjJ9LDQ0OTp7bjoiUmVjYWxjSWQiLGY6ZnVuY3Rpb24gZGQoUyl7cmV0dXJuIFMucmVhZF9zaGlmdCgyKSxTLnJlYWRfc2hpZnQoNCl9LHI6Mn0sNDUwOntuOiJFbnRFeFUyIixmOnIyfSw1''@;'; put 'put ''MTI6e246IkRpbWVuc2lvbnMiLGY6WHd9LDUxMzp7bjoiQmxhbmsiLGY6UXRlfSw1MTU6e246Ik51bWJlciIsZjpmdW5jdGlvbiBsVihTLFIsayl7ay5iaWZmZ3Vlc3MmJjI9PWsuYmlmZiYmKGsuYmlmZj01KTt2YXIgRz13MChTKSxRPVBsKFMpO3JldHVybiBHLnZhbD1RLEd9fSw1MTY6e246''@;'; put 'put ''IkxhYmVsIixmOmZ1bmN0aW9uIEtBKFMsUixrKXtrLmJpZmZndWVzcyYmMj09ay5iaWZmJiYoay5iaWZmPTUpO3ZhciBRPXcwKFMpOzI9PWsuYmlmZiYmUy5sKys7dmFyIG9lPW51KFMsMCxrKTtyZXR1cm4gUS52YWw9b2UsUX19LDUxNzp7bjoiQm9vbEVyciIsZjpFNH0sNTE5OntuOiJTdHJp''@;'; put 'put ''bmciLGY6TzB9LDUyMDp7bjoiUm93IixmOmZ1bmN0aW9uIEtlKFMpe3ZhciBSPXt9O1Iucj1TLnJlYWRfc2hpZnQoMiksUi5jPVMucmVhZF9zaGlmdCgyKSxSLmNudD1TLnJlYWRfc2hpZnQoMiktUi5jO3ZhciBrPVMucmVhZF9zaGlmdCgyKTtTLmwrPTQ7dmFyIEc9Uy5yZWFkX3NoaWZ0KDEp''@;'; put 'put ''O1MubCs9MTt2YXIgUT1TLnJlYWRfc2hpZnQoMik7cmV0dXJuIFIuaXhmZT00MDk1JlEsNyZHJiYoUi5sZXZlbD03JkcpLDMyJkcmJihSLmhpZGRlbj0hMCksNjQmRyYmKFIuaHB0PWsvMjApLFJ9fSw1MjM6e246IkluZGV4In0sNTQ1OntuOiJBcnJheSIsZjprdn0sNTQ5OntuOiJEZWZhdWx0''@;'; put 'put ''Um93SGVpZ2h0IixmOmMyfSw1NjY6e246IlRhYmxlIn0sNTc0OntuOiJXaW5kb3cyIixmOmZ1bmN0aW9uIHF0ZShTLFIsayl7aWYoayYmay5iaWZmPj0yJiZrLmJpZmY8NSlyZXR1cm57fTt2YXIgRz1TLnJlYWRfc2hpZnQoMik7cmV0dXJue1JUTDo2NCZHLGdyaWQ6ISEoMiZHKSxmcm96ZW46''@;'; put 'put ''ISEoOCZHKX19fSw2Mzg6e246IlJLIixmOmZ1bmN0aW9uIFhBKFMpe3ZhciBSPVMucmVhZF9zaGlmdCgyKSxrPVMucmVhZF9zaGlmdCgyKSxHPXdvKFMpO3JldHVybntyOlIsYzprLGl4ZmU6R1swXSxya251bTpHWzFdfX19LDY1OTp7bjoiU3R5bGUiLGY6ZnVuY3Rpb24gTDAoUyxSLGspe3Jl''@;'; put 'put ''dHVybiBTLmwrPVIse319fSwxMDQ4OntuOiJCaWdOYW1lIn0sMTA1NDp7bjoiRm9ybWF0IixmOmZ1bmN0aW9uIHF3KFMsUixrKXtyZXR1cm5bUy5yZWFkX3NoaWZ0KDIpLFgwKFMsMCxrKV19fSwxMDg0OntuOiJDb250aW51ZUJpZ05hbWUifSwxMjEyOntuOiJTaHJGbWxhIixmOmZ1bmN0aW9u''@;'; put 'put ''IEF2KFMsUixrKXt2YXIgRz1NNChTKTtTLmwrKzt2YXIgUT1TLnJlYWRfc2hpZnQoMSk7cmV0dXJuW0szKFMsUi09OCxrKSxRLEddfX0sMjA0ODp7bjoiSExpbmtUb29sdGlwIixmOmZ1bmN0aW9uIHBWKFMsUil7Uy5yZWFkX3NoaWZ0KDIpO3ZhciBrPXMyKFMpLEc9Uy5yZWFkX3NoaWZ0KChS''@;'; put 'put ''LTEwKS8yLCJkYmNzLWNvbnQiKTtyZXR1cm5bayxHPUcucmVwbGFjZShFLCIiKV19fSwyMDQ5OntuOiJXZWJQdWIifSwyMDUwOntuOiJRc2lTWFRhZyJ9LDIwNTE6e246IkRCUXVlcnlFeHQifSwyMDUyOntuOiJFeHRTdHJpbmcifSwyMDUzOntuOiJUeHRRcnkifSwyMDU0OntuOiJRc2lyIn0s''@;'; put 'put ''MjA1NTp7bjoiUXNpZiJ9LDIwNTY6e246IlJSRFRRU0lGIn0sMjA1Nzp7bjoiQk9GIixmOlZjfSwyMDU4OntuOiJPbGVEYkNvbm4ifSwyMDU5OntuOiJXT3B0In0sMjA2MDp7bjoiU1hWaWV3RXgifSwyMDYxOntuOiJTWFRIIn0sMjA2Mjp7bjoiU1hQSUV4In0sMjA2Mzp7bjoiU1hWRFRFeCJ9''@;'; put 'put ''LDIwNjQ6e246IlNYVmlld0V4OSJ9LDIwNjY6e246IkNvbnRpbnVlRnJ0In0sMjA2Nzp7bjoiUmVhbFRpbWVEYXRhIn0sMjEyODp7bjoiQ2hhcnRGcnRJbmZvIn0sMjEyOTp7bjoiRnJ0V3JhcHBlciJ9LDIxMzA6e246IlN0YXJ0QmxvY2sifSwyMTMxOntuOiJFbmRCbG9jayJ9LDIxMzI6e246''@;'; put 'put ''IlN0YXJ0T2JqZWN0In0sMjEzMzp7bjoiRW5kT2JqZWN0In0sMjEzNDp7bjoiQ2F0TGFiIn0sMjEzNTp7bjoiWU11bHQifSwyMTM2OntuOiJTWFZpZXdMaW5rIn0sMjEzNzp7bjoiUGl2b3RDaGFydEJpdHMifSwyMTM4OntuOiJGcnRGb250TGlzdCJ9LDIxNDY6e246IlNoZWV0RXh0In0sMjE0''@;'; put 'put ''Nzp7bjoiQm9va0V4dCIscjoxMn0sMjE0ODp7bjoiU1hBZGRsIn0sMjE0OTp7bjoiQ3JFcnIifSwyMTUwOntuOiJIRlBpY3R1cmUifSwyMTUxOntuOiJGZWF0SGRyIixmOnIyfSwyMTUyOntuOiJGZWF0In0sMjE1NDp7bjoiRGF0YUxhYkV4dCJ9LDIxNTU6e246IkRhdGFMYWJFeHRDb250ZW50''@;'; put 'put ''cyJ9LDIxNTY6e246IkNlbGxXYXRjaCJ9LDIxNjE6e246IkZlYXRIZHIxMSJ9LDIxNjI6e246IkZlYXR1cmUxMSJ9LDIxNjQ6e246IkRyb3BEb3duT2JqSWRzIn0sMjE2NTp7bjoiQ29udGludWVGcnQxMSJ9LDIxNjY6e246IkRDb25uIn0sMjE2Nzp7bjoiTGlzdDEyIn0sMjE2ODp7bjoiRmVh''@;'; put 'put ''dHVyZTEyIn0sMjE2OTp7bjoiQ29uZEZtdDEyIn0sMjE3MDp7bjoiQ0YxMiJ9LDIxNzE6e246IkNGRXgifSwyMTcyOntuOiJYRkNSQyIsZjpmdW5jdGlvbiB1bChTKXtTLmwrPTI7dmFyIFI9e2N4ZnM6MCxjcmM6MH07cmV0dXJuIFIuY3hmcz1TLnJlYWRfc2hpZnQoMiksUi5jcmM9Uy5yZWFk''@;'; put 'put ''X3NoaWZ0KDQpLFJ9LHI6MTJ9LDIxNzM6e246IlhGRXh0IixmOmZ1bmN0aW9uIHNCKFMsUil7Uy5sKz0yO3ZhciBHPVMucmVhZF9zaGlmdCgyKTtTLmwrPTI7Zm9yKHZhciBRPVMucmVhZF9zaGlmdCgyKSxvZT1bXTtRLS0gPjA7KW9lLnB1c2goJHYoUykpO3JldHVybntpeGZlOkcsZXh0Om9l''@;'; put 'put ''fX0scjoxMn0sMjE3NDp7bjoiQXV0b0ZpbHRlcjEyIn0sMjE3NTp7bjoiQ29udGludWVGcnQxMiJ9LDIxODA6e246Ik1EVEluZm8ifSwyMTgxOntuOiJNRFhTdHIifSwyMTgyOntuOiJNRFhUdXBsZSJ9LDIxODM6e246Ik1EWFNldCJ9LDIxODQ6e246Ik1EWFByb3AifSwyMTg1OntuOiJNRFhL''@;'; put 'put ''UEkifSwyMTg2OntuOiJNREIifSwyMTg3OntuOiJQTFYifSwyMTg4OntuOiJDb21wYXQxMiIsZjp1byxyOjEyfSwyMTg5OntuOiJEWEYifSwyMTkwOntuOiJUYWJsZVN0eWxlcyIscjoxMn0sMjE5MTp7bjoiVGFibGVTdHlsZSJ9LDIxOTI6e246IlRhYmxlU3R5bGVFbGVtZW50In0sMjE5NDp7''@;'; put 'put ''bjoiU3R5bGVFeHQifSwyMTk1OntuOiJOYW1lUHVibGlzaCJ9LDIxOTY6e246Ik5hbWVDbXQiLGY6ZnVuY3Rpb24gRzYoUyxSLGspe2lmKCEoay5iaWZmPDgpKXt2YXIgRz1TLnJlYWRfc2hpZnQoMiksUT1TLnJlYWRfc2hpZnQoMik7cmV0dXJuW3JjKFMsRyxrKSxyYyhTLFEsayldfVMubCs9''@;'; put 'put ''Un0scjoxMn0sMjE5Nzp7bjoiU29ydERhdGEifSwyMTk4OntuOiJUaGVtZSIsZjpmdW5jdGlvbiBhQihTLFIsayl7dmFyIEc9Uy5sK1I7aWYoMTI0MjI2IT09Uy5yZWFkX3NoaWZ0KDQpKXtpZighay5jZWxsU3R5bGVzKXJldHVybiB2b2lkKFMubD1HKTt2YXIgZ2Usb2U9Uy5zbGljZShTLmwp''@;'; put 'put ''O1MubD1HO3RyeXtnZT1jbihvZSx7dHlwZToiYXJyYXkifSl9Y2F0Y2h7cmV0dXJufXZhciBwZT1ucihnZSwidGhlbWUvdGhlbWUvdGhlbWUxLnhtbCIsITApO2lmKHBlKXJldHVybiBFQyhwZSxrKX19LHI6MTJ9LDIxOTk6e246IkdVSURUeXBlTGliIn0sMjIwMDp7bjoiRm5HcnAxMiJ9LDIy''@;'; put 'put ''MDE6e246Ik5hbWVGbkdycDEyIn0sMjIwMjp7bjoiTVRSU2V0dGluZ3MiLGY6ZnVuY3Rpb24gVDQoUyl7cmV0dXJuWzAhPT1TLnJlYWRfc2hpZnQoNCksMCE9PVMucmVhZF9zaGlmdCg0KSxTLnJlYWRfc2hpZnQoNCldfSxyOjEyfSwyMjAzOntuOiJDb21wcmVzc1BpY3R1cmVzIixmOnIyfSwy''@;'; put 'put ''MjA0OntuOiJIZWFkZXJGb290ZXIifSwyMjA1OntuOiJDcnRMYXlvdXQxMiJ9LDIyMDY6e246IkNydE1sRnJ0In0sMjIwNzp7bjoiQ3J0TWxGcnRDb250aW51ZSJ9LDIyMTE6e246IkZvcmNlRnVsbENhbGN1bGF0aW9uIixmOmZ1bmN0aW9uIEl0KFMpe3ZhciBSPWZ1bmN0aW9uIG8yKFMpe3Zh''@;'; put 'put ''ciBSPVMucmVhZF9zaGlmdCgyKSxrPVMucmVhZF9zaGlmdCgyKTtyZXR1cm4gUy5sKz04LHt0eXBlOlIsZmxhZ3M6a319KFMpO2lmKDIyMTEhPVIudHlwZSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgRnV0dXJlIFJlY29yZCAiK1IudHlwZSk7cmV0dXJuIDAhPT1TLnJlYWRfc2hpZnQoNCl9''@;'; put 'put ''fSwyMjEyOntuOiJTaGFwZVByb3BzU3RyZWFtIn0sMjIxMzp7bjoiVGV4dFByb3BzU3RyZWFtIn0sMjIxNDp7bjoiUmljaFRleHRTdHJlYW0ifSwyMjE1OntuOiJDcnRMYXlvdXQxMkEifSw0MDk3OntuOiJVbml0cyJ9LDQwOTg6e246IkNoYXJ0In0sNDA5OTp7bjoiU2VyaWVzIn0sNDEwMjp7''@;'; put 'put ''bjoiRGF0YUZvcm1hdCJ9LDQxMDM6e246IkxpbmVGb3JtYXQifSw0MTA1OntuOiJNYXJrZXJGb3JtYXQifSw0MTA2OntuOiJBcmVhRm9ybWF0In0sNDEwNzp7bjoiUGllRm9ybWF0In0sNDEwODp7bjoiQXR0YWNoZWRMYWJlbCJ9LDQxMDk6e246IlNlcmllc1RleHQifSw0MTE2OntuOiJDaGFy''@;'; put 'put ''dEZvcm1hdCJ9LDQxMTc6e246IkxlZ2VuZCJ9LDQxMTg6e246IlNlcmllc0xpc3QifSw0MTE5OntuOiJCYXIifSw0MTIwOntuOiJMaW5lIn0sNDEyMTp7bjoiUGllIn0sNDEyMjp7bjoiQXJlYSJ9LDQxMjM6e246IlNjYXR0ZXIifSw0MTI0OntuOiJDcnRMaW5lIn0sNDEyNTp7bjoiQXhpcyJ9''@;'; put 'put ''LDQxMjY6e246IlRpY2sifSw0MTI3OntuOiJWYWx1ZVJhbmdlIn0sNDEyODp7bjoiQ2F0U2VyUmFuZ2UifSw0MTI5OntuOiJBeGlzTGluZSJ9LDQxMzA6e246IkNydExpbmsifSw0MTMyOntuOiJEZWZhdWx0VGV4dCJ9LDQxMzM6e246IlRleHQifSw0MTM0OntuOiJGb250WCIsZjpFY30sNDEz''@;'; put 'put ''NTp7bjoiT2JqZWN0TGluayJ9LDQxNDY6e246IkZyYW1lIn0sNDE0Nzp7bjoiQmVnaW4ifSw0MTQ4OntuOiJFbmQifSw0MTQ5OntuOiJQbG90QXJlYSJ9LDQxNTQ6e246IkNoYXJ0M2QifSw0MTU2OntuOiJQaWNGIn0sNDE1Nzp7bjoiRHJvcEJhciJ9LDQxNTg6e246IlJhZGFyIn0sNDE1OTp7''@;'; put 'put ''bjoiU3VyZiJ9LDQxNjA6e246IlJhZGFyQXJlYSJ9LDQxNjE6e246IkF4aXNQYXJlbnQifSw0MTYzOntuOiJMZWdlbmRFeGNlcHRpb24ifSw0MTY0OntuOiJTaHRQcm9wcyIsZjpmdW5jdGlvbiBhQyhTLFIsayl7dmFyIEc9e2FyZWE6ITF9O2lmKDUhPWsuYmlmZilyZXR1cm4gUy5sKz1SLEc7''@;'; put 'put ''dmFyIFE9Uy5yZWFkX3NoaWZ0KDEpO3JldHVybiBTLmwrPTMsMTYmUSYmKEcuYXJlYT0hMCksR319LDQxNjU6e246IlNlclRvQ3J0In0sNDE2Njp7bjoiQXhlc1VzZWQifSw0MTY4OntuOiJTQmFzZVJlZiJ9LDQxNzA6e246IlNlclBhcmVudCJ9LDQxNzE6e246IlNlckF1eFRyZW5kIn0sNDE3''@;'; put 'put ''NDp7bjoiSUZtdFJlY29yZCJ9LDQxNzU6e246IlBvcyJ9LDQxNzY6e246IkFsUnVucyJ9LDQxNzc6e246IkJSQUkifSw0MTg3OntuOiJTZXJBdXhFcnJCYXIifSw0MTg4OntuOiJDbHJ0Q2xpZW50IixmOmZ1bmN0aW9uIGxzKFMpe2Zvcih2YXIgUj1TLnJlYWRfc2hpZnQoMiksaz1bXTtSLS0g''@;'; put 'put ''PjA7KWsucHVzaCh1ZChTKSk7cmV0dXJuIGt9fSw0MTg5OntuOiJTZXJGbXQifSw0MTkxOntuOiJDaGFydDNEQmFyU2hhcGUifSw0MTkyOntuOiJGYmkifSw0MTkzOntuOiJCb3BQb3AifSw0MTk0OntuOiJBeGNFeHQifSw0MTk1OntuOiJEYXQifSw0MTk2OntuOiJQbG90R3Jvd3RoIn0sNDE5''@;'; put 'put ''Nzp7bjoiU0lJbmRleCJ9LDQxOTg6e246IkdlbEZyYW1lIn0sNDE5OTp7bjoiQm9wUG9wQ3VzdG9tIn0sNDIwMDp7bjoiRmJpMiJ9LDA6e246IkRpbWVuc2lvbnMiLGY6WHd9LDE6e246IkJJRkYyQkxBTksifSwyOntuOiJCSUZGMklOVCIsZjpmdW5jdGlvbiB5VihTKXt2YXIgUj13MChTKTsr''@;'; put 'put ''K1MubDt2YXIgaz1TLnJlYWRfc2hpZnQoMik7cmV0dXJuIFIudD0ibiIsUi52YWw9ayxSfX0sMzp7bjoiQklGRjJOVU0iLGY6ZnVuY3Rpb24gYlYoUyl7dmFyIFI9dzAoUyk7KytTLmw7dmFyIGs9UGwoUyk7cmV0dXJuIFIudD0ibiIsUi52YWw9ayxSfX0sNDp7bjoiQklGRjJTVFIiLGY6ZnVu''@;'; put 'put ''Y3Rpb24gQWYoUyxSLGspe2suYmlmZmd1ZXNzJiY1PT1rLmJpZmYmJihrLmJpZmY9Mik7dmFyIEc9dzAoUyk7KytTLmw7dmFyIFE9WDAoUywwLGspO3JldHVybiBHLnQ9InN0ciIsRy52YWw9USxHfX0sNTp7bjoiQm9vbEVyciIsZjpFNH0sNzp7bjoiU3RyaW5nIixmOmZ1bmN0aW9uIG9DKFMp''@;'; put 'put ''e3ZhciBSPVMucmVhZF9zaGlmdCgxKTtyZXR1cm4gMD09PVI/KFMubCsrLCIiKTpTLnJlYWRfc2hpZnQoUiwic2Jjcy1jb250Iil9fSw4OntuOiJCSUZGMlJPVyJ9LDk6e246IkJPRiIsZjpWY30sMTE6e246IkluZGV4In0sMjI6e246IkV4dGVybkNvdW50IixmOkVjfSwzMDp7bjoiQklGRjJG''@;'; put 'put ''T1JNQVQiLGY6dTJ9LDMxOntuOiJCSUZGMkZNVENOVCJ9LDMyOntuOiJCSUZGMkNPTElORk8ifSwzMzp7bjoiQXJyYXkiLGY6a3Z9LDM2OntuOiJDT0xXSURUSCJ9LDM3OntuOiJEZWZhdWx0Um93SGVpZ2h0IixmOmMyfSw1MDp7bjoiQklGRjJGT05UWFRSQSIsZjpmdW5jdGlvbiBzQyhTLFIp''@;'; put 'put ''e1MubCs9NixTLmwrPTIsUy5sKz0xLFMubCs9MyxTLmwrPTEsUy5sKz1SLTEzfX0sNjI6e246IkJJRkYyV0lORE9XMiJ9LDUyOntuOiJEREVPYmpOYW1lIn0sNjc6e246IkJJRkYyWEYifSw2ODp7bjoiQklGRjJYRklOREVYIixmOkVjfSw2OTp7bjoiQklGRjJGT05UQ0xSIn0sODY6e246IkJJ''@;'; put 'put ''RkY0Rk1UQ05UIn0sMTI2OntuOiJSSyJ9LDEyNzp7bjoiSW1EYXRhIixmOmZ1bmN0aW9uIGFoKFMpe3ZhciBSPVMucmVhZF9zaGlmdCgyKSxrPVMucmVhZF9zaGlmdCgyKSxHPVMucmVhZF9zaGlmdCg0KSxRPXtmbXQ6UixlbnY6ayxsZW46RyxkYXRhOlMuc2xpY2UoUy5sLFMubCtHKX07cmV0''@;'; put 'put ''dXJuIFMubCs9RyxRfX0sMTM1OntuOiJBZGRpbiJ9LDEzNjp7bjoiRWRnIn0sMTM3OntuOiJQdWIifSwxNDU6e246IlN1YiJ9LDE0ODp7bjoiTEhSZWNvcmQifSwxNDk6e246IkxITkdyYXBoIn0sMTUwOntuOiJTb3VuZCJ9LDE2OTp7bjoiQ29vcmRMaXN0In0sMTcxOntuOiJHQ1cifSwxODg6''@;'; put 'put ''e246IlNockZtbGEifSwxOTE6e246IlRvb2xiYXJIZHIifSwxOTI6e246IlRvb2xiYXJFbmQifSwxOTQ6e246IkFkZE1lbnUifSwxOTU6e246IkRlbE1lbnUifSwyMTQ6e246IlJTdHJpbmciLGY6ZnVuY3Rpb24gbEMoUyxSLGspe3ZhciBHPVMubCtSLFE9dzAoUyksb2U9Uy5yZWFkX3NoaWZ0''@;'; put 'put ''KDIpLGdlPXJjKFMsb2Usayk7cmV0dXJuIFMubD1HLFEudD0ic3RyIixRLnZhbD1nZSxRfX0sMjIzOntuOiJVRERlc2MifSwyMzQ6e246IlRhYklkQ29uZiJ9LDM1NDp7bjoiWEw1TW9kaWZ5In0sNDIxOntuOiJGaWxlU2hhcmluZzIifSw1MTg6e246IkZvcm11bGEiLGY6UUN9LDUyMTp7bjoi''@;'; put 'put ''Qk9GIixmOlZjfSw1MzY6e246IkxibCIsZjp0Q30sNTQ3OntuOiJFeHRlcm5OYW1lIixmOmVDfSw1NjE6e246IkZvbnQifSw1Nzk6e246IkJJRkYzWEYifSwxMDMwOntuOiJGb3JtdWxhIixmOlFDfSwxMDMzOntuOiJCT0YiLGY6VmN9LDEwOTE6e246IkJJRkY0WEYifSwyMTU3OntuOiJGZWF0''@;'; put 'put ''SW5mbyJ9LDIxNjM6e246IkZlYXRJbmZvMTEifSwyMTc3OntuOiJTWEFkZGwxMiJ9LDIyNDA6e246IkF1dG9XZWJQdWIifSwyMjQxOntuOiJMaXN0T2JqIn0sMjI0Mjp7bjoiTGlzdEZpZWxkIn0sMjI0Mzp7bjoiTGlzdERWIn0sMjI0NDp7bjoiTGlzdENvbmRGbXQifSwyMjQ1OntuOiJMaXN0''@;'; put 'put ''Q0YifSwyMjQ2OntuOiJGTVFyeSJ9LDIyNDc6e246IkZNU1FyeSJ9LDIyNDg6e246IlBMViJ9LDIyNDk6e246IkxuRXh0In0sMjI1MDp7bjoiTWtyRXh0In0sMjI1MTp7bjoiQ3J0Q29vcHQifSwyMjYyOntuOiJGUlRBcmNoSWQkIixyOjEyfSwyOTI4Mjp7fX0scVM9SWUoS1MsIm4iKTtmdW5j''@;'; put 'put ''dGlvbiBHaShTLFIsayxHKXt2YXIgUT0rUnx8K3FTW1JdO2lmKCFpc05hTihRKSl7dmFyIG9lPUd8fChrfHxbXSkubGVuZ3RofHwwLGdlPVMubmV4dCg0KTtnZS53cml0ZV9zaGlmdCgyLFEpLGdlLndyaXRlX3NoaWZ0KDIsb2UpLG9lPjAmJkFyKGspJiZTLnB1c2goayl9fWZ1bmN0aW9uIEFi''@;'; put 'put ''KFMsUixrKXtyZXR1cm4gU3x8KFM9Ym4oNykpLFMud3JpdGVfc2hpZnQoMixSKSxTLndyaXRlX3NoaWZ0KDIsayksUy53cml0ZV9zaGlmdCgyLDApLFMud3JpdGVfc2hpZnQoMSwwKSxTfWZ1bmN0aW9uIFluZShTLFIsayxHKXtpZihudWxsIT1SLnYpc3dpdGNoKFIudCl7Y2FzZSJkIjpjYXNl''@;'; put 'put ''Im4iOnZhciBRPSJkIj09Ui50P1FlKEhlKFIudikpOlIudjtyZXR1cm4gdm9pZChRPT0oMHxRKSYmUT49MCYmUTw2NTUzNj9HaShTLDIsZnVuY3Rpb24gX1YoUyxSLGspe3ZhciBHPWJuKDkpO3JldHVybiBBYihHLFMsUiksRy53cml0ZV9zaGlmdCgyLGspLEd9KGssRyxRKSk6R2koUywzLGZ1''@;'; put 'put ''bmN0aW9uIGlrKFMsUixrKXt2YXIgRz1ibigxNSk7cmV0dXJuIEFiKEcsUyxSKSxHLndyaXRlX3NoaWZ0KDgsaywiZiIpLEd9KGssRyxRKSkpO2Nhc2UiYiI6Y2FzZSJlIjpyZXR1cm4gdm9pZCBHaShTLDUsZnVuY3Rpb24gWm5lKFMsUixrLEcpe3ZhciBRPWJuKDkpO3JldHVybiBBYihRLFMs''@;'; put 'put ''UiksS2koayxHfHwiYiIsUSksUX0oayxHLFIudixSLnQpKTtjYXNlInMiOmNhc2Uic3RyIjpyZXR1cm4gdm9pZCBHaShTLDQsZnVuY3Rpb24gV25lKFMsUixrKXt2YXIgRz1ibig4KzIqay5sZW5ndGgpO3JldHVybiBBYihHLFMsUiksRy53cml0ZV9zaGlmdCgxLGsubGVuZ3RoKSxHLndyaXRl''@;'; put 'put ''X3NoaWZ0KGsubGVuZ3RoLGssInNiY3MiKSxHLmw8Ry5sZW5ndGg/Ry5zbGljZSgwLEcubCk6R30oayxHLChSLnZ8fCIiKS5zbGljZSgwLDI1NSkpKX1HaShTLDEsQWIobnVsbCxrLEcpKX1mdW5jdGlvbiBYbmUoUyxSLGssRyxRKXt2YXIgb2U9MTYrbDAoUS5jZWxsWGZzLFEuY2VsbFN0eWxl''@;'; put 'put ''WGZzLFIsUSk7aWYobnVsbCE9Ui52fHxSLmJmKWlmKFIuYmYpR2koUywiRm9ybXVsYSIsZnVuY3Rpb24gQjUoUyxSLGssRyxRKXt2YXIgb2U9YTIoUixrLFEpLGdlPWZ1bmN0aW9uIEpDKFMpe2lmKG51bGw9PVMpe3ZhciBSPWJuKDgpO3JldHVybiBSLndyaXRlX3NoaWZ0KDEsMyksUi53cml0''@;'; put 'put ''ZV9zaGlmdCgxLDApLFIud3JpdGVfc2hpZnQoMiwwKSxSLndyaXRlX3NoaWZ0KDIsMCksUi53cml0ZV9zaGlmdCgyLDY1NTM1KSxSfXJldHVybiBPdSgibnVtYmVyIj09dHlwZW9mIFM/UzowKX0oUy52KSxwZT1ibig2KTtwZS53cml0ZV9zaGlmdCgyLDMzKSxwZS53cml0ZV9zaGlmdCg0LDAp''@;'; put 'put ''O2Zvcih2YXIgUGU9Ym4oUy5iZi5sZW5ndGgpLE5lPTA7TmU8Uy5iZi5sZW5ndGg7KytOZSlQZVtOZV09Uy5iZltOZV07cmV0dXJuIGooW29lLGdlLHBlLFBlXSl9KFIsayxHLDAsb2UpKTtlbHNlIHN3aXRjaChSLnQpe2Nhc2UiZCI6Y2FzZSJuIjpHaShTLCJOdW1iZXIiLGZ1bmN0aW9uIFF3''@;'; put 'put ''KFMsUixrLEcpe3ZhciBRPWJuKDE0KTtyZXR1cm4gYTIoUyxSLEcsUSksT3UoayxRKSxRfShrLEcsImQiPT1SLnQ/UWUoSGUoUi52KSk6Ui52LG9lKSk7YnJlYWs7Y2FzZSJiIjpjYXNlImUiOkdpKFMsNTE3LGZ1bmN0aW9uIE8xKFMsUixrLEcsUSxvZSl7dmFyIGdlPWJuKDgpO3JldHVybiBh''@;'; put 'put ''MihTLFIsRyxnZSksS2koayxvZSxnZSksZ2V9KGssRyxSLnYsb2UsMCxSLnQpKTticmVhaztjYXNlInMiOmNhc2Uic3RyIjppZihRLmJvb2tTU1Qpe3ZhciBwZT1hUyhRLlN0cmluZ3MsUi52LFIuUj9SLnI9UXMoUi5SKTpudWxsLFEucmV2U3RyaW5ncyk7aWYoUi5SKWZvcih2YXIgeWU9MDt5''@;'; put 'put ''ZTxSLlIubGVuZ3RoOysreWUpUi5SW3llXS5zJiZsMChRLmNlbGxYZnMsUS5jZWxsU3R5bGVYZnMse3Q6Im4iLHY6MCxzOlIuUlt5ZV0uc30sUSk7R2koUywiTGFiZWxTc3QiLGZ1bmN0aW9uICRBKFMsUixrLEcpe3ZhciBRPWJuKDEwKTtyZXR1cm4gYTIoUyxSLEcsUSksUS53cml0ZV9zaGlm''@;'; put 'put ''dCg0LGspLFF9KGssRyxwZSxvZSkpfWVsc2UgR2koUywiTGFiZWwiLGZ1bmN0aW9uIGlWKFMsUixrLEcsUSl7dmFyIG9lPSFRfHw4PT1RLmJpZmYsZ2U9Ym4oK29lKzgrKDErb2UpKmsubGVuZ3RoKTtyZXR1cm4gYTIoUyxSLEcsZ2UpLGdlLndyaXRlX3NoaWZ0KDIsay5sZW5ndGgpLG9lJiZn''@;'; put 'put ''ZS53cml0ZV9zaGlmdCgxLDEpLGdlLndyaXRlX3NoaWZ0KCgxK29lKSprLmxlbmd0aCxrLG9lPyJ1dGYxNmxlIjoic2JjcyIpLGdlfShrLEcsKFIudnx8IiIpLnNsaWNlKDAsMjU1KSxvZSxRKSk7YnJlYWs7ZGVmYXVsdDpHaShTLCJCbGFuayIsYTIoayxHLG9lKSl9ZWxzZSBHaShTLCJCbGFu''@;'; put 'put ''ayIsYTIoayxHLG9lKSl9ZnVuY3Rpb24gRUkoUyxSLGspe3ZhciBOZSxHPWJpKCksUT1rLlNoZWV0TmFtZXNbU10sb2U9ay5TaGVldHNbUV18fHt9LGdlPShrfHx7fSkuV29ya2Jvb2t8fHt9LHBlPShnZS5TaGVldHN8fFtdKVtTXXx8e30seWU9QXJyYXkuaXNBcnJheShvZSksUGU9OD09Ui5i''@;'; put 'put ''aWZmLFllPSIiLGV0PVtdLGN0PW9vKG9lWyIhcmVmIl18fCJBMSIpLEV0PVBlPzY1NTM2OjE2Mzg0O2lmKGN0LmUuYz4yNTV8fGN0LmUucj49RXQpe2lmKFIuV1RGKXRocm93IG5ldyBFcnJvcigiUmFuZ2UgIisob2VbIiFyZWYiXXx8IkExIikrIiBleGNlZWRzIGZvcm1hdCBsaW1pdCBBMTpJ''@;'; put 'put ''VjE2Mzg0Iik7Y3QuZS5jPU1hdGgubWluKGN0LmUuYywyNTUpLGN0LmUucj1NYXRoLm1pbihjdC5lLmMsRXQtMSl9R2koRywyMDU3LHg0KDAsMTYsUikpLEdpKEcsIkNhbGNNb2RlIixhMCgxKSksR2koRywiQ2FsY0NvdW50IixhMCgxMDApKSxHaShHLCJDYWxjUmVmTW9kZSIsdHUoITApKSxH''@;'; put 'put ''aShHLCJDYWxjSXRlciIsdHUoITEpKSxHaShHLCJDYWxjRGVsdGEiLE91KC4wMDEpKSxHaShHLCJDYWxjU2F2ZVJlY2FsYyIsdHUoITApKSxHaShHLCJQcmludFJvd0NvbCIsdHUoITEpKSxHaShHLCJQcmludEdyaWQiLHR1KCExKSksR2koRywiR3JpZFNldCIsYTAoMSkpLEdpKEcsIkd1dHMi''@;'; put 'put ''LGZ1bmN0aW9uIFk2KFMpe3ZhciBSPWJuKDgpO3JldHVybiBSLndyaXRlX3NoaWZ0KDQsMCksUi53cml0ZV9zaGlmdCgyLFNbMF0/U1swXSsxOjApLFIud3JpdGVfc2hpZnQoMixTWzFdP1NbMV0rMTowKSxSfShbMCwwXSkpLEdpKEcsIkhDZW50ZXIiLHR1KCExKSksR2koRywiVkNlbnRlciIs''@;'; put 'put ''dHUoITEpKTt2YXIgYXQ9b2VbIiFwcmludCJdJiZvZVsiIXByaW50Il0ubWFyZ2luc3x8b2VbIiFtYXJnaW5zIl07YXQmJihudWxsIT1hdC5sZWZ0JiZHaShHLCJMZWZ0TWFyZ2luIixPdShhdC5sZWZ0KSksbnVsbCE9YXQucmlnaHQmJkdpKEcsIlJpZ2h0TWFyZ2luIixPdShhdC5yaWdodCkp''@;'; put 'put ''LG51bGwhPWF0LnRvcCYmR2koRywiVG9wTWFyZ2luIixPdShhdC50b3ApKSxudWxsIT1hdC5ib3R0b20mJkdpKEcsIkJvdHRvbU1hcmdpbiIsT3UoYXQuYm90dG9tKSksKG51bGwhPWF0LmhlYWRlcnx8bnVsbCE9YXQuZm9vdGVyKSYmR2koRywiU2V0dXAiLGZ1bmN0aW9uIGlDKFMsUil7dmFy''@;'; put 'put ''IGs9Ym4oMzQpLEc9ITEsUT03MDtyZXR1cm4ibGFuZHNjYXBlIj09KFIucHJvcHN8fHt9KS5vcmllbnRhdGlvbiYmKEc9ITAsUSY9LTY3KSxHJiYoUSY9LTUpLGsud3JpdGVfc2hpZnQoMiwxKSxrLndyaXRlX3NoaWZ0KDIsMTAwKSxrLndyaXRlX3NoaWZ0KDIsMCksay53cml0ZV9zaGlmdCgy''@;'; put 'put ''LDApLGsud3JpdGVfc2hpZnQoMiwwKSxrLndyaXRlX3NoaWZ0KDEsUSksay53cml0ZV9zaGlmdCgxLDApLGsud3JpdGVfc2hpZnQoMiw2MDApLGsud3JpdGVfc2hpZnQoMiw2MDApLE91KG51bGw9PVMuaGVhZGVyPy41OlMuaGVhZGVyLGspLE91KG51bGw9PVMuZm9vdGVyPy41OlMuZm9vdGVy''@;'; put 'put ''LGspLGsud3JpdGVfc2hpZnQoMiwxKSxrfShhdCxvZVsiIXByaW50Il18fHt9KSkpLFBlJiZmdW5jdGlvbiBWeihTLFIsayl7aWYoUil7dmFyIEc9MDtSLmZvckVhY2goZnVuY3Rpb24oUSxvZSl7KytHPD0yNTYmJlEmJihRLmF1dG8mJm9TKGssUSxvZSksR2koUywiQ29sSW5mbyIsZnVuY3Rp''@;'; put 'put ''b24gJDYoUyxSKXt2YXIgaz1ibigxMik7ay53cml0ZV9zaGlmdCgyLFIpLGsud3JpdGVfc2hpZnQoMixSKSxrLndyaXRlX3NoaWZ0KDIsMjU2KlMud2lkdGgpLGsud3JpdGVfc2hpZnQoMiwwKTt2YXIgRz0wO3JldHVybiBTLmhpZGRlbiYmKEd8PTEpLGsud3JpdGVfc2hpZnQoMSxHKSxrLndy''@;'; put 'put ''aXRlX3NoaWZ0KDEsRz1TLmxldmVsfHwwKSxrLndyaXRlX3NoaWZ0KDIsMCksa30odTgob2UsUSksb2UpKSl9KX19KEcsb2VbIiFjb2xzIl0sb2UpLEdpKEcsIkRpbWVuc2lvbnMiLGZ1bmN0aW9uIHFBKFMsUil7dmFyIGs9OCE9Ui5iaWZmJiZSLmJpZmY/Mjo0LEc9Ym4oMiprKzYpO3JldHVy''@;'; put 'put ''biBHLndyaXRlX3NoaWZ0KGssUy5zLnIpLEcud3JpdGVfc2hpZnQoayxTLmUucisxKSxHLndyaXRlX3NoaWZ0KDIsUy5zLmMpLEcud3JpdGVfc2hpZnQoMixTLmUuYysxKSxHLndyaXRlX3NoaWZ0KDIsMCksR30oY3QsUikpLFBlJiYob2VbIiFsaW5rcyJdPVtdKSxvZVsiIXJvd3MiXSYmUGUm''@;'; put 'put ''Jm9lWyIhcm93cyJdLmZvckVhY2goZnVuY3Rpb24oS3QsVG4pe2Zvcih2YXIgcnI9amkoVG4pLFNuPTI1Nixscj0wLFhuPUt0LnM/MTYrbDAoUi5jZWxsWGZzLFIuY2VsbFN0eWxlWGZzLHt0OiJuIix2OjAsczpLdC5zfSxSKTowLEJuPWN0LnMuYztCbjw9Y3QuZS5jOysrQm4pKHllPyhvZVtU''@;'; put 'put ''bl18fFtdKVtCbl06b2VbZXRbQm5dK3JyXSkmJihCbjxTbiYmKFNuPUJuKSxCbj5sciYmKGxyPUJuKSk7bHI8U24mJihTbj1scj0wKSxHaShHLCJSb3ciLGZ1bmN0aW9uIG10KFMsUixrKXt2YXIgRz1ibigxNik7Ry53cml0ZV9zaGlmdCgyLFIpLEcud3JpdGVfc2hpZnQoMixrWzBdKSxHLndy''@;'; put 'put ''aXRlX3NoaWZ0KDIsa1sxXSsxKSxHLndyaXRlX3NoaWZ0KDIsMjAqUy5ocHR8fDIwKlUzKFMuaHB4KXx8MzMwKSxHLndyaXRlX3NoaWZ0KDQsMCk7dmFyIFE9MDtyZXR1cm4gUXw9MHxTLmxldmVsLFMuaGlkZGVuJiYoUXw9MzIpLFF8PTY0LGtbMl0mJihRfD0xMjgpLEcud3JpdGVfc2hpZnQo''@;'; put 'put ''MSxRKSxHLndyaXRlX3NoaWZ0KDEsMSksRy53cml0ZV9zaGlmdCgyLGtbMl18fDApLEd9KEt0LFRuLFtTbixscixYbl0pKX0pO2Zvcih2YXIgYnQ9Y3Qucy5yO2J0PD1jdC5lLnI7KytidCl7WWU9amkoYnQpO2Zvcih2YXIganQ9Y3Qucy5jO2p0PD1jdC5lLmM7KytqdCl7YnQ9PT1jdC5zLnIm''@;'; put 'put ''JihldFtqdF09VGEoanQpKSxOZT1ldFtqdF0rWWU7dmFyIGt0PXllPyhvZVtidF18fFtdKVtqdF06b2VbTmVdO2t0JiYoWG5lKEcsa3QsYnQsanQsUiksUGUmJmt0LmwmJm9lWyIhbGlua3MiXS5wdXNoKFtOZSxrdC5sXSkpfX12YXIgT3Q9cGUuQ29kZU5hbWV8fHBlLm5hbWV8fFE7cmV0dXJu''@;'; put 'put ''KFBlfHw1PT1SLmJpZmYmJm9lWyIhZnJlZXplIl0pJiZHaShHLCJXaW5kb3cyIixmdW5jdGlvbiB0VihTLFIsayxHKXt2YXIgUT1HJiZHLmJpZmZ8fDgsb2U9Ym4oOD09UT8xODoxMCksZ2U9MTcxODtyZXR1cm4gaz4wJiYoZ2UmPS01MTMpLFd0KFJbIiFncmlkbGluZXMiXSkmJihnZSY9LTMp''@;'; put 'put ''LFJbIiFmcmVlemUiXSYmKGdlfD04KSxTJiZTLlJUTCYmKGdlfD02NCksNT09USYmKGdlPTQ0Niksb2Uud3JpdGVfc2hpZnQoMixnZSksOD09UT8ob2Uud3JpdGVfc2hpZnQoNCwwKSxvZS53cml0ZV9zaGlmdCg0LDY0KSxvZS53cml0ZV9zaGlmdCg0LDApLG9lLndyaXRlX3NoaWZ0KDQsMCkp''@;'; put 'put ''OihvZS53cml0ZV9zaGlmdCg0LDApLG9lLndyaXRlX3NoaWZ0KDQsMCkpLG9lfSgoZ2UuVmlld3N8fFtdKVswXSxvZSxTKSksKFBlfHw1PT1SLmJpZmYpJiZvZVsiIWZyZWV6ZSJdJiZHaShHLCJQYW5lIixmdW5jdGlvbiB3bChTKXsic3RyaW5nIj09dHlwZW9mIFMmJihTPU5vKFMpKTt2YXIg''@;'; put 'put ''Uj1ibigxMCk7cmV0dXJuIFIud3JpdGVfc2hpZnQoMixTLmMpLFIud3JpdGVfc2hpZnQoMixTLnIpLFIud3JpdGVfc2hpZnQoMixTLnIpLFIud3JpdGVfc2hpZnQoMixTLmMpLFIud3JpdGVfc2hpZnQoMSwzKSxSLndyaXRlX3NoaWZ0KDEsMCksUn0ob2VbIiFmcmVlemUiXSkpLFBlJiZvZVsi''@;'; put 'put ''IXNlbCJdJiZHaShHLCJTZWxlY3Rpb24iLGZ1bmN0aW9uIHJrKFMsUil7dmFyIGs9Ym4oMTUpLEc9Uy5jZWxsO2lmKCFHKXtpZighUy5yYW5nZSl0aHJvdyBuZXcgRXJyb3IoIk11c3Qgc3BlY2lmeSBhIHNlbGVjdGlvbiBjZWxsIG9yIHJhbmdlIik7Rz1xaShNcyhTLnJhbmdlLnJlcGxhY2Uo''@;'; put 'put ''L1xzLiokLywiIikpLnMpfXZhciBRPSJzdHJpbmciPT10eXBlb2YgRz9ObyhHKTpHO2lmKFIpe3ZhciBvZT0ic3RyaW5nIj09dHlwZW9mIFI/Tm8oUik6UjtrLndyaXRlX3NoaWZ0KDEsUS5yPj1vZS5yJiZRLmM+PW9lLmM/MDpRLnI+PW9lLnImJlEuYzxvZS5jPzI6US5yPG9lLnImJlEuYz49''@;'; put 'put ''b2UuYz8xOjMpfWVsc2Ugay53cml0ZV9zaGlmdCgxLDMpO3JldHVybiBrLndyaXRlX3NoaWZ0KDIsUS5yKSxrLndyaXRlX3NoaWZ0KDIsUS5jKSxrLndyaXRlX3NoaWZ0KDIsMCksay53cml0ZV9zaGlmdCgyLDEpLGZ1bmN0aW9uIFYzKFMsUil7Unx8KFI9Ym4oNikpLFIud3JpdGVfc2hpZnQo''@;'; put 'put ''MixTLnM/Uy5zLnI6Uy5yKSxSLndyaXRlX3NoaWZ0KDIsUy5lP1MuZS5yOlMuciksUi53cml0ZV9zaGlmdCgxLFMucz9TLnMuYzpTLmMpLFIud3JpdGVfc2hpZnQoMSxTLmU/Uy5lLmM6Uy5jKX0oe3M6USxlOlF9LGspLGt9KG9lWyIhc2VsIl0sb2VbIiFmcmVlemUiXSkpLFBlJiYob2VbIiFt''@;'; put 'put ''ZXJnZXMiXXx8W10pLmxlbmd0aCYmR2koRywiTWVyZ2VDZWxscyIsZnVuY3Rpb24gdVYoUyl7dmFyIFI9Ym4oMis4KlMubGVuZ3RoKTtSLndyaXRlX3NoaWZ0KDIsUy5sZW5ndGgpO2Zvcih2YXIgaz0wO2s8Uy5sZW5ndGg7KytrKXZ1KFNba10sUik7cmV0dXJuIFJ9KG9lWyIhbWVyZ2VzIl0p''@;'; put 'put ''KSxQZSYmZnVuY3Rpb24gTzgoUyxSKXtmb3IodmFyIGs9MDtrPFJbIiFsaW5rcyJdLmxlbmd0aDsrK2spe3ZhciBHPVJbIiFsaW5rcyJdW2tdO0dpKFMsIkhMaW5rIixmVihHKSksR1sxXS5Ub29sdGlwJiZHaShTLCJITGlua1Rvb2x0aXAiLGdWKEcpKX1kZWxldGUgUlsiIWxpbmtzIl19KEcs''@;'; put 'put ''b2UpLEdpKEcsIkNvZGVOYW1lIixjbChPdCkpLFBlJiZmdW5jdGlvbiBOeihTLFIpe3ZhciBrPWJuKDE5KTtrLndyaXRlX3NoaWZ0KDQsMjE1MSksay53cml0ZV9zaGlmdCg0LDApLGsud3JpdGVfc2hpZnQoNCwwKSxrLndyaXRlX3NoaWZ0KDIsMyksay53cml0ZV9zaGlmdCgxLDEpLGsud3Jp''@;'; put 'put ''dGVfc2hpZnQoNCwwKSxHaShTLCJGZWF0SGRyIixrKSwoaz1ibigzOSkpLndyaXRlX3NoaWZ0KDQsMjE1Miksay53cml0ZV9zaGlmdCg0LDApLGsud3JpdGVfc2hpZnQoNCwwKSxrLndyaXRlX3NoaWZ0KDIsMyksay53cml0ZV9zaGlmdCgxLDApLGsud3JpdGVfc2hpZnQoNCwwKSxrLndyaXRl''@;'; put 'put ''X3NoaWZ0KDIsMSksay53cml0ZV9zaGlmdCg0LDQpLGsud3JpdGVfc2hpZnQoMiwwKSx2dShvbyhSWyIhcmVmIl18fCJBMSIpLGspLGsud3JpdGVfc2hpZnQoNCw0KSxHaShTLCJGZWF0IixrKX0oRyxvZSksR2koRywiRU9GIiksRy5lbmQoKX1mdW5jdGlvbiBCeihTLFIsayl7dmFyIEc9Ymko''@;'; put 'put ''KSxRPShTfHx7fSkuV29ya2Jvb2t8fHt9LG9lPVEuU2hlZXRzfHxbXSxnZT1RLldCUHJvcHN8fHt9LHBlPTg9PWsuYmlmZix5ZT01PT1rLmJpZmY7R2koRywyMDU3LHg0KDAsNSxrKSksInhsYSI9PWsuYm9va1R5cGUmJkdpKEcsIkFkZGluIiksR2koRywiSW50ZXJmYWNlSGRyIixwZT9hMCgx''@;'; put 'put ''MjAwKTpudWxsKSxHaShHLCJNbXMiLGZ1bmN0aW9uIEd3KFMsUil7Unx8KFI9Ym4oUykpO2Zvcih2YXIgaz0wO2s8UzsrK2spUi53cml0ZV9zaGlmdCgxLDApO3JldHVybiBSfSgyKSkseWUmJkdpKEcsIlRvb2xiYXJIZHIiKSx5ZSYmR2koRywiVG9vbGJhckVuZCIpLEdpKEcsIkludGVyZmFj''@;'; put 'put ''ZUVuZCIpLEdpKEcsIldyaXRlQWNjZXNzIixmdW5jdGlvbiBVNihTLFIpe3ZhciBrPSFSfHw4PT1SLmJpZmYsRz1ibihrPzExMjo1NCk7Zm9yKEcud3JpdGVfc2hpZnQoOD09Ui5iaWZmPzI6MSw3KSxrJiZHLndyaXRlX3NoaWZ0KDEsMCksRy53cml0ZV9zaGlmdCg0LDg1OTAwNzA1OSksRy53''@;'; put 'put ''cml0ZV9zaGlmdCg0LDU0NTg1NDh8KGs/MDo1MzY4NzA5MTIpKTtHLmw8Ry5sZW5ndGg7KUcud3JpdGVfc2hpZnQoMSxrPzA6MzIpO3JldHVybiBHfSgwLGspKSxHaShHLCJDb2RlUGFnZSIsYTAocGU/MTIwMDoxMjUyKSkscGUmJkdpKEcsIkRTRiIsYTAoMCkpLHBlJiZHaShHLCJFeGNlbDlG''@;'; put 'put ''aWxlIiksR2koRywiUlJUYWJJZCIsZnVuY3Rpb24gdlYoUyl7Zm9yKHZhciBSPWJuKDIqUyksaz0wO2s8UzsrK2spUi53cml0ZV9zaGlmdCgyLGsrMSk7cmV0dXJuIFJ9KFMuU2hlZXROYW1lcy5sZW5ndGgpKSxwZSYmUy52YmFyYXcmJkdpKEcsIk9iUHJvaiIpLHBlJiZTLnZiYXJhdyYmR2ko''@;'; put 'put ''RywiQ29kZU5hbWUiLGNsKGdlLkNvZGVOYW1lfHwiVGhpc1dvcmtib29rIikpLEdpKEcsIkJ1aWx0SW5Gbkdyb3VwQ291bnQiLGEwKDE3KSksR2koRywiV2luUHJvdGVjdCIsdHUoITEpKSxHaShHLCJQcm90ZWN0Iix0dSghMSkpLEdpKEcsIlBhc3N3b3JkIixhMCgwKSkscGUmJkdpKEcsIlBy''@;'; put 'put ''b3Q0UmV2Iix0dSghMSkpLHBlJiZHaShHLCJQcm90NFJldlBhc3MiLGEwKDApKSxHaShHLCJXaW5kb3cxIixmdW5jdGlvbiBLdGUoKXt2YXIgUz1ibigxOCk7cmV0dXJuIFMud3JpdGVfc2hpZnQoMiwwKSxTLndyaXRlX3NoaWZ0KDIsMCksUy53cml0ZV9zaGlmdCgyLDI5MjgwKSxTLndyaXRl''@;'; put 'put ''X3NoaWZ0KDIsMTc2MDApLFMud3JpdGVfc2hpZnQoMiw1NiksUy53cml0ZV9zaGlmdCgyLDApLFMud3JpdGVfc2hpZnQoMiwwKSxTLndyaXRlX3NoaWZ0KDIsMSksUy53cml0ZV9zaGlmdCgyLDUwMCksU30oKSksR2koRywiQmFja3VwIix0dSghMSkpLEdpKEcsIkhpZGVPYmoiLGEwKDApKSxH''@;'; put 'put ''aShHLCJEYXRlMTkwNCIsdHUoInRydWUiPT1mdW5jdGlvbiBGUyhTKXtyZXR1cm4gUy5Xb3JrYm9vayYmUy5Xb3JrYm9vay5XQlByb3BzJiZ0aShTLldvcmtib29rLldCUHJvcHMuZGF0ZTE5MDQpPyJ0cnVlIjoiZmFsc2UifShTKSkpLEdpKEcsIkNhbGNQcmVjaXNpb24iLHR1KCEwKSkscGUm''@;'; put 'put ''JkdpKEcsIlJlZnJlc2hBbGwiLHR1KCExKSksR2koRywiQm9va0Jvb2wiLGEwKDApKSxyMD1JNihbMCwxNjc3NzIxNSwxNjcxMTY4MCw2NTI4MCwyNTUsMTY3NzY5NjAsMTY3MTE5MzUsNjU1MzUsMCwxNjc3NzIxNSwxNjcxMTY4MCw2NTI4MCwyNTUsMTY3NzY5NjAsMTY3MTE5MzUsNjU1MzVd''@;'; put 'put ''KSxmdW5jdGlvbiBLbmUoUyxSLGspeygoKFJ8fHt9KS5TdHlsZXN8fHt9KS5Gb250c3x8W3tzejoxMixjb2xvcjp7dGhlbWU6MX0sbmFtZToiQXJpYWwiLGZhbWlseToyLHNjaGVtZToibWlub3IifV0pLmZvckVhY2goZnVuY3Rpb24oRyl7R2koUywiRm9udCIsZnVuY3Rpb24gblYoUyxSKXt2''@;'; put 'put ''YXIgaz1TLm5hbWV8fCJBcmlhbCIsRz1SJiY1PT1SLmJpZmYsb2U9Ym4oRz8xNStrLmxlbmd0aDoxNisyKmsubGVuZ3RoKTtvZS53cml0ZV9zaGlmdCgyLDIwKihTLnN6fHwxMikpO3ZhciBnZT0wO3JldHVybiBTLmJvbGQmJihnZXw9MSksUy5pdGFsaWMmJihnZXw9MiksUy5zdHJpa2UmJihn''@;'; put 'put ''ZXw9OCksUy5zaGFkb3cmJihnZXw9MzIpLG9lLndyaXRlX3NoaWZ0KDEsZ2UpLG9lLndyaXRlX3NoaWZ0KDEsMCksb2Uud3JpdGVfc2hpZnQoMixTLmNvbG9yP1A0KFMuY29sb3IsNjQpOjY0KSxvZS53cml0ZV9zaGlmdCgyLFMuYm9sZD83MDA6NDAwKSxvZS53cml0ZV9zaGlmdCgyLCJzdXBl''@;'; put 'put ''ciI9PVMudmFsaWduPzE6InN1YiI9PVMudmFsaWduPzI6MCksb2Uud3JpdGVfc2hpZnQoMSxTLnVuZGVybGluZXx8MCksb2Uud3JpdGVfc2hpZnQoMSxvZS5mYW1pbHl8fDApLG9lLndyaXRlX3NoaWZ0KDEsb2UuY2hhcnNldHx8MCksb2Uud3JpdGVfc2hpZnQoMSwwKSxvZS53cml0ZV9zaGlm''@;'; put 'put ''dCgxLGsubGVuZ3RoKSxHfHxvZS53cml0ZV9zaGlmdCgxLDEpLG9lLndyaXRlX3NoaWZ0KChHPzE6Mikqay5sZW5ndGgsayxHPyJzYmNzIjoidXRmMTZsZSIpLG9lfShHLGspKX0pfShHLFMsayksZnVuY3Rpb24gcW5lKFMsUixrKXtSJiZbWzUsOF0sWzIzLDI2XSxbNDEsNDRdLFs1MCwzOTJd''@;'; put 'put ''XS5mb3JFYWNoKGZ1bmN0aW9uKEcpe2Zvcih2YXIgUT1HWzBdO1E8PUdbMV07KytRKW51bGwhPVJbUV0mJkdpKFMsIkZvcm1hdCIsYVYoUSxSW1FdLGspKX0pfShHLFMuU1NGLGspLGZ1bmN0aW9uIEc1KFMsUil7Zm9yKHZhciBrPTA7azwxNjsrK2spR2koUywiWEYiLHk1KHtudW1GbXRJZDow''@;'; put 'put ''LHN0eWxlOiEwfSwwLFIpKTtSLmNlbGxYZnMuZm9yRWFjaChmdW5jdGlvbihHKXtHaShTLCJYRiIseTUoRywwLFIpKX0pfShHLGspLEdpKEcsIlBhbGV0dGUiLGZ1bmN0aW9uIEN0KFMpe3ZhciBSPWJuKDIyNik7Ui53cml0ZV9zaGlmdCgyLDU2KTtmb3IodmFyIGs9MDtrPDU2Oysrayl7dmFy''@;'; put 'put ''IEc9U1trKzhdfHx2NFtrKzhdO1Iud3JpdGVfc2hpZnQoMSxHWzBdKSxSLndyaXRlX3NoaWZ0KDEsR1sxXSksUi53cml0ZV9zaGlmdCgxLEdbMl0pLFIud3JpdGVfc2hpZnQoMSwwKX1yZXR1cm4gUn0ocjApKSxyMD1xdCh2NCkscGUmJkdpKEcsIlVzZXNFTEZzIix0dSghMSkpO3ZhciBOZT1H''@;'; put 'put ''LmVuZCgpLFllPWJpKCk7cGUmJkdpKFllLCJDb3VudHJ5IixmdW5jdGlvbiBkaShTKXtyZXR1cm4gU3x8KFM9Ym4oNCkpLFMud3JpdGVfc2hpZnQoMiwxKSxTLndyaXRlX3NoaWZ0KDIsMSksU30oKSkscGUmJmsuU3RyaW5ncyYmZnVuY3Rpb24gVW5lKFMsUixrLEcpe3ZhciBRPUd8fChrfHxb''@;'; put 'put ''XSkubGVuZ3RofHwwO2lmKFE8PTgyMjQpcmV0dXJuIEdpKFMsUixrLFEpO3ZhciBvZT0rUnx8K3FTW1JdO2lmKCFpc05hTihvZSkpe2Zvcih2YXIgZ2U9ay5wYXJ0c3x8W10scGU9MCx5ZT0wLFBlPTA7UGUrKGdlW3BlXXx8ODIyNCk8PTgyMjQ7KVBlKz1nZVtwZV18fDgyMjQscGUrKzt2YXIg''@;'; put 'put ''TmU9Uy5uZXh0KDQpO2ZvcihOZS53cml0ZV9zaGlmdCgyLG9lKSxOZS53cml0ZV9zaGlmdCgyLFBlKSxTLnB1c2goay5zbGljZSh5ZSx5ZStQZSkpLHllKz1QZTt5ZTxROyl7Zm9yKChOZT1TLm5leHQoNCkpLndyaXRlX3NoaWZ0KDIsNjApLFBlPTA7UGUrKGdlW3BlXXx8ODIyNCk8PTgyMjQ7''@;'; put 'put ''KVBlKz1nZVtwZV18fDgyMjQscGUrKztOZS53cml0ZV9zaGlmdCgyLFBlKSxTLnB1c2goay5zbGljZSh5ZSx5ZStQZSkpLHllKz1QZX19fShZZSwiU1NUIixmdW5jdGlvbiBtcyhTLFIpe3ZhciBrPWJuKDgpO2sud3JpdGVfc2hpZnQoNCxTLkNvdW50KSxrLndyaXRlX3NoaWZ0KDQsUy5Vbmlx''@;'; put 'put ''dWUpO2Zvcih2YXIgRz1bXSxRPTA7UTxTLmxlbmd0aDsrK1EpR1tRXT1OYyhTW1FdLFIpO3ZhciBvZT1qKFtrXS5jb25jYXQoRykpO3JldHVybiBvZS5wYXJ0cz1bay5sZW5ndGhdLmNvbmNhdChHLm1hcChmdW5jdGlvbihnZSl7cmV0dXJuIGdlLmxlbmd0aH0pKSxvZX0oay5TdHJpbmdzLGsp''@;'; put 'put ''KSxHaShZZSwiRU9GIik7dmFyIGV0PVllLmVuZCgpLGN0PWJpKCksRXQ9MCxhdD0wO2ZvcihhdD0wO2F0PFMuU2hlZXROYW1lcy5sZW5ndGg7KythdClFdCs9KHBlPzEyOjExKSsocGU/MjoxKSpTLlNoZWV0TmFtZXNbYXRdLmxlbmd0aDt2YXIgYnQ9TmUubGVuZ3RoK0V0K2V0Lmxlbmd0aDtm''@;'; put 'put ''b3IoYXQ9MDthdDxTLlNoZWV0TmFtZXMubGVuZ3RoOysrYXQpR2koY3QsIkJvdW5kU2hlZXQ4IixsMih7cG9zOmJ0LGhzOihvZVthdF18fHt9KS5IaWRkZW58fDAsZHQ6MCxuYW1lOlMuU2hlZXROYW1lc1thdF19LGspKSxidCs9UlthdF0ubGVuZ3RoO3ZhciBrdD1jdC5lbmQoKTtpZihFdCE9''@;'; put 'put ''a3QubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiQlM4ICIrRXQrIiAhPSAiK2t0Lmxlbmd0aCk7dmFyIE90PVtdO3JldHVybiBOZS5sZW5ndGgmJk90LnB1c2goTmUpLGt0Lmxlbmd0aCYmT3QucHVzaChrdCksZXQubGVuZ3RoJiZPdC5wdXNoKGV0KSx5MChbT3RdKX1mdW5jdGlvbiBUSShTLFIp''@;'; put 'put ''e3ZhciBrPVJ8fHt9O3N3aXRjaChrLmJpZmZ8fDIpe2Nhc2UgODpjYXNlIDU6cmV0dXJuIGZ1bmN0aW9uIEpuZShTLFIpe3ZhciBrPVJ8fHt9LEc9W107SWYoUiYmUi5QUEl8fDk2KSxTJiYhUy5TU0YmJihTLlNTRj1BLmdldF90YWJsZSgpKSxTJiZTLlNTRiYmKGFlKEEpLEEubG9hZF90YWJs''@;'; put 'put ''ZShTLlNTRiksay5yZXZzc2Y9a2UoUy5TU0YpLGsucmV2c3NmW1MuU1NGWzY1NTM1XV09MCxrLnNzZj1TLlNTRiksUy5TdHlsZXM9e0ZvbnRzOmsuRm9udHM9W3tzejoxMixjb2xvcjp7dGhlbWU6MSxyZ2I6IjAwMDAwMCJ9LG5hbWU6IkNhbGlicmkiLGZhbWlseToyLHNjaGVtZToibWlub3Ii''@;'; put 'put ''fV0sRmlsbHM6ay5GaWxscz1be3BhdHRlcm5UeXBlOiJub25lIn0se3BhdHRlcm5UeXBlOiJncmF5MTI1In1dLEJvcmRlcnM6ay5Cb3JkZXJzPVt7fV0sRFhGOmsuRFhGPVMuU3R5bGVzJiZTLlN0eWxlcy5EWEZ8fFtdfSxJNChrLkZvbnRzWzBdKSxrLlN0cmluZ3M9W10say5TdHJpbmdzLkNv''@;'; put 'put ''dW50PTAsay5TdHJpbmdzLlVuaXF1ZT0wLHEzP2sucmV2U3RyaW5ncz1uZXcgTWFwOihrLnJldlN0cmluZ3M9e30say5yZXZTdHJpbmdzLmZvbz1bXSxkZWxldGUgay5yZXZTdHJpbmdzLmZvbyksUGYoayksay5jZWxsWGZzPVtdLGsuY2VsbFN0eWxlWGZzPVt7bmFtZToiTm9ybWFsIn1dLGww''@;'; put 'put ''KGsuY2VsbFhmcyxrLmNlbGxTdHlsZVhmcyx7fSx7cmV2c3NmOntHZW5lcmFsOjB9fSksUy5Qcm9wc3x8KFMuUHJvcHM9e30pO2Zvcih2YXIgUT0wO1E8Uy5TaGVldE5hbWVzLmxlbmd0aDsrK1EpR1tHLmxlbmd0aF09RUkoUSxrLFMpO3JldHVybiBHLnVuc2hpZnQoQnooUyxHLGspKSx5MChb''@;'; put 'put ''R10pfShTLFIpO2Nhc2UgNDpjYXNlIDM6Y2FzZSAyOnJldHVybiBmdW5jdGlvbiAkbmUoUyxSKXt2YXIgaz1SfHx7fTtudWxsIT1sZSYmbnVsbD09ay5kZW5zZSYmKGsuZGVuc2U9bGUpO2Zvcih2YXIgRz1iaSgpLFE9MCxvZT0wO29lPFMuU2hlZXROYW1lcy5sZW5ndGg7KytvZSlTLlNoZWV0''@;'; put 'put ''TmFtZXNbb2VdPT1rLnNoZWV0JiYoUT1vZSk7aWYoMD09USYmay5zaGVldCYmUy5TaGVldE5hbWVzWzBdIT1rLnNoZWV0KXRocm93IG5ldyBFcnJvcigiU2hlZXQgbm90IGZvdW5kOiAiK2suc2hlZXQpO3JldHVybiBHaShHLDQ9PWsuYmlmZj8xMDMzOjM9PWsuYmlmZj81MjE6OSx4NCgwLDE2''@;'; put 'put ''LGspKSxmdW5jdGlvbiBHbmUoUyxSLGssRyl7dmFyIGdlLFE9QXJyYXkuaXNBcnJheShSKSxvZT1vbyhSWyIhcmVmIl18fCJBMSIpLHBlPSIiLHllPVtdO2lmKG9lLmUuYz4yNTV8fG9lLmUucj4xNjM4Myl7aWYoRy5XVEYpdGhyb3cgbmV3IEVycm9yKCJSYW5nZSAiKyhSWyIhcmVmIl18fCJB''@;'; put 'put ''MSIpKyIgZXhjZWVkcyBmb3JtYXQgbGltaXQgQTE6SVYxNjM4NCIpO29lLmUuYz1NYXRoLm1pbihvZS5lLmMsMjU1KSxvZS5lLnI9TWF0aC5taW4ob2UuZS5jLDE2MzgzKSxnZT1yYShvZSl9Zm9yKHZhciBQZT1vZS5zLnI7UGU8PW9lLmUucjsrK1BlKXtwZT1qaShQZSk7Zm9yKHZhciBOZT1v''@;'; put 'put ''ZS5zLmM7TmU8PW9lLmUuYzsrK05lKXtQZT09PW9lLnMuciYmKHllW05lXT1UYShOZSkpLGdlPXllW05lXStwZTt2YXIgWWU9UT8oUltQZV18fFtdKVtOZV06UltnZV07WWUmJlluZShTLFllLFBlLE5lKX19fShHLFMuU2hlZXRzW1MuU2hlZXROYW1lc1tRXV0sMCxrKSxHaShHLDEwKSxHLmVu''@;'; put 'put ''ZCgpfShTLFIpfXRocm93IG5ldyBFcnJvcigiaW52YWxpZCB0eXBlICIray5ib29rVHlwZSsiIGZvciBCSUZGIil9dmFyIG1kPWZ1bmN0aW9uKCl7dmFyIFM9e2NlbnRlckNvbnRpbnVvdXM6ImNlbnRlciIsanVzdGlmeToibGVmdCJ9O2Z1bmN0aW9uIGsoWWUsZXQpe3ZhciBjdD1ldHx8e307''@;'; put 'put ''bnVsbCE9bGUmJm51bGw9PWN0LmRlbnNlJiYoY3QuZGVuc2U9bGUpO3ZhciBFdD1jdC5kZW5zZT9bXTp7fSxhdD0oWWU9WWUucmVwbGFjZSgvPCEtLS4qPy0tPi9nLCIiKSkubWF0Y2goLzx0YWJsZS9pKTtpZighYXQpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIEhUTUw6IGNvdWxkIG5vdCBm''@;'; put 'put ''aW5kIDx0YWJsZT4iKTt2YXIgYnQ9WWUubWF0Y2goLzxcL3RhYmxlL2kpLGp0PWF0LmluZGV4LGt0PWJ0JiZidC5pbmRleHx8WWUubGVuZ3RoLE90PWZ1bmN0aW9uIGZ0KFMsUixrKXtpZihobnx8InN0cmluZyI9PXR5cGVvZiBSKXJldHVybiBTLnNwbGl0KFIpO2Zvcih2YXIgRz1TLnNwbGl0''@;'; put 'put ''KFIpLFE9W0dbMF1dLG9lPTE7b2U8Ry5sZW5ndGg7KytvZSlRLnB1c2goayksUS5wdXNoKEdbb2VdKTtyZXR1cm4gUX0oWWUuc2xpY2UoanQsa3QpLC8oOj88dHJbXj5dKj4pL2ksIjx0cj4iKSxLdD0tMSxUbj0wLHJyPTAsU249MCxscj17czp7cjoxZTcsYzoxZTd9LGU6e3I6MCxjOjB9fSxY''@;'; put 'put ''bj1bXTtmb3IoanQ9MDtqdDxPdC5sZW5ndGg7KytqdCl7dmFyIEJuPU90W2p0XS50cmltKCksZnI9Qm4uc2xpY2UoMCwzKS50b0xvd2VyQ2FzZSgpO2lmKCI8dHIiIT1mcil7aWYoIjx0ZCI9PWZyfHwiPHRoIj09ZnIpe3ZhciBicj1Cbi5zcGxpdCgvPFwvdFtkaF0+L2kpO2ZvcihrdD0wO2t0''@;'; put 'put ''PGJyLmxlbmd0aDsrK2t0KXt2YXIgZXI9YnJba3RdLnRyaW0oKTtpZihlci5tYXRjaCgvPHRbZGhdL2kpKXtmb3IodmFyIE1pPWVyLEZpPTA7IjwiPT1NaS5jaGFyQXQoMCkmJihGaT1NaS5pbmRleE9mKCI+IikpPi0xOylNaT1NaS5zbGljZShGaSsxKTtmb3IodmFyIG5hPTA7bmE8WG4ubGVu''@;'; put 'put ''Z3RoOysrbmEpe3ZhciBjYT1YbltuYV07Y2Eucy5jPT1UbiYmY2Eucy5yPEt0JiZLdDw9Y2EuZS5yJiYoVG49Y2EuZS5jKzEsbmE9LTEpfXZhciBMaT12cihlci5zbGljZSgwLGVyLmluZGV4T2YoIj4iKSkpO1NuPUxpLmNvbHNwYW4/K0xpLmNvbHNwYW46MSwoKHJyPStMaS5yb3dzcGFuKT4x''@;'; put 'put ''fHxTbj4xKSYmWG4ucHVzaCh7czp7cjpLdCxjOlRufSxlOntyOkt0Kyhycnx8MSktMSxjOlRuK1NuLTF9fSk7dmFyIGtyPUxpLnR8fExpWyJkYXRhLXQiXXx8IiI7aWYoIU1pLmxlbmd0aCl7VG4rPVNuO2NvbnRpbnVlfWlmKE1pPWlyKE1pKSxsci5zLnI+S3QmJihsci5zLnI9S3QpLGxyLmUu''@;'; put 'put ''cjxLdCYmKGxyLmUucj1LdCksbHIucy5jPlRuJiYobHIucy5jPVRuKSxsci5lLmM8VG4mJihsci5lLmM9VG4pLE1pLmxlbmd0aCl7dmFyIFZuPXt0OiJzIix2Ok1pfTtjdC5yYXd8fCFNaS50cmltKCkubGVuZ3RofHwicyI9PWtyfHwoVm49UmkoTWksY3QpKSxjdC5kZW5zZT8oRXRbS3RdfHwo''@;'; put 'put ''RXRbS3RdPVtdKSxFdFtLdF1bVG5dPVZuKTpFdFtxaSh7cjpLdCxjOlRufSldPVZuLFRuKz1Tbn19fX19ZWxzZXtpZigrK0t0LGN0LnNoZWV0Um93cyYmY3Quc2hlZXRSb3dzPD1LdCl7LS1LdDticmVha31Ubj0wfX1yZXR1cm4gRXRbIiFyZWYiXT1yYShsciksWG4ubGVuZ3RoJiYoRXRbIiFt''@;'; put 'put ''ZXJnZXMiXT1YbiksRXR9ZnVuY3Rpb24gUShZZSxldCxjdCxFdCxhdCxidCl7dmFyIE90LGp0PVllWyIhbWVyZ2VzIl18fFtdLGt0PVtdLEt0PXtzdHlsZTpbXX0sVG49ITE7ZnVuY3Rpb24gcnIoaWEsTG8sT2Epe3ZhciBobz0iIixKYT0wO2lmKE90W2lhXSlzd2l0Y2goT3RbaWFdLnN0eWxl''@;'; put 'put ''KXtjYXNlInRoaW4iOmNhc2UiaGFpciI6aG89InNvbGlkIixKYT0xO2JyZWFrO2Nhc2UibWVkaXVtIjpobz0ic29saWQiLEphPTI7YnJlYWs7Y2FzZSJ0aGljayI6aG89InNvbGlkIixKYT0zO2JyZWFrO2Nhc2UiZG91YmxlIjpobz0iZG91YmxlIixKYT0zO2JyZWFrO2Nhc2UiZG90dGVkIjpj''@;'; put 'put ''YXNlImRhc2hEb3REb3QiOmhvPSJkb3R0ZWQiLEphPTE7YnJlYWs7Y2FzZSJtZWRpdW1EYXNoRG90RG90Ijpobz0iZG90dGVkIixKYT0yO2JyZWFrO2Nhc2UiZGFzaGVkIjpjYXNlImRhc2hEb3QiOmNhc2Uic2xhbnREYXNoRG90Ijpobz0iZGFzaGVkIixKYT0xO2JyZWFrO2Nhc2UibWVkaXVt''@;'; put 'put ''RGFzaGVkIjpjYXNlIm1lZGl1bURhc2hEb3QiOmhvPSJkYXNoZWQiLEphPTJ9ZTppZigwPT1KYSl7c3dpdGNoKGlhKXtjYXNlInRvcCI6LS1MbzticmVhaztjYXNlImxlZnQiOi0tT2E7YnJlYWs7Y2FzZSJib3R0b20iOisrTG87YnJlYWs7Y2FzZSJyaWdodCI6KytPYX12YXIgQmk9TG8+PTAm''@;'; put 'put ''Jk9hPj0wP0V0LmRlbnNlPyhZZVtMb118fFtdKVtPYV06WWVbcWkoe3I6TG8sYzpPYX0pXTpudWxsO2lmKEJpKXtpZihCaS5zJiZCaS5zW3t0b3A6ImJvdHRvbSIsYm90dG9tOiJ0b3AiLGxlZnQ6InJpZ2h0IixyaWdodDoibGVmdCJ9W2lhXV0pYnJlYWsgZTtCaS5zJiZCaS5zLmZnQ29sb3Im''@;'; put 'put ''JihKYT0xKX1PdC5mZ0NvbG9yJiYoSmE9MSksIUJpJiZUbiYmMD09SmEmJihKYT0xKX0wIT1KYSYmSmEmJihLdC5zdHlsZS5wdXNoKCJib3JkZXItIitpYSsiLXN0eWxlOiIrKGhvfHwidHJhbnNwYXJlbnQiKSksS3Quc3R5bGUucHVzaCgiYm9yZGVyLSIraWErIi13aWR0aDoiK0phKyJweCIp''@;'; put 'put ''LCIiPT1obz9LdC5zdHlsZS5wdXNoKCJib3JkZXItIitpYSsiLWNvbG9yOiB0cmFuc3BhcmVudCIpOk90W2lhXS5jb2xvciYmT3RbaWFdLmNvbG9yLnJnYiYmS3Quc3R5bGUucHVzaCgiYm9yZGVyLSIraWErIi1jb2xvcjojIitQMChPdFtpYV0uY29sb3IucmdiKSkpfWZvcih2YXIgU249ZXQu''@;'; put 'put ''cy5jO1NuPD1ldC5lLmM7KytTbil7Zm9yKHZhciBscj0wLFhuPTAsQm49MDtCbjxqdC5sZW5ndGg7KytCbilpZighKGp0W0JuXS5zLnI+Y3R8fGp0W0JuXS5zLmM+U258fGp0W0JuXS5lLnI8Y3R8fGp0W0JuXS5lLmM8U24pKXtpZihqdFtCbl0ucy5yPGN0fHxqdFtCbl0ucy5jPFNuKXtscj0t''@;'; put 'put ''MTticmVha31scj1qdFtCbl0uZS5yLWp0W0JuXS5zLnIrMSxYbj1qdFtCbl0uZS5jLWp0W0JuXS5zLmMrMTticmVha31pZighKGxyPDApKXt2YXIgZnI9cWkoe3I6Y3QsYzpTbn0pLGJyPUV0LmRlbnNlPyhZZVtjdF18fFtdKVtTbl06WWVbZnJdO2JyP1RuPSExOihUbj0hMCxicj17dDoieiIs''@;'; put 'put ''czp7fX0pO3ZhciBlcj0ieiI9PWJyLnQ/IiI6YnIuaHx8bGEoYnIud3x8KF9sKGJyKSxici53KXx8IiIpO2lmKEt0PXtzdHlsZTpbXX0sT3Q9YnIucyl7dmFyIE1pPTE7aWYoKCJzdXBlciI9PU90LnZhbGlnbnx8InN1YiI9PU90LnZhbGlnbikmJihNaT0uODMsZXI9UHIoInNwYW4iLGVyLHtz''@;'; put 'put ''dHlsZToidmVydGljYWwtYWxpZ246ICIrT3QudmFsaWdufSkpLEt0LnN0eWxlLnB1c2goImZvbnQtd2VpZ2h0OiIrKE90LmJvbGQ/NzAwOjQwMCkpLE90Lml0YWxpYyYmS3Quc3R5bGUucHVzaCgiZm9udC1zdHlsZTogaXRhbGljIiksKE90LnVuZGVybGluZXx8T3Quc3RyaWtlKSYmS3Quc3R5''@;'; put 'put ''bGUucHVzaCgidGV4dC1kZWNvcmF0aW9uOiIrKE90LnVuZGVybGluZT8iIHVuZGVybGluZSI6IiIpKyhPdC5zdHJpa2U/IiBsaW5lLXRocm91Z2giOiIiKSksT3QuY29sb3ImJk90LmNvbG9yLnJnYiYmS3Quc3R5bGUucHVzaCgiY29sb3I6ICMiK1AwKE90LmNvbG9yLnJnYikpLE90Lm5hbWUm''@;'; put 'put ''Jkt0LnN0eWxlLnB1c2goImZvbnQtZmFtaWx5OiIrT3QubmFtZSsiLCBzYW5zLXNlcmlmIiksT3Quc3omJkt0LnN0eWxlLnB1c2goImZvbnQtc2l6ZToiK090LnN6Kk1pKyJwdCIpLG51bGwhPT1PdC5wYXR0ZXJuVHlwZSYmT3QuZmdDb2xvciYmT3QuZmdDb2xvci5yZ2ImJkt0LnN0eWxlLnB1''@;'; put 'put ''c2goImJhY2tncm91bmQtY29sb3I6ICMiK1AwKE90LmZnQ29sb3IucmdiKSksWyJ0b3AiLCJsZWZ0Il0uZm9yRWFjaChmdW5jdGlvbihpYSl7cnIoaWEsY3QsU24pfSksbHI+MXx8WG4+MSl7dmFyIEZpPXFpKHtyOmN0K2xyLTEsYzpTbitYbi0xfSksbmE9RXQuZGVuc2U/KFllW2N0K2xyLTFd''@;'; put 'put ''fHxbXSlbU24rWG4tMV06WWVbRmldLExpPU90O090PW5hJiZuYS5zfHxPdCxbImJvdHRvbSIsInJpZ2h0Il0uZm9yRWFjaChmdW5jdGlvbihpYSl7cnIoaWEsY3QsU24pfSksT3Q9TGl9ZWxzZVsiYm90dG9tIiwicmlnaHQiXS5mb3JFYWNoKGZ1bmN0aW9uKGlhKXtycihpYSxjdCxTbil9KTtp''@;'; put 'put ''ZihPdC5hbGlnbm1lbnQpe2lmKE90LmFsaWdubWVudC5ob3Jpem9udGFsP0t0LnN0eWxlLnB1c2goInRleHQtYWxpZ246ICIrKFNbT3QuYWxpZ25tZW50Lmhvcml6b250YWxdfHxPdC5hbGlnbm1lbnQuaG9yaXpvbnRhbCkpOiJuIj09YnIudCYmS3Quc3R5bGUucHVzaCgidGV4dC1hbGlnbjog''@;'; put 'put ''cmlnaHQiKSxPdC5hbGlnbm1lbnQudmVydGljYWwpe3ZhciBrcj1PdC5hbGlnbm1lbnQudmVydGljYWw7S3Quc3R5bGUucHVzaCgidmVydGljYWwtYWxpZ246ICIrKCJjZW50ZXIiPT1rcj8ibWlkZGxlIjprcikpfWlmKE90LmFsaWdubWVudC53cmFwVGV4dClLdC5zdHlsZS5wdXNoKCJ3aGl0''@;'; put 'put ''ZS1zcGFjZTogcHJlLXdyYXAiKTtlbHNle3ZhciBWbj1FdC5kZW5zZT8oWWVbY3RdfHxbXSlbU24rMV06WWVbcWkoe3I6Y3QsYzpTbisxfSldO1ZuJiYieiIhPVZuLnQmJkt0LnN0eWxlLnB1c2goIndoaXRlLXNwYWNlOiBwcmUtd3JhcCIpfX1lbHNlIm4iPT1ici50JiZLdC5zdHlsZS5wdXNo''@;'; put 'put ''KCJ0ZXh0LWFsaWduOiByaWdodCIpO3ZhciBCcj0oKFllWyIhY29scyJdfHxbXSlbU25dfHx7fSkud3B4O251bGw9PUJyJiYoQnI9KChZZVsiIXNoZWV0Rm9ybWF0Il18fHt9KS5jb2x8fHt9KS53cHgpfXZhciBfcj0wO2lmKFhuPD0xJiZscjw9MSYmKF9yPSgoWWVbIiFjb2xzIl18fFtdKVtT''@;'; put 'put ''bl18fHt9KS53cHgpJiZLdC5zdHlsZS5wdXNoKCJ3aWR0aDogIitfcisicHgiKSxZZVsiIWNvbmRmbXQiXSYmb2UoYnIsY3QsU24sWWVbIiFjb25kZm10Il0sS3Quc3R5bGUsWWUpLDA9PUt0LnN0eWxlLmxlbmd0aD9kZWxldGUgS3Quc3R5bGU6S3Quc3R5bGU9S3Quc3R5bGUuam9pbigiOyIp''@;'; put 'put ''LEV0LmNzcyl7dmFyIEZuPWF0LmluZGV4T2YoS3Quc3R5bGUpOy0xPT1GbiYmKGF0LnB1c2goS3Quc3R5bGUpLEZuPWF0Lmxlbmd0aC0xKSxkZWxldGUgS3Quc3R5bGUsS3QuY2xhc3M9InNqcyIrKGJ0fHwiIikrIi0iK0ZufWxyPjEmJihLdC5yb3dzcGFuPWxyKSxYbj4xJiYoS3QuY29sc3Bh''@;'; put 'put ''bj1YbiksRXQuZWRpdGFibGU/ZXI9JzxzcGFuIGNvbnRlbnRlZGl0YWJsZT0idHJ1ZSI+JytlcisiPC9zcGFuPiI6YnImJihLdFsiZGF0YS10Il09YnImJmJyLnR8fCJ6IixudWxsIT1ici52JiYoS3RbImRhdGEtdiJdPWJyLnYpLG51bGwhPWJyLnomJihLdFsiZGF0YS16Il09YnIueikpLEt0''@;'; put 'put ''LmlkPShFdC5pZHx8InNqcyIpKyItIitmcixrdC5wdXNoKFByKCJ0ZCIsZXIsS3QpKX19dmFyIFppLGpyPXtzdHlsZTpbXX07KFppPVllWyIhc2hlZXRGb3JtYXQiXSkmJlppLnJvdyYmKGp2KFppLnJvdyksWmkucm93LmhweCYmKGpyLnN0eWxlLnB1c2goWyJoZWlnaHQiLFppLnJvdy5ocHgr''@;'; put 'put ''InB4Il0pLGpyLmhlaWdodD1NYXRoLnJvdW5kKFppLnJvdy5ocHgpKSk7dmFyIHlpPVllWyIhcm93cyJdO2lmKHlpJiZ5aVtjdF0pe3ZhciBfYT15aVtjdF07X2EuaHB4JiYoanIuc3R5bGUucHVzaChbImhlaWdodCIsK19hLmhweCsicHgiXSksanIuaGVpZ2h0PU1hdGgucm91bmQoX2EuaHB4''@;'; put 'put ''KSksX2EuaGlkZGVuJiZqci5zdHlsZS5wdXNoKFsiZGlzcGxheSIsIm5vbmUiXSl9dmFyIHNvPVtdO3JldHVybiBqci5zdHlsZT1qci5zdHlsZS5yZXZlcnNlKCkuZmlsdGVyKGZ1bmN0aW9uKGlhKXtyZXR1cm4hKHNvLmluZGV4T2YoaWFbMF0pPi0xfHwoc28ucHVzaChpYVswXSksMCkpfSku''@;'; put 'put ''bWFwKGZ1bmN0aW9uKGlhKXtyZXR1cm4gaWFbMF0rIjoiK2lhWzFdfSksMD09anIuc3R5bGUubGVuZ3RoP2RlbGV0ZSBqci5zdHlsZTpqci5zdHlsZT1qci5zdHlsZS5qb2luKCI7IiksUHIoInRyIixrdC5qb2luKCIiKSxqcil9ZnVuY3Rpb24gb2UoWWUsZXQsY3QsRXQsYXQsYnQpe0V0LmZv''@;'; put 'put ''ckVhY2goZnVuY3Rpb24oanQpe2lmKGp0Ll9yZWZ8fChqdC5fcmVmPSJzdHJpbmciPT10eXBlb2YganQucmVmP01zKGp0LnJlZik6anQucmVmKSwhKGp0Ll9yZWYucy5jPmN0fHxqdC5fcmVmLmUuYzxjdHx8anQuX3JlZi5zLnI+ZXR8fGp0Ll9yZWYuZS5yPGV0fHwic2NhbGUiIT09anQudCkp''@;'; put 'put ''e2lmKCJuIiE9WWUudClyZXR1cm47dmFyIGt0O2lmKG51bGw9PWp0Ll9taW4pe2p0Ll92YWx1ZXM9W107Zm9yKHZhciBPdD1qdC5fcmVmLnMucjtPdDw9anQuX3JlZi5lLnI7KytPdClmb3IodmFyIEt0PWp0Ll9yZWYucy5jO0t0PD1qdC5fcmVmLmUuYzsrK0t0KXt2YXIgVG49QXJyYXkuaXNB''@;'; put 'put ''cnJheShidCk/KGJ0W090XXx8W10pW0t0XTpidFtxaSh7cjpPdCxjOkt0fSldO1RuJiYibiI9PVRuLnQmJmp0Ll92YWx1ZXMucHVzaChUbi52KX1pZihqdC5fdmFsdWVzLnNvcnQoZnVuY3Rpb24ocnIsU24pe3JldHVybiByci1Tbn0pLGp0Ll9taW49anQuX3ZhbHVlc1swXSxqdC5fbWF4PWp0''@;'; put 'put ''Ll92YWx1ZXMuc2xpY2UoLTEpWzBdLGp0Ll9iYW5kPWp0Ll9tYXgtanQuX21pbixqdC5jbWlkKXtzd2l0Y2goanQuY21pZC50KXtjYXNlIm51bSI6anQuX21pZD1qdC5jbWlkLnY7YnJlYWs7Y2FzZSJwZXJjZW50IjpqdC5fbWlkPWp0LmNtaWQudi8xMDAqanQuX2JhbmQranQuX21pbjticmVh''@;'; put 'put ''aztjYXNlInBlcmNlbnRpbGUiOmp0Ll9taWQ9ZnVuY3Rpb24gT3IoUyxSKXtpZigwPT1SKXJldHVybiBTWzBdO2lmKDEwMD09UilyZXR1cm4gU1tTLmxlbmd0aC0xXTt2YXIgRz1SLzEwMCooUy5sZW5ndGgtMSksUT1HLU1hdGguZmxvb3IoRyk7cmV0dXJuIFEqU1tNYXRoLmNlaWwoRyldKygx''@;'; put 'put ''LVEpKlNbTWF0aC5mbG9vcihHKV19KGp0Ll92YWx1ZXMsanQuY21pZC52KX1qdC5fYmFuZGg9anQuX21heC1qdC5fbWlkLGp0Ll9iYW5kbD1qdC5fbWlkLWp0Ll9taW59fShrdD1qdC5jbWlkP1llLnY+PWp0Ll9taWQ/X0MoanQuY21pZC5jb2xvcixqdC5jbWF4LmNvbG9yLChZZS52LWp0Ll9t''@;'; put 'put ''aWQpL2p0Ll9iYW5kaCk6X0MoanQuY21pbi5jb2xvcixqdC5jbWlkLmNvbG9yLChZZS52LWp0Ll9taW4pL2p0Ll9iYW5kbCk6X0MoanQuY21pbi5jb2xvcixqdC5jbWF4LmNvbG9yLChZZS52LWp0Ll9taW4pL2p0Ll9iYW5kKSkmJmF0LnB1c2goImJhY2tncm91bmQtY29sb3I6ICMiK2t0KX19''@;'; put 'put ''KX1mdW5jdGlvbiBnZShZZSxldCl7dmFyIGN0PXtzcGFuOmV0fHwxLHN0eWxlOiIifSxFdD1bXTtyZXR1cm4gWWUmJlllLndweCYmKGN0LndpZHRoPU1hdGgucm91bmQoNCpZZS53cHgvMyksRXQucHVzaCgid2lkdGg6IisoWWUud3B4fHwwKSsicHgiKSksRXQubGVuZ3RoPjAmJihjdC5zdHls''@;'; put 'put ''ZT1FdC5qb2luKCI7IikpLFByKCJjb2wiLG51bGwsY3QpfWZ1bmN0aW9uIHBlKFllLGV0LGN0KXt2YXIgRXQ9e2JvcmRlcjowLGNlbGxwYWRkaW5nOjAsY2VsbHNwYWNpbmc6MCxzdHlsZTpbImJvcmRlci1jb2xsYXBzZTpjb2xsYXBzZSIsInRhYmxlLWxheW91dDpmaXhlZCJdLmpvaW4oIjsi''@;'; put 'put ''KX07Y3QmJmN0LmlkJiYoRXQuaWQ9Y3QuaWQpO3ZhciBhdD1ZZVsiIWNvbHMiXSxidD1ZZVsiIXNoZWV0Rm9ybWF0Il07aWYoWWUmJmF0KXtmb3IodmFyIGp0PTAsT3Q9ZXQucy5jO090PD1ldC5lLmM7KytPdCl7dmFyIEt0PWF0W090XTtqdCs9S3QmJkt0LndweD9LdC53cHg6YnQmJmJ0LmNv''@;'; put 'put ''bCYmYnQuY29sLndweD9idC5jb2wud3B4OjUzfUV0LnN0eWxlKz0iO3dpZHRoOiIranQrInB4In12YXIgcnIsVG49WyI8dGFibGUiK0x1KEV0KSsiPiJdO2lmKFRuLnB1c2goIjxzdHlsZT50ZCB7IHBhZGRpbmctdG9wOiAxcHg7IHBhZGRpbmctcmlnaHQ6MXB4OyBwYWRkaW5nLWxlZnQ6MXB4''@;'; put 'put ''OyB0ZXh0LWFsaWduOmdlbmVyYWw7IHZlcnRpY2FsLWFsaWduOmJvdHRvbTsgYm9yZGVyOjFweCBzb2xpZDsgYm9yZGVyLWNvbG9yOiIrKGN0JiZjdC5ncmlkY29sb3I/Y3QuZ3JpZGNvbG9yOld0KFllWyIhZ3JpZGxpbmVzIl0pPyJ0cmFuc3BhcmVudCI6ImJsYWNrIikrIjsgd2hpdGUtc3Bh''@;'; put 'put ''Y2U6bm93cmFwOyB0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfTwvc3R5bGU+IiksVG4ucHVzaCgnPGNvbGdyb3VwIHNwYW49IicrKGV0LmUuYy1ldC5zLmMrMSkrJyI+JyksYXQpe2Zvcih2YXIgU249ZXQucy5jO1NuPE1hdGgubWluKGF0Lmxlbmd0aCxldC5lLmMrMSk7KytTbikhKHJyPWF0W1Nu''@;'; put 'put ''XSkmJmJ0JiZidC5jb2wmJihycj1idC5jb2wpLHJyfHwocnI9e3dweDo1M30pLFRuLnB1c2goZ2UocnIsMSkpO2V0LmUuYy1ldC5zLmMrMT5hdC5sZW5ndGgmJihycj1udWxsLGJ0JiZidC5jb2wmJihycj1idC5jb2wpLHJyfHwocnI9e3dweDo1M30pLFRuLnB1c2goZ2UocnIsZXQuZS5jLWV0''@;'; put 'put ''LnMuYysxLWF0Lmxlbmd0aCkpKX1lbHNlIHJyPW51bGwsYnQmJmJ0LmNvbCYmKHJyPWJ0LmNvbCkscnJ8fChycj17d3B4OjUzfSksVG4ucHVzaChnZShycixldC5lLmMtZXQucy5jKzEpKTtyZXR1cm4gVG4ucHVzaCgiPC9jb2xncm91cD4iKSxUbi5qb2luKCIiKX12YXIgeWU9JzxodG1sPjxo''@;'; put 'put ''ZWFkPjxtZXRhIGNoYXJzZXQ9InV0Zi04Ii8+PHRpdGxlPlNoZWV0SlMgVGFibGUgRXhwb3J0PC90aXRsZT48L2hlYWQ+PGJvZHk+JyxQZT0iPC9ib2R5PjwvaHRtbD4iO3JldHVybnt0b193b3JrYm9vazpmdW5jdGlvbiBHKFllLGV0KXtyZXR1cm4gdGgoayhZZSxldCksZXQpfSx0b19zaGVl''@;'; put 'put ''dDprLF9yb3c6USxCRUdJTjp5ZSxFTkQ6UGUsX3ByZWFtYmxlOnBlLGh0bWxfdG9fcnM6ZnVuY3Rpb24gUihZZSl7dmFyIGV0PVtdLGN0PXt9LEV0PTA7cmV0dXJuIFllLnJlcGxhY2UoLzwoXC8/KShbXlxzPz4hXC86XSo6fCkoW15ccz8+OlwvXSspW14+XSo+L2dtLGZ1bmN0aW9uKGF0LGJ0''@;'; put 'put ''LGp0LGt0LE90KXt2YXIgVG49V24odnIoYXQpWzBdKS5yZXBsYWNlKC9bPFwvPl0vZywiIikscnI9WWUuc2xpY2UoRXQsT3QpLnJlcGxhY2UoL1xzL2csIiAiKTtzd2l0Y2gocnIubGVuZ3RoPjAmJihldC5wdXNoKHt0OiJzIix2OnJyLHM6Y3R9KSxjdD1xdChjdCkpLFRuLnRvTG93ZXJDYXNl''@;'; put 'put ''KCkpe2Nhc2UiYiI6Ii8iIT1idD9jdC5ib2xkPSEwOmRlbGV0ZSBjdC5ib2xkO2JyZWFrO2Nhc2UiaSI6Ii8iIT1idD9jdC5pdGFsaWM9ITA6ZGVsZXRlIGN0Lml0YWxpYzticmVhaztjYXNlInUiOiIvIiE9YnQ/Y3QudW5kZXJsaW5lPTE6ZGVsZXRlIGN0LnVuZGVybGluZTticmVhaztjYXNl''@;'; put 'put ''InMiOiIvIiE9YnQ/Y3Quc3RyaWtlPSEwOmRlbGV0ZSBjdC5zdHJpa2V9cmV0dXJuIEV0PU90K2F0Lmxlbmd0aCxhdH0pLGV0fSxmcm9tX3NoZWV0OmZ1bmN0aW9uIE5lKFllLGV0KXt2YXIgY3Q9ZXR8fHt9LGF0PW51bGwhPWN0LmZvb3Rlcj9jdC5mb290ZXI6UGUsYnQ9W251bGwhPWN0Lmhl''@;'; put 'put ''YWRlcj9jdC5oZWFkZXI6eWUsIiJdLGp0PVtdLGt0PShuZXcgRGF0ZSkudmFsdWVPZigpO1llfHwoWWU9e30pLFllWyIhcmVmIl18fChZZVsiIXJlZiJdPSJBMTpBMSIpO3ZhciBPdD1NcyhZZVsiIXJlZiJdKTtpZihjdC5kZW5zZT1BcnJheS5pc0FycmF5KFllKSxjdC5za2lwZW5kKXt2YXIg''@;'; put 'put ''S3Q9T3QuZS5yO2U6Zm9yKDtLdD49T3Qucy5yOy0tS3QpZm9yKHZhciBUbj1PdC5lLmM7VG4+PU90LnMuYzstLVRuKWlmKG51bGwhPSgoY3QuZGVuc2U/KFllW0t0XXx8W10pW1RuXTpZZVtxaSh7cjpLdCxjOlRufSldKXx8e30pLnYpYnJlYWsgZTtPdC5lLnI9S3Q7dmFyIHJyPU90LmUuYztl''@;'; put 'put ''OmZvcig7cnI+PU90LnMuYzstLXJyKWZvcih2YXIgU249T3QuZS5yO1NuPj1PdC5zLnI7LS1TbilpZihudWxsIT0oKGN0LmRlbnNlPyhZZVtTbl18fFtdKVtycl06WWVbcWkoe3I6U24sYzpycn0pXSl8fHt9KS52KWJyZWFrIGU7T3QuZS5jPXJyfWJ0LnB1c2gocGUoWWUsT3QsY3QpKTtmb3Io''@;'; put 'put ''dmFyIGxyPU90LnMucjtscjw9T3QuZS5yOysrbHIpYnQucHVzaChRKFllLE90LGxyLGN0LGp0LGt0KSk7cmV0dXJuIGJ0LnB1c2goIjwvdGFibGU+IithdCksY3QuY3NzJiYoYnRbMV09IjxzdHlsZT5cbiIranQubWFwKGZ1bmN0aW9uKFhuLEJuKXtyZXR1cm4iLnNqcyIra3QrIi0iK0JuKyIg''@;'; put 'put ''eyIrWG4rIn0ifSkuam9pbigiXG4iKSsiPC9zdHlsZT4iKSxidC5qb2luKCIiKX19fSgpO2Z1bmN0aW9uIEFJKFMsUixrKXt2YXIgRz17fTtpZih0eXBlb2YgZ2V0Q29tcHV0ZWRTdHlsZT4idSIpcmV0dXJuIEc7dmFyIFE9Z2V0Q29tcHV0ZWRTdHlsZShTKTtpZigoNzAwPT1RWyJmb250LXdl''@;'; put 'put ''aWdodCJdfHwiYm9sZCI9PVFbImZvbnQtd2VpZ2h0Il0pJiYoRy5ib2xkPSEwKSwoUVsiZm9udC1zdHlsZSJdfHwiIikubWF0Y2goL2l0YWxpYy8pJiYoRy5pdGFsaWM9ITApLChRWyJ0ZXh0LWRlY29yYXRpb24iXXx8IiIpLm1hdGNoKC91bmRlcmxpbmUvKSYmKEcudW5kZXJsaW5lPTEpLChR''@;'; put 'put ''WyJ0ZXh0LWRlY29yYXRpb24iXXx8IiIpLm1hdGNoKC9saW5lLXRocm91Z2gvKSYmKEcuc3RyaWtlPTEpLHBhcnNlSW50KFFbImZvbnQtc2l6ZSJdKSYmKEcuc3o9cGFyc2VGbG9hdChRWyJmb250LXNpemUiXSkqKFFbImZvbnQtc2l6ZSJdLm1hdGNoKC9weC8pPzMvNDoxKSksUVsiZm9udC1m''@;'; put 'put ''YW1pbHkiXSYmKEcubmFtZT1RWyJmb250LWZhbWlseSJdLnNwbGl0KCIsIilbMF0ucmVwbGFjZSgvXHMqIlxzKi9nLCIiKSksUS5jb2xvcil7dmFyIG9lPUU1KFEuY29sb3IudG9Mb3dlckNhc2UoKSwhMCk7b2U+PTAmJihHLmNvbG9yPXtyZ2I6b2V9KX1zd2l0Y2goUVsidGV4dC10cmFuc2Zv''@;'; put 'put ''cm0iXSYmKEcudGV4dF90cmFuc2Zvcm09UVsidGV4dC10cmFuc2Zvcm0iXS50b0xvd2VyQ2FzZSgpKSwibm9uZSIhPShRWyJ0ZXh0LXNoYWRvdyJdfHwibm9uZSIpJiYoRy5zaGFkb3c9ITApLFFbInRleHQtYWxpZ24iXSl7Y2FzZSJjZW50ZXIiOkcuYWxpZ25tZW50PXtob3Jpem9udGFsOiJj''@;'; put 'put ''ZW50ZXIifTticmVhaztjYXNlInJpZ2h0IjpHLmFsaWdubWVudD17aG9yaXpvbnRhbDoicmlnaHQifTticmVhaztjYXNlImxlZnQiOkcuYWxpZ25tZW50PXtob3Jpem9udGFsOiJsZWZ0In07YnJlYWs7Y2FzZSJqdXN0aWZ5IjpHLmFsaWdubWVudD17aG9yaXpvbnRhbDoianVzdGlmeSJ9fXN3''@;'; put 'put ''aXRjaChRWyJ2ZXJ0aWNhbC1hbGlnbiJdKXtjYXNlInRvcCI6Y2FzZSJtaWRkbGUiOmNhc2UiYm90dG9tIjpHLmFsaWdubWVudHx8KEcuYWxpZ25tZW50PXt9KSxHLmFsaWdubWVudC52ZXJ0aWNhbD1RWyJ2ZXJ0aWNhbC1hbGlnbiJdLCJtaWRkbGUiPT1HLmFsaWdubWVudC52ZXJ0aWNhbCYm''@;'; put 'put ''KEcuYWxpZ25tZW50LnZlcnRpY2FsPSJjZW50ZXIiKTticmVhaztjYXNlInN1YiI6Y2FzZSJzdXBlciI6Ry52YWxpZ249UVsidmVydGljYWwtYWxpZ24iXSxHLnN6JiYoRy5zei89LjgzKX12YXIgZ2U9UiYmZ2V0Q29tcHV0ZWRTdHlsZShSKTtyZXR1cm4gZ2UmJmsmJlImJlsibGVmdCIsInJp''@;'; put 'put ''Z2h0IiwidG9wIiwiYm90dG9tIl0uZm9yRWFjaChmdW5jdGlvbihwZSl7dmFyIHllPXBlLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK3BlLnNsaWNlKDEpLFBlPWdlWyJib3JkZXItIitwZSsiLXN0eWxlIl07aWYoKCJub25lIj09UGV8fCFQZSkmJihQZT1nZVsiYm9yZGVyIit5ZSsiU3R5bGUi''@;'; put 'put ''XSksIm5vbmUiIT1QZSYmUGUpe3ZhciBOZT1wYXJzZUludChnZVsiYm9yZGVyLSIrcGUrIi13aWR0aCJdfHxnZVsiYm9yZGVyIit5ZSsiV2lkdGgiXSwxMCksWWU9InRoaW4iO2lmKE5lPjApe3N3aXRjaChQZSl7Y2FzZSJkb3VibGUiOlllPSJkb3VibGUiO2JyZWFrO2Nhc2UiZGFzaGVkIjpZ''@;'; put 'put ''ZT1OZT49Mj8ibWVkaXVtRGFzaGVkIjoiZGFzaGVkIjticmVhaztjYXNlImRvdHRlZCI6WWU9TmU+PTI/Im1lZGl1bURhc2hEb3REb3QiOiJkb3R0ZWQiO2JyZWFrO2Nhc2Uic29saWQiOlllPU5lPj0zPyJ0aGljayI6TmU+PTI/Im1lZGl1bSI6InRoaW4ifWlmKEdbcGVdPXtzdHlsZTpZZX0s''@;'; put 'put ''Z2VbImJvcmRlci0iK3BlKyItY29sb3IiXXx8Z2VbImJvcmRlciIreWUrIkNvbG9yIl0pe3ZhciBldD1FNSgoZ2VbImJvcmRlci0iK3BlKyItY29sb3IiXXx8Z2VbImJvcmRlciIreWUrIkNvbG9yIl0pLnRvTG93ZXJDYXNlKCksITApO2V0Pj0wJiYoR1twZV0uY29sb3I9e3JnYjpldH0pfX19''@;'; put 'put ''fSksR31mdW5jdGlvbiBESShTLFIsayl7dmFyIEc9Uy5jaGlsZE5vZGVzO2lmKDE9PVMubm9kZVR5cGUpc3dpdGNoKFMudGFnTmFtZS50b0xvd2VyQ2FzZSgpKXtjYXNlInAiOlIubGVuZ3RoPjAmJlIucHVzaCh7dDoidCIsdjoiXG4iLHM6a30pO2JyZWFrO2Nhc2Uic2VsZWN0IjpyZXR1cm4g''@;'; put 'put ''ZnVuY3Rpb24ga0koUyxSLGspe1IucHVzaCh7dDoidCIsdjpTLmNoaWxkcmVuW1Muc2VsZWN0ZWRJbmRleF0uaW5uZXJUZXh0LHM6a30pfShTLFIsayl9aWYoRy5sZW5ndGg+MCl7dmFyIFE9QUkoUyxudWxsLCExKTtrJiYoay51bmRlcmxpbmUmJihRLnVuZGVybGluZT1rLnVuZGVybGluZSks''@;'; put 'put ''ay5zdHJpa2UmJihRLnN0cmlrZT1rLnN0cmlrZSkpO2Zvcih2YXIgb2U9MDtvZTxHLmxlbmd0aDsrK29lKXt0cnl7aWYoR1tvZV0uZ2V0QXR0cmlidXRlKCJhcmlhLWhpZGRlbiIpKWNvbnRpbnVlfWNhdGNoe31ESShHW29lXSxSLFEpfWRlbGV0ZSBRLnRleHRfdHJhbnNmb3JtfWVsc2UgaWYo''@;'; put 'put ''Mz09Uy5ub2RlVHlwZSl7dmFyIGdlPXt0OiJ0Iix2OlMubm9kZVZhbHVlLnJlcGxhY2UoL15bXG4gXSsvLCIgIikucmVwbGFjZSgvW1xuIF0rJC8sIiAiKSxzOmt9O3N3aXRjaChrLnRleHRfdHJhbnNmb3JtKXtjYXNlInVwcGVyY2FzZSI6Z2Uudj1nZS52LnRvVXBwZXJDYXNlKCk7YnJlYWs7''@;'; put 'put ''Y2FzZSJsb3dlcmNhc2UiOmdlLnY9Z2Uudi50b0xvd2VyQ2FzZSgpfShSLmxlbmd0aD4wfHxnZS52JiYiICIhPWdlLnYpJiZSLnB1c2goZ2UpfWVsc2UgMT09Uy5ub2RlVHlwZSYmImJyIj09PVMudGFnTmFtZS50b0xvd2VyQ2FzZSgpJiZSLnB1c2goe3Q6InQiLHY6IlxuIixzOmt9KX1mdW5j''@;'; put 'put ''dGlvbiBEYihTLFIsayxHLFEpe3ZhciBnZSxvZT1TLmlubmVySFRNTDtpZih0eXBlb2YgZ2V0Q29tcHV0ZWRTdHlsZTwidSIpc3dpdGNoKGdlPWdldENvbXB1dGVkU3R5bGUoUyksKGdlWyJ3aGl0ZS1zcGFjZSJdfHwiIikubWF0Y2goL3ByZS8pJiYob2U9b2UucmVwbGFjZSgvXG4vZywiPGJy''@;'; put 'put ''Lz4iKSksKGdlWyJ0ZXh0LXRyYW5zZm9ybSJdfHwiIikudG9Mb3dlckNhc2UoKSl7Y2FzZSJ1cHBlcmNhc2UiOm9lPW9lLnRvVXBwZXJDYXNlKCk7YnJlYWs7Y2FzZSJsb3dlcmNhc2UiOm9lPW9lLnRvTG93ZXJDYXNlKCl9dmFyIHBlPWZ1bmN0aW9uIGtiKFMsUixrLEcpe3ZhciBRPXt0OiJz''@;'; put 'put ''Iix2OlJ9LG9lPSIiO2lmKFMpe2s9Uy5nZXRBdHRyaWJ1dGUoImRhdGEtdCIpfHxTLmdldEF0dHJpYnV0ZSgidCIpO3ZhciBnZT1TLmdldEF0dHJpYnV0ZSgiZGF0YS12Iil8fFMuZ2V0QXR0cmlidXRlKCJ2Iik7aWYobnVsbCE9KG9lPVMuZ2V0QXR0cmlidXRlKCJkYXRhLXoiKXx8Uy5nZXRB''@;'; put 'put ''dHRyaWJ1dGUoInoiKSkmJihRLno9b2UpLG51bGwhPWsmJm51bGwhPWdlKXJldHVybiBRLnQ9ayxRLnY9Z2UsUX1yZXR1cm4gbnVsbCE9UiYmKDA9PVIubGVuZ3RoP1EudD1rfHwieiI6Ry5yYXd8fCFSLnRyaW0oKS5sZW5ndGh8fCJzIj09a3x8KFE9UmkoUixHKSkpLG9lJiYoUS56PW9lKSxR''@;'; put 'put ''fShTLGlyKG9lKSxrLFEpO2lmKHR5cGVvZiBnZXRDb21wdXRlZFN0eWxlPCJ1IiYmKHBlLnM9QUkoUyxSLFEuYm9yZGVycyksZGVsZXRlIHBlLnMudGV4dF90cmFuc2Zvcm0sUy5jaGlsZE5vZGVzLmxlbmd0aD4xfHwxPT1TLmNoaWxkTm9kZXMubGVuZ3RoJiYzIT1TLmNoaWxkTm9kZXNbMF0u''@;'; put 'put ''bm9kZVR5cGUpKXN3aXRjaChESShTLHBlLlI9W10sbnVsbCkscGUuUiYmcGUuUltwZS5SLmxlbmd0aC0xXSYmIlxuIj09cGUuUltwZS5SLmxlbmd0aC0xXS52JiZwZS5SLmxlbmd0aC0tLChnZVsidGV4dC10cmFuc2Zvcm0iXXx8IiIpLnRvTG93ZXJDYXNlKCkpe2Nhc2UidXBwZXJjYXNlIjpw''@;'; put 'put ''ZS5SLmZvckVhY2goZnVuY3Rpb24oZXQpe2V0LnY9ZXQudi50b1VwcGVyQ2FzZSgpfSk7YnJlYWs7Y2FzZSJsb3dlcmNhc2UiOnBlLlIuZm9yRWFjaChmdW5jdGlvbihldCl7ZXQudj1ldC52LnRvTG93ZXJDYXNlKCl9KX1pZigicyI9PXBlLnQpe3ZhciB5ZT1wZS52Lm1hdGNoKC9cbi8pOyF5''@;'; put 'put ''ZSYmcGUuUiYmcGUuUi5mb3JFYWNoKGZ1bmN0aW9uKGV0KXsic3RyaW5nIj09dHlwZW9mIGV0LnYmJmV0LnYubWF0Y2goL1xuLykmJih5ZT0hMCl9KSwicyI9PXBlLnQmJnllJiYocGUuc3x8KHBlLnM9e30pLHBlLnMuYWxpZ25tZW50fHwocGUucy5hbGlnbm1lbnQ9e30pLHBlLnMuYWxpZ25t''@;'; put 'put ''ZW50LndyYXBUZXh0PSEwKX1pZihSKXt2YXIgUGU9IiIsTmU9Ui5nZXRFbGVtZW50c0J5VGFnTmFtZSgiQSIpO2lmKE5lJiZOZS5sZW5ndGgpZm9yKHZhciBZZT0wO1llPE5lLmxlbmd0aCYmKCFOZVtZZV0uaGFzQXR0cmlidXRlKCJocmVmIil8fCIjIj09KFBlPU5lW1llXS5nZXRBdHRyaWJ1''@;'; put 'put ''dGUoImhyZWYiKSkuY2hhckF0KDApKTsrK1llKTtQZSYmIiMiIT1QZS5jaGFyQXQoMCkmJihwZS5sPXtUYXJnZXQ6UGV9KX1yZXR1cm4gcGV9ZnVuY3Rpb24gSWIoUyxSLGspe3ZhciBRLEc9Ui5yb3dzO2lmKCFHKXtpZihrJiZudWxsIT1rLm9yaWdpbil0aHJvdyJVbnN1cHBvcnRlZCBvcmln''@;'; put 'put ''aW4gd2hlbiAiK1IudGFnTmFtZSsiIGlzIG5vdCBhIFRBQkxFIjtyZXR1cm4gZnVuY3Rpb24gUW5lKFMsUixrKXtrPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoa3x8e30pKTt2YXIgb2U9e3M6e3I6MCxjOjB9LGU6e3I6MCxjOjB9fTtTWyIhbWVyZ2VzIl18fChTWyIhbWVyZ2VzIl09W10p''@;'; put 'put ''O2Zvcih2YXIgcGUsZ2U9Ui5jaGlsZHJlbix5ZT0wLFBlPTA7UGU8Z2UubGVuZ3RoOysrUGUpe3ZhciBldCxOZT1nZVtQZV0sWWU9IiI7dHJ5e3R5cGVvZiBnZXRDb21wdXRlZFN0eWxlPCJ1Ij9ldD1nZXRDb21wdXRlZFN0eWxlOk5lLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcmJiJmdW5j''@;'; put 'put ''dGlvbiI9PXR5cGVvZiBOZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUmJihldD1OZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUpfWNhdGNoe31pZighZXR8fCJub25lIiE9ZXQoTmUpLmRpc3BsYXkpc3dpdGNoKE5lLnRhZ05h''@;'; put 'put ''bWUudG9VcHBlckNhc2UoKSl7Y2FzZSJUQUJMRSI6eWU9LTEsU1siIXJlZiJdJiYoay5vcmlnaW49LTEpLEliKFMsTmUsayk7YnJlYWs7Y2FzZSJCUiI6Y2FzZSJIUiI6eWU9LTEsU1siIXJlZiJdPygrKyhvZT1NcyhTWyIhcmVmIl0pKS5lLnIsU1siIXJlZiJdPXJhKG9lKSk6U1siIXJlZiJd''@;'; put 'put ''PSJBMTpBMSI7YnJlYWs7Y2FzZSJESVYiOmNhc2UiUCI6Y2FzZSJIMSI6Y2FzZSJIMiI6Y2FzZSJIMyI6Y2FzZSJINCI6Y2FzZSJINSI6Y2FzZSJINiI6eWU9LTEscGU9RGIoTmUsbnVsbCwiIiwwLGspLFNbIiFyZWYiXT8oay5vcmlnaW49LTEsZjQoUyxbW3BlXV0saykpOihTWyIhcmVmIl09''@;'; put 'put ''IkExIixBcnJheS5pc0FycmF5KFMpPyhTWzBdfHwoU1swXT1bXSksU1swXVswXT1wZSk6Uy5BMT1wZSksU1siIXJvd3MiXXx8KFNbIiFyb3dzIl09W10pLGV0JiYob2U9TXMoU1siIXJlZiJdKSwoWWU9ZXQoTmUpLmhlaWdodCkmJiJhdXRvIiE9WWUmJihTWyIhcm93cyJdW29lLmUucl09e2hw''@;'; put 'put ''dDpwYXJzZUludChZZSwxMCl9KSk7YnJlYWs7Y2FzZSJTUEFOIjpjYXNlIkEiOmNhc2UiQiI6Y2FzZSJFTSI6Y2FzZSJJIjpjYXNlIkZPTlQiOmNhc2UiUyI6Y2FzZSJTVUIiOmNhc2UiU1VQIjpjYXNlIlUiOnBlPURiKE5lLG51bGwsIiIsMCxrKSxTWyIhcmVmIl18fChTWyIhcmVmIl09IkEx''@;'; put 'put ''OkExIiksZjQoUyxbW3BlXV0se29yaWdpbjpxaSh7cjooeWU8MD8xOjApKyhvZT1NcyhTWyIhcmVmIl0pKS5lLnIsYzorK3llfSl9KTticmVhaztjYXNlIkRMIjpjYXNlIlVMIjpjYXNlIk9MIjp5ZT0tMSxjb25zb2xlLmVycm9yKCJIVE1MIENvbnZlcnNpb24gZG9lcyBub3Qgc3VwcG9ydCBs''@;'; put 'put ''aXN0IGVsZW1lbnQgIitOZS50YWdOYW1lLnRvVXBwZXJDYXNlKCkpO2JyZWFrO2RlZmF1bHQ6eWU9LTEsY29uc29sZS5lcnJvcigiU2tpcHBpbmcgIitOZS50YWdOYW1lLnRvVXBwZXJDYXNlKCkpfX1yZXR1cm4gU30oUyxSLGspfXRyeXt0eXBlb2YgZ2V0Q29tcHV0ZWRTdHlsZTwidSI/UT1n''@;'; put 'put ''ZXRDb21wdXRlZFN0eWxlOlIub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldyYmImZ1bmN0aW9uIj09dHlwZW9mIFIub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlJiYoUT1SLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSl9Y2F0Y2h7''@;'; put 'put ''fXZhciBvZT1rfHx7fTtudWxsIT1sZSYmKG9lLmRlbnNlPWxlKTt2YXIgZ2U9MCxwZT0wO2lmKG51bGwhPW9lLm9yaWdpbilpZigibnVtYmVyIj09dHlwZW9mIG9lLm9yaWdpbilnZT1vZS5vcmlnaW47ZWxzZXt2YXIgeWU9InN0cmluZyI9PXR5cGVvZiBvZS5vcmlnaW4/Tm8ob2Uub3JpZ2lu''@;'; put 'put ''KTpvZS5vcmlnaW47Z2U9eWUucixwZT15ZS5jfXZhciBQZT1NYXRoLm1pbihvZS5zaGVldFJvd3N8fDFlNyxHLmxlbmd0aCksTmU9e3M6e3I6MCxjOjB9LGU6e3I6Z2UsYzpwZX19O2lmKFNbIiFyZWYiXSl7dmFyIFllPU1zKFNbIiFyZWYiXSk7TmUucy5yPU1hdGgubWluKE5lLnMucixZZS5z''@;'; put 'put ''LnIpLE5lLnMuYz1NYXRoLm1pbihOZS5zLmMsWWUucy5jKSxOZS5lLnI9TWF0aC5tYXgoTmUuZS5yLFllLmUuciksTmUuZS5jPU1hdGgubWF4KE5lLmUuYyxZZS5lLmMpLC0xPT1nZSYmKE5lLmUucj1nZT1ZZS5lLnIrMSl9dmFyIGV0PVtdLGN0PTAsRXQ9U1siIXJvd3MiXXx8KFNbIiFyb3dz''@;'; put 'put ''Il09W10pLGF0PTAsYnQ9MCxqdD0wLGt0PTAsT3Q9MCxLdD0wO2ZvcihTWyIhY29scyJdfHwoU1siIWNvbHMiXT1bXSk7YXQ8Ry5sZW5ndGgmJmJ0PFBlOysrYXQpe2Zvcih2YXIgVG49R1thdF0scnI9VG4ucGFyZW50RWxlbWVudDsiVEFCTEUiIT1yci50YWdOYW1lLnRvVXBwZXJDYXNlKCk7''@;'; put 'put ''KXJyPXJyLnBhcmVudEVsZW1lbnQ7aWYocnI9PVIpe2U6aWYodHlwZW9mIFE8InUiKXt2YXIgU249UShUbik7aWYobnVsbD09U24pYnJlYWsgZTtpZihTbi5zdHlsZXx8KFNuLnN0eWxlPXt9KSxvZS5kaXNwbGF5JiYibm9uZSI9PShTbi5kaXNwbGF5fHxTbi5zdHlsZS5kaXNwbGF5KSljb250''@;'; put 'put ''aW51ZTsibm9uZSI9PShTbi5kaXNwbGF5fHxTbi5zdHlsZS5kaXNwbGF5KSYmKChFdFtidF18fChFdFtidF09e30pKS5oaWRkZW49ITApfXZhciBscj1Ubi5jZWxscztmb3IoanQ9a3Q9MDtqdDxsci5sZW5ndGg7KytqdCl7dmFyIFhuPWxyW2p0XSxCbj1udWxsO2lmKCEodHlwZW9mIFE8InUi''@;'; put 'put ''JiYobnVsbD09Qm4mJihCbj1RKFhuKSksQm4uc3R5bGV8fChCbi5zdHlsZT17fSksb2UuZGlzcGxheSYmbnVsbCE9Qm4mJiJub25lIj09KEJuLmRpc3BsYXl8fEJuLnN0eWxlLmRpc3BsYXkpKSkpe2ZvcihLdD0rWG4uZ2V0QXR0cmlidXRlKCJjb2xzcGFuIil8fDEsY3Q9MDtjdDxldC5sZW5n''@;'; put 'put ''dGg7KytjdCl7dmFyIGZyPWV0W2N0XTtmci5zLmM9PWt0K3BlJiZmci5zLnI8YnQrZ2UmJmJ0K2dlPD1mci5lLnImJihrdD1mci5lLmMrMS1wZSxjdD0tMSl9KChPdD0rWG4uZ2V0QXR0cmlidXRlKCJyb3dzcGFuIil8fDEpPjF8fEt0PjEpJiZldC5wdXNoKHtzOntyOmJ0K2dlLGM6a3QrcGV9''@;'; put 'put ''LGU6e3I6YnQrZ2UrKE90fHwxKS0xLGM6a3QrcGUrKEt0fHwxKS0xfX0pO3ZhciBicj1Ybi5nZXRBdHRyaWJ1dGUoInQiKXx8IiIsZXI9WG4uZ2V0QXR0cmlidXRlKCJiZ2NvbG9yIik7ZTppZih0eXBlb2YgUTwidSIpe2lmKG51bGw9PUJuJiYoQm49UShYbikpLG51bGw9PUJuKWJyZWFrIGU7''@;'; put 'put ''aWYoQm4uc3R5bGV8fChCbi5zdHlsZT17fSksMT09S3QmJkJuLndpZHRoJiYoU1siIWNvbHMiXVtrdCtwZV09U1siIWNvbHMiXVtrdCtwZV18fHt9LEJuLndpZHRoLm1hdGNoKC9weC8pP1NbIiFjb2xzIl1ba3QrcGVdLndweD1NYXRoLm1heChwYXJzZUludChCbi53aWR0aCwxMCkrNSxTWyIh''@;'; put 'put ''Y29scyJdW2t0K3BlXS53cHh8fDApOkJuLndpZHRoLm1hdGNoKC9wdC8pJiYoU1siIWNvbHMiXVtrdCtwZV0ud3B4PU1hdGgubWF4KDQqcGFyc2VJbnQoQm4ud2lkdGgsMTApLzMrNSxTWyIhY29scyJdW2t0K3BlXS53cHh8fDApKSksT3Q8PTEpe0V0W2J0K2dlXXx8KEV0W2J0K2dlXT17fSk7''@;'; put 'put ''dmFyIE1pPUJuLmhlaWdodDsoTWk9TWkubWF0Y2goL3B0Lyk/c2gocGFyc2VJbnQoTWksMTApKTpwYXJzZUludChNaSwxMCkpPihFdFtidCtnZV0uaHB4fHxzaChFdFtidCtnZV0uaHB0KXx8MCkmJihkZWxldGUgRXRbYnQrZ2VdLmhwdCxFdFtidCtnZV0uaHB4PU1pKX19dmFyIEZpPVhuO2lm''@;'; put 'put ''KFhuLmZpcnN0RWxlbWVudENoaWxkJiYxPT1Ybi5jaGlsZHJlbi5sZW5ndGgmJiJzcGFuIj09WG4uZmlyc3RFbGVtZW50Q2hpbGQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSl7Zm9yKHZhciBuYT0wLGNhPVhuLmNoaWxkTm9kZXMsTGk9MDtMaTxjYS5sZW5ndGg7KytMaSkzPT1jYVtMaV0ubm9k''@;'; put 'put ''ZVR5cGUmJisrbmE7MD09bmEmJihYbj1Ybi5maXJzdEVsZW1lbnRDaGlsZCl9dmFyIGtyPURiKFhuLEZpLGJyLDAsb2UpO2lmKEJuKXt2YXIgVm49UShYbik7aWYoVm4mJiFWbi5zdHlsZSYmKFZuLnN0eWxlPXt9KSwoVm4mJlZuWyJiYWNrZ3JvdW5kLWNvbG9yIl18fEJuWyJiYWNrZ3JvdW5k''@;'; put 'put ''LWNvbG9yIl0pJiYoa3Iuc3x8KGtyLnM9e30pLCFrci5zLmZnQ29sb3IpKXRyeXt2YXIgQnI9Vm4mJlZuWyJiYWNrZ3JvdW5kLWNvbG9yIl18fEJuWyJiYWNrZ3JvdW5kLWNvbG9yIl07QnIubWF0Y2goL3JnYmFbKF1ccyowLipbKV0vaSkmJihCcj1CblsiYmFja2dyb3VuZC1jb2xvciJdKTt2''@;'; put 'put ''YXIgX3I9RTUoQnIudG9Mb3dlckNhc2UoKSwhMCk7X3I+PTAmJihrci5zLmZnQ29sb3I9e3JnYjpfcn0pfWNhdGNoe31zd2l0Y2goQm5bInZlcnRpY2FsLWFsaWduIl0pe2Nhc2UibWlkZGxlIjpjYXNlImJhc2VsaW5lIjprci5zfHwoa3Iucz17fSksa3Iucy5hbGlnbm1lbnR8fChrci5zLmFs''@;'; put 'put ''aWdubWVudD17fSksa3Iucy5hbGlnbm1lbnQudmVydGljYWw9ImNlbnRlciJ9fWlmKGVyJiYoa3Iuc3x8KGtyLnM9e30pLCFrci5zLmZnQ29sb3IpKXRyeXt2YXIgRm49RTUoZXIudG9Mb3dlckNhc2UoKSwhMCk7Rm4+PTAmJihrci5zLmZnQ29sb3I9e3JnYjpGbn0pfWNhdGNoe31pZihvZS5k''@;'; put 'put ''ZW5zZT8oU1tidCtnZV18fChTW2J0K2dlXT1bXSksU1tidCtnZV1ba3QrcGVdPWtyKTpTW3FpKHtjOmt0K3BlLHI6YnQrZ2V9KV09a3IsT3Q+MXx8S3Q+MSlmb3IodmFyIGpyPWJ0O2pyPGJ0K090OysranIpZm9yKHZhciBaaT1rdDtaaTxrdCtLdDsrK1ppKWJ0PT1qciYma3Q9PVppfHwob2Uu''@;'; put 'put ''ZGVuc2U/KFNbanIrZ2VdfHwoU1tqcitnZV09W10pLFNbanIrZ2VdW1ppK3BlXT17dDoieiIsczpxdChrci5zfHx7fSl9KTpTW3FpKHtjOlppK3BlLHI6anIrZ2V9KV09e3Q6InoiLHM6cXQoa3Iuc3x8e30pfSk7TmUuZS5jPGt0K3BlJiYoTmUuZS5jPWt0K3BlKSxrdCs9S3R9fSsrYnR9fWlm''@;'; put 'put ''KGV0Lmxlbmd0aCYmKFNbIiFtZXJnZXMiXT0oU1siIW1lcmdlcyJdfHxbXSkuY29uY2F0KGV0KSksTmUuZS5yPU1hdGgubWF4KE5lLmUucixidC0xK2dlKSxTWyIhcmVmIl09cmEoTmUpLGJ0Pj1QZSYmKFNbIiFmdWxscmVmIl09cmEoKE5lLmUucj1HLmxlbmd0aC1hdCtidC0xK2dlLE5lKSkp''@;'; put 'put ''LG9lLmJvcmRlcnMpZm9yKGJ0PU5lLnMucjtidDw9TmUuZS5yOysrYnQpZm9yKGt0PU5lLnMuYztrdDw9TmUuZS5jOysra3QpaWYoIW9lLmRlbnNlKXt2YXIgeWk9U1txaSh7cjpidCxjOmt0fSldO2lmKCF5aXx8IXlpLnMpY29udGludWU7aWYoYnQ+MCl7dmFyIF9hPVNbcWkoe3I6YnQtMSxj''@;'; put 'put ''Omt0fSldO19hJiZfYS5zJiZfYS5zLmJvdHRvbSYmZGVsZXRlIHlpLnMudG9wfWlmKGt0PjApe3ZhciBzbz1TW3FpKHtyOmJ0LGM6a3QtMX0pXTtzbyYmc28ucyYmc28ucy5ib3R0b20mJmRlbGV0ZSB5aS5zLmxlZnR9fXJldHVybiBTfWZ1bmN0aW9uIGp6KFMsUil7cmV0dXJuIEliKChSfHx7''@;'; put 'put ''fSkuZGVuc2U/W106e30sUyxSKX12YXIgWFM9ZnVuY3Rpb24oKXt2YXIgUz1mdW5jdGlvbihHLFEsb2Upe3ZhciBnZT1HLnJlcGxhY2UoL1tcdFxyXG5dL2csIiAiKS50cmltKCkucmVwbGFjZSgvICsvZywiICIpLnJlcGxhY2UoLzx0ZXh0OnNcLz4vZywiICIpLnJlcGxhY2UoLzx0ZXh0OnMg''@;'; put 'put ''dGV4dDpjPSIoXGQrKSJcLz4vZyxmdW5jdGlvbihOZSxZZSl7cmV0dXJuIEFycmF5KHBhcnNlSW50KFllLDEwKSsxKS5qb2luKCIgIil9KS5yZXBsYWNlKC88dGV4dDp0YWJbXj5dKlwvPi9nLCJcdCIpLnJlcGxhY2UoLzx0ZXh0OmxpbmUtYnJlYWtcLz4vZywiXG4iKSxwZT1RcihnZS5yZXBs''@;'; put 'put ''YWNlKC88W14+XSo+L2csIiIpKSx5ZT1bXSxQZT0wO3JldHVybiBnZS5yZXBsYWNlKC8oPHRleHQ6c3Bhbi4qPz4pKC4qPyk8W1wvXXRleHQ6c3Bhbj4vZyxmdW5jdGlvbihOZSxZZSxldCxjdCl7Y3QhPVBlJiZ5ZS5wdXNoKHt0OiJzIix2OlFyKGdlLnNsaWNlKFBlLGN0KSl9KTt2YXIgRXQ9''@;'; put 'put ''e3Q6InMiLHY6UXIoZXQpfSxhdD12cihZZSlbInN0eWxlLW5hbWUiXTtyZXR1cm4gYXQmJm9lW2F0XSYmKEV0LnM9cXQob2VbYXRdKSkseWUucHVzaChFdCksUGU9Y3QrTmUubGVuZ3RoLCIifSksUGU8Z2UubGVuZ3RoJiZ5ZS5wdXNoKHt0OiJzIix2OlFyKGdlLnNsaWNlKFBlKSl9KSxbcGUs''@;'; put 'put ''eWVdfSxSPXtkYXk6WyJkIiwiZGQiXSxtb250aDpbIm0iLCJtbSJdLHllYXI6WyJ5IiwieXkiXSxob3VyczpbImgiLCJoaCJdLG1pbnV0ZXM6WyJtIiwibW0iXSxzZWNvbmRzOlsicyIsInNzIl0sImFtLXBtIjpbIkEvUCIsIkFNL1BNIl0sImRheS1vZi13ZWVrIjpbImRkZCIsImRkZGQiXSxl''@;'; put 'put ''cmE6WyJlIiwiZWUiXSxxdWFydGVyOlsiXFxRbSIsJ21cXCJ0aCBxdWFydGVyIiddfSxrPWZ1bmN0aW9uKEcsUSl7dmFyIG9lPXZyKEcuc2xpY2UoMCxHLmluZGV4T2YoIj4iKSkpLGdlPUcuc2xpY2UoRy5pbmRleE9mKCI+IikrMSkscGU9e25hbWU6b2UubmFtZSxmYW1pbHk6b2UuZmFtaWx5''@;'; put 'put ''fTtbWyJwYXJlbnQiLCJwYXJlbnQtc3R5bGUtbmFtZSJdLFsiZGF0YW5hbWUiLCJkYXRhLXN0eWxlLW5hbWUiXSxbIm1wbmFtZSIsIm1hc3Rlci1wYWdlLW5hbWUiXV0uZm9yRWFjaChmdW5jdGlvbihQZSl7b2VbUGVbMV1dJiYocGVbUGVbMF1dPW9lW1BlWzFdXSl9KTt2YXIgeWU9e307Z2Uu''@;'; put 'put ''cmVwbGFjZShlbixmdW5jdGlvbihQZSl7dmFyIE5lPXZyKFBlKTtpZigiPHN0eWxlOnRleHQtcHJvcGVydGllcyI9PT1OZVswXSl7aWYoTmVbImZvbnQtd2VpZ2h0Il0mJih5ZS5ib2xkPSsoImJvbGQiPT1OZVsiZm9udC13ZWlnaHQiXXx8IjcwMCI9PU5lWyJmb250LXdlaWdodCJdKSksKCJp''@;'; put 'put ''dGFsaWMiPT1OZVsiZm9udC1zdHlsZSJdfHwib2JsaXF1ZSI9PU5lWyJmb250LXN0eWxlIl0pJiYoeWUuaXRhbGljPTEpLCJub25lIiE9KE5lWyJ0ZXh0LXVuZGVybGluZS1zdHlsZSJdfHwibm9uZSIpP3llLnVuZGVybGluZT0iZG91YmxlIj09TmVbInRleHQtdW5kZXJsaW5lLXR5cGUiXT8y''@;'; put 'put ''OjE6KE5lWyJ0ZXh0LXVuZGVybGluZS1zdHlsZSJdfHwibm9uZSI9PU5lWyJ0ZXh0LXVuZGVybGluZS10eXBlIl0pJiYoeWUudW5kZXJsaW5lPTApLChOZVsiZm9udC1zaXplIl18fCIiKS5tYXRjaCgvcHQkLykmJih5ZS5zej0rTmVbImZvbnQtc2l6ZSJdLnJlcGxhY2UoInB0IiwiIikpLCJu''@;'; put 'put ''b25lIiE9KE5lWyJ0ZXh0LWxpbmUtdGhyb3VnaC1zdHlsZSJdfHwibm9uZSIpJiYoeWUuc3RyaWtlPTEpLE5lWyJmb250LW5hbWUiXSYmKHllLm5hbWU9TmVbImZvbnQtbmFtZSJdKSxOZS5jb2xvcil7dmFyIFllPUU1KE5lLmNvbG9yLCEwKTtZZT49MCYmKHllLmNvbG9yPVllKX1zd2l0Y2go''@;'; put 'put ''TmVbInRleHQtcG9zaXRpb24iXSl7Y2FzZSJzdXBlciI6eWUudmFsaWduPSJzdXBlciI7YnJlYWs7Y2FzZSJzdWIiOnllLnZhbGlnbj0ic3ViIjticmVhaztkZWZhdWx0OihOZVsidGV4dC1wb3NpdGlvbiJdfHwiIikubWF0Y2goLyUvKSYmKHllLnZhbGlnbj0iLSI9PU5lWyJ0ZXh0LXBvc2l0''@;'; put 'put ''aW9uIl0uY2hhckF0KDApPyJzdWIiOiJzdXBlciIpfSJub25lIiE9KE5lWyJ0ZXh0LXNoYWRvdyJdfHwibm9uZSIpJiYoeWUuc2hhZG93PTEpfXJldHVybiIifSksUVtvZS5uYW1lXT15ZX07cmV0dXJuIGZ1bmN0aW9uKFEsb2Upe3ZhciBnZT1vZXx8e307bnVsbCE9bGUmJm51bGw9PWdlLmRl''@;'; put 'put ''bnNlJiYoZ2UuZGVuc2U9bGUpO3ZhciBQZSxOZSxFdCxhdCxPdCxLdCxwZT1XUyhRKSx5ZT1bXSxZZT17bmFtZToiIn0sZXQ9IiIsY3Q9MCxidD17fSxqdD1bXSxrdD1nZS5kZW5zZT9bXTp7fSxUbj17dmFsdWU6IiJ9LHJyPSIiLFNuPTAsWG49W10sQm49LTEsZnI9LTEsYnI9e3M6e3I6MWU2''@;'; put 'put ''LGM6MWU3fSxlOntyOjAsYzowfX0sZXI9MCxNaT17fSxGaT1bXSxuYT17fSxjYT0wLExpPTAsa3I9W10sVm49MSxCcj0xLF9yPVtdLEZuPXtOYW1lczpbXX0sanI9e30sWmk9WyIiLCIiXSx5aT1bXSxfYT17fSxzbz17fSxpYT0wLExvPSIiLE9hPTAsaG89ITEsSmE9ITEsQmk9MDtmb3IoWTUu''@;'; put 'put ''bGFzdEluZGV4PTAscGU9cGUucmVwbGFjZSgvPCEtLShbXHNcU10qPyktLT4vZ20sIiIpLnJlcGxhY2UoLzwhRE9DVFlQRVteXFtdKlxbW15cXV0qXF0+L2dtLCIiKTtPdD1ZNS5leGVjKHBlKTspc3dpdGNoKE90WzNdPU90WzNdLnJlcGxhY2UoL18uKiQvLCIiKSl7Y2FzZSJ0YWJsZSI6Y2Fz''@;'; put 'put ''ZSJcdTVkZTVcdTRmNWNcdTg4NjgiOiIvIj09PU90WzFdPyhrdFsiIXJlZiJdPWJyLmUuYz49YnIucy5jJiZici5lLnI+PWJyLnMucj9yYShicik6IkExOkExIixnZS5zaGVldFJvd3M+MCYmZ2Uuc2hlZXRSb3dzPD1ici5lLnImJihrdFsiIWZ1bGxyZWYiXT1rdFsiIXJlZiJdLGJyLmUucj1n''@;'; put 'put ''ZS5zaGVldFJvd3MtMSxrdFsiIXJlZiJdPXJhKGJyKSksRmkubGVuZ3RoJiYoa3RbIiFtZXJnZXMiXT1GaSksa3IubGVuZ3RoJiYoa3RbIiFyb3dzIl09a3IpLEV0Lm5hbWU9RXQuXHU1NDBkXHU3OWYwfHxFdC5uYW1lLHR5cGVvZiBKU09OPCJ1IiYmSlNPTi5zdHJpbmdpZnkoRXQpLGp0LnB1''@;'; put 'put ''c2goRXQubmFtZSksYnRbRXQubmFtZV09a3QsSmE9ITEpOiIvIiE9PU90WzBdLmNoYXJBdChPdFswXS5sZW5ndGgtMikmJihFdD12cihPdFswXSwhMSksQm49ZnI9LTEsYnIucy5yPWJyLnMuYz0xZTcsYnIuZS5yPWJyLmUuYz0wLGt0PWdlLmRlbnNlP1tdOnt9LEZpPVtdLGtyPVtdLEphPSEw''@;'; put 'put ''KTticmVhaztjYXNlInRhYmxlLXJvdy1ncm91cCI6Ii8iPT09T3RbMV0/LS1lcjorK2VyO2JyZWFrO2Nhc2UidGFibGUtcm93IjpjYXNlIlx1ODg0YyI6aWYoIi8iPT09T3RbMV0pe0JuKz1WbixWbj0xO2JyZWFrfWlmKChhdD12cihPdFswXSwhMSkpLlx1ODg0Y1x1NTNmNz9Cbj1hdC5cdTg4''@;'; put 'put ''NGNcdTUzZjctMTotMT09Qm4mJihCbj0wKSwoVm49K2F0WyJudW1iZXItcm93cy1yZXBlYXRlZCJdfHwxKTwxMClmb3IoQmk9MDtCaTxWbjsrK0JpKWVyPjAmJihrcltCbitCaV09e2xldmVsOmVyfSk7ZnI9LTE7YnJlYWs7Y2FzZSJjb3ZlcmVkLXRhYmxlLWNlbGwiOiIvIiE9PU90WzFdJiYr''@;'; put 'put ''K2ZyLGdlLnNoZWV0U3R1YnMmJihnZS5kZW5zZT8oa3RbQm5dfHwoa3RbQm5dPVtdKSxrdFtCbl1bZnJdPXt0OiJ6In0pOmt0W3FpKHtyOkJuLGM6ZnJ9KV09e3Q6InoifSkscnI9IiIsWG49W107YnJlYWs7Y2FzZSJ0YWJsZS1jZWxsIjpjYXNlIlx1NjU3MFx1NjM2ZSI6aWYoIi8iPT09T3Rb''@;'; put 'put ''MF0uY2hhckF0KE90WzBdLmxlbmd0aC0yKSkrK2ZyLFRuPXZyKE90WzBdLCExKSxCcj1wYXJzZUludChUblsibnVtYmVyLWNvbHVtbnMtcmVwZWF0ZWQiXXx8IjEiLDEwKSxLdD17dDoieiIsdjpudWxsfSxUbi5mb3JtdWxhJiYwIT1nZS5jZWxsRm9ybXVsYSYmKEt0LmY9aVMoUXIoVG4uZm9y''@;'; put 'put ''bXVsYSkpKSwic3RyaW5nIj09KFRuLlx1NjU3MFx1NjM2ZVx1N2M3Ylx1NTc4Ynx8VG5bInZhbHVlLXR5cGUiXSkmJihLdC50PSJzIixLdC52PVFyKFRuWyJzdHJpbmctdmFsdWUiXXx8IiIpLGdlLmRlbnNlPyhrdFtCbl18fChrdFtCbl09W10pLGt0W0JuXVtmcl09S3QpOmt0W3FpKHtyOkJu''@;'; put 'put ''LGM6ZnJ9KV09S3QpLGZyKz1Cci0xO2Vsc2UgaWYoIi8iIT09T3RbMV0pe0JyPTE7dmFyIElzPVZuP0JuK1ZuLTE6Qm47aWYoKytmcj5ici5lLmMmJihici5lLmM9ZnIpLGZyPGJyLnMuYyYmKGJyLnMuYz1mciksQm48YnIucy5yJiYoYnIucy5yPUJuKSxJcz5ici5lLnImJihici5lLnI9SXMp''@;'; put 'put ''LHlpPVtdLF9hPXt9LEt0PXt0OihUbj12cihPdFswXSwhMSkpLlx1NjU3MFx1NjM2ZVx1N2M3Ylx1NTc4Ynx8VG5bInZhbHVlLXR5cGUiXSx2Om51bGx9LGdlLmNlbGxGb3JtdWxhKWlmKFRuLmZvcm11bGEmJihUbi5mb3JtdWxhPVFyKFRuLmZvcm11bGEpKSxUblsibnVtYmVyLW1hdHJpeC1j''@;'; put 'put ''b2x1bW5zLXNwYW5uZWQiXSYmVG5bIm51bWJlci1tYXRyaXgtcm93cy1zcGFubmVkIl0mJihjYT1wYXJzZUludChUblsibnVtYmVyLW1hdHJpeC1yb3dzLXNwYW5uZWQiXSwxMCl8fDAsTGk9cGFyc2VJbnQoVG5bIm51bWJlci1tYXRyaXgtY29sdW1ucy1zcGFubmVkIl0sMTApfHwwLEt0LkY9''@;'; put 'put ''cmEobmE9e3M6e3I6Qm4sYzpmcn0sZTp7cjpCbitjYS0xLGM6ZnIrTGktMX19KSxfci5wdXNoKFtuYSxLdC5GXSkpLFRuLmZvcm11bGEpS3QuZj1pUyhUbi5mb3JtdWxhKTtlbHNlIGZvcihCaT0wO0JpPF9yLmxlbmd0aDsrK0JpKUJuPj1fcltCaV1bMF0ucy5yJiZCbjw9X3JbQmldWzBdLmUu''@;'; put 'put ''ciYmZnI+PV9yW0JpXVswXS5zLmMmJmZyPD1fcltCaV1bMF0uZS5jJiYoS3QuRj1fcltCaV1bMV0pO3N3aXRjaCgoVG5bIm51bWJlci1jb2x1bW5zLXNwYW5uZWQiXXx8VG5bIm51bWJlci1yb3dzLXNwYW5uZWQiXSkmJihjYT1wYXJzZUludChUblsibnVtYmVyLXJvd3Mtc3Bhbm5lZCJdLDEw''@;'; put 'put ''KXx8MCxMaT1wYXJzZUludChUblsibnVtYmVyLWNvbHVtbnMtc3Bhbm5lZCJdLDEwKXx8MCxGaS5wdXNoKG5hPXtzOntyOkJuLGM6ZnJ9LGU6e3I6Qm4rY2EtMSxjOmZyK0xpLTF9fSkpLFRuWyJudW1iZXItY29sdW1ucy1yZXBlYXRlZCJdJiYoQnI9cGFyc2VJbnQoVG5bIm51bWJlci1jb2x1''@;'; put 'put ''bW5zLXJlcGVhdGVkIl0sMTApKSxLdC50KXtjYXNlImJvb2xlYW4iOkt0LnQ9ImIiLEt0LnY9dGkoVG5bImJvb2xlYW4tdmFsdWUiXSk7YnJlYWs7Y2FzZSJmbG9hdCI6Y2FzZSJwZXJjZW50YWdlIjpjYXNlImN1cnJlbmN5IjpLdC50PSJuIixLdC52PXBhcnNlRmxvYXQoVG4udmFsdWUpO2Jy''@;'; put 'put ''ZWFrO2Nhc2UiZGF0ZSI6S3QudD0iZCIsS3Qudj1IZShUblsiZGF0ZS12YWx1ZSJdKSxnZS5jZWxsRGF0ZXN8fChLdC50PSJuIixLdC52PVFlKEt0LnYpKSxLdC56PSJtL2QveXkiO2JyZWFrO2Nhc2UidGltZSI6S3QudD0ibiIsS3Qudj1pdChUblsidGltZS12YWx1ZSJdKS84NjQwMCxnZS5j''@;'; put 'put ''ZWxsRGF0ZXMmJihLdC50PSJkIixLdC52PXVuKEt0LnYpKSxLdC56PSJISDpNTTpTUyI7YnJlYWs7Y2FzZSJudW1iZXIiOkt0LnQ9Im4iLEt0LnY9cGFyc2VGbG9hdChUbi5cdTY1NzBcdTYzNmVcdTY1NzBcdTUwM2MpO2JyZWFrO2RlZmF1bHQ6aWYoInN0cmluZyIhPT1LdC50JiYidGV4dCIh''@;'; put 'put ''PT1LdC50JiZLdC50KXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgdmFsdWUgdHlwZSAiK0t0LnQpO0t0LnQ9InMiLG51bGwhPVRuWyJzdHJpbmctdmFsdWUiXSYmKHJyPVFyKFRuWyJzdHJpbmctdmFsdWUiXSksWG49W10pfX1lbHNle2lmKGhvPSExLCJzIj09PUt0LnQmJihLdC52PXJy''@;'; put 'put ''fHwiIixYbi5sZW5ndGgmJihLdC5SPVhuKSxobz0wPT1TbiksanIuVGFyZ2V0JiYoS3QubD1qcikseWkubGVuZ3RoPjAmJihLdC5jPXlpLHlpPVtdKSxyciYmITEhPT1nZS5jZWxsVGV4dCYmKEt0Lnc9cnIpLGhvJiYoS3QudD0ieiIsZGVsZXRlIEt0LnYpLGdlLmNlbGxIVE1MJiYoS3QuaD1L''@;'; put 'put ''dC5SP1Z1KEt0LlIpOmxhKCIiK0t0LnYpKSwoIWhvfHxnZS5zaGVldFN0dWJzKSYmIShnZS5zaGVldFJvd3MmJmdlLnNoZWV0Um93czw9Qm4pKWZvcih2YXIgUG49MDtQbjxWbjsrK1BuKXtpZihCcj1wYXJzZUludChUblsibnVtYmVyLWNvbHVtbnMtcmVwZWF0ZWQiXXx8IjEiLDEwKSxnZS5k''@;'; put 'put ''ZW5zZSlmb3Ioa3RbQm4rUG5dfHwoa3RbQm4rUG5dPVtdKSxrdFtCbitQbl1bZnJdPTA9PVBuP0t0OnF0KEt0KTstLUJyPjA7KWt0W0JuK1BuXVtmcitCcl09cXQoS3QpO2Vsc2UgZm9yKGt0W3FpKHtyOkJuK1BuLGM6ZnJ9KV09S3Q7LS1Ccj4wOylrdFtxaSh7cjpCbitQbixjOmZyK0JyfSld''@;'; put 'put ''PXF0KEt0KTtici5lLmM8PWZyJiYoYnIuZS5jPWZyKX1mcis9KEJyPXBhcnNlSW50KFRuWyJudW1iZXItY29sdW1ucy1yZXBlYXRlZCJdfHwiMSIsMTApKS0xLEJyPTAsS3Q9e30scnI9IiIsWG49W119anI9e307YnJlYWs7Y2FzZSJkb2N1bWVudCI6Y2FzZSJkb2N1bWVudC1jb250ZW50Ijpj''@;'; put 'put ''YXNlIlx1NzUzNVx1NWI1MFx1ODg2OFx1NjgzY1x1NjU4N1x1Njg2MyI6Y2FzZSJzcHJlYWRzaGVldCI6Y2FzZSJcdTRlM2JcdTRmNTMiOmNhc2Uic2NyaXB0cyI6Y2FzZSJzdHlsZXMiOmNhc2UiZm9udC1mYWNlLWRlY2xzIjpjYXNlIm1hc3Rlci1zdHlsZXMiOmlmKCIvIj09PU90WzFdKXtp''@;'; put 'put ''ZigoUGU9eWUucG9wKCkpWzBdIT09T3RbM10pdGhyb3ciQmFkIHN0YXRlOiAiK1BlfWVsc2UiLyIhPT1PdFswXS5jaGFyQXQoT3RbMF0ubGVuZ3RoLTIpJiZ5ZS5wdXNoKFtPdFszXSwhMF0pO2JyZWFrO2Nhc2UiYW5ub3RhdGlvbiI6aWYoIi8iPT09T3RbMV0pe2lmKChQZT15ZS5wb3AoKSlb''@;'; put 'put ''MF0hPT1PdFszXSl0aHJvdyJCYWQgc3RhdGU6ICIrUGU7X2EudD1ycixYbi5sZW5ndGgmJihfYS5SPVhuKSxfYS5hPUxvLHlpLnB1c2goX2EpfWVsc2UiLyIhPT1PdFswXS5jaGFyQXQoT3RbMF0ubGVuZ3RoLTIpJiZ5ZS5wdXNoKFtPdFszXSwhMV0pO0xvPSIiLE9hPTAscnI9IiIsU249MCxY''@;'; put 'put ''bj1bXTticmVhaztjYXNlImNyZWF0b3IiOiIvIj09PU90WzFdP0xvPXBlLnNsaWNlKE9hLE90LmluZGV4KTpPYT1PdC5pbmRleCtPdFswXS5sZW5ndGg7YnJlYWs7Y2FzZSJtZXRhIjpjYXNlIlx1NTE0M1x1NjU3MFx1NjM2ZSI6Y2FzZSJzZXR0aW5ncyI6Y2FzZSJjb25maWctaXRlbS1zZXQi''@;'; put 'put ''OmNhc2UiY29uZmlnLWl0ZW0tbWFwLWluZGV4ZWQiOmNhc2UiY29uZmlnLWl0ZW0tbWFwLWVudHJ5IjpjYXNlImNvbmZpZy1pdGVtLW1hcC1uYW1lZCI6Y2FzZSJzaGFwZXMiOmNhc2UiZnJhbWUiOmNhc2UidGV4dC1ib3giOmNhc2UiaW1hZ2UiOmNhc2UiZGF0YS1waWxvdC10YWJsZXMiOmNh''@;'; put 'put ''c2UibGlzdC1zdHlsZSI6Y2FzZSJmb3JtIjpjYXNlImRkZS1saW5rcyI6Y2FzZSJldmVudC1saXN0ZW5lcnMiOmNhc2UiY2hhcnQiOmlmKCIvIj09PU90WzFdKXtpZigoUGU9eWUucG9wKCkpWzBdIT09T3RbM10pdGhyb3ciQmFkIHN0YXRlOiAiK1BlfWVsc2UiLyIhPT1PdFswXS5jaGFyQXQo''@;'; put 'put ''T3RbMF0ubGVuZ3RoLTIpJiZ5ZS5wdXNoKFtPdFszXSwhMV0pO3JyPSIiLFNuPTAsWG49W107YnJlYWs7Y2FzZSJzY2llbnRpZmljLW51bWJlciI6Y2FzZSJjdXJyZW5jeS1zeW1ib2wiOmNhc2UiY3VycmVuY3ktc3R5bGUiOmNhc2Uic2NyaXB0IjpjYXNlImxpYnJhcmllcyI6Y2FzZSJhdXRv''@;'; put 'put ''bWF0aWMtc3R5bGVzIjpjYXNlImRlZmF1bHQtc3R5bGUiOmNhc2UicGFnZS1sYXlvdXQiOmNhc2UibWFwIjpjYXNlImZvbnQtZmFjZSI6Y2FzZSJwYXJhZ3JhcGgtcHJvcGVydGllcyI6Y2FzZSJ0YWJsZS1wcm9wZXJ0aWVzIjpjYXNlInRhYmxlLWNvbHVtbi1wcm9wZXJ0aWVzIjpjYXNlInRh''@;'; put 'put ''YmxlLXJvdy1wcm9wZXJ0aWVzIjpjYXNlInRhYmxlLWNlbGwtcHJvcGVydGllcyI6Y2FzZSJmcmFjdGlvbiI6Y2FzZSJib29sZWFuLXN0eWxlIjpjYXNlImJvb2xlYW4iOmNhc2UidGV4dC1zdHlsZSI6Y2FzZSJ0ZXh0LWNvbnRlbnQiOmNhc2UidGV4dC1wcm9wZXJ0aWVzIjpjYXNlImVtYmVk''@;'; put 'put ''ZGVkLXRleHQiOmNhc2UiYm9keSI6Y2FzZSJcdTc1MzVcdTViNTBcdTg4NjhcdTY4M2MiOmNhc2UiZm9ybXMiOmNhc2UidGFibGUtY29sdW1uIjpjYXNlInRhYmxlLWhlYWRlci1yb3dzIjpjYXNlInRhYmxlLXJvd3MiOmNhc2UidGFibGUtY29sdW1uLWdyb3VwIjpjYXNlInRhYmxlLWhlYWRl''@;'; put 'put ''ci1jb2x1bW5zIjpjYXNlInRhYmxlLWNvbHVtbnMiOmNhc2UibnVsbC1kYXRlIjpjYXNlImdyYXBoaWMtcHJvcGVydGllcyI6Y2FzZSJjYWxjdWxhdGlvbi1zZXR0aW5ncyI6Y2FzZSJuYW1lZC1leHByZXNzaW9ucyI6Y2FzZSJsYWJlbC1yYW5nZSI6Y2FzZSJsYWJlbC1yYW5nZXMiOmNhc2Ui''@;'; put 'put ''bmFtZWQtZXhwcmVzc2lvbiI6Y2FzZSJzb3J0IjpjYXNlInNvcnQtYnkiOmNhc2Uic29ydC1ncm91cHMiOmNhc2UidGFiIjpjYXNlImxpbmUtYnJlYWsiOmNhc2Uic3BhbiI6Y2FzZSJzIjpjYXNlImRhdGUiOmNhc2Uib2JqZWN0IjpjYXNlInRpdGxlIjpjYXNlIlx1NjgwN1x1OTg5OCI6Y2Fz''@;'; put 'put ''ZSJkZXNjIjpjYXNlImJpbmFyeS1kYXRhIjpjYXNlInRhYmxlLXNvdXJjZSI6Y2FzZSJzY2VuYXJpbyI6Y2FzZSJpdGVyYXRpb24iOmNhc2UiY29udGVudC12YWxpZGF0aW9ucyI6Y2FzZSJjb250ZW50LXZhbGlkYXRpb24iOmNhc2UiaGVscC1tZXNzYWdlIjpjYXNlImVycm9yLW1lc3NhZ2Ui''@;'; put 'put ''OmNhc2UiZGF0YWJhc2UtcmFuZ2VzIjpjYXNlImZpbHRlciI6Y2FzZSJmaWx0ZXItYW5kIjpjYXNlImZpbHRlci1vciI6Y2FzZSJmaWx0ZXItY29uZGl0aW9uIjpjYXNlImxpc3QtbGV2ZWwtc3R5bGUtYnVsbGV0IjpjYXNlImxpc3QtbGV2ZWwtc3R5bGUtbnVtYmVyIjpjYXNlImxpc3QtbGV2''@;'; put 'put ''ZWwtcHJvcGVydGllcyI6Y2FzZSJzZW5kZXItZmlyc3RuYW1lIjpjYXNlInNlbmRlci1sYXN0bmFtZSI6Y2FzZSJzZW5kZXItaW5pdGlhbHMiOmNhc2Uic2VuZGVyLXRpdGxlIjpjYXNlInNlbmRlci1wb3NpdGlvbiI6Y2FzZSJzZW5kZXItZW1haWwiOmNhc2Uic2VuZGVyLXBob25lLXByaXZh''@;'; put 'put ''dGUiOmNhc2Uic2VuZGVyLWZheCI6Y2FzZSJzZW5kZXItY29tcGFueSI6Y2FzZSJzZW5kZXItcGhvbmUtd29yayI6Y2FzZSJzZW5kZXItc3RyZWV0IjpjYXNlInNlbmRlci1jaXR5IjpjYXNlInNlbmRlci1wb3N0YWwtY29kZSI6Y2FzZSJzZW5kZXItY291bnRyeSI6Y2FzZSJzZW5kZXItc3Rh''@;'; put 'put ''dGUtb3ItcHJvdmluY2UiOmNhc2UiYXV0aG9yLW5hbWUiOmNhc2UiYXV0aG9yLWluaXRpYWxzIjpjYXNlImNoYXB0ZXIiOmNhc2UiZmlsZS1uYW1lIjpjYXNlInRlbXBsYXRlLW5hbWUiOmNhc2Uic2hlZXQtbmFtZSI6Y2FzZSJldmVudC1saXN0ZW5lciI6Y2FzZSJpbml0aWFsLWNyZWF0b3Ii''@;'; put 'put ''OmNhc2UiY3JlYXRpb24tZGF0ZSI6Y2FzZSJwcmludC1kYXRlIjpjYXNlImdlbmVyYXRvciI6Y2FzZSJkb2N1bWVudC1zdGF0aXN0aWMiOmNhc2UidXNlci1kZWZpbmVkIjpjYXNlImVkaXRpbmctZHVyYXRpb24iOmNhc2UiZWRpdGluZy1jeWNsZXMiOmNhc2UiY29uZmlnLWl0ZW0iOmNhc2Ui''@;'; put 'put ''cGFnZS1udW1iZXIiOmNhc2UicGFnZS1jb3VudCI6Y2FzZSJ0aW1lIjpjYXNlImNlbGwtcmFuZ2Utc291cmNlIjpjYXNlImRldGVjdGl2ZSI6Y2FzZSJvcGVyYXRpb24iOmNhc2UiaGlnaGxpZ2h0ZWQtcmFuZ2UiOmNhc2UiZGF0YS1waWxvdC10YWJsZSI6Y2FzZSJzb3VyY2UtY2VsbC1yYW5n''@;'; put 'put ''ZSI6Y2FzZSJzb3VyY2Utc2VydmljZSI6Y2FzZSJkYXRhLXBpbG90LWZpZWxkIjpjYXNlImRhdGEtcGlsb3QtbGV2ZWwiOmNhc2UiZGF0YS1waWxvdC1zdWJ0b3RhbHMiOmNhc2UiZGF0YS1waWxvdC1zdWJ0b3RhbCI6Y2FzZSJkYXRhLXBpbG90LW1lbWJlcnMiOmNhc2UiZGF0YS1waWxvdC1t''@;'; put 'put ''ZW1iZXIiOmNhc2UiZGF0YS1waWxvdC1kaXNwbGF5LWluZm8iOmNhc2UiZGF0YS1waWxvdC1zb3J0LWluZm8iOmNhc2UiZGF0YS1waWxvdC1sYXlvdXQtaW5mbyI6Y2FzZSJkYXRhLXBpbG90LWZpZWxkLXJlZmVyZW5jZSI6Y2FzZSJkYXRhLXBpbG90LWdyb3VwcyI6Y2FzZSJkYXRhLXBpbG90''@;'; put 'put ''LWdyb3VwIjpjYXNlImRhdGEtcGlsb3QtZ3JvdXAtbWVtYmVyIjpjYXNlInJlY3QiOmNhc2UiZGRlLWNvbm5lY3Rpb24tZGVjbHMiOmNhc2UiZGRlLWNvbm5lY3Rpb24tZGVjbCI6Y2FzZSJkZGUtbGluayI6Y2FzZSJkZGUtc291cmNlIjpjYXNlInByb3BlcnRpZXMiOmNhc2UicHJvcGVydHki''@;'; put 'put ''OmNhc2UidGFibGUtcHJvdGVjdGlvbiI6Y2FzZSJkYXRhLXBpbG90LWdyYW5kLXRvdGFsIjpjYXNlIm9mZmljZS1kb2N1bWVudC1jb21tb24tYXR0cnMiOmJyZWFrO2Nhc2UibnVtYmVyLXN0eWxlIjpjYXNlInBlcmNlbnRhZ2Utc3R5bGUiOmNhc2UiZGF0ZS1zdHlsZSI6Y2FzZSJ0aW1lLXN0''@;'; put 'put ''eWxlIjppZigiLyI9PT1PdFsxXSl7aWYoTWlbWWUubmFtZV09ZXQsKFBlPXllLnBvcCgpKVswXSE9PU90WzNdKXRocm93IkJhZCBzdGF0ZTogIitQZX1lbHNlIi8iIT09T3RbMF0uY2hhckF0KE90WzBdLmxlbmd0aC0yKSYmKGV0PSIiLFllPXZyKE90WzBdLCExKSx5ZS5wdXNoKFtPdFszXSwh''@;'; put 'put ''MF0pKTticmVhaztjYXNlInN0eWxlIjoiLz4iPT09T3RbMF0uc2xpY2UoLTIpP2soT3RbMF0sc28pOiIvIj09T3RbMV0/ayhwZS5zbGljZShpYSxPdC5pbmRleCtPdFswXS5sZW5ndGgpLHNvKTppYT1PdC5pbmRleDticmVhaztjYXNlIm51bWJlciI6Y2FzZSJkYXkiOmNhc2UibW9udGgiOmNh''@;'; put 'put ''c2UieWVhciI6Y2FzZSJlcmEiOmNhc2UiZGF5LW9mLXdlZWsiOmNhc2Uid2Vlay1vZi15ZWFyIjpjYXNlInF1YXJ0ZXIiOmNhc2UiaG91cnMiOmNhc2UibWludXRlcyI6Y2FzZSJzZWNvbmRzIjpjYXNlImFtLXBtIjpzd2l0Y2goeWVbeWUubGVuZ3RoLTFdWzBdKXtjYXNlInRpbWUtc3R5bGUi''@;'; put 'put ''OmNhc2UiZGF0ZS1zdHlsZSI6TmU9dnIoT3RbMF0sITEpLGV0Kz1SW090WzNdXVsibG9uZyI9PT1OZS5zdHlsZT8xOjBdfWJyZWFrO2Nhc2UidGV4dCI6aWYoIi8+Ij09PU90WzBdLnNsaWNlKC0yKSlicmVhaztpZigiLyI9PT1PdFsxXSlzd2l0Y2goeWVbeWUubGVuZ3RoLTFdWzBdKXtjYXNl''@;'; put 'put ''Im51bWJlci1zdHlsZSI6Y2FzZSJkYXRlLXN0eWxlIjpjYXNlInRpbWUtc3R5bGUiOmV0Kz1wZS5zbGljZShjdCxPdC5pbmRleCl9ZWxzZSBjdD1PdC5pbmRleCtPdFswXS5sZW5ndGg7YnJlYWs7Y2FzZSJuYW1lZC1yYW5nZSI6Wmk9b2IoKE5lPXZyKE90WzBdLCExKSlbImNlbGwtcmFuZ2Ut''@;'; put 'put ''YWRkcmVzcyJdKTt2YXIgV289e05hbWU6TmUubmFtZSxSZWY6WmlbMF0rIiEiK1ppWzFdfTtKYSYmKFdvLlNoZWV0PWp0Lmxlbmd0aCksRm4uTmFtZXMucHVzaChXbyk7YnJlYWs7Y2FzZSJwIjpjYXNlIlx1NjU4N1x1NjcyY1x1NGUzMiI6aWYoWyJtYXN0ZXItc3R5bGVzIl0uaW5kZXhPZih5''@;'; put 'put ''ZVt5ZS5sZW5ndGgtMV1bMF0pPi0xKWJyZWFrO2lmKCIvIiE9PU90WzFdfHxUbiYmVG5bInN0cmluZy12YWx1ZSJdKXZyKE90WzBdLCExKSxTbj1PdC5pbmRleCtPdFswXS5sZW5ndGg7ZWxzZXt2YXIgaHI9UyhwZS5zbGljZShTbixPdC5pbmRleCksMCxzbyk7cnI9KHJyLmxlbmd0aD4wP3Jy''@;'; put 'put ''KyJcbiI6IiIpK2hyWzBdLFhuPWhyWzFdfWJyZWFrO2Nhc2UiZGF0YWJhc2UtcmFuZ2UiOmlmKCIvIj09PU90WzFdKWJyZWFrO3RyeXtidFsoWmk9b2IodnIoT3RbMF0pWyJ0YXJnZXQtcmFuZ2UtYWRkcmVzcyJdKSlbMF1dWyIhYXV0b2ZpbHRlciJdPXtyZWY6WmlbMV19fWNhdGNoe31icmVh''@;'; put 'put ''aztjYXNlImEiOmlmKCIvIiE9PU90WzFdKXtpZighKGpyPXZyKE90WzBdLCExKSkuaHJlZilicmVhaztqci5UYXJnZXQ9UXIoanIuaHJlZiksZGVsZXRlIGpyLmhyZWYsIiMiPT1qci5UYXJnZXQuY2hhckF0KDApJiZqci5UYXJnZXQuaW5kZXhPZigiLiIpPi0xPyhaaT1vYihqci5UYXJnZXQu''@;'; put 'put ''c2xpY2UoMSkpLGpyLlRhcmdldD0iIyIrWmlbMF0rIiEiK1ppWzFdKTpqci5UYXJnZXQubWF0Y2goL15cLlwuW1xcXC9dLykmJihqci5UYXJnZXQ9anIuVGFyZ2V0LnNsaWNlKDMpKX1icmVhaztkZWZhdWx0OnN3aXRjaChPdFsyXSl7Y2FzZSJkYzoiOmNhc2UiY2FsY2V4dDoiOmNhc2UibG9l''@;'; put 'put ''eHQ6IjpjYXNlIm9vbzoiOmNhc2UiY2hhcnRvb286IjpjYXNlImRyYXc6IjpjYXNlInN0eWxlOiI6Y2FzZSJjaGFydDoiOmNhc2UiZm9ybToiOmNhc2UidW9mOiI6Y2FzZSJcdTg4Njg6IjpjYXNlIlx1NWI1NzoiOmJyZWFrO2RlZmF1bHQ6aWYoZ2UuV1RGKXRocm93IG5ldyBFcnJvcihPdCl9''@;'; put 'put ''fXZhciBRbD17U2hlZXRzOmJ0LFNoZWV0TmFtZXM6anQsV29ya2Jvb2s6Rm59O3JldHVybiBnZS5ib29rU2hlZXRzJiZkZWxldGUgUWwuU2hlZXRzLFFsfX0oKTtmdW5jdGlvbiBJSShTLFIpe3JldHVybiBYUyhTLFIpfXZhciBVej1mdW5jdGlvbigpe3ZhciBTPVsiICA8b2ZmaWNlOm1hc3Rl''@;'; put 'put ''ci1zdHlsZXM+IiwnICAgIDxzdHlsZTptYXN0ZXItcGFnZSBzdHlsZTpuYW1lPSJtcDEiIHN0eWxlOnBhZ2UtbGF5b3V0LW5hbWU9Im1wMSI+JywiICAgICAgPHN0eWxlOmhlYWRlci8+IiwnICAgICAgPHN0eWxlOmhlYWRlci1sZWZ0IHN0eWxlOmRpc3BsYXk9ImZhbHNlIi8+JywiICAgICAg''@;'; put 'put ''PHN0eWxlOmZvb3Rlci8+IiwnICAgICAgPHN0eWxlOmZvb3Rlci1sZWZ0IHN0eWxlOmRpc3BsYXk9ImZhbHNlIi8+JywiICAgIDwvc3R5bGU6bWFzdGVyLXBhZ2U+IiwiICA8L29mZmljZTptYXN0ZXItc3R5bGVzPiJdLmpvaW4oIlxuIiksUj0iPG9mZmljZTpkb2N1bWVudC1zdHlsZXMgIitM''@;'; put 'put ''dSh7InhtbG5zOm9mZmljZSI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6b2ZmaWNlOjEuMCIsInhtbG5zOnRhYmxlIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczp0YWJsZToxLjAiLCJ4bWxuczpzdHlsZSI6InVybjpvYXNpczpuYW1lczp0''@;'; put 'put ''YzpvcGVuZG9jdW1lbnQ6eG1sbnM6c3R5bGU6MS4wIiwieG1sbnM6dGV4dCI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6dGV4dDoxLjAiLCJ4bWxuczpkcmF3IjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpkcmF3aW5nOjEuMCIsInhtbG5z''@;'; put 'put ''OmZvIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczp4c2wtZm8tY29tcGF0aWJsZToxLjAiLCJ4bWxuczp4bGluayI6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLCJ4bWxuczpkYyI6Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiwieG1sbnM6''@;'; put 'put ''bnVtYmVyIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpkYXRhc3R5bGU6MS4wIiwieG1sbnM6c3ZnIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpzdmctY29tcGF0aWJsZToxLjAiLCJ4bWxuczpvZiI6InVybjpvYXNpczpuYW1lczp0Yzpv''@;'; put 'put ''cGVuZG9jdW1lbnQ6eG1sbnM6b2Y6MS4yIiwib2ZmaWNlOnZlcnNpb24iOiIxLjIifSkrIj5cbiIrUysiXG48L29mZmljZTpkb2N1bWVudC1zdHlsZXM+IjtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gSWkrUn19KCksUDg9ZnVuY3Rpb24oKXt2YXIgUz1mdW5jdGlvbihwZSx5ZSl7cmV0dXJu''@;'; put 'put ''IExyKHBlKS5yZXBsYWNlKC8gICsvZyxmdW5jdGlvbihQZSl7cmV0dXJuJzx0ZXh0OnMgdGV4dDpjPSInK1BlLmxlbmd0aCsnIi8+J30pLnJlcGxhY2UoL1x0L2csIjx0ZXh0OnRhYi8+IikucmVwbGFjZSgvXG4vZyx5ZT8iPHRleHQ6bGluZS1icmVhay8+IjoiPC90ZXh0OnA+PHRleHQ6cD4i''@;'; put 'put ''KS5yZXBsYWNlKC9eIC8sIjx0ZXh0OnMvPiIpLnJlcGxhY2UoLyAkLywiPHRleHQ6cy8+Iil9LFI9ZnVuY3Rpb24ocGUpe3JldHVybiBwZS5tYXAoZnVuY3Rpb24oeWUpe3ZhciBQZT0iIjtyZXR1cm4gbnVsbCE9eWUub2RzJiYoUGUrPScgdGV4dDpzdHlsZS1uYW1lPSJUJyt5ZS5vZHMrJyIn''@;'; put 'put ''KSx5ZS52PyI8dGV4dDpzcGFuIitQZSsiPiIrUyh5ZS52LCEwKSsiPC90ZXh0OnNwYW4+IjoiIn0pLmpvaW4oIiIpfSxrPSIgICAgICAgICAgPHRhYmxlOnRhYmxlLWNlbGwgLz5cbiIsUT1mdW5jdGlvbihwZSx5ZSxQZSl7dmFyIE5lPVtdO05lLnB1c2goJyAgICAgIDx0YWJsZTp0YWJsZSB0''@;'; put 'put ''YWJsZTpuYW1lPSInK0xyKHllLlNoZWV0TmFtZXNbUGVdKSsnIiB0YWJsZTpzdHlsZS1uYW1lPSJ0YTEiPlxuJyk7dmFyIFllPTAsZXQ9MCxjdD1NcyhwZVsiIXJlZiJdfHwiQTEiKSxFdD1wZVsiIW1lcmdlcyJdfHxbXSxhdD0wLGJ0PUFycmF5LmlzQXJyYXkocGUpO2lmKHBlWyIhY29scyJd''@;'; put 'put ''KWZvcihldD0wO2V0PD1jdC5lLmM7KytldClOZS5wdXNoKCIgICAgICAgIDx0YWJsZTp0YWJsZS1jb2x1bW4iKyhwZVsiIWNvbHMiXVtldF0/JyB0YWJsZTpzdHlsZS1uYW1lPSJjbycrcGVbIiFjb2xzIl1bZXRdLm9kcysnIic6IiIpKyI+PC90YWJsZTp0YWJsZS1jb2x1bW4+XG4iKTt2YXIg''@;'; put 'put ''a3Q9cGVbIiFyb3dzIl18fFtdO2ZvcihZZT0wO1llPGN0LnMucjsrK1llKU5lLnB1c2goIiAgICAgICAgPHRhYmxlOnRhYmxlLXJvdyIrKGt0W1llXT8nIHRhYmxlOnN0eWxlLW5hbWU9InJvJytrdFtZZV0ub2RzKyciJzoiIikrIj48L3RhYmxlOnRhYmxlLXJvdz5cbiIpO2Zvcig7WWU8PWN0''@;'; put 'put ''LmUucjsrK1llKXtmb3IoTmUucHVzaCgiICAgICAgICA8dGFibGU6dGFibGUtcm93Iisoa3RbWWVdPycgdGFibGU6c3R5bGUtbmFtZT0icm8nK2t0W1llXS5vZHMrJyInOiIiKSsiPlxuIiksZXQ9MDtldDxjdC5zLmM7KytldClOZS5wdXNoKGspO2Zvcig7ZXQ8PWN0LmUuYzsrK2V0KXt2YXIg''@;'; put 'put ''T3Q9ITEsS3Q9e30sVG49IiI7Zm9yKGF0PTA7YXQhPUV0Lmxlbmd0aDsrK2F0KWlmKCEoRXRbYXRdLnMuYz5ldHx8RXRbYXRdLnMucj5ZZXx8RXRbYXRdLmUuYzxldHx8RXRbYXRdLmUucjxZZSkpeyhFdFthdF0ucy5jIT1ldHx8RXRbYXRdLnMuciE9WWUpJiYoT3Q9ITApLEt0WyJ0YWJsZTpu''@;'; put 'put ''dW1iZXItY29sdW1ucy1zcGFubmVkIl09RXRbYXRdLmUuYy1FdFthdF0ucy5jKzEsS3RbInRhYmxlOm51bWJlci1yb3dzLXNwYW5uZWQiXT1FdFthdF0uZS5yLUV0W2F0XS5zLnIrMTticmVha31pZihPdClOZS5wdXNoKCIgICAgICAgICAgPHRhYmxlOmNvdmVyZWQtdGFibGUtY2VsbC8+XG4i''@;'; put 'put ''KTtlbHNle3ZhciBycj1xaSh7cjpZZSxjOmV0fSksU249YnQ/KHBlW1llXXx8W10pW2V0XTpwZVtycl07aWYoU24mJlNuLmYmJihLdFsidGFibGU6Zm9ybXVsYSJdPUxyKFo0KFNuLmYpKSxTbi5GJiZTbi5GLnNsaWNlKDAscnIubGVuZ3RoKT09cnIpKXt2YXIgbHI9TXMoU24uRik7S3RbInRh''@;'; put 'put ''YmxlOm51bWJlci1tYXRyaXgtY29sdW1ucy1zcGFubmVkIl09bHIuZS5jLWxyLnMuYysxLEt0WyJ0YWJsZTpudW1iZXItbWF0cml4LXJvd3Mtc3Bhbm5lZCJdPWxyLmUuci1sci5zLnIrMX1pZihTbil7c3dpdGNoKFNuLnQpe2Nhc2UiYiI6VG49U24udj8iVFJVRSI6IkZBTFNFIixLdFsib2Zm''@;'; put 'put ''aWNlOnZhbHVlLXR5cGUiXT0iYm9vbGVhbiIsS3RbIm9mZmljZTpib29sZWFuLXZhbHVlIl09U24udj8idHJ1ZSI6ImZhbHNlIjticmVhaztjYXNlIm4iOlRuPVNuLnd8fFN0cmluZyhTbi52fHwwKSxLdFsib2ZmaWNlOnZhbHVlLXR5cGUiXT0iZmxvYXQiLEt0WyJvZmZpY2U6dmFsdWUiXT1T''@;'; put 'put ''bi52fHwwO2JyZWFrO2Nhc2UicyI6Y2FzZSJzdHIiOlRuPVNuLnYsS3RbIm9mZmljZTp2YWx1ZS10eXBlIl09InN0cmluZyI7YnJlYWs7Y2FzZSJkIjpUbj1Tbi53fHxIZShTbi52KS50b0lTT1N0cmluZygpLEt0WyJvZmZpY2U6dmFsdWUtdHlwZSJdPSJkYXRlIixLdFsib2ZmaWNlOmRhdGUt''@;'; put 'put ''dmFsdWUiXT1IZShTbi52KS50b0lTT1N0cmluZygpLEt0WyJ0YWJsZTpzdHlsZS1uYW1lIl09ImNlMSI7YnJlYWs7ZGVmYXVsdDpOZS5wdXNoKGspO2NvbnRpbnVlfW51bGwhPVNuLm9kcyYmIUt0WyJ0YWJsZTpzdHlsZS1uYW1lIl0mJihLdFsidGFibGU6c3R5bGUtbmFtZSJdPSJjZSIrU24u''@;'; put 'put ''b2RzKTt2YXIgWG49IVNuLlJ8fFNuLmwmJlNuLmwuVGFyZ2V0P1MoVG4pOlIoU24uUik7aWYoU24ubCYmU24ubC5UYXJnZXQpe3ZhciBCbj1Tbi5sLlRhcmdldDsiIyIhPShCbj0iIyI9PUJuLmNoYXJBdCgwKT8iIyIrZ0QoQm4uc2xpY2UoMSkpOkJuKS5jaGFyQXQoMCkmJiFCbi5tYXRjaCgv''@;'; put 'put ''Xlx3KzovKSYmKEJuPSIuLi8iK0JuKSxYbj1QcigidGV4dDphIixYbix7InhsaW5rOmhyZWYiOkJuLnJlcGxhY2UoLyYvZywiJmFtcDsiKX0pfU5lLnB1c2goIiAgICAgICAgICAiK1ByKCJ0YWJsZTp0YWJsZS1jZWxsIixQcigidGV4dDpwIixYbix7fSksS3QpKyJcbiIpfWVsc2UgTmUucHVz''@;'; put 'put ''aChrKX19TmUucHVzaCgiICAgICAgICA8L3RhYmxlOnRhYmxlLXJvdz5cbiIpfXJldHVybiBOZS5wdXNoKCIgICAgICA8L3RhYmxlOnRhYmxlPlxuIiksTmUuam9pbigiIil9LG9lPXtjZW50ZXI6ImNlbnRlciIsbGVmdDoic3RhcnQiLHJpZ2h0OiJlbmQifTtyZXR1cm4gZnVuY3Rpb24oeWUs''@;'; put 'put ''UGUpe3ZhciBOZT1bSWldLFllPUx1KHsieG1sbnM6b2ZmaWNlIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpvZmZpY2U6MS4wIiwieG1sbnM6dGFibGUiOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOnRhYmxlOjEuMCIsInhtbG5zOnN0eWxl''@;'; put 'put ''IjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpzdHlsZToxLjAiLCJ4bWxuczp0ZXh0IjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczp0ZXh0OjEuMCIsInhtbG5zOmRyYXciOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5z''@;'; put 'put ''OmRyYXdpbmc6MS4wIiwieG1sbnM6Zm8iOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOnhzbC1mby1jb21wYXRpYmxlOjEuMCIsInhtbG5zOnhsaW5rIjoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIsInhtbG5zOmRjIjoiaHR0cDovL3B1cmwub3JnL2RjL2Vs''@;'; put 'put ''ZW1lbnRzLzEuMS8iLCJ4bWxuczptZXRhIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczptZXRhOjEuMCIsInhtbG5zOm51bWJlciI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6ZGF0YXN0eWxlOjEuMCIsInhtbG5zOnByZXNlbnRhdGlvbiI6''@;'; put 'put ''InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6cHJlc2VudGF0aW9uOjEuMCIsInhtbG5zOnN2ZyI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6c3ZnLWNvbXBhdGlibGU6MS4wIiwieG1sbnM6Y2hhcnQiOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3Bl''@;'; put 'put ''bmRvY3VtZW50OnhtbG5zOmNoYXJ0OjEuMCIsInhtbG5zOmRyM2QiOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOmRyM2Q6MS4wIiwieG1sbnM6bWF0aCI6Imh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUwiLCJ4bWxuczpmb3JtIjoidXJuOm9hc2lzOm5h''@;'; put 'put ''bWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpmb3JtOjEuMCIsInhtbG5zOnNjcmlwdCI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6c2NyaXB0OjEuMCIsInhtbG5zOm9vbyI6Imh0dHA6Ly9vcGVub2ZmaWNlLm9yZy8yMDA0L29mZmljZSIsInhtbG5zOm9vb3ciOiJo''@;'; put 'put ''dHRwOi8vb3Blbm9mZmljZS5vcmcvMjAwNC93cml0ZXIiLCJ4bWxuczpvb29jIjoiaHR0cDovL29wZW5vZmZpY2Uub3JnLzIwMDQvY2FsYyIsInhtbG5zOmRvbSI6Imh0dHA6Ly93d3cudzMub3JnLzIwMDEveG1sLWV2ZW50cyIsInhtbG5zOnhmb3JtcyI6Imh0dHA6Ly93d3cudzMub3JnLzIw''@;'; put 'put ''MDIveGZvcm1zIiwieG1sbnM6eHNkIjoiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiLCJ4bWxuczp4c2kiOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIsInhtbG5zOnNoZWV0IjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDpzaDMz''@;'; put 'put ''dGpzOjEuMCIsInhtbG5zOnJwdCI6Imh0dHA6Ly9vcGVub2ZmaWNlLm9yZy8yMDA1L3JlcG9ydCIsInhtbG5zOm9mIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpvZjoxLjIiLCJ4bWxuczp4aHRtbCI6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLCJ4bWxu''@;'; put 'put ''czpncmRkbCI6Imh0dHA6Ly93d3cudzMub3JnLzIwMDMvZy9kYXRhLXZpZXcjIiwieG1sbnM6dGFibGVvb28iOiJodHRwOi8vb3Blbm9mZmljZS5vcmcvMjAwOS90YWJsZSIsInhtbG5zOmRyYXdvb28iOiJodHRwOi8vb3Blbm9mZmljZS5vcmcvMjAxMC9kcmF3IiwieG1sbnM6Y2FsY2V4dCI6''@;'; put 'put ''InVybjpvcmc6ZG9jdW1lbnRmb3VuZGF0aW9uOm5hbWVzOmV4cGVyaW1lbnRhbDpjYWxjOnhtbG5zOmNhbGNleHQ6MS4wIiwieG1sbnM6bG9leHQiOiJ1cm46b3JnOmRvY3VtZW50Zm91bmRhdGlvbjpuYW1lczpleHBlcmltZW50YWw6b2ZmaWNlOnhtbG5zOmxvZXh0OjEuMCIsInhtbG5zOmZp''@;'; put 'put ''ZWxkIjoidXJuOm9wZW5vZmZpY2U6bmFtZXM6ZXhwZXJpbWVudGFsOm9vby1tcy1pbnRlcm9wOnhtbG5zOmZpZWxkOjEuMCIsInhtbG5zOmZvcm14IjoidXJuOm9wZW5vZmZpY2U6bmFtZXM6ZXhwZXJpbWVudGFsOm9veG1sLW9kZi1pbnRlcm9wOnhtbG5zOmZvcm06MS4wIiwieG1sbnM6Y3Nz''@;'; put 'put ''M3QiOiJodHRwOi8vd3d3LnczLm9yZy9UUi9jc3MzLXRleHQvIiwib2ZmaWNlOnZlcnNpb24iOiIxLjIifSksZXQ9THUoeyJ4bWxuczpjb25maWciOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOmNvbmZpZzoxLjAiLCJvZmZpY2U6bWltZXR5cGUiOiJhcHBsaWNhdGlv''@;'; put 'put ''bi92bmQub2FzaXMub3BlbmRvY3VtZW50LnNwcmVhZHNoZWV0In0pOyJmb2RzIj09UGUuYm9va1R5cGU/KE5lLnB1c2goIjxvZmZpY2U6ZG9jdW1lbnQiK1llK2V0KyI+XG4iKSxOZS5wdXNoKFI2KCkucmVwbGFjZSgvb2ZmaWNlOmRvY3VtZW50LW1ldGEvZywib2ZmaWNlOm1ldGEiKSkpOk5l''@;'; put 'put ''LnB1c2goIjxvZmZpY2U6ZG9jdW1lbnQtY29udGVudCIrWWUrIj5cbiIpLGZ1bmN0aW9uKHBlLHllKXt2YXIgUGU9W10sTmU9e307UGUucHVzaCgiIDxvZmZpY2U6YXV0b21hdGljLXN0eWxlcz5cbiIpLFBlLnB1c2goJyAgPG51bWJlcjpkYXRlLXN0eWxlIHN0eWxlOm5hbWU9Ik4zNyIgbnVt''@;'; put 'put ''YmVyOmF1dG9tYXRpYy1vcmRlcj0idHJ1ZSI+XG4nKSxQZS5wdXNoKCcgICA8bnVtYmVyOm1vbnRoIG51bWJlcjpzdHlsZT0ibG9uZyIvPlxuJyksUGUucHVzaCgiICAgPG51bWJlcjp0ZXh0Pi88L251bWJlcjp0ZXh0PlxuIiksUGUucHVzaCgnICAgPG51bWJlcjpkYXkgbnVtYmVyOnN0eWxl''@;'; put 'put ''PSJsb25nIi8+XG4nKSxQZS5wdXNoKCIgICA8bnVtYmVyOnRleHQ+LzwvbnVtYmVyOnRleHQ+XG4iKSxQZS5wdXNoKCIgICA8bnVtYmVyOnllYXIvPlxuIiksUGUucHVzaCgiICA8L251bWJlcjpkYXRlLXN0eWxlPlxuIik7dmFyIFllPTA7eWUuU2hlZXROYW1lcy5tYXAoZnVuY3Rpb24oYXQp''@;'; put 'put ''e3JldHVybiB5ZS5TaGVldHNbYXRdfSkuZm9yRWFjaChmdW5jdGlvbihhdCl7aWYoYXQmJmF0WyIhY29scyJdKWZvcih2YXIgYnQ9MDtidDxhdFsiIWNvbHMiXS5sZW5ndGg7KytidClpZihhdFsiIWNvbHMiXVtidF0pe3ZhciBqdD1hdFsiIWNvbHMiXVtidF07aWYobnVsbD09anQud2lkdGgm''@;'; put 'put ''Jm51bGw9PWp0LndweCYmbnVsbD09anQud2NoKWNvbnRpbnVlO1EwKGp0KSxqdC5vZHM9WWU7dmFyIGt0PWF0WyIhY29scyJdW2J0XS53cHgrInB4IjtQZS5wdXNoKCcgIDxzdHlsZTpzdHlsZSBzdHlsZTpuYW1lPSJjbycrWWUrJyIgc3R5bGU6ZmFtaWx5PSJ0YWJsZS1jb2x1bW4iPlxuJyks''@;'; put 'put ''UGUucHVzaCgnICAgPHN0eWxlOnRhYmxlLWNvbHVtbi1wcm9wZXJ0aWVzIGZvOmJyZWFrLWJlZm9yZT0iYXV0byIgc3R5bGU6Y29sdW1uLXdpZHRoPSInK2t0KyciLz5cbicpLFBlLnB1c2goIiAgPC9zdHlsZTpzdHlsZT5cbiIpLCsrWWV9fSk7dmFyIGV0PTA7eWUuU2hlZXROYW1lcy5tYXAo''@;'; put 'put ''ZnVuY3Rpb24oYXQpe3JldHVybiB5ZS5TaGVldHNbYXRdfSkuZm9yRWFjaChmdW5jdGlvbihhdCl7aWYoYXQmJmF0WyIhcm93cyJdKWZvcih2YXIgYnQ9MDtidDxhdFsiIXJvd3MiXS5sZW5ndGg7KytidClpZihhdFsiIXJvd3MiXVtidF0pe2F0WyIhcm93cyJdW2J0XS5vZHM9ZXQ7dmFyIGp0''@;'; put 'put ''PWF0WyIhcm93cyJdW2J0XS5ocHgrInB4IjtQZS5wdXNoKCcgIDxzdHlsZTpzdHlsZSBzdHlsZTpuYW1lPSJybycrZXQrJyIgc3R5bGU6ZmFtaWx5PSJ0YWJsZS1yb3ciPlxuJyksUGUucHVzaCgnICAgPHN0eWxlOnRhYmxlLXJvdy1wcm9wZXJ0aWVzIGZvOmJyZWFrLWJlZm9yZT0iYXV0byIg''@;'; put 'put ''c3R5bGU6cm93LWhlaWdodD0iJytqdCsnIi8+XG4nKSxQZS5wdXNoKCIgIDwvc3R5bGU6c3R5bGU+XG4iKSwrK2V0fX0pLFBlLnB1c2goJyAgPHN0eWxlOnN0eWxlIHN0eWxlOm5hbWU9InRhMSIgc3R5bGU6ZmFtaWx5PSJ0YWJsZSIgc3R5bGU6bWFzdGVyLXBhZ2UtbmFtZT0ibXAxIj5cbicp''@;'; put 'put ''LFBlLnB1c2goJyAgIDxzdHlsZTp0YWJsZS1wcm9wZXJ0aWVzIHRhYmxlOmRpc3BsYXk9InRydWUiIHN0eWxlOndyaXRpbmctbW9kZT0ibHItdGIiLz5cbicpLFBlLnB1c2goIiAgPC9zdHlsZTpzdHlsZT5cbiIpLFBlLnB1c2goJyAgPHN0eWxlOnN0eWxlIHN0eWxlOm5hbWU9ImNlMSIgc3R5''@;'; put 'put ''bGU6ZmFtaWx5PSJ0YWJsZS1jZWxsIiBzdHlsZTpwYXJlbnQtc3R5bGUtbmFtZT0iRGVmYXVsdCIgc3R5bGU6ZGF0YS1zdHlsZS1uYW1lPSJOMzciLz5cbicpO3ZhciBjdD0yO2V0PTAseWUuU2hlZXROYW1lcy5tYXAoZnVuY3Rpb24oYXQpe3JldHVybiB5ZS5TaGVldHNbYXRdfSkuZm9yRWFj''@;'; put 'put ''aChmdW5jdGlvbihhdCl7aWYoYXQpZm9yKHZhciBidD0wLGp0PTAsa3Q9TXMoYXRbIiFyZWYiXSksT3Q9QXJyYXkuaXNBcnJheShhdCk7YnQ8PWt0LmUucjsrK2J0KWZvcihqdD0wO2p0PD1rdC5lLmM7KytqdCl7dmFyIEt0PXFpKHtyOmJ0LGM6anR9KSxUbj1PdD8oYXRbYnRdfHxbXSlbanRd''@;'; put 'put ''OmF0W0t0XTtpZihUbiYmKFRuLnN8fFRuLlIpKXt2YXIgcnI9W107VG4ucyYmcnIucHVzaChbVG4sITBdKSxUbi5SJiZUbi5SLmZvckVhY2goZnVuY3Rpb24oU24pe1NuJiZTbi5zJiZyci5wdXNoKFtTbiwhMV0pfSkscnIuZm9yRWFjaChmdW5jdGlvbihTbil7dmFyIGxyPVNuWzBdLFhuPWxy''@;'; put 'put ''LnMsQm49IiIsZnI9eyJzdHlsZTpuYW1lIjooU25bMV0/ImNlIjoiVCIpK2N0LCJzdHlsZTpmYW1pbHkiOlNuWzFdPyJ0YWJsZS1jZWxsIjoidGV4dCJ9O1NuWzFdJiYoZnJbInN0eWxlOnBhcmVudC1zdHlsZS1uYW1lIl09IkRlZmF1bHQiLGZyWyJzdHlsZTpkYXRhLXN0eWxlLW5hbWUiXT0i''@;'; put 'put ''TjAiKTt2YXIgYnI9e30sZXI9ITEsTWk9e30sRmk9ITEsbmE9e30sY2E9ITE7aWYoWG4uY29sb3ImJihNaVsiZm86Y29sb3IiXT0iIyIrUDAoWG4uY29sb3IucmdiKSxGaT0hMCksWG4uc3omJihNaVsiZm86Zm9udC1zaXplIl09WG4uc3orInB0IixGaT0hMCksWG4uYm9sZCYmKE1pWyJmbzpm''@;'; put 'put ''b250LXdlaWdodCJdPSJib2xkIixGaT0hMCksWG4uaXRhbGljJiYoTWlbImZvOmZvbnQtc3R5bGUiXT0iaXRhbGljIixGaT0hMCksWG4ubmFtZSYmKE5lW1huLm5hbWVdfHwoTmVbWG4ubmFtZV09WG4ubmFtZS5tYXRjaCgvIC8pPyImYXBvczsiK1huLm5hbWUrIiZhcG9zOyI6WG4ubmFtZSks''@;'; put 'put ''TWlbInN0eWxlOmZvbnQtbmFtZSJdPVhuLm5hbWUsRmk9ITApLFhuLnN0cmlrZSYmKE1pWyJzdHlsZTp0ZXh0LWxpbmUtdGhyb3VnaC1zdHlsZSJdPSJzb2xpZCIsTWlbInN0eWxlOnRleHQtbGluZS10aHJvdWdoLXR5cGUiXT0ic2luZ2xlIixGaT0hMCksWG4udW5kZXJsaW5lJiYoTWlbInN0''@;'; put 'put ''eWxlOnRleHQtdW5kZXJsaW5lLXN0eWxlIl09InNvbGlkIixNaVsic3R5bGU6dGV4dC11bmRlcmxpbmUtd2lkdGgiXT0iYXV0byIsTWlbInN0eWxlOnRleHQtdW5kZXJsaW5lLWNvbG9yIl09ImZvbnQtY29sb3IiLEZpPSEwKSxTblsxXSl7aWYoWG4uYWxpZ25tZW50KXt2YXIgTGk9WG4uYWxp''@;'; put 'put ''Z25tZW50O0xpLndyYXBUZXh0JiYoYnJbImZvOndyYXAtb3B0aW9uIl09IndyYXAiLGVyPSEwKSxMaS52ZXJ0aWNhbCYmKGJyWyJzdHlsZTp2ZXJ0aWNhbC1hbGlnbiJdPSJjZW50ZXIiPT1MaS52ZXJ0aWNhbD8ibWlkZGxlIjpMaS52ZXJ0aWNhbCxlcj0hMCksb2VbTGkuaG9yaXpvbnRhbF0m''@;'; put 'put ''JihuYVsiZm86dGV4dC1hbGlnbiJdPW9lW0xpLmhvcml6b250YWxdLGNhPSEwKX1Ybi5mZ0NvbG9yJiYoYnJbImZvOmJhY2tncm91bmQtY29sb3IiXT0iIyIrUDAoWG4uZmdDb2xvci5yZ2IpLGVyPSEwKX1lciYmKEJuKz1Qcigic3R5bGU6dGFibGUtY2VsbC1wcm9wZXJ0aWVzIixudWxsLGJy''@;'; put 'put ''KSksRmkmJihCbis9UHIoInN0eWxlOnRleHQtcHJvcGVydGllcyIsbnVsbCxNaSkpLGNhJiYoQm4rPVByKCJzdHlsZTpwYXJhZ3JhcGgtcHJvcGVydGllcyIsbnVsbCxuYSkpLFBlLnB1c2goIiAgIitQcigic3R5bGU6c3R5bGUiLEJuLGZyKSsiXG4iKSxsci5vZHM9Y3QsKytjdH0pfX19KSxQ''@;'; put 'put ''ZS5wdXNoKCIgPC9vZmZpY2U6YXV0b21hdGljLXN0eWxlcz5cbiIpO3ZhciBFdD0iIDxvZmZpY2U6Zm9udC1mYWNlLWRlY2xzPlxuIitPZShOZSkubWFwKGZ1bmN0aW9uKGF0KXtyZXR1cm4nICA8c3R5bGU6Zm9udC1mYWNlIHN0eWxlOm5hbWU9IicrYXQrJyIgc3ZnOmZvbnQtZmFtaWx5PSIn''@;'; put 'put ''K05lW2F0XSsnIi8+XG4nfSkuam9pbigiIikrIiA8L29mZmljZTpmb250LWZhY2UtZGVjbHM+XG4iO3BlLnB1c2goRXQpLHBlLnB1c2goUGUuam9pbigiIikpfShOZSx5ZSksTmUucHVzaCgiICA8b2ZmaWNlOmJvZHk+XG4iKSxOZS5wdXNoKCIgICAgPG9mZmljZTpzcHJlYWRzaGVldD5cbiIp''@;'; put 'put ''O2Zvcih2YXIgY3Q9MDtjdCE9eWUuU2hlZXROYW1lcy5sZW5ndGg7KytjdClOZS5wdXNoKFEoeWUuU2hlZXRzW3llLlNoZWV0TmFtZXNbY3RdXSx5ZSxjdCkpO3JldHVybiBOZS5wdXNoKCIgICAgPC9vZmZpY2U6c3ByZWFkc2hlZXQ+XG4iKSxOZS5wdXNoKCIgIDwvb2ZmaWNlOmJvZHk+XG4i''@;'; put 'put ''KSxOZS5wdXNoKCJmb2RzIj09UGUuYm9va1R5cGU/Ijwvb2ZmaWNlOmRvY3VtZW50PiI6Ijwvb2ZmaWNlOmRvY3VtZW50LWNvbnRlbnQ+IiksTmUuam9pbigiIil9fSgpO2Z1bmN0aW9uIFJJKFMsUil7aWYoImZvZHMiPT1SLmJvb2tUeXBlKXJldHVybiBQOChTLFIpO3ZhciBrPWhpKCksRz0i''@;'; put 'put ''IixRPVtdLG9lPVtdO3JldHVybiBqbihrLEc9Im1pbWV0eXBlIiwiYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC5zcHJlYWRzaGVldCIpLGpuKGssRz0iY29udGVudC54bWwiLFA4KFMsUikpLFEucHVzaChbRywidGV4dC94bWwiXSksb2UucHVzaChbRywiQ29udGVudEZpbGUi''@;'; put 'put ''XSksam4oayxHPSJzdHlsZXMueG1sIixVeihTLFIpKSxRLnB1c2goW0csInRleHQveG1sIl0pLG9lLnB1c2goW0csIlN0eWxlc0ZpbGUiXSksam4oayxHPSJtZXRhLnhtbCIsSWkrUjYoKSksUS5wdXNoKFtHLCJ0ZXh0L3htbCJdKSxvZS5wdXNoKFtHLCJNZXRhZGF0YUZpbGUiXSksam4oayxH''@;'; put 'put ''PSJtYW5pZmVzdC5yZGYiLGZ1bmN0aW9uIFB1KFMpe3ZhciBSPVtJaV07Ui5wdXNoKCc8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPlxuJyk7Zm9yKHZhciBrPTA7ayE9Uy5sZW5ndGg7KytrKVIucHVzaChldShTW2tdWzBd''@;'; put 'put ''LFNba11bMV0pKSxSLnB1c2gobjIoIiIsU1trXVswXSkpO3JldHVybiBSLnB1c2goZXUoIiIsIkRvY3VtZW50IiwicGtnIikpLFIucHVzaCgiPC9yZGY6UkRGPiIpLFIuam9pbigiIil9KG9lKSksUS5wdXNoKFtHLCJhcHBsaWNhdGlvbi9yZGYreG1sIl0pLGpuKGssRz0iTUVUQS1JTkYvbWFu''@;'; put 'put ''aWZlc3QueG1sIixmdW5jdGlvbiB4YyhTKXt2YXIgUj1bSWldO1IucHVzaCgnPG1hbmlmZXN0Om1hbmlmZXN0IHhtbG5zOm1hbmlmZXN0PSJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOm1hbmlmZXN0OjEuMCIgbWFuaWZlc3Q6dmVyc2lvbj0iMS4yIj5cbicpLFIucHVz''@;'; put 'put ''aCgnICA8bWFuaWZlc3Q6ZmlsZS1lbnRyeSBtYW5pZmVzdDpmdWxsLXBhdGg9Ii8iIG1hbmlmZXN0OnZlcnNpb249IjEuMiIgbWFuaWZlc3Q6bWVkaWEtdHlwZT0iYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC5zcHJlYWRzaGVldCIvPlxuJyk7Zm9yKHZhciBrPTA7azxTLmxl''@;'; put 'put ''bmd0aDsrK2spUi5wdXNoKCcgIDxtYW5pZmVzdDpmaWxlLWVudHJ5IG1hbmlmZXN0OmZ1bGwtcGF0aD0iJytTW2tdWzBdKyciIG1hbmlmZXN0Om1lZGlhLXR5cGU9IicrU1trXVsxXSsnIi8+XG4nKTtyZXR1cm4gUi5wdXNoKCI8L21hbmlmZXN0Om1hbmlmZXN0PiIpLFIuam9pbigiIil9KFEp''@;'; put 'put ''KSxrfWZ1bmN0aW9uIE9mKFMpe3JldHVybiBmdW5jdGlvbihrLEcpe3ZhciBRPWZ1bmN0aW9uIFp6KFMsUil7aWYoIVIpcmV0dXJuIDA7dmFyIGs9Uy5TaGVldE5hbWVzLmluZGV4T2YoUik7aWYoLTE9PWspdGhyb3cgbmV3IEVycm9yKCJTaGVldCBub3QgZm91bmQ6ICIrUik7cmV0dXJuIGt9''@;'; put 'put ''KGssRy5zaGVldCk7cmV0dXJuIFMuZnJvbV9zaGVldChrLlNoZWV0c1trLlNoZWV0TmFtZXNbUV1dLEcsayl9fXZhciBXej1PZihtZCksWXo9T2Yoe2Zyb21fc2hlZXQ6QzB9KSxHej1PZih0eXBlb2YgY0M8InUiP2NDOnt9KSx2ZD1PZih0eXBlb2YgRHY8InUiP0R2Ont9KSxMST1PZih0eXBl''@;'; put 'put ''b2YgajM8InUiP2ozOnt9KSxPST1PZih0eXBlb2YgVnY8InUiP1Z2Ont9KSwkej1PZih7ZnJvbV9zaGVldDpqSX0pLGVyZT1PZih0eXBlb2YgQjM8InUiP0IzOnt9KSxQST1PZih0eXBlb2YgSzY8InUiP0s2Ont9KSxXbD15KDkxNDI2KXx8dHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5jcnlw''@;'; put 'put ''dG9Ccm93c2VyaWZ5O2lmKCFXbCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBmaW5kIGNyeXB0byBleHRlbnNpb25zISIpO3ZhciBucD17U0hBNTEyOiJzaGE1MTIiLFNIQTI1Njoic2hhMjU2IixTSEEzODQ6InNoYTM4NCIsU0hBMToic2hhMSIsTUQ1OiJtZDUiLE1ENDoibWQ0IixNRDI6Im1k''@;'; put 'put ''MiJ9O2Z1bmN0aW9uIG1jKFMsUil7c3dpdGNoKFI9KFJ8fCIiKS5yZXBsYWNlKC8tL2csIiIpKXtjYXNlIlNIQS01MTIiOmNhc2UiU0hBNTEyIjpyZXR1cm4gbmV3IFdsLmNyZWF0ZUhhc2goInNoYTUxMiIpLnVwZGF0ZShTKS5kaWdlc3QoKTtjYXNlIlNIQS0xIjpjYXNlIlNIQTEiOnJldHVy''@;'; put 'put ''biBuZXcgV2wuY3JlYXRlSGFzaCgic2hhMSIpLnVwZGF0ZShTKS5kaWdlc3QoKTtjYXNlIk1EMiI6cmV0dXJuIG5ldyBXbC5jcmVhdGVIYXNoKCJtZDIiKS51cGRhdGUoUykuZGlnZXN0KCk7ZGVmYXVsdDppZihucFtSXSlyZXR1cm4gbmV3IFdsLmNyZWF0ZUhhc2gobnBbUl0pLnVwZGF0ZShT''@;'; put 'put ''KS5kaWdlc3QoKTt0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIGhhc2ggYWxnb3JpdGhtICIrUil9fWZ1bmN0aW9uIFk0KFMsUixrKXtpZigicmMyIj09ayl0aHJvdyJVbnN1cHBvcnRlZCBSQzIiO3ZhciBHPVdsLmNyZWF0ZURlY2lwaGVyaXYoa3x8ImFlcy0yNTYtY2JjIixTLFIpO3Jl''@;'; put 'put ''dHVybiBHLnNldEF1dG9QYWRkaW5nKCExKSxHfWZ1bmN0aW9uIEY4KFMpe3JldHVyblsoIjAwIisoMjU1JlMpLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTIpLCgiMDAiKyhTPj4+OCYyNTUpLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTIpLCgiMDAiKyhTPj4+MTYmMjU1KS50b1N0cmluZygxNikpLnNs''@;'; put 'put ''aWNlKC0yKSwoIjAwIisoUz4+PjI0JjI1NSkudG9TdHJpbmcoMTYpKS5zbGljZSgtMildLmpvaW4oIiIpfXZhciBHND1mdW5jdGlvbihTLFIsayl7Zm9yKHZhciBHPSJzdHJpbmciPT10eXBlb2YgUj9CdWZmZXIuZnJvbShSLCJoZXgiKTpSLFE9InN0cmluZyI9PXR5cGVvZiBTP0J1ZmZlci5m''@;'; put 'put ''cm9tKGNwdGFibGUudXRpbHMuZW5jb2RlKDEyMDAsUykpOlMsb2U9InN0cmluZyI9PXR5cGVvZiBrP0J1ZmZlci5mcm9tKGssImhleCIpOmssZ2U9bWMoUSwiTUQ1IikscGU9QnVmZmVyLmNvbmNhdChbZ2Uuc2xpY2UoMCw1KSxHXSkseWU9MDt5ZTw0OysreWUpcGU9QnVmZmVyLmNvbmNhdChb''@;'; put 'put ''cGUscGVdKTt2YXIgUGU9bWMocGUsIk1ENSIpO3JldHVybihtYyhCdWZmZXIuY29uY2F0KFtQZS5zbGljZSgwLDUpLG9lXSksIk1ENSIpLnRvU3RyaW5nKCJoZXgiKSsiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiKS5zbGljZSgwLDMyKX0sJDQ9ZnVuY3Rpb24oUyxSLGspe3Zh''@;'; put 'put ''ciBHPSJzdHJpbmciPT10eXBlb2YgUj9CdWZmZXIuZnJvbShSLCJoZXgiKTpSLFE9InN0cmluZyI9PXR5cGVvZiBTP0J1ZmZlci5mcm9tKGNwdGFibGUudXRpbHMuZW5jb2RlKDEyMDAsUykpOlMsb2U9InN0cmluZyI9PXR5cGVvZiBrP0J1ZmZlci5mcm9tKGssImhleCIpOmssZ2U9bWMoQnVm''@;'; put 'put ''ZmVyLmNvbmNhdChbRyxRXSksIlNIQTEiKTtyZXR1cm4gbWMoQnVmZmVyLmNvbmNhdChbZ2Usb2VdKSwiU0hBMSIpfSxYej1mdW5jdGlvbigpe2Z1bmN0aW9uIFIoKXt9Ui5wcm90b3R5cGUuYnVpbGQ9ZnVuY3Rpb24oYXQpe3RoaXMuX2k9MDt2YXIgYnQ9dGhpcy5fYnVpbGQoYXQsIiIpO3Jl''@;'; put 'put ''dHVybiIiPT09YnQ/IiI6Jzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4nK2J0fSxSLnByb3RvdHlwZS5fYnVpbGQ9ZnVuY3Rpb24oYXQsYnQpe2lmKHRoaXMuX2krKyUxZTY9PTAmJih0aGlzLl9jPWJ0WzBdKSxudWxsPT1hdHx8Im9iamVj''@;'; put 'put ''dCIhPXR5cGVvZiBhdCYmImZ1bmN0aW9uIiE9dHlwZW9mIGF0KW51bGwhPWF0JiYoYnQrPWZ1bmN0aW9uIFMoYXQsYnQpe3JldHVybiBudWxsPT1hdHx8KGF0PWF0LnRvU3RyaW5nKCkucmVwbGFjZSgvJi9nLCImYW1wOyIpLnJlcGxhY2UoLzwvZywiJmx0OyIpLnJlcGxhY2UoLz4vZywiJmd0''@;'; put 'put ''OyIpLGJ0JiYoYXQ9YXQucmVwbGFjZSgvIi9nLCImcXVvdDsiKSkpLGF0fShhdCkpO2Vsc2V7aWYoIWF0Lm5hbWUpdGhyb3cgbmV3IEVycm9yKCJYTUwgbm9kZSBkb2VzIG5vdCBoYXZlIG5hbWU6ICIrSlNPTi5zdHJpbmdpZnkoYXQpKTtidCs9IjwiK2F0Lm5hbWU7dmFyIGp0PXRoaXM7YnQr''@;'; put 'put ''PWF0LmF0dHJpYnV0ZXMmJkx1KGF0LmF0dHJpYnV0ZXMpfHwiIixBcnJheS5pc0FycmF5KGF0LmNoaWxkcmVuKSYmMCE9YXQuY2hpbGRyZW4ubGVuZ3RoPyhidCs9Ij4iLGF0LmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24oa3Qpe2J0PWp0Ll9idWlsZChrdCxidCl9KSxidCs9IjwvIithdC5u''@;'; put 'put ''YW1lKyI+Iik6YnQrPSIvPiJ9cmV0dXJuIGJ0fTt2YXIgaz1CdWZmZXIuZnJvbShbNCwwLDQsMCw2NCwwLDAsMF0pLG9lPXtkYXRhSW50ZWdyaXR5OntobWFjS2V5OkJ1ZmZlci5mcm9tKFs5NSwxNzgsMTczLDEsMTIsMTg1LDIyNSwyNDZdKSxobWFjVmFsdWU6QnVmZmVyLmZyb20oWzE2MCwx''@;'; put 'put ''MDMsMTI3LDIsMTc4LDQ0LDEzMiw1MV0pfSxrZXk6QnVmZmVyLmZyb20oWzIwLDExMCwxMSwyMzEsMTcxLDE3MiwyMDgsMjE0XSksdmVyaWZpZXJIYXNoOntpbnB1dDpCdWZmZXIuZnJvbShbMjU0LDE2NywyMTAsMTE4LDU5LDc1LDE1OCwxMjFdKSx2YWx1ZTpCdWZmZXIuZnJvbShbMjE1LDE3''@;'; put 'put ''MCwxNSwxMDksNDgsOTcsNTIsNzhdKX19O2Z1bmN0aW9uIGdlKGF0LGJ0LGp0LGt0LE90LEt0KXt2YXIgVG49YnQudG9Mb3dlckNhc2UoKSsiLSIrOCprdC5sZW5ndGg7aWYoIkNoYWluaW5nTW9kZUNCQyIhPT1qdCl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gY2lwaGVyIGNoYWluaW5nOiAi''@;'; put 'put ''K2p0KTt2YXIgcnI9V2xbYXQ/ImNyZWF0ZUNpcGhlcml2IjoiY3JlYXRlRGVjaXBoZXJpdiJdKFRuKz0iLWNiYyIsa3QsT3QpO3JyLnNldEF1dG9QYWRkaW5nKCExKTt2YXIgU249cnIudXBkYXRlKEt0KSxscj1bU25dO3RyeXt2YXIgWG49cnIuZmluYWwoKTtsci5wdXNoKFhuKX1jYXRjaHt9''@;'; put 'put ''cmV0dXJuIEJ1ZmZlci5jb25jYXQobHIpfWZ1bmN0aW9uIHBlKGF0KXthdD1hdC50b0xvd2VyQ2FzZSgpO3ZhciBidD1bXS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKTtpZihXbC5nZXRIYXNoZXMoKS5pbmRleE9mKGF0KTwwKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgaGFzaCBhbGdv''@;'; put 'put ''cml0aG0gIithdCk7dmFyIGt0PVdsLmNyZWF0ZUhhc2goYXQpO3JldHVybiBrdC51cGRhdGUoQnVmZmVyLmNvbmNhdChidCkpLGt0LmRpZ2VzdCgpfWZ1bmN0aW9uIHllKGF0LGJ0LGp0LGt0KXsibnVtYmVyIj09dHlwZW9mIGt0JiYoa3Q9UGUoa3QpKTt2YXIgT3Q9cGUoYXQsYnQsa3QpO2lm''@;'; put 'put ''KE90Lmxlbmd0aDxqdCl7dmFyIEt0PUJ1ZmZlci5hbGxvYyhqdCw1NCk7T3QuY29weShLdCksT3Q9S3R9ZWxzZSBPdC5sZW5ndGg+anQmJihPdD1PdC5zbGljZSgwLGp0KSk7cmV0dXJuIE90fWZ1bmN0aW9uIFBlKGF0LGJ0KXt2YXIganQ9QnVmZmVyLmFsbG9jKGJ0fHw0KTtyZXR1cm4ganQu''@;'; put 'put ''d3JpdGVVSW50MzJMRShhdCwwKSxqdH1mdW5jdGlvbiBOZShhdCxidCxqdCxrdCxPdCxLdCl7Zm9yKHZhciBycj1wZShidCxqdCxCdWZmZXIuZnJvbShhdCwidXRmMTZsZSIpKSxTbj0wO1NuPGt0O1NuKyspcnI9cGUoYnQsUGUoU24pLHJyKTt2YXIgWG49T3QvODtpZigocnI9cGUoYnQscnIs''@;'; put 'put ''S3QpKS5sZW5ndGg8WG4pe3ZhciBCbj1CdWZmZXIuYWxsb2MoWG4sNTQpO3JyLmNvcHkoQm4pLHJyPUJufWVsc2UgcnIubGVuZ3RoPlhuJiYocnI9cnIuc2xpY2UoMCxYbikpO3JldHVybiBycn1yZXR1cm4gV2wucmFuZG9tQnl0ZXN8fChXbC5yYW5kb21CeXRlcz1mdW5jdGlvbihhdCl7Zm9y''@;'; put 'put ''KHZhciBidD1CdWZmZXIuYWxsb2MoYXQpLGp0PTA7anQ8YXQ7KytqdClidFtqdF09TWF0aC5mbG9vcigyNTYqTWF0aC5yYW5kb20oKSk7cmV0dXJuIGJ0fSksZnVuY3Rpb24gRXQoYXQsYnQpe2lmKCJzdHJpbmciPT10eXBlb2YgYXQpcmV0dXJuIEV0KEJ1ZmZlci5mcm9tKGF0LCJiaW5hcnki''@;'; put 'put ''KSxidCk7dmFyIGp0PVdsLnJhbmRvbUJ5dGVzKDMyKSxrdD17cGFja2FnZTp7Y2lwaGVyQWxnb3JpdGhtOiJBRVMiLGNpcGhlckNoYWluaW5nOiJDaGFpbmluZ01vZGVDQkMiLHNhbHRWYWx1ZTpXbC5yYW5kb21CeXRlcygxNiksaGFzaEFsZ29yaXRobToiU0hBNTEyIixoYXNoU2l6ZTo2NCxi''@;'; put 'put ''bG9ja1NpemU6MTYsa2V5Qml0czo4Kmp0Lmxlbmd0aH0sa2V5OntjaXBoZXJBbGdvcml0aG06IkFFUyIsY2lwaGVyQ2hhaW5pbmc6IkNoYWluaW5nTW9kZUNCQyIsc2FsdFZhbHVlOldsLnJhbmRvbUJ5dGVzKDE2KSxoYXNoQWxnb3JpdGhtOiJTSEE1MTIiLGhhc2hTaXplOjY0LGJsb2NrU2l6''@;'; put 'put ''ZToxNixzcGluQ291bnQ6MSxrZXlCaXRzOjI1Nn19LE90PWZ1bmN0aW9uIFllKGF0LGJ0LGp0LGt0LE90LEt0LFRuLHJyKXtmb3IodmFyIFNuPVtdLGxyPWF0PzA6OCxYbj0wLEJuPTAsZnI9MDtmcjxyci5sZW5ndGg7KXsoZnI9KEJuPWZyKSs0MDk2KT5yci5sZW5ndGgmJihmcj1yci5sZW5n''@;'; put 'put ''dGgpO3ZhciBicj1yci5zbGljZShCbitscixmcitsciksZXI9YnIubGVuZ3RoJU90O2VyJiYoYnI9QnVmZmVyLmNvbmNhdChbYnIsQnVmZmVyLmFsbG9jKE90LWVyKV0pKTt2YXIgRmk9Z2UoYXQsYnQsanQsVG4seWUoa3QsS3QsT3QsWG4pLGJyKTtTbi5wdXNoKEZpKSxYbisrfXZhciBuYT1C''@;'; put 'put ''dWZmZXIuY29uY2F0KFNuKTtpZihhdCluYT1CdWZmZXIuY29uY2F0KFtQZShyci5sZW5ndGgsOCksbmFdKTtlbHNle3ZhciBjYT1yci5yZWFkVUludDMyTEUoMCk7bmE9bmEuc2xpY2UoMCxjYSl9cmV0dXJuIG5hfSghMCxrdC5wYWNrYWdlLmNpcGhlckFsZ29yaXRobSxrdC5wYWNrYWdlLmNp''@;'; put 'put ''cGhlckNoYWluaW5nLGt0LnBhY2thZ2UuaGFzaEFsZ29yaXRobSxrdC5wYWNrYWdlLmJsb2NrU2l6ZSxrdC5wYWNrYWdlLnNhbHRWYWx1ZSxqdCxhdCksS3Q9V2wucmFuZG9tQnl0ZXMoNjQpLFRuPXllKGt0LnBhY2thZ2UuaGFzaEFsZ29yaXRobSxrdC5wYWNrYWdlLnNhbHRWYWx1ZSxrdC5w''@;'; put 'put ''YWNrYWdlLmJsb2NrU2l6ZSxvZS5kYXRhSW50ZWdyaXR5LmhtYWNLZXkpLHJyPWdlKCEwLGt0LnBhY2thZ2UuY2lwaGVyQWxnb3JpdGhtLGt0LnBhY2thZ2UuY2lwaGVyQ2hhaW5pbmcsanQsVG4sS3QpLFNuPWZ1bmN0aW9uIGV0KGF0LGJ0KXthdD1hdC50b0xvd2VyQ2FzZSgpO3ZhciBqdD1b''@;'; put 'put ''XS5zbGljZS5jYWxsKGFyZ3VtZW50cywyKTtpZihXbC5nZXRIYXNoZXMoKS5pbmRleE9mKGF0KTwwKXRocm93IG5ldyBFcnJvcigiSE1BQyBhbGdvcml0aG0gJyIrYXQrIicgbm90IHN1cHBvcnRlZCEiKTt2YXIgT3Q9V2wuY3JlYXRlSG1hYyhhdCxidCk7cmV0dXJuIE90LnVwZGF0ZShCdWZm''@;'; put 'put ''ZXIuY29uY2F0KGp0KSksT3QuZGlnZXN0KCl9KGt0LnBhY2thZ2UuaGFzaEFsZ29yaXRobSxLdCxPdCksbHI9eWUoa3QucGFja2FnZS5oYXNoQWxnb3JpdGhtLGt0LnBhY2thZ2Uuc2FsdFZhbHVlLGt0LnBhY2thZ2UuYmxvY2tTaXplLG9lLmRhdGFJbnRlZ3JpdHkuaG1hY1ZhbHVlKSxYbj1n''@;'; put 'put ''ZSghMCxrdC5wYWNrYWdlLmNpcGhlckFsZ29yaXRobSxrdC5wYWNrYWdlLmNpcGhlckNoYWluaW5nLGp0LGxyLFNuKTtrdC5kYXRhSW50ZWdyaXR5PXtlbmNyeXB0ZWRIbWFjS2V5OnJyLGVuY3J5cHRlZEhtYWNWYWx1ZTpYbn07dmFyIEJuPU5lKGJ0LGt0LmtleS5oYXNoQWxnb3JpdGhtLGt0''@;'; put 'put ''LmtleS5zYWx0VmFsdWUsa3Qua2V5LnNwaW5Db3VudCxrdC5rZXkua2V5Qml0cyxvZS5rZXkpO2t0LmtleS5lbmNyeXB0ZWRLZXlWYWx1ZT1nZSghMCxrdC5rZXkuY2lwaGVyQWxnb3JpdGhtLGt0LmtleS5jaXBoZXJDaGFpbmluZyxCbixrdC5rZXkuc2FsdFZhbHVlLGp0KTt2YXIgZnI9V2wu''@;'; put 'put ''cmFuZG9tQnl0ZXMoMTYpLGJyPU5lKGJ0LGt0LmtleS5oYXNoQWxnb3JpdGhtLGt0LmtleS5zYWx0VmFsdWUsa3Qua2V5LnNwaW5Db3VudCxrdC5rZXkua2V5Qml0cyxvZS52ZXJpZmllckhhc2guaW5wdXQpO2t0LmtleS5lbmNyeXB0ZWRWZXJpZmllckhhc2hJbnB1dD1nZSghMCxrdC5rZXku''@;'; put 'put ''Y2lwaGVyQWxnb3JpdGhtLGt0LmtleS5jaXBoZXJDaGFpbmluZyxicixrdC5rZXkuc2FsdFZhbHVlLGZyKTt2YXIgZXI9cGUoa3Qua2V5Lmhhc2hBbGdvcml0aG0sZnIpLE1pPU5lKGJ0LGt0LmtleS5oYXNoQWxnb3JpdGhtLGt0LmtleS5zYWx0VmFsdWUsa3Qua2V5LnNwaW5Db3VudCxrdC5r''@;'; put 'put ''ZXkua2V5Qml0cyxvZS52ZXJpZmllckhhc2gudmFsdWUpO2t0LmtleS5lbmNyeXB0ZWRWZXJpZmllckhhc2hWYWx1ZT1nZSghMCxrdC5rZXkuY2lwaGVyQWxnb3JpdGhtLGt0LmtleS5jaXBoZXJDaGFpbmluZyxNaSxrdC5rZXkuc2FsdFZhbHVlLGVyKTt2YXIgRmk9ZnVuY3Rpb24gY3QoYXQp''@;'; put 'put ''e3ZhciBidD17bmFtZToiZW5jcnlwdGlvbiIsYXR0cmlidXRlczp7eG1sbnM6Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlLzIwMDYvZW5jcnlwdGlvbiIsInhtbG5zOnAiOiJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS8yMDA2L2tleUVuY3J5cHRvci9w''@;'; put 'put ''YXNzd29yZCIsInhtbG5zOmMiOiJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS8yMDA2L2tleUVuY3J5cHRvci9jZXJ0aWZpY2F0ZSJ9LGNoaWxkcmVuOlt7bmFtZToia2V5RGF0YSIsYXR0cmlidXRlczp7c2FsdFNpemU6YXQucGFja2FnZS5zYWx0VmFsdWUubGVuZ3RoLGJs''@;'; put 'put ''b2NrU2l6ZTphdC5wYWNrYWdlLmJsb2NrU2l6ZSxrZXlCaXRzOmF0LnBhY2thZ2Uua2V5Qml0cyxoYXNoU2l6ZTphdC5wYWNrYWdlLmhhc2hTaXplLGNpcGhlckFsZ29yaXRobTphdC5wYWNrYWdlLmNpcGhlckFsZ29yaXRobSxjaXBoZXJDaGFpbmluZzphdC5wYWNrYWdlLmNpcGhlckNoYWlu''@;'; put 'put ''aW5nLGhhc2hBbGdvcml0aG06YXQucGFja2FnZS5oYXNoQWxnb3JpdGhtLHNhbHRWYWx1ZTphdC5wYWNrYWdlLnNhbHRWYWx1ZS50b1N0cmluZygiYmFzZTY0Iil9fSx7bmFtZToiZGF0YUludGVncml0eSIsYXR0cmlidXRlczp7ZW5jcnlwdGVkSG1hY0tleTphdC5kYXRhSW50ZWdyaXR5LmVu''@;'; put 'put ''Y3J5cHRlZEhtYWNLZXkudG9TdHJpbmcoImJhc2U2NCIpLGVuY3J5cHRlZEhtYWNWYWx1ZTphdC5kYXRhSW50ZWdyaXR5LmVuY3J5cHRlZEhtYWNWYWx1ZS50b1N0cmluZygiYmFzZTY0Iil9fSx7bmFtZToia2V5RW5jcnlwdG9ycyIsY2hpbGRyZW46W3tuYW1lOiJrZXlFbmNyeXB0b3IiLGF0''@;'; put 'put ''dHJpYnV0ZXM6e3VyaToiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2UvMjAwNi9rZXlFbmNyeXB0b3IvcGFzc3dvcmQifSxjaGlsZHJlbjpbe25hbWU6InA6ZW5jcnlwdGVkS2V5IixhdHRyaWJ1dGVzOntzcGluQ291bnQ6YXQua2V5LnNwaW5Db3VudCxzYWx0U2l6ZTphdC5r''@;'; put 'put ''ZXkuc2FsdFZhbHVlLmxlbmd0aCxibG9ja1NpemU6YXQua2V5LmJsb2NrU2l6ZSxrZXlCaXRzOmF0LmtleS5rZXlCaXRzLGhhc2hTaXplOmF0LmtleS5oYXNoU2l6ZSxjaXBoZXJBbGdvcml0aG06YXQua2V5LmNpcGhlckFsZ29yaXRobSxjaXBoZXJDaGFpbmluZzphdC5rZXkuY2lwaGVyQ2hh''@;'; put 'put ''aW5pbmcsaGFzaEFsZ29yaXRobTphdC5rZXkuaGFzaEFsZ29yaXRobSxzYWx0VmFsdWU6YXQua2V5LnNhbHRWYWx1ZS50b1N0cmluZygiYmFzZTY0IiksZW5jcnlwdGVkVmVyaWZpZXJIYXNoSW5wdXQ6YXQua2V5LmVuY3J5cHRlZFZlcmlmaWVySGFzaElucHV0LnRvU3RyaW5nKCJiYXNlNjQi''@;'; put 'put ''KSxlbmNyeXB0ZWRWZXJpZmllckhhc2hWYWx1ZTphdC5rZXkuZW5jcnlwdGVkVmVyaWZpZXJIYXNoVmFsdWUudG9TdHJpbmcoImJhc2U2NCIpLGVuY3J5cHRlZEtleVZhbHVlOmF0LmtleS5lbmNyeXB0ZWRLZXlWYWx1ZS50b1N0cmluZygiYmFzZTY0Iil9fV19XX1dfSxrdD0obmV3IFIpLmJ1''@;'; put 'put ''aWxkKGJ0KTtyZXR1cm4gQnVmZmVyLmNvbmNhdChbayxCdWZmZXIuZnJvbShrdCwidXRmOCIpXSl9KGt0KSxuYT12ZS51dGlscy5jZmJfbmV3KCk7cmV0dXJuIHZlLnV0aWxzLmNmYl9hZGQobmEsIkVuY3J5cHRpb25JbmZvIixGaSksdmUudXRpbHMuY2ZiX2FkZChuYSwiRW5jcnlwdGVkUGFj''@;'; put 'put ''a2FnZSIsT3QpLG5hfX0oKTtmdW5jdGlvbiBISShTKXtyZXR1cm4gZnVuY3Rpb24oayl7Zm9yKHZhciBHPTA7RyE9Uy5sZW5ndGg7KytHKXt2YXIgUT1TW0ddO3ZvaWQgMD09PWtbUVswXV0mJihrW1FbMF1dPVFbMV0pLCJuIj09PVFbMl0mJihrW1FbMF1dPU51bWJlcihrW1FbMF1dKSl9fX12''@;'; put 'put ''YXIgTkk9ZnVuY3Rpb24oUyl7SEkoW1siY2VsbE5GIiwhMV0sWyJjZWxsSFRNTCIsITBdLFsiY2VsbEZvcm11bGEiLCEwXSxbImNlbGxTdHlsZXMiLCExXSxbImNlbGxUZXh0IiwhMF0sWyJjZWxsRGF0ZXMiLCExXSxbInNoZWV0U3R1YnMiLCExXSxbInNoZWV0Um93cyIsMCwibiJdLFsiYm9v''@;'; put 'put ''a0RlcHMiLCExXSxbImJvb2tTaGVldHMiLCExXSxbImJvb2tQcm9wcyIsITFdLFsiYm9va0ZpbGVzIiwhMV0sWyJib29rVkJBIiwhMV0sWyJwYXNzd29yZCIsIiJdLFsiV1RGIiwhMV1dKShTKSxTLmJvb2tJbWFnZXMmJihTLmNlbGxTdHlsZXM9ITApfSxQZj1ISShbWyJjZWxsRGF0ZXMiLCEx''@;'; put 'put ''XSxbImJvb2tTU1QiLCExXSxbImJvb2tUeXBlIiwieGxzeCJdLFsiY29tcHJlc3Npb24iLCExXSxbIldURiIsITFdXSk7ZnVuY3Rpb24gbnJlKFMpe3JldHVybiBLYS5XUy5pbmRleE9mKFMpPi0xPyJzaGVldCI6S2EuQ1MmJlM9PUthLkNTPyJjaGFydCI6S2EuRFMmJlM9PUthLkRTPyJkaWFs''@;'; put 'put ''b2ciOkthLk1TJiZTPT1LYS5NUz8ibWFjcm8iOlMmJlMubGVuZ3RoP1M6InNoZWV0In12YXIgUGI9W107ZnVuY3Rpb24geTIoUyxSLGssRyxRLG9lLGdlLHBlLHllLFBlLE5lLFllKXt0cnl7b2VbR109YmYobnIoUyxrLCEwKSxSKTt2YXIgY3QsZXQ9VHQoUyxSKTtzd2l0Y2gocGUpe2Nhc2Ui''@;'; put 'put ''c2hlZXQiOmN0PWZ1bmN0aW9uIGJ6KFMsUixrLEcsUSxvZSxnZSxwZSl7cmV0dXJuIi5iaW4iPT09Ui5zbGljZSgtNCk/ZnVuY3Rpb24gUWooUyxSLGssRyxRLG9lLGdlKXtpZighUylyZXR1cm4gUzt2YXIgcGU9Unx8e307R3x8KEc9eyIhaWQiOnt9fSksbnVsbCE9bGUmJm51bGw9PXBlLmRl''@;'; put 'put ''bnNlJiYocGUuZGVuc2U9bGUpO3ZhciBQZSxFdCxhdCxidCxqdCxrdCxPdCxLdCxUbixycix5ZT1wZS5kZW5zZT9bXTp7fSxOZT17czp7cjoyZTYsYzoyZTZ9LGU6e3I6MCxjOjB9fSxZZT1bXSxldD0hMSxjdD0hMSxTbj1bXTtwZS5iaWZmPTEyLHBlWyIhcm93Il09MDt2YXIgbHI9MCxYbj0h''@;'; put 'put ''MSxCbj1bXSxmcj17fSxicj1wZS5zdXBib29rc3x8US5zdXBib29rc3x8W1tdXTtpZihici5zaGFyZWRmPWZyLGJyLmFycmF5Zj1Cbixici5TaGVldE5hbWVzPVEuU2hlZXROYW1lc3x8US5TaGVldHMubWFwKGZ1bmN0aW9uKExpKXtyZXR1cm4gTGkubmFtZX0pLCFwZS5zdXBib29rcyYmKHBl''@;'; put 'put ''LnN1cGJvb2tzPWJyLFEuTmFtZXMpKWZvcih2YXIgZXI9MDtlcjxRLk5hbWVzLmxlbmd0aDsrK2VyKWJyWzBdW2VyKzFdPVEuTmFtZXNbZXJdO3ZhciBNaT1bXSxGaT1bXSxuYT0hMTtpZihMOFsxNl09e246IkJydFNob3J0UmVhbCIsZjpGan0sdXIoUyxmdW5jdGlvbihrcixWbixCcil7aWYo''@;'; put 'put ''IWN0KXN3aXRjaChCcil7Y2FzZSAxNDg6UGU9a3I7YnJlYWs7Y2FzZSAwOkV0PWtyLHBlLnNoZWV0Um93cyYmcGUuc2hlZXRSb3dzPD1FdC5yJiYoY3Q9ITApLFRuPWppKGp0PUV0LnIpLHBlWyIhcm93Il09RXQuciwoa3IuaGlkZGVufHxrci5ocHR8fG51bGwhPWtyLmxldmVsKSYmKGtyLmhw''@;'; put 'put ''dCYmKGtyLmhweD1zaChrci5ocHQpKSxGaVtrci5yXT1rcik7YnJlYWs7Y2FzZSAyOmNhc2UgMzpjYXNlIDQ6Y2FzZSA1OmNhc2UgNjpjYXNlIDc6Y2FzZSA4OmNhc2UgOTpjYXNlIDEwOmNhc2UgMTE6Y2FzZSAxMzpjYXNlIDE0OmNhc2UgMTU6Y2FzZSAxNjpjYXNlIDE3OmNhc2UgMTg6c3dp''@;'; put 'put ''dGNoKGF0PXt0OmtyWzJdfSxrclsyXSl7Y2FzZSJuIjphdC52PWtyWzFdO2JyZWFrO2Nhc2UicyI6YXQudj0oS3Q9bDhba3JbMV1dKS50LHBlLmNlbGxTdHlsZXMmJihhdC5SPWZ1bmN0aW9uIEVWKFMsUil7aWYoUy5SKXJldHVybiBTLlI7aWYoUiYmUi5Gb250cyYmKDEhPVMuci5sZW5ndGh8''@;'; put 'put ''fDAhPVMuclswXS5pY2gpKXtTLlI9W107dmFyIGs9MCxHPVMucltrXSxRPVMucltrKzFdO2ZvcihHLmljaD4wJiZTLlIucHVzaCh7dDoicyIsdjpTLnQuc2xpY2UoMCxHLmljaCl9KTtrPFMuci5sZW5ndGgtMTsrK2spUy5SLnB1c2goe3Q6InMiLHY6Uy50LnNsaWNlKChHPVMucltrXSkuaWNo''@;'; put 'put ''LChRPVMucltrKzFdKS5pY2gpLHM6Ui5Gb250c1tHLmlmbnRdfSk7cmV0dXJuIFMuUi5wdXNoKHt0OiJzIix2OlMudC5zbGljZSgoUXx8RykuaWNoKSxzOlIuRm9udHNbKFF8fEcpLmlmbnRdfSksUy5SfX0oS3QsZ2UpKTticmVhaztjYXNlImIiOmF0LnY9ISFrclsxXTticmVhaztjYXNlImUi''@;'; put 'put ''OmF0LnY9a3JbMV0sITEhPT1wZS5jZWxsVGV4dCYmKGF0Lnc9TWNbYXQudl0pO2JyZWFrO2Nhc2Uic3RyIjphdC50PSJzIixhdC52PWtyWzFdfWlmKChidD1nZS5DZWxsWGZba3JbMF0uaVN0eWxlUmVmXSkmJkozKGF0LGJ0Lm51bUZtdElkLGJ0LmZpbGxJZCxidC5mb250SWQsYnQuYm9yZGVy''@;'; put 'put ''SWQscGUsMCxnZSkscGUuY2VsbFN0eWxlcyYmYXQucyYmYnQuYWxpZ25tZW50JiYoYXQucy5hbGlnbm1lbnQ9cXQoYnQuYWxpZ25tZW50KSksa3Q9LTE9PWtyWzBdLmM/a3QrMTprclswXS5jLHBlLmRlbnNlPyh5ZVtqdF18fCh5ZVtqdF09W10pLHllW2p0XVtrdF09YXQpOnllW1RhKGt0KStU''@;'; put 'put ''bl09YXQscGUuY2VsbEZvcm11bGEpe2ZvcihYbj0hMSxscj0wO2xyPEJuLmxlbmd0aDsrK2xyKXt2YXIgX3I9Qm5bbHJdO0V0LnI+PV9yWzBdLnMuciYmRXQucjw9X3JbMF0uZS5yJiZrdD49X3JbMF0ucy5jJiZrdDw9X3JbMF0uZS5jJiYoYXQuRj1yYShfclswXSksWG49ITApfSFYbiYma3Iu''@;'; put 'put ''bGVuZ3RoPjMmJihhdC5mPWtyWzNdKX1pZihOZS5zLnI+RXQuciYmKE5lLnMucj1FdC5yKSxOZS5zLmM+a3QmJihOZS5zLmM9a3QpLE5lLmUucjxFdC5yJiYoTmUuZS5yPUV0LnIpLE5lLmUuYzxrdCYmKE5lLmUuYz1rdCkscGUuY2VsbERhdGVzJiZidCYmIm4iPT1hdC50JiZBLmlzX2RhdGUo''@;'; put 'put ''QS5fdGFibGVbYnQubnVtRm10SWRdKSl7dmFyIEZuPUEucGFyc2VfZGF0ZV9jb2RlKGF0LnYpO0ZuJiYoYXQudD0iZCIsYXQudj1uZXcgRGF0ZShGbi55LEZuLm0tMSxGbi5kLEZuLkgsRm4uTSxGbi5TLEZuLnUpKX1icmVhaztjYXNlIDE6Y2FzZSAxMjppZighcGUuc2hlZXRTdHVic3x8ZXQp''@;'; put 'put ''YnJlYWs7YXQ9e3Q6InoiLHY6dm9pZCAwfSxrdD0tMT09a3JbMF0uYz9rdCsxOmtyWzBdLmMsKGJ0PWdlLkNlbGxYZltrclswXS5pU3R5bGVSZWZdKSYmSjMoYXQsYnQubnVtRm10SWQsYnQuZmlsbElkLGJ0LmZvbnRJZCxidC5ib3JkZXJJZCxwZSwwLGdlKSxwZS5jZWxsU3R5bGVzJiZhdC5z''@;'; put 'put ''JiZidC5hbGlnbm1lbnQmJihhdC5zLmFsaWdubWVudD1xdChidC5hbGlnbm1lbnQpKSxwZS5kZW5zZT8oeWVbanRdfHwoeWVbanRdPVtdKSx5ZVtqdF1ba3RdPWF0KTp5ZVtUYShrdCkrVG5dPWF0LE5lLnMucj5FdC5yJiYoTmUucy5yPUV0LnIpLE5lLnMuYz5rdCYmKE5lLnMuYz1rdCksTmUu''@;'; put 'put ''ZS5yPEV0LnImJihOZS5lLnI9RXQuciksTmUuZS5jPGt0JiYoTmUuZS5jPWt0KTticmVhaztjYXNlIDE3NjpTbi5wdXNoKGtyKTticmVhaztjYXNlIDQ5NDp2YXIganI9R1siIWlkIl1ba3IucmVsSWRdO2Zvcihqcj8oa3IuVGFyZ2V0PWpyLlRhcmdldCxrci5sb2MmJihrci5UYXJnZXQrPSIj''@;'; put 'put ''Iitrci5sb2MpLGtyLlJlbD1qcik6IiI9PWtyLnJlbElkJiYoa3IuVGFyZ2V0PSIjIitrci5sb2MpLGp0PWtyLnJmeC5zLnI7anQ8PWtyLnJmeC5lLnI7KytqdClmb3Ioa3Q9a3IucmZ4LnMuYztrdDw9a3IucmZ4LmUuYzsrK2t0KXBlLmRlbnNlPyh5ZVtqdF18fCh5ZVtqdF09W10pLHllW2p0''@;'; put 'put ''XVtrdF18fCh5ZVtqdF1ba3RdPXt0OiJ6Iix2OnZvaWQgMH0pLHllW2p0XVtrdF0ubD1rcik6KE90PXFpKHtjOmt0LHI6anR9KSx5ZVtPdF18fCh5ZVtPdF09e3Q6InoiLHY6dm9pZCAwfSkseWVbT3RdLmw9a3IpO2JyZWFrO2Nhc2UgNDI2OmlmKCFwZS5jZWxsRm9ybXVsYSlicmVhaztCbi5w''@;'; put 'put ''dXNoKGtyKSwocnI9cGUuZGVuc2U/eWVbanRdW2t0XTp5ZVtUYShrdCkrVG5dKS5mPXMwKGtyWzFdLE5lLHtyOkV0LnIsYzprdH0sYnIscGUpLHJyLkY9cmEoa3JbMF0pO2JyZWFrO2Nhc2UgNDI3OmlmKCFwZS5jZWxsRm9ybXVsYSlicmVhaztmcltxaShrclswXS5zKV09a3JbMV0sKHJyPXBl''@;'; put 'put ''LmRlbnNlP3llW2p0XVtrdF06eWVbVGEoa3QpK1RuXSkuZj1zMChrclsxXSxOZSx7cjpFdC5yLGM6a3R9LGJyLHBlKTticmVhaztjYXNlIDYwOmlmKCFwZS5jZWxsU3R5bGVzKWJyZWFrO2Zvcig7a3IuZT49a3IuczspTWlba3IuZS0tXT17d2lkdGg6a3Iudy8yNTYsaGlkZGVuOiEhKDEma3Iu''@;'; put 'put ''ZmxhZ3MpLGxldmVsOmtyLmxldmVsfSxuYXx8KG5hPSEwKSxRMChNaVtrci5lKzFdKTticmVhaztjYXNlIDE2MTp5ZVsiIWF1dG9maWx0ZXIiXT17cmVmOnJhKGtyKX07YnJlYWs7Y2FzZSA0NzY6eWVbIiFtYXJnaW5zIl09a3I7YnJlYWs7Y2FzZSAxNDc6US5TaGVldHNba118fChRLlNoZWV0''@;'; put 'put ''c1trXT17fSksa3IubmFtZSYmKFEuU2hlZXRzW2tdLkNvZGVOYW1lPWtyLm5hbWUpLChrci5hYm92ZXx8a3IubGVmdCkmJih5ZVsiIW91dGxpbmUiXT17YWJvdmU6a3IuYWJvdmUsbGVmdDprci5sZWZ0fSk7YnJlYWs7Y2FzZSAxMzc6US5WaWV3c3x8KFEuVmlld3M9W3t9XSksUS5WaWV3c1sw''@;'; put 'put ''XXx8KFEuVmlld3NbMF09e30pLGtyLlJUTCYmKFEuVmlld3NbMF0uUlRMPSEwKSxrci5ncmlkfHwoUS5WaWV3c1swXS5ncmlkPSExLHllWyIhZ3JpZGxpbmVzIl09ITEpO2JyZWFrO2Nhc2UgNDg1OnllWyIhc2hlZXRGb3JtYXQiXT1rcjticmVhaztjYXNlIDY0OmNhc2UgMTA1MzohZnVuY3Rp''@;'; put 'put ''b24gSmooUyxSLGssRyl7aWYoUil7dmFyIFE9e3JlZjpSLnNxcmZ4LHQ6Ui50fTtSLm9wJiYoUS5vcD1SLm9wKTt2YXIgb2U9IiIsZ2U9IiIscGU9Ui5zcXJmeD8ic3RyaW5nIj09dHlwZW9mIFIuc3FyZng/b28oUi5zcXJmeC5zcGxpdCgiLCIpWzBdKTpSLnNxcmZ4Om51bGw7aWYoUi5mMSYm''@;'; put 'put ''KG9lPXMwKFIuZjEscGUsbnVsbCxrLEcsITApKSxSLmYyJiYoZ2U9czAoUi5mMixwZSxudWxsLGssRywhMCkpLFIub3AmJlsiSU4iLCJPVCJdLmluZGV4T2YoUi5vcCk+PS0xKVEubWluPW9lLFEubWF4PWdlO2Vsc2UgaWYoUi5vcClRLnY9b2U7ZWxzZSB0cnl7c3dpdGNoKFIudCl7Y2FzZSJM''@;'; put 'put ''aXN0IjppZigiUHRnU3RyIj09PVIuZjFbMF1bMF1bMF0mJjE9PVIuZjFbMF0ubGVuZ3RoKXtRLmw9Ui5mMVswXVswXVsxXS5zcGxpdCgiLCIpO2JyZWFrfWNhc2UiQ3VzdG9tIjpRLmY9b2V9fWNhdGNoe31TWyIhdmFsaWRhdGlvbnMiXXx8KFNbIiF2YWxpZGF0aW9ucyJdPVtdKSxTWyIhdmFs''@;'; put 'put ''aWRhdGlvbnMiXS5wdXNoKFEpfX0oeWUsa3IsYnIscGUpO2JyZWFrO2Nhc2UgMTUxOnllWyIhZnJlZXplIl09a3JbMF07YnJlYWs7Y2FzZSAxNTI6eWVbIiFzZWwiXT1rcjticmVhaztjYXNlIDE3NTpjYXNlIDY0NDpjYXNlIDYyNTpjYXNlIDU2MjpjYXNlIDM5NjpjYXNlIDExMTI6Y2FzZSAx''@;'; put 'put ''MTQ2OmNhc2UgNDcxOmNhc2UgMTA1MDpjYXNlIDY0OTpjYXNlIDExMDU6Y2FzZSA0OTpjYXNlIDU4OTpjYXNlIDYwNzpjYXNlIDU2NDpjYXNlIDEwNTU6Y2FzZSAxNjg6Y2FzZSAxNzQ6Y2FzZSAxMTgwOmNhc2UgNDk5OmNhc2UgNTA3OmNhc2UgNTUwOmNhc2UgMTcxOmNhc2UgMTY3OmNhc2Ug''@;'; put 'put ''MTE3NzpjYXNlIDE2OTpjYXNlIDExODE6Y2FzZSA1NTE6Y2FzZSA1NTI6Y2FzZSA2NjE6Y2FzZSA2Mzk6Y2FzZSA0Nzg6Y2FzZSA1Mzc6Y2FzZSA0Nzc6Y2FzZSA1MzY6Y2FzZSAxMTAzOmNhc2UgNjgwOmNhc2UgMTEwNDpjYXNlIDEwMjQ6Y2FzZSA2NjM6Y2FzZSA1MzU6Y2FzZSA2Nzg6Y2Fz''@;'; put 'put ''ZSA1MDQ6Y2FzZSAxMDQzOmNhc2UgNDI4OmNhc2UgMTcwOmNhc2UgMzA3MjpjYXNlIDUwOmNhc2UgMjA3MDpjYXNlIDEwNDU6YnJlYWs7Y2FzZSAzNTpldD0hMDticmVhaztjYXNlIDM2OmV0PSExO2JyZWFrO2Nhc2UgMzc6WWUucHVzaChWbiksZXQ9ITA7YnJlYWs7Y2FzZSAzODpZZS5wb3Ao''@;'; put 'put ''KSxldD0hMTticmVhaztkZWZhdWx0OmlmKCEoKFZufHwiIikuaW5kZXhPZigiQmVnaW4iKT4wKSYmISgoVm58fCIiKS5pbmRleE9mKCJFbmQiKT4wKSYmKCFldHx8cGUuV1RGJiYiQnJ0QUNCZWdpbiIhPVllW1llLmxlbmd0aC0xXSkpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIHJlY29y''@;'; put 'put ''ZCAiK0JyKyIgIitWbil9fSxwZSksZGVsZXRlIHBlLnN1cGJvb2tzLGRlbGV0ZSBwZVsiIXJvdyJdLCF5ZVsiIXJlZiJdJiYoTmUucy5yPDJlNnx8UGUmJihQZS5lLnI+MHx8UGUuZS5jPjB8fFBlLnMucj4wfHxQZS5zLmM+MCkpJiYoeWVbIiFyZWYiXT1yYShQZXx8TmUpKSxwZS5zaGVldFJv''@;'; put 'put ''d3MmJnllWyIhcmVmIl0pe3ZhciBjYT1vbyh5ZVsiIXJlZiJdKTtwZS5zaGVldFJvd3M8PStjYS5lLnImJihjYS5lLnI9cGUuc2hlZXRSb3dzLTEsY2EuZS5yPk5lLmUuciYmKGNhLmUucj1OZS5lLnIpLGNhLmUucjxjYS5zLnImJihjYS5zLnI9Y2EuZS5yKSxjYS5lLmM+TmUuZS5jJiYoY2Eu''@;'; put 'put ''ZS5jPU5lLmUuYyksY2EuZS5jPGNhLnMuYyYmKGNhLnMuYz1jYS5lLmMpLHllWyIhZnVsbHJlZiJdPXllWyIhcmVmIl0seWVbIiFyZWYiXT1yYShjYSkpfXJldHVybiBTbi5sZW5ndGg+MCYmKHllWyIhbWVyZ2VzIl09U24pLE1pLmxlbmd0aD4wJiYoeWVbIiFjb2xzIl09TWkpLEZpLmxlbmd0''@;'; put 'put ''aD4wJiYoeWVbIiFyb3dzIl09RmkpLHllfShTLEcsayxRLG9lLDAscGUpOmZ1bmN0aW9uIGg4KFMsUixrLEcsUSxvZSxnZSl7aWYoIVMpcmV0dXJuIFM7R3x8KEc9eyIhaWQiOnt9fSksbnVsbCE9bGUmJm51bGw9PVIuZGVuc2UmJihSLmRlbnNlPWxlKTt2YXIgcGU9Ui5kZW5zZT9bXTp7fSx5''@;'; put 'put ''ZT17czp7cjoyZTYsYzoyZTZ9LGU6e3I6MCxjOjB9fSxQZT0iIixOZT0iIixZZT1TLm1hdGNoKHZEKTtZZT8oUGU9Uy5zbGljZSgwLFllLmluZGV4KSxOZT1TLnNsaWNlKFllLmluZGV4K1llWzBdLmxlbmd0aCkpOlBlPU5lPVM7dmFyIGV0PU5lLmxhc3RJbmRleE9mKCJleHRMc3QiKSxFdD0o''@;'; put 'put ''LTE9PWV0fHxOZS5zbGljZShldCksUGUubWF0Y2goX0QpKTtFdD9jYihFdFswXSwwLFEsayk6KEV0PVBlLm1hdGNoKENEKSkmJmZ1bmN0aW9uIG9qKFMsUixrLEcsUSxvZSxnZSl7Y2IoUy5zbGljZSgwLFMuaW5kZXhPZigiPiIpKSwwLEcsUSk7dmFyIHBlPVIubWF0Y2gobVMpO2lmKHBlKXt2''@;'; put 'put ''YXIgUGU9Z2sodnIocGVbMF0pLG9lLGdlKTtrWyIhdGFiY29sb3IiXT1QZX1pZigocGU9Ui5tYXRjaChpaikpJiZ2cihwZVswXSkuZml0VG9QYWdlJiYoa1siIXByaW50Il18fChrWyIhcHJpbnQiXT17fSksa1siIXByaW50Il0ucHJvcHN8fChrWyIhcHJpbnQiXS5wcm9wcz17fSksa1siIXBy''@;'; put 'put ''aW50Il0ucHJvcHMuZml0fHwoa1siIXByaW50Il0ucHJvcHMuZml0PXt9KSxudWxsPT1rWyIhcHJpbnQiXS5wcm9wcy5maXQuaGVpZ2h0JiYoa1siIXByaW50Il0ucHJvcHMuZml0LmhlaWdodD0xKSxudWxsPT1rWyIhcHJpbnQiXS5wcm9wcy5maXQud2lkdGgmJihrWyIhcHJpbnQiXS5wcm9w''@;'; put 'put ''cy5maXQud2lkdGg9MSkpLHBlPVIubWF0Y2goYWopKXtrWyIhb3V0bGluZSJdPXt9O3ZhciBZZT12cihwZVswXSk7WWUuc3VtbWFyeUJlbG93JiYoa1siIW91dGxpbmUiXS5hYm92ZT0hdGkoWWUuc3VtbWFyeUJlbG93KSksWWUuc3VtbWFyeVJpZ2h0JiYoa1siIW91dGxpbmUiXS5sZWZ0PSF0''@;'; put 'put ''aShZZS5zdW1tYXJ5UmlnaHQpKX19KEV0WzBdLEV0WzFdfHwiIixwZSxRLGssZ2Usb2UpO3ZhciBhdD0oUGUubWF0Y2goLzwoPzpcdyo6KT9kaW1lbnNpb24vKXx8e2luZGV4Oi0xfSkuaW5kZXg7aWYoYXQ+MCl7dmFyIGJ0PVBlLnNsaWNlKGF0LGF0KzUwKS5tYXRjaChzYik7YnQmJighUnx8''@;'; put 'put ''IVIubm9kaW0pJiZmdW5jdGlvbiBjUyhTLFIpe3ZhciBrPW9vKFIpO2sucy5yPD1rLmUuciYmay5zLmM8PWsuZS5jJiZrLnMucj49MCYmay5zLmM+PTAmJihTWyIhcmVmIl09cmEoaykpfShwZSxidFsxXSl9dmFyIGp0PVBlLm1hdGNoKFJvKTtqdCYmanRbMV0mJmZ1bmN0aW9uIENqKFMsUixr''@;'; put 'put ''LEcpe2suVmlld3N8fChrLlZpZXdzPVt7fV0pO3ZhciBRPTA7Uy5yZXBsYWNlKFNTLGZ1bmN0aW9uKG9lLGdlKXt2YXIgcGU9dnIob2UpO2lmKGsuVmlld3NbR118fChrLlZpZXdzW0ddPXt9KSx0aShwZS5yaWdodFRvTGVmdCkmJihrLlZpZXdzW0ddLlJUTD0hMCkscGUuc2hvd0dyaWRMaW5l''@;'; put 'put ''cyYmKGsuVmlld3NbR10uZ3JpZD10aShwZS5zaG93R3JpZExpbmVzKSxudWxsPT1SWyIhZ3JpZGxpbmVzIl0mJihSWyIhZ3JpZGxpbmVzIl09dGkocGUuc2hvd0dyaWRMaW5lcykpKSwrcGUuem9vbVNjYWxlJiYoay5WaWV3c1tHXS56b29tPStwZS56b29tU2NhbGUpLHBlLnZpZXcmJihrLlZp''@;'; put 'put ''ZXdzW0ddLnZpZXc9cGUudmlldyksMT09KytRJiYiLz4iIT1vZS5zbGljZSgtMikpe3ZhciB5ZT1TLnNsaWNlKGdlK29lLmxlbmd0aCksUGU9eWUubWF0Y2goLzxcLyg/Olx3Oik/c2hlZXRWaWV3KD86W14+YS16XVtePl0qKT9cLz8+Lyk7aWYoIVBlKXJldHVybiIiO3ZhciBOZT0oeWU9eWUu''@;'; put 'put ''c2xpY2UoMCxQZS5pbmRleCkpLm1hdGNoKC88KD86XHc6KT9wYW5lKD86W14+YS16XVtePl0qKT9cLz8+Lyk7aWYoTmUpe3ZhciBZZT12cihOZVswXSk7ImZyb3plbiI9PVllLnN0YXRlP1JbIiFmcmVlemUiXT1UYSgrWWUueFNwbGl0fHwwKStqaSgrWWUueVNwbGl0fHwwKTpZZS50b3BMZWZ0''@;'; put 'put ''Q2VsbCYmKFJbIiFmcmVlemUiXT1ZZS50b3BMZWZ0Q2VsbCl9dmFyIGV0PXllLm1hdGNoKC88KD86XHc6KT9zZWxlY3Rpb24oPzpbXj5hLXpdW14+XSopP1wvPz4vKTtpZihldCl7dmFyIGN0PXZyKGV0WzBdKTtpZihjdC5hY3RpdmVDZWxsJiYoUlsiIXNlbCJdPXtjZWxsOmN0LmFjdGl2ZUNl''@;'; put 'put ''bGx9KSxjdC5zcXJlZil7dmFyIEV0PWN0LnNxcmVmLnJlcGxhY2UoL1xzLiokLywiIik7UlsiIXNlbCJdfHwoUlsiIXNlbCJdPXtjZWxsOnFpKE1zKEV0KS5zKX0pLFJbIiFzZWwiXS5yYW5nZT1jdC5zcXJlZn19fXJldHVybiIifSl9KGp0WzFdLHBlLFEsayk7dmFyIGt0PVBlLm1hdGNoKEdl''@;'; put 'put ''KSxPdD1bXTtpZihSLmNlbGxTdHlsZXMpe3ZhciBLdD1QZS5tYXRjaCh0aik7S3QmJmZ1bmN0aW9uIHlTKFMsUixrKXtmb3IodmFyIEc9ITEsUT0wO1EhPVIubGVuZ3RoOysrUSl7dmFyIG9lPXZyKFJbUV0sITApO29lLmhpZGRlbiYmKG9lLmhpZGRlbj10aShvZS5oaWRkZW4pKTt2YXIgZ2U9''@;'; put 'put ''cGFyc2VJbnQob2UubWluLDEwKS0xLHBlPXBhcnNlSW50KG9lLm1heCwxMCktMTtmb3Iob2Uub3V0bGluZUxldmVsJiYob2UubGV2ZWw9K29lLm91dGxpbmVMZXZlbHx8MCksZGVsZXRlIG9lLm1pbixkZWxldGUgb2UubWF4LG9lLndpZHRoPStvZS53aWR0aCwhRyYmb2Uud2lkdGgmJihHPSEw''@;'; put 'put ''KSxRMChvZSksb2Uuc3R5bGUmJihvZS5zPW04KG9lLnN0eWxlLGspKTtnZTw9cGU7KVNbZ2UrK109cXQob2UpfX0oT3QsS3QsZ2UpfWlmKFllJiZ2OChZZVsxXSxrLHBlLFIseWUsb2UsZ2UpLFIuY2FsbGJhY2spcmV0dXJuIHBlO3ZhciBUbj1OZS5tYXRjaCh3RCk7VG4mJihwZVsiIXByb3Rl''@;'; put 'put ''Y3QiXT1mdW5jdGlvbiBoaihTKXt2YXIgUj12cihTLCEwLCEwKSxrPXt9O2lmKHRpKFIuc2hlZXQpKXJldHVybiBiUy5mb3JFYWNoKGZ1bmN0aW9uKEcpe2tbR109bnVsbCE9UltHXSYmdGkoUltHXSl9KSxMRC5mb3JFYWNoKGZ1bmN0aW9uKEcpe2tbR109bnVsbD09UltHXXx8dGkoUltHXSl9''@;'; put 'put ''KSxSLmFsZ29yaXRobU5hbWUmJihrLmVuY3J5cHRpb249e2FsZ286Ui5hbGdvcml0aG1OYW1lLGhhc2g6Ui5oYXNoVmFsdWUsc2FsdDpSLnNhbHRWYWx1ZSxzcGluOitSLnNwaW5Db3VudHx8MWU1fSksa30oVG5bMF0pKTt2YXIgcnI9TmUubWF0Y2gobmopO3JyJiYocGVbIiFhdXRvZmlsdGVy''@;'; put 'put ''Il09ZnVuY3Rpb24gZ2ooUyl7cmV0dXJue3JlZjooUy5tYXRjaCgvcmVmPSIoW14iXSopIi8pfHxbXSlbMV19fShyclswXSkpO3ZhciBTbj1bXSxscj1OZS5tYXRjaChkOCk7aWYobHIpZm9yKGF0PTA7YXQhPWxyLmxlbmd0aDsrK2F0KVNuW2F0XT1vbyhsclthdF0uc2xpY2UobHJbYXRdLmlu''@;'; put 'put ''ZGV4T2YoJyInKSsxKSk7dmFyIFhuPSgtMT09ZXQ/TmU6TmUuc2xpY2UoMCxldCkpLm1hdGNoKGRTKTtYbiYmKHBlWyIhY29uZGZtdCJdPVtdLmNvbmNhdC5hcHBseShbXSxYbi5tYXAoZnVuY3Rpb24oVm4pe3JldHVybiB2MihWbixSLG9lLGdlKX0pKSksZXQ+LTEmJihYbj1OZS5zbGljZShl''@;'; put 'put ''dCkubWF0Y2goZFMpKSYmKHBlWyIhY29uZGZtdCJdfHwocGVbIiFjb25kZm10Il09W10pLHBlWyIhY29uZGZtdCJdPXBlWyIhY29uZGZtdCJdLmNvbmNhdC5hcHBseShwZVsiIWNvbmRmbXQiXSxYbi5tYXAoZnVuY3Rpb24oVm4pe3JldHVybiB2MihWbixSLG9lLGdlLCEwKX0pKSk7dmFyIEJu''@;'; put 'put ''PSgtMT09ZXQ/TmU6TmUuc2xpY2UoMCxldCkpLm1hdGNoKGZlKTtCbiYmKHBlWyIhdmFsaWRhdGlvbnMiXT13UyhCblswXSxSKSksZXQ+LTEmJihCbj1OZS5zbGljZShldCkubWF0Y2goZmUpKSYmKHBlWyIhdmFsaWRhdGlvbnMiXXx8KHBlWyIhdmFsaWRhdGlvbnMiXT1bXSkscGVbIiF2YWxp''@;'; put 'put ''ZGF0aW9ucyJdPXBlWyIhdmFsaWRhdGlvbnMiXS5jb25jYXQod1MoQm5bMF0sUiwhMCkpKTt2YXIgZnI9TmUubWF0Y2godVMpO2ZyJiZmdW5jdGlvbiBPRChTLFIsayl7Zm9yKHZhciBHPUFycmF5LmlzQXJyYXkoUyksUT0wO1EhPVIubGVuZ3RoOysrUSl7dmFyIG9lPXZyKGdvKFJbUV0pLCEw''@;'; put 'put ''KTtpZighb2UucmVmKXJldHVybjt2YXIgZ2U9KChrfHx7fSlbIiFpZCJdfHxbXSlbb2UuaWRdO2dlPyhvZS5UYXJnZXQ9Z2UuVGFyZ2V0LG9lLmxvY2F0aW9uJiYob2UuVGFyZ2V0Kz0iIyIrUXIob2UubG9jYXRpb24pKSk6KG9lLlRhcmdldD0iIyIrUXIob2UubG9jYXRpb24pLGdlPXtUYXJn''@;'; put 'put ''ZXQ6b2UuVGFyZ2V0LFRhcmdldE1vZGU6IkludGVybmFsIn0pLG9lLlJlbD1nZSxvZS50b29sdGlwJiYob2UuVG9vbHRpcD1vZS50b29sdGlwLGRlbGV0ZSBvZS50b29sdGlwKTtmb3IodmFyIHBlPW9vKG9lLnJlZikseWU9cGUucy5yO3llPD1wZS5lLnI7Kyt5ZSlmb3IodmFyIFBlPXBlLnMu''@;'; put 'put ''YztQZTw9cGUuZS5jOysrUGUpe3ZhciBOZT1xaSh7YzpQZSxyOnllfSk7Rz8oU1t5ZV18fChTW3llXT1bXSksU1t5ZV1bUGVdfHwoU1t5ZV1bUGVdPXt0OiJ6Iix2OnZvaWQgMH0pLFNbeWVdW1BlXS5sPW9lKTooU1tOZV18fChTW05lXT17dDoieiIsdjp2b2lkIDB9KSxTW05lXS5sPW9lKX19''@;'; put 'put ''fShwZSxmcixHKTt2YXIgYnI9TmUubWF0Y2goaFMpO2JyJiZmdW5jdGlvbiBzaihTLFIpe3ZhciBrPXZyKFMsITEsITApO1JbIiFwcmludCJdfHwoUlsiIXByaW50Il09e30pLFJbIiFwcmludCJdLnByb3BzfHwoUlsiIXByaW50Il0ucHJvcHM9e30pO3ZhciBHPVJbIiFwcmludCJdLnByb3Bz''@;'; put 'put ''O2suZ3JpZExpbmVzJiYoRy5ncmlkbGluZXM9dGkoay5ncmlkTGluZXMpKSxudWxsIT1rLmhvcml6b250YWxDZW50ZXJlZCYmKEcuY2VudGVyWD10aShrLmhvcml6b250YWxDZW50ZXJlZCkpLG51bGwhPWsudmVydGljYWxDZW50ZXJlZCYmKEcuY2VudGVyWT10aShrLnZlcnRpY2FsQ2VudGVy''@;'; put 'put ''ZWQpKX0oYnJbMF0scGUpO3ZhciBlcj1OZS5tYXRjaCh5RCk7ZXImJigocGVbIiFwcmludCJdfHwocGVbIiFwcmludCJdPXt9KSkubWFyZ2lucz1wZVsiIW1hcmdpbnMiXT1QRCh2cihlclswXSkpKTt2YXIgTWk9TmUubWF0Y2goTUQpO01pJiZmdW5jdGlvbiBJRChTLFIpe3ZhciBrPXZyKFMs''@;'; put 'put ''ITEsITApO2RlbGV0ZSBrLmlkLGRlbGV0ZSBrWzBdLFJbIiFwcmludCJdfHwoUlsiIXByaW50Il09e30pLFJbIiFwcmludCJdLnByb3BzfHwoUlsiIXByaW50Il0ucHJvcHM9e30pO3ZhciBHPVJbIiFwcmludCJdLnByb3BzO2sub3JpZW50YXRpb24mJihHLm9yaWVudGF0aW9uPWsub3JpZW50''@;'; put 'put ''YXRpb24pLGsuc2NhbGUmJihHLnNjYWxlPStrLnNjYWxlKSwray5maXRUb0hlaWdodD49MCYmKChHLmZpdHx8KEcuZml0PXt9KSkuaGVpZ2h0PStrLmZpdFRvSGVpZ2h0KSwray5maXRUb1dpZHRoPj0wJiYoKEcuZml0fHwoRy5maXQ9e30pKS53aWR0aD0ray5maXRUb1dpZHRoKSxrLnBhcGVy''@;'; put 'put ''SGVpZ2h0JiZrLnBhcGVyV2lkdGg/Ry5wYXBlcj17d2lkdGg6ay5wYXBlcldpZHRoLGhlaWdodDprLnBhcGVySGVpZ2h0fTprLnBhcGVyU2l6ZSYmKEcucGFwZXI9bjhbRy5wYXBlcj0ray5wYXBlclNpemVdfHxHLnBhcGVyKSxrLmhvcml6b250YWxEcGk/Ry5kcGk9K2suaG9yaXpvbnRhbERw''@;'; put 'put ''aTprLnZlcnRpY2FsRHBpJiYoRy5kcGk9K2sudmVydGljYWxEcGkpLCJhdXRvbWF0aWMiIT0oay5maXJzdFBhZ2VOdW1iZXJ8fCJhdXRvbWF0aWMiKSYmKEcuZmlyc3Q9K2suZmlyc3RQYWdlTnVtYmVyKSx0aShrLmJsYWNrQW5kV2hpdGUpJiYoRy5idz0hMCksdGkoay5kcmFmdCkmJihHLmRy''@;'; put 'put ''YWZ0PSEwKSwib3ZlclRoZW5Eb3duIj09ay5wYWdlT3JkZXImJihHLm9yZGVyPSJvdmVyIiksQURbay5jZWxsQ29tbWVudHNdJiYoRy5jb21tZW50cz1BRFtrLmNlbGxDb21tZW50c10pLEREW2suZXJyb3JzXSYmKEcuZXJyb3JzPUREW2suZXJyb3JzXSl9KE1pWzBdLHBlKTt2YXIgRmk9TmUu''@;'; put 'put ''bWF0Y2goajUpO0ZpJiZmdW5jdGlvbiB2aihTLFIpe2lmKFJbIiFwcmludCJdfHwoUlsiIXByaW50Il09e30pLFNbMV0pe3ZhciBrPSIiLEc9MDtTWzFdLnJlcGxhY2UoZW4sZnVuY3Rpb24oUSxvZSl7aWYoIi8iIT1RLmNoYXJBdCgxKSlrPVEuc2xpY2UoMSwtMSksRz1vZStRLmxlbmd0aDtl''@;'; put 'put ''bHNlIGlmKGspe3ZhciBnZT1rLm1hdGNoKC9IZWFkZXIvKT8iaGVhZGVyIjoiZm9vdGVyIixwZT1rLnJlcGxhY2UoL0hlYWRlcnxGb290ZXIvLCIiKTtrPSIiLFJbIiFwcmludCJdW2dlXXx8KFJbIiFwcmludCJdW2dlXT17fSksUlsiIXByaW50Il1bZ2VdW3BlXT1RcihnbyhTWzFdLnNsaWNl''@;'; put 'put ''KEcsb2UpKSl9fSl9fShGaSxwZSk7dmFyIG5hPU5lLm1hdGNoKHJqKTtuYSYmKChwZVsiIXByaW50Il18fChwZVsiIXByaW50Il09e30pKS5yb3dCcmVha3M9cGVbIiFyb3dCcmVha3MiXT1mdW5jdGlvbiBjaihTKXt2YXIgUj1bXTtyZXR1cm4oUy5tYXRjaChGMCl8fFtdKS5mb3JFYWNoKGZ1''@;'; put 'put ''bmN0aW9uKGspe3ZhciBHPXZyKGspO1IucHVzaCh7UjorRy5pZH0pfSksUn0obmFbMF0pKTt2YXIgY2E9TmUubWF0Y2gobGIpO2NhJiYoKHBlWyIhcHJpbnQiXXx8KHBlWyIhcHJpbnQiXT17fSkpLmNvbEJyZWFrcz1wZVsiIWNvbEJyZWFrcyJdPWZ1bmN0aW9uIGtuZShTKXt2YXIgUj1bXTty''@;'; put 'put ''ZXR1cm4oUy5tYXRjaChGMCl8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKGspe3ZhciBHPXZyKGspO1IucHVzaCh7QzorRy5pZH0pfSksUn0oY2FbMF0pKTt2YXIgTGk9W107aWYoKExpPU5lLm1hdGNoKC9kcmF3aW5nIHI6aWQ9IiguKj8pIi8pKSYmKHBlWyIhcmVsIl09TGlbMV0pLChMaT1OZS5t''@;'; put 'put ''YXRjaCgvbGVnYWN5RHJhd2luZyByOmlkPSIoLio/KSIvKSkmJihwZVsiIWxlZ3JlbCJdPUxpWzFdKSwoTGk9TmUubWF0Y2goYkQpKSYmKHBlWyIhY3RybGlkIl09TGkubWFwKGZ1bmN0aW9uKFZuKXtyZXR1cm4gdnIoVm4pfSkpLChMaT1OZS5tYXRjaChTRCkpJiZmdW5jdGlvbiBwUyhTLFIp''@;'; put 'put ''e1NbIiF0YWJsZXJlZnMiXXx8KFNbIiF0YWJsZXJlZnMiXT1bXSksKFIubWF0Y2goZlMpfHxbXSkuZm9yRWFjaChmdW5jdGlvbihrKXtTWyIhdGFibGVyZWZzIl0ucHVzaCh2cihrKS5pZCl9KX0ocGUsTGlbMV0pLFImJlIubm9kaW0mJih5ZS5zLmM9eWUucy5yPTApLCFwZVsiIXJlZiJdJiZ5''@;'; put 'put ''ZS5lLmM+PXllLnMuYyYmeWUuZS5yPj15ZS5zLnImJihwZVsiIXJlZiJdPXJhKHllKSksUi5zaGVldFJvd3M+MCYmcGVbIiFyZWYiXSl7dmFyIGtyPW9vKHBlWyIhcmVmIl0pO1Iuc2hlZXRSb3dzPD0ra3IuZS5yJiYoa3IuZS5yPVIuc2hlZXRSb3dzLTEsa3IuZS5yPnllLmUuciYmKGtyLmUu''@;'; put 'put ''cj15ZS5lLnIpLGtyLmUucjxrci5zLnImJihrci5zLnI9a3IuZS5yKSxrci5lLmM+eWUuZS5jJiYoa3IuZS5jPXllLmUuYyksa3IuZS5jPGtyLnMuYyYmKGtyLnMuYz1rci5lLmMpLHBlWyIhZnVsbHJlZiJdPXBlWyIhcmVmIl0scGVbIiFyZWYiXT1yYShrcikpfXJldHVybiBrdCYmKHBlWyIh''@;'; put 'put ''c2hlZXRGb3JtYXQiXT1mdW5jdGlvbiB4RChTKXt2YXIgUj17fSxrPXt9LEc9ITEsUT17fSxvZT0hMTtyZXR1cm4gUy5kZWZhdWx0Um93SGVpZ2h0JiYoRz0hMCxrLmhwdD1wYXJzZUZsb2F0KFMuZGVmYXVsdFJvd0hlaWdodCkpLFMuemVyb0hlaWdodCYmKEc9ITAsay5oaWRkZW49dGkoUy56''@;'; put 'put ''ZXJvSGVpZ2h0KSksUy5iYXNlQ29sV2lkdGg/KG9lPSEwLFEud2NoPXBhcnNlRmxvYXQoUy5iYXNlQ29sV2lkdGgpKTpTLmRlZmF1bHRDb2xXaWR0aCYmKG9lPSEwLFEud2NoPXBhcnNlRmxvYXQoUy5kZWZhdWx0Q29sV2lkdGgpLTUvVGMpLFMub3V0bGluZUxldmVsQ29sJiYoUi5jb2xvdXRs''@;'; put 'put ''aW5lPXBhcnNlSW50KFMub3V0bGluZUxldmVsQ29sKSksUy5vdXRsaW5lTGV2ZWxSb3cmJihSLnJvd291dGxpbmU9cGFyc2VJbnQoUy5vdXRsaW5lTGV2ZWxSb3cpKSxTLnRoaWNrQm90dG9tJiYoUi5ib3R0aGljaz10aShTLnRoaWNrQm90dG9tKSksUy50aGlja1RvcCYmKFIudG9wdGhpY2s9''@;'; put 'put ''dGkoUy50aGlja1RvcCkpLFMuZHlEZXNjZW50JiYoUi5keURlc2NlbnQ9cGFyc2VGbG9hdChTLmR5RGVzY2VudCkpLEcmJihqdihrKSxSLnJvdz1rKSxvZSYmKFEwKFEpLFIuY29sPVEpLFJ9KHZyKGt0WzBdKSkpLE90Lmxlbmd0aD4wJiYocGVbIiFjb2xzIl09T3QpLFNuLmxlbmd0aD4wJiYo''@;'; put 'put ''cGVbIiFtZXJnZXMiXT1TbiksR1siIWlkIl1bcGVbIiFyZWwiXV0mJihwZVsiIWRyYXdlbCJdPUdbIiFpZCJdW3BlWyIhcmVsIl1dKSxHWyIhaWQiXVtwZVsiIWxlZ3JlbCJdXSYmKHBlWyIhbGVnZHJhd2VsIl09R1siIWlkIl1bcGVbIiFsZWdyZWwiXV0pLChwZVsiIWN0cmxpZCJdfHxbXSku''@;'; put 'put ''Zm9yRWFjaChmdW5jdGlvbihWbil7Vm4ucmVsPUdbIiFpZCJdW1ZuLmlkXX0pLG51bGw9PXBlWyIhZ3JpZGxpbmVzIl0mJihwZVsiIWdyaWRsaW5lcyJdPSEwKSxwZX0oUyxHLGssUSxvZSxnZSxwZSl9KGV0LFIsUSx5ZSxvZVtHXSxQZSxOZSxZZSk7YnJlYWs7Y2FzZSJjaGFydCI6Y3Q9ZnVu''@;'; put 'put ''Y3Rpb24geXooUyxSLGssRyxRLG9lLGdlLHBlKXtyZXR1cm4iLmJpbiI9PT1SLnNsaWNlKC00KT9mdW5jdGlvbiBoeihTLFIsayxHLFEpe2lmKCFTKXJldHVybiBTO0d8fChHPXsiIWlkIjp7fX0pO3ZhciBvZT17IiF0eXBlIjoiY2hhcnQiLCIhZHJhd2VsIjpudWxsLCIhcmVsIjoiIn0sZ2U9''@;'; put 'put ''W10scGU9ITE7cmV0dXJuIHVyKFMsZnVuY3Rpb24oUGUsTmUsWWUpe3N3aXRjaChZZSl7Y2FzZSA1NTA6b2VbIiFyZWwiXT1QZTticmVhaztjYXNlIDY1MTpRLlNoZWV0c1trXXx8KFEuU2hlZXRzW2tdPXt9KSxQZS5uYW1lJiYoUS5TaGVldHNba10uQ29kZU5hbWU9UGUubmFtZSk7YnJlYWs7''@;'; put 'put ''Y2FzZSA1NjI6Y2FzZSA2NTI6Y2FzZSA2Njk6Y2FzZSA2Nzk6Y2FzZSA1NTE6Y2FzZSA1NTI6Y2FzZSA0NzY6Y2FzZSAzMDcyOmJyZWFrO2Nhc2UgMzU6cGU9ITA7YnJlYWs7Y2FzZSAzNjpwZT0hMTticmVhaztjYXNlIDM3OmdlLnB1c2goTmUpO2JyZWFrO2Nhc2UgMzg6Z2UucG9wKCk7YnJl''@;'; put 'put ''YWs7ZGVmYXVsdDppZigoTmV8fCIiKS5pbmRleE9mKCJCZWdpbiIpPjApZ2UucHVzaChOZSk7ZWxzZSBpZigoTmV8fCIiKS5pbmRleE9mKCJFbmQiKT4wKWdlLnBvcCgpO2Vsc2UgaWYoIXBlfHxSLldURil0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgcmVjb3JkICIrWWUrIiAiK05lKX19''@;'; put 'put ''LFIpLEdbIiFpZCJdW29lWyIhcmVsIl1dJiYob2VbIiFkcmF3ZWwiXT1HWyIhaWQiXVtvZVsiIXJlbCJdXSksb2V9KFMsRyxrLFEsb2UpOmZ1bmN0aW9uIHV6KFMsUixrLEcsUSl7aWYoIVMpcmV0dXJuIFM7R3x8KEc9eyIhaWQiOnt9fSk7dmFyIGdlLG9lPXsiIXR5cGUiOiJjaGFydCIsIiFk''@;'; put 'put ''cmF3ZWwiOm51bGwsIiFyZWwiOiIifSxwZT1TLm1hdGNoKF9EKTtwZSYmY2IocGVbMF0sMCxRLGspO3ZhciB5ZT1TLm1hdGNoKHlEKTtyZXR1cm4geWUmJihvZVsiIW1hcmdpbnMiXT1QRCh2cih5ZVswXSkpKSwoZ2U9Uy5tYXRjaCgvZHJhd2luZyByOmlkPSIoLio/KSIvKSkmJihvZVsiIXJl''@;'; put 'put ''bCJdPWdlWzFdKSxHWyIhaWQiXVtvZVsiIXJlbCJdXSYmKG9lWyIhZHJhd2VsIl09R1siIWlkIl1bb2VbIiFyZWwiXV0pLG9lfShTLDAsayxRLG9lKX0oZXQsUixRLHllLG9lW0ddLFBlKTticmVhaztjYXNlIm1hY3JvIjpjdD1mdW5jdGlvbiBfeihTLFIsayxHLFEsb2UsZ2UscGUpe3JldHVy''@;'; put 'put ''biBSLnNsaWNlKC00KSx7IiF0eXBlIjoibWFjcm8ifX0oMCxSKTticmVhaztjYXNlImRpYWxvZyI6Y3Q9ZnVuY3Rpb24gd3ooUyxSLGssRyxRLG9lLGdlLHBlKXtyZXR1cm4gUi5zbGljZSgtNCkseyIhdHlwZSI6ImRpYWxvZyJ9fSgwLFIpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9y''@;'; put 'put ''KCJVbnJlY29nbml6ZWQgc2hlZXQgdHlwZSAiK3BlKX1pZih5ZS5jYWxsYmFjaylyZXR1cm47Z2VbR109Y3QsZnVuY3Rpb24gSnooUyxSLGssRyxRLG9lLGdlLHBlKXtpZihTJiZTWyIhZHJhd2VsIl0pe3ZhciB5ZT1mbihTWyIhZHJhd2VsIl0uVGFyZ2V0LEcpLFBlPVZyKHllKSxOZT1mdW5j''@;'; put 'put ''dGlvbiBMQyhTLFIsayxHLFEpe3ZhciBvZT17Y2hhcnRzOltdLGltYWdlczpbXSxzaGFwZXM6W119O2lmKCFTKXJldHVybiBvZTt2YXIgZ2U9UXx8e307cmV0dXJuKFMubWF0Y2goLzxbXjxdKj8oYWJzb2x1dGVBbmNob3J8b25lQ2VsbEFuY2hvcnx0d29DZWxsQW5jaG9yKS4qPyhhYnNvbHV0''@;'; put 'put ''ZUFuY2hvcnxvbmVDZWxsQW5jaG9yfHR3b0NlbGxBbmNob3IpLio/Pi9nKXx8W10pLmZvckVhY2goZnVuY3Rpb24ocGUpe3ZhciB5ZT0iIixQZT17dHlwZToiIn0sTmU9e30sWWU9ITAsZXQ9ITEsY3Q9ITEsRXQ9ITEsYXQ9e3M6e319LGJ0PS0xLGp0PVtdLGt0PVtdLE90PXtzOnthbGlnbm1l''@;'; put 'put ''bnQ6e2hvcml6b250YWw6ImNlbnRlciIsdmVydGljYWw6ImNlbnRlciJ9fX0sS3Q9IiIsVG49LTEsU249e307cGUucmVwbGFjZShlbixmdW5jdGlvbihscixYbil7anQ9bnVsbDt2YXIgQm49dnIobHIpLGZyPVduKEJuWzBdKS5yZXBsYWNlKC9bXC9dPz4kLywiIik7c3dpdGNoKGZyKXtjYXNl''@;'; put 'put ''IjxjbGllbnREYXRhIjpicmVhaztjYXNlIjxhYnNvbHV0ZUFuY2hvciI6Y2FzZSI8b25lQ2VsbEFuY2hvciI6Y2FzZSI8dHdvQ2VsbEFuY2hvciI6UGUudHlwZT1XbihCblswXSkucmVwbGFjZSgvWzw+XS9nLCIiKTticmVhaztjYXNlIjwvYWJzb2x1dGVBbmNob3IiOmNhc2UiPC9vbmVDZWxs''@;'; put 'put ''QW5jaG9yIjpjYXNlIjwvdHdvQ2VsbEFuY2hvciI6YnJlYWs7Y2FzZSI8cG9zIjpQZS5wb3M9e3g6K0JuLngseTorQm4ueX07YnJlYWs7Y2FzZSI8ZXh0IjpZZSYmKFBlLmV4dD17eDorQm4uY3gseTorQm4uY3l9KTticmVhaztjYXNlIjxmcm9tIjpjYXNlIjx0byI6TmU9e307YnJlYWs7Y2Fz''@;'; put 'put ''ZSI8L2Zyb20iOlllJiYoUGUuZnJvbT1OZSk7YnJlYWs7Y2FzZSI8L3RvIjpZZSYmKFBlLnRvPU5lKTticmVhaztjYXNlIjxjb2wiOmNhc2UiPGNvbE9mZiI6Y2FzZSI8cm93IjpjYXNlIjxyb3dPZmYiOmJ0PVhuK2xyLmxlbmd0aDticmVhaztjYXNlIjwvY29sIjpOZS5jPStwZS5zbGljZShi''@;'; put 'put ''dCxYbik7YnJlYWs7Y2FzZSI8L2NvbE9mZiI6TmUuY09mZj0rcGUuc2xpY2UoYnQsWG4pO2JyZWFrO2Nhc2UiPC9yb3ciOk5lLnI9K3BlLnNsaWNlKGJ0LFhuKTticmVhaztjYXNlIjwvcm93T2ZmIjpOZS5yT2ZmPStwZS5zbGljZShidCxYbik7YnJlYWs7Y2FzZSI8c3AiOnllPSJzaGFwZSIs''@;'; put 'put ''T3QuQW5jaG9yPVBlLG9lLnNoYXBlcy5wdXNoKE90KSxZZT0hMTticmVhaztjYXNlIjwvc3AiOlllPSEwO2JyZWFrO2Nhc2UiPGdyYXBoaWNGcmFtZSI6eWU9ImdyYXBoaWMiLFllPSExO2JyZWFrO2Nhc2UiPC9ncmFwaGljRnJhbWUiOlllPSEwO2JyZWFrO2Nhc2UiPHBpYyI6eWU9InBpY3R1''@;'; put 'put ''cmUiLFllPSExO2JyZWFrO2Nhc2UiPC9waWMiOlllPSEwO2JyZWFrO2Nhc2UiPGdycFNwIjp5ZT0iZ3JvdXBzaGFwZSIsWWU9ITE7YnJlYWs7Y2FzZSI8L2dycFNwIjpZZT0hMDticmVhaztjYXNlIjxncmFwaGljIjpjYXNlIjwvZ3JhcGhpYyI6Y2FzZSI8eGZybSI6Y2FzZSI8L3hmcm0iOmNh''@;'; put 'put ''c2UiPG9mZiI6YnJlYWs7Y2FzZSI8Z3JhcGhpY0RhdGEiOmV0PSEwO2JyZWFrO2Nhc2UiPC9ncmFwaGljRGF0YSI6ZXQ9ITE7YnJlYWs7Y2FzZSI8YmxpcEZpbGwiOmV0PSEwO2JyZWFrO2Nhc2UiPC9ibGlwRmlsbCI6ZXQ9ITE7YnJlYWs7Y2FzZSI8L2JsaXAiOmJyZWFrO2Nhc2UiPHNyY1Jl''@;'; put 'put ''Y3QiOmV0PSEwO2JyZWFrO2Nhc2UiPC9zcmNSZWN0IjpldD0hMTticmVhaztjYXNlIjxub0ZpbGwiOmlmKGN0KWJyZWFrOyI8c3BQciI9PWt0LnNsaWNlKC0xKVswXSYmKE90LnMuZmdDb2xvcj1udWxsKTticmVhaztjYXNlIjwvc29saWRGaWxsIjppZihjdHx8RXQpYnJlYWs7IjxzcFByIj09''@;'; put 'put ''a3Quc2xpY2UoLTIpWzBdP090LnMuZmdDb2xvcj1TbjoiPHJQciI9PWt0LnNsaWNlKC0yKVswXSYma3QuaW5kZXhPZigiPHR4Qm9keSIpPi0xJiYoYXQucy5jb2xvcj1TbiksU249e30sRXQ9ITE7YnJlYWs7Y2FzZSI8cHJzdEdlb20iOiJzaGFwZSI9PXllJiYoT3RbIiFzaGFwZSJdPUJuLnBy''@;'; put 'put ''c3QpO2JyZWFrO2Nhc2UiPC9wcnN0R2VvbSI6Y2FzZSI8YXZMc3QiOmJyZWFrO2Nhc2UiPHR4Qm9keSI6ZXQ9ITAsT3QuUj1bXTticmVhaztjYXNlIjwvdHhCb2R5IjpldD0hMTticmVhaztjYXNlIjxib2R5UHIiOk90LnMuYWxpZ25tZW50LnZlcnRpY2FsPXBCW0JuLmFuY2hvcnx8InQiXXx8''@;'; put 'put ''InRvcCI7YnJlYWs7Y2FzZSI8bHN0U3R5bGUiOmJyZWFrO2Nhc2UiPHQiOlRuPVhuK2xyLmxlbmd0aDticmVhaztjYXNlIjxiciI6Y2FzZSI8YnIvPiI6S3QrPSJcbiI7YnJlYWs7Y2FzZSI8L3QiOkt0Kz1wZS5zbGljZShUbixYbik7YnJlYWs7Y2FzZSI8cFByIjpPdC5zLmFsaWdubWVudC5o''@;'; put 'put ''b3Jpem9udGFsfHwoT3Qucy5hbGlnbm1lbnQuaG9yaXpvbnRhbD1QNVtCbi5hbGdufHwibCJdfHwibGVmdCIpLGt0LmluZGV4T2YoIjx0eEJvZHkiKT4tMSYmKGF0LnMuYWxpZ25tZW50Lmhvcml6b250YWw9UDVbQm4uYWxnbnx8ImwiXXx8ImxlZnQiKTticmVhaztjYXNlIjxyUHIiOkJuLnN6''@;'; put 'put ''JiZrdC5pbmRleE9mKCI8dHhCb2R5Iik+LTEmJihPdC5zLnN6PWF0LnMuc3o9K0JuLnN6LzEwMCk7YnJlYWs7Y2FzZSI8cCI6S3Q9IiIsYXQ9e3Q6InMiLHY6IiIsczp7YWxpZ25tZW50Ont9fX07YnJlYWs7Y2FzZSI8L3AiOiJzaGFwZSI9PXllJiZrdC5pbmRleE9mKCI8dHhCb2R5Iik+LTEm''@;'; put 'put ''JihPdC52PShPdC52fHwiIikrS3QsYXQudj1LdCxPdC5SLnB1c2goYXQpKTticmVhaztjYXNlIjxsYXRpbiI6Qm4udHlwZWZhY2UmJmt0LmluZGV4T2YoIjx0eEJvZHkiKT4tMSYmKGF0LnMubmFtZT1Cbi50eXBlZmFjZSk7YnJlYWs7Y2FzZSI8c3R5bGUiOmV0PSEwLGN0PSEwO2JyZWFrO2Nh''@;'; put 'put ''c2UiPC9zdHlsZSI6ZXQ9ITEsY3Q9ITE7YnJlYWs7Y2FzZSI8bG5SZWYiOmNhc2UiPGZpbGxSZWYiOmNhc2UiPGVmZmVjdFJlZiI6Y2FzZSI8Zm9udFJlZiI6YnJlYWs7Y2FzZSI8L2ZpbGxSZWYiOiFjdCYmInNoYXBlIj09eWUmJihPdC5zLmZnQ29sb3I9U24pLFNuPXt9O2JyZWFrO2Nhc2Ui''@;'; put 'put ''PC9mb250UmVmIjohY3QmJiJzaGFwZSI9PXllJiYoT3Qucy5jb2xvcj1TbiksU249e307YnJlYWs7Y2FzZSI8c2NoZW1lQ2xyIjp2YXIgYnI9e2JnMToibHQxIixiZzI6Imx0MiIsdHgxOiJkazEiLHR4MjoiZGsyIn1bQm4udmFsXXx8Qm4udmFsLGVyPSgoRy50aGVtZUVsZW1lbnRzfHx7fSku''@;'; put 'put ''Y2xyU2NoZW1lfHxbXSkuZmluZChmdW5jdGlvbihGaSl7cmV0dXJuIEZpLm5hbWU9PWJyfSk7ZXI/U24ucmdiPWVyLnJnYjpFdD0hMDticmVhaztjYXNlIjxzY3JnYkNsciI6RXQ9ITA7YnJlYWs7Y2FzZSI8c3JnYkNsciI6U24ucmdiPUJuLnZhbC5zbGljZSgtNik7YnJlYWs7Y2FzZSI8aHNs''@;'; put 'put ''Q2xyIjpjYXNlIjxzeXNDbHIiOmNhc2UiPHByc3RDbHIiOkV0PSEwO2JyZWFrO2Nhc2UiPGNoYXJ0IjpqdD1vZS5jaGFydHM7dmFyIE1pPUJuLmlkO2Nhc2UiPGJsaXAiOmp0fHwoanQ9b2UuaW1hZ2VzLE1pPUJuLmVtYmVkKSxqdC5wdXNoKHtBbmNob3I6UGUsVGFyZ2V0OihSWyIhaWQiXVtN''@;'; put 'put ''aV18fHt9KS5UYXJnZXR9KSxCbi5saW5rJiYoanRbanQubGVuZ3RoLTFdLkxpbms9KFJbIiFpZCJdW0JuLmxpbmtdfHx7fSkuVGFyZ2V0KTticmVhaztjYXNlIjxncnBTcFByIjpldD0hMDticmVhaztjYXNlIjwvZ3JwU3BQciI6ZXQ9ITE7YnJlYWs7Y2FzZSI8bnZHcnBTcFByIjpldD0hMDti''@;'; put 'put ''cmVhaztjYXNlIjwvbnZHcnBTcFByIjpldD0hMTticmVhaztjYXNlIjxzcFByIjpldD0hMDticmVhaztjYXNlIjwvc3BQciI6ZXQ9ITE7YnJlYWs7Y2FzZSI8c3RyZXRjaCI6Y2FzZSI8L3N0cmV0Y2giOmNhc2UiPGZpbGxSZWN0IjpjYXNlIjxudkdyYXBoaWNGcmFtZVByIjpjYXNlIjwvbnZH''@;'; put 'put ''cmFwaGljRnJhbWVQciI6Y2FzZSI8Y052R3JhcGhpY0ZyYW1lUHIiOmNhc2UiPC9jTnZHcmFwaGljRnJhbWVQciI6Y2FzZSI8Z3JhcGhpY0ZyYW1lTG9ja3MiOmNhc2UiPG52UGljUHIiOmNhc2UiPC9udlBpY1ByIjpjYXNlIjxjTnZQaWNQciI6Y2FzZSI8L2NOdlBpY1ByIjpjYXNlIjxwaWNM''@;'; put 'put ''b2NrcyI6Y2FzZSI8Y052R3JwU3BQciI6Y2FzZSI8L2NOdkdycFNwUHIiOmNhc2UiPGdycFNwTG9ja3MiOmNhc2UiPG52U3BQciI6Y2FzZSI8L252U3BQciI6Y2FzZSI8Y052U3BQciI6Y2FzZSI8L2NOdlNwUHIiOmNhc2UiPHNwTG9ja3MiOmJyZWFrO2Nhc2UiPGNOdlByIjpldD0hMDticmVh''@;'; put 'put ''aztjYXNlIjwvY052UHIiOmV0PSExO2JyZWFrO2Nhc2UiPGN4blNwIjpldD0hMDticmVhaztjYXNlIjwvY3huU3AiOmV0PSExO2JyZWFrO2Nhc2UiPGNOdkN4blNwUHIiOmV0PSEwO2JyZWFrO2Nhc2UiPC9jTnZDeG5TcFByIjpldD0hMTticmVhaztjYXNlIjxudkN4blNwUHIiOmNhc2UiPC9u''@;'; put 'put ''dkN4blNwUHIiOmJyZWFrO2Nhc2UiPGV4dExzdCI6ZXQ9ITAsY3Q9ITA7YnJlYWs7Y2FzZSI8L2V4dExzdCI6ZXQ9ITEsY3Q9ITE7YnJlYWs7Y2FzZSI8L2V4dCI6YnJlYWs7ZGVmYXVsdDppZihnZSYmZ2UuV1RGJiYhZXQpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgIitCblswXSsi''@;'; put 'put ''IGluIGRyYXdpbmciKX1yZXR1cm4iPC8iPT1mci5zbGljZSgwLDIpP2t0LnBvcCgpOiIvPiIhPWxyLnNsaWNlKGxyLmxlbmd0aC0yKSYma3QucHVzaChmciksIiJ9KX0pLG9lfShucihrLHllLCEwKSxiZihucihrLFBlLCEwKSx5ZSksMCxwZSxRKTtpZihOZSl7aWYoTmUuY2hhcnRzKWZvcih2''@;'; put 'put ''YXIgWWU9MDtZZTxOZS5jaGFydHMubGVuZ3RoOysrWWUpe3ZhciBldD1OZS5jaGFydHNbWWVdLGN0PWZuKGV0LlRhcmdldCx5ZSksRXQ9VnIoY3QpLGF0PSJjaGFydCI9PVImJjA9PVllLGJ0PWIyKG5yKGssY3QsITApLDAsMCxiZihucihrLEV0LCEwKSxjdCksMCxhdD9TOm51bGwsZXQsYXQ/''@;'; put 'put ''bnVsbDpTKTthdHx8KFNbIiFjaGFydHMiXXx8KFNbIiFjaGFydHMiXT1bXSksU1siIWNoYXJ0cyJdLnB1c2goYnQpKX1pZihRLmJvb2tJbWFnZXMmJk5lLmltYWdlcylmb3IodmFyIGp0PTA7anQ8TmUuaW1hZ2VzLmxlbmd0aDsrK2p0KXt2YXIga3Q9TmUuaW1hZ2VzW2p0XSxPdD17IiF0eXBl''@;'; put 'put ''IjoiaW1hZ2UiLCIhcG9zIjpGayhrdC5BbmNob3IpLCIhcG9zVHlwZSI6a3QuQW5jaG9yLnR5cGUucmVwbGFjZSgvQW5jaG9yLywiIiksIiFhYnNwb3MiOkw1KGt0LkFuY2hvcixTKSwiIXJlbHBvcyI6QUMoa3QuQW5jaG9yLFMpfTtpZihrdC5UYXJnZXQmJihPdFsiIXBhdGgiXT1mbihrdC5U''@;'; put 'put ''YXJnZXQseWUpLE90WyIhZGF0YSJdPVR0KGssT3RbIiFwYXRoIl0pLE90WyIhZGF0YXR5cGUiXT0ic3RyaW5nIj09dHlwZW9mIE90WyIhZGF0YSJdPyJiaW5hcnkiOiJidWZmZXIiKSxrdC5MaW5rJiYoT3RbIiFkYXRhdHlwZSJdfHwoT3RbIiFkYXRhdHlwZSJdPSJyZW1vdGUiKSxPdFsiIWxp''@;'; put 'put ''bmsiXT1rdC5MaW5rKSwhT3RbIiFkYXRhdHlwZSJdKXRocm93IkltYWdlIGRhdGEgY2Fubm90IGJlIGZvdW5kIjtTWyIhaW1hZ2VzIl18fChTWyIhaW1hZ2VzIl09W10pLFNbIiFpbWFnZXMiXS5wdXNoKE90KX12YXIgS3QsVG47aWYoTmUuc2hhcGVzKWZvcih2YXIgU249MDtTbjxOZS5zaGFw''@;'; put 'put ''ZXMubGVuZ3RoOysrU24pVG49eyIhdHlwZSI6InNoYXBlIiwiIXBvcyI6TDUoKEt0PU5lLnNoYXBlc1tTbl0pLkFuY2hvcixTKSwiIXBvc1R5cGUiOkt0LkFuY2hvci50eXBlLnJlcGxhY2UoL0FuY2hvci8sIiIpLCIhYWJzcG9zIjpMNShLdC5BbmNob3IsUyksIiFyZWxwb3MiOkFDKEt0LkFu''@;'; put 'put ''Y2hvcixTKX0sWyJ2IiwiIXNoYXBlIiwicyIsIlIiXS5mb3JFYWNoKHJyKSxTWyIhc2hhcGVzIl18fChTWyIhc2hhcGVzIl09W10pLFNbIiFzaGFwZXMiXS5wdXNoKFRuKX19ZnVuY3Rpb24gcnIobHIpe0t0W2xyXSYmKFRuW2xyXT1LdFtscl0pfX0oY3QscGUsUyxSLHllLDAsMCxOZSk7dmFy''@;'; put 'put ''IEV0PVtdO3JldHVybiBvZSYmb2VbR10mJk9lKG9lW0ddKS5mb3JFYWNoKGZ1bmN0aW9uKGF0KXtpZihvZVtHXVthdF0uVHlwZT09S2EuQ01OVCl7dmFyIGJ0PWZuKG9lW0ddW2F0XS5UYXJnZXQsUik7aWYoIShFdD1mdW5jdGlvbiB4eihTLFIsayl7cmV0dXJuIi5iaW4iPT09Ui5zbGljZSgt''@;'; put 'put ''NCk/ZnVuY3Rpb24gZWIoUyxSKXt2YXIgaz1bXSxHPVtdLFE9e30sb2U9ITE7cmV0dXJuIHVyKFMsZnVuY3Rpb24ocGUseWUsUGUpe3N3aXRjaChQZSl7Y2FzZSA2MzI6Ry5wdXNoKHBlKTticmVhaztjYXNlIDYzNTpRPXBlO2JyZWFrO2Nhc2UgNjM3OlEudD1wZS50LFEuaD1wZS5oLFEucj1w''@;'; put 'put ''ZS5yO2JyZWFrO2Nhc2UgNjM2OmlmKFEuYXV0aG9yPUdbUS5pYXV0aG9yXSxkZWxldGUgUS5pYXV0aG9yLFIuc2hlZXRSb3dzJiZRLnJmeCYmUi5zaGVldFJvd3M8PVEucmZ4LnIpYnJlYWs7US50fHwoUS50PSIiKSxkZWxldGUgUS5yZngsay5wdXNoKFEpO2JyZWFrO2Nhc2UgMzA3MjpjYXNl''@;'; put 'put ''IDM3OmNhc2UgMzg6YnJlYWs7Y2FzZSAzNTpvZT0hMDticmVhaztjYXNlIDM2Om9lPSExO2JyZWFrO2RlZmF1bHQ6aWYoISgoeWV8fCIiKS5pbmRleE9mKCJCZWdpbiIpPjApJiYhKCh5ZXx8IiIpLmluZGV4T2YoIkVuZCIpPjApJiYoIW9lfHxSLldURikpdGhyb3cgbmV3IEVycm9yKCJVbmV4''@;'; put 'put ''cGVjdGVkIHJlY29yZCAiK1BlKyIgIit5ZSl9fSksa30oUyxrKTpmdW5jdGlvbiB6ayhTLFIpe2lmKFMubWF0Y2goLzwoPzpcdys6KT9jb21tZW50cyAqXC8+LykpcmV0dXJuW107dmFyIGs9W10sRz1bXSxRPVMubWF0Y2goLzwoPzpcdys6KT9hdXRob3JzPihbXHNcU10qKTxcLyg/Olx3Kzop''@;'; put 'put ''P2F1dGhvcnM+Lyk7USYmUVsxXSYmUVsxXS5zcGxpdCgvPFwvXHcqOj9hdXRob3I+LykuZm9yRWFjaChmdW5jdGlvbihnZSl7aWYoIiIhPT1nZSYmIiIhPT1nZS50cmltKCkpe3ZhciBwZT1nZS5tYXRjaCgvPCg/Olx3KzopP2F1dGhvcltePl0qPiguKikvKTtwZSYmay5wdXNoKHBlWzFdKX19''@;'; put 'put ''KTt2YXIgb2U9Uy5tYXRjaCgvPCg/Olx3KzopP2NvbW1lbnRMaXN0PihbXHNcU10qKTxcLyg/Olx3KzopP2NvbW1lbnRMaXN0Pi8pO3JldHVybiBvZSYmb2VbMV0mJm9lWzFdLnNwbGl0KC88XC9cdyo6P2NvbW1lbnQ+LykuZm9yRWFjaChmdW5jdGlvbihnZSl7aWYoIiIhPT1nZSYmIiIhPT1n''@;'; put 'put ''ZS50cmltKCkpe3ZhciBwZT1nZS5tYXRjaCgvPCg/Olx3KzopP2NvbW1lbnRbXj5dKj4vKTtpZihwZSl7dmFyIHllPXZyKHBlWzBdKSxQZT17YXV0aG9yOnllLmF1dGhvcklkJiZrW3llLmF1dGhvcklkXXx8InNoZWV0anNnaG9zdCIscmVmOnllLnJlZixndWlkOnllLmd1aWR9LE5lPU5vKHll''@;'; put 'put ''LnJlZik7aWYoIShSLnNoZWV0Um93cyYmUi5zaGVldFJvd3M8PU5lLnIpKXt2YXIgWWU9Z2UubWF0Y2goLzwoPzpcdys6KT90ZXh0PihbXHNcU10qKTxcLyg/Olx3KzopP3RleHQ+LyksZXQ9ISFZZSYmISFZZVsxXSYmdUMoWWVbMV0pfHx7cjoiIix0OiIiLGg6IiJ9O1BlLnI9ZXQuciwiPHQ+''@;'; put 'put ''PC90PiI9PWV0LnImJihldC50PWV0Lmg9IiIpLFBlLnQ9KGV0LnR8fCIiKS5yZXBsYWNlKC9cclxuL2csIlxuIikucmVwbGFjZSgvXHIvZywiXG4iKSxSLmNlbGxIVE1MJiYoUGUuaD1ldC5oKSxHLnB1c2goUGUpfX19fSksR30oUyxrKX0oVHQoUyxidCwhMCksYnQseWUpKXx8IUV0Lmxlbmd0''@;'; put 'put ''aClyZXR1cm47IWZ1bmN0aW9uIGprKFMsUil7dmFyIEcsaz1BcnJheS5pc0FycmF5KFMpO1IuZm9yRWFjaChmdW5jdGlvbihRKXt2YXIgb2U9Tm8oUS5yZWYpO2lmKGs/KFNbb2Uucl18fChTW29lLnJdPVtdKSxHPVNbb2Uucl1bb2UuY10pOkc9U1tRLnJlZl0sIUcpe0c9e3Q6InoifSxrP1Nb''@;'; put 'put ''b2Uucl1bb2UuY109RzpTW1EucmVmXT1HO3ZhciBnZT1vbyhTWyIhcmVmIl18fCJCRFdHTzEwMDAwMDE6QTEiKTtnZS5zLnI+b2UuciYmKGdlLnMucj1vZS5yKSxnZS5lLnI8b2UuciYmKGdlLmUucj1vZS5yKSxnZS5zLmM+b2UuYyYmKGdlLnMuYz1vZS5jKSxnZS5lLmM8b2UuYyYmKGdlLmUu''@;'; put 'put ''Yz1vZS5jKTt2YXIgcGU9cmEoZ2UpO3BlIT09U1siIXJlZiJdJiYoU1siIXJlZiJdPXBlKX1HLmN8fChHLmM9W10pO3ZhciB5ZT17YTpRLmF1dGhvcix0OlEudCxyOlEucn07eWUuciYmInN0cmluZyI9PXR5cGVvZiB5ZS5yJiYoeWUuUj13NSh5ZS5yKSksUS5oJiYoeWUuaD1RLmgpLEcuYy5w''@;'; put 'put ''dXNoKHllKX0pfShjdCxFdCl9fSksZnVuY3Rpb24gSlMoUyxSLGssRyxRLG9lLGdlKXshU3x8IVNbIiF0YWJsZXJlZnMiXXx8IWt8fCFrWyIhaWQiXXx8KFNbIiF0YWJsZXMiXT1bXSxTWyIhdGFibGVyZWZzIl0uZm9yRWFjaChmdW5jdGlvbihwZSl7dmFyIHllPWtbIiFpZCJdW3BlXTtpZih5''@;'; put 'put ''ZSYmeWUuVGFyZ2V0KXt2YXIgUGU9Zm4oeWUuVGFyZ2V0LEcpOyFmdW5jdGlvbiB2QihTLFIsayxHLFEpe3ZhciBvZT17c3R5bGU6e30saGVhZGVyOjB9LGdlPSExO1MucmVwbGFjZShlbixmdW5jdGlvbihwZSl7dmFyIHllPXZyKHBlKTtzd2l0Y2goV24oeWVbMF0pKXtjYXNlIjw/eG1sIjpj''@;'; put 'put ''YXNlIjwvdGFibGU+IjpjYXNlIjwvYXV0b0ZpbHRlcj4iOmNhc2UiPHNvcnRTdGF0ZSI6Y2FzZSI8c29ydFN0YXRlPiI6Y2FzZSI8L3NvcnRTdGF0ZT4iOmNhc2UiPC90YWJsZUNvbHVtbnMiOmNhc2UiPC90YWJsZUNvbHVtbnM+IjpjYXNlIjwvdGFibGVDb2x1bW4+IjpjYXNlIjxjYWxjdWxh''@;'; put 'put ''dGVkQ29sdW1uRm9ybXVsYT4iOmNhc2UiPGNhbGN1bGF0ZWRDb2x1bW5Gb3JtdWxhIjpjYXNlIjwvY2FsY3VsYXRlZENvbHVtbkZvcm11bGE+IjpjYXNlIjx0b3RhbHNSb3dGb3JtdWxhPiI6Y2FzZSI8dG90YWxzUm93Rm9ybXVsYSI6Y2FzZSI8L3RvdGFsc1Jvd0Zvcm11bGE+IjpjYXNlIjx4''@;'; put 'put ''bWxDb2x1bW5Qcj4iOmNhc2UiPHhtbENvbHVtblByIjpjYXNlIjwveG1sQ29sdW1uUHI+IjpjYXNlIjxzb3J0Q29uZGl0aW9uPiI6Y2FzZSI8c29ydENvbmRpdGlvbiI6Y2FzZSI8ZXh0THN0IjpjYXNlIjxleHRMc3Q+IjpjYXNlIjwvZXh0THN0PiI6Y2FzZSI8ZXh0THN0Lz4iOmJyZWFrO2Nh''@;'; put 'put ''c2UiPHRhYmxlIjp5ZS5yZWYmJihvZS5yZWY9eWUucmVmKSx5ZS5uYW1lP29lLm5hbWU9eWUubmFtZTp5ZS5kaXNwbGF5TmFtZSYmKG9lLm5hbWU9eWUuZGlzcGxheU5hbWUpLG51bGwhPXllLmhlYWRlcnJvd2NvdW50JiYxIT0reWUuaGVhZGVycm93Y291bnQ/b2UuaGVhZGVyPSt5ZS5oZWFk''@;'; put 'put ''ZXJyb3djb3VudDpudWxsPT15ZS5oZWFkZXJyb3djb3VudCYmKG9lLmhlYWRlcj0xKTticmVhaztjYXNlIjxhdXRvRmlsdGVyIjpjYXNlIjxhdXRvRmlsdGVyPiI6b2UuZmlsdGVyPSEwO2JyZWFrO2Nhc2UiPHRhYmxlQ29sdW1ucyI6Y2FzZSI8dGFibGVDb2x1bW5zPiI6b2UuY29scz1bXTti''@;'; put 'put ''cmVhaztjYXNlIjx0YWJsZVN0eWxlSW5mbyI6eWUuc2hvd1Jvd1N0cmlwZXMmJihvZS5zdHlsZS5yb3dzdHJpcGU9dGkoeWUuc2hvd1Jvd1N0cmlwZXMpKSx5ZS5zaG93Q29sdW1uU3RyaXBlcyYmKG9lLnN0eWxlLmNvbHN0cmlwZT10aSh5ZS5zaG93Q29sdW1uU3RyaXBlcykpLHllLnNob3dG''@;'; put 'put ''aXJzdENvbHVtbiYmKG9lLnN0eWxlLmNvbGZpcnN0PXRpKHllLnNob3dGaXJzdENvbHVtbikpLHllLnNob3dMYXN0Q29sdW1uJiYob2Uuc3R5bGUuY29sbGFzdD10aSh5ZS5zaG93TGFzdENvbHVtbikpLHllLm5hbWUmJihvZS5zdHlsZS5uYW1lPXllLm5hbWUucmVwbGFjZSgvXlRhYmxlU3R5''@;'; put 'put ''bGUvLCIiKSk7YnJlYWs7Y2FzZSI8dGFibGVDb2x1bW4iOmNhc2UiPHRhYmxlQ29sdW1uPiI6b2UuY29scy5wdXNoKHtpZDoreWUuaWQsbmFtZTp5ZS5uYW1lfSk7YnJlYWs7Y2FzZSI8ZmlsdGVyQ29sdW1uPiI6Y2FzZSI8ZmlsdGVyQ29sdW1uIjpjYXNlIjxjdXN0b21GaWx0ZXJzIjpjYXNl''@;'; put 'put ''IjxjdXN0b21GaWx0ZXJzPiI6Y2FzZSI8ZXh0IjpnZT0hMDticmVhaztjYXNlIjwvZmlsdGVyQ29sdW1uPiI6Y2FzZSI8L2N1c3RvbUZpbHRlcnM+IjpjYXNlIjwvZXh0PiI6Z2U9ITE7YnJlYWs7ZGVmYXVsdDppZighZ2UmJlEuV1RGKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIr''@;'; put 'put ''eWVbMF0rIiBpbiB0YWJsZSIpfXJldHVybiBwZX0pLG9lLmZpbHRlcnx8KG9lLmZpbHRlcj0hMSksb2Uuc3R5bGUubmFtZSYmIW9lLnN0eWxlLm5hbWUubWF0Y2goL14oTGlnaHR8TWVkaXVtfERhcmspXGQrJC8pJiZrLlRhYmxlJiZrLlRhYmxlLmZvckVhY2goZnVuY3Rpb24ocGUpeyhwZS5u''@;'; put 'put ''YW1lPT1vZS5zdHlsZS5uYW1lfHxwZS5yYXduYW1lPT1vZS5zdHlsZS5uYW1lKSYmKG9lLnN0eWxlLnJhdz1xdChwZSkpfSksUlsiIXRhYmxlcyJdLnB1c2gob2UpfShUdChSLFBlLCEwKSxTLFEsMCxnZSl9fSksZGVsZXRlIFNbIiF0YWJsZXJlZnMiXSl9KGN0LFMsb2VbR10sUixZZSwwLHll''@;'; put 'put ''KSx0eXBlb2YgcGFyc2Vfc2hlZXRfcGl2b3Q8InUiJiZQYi5wdXNoKFtjdCxTLG9lW0ddLFIse1NoZWV0czpnZX0sWWUseWVdKSxmdW5jdGlvbiBReihTLFIsayxHLFEsb2UsZ2UscGUpe2lmKFMmJlNbIiFsZWdkcmF3ZWwiXSl7dmFyIHllPWZuKFNbIiFsZWdkcmF3ZWwiXS5UYXJnZXQsRyks''@;'; put 'put ''UGU9bnIoayx5ZSwhMCk7UGUmJmZ1bmN0aW9uIFh2KFMsUixrKXt2YXIgRz0wOyhTLm1hdGNoKGJCKXx8W10pLmZvckVhY2goZnVuY3Rpb24oUSl7dmFyIGp0LGt0LE90LEt0LFRuLHJyLFNuLGxyLG9lPSIiLGdlPSEwLHBlPSIiLHllPS0xLFBlPXt9LE5lPXt9LFllPXt9LGV0PS0xLGN0PS0x''@;'; put 'put ''LEV0PSIiLGF0PSIiLGJ0PSIiLFhuPSExLEJuPSExO3N3aXRjaChRLnJlcGxhY2UoZW4sZnVuY3Rpb24oZXIsTWkpe3ZhciBGaT12cihlcik7c3dpdGNoKFduKEZpWzBdKSl7Y2FzZSI8c2hhcGUiOkZpLmZpbGxjb2xvciYmKFBlLmNvbG9yMT1GaS5maWxsY29sb3IpLEZpLnN0cm9rZWNvbG9y''@;'; put 'put ''JiYoWWUuY29sb3I9Rmkuc3Ryb2tlY29sb3IpO2JyZWFrO2Nhc2UiPGZpbGwiOmNhc2UiPGZpbGw+IjoiPHY6ZmlsbCI9PUZpWzBdJiYoRmkuY29sb3IyJiYoUGUuY29sb3IyPUZpLmNvbG9yMiksRmkudHlwZSYmKFBlLnR5cGU9RmkudHlwZSkpO2JyZWFrO2Nhc2UiPC9maWxsPiI6Y2FzZSI8''@;'; put 'put ''bG9jayI6Y2FzZSI8bG9jay8+IjpicmVhaztjYXNlIjxzaGFkb3ciOkZpLmNvbG9yJiYoTmUuY29sb3I9RmkuY29sb3IpLEZpLm9uJiYoTmUub249Rmkub24pO2JyZWFrO2Nhc2UiPENsaWVudERhdGEiOkZpLk9iamVjdFR5cGUmJihvZT1GaS5PYmplY3RUeXBlKTticmVhaztjYXNlIjxWaXNp''@;'; put 'put ''YmxlIjpjYXNlIjxWaXNpYmxlLz4iOmdlPSExO2JyZWFrO2Nhc2UiPEFuY2hvciI6Y2FzZSI8QW5jaG9yPiI6Y2FzZSI8Um93IjpjYXNlIjxSb3c+IjpjYXNlIjxDb2x1bW4iOmNhc2UiPENvbHVtbj4iOmNhc2UiPEZtbGFNYWNybyI6Y2FzZSI8Rm1sYU1hY3JvPiI6Y2FzZSI8Rm1sYUxpbmsi''@;'; put 'put ''OmNhc2UiPEZtbGFMaW5rPiI6Y2FzZSI8Rm1sYVJhbmdlIjpjYXNlIjxGbWxhUmFuZ2U+IjpjYXNlIjxTZWxUeXBlIjpjYXNlIjxTZWxUeXBlPiI6Y2FzZSI8VmFsIjpjYXNlIjxWYWw+IjpjYXNlIjxNaW4iOmNhc2UiPE1pbj4iOmNhc2UiPE1heCI6Y2FzZSI8TWF4PiI6Y2FzZSI8SW5jIjpj''@;'; put 'put ''YXNlIjxJbmM+IjpjYXNlIjxQYWdlIjpjYXNlIjxQYWdlPiI6Y2FzZSI8Q2hlY2tlZCI6Y2FzZSI8Q2hlY2tlZD4iOmNhc2UiPHRleHRib3giOmNhc2UiPHRleHRib3g+Ijp5ZT1NaStlci5sZW5ndGg7YnJlYWs7Y2FzZSI8L0FuY2hvcj4iOnBlPVEuc2xpY2UoeWUsTWkpLnRyaW0oKTticmVh''@;'; put 'put ''aztjYXNlIjwvUm93PiI6ZXQ9K1Euc2xpY2UoeWUsTWkpLnRyaW0oKTticmVhaztjYXNlIjwvQ29sdW1uPiI6Y3Q9K1Euc2xpY2UoeWUsTWkpLnRyaW0oKTticmVhaztjYXNlIjwvRm1sYU1hY3JvPiI6RXQ9US5zbGljZSh5ZSxNaSkudHJpbSgpO2JyZWFrO2Nhc2UiPC9GbWxhTGluaz4iOmF0''@;'; put 'put ''PVEuc2xpY2UoeWUsTWkpLnRyaW0oKTticmVhaztjYXNlIjwvRm1sYVJhbmdlPiI6U249US5zbGljZSh5ZSxNaSkudHJpbSgpO2JyZWFrO2Nhc2UiPC9TZWxUeXBlPiI6bHI9US5zbGljZSh5ZSxNaSkudHJpbSgpO2JyZWFrO2Nhc2UiPC9WYWw+IjpqdD0rUS5zbGljZSh5ZSxNaSkudHJpbSgp''@;'; put 'put ''O2JyZWFrO2Nhc2UiPC9NaW4+IjprdD0rUS5zbGljZSh5ZSxNaSkudHJpbSgpO2JyZWFrO2Nhc2UiPC9NYXg+IjpPdD0rUS5zbGljZSh5ZSxNaSkudHJpbSgpO2JyZWFrO2Nhc2UiPC9JbmM+IjpLdD0rUS5zbGljZSh5ZSxNaSkudHJpbSgpO2JyZWFrO2Nhc2UiPC9QYWdlPiI6VG49K1Euc2xp''@;'; put 'put ''Y2UoeWUsTWkpLnRyaW0oKTticmVhaztjYXNlIjwvQ2hlY2tlZD4iOnJyPStRLnNsaWNlKHllLE1pKS50cmltKCk7YnJlYWs7Y2FzZSI8L3RleHRib3g+IjpidD1RLnNsaWNlKHllLE1pKS50cmltKCk7YnJlYWs7Y2FzZSI8TW92ZVdpdGhDZWxscy8+IjpjYXNlIjxNb3ZlV2l0aENlbGxzPiI6''@;'; put 'put ''WG49ITA7YnJlYWs7Y2FzZSI8U2l6ZVdpdGhDZWxscy8+IjpjYXNlIjxTaXplV2l0aENlbGxzPiI6Qm49ITB9cmV0dXJuIiJ9KSxvZSl7Y2FzZSJOb3RlIjp2YXIgZnI9enUuc2hlZXRfZ2V0X2NlbGwoUixldD49MCYmY3Q+PTA/cWkoe3I6ZXQsYzpjdH0pOmtbR10ucmVmKTtmci5jJiYoZnIu''@;'; put 'put ''Yy5oaWRkZW49Z2UscGUmJihmci5jLnJhd2FuY2hvcj1wZSxIayhwZSxmci5jKSxsQihmci5jWyIhcG9zIl0sMiohIVhuKyEhQm4sUikpLFBlLmNvbG9yMSYmKGZyLmMuZmlsbD1QZSksTmUuY29sb3ImJihmci5jLnNoYWRvdz1OZSksWWUuY29sb3ImJihmci5jLnN0cm9rZT1ZZSkpLCsrRzti''@;'; put 'put ''cmVhaztjYXNlIkJ1dHRvbiI6Y2FzZSJHQm94IjpjYXNlIkRyb3AiOmNhc2UiTGFiZWwiOmNhc2UiQ2hlY2tib3giOmNhc2UiU2Nyb2xsIjpjYXNlIkxpc3QiOmNhc2UiUmFkaW8iOmNhc2UiU3BpbiI6Y2FzZSJFZGl0IjpSWyIhY29udHJvbHMiXXx8KFJbIiFjb250cm9scyJdPVtdKTt2YXIg''@;'; put 'put ''YnI9eyIhdHlwZSI6b2V9O3BlJiZIayhwZSxiciksRXQmJihici5tYWNybz1FdC5yZXBsYWNlKCJbMF0hIiwiIikpLGF0JiYoYnIubGluaz1hdCksIlNjcm9sbCI9PW9lfHwiU3BpbiI9PW9lPyhudWxsPT1qdCYmKGp0PTApLG51bGw9PWt0JiYoa3Q9MCksbnVsbD09T3QmJihPdD0zZTQpLG51''@;'; put 'put ''bGw9PUt0JiYoS3Q9MSksIlNjcm9sbCI9PW9lJiZudWxsPT1UbiYmKFRuPTEwKSk6IlJhZGlvIj09b2V8fCJDaGVja2JveCI9PW9lPyhudWxsPT1yciYmKHJyPTApLGp0PXJyKTooIkxpc3QiPT1vZXx8IkRyb3AiPT1vZSkmJihudWxsIT1TbiYmKGJyLnJlZj1TbiksbnVsbD09bHImJihscj0i''@;'; put 'put ''U2luZ2xlIiksIkxpc3QiPT1vZSYmKGJyLnNlbD1scikpLG51bGwhPWp0JiYoYnIudmFsPWp0KSxudWxsIT1rdCYmKGJyLm1pbj1rdCksbnVsbCE9T3QmJihici5tYXg9T3QpLG51bGwhPUt0JiYoYnIuc3RlcD1LdCksbnVsbCE9VG4mJihici5wYWdlPVRuKSxidCYmKGJyLnQ9YnQucmVwbGFj''@;'; put 'put ''ZSgvXHMqPFtcc1xTXSo/PlxzKi9nLCIiKSksUlsiIWNvbnRyb2xzIl0ucHVzaChicil9fSl9KGdvKFBlKSxTLHBlfHxbXSksU1siIUxEUCJdPXllLFNbIiFjdHJsaWQiXSYmU1siIWN0cmxpZCJdLmZvckVhY2goZnVuY3Rpb24oTmUpe2lmKE5lLnJlbCYmTmUucmVsLlRhcmdldCl7dmFyIFll''@;'; put 'put ''PWZuKE5lLnJlbC5UYXJnZXQsRyk7TmUucGF0aD1ZZSxkZWxldGUgTmUucmVsfX0pfX0oY3QsMCxTLFIsMCwwLDAsRXQpLGN0fWNhdGNoKGF0KXtpZih5ZS5XVEYpdGhyb3cgYXR9fWZ1bmN0aW9uIEFjKFMpe3JldHVybiIvIj09Uy5jaGFyQXQoMCk/Uy5zbGljZSgxKTpTfXZhciBCYz1mdW5j''@;'; put 'put ''dGlvbigpe307ZnVuY3Rpb24gcnAoUyxSKXtpZihQYj1bXSxOSShSPVJ8fHt9KSxyaShTLCJNRVRBLUlORi9tYW5pZmVzdC54bWwiKXx8cmkoUywib2JqZWN0ZGF0YS54bWwiKSlyZXR1cm4gZnVuY3Rpb24gd2EoUyxSKXtSPVJ8fHt9LHJpKFMsIk1FVEEtSU5GL21hbmlmZXN0LnhtbCIpJiZm''@;'; put 'put ''dW5jdGlvbiBWbyhTLFIpe2Zvcih2YXIgRyxRLGs9V1MoUyk7Rz1ZNS5leGVjKGspOylzd2l0Y2goR1szXSl7Y2FzZSJtYW5pZmVzdCI6YnJlYWs7Y2FzZSJmaWxlLWVudHJ5IjppZigiLyI9PShRPXZyKEdbMF0sITEpKS5wYXRoJiZRLnR5cGUhPT1sbCl0aHJvdyBuZXcgRXJyb3IoIlRoaXMg''@;'; put 'put ''T3BlbkRvY3VtZW50IGlzIG5vdCBhIHNwcmVhZHNoZWV0Iik7YnJlYWs7Y2FzZSJlbmNyeXB0aW9uLWRhdGEiOmNhc2UiYWxnb3JpdGhtIjpjYXNlInN0YXJ0LWtleS1nZW5lcmF0aW9uIjpjYXNlImtleS1kZXJpdmF0aW9uIjp0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIE9EUyBFbmNy''@;'; put 'put ''eXB0aW9uIik7ZGVmYXVsdDppZihSJiZSLldURil0aHJvdyBHfX0oVHQoUywiTUVUQS1JTkYvbWFuaWZlc3QueG1sIiksUik7dmFyIGs9bnIoUywiY29udGVudC54bWwiKTtpZighayl0aHJvdyBuZXcgRXJyb3IoIk1pc3NpbmcgY29udGVudC54bWwgaW4gT0RTIC8gVU9GIGZpbGUiKTt2YXIg''@;'; put 'put ''Rz1YUyhnbyhrKSxSKTtyZXR1cm4gcmkoUywibWV0YS54bWwiKSYmKEcuUHJvcHM9dnYoVHQoUywibWV0YS54bWwiKSkpLEd9KFMsUik7aWYocmkoUywiSW5kZXgvRG9jdW1lbnQuaXdhIikpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBOVU1CRVJTIGZpbGUiKTt2YXIgb2UsZ2Usaz1m''@;'; put 'put ''dW5jdGlvbiB4dChTKXtmb3IodmFyIFI9Uy5GdWxsUGF0aHN8fE9lKFMuZmlsZXMpLGs9W10sRz0wO0c8Ui5sZW5ndGg7KytHKSIvIiE9UltHXS5zbGljZSgtMSkmJmsucHVzaChSW0ddKTtyZXR1cm4gay5zb3J0KCl9KFMpLEc9ZnVuY3Rpb24gTncoUyl7dmFyIFI9e3dvcmtib29rczpbXSxz''@;'; put 'put ''aGVldHM6W10sY2hhcnRzOltdLGRpYWxvZ3M6W10sbWFjcm9zOltdLHJlbHM6W10sc3RyczpbXSxjb21tZW50czpbXSxsaW5rczpbXSxjb3JlcHJvcHM6W10sZXh0cHJvcHM6W10sY3VzdHByb3BzOltdLHRoZW1lczpbXSxzdHlsZXM6W10sY2FsY2NoYWluczpbXSx2YmE6W10sZHJhd2luZ3M6''@;'; put 'put ''W10scGl2b3RzOltdLHBpdm90Y2FjaGVzOltdLHBpdm90cmVjb3JkczpbXSxkYXRhbW9kZWxzOltdLGNoYXJ0b2JqczpbXSxjaGFydHN0eWxlczpbXSxjaGFydGNvbG9yczpbXSxjaGFydGV4czpbXSx0YWJsZXM6W10sY29ubnM6W10sY3RybHByb3BzOltdLGN1c3RvbXhtbHByb3BzOltdLFRP''@;'; put 'put ''RE86W10seG1sbnM6IiJ9O2lmKCFTfHwhUy5tYXRjaClyZXR1cm4gUjt2YXIgaz17fTtpZigoUy5tYXRjaChlbil8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKEcpe3ZhciBRPXZyKEcpO3N3aXRjaChRWzBdLnJlcGxhY2UodWEsIjwiKSl7Y2FzZSI8P3htbCI6YnJlYWs7Y2FzZSI8VHlwZXMiOlIu''@;'; put 'put ''eG1sbnM9UVsieG1sbnMiKyhRWzBdLm1hdGNoKC88KFx3Kyk6Lyl8fFsiIiwiIl0pWzFdXTticmVhaztjYXNlIjxEZWZhdWx0IjprW1EuRXh0ZW5zaW9uLnRvTG93ZXJDYXNlKCldPVEuQ29udGVudFR5cGU7YnJlYWs7Y2FzZSI8T3ZlcnJpZGUiOnZvaWQgMCE9PVJbYjRbUS5Db250ZW50VHlw''@;'; put 'put ''ZV1dJiZSW2I0W1EuQ29udGVudFR5cGVdXS5wdXNoKFEuUGFydE5hbWUpfX0pLFIueG1sbnMhPT1ZaS5DVCl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gTmFtZXNwYWNlOiAiK1IueG1sbnMpO3JldHVybiBSLmNhbGNjaGFpbj1SLmNhbGNjaGFpbnMubGVuZ3RoPjA/Ui5jYWxjY2hhaW5zWzBd''@;'; put 'put ''OiIiLFIuc3N0PVIuc3Rycy5sZW5ndGg+MD9SLnN0cnNbMF06IiIsUi5zdHlsZT1SLnN0eWxlcy5sZW5ndGg+MD9SLnN0eWxlc1swXToiIixSLmNvbm49Ui5jb25ucy5sZW5ndGg+MD9SLmNvbm5zWzBdOiIiLFIuZGVmYXVsdHM9ayxkZWxldGUgUi5jYWxjY2hhaW5zLFJ9KG5yKFMsIltDb250''@;'; put 'put ''ZW50X1R5cGVzXS54bWwiKSksUT0hMTtpZigwPT09Ry53b3JrYm9va3MubGVuZ3RoJiZUdChTLGdlPSJ4bC93b3JrYm9vay54bWwiLCEwKSYmRy53b3JrYm9va3MucHVzaChnZSksMD09PUcud29ya2Jvb2tzLmxlbmd0aCl7aWYoIVR0KFMsZ2U9InhsL3dvcmtib29rLmJpbiIsITApKXRocm93''@;'; put 'put ''IG5ldyBFcnJvcigiQ291bGQgbm90IGZpbmQgd29ya2Jvb2siKTtHLndvcmtib29rcy5wdXNoKGdlKSxRPSEwfSJiaW4iPT1HLndvcmtib29rc1swXS5zbGljZSgtMykmJihRPSEwKTt2YXIgcGU9e30seWU9e307aWYoIVIuYm9va1NoZWV0cyYmIVIuYm9va1Byb3BzKXtpZihsOD1bXSxHLnNz''@;'; put 'put ''dCl0cnl7bDg9ZnVuY3Rpb24gTXooUyxSLGspe3JldHVybiIuYmluIj09PVIuc2xpY2UoLTQpP2Z1bmN0aW9uIE92KFMsUil7dmFyIGs9W10sRz0hMTtyZXR1cm4gdXIoUyxmdW5jdGlvbihvZSxnZSxwZSl7c3dpdGNoKHBlKXtjYXNlIDE1OTprLkNvdW50PW9lWzBdLGsuVW5pcXVlPW9lWzFd''@;'; put 'put ''O2JyZWFrO2Nhc2UgMTk6ay5wdXNoKG9lKTticmVhaztjYXNlIDE2MDpyZXR1cm4hMDtjYXNlIDM1Okc9ITA7YnJlYWs7Y2FzZSAzNjpHPSExO2JyZWFrO2RlZmF1bHQ6aWYoZ2UuaW5kZXhPZigiQmVnaW4iKT4wfHxnZS5pbmRleE9mKCJFbmQiKSwhR3x8Ui5XVEYpdGhyb3cgbmV3IEVycm9y''@;'; put 'put ''KCJVbmV4cGVjdGVkIHJlY29yZCAiK3BlKyIgIitnZSl9fSksa30oUyxrKTpmdW5jdGlvbiBmMihTLFIpe3ZhciBrPVtdLEc9IiI7aWYoIVMpcmV0dXJuIGs7dmFyIFE9Uy5tYXRjaChzayk7aWYoUSl7Rz1RWzJdLnJlcGxhY2UobGssIiIpLnNwbGl0KHE2KTtmb3IodmFyIG9lPTA7b2UhPUcu''@;'; put 'put ''bGVuZ3RoOysrb2Upe3ZhciBnZT11QyhHW29lXS50cmltKCksUik7bnVsbCE9Z2UmJihrW2subGVuZ3RoXT1nZSl9UT12cihRWzFdKSxrLkNvdW50PVEuY291bnQsay5VbmlxdWU9US51bmlxdWVDb3VudH1yZXR1cm4ga30oUyxrKX0oVHQoUyxBYyhHLnNzdCkpLEcuc3N0LFIpfWNhdGNoKF9y''@;'; put 'put ''KXtpZihSLldURil0aHJvdyBfcn1SLmNlbGxTdHlsZXMmJkcudGhlbWVzLmxlbmd0aCYmKHBlPWZ1bmN0aW9uIFN6KFMsUixrKXtyZXR1cm4gRUMoUyxrKX0obnIoUyxHLnRoZW1lc1swXS5yZXBsYWNlKC9eXC8vLCIiKSwhMCl8fCIiLDAsUikpLEcuc3R5bGUmJih5ZT1mdW5jdGlvbiBDeihT''@;'; put 'put ''LFIsayxHKXtyZXR1cm4iLmJpbiI9PT1SLnNsaWNlKC00KT9mdW5jdGlvbiB4ayhTLFIsayl7dmFyIEc9e051bWJlckZtdDpbXX07Zm9yKHZhciBRIGluIEEuX3RhYmxlKUcuTnVtYmVyRm10W1FdPUEuX3RhYmxlW1FdO0cuQ2VsbFhmPVtdLEcuRm9udHM9W10sRy5GaWxscz1bXSxHLkJvcmRl''@;'; put 'put ''cnM9W107dmFyIG9lPVtdLGdlPSExO3JldHVybiB1cihTLGZ1bmN0aW9uKHllLFBlLE5lKXtzd2l0Y2goTmUpe2Nhc2UgNDQ6Ry5OdW1iZXJGbXRbeWVbMF1dPXllWzFdLEEubG9hZCh5ZVsxXSx5ZVswXSk7YnJlYWs7Y2FzZSA0MzpZdih5ZS5jb2xvcixSKSxHLkZvbnRzLnB1c2goeWUpO2Jy''@;'; put 'put ''ZWFrO2Nhc2UgMTAyNTpjYXNlIDQ4OmNhc2UgNTA3OmNhc2UgNTcyOmNhc2UgNDc1OmNhc2UgMTE3MTpjYXNlIDIxMDI6Y2FzZSAxMTMwOmNhc2UgNTEyOmNhc2UgMjA5NTpjYXNlIDMwNzI6YnJlYWs7Y2FzZSA0NTp5ZS5mZ0NvbG9yJiZZdih5ZS5mZ0NvbG9yLFIpLHllLmJnQ29sb3ImJll2''@;'; put 'put ''KHllLmJnQ29sb3IsUiksRy5GaWxscy5wdXNoKHllKTticmVhaztjYXNlIDQ2OlsidG9wIiwiYm90dG9tIiwibGVmdCIsInJpZ2h0IiwiZGlhZyJdLmZvckVhY2goZnVuY3Rpb24oWWUpe3llW1llXSYmeWVbWWVdLmNvbG9yJiZZdih5ZVtZZV0uY29sb3IsUil9KSxHLkJvcmRlcnMucHVzaCh5''@;'; put 'put ''ZSk7YnJlYWs7Y2FzZSA0NzoiQnJ0QmVnaW5DZWxsWEZzIj09b2Vbb2UubGVuZ3RoLTFdJiZHLkNlbGxYZi5wdXNoKHllKTticmVhaztjYXNlIDM1OmdlPSEwO2JyZWFrO2Nhc2UgMzY6Z2U9ITE7YnJlYWs7Y2FzZSAzNzpvZS5wdXNoKFBlKSxnZT0hMDticmVhaztjYXNlIDM4Om9lLnBvcCgp''@;'; put 'put ''LGdlPSExO2JyZWFrO2RlZmF1bHQ6aWYoKFBlfHwiIikuaW5kZXhPZigiQmVnaW4iKT4wKW9lLnB1c2goUGUpO2Vsc2UgaWYoKFBlfHwiIikuaW5kZXhPZigiRW5kIik+MClvZS5wb3AoKTtlbHNlIGlmKCFnZXx8ay5XVEYmJiJCcnRBQ0JlZ2luIiE9b2Vbb2UubGVuZ3RoLTFdKXRocm93IG5l''@;'; put 'put ''dyBFcnJvcigiVW5leHBlY3RlZCByZWNvcmQgIitOZSsiICIrUGUpfX0pLChHLkZvbnRzfHxbXSlbMF0mJkk0KEcuRm9udHNbMF0pLEd9KFMsayxHKTpfayhTLGssRyl9KFR0KFMsQWMoRy5zdHlsZSkpLEcuc3R5bGUscGUsUikpfXZhciBQZT1HLmxpbmtzLm1hcChmdW5jdGlvbihfcil7dHJ5''@;'; put 'put ''e3ZhciBGbj1iZihucihTLFZyKEFjKF9yKSkpLF9yKTtyZXR1cm4gZnVuY3Rpb24gRXooUyxSLGssRyl7cmV0dXJuIi5iaW4iPT09ay5zbGljZSgtNCk/ZnVuY3Rpb24gVmsoUyxSLGssRyl7aWYoIVMpcmV0dXJuIFM7dmFyIFE9R3x8e30sb2U9ITE7dXIoUyxmdW5jdGlvbih5ZSxQZSxOZSl7''@;'; put 'put ''c3dpdGNoKE5lKXtjYXNlIDM1OTpjYXNlIDM2MzpjYXNlIDM2NDpjYXNlIDM2NjpjYXNlIDM2NzpjYXNlIDM2ODpjYXNlIDM2OTpjYXNlIDM3MDpjYXNlIDM3MTpjYXNlIDQ3MjpjYXNlIDU3NzpjYXNlIDU3ODpjYXNlIDU3OTpjYXNlIDU4MDpjYXNlIDU4MTpjYXNlIDU4MjpjYXNlIDU4Mzpj''@;'; put 'put ''YXNlIDU4NDpjYXNlIDU4NTpjYXNlIDU4NjpjYXNlIDU4NzpicmVhaztjYXNlIDM1Om9lPSEwO2JyZWFrO2Nhc2UgMzY6b2U9ITE7YnJlYWs7ZGVmYXVsdDppZighKChQZXx8IiIpLmluZGV4T2YoIkJlZ2luIik+MCkmJiEoKFBlfHwiIikuaW5kZXhPZigiRW5kIik+MCkmJighb2V8fFEuV1RG''@;'; put 'put ''KSl0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgcmVjb3JkICIrTmUudG9TdHJpbmcoMTYpKyIgIitQZSl9fSxRKX0oUywwLDAsRyk6ZnVuY3Rpb24gTmsoUyxSLGssRyl7dmFyIFE9R3x8e30sb2U9e1NoZWV0TmFtZXM6W10sU2hlZXRzOnt9fSxwZT0hMSx5ZT17fSxQZT0tMSxOZT0tMSxZ''@;'; put 'put ''ZT17czp7cjowLGM6MH0sZTp7cjotMSxjOi0xfX0sZXQ9e30sY3Q9MDtyZXR1cm4oU3x8IiIpLnJlcGxhY2UoZW4sZnVuY3Rpb24oRXQsYXQpe3ZhciBidD12cihFdCk7c3dpdGNoKFduKGJ0WzBdKSl7Y2FzZSI8P3htbCI6Y2FzZSI8ZXh0ZXJuYWxMaW5rIjpjYXNlIjwvZXh0ZXJuYWxMaW5r''@;'; put 'put ''PiI6Y2FzZSI8L2V4dGVybmFsQm9vaz4iOmNhc2UiPHNoZWV0TmFtZXMiOmNhc2UiPHNoZWV0TmFtZXM+IjpjYXNlIjwvc2hlZXROYW1lcz4iOmNhc2UiPHNoZWV0RGF0YVNldD4iOmNhc2UiPHNoZWV0RGF0YVNldC8+IjpjYXNlIjwvc2hlZXREYXRhU2V0PiI6Y2FzZSI8L3Jvdz4iOmJyZWFr''@;'; put 'put ''O2Nhc2UiPGV4dGVybmFsQm9vayI6Y2FzZSI8ZXh0ZXJuYWxCb29rPiI6b2UuVGFyZ2V0PVJbIiFpZCJdW2J0LmlkXS5UYXJnZXQsb2UuTWlzc2luZz1SWyIhaWQiXVtidC5pZF0uVHlwZT09S2EuWE1JU1M7YnJlYWs7Y2FzZSI8c2hlZXROYW1lIjpvZS5TaGVldE5hbWVzLnB1c2goUXIoZ28o''@;'; put 'put ''YnQudmFsKSkpO2JyZWFrO2Nhc2UiPHNoZWV0RGF0YSI6eWU9e30sb2UuU2hlZXRzW29lLlNoZWV0TmFtZXNbYnQuc2hlZXRJZF1dPXRpKGJ0LnJlZnJlc2hFcnJvcnx8IjAiKT9udWxsOnllO2JyZWFrO2Nhc2UiPC9zaGVldERhdGE+IjpZZS5lLmM+PTAmJih5ZVsiIXJlZiJdPXJhKFllKSk7''@;'; put 'put ''YnJlYWs7Y2FzZSI8cm93IjpjYXNlIjxyb3c+IjpidC5yP1BlPXBhcnNlSW50KGJ0LnIsMTApLTE6UGUrKyxOZT0tMTticmVhaztjYXNlIjxjZWxsIjpjYXNlIjxjZWxsPiI6YnQucj9OZT1ObyhidC5yKS5jOisrTmUsZXQudD1idC50fHwibiIsInN0ciI9PWV0LnQmJihldC50PSJzIik7YnJl''@;'; put 'put ''YWs7Y2FzZSI8L2NlbGw+IjpZZS5lLnI8UGUmJihZZS5lLnI9UGUpLFllLmUuYzxOZSYmKFllLmUuYz1OZSkseWVbcWkoe3I6UGUsYzpOZX0pXT1ldCxldD17fTticmVhaztjYXNlIjx2IjpjYXNlIjx2PiI6Y3Q9RXQubGVuZ3RoK2F0O2JyZWFrO2Nhc2UiPC92PiI6dmFyIGp0PVFyKFMuc2xp''@;'; put 'put ''Y2UoY3QsYXQpKTtldC52PSJuIj09ZXQudD9wYXJzZUZsb2F0KGp0KTpqdDticmVhaztjYXNlIjx2Lz4iOmV0LnY9IiI7YnJlYWs7Y2FzZSI8ZGVmaW5lZE5hbWVzPiI6cGU9ITA7YnJlYWs7Y2FzZSI8L2RlZmluZWROYW1lcz4iOnBlPSExO2JyZWFrO2RlZmF1bHQ6aWYoIXBlJiZRLldURil0''@;'; put 'put ''aHJvdyJ1bnJlY29nbml6ZWQgIitidFswXSsiIGluIGV4dGVybmFsIGxpbmsifX0pLG9lfShTLFIsMCxHKX0oVHQoUyxBYyhfcikpLEZuLF9yLFIpfWNhdGNoe319KSxOZT1mdW5jdGlvbiBrOChTLFIsayl7cmV0dXJuIi5iaW4iPT09Ui5zbGljZSgtNCk/ZnVuY3Rpb24gSG5lKFMsUil7dmFy''@;'; put 'put ''IGs9e0FwcFZlcnNpb246e30sV0JQcm9wczp7fSxXQlZpZXc6W10sU2hlZXRzOltdLENhbGNQcjp7fSx4bWxuczoiIn0sRz1bXSxRPSExO1J8fChSPXt9KSxSLmJpZmY9MTI7dmFyIG9lPVtdLGdlPVtbXV07cmV0dXJuIGdlLlNoZWV0TmFtZXM9W10sZ2UuWFRJPVtdLEw4WzE2XT17bjoiQnJ0''@;'; put 'put ''RlJUQXJjaElEJCIsZjp0cH0sdXIoUyxmdW5jdGlvbih5ZSxQZSxOZSl7c3dpdGNoKE5lKXtjYXNlIDE1NjpnZS5TaGVldE5hbWVzLnB1c2goeWUubmFtZSksay5TaGVldHMucHVzaCh5ZSk7YnJlYWs7Y2FzZSAxNTM6ay5XQlByb3BzPXllO2JyZWFrO2Nhc2UgMzk6bnVsbCE9eWUuU2hlZXQm''@;'; put 'put ''JihSLlNJRD15ZS5TaGVldCkseWUuUmVmPXMwKHllLlB0ZyxudWxsLG51bGwsZ2UsUiksZGVsZXRlIFIuU0lELGRlbGV0ZSB5ZS5QdGcsb2UucHVzaCh5ZSk7YnJlYWs7Y2FzZSAxMDM2OmNhc2UgMzYxOmNhc2UgMjA3MTpjYXNlIDE1ODpjYXNlIDE0MzpjYXNlIDY2NDpjYXNlIDM1MzpjYXNl''@;'; put 'put ''IDMwNzI6Y2FzZSAzMDczOmNhc2UgNTM0OmNhc2UgNjc3OmNhc2UgMTU3OmNhc2UgNjEwOmNhc2UgMjA1MDpjYXNlIDE1NTpjYXNlIDU0ODpjYXNlIDY3NjpjYXNlIDEyODpjYXNlIDY2NTpjYXNlIDIxMjg6Y2FzZSAyMTI1OmNhc2UgNTQ5OmNhc2UgMjA1MzpjYXNlIDU5NjpjYXNlIDIwNzY6''@;'; put 'put ''Y2FzZSAyMDc1OmNhc2UgMjA4MjpjYXNlIDM5NzpjYXNlIDE1NDpjYXNlIDExMTc6Y2FzZSA1NTM6Y2FzZSAyMDkxOmNhc2UgMTY6YnJlYWs7Y2FzZSAzNTc6Y2FzZSAzNTg6Y2FzZSAzNTU6Y2FzZSA2Njc6Z2VbMF0ubGVuZ3RoP2dlLnB1c2goW05lLHllXSk6Z2VbMF09W05lLHllXSxnZVtn''@;'; put 'put ''ZS5sZW5ndGgtMV0uWFRJPVtdO2JyZWFrO2Nhc2UgMzYyOjA9PT1nZS5sZW5ndGgmJihnZVswXT1bXSxnZVswXS5YVEk9W10pLGdlW2dlLmxlbmd0aC0xXS5YVEk9Z2VbZ2UubGVuZ3RoLTFdLlhUSS5jb25jYXQoeWUpLGdlLlhUST1nZS5YVEkuY29uY2F0KHllKTticmVhaztjYXNlIDM1OmNh''@;'; put 'put ''c2UgMzc6Ry5wdXNoKFBlKSxRPSEwO2JyZWFrO2Nhc2UgMzY6Y2FzZSAzODpHLnBvcCgpLFE9ITE7YnJlYWs7ZGVmYXVsdDppZighKChQZXx8IiIpLmluZGV4T2YoIkJlZ2luIik+MCkmJiEoKFBlfHwiIikuaW5kZXhPZigiRW5kIik+MCkmJighUXx8Ui5XVEYmJiJCcnRBQ0JlZ2luIiE9R1tH''@;'; put 'put ''Lmxlbmd0aC0xXSYmIkJydEZSVEJlZ2luIiE9R1tHLmxlbmd0aC0xXSkpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIHJlY29yZCAiK05lKyIgIitQZSl9fSxSKSxQUyhrKSxrLk5hbWVzPW9lLGsuc3VwYm9va3M9Z2Usa30oUyxrKTpmdW5jdGlvbiBIUyhTLFIpe2lmKCFTKXRocm93IG5l''@;'; put 'put ''dyBFcnJvcigiQ291bGQgbm90IGZpbmQgZmlsZSIpO3ZhciBrPXtBcHBWZXJzaW9uOnt9LFdCUHJvcHM6e30sV0JWaWV3OltdLFNoZWV0czpbXSxDYWxjUHI6e30sTmFtZXM6W10sRXh0ZXJuOltdLHhtbG5zOiIifSxHPSExLFE9InhtbG5zIixvZT17fSxnZT0wO2lmKFMucmVwbGFjZShlbixm''@;'; put 'put ''dW5jdGlvbih5ZSxQZSl7dmFyIE5lPXZyKHllKTtzd2l0Y2goV24oTmVbMF0pKXtjYXNlIjw/eG1sIjpjYXNlIjwvd29ya2Jvb2s+IjpjYXNlIjxmaWxlVmVyc2lvbi8+IjpjYXNlIjwvZmlsZVZlcnNpb24+IjpjYXNlIjxmaWxlU2hhcmluZy8+IjpjYXNlIjwvd29ya2Jvb2tQcj4iOmNhc2Ui''@;'; put 'put ''PHdvcmtib29rUHJvdGVjdGlvbi8+IjpjYXNlIjxib29rVmlld3MiOmNhc2UiPGJvb2tWaWV3cz4iOmNhc2UiPC9ib29rVmlld3M+IjpjYXNlIjwvd29ya2Jvb2tWaWV3PiI6Y2FzZSI8c2hlZXRzIjpjYXNlIjxzaGVldHM+IjpjYXNlIjwvc2hlZXRzPiI6Y2FzZSI8L3NoZWV0PiI6Y2FzZSI8''@;'; put 'put ''ZnVuY3Rpb25Hcm91cHMiOmNhc2UiPGZ1bmN0aW9uR3JvdXBzLz4iOmNhc2UiPGZ1bmN0aW9uR3JvdXAiOmNhc2UiPGV4dGVybmFsUmVmZXJlbmNlcyI6Y2FzZSI8L2V4dGVybmFsUmVmZXJlbmNlcz4iOmNhc2UiPGV4dGVybmFsUmVmZXJlbmNlcz4iOmNhc2UiPGRlZmluZWROYW1lcy8+Ijpj''@;'; put 'put ''YXNlIjxkZWZpbmVkTmFtZS8+IjpjYXNlIjwvY2FsY1ByPiI6Y2FzZSI8b2xlU2l6ZSI6Y2FzZSI8Y3VzdG9tV29ya2Jvb2tWaWV3cz4iOmNhc2UiPC9jdXN0b21Xb3JrYm9va1ZpZXdzPiI6Y2FzZSI8Y3VzdG9tV29ya2Jvb2tWaWV3cyI6Y2FzZSI8Y3VzdG9tV29ya2Jvb2tWaWV3IjpjYXNl''@;'; put 'put ''IjwvY3VzdG9tV29ya2Jvb2tWaWV3PiI6Y2FzZSI8cGl2b3RDYWNoZXM+IjpjYXNlIjwvcGl2b3RDYWNoZXM+IjpjYXNlIjxwaXZvdENhY2hlcyI6Y2FzZSI8cGl2b3RDYWNoZSI6Y2FzZSI8c21hcnRUYWdQciI6Y2FzZSI8c21hcnRUYWdQci8+IjpjYXNlIjxzbWFydFRhZ1R5cGVzIjpjYXNl''@;'; put 'put ''IjxzbWFydFRhZ1R5cGVzPiI6Y2FzZSI8L3NtYXJ0VGFnVHlwZXM+IjpjYXNlIjxzbWFydFRhZ1R5cGUiOmNhc2UiPHdlYlB1Ymxpc2hpbmciOmNhc2UiPHdlYlB1Ymxpc2hpbmcvPiI6Y2FzZSI8ZmlsZVJlY292ZXJ5UHIiOmNhc2UiPGZpbGVSZWNvdmVyeVByLz4iOmNhc2UiPHdlYlB1Ymxp''@;'; put 'put ''c2hPYmplY3RzPiI6Y2FzZSI8d2ViUHVibGlzaE9iamVjdHMiOmNhc2UiPC93ZWJQdWJsaXNoT2JqZWN0cz4iOmNhc2UiPHdlYlB1Ymxpc2hPYmplY3QiOmNhc2UiPGV4dExzdCI6Y2FzZSI8ZXh0THN0PiI6Y2FzZSI8L2V4dExzdD4iOmNhc2UiPGV4dExzdC8+IjpjYXNlIjxBcmNoSUQiOmNh''@;'; put 'put ''c2UiPHJldmlzaW9uUHRyIjpicmVhaztjYXNlIjx3b3JrYm9vayI6eWUubWF0Y2goRTgpJiYoUT0ieG1sbnMiK3llLm1hdGNoKC88KFx3Kyk6LylbMV0pLGsueG1sbnM9TmVbUV07YnJlYWs7Y2FzZSI8ZmlsZVZlcnNpb24iOmRlbGV0ZSBOZVswXSxrLkFwcFZlcnNpb249TmU7YnJlYWs7Y2Fz''@;'; put 'put ''ZSI8ZmlsZVNoYXJpbmciOmsuTW9kaWZ5PXt1c2VyOk5lLnVzZXJOYW1lLHdhcm46dGkoTmUucmVhZE9ubHlSZWNvbW1lbmRlZHx8ImZhbHNlIil9LChOZS5hbGdvcml0aG1OYW1lfHxOZS5oYXNoVmFsdWV8fE5lLnNhbHRWYWx1ZXx8TmUuc3BpbkNvdW50KSYmKGsuTW9kaWZ5LmVuY3J5cHRp''@;'; put 'put ''b249e2FsZ286TmUuYWxnb3JpdGhtTmFtZSxoYXNoOk5lLmhhc2hWYWx1ZSxzYWx0Ok5lLnNhbHRWYWx1ZSxzcGluOitOZS5zcGluQ291bnR8fDFlNX0pO2JyZWFrO2Nhc2UiPHdvcmtib29rUHIiOmNhc2UiPHdvcmtib29rUHIvPiI6eWIuZm9yRWFjaChmdW5jdGlvbihldCl7aWYobnVsbCE9''@;'; put 'put ''TmVbZXRbMF1dKXN3aXRjaChldFsyXSl7Y2FzZSJib29sIjprLldCUHJvcHNbZXRbMF1dPXRpKE5lW2V0WzBdXSk7YnJlYWs7Y2FzZSJpbnQiOmsuV0JQcm9wc1tldFswXV09cGFyc2VJbnQoTmVbZXRbMF1dLDEwKTticmVhaztkZWZhdWx0OmsuV0JQcm9wc1tldFswXV09TmVbZXRbMF1dfX0p''@;'; put 'put ''LE5lLmNvZGVOYW1lJiYoay5XQlByb3BzLkNvZGVOYW1lPWdvKE5lLmNvZGVOYW1lKSk7YnJlYWs7Y2FzZSI8d29ya2Jvb2tQcm90ZWN0aW9uIjp2YXIgWWU9ay5Qcm90ZWN0aW9ufHx7fTtZZS5sb2NrU3RydWN0dXJlPXRpKE5lLmxvY2tTdHJ1Y3R1cmV8fCJmYWxzZSIpLFllLmxvY2tXaW5k''@;'; put 'put ''b3dzPXRpKE5lLmxvY2tXaW5kb3dzfHwiZmFsc2UiKSxOZS53b3JrYm9va0FsZ29yaXRobU5hbWUmJihZZS5lbmNyeXB0aW9uPXthbGdvOk5lLndvcmtib29rQWxnb3JpdGhtTmFtZSxoYXNoOk5lLndvcmtib29rSGFzaFZhbHVlLHNhbHQ6TmUud29ya2Jvb2tTYWx0VmFsdWUsc3BpbjorTmUu''@;'; put 'put ''d29ya2Jvb2tTcGluQ291bnR8fDFlNX0pLGsuUHJvdGVjdGlvbj1ZZTticmVhaztjYXNlIjx3b3JrYm9va1ZpZXciOmNhc2UiPHdvcmtib29rVmlldy8+IjpkZWxldGUgTmVbMF0say5XQlZpZXcucHVzaChOZSk7YnJlYWs7Y2FzZSI8c2hlZXQiOnN3aXRjaChOZS5zdGF0ZSl7Y2FzZSJoaWRk''@;'; put 'put ''ZW4iOk5lLkhpZGRlbj0xO2JyZWFrO2Nhc2UidmVyeUhpZGRlbiI6TmUuSGlkZGVuPTI7YnJlYWs7ZGVmYXVsdDpOZS5IaWRkZW49MH1kZWxldGUgTmUuc3RhdGUsTmUubmFtZT1RcihnbyhOZS5uYW1lKSksZGVsZXRlIE5lWzBdLGsuU2hlZXRzLnB1c2goTmUpO2JyZWFrO2Nhc2UiPGV4dGVy''@;'; put 'put ''bmFsUmVmZXJlbmNlIjprLkV4dGVybi5wdXNoKE5lLmlkKTticmVhaztjYXNlIjxkZWZpbmVkTmFtZXM+IjpjYXNlIjxkZWZpbmVkTmFtZXMiOmNhc2UiPGV4dCI6Y2FzZSI8QWx0ZXJuYXRlQ29udGVudCI6Y2FzZSI8QWx0ZXJuYXRlQ29udGVudD4iOkc9ITA7YnJlYWs7Y2FzZSI8L2RlZmlu''@;'; put 'put ''ZWROYW1lcz4iOmNhc2UiPC9leHQ+IjpjYXNlIjwvQWx0ZXJuYXRlQ29udGVudD4iOkc9ITE7YnJlYWs7Y2FzZSI8ZGVmaW5lZE5hbWUiOihvZT17fSkuTmFtZT1nbyhOZS5uYW1lKSxOZS5jb21tZW50JiYob2UuQ29tbWVudD1OZS5jb21tZW50KSxOZS5sb2NhbFNoZWV0SWQmJihvZS5TaGVl''@;'; put 'put ''dD0rTmUubG9jYWxTaGVldElkKSx0aShOZS5oaWRkZW58fCIwIikmJihvZS5IaWRkZW49ITApLGdlPVBlK3llLmxlbmd0aDticmVhaztjYXNlIjwvZGVmaW5lZE5hbWU+IjpvZS5SZWY9UXIoZ28oUy5zbGljZShnZSxQZSkpKSxrLk5hbWVzLnB1c2gob2UpO2JyZWFrO2Nhc2UiPGNhbGNQciI6''@;'; put 'put ''Y2FzZSI8Y2FsY1ByLz4iOmRlbGV0ZSBOZVswXSxrLkNhbGNQcj1OZTticmVhaztkZWZhdWx0OmlmKCFHJiZSLldURil0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCAiK05lWzBdKyIgaW4gd29ya2Jvb2siKX1yZXR1cm4geWV9KSwtMT09PVlpLm1haW4uaW5kZXhPZihrLnhtbG5zKSl0''@;'; put 'put ''aHJvdyBuZXcgRXJyb3IoIlVua25vd24gTmFtZXNwYWNlOiAiK2sueG1sbnMpO3JldHVybiBQUyhrKSxrfShTLGspfShUdChTLEFjKEcud29ya2Jvb2tzWzBdKSksRy53b3JrYm9va3NbMF0sUiksWWU9e30sZXQ9IiI7Ry5jb3JlcHJvcHMubGVuZ3RoJiYoKGV0PVR0KFMsQWMoRy5jb3JlcHJv''@;'; put 'put ''cHNbMF0pLCEwKSkmJihZZT12dihldCkpLDAhPT1HLmV4dHByb3BzLmxlbmd0aCYmKGV0PVR0KFMsQWMoRy5leHRwcm9wc1swXSksITApKSYmZnVuY3Rpb24gV0EoUyxSLGspe3ZhciBHPXt9O1J8fChSPXt9KSxTPWdvKFMpLHJoLmZvckVhY2goZnVuY3Rpb24oUSl7dmFyIG9lPShTLm1hdGNo''@;'; put 'put ''KEQwKFFbMF0pKXx8W10pWzFdO3N3aXRjaChRWzJdKXtjYXNlInN0cmluZyI6b2UmJihSW1FbMV1dPVFyKG9lKSk7YnJlYWs7Y2FzZSJib29sIjpSW1FbMV1dPSJ0cnVlIj09PW9lO2JyZWFrO2Nhc2UicmF3Ijp2YXIgZ2U9Uy5tYXRjaChuZXcgUmVnRXhwKCI8IitRWzBdKyJbXj5dKj4oW1xc''@;'; put 'put ''c1xcU10qPyk8LyIrUVswXSsiPiIpKTtnZSYmZ2UubGVuZ3RoPjAmJihHW1FbMV1dPWdlWzFdKX19KSxHLkhlYWRpbmdQYWlycyYmRy5UaXRsZXNPZlBhcnRzJiZfNChHLkhlYWRpbmdQYWlycyxHLlRpdGxlc09mUGFydHMsUixrKX0oZXQsWWUsUikpO3ZhciBjdD17fTsoIVIuYm9va1NoZWV0''@;'; put 'put ''c3x8Ui5ib29rUHJvcHMpJiYwIT09Ry5jdXN0cHJvcHMubGVuZ3RoJiYoZXQ9bnIoUyxBYyhHLmN1c3Rwcm9wc1swXSksITApKSYmKGN0PWZ1bmN0aW9uIHl2KFMsUil7dmFyIGs9e30sRz0iIixRPVMubWF0Y2goTzYpO2lmKFEpZm9yKHZhciBvZT0wO29lIT1RLmxlbmd0aDsrK29lKXt2YXIg''@;'; put 'put ''Z2U9UVtvZV0scGU9dnIoZ2UpO3N3aXRjaChwZVswXSl7Y2FzZSI8P3htbCI6Y2FzZSI8UHJvcGVydGllcyI6YnJlYWs7Y2FzZSI8cHJvcGVydHkiOkc9UXIocGUubmFtZSk7YnJlYWs7Y2FzZSI8L3Byb3BlcnR5PiI6Rz1udWxsO2JyZWFrO2RlZmF1bHQ6aWYoMD09PWdlLmluZGV4T2YoIjx2''@;'; put 'put ''dDoiKSl7dmFyIHllPWdlLnNwbGl0KCI+IiksUGU9eWVbMF0uc2xpY2UoNCksTmU9eWVbMV07c3dpdGNoKFBlKXtjYXNlImxwc3RyIjpjYXNlImJzdHIiOmNhc2UibHB3c3RyIjpjYXNlImN5IjpjYXNlImVycm9yIjprW0ddPVFyKE5lKTticmVhaztjYXNlImJvb2wiOmtbR109dGkoTmUpO2Jy''@;'; put 'put ''ZWFrO2Nhc2UiaTEiOmNhc2UiaTIiOmNhc2UiaTQiOmNhc2UiaTgiOmNhc2UiaW50IjpjYXNlInVpbnQiOmtbR109cGFyc2VJbnQoTmUsMTApO2JyZWFrO2Nhc2UicjQiOmNhc2UicjgiOmNhc2UiZGVjaW1hbCI6a1tHXT1wYXJzZUZsb2F0KE5lKTticmVhaztjYXNlImZpbGV0aW1lIjpjYXNl''@;'; put 'put ''ImRhdGUiOmtbR109SGUoTmUpO2JyZWFrO2RlZmF1bHQ6aWYoIi8iPT1QZS5zbGljZSgtMSkpYnJlYWs7Ui5XVEYmJnR5cGVvZiBjb25zb2xlPCJ1IiYmY29uc29sZS53YXJuKCJVbmV4cGVjdGVkIixnZSxQZSx5ZSl9fWVsc2UgaWYoIjwvIiE9PWdlLnNsaWNlKDAsMikmJlIuV1RGKXRocm93''@;'; put 'put ''IG5ldyBFcnJvcihnZSl9fXJldHVybiBrfShldCxSKSk7dmFyIEV0PXt9O2lmKChSLmJvb2tTaGVldHN8fFIuYm9va1Byb3BzKSYmKE5lLlNoZWV0cz9vZT1OZS5TaGVldHMubWFwKGZ1bmN0aW9uKEZuKXtyZXR1cm4gRm4ubmFtZX0pOlllLldvcmtzaGVldHMmJlllLlNoZWV0TmFtZXMubGVu''@;'; put 'put ''Z3RoPjAmJihvZT1ZZS5TaGVldE5hbWVzKSxSLmJvb2tQcm9wcyYmKEV0LlByb3BzPVllLEV0LkN1c3Rwcm9wcz1jdCksUi5ib29rU2hlZXRzJiZ0eXBlb2Ygb2U8InUiJiYoRXQuU2hlZXROYW1lcz1vZSksUi5ib29rU2hlZXRzP0V0LlNoZWV0TmFtZXM6Ui5ib29rUHJvcHMpKXJldHVybiBF''@;'; put 'put ''dDtvZT17fTt2YXIgYXQ9e307Ui5ib29rRGVwcyYmRy5jYWxjY2hhaW4mJihhdD1mdW5jdGlvbiBEbyhTLFIsayl7cmV0dXJuIi5iaW4iPT09Ui5zbGljZSgtNCk/ZnVuY3Rpb24gZEIoUyxSLGspe3ZhciBHPVtdO3JldHVybiB1cihTLGZ1bmN0aW9uKGdlLHBlLHllKXtpZig2Mz09PXllKUcu''@;'; put 'put ''cHVzaChnZSk7ZWxzZSBpZighKChwZXx8IiIpLmluZGV4T2YoIkJlZ2luIik+MHx8KHBlfHwiIikuaW5kZXhPZigiRW5kIik+MCkpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIHJlY29yZCAiK3llKyIgIitwZSl9KSxHfShTKTpmdW5jdGlvbiBJQyhTKXt2YXIgUj1bXTtpZighUylyZXR1''@;'; put 'put ''cm4gUjt2YXIgaz0xO3JldHVybihTLm1hdGNoKGVuKXx8W10pLmZvckVhY2goZnVuY3Rpb24oRyl7dmFyIFE9dnIoRyk7c3dpdGNoKFFbMF0pe2Nhc2UiPD94bWwiOmNhc2UiPGNhbGNDaGFpbiI6Y2FzZSI8Y2FsY0NoYWluPiI6Y2FzZSI8L2NhbGNDaGFpbj4iOmJyZWFrO2Nhc2UiPGMiOmRl''@;'; put 'put ''bGV0ZSBRWzBdLFEuaT9rPVEuaTpRLmk9ayxSLnB1c2goUSl9fSksUn0oUyl9KFR0KFMsQWMoRy5jYWxjY2hhaW4pKSxHLmNhbGNjaGFpbikpO3ZhciBrdCxPdCxidD0wLGp0PXt9LEt0PU5lLlNoZWV0cztZZS5Xb3Jrc2hlZXRzPUt0Lmxlbmd0aCxZZS5TaGVldE5hbWVzPVtdO2Zvcih2YXIg''@;'; put 'put ''VG49MDtUbiE9S3QubGVuZ3RoOysrVG4pWWUuU2hlZXROYW1lc1tUbl09S3RbVG5dLm5hbWU7dmFyIHJyPVE/ImJpbiI6InhtbCIsU249Ry53b3JrYm9va3NbMF0ubGFzdEluZGV4T2YoIi8iKSxscj0oRy53b3JrYm9va3NbMF0uc2xpY2UoMCxTbisxKSsiX3JlbHMvIitHLndvcmtib29rc1sw''@;'; put 'put ''XS5zbGljZShTbisxKSsiLnJlbHMiKS5yZXBsYWNlKC9eXC8vLCIiKTtyaShTLGxyKXx8KGxyPSJ4bC9fcmVscy93b3JrYm9vay4iK3JyKyIucmVscyIpO3ZhciBYbj1iZihucihTLGxyLCEwKSxsciksQm49WG4sZnI9W107WG4mJihOZSYmTmUuRXh0ZXJuJiZOZS5FeHRlcm4ubGVuZ3RoJiZO''@;'; put 'put ''ZS5FeHRlcm4uZm9yRWFjaChmdW5jdGlvbihfcixGbil7dmFyIFppPSgiL3hsLyIrWG5bIiFpZCJdW19yXS5UYXJnZXQpLnJlcGxhY2UoL1tcL11bXC9dL2csIi8iKSx5aT1HLmxpbmtzLmluZGV4T2YoWmkpO3lpPi0xJiYoZnJbRm5dPVBlW3lpXSl9KSxOZSYmZGVsZXRlIE5lLkV4dGVybiks''@;'; put 'put ''WG4mJihYbj1mdW5jdGlvbiBPYihTLFIpe2lmKCFTKXJldHVybiAwO3RyeXtTPVIubWFwKGZ1bmN0aW9uKEcpe3JldHVybiBHLmlkfHwoRy5pZD1HLnN0clJlbElEKSxbRy5uYW1lLFNbIiFpZCJdW0cuaWRdLlRhcmdldCxucmUoU1siIWlkIl1bRy5pZF0uVHlwZSldfSl9Y2F0Y2h7cmV0dXJu''@;'; put 'put ''IG51bGx9cmV0dXJuIFMmJjAhPT1TLmxlbmd0aD9TOm51bGx9KFhuLE5lLlNoZWV0cykpO3ZhciBicj1yaShTLCJ4bC93b3Jrc2hlZXRzL3NoZWV0LnhtbCIpPzE6MCxlcj1bXSxNaT1bXTtlOmZvcihidD0wO2J0IT1ZZS5Xb3Jrc2hlZXRzOysrYnQpe3ZhciBGaT0ic2hlZXQiO2lmKFhuJiZY''@;'; put 'put ''bltidF0/KGt0PSJ4bC8iK1huW2J0XVsxXS5yZXBsYWNlKC9bXC9dP3hsXC8vLCIiKSxyaShTLGt0KXx8KGt0PVhuW2J0XVsxXSkscmkoUyxrdCl8fChrdD1sci5yZXBsYWNlKC9fcmVsc1wvLiokLywiIikrWG5bYnRdWzFdKSxGaT1YbltidF1bMl0pOmt0PShrdD0ieGwvd29ya3NoZWV0cy9z''@;'; put 'put ''aGVldCIrKGJ0KzEtYnIpKyIuIitycikucmVwbGFjZSgvc2hlZXQwXC4vLCJzaGVldC4iKSxPdD1rdC5yZXBsYWNlKC9eKC4qKShcLykoW15cL10qKSQvLCIkMS9fcmVscy8kMy5yZWxzIiksZXIucHVzaChrdCksUiYmbnVsbCE9Ui5zaGVldHMpc3dpdGNoKHR5cGVvZiBSLnNoZWV0cyl7Y2Fz''@;'; put 'put ''ZSJudW1iZXIiOmlmKGJ0IT1SLnNoZWV0cyljb250aW51ZSBlO2JyZWFrO2Nhc2Uic3RyaW5nIjppZihZZS5TaGVldE5hbWVzW2J0XS50b0xvd2VyQ2FzZSgpIT1SLnNoZWV0cy50b0xvd2VyQ2FzZSgpKWNvbnRpbnVlIGU7YnJlYWs7ZGVmYXVsdDppZihBcnJheS5pc0FycmF5JiZBcnJheS5p''@;'; put 'put ''c0FycmF5KFIuc2hlZXRzKSl7Zm9yKHZhciBuYT0wLGNhPTA7Y2EhPVIuc2hlZXRzLmxlbmd0aDsrK2NhKSJudW1iZXIiPT10eXBlb2YgUi5zaGVldHNbY2FdJiZSLnNoZWV0c1tjYV09PWJ0JiYobmE9MSksInN0cmluZyI9PXR5cGVvZiBSLnNoZWV0c1tjYV0mJlIuc2hlZXRzW2NhXS50b0xv''@;'; put 'put ''d2VyQ2FzZSgpPT1ZZS5TaGVldE5hbWVzW2J0XS50b0xvd2VyQ2FzZSgpJiYobmE9MSk7aWYoIW5hKWNvbnRpbnVlIGV9fWlmKCFSLnNraXBQYXJzZSl7dmFyIExpPXkyKFMsa3QsT3QsWWUuU2hlZXROYW1lc1tidF0sYnQsanQsb2UsRmksUixOZSxwZSx5ZSk7TGkmJkxpWyIhTERQIl0mJihN''@;'; put 'put ''aVtidF09TGlbIiFMRFAiXSxkZWxldGUgTGlbIiFMRFAiXSl9fWlmKHR5cGVvZiBwYXJzZV9zaGVldF9waXZvdDwidSIpZm9yKGJ0PTA7YnQ8UGIubGVuZ3RoOysrYnQpcGFyc2Vfc2hlZXRfcGl2b3QuYXBwbHkobnVsbCxQYltidF0pO2lmKEV0PXtEaXJlY3Rvcnk6RyxXb3JrYm9vazpOZSxQ''@;'; put 'put ''cm9wczpZZSxDdXN0cHJvcHM6Y3QsRGVwczphdCxTaGVldHM6b2UsU2hlZXROYW1lczpZZS5TaGVldE5hbWVzLFN0cmluZ3M6bDgsU3R5bGVzOnllLFRoZW1lczpwZSxTU0Y6QS5nZXRfdGFibGUoKX0sIVIuc2tpcFBhcnNlKXtpZihmdW5jdGlvbiBrQyhTKXshU3x8IVMuV29ya2Jvb2t8fCFT''@;'; put 'put ''Lldvcmtib29rLk5hbWVzfHxTLldvcmtib29rLk5hbWVzLmZvckVhY2goZnVuY3Rpb24oUil7aWYoUi5OYW1lJiYiX3hsbm0uIj09Ui5OYW1lLnNsaWNlKDAsNikmJigiX3hsbm0uUHJpbnRfQXJlYSI9PVIuTmFtZXx8Il94bG5tLlByaW50X1RpdGxlcyI9PVIuTmFtZSkpe3ZhciBrPVMuU2hl''@;'; put 'put ''ZXRzW1MuU2hlZXROYW1lc1tSLlNoZWV0XV07aWYoayl7a1siIXByaW50Il18fChrWyIhcHJpbnQiXT17fSksa1siIXByaW50Il0ucHJvcHN8fChrWyIhcHJpbnQiXS5wcm9wcz17fSk7dmFyIEc9a1siIXByaW50Il0sUT1SLlJlZjtpZigiX3hsbm0uUHJpbnRfQXJlYSI9PVIuTmFtZSl7US5p''@;'; put 'put ''bmRleE9mKCIhIik+LTEmJihRPVEuc2xpY2UoUS5pbmRleE9mKCIhIikrMSkpO3ZhciBvZT1vbyhRPVEucmVwbGFjZSgvWyRdL2csIiIpKTtHLmFyZWE9b2V9ZWxzZSJfeGxubS5QcmludF9UaXRsZXMiPT1SLk5hbWUmJihHLnRpdGxlcz17czp7cjotMSxjOi0xfSxlOntyOi0xLGM6LTF9fSxR''@;'; put 'put ''LnNwbGl0KCIsIikuZm9yRWFjaChmdW5jdGlvbihnZSl7dmFyIHllPU1zKGdlLnNsaWNlKGdlLmluZGV4T2YoIiEiKSsxKS5yZXBsYWNlKC9bJF0vZywiIikpO3llLnMuYz4tMSYmKEcudGl0bGVzLnMuYz15ZS5zLmMpLHllLmUuYz4tMSYmKEcudGl0bGVzLmUuYz15ZS5lLmMpLHllLnMucj4t''@;'; put 'put ''MSYmKEcudGl0bGVzLnMucj15ZS5zLnIpLHllLmUucj4tMSYmKEcudGl0bGVzLmUucj15ZS5lLnIpfSkpfX19KX0oRXQpLFImJlIuYm9va0ZpbGVzJiYoRXQua2V5cz1rLEV0LmZpbGVzPVMuZmlsZXMpLFImJlIuYm9va1ZCQSYmKEcudmJhLmxlbmd0aD4wP0V0LnZiYXJhdz1UdChTLEFjKEcu''@;'; put 'put ''dmJhWzBdKSwhMCk6Ry5kZWZhdWx0cyYmRy5kZWZhdWx0cy5iaW49PT1VayYmKEV0LnZiYXJhdz1UdChTLCJ4bC92YmFQcm9qZWN0LmJpbiIsITApKSksQm4mJkJuWyIhaWQiXSl7Zm9yKHZhciBrcj1bXSxWbj0xO1ZuPD0xMDI0OysrVm4pQm5bIiFpZCJdWyJySWQiK1ZuXSYmQm5bIiFpZCJd''@;'; put 'put ''WyJySWQiK1ZuXS5UeXBlJiYvY3VzdG9tWG1sJC8udGVzdChCblsiIWlkIl1bInJJZCIrVm5dLlR5cGUpJiZrci5wdXNoKGZuKEJuWyIhaWQiXVsicklkIitWbl0uVGFyZ2V0LEcud29ya2Jvb2tzWzBdKSk7a3IubGVuZ3RoPjAmJihFdC5DdXN0b21YTUw9W10sa3IuZm9yRWFjaChmdW5jdGlv''@;'; put 'put ''bihfcil7dmFyIEZuPXtkYXRhOm5yKFMsQWMoX3IpKX0sanI9VnIoX3IpO3RyeXt2YXIgWmk9YmYobnIoUyxBYyhqciksITApLGpyKTtpZihaaSlmb3IodmFyIHlpPTE7eWk8PTEwMjQ7Kyt5aSlaaVsiIWlkIl1bInJJZCIreWldJiZaaVsiIWlkIl1bInJJZCIreWldLlR5cGUmJi9jdXN0b21Y''@;'; put 'put ''bWxQcm9wcyQvLnRlc3QoWmlbIiFpZCJdWyJySWQiK3lpXS5UeXBlKSYmKEZuLnByb3BzPW5yKFMsQWMoZm4oWmlbIiFpZCJdWyJySWQiK3lpXS5UYXJnZXQsX3IpKSkpfWNhdGNoe31FdC5DdXN0b21YTUwucHVzaChGbil9KSl9dmFyIEJyPWh0KFMsInhsL21vZGVsL2l0ZW0uZGF0YSIsITAp''@;'; put 'put ''O0JyJiYoRXQubW9kZWw9QnIpLEcuY29ubiYmKEV0LmNvbm49VHQoUyxBYyhHLmNvbm4pLCEwKSksZnIubGVuZ3RoJiYoRXQuRXh0ZXJuYWxXQj1mciksTmUmJihOZS5QUEk9RGYpfXJldHVybiBSLnRlbXBsYXRlJiYoRXQuX3dzcGF0aHM9ZXIsRXQuX3N0eXBhdGg9QWMoRy5zdHlsZXx8IiIp''@;'; put 'put ''LEV0Ll93YnBhdGg9QWMoRy53b3JrYm9va3NbMF18fCJ4bC93b3JrYm9vay54bWwiKSxFdC5fdm1scGF0aHM9TWksRXQuX3dicmVsc3BhdGg9bHIsRXQuX2N0PW5yKFMsIltDb250ZW50X1R5cGVzXS54bWwiKSxFdC5maWxlcz1TLmZpbGVzLEJjKEV0LFMsUikpLEV0fWZ1bmN0aW9uIEZiKFMs''@;'; put 'put ''Uil7dmFyIGs9Unx8e307ay5wYXNzd29yZHx8KGsucGFzc3dvcmQ9IlZlbHZldFN3ZWF0c2hvcCIpO3ZhciBHPSJXb3JrYm9vayIsUT12ZS5maW5kKFMsRyk7dHJ5e2lmKCEoUT12ZS5maW5kKFMsRz0iLyFEYXRhU3BhY2VzL1ZlcnNpb24iKSl8fCFRLmNvbnRlbnQpdGhyb3cgbmV3IEVycm9y''@;'; put 'put ''KCJFQ01BLTM3NiBFbmNyeXB0ZWQgZmlsZSBtaXNzaW5nICIrRyk7aWYoZnVuY3Rpb24gVFYoUyl7dmFyIFI9e307Ui5pZD1TLnJlYWRfc2hpZnQoMCwibHBwNCIpLFIuUj1QMShTLDQpLFIuVT1QMShTLDQpLFIuVz1QMShTLDQpfShRLmNvbnRlbnQpLCEoUT12ZS5maW5kKFMsRz0iLyFEYXRh''@;'; put 'put ''U3BhY2VzL0RhdGFTcGFjZU1hcCIpKXx8IVEuY29udGVudCl0aHJvdyBuZXcgRXJyb3IoIkVDTUEtMzc2IEVuY3J5cHRlZCBmaWxlIG1pc3NpbmcgIitHKTt2YXIgb2U9ZnVuY3Rpb24gQVYoUyl7dmFyIFI9W107Uy5sKz00O2Zvcih2YXIgaz1TLnJlYWRfc2hpZnQoNCk7ay0tID4wOylSLnB1''@;'; put 'put ''c2goaEMoUykpO3JldHVybiBSfShRLmNvbnRlbnQpO2lmKDEhPT1vZS5sZW5ndGh8fDEhPT1vZVswXS5jb21wcy5sZW5ndGh8fDAhPT1vZVswXS5jb21wc1swXS50fHwiU3Ryb25nRW5jcnlwdGlvbkRhdGFTcGFjZSIhPT1vZVswXS5uYW1lfHwiRW5jcnlwdGVkUGFja2FnZSIhPT1vZVswXS5j''@;'; put 'put ''b21wc1swXS52KXRocm93IG5ldyBFcnJvcigiRUNNQS0zNzYgRW5jcnlwdGVkIGZpbGUgYmFkICIrRyk7aWYoIShRPXZlLmZpbmQoUyxHPSIvIURhdGFTcGFjZXMvRGF0YVNwYWNlSW5mby9TdHJvbmdFbmNyeXB0aW9uRGF0YVNwYWNlIikpfHwhUS5jb250ZW50KXRocm93IG5ldyBFcnJvcigi''@;'; put 'put ''RUNNQS0zNzYgRW5jcnlwdGVkIGZpbGUgbWlzc2luZyAiK0cpO3ZhciBnZT1mdW5jdGlvbiBrVihTKXt2YXIgUj1bXTtTLmwrPTQ7Zm9yKHZhciBrPVMucmVhZF9zaGlmdCg0KTtrLS0gPjA7KVIucHVzaChTLnJlYWRfc2hpZnQoMCwibHBwNCIpKTtyZXR1cm4gUn0oUS5jb250ZW50KTtpZigx''@;'; put 'put ''IT1nZS5sZW5ndGh8fCJTdHJvbmdFbmNyeXB0aW9uVHJhbnNmb3JtIiE9Z2VbMF0pdGhyb3cgbmV3IEVycm9yKCJFQ01BLTM3NiBFbmNyeXB0ZWQgZmlsZSBiYWQgIitHKTtpZighKFE9dmUuZmluZChTLEc9Ii8hRGF0YVNwYWNlcy9UcmFuc2Zvcm1JbmZvL1N0cm9uZ0VuY3J5cHRpb25UcmFu''@;'; put 'put ''c2Zvcm0vIVByaW1hcnkiKSl8fCFRLmNvbnRlbnQpdGhyb3cgbmV3IEVycm9yKCJFQ01BLTM3NiBFbmNyeXB0ZWQgZmlsZSBtaXNzaW5nICIrRyk7IWZ1bmN0aW9uIGVuZShTKXt2YXIgUj1mdW5jdGlvbiBEVihTKXt2YXIgUj17fTtyZXR1cm4gUy5yZWFkX3NoaWZ0KDQpLFMubCs9NCxSLmlk''@;'; put 'put ''PVMucmVhZF9zaGlmdCgwLCJscHA0IiksUi5uYW1lPVMucmVhZF9zaGlmdCgwLCJscHA0IiksUi5SPVAxKFMsNCksUi5VPVAxKFMsNCksUi5XPVAxKFMsNCksUn0oUyk7aWYoUi5lbmFtZT1TLnJlYWRfc2hpZnQoMCwiOGxwcDQiKSxSLmJsa3N6PVMucmVhZF9zaGlmdCg0KSxSLmNtb2RlPVMu''@;'; put 'put ''cmVhZF9zaGlmdCg0KSw0IT1TLnJlYWRfc2hpZnQoNCkpdGhyb3cgbmV3IEVycm9yKCJCYWQgIVByaW1hcnkgcmVjb3JkIik7cmV0dXJuIFJ9KFEuY29udGVudCl9Y2F0Y2h7fWlmKCEoUT12ZS5maW5kKFMsRz0iL0VuY3J5cHRpb25JbmZvIikpfHwhUS5jb250ZW50KXRocm93IG5ldyBFcnJv''@;'; put 'put ''cigiRUNNQS0zNzYgRW5jcnlwdGVkIGZpbGUgbWlzc2luZyAiK0cpO3ZhciBwZT1mdW5jdGlvbiBYNihTKXt2YXIgUj1QMShTKTtzd2l0Y2goUi5NaW5vcil7Y2FzZSAyOnJldHVybltSLk1pbm9yLFJWKFMpXTtjYXNlIDM6cmV0dXJuW1IuTWlub3IsSjYoKV07Y2FzZSA0OnJldHVybltSLk1p''@;'; put 'put ''bm9yLGZDKFMpXX10aHJvdyBuZXcgRXJyb3IoIkVDTUEtMzc2IEVuY3J5cHRlZCBmaWxlIHVucmVjb2duaXplZCBWZXJzaW9uOiAiK1IuTWlub3IpfShRLmNvbnRlbnQpO2lmKCEoUT12ZS5maW5kKFMsRz0iL0VuY3J5cHRlZFBhY2thZ2UiKSl8fCFRLmNvbnRlbnQpdGhyb3cgbmV3IEVycm9y''@;'; put 'put ''KCJFQ01BLTM3NiBFbmNyeXB0ZWQgZmlsZSBtaXNzaW5nICIrRyk7aWYoND09cGVbMF0pcmV0dXJuIGZ1bmN0aW9uIExiKFMsUixrLEcpe3ZhciBRPXZlLnV0aWxzLnByZXBfYmxvYjtpZigiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2UvMjAwNi9rZXlFbmNyeXB0b3IvcGFz''@;'; put 'put ''c3dvcmQiIT1TLnVyaSl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIEVDTUEtMzc2IEFnaWxlIFVSSSAiK1MudXJpKTt2YXIgb2U9Uy5lbmNzWzBdLGdlPW9lLmhhc2hBbGdvcml0aG0scGU9ImFlcy0yNTYtY2JjIix5ZT1CdWZmZXIuZnJvbShvZS5zYWx0VmFsdWUsImJhc2U2NCIpLFBl''@;'; put 'put ''PUJ1ZmZlci5mcm9tKFMuc2FsdFZhbHVlLCJiYXNlNjQiKSxOZT0rb2UuYmxvY2tTaXplLFllPStvZS5rZXlCaXRzPj4zLGV0PW1jKEJ1ZmZlci5jb25jYXQoW3llLEJ1ZmZlci5mcm9tKGNwdGFibGUudXRpbHMuZW5jb2RlKDEyMDAsaykpXSksZ2UpLGN0PUJ1ZmZlci5hbGxvYyg0KTtRKGN0''@;'; put 'put ''LDApO2Zvcih2YXIgRXQ9MDtFdDxvZS5zcGluQ291bnQ7KytFdCljdC5sPTAsY3Qud3JpdGVfc2hpZnQoNCxFdCksZXQ9bWMoQnVmZmVyLmNvbmNhdChbY3QsZXRdKSxnZSk7dmFyIGF0PWZ1bmN0aW9uKGJyLGVyLE1pLEZpKXt2YXIgbmE9bWMoQnVmZmVyLmNvbmNhdChbYnIsQnVmZmVyLmZy''@;'; put 'put ''b20oWzIwLDExMCwxMSwyMzEsMTcxLDE3MiwyMDgsMjE0XSldKSxGaSksY2E9bmEubGVuZ3RoPj1NaT9uYS5zbGljZSgwLE1pKTpCdWZmZXIuYWxsb2MoTWkpO2lmKG5hLmxlbmd0aDxNaSl7Zm9yKHZhciBMaT0wO0xpPG5hLmxlbmd0aDsrK0xpKWNhW0xpXT1uYVtMaV07Zm9yKDtMaTxNaTsr''@;'; put 'put ''K0xpKWNhW0xpXT01NH1yZXR1cm4gY2F9KGV0LDAsWWUsZ2UpO3N3aXRjaChvZS5jaXBoZXJBbGdvcml0aG0pe2Nhc2UiQUVTIjppZigiQ2hhaW5pbmdNb2RlQ0JDIiE9b2UuY2lwaGVyQ2hhaW5pbmcpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBjaXBoZXIgY2hhaW5pbmcgIitvZS5j''@;'; put 'put ''aXBoZXJDaGFpbmluZyk7cGU9ImFlcy0iK29lLmtleUJpdHMrIi1jYmMiO2JyZWFrO2Nhc2UiUkMyIjpwZT0icmMyIjticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgY2lwaGVyIGFsZ28gIitvZS5jaXBoZXJBbGdvcml0aG0pfXllPWZ1bmN0aW9uKGZyKXtmb3Io''@;'; put 'put ''dmFyIGJyPUJ1ZmZlci5hbGxvYyhOZSksZXI9MDtlcjxOZTsrK2VyKWJyW2VyXT1lcjxmci5sZW5ndGg/ZnJbZXJdOjU0O3JldHVybiBicn0oeWUpO3ZhciBidD1CdWZmZXIuZnJvbShvZS5lbmNyeXB0ZWRLZXlWYWx1ZSwiYmFzZTY0IiksanQ9WTQoYXQseWUscGUpLnVwZGF0ZShidCksa3Q9''@;'; put 'put ''WTQobWMoQnVmZmVyLmNvbmNhdChbZXQsQnVmZmVyLmZyb20oWzIxNSwxNzAsMTUsMTA5LDQ4LDk3LDUyLDc4XSldKSxnZSkuc2xpY2UoMCxZZSkseWUscGUpLnVwZGF0ZShCdWZmZXIuZnJvbShvZS5lbmNyeXB0ZWRWZXJpZmllckhhc2hWYWx1ZSwiYmFzZTY0IikpLE90PW1jKFk0KG1jKEJ1''@;'; put 'put ''ZmZlci5jb25jYXQoW2V0LEJ1ZmZlci5mcm9tKFsyNTQsMTY3LDIxMCwxMTgsNTksNzUsMTU4LDEyMV0pXSksZ2UpLnNsaWNlKDAsWWUpLHllLHBlKS51cGRhdGUoQnVmZmVyLmZyb20ob2UuZW5jcnlwdGVkVmVyaWZpZXJIYXNoSW5wdXQsImJhc2U2NCIpKSxnZSksS3Q9K29lLmhhc2hTaXpl''@;'; put 'put ''fHxNYXRoLm1pbihrdC5sZW5ndGgsT3QubGVuZ3RoKTtpZigwIT1rdC5zbGljZSgwLEt0KS5jb21wYXJlKE90LnNsaWNlKDAsS3QpKSl0aHJvdyBuZXcgRXJyb3IoIkluY29ycmVjdCBQYXNzd29yZCIpO1EoUiwwKTt2YXIgVG49Ui5yZWFkX3NoaWZ0KDQpO1IubCs9NDt2YXIgcnI9W10sU249''@;'; put 'put ''QnVmZmVyLmNvbmNhdChbUGUsQnVmZmVyLmFsbG9jKDQpXSk7Zm9yKFEoU24pLEV0PTA7Ui5sPFIubGVuZ3RoOylTbi5sPXllLmxlbmd0aCxTbi53cml0ZV9zaGlmdCg0LEV0KSxyci5wdXNoKFk0KGp0LG1jKEJ1ZmZlci5mcm9tKFNuKSxnZSkuc2xpY2UoMCwxNikscGUpLnVwZGF0ZShCdWZm''@;'; put 'put ''ZXIuZnJvbShSLnNsaWNlKFIubCxSLmwrNDA5NikpKSksUi5sKz00MDk2LCsrRXQ7dmFyIFhuPUJ1ZmZlci5jb25jYXQocnIpLnNsaWNlKDAsVG4pLEJuPXF0KEcpO3JldHVybiBCbi50eXBlPSJidWZmZXIiLCQ1KFhuLEJuKX0ocGVbMV0sUS5jb250ZW50LGsucGFzc3dvcmR8fCIiLGspO2lm''@;'; put 'put ''KDI9PXBlWzBdKXJldHVybiBmdW5jdGlvbiBGSShTLFIsayxHKXt2YXIgUT12ZS51dGlscy5wcmVwX2Jsb2I7aWYoIlN0ZCIhPT1TLnQpdGhyb3cgbmV3IEVycm9yKCJFQ01BLTM3NiBCYWQgU3RhbmRhcmQgRW5jcnlwdGlvbiIpO3ZhciBvZT1TLnYuU2FsdCxnZT1TLnYuVmVyaWZpZXIscGU9''@;'; put 'put ''Uy52LlZlcmlmaWVySGFzaDtpZigzNiE9Uy5oLkZsYWdzKXRocm93IG5ldyBFcnJvcigiRUNNQS0zNzYgU3RhbmRhcmQgRW5jcnlwdGlvbiBiYWQgRmxhZ3MiKTt2YXIgeWU9MCxQZT0iIjtzd2l0Y2goUy5oLkFsZ0lEKXtjYXNlIDI2MTI2OnllPTEyOCxQZT0iYWVzLTEyOC1lY2IiO2JyZWFr''@;'; put 'put ''O2Nhc2UgMjYxMjc6eWU9MTk2LFBlPSJhZXMtMTkyLWVjYiI7YnJlYWs7Y2FzZSAyNjEyODp5ZT0yNTYsUGU9ImFlcy0yNTYtZWNiIjticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiRUNNQS0zNzYgQmFkIFN0YW5kYXJkIEVuY3J5cHRpb24iKX1pZigzMjc3MiE9Uy5oLkFsZ0lESGFz''@;'; put 'put ''aCl0aHJvdyBuZXcgRXJyb3IoIkVDTUEtMzc2IEJhZCBTdGFuZGFyZCBFbmNyeXB0aW9uIik7aWYoUy5oLktleVNpemUhPXllKXRocm93IG5ldyBFcnJvcigiQWxnSUQvS2V5U2l6ZSBtaXNtYXRjaCIpO2lmKDI0IT1TLmguUHJvdmlkZXJUeXBlKXRocm93IG5ldyBFcnJvcigiRUNNQS0zNzYg''@;'; put 'put ''dW5zdXBwb3J0ZWQgUHJvdmlkZXJUeXBlICIrUy5oLlByb3ZpZGVyVHlwZSk7aWYoIk1pY3Jvc29mdCBFbmhhbmNlZCBSU0EgYW5kIEFFUyBDcnlwdG9ncmFwaGljIFByb3ZpZGVyIiE9PVMuaC5DU1BOYW1lLnNsaWNlKDAsNTMpKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgQ3J5cHRv''@;'; put 'put ''IFByb3ZpZGVyICIrUy5oLkNTUE5hbWUpO3ZhciBZZT0iU0hBLTEiLGV0PXllPj4zLGN0PW1jKEJ1ZmZlci5jb25jYXQoW29lLGNwdGFibGUudXRpbHMuZW5jb2RlKDEyMDAsayldKSxZZSksRXQ9QnVmZmVyLmFsbG9jKDQpO1EoRXQsMCk7Zm9yKHZhciBhdD0wO2F0PDVlNDsrK2F0KUV0Lmw9''@;'; put 'put ''MCxFdC53cml0ZV9zaGlmdCg0LGF0KSxjdD1tYyhCdWZmZXIuY29uY2F0KFtFdCxjdF0pLFllKTtFdC5sPTAsRXQud3JpdGVfc2hpZnQoNCwwKTt2YXIgcnIsU24sbHIsWG4sQm4sanQ9KFhuPShscj1mdW5jdGlvbihicixlcixNaSl7Zm9yKHZhciBGaT1CdWZmZXIuYWxsb2MoNjQpLG5hPTA7''@;'; put 'put ''bmE8RmkubGVuZ3RoOysrbmEpRmlbbmFdPWJyO2ZvcihuYT0wO25hPGVyLmxlbmd0aDsrK25hKUZpW25hXV49ZXJbbmFdO3JldHVybiBtYyhGaSxNaSl9KSg1NCxycj1tYyhCdWZmZXIuY29uY2F0KFtjdCxFdF0pLFllKSxTbj1ZZSksQm49bHIoOTIscnIsU24pLEJ1ZmZlci5jb25jYXQoW1hu''@;'; put 'put ''LEJuXSkuc2xpY2UoMCxldCkpO2lmKFk0KGp0LEJ1ZmZlci5hbGxvYygwKSxQZSkudXBkYXRlKHBlKS5zbGljZSgwLDIwKS5jb21wYXJlKG1jKFk0KGp0LEJ1ZmZlci5hbGxvYygwKSxQZSkudXBkYXRlKGdlKSxZZSkpKXRocm93IG5ldyBFcnJvcigiSW5jb3JyZWN0IFBhc3N3b3JkIik7UShS''@;'; put 'put ''LDApO3ZhciBrdD1SLnJlYWRfc2hpZnQoNCk7Ui5sKz00O3ZhciBPdD1bXTtmb3IoYXQ9MDtSLmw8Ui5sZW5ndGg7KU90LnB1c2goWTQoanQsQnVmZmVyLmFsbG9jKDApLFBlKS51cGRhdGUoUi5zbGljZShSLmwsUi5sKzQwOTYpKSksUi5sKz00MDk2LCsrYXQ7cmV0dXJuICQ1KEJ1ZmZlci5j''@;'; put 'put ''b25jYXQoT3QpLnNsaWNlKDAsa3QpLEcpfShwZVsxXSxRLmNvbnRlbnQsay5wYXNzd29yZHx8IiIsayk7dGhyb3cgbmV3IEVycm9yKCJGaWxlIGlzIHBhc3N3b3JkLXByb3RlY3RlZCIpfXZhciBiZD1mdW5jdGlvbigpe307ZnVuY3Rpb24gSDgoUyxSKXtpZihSLnRlbXBsYXRlKXJldHVybiBi''@;'; put 'put ''ZChTLFIpO2lmKCJvZHMiPT1SLmJvb2tUeXBlKXJldHVybiBSSShTLFIpO0lmKFImJlIuUFBJfHw5NiksUyYmIVMuU1NGJiYoUy5TU0Y9QS5nZXRfdGFibGUoKSksUyYmUy5TU0YmJihhZShBKSxBLmxvYWRfdGFibGUoUy5TU0YpLFIucmV2c3NmPWtlKFMuU1NGKSxSLnJldnNzZltTLlNTRls2''@;'; put 'put ''NTUzNV1dPTAsUi5zc2Y9Uy5TU0YpLFMuU3R5bGVzPXtGb250czpSLkZvbnRzPVt7c3o6MTIsY29sb3I6e3RoZW1lOjEscmdiOiIwMDAwMDAifSxuYW1lOiJDYWxpYnJpIixmYW1pbHk6MixzY2hlbWU6Im1pbm9yIn1dLEZpbGxzOlIuRmlsbHM9W3twYXR0ZXJuVHlwZToibm9uZSJ9LHtwYXR0''@;'; put 'put ''ZXJuVHlwZToiZ3JheTEyNSJ9XSxCb3JkZXJzOlIuQm9yZGVycz1be31dLERYRjpSLkRYRj1TLlN0eWxlcyYmUy5TdHlsZXMuRFhGfHxbXSxUYWJsZTpSLlRhYmxlPVMuU3R5bGVzJiZTLlN0eWxlcy5UYWJsZXx8W119LFIub3ZlcnJpZGVNRFc/VGM9Ui5vdmVycmlkZU1EVzpJNChSLkZvbnRz''@;'; put 'put ''WzBdKSxSLnJlbHM9e30sUi53YnJlbHM9e30sUi5TdHJpbmdzPVtdLFIuU3RyaW5ncy5Db3VudD0wLFIuU3RyaW5ncy5VbmlxdWU9MCxxMz9SLnJldlN0cmluZ3M9bmV3IE1hcDooUi5yZXZTdHJpbmdzPXt9LFIucmV2U3RyaW5ncy5mb289W10sZGVsZXRlIFIucmV2U3RyaW5ncy5mb28pO3Zh''@;'; put 'put ''ciBrPSJ4bHNiIj09Ui5ib29rVHlwZT8iYmluIjoieG1sIixHPVlrLmluZGV4T2YoUi5ib29rVHlwZSk+LTEsUT17d29ya2Jvb2tzOltdLHNoZWV0czpbXSxjaGFydHM6W10sZGlhbG9nczpbXSxtYWNyb3M6W10scmVsczpbXSxzdHJzOltdLGNvbW1lbnRzOltdLGxpbmtzOltdLGNvcmVwcm9w''@;'; put 'put ''czpbXSxleHRwcm9wczpbXSxjdXN0cHJvcHM6W10sdGhlbWVzOltdLHN0eWxlczpbXSxjYWxjY2hhaW5zOltdLHZiYTpbXSxkcmF3aW5nczpbXSxwaXZvdHM6W10scGl2b3RjYWNoZXM6W10scGl2b3RyZWNvcmRzOltdLGRhdGFtb2RlbHM6W10sY2hhcnRvYmpzOltdLGNoYXJ0c3R5bGVzOltd''@;'; put 'put ''LGNoYXJ0Y29sb3JzOltdLGNoYXJ0ZXhzOltdLHRhYmxlczpbXSxjb25uczpbXSxjdHJscHJvcHM6W10sY3VzdG9teG1scHJvcHM6W10sVE9ETzpbXSx4bWxuczoiIn07UGYoUj1SfHx7fSk7dmFyIG9lPWhpKCksZ2U9IiIscGU9MDtpZihSLmNlbGxYZnM9W10sUi5jZWxsU3R5bGVYZnM9W3tu''@;'; put 'put ''YW1lOiJOb3JtYWwifV0sbDAoUi5jZWxsWGZzLFIuY2VsbFN0eWxlWGZzLHt9LHtyZXZzc2Y6e0dlbmVyYWw6MH19KSxTLlByb3BzfHwoUy5Qcm9wcz17fSksam4ob2UsZ2U9ImRvY1Byb3BzL2NvcmUueG1sIixmdW5jdGlvbiB6dyhTLFIpe3ZhciBrPVJ8fHt9LEc9W0lpLGp3XSxRPXt9O2lm''@;'; put 'put ''KCFTJiYhay5Qcm9wcylyZXR1cm4gRy5qb2luKCIiKTtTJiYobnVsbCE9Uy5DcmVhdGVkRGF0ZSYmeWYoImRjdGVybXM6Y3JlYXRlZCIsInN0cmluZyI9PXR5cGVvZiBTLkNyZWF0ZWREYXRlP1MuQ3JlYXRlZERhdGU6Y2YoUy5DcmVhdGVkRGF0ZSxrLldURikseyJ4c2k6dHlwZSI6ImRjdGVy''@;'; put 'put ''bXM6VzNDRFRGIn0sRyxRKSxudWxsIT1TLk1vZGlmaWVkRGF0ZSYmeWYoImRjdGVybXM6bW9kaWZpZWQiLCJzdHJpbmciPT10eXBlb2YgUy5Nb2RpZmllZERhdGU/Uy5Nb2RpZmllZERhdGU6Y2YoUy5Nb2RpZmllZERhdGUsay5XVEYpLHsieHNpOnR5cGUiOiJkY3Rlcm1zOlczQ0RURiJ9LEcs''@;'; put 'put ''USkpO2Zvcih2YXIgb2U9MDtvZSE9UjAubGVuZ3RoOysrb2Upe3ZhciBnZT1SMFtvZV0scGU9ay5Qcm9wcyYmbnVsbCE9ay5Qcm9wc1tnZVsxXV0/ay5Qcm9wc1tnZVsxXV06Uz9TW2dlWzFdXTpudWxsOyEwPT09cGU/cGU9IjEiOiExPT09cGU/cGU9IjAiOiJudW1iZXIiPT10eXBlb2YgcGUm''@;'; put 'put ''JihwZT1TdHJpbmcocGUpKSxudWxsIT1wZSYmeWYoZ2VbMF0scGUsbnVsbCxHLFEpfXJldHVybiBHLmxlbmd0aD4yJiYoR1tHLmxlbmd0aF09IjwvY3A6Y29yZVByb3BlcnRpZXM+IixHWzFdPUdbMV0ucmVwbGFjZSgiLz4iLCI+IikpLEcuam9pbigiIil9KFMuUHJvcHMsUikpLFEuY29yZXBy''@;'; put 'put ''b3BzLnB1c2goZ2UpLEVyKFIucmVscywyLGdlLEthLkNPUkVfUFJPUFMpLGdlPSJkb2NQcm9wcy9hcHAueG1sIiwhUy5Qcm9wc3x8IVMuUHJvcHMuU2hlZXROYW1lcylpZihTLldvcmtib29rJiZTLldvcmtib29rLlNoZWV0cyl7Zm9yKHZhciB5ZT1bXSxQZT0wO1BlPFMuU2hlZXROYW1lcy5s''@;'; put 'put ''ZW5ndGg7KytQZSkyIT0oUy5Xb3JrYm9vay5TaGVldHNbUGVdfHx7fSkuSGlkZGVuJiZ5ZS5wdXNoKFMuU2hlZXROYW1lc1tQZV0pO1MuUHJvcHMuU2hlZXROYW1lcz15ZX1lbHNlIFMuUHJvcHMuU2hlZXROYW1lcz1TLlNoZWV0TmFtZXM7Uy5Qcm9wcy5Xb3Jrc2hlZXRzPVMuUHJvcHMuU2hl''@;'; put 'put ''ZXROYW1lcy5sZW5ndGgsam4ob2UsZ2UsZnVuY3Rpb24gVXcoUyl7dmFyIFI9W10saz1QcjtyZXR1cm4gU3x8KFM9e30pLFMuQXBwbGljYXRpb249IlNoZWV0SlMiLFJbUi5sZW5ndGhdPUlpLFJbUi5sZW5ndGhdPUw2LHJoLmZvckVhY2goZnVuY3Rpb24oRyl7aWYodm9pZCAwIT09U1tHWzFd''@;'; put 'put ''XSl7dmFyIFE7c3dpdGNoKEdbMl0pe2Nhc2Uic3RyaW5nIjpRPUxyKFN0cmluZyhTW0dbMV1dKSk7YnJlYWs7Y2FzZSJib29sIjpRPVNbR1sxXV0/InRydWUiOiJmYWxzZSJ9dm9pZCAwIT09USYmKFJbUi5sZW5ndGhdPWsoR1swXSxRKSl9fSksUltSLmxlbmd0aF09aygiSGVhZGluZ1BhaXJz''@;'; put 'put ''IixrKCJ2dDp2ZWN0b3IiLGsoInZ0OnZhcmlhbnQiLCI8dnQ6bHBzdHI+V29ya3NoZWV0czwvdnQ6bHBzdHI+IikraygidnQ6dmFyaWFudCIsaygidnQ6aTQiLFN0cmluZyhTLldvcmtzaGVldHMpKSkse3NpemU6MixiYXNlVHlwZToidmFyaWFudCJ9KSksUltSLmxlbmd0aF09aygiVGl0bGVz''@;'; put 'put ''T2ZQYXJ0cyIsaygidnQ6dmVjdG9yIixTLlNoZWV0TmFtZXMubWFwKGZ1bmN0aW9uKEcpe3JldHVybiI8dnQ6bHBzdHI+IitMcihHKSsiPC92dDpscHN0cj4ifSkuam9pbigiIikse3NpemU6Uy5Xb3Jrc2hlZXRzLGJhc2VUeXBlOiJscHN0ciJ9KSksUi5sZW5ndGg+MiYmKFJbUi5sZW5ndGhd''@;'; put 'put ''PSI8L1Byb3BlcnRpZXM+IixSWzFdPVJbMV0ucmVwbGFjZSgiLz4iLCI+IikpLFIuam9pbigiIil9KFMuUHJvcHMpKSxRLmV4dHByb3BzLnB1c2goZ2UpLEVyKFIucmVscywzLGdlLEthLkVYVF9QUk9QUyksUy5DdXN0cHJvcHMhPT1TLlByb3BzJiZPZShTLkN1c3Rwcm9wc3x8e30pLmxlbmd0''@;'; put 'put ''aD4wJiYoam4ob2UsZ2U9ImRvY1Byb3BzL2N1c3RvbS54bWwiLGZ1bmN0aW9uIF9mKFMpe3ZhciBSPVtJaSxfdl07aWYoIVMpcmV0dXJuIFIuam9pbigiIik7dmFyIGs9MTtyZXR1cm4gT2UoUykuZm9yRWFjaChmdW5jdGlvbihRKXsrK2ssUltSLmxlbmd0aF09UHIoInByb3BlcnR5IixmdW5j''@;'; put 'put ''dGlvbiBDcyhTLFIpe3N3aXRjaCh0eXBlb2YgUyl7Y2FzZSJzdHJpbmciOnZhciBrPVByKCJ2dDpscHdzdHIiLExyKFMpKTtyZXR1cm4gUiYmKGs9ay5yZXBsYWNlKC8mcXVvdDsvZywiX3gwMDIyXyIpKSxrO2Nhc2UibnVtYmVyIjpyZXR1cm4gUHIoKDB8Uyk9PVM/InZ0Omk0IjoidnQ6cjgi''@;'; put 'put ''LExyKFN0cmluZyhTKSkpO2Nhc2UiYm9vbGVhbiI6cmV0dXJuIFByKCJ2dDpib29sIixTPyJ0cnVlIjoiZmFsc2UiKX1pZihTIGluc3RhbmNlb2YgRGF0ZSlyZXR1cm4gUHIoInZ0OmZpbGV0aW1lIixjZihTKSk7dGhyb3cgbmV3IEVycm9yKCJVbmFibGUgdG8gc2VyaWFsaXplICIrUyl9KFNb''@;'; put 'put ''UV0sITApLHtmbXRpZDoie0Q1Q0RENTA1LTJFOUMtMTAxQi05Mzk3LTA4MDAyQjJDRjlBRX0iLHBpZDprLG5hbWU6THIoUSl9KX0pLFIubGVuZ3RoPjImJihSW1IubGVuZ3RoXT0iPC9Qcm9wZXJ0aWVzPiIsUlsxXT1SWzFdLnJlcGxhY2UoIi8+IiwiPiIpKSxSLmpvaW4oIiIpfShTLkN1c3Rw''@;'; put 'put ''cm9wcykpLFEuY3VzdHByb3BzLnB1c2goZ2UpLEVyKFIucmVscyw0LGdlLEthLkNVU1RfUFJPUFMpKTt2YXIgTmU9W10sWWU9W107ZnVuY3Rpb24gZXQoVG4scnIpe1llLnB1c2goW3BlLTEscnIsVG5dKX1mdW5jdGlvbiBjdChUbil7TmUucHVzaChbcGUtMSxUbl0pLEVyKEV0LC0xLCIuLi9w''@;'; put 'put ''aXZvdFRhYmxlcy9waXZvdFRhYmxlIitOZS5sZW5ndGgrIi4iK2ssS2EuUElWT1QpfWZvcihwZT0xO3BlPD1TLlNoZWV0TmFtZXMubGVuZ3RoOysrcGUpe3ZhciBFdD17IiFpZCI6e319LGF0PVMuU2hlZXRzW1MuU2hlZXROYW1lc1twZS0xXV0sYnQ9KGF0fHx7fSlbIiF0eXBlIl18fCJzaGVl''@;'; put 'put ''dCI7c3dpdGNoKGJ0KXtjYXNlImNoYXJ0IjppZih0eXBlb2Ygd3JpdGVfZHJhd2luZ188InUiKXtqbihvZSxnZT0ieGwvY2hhcnRzaGVldHMvc2hlZXQiK3BlKyIuIitrLGhJKHBlLTEsZ2UsUixTLEV0KSksUS5jaGFydHMucHVzaChnZSksRXIoUi53YnJlbHMsLTEsImNoYXJ0c2hlZXRzL3No''@;'; put 'put ''ZWV0IitwZSsiLiIrayxLYS5DUyk7YnJlYWt9ZGVmYXVsdDpqbihvZSxnZT0ieGwvd29ya3NoZWV0cy9zaGVldCIrcGUrIi4iK2ssZEkocGUtMSxnZSxSLFMsRXQpKSxRLnNoZWV0cy5wdXNoKGdlKSxFcihSLndicmVscywtMSwid29ya3NoZWV0cy9zaGVldCIrcGUrIi4iK2ssS2EuV1NbMF0p''@;'; put 'put ''fWlmKGF0KXsiY2hhcnQiPT1idCYmIWF0WyIhcG9zIl0mJihhdFsiIXBvcyJdPXt4OjAseTowLHc6OTAwLGg6NjAwfSk7dmFyIGp0PWF0WyIhY29tbWVudHMiXSxrdD0hMTtpZihqdCYmanQubGVuZ3RoPjApe3ZhciBPdD0ieGwvY29tbWVudHMiK3BlKyIuIitrO2puKG9lLE90LEF6KGp0LE90''@;'; put 'put ''LFIpKSxRLmNvbW1lbnRzLnB1c2goT3QpLEVyKEV0LC0xLCIuLi9jb21tZW50cyIrcGUrIi4iK2ssS2EuQ01OVCksa3Q9ITB9KGF0WyIhY29udHJvbHMiXXx8W10pLmxlbmd0aD4wJiYoa3Q9ITApLGF0WyIhbGVnYWN5Il0mJmt0JiZqbihvZSwieGwvZHJhd2luZ3Mvdm1sRHJhd2luZyIrcGUr''@;'; put 'put ''Ii52bWwiLE9DKHBlLGF0WyIhY29tbWVudHMiXSxhdFsiIWNvbnRyb2xzIl0sYXQpKSxhdFsiIWxlZ2FjeUhGIl0mJkJrKG9lLDAscGUsYXRbIiFwcmludCJdLmltYWdlcyk7dmFyIEt0PSgiY2hhcnQiPT1hdFsiIXR5cGUiXT9bYXRdOmF0WyIhY2hhcnRzIl18fFtdKS5jb25jYXQoKGF0WyIh''@;'; put 'put ''aW1hZ2VzIl18fFtdKS5tYXAoZnVuY3Rpb24oVG4pe3JldHVybiBUblsiIXR5cGUiXXx8KFRuWyIhdHlwZSJdPSJpbWFnZSIpLFRufSkpLmNvbmNhdCgoYXRbIiFzaGFwZXMiXXx8W10pLm1hcChmdW5jdGlvbihUbil7cmV0dXJuIFRuWyIhdHlwZSJdfHwoVG5bIiF0eXBlIl09InNoYXBlIiks''@;'; put 'put ''VG59KSk7S3QmJkt0Lmxlbmd0aCYmKHR5cGVvZiB3cml0ZV9kcmF3aW5nXzwidSI/d3JpdGVfZHJhd2luZ18ob2UsUSxwZSxhdCxLdCk6KGpuKG9lLCJ4bC9kcmF3aW5ncy9kcmF3aW5nIitwZSsiLnhtbCIsbUIoKSksUS5kcmF3aW5ncy5wdXNoKCJ4bC9kcmF3aW5ncy9kcmF3aW5nIitwZSsi''@;'; put 'put ''LnhtbCIpKSksZGVsZXRlIGF0WyIhY29tbWVudHMiXSxkZWxldGUgYXRbIiFsZWdhY3kiXSxkZWxldGUgYXRbIiFsZWdhY3lIRiJdfWF0JiZhdFsiIXBpdm90cyJdJiYieG1sIj09ayYmdHlwZW9mIHdyaXRlX3Bpdm90X3htbDwidSImJmF0WyIhcGl2b3RzIl0uZm9yRWFjaChjdCksRXRbIiFp''@;'; put 'put ''ZCJdLnJJZDEmJmpuKG9lLFZyKGdlKSxraShFdCkpLGF0JiZhdFsiIXRhYmxlcyJdJiYieG1sIj09ayYmYXRbIiF0YWJsZXMiXS5mb3JFYWNoKGV0KX1yZXR1cm4gbnVsbCE9Ui5TdHJpbmdzJiZSLlN0cmluZ3MubGVuZ3RoPjAmJihqbihvZSxnZT0ieGwvc2hhcmVkU3RyaW5ncy4iK2ssZkko''@;'; put 'put ''Ui5TdHJpbmdzLGdlLFIpKSxRLnN0cnMucHVzaChnZSksRXIoUi53YnJlbHMsLTEsInNoYXJlZFN0cmluZ3MuIitrLEthLlNTVCkpLCJ4bWwiPT1rJiZ0eXBlb2Ygd3JpdGVfcGl2b3RfeG1sPCJ1IiYmd3JpdGVfcGl2b3RfeG1sKE5lLFMsb2UsUSxSKSwieG1sIj09ayYmZnVuY3Rpb24gRjQo''@;'; put 'put ''UyxSLGssRyl7Uy5mb3JFYWNoKGZ1bmN0aW9uKFEsb2Upe3ZhciBnZT1SLlNoZWV0c1tSLlNoZWV0TmFtZXNbUVswXV1dLHBlPSJ4bC90YWJsZXMvdGFibGUiKyhRWzBdKzEpKyJfIitRWzFdKyIueG1sIjtHLnRhYmxlcy5wdXNoKHBlKTt2YXIgeWU9UVsyXS5yZWZ8fGdlWyIhcmVmIl07InN0''@;'; put 'put ''cmluZyIhPXR5cGVvZiB5ZSYmKHllPXJhKHllKSk7dmFyIFBlPW9vKHllKSxOZT1RWzJdLm5hbWV8fCJzanN0YmxfIitRWzBdKyJfIitRWzFdLFllPVtJaV0sZXQ9IVd0KFFbMl0uaGVhZGVyKSxjdD1ldCYmIVd0KFFbMl0uZmlsdGVyKTtZZS5wdXNoKCc8dGFibGUgeG1sbnM9Imh0dHA6Ly9z''@;'; put 'put ''Y2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9zcHJlYWRzaGVldG1sLzIwMDYvbWFpbiIgaWQ9IicrKG9lKzEpKyciIG5hbWU9IicrTHIoTmUpKyciIGRpc3BsYXlOYW1lPSInK0xyKE5lKSsnIiByZWY9IicreWUrJyIgJysobnVsbCE9UVsyXS5oZWFkZXImJjEhPVFbMl0uaGVhZGVyPydoZWFk''@;'; put 'put ''ZXJSb3dDb3VudD0iJysoUVsyXS5oZWFkZXJ8fDApKyciICc6IiIpKyI+IiksY3QmJlllLnB1c2goJzxhdXRvRmlsdGVyIHJlZj0iJyt5ZSsnIi8+JyksWWUucHVzaCgnPHRhYmxlQ29sdW1ucyBjb3VudD0iJysoUGUuZS5jLVBlLnMuYysxKSsnIj4nKTtmb3IodmFyIEV0PVtdLGF0PVBlLnMu''@;'; put 'put ''YzthdDw9UGUuZS5jOysrYXQpaWYoZXQpe2Zvcih2YXIgYnQ9cWkoe3I6UGUucy5yLGM6YXR9KSxqdD1nZVtidF0sa3Q9UVsyXS5jb2xzJiZRWzJdLmNvbHNbYXQtUGUucy5jXSYmUVsyXS5jb2xzW2F0LVBlLnMuY10ubmFtZXx8anQmJihqdC53fHxqdC52KXx8IkNvbHVtbiAiKyhhdC1QZS5z''@;'; put 'put ''LmMrMSksT3Q9a3QsS3Q9MTtFdC5pbmRleE9mKE90KT4tMSYmKytLdDwxNjM4NDspT3Q9a3QrS3Q7aWYoT3QhPWt0KXRocm93InRhYmxlIGNvbHVtbnMgIithdCsiIGFuZCAiKyhFdC5pbmRleE9mKGt0KStQZS5zLmMpKyIgaGF2ZSB0aGUgc2FtZSBoZWFkZXIgJyIra3QrIic7IHRyeSBzZXR0''@;'; put 'put ''aW5nIGNlbGwgIitidCsiIHRvICciK090KyInIjtFdC5wdXNoKE90KSxZZS5wdXNoKCc8dGFibGVDb2x1bW4gaWQ9IicrKFFbMl0uY29scyYmUVsyXS5jb2xzW2F0LVBlLnMuY10mJm51bGwhPVFbMl0uY29sc1thdC1QZS5zLmNdLmlkP1FbMl0uY29sc1thdC1QZS5zLmNdLmlkOmF0LVBlLnMu''@;'; put 'put ''YysxKSsnIiBuYW1lPSInK0xyKE90KSsnIi8+Jyl9ZWxzZSBZZS5wdXNoKFFbMl0uY29scyYmUVsyXS5jb2xzW2F0LVBlLnMuY10/Jzx0YWJsZUNvbHVtbiBpZD0iJytRWzJdLmNvbHNbYXQtUGUucy5jXS5pZCsnIiBuYW1lPSInK1FbMl0uY29sc1thdC1QZS5zLmNdLm5hbWUrJyIvPic6Jzx0''@;'; put 'put ''YWJsZUNvbHVtbiBpZD0iJysoYXQtUGUucy5jKzEpKyciIHVuaXF1ZU5hbWU9IicrKGF0LVBlLnMuYysxKSsnIiBuYW1lPSInKyhhdC1QZS5zLmMrMSkrJyIvPicpO1llLnB1c2goIjwvdGFibGVDb2x1bW5zPiIpO3ZhciBycj0rKCExIT09KFFbMl0uc3R5bGV8fHt9KS5yb3dzdHJpcGUpLFNu''@;'; put 'put ''PSshIShRWzJdLnN0eWxlfHx7fSkuY29sc3RyaXBlLGxyPSshIShRWzJdLnN0eWxlfHx7fSkuY29sZmlyc3QsWG49KyEhKFFbMl0uc3R5bGV8fHt9KS5jb2xsYXN0LEJuPShRWzJdLnN0eWxlfHx7fSkubmFtZXx8Ik1lZGl1bTkiO0JuPUJuLm1hdGNoKC9eKExpZ2h0fE1lZGl1bXxEYXJrKVxk''@;'; put 'put ''KyQvKT8iVGFibGVTdHlsZSIrQm46Qm4sWWUucHVzaCgnPHRhYmxlU3R5bGVJbmZvIG5hbWU9IicrQm4rJyIgc2hvd0ZpcnN0Q29sdW1uPSInK2xyKyciIHNob3dMYXN0Q29sdW1uPSInK1huKyciIHNob3dSb3dTdHJpcGVzPSInK3JyKyciIHNob3dDb2x1bW5TdHJpcGVzPSInK1NuKyciLz4n''@;'; put 'put ''KSxZZS5wdXNoKCI8L3RhYmxlPiIpLGpuKGsscGUsWWUuam9pbigiIikpfSl9KFllLFMsb2UsUSksInhtbCI9PWsmJihTLkV4dGVybmFsV0J8fFtdKS5sZW5ndGgmJmZ1bmN0aW9uIFJDKFMsUixrKXtrLmxpbmtzfHwoay5saW5rcz1bXSksUy5FeHRlcm5hbFdCJiZTLkV4dGVybmFsV0IuZm9y''@;'; put 'put ''RWFjaChmdW5jdGlvbihHLFEpe3ZhciBvZT0iL3hsL2V4dGVybmFsTGlua3MvX3JlbHMvZXh0ZXJuYWxMaW5rIisoUSsxKSsiLnhtbC5yZWxzIixnZT17fTtFcihnZSwtMSxHLlRhcmdldCxHLk1pc3Npbmc/S2EuWE1JU1M6S2EuWFBBVEgpLGpuKFIsQWMob2UpLGtpKGdlKSk7dmFyIHBlPSIv''@;'; put 'put ''eGwvZXh0ZXJuYWxMaW5rcy9leHRlcm5hbExpbmsiKyhRKzEpKyIueG1sIjtrLmxpbmtzLnB1c2gocGUpLGpuKFIsQWMocGUpLGZ1bmN0aW9uIGZCKFMpe3ZhciBSPVtJaSxoQl07cmV0dXJuKFMuU2hlZXROYW1lc3x8W10pLmxlbmd0aCYmKFIucHVzaCgnPGV4dGVybmFsQm9vayB4bWxuczpy''@;'; put 'put ''PSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzIiByOmlkPSJySWQxIj4nKSxSLnB1c2goIjxzaGVldE5hbWVzPiIpLFMuU2hlZXROYW1lcy5mb3JFYWNoKGZ1bmN0aW9uKGspe1IucHVzaCgnPHNoZWV0TmFtZSB2YWw9''@;'; put 'put ''IicrTHIoaykrJyIvPicpfSksUi5wdXNoKCI8L3NoZWV0TmFtZXM+IiksUi5wdXNoKCI8c2hlZXREYXRhU2V0PiIpLFMuU2hlZXROYW1lcy5mb3JFYWNoKGZ1bmN0aW9uKGssRyl7dmFyIFE9Uy5TaGVldHNba10sb2U9e3NoZWV0SWQ6R30sZ2U9bnVsbDtpZihudWxsPT1RKW9lLnJlZnJlc2hF''@;'; put 'put ''cnJvcj0xO2Vsc2UgaWYoUVsiIXJlZiJdKXt2YXIgcGU9TXMoUVsiIXJlZiJdKTtnZT0iIjtmb3IodmFyIHllPXBlLnMucjt5ZTw9cGUuZS5yOysreWUpe2Zvcih2YXIgUGU9IiIsTmU9cGUucy5jO05lPD1wZS5lLmM7KytOZSl7dmFyIFllPXFpKHtyOnllLGM6TmV9KTtRW1llXSYmKFBlfHwo''@;'; put 'put ''UGU9Jzxyb3cgcj0iJysoeWUrMSkrJyI+JyksUGUrPSc8Y2VsbCByPSInK1llKyciJysoUVtZZV0udD8nIHQ9IicrUVtZZV0udCsnIic6IiIpKyI+PHY+IitMcihRW1llXS52KSsiPC92PjwvY2VsbD4iKX1QZSYmKGdlKz1QZSsiPC9yb3c+Iil9fVIucHVzaChQcigic2hlZXREYXRhIixnZSxv''@;'; put 'put ''ZSkpfSksUi5wdXNoKCI8L3NoZWV0RGF0YVNldD4iKSxSLnB1c2goIjwvZXh0ZXJuYWxCb29rPiIpKSxSLmxlbmd0aD4yJiYoUltSLmxlbmd0aF09IjwvZXh0ZXJuYWxMaW5rPiIsUlsxXT1SWzFdLnJlcGxhY2UoIi8+IiwiPiIpKSxSLmpvaW4oIiIpfShHKSl9KX0oUyxvZSxRKSwieG1sIj09''@;'; put 'put ''ayYmZnVuY3Rpb24gREMoUyl7dmFyIFIsaztTLldvcmtib29rfHwoUy5Xb3JrYm9vaz17TmFtZXM6W119KSxTLldvcmtib29rLk5hbWVzfHwoUy5Xb3JrYm9vay5OYW1lcz1bXSk7Zm9yKHZhciBHPVMuV29ya2Jvb2suTmFtZXMsUT0wO1E8Uy5TaGVldE5hbWVzLmxlbmd0aDsrK1Epe3ZhciBv''@;'; put 'put ''ZT1TLlNoZWV0TmFtZXNbUV0sZ2U9Uy5TaGVldHNbb2VdO2lmKGdlJiZnZVsiIXByaW50Il0pe3ZhciBwZT0iJyIrb2UrIichIix5ZT1nZVsiIXByaW50Il07aWYoeWUpe3ZhciBQZT0hKFI9eWUuYXJlYSksTmU9IShrPXllLnRpdGxlcyksWWU9Uj8ic3RyaW5nIj09dHlwZW9mIFI/UjpyYShS''@;'; put 'put ''KToiIjtpZihSJiYoRy5mb3JFYWNoKGZ1bmN0aW9uKGN0KXtjdC5TaGVldD09USYmIVBlJiYiX3hsbm0uUHJpbnRfQXJlYSI9PWN0Lk5hbWUmJihQZT0hMCxjdC5SZWY9cGUrWWUpfSksUGV8fEcucHVzaCh7TmFtZToiX3hsbm0uUHJpbnRfQXJlYSIsUmVmOnBlK1llLFNoZWV0OlF9KSksayl7''@;'; put 'put ''dmFyIGV0PSIiO2sucy5jPi0xJiZrLmUuYz4tMSYmKGV0Kz1wZStUYShrLnMuYykrIjoiK1RhKGsuZS5jKSsiLCIpLGsucy5yPi0xJiZrLmUucj4tMSYmKGV0Kz1wZStqaShrLnMucikrIjoiK2ppKGsuZS5yKSsiLCIpLGV0PWV0LnNsaWNlKDAsLTEpLEcuZm9yRWFjaChmdW5jdGlvbihjdCl7''@;'; put 'put ''Y3QuU2hlZXQ9PVEmJiFOZSYmIl94bG5tLlByaW50X1RpdGxlcyI9PWN0Lk5hbWUmJihQZT0hMCxjdC5SZWY9ZXQpfSksTmV8fEcucHVzaCh7TmFtZToiX3hsbm0uUHJpbnRfVGl0bGVzIixSZWY6ZXQsU2hlZXQ6UX0pfX19fX0oUyksam4ob2UsZ2U9InhsL3dvcmtib29rLiIrayxmdW5jdGlv''@;'; put 'put ''biBUeihTLFIsayl7cmV0dXJuKCIuYmluIj09PVIuc2xpY2UoLTQpP1NiOlQ4KShTLGspfShTLGdlLFIpKSxRLndvcmtib29rcy5wdXNoKGdlKSxFcihSLnJlbHMsMSxnZSxLYS5XQiksam4ob2UsZ2U9InhsL3RoZW1lL3RoZW1lMS54bWwiLGlCKFMuVGhlbWVzLFIpKSxRLnRoZW1lcy5wdXNo''@;'; put 'put ''KGdlKSxFcihSLndicmVscywtMSwidGhlbWUvdGhlbWUxLnhtbCIsS2EuVEhFTUUpLGpuKG9lLGdlPSJ4bC9zdHlsZXMuIitrLGZ1bmN0aW9uIFZTKFMsUixrKXtyZXR1cm4oIi5iaW4iPT09Ui5zbGljZSgtNCk/RGs6WnYpKFMsayl9KFMsZ2UsUikpLFEuc3R5bGVzLnB1c2goZ2UpLEVyKFIu''@;'; put 'put ''d2JyZWxzLC0xLCJzdHlsZXMuIitrLEthLlNUWSksUy52YmFyYXcmJkcmJihqbihvZSxnZT0ieGwvdmJhUHJvamVjdC5iaW4iLFMudmJhcmF3KSxRLnZiYS5wdXNoKGdlKSxFcihSLndicmVscywtMSwidmJhUHJvamVjdC5iaW4iLEthLlZCQSkpLFMubW9kZWwmJlMubW9kZWwubGVuZ3RoJiYo''@;'; put 'put ''am4ob2UsInhsL21vZGVsL2l0ZW0uZGF0YSIsUy5tb2RlbCksRXIoUi53YnJlbHMsLTEsIm1vZGVsL2l0ZW0uZGF0YSIsS2EuUFdSUEQpKSxTLmNvbm4mJihqbihvZSwieGwvY29ubmVjdGlvbnMueG1sIixTLmNvbm4pLFEuY29ubnMucHVzaCgiL3hsL2Nvbm5lY3Rpb25zLnhtbCIpLEVyKFIu''@;'; put 'put ''d2JyZWxzLC0xLCJjb25uZWN0aW9ucy54bWwiLEthLkNPTk4pKSxTLkN1c3RvbVhNTCYmUy5DdXN0b21YTUwuZm9yRWFjaChmdW5jdGlvbihUbixycil7aWYoam4ob2UsImN1c3RvbVhtbC9pdGVtIisocnIrMSkrIi54bWwiLFRuLmRhdGEpLEVyKFIud2JyZWxzLC0xLCIuLi9jdXN0b21YbWwv''@;'; put 'put ''aXRlbSIrKHJyKzEpKyIueG1sIixLYS5DWE1MKSxUbi5wcm9wcyl7am4ob2UsImN1c3RvbVhtbC9pdGVtUHJvcHMiKyhycisxKSsiLnhtbCIsVG4ucHJvcHMpLFEuY3VzdG9teG1scHJvcHMucHVzaCgiL2N1c3RvbVhtbC9pdGVtUHJvcHMiKyhycisxKSsiLnhtbCIpO3ZhciBTbj17fTtFcihT''@;'; put 'put ''biwtMSwiaXRlbVByb3BzIisocnIrMSkrIi54bWwiLEthLkNYTUxQKSxqbihvZSwiY3VzdG9tWG1sL19yZWxzL2l0ZW0iKyhycisxKSsiLnhtbC5yZWxzIixraShTbikpfX0pLGpuKG9lLCJbQ29udGVudF9UeXBlc10ueG1sIixmdW5jdGlvbiBCdyhTLFIsayl7dmFyIFEsRz1bXTtrfHwoR1tH''@;'; put 'put ''Lmxlbmd0aF09SWksR1tHLmxlbmd0aF09bXYsRz1HLmNvbmNhdChWdykpO3ZhciBvZT1mdW5jdGlvbih5ZSl7U1t5ZV0mJlNbeWVdLmxlbmd0aD4wJiYoR1tHLmxlbmd0aF09UHIoIk92ZXJyaWRlIixudWxsLHtQYXJ0TmFtZTooIi8iPT0oUT1TW3llXVswXSlbMF0/IiI6Ii8iKStRLENvbnRl''@;'; put 'put ''bnRUeXBlOmZ2W3llXVtSLmJvb2tUeXBlfHwieGxzeCJdfSkpfSxnZT1mdW5jdGlvbih5ZSl7KFNbeWVdfHxbXSkuZm9yRWFjaChmdW5jdGlvbihQZSl7R1tHLmxlbmd0aF09UHIoIk92ZXJyaWRlIixudWxsLHtQYXJ0TmFtZTooIi8iPT1QZVswXT8iIjoiLyIpK1BlLENvbnRlbnRUeXBlOmZ2''@;'; put 'put ''W3llXVtSLmJvb2tUeXBlfHwieGxzeCJdfSl9KX0scGU9ZnVuY3Rpb24oeWUpeyhTW3llXXx8W10pLmZvckVhY2goZnVuY3Rpb24oUGUpe0dbRy5sZW5ndGhdPVByKCJPdmVycmlkZSIsbnVsbCx7UGFydE5hbWU6KCIvIj09UGVbMF0/IiI6Ii8iKStQZSxDb250ZW50VHlwZTpwdlt5ZV1bMF19''@;'; put 'put ''KX0pfTtyZXR1cm4gb2UoIndvcmtib29rcyIpLGdlKCJzaGVldHMiKSxnZSgiY2hhcnRzIikscGUoInRoZW1lcyIpLFsic3RycyIsInN0eWxlcyIsImNvbm5zIl0uZm9yRWFjaChvZSksWyJjb3JlcHJvcHMiLCJleHRwcm9wcyIsImN1c3Rwcm9wcyJdLmZvckVhY2gocGUpLHBlKCJ2YmEiKSxw''@;'; put 'put ''ZSgiY29tbWVudHMiKSxwZSgiZHJhd2luZ3MiKSxnZSgidGFibGVzIiksZ2UoInBpdm90cyIpLGdlKCJwaXZvdGNhY2hlcyIpLGdlKCJwaXZvdHJlY29yZHMiKSxwZSgiZGF0YW1vZGVscyIpLHBlKCJjdHJscHJvcHMiKSxwZSgiY2hhcnRvYmpzIikscGUoImNoYXJ0c3R5bGVzIikscGUoImNo''@;'; put 'put ''YXJ0Y29sb3JzIikscGUoImNoYXJ0ZXhzIiksZ2UoImxpbmtzIikscGUoImN1c3RvbXhtbHByb3BzIiksIWsmJkcubGVuZ3RoPjImJihHW0cubGVuZ3RoXT0iPC9UeXBlcz4iLEdbMV09R1sxXS5yZXBsYWNlKCIvPiIsIj4iKSksRy5qb2luKCIiKX0oUSxSKSksam4ob2UsIl9yZWxzLy5yZWxz''@;'; put 'put ''IixraShSLnJlbHMpKSxqbihvZSwieGwvX3JlbHMvd29ya2Jvb2suIitrKyIucmVscyIsa2koUi53YnJlbHMpKSxkZWxldGUgUi5Gb250cyxkZWxldGUgUi5GaWxscyxkZWxldGUgUi5Cb3JkZXJzLGRlbGV0ZSBSLnJldnNzZixkZWxldGUgUi5zc2Ysb2V9ZnVuY3Rpb24gUVMoUyxSKXt2YXIg''@;'; put 'put ''az0iIjtzd2l0Y2goKFJ8fHt9KS50eXBlfHwiYmFzZTY0Iil7Y2FzZSJidWZmZXIiOmNhc2UiYXJyYXkiOnJldHVybltTWzBdLFNbMV0sU1syXSxTWzNdLFNbNF0sU1s1XSxTWzZdLFNbN11dO2Nhc2UiYmFzZTY0IjprPV9lLmRlY29kZShTLnNsaWNlKDAsMTIpKTticmVhaztjYXNlImJpbmFy''@;'; put 'put ''eSI6az1TO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgdHlwZSAiKyhSJiZSLnR5cGV8fCJ1bmRlZmluZWQiKSl9cmV0dXJuW2suY2hhckNvZGVBdCgwKSxrLmNoYXJDb2RlQXQoMSksay5jaGFyQ29kZUF0KDIpLGsuY2hhckNvZGVBdCgzKSxrLmNoYXJDb2Rl''@;'; put 'put ''QXQoNCksay5jaGFyQ29kZUF0KDUpLGsuY2hhckNvZGVBdCg2KSxrLmNoYXJDb2RlQXQoNyldfWZ1bmN0aW9uIGVNKFMsUil7dmFyIGs9MDtlOmZvcig7azxTLmxlbmd0aDspc3dpdGNoKFMuY2hhckNvZGVBdChrKSl7Y2FzZSAxMDpjYXNlIDEzOmNhc2UgMzI6KytrO2JyZWFrO2Nhc2UgNjA6''@;'; put 'put ''cmV0dXJuIEk4KFMuc2xpY2UoayksUik7ZGVmYXVsdDpicmVhayBlfXJldHVybiBqMy50b193b3JrYm9vayhTLFIpfWZ1bmN0aW9uIEhiKFMsUixrLEcpe3JldHVybiBHPyhrLnR5cGU9InN0cmluZyIsajMudG9fd29ya2Jvb2soUyxrKSk6ajMudG9fd29ya2Jvb2soUixrKX1mdW5jdGlvbiAk''@;'; put 'put ''NShTLFIpe3ZhciBrPUEuZ2V0bG9jYWxlKCk7YWUoQSksQS5zZXRsb2NhbGUoayksVygpO3ZhciBHPVJ8fHt9O2lmKHR5cGVvZiBBcnJheUJ1ZmZlcjwidSImJlMgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcilyZXR1cm4gJDUobmV3IFVpbnQ4QXJyYXkoUyksKChHPXF0KEcpKS50eXBlPSJhcnJh''@;'; put 'put ''eSIsRykpO3ZhciBvZSxRPVMsZ2U9ITE7aWYoSWYoRGY9Ry5QUEl8fFdzKSxHLmNlbGxTdHlsZXMmJihHLmNlbGxORj0hMCxHLnNoZWV0U3R1YnM9ITApLGM4PXt9LEcuZGF0ZU5GJiYoYzguZGF0ZU5GPUcuZGF0ZU5GKSxHLnR5cGV8fChHLnR5cGU9VGUmJkJ1ZmZlci5pc0J1ZmZlcihTKT8i''@;'; put 'put ''YnVmZmVyIjoiYmFzZTY0IiksImZpbGUiPT1HLnR5cGUmJihHLnR5cGU9VGU/ImJ1ZmZlciI6ImJpbmFyeSIsUT1mdW5jdGlvbiBGZShTKXtpZih0eXBlb2YgWGU8InUiKXJldHVybiBYZS5yZWFkRmlsZVN5bmMoUyk7aWYodHlwZW9mICQ8InUiJiZ0eXBlb2YgRmlsZTwidSImJnR5cGVvZiBG''@;'; put 'put ''b2xkZXI8InUiKXRyeXt2YXIgUj1GaWxlKFMpO1Iub3BlbigiciIpLFIuZW5jb2Rpbmc9ImJpbmFyeSI7dmFyIGs9Ui5yZWFkKCk7cmV0dXJuIFIuY2xvc2UoKSxrfWNhdGNoKEcpe2lmKCFHLm1lc3NhZ2V8fCFHLm1lc3NhZ2UubWF0Y2goL29uc3RydWN0LykpdGhyb3cgR310aHJvdyBuZXcg''@;'; put 'put ''RXJyb3IoIkNhbm5vdCBhY2Nlc3MgZmlsZSAiK1MpfShTKSksInN0cmluZyI9PUcudHlwZSYmKGdlPSEwLEcudHlwZT0iYmluYXJ5IixHLmNvZGVwYWdlPTY1MDAxLFE9ZnVuY3Rpb24gamMoUyl7cmV0dXJuIFMubWF0Y2goL1teXHgwMC1ceDdGXS8pP05zKFMpOlN9KFMpKSwiYXJyYXkiPT1H''@;'; put 'put ''LnR5cGUmJnR5cGVvZiBVaW50OEFycmF5PCJ1IiYmUyBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkmJnR5cGVvZiBBcnJheUJ1ZmZlcjwidSIpe3ZhciBwZT1uZXcgQXJyYXlCdWZmZXIoMykseWU9bmV3IFVpbnQ4QXJyYXkocGUpO2lmKHllLmZvbz0iYmFyIiwheWUuZm9vKXJldHVybihHPXF0KEcp''@;'; put 'put ''KS50eXBlPSJhcnJheSIsJDUoSChRKSxHKX1zd2l0Y2goKG9lPVFTKFEsRykpWzBdKXtjYXNlIDIwODppZigyMDc9PT1vZVsxXSYmMTc9PT1vZVsyXSYmMjI0PT09b2VbM10mJjE2MT09PW9lWzRdJiYxNzc9PT1vZVs1XSYmMjY9PT1vZVs2XSYmMjI1PT09b2VbN10pcmV0dXJuIGZ1bmN0aW9u''@;'; put 'put ''IGd0KFMsUil7cmV0dXJuIHZlLmZpbmQoUywiRW5jcnlwdGVkUGFja2FnZSIpP0ZiKFMsUik6JFMoUyxSKX0odmUucmVhZChRLEcpLEcpO2JyZWFrO2Nhc2UgOTppZihvZVsxXTw9OClyZXR1cm4gJFMoUSxHKTticmVhaztjYXNlIDYwOnJldHVybiBJOChRLEcpO2Nhc2UgNzM6aWYoNzM9PT1v''@;'; put 'put ''ZVsxXSYmNDI9PT1vZVsyXSYmMD09PW9lWzNdKXRocm93IG5ldyBFcnJvcigiVElGRiBJbWFnZSBGaWxlIGlzIG5vdCBhIHNwcmVhZHNoZWV0Iik7aWYoNjg9PT1vZVsxXSlyZXR1cm4gZnVuY3Rpb24gYWsoUyxSKXt2YXIgaz1SfHx7fSxHPSEhay5XVEY7ay5XVEY9ITA7dHJ5e3ZhciBRPWND''@;'; put 'put ''LnRvX3dvcmtib29rKFMsayk7cmV0dXJuIGsuV1RGPUcsUX1jYXRjaChvZSl7aWYoay5XVEY9Rywhb2UubWVzc2FnZS5tYXRjaCgvU1lMSyBiYWQgcmVjb3JkIElELykmJkcpdGhyb3cgb2U7cmV0dXJuIGozLnRvX3dvcmtib29rKFMsUil9fShRLEcpO2JyZWFrO2Nhc2UgODQ6aWYoNjU9PT1v''@;'; put 'put ''ZVsxXSYmNjY9PT1vZVsyXSYmNzY9PT1vZVszXSlyZXR1cm4gRHYudG9fd29ya2Jvb2soUSxHKTticmVhaztjYXNlIDgwOnJldHVybiA3NT09PW9lWzFdJiZvZVsyXTw5JiZvZVszXTw5P2Z1bmN0aW9uIFZJKFMsUil7dmFyIEc9UyxRPVJ8fHt9O3JldHVybiBRLnR5cGV8fChRLnR5cGU9VGUm''@;'; put 'put ''JkJ1ZmZlci5pc0J1ZmZlcihTKT8iYnVmZmVyIjoiYmFzZTY0IikscnAoY24oRyxRKSxRKX0oUSxHKTpIYihTLFEsRyxnZSk7Y2FzZSAyMzk6cmV0dXJuIDYwPT09b2VbM10/STgoUSxHKTpIYihTLFEsRyxnZSk7Y2FzZSAyNTU6aWYoMjU0PT09b2VbMV0pcmV0dXJuIGZ1bmN0aW9uIHRVKFMs''@;'; put 'put ''Uil7dmFyIGs9UztyZXR1cm4iYmFzZTY0Ij09Ui50eXBlJiYoaz1fZS5kZWNvZGUoaykpLGs9Y3B0YWJsZS51dGlscy5kZWNvZGUoMTIwMCxrLnNsaWNlKDIpLCJzdHIiKSxSLnR5cGU9ImJpbmFyeSIsZU0oayxSKX0oUSxHKTticmVhaztjYXNlIDA6aWYoMD09PW9lWzFdJiZvZVsyXT49MiYm''@;'; put 'put ''MD09PW9lWzNdKXJldHVybiBJdi50b193b3JrYm9vayhRLEcpO2JyZWFrO2Nhc2UgMzpjYXNlIDEzMTpjYXNlIDEzOTpjYXNlIDE0MDpyZXR1cm4gQjMudG9fd29ya2Jvb2soUSxHKTtjYXNlIDEyMzppZig5Mj09PW9lWzFdJiYxMTQ9PT1vZVsyXSYmMTE2PT09b2VbM10pcmV0dXJuIFZ2LnRv''@;'; put 'put ''X3dvcmtib29rKFEsRyk7YnJlYWs7Y2FzZSAxMDpjYXNlIDEzOmNhc2UgMzI6cmV0dXJuIGZ1bmN0aW9uIGVVKFMsUil7dmFyIGs9IiIsRz1RUyhTLFIpO3N3aXRjaChSLnR5cGUpe2Nhc2UiYmFzZTY0IjprPV9lLmRlY29kZShTKTticmVhaztjYXNlImJpbmFyeSI6az1TO2JyZWFrO2Nhc2Ui''@;'; put 'put ''YnVmZmVyIjprPVMudG9TdHJpbmcoImJpbmFyeSIpO2JyZWFrO2Nhc2UiYXJyYXkiOms9dXQoUyk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCB0eXBlICIrUi50eXBlKX1yZXR1cm4gMjM5PT1HWzBdJiYxODc9PUdbMV0mJjE5MT09R1syXSYmKGs9Z28oaykp''@;'; put 'put ''LGVNKGssUil9KFEsRyl9cmV0dXJuIEIzLnZlcnNpb25zLmluZGV4T2Yob2VbMF0pPi0xJiZvZVsyXTw9MTImJm9lWzNdPD0zMT9CMy50b193b3JrYm9vayhRLEcpOkhiKFMsUSxHLGdlKX1mdW5jdGlvbiBrYyhTLFIpe3ZhciBrPVJ8fHt9O3JldHVybiBrLnR5cGU9ImZpbGUiLCQ1KFMsayl9''@;'; put 'put ''ZnVuY3Rpb24gSzUoUyxSKXtzd2l0Y2goUi50eXBlKXtjYXNlImJhc2U2NCI6Y2FzZSJiaW5hcnkiOmJyZWFrO2Nhc2UiYnVmZmVyIjpjYXNlImFycmF5IjpSLnR5cGU9IiI7YnJlYWs7Y2FzZSJmaWxlIjpyZXR1cm4gRGUoUi5maWxlLHZlLndyaXRlKFMse3R5cGU6VGU/ImJ1ZmZlciI6IiJ9''@;'; put 'put ''KSk7Y2FzZSJzdHJpbmciOnRocm93IG5ldyBFcnJvcigiJ3N0cmluZycgb3V0cHV0IHR5cGUgaW52YWxpZCBmb3IgJyIrUi5ib29rVHlwZSsiJyBmaWxlcyIpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgdHlwZSAiK1IudHlwZSl9cmV0dXJuIHZlLndyaXRlKFMsUil9''@;'; put 'put ''ZnVuY3Rpb24gbjEoUyxSLGspe2t8fChrPSIiKTt2YXIgRz1rK1M7c3dpdGNoKFIudHlwZSl7Y2FzZSJiYXNlNjQiOnJldHVybiBfZS5lbmNvZGUoTnMoRykpO2Nhc2UiYmluYXJ5IjpyZXR1cm4gTnMoRyk7Y2FzZSJzdHJpbmciOnJldHVybiBTO2Nhc2UiZmlsZSI6cmV0dXJuIERlKFIuZmls''@;'; put 'put ''ZSxHLCJ1dGY4Iik7Y2FzZSJidWZmZXIiOnJldHVybiBUZT9TZShHLCJ1dGY4Iik6bjEoRyx7dHlwZToiYmluYXJ5In0pLnNwbGl0KCIiKS5tYXAoZnVuY3Rpb24oUSl7cmV0dXJuIFEuY2hhckNvZGVBdCgwKX0pfXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHR5cGUgIitSLnR5cGUp''@;'; put 'put ''fWZ1bmN0aW9uIHRNKFMsUil7c3dpdGNoKFIudHlwZSl7Y2FzZSJzdHJpbmciOmNhc2UiYmFzZTY0IjpjYXNlImJpbmFyeSI6Zm9yKHZhciBrPSIiLEc9MDtHPFMubGVuZ3RoOysrRylrKz1TdHJpbmcuZnJvbUNoYXJDb2RlKFNbR10pO3JldHVybiJiYXNlNjQiPT1SLnR5cGU/X2UuZW5jb2Rl''@;'; put 'put ''KGspOiJzdHJpbmciPT1SLnR5cGU/Z28oayk6aztjYXNlImZpbGUiOnJldHVybiBEZShSLmZpbGUsUyk7Y2FzZSJidWZmZXIiOnJldHVybiBTO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgdHlwZSAiK1IudHlwZSl9fWZ1bmN0aW9uIE44KFMsUil7VygpLGZ1bmN0aW9u''@;'; put 'put ''IG9JKFMpe2lmKCFTfHwhUy5TaGVldE5hbWVzfHwhUy5TaGVldHMpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIFdvcmtib29rIik7aWYoIVMuU2hlZXROYW1lcy5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJXb3JrYm9vayBpcyBlbXB0eSIpOyFmdW5jdGlvbiBhSShTLFIsayl7Uy5mb3JFYWNo''@;'; put 'put ''KGZ1bmN0aW9uKEcsUSl7X2IoRyk7Zm9yKHZhciBvZT0wO29lPFE7KytvZSlpZihHPT1TW29lXSl0aHJvdyBuZXcgRXJyb3IoIkR1cGxpY2F0ZSBTaGVldCBOYW1lOiAiK0cpO2lmKGspe3ZhciBnZT1SJiZSW1FdJiZSW1FdLkNvZGVOYW1lfHxHO2lmKDk1PT1nZS5jaGFyQ29kZUF0KDApJiZn''@;'; put 'put ''ZS5sZW5ndGg+MjIpdGhyb3cgbmV3IEVycm9yKCJCYWQgQ29kZSBOYW1lOiBXb3Jrc2hlZXQiK2dlKX19KX0oUy5TaGVldE5hbWVzLFMuV29ya2Jvb2smJlMuV29ya2Jvb2suU2hlZXRzfHxbXSwhIVMudmJhcmF3KTtmb3IodmFyIGs9MDtrPFMuU2hlZXROYW1lcy5sZW5ndGg7KytrKW1EKFMu''@;'; put 'put ''U2hlZXRzW1MuU2hlZXROYW1lc1trXV0sMCxrKX0oUyk7dmFyIGs9Unx8e307aWYoay5jZWxsU3R5bGVzJiYoay5jZWxsTkY9ITAsay5zaGVldFN0dWJzPSEwKSwiYXJyYXkiPT1rLnR5cGUpe2sudHlwZT0iYmluYXJ5Ijt2YXIgRz1OOChTLGspO3JldHVybiBrLnR5cGU9ImFycmF5Iix4KEcp''@;'; put 'put ''fXN3aXRjaChrLmJvb2tUeXBlfHwieGxzYiIpe2Nhc2UieG1sIjpjYXNlInhsbWwiOnJldHVybiBuMShTSShTLGspLGspO2Nhc2Uic2xrIjpjYXNlInN5bGsiOnJldHVybiBuMShHeihTLGspLGspO2Nhc2UiaHRtIjpjYXNlImh0bWwiOnJldHVybiBuMShXeihTLGspLGspO2Nhc2UidHh0Ijpy''@;'; put 'put ''ZXR1cm4gZnVuY3Rpb24gVmIoUyxSKXtzd2l0Y2goUi50eXBlKXtjYXNlImJhc2U2NCI6cmV0dXJuIF9lLmVuY29kZShTKTtjYXNlImJpbmFyeSI6Y2FzZSJzdHJpbmciOnJldHVybiBTO2Nhc2UiZmlsZSI6cmV0dXJuIERlKFIuZmlsZSxTLCJiaW5hcnkiKTtjYXNlImJ1ZmZlciI6cmV0dXJu''@;'; put 'put ''IFRlP1NlKFMsImJpbmFyeSIpOlMuc3BsaXQoIiIpLm1hcChmdW5jdGlvbihrKXtyZXR1cm4gay5jaGFyQ29kZUF0KDApfSl9dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgdHlwZSAiK1IudHlwZSl9KCR6KFMsayksayk7Y2FzZSJjc3YiOnJldHVybiBuMShZeihTLGspLGssIlx1ZmVm''@;'; put 'put ''ZiIpO2Nhc2UiZGlmIjpyZXR1cm4gbjEodmQoUyxrKSxrKTtjYXNlImRiZiI6cmV0dXJuIHRNKGVyZShTLGspLGspO2Nhc2UicHJuIjpyZXR1cm4gbjEoTEkoUyxrKSxrKTtjYXNlInJ0ZiI6cmV0dXJuIG4xKE9JKFMsayksayk7Y2FzZSJldGgiOnJldHVybiBuMShQSShTLGspLGspO2Nhc2Ui''@;'; put 'put ''Zm9kcyI6cmV0dXJuIG4xKFJJKFMsayksayk7Y2FzZSJiaWZmMiI6ay5iaWZmfHwoay5iaWZmPTIpO2Nhc2UiYmlmZjMiOmsuYmlmZnx8KGsuYmlmZj0zKTtjYXNlImJpZmY0IjpyZXR1cm4gay5iaWZmfHwoay5iaWZmPTQpLHRNKFRJKFMsayksayk7Y2FzZSJiaWZmNSI6ay5iaWZmfHwoay5i''@;'; put 'put ''aWZmPTUpO2Nhc2UiYmlmZjgiOmNhc2UieGxhIjpjYXNlInhscyI6cmV0dXJuIGsuYmlmZnx8KGsuYmlmZj04KSxmdW5jdGlvbiBOYihTLFIpe3ZhciBrPVJ8fHt9O3JldHVybiBLNShmdW5jdGlvbiB6bmUoUyxSKXt2YXIgaz1SfHx7fSxHPXZlLnV0aWxzLmNmYl9uZXcoe3Jvb3Q6IlIifSks''@;'; put 'put ''UT0iL1dvcmtib29rIjtzd2l0Y2goay5ib29rVHlwZXx8InhscyIpe2Nhc2UieGxzIjprLmJvb2tUeXBlPSJiaWZmOCI7Y2FzZSJ4bGEiOmsuYm9va1R5cGV8fChrLmJvb2tUeXBlPSJ4bGEiKTtjYXNlImJpZmY4IjpRPSIvV29ya2Jvb2siLGsuYmlmZj04O2JyZWFrO2Nhc2UiYmlmZjUiOlE9''@;'; put 'put ''Ii9Cb29rIixrLmJpZmY9NTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiaW52YWxpZCB0eXBlICIray5ib29rVHlwZSsiIGZvciBYTFMgQ0ZCIil9cmV0dXJuIHZlLnV0aWxzLmNmYl9hZGQoRyxRLFRJKFMsaykpLDg9PWsuYmlmZiYmKFMuUHJvcHN8fFMuQ3VzdHByb3BzKSYmZnVu''@;'; put 'put ''Y3Rpb24gam5lKFMsUil7dmFyIGdlLGs9W10sRz1bXSxRPVtdLG9lPTA7aWYoUy5Qcm9wcylmb3IoZ2U9T2UoUy5Qcm9wcyksb2U9MDtvZTxnZS5sZW5ndGg7KytvZSkoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGg1LGdlW29lXSk/azpPYmplY3QucHJvdG90eXBlLmhh''@;'; put 'put ''c093blByb3BlcnR5LmNhbGwodmYsZ2Vbb2VdKT9HOlEpLnB1c2goW2dlW29lXSxTLlByb3BzW2dlW29lXV1dKTtpZihTLkN1c3Rwcm9wcylmb3IoZ2U9T2UoUy5DdXN0cHJvcHMpLG9lPTA7b2U8Z2UubGVuZ3RoOysrb2UpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFMu''@;'; put 'put ''UHJvcHN8fHt9LGdlW29lXSl8fChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaDUsZ2Vbb2VdKT9rOk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh2ZixnZVtvZV0pP0c6USkucHVzaChbZ2Vbb2VdLFMuQ3VzdHByb3BzW2dlW29lXV1dKTt2YXIgcGU9''@;'; put 'put ''W107Zm9yKG9lPTA7b2U8US5sZW5ndGg7KytvZSlWNi5pbmRleE9mKFFbb2VdWzBdKT4tMXx8bnVsbCE9UVtvZV1bMV0mJnBlLnB1c2goUVtvZV0pO0cubGVuZ3RoJiZ2ZS51dGlscy5jZmJfYWRkKFIsIi9ceDA1U3VtbWFyeUluZm9ybWF0aW9uIix6aShHLFRiLlNJLHZmLGQ1KSksKGsubGVu''@;'; put 'put ''Z3RofHxwZS5sZW5ndGgpJiZ2ZS51dGlscy5jZmJfYWRkKFIsIi9ceDA1RG9jdW1lbnRTdW1tYXJ5SW5mb3JtYXRpb24iLHppKGssVGIuRFNJLGg1LG00LHBlLmxlbmd0aD9wZTpudWxsLFRiLlVESSkpfShTLEcpLDg9PWsuYmlmZiYmUy52YmFyYXcmJmZ1bmN0aW9uIFdrKFMsUil7Ui5GdWxs''@;'; put 'put ''UGF0aHMuZm9yRWFjaChmdW5jdGlvbihrLEcpe2lmKDAhPUcpe3ZhciBRPWsucmVwbGFjZSgvW15cL10qW1wvXS8sIi9fVkJBX1BST0pFQ1RfQ1VSLyIpOyIvIiE9PVEuc2xpY2UoLTEpJiZ2ZS51dGlscy5jZmJfYWRkKFMsUSxSLkZpbGVJbmRleFtHXS5jb250ZW50KX19KX0oRyx2ZS5yZWFk''@;'; put 'put ''KFMudmJhcmF3LHt0eXBlOiJzdHJpbmciPT10eXBlb2YgUy52YmFyYXc/ImJpbmFyeSI6ImJ1ZmZlciJ9KSksR30oUyxrKSxrKX0oUyxrKTtjYXNlInhsc3giOmNhc2UieGxzbSI6Y2FzZSJ4bGFtIjpjYXNlInhsc2IiOmNhc2Uib2RzIjpyZXR1cm4gZnVuY3Rpb24gcTUoUyxSKXt2YXIgaz1S''@;'; put 'put ''fHx7fSxHPUg4KFMsayksUT17fTtpZihrLmNvbXByZXNzaW9uJiYoUS5jb21wcmVzc2lvbj0iREVGTEFURSIpLGsucGFzc3dvcmQpUS50eXBlPVRlPyJub2RlYnVmZmVyIjoic3RyaW5nIjtlbHNlIHN3aXRjaChrLnR5cGUpe2Nhc2UiYmFzZTY0IjpRLnR5cGU9ImJhc2U2NCI7YnJlYWs7Y2Fz''@;'; put 'put ''ZSJiaW5hcnkiOlEudHlwZT0ic3RyaW5nIjticmVhaztjYXNlInN0cmluZyI6dGhyb3cgbmV3IEVycm9yKCInc3RyaW5nJyBvdXRwdXQgdHlwZSBpbnZhbGlkIGZvciAnIitrLmJvb2tUeXBlKyInIGZpbGVzIik7Y2FzZSJidWZmZXIiOmNhc2UiZmlsZSI6US50eXBlPVRlPyJub2RlYnVmZmVy''@;'; put 'put ''Ijoic3RyaW5nIjticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHR5cGUgIitrLnR5cGUpfXZhciBvZT1HLkZ1bGxQYXRocz92ZS53cml0ZShHLHtmaWxlVHlwZToiemlwIix0eXBlOntub2RlYnVmZmVyOiJidWZmZXIiLHN0cmluZzoiYmluYXJ5In1bUS50eXBl''@;'; put 'put ''XXx8US50eXBlfSk6Ry5nZW5lcmF0ZShRKTtyZXR1cm4gay5wYXNzd29yZCYmdHlwZW9mIFh6PCJ1Ij9LNShYeihvZSxrLnBhc3N3b3JkKSxrKToiZmlsZSI9PT1rLnR5cGU/RGUoay5maWxlLG9lKToic3RyaW5nIj09ay50eXBlP2dvKG9lKTpvZX0oUyxrKTtkZWZhdWx0OnRocm93IG5ldyBF''@;'; put 'put ''cnJvcigiVW5yZWNvZ25pemVkIGJvb2tUeXBlIHwiK2suYm9va1R5cGUrInwiKX19ZnVuY3Rpb24gbk0oUyl7aWYoIVMuYm9va1R5cGUpe3ZhciBrPVMuZmlsZS5zbGljZShTLmZpbGUubGFzdEluZGV4T2YoIi4iKSkudG9Mb3dlckNhc2UoKTtrLm1hdGNoKC9eXC5bYS16XSskLykmJihTLmJv''@;'; put 'put ''b2tUeXBlPWsuc2xpY2UoMSkpLFMuYm9va1R5cGU9e3hsczoiYmlmZjgiLGh0bToiaHRtbCIsc2xrOiJzeWxrIixzb2NpYWxjYWxjOiJldGgiLFNoMzN0SlM6IldURiJ9W1MuYm9va1R5cGVdfHxTLmJvb2tUeXBlfX1mdW5jdGlvbiBWOChTLFIsayl7dmFyIEc9a3x8e307cmV0dXJuIEcudHlw''@;'; put 'put ''ZT0iZmlsZSIsRy5maWxlPVIsbk0oRyksTjgoUyxHKX1mdW5jdGlvbiBpTShTLFIsayxHLFEsb2UsZ2UscGUpe3ZhciB5ZT1qaShrKSxQZT1wZS5kZWZ2YWwsTmU9cGUucmF3LFllPSEwLGV0PTE9PT1RP1tdOnt9O2lmKDEhPT1RKWlmKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSl0cnl7T2JqZWN0''@;'; put 'put ''LmRlZmluZVByb3BlcnR5KGV0LCJfX3Jvd051bV9fIix7dmFsdWU6ayxlbnVtZXJhYmxlOiExfSl9Y2F0Y2h7ZXQuX19yb3dOdW1fXz1rfWVsc2UgZXQuX19yb3dOdW1fXz1rO2lmKCFnZXx8U1trXSlmb3IodmFyIGN0PVIucy5jO2N0PD1SLmUuYzsrK2N0KXt2YXIgRXQ9Z2U/U1trXVtjdF06''@;'; put 'put ''U1tHW2N0XSt5ZV07aWYodm9pZCAwIT09RXQmJnZvaWQgMCE9PUV0LnQpe3ZhciBhdD1FdC52O3N3aXRjaChFdC50KXtjYXNlInoiOmlmKG51bGw9PWF0KWJyZWFrO2NvbnRpbnVlO2Nhc2UiZSI6YXQ9MD09YXQ/bnVsbDp2b2lkIDA7YnJlYWs7Y2FzZSJzIjpjYXNlImQiOmNhc2UiYiI6Y2Fz''@;'; put 'put ''ZSJuIjpicmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkIHR5cGUgIitFdC50KX1pZihudWxsIT1vZVtjdF0pe2lmKG51bGw9PWF0KWlmKCJlIj09RXQudCYmbnVsbD09PWF0KWV0W29lW2N0XV09bnVsbDtlbHNlIGlmKHZvaWQgMCE9PVBlKWV0W29lW2N0XV09UGU7''@;'; put 'put ''ZWxzZXtpZighTmV8fG51bGwhPT1hdCljb250aW51ZTtldFtvZVtjdF1dPW51bGx9ZWxzZSBldFtvZVtjdF1dPU5lP2F0Ol9sKEV0LGF0LHBlKTtudWxsIT1hdCYmKFllPSExKX19ZWxzZXtpZih2b2lkIDA9PT1QZSljb250aW51ZTtudWxsIT1vZVtjdF0mJihldFtvZVtjdF1dPVBlKX19cmV0''@;'; put 'put ''dXJue3JvdzpldCxpc2VtcHR5OlllfX1mdW5jdGlvbiBLNChTLFIpe2lmKG51bGw9PVN8fG51bGw9PVNbIiFyZWYiXSlyZXR1cm5bXTt2YXIgaz17dDoibiIsdjowfSxHPTAsUT0xLG9lPVtdLGdlPTAscGU9IiIseWU9SlNPTi5wYXJzZSgneyJzIjp7InIiOjAsImMiOjB9LCJlIjp7InIiOjAs''@;'; put 'put ''ImMiOjB9fScpLFBlPVJ8fHt9LE5lPW51bGwhPVBlLnJhbmdlP1BlLnJhbmdlOlNbIiFyZWYiXTtzd2l0Y2goMT09PVBlLmhlYWRlcj9HPTE6IkEiPT09UGUuaGVhZGVyP0c9MjpBcnJheS5pc0FycmF5KFBlLmhlYWRlcik/Rz0zOm51bGw9PVBlLmhlYWRlciYmKEc9MCksdHlwZW9mIE5lKXtj''@;'; put 'put ''YXNlInN0cmluZyI6eWU9b28oTmUpO2JyZWFrO2Nhc2UibnVtYmVyIjooeWU9b28oU1siIXJlZiJdKSkucy5yPU5lO2JyZWFrO2RlZmF1bHQ6eWU9TmV9Rz4wJiYoUT0wKTt2YXIgWWU9amkoeWUucy5yKSxldD1bXSxjdD1bXSxFdD0wLGF0PTAsYnQ9QXJyYXkuaXNBcnJheShTKSxqdD15ZS5z''@;'; put 'put ''LnIsa3Q9MCxPdD0wO2ZvcihidCYmIVNbanRdJiYoU1tqdF09W10pLGt0PXllLnMuYztrdDw9eWUuZS5jOysra3Qpc3dpdGNoKGV0W2t0XT1UYShrdCksaz1idD9TW2p0XVtrdF06U1tldFtrdF0rWWVdLEcpe2Nhc2UgMTpvZVtrdF09a3QteWUucy5jO2JyZWFrO2Nhc2UgMjpvZVtrdF09ZXRb''@;'; put 'put ''a3RdO2JyZWFrO2Nhc2UgMzpvZVtrdF09UGUuaGVhZGVyW2t0LXllLnMuY107YnJlYWs7ZGVmYXVsdDpmb3IobnVsbD09ayYmKGs9SlNPTi5wYXJzZSgneyJ3IjogIl9fRU1QVFkiLCAidCI6ICJzIn0nKSkscGU9Z2U9X2woayxudWxsLFBlKSxhdD0wLE90PTA7T3Q8b2UubGVuZ3RoOysrT3Qp''@;'; put 'put ''b2VbT3RdPT1wZSYmKHBlPWdlKyJfIisgKythdCk7b2Vba3RdPXBlfWZvcihqdD15ZS5zLnIrUTtqdDw9eWUuZS5yOysranQpe3ZhciBLdD1pTShTLHllLGp0LGV0LEcsb2UsYnQsUGUpOyghMT09PUt0LmlzZW1wdHl8fCgxPT09Rz8hMSE9PVBlLmJsYW5rcm93czpQZS5ibGFua3Jvd3MpKSYm''@;'; put 'put ''KGN0W0V0KytdPUt0LnJvdyl9cmV0dXJuIGN0Lmxlbmd0aD1FdCxjdH12YXIgXzI9LyIvZztmdW5jdGlvbiBCSShTLFIsayxHLFEsb2UsZ2UscGUpe2Zvcih2YXIgeWU9ITAsUGU9W10sTmU9IiIsWWU9amkoayksZXQ9Ui5zLmM7ZXQ8PVIuZS5jOysrZXQpaWYoR1tldF0pe3ZhciBjdD1wZS5k''@;'; put 'put ''ZW5zZT8oU1trXXx8W10pW2V0XTpTW0dbZXRdK1llXTtpZihudWxsPT1jdClOZT0iIjtlbHNlIGlmKG51bGwhPWN0LnYpe3llPSExLE5lPSIiK19sKGN0LG51bGwscGUpO2Zvcih2YXIgRXQ9MCxhdD0wO0V0IT09TmUubGVuZ3RoOysrRXQpaWYoKGF0PU5lLmNoYXJDb2RlQXQoRXQpKT09PVF8''@;'; put 'put ''fGF0PT09b2V8fDM0PT09YXQpe05lPSciJytOZS5yZXBsYWNlKF8yLCciIicpKyciJzticmVha30iSUQiPT1OZSYmKE5lPSciSUQiJyl9ZWxzZSBudWxsPT1jdC5mfHxjdC5GP05lPSIiOih5ZT0hMSwoTmU9Ij0iK2N0LmYpLmluZGV4T2YoIiwiKT49MCYmKE5lPSciJytOZS5yZXBsYWNlKF8y''@;'; put 'put ''LCciIicpKyciJykpO1BlLnB1c2goTmUpfXJldHVybiExPT09cGUuYmxhbmtyb3dzJiZ5ZT9udWxsOlBlLmpvaW4oZ2UpfWZ1bmN0aW9uIEMwKFMsUil7dmFyIGs9W10sRz1SPz97fTtpZihudWxsPT1TfHxudWxsPT1TWyIhcmVmIl0pcmV0dXJuIiI7dmFyIFE9b28oU1siIXJlZiJdKSxvZT12''@;'; put 'put ''b2lkIDAhPT1HLkZTP0cuRlM6IiwiLGdlPW9lLmNoYXJDb2RlQXQoMCkscGU9dm9pZCAwIT09Ry5SUz9HLlJTOiJcbiIseWU9cGUuY2hhckNvZGVBdCgwKSxQZT1uZXcgUmVnRXhwKCgifCI9PW9lPyJcXHwiOm9lKSsiKyQiKSxOZT0iIixZZT1bXTtHLmRlbnNlPUFycmF5LmlzQXJyYXkoUyk7''@;'; put 'put ''Zm9yKHZhciBldD1HLnNraXBIaWRkZW4mJlNbIiFjb2xzIl18fFtdLGN0PUcuc2tpcEhpZGRlbiYmU1siIXJvd3MiXXx8W10sRXQ9US5zLmM7RXQ8PVEuZS5jOysrRXQpKGV0W0V0XXx8e30pLmhpZGRlbnx8KFllW0V0XT1UYShFdCkpO2Zvcih2YXIgYXQ9US5zLnI7YXQ8PVEuZS5yOysrYXQp''@;'; put 'put ''KGN0W2F0XXx8e30pLmhpZGRlbnx8bnVsbCE9KE5lPUJJKFMsUSxhdCxZZSxnZSx5ZSxvZSxHKSkmJihHLnN0cmlwJiYoTmU9TmUucmVwbGFjZShQZSwiIikpLGsucHVzaChOZStwZSkpO3JldHVybiBkZWxldGUgRy5kZW5zZSxrLmpvaW4oIiIpfWZ1bmN0aW9uIGpJKFMsUil7Unx8KFI9e30p''@;'; put 'put ''LFIuRlM9Ilx0IixSLlJTPSJcbiI7dmFyIGs9QzAoUyxSKTtyZXR1cm4gdHlwZW9mIGNwdGFibGU+InUifHwic3RyaW5nIj09Ui50eXBlP2s6Ilx4ZmZceGZlIitjcHRhYmxlLnV0aWxzLmVuY29kZSgxMjAwLGssInN0ciIpfWZ1bmN0aW9uIGFNKFMpe3ZhciBrLFI9IiIsRz0iIjtpZihudWxs''@;'; put 'put ''PT1TfHxudWxsPT1TWyIhcmVmIl0pcmV0dXJuW107dmFyIHBlLFE9b28oU1siIXJlZiJdKSxvZT0iIixnZT1bXSx5ZT1bXSxQZT1BcnJheS5pc0FycmF5KFMpO2ZvcihwZT1RLnMuYztwZTw9US5lLmM7KytwZSlnZVtwZV09VGEocGUpO2Zvcih2YXIgTmU9US5zLnI7TmU8PVEuZS5yOysrTmUp''@;'; put 'put ''Zm9yKG9lPWppKE5lKSxwZT1RLnMuYztwZTw9US5lLmM7KytwZSlpZihSPWdlW3BlXStvZSxHPSIiLHZvaWQgMCE9PShrPVBlPyhTW05lXXx8W10pW3BlXTpTW1JdKSl7aWYobnVsbCE9ay5GKXtpZihSPWsuRiwhay5mKWNvbnRpbnVlO0c9ay5mLC0xPT1SLmluZGV4T2YoIjoiKSYmKFI9Uisi''@;'; put 'put ''OiIrUil9aWYobnVsbCE9ay5mKUc9ay5mO2Vsc2V7aWYoInoiPT1rLnQpY29udGludWU7aWYoIm4iPT1rLnQmJm51bGwhPWsudilHPSIiK2sudjtlbHNlIGlmKCJiIj09ay50KUc9ay52PyJUUlVFIjoiRkFMU0UiO2Vsc2UgaWYodm9pZCAwIT09ay53KUc9IiciK2sudztlbHNle2lmKHZvaWQg''@;'; put 'put ''MD09PWsudiljb250aW51ZTtHPSJzIj09ay50PyInIitrLnY6IiIray52fX15ZVt5ZS5sZW5ndGhdPVIrIj0iK0d9cmV0dXJuIHllfWZ1bmN0aW9uIEJiKFMsUixrKXt2YXIgRz1rfHx7fSxRPSshRy5za2lwSGVhZGVyLG9lPVN8fHt9LGdlPTAscGU9MDtpZihvZSYmbnVsbCE9Ry5vcmlnaW4p''@;'; put 'put ''aWYoIm51bWJlciI9PXR5cGVvZiBHLm9yaWdpbilnZT1HLm9yaWdpbjtlbHNle3ZhciB5ZT0ic3RyaW5nIj09dHlwZW9mIEcub3JpZ2luP05vKEcub3JpZ2luKTpHLm9yaWdpbjtnZT15ZS5yLHBlPXllLmN9dmFyIFBlLE5lPUpTT04ucGFyc2UoJ3sicyI6IHsiYyI6MCwgInIiOjB9LCAiZSI6''@;'; put 'put ''IHsiYyI6MCwgInIiOjB9fScpO2lmKE5lLmUuYz1wZSxOZS5lLnI9Z2UrUi5sZW5ndGgtMStRLG9lWyIhcmVmIl0pe3ZhciBZZT1vbyhvZVsiIXJlZiJdKTtOZS5lLmM9TWF0aC5tYXgoTmUuZS5jLFllLmUuYyksTmUuZS5yPU1hdGgubWF4KE5lLmUucixZZS5lLnIpLC0xPT1nZSYmKE5lLmUu''@;'; put 'put ''cj0oZ2U9WWUuZS5yKzEpK1IubGVuZ3RoLTErUSl9ZWxzZS0xPT1nZSYmKGdlPTAsTmUuZS5yPVIubGVuZ3RoLTErUSk7dmFyIGV0PUcuaGVhZGVyfHxbXSxjdD0wO1IuZm9yRWFjaChmdW5jdGlvbihhdCxidCl7T2UoYXQpLmZvckVhY2goZnVuY3Rpb24oanQpey0xPT0oY3Q9ZXQuaW5kZXhP''@;'; put 'put ''ZihqdCkpJiYoZXRbY3Q9ZXQubGVuZ3RoXT1qdCk7dmFyIGt0PWF0W2p0XSxPdD0ieiIsS3Q9IiIsVG49cWkoe2M6cGUrY3QscjpnZStidCtRfSk7aWYoUGU9enUuc2hlZXRfZ2V0X2NlbGwob2UsVG4pLCFrdHx8Im9iamVjdCIhPXR5cGVvZiBrdHx8a3QgaW5zdGFuY2VvZiBEYXRlKXtpZigi''@;'; put 'put ''bnVtYmVyIj09dHlwZW9mIGt0P090PSJuIjoiYm9vbGVhbiI9PXR5cGVvZiBrdD9PdD0iYiI6InN0cmluZyI9PXR5cGVvZiBrdD9PdD0icyI6a3QgaW5zdGFuY2VvZiBEYXRlPyhPdD0iZCIsRy5jZWxsRGF0ZXN8fChPdD0ibiIsa3Q9UWUoa3QpKSxLdD1QZS56JiZBLmlzX2RhdGUoUGUueik/''@;'; put 'put ''UGUuejpHLmRhdGVORnx8QS5fdGFibGVbMTRdKTpudWxsPT09a3QmJkcubnVsbEVycm9yJiYoT3Q9ImUiLGt0PTApLFBlPyhQZS50PU90LFBlLnY9a3QsZGVsZXRlIFBlLncsZGVsZXRlIFBlLlIsS3QmJihQZS56PUt0KSk6b2VbVG5dPVBlPXt0Ok90LHY6a3R9LEt0JiYoUGUuej1LdCksUGUm''@;'; put 'put ''JlBlLmgpdHJ5e2lmKFBlLlI9bWQuaHRtbF90b19ycyhQZS5oKSwhUGUudil7UGUudj0iIjtmb3IodmFyIHJyPTA7cnI8UGUuUi5sZW5ndGg7KytycilQZS52Kz1QZS5SW3JyXS52fHwiIn19Y2F0Y2h7fX1lbHNlIG9lW1RuXT1rdH0pfSksTmUuZS5jPU1hdGgubWF4KE5lLmUuYyxwZStldC5s''@;'; put 'put ''ZW5ndGgtMSk7dmFyIEV0PWppKGdlKTtpZihRKWZvcihjdD0wO2N0PGV0Lmxlbmd0aDsrK2N0KW9lW1RhKGN0K3BlKStFdF09e3Q6InMiLHY6ZXRbY3RdfTtyZXR1cm4gb2VbIiFyZWYiXT1yYShOZSksb2V9dmFyIHp1PXtlbmNvZGVfY29sOlRhLGVuY29kZV9yb3c6amksZW5jb2RlX2NlbGw6''@;'; put 'put ''cWksZW5jb2RlX3JhbmdlOnJhLGRlY29kZV9jb2w6Q2EsZGVjb2RlX3JvdzpfbyxzcGxpdF9jZWxsOmZ1bmN0aW9uICQwKFMpe3JldHVybiBTLnJlcGxhY2UoLyhcJD9bQS1aXSopKFwkP1xkKikvLCIkMSwkMiIpLnNwbGl0KCIsIil9LGRlY29kZV9jZWxsOk5vLGRlY29kZV9yYW5nZTpNcyxm''@;'; put 'put ''b3JtYXRfY2VsbDpfbCxnZXRfZm9ybXVsYWU6YU0sbWFrZV9jc3Y6QzAsbWFrZV9qc29uOks0LG1ha2VfZm9ybXVsYWU6YU0saHRtbF90b19yczptZC5odG1sX3RvX3JzLHNoZWV0X2FkZF9hb2E6ZjQsc2hlZXRfYWRkX2pzb246QmIsc2hlZXRfYWRkX2RvbTpJYixhb2FfdG9fc2hlZXQ6cDQs''@;'; put 'put ''anNvbl90b19zaGVldDpmdW5jdGlvbiB6SShTLFIpe3JldHVybiBCYihudWxsLFMsUil9LHRhYmxlX3RvX3NoZWV0Omp6LHRhYmxlX3RvX2Jvb2s6ZnVuY3Rpb24genooUyxSKXtyZXR1cm4gdGgoanooUyxSKSxSKX0sc2hlZXRfdG9fY3N2OkMwLHNoZWV0X3RvX3R4dDpqSSxzaGVldF90b19q''@;'; put 'put ''c29uOks0LHNoZWV0X3RvX2h0bWw6bWQuZnJvbV9zaGVldCxzaGVldF90b19mb3JtdWxhZTphTSxzaGVldF90b19yb3dfb2JqZWN0X2FycmF5Oks0fTtmdW5jdGlvbiBVSShTLFIsayxHLFEpe3ZhciBvZTtpZihTLnN0eWxlJiYhKFMuX3JhbmdlJiYob2U9InN0cmluZyI9PXR5cGVvZiBTLl9y''@;'; put 'put ''YW5nZT93LnV0aWxzLmRlY29kZV9yYW5nZShTLl9yYW5nZSk6Uy5fcmFuZ2Usay5jPm9lLmUuY3x8ay5jPG9lLnMuY3x8ay5yPm9lLmUucnx8ay5yPG9lLnMucikpJiZvZSl7dmFyIGdlPVMuc3R5bGUuc3R5bGU7aWYoZ2Upe2dlLndob2xlVGFibGUmJnp1LmFwcGx5X3N0eWxlX2RlbHRhKEcs''@;'; put 'put ''Z2Uud2hvbGVUYWJsZSk7ZTppZihnZS5oZWFkZXJSb3cpaWYoUSl7aWYoay5yIT1vZS5zLnIpYnJlYWsgZTtXdChTLnN0eWxlLmNvbGhlYWQpfHx6dS5hcHBseV9zdHlsZV9kZWx0YShHLGdlLmhlYWRlclJvdyl9ZWxzZXtpZihrLnIhPW9lLnMucilicmVhayBlO1d0KFMuaGVhZGVyKXx8enUu''@;'; put 'put ''YXBwbHlfc3R5bGVfZGVsdGEoRyxnZS5oZWFkZXJSb3cpfX19fXp1LnRlc3RfcGFzc3dvcmQ9ZnVuY3Rpb24gS3ooUyxSKXt2YXIgaz1CdWZmZXIuZnJvbShTLnNhbHQsImJhc2U2NCIpLEc9Uy5hbGdvLFE9bWMoQnVmZmVyLmNvbmNhdChbayxCdWZmZXIuZnJvbShjcHRhYmxlLnV0aWxzLmVu''@;'; put 'put ''Y29kZSgxMjAwLFIpKV0pLEcpLG9lPUJ1ZmZlci5hbGxvYyg0KTttbihvZSwwKTtmb3IodmFyIGdlPTA7Z2U8Uy5zcGluOysrZ2Upb2UubD0wLG9lLndyaXRlX3NoaWZ0KDQsZ2UpLFE9bWMoQnVmZmVyLmNvbmNhdChbUSxvZV0pLEcpO3ZhciBwZT1CdWZmZXIuZnJvbShTLmhhc2gsImJhc2U2''@;'; put 'put ''NCIpO3JldHVybiAwPT1RLmNvbXBhcmUocGUpfSx6dS5oYXNoX3Bhc3N3b3JkPWZ1bmN0aW9uIFJiKFMpe3ZhciBSPXthbGdvOiJTSEEtNTEyIixzYWx0OiJVMmhsWlhSS1V5NWpiMjB2ZUd4emVBPT0iLHNwaW46MWUzfSxrPUJ1ZmZlci5mcm9tKFIuc2FsdCwiYmFzZTY0IiksRz1SLmFsZ28s''@;'; put 'put ''UT1tYyhCdWZmZXIuY29uY2F0KFtrLEJ1ZmZlci5mcm9tKGNwdGFibGUudXRpbHMuZW5jb2RlKDEyMDAsUykpXSksRyksb2U9QnVmZmVyLmFsbG9jKDQpO21uKG9lLDApO2Zvcih2YXIgZ2U9MDtnZTxSLnNwaW47KytnZSlvZS5sPTAsb2Uud3JpdGVfc2hpZnQoNCxnZSksUT1tYyhCdWZmZXIu''@;'; put 'put ''Y29uY2F0KFtRLG9lXSksRyk7cmV0dXJuIFIuaGFzaD1RLnRvU3RyaW5nKCJiYXNlNjQiKSxSfSx6dS5zaGVldF9zZXRfcmFuZ2Vfc3R5bGU9ZnVuY3Rpb24oUyxSLGspe2lmKGspe3ZhciBHPSJzdHJpbmciPT10eXBlb2YgUj9vbyhSKTpSO251bGwhPUcuciYmbnVsbCE9Ry5jJiYoRz17czpH''@;'; put 'put ''LGU6R30pO3ZhciBwZSxRPUcucy5yLG9lPTAsZ2U9IiIseWU9TXMoU1siIXJlZiJdfHwiQTEiKTt5ZS5zLnI+Ry5zLnImJih5ZS5zLnI9Ry5zLnIpLHllLnMuYz5HLnMuYyYmKHllLnMuYz1HLnMuYykseWUuZS5yPEcuZS5yJiYoeWUuZS5yPUcuZS5yKSx5ZS5lLmM8Ry5lLmMmJih5ZS5lLmM9''@;'; put 'put ''Ry5lLmMpLFNbIiFyZWYiXT1yYSh5ZSk7Zm9yKHZhciBOZT1BcnJheS5pc0FycmF5KFMpO1E8PUcuZS5yOysrUSlmb3Iob2U9Ry5zLmM7b2U8PUcuZS5jOysrb2UpTmU/KFNbUV18fChTW1FdPVtdKSxTW1FdW29lXXx8KFNbUV1bb2VdPXt0OiJ6In0pLHBlPVNbUV1bb2VdKTooU1tnZT1xaSh7''@;'; put 'put ''cjpRLGM6b2V9KV18fChTW2dlXT17dDoieiJ9KSxwZT1TW2dlXSkscGUuc3x8KHBlLnM9e30pLE9iamVjdC5rZXlzKGspLmZvckVhY2goUGUpLHBlLnMucGF0dGVyblR5cGUmJiFwZS5zLmZnQ29sb3ImJihkZWxldGUgcGUucy5wYXR0ZXJuVHlwZSxkZWxldGUgcGUucy5iZ0NvbG9yKSwocGUu''@;'; put 'put ''cy5mZ0NvbG9yfHxwZS5zLmJnQ29sb3IpJiYibm9uZSI9PShwZS5zLnBhdHRlcm5UeXBlfHwibm9uZSIpJiYocGUucy5wYXR0ZXJuVHlwZT0ic29saWQiKTtpZihRPUcucy5yLGsudG9wfHxudWxsPT09ay50b3ApZm9yKG9lPUcucy5jO29lPD1HLmUuYzsrK29lKXtpZihOZSl7aWYoIVNbUV0p''@;'; put 'put ''Y29udGludWU7cGU9U1tRXVtvZV19ZWxzZSBnZT1xaSh7cjpRLGM6b2V9KSxwZT1TW2dlXTtwZSYmKG51bGw9PT1rLnRvcD9kZWxldGUgcGUucy50b3A6cGUucy50b3A9cXQoay50b3ApKX1pZihRPUcuZS5yLGsuYm90dG9tfHxudWxsPT09ay5ib3R0b20pZm9yKG9lPUcucy5jO29lPD1HLmUu''@;'; put 'put ''YzsrK29lKXtpZihOZSl7aWYoIVNbUV0pY29udGludWU7cGU9U1tRXVtvZV19ZWxzZSBnZT1xaSh7cjpRLGM6b2V9KSxwZT1TW2dlXTtwZSYmKG51bGw9PT1rLmJvdHRvbT9kZWxldGUgcGUucy5ib3R0b206cGUucy5ib3R0b209cXQoay5ib3R0b20pKX1pZihvZT1HLnMuYyxrLmxlZnR8fG51''@;'; put 'put ''bGw9PT1rLmxlZnQpZm9yKFE9Ry5zLnI7UTw9Ry5lLnI7KytRKXtpZihOZSl7aWYoIVNbUV0pY29udGludWU7cGU9U1tRXVtvZV19ZWxzZSBnZT1xaSh7cjpRLGM6b2V9KSxwZT1TW2dlXTtwZSYmKG51bGw9PT1rLmxlZnQ/ZGVsZXRlIHBlLnMubGVmdDpwZS5zLmxlZnQ9cXQoay5sZWZ0KSl9''@;'; put 'put ''aWYob2U9Ry5lLmMsay5yaWdodHx8bnVsbD09PWsucmlnaHQpZm9yKFE9Ry5zLnI7UTw9Ry5lLnI7KytRKXtpZihOZSl7aWYoIVNbUV0pY29udGludWU7cGU9U1tRXVtvZV19ZWxzZSBnZT1xaSh7cjpRLGM6b2V9KSxwZT1TW2dlXTtwZSYmKG51bGw9PT1rLnJpZ2h0P2RlbGV0ZSBwZS5zLnJp''@;'; put 'put ''Z2h0OnBlLnMucmlnaHQ9cXQoay5yaWdodCkpfX1mdW5jdGlvbiBQZShZZSl7aWYoInRvcCIhPVllJiYiYm90dG9tIiE9WWUmJiJsZWZ0IiE9WWUmJiJyaWdodCIhPVllKXtpZigieiI9PVllKXJldHVybiB2b2lkKHBlLno9ay56KTtpZigiYWxpZ25tZW50Ij09WWUpcmV0dXJuIHZvaWQocGUu''@;'; put 'put ''c1tZZV0/T2JqZWN0LmtleXMoa1tZZV0pLmZvckVhY2goZnVuY3Rpb24oZXQpe3BlLnNbWWVdW2V0XT1rW1llXVtldF19KTpwZS5zW1llXT1xdChrW1llXSkpO2lmKCJpbmNvbCI9PVllKXJldHVybiBvZT5HLnMuYyYmKG51bGw9PT1rLmxlZnQ/ZGVsZXRlIHBlLnMubGVmdDpwZS5zLmxlZnQ9''@;'; put 'put ''Im9iamVjdCI9PXR5cGVvZiBrW1llXT9xdChrW1llXSk6a1tZZV0pLHZvaWQob2U8Ry5lLmMmJihudWxsPT09ay5yaWdodD9kZWxldGUgcGUucy5yaWdodDpwZS5zLnJpZ2h0PSJvYmplY3QiPT10eXBlb2Yga1tZZV0/cXQoa1tZZV0pOmtbWWVdKSk7aWYoImlucm93Ij09WWUpcmV0dXJuIFE+''@;'; put 'put ''Ry5zLnImJihudWxsPT09ay50b3A/ZGVsZXRlIHBlLnMudG9wOnBlLnMudG9wPSJvYmplY3QiPT10eXBlb2Yga1tZZV0/cXQoa1tZZV0pOmtbWWVdKSx2b2lkKFE8Ry5lLnImJihudWxsPT09ay5ib3R0b20/ZGVsZXRlIHBlLnMuYm90dG9tOnBlLnMuYm90dG9tPSJvYmplY3QiPT10eXBlb2Yg''@;'; put 'put ''a1tZZV0/cXQoa1tZZV0pOmtbWWVdKSk7bnVsbD09PWtbWWVdP2RlbGV0ZSBwZS5zW1llXTpwZS5zW1llXT1rW1llXSYmQXJyYXkuaXNBcnJheShrW1llXSk/a1tZZV0uc2xpY2UoKS5tYXAoZnVuY3Rpb24oZXQpe3JldHVybiJvYmplY3QiPT10eXBlb2YgZXQ/cXQoZXQpOmV0fSk6Im9iamVj''@;'; put 'put ''dCI9PXR5cGVvZiBrW1llXT9xdChrW1llXSk6a1tZZV19fX0senUuYXBwbHlfc3R5bGVfZGVsdGE9ZnVuY3Rpb24oUyxSKXtbInN6IiwiYm9sZCIsIml0YWxpYyIsInVuZGVybGluZSIsInN0cmlrZSIsIm5hbWUiLCJ2YWxpZ24iXS5mb3JFYWNoKGZ1bmN0aW9uKGspe3ZhciBHPWs7ImJnQ29s''@;'; put 'put ''b3IiPT1rP0c9ImZnQ29sb3IiOiJmZ0NvbG9yIj09ayYmKEc9ImJnQ29sb3IiKSxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoUixrKSYmKG51bGw9PT1SW2tdP2RlbGV0ZSBTW0ddOm51bGwhPVJba10mJihTW0ddPVJba10pKX0pLFsibGVmdCIsInJpZ2h0IiwidG9wIiwi''@;'; put 'put ''Ym90dG9tIiwiYWxpZ25tZW50IiwicHJvdGVjdGlvbiIsImNvbG9yIiwiZmdDb2xvciIsImJnQ29sb3IiXS5mb3JFYWNoKGZ1bmN0aW9uKGspe09iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChSLGspJiYobnVsbD09PVJba10/ZGVsZXRlIFNba106bnVsbCE9UltrXSYmKFNb''@;'; put 'put ''a109cXQoUltrXSkpKX0pfSx6dS5nZXRfY29tcHV0ZWRfc3R5bGU9ZnVuY3Rpb24oUyxSKXsic3RyaW5nIj09dHlwZW9mIFImJihSPXcudXRpbHMuZGVjb2RlX2NlbGwoUikpO3ZhciBrPUFycmF5LmlzQXJyYXkoUyk/KFNbUi5yXXx8W10pW1IuY106U1t3LnV0aWxzLmVuY29kZV9jZWxsKFIp''@;'; put 'put ''XSxHPXF0KGsmJmsuc3x8e30pO3JldHVybiBTWyIhdGFibGVzIl0mJlNbIiF0YWJsZXMiXS5mb3JFYWNoKGZ1bmN0aW9uKFEpe1VJKFEsMCxSLEcpfSksU1siIXBpdm90cyJdJiZTWyIhcGl2b3RzIl0uZm9yRWFjaChmdW5jdGlvbihRKXtVSShRLDAsUixHLCEwKX0pLEd9O3ZhciB6Yj17fTt6''@;'; put 'put ''dS5jZWxsX2FycmF5X3RvX2Nzdl9yb3c9ZnVuY3Rpb24oUyxSKXt2YXIgaz1SPz97fSxHPXZvaWQgMCE9PWsuRlM/ay5GUzoiLCIsUT1HLmNoYXJDb2RlQXQoMCksb2U9dm9pZCAwIT09ay5SUz9rLlJTOiJcbiIsZ2U9b2UuY2hhckNvZGVBdCgwKSxwZT16YltHXXx8KHpiW0ddPW5ldyBSZWdF''@;'; put 'put ''eHAoKCJ8Ij09Rz8iXFx8IjpHKSsiKyQiKSkseWU9ZnVuY3Rpb24gamIoUyxSLGssRyxRKXtmb3IodmFyIG9lPSEwLGdlPVtdLHBlPSIiLHllPTA7eWU8PVMubGVuZ3RoLTE7Kyt5ZSl7dmFyIFBlPVNbeWVdO2lmKG51bGw9PVBlKXBlPSIiO2Vsc2UgaWYobnVsbCE9UGUudil7b2U9ITEscGU9''@;'; put 'put ''IiIrX2woUGUsbnVsbCxRKTtmb3IodmFyIE5lPTAsWWU9MDtOZSE9PXBlLmxlbmd0aDsrK05lKWlmKChZZT1wZS5jaGFyQ29kZUF0KE5lKSk9PT1SfHxZZT09PWt8fDM0PT09WWUpe3BlPSciJytwZS5yZXBsYWNlKF8yLCciIicpKyciJzticmVha30iSUQiPT1wZSYmKHBlPSciSUQiJyl9ZWxz''@;'; put 'put ''ZSBudWxsPT1QZS5mfHxQZS5GP3BlPSIiOihvZT0hMSwocGU9Ij0iK1BlLmYpLmluZGV4T2YoIiwiKT49MCYmKHBlPSciJytwZS5yZXBsYWNlKF8yLCciIicpKyciJykpO2dlLnB1c2gocGUpfXJldHVybiExPT09US5ibGFua3Jvd3MmJm9lP251bGw6Z2Uuam9pbihHKX0oUyxRLGdlLEcsayk7''@;'; put 'put ''cmV0dXJuIGsuc3RyaXAmJih5ZT15ZS5yZXBsYWNlKHBlLCIiKSkseWUrb2V9LGZ1bmN0aW9uKFMpe2Z1bmN0aW9uIGsob2UsZ2UscGUpe3JldHVybiBudWxsIT1vZVtnZV0/b2VbZ2VdOm9lW2dlXT1wZX1mdW5jdGlvbiBHKG9lLGdlLHBlKXtpZigic3RyaW5nIj09dHlwZW9mIGdlKXtpZihB''@;'; put 'put ''cnJheS5pc0FycmF5KG9lKSl7dmFyIHllPU5vKGdlKTtyZXR1cm4gb2VbeWUucl18fChvZVt5ZS5yXT1bXSksb2VbeWUucl1beWUuY118fChvZVt5ZS5yXVt5ZS5jXT17dDoieiJ9KX1yZXR1cm4gb2VbZ2VdfHwob2VbZ2VdPXt0OiJ6In0pfXJldHVybiBHKG9lLHFpKCJudW1iZXIiIT10eXBl''@;'; put 'put ''b2YgZ2U/Z2U6e3I6Z2UsYzpwZXx8MH0pKX1TLmNvbnN0cz1TLmNvbnN0c3x8e30sUy5zaGVldF9nZXRfY2VsbD1HLFMuYm9va19uZXc9ZnVuY3Rpb24oKXtyZXR1cm57U2hlZXROYW1lczpbXSxTaGVldHM6e319fSxTLmJvb2tfYXBwZW5kX3NoZWV0PWZ1bmN0aW9uKG9lLGdlLHBlKXtpZigh''@;'; put 'put ''cGUpZm9yKHZhciB5ZT0xO3llPD02NTUzNSYmLTEhPW9lLlNoZWV0TmFtZXMuaW5kZXhPZihwZT0iU2hlZXQiK3llKTsrK3llKTtpZihfYihwZSksb2UuU2hlZXROYW1lcy5pbmRleE9mKHBlKT49MCl0aHJvdyBuZXcgRXJyb3IoIldvcmtzaGVldCB3aXRoIG5hbWUgfCIrcGUrInwgYWxyZWFk''@;'; put 'put ''eSBleGlzdHMhIik7b2UuU2hlZXROYW1lcy5wdXNoKHBlKSxvZS5TaGVldHNbcGVdPWdlfSxTLmJvb2tfc2V0X3NoZWV0X3Zpc2liaWxpdHk9ZnVuY3Rpb24ob2UsZ2UscGUpe2sob2UsIldvcmtib29rIix7fSksayhvZS5Xb3JrYm9vaywiU2hlZXRzIixbXSk7dmFyIHllPWZ1bmN0aW9uIFEo''@;'; put 'put ''b2UsZ2Upe2lmKCJudW1iZXIiPT10eXBlb2YgZ2Upe2lmKGdlPj0wJiZvZS5TaGVldE5hbWVzLmxlbmd0aD5nZSlyZXR1cm4gZ2U7dGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZmluZCBzaGVldCAjICIrZ2UpfWlmKCJzdHJpbmciPT10eXBlb2YgZ2Upe3ZhciBwZT1vZS5TaGVldE5hbWVzLmlu''@;'; put 'put ''ZGV4T2YoZ2UpO2lmKHBlPi0xKXJldHVybiBwZTt0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBmaW5kIHNoZWV0IG5hbWUgfCIrZ2UrInwiKX10aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBmaW5kIHNoZWV0IHwiK2dlKyJ8Iil9KG9lLGdlKTtzd2l0Y2goayhvZS5Xb3JrYm9vay5TaGVldHMseWUs''@;'; put 'put ''e30pLHBlKXtjYXNlIDA6Y2FzZSAxOmNhc2UgMjpicmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiQmFkIHNoZWV0IHZpc2liaWxpdHkgc2V0dGluZyAiK3BlKX1vZS5Xb3JrYm9vay5TaGVldHNbeWVdLkhpZGRlbj1wZX0sZnVuY3Rpb24gUihvZSl7b2UuZm9yRWFjaChmdW5jdGlvbihn''@;'; put 'put ''ZSl7Uy5jb25zdHNbZ2VbMF1dPWdlWzFdfSl9KFtbIlNIRUVUX1ZJU0lCTEUiLDBdLFsiU0hFRVRfSElEREVOIiwxXSxbIlNIRUVUX1ZFUllfSElEREVOIiwyXV0pLFMuY2VsbF9zZXRfbnVtYmVyX2Zvcm1hdD1mdW5jdGlvbihvZSxnZSl7cmV0dXJuIG9lLno9Z2Usb2V9LFMuY2VsbF9zZXRf''@;'; put 'put ''aHlwZXJsaW5rPWZ1bmN0aW9uKG9lLGdlLHBlKXtyZXR1cm4gZ2U/KG9lLmw9e1RhcmdldDpnZX0scGUmJihvZS5sLlRvb2x0aXA9cGUpLG9lLnN8fChvZS5zPXt9KSxvZS5zLmNvbG9yPXt0aGVtZToxMH0pOihkZWxldGUgb2UubCxvZS5zJiZvZS5zLmNvbG9yJiYxMD09b2Uucy5jb2xvci50''@;'; put 'put ''aGVtZSYmZGVsZXRlIG9lLnMuY29sb3IpLG9lfSxTLmNlbGxfc2V0X2ludGVybmFsX2xpbms9ZnVuY3Rpb24ob2UsZ2UscGUpe3JldHVybiBTLmNlbGxfc2V0X2h5cGVybGluayhvZSwiIyIrZ2UscGUpfSxTLmNlbGxfYWRkX2NvbW1lbnQ9ZnVuY3Rpb24ob2UsZ2UscGUpe29lLmN8fChvZS5j''@;'; put 'put ''PVtdKSxvZS5jLnB1c2goe3Q6Z2UsYTpwZXx8IlNoZWV0SlMifSl9LFMuc2hlZXRfc2V0X2FycmF5X2Zvcm11bGE9ZnVuY3Rpb24ob2UsZ2UscGUpe2Zvcih2YXIgeWU9InN0cmluZyIhPXR5cGVvZiBnZT9nZTpvbyhnZSksUGU9InN0cmluZyI9PXR5cGVvZiBnZT9nZTpyYShnZSksTmU9eWUu''@;'; put 'put ''cy5yO05lPD15ZS5lLnI7KytOZSlmb3IodmFyIFllPXllLnMuYztZZTw9eWUuZS5jOysrWWUpe3ZhciBldD1HKG9lLE5lLFllKTtldC50PSJuIixldC5GPVBlLGRlbGV0ZSBldC52LE5lPT15ZS5zLnImJlllPT15ZS5zLmMmJihldC5mPXBlKX1yZXR1cm4gb2V9fSh6dSksVGUmJmZ1bmN0aW9u''@;'; put 'put ''KCl7dmFyIFM9eSg3MDQ1KS5SZWFkYWJsZTt3LnN0cmVhbT17dG9fanNvbjpmdW5jdGlvbihRLG9lKXt2YXIgZ2U9Uyh7b2JqZWN0TW9kZTohMH0pO2lmKG51bGw9PVF8fG51bGw9PVFbIiFyZWYiXSlyZXR1cm4gZ2UucHVzaChudWxsKSxnZTt2YXIgcGU9e3Q6Im4iLHY6MH0seWU9MCxQZT0x''@;'; put 'put ''LE5lPVtdLFllPTAsZXQ9IiIsY3Q9e3M6e3I6MCxjOjB9LGU6e3I6MCxjOjB9fSxFdD1vZXx8e30sYXQ9bnVsbCE9RXQucmFuZ2U/RXQucmFuZ2U6UVsiIXJlZiJdO3N3aXRjaCgxPT09RXQuaGVhZGVyP3llPTE6IkEiPT09RXQuaGVhZGVyP3llPTI6QXJyYXkuaXNBcnJheShFdC5oZWFkZXIp''@;'; put 'put ''JiYoeWU9MyksdHlwZW9mIGF0KXtjYXNlInN0cmluZyI6Y3Q9b28oYXQpO2JyZWFrO2Nhc2UibnVtYmVyIjooY3Q9b28oUVsiIXJlZiJdKSkucy5yPWF0O2JyZWFrO2RlZmF1bHQ6Y3Q9YXR9eWU+MCYmKFBlPTApO3ZhciBidD1qaShjdC5zLnIpLGp0PVtdLGt0PTAsT3Q9QXJyYXkuaXNBcnJh''@;'; put 'put ''eShRKSxLdD1jdC5zLnIsVG49MCxycj0wO2ZvcihPdCYmIVFbS3RdJiYoUVtLdF09W10pLFRuPWN0LnMuYztUbjw9Y3QuZS5jOysrVG4pc3dpdGNoKGp0W1RuXT1UYShUbikscGU9T3Q/UVtLdF1bVG5dOlFbanRbVG5dK2J0XSx5ZSl7Y2FzZSAxOk5lW1RuXT1Ubi1jdC5zLmM7YnJlYWs7Y2Fz''@;'; put 'put ''ZSAyOk5lW1RuXT1qdFtUbl07YnJlYWs7Y2FzZSAzOk5lW1RuXT1FdC5oZWFkZXJbVG4tY3Qucy5jXTticmVhaztkZWZhdWx0OmZvcihudWxsPT1wZSYmKHBlPXt3OiJfX0VNUFRZIix0OiJzIn0pLGV0PVllPV9sKHBlLG51bGwsRXQpLGt0PTAscnI9MDtycjxOZS5sZW5ndGg7KytycilOZVty''@;'; put 'put ''cl09PWV0JiYoZXQ9WWUrIl8iKyArK2t0KTtOZVtUbl09ZXR9cmV0dXJuIEt0PWN0LnMucitQZSxnZS5fcmVhZD1mdW5jdGlvbigpe2lmKEt0PmN0LmUucilyZXR1cm4gZ2UucHVzaChudWxsKTtmb3IoO0t0PD1jdC5lLnI7KXt2YXIgU249aU0oUSxjdCxLdCxqdCx5ZSxOZSxPdCxFdCk7aWYo''@;'; put 'put ''KytLdCwhMT09PVNuLmlzZW1wdHl8fCgxPT09eWU/ITEhPT1FdC5ibGFua3Jvd3M6RXQuYmxhbmtyb3dzKSl7Z2UucHVzaChTbi5yb3cpO2JyZWFrfX19LGdlfSx0b19odG1sOmZ1bmN0aW9uKFEsb2Upe3ZhciBnZT1TKCkscGU9b2V8fHt9LFBlPW51bGwhPXBlLmZvb3Rlcj9wZS5mb290ZXI6''@;'; put 'put ''bWQuRU5EO2dlLnB1c2gobnVsbCE9cGUuaGVhZGVyP3BlLmhlYWRlcjptZC5CRUdJTik7dmFyIE5lPU1zKFFbIiFyZWYiXSk7cGUuZGVuc2U9QXJyYXkuaXNBcnJheShRKSxnZS5wdXNoKG1kLl9wcmVhbWJsZShRLE5lLHBlKSk7dmFyIFllPU5lLnMucixldD0hMSxjdD1bXTtyZXR1cm4gZ2Uu''@;'; put 'put ''X3JlYWQ9ZnVuY3Rpb24oKXtpZihZZT5OZS5lLnIpcmV0dXJuIGV0fHwoZXQ9ITAsZ2UucHVzaCgiPC90YWJsZT4iK1BlKSksZ2UucHVzaChudWxsKTtmb3IoO1llPD1OZS5lLnI7KXtnZS5wdXNoKG1kLl9yb3coUSxOZSxZZSxwZSxjdCwiIikpLCsrWWU7YnJlYWt9fSxnZX0sdG9fY3N2OmZ1''@;'; put 'put ''bmN0aW9uKFEsb2Upe3ZhciBnZT1TKCkscGU9b2U/P3t9O2lmKG51bGw9PVF8fG51bGw9PVFbIiFyZWYiXSlyZXR1cm4gZ2UucHVzaChudWxsKSxnZTt2YXIgeWU9b28oUVsiIXJlZiJdKSxQZT12b2lkIDAhPT1wZS5GUz9wZS5GUzoiLCIsTmU9UGUuY2hhckNvZGVBdCgwKSxZZT12b2lkIDAh''@;'; put 'put ''PT1wZS5SUz9wZS5SUzoiXG4iLGV0PVllLmNoYXJDb2RlQXQoMCksY3Q9bmV3IFJlZ0V4cCgoInwiPT1QZT8iXFx8IjpQZSkrIiskIiksRXQ9IiIsYXQ9W107cGUuZGVuc2U9QXJyYXkuaXNBcnJheShRKTtmb3IodmFyIGJ0PXBlLnNraXBIaWRkZW4mJlFbIiFjb2xzIl18fFtdLGp0PXBlLnNr''@;'; put 'put ''aXBIaWRkZW4mJlFbIiFyb3dzIl18fFtdLGt0PXllLnMuYztrdDw9eWUuZS5jOysra3QpKGJ0W2t0XXx8e30pLmhpZGRlbnx8KGF0W2t0XT1UYShrdCkpO3ZhciBPdD15ZS5zLnIsS3Q9ITE7cmV0dXJuIGdlLl9yZWFkPWZ1bmN0aW9uKCl7aWYoIUt0KXJldHVybiBLdD0hMCxnZS5wdXNoKCJc''@;'; put 'put ''dWZlZmYiKTtmb3IoO090PD15ZS5lLnI7KWlmKCsrT3QsIShqdFtPdC0xXXx8e30pLmhpZGRlbiYmbnVsbCE9KEV0PUJJKFEseWUsT3QtMSxhdCxOZSxldCxQZSxwZSkpKXtwZS5zdHJpcCYmKEV0PUV0LnJlcGxhY2UoY3QsIiIpKSxnZS5wdXNoKEV0K1llKTticmVha31yZXR1cm4gT3Q+eWUu''@;'; put 'put ''ZS5yP2dlLnB1c2gobnVsbCk6dm9pZCAwfSxnZX19fSgpLHcucGFyc2VfeGxzY2ZiPSRTLHcucGFyc2VfemlwPXJwLHcucmVhZD0kNSx3LnJlYWRGaWxlPWtjLHcucmVhZEZpbGVTeW5jPWtjLHcud3JpdGU9Tjgsdy53cml0ZUZpbGU9Vjgsdy53cml0ZUZpbGVTeW5jPVY4LHcud3JpdGVGaWxl''@;'; put 'put ''QXN5bmM9ZnVuY3Rpb24gck0oUyxSLGssRyl7dmFyIFE9a3x8e307US50eXBlPSJmaWxlIixRLmZpbGU9UyxuTShRKSxRLnR5cGU9ImJ1ZmZlciI7dmFyIG9lPUc7cmV0dXJuIG9lIGluc3RhbmNlb2YgRnVuY3Rpb258fChvZT1rKSxYZS53cml0ZUZpbGUoUyxOOChSLFEpLG9lKX0sdy5zZXRf''@;'; put 'put ''ZGF0ZV9zdHlsZT1mdW5jdGlvbiBEdChTKXtzd2l0Y2goUyl7Y2FzZSAwOnl0KCk7YnJlYWs7Y2FzZSAxOiFmdW5jdGlvbiBNdCgpe3ZhciBTPW5ldyBEYXRlO250PV90LmdldFRpbWUoKSs2ZTQqKFMuZ2V0VGltZXpvbmVPZmZzZXQoKS1fdC5nZXRUaW1lem9uZU9mZnNldCgpKTt2YXIgUj1T''@;'; put 'put ''LmdldFRpbWV6b25lT2Zmc2V0KCk7UWU9ZnVuY3Rpb24oRyxRKXt2YXIgb2U9Ry5nZXRUaW1lKCk7cmV0dXJuIFEmJihvZS09MTI2MzE2OGU1KSwob2UtKF90LmdldFRpbWUoKSs2ZTQqKEcuZ2V0VGltZXpvbmVPZmZzZXQoKS1fdC5nZXRUaW1lem9uZU9mZnNldCgpKSkpLzg2NGU1fSx1bj1m''@;'; put 'put ''dW5jdGlvbihHKXt2YXIgUT1uZXcgRGF0ZTtyZXR1cm4gUS5zZXRUaW1lKDI0KkcqNjAqNjAqMWUzK250KSxRLmdldFRpbWV6b25lT2Zmc2V0KCkhPT1SJiZRLnNldFRpbWUoUS5nZXRUaW1lKCkrNmU0KihRLmdldFRpbWV6b25lT2Zmc2V0KCktUikpLFF9fSgpfX0sdy51dGlscz16dSx3LlNT''@;'; put 'put ''Rj1BLHR5cGVvZiB2ZTwidSImJih3LkNGQj12ZSl9KFgpfSw0OTYwOToodWUsWCx5KT0+e3ZhciBJPVg7SS5iaWdudW09eSg5Njg2NyksSS5kZWZpbmU9eSgxNjYyNikuZGVmaW5lLEkuYmFzZT15KDE1MDY2KSxJLmNvbnN0YW50cz15KDQ3NzQwKSxJLmRlY29kZXJzPXkoOTE1NTgpLEkuZW5j''@;'; put 'put ''b2RlcnM9eSgyMjcxNCl9LDE2NjI2Oih1ZSxYLHkpPT57dmFyIEk9eSg0OTYwOSksXz15KDcxOTkzKTtmdW5jdGlvbiBCKHcsUCl7dGhpcy5uYW1lPXcsdGhpcy5ib2R5PVAsdGhpcy5kZWNvZGVycz17fSx0aGlzLmVuY29kZXJzPXt9fVguZGVmaW5lPWZ1bmN0aW9uKFAsRil7cmV0dXJuIG5l''@;'; put 'put ''dyBCKFAsRil9LEIucHJvdG90eXBlLl9jcmVhdGVOYW1lZD1mdW5jdGlvbihQKXt2YXIgRjt0cnl7Rj15KDg2NjEpLnJ1bkluVGhpc0NvbnRleHQoIihmdW5jdGlvbiAiK3RoaXMubmFtZSsiKGVudGl0eSkge1xuICB0aGlzLl9pbml0TmFtZWQoZW50aXR5KTtcbn0pIil9Y2F0Y2h7Rj1mdW5j''@;'; put 'put ''dGlvbih6KXt0aGlzLl9pbml0TmFtZWQoeil9fXJldHVybiBfKEYsUCksRi5wcm90b3R5cGUuX2luaXROYW1lZD1mdW5jdGlvbih6KXtQLmNhbGwodGhpcyx6KX0sbmV3IEYodGhpcyl9LEIucHJvdG90eXBlLl9nZXREZWNvZGVyPWZ1bmN0aW9uKFApe3JldHVybiB0aGlzLmRlY29kZXJzLmhh''@;'; put 'put ''c093blByb3BlcnR5KFA9UHx8ImRlciIpfHwodGhpcy5kZWNvZGVyc1tQXT10aGlzLl9jcmVhdGVOYW1lZChJLmRlY29kZXJzW1BdKSksdGhpcy5kZWNvZGVyc1tQXX0sQi5wcm90b3R5cGUuZGVjb2RlPWZ1bmN0aW9uKFAsRixPKXtyZXR1cm4gdGhpcy5fZ2V0RGVjb2RlcihGKS5kZWNvZGUo''@;'; put 'put ''UCxPKX0sQi5wcm90b3R5cGUuX2dldEVuY29kZXI9ZnVuY3Rpb24oUCl7cmV0dXJuIHRoaXMuZW5jb2RlcnMuaGFzT3duUHJvcGVydHkoUD1QfHwiZGVyIil8fCh0aGlzLmVuY29kZXJzW1BdPXRoaXMuX2NyZWF0ZU5hbWVkKEkuZW5jb2RlcnNbUF0pKSx0aGlzLmVuY29kZXJzW1BdfSxCLnBy''@;'; put 'put ''b3RvdHlwZS5lbmNvZGU9ZnVuY3Rpb24oUCxGLE8pe3JldHVybiB0aGlzLl9nZXRFbmNvZGVyKEYpLmVuY29kZShQLE8pfX0sOTcyOTA6KHVlLFgseSk9Pnt2YXIgST15KDcxOTkzKSxfPXkoMTUwNjYpLlJlcG9ydGVyLGc9eSg4MzgzOCkuQnVmZmVyO2Z1bmN0aW9uIEIoUCxGKXtfLmNhbGwo''@;'; put 'put ''dGhpcyxGKSxnLmlzQnVmZmVyKFApPyh0aGlzLmJhc2U9UCx0aGlzLm9mZnNldD0wLHRoaXMubGVuZ3RoPVAubGVuZ3RoKTp0aGlzLmVycm9yKCJJbnB1dCBub3QgQnVmZmVyIil9ZnVuY3Rpb24gdyhQLEYpe2lmKEFycmF5LmlzQXJyYXkoUCkpdGhpcy5sZW5ndGg9MCx0aGlzLnZhbHVlPVAu''@;'; put 'put ''bWFwKGZ1bmN0aW9uKE8pe3JldHVybiBPIGluc3RhbmNlb2Ygd3x8KE89bmV3IHcoTyxGKSksdGhpcy5sZW5ndGgrPU8ubGVuZ3RoLE99LHRoaXMpO2Vsc2UgaWYoIm51bWJlciI9PXR5cGVvZiBQKXtpZighKDA8PVAmJlA8PTI1NSkpcmV0dXJuIEYuZXJyb3IoIm5vbi1ieXRlIEVuY29kZXJC''@;'; put 'put ''dWZmZXIgdmFsdWUiKTt0aGlzLnZhbHVlPVAsdGhpcy5sZW5ndGg9MX1lbHNlIGlmKCJzdHJpbmciPT10eXBlb2YgUCl0aGlzLnZhbHVlPVAsdGhpcy5sZW5ndGg9Zy5ieXRlTGVuZ3RoKFApO2Vsc2V7aWYoIWcuaXNCdWZmZXIoUCkpcmV0dXJuIEYuZXJyb3IoIlVuc3VwcG9ydGVkIHR5cGU6''@;'; put 'put ''ICIrdHlwZW9mIFApO3RoaXMudmFsdWU9UCx0aGlzLmxlbmd0aD1QLmxlbmd0aH19SShCLF8pLFgudD1CLEIucHJvdG90eXBlLnNhdmU9ZnVuY3Rpb24oKXtyZXR1cm57b2Zmc2V0OnRoaXMub2Zmc2V0LHJlcG9ydGVyOl8ucHJvdG90eXBlLnNhdmUuY2FsbCh0aGlzKX19LEIucHJvdG90eXBl''@;'; put 'put ''LnJlc3RvcmU9ZnVuY3Rpb24oRil7dmFyIE89bmV3IEIodGhpcy5iYXNlKTtyZXR1cm4gTy5vZmZzZXQ9Ri5vZmZzZXQsTy5sZW5ndGg9dGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQ9Ri5vZmZzZXQsXy5wcm90b3R5cGUucmVzdG9yZS5jYWxsKHRoaXMsRi5yZXBvcnRlciksT30sQi5wcm90b3R5''@;'; put 'put ''cGUuaXNFbXB0eT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm9mZnNldD09PXRoaXMubGVuZ3RofSxCLnByb3RvdHlwZS5yZWFkVUludDg9ZnVuY3Rpb24oRil7cmV0dXJuIHRoaXMub2Zmc2V0KzE8PXRoaXMubGVuZ3RoP3RoaXMuYmFzZS5yZWFkVUludDgodGhpcy5vZmZzZXQrKywhMCk6dGhp''@;'; put 'put ''cy5lcnJvcihGfHwiRGVjb2RlckJ1ZmZlciBvdmVycnVuIil9LEIucHJvdG90eXBlLnNraXA9ZnVuY3Rpb24oRixPKXtpZighKHRoaXMub2Zmc2V0K0Y8PXRoaXMubGVuZ3RoKSlyZXR1cm4gdGhpcy5lcnJvcihPfHwiRGVjb2RlckJ1ZmZlciBvdmVycnVuIik7dmFyIHo9bmV3IEIodGhpcy5i''@;'; put 'put ''YXNlKTtyZXR1cm4gei5fcmVwb3J0ZXJTdGF0ZT10aGlzLl9yZXBvcnRlclN0YXRlLHoub2Zmc2V0PXRoaXMub2Zmc2V0LHoubGVuZ3RoPXRoaXMub2Zmc2V0K0YsdGhpcy5vZmZzZXQrPUYsen0sQi5wcm90b3R5cGUucmF3PWZ1bmN0aW9uKEYpe3JldHVybiB0aGlzLmJhc2Uuc2xpY2UoRj9G''@;'; put 'put ''Lm9mZnNldDp0aGlzLm9mZnNldCx0aGlzLmxlbmd0aCl9LFguZD13LHcucHJvdG90eXBlLmpvaW49ZnVuY3Rpb24oRixPKXtyZXR1cm4gRnx8KEY9bmV3IGcodGhpcy5sZW5ndGgpKSxPfHwoTz0wKSwwPT09dGhpcy5sZW5ndGh8fChBcnJheS5pc0FycmF5KHRoaXMudmFsdWUpP3RoaXMudmFs''@;'; put 'put ''dWUuZm9yRWFjaChmdW5jdGlvbih6KXt6LmpvaW4oRixPKSxPKz16Lmxlbmd0aH0pOigibnVtYmVyIj09dHlwZW9mIHRoaXMudmFsdWU/RltPXT10aGlzLnZhbHVlOiJzdHJpbmciPT10eXBlb2YgdGhpcy52YWx1ZT9GLndyaXRlKHRoaXMudmFsdWUsTyk6Zy5pc0J1ZmZlcih0aGlzLnZhbHVl''@;'; put 'put ''KSYmdGhpcy52YWx1ZS5jb3B5KEYsTyksTys9dGhpcy5sZW5ndGgpKSxGfX0sMTUwNjY6KHVlLFgseSk9Pnt2YXIgST1YO0kuUmVwb3J0ZXI9eSg4NTY5NykuYSxJLkRlY29kZXJCdWZmZXI9eSg5NzI5MCkudCxJLkVuY29kZXJCdWZmZXI9eSg5NzI5MCkuZCxJLk5vZGU9eSgzNDMyMCl9LDM0''@;'; put 'put ''MzIwOih1ZSxYLHkpPT57dmFyIEk9eSgxNTA2NikuUmVwb3J0ZXIsXz15KDE1MDY2KS5FbmNvZGVyQnVmZmVyLGc9eSgxNTA2NikuRGVjb2RlckJ1ZmZlcixCPXkoMzkyMTApLHc9WyJzZXEiLCJzZXFvZiIsInNldCIsInNldG9mIiwib2JqaWQiLCJib29sIiwiZ2VudGltZSIsInV0Y3RpbWUi''@;'; put 'put ''LCJudWxsXyIsImVudW0iLCJpbnQiLCJvYmpEZXNjIiwiYml0c3RyIiwiYm1wc3RyIiwiY2hhcnN0ciIsImdlbnN0ciIsImdyYXBoc3RyIiwiaWE1c3RyIiwiaXNvNjQ2c3RyIiwibnVtc3RyIiwib2N0c3RyIiwicHJpbnRzdHIiLCJ0NjFzdHIiLCJ1bmlzdHIiLCJ1dGY4c3RyIiwidmlkZW9z''@;'; put 'put ''dHIiXSxQPVsia2V5Iiwib2JqIiwidXNlIiwib3B0aW9uYWwiLCJleHBsaWNpdCIsImltcGxpY2l0IiwiZGVmIiwiY2hvaWNlIiwiYW55IiwiY29udGFpbnMiXS5jb25jYXQodyk7ZnVuY3Rpb24gTyhOLEwpe3ZhciBLPXt9O3RoaXMuX2Jhc2VTdGF0ZT1LLEsuZW5jPU4sSy5wYXJlbnQ9THx8''@;'; put 'put ''bnVsbCxLLmNoaWxkcmVuPW51bGwsSy50YWc9bnVsbCxLLmFyZ3M9bnVsbCxLLnJldmVyc2VBcmdzPW51bGwsSy5jaG9pY2U9bnVsbCxLLm9wdGlvbmFsPSExLEsuYW55PSExLEsub2JqPSExLEsudXNlPW51bGwsSy51c2VEZWNvZGVyPW51bGwsSy5rZXk9bnVsbCxLLmRlZmF1bHQ9bnVsbCxL''@;'; put 'put ''LmV4cGxpY2l0PW51bGwsSy5pbXBsaWNpdD1udWxsLEsuY29udGFpbnM9bnVsbCxLLnBhcmVudHx8KEsuY2hpbGRyZW49W10sdGhpcy5fd3JhcCgpKX11ZS5leHBvcnRzPU87dmFyIHo9WyJlbmMiLCJwYXJlbnQiLCJjaGlsZHJlbiIsInRhZyIsImFyZ3MiLCJyZXZlcnNlQXJncyIsImNob2lj''@;'; put 'put ''ZSIsIm9wdGlvbmFsIiwiYW55Iiwib2JqIiwidXNlIiwiYWx0ZXJlZFVzZSIsImtleSIsImRlZmF1bHQiLCJleHBsaWNpdCIsImltcGxpY2l0IiwiY29udGFpbnMiXTtPLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciBMPXRoaXMuX2Jhc2VTdGF0ZSxLPXt9O3ouZm9yRWFjaChmdW5j''@;'; put 'put ''dGlvbihXKXtLW1ddPUxbV119KTt2YXIgVT1uZXcgdGhpcy5jb25zdHJ1Y3RvcihLLnBhcmVudCk7cmV0dXJuIFUuX2Jhc2VTdGF0ZT1LLFV9LE8ucHJvdG90eXBlLl93cmFwPWZ1bmN0aW9uKCl7dmFyIEw9dGhpcy5fYmFzZVN0YXRlO1AuZm9yRWFjaChmdW5jdGlvbihLKXt0aGlzW0tdPWZ1''@;'; put 'put ''bmN0aW9uKCl7dmFyIFc9bmV3IHRoaXMuY29uc3RydWN0b3IodGhpcyk7cmV0dXJuIEwuY2hpbGRyZW4ucHVzaChXKSxXW0tdLmFwcGx5KFcsYXJndW1lbnRzKX19LHRoaXMpfSxPLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbihMKXt2YXIgSz10aGlzLl9iYXNlU3RhdGU7QihudWxsPT09Sy5w''@;'; put 'put ''YXJlbnQpLEwuY2FsbCh0aGlzKSxLLmNoaWxkcmVuPUsuY2hpbGRyZW4uZmlsdGVyKGZ1bmN0aW9uKFUpe3JldHVybiBVLl9iYXNlU3RhdGUucGFyZW50PT09dGhpc30sdGhpcyksQi5lcXVhbChLLmNoaWxkcmVuLmxlbmd0aCwxLCJSb290IG5vZGUgY2FuIGhhdmUgb25seSBvbmUgY2hpbGQi''@;'; put 'put ''KX0sTy5wcm90b3R5cGUuX3VzZUFyZ3M9ZnVuY3Rpb24oTCl7dmFyIEs9dGhpcy5fYmFzZVN0YXRlLFU9TC5maWx0ZXIoZnVuY3Rpb24oVyl7cmV0dXJuIFcgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yfSx0aGlzKTtMPUwuZmlsdGVyKGZ1bmN0aW9uKFcpe3JldHVybiEoVyBpbnN0YW5j''@;'; put 'put ''ZW9mIHRoaXMuY29uc3RydWN0b3IpfSx0aGlzKSwwIT09VS5sZW5ndGgmJihCKG51bGw9PT1LLmNoaWxkcmVuKSxLLmNoaWxkcmVuPVUsVS5mb3JFYWNoKGZ1bmN0aW9uKFcpe1cuX2Jhc2VTdGF0ZS5wYXJlbnQ9dGhpc30sdGhpcykpLDAhPT1MLmxlbmd0aCYmKEIobnVsbD09PUsuYXJncyks''@;'; put 'put ''Sy5hcmdzPUwsSy5yZXZlcnNlQXJncz1MLm1hcChmdW5jdGlvbihXKXtpZigib2JqZWN0IiE9dHlwZW9mIFd8fFcuY29uc3RydWN0b3IhPT1PYmplY3QpcmV0dXJuIFc7dmFyIFk9e307cmV0dXJuIE9iamVjdC5rZXlzKFcpLmZvckVhY2goZnVuY3Rpb24ocSl7cT09KDB8cSkmJihxfD0wKSxZ''@;'; put 'put ''W1dbcV1dPXF9KSxZfSkpfSxbIl9wZWVrVGFnIiwiX2RlY29kZVRhZyIsIl91c2UiLCJfZGVjb2RlU3RyIiwiX2RlY29kZU9iamlkIiwiX2RlY29kZVRpbWUiLCJfZGVjb2RlTnVsbCIsIl9kZWNvZGVJbnQiLCJfZGVjb2RlQm9vbCIsIl9kZWNvZGVMaXN0IiwiX2VuY29kZUNvbXBvc2l0ZSIs''@;'; put 'put ''Il9lbmNvZGVTdHIiLCJfZW5jb2RlT2JqaWQiLCJfZW5jb2RlVGltZSIsIl9lbmNvZGVOdWxsIiwiX2VuY29kZUludCIsIl9lbmNvZGVCb29sIl0uZm9yRWFjaChmdW5jdGlvbihOKXtPLnByb3RvdHlwZVtOXT1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihOKyIgbm90IGltcGxlbWVudGVk''@;'; put 'put ''IGZvciBlbmNvZGluZzogIit0aGlzLl9iYXNlU3RhdGUuZW5jKX19KSx3LmZvckVhY2goZnVuY3Rpb24oTil7Ty5wcm90b3R5cGVbTl09ZnVuY3Rpb24oKXt2YXIgSz10aGlzLl9iYXNlU3RhdGUsVT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3JldHVybiBCKG51bGw9''@;'; put 'put ''PT1LLnRhZyksSy50YWc9Tix0aGlzLl91c2VBcmdzKFUpLHRoaXN9fSksTy5wcm90b3R5cGUudXNlPWZ1bmN0aW9uKEwpe0IoTCk7dmFyIEs9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBCKG51bGw9PT1LLnVzZSksSy51c2U9TCx0aGlzfSxPLnByb3RvdHlwZS5vcHRpb25hbD1mdW5jdGlvbigp''@;'; put 'put ''e3JldHVybiB0aGlzLl9iYXNlU3RhdGUub3B0aW9uYWw9ITAsdGhpc30sTy5wcm90b3R5cGUuZGVmPWZ1bmN0aW9uKEwpe3ZhciBLPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gQihudWxsPT09Sy5kZWZhdWx0KSxLLmRlZmF1bHQ9TCxLLm9wdGlvbmFsPSEwLHRoaXN9LE8ucHJvdG90eXBlLmV4''@;'; put 'put ''cGxpY2l0PWZ1bmN0aW9uKEwpe3ZhciBLPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gQihudWxsPT09Sy5leHBsaWNpdCYmbnVsbD09PUsuaW1wbGljaXQpLEsuZXhwbGljaXQ9TCx0aGlzfSxPLnByb3RvdHlwZS5pbXBsaWNpdD1mdW5jdGlvbihMKXt2YXIgSz10aGlzLl9iYXNlU3RhdGU7cmV0''@;'; put 'put ''dXJuIEIobnVsbD09PUsuZXhwbGljaXQmJm51bGw9PT1LLmltcGxpY2l0KSxLLmltcGxpY2l0PUwsdGhpc30sTy5wcm90b3R5cGUub2JqPWZ1bmN0aW9uKCl7dmFyIEw9dGhpcy5fYmFzZVN0YXRlLEs9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtyZXR1cm4gTC5vYmo9''@;'; put 'put ''ITAsMCE9PUsubGVuZ3RoJiZ0aGlzLl91c2VBcmdzKEspLHRoaXN9LE8ucHJvdG90eXBlLmtleT1mdW5jdGlvbihMKXt2YXIgSz10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIEIobnVsbD09PUsua2V5KSxLLmtleT1MLHRoaXN9LE8ucHJvdG90eXBlLmFueT1mdW5jdGlvbigpe3JldHVybiB0aGlz''@;'; put 'put ''Ll9iYXNlU3RhdGUuYW55PSEwLHRoaXN9LE8ucHJvdG90eXBlLmNob2ljZT1mdW5jdGlvbihMKXt2YXIgSz10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIEIobnVsbD09PUsuY2hvaWNlKSxLLmNob2ljZT1MLHRoaXMuX3VzZUFyZ3MoT2JqZWN0LmtleXMoTCkubWFwKGZ1bmN0aW9uKFUpe3JldHVy''@;'; put 'put ''biBMW1VdfSkpLHRoaXN9LE8ucHJvdG90eXBlLmNvbnRhaW5zPWZ1bmN0aW9uKEwpe3ZhciBLPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gQihudWxsPT09Sy51c2UpLEsuY29udGFpbnM9TCx0aGlzfSxPLnByb3RvdHlwZS5fZGVjb2RlPWZ1bmN0aW9uKEwsSyl7dmFyIFU9dGhpcy5fYmFzZVN0''@;'; put 'put ''YXRlO2lmKG51bGw9PT1VLnBhcmVudClyZXR1cm4gTC53cmFwUmVzdWx0KFUuY2hpbGRyZW5bMF0uX2RlY29kZShMLEspKTt2YXIgbmUsVz1VLmRlZmF1bHQsWT0hMCxxPW51bGw7aWYobnVsbCE9PVUua2V5JiYocT1MLmVudGVyS2V5KFUua2V5KSksVS5vcHRpb25hbCl7dmFyIGVlPW51bGw7''@;'; put 'put ''aWYobnVsbCE9PVUuZXhwbGljaXQ/ZWU9VS5leHBsaWNpdDpudWxsIT09VS5pbXBsaWNpdD9lZT1VLmltcGxpY2l0Om51bGwhPT1VLnRhZyYmKGVlPVUudGFnKSxudWxsIT09ZWV8fFUuYW55KXtpZihZPXRoaXMuX3BlZWtUYWcoTCxlZSxVLmFueSksTC5pc0Vycm9yKFkpKXJldHVybiBZfWVs''@;'; put 'put ''c2V7dmFyIEo9TC5zYXZlKCk7dHJ5e251bGw9PT1VLmNob2ljZT90aGlzLl9kZWNvZGVHZW5lcmljKFUudGFnLEwsSyk6dGhpcy5fZGVjb2RlQ2hvaWNlKEwsSyksWT0hMH1jYXRjaHtZPSExfUwucmVzdG9yZShKKX19aWYoVS5vYmomJlkmJihuZT1MLmVudGVyT2JqZWN0KCkpLFkpe2lmKG51''@;'; put 'put ''bGwhPT1VLmV4cGxpY2l0KXt2YXIgaWU9dGhpcy5fZGVjb2RlVGFnKEwsVS5leHBsaWNpdCk7aWYoTC5pc0Vycm9yKGllKSlyZXR1cm4gaWU7TD1pZX12YXIgbGU9TC5vZmZzZXQ7aWYobnVsbD09PVUudXNlJiZudWxsPT09VS5jaG9pY2Upe1UuYW55JiYoSj1MLnNhdmUoKSk7dmFyIG1lPXRo''@;'; put 'put ''aXMuX2RlY29kZVRhZyhMLG51bGwhPT1VLmltcGxpY2l0P1UuaW1wbGljaXQ6VS50YWcsVS5hbnkpO2lmKEwuaXNFcnJvcihtZSkpcmV0dXJuIG1lO1UuYW55P1c9TC5yYXcoSik6TD1tZX1pZihLJiZLLnRyYWNrJiZudWxsIT09VS50YWcmJksudHJhY2soTC5wYXRoKCksbGUsTC5sZW5ndGgs''@;'; put 'put ''InRhZ2dlZCIpLEsmJksudHJhY2smJm51bGwhPT1VLnRhZyYmSy50cmFjayhMLnBhdGgoKSxMLm9mZnNldCxMLmxlbmd0aCwiY29udGVudCIpLFUuYW55fHwoVz1udWxsPT09VS5jaG9pY2U/dGhpcy5fZGVjb2RlR2VuZXJpYyhVLnRhZyxMLEspOnRoaXMuX2RlY29kZUNob2ljZShMLEspKSxM''@;'; put 'put ''LmlzRXJyb3IoVykpcmV0dXJuIFc7aWYoIVUuYW55JiZudWxsPT09VS5jaG9pY2UmJm51bGwhPT1VLmNoaWxkcmVuJiZVLmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24oU2Upe1NlLl9kZWNvZGUoTCxLKX0pLFUuY29udGFpbnMmJigib2N0c3RyIj09PVUudGFnfHwiYml0c3RyIj09PVUudGFn''@;'; put 'put ''KSl7dmFyIF9lPW5ldyBnKFcpO1c9dGhpcy5fZ2V0VXNlKFUuY29udGFpbnMsTC5fcmVwb3J0ZXJTdGF0ZS5vYmopLl9kZWNvZGUoX2UsSyl9fXJldHVybiBVLm9iaiYmWSYmKFc9TC5sZWF2ZU9iamVjdChuZSkpLG51bGw9PT1VLmtleXx8bnVsbD09PVcmJiEwIT09WT9udWxsIT09cSYmTC5l''@;'; put 'put ''eGl0S2V5KHEpOkwubGVhdmVLZXkocSxVLmtleSxXKSxXfSxPLnByb3RvdHlwZS5fZGVjb2RlR2VuZXJpYz1mdW5jdGlvbihMLEssVSl7dmFyIFc9dGhpcy5fYmFzZVN0YXRlO3JldHVybiJzZXEiPT09THx8InNldCI9PT1MP251bGw6InNlcW9mIj09PUx8fCJzZXRvZiI9PT1MP3RoaXMuX2Rl''@;'; put 'put ''Y29kZUxpc3QoSyxMLFcuYXJnc1swXSxVKTovc3RyJC8udGVzdChMKT90aGlzLl9kZWNvZGVTdHIoSyxMLFUpOiJvYmppZCI9PT1MJiZXLmFyZ3M/dGhpcy5fZGVjb2RlT2JqaWQoSyxXLmFyZ3NbMF0sVy5hcmdzWzFdLFUpOiJvYmppZCI9PT1MP3RoaXMuX2RlY29kZU9iamlkKEssbnVsbCxu''@;'; put 'put ''dWxsLFUpOiJnZW50aW1lIj09PUx8fCJ1dGN0aW1lIj09PUw/dGhpcy5fZGVjb2RlVGltZShLLEwsVSk6Im51bGxfIj09PUw/dGhpcy5fZGVjb2RlTnVsbChLLFUpOiJib29sIj09PUw/dGhpcy5fZGVjb2RlQm9vbChLLFUpOiJvYmpEZXNjIj09PUw/dGhpcy5fZGVjb2RlU3RyKEssTCxVKToi''@;'; put 'put ''aW50Ij09PUx8fCJlbnVtIj09PUw/dGhpcy5fZGVjb2RlSW50KEssVy5hcmdzJiZXLmFyZ3NbMF0sVSk6bnVsbCE9PVcudXNlP3RoaXMuX2dldFVzZShXLnVzZSxLLl9yZXBvcnRlclN0YXRlLm9iaikuX2RlY29kZShLLFUpOksuZXJyb3IoInVua25vd24gdGFnOiAiK0wpfSxPLnByb3RvdHlw''@;'; put 'put ''ZS5fZ2V0VXNlPWZ1bmN0aW9uKEwsSyl7dmFyIFU9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBVLnVzZURlY29kZXI9dGhpcy5fdXNlKEwsSyksQihudWxsPT09VS51c2VEZWNvZGVyLl9iYXNlU3RhdGUucGFyZW50KSxVLnVzZURlY29kZXI9VS51c2VEZWNvZGVyLl9iYXNlU3RhdGUuY2hpbGRy''@;'; put 'put ''ZW5bMF0sVS5pbXBsaWNpdCE9PVUudXNlRGVjb2Rlci5fYmFzZVN0YXRlLmltcGxpY2l0JiYoVS51c2VEZWNvZGVyPVUudXNlRGVjb2Rlci5jbG9uZSgpLFUudXNlRGVjb2Rlci5fYmFzZVN0YXRlLmltcGxpY2l0PVUuaW1wbGljaXQpLFUudXNlRGVjb2Rlcn0sTy5wcm90b3R5cGUuX2RlY29k''@;'; put 'put ''ZUNob2ljZT1mdW5jdGlvbihMLEspe3ZhciBVPXRoaXMuX2Jhc2VTdGF0ZSxXPW51bGwsWT0hMTtyZXR1cm4gT2JqZWN0LmtleXMoVS5jaG9pY2UpLnNvbWUoZnVuY3Rpb24ocSl7dmFyIGVlPUwuc2F2ZSgpLEo9VS5jaG9pY2VbcV07dHJ5e3ZhciBuZT1KLl9kZWNvZGUoTCxLKTtpZihMLmlz''@;'; put 'put ''RXJyb3IobmUpKXJldHVybiExO1c9e3R5cGU6cSx2YWx1ZTpuZX0sWT0hMH1jYXRjaHtyZXR1cm4gTC5yZXN0b3JlKGVlKSwhMX1yZXR1cm4hMH0sdGhpcyksWT9XOkwuZXJyb3IoIkNob2ljZSBub3QgbWF0Y2hlZCIpfSxPLnByb3RvdHlwZS5fY3JlYXRlRW5jb2RlckJ1ZmZlcj1mdW5jdGlv''@;'; put 'put ''bihMKXtyZXR1cm4gbmV3IF8oTCx0aGlzLnJlcG9ydGVyKX0sTy5wcm90b3R5cGUuX2VuY29kZT1mdW5jdGlvbihMLEssVSl7dmFyIFc9dGhpcy5fYmFzZVN0YXRlO2lmKG51bGw9PT1XLmRlZmF1bHR8fFcuZGVmYXVsdCE9PUwpe3ZhciBZPXRoaXMuX2VuY29kZVZhbHVlKEwsSyxVKTtpZih2''@;'; put 'put ''b2lkIDAhPT1ZJiYhdGhpcy5fc2tpcERlZmF1bHQoWSxLLFUpKXJldHVybiBZfX0sTy5wcm90b3R5cGUuX2VuY29kZVZhbHVlPWZ1bmN0aW9uKEwsSyxVKXt2YXIgVz10aGlzLl9iYXNlU3RhdGU7aWYobnVsbD09PVcucGFyZW50KXJldHVybiBXLmNoaWxkcmVuWzBdLl9lbmNvZGUoTCxLfHxu''@;'; put 'put ''ZXcgSSk7dmFyIEo9bnVsbDtpZih0aGlzLnJlcG9ydGVyPUssVy5vcHRpb25hbCYmdm9pZCAwPT09TCl7aWYobnVsbD09PVcuZGVmYXVsdClyZXR1cm47TD1XLmRlZmF1bHR9dmFyIFk9bnVsbCxxPSExO2lmKFcuYW55KUo9dGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihMKTtlbHNlIGlmKFcu''@;'; put 'put ''Y2hvaWNlKUo9dGhpcy5fZW5jb2RlQ2hvaWNlKEwsSyk7ZWxzZSBpZihXLmNvbnRhaW5zKVk9dGhpcy5fZ2V0VXNlKFcuY29udGFpbnMsVSkuX2VuY29kZShMLEspLHE9ITA7ZWxzZSBpZihXLmNoaWxkcmVuKVk9Vy5jaGlsZHJlbi5tYXAoZnVuY3Rpb24obGUpe2lmKCJudWxsXyI9PT1sZS5f''@;'; put 'put ''YmFzZVN0YXRlLnRhZylyZXR1cm4gbGUuX2VuY29kZShudWxsLEssTCk7aWYobnVsbD09PWxlLl9iYXNlU3RhdGUua2V5KXJldHVybiBLLmVycm9yKCJDaGlsZCBzaG91bGQgaGF2ZSBhIGtleSIpO3ZhciBtZT1LLmVudGVyS2V5KGxlLl9iYXNlU3RhdGUua2V5KTtpZigib2JqZWN0IiE9dHlw''@;'; put 'put ''ZW9mIEwpcmV0dXJuIEsuZXJyb3IoIkNoaWxkIGV4cGVjdGVkLCBidXQgaW5wdXQgaXMgbm90IG9iamVjdCIpO3ZhciBfZT1sZS5fZW5jb2RlKExbbGUuX2Jhc2VTdGF0ZS5rZXldLEssTCk7cmV0dXJuIEsubGVhdmVLZXkobWUpLF9lfSx0aGlzKS5maWx0ZXIoZnVuY3Rpb24obGUpe3JldHVy''@;'; put 'put ''biBsZX0pLFk9dGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihZKTtlbHNlIGlmKCJzZXFvZiI9PT1XLnRhZ3x8InNldG9mIj09PVcudGFnKXtpZighVy5hcmdzfHwxIT09Vy5hcmdzLmxlbmd0aClyZXR1cm4gSy5lcnJvcigiVG9vIG1hbnkgYXJncyBmb3IgOiAiK1cudGFnKTtpZighQXJyYXku''@;'; put 'put ''aXNBcnJheShMKSlyZXR1cm4gSy5lcnJvcigic2Vxb2Yvc2V0b2YsIGJ1dCBkYXRhIGlzIG5vdCBBcnJheSIpO3ZhciBlZT10aGlzLmNsb25lKCk7ZWUuX2Jhc2VTdGF0ZS5pbXBsaWNpdD1udWxsLFk9dGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihMLm1hcChmdW5jdGlvbihsZSl7cmV0dXJu''@;'; put 'put ''IHRoaXMuX2dldFVzZSh0aGlzLl9iYXNlU3RhdGUuYXJnc1swXSxMKS5fZW5jb2RlKGxlLEspfSxlZSkpfWVsc2UgbnVsbCE9PVcudXNlP0o9dGhpcy5fZ2V0VXNlKFcudXNlLFUpLl9lbmNvZGUoTCxLKTooWT10aGlzLl9lbmNvZGVQcmltaXRpdmUoVy50YWcsTCkscT0hMCk7aWYoIVcuYW55''@;'; put 'put ''JiZudWxsPT09Vy5jaG9pY2Upe3ZhciBuZT1udWxsIT09Vy5pbXBsaWNpdD9XLmltcGxpY2l0OlcudGFnLGllPW51bGw9PT1XLmltcGxpY2l0PyJ1bml2ZXJzYWwiOiJjb250ZXh0IjtudWxsPT09bmU/bnVsbD09PVcudXNlJiZLLmVycm9yKCJUYWcgY291bGQgYmUgb21pdHRlZCBvbmx5IGZv''@;'; put 'put ''ciAudXNlKCkiKTpudWxsPT09Vy51c2UmJihKPXRoaXMuX2VuY29kZUNvbXBvc2l0ZShuZSxxLGllLFkpKX1yZXR1cm4gbnVsbCE9PVcuZXhwbGljaXQmJihKPXRoaXMuX2VuY29kZUNvbXBvc2l0ZShXLmV4cGxpY2l0LCExLCJjb250ZXh0IixKKSksSn0sTy5wcm90b3R5cGUuX2VuY29kZUNo''@;'; put 'put ''b2ljZT1mdW5jdGlvbihMLEspe3ZhciBVPXRoaXMuX2Jhc2VTdGF0ZSxXPVUuY2hvaWNlW0wudHlwZV07cmV0dXJuIFd8fEIoITEsTC50eXBlKyIgbm90IGZvdW5kIGluICIrSlNPTi5zdHJpbmdpZnkoT2JqZWN0LmtleXMoVS5jaG9pY2UpKSksVy5fZW5jb2RlKEwudmFsdWUsSyl9LE8ucHJv''@;'; put 'put ''dG90eXBlLl9lbmNvZGVQcmltaXRpdmU9ZnVuY3Rpb24oTCxLKXt2YXIgVT10aGlzLl9iYXNlU3RhdGU7aWYoL3N0ciQvLnRlc3QoTCkpcmV0dXJuIHRoaXMuX2VuY29kZVN0cihLLEwpO2lmKCJvYmppZCI9PT1MJiZVLmFyZ3MpcmV0dXJuIHRoaXMuX2VuY29kZU9iamlkKEssVS5yZXZlcnNl''@;'; put 'put ''QXJnc1swXSxVLmFyZ3NbMV0pO2lmKCJvYmppZCI9PT1MKXJldHVybiB0aGlzLl9lbmNvZGVPYmppZChLLG51bGwsbnVsbCk7aWYoImdlbnRpbWUiPT09THx8InV0Y3RpbWUiPT09TClyZXR1cm4gdGhpcy5fZW5jb2RlVGltZShLLEwpO2lmKCJudWxsXyI9PT1MKXJldHVybiB0aGlzLl9lbmNv''@;'; put 'put ''ZGVOdWxsKCk7aWYoImludCI9PT1MfHwiZW51bSI9PT1MKXJldHVybiB0aGlzLl9lbmNvZGVJbnQoSyxVLmFyZ3MmJlUucmV2ZXJzZUFyZ3NbMF0pO2lmKCJib29sIj09PUwpcmV0dXJuIHRoaXMuX2VuY29kZUJvb2woSyk7aWYoIm9iakRlc2MiPT09TClyZXR1cm4gdGhpcy5fZW5jb2RlU3Ry''@;'; put 'put ''KEssTCk7dGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCB0YWc6ICIrTCl9LE8ucHJvdG90eXBlLl9pc051bXN0cj1mdW5jdGlvbihMKXtyZXR1cm4vXlswLTkgXSokLy50ZXN0KEwpfSxPLnByb3RvdHlwZS5faXNQcmludHN0cj1mdW5jdGlvbihMKXtyZXR1cm4vXltBLVphLXowLTkgJ1wo''@;'; put 'put ''XClcKyxcLVwuXC86PVw/XSokLy50ZXN0KEwpfX0sODU2OTc6KHVlLFgseSk9Pnt2YXIgST15KDcxOTkzKTtmdW5jdGlvbiBfKEIpe3RoaXMuX3JlcG9ydGVyU3RhdGU9e29iajpudWxsLHBhdGg6W10sb3B0aW9uczpCfHx7fSxlcnJvcnM6W119fWZ1bmN0aW9uIGcoQix3KXt0aGlzLnBhdGg9''@;'; put 'put ''Qix0aGlzLnJldGhyb3codyl9WC5hPV8sXy5wcm90b3R5cGUuaXNFcnJvcj1mdW5jdGlvbih3KXtyZXR1cm4gdyBpbnN0YW5jZW9mIGd9LF8ucHJvdG90eXBlLnNhdmU9ZnVuY3Rpb24oKXt2YXIgdz10aGlzLl9yZXBvcnRlclN0YXRlO3JldHVybntvYmo6dy5vYmoscGF0aExlbjp3LnBhdGgu''@;'; put 'put ''bGVuZ3RofX0sXy5wcm90b3R5cGUucmVzdG9yZT1mdW5jdGlvbih3KXt2YXIgUD10aGlzLl9yZXBvcnRlclN0YXRlO1Aub2JqPXcub2JqLFAucGF0aD1QLnBhdGguc2xpY2UoMCx3LnBhdGhMZW4pfSxfLnByb3RvdHlwZS5lbnRlcktleT1mdW5jdGlvbih3KXtyZXR1cm4gdGhpcy5fcmVwb3J0''@;'; put 'put ''ZXJTdGF0ZS5wYXRoLnB1c2godyl9LF8ucHJvdG90eXBlLmV4aXRLZXk9ZnVuY3Rpb24odyl7dmFyIFA9dGhpcy5fcmVwb3J0ZXJTdGF0ZTtQLnBhdGg9UC5wYXRoLnNsaWNlKDAsdy0xKX0sXy5wcm90b3R5cGUubGVhdmVLZXk9ZnVuY3Rpb24odyxQLEYpe3ZhciBPPXRoaXMuX3JlcG9ydGVy''@;'; put 'put ''U3RhdGU7dGhpcy5leGl0S2V5KHcpLG51bGwhPT1PLm9iaiYmKE8ub2JqW1BdPUYpfSxfLnByb3RvdHlwZS5wYXRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlcG9ydGVyU3RhdGUucGF0aC5qb2luKCIvIil9LF8ucHJvdG90eXBlLmVudGVyT2JqZWN0PWZ1bmN0aW9uKCl7dmFyIHc9dGhp''@;'; put 'put ''cy5fcmVwb3J0ZXJTdGF0ZSxQPXcub2JqO3JldHVybiB3Lm9iaj17fSxQfSxfLnByb3RvdHlwZS5sZWF2ZU9iamVjdD1mdW5jdGlvbih3KXt2YXIgUD10aGlzLl9yZXBvcnRlclN0YXRlLEY9UC5vYmo7cmV0dXJuIFAub2JqPXcsRn0sXy5wcm90b3R5cGUuZXJyb3I9ZnVuY3Rpb24odyl7dmFy''@;'; put 'put ''IFAsRj10aGlzLl9yZXBvcnRlclN0YXRlLE89dyBpbnN0YW5jZW9mIGc7aWYoUD1PP3c6bmV3IGcoRi5wYXRoLm1hcChmdW5jdGlvbih6KXtyZXR1cm4iWyIrSlNPTi5zdHJpbmdpZnkoeikrIl0ifSkuam9pbigiIiksdy5tZXNzYWdlfHx3LHcuc3RhY2spLCFGLm9wdGlvbnMucGFydGlhbCl0''@;'; put 'put ''aHJvdyBQO3JldHVybiBPfHxGLmVycm9ycy5wdXNoKFApLFB9LF8ucHJvdG90eXBlLndyYXBSZXN1bHQ9ZnVuY3Rpb24odyl7dmFyIFA9dGhpcy5fcmVwb3J0ZXJTdGF0ZTtyZXR1cm4gUC5vcHRpb25zLnBhcnRpYWw/e3Jlc3VsdDp0aGlzLmlzRXJyb3Iodyk/bnVsbDp3LGVycm9yczpQLmVy''@;'; put 'put ''cm9yc306d30sSShnLEVycm9yKSxnLnByb3RvdHlwZS5yZXRocm93PWZ1bmN0aW9uKHcpe2lmKHRoaXMubWVzc2FnZT13KyIgYXQ6ICIrKHRoaXMucGF0aHx8IihzaGFsbG93KSIpLEVycm9yLmNhcHR1cmVTdGFja1RyYWNlJiZFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLGcpLCF0aGlz''@;'; put 'put ''LnN0YWNrKXRyeXt0aHJvdyBuZXcgRXJyb3IodGhpcy5tZXNzYWdlKX1jYXRjaChQKXt0aGlzLnN0YWNrPVAuc3RhY2t9cmV0dXJuIHRoaXN9fSwzNjI4MzoodWUsWCx5KT0+e3ZhciBJPXkoNDc3NDApO1gudGFnQ2xhc3M9ezA6InVuaXZlcnNhbCIsMToiYXBwbGljYXRpb24iLDI6ImNvbnRl''@;'; put 'put ''eHQiLDM6InByaXZhdGUifSxYLnRhZ0NsYXNzQnlOYW1lPUkuX3JldmVyc2UoWC50YWdDbGFzcyksWC50YWc9ezA6ImVuZCIsMToiYm9vbCIsMjoiaW50IiwzOiJiaXRzdHIiLDQ6Im9jdHN0ciIsNToibnVsbF8iLDY6Im9iamlkIiw3OiJvYmpEZXNjIiw4OiJleHRlcm5hbCIsOToicmVhbCIs''@;'; put 'put ''MTA6ImVudW0iLDExOiJlbWJlZCIsMTI6InV0ZjhzdHIiLDEzOiJyZWxhdGl2ZU9pZCIsMTY6InNlcSIsMTc6InNldCIsMTg6Im51bXN0ciIsMTk6InByaW50c3RyIiwyMDoidDYxc3RyIiwyMToidmlkZW9zdHIiLDIyOiJpYTVzdHIiLDIzOiJ1dGN0aW1lIiwyNDoiZ2VudGltZSIsMjU6Imdy''@;'; put 'put ''YXBoc3RyIiwyNjoiaXNvNjQ2c3RyIiwyNzoiZ2Vuc3RyIiwyODoidW5pc3RyIiwyOToiY2hhcnN0ciIsMzA6ImJtcHN0ciJ9LFgudGFnQnlOYW1lPUkuX3JldmVyc2UoWC50YWcpfSw0Nzc0MDoodWUsWCx5KT0+e3ZhciBJPVg7SS5fcmV2ZXJzZT1mdW5jdGlvbihnKXt2YXIgQj17fTtyZXR1''@;'; put 'put ''cm4gT2JqZWN0LmtleXMoZykuZm9yRWFjaChmdW5jdGlvbih3KXsoMHx3KT09dyYmKHd8PTApLEJbZ1t3XV09d30pLEJ9LEkuZGVyPXkoMzYyODMpfSw1NTk0MToodWUsWCx5KT0+e3ZhciBJPXkoNzE5OTMpLF89eSg0OTYwOSksZz1fLmJhc2UsQj1fLmJpZ251bSx3PV8uY29uc3RhbnRzLmRl''@;'; put 'put ''cjtmdW5jdGlvbiBQKE4pe3RoaXMuZW5jPSJkZXIiLHRoaXMubmFtZT1OLm5hbWUsdGhpcy5lbnRpdHk9Tix0aGlzLnRyZWU9bmV3IEYsdGhpcy50cmVlLl9pbml0KE4uYm9keSl9ZnVuY3Rpb24gRihOKXtnLk5vZGUuY2FsbCh0aGlzLCJkZXIiLE4pfWZ1bmN0aW9uIE8oTixMKXt2YXIgSz1O''@;'; put 'put ''LnJlYWRVSW50OChMKTtpZihOLmlzRXJyb3IoSykpcmV0dXJuIEs7dmFyIFU9dy50YWdDbGFzc1tLPj42XSxXPSEoMzImSyk7aWYoMzEmfkspSyY9MzE7ZWxzZXt2YXIgWT1LO2ZvcihLPTA7ISgxMjgmflkpOyl7aWYoWT1OLnJlYWRVSW50OChMKSxOLmlzRXJyb3IoWSkpcmV0dXJuIFk7Szw8''@;'; put 'put ''PTcsS3w9MTI3Jll9fXJldHVybntjbHM6VSxwcmltaXRpdmU6Vyx0YWc6Syx0YWdTdHI6dy50YWdbS119fWZ1bmN0aW9uIHooTixMLEspe3ZhciBVPU4ucmVhZFVJbnQ4KEspO2lmKE4uaXNFcnJvcihVKSlyZXR1cm4gVTtpZighTCYmMTI4PT09VSlyZXR1cm4gbnVsbDtpZighKDEyOCZVKSly''@;'; put 'put ''ZXR1cm4gVTt2YXIgVz0xMjcmVTtpZihXPjQpcmV0dXJuIE4uZXJyb3IoImxlbmd0aCBvY3RlY3QgaXMgdG9vIGxvbmciKTtVPTA7Zm9yKHZhciBZPTA7WTxXO1krKyl7VTw8PTg7dmFyIHE9Ti5yZWFkVUludDgoSyk7aWYoTi5pc0Vycm9yKHEpKXJldHVybiBxO1V8PXF9cmV0dXJuIFV9dWUu''@;'; put 'put ''ZXhwb3J0cz1QLFAucHJvdG90eXBlLmRlY29kZT1mdW5jdGlvbihMLEspe3JldHVybiBMIGluc3RhbmNlb2YgZy5EZWNvZGVyQnVmZmVyfHwoTD1uZXcgZy5EZWNvZGVyQnVmZmVyKEwsSykpLHRoaXMudHJlZS5fZGVjb2RlKEwsSyl9LEkoRixnLk5vZGUpLEYucHJvdG90eXBlLl9wZWVrVGFn''@;'; put 'put ''PWZ1bmN0aW9uKEwsSyxVKXtpZihMLmlzRW1wdHkoKSlyZXR1cm4hMTt2YXIgVz1MLnNhdmUoKSxZPU8oTCwnRmFpbGVkIHRvIHBlZWsgdGFnOiAiJytLKyciJyk7cmV0dXJuIEwuaXNFcnJvcihZKT9ZOihMLnJlc3RvcmUoVyksWS50YWc9PT1LfHxZLnRhZ1N0cj09PUt8fFkudGFnU3RyKyJv''@;'; put 'put ''ZiI9PT1LfHxVKX0sRi5wcm90b3R5cGUuX2RlY29kZVRhZz1mdW5jdGlvbihMLEssVSl7dmFyIFc9TyhMLCdGYWlsZWQgdG8gZGVjb2RlIHRhZyBvZiAiJytLKyciJyk7aWYoTC5pc0Vycm9yKFcpKXJldHVybiBXO3ZhciBZPXooTCxXLnByaW1pdGl2ZSwnRmFpbGVkIHRvIGdldCBsZW5ndGgg''@;'; put 'put ''b2YgIicrSysnIicpO2lmKEwuaXNFcnJvcihZKSlyZXR1cm4gWTtpZighVSYmVy50YWchPT1LJiZXLnRhZ1N0ciE9PUsmJlcudGFnU3RyKyJvZiIhPT1LKXJldHVybiBMLmVycm9yKCdGYWlsZWQgdG8gbWF0Y2ggdGFnOiAiJytLKyciJyk7aWYoVy5wcmltaXRpdmV8fG51bGwhPT1ZKXJldHVy''@;'; put 'put ''biBMLnNraXAoWSwnRmFpbGVkIHRvIG1hdGNoIGJvZHkgb2Y6ICInK0srJyInKTt2YXIgcT1MLnNhdmUoKSxlZT10aGlzLl9za2lwVW50aWxFbmQoTCwnRmFpbGVkIHRvIHNraXAgaW5kZWZpbml0ZSBsZW5ndGggYm9keTogIicrdGhpcy50YWcrJyInKTtyZXR1cm4gTC5pc0Vycm9yKGVlKT9l''@;'; put 'put ''ZTooWT1MLm9mZnNldC1xLm9mZnNldCxMLnJlc3RvcmUocSksTC5za2lwKFksJ0ZhaWxlZCB0byBtYXRjaCBib2R5IG9mOiAiJytLKyciJykpfSxGLnByb3RvdHlwZS5fc2tpcFVudGlsRW5kPWZ1bmN0aW9uKEwsSyl7Zm9yKDs7KXt2YXIgVT1PKEwsSyk7aWYoTC5pc0Vycm9yKFUpKXJldHVy''@;'; put 'put ''biBVO3ZhciBZLFc9eihMLFUucHJpbWl0aXZlLEspO2lmKEwuaXNFcnJvcihXKSlyZXR1cm4gVztpZihZPVUucHJpbWl0aXZlfHxudWxsIT09Vz9MLnNraXAoVyk6dGhpcy5fc2tpcFVudGlsRW5kKEwsSyksTC5pc0Vycm9yKFkpKXJldHVybiBZO2lmKCJlbmQiPT09VS50YWdTdHIpYnJlYWt9''@;'; put 'put ''fSxGLnByb3RvdHlwZS5fZGVjb2RlTGlzdD1mdW5jdGlvbihMLEssVSxXKXtmb3IodmFyIFk9W107IUwuaXNFbXB0eSgpOyl7dmFyIHE9dGhpcy5fcGVla1RhZyhMLCJlbmQiKTtpZihMLmlzRXJyb3IocSkpcmV0dXJuIHE7dmFyIGVlPVUuZGVjb2RlKEwsImRlciIsVyk7aWYoTC5pc0Vycm9y''@;'; put 'put ''KGVlKSYmcSlicmVhaztZLnB1c2goZWUpfXJldHVybiBZfSxGLnByb3RvdHlwZS5fZGVjb2RlU3RyPWZ1bmN0aW9uKEwsSyl7aWYoImJpdHN0ciI9PT1LKXt2YXIgVT1MLnJlYWRVSW50OCgpO3JldHVybiBMLmlzRXJyb3IoVSk/VTp7dW51c2VkOlUsZGF0YTpMLnJhdygpfX1pZigiYm1wc3Ry''@;'; put 'put ''Ij09PUspe3ZhciBXPUwucmF3KCk7aWYoVy5sZW5ndGglMj09MSlyZXR1cm4gTC5lcnJvcigiRGVjb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IGJtcHN0ciBsZW5ndGggbWlzbWF0Y2giKTtmb3IodmFyIFk9IiIscT0wO3E8Vy5sZW5ndGgvMjtxKyspWSs9U3RyaW5nLmZyb21DaGFyQ29kZShXLnJl''@;'; put 'put ''YWRVSW50MTZCRSgyKnEpKTtyZXR1cm4gWX1pZigibnVtc3RyIj09PUspe3ZhciBlZT1MLnJhdygpLnRvU3RyaW5nKCJhc2NpaSIpO3JldHVybiB0aGlzLl9pc051bXN0cihlZSk/ZWU6TC5lcnJvcigiRGVjb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IG51bXN0ciB1bnN1cHBvcnRlZCBjaGFyYWN0''@;'; put 'put ''ZXJzIil9aWYoIm9jdHN0ciI9PT1LKXJldHVybiBMLnJhdygpO2lmKCJvYmpEZXNjIj09PUspcmV0dXJuIEwucmF3KCk7aWYoInByaW50c3RyIj09PUspe3ZhciBKPUwucmF3KCkudG9TdHJpbmcoImFzY2lpIik7cmV0dXJuIHRoaXMuX2lzUHJpbnRzdHIoSik/SjpMLmVycm9yKCJEZWNvZGlu''@;'; put 'put ''ZyBvZiBzdHJpbmcgdHlwZTogcHJpbnRzdHIgdW5zdXBwb3J0ZWQgY2hhcmFjdGVycyIpfXJldHVybi9zdHIkLy50ZXN0KEspP0wucmF3KCkudG9TdHJpbmcoKTpMLmVycm9yKCJEZWNvZGluZyBvZiBzdHJpbmcgdHlwZTogIitLKyIgdW5zdXBwb3J0ZWQiKX0sRi5wcm90b3R5cGUuX2RlY29k''@;'; put 'put ''ZU9iamlkPWZ1bmN0aW9uKEwsSyxVKXtmb3IodmFyIFcsWT1bXSxxPTA7IUwuaXNFbXB0eSgpOyl7dmFyIGVlPUwucmVhZFVJbnQ4KCk7cTw8PTcscXw9MTI3JmVlLDEyOCZlZXx8KFkucHVzaChxKSxxPTApfWlmKDEyOCZlZSYmWS5wdXNoKHEpLFc9VT9ZOltZWzBdLzQwfDAsWVswXSU0MF0u''@;'; put 'put ''Y29uY2F0KFkuc2xpY2UoMSkpLEspe3ZhciBpZT1LW1cuam9pbigiICIpXTt2b2lkIDA9PT1pZSYmKGllPUtbVy5qb2luKCIuIildKSx2b2lkIDAhPT1pZSYmKFc9aWUpfXJldHVybiBXfSxGLnByb3RvdHlwZS5fZGVjb2RlVGltZT1mdW5jdGlvbihMLEspe3ZhciBVPUwucmF3KCkudG9TdHJp''@;'; put 'put ''bmcoKTtpZigiZ2VudGltZSI9PT1LKXZhciBXPTB8VS5zbGljZSgwLDQpLFk9MHxVLnNsaWNlKDQsNikscT0wfFUuc2xpY2UoNiw4KSxlZT0wfFUuc2xpY2UoOCwxMCksSj0wfFUuc2xpY2UoMTAsMTIpLG5lPTB8VS5zbGljZSgxMiwxNCk7ZWxzZXtpZigidXRjdGltZSIhPT1LKXJldHVybiBM''@;'; put 'put ''LmVycm9yKCJEZWNvZGluZyAiK0srIiB0aW1lIGlzIG5vdCBzdXBwb3J0ZWQgeWV0Iik7Vz0wfFUuc2xpY2UoMCwyKSxZPTB8VS5zbGljZSgyLDQpLHE9MHxVLnNsaWNlKDQsNiksZWU9MHxVLnNsaWNlKDYsOCksSj0wfFUuc2xpY2UoOCwxMCksbmU9MHxVLnNsaWNlKDEwLDEyKSxXPVc8NzA/''@;'; put 'put ''MmUzK1c6MTkwMCtXfXJldHVybiBEYXRlLlVUQyhXLFktMSxxLGVlLEosbmUsMCl9LEYucHJvdG90eXBlLl9kZWNvZGVOdWxsPWZ1bmN0aW9uKEwpe3JldHVybiBudWxsfSxGLnByb3RvdHlwZS5fZGVjb2RlQm9vbD1mdW5jdGlvbihMKXt2YXIgSz1MLnJlYWRVSW50OCgpO3JldHVybiBMLmlz''@;'; put 'put ''RXJyb3IoSyk/SzowIT09S30sRi5wcm90b3R5cGUuX2RlY29kZUludD1mdW5jdGlvbihMLEspe3ZhciBVPUwucmF3KCksVz1uZXcgQihVKTtyZXR1cm4gSyYmKFc9S1tXLnRvU3RyaW5nKDEwKV18fFcpLFd9LEYucHJvdG90eXBlLl91c2U9ZnVuY3Rpb24oTCxLKXtyZXR1cm4iZnVuY3Rpb24i''@;'; put 'put ''PT10eXBlb2YgTCYmKEw9TChLKSksTC5fZ2V0RGVjb2RlcigiZGVyIikudHJlZX19LDkxNTU4Oih1ZSxYLHkpPT57dmFyIEk9WDtJLmRlcj15KDU1OTQxKSxJLnBlbT15KDU5MzE2KX0sNTkzMTY6KHVlLFgseSk9Pnt2YXIgST15KDcxOTkzKSxfPXkoODM4MzgpLkJ1ZmZlcixnPXkoNTU5NDEp''@;'; put 'put ''O2Z1bmN0aW9uIEIodyl7Zy5jYWxsKHRoaXMsdyksdGhpcy5lbmM9InBlbSJ9SShCLGcpLHVlLmV4cG9ydHM9QixCLnByb3RvdHlwZS5kZWNvZGU9ZnVuY3Rpb24oUCxGKXtmb3IodmFyIE89UC50b1N0cmluZygpLnNwbGl0KC9bXHJcbl0rL2cpLHo9Ri5sYWJlbC50b1VwcGVyQ2FzZSgpLE49''@;'; put 'put ''L14tLS0tLShCRUdJTnxFTkQpIChbXi1dKyktLS0tLSQvLEw9LTEsSz0tMSxVPTA7VTxPLmxlbmd0aDtVKyspe3ZhciBXPU9bVV0ubWF0Y2goTik7aWYobnVsbCE9PVcmJldbMl09PT16KXtpZigtMSE9PUwpe2lmKCJFTkQiIT09V1sxXSlicmVhaztLPVU7YnJlYWt9aWYoIkJFR0lOIiE9PVdb''@;'; put 'put ''MV0pYnJlYWs7TD1VfX1pZigtMT09PUx8fC0xPT09Syl0aHJvdyBuZXcgRXJyb3IoIlBFTSBzZWN0aW9uIG5vdCBmb3VuZCBmb3I6ICIreik7dmFyIFk9Ty5zbGljZShMKzEsSykuam9pbigiIik7WS5yZXBsYWNlKC9bXmEtejAtOVwrXC89XSsvZ2ksIiIpO3ZhciBxPW5ldyBfKFksImJhc2U2''@;'; put 'put ''NCIpO3JldHVybiBnLnByb3RvdHlwZS5kZWNvZGUuY2FsbCh0aGlzLHEsRil9fSw3MjE5MzoodWUsWCx5KT0+e3ZhciBJPXkoNzE5OTMpLF89eSg4MzgzOCkuQnVmZmVyLGc9eSg0OTYwOSksQj1nLmJhc2Usdz1nLmNvbnN0YW50cy5kZXI7ZnVuY3Rpb24gUChOKXt0aGlzLmVuYz0iZGVyIix0''@;'; put 'put ''aGlzLm5hbWU9Ti5uYW1lLHRoaXMuZW50aXR5PU4sdGhpcy50cmVlPW5ldyBGLHRoaXMudHJlZS5faW5pdChOLmJvZHkpfWZ1bmN0aW9uIEYoTil7Qi5Ob2RlLmNhbGwodGhpcywiZGVyIixOKX1mdW5jdGlvbiBPKE4pe3JldHVybiBOPDEwPyIwIitOOk59dWUuZXhwb3J0cz1QLFAucHJvdG90''@;'; put 'put ''eXBlLmVuY29kZT1mdW5jdGlvbihMLEspe3JldHVybiB0aGlzLnRyZWUuX2VuY29kZShMLEspLmpvaW4oKX0sSShGLEIuTm9kZSksRi5wcm90b3R5cGUuX2VuY29kZUNvbXBvc2l0ZT1mdW5jdGlvbihMLEssVSxXKXt2YXIgSixZPWZ1bmN0aW9uIHooTixMLEssVSl7dmFyIFc7aWYoInNlcW9m''@;'; put 'put ''Ij09PU4/Tj0ic2VxIjoic2V0b2YiPT09TiYmKE49InNldCIpLHcudGFnQnlOYW1lLmhhc093blByb3BlcnR5KE4pKVc9dy50YWdCeU5hbWVbTl07ZWxzZXtpZigibnVtYmVyIiE9dHlwZW9mIE58fCgwfE4pIT09TilyZXR1cm4gVS5lcnJvcigiVW5rbm93biB0YWc6ICIrTik7Vz1OfXJldHVy''@;'; put 'put ''biBXPj0zMT9VLmVycm9yKCJNdWx0aS1vY3RldCB0YWcgZW5jb2RpbmcgdW5zdXBwb3J0ZWQiKTooTHx8KFd8PTMyKSxXfD13LnRhZ0NsYXNzQnlOYW1lW0t8fCJ1bml2ZXJzYWwiXTw8Nil9KEwsSyxVLHRoaXMucmVwb3J0ZXIpO2lmKFcubGVuZ3RoPDEyOClyZXR1cm4oSj1uZXcgXygyKSlb''@;'; put 'put ''MF09WSxKWzFdPVcubGVuZ3RoLHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoW0osV10pO2Zvcih2YXIgcT0xLGVlPVcubGVuZ3RoO2VlPj0yNTY7ZWU+Pj04KXErKzsoSj1uZXcgXygyK3EpKVswXT1ZLEpbMV09MTI4fHEsZWU9MStxO2Zvcih2YXIgbmU9Vy5sZW5ndGg7bmU+MDtlZS0tLG5l''@;'; put 'put ''Pj49OClKW2VlXT0yNTUmbmU7cmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoW0osV10pfSxGLnByb3RvdHlwZS5fZW5jb2RlU3RyPWZ1bmN0aW9uKEwsSyl7aWYoImJpdHN0ciI9PT1LKXJldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKFswfEwudW51c2VkLEwuZGF0YV0p''@;'; put 'put ''O2lmKCJibXBzdHIiPT09Syl7Zm9yKHZhciBVPW5ldyBfKDIqTC5sZW5ndGgpLFc9MDtXPEwubGVuZ3RoO1crKylVLndyaXRlVUludDE2QkUoTC5jaGFyQ29kZUF0KFcpLDIqVyk7cmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoVSl9cmV0dXJuIm51bXN0ciI9PT1LP3RoaXMuX2lz''@;'; put 'put ''TnVtc3RyKEwpP3RoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoTCk6dGhpcy5yZXBvcnRlci5lcnJvcigiRW5jb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IG51bXN0ciBzdXBwb3J0cyBvbmx5IGRpZ2l0cyBhbmQgc3BhY2UiKToicHJpbnRzdHIiPT09Sz90aGlzLl9pc1ByaW50c3RyKEwpP3RoaXMu''@;'; put 'put ''X2NyZWF0ZUVuY29kZXJCdWZmZXIoTCk6dGhpcy5yZXBvcnRlci5lcnJvcigiRW5jb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IHByaW50c3RyIHN1cHBvcnRzIG9ubHkgbGF0aW4gdXBwZXIgYW5kIGxvd2VyIGNhc2UgbGV0dGVycywgZGlnaXRzLCBzcGFjZSwgYXBvc3Ryb3BoZSwgbGVmdCBhbmQg''@;'; put 'put ''cmlndGggcGFyZW50aGVzaXMsIHBsdXMgc2lnbiwgY29tbWEsIGh5cGhlbiwgZG90LCBzbGFzaCwgY29sb24sIGVxdWFsIHNpZ24sIHF1ZXN0aW9uIG1hcmsiKTovc3RyJC8udGVzdChLKXx8Im9iakRlc2MiPT09Sz90aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKEwpOnRoaXMucmVwb3J0ZXIu''@;'; put 'put ''ZXJyb3IoIkVuY29kaW5nIG9mIHN0cmluZyB0eXBlOiAiK0srIiB1bnN1cHBvcnRlZCIpfSxGLnByb3RvdHlwZS5fZW5jb2RlT2JqaWQ9ZnVuY3Rpb24oTCxLLFUpe2lmKCJzdHJpbmciPT10eXBlb2YgTCl7aWYoIUspcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoInN0cmluZyBvYmppZCBn''@;'; put 'put ''aXZlbiwgYnV0IG5vIHZhbHVlcyBtYXAgZm91bmQiKTtpZighSy5oYXNPd25Qcm9wZXJ0eShMKSlyZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcigib2JqaWQgbm90IGZvdW5kIGluIHZhbHVlcyBtYXAiKTtMPUtbTF0uc3BsaXQoL1tcc1wuXSsvZyk7Zm9yKHZhciBXPTA7VzxMLmxlbmd0aDtX''@;'; put 'put ''KyspTFtXXXw9MH1lbHNlIGlmKEFycmF5LmlzQXJyYXkoTCkpZm9yKEw9TC5zbGljZSgpLFc9MDtXPEwubGVuZ3RoO1crKylMW1ddfD0wO2lmKCFBcnJheS5pc0FycmF5KEwpKXJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKCJvYmppZCgpIHNob3VsZCBiZSBlaXRoZXIgYXJyYXkgb3Igc3Ry''@;'; put 'put ''aW5nLCBnb3Q6ICIrSlNPTi5zdHJpbmdpZnkoTCkpO2lmKCFVKXtpZihMWzFdPj00MClyZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcigiU2Vjb25kIG9iamlkIGlkZW50aWZpZXIgT09CIik7TC5zcGxpY2UoMCwyLDQwKkxbMF0rTFsxXSl9dmFyIFk9MDtmb3IoVz0wO1c8TC5sZW5ndGg7Vysr''@;'; put 'put ''KXt2YXIgcT1MW1ddO2ZvcihZKys7cT49MTI4O3E+Pj03KVkrK312YXIgZWU9bmV3IF8oWSksSj1lZS5sZW5ndGgtMTtmb3IoVz1MLmxlbmd0aC0xO1c+PTA7Vy0tKWZvcihlZVtKLS1dPTEyNyYocT1MW1ddKTsocT4+PTcpPjA7KWVlW0otLV09MTI4fDEyNyZxO3JldHVybiB0aGlzLl9jcmVh''@;'; put 'put ''dGVFbmNvZGVyQnVmZmVyKGVlKX0sRi5wcm90b3R5cGUuX2VuY29kZVRpbWU9ZnVuY3Rpb24oTCxLKXt2YXIgVSxXPW5ldyBEYXRlKEwpO3JldHVybiJnZW50aW1lIj09PUs/VT1bTyhXLmdldEZ1bGxZZWFyKCkpLE8oVy5nZXRVVENNb250aCgpKzEpLE8oVy5nZXRVVENEYXRlKCkpLE8oVy5n''@;'; put 'put ''ZXRVVENIb3VycygpKSxPKFcuZ2V0VVRDTWludXRlcygpKSxPKFcuZ2V0VVRDU2Vjb25kcygpKSwiWiJdLmpvaW4oIiIpOiJ1dGN0aW1lIj09PUs/VT1bTyhXLmdldEZ1bGxZZWFyKCklMTAwKSxPKFcuZ2V0VVRDTW9udGgoKSsxKSxPKFcuZ2V0VVRDRGF0ZSgpKSxPKFcuZ2V0VVRDSG91cnMo''@;'; put 'put ''KSksTyhXLmdldFVUQ01pbnV0ZXMoKSksTyhXLmdldFVUQ1NlY29uZHMoKSksIloiXS5qb2luKCIiKTp0aGlzLnJlcG9ydGVyLmVycm9yKCJFbmNvZGluZyAiK0srIiB0aW1lIGlzIG5vdCBzdXBwb3J0ZWQgeWV0IiksdGhpcy5fZW5jb2RlU3RyKFUsIm9jdHN0ciIpfSxGLnByb3RvdHlwZS5f''@;'; put 'put ''ZW5jb2RlTnVsbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKCIiKX0sRi5wcm90b3R5cGUuX2VuY29kZUludD1mdW5jdGlvbihMLEspe2lmKCJzdHJpbmciPT10eXBlb2YgTCl7aWYoIUspcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoIlN0cmluZyBpbnQg''@;'; put 'put ''b3IgZW51bSBnaXZlbiwgYnV0IG5vIHZhbHVlcyBtYXAiKTtpZighSy5oYXNPd25Qcm9wZXJ0eShMKSlyZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcigiVmFsdWVzIG1hcCBkb2Vzbid0IGNvbnRhaW46ICIrSlNPTi5zdHJpbmdpZnkoTCkpO0w9S1tMXX1pZigibnVtYmVyIiE9dHlwZW9mIEwm''@;'; put 'put ''JiFfLmlzQnVmZmVyKEwpKXt2YXIgVT1MLnRvQXJyYXkoKTshTC5zaWduJiYxMjgmVVswXSYmVS51bnNoaWZ0KDApLEw9bmV3IF8oVSl9aWYoXy5pc0J1ZmZlcihMKSl7dmFyIFc9TC5sZW5ndGg7MD09PUwubGVuZ3RoJiZXKys7dmFyIHE9bmV3IF8oVyk7cmV0dXJuIEwuY29weShxKSwwPT09''@;'; put 'put ''TC5sZW5ndGgmJihxWzBdPTApLHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIocSl9aWYoTDwxMjgpcmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoTCk7aWYoTDwyNTYpcmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoWzAsTF0pO1c9MTtmb3IodmFyIFk9TDtZPj0yNTY7''@;'; put 'put ''WT4+PTgpVysrO2ZvcihZPShxPW5ldyBBcnJheShXKSkubGVuZ3RoLTE7WT49MDtZLS0pcVtZXT0yNTUmTCxMPj49ODtyZXR1cm4gMTI4JnFbMF0mJnEudW5zaGlmdCgwKSx0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKG5ldyBfKHEpKX0sRi5wcm90b3R5cGUuX2VuY29kZUJvb2w9ZnVuY3Rp''@;'; put 'put ''b24oTCl7cmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoTD8yNTU6MCl9LEYucHJvdG90eXBlLl91c2U9ZnVuY3Rpb24oTCxLKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgTCYmKEw9TChLKSksTC5fZ2V0RW5jb2RlcigiZGVyIikudHJlZX0sRi5wcm90b3R5cGUuX3NraXBEZWZh''@;'; put 'put ''dWx0PWZ1bmN0aW9uKEwsSyxVKXt2YXIgWSxXPXRoaXMuX2Jhc2VTdGF0ZTtpZihudWxsPT09Vy5kZWZhdWx0KXJldHVybiExO3ZhciBxPUwuam9pbigpO2lmKHZvaWQgMD09PVcuZGVmYXVsdEJ1ZmZlciYmKFcuZGVmYXVsdEJ1ZmZlcj10aGlzLl9lbmNvZGVWYWx1ZShXLmRlZmF1bHQsSyxV''@;'; put 'put ''KS5qb2luKCkpLHEubGVuZ3RoIT09Vy5kZWZhdWx0QnVmZmVyLmxlbmd0aClyZXR1cm4hMTtmb3IoWT0wO1k8cS5sZW5ndGg7WSsrKWlmKHFbWV0hPT1XLmRlZmF1bHRCdWZmZXJbWV0pcmV0dXJuITE7cmV0dXJuITB9fSwyMjcxNDoodWUsWCx5KT0+e3ZhciBJPVg7SS5kZXI9eSg3MjE5Myks''@;'; put 'put ''SS5wZW09eSgyNDgxNil9LDI0ODE2Oih1ZSxYLHkpPT57dmFyIEk9eSg3MTk5MyksXz15KDcyMTkzKTtmdW5jdGlvbiBnKEIpe18uY2FsbCh0aGlzLEIpLHRoaXMuZW5jPSJwZW0ifUkoZyxfKSx1ZS5leHBvcnRzPWcsZy5wcm90b3R5cGUuZW5jb2RlPWZ1bmN0aW9uKHcsUCl7Zm9yKHZhciBP''@;'; put 'put ''PV8ucHJvdG90eXBlLmVuY29kZS5jYWxsKHRoaXMsdykudG9TdHJpbmcoImJhc2U2NCIpLHo9WyItLS0tLUJFR0lOICIrUC5sYWJlbCsiLS0tLS0iXSxOPTA7TjxPLmxlbmd0aDtOKz02NCl6LnB1c2goTy5zbGljZShOLE4rNjQpKTtyZXR1cm4gei5wdXNoKCItLS0tLUVORCAiK1AubGFiZWwr''@;'; put 'put ''Ii0tLS0tIiksei5qb2luKCJcbiIpfX0sOTY4Njc6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSxfKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZyhWLHApe2lmKCFWKXRocm93IG5ldyBFcnJvcihwfHwiQXNzZXJ0aW9uIGZhaWxlZCIpfWZ1bmN0aW9uIEIoVixwKXtWLnN1cGVyXz1wO3Zh''@;'; put 'put ''ciBiPWZ1bmN0aW9uKCl7fTtiLnByb3RvdHlwZT1wLnByb3RvdHlwZSxWLnByb3RvdHlwZT1uZXcgYixWLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1WfWZ1bmN0aW9uIHcoVixwLGIpe2lmKHcuaXNCTihWKSlyZXR1cm4gVjt0aGlzLm5lZ2F0aXZlPTAsdGhpcy53b3Jkcz1udWxsLHRoaXMubGVu''@;'; put 'put ''Z3RoPTAsdGhpcy5yZWQ9bnVsbCxudWxsIT09ViYmKCgibGUiPT09cHx8ImJlIj09PXApJiYoYj1wLHA9MTApLHRoaXMuX2luaXQoVnx8MCxwfHwxMCxifHwiYmUiKSl9dmFyIFA7Im9iamVjdCI9PXR5cGVvZiBJP0kuZXhwb3J0cz13Ol8uQk49dyx3LkJOPXcsdy53b3JkU2l6ZT0yNjt0cnl7''@;'; put 'put ''UD10eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIHdpbmRvdy5CdWZmZXI8InUiP3dpbmRvdy5CdWZmZXI6eSg3ODk4MikuQnVmZmVyfWNhdGNoe31mdW5jdGlvbiBGKFYscCl7dmFyIGI9Vi5jaGFyQ29kZUF0KHApO3JldHVybiBiPj02NSYmYjw9NzA/Yi01NTpiPj05NyYmYjw9MTAyP2ItODc6''@;'; put 'put ''Yi00OCYxNX1mdW5jdGlvbiBPKFYscCxiKXt2YXIgeD1GKFYsYik7cmV0dXJuIGItMT49cCYmKHh8PUYoVixiLTEpPDw0KSx4fWZ1bmN0aW9uIHooVixwLGIseCl7Zm9yKHZhciBDPTAsVD1NYXRoLm1pbihWLmxlbmd0aCxiKSxIPXA7SDxUO0grKyl7dmFyIGo9Vi5jaGFyQ29kZUF0KEgpLTQ4''@;'; put 'put ''O0MqPXgsQys9aj49NDk/ai00OSsxMDpqPj0xNz9qLTE3KzEwOmp9cmV0dXJuIEN9dy5pc0JOPWZ1bmN0aW9uKHApe3JldHVybiBwIGluc3RhbmNlb2Ygd3x8bnVsbCE9PXAmJiJvYmplY3QiPT10eXBlb2YgcCYmcC5jb25zdHJ1Y3Rvci53b3JkU2l6ZT09PXcud29yZFNpemUmJkFycmF5Lmlz''@;'; put 'put ''QXJyYXkocC53b3Jkcyl9LHcubWF4PWZ1bmN0aW9uKHAsYil7cmV0dXJuIHAuY21wKGIpPjA/cDpifSx3Lm1pbj1mdW5jdGlvbihwLGIpe3JldHVybiBwLmNtcChiKTwwP3A6Yn0sdy5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24ocCxiLHgpe2lmKCJudW1iZXIiPT10eXBlb2YgcClyZXR1cm4g''@;'; put 'put ''dGhpcy5faW5pdE51bWJlcihwLGIseCk7aWYoIm9iamVjdCI9PXR5cGVvZiBwKXJldHVybiB0aGlzLl9pbml0QXJyYXkocCxiLHgpOyJoZXgiPT09YiYmKGI9MTYpLGcoYj09PSgwfGIpJiZiPj0yJiZiPD0zNik7dmFyIEM9MDsiLSI9PT0ocD1wLnRvU3RyaW5nKCkucmVwbGFjZSgvXHMrL2cs''@;'; put 'put ''IiIpKVswXSYmKEMrKyx0aGlzLm5lZ2F0aXZlPTEpLEM8cC5sZW5ndGgmJigxNj09PWI/dGhpcy5fcGFyc2VIZXgocCxDLHgpOih0aGlzLl9wYXJzZUJhc2UocCxiLEMpLCJsZSI9PT14JiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksYix4KSkpfSx3LnByb3RvdHlwZS5faW5pdE51''@;'; put 'put ''bWJlcj1mdW5jdGlvbihwLGIseCl7cDwwJiYodGhpcy5uZWdhdGl2ZT0xLHA9LXApLHA8NjcxMDg4NjQ/KHRoaXMud29yZHM9WzY3MTA4ODYzJnBdLHRoaXMubGVuZ3RoPTEpOnA8NDUwMzU5OTYyNzM3MDQ5Nj8odGhpcy53b3Jkcz1bNjcxMDg4NjMmcCxwLzY3MTA4ODY0JjY3MTA4ODYzXSx0''@;'; put 'put ''aGlzLmxlbmd0aD0yKTooZyhwPDkwMDcxOTkyNTQ3NDA5OTIpLHRoaXMud29yZHM9WzY3MTA4ODYzJnAscC82NzEwODg2NCY2NzEwODg2MywxXSx0aGlzLmxlbmd0aD0zKSwibGUiPT09eCYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLGIseCl9LHcucHJvdG90eXBlLl9pbml0QXJy''@;'; put 'put ''YXk9ZnVuY3Rpb24ocCxiLHgpe2lmKGcoIm51bWJlciI9PXR5cGVvZiBwLmxlbmd0aCkscC5sZW5ndGg8PTApcmV0dXJuIHRoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTEsdGhpczt0aGlzLmxlbmd0aD1NYXRoLmNlaWwocC5sZW5ndGgvMyksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5s''@;'; put 'put ''ZW5ndGgpO2Zvcih2YXIgQz0wO0M8dGhpcy5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109MDt2YXIgVCxILGo9MDtpZigiYmUiPT09eClmb3IoQz1wLmxlbmd0aC0xLFQ9MDtDPj0wO0MtPTMpdGhpcy53b3Jkc1tUXXw9KEg9cFtDXXxwW0MtMV08PDh8cFtDLTJdPDwxNik8PGomNjcxMDg4NjMs''@;'; put 'put ''dGhpcy53b3Jkc1tUKzFdPUg+Pj4yNi1qJjY3MTA4ODYzLChqKz0yNCk+PTI2JiYoai09MjYsVCsrKTtlbHNlIGlmKCJsZSI9PT14KWZvcihDPTAsVD0wO0M8cC5sZW5ndGg7Qys9Myl0aGlzLndvcmRzW1RdfD0oSD1wW0NdfHBbQysxXTw8OHxwW0MrMl08PDE2KTw8aiY2NzEwODg2Myx0aGlz''@;'; put 'put ''LndvcmRzW1QrMV09SD4+PjI2LWomNjcxMDg4NjMsKGorPTI0KT49MjYmJihqLT0yNixUKyspO3JldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl9wYXJzZUhleD1mdW5jdGlvbihwLGIseCl7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKChwLmxlbmd0aC1iKS82KSx0aGlzLndvcmRzPW5l''@;'; put 'put ''dyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT0wO3ZhciBqLFQ9MCxIPTA7aWYoImJlIj09PXgpZm9yKEM9cC5sZW5ndGgtMTtDPj1iO0MtPTIpaj1PKHAsYixDKTw8VCx0aGlzLndvcmRzW0hdfD02NzEwODg2MyZqLFQ+PTE4''@;'; put 'put ''PyhULT0xOCx0aGlzLndvcmRzW0grPTFdfD1qPj4+MjYpOlQrPTg7ZWxzZSBmb3IoQz0ocC5sZW5ndGgtYiklMj09MD9iKzE6YjtDPHAubGVuZ3RoO0MrPTIpaj1PKHAsYixDKTw8VCx0aGlzLndvcmRzW0hdfD02NzEwODg2MyZqLFQ+PTE4PyhULT0xOCx0aGlzLndvcmRzW0grPTFdfD1qPj4+''@;'; put 'put ''MjYpOlQrPTg7dGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5fcGFyc2VCYXNlPWZ1bmN0aW9uKHAsYix4KXt0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xO2Zvcih2YXIgQz0wLFQ9MTtUPD02NzEwODg2MztUKj1iKUMrKztDLS0sVD1UL2J8MDtmb3IodmFyIEg9cC5sZW5ndGgteCxqPUgl''@;'; put 'put ''QyxFPU1hdGgubWluKEgsSC1qKSt4LG09MCxBPXg7QTxFO0ErPUMpbT16KHAsQSxBK0MsYiksdGhpcy5pbXVsbihUKSx0aGlzLndvcmRzWzBdK208NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9bTp0aGlzLl9pYWRkbihtKTtpZigwIT09ail7dmFyIGFlPTE7Zm9yKG09eihwLEEscC5sZW5ndGgs''@;'; put 'put ''YiksQT0wO0E8ajtBKyspYWUqPWI7dGhpcy5pbXVsbihhZSksdGhpcy53b3Jkc1swXSttPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPW06dGhpcy5faWFkZG4obSl9dGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKHApe3Aud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3Ro''@;'; put 'put ''KTtmb3IodmFyIGI9MDtiPHRoaXMubGVuZ3RoO2IrKylwLndvcmRzW2JdPXRoaXMud29yZHNbYl07cC5sZW5ndGg9dGhpcy5sZW5ndGgscC5uZWdhdGl2ZT10aGlzLm5lZ2F0aXZlLHAucmVkPXRoaXMucmVkfSx3LnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciBwPW5ldyB3KG51bGwp''@;'; put 'put ''O3JldHVybiB0aGlzLmNvcHkocCkscH0sdy5wcm90b3R5cGUuX2V4cGFuZD1mdW5jdGlvbihwKXtmb3IoO3RoaXMubGVuZ3RoPHA7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtyZXR1cm4gdGhpc30sdy5wcm90b3R5cGUuc3RyaXA9ZnVuY3Rpb24oKXtmb3IoO3RoaXMubGVuZ3RoPjEm''@;'; put 'put ''JjA9PT10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdOyl0aGlzLmxlbmd0aC0tO3JldHVybiB0aGlzLl9ub3JtU2lnbigpfSx3LnByb3RvdHlwZS5fbm9ybVNpZ249ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXSYmKHRoaXMubmVnYXRpdmU9MCks''@;'; put 'put ''dGhpc30sdy5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybih0aGlzLnJlZD8iPEJOLVI6ICI6IjxCTjogIikrdGhpcy50b1N0cmluZygxNikrIj4ifTt2YXIgTj1bIiIsIjAiLCIwMCIsIjAwMCIsIjAwMDAiLCIwMDAwMCIsIjAwMDAwMCIsIjAwMDAwMDAiLCIwMDAwMDAwMCIs''@;'; put 'put ''IjAwMDAwMDAwMCIsIjAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMCIs''@;'; put 'put ''IjAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAw''@;'; put 'put ''MDAwMDAwMDAiXSxMPVswLDAsMjUsMTYsMTIsMTEsMTAsOSw4LDgsNyw3LDcsNyw2LDYsNiw2LDYsNiw2LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVdLEs9WzAsMCwzMzU1NDQzMiw0MzA0NjcyMSwxNjc3NzIxNiw0ODgyODEyNSw2MDQ2NjE3Niw0MDM1MzYwNywxNjc3NzIxNiw0''@;'; put 'put ''MzA0NjcyMSwxZTcsMTk0ODcxNzEsMzU4MzE4MDgsNjI3NDg1MTcsNzUyOTUzNiwxMTM5MDYyNSwxNjc3NzIxNiwyNDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQwODQxMDEsNTE1MzYzMiw2NDM2MzQzLDc5NjI2MjQsOTc2NTYyNSwxMTg4MTM3NiwxNDM0ODkwNywxNzIxMDM2OCwy''@;'; put 'put ''MDUxMTE0OSwyNDNlNSwyODYyOTE1MSwzMzU1NDQzMiwzOTEzNTM5Myw0NTQzNTQyNCw1MjUyMTg3NSw2MDQ2NjE3Nl07ZnVuY3Rpb24gVyhWLHAsYil7Yi5uZWdhdGl2ZT1wLm5lZ2F0aXZlXlYubmVnYXRpdmU7dmFyIHg9Vi5sZW5ndGgrcC5sZW5ndGh8MDtiLmxlbmd0aD14LHg9eC0xfDA7''@;'; put 'put ''dmFyIEM9MHxWLndvcmRzWzBdLFQ9MHxwLndvcmRzWzBdLEg9QypULEU9SC82NzEwODg2NHwwO2Iud29yZHNbMF09NjcxMDg4NjMmSDtmb3IodmFyIG09MTttPHg7bSsrKXtmb3IodmFyIEE9RT4+PjI2LGFlPTY3MTA4ODYzJkUsdGU9TWF0aC5taW4obSxwLmxlbmd0aC0xKSxzZT1NYXRoLm1h''@;'; put 'put ''eCgwLG0tVi5sZW5ndGgrMSk7c2U8PXRlO3NlKyspQSs9KEg9KEM9MHxWLndvcmRzW20tc2V8MF0pKihUPTB8cC53b3Jkc1tzZV0pK2FlKS82NzEwODg2NHwwLGFlPTY3MTA4ODYzJkg7Yi53b3Jkc1ttXT0wfGFlLEU9MHxBfXJldHVybiAwIT09RT9iLndvcmRzW21dPTB8RTpiLmxlbmd0aC0t''@;'; put 'put ''LGIuc3RyaXAoKX13LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbihwLGIpe3ZhciB4O2lmKGI9MHxifHwxLDE2PT09KHA9cHx8MTApfHwiaGV4Ij09PXApe3g9IiI7Zm9yKHZhciBDPTAsVD0wLEg9MDtIPHRoaXMubGVuZ3RoO0grKyl7dmFyIGo9dGhpcy53b3Jkc1tIXSxFPSgxNjc3NzIx''@;'; put 'put ''NSYoajw8Q3xUKSkudG9TdHJpbmcoMTYpO1Q9aj4+PjI0LUMmMTY3NzcyMTUsKEMrPTIpPj0yNiYmKEMtPTI2LEgtLSkseD0wIT09VHx8SCE9PXRoaXMubGVuZ3RoLTE/Tls2LUUubGVuZ3RoXStFK3g6RSt4fWZvcigwIT09VCYmKHg9VC50b1N0cmluZygxNikreCk7eC5sZW5ndGglYiE9MDsp''@;'; put 'put ''eD0iMCIreDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJih4PSItIit4KSx4fWlmKHA9PT0oMHxwKSYmcD49MiYmcDw9MzYpe3ZhciBtPUxbcF0sQT1LW3BdO3g9IiI7dmFyIGFlPXRoaXMuY2xvbmUoKTtmb3IoYWUubmVnYXRpdmU9MDshYWUuaXNaZXJvKCk7KXt2YXIgdGU9YWUubW9kbihB''@;'; put 'put ''KS50b1N0cmluZyhwKTt4PShhZT1hZS5pZGl2bihBKSkuaXNaZXJvKCk/dGUreDpOW20tdGUubGVuZ3RoXSt0ZSt4fWZvcih0aGlzLmlzWmVybygpJiYoeD0iMCIreCk7eC5sZW5ndGglYiE9MDspeD0iMCIreDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJih4PSItIit4KSx4fWcoITEsIkJh''@;'; put 'put ''c2Ugc2hvdWxkIGJlIGJldHdlZW4gMiBhbmQgMzYiKX0sdy5wcm90b3R5cGUudG9OdW1iZXI9ZnVuY3Rpb24oKXt2YXIgcD10aGlzLndvcmRzWzBdO3JldHVybiAyPT09dGhpcy5sZW5ndGg/cCs9NjcxMDg4NjQqdGhpcy53b3Jkc1sxXTozPT09dGhpcy5sZW5ndGgmJjE9PT10aGlzLndvcmRz''@;'; put 'put ''WzJdP3ArPTQ1MDM1OTk2MjczNzA0OTYrNjcxMDg4NjQqdGhpcy53b3Jkc1sxXTp0aGlzLmxlbmd0aD4yJiZnKCExLCJOdW1iZXIgY2FuIG9ubHkgc2FmZWx5IHN0b3JlIHVwIHRvIDUzIGJpdHMiKSwwIT09dGhpcy5uZWdhdGl2ZT8tcDpwfSx3LnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24o''@;'; put 'put ''KXtyZXR1cm4gdGhpcy50b1N0cmluZygxNil9LHcucHJvdG90eXBlLnRvQnVmZmVyPWZ1bmN0aW9uKHAsYil7cmV0dXJuIGcodHlwZW9mIFA8InUiKSx0aGlzLnRvQXJyYXlMaWtlKFAscCxiKX0sdy5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbihwLGIpe3JldHVybiB0aGlzLnRvQXJyYXlM''@;'; put 'put ''aWtlKEFycmF5LHAsYil9LHcucHJvdG90eXBlLnRvQXJyYXlMaWtlPWZ1bmN0aW9uKHAsYix4KXt2YXIgQz10aGlzLmJ5dGVMZW5ndGgoKSxUPXh8fE1hdGgubWF4KDEsQyk7ZyhDPD1ULCJieXRlIGFycmF5IGxvbmdlciB0aGFuIGRlc2lyZWQgbGVuZ3RoIiksZyhUPjAsIlJlcXVlc3RlZCBh''@;'; put 'put ''cnJheSBsZW5ndGggPD0gMCIpLHRoaXMuc3RyaXAoKTt2YXIgRSxtLEg9ImxlIj09PWIsaj1uZXcgcChUKSxBPXRoaXMuY2xvbmUoKTtpZihIKXtmb3IobT0wOyFBLmlzWmVybygpO20rKylFPUEuYW5kbG4oMjU1KSxBLml1c2hybig4KSxqW21dPUU7Zm9yKDttPFQ7bSsrKWpbbV09MH1lbHNl''@;'; put 'put ''e2ZvcihtPTA7bTxULUM7bSsrKWpbbV09MDtmb3IobT0wOyFBLmlzWmVybygpO20rKylFPUEuYW5kbG4oMjU1KSxBLml1c2hybig4KSxqW1QtbS0xXT1FfXJldHVybiBqfSx3LnByb3RvdHlwZS5fY291bnRCaXRzPU1hdGguY2x6MzI/ZnVuY3Rpb24ocCl7cmV0dXJuIDMyLU1hdGguY2x6MzIo''@;'; put 'put ''cCl9OmZ1bmN0aW9uKHApe3ZhciBiPXAseD0wO3JldHVybiBiPj00MDk2JiYoeCs9MTMsYj4+Pj0xMyksYj49NjQmJih4Kz03LGI+Pj49NyksYj49OCYmKHgrPTQsYj4+Pj00KSxiPj0yJiYoeCs9MixiPj4+PTIpLHgrYn0sdy5wcm90b3R5cGUuX3plcm9CaXRzPWZ1bmN0aW9uKHApe2lmKDA9''@;'; put 'put ''PT1wKXJldHVybiAyNjt2YXIgYj1wLHg9MDtyZXR1cm4gODE5MSZifHwoeCs9MTMsYj4+Pj0xMyksMTI3JmJ8fCh4Kz03LGI+Pj49NyksMTUmYnx8KHgrPTQsYj4+Pj00KSwzJmJ8fCh4Kz0yLGI+Pj49MiksMSZifHx4KysseH0sdy5wcm90b3R5cGUuYml0TGVuZ3RoPWZ1bmN0aW9uKCl7dmFy''@;'; put 'put ''IGI9dGhpcy5fY291bnRCaXRzKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0pO3JldHVybiAyNioodGhpcy5sZW5ndGgtMSkrYn0sdy5wcm90b3R5cGUuemVyb0JpdHM9ZnVuY3Rpb24oKXtpZih0aGlzLmlzWmVybygpKXJldHVybiAwO2Zvcih2YXIgcD0wLGI9MDtiPHRoaXMubGVuZ3RoO2Ir''@;'; put 'put ''Kyl7dmFyIHg9dGhpcy5femVyb0JpdHModGhpcy53b3Jkc1tiXSk7aWYocCs9eCwyNiE9PXgpYnJlYWt9cmV0dXJuIHB9LHcucHJvdG90eXBlLmJ5dGVMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuYml0TGVuZ3RoKCkvOCl9LHcucHJvdG90eXBlLnRvVHdvcz1mdW5j''@;'; put 'put ''dGlvbihwKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/dGhpcy5hYnMoKS5pbm90bihwKS5pYWRkbigxKTp0aGlzLmNsb25lKCl9LHcucHJvdG90eXBlLmZyb21Ud29zPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLnRlc3RuKHAtMSk/dGhpcy5ub3RuKHApLmlhZGRuKDEpLmluZWcoKTp0aGlz''@;'; put 'put ''LmNsb25lKCl9LHcucHJvdG90eXBlLmlzTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlfSx3LnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmluZWcoKX0sdy5wcm90b3R5cGUuaW5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzWmVy''@;'; put 'put ''bygpfHwodGhpcy5uZWdhdGl2ZV49MSksdGhpc30sdy5wcm90b3R5cGUuaXVvcj1mdW5jdGlvbihwKXtmb3IoO3RoaXMubGVuZ3RoPHAubGVuZ3RoOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7Zm9yKHZhciBiPTA7YjxwLmxlbmd0aDtiKyspdGhpcy53b3Jkc1tiXT10aGlzLndvcmRz''@;'; put 'put ''W2JdfHAud29yZHNbYl07cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaW9yPWZ1bmN0aW9uKHApe3JldHVybiBnKCEodGhpcy5uZWdhdGl2ZXxwLm5lZ2F0aXZlKSksdGhpcy5pdW9yKHApfSx3LnByb3RvdHlwZS5vcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5s''@;'; put 'put ''ZW5ndGg/dGhpcy5jbG9uZSgpLmlvcihwKTpwLmNsb25lKCkuaW9yKHRoaXMpfSx3LnByb3RvdHlwZS51b3I9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdW9yKHApOnAuY2xvbmUoKS5pdW9yKHRoaXMpfSx3LnByb3RvdHlwZS5pdWFuZD1m''@;'; put 'put ''dW5jdGlvbihwKXt2YXIgYjtiPXRoaXMubGVuZ3RoPnAubGVuZ3RoP3A6dGhpcztmb3IodmFyIHg9MDt4PGIubGVuZ3RoO3grKyl0aGlzLndvcmRzW3hdPXRoaXMud29yZHNbeF0mcC53b3Jkc1t4XTtyZXR1cm4gdGhpcy5sZW5ndGg9Yi5sZW5ndGgsdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlw''@;'; put 'put ''ZS5pYW5kPWZ1bmN0aW9uKHApe3JldHVybiBnKCEodGhpcy5uZWdhdGl2ZXxwLm5lZ2F0aXZlKSksdGhpcy5pdWFuZChwKX0sdy5wcm90b3R5cGUuYW5kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaWFuZChwKTpwLmNsb25lKCkuaWFuZCh0''@;'; put 'put ''aGlzKX0sdy5wcm90b3R5cGUudWFuZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLml1YW5kKHApOnAuY2xvbmUoKS5pdWFuZCh0aGlzKX0sdy5wcm90b3R5cGUuaXV4b3I9ZnVuY3Rpb24ocCl7dmFyIGIseDt0aGlzLmxlbmd0aD5wLmxlbmd0''@;'; put 'put ''aD8oYj10aGlzLHg9cCk6KGI9cCx4PXRoaXMpO2Zvcih2YXIgQz0wO0M8eC5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109Yi53b3Jkc1tDXV54LndvcmRzW0NdO2lmKHRoaXMhPT1iKWZvcig7QzxiLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT1iLndvcmRzW0NdO3JldHVybiB0aGlzLmxlbmd0''@;'; put 'put ''aD1iLmxlbmd0aCx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLml4b3I9ZnVuY3Rpb24ocCl7cmV0dXJuIGcoISh0aGlzLm5lZ2F0aXZlfHAubmVnYXRpdmUpKSx0aGlzLml1eG9yKHApfSx3LnByb3RvdHlwZS54b3I9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3Ro''@;'; put 'put ''aXMuY2xvbmUoKS5peG9yKHApOnAuY2xvbmUoKS5peG9yKHRoaXMpfSx3LnByb3RvdHlwZS51eG9yPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaXV4b3IocCk6cC5jbG9uZSgpLml1eG9yKHRoaXMpfSx3LnByb3RvdHlwZS5pbm90bj1mdW5j''@;'; put 'put ''dGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIGI9MHxNYXRoLmNlaWwocC8yNikseD1wJTI2O3RoaXMuX2V4cGFuZChiKSx4PjAmJmItLTtmb3IodmFyIEM9MDtDPGI7QysrKXRoaXMud29yZHNbQ109NjcxMDg4NjMmfnRoaXMud29yZHNbQ107cmV0dXJuIHg+MCYmKHRo''@;'; put 'put ''aXMud29yZHNbQ109fnRoaXMud29yZHNbQ10mNjcxMDg4NjM+PjI2LXgpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUubm90bj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlub3RuKHApfSx3LnByb3RvdHlwZS5zZXRuPWZ1bmN0aW9uKHAsYil7ZygibnVtYmVyIj09dHlwZW9m''@;'; put 'put ''IHAmJnA+PTApO3ZhciB4PXAvMjZ8MCxDPXAlMjY7cmV0dXJuIHRoaXMuX2V4cGFuZCh4KzEpLHRoaXMud29yZHNbeF09Yj90aGlzLndvcmRzW3hdfDE8PEM6dGhpcy53b3Jkc1t4XSZ+KDE8PEMpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihwKXt2YXIgYix4LEM7''@;'; put 'put ''aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1wLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsYj10aGlzLmlzdWIocCksdGhpcy5uZWdhdGl2ZV49MSx0aGlzLl9ub3JtU2lnbigpO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09cC5uZWdhdGl2ZSlyZXR1cm4gcC5uZWdhdGl2ZT0w''@;'; put 'put ''LGI9dGhpcy5pc3ViKHApLHAubmVnYXRpdmU9MSxiLl9ub3JtU2lnbigpO3RoaXMubGVuZ3RoPnAubGVuZ3RoPyh4PXRoaXMsQz1wKTooeD1wLEM9dGhpcyk7Zm9yKHZhciBUPTAsSD0wO0g8Qy5sZW5ndGg7SCsrKXRoaXMud29yZHNbSF09NjcxMDg4NjMmKGI9KDB8eC53b3Jkc1tIXSkrKDB8''@;'; put 'put ''Qy53b3Jkc1tIXSkrVCksVD1iPj4+MjY7Zm9yKDswIT09VCYmSDx4Lmxlbmd0aDtIKyspdGhpcy53b3Jkc1tIXT02NzEwODg2MyYoYj0oMHx4LndvcmRzW0hdKStUKSxUPWI+Pj4yNjtpZih0aGlzLmxlbmd0aD14Lmxlbmd0aCwwIT09VCl0aGlzLndvcmRzW3RoaXMubGVuZ3RoXT1ULHRoaXMu''@;'; put 'put ''bGVuZ3RoKys7ZWxzZSBpZih4IT09dGhpcylmb3IoO0g8eC5sZW5ndGg7SCsrKXRoaXMud29yZHNbSF09eC53b3Jkc1tIXTtyZXR1cm4gdGhpc30sdy5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHApe3ZhciBiO3JldHVybiAwIT09cC5uZWdhdGl2ZSYmMD09PXRoaXMubmVnYXRpdmU/KHAubmVn''@;'; put 'put ''YXRpdmU9MCxiPXRoaXMuc3ViKHApLHAubmVnYXRpdmVePTEsYik6MD09PXAubmVnYXRpdmUmJjAhPT10aGlzLm5lZ2F0aXZlPyh0aGlzLm5lZ2F0aXZlPTAsYj1wLnN1Yih0aGlzKSx0aGlzLm5lZ2F0aXZlPTEsYik6dGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhZGQocCk6''@;'; put 'put ''cC5jbG9uZSgpLmlhZGQodGhpcyl9LHcucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24ocCl7aWYoMCE9PXAubmVnYXRpdmUpe3AubmVnYXRpdmU9MDt2YXIgYj10aGlzLmlhZGQocCk7cmV0dXJuIHAubmVnYXRpdmU9MSxiLl9ub3JtU2lnbigpfWlmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0''@;'; put 'put ''aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkKHApLHRoaXMubmVnYXRpdmU9MSx0aGlzLl9ub3JtU2lnbigpO3ZhciBDLFQseD10aGlzLmNtcChwKTtpZigwPT09eClyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMubGVuZ3RoPTEsdGhpcy53b3Jkc1swXT0wLHRoaXM7eD4wPyhDPXRoaXMsVD1w''@;'; put 'put ''KTooQz1wLFQ9dGhpcyk7Zm9yKHZhciBIPTAsaj0wO2o8VC5sZW5ndGg7aisrKUg9KGI9KDB8Qy53b3Jkc1tqXSktKDB8VC53b3Jkc1tqXSkrSCk+PjI2LHRoaXMud29yZHNbal09NjcxMDg4NjMmYjtmb3IoOzAhPT1IJiZqPEMubGVuZ3RoO2orKylIPShiPSgwfEMud29yZHNbal0pK0gpPj4y''@;'; put 'put ''Nix0aGlzLndvcmRzW2pdPTY3MTA4ODYzJmI7aWYoMD09PUgmJmo8Qy5sZW5ndGgmJkMhPT10aGlzKWZvcig7ajxDLmxlbmd0aDtqKyspdGhpcy53b3Jkc1tqXT1DLndvcmRzW2pdO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxqKSxDIT09dGhpcyYmKHRoaXMubmVn''@;'; put 'put ''YXRpdmU9MSksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3ViKHApfTt2YXIgWT1mdW5jdGlvbihwLGIseCl7dmFyIEUsbSxBLEM9cC53b3JkcyxUPWIud29yZHMsSD14LndvcmRzLGo9MCxhZT0wfENbMF0sdGU9ODE5MSZh''@;'; put 'put ''ZSxzZT1hZT4+PjEzLHdlPTB8Q1sxXSxVZT04MTkxJndlLEplPXdlPj4+MTMsb3Q9MHxDWzJdLHhlPTgxOTEmb3QsdmU9b3Q+Pj4xMyxYZT0wfENbM10semU9ODE5MSZYZSxEZT1YZT4+PjEzLEZlPTB8Q1s0XSxPZT04MTkxJkZlLEllPUZlPj4+MTMsVmU9MHxDWzVdLGtlPTgxOTEmVmUsQWU9''@;'; put 'put ''VmU+Pj4xMyxfdD0wfENbNl0sbnQ9ODE5MSZfdCxRZT1fdD4+PjEzLHVuPTB8Q1s3XSx5dD04MTkxJnVuLE10PXVuPj4+MTMsRHQ9MHxDWzhdLGl0PTgxOTEmRHQsJGU9RHQ+Pj4xMyx0dD0wfENbOV0sSGU9ODE5MSZ0dCx1dD10dD4+PjEzLHF0PTB8VFswXSxSdD04MTkxJnF0LFB0PXF0Pj4+''@;'; put 'put ''MTMsY2k9MHxUWzFdLFF0PTgxOTEmY2ksc249Y2k+Pj4xMyxSaT0wfFRbMl0saG49ODE5MSZSaSxmdD1SaT4+PjEzLE9yPTB8VFszXSxXdD04MTkxJk9yLEF0PU9yPj4+MTMsUm49MHxUWzRdLHN0PTgxOTEmUm4sVXQ9Um4+Pj4xMyxyaT0wfFRbNV0sV2U9ODE5MSZyaSxUdD1yaT4+PjEzLG5y''@;'; put 'put ''PTB8VFs2XSxodD04MTkxJm5yLHh0PW5yPj4+MTMsam49MHxUWzddLHJuPTgxOTEmam4senQ9am4+Pj4xMyxoaT0wfFRbOF0sY249ODE5MSZoaSxmbj1oaT4+PjEzLElpPTB8VFs5XSxYdD04MTkxJklpLGVuPUlpPj4+MTM7eC5uZWdhdGl2ZT1wLm5lZ2F0aXZlXmIubmVnYXRpdmUseC5sZW5n''@;'; put 'put ''dGg9MTk7dmFyIHVhPShqKyhFPU1hdGguaW11bCh0ZSxSdCkpfDApKygoODE5MSYobT0obT1NYXRoLmltdWwodGUsUHQpKStNYXRoLmltdWwoc2UsUnQpfDApKTw8MTMpfDA7aj0oKEE9TWF0aC5pbXVsKHNlLFB0KSkrKG0+Pj4xMyl8MCkrKHVhPj4+MjYpfDAsdWEmPTY3MTA4ODYzLEU9TWF0''@;'; put 'put ''aC5pbXVsKFVlLFJ0KSxtPShtPU1hdGguaW11bChVZSxQdCkpK01hdGguaW11bChKZSxSdCl8MCxBPU1hdGguaW11bChKZSxQdCk7dmFyIEVpPShqKyhFPUUrTWF0aC5pbXVsKHRlLFF0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsc24pfDApK01hdGguaW11bChzZSxRdCl8''@;'; put 'put ''MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxzbil8MCkrKG0+Pj4xMyl8MCkrKEVpPj4+MjYpfDAsRWkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKHhlLFJ0KSxtPShtPU1hdGguaW11bCh4ZSxQdCkpK01hdGguaW11bCh2ZSxSdCl8MCxBPU1hdGguaW11bCh2ZSxQdCksRT1FK01hdGgu''@;'; put 'put ''aW11bChVZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLHNuKXwwKStNYXRoLmltdWwoSmUsUXQpfDAsQT1BK01hdGguaW11bChKZSxzbil8MDt2YXIgdnI9KGorKEU9RStNYXRoLmltdWwodGUsaG4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxmdCl8MCkrTWF0aC5pbXVs''@;'; put 'put ''KHNlLGhuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLGZ0KXwwKSsobT4+PjEzKXwwKSsodnI+Pj4yNil8MCx2ciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoemUsUnQpLG09KG09TWF0aC5pbXVsKHplLFB0KSkrTWF0aC5pbXVsKERlLFJ0KXwwLEE9TWF0aC5pbXVsKERlLFB0KSxF''@;'; put 'put ''PUUrTWF0aC5pbXVsKHhlLFF0KXwwLG09KG09bStNYXRoLmltdWwoeGUsc24pfDApK01hdGguaW11bCh2ZSxRdCl8MCxBPUErTWF0aC5pbXVsKHZlLHNuKXwwLEU9RStNYXRoLmltdWwoVWUsaG4pfDAsbT0obT1tK01hdGguaW11bChVZSxmdCl8MCkrTWF0aC5pbXVsKEplLGhuKXwwLEE9QStN''@;'; put 'put ''YXRoLmltdWwoSmUsZnQpfDA7dmFyIFduPShqKyhFPUUrTWF0aC5pbXVsKHRlLFd0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsQXQpfDApK01hdGguaW11bChzZSxXdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxBdCl8MCkrKG0+Pj4xMyl8MCkrKFduPj4+''@;'; put 'put ''MjYpfDAsV24mPTY3MTA4ODYzLEU9TWF0aC5pbXVsKE9lLFJ0KSxtPShtPU1hdGguaW11bChPZSxQdCkpK01hdGguaW11bChJZSxSdCl8MCxBPU1hdGguaW11bChJZSxQdCksRT1FK01hdGguaW11bCh6ZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKHplLHNuKXwwKStNYXRoLmltdWwoRGUsUXQp''@;'; put 'put ''fDAsQT1BK01hdGguaW11bChEZSxzbil8MCxFPUUrTWF0aC5pbXVsKHhlLGhuKXwwLG09KG09bStNYXRoLmltdWwoeGUsZnQpfDApK01hdGguaW11bCh2ZSxobil8MCxBPUErTWF0aC5pbXVsKHZlLGZ0KXwwLEU9RStNYXRoLmltdWwoVWUsV3QpfDAsbT0obT1tK01hdGguaW11bChVZSxBdCl8''@;'; put 'put ''MCkrTWF0aC5pbXVsKEplLFd0KXwwLEE9QStNYXRoLmltdWwoSmUsQXQpfDA7dmFyICRpPShqKyhFPUUrTWF0aC5pbXVsKHRlLHN0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsVXQpfDApK01hdGguaW11bChzZSxzdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChz''@;'; put 'put ''ZSxVdCl8MCkrKG0+Pj4xMyl8MCkrKCRpPj4+MjYpfDAsJGkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKGtlLFJ0KSxtPShtPU1hdGguaW11bChrZSxQdCkpK01hdGguaW11bChBZSxSdCl8MCxBPU1hdGguaW11bChBZSxQdCksRT1FK01hdGguaW11bChPZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVs''@;'; put 'put ''KE9lLHNuKXwwKStNYXRoLmltdWwoSWUsUXQpfDAsQT1BK01hdGguaW11bChJZSxzbil8MCxFPUUrTWF0aC5pbXVsKHplLGhuKXwwLG09KG09bStNYXRoLmltdWwoemUsZnQpfDApK01hdGguaW11bChEZSxobil8MCxBPUErTWF0aC5pbXVsKERlLGZ0KXwwLEU9RStNYXRoLmltdWwoeGUsV3Qp''@;'; put 'put ''fDAsbT0obT1tK01hdGguaW11bCh4ZSxBdCl8MCkrTWF0aC5pbXVsKHZlLFd0KXwwLEE9QStNYXRoLmltdWwodmUsQXQpfDAsRT1FK01hdGguaW11bChVZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLFV0KXwwKStNYXRoLmltdWwoSmUsc3QpfDAsQT1BK01hdGguaW11bChKZSxVdCl8MDt2''@;'; put 'put ''YXIgZWk9KGorKEU9RStNYXRoLmltdWwodGUsV2UpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxUdCl8MCkrTWF0aC5pbXVsKHNlLFdlKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLFR0KXwwKSsobT4+PjEzKXwwKSsoZWk+Pj4yNil8MCxlaSY9NjcxMDg4NjMs''@;'; put 'put ''RT1NYXRoLmltdWwobnQsUnQpLG09KG09TWF0aC5pbXVsKG50LFB0KSkrTWF0aC5pbXVsKFFlLFJ0KXwwLEE9TWF0aC5pbXVsKFFlLFB0KSxFPUUrTWF0aC5pbXVsKGtlLFF0KXwwLG09KG09bStNYXRoLmltdWwoa2Usc24pfDApK01hdGguaW11bChBZSxRdCl8MCxBPUErTWF0aC5pbXVsKEFl''@;'; put 'put ''LHNuKXwwLEU9RStNYXRoLmltdWwoT2UsaG4pfDAsbT0obT1tK01hdGguaW11bChPZSxmdCl8MCkrTWF0aC5pbXVsKEllLGhuKXwwLEE9QStNYXRoLmltdWwoSWUsZnQpfDAsRT1FK01hdGguaW11bCh6ZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKHplLEF0KXwwKStNYXRoLmltdWwoRGUsV3Qp''@;'; put 'put ''fDAsQT1BK01hdGguaW11bChEZSxBdCl8MCxFPUUrTWF0aC5pbXVsKHhlLHN0KXwwLG09KG09bStNYXRoLmltdWwoeGUsVXQpfDApK01hdGguaW11bCh2ZSxzdCl8MCxBPUErTWF0aC5pbXVsKHZlLFV0KXwwLEU9RStNYXRoLmltdWwoVWUsV2UpfDAsbT0obT1tK01hdGguaW11bChVZSxUdCl8''@;'; put 'put ''MCkrTWF0aC5pbXVsKEplLFdlKXwwLEE9QStNYXRoLmltdWwoSmUsVHQpfDA7dmFyIFFyPShqKyhFPUUrTWF0aC5pbXVsKHRlLGh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUseHQpfDApK01hdGguaW11bChzZSxodCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChz''@;'; put 'put ''ZSx4dCl8MCkrKG0+Pj4xMyl8MCkrKFFyPj4+MjYpfDAsUXImPTY3MTA4ODYzLEU9TWF0aC5pbXVsKHl0LFJ0KSxtPShtPU1hdGguaW11bCh5dCxQdCkpK01hdGguaW11bChNdCxSdCl8MCxBPU1hdGguaW11bChNdCxQdCksRT1FK01hdGguaW11bChudCxRdCl8MCxtPShtPW0rTWF0aC5pbXVs''@;'; put 'put ''KG50LHNuKXwwKStNYXRoLmltdWwoUWUsUXQpfDAsQT1BK01hdGguaW11bChRZSxzbil8MCxFPUUrTWF0aC5pbXVsKGtlLGhuKXwwLG09KG09bStNYXRoLmltdWwoa2UsZnQpfDApK01hdGguaW11bChBZSxobil8MCxBPUErTWF0aC5pbXVsKEFlLGZ0KXwwLEU9RStNYXRoLmltdWwoT2UsV3Qp''@;'; put 'put ''fDAsbT0obT1tK01hdGguaW11bChPZSxBdCl8MCkrTWF0aC5pbXVsKEllLFd0KXwwLEE9QStNYXRoLmltdWwoSWUsQXQpfDAsRT1FK01hdGguaW11bCh6ZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKHplLFV0KXwwKStNYXRoLmltdWwoRGUsc3QpfDAsQT1BK01hdGguaW11bChEZSxVdCl8MCxF''@;'; put 'put ''PUUrTWF0aC5pbXVsKHhlLFdlKXwwLG09KG09bStNYXRoLmltdWwoeGUsVHQpfDApK01hdGguaW11bCh2ZSxXZSl8MCxBPUErTWF0aC5pbXVsKHZlLFR0KXwwLEU9RStNYXRoLmltdWwoVWUsaHQpfDAsbT0obT1tK01hdGguaW11bChVZSx4dCl8MCkrTWF0aC5pbXVsKEplLGh0KXwwLEE9QStN''@;'; put 'put ''YXRoLmltdWwoSmUseHQpfDA7dmFyIFZpPShqKyhFPUUrTWF0aC5pbXVsKHRlLHJuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsenQpfDApK01hdGguaW11bChzZSxybil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSx6dCl8MCkrKG0+Pj4xMyl8MCkrKFZpPj4+''@;'; put 'put ''MjYpfDAsVmkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKGl0LFJ0KSxtPShtPU1hdGguaW11bChpdCxQdCkpK01hdGguaW11bCgkZSxSdCl8MCxBPU1hdGguaW11bCgkZSxQdCksRT1FK01hdGguaW11bCh5dCxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LHNuKXwwKStNYXRoLmltdWwoTXQsUXQp''@;'; put 'put ''fDAsQT1BK01hdGguaW11bChNdCxzbil8MCxFPUUrTWF0aC5pbXVsKG50LGhuKXwwLG09KG09bStNYXRoLmltdWwobnQsZnQpfDApK01hdGguaW11bChRZSxobil8MCxBPUErTWF0aC5pbXVsKFFlLGZ0KXwwLEU9RStNYXRoLmltdWwoa2UsV3QpfDAsbT0obT1tK01hdGguaW11bChrZSxBdCl8''@;'; put 'put ''MCkrTWF0aC5pbXVsKEFlLFd0KXwwLEE9QStNYXRoLmltdWwoQWUsQXQpfDAsRT1FK01hdGguaW11bChPZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKE9lLFV0KXwwKStNYXRoLmltdWwoSWUsc3QpfDAsQT1BK01hdGguaW11bChJZSxVdCl8MCxFPUUrTWF0aC5pbXVsKHplLFdlKXwwLG09KG09''@;'; put 'put ''bStNYXRoLmltdWwoemUsVHQpfDApK01hdGguaW11bChEZSxXZSl8MCxBPUErTWF0aC5pbXVsKERlLFR0KXwwLEU9RStNYXRoLmltdWwoeGUsaHQpfDAsbT0obT1tK01hdGguaW11bCh4ZSx4dCl8MCkrTWF0aC5pbXVsKHZlLGh0KXwwLEE9QStNYXRoLmltdWwodmUseHQpfDAsRT1FK01hdGgu''@;'; put 'put ''aW11bChVZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKFVlLHp0KXwwKStNYXRoLmltdWwoSmUscm4pfDAsQT1BK01hdGguaW11bChKZSx6dCl8MDt2YXIgTmk9KGorKEU9RStNYXRoLmltdWwodGUsY24pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxmbil8MCkrTWF0aC5pbXVs''@;'; put 'put ''KHNlLGNuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLGZuKXwwKSsobT4+PjEzKXwwKSsoTmk+Pj4yNil8MCxOaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsUnQpLG09KG09TWF0aC5pbXVsKEhlLFB0KSkrTWF0aC5pbXVsKHV0LFJ0KXwwLEE9TWF0aC5pbXVsKHV0LFB0KSxF''@;'; put 'put ''PUUrTWF0aC5pbXVsKGl0LFF0KXwwLG09KG09bStNYXRoLmltdWwoaXQsc24pfDApK01hdGguaW11bCgkZSxRdCl8MCxBPUErTWF0aC5pbXVsKCRlLHNuKXwwLEU9RStNYXRoLmltdWwoeXQsaG4pfDAsbT0obT1tK01hdGguaW11bCh5dCxmdCl8MCkrTWF0aC5pbXVsKE10LGhuKXwwLEE9QStN''@;'; put 'put ''YXRoLmltdWwoTXQsZnQpfDAsRT1FK01hdGguaW11bChudCxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKG50LEF0KXwwKStNYXRoLmltdWwoUWUsV3QpfDAsQT1BK01hdGguaW11bChRZSxBdCl8MCxFPUUrTWF0aC5pbXVsKGtlLHN0KXwwLG09KG09bStNYXRoLmltdWwoa2UsVXQpfDApK01hdGgu''@;'; put 'put ''aW11bChBZSxzdCl8MCxBPUErTWF0aC5pbXVsKEFlLFV0KXwwLEU9RStNYXRoLmltdWwoT2UsV2UpfDAsbT0obT1tK01hdGguaW11bChPZSxUdCl8MCkrTWF0aC5pbXVsKEllLFdlKXwwLEE9QStNYXRoLmltdWwoSWUsVHQpfDAsRT1FK01hdGguaW11bCh6ZSxodCl8MCxtPShtPW0rTWF0aC5p''@;'; put 'put ''bXVsKHplLHh0KXwwKStNYXRoLmltdWwoRGUsaHQpfDAsQT1BK01hdGguaW11bChEZSx4dCl8MCxFPUUrTWF0aC5pbXVsKHhlLHJuKXwwLG09KG09bStNYXRoLmltdWwoeGUsenQpfDApK01hdGguaW11bCh2ZSxybil8MCxBPUErTWF0aC5pbXVsKHZlLHp0KXwwLEU9RStNYXRoLmltdWwoVWUs''@;'; put 'put ''Y24pfDAsbT0obT1tK01hdGguaW11bChVZSxmbil8MCkrTWF0aC5pbXVsKEplLGNuKXwwLEE9QStNYXRoLmltdWwoSmUsZm4pfDA7dmFyIERhPShqKyhFPUUrTWF0aC5pbXVsKHRlLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsZW4pfDApK01hdGguaW11bChzZSxYdCl8''@;'; put 'put ''MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxlbil8MCkrKG0+Pj4xMyl8MCkrKERhPj4+MjYpfDAsRGEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLFF0KSxtPShtPU1hdGguaW11bChIZSxzbikpK01hdGguaW11bCh1dCxRdCl8MCxBPU1hdGguaW11bCh1dCxzbiksRT1FK01hdGgu''@;'; put 'put ''aW11bChpdCxobil8MCxtPShtPW0rTWF0aC5pbXVsKGl0LGZ0KXwwKStNYXRoLmltdWwoJGUsaG4pfDAsQT1BK01hdGguaW11bCgkZSxmdCl8MCxFPUUrTWF0aC5pbXVsKHl0LFd0KXwwLG09KG09bStNYXRoLmltdWwoeXQsQXQpfDApK01hdGguaW11bChNdCxXdCl8MCxBPUErTWF0aC5pbXVs''@;'; put 'put ''KE10LEF0KXwwLEU9RStNYXRoLmltdWwobnQsc3QpfDAsbT0obT1tK01hdGguaW11bChudCxVdCl8MCkrTWF0aC5pbXVsKFFlLHN0KXwwLEE9QStNYXRoLmltdWwoUWUsVXQpfDAsRT1FK01hdGguaW11bChrZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKGtlLFR0KXwwKStNYXRoLmltdWwoQWUs''@;'; put 'put ''V2UpfDAsQT1BK01hdGguaW11bChBZSxUdCl8MCxFPUUrTWF0aC5pbXVsKE9lLGh0KXwwLG09KG09bStNYXRoLmltdWwoT2UseHQpfDApK01hdGguaW11bChJZSxodCl8MCxBPUErTWF0aC5pbXVsKEllLHh0KXwwLEU9RStNYXRoLmltdWwoemUscm4pfDAsbT0obT1tK01hdGguaW11bCh6ZSx6''@;'; put 'put ''dCl8MCkrTWF0aC5pbXVsKERlLHJuKXwwLEE9QStNYXRoLmltdWwoRGUsenQpfDAsRT1FK01hdGguaW11bCh4ZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKHhlLGZuKXwwKStNYXRoLmltdWwodmUsY24pfDAsQT1BK01hdGguaW11bCh2ZSxmbil8MDt2YXIgTHI9KGorKEU9RStNYXRoLmltdWwo''@;'; put 'put ''VWUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChVZSxlbil8MCkrTWF0aC5pbXVsKEplLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKEplLGVuKXwwKSsobT4+PjEzKXwwKSsoTHI+Pj4yNil8MCxMciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsaG4pLG09KG09''@;'; put 'put ''TWF0aC5pbXVsKEhlLGZ0KSkrTWF0aC5pbXVsKHV0LGhuKXwwLEE9TWF0aC5pbXVsKHV0LGZ0KSxFPUUrTWF0aC5pbXVsKGl0LFd0KXwwLG09KG09bStNYXRoLmltdWwoaXQsQXQpfDApK01hdGguaW11bCgkZSxXdCl8MCxBPUErTWF0aC5pbXVsKCRlLEF0KXwwLEU9RStNYXRoLmltdWwoeXQs''@;'; put 'put ''c3QpfDAsbT0obT1tK01hdGguaW11bCh5dCxVdCl8MCkrTWF0aC5pbXVsKE10LHN0KXwwLEE9QStNYXRoLmltdWwoTXQsVXQpfDAsRT1FK01hdGguaW11bChudCxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKG50LFR0KXwwKStNYXRoLmltdWwoUWUsV2UpfDAsQT1BK01hdGguaW11bChRZSxUdCl8''@;'; put 'put ''MCxFPUUrTWF0aC5pbXVsKGtlLGh0KXwwLG09KG09bStNYXRoLmltdWwoa2UseHQpfDApK01hdGguaW11bChBZSxodCl8MCxBPUErTWF0aC5pbXVsKEFlLHh0KXwwLEU9RStNYXRoLmltdWwoT2Uscm4pfDAsbT0obT1tK01hdGguaW11bChPZSx6dCl8MCkrTWF0aC5pbXVsKEllLHJuKXwwLEE9''@;'; put 'put ''QStNYXRoLmltdWwoSWUsenQpfDAsRT1FK01hdGguaW11bCh6ZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKHplLGZuKXwwKStNYXRoLmltdWwoRGUsY24pfDAsQT1BK01hdGguaW11bChEZSxmbil8MDt2YXIgV2k9KGorKEU9RStNYXRoLmltdWwoeGUsWHQpfDApfDApKygoODE5MSYobT0obT1t''@;'; put 'put ''K01hdGguaW11bCh4ZSxlbil8MCkrTWF0aC5pbXVsKHZlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHZlLGVuKXwwKSsobT4+PjEzKXwwKSsoV2k+Pj4yNil8MCxXaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsV3QpLG09KG09TWF0aC5pbXVsKEhlLEF0KSkrTWF0aC5pbXVs''@;'; put 'put ''KHV0LFd0KXwwLEE9TWF0aC5pbXVsKHV0LEF0KSxFPUUrTWF0aC5pbXVsKGl0LHN0KXwwLG09KG09bStNYXRoLmltdWwoaXQsVXQpfDApK01hdGguaW11bCgkZSxzdCl8MCxBPUErTWF0aC5pbXVsKCRlLFV0KXwwLEU9RStNYXRoLmltdWwoeXQsV2UpfDAsbT0obT1tK01hdGguaW11bCh5dCxU''@;'; put 'put ''dCl8MCkrTWF0aC5pbXVsKE10LFdlKXwwLEE9QStNYXRoLmltdWwoTXQsVHQpfDAsRT1FK01hdGguaW11bChudCxodCl8MCxtPShtPW0rTWF0aC5pbXVsKG50LHh0KXwwKStNYXRoLmltdWwoUWUsaHQpfDAsQT1BK01hdGguaW11bChRZSx4dCl8MCxFPUUrTWF0aC5pbXVsKGtlLHJuKXwwLG09''@;'; put 'put ''KG09bStNYXRoLmltdWwoa2UsenQpfDApK01hdGguaW11bChBZSxybil8MCxBPUErTWF0aC5pbXVsKEFlLHp0KXwwLEU9RStNYXRoLmltdWwoT2UsY24pfDAsbT0obT1tK01hdGguaW11bChPZSxmbil8MCkrTWF0aC5pbXVsKEllLGNuKXwwLEE9QStNYXRoLmltdWwoSWUsZm4pfDA7dmFyIHBh''@;'; put 'put ''PShqKyhFPUUrTWF0aC5pbXVsKHplLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoemUsZW4pfDApK01hdGguaW11bChEZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChEZSxlbil8MCkrKG0+Pj4xMyl8MCkrKHBhPj4+MjYpfDAscGEmPTY3MTA4ODYzLEU9TWF0''@;'; put 'put ''aC5pbXVsKEhlLHN0KSxtPShtPU1hdGguaW11bChIZSxVdCkpK01hdGguaW11bCh1dCxzdCl8MCxBPU1hdGguaW11bCh1dCxVdCksRT1FK01hdGguaW11bChpdCxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKGl0LFR0KXwwKStNYXRoLmltdWwoJGUsV2UpfDAsQT1BK01hdGguaW11bCgkZSxUdCl8''@;'; put 'put ''MCxFPUUrTWF0aC5pbXVsKHl0LGh0KXwwLG09KG09bStNYXRoLmltdWwoeXQseHQpfDApK01hdGguaW11bChNdCxodCl8MCxBPUErTWF0aC5pbXVsKE10LHh0KXwwLEU9RStNYXRoLmltdWwobnQscm4pfDAsbT0obT1tK01hdGguaW11bChudCx6dCl8MCkrTWF0aC5pbXVsKFFlLHJuKXwwLEE9''@;'; put 'put ''QStNYXRoLmltdWwoUWUsenQpfDAsRT1FK01hdGguaW11bChrZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKGtlLGZuKXwwKStNYXRoLmltdWwoQWUsY24pfDAsQT1BK01hdGguaW11bChBZSxmbil8MDt2YXIgUW49KGorKEU9RStNYXRoLmltdWwoT2UsWHQpfDApfDApKygoODE5MSYobT0obT1t''@;'; put 'put ''K01hdGguaW11bChPZSxlbil8MCkrTWF0aC5pbXVsKEllLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKEllLGVuKXwwKSsobT4+PjEzKXwwKSsoUW4+Pj4yNil8MCxRbiY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsV2UpLG09KG09TWF0aC5pbXVsKEhlLFR0KSkrTWF0aC5pbXVs''@;'; put 'put ''KHV0LFdlKXwwLEE9TWF0aC5pbXVsKHV0LFR0KSxFPUUrTWF0aC5pbXVsKGl0LGh0KXwwLG09KG09bStNYXRoLmltdWwoaXQseHQpfDApK01hdGguaW11bCgkZSxodCl8MCxBPUErTWF0aC5pbXVsKCRlLHh0KXwwLEU9RStNYXRoLmltdWwoeXQscm4pfDAsbT0obT1tK01hdGguaW11bCh5dCx6''@;'; put 'put ''dCl8MCkrTWF0aC5pbXVsKE10LHJuKXwwLEE9QStNYXRoLmltdWwoTXQsenQpfDAsRT1FK01hdGguaW11bChudCxjbil8MCxtPShtPW0rTWF0aC5pbXVsKG50LGZuKXwwKStNYXRoLmltdWwoUWUsY24pfDAsQT1BK01hdGguaW11bChRZSxmbil8MDt2YXIgbGE9KGorKEU9RStNYXRoLmltdWwo''@;'; put 'put ''a2UsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChrZSxlbil8MCkrTWF0aC5pbXVsKEFlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKEFlLGVuKXwwKSsobT4+PjEzKXwwKSsobGE+Pj4yNil8MCxsYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsaHQpLG09KG09''@;'; put 'put ''TWF0aC5pbXVsKEhlLHh0KSkrTWF0aC5pbXVsKHV0LGh0KXwwLEE9TWF0aC5pbXVsKHV0LHh0KSxFPUUrTWF0aC5pbXVsKGl0LHJuKXwwLG09KG09bStNYXRoLmltdWwoaXQsenQpfDApK01hdGguaW11bCgkZSxybil8MCxBPUErTWF0aC5pbXVsKCRlLHp0KXwwLEU9RStNYXRoLmltdWwoeXQs''@;'; put 'put ''Y24pfDAsbT0obT1tK01hdGguaW11bCh5dCxmbil8MCkrTWF0aC5pbXVsKE10LGNuKXwwLEE9QStNYXRoLmltdWwoTXQsZm4pfDA7dmFyIHlhPShqKyhFPUUrTWF0aC5pbXVsKG50LFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobnQsZW4pfDApK01hdGguaW11bChRZSxYdCl8''@;'; put 'put ''MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChRZSxlbil8MCkrKG0+Pj4xMyl8MCkrKHlhPj4+MjYpfDAseWEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLHJuKSxtPShtPU1hdGguaW11bChIZSx6dCkpK01hdGguaW11bCh1dCxybil8MCxBPU1hdGguaW11bCh1dCx6dCksRT1FK01hdGgu''@;'; put 'put ''aW11bChpdCxjbil8MCxtPShtPW0rTWF0aC5pbXVsKGl0LGZuKXwwKStNYXRoLmltdWwoJGUsY24pfDAsQT1BK01hdGguaW11bCgkZSxmbil8MDt2YXIgTGE9KGorKEU9RStNYXRoLmltdWwoeXQsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh5dCxlbil8MCkrTWF0aC5pbXVs''@;'; put 'put ''KE10LFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKE10LGVuKXwwKSsobT4+PjEzKXwwKSsoTGE+Pj4yNil8MCxMYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsY24pLG09KG09TWF0aC5pbXVsKEhlLGZuKSkrTWF0aC5pbXVsKHV0LGNuKXwwLEE9TWF0aC5pbXVsKHV0LGZuKTt2''@;'; put 'put ''YXIgRmE9KGorKEU9RStNYXRoLmltdWwoaXQsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChpdCxlbil8MCkrTWF0aC5pbXVsKCRlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKCRlLGVuKXwwKSsobT4+PjEzKXwwKSsoRmE+Pj4yNil8MCxGYSY9NjcxMDg4NjM7''@;'; put 'put ''dmFyIHRpPShqKyhFPU1hdGguaW11bChIZSxYdCkpfDApKygoODE5MSYobT0obT1NYXRoLmltdWwoSGUsZW4pKStNYXRoLmltdWwodXQsWHQpfDApKTw8MTMpfDA7cmV0dXJuIGo9KChBPU1hdGguaW11bCh1dCxlbikpKyhtPj4+MTMpfDApKyh0aT4+PjI2KXwwLHRpJj02NzEwODg2MyxIWzBd''@;'; put 'put ''PXVhLEhbMV09RWksSFsyXT12cixIWzNdPVduLEhbNF09JGksSFs1XT1laSxIWzZdPVFyLEhbN109VmksSFs4XT1OaSxIWzldPURhLEhbMTBdPUxyLEhbMTFdPVdpLEhbMTJdPXBhLEhbMTNdPVFuLEhbMTRdPWxhLEhbMTVdPXlhLEhbMTZdPUxhLEhbMTddPUZhLEhbMThdPXRpLDAhPT1qJiYo''@;'; put 'put ''SFsxOV09aix4Lmxlbmd0aCsrKSx4fTtmdW5jdGlvbiBlZShWLHAsYil7cmV0dXJuKG5ldyBKKS5tdWxwKFYscCxiKX1mdW5jdGlvbiBKKFYscCl7dGhpcy54PVYsdGhpcy55PXB9TWF0aC5pbXVsfHwoWT1XKSx3LnByb3RvdHlwZS5tdWxUbz1mdW5jdGlvbihwLGIpe3ZhciB4LEM9dGhpcy5s''@;'; put 'put ''ZW5ndGgrcC5sZW5ndGg7cmV0dXJuIHg9MTA9PT10aGlzLmxlbmd0aCYmMTA9PT1wLmxlbmd0aD9ZKHRoaXMscCxiKTpDPDYzP1codGhpcyxwLGIpOkM8MTAyND9mdW5jdGlvbiBxKFYscCxiKXtiLm5lZ2F0aXZlPXAubmVnYXRpdmVeVi5uZWdhdGl2ZSxiLmxlbmd0aD1WLmxlbmd0aCtwLmxl''@;'; put 'put ''bmd0aDtmb3IodmFyIHg9MCxDPTAsVD0wO1Q8Yi5sZW5ndGgtMTtUKyspe3ZhciBIPUM7Qz0wO2Zvcih2YXIgaj02NzEwODg2MyZ4LEU9TWF0aC5taW4oVCxwLmxlbmd0aC0xKSxtPU1hdGgubWF4KDAsVC1WLmxlbmd0aCsxKTttPD1FO20rKyl7dmFyIHNlPSgwfFYud29yZHNbVC1tXSkqKDB8''@;'; put 'put ''cC53b3Jkc1ttXSksd2U9NjcxMDg4NjMmc2U7aj02NzEwODg2MyYod2U9d2UranwwKSxDKz0oSD0oSD1IKyhzZS82NzEwODg2NHwwKXwwKSsod2U+Pj4yNil8MCk+Pj4yNixIJj02NzEwODg2M31iLndvcmRzW1RdPWoseD1ILEg9Q31yZXR1cm4gMCE9PXg/Yi53b3Jkc1tUXT14OmIubGVuZ3Ro''@;'; put 'put ''LS0sYi5zdHJpcCgpfSh0aGlzLHAsYik6ZWUodGhpcyxwLGIpLHh9LEoucHJvdG90eXBlLm1ha2VSQlQ9ZnVuY3Rpb24ocCl7Zm9yKHZhciBiPW5ldyBBcnJheShwKSx4PXcucHJvdG90eXBlLl9jb3VudEJpdHMocCktMSxDPTA7QzxwO0MrKyliW0NdPXRoaXMucmV2QmluKEMseCxwKTtyZXR1''@;'; put 'put ''cm4gYn0sSi5wcm90b3R5cGUucmV2QmluPWZ1bmN0aW9uKHAsYix4KXtpZigwPT09cHx8cD09PXgtMSlyZXR1cm4gcDtmb3IodmFyIEM9MCxUPTA7VDxiO1QrKylDfD0oMSZwKTw8Yi1ULTEscD4+PTE7cmV0dXJuIEN9LEoucHJvdG90eXBlLnBlcm11dGU9ZnVuY3Rpb24ocCxiLHgsQyxULEgp''@;'; put 'put ''e2Zvcih2YXIgaj0wO2o8SDtqKyspQ1tqXT1iW3Bbal1dLFRbal09eFtwW2pdXX0sSi5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKHAsYix4LEMsVCxIKXt0aGlzLnBlcm11dGUoSCxwLGIseCxDLFQpO2Zvcih2YXIgaj0xO2o8VDtqPDw9MSlmb3IodmFyIEU9ajw8MSxtPU1hdGguY29z''@;'; put 'put ''KDIqTWF0aC5QSS9FKSxBPU1hdGguc2luKDIqTWF0aC5QSS9FKSxhZT0wO2FlPFQ7YWUrPUUpZm9yKHZhciB0ZT1tLHNlPUEsd2U9MDt3ZTxqO3dlKyspe3ZhciBVZT14W2FlK3dlXSxKZT1DW2FlK3dlXSxvdD14W2FlK3dlK2pdLHhlPUNbYWUrd2Ural0sdmU9dGUqb3Qtc2UqeGU7eGU9dGUq''@;'; put 'put ''eGUrc2Uqb3QseFthZSt3ZV09VWUrKG90PXZlKSxDW2FlK3dlXT1KZSt4ZSx4W2FlK3dlK2pdPVVlLW90LENbYWUrd2Ural09SmUteGUsd2UhPT1FJiYodmU9bSp0ZS1BKnNlLHNlPW0qc2UrQSp0ZSx0ZT12ZSl9fSxKLnByb3RvdHlwZS5ndWVzc0xlbjEzYj1mdW5jdGlvbihwLGIpe3ZhciB4''@;'; put 'put ''PTF8TWF0aC5tYXgoYixwKSxDPTEmeCxUPTA7Zm9yKHg9eC8yfDA7eDt4Pj4+PTEpVCsrO3JldHVybiAxPDxUKzErQ30sSi5wcm90b3R5cGUuY29uanVnYXRlPWZ1bmN0aW9uKHAsYix4KXtpZighKHg8PTEpKWZvcih2YXIgQz0wO0M8eC8yO0MrKyl7dmFyIFQ9cFtDXTtwW0NdPXBbeC1DLTFd''@;'; put 'put ''LHBbeC1DLTFdPVQsVD1iW0NdLGJbQ109LWJbeC1DLTFdLGJbeC1DLTFdPS1UfX0sSi5wcm90b3R5cGUubm9ybWFsaXplMTNiPWZ1bmN0aW9uKHAsYil7Zm9yKHZhciB4PTAsQz0wO0M8Yi8yO0MrKyl7dmFyIFQ9ODE5MipNYXRoLnJvdW5kKHBbMipDKzFdL2IpK01hdGgucm91bmQocFsyKkNd''@;'; put 'put ''L2IpK3g7cFtDXT02NzEwODg2MyZULHg9VDw2NzEwODg2ND8wOlQvNjcxMDg4NjR8MH1yZXR1cm4gcH0sSi5wcm90b3R5cGUuY29udmVydDEzYj1mdW5jdGlvbihwLGIseCxDKXtmb3IodmFyIFQ9MCxIPTA7SDxiO0grKyl4WzIqSF09ODE5MSYoVCs9MHxwW0hdKSx4WzIqSCsxXT04MTkxJihU''@;'; put 'put ''Pj4+PTEzKSxUPj4+PTEzO2ZvcihIPTIqYjtIPEM7KytIKXhbSF09MDtnKDA9PT1UKSxnKCEoLTgxOTImVCkpfSxKLnByb3RvdHlwZS5zdHViPWZ1bmN0aW9uKHApe2Zvcih2YXIgYj1uZXcgQXJyYXkocCkseD0wO3g8cDt4KyspYlt4XT0wO3JldHVybiBifSxKLnByb3RvdHlwZS5tdWxwPWZ1''@;'; put 'put ''bmN0aW9uKHAsYix4KXt2YXIgQz0yKnRoaXMuZ3Vlc3NMZW4xM2IocC5sZW5ndGgsYi5sZW5ndGgpLFQ9dGhpcy5tYWtlUkJUKEMpLEg9dGhpcy5zdHViKEMpLGo9bmV3IEFycmF5KEMpLEU9bmV3IEFycmF5KEMpLG09bmV3IEFycmF5KEMpLEE9bmV3IEFycmF5KEMpLGFlPW5ldyBBcnJheShD''@;'; put 'put ''KSx0ZT1uZXcgQXJyYXkoQyksc2U9eC53b3JkcztzZS5sZW5ndGg9Qyx0aGlzLmNvbnZlcnQxM2IocC53b3JkcyxwLmxlbmd0aCxqLEMpLHRoaXMuY29udmVydDEzYihiLndvcmRzLGIubGVuZ3RoLEEsQyksdGhpcy50cmFuc2Zvcm0oaixILEUsbSxDLFQpLHRoaXMudHJhbnNmb3JtKEEsSCxh''@;'; put 'put ''ZSx0ZSxDLFQpO2Zvcih2YXIgd2U9MDt3ZTxDO3dlKyspe3ZhciBVZT1FW3dlXSphZVt3ZV0tbVt3ZV0qdGVbd2VdO21bd2VdPUVbd2VdKnRlW3dlXSttW3dlXSphZVt3ZV0sRVt3ZV09VWV9cmV0dXJuIHRoaXMuY29uanVnYXRlKEUsbSxDKSx0aGlzLnRyYW5zZm9ybShFLG0sc2UsSCxDLFQp''@;'; put 'put ''LHRoaXMuY29uanVnYXRlKHNlLEgsQyksdGhpcy5ub3JtYWxpemUxM2Ioc2UsQykseC5uZWdhdGl2ZT1wLm5lZ2F0aXZlXmIubmVnYXRpdmUseC5sZW5ndGg9cC5sZW5ndGgrYi5sZW5ndGgseC5zdHJpcCgpfSx3LnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24ocCl7dmFyIGI9bmV3IHcobnVsbCk7''@;'; put 'put ''cmV0dXJuIGIud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK3AubGVuZ3RoKSx0aGlzLm11bFRvKHAsYil9LHcucHJvdG90eXBlLm11bGY9ZnVuY3Rpb24ocCl7dmFyIGI9bmV3IHcobnVsbCk7cmV0dXJuIGIud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK3AubGVuZ3RoKSxlZSh0aGlz''@;'; put 'put ''LHAsYil9LHcucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5tdWxUbyhwLHRoaXMpfSx3LnByb3RvdHlwZS5pbXVsbj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCksZyhwPDY3MTA4ODY0KTtmb3IodmFyIGI9MCx4PTA7eDx0aGlzLmxlbmd0''@;'; put 'put ''aDt4Kyspe3ZhciBDPSgwfHRoaXMud29yZHNbeF0pKnAsVD0oNjcxMDg4NjMmQykrKDY3MTA4ODYzJmIpO2I+Pj0yNixiKz1DLzY3MTA4ODY0fDAsYis9VD4+PjI2LHRoaXMud29yZHNbeF09NjcxMDg4NjMmVH1yZXR1cm4gMCE9PWImJih0aGlzLndvcmRzW3hdPWIsdGhpcy5sZW5ndGgrKyks''@;'; put 'put ''dGhpcy5sZW5ndGg9MD09PXA/MTp0aGlzLmxlbmd0aCx0aGlzfSx3LnByb3RvdHlwZS5tdWxuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaW11bG4ocCl9LHcucHJvdG90eXBlLnNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm11bCh0aGlzKX0sdy5wcm90b3R5cGUuaXNxcj1m''@;'; put 'put ''dW5jdGlvbigpe3JldHVybiB0aGlzLmltdWwodGhpcy5jbG9uZSgpKX0sdy5wcm90b3R5cGUucG93PWZ1bmN0aW9uKHApe3ZhciBiPWZ1bmN0aW9uIFUoVil7Zm9yKHZhciBwPW5ldyBBcnJheShWLmJpdExlbmd0aCgpKSxiPTA7YjxwLmxlbmd0aDtiKyspe3ZhciBDPWIlMjY7cFtiXT0oVi53''@;'; put 'put ''b3Jkc1tiLzI2fDBdJjE8PEMpPj4+Q31yZXR1cm4gcH0ocCk7aWYoMD09PWIubGVuZ3RoKXJldHVybiBuZXcgdygxKTtmb3IodmFyIHg9dGhpcyxDPTA7QzxiLmxlbmd0aCYmMD09PWJbQ107QysrLHg9eC5zcXIoKSk7aWYoKytDPGIubGVuZ3RoKWZvcih2YXIgVD14LnNxcigpO0M8Yi5sZW5n''@;'; put 'put ''dGg7QysrLFQ9VC5zcXIoKSkwIT09YltDXSYmKHg9eC5tdWwoVCkpO3JldHVybiB4fSx3LnByb3RvdHlwZS5pdXNobG49ZnVuY3Rpb24ocCl7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApO3ZhciBULGI9cCUyNix4PShwLWIpLzI2LEM9NjcxMDg4NjM+Pj4yNi1iPDwyNi1iO2lmKDAhPT1i''@;'; put 'put ''KXt2YXIgSD0wO2ZvcihUPTA7VDx0aGlzLmxlbmd0aDtUKyspe3ZhciBqPXRoaXMud29yZHNbVF0mQzt0aGlzLndvcmRzW1RdPSgwfHRoaXMud29yZHNbVF0pLWo8PGJ8SCxIPWo+Pj4yNi1ifUgmJih0aGlzLndvcmRzW1RdPUgsdGhpcy5sZW5ndGgrKyl9aWYoMCE9PXgpe2ZvcihUPXRoaXMu''@;'; put 'put ''bGVuZ3RoLTE7VD49MDtULS0pdGhpcy53b3Jkc1tUK3hdPXRoaXMud29yZHNbVF07Zm9yKFQ9MDtUPHg7VCsrKXRoaXMud29yZHNbVF09MDt0aGlzLmxlbmd0aCs9eH1yZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pc2hsbj1mdW5jdGlvbihwKXtyZXR1cm4gZygwPT09dGhpcy5u''@;'; put 'put ''ZWdhdGl2ZSksdGhpcy5pdXNobG4ocCl9LHcucHJvdG90eXBlLml1c2hybj1mdW5jdGlvbihwLGIseCl7dmFyIEM7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApLEM9Yj8oYi1iJTI2KS8yNjowO3ZhciBUPXAlMjYsSD1NYXRoLm1pbigocC1UKS8yNix0aGlzLmxlbmd0aCksaj02NzEwODg2''@;'; put 'put ''M142NzEwODg2Mz4+PlQ8PFQsRT14O2lmKEMtPUgsQz1NYXRoLm1heCgwLEMpLEUpe2Zvcih2YXIgbT0wO208SDttKyspRS53b3Jkc1ttXT10aGlzLndvcmRzW21dO0UubGVuZ3RoPUh9aWYoMCE9PUgpaWYodGhpcy5sZW5ndGg+SClmb3IodGhpcy5sZW5ndGgtPUgsbT0wO208dGhpcy5sZW5n''@;'; put 'put ''dGg7bSsrKXRoaXMud29yZHNbbV09dGhpcy53b3Jkc1ttK0hdO2Vsc2UgdGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTE7dmFyIEE9MDtmb3IobT10aGlzLmxlbmd0aC0xO20+PTAmJigwIT09QXx8bT49Qyk7bS0tKXt2YXIgYWU9MHx0aGlzLndvcmRzW21dO3RoaXMud29yZHNbbV09QTw8''@;'; put 'put ''MjYtVHxhZT4+PlQsQT1hZSZqfXJldHVybiBFJiYwIT09QSYmKEUud29yZHNbRS5sZW5ndGgrK109QSksMD09PXRoaXMubGVuZ3RoJiYodGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTEpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXNocm49ZnVuY3Rpb24ocCxiLHgpe3JldHVybiBn''@;'; put 'put ''KDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hybihwLGIseCl9LHcucHJvdG90eXBlLnNobG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbihwKX0sdy5wcm90b3R5cGUudXNobG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNobG4ocCl9LHcucHJv''@;'; put 'put ''dG90eXBlLnNocm49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hybihwKX0sdy5wcm90b3R5cGUudXNocm49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNocm4ocCl9LHcucHJvdG90eXBlLnRlc3RuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBw''@;'; put 'put ''JiZwPj0wKTt2YXIgYj1wJTI2LHg9KHAtYikvMjY7cmV0dXJuISh0aGlzLmxlbmd0aDw9eHx8ISh0aGlzLndvcmRzW3hdJjE8PGIpKX0sdy5wcm90b3R5cGUuaW1hc2tuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKTt2YXIgYj1wJTI2LHg9KHAtYikvMjY7cmV0dXJu''@;'; put 'put ''IGcoMD09PXRoaXMubmVnYXRpdmUsImltYXNrbiB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmUgbnVtYmVycyIpLHRoaXMubGVuZ3RoPD14P3RoaXM6KDAhPT1iJiZ4KyssdGhpcy5sZW5ndGg9TWF0aC5taW4oeCx0aGlzLmxlbmd0aCksMCE9PWImJih0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFd''@;'; put 'put ''Jj02NzEwODg2M142NzEwODg2Mz4+PmI8PGIpLHRoaXMuc3RyaXAoKSl9LHcucHJvdG90eXBlLm1hc2tuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaW1hc2tuKHApfSx3LnByb3RvdHlwZS5pYWRkbj1mdW5jdGlvbihwKXtyZXR1cm4gZygibnVtYmVyIj09dHlwZW9mIHApLGco''@;'; put 'put ''cDw2NzEwODg2NCkscDwwP3RoaXMuaXN1Ym4oLXApOjAhPT10aGlzLm5lZ2F0aXZlPzE9PT10aGlzLmxlbmd0aCYmKDB8dGhpcy53b3Jkc1swXSk8cD8odGhpcy53b3Jkc1swXT1wLSgwfHRoaXMud29yZHNbMF0pLHRoaXMubmVnYXRpdmU9MCx0aGlzKToodGhpcy5uZWdhdGl2ZT0wLHRoaXMu''@;'; put 'put ''aXN1Ym4ocCksdGhpcy5uZWdhdGl2ZT0xLHRoaXMpOnRoaXMuX2lhZGRuKHApfSx3LnByb3RvdHlwZS5faWFkZG49ZnVuY3Rpb24ocCl7dGhpcy53b3Jkc1swXSs9cDtmb3IodmFyIGI9MDtiPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW2JdPj02NzEwODg2NDtiKyspdGhpcy53b3Jkc1tiXS09''@;'; put 'put ''NjcxMDg4NjQsYj09PXRoaXMubGVuZ3RoLTE/dGhpcy53b3Jkc1tiKzFdPTE6dGhpcy53b3Jkc1tiKzFdKys7cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLGIrMSksdGhpc30sdy5wcm90b3R5cGUuaXN1Ym49ZnVuY3Rpb24ocCl7aWYoZygibnVtYmVyIj09dHlwZW9m''@;'; put 'put ''IHApLGcocDw2NzEwODg2NCkscDwwKXJldHVybiB0aGlzLmlhZGRuKC1wKTtpZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZG4ocCksdGhpcy5uZWdhdGl2ZT0xLHRoaXM7aWYodGhpcy53b3Jkc1swXS09cCwxPT09dGhpcy5sZW5ndGgmJnRoaXMu''@;'; put 'put ''d29yZHNbMF08MCl0aGlzLndvcmRzWzBdPS10aGlzLndvcmRzWzBdLHRoaXMubmVnYXRpdmU9MTtlbHNlIGZvcih2YXIgYj0wO2I8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbYl08MDtiKyspdGhpcy53b3Jkc1tiXSs9NjcxMDg4NjQsdGhpcy53b3Jkc1tiKzFdLT0xO3JldHVybiB0aGlzLnN0''@;'; put 'put ''cmlwKCl9LHcucHJvdG90eXBlLmFkZG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWRkbihwKX0sdy5wcm90b3R5cGUuc3Vibj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWJuKHApfSx3LnByb3RvdHlwZS5pYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMu''@;'; put 'put ''bmVnYXRpdmU9MCx0aGlzfSx3LnByb3RvdHlwZS5hYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhYnMoKX0sdy5wcm90b3R5cGUuX2lzaGxuc3VibXVsPWZ1bmN0aW9uKHAsYix4KXt2YXIgVDt0aGlzLl9leHBhbmQocC5sZW5ndGgreCk7dmFyIEgsaj0wO2ZvcihUPTA7VDxw''@;'; put 'put ''Lmxlbmd0aDtUKyspe0g9KDB8dGhpcy53b3Jkc1tUK3hdKStqO3ZhciBFPSgwfHAud29yZHNbVF0pKmI7aj0oKEgtPTY3MTA4ODYzJkUpPj4yNiktKEUvNjcxMDg4NjR8MCksdGhpcy53b3Jkc1tUK3hdPTY3MTA4ODYzJkh9Zm9yKDtUPHRoaXMubGVuZ3RoLXg7VCsrKWo9KEg9KDB8dGhpcy53''@;'; put 'put ''b3Jkc1tUK3hdKStqKT4+MjYsdGhpcy53b3Jkc1tUK3hdPTY3MTA4ODYzJkg7aWYoMD09PWopcmV0dXJuIHRoaXMuc3RyaXAoKTtmb3IoZygtMT09PWopLGo9MCxUPTA7VDx0aGlzLmxlbmd0aDtUKyspaj0oSD0tKDB8dGhpcy53b3Jkc1tUXSkraik+PjI2LHRoaXMud29yZHNbVF09NjcxMDg4''@;'; put 'put ''NjMmSDtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0xLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuX3dvcmREaXY9ZnVuY3Rpb24ocCxiKXt2YXIgeCxDPXRoaXMuY2xvbmUoKSxUPXAsSD0wfFQud29yZHNbVC5sZW5ndGgtMV07MCE9KHg9MjYtdGhpcy5fY291bnRCaXRzKEgpKSYmKFQ9VC51c2hs''@;'; put 'put ''bih4KSxDLml1c2hsbih4KSxIPTB8VC53b3Jkc1tULmxlbmd0aC0xXSk7dmFyIG0sRT1DLmxlbmd0aC1ULmxlbmd0aDtpZigibW9kIiE9PWIpeyhtPW5ldyB3KG51bGwpKS5sZW5ndGg9RSsxLG0ud29yZHM9bmV3IEFycmF5KG0ubGVuZ3RoKTtmb3IodmFyIEE9MDtBPG0ubGVuZ3RoO0ErKylt''@;'; put 'put ''LndvcmRzW0FdPTB9dmFyIGFlPUMuY2xvbmUoKS5faXNobG5zdWJtdWwoVCwxLEUpOzA9PT1hZS5uZWdhdGl2ZSYmKEM9YWUsbSYmKG0ud29yZHNbRV09MSkpO2Zvcih2YXIgdGU9RS0xO3RlPj0wO3RlLS0pe3ZhciBzZT02NzEwODg2NCooMHxDLndvcmRzW1QubGVuZ3RoK3RlXSkrKDB8Qy53''@;'; put 'put ''b3Jkc1tULmxlbmd0aCt0ZS0xXSk7Zm9yKHNlPU1hdGgubWluKHNlL0h8MCw2NzEwODg2MyksQy5faXNobG5zdWJtdWwoVCxzZSx0ZSk7MCE9PUMubmVnYXRpdmU7KXNlLS0sQy5uZWdhdGl2ZT0wLEMuX2lzaGxuc3VibXVsKFQsMSx0ZSksQy5pc1plcm8oKXx8KEMubmVnYXRpdmVePTEpO20m''@;'; put 'put ''JihtLndvcmRzW3RlXT1zZSl9cmV0dXJuIG0mJm0uc3RyaXAoKSxDLnN0cmlwKCksImRpdiIhPT1iJiYwIT09eCYmQy5pdXNocm4oeCkse2RpdjptfHxudWxsLG1vZDpDfX0sdy5wcm90b3R5cGUuZGl2bW9kPWZ1bmN0aW9uKHAsYix4KXtyZXR1cm4gZyghcC5pc1plcm8oKSksdGhpcy5pc1pl''@;'; put 'put ''cm8oKT97ZGl2Om5ldyB3KDApLG1vZDpuZXcgdygwKX06MCE9PXRoaXMubmVnYXRpdmUmJjA9PT1wLm5lZ2F0aXZlPyhIPXRoaXMubmVnKCkuZGl2bW9kKHAsYiksIm1vZCIhPT1iJiYoQz1ILmRpdi5uZWcoKSksImRpdiIhPT1iJiYoVD1ILm1vZC5uZWcoKSx4JiYwIT09VC5uZWdhdGl2ZSYm''@;'; put 'put ''VC5pYWRkKHApKSx7ZGl2OkMsbW9kOlR9KTowPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXAubmVnYXRpdmU/KEg9dGhpcy5kaXZtb2QocC5uZWcoKSxiKSwibW9kIiE9PWImJihDPUguZGl2Lm5lZygpKSx7ZGl2OkMsbW9kOkgubW9kfSk6dGhpcy5uZWdhdGl2ZSZwLm5lZ2F0aXZlPyhIPXRoaXMu''@;'; put 'put ''bmVnKCkuZGl2bW9kKHAubmVnKCksYiksImRpdiIhPT1iJiYoVD1ILm1vZC5uZWcoKSx4JiYwIT09VC5uZWdhdGl2ZSYmVC5pc3ViKHApKSx7ZGl2OkguZGl2LG1vZDpUfSk6cC5sZW5ndGg+dGhpcy5sZW5ndGh8fHRoaXMuY21wKHApPDA/e2RpdjpuZXcgdygwKSxtb2Q6dGhpc306MT09PXAu''@;'; put 'put ''bGVuZ3RoPyJkaXYiPT09Yj97ZGl2OnRoaXMuZGl2bihwLndvcmRzWzBdKSxtb2Q6bnVsbH06Im1vZCI9PT1iP3tkaXY6bnVsbCxtb2Q6bmV3IHcodGhpcy5tb2RuKHAud29yZHNbMF0pKX06e2Rpdjp0aGlzLmRpdm4ocC53b3Jkc1swXSksbW9kOm5ldyB3KHRoaXMubW9kbihwLndvcmRzWzBd''@;'; put 'put ''KSl9OnRoaXMuX3dvcmREaXYocCxiKTt2YXIgQyxULEh9LHcucHJvdG90eXBlLmRpdj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5kaXZtb2QocCwiZGl2IiwhMSkuZGl2fSx3LnByb3RvdHlwZS5tb2Q9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuZGl2bW9kKHAsIm1vZCIsITEpLm1vZH0sdy5w''@;'; put 'put ''cm90b3R5cGUudW1vZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5kaXZtb2QocCwibW9kIiwhMCkubW9kfSx3LnByb3RvdHlwZS5kaXZSb3VuZD1mdW5jdGlvbihwKXt2YXIgYj10aGlzLmRpdm1vZChwKTtpZihiLm1vZC5pc1plcm8oKSlyZXR1cm4gYi5kaXY7dmFyIHg9MCE9PWIuZGl2Lm5l''@;'; put 'put ''Z2F0aXZlP2IubW9kLmlzdWIocCk6Yi5tb2QsQz1wLnVzaHJuKDEpLFQ9cC5hbmRsbigxKSxIPXguY21wKEMpO3JldHVybiBIPDB8fDE9PT1UJiYwPT09SD9iLmRpdjowIT09Yi5kaXYubmVnYXRpdmU/Yi5kaXYuaXN1Ym4oMSk6Yi5kaXYuaWFkZG4oMSl9LHcucHJvdG90eXBlLm1vZG49ZnVu''@;'; put 'put ''Y3Rpb24ocCl7ZyhwPD02NzEwODg2Myk7Zm9yKHZhciBiPSgxPDwyNiklcCx4PTAsQz10aGlzLmxlbmd0aC0xO0M+PTA7Qy0tKXg9KGIqeCsoMHx0aGlzLndvcmRzW0NdKSklcDtyZXR1cm4geH0sdy5wcm90b3R5cGUuaWRpdm49ZnVuY3Rpb24ocCl7ZyhwPD02NzEwODg2Myk7Zm9yKHZhciBi''@;'; put 'put ''PTAseD10aGlzLmxlbmd0aC0xO3g+PTA7eC0tKXt2YXIgQz0oMHx0aGlzLndvcmRzW3hdKSs2NzEwODg2NCpiO3RoaXMud29yZHNbeF09Qy9wfDAsYj1DJXB9cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuZGl2bj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlkaXZu''@;'; put 'put ''KHApfSx3LnByb3RvdHlwZS5lZ2NkPWZ1bmN0aW9uKHApe2coMD09PXAubmVnYXRpdmUpLGcoIXAuaXNaZXJvKCkpO3ZhciBiPXRoaXMseD1wLmNsb25lKCk7Yj0wIT09Yi5uZWdhdGl2ZT9iLnVtb2QocCk6Yi5jbG9uZSgpO2Zvcih2YXIgQz1uZXcgdygxKSxUPW5ldyB3KDApLEg9bmV3IHco''@;'; put 'put ''MCksaj1uZXcgdygxKSxFPTA7Yi5pc0V2ZW4oKSYmeC5pc0V2ZW4oKTspYi5pdXNocm4oMSkseC5pdXNocm4oMSksKytFO2Zvcih2YXIgbT14LmNsb25lKCksQT1iLmNsb25lKCk7IWIuaXNaZXJvKCk7KXtmb3IodmFyIGFlPTAsdGU9MTshKGIud29yZHNbMF0mdGUpJiZhZTwyNjsrK2FlLHRl''@;'; put 'put ''PDw9MSk7aWYoYWU+MClmb3IoYi5pdXNocm4oYWUpO2FlLS0gPjA7KShDLmlzT2RkKCl8fFQuaXNPZGQoKSkmJihDLmlhZGQobSksVC5pc3ViKEEpKSxDLml1c2hybigxKSxULml1c2hybigxKTtmb3IodmFyIHNlPTAsd2U9MTshKHgud29yZHNbMF0md2UpJiZzZTwyNjsrK3NlLHdlPDw9MSk7''@;'; put 'put ''aWYoc2U+MClmb3IoeC5pdXNocm4oc2UpO3NlLS0gPjA7KShILmlzT2RkKCl8fGouaXNPZGQoKSkmJihILmlhZGQobSksai5pc3ViKEEpKSxILml1c2hybigxKSxqLml1c2hybigxKTtiLmNtcCh4KT49MD8oYi5pc3ViKHgpLEMuaXN1YihIKSxULmlzdWIoaikpOih4LmlzdWIoYiksSC5pc3Vi''@;'; put 'put ''KEMpLGouaXN1YihUKSl9cmV0dXJue2E6SCxiOmosZ2NkOnguaXVzaGxuKEUpfX0sdy5wcm90b3R5cGUuX2ludm1wPWZ1bmN0aW9uKHApe2coMD09PXAubmVnYXRpdmUpLGcoIXAuaXNaZXJvKCkpO3ZhciBhZSxiPXRoaXMseD1wLmNsb25lKCk7Yj0wIT09Yi5uZWdhdGl2ZT9iLnVtb2QocCk6''@;'; put 'put ''Yi5jbG9uZSgpO2Zvcih2YXIgQz1uZXcgdygxKSxUPW5ldyB3KDApLEg9eC5jbG9uZSgpO2IuY21wbigxKT4wJiZ4LmNtcG4oMSk+MDspe2Zvcih2YXIgaj0wLEU9MTshKGIud29yZHNbMF0mRSkmJmo8MjY7KytqLEU8PD0xKTtpZihqPjApZm9yKGIuaXVzaHJuKGopO2otLSA+MDspQy5pc09k''@;'; put 'put ''ZCgpJiZDLmlhZGQoSCksQy5pdXNocm4oMSk7Zm9yKHZhciBtPTAsQT0xOyEoeC53b3Jkc1swXSZBKSYmbTwyNjsrK20sQTw8PTEpO2lmKG0+MClmb3IoeC5pdXNocm4obSk7bS0tID4wOylULmlzT2RkKCkmJlQuaWFkZChIKSxULml1c2hybigxKTtiLmNtcCh4KT49MD8oYi5pc3ViKHgpLEMu''@;'; put 'put ''aXN1YihUKSk6KHguaXN1YihiKSxULmlzdWIoQykpfXJldHVybihhZT0wPT09Yi5jbXBuKDEpP0M6VCkuY21wbigwKTwwJiZhZS5pYWRkKHApLGFlfSx3LnByb3RvdHlwZS5nY2Q9ZnVuY3Rpb24ocCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gcC5hYnMoKTtpZihwLmlzWmVybygpKXJldHVy''@;'; put 'put ''biB0aGlzLmFicygpO3ZhciBiPXRoaXMuY2xvbmUoKSx4PXAuY2xvbmUoKTtiLm5lZ2F0aXZlPTAseC5uZWdhdGl2ZT0wO2Zvcih2YXIgQz0wO2IuaXNFdmVuKCkmJnguaXNFdmVuKCk7QysrKWIuaXVzaHJuKDEpLHguaXVzaHJuKDEpO2Zvcig7Oyl7Zm9yKDtiLmlzRXZlbigpOyliLml1c2hy''@;'; put 'put ''bigxKTtmb3IoO3guaXNFdmVuKCk7KXguaXVzaHJuKDEpO3ZhciBUPWIuY21wKHgpO2lmKFQ8MCl7dmFyIEg9YjtiPXgseD1IfWVsc2UgaWYoMD09PVR8fDA9PT14LmNtcG4oMSkpYnJlYWs7Yi5pc3ViKHgpfXJldHVybiB4Lml1c2hsbihDKX0sdy5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihw''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5lZ2NkKHApLmEudW1vZChwKX0sdy5wcm90b3R5cGUuaXNFdmVuPWZ1bmN0aW9uKCl7cmV0dXJuISgxJnRoaXMud29yZHNbMF0pfSx3LnByb3RvdHlwZS5pc09kZD1mdW5jdGlvbigpe3JldHVybiEoMSZ+dGhpcy53b3Jkc1swXSl9LHcucHJvdG90eXBlLmFuZGxuPWZ1''@;'; put 'put ''bmN0aW9uKHApe3JldHVybiB0aGlzLndvcmRzWzBdJnB9LHcucHJvdG90eXBlLmJpbmNuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwKTt2YXIgYj1wJTI2LHg9KHAtYikvMjYsQz0xPDxiO2lmKHRoaXMubGVuZ3RoPD14KXJldHVybiB0aGlzLl9leHBhbmQoeCsxKSx0aGlzLndv''@;'; put 'put ''cmRzW3hdfD1DLHRoaXM7Zm9yKHZhciBUPUMsSD14OzAhPT1UJiZIPHRoaXMubGVuZ3RoO0grKyl7dmFyIGo9MHx0aGlzLndvcmRzW0hdO1Q9KGorPVQpPj4+MjYsdGhpcy53b3Jkc1tIXT1qJj02NzEwODg2M31yZXR1cm4gMCE9PVQmJih0aGlzLndvcmRzW0hdPVQsdGhpcy5sZW5ndGgrKyks''@;'; put 'put ''dGhpc30sdy5wcm90b3R5cGUuaXNaZXJvPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF19LHcucHJvdG90eXBlLmNtcG49ZnVuY3Rpb24ocCl7dmFyIHgsYj1wPDA7aWYoMCE9PXRoaXMubmVnYXRpdmUmJiFiKXJldHVybi0xO2lmKDA9PT10aGlz''@;'; put 'put ''Lm5lZ2F0aXZlJiZiKXJldHVybiAxO2lmKHRoaXMuc3RyaXAoKSx0aGlzLmxlbmd0aD4xKXg9MTtlbHNle2ImJihwPS1wKSxnKHA8PTY3MTA4ODYzLCJOdW1iZXIgaXMgdG9vIGJpZyIpO3ZhciBDPTB8dGhpcy53b3Jkc1swXTt4PUM9PT1wPzA6QzxwPy0xOjF9cmV0dXJuIDAhPT10aGlzLm5l''@;'; put 'put ''Z2F0aXZlPzB8LXg6eH0sdy5wcm90b3R5cGUuY21wPWZ1bmN0aW9uKHApe2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09cC5uZWdhdGl2ZSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXAubmVnYXRpdmUpcmV0dXJuIDE7dmFyIGI9dGhpcy51Y21wKHApO3JldHVybiAwIT09''@;'; put 'put ''dGhpcy5uZWdhdGl2ZT8wfC1iOmJ9LHcucHJvdG90eXBlLnVjbXA9ZnVuY3Rpb24ocCl7aWYodGhpcy5sZW5ndGg+cC5sZW5ndGgpcmV0dXJuIDE7aWYodGhpcy5sZW5ndGg8cC5sZW5ndGgpcmV0dXJuLTE7Zm9yKHZhciBiPTAseD10aGlzLmxlbmd0aC0xO3g+PTA7eC0tKXt2YXIgQz0wfHRo''@;'; put 'put ''aXMud29yZHNbeF0sVD0wfHAud29yZHNbeF07aWYoQyE9PVQpe0M8VD9iPS0xOkM+VCYmKGI9MSk7YnJlYWt9fXJldHVybiBifSx3LnByb3RvdHlwZS5ndG49ZnVuY3Rpb24ocCl7cmV0dXJuIDE9PT10aGlzLmNtcG4ocCl9LHcucHJvdG90eXBlLmd0PWZ1bmN0aW9uKHApe3JldHVybiAxPT09''@;'; put 'put ''dGhpcy5jbXAocCl9LHcucHJvdG90eXBlLmd0ZW49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY21wbihwKT49MH0sdy5wcm90b3R5cGUuZ3RlPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNtcChwKT49MH0sdy5wcm90b3R5cGUubHRuPWZ1bmN0aW9uKHApe3JldHVybi0xPT09dGhpcy5jbXBu''@;'; put 'put ''KHApfSx3LnByb3RvdHlwZS5sdD1mdW5jdGlvbihwKXtyZXR1cm4tMT09PXRoaXMuY21wKHApfSx3LnByb3RvdHlwZS5sdGVuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNtcG4ocCk8PTB9LHcucHJvdG90eXBlLmx0ZT1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbXAocCk8PTB9LHcucHJv''@;'; put 'put ''dG90eXBlLmVxbj1mdW5jdGlvbihwKXtyZXR1cm4gMD09PXRoaXMuY21wbihwKX0sdy5wcm90b3R5cGUuZXE9ZnVuY3Rpb24ocCl7cmV0dXJuIDA9PT10aGlzLmNtcChwKX0sdy5yZWQ9ZnVuY3Rpb24ocCl7cmV0dXJuIG5ldyBTZShwKX0sdy5wcm90b3R5cGUudG9SZWQ9ZnVuY3Rpb24ocCl7''@;'; put 'put ''cmV0dXJuIGcoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksZygwPT09dGhpcy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxwLmNvbnZlcnRUbyh0aGlzKS5fZm9yY2VSZWQocCl9LHcucHJvdG90eXBlLmZyb21SZWQ9''@;'; put 'put ''ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwiZnJvbVJlZCB3b3JrcyBvbmx5IHdpdGggbnVtYmVycyBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMucmVkLmNvbnZlcnRGcm9tKHRoaXMpfSx3LnByb3RvdHlwZS5fZm9yY2VSZWQ9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMucmVkPXAs''@;'; put 'put ''dGhpc30sdy5wcm90b3R5cGUuZm9yY2VSZWQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGcoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5fZm9yY2VSZWQocCl9LHcucHJvdG90eXBlLnJlZEFkZD1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJl''@;'; put 'put ''ZCwicmVkQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmFkZCh0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRJQWRkPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRJQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlhZGQo''@;'; put 'put ''dGhpcyxwKX0sdy5wcm90b3R5cGUucmVkU3ViPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc3ViKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZElTdWI9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5y''@;'; put 'put ''ZWQsInJlZElTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaXN1Yih0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRTaGw9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZFNobCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zaGwo''@;'; put 'put ''dGhpcyxwKX0sdy5wcm90b3R5cGUucmVkTXVsPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxwKSx0aGlzLnJlZC5tdWwodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkSU11bD1m''@;'; put 'put ''dW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMscCksdGhpcy5yZWQuaW11bCh0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwi''@;'; put 'put ''cmVkU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcih0aGlzKX0sdy5wcm90b3R5cGUucmVkSVNxcj1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWRJU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVy''@;'; put 'put ''cyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmlzcXIodGhpcyl9LHcucHJvdG90eXBlLnJlZFNxcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkU3FydCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlz''@;'; put 'put ''LnJlZC5zcXJ0KHRoaXMpfSx3LnByb3RvdHlwZS5yZWRJbnZtPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZEludm0gd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaW52bSh0aGlzKX0sdy5wcm90b3R5cGUucmVk''@;'; put 'put ''TmVnPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZE5lZyB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5uZWcodGhpcyl9LHcucHJvdG90eXBlLnJlZFBvdz1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCYm''@;'; put 'put ''IXAucmVkLCJyZWRQb3cobm9ybWFsTnVtKSIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnBvdyh0aGlzLHApfTt2YXIgbmU9e2syNTY6bnVsbCxwMjI0Om51bGwscDE5MjpudWxsLHAyNTUxOTpudWxsfTtmdW5jdGlvbiBpZShWLHApe3RoaXMubmFtZT1WLHRoaXMucD1uZXcg''@;'; put 'put ''dyhwLDE2KSx0aGlzLm49dGhpcy5wLmJpdExlbmd0aCgpLHRoaXMuaz1uZXcgdygxKS5pdXNobG4odGhpcy5uKS5pc3ViKHRoaXMucCksdGhpcy50bXA9dGhpcy5fdG1wKCl9ZnVuY3Rpb24gbGUoKXtpZS5jYWxsKHRoaXMsImsyNTYiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZm''@;'; put 'put ''ZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZiIpfWZ1bmN0aW9uIG1lKCl7aWUuY2FsbCh0aGlzLCJwMjI0IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEiKX1mdW5jdGlvbiBfZSgpe2llLmNhbGwo''@;'; put 'put ''dGhpcywicDE5MiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIil9ZnVuY3Rpb24gVGUoKXtpZS5jYWxsKHRoaXMsIjI1NTE5IiwiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZm''@;'; put 'put ''ZmZmZmZlZCIpfWZ1bmN0aW9uIFNlKFYpe2lmKCJzdHJpbmciPT10eXBlb2YgVil7dmFyIHA9dy5fcHJpbWUoVik7dGhpcy5tPXAucCx0aGlzLnByaW1lPXB9ZWxzZSBnKFYuZ3RuKDEpLCJtb2R1bHVzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDEiKSx0aGlzLm09Vix0aGlzLnByaW1lPW51bGx9''@;'; put 'put ''ZnVuY3Rpb24gamUoVil7U2UuY2FsbCh0aGlzLFYpLHRoaXMuc2hpZnQ9dGhpcy5tLmJpdExlbmd0aCgpLHRoaXMuc2hpZnQlMjYhPTAmJih0aGlzLnNoaWZ0Kz0yNi10aGlzLnNoaWZ0JTI2KSx0aGlzLnI9bmV3IHcoMSkuaXVzaGxuKHRoaXMuc2hpZnQpLHRoaXMucjI9dGhpcy5pbW9kKHRo''@;'; put 'put ''aXMuci5zcXIoKSksdGhpcy5yaW52PXRoaXMuci5faW52bXAodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5yaW52Lm11bCh0aGlzLnIpLmlzdWJuKDEpLmRpdih0aGlzLm0pLHRoaXMubWludj10aGlzLm1pbnYudW1vZCh0aGlzLnIpLHRoaXMubWludj10aGlzLnIuc3ViKHRoaXMubWludil9aWUu''@;'; put 'put ''cHJvdG90eXBlLl90bXA9ZnVuY3Rpb24oKXt2YXIgcD1uZXcgdyhudWxsKTtyZXR1cm4gcC53b3Jkcz1uZXcgQXJyYXkoTWF0aC5jZWlsKHRoaXMubi8xMykpLHB9LGllLnByb3RvdHlwZS5pcmVkdWNlPWZ1bmN0aW9uKHApe3ZhciB4LGI9cDtkb3t0aGlzLnNwbGl0KGIsdGhpcy50bXApLHg9''@;'; put 'put ''KGI9KGI9dGhpcy5pbXVsSyhiKSkuaWFkZCh0aGlzLnRtcCkpLmJpdExlbmd0aCgpfXdoaWxlKHg+dGhpcy5uKTt2YXIgQz14PHRoaXMubj8tMTpiLnVjbXAodGhpcy5wKTtyZXR1cm4gMD09PUM/KGIud29yZHNbMF09MCxiLmxlbmd0aD0xKTpDPjA/Yi5pc3ViKHRoaXMucCk6dm9pZCAwIT09''@;'; put 'put ''Yi5zdHJpcD9iLnN0cmlwKCk6Yi5fc3RyaXAoKSxifSxpZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24ocCxiKXtwLml1c2hybih0aGlzLm4sMCxiKX0saWUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHApe3JldHVybiBwLmltdWwodGhpcy5rKX0sQihsZSxpZSksbGUucHJvdG90eXBlLnNw''@;'; put 'put ''bGl0PWZ1bmN0aW9uKHAsYil7Zm9yKHZhciB4PTQxOTQzMDMsQz1NYXRoLm1pbihwLmxlbmd0aCw5KSxUPTA7VDxDO1QrKyliLndvcmRzW1RdPXAud29yZHNbVF07aWYoYi5sZW5ndGg9QyxwLmxlbmd0aDw9OSlyZXR1cm4gcC53b3Jkc1swXT0wLHZvaWQocC5sZW5ndGg9MSk7dmFyIEg9cC53''@;'; put 'put ''b3Jkc1s5XTtmb3IoYi53b3Jkc1tiLmxlbmd0aCsrXT1IJngsVD0xMDtUPHAubGVuZ3RoO1QrKyl7dmFyIGo9MHxwLndvcmRzW1RdO3Aud29yZHNbVC0xMF09KGomeCk8PDR8SD4+PjIyLEg9an1wLndvcmRzW1QtMTBdPUg+Pj49MjIscC5sZW5ndGgtPTA9PT1IJiZwLmxlbmd0aD4xMD8xMDo5''@;'; put 'put ''fSxsZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24ocCl7cC53b3Jkc1twLmxlbmd0aF09MCxwLndvcmRzW3AubGVuZ3RoKzFdPTAscC5sZW5ndGgrPTI7Zm9yKHZhciBiPTAseD0wO3g8cC5sZW5ndGg7eCsrKXt2YXIgQz0wfHAud29yZHNbeF07cC53b3Jkc1t4XT02NzEwODg2MyYoYis9OTc3''@;'; put 'put ''KkMpLGI9NjQqQysoYi82NzEwODg2NHwwKX1yZXR1cm4gMD09PXAud29yZHNbcC5sZW5ndGgtMV0mJihwLmxlbmd0aC0tLDA9PT1wLndvcmRzW3AubGVuZ3RoLTFdJiZwLmxlbmd0aC0tKSxwfSxCKG1lLGllKSxCKF9lLGllKSxCKFRlLGllKSxUZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24o''@;'; put 'put ''cCl7Zm9yKHZhciBiPTAseD0wO3g8cC5sZW5ndGg7eCsrKXt2YXIgQz0xOSooMHxwLndvcmRzW3hdKStiLFQ9NjcxMDg4NjMmQztDPj4+PTI2LHAud29yZHNbeF09VCxiPUN9cmV0dXJuIDAhPT1iJiYocC53b3Jkc1twLmxlbmd0aCsrXT1iKSxwfSx3Ll9wcmltZT1mdW5jdGlvbihwKXtpZihu''@;'; put 'put ''ZVtwXSlyZXR1cm4gbmVbcF07dmFyIGI7aWYoImsyNTYiPT09cCliPW5ldyBsZTtlbHNlIGlmKCJwMjI0Ij09PXApYj1uZXcgbWU7ZWxzZSBpZigicDE5MiI9PT1wKWI9bmV3IF9lO2Vsc2V7aWYoInAyNTUxOSIhPT1wKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBwcmltZSAiK3ApO2I9bmV3''@;'; put 'put ''IFRlfXJldHVybiBuZVtwXT1iLGJ9LFNlLnByb3RvdHlwZS5fdmVyaWZ5MT1mdW5jdGlvbihwKXtnKDA9PT1wLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLGcocC5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sU2UucHJvdG90eXBlLl92''@;'; put 'put ''ZXJpZnkyPWZ1bmN0aW9uKHAsYil7ZyghKHAubmVnYXRpdmV8Yi5uZWdhdGl2ZSksInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksZyhwLnJlZCYmcC5yZWQ9PT1iLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxTZS5wcm90b3R5cGUuaW1vZD1mdW5jdGlv''@;'; put 'put ''bihwKXtyZXR1cm4gdGhpcy5wcmltZT90aGlzLnByaW1lLmlyZWR1Y2UocCkuX2ZvcmNlUmVkKHRoaXMpOnAudW1vZCh0aGlzLm0pLl9mb3JjZVJlZCh0aGlzKX0sU2UucHJvdG90eXBlLm5lZz1mdW5jdGlvbihwKXtyZXR1cm4gcC5pc1plcm8oKT9wLmNsb25lKCk6dGhpcy5tLnN1YihwKS5f''@;'; put 'put ''Zm9yY2VSZWQodGhpcyl9LFNlLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24ocCxiKXt0aGlzLl92ZXJpZnkyKHAsYik7dmFyIHg9cC5hZGQoYik7cmV0dXJuIHguY21wKHRoaXMubSk+PTAmJnguaXN1Yih0aGlzLm0pLHguX2ZvcmNlUmVkKHRoaXMpfSxTZS5wcm90b3R5cGUuaWFkZD1mdW5jdGlv''@;'; put 'put ''bihwLGIpe3RoaXMuX3ZlcmlmeTIocCxiKTt2YXIgeD1wLmlhZGQoYik7cmV0dXJuIHguY21wKHRoaXMubSk+PTAmJnguaXN1Yih0aGlzLm0pLHh9LFNlLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24ocCxiKXt0aGlzLl92ZXJpZnkyKHAsYik7dmFyIHg9cC5zdWIoYik7cmV0dXJuIHguY21wbigw''@;'; put 'put ''KTwwJiZ4LmlhZGQodGhpcy5tKSx4Ll9mb3JjZVJlZCh0aGlzKX0sU2UucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24ocCxiKXt0aGlzLl92ZXJpZnkyKHAsYik7dmFyIHg9cC5pc3ViKGIpO3JldHVybiB4LmNtcG4oMCk8MCYmeC5pYWRkKHRoaXMubSkseH0sU2UucHJvdG90eXBlLnNobD1mdW5j''@;'; put 'put ''dGlvbihwLGIpe3JldHVybiB0aGlzLl92ZXJpZnkxKHApLHRoaXMuaW1vZChwLnVzaGxuKGIpKX0sU2UucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihwLGIpLHRoaXMuaW1vZChwLmltdWwoYikpfSxTZS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHAs''@;'; put 'put ''Yil7cmV0dXJuIHRoaXMuX3ZlcmlmeTIocCxiKSx0aGlzLmltb2QocC5tdWwoYikpfSxTZS5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5pbXVsKHAscC5jbG9uZSgpKX0sU2UucHJvdG90eXBlLnNxcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5tdWwocCxwKX0sU2Uu''@;'; put 'put ''cHJvdG90eXBlLnNxcnQ9ZnVuY3Rpb24ocCl7aWYocC5pc1plcm8oKSlyZXR1cm4gcC5jbG9uZSgpO3ZhciBiPXRoaXMubS5hbmRsbigzKTtpZihnKGIlMj09MSksMz09PWIpe3ZhciB4PXRoaXMubS5hZGQobmV3IHcoMSkpLml1c2hybigyKTtyZXR1cm4gdGhpcy5wb3cocCx4KX1mb3IodmFy''@;'; put 'put ''IEM9dGhpcy5tLnN1Ym4oMSksVD0wOyFDLmlzWmVybygpJiYwPT09Qy5hbmRsbigxKTspVCsrLEMuaXVzaHJuKDEpO2coIUMuaXNaZXJvKCkpO3ZhciBIPW5ldyB3KDEpLnRvUmVkKHRoaXMpLGo9SC5yZWROZWcoKSxFPXRoaXMubS5zdWJuKDEpLml1c2hybigxKSxtPXRoaXMubS5iaXRMZW5n''@;'; put 'put ''dGgoKTtmb3IobT1uZXcgdygyKm0qbSkudG9SZWQodGhpcyk7MCE9PXRoaXMucG93KG0sRSkuY21wKGopOyltLnJlZElBZGQoaik7Zm9yKHZhciBBPXRoaXMucG93KG0sQyksYWU9dGhpcy5wb3cocCxDLmFkZG4oMSkuaXVzaHJuKDEpKSx0ZT10aGlzLnBvdyhwLEMpLHNlPVQ7MCE9PXRlLmNt''@;'; put 'put ''cChIKTspe2Zvcih2YXIgd2U9dGUsVWU9MDswIT09d2UuY21wKEgpO1VlKyspd2U9d2UucmVkU3FyKCk7ZyhVZTxzZSk7dmFyIEplPXRoaXMucG93KEEsbmV3IHcoMSkuaXVzaGxuKHNlLVVlLTEpKTthZT1hZS5yZWRNdWwoSmUpLEE9SmUucmVkU3FyKCksdGU9dGUucmVkTXVsKEEpLHNlPVVl''@;'; put 'put ''fXJldHVybiBhZX0sU2UucHJvdG90eXBlLmludm09ZnVuY3Rpb24ocCl7dmFyIGI9cC5faW52bXAodGhpcy5tKTtyZXR1cm4gMCE9PWIubmVnYXRpdmU/KGIubmVnYXRpdmU9MCx0aGlzLmltb2QoYikucmVkTmVnKCkpOnRoaXMuaW1vZChiKX0sU2UucHJvdG90eXBlLnBvdz1mdW5jdGlvbihw''@;'; put 'put ''LGIpe2lmKGIuaXNaZXJvKCkpcmV0dXJuIG5ldyB3KDEpLnRvUmVkKHRoaXMpO2lmKDA9PT1iLmNtcG4oMSkpcmV0dXJuIHAuY2xvbmUoKTt2YXIgQz1uZXcgQXJyYXkoMTYpO0NbMF09bmV3IHcoMSkudG9SZWQodGhpcyksQ1sxXT1wO2Zvcih2YXIgVD0yO1Q8Qy5sZW5ndGg7VCsrKUNbVF09''@;'; put 'put ''dGhpcy5tdWwoQ1tULTFdLHApO3ZhciBIPUNbMF0saj0wLEU9MCxtPWIuYml0TGVuZ3RoKCklMjY7Zm9yKDA9PT1tJiYobT0yNiksVD1iLmxlbmd0aC0xO1Q+PTA7VC0tKXtmb3IodmFyIEE9Yi53b3Jkc1tUXSxhZT1tLTE7YWU+PTA7YWUtLSl7dmFyIHRlPUE+PmFlJjE7SCE9PUNbMF0mJihI''@;'; put 'put ''PXRoaXMuc3FyKEgpKSwwIT09dGV8fDAhPT1qPyhqPDw9MSxqfD10ZSwoND09KytFfHwwPT09VCYmMD09PWFlKSYmKEg9dGhpcy5tdWwoSCxDW2pdKSxFPTAsaj0wKSk6RT0wfW09MjZ9cmV0dXJuIEh9LFNlLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24ocCl7dmFyIGI9cC51bW9kKHRo''@;'; put 'put ''aXMubSk7cmV0dXJuIGI9PT1wP2IuY2xvbmUoKTpifSxTZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24ocCl7dmFyIGI9cC5jbG9uZSgpO3JldHVybiBiLnJlZD1udWxsLGJ9LHcubW9udD1mdW5jdGlvbihwKXtyZXR1cm4gbmV3IGplKHApfSxCKGplLFNlKSxqZS5wcm90b3R5cGUu''@;'; put 'put ''Y29udmVydFRvPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmltb2QocC51c2hsbih0aGlzLnNoaWZ0KSl9LGplLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihwKXt2YXIgYj10aGlzLmltb2QocC5tdWwodGhpcy5yaW52KSk7cmV0dXJuIGIucmVkPW51bGwsYn0samUucHJvdG90eXBl''@;'; put 'put ''LmltdWw9ZnVuY3Rpb24ocCxiKXtpZihwLmlzWmVybygpfHxiLmlzWmVybygpKXJldHVybiBwLndvcmRzWzBdPTAscC5sZW5ndGg9MSxwO3ZhciB4PXAuaW11bChiKSxDPXgubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLFQ9''@;'; put 'put ''eC5pc3ViKEMpLml1c2hybih0aGlzLnNoaWZ0KSxIPVQ7cmV0dXJuIFQuY21wKHRoaXMubSk+PTA/SD1ULmlzdWIodGhpcy5tKTpULmNtcG4oMCk8MCYmKEg9VC5pYWRkKHRoaXMubSkpLEguX2ZvcmNlUmVkKHRoaXMpfSxqZS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHAsYil7aWYocC5pc1pl''@;'; put 'put ''cm8oKXx8Yi5pc1plcm8oKSlyZXR1cm4gbmV3IHcoMCkuX2ZvcmNlUmVkKHRoaXMpO3ZhciB4PXAubXVsKGIpLEM9eC5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksVD14LmlzdWIoQykuaXVzaHJuKHRoaXMuc2hpZnQpLEg9''@;'; put 'put ''VDtyZXR1cm4gVC5jbXAodGhpcy5tKT49MD9IPVQuaXN1Yih0aGlzLm0pOlQuY21wbigwKTwwJiYoSD1ULmlhZGQodGhpcy5tKSksSC5fZm9yY2VSZWQodGhpcyl9LGplLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmltb2QocC5faW52bXAodGhpcy5tKS5tdWwodGhp''@;'; put 'put ''cy5yMikpLl9mb3JjZVJlZCh0aGlzKX19KHVlPXkubm1kKHVlKSx0aGlzKX0sNTUxODg6KHVlLFgpPT57IWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2Zvcih2YXIgeT0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyIsST1u''@;'; put 'put ''ZXcgVWludDhBcnJheSgyNTYpLF89MDtfPDY0O18rKylJW3kuY2hhckNvZGVBdChfKV09XztYLmw9ZnVuY3Rpb24oZyl7dmFyIHcsQj1uZXcgVWludDhBcnJheShnKSxQPUIubGVuZ3RoLEY9IiI7Zm9yKHc9MDt3PFA7dys9MylGKz15W0Jbd10+PjJdLEYrPXlbKDMmQlt3XSk8PDR8Qlt3KzFd''@;'; put 'put ''Pj40XSxGKz15WygxNSZCW3crMV0pPDwyfEJbdysyXT4+Nl0sRis9eVs2MyZCW3crMl1dO3JldHVybiBQJTM9PTI/Rj1GLnN1YnN0cmluZygwLEYubGVuZ3RoLTEpKyI9IjpQJTM9PTEmJihGPUYuc3Vic3RyaW5nKDAsRi5sZW5ndGgtMikrIj09IiksRn0sWC5EPWZ1bmN0aW9uKGcpe3ZhciBQ''@;'; put 'put ''LE8seixOLEwsQj0uNzUqZy5sZW5ndGgsdz1nLmxlbmd0aCxGPTA7Ij0iPT09Z1tnLmxlbmd0aC0xXSYmKEItLSwiPSI9PT1nW2cubGVuZ3RoLTJdJiZCLS0pO3ZhciBLPW5ldyBBcnJheUJ1ZmZlcihCKSxVPW5ldyBVaW50OEFycmF5KEspO2ZvcihQPTA7UDx3O1ArPTQpTz1JW2cuY2hhckNv''@;'; put 'put ''ZGVBdChQKV0sej1JW2cuY2hhckNvZGVBdChQKzEpXSxOPUlbZy5jaGFyQ29kZUF0KFArMildLEw9SVtnLmNoYXJDb2RlQXQoUCszKV0sVVtGKytdPU88PDJ8ej4+NCxVW0YrK109KDE1JnopPDw0fE4+PjIsVVtGKytdPSgzJk4pPDw2fDYzJkw7cmV0dXJuIEt9fSgpfSwxMzk4MToodWUsWCk9''@;'; put 'put ''PnsidXNlIHN0cmljdCI7WC5ieXRlTGVuZ3RoPWZ1bmN0aW9uIEYoVSl7dmFyIFc9UChVKSxxPVdbMV07cmV0dXJuIDMqKFdbMF0rcSkvNC1xfSxYLnRvQnl0ZUFycmF5PWZ1bmN0aW9uIHooVSl7dmFyIFcsbGUsWT1QKFUpLHE9WVswXSxlZT1ZWzFdLEo9bmV3IF8oZnVuY3Rpb24gTyhVLFcs''@;'; put 'put ''WSl7cmV0dXJuIDMqKFcrWSkvNC1ZfSgwLHEsZWUpKSxuZT0wLGllPWVlPjA/cS00OnE7Zm9yKGxlPTA7bGU8aWU7bGUrPTQpVz1JW1UuY2hhckNvZGVBdChsZSldPDwxOHxJW1UuY2hhckNvZGVBdChsZSsxKV08PDEyfElbVS5jaGFyQ29kZUF0KGxlKzIpXTw8NnxJW1UuY2hhckNvZGVBdChs''@;'; put 'put ''ZSszKV0sSltuZSsrXT1XPj4xNiYyNTUsSltuZSsrXT1XPj44JjI1NSxKW25lKytdPTI1NSZXO3JldHVybiAyPT09ZWUmJihXPUlbVS5jaGFyQ29kZUF0KGxlKV08PDJ8SVtVLmNoYXJDb2RlQXQobGUrMSldPj40LEpbbmUrK109MjU1JlcpLDE9PT1lZSYmKFc9SVtVLmNoYXJDb2RlQXQobGUp''@;'; put 'put ''XTw8MTB8SVtVLmNoYXJDb2RlQXQobGUrMSldPDw0fElbVS5jaGFyQ29kZUF0KGxlKzIpXT4+MixKW25lKytdPVc+PjgmMjU1LEpbbmUrK109MjU1JlcpLEp9LFguZnJvbUJ5dGVBcnJheT1mdW5jdGlvbiBLKFUpe2Zvcih2YXIgVyxZPVUubGVuZ3RoLHE9WSUzLGVlPVtdLEo9MTYzODMsbmU9''@;'; put 'put ''MCxpZT1ZLXE7bmU8aWU7bmUrPUopZWUucHVzaChMKFUsbmUsbmUrSj5pZT9pZTpuZStKKSk7cmV0dXJuIDE9PT1xP2VlLnB1c2goeVsoVz1VW1ktMV0pPj4yXSt5W1c8PDQmNjNdKyI9PSIpOjI9PT1xJiZlZS5wdXNoKHlbKFc9KFVbWS0yXTw8OCkrVVtZLTFdKT4+MTBdK3lbVz4+NCY2M10r''@;'; put 'put ''eVtXPDwyJjYzXSsiPSIpLGVlLmpvaW4oIiIpfTtmb3IodmFyIHk9W10sST1bXSxfPXR5cGVvZiBVaW50OEFycmF5PCJ1Ij9VaW50OEFycmF5OkFycmF5LGc9IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8iLEI9MDtCPDY0''@;'; put 'put ''OysrQil5W0JdPWdbQl0sSVtnLmNoYXJDb2RlQXQoQildPUI7ZnVuY3Rpb24gUChVKXt2YXIgVz1VLmxlbmd0aDtpZihXJTQ+MCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc3RyaW5nLiBMZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQiKTt2YXIgWT1VLmluZGV4T2YoIj0iKTtyZXR1''@;'; put 'put ''cm4tMT09PVkmJihZPVcpLFtZLFk9PT1XPzA6NC1ZJTRdfWZ1bmN0aW9uIE4oVSl7cmV0dXJuIHlbVT4+MTgmNjNdK3lbVT4+MTImNjNdK3lbVT4+NiY2M10reVs2MyZVXX1mdW5jdGlvbiBMKFUsVyxZKXtmb3IodmFyIGVlPVtdLEo9VztKPFk7Sis9MyllZS5wdXNoKE4oKFVbSl08PDE2JjE2''@;'; put 'put ''NzExNjgwKSsoVVtKKzFdPDw4JjY1MjgwKSsoMjU1JlVbSisyXSkpKTtyZXR1cm4gZWUuam9pbigiIil9SVs0NV09NjIsSVs5NV09NjN9LDkxNzpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJLF8peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBnKHgsQyl7aWYoIXgpdGhyb3cgbmV3IEVycm9y''@;'; put 'put ''KEN8fCJBc3NlcnRpb24gZmFpbGVkIil9ZnVuY3Rpb24gQih4LEMpe3guc3VwZXJfPUM7dmFyIFQ9ZnVuY3Rpb24oKXt9O1QucHJvdG90eXBlPUMucHJvdG90eXBlLHgucHJvdG90eXBlPW5ldyBULHgucHJvdG90eXBlLmNvbnN0cnVjdG9yPXh9ZnVuY3Rpb24gdyh4LEMsVCl7aWYody5pc0JO''@;'; put 'put ''KHgpKXJldHVybiB4O3RoaXMubmVnYXRpdmU9MCx0aGlzLndvcmRzPW51bGwsdGhpcy5sZW5ndGg9MCx0aGlzLnJlZD1udWxsLG51bGwhPT14JiYoKCJsZSI9PT1DfHwiYmUiPT09QykmJihUPUMsQz0xMCksdGhpcy5faW5pdCh4fHwwLEN8fDEwLFR8fCJiZSIpKX12YXIgUDsib2JqZWN0Ij09''@;'; put 'put ''dHlwZW9mIEk/SS5leHBvcnRzPXc6Xy5CTj13LHcuQk49dyx3LndvcmRTaXplPTI2O3RyeXtQPXR5cGVvZiB3aW5kb3c8InUiJiZ0eXBlb2Ygd2luZG93LkJ1ZmZlcjwidSI/d2luZG93LkJ1ZmZlcjp5KDQ3NzkwKS5CdWZmZXJ9Y2F0Y2h7fWZ1bmN0aW9uIEYoeCxDKXt2YXIgVD14LmNoYXJD''@;'; put 'put ''b2RlQXQoQyk7cmV0dXJuIFQ+PTQ4JiZUPD01Nz9ULTQ4OlQ+PTY1JiZUPD03MD9ULTU1OlQ+PTk3JiZUPD0xMDI/VC04Nzp2b2lkIGcoITEsIkludmFsaWQgY2hhcmFjdGVyIGluICIreCl9ZnVuY3Rpb24gTyh4LEMsVCl7dmFyIEg9Rih4LFQpO3JldHVybiBULTE+PUMmJihIfD1GKHgsVC0x''@;'; put 'put ''KTw8NCksSH1mdW5jdGlvbiB6KHgsQyxULEgpe2Zvcih2YXIgaj0wLEU9MCxtPU1hdGgubWluKHgubGVuZ3RoLFQpLEE9QztBPG07QSsrKXt2YXIgYWU9eC5jaGFyQ29kZUF0KEEpLTQ4O2oqPUgsRT1hZT49NDk/YWUtNDkrMTA6YWU+PTE3P2FlLTE3KzEwOmFlLGcoYWU+PTAmJkU8SCwiSW52''@;'; put 'put ''YWxpZCBjaGFyYWN0ZXIiKSxqKz1FfXJldHVybiBqfWZ1bmN0aW9uIE4oeCxDKXt4LndvcmRzPUMud29yZHMseC5sZW5ndGg9Qy5sZW5ndGgseC5uZWdhdGl2ZT1DLm5lZ2F0aXZlLHgucmVkPUMucmVkfWlmKHcuaXNCTj1mdW5jdGlvbihDKXtyZXR1cm4gQyBpbnN0YW5jZW9mIHd8fG51bGwh''@;'; put 'put ''PT1DJiYib2JqZWN0Ij09dHlwZW9mIEMmJkMuY29uc3RydWN0b3Iud29yZFNpemU9PT13LndvcmRTaXplJiZBcnJheS5pc0FycmF5KEMud29yZHMpfSx3Lm1heD1mdW5jdGlvbihDLFQpe3JldHVybiBDLmNtcChUKT4wP0M6VH0sdy5taW49ZnVuY3Rpb24oQyxUKXtyZXR1cm4gQy5jbXAoVCk8''@;'; put 'put ''MD9DOlR9LHcucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKEMsVCxIKXtpZigibnVtYmVyIj09dHlwZW9mIEMpcmV0dXJuIHRoaXMuX2luaXROdW1iZXIoQyxULEgpO2lmKCJvYmplY3QiPT10eXBlb2YgQylyZXR1cm4gdGhpcy5faW5pdEFycmF5KEMsVCxIKTsiaGV4Ij09PVQmJihUPTE2KSxn''@;'; put 'put ''KFQ9PT0oMHxUKSYmVD49MiYmVDw9MzYpO3ZhciBqPTA7Ii0iPT09KEM9Qy50b1N0cmluZygpLnJlcGxhY2UoL1xzKy9nLCIiKSlbMF0mJihqKyssdGhpcy5uZWdhdGl2ZT0xKSxqPEMubGVuZ3RoJiYoMTY9PT1UP3RoaXMuX3BhcnNlSGV4KEMsaixIKToodGhpcy5fcGFyc2VCYXNlKEMsVCxq''@;'; put 'put ''KSwibGUiPT09SCYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLFQsSCkpKX0sdy5wcm90b3R5cGUuX2luaXROdW1iZXI9ZnVuY3Rpb24oQyxULEgpe0M8MCYmKHRoaXMubmVnYXRpdmU9MSxDPS1DKSxDPDY3MTA4ODY0Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZDXSx0aGlzLmxlbmd0''@;'; put 'put ''aD0xKTpDPDQ1MDM1OTk2MjczNzA0OTY/KHRoaXMud29yZHM9WzY3MTA4ODYzJkMsQy82NzEwODg2NCY2NzEwODg2M10sdGhpcy5sZW5ndGg9Mik6KGcoQzw5MDA3MTk5MjU0NzQwOTkyKSx0aGlzLndvcmRzPVs2NzEwODg2MyZDLEMvNjcxMDg4NjQmNjcxMDg4NjMsMV0sdGhpcy5sZW5ndGg9''@;'; put 'put ''MyksImxlIj09PUgmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxULEgpfSx3LnByb3RvdHlwZS5faW5pdEFycmF5PWZ1bmN0aW9uKEMsVCxIKXtpZihnKCJudW1iZXIiPT10eXBlb2YgQy5sZW5ndGgpLEMubGVuZ3RoPD0wKXJldHVybiB0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0''@;'; put 'put ''aD0xLHRoaXM7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKEMubGVuZ3RoLzMpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIGo9MDtqPHRoaXMubGVuZ3RoO2orKyl0aGlzLndvcmRzW2pdPTA7dmFyIEUsbSxBPTA7aWYoImJlIj09PUgpZm9yKGo9Qy5sZW5ndGgtMSxF''@;'; put 'put ''PTA7aj49MDtqLT0zKXRoaXMud29yZHNbRV18PShtPUNbal18Q1tqLTFdPDw4fENbai0yXTw8MTYpPDxBJjY3MTA4ODYzLHRoaXMud29yZHNbRSsxXT1tPj4+MjYtQSY2NzEwODg2MywoQSs9MjQpPj0yNiYmKEEtPTI2LEUrKyk7ZWxzZSBpZigibGUiPT09SClmb3Ioaj0wLEU9MDtqPEMubGVu''@;'; put 'put ''Z3RoO2orPTMpdGhpcy53b3Jkc1tFXXw9KG09Q1tqXXxDW2orMV08PDh8Q1tqKzJdPDwxNik8PEEmNjcxMDg4NjMsdGhpcy53b3Jkc1tFKzFdPW0+Pj4yNi1BJjY3MTA4ODYzLChBKz0yNCk+PTI2JiYoQS09MjYsRSsrKTtyZXR1cm4gdGhpcy5fc3RyaXAoKX0sdy5wcm90b3R5cGUuX3BhcnNl''@;'; put 'put ''SGV4PWZ1bmN0aW9uKEMsVCxIKXt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoKEMubGVuZ3RoLVQpLzYpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIGo9MDtqPHRoaXMubGVuZ3RoO2orKyl0aGlzLndvcmRzW2pdPTA7dmFyIEEsRT0wLG09MDtpZigiYmUiPT09SClm''@;'; put 'put ''b3Ioaj1DLmxlbmd0aC0xO2o+PVQ7ai09MilBPU8oQyxULGopPDxFLHRoaXMud29yZHNbbV18PTY3MTA4ODYzJkEsRT49MTg/KEUtPTE4LHRoaXMud29yZHNbbSs9MV18PUE+Pj4yNik6RSs9ODtlbHNlIGZvcihqPShDLmxlbmd0aC1UKSUyPT0wP1QrMTpUO2o8Qy5sZW5ndGg7ais9MilBPU8o''@;'; put 'put ''QyxULGopPDxFLHRoaXMud29yZHNbbV18PTY3MTA4ODYzJkEsRT49MTg/KEUtPTE4LHRoaXMud29yZHNbbSs9MV18PUE+Pj4yNik6RSs9ODt0aGlzLl9zdHJpcCgpfSx3LnByb3RvdHlwZS5fcGFyc2VCYXNlPWZ1bmN0aW9uKEMsVCxIKXt0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xO2Zv''@;'; put 'put ''cih2YXIgaj0wLEU9MTtFPD02NzEwODg2MztFKj1UKWorKztqLS0sRT1FL1R8MDtmb3IodmFyIG09Qy5sZW5ndGgtSCxBPW0laixhZT1NYXRoLm1pbihtLG0tQSkrSCx0ZT0wLHNlPUg7c2U8YWU7c2UrPWopdGU9eihDLHNlLHNlK2osVCksdGhpcy5pbXVsbihFKSx0aGlzLndvcmRzWzBdK3Rl''@;'; put 'put ''PDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPXRlOnRoaXMuX2lhZGRuKHRlKTtpZigwIT09QSl7dmFyIHdlPTE7Zm9yKHRlPXooQyxzZSxDLmxlbmd0aCxUKSxzZT0wO3NlPEE7c2UrKyl3ZSo9VDt0aGlzLmltdWxuKHdlKSx0aGlzLndvcmRzWzBdK3RlPDY3MTA4ODY0P3RoaXMud29yZHNbMF0r''@;'; put 'put ''PXRlOnRoaXMuX2lhZGRuKHRlKX10aGlzLl9zdHJpcCgpfSx3LnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKEMpe0Mud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIFQ9MDtUPHRoaXMubGVuZ3RoO1QrKylDLndvcmRzW1RdPXRoaXMud29yZHNbVF07Qy5sZW5ndGg9dGhpcy5s''@;'; put 'put ''ZW5ndGgsQy5uZWdhdGl2ZT10aGlzLm5lZ2F0aXZlLEMucmVkPXRoaXMucmVkfSx3LnByb3RvdHlwZS5fbW92ZT1mdW5jdGlvbihDKXtOKEMsdGhpcyl9LHcucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIEM9bmV3IHcobnVsbCk7cmV0dXJuIHRoaXMuY29weShDKSxDfSx3LnByb3Rv''@;'; put 'put ''dHlwZS5fZXhwYW5kPWZ1bmN0aW9uKEMpe2Zvcig7dGhpcy5sZW5ndGg8QzspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO3JldHVybiB0aGlzfSx3LnByb3RvdHlwZS5fc3RyaXA9ZnVuY3Rpb24oKXtmb3IoO3RoaXMubGVuZ3RoPjEmJjA9PT10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFd''@;'; put 'put ''Oyl0aGlzLmxlbmd0aC0tO3JldHVybiB0aGlzLl9ub3JtU2lnbigpfSx3LnByb3RvdHlwZS5fbm9ybVNpZ249ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXSYmKHRoaXMubmVnYXRpdmU9MCksdGhpc30sdHlwZW9mIFN5bWJvbDwidSImJiJmdW5j''@;'; put 'put ''dGlvbiI9PXR5cGVvZiBTeW1ib2wuZm9yKXRyeXt3LnByb3RvdHlwZVtTeW1ib2wuZm9yKCJub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbSIpXT1MfWNhdGNoe3cucHJvdG90eXBlLmluc3BlY3Q9TH1lbHNlIHcucHJvdG90eXBlLmluc3BlY3Q9TDtmdW5jdGlvbiBMKCl7cmV0dXJuKHRoaXMu''@;'; put 'put ''cmVkPyI8Qk4tUjogIjoiPEJOOiAiKSt0aGlzLnRvU3RyaW5nKDE2KSsiPiJ9dmFyIEs9WyIiLCIwIiwiMDAiLCIwMDAiLCIwMDAwIiwiMDAwMDAiLCIwMDAwMDAiLCIwMDAwMDAwIiwiMDAwMDAwMDAiLCIwMDAwMDAwMDAiLCIwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAw''@;'; put 'put ''MDAiLCIwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAw''@;'; put 'put ''MDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIl0sVT1bMCwwLDI1LDE2LDEyLDExLDEwLDksOCw4LDcsNyw3LDcsNiw2''@;'; put 'put ''LDYsNiw2LDYsNiw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1XSxXPVswLDAsMzM1NTQ0MzIsNDMwNDY3MjEsMTY3NzcyMTYsNDg4MjgxMjUsNjA0NjYxNzYsNDAzNTM2MDcsMTY3NzcyMTYsNDMwNDY3MjEsMWU3LDE5NDg3MTcxLDM1ODMxODA4LDYyNzQ4NTE3LDc1Mjk1MzYsMTEz''@;'; put 'put ''OTA2MjUsMTY3NzcyMTYsMjQxMzc1NjksMzQwMTIyMjQsNDcwNDU4ODEsNjRlNiw0MDg0MTAxLDUxNTM2MzIsNjQzNjM0Myw3OTYyNjI0LDk3NjU2MjUsMTE4ODEzNzYsMTQzNDg5MDcsMTcyMTAzNjgsMjA1MTExNDksMjQzZTUsMjg2MjkxNTEsMzM1NTQ0MzIsMzkxMzUzOTMsNDU0MzU0MjQs''@;'; put 'put ''NTI1MjE4NzUsNjA0NjYxNzZdO2Z1bmN0aW9uIGVlKHgsQyxUKXtULm5lZ2F0aXZlPUMubmVnYXRpdmVeeC5uZWdhdGl2ZTt2YXIgSD14Lmxlbmd0aCtDLmxlbmd0aHwwO1QubGVuZ3RoPUgsSD1ILTF8MDt2YXIgaj0wfHgud29yZHNbMF0sRT0wfEMud29yZHNbMF0sbT1qKkUsYWU9bS82NzEw''@;'; put 'put ''ODg2NHwwO1Qud29yZHNbMF09NjcxMDg4NjMmbTtmb3IodmFyIHRlPTE7dGU8SDt0ZSsrKXtmb3IodmFyIHNlPWFlPj4+MjYsd2U9NjcxMDg4NjMmYWUsVWU9TWF0aC5taW4odGUsQy5sZW5ndGgtMSksSmU9TWF0aC5tYXgoMCx0ZS14Lmxlbmd0aCsxKTtKZTw9VWU7SmUrKylzZSs9KG09KGo9''@;'; put 'put ''MHx4LndvcmRzW3RlLUplfDBdKSooRT0wfEMud29yZHNbSmVdKSt3ZSkvNjcxMDg4NjR8MCx3ZT02NzEwODg2MyZtO1Qud29yZHNbdGVdPTB8d2UsYWU9MHxzZX1yZXR1cm4gMCE9PWFlP1Qud29yZHNbdGVdPTB8YWU6VC5sZW5ndGgtLSxULl9zdHJpcCgpfXcucHJvdG90eXBlLnRvU3RyaW5n''@;'; put 'put ''PWZ1bmN0aW9uKEMsVCl7dmFyIEg7aWYoVD0wfFR8fDEsMTY9PT0oQz1DfHwxMCl8fCJoZXgiPT09Qyl7SD0iIjtmb3IodmFyIGo9MCxFPTAsbT0wO208dGhpcy5sZW5ndGg7bSsrKXt2YXIgQT10aGlzLndvcmRzW21dLGFlPSgxNjc3NzIxNSYoQTw8anxFKSkudG9TdHJpbmcoMTYpO0U9QT4+''@;'; put 'put ''PjI0LWomMTY3NzcyMTUsKGorPTIpPj0yNiYmKGotPTI2LG0tLSksSD0wIT09RXx8bSE9PXRoaXMubGVuZ3RoLTE/S1s2LWFlLmxlbmd0aF0rYWUrSDphZStIfWZvcigwIT09RSYmKEg9RS50b1N0cmluZygxNikrSCk7SC5sZW5ndGglVCE9MDspSD0iMCIrSDtyZXR1cm4gMCE9PXRoaXMubmVn''@;'; put 'put ''YXRpdmUmJihIPSItIitIKSxIfWlmKEM9PT0oMHxDKSYmQz49MiYmQzw9MzYpe3ZhciB0ZT1VW0NdLHNlPVdbQ107SD0iIjt2YXIgd2U9dGhpcy5jbG9uZSgpO2Zvcih3ZS5uZWdhdGl2ZT0wOyF3ZS5pc1plcm8oKTspe3ZhciBVZT13ZS5tb2RybihzZSkudG9TdHJpbmcoQyk7SD0od2U9d2Uu''@;'; put 'put ''aWRpdm4oc2UpKS5pc1plcm8oKT9VZStIOktbdGUtVWUubGVuZ3RoXStVZStIfWZvcih0aGlzLmlzWmVybygpJiYoSD0iMCIrSCk7SC5sZW5ndGglVCE9MDspSD0iMCIrSDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJihIPSItIitIKSxIfWcoITEsIkJhc2Ugc2hvdWxkIGJlIGJldHdlZW4g''@;'; put 'put ''MiBhbmQgMzYiKX0sdy5wcm90b3R5cGUudG9OdW1iZXI9ZnVuY3Rpb24oKXt2YXIgQz10aGlzLndvcmRzWzBdO3JldHVybiAyPT09dGhpcy5sZW5ndGg/Qys9NjcxMDg4NjQqdGhpcy53b3Jkc1sxXTozPT09dGhpcy5sZW5ndGgmJjE9PT10aGlzLndvcmRzWzJdP0MrPTQ1MDM1OTk2MjczNzA0''@;'; put 'put ''OTYrNjcxMDg4NjQqdGhpcy53b3Jkc1sxXTp0aGlzLmxlbmd0aD4yJiZnKCExLCJOdW1iZXIgY2FuIG9ubHkgc2FmZWx5IHN0b3JlIHVwIHRvIDUzIGJpdHMiKSwwIT09dGhpcy5uZWdhdGl2ZT8tQzpDfSx3LnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1N0cmlu''@;'; put 'put ''ZygxNiwyKX0sUCYmKHcucHJvdG90eXBlLnRvQnVmZmVyPWZ1bmN0aW9uKEMsVCl7cmV0dXJuIHRoaXMudG9BcnJheUxpa2UoUCxDLFQpfSksdy5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbihDLFQpe3JldHVybiB0aGlzLnRvQXJyYXlMaWtlKEFycmF5LEMsVCl9LHcucHJvdG90eXBlLnRv''@;'; put 'put ''QXJyYXlMaWtlPWZ1bmN0aW9uKEMsVCxIKXt0aGlzLl9zdHJpcCgpO3ZhciBqPXRoaXMuYnl0ZUxlbmd0aCgpLEU9SHx8TWF0aC5tYXgoMSxqKTtnKGo8PUUsImJ5dGUgYXJyYXkgbG9uZ2VyIHRoYW4gZGVzaXJlZCBsZW5ndGgiKSxnKEU+MCwiUmVxdWVzdGVkIGFycmF5IGxlbmd0aCA8PSAw''@;'; put 'put ''Iik7dmFyIG09ZnVuY3Rpb24oQyxUKXtyZXR1cm4gQy5hbGxvY1Vuc2FmZT9DLmFsbG9jVW5zYWZlKFQpOm5ldyBDKFQpfShDLEUpO3JldHVybiB0aGlzWyJfdG9BcnJheUxpa2UiKygibGUiPT09VD8iTEUiOiJCRSIpXShtLGopLG19LHcucHJvdG90eXBlLl90b0FycmF5TGlrZUxFPWZ1bmN0''@;'; put 'put ''aW9uKEMsVCl7Zm9yKHZhciBIPTAsaj0wLEU9MCxtPTA7RTx0aGlzLmxlbmd0aDtFKyspe3ZhciBBPXRoaXMud29yZHNbRV08PG18ajtDW0grK109MjU1JkEsSDxDLmxlbmd0aCYmKENbSCsrXT1BPj44JjI1NSksSDxDLmxlbmd0aCYmKENbSCsrXT1BPj4xNiYyNTUpLDY9PT1tPyhIPEMubGVu''@;'; put 'put ''Z3RoJiYoQ1tIKytdPUE+PjI0JjI1NSksaj0wLG09MCk6KGo9QT4+PjI0LG0rPTIpfWlmKEg8Qy5sZW5ndGgpZm9yKENbSCsrXT1qO0g8Qy5sZW5ndGg7KUNbSCsrXT0wfSx3LnByb3RvdHlwZS5fdG9BcnJheUxpa2VCRT1mdW5jdGlvbihDLFQpe2Zvcih2YXIgSD1DLmxlbmd0aC0xLGo9MCxF''@;'; put 'put ''PTAsbT0wO0U8dGhpcy5sZW5ndGg7RSsrKXt2YXIgQT10aGlzLndvcmRzW0VdPDxtfGo7Q1tILS1dPTI1NSZBLEg+PTAmJihDW0gtLV09QT4+OCYyNTUpLEg+PTAmJihDW0gtLV09QT4+MTYmMjU1KSw2PT09bT8oSD49MCYmKENbSC0tXT1BPj4yNCYyNTUpLGo9MCxtPTApOihqPUE+Pj4yNCxt''@;'; put 'put ''Kz0yKX1pZihIPj0wKWZvcihDW0gtLV09ajtIPj0wOylDW0gtLV09MH0sdy5wcm90b3R5cGUuX2NvdW50Qml0cz1NYXRoLmNsejMyP2Z1bmN0aW9uKEMpe3JldHVybiAzMi1NYXRoLmNsejMyKEMpfTpmdW5jdGlvbihDKXt2YXIgVD1DLEg9MDtyZXR1cm4gVD49NDA5NiYmKEgrPTEzLFQ+Pj49''@;'; put 'put ''MTMpLFQ+PTY0JiYoSCs9NyxUPj4+PTcpLFQ+PTgmJihIKz00LFQ+Pj49NCksVD49MiYmKEgrPTIsVD4+Pj0yKSxIK1R9LHcucHJvdG90eXBlLl96ZXJvQml0cz1mdW5jdGlvbihDKXtpZigwPT09QylyZXR1cm4gMjY7dmFyIFQ9QyxIPTA7cmV0dXJuIDgxOTEmVHx8KEgrPTEzLFQ+Pj49MTMp''@;'; put 'put ''LDEyNyZUfHwoSCs9NyxUPj4+PTcpLDE1JlR8fChIKz00LFQ+Pj49NCksMyZUfHwoSCs9MixUPj4+PTIpLDEmVHx8SCsrLEh9LHcucHJvdG90eXBlLmJpdExlbmd0aD1mdW5jdGlvbigpe3ZhciBUPXRoaXMuX2NvdW50Qml0cyh0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdKTtyZXR1cm4gMjYq''@;'; put 'put ''KHRoaXMubGVuZ3RoLTEpK1R9LHcucHJvdG90eXBlLnplcm9CaXRzPWZ1bmN0aW9uKCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gMDtmb3IodmFyIEM9MCxUPTA7VDx0aGlzLmxlbmd0aDtUKyspe3ZhciBIPXRoaXMuX3plcm9CaXRzKHRoaXMud29yZHNbVF0pO2lmKEMrPUgsMjYhPT1IKWJy''@;'; put 'put ''ZWFrfXJldHVybiBDfSx3LnByb3RvdHlwZS5ieXRlTGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguY2VpbCh0aGlzLmJpdExlbmd0aCgpLzgpfSx3LnByb3RvdHlwZS50b1R3b3M9ZnVuY3Rpb24oQyl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlP3RoaXMuYWJzKCkuaW5vdG4oQykuaWFk''@;'; put 'put ''ZG4oMSk6dGhpcy5jbG9uZSgpfSx3LnByb3RvdHlwZS5mcm9tVHdvcz1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy50ZXN0bihDLTEpP3RoaXMubm90bihDKS5pYWRkbigxKS5pbmVnKCk6dGhpcy5jbG9uZSgpfSx3LnByb3RvdHlwZS5pc05lZz1mdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5u''@;'; put 'put ''ZWdhdGl2ZX0sdy5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbmVnKCl9LHcucHJvdG90eXBlLmluZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1plcm8oKXx8KHRoaXMubmVnYXRpdmVePTEpLHRoaXN9LHcucHJvdG90eXBlLml1b3I9ZnVuY3Rpb24o''@;'; put 'put ''Qyl7Zm9yKDt0aGlzLmxlbmd0aDxDLmxlbmd0aDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO2Zvcih2YXIgVD0wO1Q8Qy5sZW5ndGg7VCsrKXRoaXMud29yZHNbVF09dGhpcy53b3Jkc1tUXXxDLndvcmRzW1RdO3JldHVybiB0aGlzLl9zdHJpcCgpfSx3LnByb3RvdHlwZS5pb3I9ZnVu''@;'; put 'put ''Y3Rpb24oQyl7cmV0dXJuIGcoISh0aGlzLm5lZ2F0aXZlfEMubmVnYXRpdmUpKSx0aGlzLml1b3IoQyl9LHcucHJvdG90eXBlLm9yPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmxlbmd0aD5DLmxlbmd0aD90aGlzLmNsb25lKCkuaW9yKEMpOkMuY2xvbmUoKS5pb3IodGhpcyl9LHcucHJvdG90''@;'; put 'put ''eXBlLnVvcj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5sZW5ndGg+Qy5sZW5ndGg/dGhpcy5jbG9uZSgpLml1b3IoQyk6Qy5jbG9uZSgpLml1b3IodGhpcyl9LHcucHJvdG90eXBlLml1YW5kPWZ1bmN0aW9uKEMpe3ZhciBUO1Q9dGhpcy5sZW5ndGg+Qy5sZW5ndGg/Qzp0aGlzO2Zvcih2YXIg''@;'; put 'put ''SD0wO0g8VC5sZW5ndGg7SCsrKXRoaXMud29yZHNbSF09dGhpcy53b3Jkc1tIXSZDLndvcmRzW0hdO3JldHVybiB0aGlzLmxlbmd0aD1ULmxlbmd0aCx0aGlzLl9zdHJpcCgpfSx3LnByb3RvdHlwZS5pYW5kPWZ1bmN0aW9uKEMpe3JldHVybiBnKCEodGhpcy5uZWdhdGl2ZXxDLm5lZ2F0aXZl''@;'; put 'put ''KSksdGhpcy5pdWFuZChDKX0sdy5wcm90b3R5cGUuYW5kPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmxlbmd0aD5DLmxlbmd0aD90aGlzLmNsb25lKCkuaWFuZChDKTpDLmNsb25lKCkuaWFuZCh0aGlzKX0sdy5wcm90b3R5cGUudWFuZD1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5sZW5ndGg+''@;'; put 'put ''Qy5sZW5ndGg/dGhpcy5jbG9uZSgpLml1YW5kKEMpOkMuY2xvbmUoKS5pdWFuZCh0aGlzKX0sdy5wcm90b3R5cGUuaXV4b3I9ZnVuY3Rpb24oQyl7dmFyIFQsSDt0aGlzLmxlbmd0aD5DLmxlbmd0aD8oVD10aGlzLEg9Qyk6KFQ9QyxIPXRoaXMpO2Zvcih2YXIgaj0wO2o8SC5sZW5ndGg7aisr''@;'; put 'put ''KXRoaXMud29yZHNbal09VC53b3Jkc1tqXV5ILndvcmRzW2pdO2lmKHRoaXMhPT1UKWZvcig7ajxULmxlbmd0aDtqKyspdGhpcy53b3Jkc1tqXT1ULndvcmRzW2pdO3JldHVybiB0aGlzLmxlbmd0aD1ULmxlbmd0aCx0aGlzLl9zdHJpcCgpfSx3LnByb3RvdHlwZS5peG9yPWZ1bmN0aW9uKEMp''@;'; put 'put ''e3JldHVybiBnKCEodGhpcy5uZWdhdGl2ZXxDLm5lZ2F0aXZlKSksdGhpcy5pdXhvcihDKX0sdy5wcm90b3R5cGUueG9yPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmxlbmd0aD5DLmxlbmd0aD90aGlzLmNsb25lKCkuaXhvcihDKTpDLmNsb25lKCkuaXhvcih0aGlzKX0sdy5wcm90b3R5cGUu''@;'; put 'put ''dXhvcj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5sZW5ndGg+Qy5sZW5ndGg/dGhpcy5jbG9uZSgpLml1eG9yKEMpOkMuY2xvbmUoKS5pdXhvcih0aGlzKX0sdy5wcm90b3R5cGUuaW5vdG49ZnVuY3Rpb24oQyl7ZygibnVtYmVyIj09dHlwZW9mIEMmJkM+PTApO3ZhciBUPTB8TWF0aC5jZWls''@;'; put 'put ''KEMvMjYpLEg9QyUyNjt0aGlzLl9leHBhbmQoVCksSD4wJiZULS07Zm9yKHZhciBqPTA7ajxUO2orKyl0aGlzLndvcmRzW2pdPTY3MTA4ODYzJn50aGlzLndvcmRzW2pdO3JldHVybiBIPjAmJih0aGlzLndvcmRzW2pdPX50aGlzLndvcmRzW2pdJjY3MTA4ODYzPj4yNi1IKSx0aGlzLl9zdHJp''@;'; put 'put ''cCgpfSx3LnByb3RvdHlwZS5ub3RuPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmNsb25lKCkuaW5vdG4oQyl9LHcucHJvdG90eXBlLnNldG49ZnVuY3Rpb24oQyxUKXtnKCJudW1iZXIiPT10eXBlb2YgQyYmQz49MCk7dmFyIEg9Qy8yNnwwLGo9QyUyNjtyZXR1cm4gdGhpcy5fZXhwYW5kKEgr''@;'; put 'put ''MSksdGhpcy53b3Jkc1tIXT1UP3RoaXMud29yZHNbSF18MTw8ajp0aGlzLndvcmRzW0hdJn4oMTw8aiksdGhpcy5fc3RyaXAoKX0sdy5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihDKXt2YXIgVCxILGo7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1DLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5l''@;'; put 'put ''Z2F0aXZlPTAsVD10aGlzLmlzdWIoQyksdGhpcy5uZWdhdGl2ZV49MSx0aGlzLl9ub3JtU2lnbigpO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Qy5uZWdhdGl2ZSlyZXR1cm4gQy5uZWdhdGl2ZT0wLFQ9dGhpcy5pc3ViKEMpLEMubmVnYXRpdmU9MSxULl9ub3JtU2lnbigpO3RoaXMubGVu''@;'; put 'put ''Z3RoPkMubGVuZ3RoPyhIPXRoaXMsaj1DKTooSD1DLGo9dGhpcyk7Zm9yKHZhciBFPTAsbT0wO208ai5sZW5ndGg7bSsrKXRoaXMud29yZHNbbV09NjcxMDg4NjMmKFQ9KDB8SC53b3Jkc1ttXSkrKDB8ai53b3Jkc1ttXSkrRSksRT1UPj4+MjY7Zm9yKDswIT09RSYmbTxILmxlbmd0aDttKysp''@;'; put 'put ''dGhpcy53b3Jkc1ttXT02NzEwODg2MyYoVD0oMHxILndvcmRzW21dKStFKSxFPVQ+Pj4yNjtpZih0aGlzLmxlbmd0aD1ILmxlbmd0aCwwIT09RSl0aGlzLndvcmRzW3RoaXMubGVuZ3RoXT1FLHRoaXMubGVuZ3RoKys7ZWxzZSBpZihIIT09dGhpcylmb3IoO208SC5sZW5ndGg7bSsrKXRoaXMu''@;'; put 'put ''d29yZHNbbV09SC53b3Jkc1ttXTtyZXR1cm4gdGhpc30sdy5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKEMpe3ZhciBUO3JldHVybiAwIT09Qy5uZWdhdGl2ZSYmMD09PXRoaXMubmVnYXRpdmU/KEMubmVnYXRpdmU9MCxUPXRoaXMuc3ViKEMpLEMubmVnYXRpdmVePTEsVCk6MD09PUMubmVnYXRp''@;'; put 'put ''dmUmJjAhPT10aGlzLm5lZ2F0aXZlPyh0aGlzLm5lZ2F0aXZlPTAsVD1DLnN1Yih0aGlzKSx0aGlzLm5lZ2F0aXZlPTEsVCk6dGhpcy5sZW5ndGg+Qy5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhZGQoQyk6Qy5jbG9uZSgpLmlhZGQodGhpcyl9LHcucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24oQyl7''@;'; put 'put ''aWYoMCE9PUMubmVnYXRpdmUpe0MubmVnYXRpdmU9MDt2YXIgVD10aGlzLmlhZGQoQyk7cmV0dXJuIEMubmVnYXRpdmU9MSxULl9ub3JtU2lnbigpfWlmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkKEMpLHRoaXMubmVnYXRpdmU9MSx0aGlzLl9u''@;'; put 'put ''b3JtU2lnbigpO3ZhciBqLEUsSD10aGlzLmNtcChDKTtpZigwPT09SClyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMubGVuZ3RoPTEsdGhpcy53b3Jkc1swXT0wLHRoaXM7SD4wPyhqPXRoaXMsRT1DKTooaj1DLEU9dGhpcyk7Zm9yKHZhciBtPTAsQT0wO0E8RS5sZW5ndGg7QSsrKW09KFQ9''@;'; put 'put ''KDB8ai53b3Jkc1tBXSktKDB8RS53b3Jkc1tBXSkrbSk+PjI2LHRoaXMud29yZHNbQV09NjcxMDg4NjMmVDtmb3IoOzAhPT1tJiZBPGoubGVuZ3RoO0ErKyltPShUPSgwfGoud29yZHNbQV0pK20pPj4yNix0aGlzLndvcmRzW0FdPTY3MTA4ODYzJlQ7aWYoMD09PW0mJkE8ai5sZW5ndGgmJmoh''@;'; put 'put ''PT10aGlzKWZvcig7QTxqLmxlbmd0aDtBKyspdGhpcy53b3Jkc1tBXT1qLndvcmRzW0FdO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxBKSxqIT09dGhpcyYmKHRoaXMubmVnYXRpdmU9MSksdGhpcy5fc3RyaXAoKX0sdy5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKEMp''@;'; put 'put ''e3JldHVybiB0aGlzLmNsb25lKCkuaXN1YihDKX07dmFyIEo9ZnVuY3Rpb24oQyxULEgpe3ZhciBhZSx0ZSxzZSxqPUMud29yZHMsRT1ULndvcmRzLG09SC53b3JkcyxBPTAsd2U9MHxqWzBdLFVlPTgxOTEmd2UsSmU9d2U+Pj4xMyxvdD0wfGpbMV0seGU9ODE5MSZvdCx2ZT1vdD4+PjEzLFhl''@;'; put 'put ''PTB8alsyXSx6ZT04MTkxJlhlLERlPVhlPj4+MTMsRmU9MHxqWzNdLE9lPTgxOTEmRmUsSWU9RmU+Pj4xMyxWZT0wfGpbNF0sa2U9ODE5MSZWZSxBZT1WZT4+PjEzLF90PTB8als1XSxudD04MTkxJl90LFFlPV90Pj4+MTMsdW49MHxqWzZdLHl0PTgxOTEmdW4sTXQ9dW4+Pj4xMyxEdD0wfGpb''@;'; put 'put ''N10saXQ9ODE5MSZEdCwkZT1EdD4+PjEzLHR0PTB8als4XSxIZT04MTkxJnR0LHV0PXR0Pj4+MTMscXQ9MHxqWzldLFJ0PTgxOTEmcXQsUHQ9cXQ+Pj4xMyxjaT0wfEVbMF0sUXQ9ODE5MSZjaSxzbj1jaT4+PjEzLFJpPTB8RVsxXSxobj04MTkxJlJpLGZ0PVJpPj4+MTMsT3I9MHxFWzJdLFd0''@;'; put 'put ''PTgxOTEmT3IsQXQ9T3I+Pj4xMyxSbj0wfEVbM10sc3Q9ODE5MSZSbixVdD1Sbj4+PjEzLHJpPTB8RVs0XSxXZT04MTkxJnJpLFR0PXJpPj4+MTMsbnI9MHxFWzVdLGh0PTgxOTEmbnIseHQ9bnI+Pj4xMyxqbj0wfEVbNl0scm49ODE5MSZqbix6dD1qbj4+PjEzLGhpPTB8RVs3XSxjbj04MTkx''@;'; put 'put ''JmhpLGZuPWhpPj4+MTMsSWk9MHxFWzhdLFh0PTgxOTEmSWksZW49SWk+Pj4xMyx1YT0wfEVbOV0sRWk9ODE5MSZ1YSx2cj11YT4+PjEzO0gubmVnYXRpdmU9Qy5uZWdhdGl2ZV5ULm5lZ2F0aXZlLEgubGVuZ3RoPTE5O3ZhciBXbj0oQSsoYWU9TWF0aC5pbXVsKFVlLFF0KSl8MCkrKCg4MTkx''@;'; put 'put ''Jih0ZT0odGU9TWF0aC5pbXVsKFVlLHNuKSkrTWF0aC5pbXVsKEplLFF0KXwwKSk8PDEzKXwwO0E9KChzZT1NYXRoLmltdWwoSmUsc24pKSsodGU+Pj4xMyl8MCkrKFduPj4+MjYpfDAsV24mPTY3MTA4ODYzLGFlPU1hdGguaW11bCh4ZSxRdCksdGU9KHRlPU1hdGguaW11bCh4ZSxzbikpK01h''@;'; put 'put ''dGguaW11bCh2ZSxRdCl8MCxzZT1NYXRoLmltdWwodmUsc24pO3ZhciAkaT0oQSsoYWU9YWUrTWF0aC5pbXVsKFVlLGhuKXwwKXwwKSsoKDgxOTEmKHRlPSh0ZT10ZStNYXRoLmltdWwoVWUsZnQpfDApK01hdGguaW11bChKZSxobil8MCkpPDwxMyl8MDtBPSgoc2U9c2UrTWF0aC5pbXVsKEpl''@;'; put 'put ''LGZ0KXwwKSsodGU+Pj4xMyl8MCkrKCRpPj4+MjYpfDAsJGkmPTY3MTA4ODYzLGFlPU1hdGguaW11bCh6ZSxRdCksdGU9KHRlPU1hdGguaW11bCh6ZSxzbikpK01hdGguaW11bChEZSxRdCl8MCxzZT1NYXRoLmltdWwoRGUsc24pLGFlPWFlK01hdGguaW11bCh4ZSxobil8MCx0ZT0odGU9dGUr''@;'; put 'put ''TWF0aC5pbXVsKHhlLGZ0KXwwKStNYXRoLmltdWwodmUsaG4pfDAsc2U9c2UrTWF0aC5pbXVsKHZlLGZ0KXwwO3ZhciBlaT0oQSsoYWU9YWUrTWF0aC5pbXVsKFVlLFd0KXwwKXwwKSsoKDgxOTEmKHRlPSh0ZT10ZStNYXRoLmltdWwoVWUsQXQpfDApK01hdGguaW11bChKZSxXdCl8MCkpPDwx''@;'; put 'put ''Myl8MDtBPSgoc2U9c2UrTWF0aC5pbXVsKEplLEF0KXwwKSsodGU+Pj4xMyl8MCkrKGVpPj4+MjYpfDAsZWkmPTY3MTA4ODYzLGFlPU1hdGguaW11bChPZSxRdCksdGU9KHRlPU1hdGguaW11bChPZSxzbikpK01hdGguaW11bChJZSxRdCl8MCxzZT1NYXRoLmltdWwoSWUsc24pLGFlPWFlK01h''@;'; put 'put ''dGguaW11bCh6ZSxobil8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKHplLGZ0KXwwKStNYXRoLmltdWwoRGUsaG4pfDAsc2U9c2UrTWF0aC5pbXVsKERlLGZ0KXwwLGFlPWFlK01hdGguaW11bCh4ZSxXdCl8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKHhlLEF0KXwwKStNYXRoLmltdWwodmUsV3QpfDAs''@;'; put 'put ''c2U9c2UrTWF0aC5pbXVsKHZlLEF0KXwwO3ZhciBRcj0oQSsoYWU9YWUrTWF0aC5pbXVsKFVlLHN0KXwwKXwwKSsoKDgxOTEmKHRlPSh0ZT10ZStNYXRoLmltdWwoVWUsVXQpfDApK01hdGguaW11bChKZSxzdCl8MCkpPDwxMyl8MDtBPSgoc2U9c2UrTWF0aC5pbXVsKEplLFV0KXwwKSsodGU+''@;'; put 'put ''Pj4xMyl8MCkrKFFyPj4+MjYpfDAsUXImPTY3MTA4ODYzLGFlPU1hdGguaW11bChrZSxRdCksdGU9KHRlPU1hdGguaW11bChrZSxzbikpK01hdGguaW11bChBZSxRdCl8MCxzZT1NYXRoLmltdWwoQWUsc24pLGFlPWFlK01hdGguaW11bChPZSxobil8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKE9l''@;'; put 'put ''LGZ0KXwwKStNYXRoLmltdWwoSWUsaG4pfDAsc2U9c2UrTWF0aC5pbXVsKEllLGZ0KXwwLGFlPWFlK01hdGguaW11bCh6ZSxXdCl8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKHplLEF0KXwwKStNYXRoLmltdWwoRGUsV3QpfDAsc2U9c2UrTWF0aC5pbXVsKERlLEF0KXwwLGFlPWFlK01hdGguaW11''@;'; put 'put ''bCh4ZSxzdCl8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKHhlLFV0KXwwKStNYXRoLmltdWwodmUsc3QpfDAsc2U9c2UrTWF0aC5pbXVsKHZlLFV0KXwwO3ZhciBWaT0oQSsoYWU9YWUrTWF0aC5pbXVsKFVlLFdlKXwwKXwwKSsoKDgxOTEmKHRlPSh0ZT10ZStNYXRoLmltdWwoVWUsVHQpfDApK01h''@;'; put 'put ''dGguaW11bChKZSxXZSl8MCkpPDwxMyl8MDtBPSgoc2U9c2UrTWF0aC5pbXVsKEplLFR0KXwwKSsodGU+Pj4xMyl8MCkrKFZpPj4+MjYpfDAsVmkmPTY3MTA4ODYzLGFlPU1hdGguaW11bChudCxRdCksdGU9KHRlPU1hdGguaW11bChudCxzbikpK01hdGguaW11bChRZSxRdCl8MCxzZT1NYXRo''@;'; put 'put ''LmltdWwoUWUsc24pLGFlPWFlK01hdGguaW11bChrZSxobil8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKGtlLGZ0KXwwKStNYXRoLmltdWwoQWUsaG4pfDAsc2U9c2UrTWF0aC5pbXVsKEFlLGZ0KXwwLGFlPWFlK01hdGguaW11bChPZSxXdCl8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKE9lLEF0KXww''@;'; put 'put ''KStNYXRoLmltdWwoSWUsV3QpfDAsc2U9c2UrTWF0aC5pbXVsKEllLEF0KXwwLGFlPWFlK01hdGguaW11bCh6ZSxzdCl8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKHplLFV0KXwwKStNYXRoLmltdWwoRGUsc3QpfDAsc2U9c2UrTWF0aC5pbXVsKERlLFV0KXwwLGFlPWFlK01hdGguaW11bCh4ZSxX''@;'; put 'put ''ZSl8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKHhlLFR0KXwwKStNYXRoLmltdWwodmUsV2UpfDAsc2U9c2UrTWF0aC5pbXVsKHZlLFR0KXwwO3ZhciBOaT0oQSsoYWU9YWUrTWF0aC5pbXVsKFVlLGh0KXwwKXwwKSsoKDgxOTEmKHRlPSh0ZT10ZStNYXRoLmltdWwoVWUseHQpfDApK01hdGguaW11''@;'; put 'put ''bChKZSxodCl8MCkpPDwxMyl8MDtBPSgoc2U9c2UrTWF0aC5pbXVsKEplLHh0KXwwKSsodGU+Pj4xMyl8MCkrKE5pPj4+MjYpfDAsTmkmPTY3MTA4ODYzLGFlPU1hdGguaW11bCh5dCxRdCksdGU9KHRlPU1hdGguaW11bCh5dCxzbikpK01hdGguaW11bChNdCxRdCl8MCxzZT1NYXRoLmltdWwo''@;'; put 'put ''TXQsc24pLGFlPWFlK01hdGguaW11bChudCxobil8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKG50LGZ0KXwwKStNYXRoLmltdWwoUWUsaG4pfDAsc2U9c2UrTWF0aC5pbXVsKFFlLGZ0KXwwLGFlPWFlK01hdGguaW11bChrZSxXdCl8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKGtlLEF0KXwwKStNYXRo''@;'; put 'put ''LmltdWwoQWUsV3QpfDAsc2U9c2UrTWF0aC5pbXVsKEFlLEF0KXwwLGFlPWFlK01hdGguaW11bChPZSxzdCl8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKE9lLFV0KXwwKStNYXRoLmltdWwoSWUsc3QpfDAsc2U9c2UrTWF0aC5pbXVsKEllLFV0KXwwLGFlPWFlK01hdGguaW11bCh6ZSxXZSl8MCx0''@;'; put 'put ''ZT0odGU9dGUrTWF0aC5pbXVsKHplLFR0KXwwKStNYXRoLmltdWwoRGUsV2UpfDAsc2U9c2UrTWF0aC5pbXVsKERlLFR0KXwwLGFlPWFlK01hdGguaW11bCh4ZSxodCl8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKHhlLHh0KXwwKStNYXRoLmltdWwodmUsaHQpfDAsc2U9c2UrTWF0aC5pbXVsKHZl''@;'; put 'put ''LHh0KXwwO3ZhciBEYT0oQSsoYWU9YWUrTWF0aC5pbXVsKFVlLHJuKXwwKXwwKSsoKDgxOTEmKHRlPSh0ZT10ZStNYXRoLmltdWwoVWUsenQpfDApK01hdGguaW11bChKZSxybil8MCkpPDwxMyl8MDtBPSgoc2U9c2UrTWF0aC5pbXVsKEplLHp0KXwwKSsodGU+Pj4xMyl8MCkrKERhPj4+MjYp''@;'; put 'put ''fDAsRGEmPTY3MTA4ODYzLGFlPU1hdGguaW11bChpdCxRdCksdGU9KHRlPU1hdGguaW11bChpdCxzbikpK01hdGguaW11bCgkZSxRdCl8MCxzZT1NYXRoLmltdWwoJGUsc24pLGFlPWFlK01hdGguaW11bCh5dCxobil8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKHl0LGZ0KXwwKStNYXRoLmltdWwo''@;'; put 'put ''TXQsaG4pfDAsc2U9c2UrTWF0aC5pbXVsKE10LGZ0KXwwLGFlPWFlK01hdGguaW11bChudCxXdCl8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKG50LEF0KXwwKStNYXRoLmltdWwoUWUsV3QpfDAsc2U9c2UrTWF0aC5pbXVsKFFlLEF0KXwwLGFlPWFlK01hdGguaW11bChrZSxzdCl8MCx0ZT0odGU9''@;'; put 'put ''dGUrTWF0aC5pbXVsKGtlLFV0KXwwKStNYXRoLmltdWwoQWUsc3QpfDAsc2U9c2UrTWF0aC5pbXVsKEFlLFV0KXwwLGFlPWFlK01hdGguaW11bChPZSxXZSl8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKE9lLFR0KXwwKStNYXRoLmltdWwoSWUsV2UpfDAsc2U9c2UrTWF0aC5pbXVsKEllLFR0KXww''@;'; put 'put ''LGFlPWFlK01hdGguaW11bCh6ZSxodCl8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKHplLHh0KXwwKStNYXRoLmltdWwoRGUsaHQpfDAsc2U9c2UrTWF0aC5pbXVsKERlLHh0KXwwLGFlPWFlK01hdGguaW11bCh4ZSxybil8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKHhlLHp0KXwwKStNYXRoLmltdWwo''@;'; put 'put ''dmUscm4pfDAsc2U9c2UrTWF0aC5pbXVsKHZlLHp0KXwwO3ZhciBMcj0oQSsoYWU9YWUrTWF0aC5pbXVsKFVlLGNuKXwwKXwwKSsoKDgxOTEmKHRlPSh0ZT10ZStNYXRoLmltdWwoVWUsZm4pfDApK01hdGguaW11bChKZSxjbil8MCkpPDwxMyl8MDtBPSgoc2U9c2UrTWF0aC5pbXVsKEplLGZu''@;'; put 'put ''KXwwKSsodGU+Pj4xMyl8MCkrKExyPj4+MjYpfDAsTHImPTY3MTA4ODYzLGFlPU1hdGguaW11bChIZSxRdCksdGU9KHRlPU1hdGguaW11bChIZSxzbikpK01hdGguaW11bCh1dCxRdCl8MCxzZT1NYXRoLmltdWwodXQsc24pLGFlPWFlK01hdGguaW11bChpdCxobil8MCx0ZT0odGU9dGUrTWF0''@;'; put 'put ''aC5pbXVsKGl0LGZ0KXwwKStNYXRoLmltdWwoJGUsaG4pfDAsc2U9c2UrTWF0aC5pbXVsKCRlLGZ0KXwwLGFlPWFlK01hdGguaW11bCh5dCxXdCl8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKHl0LEF0KXwwKStNYXRoLmltdWwoTXQsV3QpfDAsc2U9c2UrTWF0aC5pbXVsKE10LEF0KXwwLGFlPWFl''@;'; put 'put ''K01hdGguaW11bChudCxzdCl8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKG50LFV0KXwwKStNYXRoLmltdWwoUWUsc3QpfDAsc2U9c2UrTWF0aC5pbXVsKFFlLFV0KXwwLGFlPWFlK01hdGguaW11bChrZSxXZSl8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKGtlLFR0KXwwKStNYXRoLmltdWwoQWUsV2Up''@;'; put 'put ''fDAsc2U9c2UrTWF0aC5pbXVsKEFlLFR0KXwwLGFlPWFlK01hdGguaW11bChPZSxodCl8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKE9lLHh0KXwwKStNYXRoLmltdWwoSWUsaHQpfDAsc2U9c2UrTWF0aC5pbXVsKEllLHh0KXwwLGFlPWFlK01hdGguaW11bCh6ZSxybil8MCx0ZT0odGU9dGUrTWF0''@;'; put 'put ''aC5pbXVsKHplLHp0KXwwKStNYXRoLmltdWwoRGUscm4pfDAsc2U9c2UrTWF0aC5pbXVsKERlLHp0KXwwLGFlPWFlK01hdGguaW11bCh4ZSxjbil8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKHhlLGZuKXwwKStNYXRoLmltdWwodmUsY24pfDAsc2U9c2UrTWF0aC5pbXVsKHZlLGZuKXwwO3ZhciBX''@;'; put 'put ''aT0oQSsoYWU9YWUrTWF0aC5pbXVsKFVlLFh0KXwwKXwwKSsoKDgxOTEmKHRlPSh0ZT10ZStNYXRoLmltdWwoVWUsZW4pfDApK01hdGguaW11bChKZSxYdCl8MCkpPDwxMyl8MDtBPSgoc2U9c2UrTWF0aC5pbXVsKEplLGVuKXwwKSsodGU+Pj4xMyl8MCkrKFdpPj4+MjYpfDAsV2kmPTY3MTA4''@;'; put 'put ''ODYzLGFlPU1hdGguaW11bChSdCxRdCksdGU9KHRlPU1hdGguaW11bChSdCxzbikpK01hdGguaW11bChQdCxRdCl8MCxzZT1NYXRoLmltdWwoUHQsc24pLGFlPWFlK01hdGguaW11bChIZSxobil8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKEhlLGZ0KXwwKStNYXRoLmltdWwodXQsaG4pfDAsc2U9''@;'; put 'put ''c2UrTWF0aC5pbXVsKHV0LGZ0KXwwLGFlPWFlK01hdGguaW11bChpdCxXdCl8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKGl0LEF0KXwwKStNYXRoLmltdWwoJGUsV3QpfDAsc2U9c2UrTWF0aC5pbXVsKCRlLEF0KXwwLGFlPWFlK01hdGguaW11bCh5dCxzdCl8MCx0ZT0odGU9dGUrTWF0aC5pbXVs''@;'; put 'put ''KHl0LFV0KXwwKStNYXRoLmltdWwoTXQsc3QpfDAsc2U9c2UrTWF0aC5pbXVsKE10LFV0KXwwLGFlPWFlK01hdGguaW11bChudCxXZSl8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKG50LFR0KXwwKStNYXRoLmltdWwoUWUsV2UpfDAsc2U9c2UrTWF0aC5pbXVsKFFlLFR0KXwwLGFlPWFlK01hdGgu''@;'; put 'put ''aW11bChrZSxodCl8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKGtlLHh0KXwwKStNYXRoLmltdWwoQWUsaHQpfDAsc2U9c2UrTWF0aC5pbXVsKEFlLHh0KXwwLGFlPWFlK01hdGguaW11bChPZSxybil8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKE9lLHp0KXwwKStNYXRoLmltdWwoSWUscm4pfDAsc2U9''@;'; put 'put ''c2UrTWF0aC5pbXVsKEllLHp0KXwwLGFlPWFlK01hdGguaW11bCh6ZSxjbil8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKHplLGZuKXwwKStNYXRoLmltdWwoRGUsY24pfDAsc2U9c2UrTWF0aC5pbXVsKERlLGZuKXwwLGFlPWFlK01hdGguaW11bCh4ZSxYdCl8MCx0ZT0odGU9dGUrTWF0aC5pbXVs''@;'; put 'put ''KHhlLGVuKXwwKStNYXRoLmltdWwodmUsWHQpfDAsc2U9c2UrTWF0aC5pbXVsKHZlLGVuKXwwO3ZhciBwYT0oQSsoYWU9YWUrTWF0aC5pbXVsKFVlLEVpKXwwKXwwKSsoKDgxOTEmKHRlPSh0ZT10ZStNYXRoLmltdWwoVWUsdnIpfDApK01hdGguaW11bChKZSxFaSl8MCkpPDwxMyl8MDtBPSgo''@;'; put 'put ''c2U9c2UrTWF0aC5pbXVsKEplLHZyKXwwKSsodGU+Pj4xMyl8MCkrKHBhPj4+MjYpfDAscGEmPTY3MTA4ODYzLGFlPU1hdGguaW11bChSdCxobiksdGU9KHRlPU1hdGguaW11bChSdCxmdCkpK01hdGguaW11bChQdCxobil8MCxzZT1NYXRoLmltdWwoUHQsZnQpLGFlPWFlK01hdGguaW11bChI''@;'; put 'put ''ZSxXdCl8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKEhlLEF0KXwwKStNYXRoLmltdWwodXQsV3QpfDAsc2U9c2UrTWF0aC5pbXVsKHV0LEF0KXwwLGFlPWFlK01hdGguaW11bChpdCxzdCl8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKGl0LFV0KXwwKStNYXRoLmltdWwoJGUsc3QpfDAsc2U9c2UrTWF0''@;'; put 'put ''aC5pbXVsKCRlLFV0KXwwLGFlPWFlK01hdGguaW11bCh5dCxXZSl8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKHl0LFR0KXwwKStNYXRoLmltdWwoTXQsV2UpfDAsc2U9c2UrTWF0aC5pbXVsKE10LFR0KXwwLGFlPWFlK01hdGguaW11bChudCxodCl8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKG50LHh0''@;'; put 'put ''KXwwKStNYXRoLmltdWwoUWUsaHQpfDAsc2U9c2UrTWF0aC5pbXVsKFFlLHh0KXwwLGFlPWFlK01hdGguaW11bChrZSxybil8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKGtlLHp0KXwwKStNYXRoLmltdWwoQWUscm4pfDAsc2U9c2UrTWF0aC5pbXVsKEFlLHp0KXwwLGFlPWFlK01hdGguaW11bChP''@;'; put 'put ''ZSxjbil8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKE9lLGZuKXwwKStNYXRoLmltdWwoSWUsY24pfDAsc2U9c2UrTWF0aC5pbXVsKEllLGZuKXwwLGFlPWFlK01hdGguaW11bCh6ZSxYdCl8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKHplLGVuKXwwKStNYXRoLmltdWwoRGUsWHQpfDAsc2U9c2UrTWF0''@;'; put 'put ''aC5pbXVsKERlLGVuKXwwO3ZhciBRbj0oQSsoYWU9YWUrTWF0aC5pbXVsKHhlLEVpKXwwKXwwKSsoKDgxOTEmKHRlPSh0ZT10ZStNYXRoLmltdWwoeGUsdnIpfDApK01hdGguaW11bCh2ZSxFaSl8MCkpPDwxMyl8MDtBPSgoc2U9c2UrTWF0aC5pbXVsKHZlLHZyKXwwKSsodGU+Pj4xMyl8MCkr''@;'; put 'put ''KFFuPj4+MjYpfDAsUW4mPTY3MTA4ODYzLGFlPU1hdGguaW11bChSdCxXdCksdGU9KHRlPU1hdGguaW11bChSdCxBdCkpK01hdGguaW11bChQdCxXdCl8MCxzZT1NYXRoLmltdWwoUHQsQXQpLGFlPWFlK01hdGguaW11bChIZSxzdCl8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKEhlLFV0KXwwKStN''@;'; put 'put ''YXRoLmltdWwodXQsc3QpfDAsc2U9c2UrTWF0aC5pbXVsKHV0LFV0KXwwLGFlPWFlK01hdGguaW11bChpdCxXZSl8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKGl0LFR0KXwwKStNYXRoLmltdWwoJGUsV2UpfDAsc2U9c2UrTWF0aC5pbXVsKCRlLFR0KXwwLGFlPWFlK01hdGguaW11bCh5dCxodCl8''@;'; put 'put ''MCx0ZT0odGU9dGUrTWF0aC5pbXVsKHl0LHh0KXwwKStNYXRoLmltdWwoTXQsaHQpfDAsc2U9c2UrTWF0aC5pbXVsKE10LHh0KXwwLGFlPWFlK01hdGguaW11bChudCxybil8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKG50LHp0KXwwKStNYXRoLmltdWwoUWUscm4pfDAsc2U9c2UrTWF0aC5pbXVs''@;'; put 'put ''KFFlLHp0KXwwLGFlPWFlK01hdGguaW11bChrZSxjbil8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKGtlLGZuKXwwKStNYXRoLmltdWwoQWUsY24pfDAsc2U9c2UrTWF0aC5pbXVsKEFlLGZuKXwwLGFlPWFlK01hdGguaW11bChPZSxYdCl8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKE9lLGVuKXwwKStN''@;'; put 'put ''YXRoLmltdWwoSWUsWHQpfDAsc2U9c2UrTWF0aC5pbXVsKEllLGVuKXwwO3ZhciBsYT0oQSsoYWU9YWUrTWF0aC5pbXVsKHplLEVpKXwwKXwwKSsoKDgxOTEmKHRlPSh0ZT10ZStNYXRoLmltdWwoemUsdnIpfDApK01hdGguaW11bChEZSxFaSl8MCkpPDwxMyl8MDtBPSgoc2U9c2UrTWF0aC5p''@;'; put 'put ''bXVsKERlLHZyKXwwKSsodGU+Pj4xMyl8MCkrKGxhPj4+MjYpfDAsbGEmPTY3MTA4ODYzLGFlPU1hdGguaW11bChSdCxzdCksdGU9KHRlPU1hdGguaW11bChSdCxVdCkpK01hdGguaW11bChQdCxzdCl8MCxzZT1NYXRoLmltdWwoUHQsVXQpLGFlPWFlK01hdGguaW11bChIZSxXZSl8MCx0ZT0o''@;'; put 'put ''dGU9dGUrTWF0aC5pbXVsKEhlLFR0KXwwKStNYXRoLmltdWwodXQsV2UpfDAsc2U9c2UrTWF0aC5pbXVsKHV0LFR0KXwwLGFlPWFlK01hdGguaW11bChpdCxodCl8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKGl0LHh0KXwwKStNYXRoLmltdWwoJGUsaHQpfDAsc2U9c2UrTWF0aC5pbXVsKCRlLHh0''@;'; put 'put ''KXwwLGFlPWFlK01hdGguaW11bCh5dCxybil8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKHl0LHp0KXwwKStNYXRoLmltdWwoTXQscm4pfDAsc2U9c2UrTWF0aC5pbXVsKE10LHp0KXwwLGFlPWFlK01hdGguaW11bChudCxjbil8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKG50LGZuKXwwKStNYXRoLmlt''@;'; put 'put ''dWwoUWUsY24pfDAsc2U9c2UrTWF0aC5pbXVsKFFlLGZuKXwwLGFlPWFlK01hdGguaW11bChrZSxYdCl8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKGtlLGVuKXwwKStNYXRoLmltdWwoQWUsWHQpfDAsc2U9c2UrTWF0aC5pbXVsKEFlLGVuKXwwO3ZhciB5YT0oQSsoYWU9YWUrTWF0aC5pbXVsKE9l''@;'; put 'put ''LEVpKXwwKXwwKSsoKDgxOTEmKHRlPSh0ZT10ZStNYXRoLmltdWwoT2UsdnIpfDApK01hdGguaW11bChJZSxFaSl8MCkpPDwxMyl8MDtBPSgoc2U9c2UrTWF0aC5pbXVsKEllLHZyKXwwKSsodGU+Pj4xMyl8MCkrKHlhPj4+MjYpfDAseWEmPTY3MTA4ODYzLGFlPU1hdGguaW11bChSdCxXZSks''@;'; put 'put ''dGU9KHRlPU1hdGguaW11bChSdCxUdCkpK01hdGguaW11bChQdCxXZSl8MCxzZT1NYXRoLmltdWwoUHQsVHQpLGFlPWFlK01hdGguaW11bChIZSxodCl8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKEhlLHh0KXwwKStNYXRoLmltdWwodXQsaHQpfDAsc2U9c2UrTWF0aC5pbXVsKHV0LHh0KXwwLGFl''@;'; put 'put ''PWFlK01hdGguaW11bChpdCxybil8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKGl0LHp0KXwwKStNYXRoLmltdWwoJGUscm4pfDAsc2U9c2UrTWF0aC5pbXVsKCRlLHp0KXwwLGFlPWFlK01hdGguaW11bCh5dCxjbil8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKHl0LGZuKXwwKStNYXRoLmltdWwoTXQs''@;'; put 'put ''Y24pfDAsc2U9c2UrTWF0aC5pbXVsKE10LGZuKXwwLGFlPWFlK01hdGguaW11bChudCxYdCl8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKG50LGVuKXwwKStNYXRoLmltdWwoUWUsWHQpfDAsc2U9c2UrTWF0aC5pbXVsKFFlLGVuKXwwO3ZhciBMYT0oQSsoYWU9YWUrTWF0aC5pbXVsKGtlLEVpKXww''@;'; put 'put ''KXwwKSsoKDgxOTEmKHRlPSh0ZT10ZStNYXRoLmltdWwoa2UsdnIpfDApK01hdGguaW11bChBZSxFaSl8MCkpPDwxMyl8MDtBPSgoc2U9c2UrTWF0aC5pbXVsKEFlLHZyKXwwKSsodGU+Pj4xMyl8MCkrKExhPj4+MjYpfDAsTGEmPTY3MTA4ODYzLGFlPU1hdGguaW11bChSdCxodCksdGU9KHRl''@;'; put 'put ''PU1hdGguaW11bChSdCx4dCkpK01hdGguaW11bChQdCxodCl8MCxzZT1NYXRoLmltdWwoUHQseHQpLGFlPWFlK01hdGguaW11bChIZSxybil8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKEhlLHp0KXwwKStNYXRoLmltdWwodXQscm4pfDAsc2U9c2UrTWF0aC5pbXVsKHV0LHp0KXwwLGFlPWFlK01h''@;'; put 'put ''dGguaW11bChpdCxjbil8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKGl0LGZuKXwwKStNYXRoLmltdWwoJGUsY24pfDAsc2U9c2UrTWF0aC5pbXVsKCRlLGZuKXwwLGFlPWFlK01hdGguaW11bCh5dCxYdCl8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKHl0LGVuKXwwKStNYXRoLmltdWwoTXQsWHQpfDAs''@;'; put 'put ''c2U9c2UrTWF0aC5pbXVsKE10LGVuKXwwO3ZhciBGYT0oQSsoYWU9YWUrTWF0aC5pbXVsKG50LEVpKXwwKXwwKSsoKDgxOTEmKHRlPSh0ZT10ZStNYXRoLmltdWwobnQsdnIpfDApK01hdGguaW11bChRZSxFaSl8MCkpPDwxMyl8MDtBPSgoc2U9c2UrTWF0aC5pbXVsKFFlLHZyKXwwKSsodGU+''@;'; put 'put ''Pj4xMyl8MCkrKEZhPj4+MjYpfDAsRmEmPTY3MTA4ODYzLGFlPU1hdGguaW11bChSdCxybiksdGU9KHRlPU1hdGguaW11bChSdCx6dCkpK01hdGguaW11bChQdCxybil8MCxzZT1NYXRoLmltdWwoUHQsenQpLGFlPWFlK01hdGguaW11bChIZSxjbil8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKEhl''@;'; put 'put ''LGZuKXwwKStNYXRoLmltdWwodXQsY24pfDAsc2U9c2UrTWF0aC5pbXVsKHV0LGZuKXwwLGFlPWFlK01hdGguaW11bChpdCxYdCl8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKGl0LGVuKXwwKStNYXRoLmltdWwoJGUsWHQpfDAsc2U9c2UrTWF0aC5pbXVsKCRlLGVuKXwwO3ZhciB0aT0oQSsoYWU9''@;'; put 'put ''YWUrTWF0aC5pbXVsKHl0LEVpKXwwKXwwKSsoKDgxOTEmKHRlPSh0ZT10ZStNYXRoLmltdWwoeXQsdnIpfDApK01hdGguaW11bChNdCxFaSl8MCkpPDwxMyl8MDtBPSgoc2U9c2UrTWF0aC5pbXVsKE10LHZyKXwwKSsodGU+Pj4xMyl8MCkrKHRpPj4+MjYpfDAsdGkmPTY3MTA4ODYzLGFlPU1h''@;'; put 'put ''dGguaW11bChSdCxjbiksdGU9KHRlPU1hdGguaW11bChSdCxmbikpK01hdGguaW11bChQdCxjbil8MCxzZT1NYXRoLmltdWwoUHQsZm4pLGFlPWFlK01hdGguaW11bChIZSxYdCl8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKEhlLGVuKXwwKStNYXRoLmltdWwodXQsWHQpfDAsc2U9c2UrTWF0aC5p''@;'; put 'put ''bXVsKHV0LGVuKXwwO3ZhciBnbz0oQSsoYWU9YWUrTWF0aC5pbXVsKGl0LEVpKXwwKXwwKSsoKDgxOTEmKHRlPSh0ZT10ZStNYXRoLmltdWwoaXQsdnIpfDApK01hdGguaW11bCgkZSxFaSl8MCkpPDwxMyl8MDtBPSgoc2U9c2UrTWF0aC5pbXVsKCRlLHZyKXwwKSsodGU+Pj4xMyl8MCkrKGdv''@;'; put 'put ''Pj4+MjYpfDAsZ28mPTY3MTA4ODYzLGFlPU1hdGguaW11bChSdCxYdCksdGU9KHRlPU1hdGguaW11bChSdCxlbikpK01hdGguaW11bChQdCxYdCl8MCxzZT1NYXRoLmltdWwoUHQsZW4pO3ZhciBOcz0oQSsoYWU9YWUrTWF0aC5pbXVsKEhlLEVpKXwwKXwwKSsoKDgxOTEmKHRlPSh0ZT10ZStN''@;'; put 'put ''YXRoLmltdWwoSGUsdnIpfDApK01hdGguaW11bCh1dCxFaSl8MCkpPDwxMyl8MDtBPSgoc2U9c2UrTWF0aC5pbXVsKHV0LHZyKXwwKSsodGU+Pj4xMyl8MCkrKE5zPj4+MjYpfDAsTnMmPTY3MTA4ODYzO3ZhciBibD0oQSsoYWU9TWF0aC5pbXVsKFJ0LEVpKSl8MCkrKCg4MTkxJih0ZT0odGU9''@;'; put 'put ''TWF0aC5pbXVsKFJ0LHZyKSkrTWF0aC5pbXVsKFB0LEVpKXwwKSk8PDEzKXwwO3JldHVybiBBPSgoc2U9TWF0aC5pbXVsKFB0LHZyKSkrKHRlPj4+MTMpfDApKyhibD4+PjI2KXwwLGJsJj02NzEwODg2MyxtWzBdPVduLG1bMV09JGksbVsyXT1laSxtWzNdPVFyLG1bNF09VmksbVs1XT1OaSxt''@;'; put 'put ''WzZdPURhLG1bN109THIsbVs4XT1XaSxtWzldPXBhLG1bMTBdPVFuLG1bMTFdPWxhLG1bMTJdPXlhLG1bMTNdPUxhLG1bMTRdPUZhLG1bMTVdPXRpLG1bMTZdPWdvLG1bMTddPU5zLG1bMThdPWJsLDAhPT1BJiYobVsxOV09QSxILmxlbmd0aCsrKSxIfTtmdW5jdGlvbiBuZSh4LEMsVCl7VC5u''@;'; put 'put ''ZWdhdGl2ZT1DLm5lZ2F0aXZlXngubmVnYXRpdmUsVC5sZW5ndGg9eC5sZW5ndGgrQy5sZW5ndGg7Zm9yKHZhciBIPTAsaj0wLEU9MDtFPFQubGVuZ3RoLTE7RSsrKXt2YXIgbT1qO2o9MDtmb3IodmFyIEE9NjcxMDg4NjMmSCxhZT1NYXRoLm1pbihFLEMubGVuZ3RoLTEpLHRlPU1hdGgubWF4''@;'; put 'put ''KDAsRS14Lmxlbmd0aCsxKTt0ZTw9YWU7dGUrKyl7dmFyIEplPSgwfHgud29yZHNbRS10ZV0pKigwfEMud29yZHNbdGVdKSxvdD02NzEwODg2MyZKZTtBPTY3MTA4ODYzJihvdD1vdCtBfDApLGorPShtPShtPW0rKEplLzY3MTA4ODY0fDApfDApKyhvdD4+PjI2KXwwKT4+PjI2LG0mPTY3MTA4''@;'; put 'put ''ODYzfVQud29yZHNbRV09QSxIPW0sbT1qfXJldHVybiAwIT09SD9ULndvcmRzW0VdPUg6VC5sZW5ndGgtLSxULl9zdHJpcCgpfWZ1bmN0aW9uIGllKHgsQyxUKXtyZXR1cm4gbmUoeCxDLFQpfWZ1bmN0aW9uIGxlKHgsQyl7dGhpcy54PXgsdGhpcy55PUN9TWF0aC5pbXVsfHwoSj1lZSksdy5w''@;'; put 'put ''cm90b3R5cGUubXVsVG89ZnVuY3Rpb24oQyxUKXt2YXIgaj10aGlzLmxlbmd0aCtDLmxlbmd0aDtyZXR1cm4gMTA9PT10aGlzLmxlbmd0aCYmMTA9PT1DLmxlbmd0aD9KKHRoaXMsQyxUKTpqPDYzP2VlKHRoaXMsQyxUKTpqPDEwMjQ/bmUodGhpcyxDLFQpOmllKHRoaXMsQyxUKX0sbGUucHJv''@;'; put 'put ''dG90eXBlLm1ha2VSQlQ9ZnVuY3Rpb24oQyl7Zm9yKHZhciBUPW5ldyBBcnJheShDKSxIPXcucHJvdG90eXBlLl9jb3VudEJpdHMoQyktMSxqPTA7ajxDO2orKylUW2pdPXRoaXMucmV2QmluKGosSCxDKTtyZXR1cm4gVH0sbGUucHJvdG90eXBlLnJldkJpbj1mdW5jdGlvbihDLFQsSCl7aWYo''@;'; put 'put ''MD09PUN8fEM9PT1ILTEpcmV0dXJuIEM7Zm9yKHZhciBqPTAsRT0wO0U8VDtFKyspanw9KDEmQyk8PFQtRS0xLEM+Pj0xO3JldHVybiBqfSxsZS5wcm90b3R5cGUucGVybXV0ZT1mdW5jdGlvbihDLFQsSCxqLEUsbSl7Zm9yKHZhciBBPTA7QTxtO0ErKylqW0FdPVRbQ1tBXV0sRVtBXT1IW0Nb''@;'; put 'put ''QV1dfSxsZS5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKEMsVCxILGosRSxtKXt0aGlzLnBlcm11dGUobSxDLFQsSCxqLEUpO2Zvcih2YXIgQT0xO0E8RTtBPDw9MSlmb3IodmFyIGFlPUE8PDEsdGU9TWF0aC5jb3MoMipNYXRoLlBJL2FlKSxzZT1NYXRoLnNpbigyKk1hdGguUEkvYWUp''@;'; put 'put ''LHdlPTA7d2U8RTt3ZSs9YWUpZm9yKHZhciBVZT10ZSxKZT1zZSxvdD0wO290PEE7b3QrKyl7dmFyIHhlPUhbd2Urb3RdLHZlPWpbd2Urb3RdLFhlPUhbd2Urb3QrQV0semU9alt3ZStvdCtBXSxEZT1VZSpYZS1KZSp6ZTt6ZT1VZSp6ZStKZSpYZSxIW3dlK290XT14ZSsoWGU9RGUpLGpbd2Ur''@;'; put 'put ''b3RdPXZlK3plLEhbd2Urb3QrQV09eGUtWGUsalt3ZStvdCtBXT12ZS16ZSxvdCE9PWFlJiYoRGU9dGUqVWUtc2UqSmUsSmU9dGUqSmUrc2UqVWUsVWU9RGUpfX0sbGUucHJvdG90eXBlLmd1ZXNzTGVuMTNiPWZ1bmN0aW9uKEMsVCl7dmFyIEg9MXxNYXRoLm1heChULEMpLGo9MSZILEU9MDtm''@;'; put 'put ''b3IoSD1ILzJ8MDtIO0g+Pj49MSlFKys7cmV0dXJuIDE8PEUrMStqfSxsZS5wcm90b3R5cGUuY29uanVnYXRlPWZ1bmN0aW9uKEMsVCxIKXtpZighKEg8PTEpKWZvcih2YXIgaj0wO2o8SC8yO2orKyl7dmFyIEU9Q1tqXTtDW2pdPUNbSC1qLTFdLENbSC1qLTFdPUUsRT1UW2pdLFRbal09LVRb''@;'; put 'put ''SC1qLTFdLFRbSC1qLTFdPS1FfX0sbGUucHJvdG90eXBlLm5vcm1hbGl6ZTEzYj1mdW5jdGlvbihDLFQpe2Zvcih2YXIgSD0wLGo9MDtqPFQvMjtqKyspe3ZhciBFPTgxOTIqTWF0aC5yb3VuZChDWzIqaisxXS9UKStNYXRoLnJvdW5kKENbMipqXS9UKStIO0Nbal09NjcxMDg4NjMmRSxIPUU8''@;'; put 'put ''NjcxMDg4NjQ/MDpFLzY3MTA4ODY0fDB9cmV0dXJuIEN9LGxlLnByb3RvdHlwZS5jb252ZXJ0MTNiPWZ1bmN0aW9uKEMsVCxILGope2Zvcih2YXIgRT0wLG09MDttPFQ7bSsrKUhbMiptXT04MTkxJihFKz0wfENbbV0pLEhbMiptKzFdPTgxOTEmKEU+Pj49MTMpLEU+Pj49MTM7Zm9yKG09MipU''@;'; put 'put ''O208ajsrK20pSFttXT0wO2coMD09PUUpLGcoISgtODE5MiZFKSl9LGxlLnByb3RvdHlwZS5zdHViPWZ1bmN0aW9uKEMpe2Zvcih2YXIgVD1uZXcgQXJyYXkoQyksSD0wO0g8QztIKyspVFtIXT0wO3JldHVybiBUfSxsZS5wcm90b3R5cGUubXVscD1mdW5jdGlvbihDLFQsSCl7dmFyIGo9Mip0''@;'; put 'put ''aGlzLmd1ZXNzTGVuMTNiKEMubGVuZ3RoLFQubGVuZ3RoKSxFPXRoaXMubWFrZVJCVChqKSxtPXRoaXMuc3R1YihqKSxBPW5ldyBBcnJheShqKSxhZT1uZXcgQXJyYXkoaiksdGU9bmV3IEFycmF5KGopLHNlPW5ldyBBcnJheShqKSx3ZT1uZXcgQXJyYXkoaiksVWU9bmV3IEFycmF5KGopLEpl''@;'; put 'put ''PUgud29yZHM7SmUubGVuZ3RoPWosdGhpcy5jb252ZXJ0MTNiKEMud29yZHMsQy5sZW5ndGgsQSxqKSx0aGlzLmNvbnZlcnQxM2IoVC53b3JkcyxULmxlbmd0aCxzZSxqKSx0aGlzLnRyYW5zZm9ybShBLG0sYWUsdGUsaixFKSx0aGlzLnRyYW5zZm9ybShzZSxtLHdlLFVlLGosRSk7Zm9yKHZh''@;'; put 'put ''ciBvdD0wO290PGo7b3QrKyl7dmFyIHhlPWFlW290XSp3ZVtvdF0tdGVbb3RdKlVlW290XTt0ZVtvdF09YWVbb3RdKlVlW290XSt0ZVtvdF0qd2Vbb3RdLGFlW290XT14ZX1yZXR1cm4gdGhpcy5jb25qdWdhdGUoYWUsdGUsaiksdGhpcy50cmFuc2Zvcm0oYWUsdGUsSmUsbSxqLEUpLHRoaXMu''@;'; put 'put ''Y29uanVnYXRlKEplLG0saiksdGhpcy5ub3JtYWxpemUxM2IoSmUsaiksSC5uZWdhdGl2ZT1DLm5lZ2F0aXZlXlQubmVnYXRpdmUsSC5sZW5ndGg9Qy5sZW5ndGgrVC5sZW5ndGgsSC5fc3RyaXAoKX0sdy5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKEMpe3ZhciBUPW5ldyB3KG51bGwpO3JldHVy''@;'; put 'put ''biBULndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtDLmxlbmd0aCksdGhpcy5tdWxUbyhDLFQpfSx3LnByb3RvdHlwZS5tdWxmPWZ1bmN0aW9uKEMpe3ZhciBUPW5ldyB3KG51bGwpO3JldHVybiBULndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtDLmxlbmd0aCksaWUodGhpcyxDLFQp''@;'; put 'put ''fSx3LnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmNsb25lKCkubXVsVG8oQyx0aGlzKX0sdy5wcm90b3R5cGUuaW11bG49ZnVuY3Rpb24oQyl7dmFyIFQ9QzwwO1QmJihDPS1DKSxnKCJudW1iZXIiPT10eXBlb2YgQyksZyhDPDY3MTA4ODY0KTtmb3IodmFyIEg9MCxq''@;'; put 'put ''PTA7ajx0aGlzLmxlbmd0aDtqKyspe3ZhciBFPSgwfHRoaXMud29yZHNbal0pKkMsbT0oNjcxMDg4NjMmRSkrKDY3MTA4ODYzJkgpO0g+Pj0yNixIKz1FLzY3MTA4ODY0fDAsSCs9bT4+PjI2LHRoaXMud29yZHNbal09NjcxMDg4NjMmbX1yZXR1cm4gMCE9PUgmJih0aGlzLndvcmRzW2pdPUgs''@;'; put 'put ''dGhpcy5sZW5ndGgrKyksdGhpcy5sZW5ndGg9MD09PUM/MTp0aGlzLmxlbmd0aCxUP3RoaXMuaW5lZygpOnRoaXN9LHcucHJvdG90eXBlLm11bG49ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbXVsbihDKX0sdy5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMu''@;'; put 'put ''bXVsKHRoaXMpfSx3LnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW11bCh0aGlzLmNsb25lKCkpfSx3LnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24oQyl7dmFyIFQ9ZnVuY3Rpb24gcSh4KXtmb3IodmFyIEM9bmV3IEFycmF5KHguYml0TGVuZ3RoKCkpLFQ9MDtUPEMubGVu''@;'; put 'put ''Z3RoO1QrKylDW1RdPXgud29yZHNbVC8yNnwwXT4+PlQlMjYmMTtyZXR1cm4gQ30oQyk7aWYoMD09PVQubGVuZ3RoKXJldHVybiBuZXcgdygxKTtmb3IodmFyIEg9dGhpcyxqPTA7ajxULmxlbmd0aCYmMD09PVRbal07aisrLEg9SC5zcXIoKSk7aWYoKytqPFQubGVuZ3RoKWZvcih2YXIgRT1I''@;'; put 'put ''LnNxcigpO2o8VC5sZW5ndGg7aisrLEU9RS5zcXIoKSkwIT09VFtqXSYmKEg9SC5tdWwoRSkpO3JldHVybiBIfSx3LnByb3RvdHlwZS5pdXNobG49ZnVuY3Rpb24oQyl7ZygibnVtYmVyIj09dHlwZW9mIEMmJkM+PTApO3ZhciBFLFQ9QyUyNixIPShDLVQpLzI2LGo9NjcxMDg4NjM+Pj4yNi1U''@;'; put 'put ''PDwyNi1UO2lmKDAhPT1UKXt2YXIgbT0wO2ZvcihFPTA7RTx0aGlzLmxlbmd0aDtFKyspe3ZhciBBPXRoaXMud29yZHNbRV0majt0aGlzLndvcmRzW0VdPSgwfHRoaXMud29yZHNbRV0pLUE8PFR8bSxtPUE+Pj4yNi1UfW0mJih0aGlzLndvcmRzW0VdPW0sdGhpcy5sZW5ndGgrKyl9aWYoMCE9''@;'; put 'put ''PUgpe2ZvcihFPXRoaXMubGVuZ3RoLTE7RT49MDtFLS0pdGhpcy53b3Jkc1tFK0hdPXRoaXMud29yZHNbRV07Zm9yKEU9MDtFPEg7RSsrKXRoaXMud29yZHNbRV09MDt0aGlzLmxlbmd0aCs9SH1yZXR1cm4gdGhpcy5fc3RyaXAoKX0sdy5wcm90b3R5cGUuaXNobG49ZnVuY3Rpb24oQyl7cmV0''@;'; put 'put ''dXJuIGcoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaGxuKEMpfSx3LnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24oQyxULEgpe3ZhciBqO2coIm51bWJlciI9PXR5cGVvZiBDJiZDPj0wKSxqPVQ/KFQtVCUyNikvMjY6MDt2YXIgRT1DJTI2LG09TWF0aC5taW4oKEMtRSkvMjYsdGhpcy5s''@;'; put 'put ''ZW5ndGgpLEE9NjcxMDg4NjNeNjcxMDg4NjM+Pj5FPDxFLGFlPUg7aWYoai09bSxqPU1hdGgubWF4KDAsaiksYWUpe2Zvcih2YXIgdGU9MDt0ZTxtO3RlKyspYWUud29yZHNbdGVdPXRoaXMud29yZHNbdGVdO2FlLmxlbmd0aD1tfWlmKDAhPT1tKWlmKHRoaXMubGVuZ3RoPm0pZm9yKHRoaXMu''@;'; put 'put ''bGVuZ3RoLT1tLHRlPTA7dGU8dGhpcy5sZW5ndGg7dGUrKyl0aGlzLndvcmRzW3RlXT10aGlzLndvcmRzW3RlK21dO2Vsc2UgdGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTE7dmFyIHNlPTA7Zm9yKHRlPXRoaXMubGVuZ3RoLTE7dGU+PTAmJigwIT09c2V8fHRlPj1qKTt0ZS0tKXt2YXIg''@;'; put 'put ''d2U9MHx0aGlzLndvcmRzW3RlXTt0aGlzLndvcmRzW3RlXT1zZTw8MjYtRXx3ZT4+PkUsc2U9d2UmQX1yZXR1cm4gYWUmJjAhPT1zZSYmKGFlLndvcmRzW2FlLmxlbmd0aCsrXT1zZSksMD09PXRoaXMubGVuZ3RoJiYodGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTEpLHRoaXMuX3N0cmlw''@;'; put 'put ''KCl9LHcucHJvdG90eXBlLmlzaHJuPWZ1bmN0aW9uKEMsVCxIKXtyZXR1cm4gZygwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNocm4oQyxULEgpfSx3LnByb3RvdHlwZS5zaGxuPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmNsb25lKCkuaXNobG4oQyl9LHcucHJvdG90eXBlLnVzaGxuPWZ1''@;'; put 'put ''bmN0aW9uKEMpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaGxuKEMpfSx3LnByb3RvdHlwZS5zaHJuPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmNsb25lKCkuaXNocm4oQyl9LHcucHJvdG90eXBlLnVzaHJuPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaHJuKEMpfSx3LnBy''@;'; put 'put ''b3RvdHlwZS50ZXN0bj1mdW5jdGlvbihDKXtnKCJudW1iZXIiPT10eXBlb2YgQyYmQz49MCk7dmFyIFQ9QyUyNixIPShDLVQpLzI2O3JldHVybiEodGhpcy5sZW5ndGg8PUh8fCEodGhpcy53b3Jkc1tIXSYxPDxUKSl9LHcucHJvdG90eXBlLmltYXNrbj1mdW5jdGlvbihDKXtnKCJudW1iZXIi''@;'; put 'put ''PT10eXBlb2YgQyYmQz49MCk7dmFyIFQ9QyUyNixIPShDLVQpLzI2O3JldHVybiBnKDA9PT10aGlzLm5lZ2F0aXZlLCJpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJlcnMiKSx0aGlzLmxlbmd0aDw9SD90aGlzOigwIT09VCYmSCsrLHRoaXMubGVuZ3RoPU1hdGgubWluKEgs''@;'; put 'put ''dGhpcy5sZW5ndGgpLDAhPT1UJiYodGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSY9NjcxMDg4NjNeNjcxMDg4NjM+Pj5UPDxUKSx0aGlzLl9zdHJpcCgpKX0sdy5wcm90b3R5cGUubWFza249ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbWFza24oQyl9LHcucHJvdG90eXBlLmlh''@;'; put 'put ''ZGRuPWZ1bmN0aW9uKEMpe3JldHVybiBnKCJudW1iZXIiPT10eXBlb2YgQyksZyhDPDY3MTA4ODY0KSxDPDA/dGhpcy5pc3VibigtQyk6MCE9PXRoaXMubmVnYXRpdmU/MT09PXRoaXMubGVuZ3RoJiYoMHx0aGlzLndvcmRzWzBdKTw9Qz8odGhpcy53b3Jkc1swXT1DLSgwfHRoaXMud29yZHNb''@;'; put 'put ''MF0pLHRoaXMubmVnYXRpdmU9MCx0aGlzKToodGhpcy5uZWdhdGl2ZT0wLHRoaXMuaXN1Ym4oQyksdGhpcy5uZWdhdGl2ZT0xLHRoaXMpOnRoaXMuX2lhZGRuKEMpfSx3LnByb3RvdHlwZS5faWFkZG49ZnVuY3Rpb24oQyl7dGhpcy53b3Jkc1swXSs9Qztmb3IodmFyIFQ9MDtUPHRoaXMubGVu''@;'; put 'put ''Z3RoJiZ0aGlzLndvcmRzW1RdPj02NzEwODg2NDtUKyspdGhpcy53b3Jkc1tUXS09NjcxMDg4NjQsVD09PXRoaXMubGVuZ3RoLTE/dGhpcy53b3Jkc1tUKzFdPTE6dGhpcy53b3Jkc1tUKzFdKys7cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLFQrMSksdGhpc30sdy5w''@;'; put 'put ''cm90b3R5cGUuaXN1Ym49ZnVuY3Rpb24oQyl7aWYoZygibnVtYmVyIj09dHlwZW9mIEMpLGcoQzw2NzEwODg2NCksQzwwKXJldHVybiB0aGlzLmlhZGRuKC1DKTtpZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZG4oQyksdGhpcy5uZWdhdGl2ZT0x''@;'; put 'put ''LHRoaXM7aWYodGhpcy53b3Jkc1swXS09QywxPT09dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbMF08MCl0aGlzLndvcmRzWzBdPS10aGlzLndvcmRzWzBdLHRoaXMubmVnYXRpdmU9MTtlbHNlIGZvcih2YXIgVD0wO1Q8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbVF08MDtUKyspdGhpcy53b3Jk''@;'; put 'put ''c1tUXSs9NjcxMDg4NjQsdGhpcy53b3Jkc1tUKzFdLT0xO3JldHVybiB0aGlzLl9zdHJpcCgpfSx3LnByb3RvdHlwZS5hZGRuPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmNsb25lKCkuaWFkZG4oQyl9LHcucHJvdG90eXBlLnN1Ym49ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5p''@;'; put 'put ''c3VibihDKX0sdy5wcm90b3R5cGUuaWFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpc30sdy5wcm90b3R5cGUuYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWJzKCl9LHcucHJvdG90eXBlLl9pc2hsbnN1Ym11bD1mdW5jdGlvbihDLFQsSCl7dmFy''@;'; put 'put ''IEU7dGhpcy5fZXhwYW5kKEMubGVuZ3RoK0gpO3ZhciBtLEE9MDtmb3IoRT0wO0U8Qy5sZW5ndGg7RSsrKXttPSgwfHRoaXMud29yZHNbRStIXSkrQTt2YXIgYWU9KDB8Qy53b3Jkc1tFXSkqVDtBPSgobS09NjcxMDg4NjMmYWUpPj4yNiktKGFlLzY3MTA4ODY0fDApLHRoaXMud29yZHNbRStI''@;'; put 'put ''XT02NzEwODg2MyZtfWZvcig7RTx0aGlzLmxlbmd0aC1IO0UrKylBPShtPSgwfHRoaXMud29yZHNbRStIXSkrQSk+PjI2LHRoaXMud29yZHNbRStIXT02NzEwODg2MyZtO2lmKDA9PT1BKXJldHVybiB0aGlzLl9zdHJpcCgpO2ZvcihnKC0xPT09QSksQT0wLEU9MDtFPHRoaXMubGVuZ3RoO0Ur''@;'; put 'put ''KylBPShtPS0oMHx0aGlzLndvcmRzW0VdKStBKT4+MjYsdGhpcy53b3Jkc1tFXT02NzEwODg2MyZtO3JldHVybiB0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fc3RyaXAoKX0sdy5wcm90b3R5cGUuX3dvcmREaXY9ZnVuY3Rpb24oQyxUKXt2YXIgSCxqPXRoaXMuY2xvbmUoKSxFPUMsbT0wfEUud29y''@;'; put 'put ''ZHNbRS5sZW5ndGgtMV07MCE9KEg9MjYtdGhpcy5fY291bnRCaXRzKG0pKSYmKEU9RS51c2hsbihIKSxqLml1c2hsbihIKSxtPTB8RS53b3Jkc1tFLmxlbmd0aC0xXSk7dmFyIHRlLGFlPWoubGVuZ3RoLUUubGVuZ3RoO2lmKCJtb2QiIT09VCl7KHRlPW5ldyB3KG51bGwpKS5sZW5ndGg9YWUr''@;'; put 'put ''MSx0ZS53b3Jkcz1uZXcgQXJyYXkodGUubGVuZ3RoKTtmb3IodmFyIHNlPTA7c2U8dGUubGVuZ3RoO3NlKyspdGUud29yZHNbc2VdPTB9dmFyIHdlPWouY2xvbmUoKS5faXNobG5zdWJtdWwoRSwxLGFlKTswPT09d2UubmVnYXRpdmUmJihqPXdlLHRlJiYodGUud29yZHNbYWVdPTEpKTtmb3Io''@;'; put 'put ''dmFyIFVlPWFlLTE7VWU+PTA7VWUtLSl7dmFyIEplPTY3MTA4ODY0KigwfGoud29yZHNbRS5sZW5ndGgrVWVdKSsoMHxqLndvcmRzW0UubGVuZ3RoK1VlLTFdKTtmb3IoSmU9TWF0aC5taW4oSmUvbXwwLDY3MTA4ODYzKSxqLl9pc2hsbnN1Ym11bChFLEplLFVlKTswIT09ai5uZWdhdGl2ZTsp''@;'; put 'put ''SmUtLSxqLm5lZ2F0aXZlPTAsai5faXNobG5zdWJtdWwoRSwxLFVlKSxqLmlzWmVybygpfHwoai5uZWdhdGl2ZV49MSk7dGUmJih0ZS53b3Jkc1tVZV09SmUpfXJldHVybiB0ZSYmdGUuX3N0cmlwKCksai5fc3RyaXAoKSwiZGl2IiE9PVQmJjAhPT1IJiZqLml1c2hybihIKSx7ZGl2OnRlfHxu''@;'; put 'put ''dWxsLG1vZDpqfX0sdy5wcm90b3R5cGUuZGl2bW9kPWZ1bmN0aW9uKEMsVCxIKXtyZXR1cm4gZyghQy5pc1plcm8oKSksdGhpcy5pc1plcm8oKT97ZGl2Om5ldyB3KDApLG1vZDpuZXcgdygwKX06MCE9PXRoaXMubmVnYXRpdmUmJjA9PT1DLm5lZ2F0aXZlPyhtPXRoaXMubmVnKCkuZGl2bW9k''@;'; put 'put ''KEMsVCksIm1vZCIhPT1UJiYoaj1tLmRpdi5uZWcoKSksImRpdiIhPT1UJiYoRT1tLm1vZC5uZWcoKSxIJiYwIT09RS5uZWdhdGl2ZSYmRS5pYWRkKEMpKSx7ZGl2OmosbW9kOkV9KTowPT09dGhpcy5uZWdhdGl2ZSYmMCE9PUMubmVnYXRpdmU/KG09dGhpcy5kaXZtb2QoQy5uZWcoKSxUKSwi''@;'; put 'put ''bW9kIiE9PVQmJihqPW0uZGl2Lm5lZygpKSx7ZGl2OmosbW9kOm0ubW9kfSk6dGhpcy5uZWdhdGl2ZSZDLm5lZ2F0aXZlPyhtPXRoaXMubmVnKCkuZGl2bW9kKEMubmVnKCksVCksImRpdiIhPT1UJiYoRT1tLm1vZC5uZWcoKSxIJiYwIT09RS5uZWdhdGl2ZSYmRS5pc3ViKEMpKSx7ZGl2Om0u''@;'; put 'put ''ZGl2LG1vZDpFfSk6Qy5sZW5ndGg+dGhpcy5sZW5ndGh8fHRoaXMuY21wKEMpPDA/e2RpdjpuZXcgdygwKSxtb2Q6dGhpc306MT09PUMubGVuZ3RoPyJkaXYiPT09VD97ZGl2OnRoaXMuZGl2bihDLndvcmRzWzBdKSxtb2Q6bnVsbH06Im1vZCI9PT1UP3tkaXY6bnVsbCxtb2Q6bmV3IHcodGhp''@;'; put 'put ''cy5tb2RybihDLndvcmRzWzBdKSl9OntkaXY6dGhpcy5kaXZuKEMud29yZHNbMF0pLG1vZDpuZXcgdyh0aGlzLm1vZHJuKEMud29yZHNbMF0pKX06dGhpcy5fd29yZERpdihDLFQpO3ZhciBqLEUsbX0sdy5wcm90b3R5cGUuZGl2PWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmRpdm1vZChDLCJk''@;'; put 'put ''aXYiLCExKS5kaXZ9LHcucHJvdG90eXBlLm1vZD1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5kaXZtb2QoQywibW9kIiwhMSkubW9kfSx3LnByb3RvdHlwZS51bW9kPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmRpdm1vZChDLCJtb2QiLCEwKS5tb2R9LHcucHJvdG90eXBlLmRpdlJvdW5kPWZ1''@;'; put 'put ''bmN0aW9uKEMpe3ZhciBUPXRoaXMuZGl2bW9kKEMpO2lmKFQubW9kLmlzWmVybygpKXJldHVybiBULmRpdjt2YXIgSD0wIT09VC5kaXYubmVnYXRpdmU/VC5tb2QuaXN1YihDKTpULm1vZCxqPUMudXNocm4oMSksRT1DLmFuZGxuKDEpLG09SC5jbXAoaik7cmV0dXJuIG08MHx8MT09PUUmJjA9''@;'; put 'put ''PT1tP1QuZGl2OjAhPT1ULmRpdi5uZWdhdGl2ZT9ULmRpdi5pc3VibigxKTpULmRpdi5pYWRkbigxKX0sdy5wcm90b3R5cGUubW9kcm49ZnVuY3Rpb24oQyl7dmFyIFQ9QzwwO1QmJihDPS1DKSxnKEM8PTY3MTA4ODYzKTtmb3IodmFyIEg9KDE8PDI2KSVDLGo9MCxFPXRoaXMubGVuZ3RoLTE7''@;'; put 'put ''RT49MDtFLS0paj0oSCpqKygwfHRoaXMud29yZHNbRV0pKSVDO3JldHVybiBUPy1qOmp9LHcucHJvdG90eXBlLm1vZG49ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMubW9kcm4oQyl9LHcucHJvdG90eXBlLmlkaXZuPWZ1bmN0aW9uKEMpe3ZhciBUPUM8MDtUJiYoQz0tQyksZyhDPD02NzEwODg2''@;'; put 'put ''Myk7Zm9yKHZhciBIPTAsaj10aGlzLmxlbmd0aC0xO2o+PTA7ai0tKXt2YXIgRT0oMHx0aGlzLndvcmRzW2pdKSs2NzEwODg2NCpIO3RoaXMud29yZHNbal09RS9DfDAsSD1FJUN9cmV0dXJuIHRoaXMuX3N0cmlwKCksVD90aGlzLmluZWcoKTp0aGlzfSx3LnByb3RvdHlwZS5kaXZuPWZ1bmN0''@;'; put 'put ''aW9uKEMpe3JldHVybiB0aGlzLmNsb25lKCkuaWRpdm4oQyl9LHcucHJvdG90eXBlLmVnY2Q9ZnVuY3Rpb24oQyl7ZygwPT09Qy5uZWdhdGl2ZSksZyghQy5pc1plcm8oKSk7dmFyIFQ9dGhpcyxIPUMuY2xvbmUoKTtUPTAhPT1ULm5lZ2F0aXZlP1QudW1vZChDKTpULmNsb25lKCk7Zm9yKHZh''@;'; put 'put ''ciBqPW5ldyB3KDEpLEU9bmV3IHcoMCksbT1uZXcgdygwKSxBPW5ldyB3KDEpLGFlPTA7VC5pc0V2ZW4oKSYmSC5pc0V2ZW4oKTspVC5pdXNocm4oMSksSC5pdXNocm4oMSksKythZTtmb3IodmFyIHRlPUguY2xvbmUoKSxzZT1ULmNsb25lKCk7IVQuaXNaZXJvKCk7KXtmb3IodmFyIHdlPTAs''@;'; put 'put ''VWU9MTshKFQud29yZHNbMF0mVWUpJiZ3ZTwyNjsrK3dlLFVlPDw9MSk7aWYod2U+MClmb3IoVC5pdXNocm4od2UpO3dlLS0gPjA7KShqLmlzT2RkKCl8fEUuaXNPZGQoKSkmJihqLmlhZGQodGUpLEUuaXN1YihzZSkpLGouaXVzaHJuKDEpLEUuaXVzaHJuKDEpO2Zvcih2YXIgSmU9MCxvdD0x''@;'; put 'put ''OyEoSC53b3Jkc1swXSZvdCkmJkplPDI2OysrSmUsb3Q8PD0xKTtpZihKZT4wKWZvcihILml1c2hybihKZSk7SmUtLSA+MDspKG0uaXNPZGQoKXx8QS5pc09kZCgpKSYmKG0uaWFkZCh0ZSksQS5pc3ViKHNlKSksbS5pdXNocm4oMSksQS5pdXNocm4oMSk7VC5jbXAoSCk+PTA/KFQuaXN1YihI''@;'; put 'put ''KSxqLmlzdWIobSksRS5pc3ViKEEpKTooSC5pc3ViKFQpLG0uaXN1YihqKSxBLmlzdWIoRSkpfXJldHVybnthOm0sYjpBLGdjZDpILml1c2hsbihhZSl9fSx3LnByb3RvdHlwZS5faW52bXA9ZnVuY3Rpb24oQyl7ZygwPT09Qy5uZWdhdGl2ZSksZyghQy5pc1plcm8oKSk7dmFyIHdlLFQ9dGhp''@;'; put 'put ''cyxIPUMuY2xvbmUoKTtUPTAhPT1ULm5lZ2F0aXZlP1QudW1vZChDKTpULmNsb25lKCk7Zm9yKHZhciBqPW5ldyB3KDEpLEU9bmV3IHcoMCksbT1ILmNsb25lKCk7VC5jbXBuKDEpPjAmJkguY21wbigxKT4wOyl7Zm9yKHZhciBBPTAsYWU9MTshKFQud29yZHNbMF0mYWUpJiZBPDI2OysrQSxh''@;'; put 'put ''ZTw8PTEpO2lmKEE+MClmb3IoVC5pdXNocm4oQSk7QS0tID4wOylqLmlzT2RkKCkmJmouaWFkZChtKSxqLml1c2hybigxKTtmb3IodmFyIHRlPTAsc2U9MTshKEgud29yZHNbMF0mc2UpJiZ0ZTwyNjsrK3RlLHNlPDw9MSk7aWYodGU+MClmb3IoSC5pdXNocm4odGUpO3RlLS0gPjA7KUUuaXNP''@;'; put 'put ''ZGQoKSYmRS5pYWRkKG0pLEUuaXVzaHJuKDEpO1QuY21wKEgpPj0wPyhULmlzdWIoSCksai5pc3ViKEUpKTooSC5pc3ViKFQpLEUuaXN1YihqKSl9cmV0dXJuKHdlPTA9PT1ULmNtcG4oMSk/ajpFKS5jbXBuKDApPDAmJndlLmlhZGQoQyksd2V9LHcucHJvdG90eXBlLmdjZD1mdW5jdGlvbihD''@;'; put 'put ''KXtpZih0aGlzLmlzWmVybygpKXJldHVybiBDLmFicygpO2lmKEMuaXNaZXJvKCkpcmV0dXJuIHRoaXMuYWJzKCk7dmFyIFQ9dGhpcy5jbG9uZSgpLEg9Qy5jbG9uZSgpO1QubmVnYXRpdmU9MCxILm5lZ2F0aXZlPTA7Zm9yKHZhciBqPTA7VC5pc0V2ZW4oKSYmSC5pc0V2ZW4oKTtqKyspVC5p''@;'; put 'put ''dXNocm4oMSksSC5pdXNocm4oMSk7Zm9yKDs7KXtmb3IoO1QuaXNFdmVuKCk7KVQuaXVzaHJuKDEpO2Zvcig7SC5pc0V2ZW4oKTspSC5pdXNocm4oMSk7dmFyIEU9VC5jbXAoSCk7aWYoRTwwKXt2YXIgbT1UO1Q9SCxIPW19ZWxzZSBpZigwPT09RXx8MD09PUguY21wbigxKSlicmVhaztULmlz''@;'; put 'put ''dWIoSCl9cmV0dXJuIEguaXVzaGxuKGopfSx3LnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmVnY2QoQykuYS51bW9kKEMpfSx3LnByb3RvdHlwZS5pc0V2ZW49ZnVuY3Rpb24oKXtyZXR1cm4hKDEmdGhpcy53b3Jkc1swXSl9LHcucHJvdG90eXBlLmlzT2RkPWZ1bmN0''@;'; put 'put ''aW9uKCl7cmV0dXJuISgxJn50aGlzLndvcmRzWzBdKX0sdy5wcm90b3R5cGUuYW5kbG49ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMud29yZHNbMF0mQ30sdy5wcm90b3R5cGUuYmluY249ZnVuY3Rpb24oQyl7ZygibnVtYmVyIj09dHlwZW9mIEMpO3ZhciBUPUMlMjYsSD0oQy1UKS8yNixqPTE8''@;'; put 'put ''PFQ7aWYodGhpcy5sZW5ndGg8PUgpcmV0dXJuIHRoaXMuX2V4cGFuZChIKzEpLHRoaXMud29yZHNbSF18PWosdGhpcztmb3IodmFyIEU9aixtPUg7MCE9PUUmJm08dGhpcy5sZW5ndGg7bSsrKXt2YXIgQT0wfHRoaXMud29yZHNbbV07RT0oQSs9RSk+Pj4yNix0aGlzLndvcmRzW21dPUEmPTY3''@;'; put 'put ''MTA4ODYzfXJldHVybiAwIT09RSYmKHRoaXMud29yZHNbbV09RSx0aGlzLmxlbmd0aCsrKSx0aGlzfSx3LnByb3RvdHlwZS5pc1plcm89ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXX0sdy5wcm90b3R5cGUuY21wbj1mdW5jdGlvbihDKXt2YXIg''@;'; put 'put ''SCxUPUM8MDtpZigwIT09dGhpcy5uZWdhdGl2ZSYmIVQpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJlQpcmV0dXJuIDE7aWYodGhpcy5fc3RyaXAoKSx0aGlzLmxlbmd0aD4xKUg9MTtlbHNle1QmJihDPS1DKSxnKEM8PTY3MTA4ODYzLCJOdW1iZXIgaXMgdG9vIGJpZyIpO3ZhciBq''@;'; put 'put ''PTB8dGhpcy53b3Jkc1swXTtIPWo9PT1DPzA6ajxDPy0xOjF9cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LUg6SH0sdy5wcm90b3R5cGUuY21wPWZ1bmN0aW9uKEMpe2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Qy5uZWdhdGl2ZSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYm''@;'; put 'put ''MCE9PUMubmVnYXRpdmUpcmV0dXJuIDE7dmFyIFQ9dGhpcy51Y21wKEMpO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1UOlR9LHcucHJvdG90eXBlLnVjbXA9ZnVuY3Rpb24oQyl7aWYodGhpcy5sZW5ndGg+Qy5sZW5ndGgpcmV0dXJuIDE7aWYodGhpcy5sZW5ndGg8Qy5sZW5ndGgpcmV0''@;'; put 'put ''dXJuLTE7Zm9yKHZhciBUPTAsSD10aGlzLmxlbmd0aC0xO0g+PTA7SC0tKXt2YXIgaj0wfHRoaXMud29yZHNbSF0sRT0wfEMud29yZHNbSF07aWYoaiE9PUUpe2o8RT9UPS0xOmo+RSYmKFQ9MSk7YnJlYWt9fXJldHVybiBUfSx3LnByb3RvdHlwZS5ndG49ZnVuY3Rpb24oQyl7cmV0dXJuIDE9''@;'; put 'put ''PT10aGlzLmNtcG4oQyl9LHcucHJvdG90eXBlLmd0PWZ1bmN0aW9uKEMpe3JldHVybiAxPT09dGhpcy5jbXAoQyl9LHcucHJvdG90eXBlLmd0ZW49ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuY21wbihDKT49MH0sdy5wcm90b3R5cGUuZ3RlPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmNtcChD''@;'; put 'put ''KT49MH0sdy5wcm90b3R5cGUubHRuPWZ1bmN0aW9uKEMpe3JldHVybi0xPT09dGhpcy5jbXBuKEMpfSx3LnByb3RvdHlwZS5sdD1mdW5jdGlvbihDKXtyZXR1cm4tMT09PXRoaXMuY21wKEMpfSx3LnByb3RvdHlwZS5sdGVuPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmNtcG4oQyk8PTB9LHcu''@;'; put 'put ''cHJvdG90eXBlLmx0ZT1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5jbXAoQyk8PTB9LHcucHJvdG90eXBlLmVxbj1mdW5jdGlvbihDKXtyZXR1cm4gMD09PXRoaXMuY21wbihDKX0sdy5wcm90b3R5cGUuZXE9ZnVuY3Rpb24oQyl7cmV0dXJuIDA9PT10aGlzLmNtcChDKX0sdy5yZWQ9ZnVuY3Rp''@;'; put 'put ''b24oQyl7cmV0dXJuIG5ldyBwKEMpfSx3LnByb3RvdHlwZS50b1JlZD1mdW5jdGlvbihDKXtyZXR1cm4gZyghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSxnKDA9PT10aGlzLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIp''@;'; put 'put ''LEMuY29udmVydFRvKHRoaXMpLl9mb3JjZVJlZChDKX0sdy5wcm90b3R5cGUuZnJvbVJlZD1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJmcm9tUmVkIHdvcmtzIG9ubHkgd2l0aCBudW1iZXJzIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5yZWQuY29udmVydEZyb20odGhpcyl9''@;'; put 'put ''LHcucHJvdG90eXBlLl9mb3JjZVJlZD1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5yZWQ9Qyx0aGlzfSx3LnByb3RvdHlwZS5mb3JjZVJlZD1mdW5jdGlvbihDKXtyZXR1cm4gZyghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLl9mb3JjZVJl''@;'; put 'put ''ZChDKX0sdy5wcm90b3R5cGUucmVkQWRkPWZ1bmN0aW9uKEMpe3JldHVybiBnKHRoaXMucmVkLCJyZWRBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuYWRkKHRoaXMsQyl9LHcucHJvdG90eXBlLnJlZElBZGQ9ZnVuY3Rpb24oQyl7cmV0dXJuIGcodGhpcy5yZWQs''@;'; put 'put ''InJlZElBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaWFkZCh0aGlzLEMpfSx3LnByb3RvdHlwZS5yZWRTdWI9ZnVuY3Rpb24oQyl7cmV0dXJuIGcodGhpcy5yZWQsInJlZFN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zdWIodGhp''@;'; put 'put ''cyxDKX0sdy5wcm90b3R5cGUucmVkSVN1Yj1mdW5jdGlvbihDKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkSVN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pc3ViKHRoaXMsQyl9LHcucHJvdG90eXBlLnJlZFNobD1mdW5jdGlvbihDKXtyZXR1cm4gZyh0aGlzLnJl''@;'; put 'put ''ZCwicmVkU2hsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnNobCh0aGlzLEMpfSx3LnByb3RvdHlwZS5yZWRNdWw9ZnVuY3Rpb24oQyl7cmV0dXJuIGcodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5''@;'; put 'put ''Mih0aGlzLEMpLHRoaXMucmVkLm11bCh0aGlzLEMpfSx3LnByb3RvdHlwZS5yZWRJTXVsPWZ1bmN0aW9uKEMpe3JldHVybiBnKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxDKSx0aGlzLnJlZC5pbXVsKHRoaXMs''@;'; put 'put ''Qyl9LHcucHJvdG90eXBlLnJlZFNxcj1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWRTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FyKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRJU3FyPWZ1bmN0aW9uKCl7''@;'; put 'put ''cmV0dXJuIGcodGhpcy5yZWQsInJlZElTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaXNxcih0aGlzKX0sdy5wcm90b3R5cGUucmVkU3FydD1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWRTcXJ0IHdvcmtz''@;'; put 'put ''IG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcnQodGhpcyl9LHcucHJvdG90eXBlLnJlZEludm09ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkSW52bSB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJl''@;'; put 'put ''ZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pbnZtKHRoaXMpfSx3LnByb3RvdHlwZS5yZWROZWc9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkTmVnIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLm5lZyh0aGlz''@;'; put 'put ''KX0sdy5wcm90b3R5cGUucmVkUG93PWZ1bmN0aW9uKEMpe3JldHVybiBnKHRoaXMucmVkJiYhQy5yZWQsInJlZFBvdyhub3JtYWxOdW0pIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQucG93KHRoaXMsQyl9O3ZhciBtZT17azI1NjpudWxsLHAyMjQ6bnVsbCxwMTkyOm51bGws''@;'; put 'put ''cDI1NTE5Om51bGx9O2Z1bmN0aW9uIF9lKHgsQyl7dGhpcy5uYW1lPXgsdGhpcy5wPW5ldyB3KEMsMTYpLHRoaXMubj10aGlzLnAuYml0TGVuZ3RoKCksdGhpcy5rPW5ldyB3KDEpLml1c2hsbih0aGlzLm4pLmlzdWIodGhpcy5wKSx0aGlzLnRtcD10aGlzLl90bXAoKX1mdW5jdGlvbiBUZSgp''@;'; put 'put ''e19lLmNhbGwodGhpcywiazI1NiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmIil9ZnVuY3Rpb24gU2UoKXtfZS5jYWxsKHRoaXMsInAyMjQiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZm''@;'; put 'put ''ZiAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMSIpfWZ1bmN0aW9uIGplKCl7X2UuY2FsbCh0aGlzLCJwMTkyIiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYiKX1mdW5jdGlvbiBWKCl7X2UuY2FsbCh0aGlzLCIyNTUxOSIsIjdmZmZmZmZm''@;'; put 'put ''ZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiKX1mdW5jdGlvbiBwKHgpe2lmKCJzdHJpbmciPT10eXBlb2YgeCl7dmFyIEM9dy5fcHJpbWUoeCk7dGhpcy5tPUMucCx0aGlzLnByaW1lPUN9ZWxzZSBnKHguZ3RuKDEpLCJtb2R1bHVz''@;'; put 'put ''IG11c3QgYmUgZ3JlYXRlciB0aGFuIDEiKSx0aGlzLm09eCx0aGlzLnByaW1lPW51bGx9ZnVuY3Rpb24gYih4KXtwLmNhbGwodGhpcyx4KSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0aGlzLnNoaWZ0JTI2IT0wJiYodGhpcy5zaGlmdCs9MjYtdGhpcy5zaGlmdCUyNiksdGhpcy5y''@;'; put 'put ''PW5ldyB3KDEpLml1c2hsbih0aGlzLnNoaWZ0KSx0aGlzLnIyPXRoaXMuaW1vZCh0aGlzLnIuc3FyKCkpLHRoaXMucmludj10aGlzLnIuX2ludm1wKHRoaXMubSksdGhpcy5taW52PXRoaXMucmludi5tdWwodGhpcy5yKS5pc3VibigxKS5kaXYodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5taW52''@;'; put 'put ''LnVtb2QodGhpcy5yKSx0aGlzLm1pbnY9dGhpcy5yLnN1Yih0aGlzLm1pbnYpfV9lLnByb3RvdHlwZS5fdG1wPWZ1bmN0aW9uKCl7dmFyIEM9bmV3IHcobnVsbCk7cmV0dXJuIEMud29yZHM9bmV3IEFycmF5KE1hdGguY2VpbCh0aGlzLm4vMTMpKSxDfSxfZS5wcm90b3R5cGUuaXJlZHVjZT1m''@;'; put 'put ''dW5jdGlvbihDKXt2YXIgSCxUPUM7ZG97dGhpcy5zcGxpdChULHRoaXMudG1wKSxIPShUPShUPXRoaXMuaW11bEsoVCkpLmlhZGQodGhpcy50bXApKS5iaXRMZW5ndGgoKX13aGlsZShIPnRoaXMubik7dmFyIGo9SDx0aGlzLm4/LTE6VC51Y21wKHRoaXMucCk7cmV0dXJuIDA9PT1qPyhULndv''@;'; put 'put ''cmRzWzBdPTAsVC5sZW5ndGg9MSk6aj4wP1QuaXN1Yih0aGlzLnApOnZvaWQgMCE9PVQuc3RyaXA/VC5zdHJpcCgpOlQuX3N0cmlwKCksVH0sX2UucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKEMsVCl7Qy5pdXNocm4odGhpcy5uLDAsVCl9LF9lLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihD''@;'; put 'put ''KXtyZXR1cm4gQy5pbXVsKHRoaXMuayl9LEIoVGUsX2UpLFRlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihDLFQpe2Zvcih2YXIgSD00MTk0MzAzLGo9TWF0aC5taW4oQy5sZW5ndGgsOSksRT0wO0U8ajtFKyspVC53b3Jkc1tFXT1DLndvcmRzW0VdO2lmKFQubGVuZ3RoPWosQy5sZW5ndGg8''@;'; put 'put ''PTkpcmV0dXJuIEMud29yZHNbMF09MCx2b2lkKEMubGVuZ3RoPTEpO3ZhciBtPUMud29yZHNbOV07Zm9yKFQud29yZHNbVC5sZW5ndGgrK109bSZILEU9MTA7RTxDLmxlbmd0aDtFKyspe3ZhciBBPTB8Qy53b3Jkc1tFXTtDLndvcmRzW0UtMTBdPShBJkgpPDw0fG0+Pj4yMixtPUF9Qy53b3Jk''@;'; put 'put ''c1tFLTEwXT1tPj4+PTIyLEMubGVuZ3RoLT0wPT09bSYmQy5sZW5ndGg+MTA/MTA6OX0sVGUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKEMpe0Mud29yZHNbQy5sZW5ndGhdPTAsQy53b3Jkc1tDLmxlbmd0aCsxXT0wLEMubGVuZ3RoKz0yO2Zvcih2YXIgVD0wLEg9MDtIPEMubGVuZ3RoO0gr''@;'; put 'put ''Kyl7dmFyIGo9MHxDLndvcmRzW0hdO0Mud29yZHNbSF09NjcxMDg4NjMmKFQrPTk3NypqKSxUPTY0KmorKFQvNjcxMDg4NjR8MCl9cmV0dXJuIDA9PT1DLndvcmRzW0MubGVuZ3RoLTFdJiYoQy5sZW5ndGgtLSwwPT09Qy53b3Jkc1tDLmxlbmd0aC0xXSYmQy5sZW5ndGgtLSksQ30sQihTZSxf''@;'; put 'put ''ZSksQihqZSxfZSksQihWLF9lKSxWLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihDKXtmb3IodmFyIFQ9MCxIPTA7SDxDLmxlbmd0aDtIKyspe3ZhciBqPTE5KigwfEMud29yZHNbSF0pK1QsRT02NzEwODg2MyZqO2o+Pj49MjYsQy53b3Jkc1tIXT1FLFQ9an1yZXR1cm4gMCE9PVQmJihDLndv''@;'; put 'put ''cmRzW0MubGVuZ3RoKytdPVQpLEN9LHcuX3ByaW1lPWZ1bmN0aW9uKEMpe2lmKG1lW0NdKXJldHVybiBtZVtDXTt2YXIgVDtpZigiazI1NiI9PT1DKVQ9bmV3IFRlO2Vsc2UgaWYoInAyMjQiPT09QylUPW5ldyBTZTtlbHNlIGlmKCJwMTkyIj09PUMpVD1uZXcgamU7ZWxzZXtpZigicDI1NTE5''@;'; put 'put ''IiE9PUMpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIHByaW1lICIrQyk7VD1uZXcgVn1yZXR1cm4gbWVbQ109VCxUfSxwLnByb3RvdHlwZS5fdmVyaWZ5MT1mdW5jdGlvbihDKXtnKDA9PT1DLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLGcoQy5yZWQsInJlZCB3''@;'; put 'put ''b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0scC5wcm90b3R5cGUuX3ZlcmlmeTI9ZnVuY3Rpb24oQyxUKXtnKCEoQy5uZWdhdGl2ZXxULm5lZ2F0aXZlKSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxnKEMucmVkJiZDLnJlZD09PVQucmVkLCJyZWQgd29ya3Mgb25seSB3''@;'; put 'put ''aXRoIHJlZCBudW1iZXJzIil9LHAucHJvdG90eXBlLmltb2Q9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMucHJpbWU/dGhpcy5wcmltZS5pcmVkdWNlKEMpLl9mb3JjZVJlZCh0aGlzKTooTihDLEMudW1vZCh0aGlzLm0pLl9mb3JjZVJlZCh0aGlzKSksQyl9LHAucHJvdG90eXBlLm5lZz1mdW5j''@;'; put 'put ''dGlvbihDKXtyZXR1cm4gQy5pc1plcm8oKT9DLmNsb25lKCk6dGhpcy5tLnN1YihDKS5fZm9yY2VSZWQodGhpcyl9LHAucHJvdG90eXBlLmFkZD1mdW5jdGlvbihDLFQpe3RoaXMuX3ZlcmlmeTIoQyxUKTt2YXIgSD1DLmFkZChUKTtyZXR1cm4gSC5jbXAodGhpcy5tKT49MCYmSC5pc3ViKHRo''@;'; put 'put ''aXMubSksSC5fZm9yY2VSZWQodGhpcyl9LHAucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24oQyxUKXt0aGlzLl92ZXJpZnkyKEMsVCk7dmFyIEg9Qy5pYWRkKFQpO3JldHVybiBILmNtcCh0aGlzLm0pPj0wJiZILmlzdWIodGhpcy5tKSxIfSxwLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24oQyxUKXt0''@;'; put 'put ''aGlzLl92ZXJpZnkyKEMsVCk7dmFyIEg9Qy5zdWIoVCk7cmV0dXJuIEguY21wbigwKTwwJiZILmlhZGQodGhpcy5tKSxILl9mb3JjZVJlZCh0aGlzKX0scC5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihDLFQpe3RoaXMuX3ZlcmlmeTIoQyxUKTt2YXIgSD1DLmlzdWIoVCk7cmV0dXJuIEguY21w''@;'; put 'put ''bigwKTwwJiZILmlhZGQodGhpcy5tKSxIfSxwLnByb3RvdHlwZS5zaGw9ZnVuY3Rpb24oQyxUKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MShDKSx0aGlzLmltb2QoQy51c2hsbihUKSl9LHAucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oQyxUKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihDLFQpLHRoaXMu''@;'; put 'put ''aW1vZChDLmltdWwoVCkpfSxwLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oQyxUKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihDLFQpLHRoaXMuaW1vZChDLm11bChUKSl9LHAucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuaW11bChDLEMuY2xvbmUoKSl9LHAucHJvdG90eXBl''@;'; put 'put ''LnNxcj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5tdWwoQyxDKX0scC5wcm90b3R5cGUuc3FydD1mdW5jdGlvbihDKXtpZihDLmlzWmVybygpKXJldHVybiBDLmNsb25lKCk7dmFyIFQ9dGhpcy5tLmFuZGxuKDMpO2lmKGcoVCUyPT0xKSwzPT09VCl7dmFyIEg9dGhpcy5tLmFkZChuZXcgdygx''@;'; put 'put ''KSkuaXVzaHJuKDIpO3JldHVybiB0aGlzLnBvdyhDLEgpfWZvcih2YXIgaj10aGlzLm0uc3VibigxKSxFPTA7IWouaXNaZXJvKCkmJjA9PT1qLmFuZGxuKDEpOylFKyssai5pdXNocm4oMSk7Zyghai5pc1plcm8oKSk7dmFyIG09bmV3IHcoMSkudG9SZWQodGhpcyksQT1tLnJlZE5lZygpLGFl''@;'; put 'put ''PXRoaXMubS5zdWJuKDEpLml1c2hybigxKSx0ZT10aGlzLm0uYml0TGVuZ3RoKCk7Zm9yKHRlPW5ldyB3KDIqdGUqdGUpLnRvUmVkKHRoaXMpOzAhPT10aGlzLnBvdyh0ZSxhZSkuY21wKEEpOyl0ZS5yZWRJQWRkKEEpO2Zvcih2YXIgc2U9dGhpcy5wb3codGUsaiksd2U9dGhpcy5wb3coQyxq''@;'; put 'put ''LmFkZG4oMSkuaXVzaHJuKDEpKSxVZT10aGlzLnBvdyhDLGopLEplPUU7MCE9PVVlLmNtcChtKTspe2Zvcih2YXIgb3Q9VWUseGU9MDswIT09b3QuY21wKG0pO3hlKyspb3Q9b3QucmVkU3FyKCk7Zyh4ZTxKZSk7dmFyIHZlPXRoaXMucG93KHNlLG5ldyB3KDEpLml1c2hsbihKZS14ZS0xKSk7''@;'; put 'put ''d2U9d2UucmVkTXVsKHZlKSxzZT12ZS5yZWRTcXIoKSxVZT1VZS5yZWRNdWwoc2UpLEplPXhlfXJldHVybiB3ZX0scC5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihDKXt2YXIgVD1DLl9pbnZtcCh0aGlzLm0pO3JldHVybiAwIT09VC5uZWdhdGl2ZT8oVC5uZWdhdGl2ZT0wLHRoaXMuaW1vZChU''@;'; put 'put ''KS5yZWROZWcoKSk6dGhpcy5pbW9kKFQpfSxwLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24oQyxUKXtpZihULmlzWmVybygpKXJldHVybiBuZXcgdygxKS50b1JlZCh0aGlzKTtpZigwPT09VC5jbXBuKDEpKXJldHVybiBDLmNsb25lKCk7dmFyIGo9bmV3IEFycmF5KDE2KTtqWzBdPW5ldyB3KDEp''@;'; put 'put ''LnRvUmVkKHRoaXMpLGpbMV09Qztmb3IodmFyIEU9MjtFPGoubGVuZ3RoO0UrKylqW0VdPXRoaXMubXVsKGpbRS0xXSxDKTt2YXIgbT1qWzBdLEE9MCxhZT0wLHRlPVQuYml0TGVuZ3RoKCklMjY7Zm9yKDA9PT10ZSYmKHRlPTI2KSxFPVQubGVuZ3RoLTE7RT49MDtFLS0pe2Zvcih2YXIgc2U9''@;'; put 'put ''VC53b3Jkc1tFXSx3ZT10ZS0xO3dlPj0wO3dlLS0pe3ZhciBVZT1zZT4+d2UmMTttIT09alswXSYmKG09dGhpcy5zcXIobSkpLDAhPT1VZXx8MCE9PUE/KEE8PD0xLEF8PVVlLCg0PT0rK2FlfHwwPT09RSYmMD09PXdlKSYmKG09dGhpcy5tdWwobSxqW0FdKSxhZT0wLEE9MCkpOmFlPTB9dGU9''@;'; put 'put ''MjZ9cmV0dXJuIG19LHAucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihDKXt2YXIgVD1DLnVtb2QodGhpcy5tKTtyZXR1cm4gVD09PUM/VC5jbG9uZSgpOlR9LHAucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKEMpe3ZhciBUPUMuY2xvbmUoKTtyZXR1cm4gVC5yZWQ9bnVsbCxU''@;'; put 'put ''fSx3Lm1vbnQ9ZnVuY3Rpb24oQyl7cmV0dXJuIG5ldyBiKEMpfSxCKGIscCksYi5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmltb2QoQy51c2hsbih0aGlzLnNoaWZ0KSl9LGIucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKEMpe3ZhciBUPXRoaXMu''@;'; put 'put ''aW1vZChDLm11bCh0aGlzLnJpbnYpKTtyZXR1cm4gVC5yZWQ9bnVsbCxUfSxiLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKEMsVCl7aWYoQy5pc1plcm8oKXx8VC5pc1plcm8oKSlyZXR1cm4gQy53b3Jkc1swXT0wLEMubGVuZ3RoPTEsQzt2YXIgSD1DLmltdWwoVCksaj1ILm1hc2tuKHRoaXMu''@;'; put 'put ''c2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxFPUguaXN1YihqKS5pdXNocm4odGhpcy5zaGlmdCksbT1FO3JldHVybiBFLmNtcCh0aGlzLm0pPj0wP209RS5pc3ViKHRoaXMubSk6RS5jbXBuKDApPDAmJihtPUUuaWFkZCh0aGlzLm0pKSxtLl9m''@;'; put 'put ''b3JjZVJlZCh0aGlzKX0sYi5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKEMsVCl7aWYoQy5pc1plcm8oKXx8VC5pc1plcm8oKSlyZXR1cm4gbmV3IHcoMCkuX2ZvcmNlUmVkKHRoaXMpO3ZhciBIPUMubXVsKFQpLGo9SC5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhp''@;'; put 'put ''cy5zaGlmdCkubXVsKHRoaXMubSksRT1ILmlzdWIoaikuaXVzaHJuKHRoaXMuc2hpZnQpLG09RTtyZXR1cm4gRS5jbXAodGhpcy5tKT49MD9tPUUuaXN1Yih0aGlzLm0pOkUuY21wbigwKTwwJiYobT1FLmlhZGQodGhpcy5tKSksbS5fZm9yY2VSZWQodGhpcyl9LGIucHJvdG90eXBlLmludm09''@;'; put 'put ''ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuaW1vZChDLl9pbnZtcCh0aGlzLm0pLm11bCh0aGlzLnIyKSkuX2ZvcmNlUmVkKHRoaXMpfX0odWU9eS5ubWQodWUpLHRoaXMpfSwzNTI5NDoodWUsWCx5KT0+e3ZhciBJO2Z1bmN0aW9uIF8oQil7dGhpcy5yYW5kPUJ9aWYodWUuZXhwb3J0cz1mdW5j''@;'; put 'put ''dGlvbih3KXtyZXR1cm4gSXx8KEk9bmV3IF8obnVsbCkpLEkuZ2VuZXJhdGUodyl9LHVlLmV4cG9ydHMuUmFuZD1fLF8ucHJvdG90eXBlLmdlbmVyYXRlPWZ1bmN0aW9uKHcpe3JldHVybiB0aGlzLl9yYW5kKHcpfSxfLnByb3RvdHlwZS5fcmFuZD1mdW5jdGlvbih3KXtpZih0aGlzLnJhbmQu''@;'; put 'put ''Z2V0Qnl0ZXMpcmV0dXJuIHRoaXMucmFuZC5nZXRCeXRlcyh3KTtmb3IodmFyIFA9bmV3IFVpbnQ4QXJyYXkodyksRj0wO0Y8UC5sZW5ndGg7RisrKVBbRl09dGhpcy5yYW5kLmdldEJ5dGUoKTtyZXR1cm4gUH0sIm9iamVjdCI9PXR5cGVvZiBzZWxmKXNlbGYuY3J5cHRvJiZzZWxmLmNyeXB0''@;'; put 'put ''by5nZXRSYW5kb21WYWx1ZXM/Xy5wcm90b3R5cGUuX3JhbmQ9ZnVuY3Rpb24odyl7dmFyIFA9bmV3IFVpbnQ4QXJyYXkodyk7cmV0dXJuIHNlbGYuY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhQKSxQfTpzZWxmLm1zQ3J5cHRvJiZzZWxmLm1zQ3J5cHRvLmdldFJhbmRvbVZhbHVlcz9fLnByb3Rv''@;'; put 'put ''dHlwZS5fcmFuZD1mdW5jdGlvbih3KXt2YXIgUD1uZXcgVWludDhBcnJheSh3KTtyZXR1cm4gc2VsZi5tc0NyeXB0by5nZXRSYW5kb21WYWx1ZXMoUCksUH06Im9iamVjdCI9PXR5cGVvZiB3aW5kb3cmJihfLnByb3RvdHlwZS5fcmFuZD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiTm90''@;'; put 'put ''IGltcGxlbWVudGVkIHlldCIpfSk7ZWxzZSB0cnl7dmFyIGc9eSg5MTQyNik7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGcucmFuZG9tQnl0ZXMpdGhyb3cgbmV3IEVycm9yKCJOb3Qgc3VwcG9ydGVkIik7Xy5wcm90b3R5cGUuX3JhbmQ9ZnVuY3Rpb24odyl7cmV0dXJuIGcucmFuZG9tQnl0ZXMo''@;'; put 'put ''dyl9fWNhdGNoe319LDEyMzc1Oih1ZSxYLHkpPT57dmFyIEk9eSgyNzA1NCkuQnVmZmVyO2Z1bmN0aW9uIF8oTyl7SS5pc0J1ZmZlcihPKXx8KE89SS5mcm9tKE8pKTtmb3IodmFyIHo9Ty5sZW5ndGgvNHwwLE49bmV3IEFycmF5KHopLEw9MDtMPHo7TCsrKU5bTF09Ty5yZWFkVUludDMyQkUo''@;'; put 'put ''NCpMKTtyZXR1cm4gTn1mdW5jdGlvbiBnKE8pe2Zvcig7MDxPLmxlbmd0aDtPKyspT1swXT0wfWZ1bmN0aW9uIEIoTyx6LE4sTCxLKXtmb3IodmFyIGxlLG1lLF9lLFRlLFU9TlswXSxXPU5bMV0sWT1OWzJdLHE9TlszXSxlZT1PWzBdXnpbMF0sSj1PWzFdXnpbMV0sbmU9T1syXV56WzJdLGll''@;'; put 'put ''PU9bM11eelszXSxTZT00LGplPTE7amU8SztqZSsrKWxlPVVbZWU+Pj4yNF1eV1tKPj4+MTYmMjU1XV5ZW25lPj4+OCYyNTVdXnFbMjU1JmllXV56W1NlKytdLG1lPVVbSj4+PjI0XV5XW25lPj4+MTYmMjU1XV5ZW2llPj4+OCYyNTVdXnFbMjU1JmVlXV56W1NlKytdLF9lPVVbbmU+Pj4yNF1e''@;'; put 'put ''V1tpZT4+PjE2JjI1NV1eWVtlZT4+PjgmMjU1XV5xWzI1NSZKXV56W1NlKytdLFRlPVVbaWU+Pj4yNF1eV1tlZT4+PjE2JjI1NV1eWVtKPj4+OCYyNTVdXnFbMjU1Jm5lXV56W1NlKytdLGVlPWxlLEo9bWUsbmU9X2UsaWU9VGU7cmV0dXJuIGxlPShMW2VlPj4+MjRdPDwyNHxMW0o+Pj4xNiYy''@;'; put 'put ''NTVdPDwxNnxMW25lPj4+OCYyNTVdPDw4fExbMjU1JmllXSleeltTZSsrXSxtZT0oTFtKPj4+MjRdPDwyNHxMW25lPj4+MTYmMjU1XTw8MTZ8TFtpZT4+PjgmMjU1XTw8OHxMWzI1NSZlZV0pXnpbU2UrK10sX2U9KExbbmU+Pj4yNF08PDI0fExbaWU+Pj4xNiYyNTVdPDwxNnxMW2VlPj4+OCYy''@;'; put 'put ''NTVdPDw4fExbMjU1JkpdKV56W1NlKytdLFRlPShMW2llPj4+MjRdPDwyNHxMW2VlPj4+MTYmMjU1XTw8MTZ8TFtKPj4+OCYyNTVdPDw4fExbMjU1Jm5lXSleeltTZSsrXSxbbGU+Pj49MCxtZT4+Pj0wLF9lPj4+PTAsVGU+Pj49MF19dmFyIHc9WzAsMSwyLDQsOCwxNiwzMiw2NCwxMjgsMjcs''@;'; put 'put ''NTRdLFA9ZnVuY3Rpb24oKXtmb3IodmFyIE89bmV3IEFycmF5KDI1Niksej0wO3o8MjU2O3orKylPW3pdPXo8MTI4P3o8PDE6ejw8MV4yODM7Zm9yKHZhciBOPVtdLEw9W10sSz1bW10sW10sW10sW11dLFU9W1tdLFtdLFtdLFtdXSxXPTAsWT0wLHE9MDtxPDI1NjsrK3Epe3ZhciBlZT1ZXlk8''@;'; put 'put ''PDFeWTw8Ml5ZPDwzXlk8PDQ7TltXXT1lZT1lZT4+PjheMjU1JmVlXjk5LExbZWVdPVc7dmFyIEo9T1tXXSxuZT1PW0pdLGllPU9bbmVdLGxlPTI1NypPW2VlXV4xNjg0MzAwOCplZTtLWzBdW1ddPWxlPDwyNHxsZT4+PjgsS1sxXVtXXT1sZTw8MTZ8bGU+Pj4xNixLWzJdW1ddPWxlPDw4fGxl''@;'; put 'put ''Pj4+MjQsS1szXVtXXT1sZSxVWzBdW2VlXT0obGU9MTY4NDMwMDkqaWVeNjU1MzcqbmVeMjU3KkpeMTY4NDMwMDgqVyk8PDI0fGxlPj4+OCxVWzFdW2VlXT1sZTw8MTZ8bGU+Pj4xNixVWzJdW2VlXT1sZTw8OHxsZT4+PjI0LFVbM11bZWVdPWxlLDA9PT1XP1c9WT0xOihXPUpeT1tPW09baWVe''@;'; put 'put ''Sl1dXSxZXj1PW09bWV1dKX1yZXR1cm57U0JPWDpOLElOVl9TQk9YOkwsU1VCX01JWDpLLElOVl9TVUJfTUlYOlV9fSgpO2Z1bmN0aW9uIEYoTyl7dGhpcy5fa2V5PV8oTyksdGhpcy5fcmVzZXQoKX1GLmJsb2NrU2l6ZT0xNixGLmtleVNpemU9MzIsRi5wcm90b3R5cGUuYmxvY2tTaXplPUYu''@;'; put 'put ''YmxvY2tTaXplLEYucHJvdG90eXBlLmtleVNpemU9Ri5rZXlTaXplLEYucHJvdG90eXBlLl9yZXNldD1mdW5jdGlvbigpe2Zvcih2YXIgTz10aGlzLl9rZXksej1PLmxlbmd0aCxOPXorNixMPTQqKE4rMSksSz1bXSxVPTA7VTx6O1UrKylLW1VdPU9bVV07Zm9yKFU9ejtVPEw7VSsrKXt2YXIg''@;'; put 'put ''Vz1LW1UtMV07VSV6PT0wPyhXPVAuU0JPWFsoVz1XPDw4fFc+Pj4yNCk+Pj4yNF08PDI0fFAuU0JPWFtXPj4+MTYmMjU1XTw8MTZ8UC5TQk9YW1c+Pj44JjI1NV08PDh8UC5TQk9YWzI1NSZXXSxXXj13W1UvenwwXTw8MjQpOno+NiYmVSV6PT00JiYoVz1QLlNCT1hbVz4+PjI0XTw8MjR8UC5T''@;'; put 'put ''Qk9YW1c+Pj4xNiYyNTVdPDwxNnxQLlNCT1hbVz4+PjgmMjU1XTw8OHxQLlNCT1hbMjU1JlddKSxLW1VdPUtbVS16XV5XfWZvcih2YXIgWT1bXSxxPTA7cTxMO3ErKyl7dmFyIGVlPUwtcSxKPUtbZWUtKHElND8wOjQpXTtZW3FdPXE8NHx8ZWU8PTQ/SjpQLklOVl9TVUJfTUlYWzBdW1AuU0JP''@;'; put 'put ''WFtKPj4+MjRdXV5QLklOVl9TVUJfTUlYWzFdW1AuU0JPWFtKPj4+MTYmMjU1XV1eUC5JTlZfU1VCX01JWFsyXVtQLlNCT1hbSj4+PjgmMjU1XV1eUC5JTlZfU1VCX01JWFszXVtQLlNCT1hbMjU1JkpdXX10aGlzLl9uUm91bmRzPU4sdGhpcy5fa2V5U2NoZWR1bGU9Syx0aGlzLl9pbnZLZXlT''@;'; put 'put ''Y2hlZHVsZT1ZfSxGLnByb3RvdHlwZS5lbmNyeXB0QmxvY2tSYXc9ZnVuY3Rpb24oTyl7cmV0dXJuIEIoTz1fKE8pLHRoaXMuX2tleVNjaGVkdWxlLFAuU1VCX01JWCxQLlNCT1gsdGhpcy5fblJvdW5kcyl9LEYucHJvdG90eXBlLmVuY3J5cHRCbG9jaz1mdW5jdGlvbihPKXt2YXIgej10aGlz''@;'; put 'put ''LmVuY3J5cHRCbG9ja1JhdyhPKSxOPUkuYWxsb2NVbnNhZmUoMTYpO3JldHVybiBOLndyaXRlVUludDMyQkUoelswXSwwKSxOLndyaXRlVUludDMyQkUoelsxXSw0KSxOLndyaXRlVUludDMyQkUoelsyXSw4KSxOLndyaXRlVUludDMyQkUoelszXSwxMiksTn0sRi5wcm90b3R5cGUuZGVjcnlw''@;'; put 'put ''dEJsb2NrPWZ1bmN0aW9uKE8pe3ZhciB6PShPPV8oTykpWzFdO09bMV09T1szXSxPWzNdPXo7dmFyIE49QihPLHRoaXMuX2ludktleVNjaGVkdWxlLFAuSU5WX1NVQl9NSVgsUC5JTlZfU0JPWCx0aGlzLl9uUm91bmRzKSxMPUkuYWxsb2NVbnNhZmUoMTYpO3JldHVybiBMLndyaXRlVUludDMy''@;'; put 'put ''QkUoTlswXSwwKSxMLndyaXRlVUludDMyQkUoTlszXSw0KSxMLndyaXRlVUludDMyQkUoTlsyXSw4KSxMLndyaXRlVUludDMyQkUoTlsxXSwxMiksTH0sRi5wcm90b3R5cGUuc2NydWI9ZnVuY3Rpb24oKXtnKHRoaXMuX2tleVNjaGVkdWxlKSxnKHRoaXMuX2ludktleVNjaGVkdWxlKSxnKHRo''@;'; put 'put ''aXMuX2tleSl9LHVlLmV4cG9ydHMuQUVTPUZ9LDE5MzA3Oih1ZSxYLHkpPT57dmFyIEk9eSgxMjM3NSksXz15KDI3MDU0KS5CdWZmZXIsZz15KDMyNDcpLEI9eSg3MTk5Myksdz15KDg1OTE3KSxQPXkoMTM1NDYpLEY9eSg5NTcyNSk7ZnVuY3Rpb24gTihMLEssVSxXKXtnLmNhbGwodGhpcyk7''@;'; put 'put ''dmFyIFk9Xy5hbGxvYyg0LDApO3RoaXMuX2NpcGhlcj1uZXcgSS5BRVMoSyk7dmFyIHE9dGhpcy5fY2lwaGVyLmVuY3J5cHRCbG9jayhZKTt0aGlzLl9naGFzaD1uZXcgdyhxKSxVPWZ1bmN0aW9uIHooTCxLLFUpe2lmKDEyPT09Sy5sZW5ndGgpcmV0dXJuIEwuX2ZpbklEPV8uY29uY2F0KFtL''@;'; put 'put ''LF8uZnJvbShbMCwwLDAsMV0pXSksXy5jb25jYXQoW0ssXy5mcm9tKFswLDAsMCwyXSldKTt2YXIgVz1uZXcgdyhVKSxZPUsubGVuZ3RoLHE9WSUxNjtXLnVwZGF0ZShLKSxxJiZXLnVwZGF0ZShfLmFsbG9jKHE9MTYtcSwwKSksVy51cGRhdGUoXy5hbGxvYyg4LDApKTt2YXIgZWU9OCpZLEo9''@;'; put 'put ''Xy5hbGxvYyg4KTtKLndyaXRlVUludEJFKGVlLDAsOCksVy51cGRhdGUoSiksTC5fZmluSUQ9Vy5zdGF0ZTt2YXIgbmU9Xy5mcm9tKEwuX2ZpbklEKTtyZXR1cm4gRihuZSksbmV9KHRoaXMsVSxxKSx0aGlzLl9wcmV2PV8uZnJvbShVKSx0aGlzLl9jYWNoZT1fLmFsbG9jVW5zYWZlKDApLHRo''@;'; put 'put ''aXMuX3NlY0NhY2hlPV8uYWxsb2NVbnNhZmUoMCksdGhpcy5fZGVjcnlwdD1XLHRoaXMuX2FsZW49MCx0aGlzLl9sZW49MCx0aGlzLl9tb2RlPUwsdGhpcy5fYXV0aFRhZz1udWxsLHRoaXMuX2NhbGxlZD0hMX1CKE4sZyksTi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihMKXtpZighdGhp''@;'; put 'put ''cy5fY2FsbGVkJiZ0aGlzLl9hbGVuKXt2YXIgSz0xNi10aGlzLl9hbGVuJTE2O0s8MTYmJihLPV8uYWxsb2MoSywwKSx0aGlzLl9naGFzaC51cGRhdGUoSykpfXRoaXMuX2NhbGxlZD0hMDt2YXIgVT10aGlzLl9tb2RlLmVuY3J5cHQodGhpcyxMKTtyZXR1cm4gdGhpcy5fZ2hhc2gudXBkYXRl''@;'; put 'put ''KHRoaXMuX2RlY3J5cHQ/TDpVKSx0aGlzLl9sZW4rPUwubGVuZ3RoLFV9LE4ucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe2lmKHRoaXMuX2RlY3J5cHQmJiF0aGlzLl9hdXRoVGFnKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgc3RhdGUgb3IgdW5hYmxlIHRvIGF1dGhlbnRpY2F0''@;'; put 'put ''ZSBkYXRhIik7dmFyIEw9UCh0aGlzLl9naGFzaC5maW5hbCg4KnRoaXMuX2FsZW4sOCp0aGlzLl9sZW4pLHRoaXMuX2NpcGhlci5lbmNyeXB0QmxvY2sodGhpcy5fZmluSUQpKTtpZih0aGlzLl9kZWNyeXB0JiZmdW5jdGlvbiBPKEwsSyl7dmFyIFU9MDtMLmxlbmd0aCE9PUsubGVuZ3RoJiZV''@;'; put 'put ''Kys7Zm9yKHZhciBXPU1hdGgubWluKEwubGVuZ3RoLEsubGVuZ3RoKSxZPTA7WTxXOysrWSlVKz1MW1ldXktbWV07cmV0dXJuIFV9KEwsdGhpcy5fYXV0aFRhZykpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBzdGF0ZSBvciB1bmFibGUgdG8gYXV0aGVudGljYXRlIGRhdGEiKTt0aGlz''@;'; put 'put ''Ll9hdXRoVGFnPUwsdGhpcy5fY2lwaGVyLnNjcnViKCl9LE4ucHJvdG90eXBlLmdldEF1dGhUYWc9ZnVuY3Rpb24oKXtpZih0aGlzLl9kZWNyeXB0fHwhXy5pc0J1ZmZlcih0aGlzLl9hdXRoVGFnKSl0aHJvdyBuZXcgRXJyb3IoIkF0dGVtcHRpbmcgdG8gZ2V0IGF1dGggdGFnIGluIHVuc3Vw''@;'; put 'put ''cG9ydGVkIHN0YXRlIik7cmV0dXJuIHRoaXMuX2F1dGhUYWd9LE4ucHJvdG90eXBlLnNldEF1dGhUYWc9ZnVuY3Rpb24oSyl7aWYoIXRoaXMuX2RlY3J5cHQpdGhyb3cgbmV3IEVycm9yKCJBdHRlbXB0aW5nIHRvIHNldCBhdXRoIHRhZyBpbiB1bnN1cHBvcnRlZCBzdGF0ZSIpO3RoaXMuX2F1''@;'; put 'put ''dGhUYWc9S30sTi5wcm90b3R5cGUuc2V0QUFEPWZ1bmN0aW9uKEspe2lmKHRoaXMuX2NhbGxlZCl0aHJvdyBuZXcgRXJyb3IoIkF0dGVtcHRpbmcgdG8gc2V0IEFBRCBpbiB1bnN1cHBvcnRlZCBzdGF0ZSIpO3RoaXMuX2doYXNoLnVwZGF0ZShLKSx0aGlzLl9hbGVuKz1LLmxlbmd0aH0sdWUu''@;'; put 'put ''ZXhwb3J0cz1OfSw0MzM4ODoodWUsWCx5KT0+e3ZhciBJPXkoMzUwKSxfPXkoNjAxMDIpLGc9eSgzMjE5KTtYLmNyZWF0ZUNpcGhlcj1YLkNpcGhlcj1JLmNyZWF0ZUNpcGhlcixYLmNyZWF0ZUNpcGhlcml2PVguQ2lwaGVyaXY9SS5jcmVhdGVDaXBoZXJpdixYLmNyZWF0ZURlY2lwaGVyPVgu''@;'; put 'put ''RGVjaXBoZXI9Xy5jcmVhdGVEZWNpcGhlcixYLmNyZWF0ZURlY2lwaGVyaXY9WC5EZWNpcGhlcml2PV8uY3JlYXRlRGVjaXBoZXJpdixYLmxpc3RDaXBoZXJzPVguZ2V0Q2lwaGVycz1mdW5jdGlvbiBCKCl7cmV0dXJuIE9iamVjdC5rZXlzKGcpfX0sNjAxMDI6KHVlLFgseSk9Pnt2YXIgST15''@;'; put 'put ''KDE5MzA3KSxfPXkoMjcwNTQpLkJ1ZmZlcixnPXkoNjA1MDMpLEI9eSg5MTgyMSksdz15KDMyNDcpLFA9eSgxMjM3NSksRj15KDE4MjExKTtmdW5jdGlvbiB6KFcsWSxxKXt3LmNhbGwodGhpcyksdGhpcy5fY2FjaGU9bmV3IE4sdGhpcy5fbGFzdD12b2lkIDAsdGhpcy5fY2lwaGVyPW5ldyBQ''@;'; put 'put ''LkFFUyhZKSx0aGlzLl9wcmV2PV8uZnJvbShxKSx0aGlzLl9tb2RlPVcsdGhpcy5fYXV0b3BhZGRpbmc9ITB9ZnVuY3Rpb24gTigpe3RoaXMuY2FjaGU9Xy5hbGxvY1Vuc2FmZSgwKX1mdW5jdGlvbiBLKFcsWSxxKXt2YXIgZWU9Z1tXLnRvTG93ZXJDYXNlKCldO2lmKCFlZSl0aHJvdyBuZXcg''@;'; put 'put ''VHlwZUVycm9yKCJpbnZhbGlkIHN1aXRlIHR5cGUiKTtpZigic3RyaW5nIj09dHlwZW9mIHEmJihxPV8uZnJvbShxKSksIkdDTSIhPT1lZS5tb2RlJiZxLmxlbmd0aCE9PWVlLml2KXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgaXYgbGVuZ3RoICIrcS5sZW5ndGgpO2lmKCJzdHJpbmci''@;'; put 'put ''PT10eXBlb2YgWSYmKFk9Xy5mcm9tKFkpKSxZLmxlbmd0aCE9PWVlLmtleS84KXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQga2V5IGxlbmd0aCAiK1kubGVuZ3RoKTtyZXR1cm4ic3RyZWFtIj09PWVlLnR5cGU/bmV3IEIoZWUubW9kdWxlLFkscSwhMCk6ImF1dGgiPT09ZWUudHlwZT9u''@;'; put 'put ''ZXcgSShlZS5tb2R1bGUsWSxxLCEwKTpuZXcgeihlZS5tb2R1bGUsWSxxKX15KDcxOTkzKSh6LHcpLHoucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oVyl7dGhpcy5fY2FjaGUuYWRkKFcpO2Zvcih2YXIgWSxxLGVlPVtdO1k9dGhpcy5fY2FjaGUuZ2V0KHRoaXMuX2F1dG9wYWRkaW5nKTsp''@;'; put 'put ''cT10aGlzLl9tb2RlLmRlY3J5cHQodGhpcyxZKSxlZS5wdXNoKHEpO3JldHVybiBfLmNvbmNhdChlZSl9LHoucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3ZhciBXPXRoaXMuX2NhY2hlLmZsdXNoKCk7aWYodGhpcy5fYXV0b3BhZGRpbmcpcmV0dXJuIGZ1bmN0aW9uIEwoVyl7dmFyIFk9''@;'; put 'put ''V1sxNV07aWYoWTwxfHxZPjE2KXRocm93IG5ldyBFcnJvcigidW5hYmxlIHRvIGRlY3J5cHQgZGF0YSIpO2Zvcih2YXIgcT0tMTsrK3E8WTspaWYoV1txKygxNi1ZKV0hPT1ZKXRocm93IG5ldyBFcnJvcigidW5hYmxlIHRvIGRlY3J5cHQgZGF0YSIpO2lmKDE2IT09WSlyZXR1cm4gVy5zbGlj''@;'; put 'put ''ZSgwLDE2LVkpfSh0aGlzLl9tb2RlLmRlY3J5cHQodGhpcyxXKSk7aWYoVyl0aHJvdyBuZXcgRXJyb3IoImRhdGEgbm90IG11bHRpcGxlIG9mIGJsb2NrIGxlbmd0aCIpfSx6LnByb3RvdHlwZS5zZXRBdXRvUGFkZGluZz1mdW5jdGlvbihXKXtyZXR1cm4gdGhpcy5fYXV0b3BhZGRpbmc9ISFX''@;'; put 'put ''LHRoaXN9LE4ucHJvdG90eXBlLmFkZD1mdW5jdGlvbihXKXt0aGlzLmNhY2hlPV8uY29uY2F0KFt0aGlzLmNhY2hlLFddKX0sTi5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKFcpe3ZhciBZO2lmKFcpe2lmKHRoaXMuY2FjaGUubGVuZ3RoPjE2KXJldHVybiBZPXRoaXMuY2FjaGUuc2xpY2UoMCwx''@;'; put 'put ''NiksdGhpcy5jYWNoZT10aGlzLmNhY2hlLnNsaWNlKDE2KSxZfWVsc2UgaWYodGhpcy5jYWNoZS5sZW5ndGg+PTE2KXJldHVybiBZPXRoaXMuY2FjaGUuc2xpY2UoMCwxNiksdGhpcy5jYWNoZT10aGlzLmNhY2hlLnNsaWNlKDE2KSxZO3JldHVybiBudWxsfSxOLnByb3RvdHlwZS5mbHVzaD1m''@;'; put 'put ''dW5jdGlvbigpe2lmKHRoaXMuY2FjaGUubGVuZ3RoKXJldHVybiB0aGlzLmNhY2hlfSxYLmNyZWF0ZURlY2lwaGVyPWZ1bmN0aW9uIFUoVyxZKXt2YXIgcT1nW1cudG9Mb3dlckNhc2UoKV07aWYoIXEpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBzdWl0ZSB0eXBlIik7dmFyIGVlPUYo''@;'; put 'put ''WSwhMSxxLmtleSxxLml2KTtyZXR1cm4gSyhXLGVlLmtleSxlZS5pdil9LFguY3JlYXRlRGVjaXBoZXJpdj1LfSwzNTA6KHVlLFgseSk9Pnt2YXIgST15KDYwNTAzKSxfPXkoMTkzMDcpLGc9eSgyNzA1NCkuQnVmZmVyLEI9eSg5MTgyMSksdz15KDMyNDcpLFA9eSgxMjM3NSksRj15KDE4MjEx''@;'; put 'put ''KTtmdW5jdGlvbiB6KFcsWSxxKXt3LmNhbGwodGhpcyksdGhpcy5fY2FjaGU9bmV3IEwsdGhpcy5fY2lwaGVyPW5ldyBQLkFFUyhZKSx0aGlzLl9wcmV2PWcuZnJvbShxKSx0aGlzLl9tb2RlPVcsdGhpcy5fYXV0b3BhZGRpbmc9ITB9eSg3MTk5Mykoeix3KSx6LnByb3RvdHlwZS5fdXBkYXRl''@;'; put 'put ''PWZ1bmN0aW9uKFcpe3RoaXMuX2NhY2hlLmFkZChXKTtmb3IodmFyIFkscSxlZT1bXTtZPXRoaXMuX2NhY2hlLmdldCgpOylxPXRoaXMuX21vZGUuZW5jcnlwdCh0aGlzLFkpLGVlLnB1c2gocSk7cmV0dXJuIGcuY29uY2F0KGVlKX07dmFyIE49Zy5hbGxvYygxNiwxNik7ZnVuY3Rpb24gTCgp''@;'; put 'put ''e3RoaXMuY2FjaGU9Zy5hbGxvY1Vuc2FmZSgwKX1mdW5jdGlvbiBLKFcsWSxxKXt2YXIgZWU9SVtXLnRvTG93ZXJDYXNlKCldO2lmKCFlZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIHN1aXRlIHR5cGUiKTtpZigic3RyaW5nIj09dHlwZW9mIFkmJihZPWcuZnJvbShZKSksWS5sZW5n''@;'; put 'put ''dGghPT1lZS5rZXkvOCl0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIGtleSBsZW5ndGggIitZLmxlbmd0aCk7aWYoInN0cmluZyI9PXR5cGVvZiBxJiYocT1nLmZyb20ocSkpLCJHQ00iIT09ZWUubW9kZSYmcS5sZW5ndGghPT1lZS5pdil0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlk''@;'; put 'put ''IGl2IGxlbmd0aCAiK3EubGVuZ3RoKTtyZXR1cm4ic3RyZWFtIj09PWVlLnR5cGU/bmV3IEIoZWUubW9kdWxlLFkscSk6ImF1dGgiPT09ZWUudHlwZT9uZXcgXyhlZS5tb2R1bGUsWSxxKTpuZXcgeihlZS5tb2R1bGUsWSxxKX16LnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXt2YXIgVz10''@;'; put 'put ''aGlzLl9jYWNoZS5mbHVzaCgpO2lmKHRoaXMuX2F1dG9wYWRkaW5nKXJldHVybiBXPXRoaXMuX21vZGUuZW5jcnlwdCh0aGlzLFcpLHRoaXMuX2NpcGhlci5zY3J1YigpLFc7aWYoIVcuZXF1YWxzKE4pKXRocm93IHRoaXMuX2NpcGhlci5zY3J1YigpLG5ldyBFcnJvcigiZGF0YSBub3QgbXVs''@;'; put 'put ''dGlwbGUgb2YgYmxvY2sgbGVuZ3RoIil9LHoucHJvdG90eXBlLnNldEF1dG9QYWRkaW5nPWZ1bmN0aW9uKFcpe3JldHVybiB0aGlzLl9hdXRvcGFkZGluZz0hIVcsdGhpc30sTC5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKFcpe3RoaXMuY2FjaGU9Zy5jb25jYXQoW3RoaXMuY2FjaGUsV10pfSxM''@;'; put 'put ''LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oKXtpZih0aGlzLmNhY2hlLmxlbmd0aD4xNSl7dmFyIFc9dGhpcy5jYWNoZS5zbGljZSgwLDE2KTtyZXR1cm4gdGhpcy5jYWNoZT10aGlzLmNhY2hlLnNsaWNlKDE2KSxXfXJldHVybiBudWxsfSxMLnByb3RvdHlwZS5mbHVzaD1mdW5jdGlvbigpe2Zv''@;'; put 'put ''cih2YXIgVz0xNi10aGlzLmNhY2hlLmxlbmd0aCxZPWcuYWxsb2NVbnNhZmUoVykscT0tMTsrK3E8VzspWS53cml0ZVVJbnQ4KFcscSk7cmV0dXJuIGcuY29uY2F0KFt0aGlzLmNhY2hlLFldKX0sWC5jcmVhdGVDaXBoZXJpdj1LLFguY3JlYXRlQ2lwaGVyPWZ1bmN0aW9uIFUoVyxZKXt2YXIg''@;'; put 'put ''cT1JW1cudG9Mb3dlckNhc2UoKV07aWYoIXEpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBzdWl0ZSB0eXBlIik7dmFyIGVlPUYoWSwhMSxxLmtleSxxLml2KTtyZXR1cm4gSyhXLGVlLmtleSxlZS5pdil9fSw4NTkxNzoodWUsWCx5KT0+e3ZhciBJPXkoMjcwNTQpLkJ1ZmZlcixfPUku''@;'; put 'put ''YWxsb2MoMTYsMCk7ZnVuY3Rpb24gQihQKXt2YXIgRj1JLmFsbG9jVW5zYWZlKDE2KTtyZXR1cm4gRi53cml0ZVVJbnQzMkJFKFBbMF0+Pj4wLDApLEYud3JpdGVVSW50MzJCRShQWzFdPj4+MCw0KSxGLndyaXRlVUludDMyQkUoUFsyXT4+PjAsOCksRi53cml0ZVVJbnQzMkJFKFBbM10+Pj4w''@;'; put 'put ''LDEyKSxGfWZ1bmN0aW9uIHcoUCl7dGhpcy5oPVAsdGhpcy5zdGF0ZT1JLmFsbG9jKDE2LDApLHRoaXMuY2FjaGU9SS5hbGxvY1Vuc2FmZSgwKX13LnByb3RvdHlwZS5naGFzaD1mdW5jdGlvbihQKXtmb3IodmFyIEY9LTE7KytGPFAubGVuZ3RoOyl0aGlzLnN0YXRlW0ZdXj1QW0ZdO3RoaXMu''@;'; put 'put ''X211bHRpcGx5KCl9LHcucHJvdG90eXBlLl9tdWx0aXBseT1mdW5jdGlvbigpe2Zvcih2YXIgTyxOLFA9ZnVuY3Rpb24gZyhQKXtyZXR1cm5bUC5yZWFkVUludDMyQkUoMCksUC5yZWFkVUludDMyQkUoNCksUC5yZWFkVUludDMyQkUoOCksUC5yZWFkVUludDMyQkUoMTIpXX0odGhpcy5oKSxG''@;'; put 'put ''PVswLDAsMCwwXSxMPS0xOysrTDwxMjg7KXtmb3IoISEodGhpcy5zdGF0ZVt+fihMLzgpXSYxPDw3LUwlOCkmJihGWzBdXj1QWzBdLEZbMV1ePVBbMV0sRlsyXV49UFsyXSxGWzNdXj1QWzNdKSxOPSEhKDEmUFszXSksTz0zO08+MDtPLS0pUFtPXT1QW09dPj4+MXwoMSZQW08tMV0pPDwzMTtQ''@;'; put 'put ''WzBdPVBbMF0+Pj4xLE4mJihQWzBdPVBbMF1eMjI1PDwyNCl9dGhpcy5zdGF0ZT1CKEYpfSx3LnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oUCl7dGhpcy5jYWNoZT1JLmNvbmNhdChbdGhpcy5jYWNoZSxQXSk7Zm9yKHZhciBGO3RoaXMuY2FjaGUubGVuZ3RoPj0xNjspRj10aGlzLmNhY2hl''@;'; put 'put ''LnNsaWNlKDAsMTYpLHRoaXMuY2FjaGU9dGhpcy5jYWNoZS5zbGljZSgxNiksdGhpcy5naGFzaChGKX0sdy5wcm90b3R5cGUuZmluYWw9ZnVuY3Rpb24oUCxGKXtyZXR1cm4gdGhpcy5jYWNoZS5sZW5ndGgmJnRoaXMuZ2hhc2goSS5jb25jYXQoW3RoaXMuY2FjaGUsX10sMTYpKSx0aGlzLmdo''@;'; put 'put ''YXNoKEIoWzAsUCwwLEZdKSksdGhpcy5zdGF0ZX0sdWUuZXhwb3J0cz13fSw5NTcyNTp1ZT0+e3VlLmV4cG9ydHM9ZnVuY3Rpb24gWCh5KXtmb3IodmFyIF8sST15Lmxlbmd0aDtJLS07KXtpZigyNTUhPT0oXz15LnJlYWRVSW50OChJKSkpe18rKyx5LndyaXRlVUludDgoXyxJKTticmVha315''@;'; put 'put ''LndyaXRlVUludDgoMCxJKX19fSwzNDEzMzoodWUsWCx5KT0+e3ZhciBJPXkoMTM1NDYpO1guZW5jcnlwdD1mdW5jdGlvbihfLGcpe3ZhciBCPUkoZyxfLl9wcmV2KTtyZXR1cm4gXy5fcHJldj1fLl9jaXBoZXIuZW5jcnlwdEJsb2NrKEIpLF8uX3ByZXZ9LFguZGVjcnlwdD1mdW5jdGlvbihf''@;'; put 'put ''LGcpe3ZhciBCPV8uX3ByZXY7Xy5fcHJldj1nO3ZhciB3PV8uX2NpcGhlci5kZWNyeXB0QmxvY2soZyk7cmV0dXJuIEkodyxCKX19LDE3MDkwOih1ZSxYLHkpPT57dmFyIEk9eSgyNzA1NCkuQnVmZmVyLF89eSgxMzU0Nik7ZnVuY3Rpb24gZyhCLHcsUCl7dmFyIEY9dy5sZW5ndGgsTz1fKHcs''@;'; put 'put ''Qi5fY2FjaGUpO3JldHVybiBCLl9jYWNoZT1CLl9jYWNoZS5zbGljZShGKSxCLl9wcmV2PUkuY29uY2F0KFtCLl9wcmV2LFA/dzpPXSksT31YLmVuY3J5cHQ9ZnVuY3Rpb24oQix3LFApe2Zvcih2YXIgTyxGPUkuYWxsb2NVbnNhZmUoMCk7dy5sZW5ndGg7KXtpZigwPT09Qi5fY2FjaGUubGVu''@;'; put 'put ''Z3RoJiYoQi5fY2FjaGU9Qi5fY2lwaGVyLmVuY3J5cHRCbG9jayhCLl9wcmV2KSxCLl9wcmV2PUkuYWxsb2NVbnNhZmUoMCkpLCEoQi5fY2FjaGUubGVuZ3RoPD13Lmxlbmd0aCkpe0Y9SS5jb25jYXQoW0YsZyhCLHcsUCldKTticmVha31GPUkuY29uY2F0KFtGLGcoQix3LnNsaWNlKDAsTz1C''@;'; put 'put ''Ll9jYWNoZS5sZW5ndGgpLFApXSksdz13LnNsaWNlKE8pfXJldHVybiBGfX0sNzEwMzk6KHVlLFgseSk9Pnt2YXIgST15KDI3MDU0KS5CdWZmZXI7ZnVuY3Rpb24gXyhCLHcsUCl7Zm9yKHZhciBMLEssTz0tMSxOPTA7KytPPDg7KU4rPSgxMjgmKEs9Qi5fY2lwaGVyLmVuY3J5cHRCbG9jayhC''@;'; put 'put ''Ll9wcmV2KVswXV4oTD13JjE8PDctTz8xMjg6MCkpKT4+TyU4LEIuX3ByZXY9ZyhCLl9wcmV2LFA/TDpLKTtyZXR1cm4gTn1mdW5jdGlvbiBnKEIsdyl7dmFyIFA9Qi5sZW5ndGgsRj0tMSxPPUkuYWxsb2NVbnNhZmUoQi5sZW5ndGgpO2ZvcihCPUkuY29uY2F0KFtCLEkuZnJvbShbd10pXSk7''@;'; put 'put ''KytGPFA7KU9bRl09QltGXTw8MXxCW0YrMV0+Pjc7cmV0dXJuIE99WC5lbmNyeXB0PWZ1bmN0aW9uKEIsdyxQKXtmb3IodmFyIEY9dy5sZW5ndGgsTz1JLmFsbG9jVW5zYWZlKEYpLHo9LTE7Kyt6PEY7KU9bel09XyhCLHdbel0sUCk7cmV0dXJuIE99fSw3MjU3NjoodWUsWCx5KT0+e3ZhciBJ''@;'; put 'put ''PXkoMjcwNTQpLkJ1ZmZlcjtmdW5jdGlvbiBfKGcsQix3KXt2YXIgRj1nLl9jaXBoZXIuZW5jcnlwdEJsb2NrKGcuX3ByZXYpWzBdXkI7cmV0dXJuIGcuX3ByZXY9SS5jb25jYXQoW2cuX3ByZXYuc2xpY2UoMSksSS5mcm9tKFt3P0I6Rl0pXSksRn1YLmVuY3J5cHQ9ZnVuY3Rpb24oZyxCLHcp''@;'; put 'put ''e2Zvcih2YXIgUD1CLmxlbmd0aCxGPUkuYWxsb2NVbnNhZmUoUCksTz0tMTsrK088UDspRltPXT1fKGcsQltPXSx3KTtyZXR1cm4gRn19LDcwMzM2Oih1ZSxYLHkpPT57dmFyIEk9eSgxMzU0NiksXz15KDI3MDU0KS5CdWZmZXIsZz15KDk1NzI1KTtmdW5jdGlvbiBCKFApe3ZhciBGPVAuX2Np''@;'; put 'put ''cGhlci5lbmNyeXB0QmxvY2tSYXcoUC5fcHJldik7cmV0dXJuIGcoUC5fcHJldiksRn1YLmVuY3J5cHQ9ZnVuY3Rpb24oUCxGKXt2YXIgTz1NYXRoLmNlaWwoRi5sZW5ndGgvMTYpLHo9UC5fY2FjaGUubGVuZ3RoO1AuX2NhY2hlPV8uY29uY2F0KFtQLl9jYWNoZSxfLmFsbG9jVW5zYWZlKDE2''@;'; put 'put ''Kk8pXSk7Zm9yKHZhciBOPTA7TjxPO04rKyl7dmFyIEw9QihQKSxLPXorMTYqTjtQLl9jYWNoZS53cml0ZVVJbnQzMkJFKExbMF0sSyswKSxQLl9jYWNoZS53cml0ZVVJbnQzMkJFKExbMV0sSys0KSxQLl9jYWNoZS53cml0ZVVJbnQzMkJFKExbMl0sSys4KSxQLl9jYWNoZS53cml0ZVVJbnQz''@;'; put 'put ''MkJFKExbM10sSysxMil9dmFyIFU9UC5fY2FjaGUuc2xpY2UoMCxGLmxlbmd0aCk7cmV0dXJuIFAuX2NhY2hlPVAuX2NhY2hlLnNsaWNlKEYubGVuZ3RoKSxJKEYsVSl9fSwzNzUxMzoodWUsWCk9PntYLmVuY3J5cHQ9ZnVuY3Rpb24oeSxJKXtyZXR1cm4geS5fY2lwaGVyLmVuY3J5cHRCbG9j''@;'; put 'put ''ayhJKX0sWC5kZWNyeXB0PWZ1bmN0aW9uKHksSSl7cmV0dXJuIHkuX2NpcGhlci5kZWNyeXB0QmxvY2soSSl9fSw2MDUwMzoodWUsWCx5KT0+e3ZhciBJPXtFQ0I6eSgzNzUxMyksQ0JDOnkoMzQxMzMpLENGQjp5KDE3MDkwKSxDRkI4OnkoNzI1NzYpLENGQjE6eSg3MTAzOSksT0ZCOnkoNDY4''@;'; put 'put ''NTQpLENUUjp5KDcwMzM2KSxHQ006eSg3MDMzNil9LF89eSgzMjE5KTtmb3IodmFyIGcgaW4gXylfW2ddLm1vZHVsZT1JW19bZ10ubW9kZV07dWUuZXhwb3J0cz1ffSw0Njg1NDoodWUsWCx5KT0+e3ZhciBJPXkoMTM1NDYpO2Z1bmN0aW9uIF8oZyl7cmV0dXJuIGcuX3ByZXY9Zy5fY2lwaGVy''@;'; put 'put ''LmVuY3J5cHRCbG9jayhnLl9wcmV2KSxnLl9wcmV2fVguZW5jcnlwdD1mdW5jdGlvbihnLEIpe2Zvcig7Zy5fY2FjaGUubGVuZ3RoPEIubGVuZ3RoOylnLl9jYWNoZT1CdWZmZXIuY29uY2F0KFtnLl9jYWNoZSxfKGcpXSk7dmFyIHc9Zy5fY2FjaGUuc2xpY2UoMCxCLmxlbmd0aCk7cmV0dXJu''@;'; put 'put ''IGcuX2NhY2hlPWcuX2NhY2hlLnNsaWNlKEIubGVuZ3RoKSxJKEIsdyl9fSw5MTgyMToodWUsWCx5KT0+e3ZhciBJPXkoMTIzNzUpLF89eSgyNzA1NCkuQnVmZmVyLGc9eSgzMjQ3KTtmdW5jdGlvbiB3KFAsRixPLHope2cuY2FsbCh0aGlzKSx0aGlzLl9jaXBoZXI9bmV3IEkuQUVTKEYpLHRo''@;'; put 'put ''aXMuX3ByZXY9Xy5mcm9tKE8pLHRoaXMuX2NhY2hlPV8uYWxsb2NVbnNhZmUoMCksdGhpcy5fc2VjQ2FjaGU9Xy5hbGxvY1Vuc2FmZSgwKSx0aGlzLl9kZWNyeXB0PXosdGhpcy5fbW9kZT1QfXkoNzE5OTMpKHcsZyksdy5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihQKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5fbW9kZS5lbmNyeXB0KHRoaXMsUCx0aGlzLl9kZWNyeXB0KX0sdy5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7dGhpcy5fY2lwaGVyLnNjcnViKCl9LHVlLmV4cG9ydHM9d30sODg4NjI6KHVlLFgseSk9Pnt2YXIgST15KDM5Nzk5KSxfPXkoNDMzODgpLGc9eSg2MDUwMyksQj15KDU5''@;'; put 'put ''NTcxKSx3PXkoMTgyMTEpO2Z1bmN0aW9uIE8oTCxLLFUpe2lmKEw9TC50b0xvd2VyQ2FzZSgpLGdbTF0pcmV0dXJuIF8uY3JlYXRlQ2lwaGVyaXYoTCxLLFUpO2lmKEJbTF0pcmV0dXJuIG5ldyBJKHtrZXk6SyxpdjpVLG1vZGU6TH0pO3Rocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgc3Vp''@;'; put 'put ''dGUgdHlwZSIpfWZ1bmN0aW9uIHooTCxLLFUpe2lmKEw9TC50b0xvd2VyQ2FzZSgpLGdbTF0pcmV0dXJuIF8uY3JlYXRlRGVjaXBoZXJpdihMLEssVSk7aWYoQltMXSlyZXR1cm4gbmV3IEkoe2tleTpLLGl2OlUsbW9kZTpMLGRlY3J5cHQ6ITB9KTt0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZh''@;'; put 'put ''bGlkIHN1aXRlIHR5cGUiKX1YLmNyZWF0ZUNpcGhlcj1YLkNpcGhlcj1mdW5jdGlvbiBQKEwsSyl7dmFyIFUsVztpZihMPUwudG9Mb3dlckNhc2UoKSxnW0xdKVU9Z1tMXS5rZXksVz1nW0xdLml2O2Vsc2V7aWYoIUJbTF0pdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBzdWl0ZSB0eXBl''@;'; put 'put ''Iik7VT04KkJbTF0ua2V5LFc9QltMXS5pdn12YXIgWT13KEssITEsVSxXKTtyZXR1cm4gTyhMLFkua2V5LFkuaXYpfSxYLmNyZWF0ZUNpcGhlcml2PVguQ2lwaGVyaXY9TyxYLmNyZWF0ZURlY2lwaGVyPVguRGVjaXBoZXI9ZnVuY3Rpb24gRihMLEspe3ZhciBVLFc7aWYoTD1MLnRvTG93ZXJD''@;'; put 'put ''YXNlKCksZ1tMXSlVPWdbTF0ua2V5LFc9Z1tMXS5pdjtlbHNle2lmKCFCW0xdKXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgc3VpdGUgdHlwZSIpO1U9OCpCW0xdLmtleSxXPUJbTF0uaXZ9dmFyIFk9dyhLLCExLFUsVyk7cmV0dXJuIHooTCxZLmtleSxZLml2KX0sWC5jcmVhdGVEZWNp''@;'; put 'put ''cGhlcml2PVguRGVjaXBoZXJpdj16LFgubGlzdENpcGhlcnM9WC5nZXRDaXBoZXJzPWZ1bmN0aW9uIE4oKXtyZXR1cm4gT2JqZWN0LmtleXMoQikuY29uY2F0KF8uZ2V0Q2lwaGVycygpKX19LDM5Nzk5Oih1ZSxYLHkpPT57dmFyIEk9eSgzMjQ3KSxfPXkoNzE1NDkpLGc9eSg3MTk5MyksQj15''@;'; put 'put ''KDI3MDU0KS5CdWZmZXIsdz17ImRlcy1lZGUzLWNiYyI6Xy5DQkMuaW5zdGFudGlhdGUoXy5FREUpLCJkZXMtZWRlMyI6Xy5FREUsImRlcy1lZGUtY2JjIjpfLkNCQy5pbnN0YW50aWF0ZShfLkVERSksImRlcy1lZGUiOl8uRURFLCJkZXMtY2JjIjpfLkNCQy5pbnN0YW50aWF0ZShfLkRFUyks''@;'; put 'put ''ImRlcy1lY2IiOl8uREVTfTtmdW5jdGlvbiBQKEYpe0kuY2FsbCh0aGlzKTt2YXIgTixPPUYubW9kZS50b0xvd2VyQ2FzZSgpLHo9d1tPXTtOPUYuZGVjcnlwdD8iZGVjcnlwdCI6ImVuY3J5cHQiO3ZhciBMPUYua2V5O0IuaXNCdWZmZXIoTCl8fChMPUIuZnJvbShMKSksKCJkZXMtZWRlIj09''@;'; put 'put ''PU98fCJkZXMtZWRlLWNiYyI9PT1PKSYmKEw9Qi5jb25jYXQoW0wsTC5zbGljZSgwLDgpXSkpO3ZhciBLPUYuaXY7Qi5pc0J1ZmZlcihLKXx8KEs9Qi5mcm9tKEspKSx0aGlzLl9kZXM9ei5jcmVhdGUoe2tleTpMLGl2OkssdHlwZTpOfSl9dy5kZXM9d1siZGVzLWNiYyJdLHcuZGVzMz13WyJk''@;'; put 'put ''ZXMtZWRlMy1jYmMiXSx1ZS5leHBvcnRzPVAsZyhQLEkpLFAucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oRil7cmV0dXJuIEIuZnJvbSh0aGlzLl9kZXMudXBkYXRlKEYpKX0sUC5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7cmV0dXJuIEIuZnJvbSh0aGlzLl9kZXMuZmluYWwoKSl9''@;'; put 'put ''fSw1OTU3MToodWUsWCk9PntYWyJkZXMtZWNiIl09e2tleTo4LGl2OjB9LFhbImRlcy1jYmMiXT1YLmRlcz17a2V5OjgsaXY6OH0sWFsiZGVzLWVkZTMtY2JjIl09WC5kZXMzPXtrZXk6MjQsaXY6OH0sWFsiZGVzLWVkZTMiXT17a2V5OjI0LGl2OjB9LFhbImRlcy1lZGUtY2JjIl09e2tleTox''@;'; put 'put ''Nixpdjo4fSxYWyJkZXMtZWRlIl09e2tleToxNixpdjowfX0sMTQxMDU6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg5MTcpLF89eSgzMzQyKSxnPXkoMjcwNTQpLkJ1ZmZlcjtmdW5jdGlvbiBCKEYpe3ZhciB6LE89Ri5tb2R1bHVzLmJ5dGVMZW5ndGgoKTtkb3t6PW5ldyBJKF8o''@;'; put 'put ''TykpfXdoaWxlKHouY21wKEYubW9kdWx1cyk+PTB8fCF6LnVtb2QoRi5wcmltZTEpfHwhei51bW9kKEYucHJpbWUyKSk7cmV0dXJuIHp9ZnVuY3Rpb24gUChGLE8pe3ZhciB6PWZ1bmN0aW9uIHcoRil7dmFyIE89QihGKTtyZXR1cm57YmxpbmRlcjpPLnRvUmVkKEkubW9udChGLm1vZHVsdXMp''@;'; put 'put ''KS5yZWRQb3cobmV3IEkoRi5wdWJsaWNFeHBvbmVudCkpLmZyb21SZWQoKSx1bmJsaW5kZXI6Ty5pbnZtKEYubW9kdWx1cyl9fShPKSxOPU8ubW9kdWx1cy5ieXRlTGVuZ3RoKCksTD1uZXcgSShGKS5tdWwoei5ibGluZGVyKS51bW9kKE8ubW9kdWx1cyksSz1MLnRvUmVkKEkubW9udChPLnBy''@;'; put 'put ''aW1lMSkpLFU9TC50b1JlZChJLm1vbnQoTy5wcmltZTIpKSxXPU8uY29lZmZpY2llbnQsWT1PLnByaW1lMSxxPU8ucHJpbWUyLGVlPUsucmVkUG93KE8uZXhwb25lbnQxKS5mcm9tUmVkKCksSj1VLnJlZFBvdyhPLmV4cG9uZW50MikuZnJvbVJlZCgpLG5lPWVlLmlzdWIoSikuaW11bChXKS51''@;'; put 'put ''bW9kKFkpLmltdWwocSk7cmV0dXJuIEouaWFkZChuZSkuaW11bCh6LnVuYmxpbmRlcikudW1vZChPLm1vZHVsdXMpLnRvQXJyYXlMaWtlKGcsImJlIixOKX1QLmdldHI9Qix1ZS5leHBvcnRzPVB9LDk5NTYwOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9eSg2Mjk1MSl9LDc5''@;'; put 'put ''MTQzOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMjcwNTQpLkJ1ZmZlcixfPXkoNjcyMTEpLGc9eSg1OTQyKSxCPXkoNzE5OTMpLHc9eSg0MzE1MCksUD15KDc0NzU0KSxGPXkoNjI5NTEpO2Z1bmN0aW9uIE8oSyl7Zy5Xcml0YWJsZS5jYWxsKHRoaXMpO3ZhciBVPUZbS107aWYo''@;'; put 'put ''IVUpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIG1lc3NhZ2UgZGlnZXN0Iik7dGhpcy5faGFzaFR5cGU9VS5oYXNoLHRoaXMuX2hhc2g9XyhVLmhhc2gpLHRoaXMuX3RhZz1VLmlkLHRoaXMuX3NpZ25UeXBlPVUuc2lnbn1mdW5jdGlvbiB6KEspe2cuV3JpdGFibGUuY2FsbCh0aGlzKTt2YXIg''@;'; put 'put ''VT1GW0tdO2lmKCFVKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBtZXNzYWdlIGRpZ2VzdCIpO3RoaXMuX2hhc2g9XyhVLmhhc2gpLHRoaXMuX3RhZz1VLmlkLHRoaXMuX3NpZ25UeXBlPVUuc2lnbn1mdW5jdGlvbiBOKEspe3JldHVybiBuZXcgTyhLKX1mdW5jdGlvbiBMKEspe3JldHVybiBu''@;'; put 'put ''ZXcgeihLKX1PYmplY3Qua2V5cyhGKS5mb3JFYWNoKGZ1bmN0aW9uKEspe0ZbS10uaWQ9SS5mcm9tKEZbS10uaWQsImhleCIpLEZbSy50b0xvd2VyQ2FzZSgpXT1GW0tdfSksQihPLGcuV3JpdGFibGUpLE8ucHJvdG90eXBlLl93cml0ZT1mdW5jdGlvbihVLFcsWSl7dGhpcy5faGFzaC51cGRh''@;'; put 'put ''dGUoVSksWSgpfSxPLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oVSxXKXtyZXR1cm4gdGhpcy5faGFzaC51cGRhdGUoInN0cmluZyI9PXR5cGVvZiBVP0kuZnJvbShVLFcpOlUpLHRoaXN9LE8ucHJvdG90eXBlLnNpZ249ZnVuY3Rpb24oVSxXKXt0aGlzLmVuZCgpO3ZhciBZPXRoaXMuX2hh''@;'; put 'put ''c2guZGlnZXN0KCkscT13KFksVSx0aGlzLl9oYXNoVHlwZSx0aGlzLl9zaWduVHlwZSx0aGlzLl90YWcpO3JldHVybiBXP3EudG9TdHJpbmcoVyk6cX0sQih6LGcuV3JpdGFibGUpLHoucHJvdG90eXBlLl93cml0ZT1mdW5jdGlvbihVLFcsWSl7dGhpcy5faGFzaC51cGRhdGUoVSksWSgpfSx6''@;'; put 'put ''LnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oVSxXKXtyZXR1cm4gdGhpcy5faGFzaC51cGRhdGUoInN0cmluZyI9PXR5cGVvZiBVP0kuZnJvbShVLFcpOlUpLHRoaXN9LHoucHJvdG90eXBlLnZlcmlmeT1mdW5jdGlvbihVLFcsWSl7dmFyIHE9InN0cmluZyI9PXR5cGVvZiBXP0kuZnJvbShX''@;'; put 'put ''LFkpOlc7dGhpcy5lbmQoKTt2YXIgZWU9dGhpcy5faGFzaC5kaWdlc3QoKTtyZXR1cm4gUChxLGVlLFUsdGhpcy5fc2lnblR5cGUsdGhpcy5fdGFnKX0sdWUuZXhwb3J0cz17U2lnbjpOLFZlcmlmeTpMLGNyZWF0ZVNpZ246TixjcmVhdGVWZXJpZnk6TH19LDQzMTUwOih1ZSxYLHkpPT57InVz''@;'; put 'put ''ZSBzdHJpY3QiO3ZhciBJPXkoMjcwNTQpLkJ1ZmZlcixfPXkoNTY0MzIpLGc9eSgxNDEwNSksQj15KDkwNTE4KS5lYyx3PXkoOTE3KSxQPXkoNjU2NjcpLEY9eSg2NDU4OSk7ZnVuY3Rpb24gVShKLG5lLGllLGxlKXtpZigoSj1JLmZyb20oSi50b0FycmF5KCkpKS5sZW5ndGg8bmUuYnl0ZUxl''@;'; put 'put ''bmd0aCgpKXt2YXIgbWU9SS5hbGxvYyhuZS5ieXRlTGVuZ3RoKCktSi5sZW5ndGgpO0o9SS5jb25jYXQoW21lLEpdKX12YXIgX2U9aWUubGVuZ3RoLFRlPWZ1bmN0aW9uIFkoSixuZSl7Sj0oSj1XKEosbmUpKS5tb2QobmUpO3ZhciBpZT1JLmZyb20oSi50b0FycmF5KCkpO2lmKGllLmxlbmd0''@;'; put 'put ''aDxuZS5ieXRlTGVuZ3RoKCkpe3ZhciBsZT1JLmFsbG9jKG5lLmJ5dGVMZW5ndGgoKS1pZS5sZW5ndGgpO2llPUkuY29uY2F0KFtsZSxpZV0pfXJldHVybiBpZX0oaWUsbmUpLFNlPUkuYWxsb2MoX2UpO1NlLmZpbGwoMSk7dmFyIGplPUkuYWxsb2MoX2UpO3JldHVybiBqZT1fKGxlLGplKS51''@;'; put 'put ''cGRhdGUoU2UpLnVwZGF0ZShJLmZyb20oWzBdKSkudXBkYXRlKEopLnVwZGF0ZShUZSkuZGlnZXN0KCksU2U9XyhsZSxqZSkudXBkYXRlKFNlKS5kaWdlc3QoKSx7azpqZT1fKGxlLGplKS51cGRhdGUoU2UpLnVwZGF0ZShJLmZyb20oWzFdKSkudXBkYXRlKEopLnVwZGF0ZShUZSkuZGlnZXN0''@;'; put 'put ''KCksdjpTZT1fKGxlLGplKS51cGRhdGUoU2UpLmRpZ2VzdCgpfX1mdW5jdGlvbiBXKEosbmUpe3ZhciBpZT1uZXcgdyhKKSxsZT0oSi5sZW5ndGg8PDMpLW5lLmJpdExlbmd0aCgpO3JldHVybiBsZT4wJiZpZS5pc2hybihsZSksaWV9ZnVuY3Rpb24gcShKLG5lLGllKXt2YXIgbGUsbWU7ZG97''@;'; put 'put ''Zm9yKGxlPUkuYWxsb2MoMCk7OCpsZS5sZW5ndGg8Si5iaXRMZW5ndGgoKTspbmUudj1fKGllLG5lLmspLnVwZGF0ZShuZS52KS5kaWdlc3QoKSxsZT1JLmNvbmNhdChbbGUsbmUudl0pO21lPVcobGUsSiksbmUuaz1fKGllLG5lLmspLnVwZGF0ZShuZS52KS51cGRhdGUoSS5mcm9tKFswXSkp''@;'; put 'put ''LmRpZ2VzdCgpLG5lLnY9XyhpZSxuZS5rKS51cGRhdGUobmUudikuZGlnZXN0KCl9d2hpbGUoLTEhPT1tZS5jbXAoSikpO3JldHVybiBtZX1mdW5jdGlvbiBlZShKLG5lLGllLGxlKXtyZXR1cm4gSi50b1JlZCh3Lm1vbnQoaWUpKS5yZWRQb3cobmUpLmZyb21SZWQoKS5tb2QobGUpfXVlLmV4''@;'; put 'put ''cG9ydHM9ZnVuY3Rpb24geihKLG5lLGllLGxlLG1lKXt2YXIgX2U9UChuZSk7aWYoX2UuY3VydmUpe2lmKCJlY2RzYSIhPT1sZSYmImVjZHNhL3JzYSIhPT1sZSl0aHJvdyBuZXcgRXJyb3IoIndyb25nIHByaXZhdGUga2V5IHR5cGUiKTtyZXR1cm4gZnVuY3Rpb24gTihKLG5lKXt2YXIgaWU9''@;'; put 'put ''RltuZS5jdXJ2ZS5qb2luKCIuIildO2lmKCFpZSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gY3VydmUgIituZS5jdXJ2ZS5qb2luKCIuIikpO3ZhciBfZT1uZXcgQihpZSkua2V5RnJvbVByaXZhdGUobmUucHJpdmF0ZUtleSkuc2lnbihKKTtyZXR1cm4gSS5mcm9tKF9lLnRvREVSKCkpfShK''@;'; put 'put ''LF9lKX1pZigiZHNhIj09PV9lLnR5cGUpe2lmKCJkc2EiIT09bGUpdGhyb3cgbmV3IEVycm9yKCJ3cm9uZyBwcml2YXRlIGtleSB0eXBlIik7cmV0dXJuIGZ1bmN0aW9uIEwoSixuZSxpZSl7Zm9yKHZhciBqZSxsZT1uZS5wYXJhbXMucHJpdl9rZXksbWU9bmUucGFyYW1zLnAsX2U9bmUucGFy''@;'; put 'put ''YW1zLnEsVGU9bmUucGFyYW1zLmcsU2U9bmV3IHcoMCksVj1XKEosX2UpLm1vZChfZSkscD0hMSxiPVUobGUsX2UsSixpZSk7ITE9PT1wOylTZT1lZShUZSxqZT1xKF9lLGIsaWUpLG1lLF9lKSwwPT09KHA9amUuaW52bShfZSkuaW11bChWLmFkZChsZS5tdWwoU2UpKSkubW9kKF9lKSkuY21w''@;'; put 'put ''bigwKSYmKHA9ITEsU2U9bmV3IHcoMCkpO3JldHVybiBmdW5jdGlvbiBLKEosbmUpe0o9Si50b0FycmF5KCksbmU9bmUudG9BcnJheSgpLDEyOCZKWzBdJiYoSj1bMF0uY29uY2F0KEopKSwxMjgmbmVbMF0mJihuZT1bMF0uY29uY2F0KG5lKSk7dmFyIGxlPVs0OCxKLmxlbmd0aCtuZS5sZW5n''@;'; put 'put ''dGgrNCwyLEoubGVuZ3RoXTtyZXR1cm4gbGU9bGUuY29uY2F0KEosWzIsbmUubGVuZ3RoXSxuZSksSS5mcm9tKGxlKX0oU2UscCl9KEosX2UsaWUpfWlmKCJyc2EiIT09bGUmJiJlY2RzYS9yc2EiIT09bGUpdGhyb3cgbmV3IEVycm9yKCJ3cm9uZyBwcml2YXRlIGtleSB0eXBlIik7aWYodm9p''@;'; put 'put ''ZCAwIT09bmUucGFkZGluZyYmMSE9PW5lLnBhZGRpbmcpdGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIG9yIHVuc3VwcG9ydGVkIHBhZGRpbmcgbW9kZSIpO0o9SS5jb25jYXQoW21lLEpdKTtmb3IodmFyIFRlPV9lLm1vZHVsdXMuYnl0ZUxlbmd0aCgpLFNlPVswLDFdO0oubGVuZ3RoK1NlLmxl''@;'; put 'put ''bmd0aCsxPFRlOylTZS5wdXNoKDI1NSk7U2UucHVzaCgwKTtmb3IodmFyIGplPS0xOysramU8Si5sZW5ndGg7KVNlLnB1c2goSltqZV0pO3JldHVybiBnKFNlLF9lKX0sdWUuZXhwb3J0cy5nZXRLZXk9VSx1ZS5leHBvcnRzLm1ha2VLZXk9cX0sNzQ3NTQ6KHVlLFgseSk9PnsidXNlIHN0cmlj''@;'; put 'put ''dCI7dmFyIEk9eSgyNzA1NCkuQnVmZmVyLF89eSg5MTcpLGc9eSg5MDUxOCkuZWMsQj15KDY1NjY3KSx3PXkoNjQ1ODkpO2Z1bmN0aW9uIHooTixMKXtpZihOLmNtcG4oMCk8PTApdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHNpZyIpO2lmKE4uY21wKEwpPj0wKXRocm93IG5ldyBFcnJvcigi''@;'; put 'put ''aW52YWxpZCBzaWciKX11ZS5leHBvcnRzPWZ1bmN0aW9uIFAoTixMLEssVSxXKXt2YXIgWT1CKEspO2lmKCJlYyI9PT1ZLnR5cGUpe2lmKCJlY2RzYSIhPT1VJiYiZWNkc2EvcnNhIiE9PVUpdGhyb3cgbmV3IEVycm9yKCJ3cm9uZyBwdWJsaWMga2V5IHR5cGUiKTtyZXR1cm4gZnVuY3Rpb24g''@;'; put 'put ''RihOLEwsSyl7dmFyIFU9d1tLLmRhdGEuYWxnb3JpdGhtLmN1cnZlLmpvaW4oIi4iKV07aWYoIVUpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIGN1cnZlICIrSy5kYXRhLmFsZ29yaXRobS5jdXJ2ZS5qb2luKCIuIikpO3JldHVybiBuZXcgZyhVKS52ZXJpZnkoTCxOLEsuZGF0YS5zdWJqZWN0''@;'; put 'put ''UHJpdmF0ZUtleS5kYXRhKX0oTixMLFkpfWlmKCJkc2EiPT09WS50eXBlKXtpZigiZHNhIiE9PVUpdGhyb3cgbmV3IEVycm9yKCJ3cm9uZyBwdWJsaWMga2V5IHR5cGUiKTtyZXR1cm4gZnVuY3Rpb24gTyhOLEwsSyl7dmFyIFU9Sy5kYXRhLnAsVz1LLmRhdGEucSxZPUsuZGF0YS5nLHE9Sy5k''@;'; put 'put ''YXRhLnB1Yl9rZXksZWU9Qi5zaWduYXR1cmUuZGVjb2RlKE4sImRlciIpLEo9ZWUucyxuZT1lZS5yO3ooSixXKSx6KG5lLFcpO3ZhciBpZT1fLm1vbnQoVSksbGU9Si5pbnZtKFcpO3JldHVybiAwPT09WS50b1JlZChpZSkucmVkUG93KG5ldyBfKEwpLm11bChsZSkubW9kKFcpKS5mcm9tUmVk''@;'; put 'put ''KCkubXVsKHEudG9SZWQoaWUpLnJlZFBvdyhuZS5tdWwobGUpLm1vZChXKSkuZnJvbVJlZCgpKS5tb2QoVSkubW9kKFcpLmNtcChuZSl9KE4sTCxZKX1pZigicnNhIiE9PVUmJiJlY2RzYS9yc2EiIT09VSl0aHJvdyBuZXcgRXJyb3IoIndyb25nIHB1YmxpYyBrZXkgdHlwZSIpO0w9SS5jb25j''@;'; put 'put ''YXQoW1csTF0pO2Zvcih2YXIgcT1ZLm1vZHVsdXMuYnl0ZUxlbmd0aCgpLGVlPVsxXSxKPTA7TC5sZW5ndGgrZWUubGVuZ3RoKzI8cTspZWUucHVzaCgyNTUpLEorPTE7ZWUucHVzaCgwKTtmb3IodmFyIG5lPS0xOysrbmU8TC5sZW5ndGg7KWVlLnB1c2goTFtuZV0pO2VlPUkuZnJvbShlZSk7''@;'; put 'put ''dmFyIGllPV8ubW9udChZLm1vZHVsdXMpO049KE49bmV3IF8oTikudG9SZWQoaWUpKS5yZWRQb3cobmV3IF8oWS5wdWJsaWNFeHBvbmVudCkpLE49SS5mcm9tKE4uZnJvbVJlZCgpLnRvQXJyYXkoKSk7dmFyIGxlPUo8OD8xOjA7Zm9yKHE9TWF0aC5taW4oTi5sZW5ndGgsZWUubGVuZ3RoKSxO''@;'; put 'put ''Lmxlbmd0aCE9PWVlLmxlbmd0aCYmKGxlPTEpLG5lPS0xOysrbmU8cTspbGV8PU5bbmVdXmVlW25lXTtyZXR1cm4gMD09PWxlfX0sMTM1NDY6dWU9Pnt1ZS5leHBvcnRzPWZ1bmN0aW9uKHksSSl7Zm9yKHZhciBfPU1hdGgubWluKHkubGVuZ3RoLEkubGVuZ3RoKSxnPW5ldyBCdWZmZXIoXyks''@;'; put 'put ''Qj0wO0I8XzsrK0IpZ1tCXT15W0JdXklbQl07cmV0dXJuIGd9fSw4MzgzODoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDEzOTgxKSxfPXkoMjIwMjApLGc9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbC5mb3I/U3ltYm9sLmZvcigi''@;'; put 'put ''bm9kZWpzLnV0aWwuaW5zcGVjdC5jdXN0b20iKTpudWxsO1guQnVmZmVyPUYsWC5TbG93QnVmZmVyPWZ1bmN0aW9uIEooSWUpe3JldHVybitJZSE9SWUmJihJZT0wKSxGLmFsbG9jKCtJZSl9LFguSU5TUEVDVF9NQVhfQllURVM9NTA7dmFyIEI9MjE0NzQ4MzY0NztmdW5jdGlvbiBQKEllKXtp''@;'; put 'put ''ZihJZT5CKXRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgIicrSWUrJyIgaXMgaW52YWxpZCBmb3Igb3B0aW9uICJzaXplIicpO3ZhciBWZT1uZXcgVWludDhBcnJheShJZSk7cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZihWZSxGLnByb3RvdHlwZSksVmV9ZnVuY3Rpb24gRihJ''@;'; put 'put ''ZSxWZSxrZSl7aWYoIm51bWJlciI9PXR5cGVvZiBJZSl7aWYoInN0cmluZyI9PXR5cGVvZiBWZSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInN0cmluZyIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIHN0cmluZy4gUmVjZWl2ZWQgdHlwZSBudW1iZXInKTtyZXR1cm4gTChJZSl9cmV0dXJu''@;'; put 'put ''IE8oSWUsVmUsa2UpfWZ1bmN0aW9uIE8oSWUsVmUsa2Upe2lmKCJzdHJpbmciPT10eXBlb2YgSWUpcmV0dXJuIGZ1bmN0aW9uIEsoSWUsVmUpe2lmKCgic3RyaW5nIiE9dHlwZW9mIFZlfHwiIj09PVZlKSYmKFZlPSJ1dGY4IiksIUYuaXNFbmNvZGluZyhWZSkpdGhyb3cgbmV3IFR5cGVFcnJv''@;'; put 'put ''cigiVW5rbm93biBlbmNvZGluZzogIitWZSk7dmFyIGtlPTB8bmUoSWUsVmUpLEFlPVAoa2UpLF90PUFlLndyaXRlKEllLFZlKTtyZXR1cm4gX3QhPT1rZSYmKEFlPUFlLnNsaWNlKDAsX3QpKSxBZX0oSWUsVmUpO2lmKEFycmF5QnVmZmVyLmlzVmlldyhJZSkpcmV0dXJuIGZ1bmN0aW9uIFco''@;'; put 'put ''SWUpe2lmKERlKEllLFVpbnQ4QXJyYXkpKXt2YXIgVmU9bmV3IFVpbnQ4QXJyYXkoSWUpO3JldHVybiBZKFZlLmJ1ZmZlcixWZS5ieXRlT2Zmc2V0LFZlLmJ5dGVMZW5ndGgpfXJldHVybiBVKEllKX0oSWUpO2lmKG51bGw9PUllKXRocm93IG5ldyBUeXBlRXJyb3IoIlRoZSBmaXJzdCBhcmd1''@;'; put 'put ''bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIEFycmF5LWxpa2UgT2JqZWN0LiBSZWNlaXZlZCB0eXBlICIrdHlwZW9mIEllKTtpZihEZShJZSxBcnJheUJ1ZmZlcil8fEllJiZEZShJZS5idWZmZXIsQXJyYXlCdWZmZXIpfHx0''@;'; put 'put ''eXBlb2YgU2hhcmVkQXJyYXlCdWZmZXI8InUiJiYoRGUoSWUsU2hhcmVkQXJyYXlCdWZmZXIpfHxJZSYmRGUoSWUuYnVmZmVyLFNoYXJlZEFycmF5QnVmZmVyKSkpcmV0dXJuIFkoSWUsVmUsa2UpO2lmKCJudW1iZXIiPT10eXBlb2YgSWUpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJ2YWx1''@;'; put 'put ''ZSIgYXJndW1lbnQgbXVzdCBub3QgYmUgb2YgdHlwZSBudW1iZXIuIFJlY2VpdmVkIHR5cGUgbnVtYmVyJyk7dmFyIEFlPUllLnZhbHVlT2YmJkllLnZhbHVlT2YoKTtpZihudWxsIT1BZSYmQWUhPT1JZSlyZXR1cm4gRi5mcm9tKEFlLFZlLGtlKTt2YXIgX3Q9ZnVuY3Rpb24gcShJZSl7aWYo''@;'; put 'put ''Ri5pc0J1ZmZlcihJZSkpe3ZhciBWZT0wfGVlKEllLmxlbmd0aCksa2U9UChWZSk7cmV0dXJuIDA9PT1rZS5sZW5ndGh8fEllLmNvcHkoa2UsMCwwLFZlKSxrZX1yZXR1cm4gdm9pZCAwIT09SWUubGVuZ3RoPyJudW1iZXIiIT10eXBlb2YgSWUubGVuZ3RofHxGZShJZS5sZW5ndGgpP1AoMCk6''@;'; put 'put ''VShJZSk6IkJ1ZmZlciI9PT1JZS50eXBlJiZBcnJheS5pc0FycmF5KEllLmRhdGEpP1UoSWUuZGF0YSk6dm9pZCAwfShJZSk7aWYoX3QpcmV0dXJuIF90O2lmKHR5cGVvZiBTeW1ib2w8InUiJiZudWxsIT1TeW1ib2wudG9QcmltaXRpdmUmJiJmdW5jdGlvbiI9PXR5cGVvZiBJZVtTeW1ib2wu''@;'; put 'put ''dG9QcmltaXRpdmVdKXJldHVybiBGLmZyb20oSWVbU3ltYm9sLnRvUHJpbWl0aXZlXSgic3RyaW5nIiksVmUsa2UpO3Rocm93IG5ldyBUeXBlRXJyb3IoIlRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9y''@;'; put 'put ''IEFycmF5LWxpa2UgT2JqZWN0LiBSZWNlaXZlZCB0eXBlICIrdHlwZW9mIEllKX1mdW5jdGlvbiB6KEllKXtpZigibnVtYmVyIiE9dHlwZW9mIEllKXRocm93IG5ldyBUeXBlRXJyb3IoJyJzaXplIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgbnVtYmVyJyk7aWYoSWU8MCl0aHJvdyBuZXcg''@;'; put 'put ''UmFuZ2VFcnJvcignVGhlIHZhbHVlICInK0llKyciIGlzIGludmFsaWQgZm9yIG9wdGlvbiAic2l6ZSInKX1mdW5jdGlvbiBMKEllKXtyZXR1cm4geihJZSksUChJZTwwPzA6MHxlZShJZSkpfWZ1bmN0aW9uIFUoSWUpe2Zvcih2YXIgVmU9SWUubGVuZ3RoPDA/MDowfGVlKEllLmxlbmd0aCks''@;'; put 'put ''a2U9UChWZSksQWU9MDtBZTxWZTtBZSs9MSlrZVtBZV09MjU1JkllW0FlXTtyZXR1cm4ga2V9ZnVuY3Rpb24gWShJZSxWZSxrZSl7aWYoVmU8MHx8SWUuYnl0ZUxlbmd0aDxWZSl0aHJvdyBuZXcgUmFuZ2VFcnJvcignIm9mZnNldCIgaXMgb3V0c2lkZSBvZiBidWZmZXIgYm91bmRzJyk7aWYo''@;'; put 'put ''SWUuYnl0ZUxlbmd0aDxWZSsoa2V8fDApKXRocm93IG5ldyBSYW5nZUVycm9yKCcibGVuZ3RoIiBpcyBvdXRzaWRlIG9mIGJ1ZmZlciBib3VuZHMnKTt2YXIgQWU7cmV0dXJuIEFlPXZvaWQgMD09PVZlJiZ2b2lkIDA9PT1rZT9uZXcgVWludDhBcnJheShJZSk6dm9pZCAwPT09a2U/bmV3IFVp''@;'; put 'put ''bnQ4QXJyYXkoSWUsVmUpOm5ldyBVaW50OEFycmF5KEllLFZlLGtlKSxPYmplY3Quc2V0UHJvdG90eXBlT2YoQWUsRi5wcm90b3R5cGUpLEFlfWZ1bmN0aW9uIGVlKEllKXtpZihJZT49Qil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQXR0ZW1wdCB0byBhbGxvY2F0ZSBCdWZmZXIgbGFyZ2VyIHRo''@;'; put 'put ''YW4gbWF4aW11bSBzaXplOiAweCIrQi50b1N0cmluZygxNikrIiBieXRlcyIpO3JldHVybiAwfEllfWZ1bmN0aW9uIG5lKEllLFZlKXtpZihGLmlzQnVmZmVyKEllKSlyZXR1cm4gSWUubGVuZ3RoO2lmKEFycmF5QnVmZmVyLmlzVmlldyhJZSl8fERlKEllLEFycmF5QnVmZmVyKSlyZXR1cm4g''@;'; put 'put ''SWUuYnl0ZUxlbmd0aDtpZigic3RyaW5nIiE9dHlwZW9mIEllKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAic3RyaW5nIiBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBvciBBcnJheUJ1ZmZlci4gUmVjZWl2ZWQgdHlwZSAnK3R5cGVvZiBJZSk7dmFyIGtl''@;'; put 'put ''PUllLmxlbmd0aCxBZT1hcmd1bWVudHMubGVuZ3RoPjImJiEwPT09YXJndW1lbnRzWzJdO2lmKCFBZSYmMD09PWtlKXJldHVybiAwO2Zvcih2YXIgX3Q9ITE7Oylzd2l0Y2goVmUpe2Nhc2UiYXNjaWkiOmNhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIGtlO2Nhc2UidXRmOCI6Y2Fz''@;'; put 'put ''ZSJ1dGYtOCI6cmV0dXJuIG90KEllKS5sZW5ndGg7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiAyKmtlO2Nhc2UiaGV4IjpyZXR1cm4ga2U+Pj4xO2Nhc2UiYmFzZTY0IjpyZXR1cm4gWGUoSWUpLmxlbmd0aDtkZWZhdWx0OmlmKF90''@;'; put 'put ''KXJldHVybiBBZT8tMTpvdChJZSkubGVuZ3RoO1ZlPSgiIitWZSkudG9Mb3dlckNhc2UoKSxfdD0hMH19ZnVuY3Rpb24gaWUoSWUsVmUsa2Upe3ZhciBBZT0hMTtpZigodm9pZCAwPT09VmV8fFZlPDApJiYoVmU9MCksVmU+dGhpcy5sZW5ndGh8fCgodm9pZCAwPT09a2V8fGtlPnRoaXMubGVu''@;'; put 'put ''Z3RoKSYmKGtlPXRoaXMubGVuZ3RoKSxrZTw9MCl8fChrZT4+Pj0wKTw9KFZlPj4+PTApKXJldHVybiIiO2ZvcihJZXx8KEllPSJ1dGY4Iik7Oylzd2l0Y2goSWUpe2Nhc2UiaGV4IjpyZXR1cm4gRSh0aGlzLFZlLGtlKTtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiB4KHRoaXMsVmUs''@;'; put 'put ''a2UpO2Nhc2UiYXNjaWkiOnJldHVybiBIKHRoaXMsVmUsa2UpO2Nhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIGoodGhpcyxWZSxrZSk7Y2FzZSJiYXNlNjQiOnJldHVybiBiKHRoaXMsVmUsa2UpO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0x''@;'; put 'put ''NmxlIjpyZXR1cm4gbSh0aGlzLFZlLGtlKTtkZWZhdWx0OmlmKEFlKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrSWUpO0llPShJZSsiIikudG9Mb3dlckNhc2UoKSxBZT0hMH19ZnVuY3Rpb24gbGUoSWUsVmUsa2Upe3ZhciBBZT1JZVtWZV07SWVbVmVdPUllW2tl''@;'; put 'put ''XSxJZVtrZV09QWV9ZnVuY3Rpb24gbWUoSWUsVmUsa2UsQWUsX3Qpe2lmKDA9PT1JZS5sZW5ndGgpcmV0dXJuLTE7aWYoInN0cmluZyI9PXR5cGVvZiBrZT8oQWU9a2Usa2U9MCk6a2U+MjE0NzQ4MzY0Nz9rZT0yMTQ3NDgzNjQ3OmtlPC0yMTQ3NDgzNjQ4JiYoa2U9LTIxNDc0ODM2NDgpLEZl''@;'; put 'put ''KGtlPStrZSkmJihrZT1fdD8wOkllLmxlbmd0aC0xKSxrZTwwJiYoa2U9SWUubGVuZ3RoK2tlKSxrZT49SWUubGVuZ3RoKXtpZihfdClyZXR1cm4tMTtrZT1JZS5sZW5ndGgtMX1lbHNlIGlmKGtlPDApe2lmKCFfdClyZXR1cm4tMTtrZT0wfWlmKCJzdHJpbmciPT10eXBlb2YgVmUmJihWZT1G''@;'; put 'put ''LmZyb20oVmUsQWUpKSxGLmlzQnVmZmVyKFZlKSlyZXR1cm4gMD09PVZlLmxlbmd0aD8tMTpfZShJZSxWZSxrZSxBZSxfdCk7aWYoIm51bWJlciI9PXR5cGVvZiBWZSlyZXR1cm4gVmUmPTI1NSwiZnVuY3Rpb24iPT10eXBlb2YgVWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZj9fdD9VaW50''@;'; put 'put ''OEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwoSWUsVmUsa2UpOlVpbnQ4QXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mLmNhbGwoSWUsVmUsa2UpOl9lKEllLFtWZV0sa2UsQWUsX3QpO3Rocm93IG5ldyBUeXBlRXJyb3IoInZhbCBtdXN0IGJlIHN0cmluZywgbnVtYmVyIG9yIEJ1ZmZl''@;'; put 'put ''ciIpfWZ1bmN0aW9uIF9lKEllLFZlLGtlLEFlLF90KXt2YXIgTXQsbnQ9MSxRZT1JZS5sZW5ndGgsdW49VmUubGVuZ3RoO2lmKHZvaWQgMCE9PUFlJiYoInVjczIiPT09KEFlPVN0cmluZyhBZSkudG9Mb3dlckNhc2UoKSl8fCJ1Y3MtMiI9PT1BZXx8InV0ZjE2bGUiPT09QWV8fCJ1dGYtMTZs''@;'; put 'put ''ZSI9PT1BZSkpe2lmKEllLmxlbmd0aDwyfHxWZS5sZW5ndGg8MilyZXR1cm4tMTtudD0yLFFlLz0yLHVuLz0yLGtlLz0yfWZ1bmN0aW9uIHl0KHR0LEhlKXtyZXR1cm4gMT09PW50P3R0W0hlXTp0dC5yZWFkVUludDE2QkUoSGUqbnQpfWlmKF90KXt2YXIgRHQ9LTE7Zm9yKE10PWtlO010PFFl''@;'; put 'put ''O010KyspaWYoeXQoSWUsTXQpPT09eXQoVmUsLTE9PT1EdD8wOk10LUR0KSl7aWYoLTE9PT1EdCYmKER0PU10KSxNdC1EdCsxPT09dW4pcmV0dXJuIER0Km50fWVsc2UtMSE9PUR0JiYoTXQtPU10LUR0KSxEdD0tMX1lbHNlIGZvcihrZSt1bj5RZSYmKGtlPVFlLXVuKSxNdD1rZTtNdD49MDtN''@;'; put 'put ''dC0tKXtmb3IodmFyIGl0PSEwLCRlPTA7JGU8dW47JGUrKylpZih5dChJZSxNdCskZSkhPT15dChWZSwkZSkpe2l0PSExO2JyZWFrfWlmKGl0KXJldHVybiBNdH1yZXR1cm4tMX1mdW5jdGlvbiBUZShJZSxWZSxrZSxBZSl7a2U9TnVtYmVyKGtlKXx8MDt2YXIgX3Q9SWUubGVuZ3RoLWtlO0Fl''@;'; put 'put ''PyhBZT1OdW1iZXIoQWUpKT5fdCYmKEFlPV90KTpBZT1fdDt2YXIgbnQ9VmUubGVuZ3RoO0FlPm50LzImJihBZT1udC8yKTtmb3IodmFyIFFlPTA7UWU8QWU7KytRZSl7dmFyIHVuPXBhcnNlSW50KFZlLnN1YnN0cigyKlFlLDIpLDE2KTtpZihGZSh1bikpcmV0dXJuIFFlO0llW2tlK1FlXT11''@;'; put 'put ''bn1yZXR1cm4gUWV9ZnVuY3Rpb24gU2UoSWUsVmUsa2UsQWUpe3JldHVybiB6ZShvdChWZSxJZS5sZW5ndGgta2UpLEllLGtlLEFlKX1mdW5jdGlvbiBqZShJZSxWZSxrZSxBZSl7cmV0dXJuIHplKGZ1bmN0aW9uIHhlKEllKXtmb3IodmFyIFZlPVtdLGtlPTA7a2U8SWUubGVuZ3RoOysra2Up''@;'; put 'put ''VmUucHVzaCgyNTUmSWUuY2hhckNvZGVBdChrZSkpO3JldHVybiBWZX0oVmUpLEllLGtlLEFlKX1mdW5jdGlvbiBWKEllLFZlLGtlLEFlKXtyZXR1cm4gemUoWGUoVmUpLEllLGtlLEFlKX1mdW5jdGlvbiBwKEllLFZlLGtlLEFlKXtyZXR1cm4gemUoZnVuY3Rpb24gdmUoSWUsVmUpe2Zvcih2''@;'; put 'put ''YXIga2UsQWUsbnQ9W10sUWU9MDtRZTxJZS5sZW5ndGgmJiEoKFZlLT0yKTwwKTsrK1FlKUFlPShrZT1JZS5jaGFyQ29kZUF0KFFlKSk+PjgsbnQucHVzaChrZSUyNTYpLG50LnB1c2goQWUpO3JldHVybiBudH0oVmUsSWUubGVuZ3RoLWtlKSxJZSxrZSxBZSl9ZnVuY3Rpb24gYihJZSxWZSxr''@;'; put 'put ''ZSl7cmV0dXJuIEkuZnJvbUJ5dGVBcnJheSgwPT09VmUmJmtlPT09SWUubGVuZ3RoP0llOkllLnNsaWNlKFZlLGtlKSl9ZnVuY3Rpb24geChJZSxWZSxrZSl7a2U9TWF0aC5taW4oSWUubGVuZ3RoLGtlKTtmb3IodmFyIEFlPVtdLF90PVZlO190PGtlOyl7dmFyIHl0LE10LER0LGl0LG50PUll''@;'; put 'put ''W190XSxRZT1udWxsLHVuPW50PjIzOT80Om50PjIyMz8zOm50PjE5MT8yOjE7aWYoX3QrdW48PWtlKXN3aXRjaCh1bil7Y2FzZSAxOm50PDEyOCYmKFFlPW50KTticmVhaztjYXNlIDI6MTI4PT0oMTkyJih5dD1JZVtfdCsxXSkpJiYoaXQ9KDMxJm50KTw8Nnw2MyZ5dCk+MTI3JiYoUWU9aXQp''@;'; put 'put ''O2JyZWFrO2Nhc2UgMzpNdD1JZVtfdCsyXSwxMjg9PSgxOTImKHl0PUllW190KzFdKSkmJjEyOD09KDE5MiZNdCkmJihpdD0oMTUmbnQpPDwxMnwoNjMmeXQpPDw2fDYzJk10KT4yMDQ3JiYoaXQ8NTUyOTZ8fGl0PjU3MzQzKSYmKFFlPWl0KTticmVhaztjYXNlIDQ6TXQ9SWVbX3QrMl0sRHQ9''@;'; put 'put ''SWVbX3QrM10sMTI4PT0oMTkyJih5dD1JZVtfdCsxXSkpJiYxMjg9PSgxOTImTXQpJiYxMjg9PSgxOTImRHQpJiYoaXQ9KDE1Jm50KTw8MTh8KDYzJnl0KTw8MTJ8KDYzJk10KTw8Nnw2MyZEdCk+NjU1MzUmJml0PDExMTQxMTImJihRZT1pdCl9bnVsbD09PVFlPyhRZT02NTUzMyx1bj0xKTpR''@;'; put 'put ''ZT42NTUzNSYmKEFlLnB1c2goKFFlLT02NTUzNik+Pj4xMCYxMDIzfDU1Mjk2KSxRZT01NjMyMHwxMDIzJlFlKSxBZS5wdXNoKFFlKSxfdCs9dW59cmV0dXJuIGZ1bmN0aW9uIFQoSWUpe3ZhciBWZT1JZS5sZW5ndGg7aWYoVmU8PUMpcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHko''@;'; put 'put ''U3RyaW5nLEllKTtmb3IodmFyIGtlPSIiLEFlPTA7QWU8VmU7KWtlKz1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxJZS5zbGljZShBZSxBZSs9QykpO3JldHVybiBrZX0oQWUpfVgua01heExlbmd0aD1CLCEoRi5UWVBFRF9BUlJBWV9TVVBQT1JUPWZ1bmN0aW9uIHcoKXt0cnl7''@;'; put 'put ''dmFyIEllPW5ldyBVaW50OEFycmF5KDEpLFZlPXtmb286ZnVuY3Rpb24oKXtyZXR1cm4gNDJ9fTtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mKFZlLFVpbnQ4QXJyYXkucHJvdG90eXBlKSxPYmplY3Quc2V0UHJvdG90eXBlT2YoSWUsVmUpLDQyPT09SWUuZm9vKCl9Y2F0Y2h7cmV0dXJu''@;'; put 'put ''ITF9fSgpKSYmdHlwZW9mIGNvbnNvbGU8InUiJiYiZnVuY3Rpb24iPT10eXBlb2YgY29uc29sZS5lcnJvciYmY29uc29sZS5lcnJvcigiVGhpcyBicm93c2VyIGxhY2tzIHR5cGVkIGFycmF5IChVaW50OEFycmF5KSBzdXBwb3J0IHdoaWNoIGlzIHJlcXVpcmVkIGJ5IGBidWZmZXJgIHY1Lngu''@;'; put 'put ''IFVzZSBgYnVmZmVyYCB2NC54IGlmIHlvdSByZXF1aXJlIG9sZCBicm93c2VyIHN1cHBvcnQuIiksT2JqZWN0LmRlZmluZVByb3BlcnR5KEYucHJvdG90eXBlLCJwYXJlbnQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe2lmKEYuaXNCdWZmZXIodGhpcykpcmV0dXJuIHRoaXMuYnVm''@;'; put 'put ''ZmVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLnByb3RvdHlwZSwib2Zmc2V0Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtpZihGLmlzQnVmZmVyKHRoaXMpKXJldHVybiB0aGlzLmJ5dGVPZmZzZXR9fSksRi5wb29sU2l6ZT04MTkyLEYuZnJvbT1mdW5jdGlvbihJZSxWZSxr''@;'; put 'put ''ZSl7cmV0dXJuIE8oSWUsVmUsa2UpfSxPYmplY3Quc2V0UHJvdG90eXBlT2YoRi5wcm90b3R5cGUsVWludDhBcnJheS5wcm90b3R5cGUpLE9iamVjdC5zZXRQcm90b3R5cGVPZihGLFVpbnQ4QXJyYXkpLEYuYWxsb2M9ZnVuY3Rpb24oSWUsVmUsa2Upe3JldHVybiBmdW5jdGlvbiBOKEllLFZl''@;'; put 'put ''LGtlKXtyZXR1cm4geihJZSksSWU8PTA/UChJZSk6dm9pZCAwIT09VmU/InN0cmluZyI9PXR5cGVvZiBrZT9QKEllKS5maWxsKFZlLGtlKTpQKEllKS5maWxsKFZlKTpQKEllKX0oSWUsVmUsa2UpfSxGLmFsbG9jVW5zYWZlPWZ1bmN0aW9uKEllKXtyZXR1cm4gTChJZSl9LEYuYWxsb2NVbnNh''@;'; put 'put ''ZmVTbG93PWZ1bmN0aW9uKEllKXtyZXR1cm4gTChJZSl9LEYuaXNCdWZmZXI9ZnVuY3Rpb24oVmUpe3JldHVybiBudWxsIT1WZSYmITA9PT1WZS5faXNCdWZmZXImJlZlIT09Ri5wcm90b3R5cGV9LEYuY29tcGFyZT1mdW5jdGlvbihWZSxrZSl7aWYoRGUoVmUsVWludDhBcnJheSkmJihWZT1G''@;'; put 'put ''LmZyb20oVmUsVmUub2Zmc2V0LFZlLmJ5dGVMZW5ndGgpKSxEZShrZSxVaW50OEFycmF5KSYmKGtlPUYuZnJvbShrZSxrZS5vZmZzZXQsa2UuYnl0ZUxlbmd0aCkpLCFGLmlzQnVmZmVyKFZlKXx8IUYuaXNCdWZmZXIoa2UpKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAiYnVmMSIsICJidWYy''@;'; put 'put ''IiBhcmd1bWVudHMgbXVzdCBiZSBvbmUgb2YgdHlwZSBCdWZmZXIgb3IgVWludDhBcnJheScpO2lmKFZlPT09a2UpcmV0dXJuIDA7Zm9yKHZhciBBZT1WZS5sZW5ndGgsX3Q9a2UubGVuZ3RoLG50PTAsUWU9TWF0aC5taW4oQWUsX3QpO250PFFlOysrbnQpaWYoVmVbbnRdIT09a2VbbnRdKXtB''@;'; put 'put ''ZT1WZVtudF0sX3Q9a2VbbnRdO2JyZWFrfXJldHVybiBBZTxfdD8tMTpfdDxBZT8xOjB9LEYuaXNFbmNvZGluZz1mdW5jdGlvbihWZSl7c3dpdGNoKFN0cmluZyhWZSkudG9Mb3dlckNhc2UoKSl7Y2FzZSJoZXgiOmNhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6Y2FzZSJhc2NpaSI6Y2FzZSJsYXRp''@;'; put 'put ''bjEiOmNhc2UiYmluYXJ5IjpjYXNlImJhc2U2NCI6Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fSxGLmNvbmNhdD1mdW5jdGlvbihWZSxrZSl7aWYoIUFycmF5LmlzQXJyYXkoVmUpKXRocm93IG5l''@;'; put 'put ''dyBUeXBlRXJyb3IoJyJsaXN0IiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTtpZigwPT09VmUubGVuZ3RoKXJldHVybiBGLmFsbG9jKDApO3ZhciBBZTtpZih2b2lkIDA9PT1rZSlmb3Ioa2U9MCxBZT0wO0FlPFZlLmxlbmd0aDsrK0FlKWtlKz1WZVtBZV0ubGVuZ3Ro''@;'; put 'put ''O3ZhciBfdD1GLmFsbG9jVW5zYWZlKGtlKSxudD0wO2ZvcihBZT0wO0FlPFZlLmxlbmd0aDsrK0FlKXt2YXIgUWU9VmVbQWVdO2lmKERlKFFlLFVpbnQ4QXJyYXkpKW50K1FlLmxlbmd0aD5fdC5sZW5ndGg/Ri5mcm9tKFFlKS5jb3B5KF90LG50KTpVaW50OEFycmF5LnByb3RvdHlwZS5zZXQu''@;'; put 'put ''Y2FsbChfdCxRZSxudCk7ZWxzZXtpZighRi5pc0J1ZmZlcihRZSkpdGhyb3cgbmV3IFR5cGVFcnJvcignImxpc3QiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpO1FlLmNvcHkoX3QsbnQpfW50Kz1RZS5sZW5ndGh9cmV0dXJuIF90fSxGLmJ5dGVMZW5ndGg9bmUsRi5w''@;'; put 'put ''cm90b3R5cGUuX2lzQnVmZmVyPSEwLEYucHJvdG90eXBlLnN3YXAxNj1mdW5jdGlvbigpe3ZhciBWZT10aGlzLmxlbmd0aDtpZihWZSUyIT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMTYtYml0cyIpO2Zvcih2YXIga2U9MDtrZTxW''@;'; put 'put ''ZTtrZSs9MilsZSh0aGlzLGtlLGtlKzEpO3JldHVybiB0aGlzfSxGLnByb3RvdHlwZS5zd2FwMzI9ZnVuY3Rpb24oKXt2YXIgVmU9dGhpcy5sZW5ndGg7aWYoVmUlNCE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDMyLWJpdHMiKTtm''@;'; put 'put ''b3IodmFyIGtlPTA7a2U8VmU7a2UrPTQpbGUodGhpcyxrZSxrZSszKSxsZSh0aGlzLGtlKzEsa2UrMik7cmV0dXJuIHRoaXN9LEYucHJvdG90eXBlLnN3YXA2ND1mdW5jdGlvbigpe3ZhciBWZT10aGlzLmxlbmd0aDtpZihWZSU4IT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6''@;'; put 'put ''ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNjQtYml0cyIpO2Zvcih2YXIga2U9MDtrZTxWZTtrZSs9OClsZSh0aGlzLGtlLGtlKzcpLGxlKHRoaXMsa2UrMSxrZSs2KSxsZSh0aGlzLGtlKzIsa2UrNSksbGUodGhpcyxrZSszLGtlKzQpO3JldHVybiB0aGlzfSxGLnByb3RvdHlwZS50b0xvY2Fs''@;'; put 'put ''ZVN0cmluZz1GLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3ZhciBWZT10aGlzLmxlbmd0aDtyZXR1cm4gMD09PVZlPyIiOjA9PT1hcmd1bWVudHMubGVuZ3RoP3godGhpcywwLFZlKTppZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LEYucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbihW''@;'; put 'put ''ZSl7aWYoIUYuaXNCdWZmZXIoVmUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIiKTtyZXR1cm4gdGhpcz09PVZlfHwwPT09Ri5jb21wYXJlKHRoaXMsVmUpfSxGLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7dmFyIFZlPSIiLGtlPVguSU5TUEVD''@;'; put 'put ''VF9NQVhfQllURVM7cmV0dXJuIFZlPXRoaXMudG9TdHJpbmcoImhleCIsMCxrZSkucmVwbGFjZSgvKC57Mn0pL2csIiQxICIpLnRyaW0oKSx0aGlzLmxlbmd0aD5rZSYmKFZlKz0iIC4uLiAiKSwiPEJ1ZmZlciAiK1ZlKyI+In0sZyYmKEYucHJvdG90eXBlW2ddPUYucHJvdG90eXBlLmluc3Bl''@;'; put 'put ''Y3QpLEYucHJvdG90eXBlLmNvbXBhcmU9ZnVuY3Rpb24oVmUsa2UsQWUsX3QsbnQpe2lmKERlKFZlLFVpbnQ4QXJyYXkpJiYoVmU9Ri5mcm9tKFZlLFZlLm9mZnNldCxWZS5ieXRlTGVuZ3RoKSksIUYuaXNCdWZmZXIoVmUpKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAidGFyZ2V0IiBhcmd1''@;'; put 'put ''bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIEJ1ZmZlciBvciBVaW50OEFycmF5LiBSZWNlaXZlZCB0eXBlICcrdHlwZW9mIFZlKTtpZih2b2lkIDA9PT1rZSYmKGtlPTApLHZvaWQgMD09PUFlJiYoQWU9VmU/VmUubGVuZ3RoOjApLHZvaWQgMD09PV90JiYoX3Q9MCksdm9pZCAwPT09bnQmJihu''@;'; put 'put ''dD10aGlzLmxlbmd0aCksa2U8MHx8QWU+VmUubGVuZ3RofHxfdDwwfHxudD50aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigib3V0IG9mIHJhbmdlIGluZGV4Iik7aWYoX3Q+PW50JiZrZT49QWUpcmV0dXJuIDA7aWYoX3Q+PW50KXJldHVybi0xO2lmKGtlPj1BZSlyZXR1cm4gMTtp''@;'; put 'put ''Zih0aGlzPT09VmUpcmV0dXJuIDA7Zm9yKHZhciBRZT0obnQ+Pj49MCktKF90Pj4+PTApLHVuPShBZT4+Pj0wKS0oa2U+Pj49MCkseXQ9TWF0aC5taW4oUWUsdW4pLE10PXRoaXMuc2xpY2UoX3QsbnQpLER0PVZlLnNsaWNlKGtlLEFlKSxpdD0wO2l0PHl0OysraXQpaWYoTXRbaXRdIT09RHRb''@;'; put 'put ''aXRdKXtRZT1NdFtpdF0sdW49RHRbaXRdO2JyZWFrfXJldHVybiBRZTx1bj8tMTp1bjxRZT8xOjB9LEYucHJvdG90eXBlLmluY2x1ZGVzPWZ1bmN0aW9uKFZlLGtlLEFlKXtyZXR1cm4tMSE9PXRoaXMuaW5kZXhPZihWZSxrZSxBZSl9LEYucHJvdG90eXBlLmluZGV4T2Y9ZnVuY3Rpb24oVmUs''@;'; put 'put ''a2UsQWUpe3JldHVybiBtZSh0aGlzLFZlLGtlLEFlLCEwKX0sRi5wcm90b3R5cGUubGFzdEluZGV4T2Y9ZnVuY3Rpb24oVmUsa2UsQWUpe3JldHVybiBtZSh0aGlzLFZlLGtlLEFlLCExKX0sRi5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oVmUsa2UsQWUsX3Qpe2lmKHZvaWQgMD09PWtlKV90''@;'; put 'put ''PSJ1dGY4IixBZT10aGlzLmxlbmd0aCxrZT0wO2Vsc2UgaWYodm9pZCAwPT09QWUmJiJzdHJpbmciPT10eXBlb2Yga2UpX3Q9a2UsQWU9dGhpcy5sZW5ndGgsa2U9MDtlbHNle2lmKCFpc0Zpbml0ZShrZSkpdGhyb3cgbmV3IEVycm9yKCJCdWZmZXIud3JpdGUoc3RyaW5nLCBlbmNvZGluZywg''@;'; put 'put ''b2Zmc2V0WywgbGVuZ3RoXSkgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCIpO2tlPj4+PTAsaXNGaW5pdGUoQWUpPyhBZT4+Pj0wLHZvaWQgMD09PV90JiYoX3Q9InV0ZjgiKSk6KF90PUFlLEFlPXZvaWQgMCl9dmFyIG50PXRoaXMubGVuZ3RoLWtlO2lmKCh2b2lkIDA9PT1BZXx8QWU+bnQpJiYo''@;'; put 'put ''QWU9bnQpLFZlLmxlbmd0aD4wJiYoQWU8MHx8a2U8MCl8fGtlPnRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJBdHRlbXB0IHRvIHdyaXRlIG91dHNpZGUgYnVmZmVyIGJvdW5kcyIpO190fHwoX3Q9InV0ZjgiKTtmb3IodmFyIFFlPSExOzspc3dpdGNoKF90KXtjYXNlImhleCI6''@;'; put 'put ''cmV0dXJuIFRlKHRoaXMsVmUsa2UsQWUpO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIFNlKHRoaXMsVmUsa2UsQWUpO2Nhc2UiYXNjaWkiOmNhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIGplKHRoaXMsVmUsa2UsQWUpO2Nhc2UiYmFzZTY0IjpyZXR1cm4gVih0aGlzLFZl''@;'; put 'put ''LGtlLEFlKTtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIHAodGhpcyxWZSxrZSxBZSk7ZGVmYXVsdDppZihRZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK190KTtfdD0oIiIrX3QpLnRvTG93ZXJDYXNl''@;'; put 'put ''KCksUWU9ITB9fSxGLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiQnVmZmVyIixkYXRhOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuX2Fycnx8dGhpcywwKX19O3ZhciBDPTQwOTY7ZnVuY3Rpb24gSChJZSxWZSxrZSl7dmFyIEFlPSIiO2tlPU1hdGgu''@;'; put 'put ''bWluKEllLmxlbmd0aCxrZSk7Zm9yKHZhciBfdD1WZTtfdDxrZTsrK190KUFlKz1TdHJpbmcuZnJvbUNoYXJDb2RlKDEyNyZJZVtfdF0pO3JldHVybiBBZX1mdW5jdGlvbiBqKEllLFZlLGtlKXt2YXIgQWU9IiI7a2U9TWF0aC5taW4oSWUubGVuZ3RoLGtlKTtmb3IodmFyIF90PVZlO190PGtl''@;'; put 'put ''OysrX3QpQWUrPVN0cmluZy5mcm9tQ2hhckNvZGUoSWVbX3RdKTtyZXR1cm4gQWV9ZnVuY3Rpb24gRShJZSxWZSxrZSl7dmFyIEFlPUllLmxlbmd0aDsoIVZlfHxWZTwwKSYmKFZlPTApLCgha2V8fGtlPDB8fGtlPkFlKSYmKGtlPUFlKTtmb3IodmFyIF90PSIiLG50PVZlO250PGtlOysrbnQp''@;'; put 'put ''X3QrPU9lW0llW250XV07cmV0dXJuIF90fWZ1bmN0aW9uIG0oSWUsVmUsa2Upe2Zvcih2YXIgQWU9SWUuc2xpY2UoVmUsa2UpLF90PSIiLG50PTA7bnQ8QWUubGVuZ3RoLTE7bnQrPTIpX3QrPVN0cmluZy5mcm9tQ2hhckNvZGUoQWVbbnRdKzI1NipBZVtudCsxXSk7cmV0dXJuIF90fWZ1bmN0''@;'; put 'put ''aW9uIEEoSWUsVmUsa2Upe2lmKEllJTEhPTB8fEllPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm9mZnNldCBpcyBub3QgdWludCIpO2lmKEllK1ZlPmtlKXRocm93IG5ldyBSYW5nZUVycm9yKCJUcnlpbmcgdG8gYWNjZXNzIGJleW9uZCBidWZmZXIgbGVuZ3RoIil9ZnVuY3Rpb24gYWUoSWUs''@;'; put 'put ''VmUsa2UsQWUsX3QsbnQpe2lmKCFGLmlzQnVmZmVyKEllKSl0aHJvdyBuZXcgVHlwZUVycm9yKCciYnVmZmVyIiBhcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIGluc3RhbmNlJyk7aWYoVmU+X3R8fFZlPG50KXRocm93IG5ldyBSYW5nZUVycm9yKCcidmFsdWUiIGFyZ3VtZW50IGlzIG91dCBv''@;'; put 'put ''ZiBib3VuZHMnKTtpZihrZStBZT5JZS5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpfWZ1bmN0aW9uIHRlKEllLFZlLGtlLEFlLF90LG50KXtpZihrZStBZT5JZS5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIp''@;'; put 'put ''O2lmKGtlPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpfWZ1bmN0aW9uIHNlKEllLFZlLGtlLEFlLF90KXtyZXR1cm4gVmU9K1ZlLGtlPj4+PTAsX3R8fHRlKEllLDAsa2UsNCksXy53cml0ZShJZSxWZSxrZSxBZSwyMyw0KSxrZSs0fWZ1bmN0aW9uIHdlKEll''@;'; put 'put ''LFZlLGtlLEFlLF90KXtyZXR1cm4gVmU9K1ZlLGtlPj4+PTAsX3R8fHRlKEllLDAsa2UsOCksXy53cml0ZShJZSxWZSxrZSxBZSw1Miw4KSxrZSs4fUYucHJvdG90eXBlLnNsaWNlPWZ1bmN0aW9uKFZlLGtlKXt2YXIgQWU9dGhpcy5sZW5ndGg7KFZlPX5+VmUpPDA/KFZlKz1BZSk8MCYmKFZl''@;'; put 'put ''PTApOlZlPkFlJiYoVmU9QWUpLChrZT12b2lkIDA9PT1rZT9BZTp+fmtlKTwwPyhrZSs9QWUpPDAmJihrZT0wKTprZT5BZSYmKGtlPUFlKSxrZTxWZSYmKGtlPVZlKTt2YXIgX3Q9dGhpcy5zdWJhcnJheShWZSxrZSk7cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZihfdCxGLnByb3RvdHlw''@;'; put 'put ''ZSksX3R9LEYucHJvdG90eXBlLnJlYWRVaW50TEU9Ri5wcm90b3R5cGUucmVhZFVJbnRMRT1mdW5jdGlvbihWZSxrZSxBZSl7VmU+Pj49MCxrZT4+Pj0wLEFlfHxBKFZlLGtlLHRoaXMubGVuZ3RoKTtmb3IodmFyIF90PXRoaXNbVmVdLG50PTEsUWU9MDsrK1FlPGtlJiYobnQqPTI1Nik7KV90''@;'; put 'put ''Kz10aGlzW1ZlK1FlXSpudDtyZXR1cm4gX3R9LEYucHJvdG90eXBlLnJlYWRVaW50QkU9Ri5wcm90b3R5cGUucmVhZFVJbnRCRT1mdW5jdGlvbihWZSxrZSxBZSl7VmU+Pj49MCxrZT4+Pj0wLEFlfHxBKFZlLGtlLHRoaXMubGVuZ3RoKTtmb3IodmFyIF90PXRoaXNbVmUrLS1rZV0sbnQ9MTtr''@;'; put 'put ''ZT4wJiYobnQqPTI1Nik7KV90Kz10aGlzW1ZlKy0ta2VdKm50O3JldHVybiBfdH0sRi5wcm90b3R5cGUucmVhZFVpbnQ4PUYucHJvdG90eXBlLnJlYWRVSW50OD1mdW5jdGlvbihWZSxrZSl7cmV0dXJuIFZlPj4+PTAsa2V8fEEoVmUsMSx0aGlzLmxlbmd0aCksdGhpc1tWZV19LEYucHJvdG90''@;'; put 'put ''eXBlLnJlYWRVaW50MTZMRT1GLnByb3RvdHlwZS5yZWFkVUludDE2TEU9ZnVuY3Rpb24oVmUsa2Upe3JldHVybiBWZT4+Pj0wLGtlfHxBKFZlLDIsdGhpcy5sZW5ndGgpLHRoaXNbVmVdfHRoaXNbVmUrMV08PDh9LEYucHJvdG90eXBlLnJlYWRVaW50MTZCRT1GLnByb3RvdHlwZS5yZWFkVUlu''@;'; put 'put ''dDE2QkU9ZnVuY3Rpb24oVmUsa2Upe3JldHVybiBWZT4+Pj0wLGtlfHxBKFZlLDIsdGhpcy5sZW5ndGgpLHRoaXNbVmVdPDw4fHRoaXNbVmUrMV19LEYucHJvdG90eXBlLnJlYWRVaW50MzJMRT1GLnByb3RvdHlwZS5yZWFkVUludDMyTEU9ZnVuY3Rpb24oVmUsa2Upe3JldHVybiBWZT4+Pj0w''@;'; put 'put ''LGtlfHxBKFZlLDQsdGhpcy5sZW5ndGgpLCh0aGlzW1ZlXXx0aGlzW1ZlKzFdPDw4fHRoaXNbVmUrMl08PDE2KSsxNjc3NzIxNip0aGlzW1ZlKzNdfSxGLnByb3RvdHlwZS5yZWFkVWludDMyQkU9Ri5wcm90b3R5cGUucmVhZFVJbnQzMkJFPWZ1bmN0aW9uKFZlLGtlKXtyZXR1cm4gVmU+Pj49''@;'; put 'put ''MCxrZXx8QShWZSw0LHRoaXMubGVuZ3RoKSwxNjc3NzIxNip0aGlzW1ZlXSsodGhpc1tWZSsxXTw8MTZ8dGhpc1tWZSsyXTw8OHx0aGlzW1ZlKzNdKX0sRi5wcm90b3R5cGUucmVhZEludExFPWZ1bmN0aW9uKFZlLGtlLEFlKXtWZT4+Pj0wLGtlPj4+PTAsQWV8fEEoVmUsa2UsdGhpcy5sZW5n''@;'; put 'put ''dGgpO2Zvcih2YXIgX3Q9dGhpc1tWZV0sbnQ9MSxRZT0wOysrUWU8a2UmJihudCo9MjU2KTspX3QrPXRoaXNbVmUrUWVdKm50O3JldHVybiBfdD49KG50Kj0xMjgpJiYoX3QtPU1hdGgucG93KDIsOCprZSkpLF90fSxGLnByb3RvdHlwZS5yZWFkSW50QkU9ZnVuY3Rpb24oVmUsa2UsQWUpe1Zl''@;'; put 'put ''Pj4+PTAsa2U+Pj49MCxBZXx8QShWZSxrZSx0aGlzLmxlbmd0aCk7Zm9yKHZhciBfdD1rZSxudD0xLFFlPXRoaXNbVmUrLS1fdF07X3Q+MCYmKG50Kj0yNTYpOylRZSs9dGhpc1tWZSstLV90XSpudDtyZXR1cm4gUWU+PShudCo9MTI4KSYmKFFlLT1NYXRoLnBvdygyLDgqa2UpKSxRZX0sRi5w''@;'; put 'put ''cm90b3R5cGUucmVhZEludDg9ZnVuY3Rpb24oVmUsa2Upe3JldHVybiBWZT4+Pj0wLGtlfHxBKFZlLDEsdGhpcy5sZW5ndGgpLDEyOCZ0aGlzW1ZlXT8tMSooMjU1LXRoaXNbVmVdKzEpOnRoaXNbVmVdfSxGLnByb3RvdHlwZS5yZWFkSW50MTZMRT1mdW5jdGlvbihWZSxrZSl7VmU+Pj49MCxr''@;'; put 'put ''ZXx8QShWZSwyLHRoaXMubGVuZ3RoKTt2YXIgQWU9dGhpc1tWZV18dGhpc1tWZSsxXTw8ODtyZXR1cm4gMzI3NjgmQWU/NDI5NDkwMTc2MHxBZTpBZX0sRi5wcm90b3R5cGUucmVhZEludDE2QkU9ZnVuY3Rpb24oVmUsa2Upe1ZlPj4+PTAsa2V8fEEoVmUsMix0aGlzLmxlbmd0aCk7dmFyIEFl''@;'; put 'put ''PXRoaXNbVmUrMV18dGhpc1tWZV08PDg7cmV0dXJuIDMyNzY4JkFlPzQyOTQ5MDE3NjB8QWU6QWV9LEYucHJvdG90eXBlLnJlYWRJbnQzMkxFPWZ1bmN0aW9uKFZlLGtlKXtyZXR1cm4gVmU+Pj49MCxrZXx8QShWZSw0LHRoaXMubGVuZ3RoKSx0aGlzW1ZlXXx0aGlzW1ZlKzFdPDw4fHRoaXNb''@;'; put 'put ''VmUrMl08PDE2fHRoaXNbVmUrM108PDI0fSxGLnByb3RvdHlwZS5yZWFkSW50MzJCRT1mdW5jdGlvbihWZSxrZSl7cmV0dXJuIFZlPj4+PTAsa2V8fEEoVmUsNCx0aGlzLmxlbmd0aCksdGhpc1tWZV08PDI0fHRoaXNbVmUrMV08PDE2fHRoaXNbVmUrMl08PDh8dGhpc1tWZSszXX0sRi5wcm90''@;'; put 'put ''b3R5cGUucmVhZEZsb2F0TEU9ZnVuY3Rpb24oVmUsa2Upe3JldHVybiBWZT4+Pj0wLGtlfHxBKFZlLDQsdGhpcy5sZW5ndGgpLF8ucmVhZCh0aGlzLFZlLCEwLDIzLDQpfSxGLnByb3RvdHlwZS5yZWFkRmxvYXRCRT1mdW5jdGlvbihWZSxrZSl7cmV0dXJuIFZlPj4+PTAsa2V8fEEoVmUsNCx0''@;'; put 'put ''aGlzLmxlbmd0aCksXy5yZWFkKHRoaXMsVmUsITEsMjMsNCl9LEYucHJvdG90eXBlLnJlYWREb3VibGVMRT1mdW5jdGlvbihWZSxrZSl7cmV0dXJuIFZlPj4+PTAsa2V8fEEoVmUsOCx0aGlzLmxlbmd0aCksXy5yZWFkKHRoaXMsVmUsITAsNTIsOCl9LEYucHJvdG90eXBlLnJlYWREb3VibGVC''@;'; put 'put ''RT1mdW5jdGlvbihWZSxrZSl7cmV0dXJuIFZlPj4+PTAsa2V8fEEoVmUsOCx0aGlzLmxlbmd0aCksXy5yZWFkKHRoaXMsVmUsITEsNTIsOCl9LEYucHJvdG90eXBlLndyaXRlVWludExFPUYucHJvdG90eXBlLndyaXRlVUludExFPWZ1bmN0aW9uKFZlLGtlLEFlLF90KXtWZT0rVmUsa2U+Pj49''@;'; put 'put ''MCxBZT4+Pj0wLF90fHxhZSh0aGlzLFZlLGtlLEFlLE1hdGgucG93KDIsOCpBZSktMSwwKTt2YXIgUWU9MSx1bj0wO2Zvcih0aGlzW2tlXT0yNTUmVmU7Kyt1bjxBZSYmKFFlKj0yNTYpOyl0aGlzW2tlK3VuXT1WZS9RZSYyNTU7cmV0dXJuIGtlK0FlfSxGLnByb3RvdHlwZS53cml0ZVVpbnRC''@;'; put 'put ''RT1GLnByb3RvdHlwZS53cml0ZVVJbnRCRT1mdW5jdGlvbihWZSxrZSxBZSxfdCl7VmU9K1ZlLGtlPj4+PTAsQWU+Pj49MCxfdHx8YWUodGhpcyxWZSxrZSxBZSxNYXRoLnBvdygyLDgqQWUpLTEsMCk7dmFyIFFlPUFlLTEsdW49MTtmb3IodGhpc1trZStRZV09MjU1JlZlOy0tUWU+PTAmJih1''@;'; put 'put ''bio9MjU2KTspdGhpc1trZStRZV09VmUvdW4mMjU1O3JldHVybiBrZStBZX0sRi5wcm90b3R5cGUud3JpdGVVaW50OD1GLnByb3RvdHlwZS53cml0ZVVJbnQ4PWZ1bmN0aW9uKFZlLGtlLEFlKXtyZXR1cm4gVmU9K1ZlLGtlPj4+PTAsQWV8fGFlKHRoaXMsVmUsa2UsMSwyNTUsMCksdGhpc1tr''@;'; put 'put ''ZV09MjU1JlZlLGtlKzF9LEYucHJvdG90eXBlLndyaXRlVWludDE2TEU9Ri5wcm90b3R5cGUud3JpdGVVSW50MTZMRT1mdW5jdGlvbihWZSxrZSxBZSl7cmV0dXJuIFZlPStWZSxrZT4+Pj0wLEFlfHxhZSh0aGlzLFZlLGtlLDIsNjU1MzUsMCksdGhpc1trZV09MjU1JlZlLHRoaXNba2UrMV09''@;'; put 'put ''VmU+Pj44LGtlKzJ9LEYucHJvdG90eXBlLndyaXRlVWludDE2QkU9Ri5wcm90b3R5cGUud3JpdGVVSW50MTZCRT1mdW5jdGlvbihWZSxrZSxBZSl7cmV0dXJuIFZlPStWZSxrZT4+Pj0wLEFlfHxhZSh0aGlzLFZlLGtlLDIsNjU1MzUsMCksdGhpc1trZV09VmU+Pj44LHRoaXNba2UrMV09MjU1''@;'; put 'put ''JlZlLGtlKzJ9LEYucHJvdG90eXBlLndyaXRlVWludDMyTEU9Ri5wcm90b3R5cGUud3JpdGVVSW50MzJMRT1mdW5jdGlvbihWZSxrZSxBZSl7cmV0dXJuIFZlPStWZSxrZT4+Pj0wLEFlfHxhZSh0aGlzLFZlLGtlLDQsNDI5NDk2NzI5NSwwKSx0aGlzW2tlKzNdPVZlPj4+MjQsdGhpc1trZSsy''@;'; put 'put ''XT1WZT4+PjE2LHRoaXNba2UrMV09VmU+Pj44LHRoaXNba2VdPTI1NSZWZSxrZSs0fSxGLnByb3RvdHlwZS53cml0ZVVpbnQzMkJFPUYucHJvdG90eXBlLndyaXRlVUludDMyQkU9ZnVuY3Rpb24oVmUsa2UsQWUpe3JldHVybiBWZT0rVmUsa2U+Pj49MCxBZXx8YWUodGhpcyxWZSxrZSw0LDQy''@;'; put 'put ''OTQ5NjcyOTUsMCksdGhpc1trZV09VmU+Pj4yNCx0aGlzW2tlKzFdPVZlPj4+MTYsdGhpc1trZSsyXT1WZT4+PjgsdGhpc1trZSszXT0yNTUmVmUsa2UrNH0sRi5wcm90b3R5cGUud3JpdGVJbnRMRT1mdW5jdGlvbihWZSxrZSxBZSxfdCl7aWYoVmU9K1ZlLGtlPj4+PTAsIV90KXt2YXIgbnQ9''@;'; put 'put ''TWF0aC5wb3coMiw4KkFlLTEpO2FlKHRoaXMsVmUsa2UsQWUsbnQtMSwtbnQpfXZhciBRZT0wLHVuPTEseXQ9MDtmb3IodGhpc1trZV09MjU1JlZlOysrUWU8QWUmJih1bio9MjU2KTspVmU8MCYmMD09PXl0JiYwIT09dGhpc1trZStRZS0xXSYmKHl0PTEpLHRoaXNba2UrUWVdPShWZS91bnww''@;'; put 'put ''KS15dCYyNTU7cmV0dXJuIGtlK0FlfSxGLnByb3RvdHlwZS53cml0ZUludEJFPWZ1bmN0aW9uKFZlLGtlLEFlLF90KXtpZihWZT0rVmUsa2U+Pj49MCwhX3Qpe3ZhciBudD1NYXRoLnBvdygyLDgqQWUtMSk7YWUodGhpcyxWZSxrZSxBZSxudC0xLC1udCl9dmFyIFFlPUFlLTEsdW49MSx5dD0w''@;'; put 'put ''O2Zvcih0aGlzW2tlK1FlXT0yNTUmVmU7LS1RZT49MCYmKHVuKj0yNTYpOylWZTwwJiYwPT09eXQmJjAhPT10aGlzW2tlK1FlKzFdJiYoeXQ9MSksdGhpc1trZStRZV09KFZlL3VufDApLXl0JjI1NTtyZXR1cm4ga2UrQWV9LEYucHJvdG90eXBlLndyaXRlSW50OD1mdW5jdGlvbihWZSxrZSxB''@;'; put 'put ''ZSl7cmV0dXJuIFZlPStWZSxrZT4+Pj0wLEFlfHxhZSh0aGlzLFZlLGtlLDEsMTI3LC0xMjgpLFZlPDAmJihWZT0yNTUrVmUrMSksdGhpc1trZV09MjU1JlZlLGtlKzF9LEYucHJvdG90eXBlLndyaXRlSW50MTZMRT1mdW5jdGlvbihWZSxrZSxBZSl7cmV0dXJuIFZlPStWZSxrZT4+Pj0wLEFl''@;'; put 'put ''fHxhZSh0aGlzLFZlLGtlLDIsMzI3NjcsLTMyNzY4KSx0aGlzW2tlXT0yNTUmVmUsdGhpc1trZSsxXT1WZT4+Pjgsa2UrMn0sRi5wcm90b3R5cGUud3JpdGVJbnQxNkJFPWZ1bmN0aW9uKFZlLGtlLEFlKXtyZXR1cm4gVmU9K1ZlLGtlPj4+PTAsQWV8fGFlKHRoaXMsVmUsa2UsMiwzMjc2Nywt''@;'; put 'put ''MzI3NjgpLHRoaXNba2VdPVZlPj4+OCx0aGlzW2tlKzFdPTI1NSZWZSxrZSsyfSxGLnByb3RvdHlwZS53cml0ZUludDMyTEU9ZnVuY3Rpb24oVmUsa2UsQWUpe3JldHVybiBWZT0rVmUsa2U+Pj49MCxBZXx8YWUodGhpcyxWZSxrZSw0LDIxNDc0ODM2NDcsLTIxNDc0ODM2NDgpLHRoaXNba2Vd''@;'; put 'put ''PTI1NSZWZSx0aGlzW2tlKzFdPVZlPj4+OCx0aGlzW2tlKzJdPVZlPj4+MTYsdGhpc1trZSszXT1WZT4+PjI0LGtlKzR9LEYucHJvdG90eXBlLndyaXRlSW50MzJCRT1mdW5jdGlvbihWZSxrZSxBZSl7cmV0dXJuIFZlPStWZSxrZT4+Pj0wLEFlfHxhZSh0aGlzLFZlLGtlLDQsMjE0NzQ4MzY0''@;'; put 'put ''NywtMjE0NzQ4MzY0OCksVmU8MCYmKFZlPTQyOTQ5NjcyOTUrVmUrMSksdGhpc1trZV09VmU+Pj4yNCx0aGlzW2tlKzFdPVZlPj4+MTYsdGhpc1trZSsyXT1WZT4+PjgsdGhpc1trZSszXT0yNTUmVmUsa2UrNH0sRi5wcm90b3R5cGUud3JpdGVGbG9hdExFPWZ1bmN0aW9uKFZlLGtlLEFlKXty''@;'; put 'put ''ZXR1cm4gc2UodGhpcyxWZSxrZSwhMCxBZSl9LEYucHJvdG90eXBlLndyaXRlRmxvYXRCRT1mdW5jdGlvbihWZSxrZSxBZSl7cmV0dXJuIHNlKHRoaXMsVmUsa2UsITEsQWUpfSxGLnByb3RvdHlwZS53cml0ZURvdWJsZUxFPWZ1bmN0aW9uKFZlLGtlLEFlKXtyZXR1cm4gd2UodGhpcyxWZSxr''@;'; put 'put ''ZSwhMCxBZSl9LEYucHJvdG90eXBlLndyaXRlRG91YmxlQkU9ZnVuY3Rpb24oVmUsa2UsQWUpe3JldHVybiB3ZSh0aGlzLFZlLGtlLCExLEFlKX0sRi5wcm90b3R5cGUuY29weT1mdW5jdGlvbihWZSxrZSxBZSxfdCl7aWYoIUYuaXNCdWZmZXIoVmUpKXRocm93IG5ldyBUeXBlRXJyb3IoImFy''@;'; put 'put ''Z3VtZW50IHNob3VsZCBiZSBhIEJ1ZmZlciIpO2lmKEFlfHwoQWU9MCksIV90JiYwIT09X3QmJihfdD10aGlzLmxlbmd0aCksa2U+PVZlLmxlbmd0aCYmKGtlPVZlLmxlbmd0aCksa2V8fChrZT0wKSxfdD4wJiZfdDxBZSYmKF90PUFlKSxfdD09PUFlfHwwPT09VmUubGVuZ3RofHwwPT09dGhp''@;'; put 'put ''cy5sZW5ndGgpcmV0dXJuIDA7aWYoa2U8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigidGFyZ2V0U3RhcnQgb3V0IG9mIGJvdW5kcyIpO2lmKEFlPDB8fEFlPj10aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIik7aWYoX3Q8MCl0aHJvdyBuZXcgUmFu''@;'; put 'put ''Z2VFcnJvcigic291cmNlRW5kIG91dCBvZiBib3VuZHMiKTtfdD50aGlzLmxlbmd0aCYmKF90PXRoaXMubGVuZ3RoKSxWZS5sZW5ndGgta2U8X3QtQWUmJihfdD1WZS5sZW5ndGgta2UrQWUpO3ZhciBudD1fdC1BZTtyZXR1cm4gdGhpcz09PVZlJiYiZnVuY3Rpb24iPT10eXBlb2YgVWludDhB''@;'; put 'put ''cnJheS5wcm90b3R5cGUuY29weVdpdGhpbj90aGlzLmNvcHlXaXRoaW4oa2UsQWUsX3QpOlVpbnQ4QXJyYXkucHJvdG90eXBlLnNldC5jYWxsKFZlLHRoaXMuc3ViYXJyYXkoQWUsX3QpLGtlKSxudH0sRi5wcm90b3R5cGUuZmlsbD1mdW5jdGlvbihWZSxrZSxBZSxfdCl7aWYoInN0cmluZyI9''@;'; put 'put ''PXR5cGVvZiBWZSl7aWYoInN0cmluZyI9PXR5cGVvZiBrZT8oX3Q9a2Usa2U9MCxBZT10aGlzLmxlbmd0aCk6InN0cmluZyI9PXR5cGVvZiBBZSYmKF90PUFlLEFlPXRoaXMubGVuZ3RoKSx2b2lkIDAhPT1fdCYmInN0cmluZyIhPXR5cGVvZiBfdCl0aHJvdyBuZXcgVHlwZUVycm9yKCJlbmNv''@;'; put 'put ''ZGluZyBtdXN0IGJlIGEgc3RyaW5nIik7aWYoInN0cmluZyI9PXR5cGVvZiBfdCYmIUYuaXNFbmNvZGluZyhfdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIitfdCk7aWYoMT09PVZlLmxlbmd0aCl7dmFyIG50PVZlLmNoYXJDb2RlQXQoMCk7KCJ1dGY4Ij09PV90''@;'; put 'put ''JiZudDwxMjh8fCJsYXRpbjEiPT09X3QpJiYoVmU9bnQpfX1lbHNlIm51bWJlciI9PXR5cGVvZiBWZT9WZSY9MjU1OiJib29sZWFuIj09dHlwZW9mIFZlJiYoVmU9TnVtYmVyKFZlKSk7aWYoa2U8MHx8dGhpcy5sZW5ndGg8a2V8fHRoaXMubGVuZ3RoPEFlKXRocm93IG5ldyBSYW5nZUVycm9y''@;'; put 'put ''KCJPdXQgb2YgcmFuZ2UgaW5kZXgiKTtpZihBZTw9a2UpcmV0dXJuIHRoaXM7dmFyIFFlO2lmKGtlPj4+PTAsQWU9dm9pZCAwPT09QWU/dGhpcy5sZW5ndGg6QWU+Pj4wLFZlfHwoVmU9MCksIm51bWJlciI9PXR5cGVvZiBWZSlmb3IoUWU9a2U7UWU8QWU7KytRZSl0aGlzW1FlXT1WZTtlbHNl''@;'; put 'put ''e3ZhciB1bj1GLmlzQnVmZmVyKFZlKT9WZTpGLmZyb20oVmUsX3QpLHl0PXVuLmxlbmd0aDtpZigwPT09eXQpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIHZhbHVlICInK1ZlKyciIGlzIGludmFsaWQgZm9yIGFyZ3VtZW50ICJ2YWx1ZSInKTtmb3IoUWU9MDtRZTxBZS1rZTsrK1FlKXRoaXNb''@;'; put 'put ''UWUra2VdPXVuW1FlJXl0XX1yZXR1cm4gdGhpc307dmFyIFVlPS9bXisvMC05QS1aYS16LV9dL2c7ZnVuY3Rpb24gb3QoSWUsVmUpe1ZlPVZlfHwxLzA7Zm9yKHZhciBrZSxBZT1JZS5sZW5ndGgsX3Q9bnVsbCxudD1bXSxRZT0wO1FlPEFlOysrUWUpe2lmKChrZT1JZS5jaGFyQ29kZUF0KFFl''@;'; put 'put ''KSk+NTUyOTUmJmtlPDU3MzQ0KXtpZighX3Qpe2lmKGtlPjU2MzE5KXsoVmUtPTMpPi0xJiZudC5wdXNoKDIzOSwxOTEsMTg5KTtjb250aW51ZX1pZihRZSsxPT09QWUpeyhWZS09Myk+LTEmJm50LnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfV90PWtlO2NvbnRpbnVlfWlmKGtlPDU2MzIw''@;'; put 'put ''KXsoVmUtPTMpPi0xJiZudC5wdXNoKDIzOSwxOTEsMTg5KSxfdD1rZTtjb250aW51ZX1rZT02NTUzNisoX3QtNTUyOTY8PDEwfGtlLTU2MzIwKX1lbHNlIF90JiYoVmUtPTMpPi0xJiZudC5wdXNoKDIzOSwxOTEsMTg5KTtpZihfdD1udWxsLGtlPDEyOCl7aWYoKFZlLT0xKTwwKWJyZWFrO250''@;'; put 'put ''LnB1c2goa2UpfWVsc2UgaWYoa2U8MjA0OCl7aWYoKFZlLT0yKTwwKWJyZWFrO250LnB1c2goa2U+PjZ8MTkyLDYzJmtlfDEyOCl9ZWxzZSBpZihrZTw2NTUzNil7aWYoKFZlLT0zKTwwKWJyZWFrO250LnB1c2goa2U+PjEyfDIyNCxrZT4+NiY2M3wxMjgsNjMma2V8MTI4KX1lbHNle2lmKCEo''@;'; put 'put ''a2U8MTExNDExMikpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvZGUgcG9pbnQiKTtpZigoVmUtPTQpPDApYnJlYWs7bnQucHVzaChrZT4+MTh8MjQwLGtlPj4xMiY2M3wxMjgsa2U+PjYmNjN8MTI4LDYzJmtlfDEyOCl9fXJldHVybiBudH1mdW5jdGlvbiBYZShJZSl7cmV0dXJuIEkudG9C''@;'; put 'put ''eXRlQXJyYXkoZnVuY3Rpb24gSmUoSWUpe2lmKChJZT0oSWU9SWUuc3BsaXQoIj0iKVswXSkudHJpbSgpLnJlcGxhY2UoVWUsIiIpKS5sZW5ndGg8MilyZXR1cm4iIjtmb3IoO0llLmxlbmd0aCU0IT0wOylJZSs9Ij0iO3JldHVybiBJZX0oSWUpKX1mdW5jdGlvbiB6ZShJZSxWZSxrZSxBZSl7''@;'; put 'put ''Zm9yKHZhciBfdD0wO190PEFlJiYhKF90K2tlPj1WZS5sZW5ndGh8fF90Pj1JZS5sZW5ndGgpOysrX3QpVmVbX3Qra2VdPUllW190XTtyZXR1cm4gX3R9ZnVuY3Rpb24gRGUoSWUsVmUpe3JldHVybiBJZSBpbnN0YW5jZW9mIFZlfHxudWxsIT1JZSYmbnVsbCE9SWUuY29uc3RydWN0b3ImJm51''@;'; put 'put ''bGwhPUllLmNvbnN0cnVjdG9yLm5hbWUmJkllLmNvbnN0cnVjdG9yLm5hbWU9PT1WZS5uYW1lfWZ1bmN0aW9uIEZlKEllKXtyZXR1cm4gSWUhPUllfXZhciBPZT1mdW5jdGlvbigpe2Zvcih2YXIgSWU9IjAxMjM0NTY3ODlhYmNkZWYiLFZlPW5ldyBBcnJheSgyNTYpLGtlPTA7a2U8MTY7Kytr''@;'; put 'put ''ZSlmb3IodmFyIEFlPTE2KmtlLF90PTA7X3Q8MTY7KytfdClWZVtBZStfdF09SWVba2VdK0llW190XTtyZXR1cm4gVmV9KCl9LDMyNDc6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgyNzA1NCkuQnVmZmVyLF89eSg3MDQ1KS5UcmFuc2Zvcm0sZz15KDc4NDU0KS5JO2Z1bmN0aW9u''@;'; put 'put ''IHcoeil7Xy5jYWxsKHRoaXMpLHRoaXMuaGFzaE1vZGU9InN0cmluZyI9PXR5cGVvZiB6LHRoaXMuaGFzaE1vZGU/dGhpc1t6XT10aGlzLl9maW5hbE9yRGlnZXN0OnRoaXMuZmluYWw9dGhpcy5fZmluYWxPckRpZ2VzdCx0aGlzLl9maW5hbCYmKHRoaXMuX19maW5hbD10aGlzLl9maW5hbCx0''@;'; put 'put ''aGlzLl9maW5hbD1udWxsKSx0aGlzLl9kZWNvZGVyPW51bGwsdGhpcy5fZW5jb2Rpbmc9bnVsbH15KDcxOTkzKSh3LF8pO3ZhciBQPXR5cGVvZiBVaW50OEFycmF5PCJ1IixGPXR5cGVvZiBBcnJheUJ1ZmZlcjwidSImJnR5cGVvZiBVaW50OEFycmF5PCJ1IiYmQXJyYXlCdWZmZXIuaXNWaWV3''@;'; put 'put ''JiYoSS5wcm90b3R5cGUgaW5zdGFuY2VvZiBVaW50OEFycmF5fHxJLlRZUEVEX0FSUkFZX1NVUFBPUlQpO3cucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbih6LE4sTCl7dmFyIEs9ZnVuY3Rpb24gTyh6LE4pe2lmKHogaW5zdGFuY2VvZiBJKXJldHVybiB6O2lmKCJzdHJpbmciPT10eXBlb2Yg''@;'; put 'put ''eilyZXR1cm4gSS5mcm9tKHosTik7aWYoRiYmQXJyYXlCdWZmZXIuaXNWaWV3KHopKXtpZigwPT09ei5ieXRlTGVuZ3RoKXJldHVybiBJLmFsbG9jKDApO3ZhciBMPUkuZnJvbSh6LmJ1ZmZlcix6LmJ5dGVPZmZzZXQsei5ieXRlTGVuZ3RoKTtpZihMLmJ5dGVMZW5ndGg9PT16LmJ5dGVMZW5n''@;'; put 'put ''dGgpcmV0dXJuIEx9aWYoUCYmeiBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl8fEkuaXNCdWZmZXIoeikmJnouY29uc3RydWN0b3ImJiJmdW5jdGlvbiI9PXR5cGVvZiB6LmNvbnN0cnVjdG9yLmlzQnVmZmVyJiZ6LmNvbnN0cnVjdG9yLmlzQnVmZmVyKHopKXJldHVybiBJLmZyb20oeik7dGhyb3cg''@;'; put 'put ''bmV3IFR5cGVFcnJvcignVGhlICJkYXRhIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nIG9yIGFuIGluc3RhbmNlIG9mIEJ1ZmZlciwgVHlwZWRBcnJheSwgb3IgRGF0YVZpZXcuJyl9KHosTiksVT10aGlzLl91cGRhdGUoSyk7cmV0dXJuIHRoaXMuaGFzaE1vZGU/dGhpczooTCYm''@;'; put 'put ''KFU9dGhpcy5fdG9TdHJpbmcoVSxMKSksVSl9LHcucHJvdG90eXBlLnNldEF1dG9QYWRkaW5nPWZ1bmN0aW9uKCl7fSx3LnByb3RvdHlwZS5nZXRBdXRoVGFnPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJ0cnlpbmcgdG8gZ2V0IGF1dGggdGFnIGluIHVuc3VwcG9ydGVkIHN0YXRlIil9''@;'; put 'put ''LHcucHJvdG90eXBlLnNldEF1dGhUYWc9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoInRyeWluZyB0byBzZXQgYXV0aCB0YWcgaW4gdW5zdXBwb3J0ZWQgc3RhdGUiKX0sdy5wcm90b3R5cGUuc2V0QUFEPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJ0cnlpbmcgdG8gc2V0IGFhZCBp''@;'; put 'put ''biB1bnN1cHBvcnRlZCBzdGF0ZSIpfSx3LnByb3RvdHlwZS5fdHJhbnNmb3JtPWZ1bmN0aW9uKHosTixMKXt2YXIgSzt0cnl7dGhpcy5oYXNoTW9kZT90aGlzLl91cGRhdGUoeik6dGhpcy5wdXNoKHRoaXMuX3VwZGF0ZSh6KSl9Y2F0Y2goVSl7Sz1VfWZpbmFsbHl7TChLKX19LHcucHJvdG90''@;'; put 'put ''eXBlLl9mbHVzaD1mdW5jdGlvbih6KXt2YXIgTjt0cnl7dGhpcy5wdXNoKHRoaXMuX19maW5hbCgpKX1jYXRjaChMKXtOPUx9eihOKX0sdy5wcm90b3R5cGUuX2ZpbmFsT3JEaWdlc3Q9ZnVuY3Rpb24oeil7dmFyIE49dGhpcy5fX2ZpbmFsKCl8fEkuYWxsb2MoMCk7cmV0dXJuIHomJihOPXRo''@;'; put 'put ''aXMuX3RvU3RyaW5nKE4seiwhMCkpLE59LHcucHJvdG90eXBlLl90b1N0cmluZz1mdW5jdGlvbih6LE4sTCl7aWYodGhpcy5fZGVjb2Rlcnx8KHRoaXMuX2RlY29kZXI9bmV3IGcoTiksdGhpcy5fZW5jb2Rpbmc9TiksdGhpcy5fZW5jb2RpbmchPT1OKXRocm93IG5ldyBFcnJvcigiY2FuXHUy''@;'; put 'put ''MDE5dCBzd2l0Y2ggZW5jb2RpbmdzIik7dmFyIEs9dGhpcy5fZGVjb2Rlci53cml0ZSh6KTtyZXR1cm4gTCYmKEsrPXRoaXMuX2RlY29kZXIuZW5kKCkpLEt9LHVlLmV4cG9ydHM9d30sMjc2Mzc6KHVlLFgseSk9PntmdW5jdGlvbiBZKHEpe3JldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3Ry''@;'; put 'put ''aW5nLmNhbGwocSl9WC5pc0FycmF5PWZ1bmN0aW9uIEkocSl7cmV0dXJuIEFycmF5LmlzQXJyYXk/QXJyYXkuaXNBcnJheShxKToiW29iamVjdCBBcnJheV0iPT09WShxKX0sWC5pc0Jvb2xlYW49ZnVuY3Rpb24gXyhxKXtyZXR1cm4iYm9vbGVhbiI9PXR5cGVvZiBxfSxYLmlzTnVsbD1mdW5j''@;'; put 'put ''dGlvbiBnKHEpe3JldHVybiBudWxsPT09cX0sWC5pc051bGxPclVuZGVmaW5lZD1mdW5jdGlvbiBCKHEpe3JldHVybiBudWxsPT1xfSxYLmlzTnVtYmVyPWZ1bmN0aW9uIHcocSl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBxfSxYLmlzU3RyaW5nPWZ1bmN0aW9uIFAocSl7cmV0dXJuInN0cmlu''@;'; put 'put ''ZyI9PXR5cGVvZiBxfSxYLmlzU3ltYm9sPWZ1bmN0aW9uIEYocSl7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBxfSxYLmlzVW5kZWZpbmVkPWZ1bmN0aW9uIE8ocSl7cmV0dXJuIHZvaWQgMD09PXF9LFguaXNSZWdFeHA9ZnVuY3Rpb24geihxKXtyZXR1cm4iW29iamVjdCBSZWdFeHBdIj09PVko''@;'; put 'put ''cSl9LFguaXNPYmplY3Q9ZnVuY3Rpb24gTihxKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIHEmJm51bGwhPT1xfSxYLmlzRGF0ZT1mdW5jdGlvbiBMKHEpe3JldHVybiJbb2JqZWN0IERhdGVdIj09PVkocSl9LFguaXNFcnJvcj1mdW5jdGlvbiBLKHEpe3JldHVybiJbb2JqZWN0IEVycm9yXSI9''@;'; put 'put ''PT1ZKHEpfHxxIGluc3RhbmNlb2YgRXJyb3J9LFguaXNGdW5jdGlvbj1mdW5jdGlvbiBVKHEpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBxfSxYLmlzUHJpbWl0aXZlPWZ1bmN0aW9uIFcocSl7cmV0dXJuIG51bGw9PT1xfHwiYm9vbGVhbiI9PXR5cGVvZiBxfHwibnVtYmVyIj09dHlwZW9m''@;'; put 'put ''IHF8fCJzdHJpbmciPT10eXBlb2YgcXx8InN5bWJvbCI9PXR5cGVvZiBxfHx0eXBlb2YgcT4idSJ9LFguaXNCdWZmZXI9eSg4MzgzOCkuQnVmZmVyLmlzQnVmZmVyfSw4NzMwMzoodWUsWCx5KT0+e3ZhciBJPXkoOTA1MTgpLF89eSg4OTYwNik7dWUuZXhwb3J0cz1mdW5jdGlvbihGKXtyZXR1''@;'; put 'put ''cm4gbmV3IEIoRil9O3ZhciBnPXtzZWNwMjU2azE6e25hbWU6InNlY3AyNTZrMSIsYnl0ZUxlbmd0aDozMn0sc2VjcDIyNHIxOntuYW1lOiJwMjI0IixieXRlTGVuZ3RoOjI4fSxwcmltZTI1NnYxOntuYW1lOiJwMjU2IixieXRlTGVuZ3RoOjMyfSxwcmltZTE5MnYxOntuYW1lOiJwMTkyIixi''@;'; put 'put ''eXRlTGVuZ3RoOjI0fSxlZDI1NTE5OntuYW1lOiJlZDI1NTE5IixieXRlTGVuZ3RoOjMyfSxzZWNwMzg0cjE6e25hbWU6InAzODQiLGJ5dGVMZW5ndGg6NDh9LHNlY3A1MjFyMTp7bmFtZToicDUyMSIsYnl0ZUxlbmd0aDo2Nn19O2Z1bmN0aW9uIEIoUCl7dGhpcy5jdXJ2ZVR5cGU9Z1tQXSx0''@;'; put 'put ''aGlzLmN1cnZlVHlwZXx8KHRoaXMuY3VydmVUeXBlPXtuYW1lOlB9KSx0aGlzLmN1cnZlPW5ldyBJLmVjKHRoaXMuY3VydmVUeXBlLm5hbWUpLHRoaXMua2V5cz12b2lkIDB9ZnVuY3Rpb24gdyhQLEYsTyl7QXJyYXkuaXNBcnJheShQKXx8KFA9UC50b0FycmF5KCkpO3ZhciB6PW5ldyBCdWZm''@;'; put 'put ''ZXIoUCk7aWYoTyYmei5sZW5ndGg8Tyl7dmFyIE49bmV3IEJ1ZmZlcihPLXoubGVuZ3RoKTtOLmZpbGwoMCksej1CdWZmZXIuY29uY2F0KFtOLHpdKX1yZXR1cm4gRj96LnRvU3RyaW5nKEYpOnp9Zy5wMjI0PWcuc2VjcDIyNHIxLGcucDI1Nj1nLnNlY3AyNTZyMT1nLnByaW1lMjU2djEsZy5w''@;'; put 'put ''MTkyPWcuc2VjcDE5MnIxPWcucHJpbWUxOTJ2MSxnLnAzODQ9Zy5zZWNwMzg0cjEsZy5wNTIxPWcuc2VjcDUyMXIxLEIucHJvdG90eXBlLmdlbmVyYXRlS2V5cz1mdW5jdGlvbihQLEYpe3JldHVybiB0aGlzLmtleXM9dGhpcy5jdXJ2ZS5nZW5LZXlQYWlyKCksdGhpcy5nZXRQdWJsaWNLZXko''@;'; put 'put ''UCxGKX0sQi5wcm90b3R5cGUuY29tcHV0ZVNlY3JldD1mdW5jdGlvbihQLEYsTyl7cmV0dXJuIEY9Rnx8InV0ZjgiLEJ1ZmZlci5pc0J1ZmZlcihQKXx8KFA9bmV3IEJ1ZmZlcihQLEYpKSx3KHRoaXMuY3VydmUua2V5RnJvbVB1YmxpYyhQKS5nZXRQdWJsaWMoKS5tdWwodGhpcy5rZXlzLmdl''@;'; put 'put ''dFByaXZhdGUoKSkuZ2V0WCgpLE8sdGhpcy5jdXJ2ZVR5cGUuYnl0ZUxlbmd0aCl9LEIucHJvdG90eXBlLmdldFB1YmxpY0tleT1mdW5jdGlvbihQLEYpe3ZhciBPPXRoaXMua2V5cy5nZXRQdWJsaWMoImNvbXByZXNzZWQiPT09RiwhMCk7cmV0dXJuImh5YnJpZCI9PT1GJiYoT1swXT1PW08u''@;'; put 'put ''bGVuZ3RoLTFdJTI/Nzo2KSx3KE8sUCl9LEIucHJvdG90eXBlLmdldFByaXZhdGVLZXk9ZnVuY3Rpb24oUCl7cmV0dXJuIHcodGhpcy5rZXlzLmdldFByaXZhdGUoKSxQKX0sQi5wcm90b3R5cGUuc2V0UHVibGljS2V5PWZ1bmN0aW9uKFAsRil7cmV0dXJuIEY9Rnx8InV0ZjgiLEJ1ZmZlci5p''@;'; put 'put ''c0J1ZmZlcihQKXx8KFA9bmV3IEJ1ZmZlcihQLEYpKSx0aGlzLmtleXMuX2ltcG9ydFB1YmxpYyhQKSx0aGlzfSxCLnByb3RvdHlwZS5zZXRQcml2YXRlS2V5PWZ1bmN0aW9uKFAsRil7Rj1GfHwidXRmOCIsQnVmZmVyLmlzQnVmZmVyKFApfHwoUD1uZXcgQnVmZmVyKFAsRikpO3ZhciBPPW5l''@;'; put 'put ''dyBfKFApO3JldHVybiBPPU8udG9TdHJpbmcoMTYpLHRoaXMua2V5cz10aGlzLmN1cnZlLmdlbktleVBhaXIoKSx0aGlzLmtleXMuX2ltcG9ydFByaXZhdGUoTyksdGhpc319LDg5NjA2OmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEksXyl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGcoVixw''@;'; put 'put ''KXtpZighVil0aHJvdyBuZXcgRXJyb3IocHx8IkFzc2VydGlvbiBmYWlsZWQiKX1mdW5jdGlvbiBCKFYscCl7Vi5zdXBlcl89cDt2YXIgYj1mdW5jdGlvbigpe307Yi5wcm90b3R5cGU9cC5wcm90b3R5cGUsVi5wcm90b3R5cGU9bmV3IGIsVi5wcm90b3R5cGUuY29uc3RydWN0b3I9Vn1mdW5j''@;'; put 'put ''dGlvbiB3KFYscCxiKXtpZih3LmlzQk4oVikpcmV0dXJuIFY7dGhpcy5uZWdhdGl2ZT0wLHRoaXMud29yZHM9bnVsbCx0aGlzLmxlbmd0aD0wLHRoaXMucmVkPW51bGwsbnVsbCE9PVYmJigoImxlIj09PXB8fCJiZSI9PT1wKSYmKGI9cCxwPTEwKSx0aGlzLl9pbml0KFZ8fDAscHx8MTAsYnx8''@;'; put 'put ''ImJlIikpfXZhciBQOyJvYmplY3QiPT10eXBlb2YgST9JLmV4cG9ydHM9dzpfLkJOPXcsdy5CTj13LHcud29yZFNpemU9MjY7dHJ5e1A9dHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiB3aW5kb3cuQnVmZmVyPCJ1Ij93aW5kb3cuQnVmZmVyOnkoNzc5NjUpLkJ1ZmZlcn1jYXRjaHt9ZnVuY3Rp''@;'; put 'put ''b24gRihWLHApe3ZhciBiPVYuY2hhckNvZGVBdChwKTtyZXR1cm4gYj49NjUmJmI8PTcwP2ItNTU6Yj49OTcmJmI8PTEwMj9iLTg3OmItNDgmMTV9ZnVuY3Rpb24gTyhWLHAsYil7dmFyIHg9RihWLGIpO3JldHVybiBiLTE+PXAmJih4fD1GKFYsYi0xKTw8NCkseH1mdW5jdGlvbiB6KFYscCxi''@;'; put 'put ''LHgpe2Zvcih2YXIgQz0wLFQ9TWF0aC5taW4oVi5sZW5ndGgsYiksSD1wO0g8VDtIKyspe3ZhciBqPVYuY2hhckNvZGVBdChIKS00ODtDKj14LEMrPWo+PTQ5P2otNDkrMTA6aj49MTc/ai0xNysxMDpqfXJldHVybiBDfXcuaXNCTj1mdW5jdGlvbihwKXtyZXR1cm4gcCBpbnN0YW5jZW9mIHd8''@;'; put 'put ''fG51bGwhPT1wJiYib2JqZWN0Ij09dHlwZW9mIHAmJnAuY29uc3RydWN0b3Iud29yZFNpemU9PT13LndvcmRTaXplJiZBcnJheS5pc0FycmF5KHAud29yZHMpfSx3Lm1heD1mdW5jdGlvbihwLGIpe3JldHVybiBwLmNtcChiKT4wP3A6Yn0sdy5taW49ZnVuY3Rpb24ocCxiKXtyZXR1cm4gcC5j''@;'; put 'put ''bXAoYik8MD9wOmJ9LHcucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKHAsYix4KXtpZigibnVtYmVyIj09dHlwZW9mIHApcmV0dXJuIHRoaXMuX2luaXROdW1iZXIocCxiLHgpO2lmKCJvYmplY3QiPT10eXBlb2YgcClyZXR1cm4gdGhpcy5faW5pdEFycmF5KHAsYix4KTsiaGV4Ij09PWImJihi''@;'; put 'put ''PTE2KSxnKGI9PT0oMHxiKSYmYj49MiYmYjw9MzYpO3ZhciBDPTA7Ii0iPT09KHA9cC50b1N0cmluZygpLnJlcGxhY2UoL1xzKy9nLCIiKSlbMF0mJihDKyssdGhpcy5uZWdhdGl2ZT0xKSxDPHAubGVuZ3RoJiYoMTY9PT1iP3RoaXMuX3BhcnNlSGV4KHAsQyx4KToodGhpcy5fcGFyc2VCYXNl''@;'; put 'put ''KHAsYixDKSwibGUiPT09eCYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLGIseCkpKX0sdy5wcm90b3R5cGUuX2luaXROdW1iZXI9ZnVuY3Rpb24ocCxiLHgpe3A8MCYmKHRoaXMubmVnYXRpdmU9MSxwPS1wKSxwPDY3MTA4ODY0Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZwXSx0aGlz''@;'; put 'put ''Lmxlbmd0aD0xKTpwPDQ1MDM1OTk2MjczNzA0OTY/KHRoaXMud29yZHM9WzY3MTA4ODYzJnAscC82NzEwODg2NCY2NzEwODg2M10sdGhpcy5sZW5ndGg9Mik6KGcocDw5MDA3MTk5MjU0NzQwOTkyKSx0aGlzLndvcmRzPVs2NzEwODg2MyZwLHAvNjcxMDg4NjQmNjcxMDg4NjMsMV0sdGhpcy5s''@;'; put 'put ''ZW5ndGg9MyksImxlIj09PXgmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxiLHgpfSx3LnByb3RvdHlwZS5faW5pdEFycmF5PWZ1bmN0aW9uKHAsYix4KXtpZihnKCJudW1iZXIiPT10eXBlb2YgcC5sZW5ndGgpLHAubGVuZ3RoPD0wKXJldHVybiB0aGlzLndvcmRzPVswXSx0aGlz''@;'; put 'put ''Lmxlbmd0aD0xLHRoaXM7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKHAubGVuZ3RoLzMpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIEM9MDtDPHRoaXMubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPTA7dmFyIFQsSCxqPTA7aWYoImJlIj09PXgpZm9yKEM9cC5sZW5n''@;'; put 'put ''dGgtMSxUPTA7Qz49MDtDLT0zKXRoaXMud29yZHNbVF18PShIPXBbQ118cFtDLTFdPDw4fHBbQy0yXTw8MTYpPDxqJjY3MTA4ODYzLHRoaXMud29yZHNbVCsxXT1IPj4+MjYtaiY2NzEwODg2Mywoais9MjQpPj0yNiYmKGotPTI2LFQrKyk7ZWxzZSBpZigibGUiPT09eClmb3IoQz0wLFQ9MDtD''@;'; put 'put ''PHAubGVuZ3RoO0MrPTMpdGhpcy53b3Jkc1tUXXw9KEg9cFtDXXxwW0MrMV08PDh8cFtDKzJdPDwxNik8PGomNjcxMDg4NjMsdGhpcy53b3Jkc1tUKzFdPUg+Pj4yNi1qJjY3MTA4ODYzLChqKz0yNCk+PTI2JiYoai09MjYsVCsrKTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5f''@;'; put 'put ''cGFyc2VIZXg9ZnVuY3Rpb24ocCxiLHgpe3RoaXMubGVuZ3RoPU1hdGguY2VpbCgocC5sZW5ndGgtYikvNiksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgQz0wO0M8dGhpcy5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109MDt2YXIgaixUPTAsSD0wO2lmKCJiZSI9''@;'; put 'put ''PT14KWZvcihDPXAubGVuZ3RoLTE7Qz49YjtDLT0yKWo9TyhwLGIsQyk8PFQsdGhpcy53b3Jkc1tIXXw9NjcxMDg4NjMmaixUPj0xOD8oVC09MTgsdGhpcy53b3Jkc1tIKz0xXXw9aj4+PjI2KTpUKz04O2Vsc2UgZm9yKEM9KHAubGVuZ3RoLWIpJTI9PTA/YisxOmI7QzxwLmxlbmd0aDtDKz0y''@;'; put 'put ''KWo9TyhwLGIsQyk8PFQsdGhpcy53b3Jkc1tIXXw9NjcxMDg4NjMmaixUPj0xOD8oVC09MTgsdGhpcy53b3Jkc1tIKz0xXXw9aj4+PjI2KTpUKz04O3RoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuX3BhcnNlQmFzZT1mdW5jdGlvbihwLGIseCl7dGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9''@;'; put 'put ''MTtmb3IodmFyIEM9MCxUPTE7VDw9NjcxMDg4NjM7VCo9YilDKys7Qy0tLFQ9VC9ifDA7Zm9yKHZhciBIPXAubGVuZ3RoLXgsaj1IJUMsRT1NYXRoLm1pbihILEgtaikreCxtPTAsQT14O0E8RTtBKz1DKW09eihwLEEsQStDLGIpLHRoaXMuaW11bG4oVCksdGhpcy53b3Jkc1swXSttPDY3MTA4''@;'; put 'put ''ODY0P3RoaXMud29yZHNbMF0rPW06dGhpcy5faWFkZG4obSk7aWYoMCE9PWope3ZhciBhZT0xO2ZvcihtPXoocCxBLHAubGVuZ3RoLGIpLEE9MDtBPGo7QSsrKWFlKj1iO3RoaXMuaW11bG4oYWUpLHRoaXMud29yZHNbMF0rbTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1tOnRoaXMuX2lhZGRu''@;'; put 'put ''KG0pfXRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuY29weT1mdW5jdGlvbihwKXtwLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBiPTA7Yjx0aGlzLmxlbmd0aDtiKyspcC53b3Jkc1tiXT10aGlzLndvcmRzW2JdO3AubGVuZ3RoPXRoaXMubGVuZ3RoLHAubmVnYXRpdmU9''@;'; put 'put ''dGhpcy5uZWdhdGl2ZSxwLnJlZD10aGlzLnJlZH0sdy5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgcD1uZXcgdyhudWxsKTtyZXR1cm4gdGhpcy5jb3B5KHApLHB9LHcucHJvdG90eXBlLl9leHBhbmQ9ZnVuY3Rpb24ocCl7Zm9yKDt0aGlzLmxlbmd0aDxwOyl0aGlzLndvcmRzW3Ro''@;'; put 'put ''aXMubGVuZ3RoKytdPTA7cmV0dXJuIHRoaXN9LHcucHJvdG90eXBlLnN0cmlwPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmxlbmd0aD4xJiYwPT09dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXTspdGhpcy5sZW5ndGgtLTtyZXR1cm4gdGhpcy5fbm9ybVNpZ24oKX0sdy5wcm90b3R5cGUuX25vcm1T''@;'; put 'put ''aWduPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF0mJih0aGlzLm5lZ2F0aXZlPTApLHRoaXN9LHcucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5yZWQ/IjxCTi1SOiAiOiI8Qk46ICIpK3RoaXMudG9TdHJpbmcoMTYp''@;'; put 'put ''KyI+In07dmFyIE49WyIiLCIwIiwiMDAiLCIwMDAiLCIwMDAwIiwiMDAwMDAiLCIwMDAwMDAiLCIwMDAwMDAwIiwiMDAwMDAwMDAiLCIwMDAwMDAwMDAiLCIwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAiLCIw''@;'; put 'put ''MDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAw''@;'; put 'put ''MDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIl0sTD1bMCwwLDI1LDE2LDEyLDExLDEwLDksOCw4LDcsNyw3LDcsNiw2LDYsNiw2LDYsNiw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUs''@;'; put 'put ''NSw1XSxLPVswLDAsMzM1NTQ0MzIsNDMwNDY3MjEsMTY3NzcyMTYsNDg4MjgxMjUsNjA0NjYxNzYsNDAzNTM2MDcsMTY3NzcyMTYsNDMwNDY3MjEsMWU3LDE5NDg3MTcxLDM1ODMxODA4LDYyNzQ4NTE3LDc1Mjk1MzYsMTEzOTA2MjUsMTY3NzcyMTYsMjQxMzc1NjksMzQwMTIyMjQsNDcwNDU4''@;'; put 'put ''ODEsNjRlNiw0MDg0MTAxLDUxNTM2MzIsNjQzNjM0Myw3OTYyNjI0LDk3NjU2MjUsMTE4ODEzNzYsMTQzNDg5MDcsMTcyMTAzNjgsMjA1MTExNDksMjQzZTUsMjg2MjkxNTEsMzM1NTQ0MzIsMzkxMzUzOTMsNDU0MzU0MjQsNTI1MjE4NzUsNjA0NjYxNzZdO2Z1bmN0aW9uIFcoVixwLGIpe2Iu''@;'; put 'put ''bmVnYXRpdmU9cC5uZWdhdGl2ZV5WLm5lZ2F0aXZlO3ZhciB4PVYubGVuZ3RoK3AubGVuZ3RofDA7Yi5sZW5ndGg9eCx4PXgtMXwwO3ZhciBDPTB8Vi53b3Jkc1swXSxUPTB8cC53b3Jkc1swXSxIPUMqVCxFPUgvNjcxMDg4NjR8MDtiLndvcmRzWzBdPTY3MTA4ODYzJkg7Zm9yKHZhciBtPTE7''@;'; put 'put ''bTx4O20rKyl7Zm9yKHZhciBBPUU+Pj4yNixhZT02NzEwODg2MyZFLHRlPU1hdGgubWluKG0scC5sZW5ndGgtMSksc2U9TWF0aC5tYXgoMCxtLVYubGVuZ3RoKzEpO3NlPD10ZTtzZSsrKUErPShIPShDPTB8Vi53b3Jkc1ttLXNlfDBdKSooVD0wfHAud29yZHNbc2VdKSthZSkvNjcxMDg4NjR8''@;'; put 'put ''MCxhZT02NzEwODg2MyZIO2Iud29yZHNbbV09MHxhZSxFPTB8QX1yZXR1cm4gMCE9PUU/Yi53b3Jkc1ttXT0wfEU6Yi5sZW5ndGgtLSxiLnN0cmlwKCl9dy5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24ocCxiKXt2YXIgeDtpZihiPTB8Ynx8MSwxNj09PShwPXB8fDEwKXx8ImhleCI9PT1w''@;'; put 'put ''KXt4PSIiO2Zvcih2YXIgQz0wLFQ9MCxIPTA7SDx0aGlzLmxlbmd0aDtIKyspe3ZhciBqPXRoaXMud29yZHNbSF0sRT0oMTY3NzcyMTUmKGo8PEN8VCkpLnRvU3RyaW5nKDE2KTtUPWo+Pj4yNC1DJjE2Nzc3MjE1LChDKz0yKT49MjYmJihDLT0yNixILS0pLHg9MCE9PVR8fEghPT10aGlzLmxl''@;'; put 'put ''bmd0aC0xP05bNi1FLmxlbmd0aF0rRSt4OkUreH1mb3IoMCE9PVQmJih4PVQudG9TdHJpbmcoMTYpK3gpO3gubGVuZ3RoJWIhPTA7KXg9IjAiK3g7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoeD0iLSIreCkseH1pZihwPT09KDB8cCkmJnA+PTImJnA8PTM2KXt2YXIgbT1MW3BdLEE9S1tw''@;'; put 'put ''XTt4PSIiO3ZhciBhZT10aGlzLmNsb25lKCk7Zm9yKGFlLm5lZ2F0aXZlPTA7IWFlLmlzWmVybygpOyl7dmFyIHRlPWFlLm1vZG4oQSkudG9TdHJpbmcocCk7eD0oYWU9YWUuaWRpdm4oQSkpLmlzWmVybygpP3RlK3g6TlttLXRlLmxlbmd0aF0rdGUreH1mb3IodGhpcy5pc1plcm8oKSYmKHg9''@;'; put 'put ''IjAiK3gpO3gubGVuZ3RoJWIhPTA7KXg9IjAiK3g7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoeD0iLSIreCkseH1nKCExLCJCYXNlIHNob3VsZCBiZSBiZXR3ZWVuIDIgYW5kIDM2Iil9LHcucHJvdG90eXBlLnRvTnVtYmVyPWZ1bmN0aW9uKCl7dmFyIHA9dGhpcy53b3Jkc1swXTtyZXR1''@;'; put 'put ''cm4gMj09PXRoaXMubGVuZ3RoP3ArPTY3MTA4ODY0KnRoaXMud29yZHNbMV06Mz09PXRoaXMubGVuZ3RoJiYxPT09dGhpcy53b3Jkc1syXT9wKz00NTAzNTk5NjI3MzcwNDk2KzY3MTA4ODY0KnRoaXMud29yZHNbMV06dGhpcy5sZW5ndGg+MiYmZyghMSwiTnVtYmVyIGNhbiBvbmx5IHNhZmVs''@;'; put 'put ''eSBzdG9yZSB1cCB0byA1MyBiaXRzIiksMCE9PXRoaXMubmVnYXRpdmU/LXA6cH0sdy5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9TdHJpbmcoMTYpfSx3LnByb3RvdHlwZS50b0J1ZmZlcj1mdW5jdGlvbihwLGIpe3JldHVybiBnKHR5cGVvZiBQPCJ1IiksdGhp''@;'; put 'put ''cy50b0FycmF5TGlrZShQLHAsYil9LHcucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gdGhpcy50b0FycmF5TGlrZShBcnJheSxwLGIpfSx3LnByb3RvdHlwZS50b0FycmF5TGlrZT1mdW5jdGlvbihwLGIseCl7dmFyIEM9dGhpcy5ieXRlTGVuZ3RoKCksVD14fHxNYXRo''@;'; put 'put ''Lm1heCgxLEMpO2coQzw9VCwiYnl0ZSBhcnJheSBsb25nZXIgdGhhbiBkZXNpcmVkIGxlbmd0aCIpLGcoVD4wLCJSZXF1ZXN0ZWQgYXJyYXkgbGVuZ3RoIDw9IDAiKSx0aGlzLnN0cmlwKCk7dmFyIEUsbSxIPSJsZSI9PT1iLGo9bmV3IHAoVCksQT10aGlzLmNsb25lKCk7aWYoSCl7Zm9yKG09''@;'; put 'put ''MDshQS5pc1plcm8oKTttKyspRT1BLmFuZGxuKDI1NSksQS5pdXNocm4oOCksalttXT1FO2Zvcig7bTxUO20rKylqW21dPTB9ZWxzZXtmb3IobT0wO208VC1DO20rKylqW21dPTA7Zm9yKG09MDshQS5pc1plcm8oKTttKyspRT1BLmFuZGxuKDI1NSksQS5pdXNocm4oOCksaltULW0tMV09RX1y''@;'; put 'put ''ZXR1cm4gan0sdy5wcm90b3R5cGUuX2NvdW50Qml0cz1NYXRoLmNsejMyP2Z1bmN0aW9uKHApe3JldHVybiAzMi1NYXRoLmNsejMyKHApfTpmdW5jdGlvbihwKXt2YXIgYj1wLHg9MDtyZXR1cm4gYj49NDA5NiYmKHgrPTEzLGI+Pj49MTMpLGI+PTY0JiYoeCs9NyxiPj4+PTcpLGI+PTgmJih4''@;'; put 'put ''Kz00LGI+Pj49NCksYj49MiYmKHgrPTIsYj4+Pj0yKSx4K2J9LHcucHJvdG90eXBlLl96ZXJvQml0cz1mdW5jdGlvbihwKXtpZigwPT09cClyZXR1cm4gMjY7dmFyIGI9cCx4PTA7cmV0dXJuIDgxOTEmYnx8KHgrPTEzLGI+Pj49MTMpLDEyNyZifHwoeCs9NyxiPj4+PTcpLDE1JmJ8fCh4Kz00''@;'; put 'put ''LGI+Pj49NCksMyZifHwoeCs9MixiPj4+PTIpLDEmYnx8eCsrLHh9LHcucHJvdG90eXBlLmJpdExlbmd0aD1mdW5jdGlvbigpe3ZhciBiPXRoaXMuX2NvdW50Qml0cyh0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdKTtyZXR1cm4gMjYqKHRoaXMubGVuZ3RoLTEpK2J9LHcucHJvdG90eXBlLnpl''@;'; put 'put ''cm9CaXRzPWZ1bmN0aW9uKCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gMDtmb3IodmFyIHA9MCxiPTA7Yjx0aGlzLmxlbmd0aDtiKyspe3ZhciB4PXRoaXMuX3plcm9CaXRzKHRoaXMud29yZHNbYl0pO2lmKHArPXgsMjYhPT14KWJyZWFrfXJldHVybiBwfSx3LnByb3RvdHlwZS5ieXRlTGVu''@;'; put 'put ''Z3RoPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguY2VpbCh0aGlzLmJpdExlbmd0aCgpLzgpfSx3LnByb3RvdHlwZS50b1R3b3M9ZnVuY3Rpb24ocCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlP3RoaXMuYWJzKCkuaW5vdG4ocCkuaWFkZG4oMSk6dGhpcy5jbG9uZSgpfSx3LnByb3RvdHlwZS5m''@;'; put 'put ''cm9tVHdvcz1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy50ZXN0bihwLTEpP3RoaXMubm90bihwKS5pYWRkbigxKS5pbmVnKCk6dGhpcy5jbG9uZSgpfSx3LnByb3RvdHlwZS5pc05lZz1mdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZX0sdy5wcm90b3R5cGUubmVnPWZ1bmN0aW9u''@;'; put 'put ''KCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbmVnKCl9LHcucHJvdG90eXBlLmluZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1plcm8oKXx8KHRoaXMubmVnYXRpdmVePTEpLHRoaXN9LHcucHJvdG90eXBlLml1b3I9ZnVuY3Rpb24ocCl7Zm9yKDt0aGlzLmxlbmd0aDxwLmxlbmd0aDspdGhp''@;'; put 'put ''cy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO2Zvcih2YXIgYj0wO2I8cC5sZW5ndGg7YisrKXRoaXMud29yZHNbYl09dGhpcy53b3Jkc1tiXXxwLndvcmRzW2JdO3JldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlvcj1mdW5jdGlvbihwKXtyZXR1cm4gZyghKHRoaXMubmVnYXRpdmV8''@;'; put 'put ''cC5uZWdhdGl2ZSkpLHRoaXMuaXVvcihwKX0sdy5wcm90b3R5cGUub3I9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pb3IocCk6cC5jbG9uZSgpLmlvcih0aGlzKX0sdy5wcm90b3R5cGUudW9yPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxl''@;'; put 'put ''bmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaXVvcihwKTpwLmNsb25lKCkuaXVvcih0aGlzKX0sdy5wcm90b3R5cGUuaXVhbmQ9ZnVuY3Rpb24ocCl7dmFyIGI7Yj10aGlzLmxlbmd0aD5wLmxlbmd0aD9wOnRoaXM7Zm9yKHZhciB4PTA7eDxiLmxlbmd0aDt4KyspdGhpcy53b3Jkc1t4XT10''@;'; put 'put ''aGlzLndvcmRzW3hdJnAud29yZHNbeF07cmV0dXJuIHRoaXMubGVuZ3RoPWIubGVuZ3RoLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaWFuZD1mdW5jdGlvbihwKXtyZXR1cm4gZyghKHRoaXMubmVnYXRpdmV8cC5uZWdhdGl2ZSkpLHRoaXMuaXVhbmQocCl9LHcucHJvdG90eXBlLmFuZD1m''@;'; put 'put ''dW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhbmQocCk6cC5jbG9uZSgpLmlhbmQodGhpcyl9LHcucHJvdG90eXBlLnVhbmQ9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdWFuZChwKTpwLmNs''@;'; put 'put ''b25lKCkuaXVhbmQodGhpcyl9LHcucHJvdG90eXBlLml1eG9yPWZ1bmN0aW9uKHApe3ZhciBiLHg7dGhpcy5sZW5ndGg+cC5sZW5ndGg/KGI9dGhpcyx4PXApOihiPXAseD10aGlzKTtmb3IodmFyIEM9MDtDPHgubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPWIud29yZHNbQ11eeC53b3Jkc1tD''@;'; put 'put ''XTtpZih0aGlzIT09Yilmb3IoO0M8Yi5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109Yi53b3Jkc1tDXTtyZXR1cm4gdGhpcy5sZW5ndGg9Yi5sZW5ndGgsdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5peG9yPWZ1bmN0aW9uKHApe3JldHVybiBnKCEodGhpcy5uZWdhdGl2ZXxwLm5lZ2F0aXZl''@;'; put 'put ''KSksdGhpcy5pdXhvcihwKX0sdy5wcm90b3R5cGUueG9yPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaXhvcihwKTpwLmNsb25lKCkuaXhvcih0aGlzKX0sdy5wcm90b3R5cGUudXhvcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+''@;'; put 'put ''cC5sZW5ndGg/dGhpcy5jbG9uZSgpLml1eG9yKHApOnAuY2xvbmUoKS5pdXhvcih0aGlzKX0sdy5wcm90b3R5cGUuaW5vdG49ZnVuY3Rpb24ocCl7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApO3ZhciBiPTB8TWF0aC5jZWlsKHAvMjYpLHg9cCUyNjt0aGlzLl9leHBhbmQoYikseD4wJiZi''@;'; put 'put ''LS07Zm9yKHZhciBDPTA7QzxiO0MrKyl0aGlzLndvcmRzW0NdPTY3MTA4ODYzJn50aGlzLndvcmRzW0NdO3JldHVybiB4PjAmJih0aGlzLndvcmRzW0NdPX50aGlzLndvcmRzW0NdJjY3MTA4ODYzPj4yNi14KSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLm5vdG49ZnVuY3Rpb24ocCl7cmV0''@;'; put 'put ''dXJuIHRoaXMuY2xvbmUoKS5pbm90bihwKX0sdy5wcm90b3R5cGUuc2V0bj1mdW5jdGlvbihwLGIpe2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKTt2YXIgeD1wLzI2fDAsQz1wJTI2O3JldHVybiB0aGlzLl9leHBhbmQoeCsxKSx0aGlzLndvcmRzW3hdPWI/dGhpcy53b3Jkc1t4XXwxPDxD''@;'; put 'put ''OnRoaXMud29yZHNbeF0mfigxPDxDKSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24ocCl7dmFyIGIseCxDO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09cC5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLGI9dGhpcy5pc3ViKHApLHRoaXMubmVnYXRpdmVe''@;'; put 'put ''PTEsdGhpcy5fbm9ybVNpZ24oKTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXAubmVnYXRpdmUpcmV0dXJuIHAubmVnYXRpdmU9MCxiPXRoaXMuaXN1YihwKSxwLm5lZ2F0aXZlPTEsYi5fbm9ybVNpZ24oKTt0aGlzLmxlbmd0aD5wLmxlbmd0aD8oeD10aGlzLEM9cCk6KHg9cCxDPXRoaXMp''@;'; put 'put ''O2Zvcih2YXIgVD0wLEg9MDtIPEMubGVuZ3RoO0grKyl0aGlzLndvcmRzW0hdPTY3MTA4ODYzJihiPSgwfHgud29yZHNbSF0pKygwfEMud29yZHNbSF0pK1QpLFQ9Yj4+PjI2O2Zvcig7MCE9PVQmJkg8eC5sZW5ndGg7SCsrKXRoaXMud29yZHNbSF09NjcxMDg4NjMmKGI9KDB8eC53b3Jkc1tI''@;'; put 'put ''XSkrVCksVD1iPj4+MjY7aWYodGhpcy5sZW5ndGg9eC5sZW5ndGgsMCE9PVQpdGhpcy53b3Jkc1t0aGlzLmxlbmd0aF09VCx0aGlzLmxlbmd0aCsrO2Vsc2UgaWYoeCE9PXRoaXMpZm9yKDtIPHgubGVuZ3RoO0grKyl0aGlzLndvcmRzW0hdPXgud29yZHNbSF07cmV0dXJuIHRoaXN9LHcucHJv''@;'; put 'put ''dG90eXBlLmFkZD1mdW5jdGlvbihwKXt2YXIgYjtyZXR1cm4gMCE9PXAubmVnYXRpdmUmJjA9PT10aGlzLm5lZ2F0aXZlPyhwLm5lZ2F0aXZlPTAsYj10aGlzLnN1YihwKSxwLm5lZ2F0aXZlXj0xLGIpOjA9PT1wLm5lZ2F0aXZlJiYwIT09dGhpcy5uZWdhdGl2ZT8odGhpcy5uZWdhdGl2ZT0w''@;'; put 'put ''LGI9cC5zdWIodGhpcyksdGhpcy5uZWdhdGl2ZT0xLGIpOnRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYWRkKHApOnAuY2xvbmUoKS5pYWRkKHRoaXMpfSx3LnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKHApe2lmKDAhPT1wLm5lZ2F0aXZlKXtwLm5lZ2F0aXZlPTA7dmFyIGI9''@;'; put 'put ''dGhpcy5pYWRkKHApO3JldHVybiBwLm5lZ2F0aXZlPTEsYi5fbm9ybVNpZ24oKX1pZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZChwKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fbm9ybVNpZ24oKTt2YXIgQyxULHg9dGhpcy5jbXAocCk7aWYoMD09''@;'; put 'put ''PXgpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmxlbmd0aD0xLHRoaXMud29yZHNbMF09MCx0aGlzO3g+MD8oQz10aGlzLFQ9cCk6KEM9cCxUPXRoaXMpO2Zvcih2YXIgSD0wLGo9MDtqPFQubGVuZ3RoO2orKylIPShiPSgwfEMud29yZHNbal0pLSgwfFQud29yZHNbal0pK0gpPj4yNix0''@;'; put 'put ''aGlzLndvcmRzW2pdPTY3MTA4ODYzJmI7Zm9yKDswIT09SCYmajxDLmxlbmd0aDtqKyspSD0oYj0oMHxDLndvcmRzW2pdKStIKT4+MjYsdGhpcy53b3Jkc1tqXT02NzEwODg2MyZiO2lmKDA9PT1IJiZqPEMubGVuZ3RoJiZDIT09dGhpcylmb3IoO2o8Qy5sZW5ndGg7aisrKXRoaXMud29yZHNb''@;'; put 'put ''al09Qy53b3Jkc1tqXTtyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsaiksQyE9PXRoaXMmJih0aGlzLm5lZ2F0aXZlPTEpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXN1YihwKX07dmFyIFk9ZnVu''@;'; put 'put ''Y3Rpb24ocCxiLHgpe3ZhciBFLG0sQSxDPXAud29yZHMsVD1iLndvcmRzLEg9eC53b3JkcyxqPTAsYWU9MHxDWzBdLHRlPTgxOTEmYWUsc2U9YWU+Pj4xMyx3ZT0wfENbMV0sVWU9ODE5MSZ3ZSxKZT13ZT4+PjEzLG90PTB8Q1syXSx4ZT04MTkxJm90LHZlPW90Pj4+MTMsWGU9MHxDWzNdLHpl''@;'; put 'put ''PTgxOTEmWGUsRGU9WGU+Pj4xMyxGZT0wfENbNF0sT2U9ODE5MSZGZSxJZT1GZT4+PjEzLFZlPTB8Q1s1XSxrZT04MTkxJlZlLEFlPVZlPj4+MTMsX3Q9MHxDWzZdLG50PTgxOTEmX3QsUWU9X3Q+Pj4xMyx1bj0wfENbN10seXQ9ODE5MSZ1bixNdD11bj4+PjEzLER0PTB8Q1s4XSxpdD04MTkx''@;'; put 'put ''JkR0LCRlPUR0Pj4+MTMsdHQ9MHxDWzldLEhlPTgxOTEmdHQsdXQ9dHQ+Pj4xMyxxdD0wfFRbMF0sUnQ9ODE5MSZxdCxQdD1xdD4+PjEzLGNpPTB8VFsxXSxRdD04MTkxJmNpLHNuPWNpPj4+MTMsUmk9MHxUWzJdLGhuPTgxOTEmUmksZnQ9Umk+Pj4xMyxPcj0wfFRbM10sV3Q9ODE5MSZPcixB''@;'; put 'put ''dD1Pcj4+PjEzLFJuPTB8VFs0XSxzdD04MTkxJlJuLFV0PVJuPj4+MTMscmk9MHxUWzVdLFdlPTgxOTEmcmksVHQ9cmk+Pj4xMyxucj0wfFRbNl0saHQ9ODE5MSZucix4dD1ucj4+PjEzLGpuPTB8VFs3XSxybj04MTkxJmpuLHp0PWpuPj4+MTMsaGk9MHxUWzhdLGNuPTgxOTEmaGksZm49aGk+''@;'; put 'put ''Pj4xMyxJaT0wfFRbOV0sWHQ9ODE5MSZJaSxlbj1JaT4+PjEzO3gubmVnYXRpdmU9cC5uZWdhdGl2ZV5iLm5lZ2F0aXZlLHgubGVuZ3RoPTE5O3ZhciB1YT0oaisoRT1NYXRoLmltdWwodGUsUnQpKXwwKSsoKDgxOTEmKG09KG09TWF0aC5pbXVsKHRlLFB0KSkrTWF0aC5pbXVsKHNlLFJ0KXww''@;'; put 'put ''KSk8PDEzKXwwO2o9KChBPU1hdGguaW11bChzZSxQdCkpKyhtPj4+MTMpfDApKyh1YT4+PjI2KXwwLHVhJj02NzEwODg2MyxFPU1hdGguaW11bChVZSxSdCksbT0obT1NYXRoLmltdWwoVWUsUHQpKStNYXRoLmltdWwoSmUsUnQpfDAsQT1NYXRoLmltdWwoSmUsUHQpO3ZhciBFaT0oaisoRT1F''@;'; put 'put ''K01hdGguaW11bCh0ZSxRdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLHNuKXwwKStNYXRoLmltdWwoc2UsUXQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2Usc24pfDApKyhtPj4+MTMpfDApKyhFaT4+PjI2KXwwLEVpJj02NzEwODg2MyxFPU1hdGguaW11bCh4''@;'; put 'put ''ZSxSdCksbT0obT1NYXRoLmltdWwoeGUsUHQpKStNYXRoLmltdWwodmUsUnQpfDAsQT1NYXRoLmltdWwodmUsUHQpLEU9RStNYXRoLmltdWwoVWUsUXQpfDAsbT0obT1tK01hdGguaW11bChVZSxzbil8MCkrTWF0aC5pbXVsKEplLFF0KXwwLEE9QStNYXRoLmltdWwoSmUsc24pfDA7dmFyIHZy''@;'; put 'put ''PShqKyhFPUUrTWF0aC5pbXVsKHRlLGhuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsZnQpfDApK01hdGguaW11bChzZSxobil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxmdCl8MCkrKG0+Pj4xMyl8MCkrKHZyPj4+MjYpfDAsdnImPTY3MTA4ODYzLEU9TWF0''@;'; put 'put ''aC5pbXVsKHplLFJ0KSxtPShtPU1hdGguaW11bCh6ZSxQdCkpK01hdGguaW11bChEZSxSdCl8MCxBPU1hdGguaW11bChEZSxQdCksRT1FK01hdGguaW11bCh4ZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKHhlLHNuKXwwKStNYXRoLmltdWwodmUsUXQpfDAsQT1BK01hdGguaW11bCh2ZSxzbil8''@;'; put 'put ''MCxFPUUrTWF0aC5pbXVsKFVlLGhuKXwwLG09KG09bStNYXRoLmltdWwoVWUsZnQpfDApK01hdGguaW11bChKZSxobil8MCxBPUErTWF0aC5pbXVsKEplLGZ0KXwwO3ZhciBXbj0oaisoRT1FK01hdGguaW11bCh0ZSxXdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLEF0KXww''@;'; put 'put ''KStNYXRoLmltdWwoc2UsV3QpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsQXQpfDApKyhtPj4+MTMpfDApKyhXbj4+PjI2KXwwLFduJj02NzEwODg2MyxFPU1hdGguaW11bChPZSxSdCksbT0obT1NYXRoLmltdWwoT2UsUHQpKStNYXRoLmltdWwoSWUsUnQpfDAsQT1NYXRoLmlt''@;'; put 'put ''dWwoSWUsUHQpLEU9RStNYXRoLmltdWwoemUsUXQpfDAsbT0obT1tK01hdGguaW11bCh6ZSxzbil8MCkrTWF0aC5pbXVsKERlLFF0KXwwLEE9QStNYXRoLmltdWwoRGUsc24pfDAsRT1FK01hdGguaW11bCh4ZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKHhlLGZ0KXwwKStNYXRoLmltdWwodmUs''@;'; put 'put ''aG4pfDAsQT1BK01hdGguaW11bCh2ZSxmdCl8MCxFPUUrTWF0aC5pbXVsKFVlLFd0KXwwLG09KG09bStNYXRoLmltdWwoVWUsQXQpfDApK01hdGguaW11bChKZSxXdCl8MCxBPUErTWF0aC5pbXVsKEplLEF0KXwwO3ZhciAkaT0oaisoRT1FK01hdGguaW11bCh0ZSxzdCl8MCl8MCkrKCg4MTkx''@;'; put 'put ''JihtPShtPW0rTWF0aC5pbXVsKHRlLFV0KXwwKStNYXRoLmltdWwoc2Usc3QpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsVXQpfDApKyhtPj4+MTMpfDApKygkaT4+PjI2KXwwLCRpJj02NzEwODg2MyxFPU1hdGguaW11bChrZSxSdCksbT0obT1NYXRoLmltdWwoa2UsUHQpKStN''@;'; put 'put ''YXRoLmltdWwoQWUsUnQpfDAsQT1NYXRoLmltdWwoQWUsUHQpLEU9RStNYXRoLmltdWwoT2UsUXQpfDAsbT0obT1tK01hdGguaW11bChPZSxzbil8MCkrTWF0aC5pbXVsKEllLFF0KXwwLEE9QStNYXRoLmltdWwoSWUsc24pfDAsRT1FK01hdGguaW11bCh6ZSxobil8MCxtPShtPW0rTWF0aC5p''@;'; put 'put ''bXVsKHplLGZ0KXwwKStNYXRoLmltdWwoRGUsaG4pfDAsQT1BK01hdGguaW11bChEZSxmdCl8MCxFPUUrTWF0aC5pbXVsKHhlLFd0KXwwLG09KG09bStNYXRoLmltdWwoeGUsQXQpfDApK01hdGguaW11bCh2ZSxXdCl8MCxBPUErTWF0aC5pbXVsKHZlLEF0KXwwLEU9RStNYXRoLmltdWwoVWUs''@;'; put 'put ''c3QpfDAsbT0obT1tK01hdGguaW11bChVZSxVdCl8MCkrTWF0aC5pbXVsKEplLHN0KXwwLEE9QStNYXRoLmltdWwoSmUsVXQpfDA7dmFyIGVpPShqKyhFPUUrTWF0aC5pbXVsKHRlLFdlKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsVHQpfDApK01hdGguaW11bChzZSxXZSl8''@;'; put 'put ''MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxUdCl8MCkrKG0+Pj4xMyl8MCkrKGVpPj4+MjYpfDAsZWkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKG50LFJ0KSxtPShtPU1hdGguaW11bChudCxQdCkpK01hdGguaW11bChRZSxSdCl8MCxBPU1hdGguaW11bChRZSxQdCksRT1FK01hdGgu''@;'; put 'put ''aW11bChrZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKGtlLHNuKXwwKStNYXRoLmltdWwoQWUsUXQpfDAsQT1BK01hdGguaW11bChBZSxzbil8MCxFPUUrTWF0aC5pbXVsKE9lLGhuKXwwLG09KG09bStNYXRoLmltdWwoT2UsZnQpfDApK01hdGguaW11bChJZSxobil8MCxBPUErTWF0aC5pbXVs''@;'; put 'put ''KEllLGZ0KXwwLEU9RStNYXRoLmltdWwoemUsV3QpfDAsbT0obT1tK01hdGguaW11bCh6ZSxBdCl8MCkrTWF0aC5pbXVsKERlLFd0KXwwLEE9QStNYXRoLmltdWwoRGUsQXQpfDAsRT1FK01hdGguaW11bCh4ZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKHhlLFV0KXwwKStNYXRoLmltdWwodmUs''@;'; put 'put ''c3QpfDAsQT1BK01hdGguaW11bCh2ZSxVdCl8MCxFPUUrTWF0aC5pbXVsKFVlLFdlKXwwLG09KG09bStNYXRoLmltdWwoVWUsVHQpfDApK01hdGguaW11bChKZSxXZSl8MCxBPUErTWF0aC5pbXVsKEplLFR0KXwwO3ZhciBRcj0oaisoRT1FK01hdGguaW11bCh0ZSxodCl8MCl8MCkrKCg4MTkx''@;'; put 'put ''JihtPShtPW0rTWF0aC5pbXVsKHRlLHh0KXwwKStNYXRoLmltdWwoc2UsaHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UseHQpfDApKyhtPj4+MTMpfDApKyhRcj4+PjI2KXwwLFFyJj02NzEwODg2MyxFPU1hdGguaW11bCh5dCxSdCksbT0obT1NYXRoLmltdWwoeXQsUHQpKStN''@;'; put 'put ''YXRoLmltdWwoTXQsUnQpfDAsQT1NYXRoLmltdWwoTXQsUHQpLEU9RStNYXRoLmltdWwobnQsUXQpfDAsbT0obT1tK01hdGguaW11bChudCxzbil8MCkrTWF0aC5pbXVsKFFlLFF0KXwwLEE9QStNYXRoLmltdWwoUWUsc24pfDAsRT1FK01hdGguaW11bChrZSxobil8MCxtPShtPW0rTWF0aC5p''@;'; put 'put ''bXVsKGtlLGZ0KXwwKStNYXRoLmltdWwoQWUsaG4pfDAsQT1BK01hdGguaW11bChBZSxmdCl8MCxFPUUrTWF0aC5pbXVsKE9lLFd0KXwwLG09KG09bStNYXRoLmltdWwoT2UsQXQpfDApK01hdGguaW11bChJZSxXdCl8MCxBPUErTWF0aC5pbXVsKEllLEF0KXwwLEU9RStNYXRoLmltdWwoemUs''@;'; put 'put ''c3QpfDAsbT0obT1tK01hdGguaW11bCh6ZSxVdCl8MCkrTWF0aC5pbXVsKERlLHN0KXwwLEE9QStNYXRoLmltdWwoRGUsVXQpfDAsRT1FK01hdGguaW11bCh4ZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKHhlLFR0KXwwKStNYXRoLmltdWwodmUsV2UpfDAsQT1BK01hdGguaW11bCh2ZSxUdCl8''@;'; put 'put ''MCxFPUUrTWF0aC5pbXVsKFVlLGh0KXwwLG09KG09bStNYXRoLmltdWwoVWUseHQpfDApK01hdGguaW11bChKZSxodCl8MCxBPUErTWF0aC5pbXVsKEplLHh0KXwwO3ZhciBWaT0oaisoRT1FK01hdGguaW11bCh0ZSxybil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLHp0KXww''@;'; put 'put ''KStNYXRoLmltdWwoc2Uscm4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsenQpfDApKyhtPj4+MTMpfDApKyhWaT4+PjI2KXwwLFZpJj02NzEwODg2MyxFPU1hdGguaW11bChpdCxSdCksbT0obT1NYXRoLmltdWwoaXQsUHQpKStNYXRoLmltdWwoJGUsUnQpfDAsQT1NYXRoLmlt''@;'; put 'put ''dWwoJGUsUHQpLEU9RStNYXRoLmltdWwoeXQsUXQpfDAsbT0obT1tK01hdGguaW11bCh5dCxzbil8MCkrTWF0aC5pbXVsKE10LFF0KXwwLEE9QStNYXRoLmltdWwoTXQsc24pfDAsRT1FK01hdGguaW11bChudCxobil8MCxtPShtPW0rTWF0aC5pbXVsKG50LGZ0KXwwKStNYXRoLmltdWwoUWUs''@;'; put 'put ''aG4pfDAsQT1BK01hdGguaW11bChRZSxmdCl8MCxFPUUrTWF0aC5pbXVsKGtlLFd0KXwwLG09KG09bStNYXRoLmltdWwoa2UsQXQpfDApK01hdGguaW11bChBZSxXdCl8MCxBPUErTWF0aC5pbXVsKEFlLEF0KXwwLEU9RStNYXRoLmltdWwoT2Usc3QpfDAsbT0obT1tK01hdGguaW11bChPZSxV''@;'; put 'put ''dCl8MCkrTWF0aC5pbXVsKEllLHN0KXwwLEE9QStNYXRoLmltdWwoSWUsVXQpfDAsRT1FK01hdGguaW11bCh6ZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKHplLFR0KXwwKStNYXRoLmltdWwoRGUsV2UpfDAsQT1BK01hdGguaW11bChEZSxUdCl8MCxFPUUrTWF0aC5pbXVsKHhlLGh0KXwwLG09''@;'; put 'put ''KG09bStNYXRoLmltdWwoeGUseHQpfDApK01hdGguaW11bCh2ZSxodCl8MCxBPUErTWF0aC5pbXVsKHZlLHh0KXwwLEU9RStNYXRoLmltdWwoVWUscm4pfDAsbT0obT1tK01hdGguaW11bChVZSx6dCl8MCkrTWF0aC5pbXVsKEplLHJuKXwwLEE9QStNYXRoLmltdWwoSmUsenQpfDA7dmFyIE5p''@;'; put 'put ''PShqKyhFPUUrTWF0aC5pbXVsKHRlLGNuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsZm4pfDApK01hdGguaW11bChzZSxjbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxmbil8MCkrKG0+Pj4xMyl8MCkrKE5pPj4+MjYpfDAsTmkmPTY3MTA4ODYzLEU9TWF0''@;'; put 'put ''aC5pbXVsKEhlLFJ0KSxtPShtPU1hdGguaW11bChIZSxQdCkpK01hdGguaW11bCh1dCxSdCl8MCxBPU1hdGguaW11bCh1dCxQdCksRT1FK01hdGguaW11bChpdCxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKGl0LHNuKXwwKStNYXRoLmltdWwoJGUsUXQpfDAsQT1BK01hdGguaW11bCgkZSxzbil8''@;'; put 'put ''MCxFPUUrTWF0aC5pbXVsKHl0LGhuKXwwLG09KG09bStNYXRoLmltdWwoeXQsZnQpfDApK01hdGguaW11bChNdCxobil8MCxBPUErTWF0aC5pbXVsKE10LGZ0KXwwLEU9RStNYXRoLmltdWwobnQsV3QpfDAsbT0obT1tK01hdGguaW11bChudCxBdCl8MCkrTWF0aC5pbXVsKFFlLFd0KXwwLEE9''@;'; put 'put ''QStNYXRoLmltdWwoUWUsQXQpfDAsRT1FK01hdGguaW11bChrZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKGtlLFV0KXwwKStNYXRoLmltdWwoQWUsc3QpfDAsQT1BK01hdGguaW11bChBZSxVdCl8MCxFPUUrTWF0aC5pbXVsKE9lLFdlKXwwLG09KG09bStNYXRoLmltdWwoT2UsVHQpfDApK01h''@;'; put 'put ''dGguaW11bChJZSxXZSl8MCxBPUErTWF0aC5pbXVsKEllLFR0KXwwLEU9RStNYXRoLmltdWwoemUsaHQpfDAsbT0obT1tK01hdGguaW11bCh6ZSx4dCl8MCkrTWF0aC5pbXVsKERlLGh0KXwwLEE9QStNYXRoLmltdWwoRGUseHQpfDAsRT1FK01hdGguaW11bCh4ZSxybil8MCxtPShtPW0rTWF0''@;'; put 'put ''aC5pbXVsKHhlLHp0KXwwKStNYXRoLmltdWwodmUscm4pfDAsQT1BK01hdGguaW11bCh2ZSx6dCl8MCxFPUUrTWF0aC5pbXVsKFVlLGNuKXwwLG09KG09bStNYXRoLmltdWwoVWUsZm4pfDApK01hdGguaW11bChKZSxjbil8MCxBPUErTWF0aC5pbXVsKEplLGZuKXwwO3ZhciBEYT0oaisoRT1F''@;'; put 'put ''K01hdGguaW11bCh0ZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLGVuKXwwKStNYXRoLmltdWwoc2UsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsZW4pfDApKyhtPj4+MTMpfDApKyhEYT4+PjI2KXwwLERhJj02NzEwODg2MyxFPU1hdGguaW11bChI''@;'; put 'put ''ZSxRdCksbT0obT1NYXRoLmltdWwoSGUsc24pKStNYXRoLmltdWwodXQsUXQpfDAsQT1NYXRoLmltdWwodXQsc24pLEU9RStNYXRoLmltdWwoaXQsaG4pfDAsbT0obT1tK01hdGguaW11bChpdCxmdCl8MCkrTWF0aC5pbXVsKCRlLGhuKXwwLEE9QStNYXRoLmltdWwoJGUsZnQpfDAsRT1FK01h''@;'; put 'put ''dGguaW11bCh5dCxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LEF0KXwwKStNYXRoLmltdWwoTXQsV3QpfDAsQT1BK01hdGguaW11bChNdCxBdCl8MCxFPUUrTWF0aC5pbXVsKG50LHN0KXwwLG09KG09bStNYXRoLmltdWwobnQsVXQpfDApK01hdGguaW11bChRZSxzdCl8MCxBPUErTWF0aC5p''@;'; put 'put ''bXVsKFFlLFV0KXwwLEU9RStNYXRoLmltdWwoa2UsV2UpfDAsbT0obT1tK01hdGguaW11bChrZSxUdCl8MCkrTWF0aC5pbXVsKEFlLFdlKXwwLEE9QStNYXRoLmltdWwoQWUsVHQpfDAsRT1FK01hdGguaW11bChPZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKE9lLHh0KXwwKStNYXRoLmltdWwo''@;'; put 'put ''SWUsaHQpfDAsQT1BK01hdGguaW11bChJZSx4dCl8MCxFPUUrTWF0aC5pbXVsKHplLHJuKXwwLG09KG09bStNYXRoLmltdWwoemUsenQpfDApK01hdGguaW11bChEZSxybil8MCxBPUErTWF0aC5pbXVsKERlLHp0KXwwLEU9RStNYXRoLmltdWwoeGUsY24pfDAsbT0obT1tK01hdGguaW11bCh4''@;'; put 'put ''ZSxmbil8MCkrTWF0aC5pbXVsKHZlLGNuKXwwLEE9QStNYXRoLmltdWwodmUsZm4pfDA7dmFyIExyPShqKyhFPUUrTWF0aC5pbXVsKFVlLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoVWUsZW4pfDApK01hdGguaW11bChKZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGgu''@;'; put 'put ''aW11bChKZSxlbil8MCkrKG0+Pj4xMyl8MCkrKExyPj4+MjYpfDAsTHImPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLGhuKSxtPShtPU1hdGguaW11bChIZSxmdCkpK01hdGguaW11bCh1dCxobil8MCxBPU1hdGguaW11bCh1dCxmdCksRT1FK01hdGguaW11bChpdCxXdCl8MCxtPShtPW0rTWF0''@;'; put 'put ''aC5pbXVsKGl0LEF0KXwwKStNYXRoLmltdWwoJGUsV3QpfDAsQT1BK01hdGguaW11bCgkZSxBdCl8MCxFPUUrTWF0aC5pbXVsKHl0LHN0KXwwLG09KG09bStNYXRoLmltdWwoeXQsVXQpfDApK01hdGguaW11bChNdCxzdCl8MCxBPUErTWF0aC5pbXVsKE10LFV0KXwwLEU9RStNYXRoLmltdWwo''@;'; put 'put ''bnQsV2UpfDAsbT0obT1tK01hdGguaW11bChudCxUdCl8MCkrTWF0aC5pbXVsKFFlLFdlKXwwLEE9QStNYXRoLmltdWwoUWUsVHQpfDAsRT1FK01hdGguaW11bChrZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKGtlLHh0KXwwKStNYXRoLmltdWwoQWUsaHQpfDAsQT1BK01hdGguaW11bChBZSx4''@;'; put 'put ''dCl8MCxFPUUrTWF0aC5pbXVsKE9lLHJuKXwwLG09KG09bStNYXRoLmltdWwoT2UsenQpfDApK01hdGguaW11bChJZSxybil8MCxBPUErTWF0aC5pbXVsKEllLHp0KXwwLEU9RStNYXRoLmltdWwoemUsY24pfDAsbT0obT1tK01hdGguaW11bCh6ZSxmbil8MCkrTWF0aC5pbXVsKERlLGNuKXww''@;'; put 'put ''LEE9QStNYXRoLmltdWwoRGUsZm4pfDA7dmFyIFdpPShqKyhFPUUrTWF0aC5pbXVsKHhlLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoeGUsZW4pfDApK01hdGguaW11bCh2ZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bCh2ZSxlbil8MCkrKG0+Pj4xMyl8MCkr''@;'; put 'put ''KFdpPj4+MjYpfDAsV2kmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLFd0KSxtPShtPU1hdGguaW11bChIZSxBdCkpK01hdGguaW11bCh1dCxXdCl8MCxBPU1hdGguaW11bCh1dCxBdCksRT1FK01hdGguaW11bChpdCxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKGl0LFV0KXwwKStNYXRoLmltdWwo''@;'; put 'put ''JGUsc3QpfDAsQT1BK01hdGguaW11bCgkZSxVdCl8MCxFPUUrTWF0aC5pbXVsKHl0LFdlKXwwLG09KG09bStNYXRoLmltdWwoeXQsVHQpfDApK01hdGguaW11bChNdCxXZSl8MCxBPUErTWF0aC5pbXVsKE10LFR0KXwwLEU9RStNYXRoLmltdWwobnQsaHQpfDAsbT0obT1tK01hdGguaW11bChu''@;'; put 'put ''dCx4dCl8MCkrTWF0aC5pbXVsKFFlLGh0KXwwLEE9QStNYXRoLmltdWwoUWUseHQpfDAsRT1FK01hdGguaW11bChrZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKGtlLHp0KXwwKStNYXRoLmltdWwoQWUscm4pfDAsQT1BK01hdGguaW11bChBZSx6dCl8MCxFPUUrTWF0aC5pbXVsKE9lLGNuKXww''@;'; put 'put ''LG09KG09bStNYXRoLmltdWwoT2UsZm4pfDApK01hdGguaW11bChJZSxjbil8MCxBPUErTWF0aC5pbXVsKEllLGZuKXwwO3ZhciBwYT0oaisoRT1FK01hdGguaW11bCh6ZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHplLGVuKXwwKStNYXRoLmltdWwoRGUsWHQpfDApKTw8''@;'; put 'put ''MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoRGUsZW4pfDApKyhtPj4+MTMpfDApKyhwYT4+PjI2KXwwLHBhJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxzdCksbT0obT1NYXRoLmltdWwoSGUsVXQpKStNYXRoLmltdWwodXQsc3QpfDAsQT1NYXRoLmltdWwodXQsVXQpLEU9RStNYXRoLmltdWwo''@;'; put 'put ''aXQsV2UpfDAsbT0obT1tK01hdGguaW11bChpdCxUdCl8MCkrTWF0aC5pbXVsKCRlLFdlKXwwLEE9QStNYXRoLmltdWwoJGUsVHQpfDAsRT1FK01hdGguaW11bCh5dCxodCl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LHh0KXwwKStNYXRoLmltdWwoTXQsaHQpfDAsQT1BK01hdGguaW11bChNdCx4''@;'; put 'put ''dCl8MCxFPUUrTWF0aC5pbXVsKG50LHJuKXwwLG09KG09bStNYXRoLmltdWwobnQsenQpfDApK01hdGguaW11bChRZSxybil8MCxBPUErTWF0aC5pbXVsKFFlLHp0KXwwLEU9RStNYXRoLmltdWwoa2UsY24pfDAsbT0obT1tK01hdGguaW11bChrZSxmbil8MCkrTWF0aC5pbXVsKEFlLGNuKXww''@;'; put 'put ''LEE9QStNYXRoLmltdWwoQWUsZm4pfDA7dmFyIFFuPShqKyhFPUUrTWF0aC5pbXVsKE9lLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoT2UsZW4pfDApK01hdGguaW11bChJZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChJZSxlbil8MCkrKG0+Pj4xMyl8MCkr''@;'; put 'put ''KFFuPj4+MjYpfDAsUW4mPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLFdlKSxtPShtPU1hdGguaW11bChIZSxUdCkpK01hdGguaW11bCh1dCxXZSl8MCxBPU1hdGguaW11bCh1dCxUdCksRT1FK01hdGguaW11bChpdCxodCl8MCxtPShtPW0rTWF0aC5pbXVsKGl0LHh0KXwwKStNYXRoLmltdWwo''@;'; put 'put ''JGUsaHQpfDAsQT1BK01hdGguaW11bCgkZSx4dCl8MCxFPUUrTWF0aC5pbXVsKHl0LHJuKXwwLG09KG09bStNYXRoLmltdWwoeXQsenQpfDApK01hdGguaW11bChNdCxybil8MCxBPUErTWF0aC5pbXVsKE10LHp0KXwwLEU9RStNYXRoLmltdWwobnQsY24pfDAsbT0obT1tK01hdGguaW11bChu''@;'; put 'put ''dCxmbil8MCkrTWF0aC5pbXVsKFFlLGNuKXwwLEE9QStNYXRoLmltdWwoUWUsZm4pfDA7dmFyIGxhPShqKyhFPUUrTWF0aC5pbXVsKGtlLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoa2UsZW4pfDApK01hdGguaW11bChBZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGgu''@;'; put 'put ''aW11bChBZSxlbil8MCkrKG0+Pj4xMyl8MCkrKGxhPj4+MjYpfDAsbGEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLGh0KSxtPShtPU1hdGguaW11bChIZSx4dCkpK01hdGguaW11bCh1dCxodCl8MCxBPU1hdGguaW11bCh1dCx4dCksRT1FK01hdGguaW11bChpdCxybil8MCxtPShtPW0rTWF0''@;'; put 'put ''aC5pbXVsKGl0LHp0KXwwKStNYXRoLmltdWwoJGUscm4pfDAsQT1BK01hdGguaW11bCgkZSx6dCl8MCxFPUUrTWF0aC5pbXVsKHl0LGNuKXwwLG09KG09bStNYXRoLmltdWwoeXQsZm4pfDApK01hdGguaW11bChNdCxjbil8MCxBPUErTWF0aC5pbXVsKE10LGZuKXwwO3ZhciB5YT0oaisoRT1F''@;'; put 'put ''K01hdGguaW11bChudCxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG50LGVuKXwwKStNYXRoLmltdWwoUWUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoUWUsZW4pfDApKyhtPj4+MTMpfDApKyh5YT4+PjI2KXwwLHlhJj02NzEwODg2MyxFPU1hdGguaW11bChI''@;'; put 'put ''ZSxybiksbT0obT1NYXRoLmltdWwoSGUsenQpKStNYXRoLmltdWwodXQscm4pfDAsQT1NYXRoLmltdWwodXQsenQpLEU9RStNYXRoLmltdWwoaXQsY24pfDAsbT0obT1tK01hdGguaW11bChpdCxmbil8MCkrTWF0aC5pbXVsKCRlLGNuKXwwLEE9QStNYXRoLmltdWwoJGUsZm4pfDA7dmFyIExh''@;'; put 'put ''PShqKyhFPUUrTWF0aC5pbXVsKHl0LFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoeXQsZW4pfDApK01hdGguaW11bChNdCxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChNdCxlbil8MCkrKG0+Pj4xMyl8MCkrKExhPj4+MjYpfDAsTGEmPTY3MTA4ODYzLEU9TWF0''@;'; put 'put ''aC5pbXVsKEhlLGNuKSxtPShtPU1hdGguaW11bChIZSxmbikpK01hdGguaW11bCh1dCxjbil8MCxBPU1hdGguaW11bCh1dCxmbik7dmFyIEZhPShqKyhFPUUrTWF0aC5pbXVsKGl0LFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoaXQsZW4pfDApK01hdGguaW11bCgkZSxYdCl8''@;'; put 'put ''MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bCgkZSxlbil8MCkrKG0+Pj4xMyl8MCkrKEZhPj4+MjYpfDAsRmEmPTY3MTA4ODYzO3ZhciB0aT0oaisoRT1NYXRoLmltdWwoSGUsWHQpKXwwKSsoKDgxOTEmKG09KG09TWF0aC5pbXVsKEhlLGVuKSkrTWF0aC5pbXVsKHV0LFh0KXwwKSk8PDEz''@;'; put 'put ''KXwwO3JldHVybiBqPSgoQT1NYXRoLmltdWwodXQsZW4pKSsobT4+PjEzKXwwKSsodGk+Pj4yNil8MCx0aSY9NjcxMDg4NjMsSFswXT11YSxIWzFdPUVpLEhbMl09dnIsSFszXT1XbixIWzRdPSRpLEhbNV09ZWksSFs2XT1RcixIWzddPVZpLEhbOF09TmksSFs5XT1EYSxIWzEwXT1McixIWzEx''@;'; put 'put ''XT1XaSxIWzEyXT1wYSxIWzEzXT1RbixIWzE0XT1sYSxIWzE1XT15YSxIWzE2XT1MYSxIWzE3XT1GYSxIWzE4XT10aSwwIT09aiYmKEhbMTldPWoseC5sZW5ndGgrKykseH07ZnVuY3Rpb24gZWUoVixwLGIpe3JldHVybihuZXcgSikubXVscChWLHAsYil9ZnVuY3Rpb24gSihWLHApe3RoaXMu''@;'; put 'put ''eD1WLHRoaXMueT1wfU1hdGguaW11bHx8KFk9Vyksdy5wcm90b3R5cGUubXVsVG89ZnVuY3Rpb24ocCxiKXt2YXIgeCxDPXRoaXMubGVuZ3RoK3AubGVuZ3RoO3JldHVybiB4PTEwPT09dGhpcy5sZW5ndGgmJjEwPT09cC5sZW5ndGg/WSh0aGlzLHAsYik6Qzw2Mz9XKHRoaXMscCxiKTpDPDEw''@;'; put 'put ''MjQ/ZnVuY3Rpb24gcShWLHAsYil7Yi5uZWdhdGl2ZT1wLm5lZ2F0aXZlXlYubmVnYXRpdmUsYi5sZW5ndGg9Vi5sZW5ndGgrcC5sZW5ndGg7Zm9yKHZhciB4PTAsQz0wLFQ9MDtUPGIubGVuZ3RoLTE7VCsrKXt2YXIgSD1DO0M9MDtmb3IodmFyIGo9NjcxMDg4NjMmeCxFPU1hdGgubWluKFQs''@;'; put 'put ''cC5sZW5ndGgtMSksbT1NYXRoLm1heCgwLFQtVi5sZW5ndGgrMSk7bTw9RTttKyspe3ZhciBzZT0oMHxWLndvcmRzW1QtbV0pKigwfHAud29yZHNbbV0pLHdlPTY3MTA4ODYzJnNlO2o9NjcxMDg4NjMmKHdlPXdlK2p8MCksQys9KEg9KEg9SCsoc2UvNjcxMDg4NjR8MCl8MCkrKHdlPj4+MjYp''@;'; put 'put ''fDApPj4+MjYsSCY9NjcxMDg4NjN9Yi53b3Jkc1tUXT1qLHg9SCxIPUN9cmV0dXJuIDAhPT14P2Iud29yZHNbVF09eDpiLmxlbmd0aC0tLGIuc3RyaXAoKX0odGhpcyxwLGIpOmVlKHRoaXMscCxiKSx4fSxKLnByb3RvdHlwZS5tYWtlUkJUPWZ1bmN0aW9uKHApe2Zvcih2YXIgYj1uZXcgQXJy''@;'; put 'put ''YXkocCkseD13LnByb3RvdHlwZS5fY291bnRCaXRzKHApLTEsQz0wO0M8cDtDKyspYltDXT10aGlzLnJldkJpbihDLHgscCk7cmV0dXJuIGJ9LEoucHJvdG90eXBlLnJldkJpbj1mdW5jdGlvbihwLGIseCl7aWYoMD09PXB8fHA9PT14LTEpcmV0dXJuIHA7Zm9yKHZhciBDPTAsVD0wO1Q8YjtU''@;'; put 'put ''KyspQ3w9KDEmcCk8PGItVC0xLHA+Pj0xO3JldHVybiBDfSxKLnByb3RvdHlwZS5wZXJtdXRlPWZ1bmN0aW9uKHAsYix4LEMsVCxIKXtmb3IodmFyIGo9MDtqPEg7aisrKUNbal09YltwW2pdXSxUW2pdPXhbcFtqXV19LEoucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbihwLGIseCxDLFQs''@;'; put 'put ''SCl7dGhpcy5wZXJtdXRlKEgscCxiLHgsQyxUKTtmb3IodmFyIGo9MTtqPFQ7ajw8PTEpZm9yKHZhciBFPWo8PDEsbT1NYXRoLmNvcygyKk1hdGguUEkvRSksQT1NYXRoLnNpbigyKk1hdGguUEkvRSksYWU9MDthZTxUO2FlKz1FKWZvcih2YXIgdGU9bSxzZT1BLHdlPTA7d2U8ajt3ZSsrKXt2''@;'; put 'put ''YXIgVWU9eFthZSt3ZV0sSmU9Q1thZSt3ZV0sb3Q9eFthZSt3ZStqXSx4ZT1DW2FlK3dlK2pdLHZlPXRlKm90LXNlKnhlO3hlPXRlKnhlK3NlKm90LHhbYWUrd2VdPVVlKyhvdD12ZSksQ1thZSt3ZV09SmUreGUseFthZSt3ZStqXT1VZS1vdCxDW2FlK3dlK2pdPUplLXhlLHdlIT09RSYmKHZl''@;'; put 'put ''PW0qdGUtQSpzZSxzZT1tKnNlK0EqdGUsdGU9dmUpfX0sSi5wcm90b3R5cGUuZ3Vlc3NMZW4xM2I9ZnVuY3Rpb24ocCxiKXt2YXIgeD0xfE1hdGgubWF4KGIscCksQz0xJngsVD0wO2Zvcih4PXgvMnwwO3g7eD4+Pj0xKVQrKztyZXR1cm4gMTw8VCsxK0N9LEoucHJvdG90eXBlLmNvbmp1Z2F0''@;'; put 'put ''ZT1mdW5jdGlvbihwLGIseCl7aWYoISh4PD0xKSlmb3IodmFyIEM9MDtDPHgvMjtDKyspe3ZhciBUPXBbQ107cFtDXT1wW3gtQy0xXSxwW3gtQy0xXT1ULFQ9YltDXSxiW0NdPS1iW3gtQy0xXSxiW3gtQy0xXT0tVH19LEoucHJvdG90eXBlLm5vcm1hbGl6ZTEzYj1mdW5jdGlvbihwLGIpe2Zv''@;'; put 'put ''cih2YXIgeD0wLEM9MDtDPGIvMjtDKyspe3ZhciBUPTgxOTIqTWF0aC5yb3VuZChwWzIqQysxXS9iKStNYXRoLnJvdW5kKHBbMipDXS9iKSt4O3BbQ109NjcxMDg4NjMmVCx4PVQ8NjcxMDg4NjQ/MDpULzY3MTA4ODY0fDB9cmV0dXJuIHB9LEoucHJvdG90eXBlLmNvbnZlcnQxM2I9ZnVuY3Rp''@;'; put 'put ''b24ocCxiLHgsQyl7Zm9yKHZhciBUPTAsSD0wO0g8YjtIKyspeFsyKkhdPTgxOTEmKFQrPTB8cFtIXSkseFsyKkgrMV09ODE5MSYoVD4+Pj0xMyksVD4+Pj0xMztmb3IoSD0yKmI7SDxDOysrSCl4W0hdPTA7ZygwPT09VCksZyghKC04MTkyJlQpKX0sSi5wcm90b3R5cGUuc3R1Yj1mdW5jdGlv''@;'; put 'put ''bihwKXtmb3IodmFyIGI9bmV3IEFycmF5KHApLHg9MDt4PHA7eCsrKWJbeF09MDtyZXR1cm4gYn0sSi5wcm90b3R5cGUubXVscD1mdW5jdGlvbihwLGIseCl7dmFyIEM9Mip0aGlzLmd1ZXNzTGVuMTNiKHAubGVuZ3RoLGIubGVuZ3RoKSxUPXRoaXMubWFrZVJCVChDKSxIPXRoaXMuc3R1YihD''@;'; put 'put ''KSxqPW5ldyBBcnJheShDKSxFPW5ldyBBcnJheShDKSxtPW5ldyBBcnJheShDKSxBPW5ldyBBcnJheShDKSxhZT1uZXcgQXJyYXkoQyksdGU9bmV3IEFycmF5KEMpLHNlPXgud29yZHM7c2UubGVuZ3RoPUMsdGhpcy5jb252ZXJ0MTNiKHAud29yZHMscC5sZW5ndGgsaixDKSx0aGlzLmNvbnZl''@;'; put 'put ''cnQxM2IoYi53b3JkcyxiLmxlbmd0aCxBLEMpLHRoaXMudHJhbnNmb3JtKGosSCxFLG0sQyxUKSx0aGlzLnRyYW5zZm9ybShBLEgsYWUsdGUsQyxUKTtmb3IodmFyIHdlPTA7d2U8Qzt3ZSsrKXt2YXIgVWU9RVt3ZV0qYWVbd2VdLW1bd2VdKnRlW3dlXTttW3dlXT1FW3dlXSp0ZVt3ZV0rbVt3''@;'; put 'put ''ZV0qYWVbd2VdLEVbd2VdPVVlfXJldHVybiB0aGlzLmNvbmp1Z2F0ZShFLG0sQyksdGhpcy50cmFuc2Zvcm0oRSxtLHNlLEgsQyxUKSx0aGlzLmNvbmp1Z2F0ZShzZSxILEMpLHRoaXMubm9ybWFsaXplMTNiKHNlLEMpLHgubmVnYXRpdmU9cC5uZWdhdGl2ZV5iLm5lZ2F0aXZlLHgubGVuZ3Ro''@;'; put 'put ''PXAubGVuZ3RoK2IubGVuZ3RoLHguc3RyaXAoKX0sdy5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHApe3ZhciBiPW5ldyB3KG51bGwpO3JldHVybiBiLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtwLmxlbmd0aCksdGhpcy5tdWxUbyhwLGIpfSx3LnByb3RvdHlwZS5tdWxmPWZ1bmN0aW9u''@;'; put 'put ''KHApe3ZhciBiPW5ldyB3KG51bGwpO3JldHVybiBiLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtwLmxlbmd0aCksZWUodGhpcyxwLGIpfSx3LnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkubXVsVG8ocCx0aGlzKX0sdy5wcm90b3R5cGUuaW11bG49''@;'; put 'put ''ZnVuY3Rpb24ocCl7ZygibnVtYmVyIj09dHlwZW9mIHApLGcocDw2NzEwODg2NCk7Zm9yKHZhciBiPTAseD0wO3g8dGhpcy5sZW5ndGg7eCsrKXt2YXIgQz0oMHx0aGlzLndvcmRzW3hdKSpwLFQ9KDY3MTA4ODYzJkMpKyg2NzEwODg2MyZiKTtiPj49MjYsYis9Qy82NzEwODg2NHwwLGIrPVQ+''@;'; put 'put ''Pj4yNix0aGlzLndvcmRzW3hdPTY3MTA4ODYzJlR9cmV0dXJuIDAhPT1iJiYodGhpcy53b3Jkc1t4XT1iLHRoaXMubGVuZ3RoKyspLHRoaXMubGVuZ3RoPTA9PT1wPzE6dGhpcy5sZW5ndGgsdGhpc30sdy5wcm90b3R5cGUubXVsbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlt''@;'; put 'put ''dWxuKHApfSx3LnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tdWwodGhpcyl9LHcucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSl9LHcucHJvdG90eXBlLnBvdz1mdW5jdGlvbihwKXt2YXIgYj1mdW5jdGlvbiBVKFYp''@;'; put 'put ''e2Zvcih2YXIgcD1uZXcgQXJyYXkoVi5iaXRMZW5ndGgoKSksYj0wO2I8cC5sZW5ndGg7YisrKXt2YXIgQz1iJTI2O3BbYl09KFYud29yZHNbYi8yNnwwXSYxPDxDKT4+PkN9cmV0dXJuIHB9KHApO2lmKDA9PT1iLmxlbmd0aClyZXR1cm4gbmV3IHcoMSk7Zm9yKHZhciB4PXRoaXMsQz0wO0M8''@;'; put 'put ''Yi5sZW5ndGgmJjA9PT1iW0NdO0MrKyx4PXguc3FyKCkpO2lmKCsrQzxiLmxlbmd0aClmb3IodmFyIFQ9eC5zcXIoKTtDPGIubGVuZ3RoO0MrKyxUPVQuc3FyKCkpMCE9PWJbQ10mJih4PXgubXVsKFQpKTtyZXR1cm4geH0sdy5wcm90b3R5cGUuaXVzaGxuPWZ1bmN0aW9uKHApe2coIm51bWJl''@;'; put 'put ''ciI9PXR5cGVvZiBwJiZwPj0wKTt2YXIgVCxiPXAlMjYseD0ocC1iKS8yNixDPTY3MTA4ODYzPj4+MjYtYjw8MjYtYjtpZigwIT09Yil7dmFyIEg9MDtmb3IoVD0wO1Q8dGhpcy5sZW5ndGg7VCsrKXt2YXIgaj10aGlzLndvcmRzW1RdJkM7dGhpcy53b3Jkc1tUXT0oMHx0aGlzLndvcmRzW1Rd''@;'; put 'put ''KS1qPDxifEgsSD1qPj4+MjYtYn1IJiYodGhpcy53b3Jkc1tUXT1ILHRoaXMubGVuZ3RoKyspfWlmKDAhPT14KXtmb3IoVD10aGlzLmxlbmd0aC0xO1Q+PTA7VC0tKXRoaXMud29yZHNbVCt4XT10aGlzLndvcmRzW1RdO2ZvcihUPTA7VDx4O1QrKyl0aGlzLndvcmRzW1RdPTA7dGhpcy5sZW5n''@;'; put 'put ''dGgrPXh9cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXNobG49ZnVuY3Rpb24ocCl7cmV0dXJuIGcoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaGxuKHApfSx3LnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24ocCxiLHgpe3ZhciBDO2coIm51bWJlciI9PXR5cGVvZiBwJiZw''@;'; put 'put ''Pj0wKSxDPWI/KGItYiUyNikvMjY6MDt2YXIgVD1wJTI2LEg9TWF0aC5taW4oKHAtVCkvMjYsdGhpcy5sZW5ndGgpLGo9NjcxMDg4NjNeNjcxMDg4NjM+Pj5UPDxULEU9eDtpZihDLT1ILEM9TWF0aC5tYXgoMCxDKSxFKXtmb3IodmFyIG09MDttPEg7bSsrKUUud29yZHNbbV09dGhpcy53b3Jk''@;'; put 'put ''c1ttXTtFLmxlbmd0aD1IfWlmKDAhPT1IKWlmKHRoaXMubGVuZ3RoPkgpZm9yKHRoaXMubGVuZ3RoLT1ILG09MDttPHRoaXMubGVuZ3RoO20rKyl0aGlzLndvcmRzW21dPXRoaXMud29yZHNbbStIXTtlbHNlIHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xO3ZhciBBPTA7Zm9yKG09dGhp''@;'; put 'put ''cy5sZW5ndGgtMTttPj0wJiYoMCE9PUF8fG0+PUMpO20tLSl7dmFyIGFlPTB8dGhpcy53b3Jkc1ttXTt0aGlzLndvcmRzW21dPUE8PDI2LVR8YWU+Pj5ULEE9YWUman1yZXR1cm4gRSYmMCE9PUEmJihFLndvcmRzW0UubGVuZ3RoKytdPUEpLDA9PT10aGlzLmxlbmd0aCYmKHRoaXMud29yZHNb''@;'; put 'put ''MF09MCx0aGlzLmxlbmd0aD0xKSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlzaHJuPWZ1bmN0aW9uKHAsYix4KXtyZXR1cm4gZygwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNocm4ocCxiLHgpfSx3LnByb3RvdHlwZS5zaGxuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCku''@;'; put 'put ''aXNobG4ocCl9LHcucHJvdG90eXBlLnVzaGxuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaGxuKHApfSx3LnByb3RvdHlwZS5zaHJuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXNocm4ocCl9LHcucHJvdG90eXBlLnVzaHJuPWZ1bmN0aW9uKHApe3JldHVy''@;'; put 'put ''biB0aGlzLmNsb25lKCkuaXVzaHJuKHApfSx3LnByb3RvdHlwZS50ZXN0bj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIGI9cCUyNix4PShwLWIpLzI2O3JldHVybiEodGhpcy5sZW5ndGg8PXh8fCEodGhpcy53b3Jkc1t4XSYxPDxiKSl9LHcucHJvdG90eXBl''@;'; put 'put ''LmltYXNrbj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIGI9cCUyNix4PShwLWIpLzI2O3JldHVybiBnKDA9PT10aGlzLm5lZ2F0aXZlLCJpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJlcnMiKSx0aGlzLmxlbmd0aDw9eD90aGlzOigwIT09''@;'; put 'put ''YiYmeCsrLHRoaXMubGVuZ3RoPU1hdGgubWluKHgsdGhpcy5sZW5ndGgpLDAhPT1iJiYodGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSY9NjcxMDg4NjNeNjcxMDg4NjM+Pj5iPDxiKSx0aGlzLnN0cmlwKCkpfSx3LnByb3RvdHlwZS5tYXNrbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9u''@;'; put 'put ''ZSgpLmltYXNrbihwKX0sdy5wcm90b3R5cGUuaWFkZG49ZnVuY3Rpb24ocCl7cmV0dXJuIGcoIm51bWJlciI9PXR5cGVvZiBwKSxnKHA8NjcxMDg4NjQpLHA8MD90aGlzLmlzdWJuKC1wKTowIT09dGhpcy5uZWdhdGl2ZT8xPT09dGhpcy5sZW5ndGgmJigwfHRoaXMud29yZHNbMF0pPHA/KHRo''@;'; put 'put ''aXMud29yZHNbMF09cC0oMHx0aGlzLndvcmRzWzBdKSx0aGlzLm5lZ2F0aXZlPTAsdGhpcyk6KHRoaXMubmVnYXRpdmU9MCx0aGlzLmlzdWJuKHApLHRoaXMubmVnYXRpdmU9MSx0aGlzKTp0aGlzLl9pYWRkbihwKX0sdy5wcm90b3R5cGUuX2lhZGRuPWZ1bmN0aW9uKHApe3RoaXMud29yZHNb''@;'; put 'put ''MF0rPXA7Zm9yKHZhciBiPTA7Yjx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tiXT49NjcxMDg4NjQ7YisrKXRoaXMud29yZHNbYl0tPTY3MTA4ODY0LGI9PT10aGlzLmxlbmd0aC0xP3RoaXMud29yZHNbYisxXT0xOnRoaXMud29yZHNbYisxXSsrO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1h''@;'; put 'put ''eCh0aGlzLmxlbmd0aCxiKzEpLHRoaXN9LHcucHJvdG90eXBlLmlzdWJuPWZ1bmN0aW9uKHApe2lmKGcoIm51bWJlciI9PXR5cGVvZiBwKSxnKHA8NjcxMDg4NjQpLHA8MClyZXR1cm4gdGhpcy5pYWRkbigtcCk7aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0''@;'; put 'put ''aGlzLmlhZGRuKHApLHRoaXMubmVnYXRpdmU9MSx0aGlzO2lmKHRoaXMud29yZHNbMF0tPXAsMT09PXRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzWzBdPDApdGhpcy53b3Jkc1swXT0tdGhpcy53b3Jkc1swXSx0aGlzLm5lZ2F0aXZlPTE7ZWxzZSBmb3IodmFyIGI9MDtiPHRoaXMubGVuZ3RoJiZ0''@;'; put 'put ''aGlzLndvcmRzW2JdPDA7YisrKXRoaXMud29yZHNbYl0rPTY3MTA4ODY0LHRoaXMud29yZHNbYisxXS09MTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5hZGRuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaWFkZG4ocCl9LHcucHJvdG90eXBlLnN1Ym49ZnVuY3Rp''@;'; put 'put ''b24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3VibihwKX0sdy5wcm90b3R5cGUuaWFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpc30sdy5wcm90b3R5cGUuYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWJzKCl9LHcucHJvdG90eXBlLl9pc2hs''@;'; put 'put ''bnN1Ym11bD1mdW5jdGlvbihwLGIseCl7dmFyIFQ7dGhpcy5fZXhwYW5kKHAubGVuZ3RoK3gpO3ZhciBILGo9MDtmb3IoVD0wO1Q8cC5sZW5ndGg7VCsrKXtIPSgwfHRoaXMud29yZHNbVCt4XSkrajt2YXIgRT0oMHxwLndvcmRzW1RdKSpiO2o9KChILT02NzEwODg2MyZFKT4+MjYpLShFLzY3''@;'; put 'put ''MTA4ODY0fDApLHRoaXMud29yZHNbVCt4XT02NzEwODg2MyZIfWZvcig7VDx0aGlzLmxlbmd0aC14O1QrKylqPShIPSgwfHRoaXMud29yZHNbVCt4XSkraik+PjI2LHRoaXMud29yZHNbVCt4XT02NzEwODg2MyZIO2lmKDA9PT1qKXJldHVybiB0aGlzLnN0cmlwKCk7Zm9yKGcoLTE9PT1qKSxq''@;'; put 'put ''PTAsVD0wO1Q8dGhpcy5sZW5ndGg7VCsrKWo9KEg9LSgwfHRoaXMud29yZHNbVF0pK2opPj4yNix0aGlzLndvcmRzW1RdPTY3MTA4ODYzJkg7cmV0dXJuIHRoaXMubmVnYXRpdmU9MSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl93b3JkRGl2PWZ1bmN0aW9uKHAsYil7dmFyIHgsQz10aGlz''@;'; put 'put ''LmNsb25lKCksVD1wLEg9MHxULndvcmRzW1QubGVuZ3RoLTFdOzAhPSh4PTI2LXRoaXMuX2NvdW50Qml0cyhIKSkmJihUPVQudXNobG4oeCksQy5pdXNobG4oeCksSD0wfFQud29yZHNbVC5sZW5ndGgtMV0pO3ZhciBtLEU9Qy5sZW5ndGgtVC5sZW5ndGg7aWYoIm1vZCIhPT1iKXsobT1uZXcg''@;'; put 'put ''dyhudWxsKSkubGVuZ3RoPUUrMSxtLndvcmRzPW5ldyBBcnJheShtLmxlbmd0aCk7Zm9yKHZhciBBPTA7QTxtLmxlbmd0aDtBKyspbS53b3Jkc1tBXT0wfXZhciBhZT1DLmNsb25lKCkuX2lzaGxuc3VibXVsKFQsMSxFKTswPT09YWUubmVnYXRpdmUmJihDPWFlLG0mJihtLndvcmRzW0VdPTEp''@;'; put 'put ''KTtmb3IodmFyIHRlPUUtMTt0ZT49MDt0ZS0tKXt2YXIgc2U9NjcxMDg4NjQqKDB8Qy53b3Jkc1tULmxlbmd0aCt0ZV0pKygwfEMud29yZHNbVC5sZW5ndGgrdGUtMV0pO2ZvcihzZT1NYXRoLm1pbihzZS9IfDAsNjcxMDg4NjMpLEMuX2lzaGxuc3VibXVsKFQsc2UsdGUpOzAhPT1DLm5lZ2F0''@;'; put 'put ''aXZlOylzZS0tLEMubmVnYXRpdmU9MCxDLl9pc2hsbnN1Ym11bChULDEsdGUpLEMuaXNaZXJvKCl8fChDLm5lZ2F0aXZlXj0xKTttJiYobS53b3Jkc1t0ZV09c2UpfXJldHVybiBtJiZtLnN0cmlwKCksQy5zdHJpcCgpLCJkaXYiIT09YiYmMCE9PXgmJkMuaXVzaHJuKHgpLHtkaXY6bXx8bnVs''@;'; put 'put ''bCxtb2Q6Q319LHcucHJvdG90eXBlLmRpdm1vZD1mdW5jdGlvbihwLGIseCl7cmV0dXJuIGcoIXAuaXNaZXJvKCkpLHRoaXMuaXNaZXJvKCk/e2RpdjpuZXcgdygwKSxtb2Q6bmV3IHcoMCl9OjAhPT10aGlzLm5lZ2F0aXZlJiYwPT09cC5uZWdhdGl2ZT8oSD10aGlzLm5lZygpLmRpdm1vZChw''@;'; put 'put ''LGIpLCJtb2QiIT09YiYmKEM9SC5kaXYubmVnKCkpLCJkaXYiIT09YiYmKFQ9SC5tb2QubmVnKCkseCYmMCE9PVQubmVnYXRpdmUmJlQuaWFkZChwKSkse2RpdjpDLG1vZDpUfSk6MD09PXRoaXMubmVnYXRpdmUmJjAhPT1wLm5lZ2F0aXZlPyhIPXRoaXMuZGl2bW9kKHAubmVnKCksYiksIm1v''@;'; put 'put ''ZCIhPT1iJiYoQz1ILmRpdi5uZWcoKSkse2RpdjpDLG1vZDpILm1vZH0pOnRoaXMubmVnYXRpdmUmcC5uZWdhdGl2ZT8oSD10aGlzLm5lZygpLmRpdm1vZChwLm5lZygpLGIpLCJkaXYiIT09YiYmKFQ9SC5tb2QubmVnKCkseCYmMCE9PVQubmVnYXRpdmUmJlQuaXN1YihwKSkse2RpdjpILmRp''@;'; put 'put ''dixtb2Q6VH0pOnAubGVuZ3RoPnRoaXMubGVuZ3RofHx0aGlzLmNtcChwKTwwP3tkaXY6bmV3IHcoMCksbW9kOnRoaXN9OjE9PT1wLmxlbmd0aD8iZGl2Ij09PWI/e2Rpdjp0aGlzLmRpdm4ocC53b3Jkc1swXSksbW9kOm51bGx9OiJtb2QiPT09Yj97ZGl2Om51bGwsbW9kOm5ldyB3KHRoaXMu''@;'; put 'put ''bW9kbihwLndvcmRzWzBdKSl9OntkaXY6dGhpcy5kaXZuKHAud29yZHNbMF0pLG1vZDpuZXcgdyh0aGlzLm1vZG4ocC53b3Jkc1swXSkpfTp0aGlzLl93b3JkRGl2KHAsYik7dmFyIEMsVCxIfSx3LnByb3RvdHlwZS5kaXY9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuZGl2bW9kKHAsImRpdiIs''@;'; put 'put ''ITEpLmRpdn0sdy5wcm90b3R5cGUubW9kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmRpdm1vZChwLCJtb2QiLCExKS5tb2R9LHcucHJvdG90eXBlLnVtb2Q9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuZGl2bW9kKHAsIm1vZCIsITApLm1vZH0sdy5wcm90b3R5cGUuZGl2Um91bmQ9ZnVuY3Rp''@;'; put 'put ''b24ocCl7dmFyIGI9dGhpcy5kaXZtb2QocCk7aWYoYi5tb2QuaXNaZXJvKCkpcmV0dXJuIGIuZGl2O3ZhciB4PTAhPT1iLmRpdi5uZWdhdGl2ZT9iLm1vZC5pc3ViKHApOmIubW9kLEM9cC51c2hybigxKSxUPXAuYW5kbG4oMSksSD14LmNtcChDKTtyZXR1cm4gSDwwfHwxPT09VCYmMD09PUg/''@;'; put 'put ''Yi5kaXY6MCE9PWIuZGl2Lm5lZ2F0aXZlP2IuZGl2LmlzdWJuKDEpOmIuZGl2LmlhZGRuKDEpfSx3LnByb3RvdHlwZS5tb2RuPWZ1bmN0aW9uKHApe2cocDw9NjcxMDg4NjMpO2Zvcih2YXIgYj0oMTw8MjYpJXAseD0wLEM9dGhpcy5sZW5ndGgtMTtDPj0wO0MtLSl4PShiKngrKDB8dGhpcy53''@;'; put 'put ''b3Jkc1tDXSkpJXA7cmV0dXJuIHh9LHcucHJvdG90eXBlLmlkaXZuPWZ1bmN0aW9uKHApe2cocDw9NjcxMDg4NjMpO2Zvcih2YXIgYj0wLHg9dGhpcy5sZW5ndGgtMTt4Pj0wO3gtLSl7dmFyIEM9KDB8dGhpcy53b3Jkc1t4XSkrNjcxMDg4NjQqYjt0aGlzLndvcmRzW3hdPUMvcHwwLGI9QyVw''@;'; put 'put ''fXJldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmRpdm49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pZGl2bihwKX0sdy5wcm90b3R5cGUuZWdjZD1mdW5jdGlvbihwKXtnKDA9PT1wLm5lZ2F0aXZlKSxnKCFwLmlzWmVybygpKTt2YXIgYj10aGlzLHg9cC5jbG9uZSgp''@;'; put 'put ''O2I9MCE9PWIubmVnYXRpdmU/Yi51bW9kKHApOmIuY2xvbmUoKTtmb3IodmFyIEM9bmV3IHcoMSksVD1uZXcgdygwKSxIPW5ldyB3KDApLGo9bmV3IHcoMSksRT0wO2IuaXNFdmVuKCkmJnguaXNFdmVuKCk7KWIuaXVzaHJuKDEpLHguaXVzaHJuKDEpLCsrRTtmb3IodmFyIG09eC5jbG9uZSgp''@;'; put 'put ''LEE9Yi5jbG9uZSgpOyFiLmlzWmVybygpOyl7Zm9yKHZhciBhZT0wLHRlPTE7IShiLndvcmRzWzBdJnRlKSYmYWU8MjY7KythZSx0ZTw8PTEpO2lmKGFlPjApZm9yKGIuaXVzaHJuKGFlKTthZS0tID4wOykoQy5pc09kZCgpfHxULmlzT2RkKCkpJiYoQy5pYWRkKG0pLFQuaXN1YihBKSksQy5p''@;'; put 'put ''dXNocm4oMSksVC5pdXNocm4oMSk7Zm9yKHZhciBzZT0wLHdlPTE7ISh4LndvcmRzWzBdJndlKSYmc2U8MjY7KytzZSx3ZTw8PTEpO2lmKHNlPjApZm9yKHguaXVzaHJuKHNlKTtzZS0tID4wOykoSC5pc09kZCgpfHxqLmlzT2RkKCkpJiYoSC5pYWRkKG0pLGouaXN1YihBKSksSC5pdXNocm4o''@;'; put 'put ''MSksai5pdXNocm4oMSk7Yi5jbXAoeCk+PTA/KGIuaXN1Yih4KSxDLmlzdWIoSCksVC5pc3ViKGopKTooeC5pc3ViKGIpLEguaXN1YihDKSxqLmlzdWIoVCkpfXJldHVybnthOkgsYjpqLGdjZDp4Lml1c2hsbihFKX19LHcucHJvdG90eXBlLl9pbnZtcD1mdW5jdGlvbihwKXtnKDA9PT1wLm5l''@;'; put 'put ''Z2F0aXZlKSxnKCFwLmlzWmVybygpKTt2YXIgYWUsYj10aGlzLHg9cC5jbG9uZSgpO2I9MCE9PWIubmVnYXRpdmU/Yi51bW9kKHApOmIuY2xvbmUoKTtmb3IodmFyIEM9bmV3IHcoMSksVD1uZXcgdygwKSxIPXguY2xvbmUoKTtiLmNtcG4oMSk+MCYmeC5jbXBuKDEpPjA7KXtmb3IodmFyIGo9''@;'; put 'put ''MCxFPTE7IShiLndvcmRzWzBdJkUpJiZqPDI2OysraixFPDw9MSk7aWYoaj4wKWZvcihiLml1c2hybihqKTtqLS0gPjA7KUMuaXNPZGQoKSYmQy5pYWRkKEgpLEMuaXVzaHJuKDEpO2Zvcih2YXIgbT0wLEE9MTshKHgud29yZHNbMF0mQSkmJm08MjY7KyttLEE8PD0xKTtpZihtPjApZm9yKHgu''@;'; put 'put ''aXVzaHJuKG0pO20tLSA+MDspVC5pc09kZCgpJiZULmlhZGQoSCksVC5pdXNocm4oMSk7Yi5jbXAoeCk+PTA/KGIuaXN1Yih4KSxDLmlzdWIoVCkpOih4LmlzdWIoYiksVC5pc3ViKEMpKX1yZXR1cm4oYWU9MD09PWIuY21wbigxKT9DOlQpLmNtcG4oMCk8MCYmYWUuaWFkZChwKSxhZX0sdy5w''@;'; put 'put ''cm90b3R5cGUuZ2NkPWZ1bmN0aW9uKHApe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIHAuYWJzKCk7aWYocC5pc1plcm8oKSlyZXR1cm4gdGhpcy5hYnMoKTt2YXIgYj10aGlzLmNsb25lKCkseD1wLmNsb25lKCk7Yi5uZWdhdGl2ZT0wLHgubmVnYXRpdmU9MDtmb3IodmFyIEM9MDtiLmlzRXZl''@;'; put 'put ''bigpJiZ4LmlzRXZlbigpO0MrKyliLml1c2hybigxKSx4Lml1c2hybigxKTtmb3IoOzspe2Zvcig7Yi5pc0V2ZW4oKTspYi5pdXNocm4oMSk7Zm9yKDt4LmlzRXZlbigpOyl4Lml1c2hybigxKTt2YXIgVD1iLmNtcCh4KTtpZihUPDApe3ZhciBIPWI7Yj14LHg9SH1lbHNlIGlmKDA9PT1UfHww''@;'; put 'put ''PT09eC5jbXBuKDEpKWJyZWFrO2IuaXN1Yih4KX1yZXR1cm4geC5pdXNobG4oQyl9LHcucHJvdG90eXBlLmludm09ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuZWdjZChwKS5hLnVtb2QocCl9LHcucHJvdG90eXBlLmlzRXZlbj1mdW5jdGlvbigpe3JldHVybiEoMSZ0aGlzLndvcmRzWzBdKX0s''@;'; put 'put ''dy5wcm90b3R5cGUuaXNPZGQ9ZnVuY3Rpb24oKXtyZXR1cm4hKDEmfnRoaXMud29yZHNbMF0pfSx3LnByb3RvdHlwZS5hbmRsbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy53b3Jkc1swXSZwfSx3LnByb3RvdHlwZS5iaW5jbj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCk7dmFy''@;'; put 'put ''IGI9cCUyNix4PShwLWIpLzI2LEM9MTw8YjtpZih0aGlzLmxlbmd0aDw9eClyZXR1cm4gdGhpcy5fZXhwYW5kKHgrMSksdGhpcy53b3Jkc1t4XXw9Qyx0aGlzO2Zvcih2YXIgVD1DLEg9eDswIT09VCYmSDx0aGlzLmxlbmd0aDtIKyspe3ZhciBqPTB8dGhpcy53b3Jkc1tIXTtUPShqKz1UKT4+''@;'; put 'put ''PjI2LHRoaXMud29yZHNbSF09aiY9NjcxMDg4NjN9cmV0dXJuIDAhPT1UJiYodGhpcy53b3Jkc1tIXT1ULHRoaXMubGVuZ3RoKyspLHRoaXN9LHcucHJvdG90eXBlLmlzWmVybz1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdfSx3LnByb3RvdHlw''@;'; put 'put ''ZS5jbXBuPWZ1bmN0aW9uKHApe3ZhciB4LGI9cDwwO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYhYilyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmYilyZXR1cm4gMTtpZih0aGlzLnN0cmlwKCksdGhpcy5sZW5ndGg+MSl4PTE7ZWxzZXtiJiYocD0tcCksZyhwPD02NzEwODg2MywiTnVt''@;'; put 'put ''YmVyIGlzIHRvbyBiaWciKTt2YXIgQz0wfHRoaXMud29yZHNbMF07eD1DPT09cD8wOkM8cD8tMToxfXJldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC14Onh9LHcucHJvdG90eXBlLmNtcD1mdW5jdGlvbihwKXtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PXAubmVnYXRpdmUpcmV0dXJuLTE7''@;'; put 'put ''aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1wLm5lZ2F0aXZlKXJldHVybiAxO3ZhciBiPXRoaXMudWNtcChwKTtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtYjpifSx3LnByb3RvdHlwZS51Y21wPWZ1bmN0aW9uKHApe2lmKHRoaXMubGVuZ3RoPnAubGVuZ3RoKXJldHVybiAxO2lmKHRo''@;'; put 'put ''aXMubGVuZ3RoPHAubGVuZ3RoKXJldHVybi0xO2Zvcih2YXIgYj0wLHg9dGhpcy5sZW5ndGgtMTt4Pj0wO3gtLSl7dmFyIEM9MHx0aGlzLndvcmRzW3hdLFQ9MHxwLndvcmRzW3hdO2lmKEMhPT1UKXtDPFQ/Yj0tMTpDPlQmJihiPTEpO2JyZWFrfX1yZXR1cm4gYn0sdy5wcm90b3R5cGUuZ3Ru''@;'; put 'put ''PWZ1bmN0aW9uKHApe3JldHVybiAxPT09dGhpcy5jbXBuKHApfSx3LnByb3RvdHlwZS5ndD1mdW5jdGlvbihwKXtyZXR1cm4gMT09PXRoaXMuY21wKHApfSx3LnByb3RvdHlwZS5ndGVuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNtcG4ocCk+PTB9LHcucHJvdG90eXBlLmd0ZT1mdW5jdGlv''@;'; put 'put ''bihwKXtyZXR1cm4gdGhpcy5jbXAocCk+PTB9LHcucHJvdG90eXBlLmx0bj1mdW5jdGlvbihwKXtyZXR1cm4tMT09PXRoaXMuY21wbihwKX0sdy5wcm90b3R5cGUubHQ9ZnVuY3Rpb24ocCl7cmV0dXJuLTE9PT10aGlzLmNtcChwKX0sdy5wcm90b3R5cGUubHRlbj1mdW5jdGlvbihwKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5jbXBuKHApPD0wfSx3LnByb3RvdHlwZS5sdGU9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY21wKHApPD0wfSx3LnByb3RvdHlwZS5lcW49ZnVuY3Rpb24ocCl7cmV0dXJuIDA9PT10aGlzLmNtcG4ocCl9LHcucHJvdG90eXBlLmVxPWZ1bmN0aW9uKHApe3JldHVybiAwPT09dGhp''@;'; put 'put ''cy5jbXAocCl9LHcucmVkPWZ1bmN0aW9uKHApe3JldHVybiBuZXcgU2UocCl9LHcucHJvdG90eXBlLnRvUmVkPWZ1bmN0aW9uKHApe3JldHVybiBnKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLGcoMD09PXRoaXMubmVnYXRpdmUsInJlZCB3b3Jr''@;'; put 'put ''cyBvbmx5IHdpdGggcG9zaXRpdmVzIikscC5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKHApfSx3LnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlz''@;'; put 'put ''LnJlZC5jb252ZXJ0RnJvbSh0aGlzKX0sdy5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLnJlZD1wLHRoaXN9LHcucHJvdG90eXBlLmZvcmNlUmVkPWZ1bmN0aW9uKHApe3JldHVybiBnKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24g''@;'; put 'put ''Y29udGV4dCIpLHRoaXMuX2ZvcmNlUmVkKHApfSx3LnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5hZGQodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlv''@;'; put 'put ''bihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pYWRkKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZFN1Yj1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVt''@;'; put 'put ''YmVycyIpLHRoaXMucmVkLnN1Yih0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlzdWIodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkU2hsPWZ1bmN0''@;'; put 'put ''aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc2hsKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZE11bD1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVt''@;'; put 'put ''YmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMscCksdGhpcy5yZWQubXVsKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlz''@;'; put 'put ''LHApLHRoaXMucmVkLmltdWwodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXIodGhpcyl9LHcucHJvdG90''@;'; put 'put ''eXBlLnJlZElTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIGco''@;'; put 'put ''dGhpcy5yZWQsInJlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0sdy5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0''@;'; put 'put ''aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9LHcucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEo''@;'; put 'put ''dGhpcyksdGhpcy5yZWQubmVnKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQmJiFwLnJlZCwicmVkUG93KG5vcm1hbE51bSkiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3codGhpcyxwKX07dmFyIG5lPXtrMjU2Om51''@;'; put 'put ''bGwscDIyNDpudWxsLHAxOTI6bnVsbCxwMjU1MTk6bnVsbH07ZnVuY3Rpb24gaWUoVixwKXt0aGlzLm5hbWU9Vix0aGlzLnA9bmV3IHcocCwxNiksdGhpcy5uPXRoaXMucC5iaXRMZW5ndGgoKSx0aGlzLms9bmV3IHcoMSkuaXVzaGxuKHRoaXMubikuaXN1Yih0aGlzLnApLHRoaXMudG1wPXRo''@;'; put 'put ''aXMuX3RtcCgpfWZ1bmN0aW9uIGxlKCl7aWUuY2FsbCh0aGlzLCJrMjU2IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYiKX1mdW5jdGlvbiBtZSgpe2llLmNhbGwodGhpcywicDIyNCIsImZmZmZmZmZmIGZm''@;'; put 'put ''ZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxIil9ZnVuY3Rpb24gX2UoKXtpZS5jYWxsKHRoaXMsInAxOTIiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZiIpfWZ1bmN0aW9uIFRlKCl7aWUuY2Fs''@;'; put 'put ''bCh0aGlzLCIyNTUxOSIsIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiKX1mdW5jdGlvbiBTZShWKXtpZigic3RyaW5nIj09dHlwZW9mIFYpe3ZhciBwPXcuX3ByaW1lKFYpO3RoaXMubT1wLnAsdGhpcy5wcmltZT1w''@;'; put 'put ''fWVsc2UgZyhWLmd0bigxKSwibW9kdWx1cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxIiksdGhpcy5tPVYsdGhpcy5wcmltZT1udWxsfWZ1bmN0aW9uIGplKFYpe1NlLmNhbGwodGhpcyxWKSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0aGlzLnNoaWZ0JTI2IT0wJiYodGhpcy5zaGlm''@;'; put 'put ''dCs9MjYtdGhpcy5zaGlmdCUyNiksdGhpcy5yPW5ldyB3KDEpLml1c2hsbih0aGlzLnNoaWZ0KSx0aGlzLnIyPXRoaXMuaW1vZCh0aGlzLnIuc3FyKCkpLHRoaXMucmludj10aGlzLnIuX2ludm1wKHRoaXMubSksdGhpcy5taW52PXRoaXMucmludi5tdWwodGhpcy5yKS5pc3VibigxKS5kaXYo''@;'; put 'put ''dGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5taW52LnVtb2QodGhpcy5yKSx0aGlzLm1pbnY9dGhpcy5yLnN1Yih0aGlzLm1pbnYpfWllLnByb3RvdHlwZS5fdG1wPWZ1bmN0aW9uKCl7dmFyIHA9bmV3IHcobnVsbCk7cmV0dXJuIHAud29yZHM9bmV3IEFycmF5KE1hdGguY2VpbCh0aGlzLm4vMTMp''@;'; put 'put ''KSxwfSxpZS5wcm90b3R5cGUuaXJlZHVjZT1mdW5jdGlvbihwKXt2YXIgeCxiPXA7ZG97dGhpcy5zcGxpdChiLHRoaXMudG1wKSx4PShiPShiPXRoaXMuaW11bEsoYikpLmlhZGQodGhpcy50bXApKS5iaXRMZW5ndGgoKX13aGlsZSh4PnRoaXMubik7dmFyIEM9eDx0aGlzLm4/LTE6Yi51Y21w''@;'; put 'put ''KHRoaXMucCk7cmV0dXJuIDA9PT1DPyhiLndvcmRzWzBdPTAsYi5sZW5ndGg9MSk6Qz4wP2IuaXN1Yih0aGlzLnApOnZvaWQgMCE9PWIuc3RyaXA/Yi5zdHJpcCgpOmIuX3N0cmlwKCksYn0saWUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKHAsYil7cC5pdXNocm4odGhpcy5uLDAsYil9LGll''@;'; put 'put ''LnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihwKXtyZXR1cm4gcC5pbXVsKHRoaXMuayl9LEIobGUsaWUpLGxlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihwLGIpe2Zvcih2YXIgeD00MTk0MzAzLEM9TWF0aC5taW4ocC5sZW5ndGgsOSksVD0wO1Q8QztUKyspYi53b3Jkc1tUXT1wLndvcmRz''@;'; put 'put ''W1RdO2lmKGIubGVuZ3RoPUMscC5sZW5ndGg8PTkpcmV0dXJuIHAud29yZHNbMF09MCx2b2lkKHAubGVuZ3RoPTEpO3ZhciBIPXAud29yZHNbOV07Zm9yKGIud29yZHNbYi5sZW5ndGgrK109SCZ4LFQ9MTA7VDxwLmxlbmd0aDtUKyspe3ZhciBqPTB8cC53b3Jkc1tUXTtwLndvcmRzW1QtMTBd''@;'; put 'put ''PShqJngpPDw0fEg+Pj4yMixIPWp9cC53b3Jkc1tULTEwXT1IPj4+PTIyLHAubGVuZ3RoLT0wPT09SCYmcC5sZW5ndGg+MTA/MTA6OX0sbGUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHApe3Aud29yZHNbcC5sZW5ndGhdPTAscC53b3Jkc1twLmxlbmd0aCsxXT0wLHAubGVuZ3RoKz0yO2Zv''@;'; put 'put ''cih2YXIgYj0wLHg9MDt4PHAubGVuZ3RoO3grKyl7dmFyIEM9MHxwLndvcmRzW3hdO3Aud29yZHNbeF09NjcxMDg4NjMmKGIrPTk3NypDKSxiPTY0KkMrKGIvNjcxMDg4NjR8MCl9cmV0dXJuIDA9PT1wLndvcmRzW3AubGVuZ3RoLTFdJiYocC5sZW5ndGgtLSwwPT09cC53b3Jkc1twLmxlbmd0''@;'; put 'put ''aC0xXSYmcC5sZW5ndGgtLSkscH0sQihtZSxpZSksQihfZSxpZSksQihUZSxpZSksVGUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHApe2Zvcih2YXIgYj0wLHg9MDt4PHAubGVuZ3RoO3grKyl7dmFyIEM9MTkqKDB8cC53b3Jkc1t4XSkrYixUPTY3MTA4ODYzJkM7Qz4+Pj0yNixwLndvcmRz''@;'; put 'put ''W3hdPVQsYj1DfXJldHVybiAwIT09YiYmKHAud29yZHNbcC5sZW5ndGgrK109YikscH0sdy5fcHJpbWU9ZnVuY3Rpb24ocCl7aWYobmVbcF0pcmV0dXJuIG5lW3BdO3ZhciBiO2lmKCJrMjU2Ij09PXApYj1uZXcgbGU7ZWxzZSBpZigicDIyNCI9PT1wKWI9bmV3IG1lO2Vsc2UgaWYoInAxOTIi''@;'; put 'put ''PT09cCliPW5ldyBfZTtlbHNle2lmKCJwMjU1MTkiIT09cCl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gcHJpbWUgIitwKTtiPW5ldyBUZX1yZXR1cm4gbmVbcF09YixifSxTZS5wcm90b3R5cGUuX3ZlcmlmeTE9ZnVuY3Rpb24ocCl7ZygwPT09cC5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkg''@;'; put 'put ''d2l0aCBwb3NpdGl2ZXMiKSxnKHAucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LFNlLnByb3RvdHlwZS5fdmVyaWZ5Mj1mdW5jdGlvbihwLGIpe2coIShwLm5lZ2F0aXZlfGIubmVnYXRpdmUpLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLGcocC5yZWQm''@;'; put 'put ''JnAucmVkPT09Yi5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sU2UucHJvdG90eXBlLmltb2Q9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMucHJpbWU/dGhpcy5wcmltZS5pcmVkdWNlKHApLl9mb3JjZVJlZCh0aGlzKTpwLnVtb2QodGhpcy5tKS5fZm9yY2VSZWQodGhp''@;'; put 'put ''cyl9LFNlLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24ocCl7cmV0dXJuIHAuaXNaZXJvKCk/cC5jbG9uZSgpOnRoaXMubS5zdWIocCkuX2ZvcmNlUmVkKHRoaXMpfSxTZS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHAsYil7dGhpcy5fdmVyaWZ5MihwLGIpO3ZhciB4PXAuYWRkKGIpO3JldHVybiB4''@;'; put 'put ''LmNtcCh0aGlzLm0pPj0wJiZ4LmlzdWIodGhpcy5tKSx4Ll9mb3JjZVJlZCh0aGlzKX0sU2UucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24ocCxiKXt0aGlzLl92ZXJpZnkyKHAsYik7dmFyIHg9cC5pYWRkKGIpO3JldHVybiB4LmNtcCh0aGlzLm0pPj0wJiZ4LmlzdWIodGhpcy5tKSx4fSxTZS5w''@;'; put 'put ''cm90b3R5cGUuc3ViPWZ1bmN0aW9uKHAsYil7dGhpcy5fdmVyaWZ5MihwLGIpO3ZhciB4PXAuc3ViKGIpO3JldHVybiB4LmNtcG4oMCk8MCYmeC5pYWRkKHRoaXMubSkseC5fZm9yY2VSZWQodGhpcyl9LFNlLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKHAsYil7dGhpcy5fdmVyaWZ5MihwLGIp''@;'; put 'put ''O3ZhciB4PXAuaXN1YihiKTtyZXR1cm4geC5jbXBuKDApPDAmJnguaWFkZCh0aGlzLm0pLHh9LFNlLnByb3RvdHlwZS5zaGw9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MShwKSx0aGlzLmltb2QocC51c2hsbihiKSl9LFNlLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHAsYil7''@;'; put 'put ''cmV0dXJuIHRoaXMuX3ZlcmlmeTIocCxiKSx0aGlzLmltb2QocC5pbXVsKGIpKX0sU2UucHJvdG90eXBlLm11bD1mdW5jdGlvbihwLGIpe3JldHVybiB0aGlzLl92ZXJpZnkyKHAsYiksdGhpcy5pbW9kKHAubXVsKGIpKX0sU2UucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24ocCl7cmV0dXJuIHRo''@;'; put 'put ''aXMuaW11bChwLHAuY2xvbmUoKSl9LFNlLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubXVsKHAscCl9LFNlLnByb3RvdHlwZS5zcXJ0PWZ1bmN0aW9uKHApe2lmKHAuaXNaZXJvKCkpcmV0dXJuIHAuY2xvbmUoKTt2YXIgYj10aGlzLm0uYW5kbG4oMyk7aWYoZyhiJTI9''@;'; put 'put ''PTEpLDM9PT1iKXt2YXIgeD10aGlzLm0uYWRkKG5ldyB3KDEpKS5pdXNocm4oMik7cmV0dXJuIHRoaXMucG93KHAseCl9Zm9yKHZhciBDPXRoaXMubS5zdWJuKDEpLFQ9MDshQy5pc1plcm8oKSYmMD09PUMuYW5kbG4oMSk7KVQrKyxDLml1c2hybigxKTtnKCFDLmlzWmVybygpKTt2YXIgSD1u''@;'; put 'put ''ZXcgdygxKS50b1JlZCh0aGlzKSxqPUgucmVkTmVnKCksRT10aGlzLm0uc3VibigxKS5pdXNocm4oMSksbT10aGlzLm0uYml0TGVuZ3RoKCk7Zm9yKG09bmV3IHcoMiptKm0pLnRvUmVkKHRoaXMpOzAhPT10aGlzLnBvdyhtLEUpLmNtcChqKTspbS5yZWRJQWRkKGopO2Zvcih2YXIgQT10aGlz''@;'; put 'put ''LnBvdyhtLEMpLGFlPXRoaXMucG93KHAsQy5hZGRuKDEpLml1c2hybigxKSksdGU9dGhpcy5wb3cocCxDKSxzZT1UOzAhPT10ZS5jbXAoSCk7KXtmb3IodmFyIHdlPXRlLFVlPTA7MCE9PXdlLmNtcChIKTtVZSsrKXdlPXdlLnJlZFNxcigpO2coVWU8c2UpO3ZhciBKZT10aGlzLnBvdyhBLG5l''@;'; put 'put ''dyB3KDEpLml1c2hsbihzZS1VZS0xKSk7YWU9YWUucmVkTXVsKEplKSxBPUplLnJlZFNxcigpLHRlPXRlLnJlZE11bChBKSxzZT1VZX1yZXR1cm4gYWV9LFNlLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHApe3ZhciBiPXAuX2ludm1wKHRoaXMubSk7cmV0dXJuIDAhPT1iLm5lZ2F0aXZlPyhi''@;'; put 'put ''Lm5lZ2F0aXZlPTAsdGhpcy5pbW9kKGIpLnJlZE5lZygpKTp0aGlzLmltb2QoYil9LFNlLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24ocCxiKXtpZihiLmlzWmVybygpKXJldHVybiBuZXcgdygxKS50b1JlZCh0aGlzKTtpZigwPT09Yi5jbXBuKDEpKXJldHVybiBwLmNsb25lKCk7dmFyIEM9bmV3''@;'; put 'put ''IEFycmF5KDE2KTtDWzBdPW5ldyB3KDEpLnRvUmVkKHRoaXMpLENbMV09cDtmb3IodmFyIFQ9MjtUPEMubGVuZ3RoO1QrKylDW1RdPXRoaXMubXVsKENbVC0xXSxwKTt2YXIgSD1DWzBdLGo9MCxFPTAsbT1iLmJpdExlbmd0aCgpJTI2O2ZvcigwPT09bSYmKG09MjYpLFQ9Yi5sZW5ndGgtMTtU''@;'; put 'put ''Pj0wO1QtLSl7Zm9yKHZhciBBPWIud29yZHNbVF0sYWU9bS0xO2FlPj0wO2FlLS0pe3ZhciB0ZT1BPj5hZSYxO0ghPT1DWzBdJiYoSD10aGlzLnNxcihIKSksMCE9PXRlfHwwIT09aj8oajw8PTEsanw9dGUsKDQ9PSsrRXx8MD09PVQmJjA9PT1hZSkmJihIPXRoaXMubXVsKEgsQ1tqXSksRT0w''@;'; put 'put ''LGo9MCkpOkU9MH1tPTI2fXJldHVybiBIfSxTZS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKHApe3ZhciBiPXAudW1vZCh0aGlzLm0pO3JldHVybiBiPT09cD9iLmNsb25lKCk6Yn0sU2UucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKHApe3ZhciBiPXAuY2xvbmUoKTtyZXR1''@;'; put 'put ''cm4gYi5yZWQ9bnVsbCxifSx3Lm1vbnQ9ZnVuY3Rpb24ocCl7cmV0dXJuIG5ldyBqZShwKX0sQihqZSxTZSksamUucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5pbW9kKHAudXNobG4odGhpcy5zaGlmdCkpfSxqZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVu''@;'; put 'put ''Y3Rpb24ocCl7dmFyIGI9dGhpcy5pbW9kKHAubXVsKHRoaXMucmludikpO3JldHVybiBiLnJlZD1udWxsLGJ9LGplLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHAsYil7aWYocC5pc1plcm8oKXx8Yi5pc1plcm8oKSlyZXR1cm4gcC53b3Jkc1swXT0wLHAubGVuZ3RoPTEscDt2YXIgeD1wLmlt''@;'; put 'put ''dWwoYiksQz14Lm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxUPXguaXN1YihDKS5pdXNocm4odGhpcy5zaGlmdCksSD1UO3JldHVybiBULmNtcCh0aGlzLm0pPj0wP0g9VC5pc3ViKHRoaXMubSk6VC5jbXBuKDApPDAmJihI''@;'; put 'put ''PVQuaWFkZCh0aGlzLm0pKSxILl9mb3JjZVJlZCh0aGlzKX0samUucHJvdG90eXBlLm11bD1mdW5jdGlvbihwLGIpe2lmKHAuaXNaZXJvKCl8fGIuaXNaZXJvKCkpcmV0dXJuIG5ldyB3KDApLl9mb3JjZVJlZCh0aGlzKTt2YXIgeD1wLm11bChiKSxDPXgubWFza24odGhpcy5zaGlmdCkubXVs''@;'; put 'put ''KHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLFQ9eC5pc3ViKEMpLml1c2hybih0aGlzLnNoaWZ0KSxIPVQ7cmV0dXJuIFQuY21wKHRoaXMubSk+PTA/SD1ULmlzdWIodGhpcy5tKTpULmNtcG4oMCk8MCYmKEg9VC5pYWRkKHRoaXMubSkpLEguX2ZvcmNlUmVkKHRo''@;'; put 'put ''aXMpfSxqZS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5pbW9kKHAuX2ludm1wKHRoaXMubSkubXVsKHRoaXMucjIpKS5fZm9yY2VSZWQodGhpcyl9fSh1ZT15Lm5tZCh1ZSksdGhpcyl9LDY3MjExOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNzE5OTMp''@;'; put 'put ''LF89eSgzNDcyNSksZz15KDM2NjM2KSxCPXkoMjU0NDMpLHc9eSgzMjQ3KTtmdW5jdGlvbiBQKEYpe3cuY2FsbCh0aGlzLCJkaWdlc3QiKSx0aGlzLl9oYXNoPUZ9SShQLHcpLFAucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oRil7dGhpcy5faGFzaC51cGRhdGUoRil9LFAucHJvdG90eXBl''@;'; put 'put ''Ll9maW5hbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9oYXNoLmRpZ2VzdCgpfSx1ZS5leHBvcnRzPWZ1bmN0aW9uKE8pe3JldHVybiJtZDUiPT09KE89Ty50b0xvd2VyQ2FzZSgpKT9uZXcgXzoicm1kMTYwIj09PU98fCJyaXBlbWQxNjAiPT09Tz9uZXcgZzpuZXcgUChCKE8pKX19LDgzNDA3''@;'; put 'put ''Oih1ZSxYLHkpPT57dmFyIEk9eSgzNDcyNSk7dWUuZXhwb3J0cz1mdW5jdGlvbihfKXtyZXR1cm4obmV3IEkpLnVwZGF0ZShfKS5kaWdlc3QoKX19LDU2NDMyOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNzE5OTMpLF89eSg5MDUwOSksZz15KDMyNDcpLEI9eSgyNzA1NCkuQnVm''@;'; put 'put ''ZmVyLHc9eSg4MzQwNyksUD15KDM2NjM2KSxGPXkoMjU0NDMpLE89Qi5hbGxvYygxMjgpO2Z1bmN0aW9uIHooTixMKXtnLmNhbGwodGhpcywiZGlnZXN0IiksInN0cmluZyI9PXR5cGVvZiBMJiYoTD1CLmZyb20oTCkpO3ZhciBLPSJzaGE1MTIiPT09Tnx8InNoYTM4NCI9PT1OPzEyODo2NDt0''@;'; put 'put ''aGlzLl9hbGc9Tix0aGlzLl9rZXk9TCxMLmxlbmd0aD5LP0w9KCJybWQxNjAiPT09Tj9uZXcgUDpGKE4pKS51cGRhdGUoTCkuZGlnZXN0KCk6TC5sZW5ndGg8SyYmKEw9Qi5jb25jYXQoW0wsT10sSykpO2Zvcih2YXIgVz10aGlzLl9pcGFkPUIuYWxsb2NVbnNhZmUoSyksWT10aGlzLl9vcGFk''@;'; put 'put ''PUIuYWxsb2NVbnNhZmUoSykscT0wO3E8SztxKyspV1txXT01NF5MW3FdLFlbcV09OTJeTFtxXTt0aGlzLl9oYXNoPSJybWQxNjAiPT09Tj9uZXcgUDpGKE4pLHRoaXMuX2hhc2gudXBkYXRlKFcpfUkoeixnKSx6LnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKE4pe3RoaXMuX2hhc2gudXBk''@;'; put 'put ''YXRlKE4pfSx6LnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXt2YXIgTj10aGlzLl9oYXNoLmRpZ2VzdCgpO3JldHVybigicm1kMTYwIj09PXRoaXMuX2FsZz9uZXcgUDpGKHRoaXMuX2FsZykpLnVwZGF0ZSh0aGlzLl9vcGFkKS51cGRhdGUoTikuZGlnZXN0KCl9LHVlLmV4cG9ydHM9ZnVu''@;'; put 'put ''Y3Rpb24oTCxLKXtyZXR1cm4icm1kMTYwIj09PShMPUwudG9Mb3dlckNhc2UoKSl8fCJyaXBlbWQxNjAiPT09TD9uZXcgeigicm1kMTYwIixLKToibWQ1Ij09PUw/bmV3IF8odyxLKTpuZXcgeihMLEspfX0sOTA1MDk6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg3MTk5MyksXz15''@;'; put 'put ''KDI3MDU0KS5CdWZmZXIsZz15KDMyNDcpLEI9Xy5hbGxvYygxMjgpLHc9NjQ7ZnVuY3Rpb24gUChGLE8pe2cuY2FsbCh0aGlzLCJkaWdlc3QiKSwic3RyaW5nIj09dHlwZW9mIE8mJihPPV8uZnJvbShPKSksdGhpcy5fYWxnPUYsdGhpcy5fa2V5PU8sTy5sZW5ndGg+dz9PPUYoTyk6Ty5sZW5n''@;'; put 'put ''dGg8dyYmKE89Xy5jb25jYXQoW08sQl0sdykpO2Zvcih2YXIgej10aGlzLl9pcGFkPV8uYWxsb2NVbnNhZmUodyksTj10aGlzLl9vcGFkPV8uYWxsb2NVbnNhZmUodyksTD0wO0w8dztMKyspeltMXT01NF5PW0xdLE5bTF09OTJeT1tMXTt0aGlzLl9oYXNoPVt6XX1JKFAsZyksUC5wcm90b3R5''@;'; put 'put ''cGUuX3VwZGF0ZT1mdW5jdGlvbihGKXt0aGlzLl9oYXNoLnB1c2goRil9LFAucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3ZhciBGPXRoaXMuX2FsZyhfLmNvbmNhdCh0aGlzLl9oYXNoKSk7cmV0dXJuIHRoaXMuX2FsZyhfLmNvbmNhdChbdGhpcy5fb3BhZCxGXSkpfSx1ZS5leHBvcnRz''@;'; put 'put ''PVB9LDkxNDI2Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO1gucmFuZG9tQnl0ZXM9WC5ybmc9WC5wc2V1ZG9SYW5kb21CeXRlcz1YLnBybmc9eSgzMzQyKSxYLmNyZWF0ZUhhc2g9WC5IYXNoPXkoNjcyMTEpLFguY3JlYXRlSG1hYz1YLkhtYWM9eSg1NjQzMik7dmFyIEk9eSg5OTU2MCksXz1P''@;'; put 'put ''YmplY3Qua2V5cyhJKSxnPVsic2hhMSIsInNoYTIyNCIsInNoYTI1NiIsInNoYTM4NCIsInNoYTUxMiIsIm1kNSIsInJtZDE2MCJdLmNvbmNhdChfKTtYLmdldEhhc2hlcz1mdW5jdGlvbigpe3JldHVybiBnfTt2YXIgQj15KDkzMzk3KTtYLnBia2RmMj1CLnBia2RmMixYLnBia2RmMlN5bmM9''@;'; put 'put ''Qi5wYmtkZjJTeW5jO3ZhciB3PXkoODg4NjIpO1guQ2lwaGVyPXcuQ2lwaGVyLFguY3JlYXRlQ2lwaGVyPXcuY3JlYXRlQ2lwaGVyLFguQ2lwaGVyaXY9dy5DaXBoZXJpdixYLmNyZWF0ZUNpcGhlcml2PXcuY3JlYXRlQ2lwaGVyaXYsWC5EZWNpcGhlcj13LkRlY2lwaGVyLFguY3JlYXRlRGVj''@;'; put 'put ''aXBoZXI9dy5jcmVhdGVEZWNpcGhlcixYLkRlY2lwaGVyaXY9dy5EZWNpcGhlcml2LFguY3JlYXRlRGVjaXBoZXJpdj13LmNyZWF0ZURlY2lwaGVyaXYsWC5nZXRDaXBoZXJzPXcuZ2V0Q2lwaGVycyxYLmxpc3RDaXBoZXJzPXcubGlzdENpcGhlcnM7dmFyIFA9eSg0Mzc3KTtYLkRpZmZpZUhl''@;'; put 'put ''bGxtYW5Hcm91cD1QLkRpZmZpZUhlbGxtYW5Hcm91cCxYLmNyZWF0ZURpZmZpZUhlbGxtYW5Hcm91cD1QLmNyZWF0ZURpZmZpZUhlbGxtYW5Hcm91cCxYLmdldERpZmZpZUhlbGxtYW49UC5nZXREaWZmaWVIZWxsbWFuLFguY3JlYXRlRGlmZmllSGVsbG1hbj1QLmNyZWF0ZURpZmZpZUhlbGxt''@;'; put 'put ''YW4sWC5EaWZmaWVIZWxsbWFuPVAuRGlmZmllSGVsbG1hbjt2YXIgRj15KDc5MTQzKTtYLmNyZWF0ZVNpZ249Ri5jcmVhdGVTaWduLFguU2lnbj1GLlNpZ24sWC5jcmVhdGVWZXJpZnk9Ri5jcmVhdGVWZXJpZnksWC5WZXJpZnk9Ri5WZXJpZnksWC5jcmVhdGVFQ0RIPXkoODczMDMpO3ZhciBP''@;'; put 'put ''PXkoNTI5NjUpO1gucHVibGljRW5jcnlwdD1PLnB1YmxpY0VuY3J5cHQsWC5wcml2YXRlRW5jcnlwdD1PLnByaXZhdGVFbmNyeXB0LFgucHVibGljRGVjcnlwdD1PLnB1YmxpY0RlY3J5cHQsWC5wcml2YXRlRGVjcnlwdD1PLnByaXZhdGVEZWNyeXB0O3ZhciB6PXkoOTY4Mik7WC5yYW5kb21G''@;'; put 'put ''aWxsPXoucmFuZG9tRmlsbCxYLnJhbmRvbUZpbGxTeW5jPXoucmFuZG9tRmlsbFN5bmMsWC5jcmVhdGVDcmVkZW50aWFscz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigic29ycnksIGNyZWF0ZUNyZWRlbnRpYWxzIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXRcbndlIGFjY2VwdCBwdWxsIHJl''@;'; put 'put ''cXVlc3RzXG5odHRwczovL2dpdGh1Yi5jb20vYnJvd3NlcmlmeS9jcnlwdG8tYnJvd3NlcmlmeSIpfSxYLmNvbnN0YW50cz17REhfQ0hFQ0tfUF9OT1RfU0FGRV9QUklNRToyLERIX0NIRUNLX1BfTk9UX1BSSU1FOjEsREhfVU5BQkxFX1RPX0NIRUNLX0dFTkVSQVRPUjo0LERIX05PVF9TVUlU''@;'; put 'put ''QUJMRV9HRU5FUkFUT1I6OCxOUE5fRU5BQkxFRDoxLEFMUE5fRU5BQkxFRDoxLFJTQV9QS0NTMV9QQURESU5HOjEsUlNBX1NTTFYyM19QQURESU5HOjIsUlNBX05PX1BBRERJTkc6MyxSU0FfUEtDUzFfT0FFUF9QQURESU5HOjQsUlNBX1g5MzFfUEFERElORzo1LFJTQV9QS0NTMV9QU1NfUEFE''@;'; put 'put ''RElORzo2LFBPSU5UX0NPTlZFUlNJT05fQ09NUFJFU1NFRDoyLFBPSU5UX0NPTlZFUlNJT05fVU5DT01QUkVTU0VEOjQsUE9JTlRfQ09OVkVSU0lPTl9IWUJSSUQ6Nn19LDE3NjU2OmZ1bmN0aW9uKHVlLFgseSl7dmFyIEk7dWUuZXhwb3J0cz0oST1JfHxmdW5jdGlvbihfLGcpe3ZhciBCO2lm''@;'; put 'put ''KHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuY3J5cHRvJiYoQj13aW5kb3cuY3J5cHRvKSx0eXBlb2Ygc2VsZjwidSImJnNlbGYuY3J5cHRvJiYoQj1zZWxmLmNyeXB0byksdHlwZW9mIGdsb2JhbFRoaXM8InUiJiZnbG9iYWxUaGlzLmNyeXB0byYmKEI9Z2xvYmFsVGhpcy5jcnlwdG8pLCFC''@;'; put 'put ''JiZ0eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93Lm1zQ3J5cHRvJiYoQj13aW5kb3cubXNDcnlwdG8pLCFCJiZ0eXBlb2YgZ2xvYmFsPCJ1IiYmZ2xvYmFsLmNyeXB0byYmKEI9Z2xvYmFsLmNyeXB0byksIUIpdHJ5e0I9eSg5MTQyNil9Y2F0Y2h7fXZhciB3PWZ1bmN0aW9uKCl7aWYoQil7aWYo''@;'; put 'put ''ImZ1bmN0aW9uIj09dHlwZW9mIEIuZ2V0UmFuZG9tVmFsdWVzKXRyeXtyZXR1cm4gQi5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQzMkFycmF5KDEpKVswXX1jYXRjaHt9aWYoImZ1bmN0aW9uIj09dHlwZW9mIEIucmFuZG9tQnl0ZXMpdHJ5e3JldHVybiBCLnJhbmRvbUJ5dGVzKDQpLnJlYWRJ''@;'; put 'put ''bnQzMkxFKCl9Y2F0Y2h7fX10aHJvdyBuZXcgRXJyb3IoIk5hdGl2ZSBjcnlwdG8gbW9kdWxlIGNvdWxkIG5vdCBiZSB1c2VkIHRvIGdldCBzZWN1cmUgcmFuZG9tIG51bWJlci4iKX0sUD1PYmplY3QuY3JlYXRlfHxmdW5jdGlvbigpe2Z1bmN0aW9uIEooKXt9cmV0dXJuIGZ1bmN0aW9uKG5l''@;'; put 'put ''KXt2YXIgaWU7cmV0dXJuIEoucHJvdG90eXBlPW5lLGllPW5ldyBKLEoucHJvdG90eXBlPW51bGwsaWV9fSgpLEY9e30sTz1GLmxpYj17fSx6PU8uQmFzZT1mdW5jdGlvbigpe3JldHVybntleHRlbmQ6ZnVuY3Rpb24oSil7dmFyIG5lPVAodGhpcyk7cmV0dXJuIEomJm5lLm1peEluKEopLCgh''@;'; put 'put ''bmUuaGFzT3duUHJvcGVydHkoImluaXQiKXx8dGhpcy5pbml0PT09bmUuaW5pdCkmJihuZS5pbml0PWZ1bmN0aW9uKCl7bmUuJHN1cGVyLmluaXQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSksbmUuaW5pdC5wcm90b3R5cGU9bmUsbmUuJHN1cGVyPXRoaXMsbmV9LGNyZWF0ZTpmdW5jdGlvbigp''@;'; put 'put ''e3ZhciBKPXRoaXMuZXh0ZW5kKCk7cmV0dXJuIEouaW5pdC5hcHBseShKLGFyZ3VtZW50cyksSn0saW5pdDpmdW5jdGlvbigpe30sbWl4SW46ZnVuY3Rpb24oSil7Zm9yKHZhciBuZSBpbiBKKUouaGFzT3duUHJvcGVydHkobmUpJiYodGhpc1tuZV09SltuZV0pO0ouaGFzT3duUHJvcGVydHko''@;'; put 'put ''InRvU3RyaW5nIikmJih0aGlzLnRvU3RyaW5nPUoudG9TdHJpbmcpfSxjbG9uZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmluaXQucHJvdG90eXBlLmV4dGVuZCh0aGlzKX19fSgpLE49Ty5Xb3JkQXJyYXk9ei5leHRlbmQoe2luaXQ6ZnVuY3Rpb24oSixuZSl7Sj10aGlzLndvcmRzPUp8fFtd''@;'; put 'put ''LHRoaXMuc2lnQnl0ZXM9bnVsbCE9bmU/bmU6NCpKLmxlbmd0aH0sdG9TdHJpbmc6ZnVuY3Rpb24oSil7cmV0dXJuKEp8fEspLnN0cmluZ2lmeSh0aGlzKX0sY29uY2F0OmZ1bmN0aW9uKEope3ZhciBuZT10aGlzLndvcmRzLGllPUoud29yZHMsbGU9dGhpcy5zaWdCeXRlcyxtZT1KLnNpZ0J5''@;'; put 'put ''dGVzO2lmKHRoaXMuY2xhbXAoKSxsZSU0KWZvcih2YXIgX2U9MDtfZTxtZTtfZSsrKW5lW2xlK19lPj4+Ml18PShpZVtfZT4+PjJdPj4+MjQtX2UlNCo4JjI1NSk8PDI0LShsZStfZSklNCo4O2Vsc2UgZm9yKHZhciBTZT0wO1NlPG1lO1NlKz00KW5lW2xlK1NlPj4+Ml09aWVbU2U+Pj4yXTty''@;'; put 'put ''ZXR1cm4gdGhpcy5zaWdCeXRlcys9bWUsdGhpc30sY2xhbXA6ZnVuY3Rpb24oKXt2YXIgSj10aGlzLndvcmRzLG5lPXRoaXMuc2lnQnl0ZXM7SltuZT4+PjJdJj00Mjk0OTY3Mjk1PDwzMi1uZSU0KjgsSi5sZW5ndGg9Xy5jZWlsKG5lLzQpfSxjbG9uZTpmdW5jdGlvbigpe3ZhciBKPXouY2xv''@;'; put 'put ''bmUuY2FsbCh0aGlzKTtyZXR1cm4gSi53b3Jkcz10aGlzLndvcmRzLnNsaWNlKDApLEp9LHJhbmRvbTpmdW5jdGlvbihKKXtmb3IodmFyIG5lPVtdLGllPTA7aWU8SjtpZSs9NCluZS5wdXNoKHcoKSk7cmV0dXJuIG5ldyBOLmluaXQobmUsSil9fSksTD1GLmVuYz17fSxLPUwuSGV4PXtzdHJp''@;'; put 'put ''bmdpZnk6ZnVuY3Rpb24oSil7Zm9yKHZhciBuZT1KLndvcmRzLGllPUouc2lnQnl0ZXMsbGU9W10sbWU9MDttZTxpZTttZSsrKXt2YXIgX2U9bmVbbWU+Pj4yXT4+PjI0LW1lJTQqOCYyNTU7bGUucHVzaCgoX2U+Pj40KS50b1N0cmluZygxNikpLGxlLnB1c2goKDE1Jl9lKS50b1N0cmluZygx''@;'; put 'put ''NikpfXJldHVybiBsZS5qb2luKCIiKX0scGFyc2U6ZnVuY3Rpb24oSil7Zm9yKHZhciBuZT1KLmxlbmd0aCxpZT1bXSxsZT0wO2xlPG5lO2xlKz0yKWllW2xlPj4+M118PXBhcnNlSW50KEouc3Vic3RyKGxlLDIpLDE2KTw8MjQtbGUlOCo0O3JldHVybiBuZXcgTi5pbml0KGllLG5lLzIpfX0s''@;'; put 'put ''VT1MLkxhdGluMT17c3RyaW5naWZ5OmZ1bmN0aW9uKEope2Zvcih2YXIgbmU9Si53b3JkcyxpZT1KLnNpZ0J5dGVzLGxlPVtdLG1lPTA7bWU8aWU7bWUrKylsZS5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUobmVbbWU+Pj4yXT4+PjI0LW1lJTQqOCYyNTUpKTtyZXR1cm4gbGUuam9pbigiIil9''@;'; put 'put ''LHBhcnNlOmZ1bmN0aW9uKEope2Zvcih2YXIgbmU9Si5sZW5ndGgsaWU9W10sbGU9MDtsZTxuZTtsZSsrKWllW2xlPj4+Ml18PSgyNTUmSi5jaGFyQ29kZUF0KGxlKSk8PDI0LWxlJTQqODtyZXR1cm4gbmV3IE4uaW5pdChpZSxuZSl9fSxXPUwuVXRmOD17c3RyaW5naWZ5OmZ1bmN0aW9uKEop''@;'; put 'put ''e3RyeXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGVzY2FwZShVLnN0cmluZ2lmeShKKSkpfWNhdGNoe3Rocm93IG5ldyBFcnJvcigiTWFsZm9ybWVkIFVURi04IGRhdGEiKX19LHBhcnNlOmZ1bmN0aW9uKEope3JldHVybiBVLnBhcnNlKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChK''@;'; put 'put ''KSkpfX0sWT1PLkJ1ZmZlcmVkQmxvY2tBbGdvcml0aG09ei5leHRlbmQoe3Jlc2V0OmZ1bmN0aW9uKCl7dGhpcy5fZGF0YT1uZXcgTi5pbml0LHRoaXMuX25EYXRhQnl0ZXM9MH0sX2FwcGVuZDpmdW5jdGlvbihKKXsic3RyaW5nIj09dHlwZW9mIEomJihKPVcucGFyc2UoSikpLHRoaXMuX2Rh''@;'; put 'put ''dGEuY29uY2F0KEopLHRoaXMuX25EYXRhQnl0ZXMrPUouc2lnQnl0ZXN9LF9wcm9jZXNzOmZ1bmN0aW9uKEope3ZhciBuZSxpZT10aGlzLl9kYXRhLGxlPWllLndvcmRzLG1lPWllLnNpZ0J5dGVzLF9lPXRoaXMuYmxvY2tTaXplLFNlPW1lLyg0Kl9lKSxqZT0oU2U9Sj9fLmNlaWwoU2UpOl8u''@;'; put 'put ''bWF4KCgwfFNlKS10aGlzLl9taW5CdWZmZXJTaXplLDApKSpfZSxWPV8ubWluKDQqamUsbWUpO2lmKGplKXtmb3IodmFyIHA9MDtwPGplO3ArPV9lKXRoaXMuX2RvUHJvY2Vzc0Jsb2NrKGxlLHApO25lPWxlLnNwbGljZSgwLGplKSxpZS5zaWdCeXRlcy09Vn1yZXR1cm4gbmV3IE4uaW5pdChu''@;'; put 'put ''ZSxWKX0sY2xvbmU6ZnVuY3Rpb24oKXt2YXIgSj16LmNsb25lLmNhbGwodGhpcyk7cmV0dXJuIEouX2RhdGE9dGhpcy5fZGF0YS5jbG9uZSgpLEp9LF9taW5CdWZmZXJTaXplOjB9KSxlZT0oTy5IYXNoZXI9WS5leHRlbmQoe2NmZzp6LmV4dGVuZCgpLGluaXQ6ZnVuY3Rpb24oSil7dGhpcy5j''@;'; put 'put ''Zmc9dGhpcy5jZmcuZXh0ZW5kKEopLHRoaXMucmVzZXQoKX0scmVzZXQ6ZnVuY3Rpb24oKXtZLnJlc2V0LmNhbGwodGhpcyksdGhpcy5fZG9SZXNldCgpfSx1cGRhdGU6ZnVuY3Rpb24oSil7cmV0dXJuIHRoaXMuX2FwcGVuZChKKSx0aGlzLl9wcm9jZXNzKCksdGhpc30sZmluYWxpemU6ZnVu''@;'; put 'put ''Y3Rpb24oSil7cmV0dXJuIEomJnRoaXMuX2FwcGVuZChKKSx0aGlzLl9kb0ZpbmFsaXplKCl9LGJsb2NrU2l6ZToxNixfY3JlYXRlSGVscGVyOmZ1bmN0aW9uKEope3JldHVybiBmdW5jdGlvbihuZSxpZSl7cmV0dXJuIG5ldyBKLmluaXQoaWUpLmZpbmFsaXplKG5lKX19LF9jcmVhdGVIbWFj''@;'; put 'put ''SGVscGVyOmZ1bmN0aW9uKEope3JldHVybiBmdW5jdGlvbihuZSxpZSl7cmV0dXJuIG5ldyBlZS5ITUFDLmluaXQoSixpZSkuZmluYWxpemUobmUpfX19KSxGLmFsZ289e30pO3JldHVybiBGfShNYXRoKSxJKX0sNzg4NTU6ZnVuY3Rpb24odWUsWCx5KXt2YXIgSTt1ZS5leHBvcnRzPShJPXko''@;'; put 'put ''MTc2NTYpLGZ1bmN0aW9uKF8pe3ZhciBnPUksQj1nLmxpYix3PUIuV29yZEFycmF5LFA9Qi5IYXNoZXIsRj1nLmFsZ28sTz1bXTshZnVuY3Rpb24oKXtmb3IodmFyIFc9MDtXPDY0O1crKylPW1ddPTQyOTQ5NjcyOTYqXy5hYnMoXy5zaW4oVysxKSl8MH0oKTt2YXIgej1GLk1ENT1QLmV4dGVu''@;'; put 'put ''ZCh7X2RvUmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLl9oYXNoPW5ldyB3LmluaXQoWzE3MzI1ODQxOTMsNDAyMzIzMzQxNywyNTYyMzgzMTAyLDI3MTczMzg3OF0pfSxfZG9Qcm9jZXNzQmxvY2s6ZnVuY3Rpb24oVyxZKXtmb3IodmFyIHE9MDtxPDE2O3ErKyl7dmFyIGVlPVkrcSxKPVdbZWVdO1db''@;'; put 'put ''ZWVdPTE2NzExOTM1JihKPDw4fEo+Pj4yNCl8NDI3ODI1NTM2MCYoSjw8MjR8Sj4+PjgpfXZhciBuZT10aGlzLl9oYXNoLndvcmRzLGllPVdbWSswXSxsZT1XW1krMV0sbWU9V1tZKzJdLF9lPVdbWSszXSxUZT1XW1krNF0sU2U9V1tZKzVdLGplPVdbWSs2XSxWPVdbWSs3XSxwPVdbWSs4XSxi''@;'; put 'put ''PVdbWSs5XSx4PVdbWSsxMF0sQz1XW1krMTFdLFQ9V1tZKzEyXSxIPVdbWSsxM10saj1XW1krMTRdLEU9V1tZKzE1XSxtPW5lWzBdLEE9bmVbMV0sYWU9bmVbMl0sdGU9bmVbM107bT1OKG0sQSxhZSx0ZSxpZSw3LE9bMF0pLHRlPU4odGUsbSxBLGFlLGxlLDEyLE9bMV0pLGFlPU4oYWUsdGUs''@;'; put 'put ''bSxBLG1lLDE3LE9bMl0pLEE9TihBLGFlLHRlLG0sX2UsMjIsT1szXSksbT1OKG0sQSxhZSx0ZSxUZSw3LE9bNF0pLHRlPU4odGUsbSxBLGFlLFNlLDEyLE9bNV0pLGFlPU4oYWUsdGUsbSxBLGplLDE3LE9bNl0pLEE9TihBLGFlLHRlLG0sViwyMixPWzddKSxtPU4obSxBLGFlLHRlLHAsNyxP''@;'; put 'put ''WzhdKSx0ZT1OKHRlLG0sQSxhZSxiLDEyLE9bOV0pLGFlPU4oYWUsdGUsbSxBLHgsMTcsT1sxMF0pLEE9TihBLGFlLHRlLG0sQywyMixPWzExXSksbT1OKG0sQSxhZSx0ZSxULDcsT1sxMl0pLHRlPU4odGUsbSxBLGFlLEgsMTIsT1sxM10pLGFlPU4oYWUsdGUsbSxBLGosMTcsT1sxNF0pLG09''@;'; put 'put ''TChtLEE9TihBLGFlLHRlLG0sRSwyMixPWzE1XSksYWUsdGUsbGUsNSxPWzE2XSksdGU9TCh0ZSxtLEEsYWUsamUsOSxPWzE3XSksYWU9TChhZSx0ZSxtLEEsQywxNCxPWzE4XSksQT1MKEEsYWUsdGUsbSxpZSwyMCxPWzE5XSksbT1MKG0sQSxhZSx0ZSxTZSw1LE9bMjBdKSx0ZT1MKHRlLG0s''@;'; put 'put ''QSxhZSx4LDksT1syMV0pLGFlPUwoYWUsdGUsbSxBLEUsMTQsT1syMl0pLEE9TChBLGFlLHRlLG0sVGUsMjAsT1syM10pLG09TChtLEEsYWUsdGUsYiw1LE9bMjRdKSx0ZT1MKHRlLG0sQSxhZSxqLDksT1syNV0pLGFlPUwoYWUsdGUsbSxBLF9lLDE0LE9bMjZdKSxBPUwoQSxhZSx0ZSxtLHAs''@;'; put 'put ''MjAsT1syN10pLG09TChtLEEsYWUsdGUsSCw1LE9bMjhdKSx0ZT1MKHRlLG0sQSxhZSxtZSw5LE9bMjldKSxhZT1MKGFlLHRlLG0sQSxWLDE0LE9bMzBdKSxtPUsobSxBPUwoQSxhZSx0ZSxtLFQsMjAsT1szMV0pLGFlLHRlLFNlLDQsT1szMl0pLHRlPUsodGUsbSxBLGFlLHAsMTEsT1szM10p''@;'; put 'put ''LGFlPUsoYWUsdGUsbSxBLEMsMTYsT1szNF0pLEE9SyhBLGFlLHRlLG0saiwyMyxPWzM1XSksbT1LKG0sQSxhZSx0ZSxsZSw0LE9bMzZdKSx0ZT1LKHRlLG0sQSxhZSxUZSwxMSxPWzM3XSksYWU9SyhhZSx0ZSxtLEEsViwxNixPWzM4XSksQT1LKEEsYWUsdGUsbSx4LDIzLE9bMzldKSxtPUso''@;'; put 'put ''bSxBLGFlLHRlLEgsNCxPWzQwXSksdGU9Syh0ZSxtLEEsYWUsaWUsMTEsT1s0MV0pLGFlPUsoYWUsdGUsbSxBLF9lLDE2LE9bNDJdKSxBPUsoQSxhZSx0ZSxtLGplLDIzLE9bNDNdKSxtPUsobSxBLGFlLHRlLGIsNCxPWzQ0XSksdGU9Syh0ZSxtLEEsYWUsVCwxMSxPWzQ1XSksYWU9SyhhZSx0''@;'; put 'put ''ZSxtLEEsRSwxNixPWzQ2XSksbT1VKG0sQT1LKEEsYWUsdGUsbSxtZSwyMyxPWzQ3XSksYWUsdGUsaWUsNixPWzQ4XSksdGU9VSh0ZSxtLEEsYWUsViwxMCxPWzQ5XSksYWU9VShhZSx0ZSxtLEEsaiwxNSxPWzUwXSksQT1VKEEsYWUsdGUsbSxTZSwyMSxPWzUxXSksbT1VKG0sQSxhZSx0ZSxU''@;'; put 'put ''LDYsT1s1Ml0pLHRlPVUodGUsbSxBLGFlLF9lLDEwLE9bNTNdKSxhZT1VKGFlLHRlLG0sQSx4LDE1LE9bNTRdKSxBPVUoQSxhZSx0ZSxtLGxlLDIxLE9bNTVdKSxtPVUobSxBLGFlLHRlLHAsNixPWzU2XSksdGU9VSh0ZSxtLEEsYWUsRSwxMCxPWzU3XSksYWU9VShhZSx0ZSxtLEEsamUsMTUs''@;'; put 'put ''T1s1OF0pLEE9VShBLGFlLHRlLG0sSCwyMSxPWzU5XSksbT1VKG0sQSxhZSx0ZSxUZSw2LE9bNjBdKSx0ZT1VKHRlLG0sQSxhZSxDLDEwLE9bNjFdKSxhZT1VKGFlLHRlLG0sQSxtZSwxNSxPWzYyXSksQT1VKEEsYWUsdGUsbSxiLDIxLE9bNjNdKSxuZVswXT1uZVswXSttfDAsbmVbMV09bmVb''@;'; put 'put ''MV0rQXwwLG5lWzJdPW5lWzJdK2FlfDAsbmVbM109bmVbM10rdGV8MH0sX2RvRmluYWxpemU6ZnVuY3Rpb24oKXt2YXIgVz10aGlzLl9kYXRhLFk9Vy53b3JkcyxxPTgqdGhpcy5fbkRhdGFCeXRlcyxlZT04Klcuc2lnQnl0ZXM7WVtlZT4+PjVdfD0xMjg8PDI0LWVlJTMyO3ZhciBKPV8uZmxv''@;'; put 'put ''b3IocS80Mjk0OTY3Mjk2KSxuZT1xO1lbMTUrKGVlKzY0Pj4+OTw8NCldPTE2NzExOTM1JihKPDw4fEo+Pj4yNCl8NDI3ODI1NTM2MCYoSjw8MjR8Sj4+PjgpLFlbMTQrKGVlKzY0Pj4+OTw8NCldPTE2NzExOTM1JihuZTw8OHxuZT4+PjI0KXw0Mjc4MjU1MzYwJihuZTw8MjR8bmU+Pj44KSxX''@;'; put 'put ''LnNpZ0J5dGVzPTQqKFkubGVuZ3RoKzEpLHRoaXMuX3Byb2Nlc3MoKTtmb3IodmFyIGllPXRoaXMuX2hhc2gsbGU9aWUud29yZHMsbWU9MDttZTw0O21lKyspe3ZhciBfZT1sZVttZV07bGVbbWVdPTE2NzExOTM1JihfZTw8OHxfZT4+PjI0KXw0Mjc4MjU1MzYwJihfZTw8MjR8X2U+Pj44KX1y''@;'; put 'put ''ZXR1cm4gaWV9LGNsb25lOmZ1bmN0aW9uKCl7dmFyIFc9UC5jbG9uZS5jYWxsKHRoaXMpO3JldHVybiBXLl9oYXNoPXRoaXMuX2hhc2guY2xvbmUoKSxXfX0pO2Z1bmN0aW9uIE4oVyxZLHEsZWUsSixuZSxpZSl7dmFyIGxlPVcrKFkmcXx+WSZlZSkrSitpZTtyZXR1cm4obGU8PG5lfGxlPj4+''@;'; put 'put ''MzItbmUpK1l9ZnVuY3Rpb24gTChXLFkscSxlZSxKLG5lLGllKXt2YXIgbGU9VysoWSZlZXxxJn5lZSkrSitpZTtyZXR1cm4obGU8PG5lfGxlPj4+MzItbmUpK1l9ZnVuY3Rpb24gSyhXLFkscSxlZSxKLG5lLGllKXt2YXIgbGU9VysoWV5xXmVlKStKK2llO3JldHVybihsZTw8bmV8bGU+Pj4z''@;'; put 'put ''Mi1uZSkrWX1mdW5jdGlvbiBVKFcsWSxxLGVlLEosbmUsaWUpe3ZhciBsZT1XKyhxXihZfH5lZSkpK0oraWU7cmV0dXJuKGxlPDxuZXxsZT4+PjMyLW5lKStZfWcuTUQ1PVAuX2NyZWF0ZUhlbHBlcih6KSxnLkhtYWNNRDU9UC5fY3JlYXRlSG1hY0hlbHBlcih6KX0oTWF0aCksSS5NRDUpfSw3''@;'; put 'put ''MTU0OToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0IjtYLnV0aWxzPXkoODU2NzEpLFguQ2lwaGVyPXkoMTAyMTkpLFguREVTPXkoNjQxNjYpLFguQ0JDPXkoODg4MDApLFguRURFPXkoNjIxMjIpfSw4ODgwMDoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDM5MjEwKSxfPXkoNzE5OTMp''@;'; put 'put ''LGc9e307ZnVuY3Rpb24gQihQKXtJLmVxdWFsKFAubGVuZ3RoLDgsIkludmFsaWQgSVYgbGVuZ3RoIiksdGhpcy5pdj1uZXcgQXJyYXkoOCk7Zm9yKHZhciBGPTA7Rjx0aGlzLml2Lmxlbmd0aDtGKyspdGhpcy5pdltGXT1QW0ZdfVguaW5zdGFudGlhdGU9ZnVuY3Rpb24gdyhQKXtmdW5jdGlv''@;'; put 'put ''biBGKEwpe1AuY2FsbCh0aGlzLEwpLHRoaXMuX2NiY0luaXQoKX1fKEYsUCk7Zm9yKHZhciBPPU9iamVjdC5rZXlzKGcpLHo9MDt6PE8ubGVuZ3RoO3orKyl7dmFyIE49T1t6XTtGLnByb3RvdHlwZVtOXT1nW05dfXJldHVybiBGLmNyZWF0ZT1mdW5jdGlvbihLKXtyZXR1cm4gbmV3IEYoSyl9''@;'; put 'put ''LEZ9LGcuX2NiY0luaXQ9ZnVuY3Rpb24oKXt2YXIgRj1uZXcgQih0aGlzLm9wdGlvbnMuaXYpO3RoaXMuX2NiY1N0YXRlPUZ9LGcuX3VwZGF0ZT1mdW5jdGlvbihGLE8seixOKXt2YXIgSz10aGlzLmNvbnN0cnVjdG9yLnN1cGVyXy5wcm90b3R5cGUsVT10aGlzLl9jYmNTdGF0ZS5pdjtpZigi''@;'; put 'put ''ZW5jcnlwdCI9PT10aGlzLnR5cGUpe2Zvcih2YXIgVz0wO1c8dGhpcy5ibG9ja1NpemU7VysrKVVbV11ePUZbTytXXTtmb3IoSy5fdXBkYXRlLmNhbGwodGhpcyxVLDAseixOKSxXPTA7Vzx0aGlzLmJsb2NrU2l6ZTtXKyspVVtXXT16W04rV119ZWxzZXtmb3IoSy5fdXBkYXRlLmNhbGwodGhp''@;'; put 'put ''cyxGLE8seixOKSxXPTA7Vzx0aGlzLmJsb2NrU2l6ZTtXKyspeltOK1ddXj1VW1ddO2ZvcihXPTA7Vzx0aGlzLmJsb2NrU2l6ZTtXKyspVVtXXT1GW08rV119fX0sMTAyMTk6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgzOTIxMCk7ZnVuY3Rpb24gXyhnKXt0aGlzLm9wdGlvbnM9''@;'; put 'put ''Zyx0aGlzLnR5cGU9dGhpcy5vcHRpb25zLnR5cGUsdGhpcy5ibG9ja1NpemU9OCx0aGlzLl9pbml0KCksdGhpcy5idWZmZXI9bmV3IEFycmF5KHRoaXMuYmxvY2tTaXplKSx0aGlzLmJ1ZmZlck9mZj0wLHRoaXMucGFkZGluZz0hMSE9PWcucGFkZGluZ311ZS5leHBvcnRzPV8sXy5wcm90b3R5''@;'; put 'put ''cGUuX2luaXQ9ZnVuY3Rpb24oKXt9LF8ucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihCKXtyZXR1cm4gMD09PUIubGVuZ3RoP1tdOiJkZWNyeXB0Ij09PXRoaXMudHlwZT90aGlzLl91cGRhdGVEZWNyeXB0KEIpOnRoaXMuX3VwZGF0ZUVuY3J5cHQoQil9LF8ucHJvdG90eXBlLl9idWZmZXI9''@;'; put 'put ''ZnVuY3Rpb24oQix3KXtmb3IodmFyIFA9TWF0aC5taW4odGhpcy5idWZmZXIubGVuZ3RoLXRoaXMuYnVmZmVyT2ZmLEIubGVuZ3RoLXcpLEY9MDtGPFA7RisrKXRoaXMuYnVmZmVyW3RoaXMuYnVmZmVyT2ZmK0ZdPUJbdytGXTtyZXR1cm4gdGhpcy5idWZmZXJPZmYrPVAsUH0sXy5wcm90b3R5''@;'; put 'put ''cGUuX2ZsdXNoQnVmZmVyPWZ1bmN0aW9uKEIsdyl7cmV0dXJuIHRoaXMuX3VwZGF0ZSh0aGlzLmJ1ZmZlciwwLEIsdyksdGhpcy5idWZmZXJPZmY9MCx0aGlzLmJsb2NrU2l6ZX0sXy5wcm90b3R5cGUuX3VwZGF0ZUVuY3J5cHQ9ZnVuY3Rpb24oQil7dmFyIHc9MCxQPTAsTz1uZXcgQXJyYXko''@;'; put 'put ''KCh0aGlzLmJ1ZmZlck9mZitCLmxlbmd0aCkvdGhpcy5ibG9ja1NpemV8MCkqdGhpcy5ibG9ja1NpemUpOzAhPT10aGlzLmJ1ZmZlck9mZiYmKHcrPXRoaXMuX2J1ZmZlcihCLHcpLHRoaXMuYnVmZmVyT2ZmPT09dGhpcy5idWZmZXIubGVuZ3RoJiYoUCs9dGhpcy5fZmx1c2hCdWZmZXIoTyxQ''@;'; put 'put ''KSkpO2Zvcih2YXIgej1CLmxlbmd0aC0oQi5sZW5ndGgtdykldGhpcy5ibG9ja1NpemU7dzx6O3crPXRoaXMuYmxvY2tTaXplKXRoaXMuX3VwZGF0ZShCLHcsTyxQKSxQKz10aGlzLmJsb2NrU2l6ZTtmb3IoO3c8Qi5sZW5ndGg7dysrLHRoaXMuYnVmZmVyT2ZmKyspdGhpcy5idWZmZXJbdGhp''@;'; put 'put ''cy5idWZmZXJPZmZdPUJbd107cmV0dXJuIE99LF8ucHJvdG90eXBlLl91cGRhdGVEZWNyeXB0PWZ1bmN0aW9uKEIpe2Zvcih2YXIgdz0wLFA9MCxGPU1hdGguY2VpbCgodGhpcy5idWZmZXJPZmYrQi5sZW5ndGgpL3RoaXMuYmxvY2tTaXplKS0xLE89bmV3IEFycmF5KEYqdGhpcy5ibG9ja1Np''@;'; put 'put ''emUpO0Y+MDtGLS0pdys9dGhpcy5fYnVmZmVyKEIsdyksUCs9dGhpcy5fZmx1c2hCdWZmZXIoTyxQKTtyZXR1cm4gdys9dGhpcy5fYnVmZmVyKEIsdyksT30sXy5wcm90b3R5cGUuZmluYWw9ZnVuY3Rpb24oQil7dmFyIHcsUDtyZXR1cm4gQiYmKHc9dGhpcy51cGRhdGUoQikpLFA9ImVuY3J5''@;'; put 'put ''cHQiPT09dGhpcy50eXBlP3RoaXMuX2ZpbmFsRW5jcnlwdCgpOnRoaXMuX2ZpbmFsRGVjcnlwdCgpLHc/dy5jb25jYXQoUCk6UH0sXy5wcm90b3R5cGUuX3BhZD1mdW5jdGlvbihCLHcpe2lmKDA9PT13KXJldHVybiExO2Zvcig7dzxCLmxlbmd0aDspQlt3KytdPTA7cmV0dXJuITB9LF8ucHJv''@;'; put 'put ''dG90eXBlLl9maW5hbEVuY3J5cHQ9ZnVuY3Rpb24oKXtpZighdGhpcy5fcGFkKHRoaXMuYnVmZmVyLHRoaXMuYnVmZmVyT2ZmKSlyZXR1cm5bXTt2YXIgQj1uZXcgQXJyYXkodGhpcy5ibG9ja1NpemUpO3JldHVybiB0aGlzLl91cGRhdGUodGhpcy5idWZmZXIsMCxCLDApLEJ9LF8ucHJvdG90''@;'; put 'put ''eXBlLl91bnBhZD1mdW5jdGlvbihCKXtyZXR1cm4gQn0sXy5wcm90b3R5cGUuX2ZpbmFsRGVjcnlwdD1mdW5jdGlvbigpe0kuZXF1YWwodGhpcy5idWZmZXJPZmYsdGhpcy5ibG9ja1NpemUsIk5vdCBlbm91Z2ggZGF0YSB0byBkZWNyeXB0Iik7dmFyIEI9bmV3IEFycmF5KHRoaXMuYmxvY2tT''@;'; put 'put ''aXplKTtyZXR1cm4gdGhpcy5fZmx1c2hCdWZmZXIoQiwwKSx0aGlzLl91bnBhZChCKX19LDY0MTY2Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMzkyMTApLF89eSg3MTk5MyksZz15KDg1NjcxKSxCPXkoMTAyMTkpO2Z1bmN0aW9uIHcoKXt0aGlzLnRtcD1uZXcgQXJyYXkoMiks''@;'; put 'put ''dGhpcy5rZXlzPW51bGx9ZnVuY3Rpb24gUChPKXtCLmNhbGwodGhpcyxPKTt2YXIgej1uZXcgdzt0aGlzLl9kZXNTdGF0ZT16LHRoaXMuZGVyaXZlS2V5cyh6LE8ua2V5KX1fKFAsQiksdWUuZXhwb3J0cz1QLFAuY3JlYXRlPWZ1bmN0aW9uKHope3JldHVybiBuZXcgUCh6KX07dmFyIEY9WzEs''@;'; put 'put ''MSwyLDIsMiwyLDIsMiwxLDIsMiwyLDIsMiwyLDFdO1AucHJvdG90eXBlLmRlcml2ZUtleXM9ZnVuY3Rpb24oeixOKXt6LmtleXM9bmV3IEFycmF5KDMyKSxJLmVxdWFsKE4ubGVuZ3RoLHRoaXMuYmxvY2tTaXplLCJJbnZhbGlkIGtleSBsZW5ndGgiKTt2YXIgTD1nLnJlYWRVSW50MzJCRShO''@;'; put 'put ''LDApLEs9Zy5yZWFkVUludDMyQkUoTiw0KTtnLnBjMShMLEssei50bXAsMCksTD16LnRtcFswXSxLPXoudG1wWzFdO2Zvcih2YXIgVT0wO1U8ei5rZXlzLmxlbmd0aDtVKz0yKXt2YXIgVz1GW1U+Pj4xXTtMPWcucjI4c2hsKEwsVyksSz1nLnIyOHNobChLLFcpLGcucGMyKEwsSyx6LmtleXMs''@;'; put 'put ''VSl9fSxQLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKHosTixMLEspe3ZhciBVPXRoaXMuX2Rlc1N0YXRlLFc9Zy5yZWFkVUludDMyQkUoeixOKSxZPWcucmVhZFVJbnQzMkJFKHosTis0KTtnLmlwKFcsWSxVLnRtcCwwKSxXPVUudG1wWzBdLFk9VS50bXBbMV0sImVuY3J5cHQiPT09dGhp''@;'; put 'put ''cy50eXBlP3RoaXMuX2VuY3J5cHQoVSxXLFksVS50bXAsMCk6dGhpcy5fZGVjcnlwdChVLFcsWSxVLnRtcCwwKSxZPVUudG1wWzFdLGcud3JpdGVVSW50MzJCRShMLFc9VS50bXBbMF0sSyksZy53cml0ZVVJbnQzMkJFKEwsWSxLKzQpfSxQLnByb3RvdHlwZS5fcGFkPWZ1bmN0aW9uKHosTil7''@;'; put 'put ''aWYoITE9PT10aGlzLnBhZGRpbmcpcmV0dXJuITE7Zm9yKHZhciBMPXoubGVuZ3RoLU4sSz1OO0s8ei5sZW5ndGg7SysrKXpbS109TDtyZXR1cm4hMH0sUC5wcm90b3R5cGUuX3VucGFkPWZ1bmN0aW9uKHope2lmKCExPT09dGhpcy5wYWRkaW5nKXJldHVybiB6O2Zvcih2YXIgTj16W3oubGVu''@;'; put 'put ''Z3RoLTFdLEw9ei5sZW5ndGgtTjtMPHoubGVuZ3RoO0wrKylJLmVxdWFsKHpbTF0sTik7cmV0dXJuIHouc2xpY2UoMCx6Lmxlbmd0aC1OKX0sUC5wcm90b3R5cGUuX2VuY3J5cHQ9ZnVuY3Rpb24oeixOLEwsSyxVKXtmb3IodmFyIFc9TixZPUwscT0wO3E8ei5rZXlzLmxlbmd0aDtxKz0yKXt2''@;'; put 'put ''YXIgZWU9ei5rZXlzW3FdLEo9ei5rZXlzW3ErMV07Zy5leHBhbmQoWSx6LnRtcCwwKTt2YXIgbmU9Zy5zdWJzdGl0dXRlKGVlXj16LnRtcFswXSxKXj16LnRtcFsxXSksbGU9WTtZPShXXmcucGVybXV0ZShuZSkpPj4+MCxXPWxlfWcucmlwKFksVyxLLFUpfSxQLnByb3RvdHlwZS5fZGVjcnlw''@;'; put 'put ''dD1mdW5jdGlvbih6LE4sTCxLLFUpe2Zvcih2YXIgVz1MLFk9TixxPXoua2V5cy5sZW5ndGgtMjtxPj0wO3EtPTIpe3ZhciBlZT16LmtleXNbcV0sSj16LmtleXNbcSsxXTtnLmV4cGFuZChXLHoudG1wLDApO3ZhciBuZT1nLnN1YnN0aXR1dGUoZWVePXoudG1wWzBdLEpePXoudG1wWzFdKSxs''@;'; put 'put ''ZT1XO1c9KFleZy5wZXJtdXRlKG5lKSk+Pj4wLFk9bGV9Zy5yaXAoVyxZLEssVSl9fSw2MjEyMjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDM5MjEwKSxfPXkoNzE5OTMpLGc9eSgxMDIxOSksQj15KDY0MTY2KTtmdW5jdGlvbiB3KEYsTyl7SS5lcXVhbChPLmxlbmd0aCwyNCwi''@;'; put 'put ''SW52YWxpZCBrZXkgbGVuZ3RoIik7dmFyIHo9Ty5zbGljZSgwLDgpLE49Ty5zbGljZSg4LDE2KSxMPU8uc2xpY2UoMTYsMjQpO3RoaXMuY2lwaGVycz0iZW5jcnlwdCI9PT1GP1tCLmNyZWF0ZSh7dHlwZToiZW5jcnlwdCIsa2V5Onp9KSxCLmNyZWF0ZSh7dHlwZToiZGVjcnlwdCIsa2V5Ok59''@;'; put 'put ''KSxCLmNyZWF0ZSh7dHlwZToiZW5jcnlwdCIsa2V5Okx9KV06W0IuY3JlYXRlKHt0eXBlOiJkZWNyeXB0IixrZXk6TH0pLEIuY3JlYXRlKHt0eXBlOiJlbmNyeXB0IixrZXk6Tn0pLEIuY3JlYXRlKHt0eXBlOiJkZWNyeXB0IixrZXk6en0pXX1mdW5jdGlvbiBQKEYpe2cuY2FsbCh0aGlzLEYp''@;'; put 'put ''O3ZhciBPPW5ldyB3KHRoaXMudHlwZSx0aGlzLm9wdGlvbnMua2V5KTt0aGlzLl9lZGVTdGF0ZT1PfV8oUCxnKSx1ZS5leHBvcnRzPVAsUC5jcmVhdGU9ZnVuY3Rpb24oTyl7cmV0dXJuIG5ldyBQKE8pfSxQLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKE8seixOLEwpe3ZhciBLPXRoaXMu''@;'; put 'put ''X2VkZVN0YXRlO0suY2lwaGVyc1swXS5fdXBkYXRlKE8seixOLEwpLEsuY2lwaGVyc1sxXS5fdXBkYXRlKE4sTCxOLEwpLEsuY2lwaGVyc1syXS5fdXBkYXRlKE4sTCxOLEwpfSxQLnByb3RvdHlwZS5fcGFkPUIucHJvdG90eXBlLl9wYWQsUC5wcm90b3R5cGUuX3VucGFkPUIucHJvdG90eXBl''@;'; put 'put ''Ll91bnBhZH0sODU2NzE6KHVlLFgpPT57InVzZSBzdHJpY3QiO1gucmVhZFVJbnQzMkJFPWZ1bmN0aW9uKEIsdyl7cmV0dXJuKEJbMCt3XTw8MjR8QlsxK3ddPDwxNnxCWzIrd108PDh8QlszK3ddKT4+PjB9LFgud3JpdGVVSW50MzJCRT1mdW5jdGlvbihCLHcsUCl7QlswK1BdPXc+Pj4yNCxC''@;'; put 'put ''WzErUF09dz4+PjE2JjI1NSxCWzIrUF09dz4+PjgmMjU1LEJbMytQXT0yNTUmd30sWC5pcD1mdW5jdGlvbihCLHcsUCxGKXtmb3IodmFyIE89MCx6PTAsTj02O04+PTA7Ti09Mil7Zm9yKHZhciBMPTA7TDw9MjQ7TCs9OClPPDw9MSxPfD13Pj4+TCtOJjE7Zm9yKEw9MDtMPD0yNDtMKz04KU88''@;'; put 'put ''PD0xLE98PUI+Pj5MK04mMX1mb3IoTj02O04+PTA7Ti09Mil7Zm9yKEw9MTtMPD0yNTtMKz04KXo8PD0xLHp8PXc+Pj5MK04mMTtmb3IoTD0xO0w8PTI1O0wrPTgpejw8PTEsenw9Qj4+PkwrTiYxfVBbRiswXT1PPj4+MCxQW0YrMV09ej4+PjB9LFgucmlwPWZ1bmN0aW9uKEIsdyxQLEYpe2Zv''@;'; put 'put ''cih2YXIgTz0wLHo9MCxOPTA7Tjw0O04rKylmb3IodmFyIEw9MjQ7TD49MDtMLT04KU88PD0xLE98PXc+Pj5MK04mMSxPPDw9MSxPfD1CPj4+TCtOJjE7Zm9yKE49NDtOPDg7TisrKWZvcihMPTI0O0w+PTA7TC09OCl6PDw9MSx6fD13Pj4+TCtOJjEsejw8PTEsenw9Qj4+PkwrTiYxO1BbRisw''@;'; put 'put ''XT1PPj4+MCxQW0YrMV09ej4+PjB9LFgucGMxPWZ1bmN0aW9uKEIsdyxQLEYpe2Zvcih2YXIgTz0wLHo9MCxOPTc7Tj49NTtOLS0pe2Zvcih2YXIgTD0wO0w8PTI0O0wrPTgpTzw8PTEsT3w9dz4+TCtOJjE7Zm9yKEw9MDtMPD0yNDtMKz04KU88PD0xLE98PUI+PkwrTiYxfWZvcihMPTA7TDw9''@;'; put 'put ''MjQ7TCs9OClPPDw9MSxPfD13Pj5MK04mMTtmb3IoTj0xO048PTM7TisrKXtmb3IoTD0wO0w8PTI0O0wrPTgpejw8PTEsenw9dz4+TCtOJjE7Zm9yKEw9MDtMPD0yNDtMKz04KXo8PD0xLHp8PUI+PkwrTiYxfWZvcihMPTA7TDw9MjQ7TCs9OCl6PDw9MSx6fD1CPj5MK04mMTtQW0YrMF09Tz4+''@;'; put 'put ''PjAsUFtGKzFdPXo+Pj4wfSxYLnIyOHNobD1mdW5jdGlvbihCLHcpe3JldHVybiBCPDx3JjI2ODQzNTQ1NXxCPj4+Mjgtd307dmFyIHk9WzE0LDExLDE3LDQsMjcsMjMsMjUsMCwxMywyMiw3LDE4LDUsOSwxNiwyNCwyLDIwLDEyLDIxLDEsOCwxNSwyNiwxNSw0LDI1LDE5LDksMSwyNiwxNiw1''@;'; put 'put ''LDExLDIzLDgsMTIsNywxNywwLDIyLDMsMTAsMTQsNiwyMCwyNywyNF07WC5wYzI9ZnVuY3Rpb24oQix3LFAsRil7Zm9yKHZhciBPPTAsej0wLE49eS5sZW5ndGg+Pj4xLEw9MDtMPE47TCsrKU88PD0xLE98PUI+Pj55W0xdJjE7Zm9yKEw9TjtMPHkubGVuZ3RoO0wrKyl6PDw9MSx6fD13Pj4+''@;'; put 'put ''eVtMXSYxO1BbRiswXT1PPj4+MCxQW0YrMV09ej4+PjB9LFguZXhwYW5kPWZ1bmN0aW9uKEIsdyxQKXt2YXIgRj0wLE89MDtGPSgxJkIpPDw1fEI+Pj4yNztmb3IodmFyIHo9MjM7ej49MTU7ei09NClGPDw9NixGfD1CPj4+eiY2Mztmb3Ioej0xMTt6Pj0zO3otPTQpT3w9Qj4+PnomNjMsTzw8''@;'; put 'put ''PTY7T3w9KDMxJkIpPDwxfEI+Pj4zMSx3W1ArMF09Rj4+PjAsd1tQKzFdPU8+Pj4wfTt2YXIgST1bMTQsMCw0LDE1LDEzLDcsMSw0LDIsMTQsMTUsMiwxMSwxMyw4LDEsMywxMCwxMCw2LDYsMTIsMTIsMTEsNSw5LDksNSwwLDMsNyw4LDQsMTUsMSwxMiwxNCw4LDgsMiwxMyw0LDYsOSwyLDEs''@;'; put 'put ''MTEsNywxNSw1LDEyLDExLDksMyw3LDE0LDMsMTAsMTAsMCw1LDYsMCwxMywxNSwzLDEsMTMsOCw0LDE0LDcsNiwxNSwxMSwyLDMsOCw0LDE0LDksMTIsNywwLDIsMSwxMywxMCwxMiw2LDAsOSw1LDExLDEwLDUsMCwxMywxNCw4LDcsMTAsMTEsMSwxMCwzLDQsMTUsMTMsNCwxLDIsNSwxMSw4''@;'; put 'put ''LDYsMTIsNyw2LDEyLDksMCwzLDUsMiwxNCwxNSw5LDEwLDEzLDAsNyw5LDAsMTQsOSw2LDMsMyw0LDE1LDYsNSwxMCwxLDIsMTMsOCwxMiw1LDcsMTQsMTEsMTIsNCwxMSwyLDE1LDgsMSwxMywxLDYsMTAsNCwxMyw5LDAsOCw2LDE1LDksMyw4LDAsNywxMSw0LDEsMTUsMiwxNCwxMiwzLDUs''@;'; put 'put ''MTEsMTAsNSwxNCwyLDcsMTIsNywxMywxMyw4LDE0LDExLDMsNSwwLDYsNiwxNSw5LDAsMTAsMywxLDQsMiw3LDgsMiw1LDEyLDExLDEsMTIsMTAsNCwxNCwxNSw5LDEwLDMsNiwxNSw5LDAsMCw2LDEyLDEwLDExLDEsNywxMywxMyw4LDE1LDksMSw0LDMsNSwxNCwxMSw1LDEyLDIsNyw4LDIs''@;'; put 'put ''NCwxNCwyLDE0LDEyLDExLDQsMiwxLDEyLDcsNCwxMCw3LDExLDEzLDYsMSw4LDUsNSwwLDMsMTUsMTUsMTAsMTMsMywwLDksMTQsOCw5LDYsNCwxMSwyLDgsMSwxMiwxMSw3LDEwLDEsMTMsMTQsNywyLDgsMTMsMTUsNiw5LDE1LDEyLDAsNSw5LDYsMTAsMyw0LDAsNSwxNCwzLDEyLDEwLDEs''@;'; put 'put ''MTUsMTAsNCwxNSwyLDksNywyLDEyLDYsOSw4LDUsMCw2LDEzLDEsMywxMyw0LDE0LDE0LDAsNywxMSw1LDMsMTEsOCw5LDQsMTQsMywxNSwyLDUsMTIsMiw5LDgsNSwxMiwxNSwzLDEwLDcsMTEsMCwxNCw0LDEsMTAsNywxLDYsMTMsMCwxMSw4LDYsMTMsNCwxMywxMSwwLDIsMTEsMTQsNywx''@;'; put 'put ''NSw0LDAsOSw4LDEsMTMsMTAsMywxNCwxMiwzLDksNSw3LDEyLDUsMiwxMCwxNSw2LDgsMSw2LDEsNiw0LDExLDExLDEzLDEzLDgsMTIsMSwzLDQsNywxMCwxNCw3LDEwLDksMTUsNSw2LDAsOCwxNSwwLDE0LDUsMiw5LDMsMiwxMiwxMywxLDIsMTUsOCwxMyw0LDgsNiwxMCwxNSwzLDExLDcs''@;'; put 'put ''MSw0LDEwLDEyLDksNSwzLDYsMTQsMTEsNSwwLDAsMTQsMTIsOSw3LDIsNywyLDExLDEsNCwxNCwxLDcsOSw0LDEyLDEwLDE0LDgsMiwxMywwLDE1LDYsMTIsMTAsOSwxMywwLDE1LDMsMyw1LDUsNiw4LDExXTtYLnN1YnN0aXR1dGU9ZnVuY3Rpb24oQix3KXtmb3IodmFyIFA9MCxGPTA7Rjw0''@;'; put 'put ''O0YrKylQPDw9NCxQfD1JWzY0KkYrKEI+Pj4xOC02KkYmNjMpXTtmb3IoRj0wO0Y8NDtGKyspUDw8PTQsUHw9SVsyNTYrNjQqRisodz4+PjE4LTYqRiY2MyldO3JldHVybiBQPj4+MH07dmFyIF89WzE2LDI1LDEyLDExLDMsMjAsNCwxNSwzMSwxNyw5LDYsMjcsMTQsMSwyMiwzMCwyNCw4LDE4''@;'; put 'put ''LDAsNSwyOSwyMywxMywxOSwyLDI2LDEwLDIxLDI4LDddO1gucGVybXV0ZT1mdW5jdGlvbihCKXtmb3IodmFyIHc9MCxQPTA7UDxfLmxlbmd0aDtQKyspdzw8PTEsd3w9Qj4+Pl9bUF0mMTtyZXR1cm4gdz4+PjB9LFgucGFkU3BsaXQ9ZnVuY3Rpb24oQix3LFApe2Zvcih2YXIgRj1CLnRvU3Ry''@;'; put 'put ''aW5nKDIpO0YubGVuZ3RoPHc7KUY9IjAiK0Y7Zm9yKHZhciBPPVtdLHo9MDt6PHc7eis9UClPLnB1c2goRi5zbGljZSh6LHorUCkpO3JldHVybiBPLmpvaW4oIiAiKX19LDQzNzc6KHVlLFgseSk9Pnt2YXIgST15KDEyNzI3KSxfPXkoMjMyNDEpLGc9eSg5NDU5Myksdz17YmluYXJ5OiEwLGhl''@;'; put 'put ''eDohMCxiYXNlNjQ6ITB9O1guRGlmZmllSGVsbG1hbkdyb3VwPVguY3JlYXRlRGlmZmllSGVsbG1hbkdyb3VwPVguZ2V0RGlmZmllSGVsbG1hbj1mdW5jdGlvbiBCKEYpe3ZhciBPPW5ldyBCdWZmZXIoX1tGXS5wcmltZSwiaGV4Iiksej1uZXcgQnVmZmVyKF9bRl0uZ2VuLCJoZXgiKTtyZXR1''@;'; put 'put ''cm4gbmV3IGcoTyx6KX0sWC5jcmVhdGVEaWZmaWVIZWxsbWFuPVguRGlmZmllSGVsbG1hbj1mdW5jdGlvbiBQKEYsTyx6LE4pe3JldHVybiBCdWZmZXIuaXNCdWZmZXIoTyl8fHZvaWQgMD09PXdbT10/UChGLCJiaW5hcnkiLE8seik6KE89T3x8ImJpbmFyeSIsTj1OfHwiYmluYXJ5Iix6PXp8''@;'; put 'put ''fG5ldyBCdWZmZXIoWzJdKSxCdWZmZXIuaXNCdWZmZXIoeil8fCh6PW5ldyBCdWZmZXIoeixOKSksIm51bWJlciI9PXR5cGVvZiBGP25ldyBnKEkoRix6KSx6LCEwKTooQnVmZmVyLmlzQnVmZmVyKEYpfHwoRj1uZXcgQnVmZmVyKEYsTykpLG5ldyBnKEYseiwhMCkpKX19LDk0NTkzOih1ZSxY''@;'; put 'put ''LHkpPT57dmFyIEk9eSgzODI4MCksZz1uZXcoeSg1MzQ1OSkpLEI9bmV3IEkoMjQpLHc9bmV3IEkoMTEpLFA9bmV3IEkoMTApLEY9bmV3IEkoMyksTz1uZXcgSSg3KSx6PXkoMTI3MjcpLE49eSgzMzQyKTtmdW5jdGlvbiBMKGVlLEope3JldHVybiBKPUp8fCJ1dGY4IixCdWZmZXIuaXNCdWZm''@;'; put 'put ''ZXIoZWUpfHwoZWU9bmV3IEJ1ZmZlcihlZSxKKSksdGhpcy5fcHViPW5ldyBJKGVlKSx0aGlzfWZ1bmN0aW9uIEsoZWUsSil7cmV0dXJuIEo9Snx8InV0ZjgiLEJ1ZmZlci5pc0J1ZmZlcihlZSl8fChlZT1uZXcgQnVmZmVyKGVlLEopKSx0aGlzLl9wcml2PW5ldyBJKGVlKSx0aGlzfXVlLmV4''@;'; put 'put ''cG9ydHM9WTt2YXIgVT17fTtmdW5jdGlvbiBZKGVlLEosbmUpe3RoaXMuc2V0R2VuZXJhdG9yKEopLHRoaXMuX19wcmltZT1uZXcgSShlZSksdGhpcy5fcHJpbWU9SS5tb250KHRoaXMuX19wcmltZSksdGhpcy5fcHJpbWVMZW49ZWUubGVuZ3RoLHRoaXMuX3B1Yj12b2lkIDAsdGhpcy5fcHJp''@;'; put 'put ''dj12b2lkIDAsdGhpcy5fcHJpbWVDb2RlPXZvaWQgMCxuZT8odGhpcy5zZXRQdWJsaWNLZXk9TCx0aGlzLnNldFByaXZhdGVLZXk9Syk6dGhpcy5fcHJpbWVDb2RlPTh9ZnVuY3Rpb24gcShlZSxKKXt2YXIgbmU9bmV3IEJ1ZmZlcihlZS50b0FycmF5KCkpO3JldHVybiBKP25lLnRvU3RyaW5n''@;'; put 'put ''KEopOm5lfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShZLnByb3RvdHlwZSwidmVyaWZ5RXJyb3IiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiJudW1iZXIiIT10eXBlb2YgdGhpcy5fcHJpbWVDb2RlJiYodGhpcy5fcHJpbWVDb2RlPWZ1bmN0aW9uIFcoZWUsSil7dmFyIG5l''@;'; put 'put ''PUoudG9TdHJpbmcoImhleCIpLGllPVtuZSxlZS50b1N0cmluZygxNildLmpvaW4oIl8iKTtpZihpZSBpbiBVKXJldHVybiBVW2llXTt2YXIgbWUsbGU9MDtpZihlZS5pc0V2ZW4oKXx8IXouc2ltcGxlU2lldmV8fCF6LmZlcm1hdFRlc3QoZWUpfHwhZy50ZXN0KGVlKSlyZXR1cm4gbGUrPTEs''@;'; put 'put ''VVtpZV09bGUrPSIwMiI9PT1uZXx8IjA1Ij09PW5lPzg6NCxsZTtzd2l0Y2goZy50ZXN0KGVlLnNocm4oMSkpfHwobGUrPTIpLG5lKXtjYXNlIjAyIjplZS5tb2QoQikuY21wKHcpJiYobGUrPTgpO2JyZWFrO2Nhc2UiMDUiOihtZT1lZS5tb2QoUCkpLmNtcChGKSYmbWUuY21wKE8pJiYobGUr''@;'; put 'put ''PTgpO2JyZWFrO2RlZmF1bHQ6bGUrPTR9cmV0dXJuIFVbaWVdPWxlLGxlfSh0aGlzLl9fcHJpbWUsdGhpcy5fX2dlbikpLHRoaXMuX3ByaW1lQ29kZX19KSxZLnByb3RvdHlwZS5nZW5lcmF0ZUtleXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdnx8KHRoaXMuX3ByaXY9bmV3IEkoTih0''@;'; put 'put ''aGlzLl9wcmltZUxlbikpKSx0aGlzLl9wdWI9dGhpcy5fZ2VuLnRvUmVkKHRoaXMuX3ByaW1lKS5yZWRQb3codGhpcy5fcHJpdikuZnJvbVJlZCgpLHRoaXMuZ2V0UHVibGljS2V5KCl9LFkucHJvdG90eXBlLmNvbXB1dGVTZWNyZXQ9ZnVuY3Rpb24oZWUpe3ZhciBKPShlZT0oZWU9bmV3IEko''@;'; put 'put ''ZWUpKS50b1JlZCh0aGlzLl9wcmltZSkpLnJlZFBvdyh0aGlzLl9wcml2KS5mcm9tUmVkKCksbmU9bmV3IEJ1ZmZlcihKLnRvQXJyYXkoKSksaWU9dGhpcy5nZXRQcmltZSgpO2lmKG5lLmxlbmd0aDxpZS5sZW5ndGgpe3ZhciBsZT1uZXcgQnVmZmVyKGllLmxlbmd0aC1uZS5sZW5ndGgpO2xl''@;'; put 'put ''LmZpbGwoMCksbmU9QnVmZmVyLmNvbmNhdChbbGUsbmVdKX1yZXR1cm4gbmV9LFkucHJvdG90eXBlLmdldFB1YmxpY0tleT1mdW5jdGlvbihKKXtyZXR1cm4gcSh0aGlzLl9wdWIsSil9LFkucHJvdG90eXBlLmdldFByaXZhdGVLZXk9ZnVuY3Rpb24oSil7cmV0dXJuIHEodGhpcy5fcHJpdixK''@;'; put 'put ''KX0sWS5wcm90b3R5cGUuZ2V0UHJpbWU9ZnVuY3Rpb24oZWUpe3JldHVybiBxKHRoaXMuX19wcmltZSxlZSl9LFkucHJvdG90eXBlLmdldEdlbmVyYXRvcj1mdW5jdGlvbihlZSl7cmV0dXJuIHEodGhpcy5fZ2VuLGVlKX0sWS5wcm90b3R5cGUuc2V0R2VuZXJhdG9yPWZ1bmN0aW9uKGVlLEop''@;'; put 'put ''e3JldHVybiBKPUp8fCJ1dGY4IixCdWZmZXIuaXNCdWZmZXIoZWUpfHwoZWU9bmV3IEJ1ZmZlcihlZSxKKSksdGhpcy5fX2dlbj1lZSx0aGlzLl9nZW49bmV3IEkoZWUpLHRoaXN9fSwxMjcyNzoodWUsWCx5KT0+e3ZhciBJPXkoMzM0Mik7dWUuZXhwb3J0cz1sZSxsZS5zaW1wbGVTaWV2ZT1u''@;'; put 'put ''ZSxsZS5mZXJtYXRUZXN0PWllO3ZhciBfPXkoMzgyODApLGc9bmV3IF8oMjQpLHc9bmV3KHkoNTM0NTkpKSxQPW5ldyBfKDEpLEY9bmV3IF8oMiksTz1uZXcgXyg1KSxMPShuZXcgXygxNiksbmV3IF8oOCksbmV3IF8oMTApKSxLPW5ldyBfKDMpLFc9KG5ldyBfKDcpLG5ldyBfKDExKSksWT1u''@;'; put 'put ''ZXcgXyg0KSxlZT0obmV3IF8oMTIpLG51bGwpO2Z1bmN0aW9uIG5lKG1lKXtmb3IodmFyIF9lPWZ1bmN0aW9uIEooKXtpZihudWxsIT09ZWUpcmV0dXJuIGVlO3ZhciBfZT1bXTtfZVswXT0yO2Zvcih2YXIgVGU9MSxTZT0zO1NlPDEwNDg1NzY7U2UrPTIpe2Zvcih2YXIgamU9TWF0aC5jZWls''@;'; put 'put ''KE1hdGguc3FydChTZSkpLFY9MDtWPFRlJiZfZVtWXTw9amUmJlNlJV9lW1ZdIT0wO1YrKyk7VGUhPT1WJiZfZVtWXTw9amV8fChfZVtUZSsrXT1TZSl9cmV0dXJuIGVlPV9lLF9lfSgpLFRlPTA7VGU8X2UubGVuZ3RoO1RlKyspaWYoMD09PW1lLm1vZG4oX2VbVGVdKSlyZXR1cm4gMD09PW1l''@;'; put 'put ''LmNtcG4oX2VbVGVdKTtyZXR1cm4hMH1mdW5jdGlvbiBpZShtZSl7dmFyIF9lPV8ubW9udChtZSk7cmV0dXJuIDA9PT1GLnRvUmVkKF9lKS5yZWRQb3cobWUuc3VibigxKSkuZnJvbVJlZCgpLmNtcG4oMSl9ZnVuY3Rpb24gbGUobWUsX2Upe2lmKG1lPDE2KXJldHVybiBuZXcgXygyPT09X2V8''@;'; put 'put ''fDU9PT1fZT9bMTQwLDEyM106WzE0MCwzOV0pO19lPW5ldyBfKF9lKTtmb3IodmFyIFRlLFNlOzspe2ZvcihUZT1uZXcgXyhJKE1hdGguY2VpbChtZS84KSkpO1RlLmJpdExlbmd0aCgpPm1lOylUZS5pc2hybigxKTtpZihUZS5pc0V2ZW4oKSYmVGUuaWFkZChQKSxUZS50ZXN0bigxKXx8VGUu''@;'; put 'put ''aWFkZChGKSxfZS5jbXAoRikpe2lmKCFfZS5jbXAoTykpZm9yKDtUZS5tb2QoTCkuY21wKEspOylUZS5pYWRkKFkpfWVsc2UgZm9yKDtUZS5tb2QoZykuY21wKFcpOylUZS5pYWRkKFkpO2lmKG5lKFNlPVRlLnNocm4oMSkpJiZuZShUZSkmJmllKFNlKSYmaWUoVGUpJiZ3LnRlc3QoU2UpJiZ3''@;'; put 'put ''LnRlc3QoVGUpKXJldHVybiBUZX19fSwzODI4MDpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJLF8peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBnKFYscCl7aWYoIVYpdGhyb3cgbmV3IEVycm9yKHB8fCJBc3NlcnRpb24gZmFpbGVkIil9ZnVuY3Rpb24gQihWLHApe1Yuc3VwZXJfPXA7dmFy''@;'; put 'put ''IGI9ZnVuY3Rpb24oKXt9O2IucHJvdG90eXBlPXAucHJvdG90eXBlLFYucHJvdG90eXBlPW5ldyBiLFYucHJvdG90eXBlLmNvbnN0cnVjdG9yPVZ9ZnVuY3Rpb24gdyhWLHAsYil7aWYody5pc0JOKFYpKXJldHVybiBWO3RoaXMubmVnYXRpdmU9MCx0aGlzLndvcmRzPW51bGwsdGhpcy5sZW5n''@;'; put 'put ''dGg9MCx0aGlzLnJlZD1udWxsLG51bGwhPT1WJiYoKCJsZSI9PT1wfHwiYmUiPT09cCkmJihiPXAscD0xMCksdGhpcy5faW5pdChWfHwwLHB8fDEwLGJ8fCJiZSIpKX12YXIgUDsib2JqZWN0Ij09dHlwZW9mIEk/SS5leHBvcnRzPXc6Xy5CTj13LHcuQk49dyx3LndvcmRTaXplPTI2O3RyeXtQ''@;'; put 'put ''PXR5cGVvZiB3aW5kb3c8InUiJiZ0eXBlb2Ygd2luZG93LkJ1ZmZlcjwidSI/d2luZG93LkJ1ZmZlcjp5KDY2MDg5KS5CdWZmZXJ9Y2F0Y2h7fWZ1bmN0aW9uIEYoVixwKXt2YXIgYj1WLmNoYXJDb2RlQXQocCk7cmV0dXJuIGI+PTY1JiZiPD03MD9iLTU1OmI+PTk3JiZiPD0xMDI/Yi04Nzpi''@;'; put 'put ''LTQ4JjE1fWZ1bmN0aW9uIE8oVixwLGIpe3ZhciB4PUYoVixiKTtyZXR1cm4gYi0xPj1wJiYoeHw9RihWLGItMSk8PDQpLHh9ZnVuY3Rpb24geihWLHAsYix4KXtmb3IodmFyIEM9MCxUPU1hdGgubWluKFYubGVuZ3RoLGIpLEg9cDtIPFQ7SCsrKXt2YXIgaj1WLmNoYXJDb2RlQXQoSCktNDg7''@;'; put 'put ''Qyo9eCxDKz1qPj00OT9qLTQ5KzEwOmo+PTE3P2otMTcrMTA6an1yZXR1cm4gQ313LmlzQk49ZnVuY3Rpb24ocCl7cmV0dXJuIHAgaW5zdGFuY2VvZiB3fHxudWxsIT09cCYmIm9iamVjdCI9PXR5cGVvZiBwJiZwLmNvbnN0cnVjdG9yLndvcmRTaXplPT09dy53b3JkU2l6ZSYmQXJyYXkuaXNB''@;'; put 'put ''cnJheShwLndvcmRzKX0sdy5tYXg9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gcC5jbXAoYik+MD9wOmJ9LHcubWluPWZ1bmN0aW9uKHAsYil7cmV0dXJuIHAuY21wKGIpPDA/cDpifSx3LnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbihwLGIseCl7aWYoIm51bWJlciI9PXR5cGVvZiBwKXJldHVybiB0''@;'; put 'put ''aGlzLl9pbml0TnVtYmVyKHAsYix4KTtpZigib2JqZWN0Ij09dHlwZW9mIHApcmV0dXJuIHRoaXMuX2luaXRBcnJheShwLGIseCk7ImhleCI9PT1iJiYoYj0xNiksZyhiPT09KDB8YikmJmI+PTImJmI8PTM2KTt2YXIgQz0wOyItIj09PShwPXAudG9TdHJpbmcoKS5yZXBsYWNlKC9ccysvZywi''@;'; put 'put ''IikpWzBdJiYoQysrLHRoaXMubmVnYXRpdmU9MSksQzxwLmxlbmd0aCYmKDE2PT09Yj90aGlzLl9wYXJzZUhleChwLEMseCk6KHRoaXMuX3BhcnNlQmFzZShwLGIsQyksImxlIj09PXgmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxiLHgpKSl9LHcucHJvdG90eXBlLl9pbml0TnVt''@;'; put 'put ''YmVyPWZ1bmN0aW9uKHAsYix4KXtwPDAmJih0aGlzLm5lZ2F0aXZlPTEscD0tcCkscDw2NzEwODg2ND8odGhpcy53b3Jkcz1bNjcxMDg4NjMmcF0sdGhpcy5sZW5ndGg9MSk6cDw0NTAzNTk5NjI3MzcwNDk2Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZwLHAvNjcxMDg4NjQmNjcxMDg4NjNdLHRo''@;'; put 'put ''aXMubGVuZ3RoPTIpOihnKHA8OTAwNzE5OTI1NDc0MDk5MiksdGhpcy53b3Jkcz1bNjcxMDg4NjMmcCxwLzY3MTA4ODY0JjY3MTA4ODYzLDFdLHRoaXMubGVuZ3RoPTMpLCJsZSI9PT14JiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksYix4KX0sdy5wcm90b3R5cGUuX2luaXRBcnJh''@;'; put 'put ''eT1mdW5jdGlvbihwLGIseCl7aWYoZygibnVtYmVyIj09dHlwZW9mIHAubGVuZ3RoKSxwLmxlbmd0aDw9MClyZXR1cm4gdGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MSx0aGlzO3RoaXMubGVuZ3RoPU1hdGguY2VpbChwLmxlbmd0aC8zKSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxl''@;'; put 'put ''bmd0aCk7Zm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT0wO3ZhciBULEgsaj0wO2lmKCJiZSI9PT14KWZvcihDPXAubGVuZ3RoLTEsVD0wO0M+PTA7Qy09Myl0aGlzLndvcmRzW1RdfD0oSD1wW0NdfHBbQy0xXTw8OHxwW0MtMl08PDE2KTw8aiY2NzEwODg2Myx0''@;'; put 'put ''aGlzLndvcmRzW1QrMV09SD4+PjI2LWomNjcxMDg4NjMsKGorPTI0KT49MjYmJihqLT0yNixUKyspO2Vsc2UgaWYoImxlIj09PXgpZm9yKEM9MCxUPTA7QzxwLmxlbmd0aDtDKz0zKXRoaXMud29yZHNbVF18PShIPXBbQ118cFtDKzFdPDw4fHBbQysyXTw8MTYpPDxqJjY3MTA4ODYzLHRoaXMu''@;'; put 'put ''d29yZHNbVCsxXT1IPj4+MjYtaiY2NzEwODg2Mywoais9MjQpPj0yNiYmKGotPTI2LFQrKyk7cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuX3BhcnNlSGV4PWZ1bmN0aW9uKHAsYix4KXt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoKHAubGVuZ3RoLWIpLzYpLHRoaXMud29yZHM9bmV3''@;'; put 'put ''IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIEM9MDtDPHRoaXMubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPTA7dmFyIGosVD0wLEg9MDtpZigiYmUiPT09eClmb3IoQz1wLmxlbmd0aC0xO0M+PWI7Qy09MilqPU8ocCxiLEMpPDxULHRoaXMud29yZHNbSF18PTY3MTA4ODYzJmosVD49MTg/''@;'; put 'put ''KFQtPTE4LHRoaXMud29yZHNbSCs9MV18PWo+Pj4yNik6VCs9ODtlbHNlIGZvcihDPShwLmxlbmd0aC1iKSUyPT0wP2IrMTpiO0M8cC5sZW5ndGg7Qys9MilqPU8ocCxiLEMpPDxULHRoaXMud29yZHNbSF18PTY3MTA4ODYzJmosVD49MTg/KFQtPTE4LHRoaXMud29yZHNbSCs9MV18PWo+Pj4y''@;'; put 'put ''Nik6VCs9ODt0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl9wYXJzZUJhc2U9ZnVuY3Rpb24ocCxiLHgpe3RoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTE7Zm9yKHZhciBDPTAsVD0xO1Q8PTY3MTA4ODYzO1QqPWIpQysrO0MtLSxUPVQvYnwwO2Zvcih2YXIgSD1wLmxlbmd0aC14LGo9SCVD''@;'; put 'put ''LEU9TWF0aC5taW4oSCxILWopK3gsbT0wLEE9eDtBPEU7QSs9QyltPXoocCxBLEErQyxiKSx0aGlzLmltdWxuKFQpLHRoaXMud29yZHNbMF0rbTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1tOnRoaXMuX2lhZGRuKG0pO2lmKDAhPT1qKXt2YXIgYWU9MTtmb3IobT16KHAsQSxwLmxlbmd0aCxi''@;'; put 'put ''KSxBPTA7QTxqO0ErKylhZSo9Yjt0aGlzLmltdWxuKGFlKSx0aGlzLndvcmRzWzBdK208NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9bTp0aGlzLl9pYWRkbihtKX10aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24ocCl7cC53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgp''@;'; put 'put ''O2Zvcih2YXIgYj0wO2I8dGhpcy5sZW5ndGg7YisrKXAud29yZHNbYl09dGhpcy53b3Jkc1tiXTtwLmxlbmd0aD10aGlzLmxlbmd0aCxwLm5lZ2F0aXZlPXRoaXMubmVnYXRpdmUscC5yZWQ9dGhpcy5yZWR9LHcucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIHA9bmV3IHcobnVsbCk7''@;'; put 'put ''cmV0dXJuIHRoaXMuY29weShwKSxwfSx3LnByb3RvdHlwZS5fZXhwYW5kPWZ1bmN0aW9uKHApe2Zvcig7dGhpcy5sZW5ndGg8cDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO3JldHVybiB0aGlzfSx3LnByb3RvdHlwZS5zdHJpcD1mdW5jdGlvbigpe2Zvcig7dGhpcy5sZW5ndGg+MSYm''@;'; put 'put ''MD09PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV07KXRoaXMubGVuZ3RoLS07cmV0dXJuIHRoaXMuX25vcm1TaWduKCl9LHcucHJvdG90eXBlLl9ub3JtU2lnbj1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdJiYodGhpcy5uZWdhdGl2ZT0wKSx0''@;'; put 'put ''aGlzfSx3LnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMucmVkPyI8Qk4tUjogIjoiPEJOOiAiKSt0aGlzLnRvU3RyaW5nKDE2KSsiPiJ9O3ZhciBOPVsiIiwiMCIsIjAwIiwiMDAwIiwiMDAwMCIsIjAwMDAwIiwiMDAwMDAwIiwiMDAwMDAwMCIsIjAwMDAwMDAwIiwi''@;'; put 'put ''MDAwMDAwMDAwIiwiMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwIiwi''@;'; put 'put ''MDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAw''@;'; put 'put ''MDAwMDAwMCJdLEw9WzAsMCwyNSwxNiwxMiwxMSwxMCw5LDgsOCw3LDcsNyw3LDYsNiw2LDYsNiw2LDYsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNV0sSz1bMCwwLDMzNTU0NDMyLDQzMDQ2NzIxLDE2Nzc3MjE2LDQ4ODI4MTI1LDYwNDY2MTc2LDQwMzUzNjA3LDE2Nzc3MjE2LDQz''@;'; put 'put ''MDQ2NzIxLDFlNywxOTQ4NzE3MSwzNTgzMTgwOCw2Mjc0ODUxNyw3NTI5NTM2LDExMzkwNjI1LDE2Nzc3MjE2LDI0MTM3NTY5LDM0MDEyMjI0LDQ3MDQ1ODgxLDY0ZTYsNDA4NDEwMSw1MTUzNjMyLDY0MzYzNDMsNzk2MjYyNCw5NzY1NjI1LDExODgxMzc2LDE0MzQ4OTA3LDE3MjEwMzY4LDIw''@;'; put 'put ''NTExMTQ5LDI0M2U1LDI4NjI5MTUxLDMzNTU0NDMyLDM5MTM1MzkzLDQ1NDM1NDI0LDUyNTIxODc1LDYwNDY2MTc2XTtmdW5jdGlvbiBXKFYscCxiKXtiLm5lZ2F0aXZlPXAubmVnYXRpdmVeVi5uZWdhdGl2ZTt2YXIgeD1WLmxlbmd0aCtwLmxlbmd0aHwwO2IubGVuZ3RoPXgseD14LTF8MDt2''@;'; put 'put ''YXIgQz0wfFYud29yZHNbMF0sVD0wfHAud29yZHNbMF0sSD1DKlQsRT1ILzY3MTA4ODY0fDA7Yi53b3Jkc1swXT02NzEwODg2MyZIO2Zvcih2YXIgbT0xO208eDttKyspe2Zvcih2YXIgQT1FPj4+MjYsYWU9NjcxMDg4NjMmRSx0ZT1NYXRoLm1pbihtLHAubGVuZ3RoLTEpLHNlPU1hdGgubWF4''@;'; put 'put ''KDAsbS1WLmxlbmd0aCsxKTtzZTw9dGU7c2UrKylBKz0oSD0oQz0wfFYud29yZHNbbS1zZXwwXSkqKFQ9MHxwLndvcmRzW3NlXSkrYWUpLzY3MTA4ODY0fDAsYWU9NjcxMDg4NjMmSDtiLndvcmRzW21dPTB8YWUsRT0wfEF9cmV0dXJuIDAhPT1FP2Iud29yZHNbbV09MHxFOmIubGVuZ3RoLS0s''@;'; put 'put ''Yi5zdHJpcCgpfXcucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKHAsYil7dmFyIHg7aWYoYj0wfGJ8fDEsMTY9PT0ocD1wfHwxMCl8fCJoZXgiPT09cCl7eD0iIjtmb3IodmFyIEM9MCxUPTAsSD0wO0g8dGhpcy5sZW5ndGg7SCsrKXt2YXIgaj10aGlzLndvcmRzW0hdLEU9KDE2Nzc3MjE1''@;'; put 'put ''JihqPDxDfFQpKS50b1N0cmluZygxNik7VD1qPj4+MjQtQyYxNjc3NzIxNSwoQys9Mik+PTI2JiYoQy09MjYsSC0tKSx4PTAhPT1UfHxIIT09dGhpcy5sZW5ndGgtMT9OWzYtRS5sZW5ndGhdK0UreDpFK3h9Zm9yKDAhPT1UJiYoeD1ULnRvU3RyaW5nKDE2KSt4KTt4Lmxlbmd0aCViIT0wOyl4''@;'; put 'put ''PSIwIit4O3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHg9Ii0iK3gpLHh9aWYocD09PSgwfHApJiZwPj0yJiZwPD0zNil7dmFyIG09TFtwXSxBPUtbcF07eD0iIjt2YXIgYWU9dGhpcy5jbG9uZSgpO2ZvcihhZS5uZWdhdGl2ZT0wOyFhZS5pc1plcm8oKTspe3ZhciB0ZT1hZS5tb2RuKEEp''@;'; put 'put ''LnRvU3RyaW5nKHApO3g9KGFlPWFlLmlkaXZuKEEpKS5pc1plcm8oKT90ZSt4Ok5bbS10ZS5sZW5ndGhdK3RlK3h9Zm9yKHRoaXMuaXNaZXJvKCkmJih4PSIwIit4KTt4Lmxlbmd0aCViIT0wOyl4PSIwIit4O3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHg9Ii0iK3gpLHh9ZyghMSwiQmFz''@;'; put 'put ''ZSBzaG91bGQgYmUgYmV0d2VlbiAyIGFuZCAzNiIpfSx3LnByb3RvdHlwZS50b051bWJlcj1mdW5jdGlvbigpe3ZhciBwPXRoaXMud29yZHNbMF07cmV0dXJuIDI9PT10aGlzLmxlbmd0aD9wKz02NzEwODg2NCp0aGlzLndvcmRzWzFdOjM9PT10aGlzLmxlbmd0aCYmMT09PXRoaXMud29yZHNb''@;'; put 'put ''Ml0/cCs9NDUwMzU5OTYyNzM3MDQ5Nis2NzEwODg2NCp0aGlzLndvcmRzWzFdOnRoaXMubGVuZ3RoPjImJmcoITEsIk51bWJlciBjYW4gb25seSBzYWZlbHkgc3RvcmUgdXAgdG8gNTMgYml0cyIpLDAhPT10aGlzLm5lZ2F0aXZlPy1wOnB9LHcucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigp''@;'; put 'put ''e3JldHVybiB0aGlzLnRvU3RyaW5nKDE2KX0sdy5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gZyh0eXBlb2YgUDwidSIpLHRoaXMudG9BcnJheUxpa2UoUCxwLGIpfSx3LnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKHAsYil7cmV0dXJuIHRoaXMudG9BcnJheUxp''@;'; put 'put ''a2UoQXJyYXkscCxiKX0sdy5wcm90b3R5cGUudG9BcnJheUxpa2U9ZnVuY3Rpb24ocCxiLHgpe3ZhciBDPXRoaXMuYnl0ZUxlbmd0aCgpLFQ9eHx8TWF0aC5tYXgoMSxDKTtnKEM8PVQsImJ5dGUgYXJyYXkgbG9uZ2VyIHRoYW4gZGVzaXJlZCBsZW5ndGgiKSxnKFQ+MCwiUmVxdWVzdGVkIGFy''@;'; put 'put ''cmF5IGxlbmd0aCA8PSAwIiksdGhpcy5zdHJpcCgpO3ZhciBFLG0sSD0ibGUiPT09YixqPW5ldyBwKFQpLEE9dGhpcy5jbG9uZSgpO2lmKEgpe2ZvcihtPTA7IUEuaXNaZXJvKCk7bSsrKUU9QS5hbmRsbigyNTUpLEEuaXVzaHJuKDgpLGpbbV09RTtmb3IoO208VDttKyspalttXT0wfWVsc2V7''@;'; put 'put ''Zm9yKG09MDttPFQtQzttKyspalttXT0wO2ZvcihtPTA7IUEuaXNaZXJvKCk7bSsrKUU9QS5hbmRsbigyNTUpLEEuaXVzaHJuKDgpLGpbVC1tLTFdPUV9cmV0dXJuIGp9LHcucHJvdG90eXBlLl9jb3VudEJpdHM9TWF0aC5jbHozMj9mdW5jdGlvbihwKXtyZXR1cm4gMzItTWF0aC5jbHozMihw''@;'; put 'put ''KX06ZnVuY3Rpb24ocCl7dmFyIGI9cCx4PTA7cmV0dXJuIGI+PTQwOTYmJih4Kz0xMyxiPj4+PTEzKSxiPj02NCYmKHgrPTcsYj4+Pj03KSxiPj04JiYoeCs9NCxiPj4+PTQpLGI+PTImJih4Kz0yLGI+Pj49MikseCtifSx3LnByb3RvdHlwZS5femVyb0JpdHM9ZnVuY3Rpb24ocCl7aWYoMD09''@;'; put 'put ''PXApcmV0dXJuIDI2O3ZhciBiPXAseD0wO3JldHVybiA4MTkxJmJ8fCh4Kz0xMyxiPj4+PTEzKSwxMjcmYnx8KHgrPTcsYj4+Pj03KSwxNSZifHwoeCs9NCxiPj4+PTQpLDMmYnx8KHgrPTIsYj4+Pj0yKSwxJmJ8fHgrKyx4fSx3LnByb3RvdHlwZS5iaXRMZW5ndGg9ZnVuY3Rpb24oKXt2YXIg''@;'; put 'put ''Yj10aGlzLl9jb3VudEJpdHModGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSk7cmV0dXJuIDI2Kih0aGlzLmxlbmd0aC0xKStifSx3LnByb3RvdHlwZS56ZXJvQml0cz1mdW5jdGlvbigpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIDA7Zm9yKHZhciBwPTAsYj0wO2I8dGhpcy5sZW5ndGg7Yisr''@;'; put 'put ''KXt2YXIgeD10aGlzLl96ZXJvQml0cyh0aGlzLndvcmRzW2JdKTtpZihwKz14LDI2IT09eClicmVha31yZXR1cm4gcH0sdy5wcm90b3R5cGUuYnl0ZUxlbmd0aD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmNlaWwodGhpcy5iaXRMZW5ndGgoKS84KX0sdy5wcm90b3R5cGUudG9Ud29zPWZ1bmN0''@;'; put 'put ''aW9uKHApe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT90aGlzLmFicygpLmlub3RuKHApLmlhZGRuKDEpOnRoaXMuY2xvbmUoKX0sdy5wcm90b3R5cGUuZnJvbVR3b3M9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMudGVzdG4ocC0xKT90aGlzLm5vdG4ocCkuaWFkZG4oMSkuaW5lZygpOnRoaXMu''@;'; put 'put ''Y2xvbmUoKX0sdy5wcm90b3R5cGUuaXNOZWc9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmV9LHcucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaW5lZygpfSx3LnByb3RvdHlwZS5pbmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNaZXJv''@;'; put 'put ''KCl8fCh0aGlzLm5lZ2F0aXZlXj0xKSx0aGlzfSx3LnByb3RvdHlwZS5pdW9yPWZ1bmN0aW9uKHApe2Zvcig7dGhpcy5sZW5ndGg8cC5sZW5ndGg7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtmb3IodmFyIGI9MDtiPHAubGVuZ3RoO2IrKyl0aGlzLndvcmRzW2JdPXRoaXMud29yZHNb''@;'; put 'put ''Yl18cC53b3Jkc1tiXTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pb3I9ZnVuY3Rpb24ocCl7cmV0dXJuIGcoISh0aGlzLm5lZ2F0aXZlfHAubmVnYXRpdmUpKSx0aGlzLml1b3IocCl9LHcucHJvdG90eXBlLm9yPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxl''@;'; put 'put ''bmd0aD90aGlzLmNsb25lKCkuaW9yKHApOnAuY2xvbmUoKS5pb3IodGhpcyl9LHcucHJvdG90eXBlLnVvcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLml1b3IocCk6cC5jbG9uZSgpLml1b3IodGhpcyl9LHcucHJvdG90eXBlLml1YW5kPWZ1''@;'; put 'put ''bmN0aW9uKHApe3ZhciBiO2I9dGhpcy5sZW5ndGg+cC5sZW5ndGg/cDp0aGlzO2Zvcih2YXIgeD0wO3g8Yi5sZW5ndGg7eCsrKXRoaXMud29yZHNbeF09dGhpcy53b3Jkc1t4XSZwLndvcmRzW3hdO3JldHVybiB0aGlzLmxlbmd0aD1iLmxlbmd0aCx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBl''@;'; put 'put ''LmlhbmQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGcoISh0aGlzLm5lZ2F0aXZlfHAubmVnYXRpdmUpKSx0aGlzLml1YW5kKHApfSx3LnByb3RvdHlwZS5hbmQ9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYW5kKHApOnAuY2xvbmUoKS5pYW5kKHRo''@;'; put 'put ''aXMpfSx3LnByb3RvdHlwZS51YW5kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaXVhbmQocCk6cC5jbG9uZSgpLml1YW5kKHRoaXMpfSx3LnByb3RvdHlwZS5pdXhvcj1mdW5jdGlvbihwKXt2YXIgYix4O3RoaXMubGVuZ3RoPnAubGVuZ3Ro''@;'; put 'put ''PyhiPXRoaXMseD1wKTooYj1wLHg9dGhpcyk7Zm9yKHZhciBDPTA7Qzx4Lmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT1iLndvcmRzW0NdXngud29yZHNbQ107aWYodGhpcyE9PWIpZm9yKDtDPGIubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPWIud29yZHNbQ107cmV0dXJuIHRoaXMubGVuZ3Ro''@;'; put 'put ''PWIubGVuZ3RoLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXhvcj1mdW5jdGlvbihwKXtyZXR1cm4gZyghKHRoaXMubmVnYXRpdmV8cC5uZWdhdGl2ZSkpLHRoaXMuaXV4b3IocCl9LHcucHJvdG90eXBlLnhvcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhp''@;'; put 'put ''cy5jbG9uZSgpLml4b3IocCk6cC5jbG9uZSgpLml4b3IodGhpcyl9LHcucHJvdG90eXBlLnV4b3I9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdXhvcihwKTpwLmNsb25lKCkuaXV4b3IodGhpcyl9LHcucHJvdG90eXBlLmlub3RuPWZ1bmN0''@;'; put 'put ''aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKTt2YXIgYj0wfE1hdGguY2VpbChwLzI2KSx4PXAlMjY7dGhpcy5fZXhwYW5kKGIpLHg+MCYmYi0tO2Zvcih2YXIgQz0wO0M8YjtDKyspdGhpcy53b3Jkc1tDXT02NzEwODg2MyZ+dGhpcy53b3Jkc1tDXTtyZXR1cm4geD4wJiYodGhp''@;'; put 'put ''cy53b3Jkc1tDXT1+dGhpcy53b3Jkc1tDXSY2NzEwODg2Mz4+MjYteCksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5ub3RuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaW5vdG4ocCl9LHcucHJvdG90eXBlLnNldG49ZnVuY3Rpb24ocCxiKXtnKCJudW1iZXIiPT10eXBlb2Yg''@;'; put 'put ''cCYmcD49MCk7dmFyIHg9cC8yNnwwLEM9cCUyNjtyZXR1cm4gdGhpcy5fZXhwYW5kKHgrMSksdGhpcy53b3Jkc1t4XT1iP3RoaXMud29yZHNbeF18MTw8Qzp0aGlzLndvcmRzW3hdJn4oMTw8QyksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKHApe3ZhciBiLHgsQztp''@;'; put 'put ''ZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PXAubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCxiPXRoaXMuaXN1YihwKSx0aGlzLm5lZ2F0aXZlXj0xLHRoaXMuX25vcm1TaWduKCk7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1wLm5lZ2F0aXZlKXJldHVybiBwLm5lZ2F0aXZlPTAs''@;'; put 'put ''Yj10aGlzLmlzdWIocCkscC5uZWdhdGl2ZT0xLGIuX25vcm1TaWduKCk7dGhpcy5sZW5ndGg+cC5sZW5ndGg/KHg9dGhpcyxDPXApOih4PXAsQz10aGlzKTtmb3IodmFyIFQ9MCxIPTA7SDxDLmxlbmd0aDtIKyspdGhpcy53b3Jkc1tIXT02NzEwODg2MyYoYj0oMHx4LndvcmRzW0hdKSsoMHxD''@;'; put 'put ''LndvcmRzW0hdKStUKSxUPWI+Pj4yNjtmb3IoOzAhPT1UJiZIPHgubGVuZ3RoO0grKyl0aGlzLndvcmRzW0hdPTY3MTA4ODYzJihiPSgwfHgud29yZHNbSF0pK1QpLFQ9Yj4+PjI2O2lmKHRoaXMubGVuZ3RoPXgubGVuZ3RoLDAhPT1UKXRoaXMud29yZHNbdGhpcy5sZW5ndGhdPVQsdGhpcy5s''@;'; put 'put ''ZW5ndGgrKztlbHNlIGlmKHghPT10aGlzKWZvcig7SDx4Lmxlbmd0aDtIKyspdGhpcy53b3Jkc1tIXT14LndvcmRzW0hdO3JldHVybiB0aGlzfSx3LnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24ocCl7dmFyIGI7cmV0dXJuIDAhPT1wLm5lZ2F0aXZlJiYwPT09dGhpcy5uZWdhdGl2ZT8ocC5uZWdh''@;'; put 'put ''dGl2ZT0wLGI9dGhpcy5zdWIocCkscC5uZWdhdGl2ZV49MSxiKTowPT09cC5uZWdhdGl2ZSYmMCE9PXRoaXMubmVnYXRpdmU/KHRoaXMubmVnYXRpdmU9MCxiPXAuc3ViKHRoaXMpLHRoaXMubmVnYXRpdmU9MSxiKTp0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaWFkZChwKTpw''@;'; put 'put ''LmNsb25lKCkuaWFkZCh0aGlzKX0sdy5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihwKXtpZigwIT09cC5uZWdhdGl2ZSl7cC5uZWdhdGl2ZT0wO3ZhciBiPXRoaXMuaWFkZChwKTtyZXR1cm4gcC5uZWdhdGl2ZT0xLGIuX25vcm1TaWduKCl9aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRo''@;'; put 'put ''aXMubmVnYXRpdmU9MCx0aGlzLmlhZGQocCksdGhpcy5uZWdhdGl2ZT0xLHRoaXMuX25vcm1TaWduKCk7dmFyIEMsVCx4PXRoaXMuY21wKHApO2lmKDA9PT14KXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5sZW5ndGg9MSx0aGlzLndvcmRzWzBdPTAsdGhpczt4PjA/KEM9dGhpcyxUPXAp''@;'; put 'put ''OihDPXAsVD10aGlzKTtmb3IodmFyIEg9MCxqPTA7ajxULmxlbmd0aDtqKyspSD0oYj0oMHxDLndvcmRzW2pdKS0oMHxULndvcmRzW2pdKStIKT4+MjYsdGhpcy53b3Jkc1tqXT02NzEwODg2MyZiO2Zvcig7MCE9PUgmJmo8Qy5sZW5ndGg7aisrKUg9KGI9KDB8Qy53b3Jkc1tqXSkrSCk+PjI2''@;'; put 'put ''LHRoaXMud29yZHNbal09NjcxMDg4NjMmYjtpZigwPT09SCYmajxDLmxlbmd0aCYmQyE9PXRoaXMpZm9yKDtqPEMubGVuZ3RoO2orKyl0aGlzLndvcmRzW2pdPUMud29yZHNbal07cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLGopLEMhPT10aGlzJiYodGhpcy5uZWdh''@;'; put 'put ''dGl2ZT0xKSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWIocCl9O3ZhciBZPWZ1bmN0aW9uKHAsYix4KXt2YXIgRSxtLEEsQz1wLndvcmRzLFQ9Yi53b3JkcyxIPXgud29yZHMsaj0wLGFlPTB8Q1swXSx0ZT04MTkxJmFl''@;'; put 'put ''LHNlPWFlPj4+MTMsd2U9MHxDWzFdLFVlPTgxOTEmd2UsSmU9d2U+Pj4xMyxvdD0wfENbMl0seGU9ODE5MSZvdCx2ZT1vdD4+PjEzLFhlPTB8Q1szXSx6ZT04MTkxJlhlLERlPVhlPj4+MTMsRmU9MHxDWzRdLE9lPTgxOTEmRmUsSWU9RmU+Pj4xMyxWZT0wfENbNV0sa2U9ODE5MSZWZSxBZT1W''@;'; put 'put ''ZT4+PjEzLF90PTB8Q1s2XSxudD04MTkxJl90LFFlPV90Pj4+MTMsdW49MHxDWzddLHl0PTgxOTEmdW4sTXQ9dW4+Pj4xMyxEdD0wfENbOF0saXQ9ODE5MSZEdCwkZT1EdD4+PjEzLHR0PTB8Q1s5XSxIZT04MTkxJnR0LHV0PXR0Pj4+MTMscXQ9MHxUWzBdLFJ0PTgxOTEmcXQsUHQ9cXQ+Pj4x''@;'; put 'put ''MyxjaT0wfFRbMV0sUXQ9ODE5MSZjaSxzbj1jaT4+PjEzLFJpPTB8VFsyXSxobj04MTkxJlJpLGZ0PVJpPj4+MTMsT3I9MHxUWzNdLFd0PTgxOTEmT3IsQXQ9T3I+Pj4xMyxSbj0wfFRbNF0sc3Q9ODE5MSZSbixVdD1Sbj4+PjEzLHJpPTB8VFs1XSxXZT04MTkxJnJpLFR0PXJpPj4+MTMsbnI9''@;'; put 'put ''MHxUWzZdLGh0PTgxOTEmbnIseHQ9bnI+Pj4xMyxqbj0wfFRbN10scm49ODE5MSZqbix6dD1qbj4+PjEzLGhpPTB8VFs4XSxjbj04MTkxJmhpLGZuPWhpPj4+MTMsSWk9MHxUWzldLFh0PTgxOTEmSWksZW49SWk+Pj4xMzt4Lm5lZ2F0aXZlPXAubmVnYXRpdmVeYi5uZWdhdGl2ZSx4Lmxlbmd0''@;'; put 'put ''aD0xOTt2YXIgdWE9KGorKEU9TWF0aC5pbXVsKHRlLFJ0KSl8MCkrKCg4MTkxJihtPShtPU1hdGguaW11bCh0ZSxQdCkpK01hdGguaW11bChzZSxSdCl8MCkpPDwxMyl8MDtqPSgoQT1NYXRoLmltdWwoc2UsUHQpKSsobT4+PjEzKXwwKSsodWE+Pj4yNil8MCx1YSY9NjcxMDg4NjMsRT1NYXRo''@;'; put 'put ''LmltdWwoVWUsUnQpLG09KG09TWF0aC5pbXVsKFVlLFB0KSkrTWF0aC5pbXVsKEplLFJ0KXwwLEE9TWF0aC5pbXVsKEplLFB0KTt2YXIgRWk9KGorKEU9RStNYXRoLmltdWwodGUsUXQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxzbil8MCkrTWF0aC5pbXVsKHNlLFF0KXww''@;'; put 'put ''KSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLHNuKXwwKSsobT4+PjEzKXwwKSsoRWk+Pj4yNil8MCxFaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoeGUsUnQpLG09KG09TWF0aC5pbXVsKHhlLFB0KSkrTWF0aC5pbXVsKHZlLFJ0KXwwLEE9TWF0aC5pbXVsKHZlLFB0KSxFPUUrTWF0aC5p''@;'; put 'put ''bXVsKFVlLFF0KXwwLG09KG09bStNYXRoLmltdWwoVWUsc24pfDApK01hdGguaW11bChKZSxRdCl8MCxBPUErTWF0aC5pbXVsKEplLHNuKXwwO3ZhciB2cj0oaisoRT1FK01hdGguaW11bCh0ZSxobil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLGZ0KXwwKStNYXRoLmltdWwo''@;'; put 'put ''c2UsaG4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsZnQpfDApKyhtPj4+MTMpfDApKyh2cj4+PjI2KXwwLHZyJj02NzEwODg2MyxFPU1hdGguaW11bCh6ZSxSdCksbT0obT1NYXRoLmltdWwoemUsUHQpKStNYXRoLmltdWwoRGUsUnQpfDAsQT1NYXRoLmltdWwoRGUsUHQpLEU9''@;'; put 'put ''RStNYXRoLmltdWwoeGUsUXQpfDAsbT0obT1tK01hdGguaW11bCh4ZSxzbil8MCkrTWF0aC5pbXVsKHZlLFF0KXwwLEE9QStNYXRoLmltdWwodmUsc24pfDAsRT1FK01hdGguaW11bChVZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKFVlLGZ0KXwwKStNYXRoLmltdWwoSmUsaG4pfDAsQT1BK01h''@;'; put 'put ''dGguaW11bChKZSxmdCl8MDt2YXIgV249KGorKEU9RStNYXRoLmltdWwodGUsV3QpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxBdCl8MCkrTWF0aC5pbXVsKHNlLFd0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLEF0KXwwKSsobT4+PjEzKXwwKSsoV24+Pj4y''@;'; put 'put ''Nil8MCxXbiY9NjcxMDg4NjMsRT1NYXRoLmltdWwoT2UsUnQpLG09KG09TWF0aC5pbXVsKE9lLFB0KSkrTWF0aC5pbXVsKEllLFJ0KXwwLEE9TWF0aC5pbXVsKEllLFB0KSxFPUUrTWF0aC5pbXVsKHplLFF0KXwwLG09KG09bStNYXRoLmltdWwoemUsc24pfDApK01hdGguaW11bChEZSxRdCl8''@;'; put 'put ''MCxBPUErTWF0aC5pbXVsKERlLHNuKXwwLEU9RStNYXRoLmltdWwoeGUsaG4pfDAsbT0obT1tK01hdGguaW11bCh4ZSxmdCl8MCkrTWF0aC5pbXVsKHZlLGhuKXwwLEE9QStNYXRoLmltdWwodmUsZnQpfDAsRT1FK01hdGguaW11bChVZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLEF0KXww''@;'; put 'put ''KStNYXRoLmltdWwoSmUsV3QpfDAsQT1BK01hdGguaW11bChKZSxBdCl8MDt2YXIgJGk9KGorKEU9RStNYXRoLmltdWwodGUsc3QpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxVdCl8MCkrTWF0aC5pbXVsKHNlLHN0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNl''@;'; put 'put ''LFV0KXwwKSsobT4+PjEzKXwwKSsoJGk+Pj4yNil8MCwkaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoa2UsUnQpLG09KG09TWF0aC5pbXVsKGtlLFB0KSkrTWF0aC5pbXVsKEFlLFJ0KXwwLEE9TWF0aC5pbXVsKEFlLFB0KSxFPUUrTWF0aC5pbXVsKE9lLFF0KXwwLG09KG09bStNYXRoLmltdWwo''@;'; put 'put ''T2Usc24pfDApK01hdGguaW11bChJZSxRdCl8MCxBPUErTWF0aC5pbXVsKEllLHNuKXwwLEU9RStNYXRoLmltdWwoemUsaG4pfDAsbT0obT1tK01hdGguaW11bCh6ZSxmdCl8MCkrTWF0aC5pbXVsKERlLGhuKXwwLEE9QStNYXRoLmltdWwoRGUsZnQpfDAsRT1FK01hdGguaW11bCh4ZSxXdCl8''@;'; put 'put ''MCxtPShtPW0rTWF0aC5pbXVsKHhlLEF0KXwwKStNYXRoLmltdWwodmUsV3QpfDAsQT1BK01hdGguaW11bCh2ZSxBdCl8MCxFPUUrTWF0aC5pbXVsKFVlLHN0KXwwLG09KG09bStNYXRoLmltdWwoVWUsVXQpfDApK01hdGguaW11bChKZSxzdCl8MCxBPUErTWF0aC5pbXVsKEplLFV0KXwwO3Zh''@;'; put 'put ''ciBlaT0oaisoRT1FK01hdGguaW11bCh0ZSxXZSl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLFR0KXwwKStNYXRoLmltdWwoc2UsV2UpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsVHQpfDApKyhtPj4+MTMpfDApKyhlaT4+PjI2KXwwLGVpJj02NzEwODg2MyxF''@;'; put 'put ''PU1hdGguaW11bChudCxSdCksbT0obT1NYXRoLmltdWwobnQsUHQpKStNYXRoLmltdWwoUWUsUnQpfDAsQT1NYXRoLmltdWwoUWUsUHQpLEU9RStNYXRoLmltdWwoa2UsUXQpfDAsbT0obT1tK01hdGguaW11bChrZSxzbil8MCkrTWF0aC5pbXVsKEFlLFF0KXwwLEE9QStNYXRoLmltdWwoQWUs''@;'; put 'put ''c24pfDAsRT1FK01hdGguaW11bChPZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKE9lLGZ0KXwwKStNYXRoLmltdWwoSWUsaG4pfDAsQT1BK01hdGguaW11bChJZSxmdCl8MCxFPUUrTWF0aC5pbXVsKHplLFd0KXwwLG09KG09bStNYXRoLmltdWwoemUsQXQpfDApK01hdGguaW11bChEZSxXdCl8''@;'; put 'put ''MCxBPUErTWF0aC5pbXVsKERlLEF0KXwwLEU9RStNYXRoLmltdWwoeGUsc3QpfDAsbT0obT1tK01hdGguaW11bCh4ZSxVdCl8MCkrTWF0aC5pbXVsKHZlLHN0KXwwLEE9QStNYXRoLmltdWwodmUsVXQpfDAsRT1FK01hdGguaW11bChVZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLFR0KXww''@;'; put 'put ''KStNYXRoLmltdWwoSmUsV2UpfDAsQT1BK01hdGguaW11bChKZSxUdCl8MDt2YXIgUXI9KGorKEU9RStNYXRoLmltdWwodGUsaHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSx4dCl8MCkrTWF0aC5pbXVsKHNlLGh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNl''@;'; put 'put ''LHh0KXwwKSsobT4+PjEzKXwwKSsoUXI+Pj4yNil8MCxRciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoeXQsUnQpLG09KG09TWF0aC5pbXVsKHl0LFB0KSkrTWF0aC5pbXVsKE10LFJ0KXwwLEE9TWF0aC5pbXVsKE10LFB0KSxFPUUrTWF0aC5pbXVsKG50LFF0KXwwLG09KG09bStNYXRoLmltdWwo''@;'; put 'put ''bnQsc24pfDApK01hdGguaW11bChRZSxRdCl8MCxBPUErTWF0aC5pbXVsKFFlLHNuKXwwLEU9RStNYXRoLmltdWwoa2UsaG4pfDAsbT0obT1tK01hdGguaW11bChrZSxmdCl8MCkrTWF0aC5pbXVsKEFlLGhuKXwwLEE9QStNYXRoLmltdWwoQWUsZnQpfDAsRT1FK01hdGguaW11bChPZSxXdCl8''@;'; put 'put ''MCxtPShtPW0rTWF0aC5pbXVsKE9lLEF0KXwwKStNYXRoLmltdWwoSWUsV3QpfDAsQT1BK01hdGguaW11bChJZSxBdCl8MCxFPUUrTWF0aC5pbXVsKHplLHN0KXwwLG09KG09bStNYXRoLmltdWwoemUsVXQpfDApK01hdGguaW11bChEZSxzdCl8MCxBPUErTWF0aC5pbXVsKERlLFV0KXwwLEU9''@;'; put 'put ''RStNYXRoLmltdWwoeGUsV2UpfDAsbT0obT1tK01hdGguaW11bCh4ZSxUdCl8MCkrTWF0aC5pbXVsKHZlLFdlKXwwLEE9QStNYXRoLmltdWwodmUsVHQpfDAsRT1FK01hdGguaW11bChVZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLHh0KXwwKStNYXRoLmltdWwoSmUsaHQpfDAsQT1BK01h''@;'; put 'put ''dGguaW11bChKZSx4dCl8MDt2YXIgVmk9KGorKEU9RStNYXRoLmltdWwodGUscm4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSx6dCl8MCkrTWF0aC5pbXVsKHNlLHJuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLHp0KXwwKSsobT4+PjEzKXwwKSsoVmk+Pj4y''@;'; put 'put ''Nil8MCxWaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoaXQsUnQpLG09KG09TWF0aC5pbXVsKGl0LFB0KSkrTWF0aC5pbXVsKCRlLFJ0KXwwLEE9TWF0aC5pbXVsKCRlLFB0KSxFPUUrTWF0aC5pbXVsKHl0LFF0KXwwLG09KG09bStNYXRoLmltdWwoeXQsc24pfDApK01hdGguaW11bChNdCxRdCl8''@;'; put 'put ''MCxBPUErTWF0aC5pbXVsKE10LHNuKXwwLEU9RStNYXRoLmltdWwobnQsaG4pfDAsbT0obT1tK01hdGguaW11bChudCxmdCl8MCkrTWF0aC5pbXVsKFFlLGhuKXwwLEE9QStNYXRoLmltdWwoUWUsZnQpfDAsRT1FK01hdGguaW11bChrZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKGtlLEF0KXww''@;'; put 'put ''KStNYXRoLmltdWwoQWUsV3QpfDAsQT1BK01hdGguaW11bChBZSxBdCl8MCxFPUUrTWF0aC5pbXVsKE9lLHN0KXwwLG09KG09bStNYXRoLmltdWwoT2UsVXQpfDApK01hdGguaW11bChJZSxzdCl8MCxBPUErTWF0aC5pbXVsKEllLFV0KXwwLEU9RStNYXRoLmltdWwoemUsV2UpfDAsbT0obT1t''@;'; put 'put ''K01hdGguaW11bCh6ZSxUdCl8MCkrTWF0aC5pbXVsKERlLFdlKXwwLEE9QStNYXRoLmltdWwoRGUsVHQpfDAsRT1FK01hdGguaW11bCh4ZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKHhlLHh0KXwwKStNYXRoLmltdWwodmUsaHQpfDAsQT1BK01hdGguaW11bCh2ZSx4dCl8MCxFPUUrTWF0aC5p''@;'; put 'put ''bXVsKFVlLHJuKXwwLG09KG09bStNYXRoLmltdWwoVWUsenQpfDApK01hdGguaW11bChKZSxybil8MCxBPUErTWF0aC5pbXVsKEplLHp0KXwwO3ZhciBOaT0oaisoRT1FK01hdGguaW11bCh0ZSxjbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLGZuKXwwKStNYXRoLmltdWwo''@;'; put 'put ''c2UsY24pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsZm4pfDApKyhtPj4+MTMpfDApKyhOaT4+PjI2KXwwLE5pJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxSdCksbT0obT1NYXRoLmltdWwoSGUsUHQpKStNYXRoLmltdWwodXQsUnQpfDAsQT1NYXRoLmltdWwodXQsUHQpLEU9''@;'; put 'put ''RStNYXRoLmltdWwoaXQsUXQpfDAsbT0obT1tK01hdGguaW11bChpdCxzbil8MCkrTWF0aC5pbXVsKCRlLFF0KXwwLEE9QStNYXRoLmltdWwoJGUsc24pfDAsRT1FK01hdGguaW11bCh5dCxobil8MCxtPShtPW0rTWF0aC5pbXVsKHl0LGZ0KXwwKStNYXRoLmltdWwoTXQsaG4pfDAsQT1BK01h''@;'; put 'put ''dGguaW11bChNdCxmdCl8MCxFPUUrTWF0aC5pbXVsKG50LFd0KXwwLG09KG09bStNYXRoLmltdWwobnQsQXQpfDApK01hdGguaW11bChRZSxXdCl8MCxBPUErTWF0aC5pbXVsKFFlLEF0KXwwLEU9RStNYXRoLmltdWwoa2Usc3QpfDAsbT0obT1tK01hdGguaW11bChrZSxVdCl8MCkrTWF0aC5p''@;'; put 'put ''bXVsKEFlLHN0KXwwLEE9QStNYXRoLmltdWwoQWUsVXQpfDAsRT1FK01hdGguaW11bChPZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKE9lLFR0KXwwKStNYXRoLmltdWwoSWUsV2UpfDAsQT1BK01hdGguaW11bChJZSxUdCl8MCxFPUUrTWF0aC5pbXVsKHplLGh0KXwwLG09KG09bStNYXRoLmlt''@;'; put 'put ''dWwoemUseHQpfDApK01hdGguaW11bChEZSxodCl8MCxBPUErTWF0aC5pbXVsKERlLHh0KXwwLEU9RStNYXRoLmltdWwoeGUscm4pfDAsbT0obT1tK01hdGguaW11bCh4ZSx6dCl8MCkrTWF0aC5pbXVsKHZlLHJuKXwwLEE9QStNYXRoLmltdWwodmUsenQpfDAsRT1FK01hdGguaW11bChVZSxj''@;'; put 'put ''bil8MCxtPShtPW0rTWF0aC5pbXVsKFVlLGZuKXwwKStNYXRoLmltdWwoSmUsY24pfDAsQT1BK01hdGguaW11bChKZSxmbil8MDt2YXIgRGE9KGorKEU9RStNYXRoLmltdWwodGUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxlbil8MCkrTWF0aC5pbXVsKHNlLFh0KXww''@;'; put 'put ''KSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLGVuKXwwKSsobT4+PjEzKXwwKSsoRGE+Pj4yNil8MCxEYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsUXQpLG09KG09TWF0aC5pbXVsKEhlLHNuKSkrTWF0aC5pbXVsKHV0LFF0KXwwLEE9TWF0aC5pbXVsKHV0LHNuKSxFPUUrTWF0aC5p''@;'; put 'put ''bXVsKGl0LGhuKXwwLG09KG09bStNYXRoLmltdWwoaXQsZnQpfDApK01hdGguaW11bCgkZSxobil8MCxBPUErTWF0aC5pbXVsKCRlLGZ0KXwwLEU9RStNYXRoLmltdWwoeXQsV3QpfDAsbT0obT1tK01hdGguaW11bCh5dCxBdCl8MCkrTWF0aC5pbXVsKE10LFd0KXwwLEE9QStNYXRoLmltdWwo''@;'; put 'put ''TXQsQXQpfDAsRT1FK01hdGguaW11bChudCxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKG50LFV0KXwwKStNYXRoLmltdWwoUWUsc3QpfDAsQT1BK01hdGguaW11bChRZSxVdCl8MCxFPUUrTWF0aC5pbXVsKGtlLFdlKXwwLG09KG09bStNYXRoLmltdWwoa2UsVHQpfDApK01hdGguaW11bChBZSxX''@;'; put 'put ''ZSl8MCxBPUErTWF0aC5pbXVsKEFlLFR0KXwwLEU9RStNYXRoLmltdWwoT2UsaHQpfDAsbT0obT1tK01hdGguaW11bChPZSx4dCl8MCkrTWF0aC5pbXVsKEllLGh0KXwwLEE9QStNYXRoLmltdWwoSWUseHQpfDAsRT1FK01hdGguaW11bCh6ZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKHplLHp0''@;'; put 'put ''KXwwKStNYXRoLmltdWwoRGUscm4pfDAsQT1BK01hdGguaW11bChEZSx6dCl8MCxFPUUrTWF0aC5pbXVsKHhlLGNuKXwwLG09KG09bStNYXRoLmltdWwoeGUsZm4pfDApK01hdGguaW11bCh2ZSxjbil8MCxBPUErTWF0aC5pbXVsKHZlLGZuKXwwO3ZhciBMcj0oaisoRT1FK01hdGguaW11bChV''@;'; put 'put ''ZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKFVlLGVuKXwwKStNYXRoLmltdWwoSmUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoSmUsZW4pfDApKyhtPj4+MTMpfDApKyhMcj4+PjI2KXwwLExyJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxobiksbT0obT1N''@;'; put 'put ''YXRoLmltdWwoSGUsZnQpKStNYXRoLmltdWwodXQsaG4pfDAsQT1NYXRoLmltdWwodXQsZnQpLEU9RStNYXRoLmltdWwoaXQsV3QpfDAsbT0obT1tK01hdGguaW11bChpdCxBdCl8MCkrTWF0aC5pbXVsKCRlLFd0KXwwLEE9QStNYXRoLmltdWwoJGUsQXQpfDAsRT1FK01hdGguaW11bCh5dCxz''@;'; put 'put ''dCl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LFV0KXwwKStNYXRoLmltdWwoTXQsc3QpfDAsQT1BK01hdGguaW11bChNdCxVdCl8MCxFPUUrTWF0aC5pbXVsKG50LFdlKXwwLG09KG09bStNYXRoLmltdWwobnQsVHQpfDApK01hdGguaW11bChRZSxXZSl8MCxBPUErTWF0aC5pbXVsKFFlLFR0KXww''@;'; put 'put ''LEU9RStNYXRoLmltdWwoa2UsaHQpfDAsbT0obT1tK01hdGguaW11bChrZSx4dCl8MCkrTWF0aC5pbXVsKEFlLGh0KXwwLEE9QStNYXRoLmltdWwoQWUseHQpfDAsRT1FK01hdGguaW11bChPZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKE9lLHp0KXwwKStNYXRoLmltdWwoSWUscm4pfDAsQT1B''@;'; put 'put ''K01hdGguaW11bChJZSx6dCl8MCxFPUUrTWF0aC5pbXVsKHplLGNuKXwwLG09KG09bStNYXRoLmltdWwoemUsZm4pfDApK01hdGguaW11bChEZSxjbil8MCxBPUErTWF0aC5pbXVsKERlLGZuKXwwO3ZhciBXaT0oaisoRT1FK01hdGguaW11bCh4ZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0r''@;'; put 'put ''TWF0aC5pbXVsKHhlLGVuKXwwKStNYXRoLmltdWwodmUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwodmUsZW4pfDApKyhtPj4+MTMpfDApKyhXaT4+PjI2KXwwLFdpJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxXdCksbT0obT1NYXRoLmltdWwoSGUsQXQpKStNYXRoLmltdWwo''@;'; put 'put ''dXQsV3QpfDAsQT1NYXRoLmltdWwodXQsQXQpLEU9RStNYXRoLmltdWwoaXQsc3QpfDAsbT0obT1tK01hdGguaW11bChpdCxVdCl8MCkrTWF0aC5pbXVsKCRlLHN0KXwwLEE9QStNYXRoLmltdWwoJGUsVXQpfDAsRT1FK01hdGguaW11bCh5dCxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LFR0''@;'; put 'put ''KXwwKStNYXRoLmltdWwoTXQsV2UpfDAsQT1BK01hdGguaW11bChNdCxUdCl8MCxFPUUrTWF0aC5pbXVsKG50LGh0KXwwLG09KG09bStNYXRoLmltdWwobnQseHQpfDApK01hdGguaW11bChRZSxodCl8MCxBPUErTWF0aC5pbXVsKFFlLHh0KXwwLEU9RStNYXRoLmltdWwoa2Uscm4pfDAsbT0o''@;'; put 'put ''bT1tK01hdGguaW11bChrZSx6dCl8MCkrTWF0aC5pbXVsKEFlLHJuKXwwLEE9QStNYXRoLmltdWwoQWUsenQpfDAsRT1FK01hdGguaW11bChPZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKE9lLGZuKXwwKStNYXRoLmltdWwoSWUsY24pfDAsQT1BK01hdGguaW11bChJZSxmbil8MDt2YXIgcGE9''@;'; put 'put ''KGorKEU9RStNYXRoLmltdWwoemUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh6ZSxlbil8MCkrTWF0aC5pbXVsKERlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKERlLGVuKXwwKSsobT4+PjEzKXwwKSsocGE+Pj4yNil8MCxwYSY9NjcxMDg4NjMsRT1NYXRo''@;'; put 'put ''LmltdWwoSGUsc3QpLG09KG09TWF0aC5pbXVsKEhlLFV0KSkrTWF0aC5pbXVsKHV0LHN0KXwwLEE9TWF0aC5pbXVsKHV0LFV0KSxFPUUrTWF0aC5pbXVsKGl0LFdlKXwwLG09KG09bStNYXRoLmltdWwoaXQsVHQpfDApK01hdGguaW11bCgkZSxXZSl8MCxBPUErTWF0aC5pbXVsKCRlLFR0KXww''@;'; put 'put ''LEU9RStNYXRoLmltdWwoeXQsaHQpfDAsbT0obT1tK01hdGguaW11bCh5dCx4dCl8MCkrTWF0aC5pbXVsKE10LGh0KXwwLEE9QStNYXRoLmltdWwoTXQseHQpfDAsRT1FK01hdGguaW11bChudCxybil8MCxtPShtPW0rTWF0aC5pbXVsKG50LHp0KXwwKStNYXRoLmltdWwoUWUscm4pfDAsQT1B''@;'; put 'put ''K01hdGguaW11bChRZSx6dCl8MCxFPUUrTWF0aC5pbXVsKGtlLGNuKXwwLG09KG09bStNYXRoLmltdWwoa2UsZm4pfDApK01hdGguaW11bChBZSxjbil8MCxBPUErTWF0aC5pbXVsKEFlLGZuKXwwO3ZhciBRbj0oaisoRT1FK01hdGguaW11bChPZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0r''@;'; put 'put ''TWF0aC5pbXVsKE9lLGVuKXwwKStNYXRoLmltdWwoSWUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoSWUsZW4pfDApKyhtPj4+MTMpfDApKyhRbj4+PjI2KXwwLFFuJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxXZSksbT0obT1NYXRoLmltdWwoSGUsVHQpKStNYXRoLmltdWwo''@;'; put 'put ''dXQsV2UpfDAsQT1NYXRoLmltdWwodXQsVHQpLEU9RStNYXRoLmltdWwoaXQsaHQpfDAsbT0obT1tK01hdGguaW11bChpdCx4dCl8MCkrTWF0aC5pbXVsKCRlLGh0KXwwLEE9QStNYXRoLmltdWwoJGUseHQpfDAsRT1FK01hdGguaW11bCh5dCxybil8MCxtPShtPW0rTWF0aC5pbXVsKHl0LHp0''@;'; put 'put ''KXwwKStNYXRoLmltdWwoTXQscm4pfDAsQT1BK01hdGguaW11bChNdCx6dCl8MCxFPUUrTWF0aC5pbXVsKG50LGNuKXwwLG09KG09bStNYXRoLmltdWwobnQsZm4pfDApK01hdGguaW11bChRZSxjbil8MCxBPUErTWF0aC5pbXVsKFFlLGZuKXwwO3ZhciBsYT0oaisoRT1FK01hdGguaW11bChr''@;'; put 'put ''ZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKGtlLGVuKXwwKStNYXRoLmltdWwoQWUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoQWUsZW4pfDApKyhtPj4+MTMpfDApKyhsYT4+PjI2KXwwLGxhJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxodCksbT0obT1N''@;'; put 'put ''YXRoLmltdWwoSGUseHQpKStNYXRoLmltdWwodXQsaHQpfDAsQT1NYXRoLmltdWwodXQseHQpLEU9RStNYXRoLmltdWwoaXQscm4pfDAsbT0obT1tK01hdGguaW11bChpdCx6dCl8MCkrTWF0aC5pbXVsKCRlLHJuKXwwLEE9QStNYXRoLmltdWwoJGUsenQpfDAsRT1FK01hdGguaW11bCh5dCxj''@;'; put 'put ''bil8MCxtPShtPW0rTWF0aC5pbXVsKHl0LGZuKXwwKStNYXRoLmltdWwoTXQsY24pfDAsQT1BK01hdGguaW11bChNdCxmbil8MDt2YXIgeWE9KGorKEU9RStNYXRoLmltdWwobnQsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChudCxlbil8MCkrTWF0aC5pbXVsKFFlLFh0KXww''@;'; put 'put ''KSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKFFlLGVuKXwwKSsobT4+PjEzKXwwKSsoeWE+Pj4yNil8MCx5YSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUscm4pLG09KG09TWF0aC5pbXVsKEhlLHp0KSkrTWF0aC5pbXVsKHV0LHJuKXwwLEE9TWF0aC5pbXVsKHV0LHp0KSxFPUUrTWF0aC5p''@;'; put 'put ''bXVsKGl0LGNuKXwwLG09KG09bStNYXRoLmltdWwoaXQsZm4pfDApK01hdGguaW11bCgkZSxjbil8MCxBPUErTWF0aC5pbXVsKCRlLGZuKXwwO3ZhciBMYT0oaisoRT1FK01hdGguaW11bCh5dCxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHl0LGVuKXwwKStNYXRoLmltdWwo''@;'; put 'put ''TXQsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoTXQsZW4pfDApKyhtPj4+MTMpfDApKyhMYT4+PjI2KXwwLExhJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxjbiksbT0obT1NYXRoLmltdWwoSGUsZm4pKStNYXRoLmltdWwodXQsY24pfDAsQT1NYXRoLmltdWwodXQsZm4pO3Zh''@;'; put 'put ''ciBGYT0oaisoRT1FK01hdGguaW11bChpdCxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKGl0LGVuKXwwKStNYXRoLmltdWwoJGUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoJGUsZW4pfDApKyhtPj4+MTMpfDApKyhGYT4+PjI2KXwwLEZhJj02NzEwODg2Mzt2''@;'; put 'put ''YXIgdGk9KGorKEU9TWF0aC5pbXVsKEhlLFh0KSl8MCkrKCg4MTkxJihtPShtPU1hdGguaW11bChIZSxlbikpK01hdGguaW11bCh1dCxYdCl8MCkpPDwxMyl8MDtyZXR1cm4gaj0oKEE9TWF0aC5pbXVsKHV0LGVuKSkrKG0+Pj4xMyl8MCkrKHRpPj4+MjYpfDAsdGkmPTY3MTA4ODYzLEhbMF09''@;'; put 'put ''dWEsSFsxXT1FaSxIWzJdPXZyLEhbM109V24sSFs0XT0kaSxIWzVdPWVpLEhbNl09UXIsSFs3XT1WaSxIWzhdPU5pLEhbOV09RGEsSFsxMF09THIsSFsxMV09V2ksSFsxMl09cGEsSFsxM109UW4sSFsxNF09bGEsSFsxNV09eWEsSFsxNl09TGEsSFsxN109RmEsSFsxOF09dGksMCE9PWomJihI''@;'; put 'put ''WzE5XT1qLHgubGVuZ3RoKyspLHh9O2Z1bmN0aW9uIGVlKFYscCxiKXtyZXR1cm4obmV3IEopLm11bHAoVixwLGIpfWZ1bmN0aW9uIEooVixwKXt0aGlzLng9Vix0aGlzLnk9cH1NYXRoLmltdWx8fChZPVcpLHcucHJvdG90eXBlLm11bFRvPWZ1bmN0aW9uKHAsYil7dmFyIHgsQz10aGlzLmxl''@;'; put 'put ''bmd0aCtwLmxlbmd0aDtyZXR1cm4geD0xMD09PXRoaXMubGVuZ3RoJiYxMD09PXAubGVuZ3RoP1kodGhpcyxwLGIpOkM8NjM/Vyh0aGlzLHAsYik6QzwxMDI0P2Z1bmN0aW9uIHEoVixwLGIpe2IubmVnYXRpdmU9cC5uZWdhdGl2ZV5WLm5lZ2F0aXZlLGIubGVuZ3RoPVYubGVuZ3RoK3AubGVu''@;'; put 'put ''Z3RoO2Zvcih2YXIgeD0wLEM9MCxUPTA7VDxiLmxlbmd0aC0xO1QrKyl7dmFyIEg9QztDPTA7Zm9yKHZhciBqPTY3MTA4ODYzJngsRT1NYXRoLm1pbihULHAubGVuZ3RoLTEpLG09TWF0aC5tYXgoMCxULVYubGVuZ3RoKzEpO208PUU7bSsrKXt2YXIgc2U9KDB8Vi53b3Jkc1tULW1dKSooMHxw''@;'; put 'put ''LndvcmRzW21dKSx3ZT02NzEwODg2MyZzZTtqPTY3MTA4ODYzJih3ZT13ZStqfDApLEMrPShIPShIPUgrKHNlLzY3MTA4ODY0fDApfDApKyh3ZT4+PjI2KXwwKT4+PjI2LEgmPTY3MTA4ODYzfWIud29yZHNbVF09aix4PUgsSD1DfXJldHVybiAwIT09eD9iLndvcmRzW1RdPXg6Yi5sZW5ndGgt''@;'; put 'put ''LSxiLnN0cmlwKCl9KHRoaXMscCxiKTplZSh0aGlzLHAsYikseH0sSi5wcm90b3R5cGUubWFrZVJCVD1mdW5jdGlvbihwKXtmb3IodmFyIGI9bmV3IEFycmF5KHApLHg9dy5wcm90b3R5cGUuX2NvdW50Qml0cyhwKS0xLEM9MDtDPHA7QysrKWJbQ109dGhpcy5yZXZCaW4oQyx4LHApO3JldHVy''@;'; put 'put ''biBifSxKLnByb3RvdHlwZS5yZXZCaW49ZnVuY3Rpb24ocCxiLHgpe2lmKDA9PT1wfHxwPT09eC0xKXJldHVybiBwO2Zvcih2YXIgQz0wLFQ9MDtUPGI7VCsrKUN8PSgxJnApPDxiLVQtMSxwPj49MTtyZXR1cm4gQ30sSi5wcm90b3R5cGUucGVybXV0ZT1mdW5jdGlvbihwLGIseCxDLFQsSCl7''@;'; put 'put ''Zm9yKHZhciBqPTA7ajxIO2orKylDW2pdPWJbcFtqXV0sVFtqXT14W3Bbal1dfSxKLnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24ocCxiLHgsQyxULEgpe3RoaXMucGVybXV0ZShILHAsYix4LEMsVCk7Zm9yKHZhciBqPTE7ajxUO2o8PD0xKWZvcih2YXIgRT1qPDwxLG09TWF0aC5jb3Mo''@;'; put 'put ''MipNYXRoLlBJL0UpLEE9TWF0aC5zaW4oMipNYXRoLlBJL0UpLGFlPTA7YWU8VDthZSs9RSlmb3IodmFyIHRlPW0sc2U9QSx3ZT0wO3dlPGo7d2UrKyl7dmFyIFVlPXhbYWUrd2VdLEplPUNbYWUrd2VdLG90PXhbYWUrd2Ural0seGU9Q1thZSt3ZStqXSx2ZT10ZSpvdC1zZSp4ZTt4ZT10ZSp4''@;'; put 'put ''ZStzZSpvdCx4W2FlK3dlXT1VZSsob3Q9dmUpLENbYWUrd2VdPUplK3hlLHhbYWUrd2Ural09VWUtb3QsQ1thZSt3ZStqXT1KZS14ZSx3ZSE9PUUmJih2ZT1tKnRlLUEqc2Usc2U9bSpzZStBKnRlLHRlPXZlKX19LEoucHJvdG90eXBlLmd1ZXNzTGVuMTNiPWZ1bmN0aW9uKHAsYil7dmFyIHg9''@;'; put 'put ''MXxNYXRoLm1heChiLHApLEM9MSZ4LFQ9MDtmb3IoeD14LzJ8MDt4O3g+Pj49MSlUKys7cmV0dXJuIDE8PFQrMStDfSxKLnByb3RvdHlwZS5jb25qdWdhdGU9ZnVuY3Rpb24ocCxiLHgpe2lmKCEoeDw9MSkpZm9yKHZhciBDPTA7Qzx4LzI7QysrKXt2YXIgVD1wW0NdO3BbQ109cFt4LUMtMV0s''@;'; put 'put ''cFt4LUMtMV09VCxUPWJbQ10sYltDXT0tYlt4LUMtMV0sYlt4LUMtMV09LVR9fSxKLnByb3RvdHlwZS5ub3JtYWxpemUxM2I9ZnVuY3Rpb24ocCxiKXtmb3IodmFyIHg9MCxDPTA7QzxiLzI7QysrKXt2YXIgVD04MTkyKk1hdGgucm91bmQocFsyKkMrMV0vYikrTWF0aC5yb3VuZChwWzIqQ10v''@;'; put 'put ''YikreDtwW0NdPTY3MTA4ODYzJlQseD1UPDY3MTA4ODY0PzA6VC82NzEwODg2NHwwfXJldHVybiBwfSxKLnByb3RvdHlwZS5jb252ZXJ0MTNiPWZ1bmN0aW9uKHAsYix4LEMpe2Zvcih2YXIgVD0wLEg9MDtIPGI7SCsrKXhbMipIXT04MTkxJihUKz0wfHBbSF0pLHhbMipIKzFdPTgxOTEmKFQ+''@;'; put 'put ''Pj49MTMpLFQ+Pj49MTM7Zm9yKEg9MipiO0g8QzsrK0gpeFtIXT0wO2coMD09PVQpLGcoISgtODE5MiZUKSl9LEoucHJvdG90eXBlLnN0dWI9ZnVuY3Rpb24ocCl7Zm9yKHZhciBiPW5ldyBBcnJheShwKSx4PTA7eDxwO3grKyliW3hdPTA7cmV0dXJuIGJ9LEoucHJvdG90eXBlLm11bHA9ZnVu''@;'; put 'put ''Y3Rpb24ocCxiLHgpe3ZhciBDPTIqdGhpcy5ndWVzc0xlbjEzYihwLmxlbmd0aCxiLmxlbmd0aCksVD10aGlzLm1ha2VSQlQoQyksSD10aGlzLnN0dWIoQyksaj1uZXcgQXJyYXkoQyksRT1uZXcgQXJyYXkoQyksbT1uZXcgQXJyYXkoQyksQT1uZXcgQXJyYXkoQyksYWU9bmV3IEFycmF5KEMp''@;'; put 'put ''LHRlPW5ldyBBcnJheShDKSxzZT14LndvcmRzO3NlLmxlbmd0aD1DLHRoaXMuY29udmVydDEzYihwLndvcmRzLHAubGVuZ3RoLGosQyksdGhpcy5jb252ZXJ0MTNiKGIud29yZHMsYi5sZW5ndGgsQSxDKSx0aGlzLnRyYW5zZm9ybShqLEgsRSxtLEMsVCksdGhpcy50cmFuc2Zvcm0oQSxILGFl''@;'; put 'put ''LHRlLEMsVCk7Zm9yKHZhciB3ZT0wO3dlPEM7d2UrKyl7dmFyIFVlPUVbd2VdKmFlW3dlXS1tW3dlXSp0ZVt3ZV07bVt3ZV09RVt3ZV0qdGVbd2VdK21bd2VdKmFlW3dlXSxFW3dlXT1VZX1yZXR1cm4gdGhpcy5jb25qdWdhdGUoRSxtLEMpLHRoaXMudHJhbnNmb3JtKEUsbSxzZSxILEMsVCks''@;'; put 'put ''dGhpcy5jb25qdWdhdGUoc2UsSCxDKSx0aGlzLm5vcm1hbGl6ZTEzYihzZSxDKSx4Lm5lZ2F0aXZlPXAubmVnYXRpdmVeYi5uZWdhdGl2ZSx4Lmxlbmd0aD1wLmxlbmd0aCtiLmxlbmd0aCx4LnN0cmlwKCl9LHcucHJvdG90eXBlLm11bD1mdW5jdGlvbihwKXt2YXIgYj1uZXcgdyhudWxsKTty''@;'; put 'put ''ZXR1cm4gYi53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrcC5sZW5ndGgpLHRoaXMubXVsVG8ocCxiKX0sdy5wcm90b3R5cGUubXVsZj1mdW5jdGlvbihwKXt2YXIgYj1uZXcgdyhudWxsKTtyZXR1cm4gYi53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrcC5sZW5ndGgpLGVlKHRoaXMs''@;'; put 'put ''cCxiKX0sdy5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLm11bFRvKHAsdGhpcyl9LHcucHJvdG90eXBlLmltdWxuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwKSxnKHA8NjcxMDg4NjQpO2Zvcih2YXIgYj0wLHg9MDt4PHRoaXMubGVuZ3Ro''@;'; put 'put ''O3grKyl7dmFyIEM9KDB8dGhpcy53b3Jkc1t4XSkqcCxUPSg2NzEwODg2MyZDKSsoNjcxMDg4NjMmYik7Yj4+PTI2LGIrPUMvNjcxMDg4NjR8MCxiKz1UPj4+MjYsdGhpcy53b3Jkc1t4XT02NzEwODg2MyZUfXJldHVybiAwIT09YiYmKHRoaXMud29yZHNbeF09Yix0aGlzLmxlbmd0aCsrKSx0''@;'; put 'put ''aGlzLmxlbmd0aD0wPT09cD8xOnRoaXMubGVuZ3RoLHRoaXN9LHcucHJvdG90eXBlLm11bG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbXVsbihwKX0sdy5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubXVsKHRoaXMpfSx3LnByb3RvdHlwZS5pc3FyPWZ1''@;'; 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 ''LnIyKSkuX2ZvcmNlUmVkKHRoaXMpfX0odWU9eS5ubWQodWUpLHRoaXMpfSw5MDUxODoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1YO0kudmVyc2lvbj15KDE2MzYpLnJFLEkudXRpbHM9eSgzMTM2KSxJLnJhbmQ9eSgzNTI5NCksSS5jdXJ2ZT15KDg3MjkpLEkuY3VydmVzPXkoMjM0''@;'; put 'put ''MDEpLEkuZWM9eSgyOTA0MiksSS5lZGRzYT15KDgzMDQ1KX0sOTg4Mjg6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg4ODcyMyksXz15KDMxMzYpLGc9Xy5nZXROQUYsQj1fLmdldEpTRix3PV8uYXNzZXJ0O2Z1bmN0aW9uIFAoTyx6KXt0aGlzLnR5cGU9Tyx0aGlzLnA9bmV3IEko''@;'; put 'put ''ei5wLDE2KSx0aGlzLnJlZD16LnByaW1lP0kucmVkKHoucHJpbWUpOkkubW9udCh0aGlzLnApLHRoaXMuemVybz1uZXcgSSgwKS50b1JlZCh0aGlzLnJlZCksdGhpcy5vbmU9bmV3IEkoMSkudG9SZWQodGhpcy5yZWQpLHRoaXMudHdvPW5ldyBJKDIpLnRvUmVkKHRoaXMucmVkKSx0aGlzLm49''@;'; put 'put ''ei5uJiZuZXcgSSh6Lm4sMTYpLHRoaXMuZz16LmcmJnRoaXMucG9pbnRGcm9tSlNPTih6Lmcsei5nUmVkKSx0aGlzLl93bmFmVDE9bmV3IEFycmF5KDQpLHRoaXMuX3duYWZUMj1uZXcgQXJyYXkoNCksdGhpcy5fd25hZlQzPW5ldyBBcnJheSg0KSx0aGlzLl93bmFmVDQ9bmV3IEFycmF5KDQp''@;'; put 'put ''LHRoaXMuX2JpdExlbmd0aD10aGlzLm4/dGhpcy5uLmJpdExlbmd0aCgpOjA7dmFyIE49dGhpcy5uJiZ0aGlzLnAuZGl2KHRoaXMubik7IU58fE4uY21wbigxMDApPjA/dGhpcy5yZWROPW51bGw6KHRoaXMuX21heHdlbGxUcmljaz0hMCx0aGlzLnJlZE49dGhpcy5uLnRvUmVkKHRoaXMucmVk''@;'; put 'put ''KSl9ZnVuY3Rpb24gRihPLHope3RoaXMuY3VydmU9Tyx0aGlzLnR5cGU9eix0aGlzLnByZWNvbXB1dGVkPW51bGx9dWUuZXhwb3J0cz1QLFAucHJvdG90eXBlLnBvaW50PWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJOb3QgaW1wbGVtZW50ZWQiKX0sUC5wcm90b3R5cGUudmFsaWRhdGU9''@;'; put 'put ''ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIk5vdCBpbXBsZW1lbnRlZCIpfSxQLnByb3RvdHlwZS5fZml4ZWROYWZNdWw9ZnVuY3Rpb24oeixOKXt3KHoucHJlY29tcHV0ZWQpO3ZhciBMPXouX2dldERvdWJsZXMoKSxLPWcoTiwxLHRoaXMuX2JpdExlbmd0aCksVT0oMTw8TC5zdGVwKzEp''@;'; put 'put ''LShMLnN0ZXAlMj09MD8yOjEpO1UvPTM7dmFyIFkscSxXPVtdO2ZvcihZPTA7WTxLLmxlbmd0aDtZKz1MLnN0ZXApe3E9MDtmb3IodmFyIGVlPVkrTC5zdGVwLTE7ZWU+PVk7ZWUtLSlxPShxPDwxKStLW2VlXTtXLnB1c2gocSl9Zm9yKHZhciBKPXRoaXMuanBvaW50KG51bGwsbnVsbCxudWxs''@;'; put 'put ''KSxuZT10aGlzLmpwb2ludChudWxsLG51bGwsbnVsbCksaWU9VTtpZT4wO2llLS0pe2ZvcihZPTA7WTxXLmxlbmd0aDtZKyspKHE9V1tZXSk9PT1pZT9uZT1uZS5taXhlZEFkZChMLnBvaW50c1tZXSk6cT09PS1pZSYmKG5lPW5lLm1peGVkQWRkKEwucG9pbnRzW1ldLm5lZygpKSk7Sj1KLmFk''@;'; put 'put ''ZChuZSl9cmV0dXJuIEoudG9QKCl9LFAucHJvdG90eXBlLl93bmFmTXVsPWZ1bmN0aW9uKHosTil7Zm9yKHZhciBMPTQsSz16Ll9nZXROQUZQb2ludHMoTCksVT1LLnBvaW50cyxXPWcoTixMPUsud25kLHRoaXMuX2JpdExlbmd0aCksWT10aGlzLmpwb2ludChudWxsLG51bGwsbnVsbCkscT1X''@;'; put 'put ''Lmxlbmd0aC0xO3E+PTA7cS0tKXtmb3IodmFyIGVlPTA7cT49MCYmMD09PVdbcV07cS0tKWVlKys7aWYocT49MCYmZWUrKyxZPVkuZGJscChlZSkscTwwKWJyZWFrO3ZhciBKPVdbcV07dygwIT09SiksWT0iYWZmaW5lIj09PXoudHlwZT9ZLm1peGVkQWRkKEo+MD9VW0otMT4+MV06VVstSi0x''@;'; put 'put ''Pj4xXS5uZWcoKSk6WS5hZGQoSj4wP1VbSi0xPj4xXTpVWy1KLTE+PjFdLm5lZygpKX1yZXR1cm4iYWZmaW5lIj09PXoudHlwZT9ZLnRvUCgpOll9LFAucHJvdG90eXBlLl93bmFmTXVsQWRkPWZ1bmN0aW9uKHosTixMLEssVSl7dmFyIEosbmUsaWUsVz10aGlzLl93bmFmVDEsWT10aGlzLl93''@;'; put 'put ''bmFmVDIscT10aGlzLl93bmFmVDMsZWU9MDtmb3IoSj0wO0o8SztKKyspe3ZhciBsZT0oaWU9TltKXSkuX2dldE5BRlBvaW50cyh6KTtXW0pdPWxlLnduZCxZW0pdPWxlLnBvaW50c31mb3IoSj1LLTE7Sj49MTtKLT0yKXt2YXIgbWU9Si0xLF9lPUo7aWYoMT09PVdbbWVdJiYxPT09V1tfZV0p''@;'; put 'put ''e3ZhciBUZT1bTlttZV0sbnVsbCxudWxsLE5bX2VdXTswPT09TlttZV0ueS5jbXAoTltfZV0ueSk/KFRlWzFdPU5bbWVdLmFkZChOW19lXSksVGVbMl09TlttZV0udG9KKCkubWl4ZWRBZGQoTltfZV0ubmVnKCkpKTowPT09TlttZV0ueS5jbXAoTltfZV0ueS5yZWROZWcoKSk/KFRlWzFdPU5b''@;'; put 'put ''bWVdLnRvSigpLm1peGVkQWRkKE5bX2VdKSxUZVsyXT1OW21lXS5hZGQoTltfZV0ubmVnKCkpKTooVGVbMV09TlttZV0udG9KKCkubWl4ZWRBZGQoTltfZV0pLFRlWzJdPU5bbWVdLnRvSigpLm1peGVkQWRkKE5bX2VdLm5lZygpKSk7dmFyIFNlPVstMywtMSwtNSwtNywwLDcsNSwxLDNdLGpl''@;'; put 'put ''PUIoTFttZV0sTFtfZV0pO2ZvcihlZT1NYXRoLm1heChqZVswXS5sZW5ndGgsZWUpLHFbbWVdPW5ldyBBcnJheShlZSkscVtfZV09bmV3IEFycmF5KGVlKSxuZT0wO25lPGVlO25lKyspcVttZV1bbmVdPVNlWzMqKDErKDB8amVbMF1bbmVdKSkrKDErKDB8amVbMV1bbmVdKSldLHFbX2VdW25l''@;'; put 'put ''XT0wLFlbbWVdPVRlfWVsc2UgcVttZV09ZyhMW21lXSxXW21lXSx0aGlzLl9iaXRMZW5ndGgpLHFbX2VdPWcoTFtfZV0sV1tfZV0sdGhpcy5fYml0TGVuZ3RoKSxlZT1NYXRoLm1heChxW21lXS5sZW5ndGgsZWUpLGVlPU1hdGgubWF4KHFbX2VdLmxlbmd0aCxlZSl9dmFyIGI9dGhpcy5qcG9p''@;'; put 'put ''bnQobnVsbCxudWxsLG51bGwpLHg9dGhpcy5fd25hZlQ0O2ZvcihKPWVlO0o+PTA7Si0tKXtmb3IodmFyIEM9MDtKPj0wOyl7dmFyIFQ9ITA7Zm9yKG5lPTA7bmU8SztuZSsrKXhbbmVdPTB8cVtuZV1bSl0sMCE9PXhbbmVdJiYoVD0hMSk7aWYoIVQpYnJlYWs7QysrLEotLX1pZihKPj0wJiZD''@;'; put 'put ''KyssYj1iLmRibHAoQyksSjwwKWJyZWFrO2ZvcihuZT0wO25lPEs7bmUrKyl7dmFyIEg9eFtuZV07MCE9PUgmJihIPjA/aWU9WVtuZV1bSC0xPj4xXTpIPDAmJihpZT1ZW25lXVstSC0xPj4xXS5uZWcoKSksYj0iYWZmaW5lIj09PWllLnR5cGU/Yi5taXhlZEFkZChpZSk6Yi5hZGQoaWUpKX19''@;'; put 'put ''Zm9yKEo9MDtKPEs7SisrKVlbSl09bnVsbDtyZXR1cm4gVT9iOmIudG9QKCl9LFAuQmFzZVBvaW50PUYsRi5wcm90b3R5cGUuZXE9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIk5vdCBpbXBsZW1lbnRlZCIpfSxGLnByb3RvdHlwZS52YWxpZGF0ZT1mdW5jdGlvbigpe3JldHVybiB0aGlz''@;'; put 'put ''LmN1cnZlLnZhbGlkYXRlKHRoaXMpfSxQLnByb3RvdHlwZS5kZWNvZGVQb2ludD1mdW5jdGlvbih6LE4pe3o9Xy50b0FycmF5KHosTik7dmFyIEw9dGhpcy5wLmJ5dGVMZW5ndGgoKTtpZigoND09PXpbMF18fDY9PT16WzBdfHw3PT09elswXSkmJnoubGVuZ3RoLTE9PTIqTClyZXR1cm4gNj09''@;'; put 'put ''PXpbMF0/dyh6W3oubGVuZ3RoLTFdJTI9PTApOjc9PT16WzBdJiZ3KHpbei5sZW5ndGgtMV0lMj09MSksdGhpcy5wb2ludCh6LnNsaWNlKDEsMStMKSx6LnNsaWNlKDErTCwxKzIqTCkpO2lmKCgyPT09elswXXx8Mz09PXpbMF0pJiZ6Lmxlbmd0aC0xPT09TClyZXR1cm4gdGhpcy5wb2ludEZy''@;'; put 'put ''b21YKHouc2xpY2UoMSwxK0wpLDM9PT16WzBdKTt0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gcG9pbnQgZm9ybWF0Iil9LEYucHJvdG90eXBlLmVuY29kZUNvbXByZXNzZWQ9ZnVuY3Rpb24oeil7cmV0dXJuIHRoaXMuZW5jb2RlKHosITApfSxGLnByb3RvdHlwZS5fZW5jb2RlPWZ1bmN0aW9u''@;'; put 'put ''KHope3ZhciBOPXRoaXMuY3VydmUucC5ieXRlTGVuZ3RoKCksTD10aGlzLmdldFgoKS50b0FycmF5KCJiZSIsTik7cmV0dXJuIHo/W3RoaXMuZ2V0WSgpLmlzRXZlbigpPzI6M10uY29uY2F0KEwpOls0XS5jb25jYXQoTCx0aGlzLmdldFkoKS50b0FycmF5KCJiZSIsTikpfSxGLnByb3RvdHlw''@;'; put 'put ''ZS5lbmNvZGU9ZnVuY3Rpb24oeixOKXtyZXR1cm4gXy5lbmNvZGUodGhpcy5fZW5jb2RlKE4pLHopfSxGLnByb3RvdHlwZS5wcmVjb21wdXRlPWZ1bmN0aW9uKHope2lmKHRoaXMucHJlY29tcHV0ZWQpcmV0dXJuIHRoaXM7dmFyIE49e2RvdWJsZXM6bnVsbCxuYWY6bnVsbCxiZXRhOm51bGx9''@;'; put 'put ''O3JldHVybiBOLm5hZj10aGlzLl9nZXROQUZQb2ludHMoOCksTi5kb3VibGVzPXRoaXMuX2dldERvdWJsZXMoNCx6KSxOLmJldGE9dGhpcy5fZ2V0QmV0YSgpLHRoaXMucHJlY29tcHV0ZWQ9Tix0aGlzfSxGLnByb3RvdHlwZS5faGFzRG91Ymxlcz1mdW5jdGlvbih6KXtpZighdGhpcy5wcmVj''@;'; put 'put ''b21wdXRlZClyZXR1cm4hMTt2YXIgTj10aGlzLnByZWNvbXB1dGVkLmRvdWJsZXM7cmV0dXJuISFOJiZOLnBvaW50cy5sZW5ndGg+PU1hdGguY2VpbCgoei5iaXRMZW5ndGgoKSsxKS9OLnN0ZXApfSxGLnByb3RvdHlwZS5fZ2V0RG91Ymxlcz1mdW5jdGlvbih6LE4pe2lmKHRoaXMucHJlY29t''@;'; put 'put ''cHV0ZWQmJnRoaXMucHJlY29tcHV0ZWQuZG91YmxlcylyZXR1cm4gdGhpcy5wcmVjb21wdXRlZC5kb3VibGVzO2Zvcih2YXIgTD1bdGhpc10sSz10aGlzLFU9MDtVPE47VSs9eil7Zm9yKHZhciBXPTA7Vzx6O1crKylLPUsuZGJsKCk7TC5wdXNoKEspfXJldHVybntzdGVwOnoscG9pbnRzOkx9''@;'; put 'put ''fSxGLnByb3RvdHlwZS5fZ2V0TkFGUG9pbnRzPWZ1bmN0aW9uKHope2lmKHRoaXMucHJlY29tcHV0ZWQmJnRoaXMucHJlY29tcHV0ZWQubmFmKXJldHVybiB0aGlzLnByZWNvbXB1dGVkLm5hZjtmb3IodmFyIE49W3RoaXNdLEw9KDE8PHopLTEsSz0xPT09TD9udWxsOnRoaXMuZGJsKCksVT0x''@;'; put 'put ''O1U8TDtVKyspTltVXT1OW1UtMV0uYWRkKEspO3JldHVybnt3bmQ6eixwb2ludHM6Tn19LEYucHJvdG90eXBlLl9nZXRCZXRhPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LEYucHJvdG90eXBlLmRibHA9ZnVuY3Rpb24oeil7Zm9yKHZhciBOPXRoaXMsTD0wO0w8ejtMKyspTj1OLmRibCgpO3Jl''@;'; put 'put ''dHVybiBOfX0sNTU1Mzc6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgzMTM2KSxfPXkoODg3MjMpLGc9eSg3MTk5MyksQj15KDk4ODI4KSx3PUkuYXNzZXJ0O2Z1bmN0aW9uIFAoTyl7dGhpcy50d2lzdGVkPTEhPSgwfE8uYSksdGhpcy5tT25lQT10aGlzLnR3aXN0ZWQmJi0xPT0o''@;'; put 'put ''MHxPLmEpLHRoaXMuZXh0ZW5kZWQ9dGhpcy5tT25lQSxCLmNhbGwodGhpcywiZWR3YXJkcyIsTyksdGhpcy5hPW5ldyBfKE8uYSwxNikudW1vZCh0aGlzLnJlZC5tKSx0aGlzLmE9dGhpcy5hLnRvUmVkKHRoaXMucmVkKSx0aGlzLmM9bmV3IF8oTy5jLDE2KS50b1JlZCh0aGlzLnJlZCksdGhp''@;'; put 'put ''cy5jMj10aGlzLmMucmVkU3FyKCksdGhpcy5kPW5ldyBfKE8uZCwxNikudG9SZWQodGhpcy5yZWQpLHRoaXMuZGQ9dGhpcy5kLnJlZEFkZCh0aGlzLmQpLHcoIXRoaXMudHdpc3RlZHx8MD09PXRoaXMuYy5mcm9tUmVkKCkuY21wbigxKSksdGhpcy5vbmVDPTE9PSgwfE8uYyl9ZnVuY3Rpb24g''@;'; put 'put ''RihPLHosTixMLEspe0IuQmFzZVBvaW50LmNhbGwodGhpcyxPLCJwcm9qZWN0aXZlIiksbnVsbD09PXomJm51bGw9PT1OJiZudWxsPT09TD8odGhpcy54PXRoaXMuY3VydmUuemVybyx0aGlzLnk9dGhpcy5jdXJ2ZS5vbmUsdGhpcy56PXRoaXMuY3VydmUub25lLHRoaXMudD10aGlzLmN1cnZl''@;'; put 'put ''Lnplcm8sdGhpcy56T25lPSEwKToodGhpcy54PW5ldyBfKHosMTYpLHRoaXMueT1uZXcgXyhOLDE2KSx0aGlzLno9TD9uZXcgXyhMLDE2KTp0aGlzLmN1cnZlLm9uZSx0aGlzLnQ9SyYmbmV3IF8oSywxNiksdGhpcy54LnJlZHx8KHRoaXMueD10aGlzLngudG9SZWQodGhpcy5jdXJ2ZS5yZWQp''@;'; put 'put ''KSx0aGlzLnkucmVkfHwodGhpcy55PXRoaXMueS50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMuei5yZWR8fCh0aGlzLno9dGhpcy56LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy50JiYhdGhpcy50LnJlZCYmKHRoaXMudD10aGlzLnQudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlz''@;'; put 'put ''LnpPbmU9dGhpcy56PT09dGhpcy5jdXJ2ZS5vbmUsdGhpcy5jdXJ2ZS5leHRlbmRlZCYmIXRoaXMudCYmKHRoaXMudD10aGlzLngucmVkTXVsKHRoaXMueSksdGhpcy56T25lfHwodGhpcy50PXRoaXMudC5yZWRNdWwodGhpcy56LnJlZEludm0oKSkpKSl9ZyhQLEIpLHVlLmV4cG9ydHM9UCxQ''@;'; put 'put ''LnByb3RvdHlwZS5fbXVsQT1mdW5jdGlvbih6KXtyZXR1cm4gdGhpcy5tT25lQT96LnJlZE5lZygpOnRoaXMuYS5yZWRNdWwoeil9LFAucHJvdG90eXBlLl9tdWxDPWZ1bmN0aW9uKHope3JldHVybiB0aGlzLm9uZUM/ejp0aGlzLmMucmVkTXVsKHopfSxQLnByb3RvdHlwZS5qcG9pbnQ9ZnVu''@;'; put 'put ''Y3Rpb24oeixOLEwsSyl7cmV0dXJuIHRoaXMucG9pbnQoeixOLEwsSyl9LFAucHJvdG90eXBlLnBvaW50RnJvbVg9ZnVuY3Rpb24oeixOKXsoej1uZXcgXyh6LDE2KSkucmVkfHwoej16LnRvUmVkKHRoaXMucmVkKSk7dmFyIEw9ei5yZWRTcXIoKSxLPXRoaXMuYzIucmVkU3ViKHRoaXMuYS5y''@;'; put 'put ''ZWRNdWwoTCkpLFU9dGhpcy5vbmUucmVkU3ViKHRoaXMuYzIucmVkTXVsKHRoaXMuZCkucmVkTXVsKEwpKSxXPUsucmVkTXVsKFUucmVkSW52bSgpKSxZPVcucmVkU3FydCgpO2lmKDAhPT1ZLnJlZFNxcigpLnJlZFN1YihXKS5jbXAodGhpcy56ZXJvKSl0aHJvdyBuZXcgRXJyb3IoImludmFs''@;'; put 'put ''aWQgcG9pbnQiKTt2YXIgcT1ZLmZyb21SZWQoKS5pc09kZCgpO3JldHVybihOJiYhcXx8IU4mJnEpJiYoWT1ZLnJlZE5lZygpKSx0aGlzLnBvaW50KHosWSl9LFAucHJvdG90eXBlLnBvaW50RnJvbVk9ZnVuY3Rpb24oeixOKXsoej1uZXcgXyh6LDE2KSkucmVkfHwoej16LnRvUmVkKHRoaXMu''@;'; put 'put ''cmVkKSk7dmFyIEw9ei5yZWRTcXIoKSxLPUwucmVkU3ViKHRoaXMuYzIpLFU9TC5yZWRNdWwodGhpcy5kKS5yZWRNdWwodGhpcy5jMikucmVkU3ViKHRoaXMuYSksVz1LLnJlZE11bChVLnJlZEludm0oKSk7aWYoMD09PVcuY21wKHRoaXMuemVybykpe2lmKE4pdGhyb3cgbmV3IEVycm9yKCJp''@;'; put 'put ''bnZhbGlkIHBvaW50Iik7cmV0dXJuIHRoaXMucG9pbnQodGhpcy56ZXJvLHopfXZhciBZPVcucmVkU3FydCgpO2lmKDAhPT1ZLnJlZFNxcigpLnJlZFN1YihXKS5jbXAodGhpcy56ZXJvKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgcG9pbnQiKTtyZXR1cm4gWS5mcm9tUmVkKCkuaXNPZGQo''@;'; put 'put ''KSE9PU4mJihZPVkucmVkTmVnKCkpLHRoaXMucG9pbnQoWSx6KX0sUC5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oeil7aWYoei5pc0luZmluaXR5KCkpcmV0dXJuITA7ei5ub3JtYWxpemUoKTt2YXIgTj16LngucmVkU3FyKCksTD16LnkucmVkU3FyKCksSz1OLnJlZE11bCh0aGlzLmEp''@;'; put 'put ''LnJlZEFkZChMKSxVPXRoaXMuYzIucmVkTXVsKHRoaXMub25lLnJlZEFkZCh0aGlzLmQucmVkTXVsKE4pLnJlZE11bChMKSkpO3JldHVybiAwPT09Sy5jbXAoVSl9LGcoRixCLkJhc2VQb2ludCksUC5wcm90b3R5cGUucG9pbnRGcm9tSlNPTj1mdW5jdGlvbih6KXtyZXR1cm4gRi5mcm9tSlNP''@;'; put 'put ''Tih0aGlzLHopfSxQLnByb3RvdHlwZS5wb2ludD1mdW5jdGlvbih6LE4sTCxLKXtyZXR1cm4gbmV3IEYodGhpcyx6LE4sTCxLKX0sRi5mcm9tSlNPTj1mdW5jdGlvbih6LE4pe3JldHVybiBuZXcgRih6LE5bMF0sTlsxXSxOWzJdKX0sRi5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3Jl''@;'; put 'put ''dHVybiB0aGlzLmlzSW5maW5pdHkoKT8iPEVDIFBvaW50IEluZmluaXR5PiI6IjxFQyBQb2ludCB4OiAiK3RoaXMueC5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrIiB5OiAiK3RoaXMueS5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrIiB6OiAiK3RoaXMuei5mcm9tUmVkKCkudG9TdHJpbmco''@;'; put 'put ''MTYsMikrIj4ifSxGLnByb3RvdHlwZS5pc0luZmluaXR5PWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLnguY21wbigwKSYmKDA9PT10aGlzLnkuY21wKHRoaXMueil8fHRoaXMuek9uZSYmMD09PXRoaXMueS5jbXAodGhpcy5jdXJ2ZS5jKSl9LEYucHJvdG90eXBlLl9leHREYmw9ZnVuY3Rp''@;'; put 'put ''b24oKXt2YXIgej10aGlzLngucmVkU3FyKCksTj10aGlzLnkucmVkU3FyKCksTD10aGlzLnoucmVkU3FyKCk7TD1MLnJlZElBZGQoTCk7dmFyIEs9dGhpcy5jdXJ2ZS5fbXVsQSh6KSxVPXRoaXMueC5yZWRBZGQodGhpcy55KS5yZWRTcXIoKS5yZWRJU3ViKHopLnJlZElTdWIoTiksVz1LLnJl''@;'; put 'put ''ZEFkZChOKSxZPVcucmVkU3ViKEwpLHE9Sy5yZWRTdWIoTiksZWU9VS5yZWRNdWwoWSksSj1XLnJlZE11bChxKSxuZT1VLnJlZE11bChxKSxpZT1ZLnJlZE11bChXKTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChlZSxKLGllLG5lKX0sRi5wcm90b3R5cGUuX3Byb2pEYmw9ZnVuY3Rpb24oKXt2''@;'; put 'put ''YXIgSyxVLFcsWSxxLGVlLHo9dGhpcy54LnJlZEFkZCh0aGlzLnkpLnJlZFNxcigpLE49dGhpcy54LnJlZFNxcigpLEw9dGhpcy55LnJlZFNxcigpO2lmKHRoaXMuY3VydmUudHdpc3RlZCl7dmFyIEo9KFk9dGhpcy5jdXJ2ZS5fbXVsQShOKSkucmVkQWRkKEwpO3RoaXMuek9uZT8oSz16LnJl''@;'; put 'put ''ZFN1YihOKS5yZWRTdWIoTCkucmVkTXVsKEoucmVkU3ViKHRoaXMuY3VydmUudHdvKSksVT1KLnJlZE11bChZLnJlZFN1YihMKSksVz1KLnJlZFNxcigpLnJlZFN1YihKKS5yZWRTdWIoSikpOihxPXRoaXMuei5yZWRTcXIoKSxlZT1KLnJlZFN1YihxKS5yZWRJU3ViKHEpLEs9ei5yZWRTdWIo''@;'; put 'put ''TikucmVkSVN1YihMKS5yZWRNdWwoZWUpLFU9Si5yZWRNdWwoWS5yZWRTdWIoTCkpLFc9Si5yZWRNdWwoZWUpKX1lbHNlIFk9Ti5yZWRBZGQoTCkscT10aGlzLmN1cnZlLl9tdWxDKHRoaXMueikucmVkU3FyKCksZWU9WS5yZWRTdWIocSkucmVkU3ViKHEpLEs9dGhpcy5jdXJ2ZS5fbXVsQyh6''@;'; put 'put ''LnJlZElTdWIoWSkpLnJlZE11bChlZSksVT10aGlzLmN1cnZlLl9tdWxDKFkpLnJlZE11bChOLnJlZElTdWIoTCkpLFc9WS5yZWRNdWwoZWUpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KEssVSxXKX0sRi5wcm90b3R5cGUuZGJsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgp''@;'; put 'put ''P3RoaXM6dGhpcy5jdXJ2ZS5leHRlbmRlZD90aGlzLl9leHREYmwoKTp0aGlzLl9wcm9qRGJsKCl9LEYucHJvdG90eXBlLl9leHRBZGQ9ZnVuY3Rpb24oeil7dmFyIE49dGhpcy55LnJlZFN1Yih0aGlzLngpLnJlZE11bCh6LnkucmVkU3ViKHoueCkpLEw9dGhpcy55LnJlZEFkZCh0aGlzLngp''@;'; put 'put ''LnJlZE11bCh6LnkucmVkQWRkKHoueCkpLEs9dGhpcy50LnJlZE11bCh0aGlzLmN1cnZlLmRkKS5yZWRNdWwoei50KSxVPXRoaXMuei5yZWRNdWwoei56LnJlZEFkZCh6LnopKSxXPUwucmVkU3ViKE4pLFk9VS5yZWRTdWIoSykscT1VLnJlZEFkZChLKSxlZT1MLnJlZEFkZChOKSxKPVcucmVk''@;'; put 'put ''TXVsKFkpLG5lPXEucmVkTXVsKGVlKSxpZT1XLnJlZE11bChlZSksbGU9WS5yZWRNdWwocSk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQoSixuZSxsZSxpZSl9LEYucHJvdG90eXBlLl9wcm9qQWRkPWZ1bmN0aW9uKHope3ZhciBuZSxpZSxOPXRoaXMuei5yZWRNdWwoei56KSxMPU4ucmVkU3Fy''@;'; put 'put ''KCksSz10aGlzLngucmVkTXVsKHoueCksVT10aGlzLnkucmVkTXVsKHoueSksVz10aGlzLmN1cnZlLmQucmVkTXVsKEspLnJlZE11bChVKSxZPUwucmVkU3ViKFcpLHE9TC5yZWRBZGQoVyksZWU9dGhpcy54LnJlZEFkZCh0aGlzLnkpLnJlZE11bCh6LngucmVkQWRkKHoueSkpLnJlZElTdWIo''@;'; put 'put ''SykucmVkSVN1YihVKSxKPU4ucmVkTXVsKFkpLnJlZE11bChlZSk7cmV0dXJuIHRoaXMuY3VydmUudHdpc3RlZD8obmU9Ti5yZWRNdWwocSkucmVkTXVsKFUucmVkU3ViKHRoaXMuY3VydmUuX211bEEoSykpKSxpZT1ZLnJlZE11bChxKSk6KG5lPU4ucmVkTXVsKHEpLnJlZE11bChVLnJlZFN1''@;'; put 'put ''YihLKSksaWU9dGhpcy5jdXJ2ZS5fbXVsQyhZKS5yZWRNdWwocSkpLHRoaXMuY3VydmUucG9pbnQoSixuZSxpZSl9LEYucHJvdG90eXBlLmFkZD1mdW5jdGlvbih6KXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/ejp6LmlzSW5maW5pdHkoKT90aGlzOnRoaXMuY3VydmUuZXh0ZW5kZWQ/dGhp''@;'; put 'put ''cy5fZXh0QWRkKHopOnRoaXMuX3Byb2pBZGQoeil9LEYucHJvdG90eXBlLm11bD1mdW5jdGlvbih6KXtyZXR1cm4gdGhpcy5faGFzRG91Ymxlcyh6KT90aGlzLmN1cnZlLl9maXhlZE5hZk11bCh0aGlzLHopOnRoaXMuY3VydmUuX3duYWZNdWwodGhpcyx6KX0sRi5wcm90b3R5cGUubXVsQWRk''@;'; put 'put ''PWZ1bmN0aW9uKHosTixMKXtyZXR1cm4gdGhpcy5jdXJ2ZS5fd25hZk11bEFkZCgxLFt0aGlzLE5dLFt6LExdLDIsITEpfSxGLnByb3RvdHlwZS5qbXVsQWRkPWZ1bmN0aW9uKHosTixMKXtyZXR1cm4gdGhpcy5jdXJ2ZS5fd25hZk11bEFkZCgxLFt0aGlzLE5dLFt6LExdLDIsITApfSxGLnBy''@;'; put 'put ''b3RvdHlwZS5ub3JtYWxpemU9ZnVuY3Rpb24oKXtpZih0aGlzLnpPbmUpcmV0dXJuIHRoaXM7dmFyIHo9dGhpcy56LnJlZEludm0oKTtyZXR1cm4gdGhpcy54PXRoaXMueC5yZWRNdWwoeiksdGhpcy55PXRoaXMueS5yZWRNdWwoeiksdGhpcy50JiYodGhpcy50PXRoaXMudC5yZWRNdWwoeikp''@;'; put 'put ''LHRoaXMuej10aGlzLmN1cnZlLm9uZSx0aGlzLnpPbmU9ITAsdGhpc30sRi5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQodGhpcy54LnJlZE5lZygpLHRoaXMueSx0aGlzLnosdGhpcy50JiZ0aGlzLnQucmVkTmVnKCkpfSxGLnByb3RvdHlwZS5nZXRY''@;'; put 'put ''PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9ybWFsaXplKCksdGhpcy54LmZyb21SZWQoKX0sRi5wcm90b3R5cGUuZ2V0WT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vcm1hbGl6ZSgpLHRoaXMueS5mcm9tUmVkKCl9LEYucHJvdG90eXBlLmVxPWZ1bmN0aW9uKHope3JldHVybiB0aGlzPT09''@;'; put 'put ''enx8MD09PXRoaXMuZ2V0WCgpLmNtcCh6LmdldFgoKSkmJjA9PT10aGlzLmdldFkoKS5jbXAoei5nZXRZKCkpfSxGLnByb3RvdHlwZS5lcVhUb1A9ZnVuY3Rpb24oeil7dmFyIE49ei50b1JlZCh0aGlzLmN1cnZlLnJlZCkucmVkTXVsKHRoaXMueik7aWYoMD09PXRoaXMueC5jbXAoTikpcmV0''@;'; put 'put ''dXJuITA7Zm9yKHZhciBMPXouY2xvbmUoKSxLPXRoaXMuY3VydmUucmVkTi5yZWRNdWwodGhpcy56KTs7KXtpZihMLmlhZGQodGhpcy5jdXJ2ZS5uKSxMLmNtcCh0aGlzLmN1cnZlLnApPj0wKXJldHVybiExO2lmKE4ucmVkSUFkZChLKSwwPT09dGhpcy54LmNtcChOKSlyZXR1cm4hMH19LEYu''@;'; put 'put ''cHJvdG90eXBlLnRvUD1GLnByb3RvdHlwZS5ub3JtYWxpemUsRi5wcm90b3R5cGUubWl4ZWRBZGQ9Ri5wcm90b3R5cGUuYWRkfSw4NzI5Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPVg7SS5iYXNlPXkoOTg4MjgpLEkuc2hvcnQ9eSg2ODA3NSksSS5tb250PXkoNjQ5NDcpLEkuZWR3''@;'; put 'put ''YXJkcz15KDU1NTM3KX0sNjQ5NDc6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg4ODcyMyksXz15KDcxOTkzKSxnPXkoOTg4MjgpLEI9eSgzMTM2KTtmdW5jdGlvbiB3KEYpe2cuY2FsbCh0aGlzLCJtb250IixGKSx0aGlzLmE9bmV3IEkoRi5hLDE2KS50b1JlZCh0aGlzLnJlZCks''@;'; put 'put ''dGhpcy5iPW5ldyBJKEYuYiwxNikudG9SZWQodGhpcy5yZWQpLHRoaXMuaTQ9bmV3IEkoNCkudG9SZWQodGhpcy5yZWQpLnJlZEludm0oKSx0aGlzLnR3bz1uZXcgSSgyKS50b1JlZCh0aGlzLnJlZCksdGhpcy5hMjQ9dGhpcy5pNC5yZWRNdWwodGhpcy5hLnJlZEFkZCh0aGlzLnR3bykpfWZ1''@;'; put 'put ''bmN0aW9uIFAoRixPLHope2cuQmFzZVBvaW50LmNhbGwodGhpcyxGLCJwcm9qZWN0aXZlIiksbnVsbD09PU8mJm51bGw9PT16Pyh0aGlzLng9dGhpcy5jdXJ2ZS5vbmUsdGhpcy56PXRoaXMuY3VydmUuemVybyk6KHRoaXMueD1uZXcgSShPLDE2KSx0aGlzLno9bmV3IEkoeiwxNiksdGhpcy54''@;'; put 'put ''LnJlZHx8KHRoaXMueD10aGlzLngudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnoucmVkfHwodGhpcy56PXRoaXMuei50b1JlZCh0aGlzLmN1cnZlLnJlZCkpKX1fKHcsZyksdWUuZXhwb3J0cz13LHcucHJvdG90eXBlLnZhbGlkYXRlPWZ1bmN0aW9uKE8pe3ZhciB6PU8ubm9ybWFsaXpl''@;'; put 'put ''KCkueCxOPXoucmVkU3FyKCksTD1OLnJlZE11bCh6KS5yZWRBZGQoTi5yZWRNdWwodGhpcy5hKSkucmVkQWRkKHopO3JldHVybiAwPT09TC5yZWRTcXJ0KCkucmVkU3FyKCkuY21wKEwpfSxfKFAsZy5CYXNlUG9pbnQpLHcucHJvdG90eXBlLmRlY29kZVBvaW50PWZ1bmN0aW9uKE8seil7cmV0''@;'; put 'put ''dXJuIHRoaXMucG9pbnQoQi50b0FycmF5KE8seiksMSl9LHcucHJvdG90eXBlLnBvaW50PWZ1bmN0aW9uKE8seil7cmV0dXJuIG5ldyBQKHRoaXMsTyx6KX0sdy5wcm90b3R5cGUucG9pbnRGcm9tSlNPTj1mdW5jdGlvbihPKXtyZXR1cm4gUC5mcm9tSlNPTih0aGlzLE8pfSxQLnByb3RvdHlw''@;'; put 'put ''ZS5wcmVjb21wdXRlPWZ1bmN0aW9uKCl7fSxQLnByb3RvdHlwZS5fZW5jb2RlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0WCgpLnRvQXJyYXkoImJlIix0aGlzLmN1cnZlLnAuYnl0ZUxlbmd0aCgpKX0sUC5mcm9tSlNPTj1mdW5jdGlvbihPLHope3JldHVybiBuZXcgUChPLHpbMF0selsx''@;'; put 'put ''XXx8Ty5vbmUpfSxQLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpPyI8RUMgUG9pbnQgSW5maW5pdHk+IjoiPEVDIFBvaW50IHg6ICIrdGhpcy54LmZyb21SZWQoKS50b1N0cmluZygxNiwyKSsiIHo6ICIrdGhpcy56LmZyb21SZWQoKS50b1N0''@;'; put 'put ''cmluZygxNiwyKSsiPiJ9LFAucHJvdG90eXBlLmlzSW5maW5pdHk9ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMuei5jbXBuKDApfSxQLnByb3RvdHlwZS5kYmw9ZnVuY3Rpb24oKXt2YXIgej10aGlzLngucmVkQWRkKHRoaXMueikucmVkU3FyKCksTD10aGlzLngucmVkU3ViKHRoaXMueiku''@;'; put 'put ''cmVkU3FyKCksSz16LnJlZFN1YihMKSxVPXoucmVkTXVsKEwpLFc9Sy5yZWRNdWwoTC5yZWRBZGQodGhpcy5jdXJ2ZS5hMjQucmVkTXVsKEspKSk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQoVSxXKX0sUC5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJOb3Qgc3Vw''@;'; put 'put ''cG9ydGVkIG9uIE1vbnRnb21lcnkgY3VydmUiKX0sUC5wcm90b3R5cGUuZGlmZkFkZD1mdW5jdGlvbihPLHope3ZhciBOPXRoaXMueC5yZWRBZGQodGhpcy56KSxMPXRoaXMueC5yZWRTdWIodGhpcy56KSxLPU8ueC5yZWRBZGQoTy56KSxXPU8ueC5yZWRTdWIoTy56KS5yZWRNdWwoTiksWT1L''@;'; put 'put ''LnJlZE11bChMKSxxPXouei5yZWRNdWwoVy5yZWRBZGQoWSkucmVkU3FyKCkpLGVlPXoueC5yZWRNdWwoVy5yZWRJU3ViKFkpLnJlZFNxcigpKTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChxLGVlKX0sUC5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKE8pe2Zvcih2YXIgej1PLmNsb25lKCksTj10''@;'; put 'put ''aGlzLEw9dGhpcy5jdXJ2ZS5wb2ludChudWxsLG51bGwpLFU9W107MCE9PXouY21wbigwKTt6Lml1c2hybigxKSlVLnB1c2goei5hbmRsbigxKSk7Zm9yKHZhciBXPVUubGVuZ3RoLTE7Vz49MDtXLS0pMD09PVVbV10/KE49Ti5kaWZmQWRkKEwsdGhpcyksTD1MLmRibCgpKTooTD1OLmRpZmZB''@;'; put 'put ''ZGQoTCx0aGlzKSxOPU4uZGJsKCkpO3JldHVybiBMfSxQLnByb3RvdHlwZS5tdWxBZGQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIk5vdCBzdXBwb3J0ZWQgb24gTW9udGdvbWVyeSBjdXJ2ZSIpfSxQLnByb3RvdHlwZS5qdW1sQWRkPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJO''@;'; put 'put ''b3Qgc3VwcG9ydGVkIG9uIE1vbnRnb21lcnkgY3VydmUiKX0sUC5wcm90b3R5cGUuZXE9ZnVuY3Rpb24oTyl7cmV0dXJuIDA9PT10aGlzLmdldFgoKS5jbXAoTy5nZXRYKCkpfSxQLnByb3RvdHlwZS5ub3JtYWxpemU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54PXRoaXMueC5yZWRNdWwodGhp''@;'; put 'put ''cy56LnJlZEludm0oKSksdGhpcy56PXRoaXMuY3VydmUub25lLHRoaXN9LFAucHJvdG90eXBlLmdldFg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKSx0aGlzLnguZnJvbVJlZCgpfX0sNjgwNzU6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgzMTM2KSxfPXkoODg3''@;'; put 'put ''MjMpLGc9eSg3MTk5MyksQj15KDk4ODI4KSx3PUkuYXNzZXJ0O2Z1bmN0aW9uIFAoeil7Qi5jYWxsKHRoaXMsInNob3J0Iix6KSx0aGlzLmE9bmV3IF8oei5hLDE2KS50b1JlZCh0aGlzLnJlZCksdGhpcy5iPW5ldyBfKHouYiwxNikudG9SZWQodGhpcy5yZWQpLHRoaXMudGludj10aGlzLnR3''@;'; put 'put ''by5yZWRJbnZtKCksdGhpcy56ZXJvQT0wPT09dGhpcy5hLmZyb21SZWQoKS5jbXBuKDApLHRoaXMudGhyZWVBPTA9PT10aGlzLmEuZnJvbVJlZCgpLnN1Yih0aGlzLnApLmNtcG4oLTMpLHRoaXMuZW5kbz10aGlzLl9nZXRFbmRvbW9ycGhpc20oeiksdGhpcy5fZW5kb1duYWZUMT1uZXcgQXJy''@;'; put 'put ''YXkoNCksdGhpcy5fZW5kb1duYWZUMj1uZXcgQXJyYXkoNCl9ZnVuY3Rpb24gRih6LE4sTCxLKXtCLkJhc2VQb2ludC5jYWxsKHRoaXMseiwiYWZmaW5lIiksbnVsbD09PU4mJm51bGw9PT1MPyh0aGlzLng9bnVsbCx0aGlzLnk9bnVsbCx0aGlzLmluZj0hMCk6KHRoaXMueD1uZXcgXyhOLDE2''@;'; put 'put ''KSx0aGlzLnk9bmV3IF8oTCwxNiksSyYmKHRoaXMueC5mb3JjZVJlZCh0aGlzLmN1cnZlLnJlZCksdGhpcy55LmZvcmNlUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy54LnJlZHx8KHRoaXMueD10aGlzLngudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnkucmVkfHwodGhpcy55PXRoaXMu''@;'; put 'put ''eS50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMuaW5mPSExKX1mdW5jdGlvbiBPKHosTixMLEspe0IuQmFzZVBvaW50LmNhbGwodGhpcyx6LCJqYWNvYmlhbiIpLG51bGw9PT1OJiZudWxsPT09TCYmbnVsbD09PUs/KHRoaXMueD10aGlzLmN1cnZlLm9uZSx0aGlzLnk9dGhpcy5jdXJ2ZS5v''@;'; put 'put ''bmUsdGhpcy56PW5ldyBfKDApKToodGhpcy54PW5ldyBfKE4sMTYpLHRoaXMueT1uZXcgXyhMLDE2KSx0aGlzLno9bmV3IF8oSywxNikpLHRoaXMueC5yZWR8fCh0aGlzLng9dGhpcy54LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy55LnJlZHx8KHRoaXMueT10aGlzLnkudG9SZWQodGhp''@;'; put 'put ''cy5jdXJ2ZS5yZWQpKSx0aGlzLnoucmVkfHwodGhpcy56PXRoaXMuei50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMuek9uZT10aGlzLno9PT10aGlzLmN1cnZlLm9uZX1nKFAsQiksdWUuZXhwb3J0cz1QLFAucHJvdG90eXBlLl9nZXRFbmRvbW9ycGhpc209ZnVuY3Rpb24oTil7aWYodGhp''@;'; put 'put ''cy56ZXJvQSYmdGhpcy5nJiZ0aGlzLm4mJjE9PT10aGlzLnAubW9kbigzKSl7dmFyIEwsSztpZihOLmJldGEpTD1uZXcgXyhOLmJldGEsMTYpLnRvUmVkKHRoaXMucmVkKTtlbHNle3ZhciBVPXRoaXMuX2dldEVuZG9Sb290cyh0aGlzLnApO0w9KEw9VVswXS5jbXAoVVsxXSk8MD9VWzBdOlVb''@;'; put 'put ''MV0pLnRvUmVkKHRoaXMucmVkKX1pZihOLmxhbWJkYSlLPW5ldyBfKE4ubGFtYmRhLDE2KTtlbHNle3ZhciBXPXRoaXMuX2dldEVuZG9Sb290cyh0aGlzLm4pOzA9PT10aGlzLmcubXVsKFdbMF0pLnguY21wKHRoaXMuZy54LnJlZE11bChMKSk/Sz1XWzBdOncoMD09PXRoaXMuZy5tdWwoSz1X''@;'; put 'put ''WzFdKS54LmNtcCh0aGlzLmcueC5yZWRNdWwoTCkpKX1yZXR1cm57YmV0YTpMLGxhbWJkYTpLLGJhc2lzOk4uYmFzaXM/Ti5iYXNpcy5tYXAoZnVuY3Rpb24ocSl7cmV0dXJue2E6bmV3IF8ocS5hLDE2KSxiOm5ldyBfKHEuYiwxNil9fSk6dGhpcy5fZ2V0RW5kb0Jhc2lzKEspfX19LFAucHJv''@;'; put 'put ''dG90eXBlLl9nZXRFbmRvUm9vdHM9ZnVuY3Rpb24oTil7dmFyIEw9Tj09PXRoaXMucD90aGlzLnJlZDpfLm1vbnQoTiksSz1uZXcgXygyKS50b1JlZChMKS5yZWRJbnZtKCksVT1LLnJlZE5lZygpLFc9bmV3IF8oMykudG9SZWQoTCkucmVkTmVnKCkucmVkU3FydCgpLnJlZE11bChLKTtyZXR1''@;'; put 'put ''cm5bVS5yZWRBZGQoVykuZnJvbVJlZCgpLFUucmVkU3ViKFcpLmZyb21SZWQoKV19LFAucHJvdG90eXBlLl9nZXRFbmRvQmFzaXM9ZnVuY3Rpb24oTil7Zm9yKHZhciBKLG5lLGllLGxlLG1lLF9lLFRlLGplLFYsTD10aGlzLm4udXNocm4oTWF0aC5mbG9vcih0aGlzLm4uYml0TGVuZ3RoKCkv''@;'; put 'put ''MikpLEs9TixVPXRoaXMubi5jbG9uZSgpLFc9bmV3IF8oMSksWT1uZXcgXygwKSxxPW5ldyBfKDApLGVlPW5ldyBfKDEpLFNlPTA7MCE9PUsuY21wbigwKTspe3ZhciBwPVUuZGl2KEspO2plPVUuc3ViKHAubXVsKEspKSxWPXEuc3ViKHAubXVsKFcpKTt2YXIgYj1lZS5zdWIocC5tdWwoWSkp''@;'; put 'put ''O2lmKCFpZSYmamUuY21wKEwpPDApSj1UZS5uZWcoKSxuZT1XLGllPWplLm5lZygpLGxlPVY7ZWxzZSBpZihpZSYmMj09KytTZSlicmVhaztUZT1qZSxVPUssSz1qZSxxPVcsVz1WLGVlPVksWT1ifW1lPWplLm5lZygpLF9lPVY7dmFyIHg9aWUuc3FyKCkuYWRkKGxlLnNxcigpKTtyZXR1cm4g''@;'; put 'put ''bWUuc3FyKCkuYWRkKF9lLnNxcigpKS5jbXAoeCk+PTAmJihtZT1KLF9lPW5lKSxpZS5uZWdhdGl2ZSYmKGllPWllLm5lZygpLGxlPWxlLm5lZygpKSxtZS5uZWdhdGl2ZSYmKG1lPW1lLm5lZygpLF9lPV9lLm5lZygpKSxbe2E6aWUsYjpsZX0se2E6bWUsYjpfZX1dfSxQLnByb3RvdHlwZS5f''@;'; put 'put ''ZW5kb1NwbGl0PWZ1bmN0aW9uKE4pe3ZhciBMPXRoaXMuZW5kby5iYXNpcyxLPUxbMF0sVT1MWzFdLFc9VS5iLm11bChOKS5kaXZSb3VuZCh0aGlzLm4pLFk9Sy5iLm5lZygpLm11bChOKS5kaXZSb3VuZCh0aGlzLm4pLHE9Vy5tdWwoSy5hKSxlZT1ZLm11bChVLmEpLEo9Vy5tdWwoSy5iKSxu''@;'; put 'put ''ZT1ZLm11bChVLmIpO3JldHVybntrMTpOLnN1YihxKS5zdWIoZWUpLGsyOkouYWRkKG5lKS5uZWcoKX19LFAucHJvdG90eXBlLnBvaW50RnJvbVg9ZnVuY3Rpb24oTixMKXsoTj1uZXcgXyhOLDE2KSkucmVkfHwoTj1OLnRvUmVkKHRoaXMucmVkKSk7dmFyIEs9Ti5yZWRTcXIoKS5yZWRNdWwo''@;'; put 'put ''TikucmVkSUFkZChOLnJlZE11bCh0aGlzLmEpKS5yZWRJQWRkKHRoaXMuYiksVT1LLnJlZFNxcnQoKTtpZigwIT09VS5yZWRTcXIoKS5yZWRTdWIoSykuY21wKHRoaXMuemVybykpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHBvaW50Iik7dmFyIFc9VS5mcm9tUmVkKCkuaXNPZGQoKTtyZXR1''@;'; put 'put ''cm4oTCYmIVd8fCFMJiZXKSYmKFU9VS5yZWROZWcoKSksdGhpcy5wb2ludChOLFUpfSxQLnByb3RvdHlwZS52YWxpZGF0ZT1mdW5jdGlvbihOKXtpZihOLmluZilyZXR1cm4hMDt2YXIgTD1OLngsSz1OLnksVT10aGlzLmEucmVkTXVsKEwpLFc9TC5yZWRTcXIoKS5yZWRNdWwoTCkucmVkSUFk''@;'; put 'put ''ZChVKS5yZWRJQWRkKHRoaXMuYik7cmV0dXJuIDA9PT1LLnJlZFNxcigpLnJlZElTdWIoVykuY21wbigwKX0sUC5wcm90b3R5cGUuX2VuZG9XbmFmTXVsQWRkPWZ1bmN0aW9uKE4sTCxLKXtmb3IodmFyIFU9dGhpcy5fZW5kb1duYWZUMSxXPXRoaXMuX2VuZG9XbmFmVDIsWT0wO1k8Ti5sZW5n''@;'; put 'put ''dGg7WSsrKXt2YXIgcT10aGlzLl9lbmRvU3BsaXQoTFtZXSksZWU9TltZXSxKPWVlLl9nZXRCZXRhKCk7cS5rMS5uZWdhdGl2ZSYmKHEuazEuaW5lZygpLGVlPWVlLm5lZyghMCkpLHEuazIubmVnYXRpdmUmJihxLmsyLmluZWcoKSxKPUoubmVnKCEwKSksVVsyKlldPWVlLFVbMipZKzFdPUos''@;'; put 'put ''V1syKlldPXEuazEsV1syKlkrMV09cS5rMn1mb3IodmFyIG5lPXRoaXMuX3duYWZNdWxBZGQoMSxVLFcsMipZLEspLGllPTA7aWU8MipZO2llKyspVVtpZV09bnVsbCxXW2llXT1udWxsO3JldHVybiBuZX0sZyhGLEIuQmFzZVBvaW50KSxQLnByb3RvdHlwZS5wb2ludD1mdW5jdGlvbihOLEws''@;'; put 'put ''Syl7cmV0dXJuIG5ldyBGKHRoaXMsTixMLEspfSxQLnByb3RvdHlwZS5wb2ludEZyb21KU09OPWZ1bmN0aW9uKE4sTCl7cmV0dXJuIEYuZnJvbUpTT04odGhpcyxOLEwpfSxGLnByb3RvdHlwZS5fZ2V0QmV0YT1mdW5jdGlvbigpe2lmKHRoaXMuY3VydmUuZW5kbyl7dmFyIE49dGhpcy5wcmVj''@;'; put 'put ''b21wdXRlZDtpZihOJiZOLmJldGEpcmV0dXJuIE4uYmV0YTt2YXIgTD10aGlzLmN1cnZlLnBvaW50KHRoaXMueC5yZWRNdWwodGhpcy5jdXJ2ZS5lbmRvLmJldGEpLHRoaXMueSk7aWYoTil7dmFyIEs9dGhpcy5jdXJ2ZSxVPWZ1bmN0aW9uKFcpe3JldHVybiBLLnBvaW50KFcueC5yZWRNdWwo''@;'; put 'put ''Sy5lbmRvLmJldGEpLFcueSl9O04uYmV0YT1MLEwucHJlY29tcHV0ZWQ9e2JldGE6bnVsbCxuYWY6Ti5uYWYmJnt3bmQ6Ti5uYWYud25kLHBvaW50czpOLm5hZi5wb2ludHMubWFwKFUpfSxkb3VibGVzOk4uZG91YmxlcyYme3N0ZXA6Ti5kb3VibGVzLnN0ZXAscG9pbnRzOk4uZG91Ymxlcy5w''@;'; put 'put ''b2ludHMubWFwKFUpfX19cmV0dXJuIEx9fSxGLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcmVjb21wdXRlZD9bdGhpcy54LHRoaXMueSx0aGlzLnByZWNvbXB1dGVkJiZ7ZG91Ymxlczp0aGlzLnByZWNvbXB1dGVkLmRvdWJsZXMmJntzdGVwOnRoaXMucHJlY29t''@;'; put 'put ''cHV0ZWQuZG91Ymxlcy5zdGVwLHBvaW50czp0aGlzLnByZWNvbXB1dGVkLmRvdWJsZXMucG9pbnRzLnNsaWNlKDEpfSxuYWY6dGhpcy5wcmVjb21wdXRlZC5uYWYmJnt3bmQ6dGhpcy5wcmVjb21wdXRlZC5uYWYud25kLHBvaW50czp0aGlzLnByZWNvbXB1dGVkLm5hZi5wb2ludHMuc2xpY2Uo''@;'; put 'put ''MSl9fV06W3RoaXMueCx0aGlzLnldfSxGLmZyb21KU09OPWZ1bmN0aW9uKE4sTCxLKXsic3RyaW5nIj09dHlwZW9mIEwmJihMPUpTT04ucGFyc2UoTCkpO3ZhciBVPU4ucG9pbnQoTFswXSxMWzFdLEspO2lmKCFMWzJdKXJldHVybiBVO2Z1bmN0aW9uIFcocSl7cmV0dXJuIE4ucG9pbnQocVsw''@;'; put 'put ''XSxxWzFdLEspfXZhciBZPUxbMl07cmV0dXJuIFUucHJlY29tcHV0ZWQ9e2JldGE6bnVsbCxkb3VibGVzOlkuZG91YmxlcyYme3N0ZXA6WS5kb3VibGVzLnN0ZXAscG9pbnRzOltVXS5jb25jYXQoWS5kb3VibGVzLnBvaW50cy5tYXAoVykpfSxuYWY6WS5uYWYmJnt3bmQ6WS5uYWYud25kLHBv''@;'; put 'put ''aW50czpbVV0uY29uY2F0KFkubmFmLnBvaW50cy5tYXAoVykpfX0sVX0sRi5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT8iPEVDIFBvaW50IEluZmluaXR5PiI6IjxFQyBQb2ludCB4OiAiK3RoaXMueC5mcm9tUmVkKCkudG9TdHJpbmcoMTYs''@;'; put 'put ''MikrIiB5OiAiK3RoaXMueS5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrIj4ifSxGLnByb3RvdHlwZS5pc0luZmluaXR5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5mfSxGLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oTil7aWYodGhpcy5pbmYpcmV0dXJuIE47aWYoTi5pbmYpcmV0dXJuIHRo''@;'; put 'put ''aXM7aWYodGhpcy5lcShOKSlyZXR1cm4gdGhpcy5kYmwoKTtpZih0aGlzLm5lZygpLmVxKE4pKXJldHVybiB0aGlzLmN1cnZlLnBvaW50KG51bGwsbnVsbCk7aWYoMD09PXRoaXMueC5jbXAoTi54KSlyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChudWxsLG51bGwpO3ZhciBMPXRoaXMueS5yZWRT''@;'; put 'put ''dWIoTi55KTswIT09TC5jbXBuKDApJiYoTD1MLnJlZE11bCh0aGlzLngucmVkU3ViKE4ueCkucmVkSW52bSgpKSk7dmFyIEs9TC5yZWRTcXIoKS5yZWRJU3ViKHRoaXMueCkucmVkSVN1YihOLngpLFU9TC5yZWRNdWwodGhpcy54LnJlZFN1YihLKSkucmVkSVN1Yih0aGlzLnkpO3JldHVybiB0''@;'; put 'put ''aGlzLmN1cnZlLnBvaW50KEssVSl9LEYucHJvdG90eXBlLmRibD1mdW5jdGlvbigpe2lmKHRoaXMuaW5mKXJldHVybiB0aGlzO3ZhciBOPXRoaXMueS5yZWRBZGQodGhpcy55KTtpZigwPT09Ti5jbXBuKDApKXJldHVybiB0aGlzLmN1cnZlLnBvaW50KG51bGwsbnVsbCk7dmFyIEw9dGhpcy5j''@;'; put 'put ''dXJ2ZS5hLEs9dGhpcy54LnJlZFNxcigpLFU9Ti5yZWRJbnZtKCksVz1LLnJlZEFkZChLKS5yZWRJQWRkKEspLnJlZElBZGQoTCkucmVkTXVsKFUpLFk9Vy5yZWRTcXIoKS5yZWRJU3ViKHRoaXMueC5yZWRBZGQodGhpcy54KSkscT1XLnJlZE11bCh0aGlzLngucmVkU3ViKFkpKS5yZWRJU3Vi''@;'; put 'put ''KHRoaXMueSk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQoWSxxKX0sRi5wcm90b3R5cGUuZ2V0WD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnguZnJvbVJlZCgpfSxGLnByb3RvdHlwZS5nZXRZPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueS5mcm9tUmVkKCl9LEYucHJvdG90eXBlLm11bD1mdW5j''@;'; put 'put ''dGlvbihOKXtyZXR1cm4gTj1uZXcgXyhOLDE2KSx0aGlzLmlzSW5maW5pdHkoKT90aGlzOnRoaXMuX2hhc0RvdWJsZXMoTik/dGhpcy5jdXJ2ZS5fZml4ZWROYWZNdWwodGhpcyxOKTp0aGlzLmN1cnZlLmVuZG8/dGhpcy5jdXJ2ZS5fZW5kb1duYWZNdWxBZGQoW3RoaXNdLFtOXSk6dGhpcy5j''@;'; put 'put ''dXJ2ZS5fd25hZk11bCh0aGlzLE4pfSxGLnByb3RvdHlwZS5tdWxBZGQ9ZnVuY3Rpb24oTixMLEspe3ZhciBVPVt0aGlzLExdLFc9W04sS107cmV0dXJuIHRoaXMuY3VydmUuZW5kbz90aGlzLmN1cnZlLl9lbmRvV25hZk11bEFkZChVLFcpOnRoaXMuY3VydmUuX3duYWZNdWxBZGQoMSxVLFcs''@;'; put 'put ''Mil9LEYucHJvdG90eXBlLmptdWxBZGQ9ZnVuY3Rpb24oTixMLEspe3ZhciBVPVt0aGlzLExdLFc9W04sS107cmV0dXJuIHRoaXMuY3VydmUuZW5kbz90aGlzLmN1cnZlLl9lbmRvV25hZk11bEFkZChVLFcsITApOnRoaXMuY3VydmUuX3duYWZNdWxBZGQoMSxVLFcsMiwhMCl9LEYucHJvdG90''@;'; put 'put ''eXBlLmVxPWZ1bmN0aW9uKE4pe3JldHVybiB0aGlzPT09Tnx8dGhpcy5pbmY9PT1OLmluZiYmKHRoaXMuaW5mfHwwPT09dGhpcy54LmNtcChOLngpJiYwPT09dGhpcy55LmNtcChOLnkpKX0sRi5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKE4pe2lmKHRoaXMuaW5mKXJldHVybiB0aGlzO3ZhciBM''@;'; put 'put ''PXRoaXMuY3VydmUucG9pbnQodGhpcy54LHRoaXMueS5yZWROZWcoKSk7aWYoTiYmdGhpcy5wcmVjb21wdXRlZCl7dmFyIEs9dGhpcy5wcmVjb21wdXRlZCxVPWZ1bmN0aW9uKFcpe3JldHVybiBXLm5lZygpfTtMLnByZWNvbXB1dGVkPXtuYWY6Sy5uYWYmJnt3bmQ6Sy5uYWYud25kLHBvaW50''@;'; put 'put ''czpLLm5hZi5wb2ludHMubWFwKFUpfSxkb3VibGVzOksuZG91YmxlcyYme3N0ZXA6Sy5kb3VibGVzLnN0ZXAscG9pbnRzOksuZG91Ymxlcy5wb2ludHMubWFwKFUpfX19cmV0dXJuIEx9LEYucHJvdG90eXBlLnRvSj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmluZj90aGlzLmN1cnZlLmpwb2lu''@;'; put 'put ''dChudWxsLG51bGwsbnVsbCk6dGhpcy5jdXJ2ZS5qcG9pbnQodGhpcy54LHRoaXMueSx0aGlzLmN1cnZlLm9uZSl9LGcoTyxCLkJhc2VQb2ludCksUC5wcm90b3R5cGUuanBvaW50PWZ1bmN0aW9uKE4sTCxLKXtyZXR1cm4gbmV3IE8odGhpcyxOLEwsSyl9LE8ucHJvdG90eXBlLnRvUD1mdW5j''@;'; put 'put ''dGlvbigpe2lmKHRoaXMuaXNJbmZpbml0eSgpKXJldHVybiB0aGlzLmN1cnZlLnBvaW50KG51bGwsbnVsbCk7dmFyIE49dGhpcy56LnJlZEludm0oKSxMPU4ucmVkU3FyKCksSz10aGlzLngucmVkTXVsKEwpLFU9dGhpcy55LnJlZE11bChMKS5yZWRNdWwoTik7cmV0dXJuIHRoaXMuY3VydmUu''@;'; put 'put ''cG9pbnQoSyxVKX0sTy5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KHRoaXMueCx0aGlzLnkucmVkTmVnKCksdGhpcy56KX0sTy5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKE4pe2lmKHRoaXMuaXNJbmZpbml0eSgpKXJldHVybiBOO2lmKE4uaXNJbmZp''@;'; put 'put ''bml0eSgpKXJldHVybiB0aGlzO3ZhciBMPU4uei5yZWRTcXIoKSxLPXRoaXMuei5yZWRTcXIoKSxVPXRoaXMueC5yZWRNdWwoTCksVz1OLngucmVkTXVsKEspLFk9dGhpcy55LnJlZE11bChMLnJlZE11bChOLnopKSxxPU4ueS5yZWRNdWwoSy5yZWRNdWwodGhpcy56KSksZWU9VS5yZWRTdWIo''@;'; put 'put ''VyksSj1ZLnJlZFN1YihxKTtpZigwPT09ZWUuY21wbigwKSlyZXR1cm4gMCE9PUouY21wbigwKT90aGlzLmN1cnZlLmpwb2ludChudWxsLG51bGwsbnVsbCk6dGhpcy5kYmwoKTt2YXIgbmU9ZWUucmVkU3FyKCksaWU9bmUucmVkTXVsKGVlKSxsZT1VLnJlZE11bChuZSksbWU9Si5yZWRTcXIo''@;'; put 'put ''KS5yZWRJQWRkKGllKS5yZWRJU3ViKGxlKS5yZWRJU3ViKGxlKSxfZT1KLnJlZE11bChsZS5yZWRJU3ViKG1lKSkucmVkSVN1YihZLnJlZE11bChpZSkpLFRlPXRoaXMuei5yZWRNdWwoTi56KS5yZWRNdWwoZWUpO3JldHVybiB0aGlzLmN1cnZlLmpwb2ludChtZSxfZSxUZSl9LE8ucHJvdG90''@;'; put 'put ''eXBlLm1peGVkQWRkPWZ1bmN0aW9uKE4pe2lmKHRoaXMuaXNJbmZpbml0eSgpKXJldHVybiBOLnRvSigpO2lmKE4uaXNJbmZpbml0eSgpKXJldHVybiB0aGlzO3ZhciBMPXRoaXMuei5yZWRTcXIoKSxLPXRoaXMueCxVPU4ueC5yZWRNdWwoTCksVz10aGlzLnksWT1OLnkucmVkTXVsKEwpLnJl''@;'; put 'put ''ZE11bCh0aGlzLnopLHE9Sy5yZWRTdWIoVSksZWU9Vy5yZWRTdWIoWSk7aWYoMD09PXEuY21wbigwKSlyZXR1cm4gMCE9PWVlLmNtcG4oMCk/dGhpcy5jdXJ2ZS5qcG9pbnQobnVsbCxudWxsLG51bGwpOnRoaXMuZGJsKCk7dmFyIEo9cS5yZWRTcXIoKSxuZT1KLnJlZE11bChxKSxpZT1LLnJl''@;'; put 'put ''ZE11bChKKSxsZT1lZS5yZWRTcXIoKS5yZWRJQWRkKG5lKS5yZWRJU3ViKGllKS5yZWRJU3ViKGllKSxtZT1lZS5yZWRNdWwoaWUucmVkSVN1YihsZSkpLnJlZElTdWIoVy5yZWRNdWwobmUpKSxfZT10aGlzLnoucmVkTXVsKHEpO3JldHVybiB0aGlzLmN1cnZlLmpwb2ludChsZSxtZSxfZSl9''@;'; put 'put ''LE8ucHJvdG90eXBlLmRibHA9ZnVuY3Rpb24oTil7aWYoMD09PU4pcmV0dXJuIHRoaXM7aWYodGhpcy5pc0luZmluaXR5KCkpcmV0dXJuIHRoaXM7aWYoIU4pcmV0dXJuIHRoaXMuZGJsKCk7dmFyIEw7aWYodGhpcy5jdXJ2ZS56ZXJvQXx8dGhpcy5jdXJ2ZS50aHJlZUEpe3ZhciBLPXRoaXM7''@;'; put 'put ''Zm9yKEw9MDtMPE47TCsrKUs9Sy5kYmwoKTtyZXR1cm4gS312YXIgVT10aGlzLmN1cnZlLmEsVz10aGlzLmN1cnZlLnRpbnYsWT10aGlzLngscT10aGlzLnksZWU9dGhpcy56LEo9ZWUucmVkU3FyKCkucmVkU3FyKCksbmU9cS5yZWRBZGQocSk7Zm9yKEw9MDtMPE47TCsrKXt2YXIgaWU9WS5y''@;'; put 'put ''ZWRTcXIoKSxsZT1uZS5yZWRTcXIoKSxtZT1sZS5yZWRTcXIoKSxfZT1pZS5yZWRBZGQoaWUpLnJlZElBZGQoaWUpLnJlZElBZGQoVS5yZWRNdWwoSikpLFRlPVkucmVkTXVsKGxlKSxTZT1fZS5yZWRTcXIoKS5yZWRJU3ViKFRlLnJlZEFkZChUZSkpLGplPVRlLnJlZElTdWIoU2UpLFY9X2Uu''@;'; put 'put ''cmVkTXVsKGplKTtWPVYucmVkSUFkZChWKS5yZWRJU3ViKG1lKTt2YXIgcD1uZS5yZWRNdWwoZWUpO0wrMTxOJiYoSj1KLnJlZE11bChtZSkpLFk9U2UsZWU9cCxuZT1WfXJldHVybiB0aGlzLmN1cnZlLmpwb2ludChZLG5lLnJlZE11bChXKSxlZSl9LE8ucHJvdG90eXBlLmRibD1mdW5jdGlv''@;'; put 'put ''bigpe3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT90aGlzOnRoaXMuY3VydmUuemVyb0E/dGhpcy5femVyb0RibCgpOnRoaXMuY3VydmUudGhyZWVBP3RoaXMuX3RocmVlRGJsKCk6dGhpcy5fZGJsKCl9LE8ucHJvdG90eXBlLl96ZXJvRGJsPWZ1bmN0aW9uKCl7dmFyIE4sTCxLO2lmKHRoaXMu''@;'; put 'put ''ek9uZSl7dmFyIFU9dGhpcy54LnJlZFNxcigpLFc9dGhpcy55LnJlZFNxcigpLFk9Vy5yZWRTcXIoKSxxPXRoaXMueC5yZWRBZGQoVykucmVkU3FyKCkucmVkSVN1YihVKS5yZWRJU3ViKFkpO3E9cS5yZWRJQWRkKHEpO3ZhciBlZT1VLnJlZEFkZChVKS5yZWRJQWRkKFUpLEo9ZWUucmVkU3Fy''@;'; put 'put ''KCkucmVkSVN1YihxKS5yZWRJU3ViKHEpLG5lPVkucmVkSUFkZChZKTtuZT0obmU9bmUucmVkSUFkZChuZSkpLnJlZElBZGQobmUpLE49SixMPWVlLnJlZE11bChxLnJlZElTdWIoSikpLnJlZElTdWIobmUpLEs9dGhpcy55LnJlZEFkZCh0aGlzLnkpfWVsc2V7dmFyIGllPXRoaXMueC5yZWRT''@;'; put 'put ''cXIoKSxsZT10aGlzLnkucmVkU3FyKCksbWU9bGUucmVkU3FyKCksX2U9dGhpcy54LnJlZEFkZChsZSkucmVkU3FyKCkucmVkSVN1YihpZSkucmVkSVN1YihtZSk7X2U9X2UucmVkSUFkZChfZSk7dmFyIFRlPWllLnJlZEFkZChpZSkucmVkSUFkZChpZSksU2U9VGUucmVkU3FyKCksamU9bWUu''@;'; put 'put ''cmVkSUFkZChtZSk7amU9KGplPWplLnJlZElBZGQoamUpKS5yZWRJQWRkKGplKSxOPVNlLnJlZElTdWIoX2UpLnJlZElTdWIoX2UpLEw9VGUucmVkTXVsKF9lLnJlZElTdWIoTikpLnJlZElTdWIoamUpLEs9KEs9dGhpcy55LnJlZE11bCh0aGlzLnopKS5yZWRJQWRkKEspfXJldHVybiB0aGlz''@;'; put 'put ''LmN1cnZlLmpwb2ludChOLEwsSyl9LE8ucHJvdG90eXBlLl90aHJlZURibD1mdW5jdGlvbigpe3ZhciBOLEwsSztpZih0aGlzLnpPbmUpe3ZhciBVPXRoaXMueC5yZWRTcXIoKSxXPXRoaXMueS5yZWRTcXIoKSxZPVcucmVkU3FyKCkscT10aGlzLngucmVkQWRkKFcpLnJlZFNxcigpLnJlZElT''@;'; put 'put ''dWIoVSkucmVkSVN1YihZKTtxPXEucmVkSUFkZChxKTt2YXIgZWU9VS5yZWRBZGQoVSkucmVkSUFkZChVKS5yZWRJQWRkKHRoaXMuY3VydmUuYSksSj1lZS5yZWRTcXIoKS5yZWRJU3ViKHEpLnJlZElTdWIocSk7Tj1KO3ZhciBuZT1ZLnJlZElBZGQoWSk7bmU9KG5lPW5lLnJlZElBZGQobmUp''@;'; put 'put ''KS5yZWRJQWRkKG5lKSxMPWVlLnJlZE11bChxLnJlZElTdWIoSikpLnJlZElTdWIobmUpLEs9dGhpcy55LnJlZEFkZCh0aGlzLnkpfWVsc2V7dmFyIGllPXRoaXMuei5yZWRTcXIoKSxsZT10aGlzLnkucmVkU3FyKCksbWU9dGhpcy54LnJlZE11bChsZSksX2U9dGhpcy54LnJlZFN1YihpZSku''@;'; put 'put ''cmVkTXVsKHRoaXMueC5yZWRBZGQoaWUpKTtfZT1fZS5yZWRBZGQoX2UpLnJlZElBZGQoX2UpO3ZhciBUZT1tZS5yZWRJQWRkKG1lKSxTZT0oVGU9VGUucmVkSUFkZChUZSkpLnJlZEFkZChUZSk7Tj1fZS5yZWRTcXIoKS5yZWRJU3ViKFNlKSxLPXRoaXMueS5yZWRBZGQodGhpcy56KS5yZWRT''@;'; put 'put ''cXIoKS5yZWRJU3ViKGxlKS5yZWRJU3ViKGllKTt2YXIgamU9bGUucmVkU3FyKCk7amU9KGplPShqZT1qZS5yZWRJQWRkKGplKSkucmVkSUFkZChqZSkpLnJlZElBZGQoamUpLEw9X2UucmVkTXVsKFRlLnJlZElTdWIoTikpLnJlZElTdWIoamUpfXJldHVybiB0aGlzLmN1cnZlLmpwb2ludChO''@;'; put 'put ''LEwsSyl9LE8ucHJvdG90eXBlLl9kYmw9ZnVuY3Rpb24oKXt2YXIgTj10aGlzLmN1cnZlLmEsTD10aGlzLngsSz10aGlzLnksVT10aGlzLnosVz1VLnJlZFNxcigpLnJlZFNxcigpLFk9TC5yZWRTcXIoKSxxPUsucmVkU3FyKCksZWU9WS5yZWRBZGQoWSkucmVkSUFkZChZKS5yZWRJQWRkKE4u''@;'; put 'put ''cmVkTXVsKFcpKSxKPUwucmVkQWRkKEwpLG5lPShKPUoucmVkSUFkZChKKSkucmVkTXVsKHEpLGllPWVlLnJlZFNxcigpLnJlZElTdWIobmUucmVkQWRkKG5lKSksbGU9bmUucmVkSVN1YihpZSksbWU9cS5yZWRTcXIoKTttZT0obWU9KG1lPW1lLnJlZElBZGQobWUpKS5yZWRJQWRkKG1lKSku''@;'; put 'put ''cmVkSUFkZChtZSk7dmFyIF9lPWVlLnJlZE11bChsZSkucmVkSVN1YihtZSksVGU9Sy5yZWRBZGQoSykucmVkTXVsKFUpO3JldHVybiB0aGlzLmN1cnZlLmpwb2ludChpZSxfZSxUZSl9LE8ucHJvdG90eXBlLnRycGw9ZnVuY3Rpb24oKXtpZighdGhpcy5jdXJ2ZS56ZXJvQSlyZXR1cm4gdGhp''@;'; put 'put ''cy5kYmwoKS5hZGQodGhpcyk7dmFyIE49dGhpcy54LnJlZFNxcigpLEw9dGhpcy55LnJlZFNxcigpLEs9dGhpcy56LnJlZFNxcigpLFU9TC5yZWRTcXIoKSxXPU4ucmVkQWRkKE4pLnJlZElBZGQoTiksWT1XLnJlZFNxcigpLHE9dGhpcy54LnJlZEFkZChMKS5yZWRTcXIoKS5yZWRJU3ViKE4p''@;'; put 'put ''LnJlZElTdWIoVSksZWU9KHE9KHE9KHE9cS5yZWRJQWRkKHEpKS5yZWRBZGQocSkucmVkSUFkZChxKSkucmVkSVN1YihZKSkucmVkU3FyKCksSj1VLnJlZElBZGQoVSk7Sj0oSj0oSj1KLnJlZElBZGQoSikpLnJlZElBZGQoSikpLnJlZElBZGQoSik7dmFyIG5lPVcucmVkSUFkZChxKS5yZWRT''@;'; put 'put ''cXIoKS5yZWRJU3ViKFkpLnJlZElTdWIoZWUpLnJlZElTdWIoSiksaWU9TC5yZWRNdWwobmUpO2llPShpZT1pZS5yZWRJQWRkKGllKSkucmVkSUFkZChpZSk7dmFyIGxlPXRoaXMueC5yZWRNdWwoZWUpLnJlZElTdWIoaWUpO2xlPShsZT1sZS5yZWRJQWRkKGxlKSkucmVkSUFkZChsZSk7dmFy''@;'; put 'put ''IG1lPXRoaXMueS5yZWRNdWwobmUucmVkTXVsKEoucmVkSVN1YihuZSkpLnJlZElTdWIocS5yZWRNdWwoZWUpKSk7bWU9KG1lPShtZT1tZS5yZWRJQWRkKG1lKSkucmVkSUFkZChtZSkpLnJlZElBZGQobWUpO3ZhciBfZT10aGlzLnoucmVkQWRkKHEpLnJlZFNxcigpLnJlZElTdWIoSykucmVk''@;'; put 'put ''SVN1YihlZSk7cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KGxlLG1lLF9lKX0sTy5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKE4sTCl7cmV0dXJuIE49bmV3IF8oTixMKSx0aGlzLmN1cnZlLl93bmFmTXVsKHRoaXMsTil9LE8ucHJvdG90eXBlLmVxPWZ1bmN0aW9uKE4pe2lmKCJhZmZpbmUiPT09''@;'; put 'put ''Ti50eXBlKXJldHVybiB0aGlzLmVxKE4udG9KKCkpO2lmKHRoaXM9PT1OKXJldHVybiEwO3ZhciBMPXRoaXMuei5yZWRTcXIoKSxLPU4uei5yZWRTcXIoKTtpZigwIT09dGhpcy54LnJlZE11bChLKS5yZWRJU3ViKE4ueC5yZWRNdWwoTCkpLmNtcG4oMCkpcmV0dXJuITE7dmFyIFU9TC5yZWRN''@;'; put 'put ''dWwodGhpcy56KSxXPUsucmVkTXVsKE4ueik7cmV0dXJuIDA9PT10aGlzLnkucmVkTXVsKFcpLnJlZElTdWIoTi55LnJlZE11bChVKSkuY21wbigwKX0sTy5wcm90b3R5cGUuZXFYVG9QPWZ1bmN0aW9uKE4pe3ZhciBMPXRoaXMuei5yZWRTcXIoKSxLPU4udG9SZWQodGhpcy5jdXJ2ZS5yZWQp''@;'; put 'put ''LnJlZE11bChMKTtpZigwPT09dGhpcy54LmNtcChLKSlyZXR1cm4hMDtmb3IodmFyIFU9Ti5jbG9uZSgpLFc9dGhpcy5jdXJ2ZS5yZWROLnJlZE11bChMKTs7KXtpZihVLmlhZGQodGhpcy5jdXJ2ZS5uKSxVLmNtcCh0aGlzLmN1cnZlLnApPj0wKXJldHVybiExO2lmKEsucmVkSUFkZChXKSww''@;'; put 'put ''PT09dGhpcy54LmNtcChLKSlyZXR1cm4hMH19LE8ucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/IjxFQyBKUG9pbnQgSW5maW5pdHk+IjoiPEVDIEpQb2ludCB4OiAiK3RoaXMueC50b1N0cmluZygxNiwyKSsiIHk6ICIrdGhpcy55LnRvU3Ry''@;'; put 'put ''aW5nKDE2LDIpKyIgejogIit0aGlzLnoudG9TdHJpbmcoMTYsMikrIj4ifSxPLnByb3RvdHlwZS5pc0luZmluaXR5PWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLnouY21wbigwKX19LDIzNDAxOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBPLEk9WCxfPXkoNTI1MjkpLGc9eSg4NzI5''@;'; put 'put ''KSx3PXkoMzEzNikuYXNzZXJ0O2Z1bmN0aW9uIFAoeil7dGhpcy5jdXJ2ZT0ic2hvcnQiPT09ei50eXBlP25ldyBnLnNob3J0KHopOiJlZHdhcmRzIj09PXoudHlwZT9uZXcgZy5lZHdhcmRzKHopOm5ldyBnLm1vbnQoeiksdGhpcy5nPXRoaXMuY3VydmUuZyx0aGlzLm49dGhpcy5jdXJ2ZS5u''@;'; put 'put ''LHRoaXMuaGFzaD16Lmhhc2gsdyh0aGlzLmcudmFsaWRhdGUoKSwiSW52YWxpZCBjdXJ2ZSIpLHcodGhpcy5nLm11bCh0aGlzLm4pLmlzSW5maW5pdHkoKSwiSW52YWxpZCBjdXJ2ZSwgRypOICE9IE8iKX1mdW5jdGlvbiBGKHosTil7T2JqZWN0LmRlZmluZVByb3BlcnR5KEkseix7Y29uZmln''@;'; put 'put ''dXJhYmxlOiEwLGVudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7dmFyIEw9bmV3IFAoTik7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShJLHose2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOkx9KSxMfX0pfUkuUHJlc2V0Q3VydmU9UCxGKCJwMTkyIix7dHlwZToi''@;'; put 'put ''c2hvcnQiLHByaW1lOiJwMTkyIixwOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZiIsYToiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmMiLGI6IjY0MjEwNTE5IGU1OWM4MGU3IDBmYTdlOWFi''@;'; put 'put ''IDcyMjQzMDQ5IGZlYjhkZWVjIGMxNDZiOWIxIixuOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiA5OWRlZjgzNiAxNDZiYzliMSBiNGQyMjgzMSIsaGFzaDpfLnNoYTI1NixnUmVkOiExLGc6WyIxODhkYTgwZSBiMDMwOTBmNiA3Y2JmMjBlYiA0M2ExODgwMCBmNGZmMGFmZCA4MmZmMTAx''@;'; put 'put ''MiIsIjA3MTkyYjk1IGZmYzhkYTc4IDYzMTAxMWVkIDZiMjRjZGQ1IDczZjk3N2ExIDFlNzk0ODExIl19KSxGKCJwMjI0Iix7dHlwZToic2hvcnQiLHByaW1lOiJwMjI0IixwOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMSIs''@;'; put 'put ''YToiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUiLGI6ImI0MDUwYTg1IDBjMDRiM2FiIGY1NDEzMjU2IDUwNDRiMGI3IGQ3YmZkOGJhIDI3MGIzOTQzIDIzNTVmZmI0IixuOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBm''@;'; put 'put ''ZmZmMTZhMiBlMGI4ZjAzZSAxM2RkMjk0NSA1YzVjMmEzZCIsaGFzaDpfLnNoYTI1NixnUmVkOiExLGc6WyJiNzBlMGNiZCA2YmI0YmY3ZiAzMjEzOTBiOSA0YTAzYzFkMyA1NmMyMTEyMiAzNDMyODBkNiAxMTVjMWQyMSIsImJkMzc2Mzg4IGI1ZjcyM2ZiIDRjMjJkZmU2IGNkNDM3NWEwIDVh''@;'; put 'put ''MDc0NzY0IDQ0ZDU4MTk5IDg1MDA3ZTM0Il19KSxGKCJwMjU2Iix7dHlwZToic2hvcnQiLHByaW1lOm51bGwscDoiZmZmZmZmZmYgMDAwMDAwMDEgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDAgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYiLGE6ImZmZmZmZmZmIDAwMDAwMDAxIDAwMDAw''@;'; put 'put ''MDAwIDAwMDAwMDAwIDAwMDAwMDAwIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZjIixiOiI1YWM2MzVkOCBhYTNhOTNlNyBiM2ViYmQ1NSA3Njk4ODZiYyA2NTFkMDZiMCBjYzUzYjBmNiAzYmNlM2MzZSAyN2QyNjA0YiIsbjoiZmZmZmZmZmYgMDAwMDAwMDAgZmZmZmZmZmYgZmZmZmZmZmYg''@;'; put 'put ''YmNlNmZhYWQgYTcxNzllODQgZjNiOWNhYzIgZmM2MzI1NTEiLGhhc2g6Xy5zaGEyNTYsZ1JlZDohMSxnOlsiNmIxN2QxZjIgZTEyYzQyNDcgZjhiY2U2ZTUgNjNhNDQwZjIgNzcwMzdkODEgMmRlYjMzYTAgZjRhMTM5NDUgZDg5OGMyOTYiLCI0ZmUzNDJlMiBmZTFhN2Y5YiA4ZWU3ZWI0YSA3''@;'; put 'put ''YzBmOWUxNiAyYmNlMzM1NyA2YjMxNWVjZSBjYmI2NDA2OCAzN2JmNTFmNSJdfSksRigicDM4NCIse3R5cGU6InNob3J0IixwcmltZTpudWxsLHA6ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZm''@;'; put 'put ''IDAwMDAwMDAwIDAwMDAwMDAwIGZmZmZmZmZmIixhOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCBmZmZmZmZmYyIsYjoiYjMzMTJmYTcgZTIzZWU3ZTQgOTg4''@;'; put 'put ''ZTA1NmIgZTNmODJkMTkgMTgxZDljNmUgZmU4MTQxMTIgMDMxNDA4OGYgNTAxMzg3NWEgYzY1NjM5OGQgOGEyZWQxOWQgMmE4NWM4ZWQgZDNlYzJhZWYiLG46ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGM3NjM0ZDgxIGY0MzcyZGRmIDU4''@;'; put 'put ''MWEwZGIyIDQ4YjBhNzdhIGVjZWMxOTZhIGNjYzUyOTczIixoYXNoOl8uc2hhMzg0LGdSZWQ6ITEsZzpbImFhODdjYTIyIGJlOGIwNTM3IDhlYjFjNzFlIGYzMjBhZDc0IDZlMWQzYjYyIDhiYTc5Yjk4IDU5Zjc0MWUwIDgyNTQyYTM4IDU1MDJmMjVkIGJmNTUyOTZjIDNhNTQ1ZTM4IDcyNzYw''@;'; put 'put ''YWI3IiwiMzYxN2RlNGEgOTYyNjJjNmYgNWQ5ZTk4YmYgOTI5MmRjMjkgZjhmNDFkYmQgMjg5YTE0N2MgZTlkYTMxMTMgYjVmMGI4YzAgMGE2MGIxY2UgMWQ3ZTgxOWQgN2E0MzFkN2MgOTBlYTBlNWYiXX0pLEYoInA1MjEiLHt0eXBlOiJzaG9ydCIscHJpbWU6bnVsbCxwOiIwMDAwMDFmZiBm''@;'; put 'put ''ZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiIsYToiMDAwMDAxZmYgZmZmZmZmZmYg''@;'; put 'put ''ZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmMiLGI6IjAwMDAwMDUxIDk1M2ViOTYxIDhlMWM5YTFm''@;'; put 'put ''IDkyOWEyMWEwIGI2ODU0MGVlIGEyZGE3MjViIDk5YjMxNWYzIGI4YjQ4OTkxIDhlZjEwOWUxIDU2MTkzOTUxIGVjN2U5MzdiIDE2NTJjMGJkIDNiYjFiZjA3IDM1NzNkZjg4IDNkMmMzNGYxIGVmNDUxZmQ0IDZiNTAzZjAwIixuOiIwMDAwMDFmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZm''@;'; put 'put ''ZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmYSA1MTg2ODc4MyBiZjJmOTY2YiA3ZmNjMDE0OCBmNzA5YTVkMCAzYmI1YzliOCA4OTljNDdhZSBiYjZmYjcxZSA5MTM4NjQwOSIsaGFzaDpfLnNoYTUxMixnUmVkOiExLGc6WyIwMDAwMDBjNiA4NThlMDZiNyAw''@;'; put 'put ''NDA0ZTljZCA5ZTNlY2I2NiAyMzk1YjQ0MiA5YzY0ODEzOSAwNTNmYjUyMSBmODI4YWY2MCA2YjRkM2RiYSBhMTRiNWU3NyBlZmU3NTkyOCBmZTFkYzEyNyBhMmZmYThkZSAzMzQ4YjNjMSA4NTZhNDI5YiBmOTdlN2UzMSBjMmU1YmQ2NiIsIjAwMDAwMTE4IDM5Mjk2YTc4IDlhM2JjMDA0IDVj''@;'; put 'put ''OGE1ZmI0IDJjN2QxYmQ5IDk4ZjU0NDQ5IDU3OWI0NDY4IDE3YWZiZDE3IDI3M2U2NjJjIDk3ZWU3Mjk5IDVlZjQyNjQwIGM1NTBiOTAxIDNmYWQwNzYxIDM1M2M3MDg2IGEyNzJjMjQwIDg4YmU5NDc2IDlmZDE2NjUwIl19KSxGKCJjdXJ2ZTI1NTE5Iix7dHlwZToibW9udCIscHJpbWU6InAy''@;'; put 'put ''NTUxOSIscDoiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCIsYToiNzZkMDYiLGI6IjEiLG46IjEwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMCAxNGRlZjlkZWEyZjc5Y2Q2IDU4MTI2MzFhNWNmNWQzZWQi''@;'; put 'put ''LGhhc2g6Xy5zaGEyNTYsZ1JlZDohMSxnOlsiOSJdfSksRigiZWQyNTUxOSIse3R5cGU6ImVkd2FyZHMiLHByaW1lOiJwMjU1MTkiLHA6IjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiLGE6Ii0xIixjOiIxIixkOiI1''@;'; put 'put ''MjAzNmNlZTJiNmZmZTczIDhjYzc0MDc5Nzc3OWU4OTggMDA3MDBhNGQ0MTQxZDhhYiA3NWViNGRjYTEzNTk3OGEzIixuOiIxMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgMTRkZWY5ZGVhMmY3OWNkNiA1ODEyNjMxYTVjZjVkM2VkIixoYXNoOl8uc2hhMjU2LGdSZWQ6ITEsZzpb''@;'; put 'put ''IjIxNjkzNmQzY2Q2ZTUzZmVjMGE0ZTIzMWZkZDZkYzVjNjkyY2M3NjA5NTI1YTdiMmM5NTYyZDYwOGYyNWQ1MWEiLCI2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjU4Il19KTt0cnl7Tz15KDUxNDE2KX1jYXRjaHtPPXZvaWQg''@;'; put 'put ''MH1GKCJzZWNwMjU2azEiLHt0eXBlOiJzaG9ydCIscHJpbWU6ImsyNTYiLHA6ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmIixhOiIwIixiOiI3IixuOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZm''@;'; put 'put ''ZmZmZSBiYWFlZGNlNiBhZjQ4YTAzYiBiZmQyNWU4YyBkMDM2NDE0MSIsaDoiMSIsaGFzaDpfLnNoYTI1NixiZXRhOiI3YWU5NmEyYjY1N2MwNzEwNmU2NDQ3OWVhYzM0MzRlOTljZjA0OTc1MTJmNTg5OTVjMTM5NmMyODcxOTUwMWVlIixsYW1iZGE6IjUzNjNhZDRjYzA1YzMwZTBhNTI2MWMw''@;'; put 'put ''Mjg4MTI2NDVhMTIyZTIyZWEyMDgxNjY3OGRmMDI5NjdjMWIyM2JkNzIiLGJhc2lzOlt7YToiMzA4NmQyMjFhN2Q0NmJjZGU4NmM5MGU0OTI4NGViMTUiLGI6Ii1lNDQzN2VkNjAxMGU4ODI4NmY1NDdmYTkwYWJmZTRjMyJ9LHthOiIxMTRjYTUwZjdhOGUyZjNmNjU3YzExMDhkOWQ0NGNmZDgi''@;'; put 'put ''LGI6IjMwODZkMjIxYTdkNDZiY2RlODZjOTBlNDkyODRlYjE1In1dLGdSZWQ6ITEsZzpbIjc5YmU2NjdlZjlkY2JiYWM1NWEwNjI5NWNlODcwYjA3MDI5YmZjZGIyZGNlMjhkOTU5ZjI4MTViMTZmODE3OTgiLCI0ODNhZGE3NzI2YTNjNDY1NWRhNGZiZmMwZTExMDhhOGZkMTdiNDQ4YTY4NTU0''@;'; put 'put ''MTk5YzQ3ZDA4ZmZiMTBkNGI4IixPXX0pfSwyOTA0MjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDg4NzIzKSxfPXkoMzM1NTYpLGc9eSgzMTM2KSxCPXkoMjM0MDEpLHc9eSgzNTI5NCksUD1nLmFzc2VydCxGPXkoNjA1NDEpLE89eSg0MDQ4NCk7ZnVuY3Rpb24geihOKXtpZigh''@;'; put 'put ''KHRoaXMgaW5zdGFuY2VvZiB6KSlyZXR1cm4gbmV3IHooTik7InN0cmluZyI9PXR5cGVvZiBOJiYoUChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoQixOKSwiVW5rbm93biBjdXJ2ZSAiK04pLE49QltOXSksTiBpbnN0YW5jZW9mIEIuUHJlc2V0Q3VydmUmJihOPXtjdXJ2''@;'; put 'put ''ZTpOfSksdGhpcy5jdXJ2ZT1OLmN1cnZlLmN1cnZlLHRoaXMubj10aGlzLmN1cnZlLm4sdGhpcy5uaD10aGlzLm4udXNocm4oMSksdGhpcy5nPXRoaXMuY3VydmUuZyx0aGlzLmc9Ti5jdXJ2ZS5nLHRoaXMuZy5wcmVjb21wdXRlKE4uY3VydmUubi5iaXRMZW5ndGgoKSsxKSx0aGlzLmhhc2g9''@;'; put 'put ''Ti5oYXNofHxOLmN1cnZlLmhhc2h9dWUuZXhwb3J0cz16LHoucHJvdG90eXBlLmtleVBhaXI9ZnVuY3Rpb24oTCl7cmV0dXJuIG5ldyBGKHRoaXMsTCl9LHoucHJvdG90eXBlLmtleUZyb21Qcml2YXRlPWZ1bmN0aW9uKEwsSyl7cmV0dXJuIEYuZnJvbVByaXZhdGUodGhpcyxMLEspfSx6LnBy''@;'; put 'put ''b3RvdHlwZS5rZXlGcm9tUHVibGljPWZ1bmN0aW9uKEwsSyl7cmV0dXJuIEYuZnJvbVB1YmxpYyh0aGlzLEwsSyl9LHoucHJvdG90eXBlLmdlbktleVBhaXI9ZnVuY3Rpb24oTCl7THx8KEw9e30pO2Zvcih2YXIgSz1uZXcgXyh7aGFzaDp0aGlzLmhhc2gscGVyczpMLnBlcnMscGVyc0VuYzpM''@;'; put 'put ''LnBlcnNFbmN8fCJ1dGY4IixlbnRyb3B5OkwuZW50cm9weXx8dyh0aGlzLmhhc2guaG1hY1N0cmVuZ3RoKSxlbnRyb3B5RW5jOkwuZW50cm9weSYmTC5lbnRyb3B5RW5jfHwidXRmOCIsbm9uY2U6dGhpcy5uLnRvQXJyYXkoKX0pLFU9dGhpcy5uLmJ5dGVMZW5ndGgoKSxXPXRoaXMubi5zdWIo''@;'; put 'put ''bmV3IEkoMikpOzspe3ZhciBZPW5ldyBJKEsuZ2VuZXJhdGUoVSkpO2lmKCEoWS5jbXAoVyk+MCkpcmV0dXJuIFkuaWFkZG4oMSksdGhpcy5rZXlGcm9tUHJpdmF0ZShZKX19LHoucHJvdG90eXBlLl90cnVuY2F0ZVRvTj1mdW5jdGlvbihMLEssVSl7dmFyIFc7aWYoSS5pc0JOKEwpfHwibnVt''@;'; put 'put ''YmVyIj09dHlwZW9mIEwpVz0oTD1uZXcgSShMLDE2KSkuYnl0ZUxlbmd0aCgpO2Vsc2UgaWYoIm9iamVjdCI9PXR5cGVvZiBMKVc9TC5sZW5ndGgsTD1uZXcgSShMLDE2KTtlbHNle3ZhciBZPUwudG9TdHJpbmcoKTtXPVkubGVuZ3RoKzE+Pj4xLEw9bmV3IEkoWSwxNil9Im51bWJlciIhPXR5''@;'; put 'put ''cGVvZiBVJiYoVT04KlcpO3ZhciBxPVUtdGhpcy5uLmJpdExlbmd0aCgpO3JldHVybiBxPjAmJihMPUwudXNocm4ocSkpLCFLJiZMLmNtcCh0aGlzLm4pPj0wP0wuc3ViKHRoaXMubik6TH0sei5wcm90b3R5cGUuc2lnbj1mdW5jdGlvbihMLEssVSxXKXtpZigib2JqZWN0Ij09dHlwZW9mIFUm''@;'; put 'put ''JihXPVUsVT1udWxsKSxXfHwoVz17fSksInN0cmluZyIhPXR5cGVvZiBMJiYibnVtYmVyIiE9dHlwZW9mIEwmJiFJLmlzQk4oTCkpe1AoIm9iamVjdCI9PXR5cGVvZiBMJiZMJiYibnVtYmVyIj09dHlwZW9mIEwubGVuZ3RoLCJFeHBlY3RlZCBtZXNzYWdlIHRvIGJlIGFuIGFycmF5LWxpa2Us''@;'; put 'put ''IGEgaGV4IHN0cmluZywgb3IgYSBCTiBpbnN0YW5jZSIpLFAoTC5sZW5ndGg+Pj4wPT09TC5sZW5ndGgpO2Zvcih2YXIgWT0wO1k8TC5sZW5ndGg7WSsrKVAoKDI1NSZMW1ldKT09PUxbWV0pfUs9dGhpcy5rZXlGcm9tUHJpdmF0ZShLLFUpLEw9dGhpcy5fdHJ1bmNhdGVUb04oTCwhMSxXLm1z''@;'; put 'put ''Z0JpdExlbmd0aCksUCghTC5pc05lZygpLCJDYW4gbm90IHNpZ24gYSBuZWdhdGl2ZSBtZXNzYWdlIik7dmFyIHE9dGhpcy5uLmJ5dGVMZW5ndGgoKSxlZT1LLmdldFByaXZhdGUoKS50b0FycmF5KCJiZSIscSksSj1MLnRvQXJyYXkoImJlIixxKTtQKG5ldyBJKEopLmVxKEwpLCJDYW4gbm90''@;'; put 'put ''IHNpZ24gbWVzc2FnZSIpO2Zvcih2YXIgbmU9bmV3IF8oe2hhc2g6dGhpcy5oYXNoLGVudHJvcHk6ZWUsbm9uY2U6SixwZXJzOlcucGVycyxwZXJzRW5jOlcucGVyc0VuY3x8InV0ZjgifSksaWU9dGhpcy5uLnN1YihuZXcgSSgxKSksbGU9MDs7bGUrKyl7dmFyIG1lPVcuaz9XLmsobGUpOm5l''@;'; put 'put ''dyBJKG5lLmdlbmVyYXRlKHRoaXMubi5ieXRlTGVuZ3RoKCkpKTtpZighKChtZT10aGlzLl90cnVuY2F0ZVRvTihtZSwhMCkpLmNtcG4oMSk8PTB8fG1lLmNtcChpZSk+PTApKXt2YXIgX2U9dGhpcy5nLm11bChtZSk7aWYoIV9lLmlzSW5maW5pdHkoKSl7dmFyIFRlPV9lLmdldFgoKSxTZT1U''@;'; put 'put ''ZS51bW9kKHRoaXMubik7aWYoMCE9PVNlLmNtcG4oMCkpe3ZhciBqZT1tZS5pbnZtKHRoaXMubikubXVsKFNlLm11bChLLmdldFByaXZhdGUoKSkuaWFkZChMKSk7aWYoMCE9PShqZT1qZS51bW9kKHRoaXMubikpLmNtcG4oMCkpe3ZhciBWPShfZS5nZXRZKCkuaXNPZGQoKT8xOjApfCgwIT09''@;'; put 'put ''VGUuY21wKFNlKT8yOjApO3JldHVybiBXLmNhbm9uaWNhbCYmamUuY21wKHRoaXMubmgpPjAmJihqZT10aGlzLm4uc3ViKGplKSxWXj0xKSxuZXcgTyh7cjpTZSxzOmplLHJlY292ZXJ5UGFyYW06Vn0pfX19fX19LHoucHJvdG90eXBlLnZlcmlmeT1mdW5jdGlvbihMLEssVSxXLFkpe1l8fChZ''@;'; put 'put ''PXt9KSxMPXRoaXMuX3RydW5jYXRlVG9OKEwsITEsWS5tc2dCaXRMZW5ndGgpLFU9dGhpcy5rZXlGcm9tUHVibGljKFUsVyk7dmFyIHE9KEs9bmV3IE8oSywiaGV4IikpLnIsZWU9Sy5zO2lmKHEuY21wbigxKTwwfHxxLmNtcCh0aGlzLm4pPj0wfHxlZS5jbXBuKDEpPDB8fGVlLmNtcCh0aGlz''@;'; put 'put ''Lm4pPj0wKXJldHVybiExO3ZhciBsZSxKPWVlLmludm0odGhpcy5uKSxuZT1KLm11bChMKS51bW9kKHRoaXMubiksaWU9Si5tdWwocSkudW1vZCh0aGlzLm4pO3JldHVybiB0aGlzLmN1cnZlLl9tYXh3ZWxsVHJpY2s/IShsZT10aGlzLmcuam11bEFkZChuZSxVLmdldFB1YmxpYygpLGllKSku''@;'; put 'put ''aXNJbmZpbml0eSgpJiZsZS5lcVhUb1AocSk6IShsZT10aGlzLmcubXVsQWRkKG5lLFUuZ2V0UHVibGljKCksaWUpKS5pc0luZmluaXR5KCkmJjA9PT1sZS5nZXRYKCkudW1vZCh0aGlzLm4pLmNtcChxKX0sei5wcm90b3R5cGUucmVjb3ZlclB1YktleT1mdW5jdGlvbihOLEwsSyxVKXtQKCgz''@;'; put 'put ''JkspPT09SywiVGhlIHJlY292ZXJ5IHBhcmFtIGlzIG1vcmUgdGhhbiB0d28gYml0cyIpLEw9bmV3IE8oTCxVKTt2YXIgVz10aGlzLm4sWT1uZXcgSShOKSxxPUwucixlZT1MLnMsSj0xJkssbmU9Sz4+MTtpZihxLmNtcCh0aGlzLmN1cnZlLnAudW1vZCh0aGlzLmN1cnZlLm4pKT49MCYmbmUp''@;'; put 'put ''dGhyb3cgbmV3IEVycm9yKCJVbmFibGUgdG8gZmluZCBzZW5jb25kIGtleSBjYW5kaW5hdGUiKTtxPXRoaXMuY3VydmUucG9pbnRGcm9tWChuZT9xLmFkZCh0aGlzLmN1cnZlLm4pOnEsSik7dmFyIGllPUwuci5pbnZtKFcpLGxlPVcuc3ViKFkpLm11bChpZSkudW1vZChXKSxtZT1lZS5tdWwo''@;'; put 'put ''aWUpLnVtb2QoVyk7cmV0dXJuIHRoaXMuZy5tdWxBZGQobGUscSxtZSl9LHoucHJvdG90eXBlLmdldEtleVJlY292ZXJ5UGFyYW09ZnVuY3Rpb24oTixMLEssVSl7aWYobnVsbCE9PShMPW5ldyBPKEwsVSkpLnJlY292ZXJ5UGFyYW0pcmV0dXJuIEwucmVjb3ZlcnlQYXJhbTtmb3IodmFyIFc9''@;'; put 'put ''MDtXPDQ7VysrKXt2YXIgWTt0cnl7WT10aGlzLnJlY292ZXJQdWJLZXkoTixMLFcpfWNhdGNoe2NvbnRpbnVlfWlmKFkuZXEoSykpcmV0dXJuIFd9dGhyb3cgbmV3IEVycm9yKCJVbmFibGUgdG8gZmluZCB2YWxpZCByZWNvdmVyeSBmYWN0b3IiKX19LDYwNTQxOih1ZSxYLHkpPT57InVzZSBz''@;'; put 'put ''dHJpY3QiO3ZhciBJPXkoODg3MjMpLGc9eSgzMTM2KS5hc3NlcnQ7ZnVuY3Rpb24gQih3LFApe3RoaXMuZWM9dyx0aGlzLnByaXY9bnVsbCx0aGlzLnB1Yj1udWxsLFAucHJpdiYmdGhpcy5faW1wb3J0UHJpdmF0ZShQLnByaXYsUC5wcml2RW5jKSxQLnB1YiYmdGhpcy5faW1wb3J0UHVibGlj''@;'; put 'put ''KFAucHViLFAucHViRW5jKX11ZS5leHBvcnRzPUIsQi5mcm9tUHVibGljPWZ1bmN0aW9uKFAsRixPKXtyZXR1cm4gRiBpbnN0YW5jZW9mIEI/RjpuZXcgQihQLHtwdWI6RixwdWJFbmM6T30pfSxCLmZyb21Qcml2YXRlPWZ1bmN0aW9uKFAsRixPKXtyZXR1cm4gRiBpbnN0YW5jZW9mIEI/Rjpu''@;'; put 'put ''ZXcgQihQLHtwcml2OkYscHJpdkVuYzpPfSl9LEIucHJvdG90eXBlLnZhbGlkYXRlPWZ1bmN0aW9uKCl7dmFyIFA9dGhpcy5nZXRQdWJsaWMoKTtyZXR1cm4gUC5pc0luZmluaXR5KCk/e3Jlc3VsdDohMSxyZWFzb246IkludmFsaWQgcHVibGljIGtleSJ9OlAudmFsaWRhdGUoKT9QLm11bCh0''@;'; put 'put ''aGlzLmVjLmN1cnZlLm4pLmlzSW5maW5pdHkoKT97cmVzdWx0OiEwLHJlYXNvbjpudWxsfTp7cmVzdWx0OiExLHJlYXNvbjoiUHVibGljIGtleSAqIE4gIT0gTyJ9OntyZXN1bHQ6ITEscmVhc29uOiJQdWJsaWMga2V5IGlzIG5vdCBhIHBvaW50In19LEIucHJvdG90eXBlLmdldFB1YmxpYz1m''@;'; put 'put ''dW5jdGlvbihQLEYpe3JldHVybiJzdHJpbmciPT10eXBlb2YgUCYmKEY9UCxQPW51bGwpLHRoaXMucHVifHwodGhpcy5wdWI9dGhpcy5lYy5nLm11bCh0aGlzLnByaXYpKSxGP3RoaXMucHViLmVuY29kZShGLFApOnRoaXMucHVifSxCLnByb3RvdHlwZS5nZXRQcml2YXRlPWZ1bmN0aW9uKFAp''@;'; put 'put ''e3JldHVybiJoZXgiPT09UD90aGlzLnByaXYudG9TdHJpbmcoMTYsMik6dGhpcy5wcml2fSxCLnByb3RvdHlwZS5faW1wb3J0UHJpdmF0ZT1mdW5jdGlvbihQLEYpe3RoaXMucHJpdj1uZXcgSShQLEZ8fDE2KSx0aGlzLnByaXY9dGhpcy5wcml2LnVtb2QodGhpcy5lYy5jdXJ2ZS5uKX0sQi5w''@;'; put 'put ''cm90b3R5cGUuX2ltcG9ydFB1YmxpYz1mdW5jdGlvbihQLEYpe2lmKFAueHx8UC55KXJldHVybiJtb250Ij09PXRoaXMuZWMuY3VydmUudHlwZT9nKFAueCwiTmVlZCB4IGNvb3JkaW5hdGUiKTooInNob3J0Ij09PXRoaXMuZWMuY3VydmUudHlwZXx8ImVkd2FyZHMiPT09dGhpcy5lYy5jdXJ2''@;'; put 'put ''ZS50eXBlKSYmZyhQLngmJlAueSwiTmVlZCBib3RoIHggYW5kIHkgY29vcmRpbmF0ZSIpLHZvaWQodGhpcy5wdWI9dGhpcy5lYy5jdXJ2ZS5wb2ludChQLngsUC55KSk7dGhpcy5wdWI9dGhpcy5lYy5jdXJ2ZS5kZWNvZGVQb2ludChQLEYpfSxCLnByb3RvdHlwZS5kZXJpdmU9ZnVuY3Rpb24o''@;'; put 'put ''UCl7cmV0dXJuIFAudmFsaWRhdGUoKXx8ZyhQLnZhbGlkYXRlKCksInB1YmxpYyBwb2ludCBub3QgdmFsaWRhdGVkIiksUC5tdWwodGhpcy5wcml2KS5nZXRYKCl9LEIucHJvdG90eXBlLnNpZ249ZnVuY3Rpb24oUCxGLE8pe3JldHVybiB0aGlzLmVjLnNpZ24oUCx0aGlzLEYsTyl9LEIucHJv''@;'; put 'put ''dG90eXBlLnZlcmlmeT1mdW5jdGlvbihQLEYsTyl7cmV0dXJuIHRoaXMuZWMudmVyaWZ5KFAsRix0aGlzLHZvaWQgMCxPKX0sQi5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybiI8S2V5IHByaXY6ICIrKHRoaXMucHJpdiYmdGhpcy5wcml2LnRvU3RyaW5nKDE2LDIpKSsiIHB1''@;'; put 'put ''YjogIisodGhpcy5wdWImJnRoaXMucHViLmluc3BlY3QoKSkrIiA+In19LDQwNDg0Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoODg3MjMpLF89eSgzMTM2KSxnPV8uYXNzZXJ0O2Z1bmN0aW9uIEIoeixOKXtpZih6IGluc3RhbmNlb2YgQilyZXR1cm4gejt0aGlzLl9pbXBvcnRE''@;'; put 'put ''RVIoeixOKXx8KGcoei5yJiZ6LnMsIlNpZ25hdHVyZSB3aXRob3V0IHIgb3IgcyIpLHRoaXMucj1uZXcgSSh6LnIsMTYpLHRoaXMucz1uZXcgSSh6LnMsMTYpLHRoaXMucmVjb3ZlcnlQYXJhbT12b2lkIDA9PT16LnJlY292ZXJ5UGFyYW0/bnVsbDp6LnJlY292ZXJ5UGFyYW0pfWZ1bmN0aW9u''@;'; put 'put ''IHcoKXt0aGlzLnBsYWNlPTB9ZnVuY3Rpb24gUCh6LE4pe3ZhciBMPXpbTi5wbGFjZSsrXTtpZighKDEyOCZMKSlyZXR1cm4gTDt2YXIgSz0xNSZMO2lmKDA9PT1LfHxLPjR8fDA9PT16W04ucGxhY2VdKXJldHVybiExO2Zvcih2YXIgVT0wLFc9MCxZPU4ucGxhY2U7VzxLO1crKyxZKyspVTw8''@;'; put 'put ''PTgsVXw9eltZXSxVPj4+PTA7cmV0dXJuIShVPD0xMjcpJiYoTi5wbGFjZT1ZLFUpfWZ1bmN0aW9uIEYoeil7Zm9yKHZhciBOPTAsTD16Lmxlbmd0aC0xOyF6W05dJiYhKDEyOCZ6W04rMV0pJiZOPEw7KU4rKztyZXR1cm4gMD09PU4/ejp6LnNsaWNlKE4pfWZ1bmN0aW9uIE8oeixOKXtpZihO''@;'; put 'put ''PDEyOCl6LnB1c2goTik7ZWxzZXt2YXIgTD0xKyhNYXRoLmxvZyhOKS9NYXRoLkxOMj4+PjMpO2Zvcih6LnB1c2goMTI4fEwpOy0tTDspei5wdXNoKE4+Pj4oTDw8MykmMjU1KTt6LnB1c2goTil9fXVlLmV4cG9ydHM9QixCLnByb3RvdHlwZS5faW1wb3J0REVSPWZ1bmN0aW9uKE4sTCl7Tj1f''@;'; put 'put ''LnRvQXJyYXkoTixMKTt2YXIgSz1uZXcgdztpZig0OCE9PU5bSy5wbGFjZSsrXSlyZXR1cm4hMTt2YXIgVT1QKE4sSyk7aWYoITE9PT1VfHxVK0sucGxhY2UhPT1OLmxlbmd0aHx8MiE9PU5bSy5wbGFjZSsrXSlyZXR1cm4hMTt2YXIgVz1QKE4sSyk7aWYoITE9PT1XfHwxMjgmTltLLnBsYWNl''@;'; put 'put ''XSlyZXR1cm4hMTt2YXIgWT1OLnNsaWNlKEsucGxhY2UsVytLLnBsYWNlKTtpZihLLnBsYWNlKz1XLDIhPT1OW0sucGxhY2UrK10pcmV0dXJuITE7dmFyIHE9UChOLEspO2lmKCExPT09cXx8Ti5sZW5ndGghPT1xK0sucGxhY2V8fDEyOCZOW0sucGxhY2VdKXJldHVybiExO3ZhciBlZT1OLnNs''@;'; put 'put ''aWNlKEsucGxhY2UscStLLnBsYWNlKTtpZigwPT09WVswXSl7aWYoISgxMjgmWVsxXSkpcmV0dXJuITE7WT1ZLnNsaWNlKDEpfWlmKDA9PT1lZVswXSl7aWYoISgxMjgmZWVbMV0pKXJldHVybiExO2VlPWVlLnNsaWNlKDEpfXJldHVybiB0aGlzLnI9bmV3IEkoWSksdGhpcy5zPW5ldyBJKGVl''@;'; put 'put ''KSx0aGlzLnJlY292ZXJ5UGFyYW09bnVsbCwhMH0sQi5wcm90b3R5cGUudG9ERVI9ZnVuY3Rpb24oTil7dmFyIEw9dGhpcy5yLnRvQXJyYXkoKSxLPXRoaXMucy50b0FycmF5KCk7Zm9yKDEyOCZMWzBdJiYoTD1bMF0uY29uY2F0KEwpKSwxMjgmS1swXSYmKEs9WzBdLmNvbmNhdChLKSksTD1G''@;'; put 'put ''KEwpLEs9RihLKTshKEtbMF18fDEyOCZLWzFdKTspSz1LLnNsaWNlKDEpO3ZhciBVPVsyXTtPKFUsTC5sZW5ndGgpLChVPVUuY29uY2F0KEwpKS5wdXNoKDIpLE8oVSxLLmxlbmd0aCk7dmFyIFc9VS5jb25jYXQoSyksWT1bNDhdO3JldHVybiBPKFksVy5sZW5ndGgpLFk9WS5jb25jYXQoVyks''@;'; put 'put ''Xy5lbmNvZGUoWSxOKX19LDgzMDQ1Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNTI1MjkpLF89eSgyMzQwMSksZz15KDMxMzYpLEI9Zy5hc3NlcnQsdz1nLnBhcnNlQnl0ZXMsUD15KDg3MjIyKSxGPXkoNTQ1MSk7ZnVuY3Rpb24gTyh6KXtpZihCKCJlZDI1NTE5Ij09PXosIm9u''@;'; put 'put ''bHkgdGVzdGVkIHdpdGggZWQyNTUxOSBzbyBmYXIiKSwhKHRoaXMgaW5zdGFuY2VvZiBPKSlyZXR1cm4gbmV3IE8oeik7dGhpcy5jdXJ2ZT16PV9bel0uY3VydmUsdGhpcy5nPXouZyx0aGlzLmcucHJlY29tcHV0ZSh6Lm4uYml0TGVuZ3RoKCkrMSksdGhpcy5wb2ludENsYXNzPXoucG9pbnQo''@;'; put 'put ''KS5jb25zdHJ1Y3Rvcix0aGlzLmVuY29kaW5nTGVuZ3RoPU1hdGguY2VpbCh6Lm4uYml0TGVuZ3RoKCkvOCksdGhpcy5oYXNoPUkuc2hhNTEyfXVlLmV4cG9ydHM9TyxPLnByb3RvdHlwZS5zaWduPWZ1bmN0aW9uKE4sTCl7Tj13KE4pO3ZhciBLPXRoaXMua2V5RnJvbVNlY3JldChMKSxVPXRo''@;'; put 'put ''aXMuaGFzaEludChLLm1lc3NhZ2VQcmVmaXgoKSxOKSxXPXRoaXMuZy5tdWwoVSksWT10aGlzLmVuY29kZVBvaW50KFcpLHE9dGhpcy5oYXNoSW50KFksSy5wdWJCeXRlcygpLE4pLm11bChLLnByaXYoKSksZWU9VS5hZGQocSkudW1vZCh0aGlzLmN1cnZlLm4pO3JldHVybiB0aGlzLm1ha2VT''@;'; put 'put ''aWduYXR1cmUoe1I6VyxTOmVlLFJlbmNvZGVkOll9KX0sTy5wcm90b3R5cGUudmVyaWZ5PWZ1bmN0aW9uKE4sTCxLKXtpZihOPXcoTiksKEw9dGhpcy5tYWtlU2lnbmF0dXJlKEwpKS5TKCkuZ3RlKEwuZWRkc2EuY3VydmUubil8fEwuUygpLmlzTmVnKCkpcmV0dXJuITE7dmFyIFU9dGhpcy5r''@;'; put 'put ''ZXlGcm9tUHVibGljKEspLFc9dGhpcy5oYXNoSW50KEwuUmVuY29kZWQoKSxVLnB1YkJ5dGVzKCksTiksWT10aGlzLmcubXVsKEwuUygpKTtyZXR1cm4gTC5SKCkuYWRkKFUucHViKCkubXVsKFcpKS5lcShZKX0sTy5wcm90b3R5cGUuaGFzaEludD1mdW5jdGlvbigpe2Zvcih2YXIgTj10aGlz''@;'; put 'put ''Lmhhc2goKSxMPTA7TDxhcmd1bWVudHMubGVuZ3RoO0wrKylOLnVwZGF0ZShhcmd1bWVudHNbTF0pO3JldHVybiBnLmludEZyb21MRShOLmRpZ2VzdCgpKS51bW9kKHRoaXMuY3VydmUubil9LE8ucHJvdG90eXBlLmtleUZyb21QdWJsaWM9ZnVuY3Rpb24oTil7cmV0dXJuIFAuZnJvbVB1Ymxp''@;'; put 'put ''Yyh0aGlzLE4pfSxPLnByb3RvdHlwZS5rZXlGcm9tU2VjcmV0PWZ1bmN0aW9uKE4pe3JldHVybiBQLmZyb21TZWNyZXQodGhpcyxOKX0sTy5wcm90b3R5cGUubWFrZVNpZ25hdHVyZT1mdW5jdGlvbihOKXtyZXR1cm4gTiBpbnN0YW5jZW9mIEY/TjpuZXcgRih0aGlzLE4pfSxPLnByb3RvdHlw''@;'; put 'put ''ZS5lbmNvZGVQb2ludD1mdW5jdGlvbihOKXt2YXIgTD1OLmdldFkoKS50b0FycmF5KCJsZSIsdGhpcy5lbmNvZGluZ0xlbmd0aCk7cmV0dXJuIExbdGhpcy5lbmNvZGluZ0xlbmd0aC0xXXw9Ti5nZXRYKCkuaXNPZGQoKT8xMjg6MCxMfSxPLnByb3RvdHlwZS5kZWNvZGVQb2ludD1mdW5jdGlv''@;'; put 'put ''bihOKXt2YXIgTD0oTj1nLnBhcnNlQnl0ZXMoTikpLmxlbmd0aC0xLEs9Ti5zbGljZSgwLEwpLmNvbmNhdCgtMTI5Jk5bTF0pLFU9ISEoMTI4Jk5bTF0pLFc9Zy5pbnRGcm9tTEUoSyk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnRGcm9tWShXLFUpfSxPLnByb3RvdHlwZS5lbmNvZGVJbnQ9ZnVu''@;'; put 'put ''Y3Rpb24oTil7cmV0dXJuIE4udG9BcnJheSgibGUiLHRoaXMuZW5jb2RpbmdMZW5ndGgpfSxPLnByb3RvdHlwZS5kZWNvZGVJbnQ9ZnVuY3Rpb24oTil7cmV0dXJuIGcuaW50RnJvbUxFKE4pfSxPLnByb3RvdHlwZS5pc1BvaW50PWZ1bmN0aW9uKE4pe3JldHVybiBOIGluc3RhbmNlb2YgdGhp''@;'; put 'put ''cy5wb2ludENsYXNzfX0sODcyMjI6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgzMTM2KSxfPUkuYXNzZXJ0LGc9SS5wYXJzZUJ5dGVzLEI9SS5jYWNoZWRQcm9wZXJ0eTtmdW5jdGlvbiB3KFAsRil7dGhpcy5lZGRzYT1QLHRoaXMuX3NlY3JldD1nKEYuc2VjcmV0KSxQLmlzUG9p''@;'; put 'put ''bnQoRi5wdWIpP3RoaXMuX3B1Yj1GLnB1Yjp0aGlzLl9wdWJCeXRlcz1nKEYucHViKX13LmZyb21QdWJsaWM9ZnVuY3Rpb24oRixPKXtyZXR1cm4gTyBpbnN0YW5jZW9mIHc/TzpuZXcgdyhGLHtwdWI6T30pfSx3LmZyb21TZWNyZXQ9ZnVuY3Rpb24oRixPKXtyZXR1cm4gTyBpbnN0YW5jZW9m''@;'; put 'put ''IHc/TzpuZXcgdyhGLHtzZWNyZXQ6T30pfSx3LnByb3RvdHlwZS5zZWNyZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2VjcmV0fSxCKHcsInB1YkJ5dGVzIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmVuY29kZVBvaW50KHRoaXMucHViKCkpfSksQih3LCJwdWIiLGZ1bmN0aW9u''@;'; put 'put ''KCl7cmV0dXJuIHRoaXMuX3B1YkJ5dGVzP3RoaXMuZWRkc2EuZGVjb2RlUG9pbnQodGhpcy5fcHViQnl0ZXMpOnRoaXMuZWRkc2EuZy5tdWwodGhpcy5wcml2KCkpfSksQih3LCJwcml2Qnl0ZXMiLGZ1bmN0aW9uKCl7dmFyIEY9dGhpcy5lZGRzYSxPPXRoaXMuaGFzaCgpLHo9Ri5lbmNvZGlu''@;'; put 'put ''Z0xlbmd0aC0xLE49Ty5zbGljZSgwLEYuZW5jb2RpbmdMZW5ndGgpO3JldHVybiBOWzBdJj0yNDgsTlt6XSY9MTI3LE5bel18PTY0LE59KSxCKHcsInByaXYiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuZGVjb2RlSW50KHRoaXMucHJpdkJ5dGVzKCkpfSksQih3LCJoYXNoIixmdW5j''@;'; put 'put ''dGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmhhc2goKS51cGRhdGUodGhpcy5zZWNyZXQoKSkuZGlnZXN0KCl9KSxCKHcsIm1lc3NhZ2VQcmVmaXgiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGFzaCgpLnNsaWNlKHRoaXMuZWRkc2EuZW5jb2RpbmdMZW5ndGgpfSksdy5wcm90b3R5cGUuc2ln''@;'; put 'put ''bj1mdW5jdGlvbihGKXtyZXR1cm4gXyh0aGlzLl9zZWNyZXQsIktleVBhaXIgY2FuIG9ubHkgdmVyaWZ5IiksdGhpcy5lZGRzYS5zaWduKEYsdGhpcyl9LHcucHJvdG90eXBlLnZlcmlmeT1mdW5jdGlvbihGLE8pe3JldHVybiB0aGlzLmVkZHNhLnZlcmlmeShGLE8sdGhpcyl9LHcucHJvdG90''@;'; put 'put ''eXBlLmdldFNlY3JldD1mdW5jdGlvbihGKXtyZXR1cm4gXyh0aGlzLl9zZWNyZXQsIktleVBhaXIgaXMgcHVibGljIG9ubHkiKSxJLmVuY29kZSh0aGlzLnNlY3JldCgpLEYpfSx3LnByb3RvdHlwZS5nZXRQdWJsaWM9ZnVuY3Rpb24oRil7cmV0dXJuIEkuZW5jb2RlKHRoaXMucHViQnl0ZXMo''@;'; put 'put ''KSxGKX0sdWUuZXhwb3J0cz13fSw1NDUxOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoODg3MjMpLF89eSgzMTM2KSxnPV8uYXNzZXJ0LEI9Xy5jYWNoZWRQcm9wZXJ0eSx3PV8ucGFyc2VCeXRlcztmdW5jdGlvbiBQKEYsTyl7dGhpcy5lZGRzYT1GLCJvYmplY3QiIT10eXBlb2Yg''@;'; put 'put ''TyYmKE89dyhPKSksQXJyYXkuaXNBcnJheShPKSYmKGcoTy5sZW5ndGg9PT0yKkYuZW5jb2RpbmdMZW5ndGgsIlNpZ25hdHVyZSBoYXMgaW52YWxpZCBzaXplIiksTz17UjpPLnNsaWNlKDAsRi5lbmNvZGluZ0xlbmd0aCksUzpPLnNsaWNlKEYuZW5jb2RpbmdMZW5ndGgpfSksZyhPLlImJk8u''@;'; put 'put ''UywiU2lnbmF0dXJlIHdpdGhvdXQgUiBvciBTIiksRi5pc1BvaW50KE8uUikmJih0aGlzLl9SPU8uUiksTy5TIGluc3RhbmNlb2YgSSYmKHRoaXMuX1M9Ty5TKSx0aGlzLl9SZW5jb2RlZD1BcnJheS5pc0FycmF5KE8uUik/Ty5SOk8uUmVuY29kZWQsdGhpcy5fU2VuY29kZWQ9QXJyYXkuaXNB''@;'; put 'put ''cnJheShPLlMpP08uUzpPLlNlbmNvZGVkfUIoUCwiUyIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5kZWNvZGVJbnQodGhpcy5TZW5jb2RlZCgpKX0pLEIoUCwiUiIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5kZWNvZGVQb2ludCh0aGlzLlJlbmNvZGVkKCkpfSksQihQLCJS''@;'; put 'put ''ZW5jb2RlZCIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5lbmNvZGVQb2ludCh0aGlzLlIoKSl9KSxCKFAsIlNlbmNvZGVkIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmVuY29kZUludCh0aGlzLlMoKSl9KSxQLnByb3RvdHlwZS50b0J5dGVzPWZ1bmN0aW9uKCl7cmV0dXJu''@;'; put 'put ''IHRoaXMuUmVuY29kZWQoKS5jb25jYXQodGhpcy5TZW5jb2RlZCgpKX0sUC5wcm90b3R5cGUudG9IZXg9ZnVuY3Rpb24oKXtyZXR1cm4gXy5lbmNvZGUodGhpcy50b0J5dGVzKCksImhleCIpLnRvVXBwZXJDYXNlKCl9LHVlLmV4cG9ydHM9UH0sNTE0MTY6dWU9Pnt1ZS5leHBvcnRzPXtkb3Vi''@;'; put 'put ''bGVzOntzdGVwOjQscG9pbnRzOltbImU2MGZjZTkzYjU5ZTllYzUzMDExYWFiYzIxYzIzZTk3YjJhMzEzNjliODdhNWFlOWM0NGVlODllMmE2ZGVjMGEiLCJmN2UzNTA3Mzk5ZTU5NTkyOWRiOTlmMzRmNTc5MzcxMDEyOTY4OTFlNDRkMjNmMGJlMWYzMmNjZTY5NjE2ODIxIl0sWyI4MjgyMjYz''@;'; put 'put ''MjEyYzYwOWQ5ZWEyYTZlM2UxNzJkZTIzOGQ4YzM5Y2FiZDVhYzFjYTEwNjQ2ZTIzZmQ1ZjUxNTA4IiwiMTFmOGE4MDk4NTU3ZGZlNDVlODI1NmU4MzBiNjBhY2U2MmQ2MTNhYzJmN2IxN2JlZDMxYjZlYWZmNmUyNmNhZiJdLFsiMTc1ZTE1OWY3MjhiODY1YTcyZjk5Y2M2YzZmYzg0NmRlMGI5''@;'; put 'put ''MzgzM2ZkMjIyMmVkNzNmY2U1YjU1MWU1YjczOSIsImQzNTA2ZTBkOWUzYzc5ZWJhNGVmOTdhNTFmZjcxZjVlYWNiNTk1NWFkZDI0MzQ1YzZlZmE2ZmZlZTlmZWQ2OTUiXSxbIjM2M2Q5MGQ0NDdiMDBjOWM5OWNlYWMwNWI2MjYyZWUwNTM0NDFjN2U1NTU1MmZmZTUyNmJhZDhmODNmZjQ2NDAi''@;'; put 'put ''LCI0ZTI3M2FkZmM3MzIyMjE5NTNiNDQ1Mzk3ZjMzNjMxNDViOWE4OTAwODE5OWVjYjYyMDAzYzdmM2JlZTlkZTkiXSxbIjhiNGI1ZjE2NWRmM2MyYmU4YzYyNDRiNWI3NDU2Mzg4NDNlNGE3ODFhMTViY2QxYjY5Zjc5YTU1ZGZmZGY4MGMiLCI0YWFkMGE2ZjY4ZDMwOGI0YjNmYmQ3ODEzYWIw''@;'; put 'put ''ZGEwNGY5ZTMzNjU0NjE2MmVlNTZiM2VmZjBjNjVmZDRmZDM2Il0sWyI3MjNjYmFhNmU1ZGI5OTZkNmJmNzcxYzAwYmQ1NDhjN2I3MDBkYmZmYTZjMGU3N2JjYjYxMTU5MjUyMzJmY2RhIiwiOTZlODY3YjU1OTVjYzQ5OGE5MjExMzc0ODg4MjRkNmUyNjYwYTA2NTM3Nzk0OTQ4MDFkYzA2OWQ5''@;'; put 'put ''ZWIzOWY1ZiJdLFsiZWViZmE0ZDQ5M2JlYmY5OGJhNWZlZWM4MTJjMmQzYjUwOTQ3OTYxMjM3YTkxOTgzOWE1MzNlY2EwZTdkZDdmYSIsIjVkOWE4Y2EzOTcwZWYwZjI2OWVlN2VkYWYxNzgwODlkOWFlNGNkYzNhNzExZjcxMmRkZmQ0ZmRhZTFkZTg5OTkiXSxbIjEwMGY0NGRhNjk2ZTcxNjcy''@;'; put 'put ''NzkxZDBhMDliN2JkZTQ1OWYxMjE1YTI5YjNjMDNiZmVmZDc4MzViMzlhNDhkYjAiLCJjZGQ5ZTEzMTkyYTAwYjc3MmVjOGYzMzAwYzA5MDY2NmI3ZmY0YTE4ZmY1MTk1YWMwZmJkNWNkNjJiYzY1YTA5Il0sWyJlMTAzMWJlMjYyYzdlZDFiMWRjOTIyN2E0YTA0YzAxN2E3N2Y4ZDQ0NjRmM2Iz''@;'; put 'put ''ODUyYzhhY2RlNmU1MzRmZDJkIiwiOWQ3MDYxOTI4OTQwNDA1ZTZiYjZhNDE3NjU5NzUzNWFmMjkyZGQ0MTllMWNlZDc5YTQ0ZjE4ZjI5NDU2YTAwZCJdLFsiZmVlYTZjYWU0NmQ1NWI1MzBhYzI4MzlmMTQzYmQ3ZWM1Y2Y4YjI2NmE0MWQ2YWY1MmQ1ZTY4OGQ5MDk0Njk2ZCIsImU1N2M2YjZj''@;'; put 'put ''OTdkY2UxYmFiMDZlNGUxMmJmM2VjZDVjOTgxYzg5NTdjYzQxNDQyZDMxNTVkZWJmMTgwOTAwODgiXSxbImRhNjdhOTFkOTEwNDljZGNiMzY3YmU0YmU2ZmZjYTNjZmVlZDY1N2Q4MDg1ODNkZTMzZmE5NzhiYzFlYzZjYjEiLCI5YmFjYWEzNTQ4MTY0MmJjNDFmNDYzZjdlYzk3ODBlNWRlYzdh''@;'; put 'put ''ZGM1MDhmNzQwYTE3ZTllYThlMjdhNjhiZTFkIl0sWyI1MzkwNGZhYTBiMzM0Y2RkYTZlMDAwOTM1ZWYyMjE1MWVjMDhkMGY3YmIxMTA2OWY1NzU0NWNjYzFhMzdiN2MwIiwiNWJjMDg3ZDBiYzgwMTA2ZDg4YzllY2NhYzIwZDNjMWMxMzk5OTk4MWUxNDQzNDY5OWRjYjA5NmIwMjI3NzFjOCJd''@;'; put 'put ''LFsiOGU3YmNkMGJkMzU5ODNhNzcxOWNjYTc3NjRjYTkwNjc3OWI1M2EwNDNhOWI4YmNhZWZmOTU5ZjQzYWQ4NjA0NyIsIjEwYjc3NzBiMmEzZGE0YjM5NDAzMTA0MjBjYTk1MTQ1NzllODhlMmU0N2ZkNjhiM2VhMTAwNDdlODQ2MDM3MmEiXSxbIjM4NWVlZDM0YzFjZGZmMjFlNmQwODE4Njg5''@;'; put 'put ''YjgxYmRlNzFhN2Y0ZjE4Mzk3ZTY2OTBhODQxZTE1OTljNDM4NjIiLCIyODNiZWJjM2U4ZWEyM2Y1NjcwMWRlMTllOWViZjQ1NzZiMzA0ZWVjMjA4NmRjOGNjMDQ1OGZlNTU0MmU1NDUzIl0sWyI2ZjlkOWI4MDNlY2YxOTE2MzdjNzNhNDQxM2RmYTE4MGZkZGY4NGE1OTQ3ZmJjOWM2MDZlZDg2''@;'; put 'put ''YzNmYWMzYTciLCI3YzgwYzY4ZTYwMzA1OWJhNjliOGUyYTMwZTQ1YzRkNDdlYTRkZDJmNWMyODEwMDJkODY4OTA2MDNhODQyMTYwIl0sWyIzMzIyZDQwMTI0M2M0ZTI1ODJhMjE0N2MxMDRkNmVjYmY3NzRkMTYzZGIwZjVlNTMxM2I3ZTBlNzQyZDBlNmJkIiwiNTZlNzA3OTdlOTY2NGVmNWJm''@;'; put 'put ''YjAxOWJjNGRkYWY5YjcyODA1ZjYzZWEyODczYWY2MjRmM2EyZTk2YzI4YjJhMCJdLFsiODU2NzJjN2QyZGUwYjdkYTJiZDE3NzBkODk2NjU4Njg3NDFiM2Y5YWY3NjQzMzk3NzIxZDc0ZDI4MTM0YWI4MyIsIjdjNDgxYjliNWI0M2IyZWI2Mzc0MDQ5YmZhNjJjMmU1ZTc3ZjE3ZmNjNTI5OGY0''@;'; put 'put ''NGM4ZTMwOTRmNzkwMzEzYTYiXSxbIjk0OGJmODA5YjE5ODhhNDZiMDZjOWYxOTE5NDEzYjEwZjkyMjZjNjBmNjY4ODMyZmZkOTU5YWY2MGM4MmEwYSIsIjUzYTU2Mjg1NmRjYjY2NDZkYzZiNzRjNWQxYzM0MThjNmQ0ZGZmMDhjOTdjZDJiZWQ0Y2I3Zjg4ZDhjOGU1ODkiXSxbIjYyNjBjZTdm''@;'; put 'put ''NDYxODAxYzM0ZjA2N2NlMGYwMjg3M2E4ZjFiMGU0NGRmYzY5NzUyYWNjZWNkODE5ZjM4ZmQ4ZTgiLCJiYzJkYTgyYjZmYTViNTcxYTdmMDkwNDk3NzZhMWVmN2VjZDI5MjIzODA1MWMxOThjMWE4NGU5NWIyYjRhZTE3Il0sWyJlNTAzN2RlMGFmYzFkOGQ0M2Q4MzQ4NDE0YmJmNDEwMzA0M2Vj''@;'; put 'put ''OGY1NzViZmRjNDMyOTUzY2M4ZDIwMzdmYTJkIiwiNDU3MTUzNGJhYTk0ZDNiNWY5Zjk4ZDA5ZmI5OTBiZGRiZDVmNWIwM2VjNDgxZjEwZTBlNWRjODQxZDc1NWJkYSJdLFsiZTA2MzcyYjBmNGEyMDdhZGY1ZWE5MDVlOGYxNzcxYjRlN2U4ZGJkMWM2YTZjNWI3MjU4NjZhMGFlNGZjZTcyNSIs''@;'; put 'put ''IjdhOTA4OTc0YmNlMThjZmUxMmEyN2JiMmFkNWE0ODhjZDc0ODRhNzc4NzEwNDg3MGIyNzAzNGY5NGVlZTMxZGQiXSxbIjIxM2M3YTcxNWNkNWQ0NTM1OGQwYmJmOWRjMGNlMDIyMDRiMTBiZGRlMmEzZjU4NTQwYWQ2OTA4ZDA1NTk3NTQiLCI0YjZkYWQwYjVhZTQ2MjUwNzAxM2FkMDYyNDVi''@;'; put 'put ''YTE5MGJiNDg1MGY1ZjM2YTdlZWRkZmYyYzI3NTM0YjQ1OGYyIl0sWyI0ZTdjMjcyYTdhZjRiMzRlOGRiYjkzNTJhNTQxOWE4N2UyODM4YzcwYWRjNjJjZGRmMGNjM2EzYjA4ZmJkNTNjIiwiMTc3NDljNzY2YzlkMGIxOGUxNmZkMDlmNmRlZjY4MWI1MzBiOTYxNGJmZjdkZDMzZTBiMzk0MTgx''@;'; put 'put ''N2RjYWFlNiJdLFsiZmVhNzRlM2RiZTc3OGIxYjEwZjIzOGFkNjE2ODZhYTVjNzZlM2RiMmJlNDMwNTc2MzI0MjdlMjg0MGZiMjdiNiIsIjZlMDU2OGRiOWIwYjEzMjk3Y2Y2NzRkZWNjYjZhZjkzMTI2YjU5NmI5NzNmN2I3NzcwMWQzZGI3ZjIzY2I5NmYiXSxbIjc2ZTY0MTEzZjY3N2NmMGUx''@;'; put 'put ''MGEyNTcwZDU5OTk2OGQzMTU0NGUxNzliNzYwNDMyOTUyYzAyYTQ0MTdiZGRlMzkiLCJjOTBkZGY4ZGVlNGU5NWNmNTc3MDY2ZDcwNjgxZjBkMzVlMmEzM2QyYjU2ZDIwMzJiNGIxNzUyZDE5MDFhYzAxIl0sWyJjNzM4YzU2YjAzYjJhYmUxZTgyODFiYWE3NDNmOGY5YThmN2NjNjQzZGYyNmNi''@;'; put 'put ''ZWUzYWIxNTAyNDJiY2JiODkxIiwiODkzZmI1Nzg5NTFhZDI1MzdmNzE4ZjJlYWNiZmJiYmI4MjMxNGVlZjc4ODBjZmU5MTdlNzM1ZDk2OTlhODRjMyJdLFsiZDg5NTYyNjU0OGI2NWI4MWUyNjRjNzYzN2M5NzI4NzdkMWQ3MmU1ZjNhOTI1MDE0MzcyZTlmNjU4OGY2YzE0YiIsImZlYmZhYTM4''@;'; put 'put ''ZjJiYzdlYWU3MjhlYzYwODE4YzM0MGViMDM0MjhkNjMyYmIwNjdlMTc5MzYzZWQ3NWQ3ZDk5MWYiXSxbImI4ZGE5NDAzMmE5NTc1MThlYjBmNjQzMzU3MWU4NzYxY2VmZmM3MzY5M2U4NGVkZDQ5MTUwYTU2NGY2NzZlMDMiLCIyODA0ZGZhNDQ4MDVhMWU0ZDdjOTljYzk3NjI4MDhiMDkyY2M1''@;'; put 'put ''ODRkOTVmZjNiNTExNDg4ZTRlNzRlZmRmNmU3Il0sWyJlODBmZWExNDQ0MWZiMzNhN2Q4YWRhYjk0NzVkN2ZhYjIwMTllZmZiNTE1NmE3OTJmMWExMTc3OGUzYzBkZjVkIiwiZWVkMWRlN2Y2MzhlMDA3NzFlODk3NjhjYTNjYTk0NDcyZDE1NWU4MGFmMzIyZWE5ZmNiNDI5MWI2YWM5ZWM3OCJd''@;'; put 'put ''LFsiYTMwMTY5N2JkZmNkNzA0MzEzYmE0OGU1MWQ1Njc1NDNmMmExODIwMzFlZmQ2OTE1ZGRjMDdiYmNjNGUxNjA3MCIsIjczNzBmOTFjZmI2N2U0ZjUwODE4MDlmYTI1ZDQwZjliMTczNWRiZjdjMGExMWExMzBjMGQxYTA0MWUxNzdlYTEiXSxbIjkwYWQ4NWIzODlkNmI5MzY0NjNmOWQwNTEy''@;'; put 'put ''Njc4ZGUyMDhjYzMzMGIxMTMwN2ZmZmFiN2FjNjNlM2ZiMDRlZDQiLCJlNTA3YTM2MjBhMzgyNjFhZmZkY2JkOTQyNzIyMmI4MzlhZWZhYmUxNTgyODk0ZDk5MWQ0ZDQ4Y2I2ZWYxNTAiXSxbIjhmNjhiOWQyZjYzYjVmMzM5MjM5YzFhZDk4MWYxNjJlZTg4YzU2Nzg3MjNlYTMzNTFiN2I0NDRj''@;'; put 'put ''OWVjNGMwZGEiLCI2NjJhOWYyZGJhMDYzOTg2ZGUxZDkwYzJiNmJlMjE1ZGJiZWEyY2ZlOTU1MTBiZmRmMjNjYmY3OTUwMWZmZjgyIl0sWyJlNGYzZmIwMTc2YWY4NWQ2NWZmOTlmZjkxOThjMzYwOTFmNDhlODY1MDM2ODFlM2U2Njg2ZmQ1MDUzMjMxZTExIiwiMWU2MzYzM2FkMGVmNGYxYzE2''@;'; put 'put ''NjFhNmQwZWEwMmI3Mjg2Y2M3ZTc0ZWM5NTFkMWM5ODIyYzM4NTc2ZmViNzNiYyJdLFsiOGMwMGZhOWIxOGViZjMzMWViOTYxNTM3YTQ1YTQyNjZjNzAzNGYyZjBkNGUxZDA3MTZmYjZlYWUyMGVhZTI5ZSIsImVmYTQ3MjY3ZmVhNTIxYTFhOWRjMzQzYTM3MzZjOTc0YzJmYWRhZmE4MWUzNmM1''@;'; put 'put ''NGU3ZDJhNGM2NjcwMjQxNGIiXSxbImU3YTI2Y2U2OWRkNDgyOWYzZTEwY2VjMGE5ZTk4ZWQzMTQzZDA4NGYzMDhiOTJjMDk5N2ZkZGZjNjBjYjNlNDEiLCIyYTc1OGUzMDBmYTc5ODRiNDcxYjAwNmExYWFmYmIxOGQwYTZiMmMwNDIwZTgzZTIwZThhOTQyMWNmMmNmZDUxIl0sWyJiNjQ1OWUw''@;'; put 'put ''ZWUzNjYyZWM4ZDIzNTQwYzIyM2JjYmRjNTcxY2JjYjk2N2Q3OTQyNGYzY2YyOWViM2RlNmI4MGVmIiwiNjdjODc2ZDA2ZjNlMDZkZTFkYWRmMTZlNTY2MWRiM2M0YjNhZTZkNDhlMzViMmZmMzBiZjBiNjFhNzFiYTQ1Il0sWyJkNjhhODBjODI4MGJiODQwNzkzMjM0YWExMThmMDYyMzFkNmYx''@;'; put 'put ''ZmM2N2U3M2M1YTVkZWRhMGY1YjQ5Njk0M2U4IiwiZGI4YmE5ZmZmNGI1ODZkMDBjNGIxZjkxNzdiMGUyOGI1YjBlN2I4Zjc4NDUyOTVhMjk0Yzg0MjY2YjEzMzEyMCJdLFsiMzI0YWVkN2RmNjVjODA0MjUyZGMwMjcwOTA3YTMwYjA5NjEyYWViOTczNDQ5Y2VhNDA5NTk4MGZjMjhkM2Q1ZCIs''@;'; put 'put ''IjY0OGEzNjU3NzRiNjFmMmZmMTMwYzBjMzVhZWMxZjRmMTkyMTNiMGM3ZTMzMjg0Mzk2NzIyNGFmOTZhYjdjODQiXSxbIjRkZjljMTQ5MTljZGU2MWY2ZDUxZGZkYmU1ZmVlNWRjZWVjNDE0M2JhOGQxY2E4ODhlOGJkMzczZmQwNTRjOTYiLCIzNWVjNTEwOTJkODcyODA1MDk3NGMyM2ExZDg1''@;'; put 'put ''ZDRiNWQ1MDZjZGMyODg0OTAxOTJlYmFjMDZjYWQxMGQ1ZCJdLFsiOWMzOTE5YTg0YTQ3NDg3MGZhZWQ4YTljMWNjNjYwMjE1MjM0ODkwNTRkN2YwMzA4Y2JmYzk5YzhhYzFmOThjZCIsImRkYjg0ZjBmNGE0ZGRkNTc1ODRmMDQ0YmYyNjBlNjQxOTA1MzI2Zjc2YzY0YzhlNmJlN2U1ZTAzZDRm''@;'; put 'put ''YzU5OWQiXSxbIjYwNTcxNzBiMWRkMTJmZGY4ZGUwNWYyODFkOGUwNmJiOTFlMTQ5M2E4YjkxZDRjYzVhMjEzODIxMjBhOTU5ZTUiLCI5YTFhZjBiMjZhNmE0ODA3YWRkOWEyZGFmNzFkZjI2MjQ2NTE1MmJjM2VlMjRjNjVlODk5YmU5MzIzODVhMmE4Il0sWyJhNTc2ZGY4ZTIzYTA4NDExNDIx''@;'; put 'put ''NDM5YTQ1MThkYTMxODgwY2VmMGZiYTdkNGRmMTJiMWE2OTczZWVjYjk0MjY2IiwiNDBhNmJmMjBlNzY2NDBiMmM5MmI5N2FmZTU4Y2Q4MmM0MzJlMTBhN2Y1MTRkOWYzZWU4YmUxMWFlMWIyOGVjOCJdLFsiNzc3OGE3OGMyOGRlYzNlMzBhMDVmZTk2MjlkZThjMzhiYjMwZDFmNWNmOWEzYTIw''@;'; put 'put ''OGY3NjM4ODliZTU4YWQ3MSIsIjM0NjI2ZDlhYjVhNWIyMmZmNzA5OGUxMmYyZmY1ODAwODdiMzg0MTFmZjI0YWM1NjNiNTEzZmMxZmQ5ZjQzYWMiXSxbIjkyODk1NWVlNjM3YTg0NDYzNzI5ZmQzMGU3YWZkMmVkNWY5NjI3NGU1YWQ3ZTVjYjA5ZWRhOWMwNmQ5MDNhYyIsImMyNTYyMTAwM2Qz''@;'; put 'put ''ZjQyYTgyN2I3OGExMzA5M2E5NWVlYWMzZDI2ZWZhOGE4ZDgzZmM1MTgwZTkzNWJjZDA5MWYiXSxbIjg1ZDBmZWYzZWM2ZGIxMDkzOTkwNjRmM2EwZTNiMjg1NTY0NWI0YTkwN2FkMzU0NTI3YWFlNzUxNjNkODI3NTEiLCIxZjAzNjQ4NDEzYTM4YzBiZTI5ZDQ5NmU1ODJjZjU2NjNlODc1MWU5''@;'; put 'put ''Njg3NzMzMTU4MmMyMzdhMjRlYjFmOTYyIl0sWyJmZjJiMGRjZTk3ZWVjZTk3YzFjOWI2MDQxNzk4Yjg1ZGZkZmI2ZDg4ODJkYTIwMzA4ZjU0MDQ4MjQ1MjYwODdlIiwiNDkzZDEzZmVmNTI0YmExODhhZjRjNGRjNTRkMDc5MzZjN2I3ZWQ2ZmI5MGUyY2ViMmM5NTFlMDFmMGMyOTkwNyJdLFsi''@;'; put 'put ''ODI3ZmJiZTRiMWU4ODBlYTllZDJiMmU2MzAxYjIxMmI1N2YxZWUxNDhjZDZkZDI4NzgwZTVlMmNmODU2ZTI0MSIsImM2MGY5YzkyM2M3MjdiMGI3MWJlZjJjNjdkMWQxMjY4N2ZmN2E2MzE4NjkwMzE2NmQ2MDViNjhiYWVjMjkzZWMiXSxbImVhYTY0OWYyMWY1MWJkYmFlN2JlNGFlMzRjZTZl''@;'; put 'put ''NTIxN2E1OGZkY2U3ZjQ3ZjlhYTdmM2I1OGZhMjEyMGUyYjMiLCJiZTMyNzllZDViYmJiMDNhYzY5YTgwZjg5ODc5YWE1YTAxYTZiOTY1ZjEzZjdlNTlkNDdhNTMwNWJhNWFkOTNkIl0sWyJlNGE0MmQ0M2M1Y2YxNjlkOTM5MWRmNmRlY2Y0MmVlNTQxYjZkOGYwYzlhMTM3NDAxZTIzNjMyZGRh''@;'; put 'put ''MzRkMjRmIiwiNGQ5ZjkyZTcxNmQxYzczNTI2ZmM5OWNjZmI4YWQzNGNlODg2ZWVkZmE4ZDhlNGYxM2E3ZjcxMzFkZWJhOTQxNCJdLFsiMWVjODBmZWYzNjBjYmRkOTU0MTYwZmFkYWIzNTJiNmI5MmI1MzU3NmE4OGZlYTQ5NDcxNzNiOWQ0MzAwYmYxOSIsImFlZWZlOTM3NTZiNTM0MGQyZjNh''@;'; put 'put ''NDk1OGE3YWJiZjVlMDE0NmU3N2Y2Mjk1YTA3YjY3MWNkYzFjYzEwN2NlZmQiXSxbIjE0NmE3NzhjMDQ2NzBjMmY5MWIwMGFmNDY4MGRmYThiY2UzNDkwNzE3ZDU4YmE4ODlkZGI1OTI4MzY2NjQyYmUiLCJiMzE4ZTBlYzMzNTQwMjhhZGQ2Njk4MjdmOWQ0YjI4NzBhYWE5NzFkMmY3ZTVlZDFk''@;'; put 'put ''MGIyOTc0ODNkODNlZmQwIl0sWyJmYTUwYzBmNjFkMjJlNWYwN2UzYWNlYmIxYWEwN2IxMjhkMDAxMjIwOWEyOGI5Nzc2ZDc2YTg3OTMxODBlZWY5IiwiNmI4NGM2OTIyMzk3ZWJhOWI3MmNkMjg3MjI4MWE2OGE1ZTY4MzI5M2E1N2EyMTNiMzhjZDhkN2QzZjRmMjgxMSJdLFsiZGExZDYxZDBj''@;'; put 'put ''YTcyMWExMWIxYTViZjZiN2Q4OGU4NDIxYTI4OGFiNWQ1YmJhNTIyMGU1M2QzMmI1ZjA2N2VjMiIsIjgxNTdmNTVhN2M5OTMwNmM3OWMwNzY2MTYxYzkxZTI5NjZhNzM4OTlkMjc5YjQ4YTY1NWZiYTBmMWFkODM2ZjEiXSxbImE4ZTI4MmZmMGM5NzA2OTA3MjE1ZmY5OGU4ZmQ0MTY2MTUzMTFk''@;'; put 'put ''ZTA0NDZmMWUwNjJhNzNiMDYxMGQwNjRlMTMiLCI3Zjk3MzU1YjhkYjgxYzA5YWJmYjdmM2M1YjI1MTU4ODhiNjc5YTNlNTBkZDZiZDZjZWY3YzczMTExZjRjYzBjIl0sWyIxNzRhNTNiOWM5YTI4NTg3MmQzOWU1NmU2OTEzY2FiMTVkNTliMWZhNTEyNTA4YzAyMmYzODJkZTgzMTk0OTdjIiwi''@;'; put 'put ''Y2NjOWRjMzdhYmZjOWMxNjU3YjQxNTVmMmM0N2Y5ZTY2NDZiM2ExZDhjYjk4NTQzODNkYTEzYWMwNzlhZmE3MyJdLFsiOTU5Mzk2OTgxOTQzNzg1YzNkM2U1N2VkZjUwMThjZGJlMDM5ZTczMGU0OTE4YjNkODg0ZmRmZjA5NDc1YjdiYSIsIjJlN2U1NTI4ODhjMzMxZGQ4YmEwMzg2YTRiOWNk''@;'; put 'put ''Njg0OWM2NTNmNjRjODcwOTM4NWU5YjhhYmY4NzUyNGYyZmQiXSxbImQyYTYzYTUwYWU0MDFlNTZkNjQ1YTExNTNiMTA5YThmY2NhMGE0M2Q1NjFmYmEyZGJiNTEzNDBjOWQ4MmIxNTEiLCJlODJkODZmYjY0NDNmY2I3NTY1YWVlNThiMjk0ODIyMGE3MGY3NTBhZjQ4NGNhNTJkNDE0MjE3NGRj''@;'; put 'put ''Zjg5NDA1Il0sWyI2NDU4N2UyMzM1NDcxZWI4OTBlZTc4OTZkN2NmZGM4NjZiYWNiZGJkMzgzOTMxN2IzNDM2ZjliNDU2MTdlMDczIiwiZDk5ZmNkZDViZjY5MDJlMmFlOTZkZDY0NDdjMjk5YTE4NWI5MGEzOTEzM2FlYWIzNTgyOTllNWU5ZmFmNjU4OSJdLFsiODQ4MWJkZTBlNGU0ZDg4NWIz''@;'; put 'put ''YTU0NmQzZTU0OWRlMDQyZjBhYTZjZWEyNTBlN2ZkMzU4ZDZjODZkZDQ1ZTQ1OCIsIjM4ZWU3YjhjYmE1NDA0ZGQ4NGEyNWJmMzljZWNiMmNhOTAwYTc5YzQyYjI2MmU1NTZkNjRiMWI1OTc3OTA1N2UiXSxbIjEzNDY0YTU3YTc4MTAyYWE2MmI2OTc5YWU4MTdmNDYzN2ZmY2ZlZDNjNGIxY2Uz''@;'; put 'put ''MGJjZDYzMDNmNmNhZjY2NmIiLCI2OWJlMTU5MDA0NjE0NTgwZWY3ZTQzMzQ1M2NjYjBjYTQ4ZjMwMGE4MWQwOTQyZTEzZjQ5NWE5MDdmNmVjYzI3Il0sWyJiYzRhOWRmNWI3MTNmZTJlOWFlZjQzMGJjYzFkYzk3YTBjZDljY2VkZTJmMjg1ODhjYWRhM2EwZDJkODNmMzY2IiwiZDNhODFjYTZl''@;'; put 'put ''Nzg1YzA2MzgzOTM3YWRmNGI3OThjYWE2ZThhOWZiZmE1NDdiMTZkNzU4ZDY2NjU4MWYzM2MxIl0sWyI4YzI4YTk3YmY4Mjk4YmMwZDIzZDhjNzQ5NDUyYTMyZTY5NGI2NWUzMGE5NDcyYTM5NTRhYjMwZmU1MzI0Y2FhIiwiNDBhMzA0NjNhMzMwNTE5MzM3OGZlZGYzMWY3Y2MwZWI3YWU3ODRm''@;'; put 'put ''MDQ1MWNiOTQ1OWU3MWRjNzNjYmVmOTQ4MiJdLFsiOGVhOTY2NjEzOTUyN2E4YzFkZDk0Y2U0ZjA3MWZkMjNjOGIzNTBjNWE0YmIzMzc0OGM0YmExMTFmYWNjYWUwIiwiNjIwZWZhYmJjOGVlMjc4MmUyNGU3YzBjZmI5NWM1ZDczNWI3ODNiZTljZjBmOGU5NTVhZjM0YTMwZTYyYjk0NSJdLFsi''@;'; put 'put ''ZGQzNjI1ZmFlZjViYTA2MDc0NjY5NzE2YmJkMzc4OGQ4OWJkZGU4MTU5NTk5NjgwOTJmNzZjYzRlYjlhOTc4NyIsIjdhMTg4ZmEzNTIwZTMwZDQ2MWRhMjUwMTA0NTczMWNhOTQxNDYxOTgyODgzMzk1OTM3ZjY4ZDAwYzY0NGE1NzMiXSxbImY3MTBkNzlkOWViOTYyMjk3ZTRmNjIzMmI0MGU4''@;'; put 'put ''ZjdmZWIyYmM2MzgxNDYxNGQ2OTJjMTJkZTc1MjQwODIyMWUiLCJlYTk4ZTY3MjMyZDNiMzI5NWQzYjUzNTUzMjExNWNjYWM4NjEyYzcyMTg1MTYxNzUyNmFlNDdhOWM3N2JmYzgyIl1dfSxuYWY6e3duZDo3LHBvaW50czpbWyJmOTMwOGEwMTkyNThjMzEwNDkzNDRmODVmODlkNTIyOWI1MzFj''@;'; put 'put ''ODQ1ODM2Zjk5YjA4NjAxZjExM2JjZTAzNmY5IiwiMzg4ZjdiMGY2MzJkZTgxNDBmZTMzN2U2MmEzN2YzNTY2NTAwYTk5OTM0YzIyMzFiNmNiOWZkNzU4NGI4ZTY3MiJdLFsiMmY4YmRlNGQxYTA3MjA5MzU1YjRhNzI1MGE1YzUxMjhlODhiODRiZGRjNjE5YWI3Y2JhOGQ1NjliMjQwZWZlNCIs''@;'; put 'put ''ImQ4YWMyMjI2MzZlNWUzZDZkNGRiYTlkZGE2YzljNDI2Zjc4ODI3MWJhYjBkNjg0MGRjYTg3ZDNhYTZhYzYyZDYiXSxbIjVjYmRmMDY0NmU1ZGI0ZWFhMzk4ZjM2NWYyZWE3YTBlM2Q0MTliN2UwMzMwZTM5Y2U5MmJkZGVkY2FjNGY5YmMiLCI2YWViY2E0MGJhMjU1OTYwYTMxNzhkNmQ4NjFh''@;'; put 'put ''NTRkYmE4MTNkMGI4MTNmZGU3YjVhNTA4MjYyODA4NzI2NGRhIl0sWyJhY2Q0ODRlMmYwYzdmNjUzMDlhZDE3OGE5ZjU1OWFiZGUwOTc5Njk3NGM1N2U3MTRjMzVmMTEwZGZjMjdjY2JlIiwiY2MzMzg5MjFiMGE3ZDlmZDY0MzgwOTcxNzYzYjYxZTlhZGQ4ODhhNDM3NWY4ZTBmMDVjYzI2MmFj''@;'; put 'put ''NjRmOWMzNyJdLFsiNzc0YWU3Zjg1OGE5NDExZTVlZjQyNDZiNzBjNjVhYWM1NjQ5OTgwYmU1YzE3ODkxYmJlYzE3ODk1ZGEwMDhjYiIsImQ5ODRhMDMyZWI2YjVlMTkwMjQzZGQ1NmQ3YjdiMzY1MzcyZGIxZTJkZmY5ZDZhODMwMWQ3NGM5Yzk1M2M2MWIiXSxbImYyODc3M2MyZDk3NTI4OGJj''@;'; put 'put ''N2QxZDIwNWMzNzQ4NjUxYjA3NWZiYzY2MTBlNThjZGRlZWRkZjhmMTk0MDVhYTgiLCJhYjA5MDJlOGQ4ODBhODk3NTgyMTJlYjY1Y2RhZjQ3M2ExYTA2ZGE1MjFmYTkxZjI5YjVjYjUyZGIwM2VkODEiXSxbImQ3OTI0ZDRmN2Q0M2VhOTY1YTQ2NWFlMzA5NWZmNDExMzFlNTk0NmYzYzg1Zjc5''@;'; put 'put ''ZTQ0YWRiY2Y4ZTI3ZTA4MGUiLCI1ODFlMjg3MmE4NmM3MmE2ODM4NDJlYzIyOGNjNmRlZmVhNDBhZjJiZDg5NmQzYTVjNTA0ZGM5ZmY2YTI2YjU4Il0sWyJkZWZkZWE0Y2RiNjc3NzUwYTQyMGZlZTgwN2VhY2YyMWViOTg5OGFlNzliOTc2ODc2NmU0ZmFhMDRhMmQ0YTM0IiwiNDIxMWFiMDY5''@;'; put 'put ''NDYzNTE2OGU5OTdiMGVhZDJhOTNkYWVjZWQxZjRhMDRhOTVjMGY2Y2ZiMTk5ZjY5ZTU2ZWI3NyJdLFsiMmI0ZWEwYTc5N2E0NDNkMjkzZWY1Y2ZmNDQ0ZjQ5NzlmMDZhY2ZlYmQ3ZTg2ZDI3NzQ3NTY1NjEzODM4NWI2YyIsIjg1ZTg5YmMwMzc5NDVkOTNiMzQzMDgzYjVhMWM4NjEzMWEwMWY2''@;'; put 'put ''MGM1MDI2OTc2M2I1NzBjODU0ZTVjMDliN2EiXSxbIjM1MmJiZjRhNGNkZDEyNTY0ZjkzZmEzMzJjZTMzMzMwMWQ5YWQ0MDI3MWY4MTA3MTgxMzQwYWVmMjViZTU5ZDUiLCIzMjFlYjQwNzUzNDhmNTM0ZDU5YzE4MjU5ZGRhM2UxZjRhMWIzYjJlNzFiMTAzOWM2N2JkM2Q4YmNmODE5OThjIl0s''@;'; put 'put ''WyIyZmEyMTA0ZDZiMzhkMTFiMDIzMDAxMDU1OTg3OTEyNGU0MmFiOGRmZWZmNWZmMjlkYzljZGFkZDRlY2FjYzNmIiwiMmRlMTA2ODI5NWRkODY1YjY0NTY5MzM1YmQ1ZGQ4MDE4MWQ3MGVjZmM4ODI2NDg0MjNiYTc2YjUzMmI3ZDY3Il0sWyI5MjQ4Mjc5YjA5YjRkNjhkYWIyMWE5YjA2NmVk''@;'; put 'put ''ZGE4MzI2M2MzZDg0ZTA5NTcyZTI2OWNhMGNkN2Y1NDUzNzE0IiwiNzMwMTZmN2JmMjM0YWFkZTVkMWFhNzFiZGVhMmIxZmYzZmMwZGUyYTg4NzkxMmZmZTU0YTMyY2U5N2NiMzQwMiJdLFsiZGFlZDRmMmJlM2E4YmYyNzhlNzAxMzJmYjBiZWI3NTIyZjU3MGUxNDRiZjYxNWMwN2U5OTZkNDQz''@;'; put 'put ''ZGVlODcyOSIsImE2OWRjZTRhN2Q2Yzk4ZThkNGExYWNhODdlZjhkNzAwM2Y4M2MyMzBmM2FmYTcyNmFiNDBlNTIyOTBiZTFjNTUiXSxbImM0NGQxMmM3MDY1ZDgxMmU4YWNmMjhkN2NiYjE5ZjkwMTFlY2Q5ZTlmZGYyODFiMGU2YTNiNWU4N2QyMmU3ZGIiLCIyMTE5YTQ2MGNlMzI2Y2RjNzZj''@;'; put 'put ''NDU5MjZjOTgyZmRhYzBlMTA2ZTg2MWVkZjYxYzVhMDM5MDYzZjBlMGU2NDgyIl0sWyI2YTI0NWJmNmRjNjk4NTA0Yzg5YTIwY2ZkZWQ2MDg1MzE1MmI2OTUzMzZjMjgwNjNiNjFjNjVjYmQyNjllNmI0IiwiZTAyMmNmNDJjMmJkNGE3MDhiM2Y1MTI2ZjE2YTI0YWQ4YjMzYmE0OGQwNDIzYjZl''@;'; put 'put ''ZmQ1ZTYzNDgxMDBkOGE4MiJdLFsiMTY5N2ZmYTZmZDlkZTYyN2MwNzdlM2QyZmU1NDEwODRjZTEzMzAwYjBiZWMxMTQ2Zjk1YWU1N2YwZDBiZDZhNSIsImI5YzM5OGYxODY4MDZmNWQyNzU2MTUwNmU0NTU3NDMzYTJjZjE1MDA5ZTQ5OGFlN2FkZWU5ZDYzZDAxYjIzOTYiXSxbIjYwNWJkYjAx''@;'; put 'put ''OTk4MTcxOGI5ODZkMGYwN2U4MzRjYjBkOWRlYjgzNjBmZmI3ZjYxZGY5ODIzNDVlZjI3YTc0NzkiLCIyOTcyZDJkZTRmOGQyMDY4MWE3OGQ5M2VjOTZmZTIzYzI2YmZhZTg0ZmIxNGRiNDNiMDFlMWU5MDU2YjhjNDkiXSxbIjYyZDE0ZGFiNDE1MGJmNDk3NDAyZmRjNDVhMjE1ZTEwZGNiMDFj''@;'; put 'put ''MzU0OTU5YjEwY2ZlMzFjN2U5ZDg3ZmYzM2QiLCI4MGZjMDZiZDhjYzViMDEwOTgwODhhMTk1MGVlZDBkYjAxYWExMzI5NjdhYjQ3MjIzNWY1NjQyNDgzYjI1ZWFmIl0sWyI4MGM2MGFkMDA0MGYyN2RhZGU1YjRiMDZjNDA4ZTU2YjJjNTBlOWY1NmI5YjhiNDI1ZTU1NWMyZjg2MzA4YjZmIiwi''@;'; put 'put ''MWMzODMwM2YxY2M1YzMwZjI2ZTY2YmFkN2ZlNzJmNzBhNjVlZWQ0Y2JlNzAyNGViMWFhMDFmNTY0MzBiZDU3YSJdLFsiN2E5Mzc1YWQ2MTY3YWQ1NGFhNzRjNjM0OGNjNTRkMzQ0Y2M1ZGM5NDg3ZDg0NzA0OWQ1ZWFiYjBmYTAzYzhmYiIsImQwZTNmYTllY2E4NzI2OTA5NTU5ZTBkNzkyNjkw''@;'; put 'put ''NDZiZGM1OWVhMTBjNzBjZTJiMDJkNDk5ZWMyMjRkYzdmNyJdLFsiZDUyOGVjZDliNjk2YjU0YzkwN2E5ZWQwNDU0NDdhNzliYjQwOGVjMzliNjhkZjUwNGJiNTFmNDU5YmMzZmZjOSIsImVlY2Y0MTI1MzEzNmU1Zjk5OTY2ZjIxODgxZmQ2NTZlYmM0MzQ1NDA1YzUyMGRiYzA2MzQ2NWI1MjE0''@;'; put 'put ''MDk5MzMiXSxbIjQ5MzcwYTRiNWY0MzQxMmVhMjVmNTE0ZThlY2RhZDA1MjY2MTE1ZTRhN2VjYjEzODcyMzE4MDhmOGI0NTk2MyIsIjc1OGYzZjQxYWZkNmVkNDI4YjMwODFiMDUxMmZkNjJhNTRjM2YzYWZiYjViNjc2NGI2NTMwNTJhMTI5NDljOWEiXSxbIjc3ZjIzMDkzNmVlODhjYmJkNzNk''@;'; put 'put ''ZjkzMGQ2NDcwMmVmODgxZDgxMWUwZTE0OThlMmYxYzEzZWIxZmMzNDVkNzQiLCI5NThlZjQyYTc4ODZiNjQwMGEwODI2NmU5YmExYjM3ODk2Yzk1MzMwZDk3MDc3Y2JiZThlYjNjNzY3MWM2MGQ2Il0sWyJmMmRhYzk5MWNjNGNlNGI5ZWE0NDg4N2U1YzdjMGJjZTU4YzgwMDc0YWI5ZDRkYmFl''@;'; put 'put ''YjI4NTMxYjc3MzlmNTMwIiwiZTBkZWRjOWIzYjJmOGRhZDRkYTFmMzJkZWMyNTMxZGY5ZWI1ZmJlYjA1OThlNGZkMWExMTdkYmE3MDNhM2MzNyJdLFsiNDYzYjNkOWY2NjI2MjFmYjFiNGJlOGZiYmUyNTIwMTI1YTIxNmNkZmM5ZGFlM2RlYmNiYTQ4NTBjNjkwZDQ1YiIsIjVlZDQzMGQ3OGMy''@;'; put 'put ''OTZjMzU0MzExNDMwNmRkODYyMmQ3YzYyMmUyN2M5NzBhMWRlMzFjYjM3N2IwMWFmNzMwN2UiXSxbImYxNmY4MDQyNDRlNDZlMmEwOTIzMmQ0YWZmM2I1OTk3NmI5OGZhYzE0MzI4YTJkMWEzMjQ5NmI0OTk5OGYyNDciLCJjZWRhYmQ5YjgyMjAzZjdlMTNkMjA2ZmNkZjRlMzNkOTJhNmM1M2My''@;'; put 'put ''NmU1Y2NlMjZkNjU3OTk2MmM0ZTMxZGY2Il0sWyJjYWY3NTQyNzJkYzg0NTYzYjAzNTJiN2ExNDMxMWFmNTVkMjQ1MzE1YWNlMjdjNjUzNjllMTVmNzE1MWQ0MWQxIiwiY2I0NzQ2NjBlZjM1ZjVmMmE0MWI2NDNmYTVlNDYwNTc1ZjRmYTliNzk2MjIzMmE1YzMyZjkwODMxOGEwNDQ3NiJdLFsi''@;'; put 'put ''MjYwMGNhNGIyODJjYjk4NmY4NWQwZjE3MDk5NzlkOGI0NGEwOWMwN2NiODZkN2MxMjQ0OTdiYzg2ZjA4MjEyMCIsIjQxMTliODg3NTNjMTViZDZhNjkzYjAzZmNkZGJiNDVkNWFjNmJlNzRhYjVmMGVmNDRiMGJlOTQ3NWE3ZTRiNDAiXSxbIjc2MzVjYTcyZDdlODQzMmMzMzhlYzUzY2QxMjIy''@;'; put 'put ''MGJjMDFjNDg2ODVlMjRmN2RjOGM2MDJhNzc0Njk5OGU0MzUiLCI5MWI2NDk2MDk0ODlkNjEzZDFkNWU1OTBmNzhlNmQ3NGVjZmMwNjFkNTcwNDhiYWQ5ZTc2ZjMwMmM1YjljNjEiXSxbIjc1NGUzMjM5ZjMyNTU3MGNkYmJmNGE4N2RlZWU4YTY2YjdmMmIzMzQ3OWQ0NjhmYmMxYTUwNzQzYmY1''@;'; put 'put ''NmNjMTgiLCI2NzNmYjg2ZTViZGEzMGZiM2NkMGVkMzA0ZWE0OWEwMjNlZTMzZDAxOTdhNjk1ZDBjNWQ5ODA5M2M1MzY2ODMiXSxbImUzZTZiZDEwNzFhMWU5NmFmZjU3ODU5YzgyZDU3MGYwMzMwODAwNjYxZDFjOTUyZjlmZTI2OTQ2OTFkOWI5ZTgiLCI1OWM5ZTBiYmEzOTRlNzZmNDBjMGFh''@;'; put 'put ''NTgzNzlhM2NiNmE1YTIyODM5OTNlOTBjNDE2NzAwMmFmNDkyMGUzN2Y1Il0sWyIxODZiNDgzZDA1NmEwMzM4MjZhZTczZDg4ZjczMjk4NWM0Y2NiMWYzMmJhMzVmNGI0Y2M0N2ZkY2YwNGFhNmViIiwiM2I5NTJkMzJjNjdjZjc3ZTJlMTc0NDZlMjA0MTgwYWIyMWZiODA5MDg5NTEzOGI0YTRh''@;'; put 'put ''Nzk3Zjg2ZTgwODg4YiJdLFsiZGY5ZDcwYTZiOTg3NmNlNTQ0Yzk4NTYxZjRiZTRmNzI1NDQyZTZkMmI3MzdkOWM5MWE4MzIxNzI0Y2UwOTYzZiIsIjU1ZWIyZGFmZDg0ZDZjY2Q1Zjg2MmI3ODVkYzM5ZDRhYjE1NzIyMjcyMGVmOWRhMjE3YjhjNDVjZjJiYTI0MTciXSxbIjVlZGQ1Y2MyM2M1''@;'; put 'put ''MWU4N2E0OTdjYTgxNWQ1ZGNlMGY4YWI1MjU1NGY4NDllZDg5OTVkZTY0YzVmMzRjZTcxNDMiLCJlZmFlOWM4ZGJjMTQxMzA2NjFlOGNlYzAzMGM4OWFkMGMxM2M2NmMwZDE3YTI5MDVjZGM3MDZhYjczOTlhODY4Il0sWyIyOTA3OThjMmI2NDc2ODMwZGExMmZlMDIyODdlOWU3NzdhYTNmYmEx''@;'; put 'put ''YzM1NWIxN2E3MjJkMzYyZjg0NjE0ZmJhIiwiZTM4ZGE3NmRjZDQ0MDYyMTk4OGQwMGJjZjc5YWYyNWQ1YjI5YzA5NGRiMmEyMzE0NmQwMDNhZmQ0MTk0M2U3YSJdLFsiYWYzYzQyM2E5NWQ5ZjViMzA1NDc1NGVmYTE1MGFjMzljZDI5NTUyZmUzNjAyNTczNjJkZmRlY2VmNDA1M2I0NSIsImY5''@;'; put 'put ''OGEzZmQ4MzFlYjJiNzQ5YTkzYjBlNmYzNWNmYjQwYzhjZDVhYTY2N2ExNTU4MWJjMmZlZGVkNDk4ZmQ5YzYiXSxbIjc2NmRiYjI0ZDEzNGU3NDVjY2NhYTI4Yzk5YmYyNzQ5MDZiYjY2YjI2ZGNmOThkZjhkMmZlZDUwZDg4NDI0OWEiLCI3NDRiMTE1MmVhY2JlNWUzOGRjYzg4Nzk4MGRhMzhi''@;'; put 'put ''ODk3NTg0YTY1ZmEwNmNlZGQyYzkyNGY5N2NiYWM1OTk2Il0sWyI1OWRiZjQ2ZjhjOTQ3NTliYTIxMjc3YzMzNzg0ZjQxNjQ1ZjdiNDRmNmM1OTZhNThjZTkyZTY2NjE5MWFiZTNlIiwiYzUzNGFkNDQxNzVmYmMzMDBmNGVhNmNlNjQ4MzA5YTA0MmNlNzM5YTc5MTk3OThjZDg1ZTIxNmM0YTMw''@;'; put 'put ''N2Y2ZSJdLFsiZjEzYWRhOTUxMDNjNDUzNzMwNWU2OTFlNzRlOWE0YThkZDY0N2U3MTFhOTVlNzNjYjYyZGM2MDE4Y2ZkODdiOCIsImUxMzgxN2I0NGVlMTRkZTY2M2JmNGJjODA4MzQxZjMyNjk0OWUyMWE2YTc1YzI1NzA3Nzg0MTliZGFmNTczM2QiXSxbIjc3NTRiNGZhMGU4YWNlZDA2ZDQx''@;'; put 'put ''NjdhMmM1OWNjYTRjZGExODY5YzA2ZWJhZGZiNjQ4ODU1MDAxNWE4ODUyMmMiLCIzMGU5M2U4NjRlNjY5ZDgyMjI0Yjk2N2MzMDIwYjhmYThkMWU0ZTM1MGI2Y2JjYzUzN2E0OGI1Nzg0MTE2M2EyIl0sWyI5NDhkY2FkZjU5OTBlMDQ4YWEzODc0ZDQ2YWJlZjlkNzAxODU4Zjk1ZGU4MDQxZDJh''@;'; put 'put ''NjgyOGM5OWUyMjYyNTE5IiwiZTQ5MWE0MjUzN2Y2ZTU5N2Q1ZDI4YTMyMjRiMWJjMjVkZjkxNTRlZmJkMmVmMWQyY2JiYTJjYWU1MzQ3ZDU3ZSJdLFsiNzk2MjQxNDQ1MGM3NmMxNjg5YzdiNDhmODIwMmVjMzdmYjIyNGNmNWFjMGJmYTE1NzAzMjhhOGEzZDdjNzdhYiIsIjEwMGI2MTBlYzRm''@;'; put 'put ''ZmI0NzYwZDVjMWZjMTMzZWY2ZjZiMTI1MDdhMDUxZjA0YWM1NzYwYWZhNWIyOWRiODM0MzciXSxbIjM1MTQwODc4MzQ5NjRiNTRiMTViMTYwNjQ0ZDkxNTQ4NWExNjk3NzIyNWI4ODQ3YmIwZGQwODUxMzdlYzQ3Y2EiLCJlZjBhZmJiMjA1NjIwNTQ0OGUxNjUyYzQ4ZTgxMjdmYzYwMzllNzdj''@;'; put 'put ''MTVjMjM3OGI3ZTdkMTVhMGRlMjkzMzExIl0sWyJkM2NjMzBhZDZiNDgzZTRiYzc5Y2UyYzlkZDhiYzU0OTkzZTk0N2ViOGRmNzg3YjQ0Mjk0M2QzZjdiNTI3ZWFmIiwiOGIzNzhhMjJkODI3Mjc4ZDg5YzVlOWJlOGY5NTA4YWUzYzJhZDQ2MjkwMzU4NjMwYWZiMzRkYjA0ZWVkZTBhNCJdLFsi''@;'; put 'put ''MTYyNGQ4NDc4MDczMjg2MGNlMWM3OGZjYmZlZmUwOGIyYjI5ODIzZGI5MTNmNjQ5Mzk3NWJhMGZmNDg0NzYxMCIsIjY4NjUxY2Y5YjZkYTkwM2UwOTE0NDQ4YzZjZDlkNGNhODk2ODc4ZjUyODJiZTRjOGNjMDZlMmE0MDQwNzg1NzUiXSxbIjczM2NlODBkYTk1NWE4YTI2OTAyYzk1NjMzZTYy''@;'; put 'put ''YTk4NTE5MjQ3NGI1YWYyMDdkYTZkZjdiNGZkNWZjNjFjZDQiLCJmNTQzNWEyYmQyYmFkZjdkNDg1YTRkOGI4ZGI5ZmNjZTNlMWVmOGUwMjAxZTQ1NzhjNTQ2NzNiYzFkYzVlYTFkIl0sWyIxNWQ5NDQxMjU0OTQ1MDY0Y2YxYTFjMzNiYmQzYjQ5Zjg5NjZjNTA5MjE3MWU2OTllZjI1OGRmYWI4''@;'; put 'put ''MWMwNDVjIiwiZDU2ZWIzMGI2OTQ2M2U3MjM0ZjUxMzdiNzNiODQxNzc0MzQ4MDBiYWNlYmZjNjg1ZmMzN2JiZTllZmU0MDcwZCJdLFsiYTFkMGZjZjJlYzlkZTY3NWI2MTIxMzZlNWNlNzBkMjcxYzIxNDE3YzlkMmI4YWFhYWMxMzg1OTlkMDcxNzk0MCIsImVkZDc3ZjUwYmNiNWEzY2FiMmU5''@;'; put 'put ''MDczNzMwOTY2N2YyNjQxNDYyYTU0MDcwZjNkNTE5MjEyZDM5YzE5N2E2MjkiXSxbImUyMmZiZTE1YzBhZjhjY2M1NzgwYzA3MzVmODRkYmU5YTc5MGJhZGVlODI0NWMwNmM3Y2EzNzMzMWNiMzY5ODAiLCJhODU1YmFiYWQ1Y2Q2MGM4OGI0MzBhNjlmNTNhMWE3YTM4Mjg5MTU0OTY0Nzk5YmU0''@;'; put 'put ''M2QwNmQ3N2QzMWRhMDYiXSxbIjMxMTA5MWRkOTg2MGU4ZTIwZWUxMzQ3M2MxMTU1ZjVmNjk2MzVlMzk0NzA0ZWFhNzQwMDk0NTIyNDZjZmE5YjMiLCI2NmRiNjU2Zjg3ZDFmMDRmZmZkMWYwNDc4OGMwNjgzMDg3MWVjNWE2NGZlZWU2ODViZDgwZjBiMTI4NmQ4Mzc0Il0sWyIzNGMxZmQwNGQz''@;'; put 'put ''MDFiZTg5YjMxYzA0NDJkM2U2YWMyNDg4MzkyOGI0NWE5MzQwNzgxODY3ZDQyMzJlYzJkYmRmIiwiOTQxNDY4NWU5N2IxYjU5NTRiZDQ2ZjczMDE3NDEzNmQ1N2YxY2VlYjQ4NzQ0M2RjNTMyMTg1N2JhNzNhYmVlIl0sWyJmMjE5ZWE1ZDZiNTQ3MDFjMWMxNGRlNWI1NTdlYjQyYThkMTNmM2Fi''@;'; put 'put ''YmNkMDhhZmZjYzJhNWU2YjA0OWI4ZDYzIiwiNGNiOTU5NTdlODNkNDBiMGY3M2FmNDU0NGNjY2Y2YjFmNGIwOGQzYzA3YjI3ZmI4ZDhjMjk2MmE0MDA3NjZkMSJdLFsiZDdiODc0MGY3NGE4ZmJhYWIxZjY4M2RiOGY0NWRlMjY1NDNhNTQ5MGJjYTYyNzA4NzIzNjkxMjQ2OWEwYjQ0OCIsImZh''@;'; put 'put ''Nzc5NjgxMjhkOWM5MmVlMTAxMGYzMzdhZDQ3MTdlZmYxNWRiNWVkM2MwNDliMzQxMWUwMzE1ZWFhNDU5M2IiXSxbIjMyZDMxYzIyMmY4ZjZmMGVmODZmN2M5OGQzYTMzMzVlYWQ1YmNkMzJhYmRkOTQyODlmZTRkMzA5MWFhODI0YmYiLCI1ZjMwMzJmNTg5MjE1NmUzOWNjZDNkNzkxNWI5ZTFk''@;'; put 'put ''YTJlNmRhYzllNmYyNmU5NjExMThkMTRiODQ2MmUxNjYxIl0sWyI3NDYxZjM3MTkxNGFiMzI2NzEwNDVhMTU1ZDk4MzFlYTg3OTNkNzdjZDU5NTkyYzQzNDBmODZjYmMxODM0N2I1IiwiOGVjMGJhMjM4Yjk2YmVjMGNiZGRkY2FlMGFhNDQyNTQyZWVlMWZmNTBjOTg2ZWE2YjM5ODQ3YjNjYzA5''@;'; put 'put ''MmZmNiJdLFsiZWUwNzlhZGIxZGYxODYwMDc0MzU2YTI1YWEzODIwNmE2ZDcxNmIyYzNlNjc0NTNkMjg3Njk4YmFkN2IyYjJkNiIsIjhkYzI0MTJhYWZlM2JlNWM0YzVmMzdlMGVjYzVmOWY2YTQ0Njk4OWFmMDRjNGUyNWViYWFjNDc5ZWMxYzhjMWUiXSxbIjE2ZWM5M2U0NDdlYzgzZjA0Njdi''@;'; put 'put ''MTgzMDJlZTYyMGY3ZTY1ZGUzMzE4NzRjOWRjNzJiZmQ4NjE2YmE5ZGE2YjUiLCI1ZTQ2MzExNTBlNjJmYjQwZDBlOGMyYTdjYTU4MDRhMzlkNTgxODZhNTBlNDk3MTM5NjI2Nzc4ZTI1YjA2NzRkIl0sWyJlYWE1Zjk4MGMyNDVmNmYwMzg5NzgyOTBhZmE3MGI2YmQ4ODU1ODk3Zjk4YjZhYTQ4''@;'; put 'put ''NWI5NjA2NWQ1MzdiZDk5IiwiZjY1ZjVkM2UyOTJjMmUwODE5YTUyODM5MWM5OTQ2MjRkNzg0ODY5ZDdlNmVhNjdmYjE4MDQxMDI0ZWRjMDdkYyJdLFsiNzhjOTQwNzU0NGFjMTMyNjkyZWUxOTEwYTAyNDM5OTU4YWUwNDg3NzE1MTM0MmVhOTZjNGI2YjM1YTQ5ZjUxIiwiZjNlMDMxOTE2OWVi''@;'; put 'put ''OWI4NWQ1NDA0Nzk1NTM5YTVlNjhmYTFmYmQ1ODNjMDY0ZDI0NjJiNjc1ZjE5NGEzZGRiNCJdLFsiNDk0ZjRiZTIxOWExYTc3MDE2ZGNkODM4NDMxYWVhMDAwMWNkYzhhZTdhNmZjNjg4NzI2NTc4ZDk3MDI4NTdhNSIsIjQyMjQyYTk2OTI4M2E1ZjMzOWJhN2YwNzVlMzZiYTJhZjkyNWNlMzBk''@;'; put 'put ''NzY3ZWQ2ZTU1ZjRiMDMxODgwZDU2MmMiXSxbImE1OThhODAzMGRhNmQ4NmM2YmM3ZjJmNTE0NGVhNTQ5ZDI4MjExZWE1OGZhYTcwZWJmNGMxZTY2NWMxZmU5YjUiLCIyMDRiNWQ2Zjg0ODIyYzMwN2U0YjRhNzE0MDczN2FlYzIzZmM2M2I2NWIzNWY4NmExMDAyNmRiZDJkODY0ZTZiIl0sWyJj''@;'; put 'put ''NDE5MTYzNjVhYmIyYjVkMDkxOTJmNWYyZGJlYWZlYzIwOGYwMjBmMTI1NzBhMTg0ZGJhZGMzZTU4NTk1OTk3IiwiNGYxNDM1MWQwMDg3ZWZhNDlkMjQ1YjMyODk4NDk4OWQ1Y2FmOTQ1MGYzNGJmYzBlZDE2ZTk2YjU4ZmE5OTEzIl0sWyI4NDFkNjA2M2E1ODZmYTQ3NWE3MjQ2MDRkYTAzYmM1''@;'; put 'put ''YjkyYTJlMGQyZTBhMzZhY2ZlNGM3M2E1NTE0NzQyODgxIiwiNzM4NjdmNTljMDY1OWU4MTkwNGY5YTFjNzU0MzY5OGU2MjU2MmQ2NzQ0YzE2OWNlN2EzNmRlMDFhOGQ2MTU0Il0sWyI1ZTk1YmIzOTlhNjk3MWQzNzYwMjY5NDdmODliZGUyZjI4MmIzMzgxMDkyOGJlNGRlZDExMmFjNGQ3MGUy''@;'; put 'put ''MGQ1IiwiMzlmMjNmMzY2ODA5MDg1YmVlYmZjNzExODEzMTM3NzVhOTljOWFlZDdkOGJhMzhiMTYxMzg0Yzc0NjAxMjg2NSJdLFsiMzZlNDY0MWE1Mzk0OGZkNDc2YzM5ZjhhOTlmZDk3NGU1ZWMwNzU2NGI1MzE1ZDhiZjk5NDcxYmNhMGVmMmY2NiIsImQyNDI0YjFiMWFiZTRlYjgxNjQyMjdi''@;'; put 'put ''MDg1YzlhYTk0NTZlYTEzNDkzZmQ1NjNlMDZmZDUxY2Y1Njk0Yzc4ZmMiXSxbIjMzNjU4MWVhN2JmYmJiMjkwYzE5MWEyZjUwN2E0MWNmNTY0Mzg0MjE3MGU5MTRmYWVhYjI3YzJjNTc5ZjcyNiIsImVhZDEyMTY4NTk1ZmUxYmU5OTI1MjEyOWI2ZTU2YjMzOTFmN2FiMTQxMGNkMWUwZWYzZGNk''@;'; put 'put ''Y2FiZDJmZGEyMjQiXSxbIjhhYjg5ODE2ZGFkZmQ2YjZhMWYyNjM0ZmNmMDBlYzg0MDM3ODEwMjVlZDY4OTBjNDg0OTc0MjcwNmJkNDNlZGUiLCI2ZmRjZWYwOWYyZjZkMGEwNDRlNjU0YWVmNjI0MTM2ZjUwM2Q0NTljM2U4OTg0NTg1OGE0N2E5MTI5Y2RkMjRlIl0sWyIxZTMzZjFhNzQ2Yzlj''@;'; put 'put ''NTc3ODEzMzM0NGQ5Mjk5ZmNhYTIwYjA5MzhlOGFjZmYyNTQ0YmI0MDI4NGI4YzVmYjk0IiwiNjA2NjAyNTdkZDExYjNhYTljOGVkNjE4ZDI0ZWRmZjIzMDZkMzIwZjFkMDMwMTBlMzNhN2QyMDU3ZjNiM2I2Il0sWyI4NWI3YzFkY2IzY2VjMWI3ZWU3ZjMwZGVkNzlkZDIwYTBlZDFmNGNjMThj''@;'; put 'put ''YmNmY2ZhNDEwMzYxZmQ4ZjA4ZjMxIiwiM2Q5OGE5Y2RkMDI2ZGQ0M2YzOTA0OGYyNWE4ODQ3ZjRmY2FmYWQxODk1ZDdhNjMzYzZmZWQzYzM1ZTk5OTUxMSJdLFsiMjlkZjlmYmQ4ZDllNDY1MDkyNzVmNGIxMjVkNmQ0NWQ3ZmJlOWEzYjg3OGE3YWY4NzJhMjgwMDY2MWFjNWY1MSIsImI0YzRm''@;'; put 'put ''ZTk5Yzc3NWE2MDZlMmQ4ODYyMTc5MTM5ZmZkYTYxZGM4NjFjMDE5ZTU1Y2QyODc2ZWIyYTI3ZDg0YiJdLFsiYTBiMWNhZTA2YjBhODQ3YTNmZWE2ZTY3MWFhZjhhZGZkZmU1OGNhMmY3NjgxMDVjODA4MmIyZTQ0OWZjZTI1MiIsImFlNDM0MTAyZWRkZTA5NThlYzRiMTlkOTE3YTZhMjhlNmI3''@;'; put 'put ''MmRhMTgzNGFmZjBlNjUwZjA0OTUwM2EyOTZjZjIiXSxbIjRlOGNlYWZiOWIzZTlhMTM2ZGM3ZmY2N2U4NDAyOTViNDk5ZGZiM2IyMTMzZTRiYTExM2YyZTRjMGUxMjFlNSIsImNmMjE3NDExOGM4YjZkN2E0YjQ4ZjZkNTM0Y2U1Yzc5NDIyYzA4NmE2MzQ2MDUwMmI4MjdjZTYyYTMyNjY4M2Mi''@;'; put 'put ''XSxbImQyNGE0NGUwNDdlMTliNmY1YWZiODFjN2NhMmY2OTA4MGE1MDc2Njg5YTAxMDkxOWY0MjcyNWMyYjc4OWEzM2IiLCI2ZmI4ZDU1OTFiNDY2ZjhmYzYzZGI1MGYxYzBmMWM2OTAxM2Y5OTY4ODdiODI0NGQyY2RlYzQxN2FmZWE4ZmEzIl0sWyJlYTAxNjA2YTdhNmM5Y2RkMjQ5ZmRmY2Zh''@;'; put 'put ''Y2I5OTU4NDAwMWVkZDI4YWJiYWI3N2I1MTA0ZTk4ZThlM2IzNWQ0IiwiMzIyYWY0OTA4YzczMTJiMGNmYmZlMzY5ZjdhN2IzY2RiN2Q0NDk0YmMyODIzNzAwY2ZkNjUyMTg4YTNlYTk4ZCJdLFsiYWY4YWRkYmYyYjY2MWM4YTZjNjMyODY1NWViOTY2NTEyNTIwMDdkOGM1ZWEzMWJlNGFkMTk2''@;'; put 'put ''ZGU4Y2UyMTMxZiIsIjY3NDllNjdjMDI5Yjg1ZjUyYTAzNGVhZmQwOTY4MzZiMjUyMDgxODY4MGUyNmFjOGYzZGZiY2RiNzE3NDk3MDAiXSxbImUzYWUxOTc0NTY2Y2EwNmNjNTE2ZDQ3ZTBmYjE2NWE2NzRhM2RhYmNmY2ExNWU3MjJmMGUzNDUwZjQ1ODg5IiwiMmFlYWJlN2U0NTMxNTEwMTE2''@;'; put 'put ''MjE3ZjA3YmY0ZDA3MzAwZGU5N2U0ODc0ZjgxZjUzMzQyMGE3MmVlYjBiZDZhNCJdLFsiNTkxZWUzNTUzMTNkOTk3MjFjZjY5OTNmZmVkMWUzZTMwMTk5M2ZmM2VkMjU4ODAyMDc1ZWE4Y2VkMzk3ZTI0NiIsImIwZWE1NThhMTEzYzMwYmVhNjBmYzQ3NzU0NjBjNzkwMWZmMGIwNTNkMjVjYTJi''@;'; put 'put ''ZGVlZTk4ZjFhNGJlNWQxOTYiXSxbIjExMzk2ZDU1ZmRhNTRjNDlmMTlhYTk3MzE4ZDhkYTYxZmE4NTg0ZTQ3YjA4NDk0NTA3N2NmMDMyNTViNTI5ODQiLCI5OThjNzRhOGNkNDVhYzAxMjg5ZDU4MzNhN2JlYjQ3NDRmZjUzNmIwMWIyNTdiZTRjNTc2N2JlYTkzZWE1N2E0Il0sWyIzYzVkMmEx''@;'; put 'put ''YmEzOWM1YTE3OTAwMDA3MzhjOWUwYzQwYjhkY2RmZDU0Njg3NTRiNjQwNTU0MDE1N2UwMTdhYTdhIiwiYjIyODQyNzk5OTVhMzRlMmY5ZDRkZTczOTZmYzE4YjgwZjliOGI5ZmRkMjcwZjY2NjFmNzljYTRjODFiZDI1NyJdLFsiY2M4NzA0YjhhNjBhMGRlZmEzYTk5YTcyOTlmMmU5YzNmYmMz''@;'; put 'put ''OTVhZmIwNGFjMDc4NDI1ZWY4YTE3OTNjYzAzMCIsImJkZDQ2MDM5ZmVlZDE3ODgxZDFlMDg2MmRiMzQ3ZjhjZjM5NWI3NGZjNGJjZGM0ZTk0MGI3NGUzYWMxZjFiMTMiXSxbImM1MzNlNGY3ZWE4NTU1YWFjZDk3NzdhYzVjYWQyOWI5N2RkNGRlZmNjYzUzZWU3ZWEyMDQxMTliMjg4OWIxOTci''@;'; put 'put ''LCI2ZjBhMjU2YmM1ZWZkZjQyOWEyZmI2MjQyZjFhNDNhMmQ5YjkyNWJiNGE0YjNhMjZiYjhlMGY0NWViNTk2MDk2Il0sWyJjMTRmOGYyY2NiMjdkNmYxMDlmNmQwOGQwM2NjOTZhNjliYThjMzRlZWMwN2JiY2Y1NjZkNDhlMzNkYTY1OTMiLCJjMzU5ZDY5MjNiYjM5OGY3ZmQ0NDczZTE2ZmUx''@;'; put 'put ''YzI4NDc1Yjc0MGRkMDk4MDc1ZTZjMGU4NjQ5MTEzZGMzYTM4Il0sWyJhNmNiYzMwNDZiYzZhNDUwYmFjMjQ3ODlmYTE3MTE1YTRjOTczOWVkNzVmOGYyMWNlNDQxZjcyZTBiOTBlNmVmIiwiMjFhZTdmNDY4MGU4ODliYjEzMDYxOWUyYzBmOTVhMzYwY2ViNTczYzcwNjAzMTM5ODYyYWZkNjE3''@;'; put 'put ''ZmE5YjlmIl0sWyIzNDdkNmQ5YTAyYzQ4OTI3ZWJmYjg2YzEzNTliMWNhZjEzMGEzYzAyNjdkMTFjZTYzNDRiMzlmOTlkNDNjYzM4IiwiNjBlYTdmNjFhMzUzNTI0ZDFjOTg3ZjZlY2VjOTJmMDg2ZDU2NWFiNjg3ODcwY2IxMjY4OWZmMWUzMWM3NDQ0OCJdLFsiZGE2NTQ1ZDIxODFkYjhkOTgz''@;'; put 'put ''ZjdkY2IzNzVlZjU4NjZkNDdjNjdiMWJmMzFjOGNmODU1ZWY3NDM3YjcyNjU2YSIsIjQ5Yjk2NzE1YWI2ODc4YTc5ZTc4ZjA3Y2U1NjgwYzVkNjY3MzA1MWI0OTM1YmQ4OTdmZWE4MjRiNzdkYzIwOGEiXSxbImM0MDc0N2NjOWQwMTJjYjFhMTNiODE0ODMwOWM2ZGU3ZWMyNWQ2OTQ1ZDY1NzE0''@;'; put 'put ''NmI5ZDU5OTRiOGZlYjExMTEiLCI1Y2E1NjA3NTNiZTJhMTJmYzZkZTZjYWYyY2I0ODk1NjVkYjkzNjE1NmI5NTE0ZTFiYjVlODMwMzdlMGZhMmQ0Il0sWyI0ZTQyYzhlYzgyYzk5Nzk4Y2NmM2E2MTBiZTg3MGU3ODMzOGM3ZjcxMzM0OGJkMzRjODIwM2VmNDAzN2YzNTAyIiwiNzU3MWQ3NGVl''@;'; put 'put ''NWUwZmI5MmE3YThiMzNhMDc3ODMzNDFhNTQ5MjE0NGNjNTRiY2M0MGE5NDQ3MzY5MzYwNjQzNyJdLFsiMzc3NWFiNzA4OWJjNmFmODIzYWJhMmUxYWY3MGIyMzZkMjUxY2FkYjBjODY3NDMyODc1MjJhMWIzYjBkZWRlYSIsImJlNTJkMTA3YmNmYTA5ZDhiY2I5NzM2YTgyOGNmYTdmYWM4ZGIx''@;'; put 'put ''N2JmN2E3NmEyYzQyYWQ5NjE0MDkwMThjZjciXSxbImNlZTMxY2JmN2UzNGVjMzc5ZDk0ZmI4MTRkM2Q3NzVhZDk1NDU5NWQxMzE0YmE4ODQ2OTU5ZTNlODJmNzRlMjYiLCI4ZmQ2NGExNGMwNmI1ODljMjZiOTQ3YWUyYmNmNmJmYTAxNDllZjBiZTE0ZWQ0ZDgwZjQ0OGEwMWM0M2IxYzZkIl0s''@;'; put 'put ''WyJiNGY5ZWFlYTA5YjY5MTc2MTlmNmVhNmE0ZWI1NDY0ZWZkZGI1OGZkNDViMWViZWZjZGMxYTAxZDA4YjQ3OTg2IiwiMzllNWM5OTI1YjVhNTRiMDc0MzNhNGYxOGM2MTcyNmY4YmIxMzFjMDEyY2E1NDJlYjI0YThhYzA3MjAwNjgyYSJdLFsiZDQyNjNkZmMzZDJkZjkyM2EwMTc5YTQ4OTY2''@;'; put 'put ''ZDMwY2U4NGUyNTE1YWZjM2RjY2MxYjc3OTA3NzkyZWJjYzYwZSIsIjYyZGZhZjA3YTBmNzhmZWIzMGUzMGQ2Mjk1ODUzY2UxODllMTI3NzYwYWQ2Y2Y3ZmFlMTY0ZTEyMmEyMDhkNTQiXSxbIjQ4NDU3NTI0ODIwZmE2NWE0ZjhkMzVlYjY5MzA4NTdjMDAzMmFjYzBhNGEyZGU0MjIyMzNlZWRh''@;'; put 'put ''ODk3NjEyYzQiLCIyNWE3NDhhYjM2Nzk3OWQ5ODczM2MzOGExZmExYzJlN2RjNmNjMDdkYjJkNjBhOWFlN2E3NmFhYTQ5YmQwZjc3Il0sWyJkZmVlZWYxODgxMTAxZjJjYjExNjQ0ZjNhMmFmZGZjMjA0NWUxOTkxOTE1MjkyM2YzNjdhMTc2N2MxMWNjZWRhIiwiZWNmYjcwNTZjZjFkZTA0MmY5''@;'; put 'put ''NDIwYmFiMzk2NzkzYzBjMzkwYmRlNzRiNGJiZGZmMTZhODNhZTA5YTlhNzUxNyJdLFsiNmQ3ZWY2YjE3NTQzZjgzNzNjNTczZjQ0ZTFmMzg5ODM1ZDg5YmNiYzYwNjJjZWQzNmM4MmRmODNiOGZhZTg1OSIsImNkNDUwZWMzMzU0Mzg5ODZkZmVmYTEwYzU3ZmVhOWJjYzUyMWEwOTU5YjJkODBi''@;'; put 'put ''YmY3NGIxOTBkY2E3MTJkMTAiXSxbImU3NTYwNWQ1OTEwMmE1YTI2ODQ1MDBkM2I5OTFmMmUzZjNjODhiOTMyMjU1NDcwMzVhZjI1YWY2NmUwNDU0MWYiLCJmNWM1NDc1NGE4ZjcxZWU1NDBiOWI0ODcyODQ3M2UzMTRmNzI5YWM1MzA4YjA2OTM4MzYwOTkwZTJiZmFkMTI1Il0sWyJlYjk4NjYw''@;'; put 'put ''ZjRjNGRmYWEwNmEyYmU0NTNkNTAyMGJjOTlhMGMyZTYwYWJlMzg4NDU3ZGQ0M2ZlZmIxZWQ2MjBjIiwiNmNiOWE4ODc2ZDljYjg1MjA2MDlhZjNhZGQyNmNkMjBhMGE3Y2Q4YTk0MTExMzFjZTg1ZjQ0MTAwMDk5MjIzZSJdLFsiMTNlODdiMDI3ZDg1MTRkMzU5MzlmMmU2ODkyYjE5OTIyMTU0''@;'; put 'put ''NTk2OTQxODg4MzM2ZGMzNTYzZTNiOGRiYTk0MiIsImZlZjVhM2M2ODA1OWE2ZGVjNWQ2MjQxMTRiZjFlOTFhYWMyYjlkYTU2OGQ2YWJlYjI1NzBkNTU2NDZiOGFkZjEiXSxbImVlMTYzMDI2ZTlmZDZmZTAxN2MzOGYwNmE1YmU2ZmMxMjU0MjRiMzcxY2UyNzA4ZTdiZjQ0OTE2OTFlNTc2NGEi''@;'; put 'put ''LCIxYWNiMjUwZjI1NWRkNjFjNDNkOTRjY2M2NzBkMGY1OGY0OWFlM2ZhMTViOTY2MjNlNTQzMGRhMGFkNmM2MmIyIl0sWyJiMjY4ZjVlZjlhZDUxZTRkNzhkZTNhNzUwYzJkYzg5YjFlNjI2ZDQzNTA1ODY3OTk5OTMyZTVkYjMzYWYzZDgwIiwiNWYzMTBkNGIzYzk5YjllYmIxOWY3N2Q0MWMx''@;'; put 'put ''ZGVlMDE4Y2YwZDM0ZmQ0MTkxNjE0MDAzZTk0NWExMjE2ZTQyMyJdLFsiZmYwN2YzMTE4YTlkZjAzNWU5ZmFkODVlYjZjN2JmZTQyYjAyZjAxY2E5OWNlZWEzYmY3ZmZkYmE5M2M0NzUwZCIsIjQzODEzNmQ2MDNlODU4YTNhNWM0NDBjMzhlY2NiYWRkYzFkMjk0MjExNGUyZWRkZDQ3NDBkMDk4''@;'; put 'put ''Y2VkMWYwZDgiXSxbIjhkOGI5ODU1YzdjMDUyYTM0MTQ2ZmQyMGZmYjY1OGJlYTRiOWY2OWUwZDgyNWViZWMxNmU4YzNjZTJiNTI2YTEiLCJjZGI1NTllZWRjMmQ3OWY5MjZiYWY0NGZiODRlYTRkNDRiY2Y1MGZlZTUxZDdjZWIzMGUyZTdmNDYzMDM2NzU4Il0sWyI1MmRiMGI1Mzg0ZGZiZjA1''@;'; put 'put ''YmZhOWQ0NzJkN2FlMjZkZmU0Yjg1MWNlY2E5MWIxZWJhNTQyNjMxODBkYTMyYjYzIiwiYzNiOTk3ZDA1MGVlNWQ0MjNlYmFmNjZhNmRiOWY1N2IzMTgwYzkwMjg3NTY3OWRlOTI0YjY5ZDg0YTdiMzc1Il0sWyJlNjJmOTQ5MGQzZDUxZGE2Mzk1ZWZkMjRlODA5MTljYzdkMGYyOWMzZjNmYTQ4''@;'; put 'put ''YzZmZmY1NDNiZWNiZDQzMzUyIiwiNmQ4OWFkN2JhNDg3NmIwYjIyYzJjYTI4MGM2ODI4NjJmMzQyYzg1OTFmMWRhZjUxNzBlMDdiZmQ5Y2NhZmE3ZCJdLFsiN2YzMGVhMjQ3NmIzOTliNDk1NzUwOWM4OGY3N2QwMTkxYWZhMmZmNWNiN2IxNGZkNmQ4ZTdkNjVhYWFiMTE5MyIsImNhNWVmN2Q0''@;'; put 'put ''YjIzMWM5NGMzYjE1Mzg5YTVmNjMxMWU5ZGFmZjdiYjY3YjEwM2U5ODgwZWY0YmZmNjM3YWNhZWMiXSxbIjUwOThmZjFlMWQ5ZjE0ZmI0NmEyMTBmYWRhNmM5MDNmZWYwZmI3YjRhMWRkMWQ5YWM2MGEwMzYxODAwYjdhMDAiLCI5NzMxMTQxZDgxZmM4ZjgwODRkMzdjNmU3NTQyMDA2YjNlZTFi''@;'; put 'put ''NDBkNjBkZmU1MzYyYTViMTMyZmQxN2RkYzAiXSxbIjMyYjc4YzdkZTllZTUxMmE3Mjg5NWJlNmI5Y2JlZmE2ZTJmM2M0Y2NjZTQ0NWM5NmI5ZjJjODFlMjc3OGFkNTgiLCJlZTE4NDlmNTEzZGY3MWUzMmVmYzM4OTZlZTI4MjYwYzczYmI4MDU0N2FlMjI3NWJhNDk3MjM3Nzk0Yzg3NTNjIl0s''@;'; put 'put ''WyJlMmNiNzRmZGRjOGU5ZmJjZDA3NmVlZjJhN2M3MmIwY2UzN2Q1MGYwODI2OWRmYzA3NGI1ODE1NTA1NDdhNGY3IiwiZDNhYTJlZDcxYzlkZDIyNDdhNjJkZjA2MjczNmViMGJhZGRlYTllMzYxMjJkMmJlODY0MWFiY2IwMDVjYzRhNCJdLFsiODQzODQ0NzU2NmQ0ZDdiZWRhZGMyOTk0OTZh''@;'; put 'put ''YjM1NzQyNjAwOWEzNWYyMzVjYjE0MWJlMGQ5OWNkMTBhZTNhOCIsImM0ZTEwMjA5MTY5ODBhNGRhNWQwMWFjNWU2YWQzMzA3MzRlZjBkNzkwNjYzMWM0ZjIzOTA0MjZiMmVkZDc5MWYiXSxbIjQxNjJkNDg4Yjg5NDAyMDM5YjU4NGM2ZmM2YzMwODg3MDU4N2Q5YzQ2ZjY2MGI4NzhhYjY1Yzgy''@;'; put 'put ''YzcxMWQ2N2UiLCI2NzE2M2U5MDMyMzYyODlmNzc2ZjIyYzI1ZmI4YTNhZmMxNzMyZjJiODRiNGU5NWRiZGE0N2FlNWEwODUyNjQ5Il0sWyIzZmFkM2ZhODRjYWYwZjM0ZjBmODliZmQyZGNmNTRmYzE3NWQ3NjdhZWMzZTUwNjg0ZjNiYTRhNGJmNWY2ODNkIiwiY2QxYmM3Y2I2Y2M0MDdiYjJm''@;'; put 'put ''MGNhNjQ3YzcxOGE3MzBjZjcxODcyZTdkMGQyYTUzZmEyMGVmY2RmZTYxODI2Il0sWyI2NzRmMjYwMGEzMDA3YTAwNTY4YzFhN2NlMDVkMDgxNmMxZmI4NGJmMTM3MDc5OGYxYzY5NTMyZmFlYjFhODZiIiwiMjk5ZDIxZjk0MTNmMzNiM2VkZjQzYjI1NzAwNDU4MGI3MGRiNTdkYTBiMTgyMjU5''@;'; put 'put ''ZTA5ZWVjYzY5ZTBkMzhhNSJdLFsiZDMyZjRkYTU0YWRlNzRhYmI4MWI4MTVhZDFmYjNiMjYzZDgyZDZjNjkyNzE0YmNmZjg3ZDI5YmQ1ZWU5ZjA4ZiIsImY5NDI5ZTczOGI4ZTUzYjk2OGU5OTAxNmMwNTk3MDc3ODJlMTRmNDUzNTM1OWQ1ODJmYzQxNjkxMGIzZWVhODciXSxbIjMwZTRlNjcw''@;'; put 'put ''NDM1Mzg1NTU2ZTU5MzY1NzEzNTg0NWQzNmZiYjY5MzFmNzJiMDhjYjFlZDk1NGYxZTNjZTNmZjYiLCI0NjJmOWJjZTYxOTg5ODYzODQ5OTM1MDExM2JiYzliMTBhODc4ZDM1ZGE3MDc0MGRjNjk1YTU1OWViODhkYjdiIl0sWyJiZTIwNjIwMDNjNTFjYzMwMDQ2ODI5MDQzMzBlNGRlZTdmM2Rj''@;'; put 'put ''ZDEwYjAxZTU4MGJmMTk3MWIwNGQ0Y2FkMjk3IiwiNjIxODhiYzQ5ZDYxZTU0Mjg1NzNkNDhhNzRlMWM2NTViMWM2MTA5MDkwNTY4MmEwZDU1NThlZDcyZGNjYjliYyJdLFsiOTMxNDQ0MjNhY2UzNDUxZWQyOWUwZmI5YWMyYWYyMTFjYjZlODRhNjAxZGY1OTkzYzQxOTg1OWZmZjVkZjA0YSIs''@;'; put 'put ''IjdjMTBkZmIxNjRjMzQyNWY1YzcxYTNmOWQ3OTkyMDM4ZjEwNjUyMjRmNzJiYjlkMWQ5MDJhNmQxMzAzN2I0N2MiXSxbImIwMTVmODA0NGY1ZmNiZGNmMjFjYTI2ZDZjMzRmYjgxOTc4MjkyMDVjN2I3ZDJhN2NiNjY0MThjMTU3YjExMmMiLCJhYjhjMWUwODZkMDRlODEzNzQ0YTY1NWIyZGY4''@;'; put 'put ''ZDVmODNiM2NkYzZmYWEzMDg4YzFkM2FlYTE0NTRlM2ExZDVmIl0sWyJkNWU5ZTFkYTY0OWQ5N2Q4OWU0ODY4MTE3YTQ2NWEzYTRmOGExOGRlNTdhMTQwZDM2YjNmMmFmMzQxYTIxYjUyIiwiNGNiMDQ0MzdmMzkxZWQ3MzExMWExM2NjMWQ0ZGQwZGIxNjkzNDY1YzIyNDA0ODBkODk1NWU4NTky''@;'; put 'put ''ZjI3NDQ3YSJdLFsiZDNhZTQxMDQ3ZGQ3Y2EwNjVkYmY4ZWQ3N2I5OTI0Mzk5ODMwMDVjZDcyZTE2ZDZmOTk2YTUzMTZkMzY5NjZiYiIsImJkMWFlYjIxYWQyMmViYjIyYTEwZjAzMDM0MTdjNmQ5NjRmOGNkZDdkZjBhY2E2MTRiMTBkYzE0ZDEyNWFjNDYiXSxbIjQ2M2UyNzYzZDg4NWY5NThm''@;'; put 'put ''YzY2Y2RkMjI4MDBmMGE0ODcxOTdkMGE4MmUzNzdiNDlmODBhZjg3Yzg5N2IwNjUiLCJiZmVmYWNkYjBlNWQwZmQ3ZGYzYTMxMWE5NGRlMDYyYjI2YjgwYzYxZmJjOTc1MDhiNzk5OTI2NzFlZjdjYTdmIl0sWyI3OTg1ZmRmZDEyN2MwNTY3YzZmNTNlYzFiYjYzZWMzMTU4ZTU5N2M0MGJmZTc0''@;'; put 'put ''N2M4M2NkZGZjOTEwNjQxOTE3IiwiNjAzYzEyZGFmM2Q5ODYyZWYyYjI1ZmUxZGUyODlhZWQyNGVkMjkxZTBlYzY3MDg3MDNhNWJkNTY3ZjMyZWQwMyJdLFsiNzRhMWFkNmI1Zjc2ZTM5ZGIyZGQyNDk0MTBlYWM3Zjk5ZTc0YzU5Y2I4M2QyZDBlZDVmZjE1NDNkYTc3MDNlOSIsImNjNjE1N2Vm''@;'; put 'put ''MThjOWM2M2NkNjE5M2Q4MzYzMWJiZWEwMDkzZTA5Njg5NDJlOGMzM2Q1NzM3ZmQ3OTBlMGRiMDgiXSxbIjMwNjgyYTUwNzAzMzc1ZjYwMmQ0MTY2NjRiYTE5YjdmYzliYWI0MmM3Mjc0NzQ2M2E3MWQwODk2YjIyZjZkYTMiLCI1NTNlMDRmNmIwMThiNGZhNmM4ZjM5ZTdmMzExZDMxNzYyOTBk''@;'; put 'put ''MGUwZjE5Y2E3M2YxNzcxNGQ5OTc3YTIyZmY4Il0sWyI5ZTIxNThmMGQ3YzBkNWYyNmMzNzkxZWZlZmE3OTU5NzY1NGU3YTJiMjQ2NGY1MmIxZWU2YzEzNDc3NjllZjU3IiwiNzEyZmNkZDFiOTA1M2YwOTAwM2EzNDgxZmE3NzYyZTlmZmQ3YzhlZjM1YTM4NTA5ZTJmYmYyNjI5MDA4MzczIl0s''@;'; put 'put ''WyIxNzZlMjY5ODlhNDNjOWNmZWJhNDAyOWMyMDI1MzhjMjgxNzJlNTY2ZTNjNGZjZTczMjI4NTdmM2JlMzI3ZDY2IiwiZWQ4Y2M5ZDA0YjI5ZWI4NzdkMjcwYjQ4NzhkYzQzYzE5YWVmZDMxZjRlZWUwOWVlN2I0NzgzNGMxZmE0YjFjMyJdLFsiNzVkNDZlZmVhMzc3MWU2ZTY4YWJiODlhMTNh''@;'; put 'put ''ZDc0N2VjZjE4OTIzOTNkZmM0ZjFiNzAwNDc4OGM1MDM3NGRhOCIsIjk4NTIzOTBhOTk1MDc2NzlmZDBiODZmZDJiMzlhODY4ZDdlZmMyMjE1MTM0NmUxYTNjYTQ3MjY1ODZhNmJlZDgiXSxbIjgwOWEyMGM2N2Q2NDkwMGZmYjY5OGM0YzgyNWY2ZDVmMjMxMGZiMDQ1MWM4NjkzNDViNzMxOWY2''@;'; put 'put ''NDU2MDU3MjEiLCI5ZTk5NDk4MGQ5OTE3ZTIyYjc2YjA2MTkyN2ZhMDQxNDNkMDk2Y2NjNTQ5NjNlNmE1ZWJmYTVmM2Y4ZTI4NmMxIl0sWyIxYjM4OTAzYTQzZjdmMTE0ZWQ0NTAwYjRlYWM3MDgzZmRlZmVjZTFjZjI5YzYzNTI4ZDU2MzQ0NmY5NzJjMTgwIiwiNDAzNmVkYzkzMWE2MGFlODg5''@;'; put 'put ''MzUzZjc3ZmQ1M2RlNGEyNzA4YjI2YjZmNWRhNzJhZDMzOTQxMTlkYWY0MDhmOSJdXX19fSwzMTM2Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPVgsXz15KDg4NzIzKSxnPXkoMzkyMTApLEI9eSgyMTgzMik7SS5hc3NlcnQ9ZyxJLnRvQXJyYXk9Qi50b0FycmF5LEkuemVybzI9Qi56''@;'; put 'put ''ZXJvMixJLnRvSGV4PUIudG9IZXgsSS5lbmNvZGU9Qi5lbmNvZGUsSS5nZXROQUY9ZnVuY3Rpb24gdyhOLEwsSyl7dmFyIFcsVT1uZXcgQXJyYXkoTWF0aC5tYXgoTi5iaXRMZW5ndGgoKSxLKSsxKTtmb3IoVz0wO1c8VS5sZW5ndGg7Vys9MSlVW1ddPTA7dmFyIFk9MTw8TCsxLHE9Ti5jbG9u''@;'; put 'put ''ZSgpO2ZvcihXPTA7VzxVLmxlbmd0aDtXKyspe3ZhciBlZSxKPXEuYW5kbG4oWS0xKTtxLmlzT2RkKCk/cS5pc3VibihlZT1KPihZPj4xKS0xPyhZPj4xKS1KOkopOmVlPTAsVVtXXT1lZSxxLml1c2hybigxKX1yZXR1cm4gVX0sSS5nZXRKU0Y9ZnVuY3Rpb24gUChOLEwpe3ZhciBLPVtbXSxb''@;'; put 'put ''XV07Tj1OLmNsb25lKCksTD1MLmNsb25lKCk7Zm9yKHZhciBZLFU9MCxXPTA7Ti5jbXBuKC1VKT4wfHxMLmNtcG4oLVcpPjA7KXt2YXIgSixuZSxxPU4uYW5kbG4oMykrVSYzLGVlPUwuYW5kbG4oMykrVyYzOzM9PT1xJiYocT0tMSksMz09PWVlJiYoZWU9LTEpLEo9MSZxPzMhPShZPU4uYW5k''@;'; put 'put ''bG4oNykrVSY3KSYmNSE9PVl8fDIhPT1lZT9xOi1xOjAsS1swXS5wdXNoKEopLG5lPTEmZWU/MyE9KFk9TC5hbmRsbig3KStXJjcpJiY1IT09WXx8MiE9PXE/ZWU6LWVlOjAsS1sxXS5wdXNoKG5lKSwyKlU9PT1KKzEmJihVPTEtVSksMipXPT09bmUrMSYmKFc9MS1XKSxOLml1c2hybigxKSxM''@;'; put 'put ''Lml1c2hybigxKX1yZXR1cm4gS30sSS5jYWNoZWRQcm9wZXJ0eT1mdW5jdGlvbiBGKE4sTCxLKXt2YXIgVT0iXyIrTDtOLnByb3RvdHlwZVtMXT1mdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzW1VdP3RoaXNbVV06dGhpc1tVXT1LLmNhbGwodGhpcyl9fSxJLnBhcnNlQnl0ZXM9ZnVu''@;'; put 'put ''Y3Rpb24gTyhOKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIE4/SS50b0FycmF5KE4sImhleCIpOk59LEkuaW50RnJvbUxFPWZ1bmN0aW9uIHooTil7cmV0dXJuIG5ldyBfKE4sImhleCIsImxlIil9fSw4ODcyMzpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJLF8peyJ1c2Ugc3RyaWN0Ijtm''@;'; put 'put ''dW5jdGlvbiBnKFYscCl7aWYoIVYpdGhyb3cgbmV3IEVycm9yKHB8fCJBc3NlcnRpb24gZmFpbGVkIil9ZnVuY3Rpb24gQihWLHApe1Yuc3VwZXJfPXA7dmFyIGI9ZnVuY3Rpb24oKXt9O2IucHJvdG90eXBlPXAucHJvdG90eXBlLFYucHJvdG90eXBlPW5ldyBiLFYucHJvdG90eXBlLmNvbnN0''@;'; put 'put ''cnVjdG9yPVZ9ZnVuY3Rpb24gdyhWLHAsYil7aWYody5pc0JOKFYpKXJldHVybiBWO3RoaXMubmVnYXRpdmU9MCx0aGlzLndvcmRzPW51bGwsdGhpcy5sZW5ndGg9MCx0aGlzLnJlZD1udWxsLG51bGwhPT1WJiYoKCJsZSI9PT1wfHwiYmUiPT09cCkmJihiPXAscD0xMCksdGhpcy5faW5pdChW''@;'; put 'put ''fHwwLHB8fDEwLGJ8fCJiZSIpKX12YXIgUDsib2JqZWN0Ij09dHlwZW9mIEk/SS5leHBvcnRzPXc6Xy5CTj13LHcuQk49dyx3LndvcmRTaXplPTI2O3RyeXtQPXR5cGVvZiB3aW5kb3c8InUiJiZ0eXBlb2Ygd2luZG93LkJ1ZmZlcjwidSI/d2luZG93LkJ1ZmZlcjp5KDc5MzY4KS5CdWZmZXJ9''@;'; put 'put ''Y2F0Y2h7fWZ1bmN0aW9uIEYoVixwKXt2YXIgYj1WLmNoYXJDb2RlQXQocCk7cmV0dXJuIGI+PTY1JiZiPD03MD9iLTU1OmI+PTk3JiZiPD0xMDI/Yi04NzpiLTQ4JjE1fWZ1bmN0aW9uIE8oVixwLGIpe3ZhciB4PUYoVixiKTtyZXR1cm4gYi0xPj1wJiYoeHw9RihWLGItMSk8PDQpLHh9ZnVu''@;'; put 'put ''Y3Rpb24geihWLHAsYix4KXtmb3IodmFyIEM9MCxUPU1hdGgubWluKFYubGVuZ3RoLGIpLEg9cDtIPFQ7SCsrKXt2YXIgaj1WLmNoYXJDb2RlQXQoSCktNDg7Qyo9eCxDKz1qPj00OT9qLTQ5KzEwOmo+PTE3P2otMTcrMTA6an1yZXR1cm4gQ313LmlzQk49ZnVuY3Rpb24ocCl7cmV0dXJuIHAg''@;'; put 'put ''aW5zdGFuY2VvZiB3fHxudWxsIT09cCYmIm9iamVjdCI9PXR5cGVvZiBwJiZwLmNvbnN0cnVjdG9yLndvcmRTaXplPT09dy53b3JkU2l6ZSYmQXJyYXkuaXNBcnJheShwLndvcmRzKX0sdy5tYXg9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gcC5jbXAoYik+MD9wOmJ9LHcubWluPWZ1bmN0aW9uKHAs''@;'; put 'put ''Yil7cmV0dXJuIHAuY21wKGIpPDA/cDpifSx3LnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbihwLGIseCl7aWYoIm51bWJlciI9PXR5cGVvZiBwKXJldHVybiB0aGlzLl9pbml0TnVtYmVyKHAsYix4KTtpZigib2JqZWN0Ij09dHlwZW9mIHApcmV0dXJuIHRoaXMuX2luaXRBcnJheShwLGIseCk7''@;'; put 'put ''ImhleCI9PT1iJiYoYj0xNiksZyhiPT09KDB8YikmJmI+PTImJmI8PTM2KTt2YXIgQz0wOyItIj09PShwPXAudG9TdHJpbmcoKS5yZXBsYWNlKC9ccysvZywiIikpWzBdJiYoQysrLHRoaXMubmVnYXRpdmU9MSksQzxwLmxlbmd0aCYmKDE2PT09Yj90aGlzLl9wYXJzZUhleChwLEMseCk6KHRo''@;'; put 'put ''aXMuX3BhcnNlQmFzZShwLGIsQyksImxlIj09PXgmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxiLHgpKSl9LHcucHJvdG90eXBlLl9pbml0TnVtYmVyPWZ1bmN0aW9uKHAsYix4KXtwPDAmJih0aGlzLm5lZ2F0aXZlPTEscD0tcCkscDw2NzEwODg2ND8odGhpcy53b3Jkcz1bNjcx''@;'; put 'put ''MDg4NjMmcF0sdGhpcy5sZW5ndGg9MSk6cDw0NTAzNTk5NjI3MzcwNDk2Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZwLHAvNjcxMDg4NjQmNjcxMDg4NjNdLHRoaXMubGVuZ3RoPTIpOihnKHA8OTAwNzE5OTI1NDc0MDk5MiksdGhpcy53b3Jkcz1bNjcxMDg4NjMmcCxwLzY3MTA4ODY0JjY3MTA4''@;'; put 'put ''ODYzLDFdLHRoaXMubGVuZ3RoPTMpLCJsZSI9PT14JiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksYix4KX0sdy5wcm90b3R5cGUuX2luaXRBcnJheT1mdW5jdGlvbihwLGIseCl7aWYoZygibnVtYmVyIj09dHlwZW9mIHAubGVuZ3RoKSxwLmxlbmd0aDw9MClyZXR1cm4gdGhpcy53''@;'; put 'put ''b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MSx0aGlzO3RoaXMubGVuZ3RoPU1hdGguY2VpbChwLmxlbmd0aC8zKSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT0wO3ZhciBULEgsaj0wO2lmKCJiZSI9PT14''@;'; put 'put ''KWZvcihDPXAubGVuZ3RoLTEsVD0wO0M+PTA7Qy09Myl0aGlzLndvcmRzW1RdfD0oSD1wW0NdfHBbQy0xXTw8OHxwW0MtMl08PDE2KTw8aiY2NzEwODg2Myx0aGlzLndvcmRzW1QrMV09SD4+PjI2LWomNjcxMDg4NjMsKGorPTI0KT49MjYmJihqLT0yNixUKyspO2Vsc2UgaWYoImxlIj09PXgp''@;'; put 'put ''Zm9yKEM9MCxUPTA7QzxwLmxlbmd0aDtDKz0zKXRoaXMud29yZHNbVF18PShIPXBbQ118cFtDKzFdPDw4fHBbQysyXTw8MTYpPDxqJjY3MTA4ODYzLHRoaXMud29yZHNbVCsxXT1IPj4+MjYtaiY2NzEwODg2Mywoais9MjQpPj0yNiYmKGotPTI2LFQrKyk7cmV0dXJuIHRoaXMuc3RyaXAoKX0s''@;'; put 'put ''dy5wcm90b3R5cGUuX3BhcnNlSGV4PWZ1bmN0aW9uKHAsYix4KXt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoKHAubGVuZ3RoLWIpLzYpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIEM9MDtDPHRoaXMubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPTA7dmFyIGosVD0w''@;'; put 'put ''LEg9MDtpZigiYmUiPT09eClmb3IoQz1wLmxlbmd0aC0xO0M+PWI7Qy09MilqPU8ocCxiLEMpPDxULHRoaXMud29yZHNbSF18PTY3MTA4ODYzJmosVD49MTg/KFQtPTE4LHRoaXMud29yZHNbSCs9MV18PWo+Pj4yNik6VCs9ODtlbHNlIGZvcihDPShwLmxlbmd0aC1iKSUyPT0wP2IrMTpiO0M8''@;'; put 'put ''cC5sZW5ndGg7Qys9MilqPU8ocCxiLEMpPDxULHRoaXMud29yZHNbSF18PTY3MTA4ODYzJmosVD49MTg/KFQtPTE4LHRoaXMud29yZHNbSCs9MV18PWo+Pj4yNik6VCs9ODt0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl9wYXJzZUJhc2U9ZnVuY3Rpb24ocCxiLHgpe3RoaXMud29yZHM9WzBd''@;'; put 'put ''LHRoaXMubGVuZ3RoPTE7Zm9yKHZhciBDPTAsVD0xO1Q8PTY3MTA4ODYzO1QqPWIpQysrO0MtLSxUPVQvYnwwO2Zvcih2YXIgSD1wLmxlbmd0aC14LGo9SCVDLEU9TWF0aC5taW4oSCxILWopK3gsbT0wLEE9eDtBPEU7QSs9QyltPXoocCxBLEErQyxiKSx0aGlzLmltdWxuKFQpLHRoaXMud29y''@;'; put 'put ''ZHNbMF0rbTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1tOnRoaXMuX2lhZGRuKG0pO2lmKDAhPT1qKXt2YXIgYWU9MTtmb3IobT16KHAsQSxwLmxlbmd0aCxiKSxBPTA7QTxqO0ErKylhZSo9Yjt0aGlzLmltdWxuKGFlKSx0aGlzLndvcmRzWzBdK208NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9''@;'; put 'put ''bTp0aGlzLl9pYWRkbihtKX10aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24ocCl7cC53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgYj0wO2I8dGhpcy5sZW5ndGg7YisrKXAud29yZHNbYl09dGhpcy53b3Jkc1tiXTtwLmxlbmd0aD10aGlzLmxlbmd0''@;'; put 'put ''aCxwLm5lZ2F0aXZlPXRoaXMubmVnYXRpdmUscC5yZWQ9dGhpcy5yZWR9LHcucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIHA9bmV3IHcobnVsbCk7cmV0dXJuIHRoaXMuY29weShwKSxwfSx3LnByb3RvdHlwZS5fZXhwYW5kPWZ1bmN0aW9uKHApe2Zvcig7dGhpcy5sZW5ndGg8cDsp''@;'; put 'put ''dGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO3JldHVybiB0aGlzfSx3LnByb3RvdHlwZS5zdHJpcD1mdW5jdGlvbigpe2Zvcig7dGhpcy5sZW5ndGg+MSYmMD09PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV07KXRoaXMubGVuZ3RoLS07cmV0dXJuIHRoaXMuX25vcm1TaWduKCl9LHcucHJv''@;'; put 'put ''dG90eXBlLl9ub3JtU2lnbj1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdJiYodGhpcy5uZWdhdGl2ZT0wKSx0aGlzfSx3LnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMucmVkPyI8Qk4tUjogIjoiPEJOOiAiKSt0aGlz''@;'; put 'put ''LnRvU3RyaW5nKDE2KSsiPiJ9O3ZhciBOPVsiIiwiMCIsIjAwIiwiMDAwIiwiMDAwMCIsIjAwMDAwIiwiMDAwMDAwIiwiMDAwMDAwMCIsIjAwMDAwMDAwIiwiMDAwMDAwMDAwIiwiMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMCIsIjAwMDAw''@;'; put 'put ''MDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAw''@;'; put 'put ''MDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCJdLEw9WzAsMCwyNSwxNiwxMiwxMSwxMCw5LDgsOCw3LDcsNyw3LDYsNiw2LDYsNiw2LDYsNSw1LDUsNSw1LDUsNSw1''@;'; put 'put ''LDUsNSw1LDUsNSw1LDUsNV0sSz1bMCwwLDMzNTU0NDMyLDQzMDQ2NzIxLDE2Nzc3MjE2LDQ4ODI4MTI1LDYwNDY2MTc2LDQwMzUzNjA3LDE2Nzc3MjE2LDQzMDQ2NzIxLDFlNywxOTQ4NzE3MSwzNTgzMTgwOCw2Mjc0ODUxNyw3NTI5NTM2LDExMzkwNjI1LDE2Nzc3MjE2LDI0MTM3NTY5LDM0''@;'; put 'put ''MDEyMjI0LDQ3MDQ1ODgxLDY0ZTYsNDA4NDEwMSw1MTUzNjMyLDY0MzYzNDMsNzk2MjYyNCw5NzY1NjI1LDExODgxMzc2LDE0MzQ4OTA3LDE3MjEwMzY4LDIwNTExMTQ5LDI0M2U1LDI4NjI5MTUxLDMzNTU0NDMyLDM5MTM1MzkzLDQ1NDM1NDI0LDUyNTIxODc1LDYwNDY2MTc2XTtmdW5jdGlv''@;'; put 'put ''biBXKFYscCxiKXtiLm5lZ2F0aXZlPXAubmVnYXRpdmVeVi5uZWdhdGl2ZTt2YXIgeD1WLmxlbmd0aCtwLmxlbmd0aHwwO2IubGVuZ3RoPXgseD14LTF8MDt2YXIgQz0wfFYud29yZHNbMF0sVD0wfHAud29yZHNbMF0sSD1DKlQsRT1ILzY3MTA4ODY0fDA7Yi53b3Jkc1swXT02NzEwODg2MyZI''@;'; put 'put ''O2Zvcih2YXIgbT0xO208eDttKyspe2Zvcih2YXIgQT1FPj4+MjYsYWU9NjcxMDg4NjMmRSx0ZT1NYXRoLm1pbihtLHAubGVuZ3RoLTEpLHNlPU1hdGgubWF4KDAsbS1WLmxlbmd0aCsxKTtzZTw9dGU7c2UrKylBKz0oSD0oQz0wfFYud29yZHNbbS1zZXwwXSkqKFQ9MHxwLndvcmRzW3NlXSkr''@;'; put 'put ''YWUpLzY3MTA4ODY0fDAsYWU9NjcxMDg4NjMmSDtiLndvcmRzW21dPTB8YWUsRT0wfEF9cmV0dXJuIDAhPT1FP2Iud29yZHNbbV09MHxFOmIubGVuZ3RoLS0sYi5zdHJpcCgpfXcucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKHAsYil7dmFyIHg7aWYoYj0wfGJ8fDEsMTY9PT0ocD1wfHwx''@;'; put 'put ''MCl8fCJoZXgiPT09cCl7eD0iIjtmb3IodmFyIEM9MCxUPTAsSD0wO0g8dGhpcy5sZW5ndGg7SCsrKXt2YXIgaj10aGlzLndvcmRzW0hdLEU9KDE2Nzc3MjE1JihqPDxDfFQpKS50b1N0cmluZygxNik7VD1qPj4+MjQtQyYxNjc3NzIxNSwoQys9Mik+PTI2JiYoQy09MjYsSC0tKSx4PTAhPT1U''@;'; put 'put ''fHxIIT09dGhpcy5sZW5ndGgtMT9OWzYtRS5sZW5ndGhdK0UreDpFK3h9Zm9yKDAhPT1UJiYoeD1ULnRvU3RyaW5nKDE2KSt4KTt4Lmxlbmd0aCViIT0wOyl4PSIwIit4O3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHg9Ii0iK3gpLHh9aWYocD09PSgwfHApJiZwPj0yJiZwPD0zNil7dmFy''@;'; put 'put ''IG09TFtwXSxBPUtbcF07eD0iIjt2YXIgYWU9dGhpcy5jbG9uZSgpO2ZvcihhZS5uZWdhdGl2ZT0wOyFhZS5pc1plcm8oKTspe3ZhciB0ZT1hZS5tb2RuKEEpLnRvU3RyaW5nKHApO3g9KGFlPWFlLmlkaXZuKEEpKS5pc1plcm8oKT90ZSt4Ok5bbS10ZS5sZW5ndGhdK3RlK3h9Zm9yKHRoaXMu''@;'; put 'put ''aXNaZXJvKCkmJih4PSIwIit4KTt4Lmxlbmd0aCViIT0wOyl4PSIwIit4O3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHg9Ii0iK3gpLHh9ZyghMSwiQmFzZSBzaG91bGQgYmUgYmV0d2VlbiAyIGFuZCAzNiIpfSx3LnByb3RvdHlwZS50b051bWJlcj1mdW5jdGlvbigpe3ZhciBwPXRoaXMu''@;'; put 'put ''d29yZHNbMF07cmV0dXJuIDI9PT10aGlzLmxlbmd0aD9wKz02NzEwODg2NCp0aGlzLndvcmRzWzFdOjM9PT10aGlzLmxlbmd0aCYmMT09PXRoaXMud29yZHNbMl0/cCs9NDUwMzU5OTYyNzM3MDQ5Nis2NzEwODg2NCp0aGlzLndvcmRzWzFdOnRoaXMubGVuZ3RoPjImJmcoITEsIk51bWJlciBj''@;'; put 'put ''YW4gb25seSBzYWZlbHkgc3RvcmUgdXAgdG8gNTMgYml0cyIpLDAhPT10aGlzLm5lZ2F0aXZlPy1wOnB9LHcucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvU3RyaW5nKDE2KX0sdy5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gZyh0eXBl''@;'; put 'put ''b2YgUDwidSIpLHRoaXMudG9BcnJheUxpa2UoUCxwLGIpfSx3LnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKHAsYil7cmV0dXJuIHRoaXMudG9BcnJheUxpa2UoQXJyYXkscCxiKX0sdy5wcm90b3R5cGUudG9BcnJheUxpa2U9ZnVuY3Rpb24ocCxiLHgpe3ZhciBDPXRoaXMuYnl0ZUxlbmd0''@;'; put 'put ''aCgpLFQ9eHx8TWF0aC5tYXgoMSxDKTtnKEM8PVQsImJ5dGUgYXJyYXkgbG9uZ2VyIHRoYW4gZGVzaXJlZCBsZW5ndGgiKSxnKFQ+MCwiUmVxdWVzdGVkIGFycmF5IGxlbmd0aCA8PSAwIiksdGhpcy5zdHJpcCgpO3ZhciBFLG0sSD0ibGUiPT09YixqPW5ldyBwKFQpLEE9dGhpcy5jbG9uZSgp''@;'; put 'put ''O2lmKEgpe2ZvcihtPTA7IUEuaXNaZXJvKCk7bSsrKUU9QS5hbmRsbigyNTUpLEEuaXVzaHJuKDgpLGpbbV09RTtmb3IoO208VDttKyspalttXT0wfWVsc2V7Zm9yKG09MDttPFQtQzttKyspalttXT0wO2ZvcihtPTA7IUEuaXNaZXJvKCk7bSsrKUU9QS5hbmRsbigyNTUpLEEuaXVzaHJuKDgp''@;'; put 'put ''LGpbVC1tLTFdPUV9cmV0dXJuIGp9LHcucHJvdG90eXBlLl9jb3VudEJpdHM9TWF0aC5jbHozMj9mdW5jdGlvbihwKXtyZXR1cm4gMzItTWF0aC5jbHozMihwKX06ZnVuY3Rpb24ocCl7dmFyIGI9cCx4PTA7cmV0dXJuIGI+PTQwOTYmJih4Kz0xMyxiPj4+PTEzKSxiPj02NCYmKHgrPTcsYj4+''@;'; put 'put ''Pj03KSxiPj04JiYoeCs9NCxiPj4+PTQpLGI+PTImJih4Kz0yLGI+Pj49MikseCtifSx3LnByb3RvdHlwZS5femVyb0JpdHM9ZnVuY3Rpb24ocCl7aWYoMD09PXApcmV0dXJuIDI2O3ZhciBiPXAseD0wO3JldHVybiA4MTkxJmJ8fCh4Kz0xMyxiPj4+PTEzKSwxMjcmYnx8KHgrPTcsYj4+Pj03''@;'; put 'put ''KSwxNSZifHwoeCs9NCxiPj4+PTQpLDMmYnx8KHgrPTIsYj4+Pj0yKSwxJmJ8fHgrKyx4fSx3LnByb3RvdHlwZS5iaXRMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgYj10aGlzLl9jb3VudEJpdHModGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSk7cmV0dXJuIDI2Kih0aGlzLmxlbmd0aC0xKStifSx3''@;'; put 'put ''LnByb3RvdHlwZS56ZXJvQml0cz1mdW5jdGlvbigpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIDA7Zm9yKHZhciBwPTAsYj0wO2I8dGhpcy5sZW5ndGg7YisrKXt2YXIgeD10aGlzLl96ZXJvQml0cyh0aGlzLndvcmRzW2JdKTtpZihwKz14LDI2IT09eClicmVha31yZXR1cm4gcH0sdy5wcm90''@;'; put 'put ''b3R5cGUuYnl0ZUxlbmd0aD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmNlaWwodGhpcy5iaXRMZW5ndGgoKS84KX0sdy5wcm90b3R5cGUudG9Ud29zPWZ1bmN0aW9uKHApe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT90aGlzLmFicygpLmlub3RuKHApLmlhZGRuKDEpOnRoaXMuY2xvbmUoKX0s''@;'; put 'put ''dy5wcm90b3R5cGUuZnJvbVR3b3M9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMudGVzdG4ocC0xKT90aGlzLm5vdG4ocCkuaWFkZG4oMSkuaW5lZygpOnRoaXMuY2xvbmUoKX0sdy5wcm90b3R5cGUuaXNOZWc9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmV9LHcucHJvdG90eXBl''@;'; put 'put ''Lm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaW5lZygpfSx3LnByb3RvdHlwZS5pbmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNaZXJvKCl8fCh0aGlzLm5lZ2F0aXZlXj0xKSx0aGlzfSx3LnByb3RvdHlwZS5pdW9yPWZ1bmN0aW9uKHApe2Zvcig7dGhpcy5sZW5ndGg8''@;'; put 'put ''cC5sZW5ndGg7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtmb3IodmFyIGI9MDtiPHAubGVuZ3RoO2IrKyl0aGlzLndvcmRzW2JdPXRoaXMud29yZHNbYl18cC53b3Jkc1tiXTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pb3I9ZnVuY3Rpb24ocCl7cmV0dXJuIGcoISh0''@;'; put 'put ''aGlzLm5lZ2F0aXZlfHAubmVnYXRpdmUpKSx0aGlzLml1b3IocCl9LHcucHJvdG90eXBlLm9yPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaW9yKHApOnAuY2xvbmUoKS5pb3IodGhpcyl9LHcucHJvdG90eXBlLnVvcj1mdW5jdGlvbihwKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLml1b3IocCk6cC5jbG9uZSgpLml1b3IodGhpcyl9LHcucHJvdG90eXBlLml1YW5kPWZ1bmN0aW9uKHApe3ZhciBiO2I9dGhpcy5sZW5ndGg+cC5sZW5ndGg/cDp0aGlzO2Zvcih2YXIgeD0wO3g8Yi5sZW5ndGg7eCsrKXRo''@;'; put 'put ''aXMud29yZHNbeF09dGhpcy53b3Jkc1t4XSZwLndvcmRzW3hdO3JldHVybiB0aGlzLmxlbmd0aD1iLmxlbmd0aCx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlhbmQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGcoISh0aGlzLm5lZ2F0aXZlfHAubmVnYXRpdmUpKSx0aGlzLml1YW5kKHApfSx3LnBy''@;'; put 'put ''b3RvdHlwZS5hbmQ9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYW5kKHApOnAuY2xvbmUoKS5pYW5kKHRoaXMpfSx3LnByb3RvdHlwZS51YW5kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCku''@;'; put 'put ''aXVhbmQocCk6cC5jbG9uZSgpLml1YW5kKHRoaXMpfSx3LnByb3RvdHlwZS5pdXhvcj1mdW5jdGlvbihwKXt2YXIgYix4O3RoaXMubGVuZ3RoPnAubGVuZ3RoPyhiPXRoaXMseD1wKTooYj1wLHg9dGhpcyk7Zm9yKHZhciBDPTA7Qzx4Lmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT1iLndvcmRz''@;'; put 'put ''W0NdXngud29yZHNbQ107aWYodGhpcyE9PWIpZm9yKDtDPGIubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPWIud29yZHNbQ107cmV0dXJuIHRoaXMubGVuZ3RoPWIubGVuZ3RoLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXhvcj1mdW5jdGlvbihwKXtyZXR1cm4gZyghKHRoaXMubmVnYXRp''@;'; put 'put ''dmV8cC5uZWdhdGl2ZSkpLHRoaXMuaXV4b3IocCl9LHcucHJvdG90eXBlLnhvcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLml4b3IocCk6cC5jbG9uZSgpLml4b3IodGhpcyl9LHcucHJvdG90eXBlLnV4b3I9ZnVuY3Rpb24ocCl7cmV0dXJu''@;'; put 'put ''IHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdXhvcihwKTpwLmNsb25lKCkuaXV4b3IodGhpcyl9LHcucHJvdG90eXBlLmlub3RuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKTt2YXIgYj0wfE1hdGguY2VpbChwLzI2KSx4PXAlMjY7dGhpcy5fZXhw''@;'; put 'put ''YW5kKGIpLHg+MCYmYi0tO2Zvcih2YXIgQz0wO0M8YjtDKyspdGhpcy53b3Jkc1tDXT02NzEwODg2MyZ+dGhpcy53b3Jkc1tDXTtyZXR1cm4geD4wJiYodGhpcy53b3Jkc1tDXT1+dGhpcy53b3Jkc1tDXSY2NzEwODg2Mz4+MjYteCksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5ub3RuPWZ1''@;'; put 'put ''bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaW5vdG4ocCl9LHcucHJvdG90eXBlLnNldG49ZnVuY3Rpb24ocCxiKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIHg9cC8yNnwwLEM9cCUyNjtyZXR1cm4gdGhpcy5fZXhwYW5kKHgrMSksdGhpcy53b3Jkc1t4XT1iP3RoaXMu''@;'; put 'put ''d29yZHNbeF18MTw8Qzp0aGlzLndvcmRzW3hdJn4oMTw8QyksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKHApe3ZhciBiLHgsQztpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PXAubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCxiPXRoaXMuaXN1YihwKSx0''@;'; put 'put ''aGlzLm5lZ2F0aXZlXj0xLHRoaXMuX25vcm1TaWduKCk7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1wLm5lZ2F0aXZlKXJldHVybiBwLm5lZ2F0aXZlPTAsYj10aGlzLmlzdWIocCkscC5uZWdhdGl2ZT0xLGIuX25vcm1TaWduKCk7dGhpcy5sZW5ndGg+cC5sZW5ndGg/KHg9dGhpcyxDPXAp''@;'; put 'put ''Oih4PXAsQz10aGlzKTtmb3IodmFyIFQ9MCxIPTA7SDxDLmxlbmd0aDtIKyspdGhpcy53b3Jkc1tIXT02NzEwODg2MyYoYj0oMHx4LndvcmRzW0hdKSsoMHxDLndvcmRzW0hdKStUKSxUPWI+Pj4yNjtmb3IoOzAhPT1UJiZIPHgubGVuZ3RoO0grKyl0aGlzLndvcmRzW0hdPTY3MTA4ODYzJihi''@;'; put 'put ''PSgwfHgud29yZHNbSF0pK1QpLFQ9Yj4+PjI2O2lmKHRoaXMubGVuZ3RoPXgubGVuZ3RoLDAhPT1UKXRoaXMud29yZHNbdGhpcy5sZW5ndGhdPVQsdGhpcy5sZW5ndGgrKztlbHNlIGlmKHghPT10aGlzKWZvcig7SDx4Lmxlbmd0aDtIKyspdGhpcy53b3Jkc1tIXT14LndvcmRzW0hdO3JldHVy''@;'; put 'put ''biB0aGlzfSx3LnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24ocCl7dmFyIGI7cmV0dXJuIDAhPT1wLm5lZ2F0aXZlJiYwPT09dGhpcy5uZWdhdGl2ZT8ocC5uZWdhdGl2ZT0wLGI9dGhpcy5zdWIocCkscC5uZWdhdGl2ZV49MSxiKTowPT09cC5uZWdhdGl2ZSYmMCE9PXRoaXMubmVnYXRpdmU/KHRo''@;'; put 'put ''aXMubmVnYXRpdmU9MCxiPXAuc3ViKHRoaXMpLHRoaXMubmVnYXRpdmU9MSxiKTp0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaWFkZChwKTpwLmNsb25lKCkuaWFkZCh0aGlzKX0sdy5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihwKXtpZigwIT09cC5uZWdhdGl2ZSl7cC5uZWdh''@;'; put 'put ''dGl2ZT0wO3ZhciBiPXRoaXMuaWFkZChwKTtyZXR1cm4gcC5uZWdhdGl2ZT0xLGIuX25vcm1TaWduKCl9aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGQocCksdGhpcy5uZWdhdGl2ZT0xLHRoaXMuX25vcm1TaWduKCk7dmFyIEMsVCx4PXRoaXMu''@;'; put 'put ''Y21wKHApO2lmKDA9PT14KXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5sZW5ndGg9MSx0aGlzLndvcmRzWzBdPTAsdGhpczt4PjA/KEM9dGhpcyxUPXApOihDPXAsVD10aGlzKTtmb3IodmFyIEg9MCxqPTA7ajxULmxlbmd0aDtqKyspSD0oYj0oMHxDLndvcmRzW2pdKS0oMHxULndvcmRz''@;'; put 'put ''W2pdKStIKT4+MjYsdGhpcy53b3Jkc1tqXT02NzEwODg2MyZiO2Zvcig7MCE9PUgmJmo8Qy5sZW5ndGg7aisrKUg9KGI9KDB8Qy53b3Jkc1tqXSkrSCk+PjI2LHRoaXMud29yZHNbal09NjcxMDg4NjMmYjtpZigwPT09SCYmajxDLmxlbmd0aCYmQyE9PXRoaXMpZm9yKDtqPEMubGVuZ3RoO2or''@;'; put 'put ''Kyl0aGlzLndvcmRzW2pdPUMud29yZHNbal07cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLGopLEMhPT10aGlzJiYodGhpcy5uZWdhdGl2ZT0xKSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWIo''@;'; put 'put ''cCl9O3ZhciBZPWZ1bmN0aW9uKHAsYix4KXt2YXIgRSxtLEEsQz1wLndvcmRzLFQ9Yi53b3JkcyxIPXgud29yZHMsaj0wLGFlPTB8Q1swXSx0ZT04MTkxJmFlLHNlPWFlPj4+MTMsd2U9MHxDWzFdLFVlPTgxOTEmd2UsSmU9d2U+Pj4xMyxvdD0wfENbMl0seGU9ODE5MSZvdCx2ZT1vdD4+PjEz''@;'; put 'put ''LFhlPTB8Q1szXSx6ZT04MTkxJlhlLERlPVhlPj4+MTMsRmU9MHxDWzRdLE9lPTgxOTEmRmUsSWU9RmU+Pj4xMyxWZT0wfENbNV0sa2U9ODE5MSZWZSxBZT1WZT4+PjEzLF90PTB8Q1s2XSxudD04MTkxJl90LFFlPV90Pj4+MTMsdW49MHxDWzddLHl0PTgxOTEmdW4sTXQ9dW4+Pj4xMyxEdD0w''@;'; put 'put ''fENbOF0saXQ9ODE5MSZEdCwkZT1EdD4+PjEzLHR0PTB8Q1s5XSxIZT04MTkxJnR0LHV0PXR0Pj4+MTMscXQ9MHxUWzBdLFJ0PTgxOTEmcXQsUHQ9cXQ+Pj4xMyxjaT0wfFRbMV0sUXQ9ODE5MSZjaSxzbj1jaT4+PjEzLFJpPTB8VFsyXSxobj04MTkxJlJpLGZ0PVJpPj4+MTMsT3I9MHxUWzNd''@;'; put 'put ''LFd0PTgxOTEmT3IsQXQ9T3I+Pj4xMyxSbj0wfFRbNF0sc3Q9ODE5MSZSbixVdD1Sbj4+PjEzLHJpPTB8VFs1XSxXZT04MTkxJnJpLFR0PXJpPj4+MTMsbnI9MHxUWzZdLGh0PTgxOTEmbnIseHQ9bnI+Pj4xMyxqbj0wfFRbN10scm49ODE5MSZqbix6dD1qbj4+PjEzLGhpPTB8VFs4XSxjbj04''@;'; put 'put ''MTkxJmhpLGZuPWhpPj4+MTMsSWk9MHxUWzldLFh0PTgxOTEmSWksZW49SWk+Pj4xMzt4Lm5lZ2F0aXZlPXAubmVnYXRpdmVeYi5uZWdhdGl2ZSx4Lmxlbmd0aD0xOTt2YXIgdWE9KGorKEU9TWF0aC5pbXVsKHRlLFJ0KSl8MCkrKCg4MTkxJihtPShtPU1hdGguaW11bCh0ZSxQdCkpK01hdGgu''@;'; put 'put ''aW11bChzZSxSdCl8MCkpPDwxMyl8MDtqPSgoQT1NYXRoLmltdWwoc2UsUHQpKSsobT4+PjEzKXwwKSsodWE+Pj4yNil8MCx1YSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoVWUsUnQpLG09KG09TWF0aC5pbXVsKFVlLFB0KSkrTWF0aC5pbXVsKEplLFJ0KXwwLEE9TWF0aC5pbXVsKEplLFB0KTt2''@;'; put 'put ''YXIgRWk9KGorKEU9RStNYXRoLmltdWwodGUsUXQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxzbil8MCkrTWF0aC5pbXVsKHNlLFF0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLHNuKXwwKSsobT4+PjEzKXwwKSsoRWk+Pj4yNil8MCxFaSY9NjcxMDg4NjMs''@;'; put 'put ''RT1NYXRoLmltdWwoeGUsUnQpLG09KG09TWF0aC5pbXVsKHhlLFB0KSkrTWF0aC5pbXVsKHZlLFJ0KXwwLEE9TWF0aC5pbXVsKHZlLFB0KSxFPUUrTWF0aC5pbXVsKFVlLFF0KXwwLG09KG09bStNYXRoLmltdWwoVWUsc24pfDApK01hdGguaW11bChKZSxRdCl8MCxBPUErTWF0aC5pbXVsKEpl''@;'; put 'put ''LHNuKXwwO3ZhciB2cj0oaisoRT1FK01hdGguaW11bCh0ZSxobil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLGZ0KXwwKStNYXRoLmltdWwoc2UsaG4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsZnQpfDApKyhtPj4+MTMpfDApKyh2cj4+PjI2KXwwLHZyJj02''@;'; put 'put ''NzEwODg2MyxFPU1hdGguaW11bCh6ZSxSdCksbT0obT1NYXRoLmltdWwoemUsUHQpKStNYXRoLmltdWwoRGUsUnQpfDAsQT1NYXRoLmltdWwoRGUsUHQpLEU9RStNYXRoLmltdWwoeGUsUXQpfDAsbT0obT1tK01hdGguaW11bCh4ZSxzbil8MCkrTWF0aC5pbXVsKHZlLFF0KXwwLEE9QStNYXRo''@;'; put 'put ''LmltdWwodmUsc24pfDAsRT1FK01hdGguaW11bChVZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKFVlLGZ0KXwwKStNYXRoLmltdWwoSmUsaG4pfDAsQT1BK01hdGguaW11bChKZSxmdCl8MDt2YXIgV249KGorKEU9RStNYXRoLmltdWwodGUsV3QpfDApfDApKygoODE5MSYobT0obT1tK01hdGgu''@;'; put 'put ''aW11bCh0ZSxBdCl8MCkrTWF0aC5pbXVsKHNlLFd0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLEF0KXwwKSsobT4+PjEzKXwwKSsoV24+Pj4yNil8MCxXbiY9NjcxMDg4NjMsRT1NYXRoLmltdWwoT2UsUnQpLG09KG09TWF0aC5pbXVsKE9lLFB0KSkrTWF0aC5pbXVsKEllLFJ0''@;'; put 'put ''KXwwLEE9TWF0aC5pbXVsKEllLFB0KSxFPUUrTWF0aC5pbXVsKHplLFF0KXwwLG09KG09bStNYXRoLmltdWwoemUsc24pfDApK01hdGguaW11bChEZSxRdCl8MCxBPUErTWF0aC5pbXVsKERlLHNuKXwwLEU9RStNYXRoLmltdWwoeGUsaG4pfDAsbT0obT1tK01hdGguaW11bCh4ZSxmdCl8MCkr''@;'; put 'put ''TWF0aC5pbXVsKHZlLGhuKXwwLEE9QStNYXRoLmltdWwodmUsZnQpfDAsRT1FK01hdGguaW11bChVZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLEF0KXwwKStNYXRoLmltdWwoSmUsV3QpfDAsQT1BK01hdGguaW11bChKZSxBdCl8MDt2YXIgJGk9KGorKEU9RStNYXRoLmltdWwodGUsc3Qp''@;'; put 'put ''fDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxVdCl8MCkrTWF0aC5pbXVsKHNlLHN0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLFV0KXwwKSsobT4+PjEzKXwwKSsoJGk+Pj4yNil8MCwkaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoa2UsUnQpLG09KG09TWF0aC5p''@;'; put 'put ''bXVsKGtlLFB0KSkrTWF0aC5pbXVsKEFlLFJ0KXwwLEE9TWF0aC5pbXVsKEFlLFB0KSxFPUUrTWF0aC5pbXVsKE9lLFF0KXwwLG09KG09bStNYXRoLmltdWwoT2Usc24pfDApK01hdGguaW11bChJZSxRdCl8MCxBPUErTWF0aC5pbXVsKEllLHNuKXwwLEU9RStNYXRoLmltdWwoemUsaG4pfDAs''@;'; put 'put ''bT0obT1tK01hdGguaW11bCh6ZSxmdCl8MCkrTWF0aC5pbXVsKERlLGhuKXwwLEE9QStNYXRoLmltdWwoRGUsZnQpfDAsRT1FK01hdGguaW11bCh4ZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKHhlLEF0KXwwKStNYXRoLmltdWwodmUsV3QpfDAsQT1BK01hdGguaW11bCh2ZSxBdCl8MCxFPUUr''@;'; put 'put ''TWF0aC5pbXVsKFVlLHN0KXwwLG09KG09bStNYXRoLmltdWwoVWUsVXQpfDApK01hdGguaW11bChKZSxzdCl8MCxBPUErTWF0aC5pbXVsKEplLFV0KXwwO3ZhciBlaT0oaisoRT1FK01hdGguaW11bCh0ZSxXZSl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLFR0KXwwKStNYXRo''@;'; put 'put ''LmltdWwoc2UsV2UpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsVHQpfDApKyhtPj4+MTMpfDApKyhlaT4+PjI2KXwwLGVpJj02NzEwODg2MyxFPU1hdGguaW11bChudCxSdCksbT0obT1NYXRoLmltdWwobnQsUHQpKStNYXRoLmltdWwoUWUsUnQpfDAsQT1NYXRoLmltdWwoUWUs''@;'; put 'put ''UHQpLEU9RStNYXRoLmltdWwoa2UsUXQpfDAsbT0obT1tK01hdGguaW11bChrZSxzbil8MCkrTWF0aC5pbXVsKEFlLFF0KXwwLEE9QStNYXRoLmltdWwoQWUsc24pfDAsRT1FK01hdGguaW11bChPZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKE9lLGZ0KXwwKStNYXRoLmltdWwoSWUsaG4pfDAs''@;'; put 'put ''QT1BK01hdGguaW11bChJZSxmdCl8MCxFPUUrTWF0aC5pbXVsKHplLFd0KXwwLG09KG09bStNYXRoLmltdWwoemUsQXQpfDApK01hdGguaW11bChEZSxXdCl8MCxBPUErTWF0aC5pbXVsKERlLEF0KXwwLEU9RStNYXRoLmltdWwoeGUsc3QpfDAsbT0obT1tK01hdGguaW11bCh4ZSxVdCl8MCkr''@;'; put 'put ''TWF0aC5pbXVsKHZlLHN0KXwwLEE9QStNYXRoLmltdWwodmUsVXQpfDAsRT1FK01hdGguaW11bChVZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLFR0KXwwKStNYXRoLmltdWwoSmUsV2UpfDAsQT1BK01hdGguaW11bChKZSxUdCl8MDt2YXIgUXI9KGorKEU9RStNYXRoLmltdWwodGUsaHQp''@;'; put 'put ''fDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSx4dCl8MCkrTWF0aC5pbXVsKHNlLGh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLHh0KXwwKSsobT4+PjEzKXwwKSsoUXI+Pj4yNil8MCxRciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoeXQsUnQpLG09KG09TWF0aC5p''@;'; put 'put ''bXVsKHl0LFB0KSkrTWF0aC5pbXVsKE10LFJ0KXwwLEE9TWF0aC5pbXVsKE10LFB0KSxFPUUrTWF0aC5pbXVsKG50LFF0KXwwLG09KG09bStNYXRoLmltdWwobnQsc24pfDApK01hdGguaW11bChRZSxRdCl8MCxBPUErTWF0aC5pbXVsKFFlLHNuKXwwLEU9RStNYXRoLmltdWwoa2UsaG4pfDAs''@;'; put 'put ''bT0obT1tK01hdGguaW11bChrZSxmdCl8MCkrTWF0aC5pbXVsKEFlLGhuKXwwLEE9QStNYXRoLmltdWwoQWUsZnQpfDAsRT1FK01hdGguaW11bChPZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKE9lLEF0KXwwKStNYXRoLmltdWwoSWUsV3QpfDAsQT1BK01hdGguaW11bChJZSxBdCl8MCxFPUUr''@;'; put 'put ''TWF0aC5pbXVsKHplLHN0KXwwLG09KG09bStNYXRoLmltdWwoemUsVXQpfDApK01hdGguaW11bChEZSxzdCl8MCxBPUErTWF0aC5pbXVsKERlLFV0KXwwLEU9RStNYXRoLmltdWwoeGUsV2UpfDAsbT0obT1tK01hdGguaW11bCh4ZSxUdCl8MCkrTWF0aC5pbXVsKHZlLFdlKXwwLEE9QStNYXRo''@;'; put 'put ''LmltdWwodmUsVHQpfDAsRT1FK01hdGguaW11bChVZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLHh0KXwwKStNYXRoLmltdWwoSmUsaHQpfDAsQT1BK01hdGguaW11bChKZSx4dCl8MDt2YXIgVmk9KGorKEU9RStNYXRoLmltdWwodGUscm4pfDApfDApKygoODE5MSYobT0obT1tK01hdGgu''@;'; put 'put ''aW11bCh0ZSx6dCl8MCkrTWF0aC5pbXVsKHNlLHJuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLHp0KXwwKSsobT4+PjEzKXwwKSsoVmk+Pj4yNil8MCxWaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoaXQsUnQpLG09KG09TWF0aC5pbXVsKGl0LFB0KSkrTWF0aC5pbXVsKCRlLFJ0''@;'; put 'put ''KXwwLEE9TWF0aC5pbXVsKCRlLFB0KSxFPUUrTWF0aC5pbXVsKHl0LFF0KXwwLG09KG09bStNYXRoLmltdWwoeXQsc24pfDApK01hdGguaW11bChNdCxRdCl8MCxBPUErTWF0aC5pbXVsKE10LHNuKXwwLEU9RStNYXRoLmltdWwobnQsaG4pfDAsbT0obT1tK01hdGguaW11bChudCxmdCl8MCkr''@;'; put 'put ''TWF0aC5pbXVsKFFlLGhuKXwwLEE9QStNYXRoLmltdWwoUWUsZnQpfDAsRT1FK01hdGguaW11bChrZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKGtlLEF0KXwwKStNYXRoLmltdWwoQWUsV3QpfDAsQT1BK01hdGguaW11bChBZSxBdCl8MCxFPUUrTWF0aC5pbXVsKE9lLHN0KXwwLG09KG09bStN''@;'; put 'put ''YXRoLmltdWwoT2UsVXQpfDApK01hdGguaW11bChJZSxzdCl8MCxBPUErTWF0aC5pbXVsKEllLFV0KXwwLEU9RStNYXRoLmltdWwoemUsV2UpfDAsbT0obT1tK01hdGguaW11bCh6ZSxUdCl8MCkrTWF0aC5pbXVsKERlLFdlKXwwLEE9QStNYXRoLmltdWwoRGUsVHQpfDAsRT1FK01hdGguaW11''@;'; put 'put ''bCh4ZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKHhlLHh0KXwwKStNYXRoLmltdWwodmUsaHQpfDAsQT1BK01hdGguaW11bCh2ZSx4dCl8MCxFPUUrTWF0aC5pbXVsKFVlLHJuKXwwLG09KG09bStNYXRoLmltdWwoVWUsenQpfDApK01hdGguaW11bChKZSxybil8MCxBPUErTWF0aC5pbXVsKEpl''@;'; put 'put ''LHp0KXwwO3ZhciBOaT0oaisoRT1FK01hdGguaW11bCh0ZSxjbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLGZuKXwwKStNYXRoLmltdWwoc2UsY24pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsZm4pfDApKyhtPj4+MTMpfDApKyhOaT4+PjI2KXwwLE5pJj02''@;'; put 'put ''NzEwODg2MyxFPU1hdGguaW11bChIZSxSdCksbT0obT1NYXRoLmltdWwoSGUsUHQpKStNYXRoLmltdWwodXQsUnQpfDAsQT1NYXRoLmltdWwodXQsUHQpLEU9RStNYXRoLmltdWwoaXQsUXQpfDAsbT0obT1tK01hdGguaW11bChpdCxzbil8MCkrTWF0aC5pbXVsKCRlLFF0KXwwLEE9QStNYXRo''@;'; put 'put ''LmltdWwoJGUsc24pfDAsRT1FK01hdGguaW11bCh5dCxobil8MCxtPShtPW0rTWF0aC5pbXVsKHl0LGZ0KXwwKStNYXRoLmltdWwoTXQsaG4pfDAsQT1BK01hdGguaW11bChNdCxmdCl8MCxFPUUrTWF0aC5pbXVsKG50LFd0KXwwLG09KG09bStNYXRoLmltdWwobnQsQXQpfDApK01hdGguaW11''@;'; put 'put ''bChRZSxXdCl8MCxBPUErTWF0aC5pbXVsKFFlLEF0KXwwLEU9RStNYXRoLmltdWwoa2Usc3QpfDAsbT0obT1tK01hdGguaW11bChrZSxVdCl8MCkrTWF0aC5pbXVsKEFlLHN0KXwwLEE9QStNYXRoLmltdWwoQWUsVXQpfDAsRT1FK01hdGguaW11bChPZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVs''@;'; put 'put ''KE9lLFR0KXwwKStNYXRoLmltdWwoSWUsV2UpfDAsQT1BK01hdGguaW11bChJZSxUdCl8MCxFPUUrTWF0aC5pbXVsKHplLGh0KXwwLG09KG09bStNYXRoLmltdWwoemUseHQpfDApK01hdGguaW11bChEZSxodCl8MCxBPUErTWF0aC5pbXVsKERlLHh0KXwwLEU9RStNYXRoLmltdWwoeGUscm4p''@;'; put 'put ''fDAsbT0obT1tK01hdGguaW11bCh4ZSx6dCl8MCkrTWF0aC5pbXVsKHZlLHJuKXwwLEE9QStNYXRoLmltdWwodmUsenQpfDAsRT1FK01hdGguaW11bChVZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKFVlLGZuKXwwKStNYXRoLmltdWwoSmUsY24pfDAsQT1BK01hdGguaW11bChKZSxmbil8MDt2''@;'; put 'put ''YXIgRGE9KGorKEU9RStNYXRoLmltdWwodGUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxlbil8MCkrTWF0aC5pbXVsKHNlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLGVuKXwwKSsobT4+PjEzKXwwKSsoRGE+Pj4yNil8MCxEYSY9NjcxMDg4NjMs''@;'; put 'put ''RT1NYXRoLmltdWwoSGUsUXQpLG09KG09TWF0aC5pbXVsKEhlLHNuKSkrTWF0aC5pbXVsKHV0LFF0KXwwLEE9TWF0aC5pbXVsKHV0LHNuKSxFPUUrTWF0aC5pbXVsKGl0LGhuKXwwLG09KG09bStNYXRoLmltdWwoaXQsZnQpfDApK01hdGguaW11bCgkZSxobil8MCxBPUErTWF0aC5pbXVsKCRl''@;'; put 'put ''LGZ0KXwwLEU9RStNYXRoLmltdWwoeXQsV3QpfDAsbT0obT1tK01hdGguaW11bCh5dCxBdCl8MCkrTWF0aC5pbXVsKE10LFd0KXwwLEE9QStNYXRoLmltdWwoTXQsQXQpfDAsRT1FK01hdGguaW11bChudCxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKG50LFV0KXwwKStNYXRoLmltdWwoUWUsc3Qp''@;'; put 'put ''fDAsQT1BK01hdGguaW11bChRZSxVdCl8MCxFPUUrTWF0aC5pbXVsKGtlLFdlKXwwLG09KG09bStNYXRoLmltdWwoa2UsVHQpfDApK01hdGguaW11bChBZSxXZSl8MCxBPUErTWF0aC5pbXVsKEFlLFR0KXwwLEU9RStNYXRoLmltdWwoT2UsaHQpfDAsbT0obT1tK01hdGguaW11bChPZSx4dCl8''@;'; put 'put ''MCkrTWF0aC5pbXVsKEllLGh0KXwwLEE9QStNYXRoLmltdWwoSWUseHQpfDAsRT1FK01hdGguaW11bCh6ZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKHplLHp0KXwwKStNYXRoLmltdWwoRGUscm4pfDAsQT1BK01hdGguaW11bChEZSx6dCl8MCxFPUUrTWF0aC5pbXVsKHhlLGNuKXwwLG09KG09''@;'; put 'put ''bStNYXRoLmltdWwoeGUsZm4pfDApK01hdGguaW11bCh2ZSxjbil8MCxBPUErTWF0aC5pbXVsKHZlLGZuKXwwO3ZhciBMcj0oaisoRT1FK01hdGguaW11bChVZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKFVlLGVuKXwwKStNYXRoLmltdWwoSmUsWHQpfDApKTw8MTMpfDA7''@;'; put 'put ''aj0oKEE9QStNYXRoLmltdWwoSmUsZW4pfDApKyhtPj4+MTMpfDApKyhMcj4+PjI2KXwwLExyJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxobiksbT0obT1NYXRoLmltdWwoSGUsZnQpKStNYXRoLmltdWwodXQsaG4pfDAsQT1NYXRoLmltdWwodXQsZnQpLEU9RStNYXRoLmltdWwoaXQsV3Qp''@;'; put 'put ''fDAsbT0obT1tK01hdGguaW11bChpdCxBdCl8MCkrTWF0aC5pbXVsKCRlLFd0KXwwLEE9QStNYXRoLmltdWwoJGUsQXQpfDAsRT1FK01hdGguaW11bCh5dCxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LFV0KXwwKStNYXRoLmltdWwoTXQsc3QpfDAsQT1BK01hdGguaW11bChNdCxVdCl8MCxF''@;'; put 'put ''PUUrTWF0aC5pbXVsKG50LFdlKXwwLG09KG09bStNYXRoLmltdWwobnQsVHQpfDApK01hdGguaW11bChRZSxXZSl8MCxBPUErTWF0aC5pbXVsKFFlLFR0KXwwLEU9RStNYXRoLmltdWwoa2UsaHQpfDAsbT0obT1tK01hdGguaW11bChrZSx4dCl8MCkrTWF0aC5pbXVsKEFlLGh0KXwwLEE9QStN''@;'; put 'put ''YXRoLmltdWwoQWUseHQpfDAsRT1FK01hdGguaW11bChPZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKE9lLHp0KXwwKStNYXRoLmltdWwoSWUscm4pfDAsQT1BK01hdGguaW11bChJZSx6dCl8MCxFPUUrTWF0aC5pbXVsKHplLGNuKXwwLG09KG09bStNYXRoLmltdWwoemUsZm4pfDApK01hdGgu''@;'; put 'put ''aW11bChEZSxjbil8MCxBPUErTWF0aC5pbXVsKERlLGZuKXwwO3ZhciBXaT0oaisoRT1FK01hdGguaW11bCh4ZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHhlLGVuKXwwKStNYXRoLmltdWwodmUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwodmUsZW4pfDAp''@;'; put 'put ''KyhtPj4+MTMpfDApKyhXaT4+PjI2KXwwLFdpJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxXdCksbT0obT1NYXRoLmltdWwoSGUsQXQpKStNYXRoLmltdWwodXQsV3QpfDAsQT1NYXRoLmltdWwodXQsQXQpLEU9RStNYXRoLmltdWwoaXQsc3QpfDAsbT0obT1tK01hdGguaW11bChpdCxVdCl8''@;'; put 'put ''MCkrTWF0aC5pbXVsKCRlLHN0KXwwLEE9QStNYXRoLmltdWwoJGUsVXQpfDAsRT1FK01hdGguaW11bCh5dCxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LFR0KXwwKStNYXRoLmltdWwoTXQsV2UpfDAsQT1BK01hdGguaW11bChNdCxUdCl8MCxFPUUrTWF0aC5pbXVsKG50LGh0KXwwLG09KG09''@;'; put 'put ''bStNYXRoLmltdWwobnQseHQpfDApK01hdGguaW11bChRZSxodCl8MCxBPUErTWF0aC5pbXVsKFFlLHh0KXwwLEU9RStNYXRoLmltdWwoa2Uscm4pfDAsbT0obT1tK01hdGguaW11bChrZSx6dCl8MCkrTWF0aC5pbXVsKEFlLHJuKXwwLEE9QStNYXRoLmltdWwoQWUsenQpfDAsRT1FK01hdGgu''@;'; put 'put ''aW11bChPZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKE9lLGZuKXwwKStNYXRoLmltdWwoSWUsY24pfDAsQT1BK01hdGguaW11bChJZSxmbil8MDt2YXIgcGE9KGorKEU9RStNYXRoLmltdWwoemUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh6ZSxlbil8MCkrTWF0aC5pbXVs''@;'; put 'put ''KERlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKERlLGVuKXwwKSsobT4+PjEzKXwwKSsocGE+Pj4yNil8MCxwYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsc3QpLG09KG09TWF0aC5pbXVsKEhlLFV0KSkrTWF0aC5pbXVsKHV0LHN0KXwwLEE9TWF0aC5pbXVsKHV0LFV0KSxF''@;'; put 'put ''PUUrTWF0aC5pbXVsKGl0LFdlKXwwLG09KG09bStNYXRoLmltdWwoaXQsVHQpfDApK01hdGguaW11bCgkZSxXZSl8MCxBPUErTWF0aC5pbXVsKCRlLFR0KXwwLEU9RStNYXRoLmltdWwoeXQsaHQpfDAsbT0obT1tK01hdGguaW11bCh5dCx4dCl8MCkrTWF0aC5pbXVsKE10LGh0KXwwLEE9QStN''@;'; put 'put ''YXRoLmltdWwoTXQseHQpfDAsRT1FK01hdGguaW11bChudCxybil8MCxtPShtPW0rTWF0aC5pbXVsKG50LHp0KXwwKStNYXRoLmltdWwoUWUscm4pfDAsQT1BK01hdGguaW11bChRZSx6dCl8MCxFPUUrTWF0aC5pbXVsKGtlLGNuKXwwLG09KG09bStNYXRoLmltdWwoa2UsZm4pfDApK01hdGgu''@;'; put 'put ''aW11bChBZSxjbil8MCxBPUErTWF0aC5pbXVsKEFlLGZuKXwwO3ZhciBRbj0oaisoRT1FK01hdGguaW11bChPZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKE9lLGVuKXwwKStNYXRoLmltdWwoSWUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoSWUsZW4pfDAp''@;'; put 'put ''KyhtPj4+MTMpfDApKyhRbj4+PjI2KXwwLFFuJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxXZSksbT0obT1NYXRoLmltdWwoSGUsVHQpKStNYXRoLmltdWwodXQsV2UpfDAsQT1NYXRoLmltdWwodXQsVHQpLEU9RStNYXRoLmltdWwoaXQsaHQpfDAsbT0obT1tK01hdGguaW11bChpdCx4dCl8''@;'; put 'put ''MCkrTWF0aC5pbXVsKCRlLGh0KXwwLEE9QStNYXRoLmltdWwoJGUseHQpfDAsRT1FK01hdGguaW11bCh5dCxybil8MCxtPShtPW0rTWF0aC5pbXVsKHl0LHp0KXwwKStNYXRoLmltdWwoTXQscm4pfDAsQT1BK01hdGguaW11bChNdCx6dCl8MCxFPUUrTWF0aC5pbXVsKG50LGNuKXwwLG09KG09''@;'; put 'put ''bStNYXRoLmltdWwobnQsZm4pfDApK01hdGguaW11bChRZSxjbil8MCxBPUErTWF0aC5pbXVsKFFlLGZuKXwwO3ZhciBsYT0oaisoRT1FK01hdGguaW11bChrZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKGtlLGVuKXwwKStNYXRoLmltdWwoQWUsWHQpfDApKTw8MTMpfDA7''@;'; put 'put ''aj0oKEE9QStNYXRoLmltdWwoQWUsZW4pfDApKyhtPj4+MTMpfDApKyhsYT4+PjI2KXwwLGxhJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxodCksbT0obT1NYXRoLmltdWwoSGUseHQpKStNYXRoLmltdWwodXQsaHQpfDAsQT1NYXRoLmltdWwodXQseHQpLEU9RStNYXRoLmltdWwoaXQscm4p''@;'; put 'put ''fDAsbT0obT1tK01hdGguaW11bChpdCx6dCl8MCkrTWF0aC5pbXVsKCRlLHJuKXwwLEE9QStNYXRoLmltdWwoJGUsenQpfDAsRT1FK01hdGguaW11bCh5dCxjbil8MCxtPShtPW0rTWF0aC5pbXVsKHl0LGZuKXwwKStNYXRoLmltdWwoTXQsY24pfDAsQT1BK01hdGguaW11bChNdCxmbil8MDt2''@;'; put 'put ''YXIgeWE9KGorKEU9RStNYXRoLmltdWwobnQsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChudCxlbil8MCkrTWF0aC5pbXVsKFFlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKFFlLGVuKXwwKSsobT4+PjEzKXwwKSsoeWE+Pj4yNil8MCx5YSY9NjcxMDg4NjMs''@;'; put 'put ''RT1NYXRoLmltdWwoSGUscm4pLG09KG09TWF0aC5pbXVsKEhlLHp0KSkrTWF0aC5pbXVsKHV0LHJuKXwwLEE9TWF0aC5pbXVsKHV0LHp0KSxFPUUrTWF0aC5pbXVsKGl0LGNuKXwwLG09KG09bStNYXRoLmltdWwoaXQsZm4pfDApK01hdGguaW11bCgkZSxjbil8MCxBPUErTWF0aC5pbXVsKCRl''@;'; put 'put ''LGZuKXwwO3ZhciBMYT0oaisoRT1FK01hdGguaW11bCh5dCxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHl0LGVuKXwwKStNYXRoLmltdWwoTXQsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoTXQsZW4pfDApKyhtPj4+MTMpfDApKyhMYT4+PjI2KXwwLExhJj02''@;'; put 'put ''NzEwODg2MyxFPU1hdGguaW11bChIZSxjbiksbT0obT1NYXRoLmltdWwoSGUsZm4pKStNYXRoLmltdWwodXQsY24pfDAsQT1NYXRoLmltdWwodXQsZm4pO3ZhciBGYT0oaisoRT1FK01hdGguaW11bChpdCxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKGl0LGVuKXwwKStNYXRo''@;'; put 'put ''LmltdWwoJGUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoJGUsZW4pfDApKyhtPj4+MTMpfDApKyhGYT4+PjI2KXwwLEZhJj02NzEwODg2Mzt2YXIgdGk9KGorKEU9TWF0aC5pbXVsKEhlLFh0KSl8MCkrKCg4MTkxJihtPShtPU1hdGguaW11bChIZSxlbikpK01hdGguaW11bCh1''@;'; put 'put ''dCxYdCl8MCkpPDwxMyl8MDtyZXR1cm4gaj0oKEE9TWF0aC5pbXVsKHV0LGVuKSkrKG0+Pj4xMyl8MCkrKHRpPj4+MjYpfDAsdGkmPTY3MTA4ODYzLEhbMF09dWEsSFsxXT1FaSxIWzJdPXZyLEhbM109V24sSFs0XT0kaSxIWzVdPWVpLEhbNl09UXIsSFs3XT1WaSxIWzhdPU5pLEhbOV09RGEs''@;'; put 'put ''SFsxMF09THIsSFsxMV09V2ksSFsxMl09cGEsSFsxM109UW4sSFsxNF09bGEsSFsxNV09eWEsSFsxNl09TGEsSFsxN109RmEsSFsxOF09dGksMCE9PWomJihIWzE5XT1qLHgubGVuZ3RoKyspLHh9O2Z1bmN0aW9uIGVlKFYscCxiKXtyZXR1cm4obmV3IEopLm11bHAoVixwLGIpfWZ1bmN0aW9u''@;'; put 'put ''IEooVixwKXt0aGlzLng9Vix0aGlzLnk9cH1NYXRoLmltdWx8fChZPVcpLHcucHJvdG90eXBlLm11bFRvPWZ1bmN0aW9uKHAsYil7dmFyIHgsQz10aGlzLmxlbmd0aCtwLmxlbmd0aDtyZXR1cm4geD0xMD09PXRoaXMubGVuZ3RoJiYxMD09PXAubGVuZ3RoP1kodGhpcyxwLGIpOkM8NjM/Vyh0''@;'; put 'put ''aGlzLHAsYik6QzwxMDI0P2Z1bmN0aW9uIHEoVixwLGIpe2IubmVnYXRpdmU9cC5uZWdhdGl2ZV5WLm5lZ2F0aXZlLGIubGVuZ3RoPVYubGVuZ3RoK3AubGVuZ3RoO2Zvcih2YXIgeD0wLEM9MCxUPTA7VDxiLmxlbmd0aC0xO1QrKyl7dmFyIEg9QztDPTA7Zm9yKHZhciBqPTY3MTA4ODYzJngs''@;'; put 'put ''RT1NYXRoLm1pbihULHAubGVuZ3RoLTEpLG09TWF0aC5tYXgoMCxULVYubGVuZ3RoKzEpO208PUU7bSsrKXt2YXIgc2U9KDB8Vi53b3Jkc1tULW1dKSooMHxwLndvcmRzW21dKSx3ZT02NzEwODg2MyZzZTtqPTY3MTA4ODYzJih3ZT13ZStqfDApLEMrPShIPShIPUgrKHNlLzY3MTA4ODY0fDAp''@;'; put 'put ''fDApKyh3ZT4+PjI2KXwwKT4+PjI2LEgmPTY3MTA4ODYzfWIud29yZHNbVF09aix4PUgsSD1DfXJldHVybiAwIT09eD9iLndvcmRzW1RdPXg6Yi5sZW5ndGgtLSxiLnN0cmlwKCl9KHRoaXMscCxiKTplZSh0aGlzLHAsYikseH0sSi5wcm90b3R5cGUubWFrZVJCVD1mdW5jdGlvbihwKXtmb3Io''@;'; put 'put ''dmFyIGI9bmV3IEFycmF5KHApLHg9dy5wcm90b3R5cGUuX2NvdW50Qml0cyhwKS0xLEM9MDtDPHA7QysrKWJbQ109dGhpcy5yZXZCaW4oQyx4LHApO3JldHVybiBifSxKLnByb3RvdHlwZS5yZXZCaW49ZnVuY3Rpb24ocCxiLHgpe2lmKDA9PT1wfHxwPT09eC0xKXJldHVybiBwO2Zvcih2YXIg''@;'; put 'put ''Qz0wLFQ9MDtUPGI7VCsrKUN8PSgxJnApPDxiLVQtMSxwPj49MTtyZXR1cm4gQ30sSi5wcm90b3R5cGUucGVybXV0ZT1mdW5jdGlvbihwLGIseCxDLFQsSCl7Zm9yKHZhciBqPTA7ajxIO2orKylDW2pdPWJbcFtqXV0sVFtqXT14W3Bbal1dfSxKLnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rp''@;'; put 'put ''b24ocCxiLHgsQyxULEgpe3RoaXMucGVybXV0ZShILHAsYix4LEMsVCk7Zm9yKHZhciBqPTE7ajxUO2o8PD0xKWZvcih2YXIgRT1qPDwxLG09TWF0aC5jb3MoMipNYXRoLlBJL0UpLEE9TWF0aC5zaW4oMipNYXRoLlBJL0UpLGFlPTA7YWU8VDthZSs9RSlmb3IodmFyIHRlPW0sc2U9QSx3ZT0w''@;'; put 'put ''O3dlPGo7d2UrKyl7dmFyIFVlPXhbYWUrd2VdLEplPUNbYWUrd2VdLG90PXhbYWUrd2Ural0seGU9Q1thZSt3ZStqXSx2ZT10ZSpvdC1zZSp4ZTt4ZT10ZSp4ZStzZSpvdCx4W2FlK3dlXT1VZSsob3Q9dmUpLENbYWUrd2VdPUplK3hlLHhbYWUrd2Ural09VWUtb3QsQ1thZSt3ZStqXT1KZS14''@;'; put 'put ''ZSx3ZSE9PUUmJih2ZT1tKnRlLUEqc2Usc2U9bSpzZStBKnRlLHRlPXZlKX19LEoucHJvdG90eXBlLmd1ZXNzTGVuMTNiPWZ1bmN0aW9uKHAsYil7dmFyIHg9MXxNYXRoLm1heChiLHApLEM9MSZ4LFQ9MDtmb3IoeD14LzJ8MDt4O3g+Pj49MSlUKys7cmV0dXJuIDE8PFQrMStDfSxKLnByb3Rv''@;'; put 'put ''dHlwZS5jb25qdWdhdGU9ZnVuY3Rpb24ocCxiLHgpe2lmKCEoeDw9MSkpZm9yKHZhciBDPTA7Qzx4LzI7QysrKXt2YXIgVD1wW0NdO3BbQ109cFt4LUMtMV0scFt4LUMtMV09VCxUPWJbQ10sYltDXT0tYlt4LUMtMV0sYlt4LUMtMV09LVR9fSxKLnByb3RvdHlwZS5ub3JtYWxpemUxM2I9ZnVu''@;'; put 'put ''Y3Rpb24ocCxiKXtmb3IodmFyIHg9MCxDPTA7QzxiLzI7QysrKXt2YXIgVD04MTkyKk1hdGgucm91bmQocFsyKkMrMV0vYikrTWF0aC5yb3VuZChwWzIqQ10vYikreDtwW0NdPTY3MTA4ODYzJlQseD1UPDY3MTA4ODY0PzA6VC82NzEwODg2NHwwfXJldHVybiBwfSxKLnByb3RvdHlwZS5jb252''@;'; put 'put ''ZXJ0MTNiPWZ1bmN0aW9uKHAsYix4LEMpe2Zvcih2YXIgVD0wLEg9MDtIPGI7SCsrKXhbMipIXT04MTkxJihUKz0wfHBbSF0pLHhbMipIKzFdPTgxOTEmKFQ+Pj49MTMpLFQ+Pj49MTM7Zm9yKEg9MipiO0g8QzsrK0gpeFtIXT0wO2coMD09PVQpLGcoISgtODE5MiZUKSl9LEoucHJvdG90eXBl''@;'; put 'put ''LnN0dWI9ZnVuY3Rpb24ocCl7Zm9yKHZhciBiPW5ldyBBcnJheShwKSx4PTA7eDxwO3grKyliW3hdPTA7cmV0dXJuIGJ9LEoucHJvdG90eXBlLm11bHA9ZnVuY3Rpb24ocCxiLHgpe3ZhciBDPTIqdGhpcy5ndWVzc0xlbjEzYihwLmxlbmd0aCxiLmxlbmd0aCksVD10aGlzLm1ha2VSQlQoQyks''@;'; put 'put ''SD10aGlzLnN0dWIoQyksaj1uZXcgQXJyYXkoQyksRT1uZXcgQXJyYXkoQyksbT1uZXcgQXJyYXkoQyksQT1uZXcgQXJyYXkoQyksYWU9bmV3IEFycmF5KEMpLHRlPW5ldyBBcnJheShDKSxzZT14LndvcmRzO3NlLmxlbmd0aD1DLHRoaXMuY29udmVydDEzYihwLndvcmRzLHAubGVuZ3RoLGos''@;'; put 'put ''QyksdGhpcy5jb252ZXJ0MTNiKGIud29yZHMsYi5sZW5ndGgsQSxDKSx0aGlzLnRyYW5zZm9ybShqLEgsRSxtLEMsVCksdGhpcy50cmFuc2Zvcm0oQSxILGFlLHRlLEMsVCk7Zm9yKHZhciB3ZT0wO3dlPEM7d2UrKyl7dmFyIFVlPUVbd2VdKmFlW3dlXS1tW3dlXSp0ZVt3ZV07bVt3ZV09RVt3''@;'; put 'put ''ZV0qdGVbd2VdK21bd2VdKmFlW3dlXSxFW3dlXT1VZX1yZXR1cm4gdGhpcy5jb25qdWdhdGUoRSxtLEMpLHRoaXMudHJhbnNmb3JtKEUsbSxzZSxILEMsVCksdGhpcy5jb25qdWdhdGUoc2UsSCxDKSx0aGlzLm5vcm1hbGl6ZTEzYihzZSxDKSx4Lm5lZ2F0aXZlPXAubmVnYXRpdmVeYi5uZWdh''@;'; put 'put ''dGl2ZSx4Lmxlbmd0aD1wLmxlbmd0aCtiLmxlbmd0aCx4LnN0cmlwKCl9LHcucHJvdG90eXBlLm11bD1mdW5jdGlvbihwKXt2YXIgYj1uZXcgdyhudWxsKTtyZXR1cm4gYi53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrcC5sZW5ndGgpLHRoaXMubXVsVG8ocCxiKX0sdy5wcm90b3R5cGUu''@;'; put 'put ''bXVsZj1mdW5jdGlvbihwKXt2YXIgYj1uZXcgdyhudWxsKTtyZXR1cm4gYi53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrcC5sZW5ndGgpLGVlKHRoaXMscCxiKX0sdy5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLm11bFRvKHAsdGhpcyl9LHcucHJv''@;'; put 'put ''dG90eXBlLmltdWxuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwKSxnKHA8NjcxMDg4NjQpO2Zvcih2YXIgYj0wLHg9MDt4PHRoaXMubGVuZ3RoO3grKyl7dmFyIEM9KDB8dGhpcy53b3Jkc1t4XSkqcCxUPSg2NzEwODg2MyZDKSsoNjcxMDg4NjMmYik7Yj4+PTI2LGIrPUMvNjcx''@;'; put 'put ''MDg4NjR8MCxiKz1UPj4+MjYsdGhpcy53b3Jkc1t4XT02NzEwODg2MyZUfXJldHVybiAwIT09YiYmKHRoaXMud29yZHNbeF09Yix0aGlzLmxlbmd0aCsrKSx0aGlzLmxlbmd0aD0wPT09cD8xOnRoaXMubGVuZ3RoLHRoaXN9LHcucHJvdG90eXBlLm11bG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRo''@;'; put 'put ''aXMuY2xvbmUoKS5pbXVsbihwKX0sdy5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubXVsKHRoaXMpfSx3LnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW11bCh0aGlzLmNsb25lKCkpfSx3LnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24ocCl7dmFyIGI9''@;'; put 'put ''ZnVuY3Rpb24gVShWKXtmb3IodmFyIHA9bmV3IEFycmF5KFYuYml0TGVuZ3RoKCkpLGI9MDtiPHAubGVuZ3RoO2IrKyl7dmFyIEM9YiUyNjtwW2JdPShWLndvcmRzW2IvMjZ8MF0mMTw8Qyk+Pj5DfXJldHVybiBwfShwKTtpZigwPT09Yi5sZW5ndGgpcmV0dXJuIG5ldyB3KDEpO2Zvcih2YXIg''@;'; put 'put ''eD10aGlzLEM9MDtDPGIubGVuZ3RoJiYwPT09YltDXTtDKysseD14LnNxcigpKTtpZigrK0M8Yi5sZW5ndGgpZm9yKHZhciBUPXguc3FyKCk7QzxiLmxlbmd0aDtDKyssVD1ULnNxcigpKTAhPT1iW0NdJiYoeD14Lm11bChUKSk7cmV0dXJuIHh9LHcucHJvdG90eXBlLml1c2hsbj1mdW5jdGlv''@;'; put 'put ''bihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIFQsYj1wJTI2LHg9KHAtYikvMjYsQz02NzEwODg2Mz4+PjI2LWI8PDI2LWI7aWYoMCE9PWIpe3ZhciBIPTA7Zm9yKFQ9MDtUPHRoaXMubGVuZ3RoO1QrKyl7dmFyIGo9dGhpcy53b3Jkc1tUXSZDO3RoaXMud29yZHNbVF09KDB8''@;'; put 'put ''dGhpcy53b3Jkc1tUXSktajw8YnxILEg9aj4+PjI2LWJ9SCYmKHRoaXMud29yZHNbVF09SCx0aGlzLmxlbmd0aCsrKX1pZigwIT09eCl7Zm9yKFQ9dGhpcy5sZW5ndGgtMTtUPj0wO1QtLSl0aGlzLndvcmRzW1QreF09dGhpcy53b3Jkc1tUXTtmb3IoVD0wO1Q8eDtUKyspdGhpcy53b3Jkc1tU''@;'; put 'put ''XT0wO3RoaXMubGVuZ3RoKz14fXJldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlzaGxuPWZ1bmN0aW9uKHApe3JldHVybiBnKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hsbihwKX0sdy5wcm90b3R5cGUuaXVzaHJuPWZ1bmN0aW9uKHAsYix4KXt2YXIgQztnKCJudW1iZXIi''@;'; put 'put ''PT10eXBlb2YgcCYmcD49MCksQz1iPyhiLWIlMjYpLzI2OjA7dmFyIFQ9cCUyNixIPU1hdGgubWluKChwLVQpLzI2LHRoaXMubGVuZ3RoKSxqPTY3MTA4ODYzXjY3MTA4ODYzPj4+VDw8VCxFPXg7aWYoQy09SCxDPU1hdGgubWF4KDAsQyksRSl7Zm9yKHZhciBtPTA7bTxIO20rKylFLndvcmRz''@;'; put 'put ''W21dPXRoaXMud29yZHNbbV07RS5sZW5ndGg9SH1pZigwIT09SClpZih0aGlzLmxlbmd0aD5IKWZvcih0aGlzLmxlbmd0aC09SCxtPTA7bTx0aGlzLmxlbmd0aDttKyspdGhpcy53b3Jkc1ttXT10aGlzLndvcmRzW20rSF07ZWxzZSB0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MTt2YXIg''@;'; put 'put ''QT0wO2ZvcihtPXRoaXMubGVuZ3RoLTE7bT49MCYmKDAhPT1BfHxtPj1DKTttLS0pe3ZhciBhZT0wfHRoaXMud29yZHNbbV07dGhpcy53b3Jkc1ttXT1BPDwyNi1UfGFlPj4+VCxBPWFlJmp9cmV0dXJuIEUmJjAhPT1BJiYoRS53b3Jkc1tFLmxlbmd0aCsrXT1BKSwwPT09dGhpcy5sZW5ndGgm''@;'; put 'put ''Jih0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MSksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pc2hybj1mdW5jdGlvbihwLGIseCl7cmV0dXJuIGcoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaHJuKHAsYix4KX0sdy5wcm90b3R5cGUuc2hsbj1mdW5jdGlvbihwKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5jbG9uZSgpLmlzaGxuKHApfSx3LnByb3RvdHlwZS51c2hsbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hsbihwKX0sdy5wcm90b3R5cGUuc2hybj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaHJuKHApfSx3LnByb3RvdHlwZS51c2hybj1mdW5j''@;'; put 'put ''dGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hybihwKX0sdy5wcm90b3R5cGUudGVzdG49ZnVuY3Rpb24ocCl7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApO3ZhciBiPXAlMjYseD0ocC1iKS8yNjtyZXR1cm4hKHRoaXMubGVuZ3RoPD14fHwhKHRoaXMud29yZHNbeF0mMTw8Yikp''@;'; put 'put ''fSx3LnByb3RvdHlwZS5pbWFza249ZnVuY3Rpb24ocCl7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApO3ZhciBiPXAlMjYseD0ocC1iKS8yNjtyZXR1cm4gZygwPT09dGhpcy5uZWdhdGl2ZSwiaW1hc2tuIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZSBudW1iZXJzIiksdGhpcy5sZW5ndGg8''@;'; put 'put ''PXg/dGhpczooMCE9PWImJngrKyx0aGlzLmxlbmd0aD1NYXRoLm1pbih4LHRoaXMubGVuZ3RoKSwwIT09YiYmKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0mPTY3MTA4ODYzXjY3MTA4ODYzPj4+Yjw8YiksdGhpcy5zdHJpcCgpKX0sdy5wcm90b3R5cGUubWFza249ZnVuY3Rpb24ocCl7cmV0''@;'; put 'put ''dXJuIHRoaXMuY2xvbmUoKS5pbWFza24ocCl9LHcucHJvdG90eXBlLmlhZGRuPWZ1bmN0aW9uKHApe3JldHVybiBnKCJudW1iZXIiPT10eXBlb2YgcCksZyhwPDY3MTA4ODY0KSxwPDA/dGhpcy5pc3VibigtcCk6MCE9PXRoaXMubmVnYXRpdmU/MT09PXRoaXMubGVuZ3RoJiYoMHx0aGlzLndv''@;'; put 'put ''cmRzWzBdKTxwPyh0aGlzLndvcmRzWzBdPXAtKDB8dGhpcy53b3Jkc1swXSksdGhpcy5uZWdhdGl2ZT0wLHRoaXMpOih0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pc3VibihwKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcyk6dGhpcy5faWFkZG4ocCl9LHcucHJvdG90eXBlLl9pYWRkbj1mdW5jdGlvbihw''@;'; put 'put ''KXt0aGlzLndvcmRzWzBdKz1wO2Zvcih2YXIgYj0wO2I8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbYl0+PTY3MTA4ODY0O2IrKyl0aGlzLndvcmRzW2JdLT02NzEwODg2NCxiPT09dGhpcy5sZW5ndGgtMT90aGlzLndvcmRzW2IrMV09MTp0aGlzLndvcmRzW2IrMV0rKztyZXR1cm4gdGhpcy5s''@;'; put 'put ''ZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsYisxKSx0aGlzfSx3LnByb3RvdHlwZS5pc3Vibj1mdW5jdGlvbihwKXtpZihnKCJudW1iZXIiPT10eXBlb2YgcCksZyhwPDY3MTA4ODY0KSxwPDApcmV0dXJuIHRoaXMuaWFkZG4oLXApO2lmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlz''@;'; put 'put ''Lm5lZ2F0aXZlPTAsdGhpcy5pYWRkbihwKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcztpZih0aGlzLndvcmRzWzBdLT1wLDE9PT10aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1swXTwwKXRoaXMud29yZHNbMF09LXRoaXMud29yZHNbMF0sdGhpcy5uZWdhdGl2ZT0xO2Vsc2UgZm9yKHZhciBiPTA7Yjx0''@;'; put 'put ''aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tiXTwwO2IrKyl0aGlzLndvcmRzW2JdKz02NzEwODg2NCx0aGlzLndvcmRzW2IrMV0tPTE7cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuYWRkbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhZGRuKHApfSx3LnByb3RvdHlw''@;'; put 'put ''ZS5zdWJuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXN1Ym4ocCl9LHcucHJvdG90eXBlLmlhYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXN9LHcucHJvdG90eXBlLmFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaWFicygpfSx3LnBy''@;'; put 'put ''b3RvdHlwZS5faXNobG5zdWJtdWw9ZnVuY3Rpb24ocCxiLHgpe3ZhciBUO3RoaXMuX2V4cGFuZChwLmxlbmd0aCt4KTt2YXIgSCxqPTA7Zm9yKFQ9MDtUPHAubGVuZ3RoO1QrKyl7SD0oMHx0aGlzLndvcmRzW1QreF0pK2o7dmFyIEU9KDB8cC53b3Jkc1tUXSkqYjtqPSgoSC09NjcxMDg4NjMm''@;'; put 'put ''RSk+PjI2KS0oRS82NzEwODg2NHwwKSx0aGlzLndvcmRzW1QreF09NjcxMDg4NjMmSH1mb3IoO1Q8dGhpcy5sZW5ndGgteDtUKyspaj0oSD0oMHx0aGlzLndvcmRzW1QreF0pK2opPj4yNix0aGlzLndvcmRzW1QreF09NjcxMDg4NjMmSDtpZigwPT09ailyZXR1cm4gdGhpcy5zdHJpcCgpO2Zv''@;'; put 'put ''cihnKC0xPT09aiksaj0wLFQ9MDtUPHRoaXMubGVuZ3RoO1QrKylqPShIPS0oMHx0aGlzLndvcmRzW1RdKStqKT4+MjYsdGhpcy53b3Jkc1tUXT02NzEwODg2MyZIO3JldHVybiB0aGlzLm5lZ2F0aXZlPTEsdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5fd29yZERpdj1mdW5jdGlvbihwLGIp''@;'; put 'put ''e3ZhciB4LEM9dGhpcy5jbG9uZSgpLFQ9cCxIPTB8VC53b3Jkc1tULmxlbmd0aC0xXTswIT0oeD0yNi10aGlzLl9jb3VudEJpdHMoSCkpJiYoVD1ULnVzaGxuKHgpLEMuaXVzaGxuKHgpLEg9MHxULndvcmRzW1QubGVuZ3RoLTFdKTt2YXIgbSxFPUMubGVuZ3RoLVQubGVuZ3RoO2lmKCJtb2Qi''@;'; put 'put ''IT09Yil7KG09bmV3IHcobnVsbCkpLmxlbmd0aD1FKzEsbS53b3Jkcz1uZXcgQXJyYXkobS5sZW5ndGgpO2Zvcih2YXIgQT0wO0E8bS5sZW5ndGg7QSsrKW0ud29yZHNbQV09MH12YXIgYWU9Qy5jbG9uZSgpLl9pc2hsbnN1Ym11bChULDEsRSk7MD09PWFlLm5lZ2F0aXZlJiYoQz1hZSxtJiYo''@;'; put 'put ''bS53b3Jkc1tFXT0xKSk7Zm9yKHZhciB0ZT1FLTE7dGU+PTA7dGUtLSl7dmFyIHNlPTY3MTA4ODY0KigwfEMud29yZHNbVC5sZW5ndGgrdGVdKSsoMHxDLndvcmRzW1QubGVuZ3RoK3RlLTFdKTtmb3Ioc2U9TWF0aC5taW4oc2UvSHwwLDY3MTA4ODYzKSxDLl9pc2hsbnN1Ym11bChULHNlLHRl''@;'; put 'put ''KTswIT09Qy5uZWdhdGl2ZTspc2UtLSxDLm5lZ2F0aXZlPTAsQy5faXNobG5zdWJtdWwoVCwxLHRlKSxDLmlzWmVybygpfHwoQy5uZWdhdGl2ZV49MSk7bSYmKG0ud29yZHNbdGVdPXNlKX1yZXR1cm4gbSYmbS5zdHJpcCgpLEMuc3RyaXAoKSwiZGl2IiE9PWImJjAhPT14JiZDLml1c2hybih4''@;'; put 'put ''KSx7ZGl2Om18fG51bGwsbW9kOkN9fSx3LnByb3RvdHlwZS5kaXZtb2Q9ZnVuY3Rpb24ocCxiLHgpe3JldHVybiBnKCFwLmlzWmVybygpKSx0aGlzLmlzWmVybygpP3tkaXY6bmV3IHcoMCksbW9kOm5ldyB3KDApfTowIT09dGhpcy5uZWdhdGl2ZSYmMD09PXAubmVnYXRpdmU/KEg9dGhpcy5u''@;'; put 'put ''ZWcoKS5kaXZtb2QocCxiKSwibW9kIiE9PWImJihDPUguZGl2Lm5lZygpKSwiZGl2IiE9PWImJihUPUgubW9kLm5lZygpLHgmJjAhPT1ULm5lZ2F0aXZlJiZULmlhZGQocCkpLHtkaXY6Qyxtb2Q6VH0pOjA9PT10aGlzLm5lZ2F0aXZlJiYwIT09cC5uZWdhdGl2ZT8oSD10aGlzLmRpdm1vZChw''@;'; put 'put ''Lm5lZygpLGIpLCJtb2QiIT09YiYmKEM9SC5kaXYubmVnKCkpLHtkaXY6Qyxtb2Q6SC5tb2R9KTp0aGlzLm5lZ2F0aXZlJnAubmVnYXRpdmU/KEg9dGhpcy5uZWcoKS5kaXZtb2QocC5uZWcoKSxiKSwiZGl2IiE9PWImJihUPUgubW9kLm5lZygpLHgmJjAhPT1ULm5lZ2F0aXZlJiZULmlzdWIo''@;'; put 'put ''cCkpLHtkaXY6SC5kaXYsbW9kOlR9KTpwLmxlbmd0aD50aGlzLmxlbmd0aHx8dGhpcy5jbXAocCk8MD97ZGl2Om5ldyB3KDApLG1vZDp0aGlzfToxPT09cC5sZW5ndGg/ImRpdiI9PT1iP3tkaXY6dGhpcy5kaXZuKHAud29yZHNbMF0pLG1vZDpudWxsfToibW9kIj09PWI/e2RpdjpudWxsLG1v''@;'; put 'put ''ZDpuZXcgdyh0aGlzLm1vZG4ocC53b3Jkc1swXSkpfTp7ZGl2OnRoaXMuZGl2bihwLndvcmRzWzBdKSxtb2Q6bmV3IHcodGhpcy5tb2RuKHAud29yZHNbMF0pKX06dGhpcy5fd29yZERpdihwLGIpO3ZhciBDLFQsSH0sdy5wcm90b3R5cGUuZGl2PWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmRp''@;'; put 'put ''dm1vZChwLCJkaXYiLCExKS5kaXZ9LHcucHJvdG90eXBlLm1vZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5kaXZtb2QocCwibW9kIiwhMSkubW9kfSx3LnByb3RvdHlwZS51bW9kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmRpdm1vZChwLCJtb2QiLCEwKS5tb2R9LHcucHJvdG90eXBlLmRp''@;'; put 'put ''dlJvdW5kPWZ1bmN0aW9uKHApe3ZhciBiPXRoaXMuZGl2bW9kKHApO2lmKGIubW9kLmlzWmVybygpKXJldHVybiBiLmRpdjt2YXIgeD0wIT09Yi5kaXYubmVnYXRpdmU/Yi5tb2QuaXN1YihwKTpiLm1vZCxDPXAudXNocm4oMSksVD1wLmFuZGxuKDEpLEg9eC5jbXAoQyk7cmV0dXJuIEg8MHx8''@;'; put 'put ''MT09PVQmJjA9PT1IP2IuZGl2OjAhPT1iLmRpdi5uZWdhdGl2ZT9iLmRpdi5pc3VibigxKTpiLmRpdi5pYWRkbigxKX0sdy5wcm90b3R5cGUubW9kbj1mdW5jdGlvbihwKXtnKHA8PTY3MTA4ODYzKTtmb3IodmFyIGI9KDE8PDI2KSVwLHg9MCxDPXRoaXMubGVuZ3RoLTE7Qz49MDtDLS0peD0o''@;'; put 'put ''Yip4KygwfHRoaXMud29yZHNbQ10pKSVwO3JldHVybiB4fSx3LnByb3RvdHlwZS5pZGl2bj1mdW5jdGlvbihwKXtnKHA8PTY3MTA4ODYzKTtmb3IodmFyIGI9MCx4PXRoaXMubGVuZ3RoLTE7eD49MDt4LS0pe3ZhciBDPSgwfHRoaXMud29yZHNbeF0pKzY3MTA4ODY0KmI7dGhpcy53b3Jkc1t4''@;'; put 'put ''XT1DL3B8MCxiPUMlcH1yZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5kaXZuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaWRpdm4ocCl9LHcucHJvdG90eXBlLmVnY2Q9ZnVuY3Rpb24ocCl7ZygwPT09cC5uZWdhdGl2ZSksZyghcC5pc1plcm8oKSk7dmFyIGI9dGhp''@;'; put 'put ''cyx4PXAuY2xvbmUoKTtiPTAhPT1iLm5lZ2F0aXZlP2IudW1vZChwKTpiLmNsb25lKCk7Zm9yKHZhciBDPW5ldyB3KDEpLFQ9bmV3IHcoMCksSD1uZXcgdygwKSxqPW5ldyB3KDEpLEU9MDtiLmlzRXZlbigpJiZ4LmlzRXZlbigpOyliLml1c2hybigxKSx4Lml1c2hybigxKSwrK0U7Zm9yKHZh''@;'; put 'put ''ciBtPXguY2xvbmUoKSxBPWIuY2xvbmUoKTshYi5pc1plcm8oKTspe2Zvcih2YXIgYWU9MCx0ZT0xOyEoYi53b3Jkc1swXSZ0ZSkmJmFlPDI2OysrYWUsdGU8PD0xKTtpZihhZT4wKWZvcihiLml1c2hybihhZSk7YWUtLSA+MDspKEMuaXNPZGQoKXx8VC5pc09kZCgpKSYmKEMuaWFkZChtKSxU''@;'; put 'put ''LmlzdWIoQSkpLEMuaXVzaHJuKDEpLFQuaXVzaHJuKDEpO2Zvcih2YXIgc2U9MCx3ZT0xOyEoeC53b3Jkc1swXSZ3ZSkmJnNlPDI2Oysrc2Usd2U8PD0xKTtpZihzZT4wKWZvcih4Lml1c2hybihzZSk7c2UtLSA+MDspKEguaXNPZGQoKXx8ai5pc09kZCgpKSYmKEguaWFkZChtKSxqLmlzdWIo''@;'; put 'put ''QSkpLEguaXVzaHJuKDEpLGouaXVzaHJuKDEpO2IuY21wKHgpPj0wPyhiLmlzdWIoeCksQy5pc3ViKEgpLFQuaXN1YihqKSk6KHguaXN1YihiKSxILmlzdWIoQyksai5pc3ViKFQpKX1yZXR1cm57YTpILGI6aixnY2Q6eC5pdXNobG4oRSl9fSx3LnByb3RvdHlwZS5faW52bXA9ZnVuY3Rpb24o''@;'; put 'put ''cCl7ZygwPT09cC5uZWdhdGl2ZSksZyghcC5pc1plcm8oKSk7dmFyIGFlLGI9dGhpcyx4PXAuY2xvbmUoKTtiPTAhPT1iLm5lZ2F0aXZlP2IudW1vZChwKTpiLmNsb25lKCk7Zm9yKHZhciBDPW5ldyB3KDEpLFQ9bmV3IHcoMCksSD14LmNsb25lKCk7Yi5jbXBuKDEpPjAmJnguY21wbigxKT4w''@;'; put 'put ''Oyl7Zm9yKHZhciBqPTAsRT0xOyEoYi53b3Jkc1swXSZFKSYmajwyNjsrK2osRTw8PTEpO2lmKGo+MClmb3IoYi5pdXNocm4oaik7ai0tID4wOylDLmlzT2RkKCkmJkMuaWFkZChIKSxDLml1c2hybigxKTtmb3IodmFyIG09MCxBPTE7ISh4LndvcmRzWzBdJkEpJiZtPDI2OysrbSxBPDw9MSk7''@;'; put 'put ''aWYobT4wKWZvcih4Lml1c2hybihtKTttLS0gPjA7KVQuaXNPZGQoKSYmVC5pYWRkKEgpLFQuaXVzaHJuKDEpO2IuY21wKHgpPj0wPyhiLmlzdWIoeCksQy5pc3ViKFQpKTooeC5pc3ViKGIpLFQuaXN1YihDKSl9cmV0dXJuKGFlPTA9PT1iLmNtcG4oMSk/QzpUKS5jbXBuKDApPDAmJmFlLmlh''@;'; put 'put ''ZGQocCksYWV9LHcucHJvdG90eXBlLmdjZD1mdW5jdGlvbihwKXtpZih0aGlzLmlzWmVybygpKXJldHVybiBwLmFicygpO2lmKHAuaXNaZXJvKCkpcmV0dXJuIHRoaXMuYWJzKCk7dmFyIGI9dGhpcy5jbG9uZSgpLHg9cC5jbG9uZSgpO2IubmVnYXRpdmU9MCx4Lm5lZ2F0aXZlPTA7Zm9yKHZh''@;'; put 'put ''ciBDPTA7Yi5pc0V2ZW4oKSYmeC5pc0V2ZW4oKTtDKyspYi5pdXNocm4oMSkseC5pdXNocm4oMSk7Zm9yKDs7KXtmb3IoO2IuaXNFdmVuKCk7KWIuaXVzaHJuKDEpO2Zvcig7eC5pc0V2ZW4oKTspeC5pdXNocm4oMSk7dmFyIFQ9Yi5jbXAoeCk7aWYoVDwwKXt2YXIgSD1iO2I9eCx4PUh9ZWxz''@;'; put 'put ''ZSBpZigwPT09VHx8MD09PXguY21wbigxKSlicmVhaztiLmlzdWIoeCl9cmV0dXJuIHguaXVzaGxuKEMpfSx3LnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmVnY2QocCkuYS51bW9kKHApfSx3LnByb3RvdHlwZS5pc0V2ZW49ZnVuY3Rpb24oKXtyZXR1cm4hKDEmdGhp''@;'; put 'put ''cy53b3Jkc1swXSl9LHcucHJvdG90eXBlLmlzT2RkPWZ1bmN0aW9uKCl7cmV0dXJuISgxJn50aGlzLndvcmRzWzBdKX0sdy5wcm90b3R5cGUuYW5kbG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMud29yZHNbMF0mcH0sdy5wcm90b3R5cGUuYmluY249ZnVuY3Rpb24ocCl7ZygibnVtYmVyIj09''@;'; put 'put ''dHlwZW9mIHApO3ZhciBiPXAlMjYseD0ocC1iKS8yNixDPTE8PGI7aWYodGhpcy5sZW5ndGg8PXgpcmV0dXJuIHRoaXMuX2V4cGFuZCh4KzEpLHRoaXMud29yZHNbeF18PUMsdGhpcztmb3IodmFyIFQ9QyxIPXg7MCE9PVQmJkg8dGhpcy5sZW5ndGg7SCsrKXt2YXIgaj0wfHRoaXMud29yZHNb''@;'; put 'put ''SF07VD0oais9VCk+Pj4yNix0aGlzLndvcmRzW0hdPWomPTY3MTA4ODYzfXJldHVybiAwIT09VCYmKHRoaXMud29yZHNbSF09VCx0aGlzLmxlbmd0aCsrKSx0aGlzfSx3LnByb3RvdHlwZS5pc1plcm89ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1sw''@;'; put 'put ''XX0sdy5wcm90b3R5cGUuY21wbj1mdW5jdGlvbihwKXt2YXIgeCxiPXA8MDtpZigwIT09dGhpcy5uZWdhdGl2ZSYmIWIpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJmIpcmV0dXJuIDE7aWYodGhpcy5zdHJpcCgpLHRoaXMubGVuZ3RoPjEpeD0xO2Vsc2V7YiYmKHA9LXApLGcocDw9''@;'; put 'put ''NjcxMDg4NjMsIk51bWJlciBpcyB0b28gYmlnIik7dmFyIEM9MHx0aGlzLndvcmRzWzBdO3g9Qz09PXA/MDpDPHA/LTE6MX1yZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwteDp4fSx3LnByb3RvdHlwZS5jbXA9ZnVuY3Rpb24ocCl7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1wLm5lZ2F0''@;'; put 'put ''aXZlKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09cC5uZWdhdGl2ZSlyZXR1cm4gMTt2YXIgYj10aGlzLnVjbXAocCk7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LWI6Yn0sdy5wcm90b3R5cGUudWNtcD1mdW5jdGlvbihwKXtpZih0aGlzLmxlbmd0aD5wLmxlbmd0aCly''@;'; put 'put ''ZXR1cm4gMTtpZih0aGlzLmxlbmd0aDxwLmxlbmd0aClyZXR1cm4tMTtmb3IodmFyIGI9MCx4PXRoaXMubGVuZ3RoLTE7eD49MDt4LS0pe3ZhciBDPTB8dGhpcy53b3Jkc1t4XSxUPTB8cC53b3Jkc1t4XTtpZihDIT09VCl7QzxUP2I9LTE6Qz5UJiYoYj0xKTticmVha319cmV0dXJuIGJ9LHcu''@;'; put 'put ''cHJvdG90eXBlLmd0bj1mdW5jdGlvbihwKXtyZXR1cm4gMT09PXRoaXMuY21wbihwKX0sdy5wcm90b3R5cGUuZ3Q9ZnVuY3Rpb24ocCl7cmV0dXJuIDE9PT10aGlzLmNtcChwKX0sdy5wcm90b3R5cGUuZ3Rlbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbXBuKHApPj0wfSx3LnByb3RvdHlw''@;'; put 'put ''ZS5ndGU9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY21wKHApPj0wfSx3LnByb3RvdHlwZS5sdG49ZnVuY3Rpb24ocCl7cmV0dXJuLTE9PT10aGlzLmNtcG4ocCl9LHcucHJvdG90eXBlLmx0PWZ1bmN0aW9uKHApe3JldHVybi0xPT09dGhpcy5jbXAocCl9LHcucHJvdG90eXBlLmx0ZW49ZnVu''@;'; put 'put ''Y3Rpb24ocCl7cmV0dXJuIHRoaXMuY21wbihwKTw9MH0sdy5wcm90b3R5cGUubHRlPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNtcChwKTw9MH0sdy5wcm90b3R5cGUuZXFuPWZ1bmN0aW9uKHApe3JldHVybiAwPT09dGhpcy5jbXBuKHApfSx3LnByb3RvdHlwZS5lcT1mdW5jdGlvbihwKXty''@;'; put 'put ''ZXR1cm4gMD09PXRoaXMuY21wKHApfSx3LnJlZD1mdW5jdGlvbihwKXtyZXR1cm4gbmV3IFNlKHApfSx3LnByb3RvdHlwZS50b1JlZD1mdW5jdGlvbihwKXtyZXR1cm4gZyghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSxnKDA9PT10aGlzLm5lZ2F0''@;'; put 'put ''aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLHAuY29udmVydFRvKHRoaXMpLl9mb3JjZVJlZChwKX0sdy5wcm90b3R5cGUuZnJvbVJlZD1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJmcm9tUmVkIHdvcmtzIG9ubHkgd2l0aCBudW1iZXJzIGluIHJlZHVjdGlvbiBj''@;'; put 'put ''b250ZXh0IiksdGhpcy5yZWQuY29udmVydEZyb20odGhpcyl9LHcucHJvdG90eXBlLl9mb3JjZVJlZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5yZWQ9cCx0aGlzfSx3LnByb3RvdHlwZS5mb3JjZVJlZD1mdW5jdGlvbihwKXtyZXR1cm4gZyghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIg''@;'; put 'put ''aW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLl9mb3JjZVJlZChwKX0sdy5wcm90b3R5cGUucmVkQWRkPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuYWRkKHRoaXMscCl9LHcucHJvdG90eXBlLnJl''@;'; put 'put ''ZElBZGQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZElBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaWFkZCh0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRTdWI9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZFN1YiB3b3JrcyBvbmx5''@;'; put 'put ''IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zdWIodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkSVN1Yj1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkSVN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pc3ViKHRoaXMscCl9LHcucHJvdG90eXBl''@;'; put 'put ''LnJlZFNobD1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkU2hsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnNobCh0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRNdWw9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5''@;'; put 'put ''IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLHApLHRoaXMucmVkLm11bCh0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRJTXVsPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQu''@;'; put 'put ''X3ZlcmlmeTIodGhpcyxwKSx0aGlzLnJlZC5pbXVsKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZFNxcj1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWRTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FyKHRo''@;'; put 'put ''aXMpfSx3LnByb3RvdHlwZS5yZWRJU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZElTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaXNxcih0aGlzKX0sdy5wcm90b3R5cGUucmVkU3FydD1mdW5jdGlv''@;'; put 'put ''bigpe3JldHVybiBnKHRoaXMucmVkLCJyZWRTcXJ0IHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcnQodGhpcyl9LHcucHJvdG90eXBlLnJlZEludm09ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkSW52bSB3''@;'; put 'put ''b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pbnZtKHRoaXMpfSx3LnByb3RvdHlwZS5yZWROZWc9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkTmVnIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMu''@;'; put 'put ''cmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLm5lZyh0aGlzKX0sdy5wcm90b3R5cGUucmVkUG93PWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkJiYhcC5yZWQsInJlZFBvdyhub3JtYWxOdW0pIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQucG93KHRoaXMscCl9O3Zh''@;'; put 'put ''ciBuZT17azI1NjpudWxsLHAyMjQ6bnVsbCxwMTkyOm51bGwscDI1NTE5Om51bGx9O2Z1bmN0aW9uIGllKFYscCl7dGhpcy5uYW1lPVYsdGhpcy5wPW5ldyB3KHAsMTYpLHRoaXMubj10aGlzLnAuYml0TGVuZ3RoKCksdGhpcy5rPW5ldyB3KDEpLml1c2hsbih0aGlzLm4pLmlzdWIodGhpcy5w''@;'; put 'put ''KSx0aGlzLnRtcD10aGlzLl90bXAoKX1mdW5jdGlvbiBsZSgpe2llLmNhbGwodGhpcywiazI1NiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmIil9ZnVuY3Rpb24gbWUoKXtpZS5jYWxsKHRoaXMsInAyMjQi''@;'; put 'put ''LCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMSIpfWZ1bmN0aW9uIF9lKCl7aWUuY2FsbCh0aGlzLCJwMTkyIiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYiKX1mdW5jdGlv''@;'; put 'put ''biBUZSgpe2llLmNhbGwodGhpcywiMjU1MTkiLCI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkIil9ZnVuY3Rpb24gU2UoVil7aWYoInN0cmluZyI9PXR5cGVvZiBWKXt2YXIgcD13Ll9wcmltZShWKTt0aGlzLm09cC5w''@;'; put 'put ''LHRoaXMucHJpbWU9cH1lbHNlIGcoVi5ndG4oMSksIm1vZHVsdXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gMSIpLHRoaXMubT1WLHRoaXMucHJpbWU9bnVsbH1mdW5jdGlvbiBqZShWKXtTZS5jYWxsKHRoaXMsViksdGhpcy5zaGlmdD10aGlzLm0uYml0TGVuZ3RoKCksdGhpcy5zaGlmdCUyNiE9''@;'; put 'put ''MCYmKHRoaXMuc2hpZnQrPTI2LXRoaXMuc2hpZnQlMjYpLHRoaXMucj1uZXcgdygxKS5pdXNobG4odGhpcy5zaGlmdCksdGhpcy5yMj10aGlzLmltb2QodGhpcy5yLnNxcigpKSx0aGlzLnJpbnY9dGhpcy5yLl9pbnZtcCh0aGlzLm0pLHRoaXMubWludj10aGlzLnJpbnYubXVsKHRoaXMuciku''@;'; put 'put ''aXN1Ym4oMSkuZGl2KHRoaXMubSksdGhpcy5taW52PXRoaXMubWludi51bW9kKHRoaXMuciksdGhpcy5taW52PXRoaXMuci5zdWIodGhpcy5taW52KX1pZS5wcm90b3R5cGUuX3RtcD1mdW5jdGlvbigpe3ZhciBwPW5ldyB3KG51bGwpO3JldHVybiBwLndvcmRzPW5ldyBBcnJheShNYXRoLmNl''@;'; put 'put ''aWwodGhpcy5uLzEzKSkscH0saWUucHJvdG90eXBlLmlyZWR1Y2U9ZnVuY3Rpb24ocCl7dmFyIHgsYj1wO2Rve3RoaXMuc3BsaXQoYix0aGlzLnRtcCkseD0oYj0oYj10aGlzLmltdWxLKGIpKS5pYWRkKHRoaXMudG1wKSkuYml0TGVuZ3RoKCl9d2hpbGUoeD50aGlzLm4pO3ZhciBDPXg8dGhp''@;'; put 'put ''cy5uPy0xOmIudWNtcCh0aGlzLnApO3JldHVybiAwPT09Qz8oYi53b3Jkc1swXT0wLGIubGVuZ3RoPTEpOkM+MD9iLmlzdWIodGhpcy5wKTp2b2lkIDAhPT1iLnN0cmlwP2Iuc3RyaXAoKTpiLl9zdHJpcCgpLGJ9LGllLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihwLGIpe3AuaXVzaHJuKHRo''@;'; put 'put ''aXMubiwwLGIpfSxpZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24ocCl7cmV0dXJuIHAuaW11bCh0aGlzLmspfSxCKGxlLGllKSxsZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24ocCxiKXtmb3IodmFyIHg9NDE5NDMwMyxDPU1hdGgubWluKHAubGVuZ3RoLDkpLFQ9MDtUPEM7VCsrKWIud29y''@;'; put 'put ''ZHNbVF09cC53b3Jkc1tUXTtpZihiLmxlbmd0aD1DLHAubGVuZ3RoPD05KXJldHVybiBwLndvcmRzWzBdPTAsdm9pZChwLmxlbmd0aD0xKTt2YXIgSD1wLndvcmRzWzldO2ZvcihiLndvcmRzW2IubGVuZ3RoKytdPUgmeCxUPTEwO1Q8cC5sZW5ndGg7VCsrKXt2YXIgaj0wfHAud29yZHNbVF07''@;'; put 'put ''cC53b3Jkc1tULTEwXT0oaiZ4KTw8NHxIPj4+MjIsSD1qfXAud29yZHNbVC0xMF09SD4+Pj0yMixwLmxlbmd0aC09MD09PUgmJnAubGVuZ3RoPjEwPzEwOjl9LGxlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihwKXtwLndvcmRzW3AubGVuZ3RoXT0wLHAud29yZHNbcC5sZW5ndGgrMV09MCxw''@;'; put 'put ''Lmxlbmd0aCs9Mjtmb3IodmFyIGI9MCx4PTA7eDxwLmxlbmd0aDt4Kyspe3ZhciBDPTB8cC53b3Jkc1t4XTtwLndvcmRzW3hdPTY3MTA4ODYzJihiKz05NzcqQyksYj02NCpDKyhiLzY3MTA4ODY0fDApfXJldHVybiAwPT09cC53b3Jkc1twLmxlbmd0aC0xXSYmKHAubGVuZ3RoLS0sMD09PXAu''@;'; put 'put ''d29yZHNbcC5sZW5ndGgtMV0mJnAubGVuZ3RoLS0pLHB9LEIobWUsaWUpLEIoX2UsaWUpLEIoVGUsaWUpLFRlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihwKXtmb3IodmFyIGI9MCx4PTA7eDxwLmxlbmd0aDt4Kyspe3ZhciBDPTE5KigwfHAud29yZHNbeF0pK2IsVD02NzEwODg2MyZDO0M+''@;'; put 'put ''Pj49MjYscC53b3Jkc1t4XT1ULGI9Q31yZXR1cm4gMCE9PWImJihwLndvcmRzW3AubGVuZ3RoKytdPWIpLHB9LHcuX3ByaW1lPWZ1bmN0aW9uKHApe2lmKG5lW3BdKXJldHVybiBuZVtwXTt2YXIgYjtpZigiazI1NiI9PT1wKWI9bmV3IGxlO2Vsc2UgaWYoInAyMjQiPT09cCliPW5ldyBtZTtl''@;'; put 'put ''bHNlIGlmKCJwMTkyIj09PXApYj1uZXcgX2U7ZWxzZXtpZigicDI1NTE5IiE9PXApdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIHByaW1lICIrcCk7Yj1uZXcgVGV9cmV0dXJuIG5lW3BdPWIsYn0sU2UucHJvdG90eXBlLl92ZXJpZnkxPWZ1bmN0aW9uKHApe2coMD09PXAubmVnYXRpdmUsInJl''@;'; put 'put ''ZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksZyhwLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxTZS5wcm90b3R5cGUuX3ZlcmlmeTI9ZnVuY3Rpb24ocCxiKXtnKCEocC5uZWdhdGl2ZXxiLm5lZ2F0aXZlKSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2''@;'; put 'put ''ZXMiKSxnKHAucmVkJiZwLnJlZD09PWIucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LFNlLnByb3RvdHlwZS5pbW9kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLnByaW1lP3RoaXMucHJpbWUuaXJlZHVjZShwKS5fZm9yY2VSZWQodGhpcyk6cC51bW9kKHRoaXMubSku''@;'; put 'put ''X2ZvcmNlUmVkKHRoaXMpfSxTZS5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKHApe3JldHVybiBwLmlzWmVybygpP3AuY2xvbmUoKTp0aGlzLm0uc3ViKHApLl9mb3JjZVJlZCh0aGlzKX0sU2UucHJvdG90eXBlLmFkZD1mdW5jdGlvbihwLGIpe3RoaXMuX3ZlcmlmeTIocCxiKTt2YXIgeD1wLmFk''@;'; put 'put ''ZChiKTtyZXR1cm4geC5jbXAodGhpcy5tKT49MCYmeC5pc3ViKHRoaXMubSkseC5fZm9yY2VSZWQodGhpcyl9LFNlLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKHAsYil7dGhpcy5fdmVyaWZ5MihwLGIpO3ZhciB4PXAuaWFkZChiKTtyZXR1cm4geC5jbXAodGhpcy5tKT49MCYmeC5pc3ViKHRo''@;'; put 'put ''aXMubSkseH0sU2UucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihwLGIpe3RoaXMuX3ZlcmlmeTIocCxiKTt2YXIgeD1wLnN1YihiKTtyZXR1cm4geC5jbXBuKDApPDAmJnguaWFkZCh0aGlzLm0pLHguX2ZvcmNlUmVkKHRoaXMpfSxTZS5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihwLGIpe3RoaXMu''@;'; put 'put ''X3ZlcmlmeTIocCxiKTt2YXIgeD1wLmlzdWIoYik7cmV0dXJuIHguY21wbigwKTwwJiZ4LmlhZGQodGhpcy5tKSx4fSxTZS5wcm90b3R5cGUuc2hsPWZ1bmN0aW9uKHAsYil7cmV0dXJuIHRoaXMuX3ZlcmlmeTEocCksdGhpcy5pbW9kKHAudXNobG4oYikpfSxTZS5wcm90b3R5cGUuaW11bD1m''@;'; put 'put ''dW5jdGlvbihwLGIpe3JldHVybiB0aGlzLl92ZXJpZnkyKHAsYiksdGhpcy5pbW9kKHAuaW11bChiKSl9LFNlLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihwLGIpLHRoaXMuaW1vZChwLm11bChiKSl9LFNlLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9u''@;'; put 'put ''KHApe3JldHVybiB0aGlzLmltdWwocCxwLmNsb25lKCkpfSxTZS5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLm11bChwLHApfSxTZS5wcm90b3R5cGUuc3FydD1mdW5jdGlvbihwKXtpZihwLmlzWmVybygpKXJldHVybiBwLmNsb25lKCk7dmFyIGI9dGhpcy5tLmFuZGxu''@;'; put 'put ''KDMpO2lmKGcoYiUyPT0xKSwzPT09Yil7dmFyIHg9dGhpcy5tLmFkZChuZXcgdygxKSkuaXVzaHJuKDIpO3JldHVybiB0aGlzLnBvdyhwLHgpfWZvcih2YXIgQz10aGlzLm0uc3VibigxKSxUPTA7IUMuaXNaZXJvKCkmJjA9PT1DLmFuZGxuKDEpOylUKyssQy5pdXNocm4oMSk7ZyghQy5pc1pl''@;'; put 'put ''cm8oKSk7dmFyIEg9bmV3IHcoMSkudG9SZWQodGhpcyksaj1ILnJlZE5lZygpLEU9dGhpcy5tLnN1Ym4oMSkuaXVzaHJuKDEpLG09dGhpcy5tLmJpdExlbmd0aCgpO2ZvcihtPW5ldyB3KDIqbSptKS50b1JlZCh0aGlzKTswIT09dGhpcy5wb3cobSxFKS5jbXAoaik7KW0ucmVkSUFkZChqKTtm''@;'; put 'put ''b3IodmFyIEE9dGhpcy5wb3cobSxDKSxhZT10aGlzLnBvdyhwLEMuYWRkbigxKS5pdXNocm4oMSkpLHRlPXRoaXMucG93KHAsQyksc2U9VDswIT09dGUuY21wKEgpOyl7Zm9yKHZhciB3ZT10ZSxVZT0wOzAhPT13ZS5jbXAoSCk7VWUrKyl3ZT13ZS5yZWRTcXIoKTtnKFVlPHNlKTt2YXIgSmU9''@;'; put 'put ''dGhpcy5wb3coQSxuZXcgdygxKS5pdXNobG4oc2UtVWUtMSkpO2FlPWFlLnJlZE11bChKZSksQT1KZS5yZWRTcXIoKSx0ZT10ZS5yZWRNdWwoQSksc2U9VWV9cmV0dXJuIGFlfSxTZS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihwKXt2YXIgYj1wLl9pbnZtcCh0aGlzLm0pO3JldHVybiAwIT09''@;'; put 'put ''Yi5uZWdhdGl2ZT8oYi5uZWdhdGl2ZT0wLHRoaXMuaW1vZChiKS5yZWROZWcoKSk6dGhpcy5pbW9kKGIpfSxTZS5wcm90b3R5cGUucG93PWZ1bmN0aW9uKHAsYil7aWYoYi5pc1plcm8oKSlyZXR1cm4gbmV3IHcoMSkudG9SZWQodGhpcyk7aWYoMD09PWIuY21wbigxKSlyZXR1cm4gcC5jbG9u''@;'; put 'put ''ZSgpO3ZhciBDPW5ldyBBcnJheSgxNik7Q1swXT1uZXcgdygxKS50b1JlZCh0aGlzKSxDWzFdPXA7Zm9yKHZhciBUPTI7VDxDLmxlbmd0aDtUKyspQ1tUXT10aGlzLm11bChDW1QtMV0scCk7dmFyIEg9Q1swXSxqPTAsRT0wLG09Yi5iaXRMZW5ndGgoKSUyNjtmb3IoMD09PW0mJihtPTI2KSxU''@;'; put 'put ''PWIubGVuZ3RoLTE7VD49MDtULS0pe2Zvcih2YXIgQT1iLndvcmRzW1RdLGFlPW0tMTthZT49MDthZS0tKXt2YXIgdGU9QT4+YWUmMTtIIT09Q1swXSYmKEg9dGhpcy5zcXIoSCkpLDAhPT10ZXx8MCE9PWo/KGo8PD0xLGp8PXRlLCg0PT0rK0V8fDA9PT1UJiYwPT09YWUpJiYoSD10aGlzLm11''@;'; put 'put ''bChILENbal0pLEU9MCxqPTApKTpFPTB9bT0yNn1yZXR1cm4gSH0sU2UucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihwKXt2YXIgYj1wLnVtb2QodGhpcy5tKTtyZXR1cm4gYj09PXA/Yi5jbG9uZSgpOmJ9LFNlLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihwKXt2YXIgYj1w''@;'; put 'put ''LmNsb25lKCk7cmV0dXJuIGIucmVkPW51bGwsYn0sdy5tb250PWZ1bmN0aW9uKHApe3JldHVybiBuZXcgamUocCl9LEIoamUsU2UpLGplLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuaW1vZChwLnVzaGxuKHRoaXMuc2hpZnQpKX0samUucHJvdG90eXBlLmNv''@;'; put 'put ''bnZlcnRGcm9tPWZ1bmN0aW9uKHApe3ZhciBiPXRoaXMuaW1vZChwLm11bCh0aGlzLnJpbnYpKTtyZXR1cm4gYi5yZWQ9bnVsbCxifSxqZS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihwLGIpe2lmKHAuaXNaZXJvKCl8fGIuaXNaZXJvKCkpcmV0dXJuIHAud29yZHNbMF09MCxwLmxlbmd0aD0x''@;'; put 'put ''LHA7dmFyIHg9cC5pbXVsKGIpLEM9eC5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksVD14LmlzdWIoQykuaXVzaHJuKHRoaXMuc2hpZnQpLEg9VDtyZXR1cm4gVC5jbXAodGhpcy5tKT49MD9IPVQuaXN1Yih0aGlzLm0pOlQu''@;'; put 'put ''Y21wbigwKTwwJiYoSD1ULmlhZGQodGhpcy5tKSksSC5fZm9yY2VSZWQodGhpcyl9LGplLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24ocCxiKXtpZihwLmlzWmVybygpfHxiLmlzWmVybygpKXJldHVybiBuZXcgdygwKS5fZm9yY2VSZWQodGhpcyk7dmFyIHg9cC5tdWwoYiksQz14Lm1hc2tuKHRo''@;'; put 'put ''aXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxUPXguaXN1YihDKS5pdXNocm4odGhpcy5zaGlmdCksSD1UO3JldHVybiBULmNtcCh0aGlzLm0pPj0wP0g9VC5pc3ViKHRoaXMubSk6VC5jbXBuKDApPDAmJihIPVQuaWFkZCh0aGlzLm0pKSxI''@;'; put 'put ''Ll9mb3JjZVJlZCh0aGlzKX0samUucHJvdG90eXBlLmludm09ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuaW1vZChwLl9pbnZtcCh0aGlzLm0pLm11bCh0aGlzLnIyKSkuX2ZvcmNlUmVkKHRoaXMpfX0odWU9eS5ubWQodWUpLHRoaXMpfSw0NDM1Njp1ZT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgSSxY''@;'; put 'put ''PSJvYmplY3QiPT10eXBlb2YgUmVmbGVjdD9SZWZsZWN0Om51bGwseT1YJiYiZnVuY3Rpb24iPT10eXBlb2YgWC5hcHBseT9YLmFwcGx5OmZ1bmN0aW9uKGllLGxlLG1lKXtyZXR1cm4gRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5LmNhbGwoaWUsbGUsbWUpfTtJPVgmJiJmdW5jdGlvbiI9PXR5''@;'; put 'put ''cGVvZiBYLm93bktleXM/WC5vd25LZXlzOk9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM/ZnVuY3Rpb24oaWUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhpZSkuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoaWUpKX06ZnVuY3Rpb24oaWUpe3JldHVy''@;'; put 'put ''biBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhpZSl9O3ZhciBnPU51bWJlci5pc05hTnx8ZnVuY3Rpb24oaWUpe3JldHVybiBpZSE9aWV9O2Z1bmN0aW9uIEIoKXtCLmluaXQuY2FsbCh0aGlzKX11ZS5leHBvcnRzPUIsdWUuZXhwb3J0cy5vbmNlPWZ1bmN0aW9uIHEobmUsaWUpe3JldHVy''@;'; put 'put ''biBuZXcgUHJvbWlzZShmdW5jdGlvbihsZSxtZSl7ZnVuY3Rpb24gX2UoU2Upe25lLnJlbW92ZUxpc3RlbmVyKGllLFRlKSxtZShTZSl9ZnVuY3Rpb24gVGUoKXsiZnVuY3Rpb24iPT10eXBlb2YgbmUucmVtb3ZlTGlzdGVuZXImJm5lLnJlbW92ZUxpc3RlbmVyKCJlcnJvciIsX2UpLGxlKFtd''@;'; put 'put ''LnNsaWNlLmNhbGwoYXJndW1lbnRzKSl9SihuZSxpZSxUZSx7b25jZTohMH0pLCJlcnJvciIhPT1pZSYmZnVuY3Rpb24gZWUobmUsaWUsbGUpeyJmdW5jdGlvbiI9PXR5cGVvZiBuZS5vbiYmSihuZSwiZXJyb3IiLGllLGxlKX0obmUsX2Use29uY2U6ITB9KX0pfSxCLkV2ZW50RW1pdHRlcj1C''@;'; put 'put ''LEIucHJvdG90eXBlLl9ldmVudHM9dm9pZCAwLEIucHJvdG90eXBlLl9ldmVudHNDb3VudD0wLEIucHJvdG90eXBlLl9tYXhMaXN0ZW5lcnM9dm9pZCAwO3ZhciB3PTEwO2Z1bmN0aW9uIFAobmUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBuZSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgImxp''@;'; put 'put ''c3RlbmVyIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgRnVuY3Rpb24uIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgbmUpfWZ1bmN0aW9uIEYobmUpe3JldHVybiB2b2lkIDA9PT1uZS5fbWF4TGlzdGVuZXJzP0IuZGVmYXVsdE1heExpc3RlbmVyczpuZS5fbWF4TGlzdGVuZXJzfWZ1bmN0aW9u''@;'; put 'put ''IE8obmUsaWUsbGUsbWUpe3ZhciBfZSxUZSxTZTtpZihQKGxlKSx2b2lkIDA9PT0oVGU9bmUuX2V2ZW50cyk/KFRlPW5lLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKSxuZS5fZXZlbnRzQ291bnQ9MCk6KHZvaWQgMCE9PVRlLm5ld0xpc3RlbmVyJiYobmUuZW1pdCgibmV3TGlzdGVuZXIi''@;'; put 'put ''LGllLGxlLmxpc3RlbmVyP2xlLmxpc3RlbmVyOmxlKSxUZT1uZS5fZXZlbnRzKSxTZT1UZVtpZV0pLHZvaWQgMD09PVNlKVNlPVRlW2llXT1sZSwrK25lLl9ldmVudHNDb3VudDtlbHNlIGlmKCJmdW5jdGlvbiI9PXR5cGVvZiBTZT9TZT1UZVtpZV09bWU/W2xlLFNlXTpbU2UsbGVdOm1lP1Nl''@;'; put 'put ''LnVuc2hpZnQobGUpOlNlLnB1c2gobGUpLChfZT1GKG5lKSk+MCYmU2UubGVuZ3RoPl9lJiYhU2Uud2FybmVkKXtTZS53YXJuZWQ9ITA7dmFyIGplPW5ldyBFcnJvcigiUG9zc2libGUgRXZlbnRFbWl0dGVyIG1lbW9yeSBsZWFrIGRldGVjdGVkLiAiK1NlLmxlbmd0aCsiICIrU3RyaW5nKGll''@;'; put 'put ''KSsiIGxpc3RlbmVycyBhZGRlZC4gVXNlIGVtaXR0ZXIuc2V0TWF4TGlzdGVuZXJzKCkgdG8gaW5jcmVhc2UgbGltaXQiKTtqZS5uYW1lPSJNYXhMaXN0ZW5lcnNFeGNlZWRlZFdhcm5pbmciLGplLmVtaXR0ZXI9bmUsamUudHlwZT1pZSxqZS5jb3VudD1TZS5sZW5ndGgsZnVuY3Rpb24gXyhu''@;'; put 'put ''ZSl7Y29uc29sZSYmY29uc29sZS53YXJuJiZjb25zb2xlLndhcm4obmUpfShqZSl9cmV0dXJuIG5lfWZ1bmN0aW9uIHooKXtpZighdGhpcy5maXJlZClyZXR1cm4gdGhpcy50YXJnZXQucmVtb3ZlTGlzdGVuZXIodGhpcy50eXBlLHRoaXMud3JhcEZuKSx0aGlzLmZpcmVkPSEwLDA9PT1hcmd1''@;'; put 'put ''bWVudHMubGVuZ3RoP3RoaXMubGlzdGVuZXIuY2FsbCh0aGlzLnRhcmdldCk6dGhpcy5saXN0ZW5lci5hcHBseSh0aGlzLnRhcmdldCxhcmd1bWVudHMpfWZ1bmN0aW9uIE4obmUsaWUsbGUpe3ZhciBtZT17ZmlyZWQ6ITEsd3JhcEZuOnZvaWQgMCx0YXJnZXQ6bmUsdHlwZTppZSxsaXN0ZW5l''@;'; put 'put ''cjpsZX0sX2U9ei5iaW5kKG1lKTtyZXR1cm4gX2UubGlzdGVuZXI9bGUsbWUud3JhcEZuPV9lLF9lfWZ1bmN0aW9uIEwobmUsaWUsbGUpe3ZhciBtZT1uZS5fZXZlbnRzO2lmKHZvaWQgMD09PW1lKXJldHVybltdO3ZhciBfZT1tZVtpZV07cmV0dXJuIHZvaWQgMD09PV9lP1tdOiJmdW5jdGlv''@;'; put 'put ''biI9PXR5cGVvZiBfZT9sZT9bX2UubGlzdGVuZXJ8fF9lXTpbX2VdOmxlP2Z1bmN0aW9uIFkobmUpe2Zvcih2YXIgaWU9bmV3IEFycmF5KG5lLmxlbmd0aCksbGU9MDtsZTxpZS5sZW5ndGg7KytsZSlpZVtsZV09bmVbbGVdLmxpc3RlbmVyfHxuZVtsZV07cmV0dXJuIGllfShfZSk6VShfZSxf''@;'; put 'put ''ZS5sZW5ndGgpfWZ1bmN0aW9uIEsobmUpe3ZhciBpZT10aGlzLl9ldmVudHM7aWYodm9pZCAwIT09aWUpe3ZhciBsZT1pZVtuZV07aWYoImZ1bmN0aW9uIj09dHlwZW9mIGxlKXJldHVybiAxO2lmKHZvaWQgMCE9PWxlKXJldHVybiBsZS5sZW5ndGh9cmV0dXJuIDB9ZnVuY3Rpb24gVShuZSxp''@;'; put 'put ''ZSl7Zm9yKHZhciBsZT1uZXcgQXJyYXkoaWUpLG1lPTA7bWU8aWU7KyttZSlsZVttZV09bmVbbWVdO3JldHVybiBsZX1mdW5jdGlvbiBKKG5lLGllLGxlLG1lKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgbmUub24pbWUub25jZT9uZS5vbmNlKGllLGxlKTpuZS5vbihpZSxsZSk7ZWxzZXtpZigi''@;'; put 'put ''ZnVuY3Rpb24iIT10eXBlb2YgbmUuYWRkRXZlbnRMaXN0ZW5lcil0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgImVtaXR0ZXIiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBFdmVudEVtaXR0ZXIuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgbmUpO25lLmFkZEV2ZW50TGlzdGVuZXIoaWUsZnVu''@;'; put 'put ''Y3Rpb24gX2UoVGUpe21lLm9uY2UmJm5lLnJlbW92ZUV2ZW50TGlzdGVuZXIoaWUsX2UpLGxlKFRlKX0pfX1PYmplY3QuZGVmaW5lUHJvcGVydHkoQiwiZGVmYXVsdE1heExpc3RlbmVycyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHd9LHNldDpmdW5jdGlvbihuZSl7''@;'; put 'put ''aWYoIm51bWJlciIhPXR5cGVvZiBuZXx8bmU8MHx8ZyhuZSkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBvZiAiZGVmYXVsdE1heExpc3RlbmVycyIgaXMgb3V0IG9mIHJhbmdlLiBJdCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlci4gUmVjZWl2ZWQgJytuZSsiLiIpO3c9''@;'; put 'put ''bmV9fSksQi5pbml0PWZ1bmN0aW9uKCl7KHZvaWQgMD09PXRoaXMuX2V2ZW50c3x8dGhpcy5fZXZlbnRzPT09T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLl9ldmVudHMpJiYodGhpcy5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5fZXZlbnRzQ291bnQ9MCksdGhpcy5fbWF4''@;'; put 'put ''TGlzdGVuZXJzPXRoaXMuX21heExpc3RlbmVyc3x8dm9pZCAwfSxCLnByb3RvdHlwZS5zZXRNYXhMaXN0ZW5lcnM9ZnVuY3Rpb24oaWUpe2lmKCJudW1iZXIiIT10eXBlb2YgaWV8fGllPDB8fGcoaWUpKXRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgb2YgIm4iIGlzIG91dCBvZiBy''@;'; put 'put ''YW5nZS4gSXQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIuIFJlY2VpdmVkICcraWUrIi4iKTtyZXR1cm4gdGhpcy5fbWF4TGlzdGVuZXJzPWllLHRoaXN9LEIucHJvdG90eXBlLmdldE1heExpc3RlbmVycz1mdW5jdGlvbigpe3JldHVybiBGKHRoaXMpfSxCLnByb3RvdHlwZS5lbWl0''@;'; put 'put ''PWZ1bmN0aW9uKGllKXtmb3IodmFyIGxlPVtdLG1lPTE7bWU8YXJndW1lbnRzLmxlbmd0aDttZSsrKWxlLnB1c2goYXJndW1lbnRzW21lXSk7dmFyIF9lPSJlcnJvciI9PT1pZSxUZT10aGlzLl9ldmVudHM7aWYodm9pZCAwIT09VGUpX2U9X2UmJnZvaWQgMD09PVRlLmVycm9yO2Vsc2UgaWYo''@;'; put 'put ''IV9lKXJldHVybiExO2lmKF9lKXt2YXIgU2U7aWYobGUubGVuZ3RoPjAmJihTZT1sZVswXSksU2UgaW5zdGFuY2VvZiBFcnJvcil0aHJvdyBTZTt2YXIgamU9bmV3IEVycm9yKCJVbmhhbmRsZWQgZXJyb3IuIisoU2U/IiAoIitTZS5tZXNzYWdlKyIpIjoiIikpO3Rocm93IGplLmNvbnRleHQ9''@;'; put 'put ''U2UsamV9dmFyIFY9VGVbaWVdO2lmKHZvaWQgMD09PVYpcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFYpeShWLHRoaXMsbGUpO2Vsc2V7dmFyIHA9Vi5sZW5ndGgsYj1VKFYscCk7Zm9yKG1lPTA7bWU8cDsrK21lKXkoYlttZV0sdGhpcyxsZSl9cmV0dXJuITB9LEIucHJvdG90eXBl''@;'; put 'put ''Lm9uPUIucHJvdG90eXBlLmFkZExpc3RlbmVyPWZ1bmN0aW9uKGllLGxlKXtyZXR1cm4gTyh0aGlzLGllLGxlLCExKX0sQi5wcm90b3R5cGUucHJlcGVuZExpc3RlbmVyPWZ1bmN0aW9uKGllLGxlKXtyZXR1cm4gTyh0aGlzLGllLGxlLCEwKX0sQi5wcm90b3R5cGUub25jZT1mdW5jdGlvbihp''@;'; put 'put ''ZSxsZSl7cmV0dXJuIFAobGUpLHRoaXMub24oaWUsTih0aGlzLGllLGxlKSksdGhpc30sQi5wcm90b3R5cGUucHJlcGVuZE9uY2VMaXN0ZW5lcj1mdW5jdGlvbihpZSxsZSl7cmV0dXJuIFAobGUpLHRoaXMucHJlcGVuZExpc3RlbmVyKGllLE4odGhpcyxpZSxsZSkpLHRoaXN9LEIucHJvdG90''@;'; put 'put ''eXBlLm9mZj1CLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lcj1mdW5jdGlvbihpZSxsZSl7dmFyIG1lLF9lLFRlLFNlLGplO2lmKFAobGUpLHZvaWQgMD09PShfZT10aGlzLl9ldmVudHMpKXJldHVybiB0aGlzO2lmKHZvaWQgMD09PShtZT1fZVtpZV0pKXJldHVybiB0aGlzO2lmKG1lPT09bGV8''@;'; put 'put ''fG1lLmxpc3RlbmVyPT09bGUpMD09LS10aGlzLl9ldmVudHNDb3VudD90aGlzLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKTooZGVsZXRlIF9lW2llXSxfZS5yZW1vdmVMaXN0ZW5lciYmdGhpcy5lbWl0KCJyZW1vdmVMaXN0ZW5lciIsaWUsbWUubGlzdGVuZXJ8fGxlKSk7ZWxzZSBpZigi''@;'; put 'put ''ZnVuY3Rpb24iIT10eXBlb2YgbWUpe2ZvcihUZT0tMSxTZT1tZS5sZW5ndGgtMTtTZT49MDtTZS0tKWlmKG1lW1NlXT09PWxlfHxtZVtTZV0ubGlzdGVuZXI9PT1sZSl7amU9bWVbU2VdLmxpc3RlbmVyLFRlPVNlO2JyZWFrfWlmKFRlPDApcmV0dXJuIHRoaXM7MD09PVRlP21lLnNoaWZ0KCk6''@;'; put 'put ''ZnVuY3Rpb24gVyhuZSxpZSl7Zm9yKDtpZSsxPG5lLmxlbmd0aDtpZSsrKW5lW2llXT1uZVtpZSsxXTtuZS5wb3AoKX0obWUsVGUpLDE9PT1tZS5sZW5ndGgmJihfZVtpZV09bWVbMF0pLHZvaWQgMCE9PV9lLnJlbW92ZUxpc3RlbmVyJiZ0aGlzLmVtaXQoInJlbW92ZUxpc3RlbmVyIixpZSxq''@;'; put 'put ''ZXx8bGUpfXJldHVybiB0aGlzfSxCLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnM9ZnVuY3Rpb24oaWUpe3ZhciBsZSxtZSxfZTtpZih2b2lkIDA9PT0obWU9dGhpcy5fZXZlbnRzKSlyZXR1cm4gdGhpcztpZih2b2lkIDA9PT1tZS5yZW1vdmVMaXN0ZW5lcilyZXR1cm4gMD09PWFyZ3Vt''@;'; put 'put ''ZW50cy5sZW5ndGg/KHRoaXMuX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuX2V2ZW50c0NvdW50PTApOnZvaWQgMCE9PW1lW2llXSYmKDA9PS0tdGhpcy5fZXZlbnRzQ291bnQ/dGhpcy5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCk6ZGVsZXRlIG1lW2llXSksdGhpcztpZigw''@;'; put 'put ''PT09YXJndW1lbnRzLmxlbmd0aCl7dmFyIFNlLFRlPU9iamVjdC5rZXlzKG1lKTtmb3IoX2U9MDtfZTxUZS5sZW5ndGg7KytfZSkicmVtb3ZlTGlzdGVuZXIiIT09KFNlPVRlW19lXSkmJnRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKFNlKTtyZXR1cm4gdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMo''@;'; put 'put ''InJlbW92ZUxpc3RlbmVyIiksdGhpcy5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5fZXZlbnRzQ291bnQ9MCx0aGlzfWlmKCJmdW5jdGlvbiI9PXR5cGVvZihsZT1tZVtpZV0pKXRoaXMucmVtb3ZlTGlzdGVuZXIoaWUsbGUpO2Vsc2UgaWYodm9pZCAwIT09bGUpZm9yKF9lPWxl''@;'; put 'put ''Lmxlbmd0aC0xO19lPj0wO19lLS0pdGhpcy5yZW1vdmVMaXN0ZW5lcihpZSxsZVtfZV0pO3JldHVybiB0aGlzfSxCLnByb3RvdHlwZS5saXN0ZW5lcnM9ZnVuY3Rpb24oaWUpe3JldHVybiBMKHRoaXMsaWUsITApfSxCLnByb3RvdHlwZS5yYXdMaXN0ZW5lcnM9ZnVuY3Rpb24oaWUpe3JldHVy''@;'; put 'put ''biBMKHRoaXMsaWUsITEpfSxCLmxpc3RlbmVyQ291bnQ9ZnVuY3Rpb24obmUsaWUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBuZS5saXN0ZW5lckNvdW50P25lLmxpc3RlbmVyQ291bnQoaWUpOksuY2FsbChuZSxpZSl9LEIucHJvdG90eXBlLmxpc3RlbmVyQ291bnQ9SyxCLnByb3RvdHlw''@;'; put 'put ''ZS5ldmVudE5hbWVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2V2ZW50c0NvdW50PjA/SSh0aGlzLl9ldmVudHMpOltdfX0sMTgyMTE6KHVlLFgseSk9Pnt2YXIgST15KDI3MDU0KS5CdWZmZXIsXz15KDM0NzI1KTt1ZS5leHBvcnRzPWZ1bmN0aW9uIGcoQix3LFAsRil7aWYoSS5pc0J1ZmZl''@;'; put 'put ''cihCKXx8KEI9SS5mcm9tKEIsImJpbmFyeSIpKSx3JiYoSS5pc0J1ZmZlcih3KXx8KHc9SS5mcm9tKHcsImJpbmFyeSIpKSw4IT09dy5sZW5ndGgpKXRocm93IG5ldyBSYW5nZUVycm9yKCJzYWx0IHNob3VsZCBiZSBCdWZmZXIgd2l0aCA4IGJ5dGUgbGVuZ3RoIik7Zm9yKHZhciBPPVAvOCx6''@;'; put 'put ''PUkuYWxsb2MoTyksTj1JLmFsbG9jKEZ8fDApLEw9SS5hbGxvYygwKTtPPjB8fEY+MDspe3ZhciBLPW5ldyBfO0sudXBkYXRlKEwpLEsudXBkYXRlKEIpLHcmJksudXBkYXRlKHcpLEw9Sy5kaWdlc3QoKTt2YXIgVT0wO2lmKE8+MCl7dmFyIFc9ei5sZW5ndGgtTztVPU1hdGgubWluKE8sTC5s''@;'; put 'put ''ZW5ndGgpLEwuY29weSh6LFcsMCxVKSxPLT1VfWlmKFU8TC5sZW5ndGgmJkY+MCl7dmFyIFk9Ti5sZW5ndGgtRixxPU1hdGgubWluKEYsTC5sZW5ndGgtVSk7TC5jb3B5KE4sWSxVLFUrcSksRi09cX19cmV0dXJuIEwuZmlsbCgwKSx7a2V5OnosaXY6Tn19fSwxMzY4NjoodWUsWCx5KT0+eyJ1''@;'; put 'put ''c2Ugc3RyaWN0Ijt2YXIgST15KDI3MDU0KS5CdWZmZXIsXz15KDcwNDUpLlRyYW5zZm9ybTtmdW5jdGlvbiBCKE8pe18uY2FsbCh0aGlzKSx0aGlzLl9ibG9jaz1JLmFsbG9jVW5zYWZlKE8pLHRoaXMuX2Jsb2NrU2l6ZT1PLHRoaXMuX2Jsb2NrT2Zmc2V0PTAsdGhpcy5fbGVuZ3RoPVswLDAs''@;'; put 'put ''MCwwXSx0aGlzLl9maW5hbGl6ZWQ9ITF9eSg3MTk5MykoQixfKSxCLnByb3RvdHlwZS5fdHJhbnNmb3JtPWZ1bmN0aW9uKE8seixOKXt2YXIgTD1udWxsO3RyeXt0aGlzLnVwZGF0ZShPLHopfWNhdGNoKEspe0w9S31OKEwpfSxCLnByb3RvdHlwZS5fZmx1c2g9ZnVuY3Rpb24oTyl7dmFyIHo9''@;'; put 'put ''bnVsbDt0cnl7dGhpcy5wdXNoKHRoaXMuZGlnZXN0KCkpfWNhdGNoKE4pe3o9Tn1PKHopfTt2YXIgdz10eXBlb2YgVWludDhBcnJheTwidSIsUD10eXBlb2YgQXJyYXlCdWZmZXI8InUiJiZ0eXBlb2YgVWludDhBcnJheTwidSImJkFycmF5QnVmZmVyLmlzVmlldyYmKEkucHJvdG90eXBlIGlu''@;'; put 'put ''c3RhbmNlb2YgVWludDhBcnJheXx8SS5UWVBFRF9BUlJBWV9TVVBQT1JUKTtCLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oTyx6KXtpZih0aGlzLl9maW5hbGl6ZWQpdGhyb3cgbmV3IEVycm9yKCJEaWdlc3QgYWxyZWFkeSBjYWxsZWQiKTtPPWZ1bmN0aW9uIEYoTyx6KXtpZihPIGluc3Rh''@;'; put 'put ''bmNlb2YgSSlyZXR1cm4gTztpZigic3RyaW5nIj09dHlwZW9mIE8pcmV0dXJuIEkuZnJvbShPLHopO2lmKFAmJkFycmF5QnVmZmVyLmlzVmlldyhPKSl7aWYoMD09PU8uYnl0ZUxlbmd0aClyZXR1cm4gSS5hbGxvYygwKTt2YXIgTj1JLmZyb20oTy5idWZmZXIsTy5ieXRlT2Zmc2V0LE8uYnl0''@;'; put 'put ''ZUxlbmd0aCk7aWYoTi5ieXRlTGVuZ3RoPT09Ty5ieXRlTGVuZ3RoKXJldHVybiBOfWlmKHcmJk8gaW5zdGFuY2VvZiBVaW50OEFycmF5fHxJLmlzQnVmZmVyKE8pJiZPLmNvbnN0cnVjdG9yJiYiZnVuY3Rpb24iPT10eXBlb2YgTy5jb25zdHJ1Y3Rvci5pc0J1ZmZlciYmTy5jb25zdHJ1Y3Rv''@;'; put 'put ''ci5pc0J1ZmZlcihPKSlyZXR1cm4gSS5mcm9tKE8pO3Rocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAiZGF0YSIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIHN0cmluZyBvciBhbiBpbnN0YW5jZSBvZiBCdWZmZXIsIFR5cGVkQXJyYXksIG9yIERhdGFWaWV3LicpfShPLHopO2Zvcih2YXIgTj10''@;'; put 'put ''aGlzLl9ibG9jayxMPTA7dGhpcy5fYmxvY2tPZmZzZXQrTy5sZW5ndGgtTD49dGhpcy5fYmxvY2tTaXplOyl7Zm9yKHZhciBLPXRoaXMuX2Jsb2NrT2Zmc2V0O0s8dGhpcy5fYmxvY2tTaXplOylOW0srK109T1tMKytdO3RoaXMuX3VwZGF0ZSgpLHRoaXMuX2Jsb2NrT2Zmc2V0PTB9Zm9yKDtM''@;'; put 'put ''PE8ubGVuZ3RoOylOW3RoaXMuX2Jsb2NrT2Zmc2V0KytdPU9bTCsrXTtmb3IodmFyIFU9MCxXPTgqTy5sZW5ndGg7Vz4wOysrVSl0aGlzLl9sZW5ndGhbVV0rPVcsKFc9dGhpcy5fbGVuZ3RoW1VdLzQyOTQ5NjcyOTZ8MCk+MCYmKHRoaXMuX2xlbmd0aFtVXS09NDI5NDk2NzI5NipXKTtyZXR1''@;'; put 'put ''cm4gdGhpc30sQi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiX3VwZGF0ZSBpcyBub3QgaW1wbGVtZW50ZWQiKX0sQi5wcm90b3R5cGUuZGlnZXN0PWZ1bmN0aW9uKE8pe2lmKHRoaXMuX2ZpbmFsaXplZCl0aHJvdyBuZXcgRXJyb3IoIkRpZ2VzdCBhbHJl''@;'; put 'put ''YWR5IGNhbGxlZCIpO3RoaXMuX2ZpbmFsaXplZD0hMDt2YXIgej10aGlzLl9kaWdlc3QoKTt2b2lkIDAhPT1PJiYoej16LnRvU3RyaW5nKE8pKSx0aGlzLl9ibG9jay5maWxsKDApLHRoaXMuX2Jsb2NrT2Zmc2V0PTA7Zm9yKHZhciBOPTA7Tjw0OysrTil0aGlzLl9sZW5ndGhbTl09MDtyZXR1''@;'; put 'put ''cm4gen0sQi5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiX2RpZ2VzdCBpcyBub3QgaW1wbGVtZW50ZWQiKX0sdWUuZXhwb3J0cz1CfSw1MjUyOToodWUsWCx5KT0+e3ZhciBJPVg7SS51dGlscz15KDY4MjgzKSxJLmNvbW1vbj15KDEyOTAxKSxJLnNoYT15''@;'; put 'put ''KDc4NTI4KSxJLnJpcGVtZD15KDE1MjgzKSxJLmhtYWM9eSgzNzE2MyksSS5zaGExPUkuc2hhLnNoYTEsSS5zaGEyNTY9SS5zaGEuc2hhMjU2LEkuc2hhMjI0PUkuc2hhLnNoYTIyNCxJLnNoYTM4ND1JLnNoYS5zaGEzODQsSS5zaGE1MTI9SS5zaGEuc2hhNTEyLEkucmlwZW1kMTYwPUkucmlw''@;'; put 'put ''ZW1kLnJpcGVtZDE2MH0sMTI5MDE6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg2ODI4MyksXz15KDM5MjEwKTtmdW5jdGlvbiBnKCl7dGhpcy5wZW5kaW5nPW51bGwsdGhpcy5wZW5kaW5nVG90YWw9MCx0aGlzLmJsb2NrU2l6ZT10aGlzLmNvbnN0cnVjdG9yLmJsb2NrU2l6ZSx0''@;'; put 'put ''aGlzLm91dFNpemU9dGhpcy5jb25zdHJ1Y3Rvci5vdXRTaXplLHRoaXMuaG1hY1N0cmVuZ3RoPXRoaXMuY29uc3RydWN0b3IuaG1hY1N0cmVuZ3RoLHRoaXMucGFkTGVuZ3RoPXRoaXMuY29uc3RydWN0b3IucGFkTGVuZ3RoLzgsdGhpcy5lbmRpYW49ImJpZyIsdGhpcy5fZGVsdGE4PXRoaXMu''@;'; put 'put ''YmxvY2tTaXplLzgsdGhpcy5fZGVsdGEzMj10aGlzLmJsb2NrU2l6ZS8zMn1YLkJsb2NrSGFzaD1nLGcucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbih3LFApe2lmKHc9SS50b0FycmF5KHcsUCksdGhpcy5wZW5kaW5nPXRoaXMucGVuZGluZz90aGlzLnBlbmRpbmcuY29uY2F0KHcpOncsdGhp''@;'; put 'put ''cy5wZW5kaW5nVG90YWwrPXcubGVuZ3RoLHRoaXMucGVuZGluZy5sZW5ndGg+PXRoaXMuX2RlbHRhOCl7dmFyIEY9KHc9dGhpcy5wZW5kaW5nKS5sZW5ndGgldGhpcy5fZGVsdGE4O3RoaXMucGVuZGluZz13LnNsaWNlKHcubGVuZ3RoLUYsdy5sZW5ndGgpLDA9PT10aGlzLnBlbmRpbmcubGVu''@;'; put 'put ''Z3RoJiYodGhpcy5wZW5kaW5nPW51bGwpLHc9SS5qb2luMzIodywwLHcubGVuZ3RoLUYsdGhpcy5lbmRpYW4pO2Zvcih2YXIgTz0wO088dy5sZW5ndGg7Tys9dGhpcy5fZGVsdGEzMil0aGlzLl91cGRhdGUodyxPLE8rdGhpcy5fZGVsdGEzMil9cmV0dXJuIHRoaXN9LGcucHJvdG90eXBlLmRp''@;'; put 'put ''Z2VzdD1mdW5jdGlvbih3KXtyZXR1cm4gdGhpcy51cGRhdGUodGhpcy5fcGFkKCkpLF8obnVsbD09PXRoaXMucGVuZGluZyksdGhpcy5fZGlnZXN0KHcpfSxnLnByb3RvdHlwZS5fcGFkPWZ1bmN0aW9uKCl7dmFyIHc9dGhpcy5wZW5kaW5nVG90YWwsUD10aGlzLl9kZWx0YTgsRj1QLSh3K3Ro''@;'; put 'put ''aXMucGFkTGVuZ3RoKSVQLE89bmV3IEFycmF5KEYrdGhpcy5wYWRMZW5ndGgpO09bMF09MTI4O2Zvcih2YXIgej0xO3o8Rjt6KyspT1t6XT0wO2lmKHc8PD0zLCJiaWciPT09dGhpcy5lbmRpYW4pe2Zvcih2YXIgTj04O048dGhpcy5wYWRMZW5ndGg7TisrKU9beisrXT0wO09beisrXT0wLE9b''@;'; put 'put ''eisrXT0wLE9beisrXT0wLE9beisrXT0wLE9beisrXT13Pj4+MjQmMjU1LE9beisrXT13Pj4+MTYmMjU1LE9beisrXT13Pj4+OCYyNTUsT1t6KytdPTI1NSZ3fWVsc2UgZm9yKE9beisrXT0yNTUmdyxPW3orK109dz4+PjgmMjU1LE9beisrXT13Pj4+MTYmMjU1LE9beisrXT13Pj4+MjQmMjU1''@;'; put 'put ''LE9beisrXT0wLE9beisrXT0wLE9beisrXT0wLE9beisrXT0wLE49ODtOPHRoaXMucGFkTGVuZ3RoO04rKylPW3orK109MDtyZXR1cm4gT319LDM3MTYzOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNjgyODMpLF89eSgzOTIxMCk7ZnVuY3Rpb24gZyhCLHcsUCl7aWYoISh0aGlz''@;'; put 'put ''IGluc3RhbmNlb2YgZykpcmV0dXJuIG5ldyBnKEIsdyxQKTt0aGlzLkhhc2g9Qix0aGlzLmJsb2NrU2l6ZT1CLmJsb2NrU2l6ZS84LHRoaXMub3V0U2l6ZT1CLm91dFNpemUvOCx0aGlzLmlubmVyPW51bGwsdGhpcy5vdXRlcj1udWxsLHRoaXMuX2luaXQoSS50b0FycmF5KHcsUCkpfXVlLmV4''@;'; put 'put ''cG9ydHM9ZyxnLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbih3KXt3Lmxlbmd0aD50aGlzLmJsb2NrU2l6ZSYmKHc9KG5ldyB0aGlzLkhhc2gpLnVwZGF0ZSh3KS5kaWdlc3QoKSksXyh3Lmxlbmd0aDw9dGhpcy5ibG9ja1NpemUpO2Zvcih2YXIgUD13Lmxlbmd0aDtQPHRoaXMuYmxvY2tTaXpl''@;'; put 'put ''O1ArKyl3LnB1c2goMCk7Zm9yKFA9MDtQPHcubGVuZ3RoO1ArKyl3W1BdXj01NDtmb3IodGhpcy5pbm5lcj0obmV3IHRoaXMuSGFzaCkudXBkYXRlKHcpLFA9MDtQPHcubGVuZ3RoO1ArKyl3W1BdXj0xMDY7dGhpcy5vdXRlcj0obmV3IHRoaXMuSGFzaCkudXBkYXRlKHcpfSxnLnByb3RvdHlw''@;'; put 'put ''ZS51cGRhdGU9ZnVuY3Rpb24odyxQKXtyZXR1cm4gdGhpcy5pbm5lci51cGRhdGUodyxQKSx0aGlzfSxnLnByb3RvdHlwZS5kaWdlc3Q9ZnVuY3Rpb24odyl7cmV0dXJuIHRoaXMub3V0ZXIudXBkYXRlKHRoaXMuaW5uZXIuZGlnZXN0KCkpLHRoaXMub3V0ZXIuZGlnZXN0KHcpfX0sMTUyODM6''@;'; put 'put ''KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg2ODI4MyksXz15KDEyOTAxKSxnPUkucm90bDMyLEI9SS5zdW0zMix3PUkuc3VtMzJfMyxQPUkuc3VtMzJfNCxGPV8uQmxvY2tIYXNoO2Z1bmN0aW9uIE8oKXtpZighKHRoaXMgaW5zdGFuY2VvZiBPKSlyZXR1cm4gbmV3IE87Ri5jYWxs''@;'; put 'put ''KHRoaXMpLHRoaXMuaD1bMTczMjU4NDE5Myw0MDIzMjMzNDE3LDI1NjIzODMxMDIsMjcxNzMzODc4LDMyODUzNzc1MjBdLHRoaXMuZW5kaWFuPSJsaXR0bGUifWZ1bmN0aW9uIHoocSxlZSxKLG5lKXtyZXR1cm4gcTw9MTU/ZWVeSl5uZTpxPD0zMT9lZSZKfH5lZSZuZTpxPD00Nz8oZWV8fkop''@;'; put 'put ''Xm5lOnE8PTYzP2VlJm5lfEomfm5lOmVlXihKfH5uZSl9ZnVuY3Rpb24gTChxKXtyZXR1cm4gcTw9MTU/MTM1MjgyOTkyNjpxPD0zMT8xNTQ4NjAzNjg0OnE8PTQ3PzE4MzYwNzI2OTE6cTw9NjM/MjA1Mzk5NDIxNzowfUkuaW5oZXJpdHMoTyxGKSxYLnJpcGVtZDE2MD1PLE8uYmxvY2tTaXpl''@;'; put 'put ''PTUxMixPLm91dFNpemU9MTYwLE8uaG1hY1N0cmVuZ3RoPTE5MixPLnBhZExlbmd0aD02NCxPLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKGVlLEope2Zvcih2YXIgbmU9dGhpcy5oWzBdLGllPXRoaXMuaFsxXSxsZT10aGlzLmhbMl0sbWU9dGhpcy5oWzNdLF9lPXRoaXMuaFs0XSxUZT1u''@;'; put 'put ''ZSxTZT1pZSxqZT1sZSxWPW1lLHA9X2UsYj0wO2I8ODA7YisrKXt2YXIgeD1CKGcoUChuZSx6KGIsaWUsbGUsbWUpLGVlW0tbYl0rSl0sKHE9Yik8PTE1PzA6cTw9MzE/MTUxODUwMDI0OTpxPD00Nz8xODU5Nzc1MzkzOnE8PTYzPzI0MDA5NTk3MDg6Mjg0MDg1MzgzOCksV1tiXSksX2UpO25l''@;'; put 'put ''PV9lLF9lPW1lLG1lPWcobGUsMTApLGxlPWllLGllPXgseD1CKGcoUChUZSx6KDc5LWIsU2UsamUsViksZWVbVVtiXStKXSxMKGIpKSxZW2JdKSxwKSxUZT1wLHA9VixWPWcoamUsMTApLGplPVNlLFNlPXh9dmFyIHE7eD13KHRoaXMuaFsxXSxsZSxWKSx0aGlzLmhbMV09dyh0aGlzLmhbMl0s''@;'; put 'put ''bWUscCksdGhpcy5oWzJdPXcodGhpcy5oWzNdLF9lLFRlKSx0aGlzLmhbM109dyh0aGlzLmhbNF0sbmUsU2UpLHRoaXMuaFs0XT13KHRoaXMuaFswXSxpZSxqZSksdGhpcy5oWzBdPXh9LE8ucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24oZWUpe3JldHVybiJoZXgiPT09ZWU/SS50b0hleDMy''@;'; put 'put ''KHRoaXMuaCwibGl0dGxlIik6SS5zcGxpdDMyKHRoaXMuaCwibGl0dGxlIil9O3ZhciBLPVswLDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDcsNCwxMywxLDEwLDYsMTUsMywxMiwwLDksNSwyLDE0LDExLDgsMywxMCwxNCw0LDksMTUsOCwxLDIsNywwLDYsMTMsMTEsNSwx''@;'; put 'put ''MiwxLDksMTEsMTAsMCw4LDEyLDQsMTMsMyw3LDE1LDE0LDUsNiwyLDQsMCw1LDksNywxMiwyLDEwLDE0LDEsMyw4LDExLDYsMTUsMTNdLFU9WzUsMTQsNywwLDksMiwxMSw0LDEzLDYsMTUsOCwxLDEwLDMsMTIsNiwxMSwzLDcsMCwxMyw1LDEwLDE0LDE1LDgsMTIsNCw5LDEsMiwxNSw1LDEs''@;'; put 'put ''Myw3LDE0LDYsOSwxMSw4LDEyLDIsMTAsMCw0LDEzLDgsNiw0LDEsMywxMSwxNSwwLDUsMTIsMiwxMyw5LDcsMTAsMTQsMTIsMTUsMTAsNCwxLDUsOCw3LDYsMiwxMywxNCwwLDMsOSwxMV0sVz1bMTEsMTQsMTUsMTIsNSw4LDcsOSwxMSwxMywxNCwxNSw2LDcsOSw4LDcsNiw4LDEzLDExLDks''@;'; put 'put ''NywxNSw3LDEyLDE1LDksMTEsNywxMywxMiwxMSwxMyw2LDcsMTQsOSwxMywxNSwxNCw4LDEzLDYsNSwxMiw3LDUsMTEsMTIsMTQsMTUsMTQsMTUsOSw4LDksMTQsNSw2LDgsNiw1LDEyLDksMTUsNSwxMSw2LDgsMTMsMTIsNSwxMiwxMywxNCwxMSw4LDUsNl0sWT1bOCw5LDksMTEsMTMsMTUs''@;'; put 'put ''MTUsNSw3LDcsOCwxMSwxNCwxNCwxMiw2LDksMTMsMTUsNywxMiw4LDksMTEsNyw3LDEyLDcsNiwxNSwxMywxMSw5LDcsMTUsMTEsOCw2LDYsMTQsMTIsMTMsNSwxNCwxMywxMyw3LDUsMTUsNSw4LDExLDE0LDE0LDYsMTQsNiw5LDEyLDksMTIsNSwxNSw4LDgsNSwxMiw5LDEyLDUsMTQsNiw4''@;'; put 'put ''LDEzLDYsNSwxNSwxMywxMSwxMV19LDc4NTI4Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO1guc2hhMT15KDMzNDY4KSxYLnNoYTIyND15KDU1NjMpLFguc2hhMjU2PXkoMjcxMzgpLFguc2hhMzg0PXkoOTM4OTgpLFguc2hhNTEyPXkoMTA4MjcpfSwzMzQ2ODoodWUsWCx5KT0+eyJ1c2Ugc3Ry''@;'; put 'put ''aWN0Ijt2YXIgST15KDY4MjgzKSxfPXkoMTI5MDEpLGc9eSg5NTU0MiksQj1JLnJvdGwzMix3PUkuc3VtMzIsUD1JLnN1bTMyXzUsRj1nLmZ0XzEsTz1fLkJsb2NrSGFzaCx6PVsxNTE4NTAwMjQ5LDE4NTk3NzUzOTMsMjQwMDk1OTcwOCwzMzk1NDY5NzgyXTtmdW5jdGlvbiBOKCl7aWYoISh0''@;'; put 'put ''aGlzIGluc3RhbmNlb2YgTikpcmV0dXJuIG5ldyBOO08uY2FsbCh0aGlzKSx0aGlzLmg9WzE3MzI1ODQxOTMsNDAyMzIzMzQxNywyNTYyMzgzMTAyLDI3MTczMzg3OCwzMjg1Mzc3NTIwXSx0aGlzLlc9bmV3IEFycmF5KDgwKX1JLmluaGVyaXRzKE4sTyksdWUuZXhwb3J0cz1OLE4uYmxvY2tT''@;'; put 'put ''aXplPTUxMixOLm91dFNpemU9MTYwLE4uaG1hY1N0cmVuZ3RoPTgwLE4ucGFkTGVuZ3RoPTY0LE4ucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oSyxVKXtmb3IodmFyIFc9dGhpcy5XLFk9MDtZPDE2O1krKylXW1ldPUtbVStZXTtmb3IoO1k8Vy5sZW5ndGg7WSsrKVdbWV09QihXW1ktM11e''@;'; put 'put ''V1tZLThdXldbWS0xNF1eV1tZLTE2XSwxKTt2YXIgcT10aGlzLmhbMF0sZWU9dGhpcy5oWzFdLEo9dGhpcy5oWzJdLG5lPXRoaXMuaFszXSxpZT10aGlzLmhbNF07Zm9yKFk9MDtZPFcubGVuZ3RoO1krKyl7dmFyIGxlPX5+KFkvMjApLG1lPVAoQihxLDUpLEYobGUsZWUsSixuZSksaWUsV1tZ''@;'; put 'put ''XSx6W2xlXSk7aWU9bmUsbmU9SixKPUIoZWUsMzApLGVlPXEscT1tZX10aGlzLmhbMF09dyh0aGlzLmhbMF0scSksdGhpcy5oWzFdPXcodGhpcy5oWzFdLGVlKSx0aGlzLmhbMl09dyh0aGlzLmhbMl0sSiksdGhpcy5oWzNdPXcodGhpcy5oWzNdLG5lKSx0aGlzLmhbNF09dyh0aGlzLmhbNF0s''@;'; put 'put ''aWUpfSxOLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKEspe3JldHVybiJoZXgiPT09Sz9JLnRvSGV4MzIodGhpcy5oLCJiaWciKTpJLnNwbGl0MzIodGhpcy5oLCJiaWciKX19LDU1NjM6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg2ODI4MyksXz15KDI3MTM4KTtmdW5jdGlv''@;'; put 'put ''biBnKCl7aWYoISh0aGlzIGluc3RhbmNlb2YgZykpcmV0dXJuIG5ldyBnO18uY2FsbCh0aGlzKSx0aGlzLmg9WzMyMzgzNzEwMzIsOTE0MTUwNjYzLDgxMjcwMjk5OSw0MTQ0OTEyNjk3LDQyOTA3NzU4NTcsMTc1MDYwMzAyNSwxNjk0MDc2ODM5LDMyMDQwNzU0MjhdfUkuaW5oZXJpdHMoZyxf''@;'; put 'put ''KSx1ZS5leHBvcnRzPWcsZy5ibG9ja1NpemU9NTEyLGcub3V0U2l6ZT0yMjQsZy5obWFjU3RyZW5ndGg9MTkyLGcucGFkTGVuZ3RoPTY0LGcucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24odyl7cmV0dXJuImhleCI9PT13P0kudG9IZXgzMih0aGlzLmguc2xpY2UoMCw3KSwiYmlnIik6SS5z''@;'; put 'put ''cGxpdDMyKHRoaXMuaC5zbGljZSgwLDcpLCJiaWciKX19LDI3MTM4Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNjgyODMpLF89eSgxMjkwMSksZz15KDk1NTQyKSxCPXkoMzkyMTApLHc9SS5zdW0zMixQPUkuc3VtMzJfNCxGPUkuc3VtMzJfNSxPPWcuY2gzMix6PWcubWFqMzIs''@;'; put 'put ''Tj1nLnMwXzI1NixMPWcuczFfMjU2LEs9Zy5nMF8yNTYsVT1nLmcxXzI1NixXPV8uQmxvY2tIYXNoLFk9WzExMTYzNTI0MDgsMTg5OTQ0NzQ0MSwzMDQ5MzIzNDcxLDM5MjEwMDk1NzMsOTYxOTg3MTYzLDE1MDg5NzA5OTMsMjQ1MzYzNTc0OCwyODcwNzYzMjIxLDM2MjQzODEwODAsMzEwNTk4''@;'; put 'put ''NDAxLDYwNzIyNTI3OCwxNDI2ODgxOTg3LDE5MjUwNzgzODgsMjE2MjA3ODIwNiwyNjE0ODg4MTAzLDMyNDgyMjI1ODAsMzgzNTM5MDQwMSw0MDIyMjI0Nzc0LDI2NDM0NzA3OCw2MDQ4MDc2MjgsNzcwMjU1OTgzLDEyNDkxNTAxMjIsMTU1NTA4MTY5MiwxOTk2MDY0OTg2LDI1NTQyMjA4ODIs''@;'; put 'put ''MjgyMTgzNDM0OSwyOTUyOTk2ODA4LDMyMTAzMTM2NzEsMzMzNjU3MTg5MSwzNTg0NTI4NzExLDExMzkyNjk5MywzMzgyNDE4OTUsNjY2MzA3MjA1LDc3MzUyOTkxMiwxMjk0NzU3MzcyLDEzOTYxODIyOTEsMTY5NTE4MzcwMCwxOTg2NjYxMDUxLDIxNzcwMjYzNTAsMjQ1Njk1NjAzNywyNzMw''@;'; put 'put ''NDg1OTIxLDI4MjAzMDI0MTEsMzI1OTczMDgwMCwzMzQ1NzY0NzcxLDM1MTYwNjU4MTcsMzYwMDM1MjgwNCw0MDk0NTcxOTA5LDI3NTQyMzM0NCw0MzAyMjc3MzQsNTA2OTQ4NjE2LDY1OTA2MDU1Niw4ODM5OTc4NzcsOTU4MTM5NTcxLDEzMjI4MjIyMTgsMTUzNzAwMjA2MywxNzQ3ODczNzc5''@;'; put 'put ''LDE5NTU1NjIyMjIsMjAyNDEwNDgxNSwyMjI3NzMwNDUyLDIzNjE4NTI0MjQsMjQyODQzNjQ3NCwyNzU2NzM0MTg3LDMyMDQwMzE0NzksMzMyOTMyNTI5OF07ZnVuY3Rpb24gcSgpe2lmKCEodGhpcyBpbnN0YW5jZW9mIHEpKXJldHVybiBuZXcgcTtXLmNhbGwodGhpcyksdGhpcy5oPVsxNzc5''@;'; put 'put ''MDMzNzAzLDMxNDQxMzQyNzcsMTAxMzkwNDI0MiwyNzczNDgwNzYyLDEzNTk4OTMxMTksMjYwMDgyMjkyNCw1Mjg3MzQ2MzUsMTU0MTQ1OTIyNV0sdGhpcy5rPVksdGhpcy5XPW5ldyBBcnJheSg2NCl9SS5pbmhlcml0cyhxLFcpLHVlLmV4cG9ydHM9cSxxLmJsb2NrU2l6ZT01MTIscS5vdXRT''@;'; put 'put ''aXplPTI1NixxLmhtYWNTdHJlbmd0aD0xOTIscS5wYWRMZW5ndGg9NjQscS5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihKLG5lKXtmb3IodmFyIGllPXRoaXMuVyxsZT0wO2xlPDE2O2xlKyspaWVbbGVdPUpbbmUrbGVdO2Zvcig7bGU8aWUubGVuZ3RoO2xlKyspaWVbbGVdPVAoVShpZVts''@;'; put 'put ''ZS0yXSksaWVbbGUtN10sSyhpZVtsZS0xNV0pLGllW2xlLTE2XSk7dmFyIG1lPXRoaXMuaFswXSxfZT10aGlzLmhbMV0sVGU9dGhpcy5oWzJdLFNlPXRoaXMuaFszXSxqZT10aGlzLmhbNF0sVj10aGlzLmhbNV0scD10aGlzLmhbNl0sYj10aGlzLmhbN107Zm9yKEIodGhpcy5rLmxlbmd0aD09''@;'; put 'put ''PWllLmxlbmd0aCksbGU9MDtsZTxpZS5sZW5ndGg7bGUrKyl7dmFyIHg9RihiLEwoamUpLE8oamUsVixwKSx0aGlzLmtbbGVdLGllW2xlXSksQz13KE4obWUpLHoobWUsX2UsVGUpKTtiPXAscD1WLFY9amUsamU9dyhTZSx4KSxTZT1UZSxUZT1fZSxfZT1tZSxtZT13KHgsQyl9dGhpcy5oWzBd''@;'; put 'put ''PXcodGhpcy5oWzBdLG1lKSx0aGlzLmhbMV09dyh0aGlzLmhbMV0sX2UpLHRoaXMuaFsyXT13KHRoaXMuaFsyXSxUZSksdGhpcy5oWzNdPXcodGhpcy5oWzNdLFNlKSx0aGlzLmhbNF09dyh0aGlzLmhbNF0samUpLHRoaXMuaFs1XT13KHRoaXMuaFs1XSxWKSx0aGlzLmhbNl09dyh0aGlzLmhb''@;'; put 'put ''Nl0scCksdGhpcy5oWzddPXcodGhpcy5oWzddLGIpfSxxLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKEope3JldHVybiJoZXgiPT09Sj9JLnRvSGV4MzIodGhpcy5oLCJiaWciKTpJLnNwbGl0MzIodGhpcy5oLCJiaWciKX19LDkzODk4Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJ''@;'; put 'put ''PXkoNjgyODMpLF89eSgxMDgyNyk7ZnVuY3Rpb24gZygpe2lmKCEodGhpcyBpbnN0YW5jZW9mIGcpKXJldHVybiBuZXcgZztfLmNhbGwodGhpcyksdGhpcy5oPVszNDE4MDcwMzY1LDMyMzgzNzEwMzIsMTY1NDI3MDI1MCw5MTQxNTA2NjMsMjQzODUyOTM3MCw4MTI3MDI5OTksMzU1NDYyMzYw''@;'; put 'put ''LDQxNDQ5MTI2OTcsMTczMTQwNTQxNSw0MjkwNzc1ODU3LDIzOTQxODAyMzEsMTc1MDYwMzAyNSwzNjc1MDA4NTI1LDE2OTQwNzY4MzksMTIwMzA2MjgxMywzMjA0MDc1NDI4XX1JLmluaGVyaXRzKGcsXyksdWUuZXhwb3J0cz1nLGcuYmxvY2tTaXplPTEwMjQsZy5vdXRTaXplPTM4NCxnLmht''@;'; put 'put ''YWNTdHJlbmd0aD0xOTIsZy5wYWRMZW5ndGg9MTI4LGcucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24odyl7cmV0dXJuImhleCI9PT13P0kudG9IZXgzMih0aGlzLmguc2xpY2UoMCwxMiksImJpZyIpOkkuc3BsaXQzMih0aGlzLmguc2xpY2UoMCwxMiksImJpZyIpfX0sMTA4Mjc6KHVlLFgs''@;'; put 'put ''eSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg2ODI4MyksXz15KDEyOTAxKSxnPXkoMzkyMTApLEI9SS5yb3RyNjRfaGksdz1JLnJvdHI2NF9sbyxQPUkuc2hyNjRfaGksRj1JLnNocjY0X2xvLE89SS5zdW02NCx6PUkuc3VtNjRfaGksTj1JLnN1bTY0X2xvLEw9SS5zdW02NF80X2hpLEs9SS5z''@;'; put 'put ''dW02NF80X2xvLFU9SS5zdW02NF81X2hpLFc9SS5zdW02NF81X2xvLFk9Xy5CbG9ja0hhc2gscT1bMTExNjM1MjQwOCwzNjA5NzY3NDU4LDE4OTk0NDc0NDEsNjAyODkxNzI1LDMwNDkzMjM0NzEsMzk2NDQ4NDM5OSwzOTIxMDA5NTczLDIxNzMyOTU1NDgsOTYxOTg3MTYzLDQwODE2Mjg0NzIs''@;'; put 'put ''MTUwODk3MDk5MywzMDUzODM0MjY1LDI0NTM2MzU3NDgsMjkzNzY3MTU3OSwyODcwNzYzMjIxLDM2NjQ2MDk1NjAsMzYyNDM4MTA4MCwyNzM0ODgzMzk0LDMxMDU5ODQwMSwxMTY0OTk2NTQyLDYwNzIyNTI3OCwxMzIzNjEwNzY0LDE0MjY4ODE5ODcsMzU5MDMwNDk5NCwxOTI1MDc4Mzg4LDQw''@;'; put 'put ''NjgxODIzODMsMjE2MjA3ODIwNiw5OTEzMzYxMTMsMjYxNDg4ODEwMyw2MzM4MDMzMTcsMzI0ODIyMjU4MCwzNDc5Nzc0ODY4LDM4MzUzOTA0MDEsMjY2NjYxMzQ1OCw0MDIyMjI0Nzc0LDk0NDcxMTEzOSwyNjQzNDcwNzgsMjM0MTI2Mjc3Myw2MDQ4MDc2MjgsMjAwNzgwMDkzMyw3NzAyNTU5''@;'; put 'put ''ODMsMTQ5NTk5MDkwMSwxMjQ5MTUwMTIyLDE4NTY0MzEyMzUsMTU1NTA4MTY5MiwzMTc1MjE4MTMyLDE5OTYwNjQ5ODYsMjE5ODk1MDgzNywyNTU0MjIwODgyLDM5OTk3MTkzMzksMjgyMTgzNDM0OSw3NjY3ODQwMTYsMjk1Mjk5NjgwOCwyNTY2NTk0ODc5LDMyMTAzMTM2NzEsMzIwMzMzNzk1''@;'; put 'put ''NiwzMzM2NTcxODkxLDEwMzQ0NTcwMjYsMzU4NDUyODcxMSwyNDY2OTQ4OTAxLDExMzkyNjk5MywzNzU4MzI2MzgzLDMzODI0MTg5NSwxNjg3MTc5MzYsNjY2MzA3MjA1LDExODgxNzk5NjQsNzczNTI5OTEyLDE1NDYwNDU3MzQsMTI5NDc1NzM3MiwxNTIyODA1NDg1LDEzOTYxODIyOTEsMjY0''@;'; put 'put ''MzgzMzgyMywxNjk1MTgzNzAwLDIzNDM1MjczOTAsMTk4NjY2MTA1MSwxMDE0NDc3NDgwLDIxNzcwMjYzNTAsMTIwNjc1OTE0MiwyNDU2OTU2MDM3LDM0NDA3NzYyNywyNzMwNDg1OTIxLDEyOTA4NjM0NjAsMjgyMDMwMjQxMSwzMTU4NDU0MjczLDMyNTk3MzA4MDAsMzUwNTk1MjY1NywzMzQ1''@;'; put 'put ''NzY0NzcxLDEwNjIxNzAwOCwzNTE2MDY1ODE3LDM2MDYwMDgzNDQsMzYwMDM1MjgwNCwxNDMyNzI1Nzc2LDQwOTQ1NzE5MDksMTQ2NzAzMTU5NCwyNzU0MjMzNDQsODUxMTY5NzIwLDQzMDIyNzczNCwzMTAwODIzNzUyLDUwNjk0ODYxNiwxMzYzMjU4MTk1LDY1OTA2MDU1NiwzNzUwNjg1NTkz''@;'; put 'put ''LDg4Mzk5Nzg3NywzNzg1MDUwMjgwLDk1ODEzOTU3MSwzMzE4MzA3NDI3LDEzMjI4MjIyMTgsMzgxMjcyMzQwMywxNTM3MDAyMDYzLDIwMDMwMzQ5OTUsMTc0Nzg3Mzc3OSwzNjAyMDM2ODk5LDE5NTU1NjIyMjIsMTU3NTk5MDAxMiwyMDI0MTA0ODE1LDExMjU1OTI5MjgsMjIyNzczMDQ1Miwy''@;'; put 'put ''NzE2OTA0MzA2LDIzNjE4NTI0MjQsNDQyNzc2MDQ0LDI0Mjg0MzY0NzQsNTkzNjk4MzQ0LDI3NTY3MzQxODcsMzczMzExMDI0OSwzMjA0MDMxNDc5LDI5OTkzNTE1NzMsMzMyOTMyNTI5OCwzODE1OTIwNDI3LDMzOTE1Njk2MTQsMzkyODM4MzkwMCwzNTE1MjY3MjcxLDU2NjI4MDcxMSwzOTQw''@;'; put 'put ''MTg3NjA2LDM0NTQwNjk1MzQsNDExODYzMDI3MSw0MDAwMjM5OTkyLDExNjQxODQ3NCwxOTE0MTM4NTU0LDE3NDI5MjQyMSwyNzMxMDU1MjcwLDI4OTM4MDM1NiwzMjAzOTkzMDA2LDQ2MDM5MzI2OSwzMjA2MjAzMTUsNjg1NDcxNzMzLDU4NzQ5NjgzNiw4NTIxNDI5NzEsMTA4Njc5Mjg1MSwx''@;'; put 'put ''MDE3MDM2Mjk4LDM2NTU0MzEwMCwxMTI2MDAwNTgwLDI2MTgyOTc2NzYsMTI4ODAzMzQ3MCwzNDA5ODU1MTU4LDE1MDE1MDU5NDgsNDIzNDUwOTg2NiwxNjA3MTY3OTE1LDk4NzE2NzQ2OCwxODE2NDAyMzE2LDEyNDYxODk1OTFdO2Z1bmN0aW9uIGVlKCl7aWYoISh0aGlzIGluc3RhbmNlb2Yg''@;'; put 'put ''ZWUpKXJldHVybiBuZXcgZWU7WS5jYWxsKHRoaXMpLHRoaXMuaD1bMTc3OTAzMzcwMyw0MDg5MjM1NzIwLDMxNDQxMzQyNzcsMjIyNzg3MzU5NSwxMDEzOTA0MjQyLDQyNzExNzU3MjMsMjc3MzQ4MDc2MiwxNTk1NzUwMTI5LDEzNTk4OTMxMTksMjkxNzU2NTEzNywyNjAwODIyOTI0LDcyNTUx''@;'; put 'put ''MTE5OSw1Mjg3MzQ2MzUsNDIxNTM4OTU0NywxNTQxNDU5MjI1LDMyNzAzMzIwOV0sdGhpcy5rPXEsdGhpcy5XPW5ldyBBcnJheSgxNjApfWZ1bmN0aW9uIEooeCxDLFQsSCxqKXt2YXIgRT14JlRefngmajtyZXR1cm4gRTwwJiYoRSs9NDI5NDk2NzI5NiksRX1mdW5jdGlvbiBuZSh4LEMsVCxI''@;'; put 'put ''LGosRSl7dmFyIG09QyZIXn5DJkU7cmV0dXJuIG08MCYmKG0rPTQyOTQ5NjcyOTYpLG19ZnVuY3Rpb24gaWUoeCxDLFQsSCxqKXt2YXIgRT14JlReeCZqXlQmajtyZXR1cm4gRTwwJiYoRSs9NDI5NDk2NzI5NiksRX1mdW5jdGlvbiBsZSh4LEMsVCxILGosRSl7dmFyIG09QyZIXkMmRV5IJkU7''@;'; put 'put ''cmV0dXJuIG08MCYmKG0rPTQyOTQ5NjcyOTYpLG19ZnVuY3Rpb24gbWUoeCxDKXt2YXIgRT1CKHgsQywyOCleQihDLHgsMileQihDLHgsNyk7cmV0dXJuIEU8MCYmKEUrPTQyOTQ5NjcyOTYpLEV9ZnVuY3Rpb24gX2UoeCxDKXt2YXIgRT13KHgsQywyOCledyhDLHgsMiledyhDLHgsNyk7cmV0''@;'; put 'put ''dXJuIEU8MCYmKEUrPTQyOTQ5NjcyOTYpLEV9ZnVuY3Rpb24gVGUoeCxDKXt2YXIgRT1CKHgsQywxNCleQih4LEMsMTgpXkIoQyx4LDkpO3JldHVybiBFPDAmJihFKz00Mjk0OTY3Mjk2KSxFfWZ1bmN0aW9uIFNlKHgsQyl7dmFyIEU9dyh4LEMsMTQpXncoeCxDLDE4KV53KEMseCw5KTtyZXR1''@;'; put 'put ''cm4gRTwwJiYoRSs9NDI5NDk2NzI5NiksRX1mdW5jdGlvbiBqZSh4LEMpe3ZhciBFPUIoeCxDLDEpXkIoeCxDLDgpXlAoeCxDLDcpO3JldHVybiBFPDAmJihFKz00Mjk0OTY3Mjk2KSxFfWZ1bmN0aW9uIFYoeCxDKXt2YXIgRT13KHgsQywxKV53KHgsQyw4KV5GKHgsQyw3KTtyZXR1cm4gRTww''@;'; put 'put ''JiYoRSs9NDI5NDk2NzI5NiksRX1mdW5jdGlvbiBwKHgsQyl7dmFyIEU9Qih4LEMsMTkpXkIoQyx4LDI5KV5QKHgsQyw2KTtyZXR1cm4gRTwwJiYoRSs9NDI5NDk2NzI5NiksRX1mdW5jdGlvbiBiKHgsQyl7dmFyIEU9dyh4LEMsMTkpXncoQyx4LDI5KV5GKHgsQyw2KTtyZXR1cm4gRTwwJiYo''@;'; put 'put ''RSs9NDI5NDk2NzI5NiksRX1JLmluaGVyaXRzKGVlLFkpLHVlLmV4cG9ydHM9ZWUsZWUuYmxvY2tTaXplPTEwMjQsZWUub3V0U2l6ZT01MTIsZWUuaG1hY1N0cmVuZ3RoPTE5MixlZS5wYWRMZW5ndGg9MTI4LGVlLnByb3RvdHlwZS5fcHJlcGFyZUJsb2NrPWZ1bmN0aW9uKEMsVCl7Zm9yKHZh''@;'; put 'put ''ciBIPXRoaXMuVyxqPTA7ajwzMjtqKyspSFtqXT1DW1Qral07Zm9yKDtqPEgubGVuZ3RoO2orPTIpe3ZhciBFPXAoSFtqLTRdLEhbai0zXSksbT1iKEhbai00XSxIW2otM10pLEE9SFtqLTE0XSxhZT1IW2otMTNdLHRlPWplKEhbai0zMF0sSFtqLTI5XSksc2U9VihIW2otMzBdLEhbai0yOV0p''@;'; put 'put ''LHdlPUhbai0zMl0sVWU9SFtqLTMxXTtIW2pdPUwoRSxtLEEsYWUsdGUsc2Usd2UsVWUpLEhbaisxXT1LKEUsbSxBLGFlLHRlLHNlLHdlLFVlKX19LGVlLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKEMsVCl7dGhpcy5fcHJlcGFyZUJsb2NrKEMsVCk7dmFyIEg9dGhpcy5XLGo9dGhpcy5o''@;'; put 'put ''WzBdLEU9dGhpcy5oWzFdLG09dGhpcy5oWzJdLEE9dGhpcy5oWzNdLGFlPXRoaXMuaFs0XSx0ZT10aGlzLmhbNV0sc2U9dGhpcy5oWzZdLHdlPXRoaXMuaFs3XSxVZT10aGlzLmhbOF0sSmU9dGhpcy5oWzldLG90PXRoaXMuaFsxMF0seGU9dGhpcy5oWzExXSx2ZT10aGlzLmhbMTJdLFhlPXRo''@;'; put 'put ''aXMuaFsxM10semU9dGhpcy5oWzE0XSxEZT10aGlzLmhbMTVdO2codGhpcy5rLmxlbmd0aD09PUgubGVuZ3RoKTtmb3IodmFyIEZlPTA7RmU8SC5sZW5ndGg7RmUrPTIpe3ZhciBPZT16ZSxJZT1EZSxWZT1UZShVZSxKZSksa2U9U2UoVWUsSmUpLEFlPUooVWUsMCxvdCwwLHZlKSxfdD1uZSgw''@;'; put 'put ''LEplLDAseGUsMCxYZSksbnQ9dGhpcy5rW0ZlXSxRZT10aGlzLmtbRmUrMV0sdW49SFtGZV0seXQ9SFtGZSsxXSxNdD1VKE9lLEllLFZlLGtlLEFlLF90LG50LFFlLHVuLHl0KSxEdD1XKE9lLEllLFZlLGtlLEFlLF90LG50LFFlLHVuLHl0KTtPZT1tZShqLEUpLEllPV9lKGosRSksVmU9aWUo''@;'; put 'put ''aiwwLG0sMCxhZSksa2U9bGUoMCxFLDAsQSwwLHRlKTt2YXIgaXQ9eihPZSxJZSxWZSxrZSksJGU9TihPZSxJZSxWZSxrZSk7emU9dmUsRGU9WGUsdmU9b3QsWGU9eGUsb3Q9VWUseGU9SmUsVWU9eihzZSx3ZSxNdCxEdCksSmU9Tih3ZSx3ZSxNdCxEdCksc2U9YWUsd2U9dGUsYWU9bSx0ZT1B''@;'; put 'put ''LG09aixBPUUsaj16KE10LER0LGl0LCRlKSxFPU4oTXQsRHQsaXQsJGUpfU8odGhpcy5oLDAsaixFKSxPKHRoaXMuaCwyLG0sQSksTyh0aGlzLmgsNCxhZSx0ZSksTyh0aGlzLmgsNixzZSx3ZSksTyh0aGlzLmgsOCxVZSxKZSksTyh0aGlzLmgsMTAsb3QseGUpLE8odGhpcy5oLDEyLHZlLFhl''@;'; put 'put ''KSxPKHRoaXMuaCwxNCx6ZSxEZSl9LGVlLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKEMpe3JldHVybiJoZXgiPT09Qz9JLnRvSGV4MzIodGhpcy5oLCJiaWciKTpJLnNwbGl0MzIodGhpcy5oLCJiaWciKX19LDk1NTQyOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBfPXkoNjgyODMp''@;'; put 'put ''LnJvdHIzMjtmdW5jdGlvbiBCKEwsSyxVKXtyZXR1cm4gTCZLXn5MJlV9ZnVuY3Rpb24gdyhMLEssVSl7cmV0dXJuIEwmS15MJlVeSyZVfWZ1bmN0aW9uIFAoTCxLLFUpe3JldHVybiBMXkteVX1YLmZ0XzE9ZnVuY3Rpb24gZyhMLEssVSxXKXtyZXR1cm4gMD09PUw/QihLLFUsVyk6MT09PUx8''@;'; put 'put ''fDM9PT1MP1AoSyxVLFcpOjI9PT1MP3coSyxVLFcpOnZvaWQgMH0sWC5jaDMyPUIsWC5tYWozMj13LFgucDMyPVAsWC5zMF8yNTY9ZnVuY3Rpb24gRihMKXtyZXR1cm4gXyhMLDIpXl8oTCwxMyleXyhMLDIyKX0sWC5zMV8yNTY9ZnVuY3Rpb24gTyhMKXtyZXR1cm4gXyhMLDYpXl8oTCwxMSle''@;'; put 'put ''XyhMLDI1KX0sWC5nMF8yNTY9ZnVuY3Rpb24geihMKXtyZXR1cm4gXyhMLDcpXl8oTCwxOCleTD4+PjN9LFguZzFfMjU2PWZ1bmN0aW9uIE4oTCl7cmV0dXJuIF8oTCwxNyleXyhMLDE5KV5MPj4+MTB9fSw2ODI4MzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDM5MjEwKSxfPXko''@;'; put 'put ''NzE5OTMpO2Z1bmN0aW9uIGcoYix4KXtyZXR1cm4hKDU1Mjk2IT0oNjQ1MTImYi5jaGFyQ29kZUF0KHgpKXx8eDwwfHx4KzE+PWIubGVuZ3RoKSYmNTYzMjA9PSg2NDUxMiZiLmNoYXJDb2RlQXQoeCsxKSl9ZnVuY3Rpb24gUChiKXtyZXR1cm4oYj4+PjI0fGI+Pj44JjY1MjgwfGI8PDgmMTY3''@;'; put 'put ''MTE2ODB8KDI1NSZiKTw8MjQpPj4+MH1mdW5jdGlvbiBPKGIpe3JldHVybiAxPT09Yi5sZW5ndGg/IjAiK2I6Yn1mdW5jdGlvbiB6KGIpe3JldHVybiA3PT09Yi5sZW5ndGg/IjAiK2I6Nj09PWIubGVuZ3RoPyIwMCIrYjo1PT09Yi5sZW5ndGg/IjAwMCIrYjo0PT09Yi5sZW5ndGg/IjAwMDAi''@;'; put 'put ''K2I6Mz09PWIubGVuZ3RoPyIwMDAwMCIrYjoyPT09Yi5sZW5ndGg/IjAwMDAwMCIrYjoxPT09Yi5sZW5ndGg/IjAwMDAwMDAiK2I6Yn1YLmluaGVyaXRzPV8sWC50b0FycmF5PWZ1bmN0aW9uIEIoYix4KXtpZihBcnJheS5pc0FycmF5KGIpKXJldHVybiBiLnNsaWNlKCk7aWYoIWIpcmV0dXJu''@;'; put 'put ''W107dmFyIEM9W107aWYoInN0cmluZyI9PXR5cGVvZiBiKWlmKHgpe2lmKCJoZXgiPT09eClmb3IoKGI9Yi5yZXBsYWNlKC9bXmEtejAtOV0rL2dpLCIiKSkubGVuZ3RoJTIhPTAmJihiPSIwIitiKSxIPTA7SDxiLmxlbmd0aDtIKz0yKUMucHVzaChwYXJzZUludChiW0hdK2JbSCsxXSwxNikp''@;'; put 'put ''fWVsc2UgZm9yKHZhciBUPTAsSD0wO0g8Yi5sZW5ndGg7SCsrKXt2YXIgaj1iLmNoYXJDb2RlQXQoSCk7ajwxMjg/Q1tUKytdPWo6ajwyMDQ4PyhDW1QrK109aj4+NnwxOTIsQ1tUKytdPTYzJmp8MTI4KTpnKGIsSCk/KGo9NjU1MzYrKCgxMDIzJmopPDwxMCkrKDEwMjMmYi5jaGFyQ29kZUF0''@;'; put 'put ''KCsrSCkpLENbVCsrXT1qPj4xOHwyNDAsQ1tUKytdPWo+PjEyJjYzfDEyOCxDW1QrK109aj4+NiY2M3wxMjgsQ1tUKytdPTYzJmp8MTI4KTooQ1tUKytdPWo+PjEyfDIyNCxDW1QrK109aj4+NiY2M3wxMjgsQ1tUKytdPTYzJmp8MTI4KX1lbHNlIGZvcihIPTA7SDxiLmxlbmd0aDtIKyspQ1tI''@;'; put 'put ''XT0wfGJbSF07cmV0dXJuIEN9LFgudG9IZXg9ZnVuY3Rpb24gdyhiKXtmb3IodmFyIHg9IiIsQz0wO0M8Yi5sZW5ndGg7QysrKXgrPU8oYltDXS50b1N0cmluZygxNikpO3JldHVybiB4fSxYLmh0b25sPVAsWC50b0hleDMyPWZ1bmN0aW9uIEYoYix4KXtmb3IodmFyIEM9IiIsVD0wO1Q8Yi5s''@;'; put 'put ''ZW5ndGg7VCsrKXt2YXIgSD1iW1RdOyJsaXR0bGUiPT09eCYmKEg9UChIKSksQys9eihILnRvU3RyaW5nKDE2KSl9cmV0dXJuIEN9LFguemVybzI9TyxYLnplcm84PXosWC5qb2luMzI9ZnVuY3Rpb24gTihiLHgsQyxUKXt2YXIgSD1DLXg7SShIJTQ9PTApO2Zvcih2YXIgaj1uZXcgQXJyYXko''@;'; put 'put ''SC80KSxFPTAsbT14O0U8ai5sZW5ndGg7RSsrLG0rPTQpaltFXT0oImJpZyI9PT1UP2JbbV08PDI0fGJbbSsxXTw8MTZ8YlttKzJdPDw4fGJbbSszXTpiW20rM108PDI0fGJbbSsyXTw8MTZ8YlttKzFdPDw4fGJbbV0pPj4+MDtyZXR1cm4gan0sWC5zcGxpdDMyPWZ1bmN0aW9uIEwoYix4KXtm''@;'; put 'put ''b3IodmFyIEM9bmV3IEFycmF5KDQqYi5sZW5ndGgpLFQ9MCxIPTA7VDxiLmxlbmd0aDtUKyssSCs9NCl7dmFyIGo9YltUXTsiYmlnIj09PXg/KENbSF09aj4+PjI0LENbSCsxXT1qPj4+MTYmMjU1LENbSCsyXT1qPj4+OCYyNTUsQ1tIKzNdPTI1NSZqKTooQ1tIKzNdPWo+Pj4yNCxDW0grMl09''@;'; put 'put ''aj4+PjE2JjI1NSxDW0grMV09aj4+PjgmMjU1LENbSF09MjU1JmopfXJldHVybiBDfSxYLnJvdHIzMj1mdW5jdGlvbiBLKGIseCl7cmV0dXJuIGI+Pj54fGI8PDMyLXh9LFgucm90bDMyPWZ1bmN0aW9uIFUoYix4KXtyZXR1cm4gYjw8eHxiPj4+MzIteH0sWC5zdW0zMj1mdW5jdGlvbiBXKGIs''@;'; put 'put ''eCl7cmV0dXJuIGIreD4+PjB9LFguc3VtMzJfMz1mdW5jdGlvbiBZKGIseCxDKXtyZXR1cm4gYit4K0M+Pj4wfSxYLnN1bTMyXzQ9ZnVuY3Rpb24gcShiLHgsQyxUKXtyZXR1cm4gYit4K0MrVD4+PjB9LFguc3VtMzJfNT1mdW5jdGlvbiBlZShiLHgsQyxULEgpe3JldHVybiBiK3grQytUK0g+''@;'; put 'put ''Pj4wfSxYLnN1bTY0PWZ1bmN0aW9uIEooYix4LEMsVCl7dmFyIEU9VCtiW3grMV0+Pj4wO2JbeF09KEU8VD8xOjApK0MrYlt4XT4+PjAsYlt4KzFdPUV9LFguc3VtNjRfaGk9ZnVuY3Rpb24gbmUoYix4LEMsVCl7cmV0dXJuKHgrVD4+PjA8eD8xOjApK2IrQz4+PjB9LFguc3VtNjRfbG89ZnVu''@;'; put 'put ''Y3Rpb24gaWUoYix4LEMsVCl7cmV0dXJuIHgrVD4+PjB9LFguc3VtNjRfNF9oaT1mdW5jdGlvbiBsZShiLHgsQyxULEgsaixFLG0pe3ZhciBBPTAsYWU9eDtyZXR1cm4gQSs9KGFlPWFlK1Q+Pj4wKTx4PzE6MCxBKz0oYWU9YWUraj4+PjApPGo/MTowLGIrQytIK0UrKEErPShhZT1hZSttPj4+''@;'; put 'put ''MCk8bT8xOjApPj4+MH0sWC5zdW02NF80X2xvPWZ1bmN0aW9uIG1lKGIseCxDLFQsSCxqLEUsbSl7cmV0dXJuIHgrVCtqK20+Pj4wfSxYLnN1bTY0XzVfaGk9ZnVuY3Rpb24gX2UoYix4LEMsVCxILGosRSxtLEEsYWUpe3ZhciB0ZT0wLHNlPXg7cmV0dXJuIHRlKz0oc2U9c2UrVD4+PjApPHg/''@;'; put 'put ''MTowLHRlKz0oc2U9c2Uraj4+PjApPGo/MTowLHRlKz0oc2U9c2UrbT4+PjApPG0/MTowLGIrQytIK0UrQSsodGUrPShzZT1zZSthZT4+PjApPGFlPzE6MCk+Pj4wfSxYLnN1bTY0XzVfbG89ZnVuY3Rpb24gVGUoYix4LEMsVCxILGosRSxtLEEsYWUpe3JldHVybiB4K1QraittK2FlPj4+MH0s''@;'; put 'put ''WC5yb3RyNjRfaGk9ZnVuY3Rpb24gU2UoYix4LEMpe3JldHVybih4PDwzMi1DfGI+Pj5DKT4+PjB9LFgucm90cjY0X2xvPWZ1bmN0aW9uIGplKGIseCxDKXtyZXR1cm4oYjw8MzItQ3x4Pj4+Qyk+Pj4wfSxYLnNocjY0X2hpPWZ1bmN0aW9uIFYoYix4LEMpe3JldHVybiBiPj4+Q30sWC5zaHI2''@;'; put 'put ''NF9sbz1mdW5jdGlvbiBwKGIseCxDKXtyZXR1cm4oYjw8MzItQ3x4Pj4+Qyk+Pj4wfX0sMzM1NTY6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg1MjUyOSksXz15KDIxODMyKSxnPXkoMzkyMTApO2Z1bmN0aW9uIEIodyl7aWYoISh0aGlzIGluc3RhbmNlb2YgQikpcmV0dXJuIG5l''@;'; put 'put ''dyBCKHcpO3RoaXMuaGFzaD13Lmhhc2gsdGhpcy5wcmVkUmVzaXN0PSEhdy5wcmVkUmVzaXN0LHRoaXMub3V0TGVuPXRoaXMuaGFzaC5vdXRTaXplLHRoaXMubWluRW50cm9weT13Lm1pbkVudHJvcHl8fHRoaXMuaGFzaC5obWFjU3RyZW5ndGgsdGhpcy5fcmVzZWVkPW51bGwsdGhpcy5yZXNl''@;'; put 'put ''ZWRJbnRlcnZhbD1udWxsLHRoaXMuSz1udWxsLHRoaXMuVj1udWxsO3ZhciBQPV8udG9BcnJheSh3LmVudHJvcHksdy5lbnRyb3B5RW5jfHwiaGV4IiksRj1fLnRvQXJyYXkody5ub25jZSx3Lm5vbmNlRW5jfHwiaGV4IiksTz1fLnRvQXJyYXkody5wZXJzLHcucGVyc0VuY3x8ImhleCIpO2co''@;'; put 'put ''UC5sZW5ndGg+PXRoaXMubWluRW50cm9weS84LCJOb3QgZW5vdWdoIGVudHJvcHkuIE1pbmltdW0gaXM6ICIrdGhpcy5taW5FbnRyb3B5KyIgYml0cyIpLHRoaXMuX2luaXQoUCxGLE8pfXVlLmV4cG9ydHM9QixCLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbihQLEYsTyl7dmFyIHo9UC5jb25j''@;'; put 'put ''YXQoRikuY29uY2F0KE8pO3RoaXMuSz1uZXcgQXJyYXkodGhpcy5vdXRMZW4vOCksdGhpcy5WPW5ldyBBcnJheSh0aGlzLm91dExlbi84KTtmb3IodmFyIE49MDtOPHRoaXMuVi5sZW5ndGg7TisrKXRoaXMuS1tOXT0wLHRoaXMuVltOXT0xO3RoaXMuX3VwZGF0ZSh6KSx0aGlzLl9yZXNlZWQ9''@;'; put 'put ''MSx0aGlzLnJlc2VlZEludGVydmFsPTI4MTQ3NDk3NjcxMDY1Nn0sQi5wcm90b3R5cGUuX2htYWM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEkuaG1hYyh0aGlzLmhhc2gsdGhpcy5LKX0sQi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihQKXt2YXIgRj10aGlzLl9obWFjKCkudXBkYXRlKHRo''@;'; put 'put ''aXMuVikudXBkYXRlKFswXSk7UCYmKEY9Ri51cGRhdGUoUCkpLHRoaXMuSz1GLmRpZ2VzdCgpLHRoaXMuVj10aGlzLl9obWFjKCkudXBkYXRlKHRoaXMuVikuZGlnZXN0KCksUCYmKHRoaXMuSz10aGlzLl9obWFjKCkudXBkYXRlKHRoaXMuVikudXBkYXRlKFsxXSkudXBkYXRlKFApLmRpZ2Vz''@;'; put 'put ''dCgpLHRoaXMuVj10aGlzLl9obWFjKCkudXBkYXRlKHRoaXMuVikuZGlnZXN0KCkpfSxCLnByb3RvdHlwZS5yZXNlZWQ9ZnVuY3Rpb24oUCxGLE8seil7InN0cmluZyIhPXR5cGVvZiBGJiYoej1PLE89RixGPW51bGwpLFA9Xy50b0FycmF5KFAsRiksTz1fLnRvQXJyYXkoTyx6KSxnKFAubGVu''@;'; put 'put ''Z3RoPj10aGlzLm1pbkVudHJvcHkvOCwiTm90IGVub3VnaCBlbnRyb3B5LiBNaW5pbXVtIGlzOiAiK3RoaXMubWluRW50cm9weSsiIGJpdHMiKSx0aGlzLl91cGRhdGUoUC5jb25jYXQoT3x8W10pKSx0aGlzLl9yZXNlZWQ9MX0sQi5wcm90b3R5cGUuZ2VuZXJhdGU9ZnVuY3Rpb24oUCxGLE8s''@;'; put 'put ''eil7aWYodGhpcy5fcmVzZWVkPnRoaXMucmVzZWVkSW50ZXJ2YWwpdGhyb3cgbmV3IEVycm9yKCJSZXNlZWQgaXMgcmVxdWlyZWQiKTsic3RyaW5nIiE9dHlwZW9mIEYmJih6PU8sTz1GLEY9bnVsbCksTyYmKE89Xy50b0FycmF5KE8senx8ImhleCIpLHRoaXMuX3VwZGF0ZShPKSk7Zm9yKHZh''@;'; put 'put ''ciBOPVtdO04ubGVuZ3RoPFA7KXRoaXMuVj10aGlzLl9obWFjKCkudXBkYXRlKHRoaXMuVikuZGlnZXN0KCksTj1OLmNvbmNhdCh0aGlzLlYpO3ZhciBMPU4uc2xpY2UoMCxQKTtyZXR1cm4gdGhpcy5fdXBkYXRlKE8pLHRoaXMuX3Jlc2VlZCsrLF8uZW5jb2RlKEwsRil9fSw5MzY5NDoodWUs''@;'; put 'put ''WCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDkzODA3KS5CdWZmZXI7WC5fZGJjcz16O2Zvcih2YXIgXz0tMSxnPS0yLEI9LTEwLHc9LTFlMyxQPW5ldyBBcnJheSgyNTYpLE89MDtPPDI1NjtPKyspUFtPXT1fO2Z1bmN0aW9uIHooVSxXKXtpZih0aGlzLmVuY29kaW5nTmFtZT1VLmVuY29k''@;'; put 'put ''aW5nTmFtZSwhVSl0aHJvdyBuZXcgRXJyb3IoIkRCQ1MgY29kZWMgaXMgY2FsbGVkIHdpdGhvdXQgdGhlIGRhdGEuIik7aWYoIVUudGFibGUpdGhyb3cgbmV3IEVycm9yKCJFbmNvZGluZyAnIit0aGlzLmVuY29kaW5nTmFtZSsiJyBoYXMgbm8gZGF0YS4iKTt2YXIgWT1VLnRhYmxlKCk7dGhp''@;'; put 'put ''cy5kZWNvZGVUYWJsZXM9W10sdGhpcy5kZWNvZGVUYWJsZXNbMF09UC5zbGljZSgwKSx0aGlzLmRlY29kZVRhYmxlU2VxPVtdO2Zvcih2YXIgcT0wO3E8WS5sZW5ndGg7cSsrKXRoaXMuX2FkZERlY29kZUNodW5rKFlbcV0pO3RoaXMuZGVmYXVsdENoYXJVbmljb2RlPVcuZGVmYXVsdENoYXJV''@;'; put 'put ''bmljb2RlLHRoaXMuZW5jb2RlVGFibGU9W10sdGhpcy5lbmNvZGVUYWJsZVNlcT1bXTt2YXIgZWU9e307aWYoVS5lbmNvZGVTa2lwVmFscylmb3IocT0wO3E8VS5lbmNvZGVTa2lwVmFscy5sZW5ndGg7cSsrKXt2YXIgSj1VLmVuY29kZVNraXBWYWxzW3FdO2lmKCJudW1iZXIiPT10eXBlb2Yg''@;'; put 'put ''SillZVtKXT0hMDtlbHNlIGZvcih2YXIgbmU9Si5mcm9tO25lPD1KLnRvO25lKyspZWVbbmVdPSEwfWlmKHRoaXMuX2ZpbGxFbmNvZGVUYWJsZSgwLDAsZWUpLFUuZW5jb2RlQWRkKWZvcih2YXIgaWUgaW4gVS5lbmNvZGVBZGQpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxs''@;'; put 'put ''KFUuZW5jb2RlQWRkLGllKSYmdGhpcy5fc2V0RW5jb2RlQ2hhcihpZS5jaGFyQ29kZUF0KDApLFUuZW5jb2RlQWRkW2llXSk7aWYodGhpcy5kZWZDaGFyU0I9dGhpcy5lbmNvZGVUYWJsZVswXVtXLmRlZmF1bHRDaGFyU2luZ2xlQnl0ZS5jaGFyQ29kZUF0KDApXSx0aGlzLmRlZkNoYXJTQj09''@;'; put 'put ''PV8mJih0aGlzLmRlZkNoYXJTQj10aGlzLmVuY29kZVRhYmxlWzBdWyI/Il0pLHRoaXMuZGVmQ2hhclNCPT09XyYmKHRoaXMuZGVmQ2hhclNCPTYzKSwiZnVuY3Rpb24iPT10eXBlb2YgVS5nYjE4MDMwKXt0aGlzLmdiMTgwMzA9VS5nYjE4MDMwKCk7dmFyIGxlPXRoaXMuZGVjb2RlVGFibGVz''@;'; put 'put ''Lmxlbmd0aCxtZT10aGlzLmRlY29kZVRhYmxlc1tsZV09UC5zbGljZSgwKSxfZT10aGlzLmRlY29kZVRhYmxlcy5sZW5ndGgsVGU9dGhpcy5kZWNvZGVUYWJsZXNbX2VdPVAuc2xpY2UoMCk7Zm9yKHE9MTI5O3E8PTI1NDtxKyspe3ZhciBqZT10aGlzLmRlY29kZVRhYmxlc1t3LXRoaXMuZGVj''@;'; put 'put ''b2RlVGFibGVzWzBdW3FdXTtmb3IobmU9NDg7bmU8PTU3O25lKyspamVbbmVdPXctbGV9Zm9yKHE9MTI5O3E8PTI1NDtxKyspbWVbcV09dy1fZTtmb3IocT00ODtxPD01NztxKyspVGVbcV09Z319ZnVuY3Rpb24gTihVLFcpe3RoaXMubGVhZFN1cnJvZ2F0ZT0tMSx0aGlzLnNlcU9iaj12b2lk''@;'; put 'put ''IDAsdGhpcy5lbmNvZGVUYWJsZT1XLmVuY29kZVRhYmxlLHRoaXMuZW5jb2RlVGFibGVTZXE9Vy5lbmNvZGVUYWJsZVNlcSx0aGlzLmRlZmF1bHRDaGFyU2luZ2xlQnl0ZT1XLmRlZkNoYXJTQix0aGlzLmdiMTgwMzA9Vy5nYjE4MDMwfWZ1bmN0aW9uIEwoVSxXKXt0aGlzLm5vZGVJZHg9MCx0''@;'; put 'put ''aGlzLnByZXZCdWY9SS5hbGxvYygwKSx0aGlzLmRlY29kZVRhYmxlcz1XLmRlY29kZVRhYmxlcyx0aGlzLmRlY29kZVRhYmxlU2VxPVcuZGVjb2RlVGFibGVTZXEsdGhpcy5kZWZhdWx0Q2hhclVuaWNvZGU9Vy5kZWZhdWx0Q2hhclVuaWNvZGUsdGhpcy5nYjE4MDMwPVcuZ2IxODAzMH1mdW5j''@;'; put 'put ''dGlvbiBLKFUsVyl7aWYoVVswXT5XKXJldHVybi0xO2Zvcih2YXIgWT0wLHE9VS5sZW5ndGg7WTxxLTE7KXt2YXIgZWU9WStNYXRoLmZsb29yKChxLVkrMSkvMik7VVtlZV08PVc/WT1lZTpxPWVlfXJldHVybiBZfXoucHJvdG90eXBlLmVuY29kZXI9Tix6LnByb3RvdHlwZS5kZWNvZGVyPUws''@;'; put 'put ''ei5wcm90b3R5cGUuX2dldERlY29kZVRyaWVOb2RlPWZ1bmN0aW9uKFUpe2Zvcih2YXIgVz1bXTtVPjA7VT4+PTgpVy5wdXNoKDI1NSZVKTswPT1XLmxlbmd0aCYmVy5wdXNoKDApO2Zvcih2YXIgWT10aGlzLmRlY29kZVRhYmxlc1swXSxxPVcubGVuZ3RoLTE7cT4wO3EtLSl7dmFyIGVlPVlb''@;'; put 'put ''V1txXV07aWYoZWU9PV8pWVtXW3FdXT13LXRoaXMuZGVjb2RlVGFibGVzLmxlbmd0aCx0aGlzLmRlY29kZVRhYmxlcy5wdXNoKFk9UC5zbGljZSgwKSk7ZWxzZXtpZighKGVlPD13KSl0aHJvdyBuZXcgRXJyb3IoIk92ZXJ3cml0ZSBieXRlIGluICIrdGhpcy5lbmNvZGluZ05hbWUrIiwgYWRk''@;'; put 'put ''cjogIitVLnRvU3RyaW5nKDE2KSk7WT10aGlzLmRlY29kZVRhYmxlc1t3LWVlXX19cmV0dXJuIFl9LHoucHJvdG90eXBlLl9hZGREZWNvZGVDaHVuaz1mdW5jdGlvbihVKXt2YXIgVz1wYXJzZUludChVWzBdLDE2KSxZPXRoaXMuX2dldERlY29kZVRyaWVOb2RlKFcpO1cmPTI1NTtmb3IodmFy''@;'; put 'put ''IHE9MTtxPFUubGVuZ3RoO3ErKyl7dmFyIGVlPVVbcV07aWYoInN0cmluZyI9PXR5cGVvZiBlZSlmb3IodmFyIEo9MDtKPGVlLmxlbmd0aDspe3ZhciBuZT1lZS5jaGFyQ29kZUF0KEorKyk7aWYoNTUyOTY8PW5lJiZuZTw1NjMyMCl7dmFyIGllPWVlLmNoYXJDb2RlQXQoSisrKTtpZighKDU2''@;'; put 'put ''MzIwPD1pZSYmaWU8NTczNDQpKXRocm93IG5ldyBFcnJvcigiSW5jb3JyZWN0IHN1cnJvZ2F0ZSBwYWlyIGluICIrdGhpcy5lbmNvZGluZ05hbWUrIiBhdCBjaHVuayAiK1VbMF0pO1lbVysrXT02NTUzNisxMDI0KihuZS01NTI5NikrKGllLTU2MzIwKX1lbHNlIGlmKDQwODA8bmUmJm5lPD00''@;'; put 'put ''MDk1KXtmb3IodmFyIGxlPTQwOTUtbmUrMixtZT1bXSxfZT0wO19lPGxlO19lKyspbWUucHVzaChlZS5jaGFyQ29kZUF0KEorKykpO1lbVysrXT1CLXRoaXMuZGVjb2RlVGFibGVTZXEubGVuZ3RoLHRoaXMuZGVjb2RlVGFibGVTZXEucHVzaChtZSl9ZWxzZSBZW1crK109bmV9ZWxzZXtpZigi''@;'; put 'put ''bnVtYmVyIiE9dHlwZW9mIGVlKXRocm93IG5ldyBFcnJvcigiSW5jb3JyZWN0IHR5cGUgJyIrdHlwZW9mIGVlKyInIGdpdmVuIGluICIrdGhpcy5lbmNvZGluZ05hbWUrIiBhdCBjaHVuayAiK1VbMF0pO3ZhciBUZT1ZW1ctMV0rMTtmb3IoSj0wO0o8ZWU7SisrKVlbVysrXT1UZSsrfX1pZihX''@;'; put 'put ''PjI1NSl0aHJvdyBuZXcgRXJyb3IoIkluY29ycmVjdCBjaHVuayBpbiAiK3RoaXMuZW5jb2RpbmdOYW1lKyIgYXQgYWRkciAiK1VbMF0rIjogdG9vIGxvbmciK1cpfSx6LnByb3RvdHlwZS5fZ2V0RW5jb2RlQnVja2V0PWZ1bmN0aW9uKFUpe3ZhciBXPVU+Pjg7cmV0dXJuIHZvaWQgMD09PXRo''@;'; put 'put ''aXMuZW5jb2RlVGFibGVbV10mJih0aGlzLmVuY29kZVRhYmxlW1ddPVAuc2xpY2UoMCkpLHRoaXMuZW5jb2RlVGFibGVbV119LHoucHJvdG90eXBlLl9zZXRFbmNvZGVDaGFyPWZ1bmN0aW9uKFUsVyl7dmFyIFk9dGhpcy5fZ2V0RW5jb2RlQnVja2V0KFUpLHE9MjU1JlU7WVtxXTw9Qj90aGlz''@;'; put 'put ''LmVuY29kZVRhYmxlU2VxW0ItWVtxXV1bLTFdPVc6WVtxXT09XyYmKFlbcV09Vyl9LHoucHJvdG90eXBlLl9zZXRFbmNvZGVTZXF1ZW5jZT1mdW5jdGlvbihVLFcpe3ZhciBKLFk9VVswXSxxPXRoaXMuX2dldEVuY29kZUJ1Y2tldChZKSxlZT0yNTUmWTtxW2VlXTw9Qj9KPXRoaXMuZW5jb2Rl''@;'; put 'put ''VGFibGVTZXFbQi1xW2VlXV06KEo9e30scVtlZV0hPT1fJiYoSlstMV09cVtlZV0pLHFbZWVdPUItdGhpcy5lbmNvZGVUYWJsZVNlcS5sZW5ndGgsdGhpcy5lbmNvZGVUYWJsZVNlcS5wdXNoKEopKTtmb3IodmFyIG5lPTE7bmU8VS5sZW5ndGgtMTtuZSsrKXt2YXIgaWU9SltZXTsib2JqZWN0''@;'; put 'put ''Ij09dHlwZW9mIGllP0o9aWU6KEo9SltZXT17fSx2b2lkIDAhPT1pZSYmKEpbLTFdPWllKSl9SltZPVVbVS5sZW5ndGgtMV1dPVd9LHoucHJvdG90eXBlLl9maWxsRW5jb2RlVGFibGU9ZnVuY3Rpb24oVSxXLFkpe2Zvcih2YXIgcT10aGlzLmRlY29kZVRhYmxlc1tVXSxlZT0wO2VlPDI1Njtl''@;'; put 'put ''ZSsrKXt2YXIgSj1xW2VlXSxuZT1XK2VlO1lbbmVdfHwoSj49MD90aGlzLl9zZXRFbmNvZGVDaGFyKEosbmUpOko8PXc/dGhpcy5fZmlsbEVuY29kZVRhYmxlKHctSixuZTw8OCxZKTpKPD1CJiZ0aGlzLl9zZXRFbmNvZGVTZXF1ZW5jZSh0aGlzLmRlY29kZVRhYmxlU2VxW0ItSl0sbmUpKX19''@;'; put 'put ''LE4ucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKFUpe2Zvcih2YXIgVz1JLmFsbG9jKFUubGVuZ3RoKih0aGlzLmdiMTgwMzA/NDozKSksWT10aGlzLmxlYWRTdXJyb2dhdGUscT10aGlzLnNlcU9iaixlZT0tMSxKPTAsbmU9MDs7KXtpZigtMT09PWVlKXtpZihKPT1VLmxlbmd0aClicmVhazt2''@;'; put 'put ''YXIgaWU9VS5jaGFyQ29kZUF0KEorKyl9ZWxzZSBpZT1lZSxlZT0tMTtpZig1NTI5Njw9aWUmJmllPDU3MzQ0KWlmKGllPDU2MzIwKXtpZigtMT09PVkpe1k9aWU7Y29udGludWV9WT1pZSxpZT1ffWVsc2UtMSE9PVk/KGllPTY1NTM2KzEwMjQqKFktNTUyOTYpKyhpZS01NjMyMCksWT0tMSk6''@;'; put 'put ''aWU9XztlbHNlLTEhPT1ZJiYoZWU9aWUsaWU9XyxZPS0xKTt2YXIgbGU9XztpZih2b2lkIDAhPT1xJiZpZSE9Xyl7dmFyIG1lPXFbaWVdO2lmKCJvYmplY3QiPT10eXBlb2YgbWUpe3E9bWU7Y29udGludWV9Im51bWJlciI9PXR5cGVvZiBtZT9sZT1tZTpudWxsPT1tZSYmdm9pZCAwIT09KG1l''@;'; put 'put ''PXFbLTFdKSYmKGxlPW1lLGVlPWllKSxxPXZvaWQgMH1lbHNlIGlmKGllPj0wKXt2YXIgX2U9dGhpcy5lbmNvZGVUYWJsZVtpZT4+OF07aWYodm9pZCAwIT09X2UmJihsZT1fZVsyNTUmaWVdKSxsZTw9Qil7cT10aGlzLmVuY29kZVRhYmxlU2VxW0ItbGVdO2NvbnRpbnVlfWlmKGxlPT1fJiZ0''@;'; put 'put ''aGlzLmdiMTgwMzApe3ZhciBUZT1LKHRoaXMuZ2IxODAzMC51Q2hhcnMsaWUpO2lmKC0xIT1UZSl7bGU9dGhpcy5nYjE4MDMwLmdiQ2hhcnNbVGVdKyhpZS10aGlzLmdiMTgwMzAudUNoYXJzW1RlXSksV1tuZSsrXT0xMjkrTWF0aC5mbG9vcihsZS8xMjYwMCksbGUlPTEyNjAwLFdbbmUrK109''@;'; put 'put ''NDgrTWF0aC5mbG9vcihsZS8xMjYwKSxsZSU9MTI2MCxXW25lKytdPTEyOStNYXRoLmZsb29yKGxlLzEwKSxXW25lKytdPTQ4KyhsZSU9MTApO2NvbnRpbnVlfX19bGU9PT1fJiYobGU9dGhpcy5kZWZhdWx0Q2hhclNpbmdsZUJ5dGUpLGxlPDI1Nj9XW25lKytdPWxlOmxlPDY1NTM2PyhXW25l''@;'; put 'put ''KytdPWxlPj44LFdbbmUrK109MjU1JmxlKTooV1tuZSsrXT1sZT4+MTYsV1tuZSsrXT1sZT4+OCYyNTUsV1tuZSsrXT0yNTUmbGUpfXJldHVybiB0aGlzLnNlcU9iaj1xLHRoaXMubGVhZFN1cnJvZ2F0ZT1ZLFcuc2xpY2UoMCxuZSl9LE4ucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe2lmKC0x''@;'; put 'put ''IT09dGhpcy5sZWFkU3Vycm9nYXRlfHx2b2lkIDAhPT10aGlzLnNlcU9iail7dmFyIFU9SS5hbGxvYygxMCksVz0wO2lmKHRoaXMuc2VxT2JqKXt2YXIgWT10aGlzLnNlcU9ialstMV07dm9pZCAwIT09WSYmKFk8MjU2P1VbVysrXT1ZOihVW1crK109WT4+OCxVW1crK109MjU1JlkpKSx0aGlz''@;'; put 'put ''LnNlcU9iaj12b2lkIDB9cmV0dXJuLTEhPT10aGlzLmxlYWRTdXJyb2dhdGUmJihVW1crK109dGhpcy5kZWZhdWx0Q2hhclNpbmdsZUJ5dGUsdGhpcy5sZWFkU3Vycm9nYXRlPS0xKSxVLnNsaWNlKDAsVyl9fSxOLnByb3RvdHlwZS5maW5kSWR4PUssTC5wcm90b3R5cGUud3JpdGU9ZnVuY3Rp''@;'; put 'put ''b24oVSl7dmFyIFc9SS5hbGxvYygyKlUubGVuZ3RoKSxZPXRoaXMubm9kZUlkeCxxPXRoaXMucHJldkJ1ZixlZT10aGlzLnByZXZCdWYubGVuZ3RoLEo9LXRoaXMucHJldkJ1Zi5sZW5ndGg7ZWU+MCYmKHE9SS5jb25jYXQoW3EsVS5zbGljZSgwLDEwKV0pKTtmb3IodmFyIGllPTAsbGU9MDtp''@;'; put 'put ''ZTxVLmxlbmd0aDtpZSsrKXt2YXIgbmUsbWU9aWU+PTA/VVtpZV06cVtpZStlZV07aWYoISgobmU9dGhpcy5kZWNvZGVUYWJsZXNbWV1bbWVdKT49MCkpaWYobmU9PT1fKWllPUosbmU9dGhpcy5kZWZhdWx0Q2hhclVuaWNvZGUuY2hhckNvZGVBdCgwKTtlbHNlIGlmKG5lPT09Zyl7dmFyIF9l''@;'; put 'put ''PUo+PTA/VS5zbGljZShKLGllKzEpOnEuc2xpY2UoSitlZSxpZSsxK2VlKSxUZT0xMjYwMCooX2VbMF0tMTI5KSsxMjYwKihfZVsxXS00OCkrMTAqKF9lWzJdLTEyOSkrKF9lWzNdLTQ4KSxTZT1LKHRoaXMuZ2IxODAzMC5nYkNoYXJzLFRlKTtuZT10aGlzLmdiMTgwMzAudUNoYXJzW1NlXStU''@;'; put 'put ''ZS10aGlzLmdiMTgwMzAuZ2JDaGFyc1tTZV19ZWxzZXtpZihuZTw9dyl7WT13LW5lO2NvbnRpbnVlfWlmKCEobmU8PUIpKXRocm93IG5ldyBFcnJvcigiaWNvbnYtbGl0ZSBpbnRlcm5hbCBlcnJvcjogaW52YWxpZCBkZWNvZGluZyB0YWJsZSB2YWx1ZSAiK25lKyIgYXQgIitZKyIvIittZSk7''@;'; put 'put ''Zm9yKHZhciBqZT10aGlzLmRlY29kZVRhYmxlU2VxW0ItbmVdLFY9MDtWPGplLmxlbmd0aC0xO1YrKylXW2xlKytdPTI1NSYobmU9amVbVl0pLFdbbGUrK109bmU+Pjg7bmU9amVbamUubGVuZ3RoLTFdfWlmKG5lPjY1NTM1KXtuZS09NjU1MzY7dmFyIHA9NTUyOTYrTWF0aC5mbG9vcihuZS8x''@;'; put 'put ''MDI0KTtXW2xlKytdPTI1NSZwLFdbbGUrK109cD4+OCxuZT01NjMyMCtuZSUxMDI0fVdbbGUrK109MjU1Jm5lLFdbbGUrK109bmU+PjgsWT0wLEo9aWUrMX1yZXR1cm4gdGhpcy5ub2RlSWR4PVksdGhpcy5wcmV2QnVmPUo+PTA/VS5zbGljZShKKTpxLnNsaWNlKEorZWUpLFcuc2xpY2UoMCxs''@;'; put 'put ''ZSkudG9TdHJpbmcoInVjczIiKX0sTC5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7Zm9yKHZhciBVPSIiO3RoaXMucHJldkJ1Zi5sZW5ndGg+MDspe1UrPXRoaXMuZGVmYXVsdENoYXJVbmljb2RlO3ZhciBXPXRoaXMucHJldkJ1Zi5zbGljZSgxKTt0aGlzLnByZXZCdWY9SS5hbGxvYygwKSx0''@;'; put 'put ''aGlzLm5vZGVJZHg9MCxXLmxlbmd0aD4wJiYoVSs9dGhpcy53cml0ZShXKSl9cmV0dXJuIHRoaXMubm9kZUlkeD0wLFV9fSw0NTI3ODoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPXtzaGlmdGppczp7dHlwZToiX2RiY3MiLHRhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHkoNDA2''@;'; put 'put ''NzkpfSxlbmNvZGVBZGQ6eyJceGE1Ijo5MiwiXHUyMDNlIjoxMjZ9LGVuY29kZVNraXBWYWxzOlt7ZnJvbTo2MDczNix0bzo2MzgwOH1dfSxjc3NoaWZ0amlzOiJzaGlmdGppcyIsbXNrYW5qaToic2hpZnRqaXMiLHNqaXM6InNoaWZ0amlzIix3aW5kb3dzMzFqOiJzaGlmdGppcyIsbXMzMWo6''@;'; put 'put ''InNoaWZ0amlzIix4c2ppczoic2hpZnRqaXMiLHdpbmRvd3M5MzI6InNoaWZ0amlzIixtczkzMjoic2hpZnRqaXMiLDkzMjoic2hpZnRqaXMiLGNwOTMyOiJzaGlmdGppcyIsZXVjanA6e3R5cGU6Il9kYmNzIix0YWJsZTpmdW5jdGlvbigpe3JldHVybiB5KDU2NDA2KX0sZW5jb2RlQWRkOnsi''@;'; put 'put ''XHhhNSI6OTIsIlx1MjAzZSI6MTI2fX0sZ2IyMzEyOiJjcDkzNiIsZ2IyMzEyODA6ImNwOTM2IixnYjIzMTIxOTgwOiJjcDkzNiIsY3NnYjIzMTI6ImNwOTM2Iixjc2lzbzU4Z2IyMzEyODA6ImNwOTM2IixldWNjbjoiY3A5MzYiLHdpbmRvd3M5MzY6ImNwOTM2IixtczkzNjoiY3A5MzYiLDkz''@;'; put 'put ''NjoiY3A5MzYiLGNwOTM2Ont0eXBlOiJfZGJjcyIsdGFibGU6ZnVuY3Rpb24oKXtyZXR1cm4geSg3NDQ4OCl9fSxnYms6e3R5cGU6Il9kYmNzIix0YWJsZTpmdW5jdGlvbigpe3JldHVybiB5KDc0NDg4KS5jb25jYXQoeSg1NTkxNCkpfX0seGdiazoiZ2JrIixpc29pcjU4OiJnYmsiLGdiMTgw''@;'; put 'put ''MzA6e3R5cGU6Il9kYmNzIix0YWJsZTpmdW5jdGlvbigpe3JldHVybiB5KDc0NDg4KS5jb25jYXQoeSg1NTkxNCkpfSxnYjE4MDMwOmZ1bmN0aW9uKCl7cmV0dXJuIHkoOTkxMjkpfSxlbmNvZGVTa2lwVmFsczpbMTI4XSxlbmNvZGVBZGQ6eyJcdTIwYWMiOjQxNjk5fX0sY2hpbmVzZToiZ2Ix''@;'; put 'put ''ODAzMCIsd2luZG93czk0OToiY3A5NDkiLG1zOTQ5OiJjcDk0OSIsOTQ5OiJjcDk0OSIsY3A5NDk6e3R5cGU6Il9kYmNzIix0YWJsZTpmdW5jdGlvbigpe3JldHVybiB5KDIxMTY2KX19LGNzZXVja3I6ImNwOTQ5Iixjc2tzYzU2MDExOTg3OiJjcDk0OSIsZXVja3I6ImNwOTQ5Iixpc29pcjE0''@;'; put 'put ''OToiY3A5NDkiLGtvcmVhbjoiY3A5NDkiLGtzYzU2MDExOTg3OiJjcDk0OSIsa3NjNTYwMTE5ODk6ImNwOTQ5Iixrc2M1NjAxOiJjcDk0OSIsd2luZG93czk1MDoiY3A5NTAiLG1zOTUwOiJjcDk1MCIsOTUwOiJjcDk1MCIsY3A5NTA6e3R5cGU6Il9kYmNzIix0YWJsZTpmdW5jdGlvbigpe3Jl''@;'; put 'put ''dHVybiB5KDcyMzI0KX19LGJpZzU6ImJpZzVoa3NjcyIsYmlnNWhrc2NzOnt0eXBlOiJfZGJjcyIsdGFibGU6ZnVuY3Rpb24oKXtyZXR1cm4geSg3MjMyNCkuY29uY2F0KHkoNDMyNjcpKX0sZW5jb2RlU2tpcFZhbHM6WzQxNjc2XX0sY25iaWc1OiJiaWc1aGtzY3MiLGNzYmlnNToiYmlnNWhr''@;'; put 'put ''c2NzIix4eGJpZzU6ImJpZzVoa3NjcyJ9fSw3Mjg5MzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijtmb3IodmFyIEk9W3koMzc2NDApLHkoMzUwODkpLHkoNzE3NSkseSg5NzQ3KSx5KDU4Njc3KSx5KDc2MjMpLHkoMzAxODcpLHkoOTM2OTQpLHkoNDUyNzgpXSxfPTA7XzxJLmxlbmd0aDtfKysp''@;'; put 'put ''e3ZhciBnPUlbX107Zm9yKHZhciBCIGluIGcpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGcsQikmJihYW0JdPWdbQl0pfX0sMzc2NDA6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg5MzgwNykuQnVmZmVyO2Z1bmN0aW9uIF8oeixOKXt0aGlzLmVuYz16LmVu''@;'; put 'put ''Y29kaW5nTmFtZSx0aGlzLmJvbUF3YXJlPXouYm9tQXdhcmUsImJhc2U2NCI9PT10aGlzLmVuYz90aGlzLmVuY29kZXI9UDoiY2VzdTgiPT09dGhpcy5lbmMmJih0aGlzLmVuYz0idXRmOCIsdGhpcy5lbmNvZGVyPUYsIlx1ezFmNGE5fSIhPT1JLmZyb20oImVkYTBiZGVkYjJhOSIsImhleCIp''@;'; put 'put ''LnRvU3RyaW5nKCkmJih0aGlzLmRlY29kZXI9Tyx0aGlzLmRlZmF1bHRDaGFyVW5pY29kZT1OLmRlZmF1bHRDaGFyVW5pY29kZSkpfXVlLmV4cG9ydHM9e3V0Zjg6e3R5cGU6Il9pbnRlcm5hbCIsYm9tQXdhcmU6ITB9LGNlc3U4Ont0eXBlOiJfaW50ZXJuYWwiLGJvbUF3YXJlOiEwfSx1bmlj''@;'; put 'put ''b2RlMTF1dGY4OiJ1dGY4Iix1Y3MyOnt0eXBlOiJfaW50ZXJuYWwiLGJvbUF3YXJlOiEwfSx1dGYxNmxlOiJ1Y3MyIixiaW5hcnk6e3R5cGU6Il9pbnRlcm5hbCJ9LGJhc2U2NDp7dHlwZToiX2ludGVybmFsIn0saGV4Ont0eXBlOiJfaW50ZXJuYWwifSxfaW50ZXJuYWw6X30sXy5wcm90b3R5''@;'; put 'put ''cGUuZW5jb2Rlcj13LF8ucHJvdG90eXBlLmRlY29kZXI9Qjt2YXIgZz15KDc4NDU0KS5JO2Z1bmN0aW9uIEIoeixOKXtnLmNhbGwodGhpcyxOLmVuYyl9ZnVuY3Rpb24gdyh6LE4pe3RoaXMuZW5jPU4uZW5jfWZ1bmN0aW9uIFAoeixOKXt0aGlzLnByZXZTdHI9IiJ9ZnVuY3Rpb24gRih6LE4p''@;'; put 'put ''e31mdW5jdGlvbiBPKHosTil7dGhpcy5hY2M9MCx0aGlzLmNvbnRCeXRlcz0wLHRoaXMuYWNjQnl0ZXM9MCx0aGlzLmRlZmF1bHRDaGFyVW5pY29kZT1OLmRlZmF1bHRDaGFyVW5pY29kZX1nLnByb3RvdHlwZS5lbmR8fChnLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXt9KSxCLnByb3RvdHlw''@;'; put 'put ''ZT1nLnByb3RvdHlwZSx3LnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbih6KXtyZXR1cm4gSS5mcm9tKHosdGhpcy5lbmMpfSx3LnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXt9LFAucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKHope3ZhciBOPSh6PXRoaXMucHJldlN0cit6KS5sZW5ndGgtei5s''@;'; put 'put ''ZW5ndGglNDtyZXR1cm4gdGhpcy5wcmV2U3RyPXouc2xpY2UoTiksej16LnNsaWNlKDAsTiksSS5mcm9tKHosImJhc2U2NCIpfSxQLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXtyZXR1cm4gSS5mcm9tKHRoaXMucHJldlN0ciwiYmFzZTY0Iil9LEYucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9u''@;'; put 'put ''KHope2Zvcih2YXIgTj1JLmFsbG9jKDMqei5sZW5ndGgpLEw9MCxLPTA7Szx6Lmxlbmd0aDtLKyspe3ZhciBVPXouY2hhckNvZGVBdChLKTtVPDEyOD9OW0wrK109VTpVPDIwNDg/KE5bTCsrXT0xOTIrKFU+Pj42KSxOW0wrK109MTI4Kyg2MyZVKSk6KE5bTCsrXT0yMjQrKFU+Pj4xMiksTltM''@;'; put 'put ''KytdPTEyOCsoVT4+PjYmNjMpLE5bTCsrXT0xMjgrKDYzJlUpKX1yZXR1cm4gTi5zbGljZSgwLEwpfSxGLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXt9LE8ucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKHope2Zvcih2YXIgTj10aGlzLmFjYyxMPXRoaXMuY29udEJ5dGVzLEs9dGhpcy5hY2NC''@;'; put 'put ''eXRlcyxVPSIiLFc9MDtXPHoubGVuZ3RoO1crKyl7dmFyIFk9eltXXTsxMjghPSgxOTImWSk/KEw+MCYmKFUrPXRoaXMuZGVmYXVsdENoYXJVbmljb2RlLEw9MCksWTwxMjg/VSs9U3RyaW5nLmZyb21DaGFyQ29kZShZKTpZPDIyND8oTj0zMSZZLEw9MSxLPTEpOlk8MjQwPyhOPTE1JlksTD0y''@;'; put 'put ''LEs9MSk6VSs9dGhpcy5kZWZhdWx0Q2hhclVuaWNvZGUpOkw+MD8oTj1OPDw2fDYzJlksSysrLDA9PS0tTCYmKFUrPTI9PT1LJiZOPDEyOCYmTj4wfHwzPT09SyYmTjwyMDQ4P3RoaXMuZGVmYXVsdENoYXJVbmljb2RlOlN0cmluZy5mcm9tQ2hhckNvZGUoTikpKTpVKz10aGlzLmRlZmF1bHRD''@;'; put 'put ''aGFyVW5pY29kZX1yZXR1cm4gdGhpcy5hY2M9Tix0aGlzLmNvbnRCeXRlcz1MLHRoaXMuYWNjQnl0ZXM9SyxVfSxPLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXt2YXIgej0wO3JldHVybiB0aGlzLmNvbnRCeXRlcz4wJiYoeis9dGhpcy5kZWZhdWx0Q2hhclVuaWNvZGUpLHp9fSw1ODY3Nzoo''@;'; put 'put ''dWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDkzODA3KS5CdWZmZXI7ZnVuY3Rpb24gXyh3LFApe2lmKCF3KXRocm93IG5ldyBFcnJvcigiU0JDUyBjb2RlYyBpcyBjYWxsZWQgd2l0aG91dCB0aGUgZGF0YS4iKTtpZighdy5jaGFyc3x8MTI4IT09dy5jaGFycy5sZW5ndGgmJjI1NiE9''@;'; put 'put ''PXcuY2hhcnMubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiRW5jb2RpbmcgJyIrdy50eXBlKyInIGhhcyBpbmNvcnJlY3QgJ2NoYXJzJyAobXVzdCBiZSBvZiBsZW4gMTI4IG9yIDI1NikiKTtpZigxMjg9PT13LmNoYXJzLmxlbmd0aCl7Zm9yKHZhciBGPSIiLE89MDtPPDEyODtPKyspRis9U3Ry''@;'; put 'put ''aW5nLmZyb21DaGFyQ29kZShPKTt3LmNoYXJzPUYrdy5jaGFyc310aGlzLmRlY29kZUJ1Zj1JLmZyb20ody5jaGFycywidWNzMiIpO3ZhciB6PUkuYWxsb2MoNjU1MzYsUC5kZWZhdWx0Q2hhclNpbmdsZUJ5dGUuY2hhckNvZGVBdCgwKSk7Zm9yKE89MDtPPHcuY2hhcnMubGVuZ3RoO08rKyl6''@;'; put 'put ''W3cuY2hhcnMuY2hhckNvZGVBdChPKV09Tzt0aGlzLmVuY29kZUJ1Zj16fWZ1bmN0aW9uIGcodyxQKXt0aGlzLmVuY29kZUJ1Zj1QLmVuY29kZUJ1Zn1mdW5jdGlvbiBCKHcsUCl7dGhpcy5kZWNvZGVCdWY9UC5kZWNvZGVCdWZ9WC5fc2Jjcz1fLF8ucHJvdG90eXBlLmVuY29kZXI9ZyxfLnBy''@;'; put 'put ''b3RvdHlwZS5kZWNvZGVyPUIsZy5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24odyl7Zm9yKHZhciBQPUkuYWxsb2Mody5sZW5ndGgpLEY9MDtGPHcubGVuZ3RoO0YrKylQW0ZdPXRoaXMuZW5jb2RlQnVmW3cuY2hhckNvZGVBdChGKV07cmV0dXJuIFB9LGcucHJvdG90eXBlLmVuZD1mdW5jdGlv''@;'; put 'put ''bigpe30sQi5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24odyl7Zm9yKHZhciBQPXRoaXMuZGVjb2RlQnVmLEY9SS5hbGxvYygyKncubGVuZ3RoKSxPPTAsej0wLE49MDtOPHcubGVuZ3RoO04rKylGW3o9MipOXT1QW089Mip3W05dXSxGW3orMV09UFtPKzFdO3JldHVybiBGLnRvU3RyaW5nKCJ1''@;'; put 'put ''Y3MyIil9LEIucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe319LDMwMTg3OnVlPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9ezQzNzoiY3A0MzciLDczNzoiY3A3MzciLDc3NToiY3A3NzUiLDg1MDoiY3A4NTAiLDg1MjoiY3A4NTIiLDg1NToiY3A4NTUiLDg1NjoiY3A4NTYiLDg1NzoiY3A4''@;'; put 'put ''NTciLDg1ODoiY3A4NTgiLDg2MDoiY3A4NjAiLDg2MToiY3A4NjEiLDg2MjoiY3A4NjIiLDg2MzoiY3A4NjMiLDg2NDoiY3A4NjQiLDg2NToiY3A4NjUiLDg2NjoiY3A4NjYiLDg2OToiY3A4NjkiLDg3NDoid2luZG93czg3NCIsOTIyOiJjcDkyMiIsMTA0NjoiY3AxMDQ2IiwxMTI0OiJjcDEx''@;'; put 'put ''MjQiLDExMjU6ImNwMTEyNSIsMTEyOToiY3AxMTI5IiwxMTMzOiJjcDExMzMiLDExNjE6ImNwMTE2MSIsMTE2MjoiY3AxMTYyIiwxMTYzOiJjcDExNjMiLDEyNTA6IndpbmRvd3MxMjUwIiwxMjUxOiJ3aW5kb3dzMTI1MSIsMTI1Mjoid2luZG93czEyNTIiLDEyNTM6IndpbmRvd3MxMjUzIiwx''@;'; put 'put ''MjU0OiJ3aW5kb3dzMTI1NCIsMTI1NToid2luZG93czEyNTUiLDEyNTY6IndpbmRvd3MxMjU2IiwxMjU3OiJ3aW5kb3dzMTI1NyIsMTI1ODoid2luZG93czEyNTgiLDI4NTkxOiJpc284ODU5MSIsMjg1OTI6Imlzbzg4NTkyIiwyODU5MzoiaXNvODg1OTMiLDI4NTk0OiJpc284ODU5NCIsMjg1''@;'; put 'put ''OTU6Imlzbzg4NTk1IiwyODU5NjoiaXNvODg1OTYiLDI4NTk3OiJpc284ODU5NyIsMjg1OTg6Imlzbzg4NTk4IiwyODU5OToiaXNvODg1OTkiLDI4NjAwOiJpc284ODU5MTAiLDI4NjAxOiJpc284ODU5MTEiLDI4NjAzOiJpc284ODU5MTMiLDI4NjA0OiJpc284ODU5MTQiLDI4NjA1OiJpc284''@;'; put 'put ''ODU5MTUiLDI4NjA2OiJpc284ODU5MTYiLHdpbmRvd3M4NzQ6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUyMGFjXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMDI2XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMDE4''@;'; put 'put ''XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHhhMFx1MGUwMVx1MGUwMlx1MGUwM1x1MGUwNFx1MGUwNVx1MGUwNlx1MGUwN1x1MGUwOFx1MGUwOVx1MGUwYVx1MGUwYlx1MGUwY1x1MGUw''@;'; put 'put ''ZFx1MGUwZVx1MGUwZlx1MGUxMFx1MGUxMVx1MGUxMlx1MGUxM1x1MGUxNFx1MGUxNVx1MGUxNlx1MGUxN1x1MGUxOFx1MGUxOVx1MGUxYVx1MGUxYlx1MGUxY1x1MGUxZFx1MGUxZVx1MGUxZlx1MGUyMFx1MGUyMVx1MGUyMlx1MGUyM1x1MGUyNFx1MGUyNVx1MGUyNlx1MGUyN1x1MGUyOFx1''@;'; put 'put ''MGUyOVx1MGUyYVx1MGUyYlx1MGUyY1x1MGUyZFx1MGUyZVx1MGUyZlx1MGUzMFx1MGUzMVx1MGUzMlx1MGUzM1x1MGUzNFx1MGUzNVx1MGUzNlx1MGUzN1x1MGUzOFx1MGUzOVx1MGUzYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MGUzZlx1MGU0MFx1MGU0MVx1MGU0Mlx1MGU0M1x1MGU0''@;'; put 'put ''NFx1MGU0NVx1MGU0Nlx1MGU0N1x1MGU0OFx1MGU0OVx1MGU0YVx1MGU0Ylx1MGU0Y1x1MGU0ZFx1MGU0ZVx1MGU0Zlx1MGU1MFx1MGU1MVx1MGU1Mlx1MGU1M1x1MGU1NFx1MGU1NVx1MGU1Nlx1MGU1N1x1MGU1OFx1MGU1OVx1MGU1YVx1MGU1Ylx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCJ9''@;'; put 'put ''LHdpbjg3NDoid2luZG93czg3NCIsY3A4NzQ6IndpbmRvd3M4NzQiLHdpbmRvd3MxMjUwOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MjBhY1x1ZmZmZFx1MjAxYVx1ZmZmZFx1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1ZmZmZFx1MjAzMFx1MDE2MFx1MjAzOVx1MDE1YVx1MDE2NFx1MDE3ZFx1''@;'; put 'put ''MDE3OVx1ZmZmZFx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1ZmZmZFx1MjEyMlx1MDE2MVx1MjAzYVx1MDE1Ylx1MDE2NVx1MDE3ZVx1MDE3YVx4YTBcdTAyYzdcdTAyZDhcdTAxNDFceGE0XHUwMTA0XHhhNlx4YTdceGE4XHhhOVx1MDE1ZVx4YWJceGFjXHhh''@;'; put 'put ''ZFx4YWVcdTAxN2JceGIwXHhiMVx1MDJkYlx1MDE0Mlx4YjRceGI1XHhiNlx4YjdceGI4XHUwMTA1XHUwMTVmXHhiYlx1MDEzZFx1MDJkZFx1MDEzZVx1MDE3Y1x1MDE1NFx4YzFceGMyXHUwMTAyXHhjNFx1MDEzOVx1MDEwNlx4YzdcdTAxMGNceGM5XHUwMTE4XHhjYlx1MDExYVx4Y2RceGNl''@;'; put 'put ''XHUwMTBlXHUwMTEwXHUwMTQzXHUwMTQ3XHhkM1x4ZDRcdTAxNTBceGQ2XHhkN1x1MDE1OFx1MDE2ZVx4ZGFcdTAxNzBceGRjXHhkZFx1MDE2Mlx4ZGZcdTAxNTVceGUxXHhlMlx1MDEwM1x4ZTRcdTAxM2FcdTAxMDdceGU3XHUwMTBkXHhlOVx1MDExOVx4ZWJcdTAxMWJceGVkXHhlZVx1MDEw''@;'; put 'put ''Zlx1MDExMVx1MDE0NFx1MDE0OFx4ZjNceGY0XHUwMTUxXHhmNlx4ZjdcdTAxNTlcdTAxNmZceGZhXHUwMTcxXHhmY1x4ZmRcdTAxNjNcdTAyZDkifSx3aW4xMjUwOiJ3aW5kb3dzMTI1MCIsY3AxMjUwOiJ3aW5kb3dzMTI1MCIsd2luZG93czEyNTE6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUw''@;'; put 'put ''NDAyXHUwNDAzXHUyMDFhXHUwNDUzXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHUyMGFjXHUyMDMwXHUwNDA5XHUyMDM5XHUwNDBhXHUwNDBjXHUwNDBiXHUwNDBmXHUwNDUyXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHVmZmZkXHUyMTIyXHUwNDU5XHUyMDNh''@;'; put 'put ''XHUwNDVhXHUwNDVjXHUwNDViXHUwNDVmXHhhMFx1MDQwZVx1MDQ1ZVx1MDQwOFx4YTRcdTA0OTBceGE2XHhhN1x1MDQwMVx4YTlcdTA0MDRceGFiXHhhY1x4YWRceGFlXHUwNDA3XHhiMFx4YjFcdTA0MDZcdTA0NTZcdTA0OTFceGI1XHhiNlx4YjdcdTA0NTFcdTIxMTZcdTA0NTRceGJiXHUw''@;'; put 'put ''NDU4XHUwNDA1XHUwNDU1XHUwNDU3XHUwNDEwXHUwNDExXHUwNDEyXHUwNDEzXHUwNDE0XHUwNDE1XHUwNDE2XHUwNDE3XHUwNDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDI0XHUwNDI1XHUwNDI2XHUwNDI3''@;'; put 'put ''XHUwNDI4XHUwNDI5XHUwNDJhXHUwNDJiXHUwNDJjXHUwNDJkXHUwNDJlXHUwNDJmXHUwNDMwXHUwNDMxXHUwNDMyXHUwNDMzXHUwNDM0XHUwNDM1XHUwNDM2XHUwNDM3XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNkXHUwNDNlXHUwNDNmXHUwNDQwXHUwNDQxXHUwNDQyXHUw''@;'; put 'put ''NDQzXHUwNDQ0XHUwNDQ1XHUwNDQ2XHUwNDQ3XHUwNDQ4XHUwNDQ5XHUwNDRhXHUwNDRiXHUwNDRjXHUwNDRkXHUwNDRlXHUwNDRmIn0sd2luMTI1MToid2luZG93czEyNTEiLGNwMTI1MToid2luZG93czEyNTEiLHdpbmRvd3MxMjUyOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MjBhY1x1ZmZm''@;'; put 'put ''ZFx1MjAxYVx1MDE5Mlx1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1MDJjNlx1MjAzMFx1MDE2MFx1MjAzOVx1MDE1Mlx1ZmZmZFx1MDE3ZFx1ZmZmZFx1ZmZmZFx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1MDJkY1x1MjEyMlx1MDE2MVx1MjAzYVx1MDE1M1x1''@;'; put 'put ''ZmZmZFx1MDE3ZVx1MDE3OFx4YTBceGExXHhhMlx4YTNceGE0XHhhNVx4YTZceGE3XHhhOFx4YTlceGFhXHhhYlx4YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4YjhceGI5XHhiYVx4YmJceGJjXHhiZFx4YmVceGJmXHhjMFx4YzFceGMyXHhjM1x4YzRc''@;'; put 'put ''eGM1XHhjNlx4YzdceGM4XHhjOVx4Y2FceGNiXHhjY1x4Y2RceGNlXHhjZlx4ZDBceGQxXHhkMlx4ZDNceGQ0XHhkNVx4ZDZceGQ3XHhkOFx4ZDlceGRhXHhkYlx4ZGNceGRkXHhkZVx4ZGZceGUwXHhlMVx4ZTJceGUzXHhlNFx4ZTVceGU2XHhlN1x4ZThceGU5XHhlYVx4ZWJceGVjXHhlZFx4''@;'; put 'put ''ZWVceGVmXHhmMFx4ZjFceGYyXHhmM1x4ZjRceGY1XHhmNlx4ZjdceGY4XHhmOVx4ZmFceGZiXHhmY1x4ZmRceGZlXHhmZiJ9LHdpbjEyNTI6IndpbmRvd3MxMjUyIixjcDEyNTI6IndpbmRvd3MxMjUyIix3aW5kb3dzMTI1Mzp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTIwYWNcdWZmZmRcdTIw''@;'; put 'put ''MWFcdTAxOTJcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdWZmZmRcdTIwMzBcdWZmZmRcdTIwMzlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdWZmZmRcdTIxMjJcdWZmZmRcdTIwM2FcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRceGEwXHUwMzg1XHUwMzg2XHhhM1x4YTRceGE1XHhhNlx4YTdceGE4XHhhOVx1ZmZmZFx4YWJceGFjXHhhZFx4YWVcdTIwMTVceGIwXHhiMVx4YjJceGIzXHUwMzg0XHhiNVx4YjZceGI3XHUwMzg4XHUwMzg5XHUwMzhhXHhiYlx1MDM4Y1x4YmRcdTAzOGVcdTAzOGZcdTAz''@;'; put 'put ''OTBcdTAzOTFcdTAzOTJcdTAzOTNcdTAzOTRcdTAzOTVcdTAzOTZcdTAzOTdcdTAzOThcdTAzOTlcdTAzOWFcdTAzOWJcdTAzOWNcdTAzOWRcdTAzOWVcdTAzOWZcdTAzYTBcdTAzYTFcdWZmZmRcdTAzYTNcdTAzYTRcdTAzYTVcdTAzYTZcdTAzYTdcdTAzYThcdTAzYTlcdTAzYWFcdTAzYWJc''@;'; put 'put ''dTAzYWNcdTAzYWRcdTAzYWVcdTAzYWZcdTAzYjBcdTAzYjFcdTAzYjJcdTAzYjNcdTAzYjRcdTAzYjVcdTAzYjZcdTAzYjdcdTAzYjhcdTAzYjlcdTAzYmFcdTAzYmJcdTAzYmNcdTAzYmRcdTAzYmVcdTAzYmZcdTAzYzBcdTAzYzFcdTAzYzJcdTAzYzNcdTAzYzRcdTAzYzVcdTAzYzZcdTAz''@;'; put 'put ''YzdcdTAzYzhcdTAzYzlcdTAzY2FcdTAzY2JcdTAzY2NcdTAzY2RcdTAzY2VcdWZmZmQifSx3aW4xMjUzOiJ3aW5kb3dzMTI1MyIsY3AxMjUzOiJ3aW5kb3dzMTI1MyIsd2luZG93czEyNTQ6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUyMGFjXHVmZmZkXHUyMDFhXHUwMTkyXHUyMDFlXHUyMDI2''@;'; put 'put ''XHUyMDIwXHUyMDIxXHUwMmM2XHUyMDMwXHUwMTYwXHUyMDM5XHUwMTUyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHUwMmRjXHUyMTIyXHUwMTYxXHUyMDNhXHUwMTUzXHVmZmZkXHVmZmZkXHUwMTc4XHhhMFx4YTFc''@;'; put 'put ''eGEyXHhhM1x4YTRceGE1XHhhNlx4YTdceGE4XHhhOVx4YWFceGFiXHhhY1x4YWRceGFlXHhhZlx4YjBceGIxXHhiMlx4YjNceGI0XHhiNVx4YjZceGI3XHhiOFx4YjlceGJhXHhiYlx4YmNceGJkXHhiZVx4YmZceGMwXHhjMVx4YzJceGMzXHhjNFx4YzVceGM2XHhjN1x4YzhceGM5XHhjYVx4''@;'; put 'put ''Y2JceGNjXHhjZFx4Y2VceGNmXHUwMTFlXHhkMVx4ZDJceGQzXHhkNFx4ZDVceGQ2XHhkN1x4ZDhceGQ5XHhkYVx4ZGJceGRjXHUwMTMwXHUwMTVlXHhkZlx4ZTBceGUxXHhlMlx4ZTNceGU0XHhlNVx4ZTZceGU3XHhlOFx4ZTlceGVhXHhlYlx4ZWNceGVkXHhlZVx4ZWZcdTAxMWZceGYxXHhm''@;'; put 'put ''Mlx4ZjNceGY0XHhmNVx4ZjZceGY3XHhmOFx4ZjlceGZhXHhmYlx4ZmNcdTAxMzFcdTAxNWZceGZmIn0sd2luMTI1NDoid2luZG93czEyNTQiLGNwMTI1NDoid2luZG93czEyNTQiLHdpbmRvd3MxMjU1Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MjBhY1x1ZmZmZFx1MjAxYVx1MDE5Mlx1MjAx''@;'; put 'put ''ZVx1MjAyNlx1MjAyMFx1MjAyMVx1MDJjNlx1MjAzMFx1ZmZmZFx1MjAzOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1MDJkY1x1MjEyMlx1ZmZmZFx1MjAzYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx4''@;'; put 'put ''YTBceGExXHhhMlx4YTNcdTIwYWFceGE1XHhhNlx4YTdceGE4XHhhOVx4ZDdceGFiXHhhY1x4YWRceGFlXHhhZlx4YjBceGIxXHhiMlx4YjNceGI0XHhiNVx4YjZceGI3XHhiOFx4YjlceGY3XHhiYlx4YmNceGJkXHhiZVx4YmZcdTA1YjBcdTA1YjFcdTA1YjJcdTA1YjNcdTA1YjRcdTA1YjVc''@;'; put 'put ''dTA1YjZcdTA1YjdcdTA1YjhcdTA1YjlcdTA1YmFcdTA1YmJcdTA1YmNcdTA1YmRcdTA1YmVcdTA1YmZcdTA1YzBcdTA1YzFcdTA1YzJcdTA1YzNcdTA1ZjBcdTA1ZjFcdTA1ZjJcdTA1ZjNcdTA1ZjRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTA1ZDBcdTA1''@;'; put 'put ''ZDFcdTA1ZDJcdTA1ZDNcdTA1ZDRcdTA1ZDVcdTA1ZDZcdTA1ZDdcdTA1ZDhcdTA1ZDlcdTA1ZGFcdTA1ZGJcdTA1ZGNcdTA1ZGRcdTA1ZGVcdTA1ZGZcdTA1ZTBcdTA1ZTFcdTA1ZTJcdTA1ZTNcdTA1ZTRcdTA1ZTVcdTA1ZTZcdTA1ZTdcdTA1ZThcdTA1ZTlcdTA1ZWFcdWZmZmRcdWZmZmRc''@;'; put 'put ''dTIwMGVcdTIwMGZcdWZmZmQifSx3aW4xMjU1OiJ3aW5kb3dzMTI1NSIsY3AxMjU1OiJ3aW5kb3dzMTI1NSIsd2luZG93czEyNTY6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUyMGFjXHUwNjdlXHUyMDFhXHUwMTkyXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHUwMmM2XHUyMDMwXHUwNjc5XHUy''@;'; put 'put ''MDM5XHUwMTUyXHUwNjg2XHUwNjk4XHUwNjg4XHUwNmFmXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHUwNmE5XHUyMTIyXHUwNjkxXHUyMDNhXHUwMTUzXHUyMDBjXHUyMDBkXHUwNmJhXHhhMFx1MDYwY1x4YTJceGEzXHhhNFx4YTVceGE2XHhhN1x4YThceGE5''@;'; put 'put ''XHUwNmJlXHhhYlx4YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4YjhceGI5XHUwNjFiXHhiYlx4YmNceGJkXHhiZVx1MDYxZlx1MDZjMVx1MDYyMVx1MDYyMlx1MDYyM1x1MDYyNFx1MDYyNVx1MDYyNlx1MDYyN1x1MDYyOFx1MDYyOVx1MDYyYVx1MDYy''@;'; put 'put ''Ylx1MDYyY1x1MDYyZFx1MDYyZVx1MDYyZlx1MDYzMFx1MDYzMVx1MDYzMlx1MDYzM1x1MDYzNFx1MDYzNVx1MDYzNlx4ZDdcdTA2MzdcdTA2MzhcdTA2MzlcdTA2M2FcdTA2NDBcdTA2NDFcdTA2NDJcdTA2NDNceGUwXHUwNjQ0XHhlMlx1MDY0NVx1MDY0Nlx1MDY0N1x1MDY0OFx4ZTdceGU4''@;'; put 'put ''XHhlOVx4ZWFceGViXHUwNjQ5XHUwNjRhXHhlZVx4ZWZcdTA2NGJcdTA2NGNcdTA2NGRcdTA2NGVceGY0XHUwNjRmXHUwNjUwXHhmN1x1MDY1MVx4ZjlcdTA2NTJceGZiXHhmY1x1MjAwZVx1MjAwZlx1MDZkMiJ9LHdpbjEyNTY6IndpbmRvd3MxMjU2IixjcDEyNTY6IndpbmRvd3MxMjU2Iix3''@;'; put 'put ''aW5kb3dzMTI1Nzp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTIwYWNcdWZmZmRcdTIwMWFcdWZmZmRcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdWZmZmRcdTIwMzBcdWZmZmRcdTIwMzlcdWZmZmRceGE4XHUwMmM3XHhiOFx1ZmZmZFx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAx''@;'; put 'put ''M1x1MjAxNFx1ZmZmZFx1MjEyMlx1ZmZmZFx1MjAzYVx1ZmZmZFx4YWZcdTAyZGJcdWZmZmRceGEwXHVmZmZkXHhhMlx4YTNceGE0XHVmZmZkXHhhNlx4YTdceGQ4XHhhOVx1MDE1Nlx4YWJceGFjXHhhZFx4YWVceGM2XHhiMFx4YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4YjdceGY4XHhiOVx1''@;'; put 'put ''MDE1N1x4YmJceGJjXHhiZFx4YmVceGU2XHUwMTA0XHUwMTJlXHUwMTAwXHUwMTA2XHhjNFx4YzVcdTAxMThcdTAxMTJcdTAxMGNceGM5XHUwMTc5XHUwMTE2XHUwMTIyXHUwMTM2XHUwMTJhXHUwMTNiXHUwMTYwXHUwMTQzXHUwMTQ1XHhkM1x1MDE0Y1x4ZDVceGQ2XHhkN1x1MDE3Mlx1MDE0''@;'; put 'put ''MVx1MDE1YVx1MDE2YVx4ZGNcdTAxN2JcdTAxN2RceGRmXHUwMTA1XHUwMTJmXHUwMTAxXHUwMTA3XHhlNFx4ZTVcdTAxMTlcdTAxMTNcdTAxMGRceGU5XHUwMTdhXHUwMTE3XHUwMTIzXHUwMTM3XHUwMTJiXHUwMTNjXHUwMTYxXHUwMTQ0XHUwMTQ2XHhmM1x1MDE0ZFx4ZjVceGY2XHhmN1x1''@;'; put 'put ''MDE3M1x1MDE0Mlx1MDE1Ylx1MDE2Ylx4ZmNcdTAxN2NcdTAxN2VcdTAyZDkifSx3aW4xMjU3OiJ3aW5kb3dzMTI1NyIsY3AxMjU3OiJ3aW5kb3dzMTI1NyIsd2luZG93czEyNTg6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUyMGFjXHVmZmZkXHUyMDFhXHUwMTkyXHUyMDFlXHUyMDI2XHUyMDIw''@;'; put 'put ''XHUyMDIxXHUwMmM2XHUyMDMwXHVmZmZkXHUyMDM5XHUwMTUyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHUwMmRjXHUyMTIyXHVmZmZkXHUyMDNhXHUwMTUzXHVmZmZkXHVmZmZkXHUwMTc4XHhhMFx4YTFceGEyXHhh''@;'; put 'put ''M1x4YTRceGE1XHhhNlx4YTdceGE4XHhhOVx4YWFceGFiXHhhY1x4YWRceGFlXHhhZlx4YjBceGIxXHhiMlx4YjNceGI0XHhiNVx4YjZceGI3XHhiOFx4YjlceGJhXHhiYlx4YmNceGJkXHhiZVx4YmZceGMwXHhjMVx4YzJcdTAxMDJceGM0XHhjNVx4YzZceGM3XHhjOFx4YzlceGNhXHhjYlx1''@;'; put 'put ''MDMwMFx4Y2RceGNlXHhjZlx1MDExMFx4ZDFcdTAzMDlceGQzXHhkNFx1MDFhMFx4ZDZceGQ3XHhkOFx4ZDlceGRhXHhkYlx4ZGNcdTAxYWZcdTAzMDNceGRmXHhlMFx4ZTFceGUyXHUwMTAzXHhlNFx4ZTVceGU2XHhlN1x4ZThceGU5XHhlYVx4ZWJcdTAzMDFceGVkXHhlZVx4ZWZcdTAxMTFc''@;'; put 'put ''eGYxXHUwMzIzXHhmM1x4ZjRcdTAxYTFceGY2XHhmN1x4ZjhceGY5XHhmYVx4ZmJceGZjXHUwMWIwXHUyMGFiXHhmZiJ9LHdpbjEyNTg6IndpbmRvd3MxMjU4IixjcDEyNTg6IndpbmRvd3MxMjU4Iixpc284ODU5MTp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4ODJceDgzXHg4NFx4''@;'; put 'put ''ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBceGExXHhhMlx4YTNceGE0XHhhNVx4YTZceGE3XHhhOFx4YTlceGFhXHhhYlx4YWNceGFkXHhh''@;'; put 'put ''ZVx4YWZceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4YjhceGI5XHhiYVx4YmJceGJjXHhiZFx4YmVceGJmXHhjMFx4YzFceGMyXHhjM1x4YzRceGM1XHhjNlx4YzdceGM4XHhjOVx4Y2FceGNiXHhjY1x4Y2RceGNlXHhjZlx4ZDBceGQxXHhkMlx4ZDNceGQ0XHhkNVx4ZDZceGQ3''@;'; put 'put ''XHhkOFx4ZDlceGRhXHhkYlx4ZGNceGRkXHhkZVx4ZGZceGUwXHhlMVx4ZTJceGUzXHhlNFx4ZTVceGU2XHhlN1x4ZThceGU5XHhlYVx4ZWJceGVjXHhlZFx4ZWVceGVmXHhmMFx4ZjFceGYyXHhmM1x4ZjRceGY1XHhmNlx4ZjdceGY4XHhmOVx4ZmFceGZiXHhmY1x4ZmRceGZlXHhmZiJ9LGNw''@;'; put 'put ''Mjg1OTE6Imlzbzg4NTkxIixpc284ODU5Mjp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4''@;'; put 'put ''OWRceDllXHg5Zlx4YTBcdTAxMDRcdTAyZDhcdTAxNDFceGE0XHUwMTNkXHUwMTVhXHhhN1x4YThcdTAxNjBcdTAxNWVcdTAxNjRcdTAxNzlceGFkXHUwMTdkXHUwMTdiXHhiMFx1MDEwNVx1MDJkYlx1MDE0Mlx4YjRcdTAxM2VcdTAxNWJcdTAyYzdceGI4XHUwMTYxXHUwMTVmXHUwMTY1XHUw''@;'; put 'put ''MTdhXHUwMmRkXHUwMTdlXHUwMTdjXHUwMTU0XHhjMVx4YzJcdTAxMDJceGM0XHUwMTM5XHUwMTA2XHhjN1x1MDEwY1x4YzlcdTAxMThceGNiXHUwMTFhXHhjZFx4Y2VcdTAxMGVcdTAxMTBcdTAxNDNcdTAxNDdceGQzXHhkNFx1MDE1MFx4ZDZceGQ3XHUwMTU4XHUwMTZlXHhkYVx1MDE3MFx4''@;'; put 'put ''ZGNceGRkXHUwMTYyXHhkZlx1MDE1NVx4ZTFceGUyXHUwMTAzXHhlNFx1MDEzYVx1MDEwN1x4ZTdcdTAxMGRceGU5XHUwMTE5XHhlYlx1MDExYlx4ZWRceGVlXHUwMTBmXHUwMTExXHUwMTQ0XHUwMTQ4XHhmM1x4ZjRcdTAxNTFceGY2XHhmN1x1MDE1OVx1MDE2Zlx4ZmFcdTAxNzFceGZjXHhm''@;'; put 'put ''ZFx1MDE2M1x1MDJkOSJ9LGNwMjg1OTI6Imlzbzg4NTkyIixpc284ODU5Mzp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4''@;'; put 'put ''XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBcdTAxMjZcdTAyZDhceGEzXHhhNFx1ZmZmZFx1MDEyNFx4YTdceGE4XHUwMTMwXHUwMTVlXHUwMTFlXHUwMTM0XHhhZFx1ZmZmZFx1MDE3Ylx4YjBcdTAxMjdceGIyXHhiM1x4YjRceGI1XHUwMTI1XHhiN1x4YjhcdTAxMzFcdTAxNWZc''@;'; put 'put ''dTAxMWZcdTAxMzVceGJkXHVmZmZkXHUwMTdjXHhjMFx4YzFceGMyXHVmZmZkXHhjNFx1MDEwYVx1MDEwOFx4YzdceGM4XHhjOVx4Y2FceGNiXHhjY1x4Y2RceGNlXHhjZlx1ZmZmZFx4ZDFceGQyXHhkM1x4ZDRcdTAxMjBceGQ2XHhkN1x1MDExY1x4ZDlceGRhXHhkYlx4ZGNcdTAxNmNcdTAx''@;'; put 'put ''NWNceGRmXHhlMFx4ZTFceGUyXHVmZmZkXHhlNFx1MDEwYlx1MDEwOVx4ZTdceGU4XHhlOVx4ZWFceGViXHhlY1x4ZWRceGVlXHhlZlx1ZmZmZFx4ZjFceGYyXHhmM1x4ZjRcdTAxMjFceGY2XHhmN1x1MDExZFx4ZjlceGZhXHhmYlx4ZmNcdTAxNmRcdTAxNWRcdTAyZDkifSxjcDI4NTkzOiJp''@;'; put 'put ''c284ODU5MyIsaXNvODg1OTQ6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4''@;'; put 'put ''OWZceGEwXHUwMTA0XHUwMTM4XHUwMTU2XHhhNFx1MDEyOFx1MDEzYlx4YTdceGE4XHUwMTYwXHUwMTEyXHUwMTIyXHUwMTY2XHhhZFx1MDE3ZFx4YWZceGIwXHUwMTA1XHUwMmRiXHUwMTU3XHhiNFx1MDEyOVx1MDEzY1x1MDJjN1x4YjhcdTAxNjFcdTAxMTNcdTAxMjNcdTAxNjdcdTAxNGFc''@;'; put 'put ''dTAxN2VcdTAxNGJcdTAxMDBceGMxXHhjMlx4YzNceGM0XHhjNVx4YzZcdTAxMmVcdTAxMGNceGM5XHUwMTE4XHhjYlx1MDExNlx4Y2RceGNlXHUwMTJhXHUwMTEwXHUwMTQ1XHUwMTRjXHUwMTM2XHhkNFx4ZDVceGQ2XHhkN1x4ZDhcdTAxNzJceGRhXHhkYlx4ZGNcdTAxNjhcdTAxNmFceGRm''@;'; put 'put ''XHUwMTAxXHhlMVx4ZTJceGUzXHhlNFx4ZTVceGU2XHUwMTJmXHUwMTBkXHhlOVx1MDExOVx4ZWJcdTAxMTdceGVkXHhlZVx1MDEyYlx1MDExMVx1MDE0Nlx1MDE0ZFx1MDEzN1x4ZjRceGY1XHhmNlx4ZjdceGY4XHUwMTczXHhmYVx4ZmJceGZjXHUwMTY5XHUwMTZiXHUwMmQ5In0sY3AyODU5''@;'; put 'put ''NDoiaXNvODg1OTQiLGlzbzg4NTk1Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4''@;'; put 'put ''OWVceDlmXHhhMFx1MDQwMVx1MDQwMlx1MDQwM1x1MDQwNFx1MDQwNVx1MDQwNlx1MDQwN1x1MDQwOFx1MDQwOVx1MDQwYVx1MDQwYlx1MDQwY1x4YWRcdTA0MGVcdTA0MGZcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0MTRcdTA0MTVcdTA0MTZcdTA0MTdcdTA0MThcdTA0MTlcdTA0MWFc''@;'; put 'put ''dTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0MjhcdTA0MjlcdTA0MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0MmVcdTA0MmZcdTA0MzBcdTA0MzFcdTA0MzJcdTA0MzNcdTA0MzRcdTA0MzVcdTA0''@;'; put 'put ''MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0M2ZcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0NDRcdTA0NDVcdTA0NDZcdTA0NDdcdTA0NDhcdTA0NDlcdTA0NGFcdTA0NGJcdTA0NGNcdTA0NGRcdTA0NGVcdTA0NGZcdTIxMTZcdTA0NTFc''@;'; put 'put ''dTA0NTJcdTA0NTNcdTA0NTRcdTA0NTVcdTA0NTZcdTA0NTdcdTA0NThcdTA0NTlcdTA0NWFcdTA0NWJcdTA0NWNceGE3XHUwNDVlXHUwNDVmIn0sY3AyODU5NToiaXNvODg1OTUiLGlzbzg4NTk2Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3''@;'; put 'put ''XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMFx1ZmZmZFx1ZmZmZFx1ZmZmZFx4YTRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dTA2MGNceGFkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwNjFiXHVmZmZkXHVmZmZkXHVmZmZkXHUwNjFmXHVmZmZkXHUwNjIxXHUwNjIyXHUwNjIzXHUwNjI0XHUwNjI1XHUwNjI2XHUwNjI3''@;'; put 'put ''XHUwNjI4XHUwNjI5XHUwNjJhXHUwNjJiXHUwNjJjXHUwNjJkXHUwNjJlXHUwNjJmXHUwNjMwXHUwNjMxXHUwNjMyXHUwNjMzXHUwNjM0XHUwNjM1XHUwNjM2XHUwNjM3XHUwNjM4XHUwNjM5XHUwNjNhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwNjQwXHUwNjQxXHUwNjQyXHUw''@;'; put 'put ''NjQzXHUwNjQ0XHUwNjQ1XHUwNjQ2XHUwNjQ3XHUwNjQ4XHUwNjQ5XHUwNjRhXHUwNjRiXHUwNjRjXHUwNjRkXHUwNjRlXHUwNjRmXHUwNjUwXHUwNjUxXHUwNjUyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkIn0sY3AyODU5NjoiaXNvODg1OTYiLGlzbzg4NTk3Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5''@;'; put 'put ''YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMFx1MjAxOFx1MjAxOVx4YTNcdTIwYWNcdTIwYWZceGE2XHhhN1x4YThceGE5XHUwMzdhXHhhYlx4YWNceGFkXHVmZmZkXHUyMDE1XHhiMFx4YjFceGIyXHhiM1x1MDM4NFx1MDM4NVx1MDM4Nlx4YjdcdTAzODhcdTAzODlcdTAzOGFceGJiXHUwMzhj''@;'; put 'put ''XHhiZFx1MDM4ZVx1MDM4Zlx1MDM5MFx1MDM5MVx1MDM5Mlx1MDM5M1x1MDM5NFx1MDM5NVx1MDM5Nlx1MDM5N1x1MDM5OFx1MDM5OVx1MDM5YVx1MDM5Ylx1MDM5Y1x1MDM5ZFx1MDM5ZVx1MDM5Zlx1MDNhMFx1MDNhMVx1ZmZmZFx1MDNhM1x1MDNhNFx1MDNhNVx1MDNhNlx1MDNhN1x1MDNh''@;'; put 'put ''OFx1MDNhOVx1MDNhYVx1MDNhYlx1MDNhY1x1MDNhZFx1MDNhZVx1MDNhZlx1MDNiMFx1MDNiMVx1MDNiMlx1MDNiM1x1MDNiNFx1MDNiNVx1MDNiNlx1MDNiN1x1MDNiOFx1MDNiOVx1MDNiYVx1MDNiYlx1MDNiY1x1MDNiZFx1MDNiZVx1MDNiZlx1MDNjMFx1MDNjMVx1MDNjMlx1MDNjM1x1''@;'; put 'put ''MDNjNFx1MDNjNVx1MDNjNlx1MDNjN1x1MDNjOFx1MDNjOVx1MDNjYVx1MDNjYlx1MDNjY1x1MDNjZFx1MDNjZVx1ZmZmZCJ9LGNwMjg1OTc6Imlzbzg4NTk3Iixpc284ODU5ODp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4''@;'; put 'put ''YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBcdWZmZmRceGEyXHhhM1x4YTRceGE1XHhhNlx4YTdceGE4XHhhOVx4ZDdceGFiXHhhY1x4YWRceGFlXHhhZlx4YjBceGIxXHhiMlx4''@;'; put 'put ''YjNceGI0XHhiNVx4YjZceGI3XHhiOFx4YjlceGY3XHhiYlx4YmNceGJkXHhiZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjAxN1x1MDVkMFx1MDVkMVx1MDVkMlx1MDVkM1x1MDVkNFx1MDVkNVx1MDVkNlx1MDVkN1x1MDVkOFx1MDVkOVx1MDVkYVx1MDVkYlx1MDVkY1x1MDVkZFx1''@;'; put 'put ''MDVkZVx1MDVkZlx1MDVlMFx1MDVlMVx1MDVlMlx1MDVlM1x1MDVlNFx1MDVlNVx1MDVlNlx1MDVlN1x1MDVlOFx1MDVlOVx1MDVlYVx1ZmZmZFx1ZmZmZFx1MjAwZVx1MjAwZlx1ZmZmZCJ9LGNwMjg1OTg6Imlzbzg4NTk4Iixpc284ODU5OTp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4''@;'; put 'put ''MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBceGExXHhhMlx4YTNceGE0XHhhNVx4YTZceGE3XHhhOFx4YTlceGFh''@;'; put 'put ''XHhhYlx4YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4YjhceGI5XHhiYVx4YmJceGJjXHhiZFx4YmVceGJmXHhjMFx4YzFceGMyXHhjM1x4YzRceGM1XHhjNlx4YzdceGM4XHhjOVx4Y2FceGNiXHhjY1x4Y2RceGNlXHhjZlx1MDExZVx4ZDFceGQyXHhk''@;'; put 'put ''M1x4ZDRceGQ1XHhkNlx4ZDdceGQ4XHhkOVx4ZGFceGRiXHhkY1x1MDEzMFx1MDE1ZVx4ZGZceGUwXHhlMVx4ZTJceGUzXHhlNFx4ZTVceGU2XHhlN1x4ZThceGU5XHhlYVx4ZWJceGVjXHhlZFx4ZWVceGVmXHUwMTFmXHhmMVx4ZjJceGYzXHhmNFx4ZjVceGY2XHhmN1x4ZjhceGY5XHhmYVx4''@;'; put 'put ''ZmJceGZjXHUwMTMxXHUwMTVmXHhmZiJ9LGNwMjg1OTk6Imlzbzg4NTk5Iixpc284ODU5MTA6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4''@;'; put 'put ''OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHUwMTA0XHUwMTEyXHUwMTIyXHUwMTJhXHUwMTI4XHUwMTM2XHhhN1x1MDEzYlx1MDExMFx1MDE2MFx1MDE2Nlx1MDE3ZFx4YWRcdTAxNmFcdTAxNGFceGIwXHUwMTA1XHUwMTEzXHUwMTIzXHUwMTJiXHUwMTI5XHUw''@;'; put 'put ''MTM3XHhiN1x1MDEzY1x1MDExMVx1MDE2MVx1MDE2N1x1MDE3ZVx1MjAxNVx1MDE2Ylx1MDE0Ylx1MDEwMFx4YzFceGMyXHhjM1x4YzRceGM1XHhjNlx1MDEyZVx1MDEwY1x4YzlcdTAxMThceGNiXHUwMTE2XHhjZFx4Y2VceGNmXHhkMFx1MDE0NVx1MDE0Y1x4ZDNceGQ0XHhkNVx4ZDZcdTAx''@;'; put 'put ''NjhceGQ4XHUwMTcyXHhkYVx4ZGJceGRjXHhkZFx4ZGVceGRmXHUwMTAxXHhlMVx4ZTJceGUzXHhlNFx4ZTVceGU2XHUwMTJmXHUwMTBkXHhlOVx1MDExOVx4ZWJcdTAxMTdceGVkXHhlZVx4ZWZceGYwXHUwMTQ2XHUwMTRkXHhmM1x4ZjRceGY1XHhmNlx1MDE2OVx4ZjhcdTAxNzNceGZhXHhm''@;'; put 'put ''Ylx4ZmNceGZkXHhmZVx1MDEzOCJ9LGNwMjg2MDA6Imlzbzg4NTkxMCIsaXNvODg1OTExOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2''@;'; put 'put ''XHg5N1x4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMFx1MGUwMVx1MGUwMlx1MGUwM1x1MGUwNFx1MGUwNVx1MGUwNlx1MGUwN1x1MGUwOFx1MGUwOVx1MGUwYVx1MGUwYlx1MGUwY1x1MGUwZFx1MGUwZVx1MGUwZlx1MGUxMFx1MGUxMVx1MGUxMlx1MGUxM1x1MGUxNFx1MGUx''@;'; put 'put ''NVx1MGUxNlx1MGUxN1x1MGUxOFx1MGUxOVx1MGUxYVx1MGUxYlx1MGUxY1x1MGUxZFx1MGUxZVx1MGUxZlx1MGUyMFx1MGUyMVx1MGUyMlx1MGUyM1x1MGUyNFx1MGUyNVx1MGUyNlx1MGUyN1x1MGUyOFx1MGUyOVx1MGUyYVx1MGUyYlx1MGUyY1x1MGUyZFx1MGUyZVx1MGUyZlx1MGUzMFx1''@;'; put 'put ''MGUzMVx1MGUzMlx1MGUzM1x1MGUzNFx1MGUzNVx1MGUzNlx1MGUzN1x1MGUzOFx1MGUzOVx1MGUzYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MGUzZlx1MGU0MFx1MGU0MVx1MGU0Mlx1MGU0M1x1MGU0NFx1MGU0NVx1MGU0Nlx1MGU0N1x1MGU0OFx1MGU0OVx1MGU0YVx1MGU0Ylx1MGU0''@;'; put 'put ''Y1x1MGU0ZFx1MGU0ZVx1MGU0Zlx1MGU1MFx1MGU1MVx1MGU1Mlx1MGU1M1x1MGU1NFx1MGU1NVx1MGU1Nlx1MGU1N1x1MGU1OFx1MGU1OVx1MGU1YVx1MGU1Ylx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCJ9LGNwMjg2MDE6Imlzbzg4NTkxMSIsaXNvODg1OTEzOnt0eXBlOiJfc2JjcyIsY2hh''@;'; put 'put ''cnM6Ilx4ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMFx1MjAxZFx4YTJceGEzXHhhNFx1MjAxZVx4YTZc''@;'; put 'put ''eGE3XHhkOFx4YTlcdTAxNTZceGFiXHhhY1x4YWRceGFlXHhjNlx4YjBceGIxXHhiMlx4YjNcdTIwMWNceGI1XHhiNlx4YjdceGY4XHhiOVx1MDE1N1x4YmJceGJjXHhiZFx4YmVceGU2XHUwMTA0XHUwMTJlXHUwMTAwXHUwMTA2XHhjNFx4YzVcdTAxMThcdTAxMTJcdTAxMGNceGM5XHUwMTc5''@;'; put 'put ''XHUwMTE2XHUwMTIyXHUwMTM2XHUwMTJhXHUwMTNiXHUwMTYwXHUwMTQzXHUwMTQ1XHhkM1x1MDE0Y1x4ZDVceGQ2XHhkN1x1MDE3Mlx1MDE0MVx1MDE1YVx1MDE2YVx4ZGNcdTAxN2JcdTAxN2RceGRmXHUwMTA1XHUwMTJmXHUwMTAxXHUwMTA3XHhlNFx4ZTVcdTAxMTlcdTAxMTNcdTAxMGRc''@;'; put 'put ''eGU5XHUwMTdhXHUwMTE3XHUwMTIzXHUwMTM3XHUwMTJiXHUwMTNjXHUwMTYxXHUwMTQ0XHUwMTQ2XHhmM1x1MDE0ZFx4ZjVceGY2XHhmN1x1MDE3M1x1MDE0Mlx1MDE1Ylx1MDE2Ylx4ZmNcdTAxN2NcdTAxN2VcdTIwMTkifSxjcDI4NjAzOiJpc284ODU5MTMiLGlzbzg4NTkxNDp7dHlwZToi''@;'; put 'put ''X3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBcdTFlMDJcdTFlMDNceGEzXHUw''@;'; put 'put ''MTBhXHUwMTBiXHUxZTBhXHhhN1x1MWU4MFx4YTlcdTFlODJcdTFlMGJcdTFlZjJceGFkXHhhZVx1MDE3OFx1MWUxZVx1MWUxZlx1MDEyMFx1MDEyMVx1MWU0MFx1MWU0MVx4YjZcdTFlNTZcdTFlODFcdTFlNTdcdTFlODNcdTFlNjBcdTFlZjNcdTFlODRcdTFlODVcdTFlNjFceGMwXHhjMVx4''@;'; put 'put ''YzJceGMzXHhjNFx4YzVceGM2XHhjN1x4YzhceGM5XHhjYVx4Y2JceGNjXHhjZFx4Y2VceGNmXHUwMTc0XHhkMVx4ZDJceGQzXHhkNFx4ZDVceGQ2XHUxZTZhXHhkOFx4ZDlceGRhXHhkYlx4ZGNceGRkXHUwMTc2XHhkZlx4ZTBceGUxXHhlMlx4ZTNceGU0XHhlNVx4ZTZceGU3XHhlOFx4ZTlc''@;'; put 'put ''eGVhXHhlYlx4ZWNceGVkXHhlZVx4ZWZcdTAxNzVceGYxXHhmMlx4ZjNceGY0XHhmNVx4ZjZcdTFlNmJceGY4XHhmOVx4ZmFceGZiXHhmY1x4ZmRcdTAxNzdceGZmIn0sY3AyODYwNDoiaXNvODg1OTE0Iixpc284ODU5MTU6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFceDgyXHg4M1x4''@;'; put 'put ''ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHhhMVx4YTJceGEzXHUyMGFjXHhhNVx1MDE2MFx4YTdcdTAxNjFceGE5XHhhYVx4YWJc''@;'; put 'put ''eGFjXHhhZFx4YWVceGFmXHhiMFx4YjFceGIyXHhiM1x1MDE3ZFx4YjVceGI2XHhiN1x1MDE3ZVx4YjlceGJhXHhiYlx1MDE1Mlx1MDE1M1x1MDE3OFx4YmZceGMwXHhjMVx4YzJceGMzXHhjNFx4YzVceGM2XHhjN1x4YzhceGM5XHhjYVx4Y2JceGNjXHhjZFx4Y2VceGNmXHhkMFx4ZDFceGQy''@;'; put 'put ''XHhkM1x4ZDRceGQ1XHhkNlx4ZDdceGQ4XHhkOVx4ZGFceGRiXHhkY1x4ZGRceGRlXHhkZlx4ZTBceGUxXHhlMlx4ZTNceGU0XHhlNVx4ZTZceGU3XHhlOFx4ZTlceGVhXHhlYlx4ZWNceGVkXHhlZVx4ZWZceGYwXHhmMVx4ZjJceGYzXHhmNFx4ZjVceGY2XHhmN1x4ZjhceGY5XHhmYVx4ZmJc''@;'; put 'put ''eGZjXHhmZFx4ZmVceGZmIn0sY3AyODYwNToiaXNvODg1OTE1Iixpc284ODU5MTY6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3''@;'; put 'put ''XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHUwMTA0XHUwMTA1XHUwMTQxXHUyMGFjXHUyMDFlXHUwMTYwXHhhN1x1MDE2MVx4YTlcdTAyMThceGFiXHUwMTc5XHhhZFx1MDE3YVx1MDE3Ylx4YjBceGIxXHUwMTBjXHUwMTQyXHUwMTdkXHUyMDFkXHhiNlx4YjdcdTAxN2Vc''@;'; put 'put ''dTAxMGRcdTAyMTlceGJiXHUwMTUyXHUwMTUzXHUwMTc4XHUwMTdjXHhjMFx4YzFceGMyXHUwMTAyXHhjNFx1MDEwNlx4YzZceGM3XHhjOFx4YzlceGNhXHhjYlx4Y2NceGNkXHhjZVx4Y2ZcdTAxMTBcdTAxNDNceGQyXHhkM1x4ZDRcdTAxNTBceGQ2XHUwMTVhXHUwMTcwXHhkOVx4ZGFceGRi''@;'; put 'put ''XHhkY1x1MDExOFx1MDIxYVx4ZGZceGUwXHhlMVx4ZTJcdTAxMDNceGU0XHUwMTA3XHhlNlx4ZTdceGU4XHhlOVx4ZWFceGViXHhlY1x4ZWRceGVlXHhlZlx1MDExMVx1MDE0NFx4ZjJceGYzXHhmNFx1MDE1MVx4ZjZcdTAxNWJcdTAxNzFceGY5XHhmYVx4ZmJceGZjXHUwMTE5XHUwMjFiXHhm''@;'; put 'put ''ZiJ9LGNwMjg2MDY6Imlzbzg4NTkxNiIsY3A0Mzc6e3R5cGU6Il9zYmNzIixjaGFyczoiXHhjN1x4ZmNceGU5XHhlMlx4ZTRceGUwXHhlNVx4ZTdceGVhXHhlYlx4ZThceGVmXHhlZVx4ZWNceGM0XHhjNVx4YzlceGU2XHhjNlx4ZjRceGY2XHhmMlx4ZmJceGY5XHhmZlx4ZDZceGRjXHhhMlx4''@;'; put 'put ''YTNceGE1XHUyMGE3XHUwMTkyXHhlMVx4ZWRceGYzXHhmYVx4ZjFceGQxXHhhYVx4YmFceGJmXHUyMzEwXHhhY1x4YmRceGJjXHhhMVx4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHUyNTYxXHUyNTYyXHUyNTU2XHUyNTU1XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUy''@;'; put 'put ''NTVjXHUyNTViXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUyNTVlXHUyNTVmXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHUyNTY3XHUyNTY4XHUyNTY0XHUyNTY1XHUyNTU5XHUyNTU4XHUyNTUyXHUyNTUzXHUyNTZiXHUyNTZh''@;'; put 'put ''XHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgwXHUwM2IxXHhkZlx1MDM5M1x1MDNjMFx1MDNhM1x1MDNjM1x4YjVcdTAzYzRcdTAzYTZcdTAzOThcdTAzYTlcdTAzYjRcdTIyMWVcdTAzYzZcdTAzYjVcdTIyMjlcdTIyNjFceGIxXHUyMjY1XHUyMjY0XHUyMzIwXHUy''@;'; put 'put ''MzIxXHhmN1x1MjI0OFx4YjBcdTIyMTlceGI3XHUyMjFhXHUyMDdmXHhiMlx1MjVhMFx4YTAifSxpYm00Mzc6ImNwNDM3Iixjc2libTQzNzoiY3A0MzciLGNwNzM3Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MDM5MVx1MDM5Mlx1MDM5M1x1MDM5NFx1MDM5NVx1MDM5Nlx1MDM5N1x1MDM5OFx1''@;'; put 'put ''MDM5OVx1MDM5YVx1MDM5Ylx1MDM5Y1x1MDM5ZFx1MDM5ZVx1MDM5Zlx1MDNhMFx1MDNhMVx1MDNhM1x1MDNhNFx1MDNhNVx1MDNhNlx1MDNhN1x1MDNhOFx1MDNhOVx1MDNiMVx1MDNiMlx1MDNiM1x1MDNiNFx1MDNiNVx1MDNiNlx1MDNiN1x1MDNiOFx1MDNiOVx1MDNiYVx1MDNiYlx1MDNi''@;'; put 'put ''Y1x1MDNiZFx1MDNiZVx1MDNiZlx1MDNjMFx1MDNjMVx1MDNjM1x1MDNjMlx1MDNjNFx1MDNjNVx1MDNjNlx1MDNjN1x1MDNjOFx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MjU2MVx1MjU2Mlx1MjU1Nlx1MjU1NVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MjU1Y1x1MjU1Ylx1''@;'; put 'put ''MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MjU2N1x1MjU2OFx1MjU2NFx1MjU2NVx1MjU1OVx1MjU1OFx1MjU1Mlx1MjU1M1x1MjU2Ylx1MjU2YVx1MjUxOFx1MjUw''@;'; put 'put ''Y1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1MDNjOVx1MDNhY1x1MDNhZFx1MDNhZVx1MDNjYVx1MDNhZlx1MDNjY1x1MDNjZFx1MDNjYlx1MDNjZVx1MDM4Nlx1MDM4OFx1MDM4OVx1MDM4YVx1MDM4Y1x1MDM4ZVx1MDM4Zlx4YjFcdTIyNjVcdTIyNjRcdTAzYWFcdTAzYWJceGY3''@;'; put 'put ''XHUyMjQ4XHhiMFx1MjIxOVx4YjdcdTIyMWFcdTIwN2ZceGIyXHUyNWEwXHhhMCJ9LGlibTczNzoiY3A3MzciLGNzaWJtNzM3OiJjcDczNyIsY3A3NzU6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUwMTA2XHhmY1x4ZTlcdTAxMDFceGU0XHUwMTIzXHhlNVx1MDEwN1x1MDE0Mlx1MDExM1x1MDE1''@;'; put 'put ''Nlx1MDE1N1x1MDEyYlx1MDE3OVx4YzRceGM1XHhjOVx4ZTZceGM2XHUwMTRkXHhmNlx1MDEyMlx4YTJcdTAxNWFcdTAxNWJceGQ2XHhkY1x4ZjhceGEzXHhkOFx4ZDdceGE0XHUwMTAwXHUwMTJhXHhmM1x1MDE3Ylx1MDE3Y1x1MDE3YVx1MjAxZFx4YTZceGE5XHhhZVx4YWNceGJkXHhiY1x1''@;'; put 'put ''MDE0MVx4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHUwMTA0XHUwMTBjXHUwMTE4XHUwMTE2XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUwMTJlXHUwMTYwXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUwMTcyXHUwMTZhXHUyNTVhXHUy''@;'; put 'put ''NTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHUwMTdkXHUwMTA1XHUwMTBkXHUwMTE5XHUwMTE3XHUwMTJmXHUwMTYxXHUwMTczXHUwMTZiXHUwMTdlXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgwXHhkM1x4ZGZcdTAxNGNcdTAxNDNceGY1XHhkNVx4''@;'; put 'put ''YjVcdTAxNDRcdTAxMzZcdTAxMzdcdTAxM2JcdTAxM2NcdTAxNDZcdTAxMTJcdTAxNDVcdTIwMTlceGFkXHhiMVx1MjAxY1x4YmVceGI2XHhhN1x4ZjdcdTIwMWVceGIwXHUyMjE5XHhiN1x4YjlceGIzXHhiMlx1MjVhMFx4YTAifSxpYm03NzU6ImNwNzc1Iixjc2libTc3NToiY3A3NzUiLGNw''@;'; put 'put ''ODUwOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4YzdceGZjXHhlOVx4ZTJceGU0XHhlMFx4ZTVceGU3XHhlYVx4ZWJceGU4XHhlZlx4ZWVceGVjXHhjNFx4YzVceGM5XHhlNlx4YzZceGY0XHhmNlx4ZjJceGZiXHhmOVx4ZmZceGQ2XHhkY1x4ZjhceGEzXHhkOFx4ZDdcdTAxOTJceGUxXHhlZFx4''@;'; put 'put ''ZjNceGZhXHhmMVx4ZDFceGFhXHhiYVx4YmZceGFlXHhhY1x4YmRceGJjXHhhMVx4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHhjMVx4YzJceGMwXHhhOVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx4YTJceGE1XHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUy''@;'; put 'put ''NTAwXHUyNTNjXHhlM1x4YzNcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNceGE0XHhmMFx4ZDBceGNhXHhjYlx4YzhcdTAxMzFceGNkXHhjZVx4Y2ZcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRceGE2XHhjY1x1MjU4MFx4ZDNceGRmXHhkNFx4ZDJceGY1XHhkNVx4''@;'; put 'put ''YjVceGZlXHhkZVx4ZGFceGRiXHhkOVx4ZmRceGRkXHhhZlx4YjRceGFkXHhiMVx1MjAxN1x4YmVceGI2XHhhN1x4ZjdceGI4XHhiMFx4YThceGI3XHhiOVx4YjNceGIyXHUyNWEwXHhhMCJ9LGlibTg1MDoiY3A4NTAiLGNzaWJtODUwOiJjcDg1MCIsY3A4NTI6e3R5cGU6Il9zYmNzIixjaGFy''@;'; put 'put ''czoiXHhjN1x4ZmNceGU5XHhlMlx4ZTRcdTAxNmZcdTAxMDdceGU3XHUwMTQyXHhlYlx1MDE1MFx1MDE1MVx4ZWVcdTAxNzlceGM0XHUwMTA2XHhjOVx1MDEzOVx1MDEzYVx4ZjRceGY2XHUwMTNkXHUwMTNlXHUwMTVhXHUwMTViXHhkNlx4ZGNcdTAxNjRcdTAxNjVcdTAxNDFceGQ3XHUwMTBk''@;'; put 'put ''XHhlMVx4ZWRceGYzXHhmYVx1MDEwNFx1MDEwNVx1MDE3ZFx1MDE3ZVx1MDExOFx1MDExOVx4YWNcdTAxN2FcdTAxMGNcdTAxNWZceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx4YzFceGMyXHUwMTFhXHUwMTVlXHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUwMTdiXHUw''@;'; put 'put ''MTdjXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUwMTAyXHUwMTAzXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHhhNFx1MDExMVx1MDExMFx1MDEwZVx4Y2JcdTAxMGZcdTAxNDdceGNkXHhjZVx1MDExYlx1MjUxOFx1MjUwY1x1''@;'; put 'put ''MjU4OFx1MjU4NFx1MDE2Mlx1MDE2ZVx1MjU4MFx4ZDNceGRmXHhkNFx1MDE0M1x1MDE0NFx1MDE0OFx1MDE2MFx1MDE2MVx1MDE1NFx4ZGFcdTAxNTVcdTAxNzBceGZkXHhkZFx1MDE2M1x4YjRceGFkXHUwMmRkXHUwMmRiXHUwMmM3XHUwMmQ4XHhhN1x4ZjdceGI4XHhiMFx4YThcdTAyZDlc''@;'; put 'put ''dTAxNzFcdTAxNThcdTAxNTlcdTI1YTBceGEwIn0saWJtODUyOiJjcDg1MiIsY3NpYm04NTI6ImNwODUyIixjcDg1NTp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTA0NTJcdTA0MDJcdTA0NTNcdTA0MDNcdTA0NTFcdTA0MDFcdTA0NTRcdTA0MDRcdTA0NTVcdTA0MDVcdTA0NTZcdTA0MDZcdTA0''@;'; put 'put ''NTdcdTA0MDdcdTA0NThcdTA0MDhcdTA0NTlcdTA0MDlcdTA0NWFcdTA0MGFcdTA0NWJcdTA0MGJcdTA0NWNcdTA0MGNcdTA0NWVcdTA0MGVcdTA0NWZcdTA0MGZcdTA0NGVcdTA0MmVcdTA0NGFcdTA0MmFcdTA0MzBcdTA0MTBcdTA0MzFcdTA0MTFcdTA0NDZcdTA0MjZcdTA0MzRcdTA0MTRc''@;'; put 'put ''dTA0MzVcdTA0MTVcdTA0NDRcdTA0MjRcdTA0MzNcdTA0MTNceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MDQ0NVx1MDQyNVx1MDQzOFx1MDQxOFx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MDQzOVx1MDQxOVx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1''@;'; put 'put ''MjUwMFx1MjUzY1x1MDQzYVx1MDQxYVx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x4YTRcdTA0M2JcdTA0MWJcdTA0M2NcdTA0MWNcdTA0M2RcdTA0MWRcdTA0M2VcdTA0MWVcdTA0M2ZcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTA0MWZcdTA0NGZcdTI1ODBc''@;'; put 'put ''dTA0MmZcdTA0NDBcdTA0MjBcdTA0NDFcdTA0MjFcdTA0NDJcdTA0MjJcdTA0NDNcdTA0MjNcdTA0MzZcdTA0MTZcdTA0MzJcdTA0MTJcdTA0NGNcdTA0MmNcdTIxMTZceGFkXHUwNDRiXHUwNDJiXHUwNDM3XHUwNDE3XHUwNDQ4XHUwNDI4XHUwNDRkXHUwNDJkXHUwNDQ5XHUwNDI5XHUwNDQ3''@;'; put 'put ''XHUwNDI3XHhhN1x1MjVhMFx4YTAifSxpYm04NTU6ImNwODU1Iixjc2libTg1NToiY3A4NTUiLGNwODU2Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MDVkMFx1MDVkMVx1MDVkMlx1MDVkM1x1MDVkNFx1MDVkNVx1MDVkNlx1MDVkN1x1MDVkOFx1MDVkOVx1MDVkYVx1MDVkYlx1MDVkY1x1MDVk''@;'; put 'put ''ZFx1MDVkZVx1MDVkZlx1MDVlMFx1MDVlMVx1MDVlMlx1MDVlM1x1MDVlNFx1MDVlNVx1MDVlNlx1MDVlN1x1MDVlOFx1MDVlOVx1MDVlYVx1ZmZmZFx4YTNcdWZmZmRceGQ3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHhhZVx4''@;'; put 'put ''YWNceGJkXHhiY1x1ZmZmZFx4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHVmZmZkXHVmZmZkXHVmZmZkXHhhOVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx4YTJceGE1XHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHVmZmZkXHVmZmZkXHUy''@;'; put 'put ''NTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHhhNFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx4YTZcdWZmZmRcdTI1ODBcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRceGI1XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHhhZlx4YjRceGFkXHhiMVx1MjAxN1x4YmVceGI2XHhhN1x4ZjdceGI4XHhiMFx4YThceGI3XHhiOVx4YjNceGIyXHUyNWEwXHhhMCJ9LGlibTg1NjoiY3A4NTYiLGNzaWJtODU2OiJjcDg1NiIs''@;'; put 'put ''Y3A4NTc6e3R5cGU6Il9zYmNzIixjaGFyczoiXHhjN1x4ZmNceGU5XHhlMlx4ZTRceGUwXHhlNVx4ZTdceGVhXHhlYlx4ZThceGVmXHhlZVx1MDEzMVx4YzRceGM1XHhjOVx4ZTZceGM2XHhmNFx4ZjZceGYyXHhmYlx4ZjlcdTAxMzBceGQ2XHhkY1x4ZjhceGEzXHhkOFx1MDE1ZVx1MDE1Zlx4''@;'; put 'put ''ZTFceGVkXHhmM1x4ZmFceGYxXHhkMVx1MDExZVx1MDExZlx4YmZceGFlXHhhY1x4YmRceGJjXHhhMVx4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHhjMVx4YzJceGMwXHhhOVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx4YTJceGE1XHUyNTEwXHUyNTE0XHUyNTM0XHUy''@;'; put 'put ''NTJjXHUyNTFjXHUyNTAwXHUyNTNjXHhlM1x4YzNcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNceGE0XHhiYVx4YWFceGNhXHhjYlx4YzhcdWZmZmRceGNkXHhjZVx4Y2ZcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRceGE2XHhjY1x1MjU4MFx4ZDNceGRmXHhkNFx4''@;'; put 'put ''ZDJceGY1XHhkNVx4YjVcdWZmZmRceGQ3XHhkYVx4ZGJceGQ5XHhlY1x4ZmZceGFmXHhiNFx4YWRceGIxXHVmZmZkXHhiZVx4YjZceGE3XHhmN1x4YjhceGIwXHhhOFx4YjdceGI5XHhiM1x4YjJcdTI1YTBceGEwIn0saWJtODU3OiJjcDg1NyIsY3NpYm04NTc6ImNwODU3IixjcDg1ODp7dHlw''@;'; put 'put ''ZToiX3NiY3MiLGNoYXJzOiJceGM3XHhmY1x4ZTlceGUyXHhlNFx4ZTBceGU1XHhlN1x4ZWFceGViXHhlOFx4ZWZceGVlXHhlY1x4YzRceGM1XHhjOVx4ZTZceGM2XHhmNFx4ZjZceGYyXHhmYlx4ZjlceGZmXHhkNlx4ZGNceGY4XHhhM1x4ZDhceGQ3XHUwMTkyXHhlMVx4ZWRceGYzXHhmYVx4''@;'; put 'put ''ZjFceGQxXHhhYVx4YmFceGJmXHhhZVx4YWNceGJkXHhiY1x4YTFceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx4YzFceGMyXHhjMFx4YTlcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRceGEyXHhhNVx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUz''@;'; put 'put ''Y1x4ZTNceGMzXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHhhNFx4ZjBceGQwXHhjYVx4Y2JceGM4XHUyMGFjXHhjZFx4Y2VceGNmXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHhhNlx4Y2NcdTI1ODBceGQzXHhkZlx4ZDRceGQyXHhmNVx4ZDVceGI1XHhmZVx4''@;'; put 'put ''ZGVceGRhXHhkYlx4ZDlceGZkXHhkZFx4YWZceGI0XHhhZFx4YjFcdTIwMTdceGJlXHhiNlx4YTdceGY3XHhiOFx4YjBceGE4XHhiN1x4YjlceGIzXHhiMlx1MjVhMFx4YTAifSxpYm04NTg6ImNwODU4Iixjc2libTg1ODoiY3A4NTgiLGNwODYwOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4Yzdc''@;'; put 'put ''eGZjXHhlOVx4ZTJceGUzXHhlMFx4YzFceGU3XHhlYVx4Y2FceGU4XHhjZFx4ZDRceGVjXHhjM1x4YzJceGM5XHhjMFx4YzhceGY0XHhmNVx4ZjJceGRhXHhmOVx4Y2NceGQ1XHhkY1x4YTJceGEzXHhkOVx1MjBhN1x4ZDNceGUxXHhlZFx4ZjNceGZhXHhmMVx4ZDFceGFhXHhiYVx4YmZceGQy''@;'; put 'put ''XHhhY1x4YmRceGJjXHhhMVx4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHUyNTYxXHUyNTYyXHUyNTU2XHUyNTU1XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUyNTVjXHUyNTViXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUyNTVlXHUy''@;'; put 'put ''NTVmXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHUyNTY3XHUyNTY4XHUyNTY0XHUyNTY1XHUyNTU5XHUyNTU4XHUyNTUyXHUyNTUzXHUyNTZiXHUyNTZhXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgwXHUwM2IxXHhkZlx1MDM5M1x1''@;'; put 'put ''MDNjMFx1MDNhM1x1MDNjM1x4YjVcdTAzYzRcdTAzYTZcdTAzOThcdTAzYTlcdTAzYjRcdTIyMWVcdTAzYzZcdTAzYjVcdTIyMjlcdTIyNjFceGIxXHUyMjY1XHUyMjY0XHUyMzIwXHUyMzIxXHhmN1x1MjI0OFx4YjBcdTIyMTlceGI3XHUyMjFhXHUyMDdmXHhiMlx1MjVhMFx4YTAifSxpYm04''@;'; put 'put ''NjA6ImNwODYwIixjc2libTg2MDoiY3A4NjAiLGNwODYxOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4YzdceGZjXHhlOVx4ZTJceGU0XHhlMFx4ZTVceGU3XHhlYVx4ZWJceGU4XHhkMFx4ZjBceGRlXHhjNFx4YzVceGM5XHhlNlx4YzZceGY0XHhmNlx4ZmVceGZiXHhkZFx4ZmRceGQ2XHhkY1x4''@;'; put 'put ''ZjhceGEzXHhkOFx1MjBhN1x1MDE5Mlx4ZTFceGVkXHhmM1x4ZmFceGMxXHhjZFx4ZDNceGRhXHhiZlx1MjMxMFx4YWNceGJkXHhiY1x4YTFceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MjU2MVx1MjU2Mlx1MjU1Nlx1MjU1NVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1''@;'; put 'put ''ZFx1MjU1Y1x1MjU1Ylx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MjU2N1x1MjU2OFx1MjU2NFx1MjU2NVx1MjU1OVx1MjU1OFx1MjU1Mlx1MjU1M1x1MjU2Ylx1''@;'; put 'put ''MjU2YVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1MDNiMVx4ZGZcdTAzOTNcdTAzYzBcdTAzYTNcdTAzYzNceGI1XHUwM2M0XHUwM2E2XHUwMzk4XHUwM2E5XHUwM2I0XHUyMjFlXHUwM2M2XHUwM2I1XHUyMjI5XHUyMjYxXHhiMVx1MjI2NVx1MjI2NFx1MjMy''@;'; put 'put ''MFx1MjMyMVx4ZjdcdTIyNDhceGIwXHUyMjE5XHhiN1x1MjIxYVx1MjA3Zlx4YjJcdTI1YTBceGEwIn0saWJtODYxOiJjcDg2MSIsY3NpYm04NjE6ImNwODYxIixjcDg2Mjp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTA1ZDBcdTA1ZDFcdTA1ZDJcdTA1ZDNcdTA1ZDRcdTA1ZDVcdTA1ZDZcdTA1''@;'; put 'put ''ZDdcdTA1ZDhcdTA1ZDlcdTA1ZGFcdTA1ZGJcdTA1ZGNcdTA1ZGRcdTA1ZGVcdTA1ZGZcdTA1ZTBcdTA1ZTFcdTA1ZTJcdTA1ZTNcdTA1ZTRcdTA1ZTVcdTA1ZTZcdTA1ZTdcdTA1ZThcdTA1ZTlcdTA1ZWFceGEyXHhhM1x4YTVcdTIwYTdcdTAxOTJceGUxXHhlZFx4ZjNceGZhXHhmMVx4ZDFc''@;'; put 'put ''eGFhXHhiYVx4YmZcdTIzMTBceGFjXHhiZFx4YmNceGExXHhhYlx4YmJcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTI1NjFcdTI1NjJcdTI1NTZcdTI1NTVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTI1NWNcdTI1NWJcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1''@;'; put 'put ''MDBcdTI1M2NcdTI1NWVcdTI1NWZcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNcdTI1NjdcdTI1NjhcdTI1NjRcdTI1NjVcdTI1NTlcdTI1NThcdTI1NTJcdTI1NTNcdTI1NmJcdTI1NmFcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTI1OGNcdTI1OTBcdTI1ODBc''@;'; put 'put ''dTAzYjFceGRmXHUwMzkzXHUwM2MwXHUwM2EzXHUwM2MzXHhiNVx1MDNjNFx1MDNhNlx1MDM5OFx1MDNhOVx1MDNiNFx1MjIxZVx1MDNjNlx1MDNiNVx1MjIyOVx1MjI2MVx4YjFcdTIyNjVcdTIyNjRcdTIzMjBcdTIzMjFceGY3XHUyMjQ4XHhiMFx1MjIxOVx4YjdcdTIyMWFcdTIwN2ZceGIy''@;'; put 'put ''XHUyNWEwXHhhMCJ9LGlibTg2MjoiY3A4NjIiLGNzaWJtODYyOiJjcDg2MiIsY3A4NjM6e3R5cGU6Il9zYmNzIixjaGFyczoiXHhjN1x4ZmNceGU5XHhlMlx4YzJceGUwXHhiNlx4ZTdceGVhXHhlYlx4ZThceGVmXHhlZVx1MjAxN1x4YzBceGE3XHhjOVx4YzhceGNhXHhmNFx4Y2JceGNmXHhm''@;'; put 'put ''Ylx4ZjlceGE0XHhkNFx4ZGNceGEyXHhhM1x4ZDlceGRiXHUwMTkyXHhhNlx4YjRceGYzXHhmYVx4YThceGI4XHhiM1x4YWZceGNlXHUyMzEwXHhhY1x4YmRceGJjXHhiZVx4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHUyNTYxXHUyNTYyXHUyNTU2XHUyNTU1XHUyNTYz''@;'; put 'put ''XHUyNTUxXHUyNTU3XHUyNTVkXHUyNTVjXHUyNTViXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUyNTVlXHUyNTVmXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHUyNTY3XHUyNTY4XHUyNTY0XHUyNTY1XHUyNTU5XHUyNTU4XHUy''@;'; put 'put ''NTUyXHUyNTUzXHUyNTZiXHUyNTZhXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgwXHUwM2IxXHhkZlx1MDM5M1x1MDNjMFx1MDNhM1x1MDNjM1x4YjVcdTAzYzRcdTAzYTZcdTAzOThcdTAzYTlcdTAzYjRcdTIyMWVcdTAzYzZcdTAzYjVcdTIyMjlcdTIyNjFceGIx''@;'; put 'put ''XHUyMjY1XHUyMjY0XHUyMzIwXHUyMzIxXHhmN1x1MjI0OFx4YjBcdTIyMTlceGI3XHUyMjFhXHUyMDdmXHhiMlx1MjVhMFx4YTAifSxpYm04NjM6ImNwODYzIixjc2libTg2MzoiY3A4NjMiLGNwODY0Ont0eXBlOiJfc2JjcyIsY2hhcnM6IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgw''@;'; put 'put ''N1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJFx1MDY2YSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdo''@;'; put 'put ''aWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZceGIwXHhiN1x1MjIxOVx1MjIxYVx1MjU5Mlx1MjUwMFx1MjUwMlx1MjUzY1x1MjUyNFx1MjUyY1x1MjUxY1x1MjUzNFx1MjUxMFx1MjUwY1x1MjUxNFx1MjUxOFx1MDNiMlx1MjIxZVx1MDNjNlx4YjFceGJkXHhiY1x1MjI0OFx4YWJceGJiXHVm''@;'; put 'put ''ZWY3XHVmZWY4XHVmZmZkXHVmZmZkXHVmZWZiXHVmZWZjXHVmZmZkXHhhMFx4YWRcdWZlODJceGEzXHhhNFx1ZmU4NFx1ZmZmZFx1ZmZmZFx1ZmU4ZVx1ZmU4Zlx1ZmU5NVx1ZmU5OVx1MDYwY1x1ZmU5ZFx1ZmVhMVx1ZmVhNVx1MDY2MFx1MDY2MVx1MDY2Mlx1MDY2M1x1MDY2NFx1MDY2NVx1''@;'; put 'put ''MDY2Nlx1MDY2N1x1MDY2OFx1MDY2OVx1ZmVkMVx1MDYxYlx1ZmViMVx1ZmViNVx1ZmViOVx1MDYxZlx4YTJcdWZlODBcdWZlODFcdWZlODNcdWZlODVcdWZlY2FcdWZlOGJcdWZlOGRcdWZlOTFcdWZlOTNcdWZlOTdcdWZlOWJcdWZlOWZcdWZlYTNcdWZlYTdcdWZlYTlcdWZlYWJcdWZlYWRc''@;'; put 'put ''dWZlYWZcdWZlYjNcdWZlYjdcdWZlYmJcdWZlYmZcdWZlYzFcdWZlYzVcdWZlY2JcdWZlY2ZceGE2XHhhY1x4ZjdceGQ3XHVmZWM5XHUwNjQwXHVmZWQzXHVmZWQ3XHVmZWRiXHVmZWRmXHVmZWUzXHVmZWU3XHVmZWViXHVmZWVkXHVmZWVmXHVmZWYzXHVmZWJkXHVmZWNjXHVmZWNlXHVmZWNk''@;'; put 'put ''XHVmZWUxXHVmZTdkXHUwNjUxXHVmZWU1XHVmZWU5XHVmZWVjXHVmZWYwXHVmZWYyXHVmZWQwXHVmZWQ1XHVmZWY1XHVmZWY2XHVmZWRkXHVmZWQ5XHVmZWYxXHUyNWEwXHVmZmZkIn0saWJtODY0OiJjcDg2NCIsY3NpYm04NjQ6ImNwODY0IixjcDg2NTp7dHlwZToiX3NiY3MiLGNoYXJzOiJc''@;'; put 'put ''eGM3XHhmY1x4ZTlceGUyXHhlNFx4ZTBceGU1XHhlN1x4ZWFceGViXHhlOFx4ZWZceGVlXHhlY1x4YzRceGM1XHhjOVx4ZTZceGM2XHhmNFx4ZjZceGYyXHhmYlx4ZjlceGZmXHhkNlx4ZGNceGY4XHhhM1x4ZDhcdTIwYTdcdTAxOTJceGUxXHhlZFx4ZjNceGZhXHhmMVx4ZDFceGFhXHhiYVx4''@;'; put 'put ''YmZcdTIzMTBceGFjXHhiZFx4YmNceGExXHhhYlx4YTRcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTI1NjFcdTI1NjJcdTI1NTZcdTI1NTVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTI1NWNcdTI1NWJcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2Nc''@;'; put 'put ''dTI1NWVcdTI1NWZcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNcdTI1NjdcdTI1NjhcdTI1NjRcdTI1NjVcdTI1NTlcdTI1NThcdTI1NTJcdTI1NTNcdTI1NmJcdTI1NmFcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTI1OGNcdTI1OTBcdTI1ODBcdTAzYjFceGRm''@;'; put 'put ''XHUwMzkzXHUwM2MwXHUwM2EzXHUwM2MzXHhiNVx1MDNjNFx1MDNhNlx1MDM5OFx1MDNhOVx1MDNiNFx1MjIxZVx1MDNjNlx1MDNiNVx1MjIyOVx1MjI2MVx4YjFcdTIyNjVcdTIyNjRcdTIzMjBcdTIzMjFceGY3XHUyMjQ4XHhiMFx1MjIxOVx4YjdcdTIyMWFcdTIwN2ZceGIyXHUyNWEwXHhh''@;'; put 'put ''MCJ9LGlibTg2NToiY3A4NjUiLGNzaWJtODY1OiJjcDg2NSIsY3A4NjY6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUwNDEwXHUwNDExXHUwNDEyXHUwNDEzXHUwNDE0XHUwNDE1XHUwNDE2XHUwNDE3XHUwNDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDIw''@;'; put 'put ''XHUwNDIxXHUwNDIyXHUwNDIzXHUwNDI0XHUwNDI1XHUwNDI2XHUwNDI3XHUwNDI4XHUwNDI5XHUwNDJhXHUwNDJiXHUwNDJjXHUwNDJkXHUwNDJlXHUwNDJmXHUwNDMwXHUwNDMxXHUwNDMyXHUwNDMzXHUwNDM0XHUwNDM1XHUwNDM2XHUwNDM3XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUw''@;'; put 'put ''NDNjXHUwNDNkXHUwNDNlXHUwNDNmXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHUyNTYxXHUyNTYyXHUyNTU2XHUyNTU1XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUyNTVjXHUyNTViXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUyNTVlXHUyNTVm''@;'; put 'put ''XHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHUyNTY3XHUyNTY4XHUyNTY0XHUyNTY1XHUyNTU5XHUyNTU4XHUyNTUyXHUyNTUzXHUyNTZiXHUyNTZhXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgwXHUwNDQwXHUwNDQxXHUwNDQyXHUw''@;'; put 'put ''NDQzXHUwNDQ0XHUwNDQ1XHUwNDQ2XHUwNDQ3XHUwNDQ4XHUwNDQ5XHUwNDRhXHUwNDRiXHUwNDRjXHUwNDRkXHUwNDRlXHUwNDRmXHUwNDAxXHUwNDUxXHUwNDA0XHUwNDU0XHUwNDA3XHUwNDU3XHUwNDBlXHUwNDVlXHhiMFx1MjIxOVx4YjdcdTIyMWFcdTIxMTZceGE0XHUyNWEwXHhhMCJ9''@;'; put 'put ''LGlibTg2NjoiY3A4NjYiLGNzaWJtODY2OiJjcDg2NiIsY3A4Njk6e3R5cGU6Il9zYmNzIixjaGFyczoiXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwMzg2XHVmZmZkXHhiN1x4YWNceGE2XHUyMDE4XHUyMDE5XHUwMzg4XHUyMDE1XHUwMzg5XHUwMzhhXHUwM2FhXHUw''@;'; put 'put ''MzhjXHVmZmZkXHVmZmZkXHUwMzhlXHUwM2FiXHhhOVx1MDM4Zlx4YjJceGIzXHUwM2FjXHhhM1x1MDNhZFx1MDNhZVx1MDNhZlx1MDNjYVx1MDM5MFx1MDNjY1x1MDNjZFx1MDM5MVx1MDM5Mlx1MDM5M1x1MDM5NFx1MDM5NVx1MDM5Nlx1MDM5N1x4YmRcdTAzOThcdTAzOTlceGFiXHhiYlx1''@;'; put 'put ''MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MDM5YVx1MDM5Ylx1MDM5Y1x1MDM5ZFx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MDM5ZVx1MDM5Zlx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MDNhMFx1MDNhMVx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2''@;'; put 'put ''Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MDNhM1x1MDNhNFx1MDNhNVx1MDNhNlx1MDNhN1x1MDNhOFx1MDNhOVx1MDNiMVx1MDNiMlx1MDNiM1x1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MDNiNFx1MDNiNVx1MjU4MFx1MDNiNlx1MDNiN1x1MDNiOFx1MDNiOVx1MDNiYVx1MDNiYlx1MDNiY1x1''@;'; put 'put ''MDNiZFx1MDNiZVx1MDNiZlx1MDNjMFx1MDNjMVx1MDNjM1x1MDNjMlx1MDNjNFx1MDM4NFx4YWRceGIxXHUwM2M1XHUwM2M2XHUwM2M3XHhhN1x1MDNjOFx1MDM4NVx4YjBceGE4XHUwM2M5XHUwM2NiXHUwM2IwXHUwM2NlXHUyNWEwXHhhMCJ9LGlibTg2OToiY3A4NjkiLGNzaWJtODY5OiJj''@;'; put 'put ''cDg2OSIsY3A5MjI6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEw''@;'; put 'put ''XHhhMVx4YTJceGEzXHhhNFx4YTVceGE2XHhhN1x4YThceGE5XHhhYVx4YWJceGFjXHhhZFx4YWVcdTIwM2VceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4YjhceGI5XHhiYVx4YmJceGJjXHhiZFx4YmVceGJmXHhjMFx4YzFceGMyXHhjM1x4YzRceGM1XHhjNlx4YzdceGM4XHhj''@;'; put 'put ''OVx4Y2FceGNiXHhjY1x4Y2RceGNlXHhjZlx1MDE2MFx4ZDFceGQyXHhkM1x4ZDRceGQ1XHhkNlx4ZDdceGQ4XHhkOVx4ZGFceGRiXHhkY1x4ZGRcdTAxN2RceGRmXHhlMFx4ZTFceGUyXHhlM1x4ZTRceGU1XHhlNlx4ZTdceGU4XHhlOVx4ZWFceGViXHhlY1x4ZWRceGVlXHhlZlx1MDE2MVx4''@;'; put 'put ''ZjFceGYyXHhmM1x4ZjRceGY1XHhmNlx4ZjdceGY4XHhmOVx4ZmFceGZiXHhmY1x4ZmRcdTAxN2VceGZmIn0saWJtOTIyOiJjcDkyMiIsY3NpYm05MjI6ImNwOTIyIixjcDEwNDY6e3R5cGU6Il9zYmNzIixjaGFyczoiXHVmZTg4XHhkN1x4ZjdcdWY4ZjZcdWY4ZjVcdWY4ZjRcdWY4ZjdcdWZl''@;'; put 'put ''NzFceDg4XHUyNWEwXHUyNTAyXHUyNTAwXHUyNTEwXHUyNTBjXHUyNTE0XHUyNTE4XHVmZTc5XHVmZTdiXHVmZTdkXHVmZTdmXHVmZTc3XHVmZThhXHVmZWYwXHVmZWYzXHVmZWYyXHVmZWNlXHVmZWNmXHVmZWQwXHVmZWY2XHVmZWY4XHVmZWZhXHVmZWZjXHhhMFx1ZjhmYVx1ZjhmOVx1Zjhm''@;'; put 'put ''OFx4YTRcdWY4ZmJcdWZlOGJcdWZlOTFcdWZlOTdcdWZlOWJcdWZlOWZcdWZlYTNcdTA2MGNceGFkXHVmZWE3XHVmZWIzXHUwNjYwXHUwNjYxXHUwNjYyXHUwNjYzXHUwNjY0XHUwNjY1XHUwNjY2XHUwNjY3XHUwNjY4XHUwNjY5XHVmZWI3XHUwNjFiXHVmZWJiXHVmZWJmXHVmZWNhXHUwNjFm''@;'; put 'put ''XHVmZWNiXHUwNjIxXHUwNjIyXHUwNjIzXHUwNjI0XHUwNjI1XHUwNjI2XHUwNjI3XHUwNjI4XHUwNjI5XHUwNjJhXHUwNjJiXHUwNjJjXHUwNjJkXHUwNjJlXHUwNjJmXHUwNjMwXHUwNjMxXHUwNjMyXHUwNjMzXHUwNjM0XHUwNjM1XHUwNjM2XHUwNjM3XHVmZWM3XHUwNjM5XHUwNjNhXHVm''@;'; put 'put ''ZWNjXHVmZTgyXHVmZTg0XHVmZThlXHVmZWQzXHUwNjQwXHUwNjQxXHUwNjQyXHUwNjQzXHUwNjQ0XHUwNjQ1XHUwNjQ2XHUwNjQ3XHUwNjQ4XHUwNjQ5XHUwNjRhXHUwNjRiXHUwNjRjXHUwNjRkXHUwNjRlXHUwNjRmXHUwNjUwXHUwNjUxXHUwNjUyXHVmZWQ3XHVmZWRiXHVmZWRmXHVmOGZj''@;'; put 'put ''XHVmZWY1XHVmZWY3XHVmZWY5XHVmZWZiXHVmZWUzXHVmZWU3XHVmZWVjXHVmZWU5XHVmZmZkIn0saWJtMTA0NjoiY3AxMDQ2Iixjc2libTEwNDY6ImNwMTA0NiIsY3AxMTI0Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhh''@;'; put 'put ''XHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMFx1MDQwMVx1MDQwMlx1MDQ5MFx1MDQwNFx1MDQwNVx1MDQwNlx1MDQwN1x1MDQwOFx1MDQwOVx1MDQwYVx1MDQwYlx1MDQwY1x4YWRc''@;'; put 'put ''dTA0MGVcdTA0MGZcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0MTRcdTA0MTVcdTA0MTZcdTA0MTdcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0MjhcdTA0''@;'; put 'put ''MjlcdTA0MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0MmVcdTA0MmZcdTA0MzBcdTA0MzFcdTA0MzJcdTA0MzNcdTA0MzRcdTA0MzVcdTA0MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0M2ZcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0NDRc''@;'; put 'put ''dTA0NDVcdTA0NDZcdTA0NDdcdTA0NDhcdTA0NDlcdTA0NGFcdTA0NGJcdTA0NGNcdTA0NGRcdTA0NGVcdTA0NGZcdTIxMTZcdTA0NTFcdTA0NTJcdTA0OTFcdTA0NTRcdTA0NTVcdTA0NTZcdTA0NTdcdTA0NThcdTA0NTlcdTA0NWFcdTA0NWJcdTA0NWNceGE3XHUwNDVlXHUwNDVmIn0saWJt''@;'; put 'put ''MTEyNDoiY3AxMTI0Iixjc2libTExMjQ6ImNwMTEyNCIsY3AxMTI1Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MDQxMFx1MDQxMVx1MDQxMlx1MDQxM1x1MDQxNFx1MDQxNVx1MDQxNlx1MDQxN1x1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQyMFx1''@;'; put 'put ''MDQyMVx1MDQyMlx1MDQyM1x1MDQyNFx1MDQyNVx1MDQyNlx1MDQyN1x1MDQyOFx1MDQyOVx1MDQyYVx1MDQyYlx1MDQyY1x1MDQyZFx1MDQyZVx1MDQyZlx1MDQzMFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1MDQzNVx1MDQzNlx1MDQzN1x1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQz''@;'; put 'put ''Y1x1MDQzZFx1MDQzZVx1MDQzZlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MjU2MVx1MjU2Mlx1MjU1Nlx1MjU1NVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MjU1Y1x1MjU1Ylx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MjU1ZVx1MjU1Zlx1''@;'; put 'put ''MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MjU2N1x1MjU2OFx1MjU2NFx1MjU2NVx1MjU1OVx1MjU1OFx1MjU1Mlx1MjU1M1x1MjU2Ylx1MjU2YVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0''@;'; put 'put ''M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1MDQ0OVx1MDQ0YVx1MDQ0Ylx1MDQ0Y1x1MDQ0ZFx1MDQ0ZVx1MDQ0Zlx1MDQwMVx1MDQ1MVx1MDQ5MFx1MDQ5MVx1MDQwNFx1MDQ1NFx1MDQwNlx1MDQ1Nlx1MDQwN1x1MDQ1N1x4YjdcdTIyMWFcdTIxMTZceGE0XHUyNWEwXHhhMCJ9''@;'; put 'put ''LGlibTExMjU6ImNwMTEyNSIsY3NpYm0xMTI1OiJjcDExMjUiLGNwMTEyOTp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4''@;'; put 'put ''XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBceGExXHhhMlx4YTNceGE0XHhhNVx4YTZceGE3XHUwMTUzXHhhOVx4YWFceGFiXHhhY1x4YWRceGFlXHhhZlx4YjBceGIxXHhiMlx4YjNcdTAxNzhceGI1XHhiNlx4YjdcdTAxNTJceGI5XHhiYVx4YmJceGJjXHhiZFx4YmVceGJmXHhj''@;'; put 'put ''MFx4YzFceGMyXHUwMTAyXHhjNFx4YzVceGM2XHhjN1x4YzhceGM5XHhjYVx4Y2JcdTAzMDBceGNkXHhjZVx4Y2ZcdTAxMTBceGQxXHUwMzA5XHhkM1x4ZDRcdTAxYTBceGQ2XHhkN1x4ZDhceGQ5XHhkYVx4ZGJceGRjXHUwMWFmXHUwMzAzXHhkZlx4ZTBceGUxXHhlMlx1MDEwM1x4ZTRceGU1''@;'; put 'put ''XHhlNlx4ZTdceGU4XHhlOVx4ZWFceGViXHUwMzAxXHhlZFx4ZWVceGVmXHUwMTExXHhmMVx1MDMyM1x4ZjNceGY0XHUwMWExXHhmNlx4ZjdceGY4XHhmOVx4ZmFceGZiXHhmY1x1MDFiMFx1MjBhYlx4ZmYifSxpYm0xMTI5OiJjcDExMjkiLGNzaWJtMTEyOToiY3AxMTI5IixjcDExMzM6e3R5''@;'; put 'put ''cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHUwZTgxXHUwZTgyXHUw''@;'; put 'put ''ZTg0XHUwZTg3XHUwZTg4XHUwZWFhXHUwZThhXHUwZThkXHUwZTk0XHUwZTk1XHUwZTk2XHUwZTk3XHUwZTk5XHUwZTlhXHUwZTliXHUwZTljXHUwZTlkXHUwZTllXHUwZTlmXHUwZWExXHUwZWEyXHUwZWEzXHUwZWE1XHUwZWE3XHUwZWFiXHUwZWFkXHUwZWFlXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHUwZWFmXHUwZWIwXHUwZWIyXHUwZWIzXHUwZWI0XHUwZWI1XHUwZWI2XHUwZWI3XHUwZWI4XHUwZWI5XHUwZWJjXHUwZWIxXHUwZWJiXHUwZWJkXHVmZmZkXHVmZmZkXHVmZmZkXHUwZWMwXHUwZWMxXHUwZWMyXHUwZWMzXHUwZWM0XHUwZWM4XHUwZWM5XHUwZWNhXHUwZWNiXHUwZWNjXHUw''@;'; put 'put ''ZWNkXHUwZWM2XHVmZmZkXHUwZWRjXHUwZWRkXHUyMGFkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwZWQwXHUwZWQxXHUwZWQyXHUwZWQzXHUwZWQ0XHUwZWQ1''@;'; put 'put ''XHUwZWQ2XHUwZWQ3XHUwZWQ4XHUwZWQ5XHVmZmZkXHVmZmZkXHhhMlx4YWNceGE2XHVmZmZkIn0saWJtMTEzMzoiY3AxMTMzIixjc2libTExMzM6ImNwMTEzMyIsY3AxMTYxOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MGU0OFx1MGUwMVx1MGUw''@;'; put 'put ''Mlx1MGUwM1x1MGUwNFx1MGUwNVx1MGUwNlx1MGUwN1x1MGUwOFx1MGUwOVx1MGUwYVx1MGUwYlx1MGUwY1x1MGUwZFx1MGUwZVx1MGUwZlx1MGUxMFx1MGUxMVx1MGUxMlx1MGUxM1x1MGUxNFx1MGUxNVx1MGUxNlx1MGUxN1x1MGUxOFx1MGUxOVx1MGUxYVx1MGUxYlx1MGUxY1x1MGUxZFx1''@;'; put 'put ''MGUxZVx1MGUxZlx1MGUyMFx1MGUyMVx1MGUyMlx1MGUyM1x1MGUyNFx1MGUyNVx1MGUyNlx1MGUyN1x1MGUyOFx1MGUyOVx1MGUyYVx1MGUyYlx1MGUyY1x1MGUyZFx1MGUyZVx1MGUyZlx1MGUzMFx1MGUzMVx1MGUzMlx1MGUzM1x1MGUzNFx1MGUzNVx1MGUzNlx1MGUzN1x1MGUzOFx1MGUz''@;'; put 'put ''OVx1MGUzYVx1MGU0OVx1MGU0YVx1MGU0Ylx1MjBhY1x1MGUzZlx1MGU0MFx1MGU0MVx1MGU0Mlx1MGU0M1x1MGU0NFx1MGU0NVx1MGU0Nlx1MGU0N1x1MGU0OFx1MGU0OVx1MGU0YVx1MGU0Ylx1MGU0Y1x1MGU0ZFx1MGU0ZVx1MGU0Zlx1MGU1MFx1MGU1MVx1MGU1Mlx1MGU1M1x1MGU1NFx1''@;'; put 'put ''MGU1NVx1MGU1Nlx1MGU1N1x1MGU1OFx1MGU1OVx1MGU1YVx1MGU1Ylx4YTJceGFjXHhhNlx4YTAifSxpYm0xMTYxOiJjcDExNjEiLGNzaWJtMTE2MToiY3AxMTYxIixjcDExNjI6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUyMGFjXHg4MVx4ODJceDgzXHg4NFx1MjAyNlx4ODZceDg3XHg4OFx4''@;'; put 'put ''ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHUwZTAxXHUwZTAyXHUwZTAzXHUwZTA0XHUwZTA1XHUwZTA2XHUwZTA3XHUwZTA4XHUwZTA5XHUw''@;'; put 'put ''ZTBhXHUwZTBiXHUwZTBjXHUwZTBkXHUwZTBlXHUwZTBmXHUwZTEwXHUwZTExXHUwZTEyXHUwZTEzXHUwZTE0XHUwZTE1XHUwZTE2XHUwZTE3XHUwZTE4XHUwZTE5XHUwZTFhXHUwZTFiXHUwZTFjXHUwZTFkXHUwZTFlXHUwZTFmXHUwZTIwXHUwZTIxXHUwZTIyXHUwZTIzXHUwZTI0XHUwZTI1''@;'; put 'put ''XHUwZTI2XHUwZTI3XHUwZTI4XHUwZTI5XHUwZTJhXHUwZTJiXHUwZTJjXHUwZTJkXHUwZTJlXHUwZTJmXHUwZTMwXHUwZTMxXHUwZTMyXHUwZTMzXHUwZTM0XHUwZTM1XHUwZTM2XHUwZTM3XHUwZTM4XHUwZTM5XHUwZTNhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwZTNmXHUwZTQwXHUw''@;'; put 'put ''ZTQxXHUwZTQyXHUwZTQzXHUwZTQ0XHUwZTQ1XHUwZTQ2XHUwZTQ3XHUwZTQ4XHUwZTQ5XHUwZTRhXHUwZTRiXHUwZTRjXHUwZTRkXHUwZTRlXHUwZTRmXHUwZTUwXHUwZTUxXHUwZTUyXHUwZTUzXHUwZTU0XHUwZTU1XHUwZTU2XHUwZTU3XHUwZTU4XHUwZTU5XHUwZTVhXHUwZTViXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkIn0saWJtMTE2MjoiY3AxMTYyIixjc2libTExNjI6ImNwMTE2MiIsY3AxMTYzOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5MVx4OTJceDkz''@;'; put 'put ''XHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMFx4YTFceGEyXHhhM1x1MjBhY1x4YTVceGE2XHhhN1x1MDE1M1x4YTlceGFhXHhhYlx4YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4YjJceGIzXHUwMTc4XHhiNVx4YjZceGI3XHUwMTUyXHhiOVx4YmFc''@;'; put 'put ''eGJiXHhiY1x4YmRceGJlXHhiZlx4YzBceGMxXHhjMlx1MDEwMlx4YzRceGM1XHhjNlx4YzdceGM4XHhjOVx4Y2FceGNiXHUwMzAwXHhjZFx4Y2VceGNmXHUwMTEwXHhkMVx1MDMwOVx4ZDNceGQ0XHUwMWEwXHhkNlx4ZDdceGQ4XHhkOVx4ZGFceGRiXHhkY1x1MDFhZlx1MDMwM1x4ZGZceGUw''@;'; put 'put ''XHhlMVx4ZTJcdTAxMDNceGU0XHhlNVx4ZTZceGU3XHhlOFx4ZTlceGVhXHhlYlx1MDMwMVx4ZWRceGVlXHhlZlx1MDExMVx4ZjFcdTAzMjNceGYzXHhmNFx1MDFhMVx4ZjZceGY3XHhmOFx4ZjlceGZhXHhmYlx4ZmNcdTAxYjBcdTIwYWJceGZmIn0saWJtMTE2MzoiY3AxMTYzIixjc2libTEx''@;'; put 'put ''NjM6ImNwMTE2MyIsbWFjY3JvYXRpYW46e3R5cGU6Il9zYmNzIixjaGFyczoiXHhjNFx4YzVceGM3XHhjOVx4ZDFceGQ2XHhkY1x4ZTFceGUwXHhlMlx4ZTRceGUzXHhlNVx4ZTdceGU5XHhlOFx4ZWFceGViXHhlZFx4ZWNceGVlXHhlZlx4ZjFceGYzXHhmMlx4ZjRceGY2XHhmNVx4ZmFceGY5''@;'; put 'put ''XHhmYlx4ZmNcdTIwMjBceGIwXHhhMlx4YTNceGE3XHUyMDIyXHhiNlx4ZGZceGFlXHUwMTYwXHUyMTIyXHhiNFx4YThcdTIyNjBcdTAxN2RceGQ4XHUyMjFlXHhiMVx1MjI2NFx1MjI2NVx1MjIwNlx4YjVcdTIyMDJcdTIyMTFcdTIyMGZcdTAxNjFcdTIyMmJceGFhXHhiYVx1MjEyNlx1MDE3''@;'; put 'put ''ZVx4ZjhceGJmXHhhMVx4YWNcdTIyMWFcdTAxOTJcdTIyNDhcdTAxMDZceGFiXHUwMTBjXHUyMDI2XHhhMFx4YzBceGMzXHhkNVx1MDE1Mlx1MDE1M1x1MDExMFx1MjAxNFx1MjAxY1x1MjAxZFx1MjAxOFx1MjAxOVx4ZjdcdTI1Y2FcdWZmZmRceGE5XHUyMDQ0XHhhNFx1MjAzOVx1MjAzYVx4''@;'; put 'put ''YzZceGJiXHUyMDEzXHhiN1x1MjAxYVx1MjAxZVx1MjAzMFx4YzJcdTAxMDdceGMxXHUwMTBkXHhjOFx4Y2RceGNlXHhjZlx4Y2NceGQzXHhkNFx1MDExMVx4ZDJceGRhXHhkYlx4ZDlcdTAxMzFcdTAyYzZcdTAyZGNceGFmXHUwM2MwXHhjYlx1MDJkYVx4YjhceGNhXHhlNlx1MDJjNyJ9LG1h''@;'; put 'put ''Y2N5cmlsbGljOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MDQxMFx1MDQxMVx1MDQxMlx1MDQxM1x1MDQxNFx1MDQxNVx1MDQxNlx1MDQxN1x1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQyNFx1MDQyNVx1''@;'; put 'put ''MDQyNlx1MDQyN1x1MDQyOFx1MDQyOVx1MDQyYVx1MDQyYlx1MDQyY1x1MDQyZFx1MDQyZVx1MDQyZlx1MjAyMFx4YjBceGEyXHhhM1x4YTdcdTIwMjJceGI2XHUwNDA2XHhhZVx4YTlcdTIxMjJcdTA0MDJcdTA0NTJcdTIyNjBcdTA0MDNcdTA0NTNcdTIyMWVceGIxXHUyMjY0XHUyMjY1XHUw''@;'; put 'put ''NDU2XHhiNVx1MjIwMlx1MDQwOFx1MDQwNFx1MDQ1NFx1MDQwN1x1MDQ1N1x1MDQwOVx1MDQ1OVx1MDQwYVx1MDQ1YVx1MDQ1OFx1MDQwNVx4YWNcdTIyMWFcdTAxOTJcdTIyNDhcdTIyMDZceGFiXHhiYlx1MjAyNlx4YTBcdTA0MGJcdTA0NWJcdTA0MGNcdTA0NWNcdTA0NTVcdTIwMTNcdTIw''@;'; put 'put ''MTRcdTIwMWNcdTIwMWRcdTIwMThcdTIwMTlceGY3XHUyMDFlXHUwNDBlXHUwNDVlXHUwNDBmXHUwNDVmXHUyMTE2XHUwNDAxXHUwNDUxXHUwNDRmXHUwNDMwXHUwNDMxXHUwNDMyXHUwNDMzXHUwNDM0XHUwNDM1XHUwNDM2XHUwNDM3XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUw''@;'; put 'put ''NDNkXHUwNDNlXHUwNDNmXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDQ0XHUwNDQ1XHUwNDQ2XHUwNDQ3XHUwNDQ4XHUwNDQ5XHUwNDRhXHUwNDRiXHUwNDRjXHUwNDRkXHUwNDRlXHhhNCJ9LG1hY2dyZWVrOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4YzRceGI5XHhiMlx4YzlceGIzXHhk''@;'; put 'put ''Nlx4ZGNcdTAzODVceGUwXHhlMlx4ZTRcdTAzODRceGE4XHhlN1x4ZTlceGU4XHhlYVx4ZWJceGEzXHUyMTIyXHhlZVx4ZWZcdTIwMjJceGJkXHUyMDMwXHhmNFx4ZjZceGE2XHhhZFx4ZjlceGZiXHhmY1x1MjAyMFx1MDM5M1x1MDM5NFx1MDM5OFx1MDM5Ylx1MDM5ZVx1MDNhMFx4ZGZceGFl''@;'; put 'put ''XHhhOVx1MDNhM1x1MDNhYVx4YTdcdTIyNjBceGIwXHUwMzg3XHUwMzkxXHhiMVx1MjI2NFx1MjI2NVx4YTVcdTAzOTJcdTAzOTVcdTAzOTZcdTAzOTdcdTAzOTlcdTAzOWFcdTAzOWNcdTAzYTZcdTAzYWJcdTAzYThcdTAzYTlcdTAzYWNcdTAzOWRceGFjXHUwMzlmXHUwM2ExXHUyMjQ4XHUw''@;'; put 'put ''M2E0XHhhYlx4YmJcdTIwMjZceGEwXHUwM2E1XHUwM2E3XHUwMzg2XHUwMzg4XHUwMTUzXHUyMDEzXHUyMDE1XHUyMDFjXHUyMDFkXHUyMDE4XHUyMDE5XHhmN1x1MDM4OVx1MDM4YVx1MDM4Y1x1MDM4ZVx1MDNhZFx1MDNhZVx1MDNhZlx1MDNjY1x1MDM4Zlx1MDNjZFx1MDNiMVx1MDNiMlx1''@;'; put 'put ''MDNjOFx1MDNiNFx1MDNiNVx1MDNjNlx1MDNiM1x1MDNiN1x1MDNiOVx1MDNiZVx1MDNiYVx1MDNiYlx1MDNiY1x1MDNiZFx1MDNiZlx1MDNjMFx1MDNjZVx1MDNjMVx1MDNjM1x1MDNjNFx1MDNiOFx1MDNjOVx1MDNjMlx1MDNjN1x1MDNjNVx1MDNiNlx1MDNjYVx1MDNjYlx1MDM5MFx1MDNi''@;'; put 'put ''MFx1ZmZmZCJ9LG1hY2ljZWxhbmQ6e3R5cGU6Il9zYmNzIixjaGFyczoiXHhjNFx4YzVceGM3XHhjOVx4ZDFceGQ2XHhkY1x4ZTFceGUwXHhlMlx4ZTRceGUzXHhlNVx4ZTdceGU5XHhlOFx4ZWFceGViXHhlZFx4ZWNceGVlXHhlZlx4ZjFceGYzXHhmMlx4ZjRceGY2XHhmNVx4ZmFceGY5XHhm''@;'; put 'put ''Ylx4ZmNceGRkXHhiMFx4YTJceGEzXHhhN1x1MjAyMlx4YjZceGRmXHhhZVx4YTlcdTIxMjJceGI0XHhhOFx1MjI2MFx4YzZceGQ4XHUyMjFlXHhiMVx1MjI2NFx1MjI2NVx4YTVceGI1XHUyMjAyXHUyMjExXHUyMjBmXHUwM2MwXHUyMjJiXHhhYVx4YmFcdTIxMjZceGU2XHhmOFx4YmZceGEx''@;'; put 'put ''XHhhY1x1MjIxYVx1MDE5Mlx1MjI0OFx1MjIwNlx4YWJceGJiXHUyMDI2XHhhMFx4YzBceGMzXHhkNVx1MDE1Mlx1MDE1M1x1MjAxM1x1MjAxNFx1MjAxY1x1MjAxZFx1MjAxOFx1MjAxOVx4ZjdcdTI1Y2FceGZmXHUwMTc4XHUyMDQ0XHhhNFx4ZDBceGYwXHhkZVx4ZmVceGZkXHhiN1x1MjAx''@;'; put 'put ''YVx1MjAxZVx1MjAzMFx4YzJceGNhXHhjMVx4Y2JceGM4XHhjZFx4Y2VceGNmXHhjY1x4ZDNceGQ0XHVmZmZkXHhkMlx4ZGFceGRiXHhkOVx1MDEzMVx1MDJjNlx1MDJkY1x4YWZcdTAyZDhcdTAyZDlcdTAyZGFceGI4XHUwMmRkXHUwMmRiXHUwMmM3In0sbWFjcm9tYW46e3R5cGU6Il9zYmNz''@;'; put 'put ''IixjaGFyczoiXHhjNFx4YzVceGM3XHhjOVx4ZDFceGQ2XHhkY1x4ZTFceGUwXHhlMlx4ZTRceGUzXHhlNVx4ZTdceGU5XHhlOFx4ZWFceGViXHhlZFx4ZWNceGVlXHhlZlx4ZjFceGYzXHhmMlx4ZjRceGY2XHhmNVx4ZmFceGY5XHhmYlx4ZmNcdTIwMjBceGIwXHhhMlx4YTNceGE3XHUyMDIy''@;'; put 'put ''XHhiNlx4ZGZceGFlXHhhOVx1MjEyMlx4YjRceGE4XHUyMjYwXHhjNlx4ZDhcdTIyMWVceGIxXHUyMjY0XHUyMjY1XHhhNVx4YjVcdTIyMDJcdTIyMTFcdTIyMGZcdTAzYzBcdTIyMmJceGFhXHhiYVx1MjEyNlx4ZTZceGY4XHhiZlx4YTFceGFjXHUyMjFhXHUwMTkyXHUyMjQ4XHUyMjA2XHhh''@;'; put 'put ''Ylx4YmJcdTIwMjZceGEwXHhjMFx4YzNceGQ1XHUwMTUyXHUwMTUzXHUyMDEzXHUyMDE0XHUyMDFjXHUyMDFkXHUyMDE4XHUyMDE5XHhmN1x1MjVjYVx4ZmZcdTAxNzhcdTIwNDRceGE0XHUyMDM5XHUyMDNhXHVmYjAxXHVmYjAyXHUyMDIxXHhiN1x1MjAxYVx1MjAxZVx1MjAzMFx4YzJceGNh''@;'; put 'put ''XHhjMVx4Y2JceGM4XHhjZFx4Y2VceGNmXHhjY1x4ZDNceGQ0XHVmZmZkXHhkMlx4ZGFceGRiXHhkOVx1MDEzMVx1MDJjNlx1MDJkY1x4YWZcdTAyZDhcdTAyZDlcdTAyZGFceGI4XHUwMmRkXHUwMmRiXHUwMmM3In0sbWFjcm9tYW5pYTp7dHlwZToiX3NiY3MiLGNoYXJzOiJceGM0XHhjNVx4''@;'; put 'put ''YzdceGM5XHhkMVx4ZDZceGRjXHhlMVx4ZTBceGUyXHhlNFx4ZTNceGU1XHhlN1x4ZTlceGU4XHhlYVx4ZWJceGVkXHhlY1x4ZWVceGVmXHhmMVx4ZjNceGYyXHhmNFx4ZjZceGY1XHhmYVx4ZjlceGZiXHhmY1x1MjAyMFx4YjBceGEyXHhhM1x4YTdcdTIwMjJceGI2XHhkZlx4YWVceGE5XHUy''@;'; put 'put ''MTIyXHhiNFx4YThcdTIyNjBcdTAxMDJcdTAxNWVcdTIyMWVceGIxXHUyMjY0XHUyMjY1XHhhNVx4YjVcdTIyMDJcdTIyMTFcdTIyMGZcdTAzYzBcdTIyMmJceGFhXHhiYVx1MjEyNlx1MDEwM1x1MDE1Zlx4YmZceGExXHhhY1x1MjIxYVx1MDE5Mlx1MjI0OFx1MjIwNlx4YWJceGJiXHUyMDI2''@;'; put 'put ''XHhhMFx4YzBceGMzXHhkNVx1MDE1Mlx1MDE1M1x1MjAxM1x1MjAxNFx1MjAxY1x1MjAxZFx1MjAxOFx1MjAxOVx4ZjdcdTI1Y2FceGZmXHUwMTc4XHUyMDQ0XHhhNFx1MjAzOVx1MjAzYVx1MDE2Mlx1MDE2M1x1MjAyMVx4YjdcdTIwMWFcdTIwMWVcdTIwMzBceGMyXHhjYVx4YzFceGNiXHhj''@;'; put 'put ''OFx4Y2RceGNlXHhjZlx4Y2NceGQzXHhkNFx1ZmZmZFx4ZDJceGRhXHhkYlx4ZDlcdTAxMzFcdTAyYzZcdTAyZGNceGFmXHUwMmQ4XHUwMmQ5XHUwMmRhXHhiOFx1MDJkZFx1MDJkYlx1MDJjNyJ9LG1hY3RoYWk6e3R5cGU6Il9zYmNzIixjaGFyczoiXHhhYlx4YmJcdTIwMjZcdWY4OGNcdWY4''@;'; put 'put ''OGZcdWY4OTJcdWY4OTVcdWY4OThcdWY4OGJcdWY4OGVcdWY4OTFcdWY4OTRcdWY4OTdcdTIwMWNcdTIwMWRcdWY4OTlcdWZmZmRcdTIwMjJcdWY4ODRcdWY4ODlcdWY4ODVcdWY4ODZcdWY4ODdcdWY4ODhcdWY4OGFcdWY4OGRcdWY4OTBcdWY4OTNcdWY4OTZcdTIwMThcdTIwMTlcdWZmZmRc''@;'; put 'put ''eGEwXHUwZTAxXHUwZTAyXHUwZTAzXHUwZTA0XHUwZTA1XHUwZTA2XHUwZTA3XHUwZTA4XHUwZTA5XHUwZTBhXHUwZTBiXHUwZTBjXHUwZTBkXHUwZTBlXHUwZTBmXHUwZTEwXHUwZTExXHUwZTEyXHUwZTEzXHUwZTE0XHUwZTE1XHUwZTE2XHUwZTE3XHUwZTE4XHUwZTE5XHUwZTFhXHUwZTFi''@;'; put 'put ''XHUwZTFjXHUwZTFkXHUwZTFlXHUwZTFmXHUwZTIwXHUwZTIxXHUwZTIyXHUwZTIzXHUwZTI0XHUwZTI1XHUwZTI2XHUwZTI3XHUwZTI4XHUwZTI5XHUwZTJhXHUwZTJiXHUwZTJjXHUwZTJkXHUwZTJlXHUwZTJmXHUwZTMwXHUwZTMxXHUwZTMyXHUwZTMzXHUwZTM0XHUwZTM1XHUwZTM2XHUw''@;'; put 'put ''ZTM3XHUwZTM4XHUwZTM5XHUwZTNhXHVmZWZmXHUyMDBiXHUyMDEzXHUyMDE0XHUwZTNmXHUwZTQwXHUwZTQxXHUwZTQyXHUwZTQzXHUwZTQ0XHUwZTQ1XHUwZTQ2XHUwZTQ3XHUwZTQ4XHUwZTQ5XHUwZTRhXHUwZTRiXHUwZTRjXHUwZTRkXHUyMTIyXHUwZTRmXHUwZTUwXHUwZTUxXHUwZTUy''@;'; put 'put ''XHUwZTUzXHUwZTU0XHUwZTU1XHUwZTU2XHUwZTU3XHUwZTU4XHUwZTU5XHhhZVx4YTlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQifSxtYWN0dXJraXNoOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4YzRceGM1XHhjN1x4YzlceGQxXHhkNlx4ZGNceGUxXHhlMFx4ZTJceGU0XHhlM1x4ZTVceGU3''@;'; put 'put ''XHhlOVx4ZThceGVhXHhlYlx4ZWRceGVjXHhlZVx4ZWZceGYxXHhmM1x4ZjJceGY0XHhmNlx4ZjVceGZhXHhmOVx4ZmJceGZjXHUyMDIwXHhiMFx4YTJceGEzXHhhN1x1MjAyMlx4YjZceGRmXHhhZVx4YTlcdTIxMjJceGI0XHhhOFx1MjI2MFx4YzZceGQ4XHUyMjFlXHhiMVx1MjI2NFx1MjI2''@;'; put 'put ''NVx4YTVceGI1XHUyMjAyXHUyMjExXHUyMjBmXHUwM2MwXHUyMjJiXHhhYVx4YmFcdTIxMjZceGU2XHhmOFx4YmZceGExXHhhY1x1MjIxYVx1MDE5Mlx1MjI0OFx1MjIwNlx4YWJceGJiXHUyMDI2XHhhMFx4YzBceGMzXHhkNVx1MDE1Mlx1MDE1M1x1MjAxM1x1MjAxNFx1MjAxY1x1MjAxZFx1''@;'; put 'put ''MjAxOFx1MjAxOVx4ZjdcdTI1Y2FceGZmXHUwMTc4XHUwMTFlXHUwMTFmXHUwMTMwXHUwMTMxXHUwMTVlXHUwMTVmXHUyMDIxXHhiN1x1MjAxYVx1MjAxZVx1MjAzMFx4YzJceGNhXHhjMVx4Y2JceGM4XHhjZFx4Y2VceGNmXHhjY1x4ZDNceGQ0XHVmZmZkXHhkMlx4ZGFceGRiXHhkOVx1ZmZm''@;'; put 'put ''ZFx1MDJjNlx1MDJkY1x4YWZcdTAyZDhcdTAyZDlcdTAyZGFceGI4XHUwMmRkXHUwMmRiXHUwMmM3In0sbWFjdWtyYWluZTp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0MTRcdTA0MTVcdTA0MTZcdTA0MTdcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJc''@;'; put 'put ''dTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0MjhcdTA0MjlcdTA0MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0MmVcdTA0MmZcdTIwMjBceGIwXHUwNDkwXHhhM1x4YTdcdTIwMjJceGI2XHUwNDA2XHhhZVx4''@;'; put 'put ''YTlcdTIxMjJcdTA0MDJcdTA0NTJcdTIyNjBcdTA0MDNcdTA0NTNcdTIyMWVceGIxXHUyMjY0XHUyMjY1XHUwNDU2XHhiNVx1MDQ5MVx1MDQwOFx1MDQwNFx1MDQ1NFx1MDQwN1x1MDQ1N1x1MDQwOVx1MDQ1OVx1MDQwYVx1MDQ1YVx1MDQ1OFx1MDQwNVx4YWNcdTIyMWFcdTAxOTJcdTIyNDhc''@;'; put 'put ''dTIyMDZceGFiXHhiYlx1MjAyNlx4YTBcdTA0MGJcdTA0NWJcdTA0MGNcdTA0NWNcdTA0NTVcdTIwMTNcdTIwMTRcdTIwMWNcdTIwMWRcdTIwMThcdTIwMTlceGY3XHUyMDFlXHUwNDBlXHUwNDVlXHUwNDBmXHUwNDVmXHUyMTE2XHUwNDAxXHUwNDUxXHUwNDRmXHUwNDMwXHUwNDMxXHUwNDMy''@;'; put 'put ''XHUwNDMzXHUwNDM0XHUwNDM1XHUwNDM2XHUwNDM3XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNkXHUwNDNlXHUwNDNmXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDQ0XHUwNDQ1XHUwNDQ2XHUwNDQ3XHUwNDQ4XHUwNDQ5XHUwNDRhXHUwNDRiXHUwNDRjXHUwNDRkXHUw''@;'; put 'put ''NDRlXHhhNCJ9LGtvaThyOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MjUwMFx1MjUwMlx1MjUwY1x1MjUxMFx1MjUxNFx1MjUxOFx1MjUxY1x1MjUyNFx1MjUyY1x1MjUzNFx1MjUzY1x1MjU4MFx1MjU4NFx1MjU4OFx1MjU4Y1x1MjU5MFx1MjU5MVx1MjU5Mlx1MjU5M1x1MjMyMFx1MjVhMFx1''@;'; put 'put ''MjIxOVx1MjIxYVx1MjI0OFx1MjI2NFx1MjI2NVx4YTBcdTIzMjFceGIwXHhiMlx4YjdceGY3XHUyNTUwXHUyNTUxXHUyNTUyXHUwNDUxXHUyNTUzXHUyNTU0XHUyNTU1XHUyNTU2XHUyNTU3XHUyNTU4XHUyNTU5XHUyNTVhXHUyNTViXHUyNTVjXHUyNTVkXHUyNTVlXHUyNTVmXHUyNTYwXHUy''@;'; put 'put ''NTYxXHUwNDAxXHUyNTYyXHUyNTYzXHUyNTY0XHUyNTY1XHUyNTY2XHUyNTY3XHUyNTY4XHUyNTY5XHUyNTZhXHUyNTZiXHUyNTZjXHhhOVx1MDQ0ZVx1MDQzMFx1MDQzMVx1MDQ0Nlx1MDQzNFx1MDQzNVx1MDQ0NFx1MDQzM1x1MDQ0NVx1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1''@;'; put 'put ''MDQzZFx1MDQzZVx1MDQzZlx1MDQ0Zlx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQzNlx1MDQzMlx1MDQ0Y1x1MDQ0Ylx1MDQzN1x1MDQ0OFx1MDQ0ZFx1MDQ0OVx1MDQ0N1x1MDQ0YVx1MDQyZVx1MDQxMFx1MDQxMVx1MDQyNlx1MDQxNFx1MDQxNVx1MDQyNFx1MDQxM1x1MDQyNVx1MDQx''@;'; put 'put ''OFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQyZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQxNlx1MDQxMlx1MDQyY1x1MDQyYlx1MDQxN1x1MDQyOFx1MDQyZFx1MDQyOVx1MDQyN1x1MDQyYSJ9LGtvaTh1Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1''@;'; put 'put ''MjUwMFx1MjUwMlx1MjUwY1x1MjUxMFx1MjUxNFx1MjUxOFx1MjUxY1x1MjUyNFx1MjUyY1x1MjUzNFx1MjUzY1x1MjU4MFx1MjU4NFx1MjU4OFx1MjU4Y1x1MjU5MFx1MjU5MVx1MjU5Mlx1MjU5M1x1MjMyMFx1MjVhMFx1MjIxOVx1MjIxYVx1MjI0OFx1MjI2NFx1MjI2NVx4YTBcdTIzMjFc''@;'; put 'put ''eGIwXHhiMlx4YjdceGY3XHUyNTUwXHUyNTUxXHUyNTUyXHUwNDUxXHUwNDU0XHUyNTU0XHUwNDU2XHUwNDU3XHUyNTU3XHUyNTU4XHUyNTU5XHUyNTVhXHUyNTViXHUwNDkxXHUyNTVkXHUyNTVlXHUyNTVmXHUyNTYwXHUyNTYxXHUwNDAxXHUwNDA0XHUyNTYzXHUwNDA2XHUwNDA3XHUyNTY2''@;'; put 'put ''XHUyNTY3XHUyNTY4XHUyNTY5XHUyNTZhXHUwNDkwXHUyNTZjXHhhOVx1MDQ0ZVx1MDQzMFx1MDQzMVx1MDQ0Nlx1MDQzNFx1MDQzNVx1MDQ0NFx1MDQzM1x1MDQ0NVx1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MDQ0Zlx1MDQ0MFx1MDQ0MVx1MDQ0''@;'; put 'put ''Mlx1MDQ0M1x1MDQzNlx1MDQzMlx1MDQ0Y1x1MDQ0Ylx1MDQzN1x1MDQ0OFx1MDQ0ZFx1MDQ0OVx1MDQ0N1x1MDQ0YVx1MDQyZVx1MDQxMFx1MDQxMVx1MDQyNlx1MDQxNFx1MDQxNVx1MDQyNFx1MDQxM1x1MDQyNVx1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1''@;'; put 'put ''MDQxZlx1MDQyZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQxNlx1MDQxMlx1MDQyY1x1MDQyYlx1MDQxN1x1MDQyOFx1MDQyZFx1MDQyOVx1MDQyN1x1MDQyYSJ9LGtvaThydTp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTI1MDBcdTI1MDJcdTI1MGNcdTI1MTBcdTI1MTRcdTI1MThcdTI1''@;'; put 'put ''MWNcdTI1MjRcdTI1MmNcdTI1MzRcdTI1M2NcdTI1ODBcdTI1ODRcdTI1ODhcdTI1OGNcdTI1OTBcdTI1OTFcdTI1OTJcdTI1OTNcdTIzMjBcdTI1YTBcdTIyMTlcdTIyMWFcdTIyNDhcdTIyNjRcdTIyNjVceGEwXHUyMzIxXHhiMFx4YjJceGI3XHhmN1x1MjU1MFx1MjU1MVx1MjU1Mlx1MDQ1''@;'; put 'put ''MVx1MDQ1NFx1MjU1NFx1MDQ1Nlx1MDQ1N1x1MjU1N1x1MjU1OFx1MjU1OVx1MjU1YVx1MjU1Ylx1MDQ5MVx1MDQ1ZVx1MjU1ZVx1MjU1Zlx1MjU2MFx1MjU2MVx1MDQwMVx1MDQwNFx1MjU2M1x1MDQwNlx1MDQwN1x1MjU2Nlx1MjU2N1x1MjU2OFx1MjU2OVx1MjU2YVx1MDQ5MFx1MDQwZVx4''@;'; put 'put ''YTlcdTA0NGVcdTA0MzBcdTA0MzFcdTA0NDZcdTA0MzRcdTA0MzVcdTA0NDRcdTA0MzNcdTA0NDVcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0M2ZcdTA0NGZcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0MzZcdTA0MzJcdTA0NGNcdTA0NGJcdTA0Mzdc''@;'; put 'put ''dTA0NDhcdTA0NGRcdTA0NDlcdTA0NDdcdTA0NGFcdTA0MmVcdTA0MTBcdTA0MTFcdTA0MjZcdTA0MTRcdTA0MTVcdTA0MjRcdTA0MTNcdTA0MjVcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MmZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0''@;'; put 'put ''MTZcdTA0MTJcdTA0MmNcdTA0MmJcdTA0MTdcdTA0MjhcdTA0MmRcdTA0MjlcdTA0MjdcdTA0MmEifSxrb2k4dDp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTA0OWJcdTA0OTNcdTIwMWFcdTA0OTJcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdWZmZmRcdTIwMzBcdTA0YjNcdTIwMzlcdTA0YjJc''@;'; put 'put ''dTA0YjdcdTA0YjZcdWZmZmRcdTA0OWFcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdWZmZmRcdTIxMjJcdWZmZmRcdTIwM2FcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTA0ZWZcdTA0ZWVcdTA0NTFceGE0XHUwNGUzXHhhNlx4YTdcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRceGFiXHhhY1x4YWRceGFlXHVmZmZkXHhiMFx4YjFceGIyXHUwNDAxXHVmZmZkXHUwNGUyXHhiNlx4YjdcdWZmZmRcdTIxMTZcdWZmZmRceGJiXHVmZmZkXHVmZmZkXHVmZmZkXHhhOVx1MDQ0ZVx1MDQzMFx1MDQzMVx1MDQ0Nlx1MDQzNFx1MDQzNVx1MDQ0NFx1MDQzM1x1MDQ0''@;'; put 'put ''NVx1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MDQ0Zlx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQzNlx1MDQzMlx1MDQ0Y1x1MDQ0Ylx1MDQzN1x1MDQ0OFx1MDQ0ZFx1MDQ0OVx1MDQ0N1x1MDQ0YVx1MDQyZVx1MDQxMFx1MDQxMVx1MDQyNlx1''@;'; put 'put ''MDQxNFx1MDQxNVx1MDQyNFx1MDQxM1x1MDQyNVx1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQyZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQxNlx1MDQxMlx1MDQyY1x1MDQyYlx1MDQxN1x1MDQyOFx1MDQyZFx1MDQyOVx1MDQyN1x1MDQy''@;'; put 'put ''YSJ9LGFybXNjaWk4Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhh''@;'; put 'put ''MFx1ZmZmZFx1MDU4N1x1MDU4OSkoXHhiYlx4YWJcdTIwMTQuXHUwNTVkLC1cdTA1OGFcdTIwMjZcdTA1NWNcdTA1NWJcdTA1NWVcdTA1MzFcdTA1NjFcdTA1MzJcdTA1NjJcdTA1MzNcdTA1NjNcdTA1MzRcdTA1NjRcdTA1MzVcdTA1NjVcdTA1MzZcdTA1NjZcdTA1MzdcdTA1NjdcdTA1Mzhc''@;'; put 'put ''dTA1NjhcdTA1MzlcdTA1NjlcdTA1M2FcdTA1NmFcdTA1M2JcdTA1NmJcdTA1M2NcdTA1NmNcdTA1M2RcdTA1NmRcdTA1M2VcdTA1NmVcdTA1M2ZcdTA1NmZcdTA1NDBcdTA1NzBcdTA1NDFcdTA1NzFcdTA1NDJcdTA1NzJcdTA1NDNcdTA1NzNcdTA1NDRcdTA1NzRcdTA1NDVcdTA1NzVcdTA1''@;'; put 'put ''NDZcdTA1NzZcdTA1NDdcdTA1NzdcdTA1NDhcdTA1NzhcdTA1NDlcdTA1NzlcdTA1NGFcdTA1N2FcdTA1NGJcdTA1N2JcdTA1NGNcdTA1N2NcdTA1NGRcdTA1N2RcdTA1NGVcdTA1N2VcdTA1NGZcdTA1N2ZcdTA1NTBcdTA1ODBcdTA1NTFcdTA1ODFcdTA1NTJcdTA1ODJcdTA1NTNcdTA1ODNc''@;'; put 'put ''dTA1NTRcdTA1ODRcdTA1NTVcdTA1ODVcdTA1NTZcdTA1ODZcdTA1NWFcdWZmZmQifSxyazEwNDg6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUwNDAyXHUwNDAzXHUyMDFhXHUwNDUzXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHUyMGFjXHUyMDMwXHUwNDA5XHUyMDM5XHUwNDBhXHUwNDlhXHUw''@;'; put 'put ''NGJhXHUwNDBmXHUwNDUyXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHVmZmZkXHUyMTIyXHUwNDU5XHUyMDNhXHUwNDVhXHUwNDliXHUwNGJiXHUwNDVmXHhhMFx1MDRiMFx1MDRiMVx1MDRkOFx4YTRcdTA0ZThceGE2XHhhN1x1MDQwMVx4YTlcdTA0OTJceGFi''@;'; put 'put ''XHhhY1x4YWRceGFlXHUwNGFlXHhiMFx4YjFcdTA0MDZcdTA0NTZcdTA0ZTlceGI1XHhiNlx4YjdcdTA0NTFcdTIxMTZcdTA0OTNceGJiXHUwNGQ5XHUwNGEyXHUwNGEzXHUwNGFmXHUwNDEwXHUwNDExXHUwNDEyXHUwNDEzXHUwNDE0XHUwNDE1XHUwNDE2XHUwNDE3XHUwNDE4XHUwNDE5XHUw''@;'; put 'put ''NDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDI0XHUwNDI1XHUwNDI2XHUwNDI3XHUwNDI4XHUwNDI5XHUwNDJhXHUwNDJiXHUwNDJjXHUwNDJkXHUwNDJlXHUwNDJmXHUwNDMwXHUwNDMxXHUwNDMyXHUwNDMzXHUwNDM0XHUwNDM1''@;'; put 'put ''XHUwNDM2XHUwNDM3XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNkXHUwNDNlXHUwNDNmXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDQ0XHUwNDQ1XHUwNDQ2XHUwNDQ3XHUwNDQ4XHUwNDQ5XHUwNDRhXHUwNDRiXHUwNDRjXHUwNDRkXHUwNDRlXHUwNDRmIn0sdGN2bjp7''@;'; put 'put ''dHlwZToiX3NiY3MiLGNoYXJzOiJcMFx4ZGFcdTFlZTRceDAzXHUxZWVhXHUxZWVjXHUxZWVlXHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx1MWVlOFx1MWVmMFx1MWVmMlx1MWVmNlx1MWVmOFx4ZGRcdTFlZjRceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygp''@;'; put 'put ''KissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHhjMFx1MWVhMlx4YzNceGMxXHUxZWEwXHUxZWI2XHUxZWFjXHhjOFx1MWViYVx1MWViY1x4YzlcdTFlYjhcdTFlYzZceGNjXHUx''@;'; put 'put ''ZWM4XHUwMTI4XHhjZFx1MWVjYVx4ZDJcdTFlY2VceGQ1XHhkM1x1MWVjY1x1MWVkOFx1MWVkY1x1MWVkZVx1MWVlMFx1MWVkYVx1MWVlMlx4ZDlcdTFlZTZcdTAxNjhceGEwXHUwMTAyXHhjMlx4Y2FceGQ0XHUwMWEwXHUwMWFmXHUwMTEwXHUwMTAzXHhlMlx4ZWFceGY0XHUwMWExXHUwMWIw''@;'; put 'put ''XHUwMTExXHUxZWIwXHUwMzAwXHUwMzA5XHUwMzAzXHUwMzAxXHUwMzIzXHhlMFx1MWVhM1x4ZTNceGUxXHUxZWExXHUxZWIyXHUxZWIxXHUxZWIzXHUxZWI1XHUxZWFmXHUxZWI0XHUxZWFlXHUxZWE2XHUxZWE4XHUxZWFhXHUxZWE0XHUxZWMwXHUxZWI3XHUxZWE3XHUxZWE5XHUxZWFiXHUx''@;'; put 'put ''ZWE1XHUxZWFkXHhlOFx1MWVjMlx1MWViYlx1MWViZFx4ZTlcdTFlYjlcdTFlYzFcdTFlYzNcdTFlYzVcdTFlYmZcdTFlYzdceGVjXHUxZWM5XHUxZWM0XHUxZWJlXHUxZWQyXHUwMTI5XHhlZFx1MWVjYlx4ZjJcdTFlZDRcdTFlY2ZceGY1XHhmM1x1MWVjZFx1MWVkM1x1MWVkNVx1MWVkN1x1''@;'; put 'put ''MWVkMVx1MWVkOVx1MWVkZFx1MWVkZlx1MWVlMVx1MWVkYlx1MWVlM1x4ZjlcdTFlZDZcdTFlZTdcdTAxNjlceGZhXHUxZWU1XHUxZWViXHUxZWVkXHUxZWVmXHUxZWU5XHUxZWYxXHUxZWYzXHUxZWY3XHUxZWY5XHhmZFx1MWVmNVx1MWVkMCJ9LGdlb3JnaWFuYWNhZGVteTp7dHlwZToiX3Ni''@;'; put 'put ''Y3MiLGNoYXJzOiJceDgwXHg4MVx1MjAxYVx1MDE5Mlx1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1MDJjNlx1MjAzMFx1MDE2MFx1MjAzOVx1MDE1Mlx4OGRceDhlXHg4Zlx4OTBcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdTAyZGNcdTIxMjJcdTAxNjFcdTIw''@;'; put 'put ''M2FcdTAxNTNceDlkXHg5ZVx1MDE3OFx4YTBceGExXHhhMlx4YTNceGE0XHhhNVx4YTZceGE3XHhhOFx4YTlceGFhXHhhYlx4YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4YjhceGI5XHhiYVx4YmJceGJjXHhiZFx4YmVceGJmXHUxMGQwXHUxMGQxXHUx''@;'; put 'put ''MGQyXHUxMGQzXHUxMGQ0XHUxMGQ1XHUxMGQ2XHUxMGQ3XHUxMGQ4XHUxMGQ5XHUxMGRhXHUxMGRiXHUxMGRjXHUxMGRkXHUxMGRlXHUxMGRmXHUxMGUwXHUxMGUxXHUxMGUyXHUxMGUzXHUxMGU0XHUxMGU1XHUxMGU2XHUxMGU3XHUxMGU4XHUxMGU5XHUxMGVhXHUxMGViXHUxMGVjXHUxMGVk''@;'; put 'put ''XHUxMGVlXHUxMGVmXHUxMGYwXHUxMGYxXHUxMGYyXHUxMGYzXHUxMGY0XHUxMGY1XHUxMGY2XHhlN1x4ZThceGU5XHhlYVx4ZWJceGVjXHhlZFx4ZWVceGVmXHhmMFx4ZjFceGYyXHhmM1x4ZjRceGY1XHhmNlx4ZjdceGY4XHhmOVx4ZmFceGZiXHhmY1x4ZmRceGZlXHhmZiJ9LGdlb3JnaWFu''@;'; put 'put ''cHM6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFcdTIwMWFcdTAxOTJcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdTAyYzZcdTIwMzBcdTAxNjBcdTIwMzlcdTAxNTJceDhkXHg4ZVx4OGZceDkwXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHUwMmRjXHUy''@;'; put 'put ''MTIyXHUwMTYxXHUyMDNhXHUwMTUzXHg5ZFx4OWVcdTAxNzhceGEwXHhhMVx4YTJceGEzXHhhNFx4YTVceGE2XHhhN1x4YThceGE5XHhhYVx4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4YjdceGI4XHhiOVx4YmFceGJiXHhiY1x4YmRceGJlXHhiZlx1''@;'; put 'put ''MTBkMFx1MTBkMVx1MTBkMlx1MTBkM1x1MTBkNFx1MTBkNVx1MTBkNlx1MTBmMVx1MTBkN1x1MTBkOFx1MTBkOVx1MTBkYVx1MTBkYlx1MTBkY1x1MTBmMlx1MTBkZFx1MTBkZVx1MTBkZlx1MTBlMFx1MTBlMVx1MTBlMlx1MTBmM1x1MTBlM1x1MTBlNFx1MTBlNVx1MTBlNlx1MTBlN1x1MTBl''@;'; put 'put ''OFx1MTBlOVx1MTBlYVx1MTBlYlx1MTBlY1x1MTBlZFx1MTBlZVx1MTBmNFx1MTBlZlx1MTBmMFx1MTBmNVx4ZTZceGU3XHhlOFx4ZTlceGVhXHhlYlx4ZWNceGVkXHhlZVx4ZWZceGYwXHhmMVx4ZjJceGYzXHhmNFx4ZjVceGY2XHhmN1x4ZjhceGY5XHhmYVx4ZmJceGZjXHhmZFx4ZmVceGZm''@;'; put 'put ''In0scHQxNTQ6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUwNDk2XHUwNDkyXHUwNGVlXHUwNDkzXHUyMDFlXHUyMDI2XHUwNGI2XHUwNGFlXHUwNGIyXHUwNGFmXHUwNGEwXHUwNGUyXHUwNGEyXHUwNDlhXHUwNGJhXHUwNGI4XHUwNDk3XHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUy''@;'; put 'put ''MDEzXHUyMDE0XHUwNGIzXHUwNGI3XHUwNGExXHUwNGUzXHUwNGEzXHUwNDliXHUwNGJiXHUwNGI5XHhhMFx1MDQwZVx1MDQ1ZVx1MDQwOFx1MDRlOFx1MDQ5OFx1MDRiMFx4YTdcdTA0MDFceGE5XHUwNGQ4XHhhYlx4YWNcdTA0ZWZceGFlXHUwNDljXHhiMFx1MDRiMVx1MDQwNlx1MDQ1Nlx1''@;'; put 'put ''MDQ5OVx1MDRlOVx4YjZceGI3XHUwNDUxXHUyMTE2XHUwNGQ5XHhiYlx1MDQ1OFx1MDRhYVx1MDRhYlx1MDQ5ZFx1MDQxMFx1MDQxMVx1MDQxMlx1MDQxM1x1MDQxNFx1MDQxNVx1MDQxNlx1MDQxN1x1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQy''@;'; put 'put ''MFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQyNFx1MDQyNVx1MDQyNlx1MDQyN1x1MDQyOFx1MDQyOVx1MDQyYVx1MDQyYlx1MDQyY1x1MDQyZFx1MDQyZVx1MDQyZlx1MDQzMFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1MDQzNVx1MDQzNlx1MDQzN1x1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1''@;'; put 'put ''MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1MDQ0OVx1MDQ0YVx1MDQ0Ylx1MDQ0Y1x1MDQ0ZFx1MDQ0ZVx1MDQ0ZiJ9LHZpc2NpaTp7dHlwZToiX3NiY3MiLGNoYXJzOiJcMFx4MDFcdTFlYjJceDAz''@;'; put 'put ''XHgwNFx1MWViNFx1MWVhYVx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNcdTFlZjZceDE1XHgxNlx4MTdceDE4XHUxZWY4XHgxYVx4MWJceDFjXHgxZFx1MWVmNFx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RV''@;'; put 'put ''VldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1MWVhMFx1MWVhZVx1MWViMFx1MWViNlx1MWVhNFx1MWVhNlx1MWVhOFx1MWVhY1x1MWViY1x1MWViOFx1MWViZVx1MWVjMFx1MWVjMlx1MWVjNFx1MWVjNlx1MWVkMFx1MWVkMlx1MWVkNFx1MWVkNlx1MWVk''@;'; put 'put ''OFx1MWVlMlx1MWVkYVx1MWVkY1x1MWVkZVx1MWVjYVx1MWVjZVx1MWVjY1x1MWVjOFx1MWVlNlx1MDE2OFx1MWVlNFx1MWVmMlx4ZDVcdTFlYWZcdTFlYjFcdTFlYjdcdTFlYTVcdTFlYTdcdTFlYTlcdTFlYWRcdTFlYmRcdTFlYjlcdTFlYmZcdTFlYzFcdTFlYzNcdTFlYzVcdTFlYzdcdTFl''@;'; put 'put ''ZDFcdTFlZDNcdTFlZDVcdTFlZDdcdTFlZTBcdTAxYTBcdTFlZDlcdTFlZGRcdTFlZGZcdTFlY2JcdTFlZjBcdTFlZThcdTFlZWFcdTFlZWNcdTAxYTFcdTFlZGJcdTAxYWZceGMwXHhjMVx4YzJceGMzXHUxZWEyXHUwMTAyXHUxZWIzXHUxZWI1XHhjOFx4YzlceGNhXHUxZWJhXHhjY1x4Y2Rc''@;'; put 'put ''dTAxMjhcdTFlZjNcdTAxMTBcdTFlZTlceGQyXHhkM1x4ZDRcdTFlYTFcdTFlZjdcdTFlZWJcdTFlZWRceGQ5XHhkYVx1MWVmOVx1MWVmNVx4ZGRcdTFlZTFcdTAxYjBceGUwXHhlMVx4ZTJceGUzXHUxZWEzXHUwMTAzXHUxZWVmXHUxZWFiXHhlOFx4ZTlceGVhXHUxZWJiXHhlY1x4ZWRcdTAx''@;'; put 'put ''MjlcdTFlYzlcdTAxMTFcdTFlZjFceGYyXHhmM1x4ZjRceGY1XHUxZWNmXHUxZWNkXHUxZWU1XHhmOVx4ZmFcdTAxNjlcdTFlZTdceGZkXHUxZWUzXHUxZWVlIn0saXNvNjQ2Y246e3R5cGU6Il9zYmNzIixjaGFyczoiXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxy''@;'; put 'put ''XHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiNceGE1JSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3''@;'; put 'put ''eHl6e3x9XHUyMDNlXHg3Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCJ9LGlzbzY0NmpwOnt0eXBlOiJfc2JjcyIsY2hhcnM6IlwwXHgwMVx4''@;'; put 'put ''MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZ''@;'; put 'put ''WltceGE1XV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9XHUyMDNlXHg3Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCJ9LGhwcm9t''@;'; put 'put ''YW44Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMFx4YzBceGMy''@;'; put 'put ''XHhjOFx4Y2FceGNiXHhjZVx4Y2ZceGI0XHUwMmNiXHUwMmM2XHhhOFx1MDJkY1x4ZDlceGRiXHUyMGE0XHhhZlx4ZGRceGZkXHhiMFx4YzdceGU3XHhkMVx4ZjFceGExXHhiZlx4YTRceGEzXHhhNVx4YTdcdTAxOTJceGEyXHhlMlx4ZWFceGY0XHhmYlx4ZTFceGU5XHhmM1x4ZmFceGUwXHhl''@;'; put 'put ''OFx4ZjJceGY5XHhlNFx4ZWJceGY2XHhmY1x4YzVceGVlXHhkOFx4YzZceGU1XHhlZFx4ZjhceGU2XHhjNFx4ZWNceGQ2XHhkY1x4YzlceGVmXHhkZlx4ZDRceGMxXHhjM1x4ZTNceGQwXHhmMFx4Y2RceGNjXHhkM1x4ZDJceGQ1XHhmNVx1MDE2MFx1MDE2MVx4ZGFcdTAxNzhceGZmXHhkZVx4''@;'; put 'put ''ZmVceGI3XHhiNVx4YjZceGJlXHUyMDE0XHhiY1x4YmRceGFhXHhiYVx4YWJcdTI1YTBceGJiXHhiMVx1ZmZmZCJ9LG1hY2ludG9zaDp7dHlwZToiX3NiY3MiLGNoYXJzOiJceGM0XHhjNVx4YzdceGM5XHhkMVx4ZDZceGRjXHhlMVx4ZTBceGUyXHhlNFx4ZTNceGU1XHhlN1x4ZTlceGU4XHhl''@;'; put 'put ''YVx4ZWJceGVkXHhlY1x4ZWVceGVmXHhmMVx4ZjNceGYyXHhmNFx4ZjZceGY1XHhmYVx4ZjlceGZiXHhmY1x1MjAyMFx4YjBceGEyXHhhM1x4YTdcdTIwMjJceGI2XHhkZlx4YWVceGE5XHUyMTIyXHhiNFx4YThcdTIyNjBceGM2XHhkOFx1MjIxZVx4YjFcdTIyNjRcdTIyNjVceGE1XHhiNVx1''@;'; put 'put ''MjIwMlx1MjIxMVx1MjIwZlx1MDNjMFx1MjIyYlx4YWFceGJhXHUyMTI2XHhlNlx4ZjhceGJmXHhhMVx4YWNcdTIyMWFcdTAxOTJcdTIyNDhcdTIyMDZceGFiXHhiYlx1MjAyNlx4YTBceGMwXHhjM1x4ZDVcdTAxNTJcdTAxNTNcdTIwMTNcdTIwMTRcdTIwMWNcdTIwMWRcdTIwMThcdTIwMTlc''@;'; put 'put ''eGY3XHUyNWNhXHhmZlx1MDE3OFx1MjA0NFx4YTRcdTIwMzlcdTIwM2FcdWZiMDFcdWZiMDJcdTIwMjFceGI3XHUyMDFhXHUyMDFlXHUyMDMwXHhjMlx4Y2FceGMxXHhjYlx4YzhceGNkXHhjZVx4Y2ZceGNjXHhkM1x4ZDRcdWZmZmRceGQyXHhkYVx4ZGJceGQ5XHUwMTMxXHUwMmM2XHUwMmRj''@;'; put 'put ''XHhhZlx1MDJkOFx1MDJkOVx1MDJkYVx4YjhcdTAyZGRcdTAyZGJcdTAyYzcifSxhc2NpaTp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmQifSx0aXM2MjA6e3R5cGU6Il9zYmNzIixjaGFyczoiXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwZTAxXHUwZTAyXHUwZTAzXHUwZTA0XHUwZTA1XHUwZTA2XHUwZTA3XHUwZTA4XHUwZTA5XHUwZTBhXHUwZTBiXHUwZTBjXHUwZTBkXHUwZTBl''@;'; put 'put ''XHUwZTBmXHUwZTEwXHUwZTExXHUwZTEyXHUwZTEzXHUwZTE0XHUwZTE1XHUwZTE2XHUwZTE3XHUwZTE4XHUwZTE5XHUwZTFhXHUwZTFiXHUwZTFjXHUwZTFkXHUwZTFlXHUwZTFmXHUwZTIwXHUwZTIxXHUwZTIyXHUwZTIzXHUwZTI0XHUwZTI1XHUwZTI2XHUwZTI3XHUwZTI4XHUwZTI5XHUw''@;'; put 'put ''ZTJhXHUwZTJiXHUwZTJjXHUwZTJkXHUwZTJlXHUwZTJmXHUwZTMwXHUwZTMxXHUwZTMyXHUwZTMzXHUwZTM0XHUwZTM1XHUwZTM2XHUwZTM3XHUwZTM4XHUwZTM5XHUwZTNhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwZTNmXHUwZTQwXHUwZTQxXHUwZTQyXHUwZTQzXHUwZTQ0XHUwZTQ1''@;'; put 'put ''XHUwZTQ2XHUwZTQ3XHUwZTQ4XHUwZTQ5XHUwZTRhXHUwZTRiXHUwZTRjXHUwZTRkXHUwZTRlXHUwZTRmXHUwZTUwXHUwZTUxXHUwZTUyXHUwZTUzXHUwZTU0XHUwZTU1XHUwZTU2XHUwZTU3XHUwZTU4XHUwZTU5XHUwZTVhXHUwZTViXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIn19fSw3NjIz''@;'; put 'put ''OnVlPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9ezEwMDI5OiJtYWNjZW50ZXVybyIsbWFjY2VudGV1cm86e3R5cGU6Il9zYmNzIixjaGFyczoiXHhjNFx1MDEwMFx1MDEwMVx4YzlcdTAxMDRceGQ2XHhkY1x4ZTFcdTAxMDVcdTAxMGNceGU0XHUwMTBkXHUwMTA2XHUwMTA3XHhlOVx1MDE3''@;'; put 'put ''OVx1MDE3YVx1MDEwZVx4ZWRcdTAxMGZcdTAxMTJcdTAxMTNcdTAxMTZceGYzXHUwMTE3XHhmNFx4ZjZceGY1XHhmYVx1MDExYVx1MDExYlx4ZmNcdTIwMjBceGIwXHUwMTE4XHhhM1x4YTdcdTIwMjJceGI2XHhkZlx4YWVceGE5XHUyMTIyXHUwMTE5XHhhOFx1MjI2MFx1MDEyM1x1MDEyZVx1''@;'; put 'put ''MDEyZlx1MDEyYVx1MjI2NFx1MjI2NVx1MDEyYlx1MDEzNlx1MjIwMlx1MjIxMVx1MDE0Mlx1MDEzYlx1MDEzY1x1MDEzZFx1MDEzZVx1MDEzOVx1MDEzYVx1MDE0NVx1MDE0Nlx1MDE0M1x4YWNcdTIyMWFcdTAxNDRcdTAxNDdcdTIyMDZceGFiXHhiYlx1MjAyNlx4YTBcdTAxNDhcdTAxNTBc''@;'; put 'put ''eGQ1XHUwMTUxXHUwMTRjXHUyMDEzXHUyMDE0XHUyMDFjXHUyMDFkXHUyMDE4XHUyMDE5XHhmN1x1MjVjYVx1MDE0ZFx1MDE1NFx1MDE1NVx1MDE1OFx1MjAzOVx1MjAzYVx1MDE1OVx1MDE1Nlx1MDE1N1x1MDE2MFx1MjAxYVx1MjAxZVx1MDE2MVx1MDE1YVx1MDE1Ylx4YzFcdTAxNjRcdTAx''@;'; put 'put ''NjVceGNkXHUwMTdkXHUwMTdlXHUwMTZhXHhkM1x4ZDRcdTAxNmJcdTAxNmVceGRhXHUwMTZmXHUwMTcwXHUwMTcxXHUwMTcyXHUwMTczXHhkZFx4ZmRcdTAxMzdcdTAxN2JcdTAxNDFcdTAxN2NcdTAxMjJcdTAyYzcifSw4MDg6ImNwODA4IixpYm04MDg6ImNwODA4IixjcDgwODp7dHlwZToi''@;'; put 'put ''X3NiY3MiLGNoYXJzOiJcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0MTRcdTA0MTVcdTA0MTZcdTA0MTdcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0Mjhc''@;'; put 'put ''dTA0MjlcdTA0MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0MmVcdTA0MmZcdTA0MzBcdTA0MzFcdTA0MzJcdTA0MzNcdTA0MzRcdTA0MzVcdTA0MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0M2ZcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1''@;'; put 'put ''MjRcdTI1NjFcdTI1NjJcdTI1NTZcdTI1NTVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTI1NWNcdTI1NWJcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTI1NWVcdTI1NWZcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNcdTI1Njdc''@;'; put 'put ''dTI1NjhcdTI1NjRcdTI1NjVcdTI1NTlcdTI1NThcdTI1NTJcdTI1NTNcdTI1NmJcdTI1NmFcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTI1OGNcdTI1OTBcdTI1ODBcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0NDRcdTA0NDVcdTA0NDZcdTA0NDdcdTA0NDhcdTA0NDlcdTA0NGFcdTA0''@;'; put 'put ''NGJcdTA0NGNcdTA0NGRcdTA0NGVcdTA0NGZcdTA0MDFcdTA0NTFcdTA0MDRcdTA0NTRcdTA0MDdcdTA0NTdcdTA0MGVcdTA0NWVceGIwXHUyMjE5XHhiN1x1MjIxYVx1MjExNlx1MjBhY1x1MjVhMFx4YTAifSxtaWs6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUwNDEwXHUwNDExXHUwNDEyXHUw''@;'; put 'put ''NDEzXHUwNDE0XHUwNDE1XHUwNDE2XHUwNDE3XHUwNDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDI0XHUwNDI1XHUwNDI2XHUwNDI3XHUwNDI4XHUwNDI5XHUwNDJhXHUwNDJiXHUwNDJjXHUwNDJkXHUwNDJl''@;'; put 'put ''XHUwNDJmXHUwNDMwXHUwNDMxXHUwNDMyXHUwNDMzXHUwNDM0XHUwNDM1XHUwNDM2XHUwNDM3XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNkXHUwNDNlXHUwNDNmXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDQ0XHUwNDQ1XHUwNDQ2XHUwNDQ3XHUwNDQ4XHUwNDQ5XHUw''@;'; put 'put ''NDRhXHUwNDRiXHUwNDRjXHUwNDRkXHUwNDRlXHUwNDRmXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUyNTYzXHUyNTUxXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHUyNTEwXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHUyMTE2''@;'; put 'put ''XHhhN1x1MjU1N1x1MjU1ZFx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1MDNiMVx4ZGZcdTAzOTNcdTAzYzBcdTAzYTNcdTAzYzNceGI1XHUwM2M0XHUwM2E2XHUwMzk4XHUwM2E5XHUwM2I0XHUyMjFlXHUwM2M2XHUwM2I1XHUyMjI5XHUyMjYxXHhiMVx1MjI2''@;'; put 'put ''NVx1MjI2NFx1MjMyMFx1MjMyMVx4ZjdcdTIyNDhceGIwXHUyMjE5XHhiN1x1MjIxYVx1MjA3Zlx4YjJcdTI1YTBceGEwIn0sY3A3MjA6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFceGU5XHhlMlx4ODRceGUwXHg4Nlx4ZTdceGVhXHhlYlx4ZThceGVmXHhlZVx4OGRceDhlXHg4Zlx4''@;'; put 'put ''OTBcdTA2NTFcdTA2NTJceGY0XHhhNFx1MDY0MFx4ZmJceGY5XHUwNjIxXHUwNjIyXHUwNjIzXHUwNjI0XHhhM1x1MDYyNVx1MDYyNlx1MDYyN1x1MDYyOFx1MDYyOVx1MDYyYVx1MDYyYlx1MDYyY1x1MDYyZFx1MDYyZVx1MDYyZlx1MDYzMFx1MDYzMVx1MDYzMlx1MDYzM1x1MDYzNFx1MDYz''@;'; put 'put ''NVx4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHUyNTYxXHUyNTYyXHUyNTU2XHUyNTU1XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUyNTVjXHUyNTViXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUyNTVlXHUyNTVmXHUyNTVhXHUyNTU0''@;'; put 'put ''XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHUyNTY3XHUyNTY4XHUyNTY0XHUyNTY1XHUyNTU5XHUyNTU4XHUyNTUyXHUyNTUzXHUyNTZiXHUyNTZhXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgwXHUwNjM2XHUwNjM3XHUwNjM4XHUwNjM5XHUwNjNhXHUw''@;'; put 'put ''NjQxXHhiNVx1MDY0Mlx1MDY0M1x1MDY0NFx1MDY0NVx1MDY0Nlx1MDY0N1x1MDY0OFx1MDY0OVx1MDY0YVx1MjI2MVx1MDY0Ylx1MDY0Y1x1MDY0ZFx1MDY0ZVx1MDY0Zlx1MDY1MFx1MjI0OFx4YjBcdTIyMTlceGI3XHUyMjFhXHUyMDdmXHhiMlx1MjVhMFx4YTAifSxhc2NpaThiaXQ6ImFz''@;'; put 'put ''Y2lpIix1c2FzY2lpOiJhc2NpaSIsYW5zaXgzNDoiYXNjaWkiLGFuc2l4MzQxOTY4OiJhc2NpaSIsYW5zaXgzNDE5ODY6ImFzY2lpIixjc2FzY2lpOiJhc2NpaSIsY3AzNjc6ImFzY2lpIixpYm0zNjc6ImFzY2lpIixpc29pcjY6ImFzY2lpIixpc282NDZ1czoiYXNjaWkiLGlzbzY0Nmlydjoi''@;'; put 'put ''YXNjaWkiLHVzOiJhc2NpaSIsbGF0aW4xOiJpc284ODU5MSIsbGF0aW4yOiJpc284ODU5MiIsbGF0aW4zOiJpc284ODU5MyIsbGF0aW40OiJpc284ODU5NCIsbGF0aW41OiJpc284ODU5OSIsbGF0aW42OiJpc284ODU5MTAiLGxhdGluNzoiaXNvODg1OTEzIixsYXRpbjg6Imlzbzg4NTkxNCIs''@;'; put 'put ''bGF0aW45OiJpc284ODU5MTUiLGxhdGluMTA6Imlzbzg4NTkxNiIsY3Npc29sYXRpbjE6Imlzbzg4NTkxIixjc2lzb2xhdGluMjoiaXNvODg1OTIiLGNzaXNvbGF0aW4zOiJpc284ODU5MyIsY3Npc29sYXRpbjQ6Imlzbzg4NTk0Iixjc2lzb2xhdGluY3lyaWxsaWM6Imlzbzg4NTk1Iixjc2lz''@;'; put 'put ''b2xhdGluYXJhYmljOiJpc284ODU5NiIsY3Npc29sYXRpbmdyZWVrOiJpc284ODU5NyIsY3Npc29sYXRpbmhlYnJldzoiaXNvODg1OTgiLGNzaXNvbGF0aW41OiJpc284ODU5OSIsY3Npc29sYXRpbjY6Imlzbzg4NTkxMCIsbDE6Imlzbzg4NTkxIixsMjoiaXNvODg1OTIiLGwzOiJpc284ODU5''@;'; put 'put ''MyIsbDQ6Imlzbzg4NTk0IixsNToiaXNvODg1OTkiLGw2OiJpc284ODU5MTAiLGw3OiJpc284ODU5MTMiLGw4OiJpc284ODU5MTQiLGw5OiJpc284ODU5MTUiLGwxMDoiaXNvODg1OTE2Iixpc29pcjE0OiJpc282NDZqcCIsaXNvaXI1NzoiaXNvNjQ2Y24iLGlzb2lyMTAwOiJpc284ODU5MSIs''@;'; put 'put ''aXNvaXIxMDE6Imlzbzg4NTkyIixpc29pcjEwOToiaXNvODg1OTMiLGlzb2lyMTEwOiJpc284ODU5NCIsaXNvaXIxNDQ6Imlzbzg4NTk1Iixpc29pcjEyNzoiaXNvODg1OTYiLGlzb2lyMTI2OiJpc284ODU5NyIsaXNvaXIxMzg6Imlzbzg4NTk4Iixpc29pcjE0ODoiaXNvODg1OTkiLGlzb2ly''@;'; put 'put ''MTU3OiJpc284ODU5MTAiLGlzb2lyMTY2OiJ0aXM2MjAiLGlzb2lyMTc5OiJpc284ODU5MTMiLGlzb2lyMTk5OiJpc284ODU5MTQiLGlzb2lyMjAzOiJpc284ODU5MTUiLGlzb2lyMjI2OiJpc284ODU5MTYiLGNwODE5OiJpc284ODU5MSIsaWJtODE5OiJpc284ODU5MSIsY3lyaWxsaWM6Imlz''@;'; put 'put ''bzg4NTk1IixhcmFiaWM6Imlzbzg4NTk2IixhcmFiaWM4OiJpc284ODU5NiIsZWNtYTExNDoiaXNvODg1OTYiLGFzbW83MDg6Imlzbzg4NTk2IixncmVlazoiaXNvODg1OTciLGdyZWVrODoiaXNvODg1OTciLGVjbWExMTg6Imlzbzg4NTk3IixlbG90OTI4OiJpc284ODU5NyIsaGVicmV3OiJp''@;'; put 'put ''c284ODU5OCIsaGVicmV3ODoiaXNvODg1OTgiLHR1cmtpc2g6Imlzbzg4NTk5Iix0dXJraXNoODoiaXNvODg1OTkiLHRoYWk6Imlzbzg4NTkxMSIsdGhhaTg6Imlzbzg4NTkxMSIsY2VsdGljOiJpc284ODU5MTQiLGNlbHRpYzg6Imlzbzg4NTkxNCIsaXNvY2VsdGljOiJpc284ODU5MTQiLHRp''@;'; put 'put ''czYyMDA6InRpczYyMCIsdGlzNjIwMjUyOTE6InRpczYyMCIsdGlzNjIwMjUzMzA6InRpczYyMCIsMWU0OiJtYWNyb21hbiIsMTAwMDY6Im1hY2dyZWVrIiwxMDAwNzoibWFjY3lyaWxsaWMiLDEwMDc5OiJtYWNpY2VsYW5kIiwxMDA4MToibWFjdHVya2lzaCIsY3NwYzhjb2RlcGFnZTQzNzoi''@;'; put 'put ''Y3A0MzciLGNzcGM3NzViYWx0aWM6ImNwNzc1Iixjc3BjODUwbXVsdGlsaW5ndWFsOiJjcDg1MCIsY3NwY3A4NTI6ImNwODUyIixjc3BjODYybGF0aW5oZWJyZXc6ImNwODYyIixjcGdyOiJjcDg2OSIsbXNlZToiY3AxMjUwIixtc2N5cmw6ImNwMTI1MSIsbXNhbnNpOiJjcDEyNTIiLG1zZ3Jl''@;'; put 'put ''ZWs6ImNwMTI1MyIsbXN0dXJrOiJjcDEyNTQiLG1zaGVicjoiY3AxMjU1Iixtc2FyYWI6ImNwMTI1NiIsd2luYmFsdHJpbToiY3AxMjU3IixjcDIwODY2OiJrb2k4ciIsMjA4NjY6ImtvaThyIixpYm04Nzg6ImtvaThyIixjc2tvaThyOiJrb2k4ciIsY3AyMTg2Njoia29pOHUiLDIxODY2OiJr''@;'; put 'put ''b2k4dSIsaWJtMTE2ODoia29pOHUiLHN0cmsxMDQ4MjAwMjoicmsxMDQ4Iix0Y3ZuNTcxMjoidGN2biIsdGN2bjU3MTIxOiJ0Y3ZuIixnYjE5ODg4MDoiaXNvNjQ2Y24iLGNuOiJpc282NDZjbiIsY3Npc28xNGppc2M2MjIwcm86ImlzbzY0NmpwIixqaXNjNjIyMDE5NjlybzoiaXNvNjQ2anAi''@;'; put 'put ''LGpwOiJpc282NDZqcCIsY3NocHJvbWFuODoiaHByb21hbjgiLHI4OiJocHJvbWFuOCIscm9tYW44OiJocHJvbWFuOCIseHJvbWFuODoiaHByb21hbjgiLGlibTEwNTE6Imhwcm9tYW44IixtYWM6Im1hY2ludG9zaCIsY3NtYWNpbnRvc2g6Im1hY2ludG9zaCJ9fSw3MTc1Oih1ZSxYLHkpPT57''@;'; put 'put ''InVzZSBzdHJpY3QiO3ZhciBJPXkoOTM4MDcpLkJ1ZmZlcjtmdW5jdGlvbiBfKCl7fWZ1bmN0aW9uIGcoKXt9ZnVuY3Rpb24gQigpe3RoaXMub3ZlcmZsb3dCeXRlPS0xfWZ1bmN0aW9uIHcoeixOKXt0aGlzLmljb252PU59ZnVuY3Rpb24gUCh6LE4pe3ZvaWQgMD09PSh6PXp8fHt9KS5hZGRC''@;'; put 'put ''T00mJih6LmFkZEJPTT0hMCksdGhpcy5lbmNvZGVyPU4uaWNvbnYuZ2V0RW5jb2RlcigidXRmLTE2bGUiLHopfWZ1bmN0aW9uIEYoeixOKXt0aGlzLmRlY29kZXI9bnVsbCx0aGlzLmluaXRpYWxCeXRlcz1bXSx0aGlzLmluaXRpYWxCeXRlc0xlbj0wLHRoaXMub3B0aW9ucz16fHx7fSx0aGlz''@;'; put 'put ''Lmljb252PU4uaWNvbnZ9ZnVuY3Rpb24gTyh6LE4pe3ZhciBMPU58fCJ1dGYtMTZsZSI7aWYoei5sZW5ndGg+PTIpaWYoMjU0PT16WzBdJiYyNTU9PXpbMV0pTD0idXRmLTE2YmUiO2Vsc2UgaWYoMjU1PT16WzBdJiYyNTQ9PXpbMV0pTD0idXRmLTE2bGUiO2Vsc2V7Zm9yKHZhciBLPTAsVT0w''@;'; put 'put ''LFc9TWF0aC5taW4oei5sZW5ndGgtei5sZW5ndGglMiw2NCksWT0wO1k8VztZKz0yKTA9PT16W1ldJiYwIT09eltZKzFdJiZVKyssMCE9PXpbWV0mJjA9PT16W1krMV0mJksrKztVPks/TD0idXRmLTE2YmUiOlU8SyYmKEw9InV0Zi0xNmxlIil9cmV0dXJuIEx9WC51dGYxNmJlPV8sXy5wcm90''@;'; put 'put ''b3R5cGUuZW5jb2Rlcj1nLF8ucHJvdG90eXBlLmRlY29kZXI9QixfLnByb3RvdHlwZS5ib21Bd2FyZT0hMCxnLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbih6KXtmb3IodmFyIE49SS5mcm9tKHosInVjczIiKSxMPTA7TDxOLmxlbmd0aDtMKz0yKXt2YXIgSz1OW0xdO05bTF09TltMKzFdLE5b''@;'; put 'put ''TCsxXT1LfXJldHVybiBOfSxnLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXt9LEIucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKHope2lmKDA9PXoubGVuZ3RoKXJldHVybiIiO3ZhciBOPUkuYWxsb2Moei5sZW5ndGgrMSksTD0wLEs9MDtmb3IoLTEhPT10aGlzLm92ZXJmbG93Qnl0ZSYmKE5b''@;'; put 'put ''MF09elswXSxOWzFdPXRoaXMub3ZlcmZsb3dCeXRlLEw9MSxLPTIpO0w8ei5sZW5ndGgtMTtMKz0yLEsrPTIpTltLXT16W0wrMV0sTltLKzFdPXpbTF07cmV0dXJuIHRoaXMub3ZlcmZsb3dCeXRlPUw9PXoubGVuZ3RoLTE/elt6Lmxlbmd0aC0xXTotMSxOLnNsaWNlKDAsSykudG9TdHJpbmco''@;'; put 'put ''InVjczIiKX0sQi5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7fSxYLnV0ZjE2PXcsdy5wcm90b3R5cGUuZW5jb2Rlcj1QLHcucHJvdG90eXBlLmRlY29kZXI9RixQLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbih6KXtyZXR1cm4gdGhpcy5lbmNvZGVyLndyaXRlKHopfSxQLnByb3RvdHlwZS5l''@;'; put 'put ''bmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbmNvZGVyLmVuZCgpfSxGLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbih6KXtpZighdGhpcy5kZWNvZGVyKXtpZih0aGlzLmluaXRpYWxCeXRlcy5wdXNoKHopLHRoaXMuaW5pdGlhbEJ5dGVzTGVuKz16Lmxlbmd0aCx0aGlzLmluaXRpYWxCeXRl''@;'; put 'put ''c0xlbjwxNilyZXR1cm4iIjt2YXIgTj1PKHo9SS5jb25jYXQodGhpcy5pbml0aWFsQnl0ZXMpLHRoaXMub3B0aW9ucy5kZWZhdWx0RW5jb2RpbmcpO3RoaXMuZGVjb2Rlcj10aGlzLmljb252LmdldERlY29kZXIoTix0aGlzLm9wdGlvbnMpLHRoaXMuaW5pdGlhbEJ5dGVzLmxlbmd0aD10aGlz''@;'; put 'put ''LmluaXRpYWxCeXRlc0xlbj0wfXJldHVybiB0aGlzLmRlY29kZXIud3JpdGUoeil9LEYucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe2lmKCF0aGlzLmRlY29kZXIpe3ZhciB6PUkuY29uY2F0KHRoaXMuaW5pdGlhbEJ5dGVzKSxOPU8oeix0aGlzLm9wdGlvbnMuZGVmYXVsdEVuY29kaW5nKTt0''@;'; put 'put ''aGlzLmRlY29kZXI9dGhpcy5pY29udi5nZXREZWNvZGVyKE4sdGhpcy5vcHRpb25zKTt2YXIgTD10aGlzLmRlY29kZXIud3JpdGUoeiksSz10aGlzLmRlY29kZXIuZW5kKCk7cmV0dXJuIEs/TCtLOkx9cmV0dXJuIHRoaXMuZGVjb2Rlci5lbmQoKX19LDM1MDg5Oih1ZSxYLHkpPT57InVzZSBz''@;'; put 'put ''dHJpY3QiO3ZhciBJPXkoOTM4MDcpLkJ1ZmZlcjtmdW5jdGlvbiBfKHosTil7dGhpcy5pY29udj1OLHRoaXMuYm9tQXdhcmU9ITAsdGhpcy5pc0xFPXouaXNMRX1mdW5jdGlvbiBnKHosTil7dGhpcy5pc0xFPU4uaXNMRSx0aGlzLmhpZ2hTdXJyb2dhdGU9MH1mdW5jdGlvbiBCKHosTil7dGhp''@;'; put 'put ''cy5pc0xFPU4uaXNMRSx0aGlzLmJhZENoYXI9Ti5pY29udi5kZWZhdWx0Q2hhclVuaWNvZGUuY2hhckNvZGVBdCgwKSx0aGlzLm92ZXJmbG93PW51bGx9ZnVuY3Rpb24gdyh6LE4pe3RoaXMuaWNvbnY9Tn1mdW5jdGlvbiBQKHosTil7dm9pZCAwPT09KHo9enx8e30pLmFkZEJPTSYmKHouYWRk''@;'; put 'put ''Qk9NPSEwKSx0aGlzLmVuY29kZXI9Ti5pY29udi5nZXRFbmNvZGVyKHouZGVmYXVsdEVuY29kaW5nfHwidXRmLTMybGUiLHopfWZ1bmN0aW9uIEYoeixOKXt0aGlzLmRlY29kZXI9bnVsbCx0aGlzLmluaXRpYWxCeXRlcz1bXSx0aGlzLmluaXRpYWxCeXRlc0xlbj0wLHRoaXMub3B0aW9ucz16''@;'; put 'put ''fHx7fSx0aGlzLmljb252PU4uaWNvbnZ9ZnVuY3Rpb24gTyh6LE4pe3ZhciBMPU58fCJ1dGYtMzJsZSI7aWYoei5sZW5ndGg+PTQpaWYoNjUyNzk9PT16LnJlYWRVSW50MzJCRSgwKSlMPSJ1dGYtMzJiZSI7ZWxzZSBpZig2NTI3OT09PXoucmVhZFVJbnQzMkxFKDApKUw9InV0Zi0zMmxlIjtl''@;'; put 'put ''bHNle2Zvcih2YXIgSz0wLFU9MCxXPTAsWT0wLHE9TWF0aC5taW4oei5sZW5ndGgtei5sZW5ndGglNCwxMjgpLGVlPTA7ZWU8cTtlZSs9NCl7dmFyIEo9eltlZV0sbmU9eltlZSsxXSxpZT16W2VlKzJdLGxlPXpbZWUrM107KDAhPT1KfHxuZT4xNikmJisrVSwoMCE9PWxlfHxpZT4xNikmJisr''@;'; put 'put ''SywwPT09SiYmMD09PW5lJiYwPT09aWUmJjAhPT1sZSYmWSsrLDAhPT1KJiYwPT09bmUmJjA9PT1pZSYmMD09PWxlJiZXKyt9VTxLP0w9InV0Zi0zMmJlIjpLPFUmJihMPSJ1dGYtMzJsZSIpLFk+Vz9MPSJ1dGYtMzJiZSI6WTxXJiYoTD0idXRmLTMybGUiKX1yZXR1cm4gTH1YLl91dGYzMj1f''@;'; put 'put ''LFgudXRmMzJsZT17dHlwZToiX3V0ZjMyIixpc0xFOiEwfSxYLnV0ZjMyYmU9e3R5cGU6Il91dGYzMiIsaXNMRTohMX0sWC51Y3M0bGU9InV0ZjMybGUiLFgudWNzNGJlPSJ1dGYzMmJlIixfLnByb3RvdHlwZS5lbmNvZGVyPWcsXy5wcm90b3R5cGUuZGVjb2Rlcj1CLGcucHJvdG90eXBlLndy''@;'; put 'put ''aXRlPWZ1bmN0aW9uKHope2Zvcih2YXIgTj1JLmZyb20oeiwidWNzMiIpLEw9SS5hbGxvYygyKk4ubGVuZ3RoKSxLPXRoaXMuaXNMRT9MLndyaXRlVUludDMyTEU6TC53cml0ZVVJbnQzMkJFLFU9MCxXPTA7VzxOLmxlbmd0aDtXKz0yKXt2YXIgWT1OLnJlYWRVSW50MTZMRShXKSxxPTU1Mjk2''@;'; put 'put ''PD1ZJiZZPDU2MzIwO2lmKHRoaXMuaGlnaFN1cnJvZ2F0ZSl7aWYoIXEmJjU2MzIwPD1ZJiZZPDU3MzQ0KXtLLmNhbGwoTCw2NTUzNisodGhpcy5oaWdoU3Vycm9nYXRlLTU1Mjk2PDwxMHxZLTU2MzIwKSxVKSxVKz00LHRoaXMuaGlnaFN1cnJvZ2F0ZT0wO2NvbnRpbnVlfUsuY2FsbChMLHRo''@;'; put 'put ''aXMuaGlnaFN1cnJvZ2F0ZSxVKSxVKz00fXE/dGhpcy5oaWdoU3Vycm9nYXRlPVk6KEsuY2FsbChMLFksVSksVSs9NCx0aGlzLmhpZ2hTdXJyb2dhdGU9MCl9cmV0dXJuIFU8TC5sZW5ndGgmJihMPUwuc2xpY2UoMCxVKSksTH0sZy5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7aWYodGhpcy5o''@;'; put 'put ''aWdoU3Vycm9nYXRlKXt2YXIgej1JLmFsbG9jKDQpO3JldHVybiB0aGlzLmlzTEU/ei53cml0ZVVJbnQzMkxFKHRoaXMuaGlnaFN1cnJvZ2F0ZSwwKTp6LndyaXRlVUludDMyQkUodGhpcy5oaWdoU3Vycm9nYXRlLDApLHRoaXMuaGlnaFN1cnJvZ2F0ZT0wLHp9fSxCLnByb3RvdHlwZS53cml0''@;'; put 'put ''ZT1mdW5jdGlvbih6KXtpZigwPT09ei5sZW5ndGgpcmV0dXJuIiI7dGhpcy5vdmVyZmxvdyYmKHo9SS5jb25jYXQoW3RoaXMub3ZlcmZsb3csel0pKTt2YXIgTj16Lmxlbmd0aC16Lmxlbmd0aCU0O3oubGVuZ3RoIT09Tj8odGhpcy5vdmVyZmxvdz16LnNsaWNlKE4pLHo9ei5zbGljZSgwLE4p''@;'; put 'put ''KTp0aGlzLm92ZXJmbG93PW51bGw7Zm9yKHZhciBMPUkuYWxsb2MoTiksSz0wLFU9MDtVPE47VSs9NCl7dmFyIFc9dGhpcy5pc0xFP3oucmVhZFVJbnQzMkxFKFUpOnoucmVhZFVJbnQzMkJFKFUpO2lmKFc8NjU1MzYpTC53cml0ZVVJbnQxNkxFKFcsSyksSys9MjtlbHNlIGlmKFc+MTExNDEx''@;'; put 'put ''MSlMLndyaXRlVUludDE2TEUodGhpcy5iYWRDaGFyLEspLEsrPTI7ZWxzZXt2YXIgcT01NjMyMCsoMTAyMyYoVy09NjU1MzYpKTtMLndyaXRlVUludDE2TEUoNTUyOTZ8Vz4+MTAsSyksTC53cml0ZVVJbnQxNkxFKHEsSys9MiksSys9Mn19cmV0dXJuIEwuc2xpY2UoMCxLKS50b1N0cmluZygi''@;'; put 'put ''dWNzMiIpfSxCLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXt0aGlzLm92ZXJmbG93PW51bGx9LFgudXRmMzI9dyxYLnVjczQ9dyx3LnByb3RvdHlwZS5lbmNvZGVyPVAsdy5wcm90b3R5cGUuZGVjb2Rlcj1GLFAucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKHope3JldHVybiB0aGlzLmVuY29k''@;'; put 'put ''ZXIud3JpdGUoeil9LFAucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVuY29kZXIuZW5kKCl9LEYucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKHope2lmKCF0aGlzLmRlY29kZXIpe2lmKHRoaXMuaW5pdGlhbEJ5dGVzLnB1c2goeiksdGhpcy5pbml0aWFsQnl0ZXNMZW4r''@;'; put 'put ''PXoubGVuZ3RoLHRoaXMuaW5pdGlhbEJ5dGVzTGVuPDMyKXJldHVybiIiO3ZhciBMPU8oSS5jb25jYXQodGhpcy5pbml0aWFsQnl0ZXMpLHRoaXMub3B0aW9ucy5kZWZhdWx0RW5jb2RpbmcpO3RoaXMuZGVjb2Rlcj10aGlzLmljb252LmdldERlY29kZXIoTCx0aGlzLm9wdGlvbnMpLHRoaXMu''@;'; put 'put ''aW5pdGlhbEJ5dGVzLmxlbmd0aD10aGlzLmluaXRpYWxCeXRlc0xlbj0wfXJldHVybiB0aGlzLmRlY29kZXIud3JpdGUoeil9LEYucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe2lmKCF0aGlzLmRlY29kZXIpe3ZhciB6PUkuY29uY2F0KHRoaXMuaW5pdGlhbEJ5dGVzKSxOPU8oeix0aGlzLm9w''@;'; put 'put ''dGlvbnMuZGVmYXVsdEVuY29kaW5nKTt0aGlzLmRlY29kZXI9dGhpcy5pY29udi5nZXREZWNvZGVyKE4sdGhpcy5vcHRpb25zKTt2YXIgTD10aGlzLmRlY29kZXIud3JpdGUoeiksSz10aGlzLmRlY29kZXIuZW5kKCk7cmV0dXJuIEs/TCtLOkx9cmV0dXJuIHRoaXMuZGVjb2Rlci5lbmQoKX19''@;'; put 'put ''LDk3NDc6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg5MzgwNykuQnVmZmVyO2Z1bmN0aW9uIF8ocSxlZSl7dGhpcy5pY29udj1lZX1YLnV0Zjc9XyxYLnVuaWNvZGUxMXV0Zjc9InV0ZjciLF8ucHJvdG90eXBlLmVuY29kZXI9QixfLnByb3RvdHlwZS5kZWNvZGVyPXcsXy5wcm90''@;'; put 'put ''b3R5cGUuYm9tQXdhcmU9ITA7dmFyIGc9L1teQS1aYS16MC05J1woXCksLVwuXC86XD8gXG5cclx0XSsvZztmdW5jdGlvbiBCKHEsZWUpe3RoaXMuaWNvbnY9ZWUuaWNvbnZ9ZnVuY3Rpb24gdyhxLGVlKXt0aGlzLmljb252PWVlLmljb252LHRoaXMuaW5CYXNlNjQ9ITEsdGhpcy5iYXNlNjRB''@;'; put 'put ''Y2N1bT0iIn1CLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihxKXtyZXR1cm4gSS5mcm9tKHEucmVwbGFjZShnLGZ1bmN0aW9uKGVlKXtyZXR1cm4iKyIrKCIrIj09PWVlPyIiOnRoaXMuaWNvbnYuZW5jb2RlKGVlLCJ1dGYxNi1iZSIpLnRvU3RyaW5nKCJiYXNlNjQiKS5yZXBsYWNlKC89KyQv''@;'; put 'put ''LCIiKSkrIi0ifS5iaW5kKHRoaXMpKSl9LEIucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe307Zm9yKHZhciBQPS9bQS1aYS16MC05XC8rXS8sRj1bXSxPPTA7TzwyNTY7TysrKUZbT109UC50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoTykpO3ZhciBOPTQ1O2Z1bmN0aW9uIEsocSxlZSl7dGhp''@;'; put 'put ''cy5pY29udj1lZX1mdW5jdGlvbiBVKHEsZWUpe3RoaXMuaWNvbnY9ZWUuaWNvbnYsdGhpcy5pbkJhc2U2ND0hMSx0aGlzLmJhc2U2NEFjY3VtPUkuYWxsb2MoNiksdGhpcy5iYXNlNjRBY2N1bUlkeD0wfWZ1bmN0aW9uIFcocSxlZSl7dGhpcy5pY29udj1lZS5pY29udix0aGlzLmluQmFzZTY0''@;'; put 'put ''PSExLHRoaXMuYmFzZTY0QWNjdW09IiJ9dy5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24ocSl7Zm9yKHZhciBlZT0iIixKPTAsbmU9dGhpcy5pbkJhc2U2NCxpZT10aGlzLmJhc2U2NEFjY3VtLGxlPTA7bGU8cS5sZW5ndGg7bGUrKylpZihuZSl7aWYoIUZbcVtsZV1dKXtpZihsZT09SiYmcVts''@;'; put 'put ''ZV09PU4pZWUrPSIrIjtlbHNle3ZhciBtZT1pZStxLnNsaWNlKEosbGUpLnRvU3RyaW5nKCk7ZWUrPXRoaXMuaWNvbnYuZGVjb2RlKEkuZnJvbShtZSwiYmFzZTY0IiksInV0ZjE2LWJlIil9cVtsZV0hPU4mJmxlLS0sSj1sZSsxLG5lPSExLGllPSIifX1lbHNlIDQzPT1xW2xlXSYmKGVlKz10''@;'; put 'put ''aGlzLmljb252LmRlY29kZShxLnNsaWNlKEosbGUpLCJhc2NpaSIpLEo9bGUrMSxuZT0hMCk7aWYobmUpe3ZhciBfZT0obWU9aWUrcS5zbGljZShKKS50b1N0cmluZygpKS5sZW5ndGgtbWUubGVuZ3RoJTg7aWU9bWUuc2xpY2UoX2UpLG1lPW1lLnNsaWNlKDAsX2UpLGVlKz10aGlzLmljb252''@;'; put 'put ''LmRlY29kZShJLmZyb20obWUsImJhc2U2NCIpLCJ1dGYxNi1iZSIpfWVsc2UgZWUrPXRoaXMuaWNvbnYuZGVjb2RlKHEuc2xpY2UoSiksImFzY2lpIik7cmV0dXJuIHRoaXMuaW5CYXNlNjQ9bmUsdGhpcy5iYXNlNjRBY2N1bT1pZSxlZX0sdy5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7dmFy''@;'; put 'put ''IHE9IiI7cmV0dXJuIHRoaXMuaW5CYXNlNjQmJnRoaXMuYmFzZTY0QWNjdW0ubGVuZ3RoPjAmJihxPXRoaXMuaWNvbnYuZGVjb2RlKEkuZnJvbSh0aGlzLmJhc2U2NEFjY3VtLCJiYXNlNjQiKSwidXRmMTYtYmUiKSksdGhpcy5pbkJhc2U2ND0hMSx0aGlzLmJhc2U2NEFjY3VtPSIiLHF9LFgu''@;'; put 'put ''dXRmN2ltYXA9SyxLLnByb3RvdHlwZS5lbmNvZGVyPVUsSy5wcm90b3R5cGUuZGVjb2Rlcj1XLEsucHJvdG90eXBlLmJvbUF3YXJlPSEwLFUucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKHEpe2Zvcih2YXIgZWU9dGhpcy5pbkJhc2U2NCxKPXRoaXMuYmFzZTY0QWNjdW0sbmU9dGhpcy5iYXNl''@;'; put 'put ''NjRBY2N1bUlkeCxpZT1JLmFsbG9jKDUqcS5sZW5ndGgrMTApLGxlPTAsbWU9MDttZTxxLmxlbmd0aDttZSsrKXt2YXIgX2U9cS5jaGFyQ29kZUF0KG1lKTszMjw9X2UmJl9lPD0xMjY/KGVlJiYobmU+MCYmKGxlKz1pZS53cml0ZShKLnNsaWNlKDAsbmUpLnRvU3RyaW5nKCJiYXNlNjQiKS5y''@;'; put 'put ''ZXBsYWNlKC9cLy9nLCIsIikucmVwbGFjZSgvPSskLywiIiksbGUpLG5lPTApLGllW2xlKytdPU4sZWU9ITEpLGVlfHwoaWVbbGUrK109X2UsMzg9PT1fZSYmKGllW2xlKytdPU4pKSk6KGVlfHwoaWVbbGUrK109MzgsZWU9ITApLGVlJiYoSltuZSsrXT1fZT4+OCxKW25lKytdPTI1NSZfZSxu''@;'; put 'put ''ZT09Si5sZW5ndGgmJihsZSs9aWUud3JpdGUoSi50b1N0cmluZygiYmFzZTY0IikucmVwbGFjZSgvXC8vZywiLCIpLGxlKSxuZT0wKSkpfXJldHVybiB0aGlzLmluQmFzZTY0PWVlLHRoaXMuYmFzZTY0QWNjdW1JZHg9bmUsaWUuc2xpY2UoMCxsZSl9LFUucHJvdG90eXBlLmVuZD1mdW5jdGlv''@;'; put 'put ''bigpe3ZhciBxPUkuYWxsb2MoMTApLGVlPTA7cmV0dXJuIHRoaXMuaW5CYXNlNjQmJih0aGlzLmJhc2U2NEFjY3VtSWR4PjAmJihlZSs9cS53cml0ZSh0aGlzLmJhc2U2NEFjY3VtLnNsaWNlKDAsdGhpcy5iYXNlNjRBY2N1bUlkeCkudG9TdHJpbmcoImJhc2U2NCIpLnJlcGxhY2UoL1wvL2cs''@;'; put 'put ''IiwiKS5yZXBsYWNlKC89KyQvLCIiKSxlZSksdGhpcy5iYXNlNjRBY2N1bUlkeD0wKSxxW2VlKytdPU4sdGhpcy5pbkJhc2U2ND0hMSkscS5zbGljZSgwLGVlKX07dmFyIFk9Ri5zbGljZSgpO1lbNDRdPSEwLFcucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKHEpe2Zvcih2YXIgZWU9IiIsSj0w''@;'; put 'put ''LG5lPXRoaXMuaW5CYXNlNjQsaWU9dGhpcy5iYXNlNjRBY2N1bSxsZT0wO2xlPHEubGVuZ3RoO2xlKyspaWYobmUpe2lmKCFZW3FbbGVdXSl7aWYobGU9PUomJnFbbGVdPT1OKWVlKz0iJiI7ZWxzZXt2YXIgbWU9aWUrcS5zbGljZShKLGxlKS50b1N0cmluZygpLnJlcGxhY2UoLywvZywiLyIp''@;'; put 'put ''O2VlKz10aGlzLmljb252LmRlY29kZShJLmZyb20obWUsImJhc2U2NCIpLCJ1dGYxNi1iZSIpfXFbbGVdIT1OJiZsZS0tLEo9bGUrMSxuZT0hMSxpZT0iIn19ZWxzZSAzOD09cVtsZV0mJihlZSs9dGhpcy5pY29udi5kZWNvZGUocS5zbGljZShKLGxlKSwiYXNjaWkiKSxKPWxlKzEsbmU9ITAp''@;'; put 'put ''O2lmKG5lKXt2YXIgX2U9KG1lPWllK3Euc2xpY2UoSikudG9TdHJpbmcoKS5yZXBsYWNlKC8sL2csIi8iKSkubGVuZ3RoLW1lLmxlbmd0aCU4O2llPW1lLnNsaWNlKF9lKSxtZT1tZS5zbGljZSgwLF9lKSxlZSs9dGhpcy5pY29udi5kZWNvZGUoSS5mcm9tKG1lLCJiYXNlNjQiKSwidXRmMTYt''@;'; put 'put ''YmUiKX1lbHNlIGVlKz10aGlzLmljb252LmRlY29kZShxLnNsaWNlKEopLCJhc2NpaSIpO3JldHVybiB0aGlzLmluQmFzZTY0PW5lLHRoaXMuYmFzZTY0QWNjdW09aWUsZWV9LFcucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe3ZhciBxPSIiO3JldHVybiB0aGlzLmluQmFzZTY0JiZ0aGlzLmJh''@;'; put 'put ''c2U2NEFjY3VtLmxlbmd0aD4wJiYocT10aGlzLmljb252LmRlY29kZShJLmZyb20odGhpcy5iYXNlNjRBY2N1bSwiYmFzZTY0IiksInV0ZjE2LWJlIikpLHRoaXMuaW5CYXNlNjQ9ITEsdGhpcy5iYXNlNjRBY2N1bT0iIixxfX0sMjk0MjI6KHVlLFgpPT57InVzZSBzdHJpY3QiO2Z1bmN0aW9u''@;'; put 'put ''IEkoZyxCKXt0aGlzLmVuY29kZXI9Zyx0aGlzLmFkZEJPTT0hMH1mdW5jdGlvbiBfKGcsQil7dGhpcy5kZWNvZGVyPWcsdGhpcy5wYXNzPSExLHRoaXMub3B0aW9ucz1CfHx7fX1YLlByZXBlbmRCT009SSxJLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5hZGRCT00m''@;'; put 'put ''JihnPSJcdWZlZmYiK2csdGhpcy5hZGRCT009ITEpLHRoaXMuZW5jb2Rlci53cml0ZShnKX0sSS5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZW5jb2Rlci5lbmQoKX0sWC5TdHJpcEJPTT1fLF8ucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKGcpe3ZhciBCPXRoaXMuZGVj''@;'; put 'put ''b2Rlci53cml0ZShnKTtyZXR1cm4gdGhpcy5wYXNzfHwhQnx8KCJcdWZlZmYiPT09QlswXSYmKEI9Qi5zbGljZSgxKSwiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5vcHRpb25zLnN0cmlwQk9NJiZ0aGlzLm9wdGlvbnMuc3RyaXBCT00oKSksdGhpcy5wYXNzPSEwKSxCfSxfLnByb3RvdHlwZS5l''@;'; put 'put ''bmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kZWNvZGVyLmVuZCgpfX0sOTQyNDg6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg5MzgwNykuQnVmZmVyLF89eSgyOTQyMiksZz11ZS5leHBvcnRzO2cuZW5jb2RpbmdzPW51bGwsZy5kZWZhdWx0Q2hhclVuaWNvZGU9Ilx1ZmZmZCIs''@;'; put 'put ''Zy5kZWZhdWx0Q2hhclNpbmdsZUJ5dGU9Ij8iLGcuZW5jb2RlPWZ1bmN0aW9uKEYsTyx6KXtGPSIiKyhGfHwiIik7dmFyIE49Zy5nZXRFbmNvZGVyKE8seiksTD1OLndyaXRlKEYpLEs9Ti5lbmQoKTtyZXR1cm4gSyYmSy5sZW5ndGg+MD9JLmNvbmNhdChbTCxLXSk6TH0sZy5kZWNvZGU9ZnVu''@;'; put 'put ''Y3Rpb24oRixPLHopeyJzdHJpbmciPT10eXBlb2YgRiYmKGcuc2tpcERlY29kZVdhcm5pbmd8fChjb25zb2xlLmVycm9yKCJJY29udi1saXRlIHdhcm5pbmc6IGRlY29kZSgpLWluZyBzdHJpbmdzIGlzIGRlcHJlY2F0ZWQuIFJlZmVyIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2h0dWNoa2lu''@;'; put 'put ''L2ljb252LWxpdGUvd2lraS9Vc2UtQnVmZmVycy13aGVuLWRlY29kaW5nIiksZy5za2lwRGVjb2RlV2FybmluZz0hMCksRj1JLmZyb20oIiIrKEZ8fCIiKSwiYmluYXJ5IikpO3ZhciBOPWcuZ2V0RGVjb2RlcihPLHopLEw9Ti53cml0ZShGKSxLPU4uZW5kKCk7cmV0dXJuIEs/TCtLOkx9LGcu''@;'; put 'put ''ZW5jb2RpbmdFeGlzdHM9ZnVuY3Rpb24oRil7dHJ5e3JldHVybiBnLmdldENvZGVjKEYpLCEwfWNhdGNoe3JldHVybiExfX0sZy50b0VuY29kaW5nPWcuZW5jb2RlLGcuZnJvbUVuY29kaW5nPWcuZGVjb2RlLGcuX2NvZGVjRGF0YUNhY2hlPXt9LGcuZ2V0Q29kZWM9ZnVuY3Rpb24oRil7Zy5l''@;'; put 'put ''bmNvZGluZ3N8fChnLmVuY29kaW5ncz15KDcyODkzKSk7Zm9yKHZhciBPPWcuX2Nhbm9uaWNhbGl6ZUVuY29kaW5nKEYpLHo9e307Oyl7dmFyIE49Zy5fY29kZWNEYXRhQ2FjaGVbT107aWYoTilyZXR1cm4gTjt2YXIgTD1nLmVuY29kaW5nc1tPXTtzd2l0Y2godHlwZW9mIEwpe2Nhc2Uic3Ry''@;'; put 'put ''aW5nIjpPPUw7YnJlYWs7Y2FzZSJvYmplY3QiOmZvcih2YXIgSyBpbiBMKXpbS109TFtLXTt6LmVuY29kaW5nTmFtZXx8KHouZW5jb2RpbmdOYW1lPU8pLE89TC50eXBlO2JyZWFrO2Nhc2UiZnVuY3Rpb24iOnJldHVybiB6LmVuY29kaW5nTmFtZXx8KHouZW5jb2RpbmdOYW1lPU8pLE49bmV3''@;'; put 'put ''IEwoeixnKSxnLl9jb2RlY0RhdGFDYWNoZVt6LmVuY29kaW5nTmFtZV09TixOO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJFbmNvZGluZyBub3QgcmVjb2duaXplZDogJyIrRisiJyAoc2VhcmNoZWQgYXM6ICciK08rIicpIil9fX0sZy5fY2Fub25pY2FsaXplRW5jb2Rpbmc9ZnVuY3Rpb24o''@;'; put 'put ''UCl7cmV0dXJuKCIiK1ApLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvOlxkezR9JHxbXjAtOWEtel0vZywiIil9LGcuZ2V0RW5jb2Rlcj1mdW5jdGlvbihGLE8pe3ZhciB6PWcuZ2V0Q29kZWMoRiksTj1uZXcgei5lbmNvZGVyKE8seik7cmV0dXJuIHouYm9tQXdhcmUmJk8mJk8uYWRkQk9NJiYo''@;'; put 'put ''Tj1uZXcgXy5QcmVwZW5kQk9NKE4sTykpLE59LGcuZ2V0RGVjb2Rlcj1mdW5jdGlvbihGLE8pe3ZhciB6PWcuZ2V0Q29kZWMoRiksTj1uZXcgei5kZWNvZGVyKE8seik7cmV0dXJuIHouYm9tQXdhcmUmJiEoTyYmITE9PT1PLnN0cmlwQk9NKSYmKE49bmV3IF8uU3RyaXBCT00oTixPKSksTn07''@;'; put 'put ''dmFyIEI9dHlwZW9mIHByb2Nlc3M8InUiJiZwcm9jZXNzLnZlcnNpb25zJiZwcm9jZXNzLnZlcnNpb25zLm5vZGU7aWYoQil7dmFyIHc9Qi5zcGxpdCgiLiIpLm1hcChOdW1iZXIpOyh3WzBdPjB8fHdbMV0+PTEwKSYmeSg2MTA5MykoZykseSgxNTc5MSkoZyl9fSwyMjAyMDoodWUsWCk9PntY''@;'; put 'put ''LnJlYWQ9ZnVuY3Rpb24oeSxJLF8sZyxCKXt2YXIgdyxQLEY9OCpCLWctMSxPPSgxPDxGKS0xLHo9Tz4+MSxOPS03LEw9Xz9CLTE6MCxLPV8/LTE6MSxVPXlbSStMXTtmb3IoTCs9Syx3PVUmKDE8PC1OKS0xLFU+Pj0tTixOKz1GO04+MDt3PTI1Nip3K3lbSStMXSxMKz1LLE4tPTgpO2ZvcihQ''@;'; put 'put ''PXcmKDE8PC1OKS0xLHc+Pj0tTixOKz1nO04+MDtQPTI1NipQK3lbSStMXSxMKz1LLE4tPTgpO2lmKDA9PT13KXc9MS16O2Vsc2V7aWYodz09PU8pcmV0dXJuIFA/TmFOOjEvMCooVT8tMToxKTtQKz1NYXRoLnBvdygyLGcpLHctPXp9cmV0dXJuKFU/LTE6MSkqUCpNYXRoLnBvdygyLHctZyl9''@;'; put 'put ''LFgud3JpdGU9ZnVuY3Rpb24oeSxJLF8sZyxCLHcpe3ZhciBQLEYsTyx6PTgqdy1CLTEsTj0oMTw8eiktMSxMPU4+PjEsSz0yMz09PUI/TWF0aC5wb3coMiwtMjQpLU1hdGgucG93KDIsLTc3KTowLFU9Zz8wOnctMSxXPWc/MTotMSxZPUk8MHx8MD09PUkmJjEvSTwwPzE6MDtmb3IoST1NYXRo''@;'; put 'put ''LmFicyhJKSxpc05hTihJKXx8ST09PTEvMD8oRj1pc05hTihJKT8xOjAsUD1OKTooUD1NYXRoLmZsb29yKE1hdGgubG9nKEkpL01hdGguTE4yKSxJKihPPU1hdGgucG93KDIsLVApKTwxJiYoUC0tLE8qPTIpLChJKz1QK0w+PTE/Sy9POksqTWF0aC5wb3coMiwxLUwpKSpPPj0yJiYoUCsrLE8v''@;'; put 'put ''PTIpLFArTD49Tj8oRj0wLFA9Tik6UCtMPj0xPyhGPShJKk8tMSkqTWF0aC5wb3coMixCKSxQKz1MKTooRj1JKk1hdGgucG93KDIsTC0xKSpNYXRoLnBvdygyLEIpLFA9MCkpO0I+PTg7eVtfK1VdPTI1NSZGLFUrPVcsRi89MjU2LEItPTgpO2ZvcihQPVA8PEJ8Rix6Kz1CO3o+MDt5W18rVV09''@;'; put 'put ''MjU1JlAsVSs9VyxQLz0yNTYsei09OCk7eVtfK1UtV118PTEyOCpZfX0sNzE5OTM6dWU9Pnt1ZS5leHBvcnRzPSJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKHksSSl7SSYmKHkuc3VwZXJfPUkseS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShJLnByb3RvdHlwZSx7''@;'; put 'put ''Y29uc3RydWN0b3I6e3ZhbHVlOnksZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSkpfTpmdW5jdGlvbih5LEkpe2lmKEkpe3kuc3VwZXJfPUk7dmFyIF89ZnVuY3Rpb24oKXt9O18ucHJvdG90eXBlPUkucHJvdG90eXBlLHkucHJvdG90eXBlPW5ldyBfLHkucHJv''@;'; put 'put ''dG90eXBlLmNvbnN0cnVjdG9yPXl9fX0sMjAwNTM6dWU9Pnt2YXIgWD17fS50b1N0cmluZzt1ZS5leHBvcnRzPUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKHkpe3JldHVybiJbb2JqZWN0IEFycmF5XSI9PVguY2FsbCh5KX19LDM0NzI1Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXko''@;'; put 'put ''NzE5OTMpLF89eSgxMzY4NiksZz15KDI3MDU0KS5CdWZmZXIsQj1uZXcgQXJyYXkoMTYpO2Z1bmN0aW9uIHcoKXtfLmNhbGwodGhpcyw2NCksdGhpcy5fYT0xNzMyNTg0MTkzLHRoaXMuX2I9NDAyMzIzMzQxNyx0aGlzLl9jPTI1NjIzODMxMDIsdGhpcy5fZD0yNzE3MzM4Nzh9ZnVuY3Rpb24g''@;'; put 'put ''UChMLEspe3JldHVybiBMPDxLfEw+Pj4zMi1LfWZ1bmN0aW9uIEYoTCxLLFUsVyxZLHEsZWUpe3JldHVybiBQKEwrKEsmVXx+SyZXKStZK3F8MCxlZSkrS3wwfWZ1bmN0aW9uIE8oTCxLLFUsVyxZLHEsZWUpe3JldHVybiBQKEwrKEsmV3xVJn5XKStZK3F8MCxlZSkrS3wwfWZ1bmN0aW9uIHoo''@;'; put 'put ''TCxLLFUsVyxZLHEsZWUpe3JldHVybiBQKEwrKEteVV5XKStZK3F8MCxlZSkrS3wwfWZ1bmN0aW9uIE4oTCxLLFUsVyxZLHEsZWUpe3JldHVybiBQKEwrKFVeKEt8flcpKStZK3F8MCxlZSkrS3wwfUkodyxfKSx3LnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKCl7Zm9yKHZhciBMPUIsSz0w''@;'; put 'put ''O0s8MTY7KytLKUxbS109dGhpcy5fYmxvY2sucmVhZEludDMyTEUoNCpLKTt2YXIgVT10aGlzLl9hLFc9dGhpcy5fYixZPXRoaXMuX2MscT10aGlzLl9kO1U9RihVLFcsWSxxLExbMF0sMzYxNDA5MDM2MCw3KSxxPUYocSxVLFcsWSxMWzFdLDM5MDU0MDI3MTAsMTIpLFk9RihZLHEsVSxXLExb''@;'; put 'put ''Ml0sNjA2MTA1ODE5LDE3KSxXPUYoVyxZLHEsVSxMWzNdLDMyNTA0NDE5NjYsMjIpLFU9RihVLFcsWSxxLExbNF0sNDExODU0ODM5OSw3KSxxPUYocSxVLFcsWSxMWzVdLDEyMDAwODA0MjYsMTIpLFk9RihZLHEsVSxXLExbNl0sMjgyMTczNTk1NSwxNyksVz1GKFcsWSxxLFUsTFs3XSw0MjQ5''@;'; put 'put ''MjYxMzEzLDIyKSxVPUYoVSxXLFkscSxMWzhdLDE3NzAwMzU0MTYsNykscT1GKHEsVSxXLFksTFs5XSwyMzM2NTUyODc5LDEyKSxZPUYoWSxxLFUsVyxMWzEwXSw0Mjk0OTI1MjMzLDE3KSxXPUYoVyxZLHEsVSxMWzExXSwyMzA0NTYzMTM0LDIyKSxVPUYoVSxXLFkscSxMWzEyXSwxODA0NjAz''@;'; put 'put ''NjgyLDcpLHE9RihxLFUsVyxZLExbMTNdLDQyNTQ2MjYxOTUsMTIpLFk9RihZLHEsVSxXLExbMTRdLDI3OTI5NjUwMDYsMTcpLFU9TyhVLFc9RihXLFkscSxVLExbMTVdLDEyMzY1MzUzMjksMjIpLFkscSxMWzFdLDQxMjkxNzA3ODYsNSkscT1PKHEsVSxXLFksTFs2XSwzMjI1NDY1NjY0LDkp''@;'; put 'put ''LFk9TyhZLHEsVSxXLExbMTFdLDY0MzcxNzcxMywxNCksVz1PKFcsWSxxLFUsTFswXSwzOTIxMDY5OTk0LDIwKSxVPU8oVSxXLFkscSxMWzVdLDM1OTM0MDg2MDUsNSkscT1PKHEsVSxXLFksTFsxMF0sMzgwMTYwODMsOSksWT1PKFkscSxVLFcsTFsxNV0sMzYzNDQ4ODk2MSwxNCksVz1PKFcs''@;'; put 'put ''WSxxLFUsTFs0XSwzODg5NDI5NDQ4LDIwKSxVPU8oVSxXLFkscSxMWzldLDU2ODQ0NjQzOCw1KSxxPU8ocSxVLFcsWSxMWzE0XSwzMjc1MTYzNjA2LDkpLFk9TyhZLHEsVSxXLExbM10sNDEwNzYwMzMzNSwxNCksVz1PKFcsWSxxLFUsTFs4XSwxMTYzNTMxNTAxLDIwKSxVPU8oVSxXLFkscSxM''@;'; put 'put ''WzEzXSwyODUwMjg1ODI5LDUpLHE9TyhxLFUsVyxZLExbMl0sNDI0MzU2MzUxMiw5KSxZPU8oWSxxLFUsVyxMWzddLDE3MzUzMjg0NzMsMTQpLFU9eihVLFc9TyhXLFkscSxVLExbMTJdLDIzNjgzNTk1NjIsMjApLFkscSxMWzVdLDQyOTQ1ODg3MzgsNCkscT16KHEsVSxXLFksTFs4XSwyMjcy''@;'; put 'put ''MzkyODMzLDExKSxZPXooWSxxLFUsVyxMWzExXSwxODM5MDMwNTYyLDE2KSxXPXooVyxZLHEsVSxMWzE0XSw0MjU5NjU3NzQwLDIzKSxVPXooVSxXLFkscSxMWzFdLDI3NjM5NzUyMzYsNCkscT16KHEsVSxXLFksTFs0XSwxMjcyODkzMzUzLDExKSxZPXooWSxxLFUsVyxMWzddLDQxMzk0Njk2''@;'; put 'put ''NjQsMTYpLFc9eihXLFkscSxVLExbMTBdLDMyMDAyMzY2NTYsMjMpLFU9eihVLFcsWSxxLExbMTNdLDY4MTI3OTE3NCw0KSxxPXoocSxVLFcsWSxMWzBdLDM5MzY0MzAwNzQsMTEpLFk9eihZLHEsVSxXLExbM10sMzU3MjQ0NTMxNywxNiksVz16KFcsWSxxLFUsTFs2XSw3NjAyOTE4OSwyMyks''@;'; put 'put ''VT16KFUsVyxZLHEsTFs5XSwzNjU0NjAyODA5LDQpLHE9eihxLFUsVyxZLExbMTJdLDM4NzMxNTE0NjEsMTEpLFk9eihZLHEsVSxXLExbMTVdLDUzMDc0MjUyMCwxNiksVT1OKFUsVz16KFcsWSxxLFUsTFsyXSwzMjk5NjI4NjQ1LDIzKSxZLHEsTFswXSw0MDk2MzM2NDUyLDYpLHE9TihxLFUs''@;'; put 'put ''VyxZLExbN10sMTEyNjg5MTQxNSwxMCksWT1OKFkscSxVLFcsTFsxNF0sMjg3ODYxMjM5MSwxNSksVz1OKFcsWSxxLFUsTFs1XSw0MjM3NTMzMjQxLDIxKSxVPU4oVSxXLFkscSxMWzEyXSwxNzAwNDg1NTcxLDYpLHE9TihxLFUsVyxZLExbM10sMjM5OTk4MDY5MCwxMCksWT1OKFkscSxVLFcs''@;'; put 'put ''TFsxMF0sNDI5MzkxNTc3MywxNSksVz1OKFcsWSxxLFUsTFsxXSwyMjQwMDQ0NDk3LDIxKSxVPU4oVSxXLFkscSxMWzhdLDE4NzMzMTMzNTksNikscT1OKHEsVSxXLFksTFsxNV0sNDI2NDM1NTU1MiwxMCksWT1OKFkscSxVLFcsTFs2XSwyNzM0NzY4OTE2LDE1KSxXPU4oVyxZLHEsVSxMWzEz''@;'; put 'put ''XSwxMzA5MTUxNjQ5LDIxKSxVPU4oVSxXLFkscSxMWzRdLDQxNDk0NDQyMjYsNikscT1OKHEsVSxXLFksTFsxMV0sMzE3NDc1NjkxNywxMCksWT1OKFkscSxVLFcsTFsyXSw3MTg3ODcyNTksMTUpLFc9TihXLFkscSxVLExbOV0sMzk1MTQ4MTc0NSwyMSksdGhpcy5fYT10aGlzLl9hK1V8MCx0''@;'; put 'put ''aGlzLl9iPXRoaXMuX2IrV3wwLHRoaXMuX2M9dGhpcy5fYytZfDAsdGhpcy5fZD10aGlzLl9kK3F8MH0sdy5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbigpe3RoaXMuX2Jsb2NrW3RoaXMuX2Jsb2NrT2Zmc2V0KytdPTEyOCx0aGlzLl9ibG9ja09mZnNldD41NiYmKHRoaXMuX2Jsb2NrLmZp''@;'; put 'put ''bGwoMCx0aGlzLl9ibG9ja09mZnNldCw2NCksdGhpcy5fdXBkYXRlKCksdGhpcy5fYmxvY2tPZmZzZXQ9MCksdGhpcy5fYmxvY2suZmlsbCgwLHRoaXMuX2Jsb2NrT2Zmc2V0LDU2KSx0aGlzLl9ibG9jay53cml0ZVVJbnQzMkxFKHRoaXMuX2xlbmd0aFswXSw1NiksdGhpcy5fYmxvY2sud3Jp''@;'; put 'put ''dGVVSW50MzJMRSh0aGlzLl9sZW5ndGhbMV0sNjApLHRoaXMuX3VwZGF0ZSgpO3ZhciBMPWcuYWxsb2NVbnNhZmUoMTYpO3JldHVybiBMLndyaXRlSW50MzJMRSh0aGlzLl9hLDApLEwud3JpdGVJbnQzMkxFKHRoaXMuX2IsNCksTC53cml0ZUludDMyTEUodGhpcy5fYyw4KSxMLndyaXRlSW50''@;'; put 'put ''MzJMRSh0aGlzLl9kLDEyKSxMfSx1ZS5leHBvcnRzPXd9LDUzNDU5Oih1ZSxYLHkpPT57dmFyIEk9eSg1NzIyMyksXz15KDM1Mjk0KTtmdW5jdGlvbiBnKEIpe3RoaXMucmFuZD1CfHxuZXcgXy5SYW5kfXVlLmV4cG9ydHM9ZyxnLmNyZWF0ZT1mdW5jdGlvbih3KXtyZXR1cm4gbmV3IGcodyl9''@;'; put 'put ''LGcucHJvdG90eXBlLl9yYW5kYmVsb3c9ZnVuY3Rpb24odyl7dmFyIFA9dy5iaXRMZW5ndGgoKSxGPU1hdGguY2VpbChQLzgpO2Rve3ZhciBPPW5ldyBJKHRoaXMucmFuZC5nZW5lcmF0ZShGKSl9d2hpbGUoTy5jbXAodyk+PTApO3JldHVybiBPfSxnLnByb3RvdHlwZS5fcmFuZHJhbmdlPWZ1''@;'; put 'put ''bmN0aW9uKHcsUCl7dmFyIEY9UC5zdWIodyk7cmV0dXJuIHcuYWRkKHRoaXMuX3JhbmRiZWxvdyhGKSl9LGcucHJvdG90eXBlLnRlc3Q9ZnVuY3Rpb24odyxQLEYpe3ZhciBPPXcuYml0TGVuZ3RoKCksej1JLm1vbnQodyksTj1uZXcgSSgxKS50b1JlZCh6KTtQfHwoUD1NYXRoLm1heCgxLE8v''@;'; put 'put ''NDh8MCkpO2Zvcih2YXIgTD13LnN1Ym4oMSksSz0wOyFMLnRlc3RuKEspO0srKyk7Zm9yKHZhciBVPXcuc2hybihLKSxXPUwudG9SZWQoeik7UD4wO1AtLSl7dmFyIHE9dGhpcy5fcmFuZHJhbmdlKG5ldyBJKDIpLEwpO0YmJkYocSk7dmFyIGVlPXEudG9SZWQoeikucmVkUG93KFUpO2lmKDAh''@;'; put 'put ''PT1lZS5jbXAoTikmJjAhPT1lZS5jbXAoVykpe2Zvcih2YXIgSj0xO0o8SztKKyspe2lmKDA9PT0oZWU9ZWUucmVkU3FyKCkpLmNtcChOKSlyZXR1cm4hMTtpZigwPT09ZWUuY21wKFcpKWJyZWFrfWlmKEo9PT1LKXJldHVybiExfX1yZXR1cm4hMH0sZy5wcm90b3R5cGUuZ2V0RGl2aXNvcj1m''@;'; put 'put ''dW5jdGlvbih3LFApe3ZhciBGPXcuYml0TGVuZ3RoKCksTz1JLm1vbnQodyksej1uZXcgSSgxKS50b1JlZChPKTtQfHwoUD1NYXRoLm1heCgxLEYvNDh8MCkpO2Zvcih2YXIgTj13LnN1Ym4oMSksTD0wOyFOLnRlc3RuKEwpO0wrKyk7Zm9yKHZhciBLPXcuc2hybihMKSxVPU4udG9SZWQoTyk7''@;'; put 'put ''UD4wO1AtLSl7dmFyIFc9dGhpcy5fcmFuZHJhbmdlKG5ldyBJKDIpLE4pLFk9dy5nY2QoVyk7aWYoMCE9PVkuY21wbigxKSlyZXR1cm4gWTt2YXIgcT1XLnRvUmVkKE8pLnJlZFBvdyhLKTtpZigwIT09cS5jbXAoeikmJjAhPT1xLmNtcChVKSl7Zm9yKHZhciBlZT0xO2VlPEw7ZWUrKyl7aWYo''@;'; put 'put ''MD09PShxPXEucmVkU3FyKCkpLmNtcCh6KSlyZXR1cm4gcS5mcm9tUmVkKCkuc3VibigxKS5nY2Qodyk7aWYoMD09PXEuY21wKFUpKWJyZWFrfWlmKGVlPT09TClyZXR1cm4ocT1xLnJlZFNxcigpKS5mcm9tUmVkKCkuc3VibigxKS5nY2Qodyl9fXJldHVybiExfX0sNTcyMjM6ZnVuY3Rpb24o''@;'; put 'put ''dWUsWCx5KXshZnVuY3Rpb24oSSxfKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZyhWLHApe2lmKCFWKXRocm93IG5ldyBFcnJvcihwfHwiQXNzZXJ0aW9uIGZhaWxlZCIpfWZ1bmN0aW9uIEIoVixwKXtWLnN1cGVyXz1wO3ZhciBiPWZ1bmN0aW9uKCl7fTtiLnByb3RvdHlwZT1wLnByb3RvdHlw''@;'; put 'put ''ZSxWLnByb3RvdHlwZT1uZXcgYixWLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1WfWZ1bmN0aW9uIHcoVixwLGIpe2lmKHcuaXNCTihWKSlyZXR1cm4gVjt0aGlzLm5lZ2F0aXZlPTAsdGhpcy53b3Jkcz1udWxsLHRoaXMubGVuZ3RoPTAsdGhpcy5yZWQ9bnVsbCxudWxsIT09ViYmKCgibGUiPT09''@;'; put 'put ''cHx8ImJlIj09PXApJiYoYj1wLHA9MTApLHRoaXMuX2luaXQoVnx8MCxwfHwxMCxifHwiYmUiKSl9dmFyIFA7Im9iamVjdCI9PXR5cGVvZiBJP0kuZXhwb3J0cz13Ol8uQk49dyx3LkJOPXcsdy53b3JkU2l6ZT0yNjt0cnl7UD10eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIHdpbmRvdy5CdWZm''@;'; put 'put ''ZXI8InUiP3dpbmRvdy5CdWZmZXI6eSg2NDY4OCkuQnVmZmVyfWNhdGNoe31mdW5jdGlvbiBGKFYscCl7dmFyIGI9Vi5jaGFyQ29kZUF0KHApO3JldHVybiBiPj02NSYmYjw9NzA/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+PjI2LHRoaXMud29yZHNbeF09NjcxMDg4NjMmVH1yZXR1cm4gMCE9PWImJih0aGlzLndvcmRzW3hdPWIsdGhpcy5sZW5ndGgrKyksdGhpcy5sZW5ndGg9MD09PXA/MTp0aGlzLmxlbmd0aCx0aGlzfSx3''@;'; put 'put ''LnByb3RvdHlwZS5tdWxuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaW11bG4ocCl9LHcucHJvdG90eXBlLnNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm11bCh0aGlzKX0sdy5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmltdWwodGhpcy5jbG9uZSgp''@;'; put 'put ''KX0sdy5wcm90b3R5cGUucG93PWZ1bmN0aW9uKHApe3ZhciBiPWZ1bmN0aW9uIFUoVil7Zm9yKHZhciBwPW5ldyBBcnJheShWLmJpdExlbmd0aCgpKSxiPTA7YjxwLmxlbmd0aDtiKyspe3ZhciBDPWIlMjY7cFtiXT0oVi53b3Jkc1tiLzI2fDBdJjE8PEMpPj4+Q31yZXR1cm4gcH0ocCk7aWYo''@;'; put 'put ''MD09PWIubGVuZ3RoKXJldHVybiBuZXcgdygxKTtmb3IodmFyIHg9dGhpcyxDPTA7QzxiLmxlbmd0aCYmMD09PWJbQ107QysrLHg9eC5zcXIoKSk7aWYoKytDPGIubGVuZ3RoKWZvcih2YXIgVD14LnNxcigpO0M8Yi5sZW5ndGg7QysrLFQ9VC5zcXIoKSkwIT09YltDXSYmKHg9eC5tdWwoVCkp''@;'; put 'put ''O3JldHVybiB4fSx3LnByb3RvdHlwZS5pdXNobG49ZnVuY3Rpb24ocCl7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApO3ZhciBULGI9cCUyNix4PShwLWIpLzI2LEM9NjcxMDg4NjM+Pj4yNi1iPDwyNi1iO2lmKDAhPT1iKXt2YXIgSD0wO2ZvcihUPTA7VDx0aGlzLmxlbmd0aDtUKyspe3Zh''@;'; put 'put ''ciBqPXRoaXMud29yZHNbVF0mQzt0aGlzLndvcmRzW1RdPSgwfHRoaXMud29yZHNbVF0pLWo8PGJ8SCxIPWo+Pj4yNi1ifUgmJih0aGlzLndvcmRzW1RdPUgsdGhpcy5sZW5ndGgrKyl9aWYoMCE9PXgpe2ZvcihUPXRoaXMubGVuZ3RoLTE7VD49MDtULS0pdGhpcy53b3Jkc1tUK3hdPXRoaXMu''@;'; put 'put ''d29yZHNbVF07Zm9yKFQ9MDtUPHg7VCsrKXRoaXMud29yZHNbVF09MDt0aGlzLmxlbmd0aCs9eH1yZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pc2hsbj1mdW5jdGlvbihwKXtyZXR1cm4gZygwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNobG4ocCl9LHcucHJvdG90eXBlLml1''@;'; put 'put ''c2hybj1mdW5jdGlvbihwLGIseCl7dmFyIEM7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApLEM9Yj8oYi1iJTI2KS8yNjowO3ZhciBUPXAlMjYsSD1NYXRoLm1pbigocC1UKS8yNix0aGlzLmxlbmd0aCksaj02NzEwODg2M142NzEwODg2Mz4+PlQ8PFQsRT14O2lmKEMtPUgsQz1NYXRoLm1h''@;'; put 'put ''eCgwLEMpLEUpe2Zvcih2YXIgbT0wO208SDttKyspRS53b3Jkc1ttXT10aGlzLndvcmRzW21dO0UubGVuZ3RoPUh9aWYoMCE9PUgpaWYodGhpcy5sZW5ndGg+SClmb3IodGhpcy5sZW5ndGgtPUgsbT0wO208dGhpcy5sZW5ndGg7bSsrKXRoaXMud29yZHNbbV09dGhpcy53b3Jkc1ttK0hdO2Vs''@;'; put 'put ''c2UgdGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTE7dmFyIEE9MDtmb3IobT10aGlzLmxlbmd0aC0xO20+PTAmJigwIT09QXx8bT49Qyk7bS0tKXt2YXIgYWU9MHx0aGlzLndvcmRzW21dO3RoaXMud29yZHNbbV09QTw8MjYtVHxhZT4+PlQsQT1hZSZqfXJldHVybiBFJiYwIT09QSYmKEUu''@;'; put 'put ''d29yZHNbRS5sZW5ndGgrK109QSksMD09PXRoaXMubGVuZ3RoJiYodGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTEpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXNocm49ZnVuY3Rpb24ocCxiLHgpe3JldHVybiBnKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hybihwLGIseCl9''@;'; put 'put ''LHcucHJvdG90eXBlLnNobG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbihwKX0sdy5wcm90b3R5cGUudXNobG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNobG4ocCl9LHcucHJvdG90eXBlLnNocm49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xv''@;'; put 'put ''bmUoKS5pc2hybihwKX0sdy5wcm90b3R5cGUudXNocm49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNocm4ocCl9LHcucHJvdG90eXBlLnRlc3RuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKTt2YXIgYj1wJTI2LHg9KHAtYikvMjY7cmV0dXJuISh0''@;'; put 'put ''aGlzLmxlbmd0aDw9eHx8ISh0aGlzLndvcmRzW3hdJjE8PGIpKX0sdy5wcm90b3R5cGUuaW1hc2tuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKTt2YXIgYj1wJTI2LHg9KHAtYikvMjY7cmV0dXJuIGcoMD09PXRoaXMubmVnYXRpdmUsImltYXNrbiB3b3JrcyBvbmx5''@;'; put 'put ''IHdpdGggcG9zaXRpdmUgbnVtYmVycyIpLHRoaXMubGVuZ3RoPD14P3RoaXM6KDAhPT1iJiZ4KyssdGhpcy5sZW5ndGg9TWF0aC5taW4oeCx0aGlzLmxlbmd0aCksMCE9PWImJih0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdJj02NzEwODg2M142NzEwODg2Mz4+PmI8PGIpLHRoaXMuc3RyaXAo''@;'; put 'put ''KSl9LHcucHJvdG90eXBlLm1hc2tuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaW1hc2tuKHApfSx3LnByb3RvdHlwZS5pYWRkbj1mdW5jdGlvbihwKXtyZXR1cm4gZygibnVtYmVyIj09dHlwZW9mIHApLGcocDw2NzEwODg2NCkscDwwP3RoaXMuaXN1Ym4oLXApOjAhPT10aGlz''@;'; put 'put ''Lm5lZ2F0aXZlPzE9PT10aGlzLmxlbmd0aCYmKDB8dGhpcy53b3Jkc1swXSk8cD8odGhpcy53b3Jkc1swXT1wLSgwfHRoaXMud29yZHNbMF0pLHRoaXMubmVnYXRpdmU9MCx0aGlzKToodGhpcy5uZWdhdGl2ZT0wLHRoaXMuaXN1Ym4ocCksdGhpcy5uZWdhdGl2ZT0xLHRoaXMpOnRoaXMuX2lh''@;'; put 'put ''ZGRuKHApfSx3LnByb3RvdHlwZS5faWFkZG49ZnVuY3Rpb24ocCl7dGhpcy53b3Jkc1swXSs9cDtmb3IodmFyIGI9MDtiPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW2JdPj02NzEwODg2NDtiKyspdGhpcy53b3Jkc1tiXS09NjcxMDg4NjQsYj09PXRoaXMubGVuZ3RoLTE/dGhpcy53b3Jkc1ti''@;'; put 'put ''KzFdPTE6dGhpcy53b3Jkc1tiKzFdKys7cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLGIrMSksdGhpc30sdy5wcm90b3R5cGUuaXN1Ym49ZnVuY3Rpb24ocCl7aWYoZygibnVtYmVyIj09dHlwZW9mIHApLGcocDw2NzEwODg2NCkscDwwKXJldHVybiB0aGlzLmlhZGRu''@;'; put 'put ''KC1wKTtpZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZG4ocCksdGhpcy5uZWdhdGl2ZT0xLHRoaXM7aWYodGhpcy53b3Jkc1swXS09cCwxPT09dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbMF08MCl0aGlzLndvcmRzWzBdPS10aGlzLndvcmRzWzBd''@;'; put 'put ''LHRoaXMubmVnYXRpdmU9MTtlbHNlIGZvcih2YXIgYj0wO2I8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbYl08MDtiKyspdGhpcy53b3Jkc1tiXSs9NjcxMDg4NjQsdGhpcy53b3Jkc1tiKzFdLT0xO3JldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmFkZG49ZnVuY3Rpb24ocCl7cmV0''@;'; put 'put ''dXJuIHRoaXMuY2xvbmUoKS5pYWRkbihwKX0sdy5wcm90b3R5cGUuc3Vibj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWJuKHApfSx3LnByb3RvdHlwZS5pYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzfSx3LnByb3RvdHlwZS5hYnM9ZnVuY3Rp''@;'; put 'put ''b24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhYnMoKX0sdy5wcm90b3R5cGUuX2lzaGxuc3VibXVsPWZ1bmN0aW9uKHAsYix4KXt2YXIgVDt0aGlzLl9leHBhbmQocC5sZW5ndGgreCk7dmFyIEgsaj0wO2ZvcihUPTA7VDxwLmxlbmd0aDtUKyspe0g9KDB8dGhpcy53b3Jkc1tUK3hdKStqO3Zh''@;'; put 'put ''ciBFPSgwfHAud29yZHNbVF0pKmI7aj0oKEgtPTY3MTA4ODYzJkUpPj4yNiktKEUvNjcxMDg4NjR8MCksdGhpcy53b3Jkc1tUK3hdPTY3MTA4ODYzJkh9Zm9yKDtUPHRoaXMubGVuZ3RoLXg7VCsrKWo9KEg9KDB8dGhpcy53b3Jkc1tUK3hdKStqKT4+MjYsdGhpcy53b3Jkc1tUK3hdPTY3MTA4''@;'; put 'put ''ODYzJkg7aWYoMD09PWopcmV0dXJuIHRoaXMuc3RyaXAoKTtmb3IoZygtMT09PWopLGo9MCxUPTA7VDx0aGlzLmxlbmd0aDtUKyspaj0oSD0tKDB8dGhpcy53b3Jkc1tUXSkraik+PjI2LHRoaXMud29yZHNbVF09NjcxMDg4NjMmSDtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0xLHRoaXMuc3RyaXAo''@;'; put 'put ''KX0sdy5wcm90b3R5cGUuX3dvcmREaXY9ZnVuY3Rpb24ocCxiKXt2YXIgeCxDPXRoaXMuY2xvbmUoKSxUPXAsSD0wfFQud29yZHNbVC5sZW5ndGgtMV07MCE9KHg9MjYtdGhpcy5fY291bnRCaXRzKEgpKSYmKFQ9VC51c2hsbih4KSxDLml1c2hsbih4KSxIPTB8VC53b3Jkc1tULmxlbmd0aC0x''@;'; put 'put ''XSk7dmFyIG0sRT1DLmxlbmd0aC1ULmxlbmd0aDtpZigibW9kIiE9PWIpeyhtPW5ldyB3KG51bGwpKS5sZW5ndGg9RSsxLG0ud29yZHM9bmV3IEFycmF5KG0ubGVuZ3RoKTtmb3IodmFyIEE9MDtBPG0ubGVuZ3RoO0ErKyltLndvcmRzW0FdPTB9dmFyIGFlPUMuY2xvbmUoKS5faXNobG5zdWJt''@;'; put 'put ''dWwoVCwxLEUpOzA9PT1hZS5uZWdhdGl2ZSYmKEM9YWUsbSYmKG0ud29yZHNbRV09MSkpO2Zvcih2YXIgdGU9RS0xO3RlPj0wO3RlLS0pe3ZhciBzZT02NzEwODg2NCooMHxDLndvcmRzW1QubGVuZ3RoK3RlXSkrKDB8Qy53b3Jkc1tULmxlbmd0aCt0ZS0xXSk7Zm9yKHNlPU1hdGgubWluKHNl''@;'; put 'put ''L0h8MCw2NzEwODg2MyksQy5faXNobG5zdWJtdWwoVCxzZSx0ZSk7MCE9PUMubmVnYXRpdmU7KXNlLS0sQy5uZWdhdGl2ZT0wLEMuX2lzaGxuc3VibXVsKFQsMSx0ZSksQy5pc1plcm8oKXx8KEMubmVnYXRpdmVePTEpO20mJihtLndvcmRzW3RlXT1zZSl9cmV0dXJuIG0mJm0uc3RyaXAoKSxD''@;'; put 'put ''LnN0cmlwKCksImRpdiIhPT1iJiYwIT09eCYmQy5pdXNocm4oeCkse2RpdjptfHxudWxsLG1vZDpDfX0sdy5wcm90b3R5cGUuZGl2bW9kPWZ1bmN0aW9uKHAsYix4KXtyZXR1cm4gZyghcC5pc1plcm8oKSksdGhpcy5pc1plcm8oKT97ZGl2Om5ldyB3KDApLG1vZDpuZXcgdygwKX06MCE9PXRo''@;'; put 'put ''aXMubmVnYXRpdmUmJjA9PT1wLm5lZ2F0aXZlPyhIPXRoaXMubmVnKCkuZGl2bW9kKHAsYiksIm1vZCIhPT1iJiYoQz1ILmRpdi5uZWcoKSksImRpdiIhPT1iJiYoVD1ILm1vZC5uZWcoKSx4JiYwIT09VC5uZWdhdGl2ZSYmVC5pYWRkKHApKSx7ZGl2OkMsbW9kOlR9KTowPT09dGhpcy5uZWdh''@;'; put 'put ''dGl2ZSYmMCE9PXAubmVnYXRpdmU/KEg9dGhpcy5kaXZtb2QocC5uZWcoKSxiKSwibW9kIiE9PWImJihDPUguZGl2Lm5lZygpKSx7ZGl2OkMsbW9kOkgubW9kfSk6dGhpcy5uZWdhdGl2ZSZwLm5lZ2F0aXZlPyhIPXRoaXMubmVnKCkuZGl2bW9kKHAubmVnKCksYiksImRpdiIhPT1iJiYoVD1I''@;'; put 'put ''Lm1vZC5uZWcoKSx4JiYwIT09VC5uZWdhdGl2ZSYmVC5pc3ViKHApKSx7ZGl2OkguZGl2LG1vZDpUfSk6cC5sZW5ndGg+dGhpcy5sZW5ndGh8fHRoaXMuY21wKHApPDA/e2RpdjpuZXcgdygwKSxtb2Q6dGhpc306MT09PXAubGVuZ3RoPyJkaXYiPT09Yj97ZGl2OnRoaXMuZGl2bihwLndvcmRz''@;'; put 'put ''WzBdKSxtb2Q6bnVsbH06Im1vZCI9PT1iP3tkaXY6bnVsbCxtb2Q6bmV3IHcodGhpcy5tb2RuKHAud29yZHNbMF0pKX06e2Rpdjp0aGlzLmRpdm4ocC53b3Jkc1swXSksbW9kOm5ldyB3KHRoaXMubW9kbihwLndvcmRzWzBdKSl9OnRoaXMuX3dvcmREaXYocCxiKTt2YXIgQyxULEh9LHcucHJv''@;'; put 'put ''dG90eXBlLmRpdj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5kaXZtb2QocCwiZGl2IiwhMSkuZGl2fSx3LnByb3RvdHlwZS5tb2Q9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuZGl2bW9kKHAsIm1vZCIsITEpLm1vZH0sdy5wcm90b3R5cGUudW1vZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5k''@;'; put 'put ''aXZtb2QocCwibW9kIiwhMCkubW9kfSx3LnByb3RvdHlwZS5kaXZSb3VuZD1mdW5jdGlvbihwKXt2YXIgYj10aGlzLmRpdm1vZChwKTtpZihiLm1vZC5pc1plcm8oKSlyZXR1cm4gYi5kaXY7dmFyIHg9MCE9PWIuZGl2Lm5lZ2F0aXZlP2IubW9kLmlzdWIocCk6Yi5tb2QsQz1wLnVzaHJuKDEp''@;'; put 'put ''LFQ9cC5hbmRsbigxKSxIPXguY21wKEMpO3JldHVybiBIPDB8fDE9PT1UJiYwPT09SD9iLmRpdjowIT09Yi5kaXYubmVnYXRpdmU/Yi5kaXYuaXN1Ym4oMSk6Yi5kaXYuaWFkZG4oMSl9LHcucHJvdG90eXBlLm1vZG49ZnVuY3Rpb24ocCl7ZyhwPD02NzEwODg2Myk7Zm9yKHZhciBiPSgxPDwy''@;'; put 'put ''NiklcCx4PTAsQz10aGlzLmxlbmd0aC0xO0M+PTA7Qy0tKXg9KGIqeCsoMHx0aGlzLndvcmRzW0NdKSklcDtyZXR1cm4geH0sdy5wcm90b3R5cGUuaWRpdm49ZnVuY3Rpb24ocCl7ZyhwPD02NzEwODg2Myk7Zm9yKHZhciBiPTAseD10aGlzLmxlbmd0aC0xO3g+PTA7eC0tKXt2YXIgQz0oMHx0''@;'; put 'put ''aGlzLndvcmRzW3hdKSs2NzEwODg2NCpiO3RoaXMud29yZHNbeF09Qy9wfDAsYj1DJXB9cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuZGl2bj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlkaXZuKHApfSx3LnByb3RvdHlwZS5lZ2NkPWZ1bmN0aW9uKHApe2coMD09''@;'; put 'put ''PXAubmVnYXRpdmUpLGcoIXAuaXNaZXJvKCkpO3ZhciBiPXRoaXMseD1wLmNsb25lKCk7Yj0wIT09Yi5uZWdhdGl2ZT9iLnVtb2QocCk6Yi5jbG9uZSgpO2Zvcih2YXIgQz1uZXcgdygxKSxUPW5ldyB3KDApLEg9bmV3IHcoMCksaj1uZXcgdygxKSxFPTA7Yi5pc0V2ZW4oKSYmeC5pc0V2ZW4o''@;'; put 'put ''KTspYi5pdXNocm4oMSkseC5pdXNocm4oMSksKytFO2Zvcih2YXIgbT14LmNsb25lKCksQT1iLmNsb25lKCk7IWIuaXNaZXJvKCk7KXtmb3IodmFyIGFlPTAsdGU9MTshKGIud29yZHNbMF0mdGUpJiZhZTwyNjsrK2FlLHRlPDw9MSk7aWYoYWU+MClmb3IoYi5pdXNocm4oYWUpO2FlLS0gPjA7''@;'; put 'put ''KShDLmlzT2RkKCl8fFQuaXNPZGQoKSkmJihDLmlhZGQobSksVC5pc3ViKEEpKSxDLml1c2hybigxKSxULml1c2hybigxKTtmb3IodmFyIHNlPTAsd2U9MTshKHgud29yZHNbMF0md2UpJiZzZTwyNjsrK3NlLHdlPDw9MSk7aWYoc2U+MClmb3IoeC5pdXNocm4oc2UpO3NlLS0gPjA7KShILmlz''@;'; put 'put ''T2RkKCl8fGouaXNPZGQoKSkmJihILmlhZGQobSksai5pc3ViKEEpKSxILml1c2hybigxKSxqLml1c2hybigxKTtiLmNtcCh4KT49MD8oYi5pc3ViKHgpLEMuaXN1YihIKSxULmlzdWIoaikpOih4LmlzdWIoYiksSC5pc3ViKEMpLGouaXN1YihUKSl9cmV0dXJue2E6SCxiOmosZ2NkOnguaXVz''@;'; put 'put ''aGxuKEUpfX0sdy5wcm90b3R5cGUuX2ludm1wPWZ1bmN0aW9uKHApe2coMD09PXAubmVnYXRpdmUpLGcoIXAuaXNaZXJvKCkpO3ZhciBhZSxiPXRoaXMseD1wLmNsb25lKCk7Yj0wIT09Yi5uZWdhdGl2ZT9iLnVtb2QocCk6Yi5jbG9uZSgpO2Zvcih2YXIgQz1uZXcgdygxKSxUPW5ldyB3KDAp''@;'; put 'put ''LEg9eC5jbG9uZSgpO2IuY21wbigxKT4wJiZ4LmNtcG4oMSk+MDspe2Zvcih2YXIgaj0wLEU9MTshKGIud29yZHNbMF0mRSkmJmo8MjY7KytqLEU8PD0xKTtpZihqPjApZm9yKGIuaXVzaHJuKGopO2otLSA+MDspQy5pc09kZCgpJiZDLmlhZGQoSCksQy5pdXNocm4oMSk7Zm9yKHZhciBtPTAs''@;'; put 'put ''QT0xOyEoeC53b3Jkc1swXSZBKSYmbTwyNjsrK20sQTw8PTEpO2lmKG0+MClmb3IoeC5pdXNocm4obSk7bS0tID4wOylULmlzT2RkKCkmJlQuaWFkZChIKSxULml1c2hybigxKTtiLmNtcCh4KT49MD8oYi5pc3ViKHgpLEMuaXN1YihUKSk6KHguaXN1YihiKSxULmlzdWIoQykpfXJldHVybihh''@;'; put 'put ''ZT0wPT09Yi5jbXBuKDEpP0M6VCkuY21wbigwKTwwJiZhZS5pYWRkKHApLGFlfSx3LnByb3RvdHlwZS5nY2Q9ZnVuY3Rpb24ocCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gcC5hYnMoKTtpZihwLmlzWmVybygpKXJldHVybiB0aGlzLmFicygpO3ZhciBiPXRoaXMuY2xvbmUoKSx4PXAuY2xv''@;'; put 'put ''bmUoKTtiLm5lZ2F0aXZlPTAseC5uZWdhdGl2ZT0wO2Zvcih2YXIgQz0wO2IuaXNFdmVuKCkmJnguaXNFdmVuKCk7QysrKWIuaXVzaHJuKDEpLHguaXVzaHJuKDEpO2Zvcig7Oyl7Zm9yKDtiLmlzRXZlbigpOyliLml1c2hybigxKTtmb3IoO3guaXNFdmVuKCk7KXguaXVzaHJuKDEpO3ZhciBU''@;'; put 'put ''PWIuY21wKHgpO2lmKFQ8MCl7dmFyIEg9YjtiPXgseD1IfWVsc2UgaWYoMD09PVR8fDA9PT14LmNtcG4oMSkpYnJlYWs7Yi5pc3ViKHgpfXJldHVybiB4Lml1c2hsbihDKX0sdy5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5lZ2NkKHApLmEudW1vZChwKX0sdy5wcm90''@;'; put 'put ''b3R5cGUuaXNFdmVuPWZ1bmN0aW9uKCl7cmV0dXJuISgxJnRoaXMud29yZHNbMF0pfSx3LnByb3RvdHlwZS5pc09kZD1mdW5jdGlvbigpe3JldHVybiEoMSZ+dGhpcy53b3Jkc1swXSl9LHcucHJvdG90eXBlLmFuZGxuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLndvcmRzWzBdJnB9LHcucHJv''@;'; put 'put ''dG90eXBlLmJpbmNuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwKTt2YXIgYj1wJTI2LHg9KHAtYikvMjYsQz0xPDxiO2lmKHRoaXMubGVuZ3RoPD14KXJldHVybiB0aGlzLl9leHBhbmQoeCsxKSx0aGlzLndvcmRzW3hdfD1DLHRoaXM7Zm9yKHZhciBUPUMsSD14OzAhPT1UJiZI''@;'; put 'put ''PHRoaXMubGVuZ3RoO0grKyl7dmFyIGo9MHx0aGlzLndvcmRzW0hdO1Q9KGorPVQpPj4+MjYsdGhpcy53b3Jkc1tIXT1qJj02NzEwODg2M31yZXR1cm4gMCE9PVQmJih0aGlzLndvcmRzW0hdPVQsdGhpcy5sZW5ndGgrKyksdGhpc30sdy5wcm90b3R5cGUuaXNaZXJvPWZ1bmN0aW9uKCl7cmV0''@;'; put 'put ''dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF19LHcucHJvdG90eXBlLmNtcG49ZnVuY3Rpb24ocCl7dmFyIHgsYj1wPDA7aWYoMCE9PXRoaXMubmVnYXRpdmUmJiFiKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiZiKXJldHVybiAxO2lmKHRoaXMuc3RyaXAoKSx0''@;'; put 'put ''aGlzLmxlbmd0aD4xKXg9MTtlbHNle2ImJihwPS1wKSxnKHA8PTY3MTA4ODYzLCJOdW1iZXIgaXMgdG9vIGJpZyIpO3ZhciBDPTB8dGhpcy53b3Jkc1swXTt4PUM9PT1wPzA6QzxwPy0xOjF9cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LXg6eH0sdy5wcm90b3R5cGUuY21wPWZ1bmN0aW9u''@;'; put 'put ''KHApe2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09cC5uZWdhdGl2ZSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXAubmVnYXRpdmUpcmV0dXJuIDE7dmFyIGI9dGhpcy51Y21wKHApO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1iOmJ9LHcucHJvdG90eXBlLnVjbXA9''@;'; put 'put ''ZnVuY3Rpb24ocCl7aWYodGhpcy5sZW5ndGg+cC5sZW5ndGgpcmV0dXJuIDE7aWYodGhpcy5sZW5ndGg8cC5sZW5ndGgpcmV0dXJuLTE7Zm9yKHZhciBiPTAseD10aGlzLmxlbmd0aC0xO3g+PTA7eC0tKXt2YXIgQz0wfHRoaXMud29yZHNbeF0sVD0wfHAud29yZHNbeF07aWYoQyE9PVQpe0M8''@;'; put 'put ''VD9iPS0xOkM+VCYmKGI9MSk7YnJlYWt9fXJldHVybiBifSx3LnByb3RvdHlwZS5ndG49ZnVuY3Rpb24ocCl7cmV0dXJuIDE9PT10aGlzLmNtcG4ocCl9LHcucHJvdG90eXBlLmd0PWZ1bmN0aW9uKHApe3JldHVybiAxPT09dGhpcy5jbXAocCl9LHcucHJvdG90eXBlLmd0ZW49ZnVuY3Rpb24o''@;'; put 'put ''cCl7cmV0dXJuIHRoaXMuY21wbihwKT49MH0sdy5wcm90b3R5cGUuZ3RlPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNtcChwKT49MH0sdy5wcm90b3R5cGUubHRuPWZ1bmN0aW9uKHApe3JldHVybi0xPT09dGhpcy5jbXBuKHApfSx3LnByb3RvdHlwZS5sdD1mdW5jdGlvbihwKXtyZXR1cm4t''@;'; put 'put ''MT09PXRoaXMuY21wKHApfSx3LnByb3RvdHlwZS5sdGVuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNtcG4ocCk8PTB9LHcucHJvdG90eXBlLmx0ZT1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbXAocCk8PTB9LHcucHJvdG90eXBlLmVxbj1mdW5jdGlvbihwKXtyZXR1cm4gMD09PXRoaXMu''@;'; put 'put ''Y21wbihwKX0sdy5wcm90b3R5cGUuZXE9ZnVuY3Rpb24ocCl7cmV0dXJuIDA9PT10aGlzLmNtcChwKX0sdy5yZWQ9ZnVuY3Rpb24ocCl7cmV0dXJuIG5ldyBTZShwKX0sdy5wcm90b3R5cGUudG9SZWQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGcoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGlu''@;'; put 'put ''IHJlZHVjdGlvbiBjb250ZXh0IiksZygwPT09dGhpcy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxwLmNvbnZlcnRUbyh0aGlzKS5fZm9yY2VSZWQocCl9LHcucHJvdG90eXBlLmZyb21SZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwiZnJvbVJlZCB3''@;'; put 'put ''b3JrcyBvbmx5IHdpdGggbnVtYmVycyBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMucmVkLmNvbnZlcnRGcm9tKHRoaXMpfSx3LnByb3RvdHlwZS5fZm9yY2VSZWQ9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMucmVkPXAsdGhpc30sdy5wcm90b3R5cGUuZm9yY2VSZWQ9ZnVuY3Rpb24ocCl7''@;'; put 'put ''cmV0dXJuIGcoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5fZm9yY2VSZWQocCl9LHcucHJvdG90eXBlLnJlZEFkZD1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIp''@;'; put 'put ''LHRoaXMucmVkLmFkZCh0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRJQWRkPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRJQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlhZGQodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkU3ViPWZ1bmN0aW9uKHAp''@;'; put 'put ''e3JldHVybiBnKHRoaXMucmVkLCJyZWRTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc3ViKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZElTdWI9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZElTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJz''@;'; put 'put ''IiksdGhpcy5yZWQuaXN1Yih0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRTaGw9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZFNobCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zaGwodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkTXVsPWZ1bmN0aW9uKHAp''@;'; put 'put ''e3JldHVybiBnKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxwKSx0aGlzLnJlZC5tdWwodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkSU11bD1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkTXVsIHdv''@;'; put 'put ''cmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMscCksdGhpcy5yZWQuaW11bCh0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRo''@;'; put 'put ''aXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcih0aGlzKX0sdy5wcm90b3R5cGUucmVkSVNxcj1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWRJU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmlz''@;'; put 'put ''cXIodGhpcyl9LHcucHJvdG90eXBlLnJlZFNxcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkU3FydCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXJ0KHRoaXMpfSx3LnByb3RvdHlwZS5yZWRJbnZtPWZ1''@;'; put 'put ''bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZEludm0gd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaW52bSh0aGlzKX0sdy5wcm90b3R5cGUucmVkTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZE5l''@;'; put 'put ''ZyB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5uZWcodGhpcyl9LHcucHJvdG90eXBlLnJlZFBvdz1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCYmIXAucmVkLCJyZWRQb3cobm9ybWFsTnVtKSIpLHRoaXMucmVkLl92''@;'; put 'put ''ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnBvdyh0aGlzLHApfTt2YXIgbmU9e2syNTY6bnVsbCxwMjI0Om51bGwscDE5MjpudWxsLHAyNTUxOTpudWxsfTtmdW5jdGlvbiBpZShWLHApe3RoaXMubmFtZT1WLHRoaXMucD1uZXcgdyhwLDE2KSx0aGlzLm49dGhpcy5wLmJpdExlbmd0aCgpLHRoaXMu''@;'; put 'put ''az1uZXcgdygxKS5pdXNobG4odGhpcy5uKS5pc3ViKHRoaXMucCksdGhpcy50bXA9dGhpcy5fdG1wKCl9ZnVuY3Rpb24gbGUoKXtpZS5jYWxsKHRoaXMsImsyNTYiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMy''@;'; put 'put ''ZiIpfWZ1bmN0aW9uIG1lKCl7aWUuY2FsbCh0aGlzLCJwMjI0IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEiKX1mdW5jdGlvbiBfZSgpe2llLmNhbGwodGhpcywicDE5MiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZm''@;'; put 'put ''IGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIil9ZnVuY3Rpb24gVGUoKXtpZS5jYWxsKHRoaXMsIjI1NTE5IiwiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCIpfWZ1bmN0aW9uIFNlKFYpe2lmKCJzdHJpbmciPT10''@;'; put 'put ''eXBlb2YgVil7dmFyIHA9dy5fcHJpbWUoVik7dGhpcy5tPXAucCx0aGlzLnByaW1lPXB9ZWxzZSBnKFYuZ3RuKDEpLCJtb2R1bHVzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDEiKSx0aGlzLm09Vix0aGlzLnByaW1lPW51bGx9ZnVuY3Rpb24gamUoVil7U2UuY2FsbCh0aGlzLFYpLHRoaXMuc2hp''@;'; put 'put ''ZnQ9dGhpcy5tLmJpdExlbmd0aCgpLHRoaXMuc2hpZnQlMjYhPTAmJih0aGlzLnNoaWZ0Kz0yNi10aGlzLnNoaWZ0JTI2KSx0aGlzLnI9bmV3IHcoMSkuaXVzaGxuKHRoaXMuc2hpZnQpLHRoaXMucjI9dGhpcy5pbW9kKHRoaXMuci5zcXIoKSksdGhpcy5yaW52PXRoaXMuci5faW52bXAodGhp''@;'; put 'put ''cy5tKSx0aGlzLm1pbnY9dGhpcy5yaW52Lm11bCh0aGlzLnIpLmlzdWJuKDEpLmRpdih0aGlzLm0pLHRoaXMubWludj10aGlzLm1pbnYudW1vZCh0aGlzLnIpLHRoaXMubWludj10aGlzLnIuc3ViKHRoaXMubWludil9aWUucHJvdG90eXBlLl90bXA9ZnVuY3Rpb24oKXt2YXIgcD1uZXcgdyhu''@;'; put 'put ''dWxsKTtyZXR1cm4gcC53b3Jkcz1uZXcgQXJyYXkoTWF0aC5jZWlsKHRoaXMubi8xMykpLHB9LGllLnByb3RvdHlwZS5pcmVkdWNlPWZ1bmN0aW9uKHApe3ZhciB4LGI9cDtkb3t0aGlzLnNwbGl0KGIsdGhpcy50bXApLHg9KGI9KGI9dGhpcy5pbXVsSyhiKSkuaWFkZCh0aGlzLnRtcCkpLmJp''@;'; put 'put ''dExlbmd0aCgpfXdoaWxlKHg+dGhpcy5uKTt2YXIgQz14PHRoaXMubj8tMTpiLnVjbXAodGhpcy5wKTtyZXR1cm4gMD09PUM/KGIud29yZHNbMF09MCxiLmxlbmd0aD0xKTpDPjA/Yi5pc3ViKHRoaXMucCk6dm9pZCAwIT09Yi5zdHJpcD9iLnN0cmlwKCk6Yi5fc3RyaXAoKSxifSxpZS5wcm90''@;'; put 'put ''b3R5cGUuc3BsaXQ9ZnVuY3Rpb24ocCxiKXtwLml1c2hybih0aGlzLm4sMCxiKX0saWUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHApe3JldHVybiBwLmltdWwodGhpcy5rKX0sQihsZSxpZSksbGUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKHAsYil7Zm9yKHZhciB4PTQxOTQzMDMsQz1N''@;'; put 'put ''YXRoLm1pbihwLmxlbmd0aCw5KSxUPTA7VDxDO1QrKyliLndvcmRzW1RdPXAud29yZHNbVF07aWYoYi5sZW5ndGg9QyxwLmxlbmd0aDw9OSlyZXR1cm4gcC53b3Jkc1swXT0wLHZvaWQocC5sZW5ndGg9MSk7dmFyIEg9cC53b3Jkc1s5XTtmb3IoYi53b3Jkc1tiLmxlbmd0aCsrXT1IJngsVD0x''@;'; put 'put ''MDtUPHAubGVuZ3RoO1QrKyl7dmFyIGo9MHxwLndvcmRzW1RdO3Aud29yZHNbVC0xMF09KGomeCk8PDR8SD4+PjIyLEg9an1wLndvcmRzW1QtMTBdPUg+Pj49MjIscC5sZW5ndGgtPTA9PT1IJiZwLmxlbmd0aD4xMD8xMDo5fSxsZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24ocCl7cC53b3Jk''@;'; put 'put ''c1twLmxlbmd0aF09MCxwLndvcmRzW3AubGVuZ3RoKzFdPTAscC5sZW5ndGgrPTI7Zm9yKHZhciBiPTAseD0wO3g8cC5sZW5ndGg7eCsrKXt2YXIgQz0wfHAud29yZHNbeF07cC53b3Jkc1t4XT02NzEwODg2MyYoYis9OTc3KkMpLGI9NjQqQysoYi82NzEwODg2NHwwKX1yZXR1cm4gMD09PXAu''@;'; put 'put ''d29yZHNbcC5sZW5ndGgtMV0mJihwLmxlbmd0aC0tLDA9PT1wLndvcmRzW3AubGVuZ3RoLTFdJiZwLmxlbmd0aC0tKSxwfSxCKG1lLGllKSxCKF9lLGllKSxCKFRlLGllKSxUZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24ocCl7Zm9yKHZhciBiPTAseD0wO3g8cC5sZW5ndGg7eCsrKXt2YXIg''@;'; put 'put ''Qz0xOSooMHxwLndvcmRzW3hdKStiLFQ9NjcxMDg4NjMmQztDPj4+PTI2LHAud29yZHNbeF09VCxiPUN9cmV0dXJuIDAhPT1iJiYocC53b3Jkc1twLmxlbmd0aCsrXT1iKSxwfSx3Ll9wcmltZT1mdW5jdGlvbihwKXtpZihuZVtwXSlyZXR1cm4gbmVbcF07dmFyIGI7aWYoImsyNTYiPT09cCli''@;'; put 'put ''PW5ldyBsZTtlbHNlIGlmKCJwMjI0Ij09PXApYj1uZXcgbWU7ZWxzZSBpZigicDE5MiI9PT1wKWI9bmV3IF9lO2Vsc2V7aWYoInAyNTUxOSIhPT1wKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBwcmltZSAiK3ApO2I9bmV3IFRlfXJldHVybiBuZVtwXT1iLGJ9LFNlLnByb3RvdHlwZS5fdmVy''@;'; put 'put ''aWZ5MT1mdW5jdGlvbihwKXtnKDA9PT1wLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLGcocC5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sU2UucHJvdG90eXBlLl92ZXJpZnkyPWZ1bmN0aW9uKHAsYil7ZyghKHAubmVnYXRpdmV8Yi5u''@;'; put 'put ''ZWdhdGl2ZSksInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksZyhwLnJlZCYmcC5yZWQ9PT1iLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxTZS5wcm90b3R5cGUuaW1vZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5wcmltZT90aGlzLnByaW1lLmlyZWR1''@;'; put 'put ''Y2UocCkuX2ZvcmNlUmVkKHRoaXMpOnAudW1vZCh0aGlzLm0pLl9mb3JjZVJlZCh0aGlzKX0sU2UucHJvdG90eXBlLm5lZz1mdW5jdGlvbihwKXtyZXR1cm4gcC5pc1plcm8oKT9wLmNsb25lKCk6dGhpcy5tLnN1YihwKS5fZm9yY2VSZWQodGhpcyl9LFNlLnByb3RvdHlwZS5hZGQ9ZnVuY3Rp''@;'; put 'put ''b24ocCxiKXt0aGlzLl92ZXJpZnkyKHAsYik7dmFyIHg9cC5hZGQoYik7cmV0dXJuIHguY21wKHRoaXMubSk+PTAmJnguaXN1Yih0aGlzLm0pLHguX2ZvcmNlUmVkKHRoaXMpfSxTZS5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihwLGIpe3RoaXMuX3ZlcmlmeTIocCxiKTt2YXIgeD1wLmlhZGQo''@;'; put 'put ''Yik7cmV0dXJuIHguY21wKHRoaXMubSk+PTAmJnguaXN1Yih0aGlzLm0pLHh9LFNlLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24ocCxiKXt0aGlzLl92ZXJpZnkyKHAsYik7dmFyIHg9cC5zdWIoYik7cmV0dXJuIHguY21wbigwKTwwJiZ4LmlhZGQodGhpcy5tKSx4Ll9mb3JjZVJlZCh0aGlzKX0s''@;'; put 'put ''U2UucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24ocCxiKXt0aGlzLl92ZXJpZnkyKHAsYik7dmFyIHg9cC5pc3ViKGIpO3JldHVybiB4LmNtcG4oMCk8MCYmeC5pYWRkKHRoaXMubSkseH0sU2UucHJvdG90eXBlLnNobD1mdW5jdGlvbihwLGIpe3JldHVybiB0aGlzLl92ZXJpZnkxKHApLHRoaXMu''@;'; put 'put ''aW1vZChwLnVzaGxuKGIpKX0sU2UucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihwLGIpLHRoaXMuaW1vZChwLmltdWwoYikpfSxTZS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHAsYil7cmV0dXJuIHRoaXMuX3ZlcmlmeTIocCxiKSx0aGlzLmltb2Qo''@;'; put 'put ''cC5tdWwoYikpfSxTZS5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5pbXVsKHAscC5jbG9uZSgpKX0sU2UucHJvdG90eXBlLnNxcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5tdWwocCxwKX0sU2UucHJvdG90eXBlLnNxcnQ9ZnVuY3Rpb24ocCl7aWYocC5pc1plcm8o''@;'; put 'put ''KSlyZXR1cm4gcC5jbG9uZSgpO3ZhciBiPXRoaXMubS5hbmRsbigzKTtpZihnKGIlMj09MSksMz09PWIpe3ZhciB4PXRoaXMubS5hZGQobmV3IHcoMSkpLml1c2hybigyKTtyZXR1cm4gdGhpcy5wb3cocCx4KX1mb3IodmFyIEM9dGhpcy5tLnN1Ym4oMSksVD0wOyFDLmlzWmVybygpJiYwPT09''@;'; put 'put ''Qy5hbmRsbigxKTspVCsrLEMuaXVzaHJuKDEpO2coIUMuaXNaZXJvKCkpO3ZhciBIPW5ldyB3KDEpLnRvUmVkKHRoaXMpLGo9SC5yZWROZWcoKSxFPXRoaXMubS5zdWJuKDEpLml1c2hybigxKSxtPXRoaXMubS5iaXRMZW5ndGgoKTtmb3IobT1uZXcgdygyKm0qbSkudG9SZWQodGhpcyk7MCE9''@;'; put 'put ''PXRoaXMucG93KG0sRSkuY21wKGopOyltLnJlZElBZGQoaik7Zm9yKHZhciBBPXRoaXMucG93KG0sQyksYWU9dGhpcy5wb3cocCxDLmFkZG4oMSkuaXVzaHJuKDEpKSx0ZT10aGlzLnBvdyhwLEMpLHNlPVQ7MCE9PXRlLmNtcChIKTspe2Zvcih2YXIgd2U9dGUsVWU9MDswIT09d2UuY21wKEgp''@;'; put 'put ''O1VlKyspd2U9d2UucmVkU3FyKCk7ZyhVZTxzZSk7dmFyIEplPXRoaXMucG93KEEsbmV3IHcoMSkuaXVzaGxuKHNlLVVlLTEpKTthZT1hZS5yZWRNdWwoSmUpLEE9SmUucmVkU3FyKCksdGU9dGUucmVkTXVsKEEpLHNlPVVlfXJldHVybiBhZX0sU2UucHJvdG90eXBlLmludm09ZnVuY3Rpb24o''@;'; put 'put ''cCl7dmFyIGI9cC5faW52bXAodGhpcy5tKTtyZXR1cm4gMCE9PWIubmVnYXRpdmU/KGIubmVnYXRpdmU9MCx0aGlzLmltb2QoYikucmVkTmVnKCkpOnRoaXMuaW1vZChiKX0sU2UucHJvdG90eXBlLnBvdz1mdW5jdGlvbihwLGIpe2lmKGIuaXNaZXJvKCkpcmV0dXJuIG5ldyB3KDEpLnRvUmVk''@;'; put 'put ''KHRoaXMpO2lmKDA9PT1iLmNtcG4oMSkpcmV0dXJuIHAuY2xvbmUoKTt2YXIgQz1uZXcgQXJyYXkoMTYpO0NbMF09bmV3IHcoMSkudG9SZWQodGhpcyksQ1sxXT1wO2Zvcih2YXIgVD0yO1Q8Qy5sZW5ndGg7VCsrKUNbVF09dGhpcy5tdWwoQ1tULTFdLHApO3ZhciBIPUNbMF0saj0wLEU9MCxt''@;'; put 'put ''PWIuYml0TGVuZ3RoKCklMjY7Zm9yKDA9PT1tJiYobT0yNiksVD1iLmxlbmd0aC0xO1Q+PTA7VC0tKXtmb3IodmFyIEE9Yi53b3Jkc1tUXSxhZT1tLTE7YWU+PTA7YWUtLSl7dmFyIHRlPUE+PmFlJjE7SCE9PUNbMF0mJihIPXRoaXMuc3FyKEgpKSwwIT09dGV8fDAhPT1qPyhqPDw9MSxqfD10''@;'; put 'put ''ZSwoND09KytFfHwwPT09VCYmMD09PWFlKSYmKEg9dGhpcy5tdWwoSCxDW2pdKSxFPTAsaj0wKSk6RT0wfW09MjZ9cmV0dXJuIEh9LFNlLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24ocCl7dmFyIGI9cC51bW9kKHRoaXMubSk7cmV0dXJuIGI9PT1wP2IuY2xvbmUoKTpifSxTZS5wcm90''@;'; put 'put ''b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24ocCl7dmFyIGI9cC5jbG9uZSgpO3JldHVybiBiLnJlZD1udWxsLGJ9LHcubW9udD1mdW5jdGlvbihwKXtyZXR1cm4gbmV3IGplKHApfSxCKGplLFNlKSxqZS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmltb2Qo''@;'; put 'put ''cC51c2hsbih0aGlzLnNoaWZ0KSl9LGplLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihwKXt2YXIgYj10aGlzLmltb2QocC5tdWwodGhpcy5yaW52KSk7cmV0dXJuIGIucmVkPW51bGwsYn0samUucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24ocCxiKXtpZihwLmlzWmVybygpfHxiLmlz''@;'; put 'put ''WmVybygpKXJldHVybiBwLndvcmRzWzBdPTAscC5sZW5ndGg9MSxwO3ZhciB4PXAuaW11bChiKSxDPXgubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLFQ9eC5pc3ViKEMpLml1c2hybih0aGlzLnNoaWZ0KSxIPVQ7cmV0dXJu''@;'; put 'put ''IFQuY21wKHRoaXMubSk+PTA/SD1ULmlzdWIodGhpcy5tKTpULmNtcG4oMCk8MCYmKEg9VC5pYWRkKHRoaXMubSkpLEguX2ZvcmNlUmVkKHRoaXMpfSxqZS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHAsYil7aWYocC5pc1plcm8oKXx8Yi5pc1plcm8oKSlyZXR1cm4gbmV3IHcoMCkuX2ZvcmNl''@;'; put 'put ''UmVkKHRoaXMpO3ZhciB4PXAubXVsKGIpLEM9eC5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksVD14LmlzdWIoQykuaXVzaHJuKHRoaXMuc2hpZnQpLEg9VDtyZXR1cm4gVC5jbXAodGhpcy5tKT49MD9IPVQuaXN1Yih0aGlz''@;'; put 'put ''Lm0pOlQuY21wbigwKTwwJiYoSD1ULmlhZGQodGhpcy5tKSksSC5fZm9yY2VSZWQodGhpcyl9LGplLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmltb2QocC5faW52bXAodGhpcy5tKS5tdWwodGhpcy5yMikpLl9mb3JjZVJlZCh0aGlzKX19KHVlPXkubm1kKHVlKSx0''@;'; put 'put ''aGlzKX0sMzkyMTA6dWU9PntmdW5jdGlvbiBYKHksSSl7aWYoIXkpdGhyb3cgbmV3IEVycm9yKEl8fCJBc3NlcnRpb24gZmFpbGVkIil9dWUuZXhwb3J0cz1YLFguZXF1YWw9ZnVuY3Rpb24oSSxfLGcpe2lmKEkhPV8pdGhyb3cgbmV3IEVycm9yKGd8fCJBc3NlcnRpb24gZmFpbGVkOiAiK0kr''@;'; put 'put ''IiAhPSAiK18pfX0sMjE4MzI6KHVlLFgpPT57InVzZSBzdHJpY3QiO3ZhciB5PVg7ZnVuY3Rpb24gXyhCKXtyZXR1cm4gMT09PUIubGVuZ3RoPyIwIitCOkJ9ZnVuY3Rpb24gZyhCKXtmb3IodmFyIHc9IiIsUD0wO1A8Qi5sZW5ndGg7UCsrKXcrPV8oQltQXS50b1N0cmluZygxNikpO3JldHVy''@;'; put 'put ''biB3fXkudG9BcnJheT1mdW5jdGlvbiBJKEIsdyl7aWYoQXJyYXkuaXNBcnJheShCKSlyZXR1cm4gQi5zbGljZSgpO2lmKCFCKXJldHVybltdO3ZhciBQPVtdO2lmKCJzdHJpbmciIT10eXBlb2YgQil7Zm9yKHZhciBGPTA7RjxCLmxlbmd0aDtGKyspUFtGXT0wfEJbRl07cmV0dXJuIFB9aWYo''@;'; put 'put ''ImhleCI9PT13KWZvcigoQj1CLnJlcGxhY2UoL1teYS16MC05XSsvZ2ksIiIpKS5sZW5ndGglMiE9MCYmKEI9IjAiK0IpLEY9MDtGPEIubGVuZ3RoO0YrPTIpUC5wdXNoKHBhcnNlSW50KEJbRl0rQltGKzFdLDE2KSk7ZWxzZSBmb3IoRj0wO0Y8Qi5sZW5ndGg7RisrKXt2YXIgTz1CLmNoYXJD''@;'; put 'put ''b2RlQXQoRiksej1PPj44LE49MjU1Jk87ej9QLnB1c2goeixOKTpQLnB1c2goTil9cmV0dXJuIFB9LHkuemVybzI9Xyx5LnRvSGV4PWcseS5lbmNvZGU9ZnVuY3Rpb24odyxQKXtyZXR1cm4iaGV4Ij09PVA/Zyh3KTp3fX0sMTE1NDQ6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVz''@;'; put 'put ''ZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJhZiIse21vbnRoczoiSmFudWFyaWVfRmVicnVhcmllX01hYXJ0X0FwcmlsX01laV9KdW5pZV9KdWxpZV9BdWd1c3R1c19TZXB0ZW1iZXJfT2t0b2Jlcl9Ob3ZlbWJlcl9EZXNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuX0ZlYl9N''@;'; put 'put ''cnRfQXByX01laV9KdW5fSnVsX0F1Z19TZXBfT2t0X05vdl9EZXMiLnNwbGl0KCJfIiksd2Vla2RheXM6IlNvbmRhZ19NYWFuZGFnX0RpbnNkYWdfV29lbnNkYWdfRG9uZGVyZGFnX1ZyeWRhZ19TYXRlcmRhZyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJTb25fTWFhX0Rpbl9Xb2VfRG9u''@;'; put 'put ''X1ZyeV9TYXQiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlNvX01hX0RpX1dvX0RvX1ZyX1NhIi5zcGxpdCgiXyIpLG1lcmlkaWVtUGFyc2U6L3ZtfG5tL2ksaXNQTTpmdW5jdGlvbihnKXtyZXR1cm4vXm5tJC9pLnRlc3QoZyl9LG1lcmlkaWVtOmZ1bmN0aW9uKGcsQix3KXtyZXR1cm4gZzwx''@;'; put 'put ''Mj93PyJ2bSI6IlZNIjp3PyJubSI6Ik5NIn0sbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFy''@;'; put 'put ''OntzYW1lRGF5OiJbVmFuZGFnIG9tXSBMVCIsbmV4dERheToiW01ceGY0cmUgb21dIExUIixuZXh0V2VlazoiZGRkZCBbb21dIExUIixsYXN0RGF5OiJbR2lzdGVyIG9tXSBMVCIsbGFzdFdlZWs6IltMYWFzXSBkZGRkIFtvbV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1''@;'; put 'put ''cmU6Im9vciAlcyIscGFzdDoiJXMgZ2VsZWRlIixzOiInbiBwYWFyIHNla29uZGVzIixzczoiJWQgc2Vrb25kZXMiLG06IiduIG1pbnV1dCIsbW06IiVkIG1pbnV0ZSIsaDoiJ24gdXVyIixoaDoiJWQgdXJlIixkOiInbiBkYWciLGRkOiIlZCBkYWUiLE06IiduIG1hYW5kIixNTToiJWQgbWFh''@;'; put 'put ''bmRlIix5OiInbiBqYWFyIix5eToiJWQgamFhciJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oc3RlfGRlKS8sb3JkaW5hbDpmdW5jdGlvbihnKXtyZXR1cm4gZysoMT09PWd8fDg9PT1nfHxnPj0yMD8ic3RlIjoiZGUiKX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KHkoOTc1ODYp''@;'; put 'put ''KX0sNTIxNTU6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO3ZhciBfPWZ1bmN0aW9uKEYpe3JldHVybiAwPT09Rj8wOjE9PT1GPzE6Mj09PUY/MjpGJTEwMD49MyYmRiUxMDA8PTEwPzM6RiUxMDA+PTExPzQ6NX0sZz17czpbIlx1MDYyM1x1MDY0Mlx1MDY0NCBc''@;'; put 'put ''dTA2NDVcdTA2NDYgXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjI5IiwiXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjI5IFx1MDY0OFx1MDYyN1x1MDYyZFx1MDYyZlx1MDYyOSIsWyJcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MmFcdTA2MjdcdTA2NDYiLCJcdTA2MmJcdTA2''@;'; put 'put ''MjdcdTA2NDZcdTA2NGFcdTA2MmFcdTA2NGFcdTA2NDYiXSwiJWQgXHUwNjJiXHUwNjQ4XHUwNjI3XHUwNjQ2IiwiJWQgXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjI5IiwiJWQgXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjI5Il0sbTpbIlx1MDYyM1x1MDY0Mlx1MDY0NCBcdTA2''@;'; put 'put ''NDVcdTA2NDYgXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjI5IiwiXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjI5IFx1MDY0OFx1MDYyN1x1MDYyZFx1MDYyZlx1MDYyOSIsWyJcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MmFcdTA2MjdcdTA2NDYiLCJcdTA2MmZcdTA2NDJc''@;'; put 'put ''dTA2NGFcdTA2NDJcdTA2MmFcdTA2NGFcdTA2NDYiXSwiJWQgXHUwNjJmXHUwNjQyXHUwNjI3XHUwNjI2XHUwNjQyIiwiJWQgXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjI5IiwiJWQgXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjI5Il0saDpbIlx1MDYyM1x1MDY0Mlx1MDY0NCBc''@;'; put 'put ''dTA2NDVcdTA2NDYgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5IiwiXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5IFx1MDY0OFx1MDYyN1x1MDYyZFx1MDYyZlx1MDYyOSIsWyJcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MmFcdTA2MjdcdTA2NDYiLCJcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MmFcdTA2''@;'; put 'put ''NGFcdTA2NDYiXSwiJWQgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI3XHUwNjJhIiwiJWQgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5IiwiJWQgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5Il0sZDpbIlx1MDYyM1x1MDY0Mlx1MDY0NCBcdTA2NDVcdTA2NDYgXHUwNjRhXHUwNjQ4XHUwNjQ1Iiwi''@;'; put 'put ''XHUwNjRhXHUwNjQ4XHUwNjQ1IFx1MDY0OFx1MDYyN1x1MDYyZFx1MDYyZiIsWyJcdTA2NGFcdTA2NDhcdTA2NDVcdTA2MjdcdTA2NDYiLCJcdTA2NGFcdTA2NDhcdTA2NDVcdTA2NGFcdTA2NDYiXSwiJWQgXHUwNjIzXHUwNjRhXHUwNjI3XHUwNjQ1IiwiJWQgXHUwNjRhXHUwNjQ4XHUwNjQ1''@;'; put 'put ''XHUwNjRiXHUwNjI3IiwiJWQgXHUwNjRhXHUwNjQ4XHUwNjQ1Il0sTTpbIlx1MDYyM1x1MDY0Mlx1MDY0NCBcdTA2NDVcdTA2NDYgXHUwNjM0XHUwNjQ3XHUwNjMxIiwiXHUwNjM0XHUwNjQ3XHUwNjMxIFx1MDY0OFx1MDYyN1x1MDYyZFx1MDYyZiIsWyJcdTA2MzRcdTA2NDdcdTA2MzFcdTA2''@;'; put 'put ''MjdcdTA2NDYiLCJcdTA2MzRcdTA2NDdcdTA2MzFcdTA2NGFcdTA2NDYiXSwiJWQgXHUwNjIzXHUwNjM0XHUwNjQ3XHUwNjMxIiwiJWQgXHUwNjM0XHUwNjQ3XHUwNjMxXHUwNjI3IiwiJWQgXHUwNjM0XHUwNjQ3XHUwNjMxIl0seTpbIlx1MDYyM1x1MDY0Mlx1MDY0NCBcdTA2NDVcdTA2NDYg''@;'; put 'put ''XHUwNjM5XHUwNjI3XHUwNjQ1IiwiXHUwNjM5XHUwNjI3XHUwNjQ1IFx1MDY0OFx1MDYyN1x1MDYyZFx1MDYyZiIsWyJcdTA2MzlcdTA2MjdcdTA2NDVcdTA2MjdcdTA2NDYiLCJcdTA2MzlcdTA2MjdcdTA2NDVcdTA2NGFcdTA2NDYiXSwiJWQgXHUwNjIzXHUwNjM5XHUwNjQ4XHUwNjI3XHUw''@;'; put 'put ''NjQ1IiwiJWQgXHUwNjM5XHUwNjI3XHUwNjQ1XHUwNjRiXHUwNjI3IiwiJWQgXHUwNjM5XHUwNjI3XHUwNjQ1Il19LEI9ZnVuY3Rpb24oRil7cmV0dXJuIGZ1bmN0aW9uKE8seixOLEwpe3ZhciBLPV8oTyksVT1nW0ZdW18oTyldO3JldHVybiAyPT09SyYmKFU9VVt6PzA6MV0pLFUucmVwbGFj''@;'; put 'put ''ZSgvJWQvaSxPKX19LHc9WyJcdTA2MmNcdTA2MjdcdTA2NDZcdTA2NDFcdTA2NGEiLCJcdTA2NDFcdTA2NGFcdTA2NDFcdTA2MzFcdTA2NGEiLCJcdTA2NDVcdTA2MjdcdTA2MzFcdTA2MzMiLCJcdTA2MjNcdTA2NDFcdTA2MzFcdTA2NGFcdTA2NDQiLCJcdTA2NDVcdTA2MjdcdTA2NGEiLCJc''@;'; put 'put ''dTA2MmNcdTA2NDhcdTA2MjdcdTA2NDYiLCJcdTA2MmNcdTA2NDhcdTA2NGFcdTA2NDRcdTA2NGFcdTA2MjkiLCJcdTA2MjNcdTA2NDhcdTA2MmEiLCJcdTA2MzNcdTA2MjhcdTA2MmFcdTA2NDVcdTA2MjhcdTA2MzEiLCJcdTA2MjNcdTA2NDNcdTA2MmFcdTA2NDhcdTA2MjhcdTA2MzEiLCJc''@;'; put 'put ''dTA2NDZcdTA2NDhcdTA2NDFcdTA2NDVcdTA2MjhcdTA2MzEiLCJcdTA2MmZcdTA2NGFcdTA2MzNcdTA2NDVcdTA2MjhcdTA2MzEiXTtJLmRlZmluZUxvY2FsZSgiYXItZHoiLHttb250aHM6dyxtb250aHNTaG9ydDp3LHdlZWtkYXlzOiJcdTA2MjdcdTA2NDRcdTA2MjNcdTA2MmRcdTA2MmZf''@;'; put 'put ''XHUwNjI3XHUwNjQ0XHUwNjI1XHUwNjJiXHUwNjQ2XHUwNjRhXHUwNjQ2X1x1MDYyN1x1MDY0NFx1MDYyYlx1MDY0NFx1MDYyN1x1MDYyYlx1MDYyN1x1MDYyMV9cdTA2MjdcdTA2NDRcdTA2MjNcdTA2MzFcdTA2MjhcdTA2MzlcdTA2MjdcdTA2MjFfXHUwNjI3XHUwNjQ0XHUwNjJlXHUwNjQ1''@;'; put 'put ''XHUwNjRhXHUwNjMzX1x1MDYyN1x1MDY0NFx1MDYyY1x1MDY0NVx1MDYzOVx1MDYyOV9cdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjhcdTA2MmEiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwNjIzXHUwNjJkXHUwNjJmX1x1MDYyNVx1MDYyYlx1MDY0Nlx1MDY0YVx1MDY0Nl9cdTA2MmJc''@;'; put 'put ''dTA2NDRcdTA2MjdcdTA2MmJcdTA2MjdcdTA2MjFfXHUwNjIzXHUwNjMxXHUwNjI4XHUwNjM5XHUwNjI3XHUwNjIxX1x1MDYyZVx1MDY0NVx1MDY0YVx1MDYzM19cdTA2MmNcdTA2NDVcdTA2MzlcdTA2MjlfXHUwNjMzXHUwNjI4XHUwNjJhIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA2''@;'; put 'put ''MmRfXHUwNjQ2X1x1MDYyYl9cdTA2MzFfXHUwNjJlX1x1MDYyY19cdTA2MzMiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkQvXHUyMDBmTS9cdTIwMGZZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExM''@;'; put 'put ''TDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxtZXJpZGllbVBhcnNlOi9cdTA2MzV8XHUwNjQ1Lyxpc1BNOmZ1bmN0aW9uKEYpe3JldHVybiJcdTA2NDUiPT09Rn0sbWVyaWRpZW06ZnVuY3Rpb24oRixPLHope3JldHVybiBGPDEyPyJcdTA2MzUi''@;'; put 'put ''OiJcdTA2NDUifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDYyN1x1MDY0NFx1MDY0YVx1MDY0OFx1MDY0NSBcdTA2MzlcdTA2NDZcdTA2MmYgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbmV4dERheToiW1x1MDYzYVx1MDYyZlx1MDY0Ylx1MDYyNyBcdTA2Mzlc''@;'; put 'put ''dTA2NDZcdTA2MmYgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x1MDYzOVx1MDY0Nlx1MDYyZiBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixsYXN0RGF5OiJbXHUwNjIzXHUwNjQ1XHUwNjMzIFx1MDYz''@;'; put 'put ''OVx1MDY0Nlx1MDYyZiBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixsYXN0V2VlazoiZGRkZCBbXHUwNjM5XHUwNjQ2XHUwNjJmIFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1''@;'; put 'put ''cmU6Ilx1MDYyOFx1MDYzOVx1MDYyZiAlcyIscGFzdDoiXHUwNjQ1XHUwNjQ2XHUwNjMwICVzIixzOkIoInMiKSxzczpCKCJzIiksbTpCKCJtIiksbW06QigibSIpLGg6QigiaCIpLGhoOkIoImgiKSxkOkIoImQiKSxkZDpCKCJkIiksTTpCKCJNIiksTU06QigiTSIpLHk6QigieSIpLHl5OkIo''@;'; put 'put ''InkiKX0scG9zdGZvcm1hdDpmdW5jdGlvbihGKXtyZXR1cm4gRi5yZXBsYWNlKC8sL2csIlx1MDYwYyIpfSx3ZWVrOntkb3c6MCxkb3k6NH19KX0oeSg5NzU4NikpfSw1MzU4MzpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoImFyLWt3''@;'; put 'put ''Iix7bW9udGhzOiJcdTA2NGFcdTA2NDZcdTA2MjdcdTA2NGFcdTA2MzFfXHUwNjQxXHUwNjI4XHUwNjMxXHUwNjI3XHUwNjRhXHUwNjMxX1x1MDY0NVx1MDYyN1x1MDYzMVx1MDYzM19cdTA2MjNcdTA2MjhcdTA2MzFcdTA2NGFcdTA2NDRfXHUwNjQ1XHUwNjI3XHUwNjRhX1x1MDY0YVx1MDY0''@;'; put 'put ''OFx1MDY0Nlx1MDY0YVx1MDY0OF9cdTA2NGFcdTA2NDhcdTA2NDRcdTA2NGFcdTA2NDhcdTA2MzJfXHUwNjNhXHUwNjM0XHUwNjJhX1x1MDYzNFx1MDYyYVx1MDY0Nlx1MDYyOFx1MDYzMV9cdTA2MjNcdTA2NDNcdTA2MmFcdTA2NDhcdTA2MjhcdTA2MzFfXHUwNjQ2XHUwNjQ4XHUwNjQ2XHUw''@;'; put 'put ''NjI4XHUwNjMxX1x1MDYyZlx1MDYyY1x1MDY0Nlx1MDYyOFx1MDYzMSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwNjRhXHUwNjQ2XHUwNjI3XHUwNjRhXHUwNjMxX1x1MDY0MVx1MDYyOFx1MDYzMVx1MDYyN1x1MDY0YVx1MDYzMV9cdTA2NDVcdTA2MjdcdTA2MzFcdTA2MzNfXHUwNjIz''@;'; put 'put ''XHUwNjI4XHUwNjMxXHUwNjRhXHUwNjQ0X1x1MDY0NVx1MDYyN1x1MDY0YV9cdTA2NGFcdTA2NDhcdTA2NDZcdTA2NGFcdTA2NDhfXHUwNjRhXHUwNjQ4XHUwNjQ0XHUwNjRhXHUwNjQ4XHUwNjMyX1x1MDYzYVx1MDYzNFx1MDYyYV9cdTA2MzRcdTA2MmFcdTA2NDZcdTA2MjhcdTA2MzFfXHUw''@;'; put 'put ''NjIzXHUwNjQzXHUwNjJhXHUwNjQ4XHUwNjI4XHUwNjMxX1x1MDY0Nlx1MDY0OFx1MDY0Nlx1MDYyOFx1MDYzMV9cdTA2MmZcdTA2MmNcdTA2NDZcdTA2MjhcdTA2MzEiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MDYyN1x1MDY0NFx1MDYyM1x1MDYyZFx1MDYyZl9cdTA2MjdcdTA2NDRcdTA2''@;'; put 'put ''MjVcdTA2MmFcdTA2NDZcdTA2NGFcdTA2NDZfXHUwNjI3XHUwNjQ0XHUwNjJiXHUwNjQ0XHUwNjI3XHUwNjJiXHUwNjI3XHUwNjIxX1x1MDYyN1x1MDY0NFx1MDYyM1x1MDYzMVx1MDYyOFx1MDYzOVx1MDYyN1x1MDYyMV9cdTA2MjdcdTA2NDRcdTA2MmVcdTA2NDVcdTA2NGFcdTA2MzNfXHUw''@;'; put 'put ''NjI3XHUwNjQ0XHUwNjJjXHUwNjQ1XHUwNjM5XHUwNjI5X1x1MDYyN1x1MDY0NFx1MDYzM1x1MDYyOFx1MDYyYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA2MjdcdTA2MmRcdTA2MmZfXHUwNjI3XHUwNjJhXHUwNjQ2XHUwNjRhXHUwNjQ2X1x1MDYyYlx1MDY0NFx1MDYyN1x1MDYy''@;'; put 'put ''Ylx1MDYyN1x1MDYyMV9cdTA2MjdcdTA2MzFcdTA2MjhcdTA2MzlcdTA2MjdcdTA2MjFfXHUwNjJlXHUwNjQ1XHUwNjRhXHUwNjMzX1x1MDYyY1x1MDY0NVx1MDYzOVx1MDYyOV9cdTA2MzNcdTA2MjhcdTA2MmEiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDYyZF9cdTA2NDZfXHUwNjJi''@;'; put 'put ''X1x1MDYzMV9cdTA2MmVfXHUwNjJjX1x1MDYzMyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExM''@;'; put 'put ''OiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA2MjdcdTA2NDRcdTA2NGFcdTA2NDhcdTA2NDUgXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLG5leHREYXk6IltcdTA2M2FcdTA2MmZcdTA2''@;'; put 'put ''MjcgXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLG5leHRXZWVrOiJkZGRkIFtcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbGFzdERheToiW1x1MDYyM1x1MDY0NVx1''@;'; put 'put ''MDYzMyBcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbGFzdFdlZWs6ImRkZGQgW1x1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZl''@;'; put 'put ''VGltZTp7ZnV0dXJlOiJcdTA2NDFcdTA2NGEgJXMiLHBhc3Q6Ilx1MDY0NVx1MDY0Nlx1MDYzMCAlcyIsczoiXHUwNjJiXHUwNjQ4XHUwNjI3XHUwNjQ2IixzczoiJWQgXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjI5IixtOiJcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MjkiLG1t''@;'; put 'put ''OiIlZCBcdTA2MmZcdTA2NDJcdTA2MjdcdTA2MjZcdTA2NDIiLGg6Ilx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOSIsaGg6IiVkIFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyN1x1MDYyYSIsZDoiXHUwNjRhXHUwNjQ4XHUwNjQ1IixkZDoiJWQgXHUwNjIzXHUwNjRhXHUwNjI3XHUwNjQ1IixNOiJc''@;'; put 'put ''dTA2MzRcdTA2NDdcdTA2MzEiLE1NOiIlZCBcdTA2MjNcdTA2MzRcdTA2NDdcdTA2MzEiLHk6Ilx1MDYzM1x1MDY0Nlx1MDYyOSIseXk6IiVkIFx1MDYzM1x1MDY0Nlx1MDY0OFx1MDYyN1x1MDYyYSJ9LHdlZWs6e2RvdzowLGRveToxMn19KX0oeSg5NzU4NikpfSw0MTYzODpmdW5jdGlvbih1''@;'; put 'put ''ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7dmFyIF89ezE6IjEiLDI6IjIiLDM6IjMiLDQ6IjQiLDU6IjUiLDY6IjYiLDc6IjciLDg6IjgiLDk6IjkiLDA6IjAifSxnPWZ1bmN0aW9uKE8pe3JldHVybiAwPT09Tz8wOjE9PT1PPzE6Mj09PU8/MjpPJTEwMD49MyYmTyUxMDA8PTEw''@;'; put 'put ''PzM6TyUxMDA+PTExPzQ6NX0sQj17czpbIlx1MDYyM1x1MDY0Mlx1MDY0NCBcdTA2NDVcdTA2NDYgXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjI5IiwiXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjI5IFx1MDY0OFx1MDYyN1x1MDYyZFx1MDYyZlx1MDYyOSIsWyJcdTA2MmJcdTA2''@;'; put 'put ''MjdcdTA2NDZcdTA2NGFcdTA2MmFcdTA2MjdcdTA2NDYiLCJcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MmFcdTA2NGFcdTA2NDYiXSwiJWQgXHUwNjJiXHUwNjQ4XHUwNjI3XHUwNjQ2IiwiJWQgXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjI5IiwiJWQgXHUwNjJiXHUwNjI3XHUw''@;'; put 'put ''NjQ2XHUwNjRhXHUwNjI5Il0sbTpbIlx1MDYyM1x1MDY0Mlx1MDY0NCBcdTA2NDVcdTA2NDYgXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjI5IiwiXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjI5IFx1MDY0OFx1MDYyN1x1MDYyZFx1MDYyZlx1MDYyOSIsWyJcdTA2MmZcdTA2NDJc''@;'; put 'put ''dTA2NGFcdTA2NDJcdTA2MmFcdTA2MjdcdTA2NDYiLCJcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MmFcdTA2NGFcdTA2NDYiXSwiJWQgXHUwNjJmXHUwNjQyXHUwNjI3XHUwNjI2XHUwNjQyIiwiJWQgXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjI5IiwiJWQgXHUwNjJmXHUwNjQy''@;'; put 'put ''XHUwNjRhXHUwNjQyXHUwNjI5Il0saDpbIlx1MDYyM1x1MDY0Mlx1MDY0NCBcdTA2NDVcdTA2NDYgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5IiwiXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5IFx1MDY0OFx1MDYyN1x1MDYyZFx1MDYyZlx1MDYyOSIsWyJcdTA2MzNcdTA2MjdcdTA2MzlcdTA2''@;'; put 'put ''MmFcdTA2MjdcdTA2NDYiLCJcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MmFcdTA2NGFcdTA2NDYiXSwiJWQgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI3XHUwNjJhIiwiJWQgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5IiwiJWQgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5Il0sZDpbIlx1MDYyM1x1''@;'; put 'put ''MDY0Mlx1MDY0NCBcdTA2NDVcdTA2NDYgXHUwNjRhXHUwNjQ4XHUwNjQ1IiwiXHUwNjRhXHUwNjQ4XHUwNjQ1IFx1MDY0OFx1MDYyN1x1MDYyZFx1MDYyZiIsWyJcdTA2NGFcdTA2NDhcdTA2NDVcdTA2MjdcdTA2NDYiLCJcdTA2NGFcdTA2NDhcdTA2NDVcdTA2NGFcdTA2NDYiXSwiJWQgXHUw''@;'; put 'put ''NjIzXHUwNjRhXHUwNjI3XHUwNjQ1IiwiJWQgXHUwNjRhXHUwNjQ4XHUwNjQ1XHUwNjRiXHUwNjI3IiwiJWQgXHUwNjRhXHUwNjQ4XHUwNjQ1Il0sTTpbIlx1MDYyM1x1MDY0Mlx1MDY0NCBcdTA2NDVcdTA2NDYgXHUwNjM0XHUwNjQ3XHUwNjMxIiwiXHUwNjM0XHUwNjQ3XHUwNjMxIFx1MDY0''@;'; put 'put ''OFx1MDYyN1x1MDYyZFx1MDYyZiIsWyJcdTA2MzRcdTA2NDdcdTA2MzFcdTA2MjdcdTA2NDYiLCJcdTA2MzRcdTA2NDdcdTA2MzFcdTA2NGFcdTA2NDYiXSwiJWQgXHUwNjIzXHUwNjM0XHUwNjQ3XHUwNjMxIiwiJWQgXHUwNjM0XHUwNjQ3XHUwNjMxXHUwNjI3IiwiJWQgXHUwNjM0XHUwNjQ3''@;'; put 'put ''XHUwNjMxIl0seTpbIlx1MDYyM1x1MDY0Mlx1MDY0NCBcdTA2NDVcdTA2NDYgXHUwNjM5XHUwNjI3XHUwNjQ1IiwiXHUwNjM5XHUwNjI3XHUwNjQ1IFx1MDY0OFx1MDYyN1x1MDYyZFx1MDYyZiIsWyJcdTA2MzlcdTA2MjdcdTA2NDVcdTA2MjdcdTA2NDYiLCJcdTA2MzlcdTA2MjdcdTA2NDVc''@;'; put 'put ''dTA2NGFcdTA2NDYiXSwiJWQgXHUwNjIzXHUwNjM5XHUwNjQ4XHUwNjI3XHUwNjQ1IiwiJWQgXHUwNjM5XHUwNjI3XHUwNjQ1XHUwNjRiXHUwNjI3IiwiJWQgXHUwNjM5XHUwNjI3XHUwNjQ1Il19LHc9ZnVuY3Rpb24oTyl7cmV0dXJuIGZ1bmN0aW9uKHosTixMLEspe3ZhciBVPWcoeiksVz1C''@;'; put 'put ''W09dW2coeildO3JldHVybiAyPT09VSYmKFc9V1tOPzA6MV0pLFcucmVwbGFjZSgvJWQvaSx6KX19LFA9WyJcdTA2NGFcdTA2NDZcdTA2MjdcdTA2NGFcdTA2MzEiLCJcdTA2NDFcdTA2MjhcdTA2MzFcdTA2MjdcdTA2NGFcdTA2MzEiLCJcdTA2NDVcdTA2MjdcdTA2MzFcdTA2MzMiLCJcdTA2''@;'; put 'put ''MjNcdTA2MjhcdTA2MzFcdTA2NGFcdTA2NDQiLCJcdTA2NDVcdTA2MjdcdTA2NGFcdTA2NDgiLCJcdTA2NGFcdTA2NDhcdTA2NDZcdTA2NGFcdTA2NDgiLCJcdTA2NGFcdTA2NDhcdTA2NDRcdTA2NGFcdTA2NDgiLCJcdTA2MjNcdTA2M2FcdTA2MzNcdTA2MzdcdTA2MzMiLCJcdTA2MzNcdTA2''@;'; put 'put ''MjhcdTA2MmFcdTA2NDVcdTA2MjhcdTA2MzEiLCJcdTA2MjNcdTA2NDNcdTA2MmFcdTA2NDhcdTA2MjhcdTA2MzEiLCJcdTA2NDZcdTA2NDhcdTA2NDFcdTA2NDVcdTA2MjhcdTA2MzEiLCJcdTA2MmZcdTA2NGFcdTA2MzNcdTA2NDVcdTA2MjhcdTA2MzEiXTtJLmRlZmluZUxvY2FsZSgiYXIt''@;'; put 'put ''bHkiLHttb250aHM6UCxtb250aHNTaG9ydDpQLHdlZWtkYXlzOiJcdTA2MjdcdTA2NDRcdTA2MjNcdTA2MmRcdTA2MmZfXHUwNjI3XHUwNjQ0XHUwNjI1XHUwNjJiXHUwNjQ2XHUwNjRhXHUwNjQ2X1x1MDYyN1x1MDY0NFx1MDYyYlx1MDY0NFx1MDYyN1x1MDYyYlx1MDYyN1x1MDYyMV9cdTA2''@;'; put 'put ''MjdcdTA2NDRcdTA2MjNcdTA2MzFcdTA2MjhcdTA2MzlcdTA2MjdcdTA2MjFfXHUwNjI3XHUwNjQ0XHUwNjJlXHUwNjQ1XHUwNjRhXHUwNjMzX1x1MDYyN1x1MDY0NFx1MDYyY1x1MDY0NVx1MDYzOVx1MDYyOV9cdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjhcdTA2MmEiLnNwbGl0KCJfIiksd2Vl''@;'; put 'put ''a2RheXNTaG9ydDoiXHUwNjIzXHUwNjJkXHUwNjJmX1x1MDYyNVx1MDYyYlx1MDY0Nlx1MDY0YVx1MDY0Nl9cdTA2MmJcdTA2NDRcdTA2MjdcdTA2MmJcdTA2MjdcdTA2MjFfXHUwNjIzXHUwNjMxXHUwNjI4XHUwNjM5XHUwNjI3XHUwNjIxX1x1MDYyZVx1MDY0NVx1MDY0YVx1MDYzM19cdTA2''@;'; put 'put ''MmNcdTA2NDVcdTA2MzlcdTA2MjlfXHUwNjMzXHUwNjI4XHUwNjJhIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA2MmRfXHUwNjQ2X1x1MDYyYl9cdTA2MzFfXHUwNjJlX1x1MDYyY19cdTA2MzMiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntM''@;'; put 'put ''VDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkQvXHUyMDBmTS9cdTIwMGZZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxtZXJpZGllbVBhcnNlOi9cdTA2MzV8XHUwNjQ1Lyxpc1BNOmZ1bmN0aW9u''@;'; put 'put ''KE8pe3JldHVybiJcdTA2NDUiPT09T30sbWVyaWRpZW06ZnVuY3Rpb24oTyx6LE4pe3JldHVybiBPPDEyPyJcdTA2MzUiOiJcdTA2NDUifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDYyN1x1MDY0NFx1MDY0YVx1MDY0OFx1MDY0NSBcdTA2MzlcdTA2NDZcdTA2MmYgXHUwNjI3XHUwNjQ0XHUw''@;'; put 'put ''NjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbmV4dERheToiW1x1MDYzYVx1MDYyZlx1MDY0Ylx1MDYyNyBcdTA2MzlcdTA2NDZcdTA2MmYgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x1MDYzOVx1MDY0Nlx1MDYyZiBcdTA2Mjdc''@;'; put 'put ''dTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixsYXN0RGF5OiJbXHUwNjIzXHUwNjQ1XHUwNjMzIFx1MDYzOVx1MDY0Nlx1MDYyZiBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixsYXN0V2VlazoiZGRkZCBbXHUwNjM5XHUwNjQ2XHUwNjJmIFx1MDYy''@;'; put 'put ''N1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDYyOFx1MDYzOVx1MDYyZiAlcyIscGFzdDoiXHUwNjQ1XHUwNjQ2XHUwNjMwICVzIixzOncoInMiKSxzczp3KCJzIiksbTp3KCJtIiksbW06dygibSIpLGg6''@;'; put 'put ''dygiaCIpLGhoOncoImgiKSxkOncoImQiKSxkZDp3KCJkIiksTTp3KCJNIiksTU06dygiTSIpLHk6dygieSIpLHl5OncoInkiKX0scHJlcGFyc2U6ZnVuY3Rpb24oTyl7cmV0dXJuIE8ucmVwbGFjZSgvXHUwNjBjL2csIiwiKX0scG9zdGZvcm1hdDpmdW5jdGlvbihPKXtyZXR1cm4gTy5yZXBs''@;'; put 'put ''YWNlKC9cZC9nLGZ1bmN0aW9uKHope3JldHVybiBfW3pdfSkucmVwbGFjZSgvLC9nLCJcdTA2MGMiKX0sd2Vlazp7ZG93OjYsZG95OjEyfX0pfSh5KDk3NTg2KSl9LDg3ODIzOmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgiYXItbWEi''@;'; put 'put ''LHttb250aHM6Ilx1MDY0YVx1MDY0Nlx1MDYyN1x1MDY0YVx1MDYzMV9cdTA2NDFcdTA2MjhcdTA2MzFcdTA2MjdcdTA2NGFcdTA2MzFfXHUwNjQ1XHUwNjI3XHUwNjMxXHUwNjMzX1x1MDYyM1x1MDYyOFx1MDYzMVx1MDY0YVx1MDY0NF9cdTA2NDVcdTA2MjdcdTA2NGFfXHUwNjRhXHUwNjQ4''@;'; put 'put ''XHUwNjQ2XHUwNjRhXHUwNjQ4X1x1MDY0YVx1MDY0OFx1MDY0NFx1MDY0YVx1MDY0OFx1MDYzMl9cdTA2M2FcdTA2MzRcdTA2MmFfXHUwNjM0XHUwNjJhXHUwNjQ2XHUwNjI4XHUwNjMxX1x1MDYyM1x1MDY0M1x1MDYyYVx1MDY0OFx1MDYyOFx1MDYzMV9cdTA2NDZcdTA2NDhcdTA2NDZcdTA2''@;'; put 'put ''MjhcdTA2MzFfXHUwNjJmXHUwNjJjXHUwNjQ2XHUwNjI4XHUwNjMxIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTA2NGFcdTA2NDZcdTA2MjdcdTA2NGFcdTA2MzFfXHUwNjQxXHUwNjI4XHUwNjMxXHUwNjI3XHUwNjRhXHUwNjMxX1x1MDY0NVx1MDYyN1x1MDYzMVx1MDYzM19cdTA2MjNc''@;'; put 'put ''dTA2MjhcdTA2MzFcdTA2NGFcdTA2NDRfXHUwNjQ1XHUwNjI3XHUwNjRhX1x1MDY0YVx1MDY0OFx1MDY0Nlx1MDY0YVx1MDY0OF9cdTA2NGFcdTA2NDhcdTA2NDRcdTA2NGFcdTA2NDhcdTA2MzJfXHUwNjNhXHUwNjM0XHUwNjJhX1x1MDYzNFx1MDYyYVx1MDY0Nlx1MDYyOFx1MDYzMV9cdTA2''@;'; put 'put ''MjNcdTA2NDNcdTA2MmFcdTA2NDhcdTA2MjhcdTA2MzFfXHUwNjQ2XHUwNjQ4XHUwNjQ2XHUwNjI4XHUwNjMxX1x1MDYyZlx1MDYyY1x1MDY0Nlx1MDYyOFx1MDYzMSIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUwNjI3XHUwNjQ0XHUwNjIzXHUwNjJkXHUwNjJmX1x1MDYyN1x1MDY0NFx1MDYy''@;'; put 'put ''NVx1MDYyYlx1MDY0Nlx1MDY0YVx1MDY0Nl9cdTA2MjdcdTA2NDRcdTA2MmJcdTA2NDRcdTA2MjdcdTA2MmJcdTA2MjdcdTA2MjFfXHUwNjI3XHUwNjQ0XHUwNjIzXHUwNjMxXHUwNjI4XHUwNjM5XHUwNjI3XHUwNjIxX1x1MDYyN1x1MDY0NFx1MDYyZVx1MDY0NVx1MDY0YVx1MDYzM19cdTA2''@;'; put 'put ''MjdcdTA2NDRcdTA2MmNcdTA2NDVcdTA2MzlcdTA2MjlfXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI4XHUwNjJhIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDYyN1x1MDYyZFx1MDYyZl9cdTA2MjdcdTA2MmJcdTA2NDZcdTA2NGFcdTA2NDZfXHUwNjJiXHUwNjQ0XHUwNjI3XHUwNjJi''@;'; put 'put ''XHUwNjI3XHUwNjIxX1x1MDYyN1x1MDYzMVx1MDYyOFx1MDYzOVx1MDYyN1x1MDYyMV9cdTA2MmVcdTA2NDVcdTA2NGFcdTA2MzNfXHUwNjJjXHUwNjQ1XHUwNjM5XHUwNjI5X1x1MDYzM1x1MDYyOFx1MDYyYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNjJkX1x1MDY0Nl9cdTA2MmJf''@;'; put 'put ''XHUwNjMxX1x1MDYyZV9cdTA2MmNfXHUwNjMzIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6''@;'; put 'put ''ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDYyN1x1MDY0NFx1MDY0YVx1MDY0OFx1MDY0NSBcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbmV4dERheToiW1x1MDYzYVx1MDYyZlx1MDYy''@;'; put 'put ''NyBcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixsYXN0RGF5OiJbXHUwNjIzXHUwNjQ1XHUw''@;'; put 'put ''NjMzIFx1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixsYXN0V2VlazoiZGRkZCBbXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVU''@;'; put 'put ''aW1lOntmdXR1cmU6Ilx1MDY0MVx1MDY0YSAlcyIscGFzdDoiXHUwNjQ1XHUwNjQ2XHUwNjMwICVzIixzOiJcdTA2MmJcdTA2NDhcdTA2MjdcdTA2NDYiLHNzOiIlZCBcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MjkiLG06Ilx1MDYyZlx1MDY0Mlx1MDY0YVx1MDY0Mlx1MDYyOSIsbW06''@;'; put 'put ''IiVkIFx1MDYyZlx1MDY0Mlx1MDYyN1x1MDYyNlx1MDY0MiIsaDoiXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5IixoaDoiJWQgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI3XHUwNjJhIixkOiJcdTA2NGFcdTA2NDhcdTA2NDUiLGRkOiIlZCBcdTA2MjNcdTA2NGFcdTA2MjdcdTA2NDUiLE06Ilx1''@;'; put 'put ''MDYzNFx1MDY0N1x1MDYzMSIsTU06IiVkIFx1MDYyM1x1MDYzNFx1MDY0N1x1MDYzMSIseToiXHUwNjMzXHUwNjQ2XHUwNjI5Iix5eToiJWQgXHUwNjMzXHUwNjQ2XHUwNjQ4XHUwNjI3XHUwNjJhIn0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KHkoOTc1ODYpKX0sNzcxMjpmdW5jdGlvbih1ZSxY''@;'; put 'put ''LHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7dmFyIF89ezE6Ilx1MDY2MSIsMjoiXHUwNjYyIiwzOiJcdTA2NjMiLDQ6Ilx1MDY2NCIsNToiXHUwNjY1Iiw2OiJcdTA2NjYiLDc6Ilx1MDY2NyIsODoiXHUwNjY4Iiw5OiJcdTA2NjkiLDA6Ilx1MDY2MCJ9LGc9eyJcdTA2NjEiOiIxIiwi''@;'; put 'put ''XHUwNjYyIjoiMiIsIlx1MDY2MyI6IjMiLCJcdTA2NjQiOiI0IiwiXHUwNjY1IjoiNSIsIlx1MDY2NiI6IjYiLCJcdTA2NjciOiI3IiwiXHUwNjY4IjoiOCIsIlx1MDY2OSI6IjkiLCJcdTA2NjAiOiIwIn07SS5kZWZpbmVMb2NhbGUoImFyLXBzIix7bW9udGhzOiJcdTA2NDNcdTA2MjdcdTA2''@;'; put 'put ''NDZcdTA2NDhcdTA2NDYgXHUwNjI3XHUwNjQ0XHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhX1x1MDYzNFx1MDYyOFx1MDYyN1x1MDYzN19cdTA2MjJcdTA2MzBcdTA2MjdcdTA2MzFfXHUwNjQ2XHUwNjRhXHUwNjMzXHUwNjI3XHUwNjQ2X1x1MDYyM1x1MDY0YVx1MDY1MVx1MDYyN1x1MDYzMV9c''@;'; put 'put ''dTA2MmRcdTA2MzJcdTA2NGFcdTA2MzFcdTA2MjdcdTA2NDZfXHUwNjJhXHUwNjQ1XHUwNjUxXHUwNjQ4XHUwNjMyX1x1MDYyMlx1MDYyOF9cdTA2MjNcdTA2NGFcdTA2NDRcdTA2NDhcdTA2NDRfXHUwNjJhXHUwNjM0XHUwNjMxXHUwNjRhIFx1MDYyN1x1MDY0NFx1MDYyM1x1MDY0OFx1MDY1''@;'; put 'put ''MVx1MDY0NF9cdTA2MmFcdTA2MzRcdTA2MzFcdTA2NGFcdTA2NDYgXHUwNjI3XHUwNjQ0XHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhX1x1MDY0M1x1MDYyN1x1MDY0Nlx1MDY0OFx1MDY0NiBcdTA2MjdcdTA2NDRcdTA2MjNcdTA2NDhcdTA2NTFcdTA2NDQiLnNwbGl0KCJfIiksbW9udGhzU2hv''@;'; put 'put ''cnQ6Ilx1MDY0M1x1MDY2Ml9cdTA2MzRcdTA2MjhcdTA2MjdcdTA2MzdfXHUwNjIyXHUwNjMwXHUwNjI3XHUwNjMxX1x1MDY0Nlx1MDY0YVx1MDYzM1x1MDYyN1x1MDY0Nl9cdTA2MjNcdTA2NGFcdTA2NTFcdTA2MjdcdTA2MzFfXHUwNjJkXHUwNjMyXHUwNjRhXHUwNjMxXHUwNjI3XHUwNjQ2''@;'; put 'put ''X1x1MDYyYVx1MDY0NVx1MDY1MVx1MDY0OFx1MDYzMl9cdTA2MjJcdTA2MjhfXHUwNjIzXHUwNjRhXHUwNjQ0XHUwNjQ4XHUwNjQ0X1x1MDYyYVx1MDY2MV9cdTA2MmFcdTA2NjJfXHUwNjQzXHUwNjYxIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTA2MjdcdTA2NDRcdTA2MjNcdTA2MmRcdTA2''@;'; put 'put ''MmZfXHUwNjI3XHUwNjQ0XHUwNjI1XHUwNjJiXHUwNjQ2XHUwNjRhXHUwNjQ2X1x1MDYyN1x1MDY0NFx1MDYyYlx1MDY0NFx1MDYyN1x1MDYyYlx1MDYyN1x1MDYyMV9cdTA2MjdcdTA2NDRcdTA2MjNcdTA2MzFcdTA2MjhcdTA2MzlcdTA2MjdcdTA2MjFfXHUwNjI3XHUwNjQ0XHUwNjJlXHUw''@;'; put 'put ''NjQ1XHUwNjRhXHUwNjMzX1x1MDYyN1x1MDY0NFx1MDYyY1x1MDY0NVx1MDYzOVx1MDYyOV9cdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjhcdTA2MmEiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwNjIzXHUwNjJkXHUwNjJmX1x1MDYyNVx1MDYyYlx1MDY0Nlx1MDY0YVx1MDY0Nl9cdTA2''@;'; put 'put ''MmJcdTA2NDRcdTA2MjdcdTA2MmJcdTA2MjdcdTA2MjFfXHUwNjIzXHUwNjMxXHUwNjI4XHUwNjM5XHUwNjI3XHUwNjIxX1x1MDYyZVx1MDY0NVx1MDY0YVx1MDYzM19cdTA2MmNcdTA2NDVcdTA2MzlcdTA2MjlfXHUwNjMzXHUwNjI4XHUwNjJhIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJc''@;'; put 'put ''dTA2MmRfXHUwNjQ2X1x1MDYyYl9cdTA2MzFfXHUwNjJlX1x1MDYyY19cdTA2MzMiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1N''@;'; put 'put ''TU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBEIE1NTU0gWVlZWSBISDptbSJ9LG1lcmlkaWVtUGFyc2U6L1x1MDYzNXxcdTA2NDUvLGlzUE06ZnVuY3Rpb24odyl7cmV0dXJuIlx1MDY0NSI9PT13fSxtZXJpZGllbTpmdW5jdGlvbih3LFAsRil7cmV0dXJuIHc8MTI/Ilx1MDYzNSI6Ilx1MDY0''@;'; put 'put ''NSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwNjI3XHUwNjQ0XHUwNjRhXHUwNjQ4XHUwNjQ1IFx1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixuZXh0RGF5OiJbXHUwNjNhXHUwNjJmXHUwNjI3IFx1MDYzOVx1MDY0NFx1MDY0OSBc''@;'; put 'put ''dTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixuZXh0V2VlazoiZGRkZCBbXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLGxhc3REYXk6IltcdTA2MjNcdTA2NDVcdTA2MzMgXHUwNjM5XHUwNjQ0XHUwNjQ5''@;'; put 'put ''IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLGxhc3RXZWVrOiJkZGRkIFtcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUwNjQxXHUw''@;'; put 'put ''NjRhICVzIixwYXN0OiJcdTA2NDVcdTA2NDZcdTA2MzAgJXMiLHM6Ilx1MDYyYlx1MDY0OFx1MDYyN1x1MDY0NiIsc3M6IiVkIFx1MDYyYlx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyOSIsbToiXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjI5IixtbToiJWQgXHUwNjJmXHUwNjQyXHUwNjI3''@;'; put 'put ''XHUwNjI2XHUwNjQyIixoOiJcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjkiLGhoOiIlZCBcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjdcdTA2MmEiLGQ6Ilx1MDY0YVx1MDY0OFx1MDY0NSIsZGQ6IiVkIFx1MDYyM1x1MDY0YVx1MDYyN1x1MDY0NSIsTToiXHUwNjM0XHUwNjQ3XHUwNjMxIixNTToi''@;'; put 'put ''JWQgXHUwNjIzXHUwNjM0XHUwNjQ3XHUwNjMxIix5OiJcdTA2MzNcdTA2NDZcdTA2MjkiLHl5OiIlZCBcdTA2MzNcdTA2NDZcdTA2NDhcdTA2MjdcdTA2MmEifSxwcmVwYXJzZTpmdW5jdGlvbih3KXtyZXR1cm4gdy5yZXBsYWNlKC9bXHUwNjYzXHUwNjY0XHUwNjY1XHUwNjY2XHUwNjY3XHUw''@;'; put 'put ''NjY4XHUwNjY5XHUwNjYwXS9nLGZ1bmN0aW9uKFApe3JldHVybiBnW1BdfSkuc3BsaXQoIiIpLnJldmVyc2UoKS5qb2luKCIiKS5yZXBsYWNlKC9bXHUwNjYxXHUwNjYyXSg/IVtcdTA2MmFcdTA2NDNdKS9nLGZ1bmN0aW9uKFApe3JldHVybiBnW1BdfSkuc3BsaXQoIiIpLnJldmVyc2UoKS5q''@;'; put 'put ''b2luKCIiKS5yZXBsYWNlKC9cdTA2MGMvZywiLCIpfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKHcpe3JldHVybiB3LnJlcGxhY2UoL1xkL2csZnVuY3Rpb24oUCl7cmV0dXJuIF9bUF19KS5yZXBsYWNlKC8sL2csIlx1MDYwYyIpfSx3ZWVrOntkb3c6MCxkb3k6Nn19KX0oeSg5NzU4NikpfSw3ODI2''@;'; put 'put ''MTpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7dmFyIF89ezE6Ilx1MDY2MSIsMjoiXHUwNjYyIiwzOiJcdTA2NjMiLDQ6Ilx1MDY2NCIsNToiXHUwNjY1Iiw2OiJcdTA2NjYiLDc6Ilx1MDY2NyIsODoiXHUwNjY4Iiw5OiJcdTA2NjkiLDA6Ilx1MDY2MCJ9LGc9''@;'; put 'put ''eyJcdTA2NjEiOiIxIiwiXHUwNjYyIjoiMiIsIlx1MDY2MyI6IjMiLCJcdTA2NjQiOiI0IiwiXHUwNjY1IjoiNSIsIlx1MDY2NiI6IjYiLCJcdTA2NjciOiI3IiwiXHUwNjY4IjoiOCIsIlx1MDY2OSI6IjkiLCJcdTA2NjAiOiIwIn07SS5kZWZpbmVMb2NhbGUoImFyLXNhIix7bW9udGhzOiJc''@;'; put 'put ''dTA2NGFcdTA2NDZcdTA2MjdcdTA2NGFcdTA2MzFfXHUwNjQxXHUwNjI4XHUwNjMxXHUwNjI3XHUwNjRhXHUwNjMxX1x1MDY0NVx1MDYyN1x1MDYzMVx1MDYzM19cdTA2MjNcdTA2MjhcdTA2MzFcdTA2NGFcdTA2NDRfXHUwNjQ1XHUwNjI3XHUwNjRhXHUwNjQ4X1x1MDY0YVx1MDY0OFx1MDY0''@;'; put 'put ''Nlx1MDY0YVx1MDY0OF9cdTA2NGFcdTA2NDhcdTA2NDRcdTA2NGFcdTA2NDhfXHUwNjIzXHUwNjNhXHUwNjMzXHUwNjM3XHUwNjMzX1x1MDYzM1x1MDYyOFx1MDYyYVx1MDY0NVx1MDYyOFx1MDYzMV9cdTA2MjNcdTA2NDNcdTA2MmFcdTA2NDhcdTA2MjhcdTA2MzFfXHUwNjQ2XHUwNjQ4XHUw''@;'; put 'put ''NjQxXHUwNjQ1XHUwNjI4XHUwNjMxX1x1MDYyZlx1MDY0YVx1MDYzM1x1MDY0NVx1MDYyOFx1MDYzMSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwNjRhXHUwNjQ2XHUwNjI3XHUwNjRhXHUwNjMxX1x1MDY0MVx1MDYyOFx1MDYzMVx1MDYyN1x1MDY0YVx1MDYzMV9cdTA2NDVcdTA2Mjdc''@;'; put 'put ''dTA2MzFcdTA2MzNfXHUwNjIzXHUwNjI4XHUwNjMxXHUwNjRhXHUwNjQ0X1x1MDY0NVx1MDYyN1x1MDY0YVx1MDY0OF9cdTA2NGFcdTA2NDhcdTA2NDZcdTA2NGFcdTA2NDhfXHUwNjRhXHUwNjQ4XHUwNjQ0XHUwNjRhXHUwNjQ4X1x1MDYyM1x1MDYzYVx1MDYzM1x1MDYzN1x1MDYzM19cdTA2''@;'; put 'put ''MzNcdTA2MjhcdTA2MmFcdTA2NDVcdTA2MjhcdTA2MzFfXHUwNjIzXHUwNjQzXHUwNjJhXHUwNjQ4XHUwNjI4XHUwNjMxX1x1MDY0Nlx1MDY0OFx1MDY0MVx1MDY0NVx1MDYyOFx1MDYzMV9cdTA2MmZcdTA2NGFcdTA2MzNcdTA2NDVcdTA2MjhcdTA2MzEiLnNwbGl0KCJfIiksd2Vla2RheXM6''@;'; put 'put ''Ilx1MDYyN1x1MDY0NFx1MDYyM1x1MDYyZFx1MDYyZl9cdTA2MjdcdTA2NDRcdTA2MjVcdTA2MmJcdTA2NDZcdTA2NGFcdTA2NDZfXHUwNjI3XHUwNjQ0XHUwNjJiXHUwNjQ0XHUwNjI3XHUwNjJiXHUwNjI3XHUwNjIxX1x1MDYyN1x1MDY0NFx1MDYyM1x1MDYzMVx1MDYyOFx1MDYzOVx1MDYy''@;'; put 'put ''N1x1MDYyMV9cdTA2MjdcdTA2NDRcdTA2MmVcdTA2NDVcdTA2NGFcdTA2MzNfXHUwNjI3XHUwNjQ0XHUwNjJjXHUwNjQ1XHUwNjM5XHUwNjI5X1x1MDYyN1x1MDY0NFx1MDYzM1x1MDYyOFx1MDYyYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA2MjNcdTA2MmRcdTA2MmZfXHUwNjI1''@;'; put 'put ''XHUwNjJiXHUwNjQ2XHUwNjRhXHUwNjQ2X1x1MDYyYlx1MDY0NFx1MDYyN1x1MDYyYlx1MDYyN1x1MDYyMV9cdTA2MjNcdTA2MzFcdTA2MjhcdTA2MzlcdTA2MjdcdTA2MjFfXHUwNjJlXHUwNjQ1XHUwNjRhXHUwNjMzX1x1MDYyY1x1MDY0NVx1MDYzOVx1MDYyOV9cdTA2MzNcdTA2MjhcdTA2''@;'; put 'put ''MmEiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDYyZF9cdTA2NDZfXHUwNjJiX1x1MDYzMV9cdTA2MmVfXHUwNjJjX1x1MDYzMyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZ''@;'; put 'put ''WSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sbWVyaWRpZW1QYXJzZTovXHUwNjM1fFx1MDY0NS8saXNQTTpmdW5jdGlvbih3KXtyZXR1cm4iXHUwNjQ1Ij09PXd9LG1lcmlkaWVtOmZ1bmN0aW9uKHcsUCxG''@;'; put 'put ''KXtyZXR1cm4gdzwxMj8iXHUwNjM1IjoiXHUwNjQ1In0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA2MjdcdTA2NDRcdTA2NGFcdTA2NDhcdTA2NDUgXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLG5leHREYXk6IltcdTA2M2FcdTA2''@;'; put 'put ''MmZcdTA2MjcgXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLG5leHRXZWVrOiJkZGRkIFtcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbGFzdERheToiW1x1MDYyM1x1''@;'; put 'put ''MDY0NVx1MDYzMyBcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbGFzdFdlZWs6ImRkZGQgW1x1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixzYW1lRWxzZToiTCJ9LHJl''@;'; put 'put ''bGF0aXZlVGltZTp7ZnV0dXJlOiJcdTA2NDFcdTA2NGEgJXMiLHBhc3Q6Ilx1MDY0NVx1MDY0Nlx1MDYzMCAlcyIsczoiXHUwNjJiXHUwNjQ4XHUwNjI3XHUwNjQ2IixzczoiJWQgXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjI5IixtOiJcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2''@;'; put 'put ''MjkiLG1tOiIlZCBcdTA2MmZcdTA2NDJcdTA2MjdcdTA2MjZcdTA2NDIiLGg6Ilx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOSIsaGg6IiVkIFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyN1x1MDYyYSIsZDoiXHUwNjRhXHUwNjQ4XHUwNjQ1IixkZDoiJWQgXHUwNjIzXHUwNjRhXHUwNjI3XHUwNjQ1''@;'; put 'put ''IixNOiJcdTA2MzRcdTA2NDdcdTA2MzEiLE1NOiIlZCBcdTA2MjNcdTA2MzRcdTA2NDdcdTA2MzEiLHk6Ilx1MDYzM1x1MDY0Nlx1MDYyOSIseXk6IiVkIFx1MDYzM1x1MDY0Nlx1MDY0OFx1MDYyN1x1MDYyYSJ9LHByZXBhcnNlOmZ1bmN0aW9uKHcpe3JldHVybiB3LnJlcGxhY2UoL1tcdTA2''@;'; put 'put ''NjFcdTA2NjJcdTA2NjNcdTA2NjRcdTA2NjVcdTA2NjZcdTA2NjdcdTA2NjhcdTA2NjlcdTA2NjBdL2csZnVuY3Rpb24oUCl7cmV0dXJuIGdbUF19KS5yZXBsYWNlKC9cdTA2MGMvZywiLCIpfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKHcpe3JldHVybiB3LnJlcGxhY2UoL1xkL2csZnVuY3Rpb24o''@;'; put 'put ''UCl7cmV0dXJuIF9bUF19KS5yZXBsYWNlKC8sL2csIlx1MDYwYyIpfSx3ZWVrOntkb3c6MCxkb3k6Nn19KX0oeSg5NzU4NikpfSw1NjcwMzpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoImFyLXRuIix7bW9udGhzOiJcdTA2MmNcdTA2''@;'; put 'put ''MjdcdTA2NDZcdTA2NDFcdTA2NGFfXHUwNjQxXHUwNjRhXHUwNjQxXHUwNjMxXHUwNjRhX1x1MDY0NVx1MDYyN1x1MDYzMVx1MDYzM19cdTA2MjNcdTA2NDFcdTA2MzFcdTA2NGFcdTA2NDRfXHUwNjQ1XHUwNjI3XHUwNjRhX1x1MDYyY1x1MDY0OFx1MDYyN1x1MDY0Nl9cdTA2MmNcdTA2NDhc''@;'; put 'put ''dTA2NGFcdTA2NDRcdTA2NGFcdTA2MjlfXHUwNjIzXHUwNjQ4XHUwNjJhX1x1MDYzM1x1MDYyOFx1MDYyYVx1MDY0NVx1MDYyOFx1MDYzMV9cdTA2MjNcdTA2NDNcdTA2MmFcdTA2NDhcdTA2MjhcdTA2MzFfXHUwNjQ2XHUwNjQ4XHUwNjQxXHUwNjQ1XHUwNjI4XHUwNjMxX1x1MDYyZlx1MDY0''@;'; put 'put ''YVx1MDYzM1x1MDY0NVx1MDYyOFx1MDYzMSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwNjJjXHUwNjI3XHUwNjQ2XHUwNjQxXHUwNjRhX1x1MDY0MVx1MDY0YVx1MDY0MVx1MDYzMVx1MDY0YV9cdTA2NDVcdTA2MjdcdTA2MzFcdTA2MzNfXHUwNjIzXHUwNjQxXHUwNjMxXHUwNjRhXHUw''@;'; put 'put ''NjQ0X1x1MDY0NVx1MDYyN1x1MDY0YV9cdTA2MmNcdTA2NDhcdTA2MjdcdTA2NDZfXHUwNjJjXHUwNjQ4XHUwNjRhXHUwNjQ0XHUwNjRhXHUwNjI5X1x1MDYyM1x1MDY0OFx1MDYyYV9cdTA2MzNcdTA2MjhcdTA2MmFcdTA2NDVcdTA2MjhcdTA2MzFfXHUwNjIzXHUwNjQzXHUwNjJhXHUwNjQ4''@;'; put 'put ''XHUwNjI4XHUwNjMxX1x1MDY0Nlx1MDY0OFx1MDY0MVx1MDY0NVx1MDYyOFx1MDYzMV9cdTA2MmZcdTA2NGFcdTA2MzNcdTA2NDVcdTA2MjhcdTA2MzEiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MDYyN1x1MDY0NFx1MDYyM1x1MDYyZFx1MDYyZl9cdTA2MjdcdTA2NDRcdTA2MjVcdTA2MmJc''@;'; put 'put ''dTA2NDZcdTA2NGFcdTA2NDZfXHUwNjI3XHUwNjQ0XHUwNjJiXHUwNjQ0XHUwNjI3XHUwNjJiXHUwNjI3XHUwNjIxX1x1MDYyN1x1MDY0NFx1MDYyM1x1MDYzMVx1MDYyOFx1MDYzOVx1MDYyN1x1MDYyMV9cdTA2MjdcdTA2NDRcdTA2MmVcdTA2NDVcdTA2NGFcdTA2MzNfXHUwNjI3XHUwNjQ0''@;'; put 'put ''XHUwNjJjXHUwNjQ1XHUwNjM5XHUwNjI5X1x1MDYyN1x1MDY0NFx1MDYzM1x1MDYyOFx1MDYyYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA2MjNcdTA2MmRcdTA2MmZfXHUwNjI1XHUwNjJiXHUwNjQ2XHUwNjRhXHUwNjQ2X1x1MDYyYlx1MDY0NFx1MDYyN1x1MDYyYlx1MDYyN1x1''@;'; put 'put ''MDYyMV9cdTA2MjNcdTA2MzFcdTA2MjhcdTA2MzlcdTA2MjdcdTA2MjFfXHUwNjJlXHUwNjQ1XHUwNjRhXHUwNjMzX1x1MDYyY1x1MDY0NVx1MDYzOVx1MDYyOV9cdTA2MzNcdTA2MjhcdTA2MmEiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDYyZF9cdTA2NDZfXHUwNjJiX1x1MDYzMV9c''@;'; put 'put ''dTA2MmVfXHUwNjJjX1x1MDYzMyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQg''@;'; put 'put ''TU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA2MjdcdTA2NDRcdTA2NGFcdTA2NDhcdTA2NDUgXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLG5leHREYXk6IltcdTA2M2FcdTA2MmZcdTA2MjcgXHUwNjM5''@;'; put 'put ''XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLG5leHRXZWVrOiJkZGRkIFtcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbGFzdERheToiW1x1MDYyM1x1MDY0NVx1MDYzMyBcdTA2''@;'; put 'put ''MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbGFzdFdlZWs6ImRkZGQgW1x1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0''@;'; put 'put ''dXJlOiJcdTA2NDFcdTA2NGEgJXMiLHBhc3Q6Ilx1MDY0NVx1MDY0Nlx1MDYzMCAlcyIsczoiXHUwNjJiXHUwNjQ4XHUwNjI3XHUwNjQ2IixzczoiJWQgXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjI5IixtOiJcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MjkiLG1tOiIlZCBcdTA2''@;'; put 'put ''MmZcdTA2NDJcdTA2MjdcdTA2MjZcdTA2NDIiLGg6Ilx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOSIsaGg6IiVkIFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyN1x1MDYyYSIsZDoiXHUwNjRhXHUwNjQ4XHUwNjQ1IixkZDoiJWQgXHUwNjIzXHUwNjRhXHUwNjI3XHUwNjQ1IixNOiJcdTA2MzRcdTA2''@;'; put 'put ''NDdcdTA2MzEiLE1NOiIlZCBcdTA2MjNcdTA2MzRcdTA2NDdcdTA2MzEiLHk6Ilx1MDYzM1x1MDY0Nlx1MDYyOSIseXk6IiVkIFx1MDYzM1x1MDY0Nlx1MDY0OFx1MDYyN1x1MDYyYSJ9LHdlZWs6e2RvdzoxLGRveTo0fX0pfSh5KDk3NTg2KSl9LDMzMTA4OmZ1bmN0aW9uKHVlLFgseSl7IWZ1''@;'; put 'put ''bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz17MToiXHUwNjYxIiwyOiJcdTA2NjIiLDM6Ilx1MDY2MyIsNDoiXHUwNjY0Iiw1OiJcdTA2NjUiLDY6Ilx1MDY2NiIsNzoiXHUwNjY3Iiw4OiJcdTA2NjgiLDk6Ilx1MDY2OSIsMDoiXHUwNjYwIn0sZz17Ilx1MDY2MSI6IjEiLCJcdTA2NjIi''@;'; put 'put ''OiIyIiwiXHUwNjYzIjoiMyIsIlx1MDY2NCI6IjQiLCJcdTA2NjUiOiI1IiwiXHUwNjY2IjoiNiIsIlx1MDY2NyI6IjciLCJcdTA2NjgiOiI4IiwiXHUwNjY5IjoiOSIsIlx1MDY2MCI6IjAifSxCPWZ1bmN0aW9uKHope3JldHVybiAwPT09ej8wOjE9PT16PzE6Mj09PXo/Mjp6JTEwMD49MyYm''@;'; put 'put ''eiUxMDA8PTEwPzM6eiUxMDA+PTExPzQ6NX0sdz17czpbIlx1MDYyM1x1MDY0Mlx1MDY0NCBcdTA2NDVcdTA2NDYgXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjI5IiwiXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjI5IFx1MDY0OFx1MDYyN1x1MDYyZFx1MDYyZlx1MDYyOSIsWyJc''@;'; put 'put ''dTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MmFcdTA2MjdcdTA2NDYiLCJcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MmFcdTA2NGFcdTA2NDYiXSwiJWQgXHUwNjJiXHUwNjQ4XHUwNjI3XHUwNjQ2IiwiJWQgXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjI5IiwiJWQgXHUwNjJi''@;'; put 'put ''XHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjI5Il0sbTpbIlx1MDYyM1x1MDY0Mlx1MDY0NCBcdTA2NDVcdTA2NDYgXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjI5IiwiXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjI5IFx1MDY0OFx1MDYyN1x1MDYyZFx1MDYyZlx1MDYyOSIsWyJcdTA2''@;'; put 'put ''MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MmFcdTA2MjdcdTA2NDYiLCJcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MmFcdTA2NGFcdTA2NDYiXSwiJWQgXHUwNjJmXHUwNjQyXHUwNjI3XHUwNjI2XHUwNjQyIiwiJWQgXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjI5IiwiJWQgXHUw''@;'; put 'put ''NjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjI5Il0saDpbIlx1MDYyM1x1MDY0Mlx1MDY0NCBcdTA2NDVcdTA2NDYgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5IiwiXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5IFx1MDY0OFx1MDYyN1x1MDYyZFx1MDYyZlx1MDYyOSIsWyJcdTA2MzNcdTA2Mjdc''@;'; put 'put ''dTA2MzlcdTA2MmFcdTA2MjdcdTA2NDYiLCJcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MmFcdTA2NGFcdTA2NDYiXSwiJWQgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI3XHUwNjJhIiwiJWQgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5IiwiJWQgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5Il0sZDpb''@;'; put 'put ''Ilx1MDYyM1x1MDY0Mlx1MDY0NCBcdTA2NDVcdTA2NDYgXHUwNjRhXHUwNjQ4XHUwNjQ1IiwiXHUwNjRhXHUwNjQ4XHUwNjQ1IFx1MDY0OFx1MDYyN1x1MDYyZFx1MDYyZiIsWyJcdTA2NGFcdTA2NDhcdTA2NDVcdTA2MjdcdTA2NDYiLCJcdTA2NGFcdTA2NDhcdTA2NDVcdTA2NGFcdTA2NDYi''@;'; put 'put ''XSwiJWQgXHUwNjIzXHUwNjRhXHUwNjI3XHUwNjQ1IiwiJWQgXHUwNjRhXHUwNjQ4XHUwNjQ1XHUwNjRiXHUwNjI3IiwiJWQgXHUwNjRhXHUwNjQ4XHUwNjQ1Il0sTTpbIlx1MDYyM1x1MDY0Mlx1MDY0NCBcdTA2NDVcdTA2NDYgXHUwNjM0XHUwNjQ3XHUwNjMxIiwiXHUwNjM0XHUwNjQ3XHUw''@;'; put 'put ''NjMxIFx1MDY0OFx1MDYyN1x1MDYyZFx1MDYyZiIsWyJcdTA2MzRcdTA2NDdcdTA2MzFcdTA2MjdcdTA2NDYiLCJcdTA2MzRcdTA2NDdcdTA2MzFcdTA2NGFcdTA2NDYiXSwiJWQgXHUwNjIzXHUwNjM0XHUwNjQ3XHUwNjMxIiwiJWQgXHUwNjM0XHUwNjQ3XHUwNjMxXHUwNjI3IiwiJWQgXHUw''@;'; put 'put ''NjM0XHUwNjQ3XHUwNjMxIl0seTpbIlx1MDYyM1x1MDY0Mlx1MDY0NCBcdTA2NDVcdTA2NDYgXHUwNjM5XHUwNjI3XHUwNjQ1IiwiXHUwNjM5XHUwNjI3XHUwNjQ1IFx1MDY0OFx1MDYyN1x1MDYyZFx1MDYyZiIsWyJcdTA2MzlcdTA2MjdcdTA2NDVcdTA2MjdcdTA2NDYiLCJcdTA2MzlcdTA2''@;'; put 'put ''MjdcdTA2NDVcdTA2NGFcdTA2NDYiXSwiJWQgXHUwNjIzXHUwNjM5XHUwNjQ4XHUwNjI3XHUwNjQ1IiwiJWQgXHUwNjM5XHUwNjI3XHUwNjQ1XHUwNjRiXHUwNjI3IiwiJWQgXHUwNjM5XHUwNjI3XHUwNjQ1Il19LFA9ZnVuY3Rpb24oeil7cmV0dXJuIGZ1bmN0aW9uKE4sTCxLLFUpe3ZhciBX''@;'; put 'put ''PUIoTiksWT13W3pdW0IoTildO3JldHVybiAyPT09VyYmKFk9WVtMPzA6MV0pLFkucmVwbGFjZSgvJWQvaSxOKX19LEY9WyJcdTA2NGFcdTA2NDZcdTA2MjdcdTA2NGFcdTA2MzEiLCJcdTA2NDFcdTA2MjhcdTA2MzFcdTA2MjdcdTA2NGFcdTA2MzEiLCJcdTA2NDVcdTA2MjdcdTA2MzFcdTA2''@;'; put 'put ''MzMiLCJcdTA2MjNcdTA2MjhcdTA2MzFcdTA2NGFcdTA2NDQiLCJcdTA2NDVcdTA2MjdcdTA2NGFcdTA2NDgiLCJcdTA2NGFcdTA2NDhcdTA2NDZcdTA2NGFcdTA2NDgiLCJcdTA2NGFcdTA2NDhcdTA2NDRcdTA2NGFcdTA2NDgiLCJcdTA2MjNcdTA2M2FcdTA2MzNcdTA2MzdcdTA2MzMiLCJc''@;'; put 'put ''dTA2MzNcdTA2MjhcdTA2MmFcdTA2NDVcdTA2MjhcdTA2MzEiLCJcdTA2MjNcdTA2NDNcdTA2MmFcdTA2NDhcdTA2MjhcdTA2MzEiLCJcdTA2NDZcdTA2NDhcdTA2NDFcdTA2NDVcdTA2MjhcdTA2MzEiLCJcdTA2MmZcdTA2NGFcdTA2MzNcdTA2NDVcdTA2MjhcdTA2MzEiXTtJLmRlZmluZUxv''@;'; put 'put ''Y2FsZSgiYXIiLHttb250aHM6Rixtb250aHNTaG9ydDpGLHdlZWtkYXlzOiJcdTA2MjdcdTA2NDRcdTA2MjNcdTA2MmRcdTA2MmZfXHUwNjI3XHUwNjQ0XHUwNjI1XHUwNjJiXHUwNjQ2XHUwNjRhXHUwNjQ2X1x1MDYyN1x1MDY0NFx1MDYyYlx1MDY0NFx1MDYyN1x1MDYyYlx1MDYyN1x1MDYy''@;'; put 'put ''MV9cdTA2MjdcdTA2NDRcdTA2MjNcdTA2MzFcdTA2MjhcdTA2MzlcdTA2MjdcdTA2MjFfXHUwNjI3XHUwNjQ0XHUwNjJlXHUwNjQ1XHUwNjRhXHUwNjMzX1x1MDYyN1x1MDY0NFx1MDYyY1x1MDY0NVx1MDYzOVx1MDYyOV9cdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjhcdTA2MmEiLnNwbGl0KCJf''@;'; put 'put ''Iiksd2Vla2RheXNTaG9ydDoiXHUwNjIzXHUwNjJkXHUwNjJmX1x1MDYyNVx1MDYyYlx1MDY0Nlx1MDY0YVx1MDY0Nl9cdTA2MmJcdTA2NDRcdTA2MjdcdTA2MmJcdTA2MjdcdTA2MjFfXHUwNjIzXHUwNjMxXHUwNjI4XHUwNjM5XHUwNjI3XHUwNjIxX1x1MDYyZVx1MDY0NVx1MDY0YVx1MDYz''@;'; put 'put ''M19cdTA2MmNcdTA2NDVcdTA2MzlcdTA2MjlfXHUwNjMzXHUwNjI4XHUwNjJhIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA2MmRfXHUwNjQ2X1x1MDYyYl9cdTA2MzFfXHUwNjJlX1x1MDYyY19cdTA2MzMiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9y''@;'; put 'put ''bWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkQvXHUyMDBmTS9cdTIwMGZZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxtZXJpZGllbVBhcnNlOi9cdTA2MzV8XHUwNjQ1Lyxpc1BNOmZ1''@;'; put 'put ''bmN0aW9uKHope3JldHVybiJcdTA2NDUiPT09en0sbWVyaWRpZW06ZnVuY3Rpb24oeixOLEwpe3JldHVybiB6PDEyPyJcdTA2MzUiOiJcdTA2NDUifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDYyN1x1MDY0NFx1MDY0YVx1MDY0OFx1MDY0NSBcdTA2MzlcdTA2NDZcdTA2MmYgXHUwNjI3XHUw''@;'; put 'put ''NjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbmV4dERheToiW1x1MDYzYVx1MDYyZlx1MDY0Ylx1MDYyNyBcdTA2MzlcdTA2NDZcdTA2MmYgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x1MDYzOVx1MDY0Nlx1MDYyZiBc''@;'; put 'put ''dTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixsYXN0RGF5OiJbXHUwNjIzXHUwNjQ1XHUwNjMzIFx1MDYzOVx1MDY0Nlx1MDYyZiBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixsYXN0V2VlazoiZGRkZCBbXHUwNjM5XHUwNjQ2XHUwNjJm''@;'; put 'put ''IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDYyOFx1MDYzOVx1MDYyZiAlcyIscGFzdDoiXHUwNjQ1XHUwNjQ2XHUwNjMwICVzIixzOlAoInMiKSxzczpQKCJzIiksbTpQKCJtIiksbW06UCgi''@;'; put 'put ''bSIpLGg6UCgiaCIpLGhoOlAoImgiKSxkOlAoImQiKSxkZDpQKCJkIiksTTpQKCJNIiksTU06UCgiTSIpLHk6UCgieSIpLHl5OlAoInkiKX0scHJlcGFyc2U6ZnVuY3Rpb24oeil7cmV0dXJuIHoucmVwbGFjZSgvW1x1MDY2MVx1MDY2Mlx1MDY2M1x1MDY2NFx1MDY2NVx1MDY2Nlx1MDY2N1x1''@;'; put 'put ''MDY2OFx1MDY2OVx1MDY2MF0vZyxmdW5jdGlvbihOKXtyZXR1cm4gZ1tOXX0pLnJlcGxhY2UoL1x1MDYwYy9nLCIsIil9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24oeil7cmV0dXJuIHoucmVwbGFjZSgvXGQvZyxmdW5jdGlvbihOKXtyZXR1cm4gX1tOXX0pLnJlcGxhY2UoLywvZywiXHUwNjBjIil9''@;'; put 'put ''LHdlZWs6e2Rvdzo2LGRveToxMn19KX0oeSg5NzU4NikpfSw0NjUwODpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7dmFyIF89ezE6Ii1pbmNpIiw1OiItaW5jaSIsODoiLWluY2kiLDcwOiItaW5jaSIsODA6Ii1pbmNpIiwyOiItbmNpIiw3OiItbmNpIiwyMDoi''@;'; put 'put ''LW5jaSIsNTA6Ii1uY2kiLDM6Ii1ceGZjbmNceGZjIiw0OiItXHhmY25jXHhmYyIsMTAwOiItXHhmY25jXHhmYyIsNjoiLW5jXHUwMTMxIiw5OiItdW5jdSIsMTA6Ii11bmN1IiwzMDoiLXVuY3UiLDYwOiItXHUwMTMxbmNcdTAxMzEiLDkwOiItXHUwMTMxbmNcdTAxMzEifTtJLmRlZmluZUxv''@;'; put 'put ''Y2FsZSgiYXoiLHttb250aHM6InlhbnZhcl9mZXZyYWxfbWFydF9hcHJlbF9tYXlfaXl1bl9peXVsX2F2cXVzdF9zZW50eWFicl9va3R5YWJyX25veWFicl9kZWthYnIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Inlhbl9mZXZfbWFyX2Fwcl9tYXlfaXluX2l5bF9hdnFfc2VuX29rdF9ub3lf''@;'; put 'put ''ZGVrIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJCYXphcl9CYXphciBlcnRcdTAyNTlzaV9ceGM3XHUwMjU5clx1MDE1Zlx1MDI1OW5iXHUwMjU5IGF4XHUwMTVmYW1cdTAxMzFfXHhjN1x1MDI1OXJcdTAxNWZcdTAyNTluYlx1MDI1OV9DXHhmY21cdTAyNTkgYXhcdTAxNWZhbVx1MDEzMV9DXHhm''@;'; put 'put ''Y21cdTAyNTlfXHUwMTVlXHUwMjU5bmJcdTAyNTkiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiQmF6X0J6RV9ceGM3QXhfXHhjN1x1MDI1OXJfQ0F4X0NceGZjbV9cdTAxNWVcdTAyNTluIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJCel9CRV9ceGM3QV9ceGM3XHUwMjU5X0NBX0NceGZj''@;'; put 'put ''X1x1MDE1ZVx1MDI1OSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0g''@;'; put 'put ''WVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbYnVnXHhmY24gc2FhdF0gTFQiLG5leHREYXk6IltzYWJhaCBzYWF0XSBMVCIsbmV4dFdlZWs6IltnXHUwMjU5bFx1MDI1OW4gaFx1MDI1OWZ0XHUwMjU5XSBkZGRkIFtzYWF0XSBMVCIsbGFzdERheToiW2RceGZjblx1MDI1OW5dIExU''@;'; put 'put ''IixsYXN0V2VlazoiW2tlXHhlN1x1MDI1OW4gaFx1MDI1OWZ0XHUwMjU5XSBkZGRkIFtzYWF0XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgc29ucmEiLHBhc3Q6IiVzIFx1MDI1OXZ2XHUwMjU5bCIsczoiYmlyIG5lXHhlN1x1MDI1OSBzYW5peVx1MDI1OSIs''@;'; put 'put ''c3M6IiVkIHNhbml5XHUwMjU5IixtOiJiaXIgZFx1MDI1OXFpcVx1MDI1OSIsbW06IiVkIGRcdTAyNTlxaXFcdTAyNTkiLGg6ImJpciBzYWF0IixoaDoiJWQgc2FhdCIsZDoiYmlyIGdceGZjbiIsZGQ6IiVkIGdceGZjbiIsTToiYmlyIGF5IixNTToiJWQgYXkiLHk6ImJpciBpbCIseXk6IiVk''@;'; put 'put ''IGlsIn0sbWVyaWRpZW1QYXJzZTovZ2VjXHUwMjU5fHNcdTAyNTloXHUwMjU5cnxnXHhmY25kXHhmY3p8YXhcdTAxNWZhbS8saXNQTTpmdW5jdGlvbihCKXtyZXR1cm4vXihnXHhmY25kXHhmY3p8YXhcdTAxNWZhbSkkLy50ZXN0KEIpfSxtZXJpZGllbTpmdW5jdGlvbihCLHcsUCl7cmV0dXJu''@;'; put 'put ''IEI8ND8iZ2VjXHUwMjU5IjpCPDEyPyJzXHUwMjU5aFx1MDI1OXIiOkI8MTc/ImdceGZjbmRceGZjeiI6ImF4XHUwMTVmYW0ifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9LShcdTAxMzFuY1x1MDEzMXxpbmNpfG5jaXxceGZjbmNceGZjfG5jXHUwMTMxfHVuY3UpLyxvcmRpbmFs''@;'; put 'put ''OmZ1bmN0aW9uKEIpe2lmKDA9PT1CKXJldHVybiBCKyItXHUwMTMxbmNcdTAxMzEiO3ZhciB3PUIlMTA7cmV0dXJuIEIrKF9bd118fF9bQiUxMDAtd118fF9bQj49MTAwPzEwMDpudWxsXSl9LHdlZWs6e2RvdzoxLGRveTo3fX0pfSh5KDk3NTg2KSl9LDE2NzY2OmZ1bmN0aW9uKHVlLFgseSl7''@;'; put 'put ''IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBnKHcsUCxGKXtyZXR1cm4ibSI9PT1GP1A/Ilx1MDQ0NVx1MDQzMlx1MDQ1Nlx1MDQzYlx1MDQ1Nlx1MDQzZFx1MDQzMCI6Ilx1MDQ0NVx1MDQzMlx1MDQ1Nlx1MDQzYlx1MDQ1Nlx1MDQzZFx1MDQ0MyI6ImgiPT09Rj9QPyJcdTA0''@;'; put 'put ''MzNcdTA0MzBcdTA0MzRcdTA0MzdcdTA0NTZcdTA0M2RcdTA0MzAiOiJcdTA0MzNcdTA0MzBcdTA0MzRcdTA0MzdcdTA0NTZcdTA0M2RcdTA0NDMiOncrIiAiK2Z1bmN0aW9uIF8odyxQKXt2YXIgRj13LnNwbGl0KCJfIik7cmV0dXJuIFAlMTA9PTEmJlAlMTAwIT0xMT9GWzBdOlAlMTA+PTIm''@;'; put 'put ''JlAlMTA8PTQmJihQJTEwMDwxMHx8UCUxMDA+PTIwKT9GWzFdOkZbMl19KHtzczpQPyJcdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzRcdTA0MzBfXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0XHUwNDRiX1x1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQz''@;'; put 'put ''ZFx1MDQzNCI6Ilx1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNFx1MDQ0M19cdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzRcdTA0NGJfXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0IixtbTpQPyJcdTA0NDVcdTA0MzJcdTA0NTZcdTA0M2Jc''@;'; put 'put ''dTA0NTZcdTA0M2RcdTA0MzBfXHUwNDQ1XHUwNDMyXHUwNDU2XHUwNDNiXHUwNDU2XHUwNDNkXHUwNDRiX1x1MDQ0NVx1MDQzMlx1MDQ1Nlx1MDQzYlx1MDQ1Nlx1MDQzZCI6Ilx1MDQ0NVx1MDQzMlx1MDQ1Nlx1MDQzYlx1MDQ1Nlx1MDQzZFx1MDQ0M19cdTA0NDVcdTA0MzJcdTA0NTZcdTA0''@;'; put 'put ''M2JcdTA0NTZcdTA0M2RcdTA0NGJfXHUwNDQ1XHUwNDMyXHUwNDU2XHUwNDNiXHUwNDU2XHUwNDNkIixoaDpQPyJcdTA0MzNcdTA0MzBcdTA0MzRcdTA0MzdcdTA0NTZcdTA0M2RcdTA0MzBfXHUwNDMzXHUwNDMwXHUwNDM0XHUwNDM3XHUwNDU2XHUwNDNkXHUwNDRiX1x1MDQzM1x1MDQzMFx1''@;'; put 'put ''MDQzNFx1MDQzN1x1MDQ1Nlx1MDQzZCI6Ilx1MDQzM1x1MDQzMFx1MDQzNFx1MDQzN1x1MDQ1Nlx1MDQzZFx1MDQ0M19cdTA0MzNcdTA0MzBcdTA0MzRcdTA0MzdcdTA0NTZcdTA0M2RcdTA0NGJfXHUwNDMzXHUwNDMwXHUwNDM0XHUwNDM3XHUwNDU2XHUwNDNkIixkZDoiXHUwNDM0XHUwNDM3''@;'; put 'put ''XHUwNDM1XHUwNDNkXHUwNDRjX1x1MDQzNFx1MDQzZFx1MDQ1Nl9cdTA0MzRcdTA0MzdcdTA0NTFcdTA0M2QiLE1NOiJcdTA0M2NcdTA0MzVcdTA0NDFcdTA0NGZcdTA0NDZfXHUwNDNjXHUwNDM1XHUwNDQxXHUwNDRmXHUwNDQ2XHUwNDRiX1x1MDQzY1x1MDQzNVx1MDQ0MVx1MDQ0Zlx1MDQ0''@;'; put 'put ''Nlx1MDQzMFx1MDQ1ZSIseXk6Ilx1MDQzM1x1MDQzZVx1MDQzNF9cdTA0MzNcdTA0MzBcdTA0MzRcdTA0NGJfXHUwNDMzXHUwNDMwXHUwNDM0XHUwNDNlXHUwNDVlIn1bRl0sK3cpfUkuZGVmaW5lTG9jYWxlKCJiZSIse21vbnRoczp7Zm9ybWF0OiJcdTA0NDFcdTA0NDJcdTA0NDNcdTA0MzRc''@;'; put 'put ''dTA0MzdcdTA0MzVcdTA0M2RcdTA0NGZfXHUwNDNiXHUwNDRlXHUwNDQyXHUwNDMwXHUwNDMzXHUwNDMwX1x1MDQ0MVx1MDQzMFx1MDQzYVx1MDQzMFx1MDQzMlx1MDQ1Nlx1MDQzYVx1MDQzMF9cdTA0M2FcdTA0NDBcdTA0MzBcdTA0NDFcdTA0MzBcdTA0MzJcdTA0NTZcdTA0M2FcdTA0MzBf''@;'; put 'put ''XHUwNDQyXHUwNDQwXHUwNDMwXHUwNDVlXHUwNDNkXHUwNDRmX1x1MDQ0N1x1MDQ0ZFx1MDQ0MFx1MDQzMlx1MDQzNVx1MDQzZFx1MDQ0Zl9cdTA0M2JcdTA0NTZcdTA0M2ZcdTA0MzVcdTA0M2RcdTA0NGZfXHUwNDM2XHUwNDNkXHUwNDU2XHUwNDVlXHUwNDNkXHUwNDRmX1x1MDQzMlx1MDQz''@;'; put 'put ''NVx1MDQ0MFx1MDQzMFx1MDQ0MVx1MDQzZFx1MDQ0Zl9cdTA0M2FcdTA0MzBcdTA0NDFcdTA0NDJcdTA0NDBcdTA0NGJcdTA0NDdcdTA0M2RcdTA0NTZcdTA0M2FcdTA0MzBfXHUwNDNiXHUwNDU2XHUwNDQxXHUwNDQyXHUwNDMwXHUwNDNmXHUwNDMwXHUwNDM0XHUwNDMwX1x1MDQ0MVx1MDQz''@;'; put 'put ''ZFx1MDQzNVx1MDQzNlx1MDQzZFx1MDQ0ZiIuc3BsaXQoIl8iKSxzdGFuZGFsb25lOiJcdTA0NDFcdTA0NDJcdTA0NDNcdTA0MzRcdTA0MzdcdTA0MzVcdTA0M2RcdTA0NGNfXHUwNDNiXHUwNDRlXHUwNDQyXHUwNDRiX1x1MDQ0MVx1MDQzMFx1MDQzYVx1MDQzMFx1MDQzMlx1MDQ1Nlx1MDQz''@;'; put 'put ''YV9cdTA0M2FcdTA0NDBcdTA0MzBcdTA0NDFcdTA0MzBcdTA0MzJcdTA0NTZcdTA0M2FfXHUwNDQyXHUwNDQwXHUwNDMwXHUwNDMyXHUwNDM1XHUwNDNkXHUwNDRjX1x1MDQ0N1x1MDQ0ZFx1MDQ0MFx1MDQzMlx1MDQzNVx1MDQzZFx1MDQ0Y19cdTA0M2JcdTA0NTZcdTA0M2ZcdTA0MzVcdTA0''@;'; put 'put ''M2RcdTA0NGNfXHUwNDM2XHUwNDNkXHUwNDU2XHUwNDMyXHUwNDM1XHUwNDNkXHUwNDRjX1x1MDQzMlx1MDQzNVx1MDQ0MFx1MDQzMFx1MDQ0MVx1MDQzNVx1MDQzZFx1MDQ0Y19cdTA0M2FcdTA0MzBcdTA0NDFcdTA0NDJcdTA0NDBcdTA0NGJcdTA0NDdcdTA0M2RcdTA0NTZcdTA0M2FfXHUw''@;'; put 'put ''NDNiXHUwNDU2XHUwNDQxXHUwNDQyXHUwNDMwXHUwNDNmXHUwNDMwXHUwNDM0X1x1MDQ0MVx1MDQzZFx1MDQzNVx1MDQzNlx1MDQzMFx1MDQzZFx1MDQ0YyIuc3BsaXQoIl8iKX0sbW9udGhzU2hvcnQ6Ilx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQzNF9cdTA0M2JcdTA0NGVcdTA0NDJfXHUwNDQx''@;'; put 'put ''XHUwNDMwXHUwNDNhX1x1MDQzYVx1MDQ0MFx1MDQzMFx1MDQ0MV9cdTA0NDJcdTA0NDBcdTA0MzBcdTA0MzJfXHUwNDQ3XHUwNDRkXHUwNDQwXHUwNDMyX1x1MDQzYlx1MDQ1Nlx1MDQzZl9cdTA0MzZcdTA0M2RcdTA0NTZcdTA0MzJfXHUwNDMyXHUwNDM1XHUwNDQwX1x1MDQzYVx1MDQzMFx1''@;'; put 'put ''MDQ0MVx1MDQ0Ml9cdTA0M2JcdTA0NTZcdTA0NDFcdTA0NDJfXHUwNDQxXHUwNDNkXHUwNDM1XHUwNDM2Ii5zcGxpdCgiXyIpLHdlZWtkYXlzOntmb3JtYXQ6Ilx1MDQzZFx1MDQ0Zlx1MDQzNFx1MDQzN1x1MDQzNVx1MDQzYlx1MDQ0ZV9cdTA0M2ZcdTA0MzBcdTA0M2RcdTA0NGZcdTA0MzRc''@;'; put 'put ''dTA0MzdcdTA0MzVcdTA0M2JcdTA0MzBcdTA0M2FfXHUwNDMwXHUwNDVlXHUwNDQyXHUwNDNlXHUwNDQwXHUwNDMwXHUwNDNhX1x1MDQ0MVx1MDQzNVx1MDQ0MFx1MDQzMFx1MDQzNFx1MDQ0M19cdTA0NDdcdTA0MzBcdTA0NDZcdTA0MzJcdTA0MzVcdTA0NDBfXHUwNDNmXHUwNDRmXHUwNDQy''@;'; put 'put ''XHUwNDNkXHUwNDU2XHUwNDQ2XHUwNDQzX1x1MDQ0MVx1MDQ0M1x1MDQzMVx1MDQzZVx1MDQ0Mlx1MDQ0MyIuc3BsaXQoIl8iKSxzdGFuZGFsb25lOiJcdTA0M2RcdTA0NGZcdTA0MzRcdTA0MzdcdTA0MzVcdTA0M2JcdTA0NGZfXHUwNDNmXHUwNDMwXHUwNDNkXHUwNDRmXHUwNDM0XHUwNDM3''@;'; put 'put ''XHUwNDM1XHUwNDNiXHUwNDMwXHUwNDNhX1x1MDQzMFx1MDQ1ZVx1MDQ0Mlx1MDQzZVx1MDQ0MFx1MDQzMFx1MDQzYV9cdTA0NDFcdTA0MzVcdTA0NDBcdTA0MzBcdTA0MzRcdTA0MzBfXHUwNDQ3XHUwNDMwXHUwNDQ2XHUwNDMyXHUwNDM1XHUwNDQwX1x1MDQzZlx1MDQ0Zlx1MDQ0Mlx1MDQz''@;'; put 'put ''ZFx1MDQ1Nlx1MDQ0Nlx1MDQzMF9cdTA0NDFcdTA0NDNcdTA0MzFcdTA0M2VcdTA0NDJcdTA0MzAiLnNwbGl0KCJfIiksaXNGb3JtYXQ6L1xbID9bXHUwNDIzXHUwNDQzXHUwNDVlXSA/KD86XHUwNDNjXHUwNDU2XHUwNDNkXHUwNDQzXHUwNDNiXHUwNDQzXHUwNDRlfFx1MDQzZFx1MDQzMFx1''@;'; put 'put ''MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQzZlx1MDQzZFx1MDQ0M1x1MDQ0ZSk/ID9cXSA/ZGRkZC99LHdlZWtkYXlzU2hvcnQ6Ilx1MDQzZFx1MDQzNF9cdTA0M2ZcdTA0M2RfXHUwNDMwXHUwNDQyX1x1MDQ0MVx1MDQ0MF9cdTA0NDdcdTA0NDZfXHUwNDNmXHUwNDQyX1x1MDQ0MVx1MDQzMSIuc3Bs''@;'; put 'put ''aXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNDNkXHUwNDM0X1x1MDQzZlx1MDQzZF9cdTA0MzBcdTA0NDJfXHUwNDQxXHUwNDQwX1x1MDQ0N1x1MDQ0Nl9cdTA0M2ZcdTA0NDJfXHUwNDQxXHUwNDMxIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3Mi''@;'; put 'put ''LEw6IkRELk1NLllZWVkiLExMOiJEIE1NTU0gWVlZWSBcdTA0MzMuIixMTEw6IkQgTU1NTSBZWVlZIFx1MDQzMy4sIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBcdTA0MzMuLCBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwNDIxXHUwNDUxXHUwNDNkXHUwNDNkXHUwNDRm''@;'; put 'put ''IFx1MDQ1ZV0gTFQiLG5leHREYXk6IltcdTA0MTdcdTA0MzBcdTA0NWVcdTA0NDJcdTA0NDBcdTA0MzAgXHUwNDVlXSBMVCIsbGFzdERheToiW1x1MDQyM1x1MDQ0N1x1MDQzZVx1MDQ0MFx1MDQzMCBcdTA0NWVdIExUIixuZXh0V2VlazpmdW5jdGlvbigpe3JldHVybiJbXHUwNDIzXSBkZGRk''@;'; put 'put ''IFtcdTA0NWVdIExUIn0sbGFzdFdlZWs6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAwOmNhc2UgMzpjYXNlIDU6Y2FzZSA2OnJldHVybiJbXHUwNDIzIFx1MDQzY1x1MDQ1Nlx1MDQzZFx1MDQ0M1x1MDQzYlx1MDQ0M1x1MDQ0ZV0gZGRkZCBbXHUwNDVlXSBMVCI7Y2FzZSAx''@;'; put 'put ''OmNhc2UgMjpjYXNlIDQ6cmV0dXJuIltcdTA0MjMgXHUwNDNjXHUwNDU2XHUwNDNkXHUwNDQzXHUwNDNiXHUwNDRiXSBkZGRkIFtcdTA0NWVdIExUIn19LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDQzZlx1MDQ0MFx1MDQzMFx1MDQzNyAlcyIscGFzdDoiJXMgXHUw''@;'; put 'put ''NDQyXHUwNDMwXHUwNDNjXHUwNDQzIixzOiJcdTA0M2RcdTA0MzVcdTA0M2FcdTA0MzBcdTA0M2JcdTA0NGNcdTA0M2FcdTA0NTYgXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0IixtOmcsbW06ZyxoOmcsaGg6ZyxkOiJcdTA0MzRcdTA0MzdcdTA0MzVcdTA0M2RcdTA0NGMi''@;'; put 'put ''LGRkOmcsTToiXHUwNDNjXHUwNDM1XHUwNDQxXHUwNDRmXHUwNDQ2IixNTTpnLHk6Ilx1MDQzM1x1MDQzZVx1MDQzNCIseXk6Z30sbWVyaWRpZW1QYXJzZTovXHUwNDNkXHUwNDNlXHUwNDQ3XHUwNDRifFx1MDQ0MFx1MDQzMFx1MDQzZFx1MDQ1Nlx1MDQ0Nlx1MDQ0YnxcdTA0MzRcdTA0M2Rc''@;'; put 'put ''dTA0NGZ8XHUwNDMyXHUwNDM1XHUwNDQ3XHUwNDMwXHUwNDQwXHUwNDMwLyxpc1BNOmZ1bmN0aW9uKHcpe3JldHVybi9eKFx1MDQzNFx1MDQzZFx1MDQ0ZnxcdTA0MzJcdTA0MzVcdTA0NDdcdTA0MzBcdTA0NDBcdTA0MzApJC8udGVzdCh3KX0sbWVyaWRpZW06ZnVuY3Rpb24odyxQLEYpe3Jl''@;'; put 'put ''dHVybiB3PDQ/Ilx1MDQzZFx1MDQzZVx1MDQ0N1x1MDQ0YiI6dzwxMj8iXHUwNDQwXHUwNDMwXHUwNDNkXHUwNDU2XHUwNDQ2XHUwNDRiIjp3PDE3PyJcdTA0MzRcdTA0M2RcdTA0NGYiOiJcdTA0MzJcdTA0MzVcdTA0NDdcdTA0MzBcdTA0NDBcdTA0MzAifSxkYXlPZk1vbnRoT3JkaW5hbFBh''@;'; put 'put ''cnNlOi9cZHsxLDJ9LShcdTA0NTZ8XHUwNDRifFx1MDQzM1x1MDQzMCkvLG9yZGluYWw6ZnVuY3Rpb24odyxQKXtzd2l0Y2goUCl7Y2FzZSJNIjpjYXNlImQiOmNhc2UiREREIjpjYXNlInciOmNhc2UiVyI6cmV0dXJuIHclMTAhPTImJnclMTAhPTN8fHclMTAwPT0xMnx8dyUxMDA9PTEzP3cr''@;'; put 'put ''Ii1cdTA0NGIiOncrIi1cdTA0NTYiO2Nhc2UiRCI6cmV0dXJuIHcrIi1cdTA0MzNcdTA0MzAiO2RlZmF1bHQ6cmV0dXJuIHd9fSx3ZWVrOntkb3c6MSxkb3k6N319KX0oeSg5NzU4NikpfSwyODU2NDpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVM''@;'; put 'put ''b2NhbGUoImJnIix7bW9udGhzOiJcdTA0NGZcdTA0M2RcdTA0NDNcdTA0MzBcdTA0NDBcdTA0MzhfXHUwNDQ0XHUwNDM1XHUwNDMyXHUwNDQwXHUwNDQzXHUwNDMwXHUwNDQwXHUwNDM4X1x1MDQzY1x1MDQzMFx1MDQ0MFx1MDQ0Ml9cdTA0MzBcdTA0M2ZcdTA0NDBcdTA0MzhcdTA0M2JfXHUw''@;'; put 'put ''NDNjXHUwNDMwXHUwNDM5X1x1MDQ0ZVx1MDQzZFx1MDQzOF9cdTA0NGVcdTA0M2JcdTA0MzhfXHUwNDMwXHUwNDMyXHUwNDMzXHUwNDQzXHUwNDQxXHUwNDQyX1x1MDQ0MVx1MDQzNVx1MDQzZlx1MDQ0Mlx1MDQzNVx1MDQzY1x1MDQzMlx1MDQ0MFx1MDQzOF9cdTA0M2VcdTA0M2FcdTA0NDJc''@;'; put 'put ''dTA0M2VcdTA0M2NcdTA0MzJcdTA0NDBcdTA0MzhfXHUwNDNkXHUwNDNlXHUwNDM1XHUwNDNjXHUwNDMyXHUwNDQwXHUwNDM4X1x1MDQzNFx1MDQzNVx1MDQzYVx1MDQzNVx1MDQzY1x1MDQzMlx1MDQ0MFx1MDQzOCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwNDRmXHUwNDNkXHUwNDQz''@;'; put 'put ''X1x1MDQ0NFx1MDQzNVx1MDQzMl9cdTA0M2NcdTA0MzBcdTA0NDBfXHUwNDMwXHUwNDNmXHUwNDQwX1x1MDQzY1x1MDQzMFx1MDQzOV9cdTA0NGVcdTA0M2RcdTA0MzhfXHUwNDRlXHUwNDNiXHUwNDM4X1x1MDQzMFx1MDQzMlx1MDQzM19cdTA0NDFcdTA0MzVcdTA0M2ZfXHUwNDNlXHUwNDNh''@;'; put 'put ''XHUwNDQyX1x1MDQzZFx1MDQzZVx1MDQzNV9cdTA0MzRcdTA0MzVcdTA0M2EiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MDQzZFx1MDQzNVx1MDQzNFx1MDQzNVx1MDQzYlx1MDQ0Zl9cdTA0M2ZcdTA0M2VcdTA0M2RcdTA0MzVcdTA0MzRcdTA0MzVcdTA0M2JcdTA0M2RcdTA0MzhcdTA0M2Ff''@;'; put 'put ''XHUwNDMyXHUwNDQyXHUwNDNlXHUwNDQwXHUwNDNkXHUwNDM4XHUwNDNhX1x1MDQ0MVx1MDQ0MFx1MDQ0Zlx1MDQzNFx1MDQzMF9cdTA0NDdcdTA0MzVcdTA0NDJcdTA0MzJcdTA0NGFcdTA0NDBcdTA0NDJcdTA0NGFcdTA0M2FfXHUwNDNmXHUwNDM1XHUwNDQyXHUwNDRhXHUwNDNhX1x1MDQ0''@;'; put 'put ''MVx1MDQ0YVx1MDQzMVx1MDQzZVx1MDQ0Mlx1MDQzMCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA0M2RcdTA0MzVcdTA0MzRfXHUwNDNmXHUwNDNlXHUwNDNkX1x1MDQzMlx1MDQ0Mlx1MDQzZV9cdTA0NDFcdTA0NDBcdTA0NGZfXHUwNDQ3XHUwNDM1XHUwNDQyX1x1MDQzZlx1MDQz''@;'; put 'put ''NVx1MDQ0Ml9cdTA0NDFcdTA0NGFcdTA0MzEiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDQzZFx1MDQzNF9cdTA0M2ZcdTA0M2RfXHUwNDMyXHUwNDQyX1x1MDQ0MVx1MDQ0MF9cdTA0NDdcdTA0NDJfXHUwNDNmXHUwNDQyX1x1MDQ0MVx1MDQzMSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZv''@;'; put 'put ''cm1hdDp7TFQ6Ikg6bW0iLExUUzoiSDptbTpzcyIsTDoiRC5NTS5ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwNDE0XHUwNDNkXHUwNDM1XHUwNDQxIFx1MDQz''@;'; put 'put ''Ml0gTFQiLG5leHREYXk6IltcdTA0MjNcdTA0NDJcdTA0NDBcdTA0MzUgXHUwNDMyXSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x1MDQzMl0gTFQiLGxhc3REYXk6IltcdTA0MTJcdTA0NDdcdTA0MzVcdTA0NDBcdTA0MzAgXHUwNDMyXSBMVCIsbGFzdFdlZWs6ZnVuY3Rpb24oKXtzd2l0Y2godGhp''@;'; put 'put ''cy5kYXkoKSl7Y2FzZSAwOmNhc2UgMzpjYXNlIDY6cmV0dXJuIltcdTA0MWNcdTA0MzhcdTA0M2RcdTA0MzBcdTA0M2JcdTA0MzBcdTA0NDJcdTA0MzBdIGRkZGQgW1x1MDQzMl0gTFQiO2Nhc2UgMTpjYXNlIDI6Y2FzZSA0OmNhc2UgNTpyZXR1cm4iW1x1MDQxY1x1MDQzOFx1MDQzZFx1MDQz''@;'; put 'put ''MFx1MDQzYlx1MDQzOFx1MDQ0Zl0gZGRkZCBbXHUwNDMyXSBMVCJ9fSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJcdTA0NDFcdTA0M2JcdTA0MzVcdTA0MzQgJXMiLHBhc3Q6Ilx1MDQzZlx1MDQ0MFx1MDQzNVx1MDQzNFx1MDQzOCAlcyIsczoiXHUwNDNkXHUwNDRmXHUw''@;'; put 'put ''NDNhXHUwNDNlXHUwNDNiXHUwNDNhXHUwNDNlIFx1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNFx1MDQzOCIsc3M6IiVkIFx1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNFx1MDQzOCIsbToiXHUwNDNjXHUwNDM4XHUwNDNkXHUwNDQzXHUwNDQyXHUwNDMwIixt''@;'; put 'put ''bToiJWQgXHUwNDNjXHUwNDM4XHUwNDNkXHUwNDQzXHUwNDQyXHUwNDM4IixoOiJcdTA0NDdcdTA0MzBcdTA0NDEiLGhoOiIlZCBcdTA0NDdcdTA0MzBcdTA0NDFcdTA0MzAiLGQ6Ilx1MDQzNFx1MDQzNVx1MDQzZCIsZGQ6IiVkIFx1MDQzNFx1MDQzNVx1MDQzZFx1MDQzMCIsdzoiXHUwNDQx''@;'; put 'put ''XHUwNDM1XHUwNDM0XHUwNDNjXHUwNDM4XHUwNDQ2XHUwNDMwIix3dzoiJWQgXHUwNDQxXHUwNDM1XHUwNDM0XHUwNDNjXHUwNDM4XHUwNDQ2XHUwNDM4IixNOiJcdTA0M2NcdTA0MzVcdTA0NDFcdTA0MzVcdTA0NDYiLE1NOiIlZCBcdTA0M2NcdTA0MzVcdTA0NDFcdTA0MzVcdTA0NDZcdTA0''@;'; put 'put ''MzAiLHk6Ilx1MDQzM1x1MDQzZVx1MDQzNFx1MDQzOFx1MDQzZFx1MDQzMCIseXk6IiVkIFx1MDQzM1x1MDQzZVx1MDQzNFx1MDQzOFx1MDQzZFx1MDQzOCJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0tKFx1MDQzNVx1MDQzMnxcdTA0MzVcdTA0M2R8XHUwNDQyXHUwNDM4fFx1''@;'; put 'put ''MDQzMlx1MDQzOHxcdTA0NDBcdTA0Mzh8XHUwNDNjXHUwNDM4KS8sb3JkaW5hbDpmdW5jdGlvbihnKXt2YXIgQj1nJTEwLHc9ZyUxMDA7cmV0dXJuIDA9PT1nP2crIi1cdTA0MzVcdTA0MzIiOjA9PT13P2crIi1cdTA0MzVcdTA0M2QiOnc+MTAmJnc8MjA/ZysiLVx1MDQ0Mlx1MDQzOCI6MT09''@;'; put 'put ''PUI/ZysiLVx1MDQzMlx1MDQzOCI6Mj09PUI/ZysiLVx1MDQ0MFx1MDQzOCI6Nz09PUJ8fDg9PT1CP2crIi1cdTA0M2NcdTA0MzgiOmcrIi1cdTA0NDJcdTA0MzgifSx3ZWVrOntkb3c6MSxkb3k6N319KX0oeSg5NzU4NikpfSw5NzQ2MjpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsi''@;'; put 'put ''dXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoImJtIix7bW9udGhzOiJaYW53dXlla2Fsb19GZXd1cnV5ZWthbG9fTWFyaXNpa2Fsb19Bd2lyaWxpa2Fsb19NXHUwMjVia2Fsb19adXdcdTAyNWJua2Fsb19adWx1eWVrYWxvX1V0aWthbG9fU1x1MDI1YnRhbmJ1cnVrYWxvX1x1MDI1NGt1dFx1''@;'; put 'put ''MDI1NGJ1cnVrYWxvX05vd2FuYnVydWthbG9fRGVzYW5idXJ1a2FsbyIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiWmFuX0Zld19NYXJfQXdpX01cdTAyNWJfWnV3X1p1bF9VdGlfU1x1MDI1YnRfXHUwMjU0a3VfTm93X0RlcyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiS2FyaV9OdFx1MDI1Ym5c''@;'; put 'put ''dTAyNWJuX1RhcmF0YV9BcmFiYV9BbGFtaXNhX0p1bWFfU2liaXJpIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ikthcl9OdFx1MDI1Yl9UYXJfQXJhX0FsYV9KdW1fU2liIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJLYV9OdF9UYV9Bcl9BbF9KdV9TaSIuc3BsaXQoIl8iKSxsb25nRGF0''@;'; put 'put ''ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiTU1NTSBbdGlsZV0gRCBbc2FuXSBZWVlZIixMTEw6Ik1NTU0gW3RpbGVdIEQgW3Nhbl0gWVlZWSBbbFx1MDI1YnJcdTAyNWJdIEhIOm1tIixMTExMOiJkZGRkIE1NTU0gW3RpbGVdIEQgW3Nhbl0g''@;'; put 'put ''WVlZWSBbbFx1MDI1YnJcdTAyNWJdIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltCaSBsXHUwMjViclx1MDI1Yl0gTFQiLG5leHREYXk6IltTaW5pIGxcdTAyNWJyXHUwMjViXSBMVCIsbmV4dFdlZWs6ImRkZGQgW2RvbiBsXHUwMjViclx1MDI1Yl0gTFQiLGxhc3REYXk6IltLdW51IGxc''@;'; put 'put ''dTAyNWJyXHUwMjViXSBMVCIsbGFzdFdlZWs6ImRkZGQgW3RcdTAyNWJtXHUwMjVibmVuIGxcdTAyNWJyXHUwMjViXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMga1x1MDI1NG5cdTAyNTQiLHBhc3Q6ImEgYlx1MDI1YiAlcyBiXHUwMjU0IixzOiJzYW5nYSBk''@;'; put 'put ''YW1hIGRhbWEiLHNzOiJzZWtvbmRpICVkIixtOiJtaW5pdGkga2VsZW4iLG1tOiJtaW5pdGkgJWQiLGg6ImxcdTAyNWJyXHUwMjViIGtlbGVuIixoaDoibFx1MDI1YnJcdTAyNWIgJWQiLGQ6InRpbGUga2VsZW4iLGRkOiJ0aWxlICVkIixNOiJrYWxvIGtlbGVuIixNTToia2FsbyAlZCIseToi''@;'; put 'put ''c2FuIGtlbGVuIix5eToic2FuICVkIn0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KHkoOTc1ODYpKX0sNDM0Mzg6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO3ZhciBfPXsxOiJcdTA5ZTciLDI6Ilx1MDllOCIsMzoiXHUwOWU5Iiw0OiJcdTA5ZWEiLDU6Ilx1MDll''@;'; put 'put ''YiIsNjoiXHUwOWVjIiw3OiJcdTA5ZWQiLDg6Ilx1MDllZSIsOToiXHUwOWVmIiwwOiJcdTA5ZTYifSxnPXsiXHUwOWU3IjoiMSIsIlx1MDllOCI6IjIiLCJcdTA5ZTkiOiIzIiwiXHUwOWVhIjoiNCIsIlx1MDllYiI6IjUiLCJcdTA5ZWMiOiI2IiwiXHUwOWVkIjoiNyIsIlx1MDllZSI6Ijgi''@;'; put 'put ''LCJcdTA5ZWYiOiI5IiwiXHUwOWU2IjoiMCJ9O0kuZGVmaW5lTG9jYWxlKCJibi1iZCIse21vbnRoczoiXHUwOTljXHUwOWJlXHUwOWE4XHUwOWMxXHUwOWRmXHUwOWJlXHUwOWIwXHUwOWJmX1x1MDlhYlx1MDljN1x1MDlhY1x1MDljZFx1MDliMFx1MDljMVx1MDlkZlx1MDliZVx1MDliMFx1''@;'; put 'put ''MDliZl9cdTA5YWVcdTA5YmVcdTA5YjBcdTA5Y2RcdTA5OWFfXHUwOThmXHUwOWFhXHUwOWNkXHUwOWIwXHUwOWJmXHUwOWIyX1x1MDlhZVx1MDljN19cdTA5OWNcdTA5YzFcdTA5YThfXHUwOTljXHUwOWMxXHUwOWIyXHUwOWJlXHUwOTg3X1x1MDk4Nlx1MDk5N1x1MDliOFx1MDljZFx1MDk5''@;'; put 'put ''Zl9cdTA5YjhcdTA5YzdcdTA5YWFcdTA5Y2RcdTA5OWZcdTA5YzdcdTA5YWVcdTA5Y2RcdTA5YWNcdTA5YjBfXHUwOTg1XHUwOTk1XHUwOWNkXHUwOTlmXHUwOWNiXHUwOWFjXHUwOWIwX1x1MDlhOFx1MDlhZFx1MDljN1x1MDlhZVx1MDljZFx1MDlhY1x1MDliMF9cdTA5YTFcdTA5YmZcdTA5''@;'; put 'put ''YjhcdTA5YzdcdTA5YWVcdTA5Y2RcdTA5YWNcdTA5YjAiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MDk5Y1x1MDliZVx1MDlhOFx1MDljMV9cdTA5YWJcdTA5YzdcdTA5YWNcdTA5Y2RcdTA5YjBcdTA5YzFfXHUwOWFlXHUwOWJlXHUwOWIwXHUwOWNkXHUwOTlhX1x1MDk4Zlx1MDlhYVx1''@;'; put 'put ''MDljZFx1MDliMFx1MDliZlx1MDliMl9cdTA5YWVcdTA5YzdfXHUwOTljXHUwOWMxXHUwOWE4X1x1MDk5Y1x1MDljMVx1MDliMlx1MDliZVx1MDk4N19cdTA5ODZcdTA5OTdcdTA5YjhcdTA5Y2RcdTA5OWZfXHUwOWI4XHUwOWM3XHUwOWFhXHUwOWNkXHUwOTlmX1x1MDk4NVx1MDk5NVx1MDlj''@;'; put 'put ''ZFx1MDk5Zlx1MDljYl9cdTA5YThcdTA5YWRcdTA5YzdfXHUwOWExXHUwOWJmXHUwOWI4XHUwOWM3Ii5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTA5YjBcdTA5YWNcdTA5YmZcdTA5YWNcdTA5YmVcdTA5YjBfXHUwOWI4XHUwOWNiXHUwOWFlXHUwOWFjXHUwOWJlXHUwOWIwX1x1MDlhZVx1MDk5''@;'; put 'put ''OVx1MDljZFx1MDk5N1x1MDliMlx1MDlhY1x1MDliZVx1MDliMF9cdTA5YWNcdTA5YzFcdTA5YTdcdTA5YWNcdTA5YmVcdTA5YjBfXHUwOWFjXHUwOWMzXHUwOWI5XHUwOWI4XHUwOWNkXHUwOWFhXHUwOWE0XHUwOWJmXHUwOWFjXHUwOWJlXHUwOWIwX1x1MDliNlx1MDljMVx1MDk5NVx1MDlj''@;'; put 'put ''ZFx1MDliMFx1MDlhY1x1MDliZVx1MDliMF9cdTA5YjZcdTA5YThcdTA5YmZcdTA5YWNcdTA5YmVcdTA5YjAiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwOWIwXHUwOWFjXHUwOWJmX1x1MDliOFx1MDljYlx1MDlhZV9cdTA5YWVcdTA5OTlcdTA5Y2RcdTA5OTdcdTA5YjJfXHUwOWFj''@;'; put 'put ''XHUwOWMxXHUwOWE3X1x1MDlhY1x1MDljM1x1MDliOVx1MDliOFx1MDljZFx1MDlhYVx1MDlhNFx1MDliZl9cdTA5YjZcdTA5YzFcdTA5OTVcdTA5Y2RcdTA5YjBfXHUwOWI2XHUwOWE4XHUwOWJmIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA5YjBcdTA5YWNcdTA5YmZfXHUwOWI4XHUw''@;'; put 'put ''OWNiXHUwOWFlX1x1MDlhZVx1MDk5OVx1MDljZFx1MDk5N1x1MDliMl9cdTA5YWNcdTA5YzFcdTA5YTdfXHUwOWFjXHUwOWMzXHUwOWI5X1x1MDliNlx1MDljMVx1MDk5NVx1MDljZFx1MDliMF9cdTA5YjZcdTA5YThcdTA5YmYiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJBIGg6''@;'; put 'put ''bW0gXHUwOWI4XHUwOWFlXHUwOWRmIixMVFM6IkEgaDptbTpzcyBcdTA5YjhcdTA5YWVcdTA5ZGYiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSwgQSBoOm1tIFx1MDliOFx1MDlhZVx1MDlkZiIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVksIEEgaDpt''@;'; put 'put ''bSBcdTA5YjhcdTA5YWVcdTA5ZGYifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDk4Nlx1MDk5Y10gTFQiLG5leHREYXk6IltcdTA5ODZcdTA5OTdcdTA5YmVcdTA5YWVcdTA5YzBcdTA5OTVcdTA5YmVcdTA5YjJdIExUIixuZXh0V2VlazoiZGRkZCwgTFQiLGxhc3REYXk6IltcdTA5OTdcdTA5''@;'; put 'put ''YTRcdTA5OTVcdTA5YmVcdTA5YjJdIExUIixsYXN0V2VlazoiW1x1MDk5N1x1MDlhNF0gZGRkZCwgTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIFx1MDlhYVx1MDliMFx1MDljNyIscGFzdDoiJXMgXHUwOTg2XHUwOTk3XHUwOWM3IixzOiJcdTA5OTVcdTA5ZGZc''@;'; put 'put ''dTA5YzdcdTA5OTUgXHUwOWI4XHUwOWM3XHUwOTk1XHUwOWM3XHUwOWE4XHUwOWNkXHUwOWExIixzczoiJWQgXHUwOWI4XHUwOWM3XHUwOTk1XHUwOWM3XHUwOWE4XHUwOWNkXHUwOWExIixtOiJcdTA5OGZcdTA5OTUgXHUwOWFlXHUwOWJmXHUwOWE4XHUwOWJmXHUwOTlmIixtbToiJWQgXHUw''@;'; put 'put ''OWFlXHUwOWJmXHUwOWE4XHUwOWJmXHUwOTlmIixoOiJcdTA5OGZcdTA5OTUgXHUwOTk4XHUwOWE4XHUwOWNkXHUwOTlmXHUwOWJlIixoaDoiJWQgXHUwOTk4XHUwOWE4XHUwOWNkXHUwOTlmXHUwOWJlIixkOiJcdTA5OGZcdTA5OTUgXHUwOWE2XHUwOWJmXHUwOWE4IixkZDoiJWQgXHUwOWE2''@;'; put 'put ''XHUwOWJmXHUwOWE4IixNOiJcdTA5OGZcdTA5OTUgXHUwOWFlXHUwOWJlXHUwOWI4IixNTToiJWQgXHUwOWFlXHUwOWJlXHUwOWI4Iix5OiJcdTA5OGZcdTA5OTUgXHUwOWFjXHUwOTliXHUwOWIwIix5eToiJWQgXHUwOWFjXHUwOTliXHUwOWIwIn0scHJlcGFyc2U6ZnVuY3Rpb24odyl7cmV0''@;'; put 'put ''dXJuIHcucmVwbGFjZSgvW1x1MDllN1x1MDllOFx1MDllOVx1MDllYVx1MDllYlx1MDllY1x1MDllZFx1MDllZVx1MDllZlx1MDllNl0vZyxmdW5jdGlvbihQKXtyZXR1cm4gZ1tQXX0pfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKHcpe3JldHVybiB3LnJlcGxhY2UoL1xkL2csZnVuY3Rpb24oUCl7''@;'; put 'put ''cmV0dXJuIF9bUF19KX0sbWVyaWRpZW1QYXJzZTovXHUwOWIwXHUwOWJlXHUwOWE0fFx1MDlhZFx1MDljYlx1MDliMHxcdTA5YjhcdTA5OTVcdTA5YmVcdTA5YjJ8XHUwOWE2XHUwOWMxXHUwOWFhXHUwOWMxXHUwOWIwfFx1MDlhY1x1MDliZlx1MDk5NVx1MDliZVx1MDliMnxcdTA5YjhcdTA5''@;'; put 'put ''YThcdTA5Y2RcdTA5YTdcdTA5Y2RcdTA5YWZcdTA5YmV8XHUwOWIwXHUwOWJlXHUwOWE0LyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24odyxQKXtyZXR1cm4gMTI9PT13JiYodz0wKSwiXHUwOWIwXHUwOWJlXHUwOWE0Ij09PVA/dzw0P3c6dysxMjoiXHUwOWFkXHUwOWNiXHUwOWIwIj09PVB8fCJc''@;'; put 'put ''dTA5YjhcdTA5OTVcdTA5YmVcdTA5YjIiPT09UD93OiJcdTA5YTZcdTA5YzFcdTA5YWFcdTA5YzFcdTA5YjAiPT09UD93Pj0zP3c6dysxMjoiXHUwOWFjXHUwOWJmXHUwOTk1XHUwOWJlXHUwOWIyIj09PVB8fCJcdTA5YjhcdTA5YThcdTA5Y2RcdTA5YTdcdTA5Y2RcdTA5YWZcdTA5YmUiPT09''@;'; put 'put ''UD93KzEyOnZvaWQgMH0sbWVyaWRpZW06ZnVuY3Rpb24odyxQLEYpe3JldHVybiB3PDQ/Ilx1MDliMFx1MDliZVx1MDlhNCI6dzw2PyJcdTA5YWRcdTA5Y2JcdTA5YjAiOnc8MTI/Ilx1MDliOFx1MDk5NVx1MDliZVx1MDliMiI6dzwxNT8iXHUwOWE2XHUwOWMxXHUwOWFhXHUwOWMxXHUwOWIw''@;'; put 'put ''Ijp3PDE4PyJcdTA5YWNcdTA5YmZcdTA5OTVcdTA5YmVcdTA5YjIiOnc8MjA/Ilx1MDliOFx1MDlhOFx1MDljZFx1MDlhN1x1MDljZFx1MDlhZlx1MDliZSI6Ilx1MDliMFx1MDliZVx1MDlhNCJ9LHdlZWs6e2RvdzowLGRveTo2fX0pfSh5KDk3NTg2KSl9LDE3MTA3OmZ1bmN0aW9uKHVlLFgs''@;'; put 'put ''eSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz17MToiXHUwOWU3IiwyOiJcdTA5ZTgiLDM6Ilx1MDllOSIsNDoiXHUwOWVhIiw1OiJcdTA5ZWIiLDY6Ilx1MDllYyIsNzoiXHUwOWVkIiw4OiJcdTA5ZWUiLDk6Ilx1MDllZiIsMDoiXHUwOWU2In0sZz17Ilx1MDllNyI6IjEiLCJc''@;'; put 'put ''dTA5ZTgiOiIyIiwiXHUwOWU5IjoiMyIsIlx1MDllYSI6IjQiLCJcdTA5ZWIiOiI1IiwiXHUwOWVjIjoiNiIsIlx1MDllZCI6IjciLCJcdTA5ZWUiOiI4IiwiXHUwOWVmIjoiOSIsIlx1MDllNiI6IjAifTtJLmRlZmluZUxvY2FsZSgiYm4iLHttb250aHM6Ilx1MDk5Y1x1MDliZVx1MDlhOFx1''@;'; put 'put ''MDljMVx1MDlkZlx1MDliZVx1MDliMFx1MDliZl9cdTA5YWJcdTA5YzdcdTA5YWNcdTA5Y2RcdTA5YjBcdTA5YzFcdTA5ZGZcdTA5YmVcdTA5YjBcdTA5YmZfXHUwOWFlXHUwOWJlXHUwOWIwXHUwOWNkXHUwOTlhX1x1MDk4Zlx1MDlhYVx1MDljZFx1MDliMFx1MDliZlx1MDliMl9cdTA5YWVc''@;'; put 'put ''dTA5YzdfXHUwOTljXHUwOWMxXHUwOWE4X1x1MDk5Y1x1MDljMVx1MDliMlx1MDliZVx1MDk4N19cdTA5ODZcdTA5OTdcdTA5YjhcdTA5Y2RcdTA5OWZfXHUwOWI4XHUwOWM3XHUwOWFhXHUwOWNkXHUwOTlmXHUwOWM3XHUwOWFlXHUwOWNkXHUwOWFjXHUwOWIwX1x1MDk4NVx1MDk5NVx1MDlj''@;'; put 'put ''ZFx1MDk5Zlx1MDljYlx1MDlhY1x1MDliMF9cdTA5YThcdTA5YWRcdTA5YzdcdTA5YWVcdTA5Y2RcdTA5YWNcdTA5YjBfXHUwOWExXHUwOWJmXHUwOWI4XHUwOWM3XHUwOWFlXHUwOWNkXHUwOWFjXHUwOWIwIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTA5OWNcdTA5YmVcdTA5YThcdTA5''@;'; put 'put ''YzFfXHUwOWFiXHUwOWM3XHUwOWFjXHUwOWNkXHUwOWIwXHUwOWMxX1x1MDlhZVx1MDliZVx1MDliMFx1MDljZFx1MDk5YV9cdTA5OGZcdTA5YWFcdTA5Y2RcdTA5YjBcdTA5YmZcdTA5YjJfXHUwOWFlXHUwOWM3X1x1MDk5Y1x1MDljMVx1MDlhOF9cdTA5OWNcdTA5YzFcdTA5YjJcdTA5YmVc''@;'; put 'put ''dTA5ODdfXHUwOTg2XHUwOTk3XHUwOWI4XHUwOWNkXHUwOTlmX1x1MDliOFx1MDljN1x1MDlhYVx1MDljZFx1MDk5Zl9cdTA5ODVcdTA5OTVcdTA5Y2RcdTA5OWZcdTA5Y2JfXHUwOWE4XHUwOWFkXHUwOWM3X1x1MDlhMVx1MDliZlx1MDliOFx1MDljNyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoi''@;'; put 'put ''XHUwOWIwXHUwOWFjXHUwOWJmXHUwOWFjXHUwOWJlXHUwOWIwX1x1MDliOFx1MDljYlx1MDlhZVx1MDlhY1x1MDliZVx1MDliMF9cdTA5YWVcdTA5OTlcdTA5Y2RcdTA5OTdcdTA5YjJcdTA5YWNcdTA5YmVcdTA5YjBfXHUwOWFjXHUwOWMxXHUwOWE3XHUwOWFjXHUwOWJlXHUwOWIwX1x1MDlh''@;'; put 'put ''Y1x1MDljM1x1MDliOVx1MDliOFx1MDljZFx1MDlhYVx1MDlhNFx1MDliZlx1MDlhY1x1MDliZVx1MDliMF9cdTA5YjZcdTA5YzFcdTA5OTVcdTA5Y2RcdTA5YjBcdTA5YWNcdTA5YmVcdTA5YjBfXHUwOWI2XHUwOWE4XHUwOWJmXHUwOWFjXHUwOWJlXHUwOWIwIi5zcGxpdCgiXyIpLHdlZWtk''@;'; put 'put ''YXlzU2hvcnQ6Ilx1MDliMFx1MDlhY1x1MDliZl9cdTA5YjhcdTA5Y2JcdTA5YWVfXHUwOWFlXHUwOTk5XHUwOWNkXHUwOTk3XHUwOWIyX1x1MDlhY1x1MDljMVx1MDlhN19cdTA5YWNcdTA5YzNcdTA5YjlcdTA5YjhcdTA5Y2RcdTA5YWFcdTA5YTRcdTA5YmZfXHUwOWI2XHUwOWMxXHUwOTk1''@;'; put 'put ''XHUwOWNkXHUwOWIwX1x1MDliNlx1MDlhOFx1MDliZiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwOWIwXHUwOWFjXHUwOWJmX1x1MDliOFx1MDljYlx1MDlhZV9cdTA5YWVcdTA5OTlcdTA5Y2RcdTA5OTdcdTA5YjJfXHUwOWFjXHUwOWMxXHUwOWE3X1x1MDlhY1x1MDljM1x1MDliOV9c''@;'; put 'put ''dTA5YjZcdTA5YzFcdTA5OTVcdTA5Y2RcdTA5YjBfXHUwOWI2XHUwOWE4XHUwOWJmIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiQSBoOm1tIFx1MDliOFx1MDlhZVx1MDlkZiIsTFRTOiJBIGg6bW06c3MgXHUwOWI4XHUwOWFlXHUwOWRmIixMOiJERC9NTS9ZWVlZIixMTDoiRCBN''@;'; put 'put ''TU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVksIEEgaDptbSBcdTA5YjhcdTA5YWVcdTA5ZGYiLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZLCBBIGg6bW0gXHUwOWI4XHUwOWFlXHUwOWRmIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA5ODZcdTA5OWNdIExUIixuZXh0RGF5OiJbXHUwOTg2XHUw''@;'; put 'put ''OTk3XHUwOWJlXHUwOWFlXHUwOWMwXHUwOTk1XHUwOWJlXHUwOWIyXSBMVCIsbmV4dFdlZWs6ImRkZGQsIExUIixsYXN0RGF5OiJbXHUwOTk3XHUwOWE0XHUwOTk1XHUwOWJlXHUwOWIyXSBMVCIsbGFzdFdlZWs6IltcdTA5OTdcdTA5YTRdIGRkZGQsIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0''@;'; put 'put ''aXZlVGltZTp7ZnV0dXJlOiIlcyBcdTA5YWFcdTA5YjBcdTA5YzciLHBhc3Q6IiVzIFx1MDk4Nlx1MDk5N1x1MDljNyIsczoiXHUwOTk1XHUwOWRmXHUwOWM3XHUwOTk1IFx1MDliOFx1MDljN1x1MDk5NVx1MDljN1x1MDlhOFx1MDljZFx1MDlhMSIsc3M6IiVkIFx1MDliOFx1MDljN1x1MDk5''@;'; put 'put ''NVx1MDljN1x1MDlhOFx1MDljZFx1MDlhMSIsbToiXHUwOThmXHUwOTk1IFx1MDlhZVx1MDliZlx1MDlhOFx1MDliZlx1MDk5ZiIsbW06IiVkIFx1MDlhZVx1MDliZlx1MDlhOFx1MDliZlx1MDk5ZiIsaDoiXHUwOThmXHUwOTk1IFx1MDk5OFx1MDlhOFx1MDljZFx1MDk5Zlx1MDliZSIsaGg6''@;'; put 'put ''IiVkIFx1MDk5OFx1MDlhOFx1MDljZFx1MDk5Zlx1MDliZSIsZDoiXHUwOThmXHUwOTk1IFx1MDlhNlx1MDliZlx1MDlhOCIsZGQ6IiVkIFx1MDlhNlx1MDliZlx1MDlhOCIsTToiXHUwOThmXHUwOTk1IFx1MDlhZVx1MDliZVx1MDliOCIsTU06IiVkIFx1MDlhZVx1MDliZVx1MDliOCIseToi''@;'; put 'put ''XHUwOThmXHUwOTk1IFx1MDlhY1x1MDk5Ylx1MDliMCIseXk6IiVkIFx1MDlhY1x1MDk5Ylx1MDliMCJ9LHByZXBhcnNlOmZ1bmN0aW9uKHcpe3JldHVybiB3LnJlcGxhY2UoL1tcdTA5ZTdcdTA5ZThcdTA5ZTlcdTA5ZWFcdTA5ZWJcdTA5ZWNcdTA5ZWRcdTA5ZWVcdTA5ZWZcdTA5ZTZdL2cs''@;'; put 'put ''ZnVuY3Rpb24oUCl7cmV0dXJuIGdbUF19KX0scG9zdGZvcm1hdDpmdW5jdGlvbih3KXtyZXR1cm4gdy5yZXBsYWNlKC9cZC9nLGZ1bmN0aW9uKFApe3JldHVybiBfW1BdfSl9LG1lcmlkaWVtUGFyc2U6L1x1MDliMFx1MDliZVx1MDlhNHxcdTA5YjhcdTA5OTVcdTA5YmVcdTA5YjJ8XHUwOWE2''@;'; put 'put ''XHUwOWMxXHUwOWFhXHUwOWMxXHUwOWIwfFx1MDlhY1x1MDliZlx1MDk5NVx1MDliZVx1MDliMnxcdTA5YjBcdTA5YmVcdTA5YTQvLG1lcmlkaWVtSG91cjpmdW5jdGlvbih3LFApe3JldHVybiAxMj09PXcmJih3PTApLCJcdTA5YjBcdTA5YmVcdTA5YTQiPT09UCYmdz49NHx8Ilx1MDlhNlx1''@;'; put 'put ''MDljMVx1MDlhYVx1MDljMVx1MDliMCI9PT1QJiZ3PDV8fCJcdTA5YWNcdTA5YmZcdTA5OTVcdTA5YmVcdTA5YjIiPT09UD93KzEyOnd9LG1lcmlkaWVtOmZ1bmN0aW9uKHcsUCxGKXtyZXR1cm4gdzw0PyJcdTA5YjBcdTA5YmVcdTA5YTQiOnc8MTA/Ilx1MDliOFx1MDk5NVx1MDliZVx1MDli''@;'; put 'put ''MiI6dzwxNz8iXHUwOWE2XHUwOWMxXHUwOWFhXHUwOWMxXHUwOWIwIjp3PDIwPyJcdTA5YWNcdTA5YmZcdTA5OTVcdTA5YmVcdTA5YjIiOiJcdTA5YjBcdTA5YmVcdTA5YTQifSx3ZWVrOntkb3c6MCxkb3k6Nn19KX0oeSg5NzU4NikpfSw5MDA0OmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9u''@;'; put 'put ''KEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz17MToiXHUwZjIxIiwyOiJcdTBmMjIiLDM6Ilx1MGYyMyIsNDoiXHUwZjI0Iiw1OiJcdTBmMjUiLDY6Ilx1MGYyNiIsNzoiXHUwZjI3Iiw4OiJcdTBmMjgiLDk6Ilx1MGYyOSIsMDoiXHUwZjIwIn0sZz17Ilx1MGYyMSI6IjEiLCJcdTBmMjIiOiIyIiwi''@;'; put 'put ''XHUwZjIzIjoiMyIsIlx1MGYyNCI6IjQiLCJcdTBmMjUiOiI1IiwiXHUwZjI2IjoiNiIsIlx1MGYyNyI6IjciLCJcdTBmMjgiOiI4IiwiXHUwZjI5IjoiOSIsIlx1MGYyMCI6IjAifTtJLmRlZmluZUxvY2FsZSgiYm8iLHttb250aHM6Ilx1MGY1Zlx1MGZiM1x1MGYwYlx1MGY1Nlx1MGYwYlx1''@;'; put 'put ''MGY1MVx1MGY0NFx1MGYwYlx1MGY1NFx1MGY3Y19cdTBmNWZcdTBmYjNcdTBmMGJcdTBmNTZcdTBmMGJcdTBmNDJcdTBmNDlcdTBmNzJcdTBmNjZcdTBmMGJcdTBmNTRfXHUwZjVmXHUwZmIzXHUwZjBiXHUwZjU2XHUwZjBiXHUwZjQyXHUwZjY2XHUwZjc0XHUwZjU4XHUwZjBiXHUwZjU0X1x1''@;'; put 'put ''MGY1Zlx1MGZiM1x1MGYwYlx1MGY1Nlx1MGYwYlx1MGY1Nlx1MGY1ZVx1MGY3Mlx1MGYwYlx1MGY1NF9cdTBmNWZcdTBmYjNcdTBmMGJcdTBmNTZcdTBmMGJcdTBmNjNcdTBmOTRcdTBmMGJcdTBmNTRfXHUwZjVmXHUwZmIzXHUwZjBiXHUwZjU2XHUwZjBiXHUwZjUxXHUwZmIyXHUwZjc0XHUw''@;'; put 'put ''ZjQyXHUwZjBiXHUwZjU0X1x1MGY1Zlx1MGZiM1x1MGYwYlx1MGY1Nlx1MGYwYlx1MGY1Nlx1MGY1MVx1MGY3NFx1MGY1M1x1MGYwYlx1MGY1NF9cdTBmNWZcdTBmYjNcdTBmMGJcdTBmNTZcdTBmMGJcdTBmNTZcdTBmNjJcdTBmOTJcdTBmYjFcdTBmNTFcdTBmMGJcdTBmNTRfXHUwZjVmXHUw''@;'; put 'put ''ZmIzXHUwZjBiXHUwZjU2XHUwZjBiXHUwZjUxXHUwZjQyXHUwZjc0XHUwZjBiXHUwZjU0X1x1MGY1Zlx1MGZiM1x1MGYwYlx1MGY1Nlx1MGYwYlx1MGY1Nlx1MGY0NVx1MGY3NFx1MGYwYlx1MGY1NF9cdTBmNWZcdTBmYjNcdTBmMGJcdTBmNTZcdTBmMGJcdTBmNTZcdTBmNDVcdTBmNzRcdTBm''@;'; put 'put ''MGJcdTBmNDJcdTBmNDVcdTBmNzJcdTBmNDJcdTBmMGJcdTBmNTRfXHUwZjVmXHUwZmIzXHUwZjBiXHUwZjU2XHUwZjBiXHUwZjU2XHUwZjQ1XHUwZjc0XHUwZjBiXHUwZjQyXHUwZjQ5XHUwZjcyXHUwZjY2XHUwZjBiXHUwZjU0Ii5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTBmNWZcdTBm''@;'; put 'put ''YjNcdTBmMGIxX1x1MGY1Zlx1MGZiM1x1MGYwYjJfXHUwZjVmXHUwZmIzXHUwZjBiM19cdTBmNWZcdTBmYjNcdTBmMGI0X1x1MGY1Zlx1MGZiM1x1MGYwYjVfXHUwZjVmXHUwZmIzXHUwZjBiNl9cdTBmNWZcdTBmYjNcdTBmMGI3X1x1MGY1Zlx1MGZiM1x1MGYwYjhfXHUwZjVmXHUwZmIzXHUw''@;'; put 'put ''ZjBiOV9cdTBmNWZcdTBmYjNcdTBmMGIxMF9cdTBmNWZcdTBmYjNcdTBmMGIxMV9cdTBmNWZcdTBmYjNcdTBmMGIxMiIuc3BsaXQoIl8iKSxtb250aHNTaG9ydFJlZ2V4Oi9eKFx1MGY1Zlx1MGZiM1x1MGYwYlxkezEsMn0pLyxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJcdTBmNDJc''@;'; put 'put ''dTBmNWZcdTBmNjBcdTBmMGJcdTBmNDlcdTBmNzJcdTBmMGJcdTBmNThcdTBmMGJfXHUwZjQyXHUwZjVmXHUwZjYwXHUwZjBiXHUwZjVmXHUwZmIzXHUwZjBiXHUwZjU2XHUwZjBiX1x1MGY0Mlx1MGY1Zlx1MGY2MFx1MGYwYlx1MGY1OFx1MGY3Mlx1MGY0Mlx1MGYwYlx1MGY1MVx1MGY1OFx1''@;'; put 'put ''MGY2Mlx1MGYwYl9cdTBmNDJcdTBmNWZcdTBmNjBcdTBmMGJcdTBmNjNcdTBmYjdcdTBmNDJcdTBmMGJcdTBmNTRcdTBmMGJfXHUwZjQyXHUwZjVmXHUwZjYwXHUwZjBiXHUwZjU1XHUwZjc0XHUwZjYyXHUwZjBiXHUwZjU2XHUwZjc0X1x1MGY0Mlx1MGY1Zlx1MGY2MFx1MGYwYlx1MGY1NFx1''@;'; put 'put ''MGYwYlx1MGY2Nlx1MGY0NFx1MGY2Nlx1MGYwYl9cdTBmNDJcdTBmNWZcdTBmNjBcdTBmMGJcdTBmNjZcdTBmYTRcdTBmN2FcdTBmNTNcdTBmMGJcdTBmNTRcdTBmMGIiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwZjQ5XHUwZjcyXHUwZjBiXHUwZjU4XHUwZjBiX1x1MGY1Zlx1MGZi''@;'; put 'put ''M1x1MGYwYlx1MGY1Nlx1MGYwYl9cdTBmNThcdTBmNzJcdTBmNDJcdTBmMGJcdTBmNTFcdTBmNThcdTBmNjJcdTBmMGJfXHUwZjYzXHUwZmI3XHUwZjQyXHUwZjBiXHUwZjU0XHUwZjBiX1x1MGY1NVx1MGY3NFx1MGY2Mlx1MGYwYlx1MGY1Nlx1MGY3NF9cdTBmNTRcdTBmMGJcdTBmNjZcdTBm''@;'; put 'put ''NDRcdTBmNjZcdTBmMGJfXHUwZjY2XHUwZmE0XHUwZjdhXHUwZjUzXHUwZjBiXHUwZjU0XHUwZjBiIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTBmNDlcdTBmNzJfXHUwZjVmXHUwZmIzX1x1MGY1OFx1MGY3Mlx1MGY0Ml9cdTBmNjNcdTBmYjdcdTBmNDJfXHUwZjU1XHUwZjc0XHUwZjYy''@;'; put 'put ''X1x1MGY2Nlx1MGY0NFx1MGY2Nl9cdTBmNjZcdTBmYTRcdTBmN2FcdTBmNTMiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJBIGg6bW0iLExUUzoiQSBoOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVksIEEgaDptbSIsTExMTDoi''@;'; put 'put ''ZGRkZCwgRCBNTU1NIFlZWVksIEEgaDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwZjUxXHUwZjcyXHUwZjBiXHUwZjYyXHUwZjcyXHUwZjQ0XSBMVCIsbmV4dERheToiW1x1MGY2Nlx1MGY0NFx1MGYwYlx1MGY0OVx1MGY3Mlx1MGY1M10gTFQiLG5leHRXZWVrOiJbXHUwZjU2XHUwZjUx''@;'; put 'put ''XHUwZjc0XHUwZjUzXHUwZjBiXHUwZjU1XHUwZmIyXHUwZjQyXHUwZjBiXHUwZjYyXHUwZjk3XHUwZjdhXHUwZjY2XHUwZjBiXHUwZjU4XSwgTFQiLGxhc3REYXk6IltcdTBmNDFcdTBmMGJcdTBmNjZcdTBmNDRdIExUIixsYXN0V2VlazoiW1x1MGY1Nlx1MGY1MVx1MGY3NFx1MGY1M1x1MGYw''@;'; put 'put ''Ylx1MGY1NVx1MGZiMlx1MGY0Mlx1MGYwYlx1MGY1OFx1MGY1MFx1MGY2MFx1MGYwYlx1MGY1OF0gZGRkZCwgTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIFx1MGY2M1x1MGYwYiIscGFzdDoiJXMgXHUwZjY2XHUwZjk0XHUwZjUzXHUwZjBiXHUwZjYzIixzOiJc''@;'; put 'put ''dTBmNjNcdTBmNThcdTBmMGJcdTBmNjZcdTBmNDQiLHNzOiIlZCBcdTBmNjZcdTBmOTBcdTBmNjJcdTBmMGJcdTBmNDZcdTBmMGQiLG06Ilx1MGY2Nlx1MGY5MFx1MGY2Mlx1MGYwYlx1MGY1OFx1MGYwYlx1MGY0Mlx1MGY0NVx1MGY3Mlx1MGY0MiIsbW06IiVkIFx1MGY2Nlx1MGY5MFx1MGY2''@;'; put 'put ''Mlx1MGYwYlx1MGY1OCIsaDoiXHUwZjQ2XHUwZjc0XHUwZjBiXHUwZjVhXHUwZjdjXHUwZjUxXHUwZjBiXHUwZjQyXHUwZjQ1XHUwZjcyXHUwZjQyIixoaDoiJWQgXHUwZjQ2XHUwZjc0XHUwZjBiXHUwZjVhXHUwZjdjXHUwZjUxIixkOiJcdTBmNDlcdTBmNzJcdTBmNTNcdTBmMGJcdTBmNDJc''@;'; put 'put ''dTBmNDVcdTBmNzJcdTBmNDIiLGRkOiIlZCBcdTBmNDlcdTBmNzJcdTBmNTNcdTBmMGIiLE06Ilx1MGY1Zlx1MGZiM1x1MGYwYlx1MGY1Nlx1MGYwYlx1MGY0Mlx1MGY0NVx1MGY3Mlx1MGY0MiIsTU06IiVkIFx1MGY1Zlx1MGZiM1x1MGYwYlx1MGY1NiIseToiXHUwZjYzXHUwZjdjXHUwZjBi''@;'; put 'put ''XHUwZjQyXHUwZjQ1XHUwZjcyXHUwZjQyIix5eToiJWQgXHUwZjYzXHUwZjdjIn0scHJlcGFyc2U6ZnVuY3Rpb24odyl7cmV0dXJuIHcucmVwbGFjZSgvW1x1MGYyMVx1MGYyMlx1MGYyM1x1MGYyNFx1MGYyNVx1MGYyNlx1MGYyN1x1MGYyOFx1MGYyOVx1MGYyMF0vZyxmdW5jdGlvbihQKXty''@;'; put 'put ''ZXR1cm4gZ1tQXX0pfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKHcpe3JldHVybiB3LnJlcGxhY2UoL1xkL2csZnVuY3Rpb24oUCl7cmV0dXJuIF9bUF19KX0sbWVyaWRpZW1QYXJzZTovXHUwZjU4XHUwZjVhXHUwZjUzXHUwZjBiXHUwZjU4XHUwZjdjfFx1MGY1ZVx1MGY3Y1x1MGY0Mlx1MGY2Nlx1''@;'; put 'put ''MGYwYlx1MGY0MFx1MGY2NnxcdTBmNDlcdTBmNzJcdTBmNTNcdTBmMGJcdTBmNDJcdTBmNzRcdTBmNDR8XHUwZjUxXHUwZjQyXHUwZjdjXHUwZjQ0XHUwZjBiXHUwZjUxXHUwZjQyfFx1MGY1OFx1MGY1YVx1MGY1M1x1MGYwYlx1MGY1OFx1MGY3Yy8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKHcs''@;'; put 'put ''UCl7cmV0dXJuIDEyPT09dyYmKHc9MCksIlx1MGY1OFx1MGY1YVx1MGY1M1x1MGYwYlx1MGY1OFx1MGY3YyI9PT1QJiZ3Pj00fHwiXHUwZjQ5XHUwZjcyXHUwZjUzXHUwZjBiXHUwZjQyXHUwZjc0XHUwZjQ0Ij09PVAmJnc8NXx8Ilx1MGY1MVx1MGY0Mlx1MGY3Y1x1MGY0NFx1MGYwYlx1MGY1''@;'; put 'put ''MVx1MGY0MiI9PT1QP3crMTI6d30sbWVyaWRpZW06ZnVuY3Rpb24odyxQLEYpe3JldHVybiB3PDQ/Ilx1MGY1OFx1MGY1YVx1MGY1M1x1MGYwYlx1MGY1OFx1MGY3YyI6dzwxMD8iXHUwZjVlXHUwZjdjXHUwZjQyXHUwZjY2XHUwZjBiXHUwZjQwXHUwZjY2Ijp3PDE3PyJcdTBmNDlcdTBmNzJc''@;'; put 'put ''dTBmNTNcdTBmMGJcdTBmNDJcdTBmNzRcdTBmNDQiOnc8MjA/Ilx1MGY1MVx1MGY0Mlx1MGY3Y1x1MGY0NFx1MGYwYlx1MGY1MVx1MGY0MiI6Ilx1MGY1OFx1MGY1YVx1MGY1M1x1MGYwYlx1MGY1OFx1MGY3YyJ9LHdlZWs6e2RvdzowLGRveTo2fX0pfSh5KDk3NTg2KSl9LDUwOTI3OmZ1bmN0''@;'; put 'put ''aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBfKFkscSxlZSl7cmV0dXJuIFkrIiAiK2Z1bmN0aW9uIHcoWSxxKXtyZXR1cm4gMj09PXE/ZnVuY3Rpb24gUChZKXt2YXIgcT17bToidiIsYjoidiIsZDoieiJ9O3JldHVybiB2b2lkIDA9PT1xW1kuY2hhckF0''@;'; put 'put ''KDApXT9ZOnFbWS5jaGFyQXQoMCldK1kuc3Vic3RyaW5nKDEpfShZKTpZfSh7bW06Im11bnV0ZW5uIixNTToibWl6IixkZDoiZGV2ZXpoIn1bZWVdLFkpfWZ1bmN0aW9uIEIoWSl7cmV0dXJuIFk+OT9CKFklMTApOll9dmFyIEY9Wy9eZ2VuL2ksL15jW1x1MDJiY1wnXWh3ZS9pLC9ebWV1L2ks''@;'; put 'put ''L15lYnIvaSwvXm1hZS9pLC9eKG1lenxldmUpL2ksL15nb3UvaSwvXmVvcy9pLC9eZ3dlL2ksL15oZXIvaSwvXmR1L2ksL15rZXIvaV0sTz0vXihnZW52ZXJ8Y1tcdTAyYmNcJ11od2V2cmVyfG1ldXJ6aHxlYnJlbHxtYWV8bWV6aGV2ZW58Z291ZXJlfGVvc3R8Z3dlbmdvbG98aGVyZXxkdXxr''@;'; put 'put ''ZXJ6dXxnZW58Y1tcdTAyYmNcJ11od2V8bWV1fGVicnxtYWV8ZXZlfGdvdXxlb3N8Z3dlfGhlcnxkdXxrZXIpL2ksVT1bL15TdS9pLC9eTHUvaSwvXk1lKFtecl18JCkvaSwvXk1lci9pLC9eWWEvaSwvXkd3L2ksL15TYS9pXTtJLmRlZmluZUxvY2FsZSgiYnIiLHttb250aHM6IkdlbnZlcl9D''@;'; put 'put ''XHUwMmJjaHdldnJlcl9NZXVyemhfRWJyZWxfTWFlX01lemhldmVuX0dvdWVyZV9Fb3N0X0d3ZW5nb2xvX0hlcmVfRHVfS2VyenUiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikdlbl9DXHUwMmJjaHdlX01ldV9FYnJfTWFlX0V2ZV9Hb3VfRW9zX0d3ZV9IZXJfRHVfS2VyIi5zcGxpdCgiXyIp''@;'; put 'put ''LHdlZWtkYXlzOiJTdWxfTHVuX01ldXJ6aF9NZXJjXHUwMmJjaGVyX1lhb3VfR3dlbmVyX1NhZG9ybiIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJTdWxfTHVuX01ldV9NZXJfWWFvX0d3ZV9TYWQiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlN1X0x1X01lX01lcl9ZYV9Hd19TYSIuc3Bs''@;'; put 'put ''aXQoIl8iKSx3ZWVrZGF5c1BhcnNlOlUsZnVsbFdlZWtkYXlzUGFyc2U6Wy9ec3VsL2ksL15sdW4vaSwvXm1ldXJ6aC9pLC9ebWVyY1tcdTAyYmNcJ11oZXIvaSwvXnlhb3UvaSwvXmd3ZW5lci9pLC9ec2Fkb3JuL2ldLHNob3J0V2Vla2RheXNQYXJzZTpbL15TdWwvaSwvXkx1bi9pLC9eTWV1''@;'; put 'put ''L2ksL15NZXIvaSwvXllhby9pLC9eR3dlL2ksL15TYWQvaV0sbWluV2Vla2RheXNQYXJzZTpVLG1vbnRoc1JlZ2V4Ok8sbW9udGhzU2hvcnRSZWdleDpPLG1vbnRoc1N0cmljdFJlZ2V4Oi9eKGdlbnZlcnxjW1x1MDJiY1wnXWh3ZXZyZXJ8bWV1cnpofGVicmVsfG1hZXxtZXpoZXZlbnxnb3Vl''@;'; put 'put ''cmV8ZW9zdHxnd2VuZ29sb3xoZXJlfGR1fGtlcnp1KS9pLG1vbnRoc1Nob3J0U3RyaWN0UmVnZXg6L14oZ2VufGNbXHUwMmJjXCddaHdlfG1ldXxlYnJ8bWFlfGV2ZXxnb3V8ZW9zfGd3ZXxoZXJ8ZHV8a2VyKS9pLG1vbnRoc1BhcnNlOkYsbG9uZ01vbnRoc1BhcnNlOkYsc2hvcnRNb250aHNQ''@;'; put 'put ''YXJzZTpGLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIFthIHZpel0gTU1NTSBZWVlZIixMTEw6IkQgW2Egdml6XSBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgW2Egdml6XSBNTU1NIFlZWVkgSEg6bW0ifSxjYWxl''@;'; put 'put ''bmRhcjp7c2FtZURheToiW0hpeml2IGRhXSBMVCIsbmV4dERheToiW1dhcmNcdTAyYmNob2F6aCBkYV0gTFQiLG5leHRXZWVrOiJkZGRkIFtkYV0gTFQiLGxhc3REYXk6IltEZWNcdTAyYmNoIGRhXSBMVCIsbGFzdFdlZWs6ImRkZGQgW3Bhc2V0IGRhXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxh''@;'; put 'put ''dGl2ZVRpbWU6e2Z1dHVyZToiYS1iZW5uICVzIixwYXN0OiIlcyBcdTAyYmN6byIsczoidW4gbmViZXVkIHNlZ29uZGVubm9ceGY5IixzczoiJWQgZWlsZW5uIixtOiJ1ciB2dW51dGVubiIsbW06XyxoOiJ1biBldXIiLGhoOiIlZCBldXIiLGQ6InVuIGRldmV6aCIsZGQ6XyxNOiJ1ciBtaXoi''@;'; put 'put ''LE1NOl8seToidXIgYmxvYXoiLHl5OmZ1bmN0aW9uIGcoWSl7c3dpdGNoKEIoWSkpe2Nhc2UgMTpjYXNlIDM6Y2FzZSA0OmNhc2UgNTpjYXNlIDk6cmV0dXJuIFkrIiBibG9heiI7ZGVmYXVsdDpyZXR1cm4gWSsiIHZsb2F6In19fSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KGFc''@;'; put 'put ''eGYxfHZldCkvLG9yZGluYWw6ZnVuY3Rpb24oWSl7cmV0dXJuIFkrKDE9PT1ZPyJhXHhmMSI6InZldCIpfSx3ZWVrOntkb3c6MSxkb3k6NH0sbWVyaWRpZW1QYXJzZTovYS5tLnxnLm0uLyxpc1BNOmZ1bmN0aW9uKFkpe3JldHVybiJnLm0uIj09PVl9LG1lcmlkaWVtOmZ1bmN0aW9uKFkscSxl''@;'; put 'put ''ZSl7cmV0dXJuIFk8MTI/ImEubS4iOiJnLm0uIn19KX0oeSg5NzU4NikpfSw4Nzc2ODpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZyh3LFAsRil7dmFyIE89dysiICI7c3dpdGNoKEYpe2Nhc2Uic3MiOnJldHVybiBPKygxPT09dz8ic2VrdW5k''@;'; put 'put ''YSI6Mj09PXd8fDM9PT13fHw0PT09dz8ic2VrdW5kZSI6InNla3VuZGkiKTtjYXNlIm1tIjpyZXR1cm4gTysoMT09PXc/Im1pbnV0YSI6Mj09PXd8fDM9PT13fHw0PT09dz8ibWludXRlIjoibWludXRhIik7Y2FzZSJoIjpyZXR1cm4iamVkYW4gc2F0IjtjYXNlImhoIjpyZXR1cm4gTysoMT09''@;'; put 'put ''PXc/InNhdCI6Mj09PXd8fDM9PT13fHw0PT09dz8ic2F0YSI6InNhdGkiKTtjYXNlImRkIjpyZXR1cm4gTysoMT09PXc/ImRhbiI6ImRhbmEiKTtjYXNlIk1NIjpyZXR1cm4gTysoMT09PXc/Im1qZXNlYyI6Mj09PXd8fDM9PT13fHw0PT09dz8ibWplc2VjYSI6Im1qZXNlY2kiKTtjYXNlInl5''@;'; put 'put ''IjpyZXR1cm4gTysoMT09PXc/ImdvZGluYSI6Mj09PXd8fDM9PT13fHw0PT09dz8iZ29kaW5lIjoiZ29kaW5hIil9fUkuZGVmaW5lTG9jYWxlKCJicyIse21vbnRoczoiamFudWFyX2ZlYnJ1YXJfbWFydF9hcHJpbF9tYWpfanVuaV9qdWxpX2F1Z3VzdF9zZXB0ZW1iYXJfb2t0b2Jhcl9ub3Zl''@;'; put 'put ''bWJhcl9kZWNlbWJhciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiamFuLl9mZWIuX21hci5fYXByLl9tYWouX2p1bi5fanVsLl9hdWcuX3NlcC5fb2t0Ll9ub3YuX2RlYy4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoibmVkamVsamFfcG9uZWRqZWxqYWtfdXRv''@;'; put 'put ''cmFrX3NyaWplZGFfXHUwMTBkZXR2cnRha19wZXRha19zdWJvdGEiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoibmVkLl9wb24uX3V0by5fc3JpLl9cdTAxMGRldC5fcGV0Ll9zdWIuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJuZV9wb191dF9zcl9cdTAxMGRlX3BlX3N1Ii5zcGxpdCgi''@;'; put 'put ''XyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0iLExUUzoiSDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQuIE1NTU0gWVlZWSIsTExMOiJELiBNTU1NIFlZWVkgSDptbSIsTExMTDoiZGRkZCwgRC4gTU1NTSBZWVlZIEg6bW0ifSxjYWxlbmRhcjp7''@;'; put 'put ''c2FtZURheToiW2RhbmFzIHVdIExUIixuZXh0RGF5OiJbc3V0cmEgdV0gTFQiLG5leHRXZWVrOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMDpyZXR1cm4iW3VdIFtuZWRqZWxqdV0gW3VdIExUIjtjYXNlIDM6cmV0dXJuIlt1XSBbc3JpamVkdV0gW3VdIExUIjtjYXNlIDY6''@;'; put 'put ''cmV0dXJuIlt1XSBbc3Vib3R1XSBbdV0gTFQiO2Nhc2UgMTpjYXNlIDI6Y2FzZSA0OmNhc2UgNTpyZXR1cm4iW3VdIGRkZGQgW3VdIExUIn19LGxhc3REYXk6IltqdVx1MDEwZGVyIHVdIExUIixsYXN0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6Y2FzZSAzOnJl''@;'; put 'put ''dHVybiJbcHJvXHUwMTYxbHVdIGRkZGQgW3VdIExUIjtjYXNlIDY6cmV0dXJuIltwcm9cdTAxNjFsZV0gW3N1Ym90ZV0gW3VdIExUIjtjYXNlIDE6Y2FzZSAyOmNhc2UgNDpjYXNlIDU6cmV0dXJuIltwcm9cdTAxNjFsaV0gZGRkZCBbdV0gTFQifX0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRp''@;'; put 'put ''bWU6e2Z1dHVyZToiemEgJXMiLHBhc3Q6InByaWplICVzIixzOiJwYXIgc2VrdW5kaSIsc3M6ZyxtOmZ1bmN0aW9uIF8odyxQLEYsTyl7aWYoIm0iPT09RilyZXR1cm4gUD8iamVkbmEgbWludXRhIjpPPyJqZWRudSBtaW51dHUiOiJqZWRuZSBtaW51dGUifSxtbTpnLGg6ZyxoaDpnLGQ6ImRh''@;'; put 'put ''biIsZGQ6ZyxNOiJtamVzZWMiLE1NOmcseToiZ29kaW51Iix5eTpnfSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95Ojd9fSl9KHkoOTc1ODYpKX0sNTYyOTE6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBz''@;'; put 'put ''dHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJjYSIse21vbnRoczp7c3RhbmRhbG9uZToiZ2VuZXJfZmVicmVyX21hclx4ZTdfYWJyaWxfbWFpZ19qdW55X2p1bGlvbF9hZ29zdF9zZXRlbWJyZV9vY3R1YnJlX25vdmVtYnJlX2Rlc2VtYnJlIi5zcGxpdCgiXyIpLGZvcm1hdDoiZGUgZ2VuZXJfZGUg''@;'; put 'put ''ZmVicmVyX2RlIG1hclx4ZTdfZCdhYnJpbF9kZSBtYWlnX2RlIGp1bnlfZGUganVsaW9sX2QnYWdvc3RfZGUgc2V0ZW1icmVfZCdvY3R1YnJlX2RlIG5vdmVtYnJlX2RlIGRlc2VtYnJlIi5zcGxpdCgiXyIpLGlzRm9ybWF0Oi9EW29EXT8oXHMpK01NTU0vfSxtb250aHNTaG9ydDoiZ2VuLl9m''@;'; put 'put ''ZWJyLl9tYXJceGU3X2Fici5fbWFpZ19qdW55X2p1bC5fYWcuX3NldC5fb2N0Ll9ub3YuX2Rlcy4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiZGl1bWVuZ2VfZGlsbHVuc19kaW1hcnRzX2RpbWVjcmVzX2Rpam91c19kaXZlbmRyZXNfZGlzc2FidGUiLnNwbGl0''@;'; put 'put ''KCJfIiksd2Vla2RheXNTaG9ydDoiZGcuX2RsLl9kdC5fZGMuX2RqLl9kdi5fZHMuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJkZ19kbF9kdF9kY19kal9kdl9kcyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJIOm1tIixMVFM6Ikg6bW06''@;'; put 'put ''c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gW2RlXSBZWVlZIixsbDoiRCBNTU0gWVlZWSIsTExMOiJEIE1NTU0gW2RlXSBZWVlZIFthIGxlc10gSDptbSIsbGxsOiJEIE1NTSBZWVlZLCBIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBbZGVdIFlZWVkgW2EgbGVzXSBIOm1tIixsbGxsOiJk''@;'; put 'put ''ZGQgRCBNTU0gWVlZWSwgSDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OmZ1bmN0aW9uKCl7cmV0dXJuIlthdnVpIGEgIisoMSE9PXRoaXMuaG91cnMoKT8ibGVzIjoibGEiKSsiXSBMVCJ9LG5leHREYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW2RlbVx4ZTAgYSAiKygxIT09dGhpcy5ob3VycygpPyJs''@;'; put 'put ''ZXMiOiJsYSIpKyJdIExUIn0sbmV4dFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4iZGRkZCBbYSAiKygxIT09dGhpcy5ob3VycygpPyJsZXMiOiJsYSIpKyJdIExUIn0sbGFzdERheTpmdW5jdGlvbigpe3JldHVybiJbYWhpciBhICIrKDEhPT10aGlzLmhvdXJzKCk/ImxlcyI6ImxhIikrIl0gTFQi''@;'; put 'put ''fSxsYXN0V2VlazpmdW5jdGlvbigpe3JldHVybiJbZWxdIGRkZGQgW3Bhc3NhdCBhICIrKDEhPT10aGlzLmhvdXJzKCk/ImxlcyI6ImxhIikrIl0gTFQifSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJkJ2FxdVx4ZWQgJXMiLHBhc3Q6ImZhICVzIixzOiJ1bnMgc2Vnb25z''@;'; put 'put ''IixzczoiJWQgc2Vnb25zIixtOiJ1biBtaW51dCIsbW06IiVkIG1pbnV0cyIsaDoidW5hIGhvcmEiLGhoOiIlZCBob3JlcyIsZDoidW4gZGlhIixkZDoiJWQgZGllcyIsTToidW4gbWVzIixNTToiJWQgbWVzb3MiLHk6InVuIGFueSIseXk6IiVkIGFueXMifSxkYXlPZk1vbnRoT3JkaW5hbFBh''@;'; put 'put ''cnNlOi9cZHsxLDJ9KHJ8bnx0fFx4ZTh8YSkvLG9yZGluYWw6ZnVuY3Rpb24oZyxCKXt2YXIgdz0xPT09Zz8iciI6Mj09PWc/Im4iOjM9PT1nPyJyIjo0PT09Zz8idCI6Ilx4ZTgiO3JldHVybigidyI9PT1CfHwiVyI9PT1CKSYmKHc9ImEiKSxnK3d9LHdlZWs6e2RvdzoxLGRveTo0fX0pfSh5''@;'; put 'put ''KDk3NTg2KSl9LDg1MzAxOmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz17c3RhbmRhbG9uZToibGVkZW5fXHhmYW5vcl9iXHUwMTU5ZXplbl9kdWJlbl9rdlx1MDExYnRlbl9cdTAxMGRlcnZlbl9cdTAxMGRlcnZlbmVjX3NycGVuX3pceGUxXHUwMTU5''@;'; put 'put ''XHhlZF9cdTAxNTlceGVkamVuX2xpc3RvcGFkX3Byb3NpbmVjIi5zcGxpdCgiXyIpLGZvcm1hdDoibGVkbmFfXHhmYW5vcmFfYlx1MDE1OWV6bmFfZHVibmFfa3ZcdTAxMWJ0bmFfXHUwMTBkZXJ2bmFfXHUwMTBkZXJ2ZW5jZV9zcnBuYV96XHhlMVx1MDE1OVx4ZWRfXHUwMTU5XHhlZGpuYV9s''@;'; put 'put ''aXN0b3BhZHVfcHJvc2luY2UiLnNwbGl0KCJfIiksaXNGb3JtYXQ6L0REP1tvLl0/KFxbW15cW1xdXSpcXXxccykrTU1NTS99LGc9ImxlZF9ceGZhbm9fYlx1MDE1OWVfZHViX2t2XHUwMTFiX1x1MDEwZHZuX1x1MDEwZHZjX3NycF96XHhlMVx1MDE1OV9cdTAxNTlceGVkal9saXNfcHJvIi5z''@;'; put 'put ''cGxpdCgiXyIpLEI9Wy9ebGVkL2ksL15ceGZhbm8vaSwvXmJcdTAxNTllL2ksL15kdWIvaSwvXmt2XHUwMTFiL2ksL14oXHUwMTBkdm58XHUwMTBkZXJ2ZW4kfFx1MDEwZGVydm5hKS9pLC9eKFx1MDEwZHZjfFx1MDEwZGVydmVuZWN8XHUwMTBkZXJ2ZW5jZSkvaSwvXnNycC9pLC9eelx4ZTFc''@;'; put 'put ''dTAxNTkvaSwvXlx1MDE1OVx4ZWRqL2ksL15saXMvaSwvXnByby9pXSx3PS9eKGxlZGVufFx4ZmFub3J8Ylx1MDE1OWV6ZW58ZHViZW58a3ZcdTAxMWJ0ZW58XHUwMTBkZXJ2ZW5lY3xcdTAxMGRlcnZlbmNlfFx1MDEwZGVydmVufFx1MDEwZGVydm5hfHNycGVufHpceGUxXHUwMTU5XHhlZHxc''@;'; put 'put ''dTAxNTlceGVkamVufGxpc3RvcGFkfHByb3NpbmVjfGxlZHxceGZhbm98Ylx1MDE1OWV8ZHVifGt2XHUwMTFifFx1MDEwZHZufFx1MDEwZHZjfHNycHx6XHhlMVx1MDE1OXxcdTAxNTlceGVkanxsaXN8cHJvKS9pO2Z1bmN0aW9uIFAoeil7cmV0dXJuIHo+MSYmejw1JiYxIT1+fih6LzEwKX1m''@;'; put 'put ''dW5jdGlvbiBGKHosTixMLEspe3ZhciBVPXorIiAiO3N3aXRjaChMKXtjYXNlInMiOnJldHVybiBOfHxLPyJwXHhlMXIgc2VrdW5kIjoicFx4ZTFyIHNla3VuZGFtaSI7Y2FzZSJzcyI6cmV0dXJuIE58fEs/VSsoUCh6KT8ic2VrdW5keSI6InNla3VuZCIpOlUrInNla3VuZGFtaSI7Y2FzZSJt''@;'; put 'put ''IjpyZXR1cm4gTj8ibWludXRhIjpLPyJtaW51dHUiOiJtaW51dG91IjtjYXNlIm1tIjpyZXR1cm4gTnx8Sz9VKyhQKHopPyJtaW51dHkiOiJtaW51dCIpOlUrIm1pbnV0YW1pIjtjYXNlImgiOnJldHVybiBOPyJob2RpbmEiOks/ImhvZGludSI6ImhvZGlub3UiO2Nhc2UiaGgiOnJldHVybiBO''@;'; put 'put ''fHxLP1UrKFAoeik/ImhvZGlueSI6ImhvZGluIik6VSsiaG9kaW5hbWkiO2Nhc2UiZCI6cmV0dXJuIE58fEs/ImRlbiI6ImRuZW0iO2Nhc2UiZGQiOnJldHVybiBOfHxLP1UrKFAoeik/ImRueSI6ImRuXHhlZCIpOlUrImRueSI7Y2FzZSJNIjpyZXR1cm4gTnx8Sz8ibVx1MDExYnNceGVkYyI6''@;'; put 'put ''Im1cdTAxMWJzXHhlZGNlbSI7Y2FzZSJNTSI6cmV0dXJuIE58fEs/VSsoUCh6KT8ibVx1MDExYnNceGVkY2UiOiJtXHUwMTFic1x4ZWRjXHUwMTZmIik6VSsibVx1MDExYnNceGVkY2kiO2Nhc2UieSI6cmV0dXJuIE58fEs/InJvayI6InJva2VtIjtjYXNlInl5IjpyZXR1cm4gTnx8Sz9VKyhQ''@;'; put 'put ''KHopPyJyb2t5IjoibGV0Iik6VSsibGV0eSJ9fUkuZGVmaW5lTG9jYWxlKCJjcyIse21vbnRoczpfLG1vbnRoc1Nob3J0OmcsbW9udGhzUmVnZXg6dyxtb250aHNTaG9ydFJlZ2V4OncsbW9udGhzU3RyaWN0UmVnZXg6L14obGVkZW58bGVkbmF8XHhmYW5vcmF8XHhmYW5vcnxiXHUwMTU5ZXpl''@;'; put 'put ''bnxiXHUwMTU5ZXpuYXxkdWJlbnxkdWJuYXxrdlx1MDExYnRlbnxrdlx1MDExYnRuYXxcdTAxMGRlcnZlbmVjfFx1MDEwZGVydmVuY2V8XHUwMTBkZXJ2ZW58XHUwMTBkZXJ2bmF8c3JwZW58c3JwbmF8elx4ZTFcdTAxNTlceGVkfFx1MDE1OVx4ZWRqZW58XHUwMTU5XHhlZGpuYXxsaXN0b3Bh''@;'; put 'put ''ZHV8bGlzdG9wYWR8cHJvc2luZWN8cHJvc2luY2UpL2ksbW9udGhzU2hvcnRTdHJpY3RSZWdleDovXihsZWR8XHhmYW5vfGJcdTAxNTllfGR1Ynxrdlx1MDExYnxcdTAxMGR2bnxcdTAxMGR2Y3xzcnB8elx4ZTFcdTAxNTl8XHUwMTU5XHhlZGp8bGlzfHBybykvaSxtb250aHNQYXJzZTpCLGxv''@;'; put 'put ''bmdNb250aHNQYXJzZTpCLHNob3J0TW9udGhzUGFyc2U6Qix3ZWVrZGF5czoibmVkXHUwMTFibGVfcG9uZFx1MDExYmxceGVkX1x4ZmF0ZXJceGZkX3N0XHUwMTU5ZWRhX1x1MDEwZHR2cnRla19wXHhlMXRla19zb2JvdGEiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoibmVfcG9fXHhmYXRf''@;'; put 'put ''c3RfXHUwMTBkdF9wXHhlMV9zbyIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoibmVfcG9fXHhmYXRfc3RfXHUwMTBkdF9wXHhlMV9zbyIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0iLExUUzoiSDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQuIE1NTU0gWVlZWSIsTExM''@;'; put 'put ''OiJELiBNTU1NIFlZWVkgSDptbSIsTExMTDoiZGRkZCBELiBNTU1NIFlZWVkgSDptbSIsbDoiRC4gTS4gWVlZWSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbZG5lcyB2XSBMVCIsbmV4dERheToiW3pceGVkdHJhIHZdIExUIixuZXh0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtj''@;'; put 'put ''YXNlIDA6cmV0dXJuIlt2IG5lZFx1MDExYmxpIHZdIExUIjtjYXNlIDE6Y2FzZSAyOnJldHVybiJbdl0gZGRkZCBbdl0gTFQiO2Nhc2UgMzpyZXR1cm4iW3ZlIHN0XHUwMTU5ZWR1IHZdIExUIjtjYXNlIDQ6cmV0dXJuIlt2ZSBcdTAxMGR0dnJ0ZWsgdl0gTFQiO2Nhc2UgNTpyZXR1cm4iW3Yg''@;'; put 'put ''cFx4ZTF0ZWsgdl0gTFQiO2Nhc2UgNjpyZXR1cm4iW3Ygc29ib3R1IHZdIExUIn19LGxhc3REYXk6Ilt2XHUwMTBkZXJhIHZdIExUIixsYXN0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6cmV0dXJuIlttaW51bG91IG5lZFx1MDExYmxpIHZdIExUIjtjYXNlIDE6''@;'; put 'put ''Y2FzZSAyOnJldHVybiJbbWludWxceGU5XSBkZGRkIFt2XSBMVCI7Y2FzZSAzOnJldHVybiJbbWludWxvdSBzdFx1MDE1OWVkdSB2XSBMVCI7Y2FzZSA0OmNhc2UgNTpyZXR1cm4iW21pbnVsXHhmZF0gZGRkZCBbdl0gTFQiO2Nhc2UgNjpyZXR1cm4iW21pbnVsb3Ugc29ib3R1IHZdIExUIn19''@;'; put 'put ''LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6InphICVzIixwYXN0OiJwXHUwMTU5ZWQgJXMiLHM6RixzczpGLG06RixtbTpGLGg6RixoaDpGLGQ6RixkZDpGLE06RixNTTpGLHk6Rix5eTpGfSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVk''@;'; put 'put ''LiIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KHkoOTc1ODYpKX0sNjY2NjY6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJjdiIse21vbnRoczoiXHUwNDNhXHUwNGQxXHUwNDQwXHUwNDNiXHUwNDMwXHUwNDQ3X1x1MDQzZFx1MDQzMFx1''@;'; put 'put ''MDQ0MFx1MDRkMVx1MDQ0MV9cdTA0M2ZcdTA0NDNcdTA0NDhfXHUwNDMwXHUwNDNhXHUwNDMwX1x1MDQzY1x1MDQzMFx1MDQzOV9cdTA0YWJcdTA0ZDdcdTA0NDBcdTA0NDJcdTA0M2NcdTA0MzVfXHUwNDQzXHUwNDQyXHUwNGQxX1x1MDRhYlx1MDQ0M1x1MDQ0MFx1MDQzYlx1MDQzMF9cdTA0''@;'; put 'put ''MzBcdTA0MzJcdTA0ZDFcdTA0M2RfXHUwNDRlXHUwNDNmXHUwNDMwX1x1MDQ0N1x1MDRmM1x1MDQzYV9cdTA0NDBcdTA0MzBcdTA0NDhcdTA0NDJcdTA0MzBcdTA0MzIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MDQzYVx1MDRkMVx1MDQ0MF9cdTA0M2RcdTA0MzBcdTA0NDBfXHUwNDNm''@;'; put 'put ''XHUwNDQzXHUwNDQ4X1x1MDQzMFx1MDQzYVx1MDQzMF9cdTA0M2NcdTA0MzBcdTA0MzlfXHUwNGFiXHUwNGQ3XHUwNDQwX1x1MDQ0M1x1MDQ0Mlx1MDRkMV9cdTA0YWJcdTA0NDNcdTA0NDBfXHUwNDMwXHUwNDMyXHUwNDNkX1x1MDQ0ZVx1MDQzZlx1MDQzMF9cdTA0NDdcdTA0ZjNcdTA0M2Ff''@;'; put 'put ''XHUwNDQwXHUwNDMwXHUwNDQ4Ii5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTA0MzJcdTA0NGJcdTA0NDBcdTA0NDFcdTA0MzBcdTA0NDBcdTA0M2RcdTA0MzhcdTA0M2FcdTA0NDNcdTA0M2RfXHUwNDQyXHUwNDQzXHUwNDNkXHUwNDQyXHUwNDM4XHUwNDNhXHUwNDQzXHUwNDNkX1x1MDQ0Ylx1''@;'; put 'put ''MDQ0Mlx1MDQzYlx1MDQzMFx1MDQ0MFx1MDQzOFx1MDQzYVx1MDQ0M1x1MDQzZF9cdTA0NGVcdTA0M2RcdTA0M2FcdTA0NDNcdTA0M2RfXHUwNDNhXHUwNGQ3XHUwNGFiXHUwNDNkXHUwNDM1XHUwNDQwXHUwNDNkXHUwNDM4XHUwNDNhXHUwNDQzXHUwNDNkX1x1MDQ0ZFx1MDQ0MFx1MDQzZFx1''@;'; put 'put ''MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZF9cdTA0NDhcdTA0ZDFcdTA0M2NcdTA0MzBcdTA0NDJcdTA0M2FcdTA0NDNcdTA0M2QiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwNDMyXHUwNDRiXHUwNDQwX1x1MDQ0Mlx1MDQ0M1x1MDQzZF9cdTA0NGJcdTA0NDJcdTA0M2JfXHUwNDRlXHUw''@;'; put 'put ''NDNkX1x1MDQzYVx1MDRkN1x1MDRhYl9cdTA0NGRcdTA0NDBcdTA0M2RfXHUwNDQ4XHUwNGQxXHUwNDNjIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA0MzJcdTA0NDBfXHUwNDQyXHUwNDNkX1x1MDQ0Ylx1MDQ0Ml9cdTA0NGVcdTA0M2RfXHUwNDNhXHUwNGFiX1x1MDQ0ZFx1MDQ0MF9c''@;'; put 'put ''dTA0NDhcdTA0M2MiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQtTU0tWVlZWSIsTEw6IllZWVkgW1x1MDRhYlx1MDQ0M1x1MDQzYlx1MDQ0NVx1MDQzOF0gTU1NTSBbXHUwNDQzXHUwNDM5XHUwNGQxXHUwNDQ1XHUwNGQ3XHUwNDNk''@;'; put 'put ''XSBEWy1cdTA0M2NcdTA0ZDdcdTA0NDhcdTA0ZDddIixMTEw6IllZWVkgW1x1MDRhYlx1MDQ0M1x1MDQzYlx1MDQ0NVx1MDQzOF0gTU1NTSBbXHUwNDQzXHUwNDM5XHUwNGQxXHUwNDQ1XHUwNGQ3XHUwNDNkXSBEWy1cdTA0M2NcdTA0ZDdcdTA0NDhcdTA0ZDddLCBISDptbSIsTExMTDoiZGRk''@;'; put 'put ''ZCwgWVlZWSBbXHUwNGFiXHUwNDQzXHUwNDNiXHUwNDQ1XHUwNDM4XSBNTU1NIFtcdTA0NDNcdTA0MzlcdTA0ZDFcdTA0NDVcdTA0ZDdcdTA0M2RdIERbLVx1MDQzY1x1MDRkN1x1MDQ0OFx1MDRkN10sIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA0MWZcdTA0MzBcdTA0NGZcdTA0''@;'; put 'put ''M2RdIExUIFtcdTA0NDFcdTA0MzVcdTA0NDVcdTA0MzVcdTA0NDJcdTA0NDBcdTA0MzVdIixuZXh0RGF5OiJbXHUwNDJiXHUwNDQwXHUwNDMwXHUwNDNkXSBMVCBbXHUwNDQxXHUwNDM1XHUwNDQ1XHUwNDM1XHUwNDQyXHUwNDQwXHUwNDM1XSIsbGFzdERheToiW1x1MDRkNlx1MDQzZFx1MDQz''@;'; put 'put ''NVx1MDQ0MF0gTFQgW1x1MDQ0MVx1MDQzNVx1MDQ0NVx1MDQzNVx1MDQ0Mlx1MDQ0MFx1MDQzNV0iLG5leHRXZWVrOiJbXHUwNGFhXHUwNDM4XHUwNDQyXHUwNDM1XHUwNDQxXSBkZGRkIExUIFtcdTA0NDFcdTA0MzVcdTA0NDVcdTA0MzVcdTA0NDJcdTA0NDBcdTA0MzVdIixsYXN0V2Vlazoi''@;'; put 'put ''W1x1MDQxOFx1MDQ0MFx1MDQ0Mlx1MDQzZFx1MDRkN10gZGRkZCBMVCBbXHUwNDQxXHUwNDM1XHUwNDQ1XHUwNDM1XHUwNDQyXHUwNDQwXHUwNDM1XSIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpmdW5jdGlvbihnKXtyZXR1cm4gZysoL1x1MDQ0MVx1MDQzNVx1MDQ0NVx1''@;'; put 'put ''MDQzNVx1MDQ0MiQvaS5leGVjKGcpPyJcdTA0NDBcdTA0MzVcdTA0M2QiOi9cdTA0YWJcdTA0NDNcdTA0M2IkL2kuZXhlYyhnKT8iXHUwNDQyXHUwNDMwXHUwNDNkIjoiXHUwNDQwXHUwNDMwXHUwNDNkIil9LHBhc3Q6IiVzIFx1MDQzYVx1MDQzMFx1MDQ0Zlx1MDQzYlx1MDQzYlx1MDQzMCIs''@;'; put 'put ''czoiXHUwNDNmXHUwNGQ3XHUwNDQwLVx1MDQzOFx1MDQzYSBcdTA0YWJcdTA0MzVcdTA0M2FcdTA0M2FcdTA0NDNcdTA0M2RcdTA0NDIiLHNzOiIlZCBcdTA0YWJcdTA0MzVcdTA0M2FcdTA0M2FcdTA0NDNcdTA0M2RcdTA0NDIiLG06Ilx1MDQzZlx1MDRkN1x1MDQ0MCBcdTA0M2NcdTA0Mzhc''@;'; put 'put ''dTA0M2RcdTA0NDNcdTA0NDIiLG1tOiIlZCBcdTA0M2NcdTA0MzhcdTA0M2RcdTA0NDNcdTA0NDIiLGg6Ilx1MDQzZlx1MDRkN1x1MDQ0MCBcdTA0NDFcdTA0MzVcdTA0NDVcdTA0MzVcdTA0NDIiLGhoOiIlZCBcdTA0NDFcdTA0MzVcdTA0NDVcdTA0MzVcdTA0NDIiLGQ6Ilx1MDQzZlx1MDRk''@;'; put 'put ''N1x1MDQ0MCBcdTA0M2FcdTA0NDNcdTA0M2QiLGRkOiIlZCBcdTA0M2FcdTA0NDNcdTA0M2QiLE06Ilx1MDQzZlx1MDRkN1x1MDQ0MCBcdTA0NDNcdTA0MzlcdTA0ZDFcdTA0NDUiLE1NOiIlZCBcdTA0NDNcdTA0MzlcdTA0ZDFcdTA0NDUiLHk6Ilx1MDQzZlx1MDRkN1x1MDQ0MCBcdTA0YWJc''@;'; put 'put ''dTA0NDNcdTA0M2IiLHl5OiIlZCBcdTA0YWJcdTA0NDNcdTA0M2IifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9LVx1MDQzY1x1MDRkN1x1MDQ0OC8sb3JkaW5hbDoiJWQtXHUwNDNjXHUwNGQ3XHUwNDQ4Iix3ZWVrOntkb3c6MSxkb3k6N319KX0oeSg5NzU4NikpfSw1NTE2Mzpm''@;'; put 'put ''dW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoImN5Iix7bW9udGhzOiJJb25hd3JfQ2h3ZWZyb3JfTWF3cnRoX0VicmlsbF9NYWlfTWVoZWZpbl9Hb3JmZmVubmFmX0F3c3RfTWVkaV9IeWRyZWZfVGFjaHdlZGRfUmhhZ2Z5ciIuc3BsaXQo''@;'; put 'put ''Il8iKSxtb250aHNTaG9ydDoiSW9uX0Nod2VfTWF3X0Vicl9NYWlfTWVoX0dvcl9Bd3NfTWVkX0h5ZF9UYWNoX1JoYWciLnNwbGl0KCJfIiksd2Vla2RheXM6IkR5ZGQgU3VsX0R5ZGQgTGx1bl9EeWRkIE1hd3J0aF9EeWRkIE1lcmNoZXJfRHlkZCBJYXVfRHlkZCBHd2VuZXJfRHlkZCBTYWR3''@;'; put 'put ''cm4iLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiU3VsX0xsdW5fTWF3X01lcl9JYXVfR3dlX1NhZCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiU3VfTGxfTWFfTWVfSWFfR3dfU2EiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0i''@;'; put 'put ''LExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW0hlZGRpdyBhbV0gTFQiLG5leHREYXk6IltZZm9yeSBhbV0gTFQiLG5l''@;'; put 'put ''eHRXZWVrOiJkZGRkIFthbV0gTFQiLGxhc3REYXk6IltEZG9lIGFtXSBMVCIsbGFzdFdlZWs6ImRkZGQgW2Rpd2V0aGFmIGFtXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToibWV3biAlcyIscGFzdDoiJXMgeW4gXHhmNGwiLHM6InljaHlkaWcgZWlsaWFkYXUiLHNz''@;'; put 'put ''OiIlZCBlaWxpYWQiLG06Im11bnVkIixtbToiJWQgbXVudWQiLGg6ImF3ciIsaGg6IiVkIGF3ciIsZDoiZGl3cm5vZCIsZGQ6IiVkIGRpd3Jub2QiLE06Im1pcyIsTU06IiVkIG1pcyIseToiYmx3eWRkeW4iLHl5OiIlZCBmbHluZWRkIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwy''@;'; put 'put ''fShmZWR8YWlufGFmfGlsfHlkZHxlZHxlZykvLG9yZGluYWw6ZnVuY3Rpb24oZyl7dmFyIHc9IiI7cmV0dXJuIGc+MjA/dz00MD09PWd8fDUwPT09Z3x8NjA9PT1nfHw4MD09PWd8fDEwMD09PWc/ImZlZCI6ImFpbiI6Zz4wJiYodz1bIiIsImFmIiwiaWwiLCJ5ZGQiLCJ5ZGQiLCJlZCIsImVk''@;'; put 'put ''IiwiZWQiLCJmZWQiLCJmZWQiLCJmZWQiLCJlZyIsImZlZCIsImVnIiwiZWciLCJmZWQiLCJlZyIsImVnIiwiZmVkIiwiZWciLCJmZWQiXVtnXSksZyt3fSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oeSg5NzU4NikpfSw4NzM2MDpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0''@;'; put 'put ''cmljdCI7SS5kZWZpbmVMb2NhbGUoImRhIix7bW9udGhzOiJqYW51YXJfZmVicnVhcl9tYXJ0c19hcHJpbF9tYWpfanVuaV9qdWxpX2F1Z3VzdF9zZXB0ZW1iZXJfb2t0b2Jlcl9ub3ZlbWJlcl9kZWNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiamFuX2ZlYl9tYXJfYXByX21hal9q''@;'; put 'put ''dW5fanVsX2F1Z19zZXBfb2t0X25vdl9kZWMiLnNwbGl0KCJfIiksd2Vla2RheXM6InNceGY4bmRhZ19tYW5kYWdfdGlyc2RhZ19vbnNkYWdfdG9yc2RhZ19mcmVkYWdfbFx4ZjhyZGFnIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6InNceGY4bl9tYW5fdGlyX29uc190b3JfZnJlX2xceGY4''@;'; put 'put ''ciIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoic1x4ZjhfbWFfdGlfb25fdG9fZnJfbFx4ZjgiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQuIE1NTU0gWVlZWSIsTExMOiJELiBNTU1NIFlZWVkgSEg6bW0i''@;'; put 'put ''LExMTEw6ImRkZGQgW2QuXSBELiBNTU1NIFlZWVkgW2tsLl0gSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW2kgZGFnIGtsLl0gTFQiLG5leHREYXk6IltpIG1vcmdlbiBrbC5dIExUIixuZXh0V2VlazoicFx4ZTUgZGRkZCBba2wuXSBMVCIsbGFzdERheToiW2kgZ1x4ZTVyIGtsLl0gTFQi''@;'; put 'put ''LGxhc3RXZWVrOiJbaV0gZGRkZFtzIGtsLl0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Im9tICVzIixwYXN0OiIlcyBzaWRlbiIsczoiZlx4ZTUgc2VrdW5kZXIiLHNzOiIlZCBzZWt1bmRlciIsbToiZXQgbWludXQiLG1tOiIlZCBtaW51dHRlciIsaDoiZW4gdGlt''@;'; put 'put ''ZSIsaGg6IiVkIHRpbWVyIixkOiJlbiBkYWciLGRkOiIlZCBkYWdlIixNOiJlbiBtXHhlNW5lZCIsTU06IiVkIG1ceGU1bmVkZXIiLHk6ImV0IFx4ZTVyIix5eToiJWQgXHhlNXIifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEs''@;'; put 'put ''ZG95OjR9fSl9KHkoOTc1ODYpKX0sNDMyNDg6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIF8oQix3LFAsRil7dmFyIE89e206WyJlaW5lIE1pbnV0ZSIsImVpbmVyIE1pbnV0ZSJdLGg6WyJlaW5lIFN0dW5kZSIsImVpbmVyIFN0dW5kZSJdLGQ6''@;'; put 'put ''WyJlaW4gVGFnIiwiZWluZW0gVGFnIl0sZGQ6W0IrIiBUYWdlIixCKyIgVGFnZW4iXSx3OlsiZWluZSBXb2NoZSIsImVpbmVyIFdvY2hlIl0sTTpbImVpbiBNb25hdCIsImVpbmVtIE1vbmF0Il0sTU06W0IrIiBNb25hdGUiLEIrIiBNb25hdGVuIl0seTpbImVpbiBKYWhyIiwiZWluZW0gSmFo''@;'; put 'put ''ciJdLHl5OltCKyIgSmFocmUiLEIrIiBKYWhyZW4iXX07cmV0dXJuIHc/T1tQXVswXTpPW1BdWzFdfUkuZGVmaW5lTG9jYWxlKCJkZS1hdCIse21vbnRoczoiSlx4ZTRubmVyX0ZlYnJ1YXJfTVx4ZTRyel9BcHJpbF9NYWlfSnVuaV9KdWxpX0F1Z3VzdF9TZXB0ZW1iZXJfT2t0b2Jlcl9Ob3Zl''@;'; put 'put ''bWJlcl9EZXplbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSlx4ZTRuLl9GZWIuX01ceGU0cnpfQXByLl9NYWlfSnVuaV9KdWxpX0F1Zy5fU2VwLl9Pa3QuX05vdi5fRGV6LiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJTb25udGFnX01vbnRhZ19EaWVu''@;'; put 'put ''c3RhZ19NaXR0d29jaF9Eb25uZXJzdGFnX0ZyZWl0YWdfU2Ftc3RhZyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJTby5fTW8uX0RpLl9NaS5fRG8uX0ZyLl9TYS4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlNvX01vX0RpX01pX0RvX0ZyX1NhIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFy''@;'; put 'put ''c2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRC4gTU1NTSBZWVlZIixMTEw6IkQuIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRC4gTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6Ilto''@;'; put 'put ''ZXV0ZSB1bV0gTFQgW1Vocl0iLHNhbWVFbHNlOiJMIixuZXh0RGF5OiJbbW9yZ2VuIHVtXSBMVCBbVWhyXSIsbmV4dFdlZWs6ImRkZGQgW3VtXSBMVCBbVWhyXSIsbGFzdERheToiW2dlc3Rlcm4gdW1dIExUIFtVaHJdIixsYXN0V2VlazoiW2xldHp0ZW5dIGRkZGQgW3VtXSBMVCBbVWhyXSJ9''@;'; put 'put ''LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJpbiAlcyIscGFzdDoidm9yICVzIixzOiJlaW4gcGFhciBTZWt1bmRlbiIsc3M6IiVkIFNla3VuZGVuIixtOl8sbW06IiVkIE1pbnV0ZW4iLGg6XyxoaDoiJWQgU3R1bmRlbiIsZDpfLGRkOl8sdzpfLHd3OiIlZCBXb2NoZW4iLE06XyxNTTpfLHk6Xyx5''@;'; put 'put ''eTpffSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KHkoOTc1ODYpKX0sODMyMjI6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIF8oQix3LFAsRil7dmFyIE89e206''@;'; put 'put ''WyJlaW5lIE1pbnV0ZSIsImVpbmVyIE1pbnV0ZSJdLGg6WyJlaW5lIFN0dW5kZSIsImVpbmVyIFN0dW5kZSJdLGQ6WyJlaW4gVGFnIiwiZWluZW0gVGFnIl0sZGQ6W0IrIiBUYWdlIixCKyIgVGFnZW4iXSx3OlsiZWluZSBXb2NoZSIsImVpbmVyIFdvY2hlIl0sTTpbImVpbiBNb25hdCIsImVp''@;'; put 'put ''bmVtIE1vbmF0Il0sTU06W0IrIiBNb25hdGUiLEIrIiBNb25hdGVuIl0seTpbImVpbiBKYWhyIiwiZWluZW0gSmFociJdLHl5OltCKyIgSmFocmUiLEIrIiBKYWhyZW4iXX07cmV0dXJuIHc/T1tQXVswXTpPW1BdWzFdfUkuZGVmaW5lTG9jYWxlKCJkZS1jaCIse21vbnRoczoiSmFudWFyX0Zl''@;'; put 'put ''YnJ1YXJfTVx4ZTRyel9BcHJpbF9NYWlfSnVuaV9KdWxpX0F1Z3VzdF9TZXB0ZW1iZXJfT2t0b2Jlcl9Ob3ZlbWJlcl9EZXplbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuLl9GZWIuX01ceGU0cnpfQXByLl9NYWlfSnVuaV9KdWxpX0F1Zy5fU2VwLl9Pa3QuX05vdi5fRGV6LiIu''@;'; put 'put ''c3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJTb25udGFnX01vbnRhZ19EaWVuc3RhZ19NaXR0d29jaF9Eb25uZXJzdGFnX0ZyZWl0YWdfU2Ftc3RhZyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJTb19Nb19EaV9NaV9Eb19Gcl9TYSIuc3BsaXQoIl8iKSx3ZWVr''@;'; put 'put ''ZGF5c01pbjoiU29fTW9fRGlfTWlfRG9fRnJfU2EiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJELiBNTU1NIFlZWVkiLExMTDoiRC4gTU1NTSBZWVlZIEhIOm1tIixM''@;'; put 'put ''TExMOiJkZGRkLCBELiBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW2hldXRlIHVtXSBMVCBbVWhyXSIsc2FtZUVsc2U6IkwiLG5leHREYXk6Ilttb3JnZW4gdW1dIExUIFtVaHJdIixuZXh0V2VlazoiZGRkZCBbdW1dIExUIFtVaHJdIixsYXN0RGF5OiJbZ2VzdGVybiB1''@;'; put 'put ''bV0gTFQgW1Vocl0iLGxhc3RXZWVrOiJbbGV0enRlbl0gZGRkZCBbdW1dIExUIFtVaHJdIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImluICVzIixwYXN0OiJ2b3IgJXMiLHM6ImVpbiBwYWFyIFNla3VuZGVuIixzczoiJWQgU2VrdW5kZW4iLG06XyxtbToiJWQgTWludXRlbiIsaDpfLGhoOiIl''@;'; put 'put ''ZCBTdHVuZGVuIixkOl8sZGQ6Xyx3Ol8sd3c6IiVkIFdvY2hlbiIsTTpfLE1NOl8seTpfLHl5Ol99LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oeSg5NzU4NikpfSw0NTkzMjpmdW5jdGlvbih1ZSxYLHkpeyFm''@;'; put 'put ''dW5jdGlvbihJKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gXyhCLHcsUCxGKXt2YXIgTz17bTpbImVpbmUgTWludXRlIiwiZWluZXIgTWludXRlIl0saDpbImVpbmUgU3R1bmRlIiwiZWluZXIgU3R1bmRlIl0sZDpbImVpbiBUYWciLCJlaW5lbSBUYWciXSxkZDpbQisiIFRhZ2UiLEIrIiBUYWdl''@;'; put 'put ''biJdLHc6WyJlaW5lIFdvY2hlIiwiZWluZXIgV29jaGUiXSxNOlsiZWluIE1vbmF0IiwiZWluZW0gTW9uYXQiXSxNTTpbQisiIE1vbmF0ZSIsQisiIE1vbmF0ZW4iXSx5OlsiZWluIEphaHIiLCJlaW5lbSBKYWhyIl0seXk6W0IrIiBKYWhyZSIsQisiIEphaHJlbiJdfTtyZXR1cm4gdz9PW1Bd''@;'; put 'put ''WzBdOk9bUF1bMV19SS5kZWZpbmVMb2NhbGUoImRlIix7bW9udGhzOiJKYW51YXJfRmVicnVhcl9NXHhlNHJ6X0FwcmlsX01haV9KdW5pX0p1bGlfQXVndXN0X1NlcHRlbWJlcl9Pa3RvYmVyX05vdmVtYmVyX0RlemVtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW4uX0ZlYi5fTVx4''@;'; put 'put ''ZTRyel9BcHIuX01haV9KdW5pX0p1bGlfQXVnLl9TZXAuX09rdC5fTm92Ll9EZXouIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6IlNvbm50YWdfTW9udGFnX0RpZW5zdGFnX01pdHR3b2NoX0Rvbm5lcnN0YWdfRnJlaXRhZ19TYW1zdGFnIi5zcGxpdCgiXyIpLHdl''@;'; put 'put ''ZWtkYXlzU2hvcnQ6IlNvLl9Nby5fRGkuX01pLl9Eby5fRnIuX1NhLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiU29fTW9fRGlfTWlfRG9fRnJfU2EiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6''@;'; put 'put ''IkRELk1NLllZWVkiLExMOiJELiBNTU1NIFlZWVkiLExMTDoiRC4gTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBELiBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW2hldXRlIHVtXSBMVCBbVWhyXSIsc2FtZUVsc2U6IkwiLG5leHREYXk6Ilttb3JnZW4gdW1dIExU''@;'; put 'put ''IFtVaHJdIixuZXh0V2VlazoiZGRkZCBbdW1dIExUIFtVaHJdIixsYXN0RGF5OiJbZ2VzdGVybiB1bV0gTFQgW1Vocl0iLGxhc3RXZWVrOiJbbGV0enRlbl0gZGRkZCBbdW1dIExUIFtVaHJdIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImluICVzIixwYXN0OiJ2b3IgJXMiLHM6ImVpbiBwYWFy''@;'; put 'put ''IFNla3VuZGVuIixzczoiJWQgU2VrdW5kZW4iLG06XyxtbToiJWQgTWludXRlbiIsaDpfLGhoOiIlZCBTdHVuZGVuIixkOl8sZGQ6Xyx3Ol8sd3c6IiVkIFdvY2hlbiIsTTpfLE1NOl8seTpfLHl5Ol99LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3''@;'; put 'put ''ZWVrOntkb3c6MSxkb3k6NH19KX0oeSg5NzU4NikpfSw2NDA1OmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz1bIlx1MDc5Nlx1MDdhY1x1MDc4Mlx1MDdhYVx1MDc4N1x1MDdhNlx1MDc4M1x1MDdhOSIsIlx1MDc4YVx1MDdhY1x1MDc4NFx1MDdiMFx1''@;'; put 'put ''MDc4M1x1MDdhYVx1MDc4N1x1MDdhNlx1MDc4M1x1MDdhOSIsIlx1MDc4OVx1MDdhN1x1MDc4M1x1MDdhOFx1MDc5N1x1MDdhYSIsIlx1MDc4N1x1MDdhZFx1MDc5NVx1MDdiMFx1MDc4M1x1MDdhOVx1MDc4ZFx1MDdhYSIsIlx1MDc4OVx1MDdhZCIsIlx1MDc5Nlx1MDdhYlx1MDc4Mlx1MDdi''@;'; put 'put ''MCIsIlx1MDc5Nlx1MDdhYVx1MDc4ZFx1MDdhNlx1MDc4N1x1MDdhOCIsIlx1MDc4N1x1MDdhZlx1MDc4ZVx1MDdhNlx1MDc5MFx1MDdiMFx1MDc5M1x1MDdhYSIsIlx1MDc5MFx1MDdhY1x1MDc5NVx1MDdiMFx1MDc5M1x1MDdhY1x1MDc4OVx1MDdiMFx1MDc4NFx1MDdhNlx1MDc4M1x1MDdh''@;'; put 'put ''YSIsIlx1MDc4N1x1MDdhZVx1MDc4Nlx1MDdiMFx1MDc5M1x1MDdhZlx1MDc4NFx1MDdhNlx1MDc4M1x1MDdhYSIsIlx1MDc4Mlx1MDdhZVx1MDc4OFx1MDdhY1x1MDc4OVx1MDdiMFx1MDc4NFx1MDdhNlx1MDc4M1x1MDdhYSIsIlx1MDc5MVx1MDdhOFx1MDc5MFx1MDdhY1x1MDc4OVx1MDdi''@;'; put 'put ''MFx1MDc4NFx1MDdhNlx1MDc4M1x1MDdhYSJdLGc9WyJcdTA3ODdcdTA3YTdcdTA3OGJcdTA3YThcdTA3ODdcdTA3YjBcdTA3OGNcdTA3YTYiLCJcdTA3ODBcdTA3YWZcdTA3ODlcdTA3YTYiLCJcdTA3ODdcdTA3YTZcdTA3ODJcdTA3YjBcdTA3OGVcdTA3YTdcdTA3ODNcdTA3YTYiLCJcdTA3''@;'; put 'put ''ODRcdTA3YWFcdTA3OGJcdTA3YTYiLCJcdTA3ODRcdTA3YWFcdTA3ODNcdTA3YTdcdTA3OTBcdTA3YjBcdTA3OGFcdTA3YTZcdTA3OGNcdTA3YTgiLCJcdTA3ODBcdTA3YWFcdTA3ODZcdTA3YWFcdTA3ODNcdTA3YWEiLCJcdTA3ODBcdTA3YWVcdTA3ODJcdTA3YThcdTA3ODBcdTA3YThcdTA3''@;'; put 'put ''ODNcdTA3YWEiXTtJLmRlZmluZUxvY2FsZSgiZHYiLHttb250aHM6Xyxtb250aHNTaG9ydDpfLHdlZWtkYXlzOmcsd2Vla2RheXNTaG9ydDpnLHdlZWtkYXlzTWluOiJcdTA3ODdcdTA3YTdcdTA3OGJcdTA3YThfXHUwNzgwXHUwN2FmXHUwNzg5XHUwN2E2X1x1MDc4N1x1MDdhNlx1MDc4Mlx1''@;'; put 'put ''MDdiMF9cdTA3ODRcdTA3YWFcdTA3OGJcdTA3YTZfXHUwNzg0XHUwN2FhXHUwNzgzXHUwN2E3X1x1MDc4MFx1MDdhYVx1MDc4Nlx1MDdhYV9cdTA3ODBcdTA3YWVcdTA3ODJcdTA3YTgiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiRC9N''@;'; put 'put ''L1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBEIE1NTU0gWVlZWSBISDptbSJ9LG1lcmlkaWVtUGFyc2U6L1x1MDc4OVx1MDc4NnxcdTA3ODlcdTA3OGEvLGlzUE06ZnVuY3Rpb24odyl7cmV0dXJuIlx1MDc4OVx1MDc4YSI9PT13fSxt''@;'; put 'put ''ZXJpZGllbTpmdW5jdGlvbih3LFAsRil7cmV0dXJuIHc8MTI/Ilx1MDc4OVx1MDc4NiI6Ilx1MDc4OVx1MDc4YSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwNzg5XHUwN2E4XHUwNzg3XHUwN2E2XHUwNzhiXHUwN2FhXSBMVCIsbmV4dERheToiW1x1MDc4OVx1MDdhN1x1MDc4Ylx1MDdhNlx1''@;'; put 'put ''MDc4OVx1MDdhN10gTFQiLG5leHRXZWVrOiJkZGRkIExUIixsYXN0RGF5OiJbXHUwNzg3XHUwN2E4XHUwNzg3XHUwN2IwXHUwNzk0XHUwN2FjXSBMVCIsbGFzdFdlZWs6IltcdTA3OGFcdTA3YTdcdTA3ODdcdTA3YThcdTA3OGNcdTA3YWFcdTA3ODhcdTA3YThdIGRkZGQgTFQiLHNhbWVFbHNl''@;'; put 'put ''OiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDc4Y1x1MDdhY1x1MDc4M1x1MDdhZFx1MDc4ZVx1MDdhNlx1MDc4N1x1MDdhOCAlcyIscGFzdDoiXHUwNzg2XHUwN2FhXHUwNzgzXHUwN2E4XHUwNzgyXHUwN2IwICVzIixzOiJcdTA3OTBcdTA3YThcdTA3ODZcdTA3YWFcdTA3ODJcdTA3''@;'; put 'put ''YjBcdTA3OGNcdTA3YWFcdTA3ODZcdTA3YWVcdTA3ODVcdTA3YWNcdTA3ODdcdTA3YjAiLHNzOiJkJSBcdTA3OTBcdTA3YThcdTA3ODZcdTA3YWFcdTA3ODJcdTA3YjBcdTA3OGNcdTA3YWEiLG06Ilx1MDc4OVx1MDdhOFx1MDc4Mlx1MDdhOFx1MDc5M1x1MDdhY1x1MDc4N1x1MDdiMCIsbW06''@;'; put 'put ''Ilx1MDc4OVx1MDdhOFx1MDc4Mlx1MDdhOFx1MDc5M1x1MDdhYSAlZCIsaDoiXHUwNzhlXHUwN2E2XHUwNzkxXHUwN2E4XHUwNzg3XHUwN2E4XHUwNzgzXHUwN2FjXHUwNzg3XHUwN2IwIixoaDoiXHUwNzhlXHUwN2E2XHUwNzkxXHUwN2E4XHUwNzg3XHUwN2E4XHUwNzgzXHUwN2FhICVkIixk''@;'; put 'put ''OiJcdTA3OGJcdTA3YWFcdTA3ODhcdTA3YTZcdTA3ODBcdTA3YWNcdTA3ODdcdTA3YjAiLGRkOiJcdTA3OGJcdTA3YWFcdTA3ODhcdTA3YTZcdTA3OTBcdTA3YjAgJWQiLE06Ilx1MDc4OVx1MDdhNlx1MDc4MFx1MDdhY1x1MDc4N1x1MDdiMCIsTU06Ilx1MDc4OVx1MDdhNlx1MDc5MFx1MDdi''@;'; put 'put ''MCAlZCIseToiXHUwNzg3XHUwN2E2XHUwNzgwXHUwN2E2XHUwNzgzXHUwN2FjXHUwNzg3XHUwN2IwIix5eToiXHUwNzg3XHUwN2E2XHUwNzgwXHUwN2E2XHUwNzgzXHUwN2FhICVkIn0scHJlcGFyc2U6ZnVuY3Rpb24odyl7cmV0dXJuIHcucmVwbGFjZSgvXHUwNjBjL2csIiwiKX0scG9zdGZv''@;'; put 'put ''cm1hdDpmdW5jdGlvbih3KXtyZXR1cm4gdy5yZXBsYWNlKC8sL2csIlx1MDYwYyIpfSx3ZWVrOntkb3c6Nyxkb3k6MTJ9fSl9KHkoOTc1ODYpKX0sNjA3MTg6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJlbCIse21vbnRoc05vbWlu''@;'; put 'put ''YXRpdmVFbDoiXHUwMzk5XHUwM2IxXHUwM2JkXHUwM2JmXHUwM2M1XHUwM2FjXHUwM2MxXHUwM2I5XHUwM2JmXHUwM2MyX1x1MDNhNlx1MDNiNVx1MDNiMlx1MDNjMVx1MDNiZlx1MDNjNVx1MDNhY1x1MDNjMVx1MDNiOVx1MDNiZlx1MDNjMl9cdTAzOWNcdTAzYWNcdTAzYzFcdTAzYzRcdTAz''@;'; put 'put ''YjlcdTAzYmZcdTAzYzJfXHUwMzkxXHUwM2MwXHUwM2MxXHUwM2FmXHUwM2JiXHUwM2I5XHUwM2JmXHUwM2MyX1x1MDM5Y1x1MDNhY1x1MDNiOVx1MDNiZlx1MDNjMl9cdTAzOTlcdTAzYmZcdTAzY2RcdTAzYmRcdTAzYjlcdTAzYmZcdTAzYzJfXHUwMzk5XHUwM2JmXHUwM2NkXHUwM2JiXHUw''@;'; put 'put ''M2I5XHUwM2JmXHUwM2MyX1x1MDM5MVx1MDNjZFx1MDNiM1x1MDNiZlx1MDNjNVx1MDNjM1x1MDNjNFx1MDNiZlx1MDNjMl9cdTAzYTNcdTAzYjVcdTAzYzBcdTAzYzRcdTAzYWRcdTAzYmNcdTAzYjJcdTAzYzFcdTAzYjlcdTAzYmZcdTAzYzJfXHUwMzlmXHUwM2JhXHUwM2M0XHUwM2NlXHUw''@;'; put 'put ''M2IyXHUwM2MxXHUwM2I5XHUwM2JmXHUwM2MyX1x1MDM5ZFx1MDNiZlx1MDNhZFx1MDNiY1x1MDNiMlx1MDNjMVx1MDNiOVx1MDNiZlx1MDNjMl9cdTAzOTRcdTAzYjVcdTAzYmFcdTAzYWRcdTAzYmNcdTAzYjJcdTAzYzFcdTAzYjlcdTAzYmZcdTAzYzIiLnNwbGl0KCJfIiksbW9udGhzR2Vu''@;'; put 'put ''aXRpdmVFbDoiXHUwMzk5XHUwM2IxXHUwM2JkXHUwM2JmXHUwM2M1XHUwM2IxXHUwM2MxXHUwM2FmXHUwM2JmXHUwM2M1X1x1MDNhNlx1MDNiNVx1MDNiMlx1MDNjMVx1MDNiZlx1MDNjNVx1MDNiMVx1MDNjMVx1MDNhZlx1MDNiZlx1MDNjNV9cdTAzOWNcdTAzYjFcdTAzYzFcdTAzYzRcdTAz''@;'; put 'put ''YWZcdTAzYmZcdTAzYzVfXHUwMzkxXHUwM2MwXHUwM2MxXHUwM2I5XHUwM2JiXHUwM2FmXHUwM2JmXHUwM2M1X1x1MDM5Y1x1MDNiMVx1MDM5MFx1MDNiZlx1MDNjNV9cdTAzOTlcdTAzYmZcdTAzYzVcdTAzYmRcdTAzYWZcdTAzYmZcdTAzYzVfXHUwMzk5XHUwM2JmXHUwM2M1XHUwM2JiXHUw''@;'; put 'put ''M2FmXHUwM2JmXHUwM2M1X1x1MDM5MVx1MDNjNVx1MDNiM1x1MDNiZlx1MDNjZFx1MDNjM1x1MDNjNFx1MDNiZlx1MDNjNV9cdTAzYTNcdTAzYjVcdTAzYzBcdTAzYzRcdTAzYjVcdTAzYmNcdTAzYjJcdTAzYzFcdTAzYWZcdTAzYmZcdTAzYzVfXHUwMzlmXHUwM2JhXHUwM2M0XHUwM2M5XHUw''@;'; put 'put ''M2IyXHUwM2MxXHUwM2FmXHUwM2JmXHUwM2M1X1x1MDM5ZFx1MDNiZlx1MDNiNVx1MDNiY1x1MDNiMlx1MDNjMVx1MDNhZlx1MDNiZlx1MDNjNV9cdTAzOTRcdTAzYjVcdTAzYmFcdTAzYjVcdTAzYmNcdTAzYjJcdTAzYzFcdTAzYWZcdTAzYmZcdTAzYzUiLnNwbGl0KCJfIiksbW9udGhzOmZ1''@;'; put 'put ''bmN0aW9uKEIsdyl7cmV0dXJuIEI/InN0cmluZyI9PXR5cGVvZiB3JiYvRC8udGVzdCh3LnN1YnN0cmluZygwLHcuaW5kZXhPZigiTU1NTSIpKSk/dGhpcy5fbW9udGhzR2VuaXRpdmVFbFtCLm1vbnRoKCldOnRoaXMuX21vbnRoc05vbWluYXRpdmVFbFtCLm1vbnRoKCldOnRoaXMuX21vbnRo''@;'; put 'put ''c05vbWluYXRpdmVFbH0sbW9udGhzU2hvcnQ6Ilx1MDM5OVx1MDNiMVx1MDNiZF9cdTAzYTZcdTAzYjVcdTAzYjJfXHUwMzljXHUwM2IxXHUwM2MxX1x1MDM5MVx1MDNjMFx1MDNjMV9cdTAzOWNcdTAzYjFcdTAzY2FfXHUwMzk5XHUwM2JmXHUwM2M1XHUwM2JkX1x1MDM5OVx1MDNiZlx1MDNj''@;'; put 'put ''NVx1MDNiYl9cdTAzOTFcdTAzYzVcdTAzYjNfXHUwM2EzXHUwM2I1XHUwM2MwX1x1MDM5Zlx1MDNiYVx1MDNjNF9cdTAzOWRcdTAzYmZcdTAzYjVfXHUwMzk0XHUwM2I1XHUwM2JhIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTAzOWFcdTAzYzVcdTAzYzFcdTAzYjlcdTAzYjFcdTAzYmFcdTAz''@;'; put 'put ''YWVfXHUwMzk0XHUwM2I1XHUwM2M1XHUwM2M0XHUwM2FkXHUwM2MxXHUwM2IxX1x1MDNhNFx1MDNjMVx1MDNhZlx1MDNjNFx1MDNiN19cdTAzYTRcdTAzYjVcdTAzYzRcdTAzYWNcdTAzYzFcdTAzYzRcdTAzYjdfXHUwM2EwXHUwM2FkXHUwM2JjXHUwM2MwXHUwM2M0XHUwM2I3X1x1MDNhMFx1''@;'; put 'put ''MDNiMVx1MDNjMVx1MDNiMVx1MDNjM1x1MDNiYVx1MDNiNVx1MDNjNVx1MDNhZV9cdTAzYTNcdTAzYWNcdTAzYjJcdTAzYjJcdTAzYjFcdTAzYzRcdTAzYmYiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwMzlhXHUwM2M1XHUwM2MxX1x1MDM5NFx1MDNiNVx1MDNjNV9cdTAzYTRcdTAz''@;'; put 'put ''YzFcdTAzYjlfXHUwM2E0XHUwM2I1XHUwM2M0X1x1MDNhMFx1MDNiNVx1MDNiY19cdTAzYTBcdTAzYjFcdTAzYzFfXHUwM2EzXHUwM2IxXHUwM2IyIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTAzOWFcdTAzYzVfXHUwMzk0XHUwM2I1X1x1MDNhNFx1MDNjMV9cdTAzYTRcdTAzYjVfXHUw''@;'; put 'put ''M2EwXHUwM2I1X1x1MDNhMFx1MDNiMV9cdTAzYTNcdTAzYjEiLnNwbGl0KCJfIiksbWVyaWRpZW06ZnVuY3Rpb24oQix3LFApe3JldHVybiBCPjExP1A/Ilx1MDNiY1x1MDNiYyI6Ilx1MDM5Y1x1MDM5YyI6UD8iXHUwM2MwXHUwM2JjIjoiXHUwM2EwXHUwMzljIn0saXNQTTpmdW5jdGlvbihC''@;'; put 'put ''KXtyZXR1cm4iXHUwM2JjIj09PShCKyIiKS50b0xvd2VyQ2FzZSgpWzBdfSxtZXJpZGllbVBhcnNlOi9bXHUwM2EwXHUwMzljXVwuP1x1MDM5Yz9cLj8vaSxsb25nRGF0ZUZvcm1hdDp7TFQ6Img6bW0gQSIsTFRTOiJoOm1tOnNzIEEiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIs''@;'; put 'put ''TExMOiJEIE1NTU0gWVlZWSBoOm1tIEEiLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIGg6bW0gQSJ9LGNhbGVuZGFyRWw6e3NhbWVEYXk6IltcdTAzYTNcdTAzYWVcdTAzYmNcdTAzYjVcdTAzYzFcdTAzYjEge31dIExUIixuZXh0RGF5OiJbXHUwMzkxXHUwM2NkXHUwM2MxXHUwM2I5XHUwM2Jm''@;'; put 'put ''IHt9XSBMVCIsbmV4dFdlZWs6ImRkZGQgW3t9XSBMVCIsbGFzdERheToiW1x1MDNhN1x1MDNiOFx1MDNiNVx1MDNjMiB7fV0gTFQiLGxhc3RXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIDY9PT10aGlzLmRheSgpPyJbXHUwM2M0XHUwM2JmIFx1MDNjMFx1MDNjMVx1MDNiZlx1MDNiN1x1MDNiM1x1''@;'; put 'put ''MDNiZlx1MDNjZFx1MDNiY1x1MDNiNVx1MDNiZFx1MDNiZl0gZGRkZCBbe31dIExUIjoiW1x1MDNjNFx1MDNiN1x1MDNiZCBcdTAzYzBcdTAzYzFcdTAzYmZcdTAzYjdcdTAzYjNcdTAzYmZcdTAzY2RcdTAzYmNcdTAzYjVcdTAzYmRcdTAzYjddIGRkZGQgW3t9XSBMVCJ9LHNhbWVFbHNlOiJM''@;'; put 'put ''In0sY2FsZW5kYXI6ZnVuY3Rpb24oQix3KXt2YXIgUD10aGlzLl9jYWxlbmRhckVsW0JdLEY9dyYmdy5ob3VycygpO3JldHVybiBmdW5jdGlvbiBfKEIpe3JldHVybiB0eXBlb2YgRnVuY3Rpb248InUiJiZCIGluc3RhbmNlb2YgRnVuY3Rpb258fCJbb2JqZWN0IEZ1bmN0aW9uXSI9PT1PYmpl''@;'; put 'put ''Y3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoQil9KFApJiYoUD1QLmFwcGx5KHcpKSxQLnJlcGxhY2UoInt9IixGJTEyPT0xPyJcdTAzYzNcdTAzYzRcdTAzYjciOiJcdTAzYzNcdTAzYzRcdTAzYjlcdTAzYzIiKX0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDNjM1x1MDNiNSAlcyIscGFz''@;'; put 'put ''dDoiJXMgXHUwM2MwXHUwM2MxXHUwM2I5XHUwM2JkIixzOiJcdTAzYmJcdTAzYWZcdTAzYjNcdTAzYjEgXHUwM2I0XHUwM2I1XHUwM2M1XHUwM2M0XHUwM2I1XHUwM2MxXHUwM2NjXHUwM2JiXHUwM2I1XHUwM2MwXHUwM2M0XHUwM2IxIixzczoiJWQgXHUwM2I0XHUwM2I1XHUwM2M1XHUwM2M0''@;'; put 'put ''XHUwM2I1XHUwM2MxXHUwM2NjXHUwM2JiXHUwM2I1XHUwM2MwXHUwM2M0XHUwM2IxIixtOiJcdTAzYWRcdTAzYmRcdTAzYjEgXHUwM2JiXHUwM2I1XHUwM2MwXHUwM2M0XHUwM2NjIixtbToiJWQgXHUwM2JiXHUwM2I1XHUwM2MwXHUwM2M0XHUwM2FjIixoOiJcdTAzYmNcdTAzYWZcdTAzYjEg''@;'; put 'put ''XHUwM2NlXHUwM2MxXHUwM2IxIixoaDoiJWQgXHUwM2NlXHUwM2MxXHUwM2I1XHUwM2MyIixkOiJcdTAzYmNcdTAzYWZcdTAzYjEgXHUwM2JjXHUwM2FkXHUwM2MxXHUwM2IxIixkZDoiJWQgXHUwM2JjXHUwM2FkXHUwM2MxXHUwM2I1XHUwM2MyIixNOiJcdTAzYWRcdTAzYmRcdTAzYjFcdTAz''@;'; put 'put ''YzIgXHUwM2JjXHUwM2FlXHUwM2JkXHUwM2IxXHUwM2MyIixNTToiJWQgXHUwM2JjXHUwM2FlXHUwM2JkXHUwM2I1XHUwM2MyIix5OiJcdTAzYWRcdTAzYmRcdTAzYjFcdTAzYzIgXHUwM2M3XHUwM2MxXHUwM2NjXHUwM2JkXHUwM2JmXHUwM2MyIix5eToiJWQgXHUwM2M3XHUwM2MxXHUwM2Nj''@;'; put 'put ''XHUwM2JkXHUwM2I5XHUwM2IxIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVx1MDNiNy8sb3JkaW5hbDoiJWRcdTAzYjciLHdlZWs6e2RvdzoxLGRveTo0fX0pfSh5KDk3NTg2KSl9LDM2MzE5OmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRl''@;'; put 'put ''ZmluZUxvY2FsZSgiZW4tYXUiLHttb250aHM6IkphbnVhcnlfRmVicnVhcnlfTWFyY2hfQXByaWxfTWF5X0p1bmVfSnVseV9BdWd1c3RfU2VwdGVtYmVyX09jdG9iZXJfTm92ZW1iZXJfRGVjZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikphbl9GZWJfTWFyX0Fwcl9NYXlfSnVuX0p1''@;'; put 'put ''bF9BdWdfU2VwX09jdF9Ob3ZfRGVjIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJTdW5kYXlfTW9uZGF5X1R1ZXNkYXlfV2VkbmVzZGF5X1RodXJzZGF5X0ZyaWRheV9TYXR1cmRheSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJTdW5fTW9uX1R1ZV9XZWRfVGh1X0ZyaV9TYXQiLnNwbGl0KCJf''@;'; put 'put ''Iiksd2Vla2RheXNNaW46IlN1X01vX1R1X1dlX1RoX0ZyX1NhIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiaDptbSBBIixMVFM6Img6bW06c3MgQSIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIGg6bW0gQSIsTExMTDoiZGRkZCwgRCBN''@;'; put 'put ''TU1NIFlZWVkgaDptbSBBIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltUb2RheSBhdF0gTFQiLG5leHREYXk6IltUb21vcnJvdyBhdF0gTFQiLG5leHRXZWVrOiJkZGRkIFthdF0gTFQiLGxhc3REYXk6IltZZXN0ZXJkYXkgYXRdIExUIixsYXN0V2VlazoiW0xhc3RdIGRkZGQgW2F0XSBMVCIsc2Ft''@;'; put 'put ''ZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiaW4gJXMiLHBhc3Q6IiVzIGFnbyIsczoiYSBmZXcgc2Vjb25kcyIsc3M6IiVkIHNlY29uZHMiLG06ImEgbWludXRlIixtbToiJWQgbWludXRlcyIsaDoiYW4gaG91ciIsaGg6IiVkIGhvdXJzIixkOiJhIGRheSIsZGQ6IiVkIGRheXMi''@;'; put 'put ''LE06ImEgbW9udGgiLE1NOiIlZCBtb250aHMiLHk6ImEgeWVhciIseXk6IiVkIHllYXJzIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShzdHxuZHxyZHx0aCkvLG9yZGluYWw6ZnVuY3Rpb24oZyl7dmFyIEI9ZyUxMDtyZXR1cm4gZysoMT09fn4oZyUxMDAvMTApPyJ0aCI6MT09''@;'; put 'put ''PUI/InN0IjoyPT09Qj8ibmQiOjM9PT1CPyJyZCI6InRoIil9LHdlZWs6e2RvdzowLGRveTo0fX0pfSh5KDk3NTg2KSl9LDgwNTk3OmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgiZW4tY2EiLHttb250aHM6IkphbnVhcnlfRmVicnVh''@;'; put 'put ''cnlfTWFyY2hfQXByaWxfTWF5X0p1bmVfSnVseV9BdWd1c3RfU2VwdGVtYmVyX09jdG9iZXJfTm92ZW1iZXJfRGVjZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikphbl9GZWJfTWFyX0Fwcl9NYXlfSnVuX0p1bF9BdWdfU2VwX09jdF9Ob3ZfRGVjIi5zcGxpdCgiXyIpLHdlZWtkYXlz''@;'; put 'put ''OiJTdW5kYXlfTW9uZGF5X1R1ZXNkYXlfV2VkbmVzZGF5X1RodXJzZGF5X0ZyaWRheV9TYXR1cmRheSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJTdW5fTW9uX1R1ZV9XZWRfVGh1X0ZyaV9TYXQiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlN1X01vX1R1X1dlX1RoX0ZyX1NhIi5zcGxp''@;'; put 'put ''dCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiaDptbSBBIixMVFM6Img6bW06c3MgQSIsTDoiWVlZWS1NTS1ERCIsTEw6Ik1NTU0gRCwgWVlZWSIsTExMOiJNTU1NIEQsIFlZWVkgaDptbSBBIixMTExMOiJkZGRkLCBNTU1NIEQsIFlZWVkgaDptbSBBIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltU''@;'; put 'put ''b2RheSBhdF0gTFQiLG5leHREYXk6IltUb21vcnJvdyBhdF0gTFQiLG5leHRXZWVrOiJkZGRkIFthdF0gTFQiLGxhc3REYXk6IltZZXN0ZXJkYXkgYXRdIExUIixsYXN0V2VlazoiW0xhc3RdIGRkZGQgW2F0XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiaW4gJXMi''@;'; put 'put ''LHBhc3Q6IiVzIGFnbyIsczoiYSBmZXcgc2Vjb25kcyIsc3M6IiVkIHNlY29uZHMiLG06ImEgbWludXRlIixtbToiJWQgbWludXRlcyIsaDoiYW4gaG91ciIsaGg6IiVkIGhvdXJzIixkOiJhIGRheSIsZGQ6IiVkIGRheXMiLE06ImEgbW9udGgiLE1NOiIlZCBtb250aHMiLHk6ImEgeWVhciIs''@;'; put 'put ''eXk6IiVkIHllYXJzIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShzdHxuZHxyZHx0aCkvLG9yZGluYWw6ZnVuY3Rpb24oZyl7dmFyIEI9ZyUxMDtyZXR1cm4gZysoMT09fn4oZyUxMDAvMTApPyJ0aCI6MT09PUI/InN0IjoyPT09Qj8ibmQiOjM9PT1CPyJyZCI6InRoIil9fSl9''@;'; put 'put ''KHkoOTc1ODYpKX0sNTE4MDA6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJlbi1nYiIse21vbnRoczoiSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3Zl''@;'; put 'put ''bWJlcl9EZWNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuX0ZlYl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWMiLnNwbGl0KCJfIiksd2Vla2RheXM6IlN1bmRheV9Nb25kYXlfVHVlc2RheV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5''@;'; put 'put ''Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlN1bl9Nb25fVHVlX1dlZF9UaHVfRnJpX1NhdCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiU3VfTW9fVHVfV2VfVGhfRnJfU2EiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0v''@;'; put 'put ''WVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbVG9kYXkgYXRdIExUIixuZXh0RGF5OiJbVG9tb3Jyb3cgYXRdIExUIixuZXh0V2VlazoiZGRkZCBbYXRdIExUIixs''@;'; put 'put ''YXN0RGF5OiJbWWVzdGVyZGF5IGF0XSBMVCIsbGFzdFdlZWs6IltMYXN0XSBkZGRkIFthdF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImluICVzIixwYXN0OiIlcyBhZ28iLHM6ImEgZmV3IHNlY29uZHMiLHNzOiIlZCBzZWNvbmRzIixtOiJhIG1pbnV0ZSIsbW06''@;'; put 'put ''IiVkIG1pbnV0ZXMiLGg6ImFuIGhvdXIiLGhoOiIlZCBob3VycyIsZDoiYSBkYXkiLGRkOiIlZCBkYXlzIixNOiJhIG1vbnRoIixNTToiJWQgbW9udGhzIix5OiJhIHllYXIiLHl5OiIlZCB5ZWFycyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oc3R8bmR8cmR8dGgpLyxvcmRp''@;'; put 'put ''bmFsOmZ1bmN0aW9uKGcpe3ZhciBCPWclMTA7cmV0dXJuIGcrKDE9PX5+KGclMTAwLzEwKT8idGgiOjE9PT1CPyJzdCI6Mj09PUI/Im5kIjozPT09Qj8icmQiOiJ0aCIpfSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oeSg5NzU4NikpfSw4MDc6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7''@;'; put 'put ''InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJlbi1pZSIse21vbnRoczoiSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuX0ZlYl9N''@;'; put 'put ''YXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWMiLnNwbGl0KCJfIiksd2Vla2RheXM6IlN1bmRheV9Nb25kYXlfVHVlc2RheV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlN1bl9Nb25fVHVlX1dlZF9UaHVf''@;'; put 'put ''RnJpX1NhdCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiU3VfTW9fVHVfV2VfVGhfRnJfU2EiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixM''@;'; put 'put ''TExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltUb2RheSBhdF0gTFQiLG5leHREYXk6IltUb21vcnJvdyBhdF0gTFQiLG5leHRXZWVrOiJkZGRkIFthdF0gTFQiLGxhc3REYXk6IltZZXN0ZXJkYXkgYXRdIExUIixsYXN0V2VlazoiW0xhc3RdIGRkZGQg''@;'; put 'put ''W2F0XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiaW4gJXMiLHBhc3Q6IiVzIGFnbyIsczoiYSBmZXcgc2Vjb25kcyIsc3M6IiVkIHNlY29uZHMiLG06ImEgbWludXRlIixtbToiJWQgbWludXRlcyIsaDoiYW4gaG91ciIsaGg6IiVkIGhvdXJzIixkOiJhIGRheSIs''@;'; put 'put ''ZGQ6IiVkIGRheXMiLE06ImEgbW9udGgiLE1NOiIlZCBtb250aHMiLHk6ImEgeWVhciIseXk6IiVkIHllYXJzIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShzdHxuZHxyZHx0aCkvLG9yZGluYWw6ZnVuY3Rpb24oZyl7dmFyIEI9ZyUxMDtyZXR1cm4gZysoMT09fn4oZyUxMDAv''@;'; put 'put ''MTApPyJ0aCI6MT09PUI/InN0IjoyPT09Qj8ibmQiOjM9PT1CPyJyZCI6InRoIil9LHdlZWs6e2RvdzoxLGRveTo0fX0pfSh5KDk3NTg2KSl9LDk1OTYwOmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgiZW4taWwiLHttb250aHM6Ikph''@;'; put 'put ''bnVhcnlfRmVicnVhcnlfTWFyY2hfQXByaWxfTWF5X0p1bmVfSnVseV9BdWd1c3RfU2VwdGVtYmVyX09jdG9iZXJfTm92ZW1iZXJfRGVjZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikphbl9GZWJfTWFyX0Fwcl9NYXlfSnVuX0p1bF9BdWdfU2VwX09jdF9Ob3ZfRGVjIi5zcGxpdCgi''@;'; put 'put ''XyIpLHdlZWtkYXlzOiJTdW5kYXlfTW9uZGF5X1R1ZXNkYXlfV2VkbmVzZGF5X1RodXJzZGF5X0ZyaWRheV9TYXR1cmRheSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJTdW5fTW9uX1R1ZV9XZWRfVGh1X0ZyaV9TYXQiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlN1X01vX1R1X1dlX1Ro''@;'; put 'put ''X0ZyX1NhIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURh''@;'; put 'put ''eToiW1RvZGF5IGF0XSBMVCIsbmV4dERheToiW1RvbW9ycm93IGF0XSBMVCIsbmV4dFdlZWs6ImRkZGQgW2F0XSBMVCIsbGFzdERheToiW1llc3RlcmRheSBhdF0gTFQiLGxhc3RXZWVrOiJbTGFzdF0gZGRkZCBbYXRdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJp''@;'; put 'put ''biAlcyIscGFzdDoiJXMgYWdvIixzOiJhIGZldyBzZWNvbmRzIixzczoiJWQgc2Vjb25kcyIsbToiYSBtaW51dGUiLG1tOiIlZCBtaW51dGVzIixoOiJhbiBob3VyIixoaDoiJWQgaG91cnMiLGQ6ImEgZGF5IixkZDoiJWQgZGF5cyIsTToiYSBtb250aCIsTU06IiVkIG1vbnRocyIseToiYSB5''@;'; put 'put ''ZWFyIix5eToiJWQgeWVhcnMifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KHN0fG5kfHJkfHRoKS8sb3JkaW5hbDpmdW5jdGlvbihnKXt2YXIgQj1nJTEwO3JldHVybiBnKygxPT1+fihnJTEwMC8xMCk/InRoIjoxPT09Qj8ic3QiOjI9PT1CPyJuZCI6Mz09PUI/InJkIjoidGgi''@;'; put 'put ''KX19KX0oeSg5NzU4NikpfSw4NDQxODpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoImVuLWluIix7bW9udGhzOiJKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVy''@;'; put 'put ''X05vdmVtYmVyX0RlY2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW5fRmViX01hcl9BcHJfTWF5X0p1bl9KdWxfQXVnX1NlcF9PY3RfTm92X0RlYyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0''@;'; put 'put ''dXJkYXkiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiU3VuX01vbl9UdWVfV2VkX1RodV9GcmlfU2F0Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTdV9Nb19UdV9XZV9UaF9Gcl9TYSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6Img6bW0gQSIsTFRTOiJoOm1tOnNzIEEiLEw6''@;'; put 'put ''IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBoOm1tIEEiLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIGg6bW0gQSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbVG9kYXkgYXRdIExUIixuZXh0RGF5OiJbVG9tb3Jyb3cgYXRdIExUIixuZXh0V2VlazoiZGRkZCBb''@;'; put 'put ''YXRdIExUIixsYXN0RGF5OiJbWWVzdGVyZGF5IGF0XSBMVCIsbGFzdFdlZWs6IltMYXN0XSBkZGRkIFthdF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImluICVzIixwYXN0OiIlcyBhZ28iLHM6ImEgZmV3IHNlY29uZHMiLHNzOiIlZCBzZWNvbmRzIixtOiJhIG1p''@;'; put 'put ''bnV0ZSIsbW06IiVkIG1pbnV0ZXMiLGg6ImFuIGhvdXIiLGhoOiIlZCBob3VycyIsZDoiYSBkYXkiLGRkOiIlZCBkYXlzIixNOiJhIG1vbnRoIixNTToiJWQgbW9udGhzIix5OiJhIHllYXIiLHl5OiIlZCB5ZWFycyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oc3R8bmR8cmR8''@;'; put 'put ''dGgpLyxvcmRpbmFsOmZ1bmN0aW9uKGcpe3ZhciBCPWclMTA7cmV0dXJuIGcrKDE9PX5+KGclMTAwLzEwKT8idGgiOjE9PT1CPyJzdCI6Mj09PUI/Im5kIjozPT09Qj8icmQiOiJ0aCIpfSx3ZWVrOntkb3c6MCxkb3k6Nn19KX0oeSg5NzU4NikpfSw0Njg2NTpmdW5jdGlvbih1ZSxYLHkpeyFm''@;'; put 'put ''dW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoImVuLW56Iix7bW9udGhzOiJKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0''@;'; put 'put ''OiJKYW5fRmViX01hcl9BcHJfTWF5X0p1bl9KdWxfQXVnX1NlcF9PY3RfTm92X0RlYyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXkiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiU3VuX01vbl9U''@;'; put 'put ''dWVfV2VkX1RodV9GcmlfU2F0Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTdV9Nb19UdV9XZV9UaF9Gcl9TYSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6Img6bW0gQSIsTFRTOiJoOm1tOnNzIEEiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0g''@;'; put 'put ''WVlZWSBoOm1tIEEiLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIGg6bW0gQSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbVG9kYXkgYXRdIExUIixuZXh0RGF5OiJbVG9tb3Jyb3cgYXRdIExUIixuZXh0V2VlazoiZGRkZCBbYXRdIExUIixsYXN0RGF5OiJbWWVzdGVyZGF5IGF0XSBMVCIsbGFzdFdl''@;'; put 'put ''ZWs6IltMYXN0XSBkZGRkIFthdF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImluICVzIixwYXN0OiIlcyBhZ28iLHM6ImEgZmV3IHNlY29uZHMiLHNzOiIlZCBzZWNvbmRzIixtOiJhIG1pbnV0ZSIsbW06IiVkIG1pbnV0ZXMiLGg6ImFuIGhvdXIiLGhoOiIlZCBo''@;'; put 'put ''b3VycyIsZDoiYSBkYXkiLGRkOiIlZCBkYXlzIixNOiJhIG1vbnRoIixNTToiJWQgbW9udGhzIix5OiJhIHllYXIiLHl5OiIlZCB5ZWFycyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oc3R8bmR8cmR8dGgpLyxvcmRpbmFsOmZ1bmN0aW9uKGcpe3ZhciBCPWclMTA7cmV0dXJu''@;'; put 'put ''IGcrKDE9PX5+KGclMTAwLzEwKT8idGgiOjE9PT1CPyJzdCI6Mj09PUI/Im5kIjozPT09Qj8icmQiOiJ0aCIpfSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oeSg5NzU4NikpfSwzMjY0NzpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoImVu''@;'; put 'put ''LXNnIix7bW9udGhzOiJKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW5fRmViX01hcl9BcHJfTWF5X0p1bl9KdWxfQXVnX1NlcF9PY3Rf''@;'; put 'put ''Tm92X0RlYyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXkiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiU3VuX01vbl9UdWVfV2VkX1RodV9GcmlfU2F0Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWlu''@;'; put 'put ''OiJTdV9Nb19UdV9XZV9UaF9Gcl9TYSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0s''@;'; put 'put ''Y2FsZW5kYXI6e3NhbWVEYXk6IltUb2RheSBhdF0gTFQiLG5leHREYXk6IltUb21vcnJvdyBhdF0gTFQiLG5leHRXZWVrOiJkZGRkIFthdF0gTFQiLGxhc3REYXk6IltZZXN0ZXJkYXkgYXRdIExUIixsYXN0V2VlazoiW0xhc3RdIGRkZGQgW2F0XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2''@;'; put 'put ''ZVRpbWU6e2Z1dHVyZToiaW4gJXMiLHBhc3Q6IiVzIGFnbyIsczoiYSBmZXcgc2Vjb25kcyIsc3M6IiVkIHNlY29uZHMiLG06ImEgbWludXRlIixtbToiJWQgbWludXRlcyIsaDoiYW4gaG91ciIsaGg6IiVkIGhvdXJzIixkOiJhIGRheSIsZGQ6IiVkIGRheXMiLE06ImEgbW9udGgiLE1NOiIl''@;'; put 'put ''ZCBtb250aHMiLHk6ImEgeWVhciIseXk6IiVkIHllYXJzIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShzdHxuZHxyZHx0aCkvLG9yZGluYWw6ZnVuY3Rpb24oZyl7dmFyIEI9ZyUxMDtyZXR1cm4gZysoMT09fn4oZyUxMDAvMTApPyJ0aCI6MT09PUI/InN0IjoyPT09Qj8ibmQi''@;'; put 'put ''OjM9PT1CPyJyZCI6InRoIil9LHdlZWs6e2RvdzoxLGRveTo0fX0pfSh5KDk3NTg2KSl9LDYxOTMxOmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgiZW8iLHttb250aHM6ImphbnVhcm9fZmVicnVhcm9fbWFydG9fYXByaWxvX21ham9f''@;'; put 'put ''anVuaW9fanVsaW9fYVx1MDE2ZGd1c3RvX3NlcHRlbWJyb19va3RvYnJvX25vdmVtYnJvX2RlY2VtYnJvIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJqYW5fZmViX21hcnRfYXByX21hal9qdW5fanVsX2FcdTAxNmRnX3NlcHRfb2t0X25vdl9kZWMiLnNwbGl0KCJfIiksd2Vla2RheXM6ImRp''@;'; put 'put ''bWFuXHUwMTA5b19sdW5kb19tYXJkb19tZXJrcmVkb19cdTAxMzVhXHUwMTZkZG9fdmVuZHJlZG9fc2FiYXRvIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6ImRpbV9sdW5fbWFyZF9tZXJrX1x1MDEzNWFcdTAxNmRfdmVuX3NhYiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiZGlfbHVfbWFf''@;'; put 'put ''bWVfXHUwMTM1YV92ZV9zYSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJZWVlZLU1NLUREIixMTDoiW2xhXSBEWy1hbiBkZV0gTU1NTSwgWVlZWSIsTExMOiJbbGFdIERbLWFuIGRlXSBNTU1NLCBZWVlZIEhIOm1tIixMTExMOiJkZGRk''@;'; put 'put ''W25dLCBbbGFdIERbLWFuIGRlXSBNTU1NLCBZWVlZIEhIOm1tIixsbGxsOiJkZGQsIFtsYV0gRFstYW4gZGVdIE1NTSwgWVlZWSBISDptbSJ9LG1lcmlkaWVtUGFyc2U6L1thcF1cLnRcLm0vaSxpc1BNOmZ1bmN0aW9uKGcpe3JldHVybiJwIj09PWcuY2hhckF0KDApLnRvTG93ZXJDYXNlKCl9''@;'; put 'put ''LG1lcmlkaWVtOmZ1bmN0aW9uKGcsQix3KXtyZXR1cm4gZz4xMT93PyJwLnQubS4iOiJQLlQuTS4iOnc/ImEudC5tLiI6IkEuVC5NLiJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbSG9kaWFcdTAxNmQgamVdIExUIixuZXh0RGF5OiJbTW9yZ2FcdTAxNmQgamVdIExUIixuZXh0V2VlazoiZGRkZFtu''@;'; put 'put ''IGplXSBMVCIsbGFzdERheToiW0hpZXJhXHUwMTZkIGplXSBMVCIsbGFzdFdlZWs6IltwYXNpbnRhbl0gZGRkZFtuIGplXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToicG9zdCAlcyIscGFzdDoiYW50YVx1MDE2ZCAlcyIsczoia2Vsa2FqIHNla3VuZG9qIixzczoi''@;'; put 'put ''JWQgc2VrdW5kb2oiLG06InVudSBtaW51dG8iLG1tOiIlZCBtaW51dG9qIixoOiJ1bnUgaG9ybyIsaGg6IiVkIGhvcm9qIixkOiJ1bnUgdGFnbyIsZGQ6IiVkIHRhZ29qIixNOiJ1bnUgbW9uYXRvIixNTToiJWQgbW9uYXRvaiIseToidW51IGphcm8iLHl5OiIlZCBqYXJvaiJ9LGRheU9mTW9u''@;'; put 'put ''dGhPcmRpbmFsUGFyc2U6L1xkezEsMn1hLyxvcmRpbmFsOiIlZGEiLHdlZWs6e2RvdzoxLGRveTo3fX0pfSh5KDk3NTg2KSl9LDQxODA1OmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz0iZW5lLl9mZWIuX21hci5fYWJyLl9tYXkuX2p1bi5fanVsLl9h''@;'; put 'put ''Z28uX3NlcC5fb2N0Ll9ub3YuX2RpYy4iLnNwbGl0KCJfIiksZz0iZW5lX2ZlYl9tYXJfYWJyX21heV9qdW5fanVsX2Fnb19zZXBfb2N0X25vdl9kaWMiLnNwbGl0KCJfIiksQj1bL15lbmUvaSwvXmZlYi9pLC9ebWFyL2ksL15hYnIvaSwvXm1heS9pLC9eanVuL2ksL15qdWwvaSwvXmFnby9p''@;'; put 'put ''LC9ec2VwL2ksL15vY3QvaSwvXm5vdi9pLC9eZGljL2ldLHc9L14oZW5lcm98ZmVicmVyb3xtYXJ6b3xhYnJpbHxtYXlvfGp1bmlvfGp1bGlvfGFnb3N0b3xzZXB0aWVtYnJlfG9jdHVicmV8bm92aWVtYnJlfGRpY2llbWJyZXxlbmVcLj98ZmViXC4/fG1hclwuP3xhYnJcLj98bWF5XC4/fGp1''@;'; put 'put ''blwuP3xqdWxcLj98YWdvXC4/fHNlcFwuP3xvY3RcLj98bm92XC4/fGRpY1wuPykvaTtJLmRlZmluZUxvY2FsZSgiZXMtZG8iLHttb250aHM6ImVuZXJvX2ZlYnJlcm9fbWFyem9fYWJyaWxfbWF5b19qdW5pb19qdWxpb19hZ29zdG9fc2VwdGllbWJyZV9vY3R1YnJlX25vdmllbWJyZV9kaWNp''@;'; put 'put ''ZW1icmUiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6ZnVuY3Rpb24oRixPKXtyZXR1cm4gRj8vLU1NTS0vLnRlc3QoTyk/Z1tGLm1vbnRoKCldOl9bRi5tb250aCgpXTpffSxtb250aHNSZWdleDp3LG1vbnRoc1Nob3J0UmVnZXg6dyxtb250aHNTdHJpY3RSZWdleDovXihlbmVyb3xmZWJyZXJv''@;'; put 'put ''fG1hcnpvfGFicmlsfG1heW98anVuaW98anVsaW98YWdvc3RvfHNlcHRpZW1icmV8b2N0dWJyZXxub3ZpZW1icmV8ZGljaWVtYnJlKS9pLG1vbnRoc1Nob3J0U3RyaWN0UmVnZXg6L14oZW5lXC4/fGZlYlwuP3xtYXJcLj98YWJyXC4/fG1heVwuP3xqdW5cLj98anVsXC4/fGFnb1wuP3xzZXBc''@;'; put 'put ''Lj98b2N0XC4/fG5vdlwuP3xkaWNcLj8pL2ksbW9udGhzUGFyc2U6Qixsb25nTW9udGhzUGFyc2U6QixzaG9ydE1vbnRoc1BhcnNlOkIsd2Vla2RheXM6ImRvbWluZ29fbHVuZXNfbWFydGVzX21pXHhlOXJjb2xlc19qdWV2ZXNfdmllcm5lc19zXHhlMWJhZG8iLnNwbGl0KCJfIiksd2Vla2Rh''@;'; put 'put ''eXNTaG9ydDoiZG9tLl9sdW4uX21hci5fbWlceGU5Ll9qdWUuX3ZpZS5fc1x4ZTFiLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiZG9fbHVfbWFfbWlfanVfdmlfc1x4ZTEiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiaDptbSBBIixMVFM6''@;'; put 'put ''Img6bW06c3MgQSIsTDoiREQvTU0vWVlZWSIsTEw6IkQgW2RlXSBNTU1NIFtkZV0gWVlZWSIsTExMOiJEIFtkZV0gTU1NTSBbZGVdIFlZWVkgaDptbSBBIixMTExMOiJkZGRkLCBEIFtkZV0gTU1NTSBbZGVdIFlZWVkgaDptbSBBIn0sY2FsZW5kYXI6e3NhbWVEYXk6ZnVuY3Rpb24oKXtyZXR1''@;'; put 'put ''cm4iW2hveSBhIGxhIisoMSE9PXRoaXMuaG91cnMoKT8icyI6IiIpKyJdIExUIn0sbmV4dERheTpmdW5jdGlvbigpe3JldHVybiJbbWFceGYxYW5hIGEgbGEiKygxIT09dGhpcy5ob3VycygpPyJzIjoiIikrIl0gTFQifSxuZXh0V2VlazpmdW5jdGlvbigpe3JldHVybiJkZGRkIFthIGxhIiso''@;'; put 'put ''MSE9PXRoaXMuaG91cnMoKT8icyI6IiIpKyJdIExUIn0sbGFzdERheTpmdW5jdGlvbigpe3JldHVybiJbYXllciBhIGxhIisoMSE9PXRoaXMuaG91cnMoKT8icyI6IiIpKyJdIExUIn0sbGFzdFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4iW2VsXSBkZGRkIFtwYXNhZG8gYSBsYSIrKDEhPT10aGlz''@;'; put 'put ''LmhvdXJzKCk/InMiOiIiKSsiXSBMVCJ9LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImVuICVzIixwYXN0OiJoYWNlICVzIixzOiJ1bm9zIHNlZ3VuZG9zIixzczoiJWQgc2VndW5kb3MiLG06InVuIG1pbnV0byIsbW06IiVkIG1pbnV0b3MiLGg6InVuYSBob3JhIixoaDoi''@;'; put 'put ''JWQgaG9yYXMiLGQ6InVuIGRceGVkYSIsZGQ6IiVkIGRceGVkYXMiLHc6InVuYSBzZW1hbmEiLHd3OiIlZCBzZW1hbmFzIixNOiJ1biBtZXMiLE1NOiIlZCBtZXNlcyIseToidW4gYVx4ZjFvIix5eToiJWQgYVx4ZjFvcyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1ceGJhLyxv''@;'; put 'put ''cmRpbmFsOiIlZFx4YmEiLHdlZWs6e2RvdzoxLGRveTo0fX0pfSh5KDk3NTg2KSl9LDgzNDQ1OmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz0iZW5lLl9mZWIuX21hci5fYWJyLl9tYXkuX2p1bi5fanVsLl9hZ28uX3NlcC5fb2N0Ll9ub3YuX2RpYy4i''@;'; put 'put ''LnNwbGl0KCJfIiksZz0iZW5lX2ZlYl9tYXJfYWJyX21heV9qdW5fanVsX2Fnb19zZXBfb2N0X25vdl9kaWMiLnNwbGl0KCJfIiksQj1bL15lbmUvaSwvXmZlYi9pLC9ebWFyL2ksL15hYnIvaSwvXm1heS9pLC9eanVuL2ksL15qdWwvaSwvXmFnby9pLC9ec2VwL2ksL15vY3QvaSwvXm5vdi9p''@;'; put 'put ''LC9eZGljL2ldLHc9L14oZW5lcm98ZmVicmVyb3xtYXJ6b3xhYnJpbHxtYXlvfGp1bmlvfGp1bGlvfGFnb3N0b3xzZXB0aWVtYnJlfG9jdHVicmV8bm92aWVtYnJlfGRpY2llbWJyZXxlbmVcLj98ZmViXC4/fG1hclwuP3xhYnJcLj98bWF5XC4/fGp1blwuP3xqdWxcLj98YWdvXC4/fHNlcFwu''@;'; put 'put ''P3xvY3RcLj98bm92XC4/fGRpY1wuPykvaTtJLmRlZmluZUxvY2FsZSgiZXMtbXgiLHttb250aHM6ImVuZXJvX2ZlYnJlcm9fbWFyem9fYWJyaWxfbWF5b19qdW5pb19qdWxpb19hZ29zdG9fc2VwdGllbWJyZV9vY3R1YnJlX25vdmllbWJyZV9kaWNpZW1icmUiLnNwbGl0KCJfIiksbW9udGhz''@;'; put 'put ''U2hvcnQ6ZnVuY3Rpb24oRixPKXtyZXR1cm4gRj8vLU1NTS0vLnRlc3QoTyk/Z1tGLm1vbnRoKCldOl9bRi5tb250aCgpXTpffSxtb250aHNSZWdleDp3LG1vbnRoc1Nob3J0UmVnZXg6dyxtb250aHNTdHJpY3RSZWdleDovXihlbmVyb3xmZWJyZXJvfG1hcnpvfGFicmlsfG1heW98anVuaW98''@;'; put 'put ''anVsaW98YWdvc3RvfHNlcHRpZW1icmV8b2N0dWJyZXxub3ZpZW1icmV8ZGljaWVtYnJlKS9pLG1vbnRoc1Nob3J0U3RyaWN0UmVnZXg6L14oZW5lXC4/fGZlYlwuP3xtYXJcLj98YWJyXC4/fG1heVwuP3xqdW5cLj98anVsXC4/fGFnb1wuP3xzZXBcLj98b2N0XC4/fG5vdlwuP3xkaWNcLj8p''@;'; put 'put ''L2ksbW9udGhzUGFyc2U6Qixsb25nTW9udGhzUGFyc2U6QixzaG9ydE1vbnRoc1BhcnNlOkIsd2Vla2RheXM6ImRvbWluZ29fbHVuZXNfbWFydGVzX21pXHhlOXJjb2xlc19qdWV2ZXNfdmllcm5lc19zXHhlMWJhZG8iLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiZG9tLl9sdW4uX21hci5f''@;'; put 'put ''bWlceGU5Ll9qdWUuX3ZpZS5fc1x4ZTFiLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiZG9fbHVfbWFfbWlfanVfdmlfc1x4ZTEiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIsTFRTOiJIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixM''@;'; put 'put ''TDoiRCBbZGVdIE1NTU0gW2RlXSBZWVlZIixMTEw6IkQgW2RlXSBNTU1NIFtkZV0gWVlZWSBIOm1tIixMTExMOiJkZGRkLCBEIFtkZV0gTU1NTSBbZGVdIFlZWVkgSDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OmZ1bmN0aW9uKCl7cmV0dXJuIltob3kgYSBsYSIrKDEhPT10aGlzLmhvdXJzKCk/''@;'; put 'put ''InMiOiIiKSsiXSBMVCJ9LG5leHREYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW21hXHhmMWFuYSBhIGxhIisoMSE9PXRoaXMuaG91cnMoKT8icyI6IiIpKyJdIExUIn0sbmV4dFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4iZGRkZCBbYSBsYSIrKDEhPT10aGlzLmhvdXJzKCk/InMiOiIiKSsiXSBMVCJ9''@;'; put 'put ''LGxhc3REYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW2F5ZXIgYSBsYSIrKDEhPT10aGlzLmhvdXJzKCk/InMiOiIiKSsiXSBMVCJ9LGxhc3RXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIltlbF0gZGRkZCBbcGFzYWRvIGEgbGEiKygxIT09dGhpcy5ob3VycygpPyJzIjoiIikrIl0gTFQifSxzYW1lRWxz''@;'; put 'put ''ZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJlbiAlcyIscGFzdDoiaGFjZSAlcyIsczoidW5vcyBzZWd1bmRvcyIsc3M6IiVkIHNlZ3VuZG9zIixtOiJ1biBtaW51dG8iLG1tOiIlZCBtaW51dG9zIixoOiJ1bmEgaG9yYSIsaGg6IiVkIGhvcmFzIixkOiJ1biBkXHhlZGEiLGRkOiIlZCBk''@;'; put 'put ''XHhlZGFzIix3OiJ1bmEgc2VtYW5hIix3dzoiJWQgc2VtYW5hcyIsTToidW4gbWVzIixNTToiJWQgbWVzZXMiLHk6InVuIGFceGYxbyIseXk6IiVkIGFceGYxb3MifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XHhiYS8sb3JkaW5hbDoiJWRceGJhIix3ZWVrOntkb3c6MCxkb3k6''@;'; put 'put ''NH0saW52YWxpZERhdGU6IkZlY2hhIGludlx4ZTFsaWRhIn0pfSh5KDk3NTg2KSl9LDgxNTE2OmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz0iZW5lLl9mZWIuX21hci5fYWJyLl9tYXkuX2p1bi5fanVsLl9hZ28uX3NlcC5fb2N0Ll9ub3YuX2RpYy4i''@;'; put 'put ''LnNwbGl0KCJfIiksZz0iZW5lX2ZlYl9tYXJfYWJyX21heV9qdW5fanVsX2Fnb19zZXBfb2N0X25vdl9kaWMiLnNwbGl0KCJfIiksQj1bL15lbmUvaSwvXmZlYi9pLC9ebWFyL2ksL15hYnIvaSwvXm1heS9pLC9eanVuL2ksL15qdWwvaSwvXmFnby9pLC9ec2VwL2ksL15vY3QvaSwvXm5vdi9p''@;'; put 'put ''LC9eZGljL2ldLHc9L14oZW5lcm98ZmVicmVyb3xtYXJ6b3xhYnJpbHxtYXlvfGp1bmlvfGp1bGlvfGFnb3N0b3xzZXB0aWVtYnJlfG9jdHVicmV8bm92aWVtYnJlfGRpY2llbWJyZXxlbmVcLj98ZmViXC4/fG1hclwuP3xhYnJcLj98bWF5XC4/fGp1blwuP3xqdWxcLj98YWdvXC4/fHNlcFwu''@;'; put 'put ''P3xvY3RcLj98bm92XC4/fGRpY1wuPykvaTtJLmRlZmluZUxvY2FsZSgiZXMtdXMiLHttb250aHM6ImVuZXJvX2ZlYnJlcm9fbWFyem9fYWJyaWxfbWF5b19qdW5pb19qdWxpb19hZ29zdG9fc2VwdGllbWJyZV9vY3R1YnJlX25vdmllbWJyZV9kaWNpZW1icmUiLnNwbGl0KCJfIiksbW9udGhz''@;'; put 'put ''U2hvcnQ6ZnVuY3Rpb24oRixPKXtyZXR1cm4gRj8vLU1NTS0vLnRlc3QoTyk/Z1tGLm1vbnRoKCldOl9bRi5tb250aCgpXTpffSxtb250aHNSZWdleDp3LG1vbnRoc1Nob3J0UmVnZXg6dyxtb250aHNTdHJpY3RSZWdleDovXihlbmVyb3xmZWJyZXJvfG1hcnpvfGFicmlsfG1heW98anVuaW98''@;'; put 'put ''anVsaW98YWdvc3RvfHNlcHRpZW1icmV8b2N0dWJyZXxub3ZpZW1icmV8ZGljaWVtYnJlKS9pLG1vbnRoc1Nob3J0U3RyaWN0UmVnZXg6L14oZW5lXC4/fGZlYlwuP3xtYXJcLj98YWJyXC4/fG1heVwuP3xqdW5cLj98anVsXC4/fGFnb1wuP3xzZXBcLj98b2N0XC4/fG5vdlwuP3xkaWNcLj8p''@;'; put 'put ''L2ksbW9udGhzUGFyc2U6Qixsb25nTW9udGhzUGFyc2U6QixzaG9ydE1vbnRoc1BhcnNlOkIsd2Vla2RheXM6ImRvbWluZ29fbHVuZXNfbWFydGVzX21pXHhlOXJjb2xlc19qdWV2ZXNfdmllcm5lc19zXHhlMWJhZG8iLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiZG9tLl9sdW4uX21hci5f''@;'; put 'put ''bWlceGU5Ll9qdWUuX3ZpZS5fc1x4ZTFiLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiZG9fbHVfbWFfbWlfanVfdmlfc1x4ZTEiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiaDptbSBBIixMVFM6Img6bW06c3MgQSIsTDoiTU0vREQvWVlZ''@;'; put 'put ''WSIsTEw6IkQgW2RlXSBNTU1NIFtkZV0gWVlZWSIsTExMOiJEIFtkZV0gTU1NTSBbZGVdIFlZWVkgaDptbSBBIixMTExMOiJkZGRkLCBEIFtkZV0gTU1NTSBbZGVdIFlZWVkgaDptbSBBIn0sY2FsZW5kYXI6e3NhbWVEYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW2hveSBhIGxhIisoMSE9PXRoaXMu''@;'; put 'put ''aG91cnMoKT8icyI6IiIpKyJdIExUIn0sbmV4dERheTpmdW5jdGlvbigpe3JldHVybiJbbWFceGYxYW5hIGEgbGEiKygxIT09dGhpcy5ob3VycygpPyJzIjoiIikrIl0gTFQifSxuZXh0V2VlazpmdW5jdGlvbigpe3JldHVybiJkZGRkIFthIGxhIisoMSE9PXRoaXMuaG91cnMoKT8icyI6IiIp''@;'; put 'put ''KyJdIExUIn0sbGFzdERheTpmdW5jdGlvbigpe3JldHVybiJbYXllciBhIGxhIisoMSE9PXRoaXMuaG91cnMoKT8icyI6IiIpKyJdIExUIn0sbGFzdFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4iW2VsXSBkZGRkIFtwYXNhZG8gYSBsYSIrKDEhPT10aGlzLmhvdXJzKCk/InMiOiIiKSsiXSBMVCJ9''@;'; put 'put ''LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImVuICVzIixwYXN0OiJoYWNlICVzIixzOiJ1bm9zIHNlZ3VuZG9zIixzczoiJWQgc2VndW5kb3MiLG06InVuIG1pbnV0byIsbW06IiVkIG1pbnV0b3MiLGg6InVuYSBob3JhIixoaDoiJWQgaG9yYXMiLGQ6InVuIGRceGVkYSIs''@;'; put 'put ''ZGQ6IiVkIGRceGVkYXMiLHc6InVuYSBzZW1hbmEiLHd3OiIlZCBzZW1hbmFzIixNOiJ1biBtZXMiLE1NOiIlZCBtZXNlcyIseToidW4gYVx4ZjFvIix5eToiJWQgYVx4ZjFvcyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1ceGJhLyxvcmRpbmFsOiIlZFx4YmEiLHdlZWs6e2Rv''@;'; put 'put ''dzowLGRveTo2fX0pfSh5KDk3NTg2KSl9LDQ2Njc5OmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz0iZW5lLl9mZWIuX21hci5fYWJyLl9tYXkuX2p1bi5fanVsLl9hZ28uX3NlcC5fb2N0Ll9ub3YuX2RpYy4iLnNwbGl0KCJfIiksZz0iZW5lX2ZlYl9t''@;'; put 'put ''YXJfYWJyX21heV9qdW5fanVsX2Fnb19zZXBfb2N0X25vdl9kaWMiLnNwbGl0KCJfIiksQj1bL15lbmUvaSwvXmZlYi9pLC9ebWFyL2ksL15hYnIvaSwvXm1heS9pLC9eanVuL2ksL15qdWwvaSwvXmFnby9pLC9ec2VwL2ksL15vY3QvaSwvXm5vdi9pLC9eZGljL2ldLHc9L14oZW5lcm98ZmVi''@;'; put 'put ''cmVyb3xtYXJ6b3xhYnJpbHxtYXlvfGp1bmlvfGp1bGlvfGFnb3N0b3xzZXB0aWVtYnJlfG9jdHVicmV8bm92aWVtYnJlfGRpY2llbWJyZXxlbmVcLj98ZmViXC4/fG1hclwuP3xhYnJcLj98bWF5XC4/fGp1blwuP3xqdWxcLj98YWdvXC4/fHNlcFwuP3xvY3RcLj98bm92XC4/fGRpY1wuPykv''@;'; put 'put ''aTtJLmRlZmluZUxvY2FsZSgiZXMiLHttb250aHM6ImVuZXJvX2ZlYnJlcm9fbWFyem9fYWJyaWxfbWF5b19qdW5pb19qdWxpb19hZ29zdG9fc2VwdGllbWJyZV9vY3R1YnJlX25vdmllbWJyZV9kaWNpZW1icmUiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6ZnVuY3Rpb24oRixPKXtyZXR1cm4g''@;'; put 'put ''Rj8vLU1NTS0vLnRlc3QoTyk/Z1tGLm1vbnRoKCldOl9bRi5tb250aCgpXTpffSxtb250aHNSZWdleDp3LG1vbnRoc1Nob3J0UmVnZXg6dyxtb250aHNTdHJpY3RSZWdleDovXihlbmVyb3xmZWJyZXJvfG1hcnpvfGFicmlsfG1heW98anVuaW98anVsaW98YWdvc3RvfHNlcHRpZW1icmV8b2N0''@;'; put 'put ''dWJyZXxub3ZpZW1icmV8ZGljaWVtYnJlKS9pLG1vbnRoc1Nob3J0U3RyaWN0UmVnZXg6L14oZW5lXC4/fGZlYlwuP3xtYXJcLj98YWJyXC4/fG1heVwuP3xqdW5cLj98anVsXC4/fGFnb1wuP3xzZXBcLj98b2N0XC4/fG5vdlwuP3xkaWNcLj8pL2ksbW9udGhzUGFyc2U6Qixsb25nTW9udGhz''@;'; put 'put ''UGFyc2U6QixzaG9ydE1vbnRoc1BhcnNlOkIsd2Vla2RheXM6ImRvbWluZ29fbHVuZXNfbWFydGVzX21pXHhlOXJjb2xlc19qdWV2ZXNfdmllcm5lc19zXHhlMWJhZG8iLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiZG9tLl9sdW4uX21hci5fbWlceGU5Ll9qdWUuX3ZpZS5fc1x4ZTFiLiIu''@;'; put 'put ''c3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiZG9fbHVfbWFfbWlfanVfdmlfc1x4ZTEiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIsTFRTOiJIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBbZGVdIE1NTU0gW2RlXSBZWVlZIixM''@;'; put 'put ''TEw6IkQgW2RlXSBNTU1NIFtkZV0gWVlZWSBIOm1tIixMTExMOiJkZGRkLCBEIFtkZV0gTU1NTSBbZGVdIFlZWVkgSDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OmZ1bmN0aW9uKCl7cmV0dXJuIltob3kgYSBsYSIrKDEhPT10aGlzLmhvdXJzKCk/InMiOiIiKSsiXSBMVCJ9LG5leHREYXk6ZnVu''@;'; put 'put ''Y3Rpb24oKXtyZXR1cm4iW21hXHhmMWFuYSBhIGxhIisoMSE9PXRoaXMuaG91cnMoKT8icyI6IiIpKyJdIExUIn0sbmV4dFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4iZGRkZCBbYSBsYSIrKDEhPT10aGlzLmhvdXJzKCk/InMiOiIiKSsiXSBMVCJ9LGxhc3REYXk6ZnVuY3Rpb24oKXtyZXR1cm4i''@;'; put 'put ''W2F5ZXIgYSBsYSIrKDEhPT10aGlzLmhvdXJzKCk/InMiOiIiKSsiXSBMVCJ9LGxhc3RXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIltlbF0gZGRkZCBbcGFzYWRvIGEgbGEiKygxIT09dGhpcy5ob3VycygpPyJzIjoiIikrIl0gTFQifSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJl''@;'; put 'put ''OiJlbiAlcyIscGFzdDoiaGFjZSAlcyIsczoidW5vcyBzZWd1bmRvcyIsc3M6IiVkIHNlZ3VuZG9zIixtOiJ1biBtaW51dG8iLG1tOiIlZCBtaW51dG9zIixoOiJ1bmEgaG9yYSIsaGg6IiVkIGhvcmFzIixkOiJ1biBkXHhlZGEiLGRkOiIlZCBkXHhlZGFzIix3OiJ1bmEgc2VtYW5hIix3dzoi''@;'; put 'put ''JWQgc2VtYW5hcyIsTToidW4gbWVzIixNTToiJWQgbWVzZXMiLHk6InVuIGFceGYxbyIseXk6IiVkIGFceGYxb3MifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XHhiYS8sb3JkaW5hbDoiJWRceGJhIix3ZWVrOntkb3c6MSxkb3k6NH0saW52YWxpZERhdGU6IkZlY2hhIGludlx4''@;'; put 'put ''ZTFsaWRhIn0pfSh5KDk3NTg2KSl9LDg4MTUwOmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBfKEIsdyxQLEYpe3ZhciBPPXtzOlsibVx4ZjVuZSBzZWt1bmRpIiwibVx4ZjVuaSBzZWt1bmQiLCJwYWFyIHNla3VuZGl0Il0sc3M6W0IrInNla3Vu''@;'; put 'put ''ZGkiLEIrInNla3VuZGl0Il0sbTpbIlx4ZmNoZSBtaW51dGkiLCJceGZja3MgbWludXQiXSxtbTpbQisiIG1pbnV0aSIsQisiIG1pbnV0aXQiXSxoOlsiXHhmY2hlIHR1bm5pIiwidHVuZCBhZWdhIiwiXHhmY2tzIHR1bmQiXSxoaDpbQisiIHR1bm5pIixCKyIgdHVuZGkiXSxkOlsiXHhmY2hl''@;'; put 'put ''IHBceGU0ZXZhIiwiXHhmY2tzIHBceGU0ZXYiXSxNOlsia3V1IGFqYSIsImt1dSBhZWdhIiwiXHhmY2tzIGt1dSJdLE1NOltCKyIga3V1IixCKyIga3V1ZCJdLHk6WyJceGZjaGUgYWFzdGEiLCJhYXN0YSIsIlx4ZmNrcyBhYXN0YSJdLHl5OltCKyIgYWFzdGEiLEIrIiBhYXN0YXQiXX07cmV0''@;'; put 'put ''dXJuIHc/T1tQXVsyXT9PW1BdWzJdOk9bUF1bMV06Rj9PW1BdWzBdOk9bUF1bMV19SS5kZWZpbmVMb2NhbGUoImV0Iix7bW9udGhzOiJqYWFudWFyX3ZlZWJydWFyX21ceGU0cnRzX2FwcmlsbF9tYWlfanV1bmlfanV1bGlfYXVndXN0X3NlcHRlbWJlcl9va3Rvb2Jlcl9ub3ZlbWJlcl9kZXRz''@;'; put 'put ''ZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6ImphYW5fdmVlYnJfbVx4ZTRydHNfYXByX21haV9qdXVuaV9qdXVsaV9hdWdfc2VwdF9va3Rfbm92X2RldHMiLnNwbGl0KCJfIiksd2Vla2RheXM6InBceGZjaGFwXHhlNGV2X2VzbWFzcFx4ZTRldl90ZWlzaXBceGU0ZXZfa29sbWFwXHhl''@;'; put 'put ''NGV2X25lbGphcFx4ZTRldl9yZWVkZV9sYXVwXHhlNGV2Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlBfRV9UX0tfTl9SX0wiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlBfRV9UX0tfTl9SX0wiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJIOm1tIixMVFM6Ikg6bW06c3Mi''@;'; put 'put ''LEw6IkRELk1NLllZWVkiLExMOiJELiBNTU1NIFlZWVkiLExMTDoiRC4gTU1NTSBZWVlZIEg6bW0iLExMTEw6ImRkZGQsIEQuIE1NTU0gWVlZWSBIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltUXHhlNG5hLF0gTFQiLG5leHREYXk6IltIb21tZSxdIExUIixuZXh0V2VlazoiW0pceGU0cmdt''@;'; put 'put ''aW5lXSBkZGRkIExUIixsYXN0RGF5OiJbRWlsZSxdIExUIixsYXN0V2VlazoiW0VlbG1pbmVdIGRkZGQgTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIHBceGU0cmFzdCIscGFzdDoiJXMgdGFnYXNpIixzOl8sc3M6XyxtOl8sbW06XyxoOl8saGg6XyxkOl8sZGQ6''@;'; put 'put ''IiVkIHBceGU0ZXZhIixNOl8sTU06Xyx5Ol8seXk6X30sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo0fX0pfSh5KDk3NTg2KSl9LDgwNzU3OmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJ''@;'; put 'put ''LmRlZmluZUxvY2FsZSgiZXUiLHttb250aHM6InVydGFycmlsYV9vdHNhaWxhX21hcnR4b2FfYXBpcmlsYV9tYWlhdHphX2VrYWluYV91enRhaWxhX2FidXp0dWFfaXJhaWxhX3VycmlhX2F6YXJvYV9hYmVuZHVhIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJ1cnQuX290cy5fbWFyLl9hcGku''@;'; put 'put ''X21haS5fZWthLl91enQuX2FidS5faXJhLl91cnIuX2F6YS5fYWJlLiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJpZ2FuZGVhX2FzdGVsZWhlbmFfYXN0ZWFydGVhX2FzdGVhemtlbmFfb3N0ZWd1bmFfb3N0aXJhbGFfbGFydW5iYXRhIi5zcGxpdCgiXyIpLHdl''@;'; put 'put ''ZWtkYXlzU2hvcnQ6ImlnLl9hbC5fYXIuX2F6Ll9vZy5fb2wuX2xyLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiaWdfYWxfYXJfYXpfb2dfb2xfbHIiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6''@;'; put 'put ''IllZWVktTU0tREQiLExMOiJZWVlZW2tvXSBNTU1NW3Jlbl0gRFthXSIsTExMOiJZWVlZW2tvXSBNTU1NW3Jlbl0gRFthXSBISDptbSIsTExMTDoiZGRkZCwgWVlZWVtrb10gTU1NTVtyZW5dIERbYV0gSEg6bW0iLGw6IllZWVktTS1EIixsbDoiWVlZWVtrb10gTU1NIERbYV0iLGxsbDoiWVlZ''@;'; put 'put ''WVtrb10gTU1NIERbYV0gSEg6bW0iLGxsbGw6ImRkZCwgWVlZWVtrb10gTU1NIERbYV0gSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW2dhdXJdIExUW2V0YW5dIixuZXh0RGF5OiJbYmloYXJdIExUW2V0YW5dIixuZXh0V2VlazoiZGRkZCBMVFtldGFuXSIsbGFzdERheToiW2F0em9dIExU''@;'; put 'put ''W2V0YW5dIixsYXN0V2VlazoiW2F1cnJla29dIGRkZGQgTFRbZXRhbl0iLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIGJhcnJ1IixwYXN0OiJkdWVsYSAlcyIsczoic2VndW5kbyBiYXR6dWsiLHNzOiIlZCBzZWd1bmRvIixtOiJtaW51dHUgYmF0IixtbToiJWQgbWlu''@;'; put 'put ''dXR1IixoOiJvcmR1IGJhdCIsaGg6IiVkIG9yZHUiLGQ6ImVndW4gYmF0IixkZDoiJWQgZWd1biIsTToiaGlsYWJldGUgYmF0IixNTToiJWQgaGlsYWJldGUiLHk6InVydGUgYmF0Iix5eToiJWQgdXJ0ZSJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQu''@;'; put 'put ''Iix3ZWVrOntkb3c6MSxkb3k6N319KX0oeSg5NzU4NikpfSw2NTc0MjpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7dmFyIF89ezE6Ilx1MDZmMSIsMjoiXHUwNmYyIiwzOiJcdTA2ZjMiLDQ6Ilx1MDZmNCIsNToiXHUwNmY1Iiw2OiJcdTA2ZjYiLDc6Ilx1MDZm''@;'; put 'put ''NyIsODoiXHUwNmY4Iiw5OiJcdTA2ZjkiLDA6Ilx1MDZmMCJ9LGc9eyJcdTA2ZjEiOiIxIiwiXHUwNmYyIjoiMiIsIlx1MDZmMyI6IjMiLCJcdTA2ZjQiOiI0IiwiXHUwNmY1IjoiNSIsIlx1MDZmNiI6IjYiLCJcdTA2ZjciOiI3IiwiXHUwNmY4IjoiOCIsIlx1MDZmOSI6IjkiLCJcdTA2ZjAi''@;'; put 'put ''OiIwIn07SS5kZWZpbmVMb2NhbGUoImZhIix7bW9udGhzOiJcdTA2OThcdTA2MjdcdTA2NDZcdTA2NDhcdTA2Y2NcdTA2NDdfXHUwNjQxXHUwNjQ4XHUwNjMxXHUwNmNjXHUwNjQ3X1x1MDY0NVx1MDYyN1x1MDYzMVx1MDYzM19cdTA2MjJcdTA2NDhcdTA2MzFcdTA2Y2NcdTA2NDRfXHUwNjQ1''@;'; put 'put ''XHUwNjQ3X1x1MDY5OFx1MDY0OFx1MDYyNlx1MDY0Nl9cdTA2OThcdTA2NDhcdTA2MjZcdTA2Y2NcdTA2NDdfXHUwNjI3XHUwNjQ4XHUwNjJhX1x1MDYzM1x1MDY3ZVx1MDYyYVx1MDYyN1x1MDY0NVx1MDYyOFx1MDYzMV9cdTA2MjdcdTA2YTlcdTA2MmFcdTA2MjhcdTA2MzFfXHUwNjQ2XHUw''@;'; put 'put ''NjQ4XHUwNjI3XHUwNjQ1XHUwNjI4XHUwNjMxX1x1MDYyZlx1MDYzM1x1MDYyN1x1MDY0NVx1MDYyOFx1MDYzMSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwNjk4XHUwNjI3XHUwNjQ2XHUwNjQ4XHUwNmNjXHUwNjQ3X1x1MDY0MVx1MDY0OFx1MDYzMVx1MDZjY1x1MDY0N19cdTA2NDVc''@;'; put 'put ''dTA2MjdcdTA2MzFcdTA2MzNfXHUwNjIyXHUwNjQ4XHUwNjMxXHUwNmNjXHUwNjQ0X1x1MDY0NVx1MDY0N19cdTA2OThcdTA2NDhcdTA2MjZcdTA2NDZfXHUwNjk4XHUwNjQ4XHUwNjI2XHUwNmNjXHUwNjQ3X1x1MDYyN1x1MDY0OFx1MDYyYV9cdTA2MzNcdTA2N2VcdTA2MmFcdTA2MjdcdTA2''@;'; put 'put ''NDVcdTA2MjhcdTA2MzFfXHUwNjI3XHUwNmE5XHUwNjJhXHUwNjI4XHUwNjMxX1x1MDY0Nlx1MDY0OFx1MDYyN1x1MDY0NVx1MDYyOFx1MDYzMV9cdTA2MmZcdTA2MzNcdTA2MjdcdTA2NDVcdTA2MjhcdTA2MzEiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MDZjY1x1MDZhOVx1MjAwY1x1MDYz''@;'; put 'put ''NFx1MDY0Nlx1MDYyOFx1MDY0N19cdTA2MmZcdTA2NDhcdTA2MzRcdTA2NDZcdTA2MjhcdTA2NDdfXHUwNjMzXHUwNjQ3XHUyMDBjXHUwNjM0XHUwNjQ2XHUwNjI4XHUwNjQ3X1x1MDY4Nlx1MDY0N1x1MDYyN1x1MDYzMVx1MDYzNFx1MDY0Nlx1MDYyOFx1MDY0N19cdTA2N2VcdTA2NDZcdTA2''@;'; put 'put ''MmNcdTIwMGNcdTA2MzRcdTA2NDZcdTA2MjhcdTA2NDdfXHUwNjJjXHUwNjQ1XHUwNjM5XHUwNjQ3X1x1MDYzNFx1MDY0Nlx1MDYyOFx1MDY0NyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA2Y2NcdTA2YTlcdTIwMGNcdTA2MzRcdTA2NDZcdTA2MjhcdTA2NDdfXHUwNjJmXHUwNjQ4''@;'; put 'put ''XHUwNjM0XHUwNjQ2XHUwNjI4XHUwNjQ3X1x1MDYzM1x1MDY0N1x1MjAwY1x1MDYzNFx1MDY0Nlx1MDYyOFx1MDY0N19cdTA2ODZcdTA2NDdcdTA2MjdcdTA2MzFcdTA2MzRcdTA2NDZcdTA2MjhcdTA2NDdfXHUwNjdlXHUwNjQ2XHUwNjJjXHUyMDBjXHUwNjM0XHUwNjQ2XHUwNjI4XHUwNjQ3''@;'; put 'put ''X1x1MDYyY1x1MDY0NVx1MDYzOVx1MDY0N19cdTA2MzRcdTA2NDZcdTA2MjhcdTA2NDciLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDZjY19cdTA2MmZfXHUwNjMzX1x1MDY4Nl9cdTA2N2VfXHUwNjJjX1x1MDYzNCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0Rh''@;'; put 'put ''dGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LG1lcmlkaWVtUGFyc2U6L1x1MDY0Mlx1MDYyOFx1MDY0NCBcdTA2Mjdc''@;'; put 'put ''dTA2MzIgXHUwNjM4XHUwNjQ3XHUwNjMxfFx1MDYyOFx1MDYzOVx1MDYyZiBcdTA2MjdcdTA2MzIgXHUwNjM4XHUwNjQ3XHUwNjMxLyxpc1BNOmZ1bmN0aW9uKHcpe3JldHVybi9cdTA2MjhcdTA2MzlcdTA2MmYgXHUwNjI3XHUwNjMyIFx1MDYzOFx1MDY0N1x1MDYzMS8udGVzdCh3KX0sbWVy''@;'; put 'put ''aWRpZW06ZnVuY3Rpb24odyxQLEYpe3JldHVybiB3PDEyPyJcdTA2NDJcdTA2MjhcdTA2NDQgXHUwNjI3XHUwNjMyIFx1MDYzOFx1MDY0N1x1MDYzMSI6Ilx1MDYyOFx1MDYzOVx1MDYyZiBcdTA2MjdcdTA2MzIgXHUwNjM4XHUwNjQ3XHUwNjMxIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA2''@;'; put 'put ''MjdcdTA2NDVcdTA2MzFcdTA2NDhcdTA2MzIgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjJhXSBMVCIsbmV4dERheToiW1x1MDY0MVx1MDYzMVx1MDYyZlx1MDYyNyBcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MmFdIExUIixuZXh0V2VlazoiZGRkZCBbXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjJhXSBM''@;'; put 'put ''VCIsbGFzdERheToiW1x1MDYyZlx1MDZjY1x1MDYzMVx1MDY0OFx1MDYzMiBcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MmFdIExUIixsYXN0V2VlazoiZGRkZCBbXHUwNjdlXHUwNmNjXHUwNjM0XSBbXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjJhXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRp''@;'; put 'put ''bWU6e2Z1dHVyZToiXHUwNjJmXHUwNjMxICVzIixwYXN0OiIlcyBcdTA2N2VcdTA2Y2NcdTA2MzQiLHM6Ilx1MDY4Nlx1MDY0Nlx1MDYyZiBcdTA2MmJcdTA2MjdcdTA2NDZcdTA2Y2NcdTA2NDciLHNzOiIlZCBcdTA2MmJcdTA2MjdcdTA2NDZcdTA2Y2NcdTA2NDciLG06Ilx1MDZjY1x1MDZh''@;'; put 'put ''OSBcdTA2MmZcdTA2NDJcdTA2Y2NcdTA2NDJcdTA2NDciLG1tOiIlZCBcdTA2MmZcdTA2NDJcdTA2Y2NcdTA2NDJcdTA2NDciLGg6Ilx1MDZjY1x1MDZhOSBcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MmEiLGhoOiIlZCBcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MmEiLGQ6Ilx1MDZjY1x1MDZhOSBc''@;'; put 'put ''dTA2MzFcdTA2NDhcdTA2MzIiLGRkOiIlZCBcdTA2MzFcdTA2NDhcdTA2MzIiLE06Ilx1MDZjY1x1MDZhOSBcdTA2NDVcdTA2MjdcdTA2NDciLE1NOiIlZCBcdTA2NDVcdTA2MjdcdTA2NDciLHk6Ilx1MDZjY1x1MDZhOSBcdTA2MzNcdTA2MjdcdTA2NDQiLHl5OiIlZCBcdTA2MzNcdTA2Mjdc''@;'; put 'put ''dTA2NDQifSxwcmVwYXJzZTpmdW5jdGlvbih3KXtyZXR1cm4gdy5yZXBsYWNlKC9bXHUwNmYwLVx1MDZmOV0vZyxmdW5jdGlvbihQKXtyZXR1cm4gZ1tQXX0pLnJlcGxhY2UoL1x1MDYwYy9nLCIsIil9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24odyl7cmV0dXJuIHcucmVwbGFjZSgvXGQvZyxmdW5j''@;'; put 'put ''dGlvbihQKXtyZXR1cm4gX1tQXX0pLnJlcGxhY2UoLywvZywiXHUwNjBjIil9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cdTA2NDUvLG9yZGluYWw6IiVkXHUwNjQ1Iix3ZWVrOntkb3c6Nixkb3k6MTJ9fSl9KHkoOTc1ODYpKX0sMzM5NTg6ZnVuY3Rpb24odWUsWCx5KXshZnVu''@;'; put 'put ''Y3Rpb24oSSl7InVzZSBzdHJpY3QiO3ZhciBfPSJub2xsYSB5a3NpIGtha3NpIGtvbG1lIG5lbGpceGU0IHZpaXNpIGt1dXNpIHNlaXRzZW1ceGU0biBrYWhkZWtzYW4geWhkZWtzXHhlNG4iLnNwbGl0KCIgIiksZz1bIm5vbGxhIiwieWhkZW4iLCJrYWhkZW4iLCJrb2xtZW4iLCJuZWxqXHhl''@;'; put 'put ''NG4iLCJ2aWlkZW4iLCJrdXVkZW4iLF9bN10sX1s4XSxfWzldXTtmdW5jdGlvbiBCKEYsTyx6LE4pe3ZhciBMPSIiO3N3aXRjaCh6KXtjYXNlInMiOnJldHVybiBOPyJtdXV0YW1hbiBzZWt1bm5pbiI6Im11dXRhbWEgc2VrdW50aSI7Y2FzZSJzcyI6TD1OPyJzZWt1bm5pbiI6InNla3VudGlh''@;'; put 'put ''IjticmVhaztjYXNlIm0iOnJldHVybiBOPyJtaW51dXRpbiI6Im1pbnV1dHRpIjtjYXNlIm1tIjpMPU4/Im1pbnV1dGluIjoibWludXV0dGlhIjticmVhaztjYXNlImgiOnJldHVybiBOPyJ0dW5uaW4iOiJ0dW50aSI7Y2FzZSJoaCI6TD1OPyJ0dW5uaW4iOiJ0dW50aWEiO2JyZWFrO2Nhc2Ui''@;'; put 'put ''ZCI6cmV0dXJuIE4/InBceGU0aXZceGU0biI6InBceGU0aXZceGU0IjtjYXNlImRkIjpMPU4/InBceGU0aXZceGU0biI6InBceGU0aXZceGU0XHhlNCI7YnJlYWs7Y2FzZSJNIjpyZXR1cm4gTj8ia3V1a2F1ZGVuIjoia3V1a2F1c2kiO2Nhc2UiTU0iOkw9Tj8ia3V1a2F1ZGVuIjoia3V1a2F1''@;'; put 'put ''dHRhIjticmVhaztjYXNlInkiOnJldHVybiBOPyJ2dW9kZW4iOiJ2dW9zaSI7Y2FzZSJ5eSI6TD1OPyJ2dW9kZW4iOiJ2dW90dGEifXJldHVybiBmdW5jdGlvbiB3KEYsTyl7cmV0dXJuIEY8MTA/Tz9nW0ZdOl9bRl06Rn0oRixOKSsiICIrTH1JLmRlZmluZUxvY2FsZSgiZmkiLHttb250aHM6''@;'; put 'put ''InRhbW1pa3V1X2hlbG1pa3V1X21hYWxpc2t1dV9odWh0aWt1dV90b3Vrb2t1dV9rZXNceGU0a3V1X2hlaW5ceGU0a3V1X2Vsb2t1dV9zeXlza3V1X2xva2FrdXVfbWFycmFza3V1X2pvdWx1a3V1Ii5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJ0YW1taV9oZWxtaV9tYWFsaXNfaHVodGlfdG91''@;'; put 'put ''a29fa2VzXHhlNF9oZWluXHhlNF9lbG9fc3l5c19sb2thX21hcnJhc19qb3VsdSIuc3BsaXQoIl8iKSx3ZWVrZGF5czoic3VubnVudGFpX21hYW5hbnRhaV90aWlzdGFpX2tlc2tpdmlpa2tvX3RvcnN0YWlfcGVyamFudGFpX2xhdWFudGFpIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6InN1''@;'; put 'put ''X21hX3RpX2tlX3RvX3BlX2xhIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJzdV9tYV90aV9rZV90b19wZV9sYSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhILm1tIixMVFM6IkhILm1tLnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRG8gTU1NTVt0YV0gWVlZWSIsTExMOiJEbyBN''@;'; put 'put ''TU1NW3RhXSBZWVlZLCBba2xvXSBISC5tbSIsTExMTDoiZGRkZCwgRG8gTU1NTVt0YV0gWVlZWSwgW2tsb10gSEgubW0iLGw6IkQuTS5ZWVlZIixsbDoiRG8gTU1NIFlZWVkiLGxsbDoiRG8gTU1NIFlZWVksIFtrbG9dIEhILm1tIixsbGxsOiJkZGQsIERvIE1NTSBZWVlZLCBba2xvXSBISC5t''@;'; put 'put ''bSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbdFx4ZTRuXHhlNFx4ZTRuXSBba2xvXSBMVCIsbmV4dERheToiW2h1b21lbm5hXSBba2xvXSBMVCIsbmV4dFdlZWs6ImRkZGQgW2tsb10gTFQiLGxhc3REYXk6IltlaWxlbl0gW2tsb10gTFQiLGxhc3RXZWVrOiJbdmlpbWVdIGRkZGRbbmFdIFtrbG9d''@;'; put 'put ''IExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBwXHhlNFx4ZTRzdFx4ZTQiLHBhc3Q6IiVzIHNpdHRlbiIsczpCLHNzOkIsbTpCLG1tOkIsaDpCLGhoOkIsZDpCLGRkOkIsTTpCLE1NOkIseTpCLHl5OkJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1c''@;'; put 'put ''Li8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oeSg5NzU4NikpfSw0NjcyMDpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoImZpbCIse21vbnRoczoiRW5lcm9fUGVicmVyb19NYXJzb19BYnJpbF9NYXlvX0h1bnlv''@;'; put 'put ''X0h1bHlvX0Fnb3N0b19TZXR5ZW1icmVfT2t0dWJyZV9Ob2J5ZW1icmVfRGlzeWVtYnJlIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJFbmVfUGViX01hcl9BYnJfTWF5X0h1bl9IdWxfQWdvX1NldF9Pa3RfTm9iX0RpcyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiTGluZ2dvX0x1bmVzX01hcnRl''@;'; put 'put ''c19NaXllcmt1bGVzX0h1d2ViZXNfQml5ZXJuZXNfU2FiYWRvIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ikxpbl9MdW5fTWFyX01peV9IdXdfQml5X1NhYiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiTGlfTHVfTWFfTWlfSHVfQmlfU2FiIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0''@;'; put 'put ''OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6Ik1NL0QvWVlZWSIsTEw6Ik1NTU0gRCwgWVlZWSIsTExMOiJNTU1NIEQsIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIE1NTU0gREQsIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiTFQgW25nYXlvbmcgYXJhd10iLG5leHREYXk6''@;'; put 'put ''IltCdWthcyBuZ10gTFQiLG5leHRXZWVrOiJMVCBbc2Egc3VzdW5vZCBuYV0gZGRkZCIsbGFzdERheToiTFQgW2thaGFwb25dIixsYXN0V2VlazoiTFQgW25vb25nIG5ha2FyYWFuZ10gZGRkZCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToic2EgbG9vYiBuZyAlcyIscGFz''@;'; put 'put ''dDoiJXMgYW5nIG5ha2FsaXBhcyIsczoiaWxhbmcgc2VndW5kbyIsc3M6IiVkIHNlZ3VuZG8iLG06ImlzYW5nIG1pbnV0byIsbW06IiVkIG1pbnV0byIsaDoiaXNhbmcgb3JhcyIsaGg6IiVkIG9yYXMiLGQ6ImlzYW5nIGFyYXciLGRkOiIlZCBhcmF3IixNOiJpc2FuZyBidXdhbiIsTU06IiVk''@;'; put 'put ''IGJ1d2FuIix5OiJpc2FuZyB0YW9uIix5eToiJWQgdGFvbiJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0vLG9yZGluYWw6ZnVuY3Rpb24oZyl7cmV0dXJuIGd9LHdlZWs6e2RvdzoxLGRveTo0fX0pfSh5KDk3NTg2KSl9LDk4MzUyOmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9u''@;'; put 'put ''KEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgiZm8iLHttb250aHM6ImphbnVhcl9mZWJydWFyX21hcnNfYXByXHhlZGxfbWFpX2p1bmlfanVsaV9hdWd1c3Rfc2VwdGVtYmVyX29rdG9iZXJfbm92ZW1iZXJfZGVzZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Imphbl9mZWJf''@;'; put 'put ''bWFyX2Fwcl9tYWlfanVuX2p1bF9hdWdfc2VwX29rdF9ub3ZfZGVzIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJzdW5udWRhZ3VyX21ceGUxbmFkYWd1cl90XHhmZHNkYWd1cl9taWt1ZGFndXJfaFx4ZjNzZGFndXJfZnJceGVkZ2dqYWRhZ3VyX2xleWdhcmRhZ3VyIi5zcGxpdCgiXyIpLHdlZWtk''@;'; put 'put ''YXlzU2hvcnQ6InN1bl9tXHhlMW5fdFx4ZmRzX21pa19oXHhmM3NfZnJceGVkX2xleSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoic3VfbVx4ZTFfdFx4ZmRfbWlfaFx4ZjNfZnJfbGUiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQv''@;'; put 'put ''TU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQuIE1NTU0sIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x4Y2QgZGFnIGtsLl0gTFQiLG5leHREYXk6IltceGNkIG1vcmdpbiBrbC5dIExUIixuZXh0V2VlazoiZGRk''@;'; put 'put ''ZCBba2wuXSBMVCIsbGFzdERheToiW1x4Y2QgZ2pceGUxciBrbC5dIExUIixsYXN0V2VlazoiW3NceGVkXHhmMHN0dV0gZGRkZCBba2xdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJ1bSAlcyIscGFzdDoiJXMgc1x4ZWRceGYwYW5pIixzOiJmXHhlMSBzZWt1bmQi''@;'; put 'put ''LHNzOiIlZCBzZWt1bmRpciIsbToiZWluIG1pbnV0dHVyIixtbToiJWQgbWludXR0aXIiLGg6ImVpbiB0XHhlZG1pIixoaDoiJWQgdFx4ZWRtYXIiLGQ6ImVpbiBkYWd1ciIsZGQ6IiVkIGRhZ2FyIixNOiJlaW4gbVx4ZTFuYVx4ZjB1ciIsTU06IiVkIG1ceGUxbmFceGYwaXIiLHk6ImVpdHQg''@;'; put 'put ''XHhlMXIiLHl5OiIlZCBceGUxciJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oeSg5NzU4NikpfSw0MjA5NjpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2Nh''@;'; put 'put ''bGUoImZyLWNhIix7bW9udGhzOiJqYW52aWVyX2ZceGU5dnJpZXJfbWFyc19hdnJpbF9tYWlfanVpbl9qdWlsbGV0X2FvXHhmYnRfc2VwdGVtYnJlX29jdG9icmVfbm92ZW1icmVfZFx4ZTljZW1icmUiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6ImphbnYuX2ZceGU5dnIuX21hcnNfYXZyLl9t''@;'; put 'put ''YWlfanVpbl9qdWlsLl9hb1x4ZmJ0X3NlcHQuX29jdC5fbm92Ll9kXHhlOWMuIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6ImRpbWFuY2hlX2x1bmRpX21hcmRpX21lcmNyZWRpX2pldWRpX3ZlbmRyZWRpX3NhbWVkaSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0''@;'; put 'put ''OiJkaW0uX2x1bi5fbWFyLl9tZXIuX2pldS5fdmVuLl9zYW0uIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJkaV9sdV9tYV9tZV9qZV92ZV9zYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiWVlZ''@;'; put 'put ''WS1NTS1ERCIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltBdWpvdXJkXHUyMDE5aHVpIFx4ZTBdIExUIixuZXh0RGF5OiJbRGVtYWluIFx4ZTBdIExUIixuZXh0V2Vlazoi''@;'; put 'put ''ZGRkZCBbXHhlMF0gTFQiLGxhc3REYXk6IltIaWVyIFx4ZTBdIExUIixsYXN0V2VlazoiZGRkZCBbZGVybmllciBceGUwXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiZGFucyAlcyIscGFzdDoiaWwgeSBhICVzIixzOiJxdWVscXVlcyBzZWNvbmRlcyIsc3M6IiVk''@;'; put 'put ''IHNlY29uZGVzIixtOiJ1bmUgbWludXRlIixtbToiJWQgbWludXRlcyIsaDoidW5lIGhldXJlIixoaDoiJWQgaGV1cmVzIixkOiJ1biBqb3VyIixkZDoiJWQgam91cnMiLE06InVuIG1vaXMiLE1NOiIlZCBtb2lzIix5OiJ1biBhbiIseXk6IiVkIGFucyJ9LGRheU9mTW9udGhPcmRpbmFsUGFy''@;'; put 'put ''c2U6L1xkezEsMn0oZXJ8ZSkvLG9yZGluYWw6ZnVuY3Rpb24oZyxCKXtzd2l0Y2goQil7ZGVmYXVsdDpjYXNlIk0iOmNhc2UiUSI6Y2FzZSJEIjpjYXNlIkRERCI6Y2FzZSJkIjpyZXR1cm4gZysoMT09PWc/ImVyIjoiZSIpO2Nhc2UidyI6Y2FzZSJXIjpyZXR1cm4gZysoMT09PWc/InJlIjoi''@;'; put 'put ''ZSIpfX19KX0oeSg5NzU4NikpfSw5NTc1OTpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoImZyLWNoIix7bW9udGhzOiJqYW52aWVyX2ZceGU5dnJpZXJfbWFyc19hdnJpbF9tYWlfanVpbl9qdWlsbGV0X2FvXHhmYnRfc2VwdGVtYnJl''@;'; put 'put ''X29jdG9icmVfbm92ZW1icmVfZFx4ZTljZW1icmUiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6ImphbnYuX2ZceGU5dnIuX21hcnNfYXZyLl9tYWlfanVpbl9qdWlsLl9hb1x4ZmJ0X3NlcHQuX29jdC5fbm92Ll9kXHhlOWMuIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2Rh''@;'; put 'put ''eXM6ImRpbWFuY2hlX2x1bmRpX21hcmRpX21lcmNyZWRpX2pldWRpX3ZlbmRyZWRpX3NhbWVkaSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJkaW0uX2x1bi5fbWFyLl9tZXIuX2pldS5fdmVuLl9zYW0uIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJkaV9sdV9tYV9tZV9qZV92ZV9zYSIu''@;'; put 'put ''c3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2Fs''@;'; put 'put ''ZW5kYXI6e3NhbWVEYXk6IltBdWpvdXJkXHUyMDE5aHVpIFx4ZTBdIExUIixuZXh0RGF5OiJbRGVtYWluIFx4ZTBdIExUIixuZXh0V2VlazoiZGRkZCBbXHhlMF0gTFQiLGxhc3REYXk6IltIaWVyIFx4ZTBdIExUIixsYXN0V2VlazoiZGRkZCBbZGVybmllciBceGUwXSBMVCIsc2FtZUVsc2U6''@;'; put 'put ''IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiZGFucyAlcyIscGFzdDoiaWwgeSBhICVzIixzOiJxdWVscXVlcyBzZWNvbmRlcyIsc3M6IiVkIHNlY29uZGVzIixtOiJ1bmUgbWludXRlIixtbToiJWQgbWludXRlcyIsaDoidW5lIGhldXJlIixoaDoiJWQgaGV1cmVzIixkOiJ1biBqb3VyIixk''@;'; put 'put ''ZDoiJWQgam91cnMiLE06InVuIG1vaXMiLE1NOiIlZCBtb2lzIix5OiJ1biBhbiIseXk6IiVkIGFucyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oZXJ8ZSkvLG9yZGluYWw6ZnVuY3Rpb24oZyxCKXtzd2l0Y2goQil7ZGVmYXVsdDpjYXNlIk0iOmNhc2UiUSI6Y2FzZSJEIjpj''@;'; put 'put ''YXNlIkRERCI6Y2FzZSJkIjpyZXR1cm4gZysoMT09PWc/ImVyIjoiZSIpO2Nhc2UidyI6Y2FzZSJXIjpyZXR1cm4gZysoMT09PWc/InJlIjoiZSIpfX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KHkoOTc1ODYpKX0sNDA1OTpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmlj''@;'; put 'put ''dCI7dmFyIEI9LyhqYW52XC4/fGZceGU5dnJcLj98bWFyc3xhdnJcLj98bWFpfGp1aW58anVpbFwuP3xhb1x4ZmJ0fHNlcHRcLj98b2N0XC4/fG5vdlwuP3xkXHhlOWNcLj98amFudmllcnxmXHhlOXZyaWVyfG1hcnN8YXZyaWx8bWFpfGp1aW58anVpbGxldHxhb1x4ZmJ0fHNlcHRlbWJyZXxv''@;'; put 'put ''Y3RvYnJlfG5vdmVtYnJlfGRceGU5Y2VtYnJlKS9pLHc9Wy9eamFudi9pLC9eZlx4ZTl2ci9pLC9ebWFycy9pLC9eYXZyL2ksL15tYWkvaSwvXmp1aW4vaSwvXmp1aWwvaSwvXmFvXHhmYnQvaSwvXnNlcHQvaSwvXm9jdC9pLC9ebm92L2ksL15kXHhlOWMvaV07SS5kZWZpbmVMb2NhbGUoImZy''@;'; put 'put ''Iix7bW9udGhzOiJqYW52aWVyX2ZceGU5dnJpZXJfbWFyc19hdnJpbF9tYWlfanVpbl9qdWlsbGV0X2FvXHhmYnRfc2VwdGVtYnJlX29jdG9icmVfbm92ZW1icmVfZFx4ZTljZW1icmUiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6ImphbnYuX2ZceGU5dnIuX21hcnNfYXZyLl9tYWlfanVpbl9q''@;'; put 'put ''dWlsLl9hb1x4ZmJ0X3NlcHQuX29jdC5fbm92Ll9kXHhlOWMuIi5zcGxpdCgiXyIpLG1vbnRoc1JlZ2V4OkIsbW9udGhzU2hvcnRSZWdleDpCLG1vbnRoc1N0cmljdFJlZ2V4Oi9eKGphbnZpZXJ8Zlx4ZTl2cmllcnxtYXJzfGF2cmlsfG1haXxqdWlufGp1aWxsZXR8YW9ceGZidHxzZXB0ZW1i''@;'; put 'put ''cmV8b2N0b2JyZXxub3ZlbWJyZXxkXHhlOWNlbWJyZSkvaSxtb250aHNTaG9ydFN0cmljdFJlZ2V4Oi8oamFudlwuP3xmXHhlOXZyXC4/fG1hcnN8YXZyXC4/fG1haXxqdWlufGp1aWxcLj98YW9ceGZidHxzZXB0XC4/fG9jdFwuP3xub3ZcLj98ZFx4ZTljXC4/KS9pLG1vbnRoc1BhcnNlOncs''@;'; put 'put ''bG9uZ01vbnRoc1BhcnNlOncsc2hvcnRNb250aHNQYXJzZTp3LHdlZWtkYXlzOiJkaW1hbmNoZV9sdW5kaV9tYXJkaV9tZXJjcmVkaV9qZXVkaV92ZW5kcmVkaV9zYW1lZGkiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiZGltLl9sdW4uX21hci5fbWVyLl9qZXUuX3Zlbi5fc2FtLiIuc3Bs''@;'; put 'put ''aXQoIl8iKSx3ZWVrZGF5c01pbjoiZGlfbHVfbWFfbWVfamVfdmVfc2EiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZ''@;'; put 'put ''WSBISDptbSIsTExMTDoiZGRkZCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbQXVqb3VyZFx1MjAxOWh1aSBceGUwXSBMVCIsbmV4dERheToiW0RlbWFpbiBceGUwXSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x4ZTBdIExUIixsYXN0RGF5OiJbSGllciBceGUwXSBMVCIs''@;'; put 'put ''bGFzdFdlZWs6ImRkZGQgW2Rlcm5pZXIgXHhlMF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImRhbnMgJXMiLHBhc3Q6ImlsIHkgYSAlcyIsczoicXVlbHF1ZXMgc2Vjb25kZXMiLHNzOiIlZCBzZWNvbmRlcyIsbToidW5lIG1pbnV0ZSIsbW06IiVkIG1pbnV0ZXMi''@;'; put 'put ''LGg6InVuZSBoZXVyZSIsaGg6IiVkIGhldXJlcyIsZDoidW4gam91ciIsZGQ6IiVkIGpvdXJzIix3OiJ1bmUgc2VtYWluZSIsd3c6IiVkIHNlbWFpbmVzIixNOiJ1biBtb2lzIixNTToiJWQgbW9pcyIseToidW4gYW4iLHl5OiIlZCBhbnMifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsx''@;'; put 'put ''LDJ9KGVyfCkvLG9yZGluYWw6ZnVuY3Rpb24oRixPKXtzd2l0Y2goTyl7Y2FzZSJEIjpyZXR1cm4gRisoMT09PUY/ImVyIjoiIik7ZGVmYXVsdDpjYXNlIk0iOmNhc2UiUSI6Y2FzZSJEREQiOmNhc2UiZCI6cmV0dXJuIEYrKDE9PT1GPyJlciI6ImUiKTtjYXNlInciOmNhc2UiVyI6cmV0dXJu''@;'; put 'put ''IEYrKDE9PT1GPyJyZSI6ImUiKX19LHdlZWs6e2RvdzoxLGRveTo0fX0pfSh5KDk3NTg2KSl9LDE1OTU4OmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz0iamFuLl9mZWIuX21ydC5fYXByLl9tYWlfanVuLl9qdWwuX2F1Zy5fc2VwLl9va3QuX25vdi5f''@;'; put 'put ''ZGVzLiIuc3BsaXQoIl8iKSxnPSJqYW5fZmViX21ydF9hcHJfbWFpX2p1bl9qdWxfYXVnX3NlcF9va3Rfbm92X2RlcyIuc3BsaXQoIl8iKTtJLmRlZmluZUxvY2FsZSgiZnkiLHttb250aHM6Imphbm5ld2FyaXNfZmVicmV3YXJpc19tYWFydF9hcHJpbF9tYWFpZV9qdW55X2p1bHlfYXVndXN0''@;'; put 'put ''dXNfc2VwdGltYmVyX29rdG9iZXJfbm92aW1iZXJfZGVzaW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6ZnVuY3Rpb24odyxQKXtyZXR1cm4gdz8vLU1NTS0vLnRlc3QoUCk/Z1t3Lm1vbnRoKCldOl9bdy5tb250aCgpXTpffSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJzbmVp''@;'; put 'put ''bl9tb2FuZGVpX3RpaXNkZWlfd29hbnNkZWlfdG9uZ2Vyc2RlaV9mcmVlZF9zbmVvbiIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJzaS5fbW8uX3RpLl93by5fdG8uX2ZyLl9zby4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlNpX01vX1RpX1dvX1RvX0ZyX1NvIi5zcGxpdCgiXyIpLHdl''@;'; put 'put ''ZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC1NTS1ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURh''@;'; put 'put ''eToiW2hqb2VkIG9tXSBMVCIsbmV4dERheToiW21vYXJuIG9tXSBMVCIsbmV4dFdlZWs6ImRkZGQgW29tXSBMVCIsbGFzdERheToiW2p1c3RlciBvbV0gTFQiLGxhc3RXZWVrOiJbXHhmNGZyXHhmYm5lXSBkZGRkIFtvbV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6''@;'; put 'put ''Im9lciAlcyIscGFzdDoiJXMgbHluIixzOiJpbiBwZWFyIHNla29uZGVuIixzczoiJWQgc2Vrb25kZW4iLG06ImllbiBtaW5ceGZhdCIsbW06IiVkIG1pbnV0ZW4iLGg6ImllbiBvZXJlIixoaDoiJWQgb2VyZW4iLGQ6ImllbiBkZWkiLGRkOiIlZCBkYWdlbiIsTToiaWVuIG1vYW5uZSIsTU06''@;'; put 'put ''IiVkIG1vYW5uZW4iLHk6ImllbiBqaWVyIix5eToiJWQgamllcnJlbiJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oc3RlfGRlKS8sb3JkaW5hbDpmdW5jdGlvbih3KXtyZXR1cm4gdysoMT09PXd8fDg9PT13fHx3Pj0yMD8ic3RlIjoiZGUiKX0sd2Vlazp7ZG93OjEsZG95OjR9''@;'; put 'put ''fSl9KHkoOTc1ODYpKX0sOTQxNDM6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJnYSIse21vbnRoczpbIkVhblx4ZTFpciIsIkZlYWJocmEiLCJNXHhlMXJ0YSIsIkFpYnJlXHhlMW4iLCJCZWFsdGFpbmUiLCJNZWl0aGVhbWgiLCJJ''@;'; put 'put ''XHhmYWlsIiwiTFx4ZmFuYXNhIiwiTWVceGUxbiBGXHhmM21oYWlyIiwiRGVpcmVhZGggRlx4ZjNtaGFpciIsIlNhbWhhaW4iLCJOb2xsYWlnIl0sbW9udGhzU2hvcnQ6WyJFYW4iLCJGZWFiaCIsIk1ceGUxcnQiLCJBaWIiLCJCZWFsIiwiTWVpdGgiLCJJXHhmYWlsIiwiTFx4ZmFuIiwiTS5G''@;'; put 'put ''LiIsIkQuRi4iLCJTYW1oIiwiTm9sbCJdLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6WyJEXHhlOSBEb21obmFpZ2giLCJEXHhlOSBMdWFpbiIsIkRceGU5IE1ceGUxaXJ0IiwiRFx4ZTkgQ1x4ZTlhZGFvaW4iLCJEXHhlOWFyZGFvaW4iLCJEXHhlOSBoQW9pbmUiLCJEXHhlOSBTYXRo''@;'; put 'put ''YWlybiJdLHdlZWtkYXlzU2hvcnQ6WyJEb21oIiwiTHVhbiIsIk1ceGUxaXJ0IiwiQ1x4ZTlhZCIsIkRceGU5YXIiLCJBb2luZSIsIlNhdGgiXSx3ZWVrZGF5c01pbjpbIkRvIiwiTHUiLCJNXHhlMSIsIkNceGU5IiwiRFx4ZTkiLCJBIiwiU2EiXSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1t''@;'; put 'put ''IixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltJbm5pdSBhZ10gTFQiLG5leHREYXk6IltBbVx4ZTFyYWNoIGFnXSBM''@;'; put 'put ''VCIsbmV4dFdlZWs6ImRkZGQgW2FnXSBMVCIsbGFzdERheToiW0lublx4ZTkgYWddIExUIixsYXN0V2VlazoiZGRkZCBbc2VvIGNhaXRlXSBbYWddIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJpICVzIixwYXN0OiIlcyBceGYzIHNoaW4iLHM6ImNceGZhcGxhIHNv''@;'; put 'put ''aWNpbmQiLHNzOiIlZCBzb2ljaW5kIixtOiJuXHhmM2ltXHhlOWFkIixtbToiJWQgblx4ZjNpbVx4ZTlhZCIsaDoidWFpciBhbiBjaGxvaWciLGhoOiIlZCB1YWlyIGFuIGNobG9pZyIsZDoibFx4ZTEiLGRkOiIlZCBsXHhlMSIsTToibVx4ZWQiLE1NOiIlZCBtXHhlZG9ubmEiLHk6ImJsaWFp''@;'; put 'put ''biIseXk6IiVkIGJsaWFpbiJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oZHxuYXxtaCkvLG9yZGluYWw6ZnVuY3Rpb24oTyl7cmV0dXJuIE8rKDE9PT1PPyJkIjpPJTEwPT0yPyJuYSI6Im1oIil9LHdlZWs6e2RvdzoxLGRveTo0fX0pfSh5KDk3NTg2KSl9LDY3MDI4OmZ1bmN0''@;'; put 'put ''aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgiZ2QiLHttb250aHM6WyJBbSBGYW9pbGxlYWNoIiwiQW4gR2VhcnJhbiIsIkFtIE1ceGUwcnQiLCJBbiBHaWJsZWFuIiwiQW4gQ1x4ZThpdGVhbiIsIkFuIHQtXHhkMmdtaGlvcyIsIkFuIHQtSXVj''@;'; put 'put ''aGFyIiwiQW4gTFx4ZjluYXN0YWwiLCJBbiB0LVN1bHRhaW4iLCJBbiBEXHhlMG1oYWlyIiwiQW4gdC1TYW1oYWluIiwiQW4gRFx4ZjliaGxhY2hkIl0sbW9udGhzU2hvcnQ6WyJGYW9pIiwiR2VhciIsIk1ceGUwcnQiLCJHaWJsIiwiQ1x4ZThpdCIsIlx4ZDJnbWgiLCJJdWNoIiwiTFx4Zjlu''@;'; put 'put ''IiwiU3VsdCIsIkRceGUwbWgiLCJTYW1oIiwiRFx4ZjliaCJdLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6WyJEaWRceGYybWhuYWljaCIsIkRpbHVhaW4iLCJEaW1ceGUwaXJ0IiwiRGljaWFkYWluIiwiRGlhcmRhb2luIiwiRGloYW9pbmUiLCJEaXNhdGhhaXJuZSJdLHdlZWtkYXlz''@;'; put 'put ''U2hvcnQ6WyJEaWQiLCJEaWwiLCJEaW0iLCJEaWMiLCJEaWEiLCJEaWgiLCJEaXMiXSx3ZWVrZGF5c01pbjpbIkRceGYyIiwiTHUiLCJNXHhlMCIsIkNpIiwiQXIiLCJIYSIsIlNhIl0sbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6''@;'; put 'put ''IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbQW4tZGl1Z2ggYWlnXSBMVCIsbmV4dERheToiW0EtbVx4ZTBpcmVhY2ggYWlnXSBMVCIsbmV4dFdlZWs6ImRkZGQgW2FpZ10gTFQi''@;'; put 'put ''LGxhc3REYXk6IltBbi1kXHhlOCBhaWddIExUIixsYXN0V2VlazoiZGRkZCBbc2VvIGNoYWlkaF0gW2FpZ10gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImFubiBhbiAlcyIscGFzdDoiYmhvIGNoaW9ubiAlcyIsczoiYmVhZ2FuIGRpb2dhbiIsc3M6IiVkIGRpb2dh''@;'; put 'put ''biIsbToibWlvbmFpZCIsbW06IiVkIG1pb25haWRlYW4iLGg6InVhaXIiLGhoOiIlZCB1YWlyZWFuIixkOiJsYXRoYSIsZGQ6IiVkIGxhdGhhIixNOiJtXHhlY29zIixNTToiJWQgbVx4ZWNvc2FuIix5OiJibGlhZGhuYSIseXk6IiVkIGJsaWFkaG5hIn0sZGF5T2ZNb250aE9yZGluYWxQYXJz''@;'; put 'put ''ZTovXGR7MSwyfShkfG5hfG1oKS8sb3JkaW5hbDpmdW5jdGlvbihPKXtyZXR1cm4gTysoMT09PU8/ImQiOk8lMTA9PTI/Im5hIjoibWgiKX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KHkoOTc1ODYpKX0sODA0Mjg6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0ku''@;'; put 'put ''ZGVmaW5lTG9jYWxlKCJnbCIse21vbnRoczoieGFuZWlyb19mZWJyZWlyb19tYXJ6b19hYnJpbF9tYWlvX3h1XHhmMW9feHVsbG9fYWdvc3RvX3NldGVtYnJvX291dHVicm9fbm92ZW1icm9fZGVjZW1icm8iLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Inhhbi5fZmViLl9tYXIuX2Fici5fbWFp''@;'; put 'put ''Ll94dVx4ZjEuX3h1bC5fYWdvLl9zZXQuX291dC5fbm92Ll9kZWMuIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6ImRvbWluZ29fbHVuc19tYXJ0ZXNfbVx4ZTlyY29yZXNfeG92ZXNfdmVucmVzX3NceGUxYmFkbyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJk''@;'; put 'put ''b20uX2x1bi5fbWFyLl9tXHhlOXIuX3hvdi5fdmVuLl9zXHhlMWIuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJkb19sdV9tYV9tXHhlOV94b192ZV9zXHhlMSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJIOm1tIixMVFM6Ikg6bW06c3Mi''@;'; put 'put ''LEw6IkREL01NL1lZWVkiLExMOiJEIFtkZV0gTU1NTSBbZGVdIFlZWVkiLExMTDoiRCBbZGVdIE1NTU0gW2RlXSBZWVlZIEg6bW0iLExMTEw6ImRkZGQsIEQgW2RlXSBNTU1NIFtkZV0gWVlZWSBIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW2hveGUgIisoMSE9''@;'; put 'put ''PXRoaXMuaG91cnMoKT8iXHhlMXMiOiJceGUxIikrIl0gTFQifSxuZXh0RGF5OmZ1bmN0aW9uKCl7cmV0dXJuIlttYVx4ZjFceGUxICIrKDEhPT10aGlzLmhvdXJzKCk/Ilx4ZTFzIjoiXHhlMSIpKyJdIExUIn0sbmV4dFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4iZGRkZCBbIisoMSE9PXRoaXMu''@;'; put 'put ''aG91cnMoKT8iXHhlMXMiOiJhIikrIl0gTFQifSxsYXN0RGF5OmZ1bmN0aW9uKCl7cmV0dXJuIltvbnRlICIrKDEhPT10aGlzLmhvdXJzKCk/Ilx4ZTEiOiJhIikrIl0gTFQifSxsYXN0V2VlazpmdW5jdGlvbigpe3JldHVybiJbb10gZGRkZCBbcGFzYWRvICIrKDEhPT10aGlzLmhvdXJzKCk/''@;'; put 'put ''Ilx4ZTFzIjoiYSIpKyJdIExUIn0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpmdW5jdGlvbihnKXtyZXR1cm4gMD09PWcuaW5kZXhPZigidW4iKT8ibiIrZzoiZW4gIitnfSxwYXN0OiJoYWkgJXMiLHM6InVucyBzZWd1bmRvcyIsc3M6IiVkIHNlZ3VuZG9zIixtOiJ1biBt''@;'; put 'put ''aW51dG8iLG1tOiIlZCBtaW51dG9zIixoOiJ1bmhhIGhvcmEiLGhoOiIlZCBob3JhcyIsZDoidW4gZFx4ZWRhIixkZDoiJWQgZFx4ZWRhcyIsTToidW4gbWVzIixNTToiJWQgbWVzZXMiLHk6InVuIGFubyIseXk6IiVkIGFub3MifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XHhi''@;'; put 'put ''YS8sb3JkaW5hbDoiJWRceGJhIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oeSg5NzU4NikpfSw3Njg2MTpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gXyhCLHcsUCxGKXt2YXIgTz17czpbIlx1MDkyNVx1MDk0Ylx1MDkyMVx1MDkyZlx1MDkzZSBc''@;'; put 'put ''dTA5MzhcdTA5NDVcdTA5MTVcdTA5MDJcdTA5MjFcdTA5M2VcdTA5MDJcdTA5MjhcdTA5NDAiLCJcdTA5MjVcdTA5NGJcdTA5MjFcdTA5NDcgXHUwOTM4XHUwOTQ1XHUwOTE1XHUwOTAyXHUwOTIxIl0sc3M6W0IrIiBcdTA5MzhcdTA5NDVcdTA5MTVcdTA5MDJcdTA5MjFcdTA5M2VcdTA5MDJc''@;'; put 'put ''dTA5MjhcdTA5NDAiLEIrIiBcdTA5MzhcdTA5NDVcdTA5MTVcdTA5MDJcdTA5MjEiXSxtOlsiXHUwOTBmXHUwOTE1XHUwOTNlIFx1MDkyZVx1MDkzZlx1MDkyM1x1MDkxZlx1MDkzZVx1MDkyOCIsIlx1MDkwZlx1MDkxNSBcdTA5MmVcdTA5M2ZcdTA5MjhcdTA5NDJcdTA5MWYiXSxtbTpbQisi''@;'; put 'put ''IFx1MDkyZVx1MDkzZlx1MDkyM1x1MDkxZlx1MDkzZVx1MDkwMlx1MDkyOFx1MDk0MCIsQisiIFx1MDkyZVx1MDkzZlx1MDkyM1x1MDkxZlx1MDkzZVx1MDkwMiJdLGg6WyJcdTA5MGZcdTA5MTVcdTA5M2UgXHUwOTM1XHUwOTMwXHUwOTNlXHUwOTI4IiwiXHUwOTBmXHUwOTE1IFx1MDkzNVx1''@;'; put 'put ''MDkzMCJdLGhoOltCKyIgXHUwOTM1XHUwOTMwXHUwOTNlXHUwOTAyXHUwOTI4XHUwOTQwIixCKyIgXHUwOTM1XHUwOTMwXHUwOTNlXHUwOTAyIl0sZDpbIlx1MDkwZlx1MDkxNVx1MDkzZSBcdTA5MjZcdTA5M2ZcdTA5MzhcdTA5M2VcdTA5MjgiLCJcdTA5MGZcdTA5MTUgXHUwOTI2XHUwOTQw''@;'; put 'put ''XHUwOTM4Il0sZGQ6W0IrIiBcdTA5MjZcdTA5M2ZcdTA5MzhcdTA5M2VcdTA5MDJcdTA5MjhcdTA5NDAiLEIrIiBcdTA5MjZcdTA5NDBcdTA5MzgiXSxNOlsiXHUwOTBmXHUwOTE1XHUwOTNlIFx1MDkyZVx1MDk0ZFx1MDkzOVx1MDkyZlx1MDkyOFx1MDk0ZFx1MDkyZlx1MDkzZVx1MDkyOCIs''@;'; put 'put ''Ilx1MDkwZlx1MDkxNSBcdTA5MmVcdTA5NGRcdTA5MzlcdTA5MmZcdTA5MjhcdTA5NGIiXSxNTTpbQisiIFx1MDkyZVx1MDk0ZFx1MDkzOVx1MDkyZlx1MDkyOFx1MDk0ZFx1MDkyZlx1MDkzZVx1MDkyOFx1MDk0MCIsQisiIFx1MDkyZVx1MDk0ZFx1MDkzOVx1MDkyZlx1MDkyOFx1MDk0NyJd''@;'; put 'put ''LHk6WyJcdTA5MGZcdTA5MTVcdTA5M2UgXHUwOTM1XHUwOTMwXHUwOTRkXHUwOTM4XHUwOTNlXHUwOTI4IiwiXHUwOTBmXHUwOTE1IFx1MDkzNVx1MDkzMFx1MDk0ZFx1MDkzOCJdLHl5OltCKyIgXHUwOTM1XHUwOTMwXHUwOTRkXHUwOTM4XHUwOTNlXHUwOTAyXHUwOTI4XHUwOTQwIixCKyIg''@;'; put 'put ''XHUwOTM1XHUwOTMwXHUwOTRkXHUwOTM4XHUwOTNlXHUwOTAyIl19O3JldHVybiBGP09bUF1bMF06T1tQXVsxXX1JLmRlZmluZUxvY2FsZSgiZ29tLWRldmEiLHttb250aHM6e3N0YW5kYWxvbmU6Ilx1MDkxY1x1MDkzZVx1MDkyOFx1MDk0N1x1MDkzNVx1MDkzZVx1MDkzMFx1MDk0MF9cdTA5''@;'; put 'put ''MmJcdTA5NDdcdTA5MmNcdTA5NGRcdTA5MzBcdTA5NDFcdTA5MzVcdTA5M2VcdTA5MzBcdTA5NDBfXHUwOTJlXHUwOTNlXHUwOTMwXHUwOTRkXHUwOTFhX1x1MDkwZlx1MDkyYVx1MDk0ZFx1MDkzMFx1MDk0MFx1MDkzMl9cdTA5MmVcdTA5NDdfXHUwOTFjXHUwOTQyXHUwOTI4X1x1MDkxY1x1''@;'; put 'put ''MDk0MVx1MDkzMlx1MDkyZl9cdTA5MTFcdTA5MTdcdTA5MzhcdTA5NGRcdTA5MWZfXHUwOTM4XHUwOTJhXHUwOTRkXHUwOTFmXHUwOTQ3XHUwOTAyXHUwOTJjXHUwOTMwX1x1MDkxMVx1MDkxNVx1MDk0ZFx1MDkxZlx1MDk0Ylx1MDkyY1x1MDkzMF9cdTA5MjhcdTA5NGJcdTA5MzVcdTA5NGRc''@;'; put 'put ''dTA5MzlcdTA5NDdcdTA5MDJcdTA5MmNcdTA5MzBfXHUwOTIxXHUwOTNmXHUwOTM4XHUwOTQ3XHUwOTAyXHUwOTJjXHUwOTMwIi5zcGxpdCgiXyIpLGZvcm1hdDoiXHUwOTFjXHUwOTNlXHUwOTI4XHUwOTQ3XHUwOTM1XHUwOTNlXHUwOTMwXHUwOTQwXHUwOTFhXHUwOTRkXHUwOTJmXHUwOTNl''@;'; put 'put ''X1x1MDkyYlx1MDk0N1x1MDkyY1x1MDk0ZFx1MDkzMFx1MDk0MVx1MDkzNVx1MDkzZVx1MDkzMFx1MDk0MFx1MDkxYVx1MDk0ZFx1MDkyZlx1MDkzZV9cdTA5MmVcdTA5M2VcdTA5MzBcdTA5NGRcdTA5MWFcdTA5M2VcdTA5MWFcdTA5NGRcdTA5MmZcdTA5M2VfXHUwOTBmXHUwOTJhXHUwOTRk''@;'; put 'put ''XHUwOTMwXHUwOTQwXHUwOTMyXHUwOTNlXHUwOTFhXHUwOTRkXHUwOTJmXHUwOTNlX1x1MDkyZVx1MDk0N1x1MDkyZlx1MDkzZVx1MDkxYVx1MDk0ZFx1MDkyZlx1MDkzZV9cdTA5MWNcdTA5NDJcdTA5MjhcdTA5M2VcdTA5MWFcdTA5NGRcdTA5MmZcdTA5M2VfXHUwOTFjXHUwOTQxXHUwOTMy''@;'; put 'put ''XHUwOTJmXHUwOTNlXHUwOTFhXHUwOTRkXHUwOTJmXHUwOTNlX1x1MDkxMVx1MDkxN1x1MDkzOFx1MDk0ZFx1MDkxZlx1MDkzZVx1MDkxYVx1MDk0ZFx1MDkyZlx1MDkzZV9cdTA5MzhcdTA5MmFcdTA5NGRcdTA5MWZcdTA5NDdcdTA5MDJcdTA5MmNcdTA5MzBcdTA5M2VcdTA5MWFcdTA5NGRc''@;'; put 'put ''dTA5MmZcdTA5M2VfXHUwOTExXHUwOTE1XHUwOTRkXHUwOTFmXHUwOTRiXHUwOTJjXHUwOTMwXHUwOTNlXHUwOTFhXHUwOTRkXHUwOTJmXHUwOTNlX1x1MDkyOFx1MDk0Ylx1MDkzNVx1MDk0ZFx1MDkzOVx1MDk0N1x1MDkwMlx1MDkyY1x1MDkzMFx1MDkzZVx1MDkxYVx1MDk0ZFx1MDkyZlx1''@;'; put 'put ''MDkzZV9cdTA5MjFcdTA5M2ZcdTA5MzhcdTA5NDdcdTA5MDJcdTA5MmNcdTA5MzBcdTA5M2VcdTA5MWFcdTA5NGRcdTA5MmZcdTA5M2UiLnNwbGl0KCJfIiksaXNGb3JtYXQ6L01NTU0oXHMpK0Rbb0RdPy99LG1vbnRoc1Nob3J0OiJcdTA5MWNcdTA5M2VcdTA5MjhcdTA5NDcuX1x1MDkyYlx1''@;'; put 'put ''MDk0N1x1MDkyY1x1MDk0ZFx1MDkzMFx1MDk0MS5fXHUwOTJlXHUwOTNlXHUwOTMwXHUwOTRkXHUwOTFhX1x1MDkwZlx1MDkyYVx1MDk0ZFx1MDkzMFx1MDk0MC5fXHUwOTJlXHUwOTQ3X1x1MDkxY1x1MDk0Mlx1MDkyOF9cdTA5MWNcdTA5NDFcdTA5MzIuX1x1MDkxMVx1MDkxNy5fXHUwOTM4''@;'; put 'put ''XHUwOTJhXHUwOTRkXHUwOTFmXHUwOTQ3XHUwOTAyLl9cdTA5MTFcdTA5MTVcdTA5NGRcdTA5MWZcdTA5NGIuX1x1MDkyOFx1MDk0Ylx1MDkzNVx1MDk0ZFx1MDkzOVx1MDk0N1x1MDkwMi5fXHUwOTIxXHUwOTNmXHUwOTM4XHUwOTQ3XHUwOTAyLiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4''@;'; put 'put ''YWN0OiEwLHdlZWtkYXlzOiJcdTA5MDZcdTA5MmZcdTA5MjRcdTA5M2VcdTA5MzBfXHUwOTM4XHUwOTRiXHUwOTJlXHUwOTNlXHUwOTMwX1x1MDkyZVx1MDkwMlx1MDkxN1x1MDkzM1x1MDkzZVx1MDkzMF9cdTA5MmNcdTA5NDFcdTA5MjdcdTA5MzVcdTA5M2VcdTA5MzBfXHUwOTJjXHUwOTNm''@;'; put 'put ''XHUwOTMwXHUwOTQ3XHUwOTM4XHUwOTRkXHUwOTI0XHUwOTNlXHUwOTMwX1x1MDkzOFx1MDk0MVx1MDkxNVx1MDk0ZFx1MDkzMFx1MDkzZVx1MDkzMF9cdTA5MzZcdTA5NDdcdTA5MjhcdTA5MzVcdTA5M2VcdTA5MzAiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwOTA2XHUwOTJmXHUw''@;'; put 'put ''OTI0Ll9cdTA5MzhcdTA5NGJcdTA5MmUuX1x1MDkyZVx1MDkwMlx1MDkxN1x1MDkzMy5fXHUwOTJjXHUwOTQxXHUwOTI3Ll9cdTA5MmNcdTA5NGRcdTA5MzBcdTA5NDdcdTA5MzhcdTA5NGRcdTA5MjQuX1x1MDkzOFx1MDk0MVx1MDkxNVx1MDk0ZFx1MDkzMC5fXHUwOTM2XHUwOTQ3XHUwOTI4''@;'; put 'put ''LiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwOTA2X1x1MDkzOFx1MDk0Yl9cdTA5MmVcdTA5MDJfXHUwOTJjXHUwOTQxX1x1MDkyY1x1MDk0ZFx1MDkzMFx1MDk0N19cdTA5MzhcdTA5NDFfXHUwOTM2XHUwOTQ3Ii5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0''@;'; put 'put ''ZUZvcm1hdDp7TFQ6IkEgaDptbSBbXHUwOTM1XHUwOTNlXHUwOTFjXHUwOTI0XHUwOTNlXHUwOTAyXSIsTFRTOiJBIGg6bW06c3MgW1x1MDkzNVx1MDkzZVx1MDkxY1x1MDkyNFx1MDkzZVx1MDkwMl0iLEw6IkRELU1NLVlZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBB''@;'; put 'put ''IGg6bW0gW1x1MDkzNVx1MDkzZVx1MDkxY1x1MDkyNFx1MDkzZVx1MDkwMl0iLExMTEw6ImRkZGQsIE1NTU0gRG8sIFlZWVksIEEgaDptbSBbXHUwOTM1XHUwOTNlXHUwOTFjXHUwOTI0XHUwOTNlXHUwOTAyXSIsbGxsbDoiZGRkLCBEIE1NTSBZWVlZLCBBIGg6bW0gW1x1MDkzNVx1MDkzZVx1''@;'; put 'put ''MDkxY1x1MDkyNFx1MDkzZVx1MDkwMl0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDkwNlx1MDkyZlx1MDkxY10gTFQiLG5leHREYXk6IltcdTA5MmJcdTA5M2VcdTA5MzJcdTA5NGRcdTA5MmZcdTA5M2VcdTA5MDJdIExUIixuZXh0V2VlazoiW1x1MDkyYlx1MDk0MVx1MDkyMVx1MDkzMlx1''@;'; put 'put ''MDk0Yl0gZGRkZFssXSBMVCIsbGFzdERheToiW1x1MDkxNVx1MDkzZVx1MDkzMl0gTFQiLGxhc3RXZWVrOiJbXHUwOTJiXHUwOTNlXHUwOTFmXHUwOTMyXHUwOTRiXSBkZGRkWyxdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyIscGFzdDoiJXMgXHUwOTA2XHUw''@;'; put 'put ''OTI2XHUwOTQwXHUwOTAyIixzOl8sc3M6XyxtOl8sbW06XyxoOl8saGg6XyxkOl8sZGQ6XyxNOl8sTU06Xyx5Ol8seXk6X30sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShcdTA5MzVcdTA5NDdcdTA5MzApLyxvcmRpbmFsOmZ1bmN0aW9uKEIsdyl7cmV0dXJuIkQiPT09dz9CKyJc''@;'; put 'put ''dTA5MzVcdTA5NDdcdTA5MzAiOkJ9LHdlZWs6e2RvdzowLGRveTozfSxtZXJpZGllbVBhcnNlOi9cdTA5MzBcdTA5M2VcdTA5MjRcdTA5NDB8XHUwOTM4XHUwOTE1XHUwOTNlXHUwOTMzXHUwOTQwXHUwOTAyfFx1MDkyNlx1MDkyOFx1MDkyYVx1MDkzZVx1MDkzMFx1MDkzZVx1MDkwMnxcdTA5''@;'; put 'put ''MzhcdTA5M2VcdTA5MDJcdTA5MWNcdTA5NDcvLG1lcmlkaWVtSG91cjpmdW5jdGlvbihCLHcpe3JldHVybiAxMj09PUImJihCPTApLCJcdTA5MzBcdTA5M2VcdTA5MjRcdTA5NDAiPT09dz9CPDQ/QjpCKzEyOiJcdTA5MzhcdTA5MTVcdTA5M2VcdTA5MzNcdTA5NDBcdTA5MDIiPT09dz9COiJc''@;'; put 'put ''dTA5MjZcdTA5MjhcdTA5MmFcdTA5M2VcdTA5MzBcdTA5M2VcdTA5MDIiPT09dz9CPjEyP0I6QisxMjoiXHUwOTM4XHUwOTNlXHUwOTAyXHUwOTFjXHUwOTQ3Ij09PXc/QisxMjp2b2lkIDB9LG1lcmlkaWVtOmZ1bmN0aW9uKEIsdyxQKXtyZXR1cm4gQjw0PyJcdTA5MzBcdTA5M2VcdTA5MjRc''@;'; put 'put ''dTA5NDAiOkI8MTI/Ilx1MDkzOFx1MDkxNVx1MDkzZVx1MDkzM1x1MDk0MFx1MDkwMiI6QjwxNj8iXHUwOTI2XHUwOTI4XHUwOTJhXHUwOTNlXHUwOTMwXHUwOTNlXHUwOTAyIjpCPDIwPyJcdTA5MzhcdTA5M2VcdTA5MDJcdTA5MWNcdTA5NDciOiJcdTA5MzBcdTA5M2VcdTA5MjRcdTA5NDAi''@;'; put 'put ''fX0pfSh5KDk3NTg2KSl9LDU3NzE4OmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBfKEIsdyxQLEYpe3ZhciBPPXtzOlsidGhvZGRlYSBzZWtvbmRhbW5pIiwidGhvZGRlIHNla29uZCJdLHNzOltCKyIgc2Vrb25kYW1uaSIsQisiIHNla29uZCJd''@;'; put 'put ''LG06WyJla2EgbWludGFuIiwiZWsgbWludXQiXSxtbTpbQisiIG1pbnRhbW5pIixCKyIgbWludGFtIl0saDpbImVrYSB2b3JhbiIsImVrIHZvciJdLGhoOltCKyIgdm9yYW1uaSIsQisiIHZvcmFtIl0sZDpbImVrYSBkaXNhbiIsImVrIGRpcyJdLGRkOltCKyIgZGlzYW1uaSIsQisiIGRpcyJd''@;'; put 'put ''LE06WyJla2EgbWhvaW5lYW4iLCJlayBtaG9pbm8iXSxNTTpbQisiIG1ob2luZWFtbmkiLEIrIiBtaG9pbmUiXSx5OlsiZWthIHZvcnNhbiIsImVrIHZvcm9zIl0seXk6W0IrIiB2b3JzYW1uaSIsQisiIHZvcnNhbSJdfTtyZXR1cm4gRj9PW1BdWzBdOk9bUF1bMV19SS5kZWZpbmVMb2NhbGUo''@;'; put 'put ''ImdvbS1sYXRuIix7bW9udGhzOntzdGFuZGFsb25lOiJKYW5lcl9GZWJyZXJfTWFyc19BYnJpbF9NYWlfSnVuX0p1bGFpX0Fnb3N0X1NldGVtYnJfT3R1YnJfTm92ZW1icl9EZXplbWJyIi5zcGxpdCgiXyIpLGZvcm1hdDoiSmFuZXJhY2hlYV9GZWJyZXJhY2hlYV9NYXJzYWNoZWFfQWJyaWxh''@;'; put 'put ''Y2hlYV9NYWlhY2hlYV9KdW5hY2hlYV9KdWxhaWFjaGVhX0Fnb3N0YWNoZWFfU2V0ZW1icmFjaGVhX090dWJyYWNoZWFfTm92ZW1icmFjaGVhX0RlemVtYnJhY2hlYSIuc3BsaXQoIl8iKSxpc0Zvcm1hdDovTU1NTShccykrRFtvRF0/L30sbW9udGhzU2hvcnQ6Ikphbi5fRmViLl9NYXJzX0Fi''@;'; put 'put ''ci5fTWFpX0p1bl9KdWwuX0Fnby5fU2V0Ll9PdHUuX05vdi5fRGV6LiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJBaXRhcl9Tb21hcl9Nb25nbGxhcl9CdWRodmFyX0JpcmVzdGFyX1N1a3Jhcl9Tb24ndmFyIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IkFp''@;'; put 'put ''dC5fU29tLl9Nb24uX0J1ZC5fQnJlLl9TdWsuX1Nvbi4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IkFpX1NtX01vX0J1X0JyX1N1X1NuIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkEgaDptbSBbdmF6dGFdIixMVFM6IkEgaDptbTpzcyBb''@;'; put 'put ''dmF6dGFdIixMOiJERC1NTS1ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgQSBoOm1tIFt2YXp0YV0iLExMTEw6ImRkZGQsIE1NTU0gRG8sIFlZWVksIEEgaDptbSBbdmF6dGFdIixsbGxsOiJkZGQsIEQgTU1NIFlZWVksIEEgaDptbSBbdmF6dGFdIn0sY2FsZW5kYXI6''@;'; put 'put ''e3NhbWVEYXk6IltBaXpdIExUIixuZXh0RGF5OiJbRmFsZWFtXSBMVCIsbmV4dFdlZWs6IltGdWRkbG9dIGRkZGRbLF0gTFQiLGxhc3REYXk6IltLYWxdIExUIixsYXN0V2VlazoiW0ZhdHRsb10gZGRkZFssXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMiLHBh''@;'; put 'put ''c3Q6IiVzIGFkaW0iLHM6XyxzczpfLG06XyxtbTpfLGg6XyxoaDpfLGQ6XyxkZDpfLE06XyxNTTpfLHk6Xyx5eTpffSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KGVyKS8sb3JkaW5hbDpmdW5jdGlvbihCLHcpe3JldHVybiJEIj09PXc/QisiZXIiOkJ9LHdlZWs6e2RvdzowLGRv''@;'; put 'put ''eTozfSxtZXJpZGllbVBhcnNlOi9yYXRpfHNva2FsbGltfGRvbnBhcmFtfHNhbmplLyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24oQix3KXtyZXR1cm4gMTI9PT1CJiYoQj0wKSwicmF0aSI9PT13P0I8ND9COkIrMTI6InNva2FsbGltIj09PXc/QjoiZG9ucGFyYW0iPT09dz9CPjEyP0I6QisxMjoi''@;'; put 'put ''c2FuamUiPT09dz9CKzEyOnZvaWQgMH0sbWVyaWRpZW06ZnVuY3Rpb24oQix3LFApe3JldHVybiBCPDQ/InJhdGkiOkI8MTI/InNva2FsbGltIjpCPDE2PyJkb25wYXJhbSI6QjwyMD8ic2FuamUiOiJyYXRpIn19KX0oeSg5NzU4NikpfSwyNjgyNzpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlv''@;'; put 'put ''bihJKXsidXNlIHN0cmljdCI7dmFyIF89ezE6Ilx1MGFlNyIsMjoiXHUwYWU4IiwzOiJcdTBhZTkiLDQ6Ilx1MGFlYSIsNToiXHUwYWViIiw2OiJcdTBhZWMiLDc6Ilx1MGFlZCIsODoiXHUwYWVlIiw5OiJcdTBhZWYiLDA6Ilx1MGFlNiJ9LGc9eyJcdTBhZTciOiIxIiwiXHUwYWU4IjoiMiIs''@;'; put 'put ''Ilx1MGFlOSI6IjMiLCJcdTBhZWEiOiI0IiwiXHUwYWViIjoiNSIsIlx1MGFlYyI6IjYiLCJcdTBhZWQiOiI3IiwiXHUwYWVlIjoiOCIsIlx1MGFlZiI6IjkiLCJcdTBhZTYiOiIwIn07SS5kZWZpbmVMb2NhbGUoImd1Iix7bW9udGhzOiJcdTBhOWNcdTBhYmVcdTBhYThcdTBhY2RcdTBhYWZc''@;'; put 'put ''dTBhYzFcdTBhODZcdTBhYjBcdTBhYzBfXHUwYWFiXHUwYWM3XHUwYWFjXHUwYWNkXHUwYWIwXHUwYWMxXHUwYTg2XHUwYWIwXHUwYWMwX1x1MGFhZVx1MGFiZVx1MGFiMFx1MGFjZFx1MGE5YV9cdTBhOGZcdTBhYWFcdTBhY2RcdTBhYjBcdTBhYmZcdTBhYjJfXHUwYWFlXHUwYWM3X1x1MGE5''@;'; put 'put ''Y1x1MGFjMlx1MGFhOF9cdTBhOWNcdTBhYzFcdTBhYjJcdTBhYmVcdTBhODhfXHUwYTkxXHUwYTk3XHUwYWI4XHUwYWNkXHUwYTlmX1x1MGFiOFx1MGFhYVx1MGFjZFx1MGE5Zlx1MGFjN1x1MGFhZVx1MGFjZFx1MGFhY1x1MGFiMF9cdTBhOTFcdTBhOTVcdTBhY2RcdTBhOWZcdTBhY2RcdTBh''@;'; put 'put ''YWNcdTBhYjBfXHUwYWE4XHUwYWI1XHUwYWM3XHUwYWFlXHUwYWNkXHUwYWFjXHUwYWIwX1x1MGFhMVx1MGFiZlx1MGFiOFx1MGFjN1x1MGFhZVx1MGFjZFx1MGFhY1x1MGFiMCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwYTljXHUwYWJlXHUwYWE4XHUwYWNkXHUwYWFmXHUwYWMxLl9c''@;'; put 'put ''dTBhYWJcdTBhYzdcdTBhYWNcdTBhY2RcdTBhYjBcdTBhYzEuX1x1MGFhZVx1MGFiZVx1MGFiMFx1MGFjZFx1MGE5YV9cdTBhOGZcdTBhYWFcdTBhY2RcdTBhYjBcdTBhYmYuX1x1MGFhZVx1MGFjN19cdTBhOWNcdTBhYzJcdTBhYThfXHUwYTljXHUwYWMxXHUwYWIyXHUwYWJlLl9cdTBhOTFc''@;'; put 'put ''dTBhOTcuX1x1MGFiOFx1MGFhYVx1MGFjZFx1MGE5Zlx1MGFjNy5fXHUwYTkxXHUwYTk1XHUwYWNkXHUwYTlmXHUwYWNkLl9cdTBhYThcdTBhYjVcdTBhYzcuX1x1MGFhMVx1MGFiZlx1MGFiOFx1MGFjNy4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiXHUwYWIw''@;'; put 'put ''XHUwYWI1XHUwYWJmXHUwYWI1XHUwYWJlXHUwYWIwX1x1MGFiOFx1MGFjYlx1MGFhZVx1MGFiNVx1MGFiZVx1MGFiMF9cdTBhYWVcdTBhODJcdTBhOTdcdTBhYjNcdTBhYjVcdTBhYmVcdTBhYjBfXHUwYWFjXHUwYWMxXHUwYWE3XHUwYWNkXHUwYWI1XHUwYWJlXHUwYWIwX1x1MGE5N1x1MGFj''@;'; put 'put ''MVx1MGFiMFx1MGFjMVx1MGFiNVx1MGFiZVx1MGFiMF9cdTBhYjZcdTBhYzFcdTBhOTVcdTBhY2RcdTBhYjBcdTBhYjVcdTBhYmVcdTBhYjBfXHUwYWI2XHUwYWE4XHUwYWJmXHUwYWI1XHUwYWJlXHUwYWIwIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MGFiMFx1MGFiNVx1MGFiZl9c''@;'; put 'put ''dTBhYjhcdTBhY2JcdTBhYWVfXHUwYWFlXHUwYTgyXHUwYTk3XHUwYWIzX1x1MGFhY1x1MGFjMVx1MGFhN1x1MGFjZF9cdTBhOTdcdTBhYzFcdTBhYjBcdTBhYzFfXHUwYWI2XHUwYWMxXHUwYTk1XHUwYWNkXHUwYWIwX1x1MGFiNlx1MGFhOFx1MGFiZiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01p''@;'; put 'put ''bjoiXHUwYWIwX1x1MGFiOFx1MGFjYl9cdTBhYWVcdTBhODJfXHUwYWFjXHUwYWMxX1x1MGE5N1x1MGFjMV9cdTBhYjZcdTBhYzFfXHUwYWI2Ii5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiQSBoOm1tIFx1MGFiNVx1MGFiZVx1MGE5N1x1MGFjZFx1MGFhZlx1MGFjNyIsTFRTOiJB''@;'; put 'put ''IGg6bW06c3MgXHUwYWI1XHUwYWJlXHUwYTk3XHUwYWNkXHUwYWFmXHUwYWM3IixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVksIEEgaDptbSBcdTBhYjVcdTBhYmVcdTBhOTdcdTBhY2RcdTBhYWZcdTBhYzciLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZ''@;'; put 'put ''LCBBIGg6bW0gXHUwYWI1XHUwYWJlXHUwYTk3XHUwYWNkXHUwYWFmXHUwYWM3In0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTBhODZcdTBhOWNdIExUIixuZXh0RGF5OiJbXHUwYTk1XHUwYWJlXHUwYWIyXHUwYWM3XSBMVCIsbmV4dFdlZWs6ImRkZGQsIExUIixsYXN0RGF5OiJbXHUwYTk3XHUw''@;'; put 'put ''YTg3XHUwYTk1XHUwYWJlXHUwYWIyXHUwYWM3XSBMVCIsbGFzdFdlZWs6IltcdTBhYWFcdTBhYmVcdTBhOWJcdTBhYjJcdTBhYmVdIGRkZGQsIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBcdTBhYWVcdTBhYmUiLHBhc3Q6IiVzIFx1MGFhYVx1MGFiOVx1MGFj''@;'; put 'put ''N1x1MGFiMlx1MGFiZSIsczoiXHUwYTg1XHUwYWFlXHUwYWMxXHUwYTk1IFx1MGFhYVx1MGFiM1x1MGFjYiIsc3M6IiVkIFx1MGFiOFx1MGFjN1x1MGE5NVx1MGE4Mlx1MGFhMSIsbToiXHUwYThmXHUwYTk1IFx1MGFhZVx1MGFiZlx1MGFhOFx1MGFiZlx1MGE5ZiIsbW06IiVkIFx1MGFhZVx1''@;'; put 'put ''MGFiZlx1MGFhOFx1MGFiZlx1MGE5ZiIsaDoiXHUwYThmXHUwYTk1IFx1MGE5NVx1MGFiMlx1MGFiZVx1MGE5NSIsaGg6IiVkIFx1MGE5NVx1MGFiMlx1MGFiZVx1MGE5NSIsZDoiXHUwYThmXHUwYTk1IFx1MGFhNlx1MGFiZlx1MGFiNVx1MGFiOCIsZGQ6IiVkIFx1MGFhNlx1MGFiZlx1MGFi''@;'; put 'put ''NVx1MGFiOCIsTToiXHUwYThmXHUwYTk1IFx1MGFhZVx1MGFiOVx1MGFiZlx1MGFhOFx1MGFjYiIsTU06IiVkIFx1MGFhZVx1MGFiOVx1MGFiZlx1MGFhOFx1MGFjYiIseToiXHUwYThmXHUwYTk1IFx1MGFiNVx1MGFiMFx1MGFjZFx1MGFiNyIseXk6IiVkIFx1MGFiNVx1MGFiMFx1MGFjZFx1''@;'; put 'put ''MGFiNyJ9LHByZXBhcnNlOmZ1bmN0aW9uKHcpe3JldHVybiB3LnJlcGxhY2UoL1tcdTBhZTdcdTBhZThcdTBhZTlcdTBhZWFcdTBhZWJcdTBhZWNcdTBhZWRcdTBhZWVcdTBhZWZcdTBhZTZdL2csZnVuY3Rpb24oUCl7cmV0dXJuIGdbUF19KX0scG9zdGZvcm1hdDpmdW5jdGlvbih3KXtyZXR1''@;'; put 'put ''cm4gdy5yZXBsYWNlKC9cZC9nLGZ1bmN0aW9uKFApe3JldHVybiBfW1BdfSl9LG1lcmlkaWVtUGFyc2U6L1x1MGFiMFx1MGFiZVx1MGFhNHxcdTBhYWNcdTBhYWFcdTBhY2JcdTBhYjB8XHUwYWI4XHUwYWI1XHUwYWJlXHUwYWIwfFx1MGFiOFx1MGFiZVx1MGE4Mlx1MGE5Yy8sbWVyaWRpZW1I''@;'; put 'put ''b3VyOmZ1bmN0aW9uKHcsUCl7cmV0dXJuIDEyPT09dyYmKHc9MCksIlx1MGFiMFx1MGFiZVx1MGFhNCI9PT1QP3c8ND93OncrMTI6Ilx1MGFiOFx1MGFiNVx1MGFiZVx1MGFiMCI9PT1QP3c6Ilx1MGFhY1x1MGFhYVx1MGFjYlx1MGFiMCI9PT1QP3c+PTEwP3c6dysxMjoiXHUwYWI4XHUwYWJl''@;'; put 'put ''XHUwYTgyXHUwYTljIj09PVA/dysxMjp2b2lkIDB9LG1lcmlkaWVtOmZ1bmN0aW9uKHcsUCxGKXtyZXR1cm4gdzw0PyJcdTBhYjBcdTBhYmVcdTBhYTQiOnc8MTA/Ilx1MGFiOFx1MGFiNVx1MGFiZVx1MGFiMCI6dzwxNz8iXHUwYWFjXHUwYWFhXHUwYWNiXHUwYWIwIjp3PDIwPyJcdTBhYjhc''@;'; put 'put ''dTBhYmVcdTBhODJcdTBhOWMiOiJcdTBhYjBcdTBhYmVcdTBhYTQifSx3ZWVrOntkb3c6MCxkb3k6Nn19KX0oeSg5NzU4NikpfSwyMTkzNjpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoImhlIix7bW9udGhzOiJcdTA1ZDlcdTA1ZTBc''@;'; put 'put ''dTA1ZDVcdTA1ZDBcdTA1ZThfXHUwNWU0XHUwNWQxXHUwNWU4XHUwNWQ1XHUwNWQwXHUwNWU4X1x1MDVkZVx1MDVlOFx1MDVlNV9cdTA1ZDBcdTA1ZTRcdTA1ZThcdTA1ZDlcdTA1ZGNfXHUwNWRlXHUwNWQwXHUwNWQ5X1x1MDVkOVx1MDVkNVx1MDVlMFx1MDVkOV9cdTA1ZDlcdTA1ZDVcdTA1''@;'; put 'put ''ZGNcdTA1ZDlfXHUwNWQwXHUwNWQ1XHUwNWQyXHUwNWQ1XHUwNWUxXHUwNWQ4X1x1MDVlMVx1MDVlNFx1MDVkOFx1MDVkZVx1MDVkMVx1MDVlOF9cdTA1ZDBcdTA1ZDVcdTA1ZTdcdTA1ZDhcdTA1ZDVcdTA1ZDFcdTA1ZThfXHUwNWUwXHUwNWQ1XHUwNWQxXHUwNWRlXHUwNWQxXHUwNWU4X1x1''@;'; put 'put ''MDVkM1x1MDVlNlx1MDVkZVx1MDVkMVx1MDVlOCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwNWQ5XHUwNWUwXHUwNWQ1XHUwNWYzX1x1MDVlNFx1MDVkMVx1MDVlOFx1MDVmM19cdTA1ZGVcdTA1ZThcdTA1ZTVfXHUwNWQwXHUwNWU0XHUwNWU4XHUwNWYzX1x1MDVkZVx1MDVkMFx1MDVk''@;'; put 'put ''OV9cdTA1ZDlcdTA1ZDVcdTA1ZTBcdTA1ZDlfXHUwNWQ5XHUwNWQ1XHUwNWRjXHUwNWQ5X1x1MDVkMFx1MDVkNVx1MDVkMlx1MDVmM19cdTA1ZTFcdTA1ZTRcdTA1ZDhcdTA1ZjNfXHUwNWQwXHUwNWQ1XHUwNWU3XHUwNWYzX1x1MDVlMFx1MDVkNVx1MDVkMVx1MDVmM19cdTA1ZDNcdTA1ZTZc''@;'; put 'put ''dTA1ZGVcdTA1ZjMiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MDVlOFx1MDVkMFx1MDVlOVx1MDVkNVx1MDVkZl9cdTA1ZTlcdTA1ZTBcdTA1ZDlfXHUwNWU5XHUwNWRjXHUwNWQ5XHUwNWU5XHUwNWQ5X1x1MDVlOFx1MDVkMVx1MDVkOVx1MDVlMlx1MDVkOV9cdTA1ZDdcdTA1ZGVcdTA1ZDlc''@;'; put 'put ''dTA1ZTlcdTA1ZDlfXHUwNWU5XHUwNWQ5XHUwNWU5XHUwNWQ5X1x1MDVlOVx1MDVkMVx1MDVlYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA1ZDBcdTA1ZjNfXHUwNWQxXHUwNWYzX1x1MDVkMlx1MDVmM19cdTA1ZDNcdTA1ZjNfXHUwNWQ0XHUwNWYzX1x1MDVkNVx1MDVmM19cdTA1''@;'; put 'put ''ZTlcdTA1ZjMiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDVkMF9cdTA1ZDFfXHUwNWQyX1x1MDVkM19cdTA1ZDRfXHUwNWQ1X1x1MDVlOSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBbXHUwNWQx''@;'; put 'put ''XU1NTU0gWVlZWSIsTExMOiJEIFtcdTA1ZDFdTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIFtcdTA1ZDFdTU1NTSBZWVlZIEhIOm1tIixsOiJEL00vWVlZWSIsbGw6IkQgTU1NIFlZWVkiLGxsbDoiRCBNTU0gWVlZWSBISDptbSIsbGxsbDoiZGRkLCBEIE1NTSBZWVlZIEhIOm1tIn0s''@;'; put 'put ''Y2FsZW5kYXI6e3NhbWVEYXk6IltcdTA1ZDRcdTA1ZDlcdTA1ZDVcdTA1ZGQgXHUwNWQxXHUwNWJlXUxUIixuZXh0RGF5OiJbXHUwNWRlXHUwNWQ3XHUwNWU4IFx1MDVkMVx1MDViZV1MVCIsbmV4dFdlZWs6ImRkZGQgW1x1MDVkMVx1MDVlOVx1MDVlMlx1MDVkNF0gTFQiLGxhc3REYXk6Iltc''@;'; put 'put ''dTA1ZDBcdTA1ZWFcdTA1ZGVcdTA1ZDVcdTA1ZGMgXHUwNWQxXHUwNWJlXUxUIixsYXN0V2VlazoiW1x1MDVkMVx1MDVkOVx1MDVkNVx1MDVkZF0gZGRkZCBbXHUwNWQ0XHUwNWQwXHUwNWQ3XHUwNWU4XHUwNWQ1XHUwNWRmIFx1MDVkMVx1MDVlOVx1MDVlMlx1MDVkNF0gTFQiLHNhbWVFbHNl''@;'; put 'put ''OiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDVkMVx1MDVlMlx1MDVkNVx1MDVkMyAlcyIscGFzdDoiXHUwNWRjXHUwNWU0XHUwNWUwXHUwNWQ5ICVzIixzOiJcdTA1ZGVcdTA1ZTFcdTA1ZTRcdTA1ZTggXHUwNWU5XHUwNWUwXHUwNWQ5XHUwNWQ1XHUwNWVhIixzczoiJWQgXHUwNWU5''@;'; put 'put ''XHUwNWUwXHUwNWQ5XHUwNWQ1XHUwNWVhIixtOiJcdTA1ZDNcdTA1ZTdcdTA1ZDQiLG1tOiIlZCBcdTA1ZDNcdTA1ZTdcdTA1ZDVcdTA1ZWEiLGg6Ilx1MDVlOVx1MDVlMlx1MDVkNCIsaGg6ZnVuY3Rpb24oZyl7cmV0dXJuIDI9PT1nPyJcdTA1ZTlcdTA1ZTJcdTA1ZWFcdTA1ZDlcdTA1ZDlc''@;'; put 'put ''dTA1ZGQiOmcrIiBcdTA1ZTlcdTA1ZTJcdTA1ZDVcdTA1ZWEifSxkOiJcdTA1ZDlcdTA1ZDVcdTA1ZGQiLGRkOmZ1bmN0aW9uKGcpe3JldHVybiAyPT09Zz8iXHUwNWQ5XHUwNWQ1XHUwNWRlXHUwNWQ5XHUwNWQ5XHUwNWRkIjpnKyIgXHUwNWQ5XHUwNWRlXHUwNWQ5XHUwNWRkIn0sTToiXHUw''@;'; put 'put ''NWQ3XHUwNWQ1XHUwNWQzXHUwNWU5IixNTTpmdW5jdGlvbihnKXtyZXR1cm4gMj09PWc/Ilx1MDVkN1x1MDVkNVx1MDVkM1x1MDVlOVx1MDVkOVx1MDVkOVx1MDVkZCI6ZysiIFx1MDVkN1x1MDVkNVx1MDVkM1x1MDVlOVx1MDVkOVx1MDVkZCJ9LHk6Ilx1MDVlOVx1MDVlMFx1MDVkNCIseXk6''@;'; put 'put ''ZnVuY3Rpb24oZyl7cmV0dXJuIDI9PT1nPyJcdTA1ZTlcdTA1ZTBcdTA1ZWFcdTA1ZDlcdTA1ZDlcdTA1ZGQiOmclMTA9PTAmJjEwIT09Zz9nKyIgXHUwNWU5XHUwNWUwXHUwNWQ0IjpnKyIgXHUwNWU5XHUwNWUwXHUwNWQ5XHUwNWRkIn19LG1lcmlkaWVtUGFyc2U6L1x1MDVkMFx1MDVkN1x1''@;'; put 'put ''MDVkNCJcdTA1ZTZ8XHUwNWRjXHUwNWU0XHUwNWUwXHUwNWQ0Ilx1MDVlNnxcdTA1ZDBcdTA1ZDdcdTA1ZThcdTA1ZDkgXHUwNWQ0XHUwNWU2XHUwNWQ0XHUwNWU4XHUwNWQ5XHUwNWQ5XHUwNWRkfFx1MDVkY1x1MDVlNFx1MDVlMFx1MDVkOSBcdTA1ZDRcdTA1ZTZcdTA1ZDRcdTA1ZThcdTA1''@;'; put 'put ''ZDlcdTA1ZDlcdTA1ZGR8XHUwNWRjXHUwNWU0XHUwNWUwXHUwNWQ1XHUwNWVhIFx1MDVkMVx1MDVkNVx1MDVlN1x1MDVlOHxcdTA1ZDFcdTA1ZDFcdTA1ZDVcdTA1ZTdcdTA1ZTh8XHUwNWQxXHUwNWUyXHUwNWU4XHUwNWQxL2ksaXNQTTpmdW5jdGlvbihnKXtyZXR1cm4vXihcdTA1ZDBcdTA1''@;'; put 'put ''ZDdcdTA1ZDQiXHUwNWU2fFx1MDVkMFx1MDVkN1x1MDVlOFx1MDVkOSBcdTA1ZDRcdTA1ZTZcdTA1ZDRcdTA1ZThcdTA1ZDlcdTA1ZDlcdTA1ZGR8XHUwNWQxXHUwNWUyXHUwNWU4XHUwNWQxKSQvLnRlc3QoZyl9LG1lcmlkaWVtOmZ1bmN0aW9uKGcsQix3KXtyZXR1cm4gZzw1PyJcdTA1ZGNc''@;'; put 'put ''dTA1ZTRcdTA1ZTBcdTA1ZDVcdTA1ZWEgXHUwNWQxXHUwNWQ1XHUwNWU3XHUwNWU4IjpnPDEwPyJcdTA1ZDFcdTA1ZDFcdTA1ZDVcdTA1ZTdcdTA1ZTgiOmc8MTI/dz8nXHUwNWRjXHUwNWU0XHUwNWUwXHUwNWQ0Ilx1MDVlNic6Ilx1MDVkY1x1MDVlNFx1MDVlMFx1MDVkOSBcdTA1ZDRcdTA1''@;'; put 'put ''ZTZcdTA1ZDRcdTA1ZThcdTA1ZDlcdTA1ZDlcdTA1ZGQiOmc8MTg/dz8nXHUwNWQwXHUwNWQ3XHUwNWQ0Ilx1MDVlNic6Ilx1MDVkMFx1MDVkN1x1MDVlOFx1MDVkOSBcdTA1ZDRcdTA1ZTZcdTA1ZDRcdTA1ZThcdTA1ZDlcdTA1ZDlcdTA1ZGQiOiJcdTA1ZDFcdTA1ZTJcdTA1ZThcdTA1ZDEi''@;'; put 'put ''fX0pfSh5KDk3NTg2KSl9LDMxMzMyOmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz17MToiXHUwOTY3IiwyOiJcdTA5NjgiLDM6Ilx1MDk2OSIsNDoiXHUwOTZhIiw1OiJcdTA5NmIiLDY6Ilx1MDk2YyIsNzoiXHUwOTZkIiw4OiJcdTA5NmUiLDk6Ilx1''@;'; put 'put ''MDk2ZiIsMDoiXHUwOTY2In0sZz17Ilx1MDk2NyI6IjEiLCJcdTA5NjgiOiIyIiwiXHUwOTY5IjoiMyIsIlx1MDk2YSI6IjQiLCJcdTA5NmIiOiI1IiwiXHUwOTZjIjoiNiIsIlx1MDk2ZCI6IjciLCJcdTA5NmUiOiI4IiwiXHUwOTZmIjoiOSIsIlx1MDk2NiI6IjAifSxCPVsvXlx1MDkxY1x1''@;'; put 'put ''MDkyOC9pLC9eXHUwOTJiXHUwOTNjXHUwOTMwfFx1MDkyYlx1MDkzMC9pLC9eXHUwOTJlXHUwOTNlXHUwOTMwXHUwOTRkXHUwOTFhL2ksL15cdTA5MDVcdTA5MmFcdTA5NGRcdTA5MzBcdTA5NDgvaSwvXlx1MDkyZVx1MDkwOC9pLC9eXHUwOTFjXHUwOTQyXHUwOTI4L2ksL15cdTA5MWNcdTA5''@;'; put 'put ''NDFcdTA5MzIvaSwvXlx1MDkwNVx1MDkxNy9pLC9eXHUwOTM4XHUwOTNmXHUwOTI0XHUwOTAyfFx1MDkzOFx1MDkzZlx1MDkyNC9pLC9eXHUwOTA1XHUwOTE1XHUwOTRkXHUwOTFmXHUwOTQyL2ksL15cdTA5MjhcdTA5MzV8XHUwOTI4XHUwOTM1XHUwOTAyL2ksL15cdTA5MjZcdTA5M2ZcdTA5''@;'; put 'put ''MzhcdTA5MDJ8XHUwOTI2XHUwOTNmXHUwOTM4L2ldO0kuZGVmaW5lTG9jYWxlKCJoaSIse21vbnRoczp7Zm9ybWF0OiJcdTA5MWNcdTA5MjhcdTA5MzVcdTA5MzBcdTA5NDBfXHUwOTJiXHUwOTNjXHUwOTMwXHUwOTM1XHUwOTMwXHUwOTQwX1x1MDkyZVx1MDkzZVx1MDkzMFx1MDk0ZFx1MDkx''@;'; put 'put ''YV9cdTA5MDVcdTA5MmFcdTA5NGRcdTA5MzBcdTA5NDhcdTA5MzJfXHUwOTJlXHUwOTA4X1x1MDkxY1x1MDk0Mlx1MDkyOF9cdTA5MWNcdTA5NDFcdTA5MzJcdTA5M2VcdTA5MDhfXHUwOTA1XHUwOTE3XHUwOTM4XHUwOTRkXHUwOTI0X1x1MDkzOFx1MDkzZlx1MDkyNFx1MDkyZVx1MDk0ZFx1''@;'; put 'put ''MDkyY1x1MDkzMF9cdTA5MDVcdTA5MTVcdTA5NGRcdTA5MWZcdTA5NDJcdTA5MmNcdTA5MzBfXHUwOTI4XHUwOTM1XHUwOTJlXHUwOTRkXHUwOTJjXHUwOTMwX1x1MDkyNlx1MDkzZlx1MDkzOFx1MDkyZVx1MDk0ZFx1MDkyY1x1MDkzMCIuc3BsaXQoIl8iKSxzdGFuZGFsb25lOiJcdTA5MWNc''@;'; put 'put ''dTA5MjhcdTA5MzVcdTA5MzBcdTA5NDBfXHUwOTJiXHUwOTMwXHUwOTM1XHUwOTMwXHUwOTQwX1x1MDkyZVx1MDkzZVx1MDkzMFx1MDk0ZFx1MDkxYV9cdTA5MDVcdTA5MmFcdTA5NGRcdTA5MzBcdTA5NDhcdTA5MzJfXHUwOTJlXHUwOTA4X1x1MDkxY1x1MDk0Mlx1MDkyOF9cdTA5MWNcdTA5''@;'; put 'put ''NDFcdTA5MzJcdTA5M2VcdTA5MDhfXHUwOTA1XHUwOTE3XHUwOTM4XHUwOTRkXHUwOTI0X1x1MDkzOFx1MDkzZlx1MDkyNFx1MDkwMlx1MDkyY1x1MDkzMF9cdTA5MDVcdTA5MTVcdTA5NGRcdTA5MWZcdTA5NDJcdTA5MmNcdTA5MzBfXHUwOTI4XHUwOTM1XHUwOTAyXHUwOTJjXHUwOTMwX1x1''@;'; put 'put ''MDkyNlx1MDkzZlx1MDkzOFx1MDkwMlx1MDkyY1x1MDkzMCIuc3BsaXQoIl8iKX0sbW9udGhzU2hvcnQ6Ilx1MDkxY1x1MDkyOC5fXHUwOTJiXHUwOTNjXHUwOTMwLl9cdTA5MmVcdTA5M2VcdTA5MzBcdTA5NGRcdTA5MWFfXHUwOTA1XHUwOTJhXHUwOTRkXHUwOTMwXHUwOTQ4Ll9cdTA5MmVc''@;'; put 'put ''dTA5MDhfXHUwOTFjXHUwOTQyXHUwOTI4X1x1MDkxY1x1MDk0MVx1MDkzMi5fXHUwOTA1XHUwOTE3Ll9cdTA5MzhcdTA5M2ZcdTA5MjQuX1x1MDkwNVx1MDkxNVx1MDk0ZFx1MDkxZlx1MDk0Mi5fXHUwOTI4XHUwOTM1Ll9cdTA5MjZcdTA5M2ZcdTA5MzguIi5zcGxpdCgiXyIpLHdlZWtkYXlz''@;'; put 'put ''OiJcdTA5MzBcdTA5MzVcdTA5M2ZcdTA5MzVcdTA5M2VcdTA5MzBfXHUwOTM4XHUwOTRiXHUwOTJlXHUwOTM1XHUwOTNlXHUwOTMwX1x1MDkyZVx1MDkwMlx1MDkxN1x1MDkzMlx1MDkzNVx1MDkzZVx1MDkzMF9cdTA5MmNcdTA5NDFcdTA5MjdcdTA5MzVcdTA5M2VcdTA5MzBfXHUwOTE3XHUw''@;'; put 'put ''OTQxXHUwOTMwXHUwOTQyXHUwOTM1XHUwOTNlXHUwOTMwX1x1MDkzNlx1MDk0MVx1MDkxNVx1MDk0ZFx1MDkzMFx1MDkzNVx1MDkzZVx1MDkzMF9cdTA5MzZcdTA5MjhcdTA5M2ZcdTA5MzVcdTA5M2VcdTA5MzAiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwOTMwXHUwOTM1XHUwOTNm''@;'; put 'put ''X1x1MDkzOFx1MDk0Ylx1MDkyZV9cdTA5MmVcdTA5MDJcdTA5MTdcdTA5MzJfXHUwOTJjXHUwOTQxXHUwOTI3X1x1MDkxN1x1MDk0MVx1MDkzMFx1MDk0Ml9cdTA5MzZcdTA5NDFcdTA5MTVcdTA5NGRcdTA5MzBfXHUwOTM2XHUwOTI4XHUwOTNmIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJc''@;'; put 'put ''dTA5MzBfXHUwOTM4XHUwOTRiX1x1MDkyZVx1MDkwMl9cdTA5MmNcdTA5NDFfXHUwOTE3XHUwOTQxX1x1MDkzNlx1MDk0MV9cdTA5MzYiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJBIGg6bW0gXHUwOTJjXHUwOTFjXHUwOTQ3IixMVFM6IkEgaDptbTpzcyBcdTA5MmNcdTA5MWNc''@;'; put 'put ''dTA5NDciLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSwgQSBoOm1tIFx1MDkyY1x1MDkxY1x1MDk0NyIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVksIEEgaDptbSBcdTA5MmNcdTA5MWNcdTA5NDcifSxtb250aHNQYXJzZTpCLGxvbmdNb250aHNQYXJz''@;'; put 'put ''ZTpCLHNob3J0TW9udGhzUGFyc2U6Wy9eXHUwOTFjXHUwOTI4L2ksL15cdTA5MmJcdTA5M2NcdTA5MzAvaSwvXlx1MDkyZVx1MDkzZVx1MDkzMFx1MDk0ZFx1MDkxYS9pLC9eXHUwOTA1XHUwOTJhXHUwOTRkXHUwOTMwXHUwOTQ4L2ksL15cdTA5MmVcdTA5MDgvaSwvXlx1MDkxY1x1MDk0Mlx1''@;'; put 'put ''MDkyOC9pLC9eXHUwOTFjXHUwOTQxXHUwOTMyL2ksL15cdTA5MDVcdTA5MTcvaSwvXlx1MDkzOFx1MDkzZlx1MDkyNC9pLC9eXHUwOTA1XHUwOTE1XHUwOTRkXHUwOTFmXHUwOTQyL2ksL15cdTA5MjhcdTA5MzUvaSwvXlx1MDkyNlx1MDkzZlx1MDkzOC9pXSxtb250aHNSZWdleDovXihcdTA5''@;'; put 'put ''MWNcdTA5MjhcdTA5MzVcdTA5MzBcdTA5NDB8XHUwOTFjXHUwOTI4XC4/fFx1MDkyYlx1MDkzY1x1MDkzMFx1MDkzNVx1MDkzMFx1MDk0MHxcdTA5MmJcdTA5MzBcdTA5MzVcdTA5MzBcdTA5NDB8XHUwOTJiXHUwOTNjXHUwOTMwXC4/fFx1MDkyZVx1MDkzZVx1MDkzMFx1MDk0ZFx1MDkxYT98''@;'; put 'put ''XHUwOTA1XHUwOTJhXHUwOTRkXHUwOTMwXHUwOTQ4XHUwOTMyfFx1MDkwNVx1MDkyYVx1MDk0ZFx1MDkzMFx1MDk0OFwuP3xcdTA5MmVcdTA5MDg/fFx1MDkxY1x1MDk0Mlx1MDkyOD98XHUwOTFjXHUwOTQxXHUwOTMyXHUwOTNlXHUwOTA4fFx1MDkxY1x1MDk0MVx1MDkzMlwuP3xcdTA5MDVc''@;'; put 'put ''dTA5MTdcdTA5MzhcdTA5NGRcdTA5MjR8XHUwOTA1XHUwOTE3XC4/fFx1MDkzOFx1MDkzZlx1MDkyNFx1MDkyZVx1MDk0ZFx1MDkyY1x1MDkzMHxcdTA5MzhcdTA5M2ZcdTA5MjRcdTA5MDJcdTA5MmNcdTA5MzB8XHUwOTM4XHUwOTNmXHUwOTI0XC4/fFx1MDkwNVx1MDkxNVx1MDk0ZFx1MDkx''@;'; put 'put ''Zlx1MDk0Mlx1MDkyY1x1MDkzMHxcdTA5MDVcdTA5MTVcdTA5NGRcdTA5MWZcdTA5NDJcLj98XHUwOTI4XHUwOTM1XHUwOTJlXHUwOTRkXHUwOTJjXHUwOTMwfFx1MDkyOFx1MDkzNVx1MDkwMlx1MDkyY1x1MDkzMHxcdTA5MjhcdTA5MzVcLj98XHUwOTI2XHUwOTNmXHUwOTM4XHUwOTJlXHUw''@;'; put 'put ''OTRkXHUwOTJjXHUwOTMwfFx1MDkyNlx1MDkzZlx1MDkzOFx1MDkwMlx1MDkyY1x1MDkzMHxcdTA5MjZcdTA5M2ZcdTA5MzhcLj8pL2ksbW9udGhzU2hvcnRSZWdleDovXihcdTA5MWNcdTA5MjhcdTA5MzVcdTA5MzBcdTA5NDB8XHUwOTFjXHUwOTI4XC4/fFx1MDkyYlx1MDkzY1x1MDkzMFx1''@;'; put 'put ''MDkzNVx1MDkzMFx1MDk0MHxcdTA5MmJcdTA5MzBcdTA5MzVcdTA5MzBcdTA5NDB8XHUwOTJiXHUwOTNjXHUwOTMwXC4/fFx1MDkyZVx1MDkzZVx1MDkzMFx1MDk0ZFx1MDkxYT98XHUwOTA1XHUwOTJhXHUwOTRkXHUwOTMwXHUwOTQ4XHUwOTMyfFx1MDkwNVx1MDkyYVx1MDk0ZFx1MDkzMFx1''@;'; put 'put ''MDk0OFwuP3xcdTA5MmVcdTA5MDg/fFx1MDkxY1x1MDk0Mlx1MDkyOD98XHUwOTFjXHUwOTQxXHUwOTMyXHUwOTNlXHUwOTA4fFx1MDkxY1x1MDk0MVx1MDkzMlwuP3xcdTA5MDVcdTA5MTdcdTA5MzhcdTA5NGRcdTA5MjR8XHUwOTA1XHUwOTE3XC4/fFx1MDkzOFx1MDkzZlx1MDkyNFx1MDky''@;'; put 'put ''ZVx1MDk0ZFx1MDkyY1x1MDkzMHxcdTA5MzhcdTA5M2ZcdTA5MjRcdTA5MDJcdTA5MmNcdTA5MzB8XHUwOTM4XHUwOTNmXHUwOTI0XC4/fFx1MDkwNVx1MDkxNVx1MDk0ZFx1MDkxZlx1MDk0Mlx1MDkyY1x1MDkzMHxcdTA5MDVcdTA5MTVcdTA5NGRcdTA5MWZcdTA5NDJcLj98XHUwOTI4XHUw''@;'; put 'put ''OTM1XHUwOTJlXHUwOTRkXHUwOTJjXHUwOTMwfFx1MDkyOFx1MDkzNVx1MDkwMlx1MDkyY1x1MDkzMHxcdTA5MjhcdTA5MzVcLj98XHUwOTI2XHUwOTNmXHUwOTM4XHUwOTJlXHUwOTRkXHUwOTJjXHUwOTMwfFx1MDkyNlx1MDkzZlx1MDkzOFx1MDkwMlx1MDkyY1x1MDkzMHxcdTA5MjZcdTA5''@;'; put 'put ''M2ZcdTA5MzhcLj8pL2ksbW9udGhzU3RyaWN0UmVnZXg6L14oXHUwOTFjXHUwOTI4XHUwOTM1XHUwOTMwXHUwOTQwP3xcdTA5MmJcdTA5M2NcdTA5MzBcdTA5MzVcdTA5MzBcdTA5NDB8XHUwOTJiXHUwOTMwXHUwOTM1XHUwOTMwXHUwOTQwP3xcdTA5MmVcdTA5M2VcdTA5MzBcdTA5NGRcdTA5''@;'; put 'put ''MWE/fFx1MDkwNVx1MDkyYVx1MDk0ZFx1MDkzMFx1MDk0OFx1MDkzMj98XHUwOTJlXHUwOTA4P3xcdTA5MWNcdTA5NDJcdTA5Mjg/fFx1MDkxY1x1MDk0MVx1MDkzMlx1MDkzZVx1MDkwOD98XHUwOTA1XHUwOTE3XHUwOTM4XHUwOTRkXHUwOTI0P3xcdTA5MzhcdTA5M2ZcdTA5MjRcdTA5MmVc''@;'; put 'put ''dTA5NGRcdTA5MmNcdTA5MzB8XHUwOTM4XHUwOTNmXHUwOTI0XHUwOTAyXHUwOTJjXHUwOTMwfFx1MDkzOFx1MDkzZlx1MDkyND9cLj98XHUwOTA1XHUwOTE1XHUwOTRkXHUwOTFmXHUwOTQyXHUwOTJjXHUwOTMwfFx1MDkwNVx1MDkxNVx1MDk0ZFx1MDkxZlx1MDk0MlwuP3xcdTA5MjhcdTA5''@;'; put 'put ''MzVcdTA5MmVcdTA5NGRcdTA5MmNcdTA5MzB8XHUwOTI4XHUwOTM1XHUwOTAyXHUwOTJjXHUwOTMwP3xcdTA5MjZcdTA5M2ZcdTA5MzhcdTA5MmVcdTA5NGRcdTA5MmNcdTA5MzB8XHUwOTI2XHUwOTNmXHUwOTM4XHUwOTAyXHUwOTJjXHUwOTMwPykvaSxtb250aHNTaG9ydFN0cmljdFJlZ2V4''@;'; put 'put ''Oi9eKFx1MDkxY1x1MDkyOFwuP3xcdTA5MmJcdTA5M2NcdTA5MzBcLj98XHUwOTJlXHUwOTNlXHUwOTMwXHUwOTRkXHUwOTFhP3xcdTA5MDVcdTA5MmFcdTA5NGRcdTA5MzBcdTA5NDhcLj98XHUwOTJlXHUwOTA4P3xcdTA5MWNcdTA5NDJcdTA5Mjg/fFx1MDkxY1x1MDk0MVx1MDkzMlwuP3xc''@;'; put 'put ''dTA5MDVcdTA5MTdcLj98XHUwOTM4XHUwOTNmXHUwOTI0XC4/fFx1MDkwNVx1MDkxNVx1MDk0ZFx1MDkxZlx1MDk0MlwuP3xcdTA5MjhcdTA5MzVcLj98XHUwOTI2XHUwOTNmXHUwOTM4XC4/KS9pLGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwOTA2XHUwOTFjXSBMVCIsbmV4dERheToiW1x1MDkx''@;'; put 'put ''NVx1MDkzMl0gTFQiLG5leHRXZWVrOiJkZGRkLCBMVCIsbGFzdERheToiW1x1MDkxNVx1MDkzMl0gTFQiLGxhc3RXZWVrOiJbXHUwOTJhXHUwOTNmXHUwOTFiXHUwOTMyXHUwOTQ3XSBkZGRkLCBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgXHUwOTJlXHUwOTQ3''@;'; put 'put ''XHUwOTAyIixwYXN0OiIlcyBcdTA5MmFcdTA5MzlcdTA5MzJcdTA5NDciLHM6Ilx1MDkxNVx1MDk0MVx1MDkxYiBcdTA5MzlcdTA5NDAgXHUwOTE1XHUwOTRkXHUwOTM3XHUwOTIzIixzczoiJWQgXHUwOTM4XHUwOTQ3XHUwOTE1XHUwOTAyXHUwOTIxIixtOiJcdTA5MGZcdTA5MTUgXHUwOTJl''@;'; put 'put ''XHUwOTNmXHUwOTI4XHUwOTFmIixtbToiJWQgXHUwOTJlXHUwOTNmXHUwOTI4XHUwOTFmIixoOiJcdTA5MGZcdTA5MTUgXHUwOTE4XHUwOTAyXHUwOTFmXHUwOTNlIixoaDoiJWQgXHUwOTE4XHUwOTAyXHUwOTFmXHUwOTQ3IixkOiJcdTA5MGZcdTA5MTUgXHUwOTI2XHUwOTNmXHUwOTI4Iixk''@;'; put 'put ''ZDoiJWQgXHUwOTI2XHUwOTNmXHUwOTI4IixNOiJcdTA5MGZcdTA5MTUgXHUwOTJlXHUwOTM5XHUwOTQwXHUwOTI4XHUwOTQ3IixNTToiJWQgXHUwOTJlXHUwOTM5XHUwOTQwXHUwOTI4XHUwOTQ3Iix5OiJcdTA5MGZcdTA5MTUgXHUwOTM1XHUwOTMwXHUwOTRkXHUwOTM3Iix5eToiJWQgXHUw''@;'; put 'put ''OTM1XHUwOTMwXHUwOTRkXHUwOTM3In0scHJlcGFyc2U6ZnVuY3Rpb24oRil7cmV0dXJuIEYucmVwbGFjZSgvW1x1MDk2N1x1MDk2OFx1MDk2OVx1MDk2YVx1MDk2Ylx1MDk2Y1x1MDk2ZFx1MDk2ZVx1MDk2Zlx1MDk2Nl0vZyxmdW5jdGlvbihPKXtyZXR1cm4gZ1tPXX0pfSxwb3N0Zm9ybWF0''@;'; put 'put ''OmZ1bmN0aW9uKEYpe3JldHVybiBGLnJlcGxhY2UoL1xkL2csZnVuY3Rpb24oTyl7cmV0dXJuIF9bT119KX0sbWVyaWRpZW1QYXJzZTovXHUwOTMwXHUwOTNlXHUwOTI0fFx1MDkzOFx1MDk0MVx1MDkyY1x1MDkzOXxcdTA5MjZcdTA5NGJcdTA5MmFcdTA5MzlcdTA5MzB8XHUwOTM2XHUwOTNl''@;'; put 'put ''XHUwOTJlLyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24oRixPKXtyZXR1cm4gMTI9PT1GJiYoRj0wKSwiXHUwOTMwXHUwOTNlXHUwOTI0Ij09PU8/Rjw0P0Y6RisxMjoiXHUwOTM4XHUwOTQxXHUwOTJjXHUwOTM5Ij09PU8/RjoiXHUwOTI2XHUwOTRiXHUwOTJhXHUwOTM5XHUwOTMwIj09PU8/Rj49''@;'; put 'put ''MTA/RjpGKzEyOiJcdTA5MzZcdTA5M2VcdTA5MmUiPT09Tz9GKzEyOnZvaWQgMH0sbWVyaWRpZW06ZnVuY3Rpb24oRixPLHope3JldHVybiBGPDQ/Ilx1MDkzMFx1MDkzZVx1MDkyNCI6RjwxMD8iXHUwOTM4XHUwOTQxXHUwOTJjXHUwOTM5IjpGPDE3PyJcdTA5MjZcdTA5NGJcdTA5MmFcdTA5''@;'; put 'put ''MzlcdTA5MzAiOkY8MjA/Ilx1MDkzNlx1MDkzZVx1MDkyZSI6Ilx1MDkzMFx1MDkzZVx1MDkyNCJ9LHdlZWs6e2RvdzowLGRveTo2fX0pfSh5KDk3NTg2KSl9LDkxOTU3OmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBfKEIsdyxQKXt2YXIgRj1C''@;'; put 'put ''KyIgIjtzd2l0Y2goUCl7Y2FzZSJzcyI6cmV0dXJuIEYrKDE9PT1CPyJzZWt1bmRhIjoyPT09Qnx8Mz09PUJ8fDQ9PT1CPyJzZWt1bmRlIjoic2VrdW5kaSIpO2Nhc2UibSI6cmV0dXJuIHc/ImplZG5hIG1pbnV0YSI6ImplZG5lIG1pbnV0ZSI7Y2FzZSJtbSI6cmV0dXJuIEYrKDE9PT1CPyJt''@;'; put 'put ''aW51dGEiOjI9PT1CfHwzPT09Qnx8ND09PUI/Im1pbnV0ZSI6Im1pbnV0YSIpO2Nhc2UiaCI6cmV0dXJuIHc/ImplZGFuIHNhdCI6ImplZG5vZyBzYXRhIjtjYXNlImhoIjpyZXR1cm4gRisoMT09PUI/InNhdCI6Mj09PUJ8fDM9PT1CfHw0PT09Qj8ic2F0YSI6InNhdGkiKTtjYXNlImRkIjpy''@;'; put 'put ''ZXR1cm4gRisoMT09PUI/ImRhbiI6ImRhbmEiKTtjYXNlIk1NIjpyZXR1cm4gRisoMT09PUI/Im1qZXNlYyI6Mj09PUJ8fDM9PT1CfHw0PT09Qj8ibWplc2VjYSI6Im1qZXNlY2kiKTtjYXNlInl5IjpyZXR1cm4gRisoMT09PUI/ImdvZGluYSI6Mj09PUJ8fDM9PT1CfHw0PT09Qj8iZ29kaW5l''@;'; put 'put ''IjoiZ29kaW5hIil9fUkuZGVmaW5lTG9jYWxlKCJociIse21vbnRoczp7Zm9ybWF0OiJzaWplXHUwMTBkbmphX3ZlbGphXHUwMTBkZV9vXHUwMTdldWprYV90cmF2bmphX3N2aWJuamFfbGlwbmphX3NycG5qYV9rb2xvdm96YV9ydWpuYV9saXN0b3BhZGFfc3R1ZGVub2dhX3Byb3NpbmNhIi5z''@;'; put 'put ''cGxpdCgiXyIpLHN0YW5kYWxvbmU6InNpamVcdTAxMGRhbmpfdmVsamFcdTAxMGRhX29cdTAxN2V1amFrX3RyYXZhbmpfc3ZpYmFual9saXBhbmpfc3JwYW5qX2tvbG92b3pfcnVqYW5fbGlzdG9wYWRfc3R1ZGVuaV9wcm9zaW5hYyIuc3BsaXQoIl8iKX0sbW9udGhzU2hvcnQ6InNpai5fdmVs''@;'; put 'put ''ai5fb1x1MDE3ZXUuX3RyYS5fc3ZpLl9saXAuX3NycC5fa29sLl9ydWouX2xpcy5fc3R1Ll9wcm8uIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6Im5lZGplbGphX3BvbmVkamVsamFrX3V0b3Jha19zcmlqZWRhX1x1MDEwZGV0dnJ0YWtfcGV0YWtfc3Vib3RhIi5z''@;'; put 'put ''cGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Im5lZC5fcG9uLl91dG8uX3NyaS5fXHUwMTBkZXQuX3BldC5fc3ViLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoibmVfcG9fdXRfc3JfXHUwMTBkZV9wZV9zdSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6''@;'; put 'put ''e0xUOiJIOm1tIixMVFM6Ikg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJEbyBNTU1NIFlZWVkiLExMTDoiRG8gTU1NTSBZWVlZIEg6bW0iLExMTEw6ImRkZGQsIERvIE1NTU0gWVlZWSBIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltkYW5hcyB1XSBMVCIsbmV4dERheToiW3N1dHJhIHVd''@;'; put 'put ''IExUIixuZXh0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6cmV0dXJuIlt1XSBbbmVkamVsanVdIFt1XSBMVCI7Y2FzZSAzOnJldHVybiJbdV0gW3NyaWplZHVdIFt1XSBMVCI7Y2FzZSA2OnJldHVybiJbdV0gW3N1Ym90dV0gW3VdIExUIjtjYXNlIDE6Y2FzZSAy''@;'; put 'put ''OmNhc2UgNDpjYXNlIDU6cmV0dXJuIlt1XSBkZGRkIFt1XSBMVCJ9fSxsYXN0RGF5OiJbanVcdTAxMGRlciB1XSBMVCIsbGFzdFdlZWs6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAwOnJldHVybiJbcHJvXHUwMTYxbHVdIFtuZWRqZWxqdV0gW3VdIExUIjtjYXNlIDM6cmV0''@;'; put 'put ''dXJuIltwcm9cdTAxNjFsdV0gW3NyaWplZHVdIFt1XSBMVCI7Y2FzZSA2OnJldHVybiJbcHJvXHUwMTYxbGVdIFtzdWJvdGVdIFt1XSBMVCI7Y2FzZSAxOmNhc2UgMjpjYXNlIDQ6Y2FzZSA1OnJldHVybiJbcHJvXHUwMTYxbGldIGRkZGQgW3VdIExUIn19LHNhbWVFbHNlOiJMIn0scmVsYXRp''@;'; put 'put ''dmVUaW1lOntmdXR1cmU6InphICVzIixwYXN0OiJwcmlqZSAlcyIsczoicGFyIHNla3VuZGkiLHNzOl8sbTpfLG1tOl8saDpfLGhoOl8sZDoiZGFuIixkZDpfLE06Im1qZXNlYyIsTU06Xyx5OiJnb2RpbnUiLHl5Ol99LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5h''@;'; put 'put ''bDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6N319KX0oeSg5NzU4NikpfSw0ODkyODpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7dmFyIF89InZhc1x4ZTFybmFwIGhceGU5dGZcdTAxNTFuIGtlZGRlbiBzemVyZFx4ZTFuIGNzXHhmY3RceGY2cnRceGY2a1x4ZjZu''@;'; put 'put ''IHBceGU5bnRla2VuIHN6b21iYXRvbiIuc3BsaXQoIiAiKTtmdW5jdGlvbiBnKFAsRixPLHope3ZhciBOPVA7c3dpdGNoKE8pe2Nhc2UicyI6cmV0dXJuIHp8fEY/Im5ceGU5aFx4ZTFueSBtXHhlMXNvZHBlcmMiOiJuXHhlOWhceGUxbnkgbVx4ZTFzb2RwZXJjZSI7Y2FzZSJzcyI6cmV0dXJu''@;'; put 'put ''IE4rKHp8fEYpPyIgbVx4ZTFzb2RwZXJjIjoiIG1ceGUxc29kcGVyY2UiO2Nhc2UibSI6cmV0dXJuImVneSIrKHp8fEY/IiBwZXJjIjoiIHBlcmNlIik7Y2FzZSJtbSI6cmV0dXJuIE4rKHp8fEY/IiBwZXJjIjoiIHBlcmNlIik7Y2FzZSJoIjpyZXR1cm4iZWd5Iisoenx8Rj8iIFx4ZjNyYSI6''@;'; put 'put ''IiBceGYzclx4ZTFqYSIpO2Nhc2UiaGgiOnJldHVybiBOKyh6fHxGPyIgXHhmM3JhIjoiIFx4ZjNyXHhlMWphIik7Y2FzZSJkIjpyZXR1cm4iZWd5Iisoenx8Rj8iIG5hcCI6IiBuYXBqYSIpO2Nhc2UiZGQiOnJldHVybiBOKyh6fHxGPyIgbmFwIjoiIG5hcGphIik7Y2FzZSJNIjpyZXR1cm4i''@;'; put 'put ''ZWd5Iisoenx8Rj8iIGhceGYzbmFwIjoiIGhceGYzbmFwamEiKTtjYXNlIk1NIjpyZXR1cm4gTisoenx8Rj8iIGhceGYzbmFwIjoiIGhceGYzbmFwamEiKTtjYXNlInkiOnJldHVybiJlZ3kiKyh6fHxGPyIgXHhlOXYiOiIgXHhlOXZlIik7Y2FzZSJ5eSI6cmV0dXJuIE4rKHp8fEY/IiBceGU5''@;'; put 'put ''diI6IiBceGU5dmUiKX1yZXR1cm4iIn1mdW5jdGlvbiBCKFApe3JldHVybihQPyIiOiJbbVx4ZmFsdF0gIikrIlsiK19bdGhpcy5kYXkoKV0rIl0gTFRbLWtvcl0ifUkuZGVmaW5lTG9jYWxlKCJodSIse21vbnRoczoiamFudVx4ZTFyX2ZlYnJ1XHhlMXJfbVx4ZTFyY2l1c19ceGUxcHJpbGlz''@;'; put 'put ''X21ceGUxanVzX2pceGZhbml1c19qXHhmYWxpdXNfYXVndXN6dHVzX3N6ZXB0ZW1iZXJfb2t0XHhmM2Jlcl9ub3ZlbWJlcl9kZWNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiamFuLl9mZWIuX21ceGUxcmMuX1x4ZTFwci5fbVx4ZTFqLl9qXHhmYW4uX2pceGZhbC5fYXVnLl9zemVw''@;'; put 'put ''dC5fb2t0Ll9ub3YuX2RlYy4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoidmFzXHhlMXJuYXBfaFx4ZTl0Zlx1MDE1MV9rZWRkX3N6ZXJkYV9jc1x4ZmN0XHhmNnJ0XHhmNmtfcFx4ZTludGVrX3N6b21iYXQiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoidmFz''@;'; put 'put ''X2hceGU5dF9rZWRkX3N6ZV9jc1x4ZmN0X3BceGU5bl9zem8iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46InZfaF9rX3N6ZV9jc19wX3N6byIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0iLExUUzoiSDptbTpzcyIsTDoiWVlZWS5NTS5ERC4iLExMOiJZWVlZLiBNTU1NIEQu''@;'; put 'put ''IixMTEw6IllZWVkuIE1NTU0gRC4gSDptbSIsTExMTDoiWVlZWS4gTU1NTSBELiwgZGRkZCBIOm1tIn0sbWVyaWRpZW1QYXJzZTovZGV8ZHUvaSxpc1BNOmZ1bmN0aW9uKFApe3JldHVybiJ1Ij09PVAuY2hhckF0KDEpLnRvTG93ZXJDYXNlKCl9LG1lcmlkaWVtOmZ1bmN0aW9uKFAsRixPKXty''@;'; put 'put ''ZXR1cm4gUDwxMj8hMD09PU8/ImRlIjoiREUiOiEwPT09Tz8iZHUiOiJEVSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbbWFdIExUWy1rb3JdIixuZXh0RGF5OiJbaG9sbmFwXSBMVFsta29yXSIsbmV4dFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4gQi5jYWxsKHRoaXMsITApfSxsYXN0RGF5OiJbdGVn''@;'; put 'put ''bmFwXSBMVFsta29yXSIsbGFzdFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4gQi5jYWxsKHRoaXMsITEpfSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBtXHhmYWx2YSIscGFzdDoiJXMiLHM6ZyxzczpnLG06ZyxtbTpnLGg6ZyxoaDpnLGQ6ZyxkZDpnLE06ZyxNTTpnLHk6''@;'; put 'put ''Zyx5eTpnfSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KHkoOTc1ODYpKX0sNTYyMTU6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJoeS1hbSIse21v''@;'; put 'put ''bnRoczp7Zm9ybWF0OiJcdTA1NzBcdTA1NzhcdTA1ODJcdTA1NzZcdTA1N2VcdTA1NjFcdTA1ODBcdTA1NmJfXHUwNTgzXHUwNTY1XHUwNTdmXHUwNTgwXHUwNTdlXHUwNTYxXHUwNTgwXHUwNTZiX1x1MDU3NFx1MDU2MVx1MDU4MFx1MDU3Zlx1MDU2Yl9cdTA1NjFcdTA1N2FcdTA1ODBcdTA1''@;'; put 'put ''NmJcdTA1NmNcdTA1NmJfXHUwNTc0XHUwNTYxXHUwNTc1XHUwNTZiXHUwNTdkXHUwNTZiX1x1MDU3MFx1MDU3OFx1MDU4Mlx1MDU3Nlx1MDU2Ylx1MDU3ZFx1MDU2Yl9cdTA1NzBcdTA1NzhcdTA1ODJcdTA1NmNcdTA1NmJcdTA1N2RcdTA1NmJfXHUwNTg1XHUwNTYzXHUwNTc4XHUwNTdkXHUw''@;'; put 'put ''NTdmXHUwNTc4XHUwNTdkXHUwNTZiX1x1MDU3ZFx1MDU2NVx1MDU3YVx1MDU3Zlx1MDU2NVx1MDU3NFx1MDU2Mlx1MDU2NVx1MDU4MFx1MDU2Yl9cdTA1NzBcdTA1NzhcdTA1NmZcdTA1N2ZcdTA1NjVcdTA1NzRcdTA1NjJcdTA1NjVcdTA1ODBcdTA1NmJfXHUwNTc2XHUwNTc4XHUwNTc1XHUw''@;'; put 'put ''NTY1XHUwNTc0XHUwNTYyXHUwNTY1XHUwNTgwXHUwNTZiX1x1MDU2NFx1MDU2NVx1MDU2Zlx1MDU3Zlx1MDU2NVx1MDU3NFx1MDU2Mlx1MDU2NVx1MDU4MFx1MDU2YiIuc3BsaXQoIl8iKSxzdGFuZGFsb25lOiJcdTA1NzBcdTA1NzhcdTA1ODJcdTA1NzZcdTA1N2VcdTA1NjFcdTA1ODBfXHUw''@;'; put 'put ''NTgzXHUwNTY1XHUwNTdmXHUwNTgwXHUwNTdlXHUwNTYxXHUwNTgwX1x1MDU3NFx1MDU2MVx1MDU4MFx1MDU3Zl9cdTA1NjFcdTA1N2FcdTA1ODBcdTA1NmJcdTA1NmNfXHUwNTc0XHUwNTYxXHUwNTc1XHUwNTZiXHUwNTdkX1x1MDU3MFx1MDU3OFx1MDU4Mlx1MDU3Nlx1MDU2Ylx1MDU3ZF9c''@;'; put 'put ''dTA1NzBcdTA1NzhcdTA1ODJcdTA1NmNcdTA1NmJcdTA1N2RfXHUwNTg1XHUwNTYzXHUwNTc4XHUwNTdkXHUwNTdmXHUwNTc4XHUwNTdkX1x1MDU3ZFx1MDU2NVx1MDU3YVx1MDU3Zlx1MDU2NVx1MDU3NFx1MDU2Mlx1MDU2NVx1MDU4MF9cdTA1NzBcdTA1NzhcdTA1NmZcdTA1N2ZcdTA1NjVc''@;'; put 'put ''dTA1NzRcdTA1NjJcdTA1NjVcdTA1ODBfXHUwNTc2XHUwNTc4XHUwNTc1XHUwNTY1XHUwNTc0XHUwNTYyXHUwNTY1XHUwNTgwX1x1MDU2NFx1MDU2NVx1MDU2Zlx1MDU3Zlx1MDU2NVx1MDU3NFx1MDU2Mlx1MDU2NVx1MDU4MCIuc3BsaXQoIl8iKX0sbW9udGhzU2hvcnQ6Ilx1MDU3MFx1MDU3''@;'; put 'put ''Nlx1MDU3ZV9cdTA1ODNcdTA1N2ZcdTA1ODBfXHUwNTc0XHUwNTgwXHUwNTdmX1x1MDU2MVx1MDU3YVx1MDU4MF9cdTA1NzRcdTA1NzVcdTA1N2RfXHUwNTcwXHUwNTc2XHUwNTdkX1x1MDU3MFx1MDU2Y1x1MDU3ZF9cdTA1ODVcdTA1NjNcdTA1N2RfXHUwNTdkXHUwNTdhXHUwNTdmX1x1MDU3''@;'; put 'put ''MFx1MDU2Zlx1MDU3Zl9cdTA1NzZcdTA1NzRcdTA1NjJfXHUwNTY0XHUwNTZmXHUwNTdmIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTA1NmZcdTA1NmJcdTA1ODBcdTA1NjFcdTA1NmZcdTA1NmJfXHUwNTY1XHUwNTgwXHUwNTZmXHUwNTc4XHUwNTgyXHUwNTc3XHUwNTYxXHUwNTYyXHUwNTY5''@;'; put 'put ''XHUwNTZiX1x1MDU2NVx1MDU4MFx1MDU2NVx1MDU4NFx1MDU3N1x1MDU2MVx1MDU2Mlx1MDU2OVx1MDU2Yl9cdTA1NzlcdTA1NzhcdTA1ODBcdTA1NjVcdTA1ODRcdTA1NzdcdTA1NjFcdTA1NjJcdTA1NjlcdTA1NmJfXHUwNTcwXHUwNTZiXHUwNTc2XHUwNTYzXHUwNTc3XHUwNTYxXHUwNTYy''@;'; put 'put ''XHUwNTY5XHUwNTZiX1x1MDU3OFx1MDU4Mlx1MDU4MFx1MDU2Mlx1MDU2MVx1MDU2OV9cdTA1NzdcdTA1NjFcdTA1NjJcdTA1NjFcdTA1NjkiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwNTZmXHUwNTgwXHUwNTZmX1x1MDU2NVx1MDU4MFx1MDU2Zl9cdTA1NjVcdTA1ODBcdTA1ODRf''@;'; put 'put ''XHUwNTc5XHUwNTgwXHUwNTg0X1x1MDU3MFx1MDU3Nlx1MDU2M19cdTA1NzhcdTA1ODJcdTA1ODBcdTA1NjJfXHUwNTc3XHUwNTYyXHUwNTY5Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA1NmZcdTA1ODBcdTA1NmZfXHUwNTY1XHUwNTgwXHUwNTZmX1x1MDU2NVx1MDU4MFx1MDU4NF9c''@;'; put 'put ''dTA1NzlcdTA1ODBcdTA1ODRfXHUwNTcwXHUwNTc2XHUwNTYzX1x1MDU3OFx1MDU4Mlx1MDU4MFx1MDU2Ml9cdTA1NzdcdTA1NjJcdTA1NjkiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQgTU1NTSBZWVlZ''@;'; put 'put ''IFx1MDU2OS4iLExMTDoiRCBNTU1NIFlZWVkgXHUwNTY5LiwgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIFx1MDU2OS4sIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA1NjFcdTA1NzVcdTA1N2RcdTA1ODVcdTA1ODBdIExUIixuZXh0RGF5OiJbXHUwNTdlXHUwNTYxXHUw''@;'; put 'put ''NTcyXHUwNTY4XSBMVCIsbGFzdERheToiW1x1MDU2NVx1MDU4MFx1MDU2NVx1MDU2Zl0gTFQiLG5leHRXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuImRkZGQgW1x1MDU4NVx1MDU4MFx1MDU2OCBcdTA1NmFcdTA1NjFcdTA1NzRcdTA1NjhdIExUIn0sbGFzdFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4i''@;'; put 'put ''W1x1MDU2MVx1MDU3Nlx1MDU4MVx1MDU2MVx1MDU2ZV0gZGRkZCBbXHUwNTg1XHUwNTgwXHUwNTY4IFx1MDU2YVx1MDU2MVx1MDU3NFx1MDU2OF0gTFQifSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBcdTA1NzBcdTA1NjVcdTA1N2ZcdTA1NzgiLHBhc3Q6IiVzIFx1''@;'; put 'put ''MDU2MVx1MDU3Y1x1MDU2MVx1MDU3YiIsczoiXHUwNTc0XHUwNTZiIFx1MDU4NFx1MDU2MVx1MDU3Nlx1MDU2YiBcdTA1N2VcdTA1NjFcdTA1NzVcdTA1ODBcdTA1NmZcdTA1NzVcdTA1NjFcdTA1NzYiLHNzOiIlZCBcdTA1N2VcdTA1NjFcdTA1NzVcdTA1ODBcdTA1NmZcdTA1NzVcdTA1NjFc''@;'; put 'put ''dTA1NzYiLG06Ilx1MDU4MFx1MDU3OFx1MDU3YVx1MDU2NSIsbW06IiVkIFx1MDU4MFx1MDU3OFx1MDU3YVx1MDU2NSIsaDoiXHUwNTZhXHUwNTYxXHUwNTc0IixoaDoiJWQgXHUwNTZhXHUwNTYxXHUwNTc0IixkOiJcdTA1ODVcdTA1ODAiLGRkOiIlZCBcdTA1ODVcdTA1ODAiLE06Ilx1MDU2''@;'; put 'put ''MVx1MDU3NFx1MDU2Ylx1MDU3ZCIsTU06IiVkIFx1MDU2MVx1MDU3NFx1MDU2Ylx1MDU3ZCIseToiXHUwNTdmXHUwNTYxXHUwNTgwXHUwNTZiIix5eToiJWQgXHUwNTdmXHUwNTYxXHUwNTgwXHUwNTZiIn0sbWVyaWRpZW1QYXJzZTovXHUwNTYzXHUwNTZiXHUwNTc3XHUwNTY1XHUwNTgwXHUw''@;'; put 'put ''NTdlXHUwNTYxfFx1MDU2MVx1MDU3Y1x1MDU2MVx1MDU3ZVx1MDU3OFx1MDU3Zlx1MDU3ZVx1MDU2MXxcdTA1ODFcdTA1NjVcdTA1ODBcdTA1NjVcdTA1NmZcdTA1N2VcdTA1NjF8XHUwNTY1XHUwNTgwXHUwNTY1XHUwNTZmXHUwNTc4XHUwNTc1XHUwNTYxXHUwNTc2Lyxpc1BNOmZ1bmN0aW9u''@;'; put 'put ''KGcpe3JldHVybi9eKFx1MDU4MVx1MDU2NVx1MDU4MFx1MDU2NVx1MDU2Zlx1MDU3ZVx1MDU2MXxcdTA1NjVcdTA1ODBcdTA1NjVcdTA1NmZcdTA1NzhcdTA1NzVcdTA1NjFcdTA1NzYpJC8udGVzdChnKX0sbWVyaWRpZW06ZnVuY3Rpb24oZyl7cmV0dXJuIGc8ND8iXHUwNTYzXHUwNTZiXHUw''@;'; put 'put ''NTc3XHUwNTY1XHUwNTgwXHUwNTdlXHUwNTYxIjpnPDEyPyJcdTA1NjFcdTA1N2NcdTA1NjFcdTA1N2VcdTA1NzhcdTA1N2ZcdTA1N2VcdTA1NjEiOmc8MTc/Ilx1MDU4MVx1MDU2NVx1MDU4MFx1MDU2NVx1MDU2Zlx1MDU3ZVx1MDU2MSI6Ilx1MDU2NVx1MDU4MFx1MDU2NVx1MDU2Zlx1MDU3''@;'; put 'put ''OFx1MDU3NVx1MDU2MVx1MDU3NiJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn18XGR7MSwyfS0oXHUwNTZiXHUwNTc2fFx1MDU4MFx1MDU2NCkvLG9yZGluYWw6ZnVuY3Rpb24oZyxCKXtzd2l0Y2goQil7Y2FzZSJEREQiOmNhc2UidyI6Y2FzZSJXIjpjYXNlIkRERG8iOnJldHVy''@;'; put 'put ''biAxPT09Zz9nKyItXHUwNTZiXHUwNTc2IjpnKyItXHUwNTgwXHUwNTY0IjtkZWZhdWx0OnJldHVybiBnfX0sd2Vlazp7ZG93OjEsZG95Ojd9fSl9KHkoOTc1ODYpKX0sNTg2OmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgiaWQiLHtt''@;'; put 'put ''b250aHM6IkphbnVhcmlfRmVicnVhcmlfTWFyZXRfQXByaWxfTWVpX0p1bmlfSnVsaV9BZ3VzdHVzX1NlcHRlbWJlcl9Pa3RvYmVyX05vdmVtYmVyX0Rlc2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW5fRmViX01hcl9BcHJfTWVpX0p1bl9KdWxfQWd0X1NlcF9Pa3RfTm92X0Rl''@;'; put 'put ''cyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiTWluZ2d1X1NlbmluX1NlbGFzYV9SYWJ1X0thbWlzX0p1bWF0X1NhYnR1Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ik1pbl9TZW5fU2VsX1JhYl9LYW1fSnVtX1NhYiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiTWdfU25fU2xfUmJfS21fSm1f''@;'; put 'put ''U2IiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISC5tbSIsTFRTOiJISC5tbS5zcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIFtwdWt1bF0gSEgubW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIFtwdWt1bF0gSEgubW0ifSxtZXJp''@;'; put 'put ''ZGllbVBhcnNlOi9wYWdpfHNpYW5nfHNvcmV8bWFsYW0vLG1lcmlkaWVtSG91cjpmdW5jdGlvbihnLEIpe3JldHVybiAxMj09PWcmJihnPTApLCJwYWdpIj09PUI/Zzoic2lhbmciPT09Qj9nPj0xMT9nOmcrMTI6InNvcmUiPT09Qnx8Im1hbGFtIj09PUI/ZysxMjp2b2lkIDB9LG1lcmlkaWVt''@;'; put 'put ''OmZ1bmN0aW9uKGcsQix3KXtyZXR1cm4gZzwxMT8icGFnaSI6ZzwxNT8ic2lhbmciOmc8MTk/InNvcmUiOiJtYWxhbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbSGFyaSBpbmkgcHVrdWxdIExUIixuZXh0RGF5OiJbQmVzb2sgcHVrdWxdIExUIixuZXh0V2VlazoiZGRkZCBbcHVrdWxdIExUIixs''@;'; put 'put ''YXN0RGF5OiJbS2VtYXJpbiBwdWt1bF0gTFQiLGxhc3RXZWVrOiJkZGRkIFtsYWx1IHB1a3VsXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiZGFsYW0gJXMiLHBhc3Q6IiVzIHlhbmcgbGFsdSIsczoiYmViZXJhcGEgZGV0aWsiLHNzOiIlZCBkZXRpayIsbToic2Vt''@;'; put 'put ''ZW5pdCIsbW06IiVkIG1lbml0IixoOiJzZWphbSIsaGg6IiVkIGphbSIsZDoic2VoYXJpIixkZDoiJWQgaGFyaSIsTToic2VidWxhbiIsTU06IiVkIGJ1bGFuIix5OiJzZXRhaHVuIix5eToiJWQgdGFodW4ifSx3ZWVrOntkb3c6MCxkb3k6Nn19KX0oeSg5NzU4NikpfSw5MDIxMTpmdW5jdGlv''@;'; put 'put ''bih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gXyh3KXtyZXR1cm4gdyUxMDA9PTExfHx3JTEwIT0xfWZ1bmN0aW9uIGcodyxQLEYsTyl7dmFyIHo9dysiICI7c3dpdGNoKEYpe2Nhc2UicyI6cmV0dXJuIFB8fE8/Im5va2tyYXIgc2VrXHhmYW5kdXIiOiJub2tr''@;'; put 'put ''cnVtIHNla1x4ZmFuZHVtIjtjYXNlInNzIjpyZXR1cm4gXyh3KT96KyhQfHxPPyJzZWtceGZhbmR1ciI6InNla1x4ZmFuZHVtIik6eisic2VrXHhmYW5kYSI7Y2FzZSJtIjpyZXR1cm4gUD8ibVx4ZWRuXHhmYXRhIjoibVx4ZWRuXHhmYXR1IjtjYXNlIm1tIjpyZXR1cm4gXyh3KT96KyhQfHxP''@;'; put 'put ''PyJtXHhlZG5ceGZhdHVyIjoibVx4ZWRuXHhmYXR1bSIpOlA/eisibVx4ZWRuXHhmYXRhIjp6KyJtXHhlZG5ceGZhdHUiO2Nhc2UiaGgiOnJldHVybiBfKHcpP3orKFB8fE8/ImtsdWtrdXN0dW5kaXIiOiJrbHVra3VzdHVuZHVtIik6eisia2x1a2t1c3R1bmQiO2Nhc2UiZCI6cmV0dXJuIFA/''@;'; put 'put ''ImRhZ3VyIjpPPyJkYWciOiJkZWdpIjtjYXNlImRkIjpyZXR1cm4gXyh3KT9QP3orImRhZ2FyIjp6KyhPPyJkYWdhIjoiZFx4ZjZndW0iKTpQP3orImRhZ3VyIjp6KyhPPyJkYWciOiJkZWdpIik7Y2FzZSJNIjpyZXR1cm4gUD8ibVx4ZTFudVx4ZjB1ciI6Tz8ibVx4ZTFudVx4ZjAiOiJtXHhl''@;'; put 'put ''MW51XHhmMGkiO2Nhc2UiTU0iOnJldHVybiBfKHcpP1A/eisibVx4ZTFudVx4ZjBpciI6eisoTz8ibVx4ZTFudVx4ZjBpIjoibVx4ZTFudVx4ZjB1bSIpOlA/eisibVx4ZTFudVx4ZjB1ciI6eisoTz8ibVx4ZTFudVx4ZjAiOiJtXHhlMW51XHhmMGkiKTtjYXNlInkiOnJldHVybiBQfHxPPyJc''@;'; put 'put ''eGUxciI6Ilx4ZTFyaSI7Y2FzZSJ5eSI6cmV0dXJuIF8odyk/eisoUHx8Tz8iXHhlMXIiOiJceGUxcnVtIik6eisoUHx8Tz8iXHhlMXIiOiJceGUxcmkiKX19SS5kZWZpbmVMb2NhbGUoImlzIix7bW9udGhzOiJqYW5ceGZhYXJfZmViclx4ZmFhcl9tYXJzX2Fwclx4ZWRsX21hXHhlZF9qXHhm''@;'; put 'put ''YW5ceGVkX2pceGZhbFx4ZWRfXHhlMWdceGZhc3Rfc2VwdGVtYmVyX29rdFx4ZjNiZXJfblx4ZjN2ZW1iZXJfZGVzZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Imphbl9mZWJfbWFyX2Fwcl9tYVx4ZWRfalx4ZmFuX2pceGZhbF9ceGUxZ1x4ZmFfc2VwX29rdF9uXHhmM3ZfZGVzIi5z''@;'; put 'put ''cGxpdCgiXyIpLHdlZWtkYXlzOiJzdW5udWRhZ3VyX21ceGUxbnVkYWd1cl9ceGZlcmlceGYwanVkYWd1cl9taVx4ZjB2aWt1ZGFndXJfZmltbXR1ZGFndXJfZlx4ZjZzdHVkYWd1cl9sYXVnYXJkYWd1ciIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJzdW5fbVx4ZTFuX1x4ZmVyaV9taVx4''@;'; put 'put ''ZjBfZmltX2ZceGY2c19sYXUiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlN1X01ceGUxX1x4ZGVyX01pX0ZpX0ZceGY2X0xhIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIsTFRTOiJIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRC4gTU1NTSBZWVlZIixMTEw6IkQu''@;'; put 'put ''IE1NTU0gWVlZWSBba2wuXSBIOm1tIixMTExMOiJkZGRkLCBELiBNTU1NIFlZWVkgW2tsLl0gSDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHhlZCBkYWcga2wuXSBMVCIsbmV4dERheToiW1x4ZTEgbW9yZ3VuIGtsLl0gTFQiLG5leHRXZWVrOiJkZGRkIFtrbC5dIExUIixsYXN0RGF5OiJb''@;'; put 'put ''XHhlZCBnXHhlNnIga2wuXSBMVCIsbGFzdFdlZWs6IltzXHhlZFx4ZjBhc3RhXSBkZGRkIFtrbC5dIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJlZnRpciAlcyIscGFzdDoiZnlyaXIgJXMgc1x4ZWRceGYwYW4iLHM6ZyxzczpnLG06ZyxtbTpnLGg6ImtsdWtrdXN0''@;'; put 'put ''dW5kIixoaDpnLGQ6ZyxkZDpnLE06ZyxNTTpnLHk6Zyx5eTpnfSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KHkoOTc1ODYpKX0sMjIzNDA6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJp''@;'; put 'put ''Y3QiO0kuZGVmaW5lTG9jYWxlKCJpdC1jaCIse21vbnRoczoiZ2VubmFpb19mZWJicmFpb19tYXJ6b19hcHJpbGVfbWFnZ2lvX2dpdWdub19sdWdsaW9fYWdvc3RvX3NldHRlbWJyZV9vdHRvYnJlX25vdmVtYnJlX2RpY2VtYnJlIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJnZW5fZmViX21h''@;'; put 'put ''cl9hcHJfbWFnX2dpdV9sdWdfYWdvX3NldF9vdHRfbm92X2RpYyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiZG9tZW5pY2FfbHVuZWRceGVjX21hcnRlZFx4ZWNfbWVyY29sZWRceGVjX2dpb3ZlZFx4ZWNfdmVuZXJkXHhlY19zYWJhdG8iLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiZG9tX2x1''@;'; put 'put ''bl9tYXJfbWVyX2dpb192ZW5fc2FiIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJkb19sdV9tYV9tZV9naV92ZV9zYSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1N''@;'; put 'put ''IFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW09nZ2kgYWxsZV0gTFQiLG5leHREYXk6IltEb21hbmkgYWxsZV0gTFQiLG5leHRXZWVrOiJkZGRkIFthbGxlXSBMVCIsbGFzdERheToiW0llcmkgYWxsZV0gTFQiLGxhc3RXZWVr''@;'; put 'put ''OmZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLmRheSgpPyJbbGEgc2NvcnNhXSBkZGRkIFthbGxlXSBMVCI6IltsbyBzY29yc29dIGRkZGQgW2FsbGVdIExUIn0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpmdW5jdGlvbihnKXtyZXR1cm4oL15bMC05XS4rJC8udGVzdChn''@;'; put 'put ''KT8idHJhIjoiaW4iKSsiICIrZ30scGFzdDoiJXMgZmEiLHM6ImFsY3VuaSBzZWNvbmRpIixzczoiJWQgc2Vjb25kaSIsbToidW4gbWludXRvIixtbToiJWQgbWludXRpIixoOiJ1bidvcmEiLGhoOiIlZCBvcmUiLGQ6InVuIGdpb3JubyIsZGQ6IiVkIGdpb3JuaSIsTToidW4gbWVzZSIsTU06''@;'; put 'put ''IiVkIG1lc2kiLHk6InVuIGFubm8iLHl5OiIlZCBhbm5pIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVx4YmEvLG9yZGluYWw6IiVkXHhiYSIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KHkoOTc1ODYpKX0sNzAxNzA6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBz''@;'; put 'put ''dHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJpdCIse21vbnRoczoiZ2VubmFpb19mZWJicmFpb19tYXJ6b19hcHJpbGVfbWFnZ2lvX2dpdWdub19sdWdsaW9fYWdvc3RvX3NldHRlbWJyZV9vdHRvYnJlX25vdmVtYnJlX2RpY2VtYnJlIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJnZW5fZmViX21h''@;'; put 'put ''cl9hcHJfbWFnX2dpdV9sdWdfYWdvX3NldF9vdHRfbm92X2RpYyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiZG9tZW5pY2FfbHVuZWRceGVjX21hcnRlZFx4ZWNfbWVyY29sZWRceGVjX2dpb3ZlZFx4ZWNfdmVuZXJkXHhlY19zYWJhdG8iLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiZG9tX2x1''@;'; put 'put ''bl9tYXJfbWVyX2dpb192ZW5fc2FiIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJkb19sdV9tYV9tZV9naV92ZV9zYSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1N''@;'; put 'put ''IFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheTpmdW5jdGlvbigpe3JldHVybiJbT2dnaSBhIisodGhpcy5ob3VycygpPjE/ImxsZSAiOjA9PT10aGlzLmhvdXJzKCk/IiAiOiJsbCciKSsiXUxUIn0sbmV4dERheTpmdW5jdGlvbigp''@;'; put 'put ''e3JldHVybiJbRG9tYW5pIGEiKyh0aGlzLmhvdXJzKCk+MT8ibGxlICI6MD09PXRoaXMuaG91cnMoKT8iICI6ImxsJyIpKyJdTFQifSxuZXh0V2VlazpmdW5jdGlvbigpe3JldHVybiJkZGRkIFthIisodGhpcy5ob3VycygpPjE/ImxsZSAiOjA9PT10aGlzLmhvdXJzKCk/IiAiOiJsbCciKSsi''@;'; put 'put ''XUxUIn0sbGFzdERheTpmdW5jdGlvbigpe3JldHVybiJbSWVyaSBhIisodGhpcy5ob3VycygpPjE/ImxsZSAiOjA9PT10aGlzLmhvdXJzKCk/IiAiOiJsbCciKSsiXUxUIn0sbGFzdFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMuZGF5KCk/IltMYSBzY29yc2FdIGRkZGQgW2EiKyh0''@;'; put 'put ''aGlzLmhvdXJzKCk+MT8ibGxlICI6MD09PXRoaXMuaG91cnMoKT8iICI6ImxsJyIpKyJdTFQiOiJbTG8gc2NvcnNvXSBkZGRkIFthIisodGhpcy5ob3VycygpPjE/ImxsZSAiOjA9PT10aGlzLmhvdXJzKCk/IiAiOiJsbCciKSsiXUxUIn0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1''@;'; put 'put ''dHVyZToidHJhICVzIixwYXN0OiIlcyBmYSIsczoiYWxjdW5pIHNlY29uZGkiLHNzOiIlZCBzZWNvbmRpIixtOiJ1biBtaW51dG8iLG1tOiIlZCBtaW51dGkiLGg6InVuJ29yYSIsaGg6IiVkIG9yZSIsZDoidW4gZ2lvcm5vIixkZDoiJWQgZ2lvcm5pIix3OiJ1bmEgc2V0dGltYW5hIix3dzoi''@;'; put 'put ''JWQgc2V0dGltYW5lIixNOiJ1biBtZXNlIixNTToiJWQgbWVzaSIseToidW4gYW5ubyIseXk6IiVkIGFubmkifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XHhiYS8sb3JkaW5hbDoiJWRceGJhIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oeSg5NzU4NikpfSwzOTc3MDpmdW5jdGlv''@;'; put 'put ''bih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoImphIix7ZXJhczpbe3NpbmNlOiIyMDE5LTA1LTAxIixvZmZzZXQ6MSxuYW1lOiJcdTRlZTRcdTU0OGMiLG5hcnJvdzoiXHUzMmZmIixhYmJyOiJSIn0se3NpbmNlOiIxOTg5LTAxLTA4Iix1bnRpbDoi''@;'; put 'put ''MjAxOS0wNC0zMCIsb2Zmc2V0OjEsbmFtZToiXHU1ZTczXHU2MjEwIixuYXJyb3c6Ilx1MzM3YiIsYWJicjoiSCJ9LHtzaW5jZToiMTkyNi0xMi0yNSIsdW50aWw6IjE5ODktMDEtMDciLG9mZnNldDoxLG5hbWU6Ilx1NjYyZFx1NTQ4YyIsbmFycm93OiJcdTMzN2MiLGFiYnI6IlMifSx7c2lu''@;'; put 'put ''Y2U6IjE5MTItMDctMzAiLHVudGlsOiIxOTI2LTEyLTI0IixvZmZzZXQ6MSxuYW1lOiJcdTU5MjdcdTZiNjMiLG5hcnJvdzoiXHUzMzdkIixhYmJyOiJUIn0se3NpbmNlOiIxODczLTAxLTAxIix1bnRpbDoiMTkxMi0wNy0yOSIsb2Zmc2V0OjYsbmFtZToiXHU2NjBlXHU2Y2JiIixuYXJyb3c6''@;'; put 'put ''Ilx1MzM3ZSIsYWJicjoiTSJ9LHtzaW5jZToiMDAwMS0wMS0wMSIsdW50aWw6IjE4NzMtMTItMzEiLG9mZnNldDoxLG5hbWU6Ilx1ODk3Zlx1NjZhNiIsbmFycm93OiJBRCIsYWJicjoiQUQifSx7c2luY2U6IjAwMDAtMTItMzEiLHVudGlsOi0xLzAsb2Zmc2V0OjEsbmFtZToiXHU3ZDAwXHU1''@;'; put 'put ''MTQzXHU1MjRkIixuYXJyb3c6IkJDIixhYmJyOiJCQyJ9XSxlcmFZZWFyT3JkaW5hbFJlZ2V4Oi8oXHU1MTQzfFxkKylcdTVlNzQvLGVyYVllYXJPcmRpbmFsUGFyc2U6ZnVuY3Rpb24oZyxCKXtyZXR1cm4iXHU1MTQzIj09PUJbMV0/MTpwYXJzZUludChCWzFdfHxnLDEwKX0sbW9udGhzOiIx''@;'; put 'put ''XHU2NzA4XzJcdTY3MDhfM1x1NjcwOF80XHU2NzA4XzVcdTY3MDhfNlx1NjcwOF83XHU2NzA4XzhcdTY3MDhfOVx1NjcwOF8xMFx1NjcwOF8xMVx1NjcwOF8xMlx1NjcwOCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiMVx1NjcwOF8yXHU2NzA4XzNcdTY3MDhfNFx1NjcwOF81XHU2NzA4XzZc''@;'; put 'put ''dTY3MDhfN1x1NjcwOF84XHU2NzA4XzlcdTY3MDhfMTBcdTY3MDhfMTFcdTY3MDhfMTJcdTY3MDgiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1NjVlNVx1NjZkY1x1NjVlNV9cdTY3MDhcdTY2ZGNcdTY1ZTVfXHU3MDZiXHU2NmRjXHU2NWU1X1x1NmMzNFx1NjZkY1x1NjVlNV9cdTY3MjhcdTY2''@;'; put 'put ''ZGNcdTY1ZTVfXHU5MWQxXHU2NmRjXHU2NWU1X1x1NTcxZlx1NjZkY1x1NjVlNSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTY1ZTVfXHU2NzA4X1x1NzA2Yl9cdTZjMzRfXHU2NzI4X1x1OTFkMV9cdTU3MWYiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1NjVlNV9cdTY3MDhfXHU3''@;'; put 'put ''MDZiX1x1NmMzNF9cdTY3MjhfXHU5MWQxX1x1NTcxZiIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJZWVlZL01NL0REIixMTDoiWVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1IixMTEw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNSBISDpt''@;'; put 'put ''bSIsTExMTDoiWVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1IGRkZGQgSEg6bW0iLGw6IllZWVkvTU0vREQiLGxsOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTUiLGxsbDoiWVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1IEhIOm1tIixsbGxsOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTUoZGRkKSBI''@;'; put 'put ''SDptbSJ9LG1lcmlkaWVtUGFyc2U6L1x1NTM0OFx1NTI0ZHxcdTUzNDhcdTVmOGMvaSxpc1BNOmZ1bmN0aW9uKGcpe3JldHVybiJcdTUzNDhcdTVmOGMiPT09Z30sbWVyaWRpZW06ZnVuY3Rpb24oZyxCLHcpe3JldHVybiBnPDEyPyJcdTUzNDhcdTUyNGQiOiJcdTUzNDhcdTVmOGMifSxjYWxl''@;'; put 'put ''bmRhcjp7c2FtZURheToiW1x1NGVjYVx1NjVlNV0gTFQiLG5leHREYXk6IltcdTY2MGVcdTY1ZTVdIExUIixuZXh0V2VlazpmdW5jdGlvbihnKXtyZXR1cm4gZy53ZWVrKCkhPT10aGlzLndlZWsoKT8iW1x1Njc2NVx1OTAzMV1kZGRkIExUIjoiZGRkZCBMVCJ9LGxhc3REYXk6IltcdTY2Mjhc''@;'; put 'put ''dTY1ZTVdIExUIixsYXN0V2VlazpmdW5jdGlvbihnKXtyZXR1cm4gdGhpcy53ZWVrKCkhPT1nLndlZWsoKT8iW1x1NTE0OFx1OTAzMV1kZGRkIExUIjoiZGRkZCBMVCJ9LHNhbWVFbHNlOiJMIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVx1NjVlNS8sb3JkaW5hbDpmdW5jdGlv''@;'; put 'put ''bihnLEIpe3N3aXRjaChCKXtjYXNlInkiOnJldHVybiAxPT09Zz8iXHU1MTQzXHU1ZTc0IjpnKyJcdTVlNzQiO2Nhc2UiZCI6Y2FzZSJEIjpjYXNlIkRERCI6cmV0dXJuIGcrIlx1NjVlNSI7ZGVmYXVsdDpyZXR1cm4gZ319LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlc1x1NWY4YyIscGFzdDoi''@;'; put 'put ''JXNcdTUyNGQiLHM6Ilx1NjU3MFx1NzlkMiIsc3M6IiVkXHU3OWQyIixtOiIxXHU1MjA2IixtbToiJWRcdTUyMDYiLGg6IjFcdTY2NDJcdTk1OTMiLGhoOiIlZFx1NjY0Mlx1OTU5MyIsZDoiMVx1NjVlNSIsZGQ6IiVkXHU2NWU1IixNOiIxXHUzMGY2XHU2NzA4IixNTToiJWRcdTMwZjZcdTY3''@;'; put 'put ''MDgiLHk6IjFcdTVlNzQiLHl5OiIlZFx1NWU3NCJ9fSl9KHkoOTc1ODYpKX0sNzM4NzU6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJqdiIse21vbnRoczoiSmFudWFyaV9GZWJydWFyaV9NYXJldF9BcHJpbF9NZWlfSnVuaV9KdWxp''@;'; put 'put ''X0FndXN0dXNfU2VwdGVtYmVyX09rdG9iZXJfTm9wZW1iZXJfRGVzZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikphbl9GZWJfTWFyX0Fwcl9NZWlfSnVuX0p1bF9BZ3NfU2VwX09rdF9Ob3BfRGVzIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJNaW5nZ3VfU2VuZW5fU2Vsb3NvX1JlYnVf''@;'; put 'put ''S2VtaXNfSmVtdXdhaF9TZXB0dSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJNaW5fU2VuX1NlbF9SZWJfS2VtX0plbV9TZXAiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ik1nX1NuX1NsX1JiX0ttX0ptX1NwIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEgubW0iLExUUzoi''@;'; put 'put ''SEgubW0uc3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBbcHVrdWxdIEhILm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBbcHVrdWxdIEhILm1tIn0sbWVyaWRpZW1QYXJzZTovZW5qaW5nfHNpeWFuZ3xzb250ZW58bmRhbHUvLG1lcmlkaWVt''@;'; put 'put ''SG91cjpmdW5jdGlvbihnLEIpe3JldHVybiAxMj09PWcmJihnPTApLCJlbmppbmciPT09Qj9nOiJzaXlhbmciPT09Qj9nPj0xMT9nOmcrMTI6InNvbnRlbiI9PT1CfHwibmRhbHUiPT09Qj9nKzEyOnZvaWQgMH0sbWVyaWRpZW06ZnVuY3Rpb24oZyxCLHcpe3JldHVybiBnPDExPyJlbmppbmci''@;'; put 'put ''Omc8MTU/InNpeWFuZyI6ZzwxOT8ic29udGVuIjoibmRhbHUifSxjYWxlbmRhcjp7c2FtZURheToiW0RpbnRlbiBwdW5pa28gcHVrdWxdIExUIixuZXh0RGF5OiJbTWJlbmphbmcgcHVrdWxdIExUIixuZXh0V2VlazoiZGRkZCBbcHVrdWxdIExUIixsYXN0RGF5OiJbS2FsYSB3aW5naSBwdWt1''@;'; put 'put ''bF0gTFQiLGxhc3RXZWVrOiJkZGRkIFtrZXBlbmdrZXIgcHVrdWxdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJ3b250ZW4gaW5nICVzIixwYXN0OiIlcyBpbmdrYW5nIGtlcGVuZ2tlciIsczoic2F3ZXRhd2lzIGRldGlrIixzczoiJWQgZGV0aWsiLG06InNldHVu''@;'; put 'put ''Z2dhbCBtZW5pdCIsbW06IiVkIG1lbml0IixoOiJzZXR1bmdnYWwgamFtIixoaDoiJWQgamFtIixkOiJzZWRpbnRlbiIsZGQ6IiVkIGRpbnRlbiIsTToic2V3dWxhbiIsTU06IiVkIHd1bGFuIix5OiJzZXRhdW4iLHl5OiIlZCB0YXVuIn0sd2Vlazp7ZG93OjEsZG95Ojd9fSl9KHkoOTc1ODYp''@;'; put 'put ''KX0sNzk0OTk6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJrYSIse21vbnRoczoiXHUxMGQ4XHUxMGQwXHUxMGRjXHUxMGQ1XHUxMGQwXHUxMGUwXHUxMGQ4X1x1MTBkN1x1MTBkNFx1MTBkMVx1MTBkNFx1MTBlMFx1MTBkNVx1MTBk''@;'; put 'put ''MFx1MTBkYVx1MTBkOF9cdTEwZGJcdTEwZDBcdTEwZTBcdTEwZTJcdTEwZDhfXHUxMGQwXHUxMGRlXHUxMGUwXHUxMGQ4XHUxMGRhXHUxMGQ4X1x1MTBkYlx1MTBkMFx1MTBkOFx1MTBlMVx1MTBkOF9cdTEwZDhcdTEwZDVcdTEwZGNcdTEwZDhcdTEwZTFcdTEwZDhfXHUxMGQ4XHUxMGQ1XHUx''@;'; put 'put ''MGRhXHUxMGQ4XHUxMGUxXHUxMGQ4X1x1MTBkMFx1MTBkMlx1MTBkNVx1MTBkOFx1MTBlMVx1MTBlMlx1MTBkZF9cdTEwZTFcdTEwZDRcdTEwZTVcdTEwZTJcdTEwZDRcdTEwZGJcdTEwZDFcdTEwZDRcdTEwZTBcdTEwZDhfXHUxMGRkXHUxMGU1XHUxMGUyXHUxMGRkXHUxMGRiXHUxMGQxXHUx''@;'; put 'put ''MGQ0XHUxMGUwXHUxMGQ4X1x1MTBkY1x1MTBkZFx1MTBkNFx1MTBkYlx1MTBkMVx1MTBkNFx1MTBlMFx1MTBkOF9cdTEwZDNcdTEwZDRcdTEwZDlcdTEwZDRcdTEwZGJcdTEwZDFcdTEwZDRcdTEwZTBcdTEwZDgiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MTBkOFx1MTBkMFx1MTBkY19c''@;'; put 'put ''dTEwZDdcdTEwZDRcdTEwZDFfXHUxMGRiXHUxMGQwXHUxMGUwX1x1MTBkMFx1MTBkZVx1MTBlMF9cdTEwZGJcdTEwZDBcdTEwZDhfXHUxMGQ4XHUxMGQ1XHUxMGRjX1x1MTBkOFx1MTBkNVx1MTBkYV9cdTEwZDBcdTEwZDJcdTEwZDVfXHUxMGUxXHUxMGQ0XHUxMGU1X1x1MTBkZFx1MTBlNVx1''@;'; put 'put ''MTBlMl9cdTEwZGNcdTEwZGRcdTEwZDRfXHUxMGQzXHUxMGQ0XHUxMGQ5Ii5zcGxpdCgiXyIpLHdlZWtkYXlzOntzdGFuZGFsb25lOiJcdTEwZDlcdTEwZDVcdTEwZDhcdTEwZTBcdTEwZDBfXHUxMGRkXHUxMGUwXHUxMGU4XHUxMGQwXHUxMGQxXHUxMGQwXHUxMGQ3XHUxMGQ4X1x1MTBlMVx1''@;'; put 'put ''MTBkMFx1MTBkYlx1MTBlOFx1MTBkMFx1MTBkMVx1MTBkMFx1MTBkN1x1MTBkOF9cdTEwZGRcdTEwZDdcdTEwZWVcdTEwZThcdTEwZDBcdTEwZDFcdTEwZDBcdTEwZDdcdTEwZDhfXHUxMGVlXHUxMGUzXHUxMGQ3XHUxMGU4XHUxMGQwXHUxMGQxXHUxMGQwXHUxMGQ3XHUxMGQ4X1x1MTBkZVx1''@;'; put 'put ''MTBkMFx1MTBlMFx1MTBkMFx1MTBlMVx1MTBkOVx1MTBkNFx1MTBkNVx1MTBkOF9cdTEwZThcdTEwZDBcdTEwZDFcdTEwZDBcdTEwZDdcdTEwZDgiLnNwbGl0KCJfIiksZm9ybWF0OiJcdTEwZDlcdTEwZDVcdTEwZDhcdTEwZTBcdTEwZDBcdTEwZTFfXHUxMGRkXHUxMGUwXHUxMGU4XHUxMGQw''@;'; put 'put ''XHUxMGQxXHUxMGQwXHUxMGQ3XHUxMGUxX1x1MTBlMVx1MTBkMFx1MTBkYlx1MTBlOFx1MTBkMFx1MTBkMVx1MTBkMFx1MTBkN1x1MTBlMV9cdTEwZGRcdTEwZDdcdTEwZWVcdTEwZThcdTEwZDBcdTEwZDFcdTEwZDBcdTEwZDdcdTEwZTFfXHUxMGVlXHUxMGUzXHUxMGQ3XHUxMGU4XHUxMGQw''@;'; put 'put ''XHUxMGQxXHUxMGQwXHUxMGQ3XHUxMGUxX1x1MTBkZVx1MTBkMFx1MTBlMFx1MTBkMFx1MTBlMVx1MTBkOVx1MTBkNFx1MTBkNVx1MTBlMV9cdTEwZThcdTEwZDBcdTEwZDFcdTEwZDBcdTEwZDdcdTEwZTEiLnNwbGl0KCJfIiksaXNGb3JtYXQ6LyhcdTEwZWNcdTEwZDhcdTEwZGNcdTEwZDB8''@;'; put 'put ''XHUxMGU4XHUxMGQ0XHUxMGRiXHUxMGQzXHUxMGQ0XHUxMGQyKS99LHdlZWtkYXlzU2hvcnQ6Ilx1MTBkOVx1MTBkNVx1MTBkOF9cdTEwZGRcdTEwZTBcdTEwZThfXHUxMGUxXHUxMGQwXHUxMGRiX1x1MTBkZFx1MTBkN1x1MTBlZV9cdTEwZWVcdTEwZTNcdTEwZDdfXHUxMGRlXHUxMGQwXHUx''@;'; put 'put ''MGUwX1x1MTBlOFx1MTBkMFx1MTBkMSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUxMGQ5XHUxMGQ1X1x1MTBkZFx1MTBlMF9cdTEwZTFcdTEwZDBfXHUxMGRkXHUxMGQ3X1x1MTBlZVx1MTBlM19cdTEwZGVcdTEwZDBfXHUxMGU4XHUxMGQwIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0''@;'; put 'put ''OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MTBkM1x1MTBlNlx1MTBkNFx1MTBlMV0gTFRb''@;'; put 'put ''LVx1MTBkNlx1MTBkNF0iLG5leHREYXk6IltcdTEwZWVcdTEwZDVcdTEwZDBcdTEwZGFdIExUWy1cdTEwZDZcdTEwZDRdIixsYXN0RGF5OiJbXHUxMGQyXHUxMGUzXHUxMGU4XHUxMGQ4XHUxMGRjXSBMVFstXHUxMGQ2XHUxMGQ0XSIsbmV4dFdlZWs6IltcdTEwZThcdTEwZDRcdTEwZGJcdTEw''@;'; put 'put ''ZDNcdTEwZDRcdTEwZDJdIGRkZGQgTFRbLVx1MTBkNlx1MTBkNF0iLGxhc3RXZWVrOiJbXHUxMGVjXHUxMGQ4XHUxMGRjXHUxMGQwXSBkZGRkIExULVx1MTBkNlx1MTBkNCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpmdW5jdGlvbihnKXtyZXR1cm4gZy5yZXBsYWNlKC8o''@;'; put 'put ''XHUxMGVjXHUxMGQwXHUxMGRifFx1MTBlY1x1MTBlM1x1MTBkN3xcdTEwZTFcdTEwZDBcdTEwZDBcdTEwZDd8XHUxMGVjXHUxMGQ0XHUxMGRhfFx1MTBkM1x1MTBlNnxcdTEwZDdcdTEwZDUpKFx1MTBkOHxcdTEwZDQpLyxmdW5jdGlvbihCLHcsUCl7cmV0dXJuIlx1MTBkOCI9PT1QP3crIlx1''@;'; put 'put ''MTBlOFx1MTBkOCI6dytQKyJcdTEwZThcdTEwZDgifSl9LHBhc3Q6ZnVuY3Rpb24oZyl7cmV0dXJuLyhcdTEwZWNcdTEwZDBcdTEwZGJcdTEwZDh8XHUxMGVjXHUxMGUzXHUxMGQ3XHUxMGQ4fFx1MTBlMVx1MTBkMFx1MTBkMFx1MTBkN1x1MTBkOHxcdTEwZDNcdTEwZTZcdTEwZDR8XHUxMGQ3''@;'; put 'put ''XHUxMGQ1XHUxMGQ0KS8udGVzdChnKT9nLnJlcGxhY2UoLyhcdTEwZDh8XHUxMGQ0KSQvLCJcdTEwZDhcdTEwZTEgXHUxMGVjXHUxMGQ4XHUxMGRjIik6L1x1MTBlY1x1MTBkNFx1MTBkYVx1MTBkOC8udGVzdChnKT9nLnJlcGxhY2UoL1x1MTBlY1x1MTBkNFx1MTBkYVx1MTBkOCQvLCJcdTEw''@;'; put 'put ''ZWNcdTEwZGFcdTEwZDhcdTEwZTEgXHUxMGVjXHUxMGQ4XHUxMGRjIik6Z30sczoiXHUxMGUwXHUxMGQwXHUxMGRiXHUxMGQzXHUxMGQ0XHUxMGRjXHUxMGQ4XHUxMGRiXHUxMGQ0IFx1MTBlY1x1MTBkMFx1MTBkYlx1MTBkOCIsc3M6IiVkIFx1MTBlY1x1MTBkMFx1MTBkYlx1MTBkOCIsbToi''@;'; put 'put ''XHUxMGVjXHUxMGUzXHUxMGQ3XHUxMGQ4IixtbToiJWQgXHUxMGVjXHUxMGUzXHUxMGQ3XHUxMGQ4IixoOiJcdTEwZTFcdTEwZDBcdTEwZDBcdTEwZDdcdTEwZDgiLGhoOiIlZCBcdTEwZTFcdTEwZDBcdTEwZDBcdTEwZDdcdTEwZDgiLGQ6Ilx1MTBkM1x1MTBlNlx1MTBkNCIsZGQ6IiVkIFx1''@;'; put 'put ''MTBkM1x1MTBlNlx1MTBkNCIsTToiXHUxMGQ3XHUxMGQ1XHUxMGQ0IixNTToiJWQgXHUxMGQ3XHUxMGQ1XHUxMGQ0Iix5OiJcdTEwZWNcdTEwZDRcdTEwZGFcdTEwZDgiLHl5OiIlZCBcdTEwZWNcdTEwZDRcdTEwZGFcdTEwZDgifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi8wfDEtXHUxMGRh''@;'; put 'put ''XHUxMGQ4fFx1MTBkYlx1MTBkNC1cZHsxLDJ9fFxkezEsMn0tXHUxMGQ0LyxvcmRpbmFsOmZ1bmN0aW9uKGcpe3JldHVybiAwPT09Zz9nOjE9PT1nP2crIi1cdTEwZGFcdTEwZDgiOmc8MjB8fGc8PTEwMCYmZyUyMD09MHx8ZyUxMDA9PTA/Ilx1MTBkYlx1MTBkNC0iK2c6ZysiLVx1MTBkNCJ9''@;'; put 'put ''LHdlZWs6e2RvdzoxLGRveTo3fX0pfSh5KDk3NTg2KSl9LDkzNTczOmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz17MDoiLVx1MDQ0OFx1MDQ1NiIsMToiLVx1MDQ0OFx1MDQ1NiIsMjoiLVx1MDQ0OFx1MDQ1NiIsMzoiLVx1MDQ0OFx1MDQ1NiIsNDoi''@;'; put 'put ''LVx1MDQ0OFx1MDQ1NiIsNToiLVx1MDQ0OFx1MDQ1NiIsNjoiLVx1MDQ0OFx1MDQ0YiIsNzoiLVx1MDQ0OFx1MDQ1NiIsODoiLVx1MDQ0OFx1MDQ1NiIsOToiLVx1MDQ0OFx1MDQ0YiIsMTA6Ii1cdTA0NDhcdTA0NGIiLDIwOiItXHUwNDQ4XHUwNDRiIiwzMDoiLVx1MDQ0OFx1MDQ0YiIsNDA6''@;'; put 'put ''Ii1cdTA0NDhcdTA0NGIiLDUwOiItXHUwNDQ4XHUwNDU2Iiw2MDoiLVx1MDQ0OFx1MDQ0YiIsNzA6Ii1cdTA0NDhcdTA0NTYiLDgwOiItXHUwNDQ4XHUwNDU2Iiw5MDoiLVx1MDQ0OFx1MDQ0YiIsMTAwOiItXHUwNDQ4XHUwNDU2In07SS5kZWZpbmVMb2NhbGUoImtrIix7bW9udGhzOiJcdTA0''@;'; put 'put ''OWJcdTA0MzBcdTA0YTNcdTA0NDJcdTA0MzBcdTA0NDBfXHUwNDMwXHUwNDliXHUwNDNmXHUwNDMwXHUwNDNkX1x1MDQzZFx1MDQzMFx1MDQ0M1x1MDQ0MFx1MDQ0Ylx1MDQzN19cdTA0NDFcdTA0ZDlcdTA0NDNcdTA0NTZcdTA0NDBfXHUwNDNjXHUwNDMwXHUwNDNjXHUwNDRiXHUwNDQwX1x1''@;'; put 'put ''MDQzY1x1MDQzMFx1MDQ0M1x1MDQ0MVx1MDQ0Ylx1MDQzY19cdTA0NDhcdTA0NTZcdTA0M2JcdTA0MzRcdTA0MzVfXHUwNDQyXHUwNDMwXHUwNDNjXHUwNDRiXHUwNDM3X1x1MDQ5Ylx1MDQ0Ylx1MDQ0MFx1MDQzYVx1MDRhZlx1MDQzOVx1MDQzNVx1MDQzYV9cdTA0OWJcdTA0MzBcdTA0Mzdc''@;'; put 'put ''dTA0MzBcdTA0M2RfXHUwNDliXHUwNDMwXHUwNDQwXHUwNDMwXHUwNDQ4XHUwNDMwX1x1MDQzNlx1MDQzNVx1MDQzYlx1MDQ0Mlx1MDQzZVx1MDQ5Ylx1MDQ0MVx1MDQzMFx1MDQzZCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwNDliXHUwNDMwXHUwNGEzX1x1MDQzMFx1MDQ5Ylx1MDQz''@;'; put 'put ''Zl9cdTA0M2RcdTA0MzBcdTA0NDNfXHUwNDQxXHUwNGQ5XHUwNDQzX1x1MDQzY1x1MDQzMFx1MDQzY19cdTA0M2NcdTA0MzBcdTA0NDNfXHUwNDQ4XHUwNDU2XHUwNDNiX1x1MDQ0Mlx1MDQzMFx1MDQzY19cdTA0OWJcdTA0NGJcdTA0NDBfXHUwNDliXHUwNDMwXHUwNDM3X1x1MDQ5Ylx1MDQz''@;'; put 'put ''MFx1MDQ0MF9cdTA0MzZcdTA0MzVcdTA0M2IiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MDQzNlx1MDQzNVx1MDQzYVx1MDQ0MVx1MDQzNVx1MDQzZFx1MDQzMVx1MDQ1Nl9cdTA0MzRcdTA0YWZcdTA0MzlcdTA0NDFcdTA0MzVcdTA0M2RcdTA0MzFcdTA0NTZfXHUwNDQxXHUwNDM1XHUwNDM5''@;'; put 'put ''XHUwNDQxXHUwNDM1XHUwNDNkXHUwNDMxXHUwNDU2X1x1MDQ0MVx1MDRkOVx1MDQ0MFx1MDQ0MVx1MDQzNVx1MDQzZFx1MDQzMVx1MDQ1Nl9cdTA0MzFcdTA0MzVcdTA0MzlcdTA0NDFcdTA0MzVcdTA0M2RcdTA0MzFcdTA0NTZfXHUwNDM2XHUwNGIxXHUwNDNjXHUwNDMwX1x1MDQ0MVx1MDQz''@;'; put 'put ''NVx1MDQzZFx1MDQzMVx1MDQ1NiIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA0MzZcdTA0MzVcdTA0M2FfXHUwNDM0XHUwNGFmXHUwNDM5X1x1MDQ0MVx1MDQzNVx1MDQzOV9cdTA0NDFcdTA0ZDlcdTA0NDBfXHUwNDMxXHUwNDM1XHUwNDM5X1x1MDQzNlx1MDRiMVx1MDQzY19cdTA0''@;'; put 'put ''NDFcdTA0MzVcdTA0M2QiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDQzNlx1MDQzYV9cdTA0MzRcdTA0MzlfXHUwNDQxXHUwNDM5X1x1MDQ0MVx1MDQ0MF9cdTA0MzFcdTA0MzlfXHUwNDM2XHUwNDNjX1x1MDQ0MVx1MDQzZCIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhI''@;'; put 'put ''Om1tIixMVFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA0MTFcdTA0YWZcdTA0MzNcdTA0NTZcdTA0M2QgXHUwNDQx''@;'; put 'put ''XHUwNDMwXHUwNDkzXHUwNDMwXHUwNDQyXSBMVCIsbmV4dERheToiW1x1MDQxNVx1MDQ0MFx1MDQ0Mlx1MDQzNVx1MDRhMyBcdTA0NDFcdTA0MzBcdTA0OTNcdTA0MzBcdTA0NDJdIExUIixuZXh0V2VlazoiZGRkZCBbXHUwNDQxXHUwNDMwXHUwNDkzXHUwNDMwXHUwNDQyXSBMVCIsbGFzdERh''@;'; put 'put ''eToiW1x1MDQxYVx1MDQzNVx1MDQ0OFx1MDQzNSBcdTA0NDFcdTA0MzBcdTA0OTNcdTA0MzBcdTA0NDJdIExUIixsYXN0V2VlazoiW1x1MDRlOFx1MDQ0Mlx1MDQzYVx1MDQzNVx1MDQzZCBcdTA0MzBcdTA0M2ZcdTA0NDJcdTA0MzBcdTA0M2RcdTA0NGJcdTA0YTNdIGRkZGQgW1x1MDQ0MVx1''@;'; put 'put ''MDQzMFx1MDQ5M1x1MDQzMFx1MDQ0Ml0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIFx1MDQ1Nlx1MDQ0OFx1MDQ1Nlx1MDQzZFx1MDQzNFx1MDQzNSIscGFzdDoiJXMgXHUwNDMxXHUwNGIxXHUwNDQwXHUwNDRiXHUwNDNkIixzOiJcdTA0MzFcdTA0NTZcdTA0''@;'; put 'put ''NDBcdTA0M2RcdTA0MzVcdTA0NDhcdTA0MzUgXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0IixzczoiJWQgXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0IixtOiJcdTA0MzFcdTA0NTZcdTA0NDAgXHUwNDNjXHUwNDM4XHUwNDNkXHUwNDQzXHUwNDQyIixt''@;'; put 'put ''bToiJWQgXHUwNDNjXHUwNDM4XHUwNDNkXHUwNDQzXHUwNDQyIixoOiJcdTA0MzFcdTA0NTZcdTA0NDAgXHUwNDQxXHUwNDMwXHUwNDkzXHUwNDMwXHUwNDQyIixoaDoiJWQgXHUwNDQxXHUwNDMwXHUwNDkzXHUwNDMwXHUwNDQyIixkOiJcdTA0MzFcdTA0NTZcdTA0NDAgXHUwNDNhXHUwNGFm''@;'; put 'put ''XHUwNDNkIixkZDoiJWQgXHUwNDNhXHUwNGFmXHUwNDNkIixNOiJcdTA0MzFcdTA0NTZcdTA0NDAgXHUwNDMwXHUwNDM5IixNTToiJWQgXHUwNDMwXHUwNDM5Iix5OiJcdTA0MzFcdTA0NTZcdTA0NDAgXHUwNDM2XHUwNDRiXHUwNDNiIix5eToiJWQgXHUwNDM2XHUwNDRiXHUwNDNiIn0sZGF5''@;'; put 'put ''T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfS0oXHUwNDQ4XHUwNDU2fFx1MDQ0OFx1MDQ0YikvLG9yZGluYWw6ZnVuY3Rpb24oQil7cmV0dXJuIEIrKF9bQl18fF9bQiUxMF18fF9bQj49MTAwPzEwMDpudWxsXSl9LHdlZWs6e2RvdzoxLGRveTo3fX0pfSh5KDk3NTg2KSl9LDY4ODA3OmZ1''@;'; put 'put ''bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz17MToiXHUxN2UxIiwyOiJcdTE3ZTIiLDM6Ilx1MTdlMyIsNDoiXHUxN2U0Iiw1OiJcdTE3ZTUiLDY6Ilx1MTdlNiIsNzoiXHUxN2U3Iiw4OiJcdTE3ZTgiLDk6Ilx1MTdlOSIsMDoiXHUxN2UwIn0sZz17Ilx1''@;'; put 'put ''MTdlMSI6IjEiLCJcdTE3ZTIiOiIyIiwiXHUxN2UzIjoiMyIsIlx1MTdlNCI6IjQiLCJcdTE3ZTUiOiI1IiwiXHUxN2U2IjoiNiIsIlx1MTdlNyI6IjciLCJcdTE3ZTgiOiI4IiwiXHUxN2U5IjoiOSIsIlx1MTdlMCI6IjAifTtJLmRlZmluZUxvY2FsZSgia20iLHttb250aHM6Ilx1MTc5OFx1''@;'; put 'put ''MTc4MFx1MTc5YVx1MTdiNl9cdTE3ODBcdTE3YmJcdTE3OThcdTE3ZDJcdTE3OTdcdTE3YzhfXHUxNzk4XHUxN2I4XHUxNzkzXHUxN2I2X1x1MTc5OFx1MTdjMVx1MTc5Zlx1MTdiNl9cdTE3YTdcdTE3OWZcdTE3OTdcdTE3YjZfXHUxNzk4XHUxN2I3XHUxNzkwXHUxN2JiXHUxNzkzXHUxN2I2''@;'; put 'put ''X1x1MTc4MFx1MTc4MFx1MTdkMlx1MTc4MFx1MTc4YVx1MTdiNl9cdTE3OWZcdTE3YjhcdTE3YTBcdTE3YjZfXHUxNzgwXHUxNzg5XHUxN2QyXHUxNzg5XHUxN2I2X1x1MTc4Zlx1MTdiYlx1MTc5Ylx1MTdiNl9cdTE3OWNcdTE3YjdcdTE3ODVcdTE3ZDJcdTE3ODZcdTE3YjdcdTE3ODBcdTE3''@;'; put 'put ''YjZfXHUxNzkyXHUxN2QyXHUxNzkzXHUxN2JjIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTE3OThcdTE3ODBcdTE3OWFcdTE3YjZfXHUxNzgwXHUxN2JiXHUxNzk4XHUxN2QyXHUxNzk3XHUxN2M4X1x1MTc5OFx1MTdiOFx1MTc5M1x1MTdiNl9cdTE3OThcdTE3YzFcdTE3OWZcdTE3YjZf''@;'; put 'put ''XHUxN2E3XHUxNzlmXHUxNzk3XHUxN2I2X1x1MTc5OFx1MTdiN1x1MTc5MFx1MTdiYlx1MTc5M1x1MTdiNl9cdTE3ODBcdTE3ODBcdTE3ZDJcdTE3ODBcdTE3OGFcdTE3YjZfXHUxNzlmXHUxN2I4XHUxN2EwXHUxN2I2X1x1MTc4MFx1MTc4OVx1MTdkMlx1MTc4OVx1MTdiNl9cdTE3OGZcdTE3''@;'; put 'put ''YmJcdTE3OWJcdTE3YjZfXHUxNzljXHUxN2I3XHUxNzg1XHUxN2QyXHUxNzg2XHUxN2I3XHUxNzgwXHUxN2I2X1x1MTc5Mlx1MTdkMlx1MTc5M1x1MTdiYyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUxN2EyXHUxN2I2XHUxNzkxXHUxN2I3XHUxNzhmXHUxN2QyXHUxNzk5X1x1MTc4NVx1MTdk''@;'; put 'put ''MFx1MTc5M1x1MTdkMlx1MTc5MV9cdTE3YTJcdTE3ODRcdTE3ZDJcdTE3ODJcdTE3YjZcdTE3OWFfXHUxNzk2XHUxN2JiXHUxNzkyX1x1MTc5Nlx1MTdkMlx1MTc5YVx1MTdhMFx1MTc5Zlx1MTdkMlx1MTc5NFx1MTc4Zlx1MTdiN1x1MTdjZF9cdTE3OWZcdTE3YmJcdTE3ODBcdTE3ZDJcdTE3''@;'; put 'put ''OWFfXHUxNzlmXHUxN2M1XHUxNzlhXHUxN2NkIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MTdhMlx1MTdiNl9cdTE3ODVfXHUxN2EyX1x1MTc5Nl9cdTE3OTZcdTE3ZDJcdTE3OWFfXHUxNzlmXHUxN2JiX1x1MTc5ZiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUxN2EyXHUxN2I2''@;'; put 'put ''X1x1MTc4NV9cdTE3YTJfXHUxNzk2X1x1MTc5Nlx1MTdkMlx1MTc5YV9cdTE3OWZcdTE3YmJfXHUxNzlmIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZ''@;'; put 'put ''WVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sbWVyaWRpZW1QYXJzZTovXHUxNzk2XHUxN2QyXHUxNzlhXHUxN2I5XHUxNzgwfFx1MTc5Ylx1MTdkMlx1MTc4NFx1MTdiNlx1MTc4NS8saXNQTTpmdW5jdGlvbih3KXtyZXR1cm4iXHUx''@;'; put 'put ''NzliXHUxN2QyXHUxNzg0XHUxN2I2XHUxNzg1Ij09PXd9LG1lcmlkaWVtOmZ1bmN0aW9uKHcsUCxGKXtyZXR1cm4gdzwxMj8iXHUxNzk2XHUxN2QyXHUxNzlhXHUxN2I5XHUxNzgwIjoiXHUxNzliXHUxN2QyXHUxNzg0XHUxN2I2XHUxNzg1In0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTE3OTBc''@;'; put 'put ''dTE3ZDJcdTE3ODRcdTE3YzNcdTE3OTNcdTE3YzFcdTE3YzcgXHUxNzk4XHUxN2M5XHUxN2M0XHUxNzg0XSBMVCIsbmV4dERheToiW1x1MTc5Zlx1MTdkMlx1MTdhMlx1MTdjMlx1MTc4MCBcdTE3OThcdTE3YzlcdTE3YzRcdTE3ODRdIExUIixuZXh0V2VlazoiZGRkZCBbXHUxNzk4XHUxN2M5''@;'; put 'put ''XHUxN2M0XHUxNzg0XSBMVCIsbGFzdERheToiW1x1MTc5OFx1MTdkMlx1MTc5Zlx1MTdiN1x1MTc5Ylx1MTc5OFx1MTdiN1x1MTc4OSBcdTE3OThcdTE3YzlcdTE3YzRcdTE3ODRdIExUIixsYXN0V2VlazoiZGRkZCBbXHUxNzlmXHUxNzk0XHUxN2QyXHUxNzhmXHUxN2I2XHUxN2EwXHUxN2Nk''@;'; put 'put ''XHUxNzk4XHUxN2JiXHUxNzkzXSBbXHUxNzk4XHUxN2M5XHUxN2M0XHUxNzg0XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXNcdTE3OTFcdTE3YzBcdTE3OGYiLHBhc3Q6IiVzXHUxNzk4XHUxN2JiXHUxNzkzIixzOiJcdTE3OTRcdTE3YzlcdTE3YmJcdTE3OTNc''@;'; put 'put ''dTE3ZDJcdTE3OThcdTE3YjZcdTE3OTNcdTE3OWNcdTE3YjdcdTE3OTNcdTE3YjZcdTE3OTFcdTE3YjgiLHNzOiIlZCBcdTE3OWNcdTE3YjdcdTE3OTNcdTE3YjZcdTE3OTFcdTE3YjgiLG06Ilx1MTc5OFx1MTdiZFx1MTc5OVx1MTc5M1x1MTdiNlx1MTc5MVx1MTdiOCIsbW06IiVkIFx1MTc5''@;'; put 'put ''M1x1MTdiNlx1MTc5MVx1MTdiOCIsaDoiXHUxNzk4XHUxN2JkXHUxNzk5XHUxNzk4XHUxN2M5XHUxN2M0XHUxNzg0IixoaDoiJWQgXHUxNzk4XHUxN2M5XHUxN2M0XHUxNzg0IixkOiJcdTE3OThcdTE3YmRcdTE3OTlcdTE3OTBcdTE3ZDJcdTE3ODRcdTE3YzMiLGRkOiIlZCBcdTE3OTBcdTE3''@;'; put 'put ''ZDJcdTE3ODRcdTE3YzMiLE06Ilx1MTc5OFx1MTdiZFx1MTc5OVx1MTc4MVx1MTdjMiIsTU06IiVkIFx1MTc4MVx1MTdjMiIseToiXHUxNzk4XHUxN2JkXHUxNzk5XHUxNzg2XHUxN2QyXHUxNzkzXHUxN2I2XHUxN2M2Iix5eToiJWQgXHUxNzg2XHUxN2QyXHUxNzkzXHUxN2I2XHUxN2M2In0s''@;'; put 'put ''ZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXHUxNzkxXHUxN2I4XGR7MSwyfS8sb3JkaW5hbDoiXHUxNzkxXHUxN2I4JWQiLHByZXBhcnNlOmZ1bmN0aW9uKHcpe3JldHVybiB3LnJlcGxhY2UoL1tcdTE3ZTFcdTE3ZTJcdTE3ZTNcdTE3ZTRcdTE3ZTVcdTE3ZTZcdTE3ZTdcdTE3ZThcdTE3ZTlc''@;'; put 'put ''dTE3ZTBdL2csZnVuY3Rpb24oUCl7cmV0dXJuIGdbUF19KX0scG9zdGZvcm1hdDpmdW5jdGlvbih3KXtyZXR1cm4gdy5yZXBsYWNlKC9cZC9nLGZ1bmN0aW9uKFApe3JldHVybiBfW1BdfSl9LHdlZWs6e2RvdzoxLGRveTo0fX0pfSh5KDk3NTg2KSl9LDY1MDgyOmZ1bmN0aW9uKHVlLFgseSl7''@;'; put 'put ''IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz17MToiXHUwY2U3IiwyOiJcdTBjZTgiLDM6Ilx1MGNlOSIsNDoiXHUwY2VhIiw1OiJcdTBjZWIiLDY6Ilx1MGNlYyIsNzoiXHUwY2VkIiw4OiJcdTBjZWUiLDk6Ilx1MGNlZiIsMDoiXHUwY2U2In0sZz17Ilx1MGNlNyI6IjEiLCJcdTBj''@;'; put 'put ''ZTgiOiIyIiwiXHUwY2U5IjoiMyIsIlx1MGNlYSI6IjQiLCJcdTBjZWIiOiI1IiwiXHUwY2VjIjoiNiIsIlx1MGNlZCI6IjciLCJcdTBjZWUiOiI4IiwiXHUwY2VmIjoiOSIsIlx1MGNlNiI6IjAifTtJLmRlZmluZUxvY2FsZSgia24iLHttb250aHM6Ilx1MGM5Y1x1MGNhOFx1MGNiNVx1MGNi''@;'; put 'put ''MFx1MGNiZl9cdTBjYWJcdTBjYzZcdTBjYWNcdTBjY2RcdTBjYjBcdTBjYjVcdTBjYjBcdTBjYmZfXHUwY2FlXHUwY2JlXHUwY2IwXHUwY2NkXHUwYzlhXHUwY2NkX1x1MGM4Zlx1MGNhYVx1MGNjZFx1MGNiMFx1MGNiZlx1MGNiMlx1MGNjZF9cdTBjYWVcdTBjYzZcdTBjZDVfXHUwYzljXHUw''@;'; put 'put ''Y2MyXHUwY2E4XHUwY2NkX1x1MGM5Y1x1MGNjMVx1MGNiMlx1MGNjNlx1MGNkNl9cdTBjODZcdTBjOTdcdTBjYjhcdTBjY2RcdTBjOWZcdTBjY2RfXHUwY2I4XHUwY2M2XHUwY2FhXHUwY2NkXHUwYzlmXHUwY2M2XHUwYzgyXHUwY2FjXHUwY2IwXHUwY2NkX1x1MGM4NVx1MGM5NVx1MGNjZFx1''@;'; put 'put ''MGM5Zlx1MGNjNlx1MGNjMlx1MGNkNVx1MGNhY1x1MGNiMFx1MGNjZF9cdTBjYThcdTBjYjVcdTBjYzZcdTBjODJcdTBjYWNcdTBjYjBcdTBjY2RfXHUwY2ExXHUwY2JmXHUwY2I4XHUwY2M2XHUwYzgyXHUwY2FjXHUwY2IwXHUwY2NkIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTBjOWNc''@;'; put 'put ''dTBjYThfXHUwY2FiXHUwY2M2XHUwY2FjXHUwY2NkXHUwY2IwX1x1MGNhZVx1MGNiZVx1MGNiMFx1MGNjZFx1MGM5YVx1MGNjZF9cdTBjOGZcdTBjYWFcdTBjY2RcdTBjYjBcdTBjYmZcdTBjYjJcdTBjY2RfXHUwY2FlXHUwY2M2XHUwY2Q1X1x1MGM5Y1x1MGNjMlx1MGNhOFx1MGNjZF9cdTBj''@;'; put 'put ''OWNcdTBjYzFcdTBjYjJcdTBjYzZcdTBjZDZfXHUwYzg2XHUwYzk3XHUwY2I4XHUwY2NkXHUwYzlmXHUwY2NkX1x1MGNiOFx1MGNjNlx1MGNhYVx1MGNjZFx1MGM5Zlx1MGNjNlx1MGM4Ml9cdTBjODVcdTBjOTVcdTBjY2RcdTBjOWZcdTBjYzZcdTBjYzJcdTBjZDVfXHUwY2E4XHUwY2I1XHUw''@;'; put 'put ''Y2M2XHUwYzgyX1x1MGNhMVx1MGNiZlx1MGNiOFx1MGNjNlx1MGM4MiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJcdTBjYWRcdTBjYmVcdTBjYThcdTBjYzFcdTBjYjVcdTBjYmVcdTBjYjBfXHUwY2I4XHUwY2M2XHUwY2MyXHUwY2Q1XHUwY2FlXHUwY2I1XHUw''@;'; put 'put ''Y2JlXHUwY2IwX1x1MGNhZVx1MGM4Mlx1MGM5N1x1MGNiM1x1MGNiNVx1MGNiZVx1MGNiMF9cdTBjYWNcdTBjYzFcdTBjYTdcdTBjYjVcdTBjYmVcdTBjYjBfXHUwYzk3XHUwY2MxXHUwY2IwXHUwY2MxXHUwY2I1XHUwY2JlXHUwY2IwX1x1MGNiNlx1MGNjMVx1MGM5NVx1MGNjZFx1MGNiMFx1''@;'; put 'put ''MGNiNVx1MGNiZVx1MGNiMF9cdTBjYjZcdTBjYThcdTBjYmZcdTBjYjVcdTBjYmVcdTBjYjAiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwY2FkXHUwY2JlXHUwY2E4XHUwY2MxX1x1MGNiOFx1MGNjNlx1MGNjMlx1MGNkNVx1MGNhZV9cdTBjYWVcdTBjODJcdTBjOTdcdTBjYjNfXHUw''@;'; put 'put ''Y2FjXHUwY2MxXHUwY2E3X1x1MGM5N1x1MGNjMVx1MGNiMFx1MGNjMV9cdTBjYjZcdTBjYzFcdTBjOTVcdTBjY2RcdTBjYjBfXHUwY2I2XHUwY2E4XHUwY2JmIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTBjYWRcdTBjYmVfXHUwY2I4XHUwY2M2XHUwY2MyXHUwY2Q1X1x1MGNhZVx1MGM4''@;'; put 'put ''Ml9cdTBjYWNcdTBjYzFfXHUwYzk3XHUwY2MxX1x1MGNiNlx1MGNjMV9cdTBjYjYiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJBIGg6bW0iLExUUzoiQSBoOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVksIEEgaDptbSIsTExM''@;'; put 'put ''TDoiZGRkZCwgRCBNTU1NIFlZWVksIEEgaDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwYzg3XHUwYzgyXHUwY2E2XHUwY2MxXSBMVCIsbmV4dERheToiW1x1MGNhOFx1MGNiZVx1MGNiM1x1MGNjNl0gTFQiLG5leHRXZWVrOiJkZGRkLCBMVCIsbGFzdERheToiW1x1MGNhOFx1MGNiZlx1''@;'; put 'put ''MGNhOFx1MGNjZFx1MGNhOFx1MGNjNl0gTFQiLGxhc3RXZWVrOiJbXHUwYzk1XHUwY2M2XHUwY2MyXHUwY2E4XHUwY2M2XHUwY2FmXSBkZGRkLCBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgXHUwY2E4XHUwYzgyXHUwY2E0XHUwY2IwIixwYXN0OiIlcyBcdTBj''@;'; put 'put ''YjlcdTBjYmZcdTBjODJcdTBjYTZcdTBjYzYiLHM6Ilx1MGM5NVx1MGNjNlx1MGNiMlx1MGNiNVx1MGNjMSBcdTBjOTVcdTBjY2RcdTBjYjdcdTBjYTNcdTBjOTdcdTBjYjNcdTBjYzEiLHNzOiIlZCBcdTBjYjhcdTBjYzZcdTBjOTVcdTBjYzZcdTBjODJcdTBjYTFcdTBjYzFcdTBjOTdcdTBj''@;'; put 'put ''YjNcdTBjYzEiLG06Ilx1MGM5Mlx1MGM4Mlx1MGNhNlx1MGNjMSBcdTBjYThcdTBjYmZcdTBjYWVcdTBjYmZcdTBjYjciLG1tOiIlZCBcdTBjYThcdTBjYmZcdTBjYWVcdTBjYmZcdTBjYjciLGg6Ilx1MGM5Mlx1MGM4Mlx1MGNhNlx1MGNjMSBcdTBjOTdcdTBjODJcdTBjOWZcdTBjYzYiLGho''@;'; put 'put ''OiIlZCBcdTBjOTdcdTBjODJcdTBjOWZcdTBjYzYiLGQ6Ilx1MGM5Mlx1MGM4Mlx1MGNhNlx1MGNjMSBcdTBjYTZcdTBjYmZcdTBjYTgiLGRkOiIlZCBcdTBjYTZcdTBjYmZcdTBjYTgiLE06Ilx1MGM5Mlx1MGM4Mlx1MGNhNlx1MGNjMSBcdTBjYTRcdTBjYmZcdTBjODJcdTBjOTdcdTBjYjNc''@;'; put 'put ''dTBjYzEiLE1NOiIlZCBcdTBjYTRcdTBjYmZcdTBjODJcdTBjOTdcdTBjYjNcdTBjYzEiLHk6Ilx1MGM5Mlx1MGM4Mlx1MGNhNlx1MGNjMSBcdTBjYjVcdTBjYjBcdTBjY2RcdTBjYjciLHl5OiIlZCBcdTBjYjVcdTBjYjBcdTBjY2RcdTBjYjcifSxwcmVwYXJzZTpmdW5jdGlvbih3KXtyZXR1''@;'; put 'put ''cm4gdy5yZXBsYWNlKC9bXHUwY2U3XHUwY2U4XHUwY2U5XHUwY2VhXHUwY2ViXHUwY2VjXHUwY2VkXHUwY2VlXHUwY2VmXHUwY2U2XS9nLGZ1bmN0aW9uKFApe3JldHVybiBnW1BdfSl9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24odyl7cmV0dXJuIHcucmVwbGFjZSgvXGQvZyxmdW5jdGlvbihQKXty''@;'; put 'put ''ZXR1cm4gX1tQXX0pfSxtZXJpZGllbVBhcnNlOi9cdTBjYjBcdTBjYmVcdTBjYTRcdTBjY2RcdTBjYjBcdTBjYmZ8XHUwY2FjXHUwY2M2XHUwY2IzXHUwY2JmXHUwYzk3XHUwY2NkXHUwYzk3XHUwY2M2fFx1MGNhZVx1MGNhN1x1MGNjZFx1MGNhZlx1MGNiZVx1MGNiOVx1MGNjZFx1MGNhOHxc''@;'; put 'put ''dTBjYjhcdTBjODJcdTBjOWNcdTBjYzYvLG1lcmlkaWVtSG91cjpmdW5jdGlvbih3LFApe3JldHVybiAxMj09PXcmJih3PTApLCJcdTBjYjBcdTBjYmVcdTBjYTRcdTBjY2RcdTBjYjBcdTBjYmYiPT09UD93PDQ/dzp3KzEyOiJcdTBjYWNcdTBjYzZcdTBjYjNcdTBjYmZcdTBjOTdcdTBjY2Rc''@;'; put 'put ''dTBjOTdcdTBjYzYiPT09UD93OiJcdTBjYWVcdTBjYTdcdTBjY2RcdTBjYWZcdTBjYmVcdTBjYjlcdTBjY2RcdTBjYTgiPT09UD93Pj0xMD93OncrMTI6Ilx1MGNiOFx1MGM4Mlx1MGM5Y1x1MGNjNiI9PT1QP3crMTI6dm9pZCAwfSxtZXJpZGllbTpmdW5jdGlvbih3LFAsRil7cmV0dXJuIHc8''@;'; put 'put ''ND8iXHUwY2IwXHUwY2JlXHUwY2E0XHUwY2NkXHUwY2IwXHUwY2JmIjp3PDEwPyJcdTBjYWNcdTBjYzZcdTBjYjNcdTBjYmZcdTBjOTdcdTBjY2RcdTBjOTdcdTBjYzYiOnc8MTc/Ilx1MGNhZVx1MGNhN1x1MGNjZFx1MGNhZlx1MGNiZVx1MGNiOVx1MGNjZFx1MGNhOCI6dzwyMD8iXHUwY2I4''@;'; put 'put ''XHUwYzgyXHUwYzljXHUwY2M2IjoiXHUwY2IwXHUwY2JlXHUwY2E0XHUwY2NkXHUwY2IwXHUwY2JmIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShcdTBjYThcdTBjYzZcdTBjZDUpLyxvcmRpbmFsOmZ1bmN0aW9uKHcpe3JldHVybiB3KyJcdTBjYThcdTBjYzZcdTBjZDUifSx3''@;'; put 'put ''ZWVrOntkb3c6MCxkb3k6Nn19KX0oeSg5NzU4NikpfSwyMDEzNzpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoImtvIix7bW9udGhzOiIxXHVjNmQ0XzJcdWM2ZDRfM1x1YzZkNF80XHVjNmQ0XzVcdWM2ZDRfNlx1YzZkNF83XHVjNmQ0''@;'; put 'put ''XzhcdWM2ZDRfOVx1YzZkNF8xMFx1YzZkNF8xMVx1YzZkNF8xMlx1YzZkNCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiMVx1YzZkNF8yXHVjNmQ0XzNcdWM2ZDRfNFx1YzZkNF81XHVjNmQ0XzZcdWM2ZDRfN1x1YzZkNF84XHVjNmQ0XzlcdWM2ZDRfMTBcdWM2ZDRfMTFcdWM2ZDRfMTJcdWM2''@;'; put 'put ''ZDQiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1Yzc3Y1x1YzY5NFx1Yzc3Y19cdWM2ZDRcdWM2OTRcdWM3N2NfXHVkNjU0XHVjNjk0XHVjNzdjX1x1YzIxOFx1YzY5NFx1Yzc3Y19cdWJhYTlcdWM2OTRcdWM3N2NfXHVhZTA4XHVjNjk0XHVjNzdjX1x1ZDFhMFx1YzY5NFx1Yzc3YyIuc3BsaXQo''@;'; put 'put ''Il8iKSx3ZWVrZGF5c1Nob3J0OiJcdWM3N2NfXHVjNmQ0X1x1ZDY1NF9cdWMyMThfXHViYWE5X1x1YWUwOF9cdWQxYTAiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1Yzc3Y19cdWM2ZDRfXHVkNjU0X1x1YzIxOF9cdWJhYTlfXHVhZTA4X1x1ZDFhMCIuc3BsaXQoIl8iKSxsb25nRGF0ZUZv''@;'; put 'put ''cm1hdDp7TFQ6IkEgaDptbSIsTFRTOiJBIGg6bW06c3MiLEw6IllZWVkuTU0uREQuIixMTDoiWVlZWVx1YjE0NCBNTU1NIERcdWM3N2MiLExMTDoiWVlZWVx1YjE0NCBNTU1NIERcdWM3N2MgQSBoOm1tIixMTExMOiJZWVlZXHViMTQ0IE1NTU0gRFx1Yzc3YyBkZGRkIEEgaDptbSIsbDoiWVlZ''@;'; put 'put ''WS5NTS5ERC4iLGxsOiJZWVlZXHViMTQ0IE1NTU0gRFx1Yzc3YyIsbGxsOiJZWVlZXHViMTQ0IE1NTU0gRFx1Yzc3YyBBIGg6bW0iLGxsbGw6IllZWVlcdWIxNDQgTU1NTSBEXHVjNzdjIGRkZGQgQSBoOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6Ilx1YzYyNFx1YjI5OCBMVCIsbmV4dERheToi''@;'; put 'put ''XHViMGI0XHVjNzdjIExUIixuZXh0V2VlazoiZGRkZCBMVCIsbGFzdERheToiXHVjNWI0XHVjODFjIExUIixsYXN0V2VlazoiXHVjOWMwXHViMDljXHVjOGZjIGRkZGQgTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIFx1ZDZjNCIscGFzdDoiJXMgXHVjODA0Iixz''@;'; put 'put ''OiJcdWJhODcgXHVjZDA4IixzczoiJWRcdWNkMDgiLG06IjFcdWJkODQiLG1tOiIlZFx1YmQ4NCIsaDoiXHVkNTVjIFx1YzJkY1x1YWMwNCIsaGg6IiVkXHVjMmRjXHVhYzA0IixkOiJcdWQ1NThcdWI4ZTgiLGRkOiIlZFx1Yzc3YyIsTToiXHVkNTVjIFx1YjJlYyIsTU06IiVkXHViMmVjIix5''@;'; put 'put ''OiJcdWM3N2MgXHViMTQ0Iix5eToiJWRcdWIxNDQifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KFx1Yzc3Y3xcdWM2ZDR8XHVjOGZjKS8sb3JkaW5hbDpmdW5jdGlvbihnLEIpe3N3aXRjaChCKXtjYXNlImQiOmNhc2UiRCI6Y2FzZSJEREQiOnJldHVybiBnKyJcdWM3N2MiO2Nh''@;'; put 'put ''c2UiTSI6cmV0dXJuIGcrIlx1YzZkNCI7Y2FzZSJ3IjpjYXNlIlciOnJldHVybiBnKyJcdWM4ZmMiO2RlZmF1bHQ6cmV0dXJuIGd9fSxtZXJpZGllbVBhcnNlOi9cdWM2MjRcdWM4MDR8XHVjNjI0XHVkNmM0Lyxpc1BNOmZ1bmN0aW9uKGcpe3JldHVybiJcdWM2MjRcdWQ2YzQiPT09Z30sbWVy''@;'; put 'put ''aWRpZW06ZnVuY3Rpb24oZyxCLHcpe3JldHVybiBnPDEyPyJcdWM2MjRcdWM4MDQiOiJcdWM2MjRcdWQ2YzQifX0pfSh5KDk3NTg2KSl9LDYzNzQ0OmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBfKHcsUCxGLE8pe3ZhciB6PXtzOlsiXHhlN2Vu''@;'; put 'put ''ZCBzYW5ceGVleWUiLCJceGU3ZW5kIHNhblx4ZWV5ZXlhbiJdLHNzOlt3KyIgc2FuXHhlZXllIix3KyIgc2FuXHhlZXlleWFuIl0sbTpbImRlcVx4ZWVxZXllayIsImRlcVx4ZWVxZXlla1x4ZWEiXSxtbTpbdysiIGRlcVx4ZWVxZSIsdysiIGRlcVx4ZWVxZXlhbiJdLGg6WyJzYWV0ZWsiLCJz''@;'; put 'put ''YWV0ZWtceGVhIl0saGg6W3crIiBzYWV0Iix3KyIgc2FldGFuIl0sZDpbInJvamVrIiwicm9qZWtceGVhIl0sZGQ6W3crIiByb2oiLHcrIiByb2phbiJdLHc6WyJoZWZ0ZXllayIsImhlZnRleWVrXHhlYSJdLHd3Olt3KyIgaGVmdGUiLHcrIiBoZWZ0ZXlhbiJdLE06WyJtZWhlayIsIm1laGVr''@;'; put 'put ''XHhlYSJdLE1NOlt3KyIgbWVoIix3KyIgbWVoYW4iXSx5Olsic2FsZWsiLCJzYWxla1x4ZWEiXSx5eTpbdysiIHNhbCIsdysiIHNhbGFuIl19O3JldHVybiBQP3pbRl1bMF06eltGXVsxXX1JLmRlZmluZUxvY2FsZSgia3Uta21yIix7bW9udGhzOiJSXHhlYWJlbmRhbl9TaWJhdF9BZGFyX05c''@;'; put 'put ''eGVlc2FuX0d1bGFuX0hlelx4ZWVyYW5fVFx4ZWVybWVoX1RlYmF4X1x4Y2Vsb25fQ290bWVoX01pamRhcl9CZXJmYW5iYXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6IlJceGVhYl9TaWJfQWRhX05ceGVlc19HdWxfSGV6X1RceGVlcl9UZWJfXHhjZWxvX0NvdF9NaWpfQmVyIi5zcGxpdCgi''@;'; put 'put ''XyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6Illla1x1MDE1ZmVtX0R1XHUwMTVmZW1fU1x4ZWFcdTAxNWZlbV9ceGM3YXJcdTAxNWZlbV9QXHhlYW5jXHUwMTVmZW1fXHhjZW5fXHUwMTVlZW1ceGVlIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Illla19EdV9TXHhlYV9ceGM3''@;'; put 'put ''YXJfUFx4ZWFuX1x4Y2VuX1x1MDE1ZWVtIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJZZV9EdV9TXHhlYV9ceGM3YV9QXHhlYV9ceGNlbl9cdTAxNWVlIi5zcGxpdCgiXyIpLG1lcmlkaWVtOmZ1bmN0aW9uKHcsUCxGKXtyZXR1cm4gdzwxMj9GPyJibiI6IkJOIjpGPyJwbiI6IlBOIn0sbWVy''@;'; put 'put ''aWRpZW1QYXJzZTovYm58Qk58cG58UE4vLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJEbyBNTU1NW2FdIFlZWVlbYW5dIixMTEw6IkRvIE1NTU1bYV0gWVlZWVthbl0gSEg6bW0iLExMTEw6ImRkZGQsIERvIE1NTU1bYV0gWVlZ''@;'; put 'put ''WVthbl0gSEg6bW0iLGxsOiJEbyBNTU1bLl0gWVlZWVthbl0iLGxsbDoiRG8gTU1NWy5dIFlZWVlbYW5dIEhIOm1tIixsbGxsOiJkZGRbLl0sIERvIE1NTVsuXSBZWVlZW2FuXSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHhjZXJvIGRpIHNhZXRdIExUIFtkZV0iLG5leHREYXk6IltT''@;'; put 'put ''aWJceGVhIGRpIHNhZXRdIExUIFtkZV0iLG5leHRXZWVrOiJkZGRkIFtkaSBzYWV0XSBMVCBbZGVdIixsYXN0RGF5OiJbRHVoIGRpIHNhZXRdIExUIFtkZV0iLGxhc3RXZWVrOiJkZGRkW2EgYm9yXHhlZSBkaSBzYWV0XSBMVCBbZGVdIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0''@;'; put 'put ''dXJlOiJkaSAlcyBkZSIscGFzdDoiYmVyXHhlZSAlcyIsczpfLHNzOl8sbTpfLG1tOl8saDpfLGhoOl8sZDpfLGRkOl8sdzpfLHd3Ol8sTTpfLE1NOl8seTpfLHl5Ol99LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oPzp5XHhlYXxceGVhfFwuKS8sb3JkaW5hbDpmdW5jdGlvbih3''@;'; put 'put ''LFApe3ZhciBGPVAudG9Mb3dlckNhc2UoKTtyZXR1cm4gRi5pbmNsdWRlcygidyIpfHxGLmluY2x1ZGVzKCJtIik/dysiLiI6dytmdW5jdGlvbiBnKHcpe3ZhciBQPSh3PSIiK3cpLnN1YnN0cmluZyh3Lmxlbmd0aC0xKSxGPXcubGVuZ3RoPjE/dy5zdWJzdHJpbmcody5sZW5ndGgtMik6IiI7''@;'; put 'put ''cmV0dXJuIDEyPT1GfHwxMz09Rnx8IjIiIT1QJiYiMyIhPVAmJiI1MCIhPUYmJiI3MCIhPVAmJiI4MCIhPVA/Ilx4ZWEiOiJ5XHhlYSJ9KHcpfSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oeSg5NzU4NikpfSw3MDExMTpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7''@;'; put 'put ''dmFyIF89ezE6Ilx1MDY2MSIsMjoiXHUwNjYyIiwzOiJcdTA2NjMiLDQ6Ilx1MDY2NCIsNToiXHUwNjY1Iiw2OiJcdTA2NjYiLDc6Ilx1MDY2NyIsODoiXHUwNjY4Iiw5OiJcdTA2NjkiLDA6Ilx1MDY2MCJ9LGc9eyJcdTA2NjEiOiIxIiwiXHUwNjYyIjoiMiIsIlx1MDY2MyI6IjMiLCJcdTA2''@;'; put 'put ''NjQiOiI0IiwiXHUwNjY1IjoiNSIsIlx1MDY2NiI6IjYiLCJcdTA2NjciOiI3IiwiXHUwNjY4IjoiOCIsIlx1MDY2OSI6IjkiLCJcdTA2NjAiOiIwIn0sQj1bIlx1MDZhOVx1MDYyN1x1MDY0Nlx1MDY0OFx1MDY0Nlx1MDZjYyBcdTA2MmZcdTA2NDhcdTA2NDhcdTA2ZDVcdTA2NDUiLCJcdTA2''@;'; put 'put ''MzRcdTA2NDhcdTA2MjhcdTA2MjdcdTA2MmEiLCJcdTA2MjZcdTA2MjdcdTA2MzJcdTA2MjdcdTA2MzEiLCJcdTA2NDZcdTA2Y2NcdTA2MzNcdTA2MjdcdTA2NDYiLCJcdTA2MjZcdTA2MjdcdTA2Y2NcdTA2MjdcdTA2MzEiLCJcdTA2MmRcdTA2NDhcdTA2MzJcdTA2ZDVcdTA2Y2NcdTA2MzFc''@;'; put 'put ''dTA2MjdcdTA2NDYiLCJcdTA2MmFcdTA2ZDVcdTA2NDVcdTA2NDVcdTA2NDhcdTA2MzIiLCJcdTA2MjZcdTA2MjdcdTA2MjgiLCJcdTA2MjZcdTA2ZDVcdTA2Y2NcdTA2NDRcdTA2NDhcdTA2NDhcdTA2NDQiLCJcdTA2MmFcdTA2MzRcdTA2MzFcdTA2Y2NcdTA2NDZcdTA2Y2MgXHUwNmNjXHUw''@;'; put 'put ''NmQ1XHUwNjQzXHUwNmQ1XHUwNjQ1IiwiXHUwNjJhXHUwNjM0XHUwNjMxXHUwNmNjXHUwNjQ2XHUwNmNjIFx1MDYyZlx1MDY0OFx1MDY0OFx1MDZkNVx1MDY0NSIsIlx1MDY0M1x1MDYyN1x1MDY0Nlx1MDY0OFx1MDY0Nlx1MDZjYyBcdTA2Y2NcdTA2ZDVcdTA2YTlcdTA2ZDVcdTA2NDUiXTtJ''@;'; put 'put ''LmRlZmluZUxvY2FsZSgia3UiLHttb250aHM6Qixtb250aHNTaG9ydDpCLHdlZWtkYXlzOiJcdTA2Y2NcdTA2NDdcdTIwMGNcdTA2NDNcdTA2MzRcdTA2NDdcdTIwMGNcdTA2NDVcdTA2NDVcdTA2NDdcdTIwMGNfXHUwNjJmXHUwNjQ4XHUwNjQ4XHUwNjM0XHUwNjQ3XHUyMDBjXHUwNjQ1XHUw''@;'; put 'put ''NjQ1XHUwNjQ3XHUyMDBjX1x1MDYzM1x1MDZjZVx1MDYzNFx1MDY0N1x1MjAwY1x1MDY0NVx1MDY0NVx1MDY0N1x1MjAwY19cdTA2ODZcdTA2NDhcdTA2MjdcdTA2MzFcdTA2MzRcdTA2NDdcdTIwMGNcdTA2NDVcdTA2NDVcdTA2NDdcdTIwMGNfXHUwNjdlXHUwNmNlXHUwNjQ2XHUwNjJjXHUw''@;'; put 'put ''NjM0XHUwNjQ3XHUyMDBjXHUwNjQ1XHUwNjQ1XHUwNjQ3XHUyMDBjX1x1MDY0N1x1MDY0N1x1MjAwY1x1MDZjY1x1MDY0Nlx1MDZjY19cdTA2MzRcdTA2NDdcdTIwMGNcdTA2NDVcdTA2NDVcdTA2NDdcdTIwMGMiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwNmNjXHUwNjQ3XHUyMDBj''@;'; put 'put ''XHUwNjQzXHUwNjM0XHUwNjQ3XHUyMDBjXHUwNjQ1X1x1MDYyZlx1MDY0OFx1MDY0OFx1MDYzNFx1MDY0N1x1MjAwY1x1MDY0NV9cdTA2MzNcdTA2Y2VcdTA2MzRcdTA2NDdcdTIwMGNcdTA2NDVfXHUwNjg2XHUwNjQ4XHUwNjI3XHUwNjMxXHUwNjM0XHUwNjQ3XHUyMDBjXHUwNjQ1X1x1MDY3''@;'; put 'put ''ZVx1MDZjZVx1MDY0Nlx1MDYyY1x1MDYzNFx1MDY0N1x1MjAwY1x1MDY0NV9cdTA2NDdcdTA2NDdcdTIwMGNcdTA2Y2NcdTA2NDZcdTA2Y2NfXHUwNjM0XHUwNjQ3XHUyMDBjXHUwNjQ1XHUwNjQ1XHUwNjQ3XHUyMDBjIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA2Y2NfXHUwNjJmX1x1''@;'; put 'put ''MDYzM19cdTA2ODZfXHUwNjdlX1x1MDY0N19cdTA2MzQiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIs''@;'; put 'put ''TExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxtZXJpZGllbVBhcnNlOi9cdTA2MjZcdTA2Y2VcdTA2NDhcdTA2MjdcdTA2MzFcdTA2NDdcdTIwMGN8XHUwNjI4XHUwNjQ3XHUyMDBjXHUwNmNjXHUwNjI3XHUwNjQ2XHUwNmNjLyxpc1BNOmZ1bmN0aW9uKFApe3JldHVybi9cdTA2MjZc''@;'; put 'put ''dTA2Y2VcdTA2NDhcdTA2MjdcdTA2MzFcdTA2NDdcdTIwMGMvLnRlc3QoUCl9LG1lcmlkaWVtOmZ1bmN0aW9uKFAsRixPKXtyZXR1cm4gUDwxMj8iXHUwNjI4XHUwNjQ3XHUyMDBjXHUwNmNjXHUwNjI3XHUwNjQ2XHUwNmNjIjoiXHUwNjI2XHUwNmNlXHUwNjQ4XHUwNjI3XHUwNjMxXHUwNjQ3''@;'; put 'put ''XHUyMDBjIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA2MjZcdTA2NDdcdTIwMGNcdTA2NDVcdTA2MzFcdTA2YzYgXHUwNjQzXHUwNjI3XHUwNjJhXHUwNjk4XHUwNjQ1XHUwNmNlXHUwNjMxXSBMVCIsbmV4dERheToiW1x1MDYyOFx1MDY0N1x1MjAwY1x1MDZjY1x1MDYyN1x1MDY0Nlx1MDZj''@;'; put 'put ''YyBcdTA2NDNcdTA2MjdcdTA2MmFcdTA2OThcdTA2NDVcdTA2Y2VcdTA2MzFdIExUIixuZXh0V2VlazoiZGRkZCBbXHUwNjQzXHUwNjI3XHUwNjJhXHUwNjk4XHUwNjQ1XHUwNmNlXHUwNjMxXSBMVCIsbGFzdERheToiW1x1MDYyZlx1MDY0OFx1MDZjZVx1MDY0Nlx1MDZjZSBcdTA2NDNcdTA2''@;'; put 'put ''MjdcdTA2MmFcdTA2OThcdTA2NDVcdTA2Y2VcdTA2MzFdIExUIixsYXN0V2VlazoiZGRkZCBbXHUwNjQzXHUwNjI3XHUwNjJhXHUwNjk4XHUwNjQ1XHUwNmNlXHUwNjMxXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUwNjQ0XHUwNjQ3XHUyMDBjICVzIixwYXN0''@;'; put 'put ''OiIlcyIsczoiXHUwNjg2XHUwNjQ3XHUyMDBjXHUwNjQ2XHUwNjJmIFx1MDY4Nlx1MDYzMVx1MDY0M1x1MDY0N1x1MjAwY1x1MDZjY1x1MDY0N1x1MjAwY1x1MDY0MyIsc3M6Ilx1MDY4Nlx1MDYzMVx1MDY0M1x1MDY0N1x1MjAwYyAlZCIsbToiXHUwNmNjXHUwNjQ3XHUyMDBjXHUwNjQzIFx1''@;'; put 'put ''MDYyZVx1MDY0OFx1MDY0NFx1MDY0N1x1MjAwY1x1MDY0MyIsbW06IiVkIFx1MDYyZVx1MDY0OFx1MDY0NFx1MDY0N1x1MjAwY1x1MDY0MyIsaDoiXHUwNmNjXHUwNjQ3XHUyMDBjXHUwNjQzIFx1MDY0M1x1MDYyN1x1MDYyYVx1MDY5OFx1MDY0NVx1MDZjZVx1MDYzMSIsaGg6IiVkIFx1MDY0''@;'; put 'put ''M1x1MDYyN1x1MDYyYVx1MDY5OFx1MDY0NVx1MDZjZVx1MDYzMSIsZDoiXHUwNmNjXHUwNjQ3XHUyMDBjXHUwNjQzIFx1MDY5NVx1MDZjNlx1MDY5OCIsZGQ6IiVkIFx1MDY5NVx1MDZjNlx1MDY5OCIsTToiXHUwNmNjXHUwNjQ3XHUyMDBjXHUwNjQzIFx1MDY0NVx1MDYyN1x1MDY0Nlx1MDZh''@;'; put 'put ''ZiIsTU06IiVkIFx1MDY0NVx1MDYyN1x1MDY0Nlx1MDZhZiIseToiXHUwNmNjXHUwNjQ3XHUyMDBjXHUwNjQzIFx1MDYzM1x1MDYyN1x1MDZiNSIseXk6IiVkIFx1MDYzM1x1MDYyN1x1MDZiNSJ9LHByZXBhcnNlOmZ1bmN0aW9uKFApe3JldHVybiBQLnJlcGxhY2UoL1tcdTA2NjFcdTA2NjJc''@;'; put 'put ''dTA2NjNcdTA2NjRcdTA2NjVcdTA2NjZcdTA2NjdcdTA2NjhcdTA2NjlcdTA2NjBdL2csZnVuY3Rpb24oRil7cmV0dXJuIGdbRl19KS5yZXBsYWNlKC9cdTA2MGMvZywiLCIpfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKFApe3JldHVybiBQLnJlcGxhY2UoL1xkL2csZnVuY3Rpb24oRil7cmV0dXJu''@;'; put 'put ''IF9bRl19KS5yZXBsYWNlKC8sL2csIlx1MDYwYyIpfSx3ZWVrOntkb3c6Nixkb3k6MTJ9fSl9KHkoOTc1ODYpKX0sOTkxODc6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO3ZhciBfPXswOiItXHUwNDQ3XHUwNGFmIiwxOiItXHUwNDQ3XHUwNDM4IiwyOiItXHUw''@;'; put 'put ''NDQ3XHUwNDM4IiwzOiItXHUwNDQ3XHUwNGFmIiw0OiItXHUwNDQ3XHUwNGFmIiw1OiItXHUwNDQ3XHUwNDM4Iiw2OiItXHUwNDQ3XHUwNDRiIiw3OiItXHUwNDQ3XHUwNDM4Iiw4OiItXHUwNDQ3XHUwNDM4Iiw5OiItXHUwNDQ3XHUwNDQzIiwxMDoiLVx1MDQ0N1x1MDQ0MyIsMjA6Ii1cdTA0''@;'; put 'put ''NDdcdTA0NGIiLDMwOiItXHUwNDQ3XHUwNDQzIiw0MDoiLVx1MDQ0N1x1MDQ0YiIsNTA6Ii1cdTA0NDdcdTA0YWYiLDYwOiItXHUwNDQ3XHUwNDRiIiw3MDoiLVx1MDQ0N1x1MDQzOCIsODA6Ii1cdTA0NDdcdTA0MzgiLDkwOiItXHUwNDQ3XHUwNDQzIiwxMDA6Ii1cdTA0NDdcdTA0YWYifTtJ''@;'; put 'put ''LmRlZmluZUxvY2FsZSgia3kiLHttb250aHM6Ilx1MDQ0Zlx1MDQzZFx1MDQzMlx1MDQzMFx1MDQ0MFx1MDQ0Y19cdTA0NDRcdTA0MzVcdTA0MzJcdTA0NDBcdTA0MzBcdTA0M2JcdTA0NGNfXHUwNDNjXHUwNDMwXHUwNDQwXHUwNDQyX1x1MDQzMFx1MDQzZlx1MDQ0MFx1MDQzNVx1MDQzYlx1''@;'; put 'put ''MDQ0Y19cdTA0M2NcdTA0MzBcdTA0MzlfXHUwNDM4XHUwNDRlXHUwNDNkXHUwNDRjX1x1MDQzOFx1MDQ0ZVx1MDQzYlx1MDQ0Y19cdTA0MzBcdTA0MzJcdTA0MzNcdTA0NDNcdTA0NDFcdTA0NDJfXHUwNDQxXHUwNDM1XHUwNDNkXHUwNDQyXHUwNDRmXHUwNDMxXHUwNDQwXHUwNDRjX1x1MDQz''@;'; put 'put ''ZVx1MDQzYVx1MDQ0Mlx1MDQ0Zlx1MDQzMVx1MDQ0MFx1MDQ0Y19cdTA0M2RcdTA0M2VcdTA0NGZcdTA0MzFcdTA0NDBcdTA0NGNfXHUwNDM0XHUwNDM1XHUwNDNhXHUwNDMwXHUwNDMxXHUwNDQwXHUwNDRjIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTA0NGZcdTA0M2RcdTA0MzJfXHUw''@;'; put 'put ''NDQ0XHUwNDM1XHUwNDMyX1x1MDQzY1x1MDQzMFx1MDQ0MFx1MDQ0Ml9cdTA0MzBcdTA0M2ZcdTA0NDBfXHUwNDNjXHUwNDMwXHUwNDM5X1x1MDQzOFx1MDQ0ZVx1MDQzZFx1MDQ0Y19cdTA0MzhcdTA0NGVcdTA0M2JcdTA0NGNfXHUwNDMwXHUwNDMyXHUwNDMzX1x1MDQ0MVx1MDQzNVx1MDQz''@;'; put 'put ''ZF9cdTA0M2VcdTA0M2FcdTA0NDJfXHUwNDNkXHUwNDNlXHUwNDRmX1x1MDQzNFx1MDQzNVx1MDQzYSIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUwNDE2XHUwNDM1XHUwNDNhXHUwNDQ4XHUwNDM1XHUwNDNjXHUwNDMxXHUwNDM4X1x1MDQxNFx1MDRhZlx1MDQzOVx1MDQ0OFx1MDRlOVx1MDQz''@;'; put 'put ''Y1x1MDQzMVx1MDRhZl9cdTA0MjhcdTA0MzVcdTA0MzlcdTA0NDhcdTA0MzVcdTA0M2NcdTA0MzFcdTA0MzhfXHUwNDI4XHUwNDMwXHUwNDQwXHUwNDQ4XHUwNDM1XHUwNDNjXHUwNDMxXHUwNDM4X1x1MDQxMVx1MDQzNVx1MDQzOVx1MDQ0OFx1MDQzNVx1MDQzY1x1MDQzMVx1MDQzOF9cdTA0''@;'; put 'put ''MTZcdTA0NDNcdTA0M2NcdTA0MzBfXHUwNDE4XHUwNDQ4XHUwNDM1XHUwNDNjXHUwNDMxXHUwNDM4Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDQxNlx1MDQzNVx1MDQzYV9cdTA0MTRcdTA0YWZcdTA0MzlfXHUwNDI4XHUwNDM1XHUwNDM5X1x1MDQyOFx1MDQzMFx1MDQ0MF9cdTA0''@;'; put 'put ''MTFcdTA0MzVcdTA0MzlfXHUwNDE2XHUwNDQzXHUwNDNjX1x1MDQxOFx1MDQ0OFx1MDQzNSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNDE2XHUwNDNhX1x1MDQxNFx1MDQzOV9cdTA0MjhcdTA0MzlfXHUwNDI4XHUwNDQwX1x1MDQxMVx1MDQzOV9cdTA0MTZcdTA0M2NfXHUwNDE4XHUw''@;'; put 'put ''NDQ4Ii5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToi''@;'; put 'put ''W1x1MDQxMVx1MDRhZlx1MDQzM1x1MDRhZlx1MDQzZCBcdTA0NDFcdTA0MzBcdTA0MzBcdTA0NDJdIExUIixuZXh0RGF5OiJbXHUwNDJkXHUwNDQwXHUwNDQyXHUwNDM1XHUwNGEzIFx1MDQ0MVx1MDQzMFx1MDQzMFx1MDQ0Ml0gTFQiLG5leHRXZWVrOiJkZGRkIFtcdTA0NDFcdTA0MzBcdTA0''@;'; put 'put ''MzBcdTA0NDJdIExUIixsYXN0RGF5OiJbXHUwNDFhXHUwNDM1XHUwNDQ3XHUwNDRkXHUwNDRkIFx1MDQ0MVx1MDQzMFx1MDQzMFx1MDQ0Ml0gTFQiLGxhc3RXZWVrOiJbXHUwNGU4XHUwNDQyXHUwNDNhXHUwNGU5XHUwNDNkIFx1MDQzMFx1MDQzZlx1MDQ0Mlx1MDQzMFx1MDQzZFx1MDQ0Ylx1''@;'; put 'put ''MDQzZF0gZGRkZCBbXHUwNDNhXHUwNGFmXHUwNDNkXHUwNGFmXSBbXHUwNDQxXHUwNDMwXHUwNDMwXHUwNDQyXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgXHUwNDM4XHUwNDQ3XHUwNDM4XHUwNDNkXHUwNDM0XHUwNDM1IixwYXN0OiIlcyBcdTA0M2NcdTA0''@;'; put 'put ''NDNcdTA0NDBcdTA0NDNcdTA0M2QiLHM6Ilx1MDQzMVx1MDQzOFx1MDQ0MFx1MDQzZFx1MDQzNVx1MDQ0N1x1MDQzNSBcdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzQiLHNzOiIlZCBcdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzQiLG06Ilx1MDQzMVx1MDQz''@;'; put 'put ''OFx1MDQ0MCBcdTA0M2NcdTA0YWZcdTA0M2RcdTA0ZTlcdTA0NDIiLG1tOiIlZCBcdTA0M2NcdTA0YWZcdTA0M2RcdTA0ZTlcdTA0NDIiLGg6Ilx1MDQzMVx1MDQzOFx1MDQ0MCBcdTA0NDFcdTA0MzBcdTA0MzBcdTA0NDIiLGhoOiIlZCBcdTA0NDFcdTA0MzBcdTA0MzBcdTA0NDIiLGQ6Ilx1''@;'; put 'put ''MDQzMVx1MDQzOFx1MDQ0MCBcdTA0M2FcdTA0YWZcdTA0M2QiLGRkOiIlZCBcdTA0M2FcdTA0YWZcdTA0M2QiLE06Ilx1MDQzMVx1MDQzOFx1MDQ0MCBcdTA0MzBcdTA0MzkiLE1NOiIlZCBcdTA0MzBcdTA0MzkiLHk6Ilx1MDQzMVx1MDQzOFx1MDQ0MCBcdTA0MzZcdTA0NGJcdTA0M2IiLHl5''@;'; put 'put ''OiIlZCBcdTA0MzZcdTA0NGJcdTA0M2IifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9LShcdTA0NDdcdTA0Mzh8XHUwNDQ3XHUwNDRifFx1MDQ0N1x1MDRhZnxcdTA0NDdcdTA0NDMpLyxvcmRpbmFsOmZ1bmN0aW9uKEIpe3JldHVybiBCKyhfW0JdfHxfW0IlMTBdfHxfW0I+PTEw''@;'; put 'put ''MD8xMDA6bnVsbF0pfSx3ZWVrOntkb3c6MSxkb3k6N319KX0oeSg5NzU4NikpfSwzNTk2OTpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gXyhGLE8seixOKXt2YXIgTD17bTpbImVuZyBNaW51dHQiLCJlbmdlciBNaW51dHQiXSxoOlsiZW5nIFN0''@;'; put 'put ''b25uIiwiZW5nZXIgU3Rvbm4iXSxkOlsiZWVuIERhZyIsImVuZ2VtIERhZyJdLE06WyJlZSBNb3VudCIsImVuZ2VtIE1vdW50Il0seTpbImVlIEpvZXIiLCJlbmdlbSBKb2VyIl19O3JldHVybiBPP0xbel1bMF06TFt6XVsxXX1mdW5jdGlvbiB3KEYpe2lmKEY9cGFyc2VJbnQoRiwxMCksaXNO''@;'; put 'put ''YU4oRikpcmV0dXJuITE7aWYoRjwwKXJldHVybiEwO2lmKEY8MTApcmV0dXJuIDQ8PUYmJkY8PTc7aWYoRjwxMDApe3ZhciBPPUYlMTA7cmV0dXJuIHcoMD09PU8/Ri8xMDpPKX1pZihGPDFlNCl7Zm9yKDtGPj0xMDspRi89MTA7cmV0dXJuIHcoRil9cmV0dXJuIHcoRi89MWUzKX1JLmRlZmlu''@;'; put 'put ''ZUxvY2FsZSgibGIiLHttb250aHM6IkphbnVhcl9GZWJydWFyX01ceGU0ZXJ6X0Ficlx4ZWJsbF9NZWVfSnVuaV9KdWxpX0F1Z3VzdF9TZXB0ZW1iZXJfT2t0b2Jlcl9Ob3ZlbWJlcl9EZXplbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuLl9GZWJyLl9NcnouX0Fici5fTWVlX0p1''@;'; put 'put ''bi5fSnVsLl9BdWcuX1NlcHQuX09rdC5fTm92Ll9EZXouIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6IlNvbm5kZWdfTVx4ZTlpbmRlZ19EXHhlYm5zY2hkZWdfTVx4ZWJ0dHdvY2hfRG9ubmVzY2hkZWdfRnJlaWRlZ19TYW1zY2hkZWciLnNwbGl0KCJfIiksd2Vl''@;'; put 'put ''a2RheXNTaG9ydDoiU28uX01ceGU5Ll9EXHhlYi5fTVx4ZWIuX0RvLl9Gci5fU2EuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTb19NXHhlOV9EXHhlYl9NXHhlYl9Eb19Gcl9TYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJIOm1tIFtB''@;'; put 'put ''dWVyXSIsTFRTOiJIOm1tOnNzIFtBdWVyXSIsTDoiREQuTU0uWVlZWSIsTEw6IkQuIE1NTU0gWVlZWSIsTExMOiJELiBNTU1NIFlZWVkgSDptbSBbQXVlcl0iLExMTEw6ImRkZGQsIEQuIE1NTU0gWVlZWSBIOm1tIFtBdWVyXSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbSGF1dCB1bV0gTFQiLHNh''@;'; put 'put ''bWVFbHNlOiJMIixuZXh0RGF5OiJbTXVlciB1bV0gTFQiLG5leHRXZWVrOiJkZGRkIFt1bV0gTFQiLGxhc3REYXk6IltHXHhlYnNjaHRlciB1bV0gTFQiLGxhc3RXZWVrOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMjpjYXNlIDQ6cmV0dXJuIltMZXNjaHRlbl0gZGRkZCBb''@;'; put 'put ''dW1dIExUIjtkZWZhdWx0OnJldHVybiJbTGVzY2h0ZV0gZGRkZCBbdW1dIExUIn19fSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpmdW5jdGlvbiBnKEYpe3JldHVybiB3KEYuc3Vic3RyKDAsRi5pbmRleE9mKCIgIikpKT8iYSAiK0Y6ImFuICIrRn0scGFzdDpmdW5jdGlvbiBCKEYpe3JldHVybiB3''@;'; put 'put ''KEYuc3Vic3RyKDAsRi5pbmRleE9mKCIgIikpKT8idmlydSAiK0Y6InZpcnVuICIrRn0sczoiZSBwdWVyIFNla29ubmVuIixzczoiJWQgU2Vrb25uZW4iLG06XyxtbToiJWQgTWludXR0ZW4iLGg6XyxoaDoiJWQgU3Rvbm5lbiIsZDpfLGRkOiIlZCBEZWVnIixNOl8sTU06IiVkIE1ceGU5aW50''@;'; put 'put ''Iix5Ol8seXk6IiVkIEpvZXIifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KHkoOTc1ODYpKX0sMzM1MjY6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxl''@;'; put 'put ''KCJsbyIse21vbnRoczoiXHUwZWExXHUwZWIxXHUwZTg3XHUwZTgxXHUwZWFkXHUwZTk5X1x1MGU4MVx1MGViOFx1MGVhMVx1MGU5ZVx1MGViMl9cdTBlYTFcdTBlYjVcdTBlOTlcdTBlYjJfXHUwZWMwXHUwZWExXHUwZWFhXHUwZWIyX1x1MGU5ZVx1MGViNlx1MGU5NFx1MGVhYVx1MGViMFx1''@;'; put 'put ''MGU5ZVx1MGViMl9cdTBlYTFcdTBlYjRcdTBlOTZcdTBlYjhcdTBlOTlcdTBlYjJfXHUwZTgxXHUwZWNkXHUwZWE1XHUwZWIwXHUwZTgxXHUwZWJiXHUwZTk0X1x1MGVhYVx1MGViNFx1MGU4N1x1MGVhYlx1MGViMl9cdTBlODFcdTBlYjFcdTBlOTlcdTBlOGRcdTBlYjJfXHUwZTk1XHUwZWI4''@;'; put 'put ''XHUwZWE1XHUwZWIyX1x1MGU5ZVx1MGViMFx1MGU4OFx1MGViNFx1MGU4MV9cdTBlOTdcdTBlYjFcdTBlOTlcdTBlYTdcdTBlYjIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MGVhMVx1MGViMVx1MGU4N1x1MGU4MVx1MGVhZFx1MGU5OV9cdTBlODFcdTBlYjhcdTBlYTFcdTBlOWVcdTBl''@;'; put 'put ''YjJfXHUwZWExXHUwZWI1XHUwZTk5XHUwZWIyX1x1MGVjMFx1MGVhMVx1MGVhYVx1MGViMl9cdTBlOWVcdTBlYjZcdTBlOTRcdTBlYWFcdTBlYjBcdTBlOWVcdTBlYjJfXHUwZWExXHUwZWI0XHUwZTk2XHUwZWI4XHUwZTk5XHUwZWIyX1x1MGU4MVx1MGVjZFx1MGVhNVx1MGViMFx1MGU4MVx1''@;'; put 'put ''MGViYlx1MGU5NF9cdTBlYWFcdTBlYjRcdTBlODdcdTBlYWJcdTBlYjJfXHUwZTgxXHUwZWIxXHUwZTk5XHUwZThkXHUwZWIyX1x1MGU5NVx1MGViOFx1MGVhNVx1MGViMl9cdTBlOWVcdTBlYjBcdTBlODhcdTBlYjRcdTBlODFfXHUwZTk3XHUwZWIxXHUwZTk5XHUwZWE3XHUwZWIyIi5zcGxp''@;'; put 'put ''dCgiXyIpLHdlZWtkYXlzOiJcdTBlYWRcdTBlYjJcdTBlOTdcdTBlYjRcdTBlOTRfXHUwZTg4XHUwZWIxXHUwZTk5X1x1MGVhZFx1MGViMVx1MGU4N1x1MGU4NFx1MGViMlx1MGU5OV9cdTBlOWVcdTBlYjhcdTBlOTRfXHUwZTllXHUwZWIwXHUwZWFiXHUwZWIxXHUwZTk0X1x1MGVhYVx1MGVi''@;'; put 'put ''OFx1MGU4MV9cdTBlYzBcdTBlYWFcdTBlYmJcdTBlYjIiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwZTk3XHUwZWI0XHUwZTk0X1x1MGU4OFx1MGViMVx1MGU5OV9cdTBlYWRcdTBlYjFcdTBlODdcdTBlODRcdTBlYjJcdTBlOTlfXHUwZTllXHUwZWI4XHUwZTk0X1x1MGU5ZVx1MGVi''@;'; put 'put ''MFx1MGVhYlx1MGViMVx1MGU5NF9cdTBlYWFcdTBlYjhcdTBlODFfXHUwZWMwXHUwZWFhXHUwZWJiXHUwZWIyIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTBlOTdfXHUwZTg4X1x1MGVhZFx1MGU4NF9cdTBlOWVfXHUwZTllXHUwZWFiX1x1MGVhYVx1MGU4MV9cdTBlYWEiLnNwbGl0KCJf''@;'; put 'put ''Iiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiXHUwZWE3XHUwZWIxXHUwZTk5ZGRkZCBEIE1NTU0gWVlZWSBI''@;'; put 'put ''SDptbSJ9LG1lcmlkaWVtUGFyc2U6L1x1MGU5NVx1MGVhZFx1MGU5OVx1MGVjMFx1MGU4YVx1MGViYlx1MGVjOVx1MGViMnxcdTBlOTVcdTBlYWRcdTBlOTlcdTBlYzFcdTBlYTVcdTBlODcvLGlzUE06ZnVuY3Rpb24oZyl7cmV0dXJuIlx1MGU5NVx1MGVhZFx1MGU5OVx1MGVjMVx1MGVhNVx1''@;'; put 'put ''MGU4NyI9PT1nfSxtZXJpZGllbTpmdW5jdGlvbihnLEIsdyl7cmV0dXJuIGc8MTI/Ilx1MGU5NVx1MGVhZFx1MGU5OVx1MGVjMFx1MGU4YVx1MGViYlx1MGVjOVx1MGViMiI6Ilx1MGU5NVx1MGVhZFx1MGU5OVx1MGVjMVx1MGVhNVx1MGU4NyJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwZWEx''@;'; put 'put ''XHUwZWI3XHUwZWM5XHUwZTk5XHUwZWI1XHUwZWM5XHUwZWMwXHUwZWE3XHUwZWE1XHUwZWIyXSBMVCIsbmV4dERheToiW1x1MGVhMVx1MGViN1x1MGVjOVx1MGVhZFx1MGViN1x1MGVjOFx1MGU5OVx1MGVjMFx1MGVhN1x1MGVhNVx1MGViMl0gTFQiLG5leHRXZWVrOiJbXHUwZWE3XHUwZWIx''@;'; put 'put ''XHUwZTk5XWRkZGRbXHUwZWRjXHUwZWM5XHUwZWIyXHUwZWMwXHUwZWE3XHUwZWE1XHUwZWIyXSBMVCIsbGFzdERheToiW1x1MGVhMVx1MGViN1x1MGVjOVx1MGVhN1x1MGViMlx1MGU5OVx1MGU5OVx1MGViNVx1MGVjOVx1MGVjMFx1MGVhN1x1MGVhNVx1MGViMl0gTFQiLGxhc3RXZWVrOiJb''@;'; put 'put ''XHUwZWE3XHUwZWIxXHUwZTk5XWRkZGRbXHUwZWMxXHUwZWE1XHUwZWM5XHUwZWE3XHUwZTk5XHUwZWI1XHUwZWM5XHUwZWMwXHUwZWE3XHUwZWE1XHUwZWIyXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUwZWFkXHUwZWI1XHUwZTgxICVzIixwYXN0OiIlc1x1''@;'; put 'put ''MGU5Y1x1MGVjOFx1MGViMlx1MGU5OVx1MGVhMVx1MGViMiIsczoiXHUwZTlhXHUwZWNkXHUwZWM4XHUwZWMwXHUwZTk3XHUwZWJiXHUwZWM4XHUwZWIyXHUwZWMzXHUwZTk0XHUwZWE3XHUwZWI0XHUwZTk5XHUwZWIyXHUwZTk3XHUwZWI1IixzczoiJWQgXHUwZWE3XHUwZWI0XHUwZTk5XHUw''@;'; put 'put ''ZWIyXHUwZTk3XHUwZWI1IixtOiIxIFx1MGU5OVx1MGViMlx1MGU5N1x1MGViNSIsbW06IiVkIFx1MGU5OVx1MGViMlx1MGU5N1x1MGViNSIsaDoiMSBcdTBlOGFcdTBlYmJcdTBlYzhcdTBlYTdcdTBlYzJcdTBlYTFcdTBlODciLGhoOiIlZCBcdTBlOGFcdTBlYmJcdTBlYzhcdTBlYTdcdTBl''@;'; put 'put ''YzJcdTBlYTFcdTBlODciLGQ6IjEgXHUwZWExXHUwZWI3XHUwZWM5IixkZDoiJWQgXHUwZWExXHUwZWI3XHUwZWM5IixNOiIxIFx1MGVjMFx1MGU5NFx1MGViN1x1MGVhZFx1MGU5OSIsTU06IiVkIFx1MGVjMFx1MGU5NFx1MGViN1x1MGVhZFx1MGU5OSIseToiMSBcdTBlOWJcdTBlYjUiLHl5''@;'; put 'put ''OiIlZCBcdTBlOWJcdTBlYjUifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi8oXHUwZTk3XHUwZWI1XHUwZWM4KVxkezEsMn0vLG9yZGluYWw6ZnVuY3Rpb24oZyl7cmV0dXJuIlx1MGU5N1x1MGViNVx1MGVjOCIrZ319KX0oeSg5NzU4NikpfSw5MDQxMTpmdW5jdGlvbih1ZSxYLHkpeyFmdW5j''@;'; put 'put ''dGlvbihJKXsidXNlIHN0cmljdCI7dmFyIF89e3NzOiJzZWt1bmRcdTAxMTdfc2VrdW5kXHUwMTdlaVx1MDE3M19zZWt1bmRlcyIsbToibWludXRcdTAxMTdfbWludXRcdTAxMTdzX21pbnV0XHUwMTE5IixtbToibWludXRcdTAxMTdzX21pbnVcdTAxMGRpXHUwMTczX21pbnV0ZXMiLGg6InZh''@;'; put 'put ''bGFuZGFfdmFsYW5kb3NfdmFsYW5kXHUwMTA1IixoaDoidmFsYW5kb3NfdmFsYW5kXHUwMTczX3ZhbGFuZGFzIixkOiJkaWVuYV9kaWVub3NfZGllblx1MDEwNSIsZGQ6ImRpZW5vc19kaWVuXHUwMTczX2RpZW5hcyIsTToibVx1MDExN251b19tXHUwMTE3bmVzaW9fbVx1MDExN25lc1x1MDEy''@;'; put 'put ''ZiIsTU06Im1cdTAxMTduZXNpYWlfbVx1MDExN25lc2lcdTAxNzNfbVx1MDExN25lc2l1cyIseToibWV0YWlfbWV0XHUwMTczX21ldHVzIix5eToibWV0YWlfbWV0XHUwMTczX21ldHVzIn07ZnVuY3Rpb24gQih6LE4sTCxLKXtyZXR1cm4gTj9QKEwpWzBdOks/UChMKVsxXTpQKEwpWzJdfWZ1''@;'; put 'put ''bmN0aW9uIHcoeil7cmV0dXJuIHolMTA9PTB8fHo+MTAmJno8MjB9ZnVuY3Rpb24gUCh6KXtyZXR1cm4gX1t6XS5zcGxpdCgiXyIpfWZ1bmN0aW9uIEYoeixOLEwsSyl7dmFyIFU9eisiICI7cmV0dXJuIDE9PT16P1UrQigwLE4sTFswXSxLKTpOP1UrKHcoeik/UChMKVsxXTpQKEwpWzBdKTpL''@;'; put 'put ''P1UrUChMKVsxXTpVKyh3KHopP1AoTClbMV06UChMKVsyXSl9SS5kZWZpbmVMb2NhbGUoImx0Iix7bW9udGhzOntmb3JtYXQ6InNhdXNpb192YXNhcmlvX2tvdm9fYmFsYW5kXHUwMTdlaW9fZ2VndVx1MDE3ZVx1MDExN3NfYmlyXHUwMTdlZWxpb19saWVwb3NfcnVncGpcdTAxNmJcdTAxMGRp''@;'; put 'put ''b19ydWdzXHUwMTE3am9fc3BhbGlvX2xhcGtyaVx1MDEwZGlvX2dydW9kXHUwMTdlaW8iLnNwbGl0KCJfIiksc3RhbmRhbG9uZToic2F1c2lzX3Zhc2FyaXNfa292YXNfYmFsYW5kaXNfZ2VndVx1MDE3ZVx1MDExN19iaXJcdTAxN2VlbGlzX2xpZXBhX3J1Z3BqXHUwMTZidGlzX3J1Z3NcdTAx''@;'; put 'put ''MTdqaXNfc3BhbGlzX2xhcGtyaXRpc19ncnVvZGlzIi5zcGxpdCgiXyIpLGlzRm9ybWF0Oi9EW29EXT8oXFtbXlxbXF1dKlxdfFxzKStNTU1NP3xNTU1NPyhcW1teXFtcXV0qXF18XHMpK0Rbb0RdPy99LG1vbnRoc1Nob3J0OiJzYXVfdmFzX2tvdl9iYWxfZ2VnX2Jpcl9saWVfcmdwX3Jnc19z''@;'; put 'put ''cGFfbGFwX2dyZCIuc3BsaXQoIl8iKSx3ZWVrZGF5czp7Zm9ybWF0OiJzZWttYWRpZW5cdTAxMmZfcGlybWFkaWVuXHUwMTJmX2FudHJhZGllblx1MDEyZl90cmVcdTAxMGRpYWRpZW5cdTAxMmZfa2V0dmlydGFkaWVuXHUwMTJmX3Blbmt0YWRpZW5cdTAxMmZfXHUwMTYxZVx1MDE2MXRhZGll''@;'; put 'put ''blx1MDEyZiIuc3BsaXQoIl8iKSxzdGFuZGFsb25lOiJzZWttYWRpZW5pc19waXJtYWRpZW5pc19hbnRyYWRpZW5pc190cmVcdTAxMGRpYWRpZW5pc19rZXR2aXJ0YWRpZW5pc19wZW5rdGFkaWVuaXNfXHUwMTYxZVx1MDE2MXRhZGllbmlzIi5zcGxpdCgiXyIpLGlzRm9ybWF0Oi9kZGRkIEhI''@;'; put 'put ''Om1tL30sd2Vla2RheXNTaG9ydDoiU2VrX1Bpcl9BbnRfVHJlX0tldF9QZW5fXHUwMTYwZVx1MDE2MSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiU19QX0FfVF9LX1BuX1x1MDE2MCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIs''@;'; put 'put ''TFRTOiJISDptbTpzcyIsTDoiWVlZWS1NTS1ERCIsTEw6IllZWVkgW20uXSBNTU1NIEQgW2QuXSIsTExMOiJZWVlZIFttLl0gTU1NTSBEIFtkLl0sIEhIOm1tIFt2YWwuXSIsTExMTDoiWVlZWSBbbS5dIE1NTU0gRCBbZC5dLCBkZGRkLCBISDptbSBbdmFsLl0iLGw6IllZWVktTU0tREQiLGxs''@;'; put 'put ''OiJZWVlZIFttLl0gTU1NTSBEIFtkLl0iLGxsbDoiWVlZWSBbbS5dIE1NTU0gRCBbZC5dLCBISDptbSBbdmFsLl0iLGxsbGw6IllZWVkgW20uXSBNTU1NIEQgW2QuXSwgZGRkLCBISDptbSBbdmFsLl0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDE2MGlhbmRpZW5dIExUIixuZXh0RGF5OiJb''@;'; put 'put ''Unl0b2pdIExUIixuZXh0V2VlazoiZGRkZCBMVCIsbGFzdERheToiW1Zha2FyXSBMVCIsbGFzdFdlZWs6IltQcmFcdTAxMTdqdXNcdTAxMmZdIGRkZGQgTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6InBvICVzIixwYXN0OiJwcmllXHUwMTYxICVzIixzOmZ1bmN0aW9u''@;'; put 'put ''IGcoeixOLEwsSyl7cmV0dXJuIE4/ImtlbGlvcyBzZWt1bmRcdTAxMTdzIjpLPyJrZWxpXHUwMTczIHNla3VuZFx1MDE3ZWlcdTAxNzMiOiJrZWxpYXMgc2VrdW5kZXMifSxzczpGLG06QixtbTpGLGg6QixoaDpGLGQ6QixkZDpGLE06QixNTTpGLHk6Qix5eTpGfSxkYXlPZk1vbnRoT3JkaW5h''@;'; put 'put ''bFBhcnNlOi9cZHsxLDJ9LW9qaS8sb3JkaW5hbDpmdW5jdGlvbih6KXtyZXR1cm4geisiLW9qaSJ9LHdlZWs6e2RvdzoxLGRveTo0fX0pfSh5KDk3NTg2KSl9LDMyNjIxOmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz17c3M6InNla3VuZGVzX3Nla3Vu''@;'; put 'put ''ZFx1MDExM21fc2VrdW5kZV9zZWt1bmRlcyIuc3BsaXQoIl8iKSxtOiJtaW5cdTAxNmJ0ZXNfbWluXHUwMTZidFx1MDExM21fbWluXHUwMTZidGVfbWluXHUwMTZidGVzIi5zcGxpdCgiXyIpLG1tOiJtaW5cdTAxNmJ0ZXNfbWluXHUwMTZidFx1MDExM21fbWluXHUwMTZidGVfbWluXHUwMTZi''@;'; put 'put ''dGVzIi5zcGxpdCgiXyIpLGg6InN0dW5kYXNfc3R1bmRcdTAxMDFtX3N0dW5kYV9zdHVuZGFzIi5zcGxpdCgiXyIpLGhoOiJzdHVuZGFzX3N0dW5kXHUwMTAxbV9zdHVuZGFfc3R1bmRhcyIuc3BsaXQoIl8iKSxkOiJkaWVuYXNfZGllblx1MDEwMW1fZGllbmFfZGllbmFzIi5zcGxpdCgiXyIp''@;'; put 'put ''LGRkOiJkaWVuYXNfZGllblx1MDEwMW1fZGllbmFfZGllbmFzIi5zcGxpdCgiXyIpLE06Im1cdTAxMTNuZVx1MDE2MWFfbVx1MDExM25lXHUwMTYxaWVtX21cdTAxMTNuZXNpc19tXHUwMTEzbmVcdTAxNjFpIi5zcGxpdCgiXyIpLE1NOiJtXHUwMTEzbmVcdTAxNjFhX21cdTAxMTNuZVx1MDE2''@;'; put 'put ''MWllbV9tXHUwMTEzbmVzaXNfbVx1MDExM25lXHUwMTYxaSIuc3BsaXQoIl8iKSx5OiJnYWRhX2dhZGllbV9nYWRzX2dhZGkiLnNwbGl0KCJfIikseXk6ImdhZGFfZ2FkaWVtX2dhZHNfZ2FkaSIuc3BsaXQoIl8iKX07ZnVuY3Rpb24gZyhPLHosTil7cmV0dXJuIE4/eiUxMD09MSYmeiUxMDAh''@;'; put 'put ''PTExP09bMl06T1szXTp6JTEwPT0xJiZ6JTEwMCE9MTE/T1swXTpPWzFdfWZ1bmN0aW9uIEIoTyx6LE4pe3JldHVybiBPKyIgIitnKF9bTl0sTyx6KX1mdW5jdGlvbiB3KE8seixOKXtyZXR1cm4gZyhfW05dLE8seil9SS5kZWZpbmVMb2NhbGUoImx2Iix7bW9udGhzOiJqYW52XHUwMTAxcmlz''@;'; put 'put ''X2ZlYnJ1XHUwMTAxcmlzX21hcnRzX2Fwclx1MDEyYmxpc19tYWlqc19qXHUwMTZibmlqc19qXHUwMTZibGlqc19hdWd1c3RzX3NlcHRlbWJyaXNfb2t0b2JyaXNfbm92ZW1icmlzX2RlY2VtYnJpcyIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiamFuX2ZlYl9tYXJfYXByX21haV9qXHUwMTZi''@;'; put 'put ''bl9qXHUwMTZibF9hdWdfc2VwX29rdF9ub3ZfZGVjIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJzdlx1MDExM3RkaWVuYV9waXJtZGllbmFfb3RyZGllbmFfdHJlXHUwMTYxZGllbmFfY2V0dXJ0ZGllbmFfcGlla3RkaWVuYV9zZXN0ZGllbmEiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiU3Zf''@;'; put 'put ''UF9PX1RfQ19Qa19TIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTdl9QX09fVF9DX1BrX1MiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELk1NLllZWVkuIixMTDoiWVlZWS4gW2dhZGFdIEQu''@;'; put 'put ''IE1NTU0iLExMTDoiWVlZWS4gW2dhZGFdIEQuIE1NTU0sIEhIOm1tIixMTExMOiJZWVlZLiBbZ2FkYV0gRC4gTU1NTSwgZGRkZCwgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDE2MG9kaWVuIHB1bGtzdGVuXSBMVCIsbmV4dERheToiW1JcdTAxMmJ0IHB1bGtzdGVuXSBMVCIsbmV4''@;'; put 'put ''dFdlZWs6ImRkZGQgW3B1bGtzdGVuXSBMVCIsbGFzdERheToiW1Zha2FyIHB1bGtzdGVuXSBMVCIsbGFzdFdlZWs6IltQYWdcdTAxMDFqdVx1MDE2MVx1MDEwMV0gZGRkZCBbcHVsa3N0ZW5dIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJwXHUwMTEzYyAlcyIscGFz''@;'; put 'put ''dDoicGlybXMgJXMiLHM6ZnVuY3Rpb24gUChPLHope3JldHVybiB6PyJkYVx1MDE3ZWFzIHNla3VuZGVzIjoiZGFcdTAxN2VcdTAxMDFtIHNla3VuZFx1MDExM20ifSxzczpCLG06dyxtbTpCLGg6dyxoaDpCLGQ6dyxkZDpCLE06dyxNTTpCLHk6dyx5eTpCfSxkYXlPZk1vbnRoT3JkaW5hbFBh''@;'; put 'put ''cnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KHkoOTc1ODYpKX0sODU4Njk6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO3ZhciBfPXt3b3Jkczp7c3M6WyJzZWt1bmQiLCJzZWt1bmRhIiwic2VrdW5kaSJdLG06WyJq''@;'; put 'put ''ZWRhbiBtaW51dCIsImplZG5vZyBtaW51dGEiXSxtbTpbIm1pbnV0IiwibWludXRhIiwibWludXRhIl0saDpbImplZGFuIHNhdCIsImplZG5vZyBzYXRhIl0saGg6WyJzYXQiLCJzYXRhIiwic2F0aSJdLGRkOlsiZGFuIiwiZGFuYSIsImRhbmEiXSxNTTpbIm1qZXNlYyIsIm1qZXNlY2EiLCJt''@;'; put 'put ''amVzZWNpIl0seXk6WyJnb2RpbmEiLCJnb2RpbmUiLCJnb2RpbmEiXX0sY29ycmVjdEdyYW1tYXRpY2FsQ2FzZTpmdW5jdGlvbihCLHcpe3JldHVybiAxPT09Qj93WzBdOkI+PTImJkI8PTQ/d1sxXTp3WzJdfSx0cmFuc2xhdGU6ZnVuY3Rpb24oQix3LFApe3ZhciBGPV8ud29yZHNbUF07cmV0''@;'; put 'put ''dXJuIDE9PT1QLmxlbmd0aD93P0ZbMF06RlsxXTpCKyIgIitfLmNvcnJlY3RHcmFtbWF0aWNhbENhc2UoQixGKX19O0kuZGVmaW5lTG9jYWxlKCJtZSIse21vbnRoczoiamFudWFyX2ZlYnJ1YXJfbWFydF9hcHJpbF9tYWpfanVuX2p1bF9hdmd1c3Rfc2VwdGVtYmFyX29rdG9iYXJfbm92ZW1i''@;'; put 'put ''YXJfZGVjZW1iYXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Imphbi5fZmViLl9tYXIuX2Fwci5fbWFqX2p1bl9qdWxfYXZnLl9zZXAuX29rdC5fbm92Ll9kZWMuIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6Im5lZGplbGphX3BvbmVkamVsamFrX3V0b3Jha19z''@;'; put 'put ''cmlqZWRhX1x1MDEwZGV0dnJ0YWtfcGV0YWtfc3Vib3RhIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Im5lZC5fcG9uLl91dG8uX3NyaS5fXHUwMTBkZXQuX3BldC5fc3ViLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoibmVfcG9fdXRfc3JfXHUwMTBkZV9wZV9zdSIuc3BsaXQoIl8iKSx3''@;'; put 'put ''ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJIOm1tIixMVFM6Ikg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJELiBNTU1NIFlZWVkiLExMTDoiRC4gTU1NTSBZWVlZIEg6bW0iLExMTEw6ImRkZGQsIEQuIE1NTU0gWVlZWSBIOm1tIn0sY2FsZW5kYXI6e3NhbWVE''@;'; put 'put ''YXk6IltkYW5hcyB1XSBMVCIsbmV4dERheToiW3NqdXRyYSB1XSBMVCIsbmV4dFdlZWs6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAwOnJldHVybiJbdV0gW25lZGplbGp1XSBbdV0gTFQiO2Nhc2UgMzpyZXR1cm4iW3VdIFtzcmlqZWR1XSBbdV0gTFQiO2Nhc2UgNjpyZXR1''@;'; put 'put ''cm4iW3VdIFtzdWJvdHVdIFt1XSBMVCI7Y2FzZSAxOmNhc2UgMjpjYXNlIDQ6Y2FzZSA1OnJldHVybiJbdV0gZGRkZCBbdV0gTFQifX0sbGFzdERheToiW2p1XHUwMTBkZSB1XSBMVCIsbGFzdFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm5bIltwcm9cdTAxNjFsZV0gW25lZGplbGplXSBbdV0gTFQi''@;'; put 'put ''LCJbcHJvXHUwMTYxbG9nXSBbcG9uZWRqZWxqa2FdIFt1XSBMVCIsIltwcm9cdTAxNjFsb2ddIFt1dG9ya2FdIFt1XSBMVCIsIltwcm9cdTAxNjFsZV0gW3NyaWplZGVdIFt1XSBMVCIsIltwcm9cdTAxNjFsb2ddIFtcdTAxMGRldHZydGthXSBbdV0gTFQiLCJbcHJvXHUwMTYxbG9nXSBbcGV0''@;'; put 'put ''a2FdIFt1XSBMVCIsIltwcm9cdTAxNjFsZV0gW3N1Ym90ZV0gW3VdIExUIl1bdGhpcy5kYXkoKV19LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6InphICVzIixwYXN0OiJwcmlqZSAlcyIsczoibmVrb2xpa28gc2VrdW5kaSIsc3M6Xy50cmFuc2xhdGUsbTpfLnRyYW5zbGF0''@;'; put 'put ''ZSxtbTpfLnRyYW5zbGF0ZSxoOl8udHJhbnNsYXRlLGhoOl8udHJhbnNsYXRlLGQ6ImRhbiIsZGQ6Xy50cmFuc2xhdGUsTToibWplc2VjIixNTTpfLnRyYW5zbGF0ZSx5OiJnb2RpbnUiLHl5Ol8udHJhbnNsYXRlfSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6''@;'; put 'put ''IiVkLiIsd2Vlazp7ZG93OjEsZG95Ojd9fSl9KHkoOTc1ODYpKX0sMzU4ODE6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJtaSIse21vbnRoczoiS29oaS10XHUwMTAxdGVfSHVpLXRhbmd1cnVfUG91dFx1MDE2Yi10ZS1yYW5naV9Q''@;'; put 'put ''YWVuZ2Etd2hcdTAxMDF3aFx1MDEwMV9IYXJhdHVhX1BpcGlyaV9IXHUwMTRkbmdvaW5nb2lfSGVyZS10dXJpLWtcdTAxNGRrXHUwMTAxX01haHVydV9XaGlyaW5nYS1cdTAxMDEtbnVrdV9XaGlyaW5nYS1cdTAxMDEtcmFuZ2lfSGFraWhlYSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiS29o''@;'; put 'put ''aV9IdWlfUG91X1BhZV9IYXJhX1BpcGlfSFx1MDE0ZG5nb2lfSGVyZV9NYWh1X1doaS1udV9XaGktcmFfSGFraSIuc3BsaXQoIl8iKSxtb250aHNSZWdleDovKD86WydhLXpcdTAxMDFcdTAxNERcdTAxNkJdK1wtPyl7MSwzfS9pLG1vbnRoc1N0cmljdFJlZ2V4Oi8oPzpbJ2Etelx1MDEwMVx1''@;'; put 'put ''MDE0RFx1MDE2Ql0rXC0/KXsxLDN9L2ksbW9udGhzU2hvcnRSZWdleDovKD86WydhLXpcdTAxMDFcdTAxNERcdTAxNkJdK1wtPyl7MSwzfS9pLG1vbnRoc1Nob3J0U3RyaWN0UmVnZXg6Lyg/OlsnYS16XHUwMTAxXHUwMTREXHUwMTZCXStcLT8pezEsMn0vaSx3ZWVrZGF5czoiUlx1MDEwMXRh''@;'; put 'put ''cHVfTWFuZV9UXHUwMTZicmVpX1dlbmVyZWlfVFx1MDEwMWl0ZV9QYXJhaXJlX0hcdTAxMDF0YXJlaSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJUYV9NYV9UXHUwMTZiX1dlX1RcdTAxMDFpX1BhX0hcdTAxMDEiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlRhX01hX1RcdTAxNmJfV2Vf''@;'; put 'put ''VFx1MDEwMWlfUGFfSFx1MDEwMSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgW2ldIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBbaV0gSEg6''@;'; put 'put ''bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW2kgdGVpZSBtYWhhbmEsIGldIExUIixuZXh0RGF5OiJbYXBvcG8gaV0gTFQiLG5leHRXZWVrOiJkZGRkIFtpXSBMVCIsbGFzdERheToiW2luYW5haGkgaV0gTFQiLGxhc3RXZWVrOiJkZGRkIFt3aGFrYW11dHVuZ2EgaV0gTFQiLHNhbWVFbHNlOiJM''@;'; put 'put ''In0scmVsYXRpdmVUaW1lOntmdXR1cmU6Imkgcm90byBpICVzIixwYXN0OiIlcyBpIG11YSIsczoidGUgaFx1MDExM2tvbmEgcnVhcnVhIixzczoiJWQgaFx1MDExM2tvbmEiLG06ImhlIG1lbmV0aSIsbW06IiVkIG1lbmV0aSIsaDoidGUgaGFvcmEiLGhoOiIlZCBoYW9yYSIsZDoiaGUgcmEi''@;'; put 'put ''LGRkOiIlZCByYSIsTToiaGUgbWFyYW1hIixNTToiJWQgbWFyYW1hIix5OiJoZSB0YXUiLHl5OiIlZCB0YXUifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XHhiYS8sb3JkaW5hbDoiJWRceGJhIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oeSg5NzU4NikpfSw5MjM5MTpmdW5jdGlv''@;'; put 'put ''bih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoIm1rIix7bW9udGhzOiJcdTA0NThcdTA0MzBcdTA0M2RcdTA0NDNcdTA0MzBcdTA0NDBcdTA0MzhfXHUwNDQ0XHUwNDM1XHUwNDMyXHUwNDQwXHUwNDQzXHUwNDMwXHUwNDQwXHUwNDM4X1x1MDQzY1x1''@;'; put 'put ''MDQzMFx1MDQ0MFx1MDQ0Ml9cdTA0MzBcdTA0M2ZcdTA0NDBcdTA0MzhcdTA0M2JfXHUwNDNjXHUwNDMwXHUwNDU4X1x1MDQ1OFx1MDQ0M1x1MDQzZFx1MDQzOF9cdTA0NThcdTA0NDNcdTA0M2JcdTA0MzhfXHUwNDMwXHUwNDMyXHUwNDMzXHUwNDQzXHUwNDQxXHUwNDQyX1x1MDQ0MVx1MDQz''@;'; put 'put ''NVx1MDQzZlx1MDQ0Mlx1MDQzNVx1MDQzY1x1MDQzMlx1MDQ0MFx1MDQzOF9cdTA0M2VcdTA0M2FcdTA0NDJcdTA0M2VcdTA0M2NcdTA0MzJcdTA0NDBcdTA0MzhfXHUwNDNkXHUwNDNlXHUwNDM1XHUwNDNjXHUwNDMyXHUwNDQwXHUwNDM4X1x1MDQzNFx1MDQzNVx1MDQzYVx1MDQzNVx1MDQz''@;'; put 'put ''Y1x1MDQzMlx1MDQ0MFx1MDQzOCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwNDU4XHUwNDMwXHUwNDNkX1x1MDQ0NFx1MDQzNVx1MDQzMl9cdTA0M2NcdTA0MzBcdTA0NDBfXHUwNDMwXHUwNDNmXHUwNDQwX1x1MDQzY1x1MDQzMFx1MDQ1OF9cdTA0NThcdTA0NDNcdTA0M2RfXHUwNDU4''@;'; put 'put ''XHUwNDQzXHUwNDNiX1x1MDQzMFx1MDQzMlx1MDQzM19cdTA0NDFcdTA0MzVcdTA0M2ZfXHUwNDNlXHUwNDNhXHUwNDQyX1x1MDQzZFx1MDQzZVx1MDQzNV9cdTA0MzRcdTA0MzVcdTA0M2EiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MDQzZFx1MDQzNVx1MDQzNFx1MDQzNVx1MDQzYlx1MDQz''@;'; put 'put ''MF9cdTA0M2ZcdTA0M2VcdTA0M2RcdTA0MzVcdTA0MzRcdTA0MzVcdTA0M2JcdTA0M2RcdTA0MzhcdTA0M2FfXHUwNDMyXHUwNDQyXHUwNDNlXHUwNDQwXHUwNDNkXHUwNDM4XHUwNDNhX1x1MDQ0MVx1MDQ0MFx1MDQzNVx1MDQzNFx1MDQzMF9cdTA0NDdcdTA0MzVcdTA0NDJcdTA0MzJcdTA0''@;'; put 'put ''NDBcdTA0NDJcdTA0M2VcdTA0M2FfXHUwNDNmXHUwNDM1XHUwNDQyXHUwNDNlXHUwNDNhX1x1MDQ0MVx1MDQzMFx1MDQzMVx1MDQzZVx1MDQ0Mlx1MDQzMCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA0M2RcdTA0MzVcdTA0MzRfXHUwNDNmXHUwNDNlXHUwNDNkX1x1MDQzMlx1MDQ0''@;'; put 'put ''Mlx1MDQzZV9cdTA0NDFcdTA0NDBcdTA0MzVfXHUwNDQ3XHUwNDM1XHUwNDQyX1x1MDQzZlx1MDQzNVx1MDQ0Ml9cdTA0NDFcdTA0MzBcdTA0MzEiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDQzZGVfXHUwNDNmb19cdTA0MzJcdTA0NDJfXHUwNDQxXHUwNDQwX1x1MDQ0N1x1MDQzNV9c''@;'; put 'put ''dTA0M2ZcdTA0MzVfXHUwNDQxYSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0iLExUUzoiSDptbTpzcyIsTDoiRC5NTS5ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSDptbSJ9LGNhbGVuZGFy''@;'; put 'put ''OntzYW1lRGF5OiJbXHUwNDE0XHUwNDM1XHUwNDNkXHUwNDM1XHUwNDQxIFx1MDQzMlx1MDQzZV0gTFQiLG5leHREYXk6IltcdTA0MjNcdTA0NDJcdTA0NDBcdTA0MzUgXHUwNDMyXHUwNDNlXSBMVCIsbmV4dFdlZWs6IltcdTA0MTJcdTA0M2VdIGRkZGQgW1x1MDQzMlx1MDQzZV0gTFQiLGxh''@;'; put 'put ''c3REYXk6IltcdTA0MTJcdTA0NDdcdTA0MzVcdTA0NDBcdTA0MzAgXHUwNDMyXHUwNDNlXSBMVCIsbGFzdFdlZWs6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAwOmNhc2UgMzpjYXNlIDY6cmV0dXJuIltcdTA0MThcdTA0MzdcdTA0M2NcdTA0MzhcdTA0M2RcdTA0MzBcdTA0''@;'; put 'put ''NDJcdTA0MzBcdTA0NDJcdTA0MzBdIGRkZGQgW1x1MDQzMlx1MDQzZV0gTFQiO2Nhc2UgMTpjYXNlIDI6Y2FzZSA0OmNhc2UgNTpyZXR1cm4iW1x1MDQxOFx1MDQzN1x1MDQzY1x1MDQzOFx1MDQzZFx1MDQzMFx1MDQ0Mlx1MDQzOFx1MDQzZVx1MDQ0Ml0gZGRkZCBbXHUwNDMyXHUwNDNlXSBM''@;'; put 'put ''VCJ9fSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJcdTA0MzdcdTA0MzAgJXMiLHBhc3Q6Ilx1MDQzZlx1MDQ0MFx1MDQzNVx1MDQzNCAlcyIsczoiXHUwNDNkXHUwNDM1XHUwNDNhXHUwNDNlXHUwNDNiXHUwNDNhXHUwNDQzIFx1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1''@;'; put 'put ''MDQzZFx1MDQzNFx1MDQzOCIsc3M6IiVkIFx1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNFx1MDQzOCIsbToiXHUwNDM1XHUwNDM0XHUwNDNkXHUwNDMwIFx1MDQzY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQ0Mlx1MDQzMCIsbW06IiVkIFx1MDQzY1x1MDQzOFx1MDQzZFx1MDQ0''@;'; put 'put ''M1x1MDQ0Mlx1MDQzOCIsaDoiXHUwNDM1XHUwNDM0XHUwNDM1XHUwNDNkIFx1MDQ0N1x1MDQzMFx1MDQ0MSIsaGg6IiVkIFx1MDQ0N1x1MDQzMFx1MDQ0MVx1MDQzMCIsZDoiXHUwNDM1XHUwNDM0XHUwNDM1XHUwNDNkIFx1MDQzNFx1MDQzNVx1MDQzZCIsZGQ6IiVkIFx1MDQzNFx1MDQzNVx1''@;'; put 'put ''MDQzZFx1MDQzMCIsTToiXHUwNDM1XHUwNDM0XHUwNDM1XHUwNDNkIFx1MDQzY1x1MDQzNVx1MDQ0MVx1MDQzNVx1MDQ0NiIsTU06IiVkIFx1MDQzY1x1MDQzNVx1MDQ0MVx1MDQzNVx1MDQ0Nlx1MDQzOCIseToiXHUwNDM1XHUwNDM0XHUwNDNkXHUwNDMwIFx1MDQzM1x1MDQzZVx1MDQzNFx1''@;'; put 'put ''MDQzOFx1MDQzZFx1MDQzMCIseXk6IiVkIFx1MDQzM1x1MDQzZVx1MDQzNFx1MDQzOFx1MDQzZFx1MDQzOCJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0tKFx1MDQzNVx1MDQzMnxcdTA0MzVcdTA0M2R8XHUwNDQyXHUwNDM4fFx1MDQzMlx1MDQzOHxcdTA0NDBcdTA0Mzh8XHUw''@;'; put 'put ''NDNjXHUwNDM4KS8sb3JkaW5hbDpmdW5jdGlvbihnKXt2YXIgQj1nJTEwLHc9ZyUxMDA7cmV0dXJuIDA9PT1nP2crIi1cdTA0MzVcdTA0MzIiOjA9PT13P2crIi1cdTA0MzVcdTA0M2QiOnc+MTAmJnc8MjA/ZysiLVx1MDQ0Mlx1MDQzOCI6MT09PUI/ZysiLVx1MDQzMlx1MDQzOCI6Mj09PUI/''@;'; put 'put ''ZysiLVx1MDQ0MFx1MDQzOCI6Nz09PUJ8fDg9PT1CP2crIi1cdTA0M2NcdTA0MzgiOmcrIi1cdTA0NDJcdTA0MzgifSx3ZWVrOntkb3c6MSxkb3k6N319KX0oeSg5NzU4NikpfSwyMTEyNjpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUo''@;'; put 'put ''Im1sIix7bW9udGhzOiJcdTBkMWNcdTBkMjhcdTBkNDFcdTBkMzVcdTBkMzBcdTBkM2ZfXHUwZDJiXHUwZDQ2XHUwZDJjXHUwZDRkXHUwZDMwXHUwZDQxXHUwZDM1XHUwZDMwXHUwZDNmX1x1MGQyZVx1MGQzZVx1MGQ3Y1x1MGQxYVx1MGQ0ZFx1MGQxYVx1MGQ0ZF9cdTBkMGZcdTBkMmFcdTBk''@;'; put 'put ''NGRcdTBkMzBcdTBkM2ZcdTBkN2RfXHUwZDJlXHUwZDQ3XHUwZDJmXHUwZDRkX1x1MGQxY1x1MGQ0Mlx1MGQ3YV9cdTBkMWNcdTBkNDJcdTBkMzJcdTBkNDhfXHUwZDEzXHUwZDE3XHUwZDM4XHUwZDRkXHUwZDMxXHUwZDRkXHUwZDMxXHUwZDRkX1x1MGQzOFx1MGQ0Nlx1MGQyYVx1MGQ0ZFx1''@;'; put 'put ''MGQzMVx1MGQ0ZFx1MGQzMVx1MGQwMlx1MGQyY1x1MGQ3Y19cdTBkMTJcdTBkMTVcdTBkNGRcdTBkMWZcdTBkNGJcdTBkMmNcdTBkN2NfXHUwZDI4XHUwZDM1XHUwZDAyXHUwZDJjXHUwZDdjX1x1MGQyMVx1MGQzZlx1MGQzOFx1MGQwMlx1MGQyY1x1MGQ3YyIuc3BsaXQoIl8iKSxtb250aHNT''@;'; put 'put ''aG9ydDoiXHUwZDFjXHUwZDI4XHUwZDQxLl9cdTBkMmJcdTBkNDZcdTBkMmNcdTBkNGRcdTBkMzBcdTBkNDEuX1x1MGQyZVx1MGQzZVx1MGQ3Yy5fXHUwZDBmXHUwZDJhXHUwZDRkXHUwZDMwXHUwZDNmLl9cdTBkMmVcdTBkNDdcdTBkMmZcdTBkNGRfXHUwZDFjXHUwZDQyXHUwZDdhX1x1MGQx''@;'; put 'put ''Y1x1MGQ0Mlx1MGQzMlx1MGQ0OC5fXHUwZDEzXHUwZDE3Ll9cdTBkMzhcdTBkNDZcdTBkMmFcdTBkNGRcdTBkMzFcdTBkNGRcdTBkMzEuX1x1MGQxMlx1MGQxNVx1MGQ0ZFx1MGQxZlx1MGQ0Yi5fXHUwZDI4XHUwZDM1XHUwZDAyLl9cdTBkMjFcdTBkM2ZcdTBkMzhcdTBkMDIuIi5zcGxpdCgi''@;'; put 'put ''XyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6Ilx1MGQxZVx1MGQzZVx1MGQyZlx1MGQzMVx1MGQzZVx1MGQzNFx1MGQ0ZFx1MGQxYV9cdTBkMjRcdTBkM2ZcdTBkMTlcdTBkNGRcdTBkMTVcdTBkMzNcdTBkM2VcdTBkMzRcdTBkNGRcdTBkMWFfXHUwZDFhXHUwZDRhXHUwZDM1XHUw''@;'; put 'put ''ZDRkXHUwZDM1XHUwZDNlXHUwZDM0XHUwZDRkXHUwZDFhX1x1MGQyY1x1MGQ0MVx1MGQyN1x1MGQyOFx1MGQzZVx1MGQzNFx1MGQ0ZFx1MGQxYV9cdTBkMzVcdTBkNGRcdTBkMmZcdTBkM2VcdTBkMzRcdTBkM2VcdTBkMzRcdTBkNGRcdTBkMWFfXHUwZDM1XHUwZDQ2XHUwZDMzXHUwZDRkXHUw''@;'; put 'put ''ZDMzXHUwZDNmXHUwZDJmXHUwZDNlXHUwZDM0XHUwZDRkXHUwZDFhX1x1MGQzNlx1MGQyOFx1MGQzZlx1MGQyZlx1MGQzZVx1MGQzNFx1MGQ0ZFx1MGQxYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTBkMWVcdTBkM2VcdTBkMmZcdTBkN2NfXHUwZDI0XHUwZDNmXHUwZDE5XHUwZDRk''@;'; put 'put ''XHUwZDE1XHUwZDdlX1x1MGQxYVx1MGQ0YVx1MGQzNVx1MGQ0ZFx1MGQzNV9cdTBkMmNcdTBkNDFcdTBkMjdcdTBkN2JfXHUwZDM1XHUwZDRkXHUwZDJmXHUwZDNlXHUwZDM0XHUwZDAyX1x1MGQzNVx1MGQ0Nlx1MGQzM1x1MGQ0ZFx1MGQzM1x1MGQzZl9cdTBkMzZcdTBkMjhcdTBkM2YiLnNw''@;'; put 'put ''bGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MGQxZVx1MGQzZV9cdTBkMjRcdTBkM2ZfXHUwZDFhXHUwZDRhX1x1MGQyY1x1MGQ0MV9cdTBkMzVcdTBkNGRcdTBkMmZcdTBkM2VfXHUwZDM1XHUwZDQ2X1x1MGQzNiIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkEgaDptbSAtXHUwZDI4''@;'; put 'put ''XHUwZDQxIixMVFM6IkEgaDptbTpzcyAtXHUwZDI4XHUwZDQxIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVksIEEgaDptbSAtXHUwZDI4XHUwZDQxIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSwgQSBoOm1tIC1cdTBkMjhcdTBkNDEifSxjYWxlbmRh''@;'; put 'put ''cjp7c2FtZURheToiW1x1MGQwN1x1MGQyOFx1MGQ0ZFx1MGQyOFx1MGQ0ZF0gTFQiLG5leHREYXk6IltcdTBkMjhcdTBkM2VcdTBkMzNcdTBkNDZdIExUIixuZXh0V2VlazoiZGRkZCwgTFQiLGxhc3REYXk6IltcdTBkMDdcdTBkMjhcdTBkNGRcdTBkMjhcdTBkMzJcdTBkNDZdIExUIixsYXN0''@;'; put 'put ''V2VlazoiW1x1MGQxNVx1MGQzNFx1MGQzZlx1MGQxZVx1MGQ0ZFx1MGQxZV0gZGRkZCwgTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIFx1MGQxNVx1MGQzNFx1MGQzZlx1MGQxZVx1MGQ0ZFx1MGQxZVx1MGQ0ZCIscGFzdDoiJXMgXHUwZDJlXHUwZDQxXHUwZDdi''@;'; put 'put ''XHUwZDJhXHUwZDRkIixzOiJcdTBkMDVcdTBkN2RcdTBkMmEgXHUwZDI4XHUwZDNmXHUwZDJlXHUwZDNmXHUwZDM3XHUwZDE5XHUwZDRkXHUwZDE5XHUwZDdlIixzczoiJWQgXHUwZDM4XHUwZDQ2XHUwZDE1XHUwZDRkXHUwZDE1XHUwZDdiXHUwZDIxXHUwZDRkIixtOiJcdTBkMTJcdTBkMzBc''@;'; put 'put ''dTBkNDEgXHUwZDJlXHUwZDNmXHUwZDI4XHUwZDNmXHUwZDMxXHUwZDRkXHUwZDMxXHUwZDRkIixtbToiJWQgXHUwZDJlXHUwZDNmXHUwZDI4XHUwZDNmXHUwZDMxXHUwZDRkXHUwZDMxXHUwZDRkIixoOiJcdTBkMTJcdTBkMzBcdTBkNDEgXHUwZDJlXHUwZDIzXHUwZDNmXHUwZDE1XHUwZDRk''@;'; put 'put ''XHUwZDE1XHUwZDQyXHUwZDdjIixoaDoiJWQgXHUwZDJlXHUwZDIzXHUwZDNmXHUwZDE1XHUwZDRkXHUwZDE1XHUwZDQyXHUwZDdjIixkOiJcdTBkMTJcdTBkMzBcdTBkNDEgXHUwZDI2XHUwZDNmXHUwZDM1XHUwZDM4XHUwZDAyIixkZDoiJWQgXHUwZDI2XHUwZDNmXHUwZDM1XHUwZDM4XHUw''@;'; put 'put ''ZDAyIixNOiJcdTBkMTJcdTBkMzBcdTBkNDEgXHUwZDJlXHUwZDNlXHUwZDM4XHUwZDAyIixNTToiJWQgXHUwZDJlXHUwZDNlXHUwZDM4XHUwZDAyIix5OiJcdTBkMTJcdTBkMzBcdTBkNDEgXHUwZDM1XHUwZDdjXHUwZDM3XHUwZDAyIix5eToiJWQgXHUwZDM1XHUwZDdjXHUwZDM3XHUwZDAy''@;'; put 'put ''In0sbWVyaWRpZW1QYXJzZTovXHUwZDMwXHUwZDNlXHUwZDI0XHUwZDRkXHUwZDMwXHUwZDNmfFx1MGQzMFx1MGQzZVx1MGQzNVx1MGQzZlx1MGQzMlx1MGQ0NnxcdTBkMDlcdTBkMWFcdTBkNGRcdTBkMWEgXHUwZDE1XHUwZDM0XHUwZDNmXHUwZDFlXHUwZDRkXHUwZDFlXHUwZDRkfFx1MGQz''@;'; put 'put ''NVx1MGQ0OFx1MGQxNVx1MGQ0MVx1MGQyOFx1MGQ0ZFx1MGQyOFx1MGQ0N1x1MGQzMFx1MGQwMnxcdTBkMzBcdTBkM2VcdTBkMjRcdTBkNGRcdTBkMzBcdTBkM2YvaSxtZXJpZGllbUhvdXI6ZnVuY3Rpb24oZyxCKXtyZXR1cm4gMTI9PT1nJiYoZz0wKSwiXHUwZDMwXHUwZDNlXHUwZDI0XHUw''@;'; put 'put ''ZDRkXHUwZDMwXHUwZDNmIj09PUImJmc+PTR8fCJcdTBkMDlcdTBkMWFcdTBkNGRcdTBkMWEgXHUwZDE1XHUwZDM0XHUwZDNmXHUwZDFlXHUwZDRkXHUwZDFlXHUwZDRkIj09PUJ8fCJcdTBkMzVcdTBkNDhcdTBkMTVcdTBkNDFcdTBkMjhcdTBkNGRcdTBkMjhcdTBkNDdcdTBkMzBcdTBkMDIi''@;'; put 'put ''PT09Qj9nKzEyOmd9LG1lcmlkaWVtOmZ1bmN0aW9uKGcsQix3KXtyZXR1cm4gZzw0PyJcdTBkMzBcdTBkM2VcdTBkMjRcdTBkNGRcdTBkMzBcdTBkM2YiOmc8MTI/Ilx1MGQzMFx1MGQzZVx1MGQzNVx1MGQzZlx1MGQzMlx1MGQ0NiI6ZzwxNz8iXHUwZDA5XHUwZDFhXHUwZDRkXHUwZDFhIFx1''@;'; put 'put ''MGQxNVx1MGQzNFx1MGQzZlx1MGQxZVx1MGQ0ZFx1MGQxZVx1MGQ0ZCI6ZzwyMD8iXHUwZDM1XHUwZDQ4XHUwZDE1XHUwZDQxXHUwZDI4XHUwZDRkXHUwZDI4XHUwZDQ3XHUwZDMwXHUwZDAyIjoiXHUwZDMwXHUwZDNlXHUwZDI0XHUwZDRkXHUwZDMwXHUwZDNmIn19KX0oeSg5NzU4NikpfSw0''@;'; put 'put ''NDg5MjpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gXyhCLHcsUCxGKXtzd2l0Y2goUCl7Y2FzZSJzIjpyZXR1cm4gdz8iXHUwNDQ1XHUwNDRkXHUwNDM0XHUwNDQ1XHUwNDRkXHUwNDNkIFx1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1''@;'; put 'put ''MDQzNCI6Ilx1MDQ0NVx1MDQ0ZFx1MDQzNFx1MDQ0NVx1MDQ0ZFx1MDQzZCBcdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzRcdTA0NGJcdTA0M2QiO2Nhc2Uic3MiOnJldHVybiBCKyh3PyIgXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0IjoiIFx1MDQ0MVx1''@;'; put 'put ''MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNFx1MDQ0Ylx1MDQzZCIpO2Nhc2UibSI6Y2FzZSJtbSI6cmV0dXJuIEIrKHc/IiBcdTA0M2NcdTA0MzhcdTA0M2RcdTA0NDNcdTA0NDIiOiIgXHUwNDNjXHUwNDM4XHUwNDNkXHUwNDQzXHUwNDQyXHUwNDRiXHUwNDNkIik7Y2FzZSJoIjpjYXNl''@;'; put 'put ''ImhoIjpyZXR1cm4gQisodz8iIFx1MDQ0Nlx1MDQzMFx1MDQzMyI6IiBcdTA0NDZcdTA0MzBcdTA0MzNcdTA0MzhcdTA0MzlcdTA0M2QiKTtjYXNlImQiOmNhc2UiZGQiOnJldHVybiBCKyh3PyIgXHUwNGU5XHUwNDM0XHUwNGU5XHUwNDQwIjoiIFx1MDRlOVx1MDQzNFx1MDQ0MFx1MDQzOFx1''@;'; put 'put ''MDQzOVx1MDQzZCIpO2Nhc2UiTSI6Y2FzZSJNTSI6cmV0dXJuIEIrKHc/IiBcdTA0NDFcdTA0MzBcdTA0NDAiOiIgXHUwNDQxXHUwNDMwXHUwNDQwXHUwNDRiXHUwNDNkIik7Y2FzZSJ5IjpjYXNlInl5IjpyZXR1cm4gQisodz8iIFx1MDQzNlx1MDQzOFx1MDQzYiI6IiBcdTA0MzZcdTA0Mzhc''@;'; put 'put ''dTA0M2JcdTA0MzhcdTA0MzlcdTA0M2QiKTtkZWZhdWx0OnJldHVybiBCfX1JLmRlZmluZUxvY2FsZSgibW4iLHttb250aHM6Ilx1MDQxZFx1MDQ0ZFx1MDQzM1x1MDQzNFx1MDRhZlx1MDQzM1x1MDQ0ZFx1MDQ0ZFx1MDQ0MCBcdTA0NDFcdTA0MzBcdTA0NDBfXHUwNDI1XHUwNDNlXHUwNDUx''@;'; put 'put ''XHUwNDQwXHUwNDM0XHUwNDQzXHUwNDMzXHUwNDMwXHUwNDMwXHUwNDQwIFx1MDQ0MVx1MDQzMFx1MDQ0MF9cdTA0MTNcdTA0NDNcdTA0NDBcdTA0MzBcdTA0MzJcdTA0MzRcdTA0NDNcdTA0MzNcdTA0MzBcdTA0MzBcdTA0NDAgXHUwNDQxXHUwNDMwXHUwNDQwX1x1MDQxNFx1MDRlOVx1MDQ0''@;'; put 'put ''MFx1MDRlOVx1MDQzMlx1MDQzNFx1MDRhZlx1MDQzM1x1MDQ0ZFx1MDQ0ZFx1MDQ0MCBcdTA0NDFcdTA0MzBcdTA0NDBfXHUwNDIyXHUwNDMwXHUwNDMyXHUwNDM0XHUwNDQzXHUwNDMzXHUwNDMwXHUwNDMwXHUwNDQwIFx1MDQ0MVx1MDQzMFx1MDQ0MF9cdTA0MTdcdTA0NDNcdTA0NDBcdTA0''@;'; put 'put ''MzNcdTA0MzBcdTA0MzRcdTA0NDNcdTA0MzNcdTA0MzBcdTA0MzBcdTA0NDAgXHUwNDQxXHUwNDMwXHUwNDQwX1x1MDQxNFx1MDQzZVx1MDQzYlx1MDQzNFx1MDQ0M1x1MDQzM1x1MDQzMFx1MDQzMFx1MDQ0MCBcdTA0NDFcdTA0MzBcdTA0NDBfXHUwNDFkXHUwNDMwXHUwNDM5XHUwNDNjXHUw''@;'; put 'put ''NDM0XHUwNDQzXHUwNDMzXHUwNDMwXHUwNDMwXHUwNDQwIFx1MDQ0MVx1MDQzMFx1MDQ0MF9cdTA0MTVcdTA0NDFcdTA0MzRcdTA0YWZcdTA0MzNcdTA0NGRcdTA0NGRcdTA0NDAgXHUwNDQxXHUwNDMwXHUwNDQwX1x1MDQxMFx1MDQ0MFx1MDQzMFx1MDQzMlx1MDQzNFx1MDQ0M1x1MDQzM1x1''@;'; put 'put ''MDQzMFx1MDQzMFx1MDQ0MCBcdTA0NDFcdTA0MzBcdTA0NDBfXHUwNDEwXHUwNDQwXHUwNDMyXHUwNDMwXHUwNDNkIFx1MDQzZFx1MDQ0ZFx1MDQzM1x1MDQzNFx1MDRhZlx1MDQzM1x1MDQ0ZFx1MDQ0ZFx1MDQ0MCBcdTA0NDFcdTA0MzBcdTA0NDBfXHUwNDEwXHUwNDQwXHUwNDMyXHUwNDMw''@;'; put 'put ''XHUwNDNkIFx1MDQ0NVx1MDQzZVx1MDQ1MVx1MDQ0MFx1MDQzNFx1MDQ0M1x1MDQzM1x1MDQzMFx1MDQzMFx1MDQ0MCBcdTA0NDFcdTA0MzBcdTA0NDAiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6IjEgXHUwNDQxXHUwNDMwXHUwNDQwXzIgXHUwNDQxXHUwNDMwXHUwNDQwXzMgXHUwNDQxXHUw''@;'; put 'put ''NDMwXHUwNDQwXzQgXHUwNDQxXHUwNDMwXHUwNDQwXzUgXHUwNDQxXHUwNDMwXHUwNDQwXzYgXHUwNDQxXHUwNDMwXHUwNDQwXzcgXHUwNDQxXHUwNDMwXHUwNDQwXzggXHUwNDQxXHUwNDMwXHUwNDQwXzkgXHUwNDQxXHUwNDMwXHUwNDQwXzEwIFx1MDQ0MVx1MDQzMFx1MDQ0MF8xMSBcdTA0''@;'; put 'put ''NDFcdTA0MzBcdTA0NDBfMTIgXHUwNDQxXHUwNDMwXHUwNDQwIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6Ilx1MDQxZFx1MDQ0Zlx1MDQzY19cdTA0MTRcdTA0MzBcdTA0MzJcdTA0MzBcdTA0MzBfXHUwNDFjXHUwNDRmXHUwNDMzXHUwNDNjXHUwNDMwXHUwNDQw''@;'; put 'put ''X1x1MDQxYlx1MDQ0NVx1MDQzMFx1MDQzM1x1MDQzMlx1MDQzMF9cdTA0MWZcdTA0YWZcdTA0NDBcdTA0NGRcdTA0MzJfXHUwNDExXHUwNDMwXHUwNDMwXHUwNDQxXHUwNDMwXHUwNDNkX1x1MDQxMVx1MDQ0Zlx1MDQzY1x1MDQzMVx1MDQzMCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJc''@;'; put 'put ''dTA0MWRcdTA0NGZcdTA0M2NfXHUwNDE0XHUwNDMwXHUwNDMyX1x1MDQxY1x1MDQ0Zlx1MDQzM19cdTA0MWJcdTA0NDVcdTA0MzBfXHUwNDFmXHUwNGFmXHUwNDQwX1x1MDQxMVx1MDQzMFx1MDQzMF9cdTA0MTFcdTA0NGZcdTA0M2MiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDQxZFx1''@;'; put 'put ''MDQ0Zl9cdTA0MTRcdTA0MzBfXHUwNDFjXHUwNDRmX1x1MDQxYlx1MDQ0NV9cdTA0MWZcdTA0YWZfXHUwNDExXHUwNDMwX1x1MDQxMVx1MDQ0ZiIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiWVlZ''@;'; put 'put ''WS1NTS1ERCIsTEw6IllZWVkgXHUwNDNlXHUwNDNkXHUwNDRiIE1NTU1cdTA0NGJcdTA0M2QgRCIsTExMOiJZWVlZIFx1MDQzZVx1MDQzZFx1MDQ0YiBNTU1NXHUwNDRiXHUwNDNkIEQgSEg6bW0iLExMTEw6ImRkZGQsIFlZWVkgXHUwNDNlXHUwNDNkXHUwNDRiIE1NTU1cdTA0NGJcdTA0M2Qg''@;'; put 'put ''RCBISDptbSJ9LG1lcmlkaWVtUGFyc2U6L1x1MDRhZVx1MDRlOHxcdTA0YWVcdTA0MjUvaSxpc1BNOmZ1bmN0aW9uKEIpe3JldHVybiJcdTA0YWVcdTA0MjUiPT09Qn0sbWVyaWRpZW06ZnVuY3Rpb24oQix3LFApe3JldHVybiBCPDEyPyJcdTA0YWVcdTA0ZTgiOiJcdTA0YWVcdTA0MjUifSxj''@;'; put 'put ''YWxlbmRhcjp7c2FtZURheToiW1x1MDRlOFx1MDQzZFx1MDRlOVx1MDRlOVx1MDQzNFx1MDRlOVx1MDQ0MF0gTFQiLG5leHREYXk6IltcdTA0MWNcdTA0MzBcdTA0NDBcdTA0MzNcdTA0MzBcdTA0MzBcdTA0NDhdIExUIixuZXh0V2VlazoiW1x1MDQxOFx1MDQ0MFx1MDQ0ZFx1MDQ0NV0gZGRk''@;'; put 'put ''ZCBMVCIsbGFzdERheToiW1x1MDRlOFx1MDQ0N1x1MDQzOFx1MDQzM1x1MDQzNFx1MDRlOVx1MDQ0MF0gTFQiLGxhc3RXZWVrOiJbXHUwNGU4XHUwNDNkXHUwNDMzXHUwNGU5XHUwNDQwXHUwNDQxXHUwNGU5XHUwNDNkXSBkZGRkIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0''@;'; put 'put ''dXJlOiIlcyBcdTA0MzRcdTA0MzBcdTA0NDBcdTA0MzBcdTA0MzAiLHBhc3Q6IiVzIFx1MDRlOVx1MDQzY1x1MDQzZFx1MDRlOSIsczpfLHNzOl8sbTpfLG1tOl8saDpfLGhoOl8sZDpfLGRkOl8sTTpfLE1NOl8seTpfLHl5Ol99LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0gXHUw''@;'; put 'put ''NGU5XHUwNDM0XHUwNGU5XHUwNDQwLyxvcmRpbmFsOmZ1bmN0aW9uKEIsdyl7c3dpdGNoKHcpe2Nhc2UiZCI6Y2FzZSJEIjpjYXNlIkRERCI6cmV0dXJuIEIrIiBcdTA0ZTlcdTA0MzRcdTA0ZTlcdTA0NDAiO2RlZmF1bHQ6cmV0dXJuIEJ9fX0pfSh5KDk3NTg2KSl9LDU5MDgwOmZ1bmN0aW9u''@;'; put 'put ''KHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz17MToiXHUwOTY3IiwyOiJcdTA5NjgiLDM6Ilx1MDk2OSIsNDoiXHUwOTZhIiw1OiJcdTA5NmIiLDY6Ilx1MDk2YyIsNzoiXHUwOTZkIiw4OiJcdTA5NmUiLDk6Ilx1MDk2ZiIsMDoiXHUwOTY2In0sZz17Ilx1MDk2NyI6''@;'; put 'put ''IjEiLCJcdTA5NjgiOiIyIiwiXHUwOTY5IjoiMyIsIlx1MDk2YSI6IjQiLCJcdTA5NmIiOiI1IiwiXHUwOTZjIjoiNiIsIlx1MDk2ZCI6IjciLCJcdTA5NmUiOiI4IiwiXHUwOTZmIjoiOSIsIlx1MDk2NiI6IjAifTtmdW5jdGlvbiBCKFAsRixPLHope3ZhciBOPSIiO2lmKEYpc3dpdGNoKE8p''@;'; put 'put ''e2Nhc2UicyI6Tj0iXHUwOTE1XHUwOTNlXHUwOTM5XHUwOTQwIFx1MDkzOFx1MDk0N1x1MDkxNVx1MDkwMlx1MDkyNiI7YnJlYWs7Y2FzZSJzcyI6Tj0iJWQgXHUwOTM4XHUwOTQ3XHUwOTE1XHUwOTAyXHUwOTI2IjticmVhaztjYXNlIm0iOk49Ilx1MDkwZlx1MDkxNSBcdTA5MmVcdTA5M2Zc''@;'; put 'put ''dTA5MjhcdTA5M2ZcdTA5MWYiO2JyZWFrO2Nhc2UibW0iOk49IiVkIFx1MDkyZVx1MDkzZlx1MDkyOFx1MDkzZlx1MDkxZlx1MDk0NyI7YnJlYWs7Y2FzZSJoIjpOPSJcdTA5MGZcdTA5MTUgXHUwOTI0XHUwOTNlXHUwOTM4IjticmVhaztjYXNlImhoIjpOPSIlZCBcdTA5MjRcdTA5M2VcdTA5''@;'; put 'put ''MzgiO2JyZWFrO2Nhc2UiZCI6Tj0iXHUwOTBmXHUwOTE1IFx1MDkyNlx1MDkzZlx1MDkzNVx1MDkzOCI7YnJlYWs7Y2FzZSJkZCI6Tj0iJWQgXHUwOTI2XHUwOTNmXHUwOTM1XHUwOTM4IjticmVhaztjYXNlIk0iOk49Ilx1MDkwZlx1MDkxNSBcdTA5MmVcdTA5MzlcdTA5M2ZcdTA5MjhcdTA5''@;'; put 'put ''M2UiO2JyZWFrO2Nhc2UiTU0iOk49IiVkIFx1MDkyZVx1MDkzOVx1MDkzZlx1MDkyOFx1MDk0NyI7YnJlYWs7Y2FzZSJ5IjpOPSJcdTA5MGZcdTA5MTUgXHUwOTM1XHUwOTMwXHUwOTRkXHUwOTM3IjticmVhaztjYXNlInl5IjpOPSIlZCBcdTA5MzVcdTA5MzBcdTA5NGRcdTA5MzdcdTA5NDci''@;'; put 'put ''fWVsc2Ugc3dpdGNoKE8pe2Nhc2UicyI6Tj0iXHUwOTE1XHUwOTNlXHUwOTM5XHUwOTQwIFx1MDkzOFx1MDk0N1x1MDkxNVx1MDkwMlx1MDkyNlx1MDkzZVx1MDkwMiI7YnJlYWs7Y2FzZSJzcyI6Tj0iJWQgXHUwOTM4XHUwOTQ3XHUwOTE1XHUwOTAyXHUwOTI2XHUwOTNlXHUwOTAyIjticmVh''@;'; put 'put ''aztjYXNlIm0iOk49Ilx1MDkwZlx1MDkxNVx1MDkzZSBcdTA5MmVcdTA5M2ZcdTA5MjhcdTA5M2ZcdTA5MWZcdTA5M2UiO2JyZWFrO2Nhc2UibW0iOk49IiVkIFx1MDkyZVx1MDkzZlx1MDkyOFx1MDkzZlx1MDkxZlx1MDkzZVx1MDkwMiI7YnJlYWs7Y2FzZSJoIjpOPSJcdTA5MGZcdTA5MTVc''@;'; put 'put ''dTA5M2UgXHUwOTI0XHUwOTNlXHUwOTM4XHUwOTNlIjticmVhaztjYXNlImhoIjpOPSIlZCBcdTA5MjRcdTA5M2VcdTA5MzhcdTA5M2VcdTA5MDIiO2JyZWFrO2Nhc2UiZCI6Tj0iXHUwOTBmXHUwOTE1XHUwOTNlIFx1MDkyNlx1MDkzZlx1MDkzNVx1MDkzOFx1MDkzZSI7YnJlYWs7Y2FzZSJk''@;'; put 'put ''ZCI6Tj0iJWQgXHUwOTI2XHUwOTNmXHUwOTM1XHUwOTM4XHUwOTNlXHUwOTAyIjticmVhaztjYXNlIk0iOk49Ilx1MDkwZlx1MDkxNVx1MDkzZSBcdTA5MmVcdTA5MzlcdTA5M2ZcdTA5MjhcdTA5NGRcdTA5MmZcdTA5M2UiO2JyZWFrO2Nhc2UiTU0iOk49IiVkIFx1MDkyZVx1MDkzOVx1MDkz''@;'; put 'put ''Zlx1MDkyOFx1MDk0ZFx1MDkyZlx1MDkzZVx1MDkwMiI7YnJlYWs7Y2FzZSJ5IjpOPSJcdTA5MGZcdTA5MTVcdTA5M2UgXHUwOTM1XHUwOTMwXHUwOTRkXHUwOTM3XHUwOTNlIjticmVhaztjYXNlInl5IjpOPSIlZCBcdTA5MzVcdTA5MzBcdTA5NGRcdTA5MzdcdTA5M2VcdTA5MDIifXJldHVy''@;'; put 'put ''biBOLnJlcGxhY2UoLyVkL2ksUCl9SS5kZWZpbmVMb2NhbGUoIm1yIix7bW9udGhzOiJcdTA5MWNcdTA5M2VcdTA5MjhcdTA5NDdcdTA5MzVcdTA5M2VcdTA5MzBcdTA5NDBfXHUwOTJiXHUwOTQ3XHUwOTJjXHUwOTRkXHUwOTMwXHUwOTQxXHUwOTM1XHUwOTNlXHUwOTMwXHUwOTQwX1x1MDky''@;'; put 'put ''ZVx1MDkzZVx1MDkzMFx1MDk0ZFx1MDkxYV9cdTA5MGZcdTA5MmFcdTA5NGRcdTA5MzBcdTA5M2ZcdTA5MzJfXHUwOTJlXHUwOTQ3X1x1MDkxY1x1MDk0Mlx1MDkyOF9cdTA5MWNcdTA5NDFcdTA5MzJcdTA5NDhfXHUwOTExXHUwOTE3XHUwOTM4XHUwOTRkXHUwOTFmX1x1MDkzOFx1MDkyYVx1''@;'; put 'put ''MDk0ZFx1MDkxZlx1MDk0N1x1MDkwMlx1MDkyY1x1MDkzMF9cdTA5MTFcdTA5MTVcdTA5NGRcdTA5MWZcdTA5NGJcdTA5MmNcdTA5MzBfXHUwOTI4XHUwOTRiXHUwOTM1XHUwOTRkXHUwOTM5XHUwOTQ3XHUwOTAyXHUwOTJjXHUwOTMwX1x1MDkyMVx1MDkzZlx1MDkzOFx1MDk0N1x1MDkwMlx1''@;'; put 'put ''MDkyY1x1MDkzMCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwOTFjXHUwOTNlXHUwOTI4XHUwOTQ3Ll9cdTA5MmJcdTA5NDdcdTA5MmNcdTA5NGRcdTA5MzBcdTA5NDEuX1x1MDkyZVx1MDkzZVx1MDkzMFx1MDk0ZFx1MDkxYS5fXHUwOTBmXHUwOTJhXHUwOTRkXHUwOTMwXHUwOTNmLl9c''@;'; put 'put ''dTA5MmVcdTA5NDcuX1x1MDkxY1x1MDk0Mlx1MDkyOC5fXHUwOTFjXHUwOTQxXHUwOTMyXHUwOTQ4Ll9cdTA5MTFcdTA5MTcuX1x1MDkzOFx1MDkyYVx1MDk0ZFx1MDkxZlx1MDk0N1x1MDkwMi5fXHUwOTExXHUwOTE1XHUwOTRkXHUwOTFmXHUwOTRiLl9cdTA5MjhcdTA5NGJcdTA5MzVcdTA5''@;'; put 'put ''NGRcdTA5MzlcdTA5NDdcdTA5MDIuX1x1MDkyMVx1MDkzZlx1MDkzOFx1MDk0N1x1MDkwMi4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiXHUwOTMwXHUwOTM1XHUwOTNmXHUwOTM1XHUwOTNlXHUwOTMwX1x1MDkzOFx1MDk0Ylx1MDkyZVx1MDkzNVx1MDkzZVx1''@;'; put 'put ''MDkzMF9cdTA5MmVcdTA5MDJcdTA5MTdcdTA5MzNcdTA5MzVcdTA5M2VcdTA5MzBfXHUwOTJjXHUwOTQxXHUwOTI3XHUwOTM1XHUwOTNlXHUwOTMwX1x1MDkxN1x1MDk0MVx1MDkzMFx1MDk0Mlx1MDkzNVx1MDkzZVx1MDkzMF9cdTA5MzZcdTA5NDFcdTA5MTVcdTA5NGRcdTA5MzBcdTA5MzVc''@;'; put 'put ''dTA5M2VcdTA5MzBfXHUwOTM2XHUwOTI4XHUwOTNmXHUwOTM1XHUwOTNlXHUwOTMwIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDkzMFx1MDkzNVx1MDkzZl9cdTA5MzhcdTA5NGJcdTA5MmVfXHUwOTJlXHUwOTAyXHUwOTE3XHUwOTMzX1x1MDkyY1x1MDk0MVx1MDkyN19cdTA5MTdc''@;'; put 'put ''dTA5NDFcdTA5MzBcdTA5NDJfXHUwOTM2XHUwOTQxXHUwOTE1XHUwOTRkXHUwOTMwX1x1MDkzNlx1MDkyOFx1MDkzZiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwOTMwX1x1MDkzOFx1MDk0Yl9cdTA5MmVcdTA5MDJfXHUwOTJjXHUwOTQxX1x1MDkxN1x1MDk0MV9cdTA5MzZcdTA5NDFf''@;'; put 'put ''XHUwOTM2Ii5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiQSBoOm1tIFx1MDkzNVx1MDkzZVx1MDkxY1x1MDkyNFx1MDkzZSIsTFRTOiJBIGg6bW06c3MgXHUwOTM1XHUwOTNlXHUwOTFjXHUwOTI0XHUwOTNlIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBN''@;'; put 'put ''TU1NIFlZWVksIEEgaDptbSBcdTA5MzVcdTA5M2VcdTA5MWNcdTA5MjRcdTA5M2UiLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZLCBBIGg6bW0gXHUwOTM1XHUwOTNlXHUwOTFjXHUwOTI0XHUwOTNlIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA5MDZcdTA5MWNdIExUIixuZXh0RGF5OiJbXHUw''@;'; put 'put ''OTA5XHUwOTI2XHUwOTRkXHUwOTJmXHUwOTNlXSBMVCIsbmV4dFdlZWs6ImRkZGQsIExUIixsYXN0RGF5OiJbXHUwOTE1XHUwOTNlXHUwOTMyXSBMVCIsbGFzdFdlZWs6IltcdTA5MmVcdTA5M2VcdTA5MTdcdTA5NDBcdTA5MzJdIGRkZGQsIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGlt''@;'; put 'put ''ZTp7ZnV0dXJlOiIlc1x1MDkyZVx1MDkyN1x1MDk0ZFx1MDkyZlx1MDk0NyIscGFzdDoiJXNcdTA5MmFcdTA5NDJcdTA5MzBcdTA5NGRcdTA5MzVcdTA5NDAiLHM6QixzczpCLG06QixtbTpCLGg6QixoaDpCLGQ6QixkZDpCLE06QixNTTpCLHk6Qix5eTpCfSxwcmVwYXJzZTpmdW5jdGlvbihQ''@;'; put 'put ''KXtyZXR1cm4gUC5yZXBsYWNlKC9bXHUwOTY3XHUwOTY4XHUwOTY5XHUwOTZhXHUwOTZiXHUwOTZjXHUwOTZkXHUwOTZlXHUwOTZmXHUwOTY2XS9nLGZ1bmN0aW9uKEYpe3JldHVybiBnW0ZdfSl9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24oUCl7cmV0dXJuIFAucmVwbGFjZSgvXGQvZyxmdW5jdGlv''@;'; put 'put ''bihGKXtyZXR1cm4gX1tGXX0pfSxtZXJpZGllbVBhcnNlOi9cdTA5MmFcdTA5MzlcdTA5M2VcdTA5MWZcdTA5NDd8XHUwOTM4XHUwOTE1XHUwOTNlXHUwOTMzXHUwOTQwfFx1MDkyNlx1MDk0MVx1MDkyYVx1MDkzZVx1MDkzMFx1MDk0MHxcdTA5MzhcdTA5M2VcdTA5MmZcdTA5MDJcdTA5MTVc''@;'; put 'put ''dTA5M2VcdTA5MzNcdTA5NDB8XHUwOTMwXHUwOTNlXHUwOTI0XHUwOTRkXHUwOTMwXHUwOTQwLyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24oUCxGKXtyZXR1cm4gMTI9PT1QJiYoUD0wKSwiXHUwOTJhXHUwOTM5XHUwOTNlXHUwOTFmXHUwOTQ3Ij09PUZ8fCJcdTA5MzhcdTA5MTVcdTA5M2VcdTA5''@;'; put 'put ''MzNcdTA5NDAiPT09Rj9QOiJcdTA5MjZcdTA5NDFcdTA5MmFcdTA5M2VcdTA5MzBcdTA5NDAiPT09Rnx8Ilx1MDkzOFx1MDkzZVx1MDkyZlx1MDkwMlx1MDkxNVx1MDkzZVx1MDkzM1x1MDk0MCI9PT1GfHwiXHUwOTMwXHUwOTNlXHUwOTI0XHUwOTRkXHUwOTMwXHUwOTQwIj09PUY/UD49MTI/''@;'; put 'put ''UDpQKzEyOnZvaWQgMH0sbWVyaWRpZW06ZnVuY3Rpb24oUCxGLE8pe3JldHVybiBQPj0wJiZQPDY/Ilx1MDkyYVx1MDkzOVx1MDkzZVx1MDkxZlx1MDk0NyI6UDwxMj8iXHUwOTM4XHUwOTE1XHUwOTNlXHUwOTMzXHUwOTQwIjpQPDE3PyJcdTA5MjZcdTA5NDFcdTA5MmFcdTA5M2VcdTA5MzBc''@;'; put 'put ''dTA5NDAiOlA8MjA/Ilx1MDkzOFx1MDkzZVx1MDkyZlx1MDkwMlx1MDkxNVx1MDkzZVx1MDkzM1x1MDk0MCI6Ilx1MDkzMFx1MDkzZVx1MDkyNFx1MDk0ZFx1MDkzMFx1MDk0MCJ9LHdlZWs6e2RvdzowLGRveTo2fX0pfSh5KDk3NTg2KSl9LDI1OTUwOmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0''@;'; put 'put ''aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgibXMtbXkiLHttb250aHM6IkphbnVhcmlfRmVicnVhcmlfTWFjX0FwcmlsX01laV9KdW5fSnVsYWlfT2dvc19TZXB0ZW1iZXJfT2t0b2Jlcl9Ob3ZlbWJlcl9EaXNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuX0Zl''@;'; put 'put ''Yl9NYWNfQXByX01laV9KdW5fSnVsX09nc19TZXBfT2t0X05vdl9EaXMiLnNwbGl0KCJfIiksd2Vla2RheXM6IkFoYWRfSXNuaW5fU2VsYXNhX1JhYnVfS2hhbWlzX0p1bWFhdF9TYWJ0dSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJBaGRfSXNuX1NlbF9SYWJfS2hhX0p1bV9TYWIiLnNw''@;'; put 'put ''bGl0KCJfIiksd2Vla2RheXNNaW46IkFoX0lzX1NsX1JiX0ttX0ptX1NiIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEgubW0iLExUUzoiSEgubW0uc3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBbcHVrdWxdIEhILm1tIixMTExM''@;'; put 'put ''OiJkZGRkLCBEIE1NTU0gWVlZWSBbcHVrdWxdIEhILm1tIn0sbWVyaWRpZW1QYXJzZTovcGFnaXx0ZW5nYWhhcml8cGV0YW5nfG1hbGFtLyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24oZyxCKXtyZXR1cm4gMTI9PT1nJiYoZz0wKSwicGFnaSI9PT1CP2c6InRlbmdhaGFyaSI9PT1CP2c+PTExP2c6''@;'; put 'put ''ZysxMjoicGV0YW5nIj09PUJ8fCJtYWxhbSI9PT1CP2crMTI6dm9pZCAwfSxtZXJpZGllbTpmdW5jdGlvbihnLEIsdyl7cmV0dXJuIGc8MTE/InBhZ2kiOmc8MTU/InRlbmdhaGFyaSI6ZzwxOT8icGV0YW5nIjoibWFsYW0ifSxjYWxlbmRhcjp7c2FtZURheToiW0hhcmkgaW5pIHB1a3VsXSBM''@;'; put 'put ''VCIsbmV4dERheToiW0Vzb2sgcHVrdWxdIExUIixuZXh0V2VlazoiZGRkZCBbcHVrdWxdIExUIixsYXN0RGF5OiJbS2VsbWFyaW4gcHVrdWxdIExUIixsYXN0V2VlazoiZGRkZCBbbGVwYXMgcHVrdWxdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJkYWxhbSAlcyIs''@;'; put 'put ''cGFzdDoiJXMgeWFuZyBsZXBhcyIsczoiYmViZXJhcGEgc2FhdCIsc3M6IiVkIHNhYXQiLG06InNlbWluaXQiLG1tOiIlZCBtaW5pdCIsaDoic2VqYW0iLGhoOiIlZCBqYW0iLGQ6InNlaGFyaSIsZGQ6IiVkIGhhcmkiLE06InNlYnVsYW4iLE1NOiIlZCBidWxhbiIseToic2V0YWh1biIseXk6''@;'; put 'put ''IiVkIHRhaHVuIn0sd2Vlazp7ZG93OjEsZG95Ojd9fSl9KHkoOTc1ODYpKX0sNzAzOTk6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJtcyIse21vbnRoczoiSmFudWFyaV9GZWJydWFyaV9NYWNfQXByaWxfTWVpX0p1bl9KdWxhaV9P''@;'; put 'put ''Z29zX1NlcHRlbWJlcl9Pa3RvYmVyX05vdmVtYmVyX0Rpc2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW5fRmViX01hY19BcHJfTWVpX0p1bl9KdWxfT2dzX1NlcF9Pa3RfTm92X0RpcyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiQWhhZF9Jc25pbl9TZWxhc2FfUmFidV9LaGFtaXNf''@;'; put 'put ''SnVtYWF0X1NhYnR1Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IkFoZF9Jc25fU2VsX1JhYl9LaGFfSnVtX1NhYiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiQWhfSXNfU2xfUmJfS21fSm1fU2IiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISC5tbSIsTFRTOiJISC5tbS5z''@;'; put 'put ''cyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIFtwdWt1bF0gSEgubW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIFtwdWt1bF0gSEgubW0ifSxtZXJpZGllbVBhcnNlOi9wYWdpfHRlbmdhaGFyaXxwZXRhbmd8bWFsYW0vLG1lcmlkaWVtSG91cjpm''@;'; put 'put ''dW5jdGlvbihnLEIpe3JldHVybiAxMj09PWcmJihnPTApLCJwYWdpIj09PUI/ZzoidGVuZ2FoYXJpIj09PUI/Zz49MTE/ZzpnKzEyOiJwZXRhbmciPT09Qnx8Im1hbGFtIj09PUI/ZysxMjp2b2lkIDB9LG1lcmlkaWVtOmZ1bmN0aW9uKGcsQix3KXtyZXR1cm4gZzwxMT8icGFnaSI6ZzwxNT8i''@;'; put 'put ''dGVuZ2FoYXJpIjpnPDE5PyJwZXRhbmciOiJtYWxhbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbSGFyaSBpbmkgcHVrdWxdIExUIixuZXh0RGF5OiJbRXNvayBwdWt1bF0gTFQiLG5leHRXZWVrOiJkZGRkIFtwdWt1bF0gTFQiLGxhc3REYXk6IltLZWxtYXJpbiBwdWt1bF0gTFQiLGxhc3RXZWVr''@;'; put 'put ''OiJkZGRkIFtsZXBhcyBwdWt1bF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImRhbGFtICVzIixwYXN0OiIlcyB5YW5nIGxlcGFzIixzOiJiZWJlcmFwYSBzYWF0IixzczoiJWQgc2FhdCIsbToic2VtaW5pdCIsbW06IiVkIG1pbml0IixoOiJzZWphbSIsaGg6IiVk''@;'; put 'put ''IGphbSIsZDoic2VoYXJpIixkZDoiJWQgaGFyaSIsTToic2VidWxhbiIsTU06IiVkIGJ1bGFuIix5OiJzZXRhaHVuIix5eToiJWQgdGFodW4ifSx3ZWVrOntkb3c6MSxkb3k6N319KX0oeSg5NzU4NikpfSw3OTkwMjpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7''@;'; put 'put ''SS5kZWZpbmVMb2NhbGUoIm10Iix7bW9udGhzOiJKYW5uYXJfRnJhcl9NYXJ6dV9BcHJpbF9NZWpqdV9cdTAxMjB1bmp1X0x1bGp1X0F3d2lzc3VfU2V0dGVtYnJ1X090dHVicnVfTm92ZW1icnVfRGlcdTAxMGJlbWJydSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuX0ZyYV9NYXJfQXBy''@;'; put 'put ''X01lal9cdTAxMjB1bl9MdWxfQXd3X1NldF9PdHRfTm92X0RpXHUwMTBiIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJJbC1cdTAxMjZhZGRfSXQtVG5lam5fSXQtVGxpZXRhX0wtRXJiZ1x1MDEyN2FfSWwtXHUwMTI2YW1pc19JbC1cdTAxMjBpbWdcdTAxMjdhX0lzLVNpYnQiLnNwbGl0KCJfIiks''@;'; put 'put ''d2Vla2RheXNTaG9ydDoiXHUwMTI2YWRfVG5lX1RsaV9FcmJfXHUwMTI2YW1fXHUwMTIwaW1fU2liIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTAxMjZhX1RuX1RsX0VyX1x1MDEyNmFfXHUwMTIwaV9TaSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhI''@;'; put 'put ''Om1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltJbGx1bSBmaWwtXUxUIixuZXh0RGF5OiJbR1x1MDEyN2FkYSBmaWwtXUxUIixuZXh0''@;'; put 'put ''V2VlazoiZGRkZCBbZmlsLV1MVCIsbGFzdERheToiW0lsLWJpZXJhXHUwMTI3IGZpbC1dTFQiLGxhc3RXZWVrOiJkZGRkIFtsaSBnXHUwMTI3YWRkYV0gW2ZpbC1dTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImZcdTIwMTkgJXMiLHBhc3Q6IiVzIGlsdSIsczoiZnRp''@;'; put 'put ''dCBzZWtvbmRpIixzczoiJWQgc2Vrb25kaSIsbToibWludXRhIixtbToiJWQgbWludXRpIixoOiJzaWVnXHUwMTI3YSIsaGg6IiVkIHNpZWdcdTAxMjdhdCIsZDoiXHUwMTIxdXJuYXRhIixkZDoiJWQgXHUwMTIxcmFuZXQiLE06InhhaGFyIixNTToiJWQgeGh1ciIseToic2VuYSIseXk6IiVk''@;'; put 'put ''IHNuaSJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1ceGJhLyxvcmRpbmFsOiIlZFx4YmEiLHdlZWs6e2RvdzoxLGRveTo0fX0pfSh5KDk3NTg2KSl9LDcyOTg1OmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz17MToiXHUxMDQxIiwyOiJc''@;'; put 'put ''dTEwNDIiLDM6Ilx1MTA0MyIsNDoiXHUxMDQ0Iiw1OiJcdTEwNDUiLDY6Ilx1MTA0NiIsNzoiXHUxMDQ3Iiw4OiJcdTEwNDgiLDk6Ilx1MTA0OSIsMDoiXHUxMDQwIn0sZz17Ilx1MTA0MSI6IjEiLCJcdTEwNDIiOiIyIiwiXHUxMDQzIjoiMyIsIlx1MTA0NCI6IjQiLCJcdTEwNDUiOiI1Iiwi''@;'; put 'put ''XHUxMDQ2IjoiNiIsIlx1MTA0NyI6IjciLCJcdTEwNDgiOiI4IiwiXHUxMDQ5IjoiOSIsIlx1MTA0MCI6IjAifTtJLmRlZmluZUxvY2FsZSgibXkiLHttb250aHM6Ilx1MTAwN1x1MTAxNFx1MTAzYVx1MTAxNFx1MTAxZFx1MTAyYlx1MTAxYlx1MTAyZV9cdTEwMTZcdTEwMzFcdTEwMTZcdTEw''@;'; put 'put ''MzFcdTEwMmNcdTEwM2FcdTEwMWRcdTEwMmJcdTEwMWJcdTEwMmVfXHUxMDE5XHUxMDEwXHUxMDNhX1x1MTAyN1x1MTAxNVx1MTAzY1x1MTAyZV9cdTEwMTlcdTEwMzFfXHUxMDA3XHUxMDNkXHUxMDE0XHUxMDNhX1x1MTAwN1x1MTAzMFx1MTAxY1x1MTAyZFx1MTAyZlx1MTAwNFx1MTAzYV9c''@;'; put 'put ''dTEwMWVcdTEwM2NcdTEwMDJcdTEwMmZcdTEwMTBcdTEwM2FfXHUxMDA1XHUxMDAwXHUxMDNhXHUxMDEwXHUxMDA0XHUxMDNhXHUxMDE4XHUxMDJjX1x1MTAyMVx1MTAzMVx1MTAyY1x1MTAwMFx1MTAzYVx1MTAxMFx1MTAyZFx1MTAyZlx1MTAxOFx1MTAyY19cdTEwMTRcdTEwMmRcdTEwMmZc''@;'; put 'put ''dTEwMWRcdTEwMDRcdTEwM2FcdTEwMThcdTEwMmNfXHUxMDEyXHUxMDJlXHUxMDA3XHUxMDA0XHUxMDNhXHUxMDE4XHUxMDJjIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTEwMDdcdTEwMTRcdTEwM2FfXHUxMDE2XHUxMDMxX1x1MTAxOVx1MTAxMFx1MTAzYV9cdTEwMTVcdTEwM2NcdTEw''@;'; put 'put ''MmVfXHUxMDE5XHUxMDMxX1x1MTAwN1x1MTAzZFx1MTAxNFx1MTAzYV9cdTEwMWNcdTEwMmRcdTEwMmZcdTEwMDRcdTEwM2FfXHUxMDFlXHUxMDNjX1x1MTAwNVx1MTAwMFx1MTAzYV9cdTEwMjFcdTEwMzFcdTEwMmNcdTEwMDBcdTEwM2FfXHUxMDE0XHUxMDJkXHUxMDJmX1x1MTAxMlx1MTAy''@;'; put 'put ''ZSIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUxMDEwXHUxMDE0XHUxMDA0XHUxMDNhXHUxMDM5XHUxMDAyXHUxMDE0XHUxMDNkXHUxMDMxX1x1MTAxMFx1MTAxNFx1MTAwNFx1MTAzYVx1MTAzOVx1MTAxY1x1MTAyY19cdTEwMjFcdTEwMDRcdTEwM2FcdTEwMzlcdTEwMDJcdTEwMmJfXHUxMDE3''@;'; put 'put ''XHUxMDJmXHUxMDEyXHUxMDM5XHUxMDEzXHUxMDFmXHUxMDMwXHUxMDM4X1x1MTAwMFx1MTAzY1x1MTAyY1x1MTAxZVx1MTAxNVx1MTAxMFx1MTAzMVx1MTAzOF9cdTEwMWVcdTEwMzFcdTEwMmNcdTEwMDBcdTEwM2NcdTEwMmNfXHUxMDA1XHUxMDE0XHUxMDMxIi5zcGxpdCgiXyIpLHdlZWtk''@;'; put 'put ''YXlzU2hvcnQ6Ilx1MTAxNFx1MTAzZFx1MTAzMV9cdTEwMWNcdTEwMmNfXHUxMDAyXHUxMDJiX1x1MTAxZlx1MTAzMFx1MTAzOF9cdTEwMDBcdTEwM2NcdTEwMmNfXHUxMDFlXHUxMDMxXHUxMDJjX1x1MTAxNFx1MTAzMSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUxMDE0XHUxMDNkXHUx''@;'; put 'put ''MDMxX1x1MTAxY1x1MTAyY19cdTEwMDJcdTEwMmJfXHUxMDFmXHUxMDMwXHUxMDM4X1x1MTAwMFx1MTAzY1x1MTAyY19cdTEwMWVcdTEwMzFcdTEwMmNfXHUxMDE0XHUxMDMxIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZ''@;'; put 'put ''WVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUxMDFhXHUxMDE0XHUxMDMxLl0gTFQgW1x1MTAxOVx1MTAzZVx1MTAyY10iLG5leHREYXk6IltcdTEwMTlcdTEwMTRc''@;'; put 'put ''dTEwMDBcdTEwM2FcdTEwMTZcdTEwM2NcdTEwMTRcdTEwM2FdIExUIFtcdTEwMTlcdTEwM2VcdTEwMmNdIixuZXh0V2VlazoiZGRkZCBMVCBbXHUxMDE5XHUxMDNlXHUxMDJjXSIsbGFzdERheToiW1x1MTAxOVx1MTAxNFx1MTAzMS5cdTEwMDBdIExUIFtcdTEwMTlcdTEwM2VcdTEwMmNdIixs''@;'; put 'put ''YXN0V2VlazoiW1x1MTAxNVx1MTAzY1x1MTAyZVx1MTAzOFx1MTAwMVx1MTAzMlx1MTAzN1x1MTAxZVx1MTAzMVx1MTAyY10gZGRkZCBMVCBbXHUxMDE5XHUxMDNlXHUxMDJjXSIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUxMDFjXHUxMDJjXHUxMDE5XHUxMDBhXHUx''@;'; put 'put ''MDNhXHUxMDM3ICVzIFx1MTAxOVx1MTAzZVx1MTAyYyIscGFzdDoiXHUxMDFjXHUxMDNkXHUxMDE0XHUxMDNhXHUxMDAxXHUxMDMyXHUxMDM3XHUxMDFlXHUxMDMxXHUxMDJjICVzIFx1MTAwMCIsczoiXHUxMDA1XHUxMDAwXHUxMDM5XHUxMDAwXHUxMDE0XHUxMDNhLlx1MTAyMVx1MTAxNFx1''@;'; put 'put ''MTAwYVx1MTAzYVx1MTAzOFx1MTAwNFx1MTAxYVx1MTAzYSIsc3M6IiVkIFx1MTAwNVx1MTAwMFx1MTAzOVx1MTAwMFx1MTAxNFx1MTAzN1x1MTAzYSIsbToiXHUxMDEwXHUxMDA1XHUxMDNhXHUxMDE5XHUxMDJkXHUxMDE0XHUxMDA1XHUxMDNhIixtbToiJWQgXHUxMDE5XHUxMDJkXHUxMDE0''@;'; put 'put ''XHUxMDA1XHUxMDNhIixoOiJcdTEwMTBcdTEwMDVcdTEwM2FcdTEwMTRcdTEwMmNcdTEwMWJcdTEwMmUiLGhoOiIlZCBcdTEwMTRcdTEwMmNcdTEwMWJcdTEwMmUiLGQ6Ilx1MTAxMFx1MTAwNVx1MTAzYVx1MTAxYlx1MTAwMFx1MTAzYSIsZGQ6IiVkIFx1MTAxYlx1MTAwMFx1MTAzYSIsTToi''@;'; put 'put ''XHUxMDEwXHUxMDA1XHUxMDNhXHUxMDFjIixNTToiJWQgXHUxMDFjIix5OiJcdTEwMTBcdTEwMDVcdTEwM2FcdTEwMTRcdTEwM2VcdTEwMDVcdTEwM2EiLHl5OiIlZCBcdTEwMTRcdTEwM2VcdTEwMDVcdTEwM2EifSxwcmVwYXJzZTpmdW5jdGlvbih3KXtyZXR1cm4gdy5yZXBsYWNlKC9bXHUx''@;'; put 'put ''MDQxXHUxMDQyXHUxMDQzXHUxMDQ0XHUxMDQ1XHUxMDQ2XHUxMDQ3XHUxMDQ4XHUxMDQ5XHUxMDQwXS9nLGZ1bmN0aW9uKFApe3JldHVybiBnW1BdfSl9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24odyl7cmV0dXJuIHcucmVwbGFjZSgvXGQvZyxmdW5jdGlvbihQKXtyZXR1cm4gX1tQXX0pfSx3ZWVr''@;'; put 'put ''Ontkb3c6MSxkb3k6NH19KX0oeSg5NzU4NikpfSw2Nzg1OTpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoIm5iIix7bW9udGhzOiJqYW51YXJfZmVicnVhcl9tYXJzX2FwcmlsX21haV9qdW5pX2p1bGlfYXVndXN0X3NlcHRlbWJlcl9v''@;'; put 'put ''a3RvYmVyX25vdmVtYmVyX2Rlc2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJqYW4uX2ZlYi5fbWFyc19hcHIuX21haV9qdW5pX2p1bGlfYXVnLl9zZXAuX29rdC5fbm92Ll9kZXMuIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6InNceGY4bmRhZ19tYW5k''@;'; put 'put ''YWdfdGlyc2RhZ19vbnNkYWdfdG9yc2RhZ19mcmVkYWdfbFx4ZjhyZGFnIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6InNceGY4Ll9tYS5fdGkuX29uLl90by5fZnIuX2xceGY4LiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoic1x4ZjhfbWFfdGlfb25fdG9fZnJfbFx4ZjgiLnNwbGl0KCJf''@;'; put 'put ''Iiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJELiBNTU1NIFlZWVkiLExMTDoiRC4gTU1NTSBZWVlZIFtrbC5dIEhIOm1tIixMTExMOiJkZGRkIEQuIE1NTU0gWVlZWSBba2wuXSBISDpt''@;'; put 'put ''bSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbaSBkYWcga2wuXSBMVCIsbmV4dERheToiW2kgbW9yZ2VuIGtsLl0gTFQiLG5leHRXZWVrOiJkZGRkIFtrbC5dIExUIixsYXN0RGF5OiJbaSBnXHhlNXIga2wuXSBMVCIsbGFzdFdlZWs6Iltmb3JyaWdlXSBkZGRkIFtrbC5dIExUIixzYW1lRWxzZToi''@;'; put 'put ''TCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJvbSAlcyIscGFzdDoiJXMgc2lkZW4iLHM6Im5vZW4gc2VrdW5kZXIiLHNzOiIlZCBzZWt1bmRlciIsbToiZXR0IG1pbnV0dCIsbW06IiVkIG1pbnV0dGVyIixoOiJceGU5biB0aW1lIixoaDoiJWQgdGltZXIiLGQ6Ilx4ZTluIGRhZyIsZGQ6IiVk''@;'; put 'put ''IGRhZ2VyIix3OiJceGU5biB1a2UiLHd3OiIlZCB1a2VyIixNOiJceGU5biBtXHhlNW5lZCIsTU06IiVkIG1ceGU1bmVkZXIiLHk6ImV0dCBceGU1ciIseXk6IiVkIFx4ZTVyIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRv''@;'; put 'put ''eTo0fX0pfSh5KDk3NTg2KSl9LDEzNjQyOmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz17MToiXHUwOTY3IiwyOiJcdTA5NjgiLDM6Ilx1MDk2OSIsNDoiXHUwOTZhIiw1OiJcdTA5NmIiLDY6Ilx1MDk2YyIsNzoiXHUwOTZkIiw4OiJcdTA5NmUiLDk6''@;'; put 'put ''Ilx1MDk2ZiIsMDoiXHUwOTY2In0sZz17Ilx1MDk2NyI6IjEiLCJcdTA5NjgiOiIyIiwiXHUwOTY5IjoiMyIsIlx1MDk2YSI6IjQiLCJcdTA5NmIiOiI1IiwiXHUwOTZjIjoiNiIsIlx1MDk2ZCI6IjciLCJcdTA5NmUiOiI4IiwiXHUwOTZmIjoiOSIsIlx1MDk2NiI6IjAifTtJLmRlZmluZUxv''@;'; put 'put ''Y2FsZSgibmUiLHttb250aHM6Ilx1MDkxY1x1MDkyOFx1MDkzNVx1MDkzMFx1MDk0MF9cdTA5MmJcdTA5NDdcdTA5MmNcdTA5NGRcdTA5MzBcdTA5NDFcdTA5MzVcdTA5MzBcdTA5NDBfXHUwOTJlXHUwOTNlXHUwOTMwXHUwOTRkXHUwOTFhX1x1MDkwNVx1MDkyYVx1MDk0ZFx1MDkzMFx1MDkz''@;'; put 'put ''Zlx1MDkzMl9cdTA5MmVcdTA5MDhfXHUwOTFjXHUwOTQxXHUwOTI4X1x1MDkxY1x1MDk0MVx1MDkzMlx1MDkzZVx1MDkwOF9cdTA5MDVcdTA5MTdcdTA5MzdcdTA5NGRcdTA5MWZfXHUwOTM4XHUwOTQ3XHUwOTJhXHUwOTRkXHUwOTFmXHUwOTQ3XHUwOTJlXHUwOTRkXHUwOTJjXHUwOTMwX1x1''@;'; put 'put ''MDkwNVx1MDkxNVx1MDk0ZFx1MDkxZlx1MDk0Ylx1MDkyY1x1MDkzMF9cdTA5MjhcdTA5NGJcdTA5MmRcdTA5NDdcdTA5MmVcdTA5NGRcdTA5MmNcdTA5MzBfXHUwOTIxXHUwOTNmXHUwOTM4XHUwOTQ3XHUwOTJlXHUwOTRkXHUwOTJjXHUwOTMwIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJc''@;'; put 'put ''dTA5MWNcdTA5MjguX1x1MDkyYlx1MDk0N1x1MDkyY1x1MDk0ZFx1MDkzMFx1MDk0MS5fXHUwOTJlXHUwOTNlXHUwOTMwXHUwOTRkXHUwOTFhX1x1MDkwNVx1MDkyYVx1MDk0ZFx1MDkzMFx1MDkzZi5fXHUwOTJlXHUwOTA4X1x1MDkxY1x1MDk0MVx1MDkyOF9cdTA5MWNcdTA5NDFcdTA5MzJc''@;'; put 'put ''dTA5M2VcdTA5MDguX1x1MDkwNVx1MDkxNy5fXHUwOTM4XHUwOTQ3XHUwOTJhXHUwOTRkXHUwOTFmLl9cdTA5MDVcdTA5MTVcdTA5NGRcdTA5MWZcdTA5NGIuX1x1MDkyOFx1MDk0Ylx1MDkyZFx1MDk0Ny5fXHUwOTIxXHUwOTNmXHUwOTM4XHUwOTQ3LiIuc3BsaXQoIl8iKSxtb250aHNQYXJz''@;'; put 'put ''ZUV4YWN0OiEwLHdlZWtkYXlzOiJcdTA5MDZcdTA5MDdcdTA5MjRcdTA5MmNcdTA5M2VcdTA5MzBfXHUwOTM4XHUwOTRiXHUwOTJlXHUwOTJjXHUwOTNlXHUwOTMwX1x1MDkyZVx1MDkxOVx1MDk0ZFx1MDkxN1x1MDkzMlx1MDkyY1x1MDkzZVx1MDkzMF9cdTA5MmNcdTA5NDFcdTA5MjdcdTA5''@;'; put 'put ''MmNcdTA5M2VcdTA5MzBfXHUwOTJjXHUwOTNmXHUwOTM5XHUwOTNmXHUwOTJjXHUwOTNlXHUwOTMwX1x1MDkzNlx1MDk0MVx1MDkxNVx1MDk0ZFx1MDkzMFx1MDkyY1x1MDkzZVx1MDkzMF9cdTA5MzZcdTA5MjhcdTA5M2ZcdTA5MmNcdTA5M2VcdTA5MzAiLnNwbGl0KCJfIiksd2Vla2RheXNT''@;'; put 'put ''aG9ydDoiXHUwOTA2XHUwOTA3XHUwOTI0Ll9cdTA5MzhcdTA5NGJcdTA5MmUuX1x1MDkyZVx1MDkxOVx1MDk0ZFx1MDkxN1x1MDkzMi5fXHUwOTJjXHUwOTQxXHUwOTI3Ll9cdTA5MmNcdTA5M2ZcdTA5MzlcdTA5M2YuX1x1MDkzNlx1MDk0MVx1MDkxNVx1MDk0ZFx1MDkzMC5fXHUwOTM2XHUw''@;'; put 'put ''OTI4XHUwOTNmLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwOTA2Ll9cdTA5MzhcdTA5NGIuX1x1MDkyZVx1MDkwMi5fXHUwOTJjXHUwOTQxLl9cdTA5MmNcdTA5M2YuX1x1MDkzNlx1MDk0MS5fXHUwOTM2LiIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVG''@;'; put 'put ''b3JtYXQ6e0xUOiJBXHUwOTE1XHUwOTRiIGg6bW0gXHUwOTJjXHUwOTFjXHUwOTQ3IixMVFM6IkFcdTA5MTVcdTA5NGIgaDptbTpzcyBcdTA5MmNcdTA5MWNcdTA5NDciLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSwgQVx1MDkxNVx1MDk0YiBoOm1t''@;'; put 'put ''IFx1MDkyY1x1MDkxY1x1MDk0NyIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVksIEFcdTA5MTVcdTA5NGIgaDptbSBcdTA5MmNcdTA5MWNcdTA5NDcifSxwcmVwYXJzZTpmdW5jdGlvbih3KXtyZXR1cm4gdy5yZXBsYWNlKC9bXHUwOTY3XHUwOTY4XHUwOTY5XHUwOTZhXHUwOTZiXHUwOTZjXHUw''@;'; put 'put ''OTZkXHUwOTZlXHUwOTZmXHUwOTY2XS9nLGZ1bmN0aW9uKFApe3JldHVybiBnW1BdfSl9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24odyl7cmV0dXJuIHcucmVwbGFjZSgvXGQvZyxmdW5jdGlvbihQKXtyZXR1cm4gX1tQXX0pfSxtZXJpZGllbVBhcnNlOi9cdTA5MzBcdTA5M2VcdTA5MjRcdTA5M2Z8''@;'; put 'put ''XHUwOTJjXHUwOTNmXHUwOTM5XHUwOTNlXHUwOTI4fFx1MDkyNlx1MDkzZlx1MDkwOVx1MDkwMVx1MDkzOFx1MDk0YnxcdTA5MzhcdTA5M2VcdTA5MDFcdTA5MWQvLG1lcmlkaWVtSG91cjpmdW5jdGlvbih3LFApe3JldHVybiAxMj09PXcmJih3PTApLCJcdTA5MzBcdTA5M2VcdTA5MjRcdTA5''@;'; put 'put ''M2YiPT09UD93PDQ/dzp3KzEyOiJcdTA5MmNcdTA5M2ZcdTA5MzlcdTA5M2VcdTA5MjgiPT09UD93OiJcdTA5MjZcdTA5M2ZcdTA5MDlcdTA5MDFcdTA5MzhcdTA5NGIiPT09UD93Pj0xMD93OncrMTI6Ilx1MDkzOFx1MDkzZVx1MDkwMVx1MDkxZCI9PT1QP3crMTI6dm9pZCAwfSxtZXJpZGll''@;'; put 'put ''bTpmdW5jdGlvbih3LFAsRil7cmV0dXJuIHc8Mz8iXHUwOTMwXHUwOTNlXHUwOTI0XHUwOTNmIjp3PDEyPyJcdTA5MmNcdTA5M2ZcdTA5MzlcdTA5M2VcdTA5MjgiOnc8MTY/Ilx1MDkyNlx1MDkzZlx1MDkwOVx1MDkwMVx1MDkzOFx1MDk0YiI6dzwyMD8iXHUwOTM4XHUwOTNlXHUwOTAxXHUw''@;'; put 'put ''OTFkIjoiXHUwOTMwXHUwOTNlXHUwOTI0XHUwOTNmIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA5MDZcdTA5MWNdIExUIixuZXh0RGF5OiJbXHUwOTJkXHUwOTRiXHUwOTMyXHUwOTNmXSBMVCIsbmV4dFdlZWs6IltcdTA5MDZcdTA5MDlcdTA5MDFcdTA5MjZcdTA5NGJdIGRkZGRbLF0gTFQi''@;'; put 'put ''LGxhc3REYXk6IltcdTA5MzlcdTA5M2ZcdTA5MWNcdTA5NGJdIExUIixsYXN0V2VlazoiW1x1MDkxN1x1MDkwZlx1MDkxNVx1MDk0Yl0gZGRkZFssXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXNcdTA5MmVcdTA5M2UiLHBhc3Q6IiVzIFx1MDkwNVx1MDkxN1x1''@;'; put 'put ''MDkzZVx1MDkyMVx1MDkzZiIsczoiXHUwOTE1XHUwOTQ3XHUwOTM5XHUwOTQwIFx1MDkxNVx1MDk0ZFx1MDkzN1x1MDkyMyIsc3M6IiVkIFx1MDkzOFx1MDk0N1x1MDkxNVx1MDk0N1x1MDkyM1x1MDk0ZFx1MDkyMSIsbToiXHUwOTBmXHUwOTE1IFx1MDkyZVx1MDkzZlx1MDkyOFx1MDk0N1x1''@;'; put 'put ''MDkxZiIsbW06IiVkIFx1MDkyZVx1MDkzZlx1MDkyOFx1MDk0N1x1MDkxZiIsaDoiXHUwOTBmXHUwOTE1IFx1MDkxOFx1MDkyM1x1MDk0ZFx1MDkxZlx1MDkzZSIsaGg6IiVkIFx1MDkxOFx1MDkyM1x1MDk0ZFx1MDkxZlx1MDkzZSIsZDoiXHUwOTBmXHUwOTE1IFx1MDkyNlx1MDkzZlx1MDky''@;'; put 'put ''OCIsZGQ6IiVkIFx1MDkyNlx1MDkzZlx1MDkyOCIsTToiXHUwOTBmXHUwOTE1IFx1MDkyZVx1MDkzOVx1MDkzZlx1MDkyOFx1MDkzZSIsTU06IiVkIFx1MDkyZVx1MDkzOVx1MDkzZlx1MDkyOFx1MDkzZSIseToiXHUwOTBmXHUwOTE1IFx1MDkyY1x1MDkzMFx1MDk0ZFx1MDkzNyIseXk6IiVk''@;'; put 'put ''IFx1MDkyY1x1MDkzMFx1MDk0ZFx1MDkzNyJ9LHdlZWs6e2RvdzowLGRveTo2fX0pfSh5KDk3NTg2KSl9LDk5ODc1OmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz0iamFuLl9mZWIuX21ydC5fYXByLl9tZWlfanVuLl9qdWwuX2F1Zy5fc2VwLl9va3Qu''@;'; put 'put ''X25vdi5fZGVjLiIuc3BsaXQoIl8iKSxnPSJqYW5fZmViX21ydF9hcHJfbWVpX2p1bl9qdWxfYXVnX3NlcF9va3Rfbm92X2RlYyIuc3BsaXQoIl8iKSxCPVsvXmphbi9pLC9eZmViL2ksL14obWFhcnR8bXJ0XC4/KSQvaSwvXmFwci9pLC9ebWVpJC9pLC9eanVuW2kuXT8kL2ksL15qdWxbaS5d''@;'; put 'put ''PyQvaSwvXmF1Zy9pLC9ec2VwL2ksL15va3QvaSwvXm5vdi9pLC9eZGVjL2ldLHc9L14oamFudWFyaXxmZWJydWFyaXxtYWFydHxhcHJpbHxtZWl8anVbbmxdaXxhdWd1c3R1c3xzZXB0ZW1iZXJ8b2t0b2Jlcnxub3ZlbWJlcnxkZWNlbWJlcnxqYW5cLj98ZmViXC4/fG1ydFwuP3xhcHJcLj98''@;'; put 'put ''anVbbmxdXC4/fGF1Z1wuP3xzZXBcLj98b2t0XC4/fG5vdlwuP3xkZWNcLj8pL2k7SS5kZWZpbmVMb2NhbGUoIm5sLWJlIix7bW9udGhzOiJqYW51YXJpX2ZlYnJ1YXJpX21hYXJ0X2FwcmlsX21laV9qdW5pX2p1bGlfYXVndXN0dXNfc2VwdGVtYmVyX29rdG9iZXJfbm92ZW1iZXJfZGVjZW1i''@;'; put 'put ''ZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6ZnVuY3Rpb24oRixPKXtyZXR1cm4gRj8vLU1NTS0vLnRlc3QoTyk/Z1tGLm1vbnRoKCldOl9bRi5tb250aCgpXTpffSxtb250aHNSZWdleDp3LG1vbnRoc1Nob3J0UmVnZXg6dyxtb250aHNTdHJpY3RSZWdleDovXihqYW51YXJpfGZlYnJ1YXJp''@;'; put 'put ''fG1hYXJ0fGFwcmlsfG1laXxqdVtubF1pfGF1Z3VzdHVzfHNlcHRlbWJlcnxva3RvYmVyfG5vdmVtYmVyfGRlY2VtYmVyKS9pLG1vbnRoc1Nob3J0U3RyaWN0UmVnZXg6L14oamFuXC4/fGZlYlwuP3xtcnRcLj98YXByXC4/fG1laXxqdVtubF1cLj98YXVnXC4/fHNlcFwuP3xva3RcLj98bm92''@;'; put 'put ''XC4/fGRlY1wuPykvaSxtb250aHNQYXJzZTpCLGxvbmdNb250aHNQYXJzZTpCLHNob3J0TW9udGhzUGFyc2U6Qix3ZWVrZGF5czoiem9uZGFnX21hYW5kYWdfZGluc2RhZ193b2Vuc2RhZ19kb25kZXJkYWdfdnJpamRhZ196YXRlcmRhZyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJ6by5f''@;'; put 'put ''bWEuX2RpLl93by5fZG8uX3ZyLl96YS4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46InpvX21hX2RpX3dvX2RvX3ZyX3phIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoi''@;'; put 'put ''RCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW3ZhbmRhYWcgb21dIExUIixuZXh0RGF5OiJbbW9yZ2VuIG9tXSBMVCIsbmV4dFdlZWs6ImRkZGQgW29tXSBMVCIsbGFzdERheToiW2dp''@;'; put 'put ''c3RlcmVuIG9tXSBMVCIsbGFzdFdlZWs6IlthZmdlbG9wZW5dIGRkZGQgW29tXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToib3ZlciAlcyIscGFzdDoiJXMgZ2VsZWRlbiIsczoiZWVuIHBhYXIgc2Vjb25kZW4iLHNzOiIlZCBzZWNvbmRlbiIsbToiXHhlOVx4ZTlu''@;'; put 'put ''IG1pbnV1dCIsbW06IiVkIG1pbnV0ZW4iLGg6Ilx4ZTlceGU5biB1dXIiLGhoOiIlZCB1dXIiLGQ6Ilx4ZTlceGU5biBkYWciLGRkOiIlZCBkYWdlbiIsTToiXHhlOVx4ZTluIG1hYW5kIixNTToiJWQgbWFhbmRlbiIseToiXHhlOVx4ZTluIGphYXIiLHl5OiIlZCBqYWFyIn0sZGF5T2ZNb250''@;'; put 'put ''aE9yZGluYWxQYXJzZTovXGR7MSwyfShzdGV8ZGUpLyxvcmRpbmFsOmZ1bmN0aW9uKEYpe3JldHVybiBGKygxPT09Rnx8OD09PUZ8fEY+PTIwPyJzdGUiOiJkZSIpfSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oeSg5NzU4NikpfSw2NTQ0MTpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsi''@;'; put 'put ''dXNlIHN0cmljdCI7dmFyIF89Imphbi5fZmViLl9tcnQuX2Fwci5fbWVpX2p1bi5fanVsLl9hdWcuX3NlcC5fb2t0Ll9ub3YuX2RlYy4iLnNwbGl0KCJfIiksZz0iamFuX2ZlYl9tcnRfYXByX21laV9qdW5fanVsX2F1Z19zZXBfb2t0X25vdl9kZWMiLnNwbGl0KCJfIiksQj1bL15qYW4vaSwv''@;'; put 'put ''XmZlYi9pLC9eKG1hYXJ0fG1ydFwuPykkL2ksL15hcHIvaSwvXm1laSQvaSwvXmp1bltpLl0/JC9pLC9eanVsW2kuXT8kL2ksL15hdWcvaSwvXnNlcC9pLC9eb2t0L2ksL15ub3YvaSwvXmRlYy9pXSx3PS9eKGphbnVhcml8ZmVicnVhcml8bWFhcnR8YXByaWx8bWVpfGp1W25sXWl8YXVndXN0''@;'; put 'put ''dXN8c2VwdGVtYmVyfG9rdG9iZXJ8bm92ZW1iZXJ8ZGVjZW1iZXJ8amFuXC4/fGZlYlwuP3xtcnRcLj98YXByXC4/fGp1W25sXVwuP3xhdWdcLj98c2VwXC4/fG9rdFwuP3xub3ZcLj98ZGVjXC4/KS9pO0kuZGVmaW5lTG9jYWxlKCJubCIse21vbnRoczoiamFudWFyaV9mZWJydWFyaV9tYWFy''@;'; put 'put ''dF9hcHJpbF9tZWlfanVuaV9qdWxpX2F1Z3VzdHVzX3NlcHRlbWJlcl9va3RvYmVyX25vdmVtYmVyX2RlY2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OmZ1bmN0aW9uKEYsTyl7cmV0dXJuIEY/Ly1NTU0tLy50ZXN0KE8pP2dbRi5tb250aCgpXTpfW0YubW9udGgoKV06X30sbW9udGhz''@;'; put 'put ''UmVnZXg6dyxtb250aHNTaG9ydFJlZ2V4OncsbW9udGhzU3RyaWN0UmVnZXg6L14oamFudWFyaXxmZWJydWFyaXxtYWFydHxhcHJpbHxtZWl8anVbbmxdaXxhdWd1c3R1c3xzZXB0ZW1iZXJ8b2t0b2Jlcnxub3ZlbWJlcnxkZWNlbWJlcikvaSxtb250aHNTaG9ydFN0cmljdFJlZ2V4Oi9eKGph''@;'; put 'put ''blwuP3xmZWJcLj98bXJ0XC4/fGFwclwuP3xtZWl8anVbbmxdXC4/fGF1Z1wuP3xzZXBcLj98b2t0XC4/fG5vdlwuP3xkZWNcLj8pL2ksbW9udGhzUGFyc2U6Qixsb25nTW9udGhzUGFyc2U6QixzaG9ydE1vbnRoc1BhcnNlOkIsd2Vla2RheXM6InpvbmRhZ19tYWFuZGFnX2RpbnNkYWdfd29l''@;'; put 'put ''bnNkYWdfZG9uZGVyZGFnX3ZyaWpkYWdfemF0ZXJkYWciLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiem8uX21hLl9kaS5fd28uX2RvLl92ci5femEuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJ6b19tYV9kaV93b19kb192cl96YSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6''@;'; put 'put ''ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQtTU0tWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6Ilt2YW5kYWFnIG9tXSBM''@;'; put 'put ''VCIsbmV4dERheToiW21vcmdlbiBvbV0gTFQiLG5leHRXZWVrOiJkZGRkIFtvbV0gTFQiLGxhc3REYXk6IltnaXN0ZXJlbiBvbV0gTFQiLGxhc3RXZWVrOiJbYWZnZWxvcGVuXSBkZGRkIFtvbV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Im92ZXIgJXMiLHBhc3Q6''@;'; put 'put ''IiVzIGdlbGVkZW4iLHM6ImVlbiBwYWFyIHNlY29uZGVuIixzczoiJWQgc2Vjb25kZW4iLG06Ilx4ZTlceGU5biBtaW51dXQiLG1tOiIlZCBtaW51dGVuIixoOiJceGU5XHhlOW4gdXVyIixoaDoiJWQgdXVyIixkOiJceGU5XHhlOW4gZGFnIixkZDoiJWQgZGFnZW4iLHc6Ilx4ZTlceGU5biB3''@;'; put 'put ''ZWVrIix3dzoiJWQgd2VrZW4iLE06Ilx4ZTlceGU5biBtYWFuZCIsTU06IiVkIG1hYW5kZW4iLHk6Ilx4ZTlceGU5biBqYWFyIix5eToiJWQgamFhciJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oc3RlfGRlKS8sb3JkaW5hbDpmdW5jdGlvbihGKXtyZXR1cm4gRisoMT09PUZ8''@;'; put 'put ''fDg9PT1GfHxGPj0yMD8ic3RlIjoiZGUiKX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KHkoOTc1ODYpKX0sODEzMTE6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJubiIse21vbnRoczoiamFudWFyX2ZlYnJ1YXJfbWFyc19hcHJpbF9t''@;'; put 'put ''YWlfanVuaV9qdWxpX2F1Z3VzdF9zZXB0ZW1iZXJfb2t0b2Jlcl9ub3ZlbWJlcl9kZXNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiamFuLl9mZWIuX21hcnNfYXByLl9tYWlfanVuaV9qdWxpX2F1Zy5fc2VwLl9va3QuX25vdi5fZGVzLiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4''@;'; put 'put ''YWN0OiEwLHdlZWtkYXlzOiJzdW5kYWdfbVx4ZTVuZGFnX3R5c2RhZ19vbnNkYWdfdG9yc2RhZ19mcmVkYWdfbGF1cmRhZyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJzdS5fbVx4ZTUuX3R5Ll9vbi5fdG8uX2ZyLl9sYXUuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJzdV9tXHhlNV90''@;'; put 'put ''eV9vbl90b19mcl9sYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQuIE1NTU0gWVlZWSIsTExMOiJELiBNTU1NIFlZWVkgW2tsLl0gSDptbSIsTExMTDoiZGRkZCBE''@;'; put 'put ''LiBNTU1NIFlZWVkgW2tsLl0gSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW0kgZGFnIGtsb2trYV0gTFQiLG5leHREYXk6IltJIG1vcmdvbiBrbG9ra2FdIExUIixuZXh0V2VlazoiZGRkZCBba2xva2thXSBMVCIsbGFzdERheToiW0kgZ1x4ZTVyIGtsb2trYV0gTFQiLGxhc3RXZWVrOiJb''@;'; put 'put ''Rlx4ZjhyZWdceGU1YW5kZV0gZGRkZCBba2xva2thXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToib20gJXMiLHBhc3Q6IiVzIHNpZGFuIixzOiJub2tyZSBzZWt1bmQiLHNzOiIlZCBzZWt1bmQiLG06ImVpdCBtaW51dHQiLG1tOiIlZCBtaW51dHQiLGg6ImVpbiB0''@;'; put 'put ''aW1lIixoaDoiJWQgdGltYXIiLGQ6ImVpbiBkYWciLGRkOiIlZCBkYWdhciIsdzoiZWkgdmVrZSIsd3c6IiVkIHZla2VyIixNOiJlaW4gbVx4ZTVuYWQiLE1NOiIlZCBtXHhlNW5hZGVyIix5OiJlaXQgXHhlNXIiLHl5OiIlZCBceGU1ciJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEs''@;'; put 'put ''Mn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oeSg5NzU4NikpfSw3MjU2NzpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoIm9jLWxuYyIse21vbnRoczp7c3RhbmRhbG9uZToiZ2VuaVx4ZThyX2ZlYnJpXHhl''@;'; put 'put ''OHJfbWFyXHhlN19hYnJpbF9tYWlfanVuaF9qdWxoZXRfYWdvc3Rfc2V0ZW1icmVfb2N0XHhmMmJyZV9ub3ZlbWJyZV9kZWNlbWJyZSIuc3BsaXQoIl8iKSxmb3JtYXQ6ImRlIGdlbmlceGU4cl9kZSBmZWJyaVx4ZThyX2RlIG1hclx4ZTdfZCdhYnJpbF9kZSBtYWlfZGUganVuaF9kZSBqdWxo''@;'; put 'put ''ZXRfZCdhZ29zdF9kZSBzZXRlbWJyZV9kJ29jdFx4ZjJicmVfZGUgbm92ZW1icmVfZGUgZGVjZW1icmUiLnNwbGl0KCJfIiksaXNGb3JtYXQ6L0Rbb0RdPyhccykrTU1NTS99LG1vbnRoc1Nob3J0OiJnZW4uX2ZlYnIuX21hclx4ZTdfYWJyLl9tYWlfanVuaF9qdWxoLl9hZ28uX3NldC5fb2N0''@;'; put 'put ''Ll9ub3YuX2RlYy4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiZGltZW5nZV9kaWx1bnNfZGltYXJzX2RpbVx4ZThjcmVzX2Rpalx4ZjJ1c19kaXZlbmRyZXNfZGlzc2FidGUiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiZGcuX2RsLl9kbS5fZGMuX2RqLl9k''@;'; put 'put ''di5fZHMuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJkZ19kbF9kbV9kY19kal9kdl9kcyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJIOm1tIixMVFM6Ikg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gW2RlXSBZWVlZIixs''@;'; put 'put ''bDoiRCBNTU0gWVlZWSIsTExMOiJEIE1NTU0gW2RlXSBZWVlZIFthXSBIOm1tIixsbGw6IkQgTU1NIFlZWVksIEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFtkZV0gWVlZWSBbYV0gSDptbSIsbGxsbDoiZGRkIEQgTU1NIFlZWVksIEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW3VceGU4aSBh''@;'; put 'put ''XSBMVCIsbmV4dERheToiW2RlbWFuIGFdIExUIixuZXh0V2VlazoiZGRkZCBbYV0gTFQiLGxhc3REYXk6IltpXHhlOHIgYV0gTFQiLGxhc3RXZWVrOiJkZGRkIFtwYXNzYXQgYV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImQnYXF1XHhlZCAlcyIscGFzdDoiZmEg''@;'; put 'put ''JXMiLHM6InVuYXMgc2Vnb25kYXMiLHNzOiIlZCBzZWdvbmRhcyIsbToidW5hIG1pbnV0YSIsbW06IiVkIG1pbnV0YXMiLGg6InVuYSBvcmEiLGhoOiIlZCBvcmFzIixkOiJ1biBqb3JuIixkZDoiJWQgam9ybnMiLE06InVuIG1lcyIsTU06IiVkIG1lc2VzIix5OiJ1biBhbiIseXk6IiVkIGFu''@;'; put 'put ''cyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0ocnxufHR8XHhlOHxhKS8sb3JkaW5hbDpmdW5jdGlvbihnLEIpe3ZhciB3PTE9PT1nPyJyIjoyPT09Zz8ibiI6Mz09PWc/InIiOjQ9PT1nPyJ0IjoiXHhlOCI7cmV0dXJuKCJ3Ij09PUJ8fCJXIj09PUIpJiYodz0iYSIpLGcrd30s''@;'; put 'put ''d2Vlazp7ZG93OjEsZG95OjR9fSl9KHkoOTc1ODYpKX0sNTY5NjI6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO3ZhciBfPXsxOiJcdTBhNjciLDI6Ilx1MGE2OCIsMzoiXHUwYTY5Iiw0OiJcdTBhNmEiLDU6Ilx1MGE2YiIsNjoiXHUwYTZjIiw3OiJcdTBhNmQi''@;'; put 'put ''LDg6Ilx1MGE2ZSIsOToiXHUwYTZmIiwwOiJcdTBhNjYifSxnPXsiXHUwYTY3IjoiMSIsIlx1MGE2OCI6IjIiLCJcdTBhNjkiOiIzIiwiXHUwYTZhIjoiNCIsIlx1MGE2YiI6IjUiLCJcdTBhNmMiOiI2IiwiXHUwYTZkIjoiNyIsIlx1MGE2ZSI6IjgiLCJcdTBhNmYiOiI5IiwiXHUwYTY2Ijoi''@;'; put 'put ''MCJ9O0kuZGVmaW5lTG9jYWxlKCJwYS1pbiIse21vbnRoczoiXHUwYTFjXHUwYTI4XHUwYTM1XHUwYTMwXHUwYTQwX1x1MGEyYlx1MGEzY1x1MGEzMFx1MGEzNVx1MGEzMFx1MGE0MF9cdTBhMmVcdTBhM2VcdTBhMzBcdTBhMWFfXHUwYTA1XHUwYTJhXHUwYTRkXHUwYTMwXHUwYTQ4XHUwYTMy''@;'; put 'put ''X1x1MGEyZVx1MGEwOF9cdTBhMWNcdTBhNDJcdTBhMjhfXHUwYTFjXHUwYTQxXHUwYTMyXHUwYTNlXHUwYTA4X1x1MGEwNVx1MGExN1x1MGEzOFx1MGEyNF9cdTBhMzhcdTBhMjRcdTBhNzBcdTBhMmNcdTBhMzBfXHUwYTA1XHUwYTE1XHUwYTI0XHUwYTQyXHUwYTJjXHUwYTMwX1x1MGEyOFx1''@;'; put 'put ''MGEzNVx1MGE3MFx1MGEyY1x1MGEzMF9cdTBhMjZcdTBhMzhcdTBhNzBcdTBhMmNcdTBhMzAiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MGExY1x1MGEyOFx1MGEzNVx1MGEzMFx1MGE0MF9cdTBhMmJcdTBhM2NcdTBhMzBcdTBhMzVcdTBhMzBcdTBhNDBfXHUwYTJlXHUwYTNlXHUwYTMw''@;'; put 'put ''XHUwYTFhX1x1MGEwNVx1MGEyYVx1MGE0ZFx1MGEzMFx1MGE0OFx1MGEzMl9cdTBhMmVcdTBhMDhfXHUwYTFjXHUwYTQyXHUwYTI4X1x1MGExY1x1MGE0MVx1MGEzMlx1MGEzZVx1MGEwOF9cdTBhMDVcdTBhMTdcdTBhMzhcdTBhMjRfXHUwYTM4XHUwYTI0XHUwYTcwXHUwYTJjXHUwYTMwX1x1''@;'; put 'put ''MGEwNVx1MGExNVx1MGEyNFx1MGE0Mlx1MGEyY1x1MGEzMF9cdTBhMjhcdTBhMzVcdTBhNzBcdTBhMmNcdTBhMzBfXHUwYTI2XHUwYTM4XHUwYTcwXHUwYTJjXHUwYTMwIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTBhMTBcdTBhMjRcdTBhMzVcdTBhM2VcdTBhMzBfXHUwYTM4XHUwYTRiXHUw''@;'; put 'put ''YTJlXHUwYTM1XHUwYTNlXHUwYTMwX1x1MGEyZVx1MGE3MFx1MGExN1x1MGEzMlx1MGEzNVx1MGEzZVx1MGEzMF9cdTBhMmNcdTBhNDFcdTBhMjdcdTBhMzVcdTBhM2VcdTBhMzBfXHUwYTM1XHUwYTQwXHUwYTMwXHUwYTM1XHUwYTNlXHUwYTMwX1x1MGEzOFx1MGEzY1x1MGE0MVx1MGE3MVx1''@;'; put 'put ''MGExNVx1MGEzMFx1MGEzNVx1MGEzZVx1MGEzMF9cdTBhMzhcdTBhM2NcdTBhMjhcdTBhNDBcdTBhMWFcdTBhMzBcdTBhMzVcdTBhM2VcdTBhMzAiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwYTEwXHUwYTI0X1x1MGEzOFx1MGE0Ylx1MGEyZV9cdTBhMmVcdTBhNzBcdTBhMTdcdTBh''@;'; put 'put ''MzJfXHUwYTJjXHUwYTQxXHUwYTI3X1x1MGEzNVx1MGE0MFx1MGEzMF9cdTBhMzhcdTBhM2NcdTBhNDFcdTBhMTVcdTBhMzBfXHUwYTM4XHUwYTNjXHUwYTI4XHUwYTQwIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTBhMTBcdTBhMjRfXHUwYTM4XHUwYTRiXHUwYTJlX1x1MGEyZVx1MGE3''@;'; put 'put ''MFx1MGExN1x1MGEzMl9cdTBhMmNcdTBhNDFcdTBhMjdfXHUwYTM1XHUwYTQwXHUwYTMwX1x1MGEzOFx1MGEzY1x1MGE0MVx1MGExNVx1MGEzMF9cdTBhMzhcdTBhM2NcdTBhMjhcdTBhNDAiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJBIGg6bW0gXHUwYTM1XHUwYTFjXHUwYTQ3''@;'; put 'put ''IixMVFM6IkEgaDptbTpzcyBcdTBhMzVcdTBhMWNcdTBhNDciLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSwgQSBoOm1tIFx1MGEzNVx1MGExY1x1MGE0NyIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVksIEEgaDptbSBcdTBhMzVcdTBhMWNcdTBhNDci''@;'; put 'put ''fSxjYWxlbmRhcjp7c2FtZURheToiW1x1MGEwNVx1MGExY10gTFQiLG5leHREYXk6IltcdTBhMTVcdTBhMzJdIExUIixuZXh0V2VlazoiW1x1MGEwNVx1MGExN1x1MGEzMlx1MGEzZV0gZGRkZCwgTFQiLGxhc3REYXk6IltcdTBhMTVcdTBhMzJdIExUIixsYXN0V2VlazoiW1x1MGEyYVx1MGEz''@;'; put 'put ''Zlx1MGExYlx1MGEzMlx1MGE0N10gZGRkZCwgTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIFx1MGEzNVx1MGEzZlx1MGE3MVx1MGExYSIscGFzdDoiJXMgXHUwYTJhXHUwYTNmXHUwYTFiXHUwYTMyXHUwYTQ3IixzOiJcdTBhMTVcdTBhNDFcdTBhMWQgXHUwYTM4''@;'; put 'put ''XHUwYTE1XHUwYTNmXHUwYTcwXHUwYTFmIixzczoiJWQgXHUwYTM4XHUwYTE1XHUwYTNmXHUwYTcwXHUwYTFmIixtOiJcdTBhMDdcdTBhMTUgXHUwYTJlXHUwYTNmXHUwYTcwXHUwYTFmIixtbToiJWQgXHUwYTJlXHUwYTNmXHUwYTcwXHUwYTFmIixoOiJcdTBhMDdcdTBhNzFcdTBhMTUgXHUw''@;'; put 'put ''YTE4XHUwYTcwXHUwYTFmXHUwYTNlIixoaDoiJWQgXHUwYTE4XHUwYTcwXHUwYTFmXHUwYTQ3IixkOiJcdTBhMDdcdTBhNzFcdTBhMTUgXHUwYTI2XHUwYTNmXHUwYTI4IixkZDoiJWQgXHUwYTI2XHUwYTNmXHUwYTI4IixNOiJcdTBhMDdcdTBhNzFcdTBhMTUgXHUwYTJlXHUwYTM5XHUwYTQw''@;'; put 'put ''XHUwYTI4XHUwYTNlIixNTToiJWQgXHUwYTJlXHUwYTM5XHUwYTQwXHUwYTI4XHUwYTQ3Iix5OiJcdTBhMDdcdTBhNzFcdTBhMTUgXHUwYTM4XHUwYTNlXHUwYTMyIix5eToiJWQgXHUwYTM4XHUwYTNlXHUwYTMyIn0scHJlcGFyc2U6ZnVuY3Rpb24odyl7cmV0dXJuIHcucmVwbGFjZSgvW1x1''@;'; put 'put ''MGE2N1x1MGE2OFx1MGE2OVx1MGE2YVx1MGE2Ylx1MGE2Y1x1MGE2ZFx1MGE2ZVx1MGE2Zlx1MGE2Nl0vZyxmdW5jdGlvbihQKXtyZXR1cm4gZ1tQXX0pfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKHcpe3JldHVybiB3LnJlcGxhY2UoL1xkL2csZnVuY3Rpb24oUCl7cmV0dXJuIF9bUF19KX0sbWVy''@;'; put 'put ''aWRpZW1QYXJzZTovXHUwYTMwXHUwYTNlXHUwYTI0fFx1MGEzOFx1MGEzNVx1MGE0N1x1MGEzMHxcdTBhMjZcdTBhNDFcdTBhMmFcdTBhMzlcdTBhM2ZcdTBhMzB8XHUwYTM4XHUwYTNjXHUwYTNlXHUwYTJlLyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24odyxQKXtyZXR1cm4gMTI9PT13JiYodz0w''@;'; put 'put ''KSwiXHUwYTMwXHUwYTNlXHUwYTI0Ij09PVA/dzw0P3c6dysxMjoiXHUwYTM4XHUwYTM1XHUwYTQ3XHUwYTMwIj09PVA/dzoiXHUwYTI2XHUwYTQxXHUwYTJhXHUwYTM5XHUwYTNmXHUwYTMwIj09PVA/dz49MTA/dzp3KzEyOiJcdTBhMzhcdTBhM2NcdTBhM2VcdTBhMmUiPT09UD93KzEyOnZv''@;'; put 'put ''aWQgMH0sbWVyaWRpZW06ZnVuY3Rpb24odyxQLEYpe3JldHVybiB3PDQ/Ilx1MGEzMFx1MGEzZVx1MGEyNCI6dzwxMD8iXHUwYTM4XHUwYTM1XHUwYTQ3XHUwYTMwIjp3PDE3PyJcdTBhMjZcdTBhNDFcdTBhMmFcdTBhMzlcdTBhM2ZcdTBhMzAiOnc8MjA/Ilx1MGEzOFx1MGEzY1x1MGEzZVx1''@;'; put 'put ''MGEyZSI6Ilx1MGEzMFx1MGEzZVx1MGEyNCJ9LHdlZWs6e2RvdzowLGRveTo2fX0pfSh5KDk3NTg2KSl9LDYxMDYzOmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz0ic3R5Y3plXHUwMTQ0X2x1dHlfbWFyemVjX2t3aWVjaWVcdTAxNDRfbWFqX2N6ZXJ3''@;'; put 'put ''aWVjX2xpcGllY19zaWVycGllXHUwMTQ0X3dyemVzaWVcdTAxNDRfcGFcdTAxN2Fkemllcm5pa19saXN0b3BhZF9ncnVkemllXHUwMTQ0Ii5zcGxpdCgiXyIpLGc9InN0eWN6bmlhX2x1dGVnb19tYXJjYV9rd2lldG5pYV9tYWphX2N6ZXJ3Y2FfbGlwY2Ffc2llcnBuaWFfd3J6ZVx1MDE1Ym5p''@;'; put 'put ''YV9wYVx1MDE3YWR6aWVybmlrYV9saXN0b3BhZGFfZ3J1ZG5pYSIuc3BsaXQoIl8iKSxCPVsvXnN0eS9pLC9ebHV0L2ksL15tYXIvaSwvXmt3aS9pLC9ebWFqL2ksL15jemUvaSwvXmxpcC9pLC9ec2llL2ksL153cnovaSwvXnBhXHUwMTdhL2ksL15saXMvaSwvXmdydS9pXTtmdW5jdGlvbiB3''@;'; put 'put ''KE8pe3JldHVybiBPJTEwPDUmJk8lMTA+MSYmfn4oTy8xMCklMTAhPTF9ZnVuY3Rpb24gUChPLHosTil7dmFyIEw9TysiICI7c3dpdGNoKE4pe2Nhc2Uic3MiOnJldHVybiBMKyh3KE8pPyJzZWt1bmR5Ijoic2VrdW5kIik7Y2FzZSJtIjpyZXR1cm4gej8ibWludXRhIjoibWludXRcdTAxMTki''@;'; put 'put ''O2Nhc2UibW0iOnJldHVybiBMKyh3KE8pPyJtaW51dHkiOiJtaW51dCIpO2Nhc2UiaCI6cmV0dXJuIHo/ImdvZHppbmEiOiJnb2R6aW5cdTAxMTkiO2Nhc2UiaGgiOnJldHVybiBMKyh3KE8pPyJnb2R6aW55IjoiZ29kemluIik7Y2FzZSJ3dyI6cmV0dXJuIEwrKHcoTyk/InR5Z29kbmllIjoi''@;'; put 'put ''dHlnb2RuaSIpO2Nhc2UiTU0iOnJldHVybiBMKyh3KE8pPyJtaWVzaVx1MDEwNWNlIjoibWllc2lcdTAxMTljeSIpO2Nhc2UieXkiOnJldHVybiBMKyh3KE8pPyJsYXRhIjoibGF0Iil9fUkuZGVmaW5lTG9jYWxlKCJwbCIse21vbnRoczpmdW5jdGlvbihPLHope3JldHVybiBPPy9EIE1NTU0v''@;'; put 'put ''LnRlc3Qoeik/Z1tPLm1vbnRoKCldOl9bTy5tb250aCgpXTpffSxtb250aHNTaG9ydDoic3R5X2x1dF9tYXJfa3dpX21hal9jemVfbGlwX3NpZV93cnpfcGFcdTAxN2FfbGlzX2dydSIuc3BsaXQoIl8iKSxtb250aHNQYXJzZTpCLGxvbmdNb250aHNQYXJzZTpCLHNob3J0TW9udGhzUGFyc2U6''@;'; put 'put ''Qix3ZWVrZGF5czoibmllZHppZWxhX3BvbmllZHppYVx1MDE0MmVrX3d0b3Jla19cdTAxNWJyb2RhX2N6d2FydGVrX3BpXHUwMTA1dGVrX3NvYm90YSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJuZHpfcG9uX3d0X1x1MDE1YnJfY3p3X3B0X3NvYiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01p''@;'; put 'put ''bjoiTmRfUG5fV3RfXHUwMTVhcl9Del9QdF9TbyIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhI''@;'; put 'put ''Om1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltEemlcdTAxNWIgb10gTFQiLG5leHREYXk6IltKdXRybyBvXSBMVCIsbmV4dFdlZWs6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAwOnJldHVybiJbVyBuaWVkemllbFx1MDExOSBvXSBMVCI7Y2FzZSAyOnJldHVybiJbV2Ugd3Rv''@;'; put 'put ''cmVrIG9dIExUIjtjYXNlIDM6cmV0dXJuIltXIFx1MDE1YnJvZFx1MDExOSBvXSBMVCI7Y2FzZSA2OnJldHVybiJbVyBzb2JvdFx1MDExOSBvXSBMVCI7ZGVmYXVsdDpyZXR1cm4iW1ddIGRkZGQgW29dIExUIn19LGxhc3REYXk6IltXY3pvcmFqIG9dIExUIixsYXN0V2VlazpmdW5jdGlvbigp''@;'; put 'put ''e3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6cmV0dXJuIltXIHplc3pcdTAxNDJcdTAxMDUgbmllZHppZWxcdTAxMTkgb10gTFQiO2Nhc2UgMzpyZXR1cm4iW1cgemVzelx1MDE0Mlx1MDEwNSBcdTAxNWJyb2RcdTAxMTkgb10gTFQiO2Nhc2UgNjpyZXR1cm4iW1cgemVzelx1MDE0Mlx1MDEw''@;'; put 'put ''NSBzb2JvdFx1MDExOSBvXSBMVCI7ZGVmYXVsdDpyZXR1cm4iW1cgemVzelx1MDE0MnldIGRkZGQgW29dIExUIn19LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6InphICVzIixwYXN0OiIlcyB0ZW11IixzOiJraWxrYSBzZWt1bmQiLHNzOlAsbTpQLG1tOlAsaDpQLGhoOlAs''@;'; put 'put ''ZDoiMSBkemllXHUwMTQ0IixkZDoiJWQgZG5pIix3OiJ0eWR6aWVcdTAxNDQiLHd3OlAsTToibWllc2lcdTAxMDVjIixNTTpQLHk6InJvayIseXk6UH0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo0fX0pfSh5KDk3NTg2''@;'; put 'put ''KSl9LDk3NDc2OmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgicHQtYnIiLHttb250aHM6ImphbmVpcm9fZmV2ZXJlaXJvX21hclx4ZTdvX2FicmlsX21haW9fanVuaG9fanVsaG9fYWdvc3RvX3NldGVtYnJvX291dHVicm9fbm92ZW1i''@;'; put 'put ''cm9fZGV6ZW1icm8iLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Imphbl9mZXZfbWFyX2Ficl9tYWlfanVuX2p1bF9hZ29fc2V0X291dF9ub3ZfZGV6Ii5zcGxpdCgiXyIpLHdlZWtkYXlzOiJkb21pbmdvX3NlZ3VuZGEtZmVpcmFfdGVyXHhlN2EtZmVpcmFfcXVhcnRhLWZlaXJhX3F1aW50YS1m''@;'; put 'put ''ZWlyYV9zZXh0YS1mZWlyYV9zXHhlMWJhZG8iLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiZG9tX3NlZ190ZXJfcXVhX3F1aV9zZXhfc1x4ZTFiIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJkb18yXHhhYV8zXHhhYV80XHhhYV81XHhhYV82XHhhYV9zXHhlMSIuc3BsaXQoIl8iKSx3ZWVr''@;'; put 'put ''ZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgW2RlXSBNTU1NIFtkZV0gWVlZWSIsTExMOiJEIFtkZV0gTU1NTSBbZGVdIFlZWVkgW1x4ZTBzXSBISDptbSIsTExMTDoiZGRkZCwgRCBbZGVdIE1N''@;'; put 'put ''TU0gW2RlXSBZWVlZIFtceGUwc10gSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW0hvamUgXHhlMHNdIExUIixuZXh0RGF5OiJbQW1hbmhceGUzIFx4ZTBzXSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x4ZTBzXSBMVCIsbGFzdERheToiW09udGVtIFx4ZTBzXSBMVCIsbGFzdFdlZWs6ZnVuY3Rp''@;'; put 'put ''b24oKXtyZXR1cm4gMD09PXRoaXMuZGF5KCl8fDY9PT10aGlzLmRheSgpPyJbXHhkYWx0aW1vXSBkZGRkIFtceGUwc10gTFQiOiJbXHhkYWx0aW1hXSBkZGRkIFtceGUwc10gTFQifSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJlbSAlcyIscGFzdDoiaFx4ZTEgJXMiLHM6''@;'; put 'put ''InBvdWNvcyBzZWd1bmRvcyIsc3M6IiVkIHNlZ3VuZG9zIixtOiJ1bSBtaW51dG8iLG1tOiIlZCBtaW51dG9zIixoOiJ1bWEgaG9yYSIsaGg6IiVkIGhvcmFzIixkOiJ1bSBkaWEiLGRkOiIlZCBkaWFzIixNOiJ1bSBtXHhlYXMiLE1NOiIlZCBtZXNlcyIseToidW0gYW5vIix5eToiJWQgYW5v''@;'; put 'put ''cyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1ceGJhLyxvcmRpbmFsOiIlZFx4YmEiLGludmFsaWREYXRlOiJEYXRhIGludlx4ZTFsaWRhIn0pfSh5KDk3NTg2KSl9LDc4NzE5OmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2Fs''@;'; put 'put ''ZSgicHQiLHttb250aHM6ImphbmVpcm9fZmV2ZXJlaXJvX21hclx4ZTdvX2FicmlsX21haW9fanVuaG9fanVsaG9fYWdvc3RvX3NldGVtYnJvX291dHVicm9fbm92ZW1icm9fZGV6ZW1icm8iLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Imphbl9mZXZfbWFyX2Ficl9tYWlfanVuX2p1bF9hZ29f''@;'; put 'put ''c2V0X291dF9ub3ZfZGV6Ii5zcGxpdCgiXyIpLHdlZWtkYXlzOiJEb21pbmdvX1NlZ3VuZGEtZmVpcmFfVGVyXHhlN2EtZmVpcmFfUXVhcnRhLWZlaXJhX1F1aW50YS1mZWlyYV9TZXh0YS1mZWlyYV9TXHhlMWJhZG8iLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiRG9tX1NlZ19UZXJfUXVh''@;'; put 'put ''X1F1aV9TZXhfU1x4ZTFiIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJEb18yXHhhYV8zXHhhYV80XHhhYV81XHhhYV82XHhhYV9TXHhlMSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0v''@;'; put 'put ''WVlZWSIsTEw6IkQgW2RlXSBNTU1NIFtkZV0gWVlZWSIsTExMOiJEIFtkZV0gTU1NTSBbZGVdIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgW2RlXSBNTU1NIFtkZV0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbSG9qZSBceGUwc10gTFQiLG5leHREYXk6IltBbWFuaFx4ZTMg''@;'; put 'put ''XHhlMHNdIExUIixuZXh0V2VlazoiZGRkZCBbXHhlMHNdIExUIixsYXN0RGF5OiJbT250ZW0gXHhlMHNdIExUIixsYXN0V2VlazpmdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5kYXkoKXx8Nj09PXRoaXMuZGF5KCk/IltceGRhbHRpbW9dIGRkZGQgW1x4ZTBzXSBMVCI6IltceGRhbHRpbWFd''@;'; put 'put ''IGRkZGQgW1x4ZTBzXSBMVCJ9LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImVtICVzIixwYXN0OiJoXHhlMSAlcyIsczoic2VndW5kb3MiLHNzOiIlZCBzZWd1bmRvcyIsbToidW0gbWludXRvIixtbToiJWQgbWludXRvcyIsaDoidW1hIGhvcmEiLGhoOiIlZCBob3JhcyIs''@;'; put 'put ''ZDoidW0gZGlhIixkZDoiJWQgZGlhcyIsdzoidW1hIHNlbWFuYSIsd3c6IiVkIHNlbWFuYXMiLE06InVtIG1ceGVhcyIsTU06IiVkIG1lc2VzIix5OiJ1bSBhbm8iLHl5OiIlZCBhbm9zIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVx4YmEvLG9yZGluYWw6IiVkXHhiYSIsd2Vl''@;'; put 'put ''azp7ZG93OjEsZG95OjR9fSl9KHkoOTc1ODYpKX0sNTEwMDQ6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIF8oQix3LFApe3ZhciBPPSIgIjtyZXR1cm4oQiUxMDA+PTIwfHxCPj0xMDAmJkIlMTAwPT0wKSYmKE89IiBkZSAiKSxCK08re3NzOiJz''@;'; put 'put ''ZWN1bmRlIixtbToibWludXRlIixoaDoib3JlIixkZDoiemlsZSIsd3c6InNcdTAxMDNwdFx1MDEwM21ceGUybmkiLE1NOiJsdW5pIix5eToiYW5pIn1bUF19SS5kZWZpbmVMb2NhbGUoInJvIix7bW9udGhzOiJpYW51YXJpZV9mZWJydWFyaWVfbWFydGllX2FwcmlsaWVfbWFpX2l1bmllX2l1''@;'; put 'put ''bGllX2F1Z3VzdF9zZXB0ZW1icmllX29jdG9tYnJpZV9ub2llbWJyaWVfZGVjZW1icmllIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJpYW4uX2ZlYi5fbWFydC5fYXByLl9tYWlfaXVuLl9pdWwuX2F1Zy5fc2VwdC5fb2N0Ll9ub3YuX2RlYy4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFj''@;'; put 'put ''dDohMCx3ZWVrZGF5czoiZHVtaW5pY1x1MDEwM19sdW5pX21hclx1MDIxYmlfbWllcmN1cmlfam9pX3ZpbmVyaV9zXHhlMm1iXHUwMTAzdFx1MDEwMyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJEdW1fTHVuX01hcl9NaWVfSm9pX1Zpbl9TXHhlMm0iLnNwbGl0KCJfIiksd2Vla2RheXNN''@;'; put 'put ''aW46IkR1X0x1X01hX01pX0pvX1ZpX1NceGUyIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIsTFRTOiJIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSDptbSJ9''@;'; put 'put ''LGNhbGVuZGFyOntzYW1lRGF5OiJbYXppIGxhXSBMVCIsbmV4dERheToiW21ceGUyaW5lIGxhXSBMVCIsbmV4dFdlZWs6ImRkZGQgW2xhXSBMVCIsbGFzdERheToiW2llcmkgbGFdIExUIixsYXN0V2VlazoiW2Zvc3RhXSBkZGRkIFtsYV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1l''@;'; put 'put ''OntmdXR1cmU6InBlc3RlICVzIixwYXN0OiIlcyBceGVlbiB1cm1cdTAxMDMiLHM6ImNceGUydGV2YSBzZWN1bmRlIixzczpfLG06InVuIG1pbnV0IixtbTpfLGg6Im8gb3JcdTAxMDMiLGhoOl8sZDoibyB6aSIsZGQ6Xyx3OiJvIHNcdTAxMDNwdFx1MDEwM21ceGUyblx1MDEwMyIsd3c6XyxN''@;'; put 'put ''OiJvIGx1blx1MDEwMyIsTU06Xyx5OiJ1biBhbiIseXk6X30sd2Vlazp7ZG93OjEsZG95Ojd9fSl9KHkoOTc1ODYpKX0sNTEzMjY6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGcoUCxGLE8pe3JldHVybiJtIj09PU8/Rj8iXHUwNDNjXHUwNDM4''@;'; put 'put ''XHUwNDNkXHUwNDQzXHUwNDQyXHUwNDMwIjoiXHUwNDNjXHUwNDM4XHUwNDNkXHUwNDQzXHUwNDQyXHUwNDQzIjpQKyIgIitmdW5jdGlvbiBfKFAsRil7dmFyIE89UC5zcGxpdCgiXyIpO3JldHVybiBGJTEwPT0xJiZGJTEwMCE9MTE/T1swXTpGJTEwPj0yJiZGJTEwPD00JiYoRiUxMDA8MTB8''@;'; put 'put ''fEYlMTAwPj0yMCk/T1sxXTpPWzJdfSh7c3M6Rj8iXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0XHUwNDMwX1x1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNFx1MDQ0Yl9cdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzQiOiJcdTA0NDFcdTA0''@;'; put 'put ''MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzRcdTA0NDNfXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0XHUwNDRiX1x1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNCIsbW06Rj8iXHUwNDNjXHUwNDM4XHUwNDNkXHUwNDQzXHUwNDQyXHUwNDMwX1x1MDQzY1x1''@;'; put 'put ''MDQzOFx1MDQzZFx1MDQ0M1x1MDQ0Mlx1MDQ0Yl9cdTA0M2NcdTA0MzhcdTA0M2RcdTA0NDNcdTA0NDIiOiJcdTA0M2NcdTA0MzhcdTA0M2RcdTA0NDNcdTA0NDJcdTA0NDNfXHUwNDNjXHUwNDM4XHUwNDNkXHUwNDQzXHUwNDQyXHUwNDRiX1x1MDQzY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQ0''@;'; put 'put ''MiIsaGg6Ilx1MDQ0N1x1MDQzMFx1MDQ0MV9cdTA0NDdcdTA0MzBcdTA0NDFcdTA0MzBfXHUwNDQ3XHUwNDMwXHUwNDQxXHUwNDNlXHUwNDMyIixkZDoiXHUwNDM0XHUwNDM1XHUwNDNkXHUwNDRjX1x1MDQzNFx1MDQzZFx1MDQ0Zl9cdTA0MzRcdTA0M2RcdTA0MzVcdTA0MzkiLHd3OiJcdTA0''@;'; put 'put ''M2RcdTA0MzVcdTA0MzRcdTA0MzVcdTA0M2JcdTA0NGZfXHUwNDNkXHUwNDM1XHUwNDM0XHUwNDM1XHUwNDNiXHUwNDM4X1x1MDQzZFx1MDQzNVx1MDQzNFx1MDQzNVx1MDQzYlx1MDQ0YyIsTU06Ilx1MDQzY1x1MDQzNVx1MDQ0MVx1MDQ0Zlx1MDQ0Nl9cdTA0M2NcdTA0MzVcdTA0NDFcdTA0''@;'; put 'put ''NGZcdTA0NDZcdTA0MzBfXHUwNDNjXHUwNDM1XHUwNDQxXHUwNDRmXHUwNDQ2XHUwNDM1XHUwNDMyIix5eToiXHUwNDMzXHUwNDNlXHUwNDM0X1x1MDQzM1x1MDQzZVx1MDQzNFx1MDQzMF9cdTA0M2JcdTA0MzVcdTA0NDIifVtPXSwrUCl9dmFyIEI9Wy9eXHUwNDRmXHUwNDNkXHUwNDMyL2ks''@;'; put 'put ''L15cdTA0NDRcdTA0MzVcdTA0MzIvaSwvXlx1MDQzY1x1MDQzMFx1MDQ0MC9pLC9eXHUwNDMwXHUwNDNmXHUwNDQwL2ksL15cdTA0M2NcdTA0MzBbXHUwNDM5XHUwNDRmXS9pLC9eXHUwNDM4XHUwNDRlXHUwNDNkL2ksL15cdTA0MzhcdTA0NGVcdTA0M2IvaSwvXlx1MDQzMFx1MDQzMlx1MDQz''@;'; put 'put ''My9pLC9eXHUwNDQxXHUwNDM1XHUwNDNkL2ksL15cdTA0M2VcdTA0M2FcdTA0NDIvaSwvXlx1MDQzZFx1MDQzZVx1MDQ0Zi9pLC9eXHUwNDM0XHUwNDM1XHUwNDNhL2ldO0kuZGVmaW5lTG9jYWxlKCJydSIse21vbnRoczp7Zm9ybWF0OiJcdTA0NGZcdTA0M2RcdTA0MzJcdTA0MzBcdTA0NDBc''@;'; put 'put ''dTA0NGZfXHUwNDQ0XHUwNDM1XHUwNDMyXHUwNDQwXHUwNDMwXHUwNDNiXHUwNDRmX1x1MDQzY1x1MDQzMFx1MDQ0MFx1MDQ0Mlx1MDQzMF9cdTA0MzBcdTA0M2ZcdTA0NDBcdTA0MzVcdTA0M2JcdTA0NGZfXHUwNDNjXHUwNDMwXHUwNDRmX1x1MDQzOFx1MDQ0ZVx1MDQzZFx1MDQ0Zl9cdTA0''@;'; put 'put ''MzhcdTA0NGVcdTA0M2JcdTA0NGZfXHUwNDMwXHUwNDMyXHUwNDMzXHUwNDQzXHUwNDQxXHUwNDQyXHUwNDMwX1x1MDQ0MVx1MDQzNVx1MDQzZFx1MDQ0Mlx1MDQ0Zlx1MDQzMVx1MDQ0MFx1MDQ0Zl9cdTA0M2VcdTA0M2FcdTA0NDJcdTA0NGZcdTA0MzFcdTA0NDBcdTA0NGZfXHUwNDNkXHUw''@;'; put 'put ''NDNlXHUwNDRmXHUwNDMxXHUwNDQwXHUwNDRmX1x1MDQzNFx1MDQzNVx1MDQzYVx1MDQzMFx1MDQzMVx1MDQ0MFx1MDQ0ZiIuc3BsaXQoIl8iKSxzdGFuZGFsb25lOiJcdTA0NGZcdTA0M2RcdTA0MzJcdTA0MzBcdTA0NDBcdTA0NGNfXHUwNDQ0XHUwNDM1XHUwNDMyXHUwNDQwXHUwNDMwXHUw''@;'; put 'put ''NDNiXHUwNDRjX1x1MDQzY1x1MDQzMFx1MDQ0MFx1MDQ0Ml9cdTA0MzBcdTA0M2ZcdTA0NDBcdTA0MzVcdTA0M2JcdTA0NGNfXHUwNDNjXHUwNDMwXHUwNDM5X1x1MDQzOFx1MDQ0ZVx1MDQzZFx1MDQ0Y19cdTA0MzhcdTA0NGVcdTA0M2JcdTA0NGNfXHUwNDMwXHUwNDMyXHUwNDMzXHUwNDQz''@;'; put 'put ''XHUwNDQxXHUwNDQyX1x1MDQ0MVx1MDQzNVx1MDQzZFx1MDQ0Mlx1MDQ0Zlx1MDQzMVx1MDQ0MFx1MDQ0Y19cdTA0M2VcdTA0M2FcdTA0NDJcdTA0NGZcdTA0MzFcdTA0NDBcdTA0NGNfXHUwNDNkXHUwNDNlXHUwNDRmXHUwNDMxXHUwNDQwXHUwNDRjX1x1MDQzNFx1MDQzNVx1MDQzYVx1MDQz''@;'; put 'put ''MFx1MDQzMVx1MDQ0MFx1MDQ0YyIuc3BsaXQoIl8iKX0sbW9udGhzU2hvcnQ6e2Zvcm1hdDoiXHUwNDRmXHUwNDNkXHUwNDMyLl9cdTA0NDRcdTA0MzVcdTA0MzJcdTA0NDAuX1x1MDQzY1x1MDQzMFx1MDQ0MC5fXHUwNDMwXHUwNDNmXHUwNDQwLl9cdTA0M2NcdTA0MzBcdTA0NGZfXHUwNDM4''@;'; put 'put ''XHUwNDRlXHUwNDNkXHUwNDRmX1x1MDQzOFx1MDQ0ZVx1MDQzYlx1MDQ0Zl9cdTA0MzBcdTA0MzJcdTA0MzMuX1x1MDQ0MVx1MDQzNVx1MDQzZFx1MDQ0Mi5fXHUwNDNlXHUwNDNhXHUwNDQyLl9cdTA0M2RcdTA0M2VcdTA0NGZcdTA0MzEuX1x1MDQzNFx1MDQzNVx1MDQzYS4iLnNwbGl0KCJf''@;'; put 'put ''Iiksc3RhbmRhbG9uZToiXHUwNDRmXHUwNDNkXHUwNDMyLl9cdTA0NDRcdTA0MzVcdTA0MzJcdTA0NDAuX1x1MDQzY1x1MDQzMFx1MDQ0MFx1MDQ0Ml9cdTA0MzBcdTA0M2ZcdTA0NDAuX1x1MDQzY1x1MDQzMFx1MDQzOV9cdTA0MzhcdTA0NGVcdTA0M2RcdTA0NGNfXHUwNDM4XHUwNDRlXHUw''@;'; put 'put ''NDNiXHUwNDRjX1x1MDQzMFx1MDQzMlx1MDQzMy5fXHUwNDQxXHUwNDM1XHUwNDNkXHUwNDQyLl9cdTA0M2VcdTA0M2FcdTA0NDIuX1x1MDQzZFx1MDQzZVx1MDQ0Zlx1MDQzMS5fXHUwNDM0XHUwNDM1XHUwNDNhLiIuc3BsaXQoIl8iKX0sd2Vla2RheXM6e3N0YW5kYWxvbmU6Ilx1MDQzMlx1''@;'; put 'put ''MDQzZVx1MDQ0MVx1MDQzYVx1MDQ0MFx1MDQzNVx1MDQ0MVx1MDQzNVx1MDQzZFx1MDQ0Y1x1MDQzNV9cdTA0M2ZcdTA0M2VcdTA0M2RcdTA0MzVcdTA0MzRcdTA0MzVcdTA0M2JcdTA0NGNcdTA0M2RcdTA0MzhcdTA0M2FfXHUwNDMyXHUwNDQyXHUwNDNlXHUwNDQwXHUwNDNkXHUwNDM4XHUw''@;'; put 'put ''NDNhX1x1MDQ0MVx1MDQ0MFx1MDQzNVx1MDQzNFx1MDQzMF9cdTA0NDdcdTA0MzVcdTA0NDJcdTA0MzJcdTA0MzVcdTA0NDBcdTA0MzNfXHUwNDNmXHUwNDRmXHUwNDQyXHUwNDNkXHUwNDM4XHUwNDQ2XHUwNDMwX1x1MDQ0MVx1MDQ0M1x1MDQzMVx1MDQzMVx1MDQzZVx1MDQ0Mlx1MDQzMCIu''@;'; put 'put ''c3BsaXQoIl8iKSxmb3JtYXQ6Ilx1MDQzMlx1MDQzZVx1MDQ0MVx1MDQzYVx1MDQ0MFx1MDQzNVx1MDQ0MVx1MDQzNVx1MDQzZFx1MDQ0Y1x1MDQzNV9cdTA0M2ZcdTA0M2VcdTA0M2RcdTA0MzVcdTA0MzRcdTA0MzVcdTA0M2JcdTA0NGNcdTA0M2RcdTA0MzhcdTA0M2FfXHUwNDMyXHUwNDQy''@;'; put 'put ''XHUwNDNlXHUwNDQwXHUwNDNkXHUwNDM4XHUwNDNhX1x1MDQ0MVx1MDQ0MFx1MDQzNVx1MDQzNFx1MDQ0M19cdTA0NDdcdTA0MzVcdTA0NDJcdTA0MzJcdTA0MzVcdTA0NDBcdTA0MzNfXHUwNDNmXHUwNDRmXHUwNDQyXHUwNDNkXHUwNDM4XHUwNDQ2XHUwNDQzX1x1MDQ0MVx1MDQ0M1x1MDQz''@;'; put 'put ''MVx1MDQzMVx1MDQzZVx1MDQ0Mlx1MDQ0MyIuc3BsaXQoIl8iKSxpc0Zvcm1hdDovXFsgP1tcdTA0MTJcdTA0MzJdID8oPzpcdTA0M2ZcdTA0NDBcdTA0M2VcdTA0NDhcdTA0M2JcdTA0NDNcdTA0NGV8XHUwNDQxXHUwNDNiXHUwNDM1XHUwNDM0XHUwNDQzXHUwNDRlXHUwNDQ5XHUwNDQzXHUw''@;'; put 'put ''NDRlfFx1MDQ0ZFx1MDQ0Mlx1MDQ0Myk/ID9dID9kZGRkL30sd2Vla2RheXNTaG9ydDoiXHUwNDMyXHUwNDQxX1x1MDQzZlx1MDQzZF9cdTA0MzJcdTA0NDJfXHUwNDQxXHUwNDQwX1x1MDQ0N1x1MDQ0Ml9cdTA0M2ZcdTA0NDJfXHUwNDQxXHUwNDMxIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWlu''@;'; put 'put ''OiJcdTA0MzJcdTA0NDFfXHUwNDNmXHUwNDNkX1x1MDQzMlx1MDQ0Ml9cdTA0NDFcdTA0NDBfXHUwNDQ3XHUwNDQyX1x1MDQzZlx1MDQ0Ml9cdTA0NDFcdTA0MzEiLnNwbGl0KCJfIiksbW9udGhzUGFyc2U6Qixsb25nTW9udGhzUGFyc2U6QixzaG9ydE1vbnRoc1BhcnNlOkIsbW9udGhzUmVn''@;'; put 'put ''ZXg6L14oXHUwNDRmXHUwNDNkXHUwNDMyXHUwNDMwXHUwNDQwW1x1MDQ0Y1x1MDQ0Zl18XHUwNDRmXHUwNDNkXHUwNDMyXC4/fFx1MDQ0NFx1MDQzNVx1MDQzMlx1MDQ0MFx1MDQzMFx1MDQzYltcdTA0NGNcdTA0NGZdfFx1MDQ0NFx1MDQzNVx1MDQzMlx1MDQ0MD9cLj98XHUwNDNjXHUwNDMw''@;'; put 'put ''XHUwNDQwXHUwNDQyXHUwNDMwP3xcdTA0M2NcdTA0MzBcdTA0NDBcLj98XHUwNDMwXHUwNDNmXHUwNDQwXHUwNDM1XHUwNDNiW1x1MDQ0Y1x1MDQ0Zl18XHUwNDMwXHUwNDNmXHUwNDQwXC4/fFx1MDQzY1x1MDQzMFtcdTA0MzlcdTA0NGZdfFx1MDQzOFx1MDQ0ZVx1MDQzZFtcdTA0NGNcdTA0''@;'; put 'put ''NGZdfFx1MDQzOFx1MDQ0ZVx1MDQzZFwuP3xcdTA0MzhcdTA0NGVcdTA0M2JbXHUwNDRjXHUwNDRmXXxcdTA0MzhcdTA0NGVcdTA0M2JcLj98XHUwNDMwXHUwNDMyXHUwNDMzXHUwNDQzXHUwNDQxXHUwNDQyXHUwNDMwP3xcdTA0MzBcdTA0MzJcdTA0MzNcLj98XHUwNDQxXHUwNDM1XHUwNDNk''@;'; put 'put ''XHUwNDQyXHUwNDRmXHUwNDMxXHUwNDQwW1x1MDQ0Y1x1MDQ0Zl18XHUwNDQxXHUwNDM1XHUwNDNkXHUwNDQyP1wuP3xcdTA0M2VcdTA0M2FcdTA0NDJcdTA0NGZcdTA0MzFcdTA0NDBbXHUwNDRjXHUwNDRmXXxcdTA0M2VcdTA0M2FcdTA0NDJcLj98XHUwNDNkXHUwNDNlXHUwNDRmXHUwNDMx''@;'; put 'put ''XHUwNDQwW1x1MDQ0Y1x1MDQ0Zl18XHUwNDNkXHUwNDNlXHUwNDRmXHUwNDMxP1wuP3xcdTA0MzRcdTA0MzVcdTA0M2FcdTA0MzBcdTA0MzFcdTA0NDBbXHUwNDRjXHUwNDRmXXxcdTA0MzRcdTA0MzVcdTA0M2FcLj8pL2ksbW9udGhzU2hvcnRSZWdleDovXihcdTA0NGZcdTA0M2RcdTA0MzJc''@;'; put 'put ''dTA0MzBcdTA0NDBbXHUwNDRjXHUwNDRmXXxcdTA0NGZcdTA0M2RcdTA0MzJcLj98XHUwNDQ0XHUwNDM1XHUwNDMyXHUwNDQwXHUwNDMwXHUwNDNiW1x1MDQ0Y1x1MDQ0Zl18XHUwNDQ0XHUwNDM1XHUwNDMyXHUwNDQwP1wuP3xcdTA0M2NcdTA0MzBcdTA0NDBcdTA0NDJcdTA0MzA/fFx1MDQz''@;'; put 'put ''Y1x1MDQzMFx1MDQ0MFwuP3xcdTA0MzBcdTA0M2ZcdTA0NDBcdTA0MzVcdTA0M2JbXHUwNDRjXHUwNDRmXXxcdTA0MzBcdTA0M2ZcdTA0NDBcLj98XHUwNDNjXHUwNDMwW1x1MDQzOVx1MDQ0Zl18XHUwNDM4XHUwNDRlXHUwNDNkW1x1MDQ0Y1x1MDQ0Zl18XHUwNDM4XHUwNDRlXHUwNDNkXC4/''@;'; put 'put ''fFx1MDQzOFx1MDQ0ZVx1MDQzYltcdTA0NGNcdTA0NGZdfFx1MDQzOFx1MDQ0ZVx1MDQzYlwuP3xcdTA0MzBcdTA0MzJcdTA0MzNcdTA0NDNcdTA0NDFcdTA0NDJcdTA0MzA/fFx1MDQzMFx1MDQzMlx1MDQzM1wuP3xcdTA0NDFcdTA0MzVcdTA0M2RcdTA0NDJcdTA0NGZcdTA0MzFcdTA0NDBb''@;'; put 'put ''XHUwNDRjXHUwNDRmXXxcdTA0NDFcdTA0MzVcdTA0M2RcdTA0NDI/XC4/fFx1MDQzZVx1MDQzYVx1MDQ0Mlx1MDQ0Zlx1MDQzMVx1MDQ0MFtcdTA0NGNcdTA0NGZdfFx1MDQzZVx1MDQzYVx1MDQ0MlwuP3xcdTA0M2RcdTA0M2VcdTA0NGZcdTA0MzFcdTA0NDBbXHUwNDRjXHUwNDRmXXxcdTA0''@;'; put 'put ''M2RcdTA0M2VcdTA0NGZcdTA0MzE/XC4/fFx1MDQzNFx1MDQzNVx1MDQzYVx1MDQzMFx1MDQzMVx1MDQ0MFtcdTA0NGNcdTA0NGZdfFx1MDQzNFx1MDQzNVx1MDQzYVwuPykvaSxtb250aHNTdHJpY3RSZWdleDovXihcdTA0NGZcdTA0M2RcdTA0MzJcdTA0MzBcdTA0NDBbXHUwNDRmXHUwNDRj''@;'; put 'put ''XXxcdTA0NDRcdTA0MzVcdTA0MzJcdTA0NDBcdTA0MzBcdTA0M2JbXHUwNDRmXHUwNDRjXXxcdTA0M2NcdTA0MzBcdTA0NDBcdTA0NDJcdTA0MzA/fFx1MDQzMFx1MDQzZlx1MDQ0MFx1MDQzNVx1MDQzYltcdTA0NGZcdTA0NGNdfFx1MDQzY1x1MDQzMFtcdTA0NGZcdTA0MzldfFx1MDQzOFx1''@;'; put 'put ''MDQ0ZVx1MDQzZFtcdTA0NGZcdTA0NGNdfFx1MDQzOFx1MDQ0ZVx1MDQzYltcdTA0NGZcdTA0NGNdfFx1MDQzMFx1MDQzMlx1MDQzM1x1MDQ0M1x1MDQ0MVx1MDQ0Mlx1MDQzMD98XHUwNDQxXHUwNDM1XHUwNDNkXHUwNDQyXHUwNDRmXHUwNDMxXHUwNDQwW1x1MDQ0Zlx1MDQ0Y118XHUwNDNl''@;'; put 'put ''XHUwNDNhXHUwNDQyXHUwNDRmXHUwNDMxXHUwNDQwW1x1MDQ0Zlx1MDQ0Y118XHUwNDNkXHUwNDNlXHUwNDRmXHUwNDMxXHUwNDQwW1x1MDQ0Zlx1MDQ0Y118XHUwNDM0XHUwNDM1XHUwNDNhXHUwNDMwXHUwNDMxXHUwNDQwW1x1MDQ0Zlx1MDQ0Y10pL2ksbW9udGhzU2hvcnRTdHJpY3RSZWdl''@;'; put 'put ''eDovXihcdTA0NGZcdTA0M2RcdTA0MzJcLnxcdTA0NDRcdTA0MzVcdTA0MzJcdTA0NDA/XC58XHUwNDNjXHUwNDMwXHUwNDQwW1x1MDQ0Mi5dfFx1MDQzMFx1MDQzZlx1MDQ0MFwufFx1MDQzY1x1MDQzMFtcdTA0NGZcdTA0MzldfFx1MDQzOFx1MDQ0ZVx1MDQzZFtcdTA0NGNcdTA0NGYuXXxc''@;'; put 'put ''dTA0MzhcdTA0NGVcdTA0M2JbXHUwNDRjXHUwNDRmLl18XHUwNDMwXHUwNDMyXHUwNDMzXC58XHUwNDQxXHUwNDM1XHUwNDNkXHUwNDQyP1wufFx1MDQzZVx1MDQzYVx1MDQ0MlwufFx1MDQzZFx1MDQzZVx1MDQ0Zlx1MDQzMT9cLnxcdTA0MzRcdTA0MzVcdTA0M2FcLikvaSxsb25nRGF0ZUZv''@;'; put 'put ''cm1hdDp7TFQ6Ikg6bW0iLExUUzoiSDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQgTU1NTSBZWVlZIFx1MDQzMy4iLExMTDoiRCBNTU1NIFlZWVkgXHUwNDMzLiwgSDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgXHUwNDMzLiwgSDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUw''@;'; put 'put ''NDIxXHUwNDM1XHUwNDMzXHUwNDNlXHUwNDM0XHUwNDNkXHUwNDRmLCBcdTA0MzJdIExUIixuZXh0RGF5OiJbXHUwNDE3XHUwNDMwXHUwNDMyXHUwNDQyXHUwNDQwXHUwNDMwLCBcdTA0MzJdIExUIixsYXN0RGF5OiJbXHUwNDEyXHUwNDQ3XHUwNDM1XHUwNDQwXHUwNDMwLCBcdTA0MzJdIExU''@;'; put 'put ''IixuZXh0V2VlazpmdW5jdGlvbihQKXtpZihQLndlZWsoKT09PXRoaXMud2VlaygpKXJldHVybiAyPT09dGhpcy5kYXkoKT8iW1x1MDQxMlx1MDQzZV0gZGRkZCwgW1x1MDQzMl0gTFQiOiJbXHUwNDEyXSBkZGRkLCBbXHUwNDMyXSBMVCI7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMDpyZXR1''@;'; put 'put ''cm4iW1x1MDQxMiBcdTA0NDFcdTA0M2JcdTA0MzVcdTA0MzRcdTA0NDNcdTA0NGVcdTA0NDlcdTA0MzVcdTA0MzVdIGRkZGQsIFtcdTA0MzJdIExUIjtjYXNlIDE6Y2FzZSAyOmNhc2UgNDpyZXR1cm4iW1x1MDQxMiBcdTA0NDFcdTA0M2JcdTA0MzVcdTA0MzRcdTA0NDNcdTA0NGVcdTA0NDlc''@;'; put 'put ''dTA0MzhcdTA0MzldIGRkZGQsIFtcdTA0MzJdIExUIjtjYXNlIDM6Y2FzZSA1OmNhc2UgNjpyZXR1cm4iW1x1MDQxMiBcdTA0NDFcdTA0M2JcdTA0MzVcdTA0MzRcdTA0NDNcdTA0NGVcdTA0NDlcdTA0NDNcdTA0NGVdIGRkZGQsIFtcdTA0MzJdIExUIn19LGxhc3RXZWVrOmZ1bmN0aW9uKFAp''@;'; put 'put ''e2lmKFAud2VlaygpPT09dGhpcy53ZWVrKCkpcmV0dXJuIDI9PT10aGlzLmRheSgpPyJbXHUwNDEyXHUwNDNlXSBkZGRkLCBbXHUwNDMyXSBMVCI6IltcdTA0MTJdIGRkZGQsIFtcdTA0MzJdIExUIjtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAwOnJldHVybiJbXHUwNDEyIFx1MDQzZlx1MDQ0''@;'; put 'put ''MFx1MDQzZVx1MDQ0OFx1MDQzYlx1MDQzZVx1MDQzNV0gZGRkZCwgW1x1MDQzMl0gTFQiO2Nhc2UgMTpjYXNlIDI6Y2FzZSA0OnJldHVybiJbXHUwNDEyIFx1MDQzZlx1MDQ0MFx1MDQzZVx1MDQ0OFx1MDQzYlx1MDQ0Ylx1MDQzOV0gZGRkZCwgW1x1MDQzMl0gTFQiO2Nhc2UgMzpjYXNlIDU6''@;'; put 'put ''Y2FzZSA2OnJldHVybiJbXHUwNDEyIFx1MDQzZlx1MDQ0MFx1MDQzZVx1MDQ0OFx1MDQzYlx1MDQ0M1x1MDQ0ZV0gZGRkZCwgW1x1MDQzMl0gTFQifX0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUwNDQ3XHUwNDM1XHUwNDQwXHUwNDM1XHUwNDM3ICVzIixwYXN0OiIl''@;'; put 'put ''cyBcdTA0M2RcdTA0MzBcdTA0MzdcdTA0MzBcdTA0MzQiLHM6Ilx1MDQzZFx1MDQzNVx1MDQ0MVx1MDQzYVx1MDQzZVx1MDQzYlx1MDQ0Y1x1MDQzYVx1MDQzZSBcdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzQiLHNzOmcsbTpnLG1tOmcsaDoiXHUwNDQ3XHUwNDMwXHUwNDQx''@;'; put 'put ''IixoaDpnLGQ6Ilx1MDQzNFx1MDQzNVx1MDQzZFx1MDQ0YyIsZGQ6Zyx3OiJcdTA0M2RcdTA0MzVcdTA0MzRcdTA0MzVcdTA0M2JcdTA0NGYiLHd3OmcsTToiXHUwNDNjXHUwNDM1XHUwNDQxXHUwNDRmXHUwNDQ2IixNTTpnLHk6Ilx1MDQzM1x1MDQzZVx1MDQzNCIseXk6Z30sbWVyaWRpZW1Q''@;'; put 'put ''YXJzZTovXHUwNDNkXHUwNDNlXHUwNDQ3XHUwNDM4fFx1MDQ0M1x1MDQ0Mlx1MDQ0MFx1MDQzMHxcdTA0MzRcdTA0M2RcdTA0NGZ8XHUwNDMyXHUwNDM1XHUwNDQ3XHUwNDM1XHUwNDQwXHUwNDMwL2ksaXNQTTpmdW5jdGlvbihQKXtyZXR1cm4vXihcdTA0MzRcdTA0M2RcdTA0NGZ8XHUwNDMy''@;'; put 'put ''XHUwNDM1XHUwNDQ3XHUwNDM1XHUwNDQwXHUwNDMwKSQvLnRlc3QoUCl9LG1lcmlkaWVtOmZ1bmN0aW9uKFAsRixPKXtyZXR1cm4gUDw0PyJcdTA0M2RcdTA0M2VcdTA0NDdcdTA0MzgiOlA8MTI/Ilx1MDQ0M1x1MDQ0Mlx1MDQ0MFx1MDQzMCI6UDwxNz8iXHUwNDM0XHUwNDNkXHUwNDRmIjoi''@;'; put 'put ''XHUwNDMyXHUwNDM1XHUwNDQ3XHUwNDM1XHUwNDQwXHUwNDMwIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfS0oXHUwNDM5fFx1MDQzM1x1MDQzZXxcdTA0NGYpLyxvcmRpbmFsOmZ1bmN0aW9uKFAsRil7c3dpdGNoKEYpe2Nhc2UiTSI6Y2FzZSJkIjpjYXNlIkRERCI6cmV0dXJu''@;'; put 'put ''IFArIi1cdTA0MzkiO2Nhc2UiRCI6cmV0dXJuIFArIi1cdTA0MzNcdTA0M2UiO2Nhc2UidyI6Y2FzZSJXIjpyZXR1cm4gUCsiLVx1MDQ0ZiI7ZGVmYXVsdDpyZXR1cm4gUH19LHdlZWs6e2RvdzoxLGRveTo0fX0pfSh5KDk3NTg2KSl9LDcyNjA4OmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9u''@;'; put 'put ''KEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz1bIlx1MDYyY1x1MDY0Nlx1MDY0OFx1MDYzMVx1MDY0YSIsIlx1MDY0MVx1MDY0YVx1MDYyOFx1MDYzMVx1MDY0OFx1MDYzMVx1MDY0YSIsIlx1MDY0NVx1MDYyN1x1MDYzMVx1MDY4NiIsIlx1MDYyN1x1MDY3ZVx1MDYzMVx1MDY0YVx1MDY0NCIsIlx1''@;'; put 'put ''MDY0NVx1MDYyNlx1MDY0YSIsIlx1MDYyY1x1MDY0OFx1MDY0NiIsIlx1MDYyY1x1MDY0OFx1MDY0NFx1MDYyN1x1MDYyMVx1MDY1MCIsIlx1MDYyMlx1MDZhZlx1MDYzM1x1MDY3ZCIsIlx1MDYzM1x1MDY0YVx1MDY3ZVx1MDY3ZFx1MDY0NVx1MDYyOFx1MDYzMSIsIlx1MDYyMlx1MDZhYVx1''@;'; put 'put ''MDY3ZFx1MDY0OFx1MDYyOFx1MDYzMSIsIlx1MDY0Nlx1MDY0OFx1MDY0NVx1MDYyOFx1MDYzMSIsIlx1MDY4YVx1MDYzM1x1MDY0NVx1MDYyOFx1MDYzMSJdLGc9WyJcdTA2MjJcdTA2ODZcdTA2MzEiLCJcdTA2MzNcdTA2NDhcdTA2NDVcdTA2MzEiLCJcdTA2MjdcdTA2YjFcdTA2MjdcdTA2''@;'; put 'put ''MzFcdTA2NDgiLCJcdTA2MjdcdTA2MzFcdTA2MjhcdTA2MzkiLCJcdTA2MmVcdTA2NDVcdTA2NGFcdTA2MzMiLCJcdTA2MmNcdTA2NDVcdTA2MzkiLCJcdTA2ODdcdTA2NDZcdTA2ODdcdTA2MzEiXTtJLmRlZmluZUxvY2FsZSgic2QiLHttb250aHM6Xyxtb250aHNTaG9ydDpfLHdlZWtkYXlz''@;'; put 'put ''Omcsd2Vla2RheXNTaG9ydDpnLHdlZWtkYXlzTWluOmcsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkXHUwNjBjIEQgTU1NTSBZWVlZIEhIOm1t''@;'; put 'put ''In0sbWVyaWRpZW1QYXJzZTovXHUwNjM1XHUwNjI4XHUwNjJkfFx1MDYzNFx1MDYyN1x1MDY0NS8saXNQTTpmdW5jdGlvbih3KXtyZXR1cm4iXHUwNjM0XHUwNjI3XHUwNjQ1Ij09PXd9LG1lcmlkaWVtOmZ1bmN0aW9uKHcsUCxGKXtyZXR1cm4gdzwxMj8iXHUwNjM1XHUwNjI4XHUwNjJkIjoi''@;'; put 'put ''XHUwNjM0XHUwNjI3XHUwNjQ1In0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA2MjdcdTA2ODRdIExUIixuZXh0RGF5OiJbXHUwNjMzXHUwNjgwXHUwNjI3XHUwNmJiXHUwNjRhXSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x1MDYyN1x1MDZiM1x1MDY0YVx1MDY0NiBcdTA2NDdcdTA2NDFcdTA2MmFc''@;'; put 'put ''dTA2NGEgXHUwNjJhXHUwNjRhXSBMVCIsbGFzdERheToiW1x1MDZhYVx1MDYyN1x1MDY0NFx1MDY0N1x1MDY0N10gTFQiLGxhc3RXZWVrOiJbXHUwNmFmXHUwNjMyXHUwNjMxXHUwNjRhXHUwNjQ0IFx1MDY0N1x1MDY0MVx1MDYyYVx1MDY0YV0gZGRkZCBbXHUwNjJhXHUwNjRhXSBMVCIsc2Ft''@;'; put 'put ''ZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgXHUwNjdlXHUwNjQ4XHUwNjIxIixwYXN0OiIlcyBcdTA2MjdcdTA2YjMiLHM6Ilx1MDY4Nlx1MDY0Nlx1MDYyZiBcdTA2MzNcdTA2NGFcdTA2YWFcdTA2NDZcdTA2OGEiLHNzOiIlZCBcdTA2MzNcdTA2NGFcdTA2YWFcdTA2NDZc''@;'; put 'put ''dTA2OGEiLG06Ilx1MDY0N1x1MDZhYSBcdTA2NDVcdTA2NDZcdTA2N2QiLG1tOiIlZCBcdTA2NDVcdTA2NDZcdTA2N2QiLGg6Ilx1MDY0N1x1MDZhYSBcdTA2YWFcdTA2NDRcdTA2MjdcdTA2YWEiLGhoOiIlZCBcdTA2YWFcdTA2NDRcdTA2MjdcdTA2YWEiLGQ6Ilx1MDY0N1x1MDZhYSBcdTA2''@;'; put 'put ''OGZcdTA2NGFcdTA2NDZcdTA2NDdcdTA2NDYiLGRkOiIlZCBcdTA2OGZcdTA2NGFcdTA2NDZcdTA2NDdcdTA2NDYiLE06Ilx1MDY0N1x1MDZhYSBcdTA2NDVcdTA2NDdcdTA2NGFcdTA2NDZcdTA2NDgiLE1NOiIlZCBcdTA2NDVcdTA2NDdcdTA2NGFcdTA2NDZcdTA2MjciLHk6Ilx1MDY0N1x1''@;'; put 'put ''MDZhYSBcdTA2MzNcdTA2MjdcdTA2NDQiLHl5OiIlZCBcdTA2MzNcdTA2MjdcdTA2NDQifSxwcmVwYXJzZTpmdW5jdGlvbih3KXtyZXR1cm4gdy5yZXBsYWNlKC9cdTA2MGMvZywiLCIpfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKHcpe3JldHVybiB3LnJlcGxhY2UoLywvZywiXHUwNjBjIil9LHdl''@;'; put 'put ''ZWs6e2RvdzoxLGRveTo0fX0pfSh5KDk3NTg2KSl9LDEzOTExOmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgic2UiLHttb250aHM6Im9cdTAxMTFcdTAxMTFhamFnZW1ceGUxbm51X2d1b3Z2YW1ceGUxbm51X25qdWtcdTAxMGRhbVx4''@;'; put 'put ''ZTFubnVfY3VvXHUwMTRib21ceGUxbm51X21pZXNzZW1ceGUxbm51X2dlYXNzZW1ceGUxbm51X3N1b2lkbmVtXHhlMW5udV9ib3JnZW1ceGUxbm51X1x1MDEwZGFrXHUwMTBkYW1ceGUxbm51X2dvbGdnb3RtXHhlMW5udV9za1x4ZTFibWFtXHhlMW5udV9qdW92bGFtXHhlMW5udSIuc3BsaXQo''@;'; put 'put ''Il8iKSxtb250aHNTaG9ydDoib1x1MDExMVx1MDExMWpfZ3Vvdl9uanVrX2N1b19taWVzX2dlYXNfc3VvaV9ib3JnX1x1MDEwZGFrXHUwMTBkX2dvbGdfc2tceGUxYl9qdW92Ii5zcGxpdCgiXyIpLHdlZWtkYXlzOiJzb3RuYWJlYWl2aV92dW9zc1x4ZTFyZ2FfbWFcdTAxNGJcdTAxNGJlYlx4''@;'; put 'put ''ZTFyZ2FfZ2Fza2F2YWhra3VfZHVvcmFzdGF0X2JlYXJqYWRhdF9sXHhlMXZ2YXJkYXQiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoic290bl92dW9zX21hXHUwMTRiX2dhc2tfZHVvcl9iZWFyX2xceGUxdiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoic192X21fZ19kX2JfTCIuc3BsaXQo''@;'; put 'put ''Il8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiTU1NTSBELiBbYi5dIFlZWVkiLExMTDoiTU1NTSBELiBbYi5dIFlZWVkgW3RpLl0gSEg6bW0iLExMTEw6ImRkZGQsIE1NTU0gRC4gW2IuXSBZWVlZIFt0aS5dIEhIOm1tIn0s''@;'; put 'put ''Y2FsZW5kYXI6e3NhbWVEYXk6IltvdG5lIHRpXSBMVCIsbmV4dERheToiW2lodHRpbiB0aV0gTFQiLG5leHRXZWVrOiJkZGRkIFt0aV0gTFQiLGxhc3REYXk6Iltpa3RlIHRpXSBMVCIsbGFzdFdlZWs6IltvdmRkaXRdIGRkZGQgW3RpXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6''@;'; put 'put ''e2Z1dHVyZToiJXMgZ2VhXHUwMTdlZXMiLHBhc3Q6Im1hXHUwMTRiaXQgJXMiLHM6Im1vYWRkZSBzZWt1bmRkYXQiLHNzOiIlZCBzZWt1bmRkYXQiLG06Im9rdGEgbWludWh0YSIsbW06IiVkIG1pbnVodGF0IixoOiJva3RhIGRpaW1tdSIsaGg6IiVkIGRpaW1tdXQiLGQ6Im9rdGEgYmVhaXZp''@;'; put 'put ''IixkZDoiJWQgYmVhaXZ2aXQiLE06Im9rdGEgbVx4ZTFubnUiLE1NOiIlZCBtXHhlMW51dCIseToib2t0YSBqYWhraSIseXk6IiVkIGphZ2l0In0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo0fX0pfSh5KDk3NTg2KSl9''@;'; put 'put ''LDI1MTQ3OmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgic2kiLHttb250aHM6Ilx1MGRhMlx1MGRiMVx1MGRjMFx1MGRjZlx1MGRiYlx1MGRkMl9cdTBkYjRcdTBkZDlcdTBkYjZcdTBkYmJcdTBkYzBcdTBkY2ZcdTBkYmJcdTBkZDJf''@;'; put 'put ''XHUwZGI4XHUwZGNmXHUwZGJiXHUwZGNhXHUwZGFkXHUwZGQ0X1x1MGQ4NVx1MGRiNFx1MGRjYVx1MjAwZFx1MGRiYlx1MGRkYVx1MGRiZFx1MGRjYV9cdTBkYjhcdTBkZDBcdTBkYmFcdTBkZDJfXHUwZGEyXHUwZGQ2XHUwZGIxXHUwZGQyX1x1MGRhMlx1MGRkNlx1MGRiZFx1MGRkMl9cdTBk''@;'; put 'put ''ODVcdTBkOWNcdTBkZGRcdTBkYzNcdTBkY2FcdTBkYWRcdTBkZDRfXHUwZGMzXHUwZGQwXHUwZGI0XHUwZGNhXHUwZGFkXHUwZGQwXHUwZGI4XHUwZGNhXHUwZGI2XHUwZGJiXHUwZGNhX1x1MGQ5NFx1MGQ5YVx1MGRjYVx1MGRhZFx1MGRkZFx1MGRiNlx1MGRiYlx1MGRjYV9cdTBkYjFcdTBk''@;'; put 'put ''ZGNcdTBkYzBcdTBkZDBcdTBkYjhcdTBkY2FcdTBkYjZcdTBkYmJcdTBkY2FfXHUwZGFmXHUwZGQ5XHUwZGMzXHUwZGQwXHUwZGI4XHUwZGNhXHUwZGI2XHUwZGJiXHUwZGNhIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTBkYTJcdTBkYjFfXHUwZGI0XHUwZGQ5XHUwZGI2X1x1MGRiOFx1''@;'; put 'put ''MGRjZlx1MGRiYlx1MGRjYV9cdTBkODVcdTBkYjRcdTBkY2FfXHUwZGI4XHUwZGQwXHUwZGJhXHUwZGQyX1x1MGRhMlx1MGRkNlx1MGRiMVx1MGRkMl9cdTBkYTJcdTBkZDZcdTBkYmRcdTBkZDJfXHUwZDg1XHUwZDljXHUwZGRkX1x1MGRjM1x1MGRkMFx1MGRiNFx1MGRjYV9cdTBkOTRcdTBk''@;'; put 'put ''OWFcdTBkY2FfXHUwZGIxXHUwZGRjXHUwZGMwXHUwZGQwX1x1MGRhZlx1MGRkOVx1MGRjM1x1MGRkMCIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUwZDg5XHUwZGJiXHUwZGQyXHUwZGFmXHUwZGNmX1x1MGRjM1x1MGRiM1x1MGRkNFx1MGRhZlx1MGRjZl9cdTBkODVcdTBkOWZcdTBkYzRcdTBk''@;'; put 'put ''YmJcdTBkZDRcdTBkYzBcdTBkY2ZcdTBkYWZcdTBkY2ZfXHUwZGI2XHUwZGFmXHUwZGNmXHUwZGFmXHUwZGNmX1x1MGRiNlx1MGRjYVx1MjAwZFx1MGRiYlx1MGRjNFx1MGRjM1x1MGRjYVx1MGRiNFx1MGRhZFx1MGRkMlx1MGRiMVx1MGRjYVx1MGRhZlx1MGRjZl9cdTBkYzNcdTBkZDJcdTBk''@;'; put 'put ''OWFcdTBkZDRcdTBkYmJcdTBkY2ZcdTBkYWZcdTBkY2ZfXHUwZGMzXHUwZGQ5XHUwZGIxXHUwZGMzXHUwZGQ0XHUwZGJiXHUwZGNmXHUwZGFmXHUwZGNmIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MGQ4OVx1MGRiYlx1MGRkMl9cdTBkYzNcdTBkYjNcdTBkZDRfXHUwZDg1XHUwZDlm''@;'; put 'put ''X1x1MGRiNlx1MGRhZlx1MGRjZl9cdTBkYjZcdTBkY2FcdTIwMGRcdTBkYmJcdTBkYzRfXHUwZGMzXHUwZGQyXHUwZDlhXHUwZGQ0X1x1MGRjM1x1MGRkOVx1MGRiMSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwZDg5X1x1MGRjM19cdTBkODVfXHUwZGI2X1x1MGRiNlx1MGRjYVx1MjAw''@;'; put 'put ''ZFx1MGRiYl9cdTBkYzNcdTBkZDJfXHUwZGMzXHUwZGQ5Ii5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6ImEgaDptbSIsTFRTOiJhIGg6bW06c3MiLEw6IllZWVkvTU0vREQiLExMOiJZWVlZIE1NTU0gRCIsTExMOiJZWVlZIE1NTU0gRCwgYSBo''@;'; put 'put ''Om1tIixMTExMOiJZWVlZIE1NTU0gRCBbXHUwZGMwXHUwZGQwXHUwZGIxXHUwZGQyXSBkZGRkLCBhIGg6bW06c3MifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MGQ4NVx1MGRhZl0gTFRbXHUwZGE3XSIsbmV4dERheToiW1x1MGRjNFx1MGRkOVx1MGRhN10gTFRbXHUwZGE3XSIsbmV4dFdlZWs6''@;'; put 'put ''ImRkZGQgTFRbXHUwZGE3XSIsbGFzdERheToiW1x1MGQ4YVx1MGRiYVx1MGRkYV0gTFRbXHUwZGE3XSIsbGFzdFdlZWs6IltcdTBkYjRcdTBkYzNcdTBkZDRcdTBkOWNcdTBkZDJcdTBkYmFdIGRkZGQgTFRbXHUwZGE3XSIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXNc''@;'; put 'put ''dTBkOWFcdTBkZDJcdTBkYjFcdTBkY2EiLHBhc3Q6IiVzXHUwZDlhXHUwZGE3IFx1MGRiNFx1MGRkOVx1MGRiYiIsczoiXHUwZGFkXHUwZGFkXHUwZGNhXHUwZGI0XHUwZGJiIFx1MGQ5YVx1MGRkMlx1MGRjNFx1MGRkMlx1MGRiNFx1MGRiYSIsc3M6Ilx1MGRhZFx1MGRhZFx1MGRjYVx1MGRi''@;'; put 'put ''NFx1MGRiYiAlZCIsbToiXHUwZGI4XHUwZGQyXHUwZGIxXHUwZGQyXHUwZGFkXHUwZGNhXHUwZGFkXHUwZGQ0XHUwZGMwIixtbToiXHUwZGI4XHUwZGQyXHUwZGIxXHUwZGQyXHUwZGFkXHUwZGNhXHUwZGFkXHUwZGQ0ICVkIixoOiJcdTBkYjRcdTBkZDBcdTBkYmEiLGhoOiJcdTBkYjRcdTBk''@;'; put 'put ''ZDBcdTBkYmEgJWQiLGQ6Ilx1MGRhZlx1MGRkMlx1MGRiMVx1MGRiYSIsZGQ6Ilx1MGRhZlx1MGRkMlx1MGRiMSAlZCIsTToiXHUwZGI4XHUwZGNmXHUwZGMzXHUwZGJhIixNTToiXHUwZGI4XHUwZGNmXHUwZGMzICVkIix5OiJcdTBkYzBcdTBkYzNcdTBkYmIiLHl5OiJcdTBkYzBcdTBkYzNc''@;'; put 'put ''dTBkYmIgJWQifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9IFx1MGRjMFx1MGRkMFx1MGRiMVx1MGRkMi8sb3JkaW5hbDpmdW5jdGlvbihnKXtyZXR1cm4gZysiIFx1MGRjMFx1MGRkMFx1MGRiMVx1MGRkMiJ9LG1lcmlkaWVtUGFyc2U6L1x1MGRiNFx1MGRkOVx1MGRiYiBcdTBk''@;'; put 'put ''YzBcdTBkYmJcdTBkZDR8XHUwZGI0XHUwZGMzXHUwZGNhIFx1MGRjMFx1MGRiYlx1MGRkNHxcdTBkYjRcdTBkZDkuXHUwZGMwfFx1MGRiNC5cdTBkYzAuLyxpc1BNOmZ1bmN0aW9uKGcpe3JldHVybiJcdTBkYjQuXHUwZGMwLiI9PT1nfHwiXHUwZGI0XHUwZGMzXHUwZGNhIFx1MGRjMFx1MGRi''@;'; put 'put ''Ylx1MGRkNCI9PT1nfSxtZXJpZGllbTpmdW5jdGlvbihnLEIsdyl7cmV0dXJuIGc+MTE/dz8iXHUwZGI0Llx1MGRjMC4iOiJcdTBkYjRcdTBkYzNcdTBkY2EgXHUwZGMwXHUwZGJiXHUwZGQ0Ijp3PyJcdTBkYjRcdTBkZDkuXHUwZGMwLiI6Ilx1MGRiNFx1MGRkOVx1MGRiYiBcdTBkYzBcdTBk''@;'; put 'put ''YmJcdTBkZDQifX0pfSh5KDk3NTg2KSl9LDIzNzQxOmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz0iamFudVx4ZTFyX2ZlYnJ1XHhlMXJfbWFyZWNfYXByXHhlZGxfbVx4ZTFqX2pceGZhbl9qXHhmYWxfYXVndXN0X3NlcHRlbWJlcl9va3RceGYzYmVy''@;'; put 'put ''X25vdmVtYmVyX2RlY2VtYmVyIi5zcGxpdCgiXyIpLGc9Imphbl9mZWJfbWFyX2Fwcl9tXHhlMWpfalx4ZmFuX2pceGZhbF9hdWdfc2VwX29rdF9ub3ZfZGVjIi5zcGxpdCgiXyIpO2Z1bmN0aW9uIEIoRil7cmV0dXJuIEY+MSYmRjw1fWZ1bmN0aW9uIHcoRixPLHosTil7dmFyIEw9RisiICI7''@;'; put 'put ''c3dpdGNoKHope2Nhc2UicyI6cmV0dXJuIE98fE4/InBceGUxciBzZWtceGZhbmQiOiJwXHhlMXIgc2VrdW5kYW1pIjtjYXNlInNzIjpyZXR1cm4gT3x8Tj9MKyhCKEYpPyJzZWt1bmR5Ijoic2VrXHhmYW5kIik6TCsic2VrdW5kYW1pIjtjYXNlIm0iOnJldHVybiBPPyJtaW5ceGZhdGEiOk4/''@;'; put 'put ''Im1pblx4ZmF0dSI6Im1pblx4ZmF0b3UiO2Nhc2UibW0iOnJldHVybiBPfHxOP0wrKEIoRik/Im1pblx4ZmF0eSI6Im1pblx4ZmF0Iik6TCsibWluXHhmYXRhbWkiO2Nhc2UiaCI6cmV0dXJuIE8/ImhvZGluYSI6Tj8iaG9kaW51IjoiaG9kaW5vdSI7Y2FzZSJoaCI6cmV0dXJuIE98fE4/TCso''@;'; put 'put ''QihGKT8iaG9kaW55IjoiaG9kXHhlZG4iKTpMKyJob2RpbmFtaSI7Y2FzZSJkIjpyZXR1cm4gT3x8Tj8iZGVcdTAxNDgiOiJkXHUwMTQ4b20iO2Nhc2UiZGQiOnJldHVybiBPfHxOP0wrKEIoRik/ImRuaSI6ImRuXHhlZCIpOkwrImRcdTAxNDhhbWkiO2Nhc2UiTSI6cmV0dXJuIE98fE4/Im1l''@;'; put 'put ''c2lhYyI6Im1lc2lhY29tIjtjYXNlIk1NIjpyZXR1cm4gT3x8Tj9MKyhCKEYpPyJtZXNpYWNlIjoibWVzaWFjb3YiKTpMKyJtZXNpYWNtaSI7Y2FzZSJ5IjpyZXR1cm4gT3x8Tj8icm9rIjoicm9rb20iO2Nhc2UieXkiOnJldHVybiBPfHxOP0wrKEIoRik/InJva3kiOiJyb2tvdiIpOkwrInJv''@;'; put 'put ''a21pIn19SS5kZWZpbmVMb2NhbGUoInNrIix7bW9udGhzOl8sbW9udGhzU2hvcnQ6Zyx3ZWVrZGF5czoibmVkZVx1MDEzZWFfcG9uZGVsb2tfdXRvcm9rX3N0cmVkYV9cdTAxNjF0dnJ0b2tfcGlhdG9rX3NvYm90YSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJuZV9wb191dF9zdF9cdTAx''@;'; put 'put ''NjF0X3BpX3NvIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJuZV9wb191dF9zdF9cdTAxNjF0X3BpX3NvIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIsTFRTOiJIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRC4gTU1NTSBZWVlZIixMTEw6IkQuIE1NTU0gWVlZWSBI''@;'; put 'put ''Om1tIixMTExMOiJkZGRkIEQuIE1NTU0gWVlZWSBIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltkbmVzIG9dIExUIixuZXh0RGF5OiJbemFqdHJhIG9dIExUIixuZXh0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6cmV0dXJuIlt2IG5lZGVcdTAxM2V1IG9dIExU''@;'; put 'put ''IjtjYXNlIDE6Y2FzZSAyOnJldHVybiJbdl0gZGRkZCBbb10gTFQiO2Nhc2UgMzpyZXR1cm4iW3Ygc3RyZWR1IG9dIExUIjtjYXNlIDQ6cmV0dXJuIlt2byBcdTAxNjF0dnJ0b2sgb10gTFQiO2Nhc2UgNTpyZXR1cm4iW3YgcGlhdG9rIG9dIExUIjtjYXNlIDY6cmV0dXJuIlt2IHNvYm90dSBv''@;'; put 'put ''XSBMVCJ9fSxsYXN0RGF5OiJbdlx1MDEwZGVyYSBvXSBMVCIsbGFzdFdlZWs6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAwOnJldHVybiJbbWludWxceGZhIG5lZGVcdTAxM2V1IG9dIExUIjtjYXNlIDE6Y2FzZSAyOmNhc2UgNDpjYXNlIDU6cmV0dXJuIlttaW51bFx4ZmRd''@;'; put 'put ''IGRkZGQgW29dIExUIjtjYXNlIDM6cmV0dXJuIlttaW51bFx4ZmEgc3RyZWR1IG9dIExUIjtjYXNlIDY6cmV0dXJuIlttaW51bFx4ZmEgc29ib3R1IG9dIExUIn19LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6InphICVzIixwYXN0OiJwcmVkICVzIixzOncsc3M6dyxtOncs''@;'; put 'put ''bW06dyxoOncsaGg6dyxkOncsZGQ6dyxNOncsTU06dyx5OncseXk6d30sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo0fX0pfSh5KDk3NTg2KSl9LDkzZTM6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBz''@;'; put 'put ''dHJpY3QiO2Z1bmN0aW9uIF8oQix3LFAsRil7dmFyIE89QisiICI7c3dpdGNoKFApe2Nhc2UicyI6cmV0dXJuIHd8fEY/Im5la2FqIHNla3VuZCI6Im5la2FqIHNla3VuZGFtaSI7Y2FzZSJzcyI6cmV0dXJuIE8rKDE9PT1CP3c/InNla3VuZG8iOiJzZWt1bmRpIjoyPT09Qj93fHxGPyJzZWt1''@;'; put 'put ''bmRpIjoic2VrdW5kYWgiOkI8NT93fHxGPyJzZWt1bmRlIjoic2VrdW5kYWgiOiJzZWt1bmQiKTtjYXNlIm0iOnJldHVybiB3PyJlbmEgbWludXRhIjoiZW5vIG1pbnV0byI7Y2FzZSJtbSI6cmV0dXJuIE8rKDE9PT1CP3c/Im1pbnV0YSI6Im1pbnV0byI6Mj09PUI/d3x8Rj8ibWludXRpIjoi''@;'; put 'put ''bWludXRhbWEiOkI8NT93fHxGPyJtaW51dGUiOiJtaW51dGFtaSI6d3x8Rj8ibWludXQiOiJtaW51dGFtaSIpO2Nhc2UiaCI6cmV0dXJuIHc/ImVuYSB1cmEiOiJlbm8gdXJvIjtjYXNlImhoIjpyZXR1cm4gTysoMT09PUI/dz8idXJhIjoidXJvIjoyPT09Qj93fHxGPyJ1cmkiOiJ1cmFtYSI6''@;'; put 'put ''Qjw1P3d8fEY/InVyZSI6InVyYW1pIjp3fHxGPyJ1ciI6InVyYW1pIik7Y2FzZSJkIjpyZXR1cm4gd3x8Rj8iZW4gZGFuIjoiZW5pbSBkbmVtIjtjYXNlImRkIjpyZXR1cm4gTysoMT09PUI/d3x8Rj8iZGFuIjoiZG5lbSI6Mj09PUI/d3x8Rj8iZG5pIjoiZG5ldm9tYSI6d3x8Rj8iZG5pIjoi''@;'; put 'put ''ZG5ldmkiKTtjYXNlIk0iOnJldHVybiB3fHxGPyJlbiBtZXNlYyI6ImVuaW0gbWVzZWNlbSI7Y2FzZSJNTSI6cmV0dXJuIE8rKDE9PT1CP3d8fEY/Im1lc2VjIjoibWVzZWNlbSI6Mj09PUI/d3x8Rj8ibWVzZWNhIjoibWVzZWNlbWEiOkI8NT93fHxGPyJtZXNlY2UiOiJtZXNlY2kiOnd8fEY/''@;'; put 'put ''Im1lc2VjZXYiOiJtZXNlY2kiKTtjYXNlInkiOnJldHVybiB3fHxGPyJlbm8gbGV0byI6ImVuaW0gbGV0b20iO2Nhc2UieXkiOnJldHVybiBPKygxPT09Qj93fHxGPyJsZXRvIjoibGV0b20iOjI9PT1CP3d8fEY/ImxldGkiOiJsZXRvbWEiOkI8NT93fHxGPyJsZXRhIjoibGV0aSI6d3x8Rj8i''@;'; put 'put ''bGV0IjoibGV0aSIpfX1JLmRlZmluZUxvY2FsZSgic2wiLHttb250aHM6ImphbnVhcl9mZWJydWFyX21hcmVjX2FwcmlsX21hal9qdW5pal9qdWxpal9hdmd1c3Rfc2VwdGVtYmVyX29rdG9iZXJfbm92ZW1iZXJfZGVjZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Imphbi5fZmViLl9t''@;'; put 'put ''YXIuX2Fwci5fbWFqLl9qdW4uX2p1bC5fYXZnLl9zZXAuX29rdC5fbm92Ll9kZWMuIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6Im5lZGVsamFfcG9uZWRlbGpla190b3Jla19zcmVkYV9cdTAxMGRldHJ0ZWtfcGV0ZWtfc29ib3RhIi5zcGxpdCgiXyIpLHdlZWtk''@;'; put 'put ''YXlzU2hvcnQ6Im5lZC5fcG9uLl90b3IuX3NyZS5fXHUwMTBkZXQuX3BldC5fc29iLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoibmVfcG9fdG9fc3JfXHUwMTBkZV9wZV9zbyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJIOm1tIixMVFM6''@;'; put 'put ''Ikg6bW06c3MiLEw6IkRELiBNTS4gWVlZWSIsTEw6IkQuIE1NTU0gWVlZWSIsTExMOiJELiBNTU1NIFlZWVkgSDptbSIsTExMTDoiZGRkZCwgRC4gTU1NTSBZWVlZIEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW2RhbmVzIG9iXSBMVCIsbmV4dERheToiW2p1dHJpIG9iXSBMVCIsbmV4dFdl''@;'; put 'put ''ZWs6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAwOnJldHVybiJbdl0gW25lZGVsam9dIFtvYl0gTFQiO2Nhc2UgMzpyZXR1cm4iW3ZdIFtzcmVkb10gW29iXSBMVCI7Y2FzZSA2OnJldHVybiJbdl0gW3NvYm90b10gW29iXSBMVCI7Y2FzZSAxOmNhc2UgMjpjYXNlIDQ6Y2Fz''@;'; put 'put ''ZSA1OnJldHVybiJbdl0gZGRkZCBbb2JdIExUIn19LGxhc3REYXk6Ilt2XHUwMTBkZXJhaiBvYl0gTFQiLGxhc3RXZWVrOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMDpyZXR1cm4iW3ByZWpcdTAxNjFuam9dIFtuZWRlbGpvXSBbb2JdIExUIjtjYXNlIDM6cmV0dXJuIltw''@;'; put 'put ''cmVqXHUwMTYxbmpvXSBbc3JlZG9dIFtvYl0gTFQiO2Nhc2UgNjpyZXR1cm4iW3ByZWpcdTAxNjFuam9dIFtzb2JvdG9dIFtvYl0gTFQiO2Nhc2UgMTpjYXNlIDI6Y2FzZSA0OmNhc2UgNTpyZXR1cm4iW3ByZWpcdTAxNjFuamldIGRkZGQgW29iXSBMVCJ9fSxzYW1lRWxzZToiTCJ9LHJlbGF0''@;'; put 'put ''aXZlVGltZTp7ZnV0dXJlOiJcdTAxMGRleiAlcyIscGFzdDoicHJlZCAlcyIsczpfLHNzOl8sbTpfLG1tOl8saDpfLGhoOl8sZDpfLGRkOl8sTTpfLE1NOl8seTpfLHl5Ol99LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6''@;'; put 'put ''N319KX0oeSg5NzU4NikpfSw2MDQ1MTpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoInNxIix7bW9udGhzOiJKYW5hcl9TaGt1cnRfTWFyc19QcmlsbF9NYWpfUWVyc2hvcl9Lb3JyaWtfR3VzaHRfU2h0YXRvcl9UZXRvcl9OXHhlYm50''@;'; put 'put ''b3JfRGhqZXRvciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuX1Noa19NYXJfUHJpX01hal9RZXJfS29yX0d1c19TaHRfVGV0X05ceGVibl9EaGoiLnNwbGl0KCJfIiksd2Vla2RheXM6IkUgRGllbF9FIEhceGViblx4ZWJfRSBNYXJ0XHhlYl9FIE1ceGVicmt1clx4ZWJfRSBFbmp0ZV9F''@;'; put 'put ''IFByZW10ZV9FIFNodHVuXHhlYiIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJEaWVfSFx4ZWJuX01hcl9NXHhlYnJfRW5qX1ByZV9TaHQiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IkRfSF9NYV9NXHhlYl9FX1BfU2giLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLG1lcmlk''@;'; put 'put ''aWVtUGFyc2U6L1BEfE1ELyxpc1BNOmZ1bmN0aW9uKGcpe3JldHVybiJNIj09PWcuY2hhckF0KDApfSxtZXJpZGllbTpmdW5jdGlvbihnLEIsdyl7cmV0dXJuIGc8MTI/IlBEIjoiTUQifSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixM''@;'; put 'put ''TDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltTb3Qgblx4ZWJdIExUIixuZXh0RGF5OiJbTmVzXHhlYnIgblx4ZWJdIExUIixuZXh0V2VlazoiZGRkZCBbblx4ZWJdIExUIixs''@;'; put 'put ''YXN0RGF5OiJbRGplIG5ceGViXSBMVCIsbGFzdFdlZWs6ImRkZGQgW2Uga2FsdWFyIG5ceGViXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiblx4ZWIgJXMiLHBhc3Q6IiVzIG1ceGViIHBhclx4ZWIiLHM6ImRpc2Egc2Vrb25kYSIsc3M6IiVkIHNla29uZGEiLG06''@;'; put 'put ''Im5qXHhlYiBtaW51dFx4ZWIiLG1tOiIlZCBtaW51dGEiLGg6Im5qXHhlYiBvclx4ZWIiLGhoOiIlZCBvclx4ZWIiLGQ6Im5qXHhlYiBkaXRceGViIixkZDoiJWQgZGl0XHhlYiIsTToibmpceGViIG11YWoiLE1NOiIlZCBtdWFqIix5OiJualx4ZWIgdml0Iix5eToiJWQgdml0ZSJ9LGRheU9m''@;'; put 'put ''TW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oeSg5NzU4NikpfSw0MDkwNTpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7dmFyIF89e3dvcmRzOntzczpbIlx1MDQ0MVx1MDQzNVx1MDQzYVx1''@;'; put 'put ''MDQ0M1x1MDQzZFx1MDQzNFx1MDQzMCIsIlx1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNFx1MDQzNSIsIlx1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNFx1MDQzOCJdLG06WyJcdTA0NThcdTA0MzVcdTA0MzRcdTA0MzBcdTA0M2QgXHUwNDNjXHUwNDM4XHUw''@;'; put 'put ''NDNkXHUwNDQzXHUwNDQyIiwiXHUwNDU4XHUwNDM1XHUwNDM0XHUwNDNkXHUwNDNlXHUwNDMzIFx1MDQzY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQ0Mlx1MDQzMCJdLG1tOlsiXHUwNDNjXHUwNDM4XHUwNDNkXHUwNDQzXHUwNDQyIiwiXHUwNDNjXHUwNDM4XHUwNDNkXHUwNDQzXHUwNDQyXHUw''@;'; put 'put ''NDMwIiwiXHUwNDNjXHUwNDM4XHUwNDNkXHUwNDQzXHUwNDQyXHUwNDMwIl0saDpbIlx1MDQ1OFx1MDQzNVx1MDQzNFx1MDQzMFx1MDQzZCBcdTA0NDFcdTA0MzBcdTA0NDIiLCJcdTA0NThcdTA0MzVcdTA0MzRcdTA0M2RcdTA0M2VcdTA0MzMgXHUwNDQxXHUwNDMwXHUwNDQyXHUwNDMwIl0s''@;'; put 'put ''aGg6WyJcdTA0NDFcdTA0MzBcdTA0NDIiLCJcdTA0NDFcdTA0MzBcdTA0NDJcdTA0MzAiLCJcdTA0NDFcdTA0MzBcdTA0NDJcdTA0MzgiXSxkOlsiXHUwNDU4XHUwNDM1XHUwNDM0XHUwNDMwXHUwNDNkIFx1MDQzNFx1MDQzMFx1MDQzZCIsIlx1MDQ1OFx1MDQzNVx1MDQzNFx1MDQzZFx1MDQz''@;'; put 'put ''ZVx1MDQzMyBcdTA0MzRcdTA0MzBcdTA0M2RcdTA0MzAiXSxkZDpbIlx1MDQzNFx1MDQzMFx1MDQzZCIsIlx1MDQzNFx1MDQzMFx1MDQzZFx1MDQzMCIsIlx1MDQzNFx1MDQzMFx1MDQzZFx1MDQzMCJdLE06WyJcdTA0NThcdTA0MzVcdTA0MzRcdTA0MzBcdTA0M2QgXHUwNDNjXHUwNDM1XHUw''@;'; put 'put ''NDQxXHUwNDM1XHUwNDQ2IiwiXHUwNDU4XHUwNDM1XHUwNDM0XHUwNDNkXHUwNDNlXHUwNDMzIFx1MDQzY1x1MDQzNVx1MDQ0MVx1MDQzNVx1MDQ0Nlx1MDQzMCJdLE1NOlsiXHUwNDNjXHUwNDM1XHUwNDQxXHUwNDM1XHUwNDQ2IiwiXHUwNDNjXHUwNDM1XHUwNDQxXHUwNDM1XHUwNDQ2XHUw''@;'; put 'put ''NDMwIiwiXHUwNDNjXHUwNDM1XHUwNDQxXHUwNDM1XHUwNDQ2XHUwNDM4Il0seTpbIlx1MDQ1OFx1MDQzNVx1MDQzNFx1MDQzZFx1MDQ0MyBcdTA0MzNcdTA0M2VcdTA0MzRcdTA0MzhcdTA0M2RcdTA0NDMiLCJcdTA0NThcdTA0MzVcdTA0MzRcdTA0M2RcdTA0MzUgXHUwNDMzXHUwNDNlXHUw''@;'; put 'put ''NDM0XHUwNDM4XHUwNDNkXHUwNDM1Il0seXk6WyJcdTA0MzNcdTA0M2VcdTA0MzRcdTA0MzhcdTA0M2RcdTA0NDMiLCJcdTA0MzNcdTA0M2VcdTA0MzRcdTA0MzhcdTA0M2RcdTA0MzUiLCJcdTA0MzNcdTA0M2VcdTA0MzRcdTA0MzhcdTA0M2RcdTA0MzAiXX0sY29ycmVjdEdyYW1tYXRpY2Fs''@;'; put 'put ''Q2FzZTpmdW5jdGlvbihCLHcpe3JldHVybiBCJTEwPj0xJiZCJTEwPD00JiYoQiUxMDA8MTB8fEIlMTAwPj0yMCk/QiUxMD09MT93WzBdOndbMV06d1syXX0sdHJhbnNsYXRlOmZ1bmN0aW9uKEIsdyxQLEYpe3ZhciB6LE89Xy53b3Jkc1tQXTtyZXR1cm4gMT09PVAubGVuZ3RoPyJ5Ij09PVAm''@;'; put 'put ''Jnc/Ilx1MDQ1OFx1MDQzNVx1MDQzNFx1MDQzZFx1MDQzMCBcdTA0MzNcdTA0M2VcdTA0MzRcdTA0MzhcdTA0M2RcdTA0MzAiOkZ8fHc/T1swXTpPWzFdOih6PV8uY29ycmVjdEdyYW1tYXRpY2FsQ2FzZShCLE8pLCJ5eSI9PT1QJiZ3JiYiXHUwNDMzXHUwNDNlXHUwNDM0XHUwNDM4XHUwNDNk''@;'; put 'put ''XHUwNDQzIj09PXo/QisiIFx1MDQzM1x1MDQzZVx1MDQzNFx1MDQzOFx1MDQzZFx1MDQzMCI6QisiICIreil9fTtJLmRlZmluZUxvY2FsZSgic3ItY3lybCIse21vbnRoczoiXHUwNDU4XHUwNDMwXHUwNDNkXHUwNDQzXHUwNDMwXHUwNDQwX1x1MDQ0NFx1MDQzNVx1MDQzMVx1MDQ0MFx1MDQ0''@;'; put 'put ''M1x1MDQzMFx1MDQ0MF9cdTA0M2NcdTA0MzBcdTA0NDBcdTA0NDJfXHUwNDMwXHUwNDNmXHUwNDQwXHUwNDM4XHUwNDNiX1x1MDQzY1x1MDQzMFx1MDQ1OF9cdTA0NThcdTA0NDNcdTA0M2RfXHUwNDU4XHUwNDQzXHUwNDNiX1x1MDQzMFx1MDQzMlx1MDQzM1x1MDQ0M1x1MDQ0MVx1MDQ0Ml9c''@;'; put 'put ''dTA0NDFcdTA0MzVcdTA0M2ZcdTA0NDJcdTA0MzVcdTA0M2NcdTA0MzFcdTA0MzBcdTA0NDBfXHUwNDNlXHUwNDNhXHUwNDQyXHUwNDNlXHUwNDMxXHUwNDMwXHUwNDQwX1x1MDQzZFx1MDQzZVx1MDQzMlx1MDQzNVx1MDQzY1x1MDQzMVx1MDQzMFx1MDQ0MF9cdTA0MzRcdTA0MzVcdTA0NDZc''@;'; put 'put ''dTA0MzVcdTA0M2NcdTA0MzFcdTA0MzBcdTA0NDAiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MDQ1OFx1MDQzMFx1MDQzZC5fXHUwNDQ0XHUwNDM1XHUwNDMxLl9cdTA0M2NcdTA0MzBcdTA0NDAuX1x1MDQzMFx1MDQzZlx1MDQ0MC5fXHUwNDNjXHUwNDMwXHUwNDU4X1x1MDQ1OFx1MDQ0''@;'; put 'put ''M1x1MDQzZF9cdTA0NThcdTA0NDNcdTA0M2JfXHUwNDMwXHUwNDMyXHUwNDMzLl9cdTA0NDFcdTA0MzVcdTA0M2YuX1x1MDQzZVx1MDQzYVx1MDQ0Mi5fXHUwNDNkXHUwNDNlXHUwNDMyLl9cdTA0MzRcdTA0MzVcdTA0NDYuIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2Rh''@;'; put 'put ''eXM6Ilx1MDQzZFx1MDQzNVx1MDQzNFx1MDQzNVx1MDQ1OVx1MDQzMF9cdTA0M2ZcdTA0M2VcdTA0M2RcdTA0MzVcdTA0MzRcdTA0MzVcdTA0NTlcdTA0MzBcdTA0M2FfXHUwNDQzXHUwNDQyXHUwNDNlXHUwNDQwXHUwNDMwXHUwNDNhX1x1MDQ0MVx1MDQ0MFx1MDQzNVx1MDQzNFx1MDQzMF9c''@;'; put 'put ''dTA0NDdcdTA0MzVcdTA0NDJcdTA0MzJcdTA0NDBcdTA0NDJcdTA0MzBcdTA0M2FfXHUwNDNmXHUwNDM1XHUwNDQyXHUwNDMwXHUwNDNhX1x1MDQ0MVx1MDQ0M1x1MDQzMVx1MDQzZVx1MDQ0Mlx1MDQzMCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA0M2RcdTA0MzVcdTA0MzQuX1x1''@;'; put 'put ''MDQzZlx1MDQzZVx1MDQzZC5fXHUwNDQzXHUwNDQyXHUwNDNlLl9cdTA0NDFcdTA0NDBcdTA0MzUuX1x1MDQ0N1x1MDQzNVx1MDQ0Mi5fXHUwNDNmXHUwNDM1XHUwNDQyLl9cdTA0NDFcdTA0NDNcdTA0MzEuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA0M2RcdTA0MzVfXHUwNDNmXHUw''@;'; put 'put ''NDNlX1x1MDQ0M1x1MDQ0Ml9cdTA0NDFcdTA0NDBfXHUwNDQ3XHUwNDM1X1x1MDQzZlx1MDQzNV9cdTA0NDFcdTA0NDMiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIsTFRTOiJIOm1tOnNzIixMOiJELiBNLiBZWVlZLiIsTEw6IkQu''@;'; put 'put ''IE1NTU0gWVlZWS4iLExMTDoiRC4gTU1NTSBZWVlZLiBIOm1tIixMTExMOiJkZGRkLCBELiBNTU1NIFlZWVkuIEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDQzNFx1MDQzMFx1MDQzZFx1MDQzMFx1MDQ0MSBcdTA0NDNdIExUIixuZXh0RGF5OiJbXHUwNDQxXHUwNDQzXHUwNDQyXHUw''@;'; put 'put ''NDQwXHUwNDMwIFx1MDQ0M10gTFQiLG5leHRXZWVrOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMDpyZXR1cm4iW1x1MDQ0M10gW1x1MDQzZFx1MDQzNVx1MDQzNFx1MDQzNVx1MDQ1OVx1MDQ0M10gW1x1MDQ0M10gTFQiO2Nhc2UgMzpyZXR1cm4iW1x1MDQ0M10gW1x1MDQ0''@;'; put 'put ''MVx1MDQ0MFx1MDQzNVx1MDQzNFx1MDQ0M10gW1x1MDQ0M10gTFQiO2Nhc2UgNjpyZXR1cm4iW1x1MDQ0M10gW1x1MDQ0MVx1MDQ0M1x1MDQzMVx1MDQzZVx1MDQ0Mlx1MDQ0M10gW1x1MDQ0M10gTFQiO2Nhc2UgMTpjYXNlIDI6Y2FzZSA0OmNhc2UgNTpyZXR1cm4iW1x1MDQ0M10gZGRkZCBb''@;'; put 'put ''XHUwNDQzXSBMVCJ9fSxsYXN0RGF5OiJbXHUwNDU4XHUwNDQzXHUwNDQ3XHUwNDM1IFx1MDQ0M10gTFQiLGxhc3RXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuWyJbXHUwNDNmXHUwNDQwXHUwNDNlXHUwNDQ4XHUwNDNiXHUwNDM1XSBbXHUwNDNkXHUwNDM1XHUwNDM0XHUwNDM1XHUwNDU5XHUwNDM1''@;'; put 'put ''XSBbXHUwNDQzXSBMVCIsIltcdTA0M2ZcdTA0NDBcdTA0M2VcdTA0NDhcdTA0M2JcdTA0M2VcdTA0MzNdIFtcdTA0M2ZcdTA0M2VcdTA0M2RcdTA0MzVcdTA0MzRcdTA0MzVcdTA0NTlcdTA0M2FcdTA0MzBdIFtcdTA0NDNdIExUIiwiW1x1MDQzZlx1MDQ0MFx1MDQzZVx1MDQ0OFx1MDQzYlx1''@;'; put 'put ''MDQzZVx1MDQzM10gW1x1MDQ0M1x1MDQ0Mlx1MDQzZVx1MDQ0MFx1MDQzYVx1MDQzMF0gW1x1MDQ0M10gTFQiLCJbXHUwNDNmXHUwNDQwXHUwNDNlXHUwNDQ4XHUwNDNiXHUwNDM1XSBbXHUwNDQxXHUwNDQwXHUwNDM1XHUwNDM0XHUwNDM1XSBbXHUwNDQzXSBMVCIsIltcdTA0M2ZcdTA0NDBc''@;'; put 'put ''dTA0M2VcdTA0NDhcdTA0M2JcdTA0M2VcdTA0MzNdIFtcdTA0NDdcdTA0MzVcdTA0NDJcdTA0MzJcdTA0NDBcdTA0NDJcdTA0M2FcdTA0MzBdIFtcdTA0NDNdIExUIiwiW1x1MDQzZlx1MDQ0MFx1MDQzZVx1MDQ0OFx1MDQzYlx1MDQzZVx1MDQzM10gW1x1MDQzZlx1MDQzNVx1MDQ0Mlx1MDQz''@;'; put 'put ''YVx1MDQzMF0gW1x1MDQ0M10gTFQiLCJbXHUwNDNmXHUwNDQwXHUwNDNlXHUwNDQ4XHUwNDNiXHUwNDM1XSBbXHUwNDQxXHUwNDQzXHUwNDMxXHUwNDNlXHUwNDQyXHUwNDM1XSBbXHUwNDQzXSBMVCJdW3RoaXMuZGF5KCldfSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJc''@;'; put 'put ''dTA0MzdcdTA0MzAgJXMiLHBhc3Q6Ilx1MDQzZlx1MDQ0MFx1MDQzNSAlcyIsczoiXHUwNDNkXHUwNDM1XHUwNDNhXHUwNDNlXHUwNDNiXHUwNDM4XHUwNDNhXHUwNDNlIFx1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNFx1MDQzOCIsc3M6Xy50cmFuc2xhdGUsbTpfLnRyYW5z''@;'; put 'put ''bGF0ZSxtbTpfLnRyYW5zbGF0ZSxoOl8udHJhbnNsYXRlLGhoOl8udHJhbnNsYXRlLGQ6Xy50cmFuc2xhdGUsZGQ6Xy50cmFuc2xhdGUsTTpfLnRyYW5zbGF0ZSxNTTpfLnRyYW5zbGF0ZSx5Ol8udHJhbnNsYXRlLHl5Ol8udHJhbnNsYXRlfSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsx''@;'; put 'put ''LDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95Ojd9fSl9KHkoOTc1ODYpKX0sNTUwNDY6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO3ZhciBfPXt3b3Jkczp7c3M6WyJzZWt1bmRhIiwic2VrdW5kZSIsInNla3VuZGkiXSxtOlsiamVkYW4gbWlu''@;'; put 'put ''dXQiLCJqZWRub2cgbWludXRhIl0sbW06WyJtaW51dCIsIm1pbnV0YSIsIm1pbnV0YSJdLGg6WyJqZWRhbiBzYXQiLCJqZWRub2cgc2F0YSJdLGhoOlsic2F0Iiwic2F0YSIsInNhdGkiXSxkOlsiamVkYW4gZGFuIiwiamVkbm9nIGRhbmEiXSxkZDpbImRhbiIsImRhbmEiLCJkYW5hIl0sTTpb''@;'; put 'put ''ImplZGFuIG1lc2VjIiwiamVkbm9nIG1lc2VjYSJdLE1NOlsibWVzZWMiLCJtZXNlY2EiLCJtZXNlY2kiXSx5OlsiamVkbnUgZ29kaW51IiwiamVkbmUgZ29kaW5lIl0seXk6WyJnb2RpbnUiLCJnb2RpbmUiLCJnb2RpbmEiXX0sY29ycmVjdEdyYW1tYXRpY2FsQ2FzZTpmdW5jdGlvbihCLHcp''@;'; put 'put ''e3JldHVybiBCJTEwPj0xJiZCJTEwPD00JiYoQiUxMDA8MTB8fEIlMTAwPj0yMCk/QiUxMD09MT93WzBdOndbMV06d1syXX0sdHJhbnNsYXRlOmZ1bmN0aW9uKEIsdyxQLEYpe3ZhciB6LE89Xy53b3Jkc1tQXTtyZXR1cm4gMT09PVAubGVuZ3RoPyJ5Ij09PVAmJnc/ImplZG5hIGdvZGluYSI6''@;'; put 'put ''Rnx8dz9PWzBdOk9bMV06KHo9Xy5jb3JyZWN0R3JhbW1hdGljYWxDYXNlKEIsTyksInl5Ij09PVAmJncmJiJnb2RpbnUiPT09ej9CKyIgZ29kaW5hIjpCKyIgIit6KX19O0kuZGVmaW5lTG9jYWxlKCJzciIse21vbnRoczoiamFudWFyX2ZlYnJ1YXJfbWFydF9hcHJpbF9tYWpfanVuX2p1bF9h''@;'; put 'put ''dmd1c3Rfc2VwdGVtYmFyX29rdG9iYXJfbm92ZW1iYXJfZGVjZW1iYXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Imphbi5fZmViLl9tYXIuX2Fwci5fbWFqX2p1bl9qdWxfYXZnLl9zZXAuX29rdC5fbm92Ll9kZWMuIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6''@;'; put 'put ''Im5lZGVsamFfcG9uZWRlbGpha191dG9yYWtfc3JlZGFfXHUwMTBkZXR2cnRha19wZXRha19zdWJvdGEiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoibmVkLl9wb24uX3V0by5fc3JlLl9cdTAxMGRldC5fcGV0Ll9zdWIuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJuZV9wb191dF9zcl9c''@;'; put 'put ''dTAxMGRlX3BlX3N1Ii5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0iLExUUzoiSDptbTpzcyIsTDoiRC4gTS4gWVlZWS4iLExMOiJELiBNTU1NIFlZWVkuIixMTEw6IkQuIE1NTU0gWVlZWS4gSDptbSIsTExMTDoiZGRkZCwgRC4gTU1N''@;'; put 'put ''TSBZWVlZLiBIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltkYW5hcyB1XSBMVCIsbmV4dERheToiW3N1dHJhIHVdIExUIixuZXh0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6cmV0dXJuIlt1XSBbbmVkZWxqdV0gW3VdIExUIjtjYXNlIDM6cmV0dXJuIlt1XSBb''@;'; put 'put ''c3JlZHVdIFt1XSBMVCI7Y2FzZSA2OnJldHVybiJbdV0gW3N1Ym90dV0gW3VdIExUIjtjYXNlIDE6Y2FzZSAyOmNhc2UgNDpjYXNlIDU6cmV0dXJuIlt1XSBkZGRkIFt1XSBMVCJ9fSxsYXN0RGF5OiJbanVcdTAxMGRlIHVdIExUIixsYXN0V2VlazpmdW5jdGlvbigpe3JldHVyblsiW3Byb1x1''@;'; put 'put ''MDE2MWxlXSBbbmVkZWxqZV0gW3VdIExUIiwiW3Byb1x1MDE2MWxvZ10gW3BvbmVkZWxqa2FdIFt1XSBMVCIsIltwcm9cdTAxNjFsb2ddIFt1dG9ya2FdIFt1XSBMVCIsIltwcm9cdTAxNjFsZV0gW3NyZWRlXSBbdV0gTFQiLCJbcHJvXHUwMTYxbG9nXSBbXHUwMTBkZXR2cnRrYV0gW3VdIExU''@;'; put 'put ''IiwiW3Byb1x1MDE2MWxvZ10gW3BldGthXSBbdV0gTFQiLCJbcHJvXHUwMTYxbGVdIFtzdWJvdGVdIFt1XSBMVCJdW3RoaXMuZGF5KCldfSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJ6YSAlcyIscGFzdDoicHJlICVzIixzOiJuZWtvbGlrbyBzZWt1bmRpIixzczpfLnRy''@;'; put 'put ''YW5zbGF0ZSxtOl8udHJhbnNsYXRlLG1tOl8udHJhbnNsYXRlLGg6Xy50cmFuc2xhdGUsaGg6Xy50cmFuc2xhdGUsZDpfLnRyYW5zbGF0ZSxkZDpfLnRyYW5zbGF0ZSxNOl8udHJhbnNsYXRlLE1NOl8udHJhbnNsYXRlLHk6Xy50cmFuc2xhdGUseXk6Xy50cmFuc2xhdGV9LGRheU9mTW9udGhP''@;'; put 'put ''cmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6N319KX0oeSg5NzU4NikpfSw4NTc2NTpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoInNzIix7bW9udGhzOiJCaGltYmlkdndhbmVfSW5k''@;'; put 'put ''bG92YW5hX0luZGxvdidsZW5raHVsdV9NYWJhc2FfSW5raHdla2h3ZXRpX0luaGxhYmFfS2hvbHdhbmVfSW5nY2lfSW55b25pX0ltcGhhbGFfTHdldGlfSW5nb25nb25pIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJCaGlfSW5hX0ludV9NYWJfSW5rX0luaF9LaG9fSWdjX0lueV9JbXBfTHdl''@;'; put 'put ''X0lnbyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiTGlzb250Zm9fVW1zb21idWx1a29fTGVzaWJpbGlfTGVzaXRzYXRmdV9MZXNpbmVfTGVzaWhsYW51X1VtZ2NpYmVsbyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJMaXNfVW1iX0xzYl9MZXNfTHNpX0xzaF9VbWciLnNwbGl0KCJfIiksd2Vl''@;'; put 'put ''a2RheXNNaW46IkxpX1VzX0xiX0x0X0xzX0xoX1VnIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6Img6bW0gQSIsTFRTOiJoOm1tOnNzIEEiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBoOm1tIEEi''@;'; put 'put ''LExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIGg6bW0gQSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbTmFtdWhsYSBuZ2FdIExUIixuZXh0RGF5OiJbS3VzYXNhIG5nYV0gTFQiLG5leHRXZWVrOiJkZGRkIFtuZ2FdIExUIixsYXN0RGF5OiJbSXRvbG8gbmdhXSBMVCIsbGFzdFdlZWs6ImRkZGQgW2xl''@;'; put 'put ''bGlwaGVsaWxlXSBbbmdhXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToibmdhICVzIixwYXN0OiJ3ZW50ZWthIG5nYSAlcyIsczoiZW1penV6d2FuYSBsb21jYW5lIixzczoiJWQgbXp1endhbmEiLG06InVtenV6dSIsbW06IiVkIGVtaXp1enUiLGg6ImxpaG9yYSIs''@;'; put 'put ''aGg6IiVkIGVtYWhvcmEiLGQ6ImxpbGFuZ2EiLGRkOiIlZCBlbWFsYW5nYSIsTToiaW55YW5nYSIsTU06IiVkIHRpbnlhbmdhIix5OiJ1bW55YWthIix5eToiJWQgaW1pbnlha2EifSxtZXJpZGllbVBhcnNlOi9la3VzZW5pfGVtaW5pfGVudHNhbWJhbWF8ZWJ1c3VrdS8sbWVyaWRpZW06ZnVu''@;'; put 'put ''Y3Rpb24oZyxCLHcpe3JldHVybiBnPDExPyJla3VzZW5pIjpnPDE1PyJlbWluaSI6ZzwxOT8iZW50c2FtYmFtYSI6ImVidXN1a3UifSxtZXJpZGllbUhvdXI6ZnVuY3Rpb24oZyxCKXtyZXR1cm4gMTI9PT1nJiYoZz0wKSwiZWt1c2VuaSI9PT1CP2c6ImVtaW5pIj09PUI/Zz49MTE/ZzpnKzEy''@;'; put 'put ''OiJlbnRzYW1iYW1hIj09PUJ8fCJlYnVzdWt1Ij09PUI/MD09PWc/MDpnKzEyOnZvaWQgMH0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfS8sb3JkaW5hbDoiJWQiLHdlZWs6e2RvdzoxLGRveTo0fX0pfSh5KDk3NTg2KSl9LDk5MjkwOmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9u''@;'; put 'put ''KEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgic3YiLHttb250aHM6ImphbnVhcmlfZmVicnVhcmlfbWFyc19hcHJpbF9tYWpfanVuaV9qdWxpX2F1Z3VzdGlfc2VwdGVtYmVyX29rdG9iZXJfbm92ZW1iZXJfZGVjZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Imphbl9mZWJf''@;'; put 'put ''bWFyX2Fwcl9tYWpfanVuX2p1bF9hdWdfc2VwX29rdF9ub3ZfZGVjIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJzXHhmNm5kYWdfbVx4ZTVuZGFnX3Rpc2RhZ19vbnNkYWdfdG9yc2RhZ19mcmVkYWdfbFx4ZjZyZGFnIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6InNceGY2bl9tXHhlNW5fdGlz''@;'; put 'put ''X29uc190b3JfZnJlX2xceGY2ciIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoic1x4ZjZfbVx4ZTVfdGlfb25fdG9fZnJfbFx4ZjYiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiWVlZWS1NTS1ERCIsTEw6IkQgTU1NTSBZWVlZIixMTEw6''@;'; put 'put ''IkQgTU1NTSBZWVlZIFtrbC5dIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIFtrbC5dIEhIOm1tIixsbGw6IkQgTU1NIFlZWVkgSEg6bW0iLGxsbGw6ImRkZCBEIE1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltJZGFnXSBMVCIsbmV4dERheToiW0ltb3Jnb25dIExU''@;'; put 'put ''IixsYXN0RGF5OiJbSWdceGU1cl0gTFQiLG5leHRXZWVrOiJbUFx4ZTVdIGRkZGQgTFQiLGxhc3RXZWVrOiJbSV0gZGRkZFtzXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToib20gJXMiLHBhc3Q6ImZceGY2ciAlcyBzZWRhbiIsczoiblx4ZTVncmEgc2VrdW5kZXIi''@;'; put 'put ''LHNzOiIlZCBzZWt1bmRlciIsbToiZW4gbWludXQiLG1tOiIlZCBtaW51dGVyIixoOiJlbiB0aW1tZSIsaGg6IiVkIHRpbW1hciIsZDoiZW4gZGFnIixkZDoiJWQgZGFnYXIiLE06ImVuIG1ceGU1bmFkIixNTToiJWQgbVx4ZTVuYWRlciIseToiZXR0IFx4ZTVyIix5eToiJWQgXHhlNXIifSxk''@;'; put 'put ''YXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KFw6ZXxcOmEpLyxvcmRpbmFsOmZ1bmN0aW9uKGcpe3ZhciBCPWclMTA7cmV0dXJuIGcrKDE9PX5+KGclMTAwLzEwKT8iOmUiOjE9PT1CfHwyPT09Qj8iOmEiOiI6ZSIpfSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oeSg5NzU4NikpfSw1MzQ0''@;'; put 'put ''OTpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoInN3Iix7bW9udGhzOiJKYW51YXJpX0ZlYnJ1YXJpX01hY2hpX0FwcmlsaV9NZWlfSnVuaV9KdWxhaV9BZ29zdGlfU2VwdGVtYmFfT2t0b2JhX05vdmVtYmFfRGVzZW1iYSIuc3BsaXQo''@;'; put 'put ''Il8iKSxtb250aHNTaG9ydDoiSmFuX0ZlYl9NYWNfQXByX01laV9KdW5fSnVsX0Fnb19TZXBfT2t0X05vdl9EZXMiLnNwbGl0KCJfIiksd2Vla2RheXM6Ikp1bWFwaWxpX0p1bWF0YXR1X0p1bWFubmVfSnVtYXRhbm9fQWxoYW1pc2lfSWp1bWFhX0p1bWFtb3NpIi5zcGxpdCgiXyIpLHdlZWtk''@;'; put 'put ''YXlzU2hvcnQ6IkpwbF9KdGF0X0pubmVfSnRhbl9BbGhfSWptX0ptb3MiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IkoyX0ozX0o0X0o1X0FsX0lqX0oxIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6ImhoOm1tIEEiLExUUzoiSEg6bW06c3Mi''@;'; put 'put ''LEw6IkRELk1NLllZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW2xlbyBzYWFdIExUIixuZXh0RGF5OiJba2VzaG8gc2FhXSBMVCIsbmV4dFdlZWs6Ilt3aWtpIGlq''@;'; put 'put ''YXlvXSBkZGRkIFtzYWF0XSBMVCIsbGFzdERheToiW2phbmFdIExUIixsYXN0V2VlazoiW3dpa2kgaWxpeW9waXRhXSBkZGRkIFtzYWF0XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgYmFhZGF5ZSIscGFzdDoidG9rZWEgJXMiLHM6ImhpdmkgcHVuZGUiLHNz''@;'; put 'put ''OiJzZWt1bmRlICVkIixtOiJkYWtpa2EgbW9qYSIsbW06ImRha2lrYSAlZCIsaDoic2FhIGxpbW9qYSIsaGg6Im1hc2FhICVkIixkOiJzaWt1IG1vamEiLGRkOiJzaWt1ICVkIixNOiJtd2V6aSBtbW9qYSIsTU06Im1pZXppICVkIix5OiJtd2FrYSBtbW9qYSIseXk6Im1pYWthICVkIn0sd2Vl''@;'; put 'put ''azp7ZG93OjEsZG95Ojd9fSl9KHkoOTc1ODYpKX0sNzI2ODg6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO3ZhciBfPXsxOiJcdTBiZTciLDI6Ilx1MGJlOCIsMzoiXHUwYmU5Iiw0OiJcdTBiZWEiLDU6Ilx1MGJlYiIsNjoiXHUwYmVjIiw3OiJcdTBiZWQiLDg6''@;'; put 'put ''Ilx1MGJlZSIsOToiXHUwYmVmIiwwOiJcdTBiZTYifSxnPXsiXHUwYmU3IjoiMSIsIlx1MGJlOCI6IjIiLCJcdTBiZTkiOiIzIiwiXHUwYmVhIjoiNCIsIlx1MGJlYiI6IjUiLCJcdTBiZWMiOiI2IiwiXHUwYmVkIjoiNyIsIlx1MGJlZSI6IjgiLCJcdTBiZWYiOiI5IiwiXHUwYmU2IjoiMCJ9''@;'; put 'put ''O0kuZGVmaW5lTG9jYWxlKCJ0YSIse21vbnRoczoiXHUwYjljXHUwYmE5XHUwYmI1XHUwYmIwXHUwYmJmX1x1MGJhYVx1MGJiZlx1MGJhYVx1MGJjZFx1MGJiMFx1MGJiNVx1MGJiMFx1MGJiZl9cdTBiYWVcdTBiYmVcdTBiYjBcdTBiY2RcdTBiOWFcdTBiY2RfXHUwYjhmXHUwYmFhXHUwYmNk''@;'; put 'put ''XHUwYmIwXHUwYmIyXHUwYmNkX1x1MGJhZVx1MGJjN19cdTBiOWNcdTBiYzJcdTBiYTlcdTBiY2RfXHUwYjljXHUwYmMyXHUwYmIyXHUwYmM4X1x1MGI4Nlx1MGI5NVx1MGJiOFx1MGJjZFx1MGI5Zlx1MGJjZF9cdTBiOWFcdTBiYzZcdTBiYWFcdTBiY2RcdTBiOWZcdTBiYzZcdTBiYWVcdTBi''@;'; put 'put ''Y2RcdTBiYWFcdTBiYjBcdTBiY2RfXHUwYjg1XHUwYjk1XHUwYmNkXHUwYjlmXHUwYmM3XHUwYmJlXHUwYmFhXHUwYmIwXHUwYmNkX1x1MGJhOFx1MGJiNVx1MGJhZVx1MGJjZFx1MGJhYVx1MGJiMFx1MGJjZF9cdTBiOWZcdTBiYmZcdTBiOWFcdTBiYWVcdTBiY2RcdTBiYWFcdTBiYjBcdTBi''@;'; put 'put ''Y2QiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MGI5Y1x1MGJhOVx1MGJiNVx1MGJiMFx1MGJiZl9cdTBiYWFcdTBiYmZcdTBiYWFcdTBiY2RcdTBiYjBcdTBiYjVcdTBiYjBcdTBiYmZfXHUwYmFlXHUwYmJlXHUwYmIwXHUwYmNkXHUwYjlhXHUwYmNkX1x1MGI4Zlx1MGJhYVx1MGJjZFx1''@;'; put 'put ''MGJiMFx1MGJiMlx1MGJjZF9cdTBiYWVcdTBiYzdfXHUwYjljXHUwYmMyXHUwYmE5XHUwYmNkX1x1MGI5Y1x1MGJjMlx1MGJiMlx1MGJjOF9cdTBiODZcdTBiOTVcdTBiYjhcdTBiY2RcdTBiOWZcdTBiY2RfXHUwYjlhXHUwYmM2XHUwYmFhXHUwYmNkXHUwYjlmXHUwYmM2XHUwYmFlXHUwYmNk''@;'; put 'put ''XHUwYmFhXHUwYmIwXHUwYmNkX1x1MGI4NVx1MGI5NVx1MGJjZFx1MGI5Zlx1MGJjN1x1MGJiZVx1MGJhYVx1MGJiMFx1MGJjZF9cdTBiYThcdTBiYjVcdTBiYWVcdTBiY2RcdTBiYWFcdTBiYjBcdTBiY2RfXHUwYjlmXHUwYmJmXHUwYjlhXHUwYmFlXHUwYmNkXHUwYmFhXHUwYmIwXHUwYmNk''@;'; put 'put ''Ii5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTBiOWVcdTBiYmVcdTBiYWZcdTBiYmZcdTBiYjFcdTBiY2RcdTBiYjFcdTBiYzFcdTBiOTVcdTBiY2RcdTBiOTVcdTBiYmZcdTBiYjRcdTBiYWVcdTBiYzhfXHUwYmE0XHUwYmJmXHUwYjk5XHUwYmNkXHUwYjk1XHUwYjlmXHUwYmNkXHUwYjk1XHUw''@;'; put 'put ''YmJmXHUwYmI0XHUwYmFlXHUwYmM4X1x1MGI5YVx1MGJjNlx1MGJiNVx1MGJjZFx1MGJiNVx1MGJiZVx1MGJhZlx1MGJjZFx1MGI5NVx1MGJiZlx1MGJiNFx1MGJhZVx1MGJjOF9cdTBiYWFcdTBiYzFcdTBiYTRcdTBiYTlcdTBiY2RcdTBiOTVcdTBiYmZcdTBiYjRcdTBiYWVcdTBiYzhfXHUw''@;'; put 'put ''YmI1XHUwYmJmXHUwYmFmXHUwYmJlXHUwYmI0XHUwYjk1XHUwYmNkXHUwYjk1XHUwYmJmXHUwYmI0XHUwYmFlXHUwYmM4X1x1MGJiNVx1MGJjNlx1MGJiM1x1MGJjZFx1MGJiM1x1MGJiZlx1MGI5NVx1MGJjZFx1MGI5NVx1MGJiZlx1MGJiNFx1MGJhZVx1MGJjOF9cdTBiOWFcdTBiYTlcdTBi''@;'; put 'put ''YmZcdTBiOTVcdTBiY2RcdTBiOTVcdTBiYmZcdTBiYjRcdTBiYWVcdTBiYzgiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwYjllXHUwYmJlXHUwYmFmXHUwYmJmXHUwYmIxXHUwYmMxX1x1MGJhNFx1MGJiZlx1MGI5OVx1MGJjZFx1MGI5NVx1MGJiM1x1MGJjZF9cdTBiOWFcdTBiYzZc''@;'; put 'put ''dTBiYjVcdTBiY2RcdTBiYjVcdTBiYmVcdTBiYWZcdTBiY2RfXHUwYmFhXHUwYmMxXHUwYmE0XHUwYmE5XHUwYmNkX1x1MGJiNVx1MGJiZlx1MGJhZlx1MGJiZVx1MGJiNFx1MGJhOVx1MGJjZF9cdTBiYjVcdTBiYzZcdTBiYjNcdTBiY2RcdTBiYjNcdTBiYmZfXHUwYjlhXHUwYmE5XHUwYmJm''@;'; put 'put ''Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTBiOWVcdTBiYmVfXHUwYmE0XHUwYmJmX1x1MGI5YVx1MGJjNl9cdTBiYWFcdTBiYzFfXHUwYmI1XHUwYmJmX1x1MGJiNVx1MGJjNl9cdTBiOWEiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIs''@;'; put 'put ''TDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZLCBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVksIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTBiODdcdTBiYTlcdTBiY2RcdTBiYjFcdTBiYzFdIExUIixuZXh0RGF5OiJbXHUwYmE4XHUw''@;'; put 'put ''YmJlXHUwYmIzXHUwYmM4XSBMVCIsbmV4dFdlZWs6ImRkZGQsIExUIixsYXN0RGF5OiJbXHUwYmE4XHUwYmM3XHUwYmIxXHUwYmNkXHUwYmIxXHUwYmMxXSBMVCIsbGFzdFdlZWs6IltcdTBiOTVcdTBiOWZcdTBiYThcdTBiY2RcdTBiYTQgXHUwYmI1XHUwYmJlXHUwYmIwXHUwYmFlXHUwYmNk''@;'; put 'put ''XSBkZGRkLCBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgXHUwYjg3XHUwYmIyXHUwYmNkIixwYXN0OiIlcyBcdTBiYWVcdTBiYzFcdTBiYTlcdTBiY2QiLHM6Ilx1MGI5Mlx1MGJiMFx1MGJjMSBcdTBiOWFcdTBiYmZcdTBiYjIgXHUwYmI1XHUwYmJmXHUwYmE4''@;'; put 'put ''XHUwYmJlXHUwYjlmXHUwYmJmXHUwYjk1XHUwYmIzXHUwYmNkIixzczoiJWQgXHUwYmI1XHUwYmJmXHUwYmE4XHUwYmJlXHUwYjlmXHUwYmJmXHUwYjk1XHUwYmIzXHUwYmNkIixtOiJcdTBiOTJcdTBiYjBcdTBiYzEgXHUwYmE4XHUwYmJmXHUwYmFlXHUwYmJmXHUwYjlmXHUwYmFlXHUwYmNk''@;'; put 'put ''IixtbToiJWQgXHUwYmE4XHUwYmJmXHUwYmFlXHUwYmJmXHUwYjlmXHUwYjk5XHUwYmNkXHUwYjk1XHUwYmIzXHUwYmNkIixoOiJcdTBiOTJcdTBiYjBcdTBiYzEgXHUwYmFlXHUwYmEzXHUwYmJmIFx1MGJhOFx1MGJjN1x1MGJiMFx1MGJhZVx1MGJjZCIsaGg6IiVkIFx1MGJhZVx1MGJhM1x1''@;'; put 'put ''MGJiZiBcdTBiYThcdTBiYzdcdTBiYjBcdTBiYWVcdTBiY2QiLGQ6Ilx1MGI5Mlx1MGJiMFx1MGJjMSBcdTBiYThcdTBiYmVcdTBiYjNcdTBiY2QiLGRkOiIlZCBcdTBiYThcdTBiYmVcdTBiOWZcdTBiY2RcdTBiOTVcdTBiYjNcdTBiY2QiLE06Ilx1MGI5Mlx1MGJiMFx1MGJjMSBcdTBiYWVc''@;'; put 'put ''dTBiYmVcdTBiYTRcdTBiYWVcdTBiY2QiLE1NOiIlZCBcdTBiYWVcdTBiYmVcdTBiYTRcdTBiOTlcdTBiY2RcdTBiOTVcdTBiYjNcdTBiY2QiLHk6Ilx1MGI5Mlx1MGJiMFx1MGJjMSBcdTBiYjVcdTBiYjBcdTBiYzFcdTBiOWZcdTBiYWVcdTBiY2QiLHl5OiIlZCBcdTBiODZcdTBiYTNcdTBi''@;'; put 'put ''Y2RcdTBiOWZcdTBiYzFcdTBiOTVcdTBiYjNcdTBiY2QifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XHUwYmI1XHUwYmE0XHUwYmMxLyxvcmRpbmFsOmZ1bmN0aW9uKHcpe3JldHVybiB3KyJcdTBiYjVcdTBiYTRcdTBiYzEifSxwcmVwYXJzZTpmdW5jdGlvbih3KXtyZXR1cm4g''@;'; put 'put ''dy5yZXBsYWNlKC9bXHUwYmU3XHUwYmU4XHUwYmU5XHUwYmVhXHUwYmViXHUwYmVjXHUwYmVkXHUwYmVlXHUwYmVmXHUwYmU2XS9nLGZ1bmN0aW9uKFApe3JldHVybiBnW1BdfSl9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24odyl7cmV0dXJuIHcucmVwbGFjZSgvXGQvZyxmdW5jdGlvbihQKXtyZXR1''@;'; put 'put ''cm4gX1tQXX0pfSxtZXJpZGllbVBhcnNlOi9cdTBiYWZcdTBiYmVcdTBiYWVcdTBiYWVcdTBiY2R8XHUwYmI1XHUwYmM4XHUwYjk1XHUwYmIxXHUwYmM4fFx1MGI5NVx1MGJiZVx1MGJiMlx1MGJjOHxcdTBiYThcdTBiYTNcdTBiY2RcdTBiYWFcdTBiOTVcdTBiYjJcdTBiY2R8XHUwYjhlXHUw''@;'; put 'put ''YmIxXHUwYmNkXHUwYmFhXHUwYmJlXHUwYjlmXHUwYmMxfFx1MGJhZVx1MGJiZVx1MGJiMlx1MGJjOC8sbWVyaWRpZW06ZnVuY3Rpb24odyxQLEYpe3JldHVybiB3PDI/IiBcdTBiYWZcdTBiYmVcdTBiYWVcdTBiYWVcdTBiY2QiOnc8Nj8iIFx1MGJiNVx1MGJjOFx1MGI5NVx1MGJiMVx1MGJj''@;'; put 'put ''OCI6dzwxMD8iIFx1MGI5NVx1MGJiZVx1MGJiMlx1MGJjOCI6dzwxND8iIFx1MGJhOFx1MGJhM1x1MGJjZFx1MGJhYVx1MGI5NVx1MGJiMlx1MGJjZCI6dzwxOD8iIFx1MGI4ZVx1MGJiMVx1MGJjZFx1MGJhYVx1MGJiZVx1MGI5Zlx1MGJjMSI6dzwyMj8iIFx1MGJhZVx1MGJiZVx1MGJiMlx1''@;'; put 'put ''MGJjOCI6IiBcdTBiYWZcdTBiYmVcdTBiYWVcdTBiYWVcdTBiY2QifSxtZXJpZGllbUhvdXI6ZnVuY3Rpb24odyxQKXtyZXR1cm4gMTI9PT13JiYodz0wKSwiXHUwYmFmXHUwYmJlXHUwYmFlXHUwYmFlXHUwYmNkIj09PVA/dzwyP3c6dysxMjoiXHUwYmI1XHUwYmM4XHUwYjk1XHUwYmIxXHUw''@;'; put 'put ''YmM4Ij09PVB8fCJcdTBiOTVcdTBiYmVcdTBiYjJcdTBiYzgiPT09UHx8Ilx1MGJhOFx1MGJhM1x1MGJjZFx1MGJhYVx1MGI5NVx1MGJiMlx1MGJjZCI9PT1QJiZ3Pj0xMD93OncrMTJ9LHdlZWs6e2RvdzowLGRveTo2fX0pfSh5KDk3NTg2KSl9LDMyMDYwOmZ1bmN0aW9uKHVlLFgseSl7IWZ1''@;'; put 'put ''bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgidGUiLHttb250aHM6Ilx1MGMxY1x1MGMyOFx1MGMzNVx1MGMzMFx1MGMzZl9cdTBjMmJcdTBjM2ZcdTBjMmNcdTBjNGRcdTBjMzBcdTBjMzVcdTBjMzBcdTBjM2ZfXHUwYzJlXHUwYzNlXHUwYzMwXHUwYzRkXHUwYzFhXHUw''@;'; put 'put ''YzNmX1x1MGMwZlx1MGMyYVx1MGM0ZFx1MGMzMFx1MGMzZlx1MGMzMlx1MGM0ZF9cdTBjMmVcdTBjNDdfXHUwYzFjXHUwYzQyXHUwYzI4XHUwYzRkX1x1MGMxY1x1MGM0MVx1MGMzMlx1MGM0OF9cdTBjMDZcdTBjMTdcdTBjMzhcdTBjNGRcdTBjMWZcdTBjNDFfXHUwYzM4XHUwYzQ2XHUwYzJh''@;'; put 'put ''XHUwYzRkXHUwYzFmXHUwYzQ2XHUwYzAyXHUwYzJjXHUwYzMwXHUwYzRkX1x1MGMwNVx1MGMxNVx1MGM0ZFx1MGMxZlx1MGM0Ylx1MGMyY1x1MGMzMFx1MGM0ZF9cdTBjMjhcdTBjMzVcdTBjMDJcdTBjMmNcdTBjMzBcdTBjNGRfXHUwYzIxXHUwYzNmXHUwYzM4XHUwYzQ2XHUwYzAyXHUwYzJj''@;'; put 'put ''XHUwYzMwXHUwYzRkIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTBjMWNcdTBjMjguX1x1MGMyYlx1MGMzZlx1MGMyY1x1MGM0ZFx1MGMzMC5fXHUwYzJlXHUwYzNlXHUwYzMwXHUwYzRkXHUwYzFhXHUwYzNmX1x1MGMwZlx1MGMyYVx1MGM0ZFx1MGMzMFx1MGMzZi5fXHUwYzJlXHUwYzQ3''@;'; put 'put ''X1x1MGMxY1x1MGM0Mlx1MGMyOFx1MGM0ZF9cdTBjMWNcdTBjNDFcdTBjMzJcdTBjNDhfXHUwYzA2XHUwYzE3Ll9cdTBjMzhcdTBjNDZcdTBjMmFcdTBjNGQuX1x1MGMwNVx1MGMxNVx1MGM0ZFx1MGMxZlx1MGM0Yi5fXHUwYzI4XHUwYzM1Ll9cdTBjMjFcdTBjM2ZcdTBjMzhcdTBjNDYuIi5z''@;'; put 'put ''cGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6Ilx1MGMwNlx1MGMyNlx1MGMzZlx1MGMzNVx1MGMzZVx1MGMzMFx1MGMwMl9cdTBjMzhcdTBjNGJcdTBjMmVcdTBjMzVcdTBjM2VcdTBjMzBcdTBjMDJfXHUwYzJlXHUwYzAyXHUwYzE3XHUwYzMzXHUwYzM1XHUwYzNlXHUw''@;'; put 'put ''YzMwXHUwYzAyX1x1MGMyY1x1MGM0MVx1MGMyN1x1MGMzNVx1MGMzZVx1MGMzMFx1MGMwMl9cdTBjMTdcdTBjNDFcdTBjMzBcdTBjNDFcdTBjMzVcdTBjM2VcdTBjMzBcdTBjMDJfXHUwYzM2XHUwYzQxXHUwYzE1XHUwYzRkXHUwYzMwXHUwYzM1XHUwYzNlXHUwYzMwXHUwYzAyX1x1MGMzNlx1''@;'; put 'put ''MGMyOFx1MGMzZlx1MGMzNVx1MGMzZVx1MGMzMFx1MGMwMiIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTBjMDZcdTBjMjZcdTBjM2ZfXHUwYzM4XHUwYzRiXHUwYzJlX1x1MGMyZVx1MGMwMlx1MGMxN1x1MGMzM19cdTBjMmNcdTBjNDFcdTBjMjdfXHUwYzE3XHUwYzQxXHUwYzMwXHUw''@;'; put 'put ''YzQxX1x1MGMzNlx1MGM0MVx1MGMxNVx1MGM0ZFx1MGMzMF9cdTBjMzZcdTBjMjhcdTBjM2YiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MGMwNl9cdTBjMzhcdTBjNGJfXHUwYzJlXHUwYzAyX1x1MGMyY1x1MGM0MV9cdTBjMTdcdTBjNDFfXHUwYzM2XHUwYzQxX1x1MGMzNiIuc3BsaXQo''@;'; put 'put ''Il8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkEgaDptbSIsTFRTOiJBIGg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSwgQSBoOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSwgQSBoOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTBj''@;'; put 'put ''MjhcdTBjNDdcdTBjMjFcdTBjNDFdIExUIixuZXh0RGF5OiJbXHUwYzMwXHUwYzQ3XHUwYzJhXHUwYzQxXSBMVCIsbmV4dFdlZWs6ImRkZGQsIExUIixsYXN0RGF5OiJbXHUwYzI4XHUwYzNmXHUwYzI4XHUwYzRkXHUwYzI4XSBMVCIsbGFzdFdlZWs6IltcdTBjMTdcdTBjMjRdIGRkZGQsIExU''@;'; put 'put ''IixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBcdTBjMzJcdTBjNGIiLHBhc3Q6IiVzIFx1MGMxNVx1MGM0ZFx1MGMzMFx1MGMzZlx1MGMyNFx1MGMwMiIsczoiXHUwYzE1XHUwYzRhXHUwYzI4XHUwYzRkXHUwYzI4XHUwYzNmIFx1MGMxNVx1MGM0ZFx1MGMzN1x1MGMy''@;'; put 'put ''M1x1MGMzZVx1MGMzMlx1MGM0MSIsc3M6IiVkIFx1MGMzOFx1MGM0Nlx1MGMxNVx1MGMyOFx1MGM0ZFx1MGMzMlx1MGM0MSIsbToiXHUwYzEyXHUwYzE1IFx1MGMyOFx1MGMzZlx1MGMyZVx1MGMzZlx1MGMzN1x1MGMwMiIsbW06IiVkIFx1MGMyOFx1MGMzZlx1MGMyZVx1MGMzZlx1MGMzN1x1''@;'; put 'put ''MGMzZVx1MGMzMlx1MGM0MSIsaDoiXHUwYzEyXHUwYzE1IFx1MGMxN1x1MGMwMlx1MGMxZiIsaGg6IiVkIFx1MGMxN1x1MGMwMlx1MGMxZlx1MGMzMlx1MGM0MSIsZDoiXHUwYzEyXHUwYzE1IFx1MGMzMFx1MGM0Ylx1MGMxY1x1MGM0MSIsZGQ6IiVkIFx1MGMzMFx1MGM0Ylx1MGMxY1x1MGM0''@;'; put 'put ''MVx1MGMzMlx1MGM0MSIsTToiXHUwYzEyXHUwYzE1IFx1MGMyOFx1MGM0Nlx1MGMzMiIsTU06IiVkIFx1MGMyOFx1MGM0Nlx1MGMzMlx1MGMzMlx1MGM0MSIseToiXHUwYzEyXHUwYzE1IFx1MGMzOFx1MGMwMlx1MGMzNVx1MGMyNFx1MGM0ZFx1MGMzOFx1MGMzMFx1MGMwMiIseXk6IiVkIFx1''@;'; put 'put ''MGMzOFx1MGMwMlx1MGMzNVx1MGMyNFx1MGM0ZFx1MGMzOFx1MGMzMFx1MGMzZVx1MGMzMlx1MGM0MSJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cdTBjMzUvLG9yZGluYWw6IiVkXHUwYzM1IixtZXJpZGllbVBhcnNlOi9cdTBjMzBcdTBjM2VcdTBjMjRcdTBjNGRcdTBjMzBc''@;'; put 'put ''dTBjM2Z8XHUwYzA5XHUwYzI2XHUwYzJmXHUwYzAyfFx1MGMyZVx1MGMyN1x1MGM0ZFx1MGMyZlx1MGMzZVx1MGMzOVx1MGM0ZFx1MGMyOFx1MGMwMnxcdTBjMzhcdTBjM2VcdTBjMmZcdTBjMDJcdTBjMjRcdTBjNGRcdTBjMzBcdTBjMDIvLG1lcmlkaWVtSG91cjpmdW5jdGlvbihnLEIpe3Jl''@;'; put 'put ''dHVybiAxMj09PWcmJihnPTApLCJcdTBjMzBcdTBjM2VcdTBjMjRcdTBjNGRcdTBjMzBcdTBjM2YiPT09Qj9nPDQ/ZzpnKzEyOiJcdTBjMDlcdTBjMjZcdTBjMmZcdTBjMDIiPT09Qj9nOiJcdTBjMmVcdTBjMjdcdTBjNGRcdTBjMmZcdTBjM2VcdTBjMzlcdTBjNGRcdTBjMjhcdTBjMDIiPT09''@;'; put 'put ''Qj9nPj0xMD9nOmcrMTI6Ilx1MGMzOFx1MGMzZVx1MGMyZlx1MGMwMlx1MGMyNFx1MGM0ZFx1MGMzMFx1MGMwMiI9PT1CP2crMTI6dm9pZCAwfSxtZXJpZGllbTpmdW5jdGlvbihnLEIsdyl7cmV0dXJuIGc8ND8iXHUwYzMwXHUwYzNlXHUwYzI0XHUwYzRkXHUwYzMwXHUwYzNmIjpnPDEwPyJc''@;'; put 'put ''dTBjMDlcdTBjMjZcdTBjMmZcdTBjMDIiOmc8MTc/Ilx1MGMyZVx1MGMyN1x1MGM0ZFx1MGMyZlx1MGMzZVx1MGMzOVx1MGM0ZFx1MGMyOFx1MGMwMiI6ZzwyMD8iXHUwYzM4XHUwYzNlXHUwYzJmXHUwYzAyXHUwYzI0XHUwYzRkXHUwYzMwXHUwYzAyIjoiXHUwYzMwXHUwYzNlXHUwYzI0XHUw''@;'; put 'put ''YzRkXHUwYzMwXHUwYzNmIn0sd2Vlazp7ZG93OjAsZG95OjZ9fSl9KHkoOTc1ODYpKX0sOTMyOTA6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJ0ZXQiLHttb250aHM6IkphbmVpcnVfRmV2ZXJlaXJ1X01hcnN1X0FicmlsX01haXVf''@;'; put 'put ''SnVceGYxdV9KdWxsdV9BZ3VzdHVfU2V0ZW1icnVfT3V0dWJydV9Ob3ZlbWJydV9EZXplbWJydSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuX0Zldl9NYXJfQWJyX01haV9KdW5fSnVsX0Fnb19TZXRfT3V0X05vdl9EZXoiLnNwbGl0KCJfIiksd2Vla2RheXM6IkRvbWluZ3VfU2VndW5k''@;'; put 'put ''YV9UZXJzYV9LdWFydGFfS2ludGFfU2VzdGFfU2FiYWR1Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IkRvbV9TZWdfVGVyc19LdWFfS2ludF9TZXN0X1NhYiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiRG9fU2VnX1RlX0t1X0tpX1Nlc19TYSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1h''@;'; put 'put ''dDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltPaGluIGloYV0gTFQiLG5leHREYXk6IltBYmFu''@;'; put 'put ''IGloYV0gTFQiLG5leHRXZWVrOiJkZGRkIFtpaGFdIExUIixsYXN0RGF5OiJbSG9yaXNlaWsgaWhhXSBMVCIsbGFzdFdlZWs6ImRkZGQgW3NlbWFuYSBrb3R1a10gW2loYV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImloYSAlcyIscGFzdDoiJXMgbGl1YmEiLHM6''@;'; put 'put ''InNlZ3VuZHUgYmFsdW4iLHNzOiJzZWd1bmR1ICVkIixtOiJtaW51dHUgaWRhIixtbToibWludXR1ICVkIixoOiJvcmFzIGlkYSIsaGg6Im9yYXMgJWQiLGQ6Imxvcm9uIGlkYSIsZGQ6Imxvcm9uICVkIixNOiJmdWxhbiBpZGEiLE1NOiJmdWxhbiAlZCIseToidGluYW4gaWRhIix5eToidGlu''@;'; put 'put ''YW4gJWQifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KHN0fG5kfHJkfHRoKS8sb3JkaW5hbDpmdW5jdGlvbihnKXt2YXIgQj1nJTEwO3JldHVybiBnKygxPT1+fihnJTEwMC8xMCk/InRoIjoxPT09Qj8ic3QiOjI9PT1CPyJuZCI6Mz09PUI/InJkIjoidGgiKX0sd2Vlazp7ZG93''@;'; put 'put ''OjEsZG95OjR9fSl9KHkoOTc1ODYpKX0sODI5NDpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7dmFyIF89ezA6Ii1cdTA0NDNcdTA0M2MiLDE6Ii1cdTA0NDNcdTA0M2MiLDI6Ii1cdTA0NGVcdTA0M2MiLDM6Ii1cdTA0NGVcdTA0M2MiLDQ6Ii1cdTA0NDNcdTA0''@;'; put 'put ''M2MiLDU6Ii1cdTA0NDNcdTA0M2MiLDY6Ii1cdTA0NDNcdTA0M2MiLDc6Ii1cdTA0NDNcdTA0M2MiLDg6Ii1cdTA0NDNcdTA0M2MiLDk6Ii1cdTA0NDNcdTA0M2MiLDEwOiItXHUwNDQzXHUwNDNjIiwxMjoiLVx1MDQ0M1x1MDQzYyIsMTM6Ii1cdTA0NDNcdTA0M2MiLDIwOiItXHUwNDQzXHUw''@;'; put 'put ''NDNjIiwzMDoiLVx1MDQ0ZVx1MDQzYyIsNDA6Ii1cdTA0NDNcdTA0M2MiLDUwOiItXHUwNDQzXHUwNDNjIiw2MDoiLVx1MDQ0M1x1MDQzYyIsNzA6Ii1cdTA0NDNcdTA0M2MiLDgwOiItXHUwNDQzXHUwNDNjIiw5MDoiLVx1MDQ0M1x1MDQzYyIsMTAwOiItXHUwNDQzXHUwNDNjIn07SS5kZWZp''@;'; put 'put ''bmVMb2NhbGUoInRnIix7bW9udGhzOntmb3JtYXQ6Ilx1MDQ0Zlx1MDQzZFx1MDQzMlx1MDQzMFx1MDQ0MFx1MDQzOF9cdTA0NDRcdTA0MzVcdTA0MzJcdTA0NDBcdTA0MzBcdTA0M2JcdTA0MzhfXHUwNDNjXHUwNDMwXHUwNDQwXHUwNDQyXHUwNDM4X1x1MDQzMFx1MDQzZlx1MDQ0MFx1MDQz''@;'; put 'put ''NVx1MDQzYlx1MDQzOF9cdTA0M2NcdTA0MzBcdTA0MzlcdTA0MzhfXHUwNDM4XHUwNDRlXHUwNDNkXHUwNDM4X1x1MDQzOFx1MDQ0ZVx1MDQzYlx1MDQzOF9cdTA0MzBcdTA0MzJcdTA0MzNcdTA0NDNcdTA0NDFcdTA0NDJcdTA0MzhfXHUwNDQxXHUwNDM1XHUwNDNkXHUwNDQyXHUwNDRmXHUw''@;'; put 'put ''NDMxXHUwNDQwXHUwNDM4X1x1MDQzZVx1MDQzYVx1MDQ0Mlx1MDQ0Zlx1MDQzMVx1MDQ0MFx1MDQzOF9cdTA0M2RcdTA0M2VcdTA0NGZcdTA0MzFcdTA0NDBcdTA0MzhfXHUwNDM0XHUwNDM1XHUwNDNhXHUwNDMwXHUwNDMxXHUwNDQwXHUwNDM4Ii5zcGxpdCgiXyIpLHN0YW5kYWxvbmU6Ilx1''@;'; put 'put ''MDQ0Zlx1MDQzZFx1MDQzMlx1MDQzMFx1MDQ0MF9cdTA0NDRcdTA0MzVcdTA0MzJcdTA0NDBcdTA0MzBcdTA0M2JfXHUwNDNjXHUwNDMwXHUwNDQwXHUwNDQyX1x1MDQzMFx1MDQzZlx1MDQ0MFx1MDQzNVx1MDQzYl9cdTA0M2NcdTA0MzBcdTA0MzlfXHUwNDM4XHUwNDRlXHUwNDNkX1x1MDQz''@;'; put 'put ''OFx1MDQ0ZVx1MDQzYl9cdTA0MzBcdTA0MzJcdTA0MzNcdTA0NDNcdTA0NDFcdTA0NDJfXHUwNDQxXHUwNDM1XHUwNDNkXHUwNDQyXHUwNDRmXHUwNDMxXHUwNDQwX1x1MDQzZVx1MDQzYVx1MDQ0Mlx1MDQ0Zlx1MDQzMVx1MDQ0MF9cdTA0M2RcdTA0M2VcdTA0NGZcdTA0MzFcdTA0NDBfXHUw''@;'; put 'put ''NDM0XHUwNDM1XHUwNDNhXHUwNDMwXHUwNDMxXHUwNDQwIi5zcGxpdCgiXyIpfSxtb250aHNTaG9ydDoiXHUwNDRmXHUwNDNkXHUwNDMyX1x1MDQ0NFx1MDQzNVx1MDQzMl9cdTA0M2NcdTA0MzBcdTA0NDBfXHUwNDMwXHUwNDNmXHUwNDQwX1x1MDQzY1x1MDQzMFx1MDQzOV9cdTA0MzhcdTA0''@;'; put 'put ''NGVcdTA0M2RfXHUwNDM4XHUwNDRlXHUwNDNiX1x1MDQzMFx1MDQzMlx1MDQzM19cdTA0NDFcdTA0MzVcdTA0M2RfXHUwNDNlXHUwNDNhXHUwNDQyX1x1MDQzZFx1MDQzZVx1MDQ0Zl9cdTA0MzRcdTA0MzVcdTA0M2EiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MDQ0Zlx1MDQzYVx1MDQ0OFx1''@;'; put 'put ''MDQzMFx1MDQzZFx1MDQzMVx1MDQzNV9cdTA0MzRcdTA0NDNcdTA0NDhcdTA0MzBcdTA0M2RcdTA0MzFcdTA0MzVfXHUwNDQxXHUwNDM1XHUwNDQ4XHUwNDMwXHUwNDNkXHUwNDMxXHUwNDM1X1x1MDQ0N1x1MDQzZVx1MDQ0MFx1MDQ0OFx1MDQzMFx1MDQzZFx1MDQzMVx1MDQzNV9cdTA0M2Zc''@;'; put 'put ''dTA0MzBcdTA0M2RcdTA0YjdcdTA0NDhcdTA0MzBcdTA0M2RcdTA0MzFcdTA0MzVfXHUwNGI3XHUwNDQzXHUwNDNjXHUwNDRhXHUwNDMwX1x1MDQ0OFx1MDQzMFx1MDQzZFx1MDQzMVx1MDQzNSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA0NGZcdTA0NDhcdTA0MzFfXHUwNDM0XHUw''@;'; put 'put ''NDQ4XHUwNDMxX1x1MDQ0MVx1MDQ0OFx1MDQzMV9cdTA0NDdcdTA0NDhcdTA0MzFfXHUwNDNmXHUwNDQ4XHUwNDMxX1x1MDRiN1x1MDQ0M1x1MDQzY19cdTA0NDhcdTA0M2RcdTA0MzEiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDQ0Zlx1MDQ0OF9cdTA0MzRcdTA0NDhfXHUwNDQxXHUw''@;'; put 'put ''NDQ4X1x1MDQ0N1x1MDQ0OF9cdTA0M2ZcdTA0NDhfXHUwNGI3XHUwNDNjX1x1MDQ0OFx1MDQzMSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0i''@;'; put 'put ''LExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA0MThcdTA0M2NcdTA0NDBcdTA0ZWZcdTA0MzcgXHUwNDQxXHUwNDNlXHUwNDMwXHUwNDQyXHUwNDM4XSBMVCIsbmV4dERheToiW1x1MDQyNFx1MDQzMFx1MDQ0MFx1MDQzNFx1MDQzZSBcdTA0''@;'; put 'put ''NDFcdTA0M2VcdTA0MzBcdTA0NDJcdTA0MzhdIExUIixsYXN0RGF5OiJbXHUwNDE0XHUwNDM4XHUwNDQwXHUwNGVmXHUwNDM3IFx1MDQ0MVx1MDQzZVx1MDQzMFx1MDQ0Mlx1MDQzOF0gTFQiLG5leHRXZWVrOiJkZGRkW1x1MDQzOF0gW1x1MDRiM1x1MDQzMFx1MDQ0NFx1MDQ0Mlx1MDQzMFx1''@;'; put 'put ''MDQzOCBcdTA0M2VcdTA0NGZcdTA0M2RcdTA0MzRcdTA0MzAgXHUwNDQxXHUwNDNlXHUwNDMwXHUwNDQyXHUwNDM4XSBMVCIsbGFzdFdlZWs6ImRkZGRbXHUwNDM4XSBbXHUwNGIzXHUwNDMwXHUwNDQ0XHUwNDQyXHUwNDMwXHUwNDM4IFx1MDQzM1x1MDQ0M1x1MDQzN1x1MDQzMFx1MDQ0OFx1''@;'; put 'put ''MDQ0Mlx1MDQzMCBcdTA0NDFcdTA0M2VcdTA0MzBcdTA0NDJcdTA0MzhdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJcdTA0MzFcdTA0MzBcdTA0NGFcdTA0MzRcdTA0MzggJXMiLHBhc3Q6IiVzIFx1MDQzZlx1MDQzNVx1MDQ0OCIsczoiXHUwNDRmXHUwNDNhXHUw''@;'; put 'put ''NDQ3XHUwNDMwXHUwNDNkXHUwNDM0IFx1MDQ0MVx1MDQzZVx1MDQzZFx1MDQzOFx1MDQ0ZiIsbToiXHUwNDRmXHUwNDNhIFx1MDQzNFx1MDQzMFx1MDQ5Ylx1MDQzOFx1MDQ5Ylx1MDQzMCIsbW06IiVkIFx1MDQzNFx1MDQzMFx1MDQ5Ylx1MDQzOFx1MDQ5Ylx1MDQzMCIsaDoiXHUwNDRmXHUw''@;'; put 'put ''NDNhIFx1MDQ0MVx1MDQzZVx1MDQzMFx1MDQ0MiIsaGg6IiVkIFx1MDQ0MVx1MDQzZVx1MDQzMFx1MDQ0MiIsZDoiXHUwNDRmXHUwNDNhIFx1MDQ0MFx1MDRlZlx1MDQzNyIsZGQ6IiVkIFx1MDQ0MFx1MDRlZlx1MDQzNyIsTToiXHUwNDRmXHUwNDNhIFx1MDQzY1x1MDQzZVx1MDRiMyIsTU06''@;'; put 'put ''IiVkIFx1MDQzY1x1MDQzZVx1MDRiMyIseToiXHUwNDRmXHUwNDNhIFx1MDQ0MVx1MDQzZVx1MDQzYiIseXk6IiVkIFx1MDQ0MVx1MDQzZVx1MDQzYiJ9LG1lcmlkaWVtUGFyc2U6L1x1MDQ0OFx1MDQzMFx1MDQzMXxcdTA0NDFcdTA0NDNcdTA0MzFcdTA0YjN8XHUwNDQwXHUwNGVmXHUwNDM3''@;'; put 'put ''fFx1MDQzMVx1MDQzNVx1MDQzM1x1MDQzZVx1MDRiMy8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKEIsdyl7cmV0dXJuIDEyPT09QiYmKEI9MCksIlx1MDQ0OFx1MDQzMFx1MDQzMSI9PT13P0I8ND9COkIrMTI6Ilx1MDQ0MVx1MDQ0M1x1MDQzMVx1MDRiMyI9PT13P0I6Ilx1MDQ0MFx1MDRlZlx1''@;'; put 'put ''MDQzNyI9PT13P0I+PTExP0I6QisxMjoiXHUwNDMxXHUwNDM1XHUwNDMzXHUwNDNlXHUwNGIzIj09PXc/QisxMjp2b2lkIDB9LG1lcmlkaWVtOmZ1bmN0aW9uKEIsdyxQKXtyZXR1cm4gQjw0PyJcdTA0NDhcdTA0MzBcdTA0MzEiOkI8MTE/Ilx1MDQ0MVx1MDQ0M1x1MDQzMVx1MDRiMyI6Qjwx''@;'; put 'put ''Nj8iXHUwNDQwXHUwNGVmXHUwNDM3IjpCPDE5PyJcdTA0MzFcdTA0MzVcdTA0MzNcdTA0M2VcdTA0YjMiOiJcdTA0NDhcdTA0MzBcdTA0MzEifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9LShcdTA0NDNcdTA0M2N8XHUwNDRlXHUwNDNjKS8sb3JkaW5hbDpmdW5jdGlvbihCKXty''@;'; put 'put ''ZXR1cm4gQisoX1tCXXx8X1tCJTEwXXx8X1tCPj0xMDA/MTAwOm51bGxdKX0sd2Vlazp7ZG93OjEsZG95Ojd9fSl9KHkoOTc1ODYpKX0sMTIzMTpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoInRoIix7bW9udGhzOiJcdTBlMjFcdTBl''@;'; put 'put ''MDFcdTBlMjNcdTBlMzJcdTBlMDRcdTBlMjFfXHUwZTAxXHUwZTM4XHUwZTIxXHUwZTIwXHUwZTMyXHUwZTFlXHUwZTMxXHUwZTE5XHUwZTE4XHUwZTRjX1x1MGUyMVx1MGUzNVx1MGUxOVx1MGUzMlx1MGUwNFx1MGUyMV9cdTBlNDBcdTBlMjFcdTBlMjlcdTBlMzJcdTBlMjJcdTBlMTlfXHUw''@;'; put 'put ''ZTFlXHUwZTI0XHUwZTI5XHUwZTIwXHUwZTMyXHUwZTA0XHUwZTIxX1x1MGUyMVx1MGUzNFx1MGUxNlx1MGUzOFx1MGUxOVx1MGUzMlx1MGUyMlx1MGUxOV9cdTBlMDFcdTBlMjNcdTBlMDFcdTBlMGVcdTBlMzJcdTBlMDRcdTBlMjFfXHUwZTJhXHUwZTM0XHUwZTA3XHUwZTJiXHUwZTMyXHUw''@;'; put 'put ''ZTA0XHUwZTIxX1x1MGUwMVx1MGUzMVx1MGUxOVx1MGUyMlx1MGUzMlx1MGUyMlx1MGUxOV9cdTBlMTVcdTBlMzhcdTBlMjVcdTBlMzJcdTBlMDRcdTBlMjFfXHUwZTFlXHUwZTI0XHUwZTI4XHUwZTA4XHUwZTM0XHUwZTAxXHUwZTMyXHUwZTIyXHUwZTE5X1x1MGUxOFx1MGUzMVx1MGUxOVx1''@;'; put 'put ''MGUyN1x1MGUzMlx1MGUwNFx1MGUyMSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwZTIxLlx1MGUwNC5fXHUwZTAxLlx1MGUxZS5fXHUwZTIxXHUwZTM1Llx1MGUwNC5fXHUwZTQwXHUwZTIxLlx1MGUyMi5fXHUwZTFlLlx1MGUwNC5fXHUwZTIxXHUwZTM0Llx1MGUyMi5fXHUwZTAxLlx1''@;'; put 'put ''MGUwNC5fXHUwZTJhLlx1MGUwNC5fXHUwZTAxLlx1MGUyMi5fXHUwZTE1Llx1MGUwNC5fXHUwZTFlLlx1MGUyMi5fXHUwZTE4Llx1MGUwNC4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiXHUwZTJkXHUwZTMyXHUwZTE3XHUwZTM0XHUwZTE1XHUwZTIyXHUwZTRj''@;'; put 'put ''X1x1MGUwOFx1MGUzMVx1MGUxOVx1MGUxN1x1MGUyM1x1MGU0Y19cdTBlMmRcdTBlMzFcdTBlMDdcdTBlMDRcdTBlMzJcdTBlMjNfXHUwZTFlXHUwZTM4XHUwZTE4X1x1MGUxZVx1MGUyNFx1MGUyYlx1MGUzMVx1MGUyYVx1MGUxYVx1MGUxNFx1MGUzNV9cdTBlMjhcdTBlMzhcdTBlMDFcdTBl''@;'; put 'put ''MjNcdTBlNGNfXHUwZTQwXHUwZTJhXHUwZTMyXHUwZTIzXHUwZTRjIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MGUyZFx1MGUzMlx1MGUxN1x1MGUzNFx1MGUxNVx1MGUyMlx1MGU0Y19cdTBlMDhcdTBlMzFcdTBlMTlcdTBlMTdcdTBlMjNcdTBlNGNfXHUwZTJkXHUwZTMxXHUwZTA3''@;'; put 'put ''XHUwZTA0XHUwZTMyXHUwZTIzX1x1MGUxZVx1MGUzOFx1MGUxOF9cdTBlMWVcdTBlMjRcdTBlMmJcdTBlMzFcdTBlMmFfXHUwZTI4XHUwZTM4XHUwZTAxXHUwZTIzXHUwZTRjX1x1MGU0MFx1MGUyYVx1MGUzMlx1MGUyM1x1MGU0YyIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwZTJkXHUw''@;'; put 'put ''ZTMyLl9cdTBlMDguX1x1MGUyZC5fXHUwZTFlLl9cdTBlMWVcdTBlMjQuX1x1MGUyOC5fXHUwZTJhLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJIOm1tIixMVFM6Ikg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIs''@;'; put 'put ''TExMOiJEIE1NTU0gWVlZWSBcdTBlNDBcdTBlMjdcdTBlMjVcdTBlMzIgSDptbSIsTExMTDoiXHUwZTI3XHUwZTMxXHUwZTE5ZGRkZFx1MGUxN1x1MGUzNVx1MGU0OCBEIE1NTU0gWVlZWSBcdTBlNDBcdTBlMjdcdTBlMjVcdTBlMzIgSDptbSJ9LG1lcmlkaWVtUGFyc2U6L1x1MGUwMVx1MGU0''@;'; put 'put ''OFx1MGUyZFx1MGUxOVx1MGU0MFx1MGUxN1x1MGUzNVx1MGU0OFx1MGUyMlx1MGUwN3xcdTBlMmJcdTBlMjVcdTBlMzFcdTBlMDdcdTBlNDBcdTBlMTdcdTBlMzVcdTBlNDhcdTBlMjJcdTBlMDcvLGlzUE06ZnVuY3Rpb24oZyl7cmV0dXJuIlx1MGUyYlx1MGUyNVx1MGUzMVx1MGUwN1x1MGU0''@;'; put 'put ''MFx1MGUxN1x1MGUzNVx1MGU0OFx1MGUyMlx1MGUwNyI9PT1nfSxtZXJpZGllbTpmdW5jdGlvbihnLEIsdyl7cmV0dXJuIGc8MTI/Ilx1MGUwMVx1MGU0OFx1MGUyZFx1MGUxOVx1MGU0MFx1MGUxN1x1MGUzNVx1MGU0OFx1MGUyMlx1MGUwNyI6Ilx1MGUyYlx1MGUyNVx1MGUzMVx1MGUwN1x1''@;'; put 'put ''MGU0MFx1MGUxN1x1MGUzNVx1MGU0OFx1MGUyMlx1MGUwNyJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwZTI3XHUwZTMxXHUwZTE5XHUwZTE5XHUwZTM1XHUwZTQ5IFx1MGU0MFx1MGUyN1x1MGUyNVx1MGUzMl0gTFQiLG5leHREYXk6IltcdTBlMWVcdTBlMjNcdTBlMzhcdTBlNDhcdTBlMDdc''@;'; put 'put ''dTBlMTlcdTBlMzVcdTBlNDkgXHUwZTQwXHUwZTI3XHUwZTI1XHUwZTMyXSBMVCIsbmV4dFdlZWs6ImRkZGRbXHUwZTJiXHUwZTE5XHUwZTQ5XHUwZTMyIFx1MGU0MFx1MGUyN1x1MGUyNVx1MGUzMl0gTFQiLGxhc3REYXk6IltcdTBlNDBcdTBlMjFcdTBlMzdcdTBlNDhcdTBlMmRcdTBlMjdc''@;'; put 'put ''dTBlMzJcdTBlMTlcdTBlMTlcdTBlMzVcdTBlNDkgXHUwZTQwXHUwZTI3XHUwZTI1XHUwZTMyXSBMVCIsbGFzdFdlZWs6IltcdTBlMjdcdTBlMzFcdTBlMTldZGRkZFtcdTBlMTdcdTBlMzVcdTBlNDhcdTBlNDFcdTBlMjVcdTBlNDlcdTBlMjcgXHUwZTQwXHUwZTI3XHUwZTI1XHUwZTMyXSBM''@;'; put 'put ''VCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUwZTJkXHUwZTM1XHUwZTAxICVzIixwYXN0OiIlc1x1MGUxN1x1MGUzNVx1MGU0OFx1MGU0MVx1MGUyNVx1MGU0OVx1MGUyNyIsczoiXHUwZTQ0XHUwZTIxXHUwZTQ4XHUwZTAxXHUwZTM1XHUwZTQ4XHUwZTI3XHUwZTM0''@;'; put 'put ''XHUwZTE5XHUwZTMyXHUwZTE3XHUwZTM1IixzczoiJWQgXHUwZTI3XHUwZTM0XHUwZTE5XHUwZTMyXHUwZTE3XHUwZTM1IixtOiIxIFx1MGUxOVx1MGUzMlx1MGUxN1x1MGUzNSIsbW06IiVkIFx1MGUxOVx1MGUzMlx1MGUxN1x1MGUzNSIsaDoiMSBcdTBlMGFcdTBlMzFcdTBlNDhcdTBlMjdc''@;'; put 'put ''dTBlNDJcdTBlMjFcdTBlMDciLGhoOiIlZCBcdTBlMGFcdTBlMzFcdTBlNDhcdTBlMjdcdTBlNDJcdTBlMjFcdTBlMDciLGQ6IjEgXHUwZTI3XHUwZTMxXHUwZTE5IixkZDoiJWQgXHUwZTI3XHUwZTMxXHUwZTE5Iix3OiIxIFx1MGUyYVx1MGUzMVx1MGUxYlx1MGUxNFx1MGUzMlx1MGUyYlx1''@;'; put 'put ''MGU0YyIsd3c6IiVkIFx1MGUyYVx1MGUzMVx1MGUxYlx1MGUxNFx1MGUzMlx1MGUyYlx1MGU0YyIsTToiMSBcdTBlNDBcdTBlMTRcdTBlMzdcdTBlMmRcdTBlMTkiLE1NOiIlZCBcdTBlNDBcdTBlMTRcdTBlMzdcdTBlMmRcdTBlMTkiLHk6IjEgXHUwZTFiXHUwZTM1Iix5eToiJWQgXHUwZTFi''@;'; put 'put ''XHUwZTM1In19KX0oeSg5NzU4NikpfSwzNzQ2OmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz17MToiJ2luamkiLDU6IidpbmppIiw4OiInaW5qaSIsNzA6IidpbmppIiw4MDoiJ2luamkiLDI6IiduamkiLDc6IiduamkiLDIwOiInbmppIiw1MDoiJ25q''@;'; put 'put ''aSIsMzoiJ1x4ZmNuamkiLDQ6IidceGZjbmppIiwxMDA6IidceGZjbmppIiw2OiInbmp5Iiw5OiIndW5qeSIsMTA6Iid1bmp5IiwzMDoiJ3VuankiLDYwOiIneW5qeSIsOTA6Iid5bmp5In07SS5kZWZpbmVMb2NhbGUoInRrIix7bW9udGhzOiJceGRkYW53YXJfRmV3cmFsX01hcnRfQXByZWxf''@;'; put 'put ''TWFceGZkX0lceGZkdW5fSVx4ZmR1bF9Bd2d1c3RfU2VudFx4ZmRhYnJfT2t0XHhmZGFicl9Ob1x4ZmRhYnJfRGVrYWJyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJceGRkYW5fRmV3X01hcl9BcHJfTWFceGZkX0lceGZkbl9JXHhmZGxfQXdnX1Nlbl9Pa3RfTm9ceGZkX0RlayIuc3BsaXQo''@;'; put 'put ''Il8iKSx3ZWVrZGF5czoiXHhkZGVrXHUwMTVmZW5iZV9EdVx1MDE1ZmVuYmVfU2lcdTAxNWZlbmJlX1x4Yzdhclx1MDE1ZmVuYmVfUGVuXHUwMTVmZW5iZV9Bbm5hX1x1MDE1ZWVuYmUiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHhkZGVrX0R1XHUwMTVmX1NpXHUwMTVmX1x4Yzdhcl9Q''@;'; put 'put ''ZW5fQW5uX1x1MDE1ZWVuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJceGRka19EXHUwMTVmX1NcdTAxNWZfXHhjN3JfUG5fQW5fXHUwMTVlbiIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRCBNTU1NIFlZ''@;'; put 'put ''WVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltidWdceGZjbiBzYWdhdF0gTFQiLG5leHREYXk6IltlcnRpciBzYWdhdF0gTFQiLG5leHRXZWVrOiJbaW5kaWtpXSBkZGRkIFtzYWdhdF0gTFQiLGxh''@;'; put 'put ''c3REYXk6IltkXHhmY1x4ZmRuXSBMVCIsbGFzdFdlZWs6IltnZVx4ZTdlbl0gZGRkZCBbc2FnYXRdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBzb1x1MDE0OCIscGFzdDoiJXMgXHhmNlx1MDE0OCIsczoiYmlyblx4ZTRceGU3ZSBzZWt1bnQiLG06ImJpciBt''@;'; put 'put ''aW51dCIsbW06IiVkIG1pbnV0IixoOiJiaXIgc2FnYXQiLGhoOiIlZCBzYWdhdCIsZDoiYmlyIGdceGZjbiIsZGQ6IiVkIGdceGZjbiIsTToiYmlyIGFceGZkIixNTToiJWQgYVx4ZmQiLHk6ImJpciBceGZkeWwiLHl5OiIlZCBceGZkeWwifSxvcmRpbmFsOmZ1bmN0aW9uKEIsdyl7c3dpdGNo''@;'; put 'put ''KHcpe2Nhc2UiZCI6Y2FzZSJEIjpjYXNlIkRvIjpjYXNlIkREIjpyZXR1cm4gQjtkZWZhdWx0OmlmKDA9PT1CKXJldHVybiBCKyIndW5qeSI7dmFyIFA9QiUxMDtyZXR1cm4gQisoX1tQXXx8X1tCJTEwMC1QXXx8X1tCPj0xMDA/MTAwOm51bGxdKX19LHdlZWs6e2RvdzoxLGRveTo3fX0pfSh5''@;'; put 'put ''KDk3NTg2KSl9LDQ5MDQwOmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgidGwtcGgiLHttb250aHM6IkVuZXJvX1BlYnJlcm9fTWFyc29fQWJyaWxfTWF5b19IdW55b19IdWx5b19BZ29zdG9fU2V0eWVtYnJlX09rdHVicmVfTm9ieWVt''@;'; put 'put ''YnJlX0Rpc3llbWJyZSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiRW5lX1BlYl9NYXJfQWJyX01heV9IdW5fSHVsX0Fnb19TZXRfT2t0X05vYl9EaXMiLnNwbGl0KCJfIiksd2Vla2RheXM6Ikxpbmdnb19MdW5lc19NYXJ0ZXNfTWl5ZXJrdWxlc19IdXdlYmVzX0JpeWVybmVzX1NhYmFkbyIu''@;'; put 'put ''c3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJMaW5fTHVuX01hcl9NaXlfSHV3X0JpeV9TYWIiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IkxpX0x1X01hX01pX0h1X0JpX1NhYiIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJNTS9EL1lZ''@;'; put 'put ''WVkiLExMOiJNTU1NIEQsIFlZWVkiLExMTDoiTU1NTSBELCBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBNTU1NIERELCBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IkxUIFtuZ2F5b25nIGFyYXddIixuZXh0RGF5OiJbQnVrYXMgbmddIExUIixuZXh0V2VlazoiTFQgW3NhIHN1c3Vu''@;'; put 'put ''b2QgbmFdIGRkZGQiLGxhc3REYXk6IkxUIFtrYWhhcG9uXSIsbGFzdFdlZWs6IkxUIFtub29uZyBuYWthcmFhbmddIGRkZGQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6InNhIGxvb2IgbmcgJXMiLHBhc3Q6IiVzIGFuZyBuYWthbGlwYXMiLHM6ImlsYW5nIHNlZ3VuZG8i''@;'; put 'put ''LHNzOiIlZCBzZWd1bmRvIixtOiJpc2FuZyBtaW51dG8iLG1tOiIlZCBtaW51dG8iLGg6ImlzYW5nIG9yYXMiLGhoOiIlZCBvcmFzIixkOiJpc2FuZyBhcmF3IixkZDoiJWQgYXJhdyIsTToiaXNhbmcgYnV3YW4iLE1NOiIlZCBidXdhbiIseToiaXNhbmcgdGFvbiIseXk6IiVkIHRhb24ifSxk''@;'; put 'put ''YXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9LyxvcmRpbmFsOmZ1bmN0aW9uKGcpe3JldHVybiBnfSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oeSg5NzU4NikpfSwxNzE4NzpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7dmFyIF89InBhZ2hfd2FcdTIwMTlf''@;'; put 'put ''Y2hhXHUyMDE5X3dlal9sb1NfdmFnaF9qYXZfU29jaF9jaG9yZ2hfSHV0Ii5zcGxpdCgiXyIpO2Z1bmN0aW9uIHcoTyx6LE4sTCl7dmFyIEs9ZnVuY3Rpb24gUChPKXt2YXIgej1NYXRoLmZsb29yKE8lMWUzLzEwMCksTj1NYXRoLmZsb29yKE8lMTAwLzEwKSxMPU8lMTAsSz0iIjtyZXR1cm4g''@;'; put 'put ''ej4wJiYoSys9X1t6XSsidmF0bGgiKSxOPjAmJihLKz0oIiIhPT1LPyIgIjoiIikrX1tOXSsibWFIIiksTD4wJiYoSys9KCIiIT09Sz8iICI6IiIpK19bTF0pLCIiPT09Sz8icGFnaCI6S30oTyk7c3dpdGNoKE4pe2Nhc2Uic3MiOnJldHVybiBLKyIgbHVwIjtjYXNlIm1tIjpyZXR1cm4gSysi''@;'; put 'put ''IHR1cCI7Y2FzZSJoaCI6cmV0dXJuIEsrIiByZXAiO2Nhc2UiZGQiOnJldHVybiBLKyIgamFqIjtjYXNlIk1NIjpyZXR1cm4gSysiIGphciI7Y2FzZSJ5eSI6cmV0dXJuIEsrIiBESVMifX1JLmRlZmluZUxvY2FsZSgidGxoIix7bW9udGhzOiJ0ZXJhXHUyMDE5IGphciB3YVx1MjAxOV90ZXJh''@;'; put 'put ''XHUyMDE5IGphciBjaGFcdTIwMTlfdGVyYVx1MjAxOSBqYXIgd2VqX3RlcmFcdTIwMTkgamFyIGxvU190ZXJhXHUyMDE5IGphciB2YWdoX3RlcmFcdTIwMTkgamFyIGphdl90ZXJhXHUyMDE5IGphciBTb2NoX3RlcmFcdTIwMTkgamFyIGNob3JnaF90ZXJhXHUyMDE5IGphciBIdXRfdGVyYVx1''@;'; put 'put ''MjAxOSBqYXIgd2FcdTIwMTltYUhfdGVyYVx1MjAxOSBqYXIgd2FcdTIwMTltYUggd2FcdTIwMTlfdGVyYVx1MjAxOSBqYXIgd2FcdTIwMTltYUggY2hhXHUyMDE5Ii5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJqYXIgd2FcdTIwMTlfamFyIGNoYVx1MjAxOV9qYXIgd2VqX2phciBsb1NfamFy''@;'; put 'put ''IHZhZ2hfamFyIGphdl9qYXIgU29jaF9qYXIgY2hvcmdoX2phciBIdXRfamFyIHdhXHUyMDE5bWFIX2phciB3YVx1MjAxOW1hSCB3YVx1MjAxOV9qYXIgd2FcdTIwMTltYUggY2hhXHUyMDE5Ii5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6Imxvam1JdGphal9EYVNq''@;'; put 'put ''YWpfcG92amFqX2doSXRsaGphal9sb2doamFqX2J1cWphal9naEluamFqIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Imxvam1JdGphal9EYVNqYWpfcG92amFqX2doSXRsaGphal9sb2doamFqX2J1cWphal9naEluamFqIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJsb2ptSXRqYWpfRGFT''@;'; put 'put ''amFqX3Bvdmphal9naEl0bGhqYWpfbG9naGphal9idXFqYWpfZ2hJbmphaiIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQs''@;'; put 'put ''IEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltEYUhqYWpdIExUIixuZXh0RGF5OiJbd2FcdTIwMTlsZVNdIExUIixuZXh0V2VlazoiTExMIixsYXN0RGF5OiJbd2FcdTIwMTlIdVx1MjAxOV0gTFQiLGxhc3RXZWVrOiJMTEwiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVU''@;'; put 'put ''aW1lOntmdXR1cmU6ZnVuY3Rpb24gZyhPKXt2YXIgej1PO3JldHVybi0xIT09Ty5pbmRleE9mKCJqYWoiKT96LnNsaWNlKDAsLTMpKyJsZVMiOi0xIT09Ty5pbmRleE9mKCJqYXIiKT96LnNsaWNlKDAsLTMpKyJ3YVEiOi0xIT09Ty5pbmRleE9mKCJESVMiKT96LnNsaWNlKDAsLTMpKyJuZW0i''@;'; put 'put ''OnorIiBwSXEifSxwYXN0OmZ1bmN0aW9uIEIoTyl7dmFyIHo9TztyZXR1cm4tMSE9PU8uaW5kZXhPZigiamFqIik/ei5zbGljZSgwLC0zKSsiSHVcdTIwMTkiOi0xIT09Ty5pbmRleE9mKCJqYXIiKT96LnNsaWNlKDAsLTMpKyJ3ZW4iOi0xIT09Ty5pbmRleE9mKCJESVMiKT96LnNsaWNlKDAs''@;'; put 'put ''LTMpKyJiZW4iOnorIiByZXQifSxzOiJwdVMgbHVwIixzczp3LG06IndhXHUyMDE5IHR1cCIsbW06dyxoOiJ3YVx1MjAxOSByZXAiLGhoOncsZDoid2FcdTIwMTkgamFqIixkZDp3LE06IndhXHUyMDE5IGphciIsTU06dyx5OiJ3YVx1MjAxOSBESVMiLHl5Ond9LGRheU9mTW9udGhPcmRpbmFs''@;'; put 'put ''UGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oeSg5NzU4NikpfSw2MDE1MzpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7dmFyIF89ezE6IidpbmNpIiw1OiInaW5jaSIsODoiJ2luY2kiLDcwOiInaW5jaSIsODA6''@;'; put 'put ''IidpbmNpIiwyOiInbmNpIiw3OiInbmNpIiwyMDoiJ25jaSIsNTA6IiduY2kiLDM6IidceGZjbmNceGZjIiw0OiInXHhmY25jXHhmYyIsMTAwOiInXHhmY25jXHhmYyIsNjoiJ25jXHUwMTMxIiw5OiIndW5jdSIsMTA6Iid1bmN1IiwzMDoiJ3VuY3UiLDYwOiInXHUwMTMxbmNcdTAxMzEiLDkw''@;'; put 'put ''OiInXHUwMTMxbmNcdTAxMzEifTtJLmRlZmluZUxvY2FsZSgidHIiLHttb250aHM6Ik9jYWtfXHUwMTVldWJhdF9NYXJ0X05pc2FuX01heVx1MDEzMXNfSGF6aXJhbl9UZW1tdXpfQVx1MDExZnVzdG9zX0V5bFx4ZmNsX0VraW1fS2FzXHUwMTMxbV9BcmFsXHUwMTMxayIuc3BsaXQoIl8iKSxt''@;'; put 'put ''b250aHNTaG9ydDoiT2NhX1x1MDE1ZXViX01hcl9OaXNfTWF5X0hhel9UZW1fQVx1MDExZnVfRXlsX0VraV9LYXNfQXJhIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJQYXphcl9QYXphcnRlc2lfU2FsXHUwMTMxX1x4Yzdhclx1MDE1ZmFtYmFfUGVyXHUwMTVmZW1iZV9DdW1hX0N1bWFydGVzaSIu''@;'; put 'put ''c3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJQYXpfUHp0X1NhbF9ceGM3YXJfUGVyX0N1bV9DbXQiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlB6X1B0X1NhX1x4YzdhX1BlX0N1X0N0Ii5zcGxpdCgiXyIpLG1lcmlkaWVtOmZ1bmN0aW9uKEIsdyxQKXtyZXR1cm4gQjwxMj9QPyJceGY2XHhm''@;'; put 'put ''NiI6Ilx4ZDZceGQ2IjpQPyJceGY2cyI6Ilx4ZDZTIn0sbWVyaWRpZW1QYXJzZTovXHhmNlx4ZjZ8XHhkNlx4ZDZ8XHhmNnN8XHhkNlMvLGlzUE06ZnVuY3Rpb24oQil7cmV0dXJuIlx4ZjZzIj09PUJ8fCJceGQ2UyI9PT1CfSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1t''@;'; put 'put ''OnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltidWdceGZjbiBzYWF0XSBMVCIsbmV4dERheToiW3lhclx1MDEzMW4gc2FhdF0gTFQiLG5l''@;'; put 'put ''eHRXZWVrOiJbZ2VsZWNla10gZGRkZCBbc2FhdF0gTFQiLGxhc3REYXk6IltkXHhmY25dIExUIixsYXN0V2VlazoiW2dlXHhlN2VuXSBkZGRkIFtzYWF0XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgc29ucmEiLHBhc3Q6IiVzIFx4ZjZuY2UiLHM6ImJpcmth''@;'; put 'put ''XHhlNyBzYW5peWUiLHNzOiIlZCBzYW5peWUiLG06ImJpciBkYWtpa2EiLG1tOiIlZCBkYWtpa2EiLGg6ImJpciBzYWF0IixoaDoiJWQgc2FhdCIsZDoiYmlyIGdceGZjbiIsZGQ6IiVkIGdceGZjbiIsdzoiYmlyIGhhZnRhIix3dzoiJWQgaGFmdGEiLE06ImJpciBheSIsTU06IiVkIGF5Iix5''@;'; put 'put ''OiJiaXIgeVx1MDEzMWwiLHl5OiIlZCB5XHUwMTMxbCJ9LG9yZGluYWw6ZnVuY3Rpb24oQix3KXtzd2l0Y2godyl7Y2FzZSJkIjpjYXNlIkQiOmNhc2UiRG8iOmNhc2UiREQiOnJldHVybiBCO2RlZmF1bHQ6aWYoMD09PUIpcmV0dXJuIEIrIidcdTAxMzFuY1x1MDEzMSI7dmFyIFA9QiUxMDty''@;'; put 'put ''ZXR1cm4gQisoX1tQXXx8X1tCJTEwMC1QXXx8X1tCPj0xMDA/MTAwOm51bGxdKX19LHdlZWs6e2RvdzoxLGRveTo3fX0pfSh5KDk3NTg2KSl9LDg4NTIxOmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBnKEIsdyxQLEYpe3ZhciBPPXtzOlsidmll''@;'; put 'put ''bnNhcyBzZWN1bmRzIiwiJ2llbnNhcyBzZWN1bmRzIl0sc3M6W0IrIiBzZWN1bmRzIixCKyIgc2VjdW5kcyJdLG06WyInbiBtXHhlZHV0IiwiJ2llbnMgbVx4ZWR1dCJdLG1tOltCKyIgbVx4ZWR1dHMiLEIrIiBtXHhlZHV0cyJdLGg6WyInbiBceGZlb3JhIiwiJ2llbnNhIFx4ZmVvcmEiXSxo''@;'; put 'put ''aDpbQisiIFx4ZmVvcmFzIixCKyIgXHhmZW9yYXMiXSxkOlsiJ24geml1YSIsIidpZW5zYSB6aXVhIl0sZGQ6W0IrIiB6aXVhcyIsQisiIHppdWFzIl0sTTpbIiduIG1lcyIsIidpZW5zIG1lcyJdLE1NOltCKyIgbWVzZW4iLEIrIiBtZXNlbiJdLHk6WyInbiBhciIsIidpZW5zIGFyIl0seXk6''@;'; put 'put ''W0IrIiBhcnMiLEIrIiBhcnMiXX07cmV0dXJuIEZ8fHc/T1tQXVswXTpPW1BdWzFdfUkuZGVmaW5lTG9jYWxlKCJ0emwiLHttb250aHM6IkphbnVhcl9GZXZyYWdsaF9NYXJceGU3X0F2clx4ZWZ1X01haV9HXHhmY25fSnVsaWFfR3VzY2h0X1NldGVtdmFyX0xpc3RvcFx4ZTR0c19Ob2VtdmFy''@;'; put 'put ''X1plY2VtdmFyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW5fRmV2X01hcl9BdnJfTWFpX0dceGZjbl9KdWxfR3VzX1NldF9MaXNfTm9lX1plYyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiU1x4ZmFsYWRpX0xceGZhbmVceGU3aV9NYWl0emlfTVx4ZTFyY3VyaV9YaFx4ZmFhZGlfVmlceGU5''@;'; put 'put ''bmVyXHhlN2lfU1x4ZTF0dXJpIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlNceGZhbF9MXHhmYW5fTWFpX01ceGUxcl9YaFx4ZmFfVmlceGU5X1NceGUxdCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiU1x4ZmFfTFx4ZmFfTWFfTVx4ZTFfWGhfVmlfU1x4ZTEiLnNwbGl0KCJfIiksbG9u''@;'; put 'put ''Z0RhdGVGb3JtYXQ6e0xUOiJISC5tbSIsTFRTOiJISC5tbS5zcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQuIE1NTU0gW2RhbGxhc10gWVlZWSIsTExMOiJELiBNTU1NIFtkYWxsYXNdIFlZWVkgSEgubW0iLExMTEw6ImRkZGQsIFtsaV0gRC4gTU1NTSBbZGFsbGFzXSBZWVlZIEhILm1tIn0sbWVy''@;'; put 'put ''aWRpZW1QYXJzZTovZFwnb3xkXCdhL2ksaXNQTTpmdW5jdGlvbihCKXtyZXR1cm4iZCdvIj09PUIudG9Mb3dlckNhc2UoKX0sbWVyaWRpZW06ZnVuY3Rpb24oQix3LFApe3JldHVybiBCPjExP1A/ImQnbyI6IkQnTyI6UD8iZCdhIjoiRCdBIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltveGhpIFx4''@;'; put 'put ''ZTBdIExUIixuZXh0RGF5OiJbZGVtXHhlMCBceGUwXSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x4ZTBdIExUIixsYXN0RGF5OiJbaWVpcmkgXHhlMF0gTFQiLGxhc3RXZWVrOiJbc1x4ZmNyIGVsXSBkZGRkIFtsYXN0ZXUgXHhlMF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1''@;'; put 'put ''cmU6Im9zcHJlaSAlcyIscGFzdDoiamElcyIsczpnLHNzOmcsbTpnLG1tOmcsaDpnLGhoOmcsZDpnLGRkOmcsTTpnLE1NOmcseTpnLHl5Omd9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oeSg5NzU4NikpfSwy''@;'; put 'put ''MjIzNDpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoInR6bS1sYXRuIix7bW9udGhzOiJpbm5heXJfYnJcdTAyZTRheXJcdTAyZTRfbWFyXHUwMmU0c1x1MDJlNF9pYnJpcl9tYXl5d195d255d195d2x5d3pfXHUwMjYzd1x1MDE2MXRf''@;'; put 'put ''XHUwMTYxd3RhbmJpcl9rdFx1MDJlNHdiclx1MDJlNF9ud3dhbmJpcl9kd2puYmlyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJpbm5heXJfYnJcdTAyZTRheXJcdTAyZTRfbWFyXHUwMmU0c1x1MDJlNF9pYnJpcl9tYXl5d195d255d195d2x5d3pfXHUwMjYzd1x1MDE2MXRfXHUwMTYxd3Rh''@;'; put 'put ''bmJpcl9rdFx1MDJlNHdiclx1MDJlNF9ud3dhbmJpcl9kd2puYmlyIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJhc2FtYXNfYXluYXNfYXNpbmFzX2FrcmFzX2Frd2FzX2FzaW13YXNfYXNpXHUxZTBkeWFzIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6ImFzYW1hc19heW5hc19hc2luYXNfYWty''@;'; put 'put ''YXNfYWt3YXNfYXNpbXdhc19hc2lcdTFlMGR5YXMiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46ImFzYW1hc19heW5hc19hc2luYXNfYWtyYXNfYWt3YXNfYXNpbXdhc19hc2lcdTFlMGR5YXMiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoi''@;'; put 'put ''REQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6Ilthc2RraCBnXSBMVCIsbmV4dERheToiW2Fza2EgZ10gTFQiLG5leHRXZWVrOiJkZGRkIFtnXSBMVCIsbGFz''@;'; put 'put ''dERheToiW2Fzc2FudCBnXSBMVCIsbGFzdFdlZWs6ImRkZGQgW2ddIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJkYWRraCBzIHlhbiAlcyIscGFzdDoieWFuICVzIixzOiJpbWlrIixzczoiJWQgaW1payIsbToibWludVx1MWUwZCIsbW06IiVkIG1pbnVcdTFlMGQi''@;'; put 'put ''LGg6InNhXHUwMjViYSIsaGg6IiVkIHRhc3NhXHUwMjViaW4iLGQ6ImFzcyIsZGQ6IiVkIG9zc2FuIixNOiJheW93ciIsTU06IiVkIGl5eWlybiIseToiYXNnYXMiLHl5OiIlZCBpc2dhc24ifSx3ZWVrOntkb3c6Nixkb3k6MTJ9fSl9KHkoOTc1ODYpKX0sMTgwMTA6ZnVuY3Rpb24odWUsWCx5''@;'; put 'put ''KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJ0em0iLHttb250aHM6Ilx1MmQ0OVx1MmQ0Zlx1MmQ0Zlx1MmQzMFx1MmQ2Mlx1MmQ1NF9cdTJkMzFcdTJkNTVcdTJkMzBcdTJkNjJcdTJkNTVfXHUyZDRlXHUyZDMwXHUyZDU1XHUyZDVhX1x1MmQ0OVx1MmQzMVx1''@;'; put 'put ''MmQ1NFx1MmQ0OVx1MmQ1NF9cdTJkNGVcdTJkMzBcdTJkNjJcdTJkNjJcdTJkNTNfXHUyZDYyXHUyZDUzXHUyZDRmXHUyZDYyXHUyZDUzX1x1MmQ2Mlx1MmQ1M1x1MmQ0ZFx1MmQ2Mlx1MmQ1M1x1MmQ2M19cdTJkNTZcdTJkNTNcdTJkNWJcdTJkNWNfXHUyZDViXHUyZDUzXHUyZDVjXHUyZDMw''@;'; put 'put ''XHUyZDRmXHUyZDMxXHUyZDQ5XHUyZDU0X1x1MmQzZFx1MmQ1Zlx1MmQ1M1x1MmQzMVx1MmQ1NV9cdTJkNGZcdTJkNTNcdTJkNjFcdTJkMzBcdTJkNGZcdTJkMzFcdTJkNDlcdTJkNTRfXHUyZDM3XHUyZDUzXHUyZDRhXHUyZDRmXHUyZDMxXHUyZDQ5XHUyZDU0Ii5zcGxpdCgiXyIpLG1vbnRo''@;'; put 'put ''c1Nob3J0OiJcdTJkNDlcdTJkNGZcdTJkNGZcdTJkMzBcdTJkNjJcdTJkNTRfXHUyZDMxXHUyZDU1XHUyZDMwXHUyZDYyXHUyZDU1X1x1MmQ0ZVx1MmQzMFx1MmQ1NVx1MmQ1YV9cdTJkNDlcdTJkMzFcdTJkNTRcdTJkNDlcdTJkNTRfXHUyZDRlXHUyZDMwXHUyZDYyXHUyZDYyXHUyZDUzX1x1''@;'; put 'put ''MmQ2Mlx1MmQ1M1x1MmQ0Zlx1MmQ2Mlx1MmQ1M19cdTJkNjJcdTJkNTNcdTJkNGRcdTJkNjJcdTJkNTNcdTJkNjNfXHUyZDU2XHUyZDUzXHUyZDViXHUyZDVjX1x1MmQ1Ylx1MmQ1M1x1MmQ1Y1x1MmQzMFx1MmQ0Zlx1MmQzMVx1MmQ0OVx1MmQ1NF9cdTJkM2RcdTJkNWZcdTJkNTNcdTJkMzFc''@;'; put 'put ''dTJkNTVfXHUyZDRmXHUyZDUzXHUyZDYxXHUyZDMwXHUyZDRmXHUyZDMxXHUyZDQ5XHUyZDU0X1x1MmQzN1x1MmQ1M1x1MmQ0YVx1MmQ0Zlx1MmQzMVx1MmQ0OVx1MmQ1NCIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUyZDMwXHUyZDU5XHUyZDMwXHUyZDRlXHUyZDMwXHUyZDU5X1x1MmQzMFx1''@;'; put 'put ''MmQ2Mlx1MmQ0Zlx1MmQzMFx1MmQ1OV9cdTJkMzBcdTJkNTlcdTJkNDlcdTJkNGZcdTJkMzBcdTJkNTlfXHUyZDMwXHUyZDNkXHUyZDU0XHUyZDMwXHUyZDU5X1x1MmQzMFx1MmQzZFx1MmQ2MVx1MmQzMFx1MmQ1OV9cdTJkMzBcdTJkNTlcdTJkNDlcdTJkNGVcdTJkNjFcdTJkMzBcdTJkNTlf''@;'; put 'put ''XHUyZDMwXHUyZDU5XHUyZDQ5XHUyZDM5XHUyZDYyXHUyZDMwXHUyZDU5Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MmQzMFx1MmQ1OVx1MmQzMFx1MmQ0ZVx1MmQzMFx1MmQ1OV9cdTJkMzBcdTJkNjJcdTJkNGZcdTJkMzBcdTJkNTlfXHUyZDMwXHUyZDU5XHUyZDQ5XHUyZDRmXHUy''@;'; put 'put ''ZDMwXHUyZDU5X1x1MmQzMFx1MmQzZFx1MmQ1NFx1MmQzMFx1MmQ1OV9cdTJkMzBcdTJkM2RcdTJkNjFcdTJkMzBcdTJkNTlfXHUyZDMwXHUyZDU5XHUyZDQ5XHUyZDRlXHUyZDYxXHUyZDMwXHUyZDU5X1x1MmQzMFx1MmQ1OVx1MmQ0OVx1MmQzOVx1MmQ2Mlx1MmQzMFx1MmQ1OSIuc3BsaXQo''@;'; put 'put ''Il8iKSx3ZWVrZGF5c01pbjoiXHUyZDMwXHUyZDU5XHUyZDMwXHUyZDRlXHUyZDMwXHUyZDU5X1x1MmQzMFx1MmQ2Mlx1MmQ0Zlx1MmQzMFx1MmQ1OV9cdTJkMzBcdTJkNTlcdTJkNDlcdTJkNGZcdTJkMzBcdTJkNTlfXHUyZDMwXHUyZDNkXHUyZDU0XHUyZDMwXHUyZDU5X1x1MmQzMFx1MmQz''@;'; put 'put ''ZFx1MmQ2MVx1MmQzMFx1MmQ1OV9cdTJkMzBcdTJkNTlcdTJkNDlcdTJkNGVcdTJkNjFcdTJkMzBcdTJkNTlfXHUyZDMwXHUyZDU5XHUyZDQ5XHUyZDM5XHUyZDYyXHUyZDMwXHUyZDU5Ii5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRE''@;'; put 'put ''L01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUyZDMwXHUyZDU5XHUyZDM3XHUyZDQ1IFx1MmQzNF0gTFQiLG5leHREYXk6IltcdTJkMzBcdTJkNTlcdTJk''@;'; put 'put ''M2RcdTJkMzAgXHUyZDM0XSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x1MmQzNF0gTFQiLGxhc3REYXk6IltcdTJkMzBcdTJkNWFcdTJkMzBcdTJkNGZcdTJkNWMgXHUyZDM0XSBMVCIsbGFzdFdlZWs6ImRkZGQgW1x1MmQzNF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6''@;'; put 'put ''Ilx1MmQzN1x1MmQzMFx1MmQzN1x1MmQ0NSBcdTJkNTkgXHUyZDYyXHUyZDMwXHUyZDRmICVzIixwYXN0OiJcdTJkNjJcdTJkMzBcdTJkNGYgJXMiLHM6Ilx1MmQ0OVx1MmQ0ZVx1MmQ0OVx1MmQzZCIsc3M6IiVkIFx1MmQ0OVx1MmQ0ZVx1MmQ0OVx1MmQzZCIsbToiXHUyZDRlXHUyZDQ5XHUy''@;'; put 'put ''ZDRmXHUyZDUzXHUyZDNhIixtbToiJWQgXHUyZDRlXHUyZDQ5XHUyZDRmXHUyZDUzXHUyZDNhIixoOiJcdTJkNTlcdTJkMzBcdTJkNDRcdTJkMzAiLGhoOiIlZCBcdTJkNWNcdTJkMzBcdTJkNTlcdTJkNTlcdTJkMzBcdTJkNDRcdTJkNDlcdTJkNGYiLGQ6Ilx1MmQzMFx1MmQ1OVx1MmQ1OSIs''@;'; put 'put ''ZGQ6IiVkIG9cdTJkNTlcdTJkNTlcdTJkMzBcdTJkNGYiLE06Ilx1MmQzMFx1MmQ2Mm9cdTJkNTNcdTJkNTQiLE1NOiIlZCBcdTJkNDlcdTJkNjJcdTJkNjJcdTJkNDlcdTJkNTRcdTJkNGYiLHk6Ilx1MmQzMFx1MmQ1OVx1MmQzM1x1MmQzMFx1MmQ1OSIseXk6IiVkIFx1MmQ0OVx1MmQ1OVx1''@;'; put 'put ''MmQzM1x1MmQzMFx1MmQ1OVx1MmQ0ZiJ9LHdlZWs6e2Rvdzo2LGRveToxMn19KX0oeSg5NzU4NikpfSw2MzM0OTpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoInVnLWNuIix7bW9udGhzOiJcdTA2NGFcdTA2MjdcdTA2NDZcdTA2Y2Jc''@;'; put 'put ''dTA2MjdcdTA2MzFfXHUwNjQxXHUwNmQwXHUwNmNiXHUwNjMxXHUwNjI3XHUwNjQ0X1x1MDY0NVx1MDYyN1x1MDYzMVx1MDYyYV9cdTA2MjZcdTA2MjdcdTA2N2VcdTA2MzFcdTA2ZDBcdTA2NDRfXHUwNjQ1XHUwNjI3XHUwNjRhX1x1MDYyNlx1MDY0OVx1MDY0YVx1MDZjN1x1MDY0Nl9cdTA2''@;'; put 'put ''MjZcdTA2NDlcdTA2NGFcdTA2YzdcdTA2NDRfXHUwNjI2XHUwNjI3XHUwNmNiXHUwNjNhXHUwNmM3XHUwNjMzXHUwNjJhX1x1MDYzM1x1MDZkMFx1MDY0Nlx1MDYyYVx1MDZkNVx1MDYyOFx1MDY0OVx1MDYzMV9cdTA2MjZcdTA2YzZcdTA2NDNcdTA2MmFcdTA2ZDVcdTA2MjhcdTA2NDlcdTA2''@;'; put 'put ''MzFfXHUwNjQ2XHUwNjQ4XHUwNjRhXHUwNjI3XHUwNjI4XHUwNjQ5XHUwNjMxX1x1MDYyZlx1MDZkMFx1MDY0M1x1MDYyN1x1MDYyOFx1MDY0OVx1MDYzMSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwNjRhXHUwNjI3XHUwNjQ2XHUwNmNiXHUwNjI3XHUwNjMxX1x1MDY0MVx1MDZkMFx1''@;'; put 'put ''MDZjYlx1MDYzMVx1MDYyN1x1MDY0NF9cdTA2NDVcdTA2MjdcdTA2MzFcdTA2MmFfXHUwNjI2XHUwNjI3XHUwNjdlXHUwNjMxXHUwNmQwXHUwNjQ0X1x1MDY0NVx1MDYyN1x1MDY0YV9cdTA2MjZcdTA2NDlcdTA2NGFcdTA2YzdcdTA2NDZfXHUwNjI2XHUwNjQ5XHUwNjRhXHUwNmM3XHUwNjQ0''@;'; put 'put ''X1x1MDYyNlx1MDYyN1x1MDZjYlx1MDYzYVx1MDZjN1x1MDYzM1x1MDYyYV9cdTA2MzNcdTA2ZDBcdTA2NDZcdTA2MmFcdTA2ZDVcdTA2MjhcdTA2NDlcdTA2MzFfXHUwNjI2XHUwNmM2XHUwNjQzXHUwNjJhXHUwNmQ1XHUwNjI4XHUwNjQ5XHUwNjMxX1x1MDY0Nlx1MDY0OFx1MDY0YVx1MDYy''@;'; put 'put ''N1x1MDYyOFx1MDY0OVx1MDYzMV9cdTA2MmZcdTA2ZDBcdTA2NDNcdTA2MjdcdTA2MjhcdTA2NDlcdTA2MzEiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MDY0YVx1MDZkNVx1MDY0M1x1MDYzNFx1MDZkNVx1MDY0Nlx1MDYyOFx1MDZkNV9cdTA2MmZcdTA2YzhcdTA2MzRcdTA2ZDVcdTA2NDZc''@;'; put 'put ''dTA2MjhcdTA2ZDVfXHUwNjMzXHUwNmQ1XHUwNjRhXHUwNjM0XHUwNmQ1XHUwNjQ2XHUwNjI4XHUwNmQ1X1x1MDY4Nlx1MDYyN1x1MDYzMVx1MDYzNFx1MDZkNVx1MDY0Nlx1MDYyOFx1MDZkNV9cdTA2N2VcdTA2ZDVcdTA2NGFcdTA2MzRcdTA2ZDVcdTA2NDZcdTA2MjhcdTA2ZDVfXHUwNjJj''@;'; put 'put ''XHUwNmM4XHUwNjQ1XHUwNmQ1X1x1MDYzNFx1MDZkNVx1MDY0Nlx1MDYyOFx1MDZkNSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA2NGFcdTA2ZDVfXHUwNjJmXHUwNmM4X1x1MDYzM1x1MDZkNV9cdTA2ODZcdTA2MjdfXHUwNjdlXHUwNmQ1X1x1MDYyY1x1MDZjOF9cdTA2MzRcdTA2''@;'; put 'put ''ZDUiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDY0YVx1MDZkNV9cdTA2MmZcdTA2YzhfXHUwNjMzXHUwNmQ1X1x1MDY4Nlx1MDYyN19cdTA2N2VcdTA2ZDVfXHUwNjJjXHUwNmM4X1x1MDYzNFx1MDZkNSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhI''@;'; put 'put ''Om1tOnNzIixMOiJZWVlZLU1NLUREIixMTDoiWVlZWS1cdTA2NGFcdTA2NDlcdTA2NDRcdTA2NDlNLVx1MDYyNlx1MDYyN1x1MDY0YVx1MDY0Nlx1MDY0OVx1MDZhZEQtXHUwNjQzXHUwNmM4XHUwNjQ2XHUwNjQ5IixMTEw6IllZWVktXHUwNjRhXHUwNjQ5XHUwNjQ0XHUwNjQ5TS1cdTA2MjZc''@;'; put 'put ''dTA2MjdcdTA2NGFcdTA2NDZcdTA2NDlcdTA2YWRELVx1MDY0M1x1MDZjOFx1MDY0Nlx1MDY0OVx1MDYwYyBISDptbSIsTExMTDoiZGRkZFx1MDYwYyBZWVlZLVx1MDY0YVx1MDY0OVx1MDY0NFx1MDY0OU0tXHUwNjI2XHUwNjI3XHUwNjRhXHUwNjQ2XHUwNjQ5XHUwNmFkRC1cdTA2NDNcdTA2''@;'; put 'put ''YzhcdTA2NDZcdTA2NDlcdTA2MGMgSEg6bW0ifSxtZXJpZGllbVBhcnNlOi9cdTA2NGFcdTA2ZDBcdTA2MzFcdTA2NDlcdTA2NDUgXHUwNjQzXHUwNmQwXHUwNjg2XHUwNmQ1fFx1MDYzM1x1MDZkNVx1MDZiZVx1MDZkNVx1MDYzMXxcdTA2ODZcdTA2YzhcdTA2MzRcdTA2MmFcdTA2NDlcdTA2''@;'; put 'put ''NDYgXHUwNjI4XHUwNmM3XHUwNjMxXHUwNmM3XHUwNjQ2fFx1MDY4Nlx1MDZjOFx1MDYzNHxcdTA2ODZcdTA2YzhcdTA2MzRcdTA2MmFcdTA2NDlcdTA2NDYgXHUwNjQzXHUwNmQwXHUwNjRhXHUwNjQ5XHUwNjQ2fFx1MDY0M1x1MDZkNVx1MDY4Ni8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKGcs''@;'; put 'put ''Qil7cmV0dXJuIDEyPT09ZyYmKGc9MCksIlx1MDY0YVx1MDZkMFx1MDYzMVx1MDY0OVx1MDY0NSBcdTA2NDNcdTA2ZDBcdTA2ODZcdTA2ZDUiPT09Qnx8Ilx1MDYzM1x1MDZkNVx1MDZiZVx1MDZkNVx1MDYzMSI9PT1CfHwiXHUwNjg2XHUwNmM4XHUwNjM0XHUwNjJhXHUwNjQ5XHUwNjQ2IFx1''@;'; put 'put ''MDYyOFx1MDZjN1x1MDYzMVx1MDZjN1x1MDY0NiI9PT1CP2c6Ilx1MDY4Nlx1MDZjOFx1MDYzNFx1MDYyYVx1MDY0OVx1MDY0NiBcdTA2NDNcdTA2ZDBcdTA2NGFcdTA2NDlcdTA2NDYiPT09Qnx8Ilx1MDY0M1x1MDZkNVx1MDY4NiI9PT1CP2crMTI6Zz49MTE/ZzpnKzEyfSxtZXJpZGllbTpm''@;'; put 'put ''dW5jdGlvbihnLEIsdyl7dmFyIFA9MTAwKmcrQjtyZXR1cm4gUDw2MDA/Ilx1MDY0YVx1MDZkMFx1MDYzMVx1MDY0OVx1MDY0NSBcdTA2NDNcdTA2ZDBcdTA2ODZcdTA2ZDUiOlA8OTAwPyJcdTA2MzNcdTA2ZDVcdTA2YmVcdTA2ZDVcdTA2MzEiOlA8MTEzMD8iXHUwNjg2XHUwNmM4XHUwNjM0''@;'; put 'put ''XHUwNjJhXHUwNjQ5XHUwNjQ2IFx1MDYyOFx1MDZjN1x1MDYzMVx1MDZjN1x1MDY0NiI6UDwxMjMwPyJcdTA2ODZcdTA2YzhcdTA2MzQiOlA8MTgwMD8iXHUwNjg2XHUwNmM4XHUwNjM0XHUwNjJhXHUwNjQ5XHUwNjQ2IFx1MDY0M1x1MDZkMFx1MDY0YVx1MDY0OVx1MDY0NiI6Ilx1MDY0M1x1''@;'; put 'put ''MDZkNVx1MDY4NiJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwNjI4XHUwNmM4XHUwNmFmXHUwNmM4XHUwNjQ2IFx1MDYzM1x1MDYyN1x1MDYyNlx1MDZkNVx1MDYyYV0gTFQiLG5leHREYXk6IltcdTA2MjZcdTA2ZDVcdTA2MmFcdTA2ZDUgXHUwNjMzXHUwNjI3XHUwNjI2XHUwNmQ1XHUwNjJh''@;'; put 'put ''XSBMVCIsbmV4dFdlZWs6IltcdTA2NDNcdTA2ZDBcdTA2NDRcdTA2ZDVcdTA2MzFcdTA2NDNcdTA2NDldIGRkZGQgW1x1MDYzM1x1MDYyN1x1MDYyNlx1MDZkNVx1MDYyYV0gTFQiLGxhc3REYXk6IltcdTA2MmFcdTA2YzZcdTA2NDZcdTA2YzhcdTA2YWZcdTA2YzhcdTA2NDZdIExUIixsYXN0''@;'; put 'put ''V2VlazoiW1x1MDYyNlx1MDYyN1x1MDY0NFx1MDYyZlx1MDY0OVx1MDY0Nlx1MDY0Mlx1MDY0OV0gZGRkZCBbXHUwNjMzXHUwNjI3XHUwNjI2XHUwNmQ1XHUwNjJhXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgXHUwNjQzXHUwNmQwXHUwNjRhXHUwNjQ5XHUw''@;'; put 'put ''NjQ2IixwYXN0OiIlcyBcdTA2MjhcdTA2YzdcdTA2MzFcdTA2YzdcdTA2NDYiLHM6Ilx1MDY0Nlx1MDZkNVx1MDY4Nlx1MDY4Nlx1MDZkNSBcdTA2MzNcdTA2ZDBcdTA2NDNcdTA2NDhcdTA2NDZcdTA2MmEiLHNzOiIlZCBcdTA2MzNcdTA2ZDBcdTA2NDNcdTA2NDhcdTA2NDZcdTA2MmEiLG06''@;'; put 'put ''Ilx1MDYyOFx1MDY0OVx1MDYzMSBcdTA2NDVcdTA2NDlcdTA2NDZcdTA2YzdcdTA2MmEiLG1tOiIlZCBcdTA2NDVcdTA2NDlcdTA2NDZcdTA2YzdcdTA2MmEiLGg6Ilx1MDYyOFx1MDY0OVx1MDYzMSBcdTA2MzNcdTA2MjdcdTA2MjZcdTA2ZDVcdTA2MmEiLGhoOiIlZCBcdTA2MzNcdTA2Mjdc''@;'; put 'put ''dTA2MjZcdTA2ZDVcdTA2MmEiLGQ6Ilx1MDYyOFx1MDY0OVx1MDYzMSBcdTA2NDNcdTA2YzhcdTA2NDYiLGRkOiIlZCBcdTA2NDNcdTA2YzhcdTA2NDYiLE06Ilx1MDYyOFx1MDY0OVx1MDYzMSBcdTA2MjZcdTA2MjdcdTA2NGEiLE1NOiIlZCBcdTA2MjZcdTA2MjdcdTA2NGEiLHk6Ilx1MDYy''@;'; put 'put ''OFx1MDY0OVx1MDYzMSBcdTA2NGFcdTA2NDlcdTA2NDQiLHl5OiIlZCBcdTA2NGFcdTA2NDlcdTA2NDQifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KC1cdTA2NDNcdTA2YzhcdTA2NDZcdTA2NDl8LVx1MDYyNlx1MDYyN1x1MDY0YXwtXHUwNmJlXHUwNmQ1XHUwNjdlXHUwNjJh''@;'; put 'put ''XHUwNmQ1KS8sb3JkaW5hbDpmdW5jdGlvbihnLEIpe3N3aXRjaChCKXtjYXNlImQiOmNhc2UiRCI6Y2FzZSJEREQiOnJldHVybiBnKyItXHUwNjQzXHUwNmM4XHUwNjQ2XHUwNjQ5IjtjYXNlInciOmNhc2UiVyI6cmV0dXJuIGcrIi1cdTA2YmVcdTA2ZDVcdTA2N2VcdTA2MmFcdTA2ZDUiO2Rl''@;'; put 'put ''ZmF1bHQ6cmV0dXJuIGd9fSxwcmVwYXJzZTpmdW5jdGlvbihnKXtyZXR1cm4gZy5yZXBsYWNlKC9cdTA2MGMvZywiLCIpfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKGcpe3JldHVybiBnLnJlcGxhY2UoLywvZywiXHUwNjBjIil9LHdlZWs6e2RvdzoxLGRveTo3fX0pfSh5KDk3NTg2KSl9LDY4NDc5''@;'; put 'put ''OmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBnKEYsTyx6KXtyZXR1cm4ibSI9PT16P08/Ilx1MDQ0NVx1MDQzMlx1MDQzOFx1MDQzYlx1MDQzOFx1MDQzZFx1MDQzMCI6Ilx1MDQ0NVx1MDQzMlx1MDQzOFx1MDQzYlx1MDQzOFx1MDQzZFx1MDQ0''@;'; put 'put ''MyI6ImgiPT09ej9PPyJcdTA0MzNcdTA0M2VcdTA0MzRcdTA0MzhcdTA0M2RcdTA0MzAiOiJcdTA0MzNcdTA0M2VcdTA0MzRcdTA0MzhcdTA0M2RcdTA0NDMiOkYrIiAiK2Z1bmN0aW9uIF8oRixPKXt2YXIgej1GLnNwbGl0KCJfIik7cmV0dXJuIE8lMTA9PTEmJk8lMTAwIT0xMT96WzBdOk8l''@;'; put 'put ''MTA+PTImJk8lMTA8PTQmJihPJTEwMDwxMHx8TyUxMDA+PTIwKT96WzFdOnpbMl19KHtzczpPPyJcdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzRcdTA0MzBfXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0XHUwNDM4X1x1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0''@;'; put 'put ''M1x1MDQzZFx1MDQzNCI6Ilx1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNFx1MDQ0M19cdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzRcdTA0MzhfXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0IixtbTpPPyJcdTA0NDVcdTA0MzJcdTA0Mzhc''@;'; put 'put ''dTA0M2JcdTA0MzhcdTA0M2RcdTA0MzBfXHUwNDQ1XHUwNDMyXHUwNDM4XHUwNDNiXHUwNDM4XHUwNDNkXHUwNDM4X1x1MDQ0NVx1MDQzMlx1MDQzOFx1MDQzYlx1MDQzOFx1MDQzZCI6Ilx1MDQ0NVx1MDQzMlx1MDQzOFx1MDQzYlx1MDQzOFx1MDQzZFx1MDQ0M19cdTA0NDVcdTA0MzJcdTA0''@;'; put 'put ''MzhcdTA0M2JcdTA0MzhcdTA0M2RcdTA0MzhfXHUwNDQ1XHUwNDMyXHUwNDM4XHUwNDNiXHUwNDM4XHUwNDNkIixoaDpPPyJcdTA0MzNcdTA0M2VcdTA0MzRcdTA0MzhcdTA0M2RcdTA0MzBfXHUwNDMzXHUwNDNlXHUwNDM0XHUwNDM4XHUwNDNkXHUwNDM4X1x1MDQzM1x1MDQzZVx1MDQzNFx1''@;'; put 'put ''MDQzOFx1MDQzZCI6Ilx1MDQzM1x1MDQzZVx1MDQzNFx1MDQzOFx1MDQzZFx1MDQ0M19cdTA0MzNcdTA0M2VcdTA0MzRcdTA0MzhcdTA0M2RcdTA0MzhfXHUwNDMzXHUwNDNlXHUwNDM0XHUwNDM4XHUwNDNkIixkZDoiXHUwNDM0XHUwNDM1XHUwNDNkXHUwNDRjX1x1MDQzNFx1MDQzZFx1MDQ1''@;'; put 'put ''Nl9cdTA0MzRcdTA0M2RcdTA0NTZcdTA0MzIiLE1NOiJcdTA0M2NcdTA0NTZcdTA0NDFcdTA0NGZcdTA0NDZcdTA0NGNfXHUwNDNjXHUwNDU2XHUwNDQxXHUwNDRmXHUwNDQ2XHUwNDU2X1x1MDQzY1x1MDQ1Nlx1MDQ0MVx1MDQ0Zlx1MDQ0Nlx1MDQ1Nlx1MDQzMiIseXk6Ilx1MDQ0MFx1MDQ1''@;'; put 'put ''Nlx1MDQzYV9cdTA0NDBcdTA0M2VcdTA0M2FcdTA0MzhfXHUwNDQwXHUwNDNlXHUwNDNhXHUwNDU2XHUwNDMyIn1bel0sK0YpfWZ1bmN0aW9uIHcoRil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIEYrIlx1MDQzZSIrKDExPT09dGhpcy5ob3VycygpPyJcdTA0MzEiOiIiKSsiXSBMVCJ9fUku''@;'; put 'put ''ZGVmaW5lTG9jYWxlKCJ1ayIse21vbnRoczp7Zm9ybWF0OiJcdTA0NDFcdTA0NTZcdTA0NDdcdTA0M2RcdTA0NGZfXHUwNDNiXHUwNDRlXHUwNDQyXHUwNDNlXHUwNDMzXHUwNDNlX1x1MDQzMVx1MDQzNVx1MDQ0MFx1MDQzNVx1MDQzN1x1MDQzZFx1MDQ0Zl9cdTA0M2FcdTA0MzJcdTA0NTZc''@;'; put 'put ''dTA0NDJcdTA0M2RcdTA0NGZfXHUwNDQyXHUwNDQwXHUwNDMwXHUwNDMyXHUwNDNkXHUwNDRmX1x1MDQ0N1x1MDQzNVx1MDQ0MFx1MDQzMlx1MDQzZFx1MDQ0Zl9cdTA0M2JcdTA0MzhcdTA0M2ZcdTA0M2RcdTA0NGZfXHUwNDQxXHUwNDM1XHUwNDQwXHUwNDNmXHUwNDNkXHUwNDRmX1x1MDQz''@;'; put 'put ''Mlx1MDQzNVx1MDQ0MFx1MDQzNVx1MDQ0MVx1MDQzZFx1MDQ0Zl9cdTA0MzZcdTA0M2VcdTA0MzJcdTA0NDJcdTA0M2RcdTA0NGZfXHUwNDNiXHUwNDM4XHUwNDQxXHUwNDQyXHUwNDNlXHUwNDNmXHUwNDMwXHUwNDM0XHUwNDMwX1x1MDQzM1x1MDQ0MFx1MDQ0M1x1MDQzNFx1MDQzZFx1MDQ0''@;'; put 'put ''ZiIuc3BsaXQoIl8iKSxzdGFuZGFsb25lOiJcdTA0NDFcdTA0NTZcdTA0NDdcdTA0MzVcdTA0M2RcdTA0NGNfXHUwNDNiXHUwNDRlXHUwNDQyXHUwNDM4XHUwNDM5X1x1MDQzMVx1MDQzNVx1MDQ0MFx1MDQzNVx1MDQzN1x1MDQzNVx1MDQzZFx1MDQ0Y19cdTA0M2FcdTA0MzJcdTA0NTZcdTA0''@;'; put 'put ''NDJcdTA0MzVcdTA0M2RcdTA0NGNfXHUwNDQyXHUwNDQwXHUwNDMwXHUwNDMyXHUwNDM1XHUwNDNkXHUwNDRjX1x1MDQ0N1x1MDQzNVx1MDQ0MFx1MDQzMlx1MDQzNVx1MDQzZFx1MDQ0Y19cdTA0M2JcdTA0MzhcdTA0M2ZcdTA0MzVcdTA0M2RcdTA0NGNfXHUwNDQxXHUwNDM1XHUwNDQwXHUw''@;'; put 'put ''NDNmXHUwNDM1XHUwNDNkXHUwNDRjX1x1MDQzMlx1MDQzNVx1MDQ0MFx1MDQzNVx1MDQ0MVx1MDQzNVx1MDQzZFx1MDQ0Y19cdTA0MzZcdTA0M2VcdTA0MzJcdTA0NDJcdTA0MzVcdTA0M2RcdTA0NGNfXHUwNDNiXHUwNDM4XHUwNDQxXHUwNDQyXHUwNDNlXHUwNDNmXHUwNDMwXHUwNDM0X1x1''@;'; put 'put ''MDQzM1x1MDQ0MFx1MDQ0M1x1MDQzNFx1MDQzNVx1MDQzZFx1MDQ0YyIuc3BsaXQoIl8iKX0sbW9udGhzU2hvcnQ6Ilx1MDQ0MVx1MDQ1Nlx1MDQ0N19cdTA0M2JcdTA0NGVcdTA0NDJfXHUwNDMxXHUwNDM1XHUwNDQwX1x1MDQzYVx1MDQzMlx1MDQ1Nlx1MDQ0Ml9cdTA0NDJcdTA0NDBcdTA0''@;'; put 'put ''MzBcdTA0MzJfXHUwNDQ3XHUwNDM1XHUwNDQwXHUwNDMyX1x1MDQzYlx1MDQzOFx1MDQzZl9cdTA0NDFcdTA0MzVcdTA0NDBcdTA0M2ZfXHUwNDMyXHUwNDM1XHUwNDQwX1x1MDQzNlx1MDQzZVx1MDQzMlx1MDQ0Ml9cdTA0M2JcdTA0MzhcdTA0NDFcdTA0NDJfXHUwNDMzXHUwNDQwXHUwNDQz''@;'; put 'put ''XHUwNDM0Ii5zcGxpdCgiXyIpLHdlZWtkYXlzOmZ1bmN0aW9uIEIoRixPKXt2YXIgej17bm9taW5hdGl2ZToiXHUwNDNkXHUwNDM1XHUwNDM0XHUwNDU2XHUwNDNiXHUwNDRmX1x1MDQzZlx1MDQzZVx1MDQzZFx1MDQzNVx1MDQzNFx1MDQ1Nlx1MDQzYlx1MDQzZVx1MDQzYV9cdTA0MzJcdTA0''@;'; put 'put ''NTZcdTA0MzJcdTA0NDJcdTA0M2VcdTA0NDBcdTA0M2VcdTA0M2FfXHUwNDQxXHUwNDM1XHUwNDQwXHUwNDM1XHUwNDM0XHUwNDMwX1x1MDQ0N1x1MDQzNVx1MDQ0Mlx1MDQzMlx1MDQzNVx1MDQ0MF9cdTA0M2ZcdTIwMTlcdTA0NGZcdTA0NDJcdTA0M2RcdTA0MzhcdTA0NDZcdTA0NGZfXHUw''@;'; put 'put ''NDQxXHUwNDQzXHUwNDMxXHUwNDNlXHUwNDQyXHUwNDMwIi5zcGxpdCgiXyIpLGFjY3VzYXRpdmU6Ilx1MDQzZFx1MDQzNVx1MDQzNFx1MDQ1Nlx1MDQzYlx1MDQ0ZV9cdTA0M2ZcdTA0M2VcdTA0M2RcdTA0MzVcdTA0MzRcdTA0NTZcdTA0M2JcdTA0M2VcdTA0M2FfXHUwNDMyXHUwNDU2XHUw''@;'; put 'put ''NDMyXHUwNDQyXHUwNDNlXHUwNDQwXHUwNDNlXHUwNDNhX1x1MDQ0MVx1MDQzNVx1MDQ0MFx1MDQzNVx1MDQzNFx1MDQ0M19cdTA0NDdcdTA0MzVcdTA0NDJcdTA0MzJcdTA0MzVcdTA0NDBfXHUwNDNmXHUyMDE5XHUwNDRmXHUwNDQyXHUwNDNkXHUwNDM4XHUwNDQ2XHUwNDRlX1x1MDQ0MVx1''@;'; put 'put ''MDQ0M1x1MDQzMVx1MDQzZVx1MDQ0Mlx1MDQ0MyIuc3BsaXQoIl8iKSxnZW5pdGl2ZToiXHUwNDNkXHUwNDM1XHUwNDM0XHUwNDU2XHUwNDNiXHUwNDU2X1x1MDQzZlx1MDQzZVx1MDQzZFx1MDQzNVx1MDQzNFx1MDQ1Nlx1MDQzYlx1MDQzYVx1MDQzMF9cdTA0MzJcdTA0NTZcdTA0MzJcdTA0''@;'; put 'put ''NDJcdTA0M2VcdTA0NDBcdTA0M2FcdTA0MzBfXHUwNDQxXHUwNDM1XHUwNDQwXHUwNDM1XHUwNDM0XHUwNDM4X1x1MDQ0N1x1MDQzNVx1MDQ0Mlx1MDQzMlx1MDQzNVx1MDQ0MFx1MDQzM1x1MDQzMF9cdTA0M2ZcdTIwMTlcdTA0NGZcdTA0NDJcdTA0M2RcdTA0MzhcdTA0NDZcdTA0NTZfXHUw''@;'; put 'put ''NDQxXHUwNDQzXHUwNDMxXHUwNDNlXHUwNDQyXHUwNDM4Ii5zcGxpdCgiXyIpfTtyZXR1cm4hMD09PUY/ei5ub21pbmF0aXZlLnNsaWNlKDEsNykuY29uY2F0KHoubm9taW5hdGl2ZS5zbGljZSgwLDEpKTpGP3pbLyhcW1tcdTA0MTJcdTA0MzJcdTA0MjNcdTA0NDNdXF0pID9kZGRkLy50ZXN0''@;'; put 'put ''KE8pPyJhY2N1c2F0aXZlIjovXFs/KD86XHUwNDNjXHUwNDM4XHUwNDNkXHUwNDQzXHUwNDNiXHUwNDNlXHUwNDU3fFx1MDQzZFx1MDQzMFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQzZlx1MDQzZFx1MDQzZVx1MDQ1Nyk/ID9cXSA/ZGRkZC8udGVzdChPKT8iZ2VuaXRpdmUiOiJub21pbmF0aXZl''@;'; put 'put ''Il1bRi5kYXkoKV06ei5ub21pbmF0aXZlfSx3ZWVrZGF5c1Nob3J0OiJcdTA0M2RcdTA0MzRfXHUwNDNmXHUwNDNkX1x1MDQzMlx1MDQ0Ml9cdTA0NDFcdTA0NDBfXHUwNDQ3XHUwNDQyX1x1MDQzZlx1MDQ0Ml9cdTA0NDFcdTA0MzEiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDQzZFx1''@;'; put 'put ''MDQzNF9cdTA0M2ZcdTA0M2RfXHUwNDMyXHUwNDQyX1x1MDQ0MVx1MDQ0MF9cdTA0NDdcdTA0NDJfXHUwNDNmXHUwNDQyX1x1MDQ0MVx1MDQzMSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRCBNTU1NIFlZ''@;'; put 'put ''WVkgXHUwNDQwLiIsTExMOiJEIE1NTU0gWVlZWSBcdTA0NDAuLCBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgXHUwNDQwLiwgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheTp3KCJbXHUwNDIxXHUwNDRjXHUwNDNlXHUwNDMzXHUwNDNlXHUwNDM0XHUwNDNkXHUwNDU2ICIpLG5leHRE''@;'; put 'put ''YXk6dygiW1x1MDQxN1x1MDQzMFx1MDQzMlx1MDQ0Mlx1MDQ0MFx1MDQzMCAiKSxsYXN0RGF5OncoIltcdTA0MTJcdTA0NDdcdTA0M2VcdTA0NDBcdTA0MzAgIiksbmV4dFdlZWs6dygiW1x1MDQyM10gZGRkZCBbIiksbGFzdFdlZWs6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5kYXkoKSl7Y2Fz''@;'; put 'put ''ZSAwOmNhc2UgMzpjYXNlIDU6Y2FzZSA2OnJldHVybiB3KCJbXHUwNDFjXHUwNDM4XHUwNDNkXHUwNDQzXHUwNDNiXHUwNDNlXHUwNDU3XSBkZGRkIFsiKS5jYWxsKHRoaXMpO2Nhc2UgMTpjYXNlIDI6Y2FzZSA0OnJldHVybiB3KCJbXHUwNDFjXHUwNDM4XHUwNDNkXHUwNDQzXHUwNDNiXHUw''@;'; put 'put ''NDNlXHUwNDMzXHUwNDNlXSBkZGRkIFsiKS5jYWxsKHRoaXMpfX0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUwNDM3XHUwNDMwICVzIixwYXN0OiIlcyBcdTA0NDJcdTA0M2VcdTA0M2NcdTA0NDMiLHM6Ilx1MDQzNFx1MDQzNVx1MDQzYVx1MDQ1Nlx1MDQzYlx1MDQ0''@;'; put 'put ''Y1x1MDQzYVx1MDQzMCBcdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzQiLHNzOmcsbTpnLG1tOmcsaDoiXHUwNDMzXHUwNDNlXHUwNDM0XHUwNDM4XHUwNDNkXHUwNDQzIixoaDpnLGQ6Ilx1MDQzNFx1MDQzNVx1MDQzZFx1MDQ0YyIsZGQ6ZyxNOiJcdTA0M2NcdTA0NTZcdTA0''@;'; put 'put ''NDFcdTA0NGZcdTA0NDZcdTA0NGMiLE1NOmcseToiXHUwNDQwXHUwNDU2XHUwNDNhIix5eTpnfSxtZXJpZGllbVBhcnNlOi9cdTA0M2RcdTA0M2VcdTA0NDdcdTA0NTZ8XHUwNDQwXHUwNDMwXHUwNDNkXHUwNDNhXHUwNDQzfFx1MDQzNFx1MDQzZFx1MDQ0ZnxcdTA0MzJcdTA0MzVcdTA0NDdc''@;'; put 'put ''dTA0M2VcdTA0NDBcdTA0MzAvLGlzUE06ZnVuY3Rpb24oRil7cmV0dXJuL14oXHUwNDM0XHUwNDNkXHUwNDRmfFx1MDQzMlx1MDQzNVx1MDQ0N1x1MDQzZVx1MDQ0MFx1MDQzMCkkLy50ZXN0KEYpfSxtZXJpZGllbTpmdW5jdGlvbihGLE8seil7cmV0dXJuIEY8ND8iXHUwNDNkXHUwNDNlXHUw''@;'; put 'put ''NDQ3XHUwNDU2IjpGPDEyPyJcdTA0NDBcdTA0MzBcdTA0M2RcdTA0M2FcdTA0NDMiOkY8MTc/Ilx1MDQzNFx1MDQzZFx1MDQ0ZiI6Ilx1MDQzMlx1MDQzNVx1MDQ0N1x1MDQzZVx1MDQ0MFx1MDQzMCJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0tKFx1MDQzOXxcdTA0MzNcdTA0''@;'; put 'put ''M2UpLyxvcmRpbmFsOmZ1bmN0aW9uKEYsTyl7c3dpdGNoKE8pe2Nhc2UiTSI6Y2FzZSJkIjpjYXNlIkRERCI6Y2FzZSJ3IjpjYXNlIlciOnJldHVybiBGKyItXHUwNDM5IjtjYXNlIkQiOnJldHVybiBGKyItXHUwNDMzXHUwNDNlIjtkZWZhdWx0OnJldHVybiBGfX0sd2Vlazp7ZG93OjEsZG95''@;'; put 'put ''Ojd9fSl9KHkoOTc1ODYpKX0sNDMwMjQ6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO3ZhciBfPVsiXHUwNjJjXHUwNjQ2XHUwNjQ4XHUwNjMxXHUwNmNjIiwiXHUwNjQxXHUwNjMxXHUwNjQ4XHUwNjMxXHUwNmNjIiwiXHUwNjQ1XHUwNjI3XHUwNjMxXHUwNjg2''@;'; put 'put ''IiwiXHUwNjI3XHUwNjdlXHUwNjMxXHUwNmNjXHUwNjQ0IiwiXHUwNjQ1XHUwNjI2XHUwNmNjIiwiXHUwNjJjXHUwNjQ4XHUwNjQ2IiwiXHUwNjJjXHUwNjQ4XHUwNjQ0XHUwNjI3XHUwNjI2XHUwNmNjIiwiXHUwNjI3XHUwNmFmXHUwNjMzXHUwNjJhIiwiXHUwNjMzXHUwNjJhXHUwNjQ1XHUw''@;'; put 'put ''NjI4XHUwNjMxIiwiXHUwNjI3XHUwNmE5XHUwNjJhXHUwNjQ4XHUwNjI4XHUwNjMxIiwiXHUwNjQ2XHUwNjQ4XHUwNjQ1XHUwNjI4XHUwNjMxIiwiXHUwNjJmXHUwNjMzXHUwNjQ1XHUwNjI4XHUwNjMxIl0sZz1bIlx1MDYyN1x1MDYyYVx1MDY0OFx1MDYyN1x1MDYzMSIsIlx1MDY3ZVx1MDZj''@;'; put 'put ''Y1x1MDYzMSIsIlx1MDY0NVx1MDY0Nlx1MDZhZlx1MDY0NCIsIlx1MDYyOFx1MDYyZlx1MDZiZSIsIlx1MDYyY1x1MDY0NVx1MDYzOVx1MDYzMVx1MDYyN1x1MDYyYSIsIlx1MDYyY1x1MDY0NVx1MDYzOVx1MDZjMSIsIlx1MDZjMVx1MDY0MVx1MDYyYVx1MDZjMSJdO0kuZGVmaW5lTG9jYWxl''@;'; put 'put ''KCJ1ciIse21vbnRoczpfLG1vbnRoc1Nob3J0Ol8sd2Vla2RheXM6Zyx3ZWVrZGF5c1Nob3J0Omcsd2Vla2RheXNNaW46Zyxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6''@;'; put 'put ''bW0iLExMTEw6ImRkZGRcdTA2MGMgRCBNTU1NIFlZWVkgSEg6bW0ifSxtZXJpZGllbVBhcnNlOi9cdTA2MzVcdTA2MjhcdTA2MmR8XHUwNjM0XHUwNjI3XHUwNjQ1Lyxpc1BNOmZ1bmN0aW9uKHcpe3JldHVybiJcdTA2MzRcdTA2MjdcdTA2NDUiPT09d30sbWVyaWRpZW06ZnVuY3Rpb24odyxQ''@;'; put 'put ''LEYpe3JldHVybiB3PDEyPyJcdTA2MzVcdTA2MjhcdTA2MmQiOiJcdTA2MzRcdTA2MjdcdTA2NDUifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDYyMlx1MDYyYyBcdTA2MjhcdTA2NDhcdTA2NDJcdTA2MmFdIExUIixuZXh0RGF5OiJbXHUwNmE5XHUwNjQ0IFx1MDYyOFx1MDY0OFx1MDY0Mlx1''@;'; put 'put ''MDYyYV0gTFQiLG5leHRXZWVrOiJkZGRkIFtcdTA2MjhcdTA2NDhcdTA2NDJcdTA2MmFdIExUIixsYXN0RGF5OiJbXHUwNmFmXHUwNjMwXHUwNjM0XHUwNjJhXHUwNmMxIFx1MDYzMVx1MDY0OFx1MDYzMiBcdTA2MjhcdTA2NDhcdTA2NDJcdTA2MmFdIExUIixsYXN0V2VlazoiW1x1MDZhZlx1''@;'; put 'put ''MDYzMFx1MDYzNFx1MDYyYVx1MDZjMV0gZGRkZCBbXHUwNjI4XHUwNjQ4XHUwNjQyXHUwNjJhXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgXHUwNjI4XHUwNjM5XHUwNjJmIixwYXN0OiIlcyBcdTA2NDJcdTA2MjhcdTA2NDQiLHM6Ilx1MDY4Nlx1MDY0Nlx1''@;'; put 'put ''MDYyZiBcdTA2MzNcdTA2Y2NcdTA2YTlcdTA2NDZcdTA2ODgiLHNzOiIlZCBcdTA2MzNcdTA2Y2NcdTA2YTlcdTA2NDZcdTA2ODgiLG06Ilx1MDYyN1x1MDZjY1x1MDZhOSBcdTA2NDVcdTA2NDZcdTA2NzkiLG1tOiIlZCBcdTA2NDVcdTA2NDZcdTA2NzkiLGg6Ilx1MDYyN1x1MDZjY1x1MDZh''@;'; put 'put ''OSBcdTA2YWZcdTA2YmVcdTA2NDZcdTA2NzlcdTA2YzEiLGhoOiIlZCBcdTA2YWZcdTA2YmVcdTA2NDZcdTA2NzlcdTA2ZDIiLGQ6Ilx1MDYyN1x1MDZjY1x1MDZhOSBcdTA2MmZcdTA2NDYiLGRkOiIlZCBcdTA2MmZcdTA2NDYiLE06Ilx1MDYyN1x1MDZjY1x1MDZhOSBcdTA2NDVcdTA2Mjdc''@;'; put 'put ''dTA2YzEiLE1NOiIlZCBcdTA2NDVcdTA2MjdcdTA2YzEiLHk6Ilx1MDYyN1x1MDZjY1x1MDZhOSBcdTA2MzNcdTA2MjdcdTA2NDQiLHl5OiIlZCBcdTA2MzNcdTA2MjdcdTA2NDQifSxwcmVwYXJzZTpmdW5jdGlvbih3KXtyZXR1cm4gdy5yZXBsYWNlKC9cdTA2MGMvZywiLCIpfSxwb3N0Zm9y''@;'; put 'put ''bWF0OmZ1bmN0aW9uKHcpe3JldHVybiB3LnJlcGxhY2UoLywvZywiXHUwNjBjIil9LHdlZWs6e2RvdzoxLGRveTo0fX0pfSh5KDk3NTg2KSl9LDcyMzc2OmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgidXotbGF0biIse21vbnRoczoi''@;'; put 'put ''WWFudmFyX0ZldnJhbF9NYXJ0X0FwcmVsX01heV9JeXVuX0l5dWxfQXZndXN0X1NlbnRhYnJfT2t0YWJyX05veWFicl9EZWthYnIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Illhbl9GZXZfTWFyX0Fwcl9NYXlfSXl1bl9JeXVsX0F2Z19TZW5fT2t0X05veV9EZWsiLnNwbGl0KCJfIiksd2Vl''@;'; put 'put ''a2RheXM6Illha3NoYW5iYV9EdXNoYW5iYV9TZXNoYW5iYV9DaG9yc2hhbmJhX1BheXNoYW5iYV9KdW1hX1NoYW5iYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJZYWtfRHVzaF9TZXNoX0Nob3JfUGF5X0p1bV9TaGFuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJZYV9EdV9TZV9DaG9f''@;'; put 'put ''UGFfSnVfU2hhIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiRCBNTU1NIFlZWVksIGRkZGQgSEg6bW0ifSxjYWxlbmRhcjp7c2Ft''@;'; put 'put ''ZURheToiW0J1Z3VuIHNvYXRdIExUIFtkYV0iLG5leHREYXk6IltFcnRhZ2FdIExUIFtkYV0iLG5leHRXZWVrOiJkZGRkIFtrdW5pIHNvYXRdIExUIFtkYV0iLGxhc3REYXk6IltLZWNoYSBzb2F0XSBMVCBbZGFdIixsYXN0V2VlazoiW08ndGdhbl0gZGRkZCBba3VuaSBzb2F0XSBMVCBbZGFd''@;'; put 'put ''IixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJZYXFpbiAlcyBpY2hpZGEiLHBhc3Q6IkJpciBuZWNoYSAlcyBvbGRpbiIsczoic29uaXlhIixzczoiJWQgc29uaXlhIixtOiJiaXIgZGFxaXFhIixtbToiJWQgZGFxaXFhIixoOiJiaXIgc29hdCIsaGg6IiVkIHNvYXQiLGQ6''@;'; put 'put ''ImJpciBrdW4iLGRkOiIlZCBrdW4iLE06ImJpciBveSIsTU06IiVkIG95Iix5OiJiaXIgeWlsIix5eToiJWQgeWlsIn0sd2Vlazp7ZG93OjEsZG95Ojd9fSl9KHkoOTc1ODYpKX0sMTk4MDA6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxl''@;'; put 'put ''KCJ1eiIse21vbnRoczoiXHUwNDRmXHUwNDNkXHUwNDMyXHUwNDMwXHUwNDQwX1x1MDQ0NFx1MDQzNVx1MDQzMlx1MDQ0MFx1MDQzMFx1MDQzYl9cdTA0M2NcdTA0MzBcdTA0NDBcdTA0NDJfXHUwNDMwXHUwNDNmXHUwNDQwXHUwNDM1XHUwNDNiX1x1MDQzY1x1MDQzMFx1MDQzOV9cdTA0Mzhc''@;'; put 'put ''dTA0NGVcdTA0M2RfXHUwNDM4XHUwNDRlXHUwNDNiX1x1MDQzMFx1MDQzMlx1MDQzM1x1MDQ0M1x1MDQ0MVx1MDQ0Ml9cdTA0NDFcdTA0MzVcdTA0M2RcdTA0NDJcdTA0NGZcdTA0MzFcdTA0NDBfXHUwNDNlXHUwNDNhXHUwNDQyXHUwNDRmXHUwNDMxXHUwNDQwX1x1MDQzZFx1MDQzZVx1MDQ0''@;'; put 'put ''Zlx1MDQzMVx1MDQ0MF9cdTA0MzRcdTA0MzVcdTA0M2FcdTA0MzBcdTA0MzFcdTA0NDAiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MDQ0Zlx1MDQzZFx1MDQzMl9cdTA0NDRcdTA0MzVcdTA0MzJfXHUwNDNjXHUwNDMwXHUwNDQwX1x1MDQzMFx1MDQzZlx1MDQ0MF9cdTA0M2NcdTA0MzBc''@;'; put 'put ''dTA0MzlfXHUwNDM4XHUwNDRlXHUwNDNkX1x1MDQzOFx1MDQ0ZVx1MDQzYl9cdTA0MzBcdTA0MzJcdTA0MzNfXHUwNDQxXHUwNDM1XHUwNDNkX1x1MDQzZVx1MDQzYVx1MDQ0Ml9cdTA0M2RcdTA0M2VcdTA0NGZfXHUwNDM0XHUwNDM1XHUwNDNhIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTA0''@;'; put 'put ''MmZcdTA0M2FcdTA0NDhcdTA0MzBcdTA0M2RcdTA0MzFcdTA0MzBfXHUwNDE0XHUwNDQzXHUwNDQ4XHUwNDMwXHUwNDNkXHUwNDMxXHUwNDMwX1x1MDQyMVx1MDQzNVx1MDQ0OFx1MDQzMFx1MDQzZFx1MDQzMVx1MDQzMF9cdTA0MjdcdTA0M2VcdTA0NDBcdTA0NDhcdTA0MzBcdTA0M2RcdTA0''@;'; put 'put ''MzFcdTA0MzBfXHUwNDFmXHUwNDMwXHUwNDM5XHUwNDQ4XHUwNDMwXHUwNDNkXHUwNDMxXHUwNDMwX1x1MDQxNlx1MDQ0M1x1MDQzY1x1MDQzMF9cdTA0MjhcdTA0MzBcdTA0M2RcdTA0MzFcdTA0MzAiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwNDJmXHUwNDNhXHUwNDQ4X1x1MDQx''@;'; put 'put ''NFx1MDQ0M1x1MDQ0OF9cdTA0MjFcdTA0MzVcdTA0NDhfXHUwNDI3XHUwNDNlXHUwNDQwX1x1MDQxZlx1MDQzMFx1MDQzOV9cdTA0MTZcdTA0NDNcdTA0M2NfXHUwNDI4XHUwNDMwXHUwNDNkIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA0MmZcdTA0M2FfXHUwNDE0XHUwNDQzX1x1MDQy''@;'; put 'put ''MVx1MDQzNV9cdTA0MjdcdTA0M2VfXHUwNDFmXHUwNDMwX1x1MDQxNlx1MDQ0M19cdTA0MjhcdTA0MzAiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhI''@;'; put 'put ''Om1tIixMTExMOiJEIE1NTU0gWVlZWSwgZGRkZCBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwNDExXHUwNDQzXHUwNDMzXHUwNDQzXHUwNDNkIFx1MDQ0MVx1MDQzZVx1MDQzMFx1MDQ0Ml0gTFQgW1x1MDQzNFx1MDQzMF0iLG5leHREYXk6IltcdTA0MmRcdTA0NDBcdTA0NDJcdTA0''@;'; put 'put ''MzBcdTA0MzNcdTA0MzBdIExUIFtcdTA0MzRcdTA0MzBdIixuZXh0V2VlazoiZGRkZCBbXHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM4IFx1MDQ0MVx1MDQzZVx1MDQzMFx1MDQ0Ml0gTFQgW1x1MDQzNFx1MDQzMF0iLGxhc3REYXk6IltcdTA0MWFcdTA0MzVcdTA0NDdcdTA0MzAgXHUwNDQxXHUw''@;'; put 'put ''NDNlXHUwNDMwXHUwNDQyXSBMVCBbXHUwNDM0XHUwNDMwXSIsbGFzdFdlZWs6IltcdTA0MjNcdTA0NDJcdTA0MzNcdTA0MzBcdTA0M2RdIGRkZGQgW1x1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzOCBcdTA0NDFcdTA0M2VcdTA0MzBcdTA0NDJdIExUIFtcdTA0MzRcdTA0MzBdIixzYW1lRWxzZToi''@;'; put 'put ''TCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJcdTA0MmZcdTA0M2FcdTA0MzhcdTA0M2QgJXMgXHUwNDM4XHUwNDQ3XHUwNDM4XHUwNDM0XHUwNDMwIixwYXN0OiJcdTA0MTFcdTA0MzhcdTA0NDAgXHUwNDNkXHUwNDM1XHUwNDQ3XHUwNDMwICVzIFx1MDQzZVx1MDQzYlx1MDQzNFx1MDQzOFx1''@;'; put 'put ''MDQzZCIsczoiXHUwNDQ0XHUwNDQzXHUwNDQwXHUwNDQxXHUwNDMwXHUwNDQyIixzczoiJWQgXHUwNDQ0XHUwNDQzXHUwNDQwXHUwNDQxXHUwNDMwXHUwNDQyIixtOiJcdTA0MzFcdTA0MzhcdTA0NDAgXHUwNDM0XHUwNDMwXHUwNDNhXHUwNDM4XHUwNDNhXHUwNDMwIixtbToiJWQgXHUwNDM0''@;'; put 'put ''XHUwNDMwXHUwNDNhXHUwNDM4XHUwNDNhXHUwNDMwIixoOiJcdTA0MzFcdTA0MzhcdTA0NDAgXHUwNDQxXHUwNDNlXHUwNDMwXHUwNDQyIixoaDoiJWQgXHUwNDQxXHUwNDNlXHUwNDMwXHUwNDQyIixkOiJcdTA0MzFcdTA0MzhcdTA0NDAgXHUwNDNhXHUwNDQzXHUwNDNkIixkZDoiJWQgXHUw''@;'; put 'put ''NDNhXHUwNDQzXHUwNDNkIixNOiJcdTA0MzFcdTA0MzhcdTA0NDAgXHUwNDNlXHUwNDM5IixNTToiJWQgXHUwNDNlXHUwNDM5Iix5OiJcdTA0MzFcdTA0MzhcdTA0NDAgXHUwNDM5XHUwNDM4XHUwNDNiIix5eToiJWQgXHUwNDM5XHUwNDM4XHUwNDNiIn0sd2Vlazp7ZG93OjEsZG95Ojd9fSl9''@;'; put 'put ''KHkoOTc1ODYpKX0sODkzNjY6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJ2aSIse21vbnRoczoidGhceGUxbmcgMV90aFx4ZTFuZyAyX3RoXHhlMW5nIDNfdGhceGUxbmcgNF90aFx4ZTFuZyA1X3RoXHhlMW5nIDZfdGhceGUxbmcg''@;'; put 'put ''N190aFx4ZTFuZyA4X3RoXHhlMW5nIDlfdGhceGUxbmcgMTBfdGhceGUxbmcgMTFfdGhceGUxbmcgMTIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6IlRoZyAwMV9UaGcgMDJfVGhnIDAzX1RoZyAwNF9UaGcgMDVfVGhnIDA2X1RoZyAwN19UaGcgMDhfVGhnIDA5X1RoZyAxMF9UaGcgMTFfVGhn''@;'; put 'put ''IDEyIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6ImNoXHUxZWU3IG5oXHUxZWFkdF90aFx1MWVlOSBoYWlfdGhcdTFlZTkgYmFfdGhcdTFlZTkgdFx1MDFiMF90aFx1MWVlOSBuXHUwMTAzbV90aFx1MWVlOSBzXHhlMXVfdGhcdTFlZTkgYlx1MWVhM3kiLnNwbGl0''@;'; put 'put ''KCJfIiksd2Vla2RheXNTaG9ydDoiQ05fVDJfVDNfVDRfVDVfVDZfVDciLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IkNOX1QyX1QzX1Q0X1Q1X1Q2X1Q3Ii5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxtZXJpZGllbVBhcnNlOi9zYXxjaC9pLGlzUE06ZnVuY3Rpb24oZyl7cmV0''@;'; put 'put ''dXJuL15jaCQvaS50ZXN0KGcpfSxtZXJpZGllbTpmdW5jdGlvbihnLEIsdyl7cmV0dXJuIGc8MTI/dz8ic2EiOiJTQSI6dz8iY2giOiJDSCJ9LGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gW25cdTAxMDNtXSBZWVlZ''@;'; put 'put ''IixMTEw6IkQgTU1NTSBbblx1MDEwM21dIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBbblx1MDEwM21dIFlZWVkgSEg6bW0iLGw6IkREL00vWVlZWSIsbGw6IkQgTU1NIFlZWVkiLGxsbDoiRCBNTU0gWVlZWSBISDptbSIsbGxsbDoiZGRkLCBEIE1NTSBZWVlZIEhIOm1tIn0sY2Fs''@;'; put 'put ''ZW5kYXI6e3NhbWVEYXk6IltIXHhmNG0gbmF5IGxceGZhY10gTFQiLG5leHREYXk6IltOZ1x4ZTB5IG1haSBsXHhmYWNdIExUIixuZXh0V2VlazoiZGRkZCBbdHVcdTFlYTduIHRcdTFlZGJpIGxceGZhY10gTFQiLGxhc3REYXk6IltIXHhmNG0gcXVhIGxceGZhY10gTFQiLGxhc3RXZWVrOiJk''@;'; put 'put ''ZGRkIFt0dVx1MWVhN24gdHJcdTAxYjBcdTFlZGJjIGxceGZhY10gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIHRcdTFlZGJpIixwYXN0OiIlcyB0clx1MDFiMFx1MWVkYmMiLHM6InZceGUwaSBnaVx4ZTJ5IixzczoiJWQgZ2lceGUyeSIsbToibVx1MWVkOXQg''@;'; put 'put ''cGhceGZhdCIsbW06IiVkIHBoXHhmYXQiLGg6Im1cdTFlZDl0IGdpXHUxZWRkIixoaDoiJWQgZ2lcdTFlZGQiLGQ6Im1cdTFlZDl0IG5nXHhlMHkiLGRkOiIlZCBuZ1x4ZTB5Iix3OiJtXHUxZWQ5dCB0dVx1MWVhN24iLHd3OiIlZCB0dVx1MWVhN24iLE06Im1cdTFlZDl0IHRoXHhlMW5nIixN''@;'; put 'put ''TToiJWQgdGhceGUxbmciLHk6Im1cdTFlZDl0IG5cdTAxMDNtIix5eToiJWQgblx1MDEwM20ifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9LyxvcmRpbmFsOmZ1bmN0aW9uKGcpe3JldHVybiBnfSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oeSg5NzU4NikpfSw2OTcwMjpmdW5jdGlv''@;'; put 'put ''bih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoIngtcHNldWRvIix7bW9udGhzOiJKflx4ZTFceGYxXHhmYVx4ZTF+clx4ZmRfRn5ceGU5YnJceGZhflx4ZTFyXHhmZF9+TVx4ZTFyY35oX1x4YzFwfnJceGVkbF9+TVx4ZTFceGZkX35KXHhmYVx4ZjFc''@;'; put 'put ''eGU5fl9KXHhmYWx+XHhmZF9ceGMxXHhmYX5nXHhmYXN0fl9TXHhlOXB+dFx4ZTltYn5ceGU5cl9ceGQzfmN0XHhmM2J+XHhlOXJfXHhkMX5ceGYzdlx4ZTltfmJceGU5cl9+RFx4ZTljXHhlOX5tYlx4ZTlyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKflx4ZTFceGYxX35GXHhlOWJffk1c''@;'; put 'put ''eGUxcl9+XHhjMXByX35NXHhlMVx4ZmRffkpceGZhXHhmMV9+Slx4ZmFsX35ceGMxXHhmYWdfflNceGU5cF9+XHhkM2N0X35ceGQxXHhmM3ZffkRceGU5YyIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJTflx4ZmFceGYxZFx4ZTF+XHhmZF9NXHhmM35ceGYxZFx4''@;'; put 'put ''ZTFceGZkfl9UXHhmYVx4ZTl+c2RceGUxXHhmZH5fV1x4ZTlkflx4ZjFceGU5c2R+XHhlMVx4ZmRfVH5oXHhmYXJzfmRceGUxXHhmZF9+RnJceGVkZH5ceGUxXHhmZF9Tflx4ZTF0XHhmYXJ+ZFx4ZTFceGZkIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlN+XHhmYVx4ZjFffk1ceGYzXHhm''@;'; put 'put ''MV9+VFx4ZmFceGU5X35XXHhlOWRfflRoXHhmYV9+RnJceGVkX35TXHhlMXQiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlN+XHhmYV9NXHhmM35fVFx4ZmFffldceGU5X1R+aF9Gcn5fU1x4ZTEiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoi''@;'; put 'put ''SEg6bW0iLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1R+XHhmM2RceGUxflx4ZmQgXHhlMXRdIExUIixuZXh0RGF5OiJbVH5ceGYzbVx4ZjN+''@;'; put 'put ''cnJceGYzfncgXHhlMXRdIExUIixuZXh0V2VlazoiZGRkZCBbXHhlMXRdIExUIixsYXN0RGF5OiJbXHhkZH5ceGU5c3R+XHhlOXJkXHhlMX5ceGZkIFx4ZTF0XSBMVCIsbGFzdFdlZWs6IltMflx4ZTFzdF0gZGRkZCBbXHhlMXRdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0''@;'; put 'put ''dXJlOiJceGVkflx4ZjEgJXMiLHBhc3Q6IiVzIFx4ZTF+Z1x4ZjMiLHM6Ilx4ZTEgfmZceGU5dyB+c1x4ZTljXHhmM35ceGYxZHMiLHNzOiIlZCBzflx4ZTljXHhmM1x4ZjF+ZHMiLG06Ilx4ZTEgfm1ceGVkXHhmMX5ceGZhdFx4ZTkiLG1tOiIlZCBtflx4ZWRceGYxXHhmYX50XHhlOXMiLGg6''@;'; put 'put ''Ilx4ZTF+XHhmMSBoXHhmM35ceGZhciIsaGg6IiVkIGh+XHhmM1x4ZmFycyIsZDoiXHhlMSB+ZFx4ZTFceGZkIixkZDoiJWQgZH5ceGUxXHhmZHMiLE06Ilx4ZTEgfm1ceGYzXHhmMX50aCIsTU06IiVkIG1+XHhmM1x4ZjF0fmhzIix5OiJceGUxIH5ceGZkXHhlOVx4ZTFyIix5eToiJWQgXHhm''@;'; put 'put ''ZH5ceGU5XHhlMXJzIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfSh0aHxzdHxuZHxyZCkvLG9yZGluYWw6ZnVuY3Rpb24oZyl7dmFyIEI9ZyUxMDtyZXR1cm4gZysoMT09fn4oZyUxMDAvMTApPyJ0aCI6MT09PUI/InN0IjoyPT09Qj8ibmQiOjM9PT1CPyJyZCI6InRoIil9LHdl''@;'; put 'put ''ZWs6e2RvdzoxLGRveTo0fX0pfSh5KDk3NTg2KSl9LDcyNjU1OmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgieW8iLHttb250aHM6IlNcdTFlYjlcdTAzMDFyXHUxZWI5XHUwMzAxX0VcdTAzMDByZVx1MDMwMGxlXHUwMzAwX1x1MWVi''@;'; put 'put ''OHJcdTFlYjlcdTAzMDBuYVx1MDMwMF9JXHUwMzAwZ2JlXHUwMzAxX0VcdTAzMDBiaWJpX09cdTAzMDBrdVx1MDMwMGR1X0FnXHUxZWI5bW9fT1x1MDMwMGd1XHUwMzAxbl9Pd2V3ZV9cdTFlY2NcdTAzMDB3YVx1MDMwMHJhXHUwMzAwX0JlXHUwMzAxbHVcdTAzMDFfXHUxZWNjXHUwMzAwcFx1''@;'; put 'put ''MWViOVx1MDMwMFx1MDMwMCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiU1x1MWViOVx1MDMwMXJfRVx1MDMwMHJsX1x1MWViOHJuX0lcdTAzMDBnYl9FXHUwMzAwYmlfT1x1MDMwMGt1XHUwMzAwX0FnXHUxZWI5X09cdTAzMDBndVx1MDMwMV9Pd2VfXHUxZWNjXHUwMzAwd2FcdTAzMDBfQmVc''@;'; put 'put ''dTAzMDFsX1x1MWVjY1x1MDMwMHBcdTFlYjlcdTAzMDBcdTAzMDAiLnNwbGl0KCJfIiksd2Vla2RheXM6IkFcdTAzMDBpXHUwMzAwa3VcdTAzMDFfQWplXHUwMzAxX0lcdTAzMDBzXHUxZWI5XHUwMzAxZ3VuX1x1MWVjY2pcdTFlY2RcdTAzMDFydVx1MDMwMV9cdTFlY2NqXHUxZWNkXHUwMzAx''@;'; put 'put ''Ylx1MWVjZF9cdTFlYjh0aVx1MDMwMF9BXHUwMzAwYmFcdTAzMDFtXHUxZWI5XHUwMzAxdGEiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiQVx1MDMwMGlcdTAzMDBrX0FqZVx1MDMwMV9JXHUwMzAwc1x1MWViOVx1MDMwMV9cdTFlY2Nqcl9cdTFlY2NqYl9cdTFlYjh0aVx1MDMwMF9BXHUw''@;'; put 'put ''MzAwYmFcdTAzMDEiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IkFcdTAzMDBpXHUwMzAwX0FqX0lcdTAzMDBzX1x1MWVjY3JfXHUxZWNjYl9cdTFlYjh0X0FcdTAzMDBiIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiaDptbSBBIixMVFM6Img6bW06c3MgQSIsTDoiREQvTU0vWVlZ''@;'; put 'put ''WSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIGg6bW0gQSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgaDptbSBBIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltPXHUwMzAwbmlcdTAzMDAgbmldIExUIixuZXh0RGF5OiJbXHUxZWNjXHUwMzAwbGEgbmldIExUIixuZXh0V2Vlazoi''@;'; put 'put ''ZGRkZCBbXHUxZWNjc1x1MWViOVx1MDMwMCB0b1x1MDMwMW4nYlx1MWVjZF0gW25pXSBMVCIsbGFzdERheToiW0FcdTAzMDBuYSBuaV0gTFQiLGxhc3RXZWVrOiJkZGRkIFtcdTFlY2NzXHUxZWI5XHUwMzAwIHRvXHUwMzAxbFx1MWVjZFx1MDMwMV0gW25pXSBMVCIsc2FtZUVsc2U6IkwifSxy''@;'; put 'put ''ZWxhdGl2ZVRpbWU6e2Z1dHVyZToibmlcdTAzMDEgJXMiLHBhc3Q6IiVzIGtcdTFlY2RqYVx1MDMwMSIsczoiaVx1MDMwMHNcdTFlYjlqdVx1MDMwMSBhYXlhXHUwMzAxIGRpZSIsc3M6ImFheWFcdTAzMDEgJWQiLG06ImlcdTAzMDBzXHUxZWI5anVcdTAzMDEga2FuIixtbToiaVx1MDMwMHNc''@;'; put 'put ''dTFlYjlqdVx1MDMwMSAlZCIsaDoid2FcdTAzMDFrYXRpIGthbiIsaGg6IndhXHUwMzAxa2F0aSAlZCIsZDoiXHUxZWNkalx1MWVjZFx1MDMwMSBrYW4iLGRkOiJcdTFlY2RqXHUxZWNkXHUwMzAxICVkIixNOiJvc3VcdTAzMDAga2FuIixNTToib3N1XHUwMzAwICVkIix5OiJcdTFlY2RkdVx1''@;'; put 'put ''MDMwMW4ga2FuIix5eToiXHUxZWNkZHVcdTAzMDFuICVkIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXHUxZWNkalx1MWVjZFx1MDMwMVxzXGR7MSwyfS8sb3JkaW5hbDoiXHUxZWNkalx1MWVjZFx1MDMwMSAlZCIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KHkoOTc1ODYpKX0sNTc1OmZ1bmN0''@;'; put 'put ''aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgiemgtY24iLHttb250aHM6Ilx1NGUwMFx1NjcwOF9cdTRlOGNcdTY3MDhfXHU0ZTA5XHU2NzA4X1x1NTZkYlx1NjcwOF9cdTRlOTRcdTY3MDhfXHU1MTZkXHU2NzA4X1x1NGUwM1x1NjcwOF9cdTUx''@;'; put 'put ''NmJcdTY3MDhfXHU0ZTVkXHU2NzA4X1x1NTM0MVx1NjcwOF9cdTUzNDFcdTRlMDBcdTY3MDhfXHU1MzQxXHU0ZThjXHU2NzA4Ii5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiIxXHU2NzA4XzJcdTY3MDhfM1x1NjcwOF80XHU2NzA4XzVcdTY3MDhfNlx1NjcwOF83XHU2NzA4XzhcdTY3MDhfOVx1''@;'; put 'put ''NjcwOF8xMFx1NjcwOF8xMVx1NjcwOF8xMlx1NjcwOCIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHU2NjFmXHU2NzFmXHU2NWU1X1x1NjYxZlx1NjcxZlx1NGUwMF9cdTY2MWZcdTY3MWZcdTRlOGNfXHU2NjFmXHU2NzFmXHU0ZTA5X1x1NjYxZlx1NjcxZlx1NTZkYl9cdTY2MWZcdTY3MWZcdTRl''@;'; put 'put ''OTRfXHU2NjFmXHU2NzFmXHU1MTZkIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1NTQ2OFx1NjVlNV9cdTU0NjhcdTRlMDBfXHU1NDY4XHU0ZThjX1x1NTQ2OFx1NGUwOV9cdTU0NjhcdTU2ZGJfXHU1NDY4XHU0ZTk0X1x1NTQ2OFx1NTE2ZCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoi''@;'; put 'put ''XHU2NWU1X1x1NGUwMF9cdTRlOGNfXHU0ZTA5X1x1NTZkYl9cdTRlOTRfXHU1MTZkIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IllZWVkvTU0vREQiLExMOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTUiLExMTDoiWVlZWVx1NWU3NE1c''@;'; put 'put ''dTY3MDhEXHU2NWU1QWhcdTcwYjltbVx1NTIwNiIsTExMTDoiWVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1ZGRkZEFoXHU3MGI5bW1cdTUyMDYiLGw6IllZWVkvTS9EIixsbDoiWVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1IixsbGw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNSBISDptbSIsbGxs''@;'; put 'put ''bDoiWVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1ZGRkZCBISDptbSJ9LG1lcmlkaWVtUGFyc2U6L1x1NTFjY1x1NjY2OHxcdTY1ZTlcdTRlMGF8XHU0ZTBhXHU1MzQ4fFx1NGUyZFx1NTM0OHxcdTRlMGJcdTUzNDh8XHU2NjVhXHU0ZTBhLyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24oZyxCKXtyZXR1''@;'; put 'put ''cm4gMTI9PT1nJiYoZz0wKSwiXHU1MWNjXHU2NjY4Ij09PUJ8fCJcdTY1ZTlcdTRlMGEiPT09Qnx8Ilx1NGUwYVx1NTM0OCI9PT1CP2c6Ilx1NGUwYlx1NTM0OCI9PT1CfHwiXHU2NjVhXHU0ZTBhIj09PUI/ZysxMjpnPj0xMT9nOmcrMTJ9LG1lcmlkaWVtOmZ1bmN0aW9uKGcsQix3KXt2YXIg''@;'; put 'put ''UD0xMDAqZytCO3JldHVybiBQPDYwMD8iXHU1MWNjXHU2NjY4IjpQPDkwMD8iXHU2NWU5XHU0ZTBhIjpQPDExMzA/Ilx1NGUwYVx1NTM0OCI6UDwxMjMwPyJcdTRlMmRcdTUzNDgiOlA8MTgwMD8iXHU0ZTBiXHU1MzQ4IjoiXHU2NjVhXHU0ZTBhIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTRl''@;'; put 'put ''Y2FcdTU5MjldTFQiLG5leHREYXk6IltcdTY2MGVcdTU5MjldTFQiLG5leHRXZWVrOmZ1bmN0aW9uKGcpe3JldHVybiBnLndlZWsoKSE9PXRoaXMud2VlaygpPyJbXHU0ZTBiXWRkZExUIjoiW1x1NjcyY11kZGRMVCJ9LGxhc3REYXk6IltcdTY2MjhcdTU5MjldTFQiLGxhc3RXZWVrOmZ1bmN0''@;'; put 'put ''aW9uKGcpe3JldHVybiB0aGlzLndlZWsoKSE9PWcud2VlaygpPyJbXHU0ZTBhXWRkZExUIjoiW1x1NjcyY11kZGRMVCJ9LHNhbWVFbHNlOiJMIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShcdTY1ZTV8XHU2NzA4fFx1NTQ2OCkvLG9yZGluYWw6ZnVuY3Rpb24oZyxCKXtzd2l0''@;'; put 'put ''Y2goQil7Y2FzZSJkIjpjYXNlIkQiOmNhc2UiREREIjpyZXR1cm4gZysiXHU2NWU1IjtjYXNlIk0iOnJldHVybiBnKyJcdTY3MDgiO2Nhc2UidyI6Y2FzZSJXIjpyZXR1cm4gZysiXHU1NDY4IjtkZWZhdWx0OnJldHVybiBnfX0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzXHU1NDBlIixwYXN0''@;'; put 'put ''OiIlc1x1NTI0ZCIsczoiXHU1MWUwXHU3OWQyIixzczoiJWQgXHU3OWQyIixtOiIxIFx1NTIwNlx1OTQ5ZiIsbW06IiVkIFx1NTIwNlx1OTQ5ZiIsaDoiMSBcdTVjMGZcdTY1ZjYiLGhoOiIlZCBcdTVjMGZcdTY1ZjYiLGQ6IjEgXHU1OTI5IixkZDoiJWQgXHU1OTI5Iix3OiIxIFx1NTQ2OCIs''@;'; put 'put ''d3c6IiVkIFx1NTQ2OCIsTToiMSBcdTRlMmFcdTY3MDgiLE1NOiIlZCBcdTRlMmFcdTY3MDgiLHk6IjEgXHU1ZTc0Iix5eToiJWQgXHU1ZTc0In0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KHkoOTc1ODYpKX0sMTgzNTE6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3Qi''@;'; put 'put ''O0kuZGVmaW5lTG9jYWxlKCJ6aC1oayIse21vbnRoczoiXHU0ZTAwXHU2NzA4X1x1NGU4Y1x1NjcwOF9cdTRlMDlcdTY3MDhfXHU1NmRiXHU2NzA4X1x1NGU5NFx1NjcwOF9cdTUxNmRcdTY3MDhfXHU0ZTAzXHU2NzA4X1x1NTE2Ylx1NjcwOF9cdTRlNWRcdTY3MDhfXHU1MzQxXHU2NzA4X1x1''@;'; put 'put ''NTM0MVx1NGUwMFx1NjcwOF9cdTUzNDFcdTRlOGNcdTY3MDgiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6IjFcdTY3MDhfMlx1NjcwOF8zXHU2NzA4XzRcdTY3MDhfNVx1NjcwOF82XHU2NzA4XzdcdTY3MDhfOFx1NjcwOF85XHU2NzA4XzEwXHU2NzA4XzExXHU2NzA4XzEyXHU2NzA4Ii5zcGxp''@;'; put 'put ''dCgiXyIpLHdlZWtkYXlzOiJcdTY2MWZcdTY3MWZcdTY1ZTVfXHU2NjFmXHU2NzFmXHU0ZTAwX1x1NjYxZlx1NjcxZlx1NGU4Y19cdTY2MWZcdTY3MWZcdTRlMDlfXHU2NjFmXHU2NzFmXHU1NmRiX1x1NjYxZlx1NjcxZlx1NGU5NF9cdTY2MWZcdTY3MWZcdTUxNmQiLnNwbGl0KCJfIiksd2Vl''@;'; put 'put ''a2RheXNTaG9ydDoiXHU5MDMxXHU2NWU1X1x1OTAzMVx1NGUwMF9cdTkwMzFcdTRlOGNfXHU5MDMxXHU0ZTA5X1x1OTAzMVx1NTZkYl9cdTkwMzFcdTRlOTRfXHU5MDMxXHU1MTZkIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTY1ZTVfXHU0ZTAwX1x1NGU4Y19cdTRlMDlfXHU1NmRiX1x1''@;'; put 'put ''NGU5NF9cdTUxNmQiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiWVlZWS9NTS9ERCIsTEw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNSIsTExMOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTUgSEg6bW0iLExMTEw6IllZWVlcdTVlNzRN''@;'; put 'put ''XHU2NzA4RFx1NjVlNWRkZGQgSEg6bW0iLGw6IllZWVkvTS9EIixsbDoiWVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1IixsbGw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNSBISDptbSIsbGxsbDoiWVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1ZGRkZCBISDptbSJ9LG1lcmlkaWVtUGFyc2U6L1x1''@;'; put 'put ''NTFjY1x1NjY2OHxcdTY1ZTlcdTRlMGF8XHU0ZTBhXHU1MzQ4fFx1NGUyZFx1NTM0OHxcdTRlMGJcdTUzNDh8XHU2NjVhXHU0ZTBhLyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24oZyxCKXtyZXR1cm4gMTI9PT1nJiYoZz0wKSwiXHU1MWNjXHU2NjY4Ij09PUJ8fCJcdTY1ZTlcdTRlMGEiPT09Qnx8''@;'; put 'put ''Ilx1NGUwYVx1NTM0OCI9PT1CP2c6Ilx1NGUyZFx1NTM0OCI9PT1CP2c+PTExP2c6ZysxMjoiXHU0ZTBiXHU1MzQ4Ij09PUJ8fCJcdTY2NWFcdTRlMGEiPT09Qj9nKzEyOnZvaWQgMH0sbWVyaWRpZW06ZnVuY3Rpb24oZyxCLHcpe3ZhciBQPTEwMCpnK0I7cmV0dXJuIFA8NjAwPyJcdTUxY2Nc''@;'; put 'put ''dTY2NjgiOlA8OTAwPyJcdTY1ZTlcdTRlMGEiOlA8MTIwMD8iXHU0ZTBhXHU1MzQ4IjoxMjAwPT09UD8iXHU0ZTJkXHU1MzQ4IjpQPDE4MDA/Ilx1NGUwYlx1NTM0OCI6Ilx1NjY1YVx1NGUwYSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHU0ZWNhXHU1OTI5XUxUIixuZXh0RGF5OiJbXHU2NjBl''@;'; put 'put ''XHU1OTI5XUxUIixuZXh0V2VlazoiW1x1NGUwYl1kZGRkTFQiLGxhc3REYXk6IltcdTY2MjhcdTU5MjldTFQiLGxhc3RXZWVrOiJbXHU0ZTBhXWRkZGRMVCIsc2FtZUVsc2U6IkwifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KFx1NjVlNXxcdTY3MDh8XHU5MDMxKS8sb3JkaW5h''@;'; put 'put ''bDpmdW5jdGlvbihnLEIpe3N3aXRjaChCKXtjYXNlImQiOmNhc2UiRCI6Y2FzZSJEREQiOnJldHVybiBnKyJcdTY1ZTUiO2Nhc2UiTSI6cmV0dXJuIGcrIlx1NjcwOCI7Y2FzZSJ3IjpjYXNlIlciOnJldHVybiBnKyJcdTkwMzEiO2RlZmF1bHQ6cmV0dXJuIGd9fSxyZWxhdGl2ZVRpbWU6e2Z1''@;'; put 'put ''dHVyZToiJXNcdTVmOGMiLHBhc3Q6IiVzXHU1MjRkIixzOiJcdTVlN2VcdTc5ZDIiLHNzOiIlZCBcdTc5ZDIiLG06IjEgXHU1MjA2XHU5NDE4IixtbToiJWQgXHU1MjA2XHU5NDE4IixoOiIxIFx1NWMwZlx1NjY0MiIsaGg6IiVkIFx1NWMwZlx1NjY0MiIsZDoiMSBcdTU5MjkiLGRkOiIlZCBc''@;'; put 'put ''dTU5MjkiLE06IjEgXHU1MDBiXHU2NzA4IixNTToiJWQgXHU1MDBiXHU2NzA4Iix5OiIxIFx1NWU3NCIseXk6IiVkIFx1NWU3NCJ9fSl9KHkoOTc1ODYpKX0sNTE2MjY6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJ6aC1tbyIse21v''@;'; put 'put ''bnRoczoiXHU0ZTAwXHU2NzA4X1x1NGU4Y1x1NjcwOF9cdTRlMDlcdTY3MDhfXHU1NmRiXHU2NzA4X1x1NGU5NFx1NjcwOF9cdTUxNmRcdTY3MDhfXHU0ZTAzXHU2NzA4X1x1NTE2Ylx1NjcwOF9cdTRlNWRcdTY3MDhfXHU1MzQxXHU2NzA4X1x1NTM0MVx1NGUwMFx1NjcwOF9cdTUzNDFcdTRl''@;'; put 'put ''OGNcdTY3MDgiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6IjFcdTY3MDhfMlx1NjcwOF8zXHU2NzA4XzRcdTY3MDhfNVx1NjcwOF82XHU2NzA4XzdcdTY3MDhfOFx1NjcwOF85XHU2NzA4XzEwXHU2NzA4XzExXHU2NzA4XzEyXHU2NzA4Ii5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTY2MWZcdTY3''@;'; put 'put ''MWZcdTY1ZTVfXHU2NjFmXHU2NzFmXHU0ZTAwX1x1NjYxZlx1NjcxZlx1NGU4Y19cdTY2MWZcdTY3MWZcdTRlMDlfXHU2NjFmXHU2NzFmXHU1NmRiX1x1NjYxZlx1NjcxZlx1NGU5NF9cdTY2MWZcdTY3MWZcdTUxNmQiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHU5MDMxXHU2NWU1X1x1''@;'; put 'put ''OTAzMVx1NGUwMF9cdTkwMzFcdTRlOGNfXHU5MDMxXHU0ZTA5X1x1OTAzMVx1NTZkYl9cdTkwMzFcdTRlOTRfXHU5MDMxXHU1MTZkIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTY1ZTVfXHU0ZTAwX1x1NGU4Y19cdTRlMDlfXHU1NmRiX1x1NGU5NF9cdTUxNmQiLnNwbGl0KCJfIiksbG9u''@;'; put 'put ''Z0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNSIsTExMOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTUgSEg6bW0iLExMTEw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNWRkZGQgSEg6bW0iLGw6''@;'; put 'put ''IkQvTS9ZWVlZIixsbDoiWVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1IixsbGw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNSBISDptbSIsbGxsbDoiWVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1ZGRkZCBISDptbSJ9LG1lcmlkaWVtUGFyc2U6L1x1NTFjY1x1NjY2OHxcdTY1ZTlcdTRlMGF8XHU0''@;'; put 'put ''ZTBhXHU1MzQ4fFx1NGUyZFx1NTM0OHxcdTRlMGJcdTUzNDh8XHU2NjVhXHU0ZTBhLyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24oZyxCKXtyZXR1cm4gMTI9PT1nJiYoZz0wKSwiXHU1MWNjXHU2NjY4Ij09PUJ8fCJcdTY1ZTlcdTRlMGEiPT09Qnx8Ilx1NGUwYVx1NTM0OCI9PT1CP2c6Ilx1NGUy''@;'; put 'put ''ZFx1NTM0OCI9PT1CP2c+PTExP2c6ZysxMjoiXHU0ZTBiXHU1MzQ4Ij09PUJ8fCJcdTY2NWFcdTRlMGEiPT09Qj9nKzEyOnZvaWQgMH0sbWVyaWRpZW06ZnVuY3Rpb24oZyxCLHcpe3ZhciBQPTEwMCpnK0I7cmV0dXJuIFA8NjAwPyJcdTUxY2NcdTY2NjgiOlA8OTAwPyJcdTY1ZTlcdTRlMGEi''@;'; put 'put ''OlA8MTEzMD8iXHU0ZTBhXHU1MzQ4IjpQPDEyMzA/Ilx1NGUyZFx1NTM0OCI6UDwxODAwPyJcdTRlMGJcdTUzNDgiOiJcdTY2NWFcdTRlMGEifSxjYWxlbmRhcjp7c2FtZURheToiW1x1NGVjYVx1NTkyOV0gTFQiLG5leHREYXk6IltcdTY2MGVcdTU5MjldIExUIixuZXh0V2VlazoiW1x1NGUw''@;'; put 'put ''Yl1kZGRkIExUIixsYXN0RGF5OiJbXHU2NjI4XHU1OTI5XSBMVCIsbGFzdFdlZWs6IltcdTRlMGFdZGRkZCBMVCIsc2FtZUVsc2U6IkwifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KFx1NjVlNXxcdTY3MDh8XHU5MDMxKS8sb3JkaW5hbDpmdW5jdGlvbihnLEIpe3N3aXRjaChC''@;'; put 'put ''KXtjYXNlImQiOmNhc2UiRCI6Y2FzZSJEREQiOnJldHVybiBnKyJcdTY1ZTUiO2Nhc2UiTSI6cmV0dXJuIGcrIlx1NjcwOCI7Y2FzZSJ3IjpjYXNlIlciOnJldHVybiBnKyJcdTkwMzEiO2RlZmF1bHQ6cmV0dXJuIGd9fSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXNcdTUxNjciLHBhc3Q6IiVz''@;'; put 'put ''XHU1MjRkIixzOiJcdTVlN2VcdTc5ZDIiLHNzOiIlZCBcdTc5ZDIiLG06IjEgXHU1MjA2XHU5NDE4IixtbToiJWQgXHU1MjA2XHU5NDE4IixoOiIxIFx1NWMwZlx1NjY0MiIsaGg6IiVkIFx1NWMwZlx1NjY0MiIsZDoiMSBcdTU5MjkiLGRkOiIlZCBcdTU5MjkiLE06IjEgXHU1MDBiXHU2NzA4''@;'; put 'put ''IixNTToiJWQgXHU1MDBiXHU2NzA4Iix5OiIxIFx1NWU3NCIseXk6IiVkIFx1NWU3NCJ9fSl9KHkoOTc1ODYpKX0sODg4NzpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoInpoLXR3Iix7bW9udGhzOiJcdTRlMDBcdTY3MDhfXHU0ZThj''@;'; put 'put ''XHU2NzA4X1x1NGUwOVx1NjcwOF9cdTU2ZGJcdTY3MDhfXHU0ZTk0XHU2NzA4X1x1NTE2ZFx1NjcwOF9cdTRlMDNcdTY3MDhfXHU1MTZiXHU2NzA4X1x1NGU1ZFx1NjcwOF9cdTUzNDFcdTY3MDhfXHU1MzQxXHU0ZTAwXHU2NzA4X1x1NTM0MVx1NGU4Y1x1NjcwOCIuc3BsaXQoIl8iKSxtb250''@;'; put 'put ''aHNTaG9ydDoiMVx1NjcwOF8yXHU2NzA4XzNcdTY3MDhfNFx1NjcwOF81XHU2NzA4XzZcdTY3MDhfN1x1NjcwOF84XHU2NzA4XzlcdTY3MDhfMTBcdTY3MDhfMTFcdTY3MDhfMTJcdTY3MDgiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1NjYxZlx1NjcxZlx1NjVlNV9cdTY2MWZcdTY3MWZcdTRl''@;'; put 'put ''MDBfXHU2NjFmXHU2NzFmXHU0ZThjX1x1NjYxZlx1NjcxZlx1NGUwOV9cdTY2MWZcdTY3MWZcdTU2ZGJfXHU2NjFmXHU2NzFmXHU0ZTk0X1x1NjYxZlx1NjcxZlx1NTE2ZCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTkwMzFcdTY1ZTVfXHU5MDMxXHU0ZTAwX1x1OTAzMVx1NGU4Y19c''@;'; put 'put ''dTkwMzFcdTRlMDlfXHU5MDMxXHU1NmRiX1x1OTAzMVx1NGU5NF9cdTkwMzFcdTUxNmQiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1NjVlNV9cdTRlMDBfXHU0ZThjX1x1NGUwOV9cdTU2ZGJfXHU0ZTk0X1x1NTE2ZCIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixM''@;'; put 'put ''VFM6IkhIOm1tOnNzIixMOiJZWVlZL01NL0REIixMTDoiWVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1IixMTEw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNSBISDptbSIsTExMTDoiWVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1ZGRkZCBISDptbSIsbDoiWVlZWS9NL0QiLGxsOiJZWVlZXHU1ZTc0''@;'; put 'put ''TVx1NjcwOERcdTY1ZTUiLGxsbDoiWVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1IEhIOm1tIixsbGxsOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTVkZGRkIEhIOm1tIn0sbWVyaWRpZW1QYXJzZTovXHU1MWNjXHU2NjY4fFx1NjVlOVx1NGUwYXxcdTRlMGFcdTUzNDh8XHU0ZTJkXHU1MzQ4fFx1''@;'; put 'put ''NGUwYlx1NTM0OHxcdTY2NWFcdTRlMGEvLG1lcmlkaWVtSG91cjpmdW5jdGlvbihnLEIpe3JldHVybiAxMj09PWcmJihnPTApLCJcdTUxY2NcdTY2NjgiPT09Qnx8Ilx1NjVlOVx1NGUwYSI9PT1CfHwiXHU0ZTBhXHU1MzQ4Ij09PUI/ZzoiXHU0ZTJkXHU1MzQ4Ij09PUI/Zz49MTE/ZzpnKzEy''@;'; put 'put ''OiJcdTRlMGJcdTUzNDgiPT09Qnx8Ilx1NjY1YVx1NGUwYSI9PT1CP2crMTI6dm9pZCAwfSxtZXJpZGllbTpmdW5jdGlvbihnLEIsdyl7dmFyIFA9MTAwKmcrQjtyZXR1cm4gUDw2MDA/Ilx1NTFjY1x1NjY2OCI6UDw5MDA/Ilx1NjVlOVx1NGUwYSI6UDwxMTMwPyJcdTRlMGFcdTUzNDgiOlA8''@;'; put 'put ''MTIzMD8iXHU0ZTJkXHU1MzQ4IjpQPDE4MDA/Ilx1NGUwYlx1NTM0OCI6Ilx1NjY1YVx1NGUwYSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHU0ZWNhXHU1OTI5XSBMVCIsbmV4dERheToiW1x1NjYwZVx1NTkyOV0gTFQiLG5leHRXZWVrOiJbXHU0ZTBiXWRkZGQgTFQiLGxhc3REYXk6IltcdTY2''@;'; put 'put ''MjhcdTU5MjldIExUIixsYXN0V2VlazoiW1x1NGUwYV1kZGRkIExUIixzYW1lRWxzZToiTCJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oXHU2NWU1fFx1NjcwOHxcdTkwMzEpLyxvcmRpbmFsOmZ1bmN0aW9uKGcsQil7c3dpdGNoKEIpe2Nhc2UiZCI6Y2FzZSJEIjpjYXNlIkRE''@;'; put 'put ''RCI6cmV0dXJuIGcrIlx1NjVlNSI7Y2FzZSJNIjpyZXR1cm4gZysiXHU2NzA4IjtjYXNlInciOmNhc2UiVyI6cmV0dXJuIGcrIlx1OTAzMSI7ZGVmYXVsdDpyZXR1cm4gZ319LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlc1x1NWY4YyIscGFzdDoiJXNcdTUyNGQiLHM6Ilx1NWU3ZVx1NzlkMiIs''@;'; put 'put ''c3M6IiVkIFx1NzlkMiIsbToiMSBcdTUyMDZcdTk0MTgiLG1tOiIlZCBcdTUyMDZcdTk0MTgiLGg6IjEgXHU1YzBmXHU2NjQyIixoaDoiJWQgXHU1YzBmXHU2NjQyIixkOiIxIFx1NTkyOSIsZGQ6IiVkIFx1NTkyOSIsTToiMSBcdTUwMGJcdTY3MDgiLE1NOiIlZCBcdTUwMGJcdTY3MDgiLHk6''@;'; put 'put ''IjEgXHU1ZTc0Iix5eToiJWQgXHU1ZTc0In19KX0oeSg5NzU4NikpfSw5NzU4NjpmdW5jdGlvbih1ZSxYLHkpeyh1ZT15Lm5tZCh1ZSkpLmV4cG9ydHM9ZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7dmFyIEkscTtmdW5jdGlvbiBfKCl7cmV0dXJuIEkuYXBwbHkobnVsbCxhcmd1bWVudHMpfWZ1''@;'; put 'put ''bmN0aW9uIEIoQ2Upe3JldHVybiBDZSBpbnN0YW5jZW9mIEFycmF5fHwiW29iamVjdCBBcnJheV0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKENlKX1mdW5jdGlvbiB3KENlKXtyZXR1cm4gbnVsbCE9Q2UmJiJbb2JqZWN0IE9iamVjdF0iPT09T2JqZWN0LnByb3RvdHlwZS50''@;'; put 'put ''b1N0cmluZy5jYWxsKENlKX1mdW5jdGlvbiBQKENlLEtlKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKENlLEtlKX1mdW5jdGlvbiBGKENlKXtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcylyZXR1cm4gMD09PU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5h''@;'; put 'put ''bWVzKENlKS5sZW5ndGg7dmFyIEtlO2ZvcihLZSBpbiBDZSlpZihQKENlLEtlKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBPKENlKXtyZXR1cm4gdm9pZCAwPT09Q2V9ZnVuY3Rpb24geihDZSl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBDZXx8IltvYmplY3QgTnVtYmVyXSI9PT1PYmpl''@;'; put 'put ''Y3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoQ2UpfWZ1bmN0aW9uIE4oQ2Upe3JldHVybiBDZSBpbnN0YW5jZW9mIERhdGV8fCJbb2JqZWN0IERhdGVdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChDZSl9ZnVuY3Rpb24gTChDZSxLZSl7dmFyIEl0LG10PVtdLGRuPUNlLmxl''@;'; put 'put ''bmd0aDtmb3IoSXQ9MDtJdDxkbjsrK0l0KW10LnB1c2goS2UoQ2VbSXRdLEl0KSk7cmV0dXJuIG10fWZ1bmN0aW9uIEsoQ2UsS2Upe2Zvcih2YXIgbXQgaW4gS2UpUChLZSxtdCkmJihDZVttdF09S2VbbXRdKTtyZXR1cm4gUChLZSwidG9TdHJpbmciKSYmKENlLnRvU3RyaW5nPUtlLnRvU3Ry''@;'; put 'put ''aW5nKSxQKEtlLCJ2YWx1ZU9mIikmJihDZS52YWx1ZU9mPUtlLnZhbHVlT2YpLENlfWZ1bmN0aW9uIFUoQ2UsS2UsbXQsSXQpe3JldHVybiBjdihDZSxLZSxtdCxJdCwhMCkudXRjKCl9ZnVuY3Rpb24gWShDZSl7cmV0dXJuIG51bGw9PUNlLl9wZiYmKENlLl9wZj17ZW1wdHk6ITEsdW51c2Vk''@;'; put 'put ''VG9rZW5zOltdLHVudXNlZElucHV0OltdLG92ZXJmbG93Oi0yLGNoYXJzTGVmdE92ZXI6MCxudWxsSW5wdXQ6ITEsaW52YWxpZEVyYTpudWxsLGludmFsaWRNb250aDpudWxsLGludmFsaWRGb3JtYXQ6ITEsdXNlckludmFsaWRhdGVkOiExLGlzbzohMSxwYXJzZWREYXRlUGFydHM6W10sZXJh''@;'; put 'put ''Om51bGwsbWVyaWRpZW06bnVsbCxyZmMyODIyOiExLHdlZWtkYXlNaXNtYXRjaDohMX0pLENlLl9wZn1mdW5jdGlvbiBlZShDZSl7dmFyIEtlPW51bGwsbXQ9ITEsSXQ9Q2UuX2QmJiFpc05hTihDZS5fZC5nZXRUaW1lKCkpO3JldHVybiBJdCYmKEtlPVkoQ2UpLG10PXEuY2FsbChLZS5wYXJz''@;'; put 'put ''ZWREYXRlUGFydHMsZnVuY3Rpb24oZG4pe3JldHVybiBudWxsIT1kbn0pLEl0PUtlLm92ZXJmbG93PDAmJiFLZS5lbXB0eSYmIUtlLmludmFsaWRFcmEmJiFLZS5pbnZhbGlkTW9udGgmJiFLZS5pbnZhbGlkV2Vla2RheSYmIUtlLndlZWtkYXlNaXNtYXRjaCYmIUtlLm51bGxJbnB1dCYmIUtl''@;'; put 'put ''LmludmFsaWRGb3JtYXQmJiFLZS51c2VySW52YWxpZGF0ZWQmJighS2UubWVyaWRpZW18fEtlLm1lcmlkaWVtJiZtdCksQ2UuX3N0cmljdCYmKEl0PUl0JiYwPT09S2UuY2hhcnNMZWZ0T3ZlciYmMD09PUtlLnVudXNlZFRva2Vucy5sZW5ndGgmJnZvaWQgMD09PUtlLmJpZ0hvdXIpKSxudWxs''@;'; put 'put ''IT1PYmplY3QuaXNGcm96ZW4mJk9iamVjdC5pc0Zyb3plbihDZSk/SXQ6KENlLl9pc1ZhbGlkPUl0LENlLl9pc1ZhbGlkKX1mdW5jdGlvbiBKKENlKXt2YXIgS2U9VShOYU4pO3JldHVybiBudWxsIT1DZT9LKFkoS2UpLENlKTpZKEtlKS51c2VySW52YWxpZGF0ZWQ9ITAsS2V9cT1BcnJheS5w''@;'; put 'put ''cm90b3R5cGUuc29tZT9BcnJheS5wcm90b3R5cGUuc29tZTpmdW5jdGlvbihDZSl7dmFyIEl0LEtlPU9iamVjdCh0aGlzKSxtdD1LZS5sZW5ndGg+Pj4wO2ZvcihJdD0wO0l0PG10O0l0KyspaWYoSXQgaW4gS2UmJkNlLmNhbGwodGhpcyxLZVtJdF0sSXQsS2UpKXJldHVybiEwO3JldHVybiEx''@;'; put 'put ''fTt2YXIgbmU9Xy5tb21lbnRQcm9wZXJ0aWVzPVtdLGllPSExO2Z1bmN0aW9uIGxlKENlLEtlKXt2YXIgbXQsSXQsZG4scW49bmUubGVuZ3RoO2lmKE8oS2UuX2lzQU1vbWVudE9iamVjdCl8fChDZS5faXNBTW9tZW50T2JqZWN0PUtlLl9pc0FNb21lbnRPYmplY3QpLE8oS2UuX2kpfHwoQ2Uu''@;'; put 'put ''X2k9S2UuX2kpLE8oS2UuX2YpfHwoQ2UuX2Y9S2UuX2YpLE8oS2UuX2wpfHwoQ2UuX2w9S2UuX2wpLE8oS2UuX3N0cmljdCl8fChDZS5fc3RyaWN0PUtlLl9zdHJpY3QpLE8oS2UuX3R6bSl8fChDZS5fdHptPUtlLl90em0pLE8oS2UuX2lzVVRDKXx8KENlLl9pc1VUQz1LZS5faXNVVEMpLE8o''@;'; put 'put ''S2UuX29mZnNldCl8fChDZS5fb2Zmc2V0PUtlLl9vZmZzZXQpLE8oS2UuX3BmKXx8KENlLl9wZj1ZKEtlKSksTyhLZS5fbG9jYWxlKXx8KENlLl9sb2NhbGU9S2UuX2xvY2FsZSkscW4+MClmb3IobXQ9MDttdDxxbjttdCsrKU8oZG49S2VbSXQ9bmVbbXRdXSl8fChDZVtJdF09ZG4pO3JldHVy''@;'; put 'put ''biBDZX1mdW5jdGlvbiBtZShDZSl7bGUodGhpcyxDZSksdGhpcy5fZD1uZXcgRGF0ZShudWxsIT1DZS5fZD9DZS5fZC5nZXRUaW1lKCk6TmFOKSx0aGlzLmlzVmFsaWQoKXx8KHRoaXMuX2Q9bmV3IERhdGUoTmFOKSksITE9PT1pZSYmKGllPSEwLF8udXBkYXRlT2Zmc2V0KHRoaXMpLGllPSEx''@;'; put 'put ''KX1mdW5jdGlvbiBfZShDZSl7cmV0dXJuIENlIGluc3RhbmNlb2YgbWV8fG51bGwhPUNlJiZudWxsIT1DZS5faXNBTW9tZW50T2JqZWN0fWZ1bmN0aW9uIFRlKENlKXshMT09PV8uc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmdzJiZ0eXBlb2YgY29uc29sZTwidSImJmNvbnNvbGUud2FybiYm''@;'; put 'put ''Y29uc29sZS53YXJuKCJEZXByZWNhdGlvbiB3YXJuaW5nOiAiK0NlKX1mdW5jdGlvbiBTZShDZSxLZSl7dmFyIG10PSEwO3JldHVybiBLKGZ1bmN0aW9uKCl7aWYobnVsbCE9Xy5kZXByZWNhdGlvbkhhbmRsZXImJl8uZGVwcmVjYXRpb25IYW5kbGVyKG51bGwsQ2UpLG10KXt2YXIgZG4scW4s''@;'; put 'put ''aWksSXQ9W10sSWE9YXJndW1lbnRzLmxlbmd0aDtmb3IocW49MDtxbjxJYTtxbisrKXtpZihkbj0iIiwib2JqZWN0Ij09dHlwZW9mIGFyZ3VtZW50c1txbl0pe2ZvcihpaSBpbiBkbis9IlxuWyIrcW4rIl0gIixhcmd1bWVudHNbMF0pUChhcmd1bWVudHNbMF0saWkpJiYoZG4rPWlpKyI6ICIr''@;'; put 'put ''YXJndW1lbnRzWzBdW2lpXSsiLCAiKTtkbj1kbi5zbGljZSgwLC0yKX1lbHNlIGRuPWFyZ3VtZW50c1txbl07SXQucHVzaChkbil9VGUoQ2UrIlxuQXJndW1lbnRzOiAiK0FycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKEl0KS5qb2luKCIiKSsiXG4iKyhuZXcgRXJyb3IpLnN0YWNrKSxtdD0h''@;'; put 'put ''MX1yZXR1cm4gS2UuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxLZSl9dmFyIFQsamU9e307ZnVuY3Rpb24gVihDZSxLZSl7bnVsbCE9Xy5kZXByZWNhdGlvbkhhbmRsZXImJl8uZGVwcmVjYXRpb25IYW5kbGVyKENlLEtlKSxqZVtDZV18fChUZShLZSksamVbQ2VdPSEwKX1mdW5jdGlvbiBwKENl''@;'; put 'put ''KXtyZXR1cm4gdHlwZW9mIEZ1bmN0aW9uPCJ1IiYmQ2UgaW5zdGFuY2VvZiBGdW5jdGlvbnx8IltvYmplY3QgRnVuY3Rpb25dIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChDZSl9ZnVuY3Rpb24geChDZSxLZSl7dmFyIEl0LG10PUsoe30sQ2UpO2ZvcihJdCBpbiBLZSlQKEtl''@;'; put 'put ''LEl0KSYmKHcoQ2VbSXRdKSYmdyhLZVtJdF0pPyhtdFtJdF09e30sSyhtdFtJdF0sQ2VbSXRdKSxLKG10W0l0XSxLZVtJdF0pKTpudWxsIT1LZVtJdF0/bXRbSXRdPUtlW0l0XTpkZWxldGUgbXRbSXRdKTtmb3IoSXQgaW4gQ2UpUChDZSxJdCkmJiFQKEtlLEl0KSYmdyhDZVtJdF0pJiYobXRb''@;'; put 'put ''SXRdPUsoe30sbXRbSXRdKSk7cmV0dXJuIG10fWZ1bmN0aW9uIEMoQ2Upe251bGwhPUNlJiZ0aGlzLnNldChDZSl9Xy5zdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZ3M9ITEsXy5kZXByZWNhdGlvbkhhbmRsZXI9bnVsbCxUPU9iamVjdC5rZXlzP09iamVjdC5rZXlzOmZ1bmN0aW9uKENlKXt2''@;'; put 'put ''YXIgS2UsbXQ9W107Zm9yKEtlIGluIENlKVAoQ2UsS2UpJiZtdC5wdXNoKEtlKTtyZXR1cm4gbXR9O2Z1bmN0aW9uIEUoQ2UsS2UsbXQpe3ZhciBJdD0iIitNYXRoLmFicyhDZSk7cmV0dXJuKENlPj0wP210PyIrIjoiIjoiLSIpK01hdGgucG93KDEwLE1hdGgubWF4KDAsS2UtSXQubGVuZ3Ro''@;'; put 'put ''KSkudG9TdHJpbmcoKS5zdWJzdHIoMSkrSXR9dmFyIG09LyhcW1teXFtdKlxdKXwoXFwpPyhbSGhdbW0oc3MpP3xNb3xNTT9NP00/fERvfERERG98REQ/RD9EP3xkZGQ/ZD98ZG8/fHdbb3x3XT98V1tvfFddP3xRbz98TnsxLDV9fFlZWVlZWXxZWVlZWXxZWVlZfFlZfHl7Miw0fXx5bz98Z2co''@;'; put 'put ''Z2dnPyk/fEdHKEdHRz8pP3xlfEV8YXxBfGhoP3xISD98a2s/fG1tP3xzcz98U3sxLDl9fHh8WHx6ej98Wlo/fC4pL2csQT0vKFxbW15cW10qXF0pfChcXCk/KExUU3xMVHxMTD9MP0w/fGx7MSw0fSkvZyxhZT17fSx0ZT17fTtmdW5jdGlvbiBzZShDZSxLZSxtdCxJdCl7dmFyIGRuPUl0OyJz''@;'; put 'put ''dHJpbmciPT10eXBlb2YgSXQmJihkbj1mdW5jdGlvbigpe3JldHVybiB0aGlzW0l0XSgpfSksQ2UmJih0ZVtDZV09ZG4pLEtlJiYodGVbS2VbMF1dPWZ1bmN0aW9uKCl7cmV0dXJuIEUoZG4uYXBwbHkodGhpcyxhcmd1bWVudHMpLEtlWzFdLEtlWzJdKX0pLG10JiYodGVbbXRdPWZ1bmN0aW9u''@;'; put 'put ''KCl7cmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLm9yZGluYWwoZG4uYXBwbHkodGhpcyxhcmd1bWVudHMpLENlKX0pfWZ1bmN0aW9uIHdlKENlKXtyZXR1cm4gQ2UubWF0Y2goL1xbW1xzXFNdLyk/Q2UucmVwbGFjZSgvXlxbfFxdJC9nLCIiKTpDZS5yZXBsYWNlKC9cXC9nLCIiKX1mdW5jdGlv''@;'; put 'put ''biBKZShDZSxLZSl7cmV0dXJuIENlLmlzVmFsaWQoKT8oS2U9b3QoS2UsQ2UubG9jYWxlRGF0YSgpKSxhZVtLZV09YWVbS2VdfHxmdW5jdGlvbiBVZShDZSl7dmFyIG10LEl0LEtlPUNlLm1hdGNoKG0pO2ZvcihtdD0wLEl0PUtlLmxlbmd0aDttdDxJdDttdCsrKUtlW210XT10ZVtLZVttdF1d''@;'; put 'put ''P3RlW0tlW210XV06d2UoS2VbbXRdKTtyZXR1cm4gZnVuY3Rpb24oZG4pe3ZhciBpaSxxbj0iIjtmb3IoaWk9MDtpaTxJdDtpaSsrKXFuKz1wKEtlW2lpXSk/S2VbaWldLmNhbGwoZG4sQ2UpOktlW2lpXTtyZXR1cm4gcW59fShLZSksYWVbS2VdKENlKSk6Q2UubG9jYWxlRGF0YSgpLmludmFs''@;'; put 'put ''aWREYXRlKCl9ZnVuY3Rpb24gb3QoQ2UsS2Upe3ZhciBtdD01O2Z1bmN0aW9uIEl0KGRuKXtyZXR1cm4gS2UubG9uZ0RhdGVGb3JtYXQoZG4pfHxkbn1mb3IoQS5sYXN0SW5kZXg9MDttdD49MCYmQS50ZXN0KENlKTspQ2U9Q2UucmVwbGFjZShBLEl0KSxBLmxhc3RJbmRleD0wLG10LT0xO3Jl''@;'; put 'put ''dHVybiBDZX12YXIgQWU9e0Q6ImRhdGUiLGRhdGVzOiJkYXRlIixkYXRlOiJkYXRlIixkOiJkYXkiLGRheXM6ImRheSIsZGF5OiJkYXkiLGU6IndlZWtkYXkiLHdlZWtkYXlzOiJ3ZWVrZGF5Iix3ZWVrZGF5OiJ3ZWVrZGF5IixFOiJpc29XZWVrZGF5Iixpc293ZWVrZGF5czoiaXNvV2Vla2Rh''@;'; put 'put ''eSIsaXNvd2Vla2RheToiaXNvV2Vla2RheSIsREREOiJkYXlPZlllYXIiLGRheW9meWVhcnM6ImRheU9mWWVhciIsZGF5b2Z5ZWFyOiJkYXlPZlllYXIiLGg6ImhvdXIiLGhvdXJzOiJob3VyIixob3VyOiJob3VyIixtczoibWlsbGlzZWNvbmQiLG1pbGxpc2Vjb25kczoibWlsbGlzZWNvbmQi''@;'; put 'put ''LG1pbGxpc2Vjb25kOiJtaWxsaXNlY29uZCIsbToibWludXRlIixtaW51dGVzOiJtaW51dGUiLG1pbnV0ZToibWludXRlIixNOiJtb250aCIsbW9udGhzOiJtb250aCIsbW9udGg6Im1vbnRoIixROiJxdWFydGVyIixxdWFydGVyczoicXVhcnRlciIscXVhcnRlcjoicXVhcnRlciIsczoic2Vj''@;'; put 'put ''b25kIixzZWNvbmRzOiJzZWNvbmQiLHNlY29uZDoic2Vjb25kIixnZzoid2Vla1llYXIiLHdlZWt5ZWFyczoid2Vla1llYXIiLHdlZWt5ZWFyOiJ3ZWVrWWVhciIsR0c6Imlzb1dlZWtZZWFyIixpc293ZWVreWVhcnM6Imlzb1dlZWtZZWFyIixpc293ZWVreWVhcjoiaXNvV2Vla1llYXIiLHc6''@;'; put 'put ''IndlZWsiLHdlZWtzOiJ3ZWVrIix3ZWVrOiJ3ZWVrIixXOiJpc29XZWVrIixpc293ZWVrczoiaXNvV2VlayIsaXNvd2VlazoiaXNvV2VlayIseToieWVhciIseWVhcnM6InllYXIiLHllYXI6InllYXIifTtmdW5jdGlvbiBfdChDZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBDZT9BZVtDZV18''@;'; put 'put ''fEFlW0NlLnRvTG93ZXJDYXNlKCldOnZvaWQgMH1mdW5jdGlvbiBudChDZSl7dmFyIG10LEl0LEtlPXt9O2ZvcihJdCBpbiBDZSlQKENlLEl0KSYmKG10PV90KEl0KSkmJihLZVttdF09Q2VbSXRdKTtyZXR1cm4gS2V9dmFyIFFlPXtkYXRlOjksZGF5OjExLHdlZWtkYXk6MTEsaXNvV2Vla2Rh''@;'; put 'put ''eToxMSxkYXlPZlllYXI6NCxob3VyOjEzLG1pbGxpc2Vjb25kOjE2LG1pbnV0ZToxNCxtb250aDo4LHF1YXJ0ZXI6NyxzZWNvbmQ6MTUsd2Vla1llYXI6MSxpc29XZWVrWWVhcjoxLHdlZWs6NSxpc29XZWVrOjUseWVhcjoxfTt2YXIgQXQseXQ9L1xkLyxNdD0vXGRcZC8sRHQ9L1xkezN9Lyxp''@;'; put 'put ''dD0vXGR7NH0vLCRlPS9bKy1dP1xkezZ9Lyx0dD0vXGRcZD8vLEhlPS9cZFxkXGRcZD8vLHV0PS9cZFxkXGRcZFxkXGQ/LyxxdD0vXGR7MSwzfS8sUnQ9L1xkezEsNH0vLFB0PS9bKy1dP1xkezEsNn0vLGNpPS9cZCsvLFF0PS9bKy1dP1xkKy8sc249L1p8WystXVxkXGQ6P1xkXGQvZ2ksUmk9''@;'; put 'put ''L1p8WystXVxkXGQoPzo6P1xkXGQpPy9naSxmdD0vWzAtOV17MCwyNTZ9WydhLXpcdTAwQTAtXHUwNUZGXHUwNzAwLVx1RDdGRlx1RjkwMC1cdUZEQ0ZcdUZERjAtXHVGRjA3XHVGRjEwLVx1RkZFRl17MSwyNTZ9fFtcdTA2MDAtXHUwNkZGXC9dezEsMjU2fShccyo/W1x1MDYwMC1cdTA2RkZd''@;'; put 'put ''ezEsMjU2fSl7MSwyfS9pLE9yPS9eWzEtOV1cZD8vLFd0PS9eKFsxLTldXGR8XGQpLztmdW5jdGlvbiBSbihDZSxLZSxtdCl7QXRbQ2VdPXAoS2UpP0tlOmZ1bmN0aW9uKEl0LGRuKXtyZXR1cm4gSXQmJm10P210OktlfX1mdW5jdGlvbiBzdChDZSxLZSl7cmV0dXJuIFAoQXQsQ2UpP0F0W0Nl''@;'; put 'put ''XShLZS5fc3RyaWN0LEtlLl9sb2NhbGUpOm5ldyBSZWdFeHAoZnVuY3Rpb24gVXQoQ2Upe3JldHVybiByaShDZS5yZXBsYWNlKCJcXCIsIiIpLnJlcGxhY2UoL1xcKFxbKXxcXChcXSl8XFsoW15cXVxbXSopXF18XFwoLikvZyxmdW5jdGlvbihLZSxtdCxJdCxkbixxbil7cmV0dXJuIG10fHxJ''@;'; put 'put ''dHx8ZG58fHFufSkpfShDZSkpfWZ1bmN0aW9uIHJpKENlKXtyZXR1cm4gQ2UucmVwbGFjZSgvWy1cL1xcXiQqKz8uKCl8W1xde31dL2csIlxcJCYiKX1mdW5jdGlvbiBXZShDZSl7cmV0dXJuIENlPDA/TWF0aC5jZWlsKENlKXx8MDpNYXRoLmZsb29yKENlKX1mdW5jdGlvbiBUdChDZSl7dmFy''@;'; put 'put ''IEtlPStDZSxtdD0wO3JldHVybiAwIT09S2UmJmlzRmluaXRlKEtlKSYmKG10PVdlKEtlKSksbXR9QXQ9e307dmFyIG5yPXt9O2Z1bmN0aW9uIGh0KENlLEtlKXt2YXIgbXQsZG4sSXQ9S2U7Zm9yKCJzdHJpbmciPT10eXBlb2YgQ2UmJihDZT1bQ2VdKSx6KEtlKSYmKEl0PWZ1bmN0aW9uKHFu''@;'; put 'put ''LGlpKXtpaVtLZV09VHQocW4pfSksZG49Q2UubGVuZ3RoLG10PTA7bXQ8ZG47bXQrKylucltDZVttdF1dPUl0fWZ1bmN0aW9uIHh0KENlLEtlKXtodChDZSxmdW5jdGlvbihtdCxJdCxkbixxbil7ZG4uX3c9ZG4uX3d8fHt9LEtlKG10LGRuLl93LGRuLHFuKX0pfWZ1bmN0aW9uIGpuKENlLEtl''@;'; put 'put ''LG10KXtudWxsIT1LZSYmUChucixDZSkmJm5yW0NlXShLZSxtdC5fYSxtdCxDZSl9ZnVuY3Rpb24gcm4oQ2Upe3JldHVybiBDZSU0PT0wJiZDZSUxMDAhPTB8fENlJTQwMD09MH12YXIgenQ9MCxoaT0xLGNuPTIsZm49MyxJaT00LFh0PTUsZW49Nix1YT03LEVpPTg7ZnVuY3Rpb24gdnIoQ2Up''@;'; put 'put ''e3JldHVybiBybihDZSk/MzY2OjM2NX1zZSgiWSIsMCwwLGZ1bmN0aW9uKCl7dmFyIENlPXRoaXMueWVhcigpO3JldHVybiBDZTw9OTk5OT9FKENlLDQpOiIrIitDZX0pLHNlKDAsWyJZWSIsMl0sMCxmdW5jdGlvbigpe3JldHVybiB0aGlzLnllYXIoKSUxMDB9KSxzZSgwLFsiWVlZWSIsNF0s''@;'; put 'put ''MCwieWVhciIpLHNlKDAsWyJZWVlZWSIsNV0sMCwieWVhciIpLHNlKDAsWyJZWVlZWVkiLDYsITBdLDAsInllYXIiKSxSbigiWSIsUXQpLFJuKCJZWSIsdHQsTXQpLFJuKCJZWVlZIixSdCxpdCksUm4oIllZWVlZIixQdCwkZSksUm4oIllZWVlZWSIsUHQsJGUpLGh0KFsiWVlZWVkiLCJZWVlZ''@;'; put 'put ''WVkiXSx6dCksaHQoIllZWVkiLGZ1bmN0aW9uKENlLEtlKXtLZVt6dF09Mj09PUNlLmxlbmd0aD9fLnBhcnNlVHdvRGlnaXRZZWFyKENlKTpUdChDZSl9KSxodCgiWVkiLGZ1bmN0aW9uKENlLEtlKXtLZVt6dF09Xy5wYXJzZVR3b0RpZ2l0WWVhcihDZSl9KSxodCgiWSIsZnVuY3Rpb24oQ2Us''@;'; put 'put ''S2Upe0tlW3p0XT1wYXJzZUludChDZSwxMCl9KSxfLnBhcnNlVHdvRGlnaXRZZWFyPWZ1bmN0aW9uKENlKXtyZXR1cm4gVHQoQ2UpKyhUdChDZSk+Njg/MTkwMDoyZTMpfTt2YXIgV2ksV249ZWkoIkZ1bGxZZWFyIiwhMCk7ZnVuY3Rpb24gZWkoQ2UsS2Upe3JldHVybiBmdW5jdGlvbihtdCl7''@;'; put 'put ''cmV0dXJuIG51bGwhPW10PyhWaSh0aGlzLENlLG10KSxfLnVwZGF0ZU9mZnNldCh0aGlzLEtlKSx0aGlzKTpRcih0aGlzLENlKX19ZnVuY3Rpb24gUXIoQ2UsS2Upe2lmKCFDZS5pc1ZhbGlkKCkpcmV0dXJuIE5hTjt2YXIgbXQ9Q2UuX2QsSXQ9Q2UuX2lzVVRDO3N3aXRjaChLZSl7Y2FzZSJN''@;'; put 'put ''aWxsaXNlY29uZHMiOnJldHVybiBJdD9tdC5nZXRVVENNaWxsaXNlY29uZHMoKTptdC5nZXRNaWxsaXNlY29uZHMoKTtjYXNlIlNlY29uZHMiOnJldHVybiBJdD9tdC5nZXRVVENTZWNvbmRzKCk6bXQuZ2V0U2Vjb25kcygpO2Nhc2UiTWludXRlcyI6cmV0dXJuIEl0P210LmdldFVUQ01pbnV0''@;'; put 'put ''ZXMoKTptdC5nZXRNaW51dGVzKCk7Y2FzZSJIb3VycyI6cmV0dXJuIEl0P210LmdldFVUQ0hvdXJzKCk6bXQuZ2V0SG91cnMoKTtjYXNlIkRhdGUiOnJldHVybiBJdD9tdC5nZXRVVENEYXRlKCk6bXQuZ2V0RGF0ZSgpO2Nhc2UiRGF5IjpyZXR1cm4gSXQ/bXQuZ2V0VVRDRGF5KCk6bXQuZ2V0''@;'; put 'put ''RGF5KCk7Y2FzZSJNb250aCI6cmV0dXJuIEl0P210LmdldFVUQ01vbnRoKCk6bXQuZ2V0TW9udGgoKTtjYXNlIkZ1bGxZZWFyIjpyZXR1cm4gSXQ/bXQuZ2V0VVRDRnVsbFllYXIoKTptdC5nZXRGdWxsWWVhcigpO2RlZmF1bHQ6cmV0dXJuIE5hTn19ZnVuY3Rpb24gVmkoQ2UsS2UsbXQpe3Zh''@;'; put 'put ''ciBJdCxkbixxbixpaSxJYTtpZihDZS5pc1ZhbGlkKCkmJiFpc05hTihtdCkpe3N3aXRjaChJdD1DZS5fZCxkbj1DZS5faXNVVEMsS2Upe2Nhc2UiTWlsbGlzZWNvbmRzIjpyZXR1cm4gdm9pZChkbj9JdC5zZXRVVENNaWxsaXNlY29uZHMobXQpOkl0LnNldE1pbGxpc2Vjb25kcyhtdCkpO2Nh''@;'; put 'put ''c2UiU2Vjb25kcyI6cmV0dXJuIHZvaWQoZG4/SXQuc2V0VVRDU2Vjb25kcyhtdCk6SXQuc2V0U2Vjb25kcyhtdCkpO2Nhc2UiTWludXRlcyI6cmV0dXJuIHZvaWQoZG4/SXQuc2V0VVRDTWludXRlcyhtdCk6SXQuc2V0TWludXRlcyhtdCkpO2Nhc2UiSG91cnMiOnJldHVybiB2b2lkKGRuP0l0''@;'; put 'put ''LnNldFVUQ0hvdXJzKG10KTpJdC5zZXRIb3VycyhtdCkpO2Nhc2UiRGF0ZSI6cmV0dXJuIHZvaWQoZG4/SXQuc2V0VVRDRGF0ZShtdCk6SXQuc2V0RGF0ZShtdCkpO2Nhc2UiRnVsbFllYXIiOmJyZWFrO2RlZmF1bHQ6cmV0dXJufXFuPW10LGlpPUNlLm1vbnRoKCksSWE9MjkhPT0oSWE9Q2Uu''@;'; put 'put ''ZGF0ZSgpKXx8MSE9PWlpfHxybihxbik/SWE6MjgsZG4/SXQuc2V0VVRDRnVsbFllYXIocW4saWksSWEpOkl0LnNldEZ1bGxZZWFyKHFuLGlpLElhKX19ZnVuY3Rpb24gcGEoQ2UsS2Upe2lmKGlzTmFOKENlKXx8aXNOYU4oS2UpKXJldHVybiBOYU47dmFyIG10PWZ1bmN0aW9uIExyKENlLEtl''@;'; put 'put ''KXtyZXR1cm4oQ2UlS2UrS2UpJUtlfShLZSwxMik7cmV0dXJuIENlKz0oS2UtbXQpLzEyLDE9PT1tdD9ybihDZSk/Mjk6Mjg6MzEtbXQlNyUyfVdpPUFycmF5LnByb3RvdHlwZS5pbmRleE9mP0FycmF5LnByb3RvdHlwZS5pbmRleE9mOmZ1bmN0aW9uKENlKXt2YXIgS2U7Zm9yKEtlPTA7S2U8''@;'; put 'put ''dGhpcy5sZW5ndGg7KytLZSlpZih0aGlzW0tlXT09PUNlKXJldHVybiBLZTtyZXR1cm4tMX0sc2UoIk0iLFsiTU0iLDJdLCJNbyIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tb250aCgpKzF9KSxzZSgiTU1NIiwwLDAsZnVuY3Rpb24oQ2Upe3JldHVybiB0aGlzLmxvY2FsZURhdGEoKS5tb250''@;'; put 'put ''aHNTaG9ydCh0aGlzLENlKX0pLHNlKCJNTU1NIiwwLDAsZnVuY3Rpb24oQ2Upe3JldHVybiB0aGlzLmxvY2FsZURhdGEoKS5tb250aHModGhpcyxDZSl9KSxSbigiTSIsdHQsT3IpLFJuKCJNTSIsdHQsTXQpLFJuKCJNTU0iLGZ1bmN0aW9uKENlLEtlKXtyZXR1cm4gS2UubW9udGhzU2hvcnRS''@;'; put 'put ''ZWdleChDZSl9KSxSbigiTU1NTSIsZnVuY3Rpb24oQ2UsS2Upe3JldHVybiBLZS5tb250aHNSZWdleChDZSl9KSxodChbIk0iLCJNTSJdLGZ1bmN0aW9uKENlLEtlKXtLZVtoaV09VHQoQ2UpLTF9KSxodChbIk1NTSIsIk1NTU0iXSxmdW5jdGlvbihDZSxLZSxtdCxJdCl7dmFyIGRuPW10Ll9s''@;'; put 'put ''b2NhbGUubW9udGhzUGFyc2UoQ2UsSXQsbXQuX3N0cmljdCk7bnVsbCE9ZG4/S2VbaGldPWRuOlkobXQpLmludmFsaWRNb250aD1DZX0pO3ZhciBRbj0iSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9E''@;'; put 'put ''ZWNlbWJlciIuc3BsaXQoIl8iKSxsYT0iSmFuX0ZlYl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWMiLnNwbGl0KCJfIikseWE9L0Rbb0RdPyhcW1teXFtcXV0qXF18XHMpK01NTU0/LyxMYT1mdCxGYT1mdDtmdW5jdGlvbiBOcyhDZSxLZSxtdCl7dmFyIEl0LGRuLHFu''@;'; put 'put ''LGlpPUNlLnRvTG9jYWxlTG93ZXJDYXNlKCk7aWYoIXRoaXMuX21vbnRoc1BhcnNlKWZvcih0aGlzLl9tb250aHNQYXJzZT1bXSx0aGlzLl9sb25nTW9udGhzUGFyc2U9W10sdGhpcy5fc2hvcnRNb250aHNQYXJzZT1bXSxJdD0wO0l0PDEyOysrSXQpcW49VShbMmUzLEl0XSksdGhpcy5fc2hv''@;'; put 'put ''cnRNb250aHNQYXJzZVtJdF09dGhpcy5tb250aHNTaG9ydChxbiwiIikudG9Mb2NhbGVMb3dlckNhc2UoKSx0aGlzLl9sb25nTW9udGhzUGFyc2VbSXRdPXRoaXMubW9udGhzKHFuLCIiKS50b0xvY2FsZUxvd2VyQ2FzZSgpO3JldHVybiBtdD8iTU1NIj09PUtlPy0xIT09KGRuPVdpLmNhbGwo''@;'; put 'put ''dGhpcy5fc2hvcnRNb250aHNQYXJzZSxpaSkpP2RuOm51bGw6LTEhPT0oZG49V2kuY2FsbCh0aGlzLl9sb25nTW9udGhzUGFyc2UsaWkpKT9kbjpudWxsOiJNTU0iPT09S2U/LTEhPT0oZG49V2kuY2FsbCh0aGlzLl9zaG9ydE1vbnRoc1BhcnNlLGlpKSl8fC0xIT09KGRuPVdpLmNhbGwodGhp''@;'; put 'put ''cy5fbG9uZ01vbnRoc1BhcnNlLGlpKSk/ZG46bnVsbDotMSE9PShkbj1XaS5jYWxsKHRoaXMuX2xvbmdNb250aHNQYXJzZSxpaSkpfHwtMSE9PShkbj1XaS5jYWxsKHRoaXMuX3Nob3J0TW9udGhzUGFyc2UsaWkpKT9kbjpudWxsfWZ1bmN0aW9uIHB1KENlLEtlKXtpZighQ2UuaXNWYWxpZCgp''@;'; put 'put ''KXJldHVybiBDZTtpZigic3RyaW5nIj09dHlwZW9mIEtlKWlmKC9eXGQrJC8udGVzdChLZSkpS2U9VHQoS2UpO2Vsc2UgaWYoIXooS2U9Q2UubG9jYWxlRGF0YSgpLm1vbnRoc1BhcnNlKEtlKSkpcmV0dXJuIENlO3ZhciBtdD1LZSxJdD1DZS5kYXRlKCk7cmV0dXJuIEl0PUl0PDI5P0l0Ok1h''@;'; put 'put ''dGgubWluKEl0LHBhKENlLnllYXIoKSxtdCkpLENlLl9pc1VUQz9DZS5fZC5zZXRVVENNb250aChtdCxJdCk6Q2UuX2Quc2V0TW9udGgobXQsSXQpLENlfWZ1bmN0aW9uIExjKENlKXtyZXR1cm4gbnVsbCE9Q2U/KHB1KHRoaXMsQ2UpLF8udXBkYXRlT2Zmc2V0KHRoaXMsITApLHRoaXMpOlFy''@;'; put 'put ''KHRoaXMsIk1vbnRoIil9ZnVuY3Rpb24gdWkoKXtmdW5jdGlvbiBDZShTbyxmcyl7cmV0dXJuIGZzLmxlbmd0aC1Tby5sZW5ndGh9dmFyIGRuLHFuLGlpLElhLEtlPVtdLG10PVtdLEl0PVtdO2Zvcihkbj0wO2RuPDEyO2RuKyspcW49VShbMmUzLGRuXSksaWk9cmkodGhpcy5tb250aHNTaG9y''@;'; put 'put ''dChxbiwiIikpLElhPXJpKHRoaXMubW9udGhzKHFuLCIiKSksS2UucHVzaChpaSksbXQucHVzaChJYSksSXQucHVzaChJYSksSXQucHVzaChpaSk7S2Uuc29ydChDZSksbXQuc29ydChDZSksSXQuc29ydChDZSksdGhpcy5fbW9udGhzUmVnZXg9bmV3IFJlZ0V4cCgiXigiK0l0LmpvaW4oInwi''@;'; put 'put ''KSsiKSIsImkiKSx0aGlzLl9tb250aHNTaG9ydFJlZ2V4PXRoaXMuX21vbnRoc1JlZ2V4LHRoaXMuX21vbnRoc1N0cmljdFJlZ2V4PW5ldyBSZWdFeHAoIl4oIittdC5qb2luKCJ8IikrIikiLCJpIiksdGhpcy5fbW9udGhzU2hvcnRTdHJpY3RSZWdleD1uZXcgUmVnRXhwKCJeKCIrS2Uuam9p''@;'; put 'put ''bigifCIpKyIpIiwiaSIpfWZ1bmN0aW9uIFZ0KENlLEtlLG10LEl0LGRuLHFuLGlpKXt2YXIgSWE7cmV0dXJuIENlPDEwMCYmQ2U+PTA/KElhPW5ldyBEYXRlKENlKzQwMCxLZSxtdCxJdCxkbixxbixpaSksaXNGaW5pdGUoSWEuZ2V0RnVsbFllYXIoKSkmJklhLnNldEZ1bGxZZWFyKENlKSk6''@;'; put 'put ''SWE9bmV3IERhdGUoQ2UsS2UsbXQsSXQsZG4scW4saWkpLElhfWZ1bmN0aW9uIEpyKENlKXt2YXIgS2UsbXQ7cmV0dXJuIENlPDEwMCYmQ2U+PTA/KChtdD1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpKVswXT1DZSs0MDAsS2U9bmV3IERhdGUoRGF0ZS5VVEMuYXBwbHko''@;'; put 'put ''bnVsbCxtdCkpLGlzRmluaXRlKEtlLmdldFVUQ0Z1bGxZZWFyKCkpJiZLZS5zZXRVVENGdWxsWWVhcihDZSkpOktlPW5ldyBEYXRlKERhdGUuVVRDLmFwcGx5KG51bGwsYXJndW1lbnRzKSksS2V9ZnVuY3Rpb24gYjAoQ2UsS2UsbXQpe3ZhciBJdD03K0tlLW10O3JldHVybi0oNytKcihDZSww''@;'; put 'put ''LEl0KS5nZXRVVENEYXkoKS1LZSklNytJdC0xfWZ1bmN0aW9uIEhhKENlLEtlLG10LEl0LGRuKXt2YXIgU28sZnMsSWE9MSs3KihLZS0xKSsoNyttdC1JdCklNytiMChDZSxJdCxkbik7cmV0dXJuIElhPD0wP2ZzPXZyKFNvPUNlLTEpK0lhOklhPnZyKENlKT8oU289Q2UrMSxmcz1JYS12cihD''@;'; put 'put ''ZSkpOihTbz1DZSxmcz1JYSkse3llYXI6U28sZGF5T2ZZZWFyOmZzfX1mdW5jdGlvbiBMdShDZSxLZSxtdCl7dmFyIHFuLGlpLEl0PWIwKENlLnllYXIoKSxLZSxtdCksZG49TWF0aC5mbG9vcigoQ2UuZGF5T2ZZZWFyKCktSXQtMSkvNykrMTtyZXR1cm4gZG48MT9xbj1kbitQcihpaT1DZS55''@;'; put 'put ''ZWFyKCktMSxLZSxtdCk6ZG4+UHIoQ2UueWVhcigpLEtlLG10KT8ocW49ZG4tUHIoQ2UueWVhcigpLEtlLG10KSxpaT1DZS55ZWFyKCkrMSk6KGlpPUNlLnllYXIoKSxxbj1kbikse3dlZWs6cW4seWVhcjppaX19ZnVuY3Rpb24gUHIoQ2UsS2UsbXQpe3ZhciBJdD1iMChDZSxLZSxtdCksZG49''@;'; put 'put ''YjAoQ2UrMSxLZSxtdCk7cmV0dXJuKHZyKENlKS1JdCtkbikvN31zZSgidyIsWyJ3dyIsMl0sIndvIiwid2VlayIpLHNlKCJXIixbIldXIiwyXSwiV28iLCJpc29XZWVrIiksUm4oInciLHR0LE9yKSxSbigid3ciLHR0LE10KSxSbigiVyIsdHQsT3IpLFJuKCJXVyIsdHQsTXQpLHh0KFsidyIs''@;'; put 'put ''Ind3IiwiVyIsIldXIl0sZnVuY3Rpb24oQ2UsS2UsbXQsSXQpe0tlW0l0LnN1YnN0cigwLDEpXT1UdChDZSl9KTtmdW5jdGlvbiB5MChDZSxLZSl7cmV0dXJuIENlLnNsaWNlKEtlLDcpLmNvbmNhdChDZS5zbGljZSgwLEtlKSl9c2UoImQiLDAsImRvIiwiZGF5Iiksc2UoImRkIiwwLDAsZnVu''@;'; put 'put ''Y3Rpb24oQ2Upe3JldHVybiB0aGlzLmxvY2FsZURhdGEoKS53ZWVrZGF5c01pbih0aGlzLENlKX0pLHNlKCJkZGQiLDAsMCxmdW5jdGlvbihDZSl7cmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLndlZWtkYXlzU2hvcnQodGhpcyxDZSl9KSxzZSgiZGRkZCIsMCwwLGZ1bmN0aW9uKENlKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5sb2NhbGVEYXRhKCkud2Vla2RheXModGhpcyxDZSl9KSxzZSgiZSIsMCwwLCJ3ZWVrZGF5Iiksc2UoIkUiLDAsMCwiaXNvV2Vla2RheSIpLFJuKCJkIix0dCksUm4oImUiLHR0KSxSbigiRSIsdHQpLFJuKCJkZCIsZnVuY3Rpb24oQ2UsS2Upe3JldHVybiBLZS53ZWVrZGF5c01p''@;'; put 'put ''blJlZ2V4KENlKX0pLFJuKCJkZGQiLGZ1bmN0aW9uKENlLEtlKXtyZXR1cm4gS2Uud2Vla2RheXNTaG9ydFJlZ2V4KENlKX0pLFJuKCJkZGRkIixmdW5jdGlvbihDZSxLZSl7cmV0dXJuIEtlLndlZWtkYXlzUmVnZXgoQ2UpfSkseHQoWyJkZCIsImRkZCIsImRkZGQiXSxmdW5jdGlvbihDZSxL''@;'; put 'put ''ZSxtdCxJdCl7dmFyIGRuPW10Ll9sb2NhbGUud2Vla2RheXNQYXJzZShDZSxJdCxtdC5fc3RyaWN0KTtudWxsIT1kbj9LZS5kPWRuOlkobXQpLmludmFsaWRXZWVrZGF5PUNlfSkseHQoWyJkIiwiZSIsIkUiXSxmdW5jdGlvbihDZSxLZSxtdCxJdCl7S2VbSXRdPVR0KENlKX0pO3ZhciByNT0i''@;'; put 'put ''U3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXkiLnNwbGl0KCJfIiksT2w9IlN1bl9Nb25fVHVlX1dlZF9UaHVfRnJpX1NhdCIuc3BsaXQoIl8iKSx1Zj0iU3VfTW9fVHVfV2VfVGhfRnJfU2EiLnNwbGl0KCJfIiksc2Q9ZnQsZGY9ZnQsazE9''@;'; put 'put ''ZnQ7ZnVuY3Rpb24gR2goQ2UsS2UsbXQpe3ZhciBJdCxkbixxbixpaT1DZS50b0xvY2FsZUxvd2VyQ2FzZSgpO2lmKCF0aGlzLl93ZWVrZGF5c1BhcnNlKWZvcih0aGlzLl93ZWVrZGF5c1BhcnNlPVtdLHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZT1bXSx0aGlzLl9taW5XZWVrZGF5c1BhcnNl''@;'; put 'put ''PVtdLEl0PTA7SXQ8NzsrK0l0KXFuPVUoWzJlMywxXSkuZGF5KEl0KSx0aGlzLl9taW5XZWVrZGF5c1BhcnNlW0l0XT10aGlzLndlZWtkYXlzTWluKHFuLCIiKS50b0xvY2FsZUxvd2VyQ2FzZSgpLHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZVtJdF09dGhpcy53ZWVrZGF5c1Nob3J0KHFuLCIi''@;'; put 'put ''KS50b0xvY2FsZUxvd2VyQ2FzZSgpLHRoaXMuX3dlZWtkYXlzUGFyc2VbSXRdPXRoaXMud2Vla2RheXMocW4sIiIpLnRvTG9jYWxlTG93ZXJDYXNlKCk7cmV0dXJuIG10PyJkZGRkIj09PUtlPy0xIT09KGRuPVdpLmNhbGwodGhpcy5fd2Vla2RheXNQYXJzZSxpaSkpP2RuOm51bGw6ImRkZCI9''@;'; put 'put ''PT1LZT8tMSE9PShkbj1XaS5jYWxsKHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSxpaSkpP2RuOm51bGw6LTEhPT0oZG49V2kuY2FsbCh0aGlzLl9taW5XZWVrZGF5c1BhcnNlLGlpKSk/ZG46bnVsbDoiZGRkZCI9PT1LZT8tMSE9PShkbj1XaS5jYWxsKHRoaXMuX3dlZWtkYXlzUGFyc2UsaWkp''@;'; put 'put ''KXx8LTEhPT0oZG49V2kuY2FsbCh0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UsaWkpKXx8LTEhPT0oZG49V2kuY2FsbCh0aGlzLl9taW5XZWVrZGF5c1BhcnNlLGlpKSk/ZG46bnVsbDoiZGRkIj09PUtlPy0xIT09KGRuPVdpLmNhbGwodGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlLGlpKSl8fC0x''@;'; put 'put ''IT09KGRuPVdpLmNhbGwodGhpcy5fd2Vla2RheXNQYXJzZSxpaSkpfHwtMSE9PShkbj1XaS5jYWxsKHRoaXMuX21pbldlZWtkYXlzUGFyc2UsaWkpKT9kbjpudWxsOi0xIT09KGRuPVdpLmNhbGwodGhpcy5fbWluV2Vla2RheXNQYXJzZSxpaSkpfHwtMSE9PShkbj1XaS5jYWxsKHRoaXMuX3dl''@;'; put 'put ''ZWtkYXlzUGFyc2UsaWkpKXx8LTEhPT0oZG49V2kuY2FsbCh0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UsaWkpKT9kbjpudWxsfWZ1bmN0aW9uIGFuKCl7ZnVuY3Rpb24gQ2UoTnUsZGQpe3JldHVybiBkZC5sZW5ndGgtTnUubGVuZ3RofXZhciBxbixpaSxJYSxTbyxmcyxLZT1bXSxtdD1bXSxJ''@;'; put 'put ''dD1bXSxkbj1bXTtmb3IocW49MDtxbjw3O3FuKyspaWk9VShbMmUzLDFdKS5kYXkocW4pLElhPXJpKHRoaXMud2Vla2RheXNNaW4oaWksIiIpKSxTbz1yaSh0aGlzLndlZWtkYXlzU2hvcnQoaWksIiIpKSxmcz1yaSh0aGlzLndlZWtkYXlzKGlpLCIiKSksS2UucHVzaChJYSksbXQucHVzaChT''@;'; put 'put ''byksSXQucHVzaChmcyksZG4ucHVzaChJYSksZG4ucHVzaChTbyksZG4ucHVzaChmcyk7S2Uuc29ydChDZSksbXQuc29ydChDZSksSXQuc29ydChDZSksZG4uc29ydChDZSksdGhpcy5fd2Vla2RheXNSZWdleD1uZXcgUmVnRXhwKCJeKCIrZG4uam9pbigifCIpKyIpIiwiaSIpLHRoaXMuX3dl''@;'; put 'put ''ZWtkYXlzU2hvcnRSZWdleD10aGlzLl93ZWVrZGF5c1JlZ2V4LHRoaXMuX3dlZWtkYXlzTWluUmVnZXg9dGhpcy5fd2Vla2RheXNSZWdleCx0aGlzLl93ZWVrZGF5c1N0cmljdFJlZ2V4PW5ldyBSZWdFeHAoIl4oIitJdC5qb2luKCJ8IikrIikiLCJpIiksdGhpcy5fd2Vla2RheXNTaG9ydFN0''@;'; put 'put ''cmljdFJlZ2V4PW5ldyBSZWdFeHAoIl4oIittdC5qb2luKCJ8IikrIikiLCJpIiksdGhpcy5fd2Vla2RheXNNaW5TdHJpY3RSZWdleD1uZXcgUmVnRXhwKCJeKCIrS2Uuam9pbigifCIpKyIpIiwiaSIpfWZ1bmN0aW9uIHZpKCl7cmV0dXJuIHRoaXMuaG91cnMoKSUxMnx8MTJ9ZnVuY3Rpb24g''@;'; put 'put ''UG8oQ2UsS2Upe3NlKENlLDAsMCxmdW5jdGlvbigpe3JldHVybiB0aGlzLmxvY2FsZURhdGEoKS5tZXJpZGllbSh0aGlzLmhvdXJzKCksdGhpcy5taW51dGVzKCksS2UpfSl9ZnVuY3Rpb24gZW8oQ2UsS2Upe3JldHVybiBLZS5fbWVyaWRpZW1QYXJzZX1zZSgiSCIsWyJISCIsMl0sMCwiaG91''@;'; put 'put ''ciIpLHNlKCJoIixbImhoIiwyXSwwLHZpKSxzZSgiayIsWyJrayIsMl0sMCxmdW5jdGlvbiBBcigpe3JldHVybiB0aGlzLmhvdXJzKCl8fDI0fSksc2UoImhtbSIsMCwwLGZ1bmN0aW9uKCl7cmV0dXJuIiIrdmkuYXBwbHkodGhpcykrRSh0aGlzLm1pbnV0ZXMoKSwyKX0pLHNlKCJobW1zcyIs''@;'; put 'put ''MCwwLGZ1bmN0aW9uKCl7cmV0dXJuIiIrdmkuYXBwbHkodGhpcykrRSh0aGlzLm1pbnV0ZXMoKSwyKStFKHRoaXMuc2Vjb25kcygpLDIpfSksc2UoIkhtbSIsMCwwLGZ1bmN0aW9uKCl7cmV0dXJuIiIrdGhpcy5ob3VycygpK0UodGhpcy5taW51dGVzKCksMil9KSxzZSgiSG1tc3MiLDAsMCxm''@;'; put 'put ''dW5jdGlvbigpe3JldHVybiIiK3RoaXMuaG91cnMoKStFKHRoaXMubWludXRlcygpLDIpK0UodGhpcy5zZWNvbmRzKCksMil9KSxQbygiYSIsITApLFBvKCJBIiwhMSksUm4oImEiLGVvKSxSbigiQSIsZW8pLFJuKCJIIix0dCxXdCksUm4oImgiLHR0LE9yKSxSbigiayIsdHQsT3IpLFJuKCJI''@;'; put 'put ''SCIsdHQsTXQpLFJuKCJoaCIsdHQsTXQpLFJuKCJrayIsdHQsTXQpLFJuKCJobW0iLEhlKSxSbigiaG1tc3MiLHV0KSxSbigiSG1tIixIZSksUm4oIkhtbXNzIix1dCksaHQoWyJIIiwiSEgiXSxmbiksaHQoWyJrIiwia2siXSxmdW5jdGlvbihDZSxLZSxtdCl7dmFyIEl0PVR0KENlKTtLZVtm''@;'; put 'put ''bl09MjQ9PT1JdD8wOkl0fSksaHQoWyJhIiwiQSJdLGZ1bmN0aW9uKENlLEtlLG10KXttdC5faXNQbT1tdC5fbG9jYWxlLmlzUE0oQ2UpLG10Ll9tZXJpZGllbT1DZX0pLGh0KFsiaCIsImhoIl0sZnVuY3Rpb24oQ2UsS2UsbXQpe0tlW2ZuXT1UdChDZSksWShtdCkuYmlnSG91cj0hMH0pLGh0''@;'; put 'put ''KCJobW0iLGZ1bmN0aW9uKENlLEtlLG10KXt2YXIgSXQ9Q2UubGVuZ3RoLTI7S2VbZm5dPVR0KENlLnN1YnN0cigwLEl0KSksS2VbSWldPVR0KENlLnN1YnN0cihJdCkpLFkobXQpLmJpZ0hvdXI9ITB9KSxodCgiaG1tc3MiLGZ1bmN0aW9uKENlLEtlLG10KXt2YXIgSXQ9Q2UubGVuZ3RoLTQs''@;'; put 'put ''ZG49Q2UubGVuZ3RoLTI7S2VbZm5dPVR0KENlLnN1YnN0cigwLEl0KSksS2VbSWldPVR0KENlLnN1YnN0cihJdCwyKSksS2VbWHRdPVR0KENlLnN1YnN0cihkbikpLFkobXQpLmJpZ0hvdXI9ITB9KSxodCgiSG1tIixmdW5jdGlvbihDZSxLZSxtdCl7dmFyIEl0PUNlLmxlbmd0aC0yO0tlW2Zu''@;'; put 'put ''XT1UdChDZS5zdWJzdHIoMCxJdCkpLEtlW0lpXT1UdChDZS5zdWJzdHIoSXQpKX0pLGh0KCJIbW1zcyIsZnVuY3Rpb24oQ2UsS2UsbXQpe3ZhciBJdD1DZS5sZW5ndGgtNCxkbj1DZS5sZW5ndGgtMjtLZVtmbl09VHQoQ2Uuc3Vic3RyKDAsSXQpKSxLZVtJaV09VHQoQ2Uuc3Vic3RyKEl0LDIp''@;'; put 'put ''KSxLZVtYdF09VHQoQ2Uuc3Vic3RyKGRuKSl9KTt2YXIgVnM9ZWkoIkhvdXJzIiwhMCk7dmFyIFN0LGpsPXtjYWxlbmRhcjp7c2FtZURheToiW1RvZGF5IGF0XSBMVCIsbmV4dERheToiW1RvbW9ycm93IGF0XSBMVCIsbmV4dFdlZWs6ImRkZGQgW2F0XSBMVCIsbGFzdERheToiW1llc3RlcmRh''@;'; put 'put ''eSBhdF0gTFQiLGxhc3RXZWVrOiJbTGFzdF0gZGRkZCBbYXRdIExUIixzYW1lRWxzZToiTCJ9LGxvbmdEYXRlRm9ybWF0OntMVFM6Img6bW06c3MgQSIsTFQ6Img6bW0gQSIsTDoiTU0vREQvWVlZWSIsTEw6Ik1NTU0gRCwgWVlZWSIsTExMOiJNTU1NIEQsIFlZWVkgaDptbSBBIixMTExMOiJk''@;'; put 'put ''ZGRkLCBNTU1NIEQsIFlZWVkgaDptbSBBIn0saW52YWxpZERhdGU6IkludmFsaWQgZGF0ZSIsb3JkaW5hbDoiJWQiLGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0vLHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJpbiAlcyIscGFzdDoiJXMgYWdvIixzOiJhIGZldyBzZWNvbmRzIixzczoi''@;'; put 'put ''JWQgc2Vjb25kcyIsbToiYSBtaW51dGUiLG1tOiIlZCBtaW51dGVzIixoOiJhbiBob3VyIixoaDoiJWQgaG91cnMiLGQ6ImEgZGF5IixkZDoiJWQgZGF5cyIsdzoiYSB3ZWVrIix3dzoiJWQgd2Vla3MiLE06ImEgbW9udGgiLE1NOiIlZCBtb250aHMiLHk6ImEgeWVhciIseXk6IiVkIHllYXJz''@;'; put 'put ''In0sbW9udGhzOlFuLG1vbnRoc1Nob3J0OmxhLHdlZWs6e2RvdzowLGRveTo2fSx3ZWVrZGF5czpyNSx3ZWVrZGF5c01pbjp1Zix3ZWVrZGF5c1Nob3J0Ok9sLG1lcmlkaWVtUGFyc2U6L1thcF1cLj9tP1wuPy9pfSxIbz17fSxrbz17fTtmdW5jdGlvbiBCdChDZSxLZSl7dmFyIG10LEl0PU1h''@;'; put 'put ''dGgubWluKENlLmxlbmd0aCxLZS5sZW5ndGgpO2ZvcihtdD0wO210PEl0O210Kz0xKWlmKENlW210XSE9PUtlW210XSlyZXR1cm4gbXQ7cmV0dXJuIEl0fWZ1bmN0aW9uIF9uKENlKXtyZXR1cm4gQ2UmJkNlLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgiXyIsIi0iKX1mdW5jdGlvbiBibihDZSl7''@;'; put 'put ''dmFyIEtlPW51bGw7aWYodm9pZCAwPT09SG9bQ2VdJiZ1ZSYmdWUuZXhwb3J0cyYmZnVuY3Rpb24gSW4oQ2Upe3JldHVybiEoIUNlfHwhQ2UubWF0Y2goIl5bXi9cXFxcXSokIikpfShDZSkpdHJ5e0tlPVN0Ll9hYmJyLHkoMzUzNTgpKCIuLyIrQ2UpLHVyKEtlKX1jYXRjaHtIb1tDZV09bnVs''@;'; put 'put ''bH1yZXR1cm4gSG9bQ2VdfWZ1bmN0aW9uIHVyKENlLEtlKXt2YXIgbXQ7cmV0dXJuIENlJiYoKG10PU8oS2UpP3RhKENlKTpiaShDZSxLZSkpP1N0PW10OnR5cGVvZiBjb25zb2xlPCJ1IiYmY29uc29sZS53YXJuJiZjb25zb2xlLndhcm4oIkxvY2FsZSAiK0NlKyIgbm90IGZvdW5kLiBEaWQg''@;'; put 'put ''eW91IGZvcmdldCB0byBsb2FkIGl0PyIpKSxTdC5fYWJicn1mdW5jdGlvbiBiaShDZSxLZSl7aWYobnVsbCE9PUtlKXt2YXIgbXQsSXQ9amw7aWYoS2UuYWJicj1DZSxudWxsIT1Ib1tDZV0pVigiZGVmaW5lTG9jYWxlT3ZlcnJpZGUiLCJ1c2UgbW9tZW50LnVwZGF0ZUxvY2FsZShsb2NhbGVO''@;'; put 'put ''YW1lLCBjb25maWcpIHRvIGNoYW5nZSBhbiBleGlzdGluZyBsb2NhbGUuIG1vbWVudC5kZWZpbmVMb2NhbGUobG9jYWxlTmFtZSwgY29uZmlnKSBzaG91bGQgb25seSBiZSB1c2VkIGZvciBjcmVhdGluZyBhIG5ldyBsb2NhbGUgU2VlIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2Fy''@;'; put 'put ''bmluZ3MvZGVmaW5lLWxvY2FsZS8gZm9yIG1vcmUgaW5mby4iKSxJdD1Ib1tDZV0uX2NvbmZpZztlbHNlIGlmKG51bGwhPUtlLnBhcmVudExvY2FsZSlpZihudWxsIT1Ib1tLZS5wYXJlbnRMb2NhbGVdKUl0PUhvW0tlLnBhcmVudExvY2FsZV0uX2NvbmZpZztlbHNle2lmKG51bGw9PShtdD1i''@;'; put 'put ''bihLZS5wYXJlbnRMb2NhbGUpKSlyZXR1cm4ga29bS2UucGFyZW50TG9jYWxlXXx8KGtvW0tlLnBhcmVudExvY2FsZV09W10pLGtvW0tlLnBhcmVudExvY2FsZV0ucHVzaCh7bmFtZTpDZSxjb25maWc6S2V9KSxudWxsO0l0PW10Ll9jb25maWd9cmV0dXJuIEhvW0NlXT1uZXcgQyh4KEl0LEtl''@;'; put 'put ''KSksa29bQ2VdJiZrb1tDZV0uZm9yRWFjaChmdW5jdGlvbihkbil7YmkoZG4ubmFtZSxkbi5jb25maWcpfSksdXIoQ2UpLEhvW0NlXX1yZXR1cm4gZGVsZXRlIEhvW0NlXSxudWxsfWZ1bmN0aW9uIHRhKENlKXt2YXIgS2U7aWYoQ2UmJkNlLl9sb2NhbGUmJkNlLl9sb2NhbGUuX2FiYnImJihD''@;'; put 'put ''ZT1DZS5fbG9jYWxlLl9hYmJyKSwhQ2UpcmV0dXJuIFN0O2lmKCFCKENlKSl7aWYoS2U9Ym4oQ2UpKXJldHVybiBLZTtDZT1bQ2VdfXJldHVybiBmdW5jdGlvbiBtbihDZSl7Zm9yKHZhciBtdCxJdCxkbixxbixLZT0wO0tlPENlLmxlbmd0aDspe2ZvcihtdD0ocW49X24oQ2VbS2VdKS5zcGxp''@;'; put 'put ''dCgiLSIpKS5sZW5ndGgsSXQ9KEl0PV9uKENlW0tlKzFdKSk/SXQuc3BsaXQoIi0iKTpudWxsO210PjA7KXtpZihkbj1ibihxbi5zbGljZSgwLG10KS5qb2luKCItIikpKXJldHVybiBkbjtpZihJdCYmSXQubGVuZ3RoPj1tdCYmQnQocW4sSXQpPj1tdC0xKWJyZWFrO210LS19S2UrK31yZXR1''@;'; put 'put ''cm4gU3R9KENlKX1mdW5jdGlvbiBWYShDZSl7dmFyIEtlLG10PUNlLl9hO3JldHVybiBtdCYmLTI9PT1ZKENlKS5vdmVyZmxvdyYmKEtlPW10W2hpXTwwfHxtdFtoaV0+MTE/aGk6bXRbY25dPDF8fG10W2NuXT5wYShtdFt6dF0sbXRbaGldKT9jbjptdFtmbl08MHx8bXRbZm5dPjI0fHwyND09''@;'; put 'put ''PW10W2ZuXSYmKDAhPT1tdFtJaV18fDAhPT1tdFtYdF18fDAhPT1tdFtlbl0pP2ZuOm10W0lpXTwwfHxtdFtJaV0+NTk/SWk6bXRbWHRdPDB8fG10W1h0XT41OT9YdDptdFtlbl08MHx8bXRbZW5dPjk5OT9lbjotMSxZKENlKS5fb3ZlcmZsb3dEYXlPZlllYXImJihLZTx6dHx8S2U+Y24pJiYo''@;'; put 'put ''S2U9Y24pLFkoQ2UpLl9vdmVyZmxvd1dlZWtzJiYtMT09PUtlJiYoS2U9dWEpLFkoQ2UpLl9vdmVyZmxvd1dlZWtkYXkmJi0xPT09S2UmJihLZT1FaSksWShDZSkub3ZlcmZsb3c9S2UpLENlfXZhciAkbz0vXlxzKigoPzpbKy1dXGR7Nn18XGR7NH0pLSg/OlxkXGQtXGRcZHxXXGRcZC1cZHxX''@;'; put 'put ''XGRcZHxcZFxkXGR8XGRcZCkpKD86KFR8ICkoXGRcZCg/OjpcZFxkKD86OlxkXGQoPzpbLixdXGQrKT8pPyk/KShbKy1dXGRcZCg/Ojo/XGRcZCk/fFxzKlopPyk/JC8sWGw9L15ccyooKD86WystXVxkezZ9fFxkezR9KSg/OlxkXGRcZFxkfFdcZFxkXGR8V1xkXGR8XGRcZFxkfFxkXGR8KSko''@;'; put 'put ''PzooVHwgKShcZFxkKD86XGRcZCg/OlxkXGQoPzpbLixdXGQrKT8pPyk/KShbKy1dXGRcZCg/Ojo/XGRcZCk/fFxzKlopPyk/JC8sdG89L1p8WystXVxkXGQoPzo6P1xkXGQpPy8sX289W1siWVlZWVlZLU1NLUREIiwvWystXVxkezZ9LVxkXGQtXGRcZC9dLFsiWVlZWS1NTS1ERCIsL1xkezR9''@;'; put 'put ''LVxkXGQtXGRcZC9dLFsiR0dHRy1bV11XVy1FIiwvXGR7NH0tV1xkXGQtXGQvXSxbIkdHR0ctW1ddV1ciLC9cZHs0fS1XXGRcZC8sITFdLFsiWVlZWS1EREQiLC9cZHs0fS1cZHszfS9dLFsiWVlZWS1NTSIsL1xkezR9LVxkXGQvLCExXSxbIllZWVlZWU1NREQiLC9bKy1dXGR7MTB9L10sWyJZ''@;'; put 'put ''WVlZTU1ERCIsL1xkezh9L10sWyJHR0dHW1ddV1dFIiwvXGR7NH1XXGR7M30vXSxbIkdHR0dbV11XVyIsL1xkezR9V1xkezJ9LywhMV0sWyJZWVlZREREIiwvXGR7N30vXSxbIllZWVlNTSIsL1xkezZ9LywhMV0sWyJZWVlZIiwvXGR7NH0vLCExXV0samk9W1siSEg6bW06c3MuU1NTUyIsL1xk''@;'; put 'put ''XGQ6XGRcZDpcZFxkXC5cZCsvXSxbIkhIOm1tOnNzLFNTU1MiLC9cZFxkOlxkXGQ6XGRcZCxcZCsvXSxbIkhIOm1tOnNzIiwvXGRcZDpcZFxkOlxkXGQvXSxbIkhIOm1tIiwvXGRcZDpcZFxkL10sWyJISG1tc3MuU1NTUyIsL1xkXGRcZFxkXGRcZFwuXGQrL10sWyJISG1tc3MsU1NTUyIsL1xk''@;'; put 'put ''XGRcZFxkXGRcZCxcZCsvXSxbIkhIbW1zcyIsL1xkXGRcZFxkXGRcZC9dLFsiSEhtbSIsL1xkXGRcZFxkL10sWyJISCIsL1xkXGQvXV0sUGM9L15cLz9EYXRlXCgoLT9cZCspL2ksemw9L14oPzooTW9ufFR1ZXxXZWR8VGh1fEZyaXxTYXR8U3VuKSw/XHMpPyhcZHsxLDJ9KVxzKEphbnxGZWJ8''@;'; put 'put ''TWFyfEFwcnxNYXl8SnVufEp1bHxBdWd8U2VwfE9jdHxOb3Z8RGVjKVxzKFxkezIsNH0pXHMoXGRcZCk6KFxkXGQpKD86OihcZFxkKSk/XHMoPzooVVR8R01UfFtFQ01QXVtTRF1UKXwoW1p6XSl8KFsrLV1cZHs0fSkpJC8sQ2E9e1VUOjAsR01UOjAsRURUOi0yNDAsRVNUOi0zMDAsQ0RUOi0z''@;'; put 'put ''MDAsQ1NUOi0zNjAsTURUOi0zNjAsTVNUOi00MjAsUERUOi00MjAsUFNUOi00ODB9O2Z1bmN0aW9uIFRhKENlKXt2YXIgS2UsbXQscW4saWksSWEsU28sSXQ9Q2UuX2ksZG49JG8uZXhlYyhJdCl8fFhsLmV4ZWMoSXQpLGZzPV9vLmxlbmd0aCxOdT1qaS5sZW5ndGg7aWYoZG4pe2ZvcihZKENl''@;'; put 'put ''KS5pc289ITAsS2U9MCxtdD1mcztLZTxtdDtLZSsrKWlmKF9vW0tlXVsxXS5leGVjKGRuWzFdKSl7aWk9X29bS2VdWzBdLHFuPSExIT09X29bS2VdWzJdO2JyZWFrfWlmKG51bGw9PWlpKXJldHVybiB2b2lkKENlLl9pc1ZhbGlkPSExKTtpZihkblszXSl7Zm9yKEtlPTAsbXQ9TnU7S2U8bXQ7''@;'; put 'put ''S2UrKylpZihqaVtLZV1bMV0uZXhlYyhkblszXSkpe0lhPShkblsyXXx8IiAiKStqaVtLZV1bMF07YnJlYWt9aWYobnVsbD09SWEpcmV0dXJuIHZvaWQoQ2UuX2lzVmFsaWQ9ITEpfWlmKCFxbiYmbnVsbCE9SWEpcmV0dXJuIHZvaWQoQ2UuX2lzVmFsaWQ9ITEpO2lmKGRuWzRdKXtpZighdG8u''@;'; put 'put ''ZXhlYyhkbls0XSkpcmV0dXJuIHZvaWQoQ2UuX2lzVmFsaWQ9ITEpO1NvPSJaIn1DZS5fZj1paSsoSWF8fCIiKSsoU298fCIiKSxmNChDZSl9ZWxzZSBDZS5faXNWYWxpZD0hMX1mdW5jdGlvbiBHMChDZSl7dmFyIEtlPXBhcnNlSW50KENlLDEwKTtyZXR1cm4gS2U8PTQ5PzJlMytLZTpLZTw9''@;'; put 'put ''OTk5PzE5MDArS2U6S2V9ZnVuY3Rpb24gTXMoQ2Upe3ZhciBtdCxLZT16bC5leGVjKGZ1bmN0aW9uICQwKENlKXtyZXR1cm4gQ2UucmVwbGFjZSgvXChbXigpXSpcKXxbXG5cdF0vZywiICIpLnJlcGxhY2UoLyhcc1xzKykvZywiICIpLnJlcGxhY2UoL15cc1xzKi8sIiIpLnJlcGxhY2UoL1xz''@;'; put 'put ''XHMqJC8sIiIpfShDZS5faSkpO2lmKEtlKXtpZihtdD1mdW5jdGlvbiBYaChDZSxLZSxtdCxJdCxkbixxbil7dmFyIGlpPVtHMChDZSksbGEuaW5kZXhPZihLZSkscGFyc2VJbnQobXQsMTApLHBhcnNlSW50KEl0LDEwKSxwYXJzZUludChkbiwxMCldO3JldHVybiBxbiYmaWkucHVzaChwYXJz''@;'; put 'put ''ZUludChxbiwxMCkpLGlpfShLZVs0XSxLZVszXSxLZVsyXSxLZVs1XSxLZVs2XSxLZVs3XSksIWZ1bmN0aW9uIE5vKENlLEtlLG10KXtyZXR1cm4hQ2V8fE9sLmluZGV4T2YoQ2UpPT09bmV3IERhdGUoS2VbMF0sS2VbMV0sS2VbMl0pLmdldERheSgpfHwoWShtdCkud2Vla2RheU1pc21hdGNo''@;'; put 'put ''PSEwLG10Ll9pc1ZhbGlkPSExLCExKX0oS2VbMV0sbXQsQ2UpKXJldHVybjtDZS5fYT1tdCxDZS5fdHptPWZ1bmN0aW9uIHFpKENlLEtlLG10KXtpZihDZSlyZXR1cm4gQ2FbQ2VdO2lmKEtlKXJldHVybiAwO3ZhciBJdD1wYXJzZUludChtdCwxMCksZG49SXQlMTAwO3JldHVybihJdC1kbikv''@;'; put 'put ''MTAwKjYwK2RufShLZVs4XSxLZVs5XSxLZVsxMF0pLENlLl9kPUpyLmFwcGx5KG51bGwsQ2UuX2EpLENlLl9kLnNldFVUQ01pbnV0ZXMoQ2UuX2QuZ2V0VVRDTWludXRlcygpLUNlLl90em0pLFkoQ2UpLnJmYzI4MjI9ITB9ZWxzZSBDZS5faXNWYWxpZD0hMX1mdW5jdGlvbiBvbyhDZSxLZSxt''@;'; put 'put ''dCl7cmV0dXJuIENlPz9LZT8/bXR9ZnVuY3Rpb24gX2woQ2Upe3ZhciBLZSxtdCxkbixxbixpaSxJdD1bXTtpZighQ2UuX2Qpe2Zvcihkbj1mdW5jdGlvbiBhNShDZSl7dmFyIEtlPW5ldyBEYXRlKF8ubm93KCkpO3JldHVybiBDZS5fdXNlVVRDP1tLZS5nZXRVVENGdWxsWWVhcigpLEtlLmdl''@;'; put 'put ''dFVUQ01vbnRoKCksS2UuZ2V0VVRDRGF0ZSgpXTpbS2UuZ2V0RnVsbFllYXIoKSxLZS5nZXRNb250aCgpLEtlLmdldERhdGUoKV19KENlKSxDZS5fdyYmbnVsbD09Q2UuX2FbY25dJiZudWxsPT1DZS5fYVtoaV0mJmZ1bmN0aW9uIHRoKENlKXt2YXIgS2UsbXQsSXQsZG4scW4saWksSWEsU28s''@;'; put 'put ''ZnM7bnVsbCE9KEtlPUNlLl93KS5HR3x8bnVsbCE9S2UuV3x8bnVsbCE9S2UuRT8ocW49MSxpaT00LG10PW9vKEtlLkdHLENlLl9hW3p0XSxMdShzbCgpLDEsNCkueWVhciksSXQ9b28oS2UuVywxKSwoKGRuPW9vKEtlLkUsMSkpPDF8fGRuPjcpJiYoU289ITApKToocW49Q2UuX2xvY2FsZS5f''@;'; put 'put ''d2Vlay5kb3csaWk9Q2UuX2xvY2FsZS5fd2Vlay5kb3ksZnM9THUoc2woKSxxbixpaSksbXQ9b28oS2UuZ2csQ2UuX2FbenRdLGZzLnllYXIpLEl0PW9vKEtlLncsZnMud2VlayksbnVsbCE9S2UuZD8oKGRuPUtlLmQpPDB8fGRuPjYpJiYoU289ITApOm51bGwhPUtlLmU/KGRuPUtlLmUrcW4s''@;'; put 'put ''KEtlLmU8MHx8S2UuZT42KSYmKFNvPSEwKSk6ZG49cW4pLEl0PDF8fEl0PlByKG10LHFuLGlpKT9ZKENlKS5fb3ZlcmZsb3dXZWVrcz0hMDpudWxsIT1Tbz9ZKENlKS5fb3ZlcmZsb3dXZWVrZGF5PSEwOihJYT1IYShtdCxJdCxkbixxbixpaSksQ2UuX2FbenRdPUlhLnllYXIsQ2UuX2RheU9m''@;'; put 'put ''WWVhcj1JYS5kYXlPZlllYXIpfShDZSksbnVsbCE9Q2UuX2RheU9mWWVhciYmKGlpPW9vKENlLl9hW3p0XSxkblt6dF0pLChDZS5fZGF5T2ZZZWFyPnZyKGlpKXx8MD09PUNlLl9kYXlPZlllYXIpJiYoWShDZSkuX292ZXJmbG93RGF5T2ZZZWFyPSEwKSxtdD1KcihpaSwwLENlLl9kYXlPZlll''@;'; put 'put ''YXIpLENlLl9hW2hpXT1tdC5nZXRVVENNb250aCgpLENlLl9hW2NuXT1tdC5nZXRVVENEYXRlKCkpLEtlPTA7S2U8MyYmbnVsbD09Q2UuX2FbS2VdOysrS2UpQ2UuX2FbS2VdPUl0W0tlXT1kbltLZV07Zm9yKDtLZTw3O0tlKyspQ2UuX2FbS2VdPUl0W0tlXT1udWxsPT1DZS5fYVtLZV0/Mj09''@;'; put 'put ''PUtlPzE6MDpDZS5fYVtLZV07MjQ9PT1DZS5fYVtmbl0mJjA9PT1DZS5fYVtJaV0mJjA9PT1DZS5fYVtYdF0mJjA9PT1DZS5fYVtlbl0mJihDZS5fbmV4dERheT0hMCxDZS5fYVtmbl09MCksQ2UuX2Q9KENlLl91c2VVVEM/SnI6VnQpLmFwcGx5KG51bGwsSXQpLHFuPUNlLl91c2VVVEM/Q2Uu''@;'; put 'put ''X2QuZ2V0VVRDRGF5KCk6Q2UuX2QuZ2V0RGF5KCksbnVsbCE9Q2UuX3R6bSYmQ2UuX2Quc2V0VVRDTWludXRlcyhDZS5fZC5nZXRVVENNaW51dGVzKCktQ2UuX3R6bSksQ2UuX25leHREYXkmJihDZS5fYVtmbl09MjQpLENlLl93JiZ0eXBlb2YgQ2UuX3cuZDwidSImJkNlLl93LmQhPT1xbiYm''@;'; put 'put ''KFkoQ2UpLndlZWtkYXlNaXNtYXRjaD0hMCl9fWZ1bmN0aW9uIGY0KENlKXtpZihDZS5fZiE9PV8uSVNPXzg2MDEpaWYoQ2UuX2YhPT1fLlJGQ18yODIyKXtDZS5fYT1bXSxZKENlKS5lbXB0eT0hMDt2YXIgbXQsSXQsZG4scW4saWksZnMsTnUsS2U9IiIrQ2UuX2ksSWE9S2UubGVuZ3RoLFNv''@;'; put 'put ''PTA7Zm9yKE51PShkbj1vdChDZS5fZixDZS5fbG9jYWxlKS5tYXRjaChtKXx8W10pLmxlbmd0aCxtdD0wO210PE51O210KyspKEl0PShLZS5tYXRjaChzdChxbj1kblttdF0sQ2UpKXx8W10pWzBdKSYmKChpaT1LZS5zdWJzdHIoMCxLZS5pbmRleE9mKEl0KSkpLmxlbmd0aD4wJiZZKENlKS51''@;'; put 'put ''bnVzZWRJbnB1dC5wdXNoKGlpKSxLZT1LZS5zbGljZShLZS5pbmRleE9mKEl0KStJdC5sZW5ndGgpLFNvKz1JdC5sZW5ndGgpLHRlW3FuXT8oSXQ/WShDZSkuZW1wdHk9ITE6WShDZSkudW51c2VkVG9rZW5zLnB1c2gocW4pLGpuKHFuLEl0LENlKSk6Q2UuX3N0cmljdCYmIUl0JiZZKENlKS51''@;'; put 'put ''bnVzZWRUb2tlbnMucHVzaChxbik7WShDZSkuY2hhcnNMZWZ0T3Zlcj1JYS1TbyxLZS5sZW5ndGg+MCYmWShDZSkudW51c2VkSW5wdXQucHVzaChLZSksQ2UuX2FbZm5dPD0xMiYmITA9PT1ZKENlKS5iaWdIb3VyJiZDZS5fYVtmbl0+MCYmKFkoQ2UpLmJpZ0hvdXI9dm9pZCAwKSxZKENlKS5w''@;'; put 'put ''YXJzZWREYXRlUGFydHM9Q2UuX2Euc2xpY2UoMCksWShDZSkubWVyaWRpZW09Q2UuX21lcmlkaWVtLENlLl9hW2ZuXT1mdW5jdGlvbiBwNChDZSxLZSxtdCl7dmFyIEl0O3JldHVybiBudWxsPT1tdD9LZTpudWxsIT1DZS5tZXJpZGllbUhvdXI/Q2UubWVyaWRpZW1Ib3VyKEtlLG10KToobnVs''@;'; put 'put ''bCE9Q2UuaXNQTSYmKChJdD1DZS5pc1BNKG10KSkmJktlPDEyJiYoS2UrPTEyKSwhSXQmJjEyPT09S2UmJihLZT0wKSksS2UpfShDZS5fbG9jYWxlLENlLl9hW2ZuXSxDZS5fbWVyaWRpZW0pLG51bGwhPT0oZnM9WShDZSkuZXJhKSYmKENlLl9hW3p0XT1DZS5fbG9jYWxlLmVyYXNDb252ZXJ0''@;'; put 'put ''WWVhcihmcyxDZS5fYVt6dF0pKSxfbChDZSksVmEoQ2UpfWVsc2UgTXMoQ2UpO2Vsc2UgVGEoQ2UpfWZ1bmN0aW9uIGx2KENlKXt2YXIgS2U9Q2UuX2ksbXQ9Q2UuX2Y7cmV0dXJuIENlLl9sb2NhbGU9Q2UuX2xvY2FsZXx8dGEoQ2UuX2wpLG51bGw9PT1LZXx8dm9pZCAwPT09bXQmJiIiPT09''@;'; put 'put ''S2U/Sih7bnVsbElucHV0OiEwfSk6KCJzdHJpbmciPT10eXBlb2YgS2UmJihDZS5faT1LZT1DZS5fbG9jYWxlLnByZXBhcnNlKEtlKSksX2UoS2UpP25ldyBtZShWYShLZSkpOihOKEtlKT9DZS5fZD1LZTpCKG10KT9mdW5jdGlvbiBLMChDZSl7dmFyIEtlLG10LEl0LGRuLHFuLGlpLElhPSEx''@;'; put 'put ''LFNvPUNlLl9mLmxlbmd0aDtpZigwPT09U28pcmV0dXJuIFkoQ2UpLmludmFsaWRGb3JtYXQ9ITAsdm9pZChDZS5fZD1uZXcgRGF0ZShOYU4pKTtmb3IoZG49MDtkbjxTbztkbisrKXFuPTAsaWk9ITEsS2U9bGUoe30sQ2UpLG51bGwhPUNlLl91c2VVVEMmJihLZS5fdXNlVVRDPUNlLl91c2VV''@;'; put 'put ''VEMpLEtlLl9mPUNlLl9mW2RuXSxmNChLZSksZWUoS2UpJiYoaWk9ITApLHFuKz1ZKEtlKS5jaGFyc0xlZnRPdmVyLHFuKz0xMCpZKEtlKS51bnVzZWRUb2tlbnMubGVuZ3RoLFkoS2UpLnNjb3JlPXFuLElhP3FuPEl0JiYoSXQ9cW4sbXQ9S2UpOihudWxsPT1JdHx8cW48SXR8fGlpKSYmKEl0''@;'; put 'put ''PXFuLG10PUtlLGlpJiYoSWE9ITApKTtLKENlLG10fHxLZSl9KENlKTptdD9mNChDZSk6ZnVuY3Rpb24gUncoQ2Upe3ZhciBLZT1DZS5faTtPKEtlKT9DZS5fZD1uZXcgRGF0ZShfLm5vdygpKTpOKEtlKT9DZS5fZD1uZXcgRGF0ZShLZS52YWx1ZU9mKCkpOiJzdHJpbmciPT10eXBlb2YgS2U/''@;'; put 'put ''ZnVuY3Rpb24gcmEoQ2Upe3ZhciBLZT1QYy5leGVjKENlLl9pKTtudWxsPT09S2U/KFRhKENlKSwhMT09PUNlLl9pc1ZhbGlkJiYoZGVsZXRlIENlLl9pc1ZhbGlkLE1zKENlKSwhMT09PUNlLl9pc1ZhbGlkJiYoZGVsZXRlIENlLl9pc1ZhbGlkLENlLl9zdHJpY3Q/Q2UuX2lzVmFsaWQ9ITE6''@;'; put 'put ''Xy5jcmVhdGVGcm9tSW5wdXRGYWxsYmFjayhDZSkpKSk6Q2UuX2Q9bmV3IERhdGUoK0tlWzFdKX0oQ2UpOkIoS2UpPyhDZS5fYT1MKEtlLnNsaWNlKDApLGZ1bmN0aW9uKG10KXtyZXR1cm4gcGFyc2VJbnQobXQsMTApfSksX2woQ2UpKTp3KEtlKT9mdW5jdGlvbiBndShDZSl7aWYoIUNlLl9k''@;'; put 'put ''KXt2YXIgS2U9bnQoQ2UuX2kpO0NlLl9hPUwoW0tlLnllYXIsS2UubW9udGgsdm9pZCAwPT09S2UuZGF5P0tlLmRhdGU6S2UuZGF5LEtlLmhvdXIsS2UubWludXRlLEtlLnNlY29uZCxLZS5taWxsaXNlY29uZF0sZnVuY3Rpb24oSXQpe3JldHVybiBJdCYmcGFyc2VJbnQoSXQsMTApfSksX2wo''@;'; put 'put ''Q2UpfX0oQ2UpOnooS2UpP0NlLl9kPW5ldyBEYXRlKEtlKTpfLmNyZWF0ZUZyb21JbnB1dEZhbGxiYWNrKENlKX0oQ2UpLGVlKENlKXx8KENlLl9kPW51bGwpLENlKSl9ZnVuY3Rpb24gY3YoQ2UsS2UsbXQsSXQsZG4pe3ZhciBxbj17fTtyZXR1cm4oITA9PT1LZXx8ITE9PT1LZSkmJihJdD1L''@;'; put 'put ''ZSxLZT12b2lkIDApLCghMD09PW10fHwhMT09PW10KSYmKEl0PW10LG10PXZvaWQgMCksKHcoQ2UpJiZGKENlKXx8QihDZSkmJjA9PT1DZS5sZW5ndGgpJiYoQ2U9dm9pZCAwKSxxbi5faXNBTW9tZW50T2JqZWN0PSEwLHFuLl91c2VVVEM9cW4uX2lzVVRDPWRuLHFuLl9sPW10LHFuLl9pPUNl''@;'; put 'put ''LHFuLl9mPUtlLHFuLl9zdHJpY3Q9SXQsZnVuY3Rpb24gRmMoQ2Upe3ZhciBLZT1uZXcgbWUoVmEobHYoQ2UpKSk7cmV0dXJuIEtlLl9uZXh0RGF5JiYoS2UuYWRkKDEsImQiKSxLZS5fbmV4dERheT12b2lkIDApLEtlfShxbil9ZnVuY3Rpb24gc2woQ2UsS2UsbXQsSXQpe3JldHVybiBjdihD''@;'; put 'put ''ZSxLZSxtdCxJdCwhMSl9Xy5jcmVhdGVGcm9tSW5wdXRGYWxsYmFjaz1TZSgidmFsdWUgcHJvdmlkZWQgaXMgbm90IGluIGEgcmVjb2duaXplZCBSRkMyODIyIG9yIElTTyBmb3JtYXQuIG1vbWVudCBjb25zdHJ1Y3Rpb24gZmFsbHMgYmFjayB0byBqcyBEYXRlKCksIHdoaWNoIGlzIG5vdCBy''@;'; put 'put ''ZWxpYWJsZSBhY3Jvc3MgYWxsIGJyb3dzZXJzIGFuZCB2ZXJzaW9ucy4gTm9uIFJGQzI4MjIvSVNPIGRhdGUgZm9ybWF0cyBhcmUgZGlzY291cmFnZWQuIFBsZWFzZSByZWZlciB0byBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL2pzLWRhdGUvIGZvciBtb3JlIGluZm8u''@;'; put 'put ''IixmdW5jdGlvbihDZSl7Q2UuX2Q9bmV3IERhdGUoQ2UuX2krKENlLl91c2VVVEM/IiBVVEMiOiIiKSl9KSxfLklTT184NjAxPWZ1bmN0aW9uKCl7fSxfLlJGQ18yODIyPWZ1bmN0aW9uKCl7fTt2YXIgSTM9U2UoIm1vbWVudCgpLm1pbiBpcyBkZXByZWNhdGVkLCB1c2UgbW9tZW50Lm1heCBp''@;'; put 'put ''bnN0ZWFkLiBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL21pbi1tYXgvIixmdW5jdGlvbigpe3ZhciBDZT1zbC5hcHBseShudWxsLGFyZ3VtZW50cyk7cmV0dXJuIHRoaXMuaXNWYWxpZCgpJiZDZS5pc1ZhbGlkKCk/Q2U8dGhpcz90aGlzOkNlOkooKX0pLEx3PVNlKCJt''@;'; put 'put ''b21lbnQoKS5tYXggaXMgZGVwcmVjYXRlZCwgdXNlIG1vbWVudC5taW4gaW5zdGVhZC4gaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9taW4tbWF4LyIsZnVuY3Rpb24oKXt2YXIgQ2U9c2wuYXBwbHkobnVsbCxhcmd1bWVudHMpO3JldHVybiB0aGlzLmlzVmFsaWQoKSYm''@;'; put 'put ''Q2UuaXNWYWxpZCgpP0NlPnRoaXM/dGhpczpDZTpKKCl9KTtmdW5jdGlvbiBuaChDZSxLZSl7dmFyIG10LEl0O2lmKDE9PT1LZS5sZW5ndGgmJkIoS2VbMF0pJiYoS2U9S2VbMF0pLCFLZS5sZW5ndGgpcmV0dXJuIHNsKCk7Zm9yKG10PUtlWzBdLEl0PTE7SXQ8S2UubGVuZ3RoOysrSXQpKCFL''@;'; put 'put ''ZVtJdF0uaXNWYWxpZCgpfHxLZVtJdF1bQ2VdKG10KSkmJihtdD1LZVtJdF0pO3JldHVybiBtdH12YXIgZmk9WyJ5ZWFyIiwicXVhcnRlciIsIm1vbnRoIiwid2VlayIsImRheSIsImhvdXIiLCJtaW51dGUiLCJzZWNvbmQiLCJtaWxsaXNlY29uZCJdO2Z1bmN0aW9uIHBmKENlKXt2YXIgS2U9''@;'; put 'put ''bnQoQ2UpLG10PUtlLnllYXJ8fDAsSXQ9S2UucXVhcnRlcnx8MCxkbj1LZS5tb250aHx8MCxxbj1LZS53ZWVrfHxLZS5pc29XZWVrfHwwLGlpPUtlLmRheXx8MCxJYT1LZS5ob3VyfHwwLFNvPUtlLm1pbnV0ZXx8MCxmcz1LZS5zZWNvbmR8fDAsTnU9S2UubWlsbGlzZWNvbmR8fDA7dGhpcy5f''@;'; put 'put ''aXNWYWxpZD1mdW5jdGlvbiBvNShDZSl7dmFyIEtlLEl0LG10PSExLGRuPWZpLmxlbmd0aDtmb3IoS2UgaW4gQ2UpaWYoUChDZSxLZSkmJigtMT09PVdpLmNhbGwoZmksS2UpfHxudWxsIT1DZVtLZV0mJmlzTmFOKENlW0tlXSkpKXJldHVybiExO2ZvcihJdD0wO0l0PGRuOysrSXQpaWYoQ2Vb''@;'; put 'put ''ZmlbSXRdXSl7aWYobXQpcmV0dXJuITE7cGFyc2VGbG9hdChDZVtmaVtJdF1dKSE9PVR0KENlW2ZpW0l0XV0pJiYobXQ9ITApfXJldHVybiEwfShLZSksdGhpcy5fbWlsbGlzZWNvbmRzPStOdSsxZTMqZnMrNmU0KlNvKzFlMypJYSo2MCo2MCx0aGlzLl9kYXlzPStpaSs3KnFuLHRoaXMuX21v''@;'; put 'put ''bnRocz0rZG4rMypJdCsxMiptdCx0aGlzLl9kYXRhPXt9LHRoaXMuX2xvY2FsZT10YSgpLHRoaXMuX2J1YmJsZSgpfWZ1bmN0aW9uIGw1KENlKXtyZXR1cm4gQ2UgaW5zdGFuY2VvZiBwZn1mdW5jdGlvbiBnNChDZSl7cmV0dXJuIENlPDA/LTEqTWF0aC5yb3VuZCgtMSpDZSk6TWF0aC5yb3Vu''@;'; put 'put ''ZChDZSl9ZnVuY3Rpb24gSTEoQ2UsS2Upe3NlKENlLDAsMCxmdW5jdGlvbigpe3ZhciBtdD10aGlzLnV0Y09mZnNldCgpLEl0PSIrIjtyZXR1cm4gbXQ8MCYmKG10PS1tdCxJdD0iLSIpLEl0K0Uofn4obXQvNjApLDIpK0tlK0Uofn5tdCU2MCwyKX0pfUkxKCJaIiwiOiIpLEkxKCJaWiIsIiIp''@;'; put 'put ''LFJuKCJaIixSaSksUm4oIlpaIixSaSksaHQoWyJaIiwiWloiXSxmdW5jdGlvbihDZSxLZSxtdCl7bXQuX3VzZVVUQz0hMCxtdC5fdHptPWxkKFJpLENlKX0pO3ZhciB1dj0vKFtcK1wtXXxcZFxkKS9naTtmdW5jdGlvbiBsZChDZSxLZSl7dmFyIGRuLHFuLG10PShLZXx8IiIpLm1hdGNoKENl''@;'; put 'put ''KTtyZXR1cm4gbnVsbD09PW10P251bGw6MD09PShxbj02MCooZG49KChtdFttdC5sZW5ndGgtMV18fFtdKSsiIikubWF0Y2godXYpfHxbIi0iLDAsMF0pWzFdK1R0KGRuWzJdKSk/MDoiKyI9PT1kblswXT9xbjotcW59ZnVuY3Rpb24gVDYoQ2UsS2Upe3ZhciBtdCxJdDtyZXR1cm4gS2UuX2lz''@;'; put 'put ''VVRDPyhtdD1LZS5jbG9uZSgpLEl0PShfZShDZSl8fE4oQ2UpP0NlLnZhbHVlT2YoKTpzbChDZSkudmFsdWVPZigpKS1tdC52YWx1ZU9mKCksbXQuX2Quc2V0VGltZShtdC5fZC52YWx1ZU9mKCkrSXQpLF8udXBkYXRlT2Zmc2V0KG10LCExKSxtdCk6c2woQ2UpLmxvY2FsKCl9ZnVuY3Rpb24g''@;'; put 'put ''bXUoQ2Upe3JldHVybi1NYXRoLnJvdW5kKENlLl9kLmdldFRpbWV6b25lT2Zmc2V0KCkpfWZ1bmN0aW9uIF8wKCl7cmV0dXJuISF0aGlzLmlzVmFsaWQoKSYmdGhpcy5faXNVVEMmJjA9PT10aGlzLl9vZmZzZXR9Xy51cGRhdGVPZmZzZXQ9ZnVuY3Rpb24oKXt9O3ZhciBBNj0vXigtfFwrKT8o''@;'; put 'put ''PzooXGQqKVsuIF0pPyhcZCspOihcZCspKD86OihcZCspKFwuXGQqKT8pPyQvLGUyPS9eKC18XCspP1AoPzooWy0rXT9bMC05LC5dKilZKT8oPzooWy0rXT9bMC05LC5dKilNKT8oPzooWy0rXT9bMC05LC5dKilXKT8oPzooWy0rXT9bMC05LC5dKilEKT8oPzpUKD86KFstK10/WzAtOSwuXSop''@;'; put 'put ''SCk/KD86KFstK10/WzAtOSwuXSopTSk/KD86KFstK10/WzAtOSwuXSopUyk/KT8kLztmdW5jdGlvbiBKbChDZSxLZSl7dmFyIGRuLHFuLGlpLG10PUNlLEl0PW51bGw7cmV0dXJuIGw1KENlKT9tdD17bXM6Q2UuX21pbGxpc2Vjb25kcyxkOkNlLl9kYXlzLE06Q2UuX21vbnRoc306eihDZSl8''@;'; put 'put ''fCFpc05hTigrQ2UpPyhtdD17fSxLZT9tdFtLZV09K0NlOm10Lm1pbGxpc2Vjb25kcz0rQ2UpOihJdD1BNi5leGVjKENlKSk/KGRuPSItIj09PUl0WzFdPy0xOjEsbXQ9e3k6MCxkOlR0KEl0W2NuXSkqZG4saDpUdChJdFtmbl0pKmRuLG06VHQoSXRbSWldKSpkbixzOlR0KEl0W1h0XSkqZG4s''@;'; put 'put ''bXM6VHQoZzQoMWUzKkl0W2VuXSkpKmRufSk6KEl0PWUyLmV4ZWMoQ2UpKT9tdD17eTpSMShJdFsyXSxkbj0iLSI9PT1JdFsxXT8tMToxKSxNOlIxKEl0WzNdLGRuKSx3OlIxKEl0WzRdLGRuKSxkOlIxKEl0WzVdLGRuKSxoOlIxKEl0WzZdLGRuKSxtOlIxKEl0WzddLGRuKSxzOlIxKEl0Wzhd''@;'; put 'put ''LGRuKX06bnVsbD09bXQ/bXQ9e306Im9iamVjdCI9PXR5cGVvZiBtdCYmKCJmcm9tImluIG10fHwidG8iaW4gbXQpJiYoaWk9ZnVuY3Rpb24gdHMoQ2UsS2Upe3ZhciBtdDtyZXR1cm4gQ2UuaXNWYWxpZCgpJiZLZS5pc1ZhbGlkKCk/KEtlPVQ2KEtlLENlKSxDZS5pc0JlZm9yZShLZSk/bXQ9''@;'; put 'put ''STAoQ2UsS2UpOigobXQ9STAoS2UsQ2UpKS5taWxsaXNlY29uZHM9LW10Lm1pbGxpc2Vjb25kcyxtdC5tb250aHM9LW10Lm1vbnRocyksbXQpOnttaWxsaXNlY29uZHM6MCxtb250aHM6MH19KHNsKG10LmZyb20pLHNsKG10LnRvKSksKG10PXt9KS5tcz1paS5taWxsaXNlY29uZHMsbXQuTT1p''@;'; put 'put ''aS5tb250aHMpLHFuPW5ldyBwZihtdCksbDUoQ2UpJiZQKENlLCJfbG9jYWxlIikmJihxbi5fbG9jYWxlPUNlLl9sb2NhbGUpLGw1KENlKSYmUChDZSwiX2lzVmFsaWQiKSYmKHFuLl9pc1ZhbGlkPUNlLl9pc1ZhbGlkKSxxbn1mdW5jdGlvbiBSMShDZSxLZSl7dmFyIG10PUNlJiZwYXJzZUZs''@;'; put 'put ''b2F0KENlLnJlcGxhY2UoIiwiLCIuIikpO3JldHVybihpc05hTihtdCk/MDptdCkqS2V9ZnVuY3Rpb24gSTAoQ2UsS2Upe3ZhciBtdD17fTtyZXR1cm4gbXQubW9udGhzPUtlLm1vbnRoKCktQ2UubW9udGgoKSsxMiooS2UueWVhcigpLUNlLnllYXIoKSksQ2UuY2xvbmUoKS5hZGQobXQubW9u''@;'; put 'put ''dGhzLCJNIikuaXNBZnRlcihLZSkmJi0tbXQubW9udGhzLG10Lm1pbGxpc2Vjb25kcz0rS2UtK0NlLmNsb25lKCkuYWRkKG10Lm1vbnRocywiTSIpLG10fWZ1bmN0aW9uIHQyKENlLEtlKXtyZXR1cm4gZnVuY3Rpb24obXQsSXQpe3ZhciBxbjtyZXR1cm4gbnVsbCE9PUl0JiYhaXNOYU4oK0l0''@;'; put 'put ''KSYmKFYoS2UsIm1vbWVudCgpLiIrS2UrIihwZXJpb2QsIG51bWJlcikgaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSBtb21lbnQoKS4iK0tlKyIobnVtYmVyLCBwZXJpb2QpLiBTZWUgaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9hZGQtaW52ZXJ0ZWQtcGFyYW0vIGZv''@;'; put 'put ''ciBtb3JlIGluZm8uIikscW49bXQsbXQ9SXQsSXQ9cW4pLEwzKHRoaXMsSmwobXQsSXQpLENlKSx0aGlzfX1mdW5jdGlvbiBMMyhDZSxLZSxtdCxJdCl7dmFyIGRuPUtlLl9taWxsaXNlY29uZHMscW49ZzQoS2UuX2RheXMpLGlpPWc0KEtlLl9tb250aHMpO0NlLmlzVmFsaWQoKSYmKEl0PUl0''@;'; put 'put ''Pz8hMCxpaSYmcHUoQ2UsUXIoQ2UsIk1vbnRoIikraWkqbXQpLHFuJiZWaShDZSwiRGF0ZSIsUXIoQ2UsIkRhdGUiKStxbiptdCksZG4mJkNlLl9kLnNldFRpbWUoQ2UuX2QudmFsdWVPZigpK2RuKm10KSxJdCYmXy51cGRhdGVPZmZzZXQoQ2UscW58fGlpKSl9SmwuZm49cGYucHJvdG90eXBl''@;'; put 'put ''LEpsLmludmFsaWQ9ZnVuY3Rpb24gdDAoKXtyZXR1cm4gSmwoTmFOKX07dmFyIGs2PXQyKDEsImFkZCIpLHU1PXQyKC0xLCJzdWJ0cmFjdCIpO2Z1bmN0aW9uIE8zKENlKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIENlfHxDZSBpbnN0YW5jZW9mIFN0cmluZ31mdW5jdGlvbiBKcyhDZSl7cmV0''@;'; put 'put ''dXJuIF9lKENlKXx8TihDZSl8fE8zKENlKXx8eihDZSl8fGZ1bmN0aW9uIEZ3KENlKXt2YXIgS2U9QihDZSksbXQ9ITE7cmV0dXJuIEtlJiYobXQ9MD09PUNlLmZpbHRlcihmdW5jdGlvbihJdCl7cmV0dXJuIXooSXQpJiZPMyhDZSl9KS5sZW5ndGgpLEtlJiZtdH0oQ2UpfHxmdW5jdGlvbiBO''@;'; put 'put ''bihDZSl7dmFyIGRuLEtlPXcoQ2UpJiYhRihDZSksbXQ9ITEsSXQ9WyJ5ZWFycyIsInllYXIiLCJ5IiwibW9udGhzIiwibW9udGgiLCJNIiwiZGF5cyIsImRheSIsImQiLCJkYXRlcyIsImRhdGUiLCJEIiwiaG91cnMiLCJob3VyIiwiaCIsIm1pbnV0ZXMiLCJtaW51dGUiLCJtIiwic2Vjb25k''@;'; put 'put ''cyIsInNlY29uZCIsInMiLCJtaWxsaXNlY29uZHMiLCJtaWxsaXNlY29uZCIsIm1zIl0saWk9SXQubGVuZ3RoO2Zvcihkbj0wO2RuPGlpO2RuKz0xKW10PW10fHxQKENlLEl0W2RuXSk7cmV0dXJuIEtlJiZtdH0oQ2UpfHxudWxsPT1DZX1mdW5jdGlvbiBQMyhDZSxLZSl7aWYoQ2UuZGF0ZSgp''@;'; put 'put ''PEtlLmRhdGUoKSlyZXR1cm4tUDMoS2UsQ2UpO3ZhciBtdD0xMiooS2UueWVhcigpLUNlLnllYXIoKSkrKEtlLm1vbnRoKCktQ2UubW9udGgoKSksSXQ9Q2UuY2xvbmUoKS5hZGQobXQsIm1vbnRocyIpO3JldHVybi0obXQrKEtlLUl0PDA/KEtlLUl0KS8oSXQtQ2UuY2xvbmUoKS5hZGQobXQt''@;'; put 'put ''MSwibW9udGhzIikpOihLZS1JdCkvKENlLmNsb25lKCkuYWRkKG10KzEsIm1vbnRocyIpLUl0KSkpfHwwfWZ1bmN0aW9uIEthKENlKXt2YXIgS2U7cmV0dXJuIHZvaWQgMD09PUNlP3RoaXMuX2xvY2FsZS5fYWJicjoobnVsbCE9KEtlPXRhKENlKSkmJih0aGlzLl9sb2NhbGU9S2UpLHRoaXMp''@;'; put 'put ''fV8uZGVmYXVsdEZvcm1hdD0iWVlZWS1NTS1ERFRISDptbTpzc1oiLF8uZGVmYXVsdEZvcm1hdFV0Yz0iWVlZWS1NTS1ERFRISDptbTpzc1taXSI7dmFyIFZyPVNlKCJtb21lbnQoKS5sYW5nKCkgaXMgZGVwcmVjYXRlZC4gSW5zdGVhZCwgdXNlIG1vbWVudCgpLmxvY2FsZURhdGEoKSB0byBn''@;'; put 'put ''ZXQgdGhlIGxhbmd1YWdlIGNvbmZpZ3VyYXRpb24uIFVzZSBtb21lbnQoKS5sb2NhbGUoKSB0byBjaGFuZ2UgbGFuZ3VhZ2VzLiIsZnVuY3Rpb24oQ2Upe3JldHVybiB2b2lkIDA9PT1DZT90aGlzLmxvY2FsZURhdGEoKTp0aGlzLmxvY2FsZShDZSl9KTtmdW5jdGlvbiBiZigpe3JldHVybiB0''@;'; put 'put ''aGlzLl9sb2NhbGV9dmFyIGtpPTZlNCx5ND02MCpraSxFcj0zNTA2MzI4Knk0O2Z1bmN0aW9uIGxsKENlLEtlKXtyZXR1cm4oQ2UlS2UrS2UpJUtlfWZ1bmN0aW9uIFZvKENlLEtlLG10KXtyZXR1cm4gQ2U8MTAwJiZDZT49MD9uZXcgRGF0ZShDZSs0MDAsS2UsbXQpLUVyOm5ldyBEYXRlKENl''@;'; put 'put ''LEtlLG10KS52YWx1ZU9mKCl9ZnVuY3Rpb24geGMoQ2UsS2UsbXQpe3JldHVybiBDZTwxMDAmJkNlPj0wP0RhdGUuVVRDKENlKzQwMCxLZSxtdCktRXI6RGF0ZS5VVEMoQ2UsS2UsbXQpfWZ1bmN0aW9uIEYzKENlLEtlKXtyZXR1cm4gS2UuZXJhc0FiYnJSZWdleChDZSl9ZnVuY3Rpb24gaGMo''@;'; put 'put ''KXt2YXIgZG4scW4saWksSWEsU28sQ2U9W10sS2U9W10sbXQ9W10sSXQ9W10sZnM9dGhpcy5lcmFzKCk7Zm9yKGRuPTAscW49ZnMubGVuZ3RoO2RuPHFuOysrZG4paWk9cmkoZnNbZG5dLm5hbWUpLElhPXJpKGZzW2RuXS5hYmJyKSxTbz1yaShmc1tkbl0ubmFycm93KSxLZS5wdXNoKGlpKSxD''@;'; put 'put ''ZS5wdXNoKElhKSxtdC5wdXNoKFNvKSxJdC5wdXNoKGlpKSxJdC5wdXNoKElhKSxJdC5wdXNoKFNvKTt0aGlzLl9lcmFzUmVnZXg9bmV3IFJlZ0V4cCgiXigiK0l0LmpvaW4oInwiKSsiKSIsImkiKSx0aGlzLl9lcmFzTmFtZVJlZ2V4PW5ldyBSZWdFeHAoIl4oIitLZS5qb2luKCJ8IikrIiki''@;'; put 'put ''LCJpIiksdGhpcy5fZXJhc0FiYnJSZWdleD1uZXcgUmVnRXhwKCJeKCIrQ2Uuam9pbigifCIpKyIpIiwiaSIpLHRoaXMuX2VyYXNOYXJyb3dSZWdleD1uZXcgUmVnRXhwKCJeKCIrbXQuam9pbigifCIpKyIpIiwiaSIpfWZ1bmN0aW9uIGNkKENlLEtlKXtzZSgwLFtDZSxDZS5sZW5ndGhdLDAs''@;'; put 'put ''S2UpfWZ1bmN0aW9uIFN2KENlLEtlLG10LEl0LGRuKXt2YXIgcW47cmV0dXJuIG51bGw9PUNlP0x1KHRoaXMsSXQsZG4pLnllYXI6KEtlPihxbj1QcihDZSxJdCxkbikpJiYoS2U9cW4pLFl3LmNhbGwodGhpcyxDZSxLZSxtdCxJdCxkbikpfWZ1bmN0aW9uIFl3KENlLEtlLG10LEl0LGRuKXt2''@;'; put 'put ''YXIgcW49SGEoQ2UsS2UsbXQsSXQsZG4pLGlpPUpyKHFuLnllYXIsMCxxbi5kYXlPZlllYXIpO3JldHVybiB0aGlzLnllYXIoaWkuZ2V0VVRDRnVsbFllYXIoKSksdGhpcy5tb250aChpaS5nZXRVVENNb250aCgpKSx0aGlzLmRhdGUoaWkuZ2V0VVRDRGF0ZSgpKSx0aGlzfXNlKCJOIiwwLDAs''@;'; put 'put ''ImVyYUFiYnIiKSxzZSgiTk4iLDAsMCwiZXJhQWJiciIpLHNlKCJOTk4iLDAsMCwiZXJhQWJiciIpLHNlKCJOTk5OIiwwLDAsImVyYU5hbWUiKSxzZSgiTk5OTk4iLDAsMCwiZXJhTmFycm93Iiksc2UoInkiLFsieSIsMV0sInlvIiwiZXJhWWVhciIpLHNlKCJ5IixbInl5IiwyXSwwLCJlcmFZ''@;'; put 'put ''ZWFyIiksc2UoInkiLFsieXl5IiwzXSwwLCJlcmFZZWFyIiksc2UoInkiLFsieXl5eSIsNF0sMCwiZXJhWWVhciIpLFJuKCJOIixGMyksUm4oIk5OIixGMyksUm4oIk5OTiIsRjMpLFJuKCJOTk5OIixmdW5jdGlvbiBadyhDZSxLZSl7cmV0dXJuIEtlLmVyYXNOYW1lUmVnZXgoQ2UpfSksUm4o''@;'; put 'put ''Ik5OTk5OIixmdW5jdGlvbiBINihDZSxLZSl7cmV0dXJuIEtlLmVyYXNOYXJyb3dSZWdleChDZSl9KSxodChbIk4iLCJOTiIsIk5OTiIsIk5OTk4iLCJOTk5OTiJdLGZ1bmN0aW9uKENlLEtlLG10LEl0KXt2YXIgZG49bXQuX2xvY2FsZS5lcmFzUGFyc2UoQ2UsSXQsbXQuX3N0cmljdCk7ZG4/''@;'; put 'put ''WShtdCkuZXJhPWRuOlkobXQpLmludmFsaWRFcmE9Q2V9KSxSbigieSIsY2kpLFJuKCJ5eSIsY2kpLFJuKCJ5eXkiLGNpKSxSbigieXl5eSIsY2kpLFJuKCJ5byIsZnVuY3Rpb24gSDMoQ2UsS2Upe3JldHVybiBLZS5fZXJhWWVhck9yZGluYWxSZWdleHx8Y2l9KSxodChbInkiLCJ5eSIsInl5''@;'; put 'put ''eSIsInl5eXkiXSx6dCksaHQoWyJ5byJdLGZ1bmN0aW9uKENlLEtlLG10LEl0KXt2YXIgZG47bXQuX2xvY2FsZS5fZXJhWWVhck9yZGluYWxSZWdleCYmKGRuPUNlLm1hdGNoKG10Ll9sb2NhbGUuX2VyYVllYXJPcmRpbmFsUmVnZXgpKSxLZVt6dF09bXQuX2xvY2FsZS5lcmFZZWFyT3JkaW5h''@;'; put 'put ''bFBhcnNlP210Ll9sb2NhbGUuZXJhWWVhck9yZGluYWxQYXJzZShDZSxkbik6cGFyc2VJbnQoQ2UsMTApfSksc2UoMCxbImdnIiwyXSwwLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMud2Vla1llYXIoKSUxMDB9KSxzZSgwLFsiR0ciLDJdLDAsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc29XZWVr''@;'; put 'put ''WWVhcigpJTEwMH0pLGNkKCJnZ2dnIiwid2Vla1llYXIiKSxjZCgiZ2dnZ2ciLCJ3ZWVrWWVhciIpLGNkKCJHR0dHIiwiaXNvV2Vla1llYXIiKSxjZCgiR0dHR0ciLCJpc29XZWVrWWVhciIpLFJuKCJHIixRdCksUm4oImciLFF0KSxSbigiR0ciLHR0LE10KSxSbigiZ2ciLHR0LE10KSxSbigi''@;'; put 'put ''R0dHRyIsUnQsaXQpLFJuKCJnZ2dnIixSdCxpdCksUm4oIkdHR0dHIixQdCwkZSksUm4oImdnZ2dnIixQdCwkZSkseHQoWyJnZ2dnIiwiZ2dnZ2ciLCJHR0dHIiwiR0dHR0ciXSxmdW5jdGlvbihDZSxLZSxtdCxJdCl7S2VbSXQuc3Vic3RyKDAsMildPVR0KENlKX0pLHh0KFsiZ2ciLCJHRyJd''@;'; put 'put ''LGZ1bmN0aW9uKENlLEtlLG10LEl0KXtLZVtJdF09Xy5wYXJzZVR3b0RpZ2l0WWVhcihDZSl9KSxzZSgiUSIsMCwiUW8iLCJxdWFydGVyIiksUm4oIlEiLHl0KSxodCgiUSIsZnVuY3Rpb24oQ2UsS2Upe0tlW2hpXT0zKihUdChDZSktMSl9KSxzZSgiRCIsWyJERCIsMl0sIkRvIiwiZGF0ZSIp''@;'; put 'put ''LFJuKCJEIix0dCxPciksUm4oIkREIix0dCxNdCksUm4oIkRvIixmdW5jdGlvbihDZSxLZSl7cmV0dXJuIENlP0tlLl9kYXlPZk1vbnRoT3JkaW5hbFBhcnNlfHxLZS5fb3JkaW5hbFBhcnNlOktlLl9kYXlPZk1vbnRoT3JkaW5hbFBhcnNlTGVuaWVudH0pLGh0KFsiRCIsIkREIl0sY24pLGh0''@;'; put 'put ''KCJEbyIsZnVuY3Rpb24oQ2UsS2Upe0tlW2NuXT1UdChDZS5tYXRjaCh0dClbMF0pfSk7dmFyIHEwPWVpKCJEYXRlIiwhMCk7c2UoIkRERCIsWyJEREREIiwzXSwiREREbyIsImRheU9mWWVhciIpLFJuKCJEREQiLHF0KSxSbigiRERERCIsRHQpLGh0KFsiREREIiwiRERERCJdLGZ1bmN0aW9u''@;'; put 'put ''KENlLEtlLG10KXttdC5fZGF5T2ZZZWFyPVR0KENlKX0pLHNlKCJtIixbIm1tIiwyXSwwLCJtaW51dGUiKSxSbigibSIsdHQsV3QpLFJuKCJtbSIsdHQsTXQpLGh0KFsibSIsIm1tIl0sSWkpO3ZhciB3Zj1laSgiTWludXRlcyIsITEpO3NlKCJzIixbInNzIiwyXSwwLCJzZWNvbmQiKSxSbigi''@;'; put 'put ''cyIsdHQsV3QpLFJuKCJzcyIsdHQsTXQpLGh0KFsicyIsInNzIl0sWHQpO3ZhciBpaCxWNixDZj1laSgiU2Vjb25kcyIsITEpO2ZvcihzZSgiUyIsMCwwLGZ1bmN0aW9uKCl7cmV0dXJufn4odGhpcy5taWxsaXNlY29uZCgpLzEwMCl9KSxzZSgwLFsiU1MiLDJdLDAsZnVuY3Rpb24oKXtyZXR1''@;'; put 'put ''cm5+fih0aGlzLm1pbGxpc2Vjb25kKCkvMTApfSksc2UoMCxbIlNTUyIsM10sMCwibWlsbGlzZWNvbmQiKSxzZSgwLFsiU1NTUyIsNF0sMCxmdW5jdGlvbigpe3JldHVybiAxMCp0aGlzLm1pbGxpc2Vjb25kKCl9KSxzZSgwLFsiU1NTU1MiLDVdLDAsZnVuY3Rpb24oKXtyZXR1cm4gMTAwKnRo''@;'; put 'put ''aXMubWlsbGlzZWNvbmQoKX0pLHNlKDAsWyJTU1NTU1MiLDZdLDAsZnVuY3Rpb24oKXtyZXR1cm4gMWUzKnRoaXMubWlsbGlzZWNvbmQoKX0pLHNlKDAsWyJTU1NTU1NTIiw3XSwwLGZ1bmN0aW9uKCl7cmV0dXJuIDFlNCp0aGlzLm1pbGxpc2Vjb25kKCl9KSxzZSgwLFsiU1NTU1NTU1MiLDhd''@;'; put 'put ''LDAsZnVuY3Rpb24oKXtyZXR1cm4gMWU1KnRoaXMubWlsbGlzZWNvbmQoKX0pLHNlKDAsWyJTU1NTU1NTU1MiLDldLDAsZnVuY3Rpb24oKXtyZXR1cm4gMWU2KnRoaXMubWlsbGlzZWNvbmQoKX0pLFJuKCJTIixxdCx5dCksUm4oIlNTIixxdCxNdCksUm4oIlNTUyIscXQsRHQpLGloPSJTU1NT''@;'; put 'put ''IjtpaC5sZW5ndGg8PTk7aWgrPSJTIilSbihpaCxjaSk7ZnVuY3Rpb24gSGMoQ2UsS2Upe0tlW2VuXT1UdCgxZTMqKCIwLiIrQ2UpKX1mb3IoaWg9IlMiO2loLmxlbmd0aDw9OTtpaCs9IlMiKWh0KGloLEhjKTtWNj1laSgiTWlsbGlzZWNvbmRzIiwhMSksc2UoInoiLDAsMCwiem9uZUFiYnIi''@;'; put 'put ''KSxzZSgienoiLDAsMCwiem9uZU5hbWUiKTt2YXIgemk9bWUucHJvdG90eXBlO2Z1bmN0aW9uIHh2KENlKXtyZXR1cm4gQ2V9emkuYWRkPWs2LHppLmNhbGVuZGFyPWZ1bmN0aW9uIGg1KENlLEtlKXsxPT09YXJndW1lbnRzLmxlbmd0aCYmKGFyZ3VtZW50c1swXT9Kcyhhcmd1bWVudHNbMF0p''@;'; put 'put ''PyhDZT1hcmd1bWVudHNbMF0sS2U9dm9pZCAwKTpmdW5jdGlvbiBtNChDZSl7dmFyIGRuLEtlPXcoQ2UpJiYhRihDZSksbXQ9ITEsSXQ9WyJzYW1lRGF5IiwibmV4dERheSIsImxhc3REYXkiLCJuZXh0V2VlayIsImxhc3RXZWVrIiwic2FtZUVsc2UiXTtmb3IoZG49MDtkbjxJdC5sZW5ndGg7''@;'; put 'put ''ZG4rPTEpbXQ9bXR8fFAoQ2UsSXRbZG5dKTtyZXR1cm4gS2UmJm10fShhcmd1bWVudHNbMF0pJiYoS2U9YXJndW1lbnRzWzBdLENlPXZvaWQgMCk6KENlPXZvaWQgMCxLZT12b2lkIDApKTt2YXIgbXQ9Q2V8fHNsKCksSXQ9VDYobXQsdGhpcykuc3RhcnRPZigiZGF5IiksZG49Xy5jYWxlbmRh''@;'; put 'put ''ckZvcm1hdCh0aGlzLEl0KXx8InNhbWVFbHNlIixxbj1LZSYmKHAoS2VbZG5dKT9LZVtkbl0uY2FsbCh0aGlzLG10KTpLZVtkbl0pO3JldHVybiB0aGlzLmZvcm1hdChxbnx8dGhpcy5sb2NhbGVEYXRhKCkuY2FsZW5kYXIoZG4sdGhpcyxzbChtdCkpKX0semkuY2xvbmU9ZnVuY3Rpb24gdmYo''@;'; put 'put ''KXtyZXR1cm4gbmV3IG1lKHRoaXMpfSx6aS5kaWZmPWZ1bmN0aW9uIE1jKENlLEtlLG10KXt2YXIgSXQsZG4scW47aWYoIXRoaXMuaXNWYWxpZCgpKXJldHVybiBOYU47aWYoIShJdD1UNihDZSx0aGlzKSkuaXNWYWxpZCgpKXJldHVybiBOYU47c3dpdGNoKGRuPTZlNCooSXQudXRjT2Zmc2V0''@;'; put 'put ''KCktdGhpcy51dGNPZmZzZXQoKSksS2U9X3QoS2UpKXtjYXNlInllYXIiOnFuPVAzKHRoaXMsSXQpLzEyO2JyZWFrO2Nhc2UibW9udGgiOnFuPVAzKHRoaXMsSXQpO2JyZWFrO2Nhc2UicXVhcnRlciI6cW49UDModGhpcyxJdCkvMzticmVhaztjYXNlInNlY29uZCI6cW49KHRoaXMtSXQpLzFl''@;'; put 'put ''MzticmVhaztjYXNlIm1pbnV0ZSI6cW49KHRoaXMtSXQpLzZlNDticmVhaztjYXNlImhvdXIiOnFuPSh0aGlzLUl0KS8zNmU1O2JyZWFrO2Nhc2UiZGF5Ijpxbj0odGhpcy1JdC1kbikvODY0ZTU7YnJlYWs7Y2FzZSJ3ZWVrIjpxbj0odGhpcy1JdC1kbikvNjA0OGU1O2JyZWFrO2RlZmF1bHQ6''@;'; put 'put ''cW49dGhpcy1JdH1yZXR1cm4gbXQ/cW46V2UocW4pfSx6aS5lbmRPZj1mdW5jdGlvbiBuMihDZSl7dmFyIEtlLG10O2lmKHZvaWQgMD09PShDZT1fdChDZSkpfHwibWlsbGlzZWNvbmQiPT09Q2V8fCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gdGhpcztzd2l0Y2gobXQ9dGhpcy5faXNVVEM/eGM6''@;'; put 'put ''Vm8sQ2Upe2Nhc2UieWVhciI6S2U9bXQodGhpcy55ZWFyKCkrMSwwLDEpLTE7YnJlYWs7Y2FzZSJxdWFydGVyIjpLZT1tdCh0aGlzLnllYXIoKSx0aGlzLm1vbnRoKCktdGhpcy5tb250aCgpJTMrMywxKS0xO2JyZWFrO2Nhc2UibW9udGgiOktlPW10KHRoaXMueWVhcigpLHRoaXMubW9udGgo''@;'; put 'put ''KSsxLDEpLTE7YnJlYWs7Y2FzZSJ3ZWVrIjpLZT1tdCh0aGlzLnllYXIoKSx0aGlzLm1vbnRoKCksdGhpcy5kYXRlKCktdGhpcy53ZWVrZGF5KCkrNyktMTticmVhaztjYXNlImlzb1dlZWsiOktlPW10KHRoaXMueWVhcigpLHRoaXMubW9udGgoKSx0aGlzLmRhdGUoKS0odGhpcy5pc29XZWVr''@;'; put 'put ''ZGF5KCktMSkrNyktMTticmVhaztjYXNlImRheSI6Y2FzZSJkYXRlIjpLZT1tdCh0aGlzLnllYXIoKSx0aGlzLm1vbnRoKCksdGhpcy5kYXRlKCkrMSktMTticmVhaztjYXNlImhvdXIiOktlPXRoaXMuX2QudmFsdWVPZigpLEtlKz15NC1sbChLZSsodGhpcy5faXNVVEM/MDp0aGlzLnV0Y09m''@;'; put 'put ''ZnNldCgpKmtpKSx5NCktMTticmVhaztjYXNlIm1pbnV0ZSI6S2U9dGhpcy5fZC52YWx1ZU9mKCksS2UrPWtpLWxsKEtlLGtpKS0xO2JyZWFrO2Nhc2Uic2Vjb25kIjpLZT10aGlzLl9kLnZhbHVlT2YoKSxLZSs9MWUzLWxsKEtlLDFlMyktMX1yZXR1cm4gdGhpcy5fZC5zZXRUaW1lKEtlKSxf''@;'; put 'put ''LnVwZGF0ZU9mZnNldCh0aGlzLCEwKSx0aGlzfSx6aS5mb3JtYXQ9ZnVuY3Rpb24gZ3YoQ2Upe0NlfHwoQ2U9dGhpcy5pc1V0YygpP18uZGVmYXVsdEZvcm1hdFV0YzpfLmRlZmF1bHRGb3JtYXQpO3ZhciBLZT1KZSh0aGlzLENlKTtyZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkucG9zdGZvcm1h''@;'; put 'put ''dChLZSl9LHppLmZyb209ZnVuY3Rpb24gTncoQ2UsS2Upe3JldHVybiB0aGlzLmlzVmFsaWQoKSYmKF9lKENlKSYmQ2UuaXNWYWxpZCgpfHxzbChDZSkuaXNWYWxpZCgpKT9KbCh7dG86dGhpcyxmcm9tOkNlfSkubG9jYWxlKHRoaXMubG9jYWxlKCkpLmh1bWFuaXplKCFLZSk6dGhpcy5sb2Nh''@;'; put 'put ''bGVEYXRhKCkuaW52YWxpZERhdGUoKX0semkuZnJvbU5vdz1mdW5jdGlvbiBtdihDZSl7cmV0dXJuIHRoaXMuZnJvbShzbCgpLENlKX0semkudG89ZnVuY3Rpb24gVncoQ2UsS2Upe3JldHVybiB0aGlzLmlzVmFsaWQoKSYmKF9lKENlKSYmQ2UuaXNWYWxpZCgpfHxzbChDZSkuaXNWYWxpZCgp''@;'; put 'put ''KT9KbCh7ZnJvbTp0aGlzLHRvOkNlfSkubG9jYWxlKHRoaXMubG9jYWxlKCkpLmh1bWFuaXplKCFLZSk6dGhpcy5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKX0semkudG9Ob3c9ZnVuY3Rpb24gQncoQ2Upe3JldHVybiB0aGlzLnRvKHNsKCksQ2UpfSx6aS5nZXQ9ZnVuY3Rpb24gTmkoQ2Up''@;'; put 'put ''e3JldHVybiBwKHRoaXNbQ2U9X3QoQ2UpXSk/dGhpc1tDZV0oKTp0aGlzfSx6aS5pbnZhbGlkQXQ9ZnVuY3Rpb24gcmgoKXtyZXR1cm4gWSh0aGlzKS5vdmVyZmxvd30semkuaXNBZnRlcj1mdW5jdGlvbiBENihDZSxLZSl7dmFyIG10PV9lKENlKT9DZTpzbChDZSk7cmV0dXJuISghdGhpcy5p''@;'; put 'put ''c1ZhbGlkKCl8fCFtdC5pc1ZhbGlkKCkpJiYoIm1pbGxpc2Vjb25kIj09PShLZT1fdChLZSl8fCJtaWxsaXNlY29uZCIpP3RoaXMudmFsdWVPZigpPm10LnZhbHVlT2YoKTptdC52YWx1ZU9mKCk8dGhpcy5jbG9uZSgpLnN0YXJ0T2YoS2UpLnZhbHVlT2YoKSl9LHppLmlzQmVmb3JlPWZ1bmN0''@;'; put 'put ''aW9uIGh2KENlLEtlKXt2YXIgbXQ9X2UoQ2UpP0NlOnNsKENlKTtyZXR1cm4hKCF0aGlzLmlzVmFsaWQoKXx8IW10LmlzVmFsaWQoKSkmJigibWlsbGlzZWNvbmQiPT09KEtlPV90KEtlKXx8Im1pbGxpc2Vjb25kIik/dGhpcy52YWx1ZU9mKCk8bXQudmFsdWVPZigpOnRoaXMuY2xvbmUoKS5l''@;'; put 'put ''bmRPZihLZSkudmFsdWVPZigpPG10LnZhbHVlT2YoKSl9LHppLmlzQmV0d2Vlbj1mdW5jdGlvbiBJNihDZSxLZSxtdCxJdCl7dmFyIGRuPV9lKENlKT9DZTpzbChDZSkscW49X2UoS2UpP0tlOnNsKEtlKTtyZXR1cm4hISh0aGlzLmlzVmFsaWQoKSYmZG4uaXNWYWxpZCgpJiZxbi5pc1ZhbGlk''@;'; put 'put ''KCkpJiYoIigiPT09KEl0PUl0fHwiKCkiKVswXT90aGlzLmlzQWZ0ZXIoZG4sbXQpOiF0aGlzLmlzQmVmb3JlKGRuLG10KSkmJigiKSI9PT1JdFsxXT90aGlzLmlzQmVmb3JlKHFuLG10KTohdGhpcy5pc0FmdGVyKHFuLG10KSl9LHppLmlzU2FtZT1mdW5jdGlvbiB2NChDZSxLZSl7dmFyIEl0''@;'; put 'put ''LG10PV9lKENlKT9DZTpzbChDZSk7cmV0dXJuISghdGhpcy5pc1ZhbGlkKCl8fCFtdC5pc1ZhbGlkKCkpJiYoIm1pbGxpc2Vjb25kIj09PShLZT1fdChLZSl8fCJtaWxsaXNlY29uZCIpP3RoaXMudmFsdWVPZigpPT09bXQudmFsdWVPZigpOihJdD1tdC52YWx1ZU9mKCksdGhpcy5jbG9uZSgp''@;'; put 'put ''LnN0YXJ0T2YoS2UpLnZhbHVlT2YoKTw9SXQmJkl0PD10aGlzLmNsb25lKCkuZW5kT2YoS2UpLnZhbHVlT2YoKSkpfSx6aS5pc1NhbWVPckFmdGVyPWZ1bmN0aW9uIHIwKENlLEtlKXtyZXR1cm4gdGhpcy5pc1NhbWUoQ2UsS2UpfHx0aGlzLmlzQWZ0ZXIoQ2UsS2UpfSx6aS5pc1NhbWVPckJl''@;'; put 'put ''Zm9yZT1mdW5jdGlvbiBIdyhDZSxLZSl7cmV0dXJuIHRoaXMuaXNTYW1lKENlLEtlKXx8dGhpcy5pc0JlZm9yZShDZSxLZSl9LHppLmlzVmFsaWQ9ZnVuY3Rpb24geWYoKXtyZXR1cm4gZWUodGhpcyl9LHppLmxhbmc9VnIsemkubG9jYWxlPUthLHppLmxvY2FsZURhdGE9YmYsemkubWF4PUx3''@;'; put 'put ''LHppLm1pbj1JMyx6aS5wYXJzaW5nRmxhZ3M9ZnVuY3Rpb24gencoKXtyZXR1cm4gSyh7fSxZKHRoaXMpKX0semkuc2V0PWZ1bmN0aW9uIERhKENlLEtlKXtpZigib2JqZWN0Ij09dHlwZW9mIENlKXt2YXIgSXQsbXQ9ZnVuY3Rpb24gdW4oQ2Upe3ZhciBtdCxLZT1bXTtmb3IobXQgaW4gQ2Up''@;'; put 'put ''UChDZSxtdCkmJktlLnB1c2goe3VuaXQ6bXQscHJpb3JpdHk6UWVbbXRdfSk7cmV0dXJuIEtlLnNvcnQoZnVuY3Rpb24oSXQsZG4pe3JldHVybiBJdC5wcmlvcml0eS1kbi5wcmlvcml0eX0pLEtlfShDZT1udChDZSkpLGRuPW10Lmxlbmd0aDtmb3IoSXQ9MDtJdDxkbjtJdCsrKXRoaXNbbXRb''@;'; put 'put ''SXRdLnVuaXRdKENlW210W0l0XS51bml0XSl9ZWxzZSBpZihwKHRoaXNbQ2U9X3QoQ2UpXSkpcmV0dXJuIHRoaXNbQ2VdKEtlKTtyZXR1cm4gdGhpc30semkuc3RhcnRPZj1mdW5jdGlvbiBldShDZSl7dmFyIEtlLG10O2lmKHZvaWQgMD09PShDZT1fdChDZSkpfHwibWlsbGlzZWNvbmQiPT09''@;'; put 'put ''Q2V8fCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gdGhpcztzd2l0Y2gobXQ9dGhpcy5faXNVVEM/eGM6Vm8sQ2Upe2Nhc2UieWVhciI6S2U9bXQodGhpcy55ZWFyKCksMCwxKTticmVhaztjYXNlInF1YXJ0ZXIiOktlPW10KHRoaXMueWVhcigpLHRoaXMubW9udGgoKS10aGlzLm1vbnRoKCklMywx''@;'; put 'put ''KTticmVhaztjYXNlIm1vbnRoIjpLZT1tdCh0aGlzLnllYXIoKSx0aGlzLm1vbnRoKCksMSk7YnJlYWs7Y2FzZSJ3ZWVrIjpLZT1tdCh0aGlzLnllYXIoKSx0aGlzLm1vbnRoKCksdGhpcy5kYXRlKCktdGhpcy53ZWVrZGF5KCkpO2JyZWFrO2Nhc2UiaXNvV2VlayI6S2U9bXQodGhpcy55ZWFy''@;'; put 'put ''KCksdGhpcy5tb250aCgpLHRoaXMuZGF0ZSgpLSh0aGlzLmlzb1dlZWtkYXkoKS0xKSk7YnJlYWs7Y2FzZSJkYXkiOmNhc2UiZGF0ZSI6S2U9bXQodGhpcy55ZWFyKCksdGhpcy5tb250aCgpLHRoaXMuZGF0ZSgpKTticmVhaztjYXNlImhvdXIiOktlPXRoaXMuX2QudmFsdWVPZigpLEtlLT1s''@;'; put 'put ''bChLZSsodGhpcy5faXNVVEM/MDp0aGlzLnV0Y09mZnNldCgpKmtpKSx5NCk7YnJlYWs7Y2FzZSJtaW51dGUiOktlPXRoaXMuX2QudmFsdWVPZigpLEtlLT1sbChLZSxraSk7YnJlYWs7Y2FzZSJzZWNvbmQiOktlPXRoaXMuX2QudmFsdWVPZigpLEtlLT1sbChLZSwxZTMpfXJldHVybiB0aGlz''@;'; put 'put ''Ll9kLnNldFRpbWUoS2UpLF8udXBkYXRlT2Zmc2V0KHRoaXMsITApLHRoaXN9LHppLnN1YnRyYWN0PXU1LHppLnRvQXJyYXk9ZnVuY3Rpb24gcDUoKXt2YXIgQ2U9dGhpcztyZXR1cm5bQ2UueWVhcigpLENlLm1vbnRoKCksQ2UuZGF0ZSgpLENlLmhvdXIoKSxDZS5taW51dGUoKSxDZS5zZWNv''@;'; put 'put ''bmQoKSxDZS5taWxsaXNlY29uZCgpXX0semkudG9PYmplY3Q9ZnVuY3Rpb24gdnYoKXt2YXIgQ2U9dGhpcztyZXR1cm57eWVhcnM6Q2UueWVhcigpLG1vbnRoczpDZS5tb250aCgpLGRhdGU6Q2UuZGF0ZSgpLGhvdXJzOkNlLmhvdXJzKCksbWludXRlczpDZS5taW51dGVzKCksc2Vjb25kczpD''@;'; put 'put ''ZS5zZWNvbmRzKCksbWlsbGlzZWNvbmRzOkNlLm1pbGxpc2Vjb25kcygpfX0semkudG9EYXRlPWZ1bmN0aW9uIFIwKCl7cmV0dXJuIG5ldyBEYXRlKHRoaXMudmFsdWVPZigpKX0semkudG9JU09TdHJpbmc9ZnVuY3Rpb24gZnYoQ2Upe2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gbnVsbDt2''@;'; put 'put ''YXIgS2U9ITAhPT1DZSxtdD1LZT90aGlzLmNsb25lKCkudXRjKCk6dGhpcztyZXR1cm4gbXQueWVhcigpPDB8fG10LnllYXIoKT45OTk5P0plKG10LEtlPyJZWVlZWVktTU0tRERbVF1ISDptbTpzcy5TU1NbWl0iOiJZWVlZWVktTU0tRERbVF1ISDptbTpzcy5TU1NaIik6cChEYXRlLnByb3Rv''@;'; put 'put ''dHlwZS50b0lTT1N0cmluZyk/S2U/dGhpcy50b0RhdGUoKS50b0lTT1N0cmluZygpOm5ldyBEYXRlKHRoaXMudmFsdWVPZigpKzYwKnRoaXMudXRjT2Zmc2V0KCkqMWUzKS50b0lTT1N0cmluZygpLnJlcGxhY2UoIloiLEplKG10LCJaIikpOkplKG10LEtlPyJZWVlZLU1NLUREW1RdSEg6bW06''@;'; put 'put ''c3MuU1NTW1pdIjoiWVlZWS1NTS1ERFtUXUhIOm1tOnNzLlNTU1oiKX0semkuaW5zcGVjdD1mdW5jdGlvbiBwdigpe2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4ibW9tZW50LmludmFsaWQoLyogIit0aGlzLl9pKyIgKi8pIjt2YXIgbXQsSXQsQ2U9Im1vbWVudCIsS2U9IiI7cmV0dXJuIHRo''@;'; put 'put ''aXMuaXNMb2NhbCgpfHwoQ2U9MD09PXRoaXMudXRjT2Zmc2V0KCk/Im1vbWVudC51dGMiOiJtb21lbnQucGFyc2Vab25lIixLZT0iWiIpLG10PSJbIitDZSsnKCJdJyxJdD0wPD10aGlzLnllYXIoKSYmdGhpcy55ZWFyKCk8PTk5OTk/IllZWVkiOiJZWVlZWVkiLHRoaXMuZm9ybWF0KG10K0l0''@;'; put 'put ''KyItTU0tRERbVF1ISDptbTpzcy5TU1MiK0tlKydbIildJyl9LHR5cGVvZiBTeW1ib2w8InUiJiZudWxsIT1TeW1ib2wuZm9yJiYoemlbU3ltYm9sLmZvcigibm9kZWpzLnV0aWwuaW5zcGVjdC5jdXN0b20iKV09ZnVuY3Rpb24oKXtyZXR1cm4iTW9tZW50PCIrdGhpcy5mb3JtYXQoKSsiPiJ9''@;'; put 'put ''KSx6aS50b0pTT049ZnVuY3Rpb24gancoKXtyZXR1cm4gdGhpcy5pc1ZhbGlkKCk/dGhpcy50b0lTT1N0cmluZygpOm51bGx9LHppLnRvU3RyaW5nPWZ1bmN0aW9uIGI0KCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5sb2NhbGUoImVuIikuZm9ybWF0KCJkZGQgTU1NIEREIFlZWVkgSEg6bW06c3Mg''@;'; put 'put ''W0dNVF1aWiIpfSx6aS51bml4PWZ1bmN0aW9uIFI2KCl7cmV0dXJuIE1hdGguZmxvb3IodGhpcy52YWx1ZU9mKCkvMWUzKX0semkudmFsdWVPZj1mdW5jdGlvbiBQdSgpe3JldHVybiB0aGlzLl9kLnZhbHVlT2YoKS02ZTQqKHRoaXMuX29mZnNldHx8MCl9LHppLmNyZWF0aW9uRGF0YT1mdW5j''@;'; put 'put ''dGlvbiBidigpe3JldHVybntpbnB1dDp0aGlzLl9pLGZvcm1hdDp0aGlzLl9mLGxvY2FsZTp0aGlzLl9sb2NhbGUsaXNVVEM6dGhpcy5faXNVVEMsc3RyaWN0OnRoaXMuX3N0cmljdH19LHppLmVyYU5hbWU9ZnVuY3Rpb24gVXcoKXt2YXIgQ2UsS2UsbXQsSXQ9dGhpcy5sb2NhbGVEYXRhKCku''@;'; put 'put ''ZXJhcygpO2ZvcihDZT0wLEtlPUl0Lmxlbmd0aDtDZTxLZTsrK0NlKWlmKG10PXRoaXMuY2xvbmUoKS5zdGFydE9mKCJkYXkiKS52YWx1ZU9mKCksSXRbQ2VdLnNpbmNlPD1tdCYmbXQ8PUl0W0NlXS51bnRpbHx8SXRbQ2VdLnVudGlsPD1tdCYmbXQ8PUl0W0NlXS5zaW5jZSlyZXR1cm4gSXRb''@;'; put 'put ''Q2VdLm5hbWU7cmV0dXJuIiJ9LHppLmVyYU5hcnJvdz1mdW5jdGlvbiBPNigpe3ZhciBDZSxLZSxtdCxJdD10aGlzLmxvY2FsZURhdGEoKS5lcmFzKCk7Zm9yKENlPTAsS2U9SXQubGVuZ3RoO0NlPEtlOysrQ2UpaWYobXQ9dGhpcy5jbG9uZSgpLnN0YXJ0T2YoImRheSIpLnZhbHVlT2YoKSxJ''@;'; put 'put ''dFtDZV0uc2luY2U8PW10JiZtdDw9SXRbQ2VdLnVudGlsfHxJdFtDZV0udW50aWw8PW10JiZtdDw9SXRbQ2VdLnNpbmNlKXJldHVybiBJdFtDZV0ubmFycm93O3JldHVybiIifSx6aS5lcmFBYmJyPWZ1bmN0aW9uIHl2KCl7dmFyIENlLEtlLG10LEl0PXRoaXMubG9jYWxlRGF0YSgpLmVyYXMo''@;'; put 'put ''KTtmb3IoQ2U9MCxLZT1JdC5sZW5ndGg7Q2U8S2U7KytDZSlpZihtdD10aGlzLmNsb25lKCkuc3RhcnRPZigiZGF5IikudmFsdWVPZigpLEl0W0NlXS5zaW5jZTw9bXQmJm10PD1JdFtDZV0udW50aWx8fEl0W0NlXS51bnRpbDw9bXQmJm10PD1JdFtDZV0uc2luY2UpcmV0dXJuIEl0W0NlXS5h''@;'; put 'put ''YmJyO3JldHVybiIifSx6aS5lcmFZZWFyPWZ1bmN0aW9uIF92KCl7dmFyIENlLEtlLG10LEl0LGRuPXRoaXMubG9jYWxlRGF0YSgpLmVyYXMoKTtmb3IoQ2U9MCxLZT1kbi5sZW5ndGg7Q2U8S2U7KytDZSlpZihtdD1kbltDZV0uc2luY2U8PWRuW0NlXS51bnRpbD8xOi0xLEl0PXRoaXMuY2xv''@;'; put 'put ''bmUoKS5zdGFydE9mKCJkYXkiKS52YWx1ZU9mKCksZG5bQ2VdLnNpbmNlPD1JdCYmSXQ8PWRuW0NlXS51bnRpbHx8ZG5bQ2VdLnVudGlsPD1JdCYmSXQ8PWRuW0NlXS5zaW5jZSlyZXR1cm4odGhpcy55ZWFyKCktXyhkbltDZV0uc2luY2UpLnllYXIoKSkqbXQrZG5bQ2VdLm9mZnNldDtyZXR1''@;'; put 'put ''cm4gdGhpcy55ZWFyKCl9LHppLnllYXI9V24semkuaXNMZWFwWWVhcj1mdW5jdGlvbiAkaSgpe3JldHVybiBybih0aGlzLnllYXIoKSl9LHppLndlZWtZZWFyPWZ1bmN0aW9uIGc1KENlKXtyZXR1cm4gU3YuY2FsbCh0aGlzLENlLHRoaXMud2VlaygpLHRoaXMud2Vla2RheSgpK3RoaXMubG9j''@;'; put 'put ''YWxlRGF0YSgpLl93ZWVrLmRvdyx0aGlzLmxvY2FsZURhdGEoKS5fd2Vlay5kb3csdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWsuZG95KX0semkuaXNvV2Vla1llYXI9ZnVuY3Rpb24gd3YoQ2Upe3JldHVybiBTdi5jYWxsKHRoaXMsQ2UsdGhpcy5pc29XZWVrKCksdGhpcy5pc29XZWVrZGF5KCks''@;'; put 'put ''MSw0KX0semkucXVhcnRlcj16aS5xdWFydGVycz1mdW5jdGlvbiBtNShDZSl7cmV0dXJuIG51bGw9PUNlP01hdGguY2VpbCgodGhpcy5tb250aCgpKzEpLzMpOnRoaXMubW9udGgoMyooQ2UtMSkrdGhpcy5tb250aCgpJTMpfSx6aS5tb250aD1MYyx6aS5kYXlzSW5Nb250aD1mdW5jdGlvbiBE''@;'; put 'put ''MCgpe3JldHVybiBwYSh0aGlzLnllYXIoKSx0aGlzLm1vbnRoKCkpfSx6aS53ZWVrPXppLndlZWtzPWZ1bmN0aW9uIFlpKENlKXt2YXIgS2U9dGhpcy5sb2NhbGVEYXRhKCkud2Vlayh0aGlzKTtyZXR1cm4gbnVsbD09Q2U/S2U6dGhpcy5hZGQoNyooQ2UtS2UpLCJkIil9LHppLmlzb1dlZWs9''@;'; put 'put ''emkuaXNvV2Vla3M9ZnVuY3Rpb24geWwoQ2Upe3ZhciBLZT1MdSh0aGlzLDEsNCkud2VlaztyZXR1cm4gbnVsbD09Q2U/S2U6dGhpcy5hZGQoNyooQ2UtS2UpLCJkIil9LHppLndlZWtzSW5ZZWFyPWZ1bmN0aW9uIE4zKCl7dmFyIENlPXRoaXMubG9jYWxlRGF0YSgpLl93ZWVrO3JldHVybiBQ''@;'; put 'put ''cih0aGlzLnllYXIoKSxDZS5kb3csQ2UuZG95KX0semkud2Vla3NJbldlZWtZZWFyPWZ1bmN0aW9uIFd3KCl7dmFyIENlPXRoaXMubG9jYWxlRGF0YSgpLl93ZWVrO3JldHVybiBQcih0aGlzLndlZWtZZWFyKCksQ2UuZG93LENlLmRveSl9LHppLmlzb1dlZWtzSW5ZZWFyPWZ1bmN0aW9uIE42''@;'; put 'put ''KCl7cmV0dXJuIFByKHRoaXMueWVhcigpLDEsNCl9LHppLmlzb1dlZWtzSW5JU09XZWVrWWVhcj1mdW5jdGlvbiBDdigpe3JldHVybiBQcih0aGlzLmlzb1dlZWtZZWFyKCksMSw0KX0semkuZGF0ZT1xMCx6aS5kYXk9emkuZGF5cz1mdW5jdGlvbiBOYShDZSl7aWYoIXRoaXMuaXNWYWxpZCgp''@;'; put 'put ''KXJldHVybiBudWxsIT1DZT90aGlzOk5hTjt2YXIgS2U9UXIodGhpcywiRGF5Iik7cmV0dXJuIG51bGwhPUNlPyhDZT1mdW5jdGlvbiBRYyhDZSxLZSl7cmV0dXJuInN0cmluZyIhPXR5cGVvZiBDZT9DZTppc05hTihDZSk/Im51bWJlciI9PXR5cGVvZihDZT1LZS53ZWVrZGF5c1BhcnNlKENl''@;'; put 'put ''KSk/Q2U6bnVsbDpwYXJzZUludChDZSwxMCl9KENlLHRoaXMubG9jYWxlRGF0YSgpKSx0aGlzLmFkZChDZS1LZSwiZCIpKTpLZX0semkud2Vla2RheT1mdW5jdGlvbiBEMyhDZSl7aWYoIXRoaXMuaXNWYWxpZCgpKXJldHVybiBudWxsIT1DZT90aGlzOk5hTjt2YXIgS2U9KHRoaXMuZGF5KCkr''@;'; put 'put ''Ny10aGlzLmxvY2FsZURhdGEoKS5fd2Vlay5kb3cpJTc7cmV0dXJuIG51bGw9PUNlP0tlOnRoaXMuYWRkKENlLUtlLCJkIil9LHppLmlzb1dlZWtkYXk9ZnVuY3Rpb24gJGgoQ2Upe2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gbnVsbCE9Q2U/dGhpczpOYU47aWYobnVsbCE9Q2Upe3ZhciBL''@;'; put 'put ''ZT1mdW5jdGlvbiBuNShDZSxLZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBDZT9LZS53ZWVrZGF5c1BhcnNlKENlKSU3fHw3OmlzTmFOKENlKT9udWxsOkNlfShDZSx0aGlzLmxvY2FsZURhdGEoKSk7cmV0dXJuIHRoaXMuZGF5KHRoaXMuZGF5KCklNz9LZTpLZS03KX1yZXR1cm4gdGhpcy5k''@;'; put 'put ''YXkoKXx8N30semkuZGF5T2ZZZWFyPWZ1bmN0aW9uIE12KENlKXt2YXIgS2U9TWF0aC5yb3VuZCgodGhpcy5jbG9uZSgpLnN0YXJ0T2YoImRheSIpLXRoaXMuY2xvbmUoKS5zdGFydE9mKCJ5ZWFyIikpLzg2NGU1KSsxO3JldHVybiBudWxsPT1DZT9LZTp0aGlzLmFkZChDZS1LZSwiZCIpfSx6''@;'; put 'put ''aS5ob3VyPXppLmhvdXJzPVZzLHppLm1pbnV0ZT16aS5taW51dGVzPXdmLHppLnNlY29uZD16aS5zZWNvbmRzPUNmLHppLm1pbGxpc2Vjb25kPXppLm1pbGxpc2Vjb25kcz1WNix6aS51dGNPZmZzZXQ9ZnVuY3Rpb24gZ2YoQ2UsS2UsbXQpe3ZhciBkbixJdD10aGlzLl9vZmZzZXR8fDA7aWYo''@;'; put 'put ''IXRoaXMuaXNWYWxpZCgpKXJldHVybiBudWxsIT1DZT90aGlzOk5hTjtpZihudWxsIT1DZSl7aWYoInN0cmluZyI9PXR5cGVvZiBDZSl7aWYobnVsbD09PShDZT1sZChSaSxDZSkpKXJldHVybiB0aGlzfWVsc2UgTWF0aC5hYnMoQ2UpPDE2JiYhbXQmJihDZSo9NjApO3JldHVybiF0aGlzLl9p''@;'; put 'put ''c1VUQyYmS2UmJihkbj1tdSh0aGlzKSksdGhpcy5fb2Zmc2V0PUNlLHRoaXMuX2lzVVRDPSEwLG51bGwhPWRuJiZ0aGlzLmFkZChkbiwibSIpLEl0IT09Q2UmJighS2V8fHRoaXMuX2NoYW5nZUluUHJvZ3Jlc3M/TDModGhpcyxKbChDZS1JdCwibSIpLDEsITEpOnRoaXMuX2NoYW5nZUluUHJv''@;'; put 'put ''Z3Jlc3N8fCh0aGlzLl9jaGFuZ2VJblByb2dyZXNzPSEwLF8udXBkYXRlT2Zmc2V0KHRoaXMsITApLHRoaXMuX2NoYW5nZUluUHJvZ3Jlc3M9bnVsbCkpLHRoaXN9cmV0dXJuIHRoaXMuX2lzVVRDP0l0Om11KHRoaXMpfSx6aS51dGM9ZnVuY3Rpb24gUjMoQ2Upe3JldHVybiB0aGlzLnV0Y09m''@;'; put 'put ''ZnNldCgwLENlKX0semkubG9jYWw9ZnVuY3Rpb24gUGwoQ2Upe3JldHVybiB0aGlzLl9pc1VUQyYmKHRoaXMudXRjT2Zmc2V0KDAsQ2UpLHRoaXMuX2lzVVRDPSExLENlJiZ0aGlzLnN1YnRyYWN0KG11KHRoaXMpLCJtIikpLHRoaXN9LHppLnBhcnNlWm9uZT1mdW5jdGlvbiBPdSgpe2lmKG51''@;'; put 'put ''bGwhPXRoaXMuX3R6bSl0aGlzLnV0Y09mZnNldCh0aGlzLl90em0sITEsITApO2Vsc2UgaWYoInN0cmluZyI9PXR5cGVvZiB0aGlzLl9pKXt2YXIgQ2U9bGQoc24sdGhpcy5faSk7bnVsbCE9Q2U/dGhpcy51dGNPZmZzZXQoQ2UpOnRoaXMudXRjT2Zmc2V0KDAsITApfXJldHVybiB0aGlzfSx6''@;'; put 'put ''aS5oYXNBbGlnbmVkSG91ck9mZnNldD1mdW5jdGlvbiBRaChDZSl7cmV0dXJuISF0aGlzLmlzVmFsaWQoKSYmKENlPUNlP3NsKENlKS51dGNPZmZzZXQoKTowLCh0aGlzLnV0Y09mZnNldCgpLUNlKSU2MD09MCl9LHppLmlzRFNUPWZ1bmN0aW9uIG1mKCl7cmV0dXJuIHRoaXMudXRjT2Zmc2V0''@;'; put 'put ''KCk+dGhpcy5jbG9uZSgpLm1vbnRoKDApLnV0Y09mZnNldCgpfHx0aGlzLnV0Y09mZnNldCgpPnRoaXMuY2xvbmUoKS5tb250aCg1KS51dGNPZmZzZXQoKX0semkuaXNMb2NhbD1mdW5jdGlvbiBkdigpe3JldHVybiEhdGhpcy5pc1ZhbGlkKCkmJiF0aGlzLl9pc1VUQ30semkuaXNVdGNPZmZz''@;'; put 'put ''ZXQ9ZnVuY3Rpb24gUHcoKXtyZXR1cm4hIXRoaXMuaXNWYWxpZCgpJiZ0aGlzLl9pc1VUQ30semkuaXNVdGM9XzAsemkuaXNVVEM9XzAsemkuem9uZUFiYnI9ZnVuY3Rpb24gQjYoKXtyZXR1cm4gdGhpcy5faXNVVEM/IlVUQyI6IiJ9LHppLnpvbmVOYW1lPWZ1bmN0aW9uIGo2KCl7cmV0dXJu''@;'; put 'put ''IHRoaXMuX2lzVVRDPyJDb29yZGluYXRlZCBVbml2ZXJzYWwgVGltZSI6IiJ9LHppLmRhdGVzPVNlKCJkYXRlcyBhY2Nlc3NvciBpcyBkZXByZWNhdGVkLiBVc2UgZGF0ZSBpbnN0ZWFkLiIscTApLHppLm1vbnRocz1TZSgibW9udGhzIGFjY2Vzc29yIGlzIGRlcHJlY2F0ZWQuIFVzZSBtb250''@;'; put 'put ''aCBpbnN0ZWFkIixMYyksemkueWVhcnM9U2UoInllYXJzIGFjY2Vzc29yIGlzIGRlcHJlY2F0ZWQuIFVzZSB5ZWFyIGluc3RlYWQiLFduKSx6aS56b25lPVNlKCJtb21lbnQoKS56b25lIGlzIGRlcHJlY2F0ZWQsIHVzZSBtb21lbnQoKS51dGNPZmZzZXQgaW5zdGVhZC4gaHR0cDovL21vbWVu''@;'; put 'put ''dGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy96b25lLyIsZnVuY3Rpb24gbjAoQ2UsS2Upe3JldHVybiBudWxsIT1DZT8oInN0cmluZyIhPXR5cGVvZiBDZSYmKENlPS1DZSksdGhpcy51dGNPZmZzZXQoQ2UsS2UpLHRoaXMpOi10aGlzLnV0Y09mZnNldCgpfSksemkuaXNEU1RTaGlmdGVkPVNl''@;'; put 'put ''KCJpc0RTVFNoaWZ0ZWQgaXMgZGVwcmVjYXRlZC4gU2VlIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvZHN0LXNoaWZ0ZWQvIGZvciBtb3JlIGluZm9ybWF0aW9uIixmdW5jdGlvbiBPdygpe2lmKCFPKHRoaXMuX2lzRFNUU2hpZnRlZCkpcmV0dXJuIHRoaXMuX2lzRFNU''@;'; put 'put ''U2hpZnRlZDt2YXIgS2UsQ2U9e307cmV0dXJuIGxlKENlLHRoaXMpLChDZT1sdihDZSkpLl9hPyhLZT1DZS5faXNVVEM/VShDZS5fYSk6c2woQ2UuX2EpLHRoaXMuX2lzRFNUU2hpZnRlZD10aGlzLmlzVmFsaWQoKSYmZnVuY3Rpb24gYzUoQ2UsS2UsbXQpe3ZhciBpaSxJdD1NYXRoLm1pbihD''@;'; put 'put ''ZS5sZW5ndGgsS2UubGVuZ3RoKSxkbj1NYXRoLmFicyhDZS5sZW5ndGgtS2UubGVuZ3RoKSxxbj0wO2ZvcihpaT0wO2lpPEl0O2lpKyspKG10JiZDZVtpaV0hPT1LZVtpaV18fCFtdCYmVHQoQ2VbaWldKSE9PVR0KEtlW2lpXSkpJiZxbisrO3JldHVybiBxbitkbn0oQ2UuX2EsS2UudG9BcnJh''@;'; put 'put ''eSgpKT4wKTp0aGlzLl9pc0RTVFNoaWZ0ZWQ9ITEsdGhpcy5faXNEU1RTaGlmdGVkfSk7dmFyIHVvPUMucHJvdG90eXBlO2Z1bmN0aW9uIHR1KENlLEtlLG10LEl0KXt2YXIgZG49dGEoKSxxbj1VKCkuc2V0KEl0LEtlKTtyZXR1cm4gZG5bbXRdKHFuLENlKX1mdW5jdGlvbiBFYyhDZSxLZSxt''@;'; put 'put ''dCl7aWYoeihDZSkmJihLZT1DZSxDZT12b2lkIDApLENlPUNlfHwiIixudWxsIT1LZSlyZXR1cm4gdHUoQ2UsS2UsbXQsIm1vbnRoIik7dmFyIEl0LGRuPVtdO2ZvcihJdD0wO0l0PDEyO0l0KyspZG5bSXRdPXR1KENlLEl0LG10LCJtb250aCIpO3JldHVybiBkbn1mdW5jdGlvbiBhMChDZSxL''@;'; put 'put ''ZSxtdCxJdCl7ImJvb2xlYW4iPT10eXBlb2YgQ2U/KHooS2UpJiYobXQ9S2UsS2U9dm9pZCAwKSxLZT1LZXx8IiIpOihtdD1LZT1DZSxDZT0hMSx6KEtlKSYmKG10PUtlLEtlPXZvaWQgMCksS2U9S2V8fCIiKTt2YXIgaWksZG49dGEoKSxxbj1DZT9kbi5fd2Vlay5kb3c6MCxJYT1bXTtpZihu''@;'; put 'put ''dWxsIT1tdClyZXR1cm4gdHUoS2UsKG10K3FuKSU3LEl0LCJkYXkiKTtmb3IoaWk9MDtpaTw3O2lpKyspSWFbaWldPXR1KEtlLChpaStxbiklNyxJdCwiZGF5Iik7cmV0dXJuIElhfXVvLmNhbGVuZGFyPWZ1bmN0aW9uIGooQ2UsS2UsbXQpe3ZhciBJdD10aGlzLl9jYWxlbmRhcltDZV18fHRo''@;'; put 'put ''aXMuX2NhbGVuZGFyLnNhbWVFbHNlO3JldHVybiBwKEl0KT9JdC5jYWxsKEtlLG10KTpJdH0sdW8ubG9uZ0RhdGVGb3JtYXQ9ZnVuY3Rpb24gdmUoQ2Upe3ZhciBLZT10aGlzLl9sb25nRGF0ZUZvcm1hdFtDZV0sbXQ9dGhpcy5fbG9uZ0RhdGVGb3JtYXRbQ2UudG9VcHBlckNhc2UoKV07cmV0''@;'; put 'put ''dXJuIEtlfHwhbXQ/S2U6KHRoaXMuX2xvbmdEYXRlRm9ybWF0W0NlXT1tdC5tYXRjaChtKS5tYXAoZnVuY3Rpb24oSXQpe3JldHVybiJNTU1NIj09PUl0fHwiTU0iPT09SXR8fCJERCI9PT1JdHx8ImRkZGQiPT09SXQ/SXQuc2xpY2UoMSk6SXR9KS5qb2luKCIiKSx0aGlzLl9sb25nRGF0ZUZv''@;'; put 'put ''cm1hdFtDZV0pfSx1by5pbnZhbGlkRGF0ZT1mdW5jdGlvbiB6ZSgpe3JldHVybiB0aGlzLl9pbnZhbGlkRGF0ZX0sdW8ub3JkaW5hbD1mdW5jdGlvbiBPZShDZSl7cmV0dXJuIHRoaXMuX29yZGluYWwucmVwbGFjZSgiJWQiLENlKX0sdW8ucHJlcGFyc2U9eHYsdW8ucG9zdGZvcm1hdD14dix1''@;'; put 'put ''by5yZWxhdGl2ZVRpbWU9ZnVuY3Rpb24gVmUoQ2UsS2UsbXQsSXQpe3ZhciBkbj10aGlzLl9yZWxhdGl2ZVRpbWVbbXRdO3JldHVybiBwKGRuKT9kbihDZSxLZSxtdCxJdCk6ZG4ucmVwbGFjZSgvJWQvaSxDZSl9LHVvLnBhc3RGdXR1cmU9ZnVuY3Rpb24ga2UoQ2UsS2Upe3ZhciBtdD10aGlz''@;'; put 'put ''Ll9yZWxhdGl2ZVRpbWVbQ2U+MD8iZnV0dXJlIjoicGFzdCJdO3JldHVybiBwKG10KT9tdChLZSk6bXQucmVwbGFjZSgvJXMvaSxLZSl9LHVvLnNldD1mdW5jdGlvbiBiKENlKXt2YXIgS2UsbXQ7Zm9yKG10IGluIENlKVAoQ2UsbXQpJiYocChLZT1DZVttdF0pP3RoaXNbbXRdPUtlOnRoaXNb''@;'; put 'put ''Il8iK210XT1LZSk7dGhpcy5fY29uZmlnPUNlLHRoaXMuX2RheU9mTW9udGhPcmRpbmFsUGFyc2VMZW5pZW50PW5ldyBSZWdFeHAoKHRoaXMuX2RheU9mTW9udGhPcmRpbmFsUGFyc2Uuc291cmNlfHx0aGlzLl9vcmRpbmFsUGFyc2Uuc291cmNlKSsifCIrL1xkezEsMn0vLnNvdXJjZSl9LHVv''@;'; put 'put ''LmVyYXM9ZnVuY3Rpb24gXzQoQ2UsS2Upe3ZhciBtdCxJdCxkbixxbj10aGlzLl9lcmFzfHx0YSgiZW4iKS5fZXJhcztmb3IobXQ9MCxJdD1xbi5sZW5ndGg7bXQ8SXQ7KyttdClzd2l0Y2goInN0cmluZyI9PXR5cGVvZiBxblttdF0uc2luY2UmJihkbj1fKHFuW210XS5zaW5jZSkuc3RhcnRP''@;'; put 'put ''ZigiZGF5IikscW5bbXRdLnNpbmNlPWRuLnZhbHVlT2YoKSksdHlwZW9mIHFuW210XS51bnRpbCl7Y2FzZSJ1bmRlZmluZWQiOnFuW210XS51bnRpbD0xLzA7YnJlYWs7Y2FzZSJzdHJpbmciOmRuPV8ocW5bbXRdLnVudGlsKS5zdGFydE9mKCJkYXkiKS52YWx1ZU9mKCkscW5bbXRdLnVudGls''@;'; put 'put ''PWRuLnZhbHVlT2YoKX1yZXR1cm4gcW59LHVvLmVyYXNQYXJzZT1mdW5jdGlvbiBXQShDZSxLZSxtdCl7dmFyIEl0LGRuLGlpLElhLFNvLHFuPXRoaXMuZXJhcygpO2ZvcihDZT1DZS50b1VwcGVyQ2FzZSgpLEl0PTAsZG49cW4ubGVuZ3RoO0l0PGRuOysrSXQpaWYoaWk9cW5bSXRdLm5hbWUu''@;'; put 'put ''dG9VcHBlckNhc2UoKSxJYT1xbltJdF0uYWJici50b1VwcGVyQ2FzZSgpLFNvPXFuW0l0XS5uYXJyb3cudG9VcHBlckNhc2UoKSxtdClzd2l0Y2goS2Upe2Nhc2UiTiI6Y2FzZSJOTiI6Y2FzZSJOTk4iOmlmKElhPT09Q2UpcmV0dXJuIHFuW0l0XTticmVhaztjYXNlIk5OTk4iOmlmKGlpPT09''@;'; put 'put ''Q2UpcmV0dXJuIHFuW0l0XTticmVhaztjYXNlIk5OTk5OIjppZihTbz09PUNlKXJldHVybiBxbltJdF19ZWxzZSBpZihbaWksSWEsU29dLmluZGV4T2YoQ2UpPj0wKXJldHVybiBxbltJdF19LHVvLmVyYXNDb252ZXJ0WWVhcj1mdW5jdGlvbiBMNihDZSxLZSl7dmFyIG10PUNlLnNpbmNlPD1D''@;'; put 'put ''ZS51bnRpbD8xOi0xO3JldHVybiB2b2lkIDA9PT1LZT9fKENlLnNpbmNlKS55ZWFyKCk6XyhDZS5zaW5jZSkueWVhcigpKyhLZS1DZS5vZmZzZXQpKm10fSx1by5lcmFzQWJiclJlZ2V4PWZ1bmN0aW9uIFA2KENlKXtyZXR1cm4gUCh0aGlzLCJfZXJhc0FiYnJSZWdleCIpfHxoYy5jYWxsKHRo''@;'; put 'put ''aXMpLENlP3RoaXMuX2VyYXNBYmJyUmVnZXg6dGhpcy5fZXJhc1JlZ2V4fSx1by5lcmFzTmFtZVJlZ2V4PWZ1bmN0aW9uIF9mKENlKXtyZXR1cm4gUCh0aGlzLCJfZXJhc05hbWVSZWdleCIpfHxoYy5jYWxsKHRoaXMpLENlP3RoaXMuX2VyYXNOYW1lUmVnZXg6dGhpcy5fZXJhc1JlZ2V4fSx1''@;'; put 'put ''by5lcmFzTmFycm93UmVnZXg9ZnVuY3Rpb24gRjYoQ2Upe3JldHVybiBQKHRoaXMsIl9lcmFzTmFycm93UmVnZXgiKXx8aGMuY2FsbCh0aGlzKSxDZT90aGlzLl9lcmFzTmFycm93UmVnZXg6dGhpcy5fZXJhc1JlZ2V4fSx1by5tb250aHM9ZnVuY3Rpb24gdGkoQ2UsS2Upe3JldHVybiBDZT9C''@;'; put 'put ''KHRoaXMuX21vbnRocyk/dGhpcy5fbW9udGhzW0NlLm1vbnRoKCldOnRoaXMuX21vbnRoc1sodGhpcy5fbW9udGhzLmlzRm9ybWF0fHx5YSkudGVzdChLZSk/ImZvcm1hdCI6InN0YW5kYWxvbmUiXVtDZS5tb250aCgpXTpCKHRoaXMuX21vbnRocyk/dGhpcy5fbW9udGhzOnRoaXMuX21vbnRo''@;'; put 'put ''cy5zdGFuZGFsb25lfSx1by5tb250aHNTaG9ydD1mdW5jdGlvbiBnbyhDZSxLZSl7cmV0dXJuIENlP0IodGhpcy5fbW9udGhzU2hvcnQpP3RoaXMuX21vbnRoc1Nob3J0W0NlLm1vbnRoKCldOnRoaXMuX21vbnRoc1Nob3J0W3lhLnRlc3QoS2UpPyJmb3JtYXQiOiJzdGFuZGFsb25lIl1bQ2Uu''@;'; put 'put ''bW9udGgoKV06Qih0aGlzLl9tb250aHNTaG9ydCk/dGhpcy5fbW9udGhzU2hvcnQ6dGhpcy5fbW9udGhzU2hvcnQuc3RhbmRhbG9uZX0sdW8ubW9udGhzUGFyc2U9ZnVuY3Rpb24gYmwoQ2UsS2UsbXQpe3ZhciBJdCxkbixxbjtpZih0aGlzLl9tb250aHNQYXJzZUV4YWN0KXJldHVybiBOcy5j''@;'; put 'put ''YWxsKHRoaXMsQ2UsS2UsbXQpO2Zvcih0aGlzLl9tb250aHNQYXJzZXx8KHRoaXMuX21vbnRoc1BhcnNlPVtdLHRoaXMuX2xvbmdNb250aHNQYXJzZT1bXSx0aGlzLl9zaG9ydE1vbnRoc1BhcnNlPVtdKSxJdD0wO0l0PDEyO0l0Kyspe2lmKGRuPVUoWzJlMyxJdF0pLG10JiYhdGhpcy5fbG9u''@;'; put 'put ''Z01vbnRoc1BhcnNlW0l0XSYmKHRoaXMuX2xvbmdNb250aHNQYXJzZVtJdF09bmV3IFJlZ0V4cCgiXiIrdGhpcy5tb250aHMoZG4sIiIpLnJlcGxhY2UoIi4iLCIiKSsiJCIsImkiKSx0aGlzLl9zaG9ydE1vbnRoc1BhcnNlW0l0XT1uZXcgUmVnRXhwKCJeIit0aGlzLm1vbnRoc1Nob3J0KGRu''@;'; put 'put ''LCIiKS5yZXBsYWNlKCIuIiwiIikrIiQiLCJpIikpLCFtdCYmIXRoaXMuX21vbnRoc1BhcnNlW0l0XSYmKHFuPSJeIit0aGlzLm1vbnRocyhkbiwiIikrInxeIit0aGlzLm1vbnRoc1Nob3J0KGRuLCIiKSx0aGlzLl9tb250aHNQYXJzZVtJdF09bmV3IFJlZ0V4cChxbi5yZXBsYWNlKCIuIiwi''@;'; put 'put ''IiksImkiKSksbXQmJiJNTU1NIj09PUtlJiZ0aGlzLl9sb25nTW9udGhzUGFyc2VbSXRdLnRlc3QoQ2UpKXJldHVybiBJdDtpZihtdCYmIk1NTSI9PT1LZSYmdGhpcy5fc2hvcnRNb250aHNQYXJzZVtJdF0udGVzdChDZSkpcmV0dXJuIEl0O2lmKCFtdCYmdGhpcy5fbW9udGhzUGFyc2VbSXRd''@;'; put 'put ''LnRlc3QoQ2UpKXJldHVybiBJdH19LHVvLm1vbnRoc1JlZ2V4PWZ1bmN0aW9uIHhhKENlKXtyZXR1cm4gdGhpcy5fbW9udGhzUGFyc2VFeGFjdD8oUCh0aGlzLCJfbW9udGhzUmVnZXgiKXx8dWkuY2FsbCh0aGlzKSxDZT90aGlzLl9tb250aHNTdHJpY3RSZWdleDp0aGlzLl9tb250aHNSZWdl''@;'; put 'put ''eCk6KFAodGhpcywiX21vbnRoc1JlZ2V4Iil8fCh0aGlzLl9tb250aHNSZWdleD1GYSksdGhpcy5fbW9udGhzU3RyaWN0UmVnZXgmJkNlP3RoaXMuX21vbnRoc1N0cmljdFJlZ2V4OnRoaXMuX21vbnRoc1JlZ2V4KX0sdW8ubW9udGhzU2hvcnRSZWdleD1mdW5jdGlvbiBpcihDZSl7cmV0dXJu''@;'; put 'put ''IHRoaXMuX21vbnRoc1BhcnNlRXhhY3Q/KFAodGhpcywiX21vbnRoc1JlZ2V4Iil8fHVpLmNhbGwodGhpcyksQ2U/dGhpcy5fbW9udGhzU2hvcnRTdHJpY3RSZWdleDp0aGlzLl9tb250aHNTaG9ydFJlZ2V4KTooUCh0aGlzLCJfbW9udGhzU2hvcnRSZWdleCIpfHwodGhpcy5fbW9udGhzU2hv''@;'; put 'put ''cnRSZWdleD1MYSksdGhpcy5fbW9udGhzU2hvcnRTdHJpY3RSZWdleCYmQ2U/dGhpcy5fbW9udGhzU2hvcnRTdHJpY3RSZWdleDp0aGlzLl9tb250aHNTaG9ydFJlZ2V4KX0sdW8ud2Vlaz1mdW5jdGlvbiBvZChDZSl7cmV0dXJuIEx1KENlLHRoaXMuX3dlZWsuZG93LHRoaXMuX3dlZWsuZG95''@;'; put 'put ''KS53ZWVrfSx1by5maXJzdERheU9mWWVhcj1mdW5jdGlvbiBDcygpe3JldHVybiB0aGlzLl93ZWVrLmRveX0sdW8uZmlyc3REYXlPZldlZWs9ZnVuY3Rpb24gY2YoKXtyZXR1cm4gdGhpcy5fd2Vlay5kb3d9LHVvLndlZWtkYXlzPWZ1bmN0aW9uIGhmKENlLEtlKXt2YXIgbXQ9Qih0aGlzLl93''@;'; put 'put ''ZWVrZGF5cyk/dGhpcy5fd2Vla2RheXM6dGhpcy5fd2Vla2RheXNbQ2UmJiEwIT09Q2UmJnRoaXMuX3dlZWtkYXlzLmlzRm9ybWF0LnRlc3QoS2UpPyJmb3JtYXQiOiJzdGFuZGFsb25lIl07cmV0dXJuITA9PT1DZT95MChtdCx0aGlzLl93ZWVrLmRvdyk6Q2U/bXRbQ2UuZGF5KCldOm10fSx1''@;'; put 'put ''by53ZWVrZGF5c01pbj1mdW5jdGlvbiBmZihDZSl7cmV0dXJuITA9PT1DZT95MCh0aGlzLl93ZWVrZGF5c01pbix0aGlzLl93ZWVrLmRvdyk6Q2U/dGhpcy5fd2Vla2RheXNNaW5bQ2UuZGF5KCldOnRoaXMuX3dlZWtkYXlzTWlufSx1by53ZWVrZGF5c1Nob3J0PWZ1bmN0aW9uIGVoKENlKXty''@;'; put 'put ''ZXR1cm4hMD09PUNlP3kwKHRoaXMuX3dlZWtkYXlzU2hvcnQsdGhpcy5fd2Vlay5kb3cpOkNlP3RoaXMuX3dlZWtkYXlzU2hvcnRbQ2UuZGF5KCldOnRoaXMuX3dlZWtkYXlzU2hvcnR9LHVvLndlZWtkYXlzUGFyc2U9ZnVuY3Rpb24gT2MoQ2UsS2UsbXQpe3ZhciBJdCxkbixxbjtpZih0aGlz''@;'; put 'put ''Ll93ZWVrZGF5c1BhcnNlRXhhY3QpcmV0dXJuIEdoLmNhbGwodGhpcyxDZSxLZSxtdCk7Zm9yKHRoaXMuX3dlZWtkYXlzUGFyc2V8fCh0aGlzLl93ZWVrZGF5c1BhcnNlPVtdLHRoaXMuX21pbldlZWtkYXlzUGFyc2U9W10sdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlPVtdLHRoaXMuX2Z1bGxX''@;'; put 'put ''ZWVrZGF5c1BhcnNlPVtdKSxJdD0wO0l0PDc7SXQrKyl7aWYoZG49VShbMmUzLDFdKS5kYXkoSXQpLG10JiYhdGhpcy5fZnVsbFdlZWtkYXlzUGFyc2VbSXRdJiYodGhpcy5fZnVsbFdlZWtkYXlzUGFyc2VbSXRdPW5ldyBSZWdFeHAoIl4iK3RoaXMud2Vla2RheXMoZG4sIiIpLnJlcGxhY2Uo''@;'; put 'put ''Ii4iLCJcXC4/IikrIiQiLCJpIiksdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlW0l0XT1uZXcgUmVnRXhwKCJeIit0aGlzLndlZWtkYXlzU2hvcnQoZG4sIiIpLnJlcGxhY2UoIi4iLCJcXC4/IikrIiQiLCJpIiksdGhpcy5fbWluV2Vla2RheXNQYXJzZVtJdF09bmV3IFJlZ0V4cCgiXiIrdGhp''@;'; put 'put ''cy53ZWVrZGF5c01pbihkbiwiIikucmVwbGFjZSgiLiIsIlxcLj8iKSsiJCIsImkiKSksdGhpcy5fd2Vla2RheXNQYXJzZVtJdF18fChxbj0iXiIrdGhpcy53ZWVrZGF5cyhkbiwiIikrInxeIit0aGlzLndlZWtkYXlzU2hvcnQoZG4sIiIpKyJ8XiIrdGhpcy53ZWVrZGF5c01pbihkbiwiIiks''@;'; put 'put ''dGhpcy5fd2Vla2RheXNQYXJzZVtJdF09bmV3IFJlZ0V4cChxbi5yZXBsYWNlKCIuIiwiIiksImkiKSksbXQmJiJkZGRkIj09PUtlJiZ0aGlzLl9mdWxsV2Vla2RheXNQYXJzZVtJdF0udGVzdChDZSkpcmV0dXJuIEl0O2lmKG10JiYiZGRkIj09PUtlJiZ0aGlzLl9zaG9ydFdlZWtkYXlzUGFy''@;'; put 'put ''c2VbSXRdLnRlc3QoQ2UpKXJldHVybiBJdDtpZihtdCYmImRkIj09PUtlJiZ0aGlzLl9taW5XZWVrZGF5c1BhcnNlW0l0XS50ZXN0KENlKSlyZXR1cm4gSXQ7aWYoIW10JiZ0aGlzLl93ZWVrZGF5c1BhcnNlW0l0XS50ZXN0KENlKSlyZXR1cm4gSXR9fSx1by53ZWVrZGF5c1JlZ2V4PWZ1bmN0''@;'; put 'put ''aW9uIEtoKENlKXtyZXR1cm4gdGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0PyhQKHRoaXMsIl93ZWVrZGF5c1JlZ2V4Iil8fGFuLmNhbGwodGhpcyksQ2U/dGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleDp0aGlzLl93ZWVrZGF5c1JlZ2V4KTooUCh0aGlzLCJfd2Vla2RheXNSZWdleCIpfHwodGhp''@;'; put 'put ''cy5fd2Vla2RheXNSZWdleD1zZCksdGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleCYmQ2U/dGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleDp0aGlzLl93ZWVrZGF5c1JlZ2V4KX0sdW8ud2Vla2RheXNTaG9ydFJlZ2V4PWZ1bmN0aW9uIHFoKENlKXtyZXR1cm4gdGhpcy5fd2Vla2RheXNQYXJzZUV4''@;'; put 'put ''YWN0PyhQKHRoaXMsIl93ZWVrZGF5c1JlZ2V4Iil8fGFuLmNhbGwodGhpcyksQ2U/dGhpcy5fd2Vla2RheXNTaG9ydFN0cmljdFJlZ2V4OnRoaXMuX3dlZWtkYXlzU2hvcnRSZWdleCk6KFAodGhpcywiX3dlZWtkYXlzU2hvcnRSZWdleCIpfHwodGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4PWRm''@;'; put 'put ''KSx0aGlzLl93ZWVrZGF5c1Nob3J0U3RyaWN0UmVnZXgmJkNlP3RoaXMuX3dlZWtkYXlzU2hvcnRTdHJpY3RSZWdleDp0aGlzLl93ZWVrZGF5c1Nob3J0UmVnZXgpfSx1by53ZWVrZGF5c01pblJlZ2V4PWZ1bmN0aW9uIEFuKENlKXtyZXR1cm4gdGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0PyhQ''@;'; put 'put ''KHRoaXMsIl93ZWVrZGF5c1JlZ2V4Iil8fGFuLmNhbGwodGhpcyksQ2U/dGhpcy5fd2Vla2RheXNNaW5TdHJpY3RSZWdleDp0aGlzLl93ZWVrZGF5c01pblJlZ2V4KTooUCh0aGlzLCJfd2Vla2RheXNNaW5SZWdleCIpfHwodGhpcy5fd2Vla2RheXNNaW5SZWdleD1rMSksdGhpcy5fd2Vla2Rh''@;'; put 'put ''eXNNaW5TdHJpY3RSZWdleCYmQ2U/dGhpcy5fd2Vla2RheXNNaW5TdHJpY3RSZWdleDp0aGlzLl93ZWVrZGF5c01pblJlZ2V4KX0sdW8uaXNQTT1mdW5jdGlvbiBvbChDZSl7cmV0dXJuInAiPT09KENlKyIiKS50b0xvd2VyQ2FzZSgpLmNoYXJBdCgwKX0sdW8ubWVyaWRpZW09ZnVuY3Rpb24g''@;'; put 'put ''U3MoQ2UsS2UsbXQpe3JldHVybiBDZT4xMT9tdD8icG0iOiJQTSI6bXQ/ImFtIjoiQU0ifSx1cigiZW4iLHtlcmFzOlt7c2luY2U6IjAwMDEtMDEtMDEiLHVudGlsOjEvMCxvZmZzZXQ6MSxuYW1lOiJBbm5vIERvbWluaSIsbmFycm93OiJBRCIsYWJicjoiQUQifSx7c2luY2U6IjAwMDAtMTIt''@;'; put 'put ''MzEiLHVudGlsOi0xLzAsb2Zmc2V0OjEsbmFtZToiQmVmb3JlIENocmlzdCIsbmFycm93OiJCQyIsYWJicjoiQkMifV0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfSh0aHxzdHxuZHxyZCkvLG9yZGluYWw6ZnVuY3Rpb24oQ2Upe3ZhciBLZT1DZSUxMDtyZXR1cm4gQ2UrKDE9PT1U''@;'; put 'put ''dChDZSUxMDAvMTApPyJ0aCI6MT09PUtlPyJzdCI6Mj09PUtlPyJuZCI6Mz09PUtlPyJyZCI6InRoIil9fSksXy5sYW5nPVNlKCJtb21lbnQubGFuZyBpcyBkZXByZWNhdGVkLiBVc2UgbW9tZW50LmxvY2FsZSBpbnN0ZWFkLiIsdXIpLF8ubGFuZ0RhdGE9U2UoIm1vbWVudC5sYW5nRGF0YSBp''@;'; put 'put ''cyBkZXByZWNhdGVkLiBVc2UgbW9tZW50LmxvY2FsZURhdGEgaW5zdGVhZC4iLHRhKTt2YXIgTmM9TWF0aC5hYnM7ZnVuY3Rpb24gbnUoQ2UsS2UsbXQsSXQpe3ZhciBkbj1KbChLZSxtdCk7cmV0dXJuIENlLl9taWxsaXNlY29uZHMrPUl0KmRuLl9taWxsaXNlY29uZHMsQ2UuX2RheXMrPUl0''@;'; put 'put ''KmRuLl9kYXlzLENlLl9tb250aHMrPUl0KmRuLl9tb250aHMsQ2UuX2J1YmJsZSgpfWZ1bmN0aW9uIHBjKENlKXtyZXR1cm4gQ2U8MD9NYXRoLmZsb29yKENlKTpNYXRoLmNlaWwoQ2UpfWZ1bmN0aW9uIGJvKENlKXtyZXR1cm4gNDgwMCpDZS8xNDYwOTd9ZnVuY3Rpb24gU2YoQ2Upe3JldHVy''@;'; put 'put ''biAxNDYwOTcqQ2UvNDgwMH1mdW5jdGlvbiBvMChDZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXMoQ2UpfX12YXIgWmw9bzAoIm1zIiksUzQ9bzAoInMiKSxNZj1vMCgibSIpLHVkPW8wKCJoIiksdzA9bzAoImQiKSxhMj1vMCgidyIpLG8yPW8wKCJNIiksdjU9bzAoIlEiKSx4''@;'; put 'put ''Zj1vMCgieSIpLHdvPVpsO2Z1bmN0aW9uIHZ1KENlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1ZhbGlkKCk/dGhpcy5fZGF0YVtDZV06TmFOfX12YXIgTTQ9dnUoIm1pbGxpc2Vjb25kcyIpLFYzPXZ1KCJzZWNvbmRzIiksZ2M9dnUoIm1pbnV0ZXMiKSxiNT12dSgiaG91cnMi''@;'; put 'put ''KSxGdT12dSgiZGF5cyIpLEh1PXZ1KCJtb250aHMiKSxydT12dSgieWVhcnMiKTt2YXIgSjA9TWF0aC5yb3VuZCxWYz17c3M6NDQsczo0NSxtOjQ1LGg6MjIsZDoyNix3Om51bGwsTToxMX07ZnVuY3Rpb24geDQoQ2UsS2UsbXQsSXQsZG4pe3JldHVybiBkbi5yZWxhdGl2ZVRpbWUoS2V8fDEs''@;'; put 'put ''ISFtdCxDZSxJdCl9dmFyIFo2PU1hdGguYWJzO2Z1bmN0aW9uIGwyKENlKXtyZXR1cm4oQ2U+MCktKENlPDApfHwrQ2V9ZnVuY3Rpb24gVzYoKXtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCk7dmFyIEl0LGRuLHFuLGlpLFNvLGZzLE51''@;'; put 'put ''LGRkLENlPVo2KHRoaXMuX21pbGxpc2Vjb25kcykvMWUzLEtlPVo2KHRoaXMuX2RheXMpLG10PVo2KHRoaXMuX21vbnRocyksSWE9dGhpcy5hc1NlY29uZHMoKTtyZXR1cm4gSWE/KEl0PVdlKENlLzYwKSxkbj1XZShJdC82MCksQ2UlPTYwLEl0JT02MCxxbj1XZShtdC8xMiksbXQlPTEyLGlp''@;'; put 'put ''PUNlP0NlLnRvRml4ZWQoMykucmVwbGFjZSgvXC4/MCskLywiIik6IiIsU289SWE8MD8iLSI6IiIsZnM9bDIodGhpcy5fbW9udGhzKSE9PWwyKElhKT8iLSI6IiIsTnU9bDIodGhpcy5fZGF5cykhPT1sMihJYSk/Ii0iOiIiLGRkPWwyKHRoaXMuX21pbGxpc2Vjb25kcykhPT1sMihJYSk/Ii0i''@;'; put 'put ''OiIiLFNvKyJQIisocW4/ZnMrcW4rIlkiOiIiKSsobXQ/ZnMrbXQrIk0iOiIiKSsoS2U/TnUrS2UrIkQiOiIiKSsoZG58fEl0fHxDZT8iVCI6IiIpKyhkbj9kZCtkbisiSCI6IiIpKyhJdD9kZCtJdCsiTSI6IiIpKyhDZT9kZCtpaSsiUyI6IiIpKToiUDBEIn12YXIgbXM9cGYucHJvdG90eXBl''@;'; put 'put ''O3JldHVybiBtcy5pc1ZhbGlkPWZ1bmN0aW9uIHM1KCl7cmV0dXJuIHRoaXMuX2lzVmFsaWR9LG1zLmFicz1mdW5jdGlvbiByYygpe3ZhciBDZT10aGlzLl9kYXRhO3JldHVybiB0aGlzLl9taWxsaXNlY29uZHM9TmModGhpcy5fbWlsbGlzZWNvbmRzKSx0aGlzLl9kYXlzPU5jKHRoaXMuX2Rh''@;'; put 'put ''eXMpLHRoaXMuX21vbnRocz1OYyh0aGlzLl9tb250aHMpLENlLm1pbGxpc2Vjb25kcz1OYyhDZS5taWxsaXNlY29uZHMpLENlLnNlY29uZHM9TmMoQ2Uuc2Vjb25kcyksQ2UubWludXRlcz1OYyhDZS5taW51dGVzKSxDZS5ob3Vycz1OYyhDZS5ob3VycyksQ2UubW9udGhzPU5jKENlLm1vbnRo''@;'; put 'put ''cyksQ2UueWVhcnM9TmMoQ2UueWVhcnMpLHRoaXN9LG1zLmFkZD1mdW5jdGlvbiBYMChDZSxLZSl7cmV0dXJuIG51KHRoaXMsQ2UsS2UsMSl9LG1zLnN1YnRyYWN0PWZ1bmN0aW9uIGNsKENlLEtlKXtyZXR1cm4gbnUodGhpcyxDZSxLZSwtMSl9LG1zLmFzPWZ1bmN0aW9uIEM0KENlKXtpZigh''@;'; put 'put ''dGhpcy5pc1ZhbGlkKCkpcmV0dXJuIE5hTjt2YXIgS2UsbXQsSXQ9dGhpcy5fbWlsbGlzZWNvbmRzO2lmKCJtb250aCI9PT0oQ2U9X3QoQ2UpKXx8InF1YXJ0ZXIiPT09Q2V8fCJ5ZWFyIj09PUNlKXN3aXRjaChLZT10aGlzLl9kYXlzK0l0Lzg2NGU1LG10PXRoaXMuX21vbnRocytibyhLZSks''@;'; put 'put ''Q2Upe2Nhc2UibW9udGgiOnJldHVybiBtdDtjYXNlInF1YXJ0ZXIiOnJldHVybiBtdC8zO2Nhc2UieWVhciI6cmV0dXJuIG10LzEyfWVsc2Ugc3dpdGNoKEtlPXRoaXMuX2RheXMrTWF0aC5yb3VuZChTZih0aGlzLl9tb250aHMpKSxDZSl7Y2FzZSJ3ZWVrIjpyZXR1cm4gS2UvNytJdC82MDQ4''@;'; put 'put ''ZTU7Y2FzZSJkYXkiOnJldHVybiBLZStJdC84NjRlNTtjYXNlImhvdXIiOnJldHVybiAyNCpLZStJdC8zNmU1O2Nhc2UibWludXRlIjpyZXR1cm4gMTQ0MCpLZStJdC82ZTQ7Y2FzZSJzZWNvbmQiOnJldHVybiA4NjQwMCpLZStJdC8xZTM7Y2FzZSJtaWxsaXNlY29uZCI6cmV0dXJuIE1hdGgu''@;'; put 'put ''Zmxvb3IoODY0ZTUqS2UpK0l0O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbmtub3duIHVuaXQgIitDZSl9fSxtcy5hc01pbGxpc2Vjb25kcz1abCxtcy5hc1NlY29uZHM9UzQsbXMuYXNNaW51dGVzPU1mLG1zLmFzSG91cnM9dWQsbXMuYXNEYXlzPXcwLG1zLmFzV2Vla3M9YTIsbXMuYXNN''@;'; put 'put ''b250aHM9bzIsbXMuYXNRdWFydGVycz12NSxtcy5hc1llYXJzPXhmLG1zLnZhbHVlT2Y9d28sbXMuX2J1YmJsZT1mdW5jdGlvbiBMMSgpe3ZhciBkbixxbixpaSxJYSxTbyxDZT10aGlzLl9taWxsaXNlY29uZHMsS2U9dGhpcy5fZGF5cyxtdD10aGlzLl9tb250aHMsSXQ9dGhpcy5fZGF0YTty''@;'; put 'put ''ZXR1cm4gQ2U+PTAmJktlPj0wJiZtdD49MHx8Q2U8PTAmJktlPD0wJiZtdDw9MHx8KENlKz04NjRlNSpwYyhTZihtdCkrS2UpLEtlPTAsbXQ9MCksSXQubWlsbGlzZWNvbmRzPUNlJTFlMyxkbj1XZShDZS8xZTMpLEl0LnNlY29uZHM9ZG4lNjAscW49V2UoZG4vNjApLEl0Lm1pbnV0ZXM9cW4l''@;'; put 'put ''NjAsaWk9V2UocW4vNjApLEl0LmhvdXJzPWlpJTI0LEtlKz1XZShpaS8yNCksbXQrPVNvPVdlKGJvKEtlKSksS2UtPXBjKFNmKFNvKSksSWE9V2UobXQvMTIpLG10JT0xMixJdC5kYXlzPUtlLEl0Lm1vbnRocz1tdCxJdC55ZWFycz1JYSx0aGlzfSxtcy5jbG9uZT1mdW5jdGlvbiB6Nigpe3Jl''@;'; put 'put ''dHVybiBKbCh0aGlzKX0sbXMuZ2V0PWZ1bmN0aW9uIHMyKENlKXtyZXR1cm4gQ2U9X3QoQ2UpLHRoaXMuaXNWYWxpZCgpP3RoaXNbQ2UrInMiXSgpOk5hTn0sbXMubWlsbGlzZWNvbmRzPU00LG1zLnNlY29uZHM9VjMsbXMubWludXRlcz1nYyxtcy5ob3Vycz1iNSxtcy5kYXlzPUZ1LG1zLndl''@;'; put 'put ''ZWtzPWZ1bmN0aW9uIEVmKCl7cmV0dXJuIFdlKHRoaXMuZGF5cygpLzcpfSxtcy5tb250aHM9SHUsbXMueWVhcnM9cnUsbXMuaHVtYW5pemU9ZnVuY3Rpb24gRXYoQ2UsS2Upe2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKTt2YXIgZG4s''@;'; put 'put ''cW4sbXQ9ITEsSXQ9VmM7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBDZSYmKEtlPUNlLENlPSExKSwiYm9vbGVhbiI9PXR5cGVvZiBDZSYmKG10PUNlKSwib2JqZWN0Ij09dHlwZW9mIEtlJiYoSXQ9T2JqZWN0LmFzc2lnbih7fSxWYyxLZSksbnVsbCE9S2UucyYmbnVsbD09S2Uuc3MmJihJdC5z''@;'; put 'put ''cz1LZS5zLTEpKSxxbj1mdW5jdGlvbiAkdyhDZSxLZSxtdCxJdCl7dmFyIGRuPUpsKENlKS5hYnMoKSxxbj1KMChkbi5hcygicyIpKSxpaT1KMChkbi5hcygibSIpKSxJYT1KMChkbi5hcygiaCIpKSxTbz1KMChkbi5hcygiZCIpKSxmcz1KMChkbi5hcygiTSIpKSxOdT1KMChkbi5hcygidyIp''@;'; put 'put ''KSxkZD1KMChkbi5hcygieSIpKSxjMj1xbjw9bXQuc3MmJlsicyIscW5dfHxxbjxtdC5zJiZbInNzIixxbl18fGlpPD0xJiZbIm0iXXx8aWk8bXQubSYmWyJtbSIsaWldfHxJYTw9MSYmWyJoIl18fElhPG10LmgmJlsiaGgiLElhXXx8U288PTEmJlsiZCJdfHxTbzxtdC5kJiZbImRkIixTb107''@;'; put 'put ''cmV0dXJuIG51bGwhPW10LncmJihjMj1jMnx8TnU8PTEmJlsidyJdfHxOdTxtdC53JiZbInd3IixOdV0pLChjMj1jMnx8ZnM8PTEmJlsiTSJdfHxmczxtdC5NJiZbIk1NIixmc118fGRkPD0xJiZbInkiXXx8WyJ5eSIsZGRdKVsyXT1LZSxjMlszXT0rQ2U+MCxjMls0XT1JdCx4NC5hcHBseShu''@;'; put 'put ''dWxsLGMyKX0odGhpcywhbXQsSXQsZG49dGhpcy5sb2NhbGVEYXRhKCkpLG10JiYocW49ZG4ucGFzdEZ1dHVyZSgrdGhpcyxxbikpLGRuLnBvc3Rmb3JtYXQocW4pfSxtcy50b0lTT1N0cmluZz1XNixtcy50b1N0cmluZz1XNixtcy50b0pTT049VzYsbXMubG9jYWxlPUthLG1zLmxvY2FsZURh''@;'; put 'put ''dGE9YmYsbXMudG9Jc29TdHJpbmc9U2UoInRvSXNvU3RyaW5nKCkgaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSB0b0lTT1N0cmluZygpIGluc3RlYWQgKG5vdGljZSB0aGUgY2FwaXRhbHMpIixXNiksbXMubGFuZz1WcixzZSgiWCIsMCwwLCJ1bml4Iiksc2UoIngiLDAsMCwidmFsdWVPZiIp''@;'; put 'put ''LFJuKCJ4IixRdCksUm4oIlgiLC9bKy1dP1xkKyhcLlxkezEsM30pPy8pLGh0KCJYIixmdW5jdGlvbihDZSxLZSxtdCl7bXQuX2Q9bmV3IERhdGUoMWUzKnBhcnNlRmxvYXQoQ2UpKX0pLGh0KCJ4IixmdW5jdGlvbihDZSxLZSxtdCl7bXQuX2Q9bmV3IERhdGUoVHQoQ2UpKX0pLF8udmVyc2lv''@;'; put 'put ''bj0iMi4zMC4xIixmdW5jdGlvbiBnKENlKXtJPUNlfShzbCksXy5mbj16aSxfLm1pbj1mdW5jdGlvbiBEMSgpe3JldHVybiBuaCgiaXNCZWZvcmUiLFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLDApKX0sXy5tYXg9ZnVuY3Rpb24geHIoKXtyZXR1cm4gbmgoImlzQWZ0ZXIiLFtdLnNsaWNlLmNh''@;'; put 'put ''bGwoYXJndW1lbnRzLDApKX0sXy5ub3c9ZnVuY3Rpb24oKXtyZXR1cm4gRGF0ZS5ub3c/RGF0ZS5ub3coKTorbmV3IERhdGV9LF8udXRjPVUsXy51bml4PWZ1bmN0aW9uIHIyKENlKXtyZXR1cm4gc2woMWUzKkNlKX0sXy5tb250aHM9ZnVuY3Rpb24gdzQoQ2UsS2Upe3JldHVybiBFYyhDZSxL''@;'; put 'put ''ZSwibW9udGhzIil9LF8uaXNEYXRlPU4sXy5sb2NhbGU9dXIsXy5pbnZhbGlkPUosXy5kdXJhdGlvbj1KbCxfLmlzTW9tZW50PV9lLF8ud2Vla2RheXM9ZnVuY3Rpb24gS2koQ2UsS2UsbXQpe3JldHVybiBhMChDZSxLZSxtdCwid2Vla2RheXMiKX0sXy5wYXJzZVpvbmU9ZnVuY3Rpb24gR3co''@;'; put 'put ''KXtyZXR1cm4gc2wuYXBwbHkobnVsbCxhcmd1bWVudHMpLnBhcnNlWm9uZSgpfSxfLmxvY2FsZURhdGE9dGEsXy5pc0R1cmF0aW9uPWw1LF8ubW9udGhzU2hvcnQ9ZnVuY3Rpb24gVWwoQ2UsS2Upe3JldHVybiBFYyhDZSxLZSwibW9udGhzU2hvcnQiKX0sXy53ZWVrZGF5c01pbj1mdW5jdGlv''@;'; put 'put ''biBmYyhDZSxLZSxtdCl7cmV0dXJuIGEwKENlLEtlLG10LCJ3ZWVrZGF5c01pbiIpfSxfLmRlZmluZUxvY2FsZT1iaSxfLnVwZGF0ZUxvY2FsZT1mdW5jdGlvbiBGcihDZSxLZSl7aWYobnVsbCE9S2Upe3ZhciBtdCxJdCxkbj1qbDtudWxsIT1Ib1tDZV0mJm51bGwhPUhvW0NlXS5wYXJlbnRM''@;'; put 'put ''b2NhbGU/SG9bQ2VdLnNldCh4KEhvW0NlXS5fY29uZmlnLEtlKSk6KG51bGwhPShJdD1ibihDZSkpJiYoZG49SXQuX2NvbmZpZyksS2U9eChkbixLZSksbnVsbD09SXQmJihLZS5hYmJyPUNlKSwobXQ9bmV3IEMoS2UpKS5wYXJlbnRMb2NhbGU9SG9bQ2VdLEhvW0NlXT1tdCksdXIoQ2UpfWVs''@;'; put 'put ''c2UgbnVsbCE9SG9bQ2VdJiYobnVsbCE9SG9bQ2VdLnBhcmVudExvY2FsZT8oSG9bQ2VdPUhvW0NlXS5wYXJlbnRMb2NhbGUsQ2U9PT11cigpJiZ1cihDZSkpOm51bGwhPUhvW0NlXSYmZGVsZXRlIEhvW0NlXSk7cmV0dXJuIEhvW0NlXX0sXy5sb2NhbGVzPWZ1bmN0aW9uIG9hKCl7cmV0dXJu''@;'; put 'put ''IFQoSG8pfSxfLndlZWtkYXlzU2hvcnQ9ZnVuY3Rpb24gVWEoQ2UsS2UsbXQpe3JldHVybiBhMChDZSxLZSxtdCwid2Vla2RheXNTaG9ydCIpfSxfLm5vcm1hbGl6ZVVuaXRzPV90LF8ucmVsYXRpdmVUaW1lUm91bmRpbmc9ZnVuY3Rpb24gS3coQ2Upe3JldHVybiB2b2lkIDA9PT1DZT9KMDoi''@;'; put 'put ''ZnVuY3Rpb24iPT10eXBlb2YgQ2UmJihKMD1DZSwhMCl9LF8ucmVsYXRpdmVUaW1lVGhyZXNob2xkPWZ1bmN0aW9uIFU2KENlLEtlKXtyZXR1cm4gdm9pZCAwIT09VmNbQ2VdJiYodm9pZCAwPT09S2U/VmNbQ2VdOihWY1tDZV09S2UsInMiPT09Q2UmJihWYy5zcz1LZS0xKSwhMCkpfSxfLmNh''@;'; put 'put ''bGVuZGFyRm9ybWF0PWZ1bmN0aW9uIGQ1KENlLEtlKXt2YXIgbXQ9Q2UuZGlmZihLZSwiZGF5cyIsITApO3JldHVybiBtdDwtNj8ic2FtZUVsc2UiOm10PC0xPyJsYXN0V2VlayI6bXQ8MD8ibGFzdERheSI6bXQ8MT8ic2FtZURheSI6bXQ8Mj8ibmV4dERheSI6bXQ8Nz8ibmV4dFdlZWsiOiJz''@;'; put 'put ''YW1lRWxzZSJ9LF8ucHJvdG90eXBlPXppLF8uSFRNTDVfRk1UPXtEQVRFVElNRV9MT0NBTDoiWVlZWS1NTS1ERFRISDptbSIsREFURVRJTUVfTE9DQUxfU0VDT05EUzoiWVlZWS1NTS1ERFRISDptbTpzcyIsREFURVRJTUVfTE9DQUxfTVM6IllZWVktTU0tRERUSEg6bW06c3MuU1NTIixEQVRF''@;'; put 'put ''OiJZWVlZLU1NLUREIixUSU1FOiJISDptbSIsVElNRV9TRUNPTkRTOiJISDptbTpzcyIsVElNRV9NUzoiSEg6bW06c3MuU1NTIixXRUVLOiJHR0dHLVtXXVdXIixNT05USDoiWVlZWS1NTSJ9LF99KCl9LDc4Mzc1OmZ1bmN0aW9uKHVlKXt1ZS5leHBvcnRzPWZ1bmN0aW9uKCl7InVzZSBzdHJp''@;'; put 'put ''Y3QiO3R5cGVvZiBnbG9iYWxUaGlzPCJ1Inx8dHlwZW9mIHdpbmRvdzwidSJ8fHR5cGVvZiBnbG9iYWw8InUiJiZnbG9iYWw7dmFyIHk9e30sST17ZXhwb3J0czp7fX07SS5leHBvcnRzPWZ1bmN0aW9uIHVpKFZ0KXtyZXR1cm4gVnQmJlZ0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUu''@;'; put 'put ''aGFzT3duUHJvcGVydHkuY2FsbChWdCwiZGVmYXVsdCIpP1Z0LmRlZmF1bHQ6VnR9KHtsYW5ndWFnZVRhZzoiYmciLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiICIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJcdTA0MTgiLG1pbGxpb246Ilx1MDQxMCIsYmlsbGlvbjoi''@;'; put 'put ''TSIsdHJpbGxpb246IlQifSxvcmRpbmFsOigpPT4iLiIsY3VycmVuY3k6e3N5bWJvbDoiXHUwNDNiXHUwNDMyLiIsY29kZToiQkdOIn19KTt2YXIgXz1JLmV4cG9ydHMsZz17ZXhwb3J0czp7fX07Zy5leHBvcnRzPWZ1bmN0aW9uIHVpKFZ0KXtyZXR1cm4gVnQmJlZ0Ll9fZXNNb2R1bGUmJk9i''@;'; put 'put ''amVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChWdCwiZGVmYXVsdCIpP1Z0LmRlZmF1bHQ6VnR9KHtsYW5ndWFnZVRhZzoiY3MtQ1oiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiXHhhMCIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJ0aXMuIixtaWxsaW9u''@;'; put 'put ''OiJtaWwuIixiaWxsaW9uOiJtbGQuIix0cmlsbGlvbjoiYmlsLiJ9LG9yZGluYWw6ZnVuY3Rpb24oKXtyZXR1cm4iLiJ9LHNwYWNlU2VwYXJhdGVkOiEwLGN1cnJlbmN5OntzeW1ib2w6IktcdTAxMGQiLHBvc2l0aW9uOiJwb3N0Zml4Iixjb2RlOiJDWksifSxjdXJyZW5jeUZvcm1hdDp7dGhv''@;'; put 'put ''dXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxzcGFjZVNlcGFyYXRlZEN1cnJlbmN5OiEwLHNwYWNlU2VwYXJhdGVkQWJicmV2aWF0aW9uOiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0''@;'; put 'put ''ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0''@;'; put 'put ''ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSk7dmFyIEI9Zy5leHBvcnRzLHc9e2V4cG9ydHM6e319OyFmdW5jdGlvbihpcix4YSl7aXIuZXhwb3J0cz1mdW5jdGlv''@;'; put 'put ''biB1aShWdCl7cmV0dXJuIFZ0JiZWdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVnQsImRlZmF1bHQiKT9WdC5kZWZhdWx0OlZ0fSh7bGFuZ3VhZ2VUYWc6ImRhLURLIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6Ii4iLGRlY2ltYWw6IiwifSxhYmJy''@;'; put 'put ''ZXZpYXRpb25zOnt0aG91c2FuZDoidCIsbWlsbGlvbjoibWlvIixiaWxsaW9uOiJtaWEiLHRyaWxsaW9uOiJiIn0sb3JkaW5hbDpmdW5jdGlvbigpe3JldHVybiIuIn0sY3VycmVuY3k6e3N5bWJvbDoia3IiLHBvc2l0aW9uOiJwb3N0Zml4Iixjb2RlOiJES0sifSxjdXJyZW5jeUZvcm1hdDp7''@;'; put 'put ''dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxzcGFjZVNlcGFyYXRlZEN1cnJlbmN5OiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhU''@;'; put 'put ''d29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7''@;'; put 'put ''b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KHcpO3ZhciBQPXcuZXhwb3J0cyxGPXtleHBvcnRzOnt9fTshZnVuY3Rpb24oaXIseGEpe2lyLmV4cG9ydHM9ZnVuY3Rpb24gdWkoVnQpe3JldHVybiBWdCYmVnQu''@;'; put 'put ''X19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFZ0LCJkZWZhdWx0Iik/VnQuZGVmYXVsdDpWdH0oe2xhbmd1YWdlVGFnOiJkZS1BVCIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIgIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6Imsi''@;'; put 'put ''LG1pbGxpb246Im0iLGJpbGxpb246ImIiLHRyaWxsaW9uOiJ0In0sb3JkaW5hbDpmdW5jdGlvbigpe3JldHVybiIuIn0sY3VycmVuY3k6e3N5bWJvbDoiXHUyMGFjIixjb2RlOiJFVVIifX0pfShGKTt2YXIgTz1GLmV4cG9ydHMsej17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKGlyLHhhKXtpci5l''@;'; put 'put ''eHBvcnRzPWZ1bmN0aW9uIHVpKFZ0KXtyZXR1cm4gVnQmJlZ0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChWdCwiZGVmYXVsdCIpP1Z0LmRlZmF1bHQ6VnR9KHtsYW5ndWFnZVRhZzoiZGUtQ0giLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiXHUyMDE5''@;'; put 'put ''IixkZWNpbWFsOiIuIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6ImsiLG1pbGxpb246Im0iLGJpbGxpb246ImIiLHRyaWxsaW9uOiJ0In0sb3JkaW5hbDpmdW5jdGlvbigpe3JldHVybiIuIn0sY3VycmVuY3k6e3N5bWJvbDoiQ0hGIixwb3NpdGlvbjoicG9zdGZpeCIsY29kZToiQ0hGIn0s''@;'; put 'put ''Y3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxz''@;'; put 'put ''OntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1''@;'; put 'put ''cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19KX0oeik7dmFyIE49ei5leHBvcnRzLEw9e2V4cG9ydHM6e319OyFmdW5jdGlvbihpcix4YSl7aXIuZXhwb3J0cz1mdW5jdGlvbiB1aShWdCl7cmV0dXJuIFZ0JiZWdC5fX2VzTW9kdWxl''@;'; put 'put ''JiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVnQsImRlZmF1bHQiKT9WdC5kZWZhdWx0OlZ0fSh7bGFuZ3VhZ2VUYWc6ImRlLURFIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6Ii4iLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiayIsbWlsbGlvbjoi''@;'; put 'put ''TWkiLGJpbGxpb246Ik1hIix0cmlsbGlvbjoiQmkifSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0dXJuIi4ifSxzcGFjZVNlcGFyYXRlZDohMCxjdXJyZW5jeTp7c3ltYm9sOiJcdTIwYWMiLHBvc2l0aW9uOiJwb3N0Zml4Iixjb2RlOiJFVVIifSxjdXJyZW5jeUZvcm1hdDp7dG90YWxMZW5ndGg6''@;'; put 'put ''NCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5k''@;'; put 'put ''U2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTow''@;'; put 'put ''fX19KX0oTCk7dmFyIEs9TC5leHBvcnRzLFU9e2V4cG9ydHM6e319OyFmdW5jdGlvbihpcix4YSl7aXIuZXhwb3J0cz1mdW5jdGlvbiB1aShWdCl7cmV0dXJuIFZ0JiZWdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVnQsImRlZmF1bHQiKT9WdC5k''@;'; put 'put ''ZWZhdWx0OlZ0fSh7bGFuZ3VhZ2VUYWc6ImRlLUxJIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiciLGRlY2ltYWw6Ii4ifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiayIsbWlsbGlvbjoibSIsYmlsbGlvbjoiYiIsdHJpbGxpb246InQifSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0dXJuIi4i''@;'; put 'put ''fSxjdXJyZW5jeTp7c3ltYm9sOiJDSEYiLHBvc2l0aW9uOiJwb3N0Zml4Iixjb2RlOiJDSEYifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxzcGFjZVNlcGFyYXRlZEN1cnJlbmN5OiEwLGF2ZXJhZ2U6ITB9LGZv''@;'; put 'put ''cm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29E''@;'; put 'put ''ZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KFUpO3ZhciBXPVUuZXhwb3J0cyxZ''@;'; put 'put ''PXtleHBvcnRzOnt9fTshZnVuY3Rpb24oaXIseGEpe2lyLmV4cG9ydHM9ZnVuY3Rpb24gdWkoVnQpe3JldHVybiBWdCYmVnQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFZ0LCJkZWZhdWx0Iik/VnQuZGVmYXVsdDpWdH0oe2xhbmd1YWdlVGFnOiJl''@;'; put 'put ''bCIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIuIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6Ilx1MDNjNyIsbWlsbGlvbjoiXHUwM2I1IixiaWxsaW9uOiJcdTAzYjQiLHRyaWxsaW9uOiJcdTAzYzQifSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0dXJuIi4ifSxjdXJyZW5j''@;'; put 'put ''eTp7c3ltYm9sOiJcdTIwYWMiLGNvZGU6IkVVUiJ9fSl9KFkpO3ZhciBxPVkuZXhwb3J0cyxlZT17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKGlyLHhhKXtpci5leHBvcnRzPWZ1bmN0aW9uIHVpKFZ0KXtyZXR1cm4gVnQmJlZ0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJv''@;'; put 'put ''cGVydHkuY2FsbChWdCwiZGVmYXVsdCIpP1Z0LmRlZmF1bHQ6VnR9KHtsYW5ndWFnZVRhZzoiZW4tQVUiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLCIsZGVjaW1hbDoiLiJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJrIixtaWxsaW9uOiJtIixiaWxsaW9uOiJiIix0cmlsbGlvbjoidCJ9''@;'; put 'put ''LG9yZGluYWw6VnQ9PntsZXQgSnI9VnQlMTA7cmV0dXJuIDE9PX5+KFZ0JTEwMC8xMCk/InRoIjoxPT09SnI/InN0IjoyPT09SnI/Im5kIjozPT09SnI/InJkIjoidGgifSxjdXJyZW5jeTp7c3ltYm9sOiIkIixwb3NpdGlvbjoicHJlZml4Iixjb2RlOiJBVUQifSxjdXJyZW5jeUZvcm1hdDp7''@;'; put 'put ''dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxzcGFjZVNlcGFyYXRlZEN1cnJlbmN5OiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhU''@;'; put 'put ''d29EZWNpbWFsczp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6Mn0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsdGhvdXNhbmRTZXBhcmF0ZWQ6''@;'; put 'put ''ITAsbWFudGlzc2E6MH19fSl9KGVlKTt2YXIgSj1lZS5leHBvcnRzLG5lPXtleHBvcnRzOnt9fTshZnVuY3Rpb24oaXIseGEpe2lyLmV4cG9ydHM9ZnVuY3Rpb24gdWkoVnQpe3JldHVybiBWdCYmVnQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFZ0''@;'; put 'put ''LCJkZWZhdWx0Iik/VnQuZGVmYXVsdDpWdH0oe2xhbmd1YWdlVGFnOiJlbi1HQiIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIsIixkZWNpbWFsOiIuIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6ImsiLG1pbGxpb246Im0iLGJpbGxpb246ImIiLHRyaWxsaW9uOiJ0In0sb3JkaW5hbDpWdD0+''@;'; put 'put ''e2xldCBKcj1WdCUxMDtyZXR1cm4gMT09fn4oVnQlMTAwLzEwKT8idGgiOjE9PT1Kcj8ic3QiOjI9PT1Kcj8ibmQiOjM9PT1Kcj8icmQiOiJ0aCJ9LGN1cnJlbmN5OntzeW1ib2w6Ilx4YTMiLHBvc2l0aW9uOiJwcmVmaXgiLGNvZGU6IkdCUCJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNl''@;'; put 'put ''cGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiExLHNwYWNlU2VwYXJhdGVkQ3VycmVuY3k6ITEsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMSxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxz''@;'; put 'put ''OntvdXRwdXQ6ImN1cnJlbmN5Iix0aG91c2FuZFNlcGFyYXRlZDohMCxzcGFjZVNlcGFyYXRlZDohMSxtYW50aXNzYToyfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1''@;'; put 'put ''cnJlbmN5Iix0aG91c2FuZFNlcGFyYXRlZDohMCxzcGFjZVNlcGFyYXRlZDohMSxtYW50aXNzYTowfX19KX0obmUpO3ZhciBpZT1uZS5leHBvcnRzLGxlPXtleHBvcnRzOnt9fTshZnVuY3Rpb24oaXIseGEpe2lyLmV4cG9ydHM9ZnVuY3Rpb24gdWkoVnQpe3JldHVybiBWdCYmVnQuX19lc01v''@;'; put 'put ''ZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFZ0LCJkZWZhdWx0Iik/VnQuZGVmYXVsdDpWdH0oe2xhbmd1YWdlVGFnOiJlbi1JRSIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIsIixkZWNpbWFsOiIuIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6ImsiLG1pbGxp''@;'; put 'put ''b246Im0iLGJpbGxpb246ImIiLHRyaWxsaW9uOiJ0In0sb3JkaW5hbDpWdD0+e2xldCBKcj1WdCUxMDtyZXR1cm4gMT09fn4oVnQlMTAwLzEwKT8idGgiOjE9PT1Kcj8ic3QiOjI9PT1Kcj8ibmQiOjM9PT1Kcj8icmQiOiJ0aCJ9LGN1cnJlbmN5OntzeW1ib2w6Ilx1MjBhYyIscG9zaXRpb246''@;'; put 'put ''InByZWZpeCIsY29kZToiRVVSIn19KX0obGUpO3ZhciBtZT1sZS5leHBvcnRzLF9lPXtleHBvcnRzOnt9fTshZnVuY3Rpb24oaXIseGEpe2lyLmV4cG9ydHM9ZnVuY3Rpb24gdWkoVnQpe3JldHVybiBWdCYmVnQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5j''@;'; put 'put ''YWxsKFZ0LCJkZWZhdWx0Iik/VnQuZGVmYXVsdDpWdH0oe2xhbmd1YWdlVGFnOiJlbi1OWiIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIsIixkZWNpbWFsOiIuIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6ImsiLG1pbGxpb246Im0iLGJpbGxpb246ImIiLHRyaWxsaW9uOiJ0In0sb3JkaW5h''@;'; put 'put ''bDpWdD0+e2xldCBKcj1WdCUxMDtyZXR1cm4gMT09fn4oVnQlMTAwLzEwKT8idGgiOjE9PT1Kcj8ic3QiOjI9PT1Kcj8ibmQiOjM9PT1Kcj8icmQiOiJ0aCJ9LGN1cnJlbmN5OntzeW1ib2w6IiQiLHBvc2l0aW9uOiJwcmVmaXgiLGNvZGU6Ik5aRCJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2Fu''@;'; put 'put ''ZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLHNwYWNlU2VwYXJhdGVkQ3VycmVuY3k6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2lt''@;'; put 'put ''YWxzOnt0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYToyfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5Iix0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50''@;'; put 'put ''aXNzYTowfX19KX0oX2UpO3ZhciBUZT1fZS5leHBvcnRzLFNlPXtleHBvcnRzOnt9fTshZnVuY3Rpb24oaXIseGEpe2lyLmV4cG9ydHM9ZnVuY3Rpb24gdWkoVnQpe3JldHVybiBWdCYmVnQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFZ0LCJkZWZh''@;'; put 'put ''dWx0Iik/VnQuZGVmYXVsdDpWdH0oe2xhbmd1YWdlVGFnOiJlbi1aQSIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIgIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6ImsiLG1pbGxpb246Im0iLGJpbGxpb246ImIiLHRyaWxsaW9uOiJ0In0sb3JkaW5hbDpWdD0+e2xldCBK''@;'; put 'put ''cj1WdCUxMDtyZXR1cm4gMT09fn4oVnQlMTAwLzEwKT8idGgiOjE9PT1Kcj8ic3QiOjI9PT1Kcj8ibmQiOjM9PT1Kcj8icmQiOiJ0aCJ9LGN1cnJlbmN5OntzeW1ib2w6IlIiLHBvc2l0aW9uOiJwcmVmaXgiLGNvZGU6IlpBUiJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDoh''@;'; put 'put ''MCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLHNwYWNlU2VwYXJhdGVkQ3VycmVuY3k6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOnt0aG91c2Fu''@;'; put 'put ''ZFNlcGFyYXRlZDohMCxtYW50aXNzYToyfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5Iix0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19KX0o''@;'; put 'put ''U2UpO3ZhciBqZT1TZS5leHBvcnRzLFY9e2V4cG9ydHM6e319OyFmdW5jdGlvbihpcix4YSl7aXIuZXhwb3J0cz1mdW5jdGlvbiB1aShWdCl7cmV0dXJuIFZ0JiZWdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVnQsImRlZmF1bHQiKT9WdC5kZWZh''@;'; put 'put ''dWx0OlZ0fSh7bGFuZ3VhZ2VUYWc6ImVzLUFSIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6Ii4iLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiayIsbWlsbGlvbjoibW0iLGJpbGxpb246ImIiLHRyaWxsaW9uOiJ0In0sb3JkaW5hbDpWdD0+e2xldCBKcj1WdCUxMDtyZXR1''@;'; put 'put ''cm4gMT09PUpyfHwzPT09SnI/ImVyIjoyPT09SnI/ImRvIjo3PT09SnJ8fDA9PT1Kcj8ibW8iOjg9PT1Kcj8idm8iOjk9PT1Kcj8ibm8iOiJ0byJ9LGN1cnJlbmN5OntzeW1ib2w6IiQiLHBvc2l0aW9uOiJwb3N0Zml4Iixjb2RlOiJBUlMifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBh''@;'; put 'put ''cmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxzcGFjZVNlcGFyYXRlZEN1cnJlbmN5OiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7''@;'; put 'put ''b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJy''@;'; put 'put ''ZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KFYpO3ZhciBwPVYuZXhwb3J0cyxiPXtleHBvcnRzOnt9fTshZnVuY3Rpb24oaXIseGEpe2lyLmV4cG9ydHM9ZnVuY3Rpb24gdWkoVnQpe3JldHVybiBWdCYmVnQuX19lc01vZHVsZSYm''@;'; put 'put ''T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFZ0LCJkZWZhdWx0Iik/VnQuZGVmYXVsdDpWdH0oe2xhbmd1YWdlVGFnOiJlcy1DTCIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIuIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6ImsiLG1pbGxpb246Im1t''@;'; put 'put ''IixiaWxsaW9uOiJiIix0cmlsbGlvbjoidCJ9LG9yZGluYWw6VnQ9PntsZXQgSnI9VnQlMTA7cmV0dXJuIDE9PT1Kcnx8Mz09PUpyPyJlciI6Mj09PUpyPyJkbyI6Nz09PUpyfHwwPT09SnI/Im1vIjo4PT09SnI/InZvIjo5PT09SnI/Im5vIjoidG8ifSxjdXJyZW5jeTp7c3ltYm9sOiIkIixw''@;'; put 'put ''b3NpdGlvbjoicHJlZml4Iixjb2RlOiJDTFAifSxjdXJyZW5jeUZvcm1hdDp7b3V0cHV0OiJjdXJyZW5jeSIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNp''@;'; put 'put ''bWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0''@;'; put 'put ''OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KGIpO3ZhciB4PWIuZXhwb3J0cyxDPXtleHBvcnRzOnt9fTshZnVuY3Rpb24oaXIseGEpe2lyLmV4cG9ydHM9ZnVuY3Rpb24gdWkoVnQpe3JldHVybiBWdCYmVnQuX19lc01v''@;'; put 'put ''ZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFZ0LCJkZWZhdWx0Iik/VnQuZGVmYXVsdDpWdH0oe2xhbmd1YWdlVGFnOiJlcy1DTyIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIuIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6ImsiLG1pbGxp''@;'; put 'put ''b246Im1tIixiaWxsaW9uOiJiIix0cmlsbGlvbjoidCJ9LG9yZGluYWw6VnQ9PntsZXQgSnI9VnQlMTA7cmV0dXJuIDE9PT1Kcnx8Mz09PUpyPyJlciI6Mj09PUpyPyJkbyI6Nz09PUpyfHwwPT09SnI/Im1vIjo4PT09SnI/InZvIjo5PT09SnI/Im5vIjoidG8ifSxjdXJyZW5jeTp7c3ltYm9s''@;'; put 'put ''OiJcdTIwYWMiLHBvc2l0aW9uOiJwb3N0Zml4Iixjb2RlOiJFVVIifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2Vw''@;'; put 'put ''YXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2Vw''@;'; put 'put ''YXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfShDKTt2YXIgVD1DLmV4cG9ydHMsSD17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKGlyLHhhKXtpci5leHBvcnRz''@;'; put 'put ''PWZ1bmN0aW9uIHVpKFZ0KXtyZXR1cm4gVnQmJlZ0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChWdCwiZGVmYXVsdCIpP1Z0LmRlZmF1bHQ6VnR9KHtsYW5ndWFnZVRhZzoiZXMtQ1IiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiICIsZGVjaW1hbDoi''@;'; put 'put ''LCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJrIixtaWxsaW9uOiJtbSIsYmlsbGlvbjoiYiIsdHJpbGxpb246InQifSxvcmRpbmFsOlZ0PT57bGV0IEpyPVZ0JTEwO3JldHVybiAxPT09SnJ8fDM9PT1Kcj8iZXIiOjI9PT1Kcj8iZG8iOjc9PT1Kcnx8MD09PUpyPyJtbyI6OD09PUpyPyJ2''@;'; put 'put ''byI6OT09PUpyPyJubyI6InRvIn0sY3VycmVuY3k6e3N5bWJvbDoiXHUyMGExIixwb3NpdGlvbjoicG9zdGZpeCIsY29kZToiQ1JDIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsc3BhY2VTZXBhcmF0ZWRDdXJy''@;'; put 'put ''ZW5jeTohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBh''@;'; put 'put ''cmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0p''@;'; put 'put ''fShIKTt2YXIgaj1ILmV4cG9ydHMsRT17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKGlyLHhhKXtpci5leHBvcnRzPWZ1bmN0aW9uIHVpKFZ0KXtyZXR1cm4gVnQmJlZ0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChWdCwiZGVmYXVsdCIpP1Z0LmRlZmF1''@;'; put 'put ''bHQ6VnR9KHtsYW5ndWFnZVRhZzoiZXMtRVMiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLiIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJrIixtaWxsaW9uOiJtbSIsYmlsbGlvbjoiYiIsdHJpbGxpb246InQifSxvcmRpbmFsOlZ0PT57bGV0IEpyPVZ0JTEwO3JldHVy''@;'; put 'put ''biAxPT09SnJ8fDM9PT1Kcj8iZXIiOjI9PT1Kcj8iZG8iOjc9PT1Kcnx8MD09PUpyPyJtbyI6OD09PUpyPyJ2byI6OT09PUpyPyJubyI6InRvIn0sY3VycmVuY3k6e3N5bWJvbDoiXHUyMGFjIixwb3NpdGlvbjoicG9zdGZpeCIsY29kZToiRVVSIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5k''@;'; put 'put ''U2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsc3BhY2VTZXBhcmF0ZWRDdXJyZW5jeTohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1h''@;'; put 'put ''bHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoi''@;'; put 'put ''Y3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfShFKTt2YXIgbT1FLmV4cG9ydHMsQT17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKGlyLHhhKXtpci5leHBvcnRzPWZ1bmN0aW9uIHVpKFZ0KXtyZXR1cm4gVnQmJlZ0Ll9fZXNNb2R1''@;'; put 'put ''bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChWdCwiZGVmYXVsdCIpP1Z0LmRlZmF1bHQ6VnR9KHtsYW5ndWFnZVRhZzoiZXMtTVgiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLCIsZGVjaW1hbDoiLiJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJrIixtaWxsaW9u''@;'; put 'put ''OiJtbSIsYmlsbGlvbjoiYiIsdHJpbGxpb246InQifSxvcmRpbmFsOmZ1bmN0aW9uKFZ0KXtsZXQgSnI9VnQlMTA7cmV0dXJuIDE9PT1Kcnx8Mz09PUpyPyJlciI6Mj09PUpyPyJkbyI6Nz09PUpyfHwwPT09SnI/Im1vIjo4PT09SnI/InZvIjo5PT09SnI/Im5vIjoidG8ifSxjdXJyZW5jeTp7''@;'; put 'put ''c3ltYm9sOiIkIixwb3NpdGlvbjoicG9zdGZpeCIsY29kZToiTVhOIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNl''@;'; put 'put ''cGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNl''@;'; put 'put ''cGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19KX0oQSk7dmFyIGFlPUEuZXhwb3J0cyx0ZT17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKGlyLHhhKXtpci5leHBv''@;'; put 'put ''cnRzPWZ1bmN0aW9uIHVpKFZ0KXtyZXR1cm4gVnQmJlZ0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChWdCwiZGVmYXVsdCIpP1Z0LmRlZmF1bHQ6VnR9KHtsYW5ndWFnZVRhZzoiZXMtTkkiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLCIsZGVjaW1h''@;'; put 'put ''bDoiLiJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJrIixtaWxsaW9uOiJtbSIsYmlsbGlvbjoiYiIsdHJpbGxpb246InQifSxvcmRpbmFsOlZ0PT57bGV0IEpyPVZ0JTEwO3JldHVybiAxPT09SnJ8fDM9PT1Kcj8iZXIiOjI9PT1Kcj8iZG8iOjc9PT1Kcnx8MD09PUpyPyJtbyI6OD09PUpy''@;'; put 'put ''PyJ2byI6OT09PUpyPyJubyI6InRvIn0sY3VycmVuY3k6e3N5bWJvbDoiQyQiLHBvc2l0aW9uOiJwcmVmaXgiLGNvZGU6Ik5JTyJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLHNwYWNlU2VwYXJhdGVkQ3VycmVu''@;'; put 'put ''Y3k6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJh''@;'; put 'put ''dGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19KX0o''@;'; put 'put ''dGUpO3ZhciBzZT10ZS5leHBvcnRzLHdlPXtleHBvcnRzOnt9fTshZnVuY3Rpb24oaXIseGEpe2lyLmV4cG9ydHM9ZnVuY3Rpb24gdWkoVnQpe3JldHVybiBWdCYmVnQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFZ0LCJkZWZhdWx0Iik/VnQuZGVm''@;'; put 'put ''YXVsdDpWdH0oe2xhbmd1YWdlVGFnOiJlcy1QRSIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIsIixkZWNpbWFsOiIuIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6ImsiLG1pbGxpb246Im1tIixiaWxsaW9uOiJiIix0cmlsbGlvbjoidCJ9LG9yZGluYWw6VnQ9PntsZXQgSnI9VnQlMTA7cmV0''@;'; put 'put ''dXJuIDE9PT1Kcnx8Mz09PUpyPyJlciI6Mj09PUpyPyJkbyI6Nz09PUpyfHwwPT09SnI/Im1vIjo4PT09SnI/InZvIjo5PT09SnI/Im5vIjoidG8ifSxjdXJyZW5jeTp7c3ltYm9sOiJTLy4iLHBvc2l0aW9uOiJwcmVmaXgiLGNvZGU6IlBFTiJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNl''@;'; put 'put ''cGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLHNwYWNlU2VwYXJhdGVkQ3VycmVuY3k6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxz''@;'; put 'put ''OntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1''@;'; put 'put ''cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19KX0od2UpO3ZhciBVZT13ZS5leHBvcnRzLEplPXtleHBvcnRzOnt9fTshZnVuY3Rpb24oaXIseGEpe2lyLmV4cG9ydHM9ZnVuY3Rpb24gdWkoVnQpe3JldHVybiBWdCYmVnQuX19lc01v''@;'; put 'put ''ZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFZ0LCJkZWZhdWx0Iik/VnQuZGVmYXVsdDpWdH0oe2xhbmd1YWdlVGFnOiJlcy1QUiIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIsIixkZWNpbWFsOiIuIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6ImsiLG1pbGxp''@;'; put 'put ''b246Im1tIixiaWxsaW9uOiJiIix0cmlsbGlvbjoidCJ9LG9yZGluYWw6VnQ9PntsZXQgSnI9VnQlMTA7cmV0dXJuIDE9PT1Kcnx8Mz09PUpyPyJlciI6Mj09PUpyPyJkbyI6Nz09PUpyfHwwPT09SnI/Im1vIjo4PT09SnI/InZvIjo5PT09SnI/Im5vIjoidG8ifSxjdXJyZW5jeTp7c3ltYm9s''@;'; put 'put ''OiIkIixwb3NpdGlvbjoicHJlZml4Iixjb2RlOiJVU0QifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxzcGFjZVNlcGFyYXRlZEN1cnJlbmN5OiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3Rv''@;'; put 'put ''dGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21h''@;'; put 'put ''bnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KEplKTt2YXIgb3Q9SmUuZXhwb3J0cyx4ZT17ZXhwb3J0czp7fX07IWZ1''@;'; put 'put ''bmN0aW9uKGlyLHhhKXtpci5leHBvcnRzPWZ1bmN0aW9uIHVpKFZ0KXtyZXR1cm4gVnQmJlZ0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChWdCwiZGVmYXVsdCIpP1Z0LmRlZmF1bHQ6VnR9KHtsYW5ndWFnZVRhZzoiZXMtU1YiLGRlbGltaXRlcnM6''@;'; put 'put ''e3Rob3VzYW5kczoiLCIsZGVjaW1hbDoiLiJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJrIixtaWxsaW9uOiJtbSIsYmlsbGlvbjoiYiIsdHJpbGxpb246InQifSxvcmRpbmFsOlZ0PT57bGV0IEpyPVZ0JTEwO3JldHVybiAxPT09SnJ8fDM9PT1Kcj8iZXIiOjI9PT1Kcj8iZG8iOjc9PT1K''@;'; put 'put ''cnx8MD09PUpyPyJtbyI6OD09PUpyPyJ2byI6OT09PUpyPyJubyI6InRvIn0sY3VycmVuY3k6e3N5bWJvbDoiJCIscG9zaXRpb246InByZWZpeCIsY29kZToiU1ZDIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAs''@;'; put 'put ''c3BhY2VTZXBhcmF0ZWRDdXJyZW5jeTohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0''@;'; put 'put ''ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVk''@;'; put 'put ''OiEwLG1hbnRpc3NhOjB9fX0pfSh4ZSk7dmFyIHZlPXhlLmV4cG9ydHMsWGU9e2V4cG9ydHM6e319OyFmdW5jdGlvbihpcix4YSl7aXIuZXhwb3J0cz1mdW5jdGlvbiB1aShWdCl7cmV0dXJuIFZ0JiZWdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwo''@;'; put 'put ''VnQsImRlZmF1bHQiKT9WdC5kZWZhdWx0OlZ0fSh7bGFuZ3VhZ2VUYWc6ImV0LUVFIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiAiLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoidHVoIixtaWxsaW9uOiJtbG4iLGJpbGxpb246Im1sZCIsdHJpbGxpb246InRybCJ9LG9y''@;'; put 'put ''ZGluYWw6ZnVuY3Rpb24oKXtyZXR1cm4iLiJ9LGN1cnJlbmN5OntzeW1ib2w6Ilx1MjBhYyIscG9zaXRpb246InBvc3RmaXgiLGNvZGU6IkVVUiJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLHNwYWNlU2VwYXJh''@;'; put 'put ''dGVkQ3VycmVuY3k6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3Vz''@;'; put 'put ''YW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNz''@;'; put 'put ''YTowfX19KX0oWGUpO3ZhciB6ZT1YZS5leHBvcnRzLERlPXtleHBvcnRzOnt9fTshZnVuY3Rpb24oaXIseGEpe2lyLmV4cG9ydHM9ZnVuY3Rpb24gdWkoVnQpe3JldHVybiBWdCYmVnQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFZ0LCJkZWZhdWx0''@;'; put 'put ''Iik/VnQuZGVmYXVsdDpWdH0oe2xhbmd1YWdlVGFnOiJmYS1JUiIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiJcdTA2MGMiLGRlY2ltYWw6Ii4ifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiXHUwNjQ3XHUwNjMyXHUwNjI3XHUwNjMxIixtaWxsaW9uOiJcdTA2NDVcdTA2Y2NcdTA2NDRcdTA2''@;'; put 'put ''Y2NcdTA2NDhcdTA2NDYiLGJpbGxpb246Ilx1MDY0NVx1MDZjY1x1MDY0NFx1MDZjY1x1MDYyN1x1MDYzMVx1MDYyZiIsdHJpbGxpb246Ilx1MDYyYVx1MDYzMVx1MDZjY1x1MDY0NFx1MDZjY1x1MDY0OFx1MDY0NiJ9LG9yZGluYWw6ZnVuY3Rpb24oKXtyZXR1cm4iXHUwNjI3XHUwNjQ1In0s''@;'; put 'put ''Y3VycmVuY3k6e3N5bWJvbDoiXHVmZGZjIixjb2RlOiJJUlIifX0pfShEZSk7dmFyIEZlPURlLmV4cG9ydHMsT2U9e2V4cG9ydHM6e319OyFmdW5jdGlvbihpcix4YSl7aXIuZXhwb3J0cz1mdW5jdGlvbiB1aShWdCl7cmV0dXJuIFZ0JiZWdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBl''@;'; put 'put ''Lmhhc093blByb3BlcnR5LmNhbGwoVnQsImRlZmF1bHQiKT9WdC5kZWZhdWx0OlZ0fSh7bGFuZ3VhZ2VUYWc6ImZpLUZJIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiAiLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiayIsbWlsbGlvbjoiTSIsYmlsbGlvbjoiRyIsdHJp''@;'; put 'put ''bGxpb246IlQifSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0dXJuIi4ifSxjdXJyZW5jeTp7c3ltYm9sOiJcdTIwYWMiLHBvc2l0aW9uOiJwb3N0Zml4Iixjb2RlOiJFVVIifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDoh''@;'; put 'put ''MCxzcGFjZVNlcGFyYXRlZEN1cnJlbmN5OiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFy''@;'; put 'put ''YXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0''@;'; put 'put ''ZWQ6ITAsbWFudGlzc2E6MH19fSl9KE9lKTt2YXIgSWU9T2UuZXhwb3J0cyxWZT17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKGlyLHhhKXtpci5leHBvcnRzPWZ1bmN0aW9uIHVpKFZ0KXtyZXR1cm4gVnQmJlZ0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2Fs''@;'; put 'put ''bChWdCwiZGVmYXVsdCIpP1Z0LmRlZmF1bHQ6VnR9KHtsYW5ndWFnZVRhZzoiZmlsLVBIIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiwiLGRlY2ltYWw6Ii4ifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiayIsbWlsbGlvbjoibSIsYmlsbGlvbjoiYiIsdHJpbGxpb246InQifSxvcmRpbmFs''@;'; put 'put ''OlZ0PT57bGV0IEpyPVZ0JTEwO3JldHVybiAxPT1+fihWdCUxMDAvMTApPyJ0aCI6MT09PUpyPyJzdCI6Mj09PUpyPyJuZCI6Mz09PUpyPyJyZCI6InRoIn0sY3VycmVuY3k6e3N5bWJvbDoiXHUyMGIxIixjb2RlOiJQSFAifX0pfShWZSk7dmFyIGtlPVZlLmV4cG9ydHMsQWU9e2V4cG9ydHM6''@;'; put 'put ''e319OyFmdW5jdGlvbihpcix4YSl7aXIuZXhwb3J0cz1mdW5jdGlvbiB1aShWdCl7cmV0dXJuIFZ0JiZWdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVnQsImRlZmF1bHQiKT9WdC5kZWZhdWx0OlZ0fSh7bGFuZ3VhZ2VUYWc6ImZyLUNBIixkZWxp''@;'; put 'put ''bWl0ZXJzOnt0aG91c2FuZHM6IiAiLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiayIsbWlsbGlvbjoiTSIsYmlsbGlvbjoiRyIsdHJpbGxpb246IlQifSxvcmRpbmFsOlZ0PT4xPT09VnQ/ImVyIjoiXHhlOG1lIixzcGFjZVNlcGFyYXRlZDohMCxjdXJyZW5jeTp7c3lt''@;'; put 'put ''Ym9sOiIkIixwb3NpdGlvbjoicG9zdGZpeCIsY29kZToiVVNEIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFy''@;'; put 'put ''YXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOnt0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYToyfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6''@;'; put 'put ''ImN1cnJlbmN5Iix0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19KX0oQWUpO3ZhciBfdD1BZS5leHBvcnRzLG50PXtleHBvcnRzOnt9fTshZnVuY3Rpb24oaXIseGEpe2lyLmV4cG9ydHM9ZnVuY3Rpb24gdWkoVnQpe3JldHVybiBWdCYmVnQuX19lc01vZHVsZSYmT2JqZWN0LnBy''@;'; put 'put ''b3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFZ0LCJkZWZhdWx0Iik/VnQuZGVmYXVsdDpWdH0oe2xhbmd1YWdlVGFnOiJmci1DSCIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIgIixkZWNpbWFsOiIuIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6ImsiLG1pbGxpb246Im0iLGJpbGxpb246''@;'; put 'put ''ImIiLHRyaWxsaW9uOiJ0In0sb3JkaW5hbDpWdD0+MT09PVZ0PyJlciI6Ilx4ZThtZSIsY3VycmVuY3k6e3N5bWJvbDoiQ0hGIixwb3NpdGlvbjoicG9zdGZpeCIsY29kZToiQ0hGIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBh''@;'; put 'put ''cmF0ZWQ6ITAsc3BhY2VTZXBhcmF0ZWRDdXJyZW5jeTohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3Bh''@;'; put 'put ''Y2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5k''@;'; put 'put ''U2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfShudCk7dmFyIFFlPW50LmV4cG9ydHMsdW49e2V4cG9ydHM6e319OyFmdW5jdGlvbihpcix4YSl7aXIuZXhwb3J0cz1mdW5jdGlvbiB1aShWdCl7cmV0dXJuIFZ0JiZWdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3Bl''@;'; put 'put ''cnR5LmNhbGwoVnQsImRlZmF1bHQiKT9WdC5kZWZhdWx0OlZ0fSh7bGFuZ3VhZ2VUYWc6ImZyLUZSIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiAiLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiayIsbWlsbGlvbjoiTSIsYmlsbGlvbjoiTXJkIix0cmlsbGlvbjoiYmls''@;'; put 'put ''bGlvbiJ9LG9yZGluYWw6VnQ9PjE9PT1WdD8iZXIiOiJceGU4bWUiLGJ5dGVzOntiaW5hcnlTdWZmaXhlczpbIm8iLCJLaW8iLCJNaW8iLCJHaW8iLCJUaW8iLCJQaW8iLCJFaW8iLCJaaW8iLCJZaW8iXSxkZWNpbWFsU3VmZml4ZXM6WyJvIiwiS28iLCJNbyIsIkdvIiwiVG8iLCJQbyIsIkVv''@;'; put 'put ''IiwiWm8iLCJZbyJdfSxjdXJyZW5jeTp7c3ltYm9sOiJcdTIwYWMiLHBvc2l0aW9uOiJwb3N0Zml4Iixjb2RlOiJFVVIifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxzcGFjZVNlcGFyYXRlZEN1cnJlbmN5OiEw''@;'; put 'put ''LGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDoh''@;'; put 'put ''MH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KHVuKTt2''@;'; put 'put ''YXIgeXQ9dW4uZXhwb3J0cyxNdD17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKGlyLHhhKXtpci5leHBvcnRzPWZ1bmN0aW9uIHVpKFZ0KXtyZXR1cm4gVnQmJlZ0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChWdCwiZGVmYXVsdCIpP1Z0LmRlZmF1bHQ6''@;'; put 'put ''VnR9KHtsYW5ndWFnZVRhZzoiaGUtSUwiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLCIsZGVjaW1hbDoiLiJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJcdTA1ZDBcdTA1ZGNcdTA1ZTMiLG1pbGxpb246Ilx1MDVkZVx1MDVkOVx1MDVkY1x1MDVkOVx1MDVkNVx1MDVkZiIsYmlsbGlvbjoi''@;'; put 'put ''XHUwNWRlXHUwNWQ5XHUwNWRjXHUwNWQ5XHUwNWQwXHUwNWU4XHUwNWQzIix0cmlsbGlvbjoiXHUwNWQ4XHUwNWU4XHUwNWQ5XHUwNWRjXHUwNWQ5XHUwNWQ1XHUwNWRmIn0sY3VycmVuY3k6e3N5bWJvbDoiXHUyMGFhIixwb3NpdGlvbjoicHJlZml4Iixjb2RlOiJJTFMifSxvcmRpbmFsOigp''@;'; put 'put ''PT4iIixjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxzcGFjZVNlcGFyYXRlZEN1cnJlbmN5OiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAs''@;'; put 'put ''YXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9''@;'; put 'put ''LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KE10KTt2YXIgRHQ9TXQuZXhwb3J0cyxpdD17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKGlyLHhhKXtpci5leHBvcnRzPWZ1bmN0''@;'; put 'put ''aW9uIHVpKFZ0KXtyZXR1cm4gVnQmJlZ0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChWdCwiZGVmYXVsdCIpP1Z0LmRlZmF1bHQ6VnR9KHtsYW5ndWFnZVRhZzoiaHUtSFUiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiICIsZGVjaW1hbDoiLCJ9LGFi''@;'; put 'put ''YnJldmlhdGlvbnM6e3Rob3VzYW5kOiJFIixtaWxsaW9uOiJNIixiaWxsaW9uOiJNcmQiLHRyaWxsaW9uOiJUIn0sb3JkaW5hbDpmdW5jdGlvbigpe3JldHVybiIuIn0sY3VycmVuY3k6e3N5bWJvbDoiRnQiLHBvc2l0aW9uOiJwb3N0Zml4Iixjb2RlOiJIVUYifSxjdXJyZW5jeUZvcm1hdDp7''@;'; put 'put ''dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxzcGFjZVNlcGFyYXRlZEN1cnJlbmN5OiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhU''@;'; put 'put ''d29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7''@;'; put 'put ''b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KGl0KTt2YXIgJGU9aXQuZXhwb3J0cyx0dD17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKGlyLHhhKXtpci5leHBvcnRzPWZ1bmN0aW9uIHVpKFZ0KXtyZXR1cm4gVnQm''@;'; put 'put ''JlZ0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChWdCwiZGVmYXVsdCIpP1Z0LmRlZmF1bHQ6VnR9KHtsYW5ndWFnZVRhZzoiaWQiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLiIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJy''@;'; put 'put ''IixtaWxsaW9uOiJqIixiaWxsaW9uOiJtIix0cmlsbGlvbjoidCJ9LG9yZGluYWw6ZnVuY3Rpb24oKXtyZXR1cm4iLiJ9LGN1cnJlbmN5OntzeW1ib2w6IlJwIixjb2RlOiJJRFIifX0pfSh0dCk7dmFyIEhlPXR0LmV4cG9ydHMsdXQ9e2V4cG9ydHM6e319OyFmdW5jdGlvbihpcix4YSl7aXIu''@;'; put 'put ''ZXhwb3J0cz1mdW5jdGlvbiB1aShWdCl7cmV0dXJuIFZ0JiZWdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVnQsImRlZmF1bHQiKT9WdC5kZWZhdWx0OlZ0fSh7bGFuZ3VhZ2VUYWc6Iml0LUNIIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiciLGRl''@;'; put 'put ''Y2ltYWw6Ii4ifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoibWlsYSIsbWlsbGlvbjoibWlsIixiaWxsaW9uOiJiIix0cmlsbGlvbjoidCJ9LG9yZGluYWw6ZnVuY3Rpb24oKXtyZXR1cm4iXHhiMCJ9LGN1cnJlbmN5OntzeW1ib2w6IkNIRiIsY29kZToiQ0hGIn19KX0odXQpO3ZhciBxdD11''@;'; put 'put ''dC5leHBvcnRzLFJ0PXtleHBvcnRzOnt9fTshZnVuY3Rpb24oaXIseGEpe2lyLmV4cG9ydHM9ZnVuY3Rpb24gdWkoVnQpe3JldHVybiBWdCYmVnQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFZ0LCJkZWZhdWx0Iik/VnQuZGVmYXVsdDpWdH0oe2xh''@;'; put 'put ''bmd1YWdlVGFnOiJpdC1JVCIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIuIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6Im1pbGEiLG1pbGxpb246Im1pbCIsYmlsbGlvbjoiYiIsdHJpbGxpb246InQifSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0dXJuIlx4YmEifSxjdXJy''@;'; put 'put ''ZW5jeTp7c3ltYm9sOiJcdTIwYWMiLHBvc2l0aW9uOiJwb3N0Zml4Iixjb2RlOiJFVVIifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxzcGFjZVNlcGFyYXRlZEN1cnJlbmN5OiEwLGF2ZXJhZ2U6ITB9LGZvcm1h''@;'; put 'put ''dHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNp''@;'; put 'put ''bWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KFJ0KTt2YXIgUHQ9UnQuZXhwb3J0cyxj''@;'; put 'put ''aT17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKGlyLHhhKXtpci5leHBvcnRzPWZ1bmN0aW9uIHVpKFZ0KXtyZXR1cm4gVnQmJlZ0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChWdCwiZGVmYXVsdCIpP1Z0LmRlZmF1bHQ6VnR9KHtsYW5ndWFnZVRhZzoi''@;'; put 'put ''amEtSlAiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLCIsZGVjaW1hbDoiLiJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJcdTUzNDMiLG1pbGxpb246Ilx1NzY3ZVx1NGUwNyIsYmlsbGlvbjoiXHU1MzQxXHU1MTA0Iix0cmlsbGlvbjoiXHU1MTQ2In0sb3JkaW5hbDpmdW5jdGlvbigpe3Jl''@;'; put 'put ''dHVybiIuIn0sY3VycmVuY3k6e3N5bWJvbDoiXHhhNSIscG9zaXRpb246InByZWZpeCIsY29kZToiSlBZIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsc3BhY2VTZXBhcmF0ZWRDdXJyZW5jeTohMCxhdmVyYWdl''@;'; put 'put ''OiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjJ9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToy''@;'; put 'put ''LHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfShjaSk7dmFyIFF0PWNpLmV4cG9ydHMsc249e2V4cG9ydHM6e319OyFmdW5jdGlvbihpcix4YSl7aXIuZXhwb3J0cz1m''@;'; put 'put ''dW5jdGlvbiB1aShWdCl7cmV0dXJuIFZ0JiZWdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVnQsImRlZmF1bHQiKT9WdC5kZWZhdWx0OlZ0fSh7bGFuZ3VhZ2VUYWc6ImtvLUtSIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiwiLGRlY2ltYWw6Ii4i''@;'; put 'put ''fSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiXHVjYzljIixtaWxsaW9uOiJcdWJjMzFcdWI5Y2MiLGJpbGxpb246Ilx1YzJlZFx1YzViNSIsdHJpbGxpb246Ilx1Yzc3Y1x1Yzg3MCJ9LG9yZGluYWw6ZnVuY3Rpb24oKXtyZXR1cm4iLiJ9LGN1cnJlbmN5OntzeW1ib2w6Ilx1MjBhOSIsY29k''@;'; put 'put ''ZToiS1BXIn19KX0oc24pO3ZhciBSaT1zbi5leHBvcnRzLGhuPXtleHBvcnRzOnt9fTshZnVuY3Rpb24oaXIseGEpe2lyLmV4cG9ydHM9ZnVuY3Rpb24gdWkoVnQpe3JldHVybiBWdCYmVnQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFZ0LCJkZWZh''@;'; put 'put ''dWx0Iik/VnQuZGVmYXVsdDpWdH0oe2xhbmd1YWdlVGFnOiJsdi1MViIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIgIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6InRcdTAxNmJrc3QuIixtaWxsaW9uOiJtaWxqLiIsYmlsbGlvbjoibWxqcmQuIix0cmlsbGlvbjoidHJp''@;'; put 'put ''bGouIn0sb3JkaW5hbDpmdW5jdGlvbigpe3JldHVybiIuIn0sY3VycmVuY3k6e3N5bWJvbDoiXHUyMGFjIixwb3NpdGlvbjoicG9zdGZpeCIsY29kZToiRVVSIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsc3Bh''@;'; put 'put ''Y2VTZXBhcmF0ZWRDdXJyZW5jeTohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6''@;'; put 'put ''ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEw''@;'; put 'put ''LG1hbnRpc3NhOjB9fX0pfShobik7dmFyIGZ0PWhuLmV4cG9ydHMsT3I9e2V4cG9ydHM6e319OyFmdW5jdGlvbihpcix4YSl7aXIuZXhwb3J0cz1mdW5jdGlvbiB1aShWdCl7cmV0dXJuIFZ0JiZWdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVnQs''@;'; put 'put ''ImRlZmF1bHQiKT9WdC5kZWZhdWx0OlZ0fSh7bGFuZ3VhZ2VUYWc6Im5iLU5PIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiAiLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoidCIsbWlsbGlvbjoiTSIsYmlsbGlvbjoibWQiLHRyaWxsaW9uOiJiIn0sb3JkaW5hbDooKT0+''@;'; put 'put ''IiIsY3VycmVuY3k6e3N5bWJvbDoia3IiLHBvc2l0aW9uOiJwb3N0Zml4Iixjb2RlOiJOT0sifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxzcGFjZVNlcGFyYXRlZEN1cnJlbmN5OiEwLGF2ZXJhZ2U6ITB9LGZv''@;'; put 'put ''cm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29E''@;'; put 'put ''ZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KE9yKTt2YXIgV3Q9T3IuZXhwb3J0''@;'; put 'put ''cyxBdD17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKGlyLHhhKXtpci5leHBvcnRzPWZ1bmN0aW9uIHVpKFZ0KXtyZXR1cm4gVnQmJlZ0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChWdCwiZGVmYXVsdCIpP1Z0LmRlZmF1bHQ6VnR9KHtsYW5ndWFnZVRh''@;'; put 'put ''ZzoibmIiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiICIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJ0IixtaWxsaW9uOiJtaWwiLGJpbGxpb246Im1pYSIsdHJpbGxpb246ImIifSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0dXJuIi4ifSxjdXJyZW5jeTp7c3ltYm9sOiJr''@;'; put 'put ''ciIsY29kZToiTk9LIn19KX0oQXQpO3ZhciBSbj1BdC5leHBvcnRzLHN0PXtleHBvcnRzOnt9fTshZnVuY3Rpb24oaXIseGEpe2lyLmV4cG9ydHM9ZnVuY3Rpb24gdWkoVnQpe3JldHVybiBWdCYmVnQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFZ0''@;'; put 'put ''LCJkZWZhdWx0Iik/VnQuZGVmYXVsdDpWdH0oe2xhbmd1YWdlVGFnOiJubC1CRSIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIgIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6ImsiLG1pbGxpb246Im1sbiIsYmlsbGlvbjoibWxkIix0cmlsbGlvbjoiYmxuIn0sb3JkaW5h''@;'; put 'put ''bDpWdD0+e2xldCBKcj1WdCUxMDA7cmV0dXJuIDAhPT1WdCYmSnI8PTF8fDg9PT1Kcnx8SnI+PTIwPyJzdGUiOiJkZSJ9LGN1cnJlbmN5OntzeW1ib2w6Ilx1MjBhYyIscG9zaXRpb246InBvc3RmaXgiLGNvZGU6IkVVUiJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0''@;'; put 'put ''b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNl''@;'; put 'put ''cGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBh''@;'; put 'put ''cmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KHN0KTt2YXIgVXQ9c3QuZXhwb3J0cyxyaT17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKGlyLHhhKXtpci5leHBvcnRzPWZ1bmN0aW9uIHVpKFZ0KXtyZXR1cm4gVnQmJlZ0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHku''@;'; put 'put ''Y2FsbChWdCwiZGVmYXVsdCIpP1Z0LmRlZmF1bHQ6VnR9KHtsYW5ndWFnZVRhZzoibmwtTkwiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLiIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJrIixtaWxsaW9uOiJtbG4iLGJpbGxpb246Im1yZCIsdHJpbGxpb246ImJsbiJ9''@;'; put 'put ''LG9yZGluYWw6VnQ9PntsZXQgSnI9VnQlMTAwO3JldHVybiAwIT09VnQmJkpyPD0xfHw4PT09SnJ8fEpyPj0yMD8ic3RlIjoiZGUifSxjdXJyZW5jeTp7c3ltYm9sOiJcdTIwYWMiLHBvc2l0aW9uOiJwcmVmaXgiLGNvZGU6IkVVUiJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRl''@;'; put 'put ''ZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLHNwYWNlU2VwYXJhdGVkQ3VycmVuY3k6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRw''@;'; put 'put ''dXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5''@;'; put 'put ''IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19KX0ocmkpO3ZhciBXZT1yaS5leHBvcnRzLFR0PXtleHBvcnRzOnt9fTshZnVuY3Rpb24oaXIseGEpe2lyLmV4cG9ydHM9ZnVuY3Rpb24gdWkoVnQpe3JldHVybiBWdCYmVnQuX19lc01vZHVsZSYm''@;'; put 'put ''T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFZ0LCJkZWZhdWx0Iik/VnQuZGVmYXVsdDpWdH0oe2xhbmd1YWdlVGFnOiJubiIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIgIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6InQiLG1pbGxpb246Im1pbCIs''@;'; put 'put ''YmlsbGlvbjoibWlhIix0cmlsbGlvbjoiYiJ9LG9yZGluYWw6ZnVuY3Rpb24oKXtyZXR1cm4iLiJ9LGN1cnJlbmN5OntzeW1ib2w6ImtyIixjb2RlOiJOT0sifX0pfShUdCk7dmFyIG5yPVR0LmV4cG9ydHMsaHQ9e2V4cG9ydHM6e319OyFmdW5jdGlvbihpcix4YSl7aXIuZXhwb3J0cz1mdW5j''@;'; put 'put ''dGlvbiB1aShWdCl7cmV0dXJuIFZ0JiZWdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVnQsImRlZmF1bHQiKT9WdC5kZWZhdWx0OlZ0fSh7bGFuZ3VhZ2VUYWc6InBsLVBMIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiAiLGRlY2ltYWw6IiwifSxh''@;'; put 'put ''YmJyZXZpYXRpb25zOnt0aG91c2FuZDoidHlzLiIsbWlsbGlvbjoibWxuIixiaWxsaW9uOiJtbGQiLHRyaWxsaW9uOiJibG4ifSxvcmRpbmFsOigpPT4iLiIsY3VycmVuY3k6e3N5bWJvbDoiIHpcdTAxNDIiLHBvc2l0aW9uOiJwb3N0Zml4Iixjb2RlOiJQTE4ifSxjdXJyZW5jeUZvcm1hdDp7''@;'; put 'put ''dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxzcGFjZVNlcGFyYXRlZEN1cnJlbmN5OiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhU''@;'; put 'put ''d29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7''@;'; put 'put ''b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KGh0KTt2YXIgeHQ9aHQuZXhwb3J0cyxqbj17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKGlyLHhhKXtpci5leHBvcnRzPWZ1bmN0aW9uIHVpKFZ0KXtyZXR1cm4gVnQm''@;'; put 'put ''JlZ0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChWdCwiZGVmYXVsdCIpP1Z0LmRlZmF1bHQ6VnR9KHtsYW5ndWFnZVRhZzoicHQtQlIiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLiIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5k''@;'; put 'put ''OiJtaWwiLG1pbGxpb246Im1pbGhceGY1ZXMiLGJpbGxpb246ImIiLHRyaWxsaW9uOiJ0In0sb3JkaW5hbDpmdW5jdGlvbigpe3JldHVybiJceGJhIn0sY3VycmVuY3k6e3N5bWJvbDoiUiQiLHBvc2l0aW9uOiJwcmVmaXgiLGNvZGU6IkJSTCJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNl''@;'; put 'put ''cGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlz''@;'; put 'put ''c2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAs''@;'; put 'put ''dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KGpuKTt2YXIgcm49am4uZXhwb3J0cyx6dD17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKGlyLHhhKXtpci5leHBvcnRzPWZ1bmN0aW9uIHVpKFZ0KXtyZXR1cm4gVnQmJlZ0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFz''@;'; put 'put ''T3duUHJvcGVydHkuY2FsbChWdCwiZGVmYXVsdCIpP1Z0LmRlZmF1bHQ6VnR9KHtsYW5ndWFnZVRhZzoicHQtUFQiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiICIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJrIixtaWxsaW9uOiJtIixiaWxsaW9uOiJiIix0cmlsbGlv''@;'; put 'put ''bjoidCJ9LG9yZGluYWw6ZnVuY3Rpb24oKXtyZXR1cm4iXHhiYSJ9LGN1cnJlbmN5OntzeW1ib2w6Ilx1MjBhYyIscG9zaXRpb246InBvc3RmaXgiLGNvZGU6IkVVUiJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEw''@;'; put 'put ''LGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDoh''@;'; put 'put ''MH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KHp0KTt2''@;'; put 'put ''YXIgaGk9enQuZXhwb3J0cyxjbj17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKGlyLHhhKXtpci5leHBvcnRzPWZ1bmN0aW9uIHVpKFZ0KXtyZXR1cm4gVnQmJlZ0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChWdCwiZGVmYXVsdCIpP1Z0LmRlZmF1bHQ6''@;'; put 'put ''VnR9KHtsYW5ndWFnZVRhZzoicm8tUk8iLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLiIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJtaWkiLG1pbGxpb246Im1pbCIsYmlsbGlvbjoibWxkIix0cmlsbGlvbjoiYmxuIn0sb3JkaW5hbDpmdW5jdGlvbigpe3JldHVybiIu''@;'; put 'put ''In0sY3VycmVuY3k6e3N5bWJvbDoiIGxlaSIscG9zaXRpb246InBvc3RmaXgiLGNvZGU6IlJPTiJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLHNwYWNlU2VwYXJhdGVkQ3VycmVuY3k6ITAsYXZlcmFnZTohMH0s''@;'; put 'put ''Zm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3''@;'; put 'put ''b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19KX0oY24pO3ZhciBmbj1jbi5leHBv''@;'; put 'put ''cnRzLElpPXtleHBvcnRzOnt9fTshZnVuY3Rpb24oaXIseGEpe2lyLmV4cG9ydHM9ZnVuY3Rpb24gdWkoVnQpe3JldHVybiBWdCYmVnQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFZ0LCJkZWZhdWx0Iik/VnQuZGVmYXVsdDpWdH0oe2xhbmd1YWdl''@;'; put 'put ''VGFnOiJyby1STyIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIuIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6Im1paSIsbWlsbGlvbjoibWlsIixiaWxsaW9uOiJtbGQiLHRyaWxsaW9uOiJibG4ifSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0dXJuIi4ifSxjdXJyZW5jeTp7''@;'; put 'put ''c3ltYm9sOiIgbGVpIixwb3NpdGlvbjoicG9zdGZpeCIsY29kZToiUk9OIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsc3BhY2VTZXBhcmF0ZWRDdXJyZW5jeTohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3Vy''@;'; put 'put ''RGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1''@;'; put 'put ''cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfShJaSk7dmFyIFh0PUlpLmV4cG9ydHMsZW49e2V4cG9y''@;'; put 'put ''dHM6e319OyFmdW5jdGlvbihpcix4YSl7aXIuZXhwb3J0cz1mdW5jdGlvbiB1aShWdCl7cmV0dXJuIFZ0JiZWdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVnQsImRlZmF1bHQiKT9WdC5kZWZhdWx0OlZ0fSh7bGFuZ3VhZ2VUYWc6InJ1LVJVIixk''@;'; put 'put ''ZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiAiLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiXHUwNDQyXHUwNDRiXHUwNDQxLiIsbWlsbGlvbjoiXHUwNDNjXHUwNDNiXHUwNDNkIixiaWxsaW9uOiJiIix0cmlsbGlvbjoidCJ9LG9yZGluYWw6ZnVuY3Rpb24oKXtyZXR1cm4i''@;'; put 'put ''LiJ9LGN1cnJlbmN5OntzeW1ib2w6Ilx1MDQ0MFx1MDQ0M1x1MDQzMS4iLHBvc2l0aW9uOiJwb3N0Zml4Iixjb2RlOiJSVUIifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntm''@;'; put 'put ''b3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNO''@;'; put 'put ''b0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfShlbik7dmFyIHVhPWVuLmV4cG9ydHMsRWk9e2V4''@;'; put 'put ''cG9ydHM6e319OyFmdW5jdGlvbihpcix4YSl7aXIuZXhwb3J0cz1mdW5jdGlvbiB1aShWdCl7cmV0dXJuIFZ0JiZWdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVnQsImRlZmF1bHQiKT9WdC5kZWZhdWx0OlZ0fSh7bGFuZ3VhZ2VUYWc6InJ1LVVB''@;'; put 'put ''IixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiAiLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiXHUwNDQyXHUwNDRiXHUwNDQxLiIsbWlsbGlvbjoiXHUwNDNjXHUwNDNiXHUwNDNkIixiaWxsaW9uOiJiIix0cmlsbGlvbjoidCJ9LG9yZGluYWw6ZnVuY3Rpb24oKXtyZXR1''@;'; put 'put ''cm4iLiJ9LGN1cnJlbmN5OntzeW1ib2w6Ilx1MjBiNCIscG9zaXRpb246InBvc3RmaXgiLGNvZGU6IlVBSCJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6''@;'; put 'put ''e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6''@;'; put 'put ''e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KEVpKTt2YXIgdnI9RWkuZXhwb3J0cyxXbj17ZXhwb3J0czp7fX07''@;'; put 'put ''IWZ1bmN0aW9uKGlyLHhhKXtpci5leHBvcnRzPWZ1bmN0aW9uIHVpKFZ0KXtyZXR1cm4gVnQmJlZ0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChWdCwiZGVmYXVsdCIpP1Z0LmRlZmF1bHQ6VnR9KHtsYW5ndWFnZVRhZzoic2stU0siLGRlbGltaXRl''@;'; put 'put ''cnM6e3Rob3VzYW5kczoiXHhhMCIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJ0aXMuIixtaWxsaW9uOiJtaWwuIixiaWxsaW9uOiJtbGQuIix0cmlsbGlvbjoiYmlsLiJ9LG9yZGluYWw6ZnVuY3Rpb24oKXtyZXR1cm4iLiJ9LHNwYWNlU2VwYXJhdGVkOiEwLGN1cnJl''@;'; put 'put ''bmN5OntzeW1ib2w6Ilx1MjBhYyIscG9zaXRpb246InBvc3RmaXgiLGNvZGU6IkVVUiJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLHNwYWNlU2VwYXJhdGVkQ3VycmVuY3k6ITAsYXZlcmFnZTohMH0sZm9ybWF0''@;'; put 'put ''czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2lt''@;'; put 'put ''YWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19KX0oV24pO3ZhciAkaT1Xbi5leHBvcnRzLGVp''@;'; put 'put ''PXtleHBvcnRzOnt9fTshZnVuY3Rpb24oaXIseGEpe2lyLmV4cG9ydHM9ZnVuY3Rpb24gdWkoVnQpe3JldHVybiBWdCYmVnQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFZ0LCJkZWZhdWx0Iik/VnQuZGVmYXVsdDpWdH0oe2xhbmd1YWdlVGFnOiJz''@;'; put 'put ''bCIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIuIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6InRpcy4iLG1pbGxpb246Im1pbC4iLGJpbGxpb246ImIiLHRyaWxsaW9uOiJ0In0sb3JkaW5hbDpmdW5jdGlvbigpe3JldHVybiIuIn0sY3VycmVuY3k6e3N5bWJvbDoiXHUy''@;'; put 'put ''MGFjIixjb2RlOiJFVVIifX0pfShlaSk7dmFyIFFyPWVpLmV4cG9ydHMsVmk9e2V4cG9ydHM6e319OyFmdW5jdGlvbihpcix4YSl7aXIuZXhwb3J0cz1mdW5jdGlvbiB1aShWdCl7cmV0dXJuIFZ0JiZWdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwo''@;'; put 'put ''VnQsImRlZmF1bHQiKT9WdC5kZWZhdWx0OlZ0fSh7bGFuZ3VhZ2VUYWc6InNyLUN5cmwtUlMiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLiIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJcdTA0NDJcdTA0NGJcdTA0NDEuIixtaWxsaW9uOiJcdTA0M2NcdTA0M2JcdTA0''@;'; put 'put ''M2QiLGJpbGxpb246ImIiLHRyaWxsaW9uOiJ0In0sb3JkaW5hbDooKT0+Ii4iLGN1cnJlbmN5OntzeW1ib2w6IlJTRCIsY29kZToiUlNEIn19KX0oVmkpO3ZhciBOaT1WaS5leHBvcnRzLERhPXtleHBvcnRzOnt9fTshZnVuY3Rpb24oaXIseGEpe2lyLmV4cG9ydHM9ZnVuY3Rpb24gdWkoVnQp''@;'; put 'put ''e3JldHVybiBWdCYmVnQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFZ0LCJkZWZhdWx0Iik/VnQuZGVmYXVsdDpWdH0oe2xhbmd1YWdlVGFnOiJzdi1TRSIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIgIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9u''@;'; put 'put ''czp7dGhvdXNhbmQ6InQiLG1pbGxpb246Ik0iLGJpbGxpb246Im1kIix0cmlsbGlvbjoidG1kIn0sb3JkaW5hbDooKT0+IiIsY3VycmVuY3k6e3N5bWJvbDoia3IiLHBvc2l0aW9uOiJwb3N0Zml4Iixjb2RlOiJTRUsifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90''@;'; put 'put ''YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBh''@;'; put 'put ''cmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJh''@;'; put 'put ''dGVkOiEwLG1hbnRpc3NhOjB9fX0pfShEYSk7dmFyIExyPURhLmV4cG9ydHMsV2k9e2V4cG9ydHM6e319OyFmdW5jdGlvbihpcix4YSl7aXIuZXhwb3J0cz1mdW5jdGlvbiB1aShWdCl7cmV0dXJuIFZ0JiZWdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNh''@;'; put 'put ''bGwoVnQsImRlZmF1bHQiKT9WdC5kZWZhdWx0OlZ0fSh7bGFuZ3VhZ2VUYWc6InRoLVRIIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiwiLGRlY2ltYWw6Ii4ifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiXHUwZTFlXHUwZTMxXHUwZTE5IixtaWxsaW9uOiJcdTBlMjVcdTBlNDlcdTBlMzJc''@;'; put 'put ''dTBlMTkiLGJpbGxpb246Ilx1MGUxZVx1MGUzMVx1MGUxOVx1MGUyNVx1MGU0OVx1MGUzMlx1MGUxOSIsdHJpbGxpb246Ilx1MGUyNVx1MGU0OVx1MGUzMlx1MGUxOVx1MGUyNVx1MGU0OVx1MGUzMlx1MGUxOSJ9LG9yZGluYWw6ZnVuY3Rpb24oKXtyZXR1cm4iLiJ9LGN1cnJlbmN5OntzeW1i''@;'; put 'put ''b2w6Ilx1MGUzZiIscG9zaXRpb246InBvc3RmaXgiLGNvZGU6IlRIQiJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VT''@;'; put 'put ''ZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRT''@;'; put 'put ''ZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KFdpKTt2YXIgcGE9V2kuZXhwb3J0cyxRbj17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKGlyLHhhKXtpci5l''@;'; put 'put ''eHBvcnRzPWZ1bmN0aW9uKCl7Y29uc3QgVnQ9ezE6IidpbmNpIiw1OiInaW5jaSIsODoiJ2luY2kiLDcwOiInaW5jaSIsODA6IidpbmNpIiwyOiInbmNpIiw3OiInbmNpIiwyMDoiJ25jaSIsNTA6IiduY2kiLDM6IidceGZjbmNceGZjIiw0OiInXHhmY25jXHhmYyIsMTAwOiInXHhmY25jXHhm''@;'; put 'put ''YyIsNjoiJ25jXHUwMTMxIiw5OiIndW5jdSIsMTA6Iid1bmN1IiwzMDoiJ3VuY3UiLDQwOiInXHUwMTMxbmNcdTAxMzEiLDYwOiInXHUwMTMxbmNcdTAxMzEiLDkwOiInXHUwMTMxbmNcdTAxMzEifTtyZXR1cm4gZnVuY3Rpb24gdWkoSnIpe3JldHVybiBKciYmSnIuX19lc01vZHVsZSYmT2Jq''@;'; put 'put ''ZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEpyLCJkZWZhdWx0Iik/SnIuZGVmYXVsdDpKcn0oe2xhbmd1YWdlVGFnOiJ0ci1UUiIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIuIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6ImJpbiIsbWlsbGlvbjoibWls''@;'; put 'put ''eW9uIixiaWxsaW9uOiJtaWx5YXIiLHRyaWxsaW9uOiJ0cmlseW9uIn0sb3JkaW5hbDpKcj0+e2lmKDA9PT1KcilyZXR1cm4iJ1x1MDEzMW5jXHUwMTMxIjtsZXQgYjA9SnIlMTA7cmV0dXJuIFZ0W2IwXXx8VnRbSnIlMTAwLWIwXXx8VnRbSnI+PTEwMD8xMDA6bnVsbF19LGN1cnJlbmN5Ontz''@;'; put 'put ''eW1ib2w6Ilx1MjBiYSIscG9zaXRpb246InBvc3RmaXgiLGNvZGU6IlRSWSJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLHNwYWNlU2VwYXJhdGVkQ3VycmVuY3k6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91''@;'; put 'put ''ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9D''@;'; put 'put ''dXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19KX0oKX0oUW4pO3ZhciBsYT1Rbi5leHBvcnRzLHlhPXtl''@;'; put 'put ''eHBvcnRzOnt9fTshZnVuY3Rpb24oaXIseGEpe2lyLmV4cG9ydHM9ZnVuY3Rpb24gdWkoVnQpe3JldHVybiBWdCYmVnQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFZ0LCJkZWZhdWx0Iik/VnQuZGVmYXVsdDpWdH0oe2xhbmd1YWdlVGFnOiJ1ay1V''@;'; put 'put ''QSIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIgIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6Ilx1MDQ0Mlx1MDQzOFx1MDQ0MS4iLG1pbGxpb246Ilx1MDQzY1x1MDQzYlx1MDQzZCIsYmlsbGlvbjoiXHUwNDNjXHUwNDNiXHUwNDQwXHUwNDM0Iix0cmlsbGlvbjoiXHUw''@;'; put 'put ''NDMxXHUwNDNiXHUwNDNkIn0sb3JkaW5hbDooKT0+IiIsY3VycmVuY3k6e3N5bWJvbDoiXHUyMGI0Iixwb3NpdGlvbjoicG9zdGZpeCIsY29kZToiVUFIIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFn''@;'; put 'put ''ZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxs''@;'; put 'put ''V2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19KX0oeWEpO3ZhciBMYT15''@;'; put 'put ''YS5leHBvcnRzLEZhPXtleHBvcnRzOnt9fTshZnVuY3Rpb24oaXIseGEpe2lyLmV4cG9ydHM9ZnVuY3Rpb24gdWkoVnQpe3JldHVybiBWdCYmVnQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFZ0LCJkZWZhdWx0Iik/VnQuZGVmYXVsdDpWdH0oe2xh''@;'; put 'put ''bmd1YWdlVGFnOiJ6aC1DTiIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIsIixkZWNpbWFsOiIuIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6Ilx1NTM0MyIsbWlsbGlvbjoiXHU3NjdlXHU0ZTA3IixiaWxsaW9uOiJcdTUzNDFcdTRlYmYiLHRyaWxsaW9uOiJcdTUxNDYifSxvcmRpbmFsOmZ1''@;'; put 'put ''bmN0aW9uKCl7cmV0dXJuIi4ifSxjdXJyZW5jeTp7c3ltYm9sOiJceGE1Iixwb3NpdGlvbjoicHJlZml4Iixjb2RlOiJDTlkifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntm''@;'; put 'put ''b3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjJ9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJh''@;'; put 'put ''dGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfShGYSk7dmFyIHRpPUZhLmV4cG9ydHMsZ289e2V4cG9ydHM6e319OyFmdW5jdGlvbihpcix4YSl7aXIuZXhwb3J0cz1mdW5jdGlvbiB1aShWdCl7''@;'; put 'put ''cmV0dXJuIFZ0JiZWdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVnQsImRlZmF1bHQiKT9WdC5kZWZhdWx0OlZ0fSh7bGFuZ3VhZ2VUYWc6InpoLU1PIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiwiLGRlY2ltYWw6Ii4ifSxhYmJyZXZpYXRpb25z''@;'; put 'put ''Ont0aG91c2FuZDoiXHU1MzQzIixtaWxsaW9uOiJcdTc2N2VcdTg0MmMiLGJpbGxpb246Ilx1NTM0MVx1NTEwNCIsdHJpbGxpb246Ilx1NTE0NiJ9LG9yZGluYWw6ZnVuY3Rpb24oKXtyZXR1cm4iLiJ9LGN1cnJlbmN5OntzeW1ib2w6Ik1PUCIsY29kZToiTU9QIn19KX0oZ28pO3ZhciBOcz1n''@;'; put 'put ''by5leHBvcnRzLGJsPXtleHBvcnRzOnt9fTshZnVuY3Rpb24oaXIseGEpe2lyLmV4cG9ydHM9ZnVuY3Rpb24gdWkoVnQpe3JldHVybiBWdCYmVnQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFZ0LCJkZWZhdWx0Iik/VnQuZGVmYXVsdDpWdH0oe2xh''@;'; put 'put ''bmd1YWdlVGFnOiJ6aC1TRyIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIsIixkZWNpbWFsOiIuIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6Ilx1NTM0MyIsbWlsbGlvbjoiXHU3NjdlXHU0ZTA3IixiaWxsaW9uOiJcdTUzNDFcdTRlYmYiLHRyaWxsaW9uOiJcdTUxNDYifSxvcmRpbmFsOmZ1''@;'; put 'put ''bmN0aW9uKCl7cmV0dXJuIi4ifSxjdXJyZW5jeTp7c3ltYm9sOiIkIixjb2RlOiJTR0QifX0pfShibCk7dmFyIHB1PWJsLmV4cG9ydHMsTGM9e2V4cG9ydHM6e319OyFmdW5jdGlvbihpcix4YSl7aXIuZXhwb3J0cz1mdW5jdGlvbiB1aShWdCl7cmV0dXJuIFZ0JiZWdC5fX2VzTW9kdWxlJiZP''@;'; put 'put ''YmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVnQsImRlZmF1bHQiKT9WdC5kZWZhdWx0OlZ0fSh7bGFuZ3VhZ2VUYWc6InpoLVRXIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiwiLGRlY2ltYWw6Ii4ifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiXHU1MzQzIixtaWxsaW9u''@;'; put 'put ''OiJcdTc2N2VcdTg0MmMiLGJpbGxpb246Ilx1NTM0MVx1NTEwNCIsdHJpbGxpb246Ilx1NTE0NiJ9LG9yZGluYWw6ZnVuY3Rpb24oKXtyZXR1cm4iXHU3YjJjIn0sY3VycmVuY3k6e3N5bWJvbDoiTlQkIixjb2RlOiJUV0QifX0pfShMYyk7dmFyIEQwPUxjLmV4cG9ydHM7cmV0dXJuIGZ1bmN0''@;'; put 'put ''aW9uKGlyKXtpci5iZz1fLGlyWyJjcy1DWiJdPUIsaXJbImRhLURLIl09UCxpclsiZGUtQVQiXT1PLGlyWyJkZS1DSCJdPU4saXJbImRlLURFIl09SyxpclsiZGUtTEkiXT1XLGlyLmVsPXEsaXJbImVuLUFVIl09SixpclsiZW4tR0IiXT1pZSxpclsiZW4tSUUiXT1tZSxpclsiZW4tTloiXT1U''@;'; put 'put ''ZSxpclsiZW4tWkEiXT1qZSxpclsiZXMtQVIiXT1wLGlyWyJlcy1DTCJdPXgsaXJbImVzLUNPIl09VCxpclsiZXMtQ1IiXT1qLGlyWyJlcy1FUyJdPW0saXJbImVzLU1YIl09YWUsaXJbImVzLU5JIl09c2UsaXJbImVzLVBFIl09VWUsaXJbImVzLVBSIl09b3QsaXJbImVzLVNWIl09dmUsaXJb''@;'; put 'put ''ImV0LUVFIl09emUsaXJbImZhLUlSIl09RmUsaXJbImZpLUZJIl09SWUsaXJbImZpbC1QSCJdPWtlLGlyWyJmci1DQSJdPV90LGlyWyJmci1DSCJdPVFlLGlyWyJmci1GUiJdPXl0LGlyWyJoZS1JTCJdPUR0LGlyWyJodS1IVSJdPSRlLGlyLmlkPUhlLGlyWyJpdC1DSCJdPXF0LGlyWyJpdC1J''@;'; put 'put ''VCJdPVB0LGlyWyJqYS1KUCJdPVF0LGlyWyJrby1LUiJdPVJpLGlyWyJsdi1MViJdPWZ0LGlyWyJuYi1OTyJdPVd0LGlyLm5iPVJuLGlyWyJubC1CRSJdPVV0LGlyWyJubC1OTCJdPVdlLGlyLm5uPW5yLGlyWyJwbC1QTCJdPXh0LGlyWyJwdC1CUiJdPXJuLGlyWyJwdC1QVCJdPWhpLGlyWyJy''@;'; put 'put ''by1STyJdPWZuLGlyLnJvPVh0LGlyWyJydS1SVSJdPXVhLGlyWyJydS1VQSJdPXZyLGlyWyJzay1TSyJdPSRpLGlyLnNsPVFyLGlyWyJzci1DeXJsLVJTIl09TmksaXJbInN2LVNFIl09THIsaXJbInRoLVRIIl09cGEsaXJbInRyLVRSIl09bGEsaXJbInVrLVVBIl09TGEsaXJbInpoLUNOIl09''@;'; put 'put ''dGksaXJbInpoLU1PIl09TnMsaXJbInpoLVNHIl09cHUsaXJbInpoLVRXIl09RDB9KHkpLGZ1bmN0aW9uIFgoaXIpe3JldHVybiBpciYmaXIuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGlyLCJkZWZhdWx0Iik/aXIuZGVmYXVsdDppcn0oeSl9KCl9''@;'; put 'put ''LDgzMTM4Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNDk2MDkpO1guY2VydGlmaWNhdGU9eSg5NDc3Mik7dmFyIF89SS5kZWZpbmUoIlJTQVByaXZhdGVLZXkiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoInZlcnNpb24iKS5pbnQoKSx0aGlzLmtleSgibW9k''@;'; put 'put ''dWx1cyIpLmludCgpLHRoaXMua2V5KCJwdWJsaWNFeHBvbmVudCIpLmludCgpLHRoaXMua2V5KCJwcml2YXRlRXhwb25lbnQiKS5pbnQoKSx0aGlzLmtleSgicHJpbWUxIikuaW50KCksdGhpcy5rZXkoInByaW1lMiIpLmludCgpLHRoaXMua2V5KCJleHBvbmVudDEiKS5pbnQoKSx0aGlzLmtl''@;'; put 'put ''eSgiZXhwb25lbnQyIikuaW50KCksdGhpcy5rZXkoImNvZWZmaWNpZW50IikuaW50KCkpfSk7WC5SU0FQcml2YXRlS2V5PV87dmFyIGc9SS5kZWZpbmUoIlJTQVB1YmxpY0tleSIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgibW9kdWx1cyIpLmludCgpLHRoaXMua2V5KCJw''@;'; put 'put ''dWJsaWNFeHBvbmVudCIpLmludCgpKX0pO1guUlNBUHVibGljS2V5PWc7dmFyIEI9SS5kZWZpbmUoIkFsZ29yaXRobUlkZW50aWZpZXIiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoImFsZ29yaXRobSIpLm9iamlkKCksdGhpcy5rZXkoIm5vbmUiKS5udWxsXygpLm9wdGlv''@;'; put 'put ''bmFsKCksdGhpcy5rZXkoImN1cnZlIikub2JqaWQoKS5vcHRpb25hbCgpLHRoaXMua2V5KCJwYXJhbXMiKS5zZXEoKS5vYmoodGhpcy5rZXkoInAiKS5pbnQoKSx0aGlzLmtleSgicSIpLmludCgpLHRoaXMua2V5KCJnIikuaW50KCkpLm9wdGlvbmFsKCkpfSksdz1JLmRlZmluZSgiU3ViamVj''@;'; put 'put ''dFB1YmxpY0tleUluZm8iLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoImFsZ29yaXRobSIpLnVzZShCKSx0aGlzLmtleSgic3ViamVjdFB1YmxpY0tleSIpLmJpdHN0cigpKX0pO1guUHVibGljS2V5PXc7dmFyIFA9SS5kZWZpbmUoIlByaXZhdGVLZXlJbmZvIixmdW5jdGlv''@;'; put 'put ''bigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJ2ZXJzaW9uIikuaW50KCksdGhpcy5rZXkoImFsZ29yaXRobSIpLnVzZShCKSx0aGlzLmtleSgic3ViamVjdFByaXZhdGVLZXkiKS5vY3RzdHIoKSl9KTtYLlByaXZhdGVLZXk9UDt2YXIgRj1JLmRlZmluZSgiRW5jcnlwdGVkUHJpdmF0ZUtl''@;'; put 'put ''eUluZm8iLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoImFsZ29yaXRobSIpLnNlcSgpLm9iaih0aGlzLmtleSgiaWQiKS5vYmppZCgpLHRoaXMua2V5KCJkZWNyeXB0Iikuc2VxKCkub2JqKHRoaXMua2V5KCJrZGUiKS5zZXEoKS5vYmoodGhpcy5rZXkoImlkIikub2JqaWQo''@;'; put 'put ''KSx0aGlzLmtleSgia2RlcGFyYW1zIikuc2VxKCkub2JqKHRoaXMua2V5KCJzYWx0Iikub2N0c3RyKCksdGhpcy5rZXkoIml0ZXJzIikuaW50KCkpKSx0aGlzLmtleSgiY2lwaGVyIikuc2VxKCkub2JqKHRoaXMua2V5KCJhbGdvIikub2JqaWQoKSx0aGlzLmtleSgiaXYiKS5vY3RzdHIoKSkp''@;'; put 'put ''KSx0aGlzLmtleSgic3ViamVjdFByaXZhdGVLZXkiKS5vY3RzdHIoKSl9KTtYLkVuY3J5cHRlZFByaXZhdGVLZXk9Rjt2YXIgTz1JLmRlZmluZSgiRFNBUHJpdmF0ZUtleSIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgidmVyc2lvbiIpLmludCgpLHRoaXMua2V5KCJwIiku''@;'; put 'put ''aW50KCksdGhpcy5rZXkoInEiKS5pbnQoKSx0aGlzLmtleSgiZyIpLmludCgpLHRoaXMua2V5KCJwdWJfa2V5IikuaW50KCksdGhpcy5rZXkoInByaXZfa2V5IikuaW50KCkpfSk7WC5EU0FQcml2YXRlS2V5PU8sWC5EU0FwYXJhbT1JLmRlZmluZSgiRFNBcGFyYW0iLGZ1bmN0aW9uKCl7dGhp''@;'; put 'put ''cy5pbnQoKX0pO3ZhciB6PUkuZGVmaW5lKCJFQ1BhcmFtZXRlcnMiLGZ1bmN0aW9uKCl7dGhpcy5jaG9pY2Uoe25hbWVkQ3VydmU6dGhpcy5vYmppZCgpfSl9KSxOPUkuZGVmaW5lKCJFQ1ByaXZhdGVLZXkiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoInZlcnNpb24iKS5p''@;'; put 'put ''bnQoKSx0aGlzLmtleSgicHJpdmF0ZUtleSIpLm9jdHN0cigpLHRoaXMua2V5KCJwYXJhbWV0ZXJzIikub3B0aW9uYWwoKS5leHBsaWNpdCgwKS51c2UoeiksdGhpcy5rZXkoInB1YmxpY0tleSIpLm9wdGlvbmFsKCkuZXhwbGljaXQoMSkuYml0c3RyKCkpfSk7WC5FQ1ByaXZhdGVLZXk9TixY''@;'; put 'put ''LnNpZ25hdHVyZT1JLmRlZmluZSgic2lnbmF0dXJlIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJyIikuaW50KCksdGhpcy5rZXkoInMiKS5pbnQoKSl9KX0sOTQ3NzI6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg0OTYwOSksXz1JLmRlZmluZSgiVGltZSIs''@;'; put 'put ''ZnVuY3Rpb24oKXt0aGlzLmNob2ljZSh7dXRjVGltZTp0aGlzLnV0Y3RpbWUoKSxnZW5lcmFsVGltZTp0aGlzLmdlbnRpbWUoKX0pfSksZz1JLmRlZmluZSgiQXR0cmlidXRlVHlwZVZhbHVlIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJ0eXBlIikub2JqaWQoKSx0aGlz''@;'; put 'put ''LmtleSgidmFsdWUiKS5hbnkoKSl9KSxCPUkuZGVmaW5lKCJBbGdvcml0aG1JZGVudGlmaWVyIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJhbGdvcml0aG0iKS5vYmppZCgpLHRoaXMua2V5KCJwYXJhbWV0ZXJzIikub3B0aW9uYWwoKSx0aGlzLmtleSgiY3VydmUiKS5v''@;'; put 'put ''YmppZCgpLm9wdGlvbmFsKCkpfSksdz1JLmRlZmluZSgiU3ViamVjdFB1YmxpY0tleUluZm8iLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoImFsZ29yaXRobSIpLnVzZShCKSx0aGlzLmtleSgic3ViamVjdFB1YmxpY0tleSIpLmJpdHN0cigpKX0pLFA9SS5kZWZpbmUoIlJl''@;'; put 'put ''bGF0aXZlRGlzdGluZ3Vpc2hlZE5hbWUiLGZ1bmN0aW9uKCl7dGhpcy5zZXRvZihnKX0pLEY9SS5kZWZpbmUoIlJETlNlcXVlbmNlIixmdW5jdGlvbigpe3RoaXMuc2Vxb2YoUCl9KSxPPUkuZGVmaW5lKCJOYW1lIixmdW5jdGlvbigpe3RoaXMuY2hvaWNlKHtyZG5TZXF1ZW5jZTp0aGlzLnVz''@;'; put 'put ''ZShGKX0pfSksej1JLmRlZmluZSgiVmFsaWRpdHkiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoIm5vdEJlZm9yZSIpLnVzZShfKSx0aGlzLmtleSgibm90QWZ0ZXIiKS51c2UoXykpfSksTj1JLmRlZmluZSgiRXh0ZW5zaW9uIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2Jq''@;'; put 'put ''KHRoaXMua2V5KCJleHRuSUQiKS5vYmppZCgpLHRoaXMua2V5KCJjcml0aWNhbCIpLmJvb2woKS5kZWYoITEpLHRoaXMua2V5KCJleHRuVmFsdWUiKS5vY3RzdHIoKSl9KSxMPUkuZGVmaW5lKCJUQlNDZXJ0aWZpY2F0ZSIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgidmVy''@;'; put 'put ''c2lvbiIpLmV4cGxpY2l0KDApLmludCgpLm9wdGlvbmFsKCksdGhpcy5rZXkoInNlcmlhbE51bWJlciIpLmludCgpLHRoaXMua2V5KCJzaWduYXR1cmUiKS51c2UoQiksdGhpcy5rZXkoImlzc3VlciIpLnVzZShPKSx0aGlzLmtleSgidmFsaWRpdHkiKS51c2UoeiksdGhpcy5rZXkoInN1Ympl''@;'; put 'put ''Y3QiKS51c2UoTyksdGhpcy5rZXkoInN1YmplY3RQdWJsaWNLZXlJbmZvIikudXNlKHcpLHRoaXMua2V5KCJpc3N1ZXJVbmlxdWVJRCIpLmltcGxpY2l0KDEpLmJpdHN0cigpLm9wdGlvbmFsKCksdGhpcy5rZXkoInN1YmplY3RVbmlxdWVJRCIpLmltcGxpY2l0KDIpLmJpdHN0cigpLm9wdGlv''@;'; put 'put ''bmFsKCksdGhpcy5rZXkoImV4dGVuc2lvbnMiKS5leHBsaWNpdCgzKS5zZXFvZihOKS5vcHRpb25hbCgpKX0pLEs9SS5kZWZpbmUoIlg1MDlDZXJ0aWZpY2F0ZSIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgidGJzQ2VydGlmaWNhdGUiKS51c2UoTCksdGhpcy5rZXkoInNp''@;'; put 'put ''Z25hdHVyZUFsZ29yaXRobSIpLnVzZShCKSx0aGlzLmtleSgic2lnbmF0dXJlVmFsdWUiKS5iaXRzdHIoKSl9KTt1ZS5leHBvcnRzPUt9LDg5NDcyOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPS9Qcm9jLVR5cGU6IDQsRU5DUllQVEVEW1xuXHJdK0RFSy1JbmZvOiBBRVMtKCg/OjEy''@;'; put 'put ''OCl8KD86MTkyKXwoPzoyNTYpKS1DQkMsKFswLTlBLUhdKylbXG5ccl0rKFswLTlBLXpcblxyKy89XSspW1xuXHJdKy9tLF89L14tLS0tLUJFR0lOICgoPzouKj8gS0VZKXxDRVJUSUZJQ0FURSktLS0tLS9tLGc9L14tLS0tLUJFR0lOICgoPzouKj8gS0VZKXxDRVJUSUZJQ0FURSktLS0tLShb''@;'; put 'put ''MC05QS16XG5ccisvPV0rKS0tLS0tRU5EIFwxLS0tLS0kL20sQj15KDE4MjExKSx3PXkoNDMzODgpLFA9eSgyNzA1NCkuQnVmZmVyO3VlLmV4cG9ydHM9ZnVuY3Rpb24oRixPKXt2YXIgTCx6PUYudG9TdHJpbmcoKSxOPXoubWF0Y2goSSk7aWYoTil7dmFyIFU9ImFlcyIrTlsxXSxXPVAuZnJv''@;'; put 'put ''bShOWzJdLCJoZXgiKSxZPVAuZnJvbShOWzNdLnJlcGxhY2UoL1tcclxuXS9nLCIiKSwiYmFzZTY0IikscT1CKE8sVy5zbGljZSgwLDgpLHBhcnNlSW50KE5bMV0sMTApKS5rZXksZWU9W10sSj13LmNyZWF0ZURlY2lwaGVyaXYoVSxxLFcpO2VlLnB1c2goSi51cGRhdGUoWSkpLGVlLnB1c2go''@;'; put 'put ''Si5maW5hbCgpKSxMPVAuY29uY2F0KGVlKX1lbHNle3ZhciBLPXoubWF0Y2goZyk7TD1QLmZyb20oS1syXS5yZXBsYWNlKC9bXHJcbl0vZywiIiksImJhc2U2NCIpfXJldHVybnt0YWc6ei5tYXRjaChfKVsxXSxkYXRhOkx9fX0sNjU2Njc6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9''@;'; put 'put ''eSg4MzEzOCksXz15KDE1NTc5KSxnPXkoODk0NzIpLEI9eSg0MzM4OCksdz15KDkzMzk3KSxQPXkoMjcwNTQpLkJ1ZmZlcjtmdW5jdGlvbiBPKHope3ZhciBOOyJvYmplY3QiPT10eXBlb2YgeiYmIVAuaXNCdWZmZXIoeikmJihOPXoucGFzc3BocmFzZSx6PXoua2V5KSwic3RyaW5nIj09dHlw''@;'; put 'put ''ZW9mIHomJih6PVAuZnJvbSh6KSk7dmFyIFcsWSxMPWcoeixOKSxLPUwudGFnLFU9TC5kYXRhO3N3aXRjaChLKXtjYXNlIkNFUlRJRklDQVRFIjpZPUkuY2VydGlmaWNhdGUuZGVjb2RlKFUsImRlciIpLnRic0NlcnRpZmljYXRlLnN1YmplY3RQdWJsaWNLZXlJbmZvO2Nhc2UiUFVCTElDIEtF''@;'; put 'put ''WSI6c3dpdGNoKFl8fChZPUkuUHVibGljS2V5LmRlY29kZShVLCJkZXIiKSksVz1ZLmFsZ29yaXRobS5hbGdvcml0aG0uam9pbigiLiIpKXtjYXNlIjEuMi44NDAuMTEzNTQ5LjEuMS4xIjpyZXR1cm4gSS5SU0FQdWJsaWNLZXkuZGVjb2RlKFkuc3ViamVjdFB1YmxpY0tleS5kYXRhLCJkZXIi''@;'; put 'put ''KTtjYXNlIjEuMi44NDAuMTAwNDUuMi4xIjpyZXR1cm4gWS5zdWJqZWN0UHJpdmF0ZUtleT1ZLnN1YmplY3RQdWJsaWNLZXkse3R5cGU6ImVjIixkYXRhOll9O2Nhc2UiMS4yLjg0MC4xMDA0MC40LjEiOnJldHVybiBZLmFsZ29yaXRobS5wYXJhbXMucHViX2tleT1JLkRTQXBhcmFtLmRlY29k''@;'; put 'put ''ZShZLnN1YmplY3RQdWJsaWNLZXkuZGF0YSwiZGVyIikse3R5cGU6ImRzYSIsZGF0YTpZLmFsZ29yaXRobS5wYXJhbXN9O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIGtleSBpZCAiK1cpfWNhc2UiRU5DUllQVEVEIFBSSVZBVEUgS0VZIjpVPWZ1bmN0aW9uIEYoeixOKXt2YXIg''@;'; put 'put ''TD16LmFsZ29yaXRobS5kZWNyeXB0LmtkZS5rZGVwYXJhbXMuc2FsdCxLPXBhcnNlSW50KHouYWxnb3JpdGhtLmRlY3J5cHQua2RlLmtkZXBhcmFtcy5pdGVycy50b1N0cmluZygpLDEwKSxVPV9bei5hbGdvcml0aG0uZGVjcnlwdC5jaXBoZXIuYWxnby5qb2luKCIuIildLFc9ei5hbGdvcml0''@;'; put 'put ''aG0uZGVjcnlwdC5jaXBoZXIuaXYsWT16LnN1YmplY3RQcml2YXRlS2V5LHE9cGFyc2VJbnQoVS5zcGxpdCgiLSIpWzFdLDEwKS84LGVlPXcucGJrZGYyU3luYyhOLEwsSyxxLCJzaGExIiksSj1CLmNyZWF0ZURlY2lwaGVyaXYoVSxlZSxXKSxuZT1bXTtyZXR1cm4gbmUucHVzaChKLnVwZGF0''@;'; put 'put ''ZShZKSksbmUucHVzaChKLmZpbmFsKCkpLFAuY29uY2F0KG5lKX0oVT1JLkVuY3J5cHRlZFByaXZhdGVLZXkuZGVjb2RlKFUsImRlciIpLE4pO2Nhc2UiUFJJVkFURSBLRVkiOnN3aXRjaChXPShZPUkuUHJpdmF0ZUtleS5kZWNvZGUoVSwiZGVyIikpLmFsZ29yaXRobS5hbGdvcml0aG0uam9p''@;'; put 'put ''bigiLiIpKXtjYXNlIjEuMi44NDAuMTEzNTQ5LjEuMS4xIjpyZXR1cm4gSS5SU0FQcml2YXRlS2V5LmRlY29kZShZLnN1YmplY3RQcml2YXRlS2V5LCJkZXIiKTtjYXNlIjEuMi44NDAuMTAwNDUuMi4xIjpyZXR1cm57Y3VydmU6WS5hbGdvcml0aG0uY3VydmUscHJpdmF0ZUtleTpJLkVDUHJp''@;'; put 'put ''dmF0ZUtleS5kZWNvZGUoWS5zdWJqZWN0UHJpdmF0ZUtleSwiZGVyIikucHJpdmF0ZUtleX07Y2FzZSIxLjIuODQwLjEwMDQwLjQuMSI6cmV0dXJuIFkuYWxnb3JpdGhtLnBhcmFtcy5wcml2X2tleT1JLkRTQXBhcmFtLmRlY29kZShZLnN1YmplY3RQcml2YXRlS2V5LCJkZXIiKSx7dHlwZToi''@;'; put 'put ''ZHNhIixwYXJhbXM6WS5hbGdvcml0aG0ucGFyYW1zfTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigidW5rbm93biBrZXkgaWQgIitXKX1jYXNlIlJTQSBQVUJMSUMgS0VZIjpyZXR1cm4gSS5SU0FQdWJsaWNLZXkuZGVjb2RlKFUsImRlciIpO2Nhc2UiUlNBIFBSSVZBVEUgS0VZIjpyZXR1cm4g''@;'; put 'put ''SS5SU0FQcml2YXRlS2V5LmRlY29kZShVLCJkZXIiKTtjYXNlIkRTQSBQUklWQVRFIEtFWSI6cmV0dXJue3R5cGU6ImRzYSIscGFyYW1zOkkuRFNBUHJpdmF0ZUtleS5kZWNvZGUoVSwiZGVyIil9O2Nhc2UiRUMgUFJJVkFURSBLRVkiOnJldHVybntjdXJ2ZTooVT1JLkVDUHJpdmF0ZUtleS5k''@;'; put 'put ''ZWNvZGUoVSwiZGVyIikpLnBhcmFtZXRlcnMudmFsdWUscHJpdmF0ZUtleTpVLnByaXZhdGVLZXl9O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIGtleSB0eXBlICIrSyl9fU8uc2lnbmF0dXJlPUkuc2lnbmF0dXJlLHVlLmV4cG9ydHM9T30sOTMzOTc6KHVlLFgseSk9PntYLnBi''@;'; put 'put ''a2RmMj15KDgyNjg1KSxYLnBia2RmMlN5bmM9eSg1OTExMSl9LDgyNjg1Oih1ZSxYLHkpPT57dmFyIFAsTCxJPXkoMjcwNTQpLkJ1ZmZlcixfPXkoODYxMTEpLGc9eSg0NTM5MiksQj15KDU5MTExKSx3PXkoNzY2NDMpLEY9Z2xvYmFsLmNyeXB0byYmZ2xvYmFsLmNyeXB0by5zdWJ0bGUsTz17''@;'; put 'put ''c2hhOiJTSEEtMSIsInNoYS0xIjoiU0hBLTEiLHNoYTE6IlNIQS0xIixzaGEyNTY6IlNIQS0yNTYiLCJzaGEtMjU2IjoiU0hBLTI1NiIsc2hhMzg0OiJTSEEtMzg0Iiwic2hhLTM4NCI6IlNIQS0zODQiLCJzaGEtNTEyIjoiU0hBLTUxMiIsc2hhNTEyOiJTSEEtNTEyIn0sej1bXTtmdW5jdGlv''@;'; put 'put ''biBLKCl7cmV0dXJuIEx8fChMPWdsb2JhbC5wcm9jZXNzJiZnbG9iYWwucHJvY2Vzcy5uZXh0VGljaz9nbG9iYWwucHJvY2Vzcy5uZXh0VGljazpnbG9iYWwucXVldWVNaWNyb3Rhc2s/Z2xvYmFsLnF1ZXVlTWljcm90YXNrOmdsb2JhbC5zZXRJbW1lZGlhdGU/Z2xvYmFsLnNldEltbWVkaWF0''@;'; put 'put ''ZTpnbG9iYWwuc2V0VGltZW91dCl9ZnVuY3Rpb24gVShZLHEsZWUsSixuZSl7cmV0dXJuIEYuaW1wb3J0S2V5KCJyYXciLFkse25hbWU6IlBCS0RGMiJ9LCExLFsiZGVyaXZlQml0cyJdKS50aGVuKGZ1bmN0aW9uKGllKXtyZXR1cm4gRi5kZXJpdmVCaXRzKHtuYW1lOiJQQktERjIiLHNhbHQ6''@;'; put 'put ''cSxpdGVyYXRpb25zOmVlLGhhc2g6e25hbWU6bmV9fSxpZSxKPDwzKX0pLnRoZW4oZnVuY3Rpb24oaWUpe3JldHVybiBJLmZyb20oaWUpfSl9dWUuZXhwb3J0cz1mdW5jdGlvbihZLHEsZWUsSixuZSxpZSl7ImZ1bmN0aW9uIj09dHlwZW9mIG5lJiYoaWU9bmUsbmU9dm9pZCAwKTt2YXIgbGU9''@;'; put 'put ''T1sobmU9bmV8fCJzaGExIikudG9Mb3dlckNhc2UoKV07aWYobGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBnbG9iYWwuUHJvbWlzZSl7aWYoXyhlZSxKKSxZPXcoWSxnLCJQYXNzd29yZCIpLHE9dyhxLGcsIlNhbHQiKSwiZnVuY3Rpb24iIT10eXBlb2YgaWUpdGhyb3cgbmV3IEVycm9yKCJObyBj''@;'; put 'put ''YWxsYmFjayBwcm92aWRlZCB0byBwYmtkZjIiKTshZnVuY3Rpb24gVyhZLHEpe1kudGhlbihmdW5jdGlvbihlZSl7SygpKGZ1bmN0aW9uKCl7cShudWxsLGVlKX0pfSxmdW5jdGlvbihlZSl7SygpKGZ1bmN0aW9uKCl7cShlZSl9KX0pfShmdW5jdGlvbiBOKFkpe2lmKGdsb2JhbC5wcm9jZXNz''@;'; put 'put ''JiYhZ2xvYmFsLnByb2Nlc3MuYnJvd3Nlcnx8IUZ8fCFGLmltcG9ydEtleXx8IUYuZGVyaXZlQml0cylyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCExKTtpZih2b2lkIDAhPT16W1ldKXJldHVybiB6W1ldO3ZhciBxPVUoUD1QfHxJLmFsbG9jKDgpLFAsMTAsMTI4LFkpLnRoZW4oZnVuY3Rpb24o''@;'; put 'put ''KXtyZXR1cm4hMH0pLmNhdGNoKGZ1bmN0aW9uKCl7cmV0dXJuITF9KTtyZXR1cm4geltZXT1xLHF9KGxlKS50aGVuKGZ1bmN0aW9uKG1lKXtyZXR1cm4gbWU/VShZLHEsZWUsSixsZSk6QihZLHEsZWUsSixuZSl9KSxpZSl9ZWxzZSBLKCkoZnVuY3Rpb24oKXt2YXIgbWU7dHJ5e21lPUIoWSxx''@;'; put 'put ''LGVlLEosbmUpfWNhdGNoKF9lKXtyZXR1cm4gaWUoX2UpfWllKG51bGwsbWUpfSl9fSw0NTM5Mjp1ZT0+e3ZhciBYO1g9Z2xvYmFsLnByb2Nlc3MmJmdsb2JhbC5wcm9jZXNzLmJyb3dzZXI/InV0Zi04IjpnbG9iYWwucHJvY2VzcyYmZ2xvYmFsLnByb2Nlc3MudmVyc2lvbj9wYXJzZUludChw''@;'; put 'put ''cm9jZXNzLnZlcnNpb24uc3BsaXQoIi4iKVswXS5zbGljZSgxKSwxMCk+PTY/InV0Zi04IjoiYmluYXJ5IjoidXRmLTgiLHVlLmV4cG9ydHM9WH0sODYxMTE6dWU9Pnt2YXIgWD1NYXRoLnBvdygyLDMwKS0xO3VlLmV4cG9ydHM9ZnVuY3Rpb24oeSxJKXtpZigibnVtYmVyIiE9dHlwZW9mIHkp''@;'; put 'put ''dGhyb3cgbmV3IFR5cGVFcnJvcigiSXRlcmF0aW9ucyBub3QgYSBudW1iZXIiKTtpZih5PDApdGhyb3cgbmV3IFR5cGVFcnJvcigiQmFkIGl0ZXJhdGlvbnMiKTtpZigibnVtYmVyIiE9dHlwZW9mIEkpdGhyb3cgbmV3IFR5cGVFcnJvcigiS2V5IGxlbmd0aCBub3QgYSBudW1iZXIiKTtpZihJ''@;'; put 'put ''PDB8fEk+WHx8SSE9SSl0aHJvdyBuZXcgVHlwZUVycm9yKCJCYWQga2V5IGxlbmd0aCIpfX0sNTkxMTE6KHVlLFgseSk9Pnt2YXIgST15KDgzNDA3KSxfPXkoMzY2MzYpLGc9eSgyNTQ0MyksQj15KDI3MDU0KS5CdWZmZXIsdz15KDg2MTExKSxQPXkoNDUzOTIpLEY9eSg3NjY0MyksTz1CLmFs''@;'; put 'put ''bG9jKDEyOCksej17bWQ1OjE2LHNoYTE6MjAsc2hhMjI0OjI4LHNoYTI1NjozMixzaGEzODQ6NDgsc2hhNTEyOjY0LHJtZDE2MDoyMCxyaXBlbWQxNjA6MjB9O2Z1bmN0aW9uIE4oVSxXLFkpe3ZhciBxPWZ1bmN0aW9uIEwoVSl7cmV0dXJuInJtZDE2MCI9PT1VfHwicmlwZW1kMTYwIj09PVU/''@;'; put 'put ''ZnVuY3Rpb24gWShxKXtyZXR1cm4obmV3IF8pLnVwZGF0ZShxKS5kaWdlc3QoKX06Im1kNSI9PT1VP0k6ZnVuY3Rpb24gVyhxKXtyZXR1cm4gZyhVKS51cGRhdGUocSkuZGlnZXN0KCl9fShVKSxlZT0ic2hhNTEyIj09PVV8fCJzaGEzODQiPT09VT8xMjg6NjQ7Vy5sZW5ndGg+ZWU/Vz1xKFcp''@;'; put 'put ''OlcubGVuZ3RoPGVlJiYoVz1CLmNvbmNhdChbVyxPXSxlZSkpO2Zvcih2YXIgSj1CLmFsbG9jVW5zYWZlKGVlK3pbVV0pLG5lPUIuYWxsb2NVbnNhZmUoZWUreltVXSksaWU9MDtpZTxlZTtpZSsrKUpbaWVdPTU0XldbaWVdLG5lW2llXT05Ml5XW2llXTt2YXIgbGU9Qi5hbGxvY1Vuc2FmZShl''@;'; put 'put ''ZStZKzQpO0ouY29weShsZSwwLDAsZWUpLHRoaXMuaXBhZDE9bGUsdGhpcy5pcGFkMj1KLHRoaXMub3BhZD1uZSx0aGlzLmFsZz1VLHRoaXMuYmxvY2tzaXplPWVlLHRoaXMuaGFzaD1xLHRoaXMuc2l6ZT16W1VdfU4ucHJvdG90eXBlLnJ1bj1mdW5jdGlvbihVLFcpe3JldHVybiBVLmNvcHko''@;'; put 'put ''Vyx0aGlzLmJsb2Nrc2l6ZSksdGhpcy5oYXNoKFcpLmNvcHkodGhpcy5vcGFkLHRoaXMuYmxvY2tzaXplKSx0aGlzLmhhc2godGhpcy5vcGFkKX0sdWUuZXhwb3J0cz1mdW5jdGlvbiBLKFUsVyxZLHEsZWUpe3coWSxxKTt2YXIgSj1uZXcgTihlZT1lZXx8InNoYTEiLFU9RihVLFAsIlBhc3N3''@;'; put 'put ''b3JkIiksKFc9RihXLFAsIlNhbHQiKSkubGVuZ3RoKSxuZT1CLmFsbG9jVW5zYWZlKHEpLGllPUIuYWxsb2NVbnNhZmUoVy5sZW5ndGgrNCk7Vy5jb3B5KGllLDAsMCxXLmxlbmd0aCk7Zm9yKHZhciBsZT0wLG1lPXpbZWVdLF9lPU1hdGguY2VpbChxL21lKSxUZT0xO1RlPD1fZTtUZSsrKXtp''@;'; put 'put ''ZS53cml0ZVVJbnQzMkJFKFRlLFcubGVuZ3RoKTtmb3IodmFyIFNlPUoucnVuKGllLEouaXBhZDEpLGplPVNlLFY9MTtWPFk7VisrKXtqZT1KLnJ1bihqZSxKLmlwYWQyKTtmb3IodmFyIHA9MDtwPG1lO3ArKylTZVtwXV49amVbcF19U2UuY29weShuZSxsZSksbGUrPW1lfXJldHVybiBuZX19''@;'; put 'put ''LDc2NjQzOih1ZSxYLHkpPT57dmFyIEk9eSgyNzA1NCkuQnVmZmVyO3VlLmV4cG9ydHM9ZnVuY3Rpb24oXyxnLEIpe2lmKEkuaXNCdWZmZXIoXykpcmV0dXJuIF87aWYoInN0cmluZyI9PXR5cGVvZiBfKXJldHVybiBJLmZyb20oXyxnKTtpZihBcnJheUJ1ZmZlci5pc1ZpZXcoXykpcmV0dXJu''@;'; put 'put ''IEkuZnJvbShfLmJ1ZmZlcik7dGhyb3cgbmV3IFR5cGVFcnJvcihCKyIgbXVzdCBiZSBhIHN0cmluZywgYSBCdWZmZXIsIGEgdHlwZWQgYXJyYXkgb3IgYSBEYXRhVmlldyIpfX0sOTY1Njp1ZT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPXR5cGVvZiBwcm9jZXNzPiJ1Inx8IXByb2Nlc3Mu''@;'; put 'put ''dmVyc2lvbnx8MD09PXByb2Nlc3MudmVyc2lvbi5pbmRleE9mKCJ2MC4iKXx8MD09PXByb2Nlc3MudmVyc2lvbi5pbmRleE9mKCJ2MS4iKSYmMCE9PXByb2Nlc3MudmVyc2lvbi5pbmRleE9mKCJ2MS44LiIpP3tuZXh0VGljazpmdW5jdGlvbiBYKHksSSxfLGcpe2lmKCJmdW5jdGlvbiIhPXR5''@;'; put 'put ''cGVvZiB5KXRocm93IG5ldyBUeXBlRXJyb3IoJyJjYWxsYmFjayIgYXJndW1lbnQgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7dmFyIHcsUCxCPWFyZ3VtZW50cy5sZW5ndGg7c3dpdGNoKEIpe2Nhc2UgMDpjYXNlIDE6cmV0dXJuIHByb2Nlc3MubmV4dFRpY2soeSk7Y2FzZSAyOnJldHVybiBwcm9j''@;'; put 'put ''ZXNzLm5leHRUaWNrKGZ1bmN0aW9uKCl7eS5jYWxsKG51bGwsSSl9KTtjYXNlIDM6cmV0dXJuIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24oKXt5LmNhbGwobnVsbCxJLF8pfSk7Y2FzZSA0OnJldHVybiBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uKCl7eS5jYWxsKG51bGwsSSxfLGcpfSk7''@;'; put 'put ''ZGVmYXVsdDpmb3Iodz1uZXcgQXJyYXkoQi0xKSxQPTA7UDx3Lmxlbmd0aDspd1tQKytdPWFyZ3VtZW50c1tQXTtyZXR1cm4gcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbigpe3kuYXBwbHkobnVsbCx3KX0pfX19OnByb2Nlc3N9LDUyOTY1Oih1ZSxYLHkpPT57WC5wdWJsaWNFbmNyeXB0PXko''@;'; put 'put ''ODcyNjcpLFgucHJpdmF0ZURlY3J5cHQ9eSg5ODYxMyksWC5wcml2YXRlRW5jcnlwdD1mdW5jdGlvbihfLGcpe3JldHVybiBYLnB1YmxpY0VuY3J5cHQoXyxnLCEwKX0sWC5wdWJsaWNEZWNyeXB0PWZ1bmN0aW9uKF8sZyl7cmV0dXJuIFgucHJpdmF0ZURlY3J5cHQoXyxnLCEwKX19LDMwNzE1''@;'; put 'put ''Oih1ZSxYLHkpPT57dmFyIEk9eSg2NzIxMSksXz15KDI3MDU0KS5CdWZmZXI7ZnVuY3Rpb24gZyhCKXt2YXIgdz1fLmFsbG9jVW5zYWZlKDQpO3JldHVybiB3LndyaXRlVUludDMyQkUoQiwwKSx3fXVlLmV4cG9ydHM9ZnVuY3Rpb24oQix3KXtmb3IodmFyIE8sUD1fLmFsbG9jKDApLEY9MDtQ''@;'; put 'put ''Lmxlbmd0aDx3OylPPWcoRisrKSxQPV8uY29uY2F0KFtQLEkoInNoYTEiKS51cGRhdGUoQikudXBkYXRlKE8pLmRpZ2VzdCgpXSk7cmV0dXJuIFAuc2xpY2UoMCx3KX19LDE2NTA4OmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEksXyl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGcoVixwKXtp''@;'; put 'put ''ZighVil0aHJvdyBuZXcgRXJyb3IocHx8IkFzc2VydGlvbiBmYWlsZWQiKX1mdW5jdGlvbiBCKFYscCl7Vi5zdXBlcl89cDt2YXIgYj1mdW5jdGlvbigpe307Yi5wcm90b3R5cGU9cC5wcm90b3R5cGUsVi5wcm90b3R5cGU9bmV3IGIsVi5wcm90b3R5cGUuY29uc3RydWN0b3I9Vn1mdW5jdGlv''@;'; put 'put ''biB3KFYscCxiKXtpZih3LmlzQk4oVikpcmV0dXJuIFY7dGhpcy5uZWdhdGl2ZT0wLHRoaXMud29yZHM9bnVsbCx0aGlzLmxlbmd0aD0wLHRoaXMucmVkPW51bGwsbnVsbCE9PVYmJigoImxlIj09PXB8fCJiZSI9PT1wKSYmKGI9cCxwPTEwKSx0aGlzLl9pbml0KFZ8fDAscHx8MTAsYnx8ImJl''@;'; put 'put ''IikpfXZhciBQOyJvYmplY3QiPT10eXBlb2YgST9JLmV4cG9ydHM9dzpfLkJOPXcsdy5CTj13LHcud29yZFNpemU9MjY7dHJ5e1A9dHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiB3aW5kb3cuQnVmZmVyPCJ1Ij93aW5kb3cuQnVmZmVyOnkoNTEwNjkpLkJ1ZmZlcn1jYXRjaHt9ZnVuY3Rpb24g''@;'; 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 ''Nix0aGlzLndvcmRzW3hdPTY3MTA4ODYzJlR9cmV0dXJuIDAhPT1iJiYodGhpcy53b3Jkc1t4XT1iLHRoaXMubGVuZ3RoKyspLHRoaXMubGVuZ3RoPTA9PT1wPzE6dGhpcy5sZW5ndGgsdGhpc30sdy5wcm90b3R5cGUubXVsbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltdWxu''@;'; put 'put ''KHApfSx3LnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tdWwodGhpcyl9LHcucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSl9LHcucHJvdG90eXBlLnBvdz1mdW5jdGlvbihwKXt2YXIgYj1mdW5jdGlvbiBVKFYpe2Zv''@;'; put 'put ''cih2YXIgcD1uZXcgQXJyYXkoVi5iaXRMZW5ndGgoKSksYj0wO2I8cC5sZW5ndGg7YisrKXt2YXIgQz1iJTI2O3BbYl09KFYud29yZHNbYi8yNnwwXSYxPDxDKT4+PkN9cmV0dXJuIHB9KHApO2lmKDA9PT1iLmxlbmd0aClyZXR1cm4gbmV3IHcoMSk7Zm9yKHZhciB4PXRoaXMsQz0wO0M8Yi5s''@;'; put 'put ''ZW5ndGgmJjA9PT1iW0NdO0MrKyx4PXguc3FyKCkpO2lmKCsrQzxiLmxlbmd0aClmb3IodmFyIFQ9eC5zcXIoKTtDPGIubGVuZ3RoO0MrKyxUPVQuc3FyKCkpMCE9PWJbQ10mJih4PXgubXVsKFQpKTtyZXR1cm4geH0sdy5wcm90b3R5cGUuaXVzaGxuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9''@;'; put 'put ''PXR5cGVvZiBwJiZwPj0wKTt2YXIgVCxiPXAlMjYseD0ocC1iKS8yNixDPTY3MTA4ODYzPj4+MjYtYjw8MjYtYjtpZigwIT09Yil7dmFyIEg9MDtmb3IoVD0wO1Q8dGhpcy5sZW5ndGg7VCsrKXt2YXIgaj10aGlzLndvcmRzW1RdJkM7dGhpcy53b3Jkc1tUXT0oMHx0aGlzLndvcmRzW1RdKS1q''@;'; put 'put ''PDxifEgsSD1qPj4+MjYtYn1IJiYodGhpcy53b3Jkc1tUXT1ILHRoaXMubGVuZ3RoKyspfWlmKDAhPT14KXtmb3IoVD10aGlzLmxlbmd0aC0xO1Q+PTA7VC0tKXRoaXMud29yZHNbVCt4XT10aGlzLndvcmRzW1RdO2ZvcihUPTA7VDx4O1QrKyl0aGlzLndvcmRzW1RdPTA7dGhpcy5sZW5ndGgr''@;'; put 'put ''PXh9cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXNobG49ZnVuY3Rpb24ocCl7cmV0dXJuIGcoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaGxuKHApfSx3LnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24ocCxiLHgpe3ZhciBDO2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0w''@;'; put 'put ''KSxDPWI/KGItYiUyNikvMjY6MDt2YXIgVD1wJTI2LEg9TWF0aC5taW4oKHAtVCkvMjYsdGhpcy5sZW5ndGgpLGo9NjcxMDg4NjNeNjcxMDg4NjM+Pj5UPDxULEU9eDtpZihDLT1ILEM9TWF0aC5tYXgoMCxDKSxFKXtmb3IodmFyIG09MDttPEg7bSsrKUUud29yZHNbbV09dGhpcy53b3Jkc1tt''@;'; put 'put ''XTtFLmxlbmd0aD1IfWlmKDAhPT1IKWlmKHRoaXMubGVuZ3RoPkgpZm9yKHRoaXMubGVuZ3RoLT1ILG09MDttPHRoaXMubGVuZ3RoO20rKyl0aGlzLndvcmRzW21dPXRoaXMud29yZHNbbStIXTtlbHNlIHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xO3ZhciBBPTA7Zm9yKG09dGhpcy5s''@;'; put 'put ''ZW5ndGgtMTttPj0wJiYoMCE9PUF8fG0+PUMpO20tLSl7dmFyIGFlPTB8dGhpcy53b3Jkc1ttXTt0aGlzLndvcmRzW21dPUE8PDI2LVR8YWU+Pj5ULEE9YWUman1yZXR1cm4gRSYmMCE9PUEmJihFLndvcmRzW0UubGVuZ3RoKytdPUEpLDA9PT10aGlzLmxlbmd0aCYmKHRoaXMud29yZHNbMF09''@;'; put 'put ''MCx0aGlzLmxlbmd0aD0xKSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlzaHJuPWZ1bmN0aW9uKHAsYix4KXtyZXR1cm4gZygwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNocm4ocCxiLHgpfSx3LnByb3RvdHlwZS5zaGxuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXNo''@;'; put 'put ''bG4ocCl9LHcucHJvdG90eXBlLnVzaGxuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaGxuKHApfSx3LnByb3RvdHlwZS5zaHJuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXNocm4ocCl9LHcucHJvdG90eXBlLnVzaHJuPWZ1bmN0aW9uKHApe3JldHVybiB0''@;'; put 'put ''aGlzLmNsb25lKCkuaXVzaHJuKHApfSx3LnByb3RvdHlwZS50ZXN0bj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIGI9cCUyNix4PShwLWIpLzI2O3JldHVybiEodGhpcy5sZW5ndGg8PXh8fCEodGhpcy53b3Jkc1t4XSYxPDxiKSl9LHcucHJvdG90eXBlLmlt''@;'; put 'put ''YXNrbj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIGI9cCUyNix4PShwLWIpLzI2O3JldHVybiBnKDA9PT10aGlzLm5lZ2F0aXZlLCJpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJlcnMiKSx0aGlzLmxlbmd0aDw9eD90aGlzOigwIT09YiYm''@;'; put 'put ''eCsrLHRoaXMubGVuZ3RoPU1hdGgubWluKHgsdGhpcy5sZW5ndGgpLDAhPT1iJiYodGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSY9NjcxMDg4NjNeNjcxMDg4NjM+Pj5iPDxiKSx0aGlzLnN0cmlwKCkpfSx3LnByb3RvdHlwZS5tYXNrbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgp''@;'; put 'put ''LmltYXNrbihwKX0sdy5wcm90b3R5cGUuaWFkZG49ZnVuY3Rpb24ocCl7cmV0dXJuIGcoIm51bWJlciI9PXR5cGVvZiBwKSxnKHA8NjcxMDg4NjQpLHA8MD90aGlzLmlzdWJuKC1wKTowIT09dGhpcy5uZWdhdGl2ZT8xPT09dGhpcy5sZW5ndGgmJigwfHRoaXMud29yZHNbMF0pPHA/KHRoaXMu''@;'; put 'put ''d29yZHNbMF09cC0oMHx0aGlzLndvcmRzWzBdKSx0aGlzLm5lZ2F0aXZlPTAsdGhpcyk6KHRoaXMubmVnYXRpdmU9MCx0aGlzLmlzdWJuKHApLHRoaXMubmVnYXRpdmU9MSx0aGlzKTp0aGlzLl9pYWRkbihwKX0sdy5wcm90b3R5cGUuX2lhZGRuPWZ1bmN0aW9uKHApe3RoaXMud29yZHNbMF0r''@;'; put 'put ''PXA7Zm9yKHZhciBiPTA7Yjx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tiXT49NjcxMDg4NjQ7YisrKXRoaXMud29yZHNbYl0tPTY3MTA4ODY0LGI9PT10aGlzLmxlbmd0aC0xP3RoaXMud29yZHNbYisxXT0xOnRoaXMud29yZHNbYisxXSsrO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0''@;'; put 'put ''aGlzLmxlbmd0aCxiKzEpLHRoaXN9LHcucHJvdG90eXBlLmlzdWJuPWZ1bmN0aW9uKHApe2lmKGcoIm51bWJlciI9PXR5cGVvZiBwKSxnKHA8NjcxMDg4NjQpLHA8MClyZXR1cm4gdGhpcy5pYWRkbigtcCk7aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlz''@;'; put 'put ''LmlhZGRuKHApLHRoaXMubmVnYXRpdmU9MSx0aGlzO2lmKHRoaXMud29yZHNbMF0tPXAsMT09PXRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzWzBdPDApdGhpcy53b3Jkc1swXT0tdGhpcy53b3Jkc1swXSx0aGlzLm5lZ2F0aXZlPTE7ZWxzZSBmb3IodmFyIGI9MDtiPHRoaXMubGVuZ3RoJiZ0aGlz''@;'; put 'put ''LndvcmRzW2JdPDA7YisrKXRoaXMud29yZHNbYl0rPTY3MTA4ODY0LHRoaXMud29yZHNbYisxXS09MTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5hZGRuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaWFkZG4ocCl9LHcucHJvdG90eXBlLnN1Ym49ZnVuY3Rpb24o''@;'; put 'put ''cCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3VibihwKX0sdy5wcm90b3R5cGUuaWFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpc30sdy5wcm90b3R5cGUuYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWJzKCl9LHcucHJvdG90eXBlLl9pc2hsbnN1''@;'; put 'put ''Ym11bD1mdW5jdGlvbihwLGIseCl7dmFyIFQ7dGhpcy5fZXhwYW5kKHAubGVuZ3RoK3gpO3ZhciBILGo9MDtmb3IoVD0wO1Q8cC5sZW5ndGg7VCsrKXtIPSgwfHRoaXMud29yZHNbVCt4XSkrajt2YXIgRT0oMHxwLndvcmRzW1RdKSpiO2o9KChILT02NzEwODg2MyZFKT4+MjYpLShFLzY3MTA4''@;'; put 'put ''ODY0fDApLHRoaXMud29yZHNbVCt4XT02NzEwODg2MyZIfWZvcig7VDx0aGlzLmxlbmd0aC14O1QrKylqPShIPSgwfHRoaXMud29yZHNbVCt4XSkraik+PjI2LHRoaXMud29yZHNbVCt4XT02NzEwODg2MyZIO2lmKDA9PT1qKXJldHVybiB0aGlzLnN0cmlwKCk7Zm9yKGcoLTE9PT1qKSxqPTAs''@;'; put 'put ''VD0wO1Q8dGhpcy5sZW5ndGg7VCsrKWo9KEg9LSgwfHRoaXMud29yZHNbVF0pK2opPj4yNix0aGlzLndvcmRzW1RdPTY3MTA4ODYzJkg7cmV0dXJuIHRoaXMubmVnYXRpdmU9MSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl93b3JkRGl2PWZ1bmN0aW9uKHAsYil7dmFyIHgsQz10aGlzLmNs''@;'; put 'put ''b25lKCksVD1wLEg9MHxULndvcmRzW1QubGVuZ3RoLTFdOzAhPSh4PTI2LXRoaXMuX2NvdW50Qml0cyhIKSkmJihUPVQudXNobG4oeCksQy5pdXNobG4oeCksSD0wfFQud29yZHNbVC5sZW5ndGgtMV0pO3ZhciBtLEU9Qy5sZW5ndGgtVC5sZW5ndGg7aWYoIm1vZCIhPT1iKXsobT1uZXcgdyhu''@;'; put 'put ''dWxsKSkubGVuZ3RoPUUrMSxtLndvcmRzPW5ldyBBcnJheShtLmxlbmd0aCk7Zm9yKHZhciBBPTA7QTxtLmxlbmd0aDtBKyspbS53b3Jkc1tBXT0wfXZhciBhZT1DLmNsb25lKCkuX2lzaGxuc3VibXVsKFQsMSxFKTswPT09YWUubmVnYXRpdmUmJihDPWFlLG0mJihtLndvcmRzW0VdPTEpKTtm''@;'; put 'put ''b3IodmFyIHRlPUUtMTt0ZT49MDt0ZS0tKXt2YXIgc2U9NjcxMDg4NjQqKDB8Qy53b3Jkc1tULmxlbmd0aCt0ZV0pKygwfEMud29yZHNbVC5sZW5ndGgrdGUtMV0pO2ZvcihzZT1NYXRoLm1pbihzZS9IfDAsNjcxMDg4NjMpLEMuX2lzaGxuc3VibXVsKFQsc2UsdGUpOzAhPT1DLm5lZ2F0aXZl''@;'; put 'put ''OylzZS0tLEMubmVnYXRpdmU9MCxDLl9pc2hsbnN1Ym11bChULDEsdGUpLEMuaXNaZXJvKCl8fChDLm5lZ2F0aXZlXj0xKTttJiYobS53b3Jkc1t0ZV09c2UpfXJldHVybiBtJiZtLnN0cmlwKCksQy5zdHJpcCgpLCJkaXYiIT09YiYmMCE9PXgmJkMuaXVzaHJuKHgpLHtkaXY6bXx8bnVsbCxt''@;'; put 'put ''b2Q6Q319LHcucHJvdG90eXBlLmRpdm1vZD1mdW5jdGlvbihwLGIseCl7cmV0dXJuIGcoIXAuaXNaZXJvKCkpLHRoaXMuaXNaZXJvKCk/e2RpdjpuZXcgdygwKSxtb2Q6bmV3IHcoMCl9OjAhPT10aGlzLm5lZ2F0aXZlJiYwPT09cC5uZWdhdGl2ZT8oSD10aGlzLm5lZygpLmRpdm1vZChwLGIp''@;'; put 'put ''LCJtb2QiIT09YiYmKEM9SC5kaXYubmVnKCkpLCJkaXYiIT09YiYmKFQ9SC5tb2QubmVnKCkseCYmMCE9PVQubmVnYXRpdmUmJlQuaWFkZChwKSkse2RpdjpDLG1vZDpUfSk6MD09PXRoaXMubmVnYXRpdmUmJjAhPT1wLm5lZ2F0aXZlPyhIPXRoaXMuZGl2bW9kKHAubmVnKCksYiksIm1vZCIh''@;'; put 'put ''PT1iJiYoQz1ILmRpdi5uZWcoKSkse2RpdjpDLG1vZDpILm1vZH0pOnRoaXMubmVnYXRpdmUmcC5uZWdhdGl2ZT8oSD10aGlzLm5lZygpLmRpdm1vZChwLm5lZygpLGIpLCJkaXYiIT09YiYmKFQ9SC5tb2QubmVnKCkseCYmMCE9PVQubmVnYXRpdmUmJlQuaXN1YihwKSkse2RpdjpILmRpdixt''@;'; put 'put ''b2Q6VH0pOnAubGVuZ3RoPnRoaXMubGVuZ3RofHx0aGlzLmNtcChwKTwwP3tkaXY6bmV3IHcoMCksbW9kOnRoaXN9OjE9PT1wLmxlbmd0aD8iZGl2Ij09PWI/e2Rpdjp0aGlzLmRpdm4ocC53b3Jkc1swXSksbW9kOm51bGx9OiJtb2QiPT09Yj97ZGl2Om51bGwsbW9kOm5ldyB3KHRoaXMubW9k''@;'; put 'put ''bihwLndvcmRzWzBdKSl9OntkaXY6dGhpcy5kaXZuKHAud29yZHNbMF0pLG1vZDpuZXcgdyh0aGlzLm1vZG4ocC53b3Jkc1swXSkpfTp0aGlzLl93b3JkRGl2KHAsYik7dmFyIEMsVCxIfSx3LnByb3RvdHlwZS5kaXY9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuZGl2bW9kKHAsImRpdiIsITEp''@;'; put 'put ''LmRpdn0sdy5wcm90b3R5cGUubW9kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmRpdm1vZChwLCJtb2QiLCExKS5tb2R9LHcucHJvdG90eXBlLnVtb2Q9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuZGl2bW9kKHAsIm1vZCIsITApLm1vZH0sdy5wcm90b3R5cGUuZGl2Um91bmQ9ZnVuY3Rpb24o''@;'; put 'put ''cCl7dmFyIGI9dGhpcy5kaXZtb2QocCk7aWYoYi5tb2QuaXNaZXJvKCkpcmV0dXJuIGIuZGl2O3ZhciB4PTAhPT1iLmRpdi5uZWdhdGl2ZT9iLm1vZC5pc3ViKHApOmIubW9kLEM9cC51c2hybigxKSxUPXAuYW5kbG4oMSksSD14LmNtcChDKTtyZXR1cm4gSDwwfHwxPT09VCYmMD09PUg/Yi5k''@;'; put 'put ''aXY6MCE9PWIuZGl2Lm5lZ2F0aXZlP2IuZGl2LmlzdWJuKDEpOmIuZGl2LmlhZGRuKDEpfSx3LnByb3RvdHlwZS5tb2RuPWZ1bmN0aW9uKHApe2cocDw9NjcxMDg4NjMpO2Zvcih2YXIgYj0oMTw8MjYpJXAseD0wLEM9dGhpcy5sZW5ndGgtMTtDPj0wO0MtLSl4PShiKngrKDB8dGhpcy53b3Jk''@;'; put 'put ''c1tDXSkpJXA7cmV0dXJuIHh9LHcucHJvdG90eXBlLmlkaXZuPWZ1bmN0aW9uKHApe2cocDw9NjcxMDg4NjMpO2Zvcih2YXIgYj0wLHg9dGhpcy5sZW5ndGgtMTt4Pj0wO3gtLSl7dmFyIEM9KDB8dGhpcy53b3Jkc1t4XSkrNjcxMDg4NjQqYjt0aGlzLndvcmRzW3hdPUMvcHwwLGI9QyVwfXJl''@;'; put 'put ''dHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmRpdm49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pZGl2bihwKX0sdy5wcm90b3R5cGUuZWdjZD1mdW5jdGlvbihwKXtnKDA9PT1wLm5lZ2F0aXZlKSxnKCFwLmlzWmVybygpKTt2YXIgYj10aGlzLHg9cC5jbG9uZSgpO2I9''@;'; put 'put ''MCE9PWIubmVnYXRpdmU/Yi51bW9kKHApOmIuY2xvbmUoKTtmb3IodmFyIEM9bmV3IHcoMSksVD1uZXcgdygwKSxIPW5ldyB3KDApLGo9bmV3IHcoMSksRT0wO2IuaXNFdmVuKCkmJnguaXNFdmVuKCk7KWIuaXVzaHJuKDEpLHguaXVzaHJuKDEpLCsrRTtmb3IodmFyIG09eC5jbG9uZSgpLEE9''@;'; put 'put ''Yi5jbG9uZSgpOyFiLmlzWmVybygpOyl7Zm9yKHZhciBhZT0wLHRlPTE7IShiLndvcmRzWzBdJnRlKSYmYWU8MjY7KythZSx0ZTw8PTEpO2lmKGFlPjApZm9yKGIuaXVzaHJuKGFlKTthZS0tID4wOykoQy5pc09kZCgpfHxULmlzT2RkKCkpJiYoQy5pYWRkKG0pLFQuaXN1YihBKSksQy5pdXNo''@;'; put 'put ''cm4oMSksVC5pdXNocm4oMSk7Zm9yKHZhciBzZT0wLHdlPTE7ISh4LndvcmRzWzBdJndlKSYmc2U8MjY7KytzZSx3ZTw8PTEpO2lmKHNlPjApZm9yKHguaXVzaHJuKHNlKTtzZS0tID4wOykoSC5pc09kZCgpfHxqLmlzT2RkKCkpJiYoSC5pYWRkKG0pLGouaXN1YihBKSksSC5pdXNocm4oMSks''@;'; put 'put ''ai5pdXNocm4oMSk7Yi5jbXAoeCk+PTA/KGIuaXN1Yih4KSxDLmlzdWIoSCksVC5pc3ViKGopKTooeC5pc3ViKGIpLEguaXN1YihDKSxqLmlzdWIoVCkpfXJldHVybnthOkgsYjpqLGdjZDp4Lml1c2hsbihFKX19LHcucHJvdG90eXBlLl9pbnZtcD1mdW5jdGlvbihwKXtnKDA9PT1wLm5lZ2F0''@;'; put 'put ''aXZlKSxnKCFwLmlzWmVybygpKTt2YXIgYWUsYj10aGlzLHg9cC5jbG9uZSgpO2I9MCE9PWIubmVnYXRpdmU/Yi51bW9kKHApOmIuY2xvbmUoKTtmb3IodmFyIEM9bmV3IHcoMSksVD1uZXcgdygwKSxIPXguY2xvbmUoKTtiLmNtcG4oMSk+MCYmeC5jbXBuKDEpPjA7KXtmb3IodmFyIGo9MCxF''@;'; put 'put ''PTE7IShiLndvcmRzWzBdJkUpJiZqPDI2OysraixFPDw9MSk7aWYoaj4wKWZvcihiLml1c2hybihqKTtqLS0gPjA7KUMuaXNPZGQoKSYmQy5pYWRkKEgpLEMuaXVzaHJuKDEpO2Zvcih2YXIgbT0wLEE9MTshKHgud29yZHNbMF0mQSkmJm08MjY7KyttLEE8PD0xKTtpZihtPjApZm9yKHguaXVz''@;'; put 'put ''aHJuKG0pO20tLSA+MDspVC5pc09kZCgpJiZULmlhZGQoSCksVC5pdXNocm4oMSk7Yi5jbXAoeCk+PTA/KGIuaXN1Yih4KSxDLmlzdWIoVCkpOih4LmlzdWIoYiksVC5pc3ViKEMpKX1yZXR1cm4oYWU9MD09PWIuY21wbigxKT9DOlQpLmNtcG4oMCk8MCYmYWUuaWFkZChwKSxhZX0sdy5wcm90''@;'; put 'put ''b3R5cGUuZ2NkPWZ1bmN0aW9uKHApe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIHAuYWJzKCk7aWYocC5pc1plcm8oKSlyZXR1cm4gdGhpcy5hYnMoKTt2YXIgYj10aGlzLmNsb25lKCkseD1wLmNsb25lKCk7Yi5uZWdhdGl2ZT0wLHgubmVnYXRpdmU9MDtmb3IodmFyIEM9MDtiLmlzRXZlbigp''@;'; put 'put ''JiZ4LmlzRXZlbigpO0MrKyliLml1c2hybigxKSx4Lml1c2hybigxKTtmb3IoOzspe2Zvcig7Yi5pc0V2ZW4oKTspYi5pdXNocm4oMSk7Zm9yKDt4LmlzRXZlbigpOyl4Lml1c2hybigxKTt2YXIgVD1iLmNtcCh4KTtpZihUPDApe3ZhciBIPWI7Yj14LHg9SH1lbHNlIGlmKDA9PT1UfHwwPT09''@;'; put 'put ''eC5jbXBuKDEpKWJyZWFrO2IuaXN1Yih4KX1yZXR1cm4geC5pdXNobG4oQyl9LHcucHJvdG90eXBlLmludm09ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuZWdjZChwKS5hLnVtb2QocCl9LHcucHJvdG90eXBlLmlzRXZlbj1mdW5jdGlvbigpe3JldHVybiEoMSZ0aGlzLndvcmRzWzBdKX0sdy5w''@;'; put 'put ''cm90b3R5cGUuaXNPZGQ9ZnVuY3Rpb24oKXtyZXR1cm4hKDEmfnRoaXMud29yZHNbMF0pfSx3LnByb3RvdHlwZS5hbmRsbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy53b3Jkc1swXSZwfSx3LnByb3RvdHlwZS5iaW5jbj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCk7dmFyIGI9''@;'; put 'put ''cCUyNix4PShwLWIpLzI2LEM9MTw8YjtpZih0aGlzLmxlbmd0aDw9eClyZXR1cm4gdGhpcy5fZXhwYW5kKHgrMSksdGhpcy53b3Jkc1t4XXw9Qyx0aGlzO2Zvcih2YXIgVD1DLEg9eDswIT09VCYmSDx0aGlzLmxlbmd0aDtIKyspe3ZhciBqPTB8dGhpcy53b3Jkc1tIXTtUPShqKz1UKT4+PjI2''@;'; put 'put ''LHRoaXMud29yZHNbSF09aiY9NjcxMDg4NjN9cmV0dXJuIDAhPT1UJiYodGhpcy53b3Jkc1tIXT1ULHRoaXMubGVuZ3RoKyspLHRoaXN9LHcucHJvdG90eXBlLmlzWmVybz1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdfSx3LnByb3RvdHlwZS5j''@;'; put 'put ''bXBuPWZ1bmN0aW9uKHApe3ZhciB4LGI9cDwwO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYhYilyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmYilyZXR1cm4gMTtpZih0aGlzLnN0cmlwKCksdGhpcy5sZW5ndGg+MSl4PTE7ZWxzZXtiJiYocD0tcCksZyhwPD02NzEwODg2MywiTnVtYmVy''@;'; put 'put ''IGlzIHRvbyBiaWciKTt2YXIgQz0wfHRoaXMud29yZHNbMF07eD1DPT09cD8wOkM8cD8tMToxfXJldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC14Onh9LHcucHJvdG90eXBlLmNtcD1mdW5jdGlvbihwKXtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PXAubmVnYXRpdmUpcmV0dXJuLTE7aWYo''@;'; put 'put ''MD09PXRoaXMubmVnYXRpdmUmJjAhPT1wLm5lZ2F0aXZlKXJldHVybiAxO3ZhciBiPXRoaXMudWNtcChwKTtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtYjpifSx3LnByb3RvdHlwZS51Y21wPWZ1bmN0aW9uKHApe2lmKHRoaXMubGVuZ3RoPnAubGVuZ3RoKXJldHVybiAxO2lmKHRoaXMu''@;'; put 'put ''bGVuZ3RoPHAubGVuZ3RoKXJldHVybi0xO2Zvcih2YXIgYj0wLHg9dGhpcy5sZW5ndGgtMTt4Pj0wO3gtLSl7dmFyIEM9MHx0aGlzLndvcmRzW3hdLFQ9MHxwLndvcmRzW3hdO2lmKEMhPT1UKXtDPFQ/Yj0tMTpDPlQmJihiPTEpO2JyZWFrfX1yZXR1cm4gYn0sdy5wcm90b3R5cGUuZ3RuPWZ1''@;'; put 'put ''bmN0aW9uKHApe3JldHVybiAxPT09dGhpcy5jbXBuKHApfSx3LnByb3RvdHlwZS5ndD1mdW5jdGlvbihwKXtyZXR1cm4gMT09PXRoaXMuY21wKHApfSx3LnByb3RvdHlwZS5ndGVuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNtcG4ocCk+PTB9LHcucHJvdG90eXBlLmd0ZT1mdW5jdGlvbihw''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5jbXAocCk+PTB9LHcucHJvdG90eXBlLmx0bj1mdW5jdGlvbihwKXtyZXR1cm4tMT09PXRoaXMuY21wbihwKX0sdy5wcm90b3R5cGUubHQ9ZnVuY3Rpb24ocCl7cmV0dXJuLTE9PT10aGlzLmNtcChwKX0sdy5wcm90b3R5cGUubHRlbj1mdW5jdGlvbihwKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5jbXBuKHApPD0wfSx3LnByb3RvdHlwZS5sdGU9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY21wKHApPD0wfSx3LnByb3RvdHlwZS5lcW49ZnVuY3Rpb24ocCl7cmV0dXJuIDA9PT10aGlzLmNtcG4ocCl9LHcucHJvdG90eXBlLmVxPWZ1bmN0aW9uKHApe3JldHVybiAwPT09dGhpcy5j''@;'; put 'put ''bXAocCl9LHcucmVkPWZ1bmN0aW9uKHApe3JldHVybiBuZXcgU2UocCl9LHcucHJvdG90eXBlLnRvUmVkPWZ1bmN0aW9uKHApe3JldHVybiBnKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLGcoMD09PXRoaXMubmVnYXRpdmUsInJlZCB3b3JrcyBv''@;'; put 'put ''bmx5IHdpdGggcG9zaXRpdmVzIikscC5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKHApfSx3LnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLnJl''@;'; put 'put ''ZC5jb252ZXJ0RnJvbSh0aGlzKX0sdy5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLnJlZD1wLHRoaXN9LHcucHJvdG90eXBlLmZvcmNlUmVkPWZ1bmN0aW9uKHApe3JldHVybiBnKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29u''@;'; put 'put ''dGV4dCIpLHRoaXMuX2ZvcmNlUmVkKHApfSx3LnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5hZGQodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbihw''@;'; put 'put ''KXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pYWRkKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZFN1Yj1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVy''@;'; put 'put ''cyIpLHRoaXMucmVkLnN1Yih0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlzdWIodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkU2hsPWZ1bmN0aW9u''@;'; put 'put ''KHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc2hsKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZE11bD1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVy''@;'; put 'put ''cyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMscCksdGhpcy5yZWQubXVsKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLHAp''@;'; put 'put ''LHRoaXMucmVkLmltdWwodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXIodGhpcyl9LHcucHJvdG90eXBl''@;'; put 'put ''LnJlZElTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhp''@;'; put 'put ''cy5yZWQsInJlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0sdy5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCBy''@;'; put 'put ''ZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9LHcucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhp''@;'; put 'put ''cyksdGhpcy5yZWQubmVnKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQmJiFwLnJlZCwicmVkUG93KG5vcm1hbE51bSkiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3codGhpcyxwKX07dmFyIG5lPXtrMjU2Om51bGws''@;'; put 'put ''cDIyNDpudWxsLHAxOTI6bnVsbCxwMjU1MTk6bnVsbH07ZnVuY3Rpb24gaWUoVixwKXt0aGlzLm5hbWU9Vix0aGlzLnA9bmV3IHcocCwxNiksdGhpcy5uPXRoaXMucC5iaXRMZW5ndGgoKSx0aGlzLms9bmV3IHcoMSkuaXVzaGxuKHRoaXMubikuaXN1Yih0aGlzLnApLHRoaXMudG1wPXRoaXMu''@;'; put 'put ''X3RtcCgpfWZ1bmN0aW9uIGxlKCl7aWUuY2FsbCh0aGlzLCJrMjU2IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYiKX1mdW5jdGlvbiBtZSgpe2llLmNhbGwodGhpcywicDIyNCIsImZmZmZmZmZmIGZmZmZm''@;'; put 'put ''ZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxIil9ZnVuY3Rpb24gX2UoKXtpZS5jYWxsKHRoaXMsInAxOTIiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZiIpfWZ1bmN0aW9uIFRlKCl7aWUuY2FsbCh0''@;'; put 'put ''aGlzLCIyNTUxOSIsIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiKX1mdW5jdGlvbiBTZShWKXtpZigic3RyaW5nIj09dHlwZW9mIFYpe3ZhciBwPXcuX3ByaW1lKFYpO3RoaXMubT1wLnAsdGhpcy5wcmltZT1wfWVs''@;'; put 'put ''c2UgZyhWLmd0bigxKSwibW9kdWx1cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxIiksdGhpcy5tPVYsdGhpcy5wcmltZT1udWxsfWZ1bmN0aW9uIGplKFYpe1NlLmNhbGwodGhpcyxWKSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0aGlzLnNoaWZ0JTI2IT0wJiYodGhpcy5zaGlmdCs9''@;'; put 'put ''MjYtdGhpcy5zaGlmdCUyNiksdGhpcy5yPW5ldyB3KDEpLml1c2hsbih0aGlzLnNoaWZ0KSx0aGlzLnIyPXRoaXMuaW1vZCh0aGlzLnIuc3FyKCkpLHRoaXMucmludj10aGlzLnIuX2ludm1wKHRoaXMubSksdGhpcy5taW52PXRoaXMucmludi5tdWwodGhpcy5yKS5pc3VibigxKS5kaXYodGhp''@;'; put 'put ''cy5tKSx0aGlzLm1pbnY9dGhpcy5taW52LnVtb2QodGhpcy5yKSx0aGlzLm1pbnY9dGhpcy5yLnN1Yih0aGlzLm1pbnYpfWllLnByb3RvdHlwZS5fdG1wPWZ1bmN0aW9uKCl7dmFyIHA9bmV3IHcobnVsbCk7cmV0dXJuIHAud29yZHM9bmV3IEFycmF5KE1hdGguY2VpbCh0aGlzLm4vMTMpKSxw''@;'; put 'put ''fSxpZS5wcm90b3R5cGUuaXJlZHVjZT1mdW5jdGlvbihwKXt2YXIgeCxiPXA7ZG97dGhpcy5zcGxpdChiLHRoaXMudG1wKSx4PShiPShiPXRoaXMuaW11bEsoYikpLmlhZGQodGhpcy50bXApKS5iaXRMZW5ndGgoKX13aGlsZSh4PnRoaXMubik7dmFyIEM9eDx0aGlzLm4/LTE6Yi51Y21wKHRo''@;'; put 'put ''aXMucCk7cmV0dXJuIDA9PT1DPyhiLndvcmRzWzBdPTAsYi5sZW5ndGg9MSk6Qz4wP2IuaXN1Yih0aGlzLnApOnZvaWQgMCE9PWIuc3RyaXA/Yi5zdHJpcCgpOmIuX3N0cmlwKCksYn0saWUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKHAsYil7cC5pdXNocm4odGhpcy5uLDAsYil9LGllLnBy''@;'; put 'put ''b3RvdHlwZS5pbXVsSz1mdW5jdGlvbihwKXtyZXR1cm4gcC5pbXVsKHRoaXMuayl9LEIobGUsaWUpLGxlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihwLGIpe2Zvcih2YXIgeD00MTk0MzAzLEM9TWF0aC5taW4ocC5sZW5ndGgsOSksVD0wO1Q8QztUKyspYi53b3Jkc1tUXT1wLndvcmRzW1Rd''@;'; put 'put ''O2lmKGIubGVuZ3RoPUMscC5sZW5ndGg8PTkpcmV0dXJuIHAud29yZHNbMF09MCx2b2lkKHAubGVuZ3RoPTEpO3ZhciBIPXAud29yZHNbOV07Zm9yKGIud29yZHNbYi5sZW5ndGgrK109SCZ4LFQ9MTA7VDxwLmxlbmd0aDtUKyspe3ZhciBqPTB8cC53b3Jkc1tUXTtwLndvcmRzW1QtMTBdPShq''@;'; put 'put ''JngpPDw0fEg+Pj4yMixIPWp9cC53b3Jkc1tULTEwXT1IPj4+PTIyLHAubGVuZ3RoLT0wPT09SCYmcC5sZW5ndGg+MTA/MTA6OX0sbGUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHApe3Aud29yZHNbcC5sZW5ndGhdPTAscC53b3Jkc1twLmxlbmd0aCsxXT0wLHAubGVuZ3RoKz0yO2Zvcih2''@;'; put 'put ''YXIgYj0wLHg9MDt4PHAubGVuZ3RoO3grKyl7dmFyIEM9MHxwLndvcmRzW3hdO3Aud29yZHNbeF09NjcxMDg4NjMmKGIrPTk3NypDKSxiPTY0KkMrKGIvNjcxMDg4NjR8MCl9cmV0dXJuIDA9PT1wLndvcmRzW3AubGVuZ3RoLTFdJiYocC5sZW5ndGgtLSwwPT09cC53b3Jkc1twLmxlbmd0aC0x''@;'; put 'put ''XSYmcC5sZW5ndGgtLSkscH0sQihtZSxpZSksQihfZSxpZSksQihUZSxpZSksVGUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHApe2Zvcih2YXIgYj0wLHg9MDt4PHAubGVuZ3RoO3grKyl7dmFyIEM9MTkqKDB8cC53b3Jkc1t4XSkrYixUPTY3MTA4ODYzJkM7Qz4+Pj0yNixwLndvcmRzW3hd''@;'; put 'put ''PVQsYj1DfXJldHVybiAwIT09YiYmKHAud29yZHNbcC5sZW5ndGgrK109YikscH0sdy5fcHJpbWU9ZnVuY3Rpb24ocCl7aWYobmVbcF0pcmV0dXJuIG5lW3BdO3ZhciBiO2lmKCJrMjU2Ij09PXApYj1uZXcgbGU7ZWxzZSBpZigicDIyNCI9PT1wKWI9bmV3IG1lO2Vsc2UgaWYoInAxOTIiPT09''@;'; put 'put ''cCliPW5ldyBfZTtlbHNle2lmKCJwMjU1MTkiIT09cCl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gcHJpbWUgIitwKTtiPW5ldyBUZX1yZXR1cm4gbmVbcF09YixifSxTZS5wcm90b3R5cGUuX3ZlcmlmeTE9ZnVuY3Rpb24ocCl7ZygwPT09cC5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0''@;'; put 'put ''aCBwb3NpdGl2ZXMiKSxnKHAucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LFNlLnByb3RvdHlwZS5fdmVyaWZ5Mj1mdW5jdGlvbihwLGIpe2coIShwLm5lZ2F0aXZlfGIubmVnYXRpdmUpLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLGcocC5yZWQmJnAu''@;'; put 'put ''cmVkPT09Yi5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sU2UucHJvdG90eXBlLmltb2Q9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMucHJpbWU/dGhpcy5wcmltZS5pcmVkdWNlKHApLl9mb3JjZVJlZCh0aGlzKTpwLnVtb2QodGhpcy5tKS5fZm9yY2VSZWQodGhpcyl9''@;'; put 'put ''LFNlLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24ocCl7cmV0dXJuIHAuaXNaZXJvKCk/cC5jbG9uZSgpOnRoaXMubS5zdWIocCkuX2ZvcmNlUmVkKHRoaXMpfSxTZS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHAsYil7dGhpcy5fdmVyaWZ5MihwLGIpO3ZhciB4PXAuYWRkKGIpO3JldHVybiB4LmNt''@;'; put 'put ''cCh0aGlzLm0pPj0wJiZ4LmlzdWIodGhpcy5tKSx4Ll9mb3JjZVJlZCh0aGlzKX0sU2UucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24ocCxiKXt0aGlzLl92ZXJpZnkyKHAsYik7dmFyIHg9cC5pYWRkKGIpO3JldHVybiB4LmNtcCh0aGlzLm0pPj0wJiZ4LmlzdWIodGhpcy5tKSx4fSxTZS5wcm90''@;'; put 'put ''b3R5cGUuc3ViPWZ1bmN0aW9uKHAsYil7dGhpcy5fdmVyaWZ5MihwLGIpO3ZhciB4PXAuc3ViKGIpO3JldHVybiB4LmNtcG4oMCk8MCYmeC5pYWRkKHRoaXMubSkseC5fZm9yY2VSZWQodGhpcyl9LFNlLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKHAsYil7dGhpcy5fdmVyaWZ5MihwLGIpO3Zh''@;'; put 'put ''ciB4PXAuaXN1YihiKTtyZXR1cm4geC5jbXBuKDApPDAmJnguaWFkZCh0aGlzLm0pLHh9LFNlLnByb3RvdHlwZS5zaGw9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MShwKSx0aGlzLmltb2QocC51c2hsbihiKSl9LFNlLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHAsYil7cmV0''@;'; put 'put ''dXJuIHRoaXMuX3ZlcmlmeTIocCxiKSx0aGlzLmltb2QocC5pbXVsKGIpKX0sU2UucHJvdG90eXBlLm11bD1mdW5jdGlvbihwLGIpe3JldHVybiB0aGlzLl92ZXJpZnkyKHAsYiksdGhpcy5pbW9kKHAubXVsKGIpKX0sU2UucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMu''@;'; put 'put ''aW11bChwLHAuY2xvbmUoKSl9LFNlLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubXVsKHAscCl9LFNlLnByb3RvdHlwZS5zcXJ0PWZ1bmN0aW9uKHApe2lmKHAuaXNaZXJvKCkpcmV0dXJuIHAuY2xvbmUoKTt2YXIgYj10aGlzLm0uYW5kbG4oMyk7aWYoZyhiJTI9PTEp''@;'; put 'put ''LDM9PT1iKXt2YXIgeD10aGlzLm0uYWRkKG5ldyB3KDEpKS5pdXNocm4oMik7cmV0dXJuIHRoaXMucG93KHAseCl9Zm9yKHZhciBDPXRoaXMubS5zdWJuKDEpLFQ9MDshQy5pc1plcm8oKSYmMD09PUMuYW5kbG4oMSk7KVQrKyxDLml1c2hybigxKTtnKCFDLmlzWmVybygpKTt2YXIgSD1uZXcg''@;'; put 'put ''dygxKS50b1JlZCh0aGlzKSxqPUgucmVkTmVnKCksRT10aGlzLm0uc3VibigxKS5pdXNocm4oMSksbT10aGlzLm0uYml0TGVuZ3RoKCk7Zm9yKG09bmV3IHcoMiptKm0pLnRvUmVkKHRoaXMpOzAhPT10aGlzLnBvdyhtLEUpLmNtcChqKTspbS5yZWRJQWRkKGopO2Zvcih2YXIgQT10aGlzLnBv''@;'; put 'put ''dyhtLEMpLGFlPXRoaXMucG93KHAsQy5hZGRuKDEpLml1c2hybigxKSksdGU9dGhpcy5wb3cocCxDKSxzZT1UOzAhPT10ZS5jbXAoSCk7KXtmb3IodmFyIHdlPXRlLFVlPTA7MCE9PXdlLmNtcChIKTtVZSsrKXdlPXdlLnJlZFNxcigpO2coVWU8c2UpO3ZhciBKZT10aGlzLnBvdyhBLG5ldyB3''@;'; put 'put ''KDEpLml1c2hsbihzZS1VZS0xKSk7YWU9YWUucmVkTXVsKEplKSxBPUplLnJlZFNxcigpLHRlPXRlLnJlZE11bChBKSxzZT1VZX1yZXR1cm4gYWV9LFNlLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHApe3ZhciBiPXAuX2ludm1wKHRoaXMubSk7cmV0dXJuIDAhPT1iLm5lZ2F0aXZlPyhiLm5l''@;'; put 'put ''Z2F0aXZlPTAsdGhpcy5pbW9kKGIpLnJlZE5lZygpKTp0aGlzLmltb2QoYil9LFNlLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24ocCxiKXtpZihiLmlzWmVybygpKXJldHVybiBuZXcgdygxKS50b1JlZCh0aGlzKTtpZigwPT09Yi5jbXBuKDEpKXJldHVybiBwLmNsb25lKCk7dmFyIEM9bmV3IEFy''@;'; put 'put ''cmF5KDE2KTtDWzBdPW5ldyB3KDEpLnRvUmVkKHRoaXMpLENbMV09cDtmb3IodmFyIFQ9MjtUPEMubGVuZ3RoO1QrKylDW1RdPXRoaXMubXVsKENbVC0xXSxwKTt2YXIgSD1DWzBdLGo9MCxFPTAsbT1iLmJpdExlbmd0aCgpJTI2O2ZvcigwPT09bSYmKG09MjYpLFQ9Yi5sZW5ndGgtMTtUPj0w''@;'; put 'put ''O1QtLSl7Zm9yKHZhciBBPWIud29yZHNbVF0sYWU9bS0xO2FlPj0wO2FlLS0pe3ZhciB0ZT1BPj5hZSYxO0ghPT1DWzBdJiYoSD10aGlzLnNxcihIKSksMCE9PXRlfHwwIT09aj8oajw8PTEsanw9dGUsKDQ9PSsrRXx8MD09PVQmJjA9PT1hZSkmJihIPXRoaXMubXVsKEgsQ1tqXSksRT0wLGo9''@;'; put 'put ''MCkpOkU9MH1tPTI2fXJldHVybiBIfSxTZS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKHApe3ZhciBiPXAudW1vZCh0aGlzLm0pO3JldHVybiBiPT09cD9iLmNsb25lKCk6Yn0sU2UucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKHApe3ZhciBiPXAuY2xvbmUoKTtyZXR1cm4g''@;'; put 'put ''Yi5yZWQ9bnVsbCxifSx3Lm1vbnQ9ZnVuY3Rpb24ocCl7cmV0dXJuIG5ldyBqZShwKX0sQihqZSxTZSksamUucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5pbW9kKHAudXNobG4odGhpcy5zaGlmdCkpfSxqZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rp''@;'; put 'put ''b24ocCl7dmFyIGI9dGhpcy5pbW9kKHAubXVsKHRoaXMucmludikpO3JldHVybiBiLnJlZD1udWxsLGJ9LGplLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHAsYil7aWYocC5pc1plcm8oKXx8Yi5pc1plcm8oKSlyZXR1cm4gcC53b3Jkc1swXT0wLHAubGVuZ3RoPTEscDt2YXIgeD1wLmltdWwo''@;'; put 'put ''YiksQz14Lm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxUPXguaXN1YihDKS5pdXNocm4odGhpcy5zaGlmdCksSD1UO3JldHVybiBULmNtcCh0aGlzLm0pPj0wP0g9VC5pc3ViKHRoaXMubSk6VC5jbXBuKDApPDAmJihIPVQu''@;'; put 'put ''aWFkZCh0aGlzLm0pKSxILl9mb3JjZVJlZCh0aGlzKX0samUucHJvdG90eXBlLm11bD1mdW5jdGlvbihwLGIpe2lmKHAuaXNaZXJvKCl8fGIuaXNaZXJvKCkpcmV0dXJuIG5ldyB3KDApLl9mb3JjZVJlZCh0aGlzKTt2YXIgeD1wLm11bChiKSxDPXgubWFza24odGhpcy5zaGlmdCkubXVsKHRo''@;'; put 'put ''aXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLFQ9eC5pc3ViKEMpLml1c2hybih0aGlzLnNoaWZ0KSxIPVQ7cmV0dXJuIFQuY21wKHRoaXMubSk+PTA/SD1ULmlzdWIodGhpcy5tKTpULmNtcG4oMCk8MCYmKEg9VC5pYWRkKHRoaXMubSkpLEguX2ZvcmNlUmVkKHRoaXMp''@;'; put 'put ''fSxqZS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5pbW9kKHAuX2ludm1wKHRoaXMubSkubXVsKHRoaXMucjIpKS5fZm9yY2VSZWQodGhpcyl9fSh1ZT15Lm5tZCh1ZSksdGhpcyl9LDk4NjEzOih1ZSxYLHkpPT57dmFyIEk9eSg2NTY2NyksXz15KDMwNzE1KSxnPXko''@;'; put 'put ''MzcxOTYpLEI9eSgxNjUwOCksdz15KDE0MTA1KSxQPXkoNjcyMTEpLEY9eSgxMDU2OCksTz15KDI3MDU0KS5CdWZmZXI7dWUuZXhwb3J0cz1mdW5jdGlvbihVLFcsWSl7dmFyIHE7cT1VLnBhZGRpbmc/VS5wYWRkaW5nOlk/MTo0O3ZhciBuZSxlZT1JKFUpLEo9ZWUubW9kdWx1cy5ieXRlTGVu''@;'; put 'put ''Z3RoKCk7aWYoVy5sZW5ndGg+Snx8bmV3IEIoVykuY21wKGVlLm1vZHVsdXMpPj0wKXRocm93IG5ldyBFcnJvcigiZGVjcnlwdGlvbiBlcnJvciIpO25lPVk/RihuZXcgQihXKSxlZSk6dyhXLGVlKTt2YXIgaWU9Ty5hbGxvYyhKLW5lLmxlbmd0aCk7aWYobmU9Ty5jb25jYXQoW2llLG5lXSxK''@;'; put 'put ''KSw0PT09cSlyZXR1cm4gZnVuY3Rpb24geihLLFUpe3ZhciBXPUsubW9kdWx1cy5ieXRlTGVuZ3RoKCksWT1QKCJzaGExIikudXBkYXRlKE8uYWxsb2MoMCkpLmRpZ2VzdCgpLHE9WS5sZW5ndGg7aWYoMCE9PVVbMF0pdGhyb3cgbmV3IEVycm9yKCJkZWNyeXB0aW9uIGVycm9yIik7dmFyIGVl''@;'; put 'put ''PVUuc2xpY2UoMSxxKzEpLEo9VS5zbGljZShxKzEpLG5lPWcoZWUsXyhKLHEpKSxpZT1nKEosXyhuZSxXLXEtMSkpO2lmKGZ1bmN0aW9uIEwoSyxVKXtLPU8uZnJvbShLKSxVPU8uZnJvbShVKTt2YXIgVz0wLFk9Sy5sZW5ndGg7Sy5sZW5ndGghPT1VLmxlbmd0aCYmKFcrKyxZPU1hdGgubWlu''@;'; put 'put ''KEsubGVuZ3RoLFUubGVuZ3RoKSk7Zm9yKHZhciBxPS0xOysrcTxZOylXKz1LW3FdXlVbcV07cmV0dXJuIFd9KFksaWUuc2xpY2UoMCxxKSkpdGhyb3cgbmV3IEVycm9yKCJkZWNyeXB0aW9uIGVycm9yIik7Zm9yKHZhciBsZT1xOzA9PT1pZVtsZV07KWxlKys7aWYoMSE9PWllW2xlKytdKXRo''@;'; put 'put ''cm93IG5ldyBFcnJvcigiZGVjcnlwdGlvbiBlcnJvciIpO3JldHVybiBpZS5zbGljZShsZSl9KGVlLG5lKTtpZigxPT09cSlyZXR1cm4gZnVuY3Rpb24gTihLLFUsVyl7Zm9yKHZhciBZPVUuc2xpY2UoMCwyKSxxPTIsZWU9MDswIT09VVtxKytdOylpZihxPj1VLmxlbmd0aCl7ZWUrKzticmVh''@;'; put 'put ''a312YXIgSj1VLnNsaWNlKDIscS0xKTtpZigoIjAwMDIiIT09WS50b1N0cmluZygiaGV4IikmJiFXfHwiMDAwMSIhPT1ZLnRvU3RyaW5nKCJoZXgiKSYmVykmJmVlKyssSi5sZW5ndGg8OCYmZWUrKyxlZSl0aHJvdyBuZXcgRXJyb3IoImRlY3J5cHRpb24gZXJyb3IiKTtyZXR1cm4gVS5zbGlj''@;'; put 'put ''ZShxKX0oMCxuZSxZKTtpZigzPT09cSlyZXR1cm4gbmU7dGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHBhZGRpbmciKX19LDg3MjY3Oih1ZSxYLHkpPT57dmFyIEk9eSg2NTY2NyksXz15KDMzNDIpLGc9eSg2NzIxMSksQj15KDMwNzE1KSx3PXkoMzcxOTYpLFA9eSgxNjUwOCksRj15KDEwNTY4''@;'; put 'put ''KSxPPXkoMTQxMDUpLHo9eSgyNzA1NCkuQnVmZmVyO3VlLmV4cG9ydHM9ZnVuY3Rpb24oVyxZLHEpe3ZhciBlZTtlZT1XLnBhZGRpbmc/Vy5wYWRkaW5nOnE/MTo0O3ZhciBuZSxKPUkoVyk7aWYoND09PWVlKW5lPWZ1bmN0aW9uIE4oVSxXKXt2YXIgWT1VLm1vZHVsdXMuYnl0ZUxlbmd0aCgp''@;'; put 'put ''LHE9Vy5sZW5ndGgsZWU9Zygic2hhMSIpLnVwZGF0ZSh6LmFsbG9jKDApKS5kaWdlc3QoKSxKPWVlLmxlbmd0aCxuZT0yKko7aWYocT5ZLW5lLTIpdGhyb3cgbmV3IEVycm9yKCJtZXNzYWdlIHRvbyBsb25nIik7dmFyIGllPXouYWxsb2MoWS1xLW5lLTIpLGxlPVktSi0xLG1lPV8oSiksX2U9''@;'; put 'put ''dyh6LmNvbmNhdChbZWUsaWUsei5hbGxvYygxLDEpLFddLGxlKSxCKG1lLGxlKSksVGU9dyhtZSxCKF9lLEopKTtyZXR1cm4gbmV3IFAoei5jb25jYXQoW3ouYWxsb2MoMSksVGUsX2VdLFkpKX0oSixZKTtlbHNlIGlmKDE9PT1lZSluZT1mdW5jdGlvbiBMKFUsVyxZKXt2YXIgSixxPVcubGVu''@;'; put 'put ''Z3RoLGVlPVUubW9kdWx1cy5ieXRlTGVuZ3RoKCk7aWYocT5lZS0xMSl0aHJvdyBuZXcgRXJyb3IoIm1lc3NhZ2UgdG9vIGxvbmciKTtyZXR1cm4gSj1ZP3ouYWxsb2MoZWUtcS0zLDI1NSk6ZnVuY3Rpb24gSyhVKXtmb3IodmFyIEosVz16LmFsbG9jVW5zYWZlKFUpLFk9MCxxPV8oMipVKSxl''@;'; put 'put ''ZT0wO1k8VTspZWU9PT1xLmxlbmd0aCYmKHE9XygyKlUpLGVlPTApLChKPXFbZWUrK10pJiYoV1tZKytdPUopO3JldHVybiBXfShlZS1xLTMpLG5ldyBQKHouY29uY2F0KFt6LmZyb20oWzAsWT8xOjJdKSxKLHouYWxsb2MoMSksV10sZWUpKX0oSixZLHEpO2Vsc2V7aWYoMyE9PWVlKXRocm93''@;'; put 'put ''IG5ldyBFcnJvcigidW5rbm93biBwYWRkaW5nIik7aWYoKG5lPW5ldyBQKFkpKS5jbXAoSi5tb2R1bHVzKT49MCl0aHJvdyBuZXcgRXJyb3IoImRhdGEgdG9vIGxvbmcgZm9yIG1vZHVsdXMiKX1yZXR1cm4gcT9PKG5lLEopOkYobmUsSil9fSwxMDU2ODoodWUsWCx5KT0+e3ZhciBJPXkoMTY1''@;'; put 'put ''MDgpLF89eSgyNzA1NCkuQnVmZmVyO3VlLmV4cG9ydHM9ZnVuY3Rpb24gZyhCLHcpe3JldHVybiBfLmZyb20oQi50b1JlZChJLm1vbnQody5tb2R1bHVzKSkucmVkUG93KG5ldyBJKHcucHVibGljRXhwb25lbnQpKS5mcm9tUmVkKCkudG9BcnJheSgpKX19LDM3MTk2OnVlPT57dWUuZXhwb3J0''@;'; put 'put ''cz1mdW5jdGlvbih5LEkpe2Zvcih2YXIgXz15Lmxlbmd0aCxnPS0xOysrZzxfOyl5W2ddXj1JW2ddO3JldHVybiB5fX0sMzM0MjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST02NTUzNixCPXkoMjcwNTQpLkJ1ZmZlcix3PWdsb2JhbC5jcnlwdG98fGdsb2JhbC5tc0NyeXB0bzt1ZS5l''@;'; put 'put ''eHBvcnRzPXcmJncuZ2V0UmFuZG9tVmFsdWVzP2Z1bmN0aW9uIFAoRixPKXtpZihGPjQyOTQ5NjcyOTUpdGhyb3cgbmV3IFJhbmdlRXJyb3IoInJlcXVlc3RlZCB0b28gbWFueSByYW5kb20gYnl0ZXMiKTt2YXIgej1CLmFsbG9jVW5zYWZlKEYpO2lmKEY+MClpZihGPkkpZm9yKHZhciBOPTA7''@;'; put 'put ''TjxGO04rPUkpdy5nZXRSYW5kb21WYWx1ZXMoei5zbGljZShOLE4rSSkpO2Vsc2Ugdy5nZXRSYW5kb21WYWx1ZXMoeik7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIE8/cHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbigpe08obnVsbCx6KX0pOnp9OmZ1bmN0aW9uIGcoKXt0aHJvdyBuZXcgRXJy''@;'; put 'put ''b3IoIlNlY3VyZSByYW5kb20gbnVtYmVyIGdlbmVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGJyb3dzZXIuXG5Vc2UgQ2hyb21lLCBGaXJlZm94IG9yIEludGVybmV0IEV4cGxvcmVyIDExIil9fSw5NjgyOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO2Z1bmN0aW9uIEkoKXt0aHJv''@;'; put 'put ''dyBuZXcgRXJyb3IoInNlY3VyZSByYW5kb20gbnVtYmVyIGdlbmVyYXRpb24gbm90IHN1cHBvcnRlZCBieSB0aGlzIGJyb3dzZXJcbnVzZSBjaHJvbWUsIEZpcmVGb3ggb3IgSW50ZXJuZXQgRXhwbG9yZXIgMTEiKX12YXIgXz15KDI3MDU0KSxnPXkoMzM0MiksQj1fLkJ1ZmZlcix3PV8ua01h''@;'; put 'put ''eExlbmd0aCxQPWdsb2JhbC5jcnlwdG98fGdsb2JhbC5tc0NyeXB0byxGPU1hdGgucG93KDIsMzIpLTE7ZnVuY3Rpb24gTyhVLFcpe2lmKCJudW1iZXIiIT10eXBlb2YgVXx8VSE9VSl0aHJvdyBuZXcgVHlwZUVycm9yKCJvZmZzZXQgbXVzdCBiZSBhIG51bWJlciIpO2lmKFU+Rnx8VTwwKXRo''@;'; put 'put ''cm93IG5ldyBUeXBlRXJyb3IoIm9mZnNldCBtdXN0IGJlIGEgdWludDMyIik7aWYoVT53fHxVPlcpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm9mZnNldCBvdXQgb2YgcmFuZ2UiKX1mdW5jdGlvbiB6KFUsVyxZKXtpZigibnVtYmVyIiE9dHlwZW9mIFV8fFUhPVUpdGhyb3cgbmV3IFR5cGVFcnJv''@;'; put 'put ''cigic2l6ZSBtdXN0IGJlIGEgbnVtYmVyIik7aWYoVT5GfHxVPDApdGhyb3cgbmV3IFR5cGVFcnJvcigic2l6ZSBtdXN0IGJlIGEgdWludDMyIik7aWYoVStXPll8fFU+dyl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiYnVmZmVyIHRvbyBzbWFsbCIpfWZ1bmN0aW9uIEwoVSxXLFkscSl7aWYocHJv''@;'; put 'put ''Y2Vzcy5icm93c2VyKXt2YXIgSj1uZXcgVWludDhBcnJheShVLmJ1ZmZlcixXLFkpO3JldHVybiBQLmdldFJhbmRvbVZhbHVlcyhKKSxxP3ZvaWQgcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbigpe3EobnVsbCxVKX0pOlV9aWYoIXEpcmV0dXJuIGcoWSkuY29weShVLFcpLFU7ZyhZLGZ1bmN0''@;'; put 'put ''aW9uKGllLGxlKXtpZihpZSlyZXR1cm4gcShpZSk7bGUuY29weShVLFcpLHEobnVsbCxVKX0pfVAmJlAuZ2V0UmFuZG9tVmFsdWVzfHwhcHJvY2Vzcy5icm93c2VyPyhYLnJhbmRvbUZpbGw9ZnVuY3Rpb24gTihVLFcsWSxxKXtpZighKEIuaXNCdWZmZXIoVSl8fFUgaW5zdGFuY2VvZiBnbG9i''@;'; put 'put ''YWwuVWludDhBcnJheSkpdGhyb3cgbmV3IFR5cGVFcnJvcignImJ1ZiIgYXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBvciBVaW50OEFycmF5Jyk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFcpcT1XLFc9MCxZPVUubGVuZ3RoO2Vsc2UgaWYoImZ1bmN0aW9uIj09dHlwZW9mIFkpcT1ZLFk9VS5s''@;'; put 'put ''ZW5ndGgtVztlbHNlIGlmKCJmdW5jdGlvbiIhPXR5cGVvZiBxKXRocm93IG5ldyBUeXBlRXJyb3IoJyJjYiIgYXJndW1lbnQgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7cmV0dXJuIE8oVyxVLmxlbmd0aCkseihZLFcsVS5sZW5ndGgpLEwoVSxXLFkscSl9LFgucmFuZG9tRmlsbFN5bmM9ZnVuY3Rp''@;'; put 'put ''b24gSyhVLFcsWSl7aWYodHlwZW9mIFc+InUiJiYoVz0wKSwhKEIuaXNCdWZmZXIoVSl8fFUgaW5zdGFuY2VvZiBnbG9iYWwuVWludDhBcnJheSkpdGhyb3cgbmV3IFR5cGVFcnJvcignImJ1ZiIgYXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBvciBVaW50OEFycmF5Jyk7cmV0dXJuIE8oVyxV''@;'; put 'put ''Lmxlbmd0aCksdm9pZCAwPT09WSYmKFk9VS5sZW5ndGgtVykseihZLFcsVS5sZW5ndGgpLEwoVSxXLFkpfSk6KFgucmFuZG9tRmlsbD1JLFgucmFuZG9tRmlsbFN5bmM9SSl9LDc0MDc1Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoOTY1NiksXz1PYmplY3Qua2V5c3x8ZnVuY3Rp''@;'; put 'put ''b24oSyl7dmFyIFU9W107Zm9yKHZhciBXIGluIEspVS5wdXNoKFcpO3JldHVybiBVfTt1ZS5leHBvcnRzPXo7dmFyIGc9T2JqZWN0LmNyZWF0ZSh5KDI3NjM3KSk7Zy5pbmhlcml0cz15KDcxOTkzKTt2YXIgQj15KDE5NjA5KSx3PXkoNDc4NDkpO2cuaW5oZXJpdHMoeixCKTtmb3IodmFyIFA9''@;'; put 'put ''Xyh3LnByb3RvdHlwZSksRj0wO0Y8UC5sZW5ndGg7RisrKXt2YXIgTz1QW0ZdO3oucHJvdG90eXBlW09dfHwoei5wcm90b3R5cGVbT109dy5wcm90b3R5cGVbT10pfWZ1bmN0aW9uIHooSyl7aWYoISh0aGlzIGluc3RhbmNlb2YgeikpcmV0dXJuIG5ldyB6KEspO0IuY2FsbCh0aGlzLEspLHcu''@;'; put 'put ''Y2FsbCh0aGlzLEspLEsmJiExPT09Sy5yZWFkYWJsZSYmKHRoaXMucmVhZGFibGU9ITEpLEsmJiExPT09Sy53cml0YWJsZSYmKHRoaXMud3JpdGFibGU9ITEpLHRoaXMuYWxsb3dIYWxmT3Blbj0hMCxLJiYhMT09PUsuYWxsb3dIYWxmT3BlbiYmKHRoaXMuYWxsb3dIYWxmT3Blbj0hMSksdGhp''@;'; put 'put ''cy5vbmNlKCJlbmQiLE4pfWZ1bmN0aW9uIE4oKXt0aGlzLmFsbG93SGFsZk9wZW58fHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kZWR8fEkubmV4dFRpY2soTCx0aGlzKX1mdW5jdGlvbiBMKEspe0suZW5kKCl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHoucHJvdG90eXBlLCJ3cml0YWJsZUhpZ2hX''@;'; put 'put ''YXRlck1hcmsiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmhpZ2hXYXRlck1hcmt9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHoucHJvdG90eXBlLCJkZXN0cm95ZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09dGhp''@;'; put 'put ''cy5fcmVhZGFibGVTdGF0ZSYmdm9pZCAwIT09dGhpcy5fd3JpdGFibGVTdGF0ZSYmdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQmJnRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkfSxzZXQ6ZnVuY3Rpb24oSyl7dm9pZCAwPT09dGhpcy5fcmVhZGFibGVTdGF0ZXx8dm9pZCAwPT09''@;'; put 'put ''dGhpcy5fd3JpdGFibGVTdGF0ZXx8KHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkPUssdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ9Syl9fSksei5wcm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24oSyxVKXt0aGlzLnB1c2gobnVsbCksdGhpcy5lbmQoKSxJLm5leHRUaWNrKFUs''@;'; put 'put ''Syl9fSwxODgyMzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPWc7dmFyIEk9eSgyOTA5KSxfPU9iamVjdC5jcmVhdGUoeSgyNzYzNykpO2Z1bmN0aW9uIGcoQil7aWYoISh0aGlzIGluc3RhbmNlb2YgZykpcmV0dXJuIG5ldyBnKEIpO0kuY2FsbCh0aGlzLEIpfV8uaW5oZXJp''@;'; put 'put ''dHM9eSg3MTk5MyksXy5pbmhlcml0cyhnLEkpLGcucHJvdG90eXBlLl90cmFuc2Zvcm09ZnVuY3Rpb24oQix3LFApe1AobnVsbCxCKX19LDE5NjA5Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoOTY1Nik7dWUuZXhwb3J0cz1pZTt2YXIgZyxfPXkoMjAwNTMpO2llLlJlYWRhYmxl''@;'; put 'put ''U3RhdGU9bmUseSg0NDM1Nik7dmFyIHc9ZnVuY3Rpb24oeGUsdmUpe3JldHVybiB4ZS5saXN0ZW5lcnModmUpLmxlbmd0aH0sUD15KDE4MzQyKSxGPXkoMjY1NSkuQnVmZmVyLE89KHR5cGVvZiBnbG9iYWw8InUiP2dsb2JhbDp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dHlwZW9mIHNlbGY8''@;'; put 'put ''InUiP3NlbGY6e30pLlVpbnQ4QXJyYXl8fGZ1bmN0aW9uKCl7fSxMPU9iamVjdC5jcmVhdGUoeSgyNzYzNykpO0wuaW5oZXJpdHM9eSg3MTk5Myk7dmFyIEs9eSg3OTgzOCksVT12b2lkIDA7VT1LJiZLLmRlYnVnbG9nP0suZGVidWdsb2coInN0cmVhbSIpOmZ1bmN0aW9uKCl7fTt2YXIgcSxX''@;'; put 'put ''PXkoMjc4MDkpLFk9eSgyMTUwOSk7TC5pbmhlcml0cyhpZSxQKTt2YXIgZWU9WyJlcnJvciIsImNsb3NlIiwiZGVzdHJveSIsInBhdXNlIiwicmVzdW1lIl07ZnVuY3Rpb24gbmUoeGUsdmUpe3ZhciBYZT12ZSBpbnN0YW5jZW9mKGc9Z3x8eSg3NDA3NSkpO3RoaXMub2JqZWN0TW9kZT0hISh4''@;'; put 'put ''ZT14ZXx8e30pLm9iamVjdE1vZGUsWGUmJih0aGlzLm9iamVjdE1vZGU9dGhpcy5vYmplY3RNb2RlfHwhIXhlLnJlYWRhYmxlT2JqZWN0TW9kZSk7dmFyIHplPXhlLmhpZ2hXYXRlck1hcmssRGU9eGUucmVhZGFibGVIaWdoV2F0ZXJNYXJrO3RoaXMuaGlnaFdhdGVyTWFyaz16ZXx8MD09PXpl''@;'; put 'put ''P3plOlhlJiYoRGV8fDA9PT1EZSk/RGU6dGhpcy5vYmplY3RNb2RlPzE2OjE2Mzg0LHRoaXMuaGlnaFdhdGVyTWFyaz1NYXRoLmZsb29yKHRoaXMuaGlnaFdhdGVyTWFyayksdGhpcy5idWZmZXI9bmV3IFcsdGhpcy5sZW5ndGg9MCx0aGlzLnBpcGVzPW51bGwsdGhpcy5waXBlc0NvdW50PTAs''@;'; put 'put ''dGhpcy5mbG93aW5nPW51bGwsdGhpcy5lbmRlZD0hMSx0aGlzLmVuZEVtaXR0ZWQ9ITEsdGhpcy5yZWFkaW5nPSExLHRoaXMuc3luYz0hMCx0aGlzLm5lZWRSZWFkYWJsZT0hMSx0aGlzLmVtaXR0ZWRSZWFkYWJsZT0hMSx0aGlzLnJlYWRhYmxlTGlzdGVuaW5nPSExLHRoaXMucmVzdW1lU2No''@;'; put 'put ''ZWR1bGVkPSExLHRoaXMuZGVzdHJveWVkPSExLHRoaXMuZGVmYXVsdEVuY29kaW5nPXhlLmRlZmF1bHRFbmNvZGluZ3x8InV0ZjgiLHRoaXMuYXdhaXREcmFpbj0wLHRoaXMucmVhZGluZ01vcmU9ITEsdGhpcy5kZWNvZGVyPW51bGwsdGhpcy5lbmNvZGluZz1udWxsLHhlLmVuY29kaW5nJiYo''@;'; put 'put ''cXx8KHE9eSg3ODQ1NCkuSSksdGhpcy5kZWNvZGVyPW5ldyBxKHhlLmVuY29kaW5nKSx0aGlzLmVuY29kaW5nPXhlLmVuY29kaW5nKX1mdW5jdGlvbiBpZSh4ZSl7aWYoZz1nfHx5KDc0MDc1KSwhKHRoaXMgaW5zdGFuY2VvZiBpZSkpcmV0dXJuIG5ldyBpZSh4ZSk7dGhpcy5fcmVhZGFibGVT''@;'; put 'put ''dGF0ZT1uZXcgbmUoeGUsdGhpcyksdGhpcy5yZWFkYWJsZT0hMCx4ZSYmKCJmdW5jdGlvbiI9PXR5cGVvZiB4ZS5yZWFkJiYodGhpcy5fcmVhZD14ZS5yZWFkKSwiZnVuY3Rpb24iPT10eXBlb2YgeGUuZGVzdHJveSYmKHRoaXMuX2Rlc3Ryb3k9eGUuZGVzdHJveSkpLFAuY2FsbCh0aGlzKX1m''@;'; put 'put ''dW5jdGlvbiBsZSh4ZSx2ZSxYZSx6ZSxEZSl7dmFyIE9lLEZlPXhlLl9yZWFkYWJsZVN0YXRlO3JldHVybiBudWxsPT09dmU/KEZlLnJlYWRpbmc9ITEsZnVuY3Rpb24gcCh4ZSx2ZSl7aWYoIXZlLmVuZGVkKXtpZih2ZS5kZWNvZGVyKXt2YXIgWGU9dmUuZGVjb2Rlci5lbmQoKTtYZSYmWGUu''@;'; put 'put ''bGVuZ3RoJiYodmUuYnVmZmVyLnB1c2goWGUpLHZlLmxlbmd0aCs9dmUub2JqZWN0TW9kZT8xOlhlLmxlbmd0aCl9dmUuZW5kZWQ9ITAsYih4ZSl9fSh4ZSxGZSkpOihEZXx8KE9lPWZ1bmN0aW9uIF9lKHhlLHZlKXt2YXIgWGU7cmV0dXJuIWZ1bmN0aW9uIE4oeGUpe3JldHVybiBGLmlzQnVm''@;'; put 'put ''ZmVyKHhlKXx8eGUgaW5zdGFuY2VvZiBPfSh2ZSkmJiJzdHJpbmciIT10eXBlb2YgdmUmJnZvaWQgMCE9PXZlJiYheGUub2JqZWN0TW9kZSYmKFhlPW5ldyBUeXBlRXJyb3IoIkludmFsaWQgbm9uLXN0cmluZy9idWZmZXIgY2h1bmsiKSksWGV9KEZlLHZlKSksT2U/eGUuZW1pdCgiZXJyb3Ii''@;'; put 'put ''LE9lKTpGZS5vYmplY3RNb2RlfHx2ZSYmdmUubGVuZ3RoPjA/KCJzdHJpbmciIT10eXBlb2YgdmUmJiFGZS5vYmplY3RNb2RlJiZPYmplY3QuZ2V0UHJvdG90eXBlT2YodmUpIT09Ri5wcm90b3R5cGUmJih2ZT1mdW5jdGlvbiB6KHhlKXtyZXR1cm4gRi5mcm9tKHhlKX0odmUpKSx6ZT9GZS5l''@;'; put 'put ''bmRFbWl0dGVkP3hlLmVtaXQoImVycm9yIixuZXcgRXJyb3IoInN0cmVhbS51bnNoaWZ0KCkgYWZ0ZXIgZW5kIGV2ZW50IikpOm1lKHhlLEZlLHZlLCEwKTpGZS5lbmRlZD94ZS5lbWl0KCJlcnJvciIsbmV3IEVycm9yKCJzdHJlYW0ucHVzaCgpIGFmdGVyIEVPRiIpKTooRmUucmVhZGluZz0h''@;'; put 'put ''MSxGZS5kZWNvZGVyJiYhWGU/KHZlPUZlLmRlY29kZXIud3JpdGUodmUpLEZlLm9iamVjdE1vZGV8fDAhPT12ZS5sZW5ndGg/bWUoeGUsRmUsdmUsITEpOkMoeGUsRmUpKTptZSh4ZSxGZSx2ZSwhMSkpKTp6ZXx8KEZlLnJlYWRpbmc9ITEpKSxmdW5jdGlvbiBUZSh4ZSl7cmV0dXJuIXhlLmVu''@;'; put 'put ''ZGVkJiYoeGUubmVlZFJlYWRhYmxlfHx4ZS5sZW5ndGg8eGUuaGlnaFdhdGVyTWFya3x8MD09PXhlLmxlbmd0aCl9KEZlKX1mdW5jdGlvbiBtZSh4ZSx2ZSxYZSx6ZSl7dmUuZmxvd2luZyYmMD09PXZlLmxlbmd0aCYmIXZlLnN5bmM/KHhlLmVtaXQoImRhdGEiLFhlKSx4ZS5yZWFkKDApKToo''@;'; put 'put ''dmUubGVuZ3RoKz12ZS5vYmplY3RNb2RlPzE6WGUubGVuZ3RoLHplP3ZlLmJ1ZmZlci51bnNoaWZ0KFhlKTp2ZS5idWZmZXIucHVzaChYZSksdmUubmVlZFJlYWRhYmxlJiZiKHhlKSksQyh4ZSx2ZSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KGllLnByb3RvdHlwZSwiZGVzdHJveWVkIix7Z2V0''@;'; put 'put ''OmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuX3JlYWRhYmxlU3RhdGUmJnRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkfSxzZXQ6ZnVuY3Rpb24oeGUpe3RoaXMuX3JlYWRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD14ZSl9fSksaWUucHJvdG90''@;'; put 'put ''eXBlLmRlc3Ryb3k9WS5kZXN0cm95LGllLnByb3RvdHlwZS5fdW5kZXN0cm95PVkudW5kZXN0cm95LGllLnByb3RvdHlwZS5fZGVzdHJveT1mdW5jdGlvbih4ZSx2ZSl7dGhpcy5wdXNoKG51bGwpLHZlKHhlKX0saWUucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oeGUsdmUpe3ZhciB6ZSxYZT10''@;'; put 'put ''aGlzLl9yZWFkYWJsZVN0YXRlO3JldHVybiBYZS5vYmplY3RNb2RlP3plPSEwOiJzdHJpbmciPT10eXBlb2YgeGUmJigodmU9dmV8fFhlLmRlZmF1bHRFbmNvZGluZykhPT1YZS5lbmNvZGluZyYmKHhlPUYuZnJvbSh4ZSx2ZSksdmU9IiIpLHplPSEwKSxsZSh0aGlzLHhlLHZlLCExLHplKX0s''@;'; put 'put ''aWUucHJvdG90eXBlLnVuc2hpZnQ9ZnVuY3Rpb24oeGUpe3JldHVybiBsZSh0aGlzLHhlLG51bGwsITAsITEpfSxpZS5wcm90b3R5cGUuaXNQYXVzZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hMT09PXRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZ30saWUucHJvdG90eXBlLnNldEVuY29kaW5nPWZ1''@;'; put 'put ''bmN0aW9uKHhlKXtyZXR1cm4gcXx8KHE9eSg3ODQ1NCkuSSksdGhpcy5fcmVhZGFibGVTdGF0ZS5kZWNvZGVyPW5ldyBxKHhlKSx0aGlzLl9yZWFkYWJsZVN0YXRlLmVuY29kaW5nPXhlLHRoaXN9O2Z1bmN0aW9uIFYoeGUsdmUpe3JldHVybiB4ZTw9MHx8MD09PXZlLmxlbmd0aCYmdmUuZW5k''@;'; put 'put ''ZWQ/MDp2ZS5vYmplY3RNb2RlPzE6eGUhPXhlP3ZlLmZsb3dpbmcmJnZlLmxlbmd0aD92ZS5idWZmZXIuaGVhZC5kYXRhLmxlbmd0aDp2ZS5sZW5ndGg6KHhlPnZlLmhpZ2hXYXRlck1hcmsmJih2ZS5oaWdoV2F0ZXJNYXJrPWZ1bmN0aW9uIGplKHhlKXtyZXR1cm4geGU+PTgzODg2MDg/eGU9''@;'; put 'put ''ODM4ODYwODooeGUtLSx4ZXw9eGU+Pj4xLHhlfD14ZT4+PjIseGV8PXhlPj4+NCx4ZXw9eGU+Pj44LHhlfD14ZT4+PjE2LHhlKyspLHhlfSh4ZSkpLHhlPD12ZS5sZW5ndGg/eGU6dmUuZW5kZWQ/dmUubGVuZ3RoOih2ZS5uZWVkUmVhZGFibGU9ITAsMCkpfWZ1bmN0aW9uIGIoeGUpe3ZhciB2''@;'; put 'put ''ZT14ZS5fcmVhZGFibGVTdGF0ZTt2ZS5uZWVkUmVhZGFibGU9ITEsdmUuZW1pdHRlZFJlYWRhYmxlfHwoVSgiZW1pdFJlYWRhYmxlIix2ZS5mbG93aW5nKSx2ZS5lbWl0dGVkUmVhZGFibGU9ITAsdmUuc3luYz9JLm5leHRUaWNrKHgseGUpOngoeGUpKX1mdW5jdGlvbiB4KHhlKXtVKCJlbWl0''@;'; put 'put ''IHJlYWRhYmxlIikseGUuZW1pdCgicmVhZGFibGUiKSxBKHhlKX1mdW5jdGlvbiBDKHhlLHZlKXt2ZS5yZWFkaW5nTW9yZXx8KHZlLnJlYWRpbmdNb3JlPSEwLEkubmV4dFRpY2soVCx4ZSx2ZSkpfWZ1bmN0aW9uIFQoeGUsdmUpe2Zvcih2YXIgWGU9dmUubGVuZ3RoOyF2ZS5yZWFkaW5nJiYh''@;'; put 'put ''dmUuZmxvd2luZyYmIXZlLmVuZGVkJiZ2ZS5sZW5ndGg8dmUuaGlnaFdhdGVyTWFyayYmKFUoIm1heWJlUmVhZE1vcmUgcmVhZCAwIikseGUucmVhZCgwKSxYZSE9PXZlLmxlbmd0aCk7KVhlPXZlLmxlbmd0aDt2ZS5yZWFkaW5nTW9yZT0hMX1mdW5jdGlvbiBqKHhlKXtVKCJyZWFkYWJsZSBu''@;'; put 'put ''ZXh0dGljayByZWFkIDAiKSx4ZS5yZWFkKDApfWZ1bmN0aW9uIG0oeGUsdmUpe3ZlLnJlYWRpbmd8fChVKCJyZXN1bWUgcmVhZCAwIikseGUucmVhZCgwKSksdmUucmVzdW1lU2NoZWR1bGVkPSExLHZlLmF3YWl0RHJhaW49MCx4ZS5lbWl0KCJyZXN1bWUiKSxBKHhlKSx2ZS5mbG93aW5nJiYh''@;'; put 'put ''dmUucmVhZGluZyYmeGUucmVhZCgwKX1mdW5jdGlvbiBBKHhlKXt2YXIgdmU9eGUuX3JlYWRhYmxlU3RhdGU7Zm9yKFUoImZsb3ciLHZlLmZsb3dpbmcpO3ZlLmZsb3dpbmcmJm51bGwhPT14ZS5yZWFkKCk7KTt9ZnVuY3Rpb24gYWUoeGUsdmUpe3JldHVybiAwPT09dmUubGVuZ3RoP251bGw6''@;'; put 'put ''KHZlLm9iamVjdE1vZGU/WGU9dmUuYnVmZmVyLnNoaWZ0KCk6IXhlfHx4ZT49dmUubGVuZ3RoPyhYZT12ZS5kZWNvZGVyP3ZlLmJ1ZmZlci5qb2luKCIiKToxPT09dmUuYnVmZmVyLmxlbmd0aD92ZS5idWZmZXIuaGVhZC5kYXRhOnZlLmJ1ZmZlci5jb25jYXQodmUubGVuZ3RoKSx2ZS5idWZm''@;'; put 'put ''ZXIuY2xlYXIoKSk6WGU9ZnVuY3Rpb24gdGUoeGUsdmUsWGUpe3ZhciB6ZTtyZXR1cm4geGU8dmUuaGVhZC5kYXRhLmxlbmd0aD8oemU9dmUuaGVhZC5kYXRhLnNsaWNlKDAseGUpLHZlLmhlYWQuZGF0YT12ZS5oZWFkLmRhdGEuc2xpY2UoeGUpKTp6ZT14ZT09PXZlLmhlYWQuZGF0YS5sZW5n''@;'; put 'put ''dGg/dmUuc2hpZnQoKTpYZT9mdW5jdGlvbiBzZSh4ZSx2ZSl7dmFyIFhlPXZlLmhlYWQsemU9MSxEZT1YZS5kYXRhO2Zvcih4ZS09RGUubGVuZ3RoO1hlPVhlLm5leHQ7KXt2YXIgRmU9WGUuZGF0YSxPZT14ZT5GZS5sZW5ndGg/RmUubGVuZ3RoOnhlO2lmKERlKz1PZT09PUZlLmxlbmd0aD9G''@;'; put 'put ''ZTpGZS5zbGljZSgwLHhlKSwwPT0oeGUtPU9lKSl7T2U9PT1GZS5sZW5ndGg/KCsremUsdmUuaGVhZD1YZS5uZXh0P1hlLm5leHQ6dmUudGFpbD1udWxsKToodmUuaGVhZD1YZSxYZS5kYXRhPUZlLnNsaWNlKE9lKSk7YnJlYWt9Kyt6ZX1yZXR1cm4gdmUubGVuZ3RoLT16ZSxEZX0oeGUsdmUp''@;'; put 'put ''OmZ1bmN0aW9uIHdlKHhlLHZlKXt2YXIgWGU9Ri5hbGxvY1Vuc2FmZSh4ZSksemU9dmUuaGVhZCxEZT0xO2Zvcih6ZS5kYXRhLmNvcHkoWGUpLHhlLT16ZS5kYXRhLmxlbmd0aDt6ZT16ZS5uZXh0Oyl7dmFyIEZlPXplLmRhdGEsT2U9eGU+RmUubGVuZ3RoP0ZlLmxlbmd0aDp4ZTtpZihGZS5j''@;'; put 'put ''b3B5KFhlLFhlLmxlbmd0aC14ZSwwLE9lKSwwPT0oeGUtPU9lKSl7T2U9PT1GZS5sZW5ndGg/KCsrRGUsdmUuaGVhZD16ZS5uZXh0P3plLm5leHQ6dmUudGFpbD1udWxsKToodmUuaGVhZD16ZSx6ZS5kYXRhPUZlLnNsaWNlKE9lKSk7YnJlYWt9KytEZX1yZXR1cm4gdmUubGVuZ3RoLT1EZSxY''@;'; put 'put ''ZX0oeGUsdmUpLHplfSh4ZSx2ZS5idWZmZXIsdmUuZGVjb2RlciksWGUpO3ZhciBYZX1mdW5jdGlvbiBVZSh4ZSl7dmFyIHZlPXhlLl9yZWFkYWJsZVN0YXRlO2lmKHZlLmxlbmd0aD4wKXRocm93IG5ldyBFcnJvcignImVuZFJlYWRhYmxlKCkiIGNhbGxlZCBvbiBub24tZW1wdHkgc3RyZWFt''@;'; put 'put ''Jyk7dmUuZW5kRW1pdHRlZHx8KHZlLmVuZGVkPSEwLEkubmV4dFRpY2soSmUsdmUseGUpKX1mdW5jdGlvbiBKZSh4ZSx2ZSl7IXhlLmVuZEVtaXR0ZWQmJjA9PT14ZS5sZW5ndGgmJih4ZS5lbmRFbWl0dGVkPSEwLHZlLnJlYWRhYmxlPSExLHZlLmVtaXQoImVuZCIpKX1mdW5jdGlvbiBvdCh4''@;'; put 'put ''ZSx2ZSl7Zm9yKHZhciBYZT0wLHplPXhlLmxlbmd0aDtYZTx6ZTtYZSsrKWlmKHhlW1hlXT09PXZlKXJldHVybiBYZTtyZXR1cm4tMX1pZS5wcm90b3R5cGUucmVhZD1mdW5jdGlvbih4ZSl7VSgicmVhZCIseGUpLHhlPXBhcnNlSW50KHhlLDEwKTt2YXIgdmU9dGhpcy5fcmVhZGFibGVTdGF0''@;'; put 'put ''ZSxYZT14ZTtpZigwIT09eGUmJih2ZS5lbWl0dGVkUmVhZGFibGU9ITEpLDA9PT14ZSYmdmUubmVlZFJlYWRhYmxlJiYodmUubGVuZ3RoPj12ZS5oaWdoV2F0ZXJNYXJrfHx2ZS5lbmRlZCkpcmV0dXJuIFUoInJlYWQ6IGVtaXRSZWFkYWJsZSIsdmUubGVuZ3RoLHZlLmVuZGVkKSwwPT09dmUu''@;'; put 'put ''bGVuZ3RoJiZ2ZS5lbmRlZD9VZSh0aGlzKTpiKHRoaXMpLG51bGw7aWYoMD09PSh4ZT1WKHhlLHZlKSkmJnZlLmVuZGVkKXJldHVybiAwPT09dmUubGVuZ3RoJiZVZSh0aGlzKSxudWxsO3ZhciBEZSx6ZT12ZS5uZWVkUmVhZGFibGU7cmV0dXJuIFUoIm5lZWQgcmVhZGFibGUiLHplKSwoMD09''@;'; put 'put ''PXZlLmxlbmd0aHx8dmUubGVuZ3RoLXhlPHZlLmhpZ2hXYXRlck1hcmspJiZVKCJsZW5ndGggbGVzcyB0aGFuIHdhdGVybWFyayIsemU9ITApLHZlLmVuZGVkfHx2ZS5yZWFkaW5nP1UoInJlYWRpbmcgb3IgZW5kZWQiLHplPSExKTp6ZSYmKFUoImRvIHJlYWQiKSx2ZS5yZWFkaW5nPSEwLHZl''@;'; put 'put ''LnN5bmM9ITAsMD09PXZlLmxlbmd0aCYmKHZlLm5lZWRSZWFkYWJsZT0hMCksdGhpcy5fcmVhZCh2ZS5oaWdoV2F0ZXJNYXJrKSx2ZS5zeW5jPSExLHZlLnJlYWRpbmd8fCh4ZT1WKFhlLHZlKSkpLG51bGw9PT0oRGU9eGU+MD9hZSh4ZSx2ZSk6bnVsbCk/KHZlLm5lZWRSZWFkYWJsZT0hMCx4''@;'; put 'put ''ZT0wKTp2ZS5sZW5ndGgtPXhlLDA9PT12ZS5sZW5ndGgmJih2ZS5lbmRlZHx8KHZlLm5lZWRSZWFkYWJsZT0hMCksWGUhPT14ZSYmdmUuZW5kZWQmJlVlKHRoaXMpKSxudWxsIT09RGUmJnRoaXMuZW1pdCgiZGF0YSIsRGUpLERlfSxpZS5wcm90b3R5cGUuX3JlYWQ9ZnVuY3Rpb24oeGUpe3Ro''@;'; put 'put ''aXMuZW1pdCgiZXJyb3IiLG5ldyBFcnJvcigiX3JlYWQoKSBpcyBub3QgaW1wbGVtZW50ZWQiKSl9LGllLnByb3RvdHlwZS5waXBlPWZ1bmN0aW9uKHhlLHZlKXt2YXIgWGU9dGhpcyx6ZT10aGlzLl9yZWFkYWJsZVN0YXRlO3N3aXRjaCh6ZS5waXBlc0NvdW50KXtjYXNlIDA6emUucGlwZXM9''@;'; put 'put ''eGU7YnJlYWs7Y2FzZSAxOnplLnBpcGVzPVt6ZS5waXBlcyx4ZV07YnJlYWs7ZGVmYXVsdDp6ZS5waXBlcy5wdXNoKHhlKX16ZS5waXBlc0NvdW50Kz0xLFUoInBpcGUgY291bnQ9JWQgb3B0cz0laiIsemUucGlwZXNDb3VudCx2ZSk7dmFyIEZlPXZlJiYhMT09PXZlLmVuZHx8eGU9PT1wcm9j''@;'; put 'put ''ZXNzLnN0ZG91dHx8eGU9PT1wcm9jZXNzLnN0ZGVycj9NdDpJZTtmdW5jdGlvbiBJZSgpe1UoIm9uZW5kIikseGUuZW5kKCl9emUuZW5kRW1pdHRlZD9JLm5leHRUaWNrKEZlKTpYZS5vbmNlKCJlbmQiLEZlKSx4ZS5vbigidW5waXBlIixmdW5jdGlvbiBPZShEdCxpdCl7VSgib251bnBpcGUi''@;'; put 'put ''KSxEdD09PVhlJiZpdCYmITE9PT1pdC5oYXNVbnBpcGVkJiYoaXQuaGFzVW5waXBlZD0hMCxmdW5jdGlvbiBBZSgpe1UoImNsZWFudXAiKSx4ZS5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLHVuKSx4ZS5yZW1vdmVMaXN0ZW5lcigiZmluaXNoIix5dCkseGUucmVtb3ZlTGlzdGVuZXIoImRyYWlu''@;'; put 'put ''IixWZSkseGUucmVtb3ZlTGlzdGVuZXIoImVycm9yIixRZSkseGUucmVtb3ZlTGlzdGVuZXIoInVucGlwZSIsT2UpLFhlLnJlbW92ZUxpc3RlbmVyKCJlbmQiLEllKSxYZS5yZW1vdmVMaXN0ZW5lcigiZW5kIixNdCksWGUucmVtb3ZlTGlzdGVuZXIoImRhdGEiLG50KSxrZT0hMCx6ZS5hd2Fp''@;'; put 'put ''dERyYWluJiYoIXhlLl93cml0YWJsZVN0YXRlfHx4ZS5fd3JpdGFibGVTdGF0ZS5uZWVkRHJhaW4pJiZWZSgpfSgpKX0pO3ZhciBWZT1mdW5jdGlvbiBIKHhlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdmU9eGUuX3JlYWRhYmxlU3RhdGU7VSgicGlwZU9uRHJhaW4iLHZlLmF3YWl0RHJhaW4p''@;'; put 'put ''LHZlLmF3YWl0RHJhaW4mJnZlLmF3YWl0RHJhaW4tLSwwPT09dmUuYXdhaXREcmFpbiYmdyh4ZSwiZGF0YSIpJiYodmUuZmxvd2luZz0hMCxBKHhlKSl9fShYZSk7eGUub24oImRyYWluIixWZSk7dmFyIGtlPSExLF90PSExO2Z1bmN0aW9uIG50KER0KXtVKCJvbmRhdGEiKSxfdD0hMSwhMT09''@;'; put 'put ''PXhlLndyaXRlKER0KSYmIV90JiYoKDE9PT16ZS5waXBlc0NvdW50JiZ6ZS5waXBlcz09PXhlfHx6ZS5waXBlc0NvdW50PjEmJi0xIT09b3QoemUucGlwZXMseGUpKSYmIWtlJiYoVSgiZmFsc2Ugd3JpdGUgcmVzcG9uc2UsIHBhdXNlIix6ZS5hd2FpdERyYWluKSx6ZS5hd2FpdERyYWluKyss''@;'; put 'put ''X3Q9ITApLFhlLnBhdXNlKCkpfWZ1bmN0aW9uIFFlKER0KXtVKCJvbmVycm9yIixEdCksTXQoKSx4ZS5yZW1vdmVMaXN0ZW5lcigiZXJyb3IiLFFlKSwwPT09dyh4ZSwiZXJyb3IiKSYmeGUuZW1pdCgiZXJyb3IiLER0KX1mdW5jdGlvbiB1bigpe3hlLnJlbW92ZUxpc3RlbmVyKCJmaW5pc2gi''@;'; put 'put ''LHl0KSxNdCgpfWZ1bmN0aW9uIHl0KCl7VSgib25maW5pc2giKSx4ZS5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLHVuKSxNdCgpfWZ1bmN0aW9uIE10KCl7VSgidW5waXBlIiksWGUudW5waXBlKHhlKX1yZXR1cm4gWGUub24oImRhdGEiLG50KSxmdW5jdGlvbiBKKHhlLHZlLFhlKXtpZigiZnVu''@;'; put 'put ''Y3Rpb24iPT10eXBlb2YgeGUucHJlcGVuZExpc3RlbmVyKXJldHVybiB4ZS5wcmVwZW5kTGlzdGVuZXIodmUsWGUpO3hlLl9ldmVudHMmJnhlLl9ldmVudHNbdmVdP18oeGUuX2V2ZW50c1t2ZV0pP3hlLl9ldmVudHNbdmVdLnVuc2hpZnQoWGUpOnhlLl9ldmVudHNbdmVdPVtYZSx4ZS5fZXZl''@;'; put 'put ''bnRzW3ZlXV06eGUub24odmUsWGUpfSh4ZSwiZXJyb3IiLFFlKSx4ZS5vbmNlKCJjbG9zZSIsdW4pLHhlLm9uY2UoImZpbmlzaCIseXQpLHhlLmVtaXQoInBpcGUiLFhlKSx6ZS5mbG93aW5nfHwoVSgicGlwZSByZXN1bWUiKSxYZS5yZXN1bWUoKSkseGV9LGllLnByb3RvdHlwZS51bnBpcGU9''@;'; put 'put ''ZnVuY3Rpb24oeGUpe3ZhciB2ZT10aGlzLl9yZWFkYWJsZVN0YXRlLFhlPXtoYXNVbnBpcGVkOiExfTtpZigwPT09dmUucGlwZXNDb3VudClyZXR1cm4gdGhpcztpZigxPT09dmUucGlwZXNDb3VudClyZXR1cm4geGUmJnhlIT09dmUucGlwZXN8fCh4ZXx8KHhlPXZlLnBpcGVzKSx2ZS5waXBl''@;'; put 'put ''cz1udWxsLHZlLnBpcGVzQ291bnQ9MCx2ZS5mbG93aW5nPSExLHhlJiZ4ZS5lbWl0KCJ1bnBpcGUiLHRoaXMsWGUpKSx0aGlzO2lmKCF4ZSl7dmFyIHplPXZlLnBpcGVzLERlPXZlLnBpcGVzQ291bnQ7dmUucGlwZXM9bnVsbCx2ZS5waXBlc0NvdW50PTAsdmUuZmxvd2luZz0hMTtmb3IodmFy''@;'; put 'put ''IEZlPTA7RmU8RGU7RmUrKyl6ZVtGZV0uZW1pdCgidW5waXBlIix0aGlzLHtoYXNVbnBpcGVkOiExfSk7cmV0dXJuIHRoaXN9dmFyIE9lPW90KHZlLnBpcGVzLHhlKTtyZXR1cm4tMT09PU9lfHwodmUucGlwZXMuc3BsaWNlKE9lLDEpLHZlLnBpcGVzQ291bnQtPTEsMT09PXZlLnBpcGVzQ291''@;'; put 'put ''bnQmJih2ZS5waXBlcz12ZS5waXBlc1swXSkseGUuZW1pdCgidW5waXBlIix0aGlzLFhlKSksdGhpc30saWUucHJvdG90eXBlLmFkZExpc3RlbmVyPWllLnByb3RvdHlwZS5vbj1mdW5jdGlvbih4ZSx2ZSl7dmFyIFhlPVAucHJvdG90eXBlLm9uLmNhbGwodGhpcyx4ZSx2ZSk7aWYoImRhdGEi''@;'; put 'put ''PT09eGUpITEhPT10aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcmJnRoaXMucmVzdW1lKCk7ZWxzZSBpZigicmVhZGFibGUiPT09eGUpe3ZhciB6ZT10aGlzLl9yZWFkYWJsZVN0YXRlOyF6ZS5lbmRFbWl0dGVkJiYhemUucmVhZGFibGVMaXN0ZW5pbmcmJih6ZS5yZWFkYWJsZUxpc3Rlbmlu''@;'; put 'put ''Zz16ZS5uZWVkUmVhZGFibGU9ITAsemUuZW1pdHRlZFJlYWRhYmxlPSExLHplLnJlYWRpbmc/emUubGVuZ3RoJiZiKHRoaXMpOkkubmV4dFRpY2soaix0aGlzKSl9cmV0dXJuIFhlfSxpZS5wcm90b3R5cGUucmVzdW1lPWZ1bmN0aW9uKCl7dmFyIHhlPXRoaXMuX3JlYWRhYmxlU3RhdGU7cmV0''@;'; put 'put ''dXJuIHhlLmZsb3dpbmd8fChVKCJyZXN1bWUiKSx4ZS5mbG93aW5nPSEwLGZ1bmN0aW9uIEUoeGUsdmUpe3ZlLnJlc3VtZVNjaGVkdWxlZHx8KHZlLnJlc3VtZVNjaGVkdWxlZD0hMCxJLm5leHRUaWNrKG0seGUsdmUpKX0odGhpcyx4ZSkpLHRoaXN9LGllLnByb3RvdHlwZS5wYXVzZT1mdW5j''@;'; put 'put ''dGlvbigpe3JldHVybiBVKCJjYWxsIHBhdXNlIGZsb3dpbmc9JWoiLHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZyksITEhPT10aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcmJihVKCJwYXVzZSIpLHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZz0hMSx0aGlzLmVtaXQoInBhdXNlIikp''@;'; put 'put ''LHRoaXN9LGllLnByb3RvdHlwZS53cmFwPWZ1bmN0aW9uKHhlKXt2YXIgdmU9dGhpcyxYZT10aGlzLl9yZWFkYWJsZVN0YXRlLHplPSExO2Zvcih2YXIgRGUgaW4geGUub24oImVuZCIsZnVuY3Rpb24oKXtpZihVKCJ3cmFwcGVkIGVuZCIpLFhlLmRlY29kZXImJiFYZS5lbmRlZCl7dmFyIE9l''@;'; put 'put ''PVhlLmRlY29kZXIuZW5kKCk7T2UmJk9lLmxlbmd0aCYmdmUucHVzaChPZSl9dmUucHVzaChudWxsKX0pLHhlLm9uKCJkYXRhIixmdW5jdGlvbihPZSl7VSgid3JhcHBlZCBkYXRhIiksWGUuZGVjb2RlciYmKE9lPVhlLmRlY29kZXIud3JpdGUoT2UpKSxYZS5vYmplY3RNb2RlJiZudWxsPT1P''@;'; put 'put ''ZXx8IShYZS5vYmplY3RNb2RlfHxPZSYmT2UubGVuZ3RoKXx8dmUucHVzaChPZSl8fCh6ZT0hMCx4ZS5wYXVzZSgpKX0pLHhlKXZvaWQgMD09PXRoaXNbRGVdJiYiZnVuY3Rpb24iPT10eXBlb2YgeGVbRGVdJiYodGhpc1tEZV09ZnVuY3Rpb24oT2Upe3JldHVybiBmdW5jdGlvbigpe3JldHVy''@;'; put 'put ''biB4ZVtPZV0uYXBwbHkoeGUsYXJndW1lbnRzKX19KERlKSk7Zm9yKHZhciBGZT0wO0ZlPGVlLmxlbmd0aDtGZSsrKXhlLm9uKGVlW0ZlXSx0aGlzLmVtaXQuYmluZCh0aGlzLGVlW0ZlXSkpO3JldHVybiB0aGlzLl9yZWFkPWZ1bmN0aW9uKE9lKXtVKCJ3cmFwcGVkIF9yZWFkIixPZSksemUm''@;'; put 'put ''Jih6ZT0hMSx4ZS5yZXN1bWUoKSl9LHRoaXN9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpZS5wcm90b3R5cGUsInJlYWRhYmxlSGlnaFdhdGVyTWFyayIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUuaGlnaFdhdGVyTWFya319KSxpZS5f''@;'; put 'put ''ZnJvbUxpc3Q9YWV9LDI5MDk6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz1CO3ZhciBJPXkoNzQwNzUpLF89T2JqZWN0LmNyZWF0ZSh5KDI3NjM3KSk7ZnVuY3Rpb24gZyhGLE8pe3ZhciB6PXRoaXMuX3RyYW5zZm9ybVN0YXRlO3oudHJhbnNmb3JtaW5nPSExO3ZhciBOPXou''@;'; put 'put ''d3JpdGVjYjtpZighTilyZXR1cm4gdGhpcy5lbWl0KCJlcnJvciIsbmV3IEVycm9yKCJ3cml0ZSBjYWxsYmFjayBjYWxsZWQgbXVsdGlwbGUgdGltZXMiKSk7ei53cml0ZWNodW5rPW51bGwsei53cml0ZWNiPW51bGwsbnVsbCE9TyYmdGhpcy5wdXNoKE8pLE4oRik7dmFyIEw9dGhpcy5fcmVh''@;'; put 'put ''ZGFibGVTdGF0ZTtMLnJlYWRpbmc9ITEsKEwubmVlZFJlYWRhYmxlfHxMLmxlbmd0aDxMLmhpZ2hXYXRlck1hcmspJiZ0aGlzLl9yZWFkKEwuaGlnaFdhdGVyTWFyayl9ZnVuY3Rpb24gQihGKXtpZighKHRoaXMgaW5zdGFuY2VvZiBCKSlyZXR1cm4gbmV3IEIoRik7SS5jYWxsKHRoaXMsRiks''@;'; put 'put ''dGhpcy5fdHJhbnNmb3JtU3RhdGU9e2FmdGVyVHJhbnNmb3JtOmcuYmluZCh0aGlzKSxuZWVkVHJhbnNmb3JtOiExLHRyYW5zZm9ybWluZzohMSx3cml0ZWNiOm51bGwsd3JpdGVjaHVuazpudWxsLHdyaXRlZW5jb2Rpbmc6bnVsbH0sdGhpcy5fcmVhZGFibGVTdGF0ZS5uZWVkUmVhZGFibGU9''@;'; put 'put ''ITAsdGhpcy5fcmVhZGFibGVTdGF0ZS5zeW5jPSExLEYmJigiZnVuY3Rpb24iPT10eXBlb2YgRi50cmFuc2Zvcm0mJih0aGlzLl90cmFuc2Zvcm09Ri50cmFuc2Zvcm0pLCJmdW5jdGlvbiI9PXR5cGVvZiBGLmZsdXNoJiYodGhpcy5fZmx1c2g9Ri5mbHVzaCkpLHRoaXMub24oInByZWZpbmlz''@;'; put 'put ''aCIsdyl9ZnVuY3Rpb24gdygpe3ZhciBGPXRoaXM7ImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuX2ZsdXNoP3RoaXMuX2ZsdXNoKGZ1bmN0aW9uKE8seil7UChGLE8seil9KTpQKHRoaXMsbnVsbCxudWxsKX1mdW5jdGlvbiBQKEYsTyx6KXtpZihPKXJldHVybiBGLmVtaXQoImVycm9yIixPKTtp''@;'; put 'put ''ZihudWxsIT16JiZGLnB1c2goeiksRi5fd3JpdGFibGVTdGF0ZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJDYWxsaW5nIHRyYW5zZm9ybSBkb25lIHdoZW4gd3MubGVuZ3RoICE9IDAiKTtpZihGLl90cmFuc2Zvcm1TdGF0ZS50cmFuc2Zvcm1pbmcpdGhyb3cgbmV3IEVycm9yKCJDYWxsaW5n''@;'; put 'put ''IHRyYW5zZm9ybSBkb25lIHdoZW4gc3RpbGwgdHJhbnNmb3JtaW5nIik7cmV0dXJuIEYucHVzaChudWxsKX1fLmluaGVyaXRzPXkoNzE5OTMpLF8uaW5oZXJpdHMoQixJKSxCLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKEYsTyl7cmV0dXJuIHRoaXMuX3RyYW5zZm9ybVN0YXRlLm5lZWRUcmFu''@;'; put 'put ''c2Zvcm09ITEsSS5wcm90b3R5cGUucHVzaC5jYWxsKHRoaXMsRixPKX0sQi5wcm90b3R5cGUuX3RyYW5zZm9ybT1mdW5jdGlvbihGLE8seil7dGhyb3cgbmV3IEVycm9yKCJfdHJhbnNmb3JtKCkgaXMgbm90IGltcGxlbWVudGVkIil9LEIucHJvdG90eXBlLl93cml0ZT1mdW5jdGlvbihGLE8s''@;'; put 'put ''eil7dmFyIE49dGhpcy5fdHJhbnNmb3JtU3RhdGU7aWYoTi53cml0ZWNiPXosTi53cml0ZWNodW5rPUYsTi53cml0ZWVuY29kaW5nPU8sIU4udHJhbnNmb3JtaW5nKXt2YXIgTD10aGlzLl9yZWFkYWJsZVN0YXRlOyhOLm5lZWRUcmFuc2Zvcm18fEwubmVlZFJlYWRhYmxlfHxMLmxlbmd0aDxM''@;'; put 'put ''LmhpZ2hXYXRlck1hcmspJiZ0aGlzLl9yZWFkKEwuaGlnaFdhdGVyTWFyayl9fSxCLnByb3RvdHlwZS5fcmVhZD1mdW5jdGlvbihGKXt2YXIgTz10aGlzLl90cmFuc2Zvcm1TdGF0ZTtudWxsIT09Ty53cml0ZWNodW5rJiZPLndyaXRlY2ImJiFPLnRyYW5zZm9ybWluZz8oTy50cmFuc2Zvcm1p''@;'; put 'put ''bmc9ITAsdGhpcy5fdHJhbnNmb3JtKE8ud3JpdGVjaHVuayxPLndyaXRlZW5jb2RpbmcsTy5hZnRlclRyYW5zZm9ybSkpOk8ubmVlZFRyYW5zZm9ybT0hMH0sQi5wcm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24oRixPKXt2YXIgej10aGlzO0kucHJvdG90eXBlLl9kZXN0cm95LmNhbGwodGhp''@;'; put 'put ''cyxGLGZ1bmN0aW9uKE4pe08oTiksei5lbWl0KCJjbG9zZSIpfSl9fSw0Nzg0OToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDk2NTYpO2Z1bmN0aW9uIGcoRSl7dmFyIG09dGhpczt0aGlzLm5leHQ9bnVsbCx0aGlzLmVudHJ5PW51bGwsdGhpcy5maW5pc2g9ZnVuY3Rpb24oKXsh''@;'; put 'put ''ZnVuY3Rpb24gaihFLG0sQSl7dmFyIGFlPUUuZW50cnk7Zm9yKEUuZW50cnk9bnVsbDthZTspe3ZhciB0ZT1hZS5jYWxsYmFjazttLnBlbmRpbmdjYi0tLHRlKEEpLGFlPWFlLm5leHR9bS5jb3JrZWRSZXF1ZXN0c0ZyZWUubmV4dD1FfShtLEUpfX11ZS5leHBvcnRzPWVlO3ZhciB3LEI9IXBy''@;'; put 'put ''b2Nlc3MuYnJvd3NlciYmWyJ2MC4xMCIsInYwLjkuIl0uaW5kZXhPZihwcm9jZXNzLnZlcnNpb24uc2xpY2UoMCw1KSk+LTE/c2V0SW1tZWRpYXRlOkkubmV4dFRpY2s7ZWUuV3JpdGFibGVTdGF0ZT1ZO3ZhciBQPU9iamVjdC5jcmVhdGUoeSgyNzYzNykpO1AuaW5oZXJpdHM9eSg3MTk5Myk7''@;'; put 'put ''dmFyIHEsRj17ZGVwcmVjYXRlOnkoMzM5OCl9LE89eSgxODM0Miksej15KDI2NTUpLkJ1ZmZlcixOPSh0eXBlb2YgZ2xvYmFsPCJ1Ij9nbG9iYWw6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93OnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnt9KS5VaW50OEFycmF5fHxmdW5jdGlvbigpe30sVT15KDIx''@;'; put 'put ''NTA5KTtmdW5jdGlvbiBXKCl7fWZ1bmN0aW9uIFkoRSxtKXt3PXd8fHkoNzQwNzUpO3ZhciBBPW0gaW5zdGFuY2VvZiB3O3RoaXMub2JqZWN0TW9kZT0hIShFPUV8fHt9KS5vYmplY3RNb2RlLEEmJih0aGlzLm9iamVjdE1vZGU9dGhpcy5vYmplY3RNb2RlfHwhIUUud3JpdGFibGVPYmplY3RN''@;'; put 'put ''b2RlKTt2YXIgYWU9RS5oaWdoV2F0ZXJNYXJrLHRlPUUud3JpdGFibGVIaWdoV2F0ZXJNYXJrO3RoaXMuaGlnaFdhdGVyTWFyaz1hZXx8MD09PWFlP2FlOkEmJih0ZXx8MD09PXRlKT90ZTp0aGlzLm9iamVjdE1vZGU/MTY6MTYzODQsdGhpcy5oaWdoV2F0ZXJNYXJrPU1hdGguZmxvb3IodGhp''@;'; put 'put ''cy5oaWdoV2F0ZXJNYXJrKSx0aGlzLmZpbmFsQ2FsbGVkPSExLHRoaXMubmVlZERyYWluPSExLHRoaXMuZW5kaW5nPSExLHRoaXMuZW5kZWQ9ITEsdGhpcy5maW5pc2hlZD0hMSx0aGlzLmRlc3Ryb3llZD0hMSx0aGlzLmRlY29kZVN0cmluZ3M9ISghMT09PUUuZGVjb2RlU3RyaW5ncyksdGhp''@;'; put 'put ''cy5kZWZhdWx0RW5jb2Rpbmc9RS5kZWZhdWx0RW5jb2Rpbmd8fCJ1dGY4Iix0aGlzLmxlbmd0aD0wLHRoaXMud3JpdGluZz0hMSx0aGlzLmNvcmtlZD0wLHRoaXMuc3luYz0hMCx0aGlzLmJ1ZmZlclByb2Nlc3Npbmc9ITEsdGhpcy5vbndyaXRlPWZ1bmN0aW9uKFVlKXshZnVuY3Rpb24gU2Uo''@;'; put 'put ''RSxtKXt2YXIgQT1FLl93cml0YWJsZVN0YXRlLGFlPUEuc3luYyx0ZT1BLndyaXRlY2I7aWYoZnVuY3Rpb24gVGUoRSl7RS53cml0aW5nPSExLEUud3JpdGVjYj1udWxsLEUubGVuZ3RoLT1FLndyaXRlbGVuLEUud3JpdGVsZW49MH0oQSksbSkhZnVuY3Rpb24gX2UoRSxtLEEsYWUsdGUpey0t''@;'; put 'put ''bS5wZW5kaW5nY2IsQT8oSS5uZXh0VGljayh0ZSxhZSksSS5uZXh0VGljayhULEUsbSksRS5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITAsRS5lbWl0KCJlcnJvciIsYWUpKToodGUoYWUpLEUuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSEwLEUuZW1pdCgiZXJyb3IiLGFlKSxU''@;'; put 'put ''KEUsbSkpfShFLEEsYWUsbSx0ZSk7ZWxzZXt2YXIgc2U9YihBKTshc2UmJiFBLmNvcmtlZCYmIUEuYnVmZmVyUHJvY2Vzc2luZyYmQS5idWZmZXJlZFJlcXVlc3QmJnAoRSxBKSxhZT9CKGplLEUsQSxzZSx0ZSk6amUoRSxBLHNlLHRlKX19KG0sVWUpfSx0aGlzLndyaXRlY2I9bnVsbCx0aGlz''@;'; put 'put ''LndyaXRlbGVuPTAsdGhpcy5idWZmZXJlZFJlcXVlc3Q9bnVsbCx0aGlzLmxhc3RCdWZmZXJlZFJlcXVlc3Q9bnVsbCx0aGlzLnBlbmRpbmdjYj0wLHRoaXMucHJlZmluaXNoZWQ9ITEsdGhpcy5lcnJvckVtaXR0ZWQ9ITEsdGhpcy5idWZmZXJlZFJlcXVlc3RDb3VudD0wLHRoaXMuY29ya2Vk''@;'; put 'put ''UmVxdWVzdHNGcmVlPW5ldyBnKHRoaXMpfWZ1bmN0aW9uIGVlKEUpe2lmKHc9d3x8eSg3NDA3NSksIShxLmNhbGwoZWUsdGhpcyl8fHRoaXMgaW5zdGFuY2VvZiB3KSlyZXR1cm4gbmV3IGVlKEUpO3RoaXMuX3dyaXRhYmxlU3RhdGU9bmV3IFkoRSx0aGlzKSx0aGlzLndyaXRhYmxlPSEwLEUm''@;'; put 'put ''JigiZnVuY3Rpb24iPT10eXBlb2YgRS53cml0ZSYmKHRoaXMuX3dyaXRlPUUud3JpdGUpLCJmdW5jdGlvbiI9PXR5cGVvZiBFLndyaXRldiYmKHRoaXMuX3dyaXRldj1FLndyaXRldiksImZ1bmN0aW9uIj09dHlwZW9mIEUuZGVzdHJveSYmKHRoaXMuX2Rlc3Ryb3k9RS5kZXN0cm95KSwiZnVu''@;'; put 'put ''Y3Rpb24iPT10eXBlb2YgRS5maW5hbCYmKHRoaXMuX2ZpbmFsPUUuZmluYWwpKSxPLmNhbGwodGhpcyl9ZnVuY3Rpb24gbWUoRSxtLEEsYWUsdGUsc2Usd2Upe20ud3JpdGVsZW49YWUsbS53cml0ZWNiPXdlLG0ud3JpdGluZz0hMCxtLnN5bmM9ITAsQT9FLl93cml0ZXYodGUsbS5vbndyaXRl''@;'; put 'put ''KTpFLl93cml0ZSh0ZSxzZSxtLm9ud3JpdGUpLG0uc3luYz0hMX1mdW5jdGlvbiBqZShFLG0sQSxhZSl7QXx8ZnVuY3Rpb24gVihFLG0pezA9PT1tLmxlbmd0aCYmbS5uZWVkRHJhaW4mJihtLm5lZWREcmFpbj0hMSxFLmVtaXQoImRyYWluIikpfShFLG0pLG0ucGVuZGluZ2NiLS0sYWUoKSxU''@;'; put 'put ''KEUsbSl9ZnVuY3Rpb24gcChFLG0pe20uYnVmZmVyUHJvY2Vzc2luZz0hMDt2YXIgQT1tLmJ1ZmZlcmVkUmVxdWVzdDtpZihFLl93cml0ZXYmJkEmJkEubmV4dCl7dmFyIHRlPW5ldyBBcnJheShtLmJ1ZmZlcmVkUmVxdWVzdENvdW50KSxzZT1tLmNvcmtlZFJlcXVlc3RzRnJlZTtzZS5lbnRy''@;'; put 'put ''eT1BO2Zvcih2YXIgd2U9MCxVZT0hMDtBOyl0ZVt3ZV09QSxBLmlzQnVmfHwoVWU9ITEpLEE9QS5uZXh0LHdlKz0xO3RlLmFsbEJ1ZmZlcnM9VWUsbWUoRSxtLCEwLG0ubGVuZ3RoLHRlLCIiLHNlLmZpbmlzaCksbS5wZW5kaW5nY2IrKyxtLmxhc3RCdWZmZXJlZFJlcXVlc3Q9bnVsbCxzZS5u''@;'; put 'put ''ZXh0PyhtLmNvcmtlZFJlcXVlc3RzRnJlZT1zZS5uZXh0LHNlLm5leHQ9bnVsbCk6bS5jb3JrZWRSZXF1ZXN0c0ZyZWU9bmV3IGcobSksbS5idWZmZXJlZFJlcXVlc3RDb3VudD0wfWVsc2V7Zm9yKDtBOyl7dmFyIEplPUEuY2h1bms7aWYobWUoRSxtLCExLG0ub2JqZWN0TW9kZT8xOkplLmxl''@;'; put 'put ''bmd0aCxKZSxBLmVuY29kaW5nLEEuY2FsbGJhY2spLEE9QS5uZXh0LG0uYnVmZmVyZWRSZXF1ZXN0Q291bnQtLSxtLndyaXRpbmcpYnJlYWt9bnVsbD09PUEmJihtLmxhc3RCdWZmZXJlZFJlcXVlc3Q9bnVsbCl9bS5idWZmZXJlZFJlcXVlc3Q9QSxtLmJ1ZmZlclByb2Nlc3Npbmc9ITF9ZnVu''@;'; put 'put ''Y3Rpb24gYihFKXtyZXR1cm4gRS5lbmRpbmcmJjA9PT1FLmxlbmd0aCYmbnVsbD09PUUuYnVmZmVyZWRSZXF1ZXN0JiYhRS5maW5pc2hlZCYmIUUud3JpdGluZ31mdW5jdGlvbiB4KEUsbSl7RS5fZmluYWwoZnVuY3Rpb24oQSl7bS5wZW5kaW5nY2ItLSxBJiZFLmVtaXQoImVycm9yIixBKSxt''@;'; put 'put ''LnByZWZpbmlzaGVkPSEwLEUuZW1pdCgicHJlZmluaXNoIiksVChFLG0pfSl9ZnVuY3Rpb24gVChFLG0pe3ZhciBBPWIobSk7cmV0dXJuIEEmJihmdW5jdGlvbiBDKEUsbSl7IW0ucHJlZmluaXNoZWQmJiFtLmZpbmFsQ2FsbGVkJiYoImZ1bmN0aW9uIj09dHlwZW9mIEUuX2ZpbmFsPyhtLnBl''@;'; put 'put ''bmRpbmdjYisrLG0uZmluYWxDYWxsZWQ9ITAsSS5uZXh0VGljayh4LEUsbSkpOihtLnByZWZpbmlzaGVkPSEwLEUuZW1pdCgicHJlZmluaXNoIikpKX0oRSxtKSwwPT09bS5wZW5kaW5nY2ImJihtLmZpbmlzaGVkPSEwLEUuZW1pdCgiZmluaXNoIikpKSxBfVAuaW5oZXJpdHMoZWUsTyksWS5w''@;'; put 'put ''cm90b3R5cGUuZ2V0QnVmZmVyPWZ1bmN0aW9uKCl7Zm9yKHZhciBtPXRoaXMuYnVmZmVyZWRSZXF1ZXN0LEE9W107bTspQS5wdXNoKG0pLG09bS5uZXh0O3JldHVybiBBfSxmdW5jdGlvbigpe3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkoWS5wcm90b3R5cGUsImJ1ZmZlciIse2dldDpGLmRl''@;'; put 'put ''cHJlY2F0ZShmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldEJ1ZmZlcigpfSwiX3dyaXRhYmxlU3RhdGUuYnVmZmVyIGlzIGRlcHJlY2F0ZWQuIFVzZSBfd3JpdGFibGVTdGF0ZS5nZXRCdWZmZXIgaW5zdGVhZC4iLCJERVAwMDAzIil9KX1jYXRjaHt9fSgpLCJmdW5jdGlvbiI9PXR5cGVvZiBT''@;'; put 'put ''eW1ib2wmJlN5bWJvbC5oYXNJbnN0YW5jZSYmImZ1bmN0aW9uIj09dHlwZW9mIEZ1bmN0aW9uLnByb3RvdHlwZVtTeW1ib2wuaGFzSW5zdGFuY2VdPyhxPUZ1bmN0aW9uLnByb3RvdHlwZVtTeW1ib2wuaGFzSW5zdGFuY2VdLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlZSxTeW1ib2wuaGFzSW5z''@;'; put 'put ''dGFuY2Use3ZhbHVlOmZ1bmN0aW9uKEUpe3JldHVybiEhcS5jYWxsKHRoaXMsRSl8fHRoaXM9PT1lZSYmRSYmRS5fd3JpdGFibGVTdGF0ZSBpbnN0YW5jZW9mIFl9fSkpOnE9ZnVuY3Rpb24oRSl7cmV0dXJuIEUgaW5zdGFuY2VvZiB0aGlzfSxlZS5wcm90b3R5cGUucGlwZT1mdW5jdGlvbigp''@;'; put 'put ''e3RoaXMuZW1pdCgiZXJyb3IiLG5ldyBFcnJvcigiQ2Fubm90IHBpcGUsIG5vdCByZWFkYWJsZSIpKX0sZWUucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKEUsbSxBKXt2YXIgYWU9dGhpcy5fd3JpdGFibGVTdGF0ZSx0ZT0hMSxzZT0hYWUub2JqZWN0TW9kZSYmZnVuY3Rpb24gSyhFKXtyZXR1''@;'; put 'put ''cm4gei5pc0J1ZmZlcihFKXx8RSBpbnN0YW5jZW9mIE59KEUpO3JldHVybiBzZSYmIXouaXNCdWZmZXIoRSkmJihFPWZ1bmN0aW9uIEwoRSl7cmV0dXJuIHouZnJvbShFKX0oRSkpLCJmdW5jdGlvbiI9PXR5cGVvZiBtJiYoQT1tLG09bnVsbCksc2U/bT0iYnVmZmVyIjptfHwobT1hZS5kZWZh''@;'; put 'put ''dWx0RW5jb2RpbmcpLCJmdW5jdGlvbiIhPXR5cGVvZiBBJiYoQT1XKSxhZS5lbmRlZD9mdW5jdGlvbiBKKEUsbSl7dmFyIEE9bmV3IEVycm9yKCJ3cml0ZSBhZnRlciBlbmQiKTtFLmVtaXQoImVycm9yIixBKSxJLm5leHRUaWNrKG0sQSl9KHRoaXMsQSk6KHNlfHxmdW5jdGlvbiBuZShFLG0s''@;'; put 'put ''QSxhZSl7dmFyIHRlPSEwLHNlPSExO3JldHVybiBudWxsPT09QT9zZT1uZXcgVHlwZUVycm9yKCJNYXkgbm90IHdyaXRlIG51bGwgdmFsdWVzIHRvIHN0cmVhbSIpOiJzdHJpbmciIT10eXBlb2YgQSYmdm9pZCAwIT09QSYmIW0ub2JqZWN0TW9kZSYmKHNlPW5ldyBUeXBlRXJyb3IoIkludmFs''@;'; put 'put ''aWQgbm9uLXN0cmluZy9idWZmZXIgY2h1bmsiKSksc2UmJihFLmVtaXQoImVycm9yIixzZSksSS5uZXh0VGljayhhZSxzZSksdGU9ITEpLHRlfSh0aGlzLGFlLEUsQSkpJiYoYWUucGVuZGluZ2NiKyssdGU9ZnVuY3Rpb24gbGUoRSxtLEEsYWUsdGUsc2Upe2lmKCFBKXt2YXIgd2U9ZnVuY3Rp''@;'; put 'put ''b24gaWUoRSxtLEEpe3JldHVybiFFLm9iamVjdE1vZGUmJiExIT09RS5kZWNvZGVTdHJpbmdzJiYic3RyaW5nIj09dHlwZW9mIG0mJihtPXouZnJvbShtLEEpKSxtfShtLGFlLHRlKTthZSE9PXdlJiYoQT0hMCx0ZT0iYnVmZmVyIixhZT13ZSl9dmFyIFVlPW0ub2JqZWN0TW9kZT8xOmFlLmxl''@;'; put 'put ''bmd0aDttLmxlbmd0aCs9VWU7dmFyIEplPW0ubGVuZ3RoPG0uaGlnaFdhdGVyTWFyaztpZihKZXx8KG0ubmVlZERyYWluPSEwKSxtLndyaXRpbmd8fG0uY29ya2VkKXt2YXIgb3Q9bS5sYXN0QnVmZmVyZWRSZXF1ZXN0O20ubGFzdEJ1ZmZlcmVkUmVxdWVzdD17Y2h1bms6YWUsZW5jb2Rpbmc6''@;'; put 'put ''dGUsaXNCdWY6QSxjYWxsYmFjazpzZSxuZXh0Om51bGx9LG90P290Lm5leHQ9bS5sYXN0QnVmZmVyZWRSZXF1ZXN0Om0uYnVmZmVyZWRSZXF1ZXN0PW0ubGFzdEJ1ZmZlcmVkUmVxdWVzdCxtLmJ1ZmZlcmVkUmVxdWVzdENvdW50Kz0xfWVsc2UgbWUoRSxtLCExLFVlLGFlLHRlLHNlKTtyZXR1''@;'; put 'put ''cm4gSmV9KHRoaXMsYWUsc2UsRSxtLEEpKSx0ZX0sZWUucHJvdG90eXBlLmNvcms9ZnVuY3Rpb24oKXt0aGlzLl93cml0YWJsZVN0YXRlLmNvcmtlZCsrfSxlZS5wcm90b3R5cGUudW5jb3JrPWZ1bmN0aW9uKCl7dmFyIEU9dGhpcy5fd3JpdGFibGVTdGF0ZTtFLmNvcmtlZCYmKEUuY29ya2Vk''@;'; put 'put ''LS0sIUUud3JpdGluZyYmIUUuY29ya2VkJiYhRS5idWZmZXJQcm9jZXNzaW5nJiZFLmJ1ZmZlcmVkUmVxdWVzdCYmcCh0aGlzLEUpKX0sZWUucHJvdG90eXBlLnNldERlZmF1bHRFbmNvZGluZz1mdW5jdGlvbihtKXtpZigic3RyaW5nIj09dHlwZW9mIG0mJihtPW0udG9Mb3dlckNhc2UoKSks''@;'; put 'put ''IShbImhleCIsInV0ZjgiLCJ1dGYtOCIsImFzY2lpIiwiYmluYXJ5IiwiYmFzZTY0IiwidWNzMiIsInVjcy0yIiwidXRmMTZsZSIsInV0Zi0xNmxlIiwicmF3Il0uaW5kZXhPZigobSsiIikudG9Mb3dlckNhc2UoKSk+LTEpKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6''@;'; put 'put ''ICIrbSk7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVmYXVsdEVuY29kaW5nPW0sdGhpc30sT2JqZWN0LmRlZmluZVByb3BlcnR5KGVlLnByb3RvdHlwZSwid3JpdGFibGVIaWdoV2F0ZXJNYXJrIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JpdGFi''@;'; put 'put ''bGVTdGF0ZS5oaWdoV2F0ZXJNYXJrfX0pLGVlLnByb3RvdHlwZS5fd3JpdGU9ZnVuY3Rpb24oRSxtLEEpe0EobmV3IEVycm9yKCJfd3JpdGUoKSBpcyBub3QgaW1wbGVtZW50ZWQiKSl9LGVlLnByb3RvdHlwZS5fd3JpdGV2PW51bGwsZWUucHJvdG90eXBlLmVuZD1mdW5jdGlvbihFLG0sQSl7''@;'; put 'put ''dmFyIGFlPXRoaXMuX3dyaXRhYmxlU3RhdGU7ImZ1bmN0aW9uIj09dHlwZW9mIEU/KEE9RSxFPW51bGwsbT1udWxsKToiZnVuY3Rpb24iPT10eXBlb2YgbSYmKEE9bSxtPW51bGwpLG51bGwhPUUmJnRoaXMud3JpdGUoRSxtKSxhZS5jb3JrZWQmJihhZS5jb3JrZWQ9MSx0aGlzLnVuY29yaygp''@;'; put 'put ''KSxhZS5lbmRpbmd8fGZ1bmN0aW9uIEgoRSxtLEEpe20uZW5kaW5nPSEwLFQoRSxtKSxBJiYobS5maW5pc2hlZD9JLm5leHRUaWNrKEEpOkUub25jZSgiZmluaXNoIixBKSksbS5lbmRlZD0hMCxFLndyaXRhYmxlPSExfSh0aGlzLGFlLEEpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZWUucHJv''@;'; put 'put ''dG90eXBlLCJkZXN0cm95ZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5fd3JpdGFibGVTdGF0ZSYmdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWR9LHNldDpmdW5jdGlvbihFKXt0aGlzLl93cml0YWJsZVN0YXRlJiYodGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0''@;'; put 'put ''cm95ZWQ9RSl9fSksZWUucHJvdG90eXBlLmRlc3Ryb3k9VS5kZXN0cm95LGVlLnByb3RvdHlwZS5fdW5kZXN0cm95PVUudW5kZXN0cm95LGVlLnByb3RvdHlwZS5fZGVzdHJveT1mdW5jdGlvbihFLG0pe3RoaXMuZW5kKCksbShFKX19LDI3ODA5Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3Zh''@;'; put 'put ''ciBfPXkoMjY1NSkuQnVmZmVyLGc9eSgxNTM0MCk7ZnVuY3Rpb24gQih3LFAsRil7dy5jb3B5KFAsRil9dWUuZXhwb3J0cz1mdW5jdGlvbigpe2Z1bmN0aW9uIHcoKXsoZnVuY3Rpb24gSSh3LFApe2lmKCEodyBpbnN0YW5jZW9mIFApKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxs''@;'; put 'put ''IGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSkodGhpcyx3KSx0aGlzLmhlYWQ9bnVsbCx0aGlzLnRhaWw9bnVsbCx0aGlzLmxlbmd0aD0wfXJldHVybiB3LnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKEYpe3ZhciBPPXtkYXRhOkYsbmV4dDpudWxsfTt0aGlzLmxlbmd0aD4wP3RoaXMudGFpbC5u''@;'; put 'put ''ZXh0PU86dGhpcy5oZWFkPU8sdGhpcy50YWlsPU8sKyt0aGlzLmxlbmd0aH0sdy5wcm90b3R5cGUudW5zaGlmdD1mdW5jdGlvbihGKXt2YXIgTz17ZGF0YTpGLG5leHQ6dGhpcy5oZWFkfTswPT09dGhpcy5sZW5ndGgmJih0aGlzLnRhaWw9TyksdGhpcy5oZWFkPU8sKyt0aGlzLmxlbmd0aH0s''@;'; put 'put ''dy5wcm90b3R5cGUuc2hpZnQ9ZnVuY3Rpb24oKXtpZigwIT09dGhpcy5sZW5ndGgpe3ZhciBGPXRoaXMuaGVhZC5kYXRhO3JldHVybiB0aGlzLmhlYWQ9MT09PXRoaXMubGVuZ3RoP3RoaXMudGFpbD1udWxsOnRoaXMuaGVhZC5uZXh0LC0tdGhpcy5sZW5ndGgsRn19LHcucHJvdG90eXBlLmNs''@;'; put 'put ''ZWFyPWZ1bmN0aW9uKCl7dGhpcy5oZWFkPXRoaXMudGFpbD1udWxsLHRoaXMubGVuZ3RoPTB9LHcucHJvdG90eXBlLmpvaW49ZnVuY3Rpb24oRil7aWYoMD09PXRoaXMubGVuZ3RoKXJldHVybiIiO2Zvcih2YXIgTz10aGlzLmhlYWQsej0iIitPLmRhdGE7Tz1PLm5leHQ7KXorPUYrTy5kYXRh''@;'; put 'put ''O3JldHVybiB6fSx3LnByb3RvdHlwZS5jb25jYXQ9ZnVuY3Rpb24oRil7aWYoMD09PXRoaXMubGVuZ3RoKXJldHVybiBfLmFsbG9jKDApO2Zvcih2YXIgTz1fLmFsbG9jVW5zYWZlKEY+Pj4wKSx6PXRoaXMuaGVhZCxOPTA7ejspQih6LmRhdGEsTyxOKSxOKz16LmRhdGEubGVuZ3RoLHo9ei5u''@;'; put 'put ''ZXh0O3JldHVybiBPfSx3fSgpLGcmJmcuaW5zcGVjdCYmZy5pbnNwZWN0LmN1c3RvbSYmKHVlLmV4cG9ydHMucHJvdG90eXBlW2cuaW5zcGVjdC5jdXN0b21dPWZ1bmN0aW9uKCl7dmFyIHc9Zy5pbnNwZWN0KHtsZW5ndGg6dGhpcy5sZW5ndGh9KTtyZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5u''@;'; put 'put ''YW1lKyIgIit3fSl9LDIxNTA5Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoOTY1Nik7ZnVuY3Rpb24gQih3LFApe3cuZW1pdCgiZXJyb3IiLFApfXVlLmV4cG9ydHM9e2Rlc3Ryb3k6ZnVuY3Rpb24gXyh3LFApe3ZhciBGPXRoaXM7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUm''@;'; put 'put ''JnRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkfHx0aGlzLl93cml0YWJsZVN0YXRlJiZ0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD8oUD9QKHcpOncmJih0aGlzLl93cml0YWJsZVN0YXRlP3RoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkfHwodGhpcy5fd3JpdGFibGVT''@;'; put 'put ''dGF0ZS5lcnJvckVtaXR0ZWQ9ITAsSS5uZXh0VGljayhCLHRoaXMsdykpOkkubmV4dFRpY2soQix0aGlzLHcpKSx0aGlzKToodGhpcy5fcmVhZGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkPSEwKSx0aGlzLl93cml0YWJsZVN0YXRlJiYodGhpcy5fd3JpdGFibGVT''@;'; put 'put ''dGF0ZS5kZXN0cm95ZWQ9ITApLHRoaXMuX2Rlc3Ryb3kod3x8bnVsbCxmdW5jdGlvbihOKXshUCYmTj9GLl93cml0YWJsZVN0YXRlP0YuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkfHwoRi5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITAsSS5uZXh0VGljayhCLEYsTikpOkkubmV4''@;'; put 'put ''dFRpY2soQixGLE4pOlAmJlAoTil9KSx0aGlzKX0sdW5kZXN0cm95OmZ1bmN0aW9uIGcoKXt0aGlzLl9yZWFkYWJsZVN0YXRlJiYodGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ9ITEsdGhpcy5fcmVhZGFibGVTdGF0ZS5yZWFkaW5nPSExLHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kZWQ9''@;'; put 'put ''ITEsdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmRFbWl0dGVkPSExKSx0aGlzLl93cml0YWJsZVN0YXRlJiYodGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRlZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLmVuZGluZz0hMSx0aGlzLl93cml0YWJs''@;'; put 'put ''ZVN0YXRlLmZpbmFsQ2FsbGVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUucHJlZmluaXNoZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5maW5pc2hlZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMSl9fX0sMTgzNDI6KHVlLFgseSk9Pnt1ZS5leHBvcnRzPXkoNDQzNTYp''@;'; put 'put ''LkV2ZW50RW1pdHRlcn0sMjY1NToodWUsWCx5KT0+e3ZhciBJPXkoODM4MzgpLF89SS5CdWZmZXI7ZnVuY3Rpb24gZyh3LFApe2Zvcih2YXIgRiBpbiB3KVBbRl09d1tGXX1mdW5jdGlvbiBCKHcsUCxGKXtyZXR1cm4gXyh3LFAsRil9Xy5mcm9tJiZfLmFsbG9jJiZfLmFsbG9jVW5zYWZlJiZf''@;'; put 'put ''LmFsbG9jVW5zYWZlU2xvdz91ZS5leHBvcnRzPUk6KGcoSSxYKSxYLkJ1ZmZlcj1CKSxnKF8sQiksQi5mcm9tPWZ1bmN0aW9uKHcsUCxGKXtpZigibnVtYmVyIj09dHlwZW9mIHcpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBub3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gXyh3''@;'; put 'put ''LFAsRil9LEIuYWxsb2M9ZnVuY3Rpb24odyxQLEYpe2lmKCJudW1iZXIiIT10eXBlb2Ygdyl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7dmFyIE89Xyh3KTtyZXR1cm4gdm9pZCAwIT09UD8ic3RyaW5nIj09dHlwZW9mIEY/Ty5maWxsKFAsRik6Ty5m''@;'; put 'put ''aWxsKFApOk8uZmlsbCgwKSxPfSxCLmFsbG9jVW5zYWZlPWZ1bmN0aW9uKHcpe2lmKCJudW1iZXIiIT10eXBlb2Ygdyl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7cmV0dXJuIF8odyl9LEIuYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKHcpe2lmKCJu''@;'; put 'put ''dW1iZXIiIT10eXBlb2Ygdyl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7cmV0dXJuIEkuU2xvd0J1ZmZlcih3KX19LDU5NDI6KHVlLFgseSk9PnsoWD11ZS5leHBvcnRzPXkoMTk2MDkpKS5TdHJlYW09WCxYLlJlYWRhYmxlPVgsWC5Xcml0YWJsZT15''@;'; put 'put ''KDQ3ODQ5KSxYLkR1cGxleD15KDc0MDc1KSxYLlRyYW5zZm9ybT15KDI5MDkpLFguUGFzc1Rocm91Z2g9eSgxODgyMyl9LDM2NjM2Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoODM4MzgpLkJ1ZmZlcixfPXkoNzE5OTMpLGc9eSgxMzY4NiksQj1uZXcgQXJyYXkoMTYpLHc9WzAs''@;'; put 'put ''MSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsNyw0LDEzLDEsMTAsNiwxNSwzLDEyLDAsOSw1LDIsMTQsMTEsOCwzLDEwLDE0LDQsOSwxNSw4LDEsMiw3LDAsNiwxMywxMSw1LDEyLDEsOSwxMSwxMCwwLDgsMTIsNCwxMywzLDcsMTUsMTQsNSw2LDIsNCwwLDUsOSw3LDEyLDIs''@;'; put 'put ''MTAsMTQsMSwzLDgsMTEsNiwxNSwxM10sUD1bNSwxNCw3LDAsOSwyLDExLDQsMTMsNiwxNSw4LDEsMTAsMywxMiw2LDExLDMsNywwLDEzLDUsMTAsMTQsMTUsOCwxMiw0LDksMSwyLDE1LDUsMSwzLDcsMTQsNiw5LDExLDgsMTIsMiwxMCwwLDQsMTMsOCw2LDQsMSwzLDExLDE1LDAsNSwxMiwy''@;'; put 'put ''LDEzLDksNywxMCwxNCwxMiwxNSwxMCw0LDEsNSw4LDcsNiwyLDEzLDE0LDAsMyw5LDExXSxGPVsxMSwxNCwxNSwxMiw1LDgsNyw5LDExLDEzLDE0LDE1LDYsNyw5LDgsNyw2LDgsMTMsMTEsOSw3LDE1LDcsMTIsMTUsOSwxMSw3LDEzLDEyLDExLDEzLDYsNywxNCw5LDEzLDE1LDE0LDgsMTMs''@;'; put 'put ''Niw1LDEyLDcsNSwxMSwxMiwxNCwxNSwxNCwxNSw5LDgsOSwxNCw1LDYsOCw2LDUsMTIsOSwxNSw1LDExLDYsOCwxMywxMiw1LDEyLDEzLDE0LDExLDgsNSw2XSxPPVs4LDksOSwxMSwxMywxNSwxNSw1LDcsNyw4LDExLDE0LDE0LDEyLDYsOSwxMywxNSw3LDEyLDgsOSwxMSw3LDcsMTIsNyw2''@;'; put 'put ''LDE1LDEzLDExLDksNywxNSwxMSw4LDYsNiwxNCwxMiwxMyw1LDE0LDEzLDEzLDcsNSwxNSw1LDgsMTEsMTQsMTQsNiwxNCw2LDksMTIsOSwxMiw1LDE1LDgsOCw1LDEyLDksMTIsNSwxNCw2LDgsMTMsNiw1LDE1LDEzLDExLDExXSx6PVswLDE1MTg1MDAyNDksMTg1OTc3NTM5MywyNDAwOTU5''@;'; put 'put ''NzA4LDI4NDA4NTM4MzhdLE49WzEzNTI4Mjk5MjYsMTU0ODYwMzY4NCwxODM2MDcyNjkxLDIwNTM5OTQyMTcsMF07ZnVuY3Rpb24gTCgpe2cuY2FsbCh0aGlzLDY0KSx0aGlzLl9hPTE3MzI1ODQxOTMsdGhpcy5fYj00MDIzMjMzNDE3LHRoaXMuX2M9MjU2MjM4MzEwMix0aGlzLl9kPTI3MTcz''@;'; put 'put ''Mzg3OCx0aGlzLl9lPTMyODUzNzc1MjB9ZnVuY3Rpb24gSyhKLG5lKXtyZXR1cm4gSjw8bmV8Sj4+PjMyLW5lfWZ1bmN0aW9uIFUoSixuZSxpZSxsZSxtZSxfZSxUZSxTZSl7cmV0dXJuIEsoSisobmVeaWVebGUpK19lK1RlfDAsU2UpK21lfDB9ZnVuY3Rpb24gVyhKLG5lLGllLGxlLG1lLF9l''@;'; put 'put ''LFRlLFNlKXtyZXR1cm4gSyhKKyhuZSZpZXx+bmUmbGUpK19lK1RlfDAsU2UpK21lfDB9ZnVuY3Rpb24gWShKLG5lLGllLGxlLG1lLF9lLFRlLFNlKXtyZXR1cm4gSyhKKygobmV8fmllKV5sZSkrX2UrVGV8MCxTZSkrbWV8MH1mdW5jdGlvbiBxKEosbmUsaWUsbGUsbWUsX2UsVGUsU2Upe3Jl''@;'; put 'put ''dHVybiBLKEorKG5lJmxlfGllJn5sZSkrX2UrVGV8MCxTZSkrbWV8MH1mdW5jdGlvbiBlZShKLG5lLGllLGxlLG1lLF9lLFRlLFNlKXtyZXR1cm4gSyhKKyhuZV4oaWV8fmxlKSkrX2UrVGV8MCxTZSkrbWV8MH1fKEwsZyksTC5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbigpe2Zvcih2YXIg''@;'; put 'put ''Sj1CLG5lPTA7bmU8MTY7KytuZSlKW25lXT10aGlzLl9ibG9jay5yZWFkSW50MzJMRSg0Km5lKTtmb3IodmFyIGllPTB8dGhpcy5fYSxsZT0wfHRoaXMuX2IsbWU9MHx0aGlzLl9jLF9lPTB8dGhpcy5fZCxUZT0wfHRoaXMuX2UsU2U9MHx0aGlzLl9hLGplPTB8dGhpcy5fYixWPTB8dGhpcy5f''@;'; put 'put ''YyxwPTB8dGhpcy5fZCxiPTB8dGhpcy5fZSx4PTA7eDw4MDt4Kz0xKXt2YXIgQyxUO3g8MTY/KEM9VShpZSxsZSxtZSxfZSxUZSxKW3dbeF1dLHpbMF0sRlt4XSksVD1lZShTZSxqZSxWLHAsYixKW1BbeF1dLE5bMF0sT1t4XSkpOng8MzI/KEM9VyhpZSxsZSxtZSxfZSxUZSxKW3dbeF1dLHpb''@;'; put 'put ''MV0sRlt4XSksVD1xKFNlLGplLFYscCxiLEpbUFt4XV0sTlsxXSxPW3hdKSk6eDw0OD8oQz1ZKGllLGxlLG1lLF9lLFRlLEpbd1t4XV0selsyXSxGW3hdKSxUPVkoU2UsamUsVixwLGIsSltQW3hdXSxOWzJdLE9beF0pKTp4PDY0PyhDPXEoaWUsbGUsbWUsX2UsVGUsSlt3W3hdXSx6WzNdLEZb''@;'; put 'put ''eF0pLFQ9VyhTZSxqZSxWLHAsYixKW1BbeF1dLE5bM10sT1t4XSkpOihDPWVlKGllLGxlLG1lLF9lLFRlLEpbd1t4XV0sels0XSxGW3hdKSxUPVUoU2UsamUsVixwLGIsSltQW3hdXSxOWzRdLE9beF0pKSxpZT1UZSxUZT1fZSxfZT1LKG1lLDEwKSxtZT1sZSxsZT1DLFNlPWIsYj1wLHA9SyhW''@;'; put 'put ''LDEwKSxWPWplLGplPVR9dmFyIEg9dGhpcy5fYittZStwfDA7dGhpcy5fYj10aGlzLl9jK19lK2J8MCx0aGlzLl9jPXRoaXMuX2QrVGUrU2V8MCx0aGlzLl9kPXRoaXMuX2UraWUramV8MCx0aGlzLl9lPXRoaXMuX2ErbGUrVnwwLHRoaXMuX2E9SH0sTC5wcm90b3R5cGUuX2RpZ2VzdD1mdW5j''@;'; put 'put ''dGlvbigpe3RoaXMuX2Jsb2NrW3RoaXMuX2Jsb2NrT2Zmc2V0KytdPTEyOCx0aGlzLl9ibG9ja09mZnNldD41NiYmKHRoaXMuX2Jsb2NrLmZpbGwoMCx0aGlzLl9ibG9ja09mZnNldCw2NCksdGhpcy5fdXBkYXRlKCksdGhpcy5fYmxvY2tPZmZzZXQ9MCksdGhpcy5fYmxvY2suZmlsbCgwLHRo''@;'; put 'put ''aXMuX2Jsb2NrT2Zmc2V0LDU2KSx0aGlzLl9ibG9jay53cml0ZVVJbnQzMkxFKHRoaXMuX2xlbmd0aFswXSw1NiksdGhpcy5fYmxvY2sud3JpdGVVSW50MzJMRSh0aGlzLl9sZW5ndGhbMV0sNjApLHRoaXMuX3VwZGF0ZSgpO3ZhciBKPUkuYWxsb2M/SS5hbGxvYygyMCk6bmV3IEkoMjApO3Jl''@;'; put 'put ''dHVybiBKLndyaXRlSW50MzJMRSh0aGlzLl9hLDApLEoud3JpdGVJbnQzMkxFKHRoaXMuX2IsNCksSi53cml0ZUludDMyTEUodGhpcy5fYyw4KSxKLndyaXRlSW50MzJMRSh0aGlzLl9kLDEyKSxKLndyaXRlSW50MzJMRSh0aGlzLl9lLDE2KSxKfSx1ZS5leHBvcnRzPUx9LDI3MDU0Oih1ZSxY''@;'; put 'put ''LHkpPT57dmFyIEk9eSg4MzgzOCksXz1JLkJ1ZmZlcjtmdW5jdGlvbiBnKHcsUCl7Zm9yKHZhciBGIGluIHcpUFtGXT13W0ZdfWZ1bmN0aW9uIEIodyxQLEYpe3JldHVybiBfKHcsUCxGKX1fLmZyb20mJl8uYWxsb2MmJl8uYWxsb2NVbnNhZmUmJl8uYWxsb2NVbnNhZmVTbG93P3VlLmV4cG9y''@;'; put 'put ''dHM9STooZyhJLFgpLFguQnVmZmVyPUIpLEIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoXy5wcm90b3R5cGUpLGcoXyxCKSxCLmZyb209ZnVuY3Rpb24odyxQLEYpe2lmKCJudW1iZXIiPT10eXBlb2Ygdyl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJl''@;'; put 'put ''ciIpO3JldHVybiBfKHcsUCxGKX0sQi5hbGxvYz1mdW5jdGlvbih3LFAsRil7aWYoIm51bWJlciIhPXR5cGVvZiB3KXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTt2YXIgTz1fKHcpO3JldHVybiB2b2lkIDAhPT1QPyJzdHJpbmciPT10eXBlb2YgRj9P''@;'; put 'put ''LmZpbGwoUCxGKTpPLmZpbGwoUCk6Ty5maWxsKDApLE99LEIuYWxsb2NVbnNhZmU9ZnVuY3Rpb24odyl7aWYoIm51bWJlciIhPXR5cGVvZiB3KXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gXyh3KX0sQi5hbGxvY1Vuc2FmZVNsb3c9ZnVu''@;'; put 'put ''Y3Rpb24odyl7aWYoIm51bWJlciIhPXR5cGVvZiB3KXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gSS5TbG93QnVmZmVyKHcpfX0sOTM4MDc6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEIsST15KDgzODM4KSxfPUkuQnVmZmVyLGc9''@;'; put 'put ''e307Zm9yKEIgaW4gSSlJLmhhc093blByb3BlcnR5KEIpJiYoIlNsb3dCdWZmZXIiPT09Qnx8IkJ1ZmZlciI9PT1CfHwoZ1tCXT1JW0JdKSk7dmFyIHc9Zy5CdWZmZXI9e307Zm9yKEIgaW4gXylfLmhhc093blByb3BlcnR5KEIpJiYoImFsbG9jVW5zYWZlIj09PUJ8fCJhbGxvY1Vuc2FmZVNs''@;'; put 'put ''b3ciPT09Qnx8KHdbQl09X1tCXSkpO2lmKGcuQnVmZmVyLnByb3RvdHlwZT1fLnByb3RvdHlwZSwoIXcuZnJvbXx8dy5mcm9tPT09VWludDhBcnJheS5mcm9tKSYmKHcuZnJvbT1mdW5jdGlvbihQLEYsTyl7aWYoIm51bWJlciI9PXR5cGVvZiBQKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAi''@;'; put 'put ''dmFsdWUiIGFyZ3VtZW50IG11c3Qgbm90IGJlIG9mIHR5cGUgbnVtYmVyLiBSZWNlaXZlZCB0eXBlICcrdHlwZW9mIFApO2lmKFAmJnR5cGVvZiBQLmxlbmd0aD4idSIpdGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBC''@;'; put 'put ''dWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgb3IgQXJyYXktbGlrZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgIit0eXBlb2YgUCk7cmV0dXJuIF8oUCxGLE8pfSksdy5hbGxvY3x8KHcuYWxsb2M9ZnVuY3Rpb24oUCxGLE8pe2lmKCJudW1iZXIiIT10eXBlb2YgUCl0aHJvdyBuZXcgVHlwZUVy''@;'; put 'put ''cm9yKCdUaGUgInNpemUiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBudW1iZXIuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgUCk7aWYoUDwwfHxQPj0yKigxPDwzMCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSAiJytQKyciIGlzIGludmFsaWQgZm9yIG9wdGlvbiAic2l6ZSIn''@;'; put 'put ''KTt2YXIgej1fKFApO3JldHVybiBGJiYwIT09Ri5sZW5ndGg/InN0cmluZyI9PXR5cGVvZiBPP3ouZmlsbChGLE8pOnouZmlsbChGKTp6LmZpbGwoMCksen0pLCFnLmtTdHJpbmdNYXhMZW5ndGgpdHJ5e2cua1N0cmluZ01heExlbmd0aD1wcm9jZXNzLmJpbmRpbmcoImJ1ZmZlciIpLmtTdHJp''@;'; put 'put ''bmdNYXhMZW5ndGh9Y2F0Y2h7fWcuY29uc3RhbnRzfHwoZy5jb25zdGFudHM9e01BWF9MRU5HVEg6Zy5rTWF4TGVuZ3RofSxnLmtTdHJpbmdNYXhMZW5ndGgmJihnLmNvbnN0YW50cy5NQVhfU1RSSU5HX0xFTkdUSD1nLmtTdHJpbmdNYXhMZW5ndGgpKSx1ZS5leHBvcnRzPWd9LDk4MDgzOih1''@;'; put 'put ''ZSxYKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgSTshZnVuY3Rpb24oKXt2YXIgXz1YfHx7fTt2b2lkIDAhPT0oST1mdW5jdGlvbigpe3JldHVybiBffS5hcHBseShYLFtdKSkmJih1ZS5leHBvcnRzPUkpLF8uZGVmYXVsdD1fO3ZhciBnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLyIsdz0i''@;'; put 'put ''aHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLEY9L3VybFwoWyInXT8oLis/KVsiJ10/XCkvLE89e3dvZmYyOiJmb250L3dvZmYyIix3b2ZmOiJmb250L3dvZmYiLG90ZjoiYXBwbGljYXRpb24veC1mb250LW9wZW50eXBlIix0dGY6ImFwcGxpY2F0aW9uL3gtZm9udC10dGYiLGVvdDoiYXBw''@;'; put 'put ''bGljYXRpb24vdm5kLm1zLWZvbnRvYmplY3QiLHNmbnQ6ImFwcGxpY2F0aW9uL2ZvbnQtc2ZudCIsc3ZnOiJpbWFnZS9zdmcreG1sIn0sej1mdW5jdGlvbihiKXtyZXR1cm4gYiBpbnN0YW5jZW9mIEhUTUxFbGVtZW50fHxiIGluc3RhbmNlb2YgU1ZHRWxlbWVudH0sTj1mdW5jdGlvbihiKXtp''@;'; put 'put ''ZigheihiKSl0aHJvdyBuZXcgRXJyb3IoImFuIEhUTUxFbGVtZW50IG9yIFNWR0VsZW1lbnQgaXMgcmVxdWlyZWQ7IGdvdCAiK2IpfSxMPWZ1bmN0aW9uKGIpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbih4LEMpe3ooYik/eChiKTpDKG5ldyBFcnJvcigiYW4gSFRNTEVsZW1lbnQgb3Ig''@;'; put 'put ''U1ZHRWxlbWVudCBpcyByZXF1aXJlZDsgZ290ICIrYikpfSl9LFU9ZnVuY3Rpb24oYil7dmFyIHg9T2JqZWN0LmtleXMoTykuZmlsdGVyKGZ1bmN0aW9uKEMpe3JldHVybiBiLmluZGV4T2YoIi4iK0MpPjB9KS5tYXAoZnVuY3Rpb24oQyl7cmV0dXJuIE9bQ119KTtyZXR1cm4geD94WzBdOihj''@;'; put 'put ''b25zb2xlLmVycm9yKCJVbmtub3duIGZvbnQgZm9ybWF0IGZvciAiK2IrIi4gRm9udHMgbWF5IG5vdCBiZSB3b3JraW5nIGNvcnJlY3RseS4iKSwiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIil9LFk9ZnVuY3Rpb24oYix4LEMpe3ZhciBUPWIudmlld0JveCYmYi52aWV3Qm94LmJhc2VWYWwm''@;'; put 'put ''JmIudmlld0JveC5iYXNlVmFsW0NdfHxudWxsIT09eC5nZXRBdHRyaWJ1dGUoQykmJiF4LmdldEF0dHJpYnV0ZShDKS5tYXRjaCgvJSQvKSYmcGFyc2VJbnQoeC5nZXRBdHRyaWJ1dGUoQykpfHxiLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpW0NdfHxwYXJzZUludCh4LnN0eWxlW0NdKXx8cGFy''@;'; put 'put ''c2VJbnQod2luZG93LmdldENvbXB1dGVkU3R5bGUoYikuZ2V0UHJvcGVydHlWYWx1ZShDKSk7cmV0dXJuIHR5cGVvZiBUPiJ1Inx8bnVsbD09PVR8fGlzTmFOKHBhcnNlRmxvYXQoVCkpPzA6VH0sSj1mdW5jdGlvbihiKXtmb3IodmFyIHg9d2luZG93LmF0b2IoYi5zcGxpdCgiLCIpWzFdKSxD''@;'; put 'put ''PWIuc3BsaXQoIiwiKVswXS5zcGxpdCgiOiIpWzFdLnNwbGl0KCI7IilbMF0sVD1uZXcgQXJyYXlCdWZmZXIoeC5sZW5ndGgpLEg9bmV3IFVpbnQ4QXJyYXkoVCksaj0wO2o8eC5sZW5ndGg7aisrKUhbal09eC5jaGFyQ29kZUF0KGopO3JldHVybiBuZXcgQmxvYihbVF0se3R5cGU6Q30pfSxt''@;'; put 'put ''ZT17fSxUZT1udWxsLGplPWZ1bmN0aW9uKGIseCl7dmFyIEM9eHx8e30sVD1DLnNlbGVjdG9yUmVtYXAsSD1DLm1vZGlmeVN0eWxlLEU9Qy5mb250cyxtPUMuZXhjbHVkZVVudXNlZENzcyxBPUMubW9kaWZ5Q3NzfHxmdW5jdGlvbih3ZSxVZSl7cmV0dXJuKFQ/VCh3ZSk6d2UpKyJ7IisoSD9I''@;'; put 'put ''KFVlKTpVZSkrIn1cbiJ9LGFlPVtdLHRlPXR5cGVvZiBFPiJ1IixzZT1FfHxbXTtyZXR1cm4oVGV8fChUZT1BcnJheS5mcm9tKGRvY3VtZW50LnN0eWxlU2hlZXRzKS5tYXAoZnVuY3Rpb24oYil7dHJ5e3JldHVybntydWxlczpiLmNzc1J1bGVzLGhyZWY6Yi5ocmVmfX1jYXRjaCh4KXtyZXR1''@;'; put 'put ''cm4gY29uc29sZS53YXJuKCJTdHlsZXNoZWV0IGNvdWxkIG5vdCBiZSBsb2FkZWQ6ICIrYi5ocmVmLHgpLHt9fX0pKSkuZm9yRWFjaChmdW5jdGlvbih3ZSl7dmFyIFVlPXdlLnJ1bGVzLEplPXdlLmhyZWY7VWUmJkFycmF5LmZyb20oVWUpLmZvckVhY2goZnVuY3Rpb24ob3Qpe2lmKHR5cGVv''@;'; put 'put ''ZiBvdC5zdHlsZTwidSIpaWYoZnVuY3Rpb24oYix4KXtpZih4KXRyeXtyZXR1cm4gYi5xdWVyeVNlbGVjdG9yKHgpfHxiLnBhcmVudE5vZGUmJmIucGFyZW50Tm9kZS5xdWVyeVNlbGVjdG9yKHgpfWNhdGNoKEMpe2NvbnNvbGUud2FybignSW52YWxpZCBDU1Mgc2VsZWN0b3IgIicreCsnIics''@;'; put 'put ''Qyl9fShiLG90LnNlbGVjdG9yVGV4dCkpYWUucHVzaChBKG90LnNlbGVjdG9yVGV4dCxvdC5zdHlsZS5jc3NUZXh0KSk7ZWxzZSBpZih0ZSYmb3QuY3NzVGV4dC5tYXRjaCgvXkBmb250LWZhY2UvKSl7dmFyIHhlPWZ1bmN0aW9uKGIseCl7dmFyIEM9Yi5jc3NUZXh0Lm1hdGNoKEYpLFQ9QyYm''@;'; put 'put ''Q1sxXXx8IiI7aWYoVCYmIVQubWF0Y2goL15kYXRhOi8pJiYiYWJvdXQ6YmxhbmsiIT09VCl7dmFyIEg9VC5zdGFydHNXaXRoKCIuLi8iKT94KyIvLi4vIitUOlQuc3RhcnRzV2l0aCgiLi8iKT94KyIvLiIrVDpUO3JldHVybnt0ZXh0OmIuY3NzVGV4dCxmb3JtYXQ6VShIKSx1cmw6SH19fShv''@;'; put 'put ''dCxKZSk7eGUmJnNlLnB1c2goeGUpfWVsc2UgbXx8YWUucHVzaChvdC5jc3NUZXh0KX0pfSksZnVuY3Rpb24oYil7cmV0dXJuIFByb21pc2UuYWxsKGIubWFwKGZ1bmN0aW9uKHgpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihDLFQpe2lmKG1lW3gudXJsXSlyZXR1cm4gQyhtZVt4LnVy''@;'; put 'put ''bF0pO3ZhciBIPW5ldyBYTUxIdHRwUmVxdWVzdDtILmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLGZ1bmN0aW9uKCl7dmFyIGo9ZnVuY3Rpb24oYil7Zm9yKHZhciB4PSIiLEM9bmV3IFVpbnQ4QXJyYXkoYiksVD0wO1Q8Qy5ieXRlTGVuZ3RoO1QrKyl4Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKENb''@;'; put 'put ''VF0pO3JldHVybiB3aW5kb3cuYnRvYSh4KX0oSC5yZXNwb25zZSksRT14LnRleHQucmVwbGFjZShGLCd1cmwoImRhdGE6Jyt4LmZvcm1hdCsiO2Jhc2U2NCwiK2orJyIpJykrIlxuIjttZVt4LnVybF09RSxDKEUpfSksSC5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsZnVuY3Rpb24oail7Y29u''@;'; put 'put ''c29sZS53YXJuKCJGYWlsZWQgdG8gbG9hZCBmb250IGZyb206ICIreC51cmwsaiksbWVbeC51cmxdPW51bGwsQyhudWxsKX0pLEguYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGZ1bmN0aW9uKGope2NvbnNvbGUud2FybigiQWJvcnRlZCBsb2FkaW5nIGZvbnQgZnJvbTogIit4LnVybCxqKSxD''@;'; put 'put ''KG51bGwpfSksSC5vcGVuKCJHRVQiLHgudXJsKSxILnJlc3BvbnNlVHlwZT0iYXJyYXlidWZmZXIiLEguc2VuZCgpfSl9KSkudGhlbihmdW5jdGlvbih4KXtyZXR1cm4geC5maWx0ZXIoZnVuY3Rpb24oQyl7cmV0dXJuIEN9KS5qb2luKCIiKX0pfShzZSkudGhlbihmdW5jdGlvbih3ZSl7cmV0''@;'; put 'put ''dXJuIGFlLmpvaW4oIlxuIikrd2V9KX0sVj1mdW5jdGlvbigpe2lmKCFuYXZpZ2F0b3IubXNTYXZlT3JPcGVuQmxvYiYmISgiZG93bmxvYWQiaW4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpKSlyZXR1cm57cG9wdXA6d2luZG93Lm9wZW4oKX19O18ucHJlcGFyZVN2Zz1mdW5jdGlvbihw''@;'; put 'put ''LGIseCl7TihwKTt2YXIgQz1ifHx7fSxUPUMubGVmdCxIPXZvaWQgMD09PVQ/MDpULGo9Qy50b3AsRT12b2lkIDA9PT1qPzA6aixtPUMud2lkdGgsQT1DLmhlaWdodCxhZT1DLnNjYWxlLHRlPXZvaWQgMD09PWFlPzE6YWUsc2U9Qy5yZXNwb25zaXZlLHdlPXZvaWQgMCE9PXNlJiZzZSxVZT1D''@;'; put 'put ''LmV4Y2x1ZGVDc3MsSmU9dm9pZCAwIT09VWUmJlVlO3JldHVybiBmdW5jdGlvbihiKXtyZXR1cm4gUHJvbWlzZS5hbGwoQXJyYXkuZnJvbShiLnF1ZXJ5U2VsZWN0b3JBbGwoImltYWdlIikpLm1hcChmdW5jdGlvbih4KXt2YXIgQz14LmdldEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnczLm9y''@;'; put 'put ''Zy8xOTk5L3hsaW5rIiwiaHJlZiIpfHx4LmdldEF0dHJpYnV0ZSgiaHJlZiIpO3JldHVybiBDPyhmdW5jdGlvbihiKXtyZXR1cm4gYiYmMD09PWIubGFzdEluZGV4T2YoImh0dHAiLDApJiYtMT09PWIubGFzdEluZGV4T2Yod2luZG93LmxvY2F0aW9uLmhvc3QpfShDKSYmKEMrPSgtMT09PUMu''@;'; put 'put ''aW5kZXhPZigiPyIpPyI/IjoiJiIpKyJ0PSIrKG5ldyBEYXRlKS52YWx1ZU9mKCkpLG5ldyBQcm9taXNlKGZ1bmN0aW9uKFQsSCl7dmFyIGo9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksRT1uZXcgSW1hZ2U7RS5jcm9zc09yaWdpbj0iYW5vbnltb3VzIixFLnNyYz1DLEUub25l''@;'; put 'put ''cnJvcj1mdW5jdGlvbigpe3JldHVybiBIKG5ldyBFcnJvcigiQ291bGQgbm90IGxvYWQgIitDKSl9LEUub25sb2FkPWZ1bmN0aW9uKCl7ai53aWR0aD1FLndpZHRoLGouaGVpZ2h0PUUuaGVpZ2h0LGouZ2V0Q29udGV4dCgiMmQiKS5kcmF3SW1hZ2UoRSwwLDApLHguc2V0QXR0cmlidXRlTlMo''@;'; put 'put ''Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLCJocmVmIixqLnRvRGF0YVVSTCgiaW1hZ2UvcG5nIikpLFQoITApfX0pKTpQcm9taXNlLnJlc29sdmUobnVsbCl9KSl9KHApLnRoZW4oZnVuY3Rpb24oKXt2YXIgb3Q9cC5jbG9uZU5vZGUoITApO290LnN0eWxlLmJhY2tncm91bmRDb2xv''@;'; put 'put ''cj0oYnx8e30pLmJhY2tncm91bmRDb2xvcnx8cC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I7dmFyIHhlPWZ1bmN0aW9uKGIseCxDLFQpe2lmKCJzdmciPT09Yi50YWdOYW1lKXJldHVybnt3aWR0aDpDfHxZKGIseCwid2lkdGgiKSxoZWlnaHQ6VHx8WShiLHgsImhlaWdodCIpfTtpZihiLmdldEJC''@;'; put 'put ''b3gpe3ZhciBIPWIuZ2V0QkJveCgpO3JldHVybnt3aWR0aDpILngrSC53aWR0aCxoZWlnaHQ6SC55K0guaGVpZ2h0fX19KHAsb3QsbSxBKSx2ZT14ZS53aWR0aCxYZT14ZS5oZWlnaHQ7aWYoInN2ZyIhPT1wLnRhZ05hbWUpe2lmKCFwLmdldEJCb3gpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJv''@;'; put 'put ''cigiQXR0ZW1wdGVkIHRvIHJlbmRlciBub24tU1ZHIGVsZW1lbnQiLHApO251bGwhPW90LmdldEF0dHJpYnV0ZSgidHJhbnNmb3JtIikmJm90LnNldEF0dHJpYnV0ZSgidHJhbnNmb3JtIixvdC5nZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIpLnJlcGxhY2UoL3RyYW5zbGF0ZVwoLio/XCkvLCIi''@;'; put 'put ''KSk7dmFyIHplPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJzdmciKTt6ZS5hcHBlbmRDaGlsZChvdCksb3Q9emV9aWYob3Quc2V0QXR0cmlidXRlKCJ2ZXJzaW9uIiwiMS4xIiksb3Quc2V0QXR0cmlidXRlKCJ2aWV3Qm94IixbSCxFLHZl''@;'; put 'put ''LFhlXS5qb2luKCIgIikpLG90LmdldEF0dHJpYnV0ZSgieG1sbnMiKXx8b3Quc2V0QXR0cmlidXRlTlMoZywieG1sbnMiLHcpLG90LmdldEF0dHJpYnV0ZSgieG1sbnM6eGxpbmsiKXx8b3Quc2V0QXR0cmlidXRlTlMoZywieG1sbnM6eGxpbmsiLCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hs''@;'; put 'put ''aW5rIiksd2U/KG90LnJlbW92ZUF0dHJpYnV0ZSgid2lkdGgiKSxvdC5yZW1vdmVBdHRyaWJ1dGUoImhlaWdodCIpLG90LnNldEF0dHJpYnV0ZSgicHJlc2VydmVBc3BlY3RSYXRpbyIsInhNaW5ZTWluIG1lZXQiKSk6KG90LnNldEF0dHJpYnV0ZSgid2lkdGgiLHZlKnRlKSxvdC5zZXRBdHRy''@;'; put 'put ''aWJ1dGUoImhlaWdodCIsWGUqdGUpKSxBcnJheS5mcm9tKG90LnF1ZXJ5U2VsZWN0b3JBbGwoImZvcmVpZ25PYmplY3QgPiAqIikpLmZvckVhY2goZnVuY3Rpb24oT2Upe09lLnNldEF0dHJpYnV0ZU5TKGcsInhtbG5zIiwic3ZnIj09PU9lLnRhZ05hbWU/dzoiaHR0cDovL3d3dy53My5vcmcv''@;'; put 'put ''MTk5OS94aHRtbCIpfSksIUplKXJldHVybiBqZShwLGIpLnRoZW4oZnVuY3Rpb24oT2Upe3ZhciBJZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO0llLnNldEF0dHJpYnV0ZSgidHlwZSIsInRleHQvY3NzIiksSWUuaW5uZXJIVE1MPSI8IVtDREFUQVtcbiIrT2UrIlxuXV0+Ijt2''@;'; put 'put ''YXIgVmU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGVmcyIpO1ZlLmFwcGVuZENoaWxkKEllKSxvdC5pbnNlcnRCZWZvcmUoVmUsb3QuZmlyc3RDaGlsZCk7dmFyIGtlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2tlLmFwcGVuZENoaWxkKG90KTt2YXIgQWU9a2UuaW5uZXJIVE1M''@;'; put 'put ''LnJlcGxhY2UoL05TXGQrOmhyZWYvZ2ksJ3htbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bGluazpocmVmJyk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHgpcmV0dXJue3NyYzpBZSx3aWR0aDp2ZSxoZWlnaHQ6WGV9O3goQWUsdmUsWGUpfSk7dmFyIERlPWRvY3Vt''@;'; put 'put ''ZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO0RlLmFwcGVuZENoaWxkKG90KTt2YXIgRmU9RGUuaW5uZXJIVE1MO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB4KXJldHVybntzcmM6RmUsd2lkdGg6dmUsaGVpZ2h0OlhlfTt4KEZlLHZlLFhlKX0pfSxfLnN2Z0FzRGF0YVVyaT1mdW5jdGlvbihwLGIs''@;'; put 'put ''eCl7cmV0dXJuIE4ocCksXy5wcmVwYXJlU3ZnKHAsYikudGhlbihmdW5jdGlvbihDKXt2YXIgSD1DLndpZHRoLGo9Qy5oZWlnaHQsRT0iZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCwiK3dpbmRvdy5idG9hKGZ1bmN0aW9uKGIpe3JldHVybiBkZWNvZGVVUklDb21wb25lbnQoZW5jb2RlVVJJ''@;'; put 'put ''Q29tcG9uZW50KGIpLnJlcGxhY2UoLyUoWzAtOUEtRl17Mn0pL2csZnVuY3Rpb24oeCxDKXt2YXIgVD1TdHJpbmcuZnJvbUNoYXJDb2RlKCIweCIrQyk7cmV0dXJuIiUiPT09VD8iJTI1IjpUfSkpfSgnPD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcg''@;'; put 'put ''UFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCIgWzwhRU5USVRZIG5ic3AgIiYjMTYwOyI+XT4nK0Muc3JjKSk7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHgmJngoRSxILGopLEV9KX0sXy5z''@;'; put 'put ''dmdBc1BuZ1VyaT1mdW5jdGlvbihwLGIseCl7TihwKTt2YXIgQz1ifHx7fSxUPUMuZW5jb2RlclR5cGUsSD12b2lkIDA9PT1UPyJpbWFnZS9wbmciOlQsaj1DLmVuY29kZXJPcHRpb25zLEU9dm9pZCAwPT09aj8uODpqLG09Qy5jYW52ZyxBPWZ1bmN0aW9uKHRlKXt2YXIgc2U9dGUuc3JjLHdl''@;'; put 'put ''PXRlLndpZHRoLFVlPXRlLmhlaWdodCxKZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSxvdD1KZS5nZXRDb250ZXh0KCIyZCIpLHhlPXdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvfHwxO0plLndpZHRoPXdlKnhlLEplLmhlaWdodD1VZSp4ZSxKZS5zdHlsZS53aWR0aD1KZS53aWR0''@;'; put 'put ''aCsicHgiLEplLnN0eWxlLmhlaWdodD1KZS5oZWlnaHQrInB4IixvdC5zZXRUcmFuc2Zvcm0oeGUsMCwwLHhlLDAsMCksbT9tKEplLHNlKTpvdC5kcmF3SW1hZ2Uoc2UsMCwwKTt2YXIgdmU9dm9pZCAwO3RyeXt2ZT1KZS50b0RhdGFVUkwoSCxFKX1jYXRjaChYZSl7aWYodHlwZW9mIFNlY3Vy''@;'; put 'put ''aXR5RXJyb3I8InUiJiZYZSBpbnN0YW5jZW9mIFNlY3VyaXR5RXJyb3J8fCJTZWN1cml0eUVycm9yIj09PVhlLm5hbWUpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiUmVuZGVyZWQgU1ZHIGltYWdlcyBjYW5ub3QgYmUgZG93bmxvYWRlZCBpbiB0aGlzIGJyb3dzZXIuIik7dGhyb3cgWGV9''@;'; put 'put ''cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHgmJngodmUsSmUud2lkdGgsSmUuaGVpZ2h0KSxQcm9taXNlLnJlc29sdmUodmUpfTtyZXR1cm4gbT9fLnByZXBhcmVTdmcocCxiKS50aGVuKEEpOl8uc3ZnQXNEYXRhVXJpKHAsYikudGhlbihmdW5jdGlvbihhZSl7cmV0dXJuIG5ldyBQcm9taXNl''@;'; put 'put ''KGZ1bmN0aW9uKHRlLHNlKXt2YXIgd2U9bmV3IEltYWdlO3dlLm9ubG9hZD1mdW5jdGlvbigpe3JldHVybiB0ZShBKHtzcmM6d2Usd2lkdGg6d2Uud2lkdGgsaGVpZ2h0OndlLmhlaWdodH0pKX0sd2Uub25lcnJvcj1mdW5jdGlvbigpe3NlKCJUaGVyZSB3YXMgYW4gZXJyb3IgbG9hZGluZyB0''@;'; put 'put ''aGUgZGF0YSBVUkkgYXMgYW4gaW1hZ2Ugb24gdGhlIGZvbGxvd2luZyBTVkdcbiIrd2luZG93LmF0b2IoYWUuc2xpY2UoMjYpKSsiT3BlbiB0aGUgZm9sbG93aW5nIGxpbmsgdG8gc2VlIGJyb3dzZXIncyBkaWFnbm9zaXNcbiIrYWUpfSx3ZS5zcmM9YWV9KX0pfSxfLmRvd25sb2FkPWZ1bmN0''@;'; put 'put ''aW9uKHAsYix4KXtpZihuYXZpZ2F0b3IubXNTYXZlT3JPcGVuQmxvYiluYXZpZ2F0b3IubXNTYXZlT3JPcGVuQmxvYihKKGIpLHApO2Vsc2V7dmFyIEM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpO2lmKCJkb3dubG9hZCJpbiBDKXtDLmRvd25sb2FkPXAsQy5zdHlsZS5kaXNwbGF5PSJu''@;'; put 'put ''b25lIixkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKEMpO3RyeXt2YXIgVD1KKGIpLEg9VVJMLmNyZWF0ZU9iamVjdFVSTChUKTtDLmhyZWY9SCxDLm9uY2xpY2s9ZnVuY3Rpb24oKXtyZXR1cm4gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uKCl7cmV0dXJuIFVSTC5yZXZva2VPYmpl''@;'; put 'put ''Y3RVUkwoSCl9KX19Y2F0Y2goail7Y29uc29sZS5lcnJvcihqKSxjb25zb2xlLndhcm4oIkVycm9yIHdoaWxlIGdldHRpbmcgb2JqZWN0IFVSTC4gRmFsbGluZyBiYWNrIHRvIHN0cmluZyBVUkwuIiksQy5ocmVmPWJ9Qy5jbGljaygpLGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoQyl9ZWxz''@;'; put 'put ''ZSB4JiZ4LnBvcHVwJiYoeC5wb3B1cC5kb2N1bWVudC50aXRsZT1wLHgucG9wdXAubG9jYXRpb24ucmVwbGFjZShiKSl9fSxfLnNhdmVTdmc9ZnVuY3Rpb24ocCxiLHgpe3ZhciBDPVYoKTtyZXR1cm4gTChwKS50aGVuKGZ1bmN0aW9uKFQpe3JldHVybiBfLnN2Z0FzRGF0YVVyaShULHh8fHt9''@;'; put 'put ''KX0pLnRoZW4oZnVuY3Rpb24oVCl7cmV0dXJuIF8uZG93bmxvYWQoYixULEMpfSl9LF8uc2F2ZVN2Z0FzUG5nPWZ1bmN0aW9uKHAsYix4KXt2YXIgQz1WKCk7cmV0dXJuIEwocCkudGhlbihmdW5jdGlvbihUKXtyZXR1cm4gXy5zdmdBc1BuZ1VyaShULHh8fHt9KX0pLnRoZW4oZnVuY3Rpb24o''@;'; put 'put ''VCl7cmV0dXJuIF8uZG93bmxvYWQoYixULEMpfSl9fSgpfSw3MDQ2MzoodWUsWCx5KT0+e3ZhciBJPXkoMjcwNTQpLkJ1ZmZlcjtmdW5jdGlvbiBfKGcsQil7dGhpcy5fYmxvY2s9SS5hbGxvYyhnKSx0aGlzLl9maW5hbFNpemU9Qix0aGlzLl9ibG9ja1NpemU9Zyx0aGlzLl9sZW49MH1fLnBy''@;'; put 'put ''b3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oZyxCKXsic3RyaW5nIj09dHlwZW9mIGcmJihnPUkuZnJvbShnLEI9Qnx8InV0ZjgiKSk7Zm9yKHZhciB3PXRoaXMuX2Jsb2NrLFA9dGhpcy5fYmxvY2tTaXplLEY9Zy5sZW5ndGgsTz10aGlzLl9sZW4sej0wO3o8Rjspe2Zvcih2YXIgTj1PJVAsTD1N''@;'; put 'put ''YXRoLm1pbihGLXosUC1OKSxLPTA7SzxMO0srKyl3W04rS109Z1t6K0tdO3orPUwsKE8rPUwpJVA9PTAmJnRoaXMuX3VwZGF0ZSh3KX1yZXR1cm4gdGhpcy5fbGVuKz1GLHRoaXN9LF8ucHJvdG90eXBlLmRpZ2VzdD1mdW5jdGlvbihnKXt2YXIgQj10aGlzLl9sZW4ldGhpcy5fYmxvY2tTaXpl''@;'; put 'put ''O3RoaXMuX2Jsb2NrW0JdPTEyOCx0aGlzLl9ibG9jay5maWxsKDAsQisxKSxCPj10aGlzLl9maW5hbFNpemUmJih0aGlzLl91cGRhdGUodGhpcy5fYmxvY2spLHRoaXMuX2Jsb2NrLmZpbGwoMCkpO3ZhciB3PTgqdGhpcy5fbGVuO2lmKHc8PTQyOTQ5NjcyOTUpdGhpcy5fYmxvY2sud3JpdGVV''@;'; put 'put ''SW50MzJCRSh3LHRoaXMuX2Jsb2NrU2l6ZS00KTtlbHNle3ZhciBQPSg0Mjk0OTY3Mjk1JncpPj4+MDt0aGlzLl9ibG9jay53cml0ZVVJbnQzMkJFKCh3LVApLzQyOTQ5NjcyOTYsdGhpcy5fYmxvY2tTaXplLTgpLHRoaXMuX2Jsb2NrLndyaXRlVUludDMyQkUoUCx0aGlzLl9ibG9ja1NpemUt''@;'; put 'put ''NCl9dGhpcy5fdXBkYXRlKHRoaXMuX2Jsb2NrKTt2YXIgTz10aGlzLl9oYXNoKCk7cmV0dXJuIGc/Ty50b1N0cmluZyhnKTpPfSxfLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJfdXBkYXRlIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgc3ViY2xhc3MiKX0s''@;'; put 'put ''dWUuZXhwb3J0cz1ffSwyNTQ0MzoodWUsWCx5KT0+e3ZhciBJPXVlLmV4cG9ydHM9ZnVuY3Rpb24oZyl7Zz1nLnRvTG93ZXJDYXNlKCk7dmFyIEI9SVtnXTtpZighQil0aHJvdyBuZXcgRXJyb3IoZysiIGlzIG5vdCBzdXBwb3J0ZWQgKHdlIGFjY2VwdCBwdWxsIHJlcXVlc3RzKSIpO3JldHVy''@;'; put 'put ''biBuZXcgQn07SS5zaGE9eSg0ODU4NSksSS5zaGExPXkoMjEyNzApLEkuc2hhMjI0PXkoNDI3MDkpLEkuc2hhMjU2PXkoMzIxNDgpLEkuc2hhMzg0PXkoNTE4NTYpLEkuc2hhNTEyPXkoMzEyMSl9LDQ4NTg1Oih1ZSxYLHkpPT57dmFyIEk9eSg3MTk5MyksXz15KDcwNDYzKSxnPXkoMjcwNTQp''@;'; put 'put ''LkJ1ZmZlcixCPVsxNTE4NTAwMjQ5LDE4NTk3NzUzOTMsLTE4OTQwMDc1ODgsLTg5OTQ5NzUxNF0sdz1uZXcgQXJyYXkoODApO2Z1bmN0aW9uIFAoKXt0aGlzLmluaXQoKSx0aGlzLl93PXcsXy5jYWxsKHRoaXMsNjQsNTYpfWZ1bmN0aW9uIEYoTil7cmV0dXJuIE48PDV8Tj4+PjI3fWZ1bmN0''@;'; put 'put ''aW9uIE8oTil7cmV0dXJuIE48PDMwfE4+Pj4yfWZ1bmN0aW9uIHooTixMLEssVSl7cmV0dXJuIDA9PT1OP0wmS3x+TCZVOjI9PT1OP0wmS3xMJlV8SyZVOkxeS15VfUkoUCxfKSxQLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2E9MTczMjU4NDE5Myx0aGlzLl9iPTQw''@;'; put 'put ''MjMyMzM0MTcsdGhpcy5fYz0yNTYyMzgzMTAyLHRoaXMuX2Q9MjcxNzMzODc4LHRoaXMuX2U9MzI4NTM3NzUyMCx0aGlzfSxQLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKE4pe2Zvcih2YXIgTD10aGlzLl93LEs9MHx0aGlzLl9hLFU9MHx0aGlzLl9iLFc9MHx0aGlzLl9jLFk9MHx0aGlz''@;'; put 'put ''Ll9kLHE9MHx0aGlzLl9lLGVlPTA7ZWU8MTY7KytlZSlMW2VlXT1OLnJlYWRJbnQzMkJFKDQqZWUpO2Zvcig7ZWU8ODA7KytlZSlMW2VlXT1MW2VlLTNdXkxbZWUtOF1eTFtlZS0xNF1eTFtlZS0xNl07Zm9yKHZhciBKPTA7Sjw4MDsrK0ope3ZhciBuZT1+fihKLzIwKSxpZT1GKEspK3oobmUs''@;'; put 'put ''VSxXLFkpK3ErTFtKXStCW25lXXwwO3E9WSxZPVcsVz1PKFUpLFU9SyxLPWllfXRoaXMuX2E9Syt0aGlzLl9hfDAsdGhpcy5fYj1VK3RoaXMuX2J8MCx0aGlzLl9jPVcrdGhpcy5fY3wwLHRoaXMuX2Q9WSt0aGlzLl9kfDAsdGhpcy5fZT1xK3RoaXMuX2V8MH0sUC5wcm90b3R5cGUuX2hhc2g9''@;'; put 'put ''ZnVuY3Rpb24oKXt2YXIgTj1nLmFsbG9jVW5zYWZlKDIwKTtyZXR1cm4gTi53cml0ZUludDMyQkUoMHx0aGlzLl9hLDApLE4ud3JpdGVJbnQzMkJFKDB8dGhpcy5fYiw0KSxOLndyaXRlSW50MzJCRSgwfHRoaXMuX2MsOCksTi53cml0ZUludDMyQkUoMHx0aGlzLl9kLDEyKSxOLndyaXRlSW50''@;'; put 'put ''MzJCRSgwfHRoaXMuX2UsMTYpLE59LHVlLmV4cG9ydHM9UH0sMjEyNzA6KHVlLFgseSk9Pnt2YXIgST15KDcxOTkzKSxfPXkoNzA0NjMpLGc9eSgyNzA1NCkuQnVmZmVyLEI9WzE1MTg1MDAyNDksMTg1OTc3NTM5MywtMTg5NDAwNzU4OCwtODk5NDk3NTE0XSx3PW5ldyBBcnJheSg4MCk7ZnVu''@;'; put 'put ''Y3Rpb24gUCgpe3RoaXMuaW5pdCgpLHRoaXMuX3c9dyxfLmNhbGwodGhpcyw2NCw1Nil9ZnVuY3Rpb24gRihMKXtyZXR1cm4gTDw8MXxMPj4+MzF9ZnVuY3Rpb24gTyhMKXtyZXR1cm4gTDw8NXxMPj4+Mjd9ZnVuY3Rpb24geihMKXtyZXR1cm4gTDw8MzB8TD4+PjJ9ZnVuY3Rpb24gTihMLEss''@;'; put 'put ''VSxXKXtyZXR1cm4gMD09PUw/SyZVfH5LJlc6Mj09PUw/SyZVfEsmV3xVJlc6S15VXld9SShQLF8pLFAucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYT0xNzMyNTg0MTkzLHRoaXMuX2I9NDAyMzIzMzQxNyx0aGlzLl9jPTI1NjIzODMxMDIsdGhpcy5fZD0yNzE3MzM4''@;'; put 'put ''NzgsdGhpcy5fZT0zMjg1Mzc3NTIwLHRoaXN9LFAucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oTCl7Zm9yKHZhciBLPXRoaXMuX3csVT0wfHRoaXMuX2EsVz0wfHRoaXMuX2IsWT0wfHRoaXMuX2MscT0wfHRoaXMuX2QsZWU9MHx0aGlzLl9lLEo9MDtKPDE2OysrSilLW0pdPUwucmVhZElu''@;'; put 'put ''dDMyQkUoNCpKKTtmb3IoO0o8ODA7KytKKUtbSl09RihLW0otM11eS1tKLThdXktbSi0xNF1eS1tKLTE2XSk7Zm9yKHZhciBuZT0wO25lPDgwOysrbmUpe3ZhciBpZT1+fihuZS8yMCksbGU9TyhVKStOKGllLFcsWSxxKStlZStLW25lXStCW2llXXwwO2VlPXEscT1ZLFk9eihXKSxXPVUsVT1s''@;'; put 'put ''ZX10aGlzLl9hPVUrdGhpcy5fYXwwLHRoaXMuX2I9Vyt0aGlzLl9ifDAsdGhpcy5fYz1ZK3RoaXMuX2N8MCx0aGlzLl9kPXErdGhpcy5fZHwwLHRoaXMuX2U9ZWUrdGhpcy5fZXwwfSxQLnByb3RvdHlwZS5faGFzaD1mdW5jdGlvbigpe3ZhciBMPWcuYWxsb2NVbnNhZmUoMjApO3JldHVybiBM''@;'; put 'put ''LndyaXRlSW50MzJCRSgwfHRoaXMuX2EsMCksTC53cml0ZUludDMyQkUoMHx0aGlzLl9iLDQpLEwud3JpdGVJbnQzMkJFKDB8dGhpcy5fYyw4KSxMLndyaXRlSW50MzJCRSgwfHRoaXMuX2QsMTIpLEwud3JpdGVJbnQzMkJFKDB8dGhpcy5fZSwxNiksTH0sdWUuZXhwb3J0cz1QfSw0MjcwOToo''@;'; put 'put ''dWUsWCx5KT0+e3ZhciBJPXkoNzE5OTMpLF89eSgzMjE0OCksZz15KDcwNDYzKSxCPXkoMjcwNTQpLkJ1ZmZlcix3PW5ldyBBcnJheSg2NCk7ZnVuY3Rpb24gUCgpe3RoaXMuaW5pdCgpLHRoaXMuX3c9dyxnLmNhbGwodGhpcyw2NCw1Nil9SShQLF8pLFAucHJvdG90eXBlLmluaXQ9ZnVuY3Rp''@;'; put 'put ''b24oKXtyZXR1cm4gdGhpcy5fYT0zMjM4MzcxMDMyLHRoaXMuX2I9OTE0MTUwNjYzLHRoaXMuX2M9ODEyNzAyOTk5LHRoaXMuX2Q9NDE0NDkxMjY5Nyx0aGlzLl9lPTQyOTA3NzU4NTcsdGhpcy5fZj0xNzUwNjAzMDI1LHRoaXMuX2c9MTY5NDA3NjgzOSx0aGlzLl9oPTMyMDQwNzU0MjgsdGhp''@;'; put 'put ''c30sUC5wcm90b3R5cGUuX2hhc2g9ZnVuY3Rpb24oKXt2YXIgRj1CLmFsbG9jVW5zYWZlKDI4KTtyZXR1cm4gRi53cml0ZUludDMyQkUodGhpcy5fYSwwKSxGLndyaXRlSW50MzJCRSh0aGlzLl9iLDQpLEYud3JpdGVJbnQzMkJFKHRoaXMuX2MsOCksRi53cml0ZUludDMyQkUodGhpcy5fZCwx''@;'; put 'put ''MiksRi53cml0ZUludDMyQkUodGhpcy5fZSwxNiksRi53cml0ZUludDMyQkUodGhpcy5fZiwyMCksRi53cml0ZUludDMyQkUodGhpcy5fZywyNCksRn0sdWUuZXhwb3J0cz1QfSwzMjE0ODoodWUsWCx5KT0+e3ZhciBJPXkoNzE5OTMpLF89eSg3MDQ2MyksZz15KDI3MDU0KS5CdWZmZXIsQj1b''@;'; put 'put ''MTExNjM1MjQwOCwxODk5NDQ3NDQxLDMwNDkzMjM0NzEsMzkyMTAwOTU3Myw5NjE5ODcxNjMsMTUwODk3MDk5MywyNDUzNjM1NzQ4LDI4NzA3NjMyMjEsMzYyNDM4MTA4MCwzMTA1OTg0MDEsNjA3MjI1Mjc4LDE0MjY4ODE5ODcsMTkyNTA3ODM4OCwyMTYyMDc4MjA2LDI2MTQ4ODgxMDMsMzI0''@;'; put 'put ''ODIyMjU4MCwzODM1MzkwNDAxLDQwMjIyMjQ3NzQsMjY0MzQ3MDc4LDYwNDgwNzYyOCw3NzAyNTU5ODMsMTI0OTE1MDEyMiwxNTU1MDgxNjkyLDE5OTYwNjQ5ODYsMjU1NDIyMDg4MiwyODIxODM0MzQ5LDI5NTI5OTY4MDgsMzIxMDMxMzY3MSwzMzM2NTcxODkxLDM1ODQ1Mjg3MTEsMTEzOTI2''@;'; put 'put ''OTkzLDMzODI0MTg5NSw2NjYzMDcyMDUsNzczNTI5OTEyLDEyOTQ3NTczNzIsMTM5NjE4MjI5MSwxNjk1MTgzNzAwLDE5ODY2NjEwNTEsMjE3NzAyNjM1MCwyNDU2OTU2MDM3LDI3MzA0ODU5MjEsMjgyMDMwMjQxMSwzMjU5NzMwODAwLDMzNDU3NjQ3NzEsMzUxNjA2NTgxNywzNjAwMzUyODA0''@;'; put 'put ''LDQwOTQ1NzE5MDksMjc1NDIzMzQ0LDQzMDIyNzczNCw1MDY5NDg2MTYsNjU5MDYwNTU2LDg4Mzk5Nzg3Nyw5NTgxMzk1NzEsMTMyMjgyMjIxOCwxNTM3MDAyMDYzLDE3NDc4NzM3NzksMTk1NTU2MjIyMiwyMDI0MTA0ODE1LDIyMjc3MzA0NTIsMjM2MTg1MjQyNCwyNDI4NDM2NDc0LDI3NTY3''@;'; put 'put ''MzQxODcsMzIwNDAzMTQ3OSwzMzI5MzI1Mjk4XSx3PW5ldyBBcnJheSg2NCk7ZnVuY3Rpb24gUCgpe3RoaXMuaW5pdCgpLHRoaXMuX3c9dyxfLmNhbGwodGhpcyw2NCw1Nil9ZnVuY3Rpb24gRihVLFcsWSl7cmV0dXJuIFleVSYoV15ZKX1mdW5jdGlvbiBPKFUsVyxZKXtyZXR1cm4gVSZXfFkm''@;'; put 'put ''KFV8Vyl9ZnVuY3Rpb24geihVKXtyZXR1cm4oVT4+PjJ8VTw8MzApXihVPj4+MTN8VTw8MTkpXihVPj4+MjJ8VTw8MTApfWZ1bmN0aW9uIE4oVSl7cmV0dXJuKFU+Pj42fFU8PDI2KV4oVT4+PjExfFU8PDIxKV4oVT4+PjI1fFU8PDcpfWZ1bmN0aW9uIEwoVSl7cmV0dXJuKFU+Pj43fFU8PDI1''@;'; put 'put ''KV4oVT4+PjE4fFU8PDE0KV5VPj4+M31mdW5jdGlvbiBLKFUpe3JldHVybihVPj4+MTd8VTw8MTUpXihVPj4+MTl8VTw8MTMpXlU+Pj4xMH1JKFAsXyksUC5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hPTE3NzkwMzM3MDMsdGhpcy5fYj0zMTQ0MTM0Mjc3LHRoaXMu''@;'; put 'put ''X2M9MTAxMzkwNDI0Mix0aGlzLl9kPTI3NzM0ODA3NjIsdGhpcy5fZT0xMzU5ODkzMTE5LHRoaXMuX2Y9MjYwMDgyMjkyNCx0aGlzLl9nPTUyODczNDYzNSx0aGlzLl9oPTE1NDE0NTkyMjUsdGhpc30sUC5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihVKXtmb3IodmFyIFc9dGhpcy5fdyxZ''@;'; put 'put ''PTB8dGhpcy5fYSxxPTB8dGhpcy5fYixlZT0wfHRoaXMuX2MsSj0wfHRoaXMuX2QsbmU9MHx0aGlzLl9lLGllPTB8dGhpcy5fZixsZT0wfHRoaXMuX2csbWU9MHx0aGlzLl9oLF9lPTA7X2U8MTY7KytfZSlXW19lXT1VLnJlYWRJbnQzMkJFKDQqX2UpO2Zvcig7X2U8NjQ7KytfZSlXW19lXT1L''@;'; put 'put ''KFdbX2UtMl0pK1dbX2UtN10rTChXW19lLTE1XSkrV1tfZS0xNl18MDtmb3IodmFyIFRlPTA7VGU8NjQ7KytUZSl7dmFyIFNlPW1lK04obmUpK0YobmUsaWUsbGUpK0JbVGVdK1dbVGVdfDAsamU9eihZKStPKFkscSxlZSl8MDttZT1sZSxsZT1pZSxpZT1uZSxuZT1KK1NlfDAsSj1lZSxlZT1x''@;'; put 'put ''LHE9WSxZPVNlK2plfDB9dGhpcy5fYT1ZK3RoaXMuX2F8MCx0aGlzLl9iPXErdGhpcy5fYnwwLHRoaXMuX2M9ZWUrdGhpcy5fY3wwLHRoaXMuX2Q9Sit0aGlzLl9kfDAsdGhpcy5fZT1uZSt0aGlzLl9lfDAsdGhpcy5fZj1pZSt0aGlzLl9mfDAsdGhpcy5fZz1sZSt0aGlzLl9nfDAsdGhpcy5f''@;'; put 'put ''aD1tZSt0aGlzLl9ofDB9LFAucHJvdG90eXBlLl9oYXNoPWZ1bmN0aW9uKCl7dmFyIFU9Zy5hbGxvY1Vuc2FmZSgzMik7cmV0dXJuIFUud3JpdGVJbnQzMkJFKHRoaXMuX2EsMCksVS53cml0ZUludDMyQkUodGhpcy5fYiw0KSxVLndyaXRlSW50MzJCRSh0aGlzLl9jLDgpLFUud3JpdGVJbnQz''@;'; put 'put ''MkJFKHRoaXMuX2QsMTIpLFUud3JpdGVJbnQzMkJFKHRoaXMuX2UsMTYpLFUud3JpdGVJbnQzMkJFKHRoaXMuX2YsMjApLFUud3JpdGVJbnQzMkJFKHRoaXMuX2csMjQpLFUud3JpdGVJbnQzMkJFKHRoaXMuX2gsMjgpLFV9LHVlLmV4cG9ydHM9UH0sNTE4NTY6KHVlLFgseSk9Pnt2YXIgST15''@;'; put 'put ''KDcxOTkzKSxfPXkoMzEyMSksZz15KDcwNDYzKSxCPXkoMjcwNTQpLkJ1ZmZlcix3PW5ldyBBcnJheSgxNjApO2Z1bmN0aW9uIFAoKXt0aGlzLmluaXQoKSx0aGlzLl93PXcsZy5jYWxsKHRoaXMsMTI4LDExMil9SShQLF8pLFAucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5fYWg9MzQxODA3MDM2NSx0aGlzLl9iaD0xNjU0MjcwMjUwLHRoaXMuX2NoPTI0Mzg1MjkzNzAsdGhpcy5fZGg9MzU1NDYyMzYwLHRoaXMuX2VoPTE3MzE0MDU0MTUsdGhpcy5fZmg9MjM5NDE4MDIzMSx0aGlzLl9naD0zNjc1MDA4NTI1LHRoaXMuX2hoPTEyMDMwNjI4MTMsdGhpcy5fYWw9''@;'; put 'put ''MzIzODM3MTAzMix0aGlzLl9ibD05MTQxNTA2NjMsdGhpcy5fY2w9ODEyNzAyOTk5LHRoaXMuX2RsPTQxNDQ5MTI2OTcsdGhpcy5fZWw9NDI5MDc3NTg1Nyx0aGlzLl9mbD0xNzUwNjAzMDI1LHRoaXMuX2dsPTE2OTQwNzY4MzksdGhpcy5faGw9MzIwNDA3NTQyOCx0aGlzfSxQLnByb3RvdHlw''@;'; put 'put ''ZS5faGFzaD1mdW5jdGlvbigpe3ZhciBGPUIuYWxsb2NVbnNhZmUoNDgpO2Z1bmN0aW9uIE8oeixOLEwpe0Yud3JpdGVJbnQzMkJFKHosTCksRi53cml0ZUludDMyQkUoTixMKzQpfXJldHVybiBPKHRoaXMuX2FoLHRoaXMuX2FsLDApLE8odGhpcy5fYmgsdGhpcy5fYmwsOCksTyh0aGlzLl9j''@;'; put 'put ''aCx0aGlzLl9jbCwxNiksTyh0aGlzLl9kaCx0aGlzLl9kbCwyNCksTyh0aGlzLl9laCx0aGlzLl9lbCwzMiksTyh0aGlzLl9maCx0aGlzLl9mbCw0MCksRn0sdWUuZXhwb3J0cz1QfSwzMTIxOih1ZSxYLHkpPT57dmFyIEk9eSg3MTk5MyksXz15KDcwNDYzKSxnPXkoMjcwNTQpLkJ1ZmZlcixC''@;'; put 'put ''PVsxMTE2MzUyNDA4LDM2MDk3Njc0NTgsMTg5OTQ0NzQ0MSw2MDI4OTE3MjUsMzA0OTMyMzQ3MSwzOTY0NDg0Mzk5LDM5MjEwMDk1NzMsMjE3MzI5NTU0OCw5NjE5ODcxNjMsNDA4MTYyODQ3MiwxNTA4OTcwOTkzLDMwNTM4MzQyNjUsMjQ1MzYzNTc0OCwyOTM3NjcxNTc5LDI4NzA3NjMyMjEs''@;'; put 'put ''MzY2NDYwOTU2MCwzNjI0MzgxMDgwLDI3MzQ4ODMzOTQsMzEwNTk4NDAxLDExNjQ5OTY1NDIsNjA3MjI1Mjc4LDEzMjM2MTA3NjQsMTQyNjg4MTk4NywzNTkwMzA0OTk0LDE5MjUwNzgzODgsNDA2ODE4MjM4MywyMTYyMDc4MjA2LDk5MTMzNjExMywyNjE0ODg4MTAzLDYzMzgwMzMxNywzMjQ4''@;'; put 'put ''MjIyNTgwLDM0Nzk3NzQ4NjgsMzgzNTM5MDQwMSwyNjY2NjEzNDU4LDQwMjIyMjQ3NzQsOTQ0NzExMTM5LDI2NDM0NzA3OCwyMzQxMjYyNzczLDYwNDgwNzYyOCwyMDA3ODAwOTMzLDc3MDI1NTk4MywxNDk1OTkwOTAxLDEyNDkxNTAxMjIsMTg1NjQzMTIzNSwxNTU1MDgxNjkyLDMxNzUyMTgx''@;'; put 'put ''MzIsMTk5NjA2NDk4NiwyMTk4OTUwODM3LDI1NTQyMjA4ODIsMzk5OTcxOTMzOSwyODIxODM0MzQ5LDc2Njc4NDAxNiwyOTUyOTk2ODA4LDI1NjY1OTQ4NzksMzIxMDMxMzY3MSwzMjAzMzM3OTU2LDMzMzY1NzE4OTEsMTAzNDQ1NzAyNiwzNTg0NTI4NzExLDI0NjY5NDg5MDEsMTEzOTI2OTkz''@;'; put 'put ''LDM3NTgzMjYzODMsMzM4MjQxODk1LDE2ODcxNzkzNiw2NjYzMDcyMDUsMTE4ODE3OTk2NCw3NzM1Mjk5MTIsMTU0NjA0NTczNCwxMjk0NzU3MzcyLDE1MjI4MDU0ODUsMTM5NjE4MjI5MSwyNjQzODMzODIzLDE2OTUxODM3MDAsMjM0MzUyNzM5MCwxOTg2NjYxMDUxLDEwMTQ0Nzc0ODAsMjE3''@;'; put 'put ''NzAyNjM1MCwxMjA2NzU5MTQyLDI0NTY5NTYwMzcsMzQ0MDc3NjI3LDI3MzA0ODU5MjEsMTI5MDg2MzQ2MCwyODIwMzAyNDExLDMxNTg0NTQyNzMsMzI1OTczMDgwMCwzNTA1OTUyNjU3LDMzNDU3NjQ3NzEsMTA2MjE3MDA4LDM1MTYwNjU4MTcsMzYwNjAwODM0NCwzNjAwMzUyODA0LDE0MzI3''@;'; put 'put ''MjU3NzYsNDA5NDU3MTkwOSwxNDY3MDMxNTk0LDI3NTQyMzM0NCw4NTExNjk3MjAsNDMwMjI3NzM0LDMxMDA4MjM3NTIsNTA2OTQ4NjE2LDEzNjMyNTgxOTUsNjU5MDYwNTU2LDM3NTA2ODU1OTMsODgzOTk3ODc3LDM3ODUwNTAyODAsOTU4MTM5NTcxLDMzMTgzMDc0MjcsMTMyMjgyMjIxOCwz''@;'; put 'put ''ODEyNzIzNDAzLDE1MzcwMDIwNjMsMjAwMzAzNDk5NSwxNzQ3ODczNzc5LDM2MDIwMzY4OTksMTk1NTU2MjIyMiwxNTc1OTkwMDEyLDIwMjQxMDQ4MTUsMTEyNTU5MjkyOCwyMjI3NzMwNDUyLDI3MTY5MDQzMDYsMjM2MTg1MjQyNCw0NDI3NzYwNDQsMjQyODQzNjQ3NCw1OTM2OTgzNDQsMjc1''@;'; put 'put ''NjczNDE4NywzNzMzMTEwMjQ5LDMyMDQwMzE0NzksMjk5OTM1MTU3MywzMzI5MzI1Mjk4LDM4MTU5MjA0MjcsMzM5MTU2OTYxNCwzOTI4MzgzOTAwLDM1MTUyNjcyNzEsNTY2MjgwNzExLDM5NDAxODc2MDYsMzQ1NDA2OTUzNCw0MTE4NjMwMjcxLDQwMDAyMzk5OTIsMTE2NDE4NDc0LDE5MTQx''@;'; put 'put ''Mzg1NTQsMTc0MjkyNDIxLDI3MzEwNTUyNzAsMjg5MzgwMzU2LDMyMDM5OTMwMDYsNDYwMzkzMjY5LDMyMDYyMDMxNSw2ODU0NzE3MzMsNTg3NDk2ODM2LDg1MjE0Mjk3MSwxMDg2NzkyODUxLDEwMTcwMzYyOTgsMzY1NTQzMTAwLDExMjYwMDA1ODAsMjYxODI5NzY3NiwxMjg4MDMzNDcwLDM0''@;'; put 'put ''MDk4NTUxNTgsMTUwMTUwNTk0OCw0MjM0NTA5ODY2LDE2MDcxNjc5MTUsOTg3MTY3NDY4LDE4MTY0MDIzMTYsMTI0NjE4OTU5MV0sdz1uZXcgQXJyYXkoMTYwKTtmdW5jdGlvbiBQKCl7dGhpcy5pbml0KCksdGhpcy5fdz13LF8uY2FsbCh0aGlzLDEyOCwxMTIpfWZ1bmN0aW9uIEYocSxlZSxK''@;'; put 'put ''KXtyZXR1cm4gSl5xJihlZV5KKX1mdW5jdGlvbiBPKHEsZWUsSil7cmV0dXJuIHEmZWV8SiYocXxlZSl9ZnVuY3Rpb24geihxLGVlKXtyZXR1cm4ocT4+PjI4fGVlPDw0KV4oZWU+Pj4yfHE8PDMwKV4oZWU+Pj43fHE8PDI1KX1mdW5jdGlvbiBOKHEsZWUpe3JldHVybihxPj4+MTR8ZWU8PDE4''@;'; put 'put ''KV4ocT4+PjE4fGVlPDwxNCleKGVlPj4+OXxxPDwyMyl9ZnVuY3Rpb24gTChxLGVlKXtyZXR1cm4ocT4+PjF8ZWU8PDMxKV4ocT4+Pjh8ZWU8PDI0KV5xPj4+N31mdW5jdGlvbiBLKHEsZWUpe3JldHVybihxPj4+MXxlZTw8MzEpXihxPj4+OHxlZTw8MjQpXihxPj4+N3xlZTw8MjUpfWZ1bmN0''@;'; put 'put ''aW9uIFUocSxlZSl7cmV0dXJuKHE+Pj4xOXxlZTw8MTMpXihlZT4+PjI5fHE8PDMpXnE+Pj42fWZ1bmN0aW9uIFcocSxlZSl7cmV0dXJuKHE+Pj4xOXxlZTw8MTMpXihlZT4+PjI5fHE8PDMpXihxPj4+NnxlZTw8MjYpfWZ1bmN0aW9uIFkocSxlZSl7cmV0dXJuIHE+Pj4wPGVlPj4+MD8xOjB9''@;'; put 'put ''SShQLF8pLFAucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYWg9MTc3OTAzMzcwMyx0aGlzLl9iaD0zMTQ0MTM0Mjc3LHRoaXMuX2NoPTEwMTM5MDQyNDIsdGhpcy5fZGg9Mjc3MzQ4MDc2Mix0aGlzLl9laD0xMzU5ODkzMTE5LHRoaXMuX2ZoPTI2MDA4MjI5MjQsdGhp''@;'; put 'put ''cy5fZ2g9NTI4NzM0NjM1LHRoaXMuX2hoPTE1NDE0NTkyMjUsdGhpcy5fYWw9NDA4OTIzNTcyMCx0aGlzLl9ibD0yMjI3ODczNTk1LHRoaXMuX2NsPTQyNzExNzU3MjMsdGhpcy5fZGw9MTU5NTc1MDEyOSx0aGlzLl9lbD0yOTE3NTY1MTM3LHRoaXMuX2ZsPTcyNTUxMTE5OSx0aGlzLl9nbD00''@;'; put 'put ''MjE1Mzg5NTQ3LHRoaXMuX2hsPTMyNzAzMzIwOSx0aGlzfSxQLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKHEpe2Zvcih2YXIgZWU9dGhpcy5fdyxKPTB8dGhpcy5fYWgsbmU9MHx0aGlzLl9iaCxpZT0wfHRoaXMuX2NoLGxlPTB8dGhpcy5fZGgsbWU9MHx0aGlzLl9laCxfZT0wfHRoaXMu''@;'; put 'put ''X2ZoLFRlPTB8dGhpcy5fZ2gsU2U9MHx0aGlzLl9oaCxqZT0wfHRoaXMuX2FsLFY9MHx0aGlzLl9ibCxwPTB8dGhpcy5fY2wsYj0wfHRoaXMuX2RsLHg9MHx0aGlzLl9lbCxDPTB8dGhpcy5fZmwsVD0wfHRoaXMuX2dsLEg9MHx0aGlzLl9obCxqPTA7ajwzMjtqKz0yKWVlW2pdPXEucmVhZElu''@;'; put 'put ''dDMyQkUoNCpqKSxlZVtqKzFdPXEucmVhZEludDMyQkUoNCpqKzQpO2Zvcig7ajwxNjA7ais9Mil7dmFyIEU9ZWVbai0zMF0sbT1lZVtqLTMwKzFdLEE9TChFLG0pLGFlPUsobSxFKSx0ZT1VKEU9ZWVbai00XSxtPWVlW2otNCsxXSksc2U9VyhtLEUpLEplPWVlW2otMzJdLG90PWVlW2otMzIr''@;'; put 'put ''MV0seGU9YWUrZWVbai0xNCsxXXwwLHZlPUErZWVbai0xNF0rWSh4ZSxhZSl8MDt2ZT0odmU9dmUrdGUrWSh4ZT14ZStzZXwwLHNlKXwwKStKZStZKHhlPXhlK290fDAsb3QpfDAsZWVbal09dmUsZWVbaisxXT14ZX1mb3IodmFyIFhlPTA7WGU8MTYwO1hlKz0yKXt2ZT1lZVtYZV0seGU9ZWVb''@;'; put 'put ''WGUrMV07dmFyIHplPU8oSixuZSxpZSksRGU9TyhqZSxWLHApLEZlPXooSixqZSksT2U9eihqZSxKKSxJZT1OKG1lLHgpLFZlPU4oeCxtZSksa2U9QltYZV0sQWU9QltYZSsxXSxfdD1GKG1lLF9lLFRlKSxudD1GKHgsQyxUKSxRZT1IK1ZlfDAsdW49U2UrSWUrWShRZSxIKXwwO3VuPSh1bj0o''@;'; put 'put ''dW49dW4rX3QrWShRZT1RZStudHwwLG50KXwwKStrZStZKFFlPVFlK0FlfDAsQWUpfDApK3ZlK1koUWU9UWUreGV8MCx4ZSl8MDt2YXIgeXQ9T2UrRGV8MCxNdD1GZSt6ZStZKHl0LE9lKXwwO1NlPVRlLEg9VCxUZT1fZSxUPUMsX2U9bWUsQz14LG1lPWxlK3VuK1koeD1iK1FlfDAsYil8MCxs''@;'; put 'put ''ZT1pZSxiPXAsaWU9bmUscD1WLG5lPUosVj1qZSxKPXVuK010K1koamU9UWUreXR8MCxRZSl8MH10aGlzLl9hbD10aGlzLl9hbCtqZXwwLHRoaXMuX2JsPXRoaXMuX2JsK1Z8MCx0aGlzLl9jbD10aGlzLl9jbCtwfDAsdGhpcy5fZGw9dGhpcy5fZGwrYnwwLHRoaXMuX2VsPXRoaXMuX2VsK3h8''@;'; put 'put ''MCx0aGlzLl9mbD10aGlzLl9mbCtDfDAsdGhpcy5fZ2w9dGhpcy5fZ2wrVHwwLHRoaXMuX2hsPXRoaXMuX2hsK0h8MCx0aGlzLl9haD10aGlzLl9haCtKK1kodGhpcy5fYWwsamUpfDAsdGhpcy5fYmg9dGhpcy5fYmgrbmUrWSh0aGlzLl9ibCxWKXwwLHRoaXMuX2NoPXRoaXMuX2NoK2llK1ko''@;'; put 'put ''dGhpcy5fY2wscCl8MCx0aGlzLl9kaD10aGlzLl9kaCtsZStZKHRoaXMuX2RsLGIpfDAsdGhpcy5fZWg9dGhpcy5fZWgrbWUrWSh0aGlzLl9lbCx4KXwwLHRoaXMuX2ZoPXRoaXMuX2ZoK19lK1kodGhpcy5fZmwsQyl8MCx0aGlzLl9naD10aGlzLl9naCtUZStZKHRoaXMuX2dsLFQpfDAsdGhp''@;'; put 'put ''cy5faGg9dGhpcy5faGgrU2UrWSh0aGlzLl9obCxIKXwwfSxQLnByb3RvdHlwZS5faGFzaD1mdW5jdGlvbigpe3ZhciBxPWcuYWxsb2NVbnNhZmUoNjQpO2Z1bmN0aW9uIGVlKEosbmUsaWUpe3Eud3JpdGVJbnQzMkJFKEosaWUpLHEud3JpdGVJbnQzMkJFKG5lLGllKzQpfXJldHVybiBlZSh0''@;'; put 'put ''aGlzLl9haCx0aGlzLl9hbCwwKSxlZSh0aGlzLl9iaCx0aGlzLl9ibCw4KSxlZSh0aGlzLl9jaCx0aGlzLl9jbCwxNiksZWUodGhpcy5fZGgsdGhpcy5fZGwsMjQpLGVlKHRoaXMuX2VoLHRoaXMuX2VsLDMyKSxlZSh0aGlzLl9maCx0aGlzLl9mbCw0MCksZWUodGhpcy5fZ2gsdGhpcy5fZ2ws''@;'; put 'put ''NDgpLGVlKHRoaXMuX2hoLHRoaXMuX2hsLDU2KSxxfSx1ZS5leHBvcnRzPVB9LDcwNDU6KHVlLFgseSk9Pnt1ZS5leHBvcnRzPWc7dmFyIEk9eSg0NDM1NikuRXZlbnRFbWl0dGVyO2Z1bmN0aW9uIGcoKXtJLmNhbGwodGhpcyl9eSg3MTk5MykoZyxJKSxnLlJlYWRhYmxlPXkoNjEwOTIpLGcu''@;'; put 'put ''V3JpdGFibGU9eSgxNTQ5MiksZy5EdXBsZXg9eSgxMDMwKSxnLlRyYW5zZm9ybT15KDQzNDEwKSxnLlBhc3NUaHJvdWdoPXkoODM4MjQpLGcuZmluaXNoZWQ9eSg1Nzg1NCksZy5waXBlbGluZT15KDY4NDYpLGcuU3RyZWFtPWcsZy5wcm90b3R5cGUucGlwZT1mdW5jdGlvbihCLHcpe3ZhciBQ''@;'; put 'put ''PXRoaXM7ZnVuY3Rpb24gRihXKXtCLndyaXRhYmxlJiYhMT09PUIud3JpdGUoVykmJlAucGF1c2UmJlAucGF1c2UoKX1mdW5jdGlvbiBPKCl7UC5yZWFkYWJsZSYmUC5yZXN1bWUmJlAucmVzdW1lKCl9UC5vbigiZGF0YSIsRiksQi5vbigiZHJhaW4iLE8pLCFCLl9pc1N0ZGlvJiYoIXd8fCEx''@;'; put 'put ''IT09dy5lbmQpJiYoUC5vbigiZW5kIixOKSxQLm9uKCJjbG9zZSIsTCkpO3ZhciB6PSExO2Z1bmN0aW9uIE4oKXt6fHwoej0hMCxCLmVuZCgpKX1mdW5jdGlvbiBMKCl7enx8KHo9ITAsImZ1bmN0aW9uIj09dHlwZW9mIEIuZGVzdHJveSYmQi5kZXN0cm95KCkpfWZ1bmN0aW9uIEsoVyl7aWYo''@;'; put 'put ''VSgpLDA9PT1JLmxpc3RlbmVyQ291bnQodGhpcywiZXJyb3IiKSl0aHJvdyBXfWZ1bmN0aW9uIFUoKXtQLnJlbW92ZUxpc3RlbmVyKCJkYXRhIixGKSxCLnJlbW92ZUxpc3RlbmVyKCJkcmFpbiIsTyksUC5yZW1vdmVMaXN0ZW5lcigiZW5kIixOKSxQLnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIs''@;'; put 'put ''TCksUC5yZW1vdmVMaXN0ZW5lcigiZXJyb3IiLEspLEIucmVtb3ZlTGlzdGVuZXIoImVycm9yIixLKSxQLnJlbW92ZUxpc3RlbmVyKCJlbmQiLFUpLFAucmVtb3ZlTGlzdGVuZXIoImNsb3NlIixVKSxCLnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIsVSl9cmV0dXJuIFAub24oImVycm9yIixLKSxC''@;'; put 'put ''Lm9uKCJlcnJvciIsSyksUC5vbigiZW5kIixVKSxQLm9uKCJjbG9zZSIsVSksQi5vbigiY2xvc2UiLFUpLEIuZW1pdCgicGlwZSIsUCksQn19LDMwNDY0OnVlPT57InVzZSBzdHJpY3QiO3ZhciB5PXt9O2Z1bmN0aW9uIEkoUCxGLE8pe098fChPPUVycm9yKTt2YXIgTj1mdW5jdGlvbihMKXtm''@;'; put 'put ''dW5jdGlvbiBLKFUsVyxZKXtyZXR1cm4gTC5jYWxsKHRoaXMsZnVuY3Rpb24geihMLEssVSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBGP0Y6RihMLEssVSl9KFUsVyxZKSl8fHRoaXN9cmV0dXJuIGZ1bmN0aW9uIFgoUCxGKXtQLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEYucHJvdG90eXBl''@;'; put 'put ''KSxQLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1QLFAuX19wcm90b19fPUZ9KEssTCksS30oTyk7Ti5wcm90b3R5cGUubmFtZT1PLm5hbWUsTi5wcm90b3R5cGUuY29kZT1QLHlbUF09Tn1mdW5jdGlvbiBfKFAsRil7aWYoQXJyYXkuaXNBcnJheShQKSl7dmFyIE89UC5sZW5ndGg7cmV0dXJuIFA9''@;'; put 'put ''UC5tYXAoZnVuY3Rpb24oeil7cmV0dXJuIFN0cmluZyh6KX0pLE8+Mj8ib25lIG9mICIuY29uY2F0KEYsIiAiKS5jb25jYXQoUC5zbGljZSgwLE8tMSkuam9pbigiLCAiKSwiLCBvciAiKStQW08tMV06Mj09PU8/Im9uZSBvZiAiLmNvbmNhdChGLCIgIikuY29uY2F0KFBbMF0sIiBvciAiKS5j''@;'; put 'put ''b25jYXQoUFsxXSk6Im9mICIuY29uY2F0KEYsIiAiKS5jb25jYXQoUFswXSl9cmV0dXJuIm9mICIuY29uY2F0KEYsIiAiKS5jb25jYXQoU3RyaW5nKFApKX1JKCJFUlJfSU5WQUxJRF9PUFRfVkFMVUUiLGZ1bmN0aW9uKFAsRil7cmV0dXJuJ1RoZSB2YWx1ZSAiJytGKyciIGlzIGludmFsaWQg''@;'; put 'put ''Zm9yIG9wdGlvbiAiJytQKyciJ30sVHlwZUVycm9yKSxJKCJFUlJfSU5WQUxJRF9BUkdfVFlQRSIsZnVuY3Rpb24oUCxGLE8pe3ZhciB6LE47aWYoInN0cmluZyI9PXR5cGVvZiBGJiZmdW5jdGlvbiBnKFAsRixPKXtyZXR1cm4gUC5zdWJzdHIoIU98fE88MD8wOitPLEYubGVuZ3RoKT09PUZ9''@;'; put 'put ''KEYsIm5vdCAiKT8oej0ibXVzdCBub3QgYmUiLEY9Ri5yZXBsYWNlKC9ebm90IC8sIiIpKTp6PSJtdXN0IGJlIixmdW5jdGlvbiBCKFAsRixPKXtyZXR1cm4odm9pZCAwPT09T3x8Tz5QLmxlbmd0aCkmJihPPVAubGVuZ3RoKSxQLnN1YnN0cmluZyhPLUYubGVuZ3RoLE8pPT09Rn0oUCwiIGFy''@;'; put 'put ''Z3VtZW50IikpTj0iVGhlICIuY29uY2F0KFAsIiAiKS5jb25jYXQoeiwiICIpLmNvbmNhdChfKEYsInR5cGUiKSk7ZWxzZXt2YXIgTD1mdW5jdGlvbiB3KFAsRixPKXtyZXR1cm4ibnVtYmVyIiE9dHlwZW9mIE8mJihPPTApLCEoTytGLmxlbmd0aD5QLmxlbmd0aCkmJi0xIT09UC5pbmRleE9m''@;'; put 'put ''KEYsTyl9KFAsIi4iKT8icHJvcGVydHkiOiJhcmd1bWVudCI7Tj0nVGhlICInLmNvbmNhdChQLCciICcpLmNvbmNhdChMLCIgIikuY29uY2F0KHosIiAiKS5jb25jYXQoXyhGLCJ0eXBlIikpfXJldHVybiBOKyIuIFJlY2VpdmVkIHR5cGUgIi5jb25jYXQodHlwZW9mIE8pfSxUeXBlRXJyb3Ip''@;'; put 'put ''LEkoIkVSUl9TVFJFQU1fUFVTSF9BRlRFUl9FT0YiLCJzdHJlYW0ucHVzaCgpIGFmdGVyIEVPRiIpLEkoIkVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVEIixmdW5jdGlvbihQKXtyZXR1cm4iVGhlICIrUCsiIG1ldGhvZCBpcyBub3QgaW1wbGVtZW50ZWQifSksSSgiRVJSX1NUUkVBTV9QUkVN''@;'; put 'put ''QVRVUkVfQ0xPU0UiLCJQcmVtYXR1cmUgY2xvc2UiKSxJKCJFUlJfU1RSRUFNX0RFU1RST1lFRCIsZnVuY3Rpb24oUCl7cmV0dXJuIkNhbm5vdCBjYWxsICIrUCsiIGFmdGVyIGEgc3RyZWFtIHdhcyBkZXN0cm95ZWQifSksSSgiRVJSX01VTFRJUExFX0NBTExCQUNLIiwiQ2FsbGJhY2sgY2Fs''@;'; put 'put ''bGVkIG11bHRpcGxlIHRpbWVzIiksSSgiRVJSX1NUUkVBTV9DQU5OT1RfUElQRSIsIkNhbm5vdCBwaXBlLCBub3QgcmVhZGFibGUiKSxJKCJFUlJfU1RSRUFNX1dSSVRFX0FGVEVSX0VORCIsIndyaXRlIGFmdGVyIGVuZCIpLEkoIkVSUl9TVFJFQU1fTlVMTF9WQUxVRVMiLCJNYXkgbm90IHdy''@;'; put 'put ''aXRlIG51bGwgdmFsdWVzIHRvIHN0cmVhbSIsVHlwZUVycm9yKSxJKCJFUlJfVU5LTk9XTl9FTkNPRElORyIsZnVuY3Rpb24oUCl7cmV0dXJuIlVua25vd24gZW5jb2Rpbmc6ICIrUH0sVHlwZUVycm9yKSxJKCJFUlJfU1RSRUFNX1VOU0hJRlRfQUZURVJfRU5EX0VWRU5UIiwic3RyZWFtLnVu''@;'; put 'put ''c2hpZnQoKSBhZnRlciBlbmQgZXZlbnQiKSx1ZS5leHBvcnRzLkY9eX0sMTAzMDoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1PYmplY3Qua2V5c3x8ZnVuY3Rpb24oTil7dmFyIEw9W107Zm9yKHZhciBLIGluIE4pTC5wdXNoKEspO3JldHVybiBMfTt1ZS5leHBvcnRzPUY7dmFyIF89''@;'; put 'put ''eSg2MTA5MiksZz15KDE1NDkyKTt5KDcxOTkzKShGLF8pO2Zvcih2YXIgQj1JKGcucHJvdG90eXBlKSx3PTA7dzxCLmxlbmd0aDt3Kyspe3ZhciBQPUJbd107Ri5wcm90b3R5cGVbUF18fChGLnByb3RvdHlwZVtQXT1nLnByb3RvdHlwZVtQXSl9ZnVuY3Rpb24gRihOKXtpZighKHRoaXMgaW5z''@;'; put 'put ''dGFuY2VvZiBGKSlyZXR1cm4gbmV3IEYoTik7Xy5jYWxsKHRoaXMsTiksZy5jYWxsKHRoaXMsTiksdGhpcy5hbGxvd0hhbGZPcGVuPSEwLE4mJighMT09PU4ucmVhZGFibGUmJih0aGlzLnJlYWRhYmxlPSExKSwhMT09PU4ud3JpdGFibGUmJih0aGlzLndyaXRhYmxlPSExKSwhMT09PU4uYWxs''@;'; put 'put ''b3dIYWxmT3BlbiYmKHRoaXMuYWxsb3dIYWxmT3Blbj0hMSx0aGlzLm9uY2UoImVuZCIsTykpKX1mdW5jdGlvbiBPKCl7dGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRlZHx8cHJvY2Vzcy5uZXh0VGljayh6LHRoaXMpfWZ1bmN0aW9uIHooTil7Ti5lbmQoKX1PYmplY3QuZGVmaW5lUHJvcGVydHko''@;'; put 'put ''Ri5wcm90b3R5cGUsIndyaXRhYmxlSGlnaFdhdGVyTWFyayIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUuaGlnaFdhdGVyTWFya319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRi5wcm90b3R5cGUsIndyaXRhYmxlQnVmZmVyIix7ZW51''@;'; put 'put ''bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZSYmdGhpcy5fd3JpdGFibGVTdGF0ZS5nZXRCdWZmZXIoKX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRi5wcm90b3R5cGUsIndyaXRhYmxlTGVuZ3RoIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rp''@;'; put 'put ''b24oKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5sZW5ndGh9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEYucHJvdG90eXBlLCJkZXN0cm95ZWQiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzLl9yZWFkYWJsZVN0YXRlJiZ2b2lkIDAhPT10''@;'; put 'put ''aGlzLl93cml0YWJsZVN0YXRlJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZCYmdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWR9LHNldDpmdW5jdGlvbihMKXt2b2lkIDA9PT10aGlzLl9yZWFkYWJsZVN0YXRlfHx2b2lkIDA9PT10aGlzLl93cml0YWJsZVN0YXRlfHwodGhpcy5f''@;'; put 'put ''cmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ9TCx0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD1MKX19KX0sODM4MjQ6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz1fO3ZhciBJPXkoNDM0MTApO2Z1bmN0aW9uIF8oZyl7aWYoISh0aGlzIGluc3RhbmNlb2YgXykpcmV0dXJu''@;'; put 'put ''IG5ldyBfKGcpO0kuY2FsbCh0aGlzLGcpfXkoNzE5OTMpKF8sSSksXy5wcm90b3R5cGUuX3RyYW5zZm9ybT1mdW5jdGlvbihnLEIsdyl7dyhudWxsLGcpfX0sNjEwOTI6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk7dWUuZXhwb3J0cz1WLFYuUmVhZGFibGVTdGF0ZT1qZSx5KDQ0MzU2''@;'; put 'put ''KTt2YXIgTixnPWZ1bmN0aW9uKEZlLE9lKXtyZXR1cm4gRmUubGlzdGVuZXJzKE9lKS5sZW5ndGh9LEI9eSgxMjYwMSksdz15KDgzODM4KS5CdWZmZXIsUD0odHlwZW9mIGdsb2JhbDwidSI/Z2xvYmFsOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp0eXBlb2Ygc2VsZjwidSI/c2VsZjp7fSku''@;'; put 'put ''VWludDhBcnJheXx8ZnVuY3Rpb24oKXt9LHo9eSg3NzE5OSk7Tj16JiZ6LmRlYnVnbG9nP3ouZGVidWdsb2coInN0cmVhbSIpOmZ1bmN0aW9uKCl7fTt2YXIgaWUsbGUsbWUsTD15KDc1MjI1KSxLPXkoODgxNTIpLFc9eSgyMjgyNykuZ2V0SGlnaFdhdGVyTWFyayxZPXkoMzA0NjQpLkYscT1Z''@;'; put 'put ''LkVSUl9JTlZBTElEX0FSR19UWVBFLGVlPVkuRVJSX1NUUkVBTV9QVVNIX0FGVEVSX0VPRixKPVkuRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQsbmU9WS5FUlJfU1RSRUFNX1VOU0hJRlRfQUZURVJfRU5EX0VWRU5UO3koNzE5OTMpKFYsQik7dmFyIF9lPUsuZXJyb3JPckRlc3Ryb3ksVGU9''@;'; put 'put ''WyJlcnJvciIsImNsb3NlIiwiZGVzdHJveSIsInBhdXNlIiwicmVzdW1lIl07ZnVuY3Rpb24gamUoRGUsRmUsT2Upe0k9SXx8eSgxMDMwKSwiYm9vbGVhbiIhPXR5cGVvZiBPZSYmKE9lPUZlIGluc3RhbmNlb2YgSSksdGhpcy5vYmplY3RNb2RlPSEhKERlPURlfHx7fSkub2JqZWN0TW9kZSxP''@;'; put 'put ''ZSYmKHRoaXMub2JqZWN0TW9kZT10aGlzLm9iamVjdE1vZGV8fCEhRGUucmVhZGFibGVPYmplY3RNb2RlKSx0aGlzLmhpZ2hXYXRlck1hcms9Vyh0aGlzLERlLCJyZWFkYWJsZUhpZ2hXYXRlck1hcmsiLE9lKSx0aGlzLmJ1ZmZlcj1uZXcgTCx0aGlzLmxlbmd0aD0wLHRoaXMucGlwZXM9bnVs''@;'; put 'put ''bCx0aGlzLnBpcGVzQ291bnQ9MCx0aGlzLmZsb3dpbmc9bnVsbCx0aGlzLmVuZGVkPSExLHRoaXMuZW5kRW1pdHRlZD0hMSx0aGlzLnJlYWRpbmc9ITEsdGhpcy5zeW5jPSEwLHRoaXMubmVlZFJlYWRhYmxlPSExLHRoaXMuZW1pdHRlZFJlYWRhYmxlPSExLHRoaXMucmVhZGFibGVMaXN0ZW5p''@;'; put 'put ''bmc9ITEsdGhpcy5yZXN1bWVTY2hlZHVsZWQ9ITEsdGhpcy5wYXVzZWQ9ITAsdGhpcy5lbWl0Q2xvc2U9ITEhPT1EZS5lbWl0Q2xvc2UsdGhpcy5hdXRvRGVzdHJveT0hIURlLmF1dG9EZXN0cm95LHRoaXMuZGVzdHJveWVkPSExLHRoaXMuZGVmYXVsdEVuY29kaW5nPURlLmRlZmF1bHRFbmNv''@;'; put 'put ''ZGluZ3x8InV0ZjgiLHRoaXMuYXdhaXREcmFpbj0wLHRoaXMucmVhZGluZ01vcmU9ITEsdGhpcy5kZWNvZGVyPW51bGwsdGhpcy5lbmNvZGluZz1udWxsLERlLmVuY29kaW5nJiYoaWV8fChpZT15KDc4NDU0KS5JKSx0aGlzLmRlY29kZXI9bmV3IGllKERlLmVuY29kaW5nKSx0aGlzLmVuY29k''@;'; put 'put ''aW5nPURlLmVuY29kaW5nKX1mdW5jdGlvbiBWKERlKXtpZihJPUl8fHkoMTAzMCksISh0aGlzIGluc3RhbmNlb2YgVikpcmV0dXJuIG5ldyBWKERlKTt0aGlzLl9yZWFkYWJsZVN0YXRlPW5ldyBqZShEZSx0aGlzLHRoaXMgaW5zdGFuY2VvZiBJKSx0aGlzLnJlYWRhYmxlPSEwLERlJiYoImZ1''@;'; put 'put ''bmN0aW9uIj09dHlwZW9mIERlLnJlYWQmJih0aGlzLl9yZWFkPURlLnJlYWQpLCJmdW5jdGlvbiI9PXR5cGVvZiBEZS5kZXN0cm95JiYodGhpcy5fZGVzdHJveT1EZS5kZXN0cm95KSksQi5jYWxsKHRoaXMpfWZ1bmN0aW9uIHAoRGUsRmUsT2UsSWUsVmUpe04oInJlYWRhYmxlQWRkQ2h1bmsi''@;'; put 'put ''LEZlKTt2YXIgQWUsa2U9RGUuX3JlYWRhYmxlU3RhdGU7aWYobnVsbD09PUZlKWtlLnJlYWRpbmc9ITEsZnVuY3Rpb24gaihEZSxGZSl7aWYoTigib25Fb2ZDaHVuayIpLCFGZS5lbmRlZCl7aWYoRmUuZGVjb2Rlcil7dmFyIE9lPUZlLmRlY29kZXIuZW5kKCk7T2UmJk9lLmxlbmd0aCYmKEZl''@;'; put 'put ''LmJ1ZmZlci5wdXNoKE9lKSxGZS5sZW5ndGgrPUZlLm9iamVjdE1vZGU/MTpPZS5sZW5ndGgpfUZlLmVuZGVkPSEwLEZlLnN5bmM/RShEZSk6KEZlLm5lZWRSZWFkYWJsZT0hMSxGZS5lbWl0dGVkUmVhZGFibGV8fChGZS5lbWl0dGVkUmVhZGFibGU9ITAsbShEZSkpKX19KERlLGtlKTtlbHNl''@;'; put 'put ''IGlmKFZlfHwoQWU9ZnVuY3Rpb24geChEZSxGZSl7dmFyIE9lO3JldHVybiFmdW5jdGlvbiBPKERlKXtyZXR1cm4gdy5pc0J1ZmZlcihEZSl8fERlIGluc3RhbmNlb2YgUH0oRmUpJiYic3RyaW5nIiE9dHlwZW9mIEZlJiZ2b2lkIDAhPT1GZSYmIURlLm9iamVjdE1vZGUmJihPZT1uZXcgcSgi''@;'; put 'put ''Y2h1bmsiLFsic3RyaW5nIiwiQnVmZmVyIiwiVWludDhBcnJheSJdLEZlKSksT2V9KGtlLEZlKSksQWUpX2UoRGUsQWUpO2Vsc2UgaWYoa2Uub2JqZWN0TW9kZXx8RmUmJkZlLmxlbmd0aD4wKWlmKCJzdHJpbmciIT10eXBlb2YgRmUmJiFrZS5vYmplY3RNb2RlJiZPYmplY3QuZ2V0UHJvdG90''@;'; put 'put ''eXBlT2YoRmUpIT09dy5wcm90b3R5cGUmJihGZT1mdW5jdGlvbiBGKERlKXtyZXR1cm4gdy5mcm9tKERlKX0oRmUpKSxJZSlrZS5lbmRFbWl0dGVkP19lKERlLG5ldyBuZSk6YihEZSxrZSxGZSwhMCk7ZWxzZSBpZihrZS5lbmRlZClfZShEZSxuZXcgZWUpO2Vsc2V7aWYoa2UuZGVzdHJveWVk''@;'; put 'put ''KXJldHVybiExO2tlLnJlYWRpbmc9ITEsa2UuZGVjb2RlciYmIU9lPyhGZT1rZS5kZWNvZGVyLndyaXRlKEZlKSxrZS5vYmplY3RNb2RlfHwwIT09RmUubGVuZ3RoP2IoRGUsa2UsRmUsITEpOkEoRGUsa2UpKTpiKERlLGtlLEZlLCExKX1lbHNlIEllfHwoa2UucmVhZGluZz0hMSxBKERlLGtl''@;'; put 'put ''KSk7cmV0dXJuIWtlLmVuZGVkJiYoa2UubGVuZ3RoPGtlLmhpZ2hXYXRlck1hcmt8fDA9PT1rZS5sZW5ndGgpfWZ1bmN0aW9uIGIoRGUsRmUsT2UsSWUpe0ZlLmZsb3dpbmcmJjA9PT1GZS5sZW5ndGgmJiFGZS5zeW5jPyhGZS5hd2FpdERyYWluPTAsRGUuZW1pdCgiZGF0YSIsT2UpKTooRmUu''@;'; put 'put ''bGVuZ3RoKz1GZS5vYmplY3RNb2RlPzE6T2UubGVuZ3RoLEllP0ZlLmJ1ZmZlci51bnNoaWZ0KE9lKTpGZS5idWZmZXIucHVzaChPZSksRmUubmVlZFJlYWRhYmxlJiZFKERlKSksQShEZSxGZSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KFYucHJvdG90eXBlLCJkZXN0cm95ZWQiLHtlbnVtZXJh''@;'; put 'put ''YmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzLl9yZWFkYWJsZVN0YXRlJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZH0sc2V0OmZ1bmN0aW9uKEZlKXt0aGlzLl9yZWFkYWJsZVN0YXRlJiYodGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ9RmUpfX0p''@;'; put 'put ''LFYucHJvdG90eXBlLmRlc3Ryb3k9Sy5kZXN0cm95LFYucHJvdG90eXBlLl91bmRlc3Ryb3k9Sy51bmRlc3Ryb3ksVi5wcm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24oRGUsRmUpe0ZlKERlKX0sVi5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihEZSxGZSl7dmFyIEllLE9lPXRoaXMuX3JlYWRh''@;'; put 'put ''YmxlU3RhdGU7cmV0dXJuIE9lLm9iamVjdE1vZGU/SWU9ITA6InN0cmluZyI9PXR5cGVvZiBEZSYmKChGZT1GZXx8T2UuZGVmYXVsdEVuY29kaW5nKSE9PU9lLmVuY29kaW5nJiYoRGU9dy5mcm9tKERlLEZlKSxGZT0iIiksSWU9ITApLHAodGhpcyxEZSxGZSwhMSxJZSl9LFYucHJvdG90eXBl''@;'; put 'put ''LnVuc2hpZnQ9ZnVuY3Rpb24oRGUpe3JldHVybiBwKHRoaXMsRGUsbnVsbCwhMCwhMSl9LFYucHJvdG90eXBlLmlzUGF1c2VkPWZ1bmN0aW9uKCl7cmV0dXJuITE9PT10aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmd9LFYucHJvdG90eXBlLnNldEVuY29kaW5nPWZ1bmN0aW9uKERlKXtpZXx8''@;'; put 'put ''KGllPXkoNzg0NTQpLkkpO3ZhciBGZT1uZXcgaWUoRGUpO3RoaXMuX3JlYWRhYmxlU3RhdGUuZGVjb2Rlcj1GZSx0aGlzLl9yZWFkYWJsZVN0YXRlLmVuY29kaW5nPXRoaXMuX3JlYWRhYmxlU3RhdGUuZGVjb2Rlci5lbmNvZGluZztmb3IodmFyIE9lPXRoaXMuX3JlYWRhYmxlU3RhdGUuYnVm''@;'; put 'put ''ZmVyLmhlYWQsSWU9IiI7bnVsbCE9PU9lOylJZSs9RmUud3JpdGUoT2UuZGF0YSksT2U9T2UubmV4dDtyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5idWZmZXIuY2xlYXIoKSwiIiE9PUllJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmJ1ZmZlci5wdXNoKEllKSx0aGlzLl9yZWFkYWJsZVN0YXRl''@;'; put 'put ''Lmxlbmd0aD1JZS5sZW5ndGgsdGhpc307dmFyIEM9MTA3Mzc0MTgyNDtmdW5jdGlvbiBIKERlLEZlKXtyZXR1cm4gRGU8PTB8fDA9PT1GZS5sZW5ndGgmJkZlLmVuZGVkPzA6RmUub2JqZWN0TW9kZT8xOkRlIT1EZT9GZS5mbG93aW5nJiZGZS5sZW5ndGg/RmUuYnVmZmVyLmhlYWQuZGF0YS5s''@;'; put 'put ''ZW5ndGg6RmUubGVuZ3RoOihEZT5GZS5oaWdoV2F0ZXJNYXJrJiYoRmUuaGlnaFdhdGVyTWFyaz1mdW5jdGlvbiBUKERlKXtyZXR1cm4gRGU+PUM/RGU9QzooRGUtLSxEZXw9RGU+Pj4xLERlfD1EZT4+PjIsRGV8PURlPj4+NCxEZXw9RGU+Pj44LERlfD1EZT4+PjE2LERlKyspLERlfShEZSkp''@;'; put 'put ''LERlPD1GZS5sZW5ndGg/RGU6RmUuZW5kZWQ/RmUubGVuZ3RoOihGZS5uZWVkUmVhZGFibGU9ITAsMCkpfWZ1bmN0aW9uIEUoRGUpe3ZhciBGZT1EZS5fcmVhZGFibGVTdGF0ZTtOKCJlbWl0UmVhZGFibGUiLEZlLm5lZWRSZWFkYWJsZSxGZS5lbWl0dGVkUmVhZGFibGUpLEZlLm5lZWRSZWFk''@;'; put 'put ''YWJsZT0hMSxGZS5lbWl0dGVkUmVhZGFibGV8fChOKCJlbWl0UmVhZGFibGUiLEZlLmZsb3dpbmcpLEZlLmVtaXR0ZWRSZWFkYWJsZT0hMCxwcm9jZXNzLm5leHRUaWNrKG0sRGUpKX1mdW5jdGlvbiBtKERlKXt2YXIgRmU9RGUuX3JlYWRhYmxlU3RhdGU7TigiZW1pdFJlYWRhYmxlXyIsRmUu''@;'; put 'put ''ZGVzdHJveWVkLEZlLmxlbmd0aCxGZS5lbmRlZCksIUZlLmRlc3Ryb3llZCYmKEZlLmxlbmd0aHx8RmUuZW5kZWQpJiYoRGUuZW1pdCgicmVhZGFibGUiKSxGZS5lbWl0dGVkUmVhZGFibGU9ITEpLEZlLm5lZWRSZWFkYWJsZT0hRmUuZmxvd2luZyYmIUZlLmVuZGVkJiZGZS5sZW5ndGg8PUZl''@;'; put 'put ''LmhpZ2hXYXRlck1hcmssb3QoRGUpfWZ1bmN0aW9uIEEoRGUsRmUpe0ZlLnJlYWRpbmdNb3JlfHwoRmUucmVhZGluZ01vcmU9ITAscHJvY2Vzcy5uZXh0VGljayhhZSxEZSxGZSkpfWZ1bmN0aW9uIGFlKERlLEZlKXtmb3IoOyFGZS5yZWFkaW5nJiYhRmUuZW5kZWQmJihGZS5sZW5ndGg8RmUu''@;'; put 'put ''aGlnaFdhdGVyTWFya3x8RmUuZmxvd2luZyYmMD09PUZlLmxlbmd0aCk7KXt2YXIgT2U9RmUubGVuZ3RoO2lmKE4oIm1heWJlUmVhZE1vcmUgcmVhZCAwIiksRGUucmVhZCgwKSxPZT09PUZlLmxlbmd0aClicmVha31GZS5yZWFkaW5nTW9yZT0hMX1mdW5jdGlvbiBzZShEZSl7dmFyIEZlPURl''@;'; put 'put ''Ll9yZWFkYWJsZVN0YXRlO0ZlLnJlYWRhYmxlTGlzdGVuaW5nPURlLmxpc3RlbmVyQ291bnQoInJlYWRhYmxlIik+MCxGZS5yZXN1bWVTY2hlZHVsZWQmJiFGZS5wYXVzZWQ/RmUuZmxvd2luZz0hMDpEZS5saXN0ZW5lckNvdW50KCJkYXRhIik+MCYmRGUucmVzdW1lKCl9ZnVuY3Rpb24gd2Uo''@;'; put 'put ''RGUpe04oInJlYWRhYmxlIG5leHR0aWNrIHJlYWQgMCIpLERlLnJlYWQoMCl9ZnVuY3Rpb24gSmUoRGUsRmUpe04oInJlc3VtZSIsRmUucmVhZGluZyksRmUucmVhZGluZ3x8RGUucmVhZCgwKSxGZS5yZXN1bWVTY2hlZHVsZWQ9ITEsRGUuZW1pdCgicmVzdW1lIiksb3QoRGUpLEZlLmZsb3dp''@;'; put 'put ''bmcmJiFGZS5yZWFkaW5nJiZEZS5yZWFkKDApfWZ1bmN0aW9uIG90KERlKXt2YXIgRmU9RGUuX3JlYWRhYmxlU3RhdGU7Zm9yKE4oImZsb3ciLEZlLmZsb3dpbmcpO0ZlLmZsb3dpbmcmJm51bGwhPT1EZS5yZWFkKCk7KTt9ZnVuY3Rpb24geGUoRGUsRmUpe3JldHVybiAwPT09RmUubGVuZ3Ro''@;'; put 'put ''P251bGw6KEZlLm9iamVjdE1vZGU/T2U9RmUuYnVmZmVyLnNoaWZ0KCk6IURlfHxEZT49RmUubGVuZ3RoPyhPZT1GZS5kZWNvZGVyP0ZlLmJ1ZmZlci5qb2luKCIiKToxPT09RmUuYnVmZmVyLmxlbmd0aD9GZS5idWZmZXIuZmlyc3QoKTpGZS5idWZmZXIuY29uY2F0KEZlLmxlbmd0aCksRmUu''@;'; put 'put ''YnVmZmVyLmNsZWFyKCkpOk9lPUZlLmJ1ZmZlci5jb25zdW1lKERlLEZlLmRlY29kZXIpLE9lKTt2YXIgT2V9ZnVuY3Rpb24gdmUoRGUpe3ZhciBGZT1EZS5fcmVhZGFibGVTdGF0ZTtOKCJlbmRSZWFkYWJsZSIsRmUuZW5kRW1pdHRlZCksRmUuZW5kRW1pdHRlZHx8KEZlLmVuZGVkPSEwLHBy''@;'; put 'put ''b2Nlc3MubmV4dFRpY2soWGUsRmUsRGUpKX1mdW5jdGlvbiBYZShEZSxGZSl7aWYoTigiZW5kUmVhZGFibGVOVCIsRGUuZW5kRW1pdHRlZCxEZS5sZW5ndGgpLCFEZS5lbmRFbWl0dGVkJiYwPT09RGUubGVuZ3RoJiYoRGUuZW5kRW1pdHRlZD0hMCxGZS5yZWFkYWJsZT0hMSxGZS5lbWl0KCJl''@;'; put 'put ''bmQiKSxEZS5hdXRvRGVzdHJveSkpe3ZhciBPZT1GZS5fd3JpdGFibGVTdGF0ZTsoIU9lfHxPZS5hdXRvRGVzdHJveSYmT2UuZmluaXNoZWQpJiZGZS5kZXN0cm95KCl9fWZ1bmN0aW9uIHplKERlLEZlKXtmb3IodmFyIE9lPTAsSWU9RGUubGVuZ3RoO09lPEllO09lKyspaWYoRGVbT2VdPT09''@;'; put 'put ''RmUpcmV0dXJuIE9lO3JldHVybi0xfVYucHJvdG90eXBlLnJlYWQ9ZnVuY3Rpb24oRGUpe04oInJlYWQiLERlKSxEZT1wYXJzZUludChEZSwxMCk7dmFyIEZlPXRoaXMuX3JlYWRhYmxlU3RhdGUsT2U9RGU7aWYoMCE9PURlJiYoRmUuZW1pdHRlZFJlYWRhYmxlPSExKSwwPT09RGUmJkZlLm5l''@;'; put 'put ''ZWRSZWFkYWJsZSYmKCgwIT09RmUuaGlnaFdhdGVyTWFyaz9GZS5sZW5ndGg+PUZlLmhpZ2hXYXRlck1hcms6RmUubGVuZ3RoPjApfHxGZS5lbmRlZCkpcmV0dXJuIE4oInJlYWQ6IGVtaXRSZWFkYWJsZSIsRmUubGVuZ3RoLEZlLmVuZGVkKSwwPT09RmUubGVuZ3RoJiZGZS5lbmRlZD92ZSh0''@;'; put 'put ''aGlzKTpFKHRoaXMpLG51bGw7aWYoMD09PShEZT1IKERlLEZlKSkmJkZlLmVuZGVkKXJldHVybiAwPT09RmUubGVuZ3RoJiZ2ZSh0aGlzKSxudWxsO3ZhciBWZSxJZT1GZS5uZWVkUmVhZGFibGU7cmV0dXJuIE4oIm5lZWQgcmVhZGFibGUiLEllKSwoMD09PUZlLmxlbmd0aHx8RmUubGVuZ3Ro''@;'; put 'put ''LURlPEZlLmhpZ2hXYXRlck1hcmspJiZOKCJsZW5ndGggbGVzcyB0aGFuIHdhdGVybWFyayIsSWU9ITApLEZlLmVuZGVkfHxGZS5yZWFkaW5nP04oInJlYWRpbmcgb3IgZW5kZWQiLEllPSExKTpJZSYmKE4oImRvIHJlYWQiKSxGZS5yZWFkaW5nPSEwLEZlLnN5bmM9ITAsMD09PUZlLmxlbmd0''@;'; put 'put ''aCYmKEZlLm5lZWRSZWFkYWJsZT0hMCksdGhpcy5fcmVhZChGZS5oaWdoV2F0ZXJNYXJrKSxGZS5zeW5jPSExLEZlLnJlYWRpbmd8fChEZT1IKE9lLEZlKSkpLG51bGw9PT0oVmU9RGU+MD94ZShEZSxGZSk6bnVsbCk/KEZlLm5lZWRSZWFkYWJsZT1GZS5sZW5ndGg8PUZlLmhpZ2hXYXRlck1h''@;'; put 'put ''cmssRGU9MCk6KEZlLmxlbmd0aC09RGUsRmUuYXdhaXREcmFpbj0wKSwwPT09RmUubGVuZ3RoJiYoRmUuZW5kZWR8fChGZS5uZWVkUmVhZGFibGU9ITApLE9lIT09RGUmJkZlLmVuZGVkJiZ2ZSh0aGlzKSksbnVsbCE9PVZlJiZ0aGlzLmVtaXQoImRhdGEiLFZlKSxWZX0sVi5wcm90b3R5cGUu''@;'; put 'put ''X3JlYWQ9ZnVuY3Rpb24oRGUpe19lKHRoaXMsbmV3IEooIl9yZWFkKCkiKSl9LFYucHJvdG90eXBlLnBpcGU9ZnVuY3Rpb24oRGUsRmUpe3ZhciBPZT10aGlzLEllPXRoaXMuX3JlYWRhYmxlU3RhdGU7c3dpdGNoKEllLnBpcGVzQ291bnQpe2Nhc2UgMDpJZS5waXBlcz1EZTticmVhaztjYXNl''@;'; put 'put ''IDE6SWUucGlwZXM9W0llLnBpcGVzLERlXTticmVhaztkZWZhdWx0OkllLnBpcGVzLnB1c2goRGUpfUllLnBpcGVzQ291bnQrPTEsTigicGlwZSBjb3VudD0lZCBvcHRzPSVqIixJZS5waXBlc0NvdW50LEZlKTt2YXIga2U9RmUmJiExPT09RmUuZW5kfHxEZT09PXByb2Nlc3Muc3Rkb3V0fHxE''@;'; put 'put ''ZT09PXByb2Nlc3Muc3RkZXJyPyRlOl90O2Z1bmN0aW9uIF90KCl7Tigib25lbmQiKSxEZS5lbmQoKX1JZS5lbmRFbWl0dGVkP3Byb2Nlc3MubmV4dFRpY2soa2UpOk9lLm9uY2UoImVuZCIsa2UpLERlLm9uKCJ1bnBpcGUiLGZ1bmN0aW9uIEFlKHR0LEhlKXtOKCJvbnVucGlwZSIpLHR0PT09''@;'; put 'put ''T2UmJkhlJiYhMT09PUhlLmhhc1VucGlwZWQmJihIZS5oYXNVbnBpcGVkPSEwLGZ1bmN0aW9uIHVuKCl7TigiY2xlYW51cCIpLERlLnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIsRHQpLERlLnJlbW92ZUxpc3RlbmVyKCJmaW5pc2giLGl0KSxEZS5yZW1vdmVMaXN0ZW5lcigiZHJhaW4iLG50KSxE''@;'; put 'put ''ZS5yZW1vdmVMaXN0ZW5lcigiZXJyb3IiLE10KSxEZS5yZW1vdmVMaXN0ZW5lcigidW5waXBlIixBZSksT2UucmVtb3ZlTGlzdGVuZXIoImVuZCIsX3QpLE9lLnJlbW92ZUxpc3RlbmVyKCJlbmQiLCRlKSxPZS5yZW1vdmVMaXN0ZW5lcigiZGF0YSIseXQpLFFlPSEwLEllLmF3YWl0RHJhaW4m''@;'; put 'put ''JighRGUuX3dyaXRhYmxlU3RhdGV8fERlLl93cml0YWJsZVN0YXRlLm5lZWREcmFpbikmJm50KCl9KCkpfSk7dmFyIG50PWZ1bmN0aW9uIHRlKERlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgT2U9RGUuX3JlYWRhYmxlU3RhdGU7TigicGlwZU9uRHJhaW4iLE9lLmF3YWl0RHJhaW4pLE9lLmF3''@;'; put 'put ''YWl0RHJhaW4mJk9lLmF3YWl0RHJhaW4tLSwwPT09T2UuYXdhaXREcmFpbiYmZyhEZSwiZGF0YSIpJiYoT2UuZmxvd2luZz0hMCxvdChEZSkpfX0oT2UpO0RlLm9uKCJkcmFpbiIsbnQpO3ZhciBRZT0hMTtmdW5jdGlvbiB5dCh0dCl7Tigib25kYXRhIik7dmFyIEhlPURlLndyaXRlKHR0KTtO''@;'; put 'put ''KCJkZXN0LndyaXRlIixIZSksITE9PT1IZSYmKCgxPT09SWUucGlwZXNDb3VudCYmSWUucGlwZXM9PT1EZXx8SWUucGlwZXNDb3VudD4xJiYtMSE9PXplKEllLnBpcGVzLERlKSkmJiFRZSYmKE4oImZhbHNlIHdyaXRlIHJlc3BvbnNlLCBwYXVzZSIsSWUuYXdhaXREcmFpbiksSWUuYXdhaXRE''@;'; put 'put ''cmFpbisrKSxPZS5wYXVzZSgpKX1mdW5jdGlvbiBNdCh0dCl7Tigib25lcnJvciIsdHQpLCRlKCksRGUucmVtb3ZlTGlzdGVuZXIoImVycm9yIixNdCksMD09PWcoRGUsImVycm9yIikmJl9lKERlLHR0KX1mdW5jdGlvbiBEdCgpe0RlLnJlbW92ZUxpc3RlbmVyKCJmaW5pc2giLGl0KSwkZSgp''@;'; put 'put ''fWZ1bmN0aW9uIGl0KCl7Tigib25maW5pc2giKSxEZS5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLER0KSwkZSgpfWZ1bmN0aW9uICRlKCl7TigidW5waXBlIiksT2UudW5waXBlKERlKX1yZXR1cm4gT2Uub24oImRhdGEiLHl0KSxmdW5jdGlvbiBTZShEZSxGZSxPZSl7aWYoImZ1bmN0aW9uIj09''@;'; put 'put ''dHlwZW9mIERlLnByZXBlbmRMaXN0ZW5lcilyZXR1cm4gRGUucHJlcGVuZExpc3RlbmVyKEZlLE9lKTtEZS5fZXZlbnRzJiZEZS5fZXZlbnRzW0ZlXT9BcnJheS5pc0FycmF5KERlLl9ldmVudHNbRmVdKT9EZS5fZXZlbnRzW0ZlXS51bnNoaWZ0KE9lKTpEZS5fZXZlbnRzW0ZlXT1bT2UsRGUu''@;'; put 'put ''X2V2ZW50c1tGZV1dOkRlLm9uKEZlLE9lKX0oRGUsImVycm9yIixNdCksRGUub25jZSgiY2xvc2UiLER0KSxEZS5vbmNlKCJmaW5pc2giLGl0KSxEZS5lbWl0KCJwaXBlIixPZSksSWUuZmxvd2luZ3x8KE4oInBpcGUgcmVzdW1lIiksT2UucmVzdW1lKCkpLERlfSxWLnByb3RvdHlwZS51bnBp''@;'; put 'put ''cGU9ZnVuY3Rpb24oRGUpe3ZhciBGZT10aGlzLl9yZWFkYWJsZVN0YXRlLE9lPXtoYXNVbnBpcGVkOiExfTtpZigwPT09RmUucGlwZXNDb3VudClyZXR1cm4gdGhpcztpZigxPT09RmUucGlwZXNDb3VudClyZXR1cm4gRGUmJkRlIT09RmUucGlwZXN8fChEZXx8KERlPUZlLnBpcGVzKSxGZS5w''@;'; put 'put ''aXBlcz1udWxsLEZlLnBpcGVzQ291bnQ9MCxGZS5mbG93aW5nPSExLERlJiZEZS5lbWl0KCJ1bnBpcGUiLHRoaXMsT2UpKSx0aGlzO2lmKCFEZSl7dmFyIEllPUZlLnBpcGVzLFZlPUZlLnBpcGVzQ291bnQ7RmUucGlwZXM9bnVsbCxGZS5waXBlc0NvdW50PTAsRmUuZmxvd2luZz0hMTtmb3Io''@;'; put 'put ''dmFyIGtlPTA7a2U8VmU7a2UrKylJZVtrZV0uZW1pdCgidW5waXBlIix0aGlzLHtoYXNVbnBpcGVkOiExfSk7cmV0dXJuIHRoaXN9dmFyIEFlPXplKEZlLnBpcGVzLERlKTtyZXR1cm4tMT09PUFlfHwoRmUucGlwZXMuc3BsaWNlKEFlLDEpLEZlLnBpcGVzQ291bnQtPTEsMT09PUZlLnBpcGVz''@;'; put 'put ''Q291bnQmJihGZS5waXBlcz1GZS5waXBlc1swXSksRGUuZW1pdCgidW5waXBlIix0aGlzLE9lKSksdGhpc30sVi5wcm90b3R5cGUuYWRkTGlzdGVuZXI9Vi5wcm90b3R5cGUub249ZnVuY3Rpb24oRGUsRmUpe3ZhciBPZT1CLnByb3RvdHlwZS5vbi5jYWxsKHRoaXMsRGUsRmUpLEllPXRoaXMu''@;'; put 'put ''X3JlYWRhYmxlU3RhdGU7cmV0dXJuImRhdGEiPT09RGU/KEllLnJlYWRhYmxlTGlzdGVuaW5nPXRoaXMubGlzdGVuZXJDb3VudCgicmVhZGFibGUiKT4wLCExIT09SWUuZmxvd2luZyYmdGhpcy5yZXN1bWUoKSk6InJlYWRhYmxlIj09PURlJiYhSWUuZW5kRW1pdHRlZCYmIUllLnJlYWRhYmxl''@;'; put 'put ''TGlzdGVuaW5nJiYoSWUucmVhZGFibGVMaXN0ZW5pbmc9SWUubmVlZFJlYWRhYmxlPSEwLEllLmZsb3dpbmc9ITEsSWUuZW1pdHRlZFJlYWRhYmxlPSExLE4oIm9uIHJlYWRhYmxlIixJZS5sZW5ndGgsSWUucmVhZGluZyksSWUubGVuZ3RoP0UodGhpcyk6SWUucmVhZGluZ3x8cHJvY2Vzcy5u''@;'; put 'put ''ZXh0VGljayh3ZSx0aGlzKSksT2V9LFYucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyPWZ1bmN0aW9uKERlLEZlKXt2YXIgT2U9Qi5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIuY2FsbCh0aGlzLERlLEZlKTtyZXR1cm4icmVhZGFibGUiPT09RGUmJnByb2Nlc3MubmV4dFRpY2soc2UsdGhpcyks''@;'; put 'put ''T2V9LFYucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycz1mdW5jdGlvbihEZSl7dmFyIEZlPUIucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycy5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuKCJyZWFkYWJsZSI9PT1EZXx8dm9pZCAwPT09RGUpJiZwcm9jZXNzLm5leHRUaWNrKHNl''@;'; put 'put ''LHRoaXMpLEZlfSxWLnByb3RvdHlwZS5yZXN1bWU9ZnVuY3Rpb24oKXt2YXIgRGU9dGhpcy5fcmVhZGFibGVTdGF0ZTtyZXR1cm4gRGUuZmxvd2luZ3x8KE4oInJlc3VtZSIpLERlLmZsb3dpbmc9IURlLnJlYWRhYmxlTGlzdGVuaW5nLGZ1bmN0aW9uIFVlKERlLEZlKXtGZS5yZXN1bWVTY2hl''@;'; put 'put ''ZHVsZWR8fChGZS5yZXN1bWVTY2hlZHVsZWQ9ITAscHJvY2Vzcy5uZXh0VGljayhKZSxEZSxGZSkpfSh0aGlzLERlKSksRGUucGF1c2VkPSExLHRoaXN9LFYucHJvdG90eXBlLnBhdXNlPWZ1bmN0aW9uKCl7cmV0dXJuIE4oImNhbGwgcGF1c2UgZmxvd2luZz0laiIsdGhpcy5fcmVhZGFibGVT''@;'; put 'put ''dGF0ZS5mbG93aW5nKSwhMSE9PXRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZyYmKE4oInBhdXNlIiksdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nPSExLHRoaXMuZW1pdCgicGF1c2UiKSksdGhpcy5fcmVhZGFibGVTdGF0ZS5wYXVzZWQ9ITAsdGhpc30sVi5wcm90b3R5cGUud3JhcD1m''@;'; put 'put ''dW5jdGlvbihEZSl7dmFyIEZlPXRoaXMsT2U9dGhpcy5fcmVhZGFibGVTdGF0ZSxJZT0hMTtmb3IodmFyIFZlIGluIERlLm9uKCJlbmQiLGZ1bmN0aW9uKCl7aWYoTigid3JhcHBlZCBlbmQiKSxPZS5kZWNvZGVyJiYhT2UuZW5kZWQpe3ZhciBBZT1PZS5kZWNvZGVyLmVuZCgpO0FlJiZBZS5s''@;'; put 'put ''ZW5ndGgmJkZlLnB1c2goQWUpfUZlLnB1c2gobnVsbCl9KSxEZS5vbigiZGF0YSIsZnVuY3Rpb24oQWUpe04oIndyYXBwZWQgZGF0YSIpLE9lLmRlY29kZXImJihBZT1PZS5kZWNvZGVyLndyaXRlKEFlKSksT2Uub2JqZWN0TW9kZSYmbnVsbD09QWV8fCEoT2Uub2JqZWN0TW9kZXx8QWUmJkFl''@;'; put 'put ''Lmxlbmd0aCl8fEZlLnB1c2goQWUpfHwoSWU9ITAsRGUucGF1c2UoKSl9KSxEZSl2b2lkIDA9PT10aGlzW1ZlXSYmImZ1bmN0aW9uIj09dHlwZW9mIERlW1ZlXSYmKHRoaXNbVmVdPWZ1bmN0aW9uKF90KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gRGVbX3RdLmFwcGx5KERlLGFyZ3VtZW50''@;'; put 'put ''cyl9fShWZSkpO2Zvcih2YXIga2U9MDtrZTxUZS5sZW5ndGg7a2UrKylEZS5vbihUZVtrZV0sdGhpcy5lbWl0LmJpbmQodGhpcyxUZVtrZV0pKTtyZXR1cm4gdGhpcy5fcmVhZD1mdW5jdGlvbihBZSl7Tigid3JhcHBlZCBfcmVhZCIsQWUpLEllJiYoSWU9ITEsRGUucmVzdW1lKCkpfSx0aGlz''@;'; put 'put ''fSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYoVi5wcm90b3R5cGVbU3ltYm9sLmFzeW5jSXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMD09PWxlJiYobGU9eSgxMjY4MykpLGxlKHRoaXMpfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFYucHJvdG90eXBlLCJyZWFkYWJsZUhp''@;'; put 'put ''Z2hXYXRlck1hcmsiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmhpZ2hXYXRlck1hcmt9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFYucHJvdG90eXBlLCJyZWFkYWJsZUJ1ZmZlciIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9u''@;'; put 'put ''KCl7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUmJnRoaXMuX3JlYWRhYmxlU3RhdGUuYnVmZmVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShWLnByb3RvdHlwZSwicmVhZGFibGVGbG93aW5nIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVhZGFibGVT''@;'; put 'put ''dGF0ZS5mbG93aW5nfSxzZXQ6ZnVuY3Rpb24oRmUpe3RoaXMuX3JlYWRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmc9RmUpfX0pLFYuX2Zyb21MaXN0PXhlLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShWLnByb3RvdHlwZSwicmVhZGFibGVMZW5ndGgiLHtlbnVtZXJhYmxl''@;'; put 'put ''OiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmxlbmd0aH19KSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYoVi5mcm9tPWZ1bmN0aW9uKERlLEZlKXtyZXR1cm4gdm9pZCAwPT09bWUmJihtZT15KDQ3NzY1KSksbWUoVixEZSxGZSl9KX0sNDM0MTA6KHVl''@;'; put 'put ''LFgseSk9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz1PO3ZhciBJPXkoMzA0NjQpLkYsXz1JLkVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVELGc9SS5FUlJfTVVMVElQTEVfQ0FMTEJBQ0ssQj1JLkVSUl9UUkFOU0ZPUk1fQUxSRUFEWV9UUkFOU0ZPUk1JTkcsdz1JLkVSUl9UUkFOU0ZPUk1f''@;'; put 'put ''V0lUSF9MRU5HVEhfMCxQPXkoMTAzMCk7ZnVuY3Rpb24gRihMLEspe3ZhciBVPXRoaXMuX3RyYW5zZm9ybVN0YXRlO1UudHJhbnNmb3JtaW5nPSExO3ZhciBXPVUud3JpdGVjYjtpZihudWxsPT09VylyZXR1cm4gdGhpcy5lbWl0KCJlcnJvciIsbmV3IGcpO1Uud3JpdGVjaHVuaz1udWxsLFUu''@;'; put 'put ''d3JpdGVjYj1udWxsLG51bGwhPUsmJnRoaXMucHVzaChLKSxXKEwpO3ZhciBZPXRoaXMuX3JlYWRhYmxlU3RhdGU7WS5yZWFkaW5nPSExLChZLm5lZWRSZWFkYWJsZXx8WS5sZW5ndGg8WS5oaWdoV2F0ZXJNYXJrKSYmdGhpcy5fcmVhZChZLmhpZ2hXYXRlck1hcmspfWZ1bmN0aW9uIE8oTCl7''@;'; put 'put ''aWYoISh0aGlzIGluc3RhbmNlb2YgTykpcmV0dXJuIG5ldyBPKEwpO1AuY2FsbCh0aGlzLEwpLHRoaXMuX3RyYW5zZm9ybVN0YXRlPXthZnRlclRyYW5zZm9ybTpGLmJpbmQodGhpcyksbmVlZFRyYW5zZm9ybTohMSx0cmFuc2Zvcm1pbmc6ITEsd3JpdGVjYjpudWxsLHdyaXRlY2h1bms6bnVs''@;'; put 'put ''bCx3cml0ZWVuY29kaW5nOm51bGx9LHRoaXMuX3JlYWRhYmxlU3RhdGUubmVlZFJlYWRhYmxlPSEwLHRoaXMuX3JlYWRhYmxlU3RhdGUuc3luYz0hMSxMJiYoImZ1bmN0aW9uIj09dHlwZW9mIEwudHJhbnNmb3JtJiYodGhpcy5fdHJhbnNmb3JtPUwudHJhbnNmb3JtKSwiZnVuY3Rpb24iPT10''@;'; put 'put ''eXBlb2YgTC5mbHVzaCYmKHRoaXMuX2ZsdXNoPUwuZmx1c2gpKSx0aGlzLm9uKCJwcmVmaW5pc2giLHopfWZ1bmN0aW9uIHooKXt2YXIgTD10aGlzOyJmdW5jdGlvbiIhPXR5cGVvZiB0aGlzLl9mbHVzaHx8dGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ/Tih0aGlzLG51bGwsbnVsbCk6''@;'; put 'put ''dGhpcy5fZmx1c2goZnVuY3Rpb24oSyxVKXtOKEwsSyxVKX0pfWZ1bmN0aW9uIE4oTCxLLFUpe2lmKEspcmV0dXJuIEwuZW1pdCgiZXJyb3IiLEspO2lmKG51bGwhPVUmJkwucHVzaChVKSxMLl93cml0YWJsZVN0YXRlLmxlbmd0aCl0aHJvdyBuZXcgdztpZihMLl90cmFuc2Zvcm1TdGF0ZS50''@;'; put 'put ''cmFuc2Zvcm1pbmcpdGhyb3cgbmV3IEI7cmV0dXJuIEwucHVzaChudWxsKX15KDcxOTkzKShPLFApLE8ucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oTCxLKXtyZXR1cm4gdGhpcy5fdHJhbnNmb3JtU3RhdGUubmVlZFRyYW5zZm9ybT0hMSxQLnByb3RvdHlwZS5wdXNoLmNhbGwodGhpcyxMLEsp''@;'; put 'put ''fSxPLnByb3RvdHlwZS5fdHJhbnNmb3JtPWZ1bmN0aW9uKEwsSyxVKXtVKG5ldyBfKCJfdHJhbnNmb3JtKCkiKSl9LE8ucHJvdG90eXBlLl93cml0ZT1mdW5jdGlvbihMLEssVSl7dmFyIFc9dGhpcy5fdHJhbnNmb3JtU3RhdGU7aWYoVy53cml0ZWNiPVUsVy53cml0ZWNodW5rPUwsVy53cml0''@;'; put 'put ''ZWVuY29kaW5nPUssIVcudHJhbnNmb3JtaW5nKXt2YXIgWT10aGlzLl9yZWFkYWJsZVN0YXRlOyhXLm5lZWRUcmFuc2Zvcm18fFkubmVlZFJlYWRhYmxlfHxZLmxlbmd0aDxZLmhpZ2hXYXRlck1hcmspJiZ0aGlzLl9yZWFkKFkuaGlnaFdhdGVyTWFyayl9fSxPLnByb3RvdHlwZS5fcmVhZD1m''@;'; put 'put ''dW5jdGlvbihMKXt2YXIgSz10aGlzLl90cmFuc2Zvcm1TdGF0ZTtudWxsPT09Sy53cml0ZWNodW5rfHxLLnRyYW5zZm9ybWluZz9LLm5lZWRUcmFuc2Zvcm09ITA6KEsudHJhbnNmb3JtaW5nPSEwLHRoaXMuX3RyYW5zZm9ybShLLndyaXRlY2h1bmssSy53cml0ZWVuY29kaW5nLEsuYWZ0ZXJU''@;'; put 'put ''cmFuc2Zvcm0pKX0sTy5wcm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24oTCxLKXtQLnByb3RvdHlwZS5fZGVzdHJveS5jYWxsKHRoaXMsTCxmdW5jdGlvbihVKXtLKFUpfSl9fSwxNTQ5MjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBfKG90KXt2YXIgeGU9dGhpczt0aGlzLm5l''@;'; put 'put ''eHQ9bnVsbCx0aGlzLmVudHJ5PW51bGwsdGhpcy5maW5pc2g9ZnVuY3Rpb24oKXshZnVuY3Rpb24gSmUob3QseGUsdmUpe3ZhciBYZT1vdC5lbnRyeTtmb3Iob3QuZW50cnk9bnVsbDtYZTspe3ZhciB6ZT1YZS5jYWxsYmFjazt4ZS5wZW5kaW5nY2ItLSx6ZSh2ZSksWGU9WGUubmV4dH14ZS5j''@;'; put 'put ''b3JrZWRSZXF1ZXN0c0ZyZWUubmV4dD1vdH0oeGUsb3QpfX12YXIgZzt1ZS5leHBvcnRzPWplLGplLldyaXRhYmxlU3RhdGU9VGU7dmFyIFNlLEI9e2RlcHJlY2F0ZTp5KDMzOTgpfSx3PXkoMTI2MDEpLFA9eSg4MzgzOCkuQnVmZmVyLEY9KHR5cGVvZiBnbG9iYWw8InUiP2dsb2JhbDp0eXBl''@;'; put 'put ''b2Ygd2luZG93PCJ1Ij93aW5kb3c6dHlwZW9mIHNlbGY8InUiP3NlbGY6e30pLlVpbnQ4QXJyYXl8fGZ1bmN0aW9uKCl7fSxOPXkoODgxNTIpLEs9eSgyMjgyNykuZ2V0SGlnaFdhdGVyTWFyayxVPXkoMzA0NjQpLkYsVz1VLkVSUl9JTlZBTElEX0FSR19UWVBFLFk9VS5FUlJfTUVUSE9EX05P''@;'; put 'put ''VF9JTVBMRU1FTlRFRCxxPVUuRVJSX01VTFRJUExFX0NBTExCQUNLLGVlPVUuRVJSX1NUUkVBTV9DQU5OT1RfUElQRSxKPVUuRVJSX1NUUkVBTV9ERVNUUk9ZRUQsbmU9VS5FUlJfU1RSRUFNX05VTExfVkFMVUVTLGllPVUuRVJSX1NUUkVBTV9XUklURV9BRlRFUl9FTkQsbGU9VS5FUlJfVU5L''@;'; put 'put ''Tk9XTl9FTkNPRElORyxtZT1OLmVycm9yT3JEZXN0cm95O2Z1bmN0aW9uIF9lKCl7fWZ1bmN0aW9uIFRlKG90LHhlLHZlKXtnPWd8fHkoMTAzMCksImJvb2xlYW4iIT10eXBlb2YgdmUmJih2ZT14ZSBpbnN0YW5jZW9mIGcpLHRoaXMub2JqZWN0TW9kZT0hIShvdD1vdHx8e30pLm9iamVjdE1v''@;'; put 'put ''ZGUsdmUmJih0aGlzLm9iamVjdE1vZGU9dGhpcy5vYmplY3RNb2RlfHwhIW90LndyaXRhYmxlT2JqZWN0TW9kZSksdGhpcy5oaWdoV2F0ZXJNYXJrPUsodGhpcyxvdCwid3JpdGFibGVIaWdoV2F0ZXJNYXJrIix2ZSksdGhpcy5maW5hbENhbGxlZD0hMSx0aGlzLm5lZWREcmFpbj0hMSx0aGlz''@;'; put 'put ''LmVuZGluZz0hMSx0aGlzLmVuZGVkPSExLHRoaXMuZmluaXNoZWQ9ITEsdGhpcy5kZXN0cm95ZWQ9ITEsdGhpcy5kZWNvZGVTdHJpbmdzPSEoITE9PT1vdC5kZWNvZGVTdHJpbmdzKSx0aGlzLmRlZmF1bHRFbmNvZGluZz1vdC5kZWZhdWx0RW5jb2Rpbmd8fCJ1dGY4Iix0aGlzLmxlbmd0aD0w''@;'; put 'put ''LHRoaXMud3JpdGluZz0hMSx0aGlzLmNvcmtlZD0wLHRoaXMuc3luYz0hMCx0aGlzLmJ1ZmZlclByb2Nlc3Npbmc9ITEsdGhpcy5vbndyaXRlPWZ1bmN0aW9uKHplKXshZnVuY3Rpb24gaihvdCx4ZSl7dmFyIHZlPW90Ll93cml0YWJsZVN0YXRlLFhlPXZlLnN5bmMsemU9dmUud3JpdGVjYjtp''@;'; put 'put ''ZigiZnVuY3Rpb24iIT10eXBlb2YgemUpdGhyb3cgbmV3IHE7aWYoZnVuY3Rpb24gSChvdCl7b3Qud3JpdGluZz0hMSxvdC53cml0ZWNiPW51bGwsb3QubGVuZ3RoLT1vdC53cml0ZWxlbixvdC53cml0ZWxlbj0wfSh2ZSkseGUpIWZ1bmN0aW9uIFQob3QseGUsdmUsWGUsemUpey0teGUucGVu''@;'; put 'put ''ZGluZ2NiLHZlPyhwcm9jZXNzLm5leHRUaWNrKHplLFhlKSxwcm9jZXNzLm5leHRUaWNrKHdlLG90LHhlKSxvdC5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITAsbWUob3QsWGUpKTooemUoWGUpLG90Ll93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMCxtZShvdCxYZSksd2Uob3Qs''@;'; put 'put ''eGUpKX0ob3QsdmUsWGUseGUsemUpO2Vsc2V7dmFyIERlPWFlKHZlKXx8b3QuZGVzdHJveWVkOyFEZSYmIXZlLmNvcmtlZCYmIXZlLmJ1ZmZlclByb2Nlc3NpbmcmJnZlLmJ1ZmZlcmVkUmVxdWVzdCYmQShvdCx2ZSksWGU/cHJvY2Vzcy5uZXh0VGljayhFLG90LHZlLERlLHplKTpFKG90LHZl''@;'; put 'put ''LERlLHplKX19KHhlLHplKX0sdGhpcy53cml0ZWNiPW51bGwsdGhpcy53cml0ZWxlbj0wLHRoaXMuYnVmZmVyZWRSZXF1ZXN0PW51bGwsdGhpcy5sYXN0QnVmZmVyZWRSZXF1ZXN0PW51bGwsdGhpcy5wZW5kaW5nY2I9MCx0aGlzLnByZWZpbmlzaGVkPSExLHRoaXMuZXJyb3JFbWl0dGVkPSEx''@;'; put 'put ''LHRoaXMuZW1pdENsb3NlPSExIT09b3QuZW1pdENsb3NlLHRoaXMuYXV0b0Rlc3Ryb3k9ISFvdC5hdXRvRGVzdHJveSx0aGlzLmJ1ZmZlcmVkUmVxdWVzdENvdW50PTAsdGhpcy5jb3JrZWRSZXF1ZXN0c0ZyZWU9bmV3IF8odGhpcyl9ZnVuY3Rpb24gamUob3Qpe3ZhciB4ZT10aGlzIGluc3Rh''@;'; put 'put ''bmNlb2YoZz1nfHx5KDEwMzApKTtpZigheGUmJiFTZS5jYWxsKGplLHRoaXMpKXJldHVybiBuZXcgamUob3QpO3RoaXMuX3dyaXRhYmxlU3RhdGU9bmV3IFRlKG90LHRoaXMseGUpLHRoaXMud3JpdGFibGU9ITAsb3QmJigiZnVuY3Rpb24iPT10eXBlb2Ygb3Qud3JpdGUmJih0aGlzLl93cml0''@;'; put 'put ''ZT1vdC53cml0ZSksImZ1bmN0aW9uIj09dHlwZW9mIG90LndyaXRldiYmKHRoaXMuX3dyaXRldj1vdC53cml0ZXYpLCJmdW5jdGlvbiI9PXR5cGVvZiBvdC5kZXN0cm95JiYodGhpcy5fZGVzdHJveT1vdC5kZXN0cm95KSwiZnVuY3Rpb24iPT10eXBlb2Ygb3QuZmluYWwmJih0aGlzLl9maW5h''@;'; put 'put ''bD1vdC5maW5hbCkpLHcuY2FsbCh0aGlzKX1mdW5jdGlvbiBDKG90LHhlLHZlLFhlLHplLERlLEZlKXt4ZS53cml0ZWxlbj1YZSx4ZS53cml0ZWNiPUZlLHhlLndyaXRpbmc9ITAseGUuc3luYz0hMCx4ZS5kZXN0cm95ZWQ/eGUub253cml0ZShuZXcgSigid3JpdGUiKSk6dmU/b3QuX3dyaXRl''@;'; put 'put ''dih6ZSx4ZS5vbndyaXRlKTpvdC5fd3JpdGUoemUsRGUseGUub253cml0ZSkseGUuc3luYz0hMX1mdW5jdGlvbiBFKG90LHhlLHZlLFhlKXt2ZXx8ZnVuY3Rpb24gbShvdCx4ZSl7MD09PXhlLmxlbmd0aCYmeGUubmVlZERyYWluJiYoeGUubmVlZERyYWluPSExLG90LmVtaXQoImRyYWluIikp''@;'; put 'put ''fShvdCx4ZSkseGUucGVuZGluZ2NiLS0sWGUoKSx3ZShvdCx4ZSl9ZnVuY3Rpb24gQShvdCx4ZSl7eGUuYnVmZmVyUHJvY2Vzc2luZz0hMDt2YXIgdmU9eGUuYnVmZmVyZWRSZXF1ZXN0O2lmKG90Ll93cml0ZXYmJnZlJiZ2ZS5uZXh0KXt2YXIgemU9bmV3IEFycmF5KHhlLmJ1ZmZlcmVkUmVx''@;'; put 'put ''dWVzdENvdW50KSxEZT14ZS5jb3JrZWRSZXF1ZXN0c0ZyZWU7RGUuZW50cnk9dmU7Zm9yKHZhciBGZT0wLE9lPSEwO3ZlOyl6ZVtGZV09dmUsdmUuaXNCdWZ8fChPZT0hMSksdmU9dmUubmV4dCxGZSs9MTt6ZS5hbGxCdWZmZXJzPU9lLEMob3QseGUsITAseGUubGVuZ3RoLHplLCIiLERlLmZp''@;'; put 'put ''bmlzaCkseGUucGVuZGluZ2NiKysseGUubGFzdEJ1ZmZlcmVkUmVxdWVzdD1udWxsLERlLm5leHQ/KHhlLmNvcmtlZFJlcXVlc3RzRnJlZT1EZS5uZXh0LERlLm5leHQ9bnVsbCk6eGUuY29ya2VkUmVxdWVzdHNGcmVlPW5ldyBfKHhlKSx4ZS5idWZmZXJlZFJlcXVlc3RDb3VudD0wfWVsc2V7''@;'; put 'put ''Zm9yKDt2ZTspe3ZhciBJZT12ZS5jaHVuaztpZihDKG90LHhlLCExLHhlLm9iamVjdE1vZGU/MTpJZS5sZW5ndGgsSWUsdmUuZW5jb2RpbmcsdmUuY2FsbGJhY2spLHZlPXZlLm5leHQseGUuYnVmZmVyZWRSZXF1ZXN0Q291bnQtLSx4ZS53cml0aW5nKWJyZWFrfW51bGw9PT12ZSYmKHhlLmxh''@;'; put 'put ''c3RCdWZmZXJlZFJlcXVlc3Q9bnVsbCl9eGUuYnVmZmVyZWRSZXF1ZXN0PXZlLHhlLmJ1ZmZlclByb2Nlc3Npbmc9ITF9ZnVuY3Rpb24gYWUob3Qpe3JldHVybiBvdC5lbmRpbmcmJjA9PT1vdC5sZW5ndGgmJm51bGw9PT1vdC5idWZmZXJlZFJlcXVlc3QmJiFvdC5maW5pc2hlZCYmIW90Lndy''@;'; put 'put ''aXRpbmd9ZnVuY3Rpb24gdGUob3QseGUpe290Ll9maW5hbChmdW5jdGlvbih2ZSl7eGUucGVuZGluZ2NiLS0sdmUmJm1lKG90LHZlKSx4ZS5wcmVmaW5pc2hlZD0hMCxvdC5lbWl0KCJwcmVmaW5pc2giKSx3ZShvdCx4ZSl9KX1mdW5jdGlvbiB3ZShvdCx4ZSl7dmFyIHZlPWFlKHhlKTtpZih2''@;'; put 'put ''ZSYmKGZ1bmN0aW9uIHNlKG90LHhlKXsheGUucHJlZmluaXNoZWQmJiF4ZS5maW5hbENhbGxlZCYmKCJmdW5jdGlvbiIhPXR5cGVvZiBvdC5fZmluYWx8fHhlLmRlc3Ryb3llZD8oeGUucHJlZmluaXNoZWQ9ITAsb3QuZW1pdCgicHJlZmluaXNoIikpOih4ZS5wZW5kaW5nY2IrKyx4ZS5maW5h''@;'; put 'put ''bENhbGxlZD0hMCxwcm9jZXNzLm5leHRUaWNrKHRlLG90LHhlKSkpfShvdCx4ZSksMD09PXhlLnBlbmRpbmdjYiYmKHhlLmZpbmlzaGVkPSEwLG90LmVtaXQoImZpbmlzaCIpLHhlLmF1dG9EZXN0cm95KSkpe3ZhciBYZT1vdC5fcmVhZGFibGVTdGF0ZTsoIVhlfHxYZS5hdXRvRGVzdHJveSYm''@;'; put 'put ''WGUuZW5kRW1pdHRlZCkmJm90LmRlc3Ryb3koKX1yZXR1cm4gdmV9eSg3MTk5MykoamUsdyksVGUucHJvdG90eXBlLmdldEJ1ZmZlcj1mdW5jdGlvbigpe2Zvcih2YXIgeGU9dGhpcy5idWZmZXJlZFJlcXVlc3QsdmU9W107eGU7KXZlLnB1c2goeGUpLHhlPXhlLm5leHQ7cmV0dXJuIHZlfSxm''@;'; put 'put ''dW5jdGlvbigpe3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkoVGUucHJvdG90eXBlLCJidWZmZXIiLHtnZXQ6Qi5kZXByZWNhdGUoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRCdWZmZXIoKX0sIl93cml0YWJsZVN0YXRlLmJ1ZmZlciBpcyBkZXByZWNhdGVkLiBVc2UgX3dyaXRhYmxlU3Rh''@;'; put 'put ''dGUuZ2V0QnVmZmVyIGluc3RlYWQuIiwiREVQMDAwMyIpfSl9Y2F0Y2h7fX0oKSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuaGFzSW5zdGFuY2UmJiJmdW5jdGlvbiI9PXR5cGVvZiBGdW5jdGlvbi5wcm90b3R5cGVbU3ltYm9sLmhhc0luc3RhbmNlXT8oU2U9RnVuY3Rpb24u''@;'; put 'put ''cHJvdG90eXBlW1N5bWJvbC5oYXNJbnN0YW5jZV0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGplLFN5bWJvbC5oYXNJbnN0YW5jZSx7dmFsdWU6ZnVuY3Rpb24oeGUpe3JldHVybiEhU2UuY2FsbCh0aGlzLHhlKXx8dGhpcz09PWplJiZ4ZSYmeGUuX3dyaXRhYmxlU3RhdGUgaW5zdGFuY2VvZiBU''@;'; put 'put ''ZX19KSk6U2U9ZnVuY3Rpb24oeGUpe3JldHVybiB4ZSBpbnN0YW5jZW9mIHRoaXN9LGplLnByb3RvdHlwZS5waXBlPWZ1bmN0aW9uKCl7bWUodGhpcyxuZXcgZWUpfSxqZS5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24ob3QseGUsdmUpe3ZhciBYZT10aGlzLl93cml0YWJsZVN0YXRlLHplPSEx''@;'; put 'put ''LERlPSFYZS5vYmplY3RNb2RlJiZmdW5jdGlvbiB6KG90KXtyZXR1cm4gUC5pc0J1ZmZlcihvdCl8fG90IGluc3RhbmNlb2YgRn0ob3QpO3JldHVybiBEZSYmIVAuaXNCdWZmZXIob3QpJiYob3Q9ZnVuY3Rpb24gTyhvdCl7cmV0dXJuIFAuZnJvbShvdCl9KG90KSksImZ1bmN0aW9uIj09dHlw''@;'; put 'put ''ZW9mIHhlJiYodmU9eGUseGU9bnVsbCksRGU/eGU9ImJ1ZmZlciI6eGV8fCh4ZT1YZS5kZWZhdWx0RW5jb2RpbmcpLCJmdW5jdGlvbiIhPXR5cGVvZiB2ZSYmKHZlPV9lKSxYZS5lbmRpbmc/ZnVuY3Rpb24gVihvdCx4ZSl7dmFyIHZlPW5ldyBpZTttZShvdCx2ZSkscHJvY2Vzcy5uZXh0VGlj''@;'; put 'put ''ayh4ZSx2ZSl9KHRoaXMsdmUpOihEZXx8ZnVuY3Rpb24gcChvdCx4ZSx2ZSxYZSl7dmFyIHplO3JldHVybiBudWxsPT09dmU/emU9bmV3IG5lOiJzdHJpbmciIT10eXBlb2YgdmUmJiF4ZS5vYmplY3RNb2RlJiYoemU9bmV3IFcoImNodW5rIixbInN0cmluZyIsIkJ1ZmZlciJdLHZlKSksIXpl''@;'; put 'put ''fHwobWUob3QsemUpLHByb2Nlc3MubmV4dFRpY2soWGUsemUpLCExKX0odGhpcyxYZSxvdCx2ZSkpJiYoWGUucGVuZGluZ2NiKyssemU9ZnVuY3Rpb24geChvdCx4ZSx2ZSxYZSx6ZSxEZSl7aWYoIXZlKXt2YXIgRmU9ZnVuY3Rpb24gYihvdCx4ZSx2ZSl7cmV0dXJuIW90Lm9iamVjdE1vZGUm''@;'; put 'put ''JiExIT09b3QuZGVjb2RlU3RyaW5ncyYmInN0cmluZyI9PXR5cGVvZiB4ZSYmKHhlPVAuZnJvbSh4ZSx2ZSkpLHhlfSh4ZSxYZSx6ZSk7WGUhPT1GZSYmKHZlPSEwLHplPSJidWZmZXIiLFhlPUZlKX12YXIgT2U9eGUub2JqZWN0TW9kZT8xOlhlLmxlbmd0aDt4ZS5sZW5ndGgrPU9lO3ZhciBJ''@;'; put 'put ''ZT14ZS5sZW5ndGg8eGUuaGlnaFdhdGVyTWFyaztpZihJZXx8KHhlLm5lZWREcmFpbj0hMCkseGUud3JpdGluZ3x8eGUuY29ya2VkKXt2YXIgVmU9eGUubGFzdEJ1ZmZlcmVkUmVxdWVzdDt4ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0PXtjaHVuazpYZSxlbmNvZGluZzp6ZSxpc0J1Zjp2ZSxjYWxs''@;'; put 'put ''YmFjazpEZSxuZXh0Om51bGx9LFZlP1ZlLm5leHQ9eGUubGFzdEJ1ZmZlcmVkUmVxdWVzdDp4ZS5idWZmZXJlZFJlcXVlc3Q9eGUubGFzdEJ1ZmZlcmVkUmVxdWVzdCx4ZS5idWZmZXJlZFJlcXVlc3RDb3VudCs9MX1lbHNlIEMob3QseGUsITEsT2UsWGUsemUsRGUpO3JldHVybiBJZX0odGhp''@;'; put 'put ''cyxYZSxEZSxvdCx4ZSx2ZSkpLHplfSxqZS5wcm90b3R5cGUuY29yaz1mdW5jdGlvbigpe3RoaXMuX3dyaXRhYmxlU3RhdGUuY29ya2VkKyt9LGplLnByb3RvdHlwZS51bmNvcms9ZnVuY3Rpb24oKXt2YXIgb3Q9dGhpcy5fd3JpdGFibGVTdGF0ZTtvdC5jb3JrZWQmJihvdC5jb3JrZWQtLSwh''@;'; put 'put ''b3Qud3JpdGluZyYmIW90LmNvcmtlZCYmIW90LmJ1ZmZlclByb2Nlc3NpbmcmJm90LmJ1ZmZlcmVkUmVxdWVzdCYmQSh0aGlzLG90KSl9LGplLnByb3RvdHlwZS5zZXREZWZhdWx0RW5jb2Rpbmc9ZnVuY3Rpb24oeGUpe2lmKCJzdHJpbmciPT10eXBlb2YgeGUmJih4ZT14ZS50b0xvd2VyQ2Fz''@;'; put 'put ''ZSgpKSwhKFsiaGV4IiwidXRmOCIsInV0Zi04IiwiYXNjaWkiLCJiaW5hcnkiLCJiYXNlNjQiLCJ1Y3MyIiwidWNzLTIiLCJ1dGYxNmxlIiwidXRmLTE2bGUiLCJyYXciXS5pbmRleE9mKCh4ZSsiIikudG9Mb3dlckNhc2UoKSk+LTEpKXRocm93IG5ldyBsZSh4ZSk7cmV0dXJuIHRoaXMuX3dy''@;'; put 'put ''aXRhYmxlU3RhdGUuZGVmYXVsdEVuY29kaW5nPXhlLHRoaXN9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShqZS5wcm90b3R5cGUsIndyaXRhYmxlQnVmZmVyIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZSYmdGhpcy5fd3JpdGFibGVTdGF0''@;'; put 'put ''ZS5nZXRCdWZmZXIoKX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoamUucHJvdG90eXBlLCJ3cml0YWJsZUhpZ2hXYXRlck1hcmsiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmhpZ2hXYXRlck1hcmt9fSksamUucHJvdG90eXBlLl93''@;'; put 'put ''cml0ZT1mdW5jdGlvbihvdCx4ZSx2ZSl7dmUobmV3IFkoIl93cml0ZSgpIikpfSxqZS5wcm90b3R5cGUuX3dyaXRldj1udWxsLGplLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24ob3QseGUsdmUpe3ZhciBYZT10aGlzLl93cml0YWJsZVN0YXRlO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBvdD8o''@;'; put 'put ''dmU9b3Qsb3Q9bnVsbCx4ZT1udWxsKToiZnVuY3Rpb24iPT10eXBlb2YgeGUmJih2ZT14ZSx4ZT1udWxsKSxudWxsIT1vdCYmdGhpcy53cml0ZShvdCx4ZSksWGUuY29ya2VkJiYoWGUuY29ya2VkPTEsdGhpcy51bmNvcmsoKSksWGUuZW5kaW5nfHxmdW5jdGlvbiBVZShvdCx4ZSx2ZSl7eGUu''@;'; put 'put ''ZW5kaW5nPSEwLHdlKG90LHhlKSx2ZSYmKHhlLmZpbmlzaGVkP3Byb2Nlc3MubmV4dFRpY2sodmUpOm90Lm9uY2UoImZpbmlzaCIsdmUpKSx4ZS5lbmRlZD0hMCxvdC53cml0YWJsZT0hMX0odGhpcyxYZSx2ZSksdGhpc30sT2JqZWN0LmRlZmluZVByb3BlcnR5KGplLnByb3RvdHlwZSwid3Jp''@;'; put 'put ''dGFibGVMZW5ndGgiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmxlbmd0aH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoamUucHJvdG90eXBlLCJkZXN0cm95ZWQiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB2''@;'; put 'put ''b2lkIDAhPT10aGlzLl93cml0YWJsZVN0YXRlJiZ0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZH0sc2V0OmZ1bmN0aW9uKHhlKXt0aGlzLl93cml0YWJsZVN0YXRlJiYodGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ9eGUpfX0pLGplLnByb3RvdHlwZS5kZXN0cm95PU4uZGVzdHJv''@;'; put 'put ''eSxqZS5wcm90b3R5cGUuX3VuZGVzdHJveT1OLnVuZGVzdHJveSxqZS5wcm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24ob3QseGUpe3hlKG90KX19LDEyNjgzOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJO2Z1bmN0aW9uIF8oaWUsbGUsbWUpe3JldHVybiBsZT1mdW5jdGlvbiBnKGll''@;'; put 'put ''KXt2YXIgbGU9ZnVuY3Rpb24gQihpZSxsZSl7aWYoIm9iamVjdCIhPXR5cGVvZiBpZXx8bnVsbD09PWllKXJldHVybiBpZTt2YXIgbWU9aWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1tZSl7dmFyIF9lPW1lLmNhbGwoaWUsbGV8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5''@;'; put 'put ''cGVvZiBfZSlyZXR1cm4gX2U7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sZT9TdHJpbmc6TnVtYmVyKShpZSl9KGllLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGxl''@;'; put 'put ''P2xlOlN0cmluZyhsZSl9KGxlKSxsZSBpbiBpZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoaWUsbGUse3ZhbHVlOm1lLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6aWVbbGVdPW1lLGllfXZhciB3PXkoNTc4NTQpLFA9U3ltYm9sKCJsYXN0UmVzb2x2ZSIpLEY9''@;'; put 'put ''U3ltYm9sKCJsYXN0UmVqZWN0IiksTz1TeW1ib2woImVycm9yIiksej1TeW1ib2woImVuZGVkIiksTj1TeW1ib2woImxhc3RQcm9taXNlIiksTD1TeW1ib2woImhhbmRsZVByb21pc2UiKSxLPVN5bWJvbCgic3RyZWFtIik7ZnVuY3Rpb24gVShpZSxsZSl7cmV0dXJue3ZhbHVlOmllLGRvbmU6''@;'; put 'put ''bGV9fWZ1bmN0aW9uIFcoaWUpe3ZhciBsZT1pZVtQXTtpZihudWxsIT09bGUpe3ZhciBtZT1pZVtLXS5yZWFkKCk7bnVsbCE9PW1lJiYoaWVbTl09bnVsbCxpZVtQXT1udWxsLGllW0ZdPW51bGwsbGUoVShtZSwhMSkpKX19ZnVuY3Rpb24gWShpZSl7cHJvY2Vzcy5uZXh0VGljayhXLGllKX12''@;'; put 'put ''YXIgZWU9T2JqZWN0LmdldFByb3RvdHlwZU9mKGZ1bmN0aW9uKCl7fSksSj1PYmplY3Quc2V0UHJvdG90eXBlT2YoKF8oST17Z2V0IHN0cmVhbSgpe3JldHVybiB0aGlzW0tdfSxuZXh0OmZ1bmN0aW9uKCl7dmFyIGxlPXRoaXMsbWU9dGhpc1tPXTtpZihudWxsIT09bWUpcmV0dXJuIFByb21p''@;'; put 'put ''c2UucmVqZWN0KG1lKTtpZih0aGlzW3pdKXJldHVybiBQcm9taXNlLnJlc29sdmUoVSh2b2lkIDAsITApKTtpZih0aGlzW0tdLmRlc3Ryb3llZClyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oamUsVil7cHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbigpe2xlW09dP1YobGVbT10pOmplKFUo''@;'; put 'put ''dm9pZCAwLCEwKSl9KX0pO3ZhciBUZSxfZT10aGlzW05dO2lmKF9lKVRlPW5ldyBQcm9taXNlKGZ1bmN0aW9uIHEoaWUsbGUpe3JldHVybiBmdW5jdGlvbihtZSxfZSl7aWUudGhlbihmdW5jdGlvbigpe2xlW3pdP21lKFUodm9pZCAwLCEwKSk6bGVbTF0obWUsX2UpfSxfZSl9fShfZSx0aGlz''@;'; put 'put ''KSk7ZWxzZXt2YXIgU2U9dGhpc1tLXS5yZWFkKCk7aWYobnVsbCE9PVNlKXJldHVybiBQcm9taXNlLnJlc29sdmUoVShTZSwhMSkpO1RlPW5ldyBQcm9taXNlKHRoaXNbTF0pfXJldHVybiB0aGlzW05dPVRlLFRlfX0sU3ltYm9sLmFzeW5jSXRlcmF0b3IsZnVuY3Rpb24oKXtyZXR1cm4gdGhp''@;'; put 'put ''c30pLF8oSSwicmV0dXJuIixmdW5jdGlvbigpe3ZhciBsZT10aGlzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihtZSxfZSl7bGVbS10uZGVzdHJveShudWxsLGZ1bmN0aW9uKFRlKXtUZT9fZShUZSk6bWUoVSh2b2lkIDAsITApKX0pfSl9KSxJKSxlZSk7dWUuZXhwb3J0cz1mdW5jdGlv''@;'; put 'put ''bihsZSl7dmFyIG1lLF9lPU9iamVjdC5jcmVhdGUoSiwoXyhtZT17fSxLLHt2YWx1ZTpsZSx3cml0YWJsZTohMH0pLF8obWUsUCx7dmFsdWU6bnVsbCx3cml0YWJsZTohMH0pLF8obWUsRix7dmFsdWU6bnVsbCx3cml0YWJsZTohMH0pLF8obWUsTyx7dmFsdWU6bnVsbCx3cml0YWJsZTohMH0p''@;'; put 'put ''LF8obWUseix7dmFsdWU6bGUuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZCx3cml0YWJsZTohMH0pLF8obWUsTCx7dmFsdWU6ZnVuY3Rpb24oU2UsamUpe3ZhciBWPV9lW0tdLnJlYWQoKTtWPyhfZVtOXT1udWxsLF9lW1BdPW51bGwsX2VbRl09bnVsbCxTZShVKFYsITEpKSk6KF9lW1BdPVNl''@;'; put 'put ''LF9lW0ZdPWplKX0sd3JpdGFibGU6ITB9KSxtZSkpO3JldHVybiBfZVtOXT1udWxsLHcobGUsZnVuY3Rpb24oVGUpe2lmKFRlJiYiRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0UiIT09VGUuY29kZSl7dmFyIFNlPV9lW0ZdO3JldHVybiBudWxsIT09U2UmJihfZVtOXT1udWxsLF9lW1BdPW51''@;'; put 'put ''bGwsX2VbRl09bnVsbCxTZShUZSkpLHZvaWQoX2VbT109VGUpfXZhciBqZT1fZVtQXTtudWxsIT09amUmJihfZVtOXT1udWxsLF9lW1BdPW51bGwsX2VbRl09bnVsbCxqZShVKHZvaWQgMCwhMCkpKSxfZVt6XT0hMH0pLGxlLm9uKCJyZWFkYWJsZSIsWS5iaW5kKG51bGwsX2UpKSxfZX19LDc1''@;'; put 'put ''MjI1Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO2Z1bmN0aW9uIEkoWSxxKXt2YXIgZWU9T2JqZWN0LmtleXMoWSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIEo9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhZKTtxJiYoSj1KLmZpbHRlcihmdW5jdGlvbihuZSl7''@;'; put 'put ''cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoWSxuZSkuZW51bWVyYWJsZX0pKSxlZS5wdXNoLmFwcGx5KGVlLEopfXJldHVybiBlZX1mdW5jdGlvbiBfKFkpe2Zvcih2YXIgcT0xO3E8YXJndW1lbnRzLmxlbmd0aDtxKyspe3ZhciBlZT1udWxsIT1hcmd1bWVudHNbcV0/''@;'; put 'put ''YXJndW1lbnRzW3FdOnt9O3ElMj9JKE9iamVjdChlZSksITApLmZvckVhY2goZnVuY3Rpb24oSil7ZyhZLEosZWVbSl0pfSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoWSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhl''@;'; put 'put ''ZSkpOkkoT2JqZWN0KGVlKSkuZm9yRWFjaChmdW5jdGlvbihKKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoWSxKLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZWUsSikpfSl9cmV0dXJuIFl9ZnVuY3Rpb24gZyhZLHEsZWUpe3JldHVybihxPUYocSkpaW4gWT9PYmplY3QuZGVmaW5l''@;'; put 'put ''UHJvcGVydHkoWSxxLHt2YWx1ZTplZSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOllbcV09ZWUsWX1mdW5jdGlvbiB3KFkscSl7Zm9yKHZhciBlZT0wO2VlPHEubGVuZ3RoO2VlKyspe3ZhciBKPXFbZWVdO0ouZW51bWVyYWJsZT1KLmVudW1lcmFibGV8fCEx''@;'; put 'put ''LEouY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBKJiYoSi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KFksRihKLmtleSksSil9fWZ1bmN0aW9uIEYoWSl7dmFyIHE9ZnVuY3Rpb24gTyhZLHEpe2lmKCJvYmplY3QiIT10eXBlb2YgWXx8bnVsbD09PVkpcmV0dXJuIFk7dmFy''@;'; put 'put ''IGVlPVlbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1lZSl7dmFyIEo9ZWUuY2FsbChZLHF8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBKKXJldHVybiBKO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFs''@;'; put 'put ''dWUuIil9cmV0dXJuKCJzdHJpbmciPT09cT9TdHJpbmc6TnVtYmVyKShZKX0oWSwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBxP3E6U3RyaW5nKHEpfXZhciBOPXkoODM4MzgpLkJ1ZmZlcixLPXkoNjM3NzkpLmluc3BlY3QsVT1LJiZLLmN1c3RvbXx8Imluc3BlY3QiO2Z1bmN0''@;'; put 'put ''aW9uIFcoWSxxLGVlKXtOLnByb3RvdHlwZS5jb3B5LmNhbGwoWSxxLGVlKX11ZS5leHBvcnRzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gWSgpeyhmdW5jdGlvbiBCKFkscSl7aWYoIShZIGluc3RhbmNlb2YgcSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1''@;'; put 'put ''bmN0aW9uIil9KSh0aGlzLFkpLHRoaXMuaGVhZD1udWxsLHRoaXMudGFpbD1udWxsLHRoaXMubGVuZ3RoPTB9cmV0dXJuIGZ1bmN0aW9uIFAoWSxxLGVlKXtxJiZ3KFkucHJvdG90eXBlLHEpLGVlJiZ3KFksZWUpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShZLCJwcm90b3R5cGUiLHt3cml0YWJs''@;'; put 'put ''ZTohMX0pfShZLFt7a2V5OiJwdXNoIix2YWx1ZTpmdW5jdGlvbihlZSl7dmFyIEo9e2RhdGE6ZWUsbmV4dDpudWxsfTt0aGlzLmxlbmd0aD4wP3RoaXMudGFpbC5uZXh0PUo6dGhpcy5oZWFkPUosdGhpcy50YWlsPUosKyt0aGlzLmxlbmd0aH19LHtrZXk6InVuc2hpZnQiLHZhbHVlOmZ1bmN0''@;'; put 'put ''aW9uKGVlKXt2YXIgSj17ZGF0YTplZSxuZXh0OnRoaXMuaGVhZH07MD09PXRoaXMubGVuZ3RoJiYodGhpcy50YWlsPUopLHRoaXMuaGVhZD1KLCsrdGhpcy5sZW5ndGh9fSx7a2V5OiJzaGlmdCIsdmFsdWU6ZnVuY3Rpb24oKXtpZigwIT09dGhpcy5sZW5ndGgpe3ZhciBlZT10aGlzLmhlYWQu''@;'; put 'put ''ZGF0YTtyZXR1cm4gdGhpcy5oZWFkPTE9PT10aGlzLmxlbmd0aD90aGlzLnRhaWw9bnVsbDp0aGlzLmhlYWQubmV4dCwtLXRoaXMubGVuZ3RoLGVlfX19LHtrZXk6ImNsZWFyIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuaGVhZD10aGlzLnRhaWw9bnVsbCx0aGlzLmxlbmd0aD0wfX0se2tleToi''@;'; put 'put ''am9pbiIsdmFsdWU6ZnVuY3Rpb24oZWUpe2lmKDA9PT10aGlzLmxlbmd0aClyZXR1cm4iIjtmb3IodmFyIEo9dGhpcy5oZWFkLG5lPSIiK0ouZGF0YTtKPUoubmV4dDspbmUrPWVlK0ouZGF0YTtyZXR1cm4gbmV9fSx7a2V5OiJjb25jYXQiLHZhbHVlOmZ1bmN0aW9uKGVlKXtpZigwPT09dGhp''@;'; put 'put ''cy5sZW5ndGgpcmV0dXJuIE4uYWxsb2MoMCk7Zm9yKHZhciBKPU4uYWxsb2NVbnNhZmUoZWU+Pj4wKSxuZT10aGlzLmhlYWQsaWU9MDtuZTspVyhuZS5kYXRhLEosaWUpLGllKz1uZS5kYXRhLmxlbmd0aCxuZT1uZS5uZXh0O3JldHVybiBKfX0se2tleToiY29uc3VtZSIsdmFsdWU6ZnVuY3Rp''@;'; put 'put ''b24oZWUsSil7dmFyIG5lO3JldHVybiBlZTx0aGlzLmhlYWQuZGF0YS5sZW5ndGg/KG5lPXRoaXMuaGVhZC5kYXRhLnNsaWNlKDAsZWUpLHRoaXMuaGVhZC5kYXRhPXRoaXMuaGVhZC5kYXRhLnNsaWNlKGVlKSk6bmU9ZWU9PT10aGlzLmhlYWQuZGF0YS5sZW5ndGg/dGhpcy5zaGlmdCgpOko/''@;'; put 'put ''dGhpcy5fZ2V0U3RyaW5nKGVlKTp0aGlzLl9nZXRCdWZmZXIoZWUpLG5lfX0se2tleToiZmlyc3QiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGVhZC5kYXRhfX0se2tleToiX2dldFN0cmluZyIsdmFsdWU6ZnVuY3Rpb24oZWUpe3ZhciBKPXRoaXMuaGVhZCxuZT0xLGllPUouZGF0''@;'; put 'put ''YTtmb3IoZWUtPWllLmxlbmd0aDtKPUoubmV4dDspe3ZhciBsZT1KLmRhdGEsbWU9ZWU+bGUubGVuZ3RoP2xlLmxlbmd0aDplZTtpZihpZSs9bWU9PT1sZS5sZW5ndGg/bGU6bGUuc2xpY2UoMCxlZSksMD09KGVlLT1tZSkpe21lPT09bGUubGVuZ3RoPygrK25lLHRoaXMuaGVhZD1KLm5leHQ/''@;'; put 'put ''Si5uZXh0OnRoaXMudGFpbD1udWxsKToodGhpcy5oZWFkPUosSi5kYXRhPWxlLnNsaWNlKG1lKSk7YnJlYWt9KytuZX1yZXR1cm4gdGhpcy5sZW5ndGgtPW5lLGllfX0se2tleToiX2dldEJ1ZmZlciIsdmFsdWU6ZnVuY3Rpb24oZWUpe3ZhciBKPU4uYWxsb2NVbnNhZmUoZWUpLG5lPXRoaXMu''@;'; put 'put ''aGVhZCxpZT0xO2ZvcihuZS5kYXRhLmNvcHkoSiksZWUtPW5lLmRhdGEubGVuZ3RoO25lPW5lLm5leHQ7KXt2YXIgbGU9bmUuZGF0YSxtZT1lZT5sZS5sZW5ndGg/bGUubGVuZ3RoOmVlO2lmKGxlLmNvcHkoSixKLmxlbmd0aC1lZSwwLG1lKSwwPT0oZWUtPW1lKSl7bWU9PT1sZS5sZW5ndGg/''@;'; put 'put ''KCsraWUsdGhpcy5oZWFkPW5lLm5leHQ/bmUubmV4dDp0aGlzLnRhaWw9bnVsbCk6KHRoaXMuaGVhZD1uZSxuZS5kYXRhPWxlLnNsaWNlKG1lKSk7YnJlYWt9KytpZX1yZXR1cm4gdGhpcy5sZW5ndGgtPWllLEp9fSx7a2V5OlUsdmFsdWU6ZnVuY3Rpb24oZWUsSil7cmV0dXJuIEsodGhpcyxf''@;'; put 'put ''KF8oe30sSikse30se2RlcHRoOjAsY3VzdG9tSW5zcGVjdDohMX0pKX19XSksWX0oKX0sODgxNTI6dWU9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24geSh3LFApe2codyxQKSxJKHcpfWZ1bmN0aW9uIEkodyl7dy5fd3JpdGFibGVTdGF0ZSYmIXcuX3dyaXRhYmxlU3RhdGUuZW1pdENsb3NlfHx3''@;'; put 'put ''Ll9yZWFkYWJsZVN0YXRlJiYhdy5fcmVhZGFibGVTdGF0ZS5lbWl0Q2xvc2V8fHcuZW1pdCgiY2xvc2UiKX1mdW5jdGlvbiBnKHcsUCl7dy5lbWl0KCJlcnJvciIsUCl9dWUuZXhwb3J0cz17ZGVzdHJveTpmdW5jdGlvbiBYKHcsUCl7dmFyIEY9dGhpcztyZXR1cm4gdGhpcy5fcmVhZGFibGVT''@;'; put 'put ''dGF0ZSYmdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWR8fHRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPyhQP1Aodyk6dyYmKHRoaXMuX3dyaXRhYmxlU3RhdGU/dGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWR8fCh0aGlzLl93cml0''@;'; put 'put ''YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMCxwcm9jZXNzLm5leHRUaWNrKGcsdGhpcyx3KSk6cHJvY2Vzcy5uZXh0VGljayhnLHRoaXMsdykpLHRoaXMpOih0aGlzLl9yZWFkYWJsZVN0YXRlJiYodGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ9ITApLHRoaXMuX3dyaXRhYmxlU3RhdGUm''@;'; put 'put ''Jih0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD0hMCksdGhpcy5fZGVzdHJveSh3fHxudWxsLGZ1bmN0aW9uKE4peyFQJiZOP0YuX3dyaXRhYmxlU3RhdGU/Ri5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ/cHJvY2Vzcy5uZXh0VGljayhJLEYpOihGLl93cml0YWJsZVN0YXRlLmVy''@;'; put 'put ''cm9yRW1pdHRlZD0hMCxwcm9jZXNzLm5leHRUaWNrKHksRixOKSk6cHJvY2Vzcy5uZXh0VGljayh5LEYsTik6UD8ocHJvY2Vzcy5uZXh0VGljayhJLEYpLFAoTikpOnByb2Nlc3MubmV4dFRpY2soSSxGKX0pLHRoaXMpfSx1bmRlc3Ryb3k6ZnVuY3Rpb24gXygpe3RoaXMuX3JlYWRhYmxlU3Rh''@;'; put 'put ''dGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD0hMSx0aGlzLl9yZWFkYWJsZVN0YXRlLnJlYWRpbmc9ITEsdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmRlZD0hMSx0aGlzLl9yZWFkYWJsZVN0YXRlLmVuZEVtaXR0ZWQ9ITEpLHRoaXMuX3dyaXRhYmxlU3RhdGUmJih0aGlzLl93cml0''@;'; put 'put ''YWJsZVN0YXRlLmRlc3Ryb3llZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLmVuZGVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kaW5nPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZmluYWxDYWxsZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5wcmVmaW5pc2hlZD0hMSx0aGlzLl93cml0YWJs''@;'; put 'put ''ZVN0YXRlLmZpbmlzaGVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSExKX0sZXJyb3JPckRlc3Ryb3k6ZnVuY3Rpb24gQih3LFApe3ZhciBGPXcuX3JlYWRhYmxlU3RhdGUsTz13Ll93cml0YWJsZVN0YXRlO0YmJkYuYXV0b0Rlc3Ryb3l8fE8mJk8uYXV0b0Rlc3Ryb3k/''@;'; put 'put ''dy5kZXN0cm95KFApOncuZW1pdCgiZXJyb3IiLFApfX19LDU3ODU0Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMzA0NjQpLkYuRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0U7ZnVuY3Rpb24gZygpe311ZS5leHBvcnRzPWZ1bmN0aW9uIHcoUCxGLE8pe2lmKCJmdW5jdGlvbiI9''@;'; put 'put ''PXR5cGVvZiBGKXJldHVybiB3KFAsbnVsbCxGKTtGfHwoRj17fSksTz1mdW5jdGlvbiBfKFApe3ZhciBGPSExO3JldHVybiBmdW5jdGlvbigpe2lmKCFGKXtGPSEwO2Zvcih2YXIgTz1hcmd1bWVudHMubGVuZ3RoLHo9bmV3IEFycmF5KE8pLE49MDtOPE87TisrKXpbTl09YXJndW1lbnRzW05d''@;'; put 'put ''O1AuYXBwbHkodGhpcyx6KX19fShPfHxnKTt2YXIgej1GLnJlYWRhYmxlfHwhMSE9PUYucmVhZGFibGUmJlAucmVhZGFibGUsTj1GLndyaXRhYmxlfHwhMSE9PUYud3JpdGFibGUmJlAud3JpdGFibGUsTD1mdW5jdGlvbigpe1Aud3JpdGFibGV8fFUoKX0sSz1QLl93cml0YWJsZVN0YXRlJiZQ''@;'; put 'put ''Ll93cml0YWJsZVN0YXRlLmZpbmlzaGVkLFU9ZnVuY3Rpb24oKXtOPSExLEs9ITAsenx8Ty5jYWxsKFApfSxXPVAuX3JlYWRhYmxlU3RhdGUmJlAuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZCxZPWZ1bmN0aW9uKCl7ej0hMSxXPSEwLE58fE8uY2FsbChQKX0scT1mdW5jdGlvbihpZSl7Ty5j''@;'; put 'put ''YWxsKFAsaWUpfSxlZT1mdW5jdGlvbigpe3ZhciBpZTtyZXR1cm4geiYmIVc/KCghUC5fcmVhZGFibGVTdGF0ZXx8IVAuX3JlYWRhYmxlU3RhdGUuZW5kZWQpJiYoaWU9bmV3IEkpLE8uY2FsbChQLGllKSk6TiYmIUs/KCghUC5fd3JpdGFibGVTdGF0ZXx8IVAuX3dyaXRhYmxlU3RhdGUuZW5k''@;'; put 'put ''ZWQpJiYoaWU9bmV3IEkpLE8uY2FsbChQLGllKSk6dm9pZCAwfSxKPWZ1bmN0aW9uKCl7UC5yZXEub24oImZpbmlzaCIsVSl9O3JldHVybiBmdW5jdGlvbiBCKFApe3JldHVybiBQLnNldEhlYWRlciYmImZ1bmN0aW9uIj09dHlwZW9mIFAuYWJvcnR9KFApPyhQLm9uKCJjb21wbGV0ZSIsVSks''@;'; put 'put ''UC5vbigiYWJvcnQiLGVlKSxQLnJlcT9KKCk6UC5vbigicmVxdWVzdCIsSikpOk4mJiFQLl93cml0YWJsZVN0YXRlJiYoUC5vbigiZW5kIixMKSxQLm9uKCJjbG9zZSIsTCkpLFAub24oImVuZCIsWSksUC5vbigiZmluaXNoIixVKSwhMSE9PUYuZXJyb3ImJlAub24oImVycm9yIixxKSxQLm9u''@;'; put 'put ''KCJjbG9zZSIsZWUpLGZ1bmN0aW9uKCl7UC5yZW1vdmVMaXN0ZW5lcigiY29tcGxldGUiLFUpLFAucmVtb3ZlTGlzdGVuZXIoImFib3J0IixlZSksUC5yZW1vdmVMaXN0ZW5lcigicmVxdWVzdCIsSiksUC5yZXEmJlAucmVxLnJlbW92ZUxpc3RlbmVyKCJmaW5pc2giLFUpLFAucmVtb3ZlTGlz''@;'; put 'put ''dGVuZXIoImVuZCIsTCksUC5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLEwpLFAucmVtb3ZlTGlzdGVuZXIoImZpbmlzaCIsVSksUC5yZW1vdmVMaXN0ZW5lcigiZW5kIixZKSxQLnJlbW92ZUxpc3RlbmVyKCJlcnJvciIscSksUC5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLGVlKX19fSw0Nzc2NTp1''@;'; put 'put ''ZT0+e3VlLmV4cG9ydHM9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIlJlYWRhYmxlLmZyb20gaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgYnJvd3NlciIpfX0sNjg0NjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgSSxnPXkoMzA0NjQpLkYsQj1nLkVSUl9NSVNTSU5HX0FSR1Msdz1n''@;'; put 'put ''LkVSUl9TVFJFQU1fREVTVFJPWUVEO2Z1bmN0aW9uIFAoVSl7aWYoVSl0aHJvdyBVfWZ1bmN0aW9uIHooVSl7VSgpfWZ1bmN0aW9uIE4oVSxXKXtyZXR1cm4gVS5waXBlKFcpfXVlLmV4cG9ydHM9ZnVuY3Rpb24gSygpe2Zvcih2YXIgVT1hcmd1bWVudHMubGVuZ3RoLFc9bmV3IEFycmF5KFUp''@;'; put 'put ''LFk9MDtZPFU7WSsrKVdbWV09YXJndW1lbnRzW1ldO3ZhciBxPWZ1bmN0aW9uIEwoVSl7cmV0dXJuIFUubGVuZ3RoJiYiZnVuY3Rpb24iPT10eXBlb2YgVVtVLmxlbmd0aC0xXT9VLnBvcCgpOlB9KFcpO2lmKEFycmF5LmlzQXJyYXkoV1swXSkmJihXPVdbMF0pLFcubGVuZ3RoPDIpdGhyb3cg''@;'; put 'put ''bmV3IEIoInN0cmVhbXMiKTt2YXIgZWUsSj1XLm1hcChmdW5jdGlvbihuZSxpZSl7dmFyIGxlPWllPFcubGVuZ3RoLTE7cmV0dXJuIGZ1bmN0aW9uIE8oVSxXLFkscSl7cT1mdW5jdGlvbiBfKFUpe3ZhciBXPSExO3JldHVybiBmdW5jdGlvbigpe1d8fChXPSEwLFUuYXBwbHkodm9pZCAwLGFy''@;'; put 'put ''Z3VtZW50cykpfX0ocSk7dmFyIGVlPSExO1Uub24oImNsb3NlIixmdW5jdGlvbigpe2VlPSEwfSksdm9pZCAwPT09SSYmKEk9eSg1Nzg1NCkpLEkoVSx7cmVhZGFibGU6Vyx3cml0YWJsZTpZfSxmdW5jdGlvbihuZSl7aWYobmUpcmV0dXJuIHEobmUpO2VlPSEwLHEoKX0pO3ZhciBKPSExO3Jl''@;'; put 'put ''dHVybiBmdW5jdGlvbihuZSl7aWYoIWVlJiYhSil7aWYoSj0hMCxmdW5jdGlvbiBGKFUpe3JldHVybiBVLnNldEhlYWRlciYmImZ1bmN0aW9uIj09dHlwZW9mIFUuYWJvcnR9KFUpKXJldHVybiBVLmFib3J0KCk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFUuZGVzdHJveSlyZXR1cm4gVS5kZXN0''@;'; put 'put ''cm95KCk7cShuZXx8bmV3IHcoInBpcGUiKSl9fX0obmUsbGUsaWU+MCxmdW5jdGlvbihfZSl7ZWV8fChlZT1fZSksX2UmJkouZm9yRWFjaCh6KSwhbGUmJihKLmZvckVhY2goeikscShlZSkpfSl9KTtyZXR1cm4gVy5yZWR1Y2UoTil9fSwyMjgyNzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2''@;'; put 'put ''YXIgST15KDMwNDY0KS5GLkVSUl9JTlZBTElEX09QVF9WQUxVRTt1ZS5leHBvcnRzPXtnZXRIaWdoV2F0ZXJNYXJrOmZ1bmN0aW9uIGcoQix3LFAsRil7dmFyIE89ZnVuY3Rpb24gXyhCLHcsUCl7cmV0dXJuIG51bGwhPUIuaGlnaFdhdGVyTWFyaz9CLmhpZ2hXYXRlck1hcms6dz9CW1BdOm51''@;'; put 'put ''bGx9KHcsRixQKTtpZihudWxsIT1PKXtpZighaXNGaW5pdGUoTyl8fE1hdGguZmxvb3IoTykhPT1PfHxPPDApdGhyb3cgbmV3IEkoRj9QOiJoaWdoV2F0ZXJNYXJrIixPKTtyZXR1cm4gTWF0aC5mbG9vcihPKX1yZXR1cm4gQi5vYmplY3RNb2RlPzE2OjE2Mzg0fX19LDEyNjAxOih1ZSxYLHkp''@;'; put 'put ''PT57dWUuZXhwb3J0cz15KDQ0MzU2KS5FdmVudEVtaXR0ZXJ9LDc4NDU0Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNTQyNzIpLkJ1ZmZlcixfPUkuaXNFbmNvZGluZ3x8ZnVuY3Rpb24oSil7c3dpdGNoKChKPSIiK0opJiZKLnRvTG93ZXJDYXNlKCkpe2Nhc2UiaGV4IjpjYXNl''@;'; put 'put ''InV0ZjgiOmNhc2UidXRmLTgiOmNhc2UiYXNjaWkiOmNhc2UiYmluYXJ5IjpjYXNlImJhc2U2NCI6Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOmNhc2UicmF3IjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX07ZnVuY3Rpb24gdyhKKXt2YXIg''@;'; put 'put ''bmU7c3dpdGNoKHRoaXMuZW5jb2Rpbmc9ZnVuY3Rpb24gQihKKXt2YXIgbmU9ZnVuY3Rpb24gZyhKKXtpZighSilyZXR1cm4idXRmOCI7Zm9yKHZhciBuZTs7KXN3aXRjaChKKXtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiJ1dGY4IjtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2Ui''@;'; put 'put ''dXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuInV0ZjE2bGUiO2Nhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuImxhdGluMSI7Y2FzZSJiYXNlNjQiOmNhc2UiYXNjaWkiOmNhc2UiaGV4IjpyZXR1cm4gSjtkZWZhdWx0OmlmKG5lKXJldHVybjtKPSgiIitKKS50b0xvd2VyQ2Fz''@;'; put 'put ''ZSgpLG5lPSEwfX0oSik7aWYoInN0cmluZyIhPXR5cGVvZiBuZSYmKEkuaXNFbmNvZGluZz09PV98fCFfKEopKSl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrSik7cmV0dXJuIG5lfHxKfShKKSx0aGlzLmVuY29kaW5nKXtjYXNlInV0ZjE2bGUiOnRoaXMudGV4dD1LLHRo''@;'; put 'put ''aXMuZW5kPVUsbmU9NDticmVhaztjYXNlInV0ZjgiOnRoaXMuZmlsbExhc3Q9eixuZT00O2JyZWFrO2Nhc2UiYmFzZTY0Ijp0aGlzLnRleHQ9Vyx0aGlzLmVuZD1ZLG5lPTM7YnJlYWs7ZGVmYXVsdDpyZXR1cm4gdGhpcy53cml0ZT1xLHZvaWQodGhpcy5lbmQ9ZWUpfXRoaXMubGFzdE5lZWQ9''@;'; put 'put ''MCx0aGlzLmxhc3RUb3RhbD0wLHRoaXMubGFzdENoYXI9SS5hbGxvY1Vuc2FmZShuZSl9ZnVuY3Rpb24gUChKKXtyZXR1cm4gSjw9MTI3PzA6Sj4+NT09Nj8yOko+PjQ9PTE0PzM6Sj4+Mz09MzA/NDpKPj42PT0yPy0xOi0yfWZ1bmN0aW9uIHooSil7dmFyIG5lPXRoaXMubGFzdFRvdGFsLXRo''@;'; put 'put ''aXMubGFzdE5lZWQsaWU9ZnVuY3Rpb24gTyhKLG5lLGllKXtpZigxMjghPSgxOTImbmVbMF0pKXJldHVybiBKLmxhc3ROZWVkPTAsIlx1ZmZmZCI7aWYoSi5sYXN0TmVlZD4xJiZuZS5sZW5ndGg+MSl7aWYoMTI4IT0oMTkyJm5lWzFdKSlyZXR1cm4gSi5sYXN0TmVlZD0xLCJcdWZmZmQiO2lm''@;'; put 'put ''KEoubGFzdE5lZWQ+MiYmbmUubGVuZ3RoPjImJjEyOCE9KDE5MiZuZVsyXSkpcmV0dXJuIEoubGFzdE5lZWQ9MiwiXHVmZmZkIn19KHRoaXMsSik7cmV0dXJuIHZvaWQgMCE9PWllP2llOnRoaXMubGFzdE5lZWQ8PUoubGVuZ3RoPyhKLmNvcHkodGhpcy5sYXN0Q2hhcixuZSwwLHRoaXMubGFz''@;'; put 'put ''dE5lZWQpLHRoaXMubGFzdENoYXIudG9TdHJpbmcodGhpcy5lbmNvZGluZywwLHRoaXMubGFzdFRvdGFsKSk6KEouY29weSh0aGlzLmxhc3RDaGFyLG5lLDAsSi5sZW5ndGgpLHZvaWQodGhpcy5sYXN0TmVlZC09Si5sZW5ndGgpKX1mdW5jdGlvbiBLKEosbmUpe2lmKChKLmxlbmd0aC1uZSkl''@;'; put 'put ''Mj09MCl7dmFyIGllPUoudG9TdHJpbmcoInV0ZjE2bGUiLG5lKTtpZihpZSl7dmFyIGxlPWllLmNoYXJDb2RlQXQoaWUubGVuZ3RoLTEpO2lmKGxlPj01NTI5NiYmbGU8PTU2MzE5KXJldHVybiB0aGlzLmxhc3ROZWVkPTIsdGhpcy5sYXN0VG90YWw9NCx0aGlzLmxhc3RDaGFyWzBdPUpbSi5s''@;'; put 'put ''ZW5ndGgtMl0sdGhpcy5sYXN0Q2hhclsxXT1KW0oubGVuZ3RoLTFdLGllLnNsaWNlKDAsLTEpfXJldHVybiBpZX1yZXR1cm4gdGhpcy5sYXN0TmVlZD0xLHRoaXMubGFzdFRvdGFsPTIsdGhpcy5sYXN0Q2hhclswXT1KW0oubGVuZ3RoLTFdLEoudG9TdHJpbmcoInV0ZjE2bGUiLG5lLEoubGVu''@;'; put 'put ''Z3RoLTEpfWZ1bmN0aW9uIFUoSil7dmFyIG5lPUomJkoubGVuZ3RoP3RoaXMud3JpdGUoSik6IiI7cmV0dXJuIHRoaXMubGFzdE5lZWQ/bmUrdGhpcy5sYXN0Q2hhci50b1N0cmluZygidXRmMTZsZSIsMCx0aGlzLmxhc3RUb3RhbC10aGlzLmxhc3ROZWVkKTpuZX1mdW5jdGlvbiBXKEosbmUp''@;'; put 'put ''e3ZhciBpZT0oSi5sZW5ndGgtbmUpJTM7cmV0dXJuIDA9PT1pZT9KLnRvU3RyaW5nKCJiYXNlNjQiLG5lKToodGhpcy5sYXN0TmVlZD0zLWllLHRoaXMubGFzdFRvdGFsPTMsMT09PWllP3RoaXMubGFzdENoYXJbMF09SltKLmxlbmd0aC0xXToodGhpcy5sYXN0Q2hhclswXT1KW0oubGVuZ3Ro''@;'; put 'put ''LTJdLHRoaXMubGFzdENoYXJbMV09SltKLmxlbmd0aC0xXSksSi50b1N0cmluZygiYmFzZTY0IixuZSxKLmxlbmd0aC1pZSkpfWZ1bmN0aW9uIFkoSil7dmFyIG5lPUomJkoubGVuZ3RoP3RoaXMud3JpdGUoSik6IiI7cmV0dXJuIHRoaXMubGFzdE5lZWQ/bmUrdGhpcy5sYXN0Q2hhci50b1N0''@;'; put 'put ''cmluZygiYmFzZTY0IiwwLDMtdGhpcy5sYXN0TmVlZCk6bmV9ZnVuY3Rpb24gcShKKXtyZXR1cm4gSi50b1N0cmluZyh0aGlzLmVuY29kaW5nKX1mdW5jdGlvbiBlZShKKXtyZXR1cm4gSiYmSi5sZW5ndGg/dGhpcy53cml0ZShKKToiIn1YLkk9dyx3LnByb3RvdHlwZS53cml0ZT1mdW5jdGlv''@;'; put 'put ''bihKKXtpZigwPT09Si5sZW5ndGgpcmV0dXJuIiI7dmFyIG5lLGllO2lmKHRoaXMubGFzdE5lZWQpe2lmKHZvaWQgMD09PShuZT10aGlzLmZpbGxMYXN0KEopKSlyZXR1cm4iIjtpZT10aGlzLmxhc3ROZWVkLHRoaXMubGFzdE5lZWQ9MH1lbHNlIGllPTA7cmV0dXJuIGllPEoubGVuZ3RoP25l''@;'; put 'put ''P25lK3RoaXMudGV4dChKLGllKTp0aGlzLnRleHQoSixpZSk6bmV8fCIifSx3LnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24gTChKKXt2YXIgbmU9SiYmSi5sZW5ndGg/dGhpcy53cml0ZShKKToiIjtyZXR1cm4gdGhpcy5sYXN0TmVlZD9uZSsiXHVmZmZkIjpuZX0sdy5wcm90b3R5cGUudGV4dD1m''@;'; put 'put ''dW5jdGlvbiBOKEosbmUpe3ZhciBpZT1mdW5jdGlvbiBGKEosbmUsaWUpe3ZhciBsZT1uZS5sZW5ndGgtMTtpZihsZTxpZSlyZXR1cm4gMDt2YXIgbWU9UChuZVtsZV0pO3JldHVybiBtZT49MD8obWU+MCYmKEoubGFzdE5lZWQ9bWUtMSksbWUpOi0tbGU8aWV8fC0yPT09bWU/MDoobWU9UChu''@;'; put 'put ''ZVtsZV0pKT49MD8obWU+MCYmKEoubGFzdE5lZWQ9bWUtMiksbWUpOi0tbGU8aWV8fC0yPT09bWU/MDoobWU9UChuZVtsZV0pKT49MD8obWU+MCYmKDI9PT1tZT9tZT0wOkoubGFzdE5lZWQ9bWUtMyksbWUpOjB9KHRoaXMsSixuZSk7aWYoIXRoaXMubGFzdE5lZWQpcmV0dXJuIEoudG9TdHJp''@;'; put 'put ''bmcoInV0ZjgiLG5lKTt0aGlzLmxhc3RUb3RhbD1pZTt2YXIgbGU9Si5sZW5ndGgtKGllLXRoaXMubGFzdE5lZWQpO3JldHVybiBKLmNvcHkodGhpcy5sYXN0Q2hhciwwLGxlKSxKLnRvU3RyaW5nKCJ1dGY4IixuZSxsZSl9LHcucHJvdG90eXBlLmZpbGxMYXN0PWZ1bmN0aW9uKEope2lmKHRo''@;'; put 'put ''aXMubGFzdE5lZWQ8PUoubGVuZ3RoKXJldHVybiBKLmNvcHkodGhpcy5sYXN0Q2hhcix0aGlzLmxhc3RUb3RhbC10aGlzLmxhc3ROZWVkLDAsdGhpcy5sYXN0TmVlZCksdGhpcy5sYXN0Q2hhci50b1N0cmluZyh0aGlzLmVuY29kaW5nLDAsdGhpcy5sYXN0VG90YWwpO0ouY29weSh0aGlzLmxh''@;'; put 'put ''c3RDaGFyLHRoaXMubGFzdFRvdGFsLXRoaXMubGFzdE5lZWQsMCxKLmxlbmd0aCksdGhpcy5sYXN0TmVlZC09Si5sZW5ndGh9fSw1NDI3MjoodWUsWCx5KT0+e3ZhciBJPXkoODM4MzgpLF89SS5CdWZmZXI7ZnVuY3Rpb24gZyh3LFApe2Zvcih2YXIgRiBpbiB3KVBbRl09d1tGXX1mdW5jdGlv''@;'; put 'put ''biBCKHcsUCxGKXtyZXR1cm4gXyh3LFAsRil9Xy5mcm9tJiZfLmFsbG9jJiZfLmFsbG9jVW5zYWZlJiZfLmFsbG9jVW5zYWZlU2xvdz91ZS5leHBvcnRzPUk6KGcoSSxYKSxYLkJ1ZmZlcj1CKSxnKF8sQiksQi5mcm9tPWZ1bmN0aW9uKHcsUCxGKXtpZigibnVtYmVyIj09dHlwZW9mIHcpdGhy''@;'; put 'put ''b3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBub3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gXyh3LFAsRil9LEIuYWxsb2M9ZnVuY3Rpb24odyxQLEYpe2lmKCJudW1iZXIiIT10eXBlb2Ygdyl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7dmFy''@;'; put 'put ''IE89Xyh3KTtyZXR1cm4gdm9pZCAwIT09UD8ic3RyaW5nIj09dHlwZW9mIEY/Ty5maWxsKFAsRik6Ty5maWxsKFApOk8uZmlsbCgwKSxPfSxCLmFsbG9jVW5zYWZlPWZ1bmN0aW9uKHcpe2lmKCJudW1iZXIiIT10eXBlb2Ygdyl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJl''@;'; put 'put ''IGEgbnVtYmVyIik7cmV0dXJuIF8odyl9LEIuYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKHcpe2lmKCJudW1iZXIiIT10eXBlb2Ygdyl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7cmV0dXJuIEkuU2xvd0J1ZmZlcih3KX19LDc4NzU1Oih1ZSxYLHkp''@;'; put 'put ''PT57dmFyIEk9eSg2NDMxOCk7dWUuZXhwb3J0cz17VGV4dEVuY29kZXI6SS5UZXh0RW5jb2RlcixUZXh0RGVjb2RlcjpJLlRleHREZWNvZGVyfX0sNjc5NTE6ZnVuY3Rpb24odWUpeyFmdW5jdGlvbihYKXsidXNlIHN0cmljdCI7dWUuZXhwb3J0cyYmKHVlLmV4cG9ydHM9WCksWFsiZW5jb2Rp''@;'; put 'put ''bmctaW5kZXhlcyJdPXtiaWc1OltudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; 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 ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwxNzM5MiwxOTUwNiwxNzkyMywxNzgzMCwxNzc4NCwxNjAzNTksMTk4MzEsMTc4NDMsMTYyOTkz''@;'; put 'put ''LDE5NjgyLDE2MzAxMywxNTI1MywxODIzMCwxODI0NCwxOTUyNywxOTUyMCwxNDgxNTksMTQ0OTE5LDE2MDU5NCwxNTkzNzEsMTU5OTU0LDE5NTQzLDE3Mjg4MSwxODI1NSwxNzg4MiwxOTU4OSwxNjI5MjQsMTk3MTksMTkxMDgsMTgwODEsMTU4NDk5LDI5MjIxLDE1NDE5NiwxMzc4MjcsMTQ2''@;'; put 'put ''OTUwLDE0NzI5NywyNjE4OSwyMjI2NyxudWxsLDMyMTQ5LDIyODEzLDE2Njg0MSwxNTg2MCwzODcwOCwxNjI3OTksMjM1MTUsMTM4NTkwLDIzMjA0LDEzODYxLDE3MTY5NiwyMzI0OSwyMzQ3OSwyMzgwNCwyNjQ3OCwzNDE5NSwxNzAzMDksMjk3OTMsMjk4NTMsMTQ0NTMsMTM4NTc5LDE0NTA1''@;'; put 'put ''NCwxNTU2ODEsMTYxMDgsMTUzODIyLDE1MDkzLDMxNDg0LDQwODU1LDE0NzgwOSwxNjYxNTcsMTQzODUwLDEzMzc3MCwxNDM5NjYsMTcxNjIsMzM5MjQsNDA4NTQsMzc5MzUsMTg3MzYsMzQzMjMsMjI2NzgsMzg3MzAsMzc0MDAsMzExODQsMzEyODIsMjYyMDgsMjcxNzcsMzQ5NzMsMjk3NzIs''@;'; put 'put ''MzE2ODUsMjY0OTgsMzEyNzYsMjEwNzEsMzY5MzQsMTM1NDIsMjk2MzYsMTU1MDY1LDI5ODk0LDQwOTAzLDIyNDUxLDE4NzM1LDIxNTgwLDE2Njg5LDE0NTAzOCwyMjU1MiwzMTM0NiwxNjI2NjEsMzU3MjcsMTgwOTQsMTU5MzY4LDE2NzY5LDE1NTAzMywzMTY2MiwxNDA0NzYsNDA5MDQsMTQw''@;'; put 'put ''NDgxLDE0MDQ4OSwxNDA0OTIsNDA5MDUsMzQwNTIsMTQ0ODI3LDE2NTY0LDQwOTA2LDE3NjMzLDE3NTYxNSwyNTI4MSwyODc4Miw0MDkwNyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDEyNzM2LDEyNzM3LDEyNzM4LDEyNzM5LDEyNzQwLDEzMTM0MCwxMjc0MSwxMzEyODEsMTMxMjc3LDEyNzQyLDEyNzQzLDEzMTI3NSwxMzkyNDAsMTI3NDQsMTMxMjc0''@;'; put 'put ''LDEyNzQ1LDEyNzQ2LDEyNzQ3LDEyNzQ4LDEzMTM0MiwxMjc0OSwxMjc1MCwyNTYsMTkzLDQ2MSwxOTIsMjc0LDIwMSwyODIsMjAwLDMzMiwyMTEsNDY1LDIxMCxudWxsLDc4NzAsbnVsbCw3ODcyLDIwMiwyNTcsMjI1LDQ2MiwyMjQsNTkzLDI3NSwyMzMsMjgzLDIzMiwyOTksMjM3LDQ2NCwy''@;'; put 'put ''MzYsMzMzLDI0Myw0NjYsMjQyLDM2MywyNTAsNDY4LDI0OSw0NzAsNDcyLDQ3NCw0NzYsMjUyLG51bGwsNzg3MSxudWxsLDc4NzMsMjM0LDYwOSw5MTc4LDkxNzksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsMTcyOTY5LDEzNTQ5MyxudWxsLDI1ODY2LG51bGwsbnVsbCwyMDAyOSwyODM4MSw0MDI3MCwzNzM0MyxudWxsLG51bGwsMTYxNTg5LDI1NzQ1LDIwMjUwLDIwMjY0LDIwMzkyLDIwODIyLDIwODUyLDIwODkyLDIwOTY0LDIxMTUzLDIxMTYwLDIxMzA3LDIxMzI2''@;'; put 'put ''LDIxNDU3LDIxNDY0LDIyMjQyLDIyNzY4LDIyNzg4LDIyNzkxLDIyODM0LDIyODM2LDIzMzk4LDIzNDU0LDIzNDU1LDIzNzA2LDI0MTk4LDI0NjM1LDI1OTkzLDI2NjIyLDI2NjI4LDI2NzI1LDI3OTgyLDI4ODYwLDMwMDA1LDMyNDIwLDMyNDI4LDMyNDQyLDMyNDU1LDMyNDYzLDMyNDc5LDMy''@;'; put 'put ''NTE4LDMyNTY3LDMzNDAyLDMzNDg3LDMzNjQ3LDM1MjcwLDM1Nzc0LDM1ODEwLDM2NzEwLDM2NzExLDM2NzE4LDI5NzEzLDMxOTk2LDMyMjA1LDI2OTUwLDMxNDMzLDIxMDMxLG51bGwsbnVsbCxudWxsLG51bGwsMzcyNjAsMzA5MDQsMzcyMTQsMzI5NTYsbnVsbCwzNjEwNywzMzAxNCwxMzM2''@;'; put 'put ''MDcsbnVsbCxudWxsLDMyOTI3LDQwNjQ3LDE5NjYxLDQwMzkzLDQwNDYwLDE5NTE4LDE3MTUxMCwxNTk3NTgsNDA0NTgsMTcyMzM5LDEzNzYxLG51bGwsMjgzMTQsMzMzNDIsMjk5NzcsbnVsbCwxODcwNSwzOTUzMiwzOTU2Nyw0MDg1NywzMTExMSwxNjQ5NzIsMTM4Njk4LDEzMjU2MCwxNDIw''@;'; put 'put ''NTQsMjAwMDQsMjAwOTcsMjAwOTYsMjAxMDMsMjAxNTksMjAyMDMsMjAyNzksMTMzODgsMjA0MTMsMTU5NDQsMjA0ODMsMjA2MTYsMTM0MzcsMTM0NTksMTM0NzcsMjA4NzAsMjI3ODksMjA5NTUsMjA5ODgsMjA5OTcsMjAxMDUsMjExMTMsMjExMzYsMjEyODcsMTM3NjcsMjE0MTcsMTM2NDks''@;'; put 'put ''MjE0MjQsMTM2NTEsMjE0NDIsMjE1MzksMTM2NzcsMTM2ODIsMTM5NTMsMjE2NTEsMjE2NjcsMjE2ODQsMjE2ODksMjE3MTIsMjE3NDMsMjE3ODQsMjE3OTUsMjE4MDAsMTM3MjAsMjE4MjMsMTM3MzMsMTM3NTksMjE5NzUsMTM3NjUsMTYzMjA0LDIxNzk3LG51bGwsMTM0MjEwLDEzNDQyMSwx''@;'; put 'put ''NTE4NTEsMjE5MDQsMTQyNTM0LDE0ODI4LDEzMTkwNSwzNjQyMiwxNTA5NjgsMTY5MTg5LDE2NDY3LDE2NDAzMCwzMDU4NiwxNDIzOTIsMTQ5MDAsMTgzODksMTY0MTg5LDE1ODE5NCwxNTEwMTgsMjU4MjEsMTM0NTI0LDEzNTA5MiwxMzQzNTcsMTM1NDEyLDI1NzQxLDM2NDc4LDEzNDgwNiwx''@;'; put 'put ''MzQxNTUsMTM1MDEyLDE0MjUwNSwxNjQ0MzgsMTQ4NjkxLG51bGwsMTM0NDcwLDE3MDU3MywxNjQwNzMsMTg0MjAsMTUxMjA3LDE0MjUzMCwzOTYwMiwxNDk1MSwxNjk0NjAsMTYzNjUsMTM1NzQsMTUyMjYzLDE2OTk0MCwxNjE5OTIsMTQyNjYwLDQwMzAyLDM4OTMzLG51bGwsMTczNjksMTU1''@;'; put 'put ''ODEzLDI1NzgwLDIxNzMxLDE0MjY2OCwxNDIyODIsMTM1Mjg3LDE0ODQzLDEzNTI3OSwxNTc0MDIsMTU3NDYyLDE2MjIwOCwyNTgzNCwxNTE2MzQsMTM0MjExLDM2NDU2LDEzOTY4MSwxNjY3MzIsMTMyOTEzLG51bGwsMTg0NDMsMTMxNDk3LDE2Mzc4LDIyNjQzLDE0MjczMyxudWxsLDE0ODkz''@;'; put 'put ''NiwxMzIzNDgsMTU1Nzk5LDEzNDk4OCwxMzQ1NTAsMjE4ODEsMTY1NzEsMTczMzgsbnVsbCwxOTEyNCwxNDE5MjYsMTM1MzI1LDMzMTk0LDM5MTU3LDEzNDU1NiwyNTQ2NSwxNDg0NiwxNDExNzMsMzYyODgsMjIxNzcsMjU3MjQsMTU5MzksbnVsbCwxNzM1NjksMTM0NjY1LDE0MjAzMSwxNDI1''@;'; put 'put ''MzcsbnVsbCwxMzUzNjgsMTQ1ODU4LDE0NzM4LDE0ODU0LDE2NDUwNywxMzY4OCwxNTUyMDksMTM5NDYzLDIyMDk4LDEzNDk2MSwxNDI1MTQsMTY5NzYwLDEzNTAwLDI3NzA5LDE1MTA5OSxudWxsLG51bGwsMTYxMTQwLDE0Mjk4NywxMzk3ODQsMTczNjU5LDE2NzExNywxMzQ3NzgsMTM0MTk2''@;'; put 'put ''LDE1NzcyNCwzMjY1OSwxMzUzNzUsMTQxMzE1LDE0MTYyNSwxMzgxOSwxNTIwMzUsMTM0Nzk2LDEzNTA1MywxMzQ4MjYsMTYyNzUsMTM0OTYwLDEzNDQ3MSwxMzU1MDMsMTM0NzMyLG51bGwsMTM0ODI3LDEzNDA1NywxMzQ0NzIsMTM1MzYwLDEzNTQ4NSwxNjM3NywxNDA5NTAsMjU2NTAsMTM1''@;'; put 'put ''MDg1LDE0NDM3MiwxNjEzMzcsMTQyMjg2LDEzNDUyNiwxMzQ1MjcsMTQyNDE3LDE0MjQyMSwxNDg3MiwxMzQ4MDgsMTM1MzY3LDEzNDk1OCwxNzM2MTgsMTU4NTQ0LDE2NzEyMiwxNjczMjEsMTY3MTE0LDM4MzE0LDIxNzA4LDMzNDc2LDIxOTQ1LG51bGwsMTcxNzE1LDM5OTc0LDM5NjA2LDE2''@;'; put 'put ''MTYzMCwxNDI4MzAsMjg5OTIsMzMxMzMsMzMwMDQsMjM1ODAsMTU3MDQyLDMzMDc2LDE0MjMxLDIxMzQzLDE2NDAyOSwzNzMwMiwxMzQ5MDYsMTM0NjcxLDEzNDc3NSwxMzQ5MDcsMTM3ODksMTUxMDE5LDEzODMzLDEzNDM1OCwyMjE5MSwxNDEyMzcsMTM1MzY5LDEzNDY3MiwxMzQ3NzYsMTM1''@;'; put 'put ''Mjg4LDEzNTQ5NiwxNjQzNTksMTM2Mjc3LDEzNDc3NywxNTExMjAsMTQyNzU2LDIzMTI0LDEzNTE5NywxMzUxOTgsMTM1NDEzLDEzNTQxNCwyMjQyOCwxMzQ2NzMsMTYxNDI4LDE2NDU1NywxMzUwOTMsMTM0Nzc5LDE1MTkzNCwxNDA4MywxMzUwOTQsMTM1NTUyLDE1MjI4MCwxNzI3MzMsMTQ5''@;'; put 'put ''OTc4LDEzNzI3NCwxNDc4MzEsMTY0NDc2LDIyNjgxLDIxMDk2LDEzODUwLDE1MzQwNSwzMTY2NiwyMzQwMCwxODQzMiwxOTI0NCw0MDc0MywxODkxOSwzOTk2NywzOTgyMSwxNTQ0ODQsMTQzNjc3LDIyMDExLDEzODEwLDIyMTUzLDIwMDA4LDIyNzg2LDEzODE3NywxOTQ2ODAsMzg3MzcsMTMx''@;'; put 'put ''MjA2LDIwMDU5LDIwMTU1LDEzNjMwLDIzNTg3LDI0NDAxLDI0NTE2LDE0NTg2LDI1MTY0LDI1OTA5LDI3NTE0LDI3NzAxLDI3NzA2LDI4NzgwLDI5MjI3LDIwMDEyLDI5MzU3LDE0OTczNywzMjU5NCwzMTAzNSwzMTk5MywzMjU5NSwxNTYyNjYsMTM1MDUsbnVsbCwxNTY0OTEsMzI3NzAsMzI4''@;'; put 'put ''OTYsMTU3MjAyLDE1ODAzMywyMTM0MSwzNDkxNiwzNTI2NSwxNjE5NzAsMzU3NDQsMzYxMjUsMzgwMjEsMzgyNjQsMzgyNzEsMzgzNzYsMTY3NDM5LDM4ODg2LDM5MDI5LDM5MTE4LDM5MTM0LDM5MjY3LDE3ZTQsNDAwNjAsNDA0NzksNDA2NDQsMjc1MDMsNjM3NTEsMjAwMjMsMTMxMjA3LDM4''@;'; put 'put ''NDI5LDI1MTQzLDM4MDUwLG51bGwsMjA1MzksMjgxNTgsMTcxMTIzLDQwODcwLDE1ODE3LDM0OTU5LDE0Nzc5MCwyODc5MSwyMzc5NywxOTIzMiwxNTIwMTMsMTM2NTcsMTU0OTI4LDI0ODY2LDE2NjQ1MCwzNjc3NSwzNzM2NiwyOTA3MywyNjM5MywyOTYyNiwxNDQwMDEsMTcyMjk1LDE1NDk5''@;'; put 'put ''LDEzNzYwMCwxOTIxNiwzMDk0OCwyOTY5OCwyMDkxMCwxNjU2NDcsMTYzOTMsMjcyMzUsMTcyNzMwLDE2OTMxLDM0MzE5LDEzMzc0MywzMTI3NCwxNzAzMTEsMTY2NjM0LDM4NzQxLDI4NzQ5LDIxMjg0LDEzOTM5MCwzNzg3NiwzMDQyNSwxNjYzNzEsNDA4NzEsMzA2ODUsMjAxMzEsMjA0NjQs''@;'; put 'put ''MjA2NjgsMjAwMTUsMjAyNDcsNDA4NzIsMjE1NTYsMzIxMzksMjI2NzQsMjI3MzYsMTM4Njc4LDI0MjEwLDI0MjE3LDI0NTE0LDE0MTA3NCwyNTk5NSwxNDQzNzcsMjY5MDUsMjcyMDMsMTQ2NTMxLDI3OTAzLG51bGwsMjkxODQsMTQ4NzQxLDI5NTgwLDE2MDkxLDE1MDAzNSwyMzMxNywyOTg4''@;'; put 'put ''MSwzNTcxNSwxNTQ3ODgsMTUzMjM3LDMxMzc5LDMxNzI0LDMxOTM5LDMyMzY0LDMzNTI4LDM0MTk5LDQwODczLDM0OTYwLDQwODc0LDM2NTM3LDQwODc1LDM2ODE1LDM0MTQzLDM5MzkyLDM3NDA5LDQwODc2LDE2NzM1MywxMzYyNTUsMTY0OTcsMTcwNTgsMjMwNjYsbnVsbCxudWxsLG51bGws''@;'; put 'put ''MzkwMTYsMjY0NzUsMTcwMTQsMjIzMzMsbnVsbCwzNDI2MiwxNDk4ODMsMzM0NzEsMTYwMDEzLDE5NTg1LDE1OTA5MiwyMzkzMSwxNTg0ODUsMTU5Njc4LDQwODc3LDQwODc4LDIzNDQ2LDQwODc5LDI2MzQzLDMyMzQ3LDI4MjQ3LDMxMTc4LDE1NzUyLDE3NjAzLDE0Mzk1OCwxNDEyMDYsMTcz''@;'; put 'put ''MDYsMTc3MTgsbnVsbCwyMzc2NSwxNDYyMDIsMzU1NzcsMjM2NzIsMTU2MzQsMTQ0NzIxLDIzOTI4LDQwODgyLDI5MDE1LDE3NzUyLDE0NzY5MiwxMzg3ODcsMTk1NzUsMTQ3MTIsMTMzODYsMTMxNDkyLDE1ODc4NSwzNTUzMiwyMDQwNCwxMzE2NDEsMjI5NzUsMzMxMzIsMzg5OTgsMTcwMjM0''@;'; put 'put ''LDI0Mzc5LDEzNDA0NyxudWxsLDEzOTcxMywxNjYyNTMsMTY2NDIsMTgxMDcsMTY4MDU3LDE2MTM1LDQwODgzLDE3MjQ2OSwxNjYzMiwxNDI5NCwxODE2NywxNTg3OTAsMTY3NjQsMTY1NTU0LDE2MDc2NywxNzc3MywxNDU0OCwxNTI3MzAsMTc3NjEsMTc2OTEsMTk4NDksMTk1NzksMTk4MzAs''@;'; put 'put ''MTc4OTgsMTYzMjgsMTUwMjg3LDEzOTIxLDE3NjMwLDE3NTk3LDE2ODc3LDIzODcwLDIzODgwLDIzODk0LDE1ODY4LDE0MzUxLDIzOTcyLDIzOTkzLDE0MzY4LDE0MzkyLDI0MTMwLDI0MjUzLDI0MzU3LDI0NDUxLDE0NjAwLDE0NjEyLDE0NjU1LDE0NjY5LDI0NzkxLDI0ODkzLDIzNzgxLDE0''@;'; put 'put ''NzI5LDI1MDE1LDI1MDE3LDI1MDM5LDE0Nzc2LDI1MTMyLDI1MjMyLDI1MzE3LDI1MzY4LDE0ODQwLDIyMTkzLDE0ODUxLDI1NTcwLDI1NTk1LDI1NjA3LDI1NjkwLDE0OTIzLDI1NzkyLDIzODI5LDIyMDQ5LDQwODYzLDE0OTk5LDI1OTkwLDE1MDM3LDI2MTExLDI2MTk1LDE1MDkwLDI2MjU4''@;'; put 'put ''LDE1MTM4LDI2MzkwLDE1MTcwLDI2NTMyLDI2NjI0LDE1MTkyLDI2Njk4LDI2NzU2LDE1MjE4LDE1MjE3LDE1MjI3LDI2ODg5LDI2OTQ3LDI5Mjc2LDI2OTgwLDI3MDM5LDI3MDEzLDE1MjkyLDI3MDk0LDE1MzI1LDI3MjM3LDI3MjUyLDI3MjQ5LDI3MjY2LDE1MzQwLDI3Mjg5LDE1MzQ2LDI3''@;'; put 'put ''MzA3LDI3MzE3LDI3MzQ4LDI3MzgyLDI3NTIxLDI3NTg1LDI3NjI2LDI3NzY1LDI3ODE4LDE1NTYzLDI3OTA2LDI3OTEwLDI3OTQyLDI4MDMzLDE1NTk5LDI4MDY4LDI4MDgxLDI4MTgxLDI4MTg0LDI4MjAxLDI4Mjk0LDE2NjMzNiwyODM0NywyODM4NiwyODM3OCw0MDgzMSwyODM5MiwyODM5''@;'; put 'put ''MywyODQ1MiwyODQ2OCwxNTY4NiwxNDcyNjUsMjg1NDUsMjg2MDYsMTU3MjIsMTU3MzMsMjkxMTEsMjM3MDUsMTU3NTQsMjg3MTYsMTU3NjEsMjg3NTIsMjg3NTYsMjg3ODMsMjg3OTksMjg4MDksMTMxODc3LDE3MzQ1LDEzODA5LDEzNDg3MiwxNDcxNTksMjI0NjIsMTU5NDQzLDI4OTkwLDE1''@;'; put 'put ''MzU2OCwxMzkwMiwyNzA0MiwxNjY4ODksMjM0MTIsMzEzMDUsMTUzODI1LDE2OTE3NywzMTMzMywzMTM1NywxNTQwMjgsMzE0MTksMzE0MDgsMzE0MjYsMzE0MjcsMjkxMzcsMTU2ODEzLDE2ODQyLDMxNDUwLDMxNDUzLDMxNDY2LDE2ODc5LDIxNjgyLDE1NDYyNSwzMTQ5OSwzMTU3MywzMTUy''@;'; put 'put ''OSwxNTIzMzQsMTU0ODc4LDMxNjUwLDMxNTk5LDMzNjkyLDE1NDU0OCwxNTg4NDcsMzE2OTYsMzM4MjUsMzE2MzQsMzE2NzIsMTU0OTEyLDE1Nzg5LDE1NDcyNSwzMzkzOCwzMTczOCwzMTc1MCwzMTc5NywxNTQ4MTcsMzE4MTIsMzE4NzUsMTQ5NjM0LDMxOTEwLDI2MjM3LDE0ODg1NiwzMTk0''@;'; put 'put ''NSwzMTk0MywzMTk3NCwzMTg2MCwzMTk4NywzMTk4OSwzMTk1MCwzMjM1OSwxNzY5MywxNTkzMDAsMzIwOTMsMTU5NDQ2LDI5ODM3LDMyMTM3LDMyMTcxLDI4OTgxLDMyMTc5LDMyMjEwLDE0NzU0MywxNTU2ODksMzIyMjgsMTU2MzUsMzIyNDUsMTM3MjA5LDMyMjI5LDE2NDcxNywzMjI4NSwx''@;'; put 'put ''NTU5MzcsMTU1OTk0LDMyMzY2LDMyNDAyLDE3MTk1LDM3OTk2LDMyMjk1LDMyNTc2LDMyNTc3LDMyNTgzLDMxMDMwLDE1NjM2OCwzOTM5MywzMjY2MywxNTY0OTcsMzI2NzUsMTM2ODAxLDEzMTE3NiwxNzc1NiwxNDUyNTQsMTc2NjcsMTY0NjY2LDMyNzYyLDE1NjgwOSwzMjc3MywzMjc3Niwz''@;'; put 'put ''Mjc5NywzMjgwOCwzMjgxNSwxNzIxNjcsMTU4OTE1LDMyODI3LDMyODI4LDMyODY1LDE0MTA3NiwxODgyNSwxNTcyMjIsMTQ2OTE1LDE1NzQxNiwyNjQwNSwzMjkzNSwxNjY0NzIsMzMwMzEsMzMwNTAsMjI3MDQsMTQxMDQ2LDI3Nzc1LDE1NjgyNCwxNTE0ODAsMjU4MzEsMTM2MzMwLDMzMzA0''@;'; put 'put ''LDEzNzMxMCwyNzIxOSwxNTAxMTcsMTUwMTY1LDE3NTMwLDMzMzIxLDEzMzkwMSwxNTgyOTAsMTQ2ODE0LDIwNDczLDEzNjQ0NSwzNDAxOCwzMzYzNCwxNTg0NzQsMTQ5OTI3LDE0NDY4OCwxMzcwNzUsMTQ2OTM2LDMzNDUwLDI2OTA3LDE5NDk2NCwxNjg1OSwzNDEyMywzMzQ4OCwzMzU2Miwx''@;'; put 'put ''MzQ2NzgsMTM3MTQwLDE0MDE3LDE0Mzc0MSwxNDQ3MzAsMzM0MDMsMzM1MDYsMzM1NjAsMTQ3MDgzLDE1OTEzOSwxNTg0NjksMTU4NjE1LDE0NDg0NiwxNTgwNywzMzU2NSwyMTk5NiwzMzY2OSwxNzY3NSwxNTkxNDEsMzM3MDgsMzM3MjksMzM3NDcsMTM0MzgsMTU5NDQ0LDI3MjIzLDM0MTM4''@;'; put 'put ''LDEzNDYyLDE1OTI5OCwxNDMwODcsMzM4ODAsMTU0NTk2LDMzOTA1LDE1ODI3LDE3NjM2LDI3MzAzLDMzODY2LDE0NjYxMywzMTA2NCwzMzk2MCwxNTg2MTQsMTU5MzUxLDE1OTI5OSwzNDAxNCwzMzgwNywzMzY4MSwxNzU2OCwzMzkzOSwzNDAyMCwxNTQ3NjksMTY5NjAsMTU0ODE2LDE3NzMx''@;'; put 'put ''LDM0MTAwLDIzMjgyLDE1OTM4NSwxNzcwMywzNDE2MywxNzY4NiwyNjU1OSwzNDMyNiwxNjU0MTMsMTY1NDM1LDM0MjQxLDE1OTg4MCwzNDMwNiwxMzY1NzgsMTU5OTQ5LDE5NDk5NCwxNzc3MCwzNDM0NCwxMzg5NiwxMzczNzgsMjE0OTUsMTYwNjY2LDM0NDMwLDM0NjczLDE3MjI4MCwzNDc5''@;'; put 'put ''OCwxNDIzNzUsMzQ3MzcsMzQ3NzgsMzQ4MzEsMjIxMTMsMzQ0MTIsMjY3MTAsMTc5MzUsMzQ4ODUsMzQ4ODYsMTYxMjQ4LDE0Njg3MywxNjEyNTIsMzQ5MTAsMzQ5NzIsMTgwMTEsMzQ5OTYsMzQ5OTcsMjU1MzcsMzUwMTMsMzA1ODMsMTYxNTUxLDM1MjA3LDM1MjEwLDM1MjM4LDM1MjQxLDM1''@;'; put 'put ''MjM5LDM1MjYwLDE2NjQzNywzNTMwMywxNjIwODQsMTYyNDkzLDM1NDg0LDMwNjExLDM3Mzc0LDM1NDcyLDE2MjM5MywzMTQ2NSwxNjI2MTgsMTQ3MzQzLDE4MTk1LDE2MjYxNiwyOTA1MiwzNTU5NiwzNTYxNSwxNTI2MjQsMTUyOTMzLDM1NjQ3LDM1NjYwLDM1NjYxLDM1NDk3LDE1MDEzOCwz''@;'; put 'put ''NTcyOCwzNTczOSwzNTUwMywxMzY5MjcsMTc5NDEsMzQ4OTUsMzU5OTUsMTYzMTU2LDE2MzIxNSwxOTUwMjgsMTQxMTcsMTYzMTU1LDM2MDU0LDE2MzIyNCwxNjMyNjEsMzYxMTQsMzYwOTksMTM3NDg4LDM2MDU5LDI4NzY0LDM2MTEzLDE1MDcyOSwxNjA4MCwzNjIxNSwzNjI2NSwxNjM4NDIs''@;'; put 'put ''MTM1MTg4LDE0OTg5OCwxNTIyOCwxNjQyODQsMTYwMDEyLDMxNDYzLDM2NTI1LDM2NTM0LDM2NTQ3LDM3NTg4LDM2NjMzLDM2NjUzLDE2NDcwOSwxNjQ4ODIsMzY3NzMsMzc2MzUsMTcyNzAzLDEzMzcxMiwzNjc4NywxODczMCwxNjYzNjYsMTY1MTgxLDE0Njg3NSwyNDMxMiwxNDM5NzAsMzY4''@;'; put 'put ''NTcsMTcyMDUyLDE2NTU2NCwxNjUxMjEsMTQwMDY5LDE0NzIwLDE1OTQ0NywzNjkxOSwxNjUxODAsMTYyNDk0LDM2OTYxLDE2NTIyOCwxNjUzODcsMzcwMzIsMTY1NjUxLDM3MDYwLDE2NTYwNiwzNzAzOCwzNzExNywzNzIyMywxNTA4OCwzNzI4OSwzNzMxNiwzMTkxNiwxNjYxOTUsMTM4ODg5''@;'; put 'put ''LDM3MzkwLDI3ODA3LDM3NDQxLDM3NDc0LDE1MzAxNywzNzU2MSwxNjY1OTgsMTQ2NTg3LDE2NjY2OCwxNTMwNTEsMTM0NDQ5LDM3Njc2LDM3NzM5LDE2NjYyNSwxNjY4OTEsMjg4MTUsMjMyMzUsMTY2NjI2LDE2NjYyOSwxODc4OSwzNzQ0NCwxNjY4OTIsMTY2OTY5LDE2NjkxMSwzNzc0Nywz''@;'; put 'put ''Nzk3OSwzNjU0MCwzODI3NywzODMxMCwzNzkyNiwzODMwNCwyODY2MiwxNzA4MSwxNDA5MjIsMTY1NTkyLDEzNTgwNCwxNDY5OTAsMTg5MTEsMjc2NzYsMzg1MjMsMzg1NTAsMTY3NDgsMzg1NjMsMTU5NDQ1LDI1MDUwLDM4NTgyLDMwOTY1LDE2NjYyNCwzODU4OSwyMTQ1MiwxODg0OSwxNTg5''@;'; put 'put ''MDQsMTMxNzAwLDE1NjY4OCwxNjgxMTEsMTY4MTY1LDE1MDIyNSwxMzc0OTMsMTQ0MTM4LDM4NzA1LDM0MzcwLDM4NzEwLDE4OTU5LDE3NzI1LDE3Nzk3LDE1MDI0OSwyODc4OSwyMzM2MSwzODY4MywzODc0OCwxNjg0MDUsMzg3NDMsMjMzNzAsMTY4NDI3LDM4NzUxLDM3OTI1LDIwNjg4LDE0''@;'; put 'put ''MzU0MywxNDM1NDgsMzg3OTMsMzg4MTUsMzg4MzMsMzg4NDYsMzg4NDgsMzg4NjYsMzg4ODAsMTUyNjg0LDM4ODk0LDI5NzI0LDE2OTAxMSwzODkxMSwzODkwMSwxNjg5ODksMTYyMTcwLDE5MTUzLDM4OTY0LDM4OTYzLDM4OTg3LDM5MDE0LDE1MTE4LDE2MDExNywxNTY5NywxMzI2NTYsMTQ3''@;'; put 'put ''ODA0LDE1MzM1MCwzOTExNCwzOTA5NSwzOTExMiwzOTExMSwxOTE5OSwxNTkwMTUsMTM2OTE1LDIxOTM2LDM5MTM3LDM5MTQyLDM5MTQ4LDM3NzUyLDM5MjI1LDE1MDA1NywxOTMxNCwxNzAwNzEsMTcwMjQ1LDM5NDEzLDM5NDM2LDM5NDgzLDM5NDQwLDM5NTEyLDE1MzM4MSwxNDAyMCwxNjgx''@;'; put 'put ''MTMsMTcwOTY1LDM5NjQ4LDM5NjUwLDE3MDc1NywzOTY2OCwxOTQ3MCwzOTcwMCwzOTcyNSwxNjUzNzYsMjA1MzIsMzk3MzIsMTU4MTIwLDE0NTMxLDE0MzQ4NSwzOTc2MCwzOTc0NCwxNzEzMjYsMjMxMDksMTM3MzE1LDM5ODIyLDE0ODA0MywzOTkzOCwzOTkzNSwzOTk0OCwxNzE2MjQsNDA0''@;'; put 'put ''MDQsMTcxOTU5LDE3MjQzNCwxNzI0NTksMTcyMjU3LDE3MjMyMywxNzI1MTEsNDAzMTgsNDAzMjMsMTcyMzQwLDQwNDYyLDI2NzYwLDQwMzg4LDEzOTYxMSwxNzI0MzUsMTcyNTc2LDEzNzUzMSwxNzI1OTUsNDAyNDksMTcyMjE3LDE3MjcyNCw0MDU5Miw0MDU5Nyw0MDYwNiw0MDYxMCwxOTc2''@;'; put 'put ''NCw0MDYxOCw0MDYyMywxNDgzMjQsNDA2NDEsMTUyMDAsMTQ4MjEsMTU2NDUsMjAyNzQsMTQyNzAsMTY2OTU1LDQwNzA2LDQwNzEyLDE5MzUwLDM3OTI0LDE1OTEzOCw0MDcyNyw0MDcyNiw0MDc2MSwyMjE3NSwyMjE1NCw0MDc3MywzOTM1MiwxNjgwNzUsMzg4OTgsMzM5MTksNDA4MDIsNDA4''@;'; put 'put ''MDksMzE0NTIsNDA4NDYsMjkyMDYsMTkzOTAsMTQ5ODc3LDE0OTk0NywyOTA0NywxNTAwMDgsMTQ4Mjk2LDE1MDA5NywyOTU5OCwxNjY4NzQsMTM3NDY2LDMxMTM1LDE2NjI3MCwxNjc0NzgsMzc3MzcsMzc4NzUsMTY2NDY4LDM3NjEyLDM3NzYxLDM3ODM1LDE2NjI1MiwxNDg2NjUsMjkyMDcs''@;'; put 'put ''MTYxMDcsMzA1NzgsMzEyOTksMjg4ODAsMTQ4NTk1LDE0ODQ3MiwyOTA1NCwxMzcxOTksMjg4MzUsMTM3NDA2LDE0NDc5MywxNjA3MSwxMzczNDksMTUyNjIzLDEzNzIwOCwxNDExNCwxMzY5NTUsMTM3MjczLDE0MDQ5LDEzNzA3NiwxMzc0MjUsMTU1NDY3LDE0MTE1LDEzNjg5NiwyMjM2Mywx''@;'; put 'put ''NTAwNTMsMTM2MTkwLDEzNTg0OCwxMzYxMzQsMTM2Mzc0LDM0MDUxLDE0NTA2MiwzNDA1MSwzMzg3NywxNDk5MDgsMTYwMTAxLDE0Njk5MywxNTI5MjQsMTQ3MTk1LDE1OTgyNiwxNzY1MiwxNDUxMzQsMTcwMzk3LDE1OTUyNiwyNjYxNywxNDEzMSwxNTM4MSwxNTg0NywyMjYzNiwxMzc1MDYs''@;'; put 'put ''MjY2NDAsMTY0NzEsMTQ1MjE1LDE0NzY4MSwxNDc1OTUsMTQ3NzI3LDE1ODc1MywyMTcwNywyMjE3NCwxNTczNjEsMjIxNjIsMTM1MTM1LDEzNDA1NiwxMzQ2NjksMzc4MzAsMTY2Njc1LDM3Nzg4LDIwMjE2LDIwNzc5LDE0MzYxLDE0ODUzNCwyMDE1NiwxMzIxOTcsMTMxOTY3LDIwMjk5LDIw''@;'; put 'put ''MzYyLDE1MzE2OSwyMzE0NCwxMzE0OTksMTMyMDQzLDE0NzQ1LDEzMTg1MCwxMzIxMTYsMTMzNjUsMjAyNjUsMTMxNzc2LDE2NzYwMywxMzE3MDEsMzU1NDYsMTMxNTk2LDIwMTIwLDIwNjg1LDIwNzQ5LDIwMzg2LDIwMjI3LDE1MDAzMCwxNDcwODIsMjAyOTAsMjA1MjYsMjA1ODgsMjA2MDks''@;'; put 'put ''MjA0MjgsMjA0NTMsMjA1NjgsMjA3MzIsMjA4MjUsMjA4MjcsMjA4MjksMjA4MzAsMjgyNzgsMTQ0Nzg5LDE0NzAwMSwxNDcxMzUsMjgwMTgsMTM3MzQ4LDE0NzA4MSwyMDkwNCwyMDkzMSwxMzI1NzYsMTc2MjksMTMyMjU5LDEzMjI0MiwxMzIyNDEsMzYyMTgsMTY2NTU2LDEzMjg3OCwyMTA4''@;'; put 'put ''MSwyMTE1NiwxMzMyMzUsMjEyMTcsMzc3NDIsMTgwNDIsMjkwNjgsMTQ4MzY0LDEzNDE3NiwxNDk5MzIsMTM1Mzk2LDI3MDg5LDEzNDY4NSwyOTgxNywxNjA5NCwyOTg0OSwyOTcxNiwyOTc4MiwyOTU5MiwxOTM0MiwxNTAyMDQsMTQ3NTk3LDIxNDU2LDEzNzAwLDI5MTk5LDE0NzY1NywyMTk0''@;'; put 'put ''MCwxMzE5MDksMjE3MDksMTM0MDg2LDIyMzAxLDM3NDY5LDM4NjQ0LDM3NzM0LDIyNDkzLDIyNDEzLDIyMzk5LDEzODg2LDIyNzMxLDIzMTkzLDE2NjQ3MCwxMzY5NTQsMTM3MDcxLDEzNjk3NiwyMzA4NCwyMjk2OCwzNzUxOSwyMzE2NiwyMzI0NywyMzA1OCwxNTM5MjYsMTM3NzE1LDEzNzMx''@;'; put 'put ''MywxNDgxMTcsMTQwNjksMjc5MDksMjk3NjMsMjMwNzMsMTU1MjY3LDIzMTY5LDE2Njg3MSwxMzIxMTUsMzc4NTYsMjk4MzYsMTM1OTM5LDI4OTMzLDE4ODAyLDM3ODk2LDE2NjM5NSwzNzgyMSwxNDI0MCwyMzU4MiwyMzcxMCwyNDE1OCwyNDEzNiwxMzc2MjIsMTM3NTk2LDE0NjE1OCwyNDI2''@;'; put 'put ''OSwyMzM3NSwxMzc0NzUsMTM3NDc2LDE0MDgxLDEzNzM3NiwxNDA0NSwxMzY5NTgsMTQwMzUsMzMwNjYsMTY2NDcxLDEzODY4MiwxNDQ0OTgsMTY2MzEyLDI0MzMyLDI0MzM0LDEzNzUxMSwxMzcxMzEsMjMxNDcsMTM3MDE5LDIzMzY0LDM0MzI0LDE2MTI3NywzNDkxMiwyNDcwMiwxNDE0MDgs''@;'; put 'put ''MTQwODQzLDI0NTM5LDE2MDU2LDE0MDcxOSwxNDA3MzQsMTY4MDcyLDE1OTYwMywyNTAyNCwxMzExMzQsMTMxMTQyLDE0MDgyNywyNDk4NSwyNDk4NCwyNDY5MywxNDI0OTEsMTQyNTk5LDE0OTIwNCwxNjgyNjksMjU3MTMsMTQ5MDkzLDE0MjE4NiwxNDg4OSwxNDIxMTQsMTQ0NDY0LDE3MDIx''@;'; put 'put ''OCwxNDI5NjgsMjUzOTksMTczMTQ3LDI1NzgyLDI1MzkzLDI1NTUzLDE0OTk4NywxNDI2OTUsMjUyNTIsMTQyNDk3LDI1NjU5LDI1OTYzLDI2OTk0LDE1MzQ4LDE0MzUwMiwxNDQwNDUsMTQ5ODk3LDE0NDA0MywyMTc3MywxNDQwOTYsMTM3NDMzLDE2OTAyMywyNjMxOCwxNDQwMDksMTQzNzk1''@;'; put 'put ''LDE1MDcyLDE2Nzg0LDE1Mjk2NCwxNjY2OTAsMTUyOTc1LDEzNjk1NiwxNTI5MjMsMTUyNjEzLDMwOTU4LDE0MzYxOSwxMzcyNTgsMTQzOTI0LDEzNDEyLDE0Mzg4NywxNDM3NDYsMTQ4MTY5LDI2MjU0LDE1OTAxMiwyNjIxOSwxOTM0NywyNjE2MCwxNjE5MDQsMTM4NzMxLDI2MjExLDE0NDA4''@;'; put 'put ''MiwxNDQwOTcsMjYxNDIsMTUzNzE0LDE0NTQ1LDE0NTQ2NiwxNDUzNDAsMTUyNTcsMTQ1MzE0LDE0NDM4MiwyOTkwNCwxNTI1NCwyNjUxMSwxNDkwMzQsMjY4MDYsMjY2NTQsMTUzMDAsMjczMjYsMTQ0MzUsMTQ1MzY1LDE0ODYxNSwyNzE4NywyNzIxOCwyNzMzNywyNzM5NywxMzc0OTAsMjU4''@;'; put 'put ''NzMsMjY3NzYsMjcyMTIsMTUzMTksMjcyNTgsMjc0NzksMTQ3MzkyLDE0NjU4NiwzNzc5MiwzNzYxOCwxNjY4OTAsMTY2NjAzLDM3NTEzLDE2Mzg3MCwxNjYzNjQsMzc5OTEsMjgwNjksMjg0MjcsMTQ5OTk2LDI4MDA3LDE0NzMyNywxNTc1OSwyODE2NCwxNDc1MTYsMjMxMDEsMjgxNzAsMjI1''@;'; put 'put ''OTksMjc5NDAsMzA3ODYsMjg5ODcsMTQ4MjUwLDE0ODA4NiwyODkxMywyOTI2NCwyOTMxOSwyOTMzMiwxNDkzOTEsMTQ5Mjg1LDIwODU3LDE1MDE4MCwxMzI1ODcsMjk4MTgsMTQ3MTkyLDE0NDk5MSwxNTAwOTAsMTQ5NzgzLDE1NTYxNywxNjEzNCwxNjA0OSwxNTAyMzksMTY2OTQ3LDE0NzI1''@;'; put 'put ''MywyNDc0MywxNjExNSwyOTkwMCwyOTc1NiwzNzc2NywyOTc1MSwxNzU2NywxNTkyMTAsMTc3NDUsMzAwODMsMTYyMjcsMTUwNzQ1LDE1MDc5MCwxNjIxNiwzMDAzNywzMDMyMywxNzM1MTAsMTUxMjksMjk4MDAsMTY2NjA0LDE0OTkzMSwxNDk5MDIsMTUwOTksMTU4MjEsMTUwMDk0LDE2MTI3''@;'; put 'put ''LDE0OTk1NywxNDk3NDcsMzczNzAsMjIzMjIsMzc2OTgsMTY2NjI3LDEzNzMxNiwyMDcwMywxNTIwOTcsMTUyMDM5LDMwNTg0LDE0MzkyMiwzMDQ3OCwzMDQ3OSwzMDU4NywxNDkxNDMsMTQ1MjgxLDE0OTQyLDE0OTc0NCwyOTc1MiwyOTg1MSwxNjA2MywxNTAyMDIsMTUwMjE1LDE2NTg0LDE1''@;'; put 'put ''MDE2NiwxNTYwNzgsMzc2MzksMTUyOTYxLDMwNzUwLDMwODYxLDMwODU2LDMwOTMwLDI5NjQ4LDMxMDY1LDE2MTYwMSwxNTMzMTUsMTY2NTQsMzExMzEsMzM5NDIsMzExNDEsMjcxODEsMTQ3MTk0LDMxMjkwLDMxMjIwLDE2NzUwLDEzNjkzNCwxNjY5MCwzNzQyOSwzMTIxNywxMzQ0NzYsMTQ5''@;'; put 'put ''OTAwLDEzMTczNywxNDY4NzQsMTM3MDcwLDEzNzE5LDIxODY3LDEzNjgwLDEzOTk0LDEzMTU0MCwxMzQxNTcsMzE0NTgsMjMxMjksMTQxMDQ1LDE1NDI4NywxNTQyNjgsMjMwNTMsMTMxNjc1LDMwOTYwLDIzMDgyLDE1NDU2NiwzMTQ4NiwxNjg4OSwzMTgzNywzMTg1MywxNjkxMywxNTQ1NDcs''@;'; put 'put ''MTU1MzI0LDE1NTMwMiwzMTk0OSwxNTAwMDksMTM3MTM2LDMxODg2LDMxODY4LDMxOTE4LDI3MzE0LDMyMjIwLDMyMjYzLDMyMjExLDMyNTkwLDE1NjI1NywxNTU5OTYsMTYyNjMyLDMyMTUxLDE1NTI2NiwxNzAwMiwxNTg1ODEsMTMzMzk4LDI2NTgyLDEzMTE1MCwxNDQ4NDcsMjI0NjgsMTU2''@;'; put 'put ''NjkwLDE1NjY2NCwxNDk4NTgsMzI3MzMsMzE1MjcsMTMzMTY0LDE1NDM0NSwxNTQ5NDcsMzE1MDAsMTU1MTUwLDM5Mzk4LDM0MzczLDM5NTIzLDI3MTY0LDE0NDQ0NywxNDgxOCwxNTAwMDcsMTU3MTAxLDM5NDU1LDE1NzA4OCwzMzkyMCwxNjAwMzksMTU4OTI5LDE3NjQyLDMzMDc5LDE3NDEw''@;'; put 'put ''LDMyOTY2LDMzMDMzLDMzMDkwLDE1NzYyMCwzOTEwNywxNTgyNzQsMzMzNzgsMzMzODEsMTU4Mjg5LDMzODc1LDE1OTE0MywzNDMyMCwxNjAyODMsMjMxNzQsMTY3NjcsMTM3MjgwLDIzMzM5LDEzNzM3NywyMzI2OCwxMzc0MzIsMzQ0NjQsMTk1MDA0LDE0NjgzMSwzNDg2MSwxNjA4MDIsMjMw''@;'; put 'put ''NDIsMzQ5MjYsMjAyOTMsMzQ5NTEsMzUwMDcsMzUwNDYsMzUxNzMsMzUxNDksMTUzMjE5LDM1MTU2LDE2MTY2OSwxNjE2NjgsMTY2OTAxLDE2Njg3MywxNjY4MTIsMTY2MzkzLDE2MDQ1LDMzOTU1LDE4MTY1LDE4MTI3LDE0MzIyLDM1Mzg5LDM1MzU2LDE2OTAzMiwyNDM5NywzNzQxOSwxNDgx''@;'; put 'put ''MDAsMjYwNjgsMjg5NjksMjg4NjgsMTM3Mjg1LDQwMzAxLDM1OTk5LDM2MDczLDE2MzI5MiwyMjkzOCwzMDY1OSwyMzAyNCwxNzI2MiwxNDAzNiwzNjM5NCwzNjUxOSwxNTA1MzcsMzY2NTYsMzY2ODIsMTcxNDAsMjc3MzYsMjg2MDMsMTQwMDY1LDE4NTg3LDI4NTM3LDI4Mjk5LDEzNzE3OCwz''@;'; put 'put ''OTkxMywxNDAwNSwxNDk4MDcsMzcwNTEsMzcwMTUsMjE4NzMsMTg2OTQsMzczMDcsMzc4OTIsMTY2NDc1LDE2NDgyLDE2NjY1MiwzNzkyNywxNjY5NDEsMTY2OTcxLDM0MDIxLDM1MzcxLDM4Mjk3LDM4MzExLDM4Mjk1LDM4Mjk0LDE2NzIyMCwyOTc2NSwxNjA2NiwxNDk3NTksMTUwMDgyLDE0''@;'; put 'put ''ODQ1OCwxNjEwMywxNDM5MDksMzg1NDMsMTY3NjU1LDE2NzUyNiwxNjc1MjUsMTYwNzYsMTQ5OTk3LDE1MDEzNiwxNDc0MzgsMjk3MTQsMjk4MDMsMTYxMjQsMzg3MjEsMTY4MTEyLDI2Njk1LDE4OTczLDE2ODA4MywxNTM1NjcsMzg3NDksMzc3MzYsMTY2MjgxLDE2Njk1MCwxNjY3MDMsMTU2''@;'; put 'put ''NjA2LDM3NTYyLDIzMzEzLDM1Njg5LDE4NzQ4LDI5Njg5LDE0Nzk5NSwzODgxMSwzODc2OSwzOTIyNCwxMzQ5NTAsMjQwMDEsMTY2ODUzLDE1MDE5NCwzODk0MywxNjkxNzgsMzc2MjIsMTY5NDMxLDM3MzQ5LDE3NjAwLDE2NjczNiwxNTAxMTksMTY2NzU2LDM5MTMyLDE2NjQ2OSwxNjEyOCwz''@;'; put 'put ''NzQxOCwxODcyNSwzMzgxMiwzOTIyNywzOTI0NSwxNjI1NjYsMTU4NjksMzkzMjMsMTkzMTEsMzkzMzgsMzk1MTYsMTY2NzU3LDE1MzgwMCwyNzI3OSwzOTQ1NywyMzI5NCwzOTQ3MSwxNzAyMjUsMTkzNDQsMTcwMzEyLDM5MzU2LDE5Mzg5LDE5MzUxLDM3NzU3LDIyNjQyLDEzNTkzOCwyMjU2''@;'; put 'put ''MiwxNDk5NDQsMTM2NDI0LDMwNzg4LDE0MTA4NywxNDY4NzIsMjY4MjEsMTU3NDEsMzc5NzYsMTQ2MzEsMjQ5MTIsMTQxMTg1LDE0MTY3NSwyNDgzOSw0MDAxNSw0MDAxOSw0MDA1OSwzOTk4OSwzOTk1MiwzOTgwNywzOTg4NywxNzE1NjUsMzk4MzksMTcyNTMzLDE3MjI4Niw0MDIyNSwxOTYz''@;'; put 'put ''MCwxNDc3MTYsNDA0NzIsMTk2MzIsNDAyMDQsMTcyNDY4LDE3MjI2OSwxNzIyNzUsMTcwMjg3LDQwMzU3LDMzOTgxLDE1OTI1MCwxNTk3MTEsMTU4NTk0LDM0MzAwLDE3NzE1LDE1OTE0MCwxNTkzNjQsMTU5MjE2LDMzODI0LDM0Mjg2LDE1OTIzMiwxNDUzNjcsMTU1NzQ4LDMxMjAyLDE0NDc5''@;'; put 'put ''NiwxNDQ5NjAsMTg3MzMsMTQ5OTgyLDE1NzE0LDM3ODUxLDM3NTY2LDM3NzA0LDEzMTc3NSwzMDkwNSwzNzQ5NSwzNzk2NSwyMDQ1MiwxMzM3NiwzNjk2NCwxNTI5MjUsMzA3ODEsMzA4MDQsMzA5MDIsMzA3OTUsMTM3MDQ3LDE0MzgxNywxNDk4MjUsMTM5NzgsMjAzMzgsMjg2MzQsMjg2MzMs''@;'; put 'put ''Mjg3MDIsMjg3MDIsMjE1MjQsMTQ3ODkzLDIyNDU5LDIyNzcxLDIyNDEwLDQwMjE0LDIyNDg3LDI4OTgwLDEzNDg3LDE0Nzg4NCwyOTE2MywxNTg3ODQsMTUxNDQ3LDIzMzM2LDEzNzE0MSwxNjY0NzMsMjQ4NDQsMjMyNDYsMjMwNTEsMTcwODQsMTQ4NjE2LDE0MTI0LDE5MzIzLDE2NjM5Niwz''@;'; put 'put ''NzgxOSwzNzgxNiwxMzc0MzAsMTM0OTQxLDMzOTA2LDE1ODkxMiwxMzYyMTEsMTQ4MjE4LDE0MjM3NCwxNDg0MTcsMjI5MzIsMTQ2ODcxLDE1NzUwNSwzMjE2OCwxNTU5OTUsMTU1ODEyLDE0OTk0NSwxNDk4OTksMTY2Mzk0LDM3NjA1LDI5NjY2LDE2MTA1LDI5ODc2LDE2Njc1NSwxMzczNzUs''@;'; put 'put ''MTYwOTcsMTUwMTk1LDI3MzUyLDI5NjgzLDI5NjkxLDE2MDg2LDE1MDA3OCwxNTAxNjQsMTM3MTc3LDE1MDExOCwxMzIwMDcsMTM2MjI4LDE0OTk4OSwyOTc2OCwxNDk3ODIsMjg4MzcsMTQ5ODc4LDM3NTA4LDI5NjcwLDM3NzI3LDEzMjM1MCwzNzY4MSwxNjY2MDYsMTY2NDIyLDM3NzY2LDE2''@;'; put 'put ''Njg4NywxNTMwNDUsMTg3NDEsMTY2NTMwLDI5MDM1LDE0OTgyNywxMzQzOTksMjIxODAsMTMyNjM0LDEzNDEyMywxMzQzMjgsMjE3NjIsMzExNzIsMTM3MjEwLDMyMjU0LDEzNjg5OCwxNTAwOTYsMTM3Mjk4LDE3NzEwLDM3ODg5LDE0MDkwLDE2NjU5MiwxNDk5MzMsMjI5NjAsMTM3NDA3LDEz''@;'; put 'put ''NzM0NywxNjA5MDAsMjMyMDEsMTQwNTAsMTQ2Nzc5LDE0ZTMsMzc0NzEsMjMxNjEsMTY2NTI5LDEzNzMxNCwzNzc0OCwxNTU2NSwxMzM4MTIsMTkwOTQsMTQ3MzAsMjA3MjQsMTU3MjEsMTU2OTIsMTM2MDkyLDI5MDQ1LDE3MTQ3LDE2NDM3NiwyODE3NSwxNjgxNjQsMTc2NDMsMjc5OTEsMTYz''@;'; put 'put ''NDA3LDI4Nzc1LDI3ODIzLDE1NTc0LDE0NzQzNywxNDY5ODksMjgxNjIsMjg0MjgsMTU3MjcsMTMyMDg1LDMwMDMzLDE0MDEyLDEzNTEyLDE4MDQ4LDE2MDkwLDE4NTQ1LDIyOTgwLDM3NDg2LDE4NzUwLDM2NjczLDE2Njk0MCwxNTg2NTYsMjI1NDYsMjI0NzIsMTQwMzgsMTM2Mjc0LDI4OTI2''@;'; put 'put ''LDE0ODMyMiwxNTAxMjksMTQzMzMxLDEzNTg1NiwxNDAyMjEsMjY4MDksMjY5ODMsMTM2MDg4LDE0NDYxMywxNjI4MDQsMTQ1MTE5LDE2NjUzMSwxNDUzNjYsMTQ0Mzc4LDE1MDY4NywyNzE2MiwxNDUwNjksMTU4OTAzLDMzODU0LDE3NjMxLDE3NjE0LDE1OTAxNCwxNTkwNTcsMTU4ODUwLDE1''@;'; put 'put ''OTcxMCwyODQzOSwxNjAwMDksMzM1OTcsMTM3MDE4LDMzNzczLDE1ODg0OCwxNTk4MjcsMTM3MTc5LDIyOTIxLDIzMTcwLDEzNzEzOSwyMzEzNywyMzE1MywxMzc0NzcsMTQ3OTY0LDE0MTI1LDIzMDIzLDEzNzAyMCwxNDAyMywyOTA3MCwzNzc3NiwyNjI2NiwxNDgxMzMsMjMxNTAsMjMwODMs''@;'; put 'put ''MTQ4MTE1LDI3MTc5LDE0NzE5MywxNjE1OTAsMTQ4NTcxLDE0ODE3MCwyODk1NywxNDgwNTcsMTY2MzY5LDIwNDAwLDE1OTAxNiwyMzc0NiwxNDg2ODYsMTYzNDA1LDE0ODQxMywyNzE0OCwxNDgwNTQsMTM1OTQwLDI4ODM4LDI4OTc5LDE0ODQ1NywxNTc4MSwyNzg3MSwxOTQ1OTcsMTUwMDk1''@;'; put 'put ''LDMyMzU3LDIzMDE5LDIzODU1LDE1ODU5LDI0NDEyLDE1MDEwOSwxMzcxODMsMzIxNjQsMzM4MzAsMjE2MzcsMTQ2MTcwLDE0NDEyOCwxMzE2MDQsMjIzOTgsMTMzMzMzLDEzMjYzMywxNjM1NywxMzkxNjYsMTcyNzI2LDI4Njc1LDE2ODI4MywyMzkyMCwyOTU4MywzMTk1NSwxNjY0ODksMTY4''@;'; put 'put ''OTkyLDIwNDI0LDMyNzQzLDI5Mzg5LDI5NDU2LDE2MjU0OCwyOTQ5NiwyOTQ5NywxNTMzMzQsMjk1MDUsMjk1MTIsMTYwNDEsMTYyNTg0LDM2OTcyLDI5MTczLDE0OTc0NiwyOTY2NSwzMzI3MCwxNjA3NCwzMDQ3NiwxNjA4MSwyNzgxMCwyMjI2OSwyOTcyMSwyOTcyNiwyOTcyNywxNjA5OCwx''@;'; put 'put ''NjExMiwxNjExNiwxNjEyMiwyOTkwNywxNjE0MiwxNjIxMSwzMDAxOCwzMDA2MSwzMDA2NiwzMDA5MywxNjI1MiwzMDE1MiwzMDE3MiwxNjMyMCwzMDI4NSwxNjM0MywzMDMyNCwxNjM0OCwzMDMzMCwxNTEzODgsMjkwNjQsMjIwNTEsMzUyMDAsMjI2MzMsMTY0MTMsMzA1MzEsMTY0NDEsMjY0''@;'; put 'put ''NjUsMTY0NTMsMTM3ODcsMzA2MTYsMTY0OTAsMTY0OTUsMjM2NDYsMzA2NTQsMzA2NjcsMjI3NzAsMzA3NDQsMjg4NTcsMzA3NDgsMTY1NTIsMzA3NzcsMzA3OTEsMzA4MDEsMzA4MjIsMzM4NjQsMTUyODg1LDMxMDI3LDI2NjI3LDMxMDI2LDE2NjQzLDE2NjQ5LDMxMTIxLDMxMTI5LDM2Nzk1''@;'; put 'put ''LDMxMjM4LDM2Nzk2LDE2NzQzLDMxMzc3LDE2ODE4LDMxNDIwLDMzNDAxLDE2ODM2LDMxNDM5LDMxNDUxLDE2ODQ3LDIwMDAxLDMxNTg2LDMxNTk2LDMxNjExLDMxNzYyLDMxNzcxLDE2OTkyLDE3MDE4LDMxODY3LDMxOTAwLDE3MDM2LDMxOTI4LDE3MDQ0LDMxOTgxLDM2NzU1LDI4ODY0LDEz''@;'; put 'put ''NDM1MSwzMjIwNywzMjIxMiwzMjIwOCwzMjI1MywzMjY4NiwzMjY5MiwyOTM0MywxNzMwMywzMjgwMCwzMjgwNSwzMTU0NSwzMjgxNCwzMjgxNywzMjg1MiwxNTgyMCwyMjQ1MiwyODgzMiwzMjk1MSwzMzAwMSwxNzM4OSwzMzAzNiwyOTQ4MiwzMzAzOCwzMzA0MiwzMDA0OCwzMzA0NCwxNzQw''@;'; put 'put ''OSwxNTE2MSwzMzExMCwzMzExMywzMzExNCwxNzQyNywyMjU4NiwzMzE0OCwzMzE1NiwxNzQ0NSwzMzE3MSwxNzQ1MywzMzE4OSwyMjUxMSwzMzIxNywzMzI1MiwzMzM2NCwxNzU1MSwzMzQ0NiwzMzM5OCwzMzQ4MiwzMzQ5NiwzMzUzNSwxNzU4NCwzMzYyMywzODUwNSwyNzAxOCwzMzc5Nywy''@;'; put 'put ''ODkxNywzMzg5MiwyNDgwMywzMzkyOCwxNzY2OCwzMzk4MiwzNDAxNywzNDA0MCwzNDA2NCwzNDEwNCwzNDEzMCwxNzcyMywzNDE1OSwzNDE2MCwzNDI3MiwxNzc4MywzNDQxOCwzNDQ1MCwzNDQ4MiwzNDU0MywzODQ2OSwzNDY5OSwxNzkyNiwxNzk0MywzNDk5MCwzNTA3MSwzNTEwOCwzNTE0''@;'; put 'put ''MywzNTIxNywxNjIxNTEsMzUzNjksMzUzODQsMzU0NzYsMzU1MDgsMzU5MjEsMzYwNTIsMzYwODIsMzYxMjQsMTgzMjgsMjI2MjMsMzYyOTEsMTg0MTMsMjAyMDYsMzY0MTAsMjE5NzYsMjIzNTYsMzY0NjUsMjIwMDUsMzY1MjgsMTg0ODcsMzY1NTgsMzY1NzgsMzY1ODAsMzY1ODksMzY1OTQs''@;'; put 'put ''MzY3OTEsMzY4MDEsMzY4MTAsMzY4MTIsMzY5MTUsMzkzNjQsMTg2MDUsMzkxMzYsMzczOTUsMTg3MTgsMzc0MTYsMzc0NjQsMzc0ODMsMzc1NTMsMzc1NTAsMzc1NjcsMzc2MDMsMzc2MTEsMzc2MTksMzc2MjAsMzc2MjksMzc2OTksMzc3NjQsMzc4MDUsMTg3NTcsMTg3NjksNDA2MzksMzc5''@;'; put 'put ''MTEsMjEyNDksMzc5MTcsMzc5MzMsMzc5NTAsMTg3OTQsMzc5NzIsMzgwMDksMzgxODksMzgzMDYsMTg4NTUsMzgzODgsMzg0NTEsMTg5MTcsMjY1MjgsMTg5ODAsMzg3MjAsMTg5OTcsMzg4MzQsMzg4NTAsMjIxMDAsMTkxNzIsMjQ4MDgsMzkwOTcsMTkyMjUsMzkxNTMsMjI1OTYsMzkxODIs''@;'; put 'put ''MzkxOTMsMjA5MTYsMzkxOTYsMzkyMjMsMzkyMzQsMzkyNjEsMzkyNjYsMTkzMTIsMzkzNjUsMTkzNTcsMzk0ODQsMzk2OTUsMzEzNjMsMzk3ODUsMzk4MDksMzk5MDEsMzk5MjEsMzk5MjQsMTk1NjUsMzk5NjgsMTQxOTEsMTM4MTc4LDQwMjY1LDM5OTk0LDQwNzAyLDIyMDk2LDQwMzM5LDQw''@;'; put 'put ''MzgxLDQwMzg0LDQwNDQ0LDM4MTM0LDM2NzkwLDQwNTcxLDQwNjIwLDQwNjI1LDQwNjM3LDQwNjQ2LDM4MTA4LDQwNjc0LDQwNjg5LDQwNjk2LDMxNDMyLDQwNzcyLDEzMTIyMCwxMzE3NjcsMTMyZTMsMjY5MDYsMzgwODMsMjI5NTYsMTMyMzExLDIyNTkyLDM4MDgxLDE0MjY1LDEzMjU2NSwx''@;'; put 'put ''MzI2MjksMTMyNzI2LDEzNjg5MCwyMjM1OSwyOTA0MywxMzM4MjYsMTMzODM3LDEzNDA3OSwyMTYxMCwxOTQ2MTksMTM0MDkxLDIxNjYyLDEzNDEzOSwxMzQyMDMsMTM0MjI3LDEzNDI0NSwxMzQyNjgsMjQ4MDcsMTM0Mjg1LDIyMTM4LDEzNDMyNSwxMzQzNjUsMTM0MzgxLDEzNDUxMSwxMzQ1''@;'; put 'put ''NzgsMTM0NjAwLDI2OTY1LDM5OTgzLDM0NzI1LDEzNDY2MCwxMzQ2NzAsMTM0ODcxLDEzNTA1NiwxMzQ5NTcsMTM0NzcxLDIzNTg0LDEzNTEwMCwyNDA3NSwxMzUyNjAsMTM1MjQ3LDEzNTI4NiwyNjM5OCwxMzUyOTEsMTM1MzA0LDEzNTMxOCwxMzg5NSwxMzUzNTksMTM1Mzc5LDEzNTQ3MSwx''@;'; put 'put ''MzU0ODMsMjEzNDgsMzM5NjUsMTM1OTA3LDEzNjA1MywxMzU5OTAsMzU3MTMsMTM2NTY3LDEzNjcyOSwxMzcxNTUsMTM3MTU5LDIwMDg4LDI4ODU5LDEzNzI2MSwxMzc1NzgsMTM3NzczLDEzNzc5NywxMzgyODIsMTM4MzUyLDEzODQxMiwxMzg5NTIsMjUyODMsMTM4OTY1LDEzOTAyOSwyOTA4''@;'; put 'put ''MCwyNjcwOSwxMzkzMzMsMjcxMTMsMTQwMjQsMTM5OTAwLDE0MDI0NywxNDAyODIsMTQxMDk4LDE0MTQyNSwxNDE2NDcsMzM1MzMsMTQxNjcxLDE0MTcxNSwxNDIwMzcsMzUyMzcsMTQyMDU2LDM2NzY4LDE0MjA5NCwzODg0MCwxNDIxNDMsMzg5ODMsMzk2MTMsMTQyNDEyLG51bGwsMTQyNDcy''@;'; put 'put ''LDE0MjUxOSwxNTQ2MDAsMTQyNjAwLDE0MjYxMCwxNDI3NzUsMTQyNzQxLDE0MjkxNCwxNDMyMjAsMTQzMzA4LDE0MzQxMSwxNDM0NjIsMTQ0MTU5LDE0NDM1MCwyNDQ5NywyNjE4NCwyNjMwMywxNjI0MjUsMTQ0NzQzLDE0NDg4MywyOTE4NSwxNDk5NDYsMzA2NzksMTQ0OTIyLDE0NTE3NCwz''@;'; put 'put ''MjM5MSwxMzE5MTAsMjI3MDksMjYzODIsMjY5MDQsMTQ2MDg3LDE2MTM2NywxNTU2MTgsMTQ2OTYxLDE0NzEyOSwxNjEyNzgsMTM5NDE4LDE4NjQwLDE5MTI4LDE0NzczNywxNjY1NTQsMTQ4MjA2LDE0ODIzNywxNDc1MTUsMTQ4Mjc2LDE0ODM3NCwxNTAwODUsMTMyNTU0LDIwOTQ2LDEzMjYy''@;'; put 'put ''NSwyMjk0MywxMzg5MjAsMTUyOTQsMTQ2Njg3LDE0ODQ4NCwxNDg2OTQsMjI0MDgsMTQ5MTA4LDE0NzQ3LDE0OTI5NSwxNjUzNTIsMTcwNDQxLDE0MTc4LDEzOTcxNSwzNTY3OCwxNjY3MzQsMzkzODIsMTQ5NTIyLDE0OTc1NSwxNTAwMzcsMjkxOTMsMTUwMjA4LDEzNDI2NCwyMjg4NSwxNTEy''@;'; put 'put ''MDUsMTUxNDMwLDEzMjk4NSwzNjU3MCwxNTE1OTYsMjExMzUsMjIzMzUsMjkwNDEsMTUyMjE3LDE1MjYwMSwxNDcyNzQsMTUwMTgzLDIxOTQ4LDE1MjY0NiwxNTI2ODYsMTU4NTQ2LDM3MzMyLDEzNDI3LDE1Mjg5NSwxNjEzMzAsMTUyOTI2LDE4MjAwLDE1MjkzMCwxNTI5MzQsMTUzNTQzLDE0''@;'; put 'put ''OTgyMywxNTM2OTMsMjA1ODIsMTM1NjMsMTQ0MzMyLDI0Nzk4LDE1Mzg1OSwxODMwMCwxNjYyMTYsMTU0Mjg2LDE1NDUwNSwxNTQ2MzAsMTM4NjQwLDIyNDMzLDI5MDA5LDI4NTk4LDE1NTkwNiwxNjI4MzQsMzY5NTAsMTU2MDgyLDE1MTQ1MCwzNTY4MiwxNTY2NzQsMTU2NzQ2LDIzODk5LDE1''@;'; put 'put ''ODcxMSwzNjY2MiwxNTY4MDQsMTM3NTAwLDM1NTYyLDE1MDAwNiwxNTY4MDgsMTQ3NDM5LDE1Njk0NiwxOTM5MiwxNTcxMTksMTU3MzY1LDE0MTA4MywzNzk4OSwxNTM1NjksMjQ5ODEsMjMwNzksMTk0NzY1LDIwNDExLDIyMjAxLDE0ODc2OSwxNTc0MzYsMjAwNzQsMTQ5ODEyLDM4NDg2LDI4''@;'; put 'put ''MDQ3LDE1ODkwOSwxMzg0OCwzNTE5MSwxNTc1OTMsMTU3ODA2LDE1NjY4OSwxNTc3OTAsMjkxNTEsMTU3ODk1LDMxNTU0LDE2ODEyOCwxMzM2NDksMTU3OTkwLDM3MTI0LDE1ODAwOSwzMTMwMSw0MDQzMiwxNTgyMDIsMzk0NjIsMTU4MjUzLDEzOTE5LDE1Njc3NywxMzExMDUsMzExMDcsMTU4''@;'; put 'put ''MjYwLDE1ODU1NSwyMzg1MiwxNDQ2NjUsMzM3NDMsMTU4NjIxLDE4MTI4LDE1ODg4NCwzMDAxMSwzNDkxNywxNTkxNTAsMjI3MTAsMTQxMDgsMTQwNjg1LDE1OTgxOSwxNjAyMDUsMTU0NDQsMTYwMzg0LDE2MDM4OSwzNzUwNSwxMzk2NDIsMTYwMzk1LDM3NjgwLDE2MDQ4NiwxNDk5NjgsMjc3''@;'; put 'put ''MDUsMzgwNDcsMTYwODQ4LDEzNDkwNCwzNDg1NSwzNTA2MSwxNDE2MDYsMTY0OTc5LDEzNzEzNywyODM0NCwxNTAwNTgsMTM3MjQ4LDE0NzU2LDE0MDA5LDIzNTY4LDMxMjAzLDE3NzI3LDI2Mjk0LDE3MTE4MSwxNzAxNDgsMzUxMzksMTYxNzQwLDE2MTg4MCwyMjIzMCwxNjYwNywxMzY3MTQs''@;'; put 'put ''MTQ3NTMsMTQ1MTk5LDE2NDA3MiwxMzYxMzMsMjkxMDEsMzM2MzgsMTYyMjY5LDE2ODM2MCwyMzE0MywxOTYzOSwxNTk5MTksMTY2MzE1LDE2MjMwMSwxNjIzMTQsMTYyNTcxLDE2MzE3NCwxNDc4MzQsMzE1NTUsMzExMDIsMTYzODQ5LDI4NTk3LDE3Mjc2NywyNzEzOSwxNjQ2MzIsMjE0MTAs''@;'; put 'put ''MTU5MjM5LDM3ODIzLDI2Njc4LDM4NzQ5LDE2NDIwNywxNjM4NzUsMTU4MTMzLDEzNjE3MywxNDM5MTksMTYzOTEyLDIzOTQxLDE2Njk2MCwxNjM5NzEsMjIyOTMsMzg5NDcsMTY2MjE3LDIzOTc5LDE0OTg5NiwyNjA0NiwyNzA5MywyMTQ1OCwxNTAxODEsMTQ3MzI5LDE1Mzc3LDI2NDIyLDE2''@;'; put 'put ''Mzk4NCwxNjQwODQsMTY0MTQyLDEzOTE2OSwxNjQxNzUsMTY0MjMzLDE2NDI3MSwxNjQzNzgsMTY0NjE0LDE2NDY1NSwxNjQ3NDYsMTM3NzAsMTY0OTY4LDE2NTU0NiwxODY4MiwyNTU3NCwxNjYyMzAsMzA3MjgsMzc0NjEsMTY2MzI4LDE3Mzk0LDE2NjM3NSwxNzM3NSwxNjYzNzYsMTY2NzI2''@;'; put 'put ''LDE2Njg2OCwyMzAzMiwxNjY5MjEsMzY2MTksMTY3ODc3LDE2ODE3MiwzMTU2OSwxNjgyMDgsMTY4MjUyLDE1ODYzLDE2ODI4NiwxNTAyMTgsMzY4MTYsMjkzMjcsMjIxNTUsMTY5MTkxLDE2OTQ0OSwxNjkzOTIsMTY5NDAwLDE2OTc3OCwxNzAxOTMsMTcwMzEzLDE3MDM0NiwxNzA0MzUsMTcw''@;'; put 'put ''NTM2LDE3MDc2NiwxNzEzNTQsMTcxNDE5LDMyNDE1LDE3MTc2OCwxNzE4MTEsMTk2MjAsMzgyMTUsMTcyNjkxLDI5MDkwLDE3Mjc5OSwxOTg1NywzNjg4MiwxNzM1MTUsMTk4NjgsMTM0MzAwLDM2Nzk4LDIxOTUzLDM2Nzk0LDE0MDQ2NCwzNjc5MywxNTAxNjMsMTc2NzMsMzIzODMsMjg1MDIs''@;'; put 'put ''MjczMTMsMjAyMDIsMTM1NDAsMTY2NzAwLDE2MTk0OSwxNDEzOCwzNjQ4MCwxMzcyMDUsMTYzODc2LDE2Njc2NCwxNjY4MDksMTYyMzY2LDE1NzM1OSwxNTg1MSwxNjEzNjUsMTQ2NjE1LDE1MzE0MSwxNTM5NDIsMjAxMjIsMTU1MjY1LDE1NjI0OCwyMjIwNywxMzQ3NjUsMzYzNjYsMjM0MDUs''@;'; put 'put ''MTQ3MDgwLDE1MDY4NiwyNTU2NiwyNTI5NiwxMzcyMDYsMTM3MzM5LDI1OTA0LDIyMDYxLDE1NDY5OCwyMTUzMCwxNTIzMzcsMTU4MTQsMTcxNDE2LDE5NTgxLDIyMDUwLDIyMDQ2LDMyNTg1LDE1NTM1MiwyMjkwMSwxNDY3NTIsMzQ2NzIsMTk5OTYsMTM1MTQ2LDEzNDQ3MywxNDUwODIsMzMw''@;'; put 'put ''NDcsNDAyODYsMzYxMjAsMzAyNjcsNDAwMDUsMzAyODYsMzA2NDksMzc3MDEsMjE1NTQsMzMwOTYsMzM1MjcsMjIwNTMsMzMwNzQsMzM4MTYsMzI5NTcsMjE5OTQsMzEwNzQsMjIwODMsMjE1MjYsMTM0ODEzLDEzNzc0LDIyMDIxLDIyMDAxLDI2MzUzLDE2NDU3OCwxMzg2OSwzMDAwNCwyMmUz''@;'; put 'put ''LDIxOTQ2LDIxNjU1LDIxODc0LDEzNDIwOSwxMzQyOTQsMjQyNzIsMTUxODgwLDEzNDc3NCwxNDI0MzQsMTM0ODE4LDQwNjE5LDMyMDkwLDIxOTgyLDEzNTI4NSwyNTI0NSwzODc2NSwyMTY1MiwzNjA0NSwyOTE3NCwzNzIzOCwyNTU5NiwyNTUyOSwyNTU5OCwyMTg2NSwxNDIxNDcsNDAwNTAs''@;'; put 'put ''MTQzMDI3LDIwODkwLDEzNTM1LDEzNDU2NywyMDkwMywyMTU4MSwyMTc5MCwyMTc3OSwzMDMxMCwzNjM5NywxNTc4MzQsMzAxMjksMzI5NTAsMzQ4MjAsMzQ2OTQsMzUwMTUsMzMyMDYsMzM4MjAsMTM1MzYxLDE3NjQ0LDI5NDQ0LDE0OTI1NCwyMzQ0MCwzMzU0NywxNTc4NDMsMjIxMzksMTQx''@;'; put 'put ''MDQ0LDE2MzExOSwxNDc4NzUsMTYzMTg3LDE1OTQ0MCwxNjA0MzgsMzcyMzIsMTM1NjQxLDM3Mzg0LDE0NjY4NCwxNzM3MzcsMTM0ODI4LDEzNDkwNSwyOTI4NiwxMzg0MDIsMTgyNTQsMTUxNDkwLDE2MzgzMywxMzUxNDcsMTY2MzQsNDAwMjksMjU4ODcsMTQyNzUyLDE4Njc1LDE0OTQ3Miwx''@;'; put 'put ''NzEzODgsMTM1MTQ4LDEzNDY2NiwyNDY3NCwxNjExODcsMTM1MTQ5LG51bGwsMTU1NzIwLDEzNTU1OSwyOTA5MSwzMjM5OCw0MDI3MiwxOTk5NCwxOTk3MiwxMzY4NywyMzMwOSwyNzgyNiwyMTM1MSwxMzk5NiwxNDgxMiwyMTM3MywxMzk4OSwxNDkwMTYsMjI2ODIsMTUwMzgyLDMzMzI1LDIx''@;'; put 'put ''NTc5LDIyNDQyLDE1NDI2MSwxMzM0OTcsbnVsbCwxNDkzMCwxNDAzODksMjk1NTYsMTcxNjkyLDE5NzIxLDM5OTE3LDE0NjY4NiwxNzE4MjQsMTk1NDcsMTUxNDY1LDE2OTM3NCwxNzE5OTgsMzM4ODQsMTQ2ODcwLDE2MDQzNCwxNTc2MTksMTQ1MTg0LDI1MzkwLDMyMDM3LDE0NzE5MSwxNDY5''@;'; put 'put ''ODgsMTQ4OTAsMzY4NzIsMjExOTYsMTU5ODgsMTM5NDYsMTc4OTcsMTMyMjM4LDMwMjcyLDIzMjgwLDEzNDgzOCwzMDg0MiwxNjM2MzAsMjI2OTUsMTY1NzUsMjIxNDAsMzk4MTksMjM5MjQsMzAyOTIsMTczMTA4LDQwNTgxLDE5NjgxLDMwMjAxLDE0MzMxLDI0ODU3LDE0MzU3OCwxNDg0NjYs''@;'; put 'put ''bnVsbCwyMjEwOSwxMzU4NDksMjI0MzksMTQ5ODU5LDE3MTUyNiwyMTA0NCwxNTk5MTgsMTM3NDEsMjc3MjIsNDAzMTYsMzE4MzAsMzk3MzcsMjI0OTQsMTM3MDY4LDIzNjM1LDI1ODExLDE2OTE2OCwxNTY0NjksMTYwMTAwLDM0NDc3LDEzNDQ0MCwxNTkwMTAsMTUwMjQyLDEzNDUxMyxudWxs''@;'; put 'put ''LDIwOTkwLDEzOTAyMywyMzk1MCwzODY1OSwxMzg3MDUsNDA1NzcsMzY5NDAsMzE1MTksMzk2ODIsMjM3NjEsMzE2NTEsMjUxOTIsMjUzOTcsMzk2NzksMzE2OTUsMzk3MjIsMzE4NzAsMzk3MjYsMzE4MTAsMzE4NzgsMzk5NTcsMzE3NDAsMzk2ODksNDA3MjcsMzk5NjMsMTQ5ODIyLDQwNzk0''@;'; put 'put ''LDIxODc1LDIzNDkxLDIwNDc3LDQwNjAwLDIwNDY2LDIxMDg4LDE1ODc4LDIxMjAxLDIyMzc1LDIwNTY2LDIyOTY3LDI0MDgyLDM4ODU2LDQwMzYzLDM2NzAwLDIxNjA5LDM4ODM2LDM5MjMyLDM4ODQyLDIxMjkyLDI0ODgwLDI2OTI0LDIxNDY2LDM5OTQ2LDQwMTk0LDE5NTE1LDM4NDY1LDI3''@;'; put 'put ''MDA4LDIwNjQ2LDMwMDIyLDEzNzA2OSwzOTM4NiwyMTEwNyxudWxsLDM3MjA5LDM4NTI5LDM3MjEyLG51bGwsMzcyMDEsMTY3NTc1LDI1NDcxLDE1OTAxMSwyNzMzOCwyMjAzMywzNzI2MiwzMDA3NCwyNTIyMSwxMzIwOTIsMjk1MTksMzE4NTYsMTU0NjU3LDE0NjY4NSxudWxsLDE0OTc4NSwz''@;'; put 'put ''MDQyMiwzOTgzNywyMDAxMCwxMzQzNTYsMzM3MjYsMzQ4ODIsbnVsbCwyMzYyNiwyNzA3MiwyMDcxNywyMjM5NCwyMTAyMywyNDA1MywyMDE3NCwyNzY5NywxMzE1NzAsMjAyODEsMjE2NjAsMjE3MjIsMjExNDYsMzYyMjYsMTM4MjIsMjQzMzIsMTM4MTEsbnVsbCwyNzQ3NCwzNzI0NCw0MDg2''@;'; put 'put ''OSwzOTgzMSwzODk1OCwzOTA5MiwzOTYxMCw0MDYxNiw0MDU4MCwyOTA1MCwzMTUwOCxudWxsLDI3NjQyLDM0ODQwLDMyNjMyLG51bGwsMjIwNDgsMTczNjQyLDM2NDcxLDQwNzg3LG51bGwsMzYzMDgsMzY0MzEsNDA0NzYsMzYzNTMsMjUyMTgsMTY0NzMzLDM2MzkyLDM2NDY5LDMxNDQzLDE1''@;'; put 'put ''MDEzNSwzMTI5NCwzMDkzNiwyNzg4MiwzNTQzMSwzMDIxNSwxNjY0OTAsNDA3NDIsMjc4NTQsMzQ3NzQsMzAxNDcsMTcyNzIyLDMwODAzLDE5NDYyNCwzNjEwOCwyOTQxMCwyOTU1MywzNTYyOSwyOTQ0MiwyOTkzNywzNjA3NSwxNTAyMDMsMzQzNTEsMjQ1MDYsMzQ5NzYsMTc1OTEsbnVsbCwx''@;'; put 'put ''MzcyNzUsMTU5MjM3LG51bGwsMzU0NTQsMTQwNTcxLG51bGwsMjQ4MjksMzAzMTEsMzk2MzksNDAyNjAsMzc3NDIsMzk4MjMsMzQ4MDUsbnVsbCwzNDgzMSwzNjA4NywyOTQ4NCwzODY4OSwzOTg1NiwxMzc4MiwyOTM2MiwxOTQ2MywzMTgyNSwzOTI0MiwxNTU5OTMsMjQ5MjEsMTk0NjAsNDA1''@;'; put 'put ''OTgsMjQ5NTcsbnVsbCwyMjM2NywyNDk0MywyNTI1NCwyNTE0NSwyNTI5NCwxNDk0MCwyNTA1OCwyMTQxOCwxNDQzNzMsMjU0NDQsMjY2MjYsMTM3NzgsMjM4OTUsMTY2ODUwLDM2ODI2LDE2NzQ4MSxudWxsLDIwNjk3LDEzODU2NiwzMDk4MiwyMTI5OCwzODQ1NiwxMzQ5NzEsMTY0ODUsbnVs''@;'; put 'put ''bCwzMDcxOCxudWxsLDMxOTM4LDE1NTQxOCwzMTk2MiwzMTI3NywzMjg3MCwzMjg2NywzMjA3NywyOTk1NywyOTkzOCwzNTIyMCwzMzMwNiwyNjM4MCwzMjg2NiwxNjA5MDIsMzI4NTksMjk5MzYsMzMwMjcsMzA1MDAsMzUyMDksMTU3NjQ0LDMwMDM1LDE1OTQ0MSwzNDcyOSwzNDc2NiwzMzIy''@;'; put 'put ''NCwzNDcwMCwzNTQwMSwzNjAxMywzNTY1MSwzMDUwNywyOTk0NCwzNDAxMCwxMzg3NywyNzA1OCwzNjI2MixudWxsLDM1MjQxLDI5ODAwLDI4MDg5LDM0NzUzLDE0NzQ3MywyOTkyNywxNTgzNSwyOTA0NiwyNDc0MCwyNDk4OCwxNTU2OSwyOTAyNiwyNDY5NSxudWxsLDMyNjI1LDE2NjcwMSwy''@;'; put 'put ''OTI2NCwyNDgwOSwxOTMyNiwyMTAyNCwxNTM4NCwxNDY2MzEsMTU1MzUxLDE2MTM2NiwxNTI4ODEsMTM3NTQwLDEzNTkzNCwxNzAyNDMsMTU5MTk2LDE1OTkxNywyMzc0NSwxNTYwNzcsMTY2NDE1LDE0NTAxNSwxMzEzMTAsMTU3NzY2LDE1MTMxMCwxNzc2MiwyMzMyNywxNTY0OTIsNDA3ODQs''@;'; put 'put ''NDA2MTQsMTU2MjY3LDEyMjg4LDY1MjkyLDEyMjg5LDEyMjkwLDY1Mjk0LDgyMzEsNjUzMDcsNjUzMDYsNjUzMTEsNjUyODEsNjUwNzIsODIzMCw4MjI5LDY1MTA0LDY1MTA1LDY1MTA2LDE4Myw2NTEwOCw2NTEwOSw2NTExMCw2NTExMSw2NTM3Miw4MjExLDY1MDczLDgyMTIsNjUwNzUsOTU4''@;'; put 'put ''OCw2NTA3Niw2NTEwMyw2NTI4OCw2NTI4OSw2NTA3Nyw2NTA3OCw2NTM3MSw2NTM3Myw2NTA3OSw2NTA4MCwxMjMwOCwxMjMwOSw2NTA4MSw2NTA4MiwxMjMwNCwxMjMwNSw2NTA4Myw2NTA4NCwxMjI5OCwxMjI5OSw2NTA4NSw2NTA4NiwxMjI5NiwxMjI5Nyw2NTA4Nyw2NTA4OCwxMjMwMCwx''@;'; put 'put ''MjMwMSw2NTA4OSw2NTA5MCwxMjMwMiwxMjMwMyw2NTA5MSw2NTA5Miw2NTExMyw2NTExNCw2NTExNSw2NTExNiw2NTExNyw2NTExOCw4MjE2LDgyMTcsODIyMCw4MjIxLDEyMzE3LDEyMzE4LDgyNDUsODI0Miw2NTI4Myw2NTI4Niw2NTI5MCw4MjUxLDE2NywxMjI5MSw5Njc1LDk2NzksOTY1''@;'; put 'put ''MSw5NjUwLDk2NzgsOTczNCw5NzMzLDk2NzEsOTY3MCw5NjMzLDk2MzIsOTY2MSw5NjYwLDEyOTYzLDg0NTMsMTc1LDY1NTA3LDY1MzQzLDcxNyw2NTA5Nyw2NTA5OCw2NTEwMSw2NTEwMiw2NTA5OSw2NTEwMCw2NTExOSw2NTEyMCw2NTEyMSw2NTI5MSw2NTI5MywyMTUsMjQ3LDE3Nyw4NzMw''@;'; put 'put ''LDY1MzA4LDY1MzEwLDY1MzA5LDg4MDYsODgwNyw4ODAwLDg3MzQsODc4Niw4ODAxLDY1MTIyLDY1MTIzLDY1MTI0LDY1MTI1LDY1MTI2LDY1Mzc0LDg3NDUsODc0Niw4ODY5LDg3MzYsODczNSw4ODk1LDEzMjY2LDEzMjY1LDg3NDcsODc1MCw4NzU3LDg3NTYsOTc5Miw5Nzk0LDg4NTMsODg1''@;'; put 'put ''Nyw4NTkzLDg1OTUsODU5Miw4NTk0LDg1OTgsODU5OSw4NjAxLDg2MDAsODc0MSw4NzM5LDY1Mjk1LDY1MzQwLDg3MjUsNjUxMjgsNjUyODQsNjU1MDksMTIzMDYsNjU1MDQsNjU1MDUsNjUyODUsNjUzMTIsODQ1MSw4NDU3LDY1MTI5LDY1MTMwLDY1MTMxLDEzMjY5LDEzMjEyLDEzMjEzLDEz''@;'; put 'put ''MjE0LDEzMjYyLDEzMjE3LDEzMTk4LDEzMTk5LDEzMjUyLDE3NiwyMDgyNSwyMDgyNywyMDgzMCwyMDgyOSwyMDgzMywyMDgzNSwyMTk5MSwyOTkyOSwzMTk1MCw5NjAxLDk2MDIsOTYwMyw5NjA0LDk2MDUsOTYwNiw5NjA3LDk2MDgsOTYxNSw5NjE0LDk2MTMsOTYxMiw5NjExLDk2MTAsOTYw''@;'; put 'put ''OSw5NTMyLDk1MjQsOTUxNiw5NTA4LDk1MDAsOTYyMCw5NDcyLDk0NzQsOTYyMSw5NDg0LDk0ODgsOTQ5Miw5NDk2LDk1ODEsOTU4Miw5NTg0LDk1ODMsOTU1Miw5NTY2LDk1NzgsOTU2OSw5Njk4LDk2OTksOTcwMSw5NzAwLDk1ODUsOTU4Niw5NTg3LDY1Mjk2LDY1Mjk3LDY1Mjk4LDY1Mjk5''@;'; put 'put ''LDY1MzAwLDY1MzAxLDY1MzAyLDY1MzAzLDY1MzA0LDY1MzA1LDg1NDQsODU0NSw4NTQ2LDg1NDcsODU0OCw4NTQ5LDg1NTAsODU1MSw4NTUyLDg1NTMsMTIzMjEsMTIzMjIsMTIzMjMsMTIzMjQsMTIzMjUsMTIzMjYsMTIzMjcsMTIzMjgsMTIzMjksMjEzMTMsMjEzMTYsMjEzMTcsNjUzMTMs''@;'; put 'put ''NjUzMTQsNjUzMTUsNjUzMTYsNjUzMTcsNjUzMTgsNjUzMTksNjUzMjAsNjUzMjEsNjUzMjIsNjUzMjMsNjUzMjQsNjUzMjUsNjUzMjYsNjUzMjcsNjUzMjgsNjUzMjksNjUzMzAsNjUzMzEsNjUzMzIsNjUzMzMsNjUzMzQsNjUzMzUsNjUzMzYsNjUzMzcsNjUzMzgsNjUzNDUsNjUzNDYsNjUz''@;'; put 'put ''NDcsNjUzNDgsNjUzNDksNjUzNTAsNjUzNTEsNjUzNTIsNjUzNTMsNjUzNTQsNjUzNTUsNjUzNTYsNjUzNTcsNjUzNTgsNjUzNTksNjUzNjAsNjUzNjEsNjUzNjIsNjUzNjMsNjUzNjQsNjUzNjUsNjUzNjYsNjUzNjcsNjUzNjgsNjUzNjksNjUzNzAsOTEzLDkxNCw5MTUsOTE2LDkxNyw5MTgs''@;'; put 'put ''OTE5LDkyMCw5MjEsOTIyLDkyMyw5MjQsOTI1LDkyNiw5MjcsOTI4LDkyOSw5MzEsOTMyLDkzMyw5MzQsOTM1LDkzNiw5MzcsOTQ1LDk0Niw5NDcsOTQ4LDk0OSw5NTAsOTUxLDk1Miw5NTMsOTU0LDk1NSw5NTYsOTU3LDk1OCw5NTksOTYwLDk2MSw5NjMsOTY0LDk2NSw5NjYsOTY3LDk2OCw5''@;'; put 'put ''NjksMTI1NDksMTI1NTAsMTI1NTEsMTI1NTIsMTI1NTMsMTI1NTQsMTI1NTUsMTI1NTYsMTI1NTcsMTI1NTgsMTI1NTksMTI1NjAsMTI1NjEsMTI1NjIsMTI1NjMsMTI1NjQsMTI1NjUsMTI1NjYsMTI1NjcsMTI1NjgsMTI1NjksMTI1NzAsMTI1NzEsMTI1NzIsMTI1NzMsMTI1NzQsMTI1NzUs''@;'; put 'put ''MTI1NzYsMTI1NzcsMTI1NzgsMTI1NzksMTI1ODAsMTI1ODEsMTI1ODIsMTI1ODMsMTI1ODQsMTI1ODUsNzI5LDcxMyw3MTQsNzExLDcxNSw5MjE2LDkyMTcsOTIxOCw5MjE5LDkyMjAsOTIyMSw5MjIyLDkyMjMsOTIyNCw5MjI1LDkyMjYsOTIyNyw5MjI4LDkyMjksOTIzMCw5MjMxLDkyMzIs''@;'; put 'put ''OTIzMyw5MjM0LDkyMzUsOTIzNiw5MjM3LDkyMzgsOTIzOSw5MjQwLDkyNDEsOTI0Miw5MjQzLDkyNDQsOTI0NSw5MjQ2LDkyNDcsOTI0OSw4MzY0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwxOTk2OCwyMDA1NywxOTk2OSwxOTk3MSwyMDAzNSwyMDA2MSwyMDEwMiwyMDEwOCwyMDE1NCwyMDc5OSwyMDgzNywyMDg0MywyMDk2MCwyMDk5MiwyMDk5MywyMTE0NywyMTI2''@;'; put 'put ''OSwyMTMxMywyMTM0MCwyMTQ0OCwxOTk3NywxOTk3OSwxOTk3NiwxOTk3OCwyMDAxMSwyMDAyNCwyMDk2MSwyMDAzNywyMDA0MCwyMDA2MywyMDA2MiwyMDExMCwyMDEyOSwyMDgwMCwyMDk5NSwyMTI0MiwyMTMxNSwyMTQ0OSwyMTQ3NSwyMjMwMywyMjc2MywyMjgwNSwyMjgyMywyMjg5OSwy''@;'; put 'put ''MzM3NiwyMzM3NywyMzM3OSwyMzU0NCwyMzU2NywyMzU4NiwyMzYwOCwyMzY2NSwyNDAyOSwyNDAzNywyNDA0OSwyNDA1MCwyNDA1MSwyNDA2MiwyNDE3OCwyNDMxOCwyNDMzMSwyNDMzOSwyNTE2NSwxOTk4NSwxOTk4NCwxOTk4MSwyMDAxMywyMDAxNiwyMDAyNSwyMDA0MywyMzYwOSwyMDEw''@;'; put 'put ''NCwyMDExMywyMDExNywyMDExNCwyMDExNiwyMDEzMCwyMDE2MSwyMDE2MCwyMDE2MywyMDE2NiwyMDE2NywyMDE3MywyMDE3MCwyMDE3MSwyMDE2NCwyMDgwMywyMDgwMSwyMDgzOSwyMDg0NSwyMDg0NiwyMDg0NCwyMDg4NywyMDk4MiwyMDk5OCwyMDk5OSwyMWUzLDIxMjQzLDIxMjQ2LDIx''@;'; put 'put ''MjQ3LDIxMjcwLDIxMzA1LDIxMzIwLDIxMzE5LDIxMzE3LDIxMzQyLDIxMzgwLDIxNDUxLDIxNDUwLDIxNDUzLDIyNzY0LDIyODI1LDIyODI3LDIyODI2LDIyODI5LDIzMzgwLDIzNTY5LDIzNTg4LDIzNjEwLDIzNjYzLDI0MDUyLDI0MTg3LDI0MzE5LDI0MzQwLDI0MzQxLDI0NTE1LDI1MDk2''@;'; put 'put ''LDI1MTQyLDI1MTYzLDI1MTY2LDI1OTAzLDI1OTkxLDI2MDA3LDI2MDIwLDI2MDQxLDI2MDg1LDI2MzUyLDI2Mzc2LDI2NDA4LDI3NDI0LDI3NDkwLDI3NTEzLDI3NTk1LDI3NjA0LDI3NjExLDI3NjYzLDI3NzAwLDI4Nzc5LDI5MjI2LDI5MjM4LDI5MjQzLDI5MjU1LDI5MjczLDI5Mjc1LDI5''@;'; put 'put ''MzU2LDI5NTc5LDE5OTkzLDE5OTkwLDE5OTg5LDE5OTg4LDE5OTkyLDIwMDI3LDIwMDQ1LDIwMDQ3LDIwMDQ2LDIwMTk3LDIwMTg0LDIwMTgwLDIwMTgxLDIwMTgyLDIwMTgzLDIwMTk1LDIwMTk2LDIwMTg1LDIwMTkwLDIwODA1LDIwODA0LDIwODczLDIwODc0LDIwOTA4LDIwOTg1LDIwOTg2''@;'; put 'put ''LDIwOTg0LDIxMDAyLDIxMTUyLDIxMTUxLDIxMjUzLDIxMjU0LDIxMjcxLDIxMjc3LDIwMTkxLDIxMzIyLDIxMzIxLDIxMzQ1LDIxMzQ0LDIxMzU5LDIxMzU4LDIxNDM1LDIxNDg3LDIxNDc2LDIxNDkxLDIxNDg0LDIxNDg2LDIxNDgxLDIxNDgwLDIxNTAwLDIxNDk2LDIxNDkzLDIxNDgzLDIx''@;'; put 'put ''NDc4LDIxNDgyLDIxNDkwLDIxNDg5LDIxNDg4LDIxNDc3LDIxNDg1LDIxNDk5LDIyMjM1LDIyMjM0LDIyODA2LDIyODMwLDIyODMzLDIyOTAwLDIyOTAyLDIzMzgxLDIzNDI3LDIzNjEyLDI0MDQwLDI0MDM5LDI0MDM4LDI0MDY2LDI0MDY3LDI0MTc5LDI0MTg4LDI0MzIxLDI0MzQ0LDI0MzQz''@;'; put 'put ''LDI0NTE3LDI1MDk4LDI1MTcxLDI1MTcyLDI1MTcwLDI1MTY5LDI2MDIxLDI2MDg2LDI2NDE0LDI2NDEyLDI2NDEwLDI2NDExLDI2NDEzLDI3NDkxLDI3NTk3LDI3NjY1LDI3NjY0LDI3NzA0LDI3NzEzLDI3NzEyLDI3NzEwLDI5MzU5LDI5NTcyLDI5NTc3LDI5OTE2LDI5OTI2LDI5OTc2LDI5''@;'; put 'put ''OTgzLDI5OTkyLDI5OTkzLDNlNCwzMDAwMSwzMDAwMiwzMDAwMywzMDA5MSwzMDMzMywzMDM4MiwzMDM5OSwzMDQ0NiwzMDY4MywzMDY5MCwzMDcwNywzMTAzNCwzMTE2NiwzMTM0OCwzMTQzNSwxOTk5OCwxOTk5OSwyMDA1MCwyMDA1MSwyMDA3MywyMDEyMSwyMDEzMiwyMDEzNCwyMDEzMywy''@;'; put 'put ''MDIyMywyMDIzMywyMDI0OSwyMDIzNCwyMDI0NSwyMDIzNywyMDI0MCwyMDI0MSwyMDIzOSwyMDIxMCwyMDIxNCwyMDIxOSwyMDIwOCwyMDIxMSwyMDIyMSwyMDIyNSwyMDIzNSwyMDgwOSwyMDgwNywyMDgwNiwyMDgwOCwyMDg0MCwyMDg0OSwyMDg3NywyMDkxMiwyMTAxNSwyMTAwOSwyMTAx''@;'; put 'put ''MCwyMTAwNiwyMTAxNCwyMTE1NSwyMTI1NiwyMTI4MSwyMTI4MCwyMTM2MCwyMTM2MSwyMTUxMywyMTUxOSwyMTUxNiwyMTUxNCwyMTUyMCwyMTUwNSwyMTUxNSwyMTUwOCwyMTUyMSwyMTUxNywyMTUxMiwyMTUwNywyMTUxOCwyMTUxMCwyMTUyMiwyMjI0MCwyMjIzOCwyMjIzNywyMjMyMywy''@;'; put 'put ''MjMyMCwyMjMxMiwyMjMxNywyMjMxNiwyMjMxOSwyMjMxMywyMjgwOSwyMjgxMCwyMjgzOSwyMjg0MCwyMjkxNiwyMjkwNCwyMjkxNSwyMjkwOSwyMjkwNSwyMjkxNCwyMjkxMywyMzM4MywyMzM4NCwyMzQzMSwyMzQzMiwyMzQyOSwyMzQzMywyMzU0NiwyMzU3NCwyMzY3MywyNDAzMCwyNDA3''@;'; put 'put ''MCwyNDE4MiwyNDE4MCwyNDMzNSwyNDM0NywyNDUzNywyNDUzNCwyNTEwMiwyNTEwMCwyNTEwMSwyNTEwNCwyNTE4NywyNTE3OSwyNTE3NiwyNTkxMCwyNjA4OSwyNjA4OCwyNjA5MiwyNjA5MywyNjM1NCwyNjM1NSwyNjM3NywyNjQyOSwyNjQyMCwyNjQxNywyNjQyMSwyNzQyNSwyNzQ5Miwy''@;'; put 'put ''NzUxNSwyNzY3MCwyNzc0MSwyNzczNSwyNzczNywyNzc0MywyNzc0NCwyNzcyOCwyNzczMywyNzc0NSwyNzczOSwyNzcyNSwyNzcyNiwyODc4NCwyOTI3OSwyOTI3NywzMDMzNCwzMTQ4MSwzMTg1OSwzMTk5MiwzMjU2NiwzMjY1MCwzMjcwMSwzMjc2OSwzMjc3MSwzMjc4MCwzMjc4NiwzMjgx''@;'; put 'put ''OSwzMjg5NSwzMjkwNSwzMjkwNywzMjkwOCwzMzI1MSwzMzI1OCwzMzI2NywzMzI3NiwzMzI5MiwzMzMwNywzMzMxMSwzMzM5MCwzMzM5NCwzMzQwNiwzNDQxMSwzNDg4MCwzNDg5MiwzNDkxNSwzNTE5OSwzODQzMywyMDAxOCwyMDEzNiwyMDMwMSwyMDMwMywyMDI5NSwyMDMxMSwyMDMxOCwy''@;'; put 'put ''MDI3NiwyMDMxNSwyMDMwOSwyMDI3MiwyMDMwNCwyMDMwNSwyMDI4NSwyMDI4MiwyMDI4MCwyMDI5MSwyMDMwOCwyMDI4NCwyMDI5NCwyMDMyMywyMDMxNiwyMDMyMCwyMDI3MSwyMDMwMiwyMDI3OCwyMDMxMywyMDMxNywyMDI5NiwyMDMxNCwyMDgxMiwyMDgxMSwyMDgxMywyMDg1MywyMDkx''@;'; put 'put ''OCwyMDkxOSwyMTAyOSwyMTAyOCwyMTAzMywyMTAzNCwyMTAzMiwyMTE2MywyMTE2MSwyMTE2MiwyMTE2NCwyMTI4MywyMTM2MywyMTM2NSwyMTUzMywyMTU0OSwyMTUzNCwyMTU2NiwyMTU0MiwyMTU4MiwyMTU0MywyMTU3NCwyMTU3MSwyMTU1NSwyMTU3NiwyMTU3MCwyMTUzMSwyMTU0NSwy''@;'; put 'put ''MTU3OCwyMTU2MSwyMTU2MywyMTU2MCwyMTU1MCwyMTU1NywyMTU1OCwyMTUzNiwyMTU2NCwyMTU2OCwyMTU1MywyMTU0NywyMTUzNSwyMTU0OCwyMjI1MCwyMjI1NiwyMjI0NCwyMjI1MSwyMjM0NiwyMjM1MywyMjMzNiwyMjM0OSwyMjM0MywyMjM1MCwyMjMzNCwyMjM1MiwyMjM1MSwyMjMz''@;'; put 'put ''MSwyMjc2NywyMjg0NiwyMjk0MSwyMjkzMCwyMjk1MiwyMjk0MiwyMjk0NywyMjkzNywyMjkzNCwyMjkyNSwyMjk0OCwyMjkzMSwyMjkyMiwyMjk0OSwyMzM4OSwyMzM4OCwyMzM4NiwyMzM4NywyMzQzNiwyMzQzNSwyMzQzOSwyMzU5NiwyMzYxNiwyMzYxNywyMzYxNSwyMzYxNCwyMzY5Niwy''@;'; put 'put ''MzY5NywyMzcwMCwyMzY5MiwyNDA0MywyNDA3NiwyNDIwNywyNDE5OSwyNDIwMiwyNDMxMSwyNDMyNCwyNDM1MSwyNDQyMCwyNDQxOCwyNDQzOSwyNDQ0MSwyNDUzNiwyNDUyNCwyNDUzNSwyNDUyNSwyNDU2MSwyNDU1NSwyNDU2OCwyNDU1NCwyNTEwNiwyNTEwNSwyNTIyMCwyNTIzOSwyNTIz''@;'; put 'put ''OCwyNTIxNiwyNTIwNiwyNTIyNSwyNTE5NywyNTIyNiwyNTIxMiwyNTIxNCwyNTIwOSwyNTIwMywyNTIzNCwyNTE5OSwyNTI0MCwyNTE5OCwyNTIzNywyNTIzNSwyNTIzMywyNTIyMiwyNTkxMywyNTkxNSwyNTkxMiwyNjA5NywyNjM1NiwyNjQ2MywyNjQ0NiwyNjQ0NywyNjQ0OCwyNjQ0OSwy''@;'; put 'put ''NjQ2MCwyNjQ1NCwyNjQ2MiwyNjQ0MSwyNjQzOCwyNjQ2NCwyNjQ1MSwyNjQ1NSwyNzQ5MywyNzU5OSwyNzcxNCwyNzc0MiwyNzgwMSwyNzc3NywyNzc4NCwyNzc4NSwyNzc4MSwyNzgwMywyNzc1NCwyNzc3MCwyNzc5MiwyNzc2MCwyNzc4OCwyNzc1MiwyNzc5OCwyNzc5NCwyNzc3MywyNzc3''@;'; put 'put ''OSwyNzc2MiwyNzc3NCwyNzc2NCwyNzc4MiwyNzc2NiwyNzc4OSwyNzc5NiwyNzgwMCwyNzc3OCwyODc5MCwyODc5NiwyODc5NywyODc5MiwyOTI4MiwyOTI4MSwyOTI4MCwyOTM4MCwyOTM3OCwyOTU5MCwyOTk5NiwyOTk5NSwzMDAwNywzMDAwOCwzMDMzOCwzMDQ0NywzMDY5MSwzMTE2OSwz''@;'; put 'put ''MTE2OCwzMTE2NywzMTM1MCwzMTk5NSwzMjU5NywzMjkxOCwzMjkxNSwzMjkyNSwzMjkyMCwzMjkyMywzMjkyMiwzMjk0NiwzMzM5MSwzMzQyNiwzMzQxOSwzMzQyMSwzNTIxMSwzNTI4MiwzNTMyOCwzNTg5NSwzNTkxMCwzNTkyNSwzNTk5NywzNjE5NiwzNjIwOCwzNjI3NSwzNjUyMywzNjU1''@;'; put 'put ''NCwzNjc2MywzNjc4NCwzNjgwMiwzNjgwNiwzNjgwNSwzNjgwNCwyNDAzMywzNzAwOSwzNzAyNiwzNzAzNCwzNzAzMCwzNzAyNywzNzE5MywzNzMxOCwzNzMyNCwzODQ1MCwzODQ0NiwzODQ0OSwzODQ0MiwzODQ0NCwyMDAwNiwyMDA1NCwyMDA4MywyMDEwNywyMDEyMywyMDEyNiwyMDEzOSwy''@;'; put 'put ''MDE0MCwyMDMzNSwyMDM4MSwyMDM2NSwyMDMzOSwyMDM1MSwyMDMzMiwyMDM3OSwyMDM2MywyMDM1OCwyMDM1NSwyMDMzNiwyMDM0MSwyMDM2MCwyMDMyOSwyMDM0NywyMDM3NCwyMDM1MCwyMDM2NywyMDM2OSwyMDM0NiwyMDgyMCwyMDgxOCwyMDgyMSwyMDg0MSwyMDg1NSwyMDg1NCwyMDg1''@;'; put 'put ''NiwyMDkyNSwyMDk4OSwyMTA1MSwyMTA0OCwyMTA0NywyMTA1MCwyMTA0MCwyMTAzOCwyMTA0NiwyMTA1NywyMTE4MiwyMTE3OSwyMTMzMCwyMTMzMiwyMTMzMSwyMTMyOSwyMTM1MCwyMTM2NywyMTM2OCwyMTM2OSwyMTQ2MiwyMTQ2MCwyMTQ2MywyMTYxOSwyMTYyMSwyMTY1NCwyMTYyNCwy''@;'; put 'put ''MTY1MywyMTYzMiwyMTYyNywyMTYyMywyMTYzNiwyMTY1MCwyMTYzOCwyMTYyOCwyMTY0OCwyMTYxNywyMTYyMiwyMTY0NCwyMTY1OCwyMTYwMiwyMTYwOCwyMTY0MywyMTYyOSwyMTY0NiwyMjI2NiwyMjQwMywyMjM5MSwyMjM3OCwyMjM3NywyMjM2OSwyMjM3NCwyMjM3MiwyMjM5NiwyMjgx''@;'; put 'put ''MiwyMjg1NywyMjg1NSwyMjg1NiwyMjg1MiwyMjg2OCwyMjk3NCwyMjk3MSwyMjk5NiwyMjk2OSwyMjk1OCwyMjk5MywyMjk4MiwyMjk5MiwyMjk4OSwyMjk4NywyMjk5NSwyMjk4NiwyMjk1OSwyMjk2MywyMjk5NCwyMjk4MSwyMzM5MSwyMzM5NiwyMzM5NSwyMzQ0NywyMzQ1MCwyMzQ0OCwy''@;'; put 'put ''MzQ1MiwyMzQ0OSwyMzQ1MSwyMzU3OCwyMzYyNCwyMzYyMSwyMzYyMiwyMzczNSwyMzcxMywyMzczNiwyMzcyMSwyMzcyMywyMzcyOSwyMzczMSwyNDA4OCwyNDA5MCwyNDA4NiwyNDA4NSwyNDA5MSwyNDA4MSwyNDE4NCwyNDIxOCwyNDIxNSwyNDIyMCwyNDIxMywyNDIxNCwyNDMxMCwyNDM1''@;'; put 'put ''OCwyNDM1OSwyNDM2MSwyNDQ0OCwyNDQ0OSwyNDQ0NywyNDQ0NCwyNDU0MSwyNDU0NCwyNDU3MywyNDU2NSwyNDU3NSwyNDU5MSwyNDU5NiwyNDYyMywyNDYyOSwyNDU5OCwyNDYxOCwyNDU5NywyNDYwOSwyNDYxNSwyNDYxNywyNDYxOSwyNDYwMywyNTExMCwyNTEwOSwyNTE1MSwyNTE1MCwy''@;'; put 'put ''NTE1MiwyNTIxNSwyNTI4OSwyNTI5MiwyNTI4NCwyNTI3OSwyNTI4MiwyNTI3MywyNTI5OCwyNTMwNywyNTI1OSwyNTI5OSwyNTMwMCwyNTI5MSwyNTI4OCwyNTI1NiwyNTI3NywyNTI3NiwyNTI5NiwyNTMwNSwyNTI4NywyNTI5MywyNTI2OSwyNTMwNiwyNTI2NSwyNTMwNCwyNTMwMiwyNTMw''@;'; put 'put ''MywyNTI4NiwyNTI2MCwyNTI5NCwyNTkxOCwyNjAyMywyNjA0NCwyNjEwNiwyNjEzMiwyNjEzMSwyNjEyNCwyNjExOCwyNjExNCwyNjEyNiwyNjExMiwyNjEyNywyNjEzMywyNjEyMiwyNjExOSwyNjM4MSwyNjM3OSwyNjQ3NywyNjUwNywyNjUxNywyNjQ4MSwyNjUyNCwyNjQ4MywyNjQ4Nywy''@;'; put 'put ''NjUwMywyNjUyNSwyNjUxOSwyNjQ3OSwyNjQ4MCwyNjQ5NSwyNjUwNSwyNjQ5NCwyNjUxMiwyNjQ4NSwyNjUyMiwyNjUxNSwyNjQ5MiwyNjQ3NCwyNjQ4MiwyNzQyNywyNzQ5NCwyNzQ5NSwyNzUxOSwyNzY2NywyNzY3NSwyNzg3NSwyNzg4MCwyNzg5MSwyNzgyNSwyNzg1MiwyNzg3NywyNzgy''@;'; put 'put ''NywyNzgzNywyNzgzOCwyNzgzNiwyNzg3NCwyNzgxOSwyNzg2MSwyNzg1OSwyNzgzMiwyNzg0NCwyNzgzMywyNzg0MSwyNzgyMiwyNzg2MywyNzg0NSwyNzg4OSwyNzgzOSwyNzgzNSwyNzg3MywyNzg2NywyNzg1MCwyNzgyMCwyNzg4NywyNzg2OCwyNzg2MiwyNzg3MiwyODgyMSwyODgxNCwy''@;'; put 'put ''ODgxOCwyODgxMCwyODgyNSwyOTIyOCwyOTIyOSwyOTI0MCwyOTI1NiwyOTI4NywyOTI4OSwyOTM3NiwyOTM5MCwyOTQwMSwyOTM5OSwyOTM5MiwyOTYwOSwyOTYwOCwyOTU5OSwyOTYxMSwyOTYwNSwzMDAxMywzMDEwOSwzMDEwNSwzMDEwNiwzMDM0MCwzMDQwMiwzMDQ1MCwzMDQ1MiwzMDY5''@;'; put 'put ''MywzMDcxNywzMTAzOCwzMTA0MCwzMTA0MSwzMTE3NywzMTE3NiwzMTM1NCwzMTM1MywzMTQ4MiwzMTk5OCwzMjU5NiwzMjY1MiwzMjY1MSwzMjc3MywzMjk1NCwzMjkzMywzMjkzMCwzMjk0NSwzMjkyOSwzMjkzOSwzMjkzNywzMjk0OCwzMjkzOCwzMjk0MywzMzI1MywzMzI3OCwzMzI5Mywz''@;'; put 'put ''MzQ1OSwzMzQzNywzMzQzMywzMzQ1MywzMzQ2OSwzMzQzOSwzMzQ2NSwzMzQ1NywzMzQ1MiwzMzQ0NSwzMzQ1NSwzMzQ2NCwzMzQ0MywzMzQ1NiwzMzQ3MCwzMzQ2MywzNDM4MiwzNDQxNywyMTAyMSwzNDkyMCwzNjU1NSwzNjgxNCwzNjgyMCwzNjgxNywzNzA0NSwzNzA0OCwzNzA0MSwzNzA0''@;'; put 'put ''NiwzNzMxOSwzNzMyOSwzODI2MywzODI3MiwzODQyOCwzODQ2NCwzODQ2MywzODQ1OSwzODQ2OCwzODQ2NiwzODU4NSwzODYzMiwzODczOCwzODc1MCwyMDEyNywyMDE0MSwyMDE0MiwyMDQ0OSwyMDQwNSwyMDM5OSwyMDQxNSwyMDQ0OCwyMDQzMywyMDQzMSwyMDQ0NSwyMDQxOSwyMDQwNiwy''@;'; put 'put ''MDQ0MCwyMDQ0NywyMDQyNiwyMDQzOSwyMDM5OCwyMDQzMiwyMDQyMCwyMDQxOCwyMDQ0MiwyMDQzMCwyMDQ0NiwyMDQwNywyMDgyMywyMDg4MiwyMDg4MSwyMDg5NiwyMTA3MCwyMTA1OSwyMTA2NiwyMTA2OSwyMTA2OCwyMTA2NywyMTA2MywyMTE5MSwyMTE5MywyMTE4NywyMTE4NSwyMTI2''@;'; put 'put ''MSwyMTMzNSwyMTM3MSwyMTQwMiwyMTQ2NywyMTY3NiwyMTY5NiwyMTY3MiwyMTcxMCwyMTcwNSwyMTY4OCwyMTY3MCwyMTY4MywyMTcwMywyMTY5OCwyMTY5MywyMTY3NCwyMTY5NywyMTcwMCwyMTcwNCwyMTY3OSwyMTY3NSwyMTY4MSwyMTY5MSwyMTY3MywyMTY3MSwyMTY5NSwyMjI3MSwy''@;'; put 'put ''MjQwMiwyMjQxMSwyMjQzMiwyMjQzNSwyMjQzNCwyMjQ3OCwyMjQ0NiwyMjQxOSwyMjg2OSwyMjg2NSwyMjg2MywyMjg2MiwyMjg2NCwyMzAwNCwyM2UzLDIzMDM5LDIzMDExLDIzMDE2LDIzMDQzLDIzMDEzLDIzMDE4LDIzMDAyLDIzMDE0LDIzMDQxLDIzMDM1LDIzNDAxLDIzNDU5LDIzNDYy''@;'; put 'put ''LDIzNDYwLDIzNDU4LDIzNDYxLDIzNTUzLDIzNjMwLDIzNjMxLDIzNjI5LDIzNjI3LDIzNzY5LDIzNzYyLDI0MDU1LDI0MDkzLDI0MTAxLDI0MDk1LDI0MTg5LDI0MjI0LDI0MjMwLDI0MzE0LDI0MzI4LDI0MzY1LDI0NDIxLDI0NDU2LDI0NDUzLDI0NDU4LDI0NDU5LDI0NDU1LDI0NDYwLDI0''@;'; put 'put ''NDU3LDI0NTk0LDI0NjA1LDI0NjA4LDI0NjEzLDI0NTkwLDI0NjE2LDI0NjUzLDI0Njg4LDI0NjgwLDI0Njc0LDI0NjQ2LDI0NjQzLDI0Njg0LDI0NjgzLDI0NjgyLDI0Njc2LDI1MTUzLDI1MzA4LDI1MzY2LDI1MzUzLDI1MzQwLDI1MzI1LDI1MzQ1LDI1MzI2LDI1MzQxLDI1MzUxLDI1MzI5''@;'; put 'put ''LDI1MzM1LDI1MzI3LDI1MzI0LDI1MzQyLDI1MzMyLDI1MzYxLDI1MzQ2LDI1OTE5LDI1OTI1LDI2MDI3LDI2MDQ1LDI2MDgyLDI2MTQ5LDI2MTU3LDI2MTQ0LDI2MTUxLDI2MTU5LDI2MTQzLDI2MTUyLDI2MTYxLDI2MTQ4LDI2MzU5LDI2NjIzLDI2NTc5LDI2NjA5LDI2NTgwLDI2NTc2LDI2''@;'; put 'put ''NjA0LDI2NTUwLDI2NTQzLDI2NjEzLDI2NjAxLDI2NjA3LDI2NTY0LDI2NTc3LDI2NTQ4LDI2NTg2LDI2NTk3LDI2NTUyLDI2NTc1LDI2NTkwLDI2NjExLDI2NTQ0LDI2NTg1LDI2NTk0LDI2NTg5LDI2NTc4LDI3NDk4LDI3NTIzLDI3NTI2LDI3NTczLDI3NjAyLDI3NjA3LDI3Njc5LDI3ODQ5''@;'; put 'put ''LDI3OTE1LDI3OTU0LDI3OTQ2LDI3OTY5LDI3OTQxLDI3OTE2LDI3OTUzLDI3OTM0LDI3OTI3LDI3OTYzLDI3OTY1LDI3OTY2LDI3OTU4LDI3OTMxLDI3ODkzLDI3OTYxLDI3OTQzLDI3OTYwLDI3OTQ1LDI3OTUwLDI3OTU3LDI3OTE4LDI3OTQ3LDI4ODQzLDI4ODU4LDI4ODUxLDI4ODQ0LDI4''@;'; put 'put ''ODQ3LDI4ODQ1LDI4ODU2LDI4ODQ2LDI4ODM2LDI5MjMyLDI5Mjk4LDI5Mjk1LDI5MzAwLDI5NDE3LDI5NDA4LDI5NDA5LDI5NjIzLDI5NjQyLDI5NjI3LDI5NjE4LDI5NjQ1LDI5NjMyLDI5NjE5LDI5OTc4LDI5OTk3LDMwMDMxLDMwMDI4LDMwMDMwLDMwMDI3LDMwMTIzLDMwMTE2LDMwMTE3''@;'; put 'put ''LDMwMTE0LDMwMTE1LDMwMzI4LDMwMzQyLDMwMzQzLDMwMzQ0LDMwNDA4LDMwNDA2LDMwNDAzLDMwNDA1LDMwNDY1LDMwNDU3LDMwNDU2LDMwNDczLDMwNDc1LDMwNDYyLDMwNDYwLDMwNDcxLDMwNjg0LDMwNzIyLDMwNzQwLDMwNzMyLDMwNzMzLDMxMDQ2LDMxMDQ5LDMxMDQ4LDMxMDQ3LDMx''@;'; put 'put ''MTYxLDMxMTYyLDMxMTg1LDMxMTg2LDMxMTc5LDMxMzU5LDMxMzYxLDMxNDg3LDMxNDg1LDMxODY5LDMyMDAyLDMyMDA1LDMyZTMsMzIwMDksMzIwMDcsMzIwMDQsMzIwMDYsMzI1NjgsMzI2NTQsMzI3MDMsMzI3NzIsMzI3ODQsMzI3ODEsMzI3ODUsMzI4MjIsMzI5ODIsMzI5OTcsMzI5ODYs''@;'; put 'put ''MzI5NjMsMzI5NjQsMzI5NzIsMzI5OTMsMzI5ODcsMzI5NzQsMzI5OTAsMzI5OTYsMzI5ODksMzMyNjgsMzMzMTQsMzM1MTEsMzM1MzksMzM1NDEsMzM1MDcsMzM0OTksMzM1MTAsMzM1NDAsMzM1MDksMzM1MzgsMzM1NDUsMzM0OTAsMzM0OTUsMzM1MjEsMzM1MzcsMzM1MDAsMzM0OTIsMzM0''@;'; put 'put ''ODksMzM1MDIsMzM0OTEsMzM1MDMsMzM1MTksMzM1NDIsMzQzODQsMzQ0MjUsMzQ0MjcsMzQ0MjYsMzQ4OTMsMzQ5MjMsMzUyMDEsMzUyODQsMzUzMzYsMzUzMzAsMzUzMzEsMzU5OTgsMzZlMywzNjIxMiwzNjIxMSwzNjI3NiwzNjU1NywzNjU1NiwzNjg0OCwzNjgzOCwzNjgzNCwzNjg0Miwz''@;'; put 'put ''NjgzNywzNjg0NSwzNjg0MywzNjgzNiwzNjg0MCwzNzA2NiwzNzA3MCwzNzA1NywzNzA1OSwzNzE5NSwzNzE5NCwzNzMyNSwzODI3NCwzODQ4MCwzODQ3NSwzODQ3NiwzODQ3NywzODc1NCwzODc2MSwzODg1OSwzODg5MywzODg5OSwzODkxMywzOTA4MCwzOTEzMSwzOTEzNSwzOTMxOCwzOTMy''@;'; put 'put ''MSwyMDA1NiwyMDE0NywyMDQ5MiwyMDQ5MywyMDUxNSwyMDQ2MywyMDUxOCwyMDUxNywyMDQ3MiwyMDUyMSwyMDUwMiwyMDQ4NiwyMDU0MCwyMDUxMSwyMDUwNiwyMDQ5OCwyMDQ5NywyMDQ3NCwyMDQ4MCwyMDUwMCwyMDUyMCwyMDQ2NSwyMDUxMywyMDQ5MSwyMDUwNSwyMDUwNCwyMDQ2Nywy''@;'; put 'put ''MDQ2MiwyMDUyNSwyMDUyMiwyMDQ3OCwyMDUyMywyMDQ4OSwyMDg2MCwyMDkwMCwyMDkwMSwyMDg5OCwyMDk0MSwyMDk0MCwyMDkzNCwyMDkzOSwyMTA3OCwyMTA4NCwyMTA3NiwyMTA4MywyMTA4NSwyMTI5MCwyMTM3NSwyMTQwNywyMTQwNSwyMTQ3MSwyMTczNiwyMTc3NiwyMTc2MSwyMTgx''@;'; put 'put ''NSwyMTc1NiwyMTczMywyMTc0NiwyMTc2NiwyMTc1NCwyMTc4MCwyMTczNywyMTc0MSwyMTcyOSwyMTc2OSwyMTc0MiwyMTczOCwyMTczNCwyMTc5OSwyMTc2NywyMTc1NywyMTc3NSwyMjI3NSwyMjI3NiwyMjQ2NiwyMjQ4NCwyMjQ3NSwyMjQ2NywyMjUzNywyMjc5OSwyMjg3MSwyMjg3Miwy''@;'; put 'put ''Mjg3NCwyMzA1NywyMzA2NCwyMzA2OCwyMzA3MSwyMzA2NywyMzA1OSwyMzAyMCwyMzA3MiwyMzA3NSwyMzA4MSwyMzA3NywyMzA1MiwyMzA0OSwyMzQwMywyMzY0MCwyMzQ3MiwyMzQ3NSwyMzQ3OCwyMzQ3NiwyMzQ3MCwyMzQ3NywyMzQ4MSwyMzQ4MCwyMzU1NiwyMzYzMywyMzYzNywyMzYz''@;'; put 'put ''MiwyMzc4OSwyMzgwNSwyMzgwMywyMzc4NiwyMzc4NCwyMzc5MiwyMzc5OCwyMzgwOSwyMzc5NiwyNDA0NiwyNDEwOSwyNDEwNywyNDIzNSwyNDIzNywyNDIzMSwyNDM2OSwyNDQ2NiwyNDQ2NSwyNDQ2NCwyNDY2NSwyNDY3NSwyNDY3NywyNDY1NiwyNDY2MSwyNDY4NSwyNDY4MSwyNDY4Nywy''@;'; put 'put ''NDcwOCwyNDczNSwyNDczMCwyNDcxNywyNDcyNCwyNDcxNiwyNDcwOSwyNDcyNiwyNTE1OSwyNTMzMSwyNTM1MiwyNTM0MywyNTQyMiwyNTQwNiwyNTM5MSwyNTQyOSwyNTQxMCwyNTQxNCwyNTQyMywyNTQxNywyNTQwMiwyNTQyNCwyNTQwNSwyNTM4NiwyNTM4NywyNTM4NCwyNTQyMSwyNTQy''@;'; put 'put ''MCwyNTkyOCwyNTkyOSwyNjAwOSwyNjA0OSwyNjA1MywyNjE3OCwyNjE4NSwyNjE5MSwyNjE3OSwyNjE5NCwyNjE4OCwyNjE4MSwyNjE3NywyNjM2MCwyNjM4OCwyNjM4OSwyNjM5MSwyNjY1NywyNjY4MCwyNjY5NiwyNjY5NCwyNjcwNywyNjY4MSwyNjY5MCwyNjcwOCwyNjY2NSwyNjgwMywy''@;'; put 'put ''NjY0NywyNjcwMCwyNjcwNSwyNjY4NSwyNjYxMiwyNjcwNCwyNjY4OCwyNjY4NCwyNjY5MSwyNjY2NiwyNjY5MywyNjY0MywyNjY0OCwyNjY4OSwyNzUzMCwyNzUyOSwyNzU3NSwyNzY4MywyNzY4NywyNzY4OCwyNzY4NiwyNzY4NCwyNzg4OCwyODAxMCwyODA1MywyODA0MCwyODAzOSwyODAw''@;'; put 'put ''NiwyODAyNCwyODAyMywyNzk5MywyODA1MSwyODAxMiwyODA0MSwyODAxNCwyNzk5NCwyODAyMCwyODAwOSwyODA0NCwyODA0MiwyODAyNSwyODAzNywyODAwNSwyODA1MiwyODg3NCwyODg4OCwyODkwMCwyODg4OSwyODg3MiwyODg3OSwyOTI0MSwyOTMwNSwyOTQzNiwyOTQzMywyOTQzNywy''@;'; put 'put ''OTQzMiwyOTQzMSwyOTU3NCwyOTY3NywyOTcwNSwyOTY3OCwyOTY2NCwyOTY3NCwyOTY2MiwzMDAzNiwzMDA0NSwzMDA0NCwzMDA0MiwzMDA0MSwzMDE0MiwzMDE0OSwzMDE1MSwzMDEzMCwzMDEzMSwzMDE0MSwzMDE0MCwzMDEzNywzMDE0NiwzMDEzNiwzMDM0NywzMDM4NCwzMDQxMCwzMDQx''@;'; put 'put ''MywzMDQxNCwzMDUwNSwzMDQ5NSwzMDQ5NiwzMDUwNCwzMDY5NywzMDc2OCwzMDc1OSwzMDc3NiwzMDc0OSwzMDc3MiwzMDc3NSwzMDc1NywzMDc2NSwzMDc1MiwzMDc1MSwzMDc3MCwzMTA2MSwzMTA1NiwzMTA3MiwzMTA3MSwzMTA2MiwzMTA3MCwzMTA2OSwzMTA2MywzMTA2NiwzMTIwNCwz''@;'; put 'put ''MTIwMywzMTIwNywzMTE5OSwzMTIwNiwzMTIwOSwzMTE5MiwzMTM2NCwzMTM2OCwzMTQ0OSwzMTQ5NCwzMTUwNSwzMTg4MSwzMjAzMywzMjAyMywzMjAxMSwzMjAxMCwzMjAzMiwzMjAzNCwzMjAyMCwzMjAxNiwzMjAyMSwzMjAyNiwzMjAyOCwzMjAxMywzMjAyNSwzMjAyNywzMjU3MCwzMjYw''@;'; put 'put ''NywzMjY2MCwzMjcwOSwzMjcwNSwzMjc3NCwzMjc5MiwzMjc4OSwzMjc5MywzMjc5MSwzMjgyOSwzMjgzMSwzMzAwOSwzMzAyNiwzMzAwOCwzMzAyOSwzMzAwNSwzMzAxMiwzMzAzMCwzMzAxNiwzMzAxMSwzMzAzMiwzMzAyMSwzMzAzNCwzMzAyMCwzMzAwNywzMzI2MSwzMzI2MCwzMzI4MCwz''@;'; put 'put ''MzI5NiwzMzMyMiwzMzMyMywzMzMyMCwzMzMyNCwzMzQ2NywzMzU3OSwzMzYxOCwzMzYyMCwzMzYxMCwzMzU5MiwzMzYxNiwzMzYwOSwzMzU4OSwzMzU4OCwzMzYxNSwzMzU4NiwzMzU5MywzMzU5MCwzMzU1OSwzMzYwMCwzMzU4NSwzMzU3NiwzMzYwMywzNDM4OCwzNDQ0MiwzNDQ3NCwzNDQ1''@;'; put 'put ''MSwzNDQ2OCwzNDQ3MywzNDQ0NCwzNDQ2NywzNDQ2MCwzNDkyOCwzNDkzNSwzNDk0NSwzNDk0NiwzNDk0MSwzNDkzNywzNTM1MiwzNTM0NCwzNTM0MiwzNTM0MCwzNTM0OSwzNTMzOCwzNTM1MSwzNTM0NywzNTM1MCwzNTM0MywzNTM0NSwzNTkxMiwzNTk2MiwzNTk2MSwzNjAwMSwzNjAwMiwz''@;'; put 'put ''NjIxNSwzNjUyNCwzNjU2MiwzNjU2NCwzNjU1OSwzNjc4NSwzNjg2NSwzNjg3MCwzNjg1NSwzNjg2NCwzNjg1OCwzNjg1MiwzNjg2NywzNjg2MSwzNjg2OSwzNjg1NiwzNzAxMywzNzA4OSwzNzA4NSwzNzA5MCwzNzIwMiwzNzE5NywzNzE5NiwzNzMzNiwzNzM0MSwzNzMzNSwzNzM0MCwzNzMz''@;'; put 'put ''NywzODI3NSwzODQ5OCwzODQ5OSwzODQ5NywzODQ5MSwzODQ5MywzODUwMCwzODQ4OCwzODQ5NCwzODU4NywzOTEzOCwzOTM0MCwzOTU5MiwzOTY0MCwzOTcxNywzOTczMCwzOTc0MCwyMDA5NCwyMDYwMiwyMDYwNSwyMDU3MiwyMDU1MSwyMDU0NywyMDU1NiwyMDU3MCwyMDU1MywyMDU4MSwy''@;'; put 'put ''MDU5OCwyMDU1OCwyMDU2NSwyMDU5NywyMDU5NiwyMDU5OSwyMDU1OSwyMDQ5NSwyMDU5MSwyMDU4OSwyMDgyOCwyMDg4NSwyMDk3NiwyMTA5OCwyMTEwMywyMTIwMiwyMTIwOSwyMTIwOCwyMTIwNSwyMTI2NCwyMTI2MywyMTI3MywyMTMxMSwyMTMxMiwyMTMxMCwyMTQ0MywyNjM2NCwyMTgz''@;'; put 'put ''MCwyMTg2NiwyMTg2MiwyMTgyOCwyMTg1NCwyMTg1NywyMTgyNywyMTgzNCwyMTgwOSwyMTg0NiwyMTgzOSwyMTg0NSwyMTgwNywyMTg2MCwyMTgxNiwyMTgwNiwyMTg1MiwyMTgwNCwyMTg1OSwyMTgxMSwyMTgyNSwyMTg0NywyMjI4MCwyMjI4MywyMjI4MSwyMjQ5NSwyMjUzMywyMjUzOCwy''@;'; put 'put ''MjUzNCwyMjQ5NiwyMjUwMCwyMjUyMiwyMjUzMCwyMjU4MSwyMjUxOSwyMjUyMSwyMjgxNiwyMjg4MiwyMzA5NCwyMzEwNSwyMzExMywyMzE0MiwyMzE0NiwyMzEwNCwyMzEwMCwyMzEzOCwyMzEzMCwyMzExMCwyMzExNCwyMzQwOCwyMzQ5NSwyMzQ5MywyMzQ5MiwyMzQ5MCwyMzQ4NywyMzQ5''@;'; put 'put ''NCwyMzU2MSwyMzU2MCwyMzU1OSwyMzY0OCwyMzY0NCwyMzY0NSwyMzgxNSwyMzgxNCwyMzgyMiwyMzgzNSwyMzgzMCwyMzg0MiwyMzgyNSwyMzg0OSwyMzgyOCwyMzgzMywyMzg0NCwyMzg0NywyMzgzMSwyNDAzNCwyNDEyMCwyNDExOCwyNDExNSwyNDExOSwyNDI0NywyNDI0OCwyNDI0Niwy''@;'; put 'put ''NDI0NSwyNDI1NCwyNDM3MywyNDM3NSwyNDQwNywyNDQyOCwyNDQyNSwyNDQyNywyNDQ3MSwyNDQ3MywyNDQ3OCwyNDQ3MiwyNDQ4MSwyNDQ4MCwyNDQ3NiwyNDcwMywyNDczOSwyNDcxMywyNDczNiwyNDc0NCwyNDc3OSwyNDc1NiwyNDgwNiwyNDc2NSwyNDc3MywyNDc2MywyNDc1NywyNDc5''@;'; put 'put ''NiwyNDc2NCwyNDc5MiwyNDc4OSwyNDc3NCwyNDc5OSwyNDc2MCwyNDc5NCwyNDc3NSwyNTExNCwyNTExNSwyNTE2MCwyNTUwNCwyNTUxMSwyNTQ1OCwyNTQ5NCwyNTUwNiwyNTUwOSwyNTQ2MywyNTQ0NywyNTQ5NiwyNTUxNCwyNTQ1NywyNTUxMywyNTQ4MSwyNTQ3NSwyNTQ5OSwyNTQ1MSwy''@;'; put 'put ''NTUxMiwyNTQ3NiwyNTQ4MCwyNTQ5NywyNTUwNSwyNTUxNiwyNTQ5MCwyNTQ4NywyNTQ3MiwyNTQ2NywyNTQ0OSwyNTQ0OCwyNTQ2NiwyNTk0OSwyNTk0MiwyNTkzNywyNTk0NSwyNTk0MywyMTg1NSwyNTkzNSwyNTk0NCwyNTk0MSwyNTk0MCwyNjAxMiwyNjAxMSwyNjAyOCwyNjA2MywyNjA1''@;'; put 'put ''OSwyNjA2MCwyNjA2MiwyNjIwNSwyNjIwMiwyNjIxMiwyNjIxNiwyNjIxNCwyNjIwNiwyNjM2MSwyMTIwNywyNjM5NSwyNjc1MywyNjc5OSwyNjc4NiwyNjc3MSwyNjgwNSwyNjc1MSwyNjc0MiwyNjgwMSwyNjc5MSwyNjc3NSwyNjgwMCwyNjc1NSwyNjgyMCwyNjc5NywyNjc1OCwyNjc1Nywy''@;'; put 'put ''Njc3MiwyNjc4MSwyNjc5MiwyNjc4MywyNjc4NSwyNjc1NCwyNzQ0MiwyNzU3OCwyNzYyNywyNzYyOCwyNzY5MSwyODA0NiwyODA5MiwyODE0NywyODEyMSwyODA4MiwyODEyOSwyODEwOCwyODEzMiwyODE1NSwyODE1NCwyODE2NSwyODEwMywyODEwNywyODA3OSwyODExMywyODA3OCwyODEy''@;'; put 'put ''NiwyODE1MywyODA4OCwyODE1MSwyODE0OSwyODEwMSwyODExNCwyODE4NiwyODA4NSwyODEyMiwyODEzOSwyODEyMCwyODEzOCwyODE0NSwyODE0MiwyODEzNiwyODEwMiwyODEwMCwyODA3NCwyODE0MCwyODA5NSwyODEzNCwyODkyMSwyODkzNywyODkzOCwyODkyNSwyODkxMSwyOTI0NSwy''@;'; put 'put ''OTMwOSwyOTMxMywyOTQ2OCwyOTQ2NywyOTQ2MiwyOTQ1OSwyOTQ2NSwyOTU3NSwyOTcwMSwyOTcwNiwyOTY5OSwyOTcwMiwyOTY5NCwyOTcwOSwyOTkyMCwyOTk0MiwyOTk0MywyOTk4MCwyOTk4NiwzMDA1MywzMDA1NCwzMDA1MCwzMDA2NCwzMDA5NSwzMDE2NCwzMDE2NSwzMDEzMywzMDE1''@;'; put 'put ''NCwzMDE1NywzMDM1MCwzMDQyMCwzMDQxOCwzMDQyNywzMDUxOSwzMDUyNiwzMDUyNCwzMDUxOCwzMDUyMCwzMDUyMiwzMDgyNywzMDc4NywzMDc5OCwzMTA3NywzMTA4MCwzMTA4NSwzMTIyNywzMTM3OCwzMTM4MSwzMTUyMCwzMTUyOCwzMTUxNSwzMTUzMiwzMTUyNiwzMTUxMywzMTUxOCwz''@;'; put 'put ''MTUzNCwzMTg5MCwzMTg5NSwzMTg5MywzMjA3MCwzMjA2NywzMjExMywzMjA0NiwzMjA1NywzMjA2MCwzMjA2NCwzMjA0OCwzMjA1MSwzMjA2OCwzMjA0NywzMjA2NiwzMjA1MCwzMjA0OSwzMjU3MywzMjY3MCwzMjY2NiwzMjcxNiwzMjcxOCwzMjcyMiwzMjc5NiwzMjg0MiwzMjgzOCwzMzA3''@;'; put 'put ''MSwzMzA0NiwzMzA1OSwzMzA2NywzMzA2NSwzMzA3MiwzMzA2MCwzMzI4MiwzMzMzMywzMzMzNSwzMzMzNCwzMzMzNywzMzY3OCwzMzY5NCwzMzY4OCwzMzY1NiwzMzY5OCwzMzY4NiwzMzcyNSwzMzcwNywzMzY4MiwzMzY3NCwzMzY4MywzMzY3MywzMzY5NiwzMzY1NSwzMzY1OSwzMzY2MCwz''@;'; put 'put ''MzY3MCwzMzcwMywzNDM4OSwyNDQyNiwzNDUwMywzNDQ5NiwzNDQ4NiwzNDUwMCwzNDQ4NSwzNDUwMiwzNDUwNywzNDQ4MSwzNDQ3OSwzNDUwNSwzNDg5OSwzNDk3NCwzNDk1MiwzNDk4NywzNDk2MiwzNDk2NiwzNDk1NywzNDk1NSwzNTIxOSwzNTIxNSwzNTM3MCwzNTM1NywzNTM2MywzNTM2''@;'; put 'put ''NSwzNTM3NywzNTM3MywzNTM1OSwzNTM1NSwzNTM2MiwzNTkxMywzNTkzMCwzNjAwOSwzNjAxMiwzNjAxMSwzNjAwOCwzNjAxMCwzNjAwNywzNjE5OSwzNjE5OCwzNjI4NiwzNjI4MiwzNjU3MSwzNjU3NSwzNjg4OSwzNjg3NywzNjg5MCwzNjg4NywzNjg5OSwzNjg5NSwzNjg5MywzNjg4MCwz''@;'; put 'put ''Njg4NSwzNjg5NCwzNjg5NiwzNjg3OSwzNjg5OCwzNjg4NiwzNjg5MSwzNjg4NCwzNzA5NiwzNzEwMSwzNzExNywzNzIwNywzNzMyNiwzNzM2NSwzNzM1MCwzNzM0NywzNzM1MSwzNzM1NywzNzM1MywzODI4MSwzODUwNiwzODUxNywzODUxNSwzODUyMCwzODUxMiwzODUxNiwzODUxOCwzODUx''@;'; put 'put ''OSwzODUwOCwzODU5MiwzODYzNCwzODYzMywzMTQ1NiwzMTQ1NSwzODkxNCwzODkxNSwzOTc3MCw0MDE2NSw0MDU2NSw0MDU3NSw0MDYxMyw0MDYzNSwyMDY0MiwyMDYyMSwyMDYxMywyMDYzMywyMDYyNSwyMDYwOCwyMDYzMCwyMDYzMiwyMDYzNCwyNjM2OCwyMDk3NywyMTEwNiwyMTEwOCwy''@;'; put 'put ''MTEwOSwyMTA5NywyMTIxNCwyMTIxMywyMTIxMSwyMTMzOCwyMTQxMywyMTg4MywyMTg4OCwyMTkyNywyMTg4NCwyMTg5OCwyMTkxNywyMTkxMiwyMTg5MCwyMTkxNiwyMTkzMCwyMTkwOCwyMTg5NSwyMTg5OSwyMTg5MSwyMTkzOSwyMTkzNCwyMTkxOSwyMTgyMiwyMTkzOCwyMTkxNCwyMTk0''@;'; put 'put ''NywyMTkzMiwyMTkzNywyMTg4NiwyMTg5NywyMTkzMSwyMTkxMywyMjI4NSwyMjU3NSwyMjU3MCwyMjU4MCwyMjU2NCwyMjU3NiwyMjU3NywyMjU2MSwyMjU1NywyMjU2MCwyMjc3NywyMjc3OCwyMjg4MCwyMzE1OSwyMzE5NCwyMzE2NywyMzE4NiwyMzE5NSwyMzIwNywyMzQxMSwyMzQwOSwy''@;'; put 'put ''MzUwNiwyMzUwMCwyMzUwNywyMzUwNCwyMzU2MiwyMzU2MywyMzYwMSwyMzg4NCwyMzg4OCwyMzg2MCwyMzg3OSwyNDA2MSwyNDEzMywyNDEyNSwyNDEyOCwyNDEzMSwyNDE5MCwyNDI2NiwyNDI1NywyNDI1OCwyNDI2MCwyNDM4MCwyNDQyOSwyNDQ4OSwyNDQ5MCwyNDQ4OCwyNDc4NSwyNDgw''@;'; put 'put ''MSwyNDc1NCwyNDc1OCwyNDgwMCwyNDg2MCwyNDg2NywyNDgyNiwyNDg1MywyNDgxNiwyNDgyNywyNDgyMCwyNDkzNiwyNDgxNywyNDg0NiwyNDgyMiwyNDg0MSwyNDgzMiwyNDg1MCwyNTExOSwyNTE2MSwyNTUwNywyNTQ4NCwyNTU1MSwyNTUzNiwyNTU3NywyNTU0NSwyNTU0MiwyNTU0OSwy''@;'; put 'put ''NTU1NCwyNTU3MSwyNTU1MiwyNTU2OSwyNTU1OCwyNTU4MSwyNTU4MiwyNTQ2MiwyNTU4OCwyNTU3OCwyNTU2MywyNTY4MiwyNTU2MiwyNTU5MywyNTk1MCwyNTk1OCwyNTk1NCwyNTk1NSwyNjAwMSwyNmUzLDI2MDMxLDI2MjIyLDI2MjI0LDI2MjI4LDI2MjMwLDI2MjIzLDI2MjU3LDI2MjM0''@;'; put 'put ''LDI2MjM4LDI2MjMxLDI2MzY2LDI2MzY3LDI2Mzk5LDI2Mzk3LDI2ODc0LDI2ODM3LDI2ODQ4LDI2ODQwLDI2ODM5LDI2ODg1LDI2ODQ3LDI2ODY5LDI2ODYyLDI2ODU1LDI2ODczLDI2ODM0LDI2ODY2LDI2ODUxLDI2ODI3LDI2ODI5LDI2ODkzLDI2ODk4LDI2ODk0LDI2ODI1LDI2ODQyLDI2''@;'; put 'put ''OTkwLDI2ODc1LDI3NDU0LDI3NDUwLDI3NDUzLDI3NTQ0LDI3NTQyLDI3NTgwLDI3NjMxLDI3Njk0LDI3Njk1LDI3NjkyLDI4MjA3LDI4MjE2LDI4MjQ0LDI4MTkzLDI4MjEwLDI4MjYzLDI4MjM0LDI4MTkyLDI4MTk3LDI4MTk1LDI4MTg3LDI4MjUxLDI4MjQ4LDI4MTk2LDI4MjQ2LDI4Mjcw''@;'; put 'put ''LDI4MjA1LDI4MTk4LDI4MjcxLDI4MjEyLDI4MjM3LDI4MjE4LDI4MjA0LDI4MjI3LDI4MTg5LDI4MjIyLDI4MzYzLDI4Mjk3LDI4MTg1LDI4MjM4LDI4MjU5LDI4MjI4LDI4Mjc0LDI4MjY1LDI4MjU1LDI4OTUzLDI4OTU0LDI4OTY2LDI4OTc2LDI4OTYxLDI4OTgyLDI5MDM4LDI4OTU2LDI5''@;'; put 'put ''MjYwLDI5MzE2LDI5MzEyLDI5NDk0LDI5NDc3LDI5NDkyLDI5NDgxLDI5NzU0LDI5NzM4LDI5NzQ3LDI5NzMwLDI5NzMzLDI5NzQ5LDI5NzUwLDI5NzQ4LDI5NzQzLDI5NzIzLDI5NzM0LDI5NzM2LDI5OTg5LDI5OTkwLDMwMDU5LDMwMDU4LDMwMTc4LDMwMTcxLDMwMTc5LDMwMTY5LDMwMTY4''@;'; put 'put ''LDMwMTc0LDMwMTc2LDMwMzMxLDMwMzMyLDMwMzU4LDMwMzU1LDMwMzg4LDMwNDI4LDMwNTQzLDMwNzAxLDMwODEzLDMwODI4LDMwODMxLDMxMjQ1LDMxMjQwLDMxMjQzLDMxMjM3LDMxMjMyLDMxMzg0LDMxMzgzLDMxMzgyLDMxNDYxLDMxNDU5LDMxNTYxLDMxNTc0LDMxNTU4LDMxNTY4LDMx''@;'; put 'put ''NTcwLDMxNTcyLDMxNTY1LDMxNTYzLDMxNTY3LDMxNTY5LDMxOTAzLDMxOTA5LDMyMDk0LDMyMDgwLDMyMTA0LDMyMDg1LDMyMDQzLDMyMTEwLDMyMTE0LDMyMDk3LDMyMTAyLDMyMDk4LDMyMTEyLDMyMTE1LDIxODkyLDMyNzI0LDMyNzI1LDMyNzc5LDMyODUwLDMyOTAxLDMzMTA5LDMzMTA4''@;'; put 'put ''LDMzMDk5LDMzMTA1LDMzMTAyLDMzMDgxLDMzMDk0LDMzMDg2LDMzMTAwLDMzMTA3LDMzMTQwLDMzMjk4LDMzMzA4LDMzNzY5LDMzNzk1LDMzNzg0LDMzODA1LDMzNzYwLDMzNzMzLDMzODAzLDMzNzI5LDMzNzc1LDMzNzc3LDMzNzgwLDMzODc5LDMzODAyLDMzNzc2LDMzODA0LDMzNzQwLDMz''@;'; put 'put ''Nzg5LDMzNzc4LDMzNzM4LDMzODQ4LDMzODA2LDMzNzk2LDMzNzU2LDMzNzk5LDMzNzQ4LDMzNzU5LDM0Mzk1LDM0NTI3LDM0NTIxLDM0NTQxLDM0NTE2LDM0NTIzLDM0NTMyLDM0NTEyLDM0NTI2LDM0OTAzLDM1MDA5LDM1MDEwLDM0OTkzLDM1MjAzLDM1MjIyLDM1Mzg3LDM1NDI0LDM1NDEz''@;'; put 'put ''LDM1NDIyLDM1Mzg4LDM1MzkzLDM1NDEyLDM1NDE5LDM1NDA4LDM1Mzk4LDM1MzgwLDM1Mzg2LDM1MzgyLDM1NDE0LDM1OTM3LDM1OTcwLDM2MDE1LDM2MDI4LDM2MDE5LDM2MDI5LDM2MDMzLDM2MDI3LDM2MDMyLDM2MDIwLDM2MDIzLDM2MDIyLDM2MDMxLDM2MDI0LDM2MjM0LDM2MjI5LDM2''@;'; put 'put ''MjI1LDM2MzAyLDM2MzE3LDM2Mjk5LDM2MzE0LDM2MzA1LDM2MzAwLDM2MzE1LDM2Mjk0LDM2NjAzLDM2NjAwLDM2NjA0LDM2NzY0LDM2OTEwLDM2OTE3LDM2OTEzLDM2OTIwLDM2OTE0LDM2OTE4LDM3MTIyLDM3MTA5LDM3MTI5LDM3MTE4LDM3MjE5LDM3MjIxLDM3MzI3LDM3Mzk2LDM3Mzk3''@;'; put 'put ''LDM3NDExLDM3Mzg1LDM3NDA2LDM3Mzg5LDM3MzkyLDM3MzgzLDM3MzkzLDM4MjkyLDM4Mjg3LDM4MjgzLDM4Mjg5LDM4MjkxLDM4MjkwLDM4Mjg2LDM4NTM4LDM4NTQyLDM4NTM5LDM4NTI1LDM4NTMzLDM4NTM0LDM4NTQxLDM4NTE0LDM4NTMyLDM4NTkzLDM4NTk3LDM4NTk2LDM4NTk4LDM4''@;'; put 'put ''NTk5LDM4NjM5LDM4NjQyLDM4ODYwLDM4OTE3LDM4OTE4LDM4OTIwLDM5MTQzLDM5MTQ2LDM5MTUxLDM5MTQ1LDM5MTU0LDM5MTQ5LDM5MzQyLDM5MzQxLDQwNjQzLDQwNjUzLDQwNjU3LDIwMDk4LDIwNjUzLDIwNjYxLDIwNjU4LDIwNjU5LDIwNjc3LDIwNjcwLDIwNjUyLDIwNjYzLDIwNjY3''@;'; put 'put ''LDIwNjU1LDIwNjc5LDIxMTE5LDIxMTExLDIxMTE3LDIxMjE1LDIxMjIyLDIxMjIwLDIxMjE4LDIxMjE5LDIxMjk1LDIxOTgzLDIxOTkyLDIxOTcxLDIxOTkwLDIxOTY2LDIxOTgwLDIxOTU5LDIxOTY5LDIxOTg3LDIxOTg4LDIxOTk5LDIxOTc4LDIxOTg1LDIxOTU3LDIxOTU4LDIxOTg5LDIx''@;'; put 'put ''OTYxLDIyMjkwLDIyMjkxLDIyNjIyLDIyNjA5LDIyNjE2LDIyNjE1LDIyNjE4LDIyNjEyLDIyNjM1LDIyNjA0LDIyNjM3LDIyNjAyLDIyNjI2LDIyNjEwLDIyNjAzLDIyODg3LDIzMjMzLDIzMjQxLDIzMjQ0LDIzMjMwLDIzMjI5LDIzMjI4LDIzMjE5LDIzMjM0LDIzMjE4LDIzOTEzLDIzOTE5''@;'; put 'put ''LDI0MTQwLDI0MTg1LDI0MjY1LDI0MjY0LDI0MzM4LDI0NDA5LDI0NDkyLDI0NDk0LDI0ODU4LDI0ODQ3LDI0OTA0LDI0ODYzLDI0ODE5LDI0ODU5LDI0ODI1LDI0ODMzLDI0ODQwLDI0OTEwLDI0OTA4LDI0OTAwLDI0OTA5LDI0ODk0LDI0ODg0LDI0ODcxLDI0ODQ1LDI0ODM4LDI0ODg3LDI1''@;'; put 'put ''MTIxLDI1MTIyLDI1NjE5LDI1NjYyLDI1NjMwLDI1NjQyLDI1NjQ1LDI1NjYxLDI1NjQ0LDI1NjE1LDI1NjI4LDI1NjIwLDI1NjEzLDI1NjU0LDI1NjIyLDI1NjIzLDI1NjA2LDI1OTY0LDI2MDE1LDI2MDMyLDI2MjYzLDI2MjQ5LDI2MjQ3LDI2MjQ4LDI2MjYyLDI2MjQ0LDI2MjY0LDI2MjUz''@;'; put 'put ''LDI2MzcxLDI3MDI4LDI2OTg5LDI2OTcwLDI2OTk5LDI2OTc2LDI2OTY0LDI2OTk3LDI2OTI4LDI3MDEwLDI2OTU0LDI2OTg0LDI2OTg3LDI2OTc0LDI2OTYzLDI3MDAxLDI3MDE0LDI2OTczLDI2OTc5LDI2OTcxLDI3NDYzLDI3NTA2LDI3NTg0LDI3NTgzLDI3NjAzLDI3NjQ1LDI4MzIyLDI4''@;'; put 'put ''MzM1LDI4MzcxLDI4MzQyLDI4MzU0LDI4MzA0LDI4MzE3LDI4MzU5LDI4MzU3LDI4MzI1LDI4MzEyLDI4MzQ4LDI4MzQ2LDI4MzMxLDI4MzY5LDI4MzEwLDI4MzE2LDI4MzU2LDI4MzcyLDI4MzMwLDI4MzI3LDI4MzQwLDI5MDA2LDI5MDE3LDI5MDMzLDI5MDI4LDI5MDAxLDI5MDMxLDI5MDIw''@;'; put 'put ''LDI5MDM2LDI5MDMwLDI5MDA0LDI5MDI5LDI5MDIyLDI4OTk4LDI5MDMyLDI5MDE0LDI5MjQyLDI5MjY2LDI5NDk1LDI5NTA5LDI5NTAzLDI5NTAyLDI5ODA3LDI5Nzg2LDI5NzgxLDI5NzkxLDI5NzkwLDI5NzYxLDI5NzU5LDI5Nzg1LDI5Nzg3LDI5Nzg4LDMwMDcwLDMwMDcyLDMwMjA4LDMw''@;'; put 'put ''MTkyLDMwMjA5LDMwMTk0LDMwMTkzLDMwMjAyLDMwMjA3LDMwMTk2LDMwMTk1LDMwNDMwLDMwNDMxLDMwNTU1LDMwNTcxLDMwNTY2LDMwNTU4LDMwNTYzLDMwNTg1LDMwNTcwLDMwNTcyLDMwNTU2LDMwNTY1LDMwNTY4LDMwNTYyLDMwNzAyLDMwODYyLDMwODk2LDMwODcxLDMwODcyLDMwODYw''@;'; put 'put ''LDMwODU3LDMwODQ0LDMwODY1LDMwODY3LDMwODQ3LDMxMDk4LDMxMTAzLDMxMTA1LDMzODM2LDMxMTY1LDMxMjYwLDMxMjU4LDMxMjY0LDMxMjUyLDMxMjYzLDMxMjYyLDMxMzkxLDMxMzkyLDMxNjA3LDMxNjgwLDMxNTg0LDMxNTk4LDMxNTkxLDMxOTIxLDMxOTIzLDMxOTI1LDMyMTQ3LDMy''@;'; put 'put ''MTIxLDMyMTQ1LDMyMTI5LDMyMTQzLDMyMDkxLDMyNjIyLDMyNjE3LDMyNjE4LDMyNjI2LDMyNjgxLDMyNjgwLDMyNjc2LDMyODU0LDMyODU2LDMyOTAyLDMyOTAwLDMzMTM3LDMzMTM2LDMzMTQ0LDMzMTI1LDMzMTM0LDMzMTM5LDMzMTMxLDMzMTQ1LDMzMTQ2LDMzMTI2LDMzMjg1LDMzMzUx''@;'; put 'put ''LDMzOTIyLDMzOTExLDMzODUzLDMzODQxLDMzOTA5LDMzODk0LDMzODk5LDMzODY1LDMzOTAwLDMzODgzLDMzODUyLDMzODQ1LDMzODg5LDMzODkxLDMzODk3LDMzOTAxLDMzODYyLDM0Mzk4LDM0Mzk2LDM0Mzk5LDM0NTUzLDM0NTc5LDM0NTY4LDM0NTY3LDM0NTYwLDM0NTU4LDM0NTU1LDM0''@;'; put 'put ''NTYyLDM0NTYzLDM0NTY2LDM0NTcwLDM0OTA1LDM1MDM5LDM1MDI4LDM1MDMzLDM1MDM2LDM1MDMyLDM1MDM3LDM1MDQxLDM1MDE4LDM1MDI5LDM1MDI2LDM1MjI4LDM1Mjk5LDM1NDM1LDM1NDQyLDM1NDQzLDM1NDMwLDM1NDMzLDM1NDQwLDM1NDYzLDM1NDUyLDM1NDI3LDM1NDg4LDM1NDQx''@;'; put 'put ''LDM1NDYxLDM1NDM3LDM1NDI2LDM1NDM4LDM1NDM2LDM1NDQ5LDM1NDUxLDM1MzkwLDM1NDMyLDM1OTM4LDM1OTc4LDM1OTc3LDM2MDQyLDM2MDM5LDM2MDQwLDM2MDM2LDM2MDE4LDM2MDM1LDM2MDM0LDM2MDM3LDM2MzIxLDM2MzE5LDM2MzI4LDM2MzM1LDM2MzM5LDM2MzQ2LDM2MzMwLDM2''@;'; put 'put ''MzI0LDM2MzI2LDM2NTMwLDM2NjExLDM2NjE3LDM2NjA2LDM2NjE4LDM2NzY3LDM2Nzg2LDM2OTM5LDM2OTM4LDM2OTQ3LDM2OTMwLDM2OTQ4LDM2OTI0LDM2OTQ5LDM2OTQ0LDM2OTM1LDM2OTQzLDM2OTQyLDM2OTQxLDM2OTQ1LDM2OTI2LDM2OTI5LDM3MTM4LDM3MTQzLDM3MjI4LDM3MjI2''@;'; put 'put ''LDM3MjI1LDM3MzIxLDM3NDMxLDM3NDYzLDM3NDMyLDM3NDM3LDM3NDQwLDM3NDM4LDM3NDY3LDM3NDUxLDM3NDc2LDM3NDU3LDM3NDI4LDM3NDQ5LDM3NDUzLDM3NDQ1LDM3NDMzLDM3NDM5LDM3NDY2LDM4Mjk2LDM4NTUyLDM4NTQ4LDM4NTQ5LDM4NjA1LDM4NjAzLDM4NjAxLDM4NjAyLDM4''@;'; put 'put ''NjQ3LDM4NjUxLDM4NjQ5LDM4NjQ2LDM4NzQyLDM4NzcyLDM4Nzc0LDM4OTI4LDM4OTI5LDM4OTMxLDM4OTIyLDM4OTMwLDM4OTI0LDM5MTY0LDM5MTU2LDM5MTY1LDM5MTY2LDM5MzQ3LDM5MzQ1LDM5MzQ4LDM5NjQ5LDQwMTY5LDQwNTc4LDQwNzE4LDQwNzIzLDQwNzM2LDIwNzExLDIwNzE4''@;'; put 'put ''LDIwNzA5LDIwNjk0LDIwNzE3LDIwNjk4LDIwNjkzLDIwNjg3LDIwNjg5LDIwNzIxLDIwNjg2LDIwNzEzLDIwODM0LDIwOTc5LDIxMTIzLDIxMTIyLDIxMjk3LDIxNDIxLDIyMDE0LDIyMDE2LDIyMDQzLDIyMDM5LDIyMDEzLDIyMDM2LDIyMDIyLDIyMDI1LDIyMDI5LDIyMDMwLDIyMDA3LDIy''@;'; put 'put ''MDM4LDIyMDQ3LDIyMDI0LDIyMDMyLDIyMDA2LDIyMjk2LDIyMjk0LDIyNjQ1LDIyNjU0LDIyNjU5LDIyNjc1LDIyNjY2LDIyNjQ5LDIyNjYxLDIyNjUzLDIyNzgxLDIyODIxLDIyODE4LDIyODIwLDIyODkwLDIyODg5LDIzMjY1LDIzMjcwLDIzMjczLDIzMjU1LDIzMjU0LDIzMjU2LDIzMjY3''@;'; put 'put ''LDIzNDEzLDIzNTE4LDIzNTI3LDIzNTIxLDIzNTI1LDIzNTI2LDIzNTI4LDIzNTIyLDIzNTI0LDIzNTE5LDIzNTY1LDIzNjUwLDIzOTQwLDIzOTQzLDI0MTU1LDI0MTYzLDI0MTQ5LDI0MTUxLDI0MTQ4LDI0Mjc1LDI0Mjc4LDI0MzMwLDI0MzkwLDI0NDMyLDI0NTA1LDI0OTAzLDI0ODk1LDI0''@;'; put 'put ''OTA3LDI0OTUxLDI0OTMwLDI0OTMxLDI0OTI3LDI0OTIyLDI0OTIwLDI0OTQ5LDI1MTMwLDI1NzM1LDI1Njg4LDI1Njg0LDI1NzY0LDI1NzIwLDI1Njk1LDI1NzIyLDI1NjgxLDI1NzAzLDI1NjUyLDI1NzA5LDI1NzIzLDI1OTcwLDI2MDE3LDI2MDcxLDI2MDcwLDI2Mjc0LDI2MjgwLDI2MjY5''@;'; put 'put ''LDI3MDM2LDI3MDQ4LDI3MDI5LDI3MDczLDI3MDU0LDI3MDkxLDI3MDgzLDI3MDM1LDI3MDYzLDI3MDY3LDI3MDUxLDI3MDYwLDI3MDg4LDI3MDg1LDI3MDUzLDI3MDg0LDI3MDQ2LDI3MDc1LDI3MDQzLDI3NDY1LDI3NDY4LDI3Njk5LDI4NDY3LDI4NDM2LDI4NDE0LDI4NDM1LDI4NDA0LDI4''@;'; put 'put ''NDU3LDI4NDc4LDI4NDQ4LDI4NDYwLDI4NDMxLDI4NDE4LDI4NDUwLDI4NDE1LDI4Mzk5LDI4NDIyLDI4NDY1LDI4NDcyLDI4NDY2LDI4NDUxLDI4NDM3LDI4NDU5LDI4NDYzLDI4NTUyLDI4NDU4LDI4Mzk2LDI4NDE3LDI4NDAyLDI4MzY0LDI4NDA3LDI5MDc2LDI5MDgxLDI5MDUzLDI5MDY2''@;'; put 'put ''LDI5MDYwLDI5MDc0LDI5MjQ2LDI5MzMwLDI5MzM0LDI5NTA4LDI5NTIwLDI5Nzk2LDI5Nzk1LDI5ODAyLDI5ODA4LDI5ODA1LDI5OTU2LDMwMDk3LDMwMjQ3LDMwMjIxLDMwMjE5LDMwMjE3LDMwMjI3LDMwNDMzLDMwNDM1LDMwNTk2LDMwNTg5LDMwNTkxLDMwNTYxLDMwOTEzLDMwODc5LDMw''@;'; put 'put ''ODg3LDMwODk5LDMwODg5LDMwODgzLDMxMTE4LDMxMTE5LDMxMTE3LDMxMjc4LDMxMjgxLDMxNDAyLDMxNDAxLDMxNDY5LDMxNDcxLDMxNjQ5LDMxNjM3LDMxNjI3LDMxNjA1LDMxNjM5LDMxNjQ1LDMxNjM2LDMxNjMxLDMxNjcyLDMxNjIzLDMxNjIwLDMxOTI5LDMxOTMzLDMxOTM0LDMyMTg3''@;'; put 'put ''LDMyMTc2LDMyMTU2LDMyMTg5LDMyMTkwLDMyMTYwLDMyMjAyLDMyMTgwLDMyMTc4LDMyMTc3LDMyMTg2LDMyMTYyLDMyMTkxLDMyMTgxLDMyMTg0LDMyMTczLDMyMjEwLDMyMTk5LDMyMTcyLDMyNjI0LDMyNzM2LDMyNzM3LDMyNzM1LDMyODYyLDMyODU4LDMyOTAzLDMzMTA0LDMzMTUyLDMz''@;'; put 'put ''MTY3LDMzMTYwLDMzMTYyLDMzMTUxLDMzMTU0LDMzMjU1LDMzMjc0LDMzMjg3LDMzMzAwLDMzMzEwLDMzMzU1LDMzOTkzLDMzOTgzLDMzOTkwLDMzOTg4LDMzOTQ1LDMzOTUwLDMzOTcwLDMzOTQ4LDMzOTk1LDMzOTc2LDMzOTg0LDM0MDAzLDMzOTM2LDMzOTgwLDM0MDAxLDMzOTk0LDM0NjIz''@;'; put 'put ''LDM0NTg4LDM0NjE5LDM0NTk0LDM0NTk3LDM0NjEyLDM0NTg0LDM0NjQ1LDM0NjE1LDM0NjAxLDM1MDU5LDM1MDc0LDM1MDYwLDM1MDY1LDM1MDY0LDM1MDY5LDM1MDQ4LDM1MDk4LDM1MDU1LDM1NDk0LDM1NDY4LDM1NDg2LDM1NDkxLDM1NDY5LDM1NDg5LDM1NDc1LDM1NDkyLDM1NDk4LDM1''@;'; put 'put ''NDkzLDM1NDk2LDM1NDgwLDM1NDczLDM1NDgyLDM1NDk1LDM1OTQ2LDM1OTgxLDM1OTgwLDM2MDUxLDM2MDQ5LDM2MDUwLDM2MjAzLDM2MjQ5LDM2MjQ1LDM2MzQ4LDM2NjI4LDM2NjI2LDM2NjI5LDM2NjI3LDM2NzcxLDM2OTYwLDM2OTUyLDM2OTU2LDM2OTYzLDM2OTUzLDM2OTU4LDM2OTYy''@;'; put 'put ''LDM2OTU3LDM2OTU1LDM3MTQ1LDM3MTQ0LDM3MTUwLDM3MjM3LDM3MjQwLDM3MjM5LDM3MjM2LDM3NDk2LDM3NTA0LDM3NTA5LDM3NTI4LDM3NTI2LDM3NDk5LDM3NTIzLDM3NTMyLDM3NTQ0LDM3NTAwLDM3NTIxLDM4MzA1LDM4MzEyLDM4MzEzLDM4MzA3LDM4MzA5LDM4MzA4LDM4NTUzLDM4''@;'; put 'put ''NTU2LDM4NTU1LDM4NjA0LDM4NjEwLDM4NjU2LDM4NzgwLDM4Nzg5LDM4OTAyLDM4OTM1LDM4OTM2LDM5MDg3LDM5MDg5LDM5MTcxLDM5MTczLDM5MTgwLDM5MTc3LDM5MzYxLDM5NTk5LDM5NjAwLDM5NjU0LDM5NzQ1LDM5NzQ2LDQwMTgwLDQwMTgyLDQwMTc5LDQwNjM2LDQwNzYzLDQwNzc4''@;'; put 'put ''LDIwNzQwLDIwNzM2LDIwNzMxLDIwNzI1LDIwNzI5LDIwNzM4LDIwNzQ0LDIwNzQ1LDIwNzQxLDIwOTU2LDIxMTI3LDIxMTI4LDIxMTI5LDIxMTMzLDIxMTMwLDIxMjMyLDIxNDI2LDIyMDYyLDIyMDc1LDIyMDczLDIyMDY2LDIyMDc5LDIyMDY4LDIyMDU3LDIyMDk5LDIyMDk0LDIyMTAzLDIy''@;'; put 'put ''MTMyLDIyMDcwLDIyMDYzLDIyMDY0LDIyNjU2LDIyNjg3LDIyNjg2LDIyNzA3LDIyNjg0LDIyNzAyLDIyNjk3LDIyNjk0LDIyODkzLDIzMzA1LDIzMjkxLDIzMzA3LDIzMjg1LDIzMzA4LDIzMzA0LDIzNTM0LDIzNTMyLDIzNTI5LDIzNTMxLDIzNjUyLDIzNjUzLDIzOTY1LDIzOTU2LDI0MTYy''@;'; put 'put ''LDI0MTU5LDI0MTYxLDI0MjkwLDI0MjgyLDI0Mjg3LDI0Mjg1LDI0MjkxLDI0Mjg4LDI0MzkyLDI0NDMzLDI0NTAzLDI0NTAxLDI0OTUwLDI0OTM1LDI0OTQyLDI0OTI1LDI0OTE3LDI0OTYyLDI0OTU2LDI0OTQ0LDI0OTM5LDI0OTU4LDI0OTk5LDI0OTc2LDI1MDAzLDI0OTc0LDI1MDA0LDI0''@;'; put 'put ''OTg2LDI0OTk2LDI0OTgwLDI1MDA2LDI1MTM0LDI1NzA1LDI1NzExLDI1NzIxLDI1NzU4LDI1Nzc4LDI1NzM2LDI1NzQ0LDI1Nzc2LDI1NzY1LDI1NzQ3LDI1NzQ5LDI1NzY5LDI1NzQ2LDI1Nzc0LDI1NzczLDI1NzcxLDI1NzU0LDI1NzcyLDI1NzUzLDI1NzYyLDI1Nzc5LDI1OTczLDI1OTc1''@;'; put 'put ''LDI1OTc2LDI2Mjg2LDI2MjgzLDI2MjkyLDI2Mjg5LDI3MTcxLDI3MTY3LDI3MTEyLDI3MTM3LDI3MTY2LDI3MTYxLDI3MTMzLDI3MTY5LDI3MTU1LDI3MTQ2LDI3MTIzLDI3MTM4LDI3MTQxLDI3MTE3LDI3MTUzLDI3NDcyLDI3NDcwLDI3NTU2LDI3NTg5LDI3NTkwLDI4NDc5LDI4NTQwLDI4''@;'; put 'put ''NTQ4LDI4NDk3LDI4NTE4LDI4NTAwLDI4NTUwLDI4NTI1LDI4NTA3LDI4NTM2LDI4NTI2LDI4NTU4LDI4NTM4LDI4NTI4LDI4NTE2LDI4NTY3LDI4NTA0LDI4MzczLDI4NTI3LDI4NTEyLDI4NTExLDI5MDg3LDI5MTAwLDI5MTA1LDI5MDk2LDI5MjcwLDI5MzM5LDI5NTE4LDI5NTI3LDI5ODAx''@;'; put 'put ''LDI5ODM1LDI5ODI3LDI5ODIyLDI5ODI0LDMwMDc5LDMwMjQwLDMwMjQ5LDMwMjM5LDMwMjQ0LDMwMjQ2LDMwMjQxLDMwMjQyLDMwMzYyLDMwMzk0LDMwNDM2LDMwNjA2LDMwNTk5LDMwNjA0LDMwNjA5LDMwNjAzLDMwOTIzLDMwOTE3LDMwOTA2LDMwOTIyLDMwOTEwLDMwOTMzLDMwOTA4LDMw''@;'; put 'put ''OTI4LDMxMjk1LDMxMjkyLDMxMjk2LDMxMjkzLDMxMjg3LDMxMjkxLDMxNDA3LDMxNDA2LDMxNjYxLDMxNjY1LDMxNjg0LDMxNjY4LDMxNjg2LDMxNjg3LDMxNjgxLDMxNjQ4LDMxNjkyLDMxOTQ2LDMyMjI0LDMyMjQ0LDMyMjM5LDMyMjUxLDMyMjE2LDMyMjM2LDMyMjIxLDMyMjMyLDMyMjI3''@;'; put 'put ''LDMyMjE4LDMyMjIyLDMyMjMzLDMyMTU4LDMyMjE3LDMyMjQyLDMyMjQ5LDMyNjI5LDMyNjMxLDMyNjg3LDMyNzQ1LDMyODA2LDMzMTc5LDMzMTgwLDMzMTgxLDMzMTg0LDMzMTc4LDMzMTc2LDM0MDcxLDM0MTA5LDM0MDc0LDM0MDMwLDM0MDkyLDM0MDkzLDM0MDY3LDM0MDY1LDM0MDgzLDM0''@;'; put 'put ''MDgxLDM0MDY4LDM0MDI4LDM0MDg1LDM0MDQ3LDM0MDU0LDM0NjkwLDM0Njc2LDM0Njc4LDM0NjU2LDM0NjYyLDM0NjgwLDM0NjY0LDM0NjQ5LDM0NjQ3LDM0NjM2LDM0NjQzLDM0OTA3LDM0OTA5LDM1MDg4LDM1MDc5LDM1MDkwLDM1MDkxLDM1MDkzLDM1MDgyLDM1NTE2LDM1NTM4LDM1NTI3''@;'; put 'put ''LDM1NTI0LDM1NDc3LDM1NTMxLDM1NTc2LDM1NTA2LDM1NTI5LDM1NTIyLDM1NTE5LDM1NTA0LDM1NTQyLDM1NTMzLDM1NTEwLDM1NTEzLDM1NTQ3LDM1OTE2LDM1OTE4LDM1OTQ4LDM2MDY0LDM2MDYyLDM2MDcwLDM2MDY4LDM2MDc2LDM2MDc3LDM2MDY2LDM2MDY3LDM2MDYwLDM2MDc0LDM2''@;'; put 'put ''MDY1LDM2MjA1LDM2MjU1LDM2MjU5LDM2Mzk1LDM2MzY4LDM2MzgxLDM2Mzg2LDM2MzY3LDM2MzkzLDM2MzgzLDM2Mzg1LDM2MzgyLDM2NTM4LDM2NjM3LDM2NjM1LDM2NjM5LDM2NjQ5LDM2NjQ2LDM2NjUwLDM2NjM2LDM2NjM4LDM2NjQ1LDM2OTY5LDM2OTc0LDM2OTY4LDM2OTczLDM2OTgz''@;'; put 'put ''LDM3MTY4LDM3MTY1LDM3MTU5LDM3MTY5LDM3MjU1LDM3MjU3LDM3MjU5LDM3MjUxLDM3NTczLDM3NTYzLDM3NTU5LDM3NjEwLDM3NTQ4LDM3NjA0LDM3NTY5LDM3NTU1LDM3NTY0LDM3NTg2LDM3NTc1LDM3NjE2LDM3NTU0LDM4MzE3LDM4MzIxLDM4NjYwLDM4NjYyLDM4NjYzLDM4NjY1LDM4''@;'; put 'put ''NzUyLDM4Nzk3LDM4Nzk1LDM4Nzk5LDM4OTQ1LDM4OTU1LDM4OTQwLDM5MDkxLDM5MTc4LDM5MTg3LDM5MTg2LDM5MTkyLDM5Mzg5LDM5Mzc2LDM5MzkxLDM5Mzg3LDM5Mzc3LDM5MzgxLDM5Mzc4LDM5Mzg1LDM5NjA3LDM5NjYyLDM5NjYzLDM5NzE5LDM5NzQ5LDM5NzQ4LDM5Nzk5LDM5Nzkx''@;'; put 'put ''LDQwMTk4LDQwMjAxLDQwMTk1LDQwNjE3LDQwNjM4LDQwNjU0LDIyNjk2LDQwNzg2LDIwNzU0LDIwNzYwLDIwNzU2LDIwNzUyLDIwNzU3LDIwODY0LDIwOTA2LDIwOTU3LDIxMTM3LDIxMTM5LDIxMjM1LDIyMTA1LDIyMTIzLDIyMTM3LDIyMTIxLDIyMTE2LDIyMTM2LDIyMTIyLDIyMTIwLDIy''@;'; put 'put ''MTE3LDIyMTI5LDIyMTI3LDIyMTI0LDIyMTE0LDIyMTM0LDIyNzIxLDIyNzE4LDIyNzI3LDIyNzI1LDIyODk0LDIzMzI1LDIzMzQ4LDIzNDE2LDIzNTM2LDIzNTY2LDI0Mzk0LDI1MDEwLDI0OTc3LDI1MDAxLDI0OTcwLDI1MDM3LDI1MDE0LDI1MDIyLDI1MDM0LDI1MDMyLDI1MTM2LDI1Nzk3''@;'; put 'put ''LDI1NzkzLDI1ODAzLDI1Nzg3LDI1Nzg4LDI1ODE4LDI1Nzk2LDI1Nzk5LDI1Nzk0LDI1ODA1LDI1NzkxLDI1ODEwLDI1ODEyLDI1NzkwLDI1OTcyLDI2MzEwLDI2MzEzLDI2Mjk3LDI2MzA4LDI2MzExLDI2Mjk2LDI3MTk3LDI3MTkyLDI3MTk0LDI3MjI1LDI3MjQzLDI3MjI0LDI3MTkzLDI3''@;'; put 'put ''MjA0LDI3MjM0LDI3MjMzLDI3MjExLDI3MjA3LDI3MTg5LDI3MjMxLDI3MjA4LDI3NDgxLDI3NTExLDI3NjUzLDI4NjEwLDI4NTkzLDI4NTc3LDI4NjExLDI4NTgwLDI4NjA5LDI4NTgzLDI4NTk1LDI4NjA4LDI4NjAxLDI4NTk4LDI4NTgyLDI4NTc2LDI4NTk2LDI5MTE4LDI5MTI5LDI5MTM2''@;'; put 'put ''LDI5MTM4LDI5MTI4LDI5MTQxLDI5MTEzLDI5MTM0LDI5MTQ1LDI5MTQ4LDI5MTIzLDI5MTI0LDI5NTQ0LDI5ODUyLDI5ODU5LDI5ODQ4LDI5ODU1LDI5ODU0LDI5OTIyLDI5OTY0LDI5OTY1LDMwMjYwLDMwMjY0LDMwMjY2LDMwNDM5LDMwNDM3LDMwNjI0LDMwNjIyLDMwNjIzLDMwNjI5LDMw''@;'; put 'put ''OTUyLDMwOTM4LDMwOTU2LDMwOTUxLDMxMTQyLDMxMzA5LDMxMzEwLDMxMzAyLDMxMzA4LDMxMzA3LDMxNDE4LDMxNzA1LDMxNzYxLDMxNjg5LDMxNzE2LDMxNzA3LDMxNzEzLDMxNzIxLDMxNzE4LDMxOTU3LDMxOTU4LDMyMjY2LDMyMjczLDMyMjY0LDMyMjgzLDMyMjkxLDMyMjg2LDMyMjg1''@;'; put 'put ''LDMyMjY1LDMyMjcyLDMyNjMzLDMyNjkwLDMyNzUyLDMyNzUzLDMyNzUwLDMyODA4LDMzMjAzLDMzMTkzLDMzMTkyLDMzMjc1LDMzMjg4LDMzMzY4LDMzMzY5LDM0MTIyLDM0MTM3LDM0MTIwLDM0MTUyLDM0MTUzLDM0MTE1LDM0MTIxLDM0MTU3LDM0MTU0LDM0MTQyLDM0NjkxLDM0NzE5LDM0''@;'; put 'put ''NzE4LDM0NzIyLDM0NzAxLDM0OTEzLDM1MTE0LDM1MTIyLDM1MTA5LDM1MTE1LDM1MTA1LDM1MjQyLDM1MjM4LDM1NTU4LDM1NTc4LDM1NTYzLDM1NTY5LDM1NTg0LDM1NTQ4LDM1NTU5LDM1NTY2LDM1NTgyLDM1NTg1LDM1NTg2LDM1NTc1LDM1NTY1LDM1NTcxLDM1NTc0LDM1NTgwLDM1OTQ3''@;'; put 'put ''LDM1OTQ5LDM1OTg3LDM2MDg0LDM2NDIwLDM2NDAxLDM2NDA0LDM2NDE4LDM2NDA5LDM2NDA1LDM2NjY3LDM2NjU1LDM2NjY0LDM2NjU5LDM2Nzc2LDM2Nzc0LDM2OTgxLDM2OTgwLDM2OTg0LDM2OTc4LDM2OTg4LDM2OTg2LDM3MTcyLDM3MjY2LDM3NjY0LDM3Njg2LDM3NjI0LDM3NjgzLDM3''@;'; put 'put ''Njc5LDM3NjY2LDM3NjI4LDM3Njc1LDM3NjM2LDM3NjU4LDM3NjQ4LDM3NjcwLDM3NjY1LDM3NjUzLDM3Njc4LDM3NjU3LDM4MzMxLDM4NTY3LDM4NTY4LDM4NTcwLDM4NjEzLDM4NjcwLDM4NjczLDM4Njc4LDM4NjY5LDM4Njc1LDM4NjcxLDM4NzQ3LDM4NzQ4LDM4NzU4LDM4ODA4LDM4OTYw''@;'; put 'put ''LDM4OTY4LDM4OTcxLDM4OTY3LDM4OTU3LDM4OTY5LDM4OTQ4LDM5MTg0LDM5MjA4LDM5MTk4LDM5MTk1LDM5MjAxLDM5MTk0LDM5NDA1LDM5Mzk0LDM5NDA5LDM5NjA4LDM5NjEyLDM5Njc1LDM5NjYxLDM5NzIwLDM5ODI1LDQwMjEzLDQwMjI3LDQwMjMwLDQwMjMyLDQwMjEwLDQwMjE5LDQw''@;'; put 'put ''NjY0LDQwNjYwLDQwODQ1LDQwODYwLDIwNzc4LDIwNzY3LDIwNzY5LDIwNzg2LDIxMjM3LDIyMTU4LDIyMTQ0LDIyMTYwLDIyMTQ5LDIyMTUxLDIyMTU5LDIyNzQxLDIyNzM5LDIyNzM3LDIyNzM0LDIzMzQ0LDIzMzM4LDIzMzMyLDIzNDE4LDIzNjA3LDIzNjU2LDIzOTk2LDIzOTk0LDIzOTk3''@;'; put 'put ''LDIzOTkyLDI0MTcxLDI0Mzk2LDI0NTA5LDI1MDMzLDI1MDI2LDI1MDMxLDI1MDYyLDI1MDM1LDI1MTM4LDI1MTQwLDI1ODA2LDI1ODAyLDI1ODE2LDI1ODI0LDI1ODQwLDI1ODMwLDI1ODM2LDI1ODQxLDI1ODI2LDI1ODM3LDI1OTg2LDI1OTg3LDI2MzI5LDI2MzI2LDI3MjY0LDI3Mjg0LDI3''@;'; put 'put ''MjY4LDI3Mjk4LDI3MjkyLDI3MzU1LDI3Mjk5LDI3MjYyLDI3Mjg3LDI3MjgwLDI3Mjk2LDI3NDg0LDI3NTY2LDI3NjEwLDI3NjU2LDI4NjMyLDI4NjU3LDI4NjM5LDI4NjQwLDI4NjM1LDI4NjQ0LDI4NjUxLDI4NjU1LDI4NTQ0LDI4NjUyLDI4NjQxLDI4NjQ5LDI4NjI5LDI4NjU0LDI4NjU2''@;'; put 'put ''LDI5MTU5LDI5MTUxLDI5MTY2LDI5MTU4LDI5MTU3LDI5MTY1LDI5MTY0LDI5MTcyLDI5MTUyLDI5MjM3LDI5MjU0LDI5NTUyLDI5NTU0LDI5ODY1LDI5ODcyLDI5ODYyLDI5ODY0LDMwMjc4LDMwMjc0LDMwMjg0LDMwNDQyLDMwNjQzLDMwNjM0LDMwNjQwLDMwNjM2LDMwNjMxLDMwNjM3LDMw''@;'; put 'put ''NzAzLDMwOTY3LDMwOTcwLDMwOTY0LDMwOTU5LDMwOTc3LDMxMTQzLDMxMTQ2LDMxMzE5LDMxNDIzLDMxNzUxLDMxNzU3LDMxNzQyLDMxNzM1LDMxNzU2LDMxNzEyLDMxOTY4LDMxOTY0LDMxOTY2LDMxOTcwLDMxOTY3LDMxOTYxLDMxOTY1LDMyMzAyLDMyMzE4LDMyMzI2LDMyMzExLDMyMzA2''@;'; put 'put ''LDMyMzIzLDMyMjk5LDMyMzE3LDMyMzA1LDMyMzI1LDMyMzIxLDMyMzA4LDMyMzEzLDMyMzI4LDMyMzA5LDMyMzE5LDMyMzAzLDMyNTgwLDMyNzU1LDMyNzY0LDMyODgxLDMyODgyLDMyODgwLDMyODc5LDMyODgzLDMzMjIyLDMzMjE5LDMzMjEwLDMzMjE4LDMzMjE2LDMzMjE1LDMzMjEzLDMz''@;'; put 'put ''MjI1LDMzMjE0LDMzMjU2LDMzMjg5LDMzMzkzLDM0MjE4LDM0MTgwLDM0MTc0LDM0MjA0LDM0MTkzLDM0MTk2LDM0MjIzLDM0MjAzLDM0MTgzLDM0MjE2LDM0MTg2LDM0NDA3LDM0NzUyLDM0NzY5LDM0NzM5LDM0NzcwLDM0NzU4LDM0NzMxLDM0NzQ3LDM0NzQ2LDM0NzYwLDM0NzYzLDM1MTMx''@;'; put 'put ''LDM1MTI2LDM1MTQwLDM1MTI4LDM1MTMzLDM1MjQ0LDM1NTk4LDM1NjA3LDM1NjA5LDM1NjExLDM1NTk0LDM1NjE2LDM1NjEzLDM1NTg4LDM1NjAwLDM1OTA1LDM1OTAzLDM1OTU1LDM2MDkwLDM2MDkzLDM2MDkyLDM2MDg4LDM2MDkxLDM2MjY0LDM2NDI1LDM2NDI3LDM2NDI0LDM2NDI2LDM2''@;'; put 'put ''Njc2LDM2NjcwLDM2Njc0LDM2Njc3LDM2NjcxLDM2OTkxLDM2OTg5LDM2OTk2LDM2OTkzLDM2OTk0LDM2OTkyLDM3MTc3LDM3MjgzLDM3Mjc4LDM3Mjc2LDM3NzA5LDM3NzYyLDM3NjcyLDM3NzQ5LDM3NzA2LDM3NzMzLDM3NzA3LDM3NjU2LDM3NzU4LDM3NzQwLDM3NzIzLDM3NzQ0LDM3NzIy''@;'; put 'put ''LDM3NzE2LDM4MzQ2LDM4MzQ3LDM4MzQ4LDM4MzQ0LDM4MzQyLDM4NTc3LDM4NTg0LDM4NjE0LDM4Njg0LDM4Njg2LDM4ODE2LDM4ODY3LDM4OTgyLDM5MDk0LDM5MjIxLDM5NDI1LDM5NDIzLDM5ODU0LDM5ODUxLDM5ODUwLDM5ODUzLDQwMjUxLDQwMjU1LDQwNTg3LDQwNjU1LDQwNjcwLDQw''@;'; put 'put ''NjY4LDQwNjY5LDQwNjY3LDQwNzY2LDQwNzc5LDIxNDc0LDIyMTY1LDIyMTkwLDIyNzQ1LDIyNzQ0LDIzMzUyLDI0NDEzLDI1MDU5LDI1MTM5LDI1ODQ0LDI1ODQyLDI1ODU0LDI1ODYyLDI1ODUwLDI1ODUxLDI1ODQ3LDI2MDM5LDI2MzMyLDI2NDA2LDI3MzE1LDI3MzA4LDI3MzMxLDI3MzIz''@;'; put 'put ''LDI3MzIwLDI3MzMwLDI3MzEwLDI3MzExLDI3NDg3LDI3NTEyLDI3NTY3LDI4NjgxLDI4NjgzLDI4NjcwLDI4Njc4LDI4NjY2LDI4Njg5LDI4Njg3LDI5MTc5LDI5MTgwLDI5MTgyLDI5MTc2LDI5NTU5LDI5NTU3LDI5ODYzLDI5ODg3LDI5OTczLDMwMjk0LDMwMjk2LDMwMjkwLDMwNjUzLDMw''@;'; put 'put ''NjU1LDMwNjUxLDMwNjUyLDMwOTkwLDMxMTUwLDMxMzI5LDMxMzMwLDMxMzI4LDMxNDI4LDMxNDI5LDMxNzg3LDMxNzgzLDMxNzg2LDMxNzc0LDMxNzc5LDMxNzc3LDMxOTc1LDMyMzQwLDMyMzQxLDMyMzUwLDMyMzQ2LDMyMzUzLDMyMzM4LDMyMzQ1LDMyNTg0LDMyNzYxLDMyNzYzLDMyODg3''@;'; put 'put ''LDMyODg2LDMzMjI5LDMzMjMxLDMzMjkwLDM0MjU1LDM0MjE3LDM0MjUzLDM0MjU2LDM0MjQ5LDM0MjI0LDM0MjM0LDM0MjMzLDM0MjE0LDM0Nzk5LDM0Nzk2LDM0ODAyLDM0Nzg0LDM1MjA2LDM1MjUwLDM1MzE2LDM1NjI0LDM1NjQxLDM1NjI4LDM1NjI3LDM1OTIwLDM2MTAxLDM2NDQxLDM2''@;'; put 'put ''NDUxLDM2NDU0LDM2NDUyLDM2NDQ3LDM2NDM3LDM2NTQ0LDM2NjgxLDM2Njg1LDM2OTk5LDM2OTk1LDM3ZTMsMzcyOTEsMzcyOTIsMzczMjgsMzc3ODAsMzc3NzAsMzc3ODIsMzc3OTQsMzc4MTEsMzc4MDYsMzc4MDQsMzc4MDgsMzc3ODQsMzc3ODYsMzc3ODMsMzgzNTYsMzgzNTgsMzgzNTIs''@;'; put 'put ''MzgzNTcsMzg2MjYsMzg2MjAsMzg2MTcsMzg2MTksMzg2MjIsMzg2OTIsMzg4MTksMzg4MjIsMzg4MjksMzg5MDUsMzg5ODksMzg5OTEsMzg5ODgsMzg5OTAsMzg5OTUsMzkwOTgsMzkyMzAsMzkyMzEsMzkyMjksMzkyMTQsMzkzMzMsMzk0MzgsMzk2MTcsMzk2ODMsMzk2ODYsMzk3NTksMzk3''@;'; put 'put ''NTgsMzk3NTcsMzk4ODIsMzk4ODEsMzk5MzMsMzk4ODAsMzk4NzIsNDAyNzMsNDAyODUsNDAyODgsNDA2NzIsNDA3MjUsNDA3NDgsMjA3ODcsMjIxODEsMjI3NTAsMjI3NTEsMjI3NTQsMjM1NDEsNDA4NDgsMjQzMDAsMjUwNzQsMjUwNzksMjUwNzgsMjUwNzcsMjU4NTYsMjU4NzEsMjYzMzYs''@;'; put 'put ''MjYzMzMsMjczNjUsMjczNTcsMjczNTQsMjczNDcsMjg2OTksMjg3MDMsMjg3MTIsMjg2OTgsMjg3MDEsMjg2OTMsMjg2OTYsMjkxOTAsMjkxOTcsMjkyNzIsMjkzNDYsMjk1NjAsMjk1NjIsMjk4ODUsMjk4OTgsMjk5MjMsMzAwODcsMzAwODYsMzAzMDMsMzAzMDUsMzA2NjMsMzEwMDEsMzEx''@;'; put 'put ''NTMsMzEzMzksMzEzMzcsMzE4MDYsMzE4MDcsMzE4MDAsMzE4MDUsMzE3OTksMzE4MDgsMzIzNjMsMzIzNjUsMzIzNzcsMzIzNjEsMzIzNjIsMzI2NDUsMzIzNzEsMzI2OTQsMzI2OTcsMzI2OTYsMzMyNDAsMzQyODEsMzQyNjksMzQyODIsMzQyNjEsMzQyNzYsMzQyNzcsMzQyOTUsMzQ4MTEs''@;'; put 'put ''MzQ4MjEsMzQ4MjksMzQ4MDksMzQ4MTQsMzUxNjgsMzUxNjcsMzUxNTgsMzUxNjYsMzU2NDksMzU2NzYsMzU2NzIsMzU2NTcsMzU2NzQsMzU2NjIsMzU2NjMsMzU2NTQsMzU2NzMsMzYxMDQsMzYxMDYsMzY0NzYsMzY0NjYsMzY0ODcsMzY0NzAsMzY0NjAsMzY0NzQsMzY0NjgsMzY2OTIsMzY2''@;'; put 'put ''ODYsMzY3ODEsMzcwMDIsMzcwMDMsMzcyOTcsMzcyOTQsMzc4NTcsMzc4NDEsMzc4NTUsMzc4MjcsMzc4MzIsMzc4NTIsMzc4NTMsMzc4NDYsMzc4NTgsMzc4MzcsMzc4NDgsMzc4NjAsMzc4NDcsMzc4NjQsMzgzNjQsMzg1ODAsMzg2MjcsMzg2OTgsMzg2OTUsMzg3NTMsMzg4NzYsMzg5MDcs''@;'; put 'put ''MzkwMDYsMzllMywzOTAwMywzOTEwMCwzOTIzNywzOTI0MSwzOTQ0NiwzOTQ0OSwzOTY5MywzOTkxMiwzOTkxMSwzOTg5NCwzOTg5OSw0MDMyOSw0MDI4OSw0MDMwNiw0MDI5OCw0MDMwMCw0MDU5NCw0MDU5OSw0MDU5NSw0MDYyOCwyMTI0MCwyMjE4NCwyMjE5OSwyMjE5OCwyMjE5NiwyMjIw''@;'; put 'put ''NCwyMjc1NiwyMzM2MCwyMzM2MywyMzQyMSwyMzU0MiwyNDAwOSwyNTA4MCwyNTA4MiwyNTg4MCwyNTg3NiwyNTg4MSwyNjM0MiwyNjQwNywyNzM3MiwyODczNCwyODcyMCwyODcyMiwyOTIwMCwyOTU2MywyOTkwMywzMDMwNiwzMDMwOSwzMTAxNCwzMTAxOCwzMTAyMCwzMTAxOSwzMTQzMSwz''@;'; put 'put ''MTQ3OCwzMTgyMCwzMTgxMSwzMTgyMSwzMTk4MywzMTk4NCwzNjc4MiwzMjM4MSwzMjM4MCwzMjM4NiwzMjU4OCwzMjc2OCwzMzI0MiwzMzM4MiwzNDI5OSwzNDI5NywzNDMyMSwzNDI5OCwzNDMxMCwzNDMxNSwzNDMxMSwzNDMxNCwzNDgzNiwzNDgzNywzNTE3MiwzNTI1OCwzNTMyMCwzNTY5''@;'; put 'put ''NiwzNTY5MiwzNTY4NiwzNTY5NSwzNTY3OSwzNTY5MSwzNjExMSwzNjEwOSwzNjQ4OSwzNjQ4MSwzNjQ4NSwzNjQ4MiwzNzMwMCwzNzMyMywzNzkxMiwzNzg5MSwzNzg4NSwzODM2OSwzODcwNCwzOTEwOCwzOTI1MCwzOTI0OSwzOTMzNiwzOTQ2NywzOTQ3MiwzOTQ3OSwzOTQ3NywzOTk1NSwz''@;'; put 'put ''OTk0OSw0MDU2OSw0MDYyOSw0MDY4MCw0MDc1MSw0MDc5OSw0MDgwMyw0MDgwMSwyMDc5MSwyMDc5MiwyMjIwOSwyMjIwOCwyMjIxMCwyMjgwNCwyMzY2MCwyNDAxMywyNTA4NCwyNTA4NiwyNTg4NSwyNTg4NCwyNjAwNSwyNjM0NSwyNzM4NywyNzM5NiwyNzM4NiwyNzU3MCwyODc0OCwyOTIx''@;'; put 'put ''MSwyOTM1MSwyOTkxMCwyOTkwOCwzMDMxMywzMDY3NSwzMTgyNCwzMjM5OSwzMjM5NiwzMjcwMCwzNDMyNywzNDM0OSwzNDMzMCwzNDg1MSwzNDg1MCwzNDg0OSwzNDg0NywzNTE3OCwzNTE4MCwzNTI2MSwzNTcwMCwzNTcwMywzNTcwOSwzNjExNSwzNjQ5MCwzNjQ5MywzNjQ5MSwzNjcwMywz''@;'; put 'put ''Njc4MywzNzMwNiwzNzkzNCwzNzkzOSwzNzk0MSwzNzk0NiwzNzk0NCwzNzkzOCwzNzkzMSwzODM3MCwzODcxMiwzODcxMywzODcwNiwzODkxMSwzOTAxNSwzOTAxMywzOTI1NSwzOTQ5MywzOTQ5MSwzOTQ4OCwzOTQ4NiwzOTYzMSwzOTc2NCwzOTc2MSwzOTk4MSwzOTk3Myw0MDM2Nyw0MDM3''@;'; put 'put ''Miw0MDM4Niw0MDM3Niw0MDYwNSw0MDY4Nyw0MDcyOSw0MDc5Niw0MDgwNiw0MDgwNywyMDc5NiwyMDc5NSwyMjIxNiwyMjIxOCwyMjIxNywyMzQyMywyNDAyMCwyNDAxOCwyNDM5OCwyNTA4NywyNTg5MiwyNzQwMiwyNzQ4OSwyODc1MywyODc2MCwyOTU2OCwyOTkyNCwzMDA5MCwzMDMxOCwz''@;'; put 'put ''MDMxNiwzMTE1NSwzMTg0MCwzMTgzOSwzMjg5NCwzMjg5MywzMzI0NywzNTE4NiwzNTE4MywzNTMyNCwzNTcxMiwzNjExOCwzNjExOSwzNjQ5NywzNjQ5OSwzNjcwNSwzNzE5MiwzNzk1NiwzNzk2OSwzNzk3MCwzODcxNywzODcxOCwzODg1MSwzODg0OSwzOTAxOSwzOTI1MywzOTUwOSwzOTUw''@;'; put 'put ''MSwzOTYzNCwzOTcwNiw0MDAwOSwzOTk4NSwzOTk5OCwzOTk5NSw0MDQwMyw0MDQwNyw0MDc1Niw0MDgxMiw0MDgxMCw0MDg1MiwyMjIyMCwyNDAyMiwyNTA4OCwyNTg5MSwyNTg5OSwyNTg5OCwyNjM0OCwyNzQwOCwyOTkxNCwzMTQzNCwzMTg0NCwzMTg0MywzMTg0NSwzMjQwMywzMjQwNiwz''@;'; put 'put ''MjQwNCwzMzI1MCwzNDM2MCwzNDM2NywzNDg2NSwzNTcyMiwzNzAwOCwzNzAwNywzNzk4NywzNzk4NCwzNzk4OCwzODc2MCwzOTAyMywzOTI2MCwzOTUxNCwzOTUxNSwzOTUxMSwzOTYzNSwzOTYzNiwzOTYzMyw0MDAyMCw0MDAyMyw0MDAyMiw0MDQyMSw0MDYwNyw0MDY5MiwyMjIyNSwyMjc2''@;'; put 'put ''MSwyNTkwMCwyODc2NiwzMDMyMSwzMDMyMiwzMDY3OSwzMjU5MiwzMjY0OCwzNDg3MCwzNDg3MywzNDkxNCwzNTczMSwzNTczMCwzNTczNCwzMzM5OSwzNjEyMywzNzMxMiwzNzk5NCwzODcyMiwzODcyOCwzODcyNCwzODg1NCwzOTAyNCwzOTUxOSwzOTcxNCwzOTc2OCw0MDAzMSw0MDQ0MSw0''@;'; put 'put ''MDQ0Miw0MDU3Miw0MDU3Myw0MDcxMSw0MDgyMyw0MDgxOCwyNDMwNywyNzQxNCwyODc3MSwzMTg1MiwzMTg1NCwzNDg3NSwzNTI2NCwzNjUxMywzNzMxMywzODAwMiwzOGUzLDM5MDI1LDM5MjYyLDM5NjM4LDM5NzE1LDQwNjUyLDI4NzcyLDMwNjgyLDM1NzM4LDM4MDA3LDM4ODU3LDM5NTIy''@;'; put 'put ''LDM5NTI1LDMyNDEyLDM1NzQwLDM2NTIyLDM3MzE3LDM4MDEzLDM4MDE0LDM4MDEyLDQwMDU1LDQwMDU2LDQwNjk1LDM1OTI0LDM4MDE1LDQwNDc0LDI5MjI0LDM5NTMwLDM5NzI5LDQwNDc1LDQwNDc4LDMxODU4LDkzMTIsOTMxMyw5MzE0LDkzMTUsOTMxNiw5MzE3LDkzMTgsOTMxOSw5MzIw''@;'; put 'put ''LDkzMjEsOTMzMiw5MzMzLDkzMzQsOTMzNSw5MzM2LDkzMzcsOTMzOCw5MzM5LDkzNDAsOTM0MSw4NTYwLDg1NjEsODU2Miw4NTYzLDg1NjQsODU2NSw4NTY2LDg1NjcsODU2OCw4NTY5LDIwMDIyLDIwMDMxLDIwMTAxLDIwMTI4LDIwODY2LDIwODg2LDIwOTA3LDIxMjQxLDIxMzA0LDIxMzUz''@;'; put 'put ''LDIxNDMwLDIyNzk0LDIzNDI0LDI0MDI3LDEyMDgzLDI0MTkxLDI0MzA4LDI0NDAwLDI0NDE3LDI1OTA4LDI2MDgwLDMwMDk4LDMwMzI2LDM2Nzg5LDM4NTgyLDE2OCw3MTAsMTI1NDEsMTI1NDIsMTI0NDUsMTI0NDYsMTIyOTEsMjAxODksMTIyOTMsMTIyOTQsMTIyOTUsMTI1NDAsNjUzMzks''@;'; put 'put ''NjUzNDEsMTAwNDUsMTIzNTMsMTIzNTQsMTIzNTUsMTIzNTYsMTIzNTcsMTIzNTgsMTIzNTksMTIzNjAsMTIzNjEsMTIzNjIsMTIzNjMsMTIzNjQsMTIzNjUsMTIzNjYsMTIzNjcsMTIzNjgsMTIzNjksMTIzNzAsMTIzNzEsMTIzNzIsMTIzNzMsMTIzNzQsMTIzNzUsMTIzNzYsMTIzNzcsMTIz''@;'; put 'put ''NzgsMTIzNzksMTIzODAsMTIzODEsMTIzODIsMTIzODMsMTIzODQsMTIzODUsMTIzODYsMTIzODcsMTIzODgsMTIzODksMTIzOTAsMTIzOTEsMTIzOTIsMTIzOTMsMTIzOTQsMTIzOTUsMTIzOTYsMTIzOTcsMTIzOTgsMTIzOTksMTI0MDAsMTI0MDEsMTI0MDIsMTI0MDMsMTI0MDQsMTI0MDUs''@;'; put 'put ''MTI0MDYsMTI0MDcsMTI0MDgsMTI0MDksMTI0MTAsMTI0MTEsMTI0MTIsMTI0MTMsMTI0MTQsMTI0MTUsMTI0MTYsMTI0MTcsMTI0MTgsMTI0MTksMTI0MjAsMTI0MjEsMTI0MjIsMTI0MjMsMTI0MjQsMTI0MjUsMTI0MjYsMTI0MjcsMTI0MjgsMTI0MjksMTI0MzAsMTI0MzEsMTI0MzIsMTI0''@;'; put 'put ''MzMsMTI0MzQsMTI0MzUsMTI0NDksMTI0NTAsMTI0NTEsMTI0NTIsMTI0NTMsMTI0NTQsMTI0NTUsMTI0NTYsMTI0NTcsMTI0NTgsMTI0NTksMTI0NjAsMTI0NjEsMTI0NjIsMTI0NjMsMTI0NjQsMTI0NjUsMTI0NjYsMTI0NjcsMTI0NjgsMTI0NjksMTI0NzAsMTI0NzEsMTI0NzIsMTI0NzMs''@;'; put 'put ''MTI0NzQsMTI0NzUsMTI0NzYsMTI0NzcsMTI0NzgsMTI0NzksMTI0ODAsMTI0ODEsMTI0ODIsMTI0ODMsMTI0ODQsMTI0ODUsMTI0ODYsMTI0ODcsMTI0ODgsMTI0ODksMTI0OTAsMTI0OTEsMTI0OTIsMTI0OTMsMTI0OTQsMTI0OTUsMTI0OTYsMTI0OTcsMTI0OTgsMTI0OTksMTI1MDAsMTI1''@;'; put 'put ''MDEsMTI1MDIsMTI1MDMsMTI1MDQsMTI1MDUsMTI1MDYsMTI1MDcsMTI1MDgsMTI1MDksMTI1MTAsMTI1MTEsMTI1MTIsMTI1MTMsMTI1MTQsMTI1MTUsMTI1MTYsMTI1MTcsMTI1MTgsMTI1MTksMTI1MjAsMTI1MjEsMTI1MjIsMTI1MjMsMTI1MjQsMTI1MjUsMTI1MjYsMTI1MjcsMTI1Mjgs''@;'; put 'put ''MTI1MjksMTI1MzAsMTI1MzEsMTI1MzIsMTI1MzMsMTI1MzQsMTA0MCwxMDQxLDEwNDIsMTA0MywxMDQ0LDEwNDUsMTAyNSwxMDQ2LDEwNDcsMTA0OCwxMDQ5LDEwNTAsMTA1MSwxMDUyLDEwNTMsMTA1NCwxMDU1LDEwNTYsMTA1NywxMDU4LDEwNTksMTA2MCwxMDYxLDEwNjIsMTA2MywxMDY0''@;'; put 'put ''LDEwNjUsMTA2NiwxMDY3LDEwNjgsMTA2OSwxMDcwLDEwNzEsMTA3MiwxMDczLDEwNzQsMTA3NSwxMDc2LDEwNzcsMTEwNSwxMDc4LDEwNzksMTA4MCwxMDgxLDEwODIsMTA4MywxMDg0LDEwODUsMTA4NiwxMDg3LDEwODgsMTA4OSwxMDkwLDEwOTEsMTA5MiwxMDkzLDEwOTQsMTA5NSwxMDk2''@;'; put 'put ''LDEwOTcsMTA5OCwxMDk5LDExMDAsMTEwMSwxMTAyLDExMDMsODY3OSw4NjMyLDg2MzMsMTI3NTEsMTMxMjc2LDIwMDU4LDEzMTIxMCwyMDk5NCwxNzU1Myw0MDg4MCwyMDg3Miw0MDg4MSwxNjEyODcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw2NTUwNiw2NTUwOCw2NTI4''@;'; put 'put ''Nyw2NTI4MiwxMjg0OSw4NDcwLDg0ODEsMTI0NDMsMTI0NDQsMTE5MDQsMTE5MDgsMTE5MTAsMTE5MTEsMTE5MTIsMTE5MTQsMTE5MTYsMTE5MTcsMTE5MjUsMTE5MzIsMTE5MzMsMTE5NDEsMTE5NDMsMTE5NDYsMTE5NDgsMTE5NTAsMTE5NTgsMTE5NjQsMTE5NjYsMTE5NzQsMTE5NzgsMTE5''@;'; put 'put ''ODAsMTE5ODEsMTE5ODMsMTE5OTAsMTE5OTEsMTE5OTgsMTIwMDMsbnVsbCxudWxsLG51bGwsNjQzLDU5Miw2MDMsNTk2LDYyOSwzMzksMjQ4LDMzMSw2NTAsNjE4LDIwMDM0LDIwMDYwLDIwOTgxLDIxMjc0LDIxMzc4LDE5OTc1LDE5OTgwLDIwMDM5LDIwMTA5LDIyMjMxLDY0MDEyLDIzNjYy''@;'; put 'put ''LDI0NDM1LDE5OTgzLDIwODcxLDE5OTgyLDIwMDE0LDIwMTE1LDIwMTYyLDIwMTY5LDIwMTY4LDIwODg4LDIxMjQ0LDIxMzU2LDIxNDMzLDIyMzA0LDIyNzg3LDIyODI4LDIzNTY4LDI0MDYzLDI2MDgxLDI3NTcxLDI3NTk2LDI3NjY4LDI5MjQ3LDIwMDE3LDIwMDI4LDIwMjAwLDIwMTg4LDIw''@;'; put 'put ''MjAxLDIwMTkzLDIwMTg5LDIwMTg2LDIxMDA0LDIxMjc2LDIxMzI0LDIyMzA2LDIyMzA3LDIyODA3LDIyODMxLDIzNDI1LDIzNDI4LDIzNTcwLDIzNjExLDIzNjY4LDIzNjY3LDI0MDY4LDI0MTkyLDI0MTk0LDI0NTIxLDI1MDk3LDI1MTY4LDI3NjY5LDI3NzAyLDI3NzE1LDI3NzExLDI3NzA3''@;'; put 'put ''LDI5MzU4LDI5MzYwLDI5NTc4LDMxMTYwLDMyOTA2LDM4NDMwLDIwMjM4LDIwMjQ4LDIwMjY4LDIwMjEzLDIwMjQ0LDIwMjA5LDIwMjI0LDIwMjE1LDIwMjMyLDIwMjUzLDIwMjI2LDIwMjI5LDIwMjU4LDIwMjQzLDIwMjI4LDIwMjEyLDIwMjQyLDIwOTEzLDIxMDExLDIxMDAxLDIxMDA4LDIx''@;'; put 'put ''MTU4LDIxMjgyLDIxMjc5LDIxMzI1LDIxMzg2LDIxNTExLDIyMjQxLDIyMjM5LDIyMzE4LDIyMzE0LDIyMzI0LDIyODQ0LDIyOTEyLDIyOTA4LDIyOTE3LDIyOTA3LDIyOTEwLDIyOTAzLDIyOTExLDIzMzgyLDIzNTczLDIzNTg5LDIzNjc2LDIzNjc0LDIzNjc1LDIzNjc4LDI0MDMxLDI0MTgx''@;'; put 'put ''LDI0MTk2LDI0MzIyLDI0MzQ2LDI0NDM2LDI0NTMzLDI0NTMyLDI0NTI3LDI1MTgwLDI1MTgyLDI1MTg4LDI1MTg1LDI1MTkwLDI1MTg2LDI1MTc3LDI1MTg0LDI1MTc4LDI1MTg5LDI2MDk1LDI2MDk0LDI2NDMwLDI2NDI1LDI2NDI0LDI2NDI3LDI2NDI2LDI2NDMxLDI2NDI4LDI2NDE5LDI3''@;'; put 'put ''NjcyLDI3NzE4LDI3NzMwLDI3NzQwLDI3NzI3LDI3NzIyLDI3NzMyLDI3NzIzLDI3NzI0LDI4Nzg1LDI5Mjc4LDI5MzY0LDI5MzY1LDI5NTgyLDI5OTk0LDMwMzM1LDMxMzQ5LDMyNTkzLDMzNDAwLDMzNDA0LDMzNDA4LDMzNDA1LDMzNDA3LDM0MzgxLDM1MTk4LDM3MDE3LDM3MDE1LDM3MDE2''@;'; put 'put ''LDM3MDE5LDM3MDEyLDM4NDM0LDM4NDM2LDM4NDMyLDM4NDM1LDIwMzEwLDIwMjgzLDIwMzIyLDIwMjk3LDIwMzA3LDIwMzI0LDIwMjg2LDIwMzI3LDIwMzA2LDIwMzE5LDIwMjg5LDIwMzEyLDIwMjY5LDIwMjc1LDIwMjg3LDIwMzIxLDIwODc5LDIwOTIxLDIxMDIwLDIxMDIyLDIxMDI1LDIx''@;'; put 'put ''MTY1LDIxMTY2LDIxMjU3LDIxMzQ3LDIxMzYyLDIxMzkwLDIxMzkxLDIxNTUyLDIxNTU5LDIxNTQ2LDIxNTg4LDIxNTczLDIxNTI5LDIxNTMyLDIxNTQxLDIxNTI4LDIxNTY1LDIxNTgzLDIxNTY5LDIxNTQ0LDIxNTQwLDIxNTc1LDIyMjU0LDIyMjQ3LDIyMjQ1LDIyMzM3LDIyMzQxLDIyMzQ4''@;'; put 'put ''LDIyMzQ1LDIyMzQ3LDIyMzU0LDIyNzkwLDIyODQ4LDIyOTUwLDIyOTM2LDIyOTQ0LDIyOTM1LDIyOTI2LDIyOTQ2LDIyOTI4LDIyOTI3LDIyOTUxLDIyOTQ1LDIzNDM4LDIzNDQyLDIzNTkyLDIzNTk0LDIzNjkzLDIzNjk1LDIzNjg4LDIzNjkxLDIzNjg5LDIzNjk4LDIzNjkwLDIzNjg2LDIz''@;'; put 'put ''Njk5LDIzNzAxLDI0MDMyLDI0MDc0LDI0MDc4LDI0MjAzLDI0MjAxLDI0MjA0LDI0MjAwLDI0MjA1LDI0MzI1LDI0MzQ5LDI0NDQwLDI0NDM4LDI0NTMwLDI0NTI5LDI0NTI4LDI0NTU3LDI0NTUyLDI0NTU4LDI0NTYzLDI0NTQ1LDI0NTQ4LDI0NTQ3LDI0NTcwLDI0NTU5LDI0NTY3LDI0NTcx''@;'; put 'put ''LDI0NTc2LDI0NTY0LDI1MTQ2LDI1MjE5LDI1MjI4LDI1MjMwLDI1MjMxLDI1MjM2LDI1MjIzLDI1MjAxLDI1MjExLDI1MjEwLDI1MjAwLDI1MjE3LDI1MjI0LDI1MjA3LDI1MjEzLDI1MjAyLDI1MjA0LDI1OTExLDI2MDk2LDI2MTAwLDI2MDk5LDI2MDk4LDI2MTAxLDI2NDM3LDI2NDM5LDI2''@;'; put 'put ''NDU3LDI2NDUzLDI2NDQ0LDI2NDQwLDI2NDYxLDI2NDQ1LDI2NDU4LDI2NDQzLDI3NjAwLDI3NjczLDI3Njc0LDI3NzY4LDI3NzUxLDI3NzU1LDI3NzgwLDI3Nzg3LDI3NzkxLDI3NzYxLDI3NzU5LDI3NzUzLDI3ODAyLDI3NzU3LDI3NzgzLDI3Nzk3LDI3ODA0LDI3NzUwLDI3NzYzLDI3NzQ5''@;'; put 'put ''LDI3NzcxLDI3NzkwLDI4Nzg4LDI4Nzk0LDI5MjgzLDI5Mzc1LDI5MzczLDI5Mzc5LDI5MzgyLDI5Mzc3LDI5MzcwLDI5MzgxLDI5NTg5LDI5NTkxLDI5NTg3LDI5NTg4LDI5NTg2LDMwMDEwLDMwMDA5LDMwMTAwLDMwMTAxLDMwMzM3LDMxMDM3LDMyODIwLDMyOTE3LDMyOTIxLDMyOTEyLDMy''@;'; put 'put ''OTE0LDMyOTI0LDMzNDI0LDMzNDIzLDMzNDEzLDMzNDIyLDMzNDI1LDMzNDI3LDMzNDE4LDMzNDExLDMzNDEyLDM1OTYwLDM2ODA5LDM2Nzk5LDM3MDIzLDM3MDI1LDM3MDI5LDM3MDIyLDM3MDMxLDM3MDI0LDM4NDQ4LDM4NDQwLDM4NDQ3LDM4NDQ1LDIwMDE5LDIwMzc2LDIwMzQ4LDIwMzU3''@;'; put 'put ''LDIwMzQ5LDIwMzUyLDIwMzU5LDIwMzQyLDIwMzQwLDIwMzYxLDIwMzU2LDIwMzQzLDIwMzAwLDIwMzc1LDIwMzMwLDIwMzc4LDIwMzQ1LDIwMzUzLDIwMzQ0LDIwMzY4LDIwMzgwLDIwMzcyLDIwMzgyLDIwMzcwLDIwMzU0LDIwMzczLDIwMzMxLDIwMzM0LDIwODk0LDIwOTI0LDIwOTI2LDIx''@;'; put 'put ''MDQ1LDIxMDQyLDIxMDQzLDIxMDYyLDIxMDQxLDIxMTgwLDIxMjU4LDIxMjU5LDIxMzA4LDIxMzk0LDIxMzk2LDIxNjM5LDIxNjMxLDIxNjMzLDIxNjQ5LDIxNjM0LDIxNjQwLDIxNjExLDIxNjI2LDIxNjMwLDIxNjA1LDIxNjEyLDIxNjIwLDIxNjA2LDIxNjQ1LDIxNjE1LDIxNjAxLDIxNjAw''@;'; put 'put ''LDIxNjU2LDIxNjAzLDIxNjA3LDIxNjA0LDIyMjYzLDIyMjY1LDIyMzgzLDIyMzg2LDIyMzgxLDIyMzc5LDIyMzg1LDIyMzg0LDIyMzkwLDIyNDAwLDIyMzg5LDIyMzk1LDIyMzg3LDIyMzg4LDIyMzcwLDIyMzc2LDIyMzk3LDIyNzk2LDIyODUzLDIyOTY1LDIyOTcwLDIyOTkxLDIyOTkwLDIy''@;'; put 'put ''OTYyLDIyOTg4LDIyOTc3LDIyOTY2LDIyOTcyLDIyOTc5LDIyOTk4LDIyOTYxLDIyOTczLDIyOTc2LDIyOTg0LDIyOTY0LDIyOTgzLDIzMzk0LDIzMzk3LDIzNDQzLDIzNDQ1LDIzNjIwLDIzNjIzLDIzNzI2LDIzNzE2LDIzNzEyLDIzNzMzLDIzNzI3LDIzNzIwLDIzNzI0LDIzNzExLDIzNzE1''@;'; put 'put ''LDIzNzI1LDIzNzE0LDIzNzIyLDIzNzE5LDIzNzA5LDIzNzE3LDIzNzM0LDIzNzI4LDIzNzE4LDI0MDg3LDI0MDg0LDI0MDg5LDI0MzYwLDI0MzU0LDI0MzU1LDI0MzU2LDI0NDA0LDI0NDUwLDI0NDQ2LDI0NDQ1LDI0NTQyLDI0NTQ5LDI0NjIxLDI0NjE0LDI0NjAxLDI0NjI2LDI0NTg3LDI0''@;'; put 'put ''NjI4LDI0NTg2LDI0NTk5LDI0NjI3LDI0NjAyLDI0NjA2LDI0NjIwLDI0NjEwLDI0NTg5LDI0NTkyLDI0NjIyLDI0NTk1LDI0NTkzLDI0NTg4LDI0NTg1LDI0NjA0LDI1MTA4LDI1MTQ5LDI1MjYxLDI1MjY4LDI1Mjk3LDI1Mjc4LDI1MjU4LDI1MjcwLDI1MjkwLDI1MjYyLDI1MjY3LDI1MjYz''@;'; put 'put ''LDI1Mjc1LDI1MjU3LDI1MjY0LDI1MjcyLDI1OTE3LDI2MDI0LDI2MDQzLDI2MTIxLDI2MTA4LDI2MTE2LDI2MTMwLDI2MTIwLDI2MTA3LDI2MTE1LDI2MTIzLDI2MTI1LDI2MTE3LDI2MTA5LDI2MTI5LDI2MTI4LDI2MzU4LDI2Mzc4LDI2NTAxLDI2NDc2LDI2NTEwLDI2NTE0LDI2NDg2LDI2''@;'; put 'put ''NDkxLDI2NTIwLDI2NTAyLDI2NTAwLDI2NDg0LDI2NTA5LDI2NTA4LDI2NDkwLDI2NTI3LDI2NTEzLDI2NTIxLDI2NDk5LDI2NDkzLDI2NDk3LDI2NDg4LDI2NDg5LDI2NTE2LDI3NDI5LDI3NTIwLDI3NTE4LDI3NjE0LDI3Njc3LDI3Nzk1LDI3ODg0LDI3ODgzLDI3ODg2LDI3ODY1LDI3ODMw''@;'; put 'put ''LDI3ODYwLDI3ODIxLDI3ODc5LDI3ODMxLDI3ODU2LDI3ODQyLDI3ODM0LDI3ODQzLDI3ODQ2LDI3ODg1LDI3ODkwLDI3ODU4LDI3ODY5LDI3ODI4LDI3Nzg2LDI3ODA1LDI3Nzc2LDI3ODcwLDI3ODQwLDI3OTUyLDI3ODUzLDI3ODQ3LDI3ODI0LDI3ODk3LDI3ODU1LDI3ODgxLDI3ODU3LDI4''@;'; put 'put ''ODIwLDI4ODI0LDI4ODA1LDI4ODE5LDI4ODA2LDI4ODA0LDI4ODE3LDI4ODIyLDI4ODAyLDI4ODI2LDI4ODAzLDI5MjkwLDI5Mzk4LDI5Mzg3LDI5NDAwLDI5Mzg1LDI5NDA0LDI5Mzk0LDI5Mzk2LDI5NDAyLDI5Mzg4LDI5MzkzLDI5NjA0LDI5NjAxLDI5NjEzLDI5NjA2LDI5NjAyLDI5NjAw''@;'; put 'put ''LDI5NjEyLDI5NTk3LDI5OTE3LDI5OTI4LDMwMDE1LDMwMDE2LDMwMDE0LDMwMDkyLDMwMTA0LDMwMzgzLDMwNDUxLDMwNDQ5LDMwNDQ4LDMwNDUzLDMwNzEyLDMwNzE2LDMwNzEzLDMwNzE1LDMwNzE0LDMwNzExLDMxMDQyLDMxMDM5LDMxMTczLDMxMzUyLDMxMzU1LDMxNDgzLDMxODYxLDMx''@;'; put 'put ''OTk3LDMyODIxLDMyOTExLDMyOTQyLDMyOTMxLDMyOTUyLDMyOTQ5LDMyOTQxLDMzMzEyLDMzNDQwLDMzNDcyLDMzNDUxLDMzNDM0LDMzNDMyLDMzNDM1LDMzNDYxLDMzNDQ3LDMzNDU0LDMzNDY4LDMzNDM4LDMzNDY2LDMzNDYwLDMzNDQ4LDMzNDQxLDMzNDQ5LDMzNDc0LDMzNDQ0LDMzNDc1''@;'; put 'put ''LDMzNDYyLDMzNDQyLDM0NDE2LDM0NDE1LDM0NDEzLDM0NDE0LDM1OTI2LDM2ODE4LDM2ODExLDM2ODE5LDM2ODEzLDM2ODIyLDM2ODIxLDM2ODIzLDM3MDQyLDM3MDQ0LDM3MDM5LDM3MDQzLDM3MDQwLDM4NDU3LDM4NDYxLDM4NDYwLDM4NDU4LDM4NDY3LDIwNDI5LDIwNDIxLDIwNDM1LDIw''@;'; put 'put ''NDAyLDIwNDI1LDIwNDI3LDIwNDE3LDIwNDM2LDIwNDQ0LDIwNDQxLDIwNDExLDIwNDAzLDIwNDQzLDIwNDIzLDIwNDM4LDIwNDEwLDIwNDE2LDIwNDA5LDIwNDYwLDIxMDYwLDIxMDY1LDIxMTg0LDIxMTg2LDIxMzA5LDIxMzcyLDIxMzk5LDIxMzk4LDIxNDAxLDIxNDAwLDIxNjkwLDIxNjY1''@;'; put 'put ''LDIxNjc3LDIxNjY5LDIxNzExLDIxNjk5LDMzNTQ5LDIxNjg3LDIxNjc4LDIxNzE4LDIxNjg2LDIxNzAxLDIxNzAyLDIxNjY0LDIxNjE2LDIxNjkyLDIxNjY2LDIxNjk0LDIxNjE4LDIxNzI2LDIxNjgwLDIyNDUzLDIyNDMwLDIyNDMxLDIyNDM2LDIyNDEyLDIyNDIzLDIyNDI5LDIyNDI3LDIy''@;'; put 'put ''NDIwLDIyNDI0LDIyNDE1LDIyNDI1LDIyNDM3LDIyNDI2LDIyNDIxLDIyNzcyLDIyNzk3LDIyODY3LDIzMDA5LDIzMDA2LDIzMDIyLDIzMDQwLDIzMDI1LDIzMDA1LDIzMDM0LDIzMDM3LDIzMDM2LDIzMDMwLDIzMDEyLDIzMDI2LDIzMDMxLDIzMDAzLDIzMDE3LDIzMDI3LDIzMDI5LDIzMDA4''@;'; put 'put ''LDIzMDM4LDIzMDI4LDIzMDIxLDIzNDY0LDIzNjI4LDIzNzYwLDIzNzY4LDIzNzU2LDIzNzY3LDIzNzU1LDIzNzcxLDIzNzc0LDIzNzcwLDIzNzUzLDIzNzUxLDIzNzU0LDIzNzY2LDIzNzYzLDIzNzY0LDIzNzU5LDIzNzUyLDIzNzUwLDIzNzU4LDIzNzc1LDIzODAwLDI0MDU3LDI0MDk3LDI0''@;'; put 'put ''MDk4LDI0MDk5LDI0MDk2LDI0MTAwLDI0MjQwLDI0MjI4LDI0MjI2LDI0MjE5LDI0MjI3LDI0MjI5LDI0MzI3LDI0MzY2LDI0NDA2LDI0NDU0LDI0NjMxLDI0NjMzLDI0NjYwLDI0NjkwLDI0NjcwLDI0NjQ1LDI0NjU5LDI0NjQ3LDI0NjQ5LDI0NjY3LDI0NjUyLDI0NjQwLDI0NjQyLDI0Njcx''@;'; put 'put ''LDI0NjEyLDI0NjQ0LDI0NjY0LDI0Njc4LDI0Njg2LDI1MTU0LDI1MTU1LDI1Mjk1LDI1MzU3LDI1MzU1LDI1MzMzLDI1MzU4LDI1MzQ3LDI1MzIzLDI1MzM3LDI1MzU5LDI1MzU2LDI1MzM2LDI1MzM0LDI1MzQ0LDI1MzYzLDI1MzY0LDI1MzM4LDI1MzY1LDI1MzM5LDI1MzI4LDI1OTIxLDI1''@;'; put 'put ''OTIzLDI2MDI2LDI2MDQ3LDI2MTY2LDI2MTQ1LDI2MTYyLDI2MTY1LDI2MTQwLDI2MTUwLDI2MTQ2LDI2MTYzLDI2MTU1LDI2MTcwLDI2MTQxLDI2MTY0LDI2MTY5LDI2MTU4LDI2MzgzLDI2Mzg0LDI2NTYxLDI2NjEwLDI2NTY4LDI2NTU0LDI2NTg4LDI2NTU1LDI2NjE2LDI2NTg0LDI2NTYw''@;'; put 'put ''LDI2NTUxLDI2NTY1LDI2NjAzLDI2NTk2LDI2NTkxLDI2NTQ5LDI2NTczLDI2NTQ3LDI2NjE1LDI2NjE0LDI2NjA2LDI2NTk1LDI2NTYyLDI2NTUzLDI2NTc0LDI2NTk5LDI2NjA4LDI2NTQ2LDI2NjIwLDI2NTY2LDI2NjA1LDI2NTcyLDI2NTQyLDI2NTk4LDI2NTg3LDI2NjE4LDI2NTY5LDI2''@;'; put 'put ''NTcwLDI2NTYzLDI2NjAyLDI2NTcxLDI3NDMyLDI3NTIyLDI3NTI0LDI3NTc0LDI3NjA2LDI3NjA4LDI3NjE2LDI3NjgwLDI3NjgxLDI3OTQ0LDI3OTU2LDI3OTQ5LDI3OTM1LDI3OTY0LDI3OTY3LDI3OTIyLDI3OTE0LDI3ODY2LDI3OTU1LDI3OTA4LDI3OTI5LDI3OTYyLDI3OTMwLDI3OTIx''@;'; put 'put ''LDI3OTA0LDI3OTMzLDI3OTcwLDI3OTA1LDI3OTI4LDI3OTU5LDI3OTA3LDI3OTE5LDI3OTY4LDI3OTExLDI3OTM2LDI3OTQ4LDI3OTEyLDI3OTM4LDI3OTEzLDI3OTIwLDI4ODU1LDI4ODMxLDI4ODYyLDI4ODQ5LDI4ODQ4LDI4ODMzLDI4ODUyLDI4ODUzLDI4ODQxLDI5MjQ5LDI5MjU3LDI5''@;'; put 'put ''MjU4LDI5MjkyLDI5Mjk2LDI5Mjk5LDI5Mjk0LDI5Mzg2LDI5NDEyLDI5NDE2LDI5NDE5LDI5NDA3LDI5NDE4LDI5NDE0LDI5NDExLDI5NTczLDI5NjQ0LDI5NjM0LDI5NjQwLDI5NjM3LDI5NjI1LDI5NjIyLDI5NjIxLDI5NjIwLDI5Njc1LDI5NjMxLDI5NjM5LDI5NjMwLDI5NjM1LDI5NjM4''@;'; put 'put ''LDI5NjI0LDI5NjQzLDI5OTMyLDI5OTM0LDI5OTk4LDMwMDIzLDMwMDI0LDMwMTE5LDMwMTIyLDMwMzI5LDMwNDA0LDMwNDcyLDMwNDY3LDMwNDY4LDMwNDY5LDMwNDc0LDMwNDU1LDMwNDU5LDMwNDU4LDMwNjk1LDMwNjk2LDMwNzI2LDMwNzM3LDMwNzM4LDMwNzI1LDMwNzM2LDMwNzM1LDMw''@;'; put 'put ''NzM0LDMwNzI5LDMwNzIzLDMwNzM5LDMxMDUwLDMxMDUyLDMxMDUxLDMxMDQ1LDMxMDQ0LDMxMTg5LDMxMTgxLDMxMTgzLDMxMTkwLDMxMTgyLDMxMzYwLDMxMzU4LDMxNDQxLDMxNDg4LDMxNDg5LDMxODY2LDMxODY0LDMxODY1LDMxODcxLDMxODcyLDMxODczLDMyMDAzLDMyMDA4LDMyMDAx''@;'; put 'put ''LDMyNjAwLDMyNjU3LDMyNjUzLDMyNzAyLDMyNzc1LDMyNzgyLDMyNzgzLDMyNzg4LDMyODIzLDMyOTg0LDMyOTY3LDMyOTkyLDMyOTc3LDMyOTY4LDMyOTYyLDMyOTc2LDMyOTY1LDMyOTk1LDMyOTg1LDMyOTg4LDMyOTcwLDMyOTgxLDMyOTY5LDMyOTc1LDMyOTgzLDMyOTk4LDMyOTczLDMz''@;'; put 'put ''Mjc5LDMzMzEzLDMzNDI4LDMzNDk3LDMzNTM0LDMzNTI5LDMzNTQzLDMzNTEyLDMzNTM2LDMzNDkzLDMzNTk0LDMzNTE1LDMzNDk0LDMzNTI0LDMzNTE2LDMzNTA1LDMzNTIyLDMzNTI1LDMzNTQ4LDMzNTMxLDMzNTI2LDMzNTIwLDMzNTE0LDMzNTA4LDMzNTA0LDMzNTMwLDMzNTIzLDMzNTE3''@;'; put 'put ''LDM0NDIzLDM0NDIwLDM0NDI4LDM0NDE5LDM0ODgxLDM0ODk0LDM0OTE5LDM0OTIyLDM0OTIxLDM1MjgzLDM1MzMyLDM1MzM1LDM2MjEwLDM2ODM1LDM2ODMzLDM2ODQ2LDM2ODMyLDM3MTA1LDM3MDUzLDM3MDU1LDM3MDc3LDM3MDYxLDM3MDU0LDM3MDYzLDM3MDY3LDM3MDY0LDM3MzMyLDM3''@;'; put 'put ''MzMxLDM4NDg0LDM4NDc5LDM4NDgxLDM4NDgzLDM4NDc0LDM4NDc4LDIwNTEwLDIwNDg1LDIwNDg3LDIwNDk5LDIwNTE0LDIwNTI4LDIwNTA3LDIwNDY5LDIwNDY4LDIwNTMxLDIwNTM1LDIwNTI0LDIwNDcwLDIwNDcxLDIwNTAzLDIwNTA4LDIwNTEyLDIwNTE5LDIwNTMzLDIwNTI3LDIwNTI5''@;'; put 'put ''LDIwNDk0LDIwODI2LDIwODg0LDIwODgzLDIwOTM4LDIwOTMyLDIwOTMzLDIwOTM2LDIwOTQyLDIxMDg5LDIxMDgyLDIxMDc0LDIxMDg2LDIxMDg3LDIxMDc3LDIxMDkwLDIxMTk3LDIxMjYyLDIxNDA2LDIxNzk4LDIxNzMwLDIxNzgzLDIxNzc4LDIxNzM1LDIxNzQ3LDIxNzMyLDIxNzg2LDIx''@;'; put 'put ''NzU5LDIxNzY0LDIxNzY4LDIxNzM5LDIxNzc3LDIxNzY1LDIxNzQ1LDIxNzcwLDIxNzU1LDIxNzUxLDIxNzUyLDIxNzI4LDIxNzc0LDIxNzYzLDIxNzcxLDIyMjczLDIyMjc0LDIyNDc2LDIyNTc4LDIyNDg1LDIyNDgyLDIyNDU4LDIyNDcwLDIyNDYxLDIyNDYwLDIyNDU2LDIyNDU0LDIyNDYz''@;'; put 'put ''LDIyNDcxLDIyNDgwLDIyNDU3LDIyNDY1LDIyNzk4LDIyODU4LDIzMDY1LDIzMDYyLDIzMDg1LDIzMDg2LDIzMDYxLDIzMDU1LDIzMDYzLDIzMDUwLDIzMDcwLDIzMDkxLDIzNDA0LDIzNDYzLDIzNDY5LDIzNDY4LDIzNTU1LDIzNjM4LDIzNjM2LDIzNzg4LDIzODA3LDIzNzkwLDIzNzkzLDIz''@;'; put 'put ''Nzk5LDIzODA4LDIzODAxLDI0MTA1LDI0MTA0LDI0MjMyLDI0MjM4LDI0MjM0LDI0MjM2LDI0MzcxLDI0MzY4LDI0NDIzLDI0NjY5LDI0NjY2LDI0Njc5LDI0NjQxLDI0NzM4LDI0NzEyLDI0NzA0LDI0NzIyLDI0NzA1LDI0NzMzLDI0NzA3LDI0NzI1LDI0NzMxLDI0NzI3LDI0NzExLDI0NzMy''@;'; put 'put ''LDI0NzE4LDI1MTEzLDI1MTU4LDI1MzMwLDI1MzYwLDI1NDMwLDI1Mzg4LDI1NDEyLDI1NDEzLDI1Mzk4LDI1NDExLDI1NTcyLDI1NDAxLDI1NDE5LDI1NDE4LDI1NDA0LDI1Mzg1LDI1NDA5LDI1Mzk2LDI1NDMyLDI1NDI4LDI1NDMzLDI1Mzg5LDI1NDE1LDI1Mzk1LDI1NDM0LDI1NDI1LDI1''@;'; put 'put ''NDAwLDI1NDMxLDI1NDA4LDI1NDE2LDI1OTMwLDI1OTI2LDI2MDU0LDI2MDUxLDI2MDUyLDI2MDUwLDI2MTg2LDI2MjA3LDI2MTgzLDI2MTkzLDI2Mzg2LDI2Mzg3LDI2NjU1LDI2NjUwLDI2Njk3LDI2Njc0LDI2Njc1LDI2NjgzLDI2Njk5LDI2NzAzLDI2NjQ2LDI2NjczLDI2NjUyLDI2Njc3''@;'; put 'put ''LDI2NjY3LDI2NjY5LDI2NjcxLDI2NzAyLDI2NjkyLDI2Njc2LDI2NjUzLDI2NjQyLDI2NjQ0LDI2NjYyLDI2NjY0LDI2NjcwLDI2NzAxLDI2NjgyLDI2NjYxLDI2NjU2LDI3NDM2LDI3NDM5LDI3NDM3LDI3NDQxLDI3NDQ0LDI3NTAxLDMyODk4LDI3NTI4LDI3NjIyLDI3NjIwLDI3NjI0LDI3''@;'; put 'put ''NjE5LDI3NjE4LDI3NjIzLDI3Njg1LDI4MDI2LDI4MDAzLDI4MDA0LDI4MDIyLDI3OTE3LDI4MDAxLDI4MDUwLDI3OTkyLDI4MDAyLDI4MDEzLDI4MDE1LDI4MDQ5LDI4MDQ1LDI4MTQzLDI4MDMxLDI4MDM4LDI3OTk4LDI4MDA3LDI4ZTMsMjgwNTUsMjgwMTYsMjgwMjgsMjc5OTksMjgwMzQs''@;'; put 'put ''MjgwNTYsMjc5NTEsMjgwMDgsMjgwNDMsMjgwMzAsMjgwMzIsMjgwMzYsMjc5MjYsMjgwMzUsMjgwMjcsMjgwMjksMjgwMjEsMjgwNDgsMjg4OTIsMjg4ODMsMjg4ODEsMjg4OTMsMjg4NzUsMzI1NjksMjg4OTgsMjg4ODcsMjg4ODIsMjg4OTQsMjg4OTYsMjg4ODQsMjg4NzcsMjg4NjksMjg4''@;'; put 'put ''NzAsMjg4NzEsMjg4OTAsMjg4NzgsMjg4OTcsMjkyNTAsMjkzMDQsMjkzMDMsMjkzMDIsMjk0NDAsMjk0MzQsMjk0MjgsMjk0MzgsMjk0MzAsMjk0MjcsMjk0MzUsMjk0NDEsMjk2NTEsMjk2NTcsMjk2NjksMjk2NTQsMjk2MjgsMjk2NzEsMjk2NjcsMjk2NzMsMjk2NjAsMjk2NTAsMjk2NTks''@;'; put 'put ''Mjk2NTIsMjk2NjEsMjk2NTgsMjk2NTUsMjk2NTYsMjk2NzIsMjk5MTgsMjk5MTksMjk5NDAsMjk5NDEsMjk5ODUsMzAwNDMsMzAwNDcsMzAxMjgsMzAxNDUsMzAxMzksMzAxNDgsMzAxNDQsMzAxNDMsMzAxMzQsMzAxMzgsMzAzNDYsMzA0MDksMzA0OTMsMzA0OTEsMzA0ODAsMzA0ODMsMzA0''@;'; put 'put ''ODIsMzA0OTksMzA0ODEsMzA0ODUsMzA0ODksMzA0OTAsMzA0OTgsMzA1MDMsMzA3NTUsMzA3NjQsMzA3NTQsMzA3NzMsMzA3NjcsMzA3NjAsMzA3NjYsMzA3NjMsMzA3NTMsMzA3NjEsMzA3NzEsMzA3NjIsMzA3NjksMzEwNjAsMzEwNjcsMzEwNTUsMzEwNjgsMzEwNTksMzEwNTgsMzEwNTcs''@;'; put 'put ''MzEyMTEsMzEyMTIsMzEyMDAsMzEyMTQsMzEyMTMsMzEyMTAsMzExOTYsMzExOTgsMzExOTcsMzEzNjYsMzEzNjksMzEzNjUsMzEzNzEsMzEzNzIsMzEzNzAsMzEzNjcsMzE0NDgsMzE1MDQsMzE0OTIsMzE1MDcsMzE0OTMsMzE1MDMsMzE0OTYsMzE0OTgsMzE1MDIsMzE0OTcsMzE1MDYsMzE4''@;'; put 'put ''NzYsMzE4ODksMzE4ODIsMzE4ODQsMzE4ODAsMzE4ODUsMzE4NzcsMzIwMzAsMzIwMjksMzIwMTcsMzIwMTQsMzIwMjQsMzIwMjIsMzIwMTksMzIwMzEsMzIwMTgsMzIwMTUsMzIwMTIsMzI2MDQsMzI2MDksMzI2MDYsMzI2MDgsMzI2MDUsMzI2MDMsMzI2NjIsMzI2NTgsMzI3MDcsMzI3MDYs''@;'; put 'put ''MzI3MDQsMzI3OTAsMzI4MzAsMzI4MjUsMzMwMTgsMzMwMTAsMzMwMTcsMzMwMTMsMzMwMjUsMzMwMTksMzMwMjQsMzMyODEsMzMzMjcsMzMzMTcsMzM1ODcsMzM1ODEsMzM2MDQsMzM1NjEsMzM2MTcsMzM1NzMsMzM2MjIsMzM1OTksMzM2MDEsMzM1NzQsMzM1NjQsMzM1NzAsMzM2MDIsMzM2''@;'; put 'put ''MTQsMzM1NjMsMzM1NzgsMzM1NDQsMzM1OTYsMzM2MTMsMzM1NTgsMzM1NzIsMzM1NjgsMzM1OTEsMzM1ODMsMzM1NzcsMzM2MDcsMzM2MDUsMzM2MTIsMzM2MTksMzM1NjYsMzM1ODAsMzM2MTEsMzM1NzUsMzM2MDgsMzQzODcsMzQzODYsMzQ0NjYsMzQ0NzIsMzQ0NTQsMzQ0NDUsMzQ0NDks''@;'; put 'put ''MzQ0NjIsMzQ0MzksMzQ0NTUsMzQ0MzgsMzQ0NDMsMzQ0NTgsMzQ0MzcsMzQ0NjksMzQ0NTcsMzQ0NjUsMzQ0NzEsMzQ0NTMsMzQ0NTYsMzQ0NDYsMzQ0NjEsMzQ0NDgsMzQ0NTIsMzQ4ODMsMzQ4ODQsMzQ5MjUsMzQ5MzMsMzQ5MzQsMzQ5MzAsMzQ5NDQsMzQ5MjksMzQ5NDMsMzQ5MjcsMzQ5''@;'; put 'put ''NDcsMzQ5NDIsMzQ5MzIsMzQ5NDAsMzUzNDYsMzU5MTEsMzU5MjcsMzU5NjMsMzYwMDQsMzYwMDMsMzYyMTQsMzYyMTYsMzYyNzcsMzYyNzksMzYyNzgsMzY1NjEsMzY1NjMsMzY4NjIsMzY4NTMsMzY4NjYsMzY4NjMsMzY4NTksMzY4NjgsMzY4NjAsMzY4NTQsMzcwNzgsMzcwODgsMzcwODEs''@;'; put 'put ''MzcwODIsMzcwOTEsMzcwODcsMzcwOTMsMzcwODAsMzcwODMsMzcwNzksMzcwODQsMzcwOTIsMzcyMDAsMzcxOTgsMzcxOTksMzczMzMsMzczNDYsMzczMzgsMzg0OTIsMzg0OTUsMzg1ODgsMzkxMzksMzk2NDcsMzk3MjcsMjAwOTUsMjA1OTIsMjA1ODYsMjA1NzcsMjA1NzQsMjA1NzYsMjA1''@;'; put 'put ''NjMsMjA1NTUsMjA1NzMsMjA1OTQsMjA1NTIsMjA1NTcsMjA1NDUsMjA1NzEsMjA1NTQsMjA1NzgsMjA1MDEsMjA1NDksMjA1NzUsMjA1ODUsMjA1ODcsMjA1NzksMjA1ODAsMjA1NTAsMjA1NDQsMjA1OTAsMjA1OTUsMjA1NjcsMjA1NjEsMjA5NDQsMjEwOTksMjExMDEsMjExMDAsMjExMDIs''@;'; put 'put ''MjEyMDYsMjEyMDMsMjEyOTMsMjE0MDQsMjE4NzcsMjE4NzgsMjE4MjAsMjE4MzcsMjE4NDAsMjE4MTIsMjE4MDIsMjE4NDEsMjE4NTgsMjE4MTQsMjE4MTMsMjE4MDgsMjE4NDIsMjE4MjksMjE3NzIsMjE4MTAsMjE4NjEsMjE4MzgsMjE4MTcsMjE4MzIsMjE4MDUsMjE4MTksMjE4MjQsMjE4''@;'; put 'put ''MzUsMjIyODIsMjIyNzksMjI1MjMsMjI1NDgsMjI0OTgsMjI1MTgsMjI0OTIsMjI1MTYsMjI1MjgsMjI1MDksMjI1MjUsMjI1MzYsMjI1MjAsMjI1MzksMjI1MTUsMjI0NzksMjI1MzUsMjI1MTAsMjI0OTksMjI1MTQsMjI1MDEsMjI1MDgsMjI0OTcsMjI1NDIsMjI1MjQsMjI1NDQsMjI1MDMs''@;'; put 'put ''MjI1MjksMjI1NDAsMjI1MTMsMjI1MDUsMjI1MTIsMjI1NDEsMjI1MzIsMjI4NzYsMjMxMzYsMjMxMjgsMjMxMjUsMjMxNDMsMjMxMzQsMjMwOTYsMjMwOTMsMjMxNDksMjMxMjAsMjMxMzUsMjMxNDEsMjMxNDgsMjMxMjMsMjMxNDAsMjMxMjcsMjMxMDcsMjMxMzMsMjMxMjIsMjMxMDgsMjMx''@;'; put 'put ''MzEsMjMxMTIsMjMxODIsMjMxMDIsMjMxMTcsMjMwOTcsMjMxMTYsMjMxNTIsMjMxNDUsMjMxMTEsMjMxMjEsMjMxMjYsMjMxMDYsMjMxMzIsMjM0MTAsMjM0MDYsMjM0ODksMjM0ODgsMjM2NDEsMjM4MzgsMjM4MTksMjM4MzcsMjM4MzQsMjM4NDAsMjM4MjAsMjM4NDgsMjM4MjEsMjM4NDYs''@;'; put 'put ''MjM4NDUsMjM4MjMsMjM4NTYsMjM4MjYsMjM4NDMsMjM4MzksMjM4NTQsMjQxMjYsMjQxMTYsMjQyNDEsMjQyNDQsMjQyNDksMjQyNDIsMjQyNDMsMjQzNzQsMjQzNzYsMjQ0NzUsMjQ0NzAsMjQ0NzksMjQ3MTQsMjQ3MjAsMjQ3MTAsMjQ3NjYsMjQ3NTIsMjQ3NjIsMjQ3ODcsMjQ3ODgsMjQ3''@;'; put 'put ''ODMsMjQ4MDQsMjQ3OTMsMjQ3OTcsMjQ3NzYsMjQ3NTMsMjQ3OTUsMjQ3NTksMjQ3NzgsMjQ3NjcsMjQ3NzEsMjQ3ODEsMjQ3NjgsMjUzOTQsMjU0NDUsMjU0ODIsMjU0NzQsMjU0NjksMjU1MzMsMjU1MDIsMjU1MTcsMjU1MDEsMjU0OTUsMjU1MTUsMjU0ODYsMjU0NTUsMjU0NzksMjU0ODgs''@;'; put 'put ''MjU0NTQsMjU1MTksMjU0NjEsMjU1MDAsMjU0NTMsMjU1MTgsMjU0NjgsMjU1MDgsMjU0MDMsMjU1MDMsMjU0NjQsMjU0NzcsMjU0NzMsMjU0ODksMjU0ODUsMjU0NTYsMjU5MzksMjYwNjEsMjYyMTMsMjYyMDksMjYyMDMsMjYyMDEsMjYyMDQsMjYyMTAsMjYzOTIsMjY3NDUsMjY3NTksMjY3''@;'; put 'put ''NjgsMjY3ODAsMjY3MzMsMjY3MzQsMjY3OTgsMjY3OTUsMjY5NjYsMjY3MzUsMjY3ODcsMjY3OTYsMjY3OTMsMjY3NDEsMjY3NDAsMjY4MDIsMjY3NjcsMjY3NDMsMjY3NzAsMjY3NDgsMjY3MzEsMjY3MzgsMjY3OTQsMjY3NTIsMjY3MzcsMjY3NTAsMjY3NzksMjY3NzQsMjY3NjMsMjY3ODQs''@;'; put 'put ''MjY3NjEsMjY3ODgsMjY3NDQsMjY3NDcsMjY3NjksMjY3NjQsMjY3NjIsMjY3NDksMjc0NDYsMjc0NDMsMjc0NDcsMjc0NDgsMjc1MzcsMjc1MzUsMjc1MzMsMjc1MzQsMjc1MzIsMjc2OTAsMjgwOTYsMjgwNzUsMjgwODQsMjgwODMsMjgyNzYsMjgwNzYsMjgxMzcsMjgxMzAsMjgwODcsMjgx''@;'; put 'put ''NTAsMjgxMTYsMjgxNjAsMjgxMDQsMjgxMjgsMjgxMjcsMjgxMTgsMjgwOTQsMjgxMzMsMjgxMjQsMjgxMjUsMjgxMjMsMjgxNDgsMjgxMDYsMjgwOTMsMjgxNDEsMjgxNDQsMjgwOTAsMjgxMTcsMjgwOTgsMjgxMTEsMjgxMDUsMjgxMTIsMjgxNDYsMjgxMTUsMjgxNTcsMjgxMTksMjgxMDks''@;'; put 'put ''MjgxMzEsMjgwOTEsMjg5MjIsMjg5NDEsMjg5MTksMjg5NTEsMjg5MTYsMjg5NDAsMjg5MTIsMjg5MzIsMjg5MTUsMjg5NDQsMjg5MjQsMjg5MjcsMjg5MzQsMjg5NDcsMjg5MjgsMjg5MjAsMjg5MTgsMjg5MzksMjg5MzAsMjg5NDIsMjkzMTAsMjkzMDcsMjkzMDgsMjkzMTEsMjk0NjksMjk0''@;'; put 'put ''NjMsMjk0NDcsMjk0NTcsMjk0NjQsMjk0NTAsMjk0NDgsMjk0MzksMjk0NTUsMjk0NzAsMjk1NzYsMjk2ODYsMjk2ODgsMjk2ODUsMjk3MDAsMjk2OTcsMjk2OTMsMjk3MDMsMjk2OTYsMjk2OTAsMjk2OTIsMjk2OTUsMjk3MDgsMjk3MDcsMjk2ODQsMjk3MDQsMzAwNTIsMzAwNTEsMzAxNTgs''@;'; put 'put ''MzAxNjIsMzAxNTksMzAxNTUsMzAxNTYsMzAxNjEsMzAxNjAsMzAzNTEsMzAzNDUsMzA0MTksMzA1MjEsMzA1MTEsMzA1MDksMzA1MTMsMzA1MTQsMzA1MTYsMzA1MTUsMzA1MjUsMzA1MDEsMzA1MjMsMzA1MTcsMzA3OTIsMzA4MDIsMzA3OTMsMzA3OTcsMzA3OTQsMzA3OTYsMzA3NTgsMzA3''@;'; put 'put ''ODksMzA4MDAsMzEwNzYsMzEwNzksMzEwODEsMzEwODIsMzEwNzUsMzEwODMsMzEwNzMsMzExNjMsMzEyMjYsMzEyMjQsMzEyMjIsMzEyMjMsMzEzNzUsMzEzODAsMzEzNzYsMzE1NDEsMzE1NTksMzE1NDAsMzE1MjUsMzE1MzYsMzE1MjIsMzE1MjQsMzE1MzksMzE1MTIsMzE1MzAsMzE1MTcs''@;'; put 'put ''MzE1MzcsMzE1MzEsMzE1MzMsMzE1MzUsMzE1MzgsMzE1NDQsMzE1MTQsMzE1MjMsMzE4OTIsMzE4OTYsMzE4OTQsMzE5MDcsMzIwNTMsMzIwNjEsMzIwNTYsMzIwNTQsMzIwNTgsMzIwNjksMzIwNDQsMzIwNDEsMzIwNjUsMzIwNzEsMzIwNjIsMzIwNjMsMzIwNzQsMzIwNTksMzIwNDAsMzI2''@;'; put 'put ''MTEsMzI2NjEsMzI2NjgsMzI2NjksMzI2NjcsMzI3MTQsMzI3MTUsMzI3MTcsMzI3MjAsMzI3MjEsMzI3MTEsMzI3MTksMzI3MTMsMzI3OTksMzI3OTgsMzI3OTUsMzI4MzksMzI4MzUsMzI4NDAsMzMwNDgsMzMwNjEsMzMwNDksMzMwNTEsMzMwNjksMzMwNTUsMzMwNjgsMzMwNTQsMzMwNTcs''@;'; put 'put ''MzMwNDUsMzMwNjMsMzMwNTMsMzMwNTgsMzMyOTcsMzMzMzYsMzMzMzEsMzMzMzgsMzMzMzIsMzMzMzAsMzMzOTYsMzM2ODAsMzM2OTksMzM3MDQsMzM2NzcsMzM2NTgsMzM2NTEsMzM3MDAsMzM2NTIsMzM2NzksMzM2NjUsMzM2ODUsMzM2ODksMzM2NTMsMzM2ODQsMzM3MDUsMzM2NjEsMzM2''@;'; put 'put ''NjcsMzM2NzYsMzM2OTMsMzM2OTEsMzM3MDYsMzM2NzUsMzM2NjIsMzM3MDEsMzM3MTEsMzM2NzIsMzM2ODcsMzM3MTIsMzM2NjMsMzM3MDIsMzM2NzEsMzM3MTAsMzM2NTQsMzM2OTAsMzQzOTMsMzQzOTAsMzQ0OTUsMzQ0ODcsMzQ0OTgsMzQ0OTcsMzQ1MDEsMzQ0OTAsMzQ0ODAsMzQ1MDQs''@;'; put 'put ''MzQ0ODksMzQ0ODMsMzQ0ODgsMzQ1MDgsMzQ0ODQsMzQ0OTEsMzQ0OTIsMzQ0OTksMzQ0OTMsMzQ0OTQsMzQ4OTgsMzQ5NTMsMzQ5NjUsMzQ5ODQsMzQ5NzgsMzQ5ODYsMzQ5NzAsMzQ5NjEsMzQ5NzcsMzQ5NzUsMzQ5NjgsMzQ5ODMsMzQ5NjksMzQ5NzEsMzQ5NjcsMzQ5ODAsMzQ5ODgsMzQ5''@;'; put 'put ''NTYsMzQ5NjMsMzQ5NTgsMzUyMDIsMzUyODYsMzUyODksMzUyODUsMzUzNzYsMzUzNjcsMzUzNzIsMzUzNTgsMzU4OTcsMzU4OTksMzU5MzIsMzU5MzMsMzU5NjUsMzYwMDUsMzYyMjEsMzYyMTksMzYyMTcsMzYyODQsMzYyOTAsMzYyODEsMzYyODcsMzYyODksMzY1NjgsMzY1NzQsMzY1NzMs''@;'; put 'put ''MzY1NzIsMzY1NjcsMzY1NzYsMzY1NzcsMzY5MDAsMzY4NzUsMzY4ODEsMzY4OTIsMzY4NzYsMzY4OTcsMzcxMDMsMzcwOTgsMzcxMDQsMzcxMDgsMzcxMDYsMzcxMDcsMzcwNzYsMzcwOTksMzcxMDAsMzcwOTcsMzcyMDYsMzcyMDgsMzcyMTAsMzcyMDMsMzcyMDUsMzczNTYsMzczNjQsMzcz''@;'; put 'put ''NjEsMzczNjMsMzczNjgsMzczNDgsMzczNjksMzczNTQsMzczNTUsMzczNjcsMzczNTIsMzczNTgsMzgyNjYsMzgyNzgsMzgyODAsMzg1MjQsMzg1MDksMzg1MDcsMzg1MTMsMzg1MTEsMzg1OTEsMzg3NjIsMzg5MTYsMzkxNDEsMzkzMTksMjA2MzUsMjA2MjksMjA2MjgsMjA2MzgsMjA2MTks''@;'; put 'put ''MjA2NDMsMjA2MTEsMjA2MjAsMjA2MjIsMjA2MzcsMjA1ODQsMjA2MzYsMjA2MjYsMjA2MTAsMjA2MTUsMjA4MzEsMjA5NDgsMjEyNjYsMjEyNjUsMjE0MTIsMjE0MTUsMjE5MDUsMjE5MjgsMjE5MjUsMjE5MzMsMjE4NzksMjIwODUsMjE5MjIsMjE5MDcsMjE4OTYsMjE5MDMsMjE5NDEsMjE4''@;'; put 'put ''ODksMjE5MjMsMjE5MDYsMjE5MjQsMjE4ODUsMjE5MDAsMjE5MjYsMjE4ODcsMjE5MDksMjE5MjEsMjE5MDIsMjIyODQsMjI1NjksMjI1ODMsMjI1NTMsMjI1NTgsMjI1NjcsMjI1NjMsMjI1NjgsMjI1MTcsMjI2MDAsMjI1NjUsMjI1NTYsMjI1NTUsMjI1NzksMjI1OTEsMjI1ODIsMjI1NzQs''@;'; put 'put ''MjI1ODUsMjI1ODQsMjI1NzMsMjI1NzIsMjI1ODcsMjI4ODEsMjMyMTUsMjMxODgsMjMxOTksMjMxNjIsMjMyMDIsMjMxOTgsMjMxNjAsMjMyMDYsMjMxNjQsMjMyMDUsMjMyMTIsMjMxODksMjMyMTQsMjMwOTUsMjMxNzIsMjMxNzgsMjMxOTEsMjMxNzEsMjMxNzksMjMyMDksMjMxNjMsMjMx''@;'; put 'put ''NjUsMjMxODAsMjMxOTYsMjMxODMsMjMxODcsMjMxOTcsMjM1MzAsMjM1MDEsMjM0OTksMjM1MDgsMjM1MDUsMjM0OTgsMjM1MDIsMjM1NjQsMjM2MDAsMjM4NjMsMjM4NzUsMjM5MTUsMjM4NzMsMjM4ODMsMjM4NzEsMjM4NjEsMjM4ODksMjM4ODYsMjM4OTMsMjM4NTksMjM4NjYsMjM4OTAs''@;'; put 'put ''MjM4NjksMjM4NTcsMjM4OTcsMjM4NzQsMjM4NjUsMjM4ODEsMjM4NjQsMjM4NjgsMjM4NTgsMjM4NjIsMjM4NzIsMjM4NzcsMjQxMzIsMjQxMjksMjQ0MDgsMjQ0ODYsMjQ0ODUsMjQ0OTEsMjQ3NzcsMjQ3NjEsMjQ3ODAsMjQ4MDIsMjQ3ODIsMjQ3NzIsMjQ4NTIsMjQ4MTgsMjQ4NDIsMjQ4''@;'; put 'put ''NTQsMjQ4MzcsMjQ4MjEsMjQ4NTEsMjQ4MjQsMjQ4MjgsMjQ4MzAsMjQ3NjksMjQ4MzUsMjQ4NTYsMjQ4NjEsMjQ4NDgsMjQ4MzEsMjQ4MzYsMjQ4NDMsMjUxNjIsMjU0OTIsMjU1MjEsMjU1MjAsMjU1NTAsMjU1NzMsMjU1NzYsMjU1ODMsMjU1MzksMjU3NTcsMjU1ODcsMjU1NDYsMjU1Njgs''@;'; put 'put ''MjU1OTAsMjU1NTcsMjU1ODYsMjU1ODksMjU2OTcsMjU1NjcsMjU1MzQsMjU1NjUsMjU1NjQsMjU1NDAsMjU1NjAsMjU1NTUsMjU1MzgsMjU1NDMsMjU1NDgsMjU1NDcsMjU1NDQsMjU1ODQsMjU1NTksMjU1NjEsMjU5MDYsMjU5NTksMjU5NjIsMjU5NTYsMjU5NDgsMjU5NjAsMjU5NTcsMjU5''@;'; put 'put ''OTYsMjYwMTMsMjYwMTQsMjYwMzAsMjYwNjQsMjYwNjYsMjYyMzYsMjYyMjAsMjYyMzUsMjYyNDAsMjYyMjUsMjYyMzMsMjYyMTgsMjYyMjYsMjYzNjksMjY4OTIsMjY4MzUsMjY4ODQsMjY4NDQsMjY5MjIsMjY4NjAsMjY4NTgsMjY4NjUsMjY4OTUsMjY4MzgsMjY4NzEsMjY4NTksMjY4NTIs''@;'; put 'put ''MjY4NzAsMjY4OTksMjY4OTYsMjY4NjcsMjY4NDksMjY4ODcsMjY4MjgsMjY4ODgsMjY5OTIsMjY4MDQsMjY4OTcsMjY4NjMsMjY4MjIsMjY5MDAsMjY4NzIsMjY4MzIsMjY4NzcsMjY4NzYsMjY4NTYsMjY4OTEsMjY4OTAsMjY5MDMsMjY4MzAsMjY4MjQsMjY4NDUsMjY4NDYsMjY4NTQsMjY4''@;'; put 'put ''NjgsMjY4MzMsMjY4ODYsMjY4MzYsMjY4NTcsMjY5MDEsMjY5MTcsMjY4MjMsMjc0NDksMjc0NTEsMjc0NTUsMjc0NTIsMjc1NDAsMjc1NDMsMjc1NDUsMjc1NDEsMjc1ODEsMjc2MzIsMjc2MzQsMjc2MzUsMjc2OTYsMjgxNTYsMjgyMzAsMjgyMzEsMjgxOTEsMjgyMzMsMjgyOTYsMjgyMjAs''@;'; put 'put ''MjgyMjEsMjgyMjksMjgyNTgsMjgyMDMsMjgyMjMsMjgyMjUsMjgyNTMsMjgyNzUsMjgxODgsMjgyMTEsMjgyMzUsMjgyMjQsMjgyNDEsMjgyMTksMjgxNjMsMjgyMDYsMjgyNTQsMjgyNjQsMjgyNTIsMjgyNTcsMjgyMDksMjgyMDAsMjgyNTYsMjgyNzMsMjgyNjcsMjgyMTcsMjgxOTQsMjgy''@;'; put 'put ''MDgsMjgyNDMsMjgyNjEsMjgxOTksMjgyODAsMjgyNjAsMjgyNzksMjgyNDUsMjgyODEsMjgyNDIsMjgyNjIsMjgyMTMsMjgyMTQsMjgyNTAsMjg5NjAsMjg5NTgsMjg5NzUsMjg5MjMsMjg5NzQsMjg5NzcsMjg5NjMsMjg5NjUsMjg5NjIsMjg5NzgsMjg5NTksMjg5NjgsMjg5ODYsMjg5NTUs''@;'; put 'put ''MjkyNTksMjkyNzQsMjkzMjAsMjkzMjEsMjkzMTgsMjkzMTcsMjkzMjMsMjk0NTgsMjk0NTEsMjk0ODgsMjk0NzQsMjk0ODksMjk0OTEsMjk0NzksMjk0OTAsMjk0ODUsMjk0NzgsMjk0NzUsMjk0OTMsMjk0NTIsMjk3NDIsMjk3NDAsMjk3NDQsMjk3MzksMjk3MTgsMjk3MjIsMjk3MjksMjk3''@;'; put 'put ''NDEsMjk3NDUsMjk3MzIsMjk3MzEsMjk3MjUsMjk3MzcsMjk3MjgsMjk3NDYsMjk5NDcsMjk5OTksMzAwNjMsMzAwNjAsMzAxODMsMzAxNzAsMzAxNzcsMzAxODIsMzAxNzMsMzAxNzUsMzAxODAsMzAxNjcsMzAzNTcsMzAzNTQsMzA0MjYsMzA1MzQsMzA1MzUsMzA1MzIsMzA1NDEsMzA1MzMs''@;'; put 'put ''MzA1MzgsMzA1NDIsMzA1MzksMzA1NDAsMzA2ODYsMzA3MDAsMzA4MTYsMzA4MjAsMzA4MjEsMzA4MTIsMzA4MjksMzA4MzMsMzA4MjYsMzA4MzAsMzA4MzIsMzA4MjUsMzA4MjQsMzA4MTQsMzA4MTgsMzEwOTIsMzEwOTEsMzEwOTAsMzEwODgsMzEyMzQsMzEyNDIsMzEyMzUsMzEyNDQsMzEy''@;'; put 'put ''MzYsMzEzODUsMzE0NjIsMzE0NjAsMzE1NjIsMzE1NDcsMzE1NTYsMzE1NjAsMzE1NjQsMzE1NjYsMzE1NTIsMzE1NzYsMzE1NTcsMzE5MDYsMzE5MDIsMzE5MTIsMzE5MDUsMzIwODgsMzIxMTEsMzIwOTksMzIwODMsMzIwODYsMzIxMDMsMzIxMDYsMzIwNzksMzIxMDksMzIwOTIsMzIxMDcs''@;'; put 'put ''MzIwODIsMzIwODQsMzIxMDUsMzIwODEsMzIwOTUsMzIwNzgsMzI1NzQsMzI1NzUsMzI2MTMsMzI2MTQsMzI2NzQsMzI2NzIsMzI2NzMsMzI3MjcsMzI4NDksMzI4NDcsMzI4NDgsMzMwMjIsMzI5ODAsMzMwOTEsMzMwOTgsMzMxMDYsMzMxMDMsMzMwOTUsMzMwODUsMzMxMDEsMzMwODIsMzMy''@;'; put 'put ''NTQsMzMyNjIsMzMyNzEsMzMyNzIsMzMyNzMsMzMyODQsMzMzNDAsMzMzNDEsMzMzNDMsMzMzOTcsMzM1OTUsMzM3NDMsMzM3ODUsMzM4MjcsMzM3MjgsMzM3NjgsMzM4MTAsMzM3NjcsMzM3NjQsMzM3ODgsMzM3ODIsMzM4MDgsMzM3MzQsMzM3MzYsMzM3NzEsMzM3NjMsMzM3MjcsMzM3OTMs''@;'; put 'put ''MzM3NTcsMzM3NjUsMzM3NTIsMzM3OTEsMzM3NjEsMzM3MzksMzM3NDIsMzM3NTAsMzM3ODEsMzM3MzcsMzM4MDEsMzM4MDcsMzM3NTgsMzM4MDksMzM3OTgsMzM3MzAsMzM3NzksMzM3NDksMzM3ODYsMzM3MzUsMzM3NDUsMzM3NzAsMzM4MTEsMzM3MzEsMzM3NzIsMzM3NzQsMzM3MzIsMzM3''@;'; put 'put ''ODcsMzM3NTEsMzM3NjIsMzM4MTksMzM3NTUsMzM3OTAsMzQ1MjAsMzQ1MzAsMzQ1MzQsMzQ1MTUsMzQ1MzEsMzQ1MjIsMzQ1MzgsMzQ1MjUsMzQ1MzksMzQ1MjQsMzQ1NDAsMzQ1MzcsMzQ1MTksMzQ1MzYsMzQ1MTMsMzQ4ODgsMzQ5MDIsMzQ5MDEsMzUwMDIsMzUwMzEsMzUwMDEsMzVlMywz''@;'; put 'put ''NTAwOCwzNTAwNiwzNDk5OCwzNTAwNCwzNDk5OSwzNTAwNSwzNDk5NCwzNTA3MywzNTAxNywzNTIyMSwzNTIyNCwzNTIyMywzNTI5MywzNTI5MCwzNTI5MSwzNTQwNiwzNTQwNSwzNTM4NSwzNTQxNywzNTM5MiwzNTQxNSwzNTQxNiwzNTM5NiwzNTM5NywzNTQxMCwzNTQwMCwzNTQwOSwzNTQw''@;'; put 'put ''MiwzNTQwNCwzNTQwNywzNTkzNSwzNTk2OSwzNTk2OCwzNjAyNiwzNjAzMCwzNjAxNiwzNjAyNSwzNjAyMSwzNjIyOCwzNjIyNCwzNjIzMywzNjMxMiwzNjMwNywzNjMwMSwzNjI5NSwzNjMxMCwzNjMxNiwzNjMwMywzNjMwOSwzNjMxMywzNjI5NiwzNjMxMSwzNjI5MywzNjU5MSwzNjU5OSwz''@;'; put 'put ''NjYwMiwzNjYwMSwzNjU4MiwzNjU5MCwzNjU4MSwzNjU5NywzNjU4MywzNjU4NCwzNjU5OCwzNjU4NywzNjU5MywzNjU4OCwzNjU5NiwzNjU4NSwzNjkwOSwzNjkxNiwzNjkxMSwzNzEyNiwzNzE2NCwzNzEyNCwzNzExOSwzNzExNiwzNzEyOCwzNzExMywzNzExNSwzNzEyMSwzNzEyMCwzNzEy''@;'; put 'put ''NywzNzEyNSwzNzEyMywzNzIxNywzNzIyMCwzNzIxNSwzNzIxOCwzNzIxNiwzNzM3NywzNzM4NiwzNzQxMywzNzM3OSwzNzQwMiwzNzQxNCwzNzM5MSwzNzM4OCwzNzM3NiwzNzM5NCwzNzM3NSwzNzM3MywzNzM4MiwzNzM4MCwzNzQxNSwzNzM3OCwzNzQwNCwzNzQxMiwzNzQwMSwzNzM5OSwz''@;'; put 'put ''NzM4MSwzNzM5OCwzODI2NywzODI4NSwzODI4NCwzODI4OCwzODUzNSwzODUyNiwzODUzNiwzODUzNywzODUzMSwzODUyOCwzODU5NCwzODYwMCwzODU5NSwzODY0MSwzODY0MCwzODc2NCwzODc2OCwzODc2NiwzODkxOSwzOTA4MSwzOTE0Nyw0MDE2Niw0MDY5NywyMDA5OSwyMDEwMCwyMDE1''@;'; put 'put ''MCwyMDY2OSwyMDY3MSwyMDY3OCwyMDY1NCwyMDY3NiwyMDY4MiwyMDY2MCwyMDY4MCwyMDY3NCwyMDY1NiwyMDY3MywyMDY2NiwyMDY1NywyMDY4MywyMDY4MSwyMDY2MiwyMDY2NCwyMDk1MSwyMTExNCwyMTExMiwyMTExNSwyMTExNiwyMTk1NSwyMTk3OSwyMTk2NCwyMTk2OCwyMTk2Mywy''@;'; put 'put ''MTk2MiwyMTk4MSwyMTk1MiwyMTk3MiwyMTk1NiwyMTk5MywyMTk1MSwyMTk3MCwyMTkwMSwyMTk2NywyMTk3MywyMTk4NiwyMTk3NCwyMTk2MCwyMjAwMiwyMTk2NSwyMTk3NywyMTk1NCwyMjI5MiwyMjYxMSwyMjYzMiwyMjYyOCwyMjYwNywyMjYwNSwyMjYwMSwyMjYzOSwyMjYxMywyMjYw''@;'; put 'put ''NiwyMjYyMSwyMjYxNywyMjYyOSwyMjYxOSwyMjU4OSwyMjYyNywyMjY0MSwyMjc4MCwyMzIzOSwyMzIzNiwyMzI0MywyMzIyNiwyMzIyNCwyMzIxNywyMzIyMSwyMzIxNiwyMzIzMSwyMzI0MCwyMzIyNywyMzIzOCwyMzIyMywyMzIzMiwyMzI0MiwyMzIyMCwyMzIyMiwyMzI0NSwyMzIyNSwy''@;'; put 'put ''MzE4NCwyMzUxMCwyMzUxMiwyMzUxMywyMzU4MywyMzYwMywyMzkyMSwyMzkwNywyMzg4MiwyMzkwOSwyMzkyMiwyMzkxNiwyMzkwMiwyMzkxMiwyMzkxMSwyMzkwNiwyNDA0OCwyNDE0MywyNDE0MiwyNDEzOCwyNDE0MSwyNDEzOSwyNDI2MSwyNDI2OCwyNDI2MiwyNDI2NywyNDI2MywyNDM4''@;'; put 'put ''NCwyNDQ5NSwyNDQ5MywyNDgyMywyNDkwNSwyNDkwNiwyNDg3NSwyNDkwMSwyNDg4NiwyNDg4MiwyNDg3OCwyNDkwMiwyNDg3OSwyNDkxMSwyNDg3MywyNDg5NiwyNTEyMCwzNzIyNCwyNTEyMywyNTEyNSwyNTEyNCwyNTU0MSwyNTU4NSwyNTU3OSwyNTYxNiwyNTYxOCwyNTYwOSwyNTYzMiwy''@;'; put 'put ''NTYzNiwyNTY1MSwyNTY2NywyNTYzMSwyNTYyMSwyNTYyNCwyNTY1NywyNTY1NSwyNTYzNCwyNTYzNSwyNTYxMiwyNTYzOCwyNTY0OCwyNTY0MCwyNTY2NSwyNTY1MywyNTY0NywyNTYxMCwyNTYyNiwyNTY2NCwyNTYzNywyNTYzOSwyNTYxMSwyNTU3NSwyNTYyNywyNTY0NiwyNTYzMywyNTYx''@;'; put 'put ''NCwyNTk2NywyNjAwMiwyNjA2NywyNjI0NiwyNjI1MiwyNjI2MSwyNjI1NiwyNjI1MSwyNjI1MCwyNjI2NSwyNjI2MCwyNjIzMiwyNjQwMCwyNjk4MiwyNjk3NSwyNjkzNiwyNjk1OCwyNjk3OCwyNjk5MywyNjk0MywyNjk0OSwyNjk4NiwyNjkzNywyNjk0NiwyNjk2NywyNjk2OSwyNzAwMiwy''@;'; put 'put ''Njk1MiwyNjk1MywyNjkzMywyNjk4OCwyNjkzMSwyNjk0MSwyNjk4MSwyNjg2NCwyN2UzLDI2OTMyLDI2OTg1LDI2OTQ0LDI2OTkxLDI2OTQ4LDI2OTk4LDI2OTY4LDI2OTQ1LDI2OTk2LDI2OTU2LDI2OTM5LDI2OTU1LDI2OTM1LDI2OTcyLDI2OTU5LDI2OTYxLDI2OTMwLDI2OTYyLDI2OTI3''@;'; put 'put ''LDI3MDAzLDI2OTQwLDI3NDYyLDI3NDYxLDI3NDU5LDI3NDU4LDI3NDY0LDI3NDU3LDI3NTQ3LDY0MDEzLDI3NjQzLDI3NjQ0LDI3NjQxLDI3NjM5LDI3NjQwLDI4MzE1LDI4Mzc0LDI4MzYwLDI4MzAzLDI4MzUyLDI4MzE5LDI4MzA3LDI4MzA4LDI4MzIwLDI4MzM3LDI4MzQ1LDI4MzU4LDI4''@;'; put 'put ''MzcwLDI4MzQ5LDI4MzUzLDI4MzE4LDI4MzYxLDI4MzQzLDI4MzM2LDI4MzY1LDI4MzI2LDI4MzY3LDI4MzM4LDI4MzUwLDI4MzU1LDI4MzgwLDI4Mzc2LDI4MzEzLDI4MzA2LDI4MzAyLDI4MzAxLDI4MzI0LDI4MzIxLDI4MzUxLDI4MzM5LDI4MzY4LDI4MzYyLDI4MzExLDI4MzM0LDI4MzIz''@;'; put 'put ''LDI4OTk5LDI5MDEyLDI5MDEwLDI5MDI3LDI5MDI0LDI4OTkzLDI5MDIxLDI5MDI2LDI5MDQyLDI5MDQ4LDI5MDM0LDI5MDI1LDI4OTk0LDI5MDE2LDI4OTk1LDI5MDAzLDI5MDQwLDI5MDIzLDI5MDA4LDI5MDExLDI4OTk2LDI5MDA1LDI5MDE4LDI5MjYzLDI5MzI1LDI5MzI0LDI5MzI5LDI5''@;'; put 'put ''MzI4LDI5MzI2LDI5NTAwLDI5NTA2LDI5NDk5LDI5NDk4LDI5NTA0LDI5NTE0LDI5NTEzLDI5NzY0LDI5NzcwLDI5NzcxLDI5Nzc4LDI5Nzc3LDI5NzgzLDI5NzYwLDI5Nzc1LDI5Nzc2LDI5Nzc0LDI5NzYyLDI5NzY2LDI5NzczLDI5NzgwLDI5OTIxLDI5OTUxLDI5OTUwLDI5OTQ5LDI5OTgx''@;'; put 'put ''LDMwMDczLDMwMDcxLDI3MDExLDMwMTkxLDMwMjIzLDMwMjExLDMwMTk5LDMwMjA2LDMwMjA0LDMwMjAxLDMwMjAwLDMwMjI0LDMwMjAzLDMwMTk4LDMwMTg5LDMwMTk3LDMwMjA1LDMwMzYxLDMwMzg5LDMwNDI5LDMwNTQ5LDMwNTU5LDMwNTYwLDMwNTQ2LDMwNTUwLDMwNTU0LDMwNTY5LDMw''@;'; put 'put ''NTY3LDMwNTQ4LDMwNTUzLDMwNTczLDMwNjg4LDMwODU1LDMwODc0LDMwODY4LDMwODYzLDMwODUyLDMwODY5LDMwODUzLDMwODU0LDMwODgxLDMwODUxLDMwODQxLDMwODczLDMwODQ4LDMwODcwLDMwODQzLDMxMTAwLDMxMTA2LDMxMTAxLDMxMDk3LDMxMjQ5LDMxMjU2LDMxMjU3LDMxMjUw''@;'; put 'put ''LDMxMjU1LDMxMjUzLDMxMjY2LDMxMjUxLDMxMjU5LDMxMjQ4LDMxMzk1LDMxMzk0LDMxMzkwLDMxNDY3LDMxNTkwLDMxNTg4LDMxNTk3LDMxNjA0LDMxNTkzLDMxNjAyLDMxNTg5LDMxNjAzLDMxNjAxLDMxNjAwLDMxNTg1LDMxNjA4LDMxNjA2LDMxNTg3LDMxOTIyLDMxOTI0LDMxOTE5LDMy''@;'; put 'put ''MTM2LDMyMTM0LDMyMTI4LDMyMTQxLDMyMTI3LDMyMTMzLDMyMTIyLDMyMTQyLDMyMTIzLDMyMTMxLDMyMTI0LDMyMTQwLDMyMTQ4LDMyMTMyLDMyMTI1LDMyMTQ2LDMyNjIxLDMyNjE5LDMyNjE1LDMyNjE2LDMyNjIwLDMyNjc4LDMyNjc3LDMyNjc5LDMyNzMxLDMyNzMyLDMyODAxLDMzMTI0''@;'; put 'put ''LDMzMTIwLDMzMTQzLDMzMTE2LDMzMTI5LDMzMTE1LDMzMTIyLDMzMTM4LDI2NDAxLDMzMTE4LDMzMTQyLDMzMTI3LDMzMTM1LDMzMDkyLDMzMTIxLDMzMzA5LDMzMzUzLDMzMzQ4LDMzMzQ0LDMzMzQ2LDMzMzQ5LDM0MDMzLDMzODU1LDMzODc4LDMzOTEwLDMzOTEzLDMzOTM1LDMzOTMzLDMz''@;'; put 'put ''ODkzLDMzODczLDMzODU2LDMzOTI2LDMzODk1LDMzODQwLDMzODY5LDMzOTE3LDMzODgyLDMzODgxLDMzOTA4LDMzOTA3LDMzODg1LDM0MDU1LDMzODg2LDMzODQ3LDMzODUwLDMzODQ0LDMzOTE0LDMzODU5LDMzOTEyLDMzODQyLDMzODYxLDMzODMzLDMzNzUzLDMzODY3LDMzODM5LDMzODU4''@;'; put 'put ''LDMzODM3LDMzODg3LDMzOTA0LDMzODQ5LDMzODcwLDMzODY4LDMzODc0LDMzOTAzLDMzOTg5LDMzOTM0LDMzODUxLDMzODYzLDMzODQ2LDMzODQzLDMzODk2LDMzOTE4LDMzODYwLDMzODM1LDMzODg4LDMzODc2LDMzOTAyLDMzODcyLDM0NTcxLDM0NTY0LDM0NTUxLDM0NTcyLDM0NTU0LDM0''@;'; put 'put ''NTE4LDM0NTQ5LDM0NjM3LDM0NTUyLDM0NTc0LDM0NTY5LDM0NTYxLDM0NTUwLDM0NTczLDM0NTY1LDM1MDMwLDM1MDE5LDM1MDIxLDM1MDIyLDM1MDM4LDM1MDM1LDM1MDM0LDM1MDIwLDM1MDI0LDM1MjA1LDM1MjI3LDM1Mjk1LDM1MzAxLDM1MzAwLDM1Mjk3LDM1Mjk2LDM1Mjk4LDM1Mjky''@;'; put 'put ''LDM1MzAyLDM1NDQ2LDM1NDYyLDM1NDU1LDM1NDI1LDM1MzkxLDM1NDQ3LDM1NDU4LDM1NDYwLDM1NDQ1LDM1NDU5LDM1NDU3LDM1NDQ0LDM1NDUwLDM1OTAwLDM1OTE1LDM1OTE0LDM1OTQxLDM1OTQwLDM1OTQyLDM1OTc0LDM1OTcyLDM1OTczLDM2MDQ0LDM2MjAwLDM2MjAxLDM2MjQxLDM2''@;'; put 'put ''MjM2LDM2MjM4LDM2MjM5LDM2MjM3LDM2MjQzLDM2MjQ0LDM2MjQwLDM2MjQyLDM2MzM2LDM2MzIwLDM2MzMyLDM2MzM3LDM2MzM0LDM2MzA0LDM2MzI5LDM2MzIzLDM2MzIyLDM2MzI3LDM2MzM4LDM2MzMxLDM2MzQwLDM2NjE0LDM2NjA3LDM2NjA5LDM2NjA4LDM2NjEzLDM2NjE1LDM2NjE2''@;'; put 'put ''LDM2NjEwLDM2NjE5LDM2OTQ2LDM2OTI3LDM2OTMyLDM2OTM3LDM2OTI1LDM3MTM2LDM3MTMzLDM3MTM1LDM3MTM3LDM3MTQyLDM3MTQwLDM3MTMxLDM3MTM0LDM3MjMwLDM3MjMxLDM3NDQ4LDM3NDU4LDM3NDI0LDM3NDM0LDM3NDc4LDM3NDI3LDM3NDc3LDM3NDcwLDM3NTA3LDM3NDIyLDM3''@;'; put 'put ''NDUwLDM3NDQ2LDM3NDg1LDM3NDg0LDM3NDU1LDM3NDcyLDM3NDc5LDM3NDg3LDM3NDMwLDM3NDczLDM3NDg4LDM3NDI1LDM3NDYwLDM3NDc1LDM3NDU2LDM3NDkwLDM3NDU0LDM3NDU5LDM3NDUyLDM3NDYyLDM3NDI2LDM4MzAzLDM4MzAwLDM4MzAyLDM4Mjk5LDM4NTQ2LDM4NTQ3LDM4NTQ1''@;'; put 'put ''LDM4NTUxLDM4NjA2LDM4NjUwLDM4NjUzLDM4NjQ4LDM4NjQ1LDM4NzcxLDM4Nzc1LDM4Nzc2LDM4NzcwLDM4OTI3LDM4OTI1LDM4OTI2LDM5MDg0LDM5MTU4LDM5MTYxLDM5MzQzLDM5MzQ2LDM5MzQ0LDM5MzQ5LDM5NTk3LDM5NTk1LDM5NzcxLDQwMTcwLDQwMTczLDQwMTY3LDQwNTc2LDQw''@;'; put 'put ''NzAxLDIwNzEwLDIwNjkyLDIwNjk1LDIwNzEyLDIwNzIzLDIwNjk5LDIwNzE0LDIwNzAxLDIwNzA4LDIwNjkxLDIwNzE2LDIwNzIwLDIwNzE5LDIwNzA3LDIwNzA0LDIwOTUyLDIxMTIwLDIxMTIxLDIxMjI1LDIxMjI3LDIxMjk2LDIxNDIwLDIyMDU1LDIyMDM3LDIyMDI4LDIyMDM0LDIyMDEy''@;'; put 'put ''LDIyMDMxLDIyMDQ0LDIyMDE3LDIyMDM1LDIyMDE4LDIyMDEwLDIyMDQ1LDIyMDIwLDIyMDE1LDIyMDA5LDIyNjY1LDIyNjUyLDIyNjcyLDIyNjgwLDIyNjYyLDIyNjU3LDIyNjU1LDIyNjQ0LDIyNjY3LDIyNjUwLDIyNjYzLDIyNjczLDIyNjcwLDIyNjQ2LDIyNjU4LDIyNjY0LDIyNjUxLDIy''@;'; put 'put ''Njc2LDIyNjcxLDIyNzgyLDIyODkxLDIzMjYwLDIzMjc4LDIzMjY5LDIzMjUzLDIzMjc0LDIzMjU4LDIzMjc3LDIzMjc1LDIzMjgzLDIzMjY2LDIzMjY0LDIzMjU5LDIzMjc2LDIzMjYyLDIzMjYxLDIzMjU3LDIzMjcyLDIzMjYzLDIzNDE1LDIzNTIwLDIzNTIzLDIzNjUxLDIzOTM4LDIzOTM2''@;'; put 'put ''LDIzOTMzLDIzOTQyLDIzOTMwLDIzOTM3LDIzOTI3LDIzOTQ2LDIzOTQ1LDIzOTQ0LDIzOTM0LDIzOTMyLDIzOTQ5LDIzOTI5LDIzOTM1LDI0MTUyLDI0MTUzLDI0MTQ3LDI0MjgwLDI0MjczLDI0Mjc5LDI0MjcwLDI0Mjg0LDI0Mjc3LDI0MjgxLDI0Mjc0LDI0Mjc2LDI0Mzg4LDI0Mzg3LDI0''@;'; put 'put ''NDMxLDI0NTAyLDI0ODc2LDI0ODcyLDI0ODk3LDI0OTI2LDI0OTQ1LDI0OTQ3LDI0OTE0LDI0OTE1LDI0OTQ2LDI0OTQwLDI0OTYwLDI0OTQ4LDI0OTE2LDI0OTU0LDI0OTIzLDI0OTMzLDI0ODkxLDI0OTM4LDI0OTI5LDI0OTE4LDI1MTI5LDI1MTI3LDI1MTMxLDI1NjQzLDI1Njc3LDI1Njkx''@;'; put 'put ''LDI1NjkzLDI1NzE2LDI1NzE4LDI1NzE0LDI1NzE1LDI1NzI1LDI1NzE3LDI1NzAyLDI1NzY2LDI1Njc4LDI1NzMwLDI1Njk0LDI1NjkyLDI1Njc1LDI1NjgzLDI1Njk2LDI1NjgwLDI1NzI3LDI1NjYzLDI1NzA4LDI1NzA3LDI1Njg5LDI1NzAxLDI1NzE5LDI1OTcxLDI2MDE2LDI2MjczLDI2''@;'; put 'put ''MjcyLDI2MjcxLDI2MzczLDI2MzcyLDI2NDAyLDI3MDU3LDI3MDYyLDI3MDgxLDI3MDQwLDI3MDg2LDI3MDMwLDI3MDU2LDI3MDUyLDI3MDY4LDI3MDI1LDI3MDMzLDI3MDIyLDI3MDQ3LDI3MDIxLDI3MDQ5LDI3MDcwLDI3MDU1LDI3MDcxLDI3MDc2LDI3MDY5LDI3MDQ0LDI3MDkyLDI3MDY1''@;'; put 'put ''LDI3MDgyLDI3MDM0LDI3MDg3LDI3MDU5LDI3MDI3LDI3MDUwLDI3MDQxLDI3MDM4LDI3MDk3LDI3MDMxLDI3MDI0LDI3MDc0LDI3MDYxLDI3MDQ1LDI3MDc4LDI3NDY2LDI3NDY5LDI3NDY3LDI3NTUwLDI3NTUxLDI3NTUyLDI3NTg3LDI3NTg4LDI3NjQ2LDI4MzY2LDI4NDA1LDI4NDAxLDI4''@;'; put 'put ''NDE5LDI4NDUzLDI4NDA4LDI4NDcxLDI4NDExLDI4NDYyLDI4NDI1LDI4NDk0LDI4NDQxLDI4NDQyLDI4NDU1LDI4NDQwLDI4NDc1LDI4NDM0LDI4Mzk3LDI4NDI2LDI4NDcwLDI4NTMxLDI4NDA5LDI4Mzk4LDI4NDYxLDI4NDgwLDI4NDY0LDI4NDc2LDI4NDY5LDI4Mzk1LDI4NDIzLDI4NDMw''@;'; put 'put ''LDI4NDgzLDI4NDIxLDI4NDEzLDI4NDA2LDI4NDczLDI4NDQ0LDI4NDEyLDI4NDc0LDI4NDQ3LDI4NDI5LDI4NDQ2LDI4NDI0LDI4NDQ5LDI5MDYzLDI5MDcyLDI5MDY1LDI5MDU2LDI5MDYxLDI5MDU4LDI5MDcxLDI5MDUxLDI5MDYyLDI5MDU3LDI5MDc5LDI5MjUyLDI5MjY3LDI5MzM1LDI5''@;'; put 'put ''MzMzLDI5MzMxLDI5NTA3LDI5NTE3LDI5NTIxLDI5NTE2LDI5Nzk0LDI5ODExLDI5ODA5LDI5ODEzLDI5ODEwLDI5Nzk5LDI5ODA2LDI5OTUyLDI5OTU0LDI5OTU1LDMwMDc3LDMwMDk2LDMwMjMwLDMwMjE2LDMwMjIwLDMwMjI5LDMwMjI1LDMwMjE4LDMwMjI4LDMwMzkyLDMwNTkzLDMwNTg4''@;'; put 'put ''LDMwNTk3LDMwNTk0LDMwNTc0LDMwNTkyLDMwNTc1LDMwNTkwLDMwNTk1LDMwODk4LDMwODkwLDMwOTAwLDMwODkzLDMwODg4LDMwODQ2LDMwODkxLDMwODc4LDMwODg1LDMwODgwLDMwODkyLDMwODgyLDMwODg0LDMxMTI4LDMxMTE0LDMxMTE1LDMxMTI2LDMxMTI1LDMxMTI0LDMxMTIzLDMx''@;'; put 'put ''MTI3LDMxMTEyLDMxMTIyLDMxMTIwLDMxMjc1LDMxMzA2LDMxMjgwLDMxMjc5LDMxMjcyLDMxMjcwLDMxNDAwLDMxNDAzLDMxNDA0LDMxNDcwLDMxNjI0LDMxNjQ0LDMxNjI2LDMxNjMzLDMxNjMyLDMxNjM4LDMxNjI5LDMxNjI4LDMxNjQzLDMxNjMwLDMxNjIxLDMxNjQwLDIxMTI0LDMxNjQx''@;'; put 'put ''LDMxNjUyLDMxNjE4LDMxOTMxLDMxOTM1LDMxOTMyLDMxOTMwLDMyMTY3LDMyMTgzLDMyMTk0LDMyMTYzLDMyMTcwLDMyMTkzLDMyMTkyLDMyMTk3LDMyMTU3LDMyMjA2LDMyMTk2LDMyMTk4LDMyMjAzLDMyMjA0LDMyMTc1LDMyMTg1LDMyMTUwLDMyMTg4LDMyMTU5LDMyMTY2LDMyMTc0LDMy''@;'; put 'put ''MTY5LDMyMTYxLDMyMjAxLDMyNjI3LDMyNzM4LDMyNzM5LDMyNzQxLDMyNzM0LDMyODA0LDMyODYxLDMyODYwLDMzMTYxLDMzMTU4LDMzMTU1LDMzMTU5LDMzMTY1LDMzMTY0LDMzMTYzLDMzMzAxLDMzOTQzLDMzOTU2LDMzOTUzLDMzOTUxLDMzOTc4LDMzOTk4LDMzOTg2LDMzOTY0LDMzOTY2''@;'; put 'put ''LDMzOTYzLDMzOTc3LDMzOTcyLDMzOTg1LDMzOTk3LDMzOTYyLDMzOTQ2LDMzOTY5LDM0ZTMsMzM5NDksMzM5NTksMzM5NzksMzM5NTQsMzM5NDAsMzM5OTEsMzM5OTYsMzM5NDcsMzM5NjEsMzM5NjcsMzM5NjAsMzQwMDYsMzM5NDQsMzM5NzQsMzM5OTksMzM5NTIsMzQwMDcsMzQwMDQsMzQw''@;'; put 'put ''MDIsMzQwMTEsMzM5NjgsMzM5MzcsMzQ0MDEsMzQ2MTEsMzQ1OTUsMzQ2MDAsMzQ2NjcsMzQ2MjQsMzQ2MDYsMzQ1OTAsMzQ1OTMsMzQ1ODUsMzQ1ODcsMzQ2MjcsMzQ2MDQsMzQ2MjUsMzQ2MjIsMzQ2MzAsMzQ1OTIsMzQ2MTAsMzQ2MDIsMzQ2MDUsMzQ2MjAsMzQ1NzgsMzQ2MTgsMzQ2MDks''@;'; put 'put ''MzQ2MTMsMzQ2MjYsMzQ1OTgsMzQ1OTksMzQ2MTYsMzQ1OTYsMzQ1ODYsMzQ2MDgsMzQ1NzcsMzUwNjMsMzUwNDcsMzUwNTcsMzUwNTgsMzUwNjYsMzUwNzAsMzUwNTQsMzUwNjgsMzUwNjIsMzUwNjcsMzUwNTYsMzUwNTIsMzUwNTEsMzUyMjksMzUyMzMsMzUyMzEsMzUyMzAsMzUzMDUsMzUz''@;'; put 'put ''MDcsMzUzMDQsMzU0OTksMzU0ODEsMzU0NjcsMzU0NzQsMzU0NzEsMzU0NzgsMzU5MDEsMzU5NDQsMzU5NDUsMzYwNTMsMzYwNDcsMzYwNTUsMzYyNDYsMzYzNjEsMzYzNTQsMzYzNTEsMzYzNjUsMzYzNDksMzYzNjIsMzYzNTUsMzYzNTksMzYzNTgsMzYzNTcsMzYzNTAsMzYzNTIsMzYzNTYs''@;'; put 'put ''MzY2MjQsMzY2MjUsMzY2MjIsMzY2MjEsMzcxNTUsMzcxNDgsMzcxNTIsMzcxNTQsMzcxNTEsMzcxNDksMzcxNDYsMzcxNTYsMzcxNTMsMzcxNDcsMzcyNDIsMzcyMzQsMzcyNDEsMzcyMzUsMzc1NDEsMzc1NDAsMzc0OTQsMzc1MzEsMzc0OTgsMzc1MzYsMzc1MjQsMzc1NDYsMzc1MTcsMzc1''@;'; put 'put ''NDIsMzc1MzAsMzc1NDcsMzc0OTcsMzc1MjcsMzc1MDMsMzc1MzksMzc2MTQsMzc1MTgsMzc1MDYsMzc1MjUsMzc1MzgsMzc1MDEsMzc1MTIsMzc1MzcsMzc1MTQsMzc1MTAsMzc1MTYsMzc1MjksMzc1NDMsMzc1MDIsMzc1MTEsMzc1NDUsMzc1MzMsMzc1MTUsMzc0MjEsMzg1NTgsMzg1NjEs''@;'; put 'put ''Mzg2NTUsMzg3NDQsMzg3ODEsMzg3NzgsMzg3ODIsMzg3ODcsMzg3ODQsMzg3ODYsMzg3NzksMzg3ODgsMzg3ODUsMzg3ODMsMzg4NjIsMzg4NjEsMzg5MzQsMzkwODUsMzkwODYsMzkxNzAsMzkxNjgsMzkxNzUsMzkzMjUsMzkzMjQsMzkzNjMsMzkzNTMsMzkzNTUsMzkzNTQsMzkzNjIsMzkz''@;'; put 'put ''NTcsMzkzNjcsMzk2MDEsMzk2NTEsMzk2NTUsMzk3NDIsMzk3NDMsMzk3NzYsMzk3NzcsMzk3NzUsNDAxNzcsNDAxNzgsNDAxODEsNDA2MTUsMjA3MzUsMjA3MzksMjA3ODQsMjA3MjgsMjA3NDIsMjA3NDMsMjA3MjYsMjA3MzQsMjA3NDcsMjA3NDgsMjA3MzMsMjA3NDYsMjExMzEsMjExMzIs''@;'; put 'put ''MjEyMzMsMjEyMzEsMjIwODgsMjIwODIsMjIwOTIsMjIwNjksMjIwODEsMjIwOTAsMjIwODksMjIwODYsMjIxMDQsMjIxMDYsMjIwODAsMjIwNjcsMjIwNzcsMjIwNjAsMjIwNzgsMjIwNzIsMjIwNTgsMjIwNzQsMjIyOTgsMjI2OTksMjI2ODUsMjI3MDUsMjI2ODgsMjI2OTEsMjI3MDMsMjI3''@;'; put 'put ''MDAsMjI2OTMsMjI2ODksMjI3ODMsMjMyOTUsMjMyODQsMjMyOTMsMjMyODcsMjMyODYsMjMyOTksMjMyODgsMjMyOTgsMjMyODksMjMyOTcsMjMzMDMsMjMzMDEsMjMzMTEsMjM2NTUsMjM5NjEsMjM5NTksMjM5NjcsMjM5NTQsMjM5NzAsMjM5NTUsMjM5NTcsMjM5NjgsMjM5NjQsMjM5Njks''@;'; put 'put ''MjM5NjIsMjM5NjYsMjQxNjksMjQxNTcsMjQxNjAsMjQxNTYsMzIyNDMsMjQyODMsMjQyODYsMjQyODksMjQzOTMsMjQ0OTgsMjQ5NzEsMjQ5NjMsMjQ5NTMsMjUwMDksMjUwMDgsMjQ5OTQsMjQ5NjksMjQ5ODcsMjQ5NzksMjUwMDcsMjUwMDUsMjQ5OTEsMjQ5NzgsMjUwMDIsMjQ5OTMsMjQ5''@;'; put 'put ''NzMsMjQ5MzQsMjUwMTEsMjUxMzMsMjU3MTAsMjU3MTIsMjU3NTAsMjU3NjAsMjU3MzMsMjU3NTEsMjU3NTYsMjU3NDMsMjU3MzksMjU3MzgsMjU3NDAsMjU3NjMsMjU3NTksMjU3MDQsMjU3NzcsMjU3NTIsMjU5NzQsMjU5NzgsMjU5NzcsMjU5NzksMjYwMzQsMjYwMzUsMjYyOTMsMjYyODgs''@;'; put 'put ''MjYyODEsMjYyOTAsMjYyOTUsMjYyODIsMjYyODcsMjcxMzYsMjcxNDIsMjcxNTksMjcxMDksMjcxMjgsMjcxNTcsMjcxMjEsMjcxMDgsMjcxNjgsMjcxMzUsMjcxMTYsMjcxMDYsMjcxNjMsMjcxNjUsMjcxMzQsMjcxNzUsMjcxMjIsMjcxMTgsMjcxNTYsMjcxMjcsMjcxMTEsMjcyMDAsMjcx''@;'; put 'put ''NDQsMjcxMTAsMjcxMzEsMjcxNDksMjcxMzIsMjcxMTUsMjcxNDUsMjcxNDAsMjcxNjAsMjcxNzMsMjcxNTEsMjcxMjYsMjcxNzQsMjcxNDMsMjcxMjQsMjcxNTgsMjc0NzMsMjc1NTcsMjc1NTUsMjc1NTQsMjc1NTgsMjc2NDksMjc2NDgsMjc2NDcsMjc2NTAsMjg0ODEsMjg0NTQsMjg1NDIs''@;'; put 'put ''Mjg1NTEsMjg2MTQsMjg1NjIsMjg1NTcsMjg1NTMsMjg1NTYsMjg1MTQsMjg0OTUsMjg1NDksMjg1MDYsMjg1NjYsMjg1MzQsMjg1MjQsMjg1NDYsMjg1MDEsMjg1MzAsMjg0OTgsMjg0OTYsMjg1MDMsMjg1NjQsMjg1NjMsMjg1MDksMjg0MTYsMjg1MTMsMjg1MjMsMjg1NDEsMjg1MTksMjg1''@;'; put 'put ''NjAsMjg0OTksMjg1NTUsMjg1MjEsMjg1NDMsMjg1NjUsMjg1MTUsMjg1MzUsMjg1MjIsMjg1MzksMjkxMDYsMjkxMDMsMjkwODMsMjkxMDQsMjkwODgsMjkwODIsMjkwOTcsMjkxMDksMjkwODUsMjkwOTMsMjkwODYsMjkwOTIsMjkwODksMjkwOTgsMjkwODQsMjkwOTUsMjkxMDcsMjkzMzYs''@;'; put 'put ''MjkzMzgsMjk1MjgsMjk1MjIsMjk1MzQsMjk1MzUsMjk1MzYsMjk1MzMsMjk1MzEsMjk1MzcsMjk1MzAsMjk1MjksMjk1MzgsMjk4MzEsMjk4MzMsMjk4MzQsMjk4MzAsMjk4MjUsMjk4MjEsMjk4MjksMjk4MzIsMjk4MjAsMjk4MTcsMjk5NjAsMjk5NTksMzAwNzgsMzAyNDUsMzAyMzgsMzAy''@;'; put 'put ''MzMsMzAyMzcsMzAyMzYsMzAyNDMsMzAyMzQsMzAyNDgsMzAyMzUsMzAzNjQsMzAzNjUsMzAzNjYsMzAzNjMsMzA2MDUsMzA2MDcsMzA2MDEsMzA2MDAsMzA5MjUsMzA5MDcsMzA5MjcsMzA5MjQsMzA5MjksMzA5MjYsMzA5MzIsMzA5MjAsMzA5MTUsMzA5MTYsMzA5MjEsMzExMzAsMzExMzcs''@;'; put 'put ''MzExMzYsMzExMzIsMzExMzgsMzExMzEsMjc1MTAsMzEyODksMzE0MTAsMzE0MTIsMzE0MTEsMzE2NzEsMzE2OTEsMzE2NzgsMzE2NjAsMzE2OTQsMzE2NjMsMzE2NzMsMzE2OTAsMzE2NjksMzE5NDEsMzE5NDQsMzE5NDgsMzE5NDcsMzIyNDcsMzIyMTksMzIyMzQsMzIyMzEsMzIyMTUsMzIy''@;'; put 'put ''MjUsMzIyNTksMzIyNTAsMzIyMzAsMzIyNDYsMzIyNDEsMzIyNDAsMzIyMzgsMzIyMjMsMzI2MzAsMzI2ODQsMzI2ODgsMzI2ODUsMzI3NDksMzI3NDcsMzI3NDYsMzI3NDgsMzI3NDIsMzI3NDQsMzI4NjgsMzI4NzEsMzMxODcsMzMxODMsMzMxODIsMzMxNzMsMzMxODYsMzMxNzcsMzMxNzUs''@;'; put 'put ''MzMzMDIsMzMzNTksMzMzNjMsMzMzNjIsMzMzNjAsMzMzNTgsMzMzNjEsMzQwODQsMzQxMDcsMzQwNjMsMzQwNDgsMzQwODksMzQwNjIsMzQwNTcsMzQwNjEsMzQwNzksMzQwNTgsMzQwODcsMzQwNzYsMzQwNDMsMzQwOTEsMzQwNDIsMzQwNTYsMzQwNjAsMzQwMzYsMzQwOTAsMzQwMzQsMzQw''@;'; put 'put ''NjksMzQwMzksMzQwMjcsMzQwMzUsMzQwNDQsMzQwNjYsMzQwMjYsMzQwMjUsMzQwNzAsMzQwNDYsMzQwODgsMzQwNzcsMzQwOTQsMzQwNTAsMzQwNDUsMzQwNzgsMzQwMzgsMzQwOTcsMzQwODYsMzQwMjMsMzQwMjQsMzQwMzIsMzQwMzEsMzQwNDEsMzQwNzIsMzQwODAsMzQwOTYsMzQwNTks''@;'; put 'put ''MzQwNzMsMzQwOTUsMzQ0MDIsMzQ2NDYsMzQ2NTksMzQ2NjAsMzQ2NzksMzQ3ODUsMzQ2NzUsMzQ2NDgsMzQ2NDQsMzQ2NTEsMzQ2NDIsMzQ2NTcsMzQ2NTAsMzQ2NDEsMzQ2NTQsMzQ2NjksMzQ2NjYsMzQ2NDAsMzQ2MzgsMzQ2NTUsMzQ2NTMsMzQ2NzEsMzQ2NjgsMzQ2ODIsMzQ2NzAsMzQ2''@;'; put 'put ''NTIsMzQ2NjEsMzQ2MzksMzQ2ODMsMzQ2NzcsMzQ2NTgsMzQ2NjMsMzQ2NjUsMzQ5MDYsMzUwNzcsMzUwODQsMzUwOTIsMzUwODMsMzUwOTUsMzUwOTYsMzUwOTcsMzUwNzgsMzUwOTQsMzUwODksMzUwODYsMzUwODEsMzUyMzQsMzUyMzYsMzUyMzUsMzUzMDksMzUzMTIsMzUzMDgsMzU1MzUs''@;'; put 'put ''MzU1MjYsMzU1MTIsMzU1MzksMzU1MzcsMzU1NDAsMzU1NDEsMzU1MTUsMzU1NDMsMzU1MTgsMzU1MjAsMzU1MjUsMzU1NDQsMzU1MjMsMzU1MTQsMzU1MTcsMzU1NDUsMzU5MDIsMzU5MTcsMzU5ODMsMzYwNjksMzYwNjMsMzYwNTcsMzYwNzIsMzYwNTgsMzYwNjEsMzYwNzEsMzYyNTYsMzYy''@;'; put 'put ''NTIsMzYyNTcsMzYyNTEsMzYzODQsMzYzODcsMzYzODksMzYzODgsMzYzOTgsMzYzNzMsMzYzNzksMzYzNzQsMzYzNjksMzYzNzcsMzYzOTAsMzYzOTEsMzYzNzIsMzYzNzAsMzYzNzYsMzYzNzEsMzYzODAsMzYzNzUsMzYzNzgsMzY2NTIsMzY2NDQsMzY2MzIsMzY2MzQsMzY2NDAsMzY2NDMs''@;'; put 'put ''MzY2MzAsMzY2MzEsMzY5NzksMzY5NzYsMzY5NzUsMzY5NjcsMzY5NzEsMzcxNjcsMzcxNjMsMzcxNjEsMzcxNjIsMzcxNzAsMzcxNTgsMzcxNjYsMzcyNTMsMzcyNTQsMzcyNTgsMzcyNDksMzcyNTAsMzcyNTIsMzcyNDgsMzc1ODQsMzc1NzEsMzc1NzIsMzc1NjgsMzc1OTMsMzc1NTgsMzc1''@;'; put 'put ''ODMsMzc2MTcsMzc1OTksMzc1OTIsMzc2MDksMzc1OTEsMzc1OTcsMzc1ODAsMzc2MTUsMzc1NzAsMzc2MDgsMzc1NzgsMzc1NzYsMzc1ODIsMzc2MDYsMzc1ODEsMzc1ODksMzc1NzcsMzc2MDAsMzc1OTgsMzc2MDcsMzc1ODUsMzc1ODcsMzc1NTcsMzc2MDEsMzc1NzQsMzc1NTYsMzgyNjgs''@;'; put 'put ''MzgzMTYsMzgzMTUsMzgzMTgsMzgzMjAsMzg1NjQsMzg1NjIsMzg2MTEsMzg2NjEsMzg2NjQsMzg2NTgsMzg3NDYsMzg3OTQsMzg3OTgsMzg3OTIsMzg4NjQsMzg4NjMsMzg5NDIsMzg5NDEsMzg5NTAsMzg5NTMsMzg5NTIsMzg5NDQsMzg5MzksMzg5NTEsMzkwOTAsMzkxNzYsMzkxNjIsMzkx''@;'; put 'put ''ODUsMzkxODgsMzkxOTAsMzkxOTEsMzkxODksMzkzODgsMzkzNzMsMzkzNzUsMzkzNzksMzkzODAsMzkzNzQsMzkzNjksMzkzODIsMzkzODQsMzkzNzEsMzkzODMsMzkzNzIsMzk2MDMsMzk2NjAsMzk2NTksMzk2NjcsMzk2NjYsMzk2NjUsMzk3NTAsMzk3NDcsMzk3ODMsMzk3OTYsMzk3OTMs''@;'; put 'put ''Mzk3ODIsMzk3OTgsMzk3OTcsMzk3OTIsMzk3ODQsMzk3ODAsMzk3ODgsNDAxODgsNDAxODYsNDAxODksNDAxOTEsNDAxODMsNDAxOTksNDAxOTIsNDAxODUsNDAxODcsNDAyMDAsNDAxOTcsNDAxOTYsNDA1NzksNDA2NTksNDA3MTksNDA3MjAsMjA3NjQsMjA3NTUsMjA3NTksMjA3NjIsMjA3''@;'; put 'put ''NTMsMjA5NTgsMjEzMDAsMjE0NzMsMjIxMjgsMjIxMTIsMjIxMjYsMjIxMzEsMjIxMTgsMjIxMTUsMjIxMjUsMjIxMzAsMjIxMTAsMjIxMzUsMjIzMDAsMjIyOTksMjI3MjgsMjI3MTcsMjI3MjksMjI3MTksMjI3MTQsMjI3MjIsMjI3MTYsMjI3MjYsMjMzMTksMjMzMjEsMjMzMjMsMjMzMjks''@;'; put 'put ''MjMzMTYsMjMzMTUsMjMzMTIsMjMzMTgsMjMzMzYsMjMzMjIsMjMzMjgsMjMzMjYsMjM1MzUsMjM5ODAsMjM5ODUsMjM5NzcsMjM5NzUsMjM5ODksMjM5ODQsMjM5ODIsMjM5NzgsMjM5NzYsMjM5ODYsMjM5ODEsMjM5ODMsMjM5ODgsMjQxNjcsMjQxNjgsMjQxNjYsMjQxNzUsMjQyOTcsMjQy''@;'; put 'put ''OTUsMjQyOTQsMjQyOTYsMjQyOTMsMjQzOTUsMjQ1MDgsMjQ5ODksMjVlMywyNDk4MiwyNTAyOSwyNTAxMiwyNTAzMCwyNTAyNSwyNTAzNiwyNTAxOCwyNTAyMywyNTAxNiwyNDk3MiwyNTgxNSwyNTgxNCwyNTgwOCwyNTgwNywyNTgwMSwyNTc4OSwyNTczNywyNTc5NSwyNTgxOSwyNTg0Mywy''@;'; put 'put ''NTgxNywyNTkwNywyNTk4MywyNTk4MCwyNjAxOCwyNjMxMiwyNjMwMiwyNjMwNCwyNjMxNCwyNjMxNSwyNjMxOSwyNjMwMSwyNjI5OSwyNjI5OCwyNjMxNiwyNjQwMywyNzE4OCwyNzIzOCwyNzIwOSwyNzIzOSwyNzE4NiwyNzI0MCwyNzE5OCwyNzIyOSwyNzI0NSwyNzI1NCwyNzIyNywyNzIx''@;'; put 'put ''NywyNzE3NiwyNzIyNiwyNzE5NSwyNzE5OSwyNzIwMSwyNzI0MiwyNzIzNiwyNzIxNiwyNzIxNSwyNzIyMCwyNzI0NywyNzI0MSwyNzIzMiwyNzE5NiwyNzIzMCwyNzIyMiwyNzIyMSwyNzIxMywyNzIxNCwyNzIwNiwyNzQ3NywyNzQ3NiwyNzQ3OCwyNzU1OSwyNzU2MiwyNzU2MywyNzU5Miwy''@;'; put 'put ''NzU5MSwyNzY1MiwyNzY1MSwyNzY1NCwyODU4OSwyODYxOSwyODU3OSwyODYxNSwyODYwNCwyODYyMiwyODYxNiwyODUxMCwyODYxMiwyODYwNSwyODU3NCwyODYxOCwyODU4NCwyODY3NiwyODU4MSwyODU5MCwyODYwMiwyODU4OCwyODU4NiwyODYyMywyODYwNywyODYwMCwyODU3OCwyODYx''@;'; put 'put ''NywyODU4NywyODYyMSwyODU5MSwyODU5NCwyODU5MiwyOTEyNSwyOTEyMiwyOTExOSwyOTExMiwyOTE0MiwyOTEyMCwyOTEyMSwyOTEzMSwyOTE0MCwyOTEzMCwyOTEyNywyOTEzNSwyOTExNywyOTE0NCwyOTExNiwyOTEyNiwyOTE0NiwyOTE0NywyOTM0MSwyOTM0MiwyOTU0NSwyOTU0Miwy''@;'; put 'put ''OTU0MywyOTU0OCwyOTU0MSwyOTU0NywyOTU0NiwyOTgyMywyOTg1MCwyOTg1NiwyOTg0NCwyOTg0MiwyOTg0NSwyOTg1NywyOTk2MywzMDA4MCwzMDI1NSwzMDI1MywzMDI1NywzMDI2OSwzMDI1OSwzMDI2OCwzMDI2MSwzMDI1OCwzMDI1NiwzMDM5NSwzMDQzOCwzMDYxOCwzMDYyMSwzMDYy''@;'; put 'put ''NSwzMDYyMCwzMDYxOSwzMDYyNiwzMDYyNywzMDYxMywzMDYxNywzMDYxNSwzMDk0MSwzMDk1MywzMDk0OSwzMDk1NCwzMDk0MiwzMDk0NywzMDkzOSwzMDk0NSwzMDk0NiwzMDk1NywzMDk0MywzMDk0NCwzMTE0MCwzMTMwMCwzMTMwNCwzMTMwMywzMTQxNCwzMTQxNiwzMTQxMywzMTQwOSwz''@;'; put 'put ''MTQxNSwzMTcxMCwzMTcxNSwzMTcxOSwzMTcwOSwzMTcwMSwzMTcxNywzMTcwNiwzMTcyMCwzMTczNywzMTcwMCwzMTcyMiwzMTcxNCwzMTcwOCwzMTcyMywzMTcwNCwzMTcxMSwzMTk1NCwzMTk1NiwzMTk1OSwzMTk1MiwzMTk1MywzMjI3NCwzMjI4OSwzMjI3OSwzMjI2OCwzMjI4NywzMjI4''@;'; put 'put ''OCwzMjI3NSwzMjI3MCwzMjI4NCwzMjI3NywzMjI4MiwzMjI5MCwzMjI2NywzMjI3MSwzMjI3OCwzMjI2OSwzMjI3NiwzMjI5MywzMjI5MiwzMjU3OSwzMjYzNSwzMjYzNiwzMjYzNCwzMjY4OSwzMjc1MSwzMjgxMCwzMjgwOSwzMjg3NiwzMzIwMSwzMzE5MCwzMzE5OCwzMzIwOSwzMzIwNSwz''@;'; put 'put ''MzE5NSwzMzIwMCwzMzE5NiwzMzIwNCwzMzIwMiwzMzIwNywzMzE5MSwzMzI2NiwzMzM2NSwzMzM2NiwzMzM2NywzNDEzNCwzNDExNywzNDE1NSwzNDEyNSwzNDEzMSwzNDE0NSwzNDEzNiwzNDExMiwzNDExOCwzNDE0OCwzNDExMywzNDE0NiwzNDExNiwzNDEyOSwzNDExOSwzNDE0NywzNDEx''@;'; put 'put ''MCwzNDEzOSwzNDE2MSwzNDEyNiwzNDE1OCwzNDE2NSwzNDEzMywzNDE1MSwzNDE0NCwzNDE4OCwzNDE1MCwzNDE0MSwzNDEzMiwzNDE0OSwzNDE1NiwzNDQwMywzNDQwNSwzNDQwNCwzNDcxNSwzNDcwMywzNDcxMSwzNDcwNywzNDcwNiwzNDY5NiwzNDY4OSwzNDcxMCwzNDcxMiwzNDY4MSwz''@;'; put 'put ''NDY5NSwzNDcyMywzNDY5MywzNDcwNCwzNDcwNSwzNDcxNywzNDY5MiwzNDcwOCwzNDcxNiwzNDcxNCwzNDY5NywzNTEwMiwzNTExMCwzNTEyMCwzNTExNywzNTExOCwzNTExMSwzNTEyMSwzNTEwNiwzNTExMywzNTEwNywzNTExOSwzNTExNiwzNTEwMywzNTMxMywzNTU1MiwzNTU1NCwzNTU3''@;'; put 'put ''MCwzNTU3MiwzNTU3MywzNTU0OSwzNTYwNCwzNTU1NiwzNTU1MSwzNTU2OCwzNTUyOCwzNTU1MCwzNTU1MywzNTU2MCwzNTU4MywzNTU2NywzNTU3OSwzNTk4NSwzNTk4NiwzNTk4NCwzNjA4NSwzNjA3OCwzNjA4MSwzNjA4MCwzNjA4MywzNjIwNCwzNjIwNiwzNjI2MSwzNjI2MywzNjQwMywz''@;'; put 'put ''NjQxNCwzNjQwOCwzNjQxNiwzNjQyMSwzNjQwNiwzNjQxMiwzNjQxMywzNjQxNywzNjQwMCwzNjQxNSwzNjU0MSwzNjY2MiwzNjY1NCwzNjY2MSwzNjY1OCwzNjY2NSwzNjY2MywzNjY2MCwzNjk4MiwzNjk4NSwzNjk4NywzNjk5OCwzNzExNCwzNzE3MSwzNzE3MywzNzE3NCwzNzI2NywzNzI2''@;'; put 'put ''NCwzNzI2NSwzNzI2MSwzNzI2MywzNzY3MSwzNzY2MiwzNzY0MCwzNzY2MywzNzYzOCwzNzY0NywzNzc1NCwzNzY4OCwzNzY5MiwzNzY1OSwzNzY2NywzNzY1MCwzNzYzMywzNzcwMiwzNzY3NywzNzY0NiwzNzY0NSwzNzU3OSwzNzY2MSwzNzYyNiwzNzY2OSwzNzY1MSwzNzYyNSwzNzYyMywz''@;'; put 'put ''NzY4NCwzNzYzNCwzNzY2OCwzNzYzMSwzNzY3MywzNzY4OSwzNzY4NSwzNzY3NCwzNzY1MiwzNzY0NCwzNzY0MywzNzYzMCwzNzY0MSwzNzYzMiwzNzYyNywzNzY1NCwzODMzMiwzODM0OSwzODMzNCwzODMyOSwzODMzMCwzODMyNiwzODMzNSwzODMyNSwzODMzMywzODU2OSwzODYxMiwzODY2''@;'; put 'put ''NywzODY3NCwzODY3MiwzODgwOSwzODgwNywzODgwNCwzODg5NiwzODkwNCwzODk2NSwzODk1OSwzODk2MiwzOTIwNCwzOTE5OSwzOTIwNywzOTIwOSwzOTMyNiwzOTQwNiwzOTQwNCwzOTM5NywzOTM5NiwzOTQwOCwzOTM5NSwzOTQwMiwzOTQwMSwzOTM5OSwzOTYwOSwzOTYxNSwzOTYwNCwz''@;'; put 'put ''OTYxMSwzOTY3MCwzOTY3NCwzOTY3MywzOTY3MSwzOTczMSwzOTgwOCwzOTgxMywzOTgxNSwzOTgwNCwzOTgwNiwzOTgwMywzOTgxMCwzOTgyNywzOTgyNiwzOTgyNCwzOTgwMiwzOTgyOSwzOTgwNSwzOTgxNiw0MDIyOSw0MDIxNSw0MDIyNCw0MDIyMiw0MDIxMiw0MDIzMyw0MDIyMSw0MDIx''@;'; put 'put ''Niw0MDIyNiw0MDIwOCw0MDIxNyw0MDIyMyw0MDU4NCw0MDU4Miw0MDU4Myw0MDYyMiw0MDYyMSw0MDY2MSw0MDY2Miw0MDY5OCw0MDcyMiw0MDc2NSwyMDc3NCwyMDc3MywyMDc3MCwyMDc3MiwyMDc2OCwyMDc3NywyMTIzNiwyMjE2MywyMjE1NiwyMjE1NywyMjE1MCwyMjE0OCwyMjE0Nywy''@;'; put 'put ''MjE0MiwyMjE0NiwyMjE0MywyMjE0NSwyMjc0MiwyMjc0MCwyMjczNSwyMjczOCwyMzM0MSwyMzMzMywyMzM0NiwyMzMzMSwyMzM0MCwyMzMzNSwyMzMzNCwyMzM0MywyMzM0MiwyMzQxOSwyMzUzNywyMzUzOCwyMzk5MSwyNDE3MiwyNDE3MCwyNDUxMCwyNDUwNywyNTAyNywyNTAxMywyNTAy''@;'; put 'put ''MCwyNTA2MywyNTA1NiwyNTA2MSwyNTA2MCwyNTA2NCwyNTA1NCwyNTgzOSwyNTgzMywyNTgyNywyNTgzNSwyNTgyOCwyNTgzMiwyNTk4NSwyNTk4NCwyNjAzOCwyNjA3NCwyNjMyMiwyNzI3NywyNzI4NiwyNzI2NSwyNzMwMSwyNzI3MywyNzI5NSwyNzI5MSwyNzI5NywyNzI5NCwyNzI3MSwy''@;'; put 'put ''NzI4MywyNzI3OCwyNzI4NSwyNzI2NywyNzMwNCwyNzMwMCwyNzI4MSwyNzI2MywyNzMwMiwyNzI5MCwyNzI2OSwyNzI3NiwyNzI4MiwyNzQ4MywyNzU2NSwyNzY1NywyODYyMCwyODU4NSwyODY2MCwyODYyOCwyODY0MywyODYzNiwyODY1MywyODY0NywyODY0NiwyODYzOCwyODY1OCwyODYz''@;'; put 'put ''NywyODY0MiwyODY0OCwyOTE1MywyOTE2OSwyOTE2MCwyOTE3MCwyOTE1NiwyOTE2OCwyOTE1NCwyOTU1NSwyOTU1MCwyOTU1MSwyOTg0NywyOTg3NCwyOTg2NywyOTg0MCwyOTg2NiwyOTg2OSwyOTg3MywyOTg2MSwyOTg3MSwyOTk2OCwyOTk2OSwyOTk3MCwyOTk2NywzMDA4NCwzMDI3NSwz''@;'; put 'put ''MDI4MCwzMDI4MSwzMDI3OSwzMDM3MiwzMDQ0MSwzMDY0NSwzMDYzNSwzMDY0MiwzMDY0NywzMDY0NiwzMDY0NCwzMDY0MSwzMDYzMiwzMDcwNCwzMDk2MywzMDk3MywzMDk3OCwzMDk3MSwzMDk3MiwzMDk2MiwzMDk4MSwzMDk2OSwzMDk3NCwzMDk4MCwzMTE0NywzMTE0NCwzMTMyNCwzMTMy''@;'; put 'put ''MywzMTMxOCwzMTMyMCwzMTMxNiwzMTMyMiwzMTQyMiwzMTQyNCwzMTQyNSwzMTc0OSwzMTc1OSwzMTczMCwzMTc0NCwzMTc0MywzMTczOSwzMTc1OCwzMTczMiwzMTc1NSwzMTczMSwzMTc0NiwzMTc1MywzMTc0NywzMTc0NSwzMTczNiwzMTc0MSwzMTc1MCwzMTcyOCwzMTcyOSwzMTc2MCwz''@;'; put 'put ''MTc1NCwzMTk3NiwzMjMwMSwzMjMxNiwzMjMyMiwzMjMwNywzODk4NCwzMjMxMiwzMjI5OCwzMjMyOSwzMjMyMCwzMjMyNywzMjI5NywzMjMzMiwzMjMwNCwzMjMxNSwzMjMxMCwzMjMyNCwzMjMxNCwzMjU4MSwzMjYzOSwzMjYzOCwzMjYzNywzMjc1NiwzMjc1NCwzMjgxMiwzMzIxMSwzMzIy''@;'; put 'put ''MCwzMzIyOCwzMzIyNiwzMzIyMSwzMzIyMywzMzIxMiwzMzI1NywzMzM3MSwzMzM3MCwzMzM3MiwzNDE3OSwzNDE3NiwzNDE5MSwzNDIxNSwzNDE5NywzNDIwOCwzNDE4NywzNDIxMSwzNDE3MSwzNDIxMiwzNDIwMiwzNDIwNiwzNDE2NywzNDE3MiwzNDE4NSwzNDIwOSwzNDE3MCwzNDE2OCwz''@;'; put 'put ''NDEzNSwzNDE5MCwzNDE5OCwzNDE4MiwzNDE4OSwzNDIwMSwzNDIwNSwzNDE3NywzNDIxMCwzNDE3OCwzNDE4NCwzNDE4MSwzNDE2OSwzNDE2NiwzNDIwMCwzNDE5MiwzNDIwNywzNDQwOCwzNDc1MCwzNDczMCwzNDczMywzNDc1NywzNDczNiwzNDczMiwzNDc0NSwzNDc0MSwzNDc0OCwzNDcz''@;'; put 'put ''NCwzNDc2MSwzNDc1NSwzNDc1NCwzNDc2NCwzNDc0MywzNDczNSwzNDc1NiwzNDc2MiwzNDc0MCwzNDc0MiwzNDc1MSwzNDc0NCwzNDc0OSwzNDc4MiwzNDczOCwzNTEyNSwzNTEyMywzNTEzMiwzNTEzNCwzNTEzNywzNTE1NCwzNTEyNywzNTEzOCwzNTI0NSwzNTI0NywzNTI0NiwzNTMxNCwz''@;'; put 'put ''NTMxNSwzNTYxNCwzNTYwOCwzNTYwNiwzNTYwMSwzNTU4OSwzNTU5NSwzNTYxOCwzNTU5OSwzNTYwMiwzNTYwNSwzNTU5MSwzNTU5NywzNTU5MiwzNTU5MCwzNTYxMiwzNTYwMywzNTYxMCwzNTkxOSwzNTk1MiwzNTk1NCwzNTk1MywzNTk1MSwzNTk4OSwzNTk4OCwzNjA4OSwzNjIwNywzNjQz''@;'; put 'put ''MCwzNjQyOSwzNjQzNSwzNjQzMiwzNjQyOCwzNjQyMywzNjY3NSwzNjY3MiwzNjk5NywzNjk5MCwzNzE3NiwzNzI3NCwzNzI4MiwzNzI3NSwzNzI3MywzNzI3OSwzNzI4MSwzNzI3NywzNzI4MCwzNzc5MywzNzc2MywzNzgwNywzNzczMiwzNzcxOCwzNzcwMywzNzc1NiwzNzcyMCwzNzcyNCwz''@;'; put 'put ''Nzc1MCwzNzcwNSwzNzcxMiwzNzcxMywzNzcyOCwzNzc0MSwzNzc3NSwzNzcwOCwzNzczOCwzNzc1MywzNzcxOSwzNzcxNywzNzcxNCwzNzcxMSwzNzc0NSwzNzc1MSwzNzc1NSwzNzcyOSwzNzcyNiwzNzczMSwzNzczNSwzNzc2MCwzNzcxMCwzNzcyMSwzODM0MywzODMzNiwzODM0NSwzODMz''@;'; put 'put ''OSwzODM0MSwzODMyNywzODU3NCwzODU3NiwzODU3MiwzODY4OCwzODY4NywzODY4MCwzODY4NSwzODY4MSwzODgxMCwzODgxNywzODgxMiwzODgxNCwzODgxMywzODg2OSwzODg2OCwzODg5NywzODk3NywzODk4MCwzODk4NiwzODk4NSwzODk4MSwzODk3OSwzOTIwNSwzOTIxMSwzOTIxMiwz''@;'; put 'put ''OTIxMCwzOTIxOSwzOTIxOCwzOTIxNSwzOTIxMywzOTIxNywzOTIxNiwzOTMyMCwzOTMzMSwzOTMyOSwzOTQyNiwzOTQxOCwzOTQxMiwzOTQxNSwzOTQxNywzOTQxNiwzOTQxNCwzOTQxOSwzOTQyMSwzOTQyMiwzOTQyMCwzOTQyNywzOTYxNCwzOTY3OCwzOTY3NywzOTY4MSwzOTY3NiwzOTc1''@;'; put 'put ''MiwzOTgzNCwzOTg0OCwzOTgzOCwzOTgzNSwzOTg0NiwzOTg0MSwzOTg0NSwzOTg0NCwzOTgxNCwzOTg0MiwzOTg0MCwzOTg1NSw0MDI0Myw0MDI1Nyw0MDI5NSw0MDI0Niw0MDIzOCw0MDIzOSw0MDI0MSw0MDI0OCw0MDI0MCw0MDI2MSw0MDI1OCw0MDI1OSw0MDI1NCw0MDI0Nyw0MDI1Niw0''@;'; put 'put ''MDI1MywzMjc1Nyw0MDIzNyw0MDU4Niw0MDU4NSw0MDU4OSw0MDYyNCw0MDY0OCw0MDY2Niw0MDY5OSw0MDcwMyw0MDc0MCw0MDczOSw0MDczOCw0MDc4OCw0MDg2NCwyMDc4NSwyMDc4MSwyMDc4MiwyMjE2OCwyMjE3MiwyMjE2NywyMjE3MCwyMjE3MywyMjE2OSwyMjg5NiwyMzM1NiwyMzY1''@;'; put 'put ''NywyMzY1OCwyNGUzLDI0MTczLDI0MTc0LDI1MDQ4LDI1MDU1LDI1MDY5LDI1MDcwLDI1MDczLDI1MDY2LDI1MDcyLDI1MDY3LDI1MDQ2LDI1MDY1LDI1ODU1LDI1ODYwLDI1ODUzLDI1ODQ4LDI1ODU3LDI1ODU5LDI1ODUyLDI2MDA0LDI2MDc1LDI2MzMwLDI2MzMxLDI2MzI4LDI3MzMzLDI3''@;'; put 'put ''MzIxLDI3MzI1LDI3MzYxLDI3MzM0LDI3MzIyLDI3MzE4LDI3MzE5LDI3MzM1LDI3MzE2LDI3MzA5LDI3NDg2LDI3NTkzLDI3NjU5LDI4Njc5LDI4Njg0LDI4Njg1LDI4NjczLDI4Njc3LDI4NjkyLDI4Njg2LDI4NjcxLDI4NjcyLDI4NjY3LDI4NzEwLDI4NjY4LDI4NjYzLDI4NjgyLDI5MTg1''@;'; put 'put ''LDI5MTgzLDI5MTc3LDI5MTg3LDI5MTgxLDI5NTU4LDI5ODgwLDI5ODg4LDI5ODc3LDI5ODg5LDI5ODg2LDI5ODc4LDI5ODgzLDI5ODkwLDI5OTcyLDI5OTcxLDMwMzAwLDMwMzA4LDMwMjk3LDMwMjg4LDMwMjkxLDMwMjk1LDMwMjk4LDMwMzc0LDMwMzk3LDMwNDQ0LDMwNjU4LDMwNjUwLDMw''@;'; put 'put ''OTc1LDMwOTg4LDMwOTk1LDMwOTk2LDMwOTg1LDMwOTkyLDMwOTk0LDMwOTkzLDMxMTQ5LDMxMTQ4LDMxMzI3LDMxNzcyLDMxNzg1LDMxNzY5LDMxNzc2LDMxNzc1LDMxNzg5LDMxNzczLDMxNzgyLDMxNzg0LDMxNzc4LDMxNzgxLDMxNzkyLDMyMzQ4LDMyMzM2LDMyMzQyLDMyMzU1LDMyMzQ0''@;'; put 'put ''LDMyMzU0LDMyMzUxLDMyMzM3LDMyMzUyLDMyMzQzLDMyMzM5LDMyNjkzLDMyNjkxLDMyNzU5LDMyNzYwLDMyODg1LDMzMjMzLDMzMjM0LDMzMjMyLDMzMzc1LDMzMzc0LDM0MjI4LDM0MjQ2LDM0MjQwLDM0MjQzLDM0MjQyLDM0MjI3LDM0MjI5LDM0MjM3LDM0MjQ3LDM0MjQ0LDM0MjM5LDM0''@;'; put 'put ''MjUxLDM0MjU0LDM0MjQ4LDM0MjQ1LDM0MjI1LDM0MjMwLDM0MjU4LDM0MzQwLDM0MjMyLDM0MjMxLDM0MjM4LDM0NDA5LDM0NzkxLDM0NzkwLDM0Nzg2LDM0Nzc5LDM0Nzk1LDM0Nzk0LDM0Nzg5LDM0NzgzLDM0ODAzLDM0Nzg4LDM0NzcyLDM0NzgwLDM0NzcxLDM0Nzk3LDM0Nzc2LDM0Nzg3''@;'; put 'put ''LDM0NzI0LDM0Nzc1LDM0Nzc3LDM0ODE3LDM0ODA0LDM0NzkyLDM0NzgxLDM1MTU1LDM1MTQ3LDM1MTUxLDM1MTQ4LDM1MTQyLDM1MTUyLDM1MTUzLDM1MTQ1LDM1NjI2LDM1NjIzLDM1NjE5LDM1NjM1LDM1NjMyLDM1NjM3LDM1NjU1LDM1NjMxLDM1NjQ0LDM1NjQ2LDM1NjMzLDM1NjIxLDM1''@;'; put 'put ''NjM5LDM1NjIyLDM1NjM4LDM1NjMwLDM1NjIwLDM1NjQzLDM1NjQ1LDM1NjQyLDM1OTA2LDM1OTU3LDM1OTkzLDM1OTkyLDM1OTkxLDM2MDk0LDM2MTAwLDM2MDk4LDM2MDk2LDM2NDQ0LDM2NDUwLDM2NDQ4LDM2NDM5LDM2NDM4LDM2NDQ2LDM2NDUzLDM2NDU1LDM2NDQzLDM2NDQyLDM2NDQ5''@;'; put 'put ''LDM2NDQ1LDM2NDU3LDM2NDM2LDM2Njc4LDM2Njc5LDM2NjgwLDM2NjgzLDM3MTYwLDM3MTc4LDM3MTc5LDM3MTgyLDM3Mjg4LDM3Mjg1LDM3Mjg3LDM3Mjk1LDM3MjkwLDM3ODEzLDM3NzcyLDM3Nzc4LDM3ODE1LDM3Nzg3LDM3Nzg5LDM3NzY5LDM3Nzk5LDM3Nzc0LDM3ODAyLDM3NzkwLDM3''@;'; put 'put ''Nzk4LDM3NzgxLDM3NzY4LDM3Nzg1LDM3NzkxLDM3NzczLDM3ODA5LDM3Nzc3LDM3ODEwLDM3Nzk2LDM3ODAwLDM3ODEyLDM3Nzk1LDM3Nzk3LDM4MzU0LDM4MzU1LDM4MzUzLDM4NTc5LDM4NjE1LDM4NjE4LDI0MDAyLDM4NjIzLDM4NjE2LDM4NjIxLDM4NjkxLDM4NjkwLDM4NjkzLDM4ODI4''@;'; put 'put ''LDM4ODMwLDM4ODI0LDM4ODI3LDM4ODIwLDM4ODI2LDM4ODE4LDM4ODIxLDM4ODcxLDM4ODczLDM4ODcwLDM4ODcyLDM4OTA2LDM4OTkyLDM4OTkzLDM4OTk0LDM5MDk2LDM5MjMzLDM5MjI4LDM5MjI2LDM5NDM5LDM5NDM1LDM5NDMzLDM5NDM3LDM5NDI4LDM5NDQxLDM5NDM0LDM5NDI5LDM5''@;'; put 'put ''NDMxLDM5NDMwLDM5NjE2LDM5NjQ0LDM5Njg4LDM5Njg0LDM5Njg1LDM5NzIxLDM5NzMzLDM5NzU0LDM5NzU2LDM5NzU1LDM5ODc5LDM5ODc4LDM5ODc1LDM5ODcxLDM5ODczLDM5ODYxLDM5ODY0LDM5ODkxLDM5ODYyLDM5ODc2LDM5ODY1LDM5ODY5LDQwMjg0LDQwMjc1LDQwMjcxLDQwMjY2''@;'; put 'put ''LDQwMjgzLDQwMjY3LDQwMjgxLDQwMjc4LDQwMjY4LDQwMjc5LDQwMjc0LDQwMjc2LDQwMjg3LDQwMjgwLDQwMjgyLDQwNTkwLDQwNTg4LDQwNjcxLDQwNzA1LDQwNzA0LDQwNzI2LDQwNzQxLDQwNzQ3LDQwNzQ2LDQwNzQ1LDQwNzQ0LDQwNzgwLDQwNzg5LDIwNzg4LDIwNzg5LDIxMTQyLDIx''@;'; put 'put ''MjM5LDIxNDI4LDIyMTg3LDIyMTg5LDIyMTgyLDIyMTgzLDIyMTg2LDIyMTg4LDIyNzQ2LDIyNzQ5LDIyNzQ3LDIyODAyLDIzMzU3LDIzMzU4LDIzMzU5LDI0MDAzLDI0MTc2LDI0NTExLDI1MDgzLDI1ODYzLDI1ODcyLDI1ODY5LDI1ODY1LDI1ODY4LDI1ODcwLDI1OTg4LDI2MDc4LDI2MDc3''@;'; put 'put ''LDI2MzM0LDI3MzY3LDI3MzYwLDI3MzQwLDI3MzQ1LDI3MzUzLDI3MzM5LDI3MzU5LDI3MzU2LDI3MzQ0LDI3MzcxLDI3MzQzLDI3MzQxLDI3MzU4LDI3NDg4LDI3NTY4LDI3NjYwLDI4Njk3LDI4NzExLDI4NzA0LDI4Njk0LDI4NzE1LDI4NzA1LDI4NzA2LDI4NzA3LDI4NzEzLDI4Njk1LDI4''@;'; put 'put ''NzA4LDI4NzAwLDI4NzE0LDI5MTk2LDI5MTk0LDI5MTkxLDI5MTg2LDI5MTg5LDI5MzQ5LDI5MzUwLDI5MzQ4LDI5MzQ3LDI5MzQ1LDI5ODk5LDI5ODkzLDI5ODc5LDI5ODkxLDI5OTc0LDMwMzA0LDMwNjY1LDMwNjY2LDMwNjYwLDMwNzA1LDMxMDA1LDMxMDAzLDMxMDA5LDMxMDA0LDMwOTk5''@;'; put 'put ''LDMxMDA2LDMxMTUyLDMxMzM1LDMxMzM2LDMxNzk1LDMxODA0LDMxODAxLDMxNzg4LDMxODAzLDMxOTgwLDMxOTc4LDMyMzc0LDMyMzczLDMyMzc2LDMyMzY4LDMyMzc1LDMyMzY3LDMyMzc4LDMyMzcwLDMyMzcyLDMyMzYwLDMyNTg3LDMyNTg2LDMyNjQzLDMyNjQ2LDMyNjk1LDMyNzY1LDMy''@;'; put 'put ''NzY2LDMyODg4LDMzMjM5LDMzMjM3LDMzMzgwLDMzMzc3LDMzMzc5LDM0MjgzLDM0Mjg5LDM0Mjg1LDM0MjY1LDM0MjczLDM0MjgwLDM0MjY2LDM0MjYzLDM0Mjg0LDM0MjkwLDM0Mjk2LDM0MjY0LDM0MjcxLDM0Mjc1LDM0MjY4LDM0MjU3LDM0Mjg4LDM0Mjc4LDM0Mjg3LDM0MjcwLDM0Mjc0''@;'; put 'put ''LDM0ODE2LDM0ODEwLDM0ODE5LDM0ODA2LDM0ODA3LDM0ODI1LDM0ODI4LDM0ODI3LDM0ODIyLDM0ODEyLDM0ODI0LDM0ODE1LDM0ODI2LDM0ODE4LDM1MTcwLDM1MTYyLDM1MTYzLDM1MTU5LDM1MTY5LDM1MTY0LDM1MTYwLDM1MTY1LDM1MTYxLDM1MjA4LDM1MjU1LDM1MjU0LDM1MzE4LDM1''@;'; put 'put ''NjY0LDM1NjU2LDM1NjU4LDM1NjQ4LDM1NjY3LDM1NjcwLDM1NjY4LDM1NjU5LDM1NjY5LDM1NjY1LDM1NjUwLDM1NjY2LDM1NjcxLDM1OTA3LDM1OTU5LDM1OTU4LDM1OTk0LDM2MTAyLDM2MTAzLDM2MTA1LDM2MjY4LDM2MjY2LDM2MjY5LDM2MjY3LDM2NDYxLDM2NDcyLDM2NDY3LDM2NDU4''@;'; put 'put ''LDM2NDYzLDM2NDc1LDM2NTQ2LDM2NjkwLDM2Njg5LDM2Njg3LDM2Njg4LDM2NjkxLDM2Nzg4LDM3MTg0LDM3MTgzLDM3Mjk2LDM3MjkzLDM3ODU0LDM3ODMxLDM3ODM5LDM3ODI2LDM3ODUwLDM3ODQwLDM3ODgxLDM3ODY4LDM3ODM2LDM3ODQ5LDM3ODAxLDM3ODYyLDM3ODM0LDM3ODQ0LDM3''@;'; put 'put ''ODcwLDM3ODU5LDM3ODQ1LDM3ODI4LDM3ODM4LDM3ODI0LDM3ODQyLDM3ODYzLDM4MjY5LDM4MzYyLDM4MzYzLDM4NjI1LDM4Njk3LDM4Njk5LDM4NzAwLDM4Njk2LDM4Njk0LDM4ODM1LDM4ODM5LDM4ODM4LDM4ODc3LDM4ODc4LDM4ODc5LDM5MDA0LDM5MDAxLDM5MDA1LDM4OTk5LDM5MTAz''@;'; put 'put ''LDM5MTAxLDM5MDk5LDM5MTAyLDM5MjQwLDM5MjM5LDM5MjM1LDM5MzM0LDM5MzM1LDM5NDUwLDM5NDQ1LDM5NDYxLDM5NDUzLDM5NDYwLDM5NDUxLDM5NDU4LDM5NDU2LDM5NDYzLDM5NDU5LDM5NDU0LDM5NDUyLDM5NDQ0LDM5NjE4LDM5NjkxLDM5NjkwLDM5Njk0LDM5NjkyLDM5NzM1LDM5''@;'; put 'put ''OTE0LDM5OTE1LDM5OTA0LDM5OTAyLDM5OTA4LDM5OTEwLDM5OTA2LDM5OTIwLDM5ODkyLDM5ODk1LDM5OTE2LDM5OTAwLDM5ODk3LDM5OTA5LDM5ODkzLDM5OTA1LDM5ODk4LDQwMzExLDQwMzIxLDQwMzMwLDQwMzI0LDQwMzI4LDQwMzA1LDQwMzIwLDQwMzEyLDQwMzI2LDQwMzMxLDQwMzMy''@;'; put 'put ''LDQwMzE3LDQwMjk5LDQwMzA4LDQwMzA5LDQwMzA0LDQwMjk3LDQwMzI1LDQwMzA3LDQwMzE1LDQwMzIyLDQwMzAzLDQwMzEzLDQwMzE5LDQwMzI3LDQwMjk2LDQwNTk2LDQwNTkzLDQwNjQwLDQwNzAwLDQwNzQ5LDQwNzY4LDQwNzY5LDQwNzgxLDQwNzkwLDQwNzkxLDQwNzkyLDIxMzAzLDIy''@;'; put 'put ''MTk0LDIyMTk3LDIyMTk1LDIyNzU1LDIzMzY1LDI0MDA2LDI0MDA3LDI0MzAyLDI0MzAzLDI0NTEyLDI0NTEzLDI1MDgxLDI1ODc5LDI1ODc4LDI1ODc3LDI1ODc1LDI2MDc5LDI2MzQ0LDI2MzM5LDI2MzQwLDI3Mzc5LDI3Mzc2LDI3MzcwLDI3MzY4LDI3Mzg1LDI3Mzc3LDI3Mzc0LDI3Mzc1''@;'; put 'put ''LDI4NzMyLDI4NzI1LDI4NzE5LDI4NzI3LDI4NzI0LDI4NzIxLDI4NzM4LDI4NzI4LDI4NzM1LDI4NzMwLDI4NzI5LDI4NzM2LDI4NzMxLDI4NzIzLDI4NzM3LDI5MjAzLDI5MjA0LDI5MzUyLDI5NTY1LDI5NTY0LDI5ODgyLDMwMzc5LDMwMzc4LDMwMzk4LDMwNDQ1LDMwNjY4LDMwNjcwLDMw''@;'; put 'put ''NjcxLDMwNjY5LDMwNzA2LDMxMDEzLDMxMDExLDMxMDE1LDMxMDE2LDMxMDEyLDMxMDE3LDMxMTU0LDMxMzQyLDMxMzQwLDMxMzQxLDMxNDc5LDMxODE3LDMxODE2LDMxODE4LDMxODE1LDMxODEzLDMxOTgyLDMyMzc5LDMyMzgyLDMyMzg1LDMyMzg0LDMyNjk4LDMyNzY3LDMyODg5LDMzMjQz''@;'; put 'put ''LDMzMjQxLDMzMjkxLDMzMzg0LDMzMzg1LDM0MzM4LDM0MzAzLDM0MzA1LDM0MzAyLDM0MzMxLDM0MzA0LDM0Mjk0LDM0MzA4LDM0MzEzLDM0MzA5LDM0MzE2LDM0MzAxLDM0ODQxLDM0ODMyLDM0ODMzLDM0ODM5LDM0ODM1LDM0ODM4LDM1MTcxLDM1MTc0LDM1MjU3LDM1MzE5LDM1NjgwLDM1''@;'; put 'put ''NjkwLDM1Njc3LDM1Njg4LDM1NjgzLDM1Njg1LDM1Njg3LDM1NjkzLDM2MjcwLDM2NDg2LDM2NDg4LDM2NDg0LDM2Njk3LDM2Njk0LDM2Njk1LDM2NjkzLDM2Njk2LDM2Njk4LDM3MDA1LDM3MTg3LDM3MTg1LDM3MzAzLDM3MzAxLDM3Mjk4LDM3Mjk5LDM3ODk5LDM3OTA3LDM3ODgzLDM3OTIw''@;'; put 'put ''LDM3OTAzLDM3OTA4LDM3ODg2LDM3OTA5LDM3OTA0LDM3OTI4LDM3OTEzLDM3OTAxLDM3ODc3LDM3ODg4LDM3ODc5LDM3ODk1LDM3OTAyLDM3OTEwLDM3OTA2LDM3ODgyLDM3ODk3LDM3ODgwLDM3ODk4LDM3ODg3LDM3ODg0LDM3OTAwLDM3ODc4LDM3OTA1LDM3ODk0LDM4MzY2LDM4MzY4LDM4''@;'; put 'put ''MzY3LDM4NzAyLDM4NzAzLDM4ODQxLDM4ODQzLDM4OTA5LDM4OTEwLDM5MDA4LDM5MDEwLDM5MDExLDM5MDA3LDM5MTA1LDM5MTA2LDM5MjQ4LDM5MjQ2LDM5MjU3LDM5MjQ0LDM5MjQzLDM5MjUxLDM5NDc0LDM5NDc2LDM5NDczLDM5NDY4LDM5NDY2LDM5NDc4LDM5NDY1LDM5NDcwLDM5NDgw''@;'; put 'put ''LDM5NDY5LDM5NjIzLDM5NjI2LDM5NjIyLDM5Njk2LDM5Njk4LDM5Njk3LDM5OTQ3LDM5OTQ0LDM5OTI3LDM5OTQxLDM5OTU0LDM5OTI4LDRlNCwzOTk0MywzOTk1MCwzOTk0MiwzOTk1OSwzOTk1NiwzOTk0NSw0MDM1MSw0MDM0NSw0MDM1Niw0MDM0OSw0MDMzOCw0MDM0NCw0MDMzNiw0MDM0''@;'; put 'put ''Nyw0MDM1Miw0MDM0MCw0MDM0OCw0MDM2Miw0MDM0Myw0MDM1Myw0MDM0Niw0MDM1NCw0MDM2MCw0MDM1MCw0MDM1NSw0MDM4Myw0MDM2MSw0MDM0Miw0MDM1OCw0MDM1OSw0MDYwMSw0MDYwMyw0MDYwMiw0MDY3Nyw0MDY3Niw0MDY3OSw0MDY3OCw0MDc1Miw0MDc1MCw0MDc5NSw0MDgwMCw0''@;'; put 'put ''MDc5OCw0MDc5Nyw0MDc5Myw0MDg0OSwyMDc5NCwyMDc5MywyMTE0NCwyMTE0MywyMjIxMSwyMjIwNSwyMjIwNiwyMzM2OCwyMzM2NywyNDAxMSwyNDAxNSwyNDMwNSwyNTA4NSwyNTg4MywyNzM5NCwyNzM4OCwyNzM5NSwyNzM4NCwyNzM5MiwyODczOSwyODc0MCwyODc0NiwyODc0NCwyODc0''@;'; put 'put ''NSwyODc0MSwyODc0MiwyOTIxMywyOTIxMCwyOTIwOSwyOTU2NiwyOTk3NSwzMDMxNCwzMDY3MiwzMTAyMSwzMTAyNSwzMTAyMywzMTgyOCwzMTgyNywzMTk4NiwzMjM5NCwzMjM5MSwzMjM5MiwzMjM5NSwzMjM5MCwzMjM5NywzMjU4OSwzMjY5OSwzMjgxNiwzMzI0NSwzNDMyOCwzNDM0Niwz''@;'; put 'put ''NDM0MiwzNDMzNSwzNDMzOSwzNDMzMiwzNDMyOSwzNDM0MywzNDM1MCwzNDMzNywzNDMzNiwzNDM0NSwzNDMzNCwzNDM0MSwzNDg1NywzNDg0NSwzNDg0MywzNDg0OCwzNDg1MiwzNDg0NCwzNDg1OSwzNDg5MCwzNTE4MSwzNTE3NywzNTE4MiwzNTE3OSwzNTMyMiwzNTcwNSwzNTcwNCwzNTY1''@;'; put 'put ''MywzNTcwNiwzNTcwNywzNjExMiwzNjExNiwzNjI3MSwzNjQ5NCwzNjQ5MiwzNjcwMiwzNjY5OSwzNjcwMSwzNzE5MCwzNzE4OCwzNzE4OSwzNzMwNSwzNzk1MSwzNzk0NywzNzk0MiwzNzkyOSwzNzk0OSwzNzk0OCwzNzkzNiwzNzk0NSwzNzkzMCwzNzk0MywzNzkzMiwzNzk1MiwzNzkzNywz''@;'; put 'put ''ODM3MywzODM3MiwzODM3MSwzODcwOSwzODcxNCwzODg0NywzODg4MSwzOTAxMiwzOTExMywzOTExMCwzOTEwNCwzOTI1NiwzOTI1NCwzOTQ4MSwzOTQ4NSwzOTQ5NCwzOTQ5MiwzOTQ5MCwzOTQ4OSwzOTQ4MiwzOTQ4NywzOTYyOSwzOTcwMSwzOTcwMywzOTcwNCwzOTcwMiwzOTczOCwzOTc2''@;'; put 'put ''MiwzOTk3OSwzOTk2NSwzOTk2NCwzOTk4MCwzOTk3MSwzOTk3NiwzOTk3NywzOTk3MiwzOTk2OSw0MDM3NSw0MDM3NCw0MDM4MCw0MDM4NSw0MDM5MSw0MDM5NCw0MDM5OSw0MDM4Miw0MDM4OSw0MDM4Nyw0MDM3OSw0MDM3Myw0MDM5OCw0MDM3Nyw0MDM3OCw0MDM2NCw0MDM5Miw0MDM2OSw0''@;'; put 'put ''MDM2NSw0MDM5Niw0MDM3MSw0MDM5Nyw0MDM3MCw0MDU3MCw0MDYwNCw0MDY4Myw0MDY4Niw0MDY4NSw0MDczMSw0MDcyOCw0MDczMCw0MDc1Myw0MDc4Miw0MDgwNSw0MDgwNCw0MDg1MCwyMDE1MywyMjIxNCwyMjIxMywyMjIxOSwyMjg5NywyMzM3MSwyMzM3MiwyNDAyMSwyNDAxNywyNDMw''@;'; put 'put ''NiwyNTg4OSwyNTg4OCwyNTg5NCwyNTg5MCwyNzQwMywyNzQwMCwyNzQwMSwyNzY2MSwyODc1NywyODc1OCwyODc1OSwyODc1NCwyOTIxNCwyOTIxNSwyOTM1MywyOTU2NywyOTkxMiwyOTkwOSwyOTkxMywyOTkxMSwzMDMxNywzMDM4MSwzMTAyOSwzMTE1NiwzMTM0NCwzMTM0NSwzMTgzMSwz''@;'; put 'put ''MTgzNiwzMTgzMywzMTgzNSwzMTgzNCwzMTk4OCwzMTk4NSwzMjQwMSwzMjU5MSwzMjY0NywzMzI0NiwzMzM4NywzNDM1NiwzNDM1NywzNDM1NSwzNDM0OCwzNDM1NCwzNDM1OCwzNDg2MCwzNDg1NiwzNDg1NCwzNDg1OCwzNDg1MywzNTE4NSwzNTI2MywzNTI2MiwzNTMyMywzNTcxMCwzNTcx''@;'; put 'put ''NiwzNTcxNCwzNTcxOCwzNTcxNywzNTcxMSwzNjExNywzNjUwMSwzNjUwMCwzNjUwNiwzNjQ5OCwzNjQ5NiwzNjUwMiwzNjUwMywzNjcwNCwzNjcwNiwzNzE5MSwzNzk2NCwzNzk2OCwzNzk2MiwzNzk2MywzNzk2NywzNzk1OSwzNzk1NywzNzk2MCwzNzk2MSwzNzk1OCwzODcxOSwzODg4Mywz''@;'; put 'put ''OTAxOCwzOTAxNywzOTExNSwzOTI1MiwzOTI1OSwzOTUwMiwzOTUwNywzOTUwOCwzOTUwMCwzOTUwMywzOTQ5NiwzOTQ5OCwzOTQ5NywzOTUwNiwzOTUwNCwzOTYzMiwzOTcwNSwzOTcyMywzOTczOSwzOTc2NiwzOTc2NSw0MDAwNiw0MDAwOCwzOTk5OSw0MDAwNCwzOTk5MywzOTk4Nyw0MDAw''@;'; put 'put ''MSwzOTk5NiwzOTk5MSwzOTk4OCwzOTk4NiwzOTk5NywzOTk5MCw0MDQxMSw0MDQwMiw0MDQxNCw0MDQxMCw0MDM5NSw0MDQwMCw0MDQxMiw0MDQwMSw0MDQxNSw0MDQyNSw0MDQwOSw0MDQwOCw0MDQwNiw0MDQzNyw0MDQwNSw0MDQxMyw0MDYzMCw0MDY4OCw0MDc1Nyw0MDc1NSw0MDc1NCw0''@;'; put 'put ''MDc3MCw0MDgxMSw0MDg1Myw0MDg2NiwyMDc5NywyMTE0NSwyMjc2MCwyMjc1OSwyMjg5OCwyMzM3MywyNDAyNCwzNDg2MywyNDM5OSwyNTA4OSwyNTA5MSwyNTA5MiwyNTg5NywyNTg5MywyNjAwNiwyNjM0NywyNzQwOSwyNzQxMCwyNzQwNywyNzU5NCwyODc2MywyODc2MiwyOTIxOCwyOTU3''@;'; put 'put ''MCwyOTU2OSwyOTU3MSwzMDMyMCwzMDY3NiwzMTg0NywzMTg0NiwzMjQwNSwzMzM4OCwzNDM2MiwzNDM2OCwzNDM2MSwzNDM2NCwzNDM1MywzNDM2MywzNDM2NiwzNDg2NCwzNDg2NiwzNDg2MiwzNDg2NywzNTE5MCwzNTE4OCwzNTE4NywzNTMyNiwzNTcyNCwzNTcyNiwzNTcyMywzNTcyMCwz''@;'; put 'put ''NTkwOSwzNjEyMSwzNjUwNCwzNjcwOCwzNjcwNywzNzMwOCwzNzk4NiwzNzk3MywzNzk4MSwzNzk3NSwzNzk4MiwzODg1MiwzODg1MywzODkxMiwzOTUxMCwzOTUxMywzOTcxMCwzOTcxMSwzOTcxMiw0MDAxOCw0MDAyNCw0MDAxNiw0MDAxMCw0MDAxMyw0MDAxMSw0MDAyMSw0MDAyNSw0MDAx''@;'; put 'put ''Miw0MDAxNCw0MDQ0Myw0MDQzOSw0MDQzMSw0MDQxOSw0MDQyNyw0MDQ0MCw0MDQyMCw0MDQzOCw0MDQxNyw0MDQzMCw0MDQyMiw0MDQzNCw0MDQzMiw0MDQxOCw0MDQyOCw0MDQzNiw0MDQzNSw0MDQyNCw0MDQyOSw0MDY0Miw0MDY1Niw0MDY5MCw0MDY5MSw0MDcxMCw0MDczMiw0MDc2MCw0''@;'; put 'put ''MDc1OSw0MDc1OCw0MDc3MSw0MDc4Myw0MDgxNyw0MDgxNiw0MDgxNCw0MDgxNSwyMjIyNywyMjIyMSwyMzM3NCwyMzY2MSwyNTkwMSwyNjM0OSwyNjM1MCwyNzQxMSwyODc2NywyODc2OSwyODc2NSwyODc2OCwyOTIxOSwyOTkxNSwyOTkyNSwzMDY3NywzMTAzMiwzMTE1OSwzMTE1OCwzMTg1''@;'; put 'put ''MCwzMjQwNywzMjY0OSwzMzM4OSwzNDM3MSwzNDg3MiwzNDg3MSwzNDg2OSwzNDg5MSwzNTczMiwzNTczMywzNjUxMCwzNjUxMSwzNjUxMiwzNjUwOSwzNzMxMCwzNzMwOSwzNzMxNCwzNzk5NSwzNzk5MiwzNzk5MywzODYyOSwzODcyNiwzODcyMywzODcyNywzODg1NSwzODg4NSwzOTUxOCwz''@;'; put 'put ''OTYzNywzOTc2OSw0MDAzNSw0MDAzOSw0MDAzOCw0MDAzNCw0MDAzMCw0MDAzMiw0MDQ1MCw0MDQ0Niw0MDQ1NSw0MDQ1MSw0MDQ1NCw0MDQ1Myw0MDQ0OCw0MDQ0OSw0MDQ1Nyw0MDQ0Nyw0MDQ0NSw0MDQ1Miw0MDYwOCw0MDczNCw0MDc3NCw0MDgyMCw0MDgyMSw0MDgyMiwyMjIyOCwyNTkw''@;'; put 'put ''MiwyNjA0MCwyNzQxNiwyNzQxNywyNzQxNSwyNzQxOCwyODc3MCwyOTIyMiwyOTM1NCwzMDY4MCwzMDY4MSwzMTAzMywzMTg0OSwzMTg1MSwzMTk5MCwzMjQxMCwzMjQwOCwzMjQxMSwzMjQwOSwzMzI0OCwzMzI0OSwzNDM3NCwzNDM3NSwzNDM3NiwzNTE5MywzNTE5NCwzNTE5NiwzNTE5NSwz''@;'; put 'put ''NTMyNywzNTczNiwzNTczNywzNjUxNywzNjUxNiwzNjUxNSwzNzk5OCwzNzk5NywzNzk5OSwzODAwMSwzODAwMywzODcyOSwzOTAyNiwzOTI2Myw0MDA0MCw0MDA0Niw0MDA0NSw0MDQ1OSw0MDQ2MSw0MDQ2NCw0MDQ2Myw0MDQ2Niw0MDQ2NSw0MDYwOSw0MDY5Myw0MDcxMyw0MDc3NSw0MDgy''@;'; put 'put ''NCw0MDgyNyw0MDgyNiw0MDgyNSwyMjMwMiwyODc3NCwzMTg1NSwzNDg3NiwzNjI3NCwzNjUxOCwzNzMxNSwzODAwNCwzODAwOCwzODAwNiwzODAwNSwzOTUyMCw0MDA1Miw0MDA1MSw0MDA0OSw0MDA1Myw0MDQ2OCw0MDQ2Nyw0MDY5NCw0MDcxNCw0MDg2OCwyODc3NiwyODc3MywzMTk5MSwz''@;'; put 'put ''NDQxMCwzNDg3OCwzNDg3NywzNDg3OSwzNTc0MiwzNTk5NiwzNjUyMSwzNjU1MywzODczMSwzOTAyNywzOTAyOCwzOTExNiwzOTI2NSwzOTMzOSwzOTUyNCwzOTUyNiwzOTUyNywzOTcxNiw0MDQ2OSw0MDQ3MSw0MDc3NiwyNTA5NSwyNzQyMiwyOTIyMywzNDM4MCwzNjUyMCwzODAxOCwzODAx''@;'; put 'put ''NiwzODAxNywzOTUyOSwzOTUyOCwzOTcyNiw0MDQ3MywyOTIyNSwzNDM3OSwzNTc0MywzODAxOSw0MDA1Nyw0MDYzMSwzMDMyNSwzOTUzMSw0MDA1OCw0MDQ3NywyODc3NywyODc3OCw0MDYxMiw0MDgzMCw0MDc3Nyw0MDg1NiwzMDg0OSwzNzU2MSwzNTAyMywyMjcxNSwyNDY1OCwzMTkxMSwy''@;'; put 'put ''MzI5MCw5NTU2LDk1NzQsOTU1OSw5NTY4LDk1ODAsOTU3MSw5NTYyLDk1NzcsOTU2NSw5NTU0LDk1NzIsOTU1Nyw5NTY2LDk1NzgsOTU2OSw5NTYwLDk1NzUsOTU2Myw5NTU1LDk1NzMsOTU1OCw5NTY3LDk1NzksOTU3MCw5NTYxLDk1NzYsOTU2NCw5NTUzLDk1NTIsOTU4MSw5NTgyLDk1ODQs''@;'; put 'put ''OTU4Myw2NTUxNywxMzI0MjMsMzc1OTUsMTMyNTc1LDE0NzM5NywzNDEyNCwxNzA3NywyOTY3OSwyMDkxNywxMzg5NywxNDk4MjYsMTY2MzcyLDM3NzAwLDEzNzY5MSwzMzUxOCwxNDY2MzIsMzA3ODAsMjY0MzYsMjUzMTEsMTQ5ODExLDE2NjMxNCwxMzE3NDQsMTU4NjQzLDEzNTk0MSwyMDM5''@;'; put 'put ''NSwxNDA1MjUsMjA0ODgsMTU5MDE3LDE2MjQzNiwxNDQ4OTYsMTUwMTkzLDE0MDU2MywyMDUyMSwxMzE5NjYsMjQ0ODQsMTMxOTY4LDEzMTkxMSwyODM3OSwxMzIxMjcsMjA2MDUsMjA3MzcsMTM0MzQsMjA3NTAsMzkwMjAsMTQxNDcsMzM4MTQsMTQ5OTI0LDEzMjIzMSwyMDgzMiwxNDQzMDgs''@;'; put 'put ''MjA4NDIsMTM0MTQzLDEzOTUxNiwxMzE4MTMsMTQwNTkyLDEzMjQ5NCwxNDM5MjMsMTM3NjAzLDIzNDI2LDM0Njg1LDEzMjUzMSwxNDY1ODUsMjA5MTQsMjA5MjAsNDAyNDQsMjA5MzcsMjA5NDMsMjA5NDUsMTU1ODAsMjA5NDcsMTUwMTgyLDIwOTE1LDIwOTYyLDIxMzE0LDIwOTczLDMzNzQx''@;'; put 'put ''LDI2OTQyLDE0NTE5NywyNDQ0MywyMTAwMywyMTAzMCwyMTA1MiwyMTE3MywyMTA3OSwyMTE0MCwyMTE3NywyMTE4OSwzMTc2NSwzNDExNCwyMTIxNiwzNDMxNywxNTg0ODMsMjEyNTMsMTY2NjIyLDIxODMzLDI4Mzc3LDE0NzMyOCwxMzM0NjAsMTQ3NDM2LDIxMjk5LDIxMzE2LDEzNDExNCwy''@;'; put 'put ''Nzg1MSwxMzY5OTgsMjY2NTEsMjk2NTMsMjQ2NTAsMTYwNDIsMTQ1NDAsMTM2OTM2LDI5MTQ5LDE3NTcwLDIxMzU3LDIxMzY0LDE2NTU0NywyMTM3NCwyMTM3NSwxMzY1OTgsMTM2NzIzLDMwNjk0LDIxMzk1LDE2NjU1NSwyMTQwOCwyMTQxOSwyMTQyMiwyOTYwNywxNTM0NTgsMTYyMTcsMjk1''@;'; put 'put ''OTYsMjE0NDEsMjE0NDUsMjc3MjEsMjAwNDEsMjI1MjYsMjE0NjUsMTUwMTksMTM0MDMxLDIxNDcyLDE0NzQzNSwxNDI3NTUsMjE0OTQsMTM0MjYzLDIxNTIzLDI4NzkzLDIxODAzLDI2MTk5LDI3OTk1LDIxNjEzLDE1ODU0NywxMzQ1MTYsMjE4NTMsMjE2NDcsMjE2NjgsMTgzNDIsMTM2OTcz''@;'; put 'put ''LDEzNDg3NywxNTc5NiwxMzQ0NzcsMTY2MzMyLDE0MDk1MiwyMTgzMSwxOTY5MywyMTU1MSwyOTcxOSwyMTg5NCwyMTkyOSwyMjAyMSwxMzc0MzEsMTQ3NTE0LDE3NzQ2LDE0ODUzMywyNjI5MSwxMzUzNDgsMjIwNzEsMjYzMTcsMTQ0MDEwLDI2Mjc2LDI2Mjg1LDIyMDkzLDIyMDk1LDMwOTYx''@;'; put 'put ''LDIyMjU3LDM4NzkxLDIxNTAyLDIyMjcyLDIyMjU1LDIyMjUzLDE2Njc1OCwxMzg1OSwxMzU3NTksMjIzNDIsMTQ3ODc3LDI3NzU4LDI4ODExLDIyMzM4LDE0MDAxLDE1ODg0NiwyMjUwMiwxMzYyMTQsMjI1MzEsMTM2Mjc2LDE0ODMyMywyMjU2NiwxNTA1MTcsMjI2MjAsMjI2OTgsMTM2NjUs''@;'; put 'put ''MjI3NTIsMjI3NDgsMTM1NzQwLDIyNzc5LDIzNTUxLDIyMzM5LDE3MjM2OCwxNDgwODgsMzc4NDMsMTM3MjksMjI4MTUsMjY3OTAsMTQwMTksMjgyNDksMTM2NzY2LDIzMDc2LDIxODQzLDEzNjg1MCwzNDA1MywyMjk4NSwxMzQ0NzgsMTU4ODQ5LDE1OTAxOCwxMzcxODAsMjMwMDEsMTM3MjEx''@;'; put 'put ''LDEzNzEzOCwxNTkxNDIsMjgwMTcsMTM3MjU2LDEzNjkxNywyMzAzMywxNTkzMDEsMjMyMTEsMjMxMzksMTQwNTQsMTQ5OTI5LDIzMTU5LDE0MDg4LDIzMTkwLDI5Nzk3LDIzMjUxLDE1OTY0OSwxNDA2MjgsMTU3NDksMTM3NDg5LDE0MTMwLDEzNjg4OCwyNDE5NSwyMTIwMCwyMzQxNCwyNTk5''@;'; put 'put ''MiwyMzQyMCwxNjIzMTgsMTYzODgsMTg1MjUsMTMxNTg4LDIzNTA5LDI0OTI4LDEzNzc4MCwxNTQwNjAsMTMyNTE3LDIzNTM5LDIzNDUzLDE5NzI4LDIzNTU3LDEzODA1MiwyMzU3MSwyOTY0NiwyMzU3MiwxMzg0MDUsMTU4NTA0LDIzNjI1LDE4NjUzLDIzNjg1LDIzNzg1LDIzNzkxLDIzOTQ3''@;'; put 'put ''LDEzODc0NSwxMzg4MDcsMjM4MjQsMjM4MzIsMjM4NzgsMTM4OTE2LDIzNzM4LDI0MDIzLDMzNTMyLDE0MzgxLDE0OTc2MSwxMzkzMzcsMTM5NjM1LDMzNDE1LDE0MzkwLDE1Mjk4LDI0MTEwLDI3Mjc0LDI0MTgxLDI0MTg2LDE0ODY2OCwxMzQzNTUsMjE0MTQsMjAxNTEsMjQyNzIsMjE0MTYs''@;'; put 'put ''MTM3MDczLDI0MDczLDI0MzA4LDE2NDk5NCwyNDMxMywyNDMxNSwxNDQ5NiwyNDMxNiwyNjY4NiwzNzkxNSwyNDMzMywxMzE1MjEsMTk0NzA4LDE1MDcwLDE4NjA2LDEzNTk5NCwyNDM3OCwxNTc4MzIsMTQwMjQwLDI0NDA4LDE0MDQwMSwyNDQxOSwzODg0NSwxNTkzNDIsMjQ0MzQsMzc2OTYs''@;'; put 'put ''MTY2NDU0LDI0NDg3LDIzOTkwLDE1NzExLDE1MjE0NCwxMzkxMTQsMTU5OTkyLDE0MDkwNCwzNzMzNCwxMzE3NDIsMTY2NDQxLDI0NjI1LDI2MjQ1LDEzNzMzNSwxNDY5MSwxNTgxNSwxMzg4MSwyMjQxNiwxNDEyMzYsMzEwODksMTU5MzYsMjQ3MzQsMjQ3NDAsMjQ3NTUsMTQ5ODkwLDE0OTkw''@;'; put 'put ''MywxNjIzODcsMjk4NjAsMjA3MDUsMjMyMDAsMjQ5MzIsMzM4MjgsMjQ4OTgsMTk0NzI2LDE1OTQ0MiwyNDk2MSwyMDk4MCwxMzI2OTQsMjQ5NjcsMjM0NjYsMTQ3MzgzLDE0MTQwNywyNTA0MywxNjY4MTMsMTcwMzMzLDI1MDQwLDE0NjQyLDE0MTY5NiwxNDE1MDUsMjQ2MTEsMjQ5MjQsMjU4''@;'; put 'put ''ODYsMjU0ODMsMTMxMzUyLDI1Mjg1LDEzNzA3MiwyNTMwMSwxNDI4NjEsMjU0NTIsMTQ5OTgzLDE0ODcxLDI1NjU2LDI1NTkyLDEzNjA3OCwxMzcyMTIsMjU3NDQsMjg1NTQsMTQyOTAyLDM4OTMyLDE0NzU5NiwxNTMzNzMsMjU4MjUsMjU4MjksMzgwMTEsMTQ5NTAsMjU2NTgsMTQ5MzUsMjU5''@;'; put 'put ''MzMsMjg0MzgsMTUwMDU2LDE1MDA1MSwyNTk4OSwyNTk2NSwyNTk1MSwxNDM0ODYsMjYwMzcsMTQ5ODI0LDE5MjU1LDI2MDY1LDE2NjAwLDEzNzI1NywyNjA4MCwyNjA4MywyNDU0MywxNDQzODQsMjYxMzYsMTQzODYzLDE0Mzg2NCwyNjE4MCwxNDM3ODAsMTQzNzgxLDI2MTg3LDEzNDc3Mywy''@;'; put 'put ''NjIxNSwxNTIwMzgsMjYyMjcsMjYyMjgsMTM4ODEzLDE0MzkyMSwxNjUzNjQsMTQzODE2LDE1MjMzOSwzMDY2MSwxNDE1NTksMzkzMzIsMjYzNzAsMTQ4MzgwLDE1MDA0OSwxNTE0NywyNzEzMCwxNDUzNDYsMjY0NjIsMjY0NzEsMjY0NjYsMTQ3OTE3LDE2ODE3MywyNjU4MywxNzY0MSwyNjY1''@;'; put 'put ''OCwyODI0MCwzNzQzNiwyNjYyNSwxNDQzNTgsMTU5MTM2LDI2NzE3LDE0NDQ5NSwyNzEwNSwyNzE0NywxNjY2MjMsMjY5OTUsMjY4MTksMTQ0ODQ1LDI2ODgxLDI2ODgwLDE1NjY2LDE0ODQ5LDE0NDk1NiwxNTIzMiwyNjU0MCwyNjk3NywxNjY0NzQsMTcxNDgsMjY5MzQsMjcwMzIsMTUyNjUs''@;'; put 'put ''MTMyMDQxLDMzNjM1LDIwNjI0LDI3MTI5LDE0NDk4NSwxMzk1NjIsMjcyMDUsMTQ1MTU1LDI3MjkzLDE1MzQ3LDI2NTQ1LDI3MzM2LDE2ODM0OCwxNTM3MywyNzQyMSwxMzM0MTEsMjQ3OTgsMjc0NDUsMjc1MDgsMTQxMjYxLDI4MzQxLDE0NjEzOSwxMzIwMjEsMTM3NTYwLDE0MTQ0LDIxNTM3''@;'; put 'put ''LDE0NjI2NiwyNzYxNywxNDcxOTYsMjc2MTIsMjc3MDMsMTQwNDI3LDE0OTc0NSwxNTg1NDUsMjc3MzgsMzMzMTgsMjc3NjksMTQ2ODc2LDE3NjA1LDE0Njg3NywxNDc4NzYsMTQ5NzcyLDE0OTc2MCwxNDY2MzMsMTQwNTMsMTU1OTUsMTM0NDUwLDM5ODExLDE0Mzg2NSwxNDA0MzMsMzI2NTUs''@;'; put 'put ''MjY2NzksMTU5MDEzLDE1OTEzNywxNTkyMTEsMjgwNTQsMjc5OTYsMjgyODQsMjg0MjAsMTQ5ODg3LDE0NzU4OSwxNTkzNDYsMzQwOTksMTU5NjA0LDIwOTM1LDI3ODA0LDI4MTg5LDMzODM4LDE2NjY4OSwyODIwNywxNDY5OTEsMjk3NzksMTQ3MzMwLDMxMTgwLDI4MjM5LDIzMTg1LDE0MzQz''@;'; put 'put ''NSwyODY2NCwxNDA5MywyODU3MywxNDY5OTIsMjg0MTAsMTM2MzQzLDE0NzUxNywxNzc0OSwzNzg3MiwyODQ4NCwyODUwOCwxNTY5NCwyODUzMiwxNjgzMDQsMTU2NzUsMjg1NzUsMTQ3NzgwLDI4NjI3LDE0NzYwMSwxNDc3OTcsMTQ3NTEzLDE0NzQ0MCwxNDczODAsMTQ3Nzc1LDIwOTU5LDE0''@;'; put 'put ''Nzc5OCwxNDc3OTksMTQ3Nzc2LDE1NjEyNSwyODc0NywyODc5OCwyODgzOSwyODgwMSwyODg3NiwyODg4NSwyODg4NiwyODg5NSwxNjY0NCwxNTg0OCwyOTEwOCwyOTA3OCwxNDgwODcsMjg5NzEsMjg5OTcsMjMxNzYsMjkwMDIsMjkwMzgsMjM3MDgsMTQ4MzI1LDI5MDA3LDM3NzMwLDE0ODE2''@;'; put 'put ''MSwyODk3MiwxNDg1NzAsMTUwMDU1LDE1MDA1MCwyOTExNCwxNjY4ODgsMjg4NjEsMjkxOTgsMzc5NTQsMjkyMDUsMjI4MDEsMzc5NTUsMjkyMjAsMzc2OTcsMTUzMDkzLDI5MjMwLDI5MjQ4LDE0OTg3NiwyNjgxMywyOTI2OSwyOTI3MSwxNTk1NywxNDM0MjgsMjY2MzcsMjg0NzcsMjkzMTQs''@;'; put 'put ''Mjk0ODIsMjk0ODMsMTQ5NTM5LDE2NTkzMSwxODY2OSwxNjU4OTIsMjk0ODAsMjk0ODYsMjk2NDcsMjk2MTAsMTM0MjAyLDE1ODI1NCwyOTY0MSwyOTc2OSwxNDc5MzgsMTM2OTM1LDE1MDA1MiwyNjE0NywxNDAyMSwxNDk5NDMsMTQ5OTAxLDE1MDAxMSwyOTY4NywyOTcxNywyNjg4MywxNTAw''@;'; put 'put ''NTQsMjk3NTMsMTMyNTQ3LDE2MDg3LDI5Nzg4LDE0MTQ4NSwyOTc5MiwxNjc2MDIsMjk3NjcsMjk2NjgsMjk4MTQsMzM3MjEsMjk4MDQsMTQxMjgsMjk4MTIsMzc4NzMsMjcxODAsMjk4MjYsMTg3NzEsMTUwMTU2LDE0NzgwNywxNTAxMzcsMTY2Nzk5LDIzMzY2LDE2NjkxNSwxMzczNzQsMjk4''@;'; put 'put ''OTYsMTM3NjA4LDI5OTY2LDI5OTI5LDI5OTgyLDE2NzY0MSwxMzc4MDMsMjM1MTEsMTY3NTk2LDM3NzY1LDMwMDI5LDMwMDI2LDMwMDU1LDMwMDYyLDE1MTQyNiwxNjEzMiwxNTA4MDMsMzAwOTQsMjk3ODksMzAxMTAsMzAxMzIsMzAyMTAsMzAyNTIsMzAyODksMzAyODcsMzAzMTksMzAzMjYs''@;'; put 'put ''MTU2NjYxLDMwMzUyLDMzMjYzLDE0MzI4LDE1Nzk2OSwxNTc5NjYsMzAzNjksMzAzNzMsMzAzOTEsMzA0MTIsMTU5NjQ3LDMzODkwLDE1MTcwOSwxNTE5MzMsMTM4NzgwLDMwNDk0LDMwNTAyLDMwNTI4LDI1Nzc1LDE1MjA5NiwzMDU1MiwxNDQwNDQsMzA2MzksMTY2MjQ0LDE2NjI0OCwxMzY4''@;'; put 'put ''OTcsMzA3MDgsMzA3MjksMTM2MDU0LDE1MDAzNCwyNjgyNiwzMDg5NSwzMDkxOSwzMDkzMSwzODU2NSwzMTAyMiwxNTMwNTYsMzA5MzUsMzEwMjgsMzA4OTcsMTYxMjkyLDM2NzkyLDM0OTQ4LDE2NjY5OSwxNTU3NzksMTQwODI4LDMxMTEwLDM1MDcyLDI2ODgyLDMxMTA0LDE1MzY4NywzMTEz''@;'; put 'put ''MywxNjI2MTcsMzEwMzYsMzExNDUsMjgyMDIsMTYwMDM4LDE2MDQwLDMxMTc0LDE2ODIwNSwzMTE4OF0sImV1Yy1rciI6WzQ0MDM0LDQ0MDM1LDQ0MDM3LDQ0MDM4LDQ0MDQzLDQ0MDQ0LDQ0MDQ1LDQ0MDQ2LDQ0MDQ3LDQ0MDU2LDQ0MDYyLDQ0MDYzLDQ0MDY1LDQ0MDY2LDQ0MDY3LDQ0MDY5''@;'; put 'put ''LDQ0MDcwLDQ0MDcxLDQ0MDcyLDQ0MDczLDQ0MDc0LDQ0MDc1LDQ0MDc4LDQ0MDgyLDQ0MDgzLDQ0MDg0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ0MDg1LDQ0MDg2LDQ0MDg3LDQ0MDkwLDQ0MDkxLDQ0MDkzLDQ0MDk0LDQ0MDk1LDQ0MDk3LDQ0MDk4LDQ0MDk5LDQ0MTAwLDQ0''@;'; put 'put ''MTAxLDQ0MTAyLDQ0MTAzLDQ0MTA0LDQ0MTA1LDQ0MTA2LDQ0MTA4LDQ0MTEwLDQ0MTExLDQ0MTEyLDQ0MTEzLDQ0MTE0LDQ0MTE1LDQ0MTE3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ0MTE4LDQ0MTE5LDQ0MTIxLDQ0MTIyLDQ0MTIzLDQ0MTI1LDQ0MTI2LDQ0MTI3LDQ0MTI4''@;'; put 'put ''LDQ0MTI5LDQ0MTMwLDQ0MTMxLDQ0MTMyLDQ0MTMzLDQ0MTM0LDQ0MTM1LDQ0MTM2LDQ0MTM3LDQ0MTM4LDQ0MTM5LDQ0MTQwLDQ0MTQxLDQ0MTQyLDQ0MTQzLDQ0MTQ2LDQ0MTQ3LDQ0MTQ5LDQ0MTUwLDQ0MTUzLDQ0MTU1LDQ0MTU2LDQ0MTU3LDQ0MTU4LDQ0MTU5LDQ0MTYyLDQ0MTY3LDQ0''@;'; put 'put ''MTY4LDQ0MTczLDQ0MTc0LDQ0MTc1LDQ0MTc3LDQ0MTc4LDQ0MTc5LDQ0MTgxLDQ0MTgyLDQ0MTgzLDQ0MTg0LDQ0MTg1LDQ0MTg2LDQ0MTg3LDQ0MTkwLDQ0MTk0LDQ0MTk1LDQ0MTk2LDQ0MTk3LDQ0MTk4LDQ0MTk5LDQ0MjAzLDQ0MjA1LDQ0MjA2LDQ0MjA5LDQ0MjEwLDQ0MjExLDQ0MjEy''@;'; put 'put ''LDQ0MjEzLDQ0MjE0LDQ0MjE1LDQ0MjE4LDQ0MjIyLDQ0MjIzLDQ0MjI0LDQ0MjI2LDQ0MjI3LDQ0MjI5LDQ0MjMwLDQ0MjMxLDQ0MjMzLDQ0MjM0LDQ0MjM1LDQ0MjM3LDQ0MjM4LDQ0MjM5LDQ0MjQwLDQ0MjQxLDQ0MjQyLDQ0MjQzLDQ0MjQ0LDQ0MjQ2LDQ0MjQ4LDQ0MjQ5LDQ0MjUwLDQ0''@;'; put 'put ''MjUxLDQ0MjUyLDQ0MjUzLDQ0MjU0LDQ0MjU1LDQ0MjU4LDQ0MjU5LDQ0MjYxLDQ0MjYyLDQ0MjY1LDQ0MjY3LDQ0MjY5LDQ0MjcwLDQ0Mjc0LDQ0Mjc2LDQ0Mjc5LDQ0MjgwLDQ0MjgxLDQ0MjgyLDQ0MjgzLDQ0Mjg2LDQ0Mjg3LDQ0Mjg5LDQ0MjkwLDQ0MjkxLDQ0MjkzLDQ0Mjk1LDQ0Mjk2''@;'; put 'put ''LDQ0Mjk3LDQ0Mjk4LDQ0Mjk5LDQ0MzAyLDQ0MzA0LDQ0MzA2LDQ0MzA3LDQ0MzA4LDQ0MzA5LDQ0MzEwLDQ0MzExLDQ0MzEzLDQ0MzE0LDQ0MzE1LDQ0MzE3LDQ0MzE4LDQ0MzE5LDQ0MzIxLDQ0MzIyLDQ0MzIzLDQ0MzI0LDQ0MzI1LDQ0MzI2LDQ0MzI3LDQ0MzI4LDQ0MzMwLDQ0MzMxLDQ0''@;'; put 'put ''MzM0LDQ0MzM1LDQ0MzM2LDQ0MzM3LDQ0MzM4LDQ0MzM5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ0MzQyLDQ0MzQzLDQ0MzQ1LDQ0MzQ2LDQ0MzQ3LDQ0MzQ5LDQ0MzUwLDQ0MzUxLDQ0MzUyLDQ0MzUzLDQ0MzU0LDQ0MzU1LDQ0MzU4LDQ0MzYwLDQ0MzYyLDQ0MzYzLDQ0MzY0''@;'; put 'put ''LDQ0MzY1LDQ0MzY2LDQ0MzY3LDQ0MzY5LDQ0MzcwLDQ0MzcxLDQ0MzczLDQ0Mzc0LDQ0Mzc1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ0Mzc3LDQ0Mzc4LDQ0Mzc5LDQ0MzgwLDQ0MzgxLDQ0MzgyLDQ0MzgzLDQ0Mzg0LDQ0Mzg2LDQ0Mzg4LDQ0Mzg5LDQ0MzkwLDQ0MzkxLDQ0''@;'; put 'put ''MzkyLDQ0MzkzLDQ0Mzk0LDQ0Mzk1LDQ0Mzk4LDQ0Mzk5LDQ0NDAxLDQ0NDAyLDQ0NDA3LDQ0NDA4LDQ0NDA5LDQ0NDEwLDQ0NDE0LDQ0NDE2LDQ0NDE5LDQ0NDIwLDQ0NDIxLDQ0NDIyLDQ0NDIzLDQ0NDI2LDQ0NDI3LDQ0NDI5LDQ0NDMwLDQ0NDMxLDQ0NDMzLDQ0NDM0LDQ0NDM1LDQ0NDM2''@;'; put 'put ''LDQ0NDM3LDQ0NDM4LDQ0NDM5LDQ0NDQwLDQ0NDQxLDQ0NDQyLDQ0NDQzLDQ0NDQ2LDQ0NDQ3LDQ0NDQ4LDQ0NDQ5LDQ0NDUwLDQ0NDUxLDQ0NDUzLDQ0NDU0LDQ0NDU1LDQ0NDU2LDQ0NDU3LDQ0NDU4LDQ0NDU5LDQ0NDYwLDQ0NDYxLDQ0NDYyLDQ0NDYzLDQ0NDY0LDQ0NDY1LDQ0NDY2LDQ0''@;'; put 'put ''NDY3LDQ0NDY4LDQ0NDY5LDQ0NDcwLDQ0NDcyLDQ0NDczLDQ0NDc0LDQ0NDc1LDQ0NDc2LDQ0NDc3LDQ0NDc4LDQ0NDc5LDQ0NDgyLDQ0NDgzLDQ0NDg1LDQ0NDg2LDQ0NDg3LDQ0NDg5LDQ0NDkwLDQ0NDkxLDQ0NDkyLDQ0NDkzLDQ0NDk0LDQ0NDk1LDQ0NDk4LDQ0NTAwLDQ0NTAxLDQ0NTAy''@;'; put 'put ''LDQ0NTAzLDQ0NTA0LDQ0NTA1LDQ0NTA2LDQ0NTA3LDQ0NTA5LDQ0NTEwLDQ0NTExLDQ0NTEzLDQ0NTE0LDQ0NTE1LDQ0NTE3LDQ0NTE4LDQ0NTE5LDQ0NTIwLDQ0NTIxLDQ0NTIyLDQ0NTIzLDQ0NTI0LDQ0NTI1LDQ0NTI2LDQ0NTI3LDQ0NTI4LDQ0NTI5LDQ0NTMwLDQ0NTMxLDQ0NTMyLDQ0''@;'; put 'put ''NTMzLDQ0NTM0LDQ0NTM1LDQ0NTM4LDQ0NTM5LDQ0NTQxLDQ0NTQyLDQ0NTQ2LDQ0NTQ3LDQ0NTQ4LDQ0NTQ5LDQ0NTUwLDQ0NTUxLDQ0NTU0LDQ0NTU2LDQ0NTU4LDQ0NTU5LDQ0NTYwLDQ0NTYxLDQ0NTYyLDQ0NTYzLDQ0NTY1LDQ0NTY2LDQ0NTY3LDQ0NTY4LDQ0NTY5LDQ0NTcwLDQ0NTcx''@;'; put 'put ''LDQ0NTcyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ0NTczLDQ0NTc0LDQ0NTc1LDQ0NTc2LDQ0NTc3LDQ0NTc4LDQ0NTc5LDQ0NTgwLDQ0NTgxLDQ0NTgyLDQ0NTgzLDQ0NTg0LDQ0NTg1LDQ0NTg2LDQ0NTg3LDQ0NTg4LDQ0NTg5LDQ0NTkwLDQ0NTkxLDQ0NTk0LDQ0NTk1LDQ0''@;'; put 'put ''NTk3LDQ0NTk4LDQ0NjAxLDQ0NjAzLDQ0NjA0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ0NjA1LDQ0NjA2LDQ0NjA3LDQ0NjEwLDQ0NjEyLDQ0NjE1LDQ0NjE2LDQ0NjE3LDQ0NjE5LDQ0NjIzLDQ0NjI1LDQ0NjI2LDQ0NjI3LDQ0NjI5LDQ0NjMxLDQ0NjMyLDQ0NjMzLDQ0NjM0''@;'; put 'put ''LDQ0NjM1LDQ0NjM4LDQ0NjQyLDQ0NjQzLDQ0NjQ0LDQ0NjQ2LDQ0NjQ3LDQ0NjUwLDQ0NjUxLDQ0NjUzLDQ0NjU0LDQ0NjU1LDQ0NjU3LDQ0NjU4LDQ0NjU5LDQ0NjYwLDQ0NjYxLDQ0NjYyLDQ0NjYzLDQ0NjY2LDQ0NjcwLDQ0NjcxLDQ0NjcyLDQ0NjczLDQ0Njc0LDQ0Njc1LDQ0Njc4LDQ0''@;'; put 'put ''Njc5LDQ0NjgwLDQ0NjgxLDQ0NjgyLDQ0NjgzLDQ0Njg1LDQ0Njg2LDQ0Njg3LDQ0Njg4LDQ0Njg5LDQ0NjkwLDQ0NjkxLDQ0NjkyLDQ0NjkzLDQ0Njk0LDQ0Njk1LDQ0Njk2LDQ0Njk3LDQ0Njk4LDQ0Njk5LDQ0NzAwLDQ0NzAxLDQ0NzAyLDQ0NzAzLDQ0NzA0LDQ0NzA1LDQ0NzA2LDQ0NzA3''@;'; put 'put ''LDQ0NzA4LDQ0NzA5LDQ0NzEwLDQ0NzExLDQ0NzEyLDQ0NzEzLDQ0NzE0LDQ0NzE1LDQ0NzE2LDQ0NzE3LDQ0NzE4LDQ0NzE5LDQ0NzIwLDQ0NzIxLDQ0NzIyLDQ0NzIzLDQ0NzI0LDQ0NzI1LDQ0NzI2LDQ0NzI3LDQ0NzI4LDQ0NzI5LDQ0NzMwLDQ0NzMxLDQ0NzM1LDQ0NzM3LDQ0NzM4LDQ0''@;'; put 'put ''NzM5LDQ0NzQxLDQ0NzQyLDQ0NzQzLDQ0NzQ0LDQ0NzQ1LDQ0NzQ2LDQ0NzQ3LDQ0NzUwLDQ0NzU0LDQ0NzU1LDQ0NzU2LDQ0NzU3LDQ0NzU4LDQ0NzU5LDQ0NzYyLDQ0NzYzLDQ0NzY1LDQ0NzY2LDQ0NzY3LDQ0NzY4LDQ0NzY5LDQ0NzcwLDQ0NzcxLDQ0NzcyLDQ0NzczLDQ0Nzc0LDQ0Nzc1''@;'; put 'put ''LDQ0Nzc3LDQ0Nzc4LDQ0NzgwLDQ0NzgyLDQ0NzgzLDQ0Nzg0LDQ0Nzg1LDQ0Nzg2LDQ0Nzg3LDQ0Nzg5LDQ0NzkwLDQ0NzkxLDQ0NzkzLDQ0Nzk0LDQ0Nzk1LDQ0Nzk3LDQ0Nzk4LDQ0Nzk5LDQ0ODAwLDQ0ODAxLDQ0ODAyLDQ0ODAzLDQ0ODA0LDQ0ODA1LG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLDQ0ODA2LDQ0ODA5LDQ0ODEwLDQ0ODExLDQ0ODEyLDQ0ODE0LDQ0ODE1LDQ0ODE3LDQ0ODE4LDQ0ODE5LDQ0ODIwLDQ0ODIxLDQ0ODIyLDQ0ODIzLDQ0ODI0LDQ0ODI1LDQ0ODI2LDQ0ODI3LDQ0ODI4LDQ0ODI5LDQ0ODMwLDQ0ODMxLDQ0ODMyLDQ0ODMzLDQ0ODM0LDQ0ODM1''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ0ODM2LDQ0ODM3LDQ0ODM4LDQ0ODM5LDQ0ODQwLDQ0ODQxLDQ0ODQyLDQ0ODQzLDQ0ODQ2LDQ0ODQ3LDQ0ODQ5LDQ0ODUxLDQ0ODUzLDQ0ODU0LDQ0ODU1LDQ0ODU2LDQ0ODU3LDQ0ODU4LDQ0ODU5LDQ0ODYyLDQ0ODY0LDQ0ODY4LDQ0''@;'; put 'put ''ODY5LDQ0ODcwLDQ0ODcxLDQ0ODc0LDQ0ODc1LDQ0ODc2LDQ0ODc3LDQ0ODc4LDQ0ODc5LDQ0ODgxLDQ0ODgyLDQ0ODgzLDQ0ODg0LDQ0ODg1LDQ0ODg2LDQ0ODg3LDQ0ODg4LDQ0ODg5LDQ0ODkwLDQ0ODkxLDQ0ODk0LDQ0ODk1LDQ0ODk2LDQ0ODk3LDQ0ODk4LDQ0ODk5LDQ0OTAyLDQ0OTAz''@;'; put 'put ''LDQ0OTA0LDQ0OTA1LDQ0OTA2LDQ0OTA3LDQ0OTA4LDQ0OTA5LDQ0OTEwLDQ0OTExLDQ0OTEyLDQ0OTEzLDQ0OTE0LDQ0OTE1LDQ0OTE2LDQ0OTE3LDQ0OTE4LDQ0OTE5LDQ0OTIwLDQ0OTIyLDQ0OTIzLDQ0OTI0LDQ0OTI1LDQ0OTI2LDQ0OTI3LDQ0OTI5LDQ0OTMwLDQ0OTMxLDQ0OTMzLDQ0''@;'; put 'put ''OTM0LDQ0OTM1LDQ0OTM3LDQ0OTM4LDQ0OTM5LDQ0OTQwLDQ0OTQxLDQ0OTQyLDQ0OTQzLDQ0OTQ2LDQ0OTQ3LDQ0OTQ4LDQ0OTUwLDQ0OTUxLDQ0OTUyLDQ0OTUzLDQ0OTU0LDQ0OTU1LDQ0OTU3LDQ0OTU4LDQ0OTU5LDQ0OTYwLDQ0OTYxLDQ0OTYyLDQ0OTYzLDQ0OTY0LDQ0OTY1LDQ0OTY2''@;'; put 'put ''LDQ0OTY3LDQ0OTY4LDQ0OTY5LDQ0OTcwLDQ0OTcxLDQ0OTcyLDQ0OTczLDQ0OTc0LDQ0OTc1LDQ0OTc2LDQ0OTc3LDQ0OTc4LDQ0OTc5LDQ0OTgwLDQ0OTgxLDQ0OTgyLDQ0OTgzLDQ0OTg2LDQ0OTg3LDQ0OTg5LDQ0OTkwLDQ0OTkxLDQ0OTkzLDQ0OTk0LDQ0OTk1LDQ0OTk2LDQ0OTk3LDQ0''@;'; put 'put ''OTk4LDQ1MDAyLDQ1MDA0LDQ1MDA3LDQ1MDA4LDQ1MDA5LDQ1MDEwLDQ1MDExLDQ1MDEzLDQ1MDE0LDQ1MDE1LDQ1MDE2LDQ1MDE3LDQ1MDE4LDQ1MDE5LDQ1MDIxLDQ1MDIyLDQ1MDIzLDQ1MDI0LDQ1MDI1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ1MDI2LDQ1MDI3LDQ1MDI4''@;'; put 'put ''LDQ1MDI5LDQ1MDMwLDQ1MDMxLDQ1MDM0LDQ1MDM1LDQ1MDM2LDQ1MDM3LDQ1MDM4LDQ1MDM5LDQ1MDQyLDQ1MDQzLDQ1MDQ1LDQ1MDQ2LDQ1MDQ3LDQ1MDQ5LDQ1MDUwLDQ1MDUxLDQ1MDUyLDQ1MDUzLDQ1MDU0LDQ1MDU1LDQ1MDU4LDQ1MDU5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLDQ1MDYxLDQ1MDYyLDQ1MDYzLDQ1MDY0LDQ1MDY1LDQ1MDY2LDQ1MDY3LDQ1MDY5LDQ1MDcwLDQ1MDcxLDQ1MDczLDQ1MDc0LDQ1MDc1LDQ1MDc3LDQ1MDc4LDQ1MDc5LDQ1MDgwLDQ1MDgxLDQ1MDgyLDQ1MDgzLDQ1MDg2LDQ1MDg3LDQ1MDg4LDQ1MDg5LDQ1MDkwLDQ1MDkxLDQ1MDky''@;'; put 'put ''LDQ1MDkzLDQ1MDk0LDQ1MDk1LDQ1MDk3LDQ1MDk4LDQ1MDk5LDQ1MTAwLDQ1MTAxLDQ1MTAyLDQ1MTAzLDQ1MTA0LDQ1MTA1LDQ1MTA2LDQ1MTA3LDQ1MTA4LDQ1MTA5LDQ1MTEwLDQ1MTExLDQ1MTEyLDQ1MTEzLDQ1MTE0LDQ1MTE1LDQ1MTE2LDQ1MTE3LDQ1MTE4LDQ1MTE5LDQ1MTIwLDQ1''@;'; put 'put ''MTIxLDQ1MTIyLDQ1MTIzLDQ1MTI2LDQ1MTI3LDQ1MTI5LDQ1MTMxLDQ1MTMzLDQ1MTM1LDQ1MTM2LDQ1MTM3LDQ1MTM4LDQ1MTQyLDQ1MTQ0LDQ1MTQ2LDQ1MTQ3LDQ1MTQ4LDQ1MTUwLDQ1MTUxLDQ1MTUyLDQ1MTUzLDQ1MTU0LDQ1MTU1LDQ1MTU2LDQ1MTU3LDQ1MTU4LDQ1MTU5LDQ1MTYw''@;'; put 'put ''LDQ1MTYxLDQ1MTYyLDQ1MTYzLDQ1MTY0LDQ1MTY1LDQ1MTY2LDQ1MTY3LDQ1MTY4LDQ1MTY5LDQ1MTcwLDQ1MTcxLDQ1MTcyLDQ1MTczLDQ1MTc0LDQ1MTc1LDQ1MTc2LDQ1MTc3LDQ1MTc4LDQ1MTc5LDQ1MTgyLDQ1MTgzLDQ1MTg1LDQ1MTg2LDQ1MTg3LDQ1MTg5LDQ1MTkwLDQ1MTkxLDQ1''@;'; put 'put ''MTkyLDQ1MTkzLDQ1MTk0LDQ1MTk1LDQ1MTk4LDQ1MjAwLDQ1MjAyLDQ1MjAzLDQ1MjA0LDQ1MjA1LDQ1MjA2LDQ1MjA3LDQ1MjExLDQ1MjEzLDQ1MjE0LDQ1MjE5LDQ1MjIwLDQ1MjIxLDQ1MjIyLDQ1MjIzLDQ1MjI2LDQ1MjMyLDQ1MjM0LDQ1MjM4LDQ1MjM5LDQ1MjQxLDQ1MjQyLDQ1MjQz''@;'; put 'put ''LDQ1MjQ1LDQ1MjQ2LDQ1MjQ3LDQ1MjQ4LDQ1MjQ5LDQ1MjUwLDQ1MjUxLDQ1MjU0LDQ1MjU4LDQ1MjU5LDQ1MjYwLDQ1MjYxLDQ1MjYyLDQ1MjYzLDQ1MjY2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ1MjY3LDQ1MjY5LDQ1MjcwLDQ1MjcxLDQ1MjczLDQ1Mjc0LDQ1Mjc1LDQ1''@;'; put 'put ''Mjc2LDQ1Mjc3LDQ1Mjc4LDQ1Mjc5LDQ1MjgxLDQ1MjgyLDQ1MjgzLDQ1Mjg0LDQ1Mjg2LDQ1Mjg3LDQ1Mjg4LDQ1Mjg5LDQ1MjkwLDQ1MjkxLDQ1MjkyLDQ1MjkzLDQ1Mjk0LDQ1Mjk1LDQ1Mjk2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ1Mjk3LDQ1Mjk4LDQ1Mjk5LDQ1MzAw''@;'; put 'put ''LDQ1MzAxLDQ1MzAyLDQ1MzAzLDQ1MzA0LDQ1MzA1LDQ1MzA2LDQ1MzA3LDQ1MzA4LDQ1MzA5LDQ1MzEwLDQ1MzExLDQ1MzEyLDQ1MzEzLDQ1MzE0LDQ1MzE1LDQ1MzE2LDQ1MzE3LDQ1MzE4LDQ1MzE5LDQ1MzIyLDQ1MzI1LDQ1MzI2LDQ1MzI3LDQ1MzI5LDQ1MzMyLDQ1MzMzLDQ1MzM0LDQ1''@;'; put 'put ''MzM1LDQ1MzM4LDQ1MzQyLDQ1MzQzLDQ1MzQ0LDQ1MzQ1LDQ1MzQ2LDQ1MzUwLDQ1MzUxLDQ1MzUzLDQ1MzU0LDQ1MzU1LDQ1MzU3LDQ1MzU4LDQ1MzU5LDQ1MzYwLDQ1MzYxLDQ1MzYyLDQ1MzYzLDQ1MzY2LDQ1MzcwLDQ1MzcxLDQ1MzcyLDQ1MzczLDQ1Mzc0LDQ1Mzc1LDQ1Mzc4LDQ1Mzc5''@;'; put 'put ''LDQ1MzgxLDQ1MzgyLDQ1MzgzLDQ1Mzg1LDQ1Mzg2LDQ1Mzg3LDQ1Mzg4LDQ1Mzg5LDQ1MzkwLDQ1MzkxLDQ1Mzk0LDQ1Mzk1LDQ1Mzk4LDQ1Mzk5LDQ1NDAxLDQ1NDAyLDQ1NDAzLDQ1NDA1LDQ1NDA2LDQ1NDA3LDQ1NDA5LDQ1NDEwLDQ1NDExLDQ1NDEyLDQ1NDEzLDQ1NDE0LDQ1NDE1LDQ1''@;'; put 'put ''NDE2LDQ1NDE3LDQ1NDE4LDQ1NDE5LDQ1NDIwLDQ1NDIxLDQ1NDIyLDQ1NDIzLDQ1NDI0LDQ1NDI1LDQ1NDI2LDQ1NDI3LDQ1NDI4LDQ1NDI5LDQ1NDMwLDQ1NDMxLDQ1NDM0LDQ1NDM1LDQ1NDM3LDQ1NDM4LDQ1NDM5LDQ1NDQxLDQ1NDQzLDQ1NDQ0LDQ1NDQ1LDQ1NDQ2LDQ1NDQ3LDQ1NDUw''@;'; put 'put ''LDQ1NDUyLDQ1NDU0LDQ1NDU1LDQ1NDU2LDQ1NDU3LDQ1NDYxLDQ1NDYyLDQ1NDYzLDQ1NDY1LDQ1NDY2LDQ1NDY3LDQ1NDY5LDQ1NDcwLDQ1NDcxLDQ1NDcyLDQ1NDczLDQ1NDc0LDQ1NDc1LDQ1NDc2LDQ1NDc3LDQ1NDc4LDQ1NDc5LDQ1NDgxLDQ1NDgyLDQ1NDgzLDQ1NDg0LDQ1NDg1LDQ1''@;'; put 'put ''NDg2LDQ1NDg3LDQ1NDg4LDQ1NDg5LDQ1NDkwLDQ1NDkxLDQ1NDkyLDQ1NDkzLDQ1NDk0LDQ1NDk1LDQ1NDk2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ1NDk3LDQ1NDk4LDQ1NDk5LDQ1NTAwLDQ1NTAxLDQ1NTAyLDQ1NTAzLDQ1NTA0LDQ1NTA1LDQ1NTA2LDQ1NTA3LDQ1NTA4''@;'; put 'put ''LDQ1NTA5LDQ1NTEwLDQ1NTExLDQ1NTEyLDQ1NTEzLDQ1NTE0LDQ1NTE1LDQ1NTE3LDQ1NTE4LDQ1NTE5LDQ1NTIxLDQ1NTIyLDQ1NTIzLDQ1NTI1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ1NTI2LDQ1NTI3LDQ1NTI4LDQ1NTI5LDQ1NTMwLDQ1NTMxLDQ1NTM0LDQ1NTM2LDQ1''@;'; put 'put ''NTM3LDQ1NTM4LDQ1NTM5LDQ1NTQwLDQ1NTQxLDQ1NTQyLDQ1NTQzLDQ1NTQ2LDQ1NTQ3LDQ1NTQ5LDQ1NTUwLDQ1NTUxLDQ1NTUzLDQ1NTU0LDQ1NTU1LDQ1NTU2LDQ1NTU3LDQ1NTU4LDQ1NTU5LDQ1NTYwLDQ1NTYyLDQ1NTY0LDQ1NTY2LDQ1NTY3LDQ1NTY4LDQ1NTY5LDQ1NTcwLDQ1NTcx''@;'; put 'put ''LDQ1NTc0LDQ1NTc1LDQ1NTc3LDQ1NTc4LDQ1NTgxLDQ1NTgyLDQ1NTgzLDQ1NTg0LDQ1NTg1LDQ1NTg2LDQ1NTg3LDQ1NTkwLDQ1NTkyLDQ1NTk0LDQ1NTk1LDQ1NTk2LDQ1NTk3LDQ1NTk4LDQ1NTk5LDQ1NjAxLDQ1NjAyLDQ1NjAzLDQ1NjA0LDQ1NjA1LDQ1NjA2LDQ1NjA3LDQ1NjA4LDQ1''@;'; put 'put ''NjA5LDQ1NjEwLDQ1NjExLDQ1NjEyLDQ1NjEzLDQ1NjE0LDQ1NjE1LDQ1NjE2LDQ1NjE3LDQ1NjE4LDQ1NjE5LDQ1NjIxLDQ1NjIyLDQ1NjIzLDQ1NjI0LDQ1NjI1LDQ1NjI2LDQ1NjI3LDQ1NjI5LDQ1NjMwLDQ1NjMxLDQ1NjMyLDQ1NjMzLDQ1NjM0LDQ1NjM1LDQ1NjM2LDQ1NjM3LDQ1NjM4''@;'; put 'put ''LDQ1NjM5LDQ1NjQwLDQ1NjQxLDQ1NjQyLDQ1NjQzLDQ1NjQ0LDQ1NjQ1LDQ1NjQ2LDQ1NjQ3LDQ1NjQ4LDQ1NjQ5LDQ1NjUwLDQ1NjUxLDQ1NjUyLDQ1NjUzLDQ1NjU0LDQ1NjU1LDQ1NjU3LDQ1NjU4LDQ1NjU5LDQ1NjYxLDQ1NjYyLDQ1NjYzLDQ1NjY1LDQ1NjY2LDQ1NjY3LDQ1NjY4LDQ1''@;'; put 'put ''NjY5LDQ1NjcwLDQ1NjcxLDQ1Njc0LDQ1Njc1LDQ1Njc2LDQ1Njc3LDQ1Njc4LDQ1Njc5LDQ1NjgwLDQ1NjgxLDQ1NjgyLDQ1NjgzLDQ1Njg2LDQ1Njg3LDQ1Njg4LDQ1Njg5LDQ1NjkwLDQ1NjkxLDQ1NjkzLDQ1Njk0LDQ1Njk1LDQ1Njk2LDQ1Njk3LDQ1Njk4LDQ1Njk5LDQ1NzAyLDQ1NzAz''@;'; put 'put ''LDQ1NzA0LDQ1NzA2LDQ1NzA3LDQ1NzA4LDQ1NzA5LDQ1NzEwLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ1NzExLDQ1NzE0LDQ1NzE1LDQ1NzE3LDQ1NzE4LDQ1NzE5LDQ1NzIzLDQ1NzI0LDQ1NzI1LDQ1NzI2LDQ1NzI3LDQ1NzMwLDQ1NzMyLDQ1NzM1LDQ1NzM2LDQ1NzM3LDQ1''@;'; put 'put ''NzM5LDQ1NzQxLDQ1NzQyLDQ1NzQzLDQ1NzQ1LDQ1NzQ2LDQ1NzQ3LDQ1NzQ5LDQ1NzUwLDQ1NzUxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ1NzUyLDQ1NzUzLDQ1NzU0LDQ1NzU1LDQ1NzU2LDQ1NzU3LDQ1NzU4LDQ1NzU5LDQ1NzYwLDQ1NzYxLDQ1NzYyLDQ1NzYzLDQ1NzY0''@;'; put 'put ''LDQ1NzY1LDQ1NzY2LDQ1NzY3LDQ1NzcwLDQ1NzcxLDQ1NzczLDQ1Nzc0LDQ1Nzc1LDQ1Nzc3LDQ1Nzc5LDQ1NzgwLDQ1NzgxLDQ1NzgyLDQ1NzgzLDQ1Nzg2LDQ1Nzg4LDQ1NzkwLDQ1NzkxLDQ1NzkyLDQ1NzkzLDQ1Nzk1LDQ1Nzk5LDQ1ODAxLDQ1ODAyLDQ1ODA4LDQ1ODA5LDQ1ODEwLDQ1''@;'; put 'put ''ODE0LDQ1ODIwLDQ1ODIxLDQ1ODIyLDQ1ODI2LDQ1ODI3LDQ1ODI5LDQ1ODMwLDQ1ODMxLDQ1ODMzLDQ1ODM0LDQ1ODM1LDQ1ODM2LDQ1ODM3LDQ1ODM4LDQ1ODM5LDQ1ODQyLDQ1ODQ2LDQ1ODQ3LDQ1ODQ4LDQ1ODQ5LDQ1ODUwLDQ1ODUxLDQ1ODUzLDQ1ODU0LDQ1ODU1LDQ1ODU2LDQ1ODU3''@;'; put 'put ''LDQ1ODU4LDQ1ODU5LDQ1ODYwLDQ1ODYxLDQ1ODYyLDQ1ODYzLDQ1ODY0LDQ1ODY1LDQ1ODY2LDQ1ODY3LDQ1ODY4LDQ1ODY5LDQ1ODcwLDQ1ODcxLDQ1ODcyLDQ1ODczLDQ1ODc0LDQ1ODc1LDQ1ODc2LDQ1ODc3LDQ1ODc4LDQ1ODc5LDQ1ODgwLDQ1ODgxLDQ1ODgyLDQ1ODgzLDQ1ODg0LDQ1''@;'; put 'put ''ODg1LDQ1ODg2LDQ1ODg3LDQ1ODg4LDQ1ODg5LDQ1ODkwLDQ1ODkxLDQ1ODkyLDQ1ODkzLDQ1ODk0LDQ1ODk1LDQ1ODk2LDQ1ODk3LDQ1ODk4LDQ1ODk5LDQ1OTAwLDQ1OTAxLDQ1OTAyLDQ1OTAzLDQ1OTA0LDQ1OTA1LDQ1OTA2LDQ1OTA3LDQ1OTExLDQ1OTEzLDQ1OTE0LDQ1OTE3LDQ1OTIw''@;'; put 'put ''LDQ1OTIxLDQ1OTIyLDQ1OTIzLDQ1OTI2LDQ1OTI4LDQ1OTMwLDQ1OTMyLDQ1OTMzLDQ1OTM1LDQ1OTM4LDQ1OTM5LDQ1OTQxLDQ1OTQyLDQ1OTQzLDQ1OTQ1LDQ1OTQ2LDQ1OTQ3LDQ1OTQ4LDQ1OTQ5LDQ1OTUwLDQ1OTUxLDQ1OTU0LDQ1OTU4LDQ1OTU5LDQ1OTYwLDQ1OTYxLDQ1OTYyLDQ1''@;'; put 'put ''OTYzLDQ1OTY1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ1OTY2LDQ1OTY3LDQ1OTY5LDQ1OTcwLDQ1OTcxLDQ1OTczLDQ1OTc0LDQ1OTc1LDQ1OTc2LDQ1OTc3LDQ1OTc4LDQ1OTc5LDQ1OTgwLDQ1OTgxLDQ1OTgyLDQ1OTgzLDQ1OTg2LDQ1OTg3LDQ1OTg4LDQ1OTg5LDQ1OTkw''@;'; put 'put ''LDQ1OTkxLDQ1OTkzLDQ1OTk0LDQ1OTk1LDQ1OTk3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ1OTk4LDQ1OTk5LDQ2ZTMsNDYwMDEsNDYwMDIsNDYwMDMsNDYwMDQsNDYwMDUsNDYwMDYsNDYwMDcsNDYwMDgsNDYwMDksNDYwMTAsNDYwMTEsNDYwMTIsNDYwMTMsNDYwMTQsNDYw''@;'; put 'put ''MTUsNDYwMTYsNDYwMTcsNDYwMTgsNDYwMTksNDYwMjIsNDYwMjMsNDYwMjUsNDYwMjYsNDYwMjksNDYwMzEsNDYwMzMsNDYwMzQsNDYwMzUsNDYwMzgsNDYwNDAsNDYwNDIsNDYwNDQsNDYwNDYsNDYwNDcsNDYwNDksNDYwNTAsNDYwNTEsNDYwNTMsNDYwNTQsNDYwNTUsNDYwNTcsNDYwNTgs''@;'; put 'put ''NDYwNTksNDYwNjAsNDYwNjEsNDYwNjIsNDYwNjMsNDYwNjQsNDYwNjUsNDYwNjYsNDYwNjcsNDYwNjgsNDYwNjksNDYwNzAsNDYwNzEsNDYwNzIsNDYwNzMsNDYwNzQsNDYwNzUsNDYwNzcsNDYwNzgsNDYwNzksNDYwODAsNDYwODEsNDYwODIsNDYwODMsNDYwODQsNDYwODUsNDYwODYsNDYw''@;'; put 'put ''ODcsNDYwODgsNDYwODksNDYwOTAsNDYwOTEsNDYwOTIsNDYwOTMsNDYwOTQsNDYwOTUsNDYwOTcsNDYwOTgsNDYwOTksNDYxMDAsNDYxMDEsNDYxMDIsNDYxMDMsNDYxMDUsNDYxMDYsNDYxMDcsNDYxMDksNDYxMTAsNDYxMTEsNDYxMTMsNDYxMTQsNDYxMTUsNDYxMTYsNDYxMTcsNDYxMTgs''@;'; put 'put ''NDYxMTksNDYxMjIsNDYxMjQsNDYxMjUsNDYxMjYsNDYxMjcsNDYxMjgsNDYxMjksNDYxMzAsNDYxMzEsNDYxMzMsNDYxMzQsNDYxMzUsNDYxMzYsNDYxMzcsNDYxMzgsNDYxMzksNDYxNDAsNDYxNDEsNDYxNDIsNDYxNDMsNDYxNDQsNDYxNDUsNDYxNDYsNDYxNDcsNDYxNDgsNDYxNDksNDYx''@;'; put 'put ''NTAsNDYxNTEsNDYxNTIsNDYxNTMsNDYxNTQsNDYxNTUsNDYxNTYsNDYxNTcsNDYxNTgsNDYxNTksNDYxNjIsNDYxNjMsNDYxNjUsNDYxNjYsNDYxNjcsNDYxNjksNDYxNzAsNDYxNzEsNDYxNzIsNDYxNzMsNDYxNzQsNDYxNzUsNDYxNzgsNDYxODAsNDYxODIsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsNDYxODMsNDYxODQsNDYxODUsNDYxODYsNDYxODcsNDYxODksNDYxOTAsNDYxOTEsNDYxOTIsNDYxOTMsNDYxOTQsNDYxOTUsNDYxOTYsNDYxOTcsNDYxOTgsNDYxOTksNDYyMDAsNDYyMDEsNDYyMDIsNDYyMDMsNDYyMDQsNDYyMDUsNDYyMDYsNDYyMDcsNDYyMDksNDYy''@;'; put 'put ''MTAsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDYyMTEsNDYyMTIsNDYyMTMsNDYyMTQsNDYyMTUsNDYyMTcsNDYyMTgsNDYyMTksNDYyMjAsNDYyMjEsNDYyMjIsNDYyMjMsNDYyMjQsNDYyMjUsNDYyMjYsNDYyMjcsNDYyMjgsNDYyMjksNDYyMzAsNDYyMzEsNDYyMzIsNDYyMzMs''@;'; put 'put ''NDYyMzQsNDYyMzUsNDYyMzYsNDYyMzgsNDYyMzksNDYyNDAsNDYyNDEsNDYyNDIsNDYyNDMsNDYyNDUsNDYyNDYsNDYyNDcsNDYyNDksNDYyNTAsNDYyNTEsNDYyNTMsNDYyNTQsNDYyNTUsNDYyNTYsNDYyNTcsNDYyNTgsNDYyNTksNDYyNjAsNDYyNjIsNDYyNjQsNDYyNjYsNDYyNjcsNDYy''@;'; put 'put ''NjgsNDYyNjksNDYyNzAsNDYyNzEsNDYyNzMsNDYyNzQsNDYyNzUsNDYyNzcsNDYyNzgsNDYyNzksNDYyODEsNDYyODIsNDYyODMsNDYyODQsNDYyODUsNDYyODYsNDYyODcsNDYyODksNDYyOTAsNDYyOTEsNDYyOTIsNDYyOTQsNDYyOTUsNDYyOTYsNDYyOTcsNDYyOTgsNDYyOTksNDYzMDIs''@;'; put 'put ''NDYzMDMsNDYzMDUsNDYzMDYsNDYzMDksNDYzMTEsNDYzMTIsNDYzMTMsNDYzMTQsNDYzMTUsNDYzMTgsNDYzMjAsNDYzMjIsNDYzMjMsNDYzMjQsNDYzMjUsNDYzMjYsNDYzMjcsNDYzMjksNDYzMzAsNDYzMzEsNDYzMzIsNDYzMzMsNDYzMzQsNDYzMzUsNDYzMzYsNDYzMzcsNDYzMzgsNDYz''@;'; put 'put ''MzksNDYzNDAsNDYzNDEsNDYzNDIsNDYzNDMsNDYzNDQsNDYzNDUsNDYzNDYsNDYzNDcsNDYzNDgsNDYzNDksNDYzNTAsNDYzNTEsNDYzNTIsNDYzNTMsNDYzNTQsNDYzNTUsNDYzNTgsNDYzNTksNDYzNjEsNDYzNjIsNDYzNjUsNDYzNjYsNDYzNjcsNDYzNjgsNDYzNjksNDYzNzAsNDYzNzEs''@;'; put 'put ''NDYzNzQsNDYzNzksNDYzODAsNDYzODEsNDYzODIsNDYzODMsNDYzODYsNDYzODcsNDYzODksNDYzOTAsNDYzOTEsNDYzOTMsNDYzOTQsNDYzOTUsNDYzOTYsNDYzOTcsNDYzOTgsNDYzOTksNDY0MDIsNDY0MDYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDY0MDcsNDY0MDgsNDY0''@;'; put 'put ''MDksNDY0MTAsNDY0MTQsNDY0MTUsNDY0MTcsNDY0MTgsNDY0MTksNDY0MjEsNDY0MjIsNDY0MjMsNDY0MjQsNDY0MjUsNDY0MjYsNDY0MjcsNDY0MzAsNDY0MzQsNDY0MzUsNDY0MzYsNDY0MzcsNDY0MzgsNDY0MzksNDY0NDAsNDY0NDEsNDY0NDIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsNDY0NDMsNDY0NDQsNDY0NDUsNDY0NDYsNDY0NDcsNDY0NDgsNDY0NDksNDY0NTAsNDY0NTEsNDY0NTIsNDY0NTMsNDY0NTQsNDY0NTUsNDY0NTYsNDY0NTcsNDY0NTgsNDY0NTksNDY0NjAsNDY0NjEsNDY0NjIsNDY0NjMsNDY0NjQsNDY0NjUsNDY0NjYsNDY0NjcsNDY0NjgsNDY0''@;'; put 'put ''NjksNDY0NzAsNDY0NzEsNDY0NzIsNDY0NzMsNDY0NzQsNDY0NzUsNDY0NzYsNDY0NzcsNDY0NzgsNDY0NzksNDY0ODAsNDY0ODEsNDY0ODIsNDY0ODMsNDY0ODQsNDY0ODUsNDY0ODYsNDY0ODcsNDY0ODgsNDY0ODksNDY0OTAsNDY0OTEsNDY0OTIsNDY0OTMsNDY0OTQsNDY0OTUsNDY0OTgs''@;'; put 'put ''NDY0OTksNDY1MDEsNDY1MDIsNDY1MDMsNDY1MDUsNDY1MDgsNDY1MDksNDY1MTAsNDY1MTEsNDY1MTQsNDY1MTgsNDY1MTksNDY1MjAsNDY1MjEsNDY1MjIsNDY1MjYsNDY1MjcsNDY1MjksNDY1MzAsNDY1MzEsNDY1MzMsNDY1MzQsNDY1MzUsNDY1MzYsNDY1MzcsNDY1MzgsNDY1MzksNDY1''@;'; put 'put ''NDIsNDY1NDYsNDY1NDcsNDY1NDgsNDY1NDksNDY1NTAsNDY1NTEsNDY1NTMsNDY1NTQsNDY1NTUsNDY1NTYsNDY1NTcsNDY1NTgsNDY1NTksNDY1NjAsNDY1NjEsNDY1NjIsNDY1NjMsNDY1NjQsNDY1NjUsNDY1NjYsNDY1NjcsNDY1NjgsNDY1NjksNDY1NzAsNDY1NzEsNDY1NzMsNDY1NzQs''@;'; put 'put ''NDY1NzUsNDY1NzYsNDY1NzcsNDY1NzgsNDY1NzksNDY1ODAsNDY1ODEsNDY1ODIsNDY1ODMsNDY1ODQsNDY1ODUsNDY1ODYsNDY1ODcsNDY1ODgsNDY1ODksNDY1OTAsNDY1OTEsNDY1OTIsNDY1OTMsNDY1OTQsNDY1OTUsNDY1OTYsNDY1OTcsNDY1OTgsNDY1OTksNDY2MDAsNDY2MDEsNDY2''@;'; put 'put ''MDIsNDY2MDMsNDY2MDQsNDY2MDUsNDY2MDYsNDY2MDcsNDY2MTAsNDY2MTEsNDY2MTMsNDY2MTQsNDY2MTUsNDY2MTcsNDY2MTgsNDY2MTksNDY2MjAsNDY2MjEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDY2MjIsNDY2MjMsNDY2MjQsNDY2MjUsNDY2MjYsNDY2MjcsNDY2Mjgs''@;'; put 'put ''NDY2MzAsNDY2MzEsNDY2MzIsNDY2MzMsNDY2MzQsNDY2MzUsNDY2MzcsNDY2MzgsNDY2MzksNDY2NDAsNDY2NDEsNDY2NDIsNDY2NDMsNDY2NDUsNDY2NDYsNDY2NDcsNDY2NDgsNDY2NDksNDY2NTAsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDY2NTEsNDY2NTIsNDY2NTMsNDY2''@;'; put 'put ''NTQsNDY2NTUsNDY2NTYsNDY2NTcsNDY2NTgsNDY2NTksNDY2NjAsNDY2NjEsNDY2NjIsNDY2NjMsNDY2NjUsNDY2NjYsNDY2NjcsNDY2NjgsNDY2NjksNDY2NzAsNDY2NzEsNDY2NzIsNDY2NzMsNDY2NzQsNDY2NzUsNDY2NzYsNDY2NzcsNDY2NzgsNDY2NzksNDY2ODAsNDY2ODEsNDY2ODIs''@;'; put 'put ''NDY2ODMsNDY2ODQsNDY2ODUsNDY2ODYsNDY2ODcsNDY2ODgsNDY2ODksNDY2OTAsNDY2OTEsNDY2OTMsNDY2OTQsNDY2OTUsNDY2OTcsNDY2OTgsNDY2OTksNDY3MDAsNDY3MDEsNDY3MDIsNDY3MDMsNDY3MDQsNDY3MDUsNDY3MDYsNDY3MDcsNDY3MDgsNDY3MDksNDY3MTAsNDY3MTEsNDY3''@;'; put 'put ''MTIsNDY3MTMsNDY3MTQsNDY3MTUsNDY3MTYsNDY3MTcsNDY3MTgsNDY3MTksNDY3MjAsNDY3MjEsNDY3MjIsNDY3MjMsNDY3MjQsNDY3MjUsNDY3MjYsNDY3MjcsNDY3MjgsNDY3MjksNDY3MzAsNDY3MzEsNDY3MzIsNDY3MzMsNDY3MzQsNDY3MzUsNDY3MzYsNDY3MzcsNDY3MzgsNDY3Mzks''@;'; put 'put ''NDY3NDAsNDY3NDEsNDY3NDIsNDY3NDMsNDY3NDQsNDY3NDUsNDY3NDYsNDY3NDcsNDY3NTAsNDY3NTEsNDY3NTMsNDY3NTQsNDY3NTUsNDY3NTcsNDY3NTgsNDY3NTksNDY3NjAsNDY3NjEsNDY3NjIsNDY3NjUsNDY3NjYsNDY3NjcsNDY3NjgsNDY3NzAsNDY3NzEsNDY3NzIsNDY3NzMsNDY3''@;'; put 'put ''NzQsNDY3NzUsNDY3NzYsNDY3NzcsNDY3NzgsNDY3NzksNDY3ODAsNDY3ODEsNDY3ODIsNDY3ODMsNDY3ODQsNDY3ODUsNDY3ODYsNDY3ODcsNDY3ODgsNDY3ODksNDY3OTAsNDY3OTEsNDY3OTIsNDY3OTMsNDY3OTQsNDY3OTUsNDY3OTYsNDY3OTcsNDY3OTgsNDY3OTksNDY4MDAsNDY4MDEs''@;'; put 'put ''NDY4MDIsNDY4MDMsNDY4MDUsNDY4MDYsNDY4MDcsNDY4MDgsNDY4MDksNDY4MTAsNDY4MTEsNDY4MTIsNDY4MTMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDY4MTQsNDY4MTUsNDY4MTYsNDY4MTcsNDY4MTgsNDY4MTksNDY4MjAsNDY4MjEsNDY4MjIsNDY4MjMsNDY4MjQsNDY4''@;'; put 'put ''MjUsNDY4MjYsNDY4MjcsNDY4MjgsNDY4MjksNDY4MzAsNDY4MzEsNDY4MzMsNDY4MzQsNDY4MzUsNDY4MzcsNDY4MzgsNDY4MzksNDY4NDEsNDY4NDIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDY4NDMsNDY4NDQsNDY4NDUsNDY4NDYsNDY4NDcsNDY4NTAsNDY4NTEsNDY4NTIs''@;'; put 'put ''NDY4NTQsNDY4NTUsNDY4NTYsNDY4NTcsNDY4NTgsNDY4NTksNDY4NjAsNDY4NjEsNDY4NjIsNDY4NjMsNDY4NjQsNDY4NjUsNDY4NjYsNDY4NjcsNDY4NjgsNDY4NjksNDY4NzAsNDY4NzEsNDY4NzIsNDY4NzMsNDY4NzQsNDY4NzUsNDY4NzYsNDY4NzcsNDY4NzgsNDY4NzksNDY4ODAsNDY4''@;'; put 'put ''ODEsNDY4ODIsNDY4ODMsNDY4ODQsNDY4ODUsNDY4ODYsNDY4ODcsNDY4OTAsNDY4OTEsNDY4OTMsNDY4OTQsNDY4OTcsNDY4OTgsNDY4OTksNDY5MDAsNDY5MDEsNDY5MDIsNDY5MDMsNDY5MDYsNDY5MDgsNDY5MDksNDY5MTAsNDY5MTEsNDY5MTIsNDY5MTMsNDY5MTQsNDY5MTUsNDY5MTcs''@;'; put 'put ''NDY5MTgsNDY5MTksNDY5MjEsNDY5MjIsNDY5MjMsNDY5MjUsNDY5MjYsNDY5MjcsNDY5MjgsNDY5MjksNDY5MzAsNDY5MzEsNDY5MzQsNDY5MzUsNDY5MzYsNDY5MzcsNDY5MzgsNDY5MzksNDY5NDAsNDY5NDEsNDY5NDIsNDY5NDMsNDY5NDUsNDY5NDYsNDY5NDcsNDY5NDksNDY5NTAsNDY5''@;'; put 'put ''NTEsNDY5NTMsNDY5NTQsNDY5NTUsNDY5NTYsNDY5NTcsNDY5NTgsNDY5NTksNDY5NjIsNDY5NjQsNDY5NjYsNDY5NjcsNDY5NjgsNDY5NjksNDY5NzAsNDY5NzEsNDY5NzQsNDY5NzUsNDY5NzcsNDY5NzgsNDY5NzksNDY5ODEsNDY5ODIsNDY5ODMsNDY5ODQsNDY5ODUsNDY5ODYsNDY5ODcs''@;'; put 'put ''NDY5OTAsNDY5OTUsNDY5OTYsNDY5OTcsNDcwMDIsNDcwMDMsNDcwMDUsNDcwMDYsNDcwMDcsNDcwMDksNDcwMTAsNDcwMTEsNDcwMTIsNDcwMTMsNDcwMTQsNDcwMTUsNDcwMTgsNDcwMjIsNDcwMjMsNDcwMjQsNDcwMjUsNDcwMjYsNDcwMjcsNDcwMzAsNDcwMzEsNDcwMzMsNDcwMzQsNDcw''@;'; put 'put ''MzUsNDcwMzYsNDcwMzcsNDcwMzgsNDcwMzksNDcwNDAsNDcwNDEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDcwNDIsNDcwNDMsNDcwNDQsNDcwNDUsNDcwNDYsNDcwNDgsNDcwNTAsNDcwNTEsNDcwNTIsNDcwNTMsNDcwNTQsNDcwNTUsNDcwNTYsNDcwNTcsNDcwNTgsNDcwNTks''@;'; put 'put ''NDcwNjAsNDcwNjEsNDcwNjIsNDcwNjMsNDcwNjQsNDcwNjUsNDcwNjYsNDcwNjcsNDcwNjgsNDcwNjksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDcwNzAsNDcwNzEsNDcwNzIsNDcwNzMsNDcwNzQsNDcwNzUsNDcwNzYsNDcwNzcsNDcwNzgsNDcwNzksNDcwODAsNDcwODEsNDcw''@;'; put 'put ''ODIsNDcwODMsNDcwODYsNDcwODcsNDcwODksNDcwOTAsNDcwOTEsNDcwOTMsNDcwOTQsNDcwOTUsNDcwOTYsNDcwOTcsNDcwOTgsNDcwOTksNDcxMDIsNDcxMDYsNDcxMDcsNDcxMDgsNDcxMDksNDcxMTAsNDcxMTQsNDcxMTUsNDcxMTcsNDcxMTgsNDcxMTksNDcxMjEsNDcxMjIsNDcxMjMs''@;'; put 'put ''NDcxMjQsNDcxMjUsNDcxMjYsNDcxMjcsNDcxMzAsNDcxMzIsNDcxMzQsNDcxMzUsNDcxMzYsNDcxMzcsNDcxMzgsNDcxMzksNDcxNDIsNDcxNDMsNDcxNDUsNDcxNDYsNDcxNDcsNDcxNDksNDcxNTAsNDcxNTEsNDcxNTIsNDcxNTMsNDcxNTQsNDcxNTUsNDcxNTgsNDcxNjIsNDcxNjMsNDcx''@;'; put 'put ''NjQsNDcxNjUsNDcxNjYsNDcxNjcsNDcxNjksNDcxNzAsNDcxNzEsNDcxNzMsNDcxNzQsNDcxNzUsNDcxNzYsNDcxNzcsNDcxNzgsNDcxNzksNDcxODAsNDcxODEsNDcxODIsNDcxODMsNDcxODQsNDcxODYsNDcxODgsNDcxODksNDcxOTAsNDcxOTEsNDcxOTIsNDcxOTMsNDcxOTQsNDcxOTUs''@;'; put 'put ''NDcxOTgsNDcxOTksNDcyMDEsNDcyMDIsNDcyMDMsNDcyMDUsNDcyMDYsNDcyMDcsNDcyMDgsNDcyMDksNDcyMTAsNDcyMTEsNDcyMTQsNDcyMTYsNDcyMTgsNDcyMTksNDcyMjAsNDcyMjEsNDcyMjIsNDcyMjMsNDcyMjUsNDcyMjYsNDcyMjcsNDcyMjksNDcyMzAsNDcyMzEsNDcyMzIsNDcy''@;'; put 'put ''MzMsNDcyMzQsNDcyMzUsNDcyMzYsNDcyMzcsNDcyMzgsNDcyMzksNDcyNDAsNDcyNDEsNDcyNDIsNDcyNDMsNDcyNDQsNDcyNDYsNDcyNDcsNDcyNDgsNDcyNDksNDcyNTAsNDcyNTEsNDcyNTIsNDcyNTMsNDcyNTQsNDcyNTUsNDcyNTYsNDcyNTcsNDcyNTgsNDcyNTksNDcyNjAsNDcyNjEs''@;'; put 'put ''NDcyNjIsNDcyNjMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDcyNjQsNDcyNjUsNDcyNjYsNDcyNjcsNDcyNjgsNDcyNjksNDcyNzAsNDcyNzEsNDcyNzMsNDcyNzQsNDcyNzUsNDcyNzYsNDcyNzcsNDcyNzgsNDcyNzksNDcyODEsNDcyODIsNDcyODMsNDcyODUsNDcyODYsNDcy''@;'; put 'put ''ODcsNDcyODksNDcyOTAsNDcyOTEsNDcyOTIsNDcyOTMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDcyOTQsNDcyOTUsNDcyOTgsNDczMDAsNDczMDIsNDczMDMsNDczMDQsNDczMDUsNDczMDYsNDczMDcsNDczMDksNDczMTAsNDczMTEsNDczMTMsNDczMTQsNDczMTUsNDczMTcs''@;'; put 'put ''NDczMTgsNDczMTksNDczMjAsNDczMjEsNDczMjIsNDczMjMsNDczMjQsNDczMjYsNDczMjgsNDczMzAsNDczMzEsNDczMzIsNDczMzMsNDczMzQsNDczMzUsNDczMzgsNDczMzksNDczNDEsNDczNDIsNDczNDMsNDczNDUsNDczNDYsNDczNDcsNDczNDgsNDczNDksNDczNTAsNDczNTEsNDcz''@;'; put 'put ''NTQsNDczNTYsNDczNTgsNDczNTksNDczNjAsNDczNjEsNDczNjIsNDczNjMsNDczNjUsNDczNjYsNDczNjcsNDczNjgsNDczNjksNDczNzAsNDczNzEsNDczNzIsNDczNzMsNDczNzQsNDczNzUsNDczNzYsNDczNzcsNDczNzgsNDczNzksNDczODAsNDczODEsNDczODIsNDczODMsNDczODUs''@;'; put 'put ''NDczODYsNDczODcsNDczODgsNDczODksNDczOTAsNDczOTEsNDczOTMsNDczOTQsNDczOTUsNDczOTYsNDczOTcsNDczOTgsNDczOTksNDc0MDAsNDc0MDEsNDc0MDIsNDc0MDMsNDc0MDQsNDc0MDUsNDc0MDYsNDc0MDcsNDc0MDgsNDc0MDksNDc0MTAsNDc0MTEsNDc0MTIsNDc0MTMsNDc0''@;'; put 'put ''MTQsNDc0MTUsNDc0MTYsNDc0MTcsNDc0MTgsNDc0MTksNDc0MjIsNDc0MjMsNDc0MjUsNDc0MjYsNDc0MjcsNDc0MjksNDc0MzAsNDc0MzEsNDc0MzIsNDc0MzMsNDc0MzQsNDc0MzUsNDc0MzcsNDc0MzgsNDc0NDAsNDc0NDIsNDc0NDMsNDc0NDQsNDc0NDUsNDc0NDYsNDc0NDcsNDc0NTAs''@;'; put 'put ''NDc0NTEsNDc0NTMsNDc0NTQsNDc0NTUsNDc0NTcsNDc0NTgsNDc0NTksNDc0NjAsNDc0NjEsNDc0NjIsNDc0NjMsNDc0NjYsNDc0NjgsNDc0NzAsNDc0NzEsNDc0NzIsNDc0NzMsNDc0NzQsNDc0NzUsNDc0NzgsNDc0NzksNDc0ODEsNDc0ODIsNDc0ODMsNDc0ODUsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsNDc0ODYsNDc0ODcsNDc0ODgsNDc0ODksNDc0OTAsNDc0OTEsNDc0OTQsNDc0OTYsNDc0OTksNDc1MDAsNDc1MDMsNDc1MDQsNDc1MDUsNDc1MDYsNDc1MDcsNDc1MDgsNDc1MDksNDc1MTAsNDc1MTEsNDc1MTIsNDc1MTMsNDc1MTQsNDc1MTUsNDc1MTYsNDc1MTcs''@;'; put 'put ''NDc1MTgsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDc1MTksNDc1MjAsNDc1MjEsNDc1MjIsNDc1MjMsNDc1MjQsNDc1MjUsNDc1MjYsNDc1MjcsNDc1MjgsNDc1MjksNDc1MzAsNDc1MzEsNDc1MzQsNDc1MzUsNDc1MzcsNDc1MzgsNDc1MzksNDc1NDEsNDc1NDIsNDc1NDMsNDc1''@;'; put 'put ''NDQsNDc1NDUsNDc1NDYsNDc1NDcsNDc1NTAsNDc1NTIsNDc1NTQsNDc1NTUsNDc1NTYsNDc1NTcsNDc1NTgsNDc1NTksNDc1NjIsNDc1NjMsNDc1NjUsNDc1NzEsNDc1NzIsNDc1NzMsNDc1NzQsNDc1NzUsNDc1NzgsNDc1ODAsNDc1ODMsNDc1ODQsNDc1ODYsNDc1OTAsNDc1OTEsNDc1OTMs''@;'; put 'put ''NDc1OTQsNDc1OTUsNDc1OTcsNDc1OTgsNDc1OTksNDc2MDAsNDc2MDEsNDc2MDIsNDc2MDMsNDc2MDYsNDc2MTEsNDc2MTIsNDc2MTMsNDc2MTQsNDc2MTUsNDc2MTgsNDc2MTksNDc2MjAsNDc2MjEsNDc2MjIsNDc2MjMsNDc2MjUsNDc2MjYsNDc2MjcsNDc2MjgsNDc2MjksNDc2MzAsNDc2''@;'; put 'put ''MzEsNDc2MzIsNDc2MzMsNDc2MzQsNDc2MzUsNDc2MzYsNDc2MzgsNDc2MzksNDc2NDAsNDc2NDEsNDc2NDIsNDc2NDMsNDc2NDQsNDc2NDUsNDc2NDYsNDc2NDcsNDc2NDgsNDc2NDksNDc2NTAsNDc2NTEsNDc2NTIsNDc2NTMsNDc2NTQsNDc2NTUsNDc2NTYsNDc2NTcsNDc2NTgsNDc2NTks''@;'; put 'put ''NDc2NjAsNDc2NjEsNDc2NjIsNDc2NjMsNDc2NjQsNDc2NjUsNDc2NjYsNDc2NjcsNDc2NjgsNDc2NjksNDc2NzAsNDc2NzEsNDc2NzQsNDc2NzUsNDc2NzcsNDc2NzgsNDc2NzksNDc2ODEsNDc2ODMsNDc2ODQsNDc2ODUsNDc2ODYsNDc2ODcsNDc2OTAsNDc2OTIsNDc2OTUsNDc2OTYsNDc2''@;'; put 'put ''OTcsNDc2OTgsNDc3MDIsNDc3MDMsNDc3MDUsNDc3MDYsNDc3MDcsNDc3MDksNDc3MTAsNDc3MTEsNDc3MTIsNDc3MTMsNDc3MTQsNDc3MTUsNDc3MTgsNDc3MjIsNDc3MjMsNDc3MjQsNDc3MjUsNDc3MjYsNDc3MjcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDc3MzAsNDc3MzEs''@;'; put 'put ''NDc3MzMsNDc3MzQsNDc3MzUsNDc3MzcsNDc3MzgsNDc3MzksNDc3NDAsNDc3NDEsNDc3NDIsNDc3NDMsNDc3NDQsNDc3NDUsNDc3NDYsNDc3NTAsNDc3NTIsNDc3NTMsNDc3NTQsNDc3NTUsNDc3NTcsNDc3NTgsNDc3NTksNDc3NjAsNDc3NjEsNDc3NjIsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsNDc3NjMsNDc3NjQsNDc3NjUsNDc3NjYsNDc3NjcsNDc3NjgsNDc3NjksNDc3NzAsNDc3NzEsNDc3NzIsNDc3NzMsNDc3NzQsNDc3NzUsNDc3NzYsNDc3NzcsNDc3NzgsNDc3NzksNDc3ODAsNDc3ODEsNDc3ODIsNDc3ODMsNDc3ODYsNDc3ODksNDc3OTAsNDc3OTEsNDc3OTMs''@;'; put 'put ''NDc3OTUsNDc3OTYsNDc3OTcsNDc3OTgsNDc3OTksNDc4MDIsNDc4MDQsNDc4MDYsNDc4MDcsNDc4MDgsNDc4MDksNDc4MTAsNDc4MTEsNDc4MTMsNDc4MTQsNDc4MTUsNDc4MTcsNDc4MTgsNDc4MTksNDc4MjAsNDc4MjEsNDc4MjIsNDc4MjMsNDc4MjQsNDc4MjUsNDc4MjYsNDc4MjcsNDc4''@;'; put 'put ''MjgsNDc4MjksNDc4MzAsNDc4MzEsNDc4MzQsNDc4MzUsNDc4MzYsNDc4MzcsNDc4MzgsNDc4MzksNDc4NDAsNDc4NDEsNDc4NDIsNDc4NDMsNDc4NDQsNDc4NDUsNDc4NDYsNDc4NDcsNDc4NDgsNDc4NDksNDc4NTAsNDc4NTEsNDc4NTIsNDc4NTMsNDc4NTQsNDc4NTUsNDc4NTYsNDc4NTcs''@;'; put 'put ''NDc4NTgsNDc4NTksNDc4NjAsNDc4NjEsNDc4NjIsNDc4NjMsNDc4NjQsNDc4NjUsNDc4NjYsNDc4NjcsNDc4NjksNDc4NzAsNDc4NzEsNDc4NzMsNDc4NzQsNDc4NzUsNDc4NzcsNDc4NzgsNDc4NzksNDc4ODAsNDc4ODEsNDc4ODIsNDc4ODMsNDc4ODQsNDc4ODYsNDc4ODgsNDc4OTAsNDc4''@;'; put 'put ''OTEsNDc4OTIsNDc4OTMsNDc4OTQsNDc4OTUsNDc4OTcsNDc4OTgsNDc4OTksNDc5MDEsNDc5MDIsNDc5MDMsNDc5MDUsNDc5MDYsNDc5MDcsNDc5MDgsNDc5MDksNDc5MTAsNDc5MTEsNDc5MTIsNDc5MTQsNDc5MTYsNDc5MTcsNDc5MTgsNDc5MTksNDc5MjAsNDc5MjEsNDc5MjIsNDc5MjMs''@;'; put 'put ''NDc5MjcsNDc5MjksNDc5MzAsNDc5MzUsNDc5MzYsNDc5MzcsNDc5MzgsNDc5MzksNDc5NDIsNDc5NDQsNDc5NDYsNDc5NDcsNDc5NDgsNDc5NTAsNDc5NTMsNDc5NTQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDc5NTUsNDc5NTcsNDc5NTgsNDc5NTksNDc5NjEsNDc5NjIsNDc5''@;'; put 'put ''NjMsNDc5NjQsNDc5NjUsNDc5NjYsNDc5NjcsNDc5NjgsNDc5NzAsNDc5NzIsNDc5NzMsNDc5NzQsNDc5NzUsNDc5NzYsNDc5NzcsNDc5NzgsNDc5NzksNDc5ODEsNDc5ODIsNDc5ODMsNDc5ODQsNDc5ODUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDc5ODYsNDc5ODcsNDc5ODgs''@;'; put 'put ''NDc5ODksNDc5OTAsNDc5OTEsNDc5OTIsNDc5OTMsNDc5OTQsNDc5OTUsNDc5OTYsNDc5OTcsNDc5OTgsNDc5OTksNDhlMyw0ODAwMSw0ODAwMiw0ODAwMyw0ODAwNCw0ODAwNSw0ODAwNiw0ODAwNyw0ODAwOSw0ODAxMCw0ODAxMSw0ODAxMyw0ODAxNCw0ODAxNSw0ODAxNyw0ODAxOCw0ODAx''@;'; put 'put ''OSw0ODAyMCw0ODAyMSw0ODAyMiw0ODAyMyw0ODAyNCw0ODAyNSw0ODAyNiw0ODAyNyw0ODAyOCw0ODAyOSw0ODAzMCw0ODAzMSw0ODAzMiw0ODAzMyw0ODAzNCw0ODAzNSw0ODAzNyw0ODAzOCw0ODAzOSw0ODA0MSw0ODA0Miw0ODA0Myw0ODA0NSw0ODA0Niw0ODA0Nyw0ODA0OCw0ODA0OSw0''@;'; put 'put ''ODA1MCw0ODA1MSw0ODA1Myw0ODA1NCw0ODA1Niw0ODA1Nyw0ODA1OCw0ODA1OSw0ODA2MCw0ODA2MSw0ODA2Miw0ODA2Myw0ODA2NSw0ODA2Niw0ODA2Nyw0ODA2OSw0ODA3MCw0ODA3MSw0ODA3Myw0ODA3NCw0ODA3NSw0ODA3Niw0ODA3Nyw0ODA3OCw0ODA3OSw0ODA4MSw0ODA4Miw0ODA4''@;'; put 'put ''NCw0ODA4NSw0ODA4Niw0ODA4Nyw0ODA4OCw0ODA4OSw0ODA5MCw0ODA5MSw0ODA5Miw0ODA5Myw0ODA5NCw0ODA5NSw0ODA5Niw0ODA5Nyw0ODA5OCw0ODA5OSw0ODEwMCw0ODEwMSw0ODEwMiw0ODEwMyw0ODEwNCw0ODEwNSw0ODEwNiw0ODEwNyw0ODEwOCw0ODEwOSw0ODExMCw0ODExMSw0''@;'; put 'put ''ODExMiw0ODExMyw0ODExNCw0ODExNSw0ODExNiw0ODExNyw0ODExOCw0ODExOSw0ODEyMiw0ODEyMyw0ODEyNSw0ODEyNiw0ODEyOSw0ODEzMSw0ODEzMiw0ODEzMyw0ODEzNCw0ODEzNSw0ODEzOCw0ODE0Miw0ODE0NCw0ODE0Niw0ODE0Nyw0ODE1Myw0ODE1NCw0ODE2MCw0ODE2MSw0ODE2''@;'; put 'put ''Miw0ODE2Myw0ODE2Niw0ODE2OCw0ODE3MCw0ODE3MSw0ODE3Miw0ODE3NCw0ODE3NSw0ODE3OCw0ODE3OSw0ODE4MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0ODE4Miw0ODE4Myw0ODE4NSw0ODE4Niw0ODE4Nyw0ODE4OCw0ODE4OSw0ODE5MCw0ODE5MSw0ODE5NCw0ODE5OCw0''@;'; put 'put ''ODE5OSw0ODIwMCw0ODIwMiw0ODIwMyw0ODIwNiw0ODIwNyw0ODIwOSw0ODIxMCw0ODIxMSw0ODIxMiw0ODIxMyw0ODIxNCw0ODIxNSw0ODIxNiw0ODIxNyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0ODIxOCw0ODIxOSw0ODIyMCw0ODIyMiw0ODIyMyw0ODIyNCw0ODIyNSw0ODIy''@;'; put 'put ''Niw0ODIyNyw0ODIyOCw0ODIyOSw0ODIzMCw0ODIzMSw0ODIzMiw0ODIzMyw0ODIzNCw0ODIzNSw0ODIzNiw0ODIzNyw0ODIzOCw0ODIzOSw0ODI0MCw0ODI0MSw0ODI0Miw0ODI0Myw0ODI0NCw0ODI0NSw0ODI0Niw0ODI0Nyw0ODI0OCw0ODI0OSw0ODI1MCw0ODI1MSw0ODI1Miw0ODI1Myw0''@;'; put 'put ''ODI1NCw0ODI1NSw0ODI1Niw0ODI1Nyw0ODI1OCw0ODI1OSw0ODI2Miw0ODI2Myw0ODI2NSw0ODI2Niw0ODI2OSw0ODI3MSw0ODI3Miw0ODI3Myw0ODI3NCw0ODI3NSw0ODI3OCw0ODI4MCw0ODI4Myw0ODI4NCw0ODI4NSw0ODI4Niw0ODI4Nyw0ODI5MCw0ODI5MSw0ODI5Myw0ODI5NCw0ODI5''@;'; put 'put ''Nyw0ODI5OCw0ODI5OSw0ODMwMCw0ODMwMSw0ODMwMiw0ODMwMyw0ODMwNiw0ODMxMCw0ODMxMSw0ODMxMiw0ODMxMyw0ODMxNCw0ODMxNSw0ODMxOCw0ODMxOSw0ODMyMSw0ODMyMiw0ODMyMyw0ODMyNSw0ODMyNiw0ODMyNyw0ODMyOCw0ODMyOSw0ODMzMCw0ODMzMSw0ODMzMiw0ODMzNCw0''@;'; put 'put ''ODMzOCw0ODMzOSw0ODM0MCw0ODM0Miw0ODM0Myw0ODM0NSw0ODM0Niw0ODM0Nyw0ODM0OSw0ODM1MCw0ODM1MSw0ODM1Miw0ODM1Myw0ODM1NCw0ODM1NSw0ODM1Niw0ODM1Nyw0ODM1OCw0ODM1OSw0ODM2MCw0ODM2MSw0ODM2Miw0ODM2Myw0ODM2NCw0ODM2NSw0ODM2Niw0ODM2Nyw0ODM2''@;'; put 'put ''OCw0ODM2OSw0ODM3MCw0ODM3MSw0ODM3NSw0ODM3Nyw0ODM3OCw0ODM3OSw0ODM4MSw0ODM4Miw0ODM4Myw0ODM4NCw0ODM4NSw0ODM4Niw0ODM4Nyw0ODM5MCw0ODM5Miw0ODM5NCw0ODM5NSw0ODM5Niw0ODM5Nyw0ODM5OCw0ODM5OSw0ODQwMSw0ODQwMiw0ODQwMyw0ODQwNSw0ODQwNiw0''@;'; put 'put ''ODQwNyw0ODQwOCw0ODQwOSw0ODQxMCw0ODQxMSw0ODQxMiw0ODQxMyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0ODQxNCw0ODQxNSw0ODQxNiw0ODQxNyw0ODQxOCw0ODQxOSw0ODQyMSw0ODQyMiw0ODQyMyw0ODQyNCw0ODQyNSw0ODQyNiw0ODQyNyw0ODQyOSw0ODQzMCw0ODQz''@;'; put 'put ''MSw0ODQzMiw0ODQzMyw0ODQzNCw0ODQzNSw0ODQzNiw0ODQzNyw0ODQzOCw0ODQzOSw0ODQ0MCw0ODQ0MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0ODQ0Miw0ODQ0Myw0ODQ0NCw0ODQ0NSw0ODQ0Niw0ODQ0Nyw0ODQ0OSw0ODQ1MCw0ODQ1MSw0ODQ1Miw0ODQ1Myw0ODQ1NCw0''@;'; put 'put ''ODQ1NSw0ODQ1OCw0ODQ1OSw0ODQ2MSw0ODQ2Miw0ODQ2Myw0ODQ2NSw0ODQ2Niw0ODQ2Nyw0ODQ2OCw0ODQ2OSw0ODQ3MCw0ODQ3MSw0ODQ3NCw0ODQ3NSw0ODQ3Niw0ODQ3Nyw0ODQ3OCw0ODQ3OSw0ODQ4MCw0ODQ4MSw0ODQ4Miw0ODQ4Myw0ODQ4NSw0ODQ4Niw0ODQ4Nyw0ODQ4OSw0ODQ5''@;'; put 'put ''MCw0ODQ5MSw0ODQ5Miw0ODQ5Myw0ODQ5NCw0ODQ5NSw0ODQ5Niw0ODQ5Nyw0ODQ5OCw0ODQ5OSw0ODUwMCw0ODUwMSw0ODUwMiw0ODUwMyw0ODUwNCw0ODUwNSw0ODUwNiw0ODUwNyw0ODUwOCw0ODUwOSw0ODUxMCw0ODUxMSw0ODUxNCw0ODUxNSw0ODUxNyw0ODUxOCw0ODUyMyw0ODUyNCw0''@;'; put 'put ''ODUyNSw0ODUyNiw0ODUyNyw0ODUzMCw0ODUzMiw0ODUzNCw0ODUzNSw0ODUzNiw0ODUzOSw0ODU0MSw0ODU0Miw0ODU0Myw0ODU0NCw0ODU0NSw0ODU0Niw0ODU0Nyw0ODU0OSw0ODU1MCw0ODU1MSw0ODU1Miw0ODU1Myw0ODU1NCw0ODU1NSw0ODU1Niw0ODU1Nyw0ODU1OCw0ODU1OSw0ODU2''@;'; put 'put ''MSw0ODU2Miw0ODU2Myw0ODU2NCw0ODU2NSw0ODU2Niw0ODU2Nyw0ODU2OSw0ODU3MCw0ODU3MSw0ODU3Miw0ODU3Myw0ODU3NCw0ODU3NSw0ODU3Niw0ODU3Nyw0ODU3OCw0ODU3OSw0ODU4MCw0ODU4MSw0ODU4Miw0ODU4Myw0ODU4NCw0ODU4NSw0ODU4Niw0ODU4Nyw0ODU4OCw0ODU4OSw0''@;'; put 'put ''ODU5MCw0ODU5MSw0ODU5Miw0ODU5Myw0ODU5NCw0ODU5NSw0ODU5OCw0ODU5OSw0ODYwMSw0ODYwMiw0ODYwMyw0ODYwNSw0ODYwNiw0ODYwNyw0ODYwOCw0ODYwOSw0ODYxMCw0ODYxMSw0ODYxMiw0ODYxMyw0ODYxNCw0ODYxNSw0ODYxNiw0ODYxOCw0ODYxOSw0ODYyMCw0ODYyMSw0ODYy''@;'; put 'put ''Miw0ODYyMyw0ODYyNSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0ODYyNiw0ODYyNyw0ODYyOSw0ODYzMCw0ODYzMSw0ODYzMyw0ODYzNCw0ODYzNSw0ODYzNiw0ODYzNyw0ODYzOCw0ODYzOSw0ODY0MSw0ODY0Miw0ODY0NCw0ODY0Niw0ODY0Nyw0ODY0OCw0ODY0OSw0ODY1MCw0''@;'; put 'put ''ODY1MSw0ODY1NCw0ODY1NSw0ODY1Nyw0ODY1OCw0ODY1OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0ODY2MSw0ODY2Miw0ODY2Myw0ODY2NCw0ODY2NSw0ODY2Niw0ODY2Nyw0ODY3MCw0ODY3Miw0ODY3Myw0ODY3NCw0ODY3NSw0ODY3Niw0ODY3Nyw0ODY3OCw0ODY3OSw0ODY4''@;'; put 'put ''MCw0ODY4MSw0ODY4Miw0ODY4Myw0ODY4NCw0ODY4NSw0ODY4Niw0ODY4Nyw0ODY4OCw0ODY4OSw0ODY5MCw0ODY5MSw0ODY5Miw0ODY5Myw0ODY5NCw0ODY5NSw0ODY5Niw0ODY5Nyw0ODY5OCw0ODY5OSw0ODcwMCw0ODcwMSw0ODcwMiw0ODcwMyw0ODcwNCw0ODcwNSw0ODcwNiw0ODcwNyw0''@;'; put 'put ''ODcxMCw0ODcxMSw0ODcxMyw0ODcxNCw0ODcxNSw0ODcxNyw0ODcxOSw0ODcyMCw0ODcyMSw0ODcyMiw0ODcyMyw0ODcyNiw0ODcyOCw0ODczMiw0ODczMyw0ODczNCw0ODczNSw0ODczOCw0ODczOSw0ODc0MSw0ODc0Miw0ODc0Myw0ODc0NSw0ODc0Nyw0ODc0OCw0ODc0OSw0ODc1MCw0ODc1''@;'; put 'put ''MSw0ODc1NCw0ODc1OCw0ODc1OSw0ODc2MCw0ODc2MSw0ODc2Miw0ODc2Niw0ODc2Nyw0ODc2OSw0ODc3MCw0ODc3MSw0ODc3Myw0ODc3NCw0ODc3NSw0ODc3Niw0ODc3Nyw0ODc3OCw0ODc3OSw0ODc4Miw0ODc4Niw0ODc4Nyw0ODc4OCw0ODc4OSw0ODc5MCw0ODc5MSw0ODc5NCw0ODc5NSw0''@;'; put 'put ''ODc5Niw0ODc5Nyw0ODc5OCw0ODc5OSw0ODgwMCw0ODgwMSw0ODgwMiw0ODgwMyw0ODgwNCw0ODgwNSw0ODgwNiw0ODgwNyw0ODgwOSw0ODgxMCw0ODgxMSw0ODgxMiw0ODgxMyw0ODgxNCw0ODgxNSw0ODgxNiw0ODgxNyw0ODgxOCw0ODgxOSw0ODgyMCw0ODgyMSw0ODgyMiw0ODgyMyw0ODgy''@;'; put 'put ''NCw0ODgyNSw0ODgyNiw0ODgyNyw0ODgyOCw0ODgyOSw0ODgzMCw0ODgzMSw0ODgzMiw0ODgzMyw0ODgzNCw0ODgzNSw0ODgzNiw0ODgzNyw0ODgzOCw0ODgzOSw0ODg0MCw0ODg0MSw0ODg0Miw0ODg0Myw0ODg0NCw0ODg0NSw0ODg0Niw0ODg0Nyw0ODg1MCw0ODg1MSxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCw0ODg1Myw0ODg1NCw0ODg1Nyw0ODg1OCw0ODg1OSw0ODg2MCw0ODg2MSw0ODg2Miw0ODg2Myw0ODg2NSw0ODg2Niw0ODg3MCw0ODg3MSw0ODg3Miw0ODg3Myw0ODg3NCw0ODg3NSw0ODg3Nyw0ODg3OCw0ODg3OSw0ODg4MCw0ODg4MSw0ODg4Miw0ODg4Myw0ODg4''@;'; put 'put ''NCw0ODg4NSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0ODg4Niw0ODg4Nyw0ODg4OCw0ODg4OSw0ODg5MCw0ODg5MSw0ODg5Miw0ODg5Myw0ODg5NCw0ODg5NSw0ODg5Niw0ODg5OCw0ODg5OSw0ODkwMCw0ODkwMSw0ODkwMiw0ODkwMyw0ODkwNiw0ODkwNyw0ODkwOCw0ODkwOSw0''@;'; put 'put ''ODkxMCw0ODkxMSw0ODkxMiw0ODkxMyw0ODkxNCw0ODkxNSw0ODkxNiw0ODkxNyw0ODkxOCw0ODkxOSw0ODkyMiw0ODkyNiw0ODkyNyw0ODkyOCw0ODkyOSw0ODkzMCw0ODkzMSw0ODkzMiw0ODkzMyw0ODkzNCw0ODkzNSw0ODkzNiw0ODkzNyw0ODkzOCw0ODkzOSw0ODk0MCw0ODk0MSw0ODk0''@;'; put 'put ''Miw0ODk0Myw0ODk0NCw0ODk0NSw0ODk0Niw0ODk0Nyw0ODk0OCw0ODk0OSw0ODk1MCw0ODk1MSw0ODk1Miw0ODk1Myw0ODk1NCw0ODk1NSw0ODk1Niw0ODk1Nyw0ODk1OCw0ODk1OSw0ODk2Miw0ODk2Myw0ODk2NSw0ODk2Niw0ODk2Nyw0ODk2OSw0ODk3MCw0ODk3MSw0ODk3Miw0ODk3Myw0''@;'; put 'put ''ODk3NCw0ODk3NSw0ODk3OCw0ODk3OSw0ODk4MCw0ODk4Miw0ODk4Myw0ODk4NCw0ODk4NSw0ODk4Niw0ODk4Nyw0ODk4OCw0ODk4OSw0ODk5MCw0ODk5MSw0ODk5Miw0ODk5Myw0ODk5NCw0ODk5NSw0ODk5Niw0ODk5Nyw0ODk5OCw0ODk5OSw0OWUzLDQ5MDAxLDQ5MDAyLDQ5MDAzLDQ5MDA0''@;'; put 'put ''LDQ5MDA1LDQ5MDA2LDQ5MDA3LDQ5MDA4LDQ5MDA5LDQ5MDEwLDQ5MDExLDQ5MDEyLDQ5MDEzLDQ5MDE0LDQ5MDE1LDQ5MDE2LDQ5MDE3LDQ5MDE4LDQ5MDE5LDQ5MDIwLDQ5MDIxLDQ5MDIyLDQ5MDIzLDQ5MDI0LDQ5MDI1LDQ5MDI2LDQ5MDI3LDQ5MDI4LDQ5MDI5LDQ5MDMwLDQ5MDMxLDQ5''@;'; put 'put ''MDMyLDQ5MDMzLDQ5MDM0LDQ5MDM1LDQ5MDM2LDQ5MDM3LDQ5MDM4LDQ5MDM5LDQ5MDQwLDQ5MDQxLDQ5MDQyLDQ5MDQzLDQ5MDQ1LDQ5MDQ2LDQ5MDQ3LDQ5MDQ4LDQ5MDQ5LDQ5MDUwLDQ5MDUxLDQ5MDUyLDQ5MDUzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ5MDU0LDQ5MDU1''@;'; put 'put ''LDQ5MDU2LDQ5MDU3LDQ5MDU4LDQ5MDU5LDQ5MDYwLDQ5MDYxLDQ5MDYyLDQ5MDYzLDQ5MDY0LDQ5MDY1LDQ5MDY2LDQ5MDY3LDQ5MDY4LDQ5MDY5LDQ5MDcwLDQ5MDcxLDQ5MDczLDQ5MDc0LDQ5MDc1LDQ5MDc2LDQ5MDc3LDQ5MDc4LDQ5MDc5LDQ5MDgwLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLDQ5MDgxLDQ5MDgyLDQ5MDgzLDQ5MDg0LDQ5MDg1LDQ5MDg2LDQ5MDg3LDQ5MDg4LDQ5MDg5LDQ5MDkwLDQ5MDkxLDQ5MDkyLDQ5MDk0LDQ5MDk1LDQ5MDk2LDQ5MDk3LDQ5MDk4LDQ5MDk5LDQ5MTAyLDQ5MTAzLDQ5MTA1LDQ5MTA2LDQ5MTA3LDQ5MTA5LDQ5MTEwLDQ5MTEx''@;'; put 'put ''LDQ5MTEyLDQ5MTEzLDQ5MTE0LDQ5MTE1LDQ5MTE3LDQ5MTE4LDQ5MTIwLDQ5MTIyLDQ5MTIzLDQ5MTI0LDQ5MTI1LDQ5MTI2LDQ5MTI3LDQ5MTI4LDQ5MTI5LDQ5MTMwLDQ5MTMxLDQ5MTMyLDQ5MTMzLDQ5MTM0LDQ5MTM1LDQ5MTM2LDQ5MTM3LDQ5MTM4LDQ5MTM5LDQ5MTQwLDQ5MTQxLDQ5''@;'; put 'put ''MTQyLDQ5MTQzLDQ5MTQ0LDQ5MTQ1LDQ5MTQ2LDQ5MTQ3LDQ5MTQ4LDQ5MTQ5LDQ5MTUwLDQ5MTUxLDQ5MTUyLDQ5MTUzLDQ5MTU0LDQ5MTU1LDQ5MTU2LDQ5MTU3LDQ5MTU4LDQ5MTU5LDQ5MTYwLDQ5MTYxLDQ5MTYyLDQ5MTYzLDQ5MTY0LDQ5MTY1LDQ5MTY2LDQ5MTY3LDQ5MTY4LDQ5MTY5''@;'; put 'put ''LDQ5MTcwLDQ5MTcxLDQ5MTcyLDQ5MTczLDQ5MTc0LDQ5MTc1LDQ5MTc2LDQ5MTc3LDQ5MTc4LDQ5MTc5LDQ5MTgwLDQ5MTgxLDQ5MTgyLDQ5MTgzLDQ5MTg0LDQ5MTg1LDQ5MTg2LDQ5MTg3LDQ5MTg4LDQ5MTg5LDQ5MTkwLDQ5MTkxLDQ5MTkyLDQ5MTkzLDQ5MTk0LDQ5MTk1LDQ5MTk2LDQ5''@;'; put 'put ''MTk3LDQ5MTk4LDQ5MTk5LDQ5MjAwLDQ5MjAxLDQ5MjAyLDQ5MjAzLDQ5MjA0LDQ5MjA1LDQ5MjA2LDQ5MjA3LDQ5MjA4LDQ5MjA5LDQ5MjEwLDQ5MjExLDQ5MjEzLDQ5MjE0LDQ5MjE1LDQ5MjE2LDQ5MjE3LDQ5MjE4LDQ5MjE5LDQ5MjIwLDQ5MjIxLDQ5MjIyLDQ5MjIzLDQ5MjI0LDQ5MjI1''@;'; put 'put ''LDQ5MjI2LDQ5MjI3LDQ5MjI4LDQ5MjI5LDQ5MjMwLDQ5MjMxLDQ5MjMyLDQ5MjM0LDQ5MjM1LDQ5MjM2LDQ5MjM3LDQ5MjM4LDQ5MjM5LDQ5MjQxLDQ5MjQyLDQ5MjQzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ5MjQ1LDQ5MjQ2LDQ5MjQ3LDQ5MjQ5LDQ5MjUwLDQ5MjUxLDQ5''@;'; put 'put ''MjUyLDQ5MjUzLDQ5MjU0LDQ5MjU1LDQ5MjU4LDQ5MjU5LDQ5MjYwLDQ5MjYxLDQ5MjYyLDQ5MjYzLDQ5MjY0LDQ5MjY1LDQ5MjY2LDQ5MjY3LDQ5MjY4LDQ5MjY5LDQ5MjcwLDQ5MjcxLDQ5MjcyLDQ5MjczLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ5Mjc0LDQ5Mjc1LDQ5Mjc2''@;'; put 'put ''LDQ5Mjc3LDQ5Mjc4LDQ5Mjc5LDQ5MjgwLDQ5MjgxLDQ5MjgyLDQ5MjgzLDQ5Mjg0LDQ5Mjg1LDQ5Mjg2LDQ5Mjg3LDQ5Mjg4LDQ5Mjg5LDQ5MjkwLDQ5MjkxLDQ5MjkyLDQ5MjkzLDQ5Mjk0LDQ5Mjk1LDQ5Mjk4LDQ5Mjk5LDQ5MzAxLDQ5MzAyLDQ5MzAzLDQ5MzA1LDQ5MzA2LDQ5MzA3LDQ5''@;'; put 'put ''MzA4LDQ5MzA5LDQ5MzEwLDQ5MzExLDQ5MzE0LDQ5MzE2LDQ5MzE4LDQ5MzE5LDQ5MzIwLDQ5MzIxLDQ5MzIyLDQ5MzIzLDQ5MzI2LDQ5MzI5LDQ5MzMwLDQ5MzM1LDQ5MzM2LDQ5MzM3LDQ5MzM4LDQ5MzM5LDQ5MzQyLDQ5MzQ2LDQ5MzQ3LDQ5MzQ4LDQ5MzUwLDQ5MzUxLDQ5MzU0LDQ5MzU1''@;'; put 'put ''LDQ5MzU3LDQ5MzU4LDQ5MzU5LDQ5MzYxLDQ5MzYyLDQ5MzYzLDQ5MzY0LDQ5MzY1LDQ5MzY2LDQ5MzY3LDQ5MzcwLDQ5Mzc0LDQ5Mzc1LDQ5Mzc2LDQ5Mzc3LDQ5Mzc4LDQ5Mzc5LDQ5MzgyLDQ5MzgzLDQ5Mzg1LDQ5Mzg2LDQ5Mzg3LDQ5Mzg5LDQ5MzkwLDQ5MzkxLDQ5MzkyLDQ5MzkzLDQ5''@;'; put 'put ''Mzk0LDQ5Mzk1LDQ5Mzk4LDQ5NDAwLDQ5NDAyLDQ5NDAzLDQ5NDA0LDQ5NDA1LDQ5NDA2LDQ5NDA3LDQ5NDA5LDQ5NDEwLDQ5NDExLDQ5NDEzLDQ5NDE0LDQ5NDE1LDQ5NDE3LDQ5NDE4LDQ5NDE5LDQ5NDIwLDQ5NDIxLDQ5NDIyLDQ5NDIzLDQ5NDI1LDQ5NDI2LDQ5NDI3LDQ5NDI4LDQ5NDMw''@;'; put 'put ''LDQ5NDMxLDQ5NDMyLDQ5NDMzLDQ5NDM0LDQ5NDM1LDQ5NDQxLDQ5NDQyLDQ5NDQ1LDQ5NDQ4LDQ5NDQ5LDQ5NDUwLDQ5NDUxLDQ5NDU0LDQ5NDU4LDQ5NDU5LDQ5NDYwLDQ5NDYxLDQ5NDYzLDQ5NDY2LDQ5NDY3LDQ5NDY5LDQ5NDcwLDQ5NDcxLDQ5NDczLDQ5NDc0LDQ5NDc1LDQ5NDc2LDQ5''@;'; put 'put ''NDc3LDQ5NDc4LDQ5NDc5LDQ5NDgyLDQ5NDg2LDQ5NDg3LDQ5NDg4LDQ5NDg5LDQ5NDkwLDQ5NDkxLDQ5NDk0LDQ5NDk1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ5NDk3LDQ5NDk4LDQ5NDk5LDQ5NTAxLDQ5NTAyLDQ5NTAzLDQ5NTA0LDQ5NTA1LDQ5NTA2LDQ5NTA3LDQ5NTEw''@;'; put 'put ''LDQ5NTE0LDQ5NTE1LDQ5NTE2LDQ5NTE3LDQ5NTE4LDQ5NTE5LDQ5NTIxLDQ5NTIyLDQ5NTIzLDQ5NTI1LDQ5NTI2LDQ5NTI3LDQ5NTI5LDQ5NTMwLDQ5NTMxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ5NTMyLDQ5NTMzLDQ5NTM0LDQ5NTM1LDQ5NTM2LDQ5NTM3LDQ5NTM4LDQ5''@;'; put 'put ''NTM5LDQ5NTQwLDQ5NTQyLDQ5NTQzLDQ5NTQ0LDQ5NTQ1LDQ5NTQ2LDQ5NTQ3LDQ5NTUxLDQ5NTUzLDQ5NTU0LDQ5NTU1LDQ5NTU3LDQ5NTU5LDQ5NTYwLDQ5NTYxLDQ5NTYyLDQ5NTYzLDQ5NTY2LDQ5NTY4LDQ5NTcwLDQ5NTcxLDQ5NTcyLDQ5NTc0LDQ5NTc1LDQ5NTc4LDQ5NTc5LDQ5NTgx''@;'; put 'put ''LDQ5NTgyLDQ5NTgzLDQ5NTg1LDQ5NTg2LDQ5NTg3LDQ5NTg4LDQ5NTg5LDQ5NTkwLDQ5NTkxLDQ5NTkyLDQ5NTkzLDQ5NTk0LDQ5NTk1LDQ5NTk2LDQ5NTk4LDQ5NTk5LDQ5NjAwLDQ5NjAxLDQ5NjAyLDQ5NjAzLDQ5NjA1LDQ5NjA2LDQ5NjA3LDQ5NjA5LDQ5NjEwLDQ5NjExLDQ5NjEzLDQ5''@;'; put 'put ''NjE0LDQ5NjE1LDQ5NjE2LDQ5NjE3LDQ5NjE4LDQ5NjE5LDQ5NjIxLDQ5NjIyLDQ5NjI1LDQ5NjI2LDQ5NjI3LDQ5NjI4LDQ5NjI5LDQ5NjMwLDQ5NjMxLDQ5NjMzLDQ5NjM0LDQ5NjM1LDQ5NjM3LDQ5NjM4LDQ5NjM5LDQ5NjQxLDQ5NjQyLDQ5NjQzLDQ5NjQ0LDQ5NjQ1LDQ5NjQ2LDQ5NjQ3''@;'; put 'put ''LDQ5NjUwLDQ5NjUyLDQ5NjUzLDQ5NjU0LDQ5NjU1LDQ5NjU2LDQ5NjU3LDQ5NjU4LDQ5NjU5LDQ5NjYyLDQ5NjYzLDQ5NjY1LDQ5NjY2LDQ5NjY3LDQ5NjY5LDQ5NjcwLDQ5NjcxLDQ5NjcyLDQ5NjczLDQ5Njc0LDQ5Njc1LDQ5Njc4LDQ5NjgwLDQ5NjgyLDQ5NjgzLDQ5Njg0LDQ5Njg1LDQ5''@;'; put 'put ''Njg2LDQ5Njg3LDQ5NjkwLDQ5NjkxLDQ5NjkzLDQ5Njk0LDQ5Njk3LDQ5Njk4LDQ5Njk5LDQ5NzAwLDQ5NzAxLDQ5NzAyLDQ5NzAzLDQ5NzA2LDQ5NzA4LDQ5NzEwLDQ5NzEyLDQ5NzE1LDQ5NzE3LDQ5NzE4LDQ5NzE5LDQ5NzIwLDQ5NzIxLDQ5NzIyLDQ5NzIzLDQ5NzI0LDQ5NzI1LDQ5NzI2''@;'; put 'put ''LDQ5NzI3LDQ5NzI4LDQ5NzI5LDQ5NzMwLDQ5NzMxLDQ5NzMyLDQ5NzMzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ5NzM0LDQ5NzM1LDQ5NzM3LDQ5NzM4LDQ5NzM5LDQ5NzQwLDQ5NzQxLDQ5NzQyLDQ5NzQzLDQ5NzQ2LDQ5NzQ3LDQ5NzQ5LDQ5NzUwLDQ5NzUxLDQ5NzUzLDQ5''@;'; put 'put ''NzU0LDQ5NzU1LDQ5NzU2LDQ5NzU3LDQ5NzU4LDQ5NzU5LDQ5NzYxLDQ5NzYyLDQ5NzYzLDQ5NzY0LDQ5NzY2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ5NzY3LDQ5NzY4LDQ5NzY5LDQ5NzcwLDQ5NzcxLDQ5Nzc0LDQ5Nzc1LDQ5Nzc3LDQ5Nzc4LDQ5Nzc5LDQ5NzgxLDQ5Nzgy''@;'; put 'put ''LDQ5NzgzLDQ5Nzg0LDQ5Nzg1LDQ5Nzg2LDQ5Nzg3LDQ5NzkwLDQ5NzkyLDQ5Nzk0LDQ5Nzk1LDQ5Nzk2LDQ5Nzk3LDQ5Nzk4LDQ5Nzk5LDQ5ODAyLDQ5ODAzLDQ5ODA0LDQ5ODA1LDQ5ODA2LDQ5ODA3LDQ5ODA5LDQ5ODEwLDQ5ODExLDQ5ODEyLDQ5ODEzLDQ5ODE0LDQ5ODE1LDQ5ODE3LDQ5''@;'; put 'put ''ODE4LDQ5ODIwLDQ5ODIyLDQ5ODIzLDQ5ODI0LDQ5ODI1LDQ5ODI2LDQ5ODI3LDQ5ODMwLDQ5ODMxLDQ5ODMzLDQ5ODM0LDQ5ODM1LDQ5ODM4LDQ5ODM5LDQ5ODQwLDQ5ODQxLDQ5ODQyLDQ5ODQzLDQ5ODQ2LDQ5ODQ4LDQ5ODUwLDQ5ODUxLDQ5ODUyLDQ5ODUzLDQ5ODU0LDQ5ODU1LDQ5ODU2''@;'; put 'put ''LDQ5ODU3LDQ5ODU4LDQ5ODU5LDQ5ODYwLDQ5ODYxLDQ5ODYyLDQ5ODYzLDQ5ODY0LDQ5ODY1LDQ5ODY2LDQ5ODY3LDQ5ODY4LDQ5ODY5LDQ5ODcwLDQ5ODcxLDQ5ODcyLDQ5ODczLDQ5ODc0LDQ5ODc1LDQ5ODc2LDQ5ODc3LDQ5ODc4LDQ5ODc5LDQ5ODgwLDQ5ODgxLDQ5ODgyLDQ5ODgzLDQ5''@;'; put 'put ''ODg2LDQ5ODg3LDQ5ODg5LDQ5ODkwLDQ5ODkzLDQ5ODk0LDQ5ODk1LDQ5ODk2LDQ5ODk3LDQ5ODk4LDQ5OTAyLDQ5OTA0LDQ5OTA2LDQ5OTA3LDQ5OTA4LDQ5OTA5LDQ5OTExLDQ5OTE0LDQ5OTE3LDQ5OTE4LDQ5OTE5LDQ5OTIxLDQ5OTIyLDQ5OTIzLDQ5OTI0LDQ5OTI1LDQ5OTI2LDQ5OTI3''@;'; put 'put ''LDQ5OTMwLDQ5OTMxLDQ5OTM0LDQ5OTM1LDQ5OTM2LDQ5OTM3LDQ5OTM4LDQ5OTQyLDQ5OTQzLDQ5OTQ1LDQ5OTQ2LDQ5OTQ3LDQ5OTQ5LDQ5OTUwLDQ5OTUxLDQ5OTUyLDQ5OTUzLDQ5OTU0LDQ5OTU1LDQ5OTU4LDQ5OTU5LDQ5OTYyLDQ5OTYzLDQ5OTY0LDQ5OTY1LDQ5OTY2LDQ5OTY3LDQ5''@;'; put 'put ''OTY4LDQ5OTY5LDQ5OTcwLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ5OTcxLDQ5OTcyLDQ5OTczLDQ5OTc0LDQ5OTc1LDQ5OTc2LDQ5OTc3LDQ5OTc4LDQ5OTc5LDQ5OTgwLDQ5OTgxLDQ5OTgyLDQ5OTgzLDQ5OTg0LDQ5OTg1LDQ5OTg2LDQ5OTg3LDQ5OTg4LDQ5OTkwLDQ5OTkx''@;'; put 'put ''LDQ5OTkyLDQ5OTkzLDQ5OTk0LDQ5OTk1LDQ5OTk2LDQ5OTk3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ5OTk4LDQ5OTk5LDVlNCw1MDAwMSw1MDAwMiw1MDAwMyw1MDAwNCw1MDAwNSw1MDAwNiw1MDAwNyw1MDAwOCw1MDAwOSw1MDAxMCw1MDAxMSw1MDAxMiw1MDAxMyw1MDAx''@;'; put 'put ''NCw1MDAxNSw1MDAxNiw1MDAxNyw1MDAxOCw1MDAxOSw1MDAyMCw1MDAyMSw1MDAyMiw1MDAyMyw1MDAyNiw1MDAyNyw1MDAyOSw1MDAzMCw1MDAzMSw1MDAzMyw1MDAzNSw1MDAzNiw1MDAzNyw1MDAzOCw1MDAzOSw1MDA0Miw1MDA0Myw1MDA0Niw1MDA0Nyw1MDA0OCw1MDA0OSw1MDA1MCw1''@;'; put 'put ''MDA1MSw1MDA1Myw1MDA1NCw1MDA1NSw1MDA1Nyw1MDA1OCw1MDA1OSw1MDA2MSw1MDA2Miw1MDA2Myw1MDA2NCw1MDA2NSw1MDA2Niw1MDA2Nyw1MDA2OCw1MDA2OSw1MDA3MCw1MDA3MSw1MDA3Miw1MDA3Myw1MDA3NCw1MDA3NSw1MDA3Niw1MDA3Nyw1MDA3OCw1MDA3OSw1MDA4MCw1MDA4''@;'; put 'put ''MSw1MDA4Miw1MDA4Myw1MDA4NCw1MDA4NSw1MDA4Niw1MDA4Nyw1MDA4OCw1MDA4OSw1MDA5MCw1MDA5MSw1MDA5Miw1MDA5Myw1MDA5NCw1MDA5NSw1MDA5Niw1MDA5Nyw1MDA5OCw1MDA5OSw1MDEwMCw1MDEwMSw1MDEwMiw1MDEwMyw1MDEwNCw1MDEwNSw1MDEwNiw1MDEwNyw1MDEwOCw1''@;'; put 'put ''MDEwOSw1MDExMCw1MDExMSw1MDExMyw1MDExNCw1MDExNSw1MDExNiw1MDExNyw1MDExOCw1MDExOSw1MDEyMCw1MDEyMSw1MDEyMiw1MDEyMyw1MDEyNCw1MDEyNSw1MDEyNiw1MDEyNyw1MDEyOCw1MDEyOSw1MDEzMCw1MDEzMSw1MDEzMiw1MDEzMyw1MDEzNCw1MDEzNSw1MDEzOCw1MDEz''@;'; put 'put ''OSw1MDE0MSw1MDE0Miw1MDE0NSw1MDE0Nyw1MDE0OCw1MDE0OSw1MDE1MCw1MDE1MSw1MDE1NCw1MDE1NSw1MDE1Niw1MDE1OCw1MDE1OSw1MDE2MCw1MDE2MSw1MDE2Miw1MDE2Myw1MDE2Niw1MDE2Nyw1MDE2OSw1MDE3MCw1MDE3MSw1MDE3Miw1MDE3Myw1MDE3NCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCw1MDE3NSw1MDE3Niw1MDE3Nyw1MDE3OCw1MDE3OSw1MDE4MCw1MDE4MSw1MDE4Miw1MDE4Myw1MDE4NSw1MDE4Niw1MDE4Nyw1MDE4OCw1MDE4OSw1MDE5MCw1MDE5MSw1MDE5Myw1MDE5NCw1MDE5NSw1MDE5Niw1MDE5Nyw1MDE5OCw1MDE5OSw1MDIwMCw1MDIw''@;'; put 'put ''MSw1MDIwMixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MDIwMyw1MDIwNCw1MDIwNSw1MDIwNiw1MDIwNyw1MDIwOCw1MDIwOSw1MDIxMCw1MDIxMSw1MDIxMyw1MDIxNCw1MDIxNSw1MDIxNiw1MDIxNyw1MDIxOCw1MDIxOSw1MDIyMSw1MDIyMiw1MDIyMyw1MDIyNSw1MDIyNiw1''@;'; put 'put ''MDIyNyw1MDIyOSw1MDIzMCw1MDIzMSw1MDIzMiw1MDIzMyw1MDIzNCw1MDIzNSw1MDIzOCw1MDIzOSw1MDI0MCw1MDI0MSw1MDI0Miw1MDI0Myw1MDI0NCw1MDI0NSw1MDI0Niw1MDI0Nyw1MDI0OSw1MDI1MCw1MDI1MSw1MDI1Miw1MDI1Myw1MDI1NCw1MDI1NSw1MDI1Niw1MDI1Nyw1MDI1''@;'; put 'put ''OCw1MDI1OSw1MDI2MCw1MDI2MSw1MDI2Miw1MDI2Myw1MDI2NCw1MDI2NSw1MDI2Niw1MDI2Nyw1MDI2OCw1MDI2OSw1MDI3MCw1MDI3MSw1MDI3Miw1MDI3Myw1MDI3NCw1MDI3NSw1MDI3OCw1MDI3OSw1MDI4MSw1MDI4Miw1MDI4Myw1MDI4NSw1MDI4Niw1MDI4Nyw1MDI4OCw1MDI4OSw1''@;'; put 'put ''MDI5MCw1MDI5MSw1MDI5NCw1MDI5NSw1MDI5Niw1MDI5OCw1MDI5OSw1MDMwMCw1MDMwMSw1MDMwMiw1MDMwMyw1MDMwNSw1MDMwNiw1MDMwNyw1MDMwOCw1MDMwOSw1MDMxMCw1MDMxMSw1MDMxMiw1MDMxMyw1MDMxNCw1MDMxNSw1MDMxNiw1MDMxNyw1MDMxOCw1MDMxOSw1MDMyMCw1MDMy''@;'; put 'put ''MSw1MDMyMiw1MDMyMyw1MDMyNSw1MDMyNiw1MDMyNyw1MDMyOCw1MDMyOSw1MDMzMCw1MDMzMSw1MDMzMyw1MDMzNCw1MDMzNSw1MDMzNiw1MDMzNyw1MDMzOCw1MDMzOSw1MDM0MCw1MDM0MSw1MDM0Miw1MDM0Myw1MDM0NCw1MDM0NSw1MDM0Niw1MDM0Nyw1MDM0OCw1MDM0OSw1MDM1MCw1''@;'; put 'put ''MDM1MSw1MDM1Miw1MDM1Myw1MDM1NCw1MDM1NSw1MDM1Niw1MDM1Nyw1MDM1OCw1MDM1OSw1MDM2MSw1MDM2Miw1MDM2Myw1MDM2NSw1MDM2Niw1MDM2Nyw1MDM2OCw1MDM2OSw1MDM3MCw1MDM3MSw1MDM3Miw1MDM3MyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MDM3NCw1MDM3''@;'; put 'put ''NSw1MDM3Niw1MDM3Nyw1MDM3OCw1MDM3OSw1MDM4MCw1MDM4MSw1MDM4Miw1MDM4Myw1MDM4NCw1MDM4NSw1MDM4Niw1MDM4Nyw1MDM4OCw1MDM4OSw1MDM5MCw1MDM5MSw1MDM5Miw1MDM5Myw1MDM5NCw1MDM5NSw1MDM5Niw1MDM5Nyw1MDM5OCw1MDM5OSxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCw1MDQwMCw1MDQwMSw1MDQwMiw1MDQwMyw1MDQwNCw1MDQwNSw1MDQwNiw1MDQwNyw1MDQwOCw1MDQxMCw1MDQxMSw1MDQxMiw1MDQxMyw1MDQxNCw1MDQxNSw1MDQxOCw1MDQxOSw1MDQyMSw1MDQyMiw1MDQyMyw1MDQyNSw1MDQyNyw1MDQyOCw1MDQyOSw1MDQzMCw1MDQz''@;'; put 'put ''NCw1MDQzNSw1MDQzNiw1MDQzNyw1MDQzOCw1MDQzOSw1MDQ0MCw1MDQ0MSw1MDQ0Miw1MDQ0Myw1MDQ0NSw1MDQ0Niw1MDQ0Nyw1MDQ0OSw1MDQ1MCw1MDQ1MSw1MDQ1Myw1MDQ1NCw1MDQ1NSw1MDQ1Niw1MDQ1Nyw1MDQ1OCw1MDQ1OSw1MDQ2MSw1MDQ2Miw1MDQ2Myw1MDQ2NCw1MDQ2NSw1''@;'; put 'put ''MDQ2Niw1MDQ2Nyw1MDQ2OCw1MDQ2OSw1MDQ3MCw1MDQ3MSw1MDQ3NCw1MDQ3NSw1MDQ3Nyw1MDQ3OCw1MDQ3OSw1MDQ4MSw1MDQ4Miw1MDQ4Myw1MDQ4NCw1MDQ4NSw1MDQ4Niw1MDQ4Nyw1MDQ5MCw1MDQ5Miw1MDQ5NCw1MDQ5NSw1MDQ5Niw1MDQ5Nyw1MDQ5OCw1MDQ5OSw1MDUwMiw1MDUw''@;'; put 'put ''Myw1MDUwNyw1MDUxMSw1MDUxMiw1MDUxMyw1MDUxNCw1MDUxOCw1MDUyMiw1MDUyMyw1MDUyNCw1MDUyNyw1MDUzMCw1MDUzMSw1MDUzMyw1MDUzNCw1MDUzNSw1MDUzNyw1MDUzOCw1MDUzOSw1MDU0MCw1MDU0MSw1MDU0Miw1MDU0Myw1MDU0Niw1MDU1MCw1MDU1MSw1MDU1Miw1MDU1Myw1''@;'; put 'put ''MDU1NCw1MDU1NSw1MDU1OCw1MDU1OSw1MDU2MSw1MDU2Miw1MDU2Myw1MDU2NSw1MDU2Niw1MDU2OCw1MDU2OSw1MDU3MCw1MDU3MSw1MDU3NCw1MDU3Niw1MDU3OCw1MDU3OSw1MDU4MCw1MDU4Miw1MDU4NSw1MDU4Niw1MDU4Nyw1MDU4OSw1MDU5MCw1MDU5MSw1MDU5Myw1MDU5NCw1MDU5''@;'; put 'put ''NSw1MDU5Niw1MDU5Nyw1MDU5OCw1MDU5OSw1MDYwMCw1MDYwMiw1MDYwMyw1MDYwNCw1MDYwNSw1MDYwNiw1MDYwNyw1MDYwOCw1MDYwOSw1MDYxMCw1MDYxMSw1MDYxNCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MDYxNSw1MDYxOCw1MDYyMyw1MDYyNCw1MDYyNSw1MDYyNiw1''@;'; put 'put ''MDYyNyw1MDYzNSw1MDYzNyw1MDYzOSw1MDY0Miw1MDY0Myw1MDY0NSw1MDY0Niw1MDY0Nyw1MDY0OSw1MDY1MCw1MDY1MSw1MDY1Miw1MDY1Myw1MDY1NCw1MDY1NSw1MDY1OCw1MDY2MCw1MDY2Miw1MDY2MyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MDY2NCw1MDY2NSw1MDY2''@;'; put 'put ''Niw1MDY2Nyw1MDY3MSw1MDY3Myw1MDY3NCw1MDY3NSw1MDY3Nyw1MDY4MCw1MDY4MSw1MDY4Miw1MDY4Myw1MDY5MCw1MDY5MSw1MDY5Miw1MDY5Nyw1MDY5OCw1MDY5OSw1MDcwMSw1MDcwMiw1MDcwMyw1MDcwNSw1MDcwNiw1MDcwNyw1MDcwOCw1MDcwOSw1MDcxMCw1MDcxMSw1MDcxNCw1''@;'; put 'put ''MDcxNyw1MDcxOCw1MDcxOSw1MDcyMCw1MDcyMSw1MDcyMiw1MDcyMyw1MDcyNiw1MDcyNyw1MDcyOSw1MDczMCw1MDczMSw1MDczNSw1MDczNyw1MDczOCw1MDc0Miw1MDc0NCw1MDc0Niw1MDc0OCw1MDc0OSw1MDc1MCw1MDc1MSw1MDc1NCw1MDc1NSw1MDc1Nyw1MDc1OCw1MDc1OSw1MDc2''@;'; put 'put ''MSw1MDc2Miw1MDc2Myw1MDc2NCw1MDc2NSw1MDc2Niw1MDc2Nyw1MDc3MCw1MDc3NCw1MDc3NSw1MDc3Niw1MDc3Nyw1MDc3OCw1MDc3OSw1MDc4Miw1MDc4Myw1MDc4NSw1MDc4Niw1MDc4Nyw1MDc4OCw1MDc4OSw1MDc5MCw1MDc5MSw1MDc5Miw1MDc5Myw1MDc5NCw1MDc5NSw1MDc5Nyw1''@;'; put 'put ''MDc5OCw1MDgwMCw1MDgwMiw1MDgwMyw1MDgwNCw1MDgwNSw1MDgwNiw1MDgwNyw1MDgxMCw1MDgxMSw1MDgxMyw1MDgxNCw1MDgxNSw1MDgxNyw1MDgxOCw1MDgxOSw1MDgyMCw1MDgyMSw1MDgyMiw1MDgyMyw1MDgyNiw1MDgyOCw1MDgzMCw1MDgzMSw1MDgzMiw1MDgzMyw1MDgzNCw1MDgz''@;'; put 'put ''NSw1MDgzOCw1MDgzOSw1MDg0MSw1MDg0Miw1MDg0Myw1MDg0NSw1MDg0Niw1MDg0Nyw1MDg0OCw1MDg0OSw1MDg1MCw1MDg1MSw1MDg1NCw1MDg1Niw1MDg1OCw1MDg1OSw1MDg2MCw1MDg2MSw1MDg2Miw1MDg2Myw1MDg2Niw1MDg2Nyw1MDg2OSw1MDg3MCw1MDg3MSw1MDg3NSw1MDg3Niw1''@;'; put 'put ''MDg3Nyw1MDg3OCw1MDg3OSw1MDg4Miw1MDg4NCw1MDg4Niw1MDg4Nyw1MDg4OCw1MDg4OSw1MDg5MCw1MDg5MSw1MDg5NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MDg5NSw1MDg5Nyw1MDg5OCw1MDg5OSw1MDkwMSw1MDkwMiw1MDkwMyw1MDkwNCw1MDkwNSw1MDkwNiw1MDkw''@;'; put 'put ''Nyw1MDkxMCw1MDkxMSw1MDkxNCw1MDkxNSw1MDkxNiw1MDkxNyw1MDkxOCw1MDkxOSw1MDkyMiw1MDkyMyw1MDkyNSw1MDkyNiw1MDkyNyw1MDkyOSw1MDkzMCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MDkzMSw1MDkzMiw1MDkzMyw1MDkzNCw1MDkzNSw1MDkzOCw1MDkzOSw1''@;'; put 'put ''MDk0MCw1MDk0Miw1MDk0Myw1MDk0NCw1MDk0NSw1MDk0Niw1MDk0Nyw1MDk1MCw1MDk1MSw1MDk1Myw1MDk1NCw1MDk1NSw1MDk1Nyw1MDk1OCw1MDk1OSw1MDk2MCw1MDk2MSw1MDk2Miw1MDk2Myw1MDk2Niw1MDk2OCw1MDk3MCw1MDk3MSw1MDk3Miw1MDk3Myw1MDk3NCw1MDk3NSw1MDk3''@;'; put 'put ''OCw1MDk3OSw1MDk4MSw1MDk4Miw1MDk4Myw1MDk4NSw1MDk4Niw1MDk4Nyw1MDk4OCw1MDk4OSw1MDk5MCw1MDk5MSw1MDk5NCw1MDk5Niw1MDk5OCw1MWUzLDUxMDAxLDUxMDAyLDUxMDAzLDUxMDA2LDUxMDA3LDUxMDA5LDUxMDEwLDUxMDExLDUxMDEzLDUxMDE0LDUxMDE1LDUxMDE2LDUx''@;'; put 'put ''MDE3LDUxMDE5LDUxMDIyLDUxMDI0LDUxMDMzLDUxMDM0LDUxMDM1LDUxMDM3LDUxMDM4LDUxMDM5LDUxMDQxLDUxMDQyLDUxMDQzLDUxMDQ0LDUxMDQ1LDUxMDQ2LDUxMDQ3LDUxMDQ5LDUxMDUwLDUxMDUyLDUxMDUzLDUxMDU0LDUxMDU1LDUxMDU2LDUxMDU3LDUxMDU4LDUxMDU5LDUxMDYy''@;'; put 'put ''LDUxMDYzLDUxMDY1LDUxMDY2LDUxMDY3LDUxMDcxLDUxMDcyLDUxMDczLDUxMDc0LDUxMDc4LDUxMDgzLDUxMDg0LDUxMDg1LDUxMDg3LDUxMDkwLDUxMDkxLDUxMDkzLDUxMDk3LDUxMDk5LDUxMTAwLDUxMTAxLDUxMTAyLDUxMTAzLDUxMTA2LDUxMTExLDUxMTEyLDUxMTEzLDUxMTE0LDUx''@;'; put 'put ''MTE1LDUxMTE4LDUxMTE5LDUxMTIxLDUxMTIyLDUxMTIzLDUxMTI1LDUxMTI2LDUxMTI3LDUxMTI4LDUxMTI5LDUxMTMwLDUxMTMxLDUxMTM0LDUxMTM4LDUxMTM5LDUxMTQwLDUxMTQxLDUxMTQyLDUxMTQzLDUxMTQ2LDUxMTQ3LDUxMTQ5LDUxMTUxLDUxMTUzLDUxMTU0LDUxMTU1LDUxMTU2''@;'; put 'put ''LDUxMTU3LDUxMTU4LDUxMTU5LDUxMTYxLDUxMTYyLDUxMTYzLDUxMTY0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUxMTY2LDUxMTY3LDUxMTY4LDUxMTY5LDUxMTcwLDUxMTcxLDUxMTczLDUxMTc0LDUxMTc1LDUxMTc3LDUxMTc4LDUxMTc5LDUxMTgxLDUxMTgyLDUxMTgzLDUx''@;'; put 'put ''MTg0LDUxMTg1LDUxMTg2LDUxMTg3LDUxMTg4LDUxMTg5LDUxMTkwLDUxMTkxLDUxMTkyLDUxMTkzLDUxMTk0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUxMTk1LDUxMTk2LDUxMTk3LDUxMTk4LDUxMTk5LDUxMjAyLDUxMjAzLDUxMjA1LDUxMjA2LDUxMjA3LDUxMjA5LDUxMjEx''@;'; put 'put ''LDUxMjEyLDUxMjEzLDUxMjE0LDUxMjE1LDUxMjE4LDUxMjIwLDUxMjIzLDUxMjI0LDUxMjI1LDUxMjI2LDUxMjI3LDUxMjMwLDUxMjMxLDUxMjMzLDUxMjM0LDUxMjM1LDUxMjM3LDUxMjM4LDUxMjM5LDUxMjQwLDUxMjQxLDUxMjQyLDUxMjQzLDUxMjQ2LDUxMjQ4LDUxMjUwLDUxMjUxLDUx''@;'; put 'put ''MjUyLDUxMjUzLDUxMjU0LDUxMjU1LDUxMjU3LDUxMjU4LDUxMjU5LDUxMjYxLDUxMjYyLDUxMjYzLDUxMjY1LDUxMjY2LDUxMjY3LDUxMjY4LDUxMjY5LDUxMjcwLDUxMjcxLDUxMjc0LDUxMjc1LDUxMjc4LDUxMjc5LDUxMjgwLDUxMjgxLDUxMjgyLDUxMjgzLDUxMjg1LDUxMjg2LDUxMjg3''@;'; put 'put ''LDUxMjg4LDUxMjg5LDUxMjkwLDUxMjkxLDUxMjkyLDUxMjkzLDUxMjk0LDUxMjk1LDUxMjk2LDUxMjk3LDUxMjk4LDUxMjk5LDUxMzAwLDUxMzAxLDUxMzAyLDUxMzAzLDUxMzA0LDUxMzA1LDUxMzA2LDUxMzA3LDUxMzA4LDUxMzA5LDUxMzEwLDUxMzExLDUxMzE0LDUxMzE1LDUxMzE3LDUx''@;'; put 'put ''MzE4LDUxMzE5LDUxMzIxLDUxMzIzLDUxMzI0LDUxMzI1LDUxMzI2LDUxMzI3LDUxMzMwLDUxMzMyLDUxMzM2LDUxMzM3LDUxMzM4LDUxMzQyLDUxMzQzLDUxMzQ0LDUxMzQ1LDUxMzQ2LDUxMzQ3LDUxMzQ5LDUxMzUwLDUxMzUxLDUxMzUyLDUxMzUzLDUxMzU0LDUxMzU1LDUxMzU2LDUxMzU4''@;'; put 'put ''LDUxMzYwLDUxMzYyLDUxMzYzLDUxMzY0LDUxMzY1LDUxMzY2LDUxMzY3LDUxMzY5LDUxMzcwLDUxMzcxLDUxMzcyLDUxMzczLDUxMzc0LDUxMzc1LDUxMzc2LDUxMzc3LDUxMzc4LDUxMzc5LDUxMzgwLDUxMzgxLDUxMzgyLDUxMzgzLDUxMzg0LDUxMzg1LDUxMzg2LDUxMzg3LDUxMzkwLDUx''@;'; put 'put ''MzkxLDUxMzkyLDUxMzkzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUxMzk0LDUxMzk1LDUxMzk3LDUxMzk4LDUxMzk5LDUxNDAxLDUxNDAyLDUxNDAzLDUxNDA1LDUxNDA2LDUxNDA3LDUxNDA4LDUxNDA5LDUxNDEwLDUxNDExLDUxNDE0LDUxNDE2LDUxNDE4LDUxNDE5LDUxNDIw''@;'; put 'put ''LDUxNDIxLDUxNDIyLDUxNDIzLDUxNDI2LDUxNDI3LDUxNDI5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUxNDMwLDUxNDMxLDUxNDMyLDUxNDMzLDUxNDM0LDUxNDM1LDUxNDM2LDUxNDM3LDUxNDM4LDUxNDM5LDUxNDQwLDUxNDQxLDUxNDQyLDUxNDQzLDUxNDQ0LDUxNDQ2LDUx''@;'; put 'put ''NDQ3LDUxNDQ4LDUxNDQ5LDUxNDUwLDUxNDUxLDUxNDU0LDUxNDU1LDUxNDU3LDUxNDU4LDUxNDU5LDUxNDYzLDUxNDY0LDUxNDY1LDUxNDY2LDUxNDY3LDUxNDcwLDEyMjg4LDEyMjg5LDEyMjkwLDE4Myw4MjI5LDgyMzAsMTY4LDEyMjkxLDE3Myw4MjEzLDg3NDEsNjUzNDAsODc2NCw4MjE2''@;'; put 'put ''LDgyMTcsODIyMCw4MjIxLDEyMzA4LDEyMzA5LDEyMjk2LDEyMjk3LDEyMjk4LDEyMjk5LDEyMzAwLDEyMzAxLDEyMzAyLDEyMzAzLDEyMzA0LDEyMzA1LDE3NywyMTUsMjQ3LDg4MDAsODgwNCw4ODA1LDg3MzQsODc1NiwxNzYsODI0Miw4MjQzLDg0NTEsODQ5MSw2NTUwNCw2NTUwNSw2NTUw''@;'; put 'put ''OSw5Nzk0LDk3OTIsODczNiw4ODY5LDg5NzgsODcwNiw4NzExLDg4MDEsODc4NiwxNjcsODI1MSw5NzM0LDk3MzMsOTY3NSw5Njc5LDk2NzgsOTY3MSw5NjcwLDk2MzMsOTYzMiw5NjUxLDk2NTAsOTY2MSw5NjYwLDg1OTQsODU5Miw4NTkzLDg1OTUsODU5NiwxMjMwNyw4ODEwLDg4MTEsODcz''@;'; put 'put ''MCw4NzY1LDg3MzMsODc1Nyw4NzQ3LDg3NDgsODcxMiw4NzE1LDg4MzgsODgzOSw4ODM0LDg4MzUsODc0Niw4NzQ1LDg3NDMsODc0NCw2NTUwNiw1MTQ3Miw1MTQ3NCw1MTQ3NSw1MTQ3Niw1MTQ3Nyw1MTQ3OCw1MTQ3OSw1MTQ4MSw1MTQ4Miw1MTQ4Myw1MTQ4NCw1MTQ4NSw1MTQ4Niw1MTQ4''@;'; put 'put ''Nyw1MTQ4OCw1MTQ4OSw1MTQ5MCw1MTQ5MSw1MTQ5Miw1MTQ5Myw1MTQ5NCw1MTQ5NSw1MTQ5Niw1MTQ5Nyw1MTQ5OCw1MTQ5OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MTUwMSw1MTUwMiw1MTUwMyw1MTUwNCw1MTUwNSw1MTUwNiw1MTUwNyw1MTUwOSw1MTUxMCw1MTUxMSw1''@;'; put 'put ''MTUxMiw1MTUxMyw1MTUxNCw1MTUxNSw1MTUxNiw1MTUxNyw1MTUxOCw1MTUxOSw1MTUyMCw1MTUyMSw1MTUyMiw1MTUyMyw1MTUyNCw1MTUyNSw1MTUyNiw1MTUyNyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MTUyOCw1MTUyOSw1MTUzMCw1MTUzMSw1MTUzMiw1MTUzMyw1MTUz''@;'; put 'put ''NCw1MTUzNSw1MTUzOCw1MTUzOSw1MTU0MSw1MTU0Miw1MTU0Myw1MTU0NSw1MTU0Niw1MTU0Nyw1MTU0OCw1MTU0OSw1MTU1MCw1MTU1MSw1MTU1NCw1MTU1Niw1MTU1Nyw1MTU1OCw1MTU1OSw1MTU2MCw1MTU2MSw1MTU2Miw1MTU2Myw1MTU2NSw1MTU2Niw1MTU2Nyw4NjU4LDg2NjAsODcw''@;'; put 'put ''NCw4NzA3LDE4MCw2NTM3NCw3MTEsNzI4LDczMyw3MzAsNzI5LDE4NCw3MzEsMTYxLDE5MSw3MjAsODc1MCw4NzIxLDg3MTksMTY0LDg0NTcsODI0MCw5NjY1LDk2NjQsOTY1NSw5NjU0LDk4MjgsOTgyNCw5ODI1LDk4MjksOTgzMSw5ODI3LDg4NTcsOTY3Miw5NjM1LDk2ODAsOTY4MSw5NjE4''@;'; put 'put ''LDk2MzYsOTYzNyw5NjQwLDk2MzksOTYzOCw5NjQxLDk4MzIsOTc0Myw5NzQyLDk3NTYsOTc1OCwxODIsODIyNCw4MjI1LDg1OTcsODU5OSw4NjAxLDg1OTgsODYwMCw5ODM3LDk4MzMsOTgzNCw5ODM2LDEyOTI3LDEyODI4LDg0NzAsMTMyNTUsODQ4MiwxMzI1MCwxMzI3Miw4NDgxLDgzNjQs''@;'; put 'put ''MTc0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MTU2OSw1MTU3MCw1MTU3MSw1MTU3Myw1MTU3NCw1MTU3NSw1MTU3Niw1MTU3''@;'; put 'put ''Nyw1MTU3OCw1MTU3OSw1MTU4MSw1MTU4Miw1MTU4Myw1MTU4NCw1MTU4NSw1MTU4Niw1MTU4Nyw1MTU4OCw1MTU4OSw1MTU5MCw1MTU5MSw1MTU5NCw1MTU5NSw1MTU5Nyw1MTU5OCw1MTU5OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MTYwMSw1MTYwMiw1MTYwMyw1MTYwNCw1''@;'; put 'put ''MTYwNSw1MTYwNiw1MTYwNyw1MTYxMCw1MTYxMiw1MTYxNCw1MTYxNSw1MTYxNiw1MTYxNyw1MTYxOCw1MTYxOSw1MTYyMCw1MTYyMSw1MTYyMiw1MTYyMyw1MTYyNCw1MTYyNSw1MTYyNiw1MTYyNyw1MTYyOCw1MTYyOSw1MTYzMCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MTYz''@;'; put 'put ''MSw1MTYzMiw1MTYzMyw1MTYzNCw1MTYzNSw1MTYzNiw1MTYzNyw1MTYzOCw1MTYzOSw1MTY0MCw1MTY0MSw1MTY0Miw1MTY0Myw1MTY0NCw1MTY0NSw1MTY0Niw1MTY0Nyw1MTY1MCw1MTY1MSw1MTY1Myw1MTY1NCw1MTY1Nyw1MTY1OSw1MTY2MCw1MTY2MSw1MTY2Miw1MTY2Myw1MTY2Niw1''@;'; put 'put ''MTY2OCw1MTY3MSw1MTY3Miw1MTY3NSw2NTI4MSw2NTI4Miw2NTI4Myw2NTI4NCw2NTI4NSw2NTI4Niw2NTI4Nyw2NTI4OCw2NTI4OSw2NTI5MCw2NTI5MSw2NTI5Miw2NTI5Myw2NTI5NCw2NTI5NSw2NTI5Niw2NTI5Nyw2NTI5OCw2NTI5OSw2NTMwMCw2NTMwMSw2NTMwMiw2NTMwMyw2NTMw''@;'; put 'put ''NCw2NTMwNSw2NTMwNiw2NTMwNyw2NTMwOCw2NTMwOSw2NTMxMCw2NTMxMSw2NTMxMiw2NTMxMyw2NTMxNCw2NTMxNSw2NTMxNiw2NTMxNyw2NTMxOCw2NTMxOSw2NTMyMCw2NTMyMSw2NTMyMiw2NTMyMyw2NTMyNCw2NTMyNSw2NTMyNiw2NTMyNyw2NTMyOCw2NTMyOSw2NTMzMCw2NTMzMSw2''@;'; put 'put ''NTMzMiw2NTMzMyw2NTMzNCw2NTMzNSw2NTMzNiw2NTMzNyw2NTMzOCw2NTMzOSw2NTUxMCw2NTM0MSw2NTM0Miw2NTM0Myw2NTM0NCw2NTM0NSw2NTM0Niw2NTM0Nyw2NTM0OCw2NTM0OSw2NTM1MCw2NTM1MSw2NTM1Miw2NTM1Myw2NTM1NCw2NTM1NSw2NTM1Niw2NTM1Nyw2NTM1OCw2NTM1''@;'; put 'put ''OSw2NTM2MCw2NTM2MSw2NTM2Miw2NTM2Myw2NTM2NCw2NTM2NSw2NTM2Niw2NTM2Nyw2NTM2OCw2NTM2OSw2NTM3MCw2NTM3MSw2NTM3Miw2NTM3Myw2NTUwNyw1MTY3OCw1MTY3OSw1MTY4MSw1MTY4Myw1MTY4NSw1MTY4Niw1MTY4OCw1MTY4OSw1MTY5MCw1MTY5MSw1MTY5NCw1MTY5OCw1''@;'; put 'put ''MTY5OSw1MTcwMCw1MTcwMSw1MTcwMiw1MTcwMyw1MTcwNiw1MTcwNyw1MTcwOSw1MTcxMCw1MTcxMSw1MTcxMyw1MTcxNCw1MTcxNSw1MTcxNixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MTcxNyw1MTcxOCw1MTcxOSw1MTcyMiw1MTcyNiw1MTcyNyw1MTcyOCw1MTcyOSw1MTcz''@;'; put 'put ''MCw1MTczMSw1MTczMyw1MTczNCw1MTczNSw1MTczNyw1MTczOCw1MTczOSw1MTc0MCw1MTc0MSw1MTc0Miw1MTc0Myw1MTc0NCw1MTc0NSw1MTc0Niw1MTc0Nyw1MTc0OCw1MTc0OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MTc1MCw1MTc1MSw1MTc1Miw1MTc1NCw1MTc1NSw1''@;'; put 'put ''MTc1Niw1MTc1Nyw1MTc1OCw1MTc1OSw1MTc2MCw1MTc2MSw1MTc2Miw1MTc2Myw1MTc2NCw1MTc2NSw1MTc2Niw1MTc2Nyw1MTc2OCw1MTc2OSw1MTc3MCw1MTc3MSw1MTc3Miw1MTc3Myw1MTc3NCw1MTc3NSw1MTc3Niw1MTc3Nyw1MTc3OCw1MTc3OSw1MTc4MCw1MTc4MSw1MTc4MiwxMjU5''@;'; put 'put ''MywxMjU5NCwxMjU5NSwxMjU5NiwxMjU5NywxMjU5OCwxMjU5OSwxMjYwMCwxMjYwMSwxMjYwMiwxMjYwMywxMjYwNCwxMjYwNSwxMjYwNiwxMjYwNywxMjYwOCwxMjYwOSwxMjYxMCwxMjYxMSwxMjYxMiwxMjYxMywxMjYxNCwxMjYxNSwxMjYxNiwxMjYxNywxMjYxOCwxMjYxOSwxMjYyMCwx''@;'; put 'put ''MjYyMSwxMjYyMiwxMjYyMywxMjYyNCwxMjYyNSwxMjYyNiwxMjYyNywxMjYyOCwxMjYyOSwxMjYzMCwxMjYzMSwxMjYzMiwxMjYzMywxMjYzNCwxMjYzNSwxMjYzNiwxMjYzNywxMjYzOCwxMjYzOSwxMjY0MCwxMjY0MSwxMjY0MiwxMjY0MywxMjY0NCwxMjY0NSwxMjY0NiwxMjY0NywxMjY0''@;'; put 'put ''OCwxMjY0OSwxMjY1MCwxMjY1MSwxMjY1MiwxMjY1MywxMjY1NCwxMjY1NSwxMjY1NiwxMjY1NywxMjY1OCwxMjY1OSwxMjY2MCwxMjY2MSwxMjY2MiwxMjY2MywxMjY2NCwxMjY2NSwxMjY2NiwxMjY2NywxMjY2OCwxMjY2OSwxMjY3MCwxMjY3MSwxMjY3MiwxMjY3MywxMjY3NCwxMjY3NSwx''@;'; put 'put ''MjY3NiwxMjY3NywxMjY3OCwxMjY3OSwxMjY4MCwxMjY4MSwxMjY4MiwxMjY4MywxMjY4NCwxMjY4NSwxMjY4Niw1MTc4Myw1MTc4NCw1MTc4NSw1MTc4Niw1MTc4Nyw1MTc5MCw1MTc5MSw1MTc5Myw1MTc5NCw1MTc5NSw1MTc5Nyw1MTc5OCw1MTc5OSw1MTgwMCw1MTgwMSw1MTgwMiw1MTgw''@;'; put 'put ''Myw1MTgwNiw1MTgxMCw1MTgxMSw1MTgxMiw1MTgxMyw1MTgxNCw1MTgxNSw1MTgxNyw1MTgxOCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MTgxOSw1MTgyMCw1MTgyMSw1MTgyMiw1MTgyMyw1MTgyNCw1MTgyNSw1MTgyNiw1MTgyNyw1MTgyOCw1MTgyOSw1MTgzMCw1MTgzMSw1''@;'; put 'put ''MTgzMiw1MTgzMyw1MTgzNCw1MTgzNSw1MTgzNiw1MTgzOCw1MTgzOSw1MTg0MCw1MTg0MSw1MTg0Miw1MTg0Myw1MTg0NSw1MTg0NixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MTg0Nyw1MTg0OCw1MTg0OSw1MTg1MCw1MTg1MSw1MTg1Miw1MTg1Myw1MTg1NCw1MTg1NSw1MTg1''@;'; put 'put ''Niw1MTg1Nyw1MTg1OCw1MTg1OSw1MTg2MCw1MTg2MSw1MTg2Miw1MTg2Myw1MTg2NSw1MTg2Niw1MTg2Nyw1MTg2OCw1MTg2OSw1MTg3MCw1MTg3MSw1MTg3Miw1MTg3Myw1MTg3NCw1MTg3NSw1MTg3Niw1MTg3Nyw1MTg3OCw1MTg3OSw4NTYwLDg1NjEsODU2Miw4NTYzLDg1NjQsODU2NSw4''@;'; put 'put ''NTY2LDg1NjcsODU2OCw4NTY5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw4NTQ0LDg1NDUsODU0Niw4NTQ3LDg1NDgsODU0OSw4NTUwLDg1NTEsODU1Miw4NTUzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsOTEzLDkxNCw5MTUsOTE2LDkxNyw5MTgsOTE5LDkyMCw5MjEs''@;'; put 'put ''OTIyLDkyMyw5MjQsOTI1LDkyNiw5MjcsOTI4LDkyOSw5MzEsOTMyLDkzMyw5MzQsOTM1LDkzNiw5MzcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDk0NSw5NDYsOTQ3LDk0OCw5NDksOTUwLDk1MSw5NTIsOTUzLDk1NCw5NTUsOTU2LDk1Nyw5NTgsOTU5LDk2MCw5''@;'; put 'put ''NjEsOTYzLDk2NCw5NjUsOTY2LDk2Nyw5NjgsOTY5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUxODgwLDUxODgxLDUxODgyLDUxODgzLDUxODg0LDUxODg1LDUxODg2LDUxODg3LDUxODg4LDUxODg5LDUxODkwLDUxODkxLDUxODkyLDUxODkzLDUxODk0LDUxODk1LDUxODk2LDUx''@;'; put 'put ''ODk3LDUxODk4LDUxODk5LDUxOTAyLDUxOTAzLDUxOTA1LDUxOTA2LDUxOTA3LDUxOTA5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUxOTEwLDUxOTExLDUxOTEyLDUxOTEzLDUxOTE0LDUxOTE1LDUxOTE4LDUxOTIwLDUxOTIyLDUxOTI0LDUxOTI1LDUxOTI2LDUxOTI3LDUxOTMw''@;'; put 'put ''LDUxOTMxLDUxOTMyLDUxOTMzLDUxOTM0LDUxOTM1LDUxOTM3LDUxOTM4LDUxOTM5LDUxOTQwLDUxOTQxLDUxOTQyLDUxOTQzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUxOTQ0LDUxOTQ1LDUxOTQ2LDUxOTQ3LDUxOTQ5LDUxOTUwLDUxOTUxLDUxOTUyLDUxOTUzLDUxOTU0LDUx''@;'; put 'put ''OTU1LDUxOTU3LDUxOTU4LDUxOTU5LDUxOTYwLDUxOTYxLDUxOTYyLDUxOTYzLDUxOTY0LDUxOTY1LDUxOTY2LDUxOTY3LDUxOTY4LDUxOTY5LDUxOTcwLDUxOTcxLDUxOTcyLDUxOTczLDUxOTc0LDUxOTc1LDUxOTc3LDUxOTc4LDk0NzIsOTQ3NCw5NDg0LDk0ODgsOTQ5Niw5NDkyLDk1MDAs''@;'; put 'put ''OTUxNiw5NTA4LDk1MjQsOTUzMiw5NDczLDk0NzUsOTQ4Nyw5NDkxLDk0OTksOTQ5NSw5NTA3LDk1MjMsOTUxNSw5NTMxLDk1NDcsOTUwNCw5NTE5LDk1MTIsOTUyNyw5NTM1LDk1MDEsOTUyMCw5NTA5LDk1MjgsOTUzOCw5NDkwLDk0ODksOTQ5OCw5NDk3LDk0OTQsOTQ5Myw5NDg2LDk0ODUs''@;'; put 'put ''OTUwMiw5NTAzLDk1MDUsOTUwNiw5NTEwLDk1MTEsOTUxMyw5NTE0LDk1MTcsOTUxOCw5NTIxLDk1MjIsOTUyNSw5NTI2LDk1MjksOTUzMCw5NTMzLDk1MzQsOTUzNiw5NTM3LDk1MzksOTU0MCw5NTQxLDk1NDIsOTU0Myw5NTQ0LDk1NDUsOTU0NixudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTE5NzksNTE5ODAsNTE5ODEsNTE5ODIsNTE5ODMsNTE5ODUsNTE5ODYsNTE5ODcsNTE5ODksNTE5OTAs''@;'; put 'put ''NTE5OTEsNTE5OTMsNTE5OTQsNTE5OTUsNTE5OTYsNTE5OTcsNTE5OTgsNTE5OTksNTIwMDIsNTIwMDMsNTIwMDQsNTIwMDUsNTIwMDYsNTIwMDcsNTIwMDgsNTIwMDksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTIwMTAsNTIwMTEsNTIwMTIsNTIwMTMsNTIwMTQsNTIwMTUsNTIw''@;'; put 'put ''MTYsNTIwMTcsNTIwMTgsNTIwMTksNTIwMjAsNTIwMjEsNTIwMjIsNTIwMjMsNTIwMjQsNTIwMjUsNTIwMjYsNTIwMjcsNTIwMjgsNTIwMjksNTIwMzAsNTIwMzEsNTIwMzIsNTIwMzQsNTIwMzUsNTIwMzYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTIwMzcsNTIwMzgsNTIwMzks''@;'; put 'put ''NTIwNDIsNTIwNDMsNTIwNDUsNTIwNDYsNTIwNDcsNTIwNDksNTIwNTAsNTIwNTEsNTIwNTIsNTIwNTMsNTIwNTQsNTIwNTUsNTIwNTgsNTIwNTksNTIwNjAsNTIwNjIsNTIwNjMsNTIwNjQsNTIwNjUsNTIwNjYsNTIwNjcsNTIwNjksNTIwNzAsNTIwNzEsNTIwNzIsNTIwNzMsNTIwNzQsNTIw''@;'; put 'put ''NzUsNTIwNzYsMTMyMDUsMTMyMDYsMTMyMDcsODQ2NywxMzIwOCwxMzI1MiwxMzIxOSwxMzIyMCwxMzIyMSwxMzIyMiwxMzIwOSwxMzIxMCwxMzIxMSwxMzIxMiwxMzIxMywxMzIxNCwxMzIxNSwxMzIxNiwxMzIxNywxMzIxOCwxMzI1OCwxMzE5NywxMzE5OCwxMzE5OSwxMzI2MywxMzE5Miwx''@;'; put 'put ''MzE5MywxMzI1NiwxMzIyMywxMzIyNCwxMzIzMiwxMzIzMywxMzIzNCwxMzIzNSwxMzIzNiwxMzIzNywxMzIzOCwxMzIzOSwxMzI0MCwxMzI0MSwxMzE4NCwxMzE4NSwxMzE4NiwxMzE4NywxMzE4OCwxMzI0MiwxMzI0MywxMzI0NCwxMzI0NSwxMzI0NiwxMzI0NywxMzIwMCwxMzIwMSwxMzIw''@;'; put 'put ''MiwxMzIwMywxMzIwNCw4NDg2LDEzMjQ4LDEzMjQ5LDEzMTk0LDEzMTk1LDEzMTk2LDEzMjcwLDEzMjUzLDEzMjI5LDEzMjMwLDEzMjMxLDEzMjc1LDEzMjI1LDEzMjI2LDEzMjI3LDEzMjI4LDEzMjc3LDEzMjY0LDEzMjY3LDEzMjUxLDEzMjU3LDEzMjc2LDEzMjU0LG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyMDc3LDUyMDc4LDUyMDc5LDUyMDgwLDUyMDgxLDUyMDgyLDUyMDgzLDUyMDg0LDUyMDg1LDUyMDg2LDUyMDg3LDUyMDkwLDUyMDkxLDUyMDkyLDUyMDkzLDUyMDk0LDUyMDk1LDUy''@;'; put 'put ''MDk2LDUyMDk3LDUyMDk4LDUyMDk5LDUyMTAwLDUyMTAxLDUyMTAyLDUyMTAzLDUyMTA0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyMTA1LDUyMTA2LDUyMTA3LDUyMTA4LDUyMTA5LDUyMTEwLDUyMTExLDUyMTEyLDUyMTEzLDUyMTE0LDUyMTE1LDUyMTE2LDUyMTE3LDUyMTE4''@;'; put 'put ''LDUyMTE5LDUyMTIwLDUyMTIxLDUyMTIyLDUyMTIzLDUyMTI1LDUyMTI2LDUyMTI3LDUyMTI4LDUyMTI5LDUyMTMwLDUyMTMxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyMTMyLDUyMTMzLDUyMTM0LDUyMTM1LDUyMTM2LDUyMTM3LDUyMTM4LDUyMTM5LDUyMTQwLDUyMTQxLDUy''@;'; put 'put ''MTQyLDUyMTQzLDUyMTQ0LDUyMTQ1LDUyMTQ2LDUyMTQ3LDUyMTQ4LDUyMTQ5LDUyMTUwLDUyMTUxLDUyMTUzLDUyMTU0LDUyMTU1LDUyMTU2LDUyMTU3LDUyMTU4LDUyMTU5LDUyMTYwLDUyMTYxLDUyMTYyLDUyMTYzLDUyMTY0LDE5OCwyMDgsMTcwLDI5NCxudWxsLDMwNixudWxsLDMxOSwz''@;'; put 'put ''MjEsMjE2LDMzOCwxODYsMjIyLDM1OCwzMzAsbnVsbCwxMjg5NiwxMjg5NywxMjg5OCwxMjg5OSwxMjkwMCwxMjkwMSwxMjkwMiwxMjkwMywxMjkwNCwxMjkwNSwxMjkwNiwxMjkwNywxMjkwOCwxMjkwOSwxMjkxMCwxMjkxMSwxMjkxMiwxMjkxMywxMjkxNCwxMjkxNSwxMjkxNiwxMjkxNywx''@;'; put 'put ''MjkxOCwxMjkxOSwxMjkyMCwxMjkyMSwxMjkyMiwxMjkyMyw5NDI0LDk0MjUsOTQyNiw5NDI3LDk0MjgsOTQyOSw5NDMwLDk0MzEsOTQzMiw5NDMzLDk0MzQsOTQzNSw5NDM2LDk0MzcsOTQzOCw5NDM5LDk0NDAsOTQ0MSw5NDQyLDk0NDMsOTQ0NCw5NDQ1LDk0NDYsOTQ0Nyw5NDQ4LDk0NDks''@;'; put 'put ''OTMxMiw5MzEzLDkzMTQsOTMxNSw5MzE2LDkzMTcsOTMxOCw5MzE5LDkzMjAsOTMyMSw5MzIyLDkzMjMsOTMyNCw5MzI1LDkzMjYsMTg5LDg1MzEsODUzMiwxODgsMTkwLDg1MzksODU0MCw4NTQxLDg1NDIsNTIxNjUsNTIxNjYsNTIxNjcsNTIxNjgsNTIxNjksNTIxNzAsNTIxNzEsNTIxNzIs''@;'; put 'put ''NTIxNzMsNTIxNzQsNTIxNzUsNTIxNzYsNTIxNzcsNTIxNzgsNTIxNzksNTIxODEsNTIxODIsNTIxODMsNTIxODQsNTIxODUsNTIxODYsNTIxODcsNTIxODgsNTIxODksNTIxOTAsNTIxOTEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTIxOTIsNTIxOTMsNTIxOTQsNTIxOTUsNTIx''@;'; put 'put ''OTcsNTIxOTgsNTIyMDAsNTIyMDIsNTIyMDMsNTIyMDQsNTIyMDUsNTIyMDYsNTIyMDcsNTIyMDgsNTIyMDksNTIyMTAsNTIyMTEsNTIyMTIsNTIyMTMsNTIyMTQsNTIyMTUsNTIyMTYsNTIyMTcsNTIyMTgsNTIyMTksNTIyMjAsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTIyMjEs''@;'; put 'put ''NTIyMjIsNTIyMjMsNTIyMjQsNTIyMjUsNTIyMjYsNTIyMjcsNTIyMjgsNTIyMjksNTIyMzAsNTIyMzEsNTIyMzIsNTIyMzMsNTIyMzQsNTIyMzUsNTIyMzgsNTIyMzksNTIyNDEsNTIyNDIsNTIyNDMsNTIyNDUsNTIyNDYsNTIyNDcsNTIyNDgsNTIyNDksNTIyNTAsNTIyNTEsNTIyNTQsNTIy''@;'; put 'put ''NTUsNTIyNTYsNTIyNTksNTIyNjAsMjMwLDI3MywyNDAsMjk1LDMwNSwzMDcsMzEyLDMyMCwzMjIsMjQ4LDMzOSwyMjMsMjU0LDM1OSwzMzEsMzI5LDEyODAwLDEyODAxLDEyODAyLDEyODAzLDEyODA0LDEyODA1LDEyODA2LDEyODA3LDEyODA4LDEyODA5LDEyODEwLDEyODExLDEyODEyLDEy''@;'; put 'put ''ODEzLDEyODE0LDEyODE1LDEyODE2LDEyODE3LDEyODE4LDEyODE5LDEyODIwLDEyODIxLDEyODIyLDEyODIzLDEyODI0LDEyODI1LDEyODI2LDEyODI3LDkzNzIsOTM3Myw5Mzc0LDkzNzUsOTM3Niw5Mzc3LDkzNzgsOTM3OSw5MzgwLDkzODEsOTM4Miw5MzgzLDkzODQsOTM4NSw5Mzg2LDkz''@;'; put 'put ''ODcsOTM4OCw5Mzg5LDkzOTAsOTM5MSw5MzkyLDkzOTMsOTM5NCw5Mzk1LDkzOTYsOTM5Nyw5MzMyLDkzMzMsOTMzNCw5MzM1LDkzMzYsOTMzNyw5MzM4LDkzMzksOTM0MCw5MzQxLDkzNDIsOTM0Myw5MzQ0LDkzNDUsOTM0NiwxODUsMTc4LDE3OSw4MzA4LDgzMTksODMyMSw4MzIyLDgzMjMs''@;'; put 'put ''ODMyNCw1MjI2MSw1MjI2Miw1MjI2Niw1MjI2Nyw1MjI2OSw1MjI3MSw1MjI3Myw1MjI3NCw1MjI3NSw1MjI3Niw1MjI3Nyw1MjI3OCw1MjI3OSw1MjI4Miw1MjI4Nyw1MjI4OCw1MjI4OSw1MjI5MCw1MjI5MSw1MjI5NCw1MjI5NSw1MjI5Nyw1MjI5OCw1MjI5OSw1MjMwMSw1MjMwMixudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjMwMyw1MjMwNCw1MjMwNSw1MjMwNiw1MjMwNyw1MjMxMCw1MjMxNCw1MjMxNSw1MjMxNiw1MjMxNyw1MjMxOCw1MjMxOSw1MjMyMSw1MjMyMiw1MjMyMyw1MjMyNSw1MjMyNyw1MjMyOSw1MjMzMCw1MjMzMSw1MjMzMiw1MjMzMyw1MjMzNCw1''@;'; put 'put ''MjMzNSw1MjMzNyw1MjMzOCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjMzOSw1MjM0MCw1MjM0Miw1MjM0Myw1MjM0NCw1MjM0NSw1MjM0Niw1MjM0Nyw1MjM0OCw1MjM0OSw1MjM1MCw1MjM1MSw1MjM1Miw1MjM1Myw1MjM1NCw1MjM1NSw1MjM1Niw1MjM1Nyw1MjM1OCw1MjM1''@;'; put 'put ''OSw1MjM2MCw1MjM2MSw1MjM2Miw1MjM2Myw1MjM2NCw1MjM2NSw1MjM2Niw1MjM2Nyw1MjM2OCw1MjM2OSw1MjM3MCw1MjM3MSwxMjM1MywxMjM1NCwxMjM1NSwxMjM1NiwxMjM1NywxMjM1OCwxMjM1OSwxMjM2MCwxMjM2MSwxMjM2MiwxMjM2MywxMjM2NCwxMjM2NSwxMjM2NiwxMjM2Nywx''@;'; put 'put ''MjM2OCwxMjM2OSwxMjM3MCwxMjM3MSwxMjM3MiwxMjM3MywxMjM3NCwxMjM3NSwxMjM3NiwxMjM3NywxMjM3OCwxMjM3OSwxMjM4MCwxMjM4MSwxMjM4MiwxMjM4MywxMjM4NCwxMjM4NSwxMjM4NiwxMjM4NywxMjM4OCwxMjM4OSwxMjM5MCwxMjM5MSwxMjM5MiwxMjM5MywxMjM5NCwxMjM5''@;'; put 'put ''NSwxMjM5NiwxMjM5NywxMjM5OCwxMjM5OSwxMjQwMCwxMjQwMSwxMjQwMiwxMjQwMywxMjQwNCwxMjQwNSwxMjQwNiwxMjQwNywxMjQwOCwxMjQwOSwxMjQxMCwxMjQxMSwxMjQxMiwxMjQxMywxMjQxNCwxMjQxNSwxMjQxNiwxMjQxNywxMjQxOCwxMjQxOSwxMjQyMCwxMjQyMSwxMjQyMiwx''@;'; put 'put ''MjQyMywxMjQyNCwxMjQyNSwxMjQyNiwxMjQyNywxMjQyOCwxMjQyOSwxMjQzMCwxMjQzMSwxMjQzMiwxMjQzMywxMjQzNCwxMjQzNSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTIzNzIsNTIzNzMsNTIzNzQsNTIzNzUsNTIzNzgsNTIz''@;'; put 'put ''NzksNTIzODEsNTIzODIsNTIzODMsNTIzODUsNTIzODYsNTIzODcsNTIzODgsNTIzODksNTIzOTAsNTIzOTEsNTIzOTQsNTIzOTgsNTIzOTksNTI0MDAsNTI0MDEsNTI0MDIsNTI0MDMsNTI0MDYsNTI0MDcsNTI0MDksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTI0MTAsNTI0MTEs''@;'; put 'put ''NTI0MTMsNTI0MTQsNTI0MTUsNTI0MTYsNTI0MTcsNTI0MTgsNTI0MTksNTI0MjIsNTI0MjQsNTI0MjYsNTI0MjcsNTI0MjgsNTI0MjksNTI0MzAsNTI0MzEsNTI0MzMsNTI0MzQsNTI0MzUsNTI0MzcsNTI0MzgsNTI0MzksNTI0NDAsNTI0NDEsNTI0NDIsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsNTI0NDMsNTI0NDQsNTI0NDUsNTI0NDYsNTI0NDcsNTI0NDgsNTI0NDksNTI0NTAsNTI0NTEsNTI0NTMsNTI0NTQsNTI0NTUsNTI0NTYsNTI0NTcsNTI0NTgsNTI0NTksNTI0NjEsNTI0NjIsNTI0NjMsNTI0NjUsNTI0NjYsNTI0NjcsNTI0NjgsNTI0NjksNTI0NzAsNTI0NzEs''@;'; put 'put ''NTI0NzIsNTI0NzMsNTI0NzQsNTI0NzUsNTI0NzYsNTI0NzcsMTI0NDksMTI0NTAsMTI0NTEsMTI0NTIsMTI0NTMsMTI0NTQsMTI0NTUsMTI0NTYsMTI0NTcsMTI0NTgsMTI0NTksMTI0NjAsMTI0NjEsMTI0NjIsMTI0NjMsMTI0NjQsMTI0NjUsMTI0NjYsMTI0NjcsMTI0NjgsMTI0NjksMTI0''@;'; put 'put ''NzAsMTI0NzEsMTI0NzIsMTI0NzMsMTI0NzQsMTI0NzUsMTI0NzYsMTI0NzcsMTI0NzgsMTI0NzksMTI0ODAsMTI0ODEsMTI0ODIsMTI0ODMsMTI0ODQsMTI0ODUsMTI0ODYsMTI0ODcsMTI0ODgsMTI0ODksMTI0OTAsMTI0OTEsMTI0OTIsMTI0OTMsMTI0OTQsMTI0OTUsMTI0OTYsMTI0OTcs''@;'; put 'put ''MTI0OTgsMTI0OTksMTI1MDAsMTI1MDEsMTI1MDIsMTI1MDMsMTI1MDQsMTI1MDUsMTI1MDYsMTI1MDcsMTI1MDgsMTI1MDksMTI1MTAsMTI1MTEsMTI1MTIsMTI1MTMsMTI1MTQsMTI1MTUsMTI1MTYsMTI1MTcsMTI1MTgsMTI1MTksMTI1MjAsMTI1MjEsMTI1MjIsMTI1MjMsMTI1MjQsMTI1''@;'; put 'put ''MjUsMTI1MjYsMTI1MjcsMTI1MjgsMTI1MjksMTI1MzAsMTI1MzEsMTI1MzIsMTI1MzMsMTI1MzQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyNDc4LDUyNDc5LDUyNDgwLDUyNDgyLDUyNDgzLDUyNDg0LDUyNDg1LDUyNDg2LDUyNDg3LDUyNDkwLDUyNDkxLDUy''@;'; put 'put ''NDkzLDUyNDk0LDUyNDk1LDUyNDk3LDUyNDk4LDUyNDk5LDUyNTAwLDUyNTAxLDUyNTAyLDUyNTAzLDUyNTA2LDUyNTA4LDUyNTEwLDUyNTExLDUyNTEyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyNTEzLDUyNTE0LDUyNTE1LDUyNTE3LDUyNTE4LDUyNTE5LDUyNTIxLDUyNTIy''@;'; put 'put ''LDUyNTIzLDUyNTI1LDUyNTI2LDUyNTI3LDUyNTI4LDUyNTI5LDUyNTMwLDUyNTMxLDUyNTMyLDUyNTMzLDUyNTM0LDUyNTM1LDUyNTM2LDUyNTM4LDUyNTM5LDUyNTQwLDUyNTQxLDUyNTQyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyNTQzLDUyNTQ0LDUyNTQ1LDUyNTQ2LDUy''@;'; put 'put ''NTQ3LDUyNTQ4LDUyNTQ5LDUyNTUwLDUyNTUxLDUyNTUyLDUyNTUzLDUyNTU0LDUyNTU1LDUyNTU2LDUyNTU3LDUyNTU4LDUyNTU5LDUyNTYwLDUyNTYxLDUyNTYyLDUyNTYzLDUyNTY0LDUyNTY1LDUyNTY2LDUyNTY3LDUyNTY4LDUyNTY5LDUyNTcwLDUyNTcxLDUyNTczLDUyNTc0LDUyNTc1''@;'; put 'put ''LDEwNDAsMTA0MSwxMDQyLDEwNDMsMTA0NCwxMDQ1LDEwMjUsMTA0NiwxMDQ3LDEwNDgsMTA0OSwxMDUwLDEwNTEsMTA1MiwxMDUzLDEwNTQsMTA1NSwxMDU2LDEwNTcsMTA1OCwxMDU5LDEwNjAsMTA2MSwxMDYyLDEwNjMsMTA2NCwxMDY1LDEwNjYsMTA2NywxMDY4LDEwNjksMTA3MCwxMDcx''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDEwNzIsMTA3MywxMDc0LDEwNzUsMTA3NiwxMDc3LDExMDUsMTA3OCwxMDc5LDEwODAsMTA4MSwxMDgyLDEwODMsMTA4NCwxMDg1LDEwODYsMTA4NywxMDg4''@;'; put 'put ''LDEwODksMTA5MCwxMDkxLDEwOTIsMTA5MywxMDk0LDEwOTUsMTA5NiwxMDk3LDEwOTgsMTA5OSwxMTAwLDExMDEsMTEwMiwxMTAzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTI1NzcsNTI1NzgsNTI1NzksNTI1ODEs''@;'; put 'put ''NTI1ODIsNTI1ODMsNTI1ODQsNTI1ODUsNTI1ODYsNTI1ODcsNTI1OTAsNTI1OTIsNTI1OTQsNTI1OTUsNTI1OTYsNTI1OTcsNTI1OTgsNTI1OTksNTI2MDEsNTI2MDIsNTI2MDMsNTI2MDQsNTI2MDUsNTI2MDYsNTI2MDcsNTI2MDgsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTI2''@;'; put 'put ''MDksNTI2MTAsNTI2MTEsNTI2MTIsNTI2MTMsNTI2MTQsNTI2MTUsNTI2MTcsNTI2MTgsNTI2MTksNTI2MjAsNTI2MjEsNTI2MjIsNTI2MjMsNTI2MjQsNTI2MjUsNTI2MjYsNTI2MjcsNTI2MzAsNTI2MzEsNTI2MzMsNTI2MzQsNTI2MzUsNTI2MzcsNTI2MzgsNTI2MzksbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsNTI2NDAsNTI2NDEsNTI2NDIsNTI2NDMsNTI2NDYsNTI2NDgsNTI2NTAsNTI2NTEsNTI2NTIsNTI2NTMsNTI2NTQsNTI2NTUsNTI2NTcsNTI2NTgsNTI2NTksNTI2NjAsNTI2NjEsNTI2NjIsNTI2NjMsNTI2NjQsNTI2NjUsNTI2NjYsNTI2NjcsNTI2NjgsNTI2''@;'; put 'put ''NjksNTI2NzAsNTI2NzEsNTI2NzIsNTI2NzMsNTI2NzQsNTI2NzUsNTI2NzcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCw1MjY3OCw1MjY3OSw1MjY4MCw1MjY4MSw1MjY4Miw1MjY4Myw1MjY4NSw1MjY4Niw1MjY4Nyw1MjY4OSw1MjY5MCw1MjY5MSw1MjY5Miw1MjY5Myw1MjY5NCw1MjY5NSw1MjY5Niw1MjY5Nyw1MjY5OCw1MjY5OSw1MjcwMCw1MjcwMSw1MjcwMiw1MjcwMyw1''@;'; put 'put ''MjcwNCw1MjcwNSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjcwNiw1MjcwNyw1MjcwOCw1MjcwOSw1MjcxMCw1MjcxMSw1MjcxMyw1MjcxNCw1MjcxNSw1MjcxNyw1MjcxOCw1MjcxOSw1MjcyMSw1MjcyMiw1MjcyMyw1MjcyNCw1MjcyNSw1MjcyNiw1MjcyNyw1MjczMCw1Mjcz''@;'; put 'put ''Miw1MjczNCw1MjczNSw1MjczNiw1MjczNyw1MjczOCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjczOSw1Mjc0MSw1Mjc0Miw1Mjc0Myw1Mjc0NSw1Mjc0Niw1Mjc0Nyw1Mjc0OSw1Mjc1MCw1Mjc1MSw1Mjc1Miw1Mjc1Myw1Mjc1NCw1Mjc1NSw1Mjc1Nyw1Mjc1OCw1Mjc1OSw1''@;'; put 'put ''Mjc2MCw1Mjc2Miw1Mjc2Myw1Mjc2NCw1Mjc2NSw1Mjc2Niw1Mjc2Nyw1Mjc3MCw1Mjc3MSw1Mjc3Myw1Mjc3NCw1Mjc3NSw1Mjc3Nyw1Mjc3OCw1Mjc3OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyNzgwLDUyNzgxLDUyNzgyLDUyNzgzLDUyNzg2LDUyNzg4LDUyNzkwLDUyNzkxLDUyNzkyLDUyNzkzLDUyNzk0LDUyNzk1LDUyNzk2LDUyNzk3LDUyNzk4LDUyNzk5LDUyODAw''@;'; put 'put ''LDUyODAxLDUyODAyLDUyODAzLDUyODA0LDUyODA1LDUyODA2LDUyODA3LDUyODA4LDUyODA5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyODEwLDUyODExLDUyODEyLDUyODEzLDUyODE0LDUyODE1LDUyODE2LDUyODE3LDUyODE4LDUyODE5LDUyODIwLDUyODIxLDUyODIyLDUy''@;'; put 'put ''ODIzLDUyODI2LDUyODI3LDUyODI5LDUyODMwLDUyODM0LDUyODM1LDUyODM2LDUyODM3LDUyODM4LDUyODM5LDUyODQyLDUyODQ0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyODQ2LDUyODQ3LDUyODQ4LDUyODQ5LDUyODUwLDUyODUxLDUyODU0LDUyODU1LDUyODU3LDUyODU4''@;'; put 'put ''LDUyODU5LDUyODYxLDUyODYyLDUyODYzLDUyODY0LDUyODY1LDUyODY2LDUyODY3LDUyODcwLDUyODcyLDUyODc0LDUyODc1LDUyODc2LDUyODc3LDUyODc4LDUyODc5LDUyODgyLDUyODgzLDUyODg1LDUyODg2LDUyODg3LDUyODg5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTI4OTAsNTI4OTEsNTI4OTIsNTI4OTMsNTI4OTQsNTI4OTUsNTI4OTgsNTI5MDIsNTI5MDMsNTI5''@;'; put 'put ''MDQsNTI5MDUsNTI5MDYsNTI5MDcsNTI5MTAsNTI5MTEsNTI5MTIsNTI5MTMsNTI5MTQsNTI5MTUsNTI5MTYsNTI5MTcsNTI5MTgsNTI5MTksNTI5MjAsNTI5MjEsNTI5MjIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTI5MjMsNTI5MjQsNTI5MjUsNTI5MjYsNTI5MjcsNTI5Mjgs''@;'; put 'put ''NTI5MzAsNTI5MzEsNTI5MzIsNTI5MzMsNTI5MzQsNTI5MzUsNTI5MzYsNTI5MzcsNTI5MzgsNTI5MzksNTI5NDAsNTI5NDEsNTI5NDIsNTI5NDMsNTI5NDQsNTI5NDUsNTI5NDYsNTI5NDcsNTI5NDgsNTI5NDksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTI5NTAsNTI5NTEsNTI5''@;'; put 'put ''NTIsNTI5NTMsNTI5NTQsNTI5NTUsNTI5NTYsNTI5NTcsNTI5NTgsNTI5NTksNTI5NjAsNTI5NjEsNTI5NjIsNTI5NjMsNTI5NjYsNTI5NjcsNTI5NjksNTI5NzAsNTI5NzMsNTI5NzQsNTI5NzUsNTI5NzYsNTI5NzcsNTI5NzgsNTI5NzksNTI5ODIsNTI5ODYsNTI5ODcsNTI5ODgsNTI5ODks''@;'; put 'put ''NTI5OTAsNTI5OTEsNDQwMzIsNDQwMzMsNDQwMzYsNDQwMzksNDQwNDAsNDQwNDEsNDQwNDIsNDQwNDgsNDQwNDksNDQwNTAsNDQwNTEsNDQwNTIsNDQwNTMsNDQwNTQsNDQwNTUsNDQwNTcsNDQwNTgsNDQwNTksNDQwNjAsNDQwNjEsNDQwNjQsNDQwNjgsNDQwNzYsNDQwNzcsNDQwNzksNDQw''@;'; put 'put ''ODAsNDQwODEsNDQwODgsNDQwODksNDQwOTIsNDQwOTYsNDQxMDcsNDQxMDksNDQxMTYsNDQxMjAsNDQxMjQsNDQxNDQsNDQxNDUsNDQxNDgsNDQxNTEsNDQxNTIsNDQxNTQsNDQxNjAsNDQxNjEsNDQxNjMsNDQxNjQsNDQxNjUsNDQxNjYsNDQxNjksNDQxNzAsNDQxNzEsNDQxNzIsNDQxNzYs''@;'; put 'put ''NDQxODAsNDQxODgsNDQxODksNDQxOTEsNDQxOTIsNDQxOTMsNDQyMDAsNDQyMDEsNDQyMDIsNDQyMDQsNDQyMDcsNDQyMDgsNDQyMTYsNDQyMTcsNDQyMTksNDQyMjAsNDQyMjEsNDQyMjUsNDQyMjgsNDQyMzIsNDQyMzYsNDQyNDUsNDQyNDcsNDQyNTYsNDQyNTcsNDQyNjAsNDQyNjMsNDQy''@;'; put 'put ''NjQsNDQyNjYsNDQyNjgsNDQyNzEsNDQyNzIsNDQyNzMsNDQyNzUsNDQyNzcsNDQyNzgsNDQyODQsNDQyODUsNDQyODgsNDQyOTIsNDQyOTQsNTI5OTQsNTI5OTUsNTI5OTcsNTI5OTgsNTI5OTksNTMwMDEsNTMwMDIsNTMwMDMsNTMwMDQsNTMwMDUsNTMwMDYsNTMwMDcsNTMwMTAsNTMwMTIs''@;'; put 'put ''NTMwMTQsNTMwMTUsNTMwMTYsNTMwMTcsNTMwMTgsNTMwMTksNTMwMjEsNTMwMjIsNTMwMjMsNTMwMjUsNTMwMjYsNTMwMjcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTMwMjksNTMwMzAsNTMwMzEsNTMwMzIsNTMwMzMsNTMwMzQsNTMwMzUsNTMwMzgsNTMwNDIsNTMwNDMsNTMw''@;'; put 'put ''NDQsNTMwNDUsNTMwNDYsNTMwNDcsNTMwNDksNTMwNTAsNTMwNTEsNTMwNTIsNTMwNTMsNTMwNTQsNTMwNTUsNTMwNTYsNTMwNTcsNTMwNTgsNTMwNTksNTMwNjAsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTMwNjEsNTMwNjIsNTMwNjMsNTMwNjQsNTMwNjUsNTMwNjYsNTMwNjcs''@;'; put 'put ''NTMwNjgsNTMwNjksNTMwNzAsNTMwNzEsNTMwNzIsNTMwNzMsNTMwNzQsNTMwNzUsNTMwNzgsNTMwNzksNTMwODEsNTMwODIsNTMwODMsNTMwODUsNTMwODYsNTMwODcsNTMwODgsNTMwODksNTMwOTAsNTMwOTEsNTMwOTQsNTMwOTYsNTMwOTgsNTMwOTksNTMxMDAsNDQzMDAsNDQzMDEsNDQz''@;'; put 'put ''MDMsNDQzMDUsNDQzMTIsNDQzMTYsNDQzMjAsNDQzMjksNDQzMzIsNDQzMzMsNDQzNDAsNDQzNDEsNDQzNDQsNDQzNDgsNDQzNTYsNDQzNTcsNDQzNTksNDQzNjEsNDQzNjgsNDQzNzIsNDQzNzYsNDQzODUsNDQzODcsNDQzOTYsNDQzOTcsNDQ0MDAsNDQ0MDMsNDQ0MDQsNDQ0MDUsNDQ0MDYs''@;'; put 'put ''NDQ0MTEsNDQ0MTIsNDQ0MTMsNDQ0MTUsNDQ0MTcsNDQ0MTgsNDQ0MjQsNDQ0MjUsNDQ0MjgsNDQ0MzIsNDQ0NDQsNDQ0NDUsNDQ0NTIsNDQ0NzEsNDQ0ODAsNDQ0ODEsNDQ0ODQsNDQ0ODgsNDQ0OTYsNDQ0OTcsNDQ0OTksNDQ1MDgsNDQ1MTIsNDQ1MTYsNDQ1MzYsNDQ1MzcsNDQ1NDAsNDQ1''@;'; put 'put ''NDMsNDQ1NDQsNDQ1NDUsNDQ1NTIsNDQ1NTMsNDQ1NTUsNDQ1NTcsNDQ1NjQsNDQ1OTIsNDQ1OTMsNDQ1OTYsNDQ1OTksNDQ2MDAsNDQ2MDIsNDQ2MDgsNDQ2MDksNDQ2MTEsNDQ2MTMsNDQ2MTQsNDQ2MTgsNDQ2MjAsNDQ2MjEsNDQ2MjIsNDQ2MjQsNDQ2MjgsNDQ2MzAsNDQ2MzYsNDQ2Mzcs''@;'; put 'put ''NDQ2MzksNDQ2NDAsNDQ2NDEsNDQ2NDUsNDQ2NDgsNDQ2NDksNDQ2NTIsNDQ2NTYsNDQ2NjQsNTMxMDEsNTMxMDIsNTMxMDMsNTMxMDYsNTMxMDcsNTMxMDksNTMxMTAsNTMxMTEsNTMxMTMsNTMxMTQsNTMxMTUsNTMxMTYsNTMxMTcsNTMxMTgsNTMxMTksNTMxMjEsNTMxMjIsNTMxMjMsNTMx''@;'; put 'put ''MjQsNTMxMjYsNTMxMjcsNTMxMjgsNTMxMjksNTMxMzAsNTMxMzEsNTMxMzMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTMxMzQsNTMxMzUsNTMxMzYsNTMxMzcsNTMxMzgsNTMxMzksNTMxNDAsNTMxNDEsNTMxNDIsNTMxNDMsNTMxNDQsNTMxNDUsNTMxNDYsNTMxNDcsNTMxNDgs''@;'; put 'put ''NTMxNDksNTMxNTAsNTMxNTEsNTMxNTIsNTMxNTQsNTMxNTUsNTMxNTYsNTMxNTcsNTMxNTgsNTMxNTksNTMxNjEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTMxNjIsNTMxNjMsNTMxNjQsNTMxNjUsNTMxNjYsNTMxNjcsNTMxNjksNTMxNzAsNTMxNzEsNTMxNzIsNTMxNzMsNTMx''@;'; put 'put ''NzQsNTMxNzUsNTMxNzYsNTMxNzcsNTMxNzgsNTMxNzksNTMxODAsNTMxODEsNTMxODIsNTMxODMsNTMxODQsNTMxODUsNTMxODYsNTMxODcsNTMxODksNTMxOTAsNTMxOTEsNTMxOTIsNTMxOTMsNTMxOTQsNTMxOTUsNDQ2NjUsNDQ2NjcsNDQ2NjgsNDQ2NjksNDQ2NzYsNDQ2NzcsNDQ2ODQs''@;'; put 'put ''NDQ3MzIsNDQ3MzMsNDQ3MzQsNDQ3MzYsNDQ3NDAsNDQ3NDgsNDQ3NDksNDQ3NTEsNDQ3NTIsNDQ3NTMsNDQ3NjAsNDQ3NjEsNDQ3NjQsNDQ3NzYsNDQ3NzksNDQ3ODEsNDQ3ODgsNDQ3OTIsNDQ3OTYsNDQ4MDcsNDQ4MDgsNDQ4MTMsNDQ4MTYsNDQ4NDQsNDQ4NDUsNDQ4NDgsNDQ4NTAsNDQ4''@;'; put 'put ''NTIsNDQ4NjAsNDQ4NjEsNDQ4NjMsNDQ4NjUsNDQ4NjYsNDQ4NjcsNDQ4NzIsNDQ4NzMsNDQ4ODAsNDQ4OTIsNDQ4OTMsNDQ5MDAsNDQ5MDEsNDQ5MjEsNDQ5MjgsNDQ5MzIsNDQ5MzYsNDQ5NDQsNDQ5NDUsNDQ5NDksNDQ5NTYsNDQ5ODQsNDQ5ODUsNDQ5ODgsNDQ5OTIsNDQ5OTksNDVlMyw0''@;'; put 'put ''NTAwMSw0NTAwMyw0NTAwNSw0NTAwNiw0NTAxMiw0NTAyMCw0NTAzMiw0NTAzMyw0NTA0MCw0NTA0MSw0NTA0NCw0NTA0OCw0NTA1Niw0NTA1Nyw0NTA2MCw0NTA2OCw0NTA3Miw0NTA3Niw0NTA4NCw0NTA4NSw0NTA5Niw0NTEyNCw0NTEyNSw0NTEyOCw0NTEzMCw0NTEzMiw0NTEzNCw0NTEz''@;'; put 'put ''OSw0NTE0MCw0NTE0MSw0NTE0Myw0NTE0NSw1MzE5Niw1MzE5Nyw1MzE5OCw1MzE5OSw1MzIwMCw1MzIwMSw1MzIwMiw1MzIwMyw1MzIwNCw1MzIwNSw1MzIwNiw1MzIwNyw1MzIwOCw1MzIwOSw1MzIxMCw1MzIxMSw1MzIxMiw1MzIxMyw1MzIxNCw1MzIxNSw1MzIxOCw1MzIxOSw1MzIyMSw1''@;'; put 'put ''MzIyMiw1MzIyMyw1MzIyNSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MzIyNiw1MzIyNyw1MzIyOCw1MzIyOSw1MzIzMCw1MzIzMSw1MzIzNCw1MzIzNiw1MzIzOCw1MzIzOSw1MzI0MCw1MzI0MSw1MzI0Miw1MzI0Myw1MzI0NSw1MzI0Niw1MzI0Nyw1MzI0OSw1MzI1MCw1MzI1''@;'; put 'put ''MSw1MzI1Myw1MzI1NCw1MzI1NSw1MzI1Niw1MzI1Nyw1MzI1OCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MzI1OSw1MzI2MCw1MzI2MSw1MzI2Miw1MzI2Myw1MzI2NCw1MzI2Niw1MzI2Nyw1MzI2OCw1MzI2OSw1MzI3MCw1MzI3MSw1MzI3Myw1MzI3NCw1MzI3NSw1MzI3Niw1''@;'; put 'put ''MzI3Nyw1MzI3OCw1MzI3OSw1MzI4MCw1MzI4MSw1MzI4Miw1MzI4Myw1MzI4NCw1MzI4NSw1MzI4Niw1MzI4Nyw1MzI4OCw1MzI4OSw1MzI5MCw1MzI5MSw1MzI5Miw0NTE0OSw0NTE4MCw0NTE4MSw0NTE4NCw0NTE4OCw0NTE5Niw0NTE5Nyw0NTE5OSw0NTIwMSw0NTIwOCw0NTIwOSw0NTIx''@;'; put 'put ''MCw0NTIxMiw0NTIxNSw0NTIxNiw0NTIxNyw0NTIxOCw0NTIyNCw0NTIyNSw0NTIyNyw0NTIyOCw0NTIyOSw0NTIzMCw0NTIzMSw0NTIzMyw0NTIzNSw0NTIzNiw0NTIzNyw0NTI0MCw0NTI0NCw0NTI1Miw0NTI1Myw0NTI1NSw0NTI1Niw0NTI1Nyw0NTI2NCw0NTI2NSw0NTI2OCw0NTI3Miw0''@;'; put 'put ''NTI4MCw0NTI4NSw0NTMyMCw0NTMyMSw0NTMyMyw0NTMyNCw0NTMyOCw0NTMzMCw0NTMzMSw0NTMzNiw0NTMzNyw0NTMzOSw0NTM0MCw0NTM0MSw0NTM0Nyw0NTM0OCw0NTM0OSw0NTM1Miw0NTM1Niw0NTM2NCw0NTM2NSw0NTM2Nyw0NTM2OCw0NTM2OSw0NTM3Niw0NTM3Nyw0NTM4MCw0NTM4''@;'; put 'put ''NCw0NTM5Miw0NTM5Myw0NTM5Niw0NTM5Nyw0NTQwMCw0NTQwNCw0NTQwOCw0NTQzMiw0NTQzMyw0NTQzNiw0NTQ0MCw0NTQ0Miw0NTQ0OCw0NTQ0OSw0NTQ1MSw0NTQ1Myw0NTQ1OCw0NTQ1OSw0NTQ2MCw0NTQ2NCw0NTQ2OCw0NTQ4MCw0NTUxNiw0NTUyMCw0NTUyNCw0NTUzMiw0NTUzMyw1''@;'; put 'put ''MzI5NCw1MzI5NSw1MzI5Niw1MzI5Nyw1MzI5OCw1MzI5OSw1MzMwMiw1MzMwMyw1MzMwNSw1MzMwNiw1MzMwNyw1MzMwOSw1MzMxMCw1MzMxMSw1MzMxMiw1MzMxMyw1MzMxNCw1MzMxNSw1MzMxOCw1MzMyMCw1MzMyMiw1MzMyMyw1MzMyNCw1MzMyNSw1MzMyNiw1MzMyNyxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCw1MzMyOSw1MzMzMCw1MzMzMSw1MzMzMyw1MzMzNCw1MzMzNSw1MzMzNyw1MzMzOCw1MzMzOSw1MzM0MCw1MzM0MSw1MzM0Miw1MzM0Myw1MzM0NSw1MzM0Niw1MzM0Nyw1MzM0OCw1MzM0OSw1MzM1MCw1MzM1MSw1MzM1Miw1MzM1Myw1MzM1NCw1MzM1NSw1''@;'; put 'put ''MzM1OCw1MzM1OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MzM2MSw1MzM2Miw1MzM2Myw1MzM2NSw1MzM2Niw1MzM2Nyw1MzM2OCw1MzM2OSw1MzM3MCw1MzM3MSw1MzM3NCw1MzM3NSw1MzM3Niw1MzM3OCw1MzM3OSw1MzM4MCw1MzM4MSw1MzM4Miw1MzM4Myw1MzM4NCw1MzM4''@;'; put 'put ''NSw1MzM4Niw1MzM4Nyw1MzM4OCw1MzM4OSw1MzM5MCw1MzM5MSw1MzM5Miw1MzM5Myw1MzM5NCw1MzM5NSw1MzM5Niw0NTUzNSw0NTU0NCw0NTU0NSw0NTU0OCw0NTU1Miw0NTU2MSw0NTU2Myw0NTU2NSw0NTU3Miw0NTU3Myw0NTU3Niw0NTU3OSw0NTU4MCw0NTU4OCw0NTU4OSw0NTU5MSw0''@;'; put 'put ''NTU5Myw0NTYwMCw0NTYyMCw0NTYyOCw0NTY1Niw0NTY2MCw0NTY2NCw0NTY3Miw0NTY3Myw0NTY4NCw0NTY4NSw0NTY5Miw0NTcwMCw0NTcwMSw0NTcwNSw0NTcxMiw0NTcxMyw0NTcxNiw0NTcyMCw0NTcyMSw0NTcyMiw0NTcyOCw0NTcyOSw0NTczMSw0NTczMyw0NTczNCw0NTczOCw0NTc0''@;'; put 'put ''MCw0NTc0NCw0NTc0OCw0NTc2OCw0NTc2OSw0NTc3Miw0NTc3Niw0NTc3OCw0NTc4NCw0NTc4NSw0NTc4Nyw0NTc4OSw0NTc5NCw0NTc5Niw0NTc5Nyw0NTc5OCw0NTgwMCw0NTgwMyw0NTgwNCw0NTgwNSw0NTgwNiw0NTgwNyw0NTgxMSw0NTgxMiw0NTgxMyw0NTgxNSw0NTgxNiw0NTgxNyw0''@;'; put 'put ''NTgxOCw0NTgxOSw0NTgyMyw0NTgyNCw0NTgyNSw0NTgyOCw0NTgzMiw0NTg0MCw0NTg0MSw0NTg0Myw0NTg0NCw0NTg0NSw0NTg1Miw0NTkwOCw0NTkwOSw0NTkxMCw0NTkxMiw0NTkxNSw0NTkxNiw0NTkxOCw0NTkxOSw0NTkyNCw0NTkyNSw1MzM5Nyw1MzM5OCw1MzM5OSw1MzQwMCw1MzQw''@;'; put 'put ''MSw1MzQwMiw1MzQwMyw1MzQwNCw1MzQwNSw1MzQwNiw1MzQwNyw1MzQwOCw1MzQwOSw1MzQxMCw1MzQxMSw1MzQxNCw1MzQxNSw1MzQxNyw1MzQxOCw1MzQxOSw1MzQyMSw1MzQyMiw1MzQyMyw1MzQyNCw1MzQyNSw1MzQyNixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MzQyNyw1''@;'; put 'put ''MzQzMCw1MzQzMiw1MzQzNCw1MzQzNSw1MzQzNiw1MzQzNyw1MzQzOCw1MzQzOSw1MzQ0Miw1MzQ0Myw1MzQ0NSw1MzQ0Niw1MzQ0Nyw1MzQ1MCw1MzQ1MSw1MzQ1Miw1MzQ1Myw1MzQ1NCw1MzQ1NSw1MzQ1OCw1MzQ2Miw1MzQ2Myw1MzQ2NCw1MzQ2NSw1MzQ2NixudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCw1MzQ2Nyw1MzQ3MCw1MzQ3MSw1MzQ3Myw1MzQ3NCw1MzQ3NSw1MzQ3Nyw1MzQ3OCw1MzQ3OSw1MzQ4MCw1MzQ4MSw1MzQ4Miw1MzQ4Myw1MzQ4Niw1MzQ5MCw1MzQ5MSw1MzQ5Miw1MzQ5Myw1MzQ5NCw1MzQ5NSw1MzQ5Nyw1MzQ5OCw1MzQ5OSw1MzUwMCw1MzUwMSw1''@;'; put 'put ''MzUwMiw1MzUwMyw1MzUwNCw1MzUwNSw1MzUwNiw1MzUwNyw1MzUwOCw0NTkyNyw0NTkyOSw0NTkzMSw0NTkzNCw0NTkzNiw0NTkzNyw0NTk0MCw0NTk0NCw0NTk1Miw0NTk1Myw0NTk1NSw0NTk1Niw0NTk1Nyw0NTk2NCw0NTk2OCw0NTk3Miw0NTk4NCw0NTk4NSw0NTk5Miw0NTk5Niw0NjAy''@;'; put 'put ''MCw0NjAyMSw0NjAyNCw0NjAyNyw0NjAyOCw0NjAzMCw0NjAzMiw0NjAzNiw0NjAzNyw0NjAzOSw0NjA0MSw0NjA0Myw0NjA0NSw0NjA0OCw0NjA1Miw0NjA1Niw0NjA3Niw0NjA5Niw0NjEwNCw0NjEwOCw0NjExMiw0NjEyMCw0NjEyMSw0NjEyMyw0NjEzMiw0NjE2MCw0NjE2MSw0NjE2NCw0''@;'; put 'put ''NjE2OCw0NjE3Niw0NjE3Nyw0NjE3OSw0NjE4MSw0NjE4OCw0NjIwOCw0NjIxNiw0NjIzNyw0NjI0NCw0NjI0OCw0NjI1Miw0NjI2MSw0NjI2Myw0NjI2NSw0NjI3Miw0NjI3Niw0NjI4MCw0NjI4OCw0NjI5Myw0NjMwMCw0NjMwMSw0NjMwNCw0NjMwNyw0NjMwOCw0NjMxMCw0NjMxNiw0NjMx''@;'; put 'put ''Nyw0NjMxOSw0NjMyMSw0NjMyOCw0NjM1Niw0NjM1Nyw0NjM2MCw0NjM2Myw0NjM2NCw0NjM3Miw0NjM3Myw0NjM3NSw0NjM3Niw0NjM3Nyw0NjM3OCw0NjM4NCw0NjM4NSw0NjM4OCw0NjM5Miw1MzUwOSw1MzUxMCw1MzUxMSw1MzUxMiw1MzUxMyw1MzUxNCw1MzUxNSw1MzUxNiw1MzUxOCw1''@;'; put 'put ''MzUxOSw1MzUyMCw1MzUyMSw1MzUyMiw1MzUyMyw1MzUyNCw1MzUyNSw1MzUyNiw1MzUyNyw1MzUyOCw1MzUyOSw1MzUzMCw1MzUzMSw1MzUzMiw1MzUzMyw1MzUzNCw1MzUzNSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MzUzNiw1MzUzNyw1MzUzOCw1MzUzOSw1MzU0MCw1MzU0''@;'; put 'put ''MSw1MzU0Miw1MzU0Myw1MzU0NCw1MzU0NSw1MzU0Niw1MzU0Nyw1MzU0OCw1MzU0OSw1MzU1MCw1MzU1MSw1MzU1NCw1MzU1NSw1MzU1Nyw1MzU1OCw1MzU1OSw1MzU2MSw1MzU2Myw1MzU2NCw1MzU2NSw1MzU2NixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MzU2Nyw1MzU3MCw1''@;'; put 'put ''MzU3NCw1MzU3NSw1MzU3Niw1MzU3Nyw1MzU3OCw1MzU3OSw1MzU4Miw1MzU4Myw1MzU4NSw1MzU4Niw1MzU4Nyw1MzU4OSw1MzU5MCw1MzU5MSw1MzU5Miw1MzU5Myw1MzU5NCw1MzU5NSw1MzU5OCw1MzYwMCw1MzYwMiw1MzYwMyw1MzYwNCw1MzYwNSw1MzYwNiw1MzYwNyw1MzYwOSw1MzYx''@;'; put 'put ''MCw1MzYxMSw1MzYxMyw0NjQwMCw0NjQwMSw0NjQwMyw0NjQwNCw0NjQwNSw0NjQxMSw0NjQxMiw0NjQxMyw0NjQxNiw0NjQyMCw0NjQyOCw0NjQyOSw0NjQzMSw0NjQzMiw0NjQzMyw0NjQ5Niw0NjQ5Nyw0NjUwMCw0NjUwNCw0NjUwNiw0NjUwNyw0NjUxMiw0NjUxMyw0NjUxNSw0NjUxNiw0''@;'; put 'put ''NjUxNyw0NjUyMyw0NjUyNCw0NjUyNSw0NjUyOCw0NjUzMiw0NjU0MCw0NjU0MSw0NjU0Myw0NjU0NCw0NjU0NSw0NjU1Miw0NjU3Miw0NjYwOCw0NjYwOSw0NjYxMiw0NjYxNiw0NjYyOSw0NjYzNiw0NjY0NCw0NjY2NCw0NjY5Miw0NjY5Niw0Njc0OCw0Njc0OSw0Njc1Miw0Njc1Niw0Njc2''@;'; put 'put ''Myw0Njc2NCw0Njc2OSw0NjgwNCw0NjgzMiw0NjgzNiw0Njg0MCw0Njg0OCw0Njg0OSw0Njg1Myw0Njg4OCw0Njg4OSw0Njg5Miw0Njg5NSw0Njg5Niw0NjkwNCw0NjkwNSw0NjkwNyw0NjkxNiw0NjkyMCw0NjkyNCw0NjkzMiw0NjkzMyw0Njk0NCw0Njk0OCw0Njk1Miw0Njk2MCw0Njk2MSw0''@;'; put 'put ''Njk2Myw0Njk2NSw0Njk3Miw0Njk3Myw0Njk3Niw0Njk4MCw0Njk4OCw0Njk4OSw0Njk5MSw0Njk5Miw0Njk5Myw0Njk5NCw0Njk5OCw0Njk5OSw1MzYxNCw1MzYxNSw1MzYxNiw1MzYxNyw1MzYxOCw1MzYxOSw1MzYyMCw1MzYyMSw1MzYyMiw1MzYyMyw1MzYyNCw1MzYyNSw1MzYyNiw1MzYy''@;'; put 'put ''Nyw1MzYyOSw1MzYzMCw1MzYzMSw1MzYzMiw1MzYzMyw1MzYzNCw1MzYzNSw1MzYzNyw1MzYzOCw1MzYzOSw1MzY0MSw1MzY0MixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MzY0Myw1MzY0NCw1MzY0NSw1MzY0Niw1MzY0Nyw1MzY0OCw1MzY0OSw1MzY1MCw1MzY1MSw1MzY1Miw1''@;'; put 'put ''MzY1Myw1MzY1NCw1MzY1NSw1MzY1Niw1MzY1Nyw1MzY1OCw1MzY1OSw1MzY2MCw1MzY2MSw1MzY2Miw1MzY2Myw1MzY2Niw1MzY2Nyw1MzY2OSw1MzY3MCw1MzY3MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MzY3Myw1MzY3NCw1MzY3NSw1MzY3Niw1MzY3Nyw1MzY3OCw1MzY3''@;'; put 'put ''OSw1MzY4Miw1MzY4NCw1MzY4Niw1MzY4Nyw1MzY4OCw1MzY4OSw1MzY5MSw1MzY5Myw1MzY5NCw1MzY5NSw1MzY5Nyw1MzY5OCw1MzY5OSw1MzcwMCw1MzcwMSw1MzcwMiw1MzcwMyw1MzcwNCw1MzcwNSw1MzcwNiw1MzcwNyw1MzcwOCw1MzcwOSw1MzcxMCw1MzcxMSw0N2UzLDQ3MDAxLDQ3''@;'; put 'put ''MDA0LDQ3MDA4LDQ3MDE2LDQ3MDE3LDQ3MDE5LDQ3MDIwLDQ3MDIxLDQ3MDI4LDQ3MDI5LDQ3MDMyLDQ3MDQ3LDQ3MDQ5LDQ3MDg0LDQ3MDg1LDQ3MDg4LDQ3MDkyLDQ3MTAwLDQ3MTAxLDQ3MTAzLDQ3MTA0LDQ3MTA1LDQ3MTExLDQ3MTEyLDQ3MTEzLDQ3MTE2LDQ3MTIwLDQ3MTI4LDQ3MTI5''@;'; put 'put ''LDQ3MTMxLDQ3MTMzLDQ3MTQwLDQ3MTQxLDQ3MTQ0LDQ3MTQ4LDQ3MTU2LDQ3MTU3LDQ3MTU5LDQ3MTYwLDQ3MTYxLDQ3MTY4LDQ3MTcyLDQ3MTg1LDQ3MTg3LDQ3MTk2LDQ3MTk3LDQ3MjAwLDQ3MjA0LDQ3MjEyLDQ3MjEzLDQ3MjE1LDQ3MjE3LDQ3MjI0LDQ3MjI4LDQ3MjQ1LDQ3MjcyLDQ3''@;'; put 'put ''MjgwLDQ3Mjg0LDQ3Mjg4LDQ3Mjk2LDQ3Mjk3LDQ3Mjk5LDQ3MzAxLDQ3MzA4LDQ3MzEyLDQ3MzE2LDQ3MzI1LDQ3MzI3LDQ3MzI5LDQ3MzM2LDQ3MzM3LDQ3MzQwLDQ3MzQ0LDQ3MzUyLDQ3MzUzLDQ3MzU1LDQ3MzU3LDQ3MzY0LDQ3Mzg0LDQ3MzkyLDQ3NDIwLDQ3NDIxLDQ3NDI0LDQ3NDI4''@;'; put 'put ''LDQ3NDM2LDQ3NDM5LDQ3NDQxLDQ3NDQ4LDQ3NDQ5LDQ3NDUyLDQ3NDU2LDQ3NDY0LDQ3NDY1LDUzNzEyLDUzNzEzLDUzNzE0LDUzNzE1LDUzNzE2LDUzNzE3LDUzNzE4LDUzNzE5LDUzNzIxLDUzNzIyLDUzNzIzLDUzNzI0LDUzNzI1LDUzNzI2LDUzNzI3LDUzNzI4LDUzNzI5LDUzNzMwLDUz''@;'; put 'put ''NzMxLDUzNzMyLDUzNzMzLDUzNzM0LDUzNzM1LDUzNzM2LDUzNzM3LDUzNzM4LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUzNzM5LDUzNzQwLDUzNzQxLDUzNzQyLDUzNzQzLDUzNzQ0LDUzNzQ1LDUzNzQ2LDUzNzQ3LDUzNzQ5LDUzNzUwLDUzNzUxLDUzNzUzLDUzNzU0LDUzNzU1''@;'; put 'put ''LDUzNzU2LDUzNzU3LDUzNzU4LDUzNzU5LDUzNzYwLDUzNzYxLDUzNzYyLDUzNzYzLDUzNzY0LDUzNzY1LDUzNzY2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUzNzY4LDUzNzcwLDUzNzcxLDUzNzcyLDUzNzczLDUzNzc0LDUzNzc1LDUzNzc3LDUzNzc4LDUzNzc5LDUzNzgwLDUz''@;'; put 'put ''NzgxLDUzNzgyLDUzNzgzLDUzNzg0LDUzNzg1LDUzNzg2LDUzNzg3LDUzNzg4LDUzNzg5LDUzNzkwLDUzNzkxLDUzNzkyLDUzNzkzLDUzNzk0LDUzNzk1LDUzNzk2LDUzNzk3LDUzNzk4LDUzNzk5LDUzODAwLDUzODAxLDQ3NDY3LDQ3NDY5LDQ3NDc2LDQ3NDc3LDQ3NDgwLDQ3NDg0LDQ3NDky''@;'; put 'put ''LDQ3NDkzLDQ3NDk1LDQ3NDk3LDQ3NDk4LDQ3NTAxLDQ3NTAyLDQ3NTMyLDQ3NTMzLDQ3NTM2LDQ3NTQwLDQ3NTQ4LDQ3NTQ5LDQ3NTUxLDQ3NTUzLDQ3NTYwLDQ3NTYxLDQ3NTY0LDQ3NTY2LDQ3NTY3LDQ3NTY4LDQ3NTY5LDQ3NTcwLDQ3NTc2LDQ3NTc3LDQ3NTc5LDQ3NTgxLDQ3NTgyLDQ3''@;'; put 'put ''NTg1LDQ3NTg3LDQ3NTg4LDQ3NTg5LDQ3NTkyLDQ3NTk2LDQ3NjA0LDQ3NjA1LDQ3NjA3LDQ3NjA4LDQ3NjA5LDQ3NjEwLDQ3NjE2LDQ3NjE3LDQ3NjI0LDQ3NjM3LDQ3NjcyLDQ3NjczLDQ3Njc2LDQ3NjgwLDQ3NjgyLDQ3Njg4LDQ3Njg5LDQ3NjkxLDQ3NjkzLDQ3Njk0LDQ3Njk5LDQ3NzAw''@;'; put 'put ''LDQ3NzAxLDQ3NzA0LDQ3NzA4LDQ3NzE2LDQ3NzE3LDQ3NzE5LDQ3NzIwLDQ3NzIxLDQ3NzI4LDQ3NzI5LDQ3NzMyLDQ3NzM2LDQ3NzQ3LDQ3NzQ4LDQ3NzQ5LDQ3NzUxLDQ3NzU2LDQ3Nzg0LDQ3Nzg1LDQ3Nzg3LDQ3Nzg4LDQ3NzkyLDQ3Nzk0LDQ3ODAwLDQ3ODAxLDQ3ODAzLDQ3ODA1LDQ3''@;'; put 'put ''ODEyLDQ3ODE2LDQ3ODMyLDQ3ODMzLDQ3ODY4LDUzODAyLDUzODAzLDUzODA2LDUzODA3LDUzODA5LDUzODEwLDUzODExLDUzODEzLDUzODE0LDUzODE1LDUzODE2LDUzODE3LDUzODE4LDUzODE5LDUzODIyLDUzODI0LDUzODI2LDUzODI3LDUzODI4LDUzODI5LDUzODMwLDUzODMxLDUzODMz''@;'; put 'put ''LDUzODM0LDUzODM1LDUzODM2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUzODM3LDUzODM4LDUzODM5LDUzODQwLDUzODQxLDUzODQyLDUzODQzLDUzODQ0LDUzODQ1LDUzODQ2LDUzODQ3LDUzODQ4LDUzODQ5LDUzODUwLDUzODUxLDUzODUzLDUzODU0LDUzODU1LDUzODU2LDUz''@;'; put 'put ''ODU3LDUzODU4LDUzODU5LDUzODYxLDUzODYyLDUzODYzLDUzODY0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUzODY1LDUzODY2LDUzODY3LDUzODY4LDUzODY5LDUzODcwLDUzODcxLDUzODcyLDUzODczLDUzODc0LDUzODc1LDUzODc2LDUzODc3LDUzODc4LDUzODc5LDUzODgw''@;'; put 'put ''LDUzODgxLDUzODgyLDUzODgzLDUzODg0LDUzODg1LDUzODg2LDUzODg3LDUzODkwLDUzODkxLDUzODkzLDUzODk0LDUzODk1LDUzODk3LDUzODk4LDUzODk5LDUzOTAwLDQ3ODcyLDQ3ODc2LDQ3ODg1LDQ3ODg3LDQ3ODg5LDQ3ODk2LDQ3OTAwLDQ3OTA0LDQ3OTEzLDQ3OTE1LDQ3OTI0LDQ3''@;'; put 'put ''OTI1LDQ3OTI2LDQ3OTI4LDQ3OTMxLDQ3OTMyLDQ3OTMzLDQ3OTM0LDQ3OTQwLDQ3OTQxLDQ3OTQzLDQ3OTQ1LDQ3OTQ5LDQ3OTUxLDQ3OTUyLDQ3OTU2LDQ3OTYwLDQ3OTY5LDQ3OTcxLDQ3OTgwLDQ4MDA4LDQ4MDEyLDQ4MDE2LDQ4MDM2LDQ4MDQwLDQ4MDQ0LDQ4MDUyLDQ4MDU1LDQ4MDY0''@;'; put 'put ''LDQ4MDY4LDQ4MDcyLDQ4MDgwLDQ4MDgzLDQ4MTIwLDQ4MTIxLDQ4MTI0LDQ4MTI3LDQ4MTI4LDQ4MTMwLDQ4MTM2LDQ4MTM3LDQ4MTM5LDQ4MTQwLDQ4MTQxLDQ4MTQzLDQ4MTQ1LDQ4MTQ4LDQ4MTQ5LDQ4MTUwLDQ4MTUxLDQ4MTUyLDQ4MTU1LDQ4MTU2LDQ4MTU3LDQ4MTU4LDQ4MTU5LDQ4''@;'; put 'put ''MTY0LDQ4MTY1LDQ4MTY3LDQ4MTY5LDQ4MTczLDQ4MTc2LDQ4MTc3LDQ4MTgwLDQ4MTg0LDQ4MTkyLDQ4MTkzLDQ4MTk1LDQ4MTk2LDQ4MTk3LDQ4MjAxLDQ4MjA0LDQ4MjA1LDQ4MjA4LDQ4MjIxLDQ4MjYwLDQ4MjYxLDQ4MjY0LDQ4MjY3LDQ4MjY4LDQ4MjcwLDQ4Mjc2LDQ4Mjc3LDQ4Mjc5''@;'; put 'put ''LDUzOTAxLDUzOTAyLDUzOTAzLDUzOTA2LDUzOTA3LDUzOTA4LDUzOTEwLDUzOTExLDUzOTEyLDUzOTEzLDUzOTE0LDUzOTE1LDUzOTE3LDUzOTE4LDUzOTE5LDUzOTIxLDUzOTIyLDUzOTIzLDUzOTI1LDUzOTI2LDUzOTI3LDUzOTI4LDUzOTI5LDUzOTMwLDUzOTMxLDUzOTMzLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLDUzOTM0LDUzOTM1LDUzOTM2LDUzOTM4LDUzOTM5LDUzOTQwLDUzOTQxLDUzOTQyLDUzOTQzLDUzOTQ2LDUzOTQ3LDUzOTQ5LDUzOTUwLDUzOTUzLDUzOTU1LDUzOTU2LDUzOTU3LDUzOTU4LDUzOTU5LDUzOTYyLDUzOTY0LDUzOTY1LDUzOTY2LDUzOTY3''@;'; put 'put ''LDUzOTY4LDUzOTY5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUzOTcwLDUzOTcxLDUzOTczLDUzOTc0LDUzOTc1LDUzOTc3LDUzOTc4LDUzOTc5LDUzOTgxLDUzOTgyLDUzOTgzLDUzOTg0LDUzOTg1LDUzOTg2LDUzOTg3LDUzOTkwLDUzOTkxLDUzOTkyLDUzOTkzLDUzOTk0LDUz''@;'; put 'put ''OTk1LDUzOTk2LDUzOTk3LDUzOTk4LDUzOTk5LDU0MDAyLDU0MDAzLDU0MDA1LDU0MDA2LDU0MDA3LDU0MDA5LDU0MDEwLDQ4MjgxLDQ4MjgyLDQ4Mjg4LDQ4Mjg5LDQ4MjkyLDQ4Mjk1LDQ4Mjk2LDQ4MzA0LDQ4MzA1LDQ4MzA3LDQ4MzA4LDQ4MzA5LDQ4MzE2LDQ4MzE3LDQ4MzIwLDQ4MzI0''@;'; put 'put ''LDQ4MzMzLDQ4MzM1LDQ4MzM2LDQ4MzM3LDQ4MzQxLDQ4MzQ0LDQ4MzQ4LDQ4MzcyLDQ4MzczLDQ4Mzc0LDQ4Mzc2LDQ4MzgwLDQ4Mzg4LDQ4Mzg5LDQ4MzkxLDQ4MzkzLDQ4NDAwLDQ4NDA0LDQ4NDIwLDQ4NDI4LDQ4NDQ4LDQ4NDU2LDQ4NDU3LDQ4NDYwLDQ4NDY0LDQ4NDcyLDQ4NDczLDQ4''@;'; put 'put ''NDg0LDQ4NDg4LDQ4NTEyLDQ4NTEzLDQ4NTE2LDQ4NTE5LDQ4NTIwLDQ4NTIxLDQ4NTIyLDQ4NTI4LDQ4NTI5LDQ4NTMxLDQ4NTMzLDQ4NTM3LDQ4NTM4LDQ4NTQwLDQ4NTQ4LDQ4NTYwLDQ4NTY4LDQ4NTk2LDQ4NTk3LDQ4NjAwLDQ4NjA0LDQ4NjE3LDQ4NjI0LDQ4NjI4LDQ4NjMyLDQ4NjQw''@;'; put 'put ''LDQ4NjQzLDQ4NjQ1LDQ4NjUyLDQ4NjUzLDQ4NjU2LDQ4NjYwLDQ4NjY4LDQ4NjY5LDQ4NjcxLDQ4NzA4LDQ4NzA5LDQ4NzEyLDQ4NzE2LDQ4NzE4LDQ4NzI0LDQ4NzI1LDQ4NzI3LDQ4NzI5LDQ4NzMwLDQ4NzMxLDQ4NzM2LDQ4NzM3LDQ4NzQwLDU0MDExLDU0MDEyLDU0MDEzLDU0MDE0LDU0''@;'; put 'put ''MDE1LDU0MDE4LDU0MDIwLDU0MDIyLDU0MDIzLDU0MDI0LDU0MDI1LDU0MDI2LDU0MDI3LDU0MDMxLDU0MDMzLDU0MDM0LDU0MDM1LDU0MDM3LDU0MDM5LDU0MDQwLDU0MDQxLDU0MDQyLDU0MDQzLDU0MDQ2LDU0MDUwLDU0MDUxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDU0MDUy''@;'; put 'put ''LDU0MDU0LDU0MDU1LDU0MDU4LDU0MDU5LDU0MDYxLDU0MDYyLDU0MDYzLDU0MDY1LDU0MDY2LDU0MDY3LDU0MDY4LDU0MDY5LDU0MDcwLDU0MDcxLDU0MDc0LDU0MDc4LDU0MDc5LDU0MDgwLDU0MDgxLDU0MDgyLDU0MDgzLDU0MDg2LDU0MDg3LDU0MDg4LDU0MDg5LG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLDU0MDkwLDU0MDkxLDU0MDkyLDU0MDkzLDU0MDk0LDU0MDk1LDU0MDk2LDU0MDk3LDU0MDk4LDU0MDk5LDU0MTAwLDU0MTAxLDU0MTAyLDU0MTAzLDU0MTA0LDU0MTA1LDU0MTA2LDU0MTA3LDU0MTA4LDU0MTA5LDU0MTEwLDU0MTExLDU0MTEyLDU0MTEzLDU0MTE0''@;'; put 'put ''LDU0MTE1LDU0MTE2LDU0MTE3LDU0MTE4LDU0MTE5LDU0MTIwLDU0MTIxLDQ4NzQ0LDQ4NzQ2LDQ4NzUyLDQ4NzUzLDQ4NzU1LDQ4NzU2LDQ4NzU3LDQ4NzYzLDQ4NzY0LDQ4NzY1LDQ4NzY4LDQ4NzcyLDQ4NzgwLDQ4NzgxLDQ4NzgzLDQ4Nzg0LDQ4Nzg1LDQ4NzkyLDQ4NzkzLDQ4ODA4LDQ4''@;'; put 'put ''ODQ4LDQ4ODQ5LDQ4ODUyLDQ4ODU1LDQ4ODU2LDQ4ODY0LDQ4ODY3LDQ4ODY4LDQ4ODY5LDQ4ODc2LDQ4ODk3LDQ4OTA0LDQ4OTA1LDQ4OTIwLDQ4OTIxLDQ4OTIzLDQ4OTI0LDQ4OTI1LDQ4OTYwLDQ4OTYxLDQ4OTY0LDQ4OTY4LDQ4OTc2LDQ4OTc3LDQ4OTgxLDQ5MDQ0LDQ5MDcyLDQ5MDkz''@;'; put 'put ''LDQ5MTAwLDQ5MTAxLDQ5MTA0LDQ5MTA4LDQ5MTE2LDQ5MTE5LDQ5MTIxLDQ5MjEyLDQ5MjMzLDQ5MjQwLDQ5MjQ0LDQ5MjQ4LDQ5MjU2LDQ5MjU3LDQ5Mjk2LDQ5Mjk3LDQ5MzAwLDQ5MzA0LDQ5MzEyLDQ5MzEzLDQ5MzE1LDQ5MzE3LDQ5MzI0LDQ5MzI1LDQ5MzI3LDQ5MzI4LDQ5MzMxLDQ5''@;'; put 'put ''MzMyLDQ5MzMzLDQ5MzM0LDQ5MzQwLDQ5MzQxLDQ5MzQzLDQ5MzQ0LDQ5MzQ1LDQ5MzQ5LDQ5MzUyLDQ5MzUzLDQ5MzU2LDQ5MzYwLDQ5MzY4LDQ5MzY5LDQ5MzcxLDQ5MzcyLDQ5MzczLDQ5MzgwLDU0MTIyLDU0MTIzLDU0MTI0LDU0MTI1LDU0MTI2LDU0MTI3LDU0MTI4LDU0MTI5LDU0MTMw''@;'; put 'put ''LDU0MTMxLDU0MTMyLDU0MTMzLDU0MTM0LDU0MTM1LDU0MTM2LDU0MTM3LDU0MTM4LDU0MTM5LDU0MTQyLDU0MTQzLDU0MTQ1LDU0MTQ2LDU0MTQ3LDU0MTQ5LDU0MTUwLDU0MTUxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDU0MTUyLDU0MTUzLDU0MTU0LDU0MTU1LDU0MTU4LDU0''@;'; put 'put ''MTYyLDU0MTYzLDU0MTY0LDU0MTY1LDU0MTY2LDU0MTY3LDU0MTcwLDU0MTcxLDU0MTczLDU0MTc0LDU0MTc1LDU0MTc3LDU0MTc4LDU0MTc5LDU0MTgwLDU0MTgxLDU0MTgyLDU0MTgzLDU0MTg2LDU0MTg4LDU0MTkwLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDU0MTkxLDU0MTky''@;'; put 'put ''LDU0MTkzLDU0MTk0LDU0MTk1LDU0MTk3LDU0MTk4LDU0MTk5LDU0MjAxLDU0MjAyLDU0MjAzLDU0MjA1LDU0MjA2LDU0MjA3LDU0MjA4LDU0MjA5LDU0MjEwLDU0MjExLDU0MjE0LDU0MjE1LDU0MjE4LDU0MjE5LDU0MjIwLDU0MjIxLDU0MjIyLDU0MjIzLDU0MjI1LDU0MjI2LDU0MjI3LDU0''@;'; put 'put ''MjI4LDU0MjI5LDU0MjMwLDQ5MzgxLDQ5Mzg0LDQ5Mzg4LDQ5Mzk2LDQ5Mzk3LDQ5Mzk5LDQ5NDAxLDQ5NDA4LDQ5NDEyLDQ5NDE2LDQ5NDI0LDQ5NDI5LDQ5NDM2LDQ5NDM3LDQ5NDM4LDQ5NDM5LDQ5NDQwLDQ5NDQzLDQ5NDQ0LDQ5NDQ2LDQ5NDQ3LDQ5NDUyLDQ5NDUzLDQ5NDU1LDQ5NDU2''@;'; put 'put ''LDQ5NDU3LDQ5NDYyLDQ5NDY0LDQ5NDY1LDQ5NDY4LDQ5NDcyLDQ5NDgwLDQ5NDgxLDQ5NDgzLDQ5NDg0LDQ5NDg1LDQ5NDkyLDQ5NDkzLDQ5NDk2LDQ5NTAwLDQ5NTA4LDQ5NTA5LDQ5NTExLDQ5NTEyLDQ5NTEzLDQ5NTIwLDQ5NTI0LDQ5NTI4LDQ5NTQxLDQ5NTQ4LDQ5NTQ5LDQ5NTUwLDQ5''@;'; put 'put ''NTUyLDQ5NTU2LDQ5NTU4LDQ5NTY0LDQ5NTY1LDQ5NTY3LDQ5NTY5LDQ5NTczLDQ5NTc2LDQ5NTc3LDQ5NTgwLDQ5NTg0LDQ5NTk3LDQ5NjA0LDQ5NjA4LDQ5NjEyLDQ5NjIwLDQ5NjIzLDQ5NjI0LDQ5NjMyLDQ5NjM2LDQ5NjQwLDQ5NjQ4LDQ5NjQ5LDQ5NjUxLDQ5NjYwLDQ5NjYxLDQ5NjY0''@;'; put 'put ''LDQ5NjY4LDQ5Njc2LDQ5Njc3LDQ5Njc5LDQ5NjgxLDQ5Njg4LDQ5Njg5LDQ5NjkyLDQ5Njk1LDQ5Njk2LDQ5NzA0LDQ5NzA1LDQ5NzA3LDQ5NzA5LDU0MjMxLDU0MjMzLDU0MjM0LDU0MjM1LDU0MjM2LDU0MjM3LDU0MjM4LDU0MjM5LDU0MjQwLDU0MjQyLDU0MjQ0LDU0MjQ1LDU0MjQ2LDU0''@;'; put 'put ''MjQ3LDU0MjQ4LDU0MjQ5LDU0MjUwLDU0MjUxLDU0MjU0LDU0MjU1LDU0MjU3LDU0MjU4LDU0MjU5LDU0MjYxLDU0MjYyLDU0MjYzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDU0MjY0LDU0MjY1LDU0MjY2LDU0MjY3LDU0MjcwLDU0MjcyLDU0Mjc0LDU0Mjc1LDU0Mjc2LDU0Mjc3''@;'; put 'put ''LDU0Mjc4LDU0Mjc5LDU0MjgxLDU0MjgyLDU0MjgzLDU0Mjg0LDU0Mjg1LDU0Mjg2LDU0Mjg3LDU0Mjg4LDU0Mjg5LDU0MjkwLDU0MjkxLDU0MjkyLDU0MjkzLDU0Mjk0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDU0Mjk1LDU0Mjk2LDU0Mjk3LDU0Mjk4LDU0Mjk5LDU0MzAwLDU0''@;'; put 'put ''MzAyLDU0MzAzLDU0MzA0LDU0MzA1LDU0MzA2LDU0MzA3LDU0MzA4LDU0MzA5LDU0MzEwLDU0MzExLDU0MzEyLDU0MzEzLDU0MzE0LDU0MzE1LDU0MzE2LDU0MzE3LDU0MzE4LDU0MzE5LDU0MzIwLDU0MzIxLDU0MzIyLDU0MzIzLDU0MzI0LDU0MzI1LDU0MzI2LDU0MzI3LDQ5NzExLDQ5NzEz''@;'; put 'put ''LDQ5NzE0LDQ5NzE2LDQ5NzM2LDQ5NzQ0LDQ5NzQ1LDQ5NzQ4LDQ5NzUyLDQ5NzYwLDQ5NzY1LDQ5NzcyLDQ5NzczLDQ5Nzc2LDQ5NzgwLDQ5Nzg4LDQ5Nzg5LDQ5NzkxLDQ5NzkzLDQ5ODAwLDQ5ODAxLDQ5ODA4LDQ5ODE2LDQ5ODE5LDQ5ODIxLDQ5ODI4LDQ5ODI5LDQ5ODMyLDQ5ODM2LDQ5''@;'; put 'put ''ODM3LDQ5ODQ0LDQ5ODQ1LDQ5ODQ3LDQ5ODQ5LDQ5ODg0LDQ5ODg1LDQ5ODg4LDQ5ODkxLDQ5ODkyLDQ5ODk5LDQ5OTAwLDQ5OTAxLDQ5OTAzLDQ5OTA1LDQ5OTEwLDQ5OTEyLDQ5OTEzLDQ5OTE1LDQ5OTE2LDQ5OTIwLDQ5OTI4LDQ5OTI5LDQ5OTMyLDQ5OTMzLDQ5OTM5LDQ5OTQwLDQ5OTQx''@;'; put 'put ''LDQ5OTQ0LDQ5OTQ4LDQ5OTU2LDQ5OTU3LDQ5OTYwLDQ5OTYxLDQ5OTg5LDUwMDI0LDUwMDI1LDUwMDI4LDUwMDMyLDUwMDM0LDUwMDQwLDUwMDQxLDUwMDQ0LDUwMDQ1LDUwMDUyLDUwMDU2LDUwMDYwLDUwMTEyLDUwMTM2LDUwMTM3LDUwMTQwLDUwMTQzLDUwMTQ0LDUwMTQ2LDUwMTUyLDUw''@;'; put 'put ''MTUzLDUwMTU3LDUwMTY0LDUwMTY1LDUwMTY4LDUwMTg0LDUwMTkyLDUwMjEyLDUwMjIwLDUwMjI0LDU0MzI4LDU0MzI5LDU0MzMwLDU0MzMxLDU0MzMyLDU0MzMzLDU0MzM0LDU0MzM1LDU0MzM3LDU0MzM4LDU0MzM5LDU0MzQxLDU0MzQyLDU0MzQzLDU0MzQ0LDU0MzQ1LDU0MzQ2LDU0MzQ3''@;'; put 'put ''LDU0MzQ4LDU0MzQ5LDU0MzUwLDU0MzUxLDU0MzUyLDU0MzUzLDU0MzU0LDU0MzU1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDU0MzU2LDU0MzU3LDU0MzU4LDU0MzU5LDU0MzYwLDU0MzYxLDU0MzYyLDU0MzYzLDU0MzY1LDU0MzY2LDU0MzY3LDU0MzY5LDU0MzcwLDU0MzcxLDU0''@;'; put 'put ''MzczLDU0Mzc0LDU0Mzc1LDU0Mzc2LDU0Mzc3LDU0Mzc4LDU0Mzc5LDU0MzgwLDU0MzgyLDU0Mzg0LDU0Mzg1LDU0Mzg2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDU0Mzg3LDU0Mzg4LDU0Mzg5LDU0MzkwLDU0MzkxLDU0Mzk0LDU0Mzk1LDU0Mzk3LDU0Mzk4LDU0NDAxLDU0NDAz''@;'; put 'put ''LDU0NDA0LDU0NDA1LDU0NDA2LDU0NDA3LDU0NDEwLDU0NDEyLDU0NDE0LDU0NDE1LDU0NDE2LDU0NDE3LDU0NDE4LDU0NDE5LDU0NDIxLDU0NDIyLDU0NDIzLDU0NDI0LDU0NDI1LDU0NDI2LDU0NDI3LDU0NDI4LDU0NDI5LDUwMjI4LDUwMjM2LDUwMjM3LDUwMjQ4LDUwMjc2LDUwMjc3LDUw''@;'; put 'put ''MjgwLDUwMjg0LDUwMjkyLDUwMjkzLDUwMjk3LDUwMzA0LDUwMzI0LDUwMzMyLDUwMzYwLDUwMzY0LDUwNDA5LDUwNDE2LDUwNDE3LDUwNDIwLDUwNDI0LDUwNDI2LDUwNDMxLDUwNDMyLDUwNDMzLDUwNDQ0LDUwNDQ4LDUwNDUyLDUwNDYwLDUwNDcyLDUwNDczLDUwNDc2LDUwNDgwLDUwNDg4''@;'; put 'put ''LDUwNDg5LDUwNDkxLDUwNDkzLDUwNTAwLDUwNTAxLDUwNTA0LDUwNTA1LDUwNTA2LDUwNTA4LDUwNTA5LDUwNTEwLDUwNTE1LDUwNTE2LDUwNTE3LDUwNTE5LDUwNTIwLDUwNTIxLDUwNTI1LDUwNTI2LDUwNTI4LDUwNTI5LDUwNTMyLDUwNTM2LDUwNTQ0LDUwNTQ1LDUwNTQ3LDUwNTQ4LDUw''@;'; put 'put ''NTQ5LDUwNTU2LDUwNTU3LDUwNTYwLDUwNTY0LDUwNTY3LDUwNTcyLDUwNTczLDUwNTc1LDUwNTc3LDUwNTgxLDUwNTgzLDUwNTg0LDUwNTg4LDUwNTkyLDUwNjAxLDUwNjEyLDUwNjEzLDUwNjE2LDUwNjE3LDUwNjE5LDUwNjIwLDUwNjIxLDUwNjIyLDUwNjI4LDUwNjI5LDUwNjMwLDUwNjMx''@;'; put 'put ''LDUwNjMyLDUwNjMzLDUwNjM0LDUwNjM2LDUwNjM4LDU0NDMwLDU0NDMxLDU0NDMyLDU0NDMzLDU0NDM0LDU0NDM1LDU0NDM2LDU0NDM3LDU0NDM4LDU0NDM5LDU0NDQwLDU0NDQyLDU0NDQzLDU0NDQ0LDU0NDQ1LDU0NDQ2LDU0NDQ3LDU0NDQ4LDU0NDQ5LDU0NDUwLDU0NDUxLDU0NDUyLDU0''@;'; put 'put ''NDUzLDU0NDU0LDU0NDU1LDU0NDU2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDU0NDU3LDU0NDU4LDU0NDU5LDU0NDYwLDU0NDYxLDU0NDYyLDU0NDYzLDU0NDY0LDU0NDY1LDU0NDY2LDU0NDY3LDU0NDY4LDU0NDY5LDU0NDcwLDU0NDcxLDU0NDcyLDU0NDczLDU0NDc0LDU0NDc1''@;'; put 'put ''LDU0NDc3LDU0NDc4LDU0NDc5LDU0NDgxLDU0NDgyLDU0NDgzLDU0NDg1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDU0NDg2LDU0NDg3LDU0NDg4LDU0NDg5LDU0NDkwLDU0NDkxLDU0NDkzLDU0NDk0LDU0NDk2LDU0NDk3LDU0NDk4LDU0NDk5LDU0NTAwLDU0NTAxLDU0NTAyLDU0''@;'; put 'put ''NTAzLDU0NTA1LDU0NTA2LDU0NTA3LDU0NTA5LDU0NTEwLDU0NTExLDU0NTEzLDU0NTE0LDU0NTE1LDU0NTE2LDU0NTE3LDU0NTE4LDU0NTE5LDU0NTIxLDU0NTIyLDU0NTI0LDUwNjQwLDUwNjQxLDUwNjQ0LDUwNjQ4LDUwNjU2LDUwNjU3LDUwNjU5LDUwNjYxLDUwNjY4LDUwNjY5LDUwNjcw''@;'; put 'put ''LDUwNjcyLDUwNjc2LDUwNjc4LDUwNjc5LDUwNjg0LDUwNjg1LDUwNjg2LDUwNjg3LDUwNjg4LDUwNjg5LDUwNjkzLDUwNjk0LDUwNjk1LDUwNjk2LDUwNzAwLDUwNzA0LDUwNzEyLDUwNzEzLDUwNzE1LDUwNzE2LDUwNzI0LDUwNzI1LDUwNzI4LDUwNzMyLDUwNzMzLDUwNzM0LDUwNzM2LDUw''@;'; put 'put ''NzM5LDUwNzQwLDUwNzQxLDUwNzQzLDUwNzQ1LDUwNzQ3LDUwNzUyLDUwNzUzLDUwNzU2LDUwNzYwLDUwNzY4LDUwNzY5LDUwNzcxLDUwNzcyLDUwNzczLDUwNzgwLDUwNzgxLDUwNzg0LDUwNzk2LDUwNzk5LDUwODAxLDUwODA4LDUwODA5LDUwODEyLDUwODE2LDUwODI0LDUwODI1LDUwODI3''@;'; put 'put ''LDUwODI5LDUwODM2LDUwODM3LDUwODQwLDUwODQ0LDUwODUyLDUwODUzLDUwODU1LDUwODU3LDUwODY0LDUwODY1LDUwODY4LDUwODcyLDUwODczLDUwODc0LDUwODgwLDUwODgxLDUwODgzLDUwODg1LDUwODkyLDUwODkzLDUwODk2LDUwOTAwLDUwOTA4LDUwOTA5LDUwOTEyLDUwOTEzLDUw''@;'; put 'put ''OTIwLDU0NTI2LDU0NTI3LDU0NTI4LDU0NTI5LDU0NTMwLDU0NTMxLDU0NTMzLDU0NTM0LDU0NTM1LDU0NTM3LDU0NTM4LDU0NTM5LDU0NTQxLDU0NTQyLDU0NTQzLDU0NTQ0LDU0NTQ1LDU0NTQ2LDU0NTQ3LDU0NTUwLDU0NTUyLDU0NTUzLDU0NTU0LDU0NTU1LDU0NTU2LDU0NTU3LG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDU0NTU4LDU0NTU5LDU0NTYwLDU0NTYxLDU0NTYyLDU0NTYzLDU0NTY0LDU0NTY1LDU0NTY2LDU0NTY3LDU0NTY4LDU0NTY5LDU0NTcwLDU0NTcxLDU0NTcyLDU0NTczLDU0NTc0LDU0NTc1LDU0NTc2LDU0NTc3LDU0NTc4LDU0NTc5LDU0NTgwLDU0''@;'; put 'put ''NTgxLDU0NTgyLDU0NTgzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDU0NTg0LDU0NTg1LDU0NTg2LDU0NTg3LDU0NTkwLDU0NTkxLDU0NTkzLDU0NTk0LDU0NTk1LDU0NTk3LDU0NTk4LDU0NTk5LDU0NjAwLDU0NjAxLDU0NjAyLDU0NjAzLDU0NjA2LDU0NjA4LDU0NjEwLDU0NjEx''@;'; put 'put ''LDU0NjEyLDU0NjEzLDU0NjE0LDU0NjE1LDU0NjE4LDU0NjE5LDU0NjIxLDU0NjIyLDU0NjIzLDU0NjI1LDU0NjI2LDU0NjI3LDUwOTIxLDUwOTI0LDUwOTI4LDUwOTM2LDUwOTM3LDUwOTQxLDUwOTQ4LDUwOTQ5LDUwOTUyLDUwOTU2LDUwOTY0LDUwOTY1LDUwOTY3LDUwOTY5LDUwOTc2LDUw''@;'; put 'put ''OTc3LDUwOTgwLDUwOTg0LDUwOTkyLDUwOTkzLDUwOTk1LDUwOTk3LDUwOTk5LDUxMDA0LDUxMDA1LDUxMDA4LDUxMDEyLDUxMDE4LDUxMDIwLDUxMDIxLDUxMDIzLDUxMDI1LDUxMDI2LDUxMDI3LDUxMDI4LDUxMDI5LDUxMDMwLDUxMDMxLDUxMDMyLDUxMDM2LDUxMDQwLDUxMDQ4LDUxMDUx''@;'; put 'put ''LDUxMDYwLDUxMDYxLDUxMDY0LDUxMDY4LDUxMDY5LDUxMDcwLDUxMDc1LDUxMDc2LDUxMDc3LDUxMDc5LDUxMDgwLDUxMDgxLDUxMDgyLDUxMDg2LDUxMDg4LDUxMDg5LDUxMDkyLDUxMDk0LDUxMDk1LDUxMDk2LDUxMDk4LDUxMTA0LDUxMTA1LDUxMTA3LDUxMTA4LDUxMTA5LDUxMTEwLDUx''@;'; put 'put ''MTE2LDUxMTE3LDUxMTIwLDUxMTI0LDUxMTMyLDUxMTMzLDUxMTM1LDUxMTM2LDUxMTM3LDUxMTQ0LDUxMTQ1LDUxMTQ4LDUxMTUwLDUxMTUyLDUxMTYwLDUxMTY1LDUxMTcyLDUxMTc2LDUxMTgwLDUxMjAwLDUxMjAxLDUxMjA0LDUxMjA4LDUxMjEwLDU0NjI4LDU0NjMwLDU0NjMxLDU0NjM0''@;'; put 'put ''LDU0NjM2LDU0NjM4LDU0NjM5LDU0NjQwLDU0NjQxLDU0NjQyLDU0NjQzLDU0NjQ2LDU0NjQ3LDU0NjQ5LDU0NjUwLDU0NjUxLDU0NjUzLDU0NjU0LDU0NjU1LDU0NjU2LDU0NjU3LDU0NjU4LDU0NjU5LDU0NjYyLDU0NjY2LDU0NjY3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDU0''@;'; put 'put ''NjY4LDU0NjY5LDU0NjcwLDU0NjcxLDU0NjczLDU0Njc0LDU0Njc1LDU0Njc2LDU0Njc3LDU0Njc4LDU0Njc5LDU0NjgwLDU0NjgxLDU0NjgyLDU0NjgzLDU0Njg0LDU0Njg1LDU0Njg2LDU0Njg3LDU0Njg4LDU0Njg5LDU0NjkwLDU0NjkxLDU0NjkyLDU0Njk0LDU0Njk1LG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLDU0Njk2LDU0Njk3LDU0Njk4LDU0Njk5LDU0NzAwLDU0NzAxLDU0NzAyLDU0NzAzLDU0NzA0LDU0NzA1LDU0NzA2LDU0NzA3LDU0NzA4LDU0NzA5LDU0NzEwLDU0NzExLDU0NzEyLDU0NzEzLDU0NzE0LDU0NzE1LDU0NzE2LDU0NzE3LDU0NzE4LDU0NzE5LDU0''@;'; put 'put ''NzIwLDU0NzIxLDU0NzIyLDU0NzIzLDU0NzI0LDU0NzI1LDU0NzI2LDU0NzI3LDUxMjE2LDUxMjE3LDUxMjE5LDUxMjIxLDUxMjIyLDUxMjI4LDUxMjI5LDUxMjMyLDUxMjM2LDUxMjQ0LDUxMjQ1LDUxMjQ3LDUxMjQ5LDUxMjU2LDUxMjYwLDUxMjY0LDUxMjcyLDUxMjczLDUxMjc2LDUxMjc3''@;'; put 'put ''LDUxMjg0LDUxMzEyLDUxMzEzLDUxMzE2LDUxMzIwLDUxMzIyLDUxMzI4LDUxMzI5LDUxMzMxLDUxMzMzLDUxMzM0LDUxMzM1LDUxMzM5LDUxMzQwLDUxMzQxLDUxMzQ4LDUxMzU3LDUxMzU5LDUxMzYxLDUxMzY4LDUxMzg4LDUxMzg5LDUxMzk2LDUxNDAwLDUxNDA0LDUxNDEyLDUxNDEzLDUx''@;'; put 'put ''NDE1LDUxNDE3LDUxNDI0LDUxNDI1LDUxNDI4LDUxNDQ1LDUxNDUyLDUxNDUzLDUxNDU2LDUxNDYwLDUxNDYxLDUxNDYyLDUxNDY4LDUxNDY5LDUxNDcxLDUxNDczLDUxNDgwLDUxNTAwLDUxNTA4LDUxNTM2LDUxNTM3LDUxNTQwLDUxNTQ0LDUxNTUyLDUxNTUzLDUxNTU1LDUxNTY0LDUxNTY4''@;'; put 'put ''LDUxNTcyLDUxNTgwLDUxNTkyLDUxNTkzLDUxNTk2LDUxNjAwLDUxNjA4LDUxNjA5LDUxNjExLDUxNjEzLDUxNjQ4LDUxNjQ5LDUxNjUyLDUxNjU1LDUxNjU2LDUxNjU4LDUxNjY0LDUxNjY1LDUxNjY3LDU0NzMwLDU0NzMxLDU0NzMzLDU0NzM0LDU0NzM1LDU0NzM3LDU0NzM5LDU0NzQwLDU0''@;'; put 'put ''NzQxLDU0NzQyLDU0NzQzLDU0NzQ2LDU0NzQ4LDU0NzUwLDU0NzUxLDU0NzUyLDU0NzUzLDU0NzU0LDU0NzU1LDU0NzU4LDU0NzU5LDU0NzYxLDU0NzYyLDU0NzYzLDU0NzY1LDU0NzY2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDU0NzY3LDU0NzY4LDU0NzY5LDU0NzcwLDU0Nzcx''@;'; put 'put ''LDU0Nzc0LDU0Nzc2LDU0Nzc4LDU0Nzc5LDU0NzgwLDU0NzgxLDU0NzgyLDU0NzgzLDU0Nzg2LDU0Nzg3LDU0Nzg5LDU0NzkwLDU0NzkxLDU0NzkzLDU0Nzk0LDU0Nzk1LDU0Nzk2LDU0Nzk3LDU0Nzk4LDU0Nzk5LDU0ODAyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDU0ODA2LDU0''@;'; put 'put ''ODA3LDU0ODA4LDU0ODA5LDU0ODEwLDU0ODExLDU0ODEzLDU0ODE0LDU0ODE1LDU0ODE3LDU0ODE4LDU0ODE5LDU0ODIxLDU0ODIyLDU0ODIzLDU0ODI0LDU0ODI1LDU0ODI2LDU0ODI3LDU0ODI4LDU0ODMwLDU0ODMxLDU0ODMyLDU0ODMzLDU0ODM0LDU0ODM1LDU0ODM2LDU0ODM3LDU0ODM4''@;'; put 'put ''LDU0ODM5LDU0ODQyLDU0ODQzLDUxNjY5LDUxNjcwLDUxNjczLDUxNjc0LDUxNjc2LDUxNjc3LDUxNjgwLDUxNjgyLDUxNjg0LDUxNjg3LDUxNjkyLDUxNjkzLDUxNjk1LDUxNjk2LDUxNjk3LDUxNzA0LDUxNzA1LDUxNzA4LDUxNzEyLDUxNzIwLDUxNzIxLDUxNzIzLDUxNzI0LDUxNzI1LDUx''@;'; put 'put ''NzMyLDUxNzM2LDUxNzUzLDUxNzg4LDUxNzg5LDUxNzkyLDUxNzk2LDUxODA0LDUxODA1LDUxODA3LDUxODA4LDUxODA5LDUxODE2LDUxODM3LDUxODQ0LDUxODY0LDUxOTAwLDUxOTAxLDUxOTA0LDUxOTA4LDUxOTE2LDUxOTE3LDUxOTE5LDUxOTIxLDUxOTIzLDUxOTI4LDUxOTI5LDUxOTM2''@;'; put 'put ''LDUxOTQ4LDUxOTU2LDUxOTc2LDUxOTg0LDUxOTg4LDUxOTkyLDUyZTMsNTIwMDEsNTIwMzMsNTIwNDAsNTIwNDEsNTIwNDQsNTIwNDgsNTIwNTYsNTIwNTcsNTIwNjEsNTIwNjgsNTIwODgsNTIwODksNTIxMjQsNTIxNTIsNTIxODAsNTIxOTYsNTIxOTksNTIyMDEsNTIyMzYsNTIyMzcsNTIy''@;'; put 'put ''NDAsNTIyNDQsNTIyNTIsNTIyNTMsNTIyNTcsNTIyNTgsNTIyNjMsNTIyNjQsNTIyNjUsNTIyNjgsNTIyNzAsNTIyNzIsNTIyODAsNTIyODEsNTIyODMsNTQ4NDUsNTQ4NDYsNTQ4NDcsNTQ4NDksNTQ4NTAsNTQ4NTEsNTQ4NTIsNTQ4NTQsNTQ4NTUsNTQ4NTgsNTQ4NjAsNTQ4NjIsNTQ4NjMs''@;'; put 'put ''NTQ4NjQsNTQ4NjYsNTQ4NjcsNTQ4NzAsNTQ4NzEsNTQ4NzMsNTQ4NzQsNTQ4NzUsNTQ4NzcsNTQ4NzgsNTQ4NzksNTQ4ODAsNTQ4ODEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQ4ODIsNTQ4ODMsNTQ4ODQsNTQ4ODUsNTQ4ODYsNTQ4ODgsNTQ4OTAsNTQ4OTEsNTQ4OTIsNTQ4''@;'; put 'put ''OTMsNTQ4OTQsNTQ4OTUsNTQ4OTgsNTQ4OTksNTQ5MDEsNTQ5MDIsNTQ5MDMsNTQ5MDQsNTQ5MDUsNTQ5MDYsNTQ5MDcsNTQ5MDgsNTQ5MDksNTQ5MTAsNTQ5MTEsNTQ5MTIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQ5MTMsNTQ5MTQsNTQ5MTYsNTQ5MTgsNTQ5MTksNTQ5MjAs''@;'; put 'put ''NTQ5MjEsNTQ5MjIsNTQ5MjMsNTQ5MjYsNTQ5MjcsNTQ5MjksNTQ5MzAsNTQ5MzEsNTQ5MzMsNTQ5MzQsNTQ5MzUsNTQ5MzYsNTQ5MzcsNTQ5MzgsNTQ5MzksNTQ5NDAsNTQ5NDIsNTQ5NDQsNTQ5NDYsNTQ5NDcsNTQ5NDgsNTQ5NDksNTQ5NTAsNTQ5NTEsNTQ5NTMsNTQ5NTQsNTIyODQsNTIy''@;'; put 'put ''ODUsNTIyODYsNTIyOTIsNTIyOTMsNTIyOTYsNTIzMDAsNTIzMDgsNTIzMDksNTIzMTEsNTIzMTIsNTIzMTMsNTIzMjAsNTIzMjQsNTIzMjYsNTIzMjgsNTIzMzYsNTIzNDEsNTIzNzYsNTIzNzcsNTIzODAsNTIzODQsNTIzOTIsNTIzOTMsNTIzOTUsNTIzOTYsNTIzOTcsNTI0MDQsNTI0MDUs''@;'; put 'put ''NTI0MDgsNTI0MTIsNTI0MjAsNTI0MjEsNTI0MjMsNTI0MjUsNTI0MzIsNTI0MzYsNTI0NTIsNTI0NjAsNTI0NjQsNTI0ODEsNTI0ODgsNTI0ODksNTI0OTIsNTI0OTYsNTI1MDQsNTI1MDUsNTI1MDcsNTI1MDksNTI1MTYsNTI1MjAsNTI1MjQsNTI1MzcsNTI1NzIsNTI1NzYsNTI1ODAsNTI1''@;'; put 'put ''ODgsNTI1ODksNTI1OTEsNTI1OTMsNTI2MDAsNTI2MTYsNTI2MjgsNTI2MjksNTI2MzIsNTI2MzYsNTI2NDQsNTI2NDUsNTI2NDcsNTI2NDksNTI2NTYsNTI2NzYsNTI2ODQsNTI2ODgsNTI3MTIsNTI3MTYsNTI3MjAsNTI3MjgsNTI3MjksNTI3MzEsNTI3MzMsNTI3NDAsNTI3NDQsNTI3NDgs''@;'; put 'put ''NTI3NTYsNTI3NjEsNTI3NjgsNTI3NjksNTI3NzIsNTI3NzYsNTI3ODQsNTI3ODUsNTI3ODcsNTI3ODksNTQ5NTUsNTQ5NTcsNTQ5NTgsNTQ5NTksNTQ5NjEsNTQ5NjIsNTQ5NjMsNTQ5NjQsNTQ5NjUsNTQ5NjYsNTQ5NjcsNTQ5NjgsNTQ5NzAsNTQ5NzIsNTQ5NzMsNTQ5NzQsNTQ5NzUsNTQ5''@;'; put 'put ''NzYsNTQ5NzcsNTQ5NzgsNTQ5NzksNTQ5ODIsNTQ5ODMsNTQ5ODUsNTQ5ODYsNTQ5ODcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQ5ODksNTQ5OTAsNTQ5OTEsNTQ5OTIsNTQ5OTQsNTQ5OTUsNTQ5OTcsNTQ5OTgsNTVlMyw1NTAwMiw1NTAwMyw1NTAwNCw1NTAwNSw1NTAwNiw1''@;'; put 'put ''NTAwNyw1NTAwOSw1NTAxMCw1NTAxMSw1NTAxMyw1NTAxNCw1NTAxNSw1NTAxNyw1NTAxOCw1NTAxOSw1NTAyMCw1NTAyMSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NTAyMiw1NTAyMyw1NTAyNSw1NTAyNiw1NTAyNyw1NTAyOCw1NTAzMCw1NTAzMSw1NTAzMiw1NTAzMyw1NTAz''@;'; put 'put ''NCw1NTAzNSw1NTAzOCw1NTAzOSw1NTA0MSw1NTA0Miw1NTA0Myw1NTA0NSw1NTA0Niw1NTA0Nyw1NTA0OCw1NTA0OSw1NTA1MCw1NTA1MSw1NTA1Miw1NTA1Myw1NTA1NCw1NTA1NSw1NTA1Niw1NTA1OCw1NTA1OSw1NTA2MCw1MjgyNCw1MjgyNSw1MjgyOCw1MjgzMSw1MjgzMiw1MjgzMyw1''@;'; put 'put ''Mjg0MCw1Mjg0MSw1Mjg0Myw1Mjg0NSw1Mjg1Miw1Mjg1Myw1Mjg1Niw1Mjg2MCw1Mjg2OCw1Mjg2OSw1Mjg3MSw1Mjg3Myw1Mjg4MCw1Mjg4MSw1Mjg4NCw1Mjg4OCw1Mjg5Niw1Mjg5Nyw1Mjg5OSw1MjkwMCw1MjkwMSw1MjkwOCw1MjkwOSw1MjkyOSw1Mjk2NCw1Mjk2NSw1Mjk2OCw1Mjk3''@;'; put 'put ''MSw1Mjk3Miw1Mjk4MCw1Mjk4MSw1Mjk4Myw1Mjk4NCw1Mjk4NSw1Mjk5Miw1Mjk5Myw1Mjk5Niw1M2UzLDUzMDA4LDUzMDA5LDUzMDExLDUzMDEzLDUzMDIwLDUzMDI0LDUzMDI4LDUzMDM2LDUzMDM3LDUzMDM5LDUzMDQwLDUzMDQxLDUzMDQ4LDUzMDc2LDUzMDc3LDUzMDgwLDUzMDg0LDUz''@;'; put 'put ''MDkyLDUzMDkzLDUzMDk1LDUzMDk3LDUzMTA0LDUzMTA1LDUzMTA4LDUzMTEyLDUzMTIwLDUzMTI1LDUzMTMyLDUzMTUzLDUzMTYwLDUzMTY4LDUzMTg4LDUzMjE2LDUzMjE3LDUzMjIwLDUzMjI0LDUzMjMyLDUzMjMzLDUzMjM1LDUzMjM3LDUzMjQ0LDUzMjQ4LDUzMjUyLDUzMjY1LDUzMjcy''@;'; put 'put ''LDUzMjkzLDUzMzAwLDUzMzAxLDUzMzA0LDUzMzA4LDU1MDYxLDU1MDYyLDU1MDYzLDU1MDY2LDU1MDY3LDU1MDY5LDU1MDcwLDU1MDcxLDU1MDczLDU1MDc0LDU1MDc1LDU1MDc2LDU1MDc3LDU1MDc4LDU1MDc5LDU1MDgyLDU1MDg0LDU1MDg2LDU1MDg3LDU1MDg4LDU1MDg5LDU1MDkwLDU1''@;'; put 'put ''MDkxLDU1MDk0LDU1MDk1LDU1MDk3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDU1MDk4LDU1MDk5LDU1MTAxLDU1MTAyLDU1MTAzLDU1MTA0LDU1MTA1LDU1MTA2LDU1MTA3LDU1MTA5LDU1MTEwLDU1MTEyLDU1MTE0LDU1MTE1LDU1MTE2LDU1MTE3LDU1MTE4LDU1MTE5LDU1MTIy''@;'; put 'put ''LDU1MTIzLDU1MTI1LDU1MTMwLDU1MTMxLDU1MTMyLDU1MTMzLDU1MTM0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDU1MTM1LDU1MTM4LDU1MTQwLDU1MTQyLDU1MTQzLDU1MTQ0LDU1MTQ2LDU1MTQ3LDU1MTQ5LDU1MTUwLDU1MTUxLDU1MTUzLDU1MTU0LDU1MTU1LDU1MTU3LDU1''@;'; put 'put ''MTU4LDU1MTU5LDU1MTYwLDU1MTYxLDU1MTYyLDU1MTYzLDU1MTY2LDU1MTY3LDU1MTY4LDU1MTcwLDU1MTcxLDU1MTcyLDU1MTczLDU1MTc0LDU1MTc1LDU1MTc4LDU1MTc5LDUzMzE2LDUzMzE3LDUzMzE5LDUzMzIxLDUzMzI4LDUzMzMyLDUzMzM2LDUzMzQ0LDUzMzU2LDUzMzU3LDUzMzYw''@;'; put 'put ''LDUzMzY0LDUzMzcyLDUzMzczLDUzMzc3LDUzNDEyLDUzNDEzLDUzNDE2LDUzNDIwLDUzNDI4LDUzNDI5LDUzNDMxLDUzNDMzLDUzNDQwLDUzNDQxLDUzNDQ0LDUzNDQ4LDUzNDQ5LDUzNDU2LDUzNDU3LDUzNDU5LDUzNDYwLDUzNDYxLDUzNDY4LDUzNDY5LDUzNDcyLDUzNDc2LDUzNDg0LDUz''@;'; put 'put ''NDg1LDUzNDg3LDUzNDg4LDUzNDg5LDUzNDk2LDUzNTE3LDUzNTUyLDUzNTUzLDUzNTU2LDUzNTYwLDUzNTYyLDUzNTY4LDUzNTY5LDUzNTcxLDUzNTcyLDUzNTczLDUzNTgwLDUzNTgxLDUzNTg0LDUzNTg4LDUzNTk2LDUzNTk3LDUzNTk5LDUzNjAxLDUzNjA4LDUzNjEyLDUzNjI4LDUzNjM2''@;'; put 'put ''LDUzNjQwLDUzNjY0LDUzNjY1LDUzNjY4LDUzNjcyLDUzNjgwLDUzNjgxLDUzNjgzLDUzNjg1LDUzNjkwLDUzNjkyLDUzNjk2LDUzNzIwLDUzNzQ4LDUzNzUyLDUzNzY3LDUzNzY5LDUzNzc2LDUzODA0LDUzODA1LDUzODA4LDUzODEyLDUzODIwLDUzODIxLDUzODIzLDUzODI1LDUzODMyLDUz''@;'; put 'put ''ODUyLDU1MTgxLDU1MTgyLDU1MTgzLDU1MTg1LDU1MTg2LDU1MTg3LDU1MTg4LDU1MTg5LDU1MTkwLDU1MTkxLDU1MTk0LDU1MTk2LDU1MTk4LDU1MTk5LDU1MjAwLDU1MjAxLDU1MjAyLDU1MjAzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLDUzODYwLDUzODg4LDUzODg5LDUzODkyLDUzODk2LDUzOTA0LDUzOTA1LDUzOTA5LDUzOTE2LDUzOTIwLDUzOTI0LDUzOTMyLDUzOTM3LDUzOTQ0LDUzOTQ1LDUzOTQ4LDUzOTUxLDUzOTUyLDUzOTU0LDUzOTYwLDUzOTYxLDUzOTYzLDUzOTcyLDUzOTc2LDUzOTgwLDUzOTg4LDUz''@;'; put 'put ''OTg5LDU0ZTMsNTQwMDEsNTQwMDQsNTQwMDgsNTQwMTYsNTQwMTcsNTQwMTksNTQwMjEsNTQwMjgsNTQwMjksNTQwMzAsNTQwMzIsNTQwMzYsNTQwMzgsNTQwNDQsNTQwNDUsNTQwNDcsNTQwNDgsNTQwNDksNTQwNTMsNTQwNTYsNTQwNTcsNTQwNjAsNTQwNjQsNTQwNzIsNTQwNzMsNTQwNzUs''@;'; put 'put ''NTQwNzYsNTQwNzcsNTQwODQsNTQwODUsNTQxNDAsNTQxNDEsNTQxNDQsNTQxNDgsNTQxNTYsNTQxNTcsNTQxNTksNTQxNjAsNTQxNjEsNTQxNjgsNTQxNjksNTQxNzIsNTQxNzYsNTQxODQsNTQxODUsNTQxODcsNTQxODksNTQxOTYsNTQyMDAsNTQyMDQsNTQyMTIsNTQyMTMsNTQyMTYsNTQy''@;'; put 'put ''MTcsNTQyMjQsNTQyMzIsNTQyNDEsNTQyNDMsNTQyNTIsNTQyNTMsNTQyNTYsNTQyNjAsNTQyNjgsNTQyNjksNTQyNzEsNTQyNzMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQyODAsNTQzMDEsNTQzMzYsNTQzNDAsNTQzNjQsNTQzNjgsNTQzNzIsNTQzODEsNTQzODMsNTQzOTIsNTQzOTMsNTQzOTYsNTQzOTksNTQ0MDAsNTQ0MDIsNTQ0MDgsNTQ0MDksNTQ0''@;'; put 'put ''MTEsNTQ0MTMsNTQ0MjAsNTQ0NDEsNTQ0NzYsNTQ0ODAsNTQ0ODQsNTQ0OTIsNTQ0OTUsNTQ1MDQsNTQ1MDgsNTQ1MTIsNTQ1MjAsNTQ1MjMsNTQ1MjUsNTQ1MzIsNTQ1MzYsNTQ1NDAsNTQ1NDgsNTQ1NDksNTQ1NTEsNTQ1ODgsNTQ1ODksNTQ1OTIsNTQ1OTYsNTQ2MDQsNTQ2MDUsNTQ2MDcs''@;'; put 'put ''NTQ2MDksNTQ2MTYsNTQ2MTcsNTQ2MjAsNTQ2MjQsNTQ2MjksNTQ2MzIsNTQ2MzMsNTQ2MzUsNTQ2MzcsNTQ2NDQsNTQ2NDUsNTQ2NDgsNTQ2NTIsNTQ2NjAsNTQ2NjEsNTQ2NjMsNTQ2NjQsNTQ2NjUsNTQ2NzIsNTQ2OTMsNTQ3MjgsNTQ3MjksNTQ3MzIsNTQ3MzYsNTQ3MzgsNTQ3NDQsNTQ3''@;'; put 'put ''NDUsNTQ3NDcsNTQ3NDksNTQ3NTYsNTQ3NTcsNTQ3NjAsNTQ3NjQsNTQ3NzIsNTQ3NzMsNTQ3NzUsNTQ3NzcsNTQ3ODQsNTQ3ODUsNTQ3ODgsNTQ3OTIsNTQ4MDAsNTQ4MDEsNTQ4MDMsNTQ4MDQsNTQ4MDUsNTQ4MTIsNTQ4MTYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQ4MjAsNTQ4MjksNTQ4NDAsNTQ4NDEsNTQ4NDQsNTQ4NDgsNTQ4NTMsNTQ4NTYsNTQ4''@;'; put 'put ''NTcsNTQ4NTksNTQ4NjEsNTQ4NjUsNTQ4NjgsNTQ4NjksNTQ4NzIsNTQ4NzYsNTQ4ODcsNTQ4ODksNTQ4OTYsNTQ4OTcsNTQ5MDAsNTQ5MTUsNTQ5MTcsNTQ5MjQsNTQ5MjUsNTQ5MjgsNTQ5MzIsNTQ5NDEsNTQ5NDMsNTQ5NDUsNTQ5NTIsNTQ5NTYsNTQ5NjAsNTQ5NjksNTQ5NzEsNTQ5ODAs''@;'; put 'put ''NTQ5ODEsNTQ5ODQsNTQ5ODgsNTQ5OTMsNTQ5OTYsNTQ5OTksNTUwMDEsNTUwMDgsNTUwMTIsNTUwMTYsNTUwMjQsNTUwMjksNTUwMzYsNTUwMzcsNTUwNDAsNTUwNDQsNTUwNTcsNTUwNjQsNTUwNjUsNTUwNjgsNTUwNzIsNTUwODAsNTUwODEsNTUwODMsNTUwODUsNTUwOTIsNTUwOTMsNTUw''@;'; put 'put ''OTYsNTUxMDAsNTUxMDgsNTUxMTEsNTUxMTMsNTUxMjAsNTUxMjEsNTUxMjQsNTUxMjYsNTUxMjcsNTUxMjgsNTUxMjksNTUxMzYsNTUxMzcsNTUxMzksNTUxNDEsNTUxNDUsNTUxNDgsNTUxNTIsNTUxNTYsNTUxNjQsNTUxNjUsNTUxNjksNTUxNzYsNTUxNzcsNTUxODAsNTUxODQsNTUxOTIs''@;'; put 'put ''NTUxOTMsNTUxOTUsNTUxOTcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyMDI4NSwyMDMzOSwyMDU1MSwyMDcyOSwyMTE1MiwyMTQ4Nywy''@;'; put 'put ''MTYyMSwyMTczMywyMjAyNSwyMzIzMywyMzQ3OCwyNjI0NywyNjU1MCwyNjU1MSwyNjYwNywyNzQ2OCwyOTYzNCwzMDE0NiwzMTI5MiwzMzQ5OSwzMzU0MCwzNDkwMywzNDk1MiwzNTM4MiwzNjA0MCwzNjMwMywzNjYwMywzNjgzOCwzOTM4MSwyMTA1MSwyMTM2NCwyMTUwOCwyNDY4MiwyNDkz''@;'; put 'put ''MiwyNzU4MCwyOTY0NywzMzA1MCwzNTI1OCwzNTI4MiwzODMwNywyMDM1NSwyMTAwMiwyMjcxOCwyMjkwNCwyMzAxNCwyNDE3OCwyNDE4NSwyNTAzMSwyNTUzNiwyNjQzOCwyNjYwNCwyNjc1MSwyODU2NywzMDI4NiwzMDQ3NSwzMDk2NSwzMTI0MCwzMTQ4NywzMTc3NywzMjkyNSwzMzM5MCwz''@;'; put 'put ''MzM5MywzNTU2MywzODI5MSwyMDA3NSwyMTkxNywyNjM1OSwyODIxMiwzMDg4MywzMTQ2OSwzMzg4MywzNTA4OCwzNDYzOCwzODgyNCwyMTIwOCwyMjM1MCwyMjU3MCwyMzg4NCwyNDg2MywyNTAyMiwyNTEyMSwyNTk1NCwyNjU3NywyNzIwNCwyODE4NywyOTk3NiwzMDEzMSwzMDQzNSwzMDY0''@;'; put 'put ''MCwzMjA1OCwzNzAzOSwzNzk2OSwzNzk3MCw0MDg1MyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCwyMTI4MywyMzcyNCwzMDAwMiwzMjk4NywzNzQ0MCwzODI5NiwyMTA4MywyMjUzNiwyMzAwNCwyMzcxMywyMzgzMSwyNDI0NywyNDM3OCwyNDM5NCwyNDk1MSwyNzc0MywzMDA3NCwzMDA4NiwzMTk2OCwzMjExNSwzMjE3NywzMjY1MiwzMzEwOCwzMzMxMywzNDE5''@;'; put 'put ''MywzNTEzNywzNTYxMSwzNzYyOCwzODQ3Nyw0MDAwNywyMDE3MSwyMDIxNSwyMDQ5MSwyMDk3NywyMjYwNywyNDg4NywyNDg5NCwyNDkzNiwyNTkxMywyNzExNCwyODQzMywzMDExNywzMDM0MiwzMDQyMiwzMTYyMywzMzQ0NSwzMzk5NSw2Mzc0NCwzNzc5OSwzODI4MywyMTg4OCwyMzQ1OCwy''@;'; put 'put ''MjM1Myw2Mzc0NSwzMTkyMywzMjY5NywzNzMwMSwyMDUyMCwyMTQzNSwyMzYyMSwyNDA0MCwyNTI5OCwyNTQ1NCwyNTgxOCwyNTgzMSwyODE5MiwyODg0NCwzMTA2NywzNjMxNywzNjM4Miw2Mzc0NiwzNjk4OSwzNzQ0NSwzNzYyNCwyMDA5NCwyMDIxNCwyMDU4MSwyNDA2MiwyNDMxNCwyNDgz''@;'; put 'put ''OCwyNjk2NywzMzEzNywzNDM4OCwzNjQyMywzNzc0OSwzOTQ2NywyMDA2MiwyMDYyNSwyNjQ4MCwyNjY4OCwyMDc0NSwyMTEzMywyMTEzOCwyNzI5OCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzMDY1MiwzNzM5Miw0MDY2MCwyMTE2MywyNDYyMywzNjg1MCwyMDU1MiwyNTAwMSwyNTU4MSwyNTgwMiwyNjY4NCwyNzI2OCwyODYwOCwzMzE2MCwzNTIzMywzODU0''@;'; put 'put ''OCwyMjUzMywyOTMwOSwyOTM1NiwyOTk1NiwzMjEyMSwzMjM2NSwzMjkzNywzNTIxMSwzNTcwMCwzNjk2Myw0MDI3MywyNTIyNSwyNzc3MCwyODUwMCwzMjA4MCwzMjU3MCwzNTM2MywyMDg2MCwyNDkwNiwzMTY0NSwzNTYwOSwzNzQ2MywzNzc3MiwyMDE0MCwyMDQzNSwyMDUxMCwyMDY3MCwy''@;'; put 'put ''MDc0MiwyMTE4NSwyMTE5NywyMTM3NSwyMjM4NCwyMjY1OSwyNDIxOCwyNDQ2NSwyNDk1MCwyNTAwNCwyNTgwNiwyNTk2NCwyNjIyMywyNjI5OSwyNjM1NiwyNjc3NSwyODAzOSwyODgwNSwyODkxMywyOTg1NSwyOTg2MSwyOTg5OCwzMDE2OSwzMDgyOCwzMDk1NiwzMTQ1NSwzMTQ3OCwzMjA2''@;'; put 'put ''OSwzMjE0NywzMjc4OSwzMjgzMSwzMzA1MSwzMzY4NiwzNTY4NiwzNjYyOSwzNjg4NSwzNzg1NywzODkxNSwzODk2OCwzOTUxNCwzOTkxMiwyMDQxOCwyMTg0MywyMjU4NiwyMjg2NSwyMzM5NSwyMzYyMiwyNDc2MCwyNTEwNiwyNjY5MCwyNjgwMCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyNjg1NiwyODMzMCwzMDAyOCwzMDMyOCwzMDkyNiwzMTI5MywzMTk5''@;'; put 'put ''NSwzMjM2MywzMjM4MCwzNTMzNiwzNTQ4OSwzNTkwMywzODU0Miw0MDM4OCwyMTQ3NiwyMTQ4MSwyMTU3OCwyMTYxNywyMjI2NiwyMjk5MywyMzM5NiwyMzYxMSwyNDIzNSwyNTMzNSwyNTkxMSwyNTkyNSwyNTk3MCwyNjI3MiwyNjU0MywyNzA3MywyNzgzNywzMDIwNCwzMDM1MiwzMDU5MCwz''@;'; put 'put ''MTI5NSwzMjY2MCwzMjc3MSwzMjkyOSwzMzE2NywzMzUxMCwzMzUzMywzMzc3NiwzNDI0MSwzNDg2NSwzNDk5NiwzNTQ5Myw2Mzc0NywzNjc2NCwzNzY3OCwzODU5OSwzOTAxNSwzOTY0MCw0MDcyMywyMTc0MSwyNjAxMSwyNjM1NCwyNjc2NywzMTI5NiwzNTg5NSw0MDI4OCwyMjI1NiwyMjM3''@;'; put 'put ''MiwyMzgyNSwyNjExOCwyNjgwMSwyNjgyOSwyODQxNCwyOTczNiwzNDk3NCwzOTkwOCwyNzc1Miw2Mzc0OCwzOTU5MiwyMDM3OSwyMDg0NCwyMDg0OSwyMTE1MSwyMzM4MCwyNDAzNywyNDY1NiwyNDY4NSwyNTMyOSwyNTUxMSwyNTkxNSwyOTY1NywzMTM1NCwzNDQ2NywzNjAwMiwzODc5OSwy''@;'; put 'put ''MDAxOCwyMzUyMSwyNTA5NiwyNjUyNCwyOTkxNixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCwzMTE4NSwzMzc0NywzNTQ2MywzNTUwNiwzNjMyOCwzNjk0MiwzNzcwNywzODk4MiwyNDI3NSwyNzExMiwzNDMwMywzNzEwMSw2Mzc0OSwyMDg5NiwyMzQ0OCwyMzUzMiwyNDkzMSwyNjg3NCwyNzQ1NCwyODc0OCwyOTc0MywyOTkxMiwzMTY0OSwzMjU5MiwzMzczMywz''@;'; put 'put ''NTI2NCwzNjAxMSwzODM2NCwzOTIwOCwyMTAzOCwyNDY2OSwyNTMyNCwzNjg2NiwyMDM2MiwyMDgwOSwyMTI4MSwyMjc0NSwyNDI5MSwyNjMzNiwyNzk2MCwyODgyNiwyOTM3OCwyOTY1NCwzMTU2OCwzMzAwOSwzNzk3OSwyMTM1MCwyNTQ5OSwzMjYxOSwyMDA1NCwyMDYwOCwyMjYwMiwyMjc1''@;'; put 'put ''MCwyNDYxOCwyNDg3MSwyNTI5NiwyNzA4OCwzOTc0NSwyMzQzOSwzMjAyNCwzMjk0NSwzNjcwMywyMDEzMiwyMDY4OSwyMTY3NiwyMTkzMiwyMzMwOCwyMzk2OCwyNDAzOSwyNTg5OCwyNTkzNCwyNjY1NywyNzIxMSwyOTQwOSwzMDM1MCwzMDcwMywzMjA5NCwzMjc2MSwzMzE4NCwzNDEyNiwz''@;'; put 'put ''NDUyNywzNjYxMSwzNjY4NiwzNzA2NiwzOTE3MSwzOTUwOSwzOTg1MSwxOTk5MiwyMDAzNywyMDA2MSwyMDE2NywyMDQ2NSwyMDg1NSwyMTI0NixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyMTMxMiwyMTQ3NSwyMTQ3NywyMTY0NiwyMjAzNiwyMjM4OSwyMjQzNCwyMzQ5NSwyMzk0MywyNDI3MiwyNTA4NCwyNTMwNCwyNTkzNywyNjU1MiwyNjYwMSwyNzA4Mywy''@;'; put 'put ''NzQ3MiwyNzU5MCwyNzYyOCwyNzcxNCwyODMxNywyODc5MiwyOTM5OSwyOTU5MCwyOTY5OSwzMDY1NSwzMDY5NywzMTM1MCwzMjEyNywzMjc3NywzMzI3NiwzMzI4NSwzMzI5MCwzMzUwMywzNDkxNCwzNTYzNSwzNjA5MiwzNjU0NCwzNjg4MSwzNzA0MSwzNzQ3NiwzNzU1OCwzOTM3OCwzOTQ5''@;'; put 'put ''Myw0MDE2OSw0MDQwNyw0MDg2MCwyMjI4MywyMzYxNiwzMzczOCwzODgxNiwzODgyNyw0MDYyOCwyMTUzMSwzMTM4NCwzMjY3NiwzNTAzMywzNjU1NywzNzA4OSwyMjUyOCwyMzYyNCwyNTQ5NiwzMTM5MSwyMzQ3MCwyNDMzOSwzMTM1MywzMTQwNiwzMzQyMiwzNjUyNCwyMDUxOCwyMTA0OCwy''@;'; put 'put ''MTI0MCwyMTM2NywyMjI4MCwyNTMzMSwyNTQ1OCwyNzQwMiwyODA5OSwzMDUxOSwyMTQxMywyOTUyNywzNDE1MiwzNjQ3MCwzODM1NywyNjQyNiwyNzMzMSwyODUyOCwzNTQzNywzNjU1NiwzOTI0Myw2Mzc1MCwyNjIzMSwyNzUxMiwzNjAyMCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzOTc0MCw2Mzc1MSwyMTQ4MywyMjMxNywyMjg2MiwyNTU0MiwyNzEzMSwy''@;'; put 'put ''OTY3NCwzMDc4OSwzMTQxOCwzMTQyOSwzMTk5OCwzMzkwOSwzNTIxNSwzNjIxMSwzNjkxNywzODMxMiwyMTI0MywyMjM0MywzMDAyMywzMTU4NCwzMzc0MCwzNzQwNiw2Mzc1MiwyNzIyNCwyMDgxMSwyMTA2NywyMTEyNywyNTExOSwyNjg0MCwyNjk5NywzODU1MywyMDY3NywyMTE1NiwyMTIy''@;'; put 'put ''MCwyNTAyNywyNjAyMCwyNjY4MSwyNzEzNSwyOTgyMiwzMTU2MywzMzQ2NSwzMzc3MSwzNTI1MCwzNTY0MSwzNjgxNywzOTI0MSw2Mzc1MywyMDE3MCwyMjkzNSwyNTgxMCwyNjEyOSwyNzI3OCwyOTc0OCwzMTEwNSwzMTE2NSwzMzQ0OSwzNDk0MiwzNDk0MywzNTE2Nyw2Mzc1NCwzNzY3MCwy''@;'; put 'put ''MDIzNSwyMTQ1MCwyNDYxMywyNTIwMSwyNzc2MiwzMjAyNiwzMjEwMiwyMDEyMCwyMDgzNCwzMDY4NCwzMjk0MywyMDIyNSwyMDIzOCwyMDg1NCwyMDg2NCwyMTk4MCwyMjEyMCwyMjMzMSwyMjUyMiwyMjUyNCwyMjgwNCwyMjg1NSwyMjkzMSwyMzQ5MiwyMzY5NiwyMzgyMiwyNDA0OSwyNDE5''@;'; put 'put ''MCwyNDUyNCwyNTIxNiwyNjA3MSwyNjA4MyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCwyNjM5OCwyNjM5OSwyNjQ2MiwyNjgyNywyNjgyMCwyNzIzMSwyNzQ1MCwyNzY4MywyNzc3MywyNzc3OCwyODEwMywyOTU5MiwyOTczNCwyOTczOCwyOTgyNiwyOTg1OSwzMDA3MiwzMDA3OSwzMDg0OSwzMDk1OSwzMTA0MSwzMTA0NywzMTA0OCwzMTA5OCwzMTYzNywzMmUz''@;'; put 'put ''LDMyMTg2LDMyNjQ4LDMyNzc0LDMyODEzLDMyOTA4LDM1MzUyLDM1NjYzLDM1OTEyLDM2MjE1LDM3NjY1LDM3NjY4LDM5MTM4LDM5MjQ5LDM5NDM4LDM5NDM5LDM5NTI1LDQwNTk0LDMyMjAyLDIwMzQyLDIxNTEzLDI1MzI2LDI2NzA4LDM3MzI5LDIxOTMxLDIwNzk0LDYzNzU1LDYzNzU2LDIz''@;'; put 'put ''MDY4LDI1MDYyLDYzNzU3LDI1Mjk1LDI1MzQzLDYzNzU4LDYzNzU5LDYzNzYwLDYzNzYxLDYzNzYyLDYzNzYzLDM3MDI3LDYzNzY0LDYzNzY1LDYzNzY2LDYzNzY3LDYzNzY4LDM1NTgyLDYzNzY5LDYzNzcwLDYzNzcxLDYzNzcyLDI2MjYyLDYzNzczLDI5MDE0LDYzNzc0LDYzNzc1LDM4NjI3''@;'; put 'put ''LDYzNzc2LDI1NDIzLDI1NDY2LDIxMzM1LDYzNzc3LDI2NTExLDI2OTc2LDI4Mjc1LDYzNzc4LDMwMDA3LDYzNzc5LDYzNzgwLDYzNzgxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDMyMDEzLDYzNzgyLDYzNzgzLDM0OTMwLDIyMjE4LDIzMDY0LDYzNzg0LDYzNzg1LDYzNzg2LDYzNzg3LDYzNzg4LDIwMDM1LDYzNzg5LDIwODM5LDIyODU2LDI2NjA4LDMyNzg0''@;'; put 'put ''LDYzNzkwLDIyODk5LDI0MTgwLDI1NzU0LDMxMTc4LDI0NTY1LDI0Njg0LDI1Mjg4LDI1NDY3LDIzNTI3LDIzNTExLDIxMTYyLDYzNzkxLDIyOTAwLDI0MzYxLDI0NTk0LDYzNzkyLDYzNzkzLDYzNzk0LDI5Nzg1LDYzNzk1LDYzNzk2LDYzNzk3LDYzNzk4LDYzNzk5LDYzODAwLDM5Mzc3LDYz''@;'; put 'put ''ODAxLDYzODAyLDYzODAzLDYzODA0LDYzODA1LDYzODA2LDYzODA3LDYzODA4LDYzODA5LDYzODEwLDYzODExLDI4NjExLDYzODEyLDYzODEzLDMzMjE1LDM2Nzg2LDI0ODE3LDYzODE0LDYzODE1LDMzMTI2LDYzODE2LDYzODE3LDIzNjE1LDYzODE4LDYzODE5LDYzODIwLDYzODIxLDYzODIy''@;'; put 'put ''LDYzODIzLDYzODI0LDYzODI1LDIzMjczLDM1MzY1LDI2NDkxLDMyMDE2LDYzODI2LDYzODI3LDYzODI4LDYzODI5LDYzODMwLDYzODMxLDMzMDIxLDYzODMyLDYzODMzLDIzNjEyLDI3ODc3LDIxMzExLDI4MzQ2LDIyODEwLDMzNTkwLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDIwMDI1LDIwMTUwLDIwMjk0LDIxOTM0LDIyMjk2LDIyNzI3LDI0NDA2LDI2MDM5''@;'; put 'put ''LDI2MDg2LDI3MjY0LDI3NTczLDI4MjM3LDMwNzAxLDMxNDcxLDMxNzc0LDMyMjIyLDM0NTA3LDM0OTYyLDM3MTcwLDM3NzIzLDI1Nzg3LDI4NjA2LDI5NTYyLDMwMTM2LDM2OTQ4LDIxODQ2LDIyMzQ5LDI1MDE4LDI1ODEyLDI2MzExLDI4MTI5LDI4MjUxLDI4NTI1LDI4NjAxLDMwMTkyLDMy''@;'; put 'put ''ODM1LDMzMjEzLDM0MTEzLDM1MjAzLDM1NTI3LDM1Njc0LDM3NjYzLDI3Nzk1LDMwMDM1LDMxNTcyLDM2MzY3LDM2OTU3LDIxNzc2LDIyNTMwLDIyNjE2LDI0MTYyLDI1MDk1LDI1NzU4LDI2ODQ4LDMwMDcwLDMxOTU4LDM0NzM5LDQwNjgwLDIwMTk1LDIyNDA4LDIyMzgyLDIyODIzLDIzNTY1''@;'; put 'put ''LDIzNzI5LDI0MTE4LDI0NDUzLDI1MTQwLDI1ODI1LDI5NjE5LDMzMjc0LDM0OTU1LDM2MDI0LDM4NTM4LDQwNjY3LDIzNDI5LDI0NTAzLDI0NzU1LDIwNDk4LDIwOTkyLDIxMDQwLDIyMjk0LDIyNTgxLDIyNjE1LDIzNTY2LDIzNjQ4LDIzNzk4LDIzOTQ3LDI0MjMwLDI0NDY2LDI0NzY0LDI1''@;'; put 'put ''MzYxLDI1NDgxLDI1NjIzLDI2NjkxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLDI2ODczLDI3MzMwLDI4MTIwLDI4MTkzLDI4MzcyLDI4NjQ0LDI5MTgyLDMwNDI4LDMwNTg1LDMxMTUzLDMxMjkxLDMzNzk2LDM1MjQxLDM2MDc3LDM2MzM5LDM2NDI0LDM2ODY3LDM2ODg0LDM2OTQ3LDM3MTE3LDM3NzA5LDM4NTE4LDM4ODc2LDI3NjAyLDI4Njc4LDI5MjcyLDI5''@;'; put 'put ''MzQ2LDI5NTQ0LDMwNTYzLDMxMTY3LDMxNzE2LDMyNDExLDM1NzEyLDIyNjk3LDI0Nzc1LDI1OTU4LDI2MTA5LDI2MzAyLDI3Nzg4LDI4OTU4LDI5MTI5LDM1OTMwLDM4OTMxLDIwMDc3LDMxMzYxLDIwMTg5LDIwOTA4LDIwOTQxLDIxMjA1LDIxNTE2LDI0OTk5LDI2NDgxLDI2NzA0LDI2ODQ3''@;'; put 'put ''LDI3OTM0LDI4NTQwLDMwMTQwLDMwNjQzLDMxNDYxLDMzMDEyLDMzODkxLDM3NTA5LDIwODI4LDI2MDA3LDI2NDYwLDI2NTE1LDMwMTY4LDMxNDMxLDMzNjUxLDYzODM0LDM1OTEwLDM2ODg3LDM4OTU3LDIzNjYzLDMzMjE2LDMzNDM0LDM2OTI5LDM2OTc1LDM3Mzg5LDI0NDcxLDIzOTY1LDI3''@;'; put 'put ''MjI1LDI5MTI4LDMwMzMxLDMxNTYxLDM0Mjc2LDM1NTg4LDM3MTU5LDM5NDcyLDIxODk1LDI1MDc4LDYzODM1LDMwMzEzLDMyNjQ1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDM0MzY3LDM0NzQ2LDM1MDY0LDM3MDA3LDYzODM2LDI3OTMxLDI4ODg5LDI5NjYyLDMyMDk3LDMzODUzLDYzODM3LDM3MjI2LDM5NDA5LDYzODM4LDIwMDk4LDIxMzY1LDI3Mzk2LDI3''@;'; put 'put ''NDEwLDI4NzM0LDI5MjExLDM0MzQ5LDQwNDc4LDIxMDY4LDM2NzcxLDIzODg4LDI1ODI5LDI1OTAwLDI3NDE0LDI4NjUxLDMxODExLDMyNDEyLDM0MjUzLDM1MTcyLDM1MjYxLDI1Mjg5LDMzMjQwLDM0ODQ3LDI0MjY2LDI2MzkxLDI4MDEwLDI5NDM2LDI5NzAxLDI5ODA3LDM0NjkwLDM3MDg2''@;'; put 'put ''LDIwMzU4LDIzODIxLDI0NDgwLDMzODAyLDIwOTE5LDI1NTA0LDMwMDUzLDIwMTQyLDIwNDg2LDIwODQxLDIwOTM3LDI2NzUzLDI3MTUzLDMxOTE4LDMxOTIxLDMxOTc1LDMzMzkxLDM1NTM4LDM2NjM1LDM3MzI3LDIwNDA2LDIwNzkxLDIxMjM3LDIxNTcwLDI0MzAwLDI0OTQyLDI1MTUwLDI2''@;'; put 'put ''MDUzLDI3MzU0LDI4NjcwLDMxMDE4LDM0MjY4LDM0ODUxLDM4MzE3LDM5NTIyLDM5NTMwLDQwNTk5LDQwNjU0LDIxMTQ3LDI2MzEwLDI3NTExLDI4NzAxLDMxMDE5LDM2NzA2LDM4NzIyLDI0OTc2LDI1MDg4LDI1ODkxLDI4NDUxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDI5MDAxLDI5ODMzLDMyMjQ0LDMyODc5LDM0MDMwLDM2NjQ2LDM2ODk5LDM3NzA2LDIw''@;'; put 'put ''OTI1LDIxMDE1LDIxMTU1LDI3OTE2LDI4ODcyLDM1MDEwLDI0MjY1LDI1OTg2LDI3NTY2LDI4NjEwLDMxODA2LDI5NTU3LDIwMTk2LDIwMjc4LDIyMjY1LDYzODM5LDIzNzM4LDIzOTk0LDI0NjA0LDI5NjE4LDMxNTMzLDMyNjY2LDMyNzE4LDMyODM4LDM2ODk0LDM3NDI4LDM4NjQ2LDM4NzI4''@;'; put 'put ''LDM4OTM2LDQwODAxLDIwMzYzLDI4NTgzLDMxMTUwLDM3MzAwLDM4NTgzLDIxMjE0LDYzODQwLDI1NzM2LDI1Nzk2LDI3MzQ3LDI4NTEwLDI4Njk2LDI5MjAwLDMwNDM5LDMyNzY5LDM0MzEwLDM0Mzk2LDM2MzM1LDM2NjEzLDM4NzA2LDM5NzkxLDQwNDQyLDQwNTY1LDMwODYwLDMxMTAzLDMy''@;'; put 'put ''MTYwLDMzNzM3LDM3NjM2LDQwNTc1LDQwNTk1LDM1NTQyLDIyNzUxLDI0MzI0LDI2NDA3LDI4NzExLDI5OTAzLDMxODQwLDMyODk0LDIwNzY5LDI4NzEyLDI5MjgyLDMwOTIyLDM2MDM0LDM2MDU4LDM2MDg0LDM4NjQ3LDIwMTAyLDIwNjk4LDIzNTM0LDI0Mjc4LDI2MDA5LDI5MTM0LDMwMjc0''@;'; put 'put ''LDMwNjM3LDMyODQyLDM0MDQ0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLDM2OTg4LDM5NzE5LDQwODQ1LDIyNzQ0LDIzMTA1LDIzNjUwLDI3MTU1LDI4MTIyLDI4NDMxLDMwMjY3LDMyMDQ3LDMyMzExLDM0MDc4LDM1MTI4LDM3ODYwLDM4NDc1LDIxMTI5LDI2MDY2LDI2NjExLDI3MDYwLDI3OTY5LDI4MzE2LDI4Njg3LDI5NzA1LDI5NzkyLDMwMDQxLDMwMjQ0''@;'; put 'put ''LDMwODI3LDM1NjI4LDM5MDA2LDIwODQ1LDI1MTM0LDM4NTIwLDIwMzc0LDIwNTIzLDIzODMzLDI4MTM4LDMyMTg0LDM2NjUwLDI0NDU5LDI0OTAwLDI2NjQ3LDYzODQxLDM4NTM0LDIxMjAyLDMyOTA3LDIwOTU2LDIwOTQwLDI2OTc0LDMxMjYwLDMyMTkwLDMzNzc3LDM4NTE3LDIwNDQyLDIx''@;'; put 'put ''MDMzLDIxNDAwLDIxNTE5LDIxNzc0LDIzNjUzLDI0NzQzLDI2NDQ2LDI2NzkyLDI4MDEyLDI5MzEzLDI5NDMyLDI5NzAyLDI5ODI3LDYzODQyLDMwMTc4LDMxODUyLDMyNjMzLDMyNjk2LDMzNjczLDM1MDIzLDM1MDQxLDM3MzI0LDM3MzI4LDM4NjI2LDM5ODgxLDIxNTMzLDI4NTQyLDI5MTM2''@;'; put 'put ''LDI5ODQ4LDM0Mjk4LDM2NTIyLDM4NTYzLDQwMDIzLDQwNjA3LDI2NTE5LDI4MTA3LDI5NzQ3LDMzMjU2LDM4Njc4LDMwNzY0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDMxNDM1LDMxNTIwLDMxODkwLDI1NzA1LDI5ODAyLDMwMTk0LDMwOTA4LDMwOTUyLDM5MzQwLDM5NzY0LDQwNjM1LDIzNTE4LDI0MTQ5LDI4NDQ4LDMzMTgwLDMzNzA3LDM3ZTMsMTk5NzUs''@;'; put 'put ''MjEzMjUsMjMwODEsMjQwMTgsMjQzOTgsMjQ5MzAsMjU0MDUsMjYyMTcsMjYzNjQsMjg0MTUsMjg0NTksMjg3NzEsMzA2MjIsMzM4MzYsMzQwNjcsMzQ4NzUsMzY2MjcsMzkyMzcsMzk5OTUsMjE3ODgsMjUyNzMsMjY0MTEsMjc4MTksMzM1NDUsMzUxNzgsMzg3NzgsMjAxMjksMjI5MTYsMjQ1''@;'; put 'put ''MzYsMjQ1MzcsMjYzOTUsMzIxNzgsMzI1OTYsMzM0MjYsMzM1NzksMzM3MjUsMzY2MzgsMzcwMTcsMjI0NzUsMjI5NjksMjMxODYsMjM1MDQsMjYxNTEsMjY1MjIsMjY3NTcsMjc1OTksMjkwMjgsMzI2MjksMzYwMjMsMzYwNjcsMzY5OTMsMzk3NDksMzMwMzIsMzU5NzgsMzg0NzYsMzk0ODgs''@;'; put 'put ''NDA2MTMsMjMzOTEsMjc2NjcsMjk0NjcsMzA0NTAsMzA0MzEsMzM4MDQsMjA5MDYsMzUyMTksMjA4MTMsMjA4ODUsMjExOTMsMjY4MjUsMjc3OTYsMzA0NjgsMzA0OTYsMzIxOTEsMzIyMzYsMzg3NTQsNDA2MjksMjgzNTcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMzQwNjUsMjA5MDEsMjE1MTcsMjE2MjksMjYxMjYsMjYyNjksMjY5MTksMjgzMTksMzAzOTks''@;'; put 'put ''MzA2MDksMzM1NTksMzM5ODYsMzQ3MTksMzcyMjUsMzc1MjgsNDAxODAsMzQ5NDYsMjAzOTgsMjA4ODIsMjEyMTUsMjI5ODIsMjQxMjUsMjQ5MTcsMjU3MjAsMjU3MjEsMjYyODYsMjY1NzYsMjcxNjksMjc1OTcsMjc2MTEsMjkyNzksMjkyODEsMjk3NjEsMzA1MjAsMzA2ODMsMzI3OTEsMzM0''@;'; put 'put ''NjgsMzM1NDEsMzU1ODQsMzU2MjQsMzU5ODAsMjY0MDgsMjc3OTIsMjkyODcsMzA0NDYsMzA1NjYsMzEzMDIsNDAzNjEsMjc1MTksMjc3OTQsMjI4MTgsMjY0MDYsMzM5NDUsMjEzNTksMjI2NzUsMjI5MzcsMjQyODcsMjU1NTEsMjYxNjQsMjY0ODMsMjgyMTgsMjk0ODMsMzE0NDcsMzM0OTUs''@;'; put 'put ''Mzc2NzIsMjEyMDksMjQwNDMsMjUwMDYsMjUwMzUsMjUwOTgsMjUyODcsMjU3NzEsMjYwODAsMjY5NjksMjc0OTQsMjc1OTUsMjg5NjEsMjk2ODcsMzAwNDUsMzIzMjYsMzMzMTAsMzM1MzgsMzQxNTQsMzU0OTEsMzYwMzEsMzg2OTUsNDAyODksMjI2OTYsNDA2NjQsMjA0OTcsMjEwMDYsMjE1''@;'; put 'put ''NjMsMjE4MzksMjU5OTEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''Mjc3NjYsMzIwMTAsMzIwMTEsMzI4NjIsMzQ0NDIsMzgyNzIsMzg2MzksMjEyNDcsMjc3OTcsMjkyODksMjE2MTksMjMxOTQsMjM2MTQsMjM4ODMsMjQzOTYsMjQ0OTQsMjY0MTAsMjY4MDYsMjY5NzksMjgyMjAsMjgyMjgsMzA0NzMsMzE4NTksMzI2NTQsMzQxODMsMzU1OTgsMzY4NTUsMzg3''@;'; put 'put ''NTMsNDA2OTIsMjM3MzUsMjQ3NTgsMjQ4NDUsMjUwMDMsMjU5MzUsMjYxMDcsMjYxMDgsMjc2NjUsMjc4ODcsMjk1OTksMjk2NDEsMzIyMjUsMzgyOTIsMjM0OTQsMzQ1ODgsMzU2MDAsMjEwODUsMjEzMzgsMjUyOTMsMjU2MTUsMjU3NzgsMjY0MjAsMjcxOTIsMjc4NTAsMjk2MzIsMjk4NTQs''@;'; put 'put ''MzE2MzYsMzE4OTMsMzIyODMsMzMxNjIsMzMzMzQsMzQxODAsMzY4NDMsMzg2NDksMzkzNjEsMjAyNzYsMjEzMjIsMjE0NTMsMjE0NjcsMjUyOTIsMjU2NDQsMjU4NTYsMjYwMDEsMjcwNzUsMjc4ODYsMjg1MDQsMjk2NzcsMzAwMzYsMzAyNDIsMzA0MzYsMzA0NjAsMzA5MjgsMzA5NzEsMzEw''@;'; put 'put ''MjAsMzIwNzAsMzMzMjQsMzQ3ODQsMzY4MjAsMzg5MzAsMzkxNTEsMjExODcsMjUzMDAsMjU3NjUsMjgxOTYsMjg0OTcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMzAzMzIsMzYyOTksMzcyOTcsMzc0NzQsMzk2NjIsMzk3NDcsMjA1MTUsMjA2MjEsMjIzNDYsMjI5NTIsMjM1OTIsMjQxMzUsMjQ0MzksMjUxNTEsMjU5MTgsMjYwNDEsMjYwNDksMjYxMjEsMjY1''@;'; put 'put ''MDcsMjcwMzYsMjgzNTQsMzA5MTcsMzIwMzMsMzI5MzgsMzMxNTIsMzMzMjMsMzM0NTksMzM5NTMsMzQ0NDQsMzUzNzAsMzU2MDcsMzcwMzAsMzg0NTAsNDA4NDgsMjA0OTMsMjA0NjcsNjM4NDMsMjI1MjEsMjQ0NzIsMjUzMDgsMjU0OTAsMjY0NzksMjgyMjcsMjg5NTMsMzA0MDMsMzI5NzIs''@;'; put 'put ''MzI5ODYsMzUwNjAsMzUwNjEsMzUwOTcsMzYwNjQsMzY2NDksMzcxOTcsMzg1MDYsMjAyNzEsMjAzMzYsMjQwOTEsMjY1NzUsMjY2NTgsMzAzMzMsMzAzMzQsMzk3NDgsMjQxNjEsMjcxNDYsMjkwMzMsMjkxNDAsMzAwNTgsNjM4NDQsMzIzMjEsMzQxMTUsMzQyODEsMzkxMzIsMjAyNDAsMzE1''@;'; put 'put ''NjcsMzI2MjQsMzgzMDksMjA5NjEsMjQwNzAsMjY4MDUsMjc3MTAsMjc3MjYsMjc4NjcsMjkzNTksMzE2ODQsMzM1MzksMjc4NjEsMjk3NTQsMjA3MzEsMjExMjgsMjI3MjEsMjU4MTYsMjcyODcsMjk4NjMsMzAyOTQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMzA4ODcsMzQzMjcsMzgzNzAsMzg3MTMsNjM4NDUsMjEzNDIsMjQzMjEsMzU3MjIsMzY3NzYsMzY3''@;'; put 'put ''ODMsMzcwMDIsMjEwMjksMzA2MjksNDAwMDksNDA3MTIsMTk5OTMsMjA0ODIsMjA4NTMsMjM2NDMsMjQxODMsMjYxNDIsMjYxNzAsMjY1NjQsMjY4MjEsMjg4NTEsMjk5NTMsMzAxNDksMzExNzcsMzE0NTMsMzY2NDcsMzkyMDAsMzk0MzIsMjA0NDUsMjI1NjEsMjI1NzcsMjM1NDIsMjYyMjIs''@;'; put 'put ''Mjc0OTMsMjc5MjEsMjgyODIsMjg1NDEsMjk2NjgsMjk5OTUsMzM3NjksMzUwMzYsMzUwOTEsMzU2NzYsMzY2MjgsMjAyMzksMjA2OTMsMjEyNjQsMjEzNDAsMjM0NDMsMjQ0ODksMjYzODEsMzExMTksMzMxNDUsMzM1ODMsMzQwNjgsMzUwNzksMzUyMDYsMzY2NjUsMzY2NjcsMzkzMzMsMzk5''@;'; put 'put ''NTQsMjY0MTIsMjAwODYsMjA0NzIsMjI4NTcsMjM1NTMsMjM3OTEsMjM3OTIsMjU0NDcsMjY4MzQsMjg5MjUsMjkwOTAsMjk3MzksMzIyOTksMzQwMjgsMzQ1NjIsMzY4OTgsMzc1ODYsNDAxNzksMTk5ODEsMjAxODQsMjA0NjMsMjA2MTMsMjEwNzgsMjExMDMsMjE1NDIsMjE2NDgsMjI0OTYs''@;'; put 'put ''MjI4MjcsMjMxNDIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMjMz''@;'; put 'put ''ODYsMjM0MTMsMjM1MDAsMjQyMjAsNjM4NDYsMjUyMDYsMjU5NzUsMjYwMjMsMjgwMTQsMjgzMjUsMjkyMzgsMzE1MjYsMzE4MDcsMzI1NjYsMzMxMDQsMzMxMDUsMzMxNzgsMzMzNDQsMzM0MzMsMzM3MDUsMzUzMzEsMzZlMywzNjA3MCwzNjA5MSwzNjIxMiwzNjI4MiwzNzA5NiwzNzM0MCwz''@;'; put 'put ''ODQyOCwzODQ2OCwzOTM4NSw0MDE2NywyMTI3MSwyMDk5OCwyMTU0NSwyMjEzMiwyMjcwNywyMjg2OCwyMjg5NCwyNDU3NSwyNDk5NiwyNTE5OCwyNjEyOCwyNzc3NCwyODk1NCwzMDQwNiwzMTg4MSwzMTk2NiwzMjAyNywzMzQ1MiwzNjAzMywzODY0MCw2Mzg0NywyMDMxNSwyNDM0MywyNDQ0''@;'; put 'put ''NywyNTI4MiwyMzg0OSwyNjM3OSwyNjg0MiwzMDg0NCwzMjMyMyw0MDMwMCwxOTk4OSwyMDYzMywyMTI2OSwyMTI5MCwyMTMyOSwyMjkxNSwyMzEzOCwyNDE5OSwyNDc1NCwyNDk3MCwyNTE2MSwyNTIwOSwyNmUzLDI2NTAzLDI3MDQ3LDI3NjA0LDI3NjA2LDI3NjA3LDI3NjA4LDI3ODMyLDYz''@;'; put 'put ''ODQ4LDI5NzQ5LDMwMjAyLDMwNzM4LDMwODY1LDMxMTg5LDMxMTkyLDMxODc1LDMyMjAzLDMyNzM3LDMyOTMzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDMzMDg2LDMzMjE4LDMzNzc4LDM0NTg2LDM1MDQ4LDM1NTEzLDM1NjkyLDM2MDI3LDM3MTQ1LDM4NzUwLDM5MTMxLDQwNzYzLDIyMTg4LDIzMzM4LDI0NDI4LDI1OTk2LDI3MzE1LDI3NTY3LDI3OTk2LDI4''@;'; put 'put ''NjU3LDI4NjkzLDI5Mjc3LDI5NjEzLDM2MDA3LDM2MDUxLDM4OTcxLDI0OTc3LDI3NzAzLDMyODU2LDM5NDI1LDIwMDQ1LDIwMTA3LDIwMTIzLDIwMTgxLDIwMjgyLDIwMjg0LDIwMzUxLDIwNDQ3LDIwNzM1LDIxNDkwLDIxNDk2LDIxNzY2LDIxOTg3LDIyMjM1LDIyNzYzLDIyODgyLDIzMDU3''@;'; put 'put ''LDIzNTMxLDIzNTQ2LDIzNTU2LDI0MDUxLDI0MTA3LDI0NDczLDI0NjA1LDI1NDQ4LDI2MDEyLDI2MDMxLDI2NjE0LDI2NjE5LDI2Nzk3LDI3NTE1LDI3ODAxLDI3ODYzLDI4MTk1LDI4NjgxLDI5NTA5LDMwNzIyLDMxMDM4LDMxMDQwLDMxMDcyLDMxMTY5LDMxNzIxLDMyMDIzLDMyMTE0LDMy''@;'; put 'put ''OTAyLDMzMjkzLDMzNjc4LDM0MDAxLDM0NTAzLDM1MDM5LDM1NDA4LDM1NDIyLDM1NjEzLDM2MDYwLDM2MTk4LDM2NzgxLDM3MDM0LDM5MTY0LDM5MzkxLDQwNjA1LDIxMDY2LDYzODQ5LDI2Mzg4LDYzODUwLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDIwNjMyLDIxMDM0LDIzNjY1LDI1OTU1LDI3NzMzLDI5NjQyLDI5OTg3LDMwMTA5LDMxNjM5LDMzOTQ4LDM3''@;'; put 'put ''MjQwLDM4NzA0LDIwMDg3LDI1NzQ2LDI3NTc4LDI5MDIyLDM0MjE3LDE5OTc3LDYzODUxLDI2NDQxLDI2ODYyLDI4MTgzLDMzNDM5LDM0MDcyLDM0OTIzLDI1NTkxLDI4NTQ1LDM3Mzk0LDM5MDg3LDE5OTc4LDIwNjYzLDIwNjg3LDIwNzY3LDIxODMwLDIxOTMwLDIyMDM5LDIzMzYwLDIzNTc3''@;'; put 'put ''LDIzNzc2LDI0MTIwLDI0MjAyLDI0MjI0LDI0MjU4LDI0ODE5LDI2NzA1LDI3MjMzLDI4MjQ4LDI5MjQ1LDI5MjQ4LDI5Mzc2LDMwNDU2LDMxMDc3LDMxNjY1LDMyNzI0LDM1MDU5LDM1MzE2LDM1NDQzLDM1OTM3LDM2MDYyLDM4Njg0LDIyNjIyLDI5ODg1LDM2MDkzLDIxOTU5LDYzODUyLDMx''@;'; put 'put ''MzI5LDMyMDM0LDMzMzk0LDI5Mjk4LDI5OTgzLDI5OTg5LDYzODUzLDMxNTEzLDIyNjYxLDIyNzc5LDIzOTk2LDI0MjA3LDI0MjQ2LDI0NDY0LDI0NjYxLDI1MjM0LDI1NDcxLDI1OTMzLDI2MjU3LDI2MzI5LDI2MzYwLDI2NjQ2LDI2ODY2LDI5MzEyLDI5NzkwLDMxNTk4LDMyMTEwLDMyMjE0''@;'; put 'put ''LDMyNjI2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDMyOTk3LDMz''@;'; put 'put ''Mjk4LDM0MjIzLDM1MTk5LDM1NDc1LDM2ODkzLDM3NjA0LDQwNjUzLDQwNzM2LDIyODA1LDIyODkzLDI0MTA5LDI0Nzk2LDI2MTMyLDI2MjI3LDI2NTEyLDI3NzI4LDI4MTAxLDI4NTExLDMwNzA3LDMwODg5LDMzOTkwLDM3MzIzLDM3Njc1LDIwMTg1LDIwNjgyLDIwODA4LDIxODkyLDIzMzA3''@;'; put 'put ''LDIzNDU5LDI1MTU5LDI1OTgyLDI2MDU5LDI4MjEwLDI5MDUzLDI5Njk3LDI5NzY0LDI5ODMxLDI5ODg3LDMwMzE2LDMxMTQ2LDMyMjE4LDMyMzQxLDMyNjgwLDMzMTQ2LDMzMjAzLDMzMzM3LDM0MzMwLDM0Nzk2LDM1NDQ1LDM2MzIzLDM2OTg0LDM3NTIxLDM3OTI1LDM5MjQ1LDM5ODU0LDIx''@;'; put 'put ''MzUyLDIzNjMzLDI2OTY0LDI3ODQ0LDI3OTQ1LDI4MjAzLDMzMjkyLDM0MjAzLDM1MTMxLDM1MzczLDM1NDk4LDM4NjM0LDQwODA3LDIxMDg5LDI2Mjk3LDI3NTcwLDMyNDA2LDM0ODE0LDM2MTA5LDM4Mjc1LDM4NDkzLDI1ODg1LDI4MDQxLDI5MTY2LDYzODU0LDIyNDc4LDIyOTk1LDIzNDY4''@;'; put 'put ''LDI0NjE1LDI0ODI2LDI1MTA0LDI2MTQzLDI2MjA3LDI5NDgxLDI5Njg5LDMwNDI3LDMwNDY1LDMxNTk2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDMyODU0LDMyODgyLDMzMTI1LDM1NDg4LDM3MjY2LDE5OTkwLDIxMjE4LDI3NTA2LDI3OTI3LDMxMjM3LDMxNTQ1LDMyMDQ4LDYzODU1LDM2MDE2LDIxNDg0LDIyMDYzLDIyNjA5LDIzNDc3LDIzNTY3LDIzNTY5''@;'; put 'put ''LDI0MDM0LDI1MTUyLDI1NDc1LDI1NjIwLDI2MTU3LDI2ODAzLDI3ODM2LDI4MDQwLDI4MzM1LDI4NzAzLDI4ODM2LDI5MTM4LDI5OTkwLDMwMDk1LDMwMDk0LDMwMjMzLDMxNTA1LDMxNzEyLDMxNzg3LDMyMDMyLDMyMDU3LDM0MDkyLDM0MTU3LDM0MzExLDM1MzgwLDM2ODc3LDM2OTYxLDM3''@;'; put 'put ''MDQ1LDM3NTU5LDM4OTAyLDM5NDc5LDIwNDM5LDIzNjYwLDI2NDYzLDI4MDQ5LDMxOTAzLDMyMzk2LDM1NjA2LDM2MTE4LDM2ODk1LDIzNDAzLDI0MDYxLDI1NjEzLDMzOTg0LDM2OTU2LDM5MTM3LDI5NTc1LDIzNDM1LDI0NzMwLDI2NDk0LDI4MTI2LDM1MzU5LDM1NDk0LDM2ODY1LDM4OTI0''@;'; put 'put ''LDIxMDQ3LDYzODU2LDI4NzUzLDMwODYyLDM3NzgyLDM0OTI4LDM3MzM1LDIwNDYyLDIxNDYzLDIyMDEzLDIyMjM0LDIyNDAyLDIyNzgxLDIzMjM0LDIzNDMyLDIzNzIzLDIzNzQ0LDI0MTAxLDI0ODMzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDI1MTAxLDI1MTYzLDI1NDgwLDI1NjI4LDI1OTEwLDI1OTc2LDI3MTkzLDI3NTMwLDI3NzAwLDI3OTI5LDI4NDY1''@;'; put 'put ''LDI5MTU5LDI5NDE3LDI5NTYwLDI5NzAzLDI5ODc0LDMwMjQ2LDMwNTYxLDMxMTY4LDMxMzE5LDMxNDY2LDMxOTI5LDMyMTQzLDMyMTcyLDMyMzUzLDMyNjcwLDMzMDY1LDMzNTg1LDMzOTM2LDM0MDEwLDM0MjgyLDM0OTY2LDM1NTA0LDM1NzI4LDM2NjY0LDM2OTMwLDM2OTk1LDM3MjI4LDM3''@;'; put 'put ''NTI2LDM3NTYxLDM4NTM5LDM4NTY3LDM4NTY4LDM4NjE0LDM4NjU2LDM4OTIwLDM5MzE4LDM5NjM1LDM5NzA2LDIxNDYwLDIyNjU0LDIyODA5LDIzNDA4LDIzNDg3LDI4MTEzLDI4NTA2LDI5MDg3LDI5NzI5LDI5ODgxLDMyOTAxLDMzNzg5LDI0MDMzLDI0NDU1LDI0NDkwLDI0NjQyLDI2MDky''@;'; put 'put ''LDI2NjQyLDI2OTkxLDI3MjE5LDI3NTI5LDI3OTU3LDI4MTQ3LDI5NjY3LDMwNDYyLDMwNjM2LDMxNTY1LDMyMDIwLDMzMDU5LDMzMzA4LDMzNjAwLDM0MDM2LDM0MTQ3LDM1NDI2LDM1NTI0LDM3MjU1LDM3NjYyLDM4OTE4LDM5MzQ4LDI1MTAwLDM0ODk5LDM2ODQ4LDM3NDc3LDIzODE1LDIz''@;'; put 'put ''ODQ3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDIzOTEzLDI5Nzkx''@;'; put 'put ''LDMzMTgxLDM0NjY0LDI4NjI5LDI1MzQyLDMyNzIyLDM1MTI2LDM1MTg2LDE5OTk4LDIwMDU2LDIwNzExLDIxMjEzLDIxMzE5LDI1MjE1LDI2MTE5LDMyMzYxLDM0ODIxLDM4NDk0LDIwMzY1LDIxMjczLDIyMDcwLDIyOTg3LDIzMjA0LDIzNjA4LDIzNjMwLDIzNjI5LDI0MDY2LDI0MzM3LDI0''@;'; put 'put ''NjQzLDI2MDQ1LDI2MTU5LDI2MTc4LDI2NTU4LDI2NjEyLDI5NDY4LDMwNjkwLDMxMDM0LDMyNzA5LDMzOTQwLDMzOTk3LDM1MjIyLDM1NDMwLDM1NDMzLDM1NTUzLDM1OTI1LDM1OTYyLDIyNTE2LDIzNTA4LDI0MzM1LDI0Njg3LDI1MzI1LDI2ODkzLDI3NTQyLDI4MjUyLDI5MDYwLDMxNjk4''@;'; put 'put ''LDM0NjQ1LDM1NjcyLDM2NjA2LDM5MTM1LDM5MTY2LDIwMjgwLDIwMzUzLDIwNDQ5LDIxNjI3LDIzMDcyLDIzNDgwLDI0ODkyLDI2MDMyLDI2MjE2LDI5MTgwLDMwMDAzLDMxMDcwLDMyMDUxLDMzMTAyLDMzMjUxLDMzNjg4LDM0MjE4LDM0MjU0LDM0NTYzLDM1MzM4LDM2NTIzLDM2NzYzLDYz''@;'; put 'put ''ODU3LDM2ODA1LDIyODMzLDIzNDYwLDIzNTI2LDI0NzEzLDIzNTI5LDIzNTYzLDI0NTE1LDI3Nzc3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDYzODU4LDI4MTQ1LDI4NjgzLDI5OTc4LDMzNDU1LDM1NTc0LDIwMTYwLDIxMzEzLDYzODU5LDM4NjE3LDI3NjYzLDIwMTI2LDIwNDIwLDIwODE4LDIxODU0LDIzMDc3LDIzNzg0LDI1MTA1LDI5MjczLDMzNDY5LDMz''@;'; put 'put ''NzA2LDM0NTU4LDM0OTA1LDM1MzU3LDM4NDYzLDM4NTk3LDM5MTg3LDQwMjAxLDQwMjg1LDIyNTM4LDIzNzMxLDIzOTk3LDI0MTMyLDI0ODAxLDI0ODUzLDI1NTY5LDI3MTM4LDI4MTk3LDM3MTIyLDM3NzE2LDM4OTkwLDM5OTUyLDQwODIzLDIzNDMzLDIzNzM2LDI1MzUzLDI2MTkxLDI2Njk2''@;'; put 'put ''LDMwNTI0LDM4NTkzLDM4Nzk3LDM4OTk2LDM5ODM5LDI2MDE3LDM1NTg1LDM2NTU1LDM4MzMyLDIxODEzLDIzNzIxLDI0MDIyLDI0MjQ1LDI2MjYzLDMwMjg0LDMzNzgwLDM4MzQzLDIyNzM5LDI1Mjc2LDI5MzkwLDQwMjMyLDIwMjA4LDIyODMwLDI0NTkxLDI2MTcxLDI3NTIzLDMxMjA3LDQw''@;'; put 'put ''MjMwLDIxMzk1LDIxNjk2LDIyNDY3LDIzODMwLDI0ODU5LDI2MzI2LDI4MDc5LDMwODYxLDMzNDA2LDM4NTUyLDM4NzI0LDIxMzgwLDI1MjEyLDI1NDk0LDI4MDgyLDMyMjY2LDMzMDk5LDM4OTg5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDI3Mzg3LDMyNTg4LDQwMzY3LDQwNDc0LDIwMDYzLDIwNTM5LDIwOTE4LDIyODEyLDI0ODI1LDI1NTkwLDI2OTI4LDI5''@;'; put 'put ''MjQyLDMyODIyLDYzODYwLDM3MzI2LDI0MzY5LDYzODYxLDYzODYyLDMyMDA0LDMzNTA5LDMzOTAzLDMzOTc5LDM0Mjc3LDM2NDkzLDYzODYzLDIwMzM1LDYzODY0LDYzODY1LDIyNzU2LDIzMzYzLDI0NjY1LDI1NTYyLDI1ODgwLDI1OTY1LDI2MjY0LDYzODY2LDI2OTU0LDI3MTcxLDI3OTE1''@;'; put 'put ''LDI4NjczLDI5MDM2LDMwMTYyLDMwMjIxLDMxMTU1LDMxMzQ0LDYzODY3LDMyNjUwLDYzODY4LDM1MTQwLDYzODY5LDM1NzMxLDM3MzEyLDM4NTI1LDYzODcwLDM5MTc4LDIyMjc2LDI0NDgxLDI2MDQ0LDI4NDE3LDMwMjA4LDMxMTQyLDM1NDg2LDM5MzQxLDM5NzcwLDQwODEyLDIwNzQwLDI1''@;'; put 'put ''MDE0LDI1MjMzLDI3Mjc3LDMzMjIyLDIwNTQ3LDIyNTc2LDI0NDIyLDI4OTM3LDM1MzI4LDM1NTc4LDIzNDIwLDM0MzI2LDIwNDc0LDIwNzk2LDIyMTk2LDIyODUyLDI1NTEzLDI4MTUzLDIzOTc4LDI2OTg5LDIwODcwLDIwMTA0LDIwMzEzLDYzODcxLDYzODcyLDYzODczLDIyOTE0LDYzODc0''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDYzODc1LDI3NDg3LDI3''@;'; put 'put ''NzQxLDYzODc2LDI5ODc3LDMwOTk4LDYzODc3LDMzMjg3LDMzMzQ5LDMzNTkzLDM2NjcxLDM2NzAxLDYzODc4LDM5MTkyLDYzODc5LDYzODgwLDYzODgxLDIwMTM0LDYzODgyLDIyNDk1LDI0NDQxLDI2MTMxLDYzODgzLDYzODg0LDMwMTIzLDMyMzc3LDM1Njk1LDYzODg1LDM2ODcwLDM5NTE1''@;'; put 'put ''LDIyMTgxLDIyNTY3LDIzMDMyLDIzMDcxLDIzNDc2LDYzODg2LDI0MzEwLDYzODg3LDYzODg4LDI1NDI0LDI1NDAzLDYzODg5LDI2OTQxLDI3NzgzLDI3ODM5LDI4MDQ2LDI4MDUxLDI4MTQ5LDI4NDM2LDYzODkwLDI4ODk1LDI4OTgyLDI5MDE3LDYzODkxLDI5MTIzLDI5MTQxLDYzODkyLDMw''@;'; put 'put ''Nzk5LDMwODMxLDYzODkzLDMxNjA1LDMyMjI3LDYzODk0LDMyMzAzLDYzODk1LDM0ODkzLDM2NTc1LDYzODk2LDYzODk3LDYzODk4LDM3NDY3LDYzODk5LDQwMTgyLDYzOTAwLDYzOTAxLDYzOTAyLDI0NzA5LDI4MDM3LDYzOTAzLDI5MTA1LDYzOTA0LDYzOTA1LDM4MzIxLDIxNDIxLDYzOTA2''@;'; put 'put ''LDYzOTA3LDYzOTA4LDI2NTc5LDYzOTA5LDI4ODE0LDI4OTc2LDI5NzQ0LDMzMzk4LDMzNDkwLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDYzOTEwLDM4MzMxLDM5NjUzLDQwNTczLDI2MzA4LDYzOTExLDI5MTIxLDMzODY1LDYzOTEyLDYzOTEzLDIyNjAzLDYzOTE0LDYzOTE1LDIzOTkyLDI0NDMzLDYzOTE2LDI2MTQ0LDI2MjU0LDI3MDAxLDI3MDU0LDI3NzA0''@;'; put 'put ''LDI3ODkxLDI4MjE0LDI4NDgxLDI4NjM0LDI4Njk5LDI4NzE5LDI5MDA4LDI5MTUxLDI5NTUyLDYzOTE3LDI5Nzg3LDYzOTE4LDI5OTA4LDMwNDA4LDMxMzEwLDMyNDAzLDYzOTE5LDYzOTIwLDMzNTIxLDM1NDI0LDM2ODE0LDYzOTIxLDM3NzA0LDYzOTIyLDM4NjgxLDYzOTIzLDYzOTI0LDIw''@;'; put 'put ''MDM0LDIwNTIyLDYzOTI1LDIxZTMsMjE0NzMsMjYzNTUsMjc3NTcsMjg2MTgsMjk0NTAsMzA1OTEsMzEzMzAsMzM0NTQsMzQyNjksMzQzMDYsNjM5MjYsMzUwMjgsMzU0MjcsMzU3MDksMzU5NDcsNjM5MjcsMzc1NTUsNjM5MjgsMzg2NzUsMzg5MjgsMjAxMTYsMjAyMzcsMjA0MjUsMjA2NTgs''@;'; put 'put ''MjEzMjAsMjE1NjYsMjE1NTUsMjE5NzgsMjI2MjYsMjI3MTQsMjI4ODcsMjMwNjcsMjM1MjQsMjQ3MzUsNjM5MjksMjUwMzQsMjU5NDIsMjYxMTEsMjYyMTIsMjY3OTEsMjc3MzgsMjg1OTUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMjg4NzksMjkxMDAsMjk1MjIsMzE2MTMsMzQ1NjgsMzU0OTIsMzk5ODYsNDA3MTEsMjM2MjcsMjc3NzksMjk1MDgsMjk1Nzcs''@;'; put 'put ''Mzc0MzQsMjgzMzEsMjk3OTcsMzAyMzksMzEzMzcsMzIyNzcsMzQzMTQsMjA4MDAsMjI3MjUsMjU3OTMsMjk5MzQsMjk5NzMsMzAzMjAsMzI3MDUsMzcwMTMsMzg2MDUsMzkyNTIsMjgxOTgsMjk5MjYsMzE0MDEsMzE0MDIsMzMyNTMsMzQ1MjEsMzQ2ODAsMzUzNTUsMjMxMTMsMjM0MzYsMjM0''@;'; put 'put ''NTEsMjY3ODUsMjY4ODAsMjgwMDMsMjk2MDksMjk3MTUsMjk3NDAsMzA4NzEsMzIyMzMsMzI3NDcsMzMwNDgsMzMxMDksMzM2OTQsMzU5MTYsMzg0NDYsMzg5MjksMjYzNTIsMjQ0NDgsMjYxMDYsMjY1MDUsMjc3NTQsMjk1NzksMjA1MjUsMjMwNDMsMjc0OTgsMzA3MDIsMjI4MDYsMjM5MTYs''@;'; put 'put ''MjQwMTMsMjk0NzcsMzAwMzEsNjM5MzAsNjM5MzEsMjA3MDksMjA5ODUsMjI1NzUsMjI4MjksMjI5MzQsMjMwMDIsMjM1MjUsNjM5MzIsNjM5MzMsMjM5NzAsMjUzMDMsMjU2MjIsMjU3NDcsMjU4NTQsNjM5MzQsMjYzMzIsNjM5MzUsMjcyMDgsNjM5MzYsMjkxODMsMjk3OTYsNjM5MzcsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMzEzNjgsMzE0MDcsMzIzMjcs''@;'; put 'put ''MzIzNTAsMzI3NjgsMzMxMzYsNjM5MzgsMzQ3OTksMzUyMDEsMzU2MTYsMzY5NTMsNjM5MzksMzY5OTIsMzkyNTAsMjQ5NTgsMjc0NDIsMjgwMjAsMzIyODcsMzUxMDksMzY3ODUsMjA0MzMsMjA2NTMsMjA4ODcsMjExOTEsMjI0NzEsMjI2NjUsMjM0ODEsMjQyNDgsMjQ4OTgsMjcwMjksMjgw''@;'; put 'put ''NDQsMjgyNjMsMjgzNDIsMjkwNzYsMjk3OTQsMjk5OTIsMjk5OTYsMzI4ODMsMzM1OTIsMzM5OTMsMzYzNjIsMzc3ODAsMzc4NTQsNjM5NDAsMjAxMTAsMjAzMDUsMjA1OTgsMjA3NzgsMjE0NDgsMjE0NTEsMjE0OTEsMjM0MzEsMjM1MDcsMjM1ODgsMjQ4NTgsMjQ5NjIsMjYxMDAsMjkyNzUs''@;'; put 'put ''Mjk1OTEsMjk3NjAsMzA0MDIsMzEwNTYsMzExMjEsMzExNjEsMzIwMDYsMzI3MDEsMzM0MTksMzQyNjEsMzQzOTgsMzY4MDIsMzY5MzUsMzcxMDksMzczNTQsMzg1MzMsMzg2MzIsMzg2MzMsMjEyMDYsMjQ0MjMsMjYwOTMsMjYxNjEsMjY2NzEsMjkwMjAsMzEyODYsMzcwNTcsMzg5MjIsMjAx''@;'; put 'put ''MTMsNjM5NDEsMjcyMTgsMjc1NTAsMjg1NjAsMjkwNjUsMzI3OTIsMzM0NjQsMzQxMzEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMzY5MzksMzg1NDksMzg2NDIsMzg5MDcsMzQwNzQsMzk3MjksMjAxMTIsMjkwNjYsMzg1OTYsMjA4MDMsMjE0MDcsMjE3MjksMjIyOTEsMjIyOTAsMjI0MzUsMjMxOTUsMjMyMzYsMjM0OTEsMjQ2MTYsMjQ4OTUsMjU1ODgsMjc3''@;'; put 'put ''ODEsMjc5NjEsMjgyNzQsMjgzMDQsMjkyMzIsMjk1MDMsMjk3ODMsMzM0ODksMzQ5NDUsMzY2NzcsMzY5NjAsNjM5NDIsMzg0OTgsMzllMyw0MDIxOSwyNjM3NiwzNjIzNCwzNzQ3MCwyMDMwMSwyMDU1MywyMDcwMiwyMTM2MSwyMjI4NSwyMjk5NiwyMzA0MSwyMzU2MSwyNDk0NCwyNjI1Niwy''@;'; put 'put ''ODIwNSwyOTIzNCwyOTc3MSwzMjIzOSwzMjk2MywzMzgwNiwzMzg5NCwzNDExMSwzNDY1NSwzNDkwNywzNTA5NiwzNTU4NiwzNjk0OSwzODg1OSwzOTc1OSwyMDA4MywyMDM2OSwyMDc1NCwyMDg0Miw2Mzk0MywyMTgwNywyMTkyOSwyMzQxOCwyMzQ2MSwyNDE4OCwyNDE4OSwyNDI1NCwyNDcz''@;'; put 'put ''NiwyNDc5OSwyNDg0MCwyNDg0MSwyNTU0MCwyNTkxMiwyNjM3Nyw2Mzk0NCwyNjU4MCwyNjU4Niw2Mzk0NSwyNjk3NywyNjk3OCwyNzgzMywyNzk0Myw2Mzk0NiwyODIxNiw2Mzk0NyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyODY0MSwyOTQ5NCwyOTQ5NSw2Mzk0OCwyOTc4OCwzMDAwMSw2Mzk0OSwzMDI5MCw2Mzk1MCw2Mzk1MSwzMjE3MywzMzI3OCwzMzg0''@;'; put 'put ''OCwzNTAyOSwzNTQ4MCwzNTU0NywzNTU2NSwzNjQwMCwzNjQxOCwzNjkzOCwzNjkyNiwzNjk4NiwzNzE5MywzNzMyMSwzNzc0Miw2Mzk1Miw2Mzk1MywyMjUzNyw2Mzk1NCwyNzYwMywzMjkwNSwzMjk0Niw2Mzk1NSw2Mzk1NiwyMDgwMSwyMjg5MSwyMzYwOSw2Mzk1Nyw2Mzk1OCwyODUxNiwy''@;'; put 'put ''OTYwNywzMjk5NiwzNjEwMyw2Mzk1OSwzNzM5OSwzODI4Nyw2Mzk2MCw2Mzk2MSw2Mzk2Miw2Mzk2MywzMjg5NSwyNTEwMiwyODcwMCwzMjEwNCwzNDcwMSw2Mzk2NCwyMjQzMiwyNDY4MSwyNDkwMywyNzU3NSwzNTUxOCwzNzUwNCwzODU3NywyMDA1NywyMTUzNSwyODEzOSwzNDA5MywzODUx''@;'; put 'put ''MiwzODg5OSwzOTE1MCwyNTU1OCwyNzg3NSwzNzAwOSwyMDk1NywyNTAzMywzMzIxMCw0MDQ0MSwyMDM4MSwyMDUwNiwyMDczNiwyMzQ1MiwyNDg0NywyNTA4NywyNTgzNiwyNjg4NSwyNzU4OSwzMDA5NywzMDY5MSwzMjY4MSwzMzM4MCwzNDE5MSwzNDgxMSwzNDkxNSwzNTUxNixudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzNTY5NiwzNzI5MSwyMDEwOCwyMDE5''@;'; put 'put ''NywyMDIzNCw2Mzk2NSw2Mzk2NiwyMjgzOSwyMzAxNiw2Mzk2NywyNDA1MCwyNDM0NywyNDQxMSwyNDYwOSw2Mzk2OCw2Mzk2OSw2Mzk3MCw2Mzk3MSwyOTI0NiwyOTY2OSw2Mzk3MiwzMDA2NCwzMDE1Nyw2Mzk3MywzMTIyNyw2Mzk3NCwzMjc4MCwzMjgxOSwzMjkwMCwzMzUwNSwzMzYxNyw2''@;'; put 'put ''Mzk3NSw2Mzk3NiwzNjAyOSwzNjAxOSwzNjk5OSw2Mzk3Nyw2Mzk3OCwzOTE1NiwzOTE4MCw2Mzk3OSw2Mzk4MCwyODcyNywzMDQxMCwzMjcxNCwzMjcxNiwzMjc2NCwzNTYxMCwyMDE1NCwyMDE2MSwyMDk5NSwyMTM2MCw2Mzk4MSwyMTY5MywyMjI0MCwyMzAzNSwyMzQ5MywyNDM0MSwyNDUy''@;'; put 'put ''NSwyODI3MCw2Mzk4Miw2Mzk4MywzMjEwNiwzMzU4OSw2Mzk4NCwzNDQ1MSwzNTQ2OSw2Mzk4NSwzODc2NSwzODc3NSw2Mzk4Niw2Mzk4NywxOTk2OCwyMDMxNCwyMDM1MCwyMjc3NywyNjA4NSwyODMyMiwzNjkyMCwzNzgwOCwzOTM1MywyMDIxOSwyMjc2NCwyMjkyMiwyMzAwMSwyNDY0MSw2''@;'; put 'put ''Mzk4OCw2Mzk4OSwzMTI1Miw2Mzk5MCwzMzYxNSwzNjAzNSwyMDgzNywyMTMxNixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw2Mzk5MSw2Mzk5Miw2Mzk5MywyMDE3MywyMTA5NywyMzM4MSwzMzQ3MSwyMDE4MCwyMTA1MCwyMTY3MiwyMjk4NSwyMzAzOSwyMzM3NiwyMzM4MywyMzM4OCwyNDY3NSwyNDkwNCwyODM2MywyODgyNSwyOTAzOCwyOTU3NCwyOTk0Mywz''@;'; put 'put ''MDEzMywzMDkxMywzMjA0MywzMjc3MywzMzI1OCwzMzU3NiwzNDA3MSwzNDI0OSwzNTU2NiwzNjAzOSwzODYwNCwyMDMxNiwyMTI0MiwyMjIwNCwyNjAyNywyNjE1MiwyODc5NiwyODg1NiwyOTIzNywzMjE4OSwzMzQyMSwzNzE5NiwzODU5Miw0MDMwNiwyMzQwOSwyNjg1NSwyNzU0NCwyODUz''@;'; put 'put ''OCwzMDQzMCwyMzY5NywyNjI4MywyODUwNywzMTY2OCwzMTc4NiwzNDg3MCwzODYyMCwxOTk3NiwyMDE4MywyMTI4MCwyMjU4MCwyMjcxNSwyMjc2NywyMjg5MiwyMzU1OSwyNDExNSwyNDE5NiwyNDM3MywyNTQ4NCwyNjI5MCwyNjQ1NCwyNzE2NywyNzI5OSwyNzQwNCwyODQ3OSwyOTI1NCw2''@;'; put 'put ''Mzk5NCwyOTUyMCwyOTgzNSwzMTQ1NiwzMTkxMSwzMzE0NCwzMzI0NywzMzI1NSwzMzY3NCwzMzkwMCwzNDA4MywzNDE5NiwzNDI1NSwzNTAzNywzNjExNSwzNzI5MiwzODI2MyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzODU1NiwyMDg3NywyMTcwNSwyMjMxMiwyMzQ3MiwyNTE2NSwyNjQ0OCwyNjY4NSwyNjc3MSwyODIyMSwyODM3MSwyODc5NywzMjI4OSwz''@;'; put 'put ''NTAwOSwzNjAwMSwzNjYxNyw0MDc3OSw0MDc4MiwyOTIyOSwzMTYzMSwzNTUzMywzNzY1OCwyMDI5NSwyMDMwMiwyMDc4NiwyMTYzMiwyMjk5MiwyNDIxMywyNTI2OSwyNjQ4NSwyNjk5MCwyNzE1OSwyNzgyMiwyODE4NiwyOTQwMSwyOTQ4MiwzMDE0MSwzMTY3MiwzMjA1MywzMzUxMSwzMzc4''@;'; put 'put ''NSwzMzg3OSwzNDI5NSwzNTQxOSwzNjAxNSwzNjQ4NywzNjg4OSwzNzA0OCwzODYwNiw0MDc5OSwyMTIxOSwyMTUxNCwyMzI2NSwyMzQ5MCwyNTY4OCwyNTk3MywyODQwNCwyOTM4MCw2Mzk5NSwzMDM0MCwzMTMwOSwzMTUxNSwzMTgyMSwzMjMxOCwzMjczNSwzMzY1OSwzNTYyNywzNjA0Miwz''@;'; put 'put ''NjE5NiwzNjMyMSwzNjQ0NywzNjg0MiwzNjg1NywzNjk2OSwzNzg0MSwyMDI5MSwyMDM0NiwyMDY1OSwyMDg0MCwyMDg1NiwyMTA2OSwyMTA5OCwyMjYyNSwyMjY1MiwyMjg4MCwyMzU2MCwyMzYzNywyNDI4MywyNDczMSwyNTEzNiwyNjY0MywyNzU4MywyNzY1NiwyODU5MyxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyOTAwNiwyOTcyOCwzZTQsMzAwMDgsMzAw''@;'; put 'put ''MzMsMzAzMjIsMzE1NjQsMzE2MjcsMzE2NjEsMzE2ODYsMzIzOTksMzU0MzgsMzY2NzAsMzY2ODEsMzc0MzksMzc1MjMsMzc2NjYsMzc5MzEsMzg2NTEsMzkwMDIsMzkwMTksMzkxOTgsMjA5OTksMjUxMzAsMjUyNDAsMjc5OTMsMzAzMDgsMzE0MzQsMzE2ODAsMzIxMTgsMjEzNDQsMjM3NDIs''@;'; put 'put ''MjQyMTUsMjg0NzIsMjg4NTcsMzE4OTYsMzg2NzMsMzk4MjIsNDA2NzAsMjU1MDksMjU3MjIsMzQ2NzgsMTk5NjksMjAxMTcsMjAxNDEsMjA1NzIsMjA1OTcsMjE1NzYsMjI5NzksMjM0NTAsMjQxMjgsMjQyMzcsMjQzMTEsMjQ0NDksMjQ3NzMsMjU0MDIsMjU5MTksMjU5NzIsMjYwNjAsMjYy''@;'; put 'put ''MzAsMjYyMzIsMjY2MjIsMjY5ODQsMjcyNzMsMjc0OTEsMjc3MTIsMjgwOTYsMjgxMzYsMjgxOTEsMjgyNTQsMjg3MDIsMjg4MzMsMjk1ODIsMjk2OTMsMzAwMTAsMzA1NTUsMzA4NTUsMzExMTgsMzEyNDMsMzEzNTcsMzE5MzQsMzIxNDIsMzMzNTEsMzUzMzAsMzU1NjIsMzU5OTgsMzcxNjUs''@;'; put 'put ''MzcxOTQsMzczMzYsMzc0NzgsMzc1ODAsMzc2NjQsMzg2NjIsMzg3NDIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMzg3NDgsMzg5MTQsNDA3MTgsMjEwNDYsMjExMzcsMjE4ODQsMjI1NjQsMjQwOTMsMjQzNTEsMjQ3MTYsMjU1NTIsMjY3OTksMjg2MzksMzEwODUsMzE1MzIsMzMyMjksMzQyMzQsMzUwNjksMzU1NzYsMzY0MjAsMzcyNjEsMzg1MDAsMzg1NTUs''@;'; put 'put ''Mzg3MTcsMzg5ODgsNDA3NzgsMjA0MzAsMjA4MDYsMjA5MzksMjExNjEsMjIwNjYsMjQzNDAsMjQ0MjcsMjU1MTQsMjU4MDUsMjYwODksMjYxNzcsMjYzNjIsMjYzNjEsMjYzOTcsMjY3ODEsMjY4MzksMjcxMzMsMjg0MzcsMjg1MjYsMjkwMzEsMjkxNTcsMjkyMjYsMjk4NjYsMzA1MjIsMzEw''@;'; put 'put ''NjIsMzEwNjYsMzExOTksMzEyNjQsMzEzODEsMzE4OTUsMzE5NjcsMzIwNjgsMzIzNjgsMzI5MDMsMzQyOTksMzQ0NjgsMzU0MTIsMzU1MTksMzYyNDksMzY0ODEsMzY4OTYsMzY5NzMsMzczNDcsMzg0NTksMzg2MTMsNDAxNjUsMjYwNjMsMzE3NTEsMzYyNzUsMzc4MjcsMjMzODQsMjM1NjIs''@;'; put 'put ''MjEzMzAsMjUzMDUsMjk0NjksMjA1MTksMjM0NDcsMjQ0NzgsMjQ3NTIsMjQ5MzksMjY4MzcsMjgxMjEsMjk3NDIsMzEyNzgsMzIwNjYsMzIxNTYsMzIzMDUsMzMxMzEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMzYzOTQsMzY0MDUsMzc3NTgsMzc5MTIsMjAzMDQsMjIzNTIsMjQwMzgsMjQyMzEsMjUzODcsMzI2MTgsMjAwMjcsMjAzMDMsMjAzNjcsMjA1NzAs''@;'; put 'put ''MjMwMDUsMzI5NjQsMjE2MTAsMjE2MDgsMjIwMTQsMjI4NjMsMjM0NDksMjQwMzAsMjQyODIsMjYyMDUsMjY0MTcsMjY2MDksMjY2NjYsMjc4ODAsMjc5NTQsMjgyMzQsMjg1NTcsMjg4NTUsMjk2NjQsMzAwODcsMzE4MjAsMzIwMDIsMzIwNDQsMzIxNjIsMzMzMTEsMzQ1MjMsMzUzODcsMzU0''@;'; put 'put ''NjEsMzYyMDgsMzY0OTAsMzY2NTksMzY5MTMsMzcxOTgsMzcyMDIsMzc5NTYsMzkzNzYsMzE0ODEsMzE5MDksMjA0MjYsMjA3MzcsMjA5MzQsMjI0NzIsMjM1MzUsMjM4MDMsMjYyMDEsMjcxOTcsMjc5OTQsMjgzMTAsMjg2NTIsMjg5NDAsMzAwNjMsMzE0NTksMzQ4NTAsMzY4OTcsMzY5ODEs''@;'; put 'put ''Mzg2MDMsMzk0MjMsMzM1MzcsMjAwMTMsMjAyMTAsMzQ4ODYsMzczMjUsMjEzNzMsMjczNTUsMjY5ODcsMjc3MTMsMzM5MTQsMjI2ODYsMjQ5NzQsMjYzNjYsMjUzMjcsMjg4OTMsMjk5NjksMzAxNTEsMzIzMzgsMzM5NzYsMzU2NTcsMzYxMDQsMjAwNDMsMjE0ODIsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMjE2NzUsMjIzMjAsMjIzMzYsMjQ1MzUsMjUzNDUs''@;'; put 'put ''MjUzNTEsMjU3MTEsMjU5MDMsMjYwODgsMjYyMzQsMjY1MjUsMjY1NDcsMjc0OTAsMjc3NDQsMjc4MDIsMjg0NjAsMzA2OTMsMzA3NTcsMzEwNDksMzEwNjMsMzIwMjUsMzI5MzAsMzMwMjYsMzMyNjcsMzM0MzcsMzM0NjMsMzQ1ODQsMzU0NjgsNjM5OTYsMzYxMDAsMzYyODYsMzY5NzgsMzA0''@;'; put 'put ''NTIsMzEyNTcsMzEyODcsMzIzNDAsMzI4ODcsMjE3NjcsMjE5NzIsMjI2NDUsMjUzOTEsMjU2MzQsMjYxODUsMjYxODcsMjY3MzMsMjcwMzUsMjc1MjQsMjc5NDEsMjgzMzcsMjk2NDUsMjk4MDAsMjk4NTcsMzAwNDMsMzAxMzcsMzA0MzMsMzA0OTQsMzA2MDMsMzEyMDYsMzIyNjUsMzIyODUs''@;'; put 'put ''MzMyNzUsMzQwOTUsMzQ5NjcsMzUzODYsMzYwNDksMzY1ODcsMzY3ODQsMzY5MTQsMzc4MDUsMzg0OTksMzg1MTUsMzg2NjMsMjAzNTYsMjE0ODksMjMwMTgsMjMyNDEsMjQwODksMjY3MDIsMjk4OTQsMzAxNDIsMzEyMDksMzEzNzgsMzMxODcsMzQ1NDEsMzYwNzQsMzYzMDAsMzY4NDUsMjYw''@;'; put 'put ''MTUsMjYzODksNjM5OTcsMjI1MTksMjg1MDMsMzIyMjEsMzY2NTUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsMzc4NzgsMzg1OTgsMjQ1MDEsMjUwNzQsMjg1NDgsMTk5ODgsMjAzNzYsMjA1MTEsMjE0NDksMjE5ODMsMjM5MTksMjQwNDYsMjc0MjUsMjc0OTIsMzA5MjMsMzE2NDIsNjM5OTgsMzY0MjUsMzY1NTQsMzY5NzQsMjU0MTcsMjU2NjIsMzA1MjgsMzEz''@;'; put 'put ''NjQsMzc2NzksMzgwMTUsNDA4MTAsMjU3NzYsMjg1OTEsMjkxNTgsMjk4NjQsMjk5MTQsMzE0MjgsMzE3NjIsMzIzODYsMzE5MjIsMzI0MDgsMzU3MzgsMzYxMDYsMzgwMTMsMzkxODQsMzkyNDQsMjEwNDksMjM1MTksMjU4MzAsMjY0MTMsMzIwNDYsMjA3MTcsMjE0NDMsMjI2NDksMjQ5MjAs''@;'; put 'put ''MjQ5MjEsMjUwODIsMjYwMjgsMzE0NDksMzU3MzAsMzU3MzQsMjA0ODksMjA1MTMsMjExMDksMjE4MDksMjMxMDAsMjQyODgsMjQ0MzIsMjQ4ODQsMjU5NTAsMjYxMjQsMjYxNjYsMjYyNzQsMjcwODUsMjgzNTYsMjg0NjYsMjk0NjIsMzAyNDEsMzEzNzksMzMwODEsMzMzNjksMzM3NTAsMzM5''@;'; put 'put ''ODAsMjA2NjEsMjI1MTIsMjM0ODgsMjM1MjgsMjQ0MjUsMjU1MDUsMzA3NTgsMzIxODEsMzM3NTYsMzQwODEsMzczMTksMzczNjUsMjA4NzQsMjY2MTMsMzE1NzQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMzYwMTIsMjA5MzIsMjI5NzEsMjQ3NjUsMzQzODksMjA1MDgsNjM5OTksMjEwNzYsMjM2MTAsMjQ5NTcsMjUxMTQsMjUyOTksMjU4NDIsMjYwMjEsMjgz''@;'; put 'put ''NjQsMzAyNDAsMzMwMzQsMzY0NDgsMzg0OTUsMzg1ODcsMjAxOTEsMjEzMTUsMjE5MTIsMjI4MjUsMjQwMjksMjU3OTcsMjc4NDksMjgxNTQsMjk1ODgsMzEzNTksMzMzMDcsMzQyMTQsMzYwNjgsMzYzNjgsMzY5ODMsMzczNTEsMzgzNjksMzg0MzMsMzg4NTQsMjA5ODQsMjE3NDYsMjE4OTQs''@;'; put 'put ''MjQ1MDUsMjU3NjQsMjg1NTIsMzIxODAsMzY2MzksMzY2ODUsMzc5NDEsMjA2ODEsMjM1NzQsMjc4MzgsMjgxNTUsMjk5NzksMzA2NTEsMzE4MDUsMzE4NDQsMzU0NDksMzU1MjIsMjI1NTgsMjI5NzQsMjQwODYsMjU0NjMsMjkyNjYsMzAwOTAsMzA1NzEsMzU1NDgsMzYwMjgsMzY2MjYsMjQz''@;'; put 'put ''MDcsMjYyMjgsMjgxNTIsMzI4OTMsMzM3MjksMzU1MzEsMzg3MzcsMzk4OTQsNjRlMywyMTA1OSwyNjM2NywyODA1MywyODM5OSwzMjIyNCwzNTU1OCwzNjkxMCwzNjk1OCwzOTYzNiwyMTAyMSwyMTExOSwyMTczNiwyNDk4MCwyNTIyMCwyNTMwNywyNjc4NixudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyNjg5OCwyNjk3MCwyNzE4OSwyODgxOCwyODk2NiwzMDgx''@;'; put 'put ''MywzMDk3NywzMDk5MCwzMTE4NiwzMTI0NSwzMjkxOCwzMzQwMCwzMzQ5MywzMzYwOSwzNDEyMSwzNTk3MCwzNjIyOSwzNzIxOCwzNzI1OSwzNzI5NCwyMDQxOSwyMjIyNSwyOTE2NSwzMDY3OSwzNDU2MCwzNTMyMCwyMzU0NCwyNDUzNCwyNjQ0OSwzNzAzMiwyMTQ3NCwyMjYxOCwyMzU0MSwy''@;'; put 'put ''NDc0MCwyNDk2MSwyNTY5NiwzMjMxNywzMjg4MCwzNDA4NSwzNzUwNywyNTc3NCwyMDY1MiwyMzgyOCwyNjM2OCwyMjY4NCwyNTI3NywyNTUxMiwyNjg5NCwyN2UzLDI3MTY2LDI4MjY3LDMwMzk0LDMxMTc5LDMzNDY3LDMzODMzLDM1NTM1LDM2MjY0LDM2ODYxLDM3MTM4LDM3MTk1LDM3Mjc2''@;'; put 'put ''LDM3NjQ4LDM3NjU2LDM3Nzg2LDM4NjE5LDM5NDc4LDM5OTQ5LDE5OTg1LDMwMDQ0LDMxMDY5LDMxNDgyLDMxNTY5LDMxNjg5LDMyMzAyLDMzOTg4LDM2NDQxLDM2NDY4LDM2NjAwLDM2ODgwLDI2MTQ5LDI2OTQzLDI5NzYzLDIwOTg2LDI2NDE0LDQwNjY4LDIwODA1LDI0NTQ0LDI3Nzk4LDM0''@;'; put 'put ''ODAyLDM0OTA5LDM0OTM1LDI0NzU2LDMzMjA1LDMzNzk1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLDM2MTAxLDIxNDYyLDIxNTYxLDIyMDY4LDIzMDk0LDIzNjAxLDI4ODEwLDMyNzM2LDMyODU4LDMzMDMwLDMzMjYxLDM2MjU5LDM3MjU3LDM5NTE5LDQwNDM0LDIwNTk2LDIwMTY0LDIxNDA4LDI0ODI3LDI4MjA0LDIzNjUyLDIwMzYwLDIwNTE2LDIxOTg4LDIz''@;'; put 'put ''NzY5LDI0MTU5LDI0Njc3LDI2NzcyLDI3ODM1LDI4MTAwLDI5MTE4LDMwMTY0LDMwMTk2LDMwMzA1LDMxMjU4LDMxMzA1LDMyMTk5LDMyMjUxLDMyNjIyLDMzMjY4LDM0NDczLDM2NjM2LDM4NjAxLDM5MzQ3LDQwNzg2LDIxMDYzLDIxMTg5LDM5MTQ5LDM1MjQyLDE5OTcxLDI2NTc4LDI4NDIy''@;'; put 'put ''LDIwNDA1LDIzNTIyLDI2NTE3LDI3Nzg0LDI4MDI0LDI5NzIzLDMwNzU5LDM3MzQxLDM3NzU2LDM0NzU2LDMxMjA0LDMxMjgxLDI0NTU1LDIwMTgyLDIxNjY4LDIxODIyLDIyNzAyLDIyOTQ5LDI0ODE2LDI1MTcxLDI1MzAyLDI2NDIyLDI2OTY1LDMzMzMzLDM4NDY0LDM5MzQ1LDM5Mzg5LDIw''@;'; put 'put ''NTI0LDIxMzMxLDIxODI4LDIyMzk2LDY0MDAxLDI1MTc2LDY0MDAyLDI1ODI2LDI2MjE5LDI2NTg5LDI4NjA5LDI4NjU1LDI5NzMwLDI5NzUyLDM1MzUxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDM3OTQ0LDIxNTg1LDIyMDIyLDIyMzc0LDI0MzkyLDI0OTg2LDI3NDcwLDI4NzYwLDI4ODQ1LDMyMTg3LDM1NDc3LDIyODkwLDMzMDY3LDI1NTA2LDMwNDcyLDMy''@;'; put 'put ''ODI5LDM2MDEwLDIyNjEyLDI1NjQ1LDI3MDY3LDIzNDQ1LDI0MDgxLDI4MjcxLDY0MDAzLDM0MTUzLDIwODEyLDIxNDg4LDIyODI2LDI0NjA4LDI0OTA3LDI3NTI2LDI3NzYwLDI3ODg4LDMxNTE4LDMyOTc0LDMzNDkyLDM2Mjk0LDM3MDQwLDM5MDg5LDY0MDA0LDI1Nzk5LDI4NTgwLDI1NzQ1''@;'; put 'put ''LDI1ODYwLDIwODE0LDIxNTIwLDIyMzAzLDM1MzQyLDI0OTI3LDI2NzQyLDY0MDA1LDMwMTcxLDMxNTcwLDMyMTEzLDM2ODkwLDIyNTM0LDI3MDg0LDMzMTUxLDM1MTE0LDM2ODY0LDM4OTY5LDIwNjAwLDIyODcxLDIyOTU2LDI1MjM3LDM2ODc5LDM5NzIyLDI0OTI1LDI5MzA1LDM4MzU4LDIy''@;'; put 'put ''MzY5LDIzMTEwLDI0MDUyLDI1MjI2LDI1NzczLDI1ODUwLDI2NDg3LDI3ODc0LDI3OTY2LDI5MjI4LDI5NzUwLDMwNzcyLDMyNjMxLDMzNDUzLDM2MzE1LDM4OTM1LDIxMDI4LDIyMzM4LDI2NDk1LDI5MjU2LDI5OTIzLDM2MDA5LDM2Nzc0LDM3MzkzLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDM4NDQyLDIwODQzLDIxNDg1LDI1NDIwLDIwMzI5LDIxNzY0LDI0''@;'; put 'put ''NzI2LDI1OTQzLDI3ODAzLDI4MDMxLDI5MjYwLDI5NDM3LDMxMjU1LDM1MjA3LDM1OTk3LDI0NDI5LDI4NTU4LDI4OTIxLDMzMTkyLDI0ODQ2LDIwNDE1LDIwNTU5LDI1MTUzLDI5MjU1LDMxNjg3LDMyMjMyLDMyNzQ1LDM2OTQxLDM4ODI5LDM5NDQ5LDM2MDIyLDIyMzc4LDI0MTc5LDI2NTQ0''@;'; put 'put ''LDMzODA1LDM1NDEzLDIxNTM2LDIzMzE4LDI0MTYzLDI0MjkwLDI0MzMwLDI1OTg3LDMyOTU0LDM0MTA5LDM4MjgxLDM4NDkxLDIwMjk2LDIxMjUzLDIxMjYxLDIxMjYzLDIxNjM4LDIxNzU0LDIyMjc1LDI0MDY3LDI0NTk4LDI1MjQzLDI1MjY1LDI1NDI5LDY0MDA2LDI3ODczLDI4MDA2LDMw''@;'; put 'put ''MTI5LDMwNzcwLDMyOTkwLDMzMDcxLDMzNTAyLDMzODg5LDMzOTcwLDM0OTU3LDM1MDkwLDM2ODc1LDM3NjEwLDM5MTY1LDM5ODI1LDI0MTMzLDI2MjkyLDI2MzMzLDI4Njg5LDI5MTkwLDY0MDA3LDIwNDY5LDIxMTE3LDI0NDI2LDI0OTE1LDI2NDUxLDI3MTYxLDI4NDE4LDI5OTIyLDMxMDgw''@;'; put 'put ''LDM0OTIwLDM1OTYxLDM5MTExLDM5MTA4LDM5NDkxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLDIxNjk3LDMxMjYzLDI2OTYzLDM1NTc1LDM1OTE0LDM5MDgwLDM5MzQyLDI0NDQ0LDI1MjU5LDMwMTMwLDMwMzgyLDM0OTg3LDM2OTkxLDM4NDY2LDIxMzA1LDI0MzgwLDI0NTE3LDI3ODUyLDI5NjQ0LDMwMDUwLDMwMDkxLDMxNTU4LDMzNTM0LDM5MzI1LDIwMDQ3''@;'; put 'put ''LDM2OTI0LDE5OTc5LDIwMzA5LDIxNDE0LDIyNzk5LDI0MjY0LDI2MTYwLDI3ODI3LDI5NzgxLDMzNjU1LDM0NjYyLDM2MDMyLDM2OTQ0LDM4Njg2LDM5OTU3LDIyNzM3LDIzNDE2LDM0Mzg0LDM1NjA0LDQwMzcyLDIzNTA2LDI0NjgwLDI0NzE3LDI2MDk3LDI3NzM1LDI4NDUwLDI4NTc5LDI4''@;'; put 'put ''Njk4LDMyNTk3LDMyNzUyLDM4Mjg5LDM4MjkwLDM4NDgwLDM4ODY3LDIxMTA2LDM2Njc2LDIwOTg5LDIxNTQ3LDIxNjg4LDIxODU5LDIxODk4LDI3MzIzLDI4MDg1LDMyMjE2LDMzMzgyLDM3NTMyLDM4NTE5LDQwNTY5LDIxNTEyLDIxNzA0LDMwNDE4LDM0NTMyLDM4MzA4LDM4MzU2LDM4NDky''@;'; put 'put ''LDIwMTMwLDIwMjMzLDIzMDIyLDIzMjcwLDI0MDU1LDI0NjU4LDI1MjM5LDI2NDc3LDI2Njg5LDI3NzgyLDI4MjA3LDMyNTY4LDMyOTIzLDMzMzIyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDY0MDA4LDY0MDA5LDM4OTE3LDIwMTMzLDIwNTY1LDIxNjgzLDIyNDE5LDIyODc0LDIzNDAxLDIzNDc1LDI1MDMyLDI2OTk5LDI4MDIzLDI4NzA3LDM0ODA5LDM1Mjk5''@;'; put 'put ''LDM1NDQyLDM1NTU5LDM2OTk0LDM5NDA1LDM5NjA4LDIxMTgyLDI2NjgwLDIwNTAyLDI0MTg0LDI2NDQ3LDMzNjA3LDM0ODkyLDIwMTM5LDIxNTIxLDIyMTkwLDI5NjcwLDM3MTQxLDM4OTExLDM5MTc3LDM5MjU1LDM5MzIxLDIyMDk5LDIyNjg3LDM0Mzk1LDM1Mzc3LDI1MDEwLDI3MzgyLDI5''@;'; put 'put ''NTYzLDM2NTYyLDI3NDYzLDM4NTcwLDM5NTExLDIyODY5LDI5MTg0LDM2MjAzLDM4NzYxLDIwNDM2LDIzNzk2LDI0MzU4LDI1MDgwLDI2MjAzLDI3ODgzLDI4ODQzLDI5NTcyLDI5NjI1LDI5Njk0LDMwNTA1LDMwNTQxLDMyMDY3LDMyMDk4LDMyMjkxLDMzMzM1LDM0ODk4LDY0MDEwLDM2MDY2''@;'; put 'put ''LDM3NDQ5LDM5MDIzLDIzMzc3LDMxMzQ4LDM0ODgwLDM4OTEzLDIzMjQ0LDIwNDQ4LDIxMzMyLDIyODQ2LDIzODA1LDI1NDA2LDI4MDI1LDI5NDMzLDMzMDI5LDMzMDMxLDMzNjk4LDM3NTgzLDM4OTYwLDIwMTM2LDIwODA0LDIxMDA5LDIyNDExLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDI0NDE4LDI3ODQyLDI4MzY2LDI4Njc3LDI4NzUyLDI4ODQ3LDI5MDc0''@;'; put 'put ''LDI5NjczLDI5ODAxLDMzNjEwLDM0NzIyLDM0OTEzLDM2ODcyLDM3MDI2LDM3Nzk1LDM5MzM2LDIwODQ2LDI0NDA3LDI0ODAwLDI0OTM1LDI2MjkxLDM0MTM3LDM2NDI2LDM3Mjk1LDM4Nzk1LDIwMDQ2LDIwMTE0LDIxNjI4LDIyNzQxLDIyNzc4LDIyOTA5LDIzNzMzLDI0MzU5LDI1MTQyLDI1''@;'; put 'put ''MTYwLDI2MTIyLDI2MjE1LDI3NjI3LDI4MDA5LDI4MTExLDI4MjQ2LDI4NDA4LDI4NTY0LDI4NjQwLDI4NjQ5LDI4NzY1LDI5MzkyLDI5NzMzLDI5Nzg2LDI5OTIwLDMwMzU1LDMxMDY4LDMxOTQ2LDMyMjg2LDMyOTkzLDMzNDQ2LDMzODk5LDMzOTgzLDM0MzgyLDM0Mzk5LDM0Njc2LDM1NzAz''@;'; put 'put ''LDM1OTQ2LDM3ODA0LDM4OTEyLDM5MDEzLDI0Nzg1LDI1MTEwLDM3MjM5LDIzMTMwLDI2MTI3LDI4MTUxLDI4MjIyLDI5NzU5LDM5NzQ2LDI0NTczLDI0Nzk0LDMxNTAzLDIxNzAwLDI0MzQ0LDI3NzQyLDI3ODU5LDI3OTQ2LDI4ODg4LDMyMDA1LDM0NDI1LDM1MzQwLDQwMjUxLDIxMjcwLDIx''@;'; put 'put ''NjQ0LDIzMzAxLDI3MTk0LDI4Nzc5LDMwMDY5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLDMxMTE3LDMxMTY2LDMzNDU3LDMzNzc1LDM1NDQxLDM1NjQ5LDM2MDA4LDM4NzcyLDY0MDExLDI1ODQ0LDI1ODk5LDMwOTA2LDMwOTA3LDMxMzM5LDIwMDI0LDIxOTE0LDIyODY0LDIzNDYyLDI0MTg3LDI0NzM5LDI1NTYzLDI3NDg5LDI2MjEzLDI2NzA3LDI4MTg1LDI5''@;'; put 'put ''MDI5LDI5ODcyLDMyMDA4LDM2OTk2LDM5NTI5LDM5OTczLDI3OTYzLDI4MzY5LDI5NTAyLDM1OTA1LDM4MzQ2LDIwOTc2LDI0MTQwLDI0NDg4LDI0NjUzLDI0ODIyLDI0ODgwLDI0OTA4LDI2MTc5LDI2MTgwLDI3MDQ1LDI3ODQxLDI4MjU1LDI4MzYxLDI4NTE0LDI5MDA0LDI5ODUyLDMwMzQz''@;'; put 'put ''LDMxNjgxLDMxNzgzLDMzNjE4LDM0NjQ3LDM2OTQ1LDM4NTQxLDQwNjQzLDIxMjk1LDIyMjM4LDI0MzE1LDI0NDU4LDI0Njc0LDI0NzI0LDI1MDc5LDI2MjE0LDI2MzcxLDI3MjkyLDI4MTQyLDI4NTkwLDI4Nzg0LDI5NTQ2LDMyMzYyLDMzMjE0LDMzNTg4LDM0NTE2LDM1NDk2LDM2MDM2LDIx''@;'; put 'put ''MTIzLDI5NTU0LDIzNDQ2LDI3MjQzLDM3ODkyLDIxNzQyLDIyMTUwLDIzMzg5LDI1OTI4LDI1OTg5LDI2MzEzLDI2NzgzLDI4MDQ1LDI4MTAyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDI5MjQzLDMyOTQ4LDM3MjM3LDM5NTAxLDIwMzk5LDIwNTA1LDIxNDAyLDIxNTE4LDIxNTY0LDIxODk3LDIxOTU3LDI0MTI3LDI0NDYwLDI2NDI5LDI5MDMwLDI5NjYxLDM2''@;'; put 'put ''ODY5LDIxMjExLDIxMjM1LDIyNjI4LDIyNzM0LDI4OTMyLDI5MDcxLDI5MTc5LDM0MjI0LDM1MzQ3LDI2MjQ4LDM0MjE2LDIxOTI3LDI2MjQ0LDI5MDAyLDMzODQxLDIxMzIxLDIxOTEzLDI3NTg1LDI0NDA5LDI0NTA5LDI1NTgyLDI2MjQ5LDI4OTk5LDM1NTY5LDM2NjM3LDQwNjM4LDIwMjQx''@;'; put 'put ''LDI1NjU4LDI4ODc1LDMwMDU0LDM0NDA3LDI0Njc2LDM1NjYyLDQwNDQwLDIwODA3LDIwOTgyLDIxMjU2LDI3OTU4LDMzMDE2LDQwNjU3LDI2MTMzLDI3NDI3LDI4ODI0LDMwMTY1LDIxNTA3LDIzNjczLDMyMDA3LDM1MzUwLDI3NDI0LDI3NDUzLDI3NDYyLDIxNTYwLDI0Njg4LDI3OTY1LDMy''@;'; put 'put ''NzI1LDMzMjg4LDIwNjk0LDIwOTU4LDIxOTE2LDIyMTIzLDIyMjIxLDIzMDIwLDIzMzA1LDI0MDc2LDI0OTg1LDI0OTg0LDI1MTM3LDI2MjA2LDI2MzQyLDI5MDgxLDI5MTEzLDI5MTE0LDI5MzUxLDMxMTQzLDMxMjMyLDMyNjkwLDM1NDQwLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGxdLGdiMTgwMzA6WzE5OTcwLDE5OTcyLDE5OTczLDE5OTc0LDE5OTgzLDE5OTg2LDE5OTkxLDE5OTk5LDJlNCwyMDAwMSwy''@;'; put 'put ''MDAwMywyMDAwNiwyMDAwOSwyMDAxNCwyMDAxNSwyMDAxNywyMDAxOSwyMDAyMSwyMDAyMywyMDAyOCwyMDAzMiwyMDAzMywyMDAzNCwyMDAzNiwyMDAzOCwyMDA0MiwyMDA0OSwyMDA1MywyMDA1NSwyMDA1OCwyMDA1OSwyMDA2NiwyMDA2NywyMDA2OCwyMDA2OSwyMDA3MSwyMDA3MiwyMDA3''@;'; put 'put ''NCwyMDA3NSwyMDA3NiwyMDA3NywyMDA3OCwyMDA3OSwyMDA4MiwyMDA4NCwyMDA4NSwyMDA4NiwyMDA4NywyMDA4OCwyMDA4OSwyMDA5MCwyMDA5MSwyMDA5MiwyMDA5MywyMDA5NSwyMDA5NiwyMDA5NywyMDA5OCwyMDA5OSwyMDEwMCwyMDEwMSwyMDEwMywyMDEwNiwyMDExMiwyMDExOCwy''@;'; put 'put ''MDExOSwyMDEyMSwyMDEyNCwyMDEyNSwyMDEyNiwyMDEzMSwyMDEzOCwyMDE0MywyMDE0NCwyMDE0NSwyMDE0OCwyMDE1MCwyMDE1MSwyMDE1MiwyMDE1MywyMDE1NiwyMDE1NywyMDE1OCwyMDE2OCwyMDE3MiwyMDE3NSwyMDE3NiwyMDE3OCwyMDE4NiwyMDE4NywyMDE4OCwyMDE5MiwyMDE5''@;'; put 'put ''NCwyMDE5OCwyMDE5OSwyMDIwMSwyMDIwNSwyMDIwNiwyMDIwNywyMDIwOSwyMDIxMiwyMDIxNiwyMDIxNywyMDIxOCwyMDIyMCwyMDIyMiwyMDIyNCwyMDIyNiwyMDIyNywyMDIyOCwyMDIyOSwyMDIzMCwyMDIzMSwyMDIzMiwyMDIzNSwyMDIzNiwyMDI0MiwyMDI0MywyMDI0NCwyMDI0NSwy''@;'; put 'put ''MDI0NiwyMDI1MiwyMDI1MywyMDI1NywyMDI1OSwyMDI2NCwyMDI2NSwyMDI2OCwyMDI2OSwyMDI3MCwyMDI3MywyMDI3NSwyMDI3NywyMDI3OSwyMDI4MSwyMDI4MywyMDI4NiwyMDI4NywyMDI4OCwyMDI4OSwyMDI5MCwyMDI5MiwyMDI5MywyMDI5NSwyMDI5NiwyMDI5NywyMDI5OCwyMDI5''@;'; put 'put ''OSwyMDMwMCwyMDMwNiwyMDMwOCwyMDMxMCwyMDMyMSwyMDMyMiwyMDMyNiwyMDMyOCwyMDMzMCwyMDMzMSwyMDMzMywyMDMzNCwyMDMzNywyMDMzOCwyMDM0MSwyMDM0MywyMDM0NCwyMDM0NSwyMDM0NiwyMDM0OSwyMDM1MiwyMDM1MywyMDM1NCwyMDM1NywyMDM1OCwyMDM1OSwyMDM2Miwy''@;'; put 'put ''MDM2NCwyMDM2NiwyMDM2OCwyMDM3MCwyMDM3MSwyMDM3MywyMDM3NCwyMDM3NiwyMDM3NywyMDM3OCwyMDM4MCwyMDM4MiwyMDM4MywyMDM4NSwyMDM4NiwyMDM4OCwyMDM5NSwyMDM5NywyMDQwMCwyMDQwMSwyMDQwMiwyMDQwMywyMDQwNCwyMDQwNiwyMDQwNywyMDQwOCwyMDQwOSwyMDQx''@;'; put 'put ''MCwyMDQxMSwyMDQxMiwyMDQxMywyMDQxNCwyMDQxNiwyMDQxNywyMDQxOCwyMDQyMiwyMDQyMywyMDQyNCwyMDQyNSwyMDQyNywyMDQyOCwyMDQyOSwyMDQzNCwyMDQzNSwyMDQzNiwyMDQzNywyMDQzOCwyMDQ0MSwyMDQ0MywyMDQ0OCwyMDQ1MCwyMDQ1MiwyMDQ1MywyMDQ1NSwyMDQ1OSwy''@;'; put 'put ''MDQ2MCwyMDQ2NCwyMDQ2NiwyMDQ2OCwyMDQ2OSwyMDQ3MCwyMDQ3MSwyMDQ3MywyMDQ3NSwyMDQ3NiwyMDQ3NywyMDQ3OSwyMDQ4MCwyMDQ4MSwyMDQ4MiwyMDQ4MywyMDQ4NCwyMDQ4NSwyMDQ4NiwyMDQ4NywyMDQ4OCwyMDQ4OSwyMDQ5MCwyMDQ5MSwyMDQ5NCwyMDQ5NiwyMDQ5NywyMDQ5''@;'; put 'put ''OSwyMDUwMSwyMDUwMiwyMDUwMywyMDUwNywyMDUwOSwyMDUxMCwyMDUxMiwyMDUxNCwyMDUxNSwyMDUxNiwyMDUxOSwyMDUyMywyMDUyNywyMDUyOCwyMDUyOSwyMDUzMCwyMDUzMSwyMDUzMiwyMDUzMywyMDUzNCwyMDUzNSwyMDUzNiwyMDUzNywyMDUzOSwyMDU0MSwyMDU0MywyMDU0NCwy''@;'; put 'put ''MDU0NSwyMDU0NiwyMDU0OCwyMDU0OSwyMDU1MCwyMDU1MywyMDU1NCwyMDU1NSwyMDU1NywyMDU2MCwyMDU2MSwyMDU2MiwyMDU2MywyMDU2NCwyMDU2NiwyMDU2NywyMDU2OCwyMDU2OSwyMDU3MSwyMDU3MywyMDU3NCwyMDU3NSwyMDU3NiwyMDU3NywyMDU3OCwyMDU3OSwyMDU4MCwyMDU4''@;'; put 'put ''MiwyMDU4MywyMDU4NCwyMDU4NSwyMDU4NiwyMDU4NywyMDU4OSwyMDU5MCwyMDU5MSwyMDU5MiwyMDU5MywyMDU5NCwyMDU5NSwyMDU5NiwyMDU5NywyMDYwMCwyMDYwMSwyMDYwMiwyMDYwNCwyMDYwNSwyMDYwOSwyMDYxMCwyMDYxMSwyMDYxMiwyMDYxNCwyMDYxNSwyMDYxNywyMDYxOCwy''@;'; put 'put ''MDYxOSwyMDYyMCwyMDYyMiwyMDYyMywyMDYyNCwyMDYyNSwyMDYyNiwyMDYyNywyMDYyOCwyMDYyOSwyMDYzMCwyMDYzMSwyMDYzMiwyMDYzMywyMDYzNCwyMDYzNSwyMDYzNiwyMDYzNywyMDYzOCwyMDYzOSwyMDY0MCwyMDY0MSwyMDY0MiwyMDY0NCwyMDY0NiwyMDY1MCwyMDY1MSwyMDY1''@;'; put 'put ''MywyMDY1NCwyMDY1NSwyMDY1NiwyMDY1NywyMDY1OSwyMDY2MCwyMDY2MSwyMDY2MiwyMDY2MywyMDY2NCwyMDY2NSwyMDY2OCwyMDY2OSwyMDY3MCwyMDY3MSwyMDY3MiwyMDY3MywyMDY3NCwyMDY3NSwyMDY3NiwyMDY3NywyMDY3OCwyMDY3OSwyMDY4MCwyMDY4MSwyMDY4MiwyMDY4Mywy''@;'; put 'put ''MDY4NCwyMDY4NSwyMDY4NiwyMDY4OCwyMDY4OSwyMDY5MCwyMDY5MSwyMDY5MiwyMDY5MywyMDY5NSwyMDY5NiwyMDY5NywyMDY5OSwyMDcwMCwyMDcwMSwyMDcwMiwyMDcwMywyMDcwNCwyMDcwNSwyMDcwNiwyMDcwNywyMDcwOCwyMDcwOSwyMDcxMiwyMDcxMywyMDcxNCwyMDcxNSwyMDcx''@;'; put 'put ''OSwyMDcyMCwyMDcyMSwyMDcyMiwyMDcyNCwyMDcyNiwyMDcyNywyMDcyOCwyMDcyOSwyMDczMCwyMDczMiwyMDczMywyMDczNCwyMDczNSwyMDczNiwyMDczNywyMDczOCwyMDczOSwyMDc0MCwyMDc0MSwyMDc0NCwyMDc0NSwyMDc0NiwyMDc0OCwyMDc0OSwyMDc1MCwyMDc1MSwyMDc1Miwy''@;'; put 'put ''MDc1MywyMDc1NSwyMDc1NiwyMDc1NywyMDc1OCwyMDc1OSwyMDc2MCwyMDc2MSwyMDc2MiwyMDc2MywyMDc2NCwyMDc2NSwyMDc2NiwyMDc2NywyMDc2OCwyMDc3MCwyMDc3MSwyMDc3MiwyMDc3MywyMDc3NCwyMDc3NSwyMDc3NiwyMDc3NywyMDc3OCwyMDc3OSwyMDc4MCwyMDc4MSwyMDc4''@;'; put 'put ''MiwyMDc4MywyMDc4NCwyMDc4NSwyMDc4NiwyMDc4NywyMDc4OCwyMDc4OSwyMDc5MCwyMDc5MSwyMDc5MiwyMDc5MywyMDc5NCwyMDc5NSwyMDc5NiwyMDc5NywyMDc5OCwyMDgwMiwyMDgwNywyMDgxMCwyMDgxMiwyMDgxNCwyMDgxNSwyMDgxNiwyMDgxOCwyMDgxOSwyMDgyMywyMDgyNCwy''@;'; put 'put ''MDgyNSwyMDgyNywyMDgyOSwyMDgzMCwyMDgzMSwyMDgzMiwyMDgzMywyMDgzNSwyMDgzNiwyMDgzOCwyMDgzOSwyMDg0MSwyMDg0MiwyMDg0NywyMDg1MCwyMDg1OCwyMDg2MiwyMDg2MywyMDg2NywyMDg2OCwyMDg3MCwyMDg3MSwyMDg3NCwyMDg3NSwyMDg3OCwyMDg3OSwyMDg4MCwyMDg4''@;'; put 'put ''MSwyMDg4MywyMDg4NCwyMDg4OCwyMDg5MCwyMDg5MywyMDg5NCwyMDg5NSwyMDg5NywyMDg5OSwyMDkwMiwyMDkwMywyMDkwNCwyMDkwNSwyMDkwNiwyMDkwOSwyMDkxMCwyMDkxNiwyMDkyMCwyMDkyMSwyMDkyMiwyMDkyNiwyMDkyNywyMDkyOSwyMDkzMCwyMDkzMSwyMDkzMywyMDkzNiwy''@;'; put 'put ''MDkzOCwyMDk0MSwyMDk0MiwyMDk0NCwyMDk0NiwyMDk0NywyMDk0OCwyMDk0OSwyMDk1MCwyMDk1MSwyMDk1MiwyMDk1MywyMDk1NCwyMDk1NiwyMDk1OCwyMDk1OSwyMDk2MiwyMDk2MywyMDk2NSwyMDk2NiwyMDk2NywyMDk2OCwyMDk2OSwyMDk3MCwyMDk3MiwyMDk3NCwyMDk3NywyMDk3''@;'; put 'put ''OCwyMDk4MCwyMDk4MywyMDk5MCwyMDk5NiwyMDk5NywyMTAwMSwyMTAwMywyMTAwNCwyMTAwNywyMTAwOCwyMTAxMSwyMTAxMiwyMTAxMywyMTAyMCwyMTAyMiwyMTAyMywyMTAyNSwyMTAyNiwyMTAyNywyMTAyOSwyMTAzMCwyMTAzMSwyMTAzNCwyMTAzNiwyMTAzOSwyMTA0MSwyMTA0Miwy''@;'; put 'put ''MTA0NCwyMTA0NSwyMTA1MiwyMTA1NCwyMTA2MCwyMTA2MSwyMTA2MiwyMTA2MywyMTA2NCwyMTA2NSwyMTA2NywyMTA3MCwyMTA3MSwyMTA3NCwyMTA3NSwyMTA3NywyMTA3OSwyMTA4MCwyMTA4MSwyMTA4MiwyMTA4MywyMTA4NSwyMTA4NywyMTA4OCwyMTA5MCwyMTA5MSwyMTA5MiwyMTA5''@;'; put 'put ''NCwyMTA5NiwyMTA5OSwyMTEwMCwyMTEwMSwyMTEwMiwyMTEwNCwyMTEwNSwyMTEwNywyMTEwOCwyMTEwOSwyMTExMCwyMTExMSwyMTExMiwyMTExMywyMTExNCwyMTExNSwyMTExNiwyMTExOCwyMTEyMCwyMTEyMywyMTEyNCwyMTEyNSwyMTEyNiwyMTEyNywyMTEyOSwyMTEzMCwyMTEzMSwy''@;'; put 'put ''MTEzMiwyMTEzMywyMTEzNCwyMTEzNSwyMTEzNywyMTEzOCwyMTE0MCwyMTE0MSwyMTE0MiwyMTE0MywyMTE0NCwyMTE0NSwyMTE0NiwyMTE0OCwyMTE1NiwyMTE1NywyMTE1OCwyMTE1OSwyMTE2NiwyMTE2NywyMTE2OCwyMTE3MiwyMTE3MywyMTE3NCwyMTE3NSwyMTE3NiwyMTE3NywyMTE3''@;'; put 'put ''OCwyMTE3OSwyMTE4MCwyMTE4MSwyMTE4NCwyMTE4NSwyMTE4NiwyMTE4OCwyMTE4OSwyMTE5MCwyMTE5MiwyMTE5NCwyMTE5NiwyMTE5NywyMTE5OCwyMTE5OSwyMTIwMSwyMTIwMywyMTIwNCwyMTIwNSwyMTIwNywyMTIwOSwyMTIxMCwyMTIxMSwyMTIxMiwyMTIxMywyMTIxNCwyMTIxNiwy''@;'; put 'put ''MTIxNywyMTIxOCwyMTIxOSwyMTIyMSwyMTIyMiwyMTIyMywyMTIyNCwyMTIyNSwyMTIyNiwyMTIyNywyMTIyOCwyMTIyOSwyMTIzMCwyMTIzMSwyMTIzMywyMTIzNCwyMTIzNSwyMTIzNiwyMTIzNywyMTIzOCwyMTIzOSwyMTI0MCwyMTI0MywyMTI0NCwyMTI0NSwyMTI0OSwyMTI1MCwyMTI1''@;'; put 'put ''MSwyMTI1MiwyMTI1NSwyMTI1NywyMTI1OCwyMTI1OSwyMTI2MCwyMTI2MiwyMTI2NSwyMTI2NiwyMTI2NywyMTI2OCwyMTI3MiwyMTI3NSwyMTI3NiwyMTI3OCwyMTI3OSwyMTI4MiwyMTI4NCwyMTI4NSwyMTI4NywyMTI4OCwyMTI4OSwyMTI5MSwyMTI5MiwyMTI5MywyMTI5NSwyMTI5Niwy''@;'; put 'put ''MTI5NywyMTI5OCwyMTI5OSwyMTMwMCwyMTMwMSwyMTMwMiwyMTMwMywyMTMwNCwyMTMwOCwyMTMwOSwyMTMxMiwyMTMxNCwyMTMxNiwyMTMxOCwyMTMyMywyMTMyNCwyMTMyNSwyMTMyOCwyMTMzMiwyMTMzNiwyMTMzNywyMTMzOSwyMTM0MSwyMTM0OSwyMTM1MiwyMTM1NCwyMTM1NiwyMTM1''@;'; put 'put ''NywyMTM2MiwyMTM2NiwyMTM2OSwyMTM3MSwyMTM3MiwyMTM3MywyMTM3NCwyMTM3NiwyMTM3NywyMTM3OSwyMTM4MywyMTM4NCwyMTM4NiwyMTM5MCwyMTM5MSwyMTM5MiwyMTM5MywyMTM5NCwyMTM5NSwyMTM5NiwyMTM5OCwyMTM5OSwyMTQwMSwyMTQwMywyMTQwNCwyMTQwNiwyMTQwOCwy''@;'; put 'put ''MTQwOSwyMTQxMiwyMTQxNSwyMTQxOCwyMTQxOSwyMTQyMCwyMTQyMSwyMTQyMywyMTQyNCwyMTQyNSwyMTQyNiwyMTQyNywyMTQyOCwyMTQyOSwyMTQzMSwyMTQzMiwyMTQzMywyMTQzNCwyMTQzNiwyMTQzNywyMTQzOCwyMTQ0MCwyMTQ0MywyMTQ0NCwyMTQ0NSwyMTQ0NiwyMTQ0NywyMTQ1''@;'; put 'put ''NCwyMTQ1NSwyMTQ1NiwyMTQ1OCwyMTQ1OSwyMTQ2MSwyMTQ2NiwyMTQ2OCwyMTQ2OSwyMTQ3MCwyMTQ3MywyMTQ3NCwyMTQ3OSwyMTQ5MiwyMTQ5OCwyMTUwMiwyMTUwMywyMTUwNCwyMTUwNiwyMTUwOSwyMTUxMSwyMTUxNSwyMTUyNCwyMTUyOCwyMTUyOSwyMTUzMCwyMTUzMiwyMTUzOCwy''@;'; put 'put ''MTU0MCwyMTU0MSwyMTU0NiwyMTU1MiwyMTU1NSwyMTU1OCwyMTU1OSwyMTU2MiwyMTU2NSwyMTU2NywyMTU2OSwyMTU3MCwyMTU3MiwyMTU3MywyMTU3NSwyMTU3NywyMTU4MCwyMTU4MSwyMTU4MiwyMTU4MywyMTU4NSwyMTU5NCwyMTU5NywyMTU5OCwyMTU5OSwyMTYwMCwyMTYwMSwyMTYw''@;'; put 'put ''MywyMTYwNSwyMTYwNywyMTYwOSwyMTYxMCwyMTYxMSwyMTYxMiwyMTYxMywyMTYxNCwyMTYxNSwyMTYxNiwyMTYyMCwyMTYyNSwyMTYyNiwyMTYzMCwyMTYzMSwyMTYzMywyMTYzNSwyMTYzNywyMTYzOSwyMTY0MCwyMTY0MSwyMTY0MiwyMTY0NSwyMTY0OSwyMTY1MSwyMTY1NSwyMTY1Niwy''@;'; put 'put ''MTY2MCwyMTY2MiwyMTY2MywyMTY2NCwyMTY2NSwyMTY2NiwyMTY2OSwyMTY3OCwyMTY4MCwyMTY4MiwyMTY4NSwyMTY4NiwyMTY4NywyMTY4OSwyMTY5MCwyMTY5MiwyMTY5NCwyMTY5OSwyMTcwMSwyMTcwNiwyMTcwNywyMTcxOCwyMTcyMCwyMTcyMywyMTcyOCwyMTcyOSwyMTczMCwyMTcz''@;'; put 'put ''MSwyMTczMiwyMTczOSwyMTc0MCwyMTc0MywyMTc0NCwyMTc0NSwyMTc0OCwyMTc0OSwyMTc1MCwyMTc1MSwyMTc1MiwyMTc1MywyMTc1NSwyMTc1OCwyMTc2MCwyMTc2MiwyMTc2MywyMTc2NCwyMTc2NSwyMTc2OCwyMTc3MCwyMTc3MSwyMTc3MiwyMTc3MywyMTc3NCwyMTc3OCwyMTc3OSwy''@;'; put 'put ''MTc4MSwyMTc4MiwyMTc4MywyMTc4NCwyMTc4NSwyMTc4NiwyMTc4OCwyMTc4OSwyMTc5MCwyMTc5MSwyMTc5MywyMTc5NywyMTc5OCwyMTgwMCwyMTgwMSwyMTgwMywyMTgwNSwyMTgxMCwyMTgxMiwyMTgxMywyMTgxNCwyMTgxNiwyMTgxNywyMTgxOCwyMTgxOSwyMTgyMSwyMTgyNCwyMTgy''@;'; put 'put ''NiwyMTgyOSwyMTgzMSwyMTgzMiwyMTgzNSwyMTgzNiwyMTgzNywyMTgzOCwyMTgzOSwyMTg0MSwyMTg0MiwyMTg0MywyMTg0NCwyMTg0NywyMTg0OCwyMTg0OSwyMTg1MCwyMTg1MSwyMTg1MywyMTg1NCwyMTg1NSwyMTg1NiwyMTg1OCwyMTg1OSwyMTg2NCwyMTg2NSwyMTg2NywyMTg3MSwy''@;'; put 'put ''MTg3MiwyMTg3MywyMTg3NCwyMTg3NSwyMTg3NiwyMTg4MSwyMTg4MiwyMTg4NSwyMTg4NywyMTg5MywyMTg5NCwyMTkwMCwyMTkwMSwyMTkwMiwyMTkwNCwyMTkwNiwyMTkwNywyMTkwOSwyMTkxMCwyMTkxMSwyMTkxNCwyMTkxNSwyMTkxOCwyMTkyMCwyMTkyMSwyMTkyMiwyMTkyMywyMTky''@;'; put 'put ''NCwyMTkyNSwyMTkyNiwyMTkyOCwyMTkyOSwyMTkzMCwyMTkzMSwyMTkzMiwyMTkzMywyMTkzNCwyMTkzNSwyMTkzNiwyMTkzOCwyMTk0MCwyMTk0MiwyMTk0NCwyMTk0NiwyMTk0OCwyMTk1MSwyMTk1MiwyMTk1MywyMTk1NCwyMTk1NSwyMTk1OCwyMTk1OSwyMTk2MCwyMTk2MiwyMTk2Mywy''@;'; put 'put ''MTk2NiwyMTk2NywyMTk2OCwyMTk3MywyMTk3NSwyMTk3NiwyMTk3NywyMTk3OCwyMTk3OSwyMTk4MiwyMTk4NCwyMTk4NiwyMTk5MSwyMTk5MywyMTk5NywyMTk5OCwyMmUzLDIyMDAxLDIyMDA0LDIyMDA2LDIyMDA4LDIyMDA5LDIyMDEwLDIyMDExLDIyMDEyLDIyMDE1LDIyMDE4LDIyMDE5''@;'; put 'put ''LDIyMDIwLDIyMDIxLDIyMDIyLDIyMDIzLDIyMDI2LDIyMDI3LDIyMDI5LDIyMDMyLDIyMDMzLDIyMDM0LDIyMDM1LDIyMDM2LDIyMDM3LDIyMDM4LDIyMDM5LDIyMDQxLDIyMDQyLDIyMDQ0LDIyMDQ1LDIyMDQ4LDIyMDQ5LDIyMDUwLDIyMDUzLDIyMDU0LDIyMDU2LDIyMDU3LDIyMDU4LDIy''@;'; put 'put ''MDU5LDIyMDYyLDIyMDYzLDIyMDY0LDIyMDY3LDIyMDY5LDIyMDcxLDIyMDcyLDIyMDc0LDIyMDc2LDIyMDc3LDIyMDc4LDIyMDgwLDIyMDgxLDIyMDgyLDIyMDgzLDIyMDg0LDIyMDg1LDIyMDg2LDIyMDg3LDIyMDg4LDIyMDg5LDIyMDkwLDIyMDkxLDIyMDk1LDIyMDk2LDIyMDk3LDIyMDk4''@;'; put 'put ''LDIyMDk5LDIyMTAxLDIyMTAyLDIyMTA2LDIyMTA3LDIyMTA5LDIyMTEwLDIyMTExLDIyMTEyLDIyMTEzLDIyMTE1LDIyMTE3LDIyMTE4LDIyMTE5LDIyMTI1LDIyMTI2LDIyMTI3LDIyMTI4LDIyMTMwLDIyMTMxLDIyMTMyLDIyMTMzLDIyMTM1LDIyMTM2LDIyMTM3LDIyMTM4LDIyMTQxLDIy''@;'; put 'put ''MTQyLDIyMTQzLDIyMTQ0LDIyMTQ1LDIyMTQ2LDIyMTQ3LDIyMTQ4LDIyMTUxLDIyMTUyLDIyMTUzLDIyMTU0LDIyMTU1LDIyMTU2LDIyMTU3LDIyMTYwLDIyMTYxLDIyMTYyLDIyMTY0LDIyMTY1LDIyMTY2LDIyMTY3LDIyMTY4LDIyMTY5LDIyMTcwLDIyMTcxLDIyMTcyLDIyMTczLDIyMTc0''@;'; put 'put ''LDIyMTc1LDIyMTc2LDIyMTc3LDIyMTc4LDIyMTgwLDIyMTgxLDIyMTgyLDIyMTgzLDIyMTg0LDIyMTg1LDIyMTg2LDIyMTg3LDIyMTg4LDIyMTg5LDIyMTkwLDIyMTkyLDIyMTkzLDIyMTk0LDIyMTk1LDIyMTk2LDIyMTk3LDIyMTk4LDIyMjAwLDIyMjAxLDIyMjAyLDIyMjAzLDIyMjA1LDIy''@;'; put 'put ''MjA2LDIyMjA3LDIyMjA4LDIyMjA5LDIyMjEwLDIyMjExLDIyMjEyLDIyMjEzLDIyMjE0LDIyMjE1LDIyMjE2LDIyMjE3LDIyMjE5LDIyMjIwLDIyMjIxLDIyMjIyLDIyMjIzLDIyMjI0LDIyMjI1LDIyMjI2LDIyMjI3LDIyMjI5LDIyMjMwLDIyMjMyLDIyMjMzLDIyMjM2LDIyMjQzLDIyMjQ1''@;'; put 'put ''LDIyMjQ2LDIyMjQ3LDIyMjQ4LDIyMjQ5LDIyMjUwLDIyMjUyLDIyMjU0LDIyMjU1LDIyMjU4LDIyMjU5LDIyMjYyLDIyMjYzLDIyMjY0LDIyMjY3LDIyMjY4LDIyMjcyLDIyMjczLDIyMjc0LDIyMjc3LDIyMjc5LDIyMjgzLDIyMjg0LDIyMjg1LDIyMjg2LDIyMjg3LDIyMjg4LDIyMjg5LDIy''@;'; put 'put ''MjkwLDIyMjkxLDIyMjkyLDIyMjkzLDIyMjk0LDIyMjk1LDIyMjk2LDIyMjk3LDIyMjk4LDIyMjk5LDIyMzAxLDIyMzAyLDIyMzA0LDIyMzA1LDIyMzA2LDIyMzA4LDIyMzA5LDIyMzEwLDIyMzExLDIyMzE1LDIyMzIxLDIyMzIyLDIyMzI0LDIyMzI1LDIyMzI2LDIyMzI3LDIyMzI4LDIyMzMy''@;'; put 'put ''LDIyMzMzLDIyMzM1LDIyMzM3LDIyMzM5LDIyMzQwLDIyMzQxLDIyMzQyLDIyMzQ0LDIyMzQ1LDIyMzQ3LDIyMzU0LDIyMzU1LDIyMzU2LDIyMzU3LDIyMzU4LDIyMzYwLDIyMzYxLDIyMzcwLDIyMzcxLDIyMzczLDIyMzc1LDIyMzgwLDIyMzgyLDIyMzg0LDIyMzg1LDIyMzg2LDIyMzg4LDIy''@;'; put 'put ''Mzg5LDIyMzkyLDIyMzkzLDIyMzk0LDIyMzk3LDIyMzk4LDIyMzk5LDIyNDAwLDIyNDAxLDIyNDA3LDIyNDA4LDIyNDA5LDIyNDEwLDIyNDEzLDIyNDE0LDIyNDE1LDIyNDE2LDIyNDE3LDIyNDIwLDIyNDIxLDIyNDIyLDIyNDIzLDIyNDI0LDIyNDI1LDIyNDI2LDIyNDI4LDIyNDI5LDIyNDMw''@;'; put 'put ''LDIyNDMxLDIyNDM3LDIyNDQwLDIyNDQyLDIyNDQ0LDIyNDQ3LDIyNDQ4LDIyNDQ5LDIyNDUxLDIyNDUzLDIyNDU0LDIyNDU1LDIyNDU3LDIyNDU4LDIyNDU5LDIyNDYwLDIyNDYxLDIyNDYyLDIyNDYzLDIyNDY0LDIyNDY1LDIyNDY4LDIyNDY5LDIyNDcwLDIyNDcxLDIyNDcyLDIyNDczLDIy''@;'; put 'put ''NDc0LDIyNDc2LDIyNDc3LDIyNDgwLDIyNDgxLDIyNDgzLDIyNDg2LDIyNDg3LDIyNDkxLDIyNDkyLDIyNDk0LDIyNDk3LDIyNDk4LDIyNDk5LDIyNTAxLDIyNTAyLDIyNTAzLDIyNTA0LDIyNTA1LDIyNTA2LDIyNTA3LDIyNTA4LDIyNTEwLDIyNTEyLDIyNTEzLDIyNTE0LDIyNTE1LDIyNTE3''@;'; put 'put ''LDIyNTE4LDIyNTE5LDIyNTIzLDIyNTI0LDIyNTI2LDIyNTI3LDIyNTI5LDIyNTMxLDIyNTMyLDIyNTMzLDIyNTM2LDIyNTM3LDIyNTM4LDIyNTQwLDIyNTQyLDIyNTQzLDIyNTQ0LDIyNTQ2LDIyNTQ3LDIyNTQ4LDIyNTUwLDIyNTUxLDIyNTUyLDIyNTU0LDIyNTU1LDIyNTU2LDIyNTU3LDIy''@;'; put 'put ''NTU5LDIyNTYyLDIyNTYzLDIyNTY1LDIyNTY2LDIyNTY3LDIyNTY4LDIyNTY5LDIyNTcxLDIyNTcyLDIyNTczLDIyNTc0LDIyNTc1LDIyNTc3LDIyNTc4LDIyNTc5LDIyNTgwLDIyNTgyLDIyNTgzLDIyNTg0LDIyNTg1LDIyNTg2LDIyNTg3LDIyNTg4LDIyNTg5LDIyNTkwLDIyNTkxLDIyNTky''@;'; put 'put ''LDIyNTkzLDIyNTk0LDIyNTk1LDIyNTk3LDIyNTk4LDIyNTk5LDIyNjAwLDIyNjAxLDIyNjAyLDIyNjAzLDIyNjA2LDIyNjA3LDIyNjA4LDIyNjEwLDIyNjExLDIyNjEzLDIyNjE0LDIyNjE1LDIyNjE3LDIyNjE4LDIyNjE5LDIyNjIwLDIyNjIxLDIyNjIzLDIyNjI0LDIyNjI1LDIyNjI2LDIy''@;'; put 'put ''NjI3LDIyNjI4LDIyNjMwLDIyNjMxLDIyNjMyLDIyNjMzLDIyNjM0LDIyNjM3LDIyNjM4LDIyNjM5LDIyNjQwLDIyNjQxLDIyNjQyLDIyNjQzLDIyNjQ0LDIyNjQ1LDIyNjQ2LDIyNjQ3LDIyNjQ4LDIyNjQ5LDIyNjUwLDIyNjUxLDIyNjUyLDIyNjUzLDIyNjU1LDIyNjU4LDIyNjYwLDIyNjYy''@;'; put 'put ''LDIyNjYzLDIyNjY0LDIyNjY2LDIyNjY3LDIyNjY4LDIyNjY5LDIyNjcwLDIyNjcxLDIyNjcyLDIyNjczLDIyNjc2LDIyNjc3LDIyNjc4LDIyNjc5LDIyNjgwLDIyNjgzLDIyNjg0LDIyNjg1LDIyNjg4LDIyNjg5LDIyNjkwLDIyNjkxLDIyNjkyLDIyNjkzLDIyNjk0LDIyNjk1LDIyNjk4LDIy''@;'; put 'put ''Njk5LDIyNzAwLDIyNzAxLDIyNzAyLDIyNzAzLDIyNzA0LDIyNzA1LDIyNzA2LDIyNzA3LDIyNzA4LDIyNzA5LDIyNzEwLDIyNzExLDIyNzEyLDIyNzEzLDIyNzE0LDIyNzE1LDIyNzE3LDIyNzE4LDIyNzE5LDIyNzIwLDIyNzIyLDIyNzIzLDIyNzI0LDIyNzI2LDIyNzI3LDIyNzI4LDIyNzI5''@;'; put 'put ''LDIyNzMwLDIyNzMxLDIyNzMyLDIyNzMzLDIyNzM0LDIyNzM1LDIyNzM2LDIyNzM4LDIyNzM5LDIyNzQwLDIyNzQyLDIyNzQzLDIyNzQ0LDIyNzQ1LDIyNzQ2LDIyNzQ3LDIyNzQ4LDIyNzQ5LDIyNzUwLDIyNzUxLDIyNzUyLDIyNzUzLDIyNzU0LDIyNzU1LDIyNzU3LDIyNzU4LDIyNzU5LDIy''@;'; put 'put ''NzYwLDIyNzYxLDIyNzYyLDIyNzY1LDIyNzY3LDIyNzY5LDIyNzcwLDIyNzcyLDIyNzczLDIyNzc1LDIyNzc2LDIyNzc4LDIyNzc5LDIyNzgwLDIyNzgxLDIyNzgyLDIyNzgzLDIyNzg0LDIyNzg1LDIyNzg3LDIyNzg5LDIyNzkwLDIyNzkyLDIyNzkzLDIyNzk0LDIyNzk1LDIyNzk2LDIyNzk4''@;'; put 'put ''LDIyODAwLDIyODAxLDIyODAyLDIyODAzLDIyODA3LDIyODA4LDIyODExLDIyODEzLDIyODE0LDIyODE2LDIyODE3LDIyODE4LDIyODE5LDIyODIyLDIyODI0LDIyODI4LDIyODMyLDIyODM0LDIyODM1LDIyODM3LDIyODM4LDIyODQzLDIyODQ1LDIyODQ2LDIyODQ3LDIyODQ4LDIyODUxLDIy''@;'; put 'put ''ODUzLDIyODU0LDIyODU4LDIyODYwLDIyODYxLDIyODY0LDIyODY2LDIyODY3LDIyODczLDIyODc1LDIyODc2LDIyODc3LDIyODc4LDIyODc5LDIyODgxLDIyODgzLDIyODg0LDIyODg2LDIyODg3LDIyODg4LDIyODg5LDIyODkwLDIyODkxLDIyODkyLDIyODkzLDIyODk0LDIyODk1LDIyODk2''@;'; put 'put ''LDIyODk3LDIyODk4LDIyOTAxLDIyOTAzLDIyOTA2LDIyOTA3LDIyOTA4LDIyOTEwLDIyOTExLDIyOTEyLDIyOTE3LDIyOTIxLDIyOTIzLDIyOTI0LDIyOTI2LDIyOTI3LDIyOTI4LDIyOTI5LDIyOTMyLDIyOTMzLDIyOTM2LDIyOTM4LDIyOTM5LDIyOTQwLDIyOTQxLDIyOTQzLDIyOTQ0LDIy''@;'; put 'put ''OTQ1LDIyOTQ2LDIyOTUwLDIyOTUxLDIyOTU2LDIyOTU3LDIyOTYwLDIyOTYxLDIyOTYzLDIyOTY0LDIyOTY1LDIyOTY2LDIyOTY3LDIyOTY4LDIyOTcwLDIyOTcyLDIyOTczLDIyOTc1LDIyOTc2LDIyOTc3LDIyOTc4LDIyOTc5LDIyOTgwLDIyOTgxLDIyOTgzLDIyOTg0LDIyOTg1LDIyOTg4''@;'; put 'put ''LDIyOTg5LDIyOTkwLDIyOTkxLDIyOTk3LDIyOTk4LDIzMDAxLDIzMDAzLDIzMDA2LDIzMDA3LDIzMDA4LDIzMDA5LDIzMDEwLDIzMDEyLDIzMDE0LDIzMDE1LDIzMDE3LDIzMDE4LDIzMDE5LDIzMDIxLDIzMDIyLDIzMDIzLDIzMDI0LDIzMDI1LDIzMDI2LDIzMDI3LDIzMDI4LDIzMDI5LDIz''@;'; put 'put ''MDMwLDIzMDMxLDIzMDMyLDIzMDM0LDIzMDM2LDIzMDM3LDIzMDM4LDIzMDQwLDIzMDQyLDIzMDUwLDIzMDUxLDIzMDUzLDIzMDU0LDIzMDU1LDIzMDU2LDIzMDU4LDIzMDYwLDIzMDYxLDIzMDYyLDIzMDYzLDIzMDY1LDIzMDY2LDIzMDY3LDIzMDY5LDIzMDcwLDIzMDczLDIzMDc0LDIzMDc2''@;'; put 'put ''LDIzMDc4LDIzMDc5LDIzMDgwLDIzMDgyLDIzMDgzLDIzMDg0LDIzMDg1LDIzMDg2LDIzMDg3LDIzMDg4LDIzMDkxLDIzMDkzLDIzMDk1LDIzMDk2LDIzMDk3LDIzMDk4LDIzMDk5LDIzMTAxLDIzMTAyLDIzMTAzLDIzMTA1LDIzMTA2LDIzMTA3LDIzMTA4LDIzMTA5LDIzMTExLDIzMTEyLDIz''@;'; put 'put ''MTE1LDIzMTE2LDIzMTE3LDIzMTE4LDIzMTE5LDIzMTIwLDIzMTIxLDIzMTIyLDIzMTIzLDIzMTI0LDIzMTI2LDIzMTI3LDIzMTI4LDIzMTI5LDIzMTMxLDIzMTMyLDIzMTMzLDIzMTM0LDIzMTM1LDIzMTM2LDIzMTM3LDIzMTM5LDIzMTQwLDIzMTQxLDIzMTQyLDIzMTQ0LDIzMTQ1LDIzMTQ3''@;'; put 'put ''LDIzMTQ4LDIzMTQ5LDIzMTUwLDIzMTUxLDIzMTUyLDIzMTUzLDIzMTU0LDIzMTU1LDIzMTYwLDIzMTYxLDIzMTYzLDIzMTY0LDIzMTY1LDIzMTY2LDIzMTY4LDIzMTY5LDIzMTcwLDIzMTcxLDIzMTcyLDIzMTczLDIzMTc0LDIzMTc1LDIzMTc2LDIzMTc3LDIzMTc4LDIzMTc5LDIzMTgwLDIz''@;'; put 'put ''MTgxLDIzMTgyLDIzMTgzLDIzMTg0LDIzMTg1LDIzMTg3LDIzMTg4LDIzMTg5LDIzMTkwLDIzMTkxLDIzMTkyLDIzMTkzLDIzMTk2LDIzMTk3LDIzMTk4LDIzMTk5LDIzMjAwLDIzMjAxLDIzMjAyLDIzMjAzLDIzMjA0LDIzMjA1LDIzMjA2LDIzMjA3LDIzMjA4LDIzMjA5LDIzMjExLDIzMjEy''@;'; put 'put ''LDIzMjEzLDIzMjE0LDIzMjE1LDIzMjE2LDIzMjE3LDIzMjIwLDIzMjIyLDIzMjIzLDIzMjI1LDIzMjI2LDIzMjI3LDIzMjI4LDIzMjI5LDIzMjMxLDIzMjMyLDIzMjM1LDIzMjM2LDIzMjM3LDIzMjM4LDIzMjM5LDIzMjQwLDIzMjQyLDIzMjQzLDIzMjQ1LDIzMjQ2LDIzMjQ3LDIzMjQ4LDIz''@;'; put 'put ''MjQ5LDIzMjUxLDIzMjUzLDIzMjU1LDIzMjU3LDIzMjU4LDIzMjU5LDIzMjYxLDIzMjYyLDIzMjYzLDIzMjY2LDIzMjY4LDIzMjY5LDIzMjcxLDIzMjcyLDIzMjc0LDIzMjc2LDIzMjc3LDIzMjc4LDIzMjc5LDIzMjgwLDIzMjgyLDIzMjgzLDIzMjg0LDIzMjg1LDIzMjg2LDIzMjg3LDIzMjg4''@;'; put 'put ''LDIzMjg5LDIzMjkwLDIzMjkxLDIzMjkyLDIzMjkzLDIzMjk0LDIzMjk1LDIzMjk2LDIzMjk3LDIzMjk4LDIzMjk5LDIzMzAwLDIzMzAxLDIzMzAyLDIzMzAzLDIzMzA0LDIzMzA2LDIzMzA3LDIzMzA4LDIzMzA5LDIzMzEwLDIzMzExLDIzMzEyLDIzMzEzLDIzMzE0LDIzMzE1LDIzMzE2LDIz''@;'; put 'put ''MzE3LDIzMzIwLDIzMzIxLDIzMzIyLDIzMzIzLDIzMzI0LDIzMzI1LDIzMzI2LDIzMzI3LDIzMzI4LDIzMzI5LDIzMzMwLDIzMzMxLDIzMzMyLDIzMzMzLDIzMzM0LDIzMzM1LDIzMzM2LDIzMzM3LDIzMzM4LDIzMzM5LDIzMzQwLDIzMzQxLDIzMzQyLDIzMzQzLDIzMzQ0LDIzMzQ1LDIzMzQ3''@;'; put 'put ''LDIzMzQ5LDIzMzUwLDIzMzUyLDIzMzUzLDIzMzU0LDIzMzU1LDIzMzU2LDIzMzU3LDIzMzU4LDIzMzU5LDIzMzYxLDIzMzYyLDIzMzYzLDIzMzY0LDIzMzY1LDIzMzY2LDIzMzY3LDIzMzY4LDIzMzY5LDIzMzcwLDIzMzcxLDIzMzcyLDIzMzczLDIzMzc0LDIzMzc1LDIzMzc4LDIzMzgyLDIz''@;'; put 'put ''MzkwLDIzMzkyLDIzMzkzLDIzMzk5LDIzNDAwLDIzNDAzLDIzNDA1LDIzNDA2LDIzNDA3LDIzNDEwLDIzNDEyLDIzNDE0LDIzNDE1LDIzNDE2LDIzNDE3LDIzNDE5LDIzNDIwLDIzNDIyLDIzNDIzLDIzNDI2LDIzNDMwLDIzNDM0LDIzNDM3LDIzNDM4LDIzNDQwLDIzNDQxLDIzNDQyLDIzNDQ0''@;'; put 'put ''LDIzNDQ2LDIzNDU1LDIzNDYzLDIzNDY0LDIzNDY1LDIzNDY4LDIzNDY5LDIzNDcwLDIzNDcxLDIzNDczLDIzNDc0LDIzNDc5LDIzNDgyLDIzNDgzLDIzNDg0LDIzNDg4LDIzNDg5LDIzNDkxLDIzNDk2LDIzNDk3LDIzNDk4LDIzNDk5LDIzNTAxLDIzNTAyLDIzNTAzLDIzNTA1LDIzNTA4LDIz''@;'; put 'put ''NTA5LDIzNTEwLDIzNTExLDIzNTEyLDIzNTEzLDIzNTE0LDIzNTE1LDIzNTE2LDIzNTIwLDIzNTIyLDIzNTIzLDIzNTI2LDIzNTI3LDIzNTI5LDIzNTMwLDIzNTMxLDIzNTMyLDIzNTMzLDIzNTM1LDIzNTM3LDIzNTM4LDIzNTM5LDIzNTQwLDIzNTQxLDIzNTQyLDIzNTQzLDIzNTQ5LDIzNTUw''@;'; put 'put ''LDIzNTUyLDIzNTU0LDIzNTU1LDIzNTU3LDIzNTU5LDIzNTYwLDIzNTYzLDIzNTY0LDIzNTY1LDIzNTY2LDIzNTY4LDIzNTcwLDIzNTcxLDIzNTc1LDIzNTc3LDIzNTc5LDIzNTgyLDIzNTgzLDIzNTg0LDIzNTg1LDIzNTg3LDIzNTkwLDIzNTkyLDIzNTkzLDIzNTk0LDIzNTk1LDIzNTk3LDIz''@;'; put 'put ''NTk4LDIzNTk5LDIzNjAwLDIzNjAyLDIzNjAzLDIzNjA1LDIzNjA2LDIzNjA3LDIzNjE5LDIzNjIwLDIzNjIyLDIzNjIzLDIzNjI4LDIzNjI5LDIzNjM0LDIzNjM1LDIzNjM2LDIzNjM4LDIzNjM5LDIzNjQwLDIzNjQyLDIzNjQzLDIzNjQ0LDIzNjQ1LDIzNjQ3LDIzNjUwLDIzNjUyLDIzNjU1''@;'; put 'put ''LDIzNjU2LDIzNjU3LDIzNjU4LDIzNjU5LDIzNjYwLDIzNjYxLDIzNjY0LDIzNjY2LDIzNjY3LDIzNjY4LDIzNjY5LDIzNjcwLDIzNjcxLDIzNjcyLDIzNjc1LDIzNjc2LDIzNjc3LDIzNjc4LDIzNjgwLDIzNjgzLDIzNjg0LDIzNjg1LDIzNjg2LDIzNjg3LDIzNjg5LDIzNjkwLDIzNjkxLDIz''@;'; put 'put ''Njk0LDIzNjk1LDIzNjk4LDIzNjk5LDIzNzAxLDIzNzA5LDIzNzEwLDIzNzExLDIzNzEyLDIzNzEzLDIzNzE2LDIzNzE3LDIzNzE4LDIzNzE5LDIzNzIwLDIzNzIyLDIzNzI2LDIzNzI3LDIzNzI4LDIzNzMwLDIzNzMyLDIzNzM0LDIzNzM3LDIzNzM4LDIzNzM5LDIzNzQwLDIzNzQyLDIzNzQ0''@;'; put 'put ''LDIzNzQ2LDIzNzQ3LDIzNzQ5LDIzNzUwLDIzNzUxLDIzNzUyLDIzNzUzLDIzNzU0LDIzNzU2LDIzNzU3LDIzNzU4LDIzNzU5LDIzNzYwLDIzNzYxLDIzNzYzLDIzNzY0LDIzNzY1LDIzNzY2LDIzNzY3LDIzNzY4LDIzNzcwLDIzNzcxLDIzNzcyLDIzNzczLDIzNzc0LDIzNzc1LDIzNzc2LDIz''@;'; put 'put ''Nzc4LDIzNzc5LDIzNzgzLDIzNzg1LDIzNzg3LDIzNzg4LDIzNzkwLDIzNzkxLDIzNzkzLDIzNzk0LDIzNzk1LDIzNzk2LDIzNzk3LDIzNzk4LDIzNzk5LDIzODAwLDIzODAxLDIzODAyLDIzODA0LDIzODA1LDIzODA2LDIzODA3LDIzODA4LDIzODA5LDIzODEyLDIzODEzLDIzODE2LDIzODE3''@;'; put 'put ''LDIzODE4LDIzODE5LDIzODIwLDIzODIxLDIzODIzLDIzODI0LDIzODI1LDIzODI2LDIzODI3LDIzODI5LDIzODMxLDIzODMyLDIzODMzLDIzODM0LDIzODM2LDIzODM3LDIzODM5LDIzODQwLDIzODQxLDIzODQyLDIzODQzLDIzODQ1LDIzODQ4LDIzODUwLDIzODUxLDIzODUyLDIzODU1LDIz''@;'; put 'put ''ODU2LDIzODU3LDIzODU4LDIzODU5LDIzODYxLDIzODYyLDIzODYzLDIzODY0LDIzODY1LDIzODY2LDIzODY3LDIzODY4LDIzODcxLDIzODcyLDIzODczLDIzODc0LDIzODc1LDIzODc2LDIzODc3LDIzODc4LDIzODgwLDIzODgxLDIzODg1LDIzODg2LDIzODg3LDIzODg4LDIzODg5LDIzODkw''@;'; put 'put ''LDIzODkxLDIzODkyLDIzODkzLDIzODk0LDIzODk1LDIzODk3LDIzODk4LDIzOTAwLDIzOTAyLDIzOTAzLDIzOTA0LDIzOTA1LDIzOTA2LDIzOTA3LDIzOTA4LDIzOTA5LDIzOTEwLDIzOTExLDIzOTEyLDIzOTE0LDIzOTE3LDIzOTE4LDIzOTIwLDIzOTIxLDIzOTIyLDIzOTIzLDIzOTI1LDIz''@;'; put 'put ''OTI2LDIzOTI3LDIzOTI4LDIzOTI5LDIzOTMwLDIzOTMxLDIzOTMyLDIzOTMzLDIzOTM0LDIzOTM1LDIzOTM2LDIzOTM3LDIzOTM5LDIzOTQwLDIzOTQxLDIzOTQyLDIzOTQzLDIzOTQ0LDIzOTQ1LDIzOTQ2LDIzOTQ3LDIzOTQ4LDIzOTQ5LDIzOTUwLDIzOTUxLDIzOTUyLDIzOTUzLDIzOTU0''@;'; put 'put ''LDIzOTU1LDIzOTU2LDIzOTU3LDIzOTU4LDIzOTU5LDIzOTYwLDIzOTYyLDIzOTYzLDIzOTY0LDIzOTY2LDIzOTY3LDIzOTY4LDIzOTY5LDIzOTcwLDIzOTcxLDIzOTcyLDIzOTczLDIzOTc0LDIzOTc1LDIzOTc2LDIzOTc3LDIzOTc4LDIzOTc5LDIzOTgwLDIzOTgxLDIzOTgyLDIzOTgzLDIz''@;'; put 'put ''OTg0LDIzOTg1LDIzOTg2LDIzOTg3LDIzOTg4LDIzOTg5LDIzOTkwLDIzOTkyLDIzOTkzLDIzOTk0LDIzOTk1LDIzOTk2LDIzOTk3LDIzOTk4LDIzOTk5LDI0ZTMsMjQwMDEsMjQwMDIsMjQwMDMsMjQwMDQsMjQwMDYsMjQwMDcsMjQwMDgsMjQwMDksMjQwMTAsMjQwMTEsMjQwMTIsMjQwMTQs''@;'; put 'put ''MjQwMTUsMjQwMTYsMjQwMTcsMjQwMTgsMjQwMTksMjQwMjAsMjQwMjEsMjQwMjIsMjQwMjMsMjQwMjQsMjQwMjUsMjQwMjYsMjQwMjgsMjQwMzEsMjQwMzIsMjQwMzUsMjQwMzYsMjQwNDIsMjQwNDQsMjQwNDUsMjQwNDgsMjQwNTMsMjQwNTQsMjQwNTYsMjQwNTcsMjQwNTgsMjQwNTksMjQw''@;'; put 'put ''NjAsMjQwNjMsMjQwNjQsMjQwNjgsMjQwNzEsMjQwNzMsMjQwNzQsMjQwNzUsMjQwNzcsMjQwNzgsMjQwODIsMjQwODMsMjQwODcsMjQwOTQsMjQwOTUsMjQwOTYsMjQwOTcsMjQwOTgsMjQwOTksMjQxMDAsMjQxMDEsMjQxMDQsMjQxMDUsMjQxMDYsMjQxMDcsMjQxMDgsMjQxMTEsMjQxMTIs''@;'; put 'put ''MjQxMTQsMjQxMTUsMjQxMTYsMjQxMTcsMjQxMTgsMjQxMjEsMjQxMjIsMjQxMjYsMjQxMjcsMjQxMjgsMjQxMjksMjQxMzEsMjQxMzQsMjQxMzUsMjQxMzYsMjQxMzcsMjQxMzgsMjQxMzksMjQxNDEsMjQxNDIsMjQxNDMsMjQxNDQsMjQxNDUsMjQxNDYsMjQxNDcsMjQxNTAsMjQxNTEsMjQx''@;'; put 'put ''NTIsMjQxNTMsMjQxNTQsMjQxNTYsMjQxNTcsMjQxNTksMjQxNjAsMjQxNjMsMjQxNjQsMjQxNjUsMjQxNjYsMjQxNjcsMjQxNjgsMjQxNjksMjQxNzAsMjQxNzEsMjQxNzIsMjQxNzMsMjQxNzQsMjQxNzUsMjQxNzYsMjQxNzcsMjQxODEsMjQxODMsMjQxODUsMjQxOTAsMjQxOTMsMjQxOTQs''@;'; put 'put ''MjQxOTUsMjQxOTcsMjQyMDAsMjQyMDEsMjQyMDQsMjQyMDUsMjQyMDYsMjQyMTAsMjQyMTYsMjQyMTksMjQyMjEsMjQyMjUsMjQyMjYsMjQyMjcsMjQyMjgsMjQyMzIsMjQyMzMsMjQyMzQsMjQyMzUsMjQyMzYsMjQyMzgsMjQyMzksMjQyNDAsMjQyNDEsMjQyNDIsMjQyNDQsMjQyNTAsMjQy''@;'; put 'put ''NTEsMjQyNTIsMjQyNTMsMjQyNTUsMjQyNTYsMjQyNTcsMjQyNTgsMjQyNTksMjQyNjAsMjQyNjEsMjQyNjIsMjQyNjMsMjQyNjQsMjQyNjcsMjQyNjgsMjQyNjksMjQyNzAsMjQyNzEsMjQyNzIsMjQyNzYsMjQyNzcsMjQyNzksMjQyODAsMjQyODEsMjQyODIsMjQyODQsMjQyODUsMjQyODYs''@;'; put 'put ''MjQyODcsMjQyODgsMjQyODksMjQyOTAsMjQyOTEsMjQyOTIsMjQyOTMsMjQyOTQsMjQyOTUsMjQyOTcsMjQyOTksMjQzMDAsMjQzMDEsMjQzMDIsMjQzMDMsMjQzMDQsMjQzMDUsMjQzMDYsMjQzMDcsMjQzMDksMjQzMTIsMjQzMTMsMjQzMTUsMjQzMTYsMjQzMTcsMjQzMjUsMjQzMjYsMjQz''@;'; put 'put ''MjcsMjQzMjksMjQzMzIsMjQzMzMsMjQzMzQsMjQzMzYsMjQzMzgsMjQzNDAsMjQzNDIsMjQzNDUsMjQzNDYsMjQzNDgsMjQzNDksMjQzNTAsMjQzNTMsMjQzNTQsMjQzNTUsMjQzNTYsMjQzNjAsMjQzNjMsMjQzNjQsMjQzNjYsMjQzNjgsMjQzNzAsMjQzNzEsMjQzNzIsMjQzNzMsMjQzNzQs''@;'; put 'put ''MjQzNzUsMjQzNzYsMjQzNzksMjQzODEsMjQzODIsMjQzODMsMjQzODUsMjQzODYsMjQzODcsMjQzODgsMjQzODksMjQzOTAsMjQzOTEsMjQzOTIsMjQzOTMsMjQzOTQsMjQzOTUsMjQzOTYsMjQzOTcsMjQzOTgsMjQzOTksMjQ0MDEsMjQ0MDQsMjQ0MDksMjQ0MTAsMjQ0MTEsMjQ0MTIsMjQ0''@;'; put 'put ''MTQsMjQ0MTUsMjQ0MTYsMjQ0MTksMjQ0MjEsMjQ0MjMsMjQ0MjQsMjQ0MjcsMjQ0MzAsMjQ0MzEsMjQ0MzQsMjQ0MzYsMjQ0MzcsMjQ0MzgsMjQ0NDAsMjQ0NDIsMjQ0NDUsMjQ0NDYsMjQ0NDcsMjQ0NTEsMjQ0NTQsMjQ0NjEsMjQ0NjIsMjQ0NjMsMjQ0NjUsMjQ0NjcsMjQ0NjgsMjQ0NzAs''@;'; put 'put ''MjQ0NzQsMjQ0NzUsMjQ0NzcsMjQ0NzgsMjQ0NzksMjQ0ODAsMjQ0ODIsMjQ0ODMsMjQ0ODQsMjQ0ODUsMjQ0ODYsMjQ0ODcsMjQ0ODksMjQ0OTEsMjQ0OTIsMjQ0OTUsMjQ0OTYsMjQ0OTcsMjQ0OTgsMjQ0OTksMjQ1MDAsMjQ1MDIsMjQ1MDQsMjQ1MDUsMjQ1MDYsMjQ1MDcsMjQ1MTAsMjQ1''@;'; put 'put ''MTEsMjQ1MTIsMjQ1MTMsMjQ1MTQsMjQ1MTksMjQ1MjAsMjQ1MjIsMjQ1MjMsMjQ1MjYsMjQ1MzEsMjQ1MzIsMjQ1MzMsMjQ1MzgsMjQ1MzksMjQ1NDAsMjQ1NDIsMjQ1NDMsMjQ1NDYsMjQ1NDcsMjQ1NDksMjQ1NTAsMjQ1NTIsMjQ1NTMsMjQ1NTYsMjQ1NTksMjQ1NjAsMjQ1NjIsMjQ1NjMs''@;'; put 'put ''MjQ1NjQsMjQ1NjYsMjQ1NjcsMjQ1NjksMjQ1NzAsMjQ1NzIsMjQ1ODMsMjQ1ODQsMjQ1ODUsMjQ1ODcsMjQ1ODgsMjQ1OTIsMjQ1OTMsMjQ1OTUsMjQ1OTksMjQ2MDAsMjQ2MDIsMjQ2MDYsMjQ2MDcsMjQ2MTAsMjQ2MTEsMjQ2MTIsMjQ2MjAsMjQ2MjEsMjQ2MjIsMjQ2MjQsMjQ2MjUsMjQ2''@;'; put 'put ''MjYsMjQ2MjcsMjQ2MjgsMjQ2MzAsMjQ2MzEsMjQ2MzIsMjQ2MzMsMjQ2MzQsMjQ2MzcsMjQ2MzgsMjQ2NDAsMjQ2NDQsMjQ2NDUsMjQ2NDYsMjQ2NDcsMjQ2NDgsMjQ2NDksMjQ2NTAsMjQ2NTIsMjQ2NTQsMjQ2NTUsMjQ2NTcsMjQ2NTksMjQ2NjAsMjQ2NjIsMjQ2NjMsMjQ2NjQsMjQ2Njcs''@;'; put 'put ''MjQ2NjgsMjQ2NzAsMjQ2NzEsMjQ2NzIsMjQ2NzMsMjQ2NzcsMjQ2NzgsMjQ2ODYsMjQ2ODksMjQ2OTAsMjQ2OTIsMjQ2OTMsMjQ2OTUsMjQ3MDIsMjQ3MDQsMjQ3MDUsMjQ3MDYsMjQ3MDksMjQ3MTAsMjQ3MTEsMjQ3MTIsMjQ3MTQsMjQ3MTUsMjQ3MTgsMjQ3MTksMjQ3MjAsMjQ3MjEsMjQ3''@;'; put 'put ''MjMsMjQ3MjUsMjQ3MjcsMjQ3MjgsMjQ3MjksMjQ3MzIsMjQ3MzQsMjQ3MzcsMjQ3MzgsMjQ3NDAsMjQ3NDEsMjQ3NDMsMjQ3NDUsMjQ3NDYsMjQ3NTAsMjQ3NTIsMjQ3NTUsMjQ3NTcsMjQ3NTgsMjQ3NTksMjQ3NjEsMjQ3NjIsMjQ3NjUsMjQ3NjYsMjQ3NjcsMjQ3NjgsMjQ3NjksMjQ3NzAs''@;'; put 'put ''MjQ3NzEsMjQ3NzIsMjQ3NzUsMjQ3NzYsMjQ3NzcsMjQ3ODAsMjQ3ODEsMjQ3ODIsMjQ3ODMsMjQ3ODQsMjQ3ODYsMjQ3ODcsMjQ3ODgsMjQ3OTAsMjQ3OTEsMjQ3OTMsMjQ3OTUsMjQ3OTgsMjQ4MDEsMjQ4MDIsMjQ4MDMsMjQ4MDQsMjQ4MDUsMjQ4MTAsMjQ4MTcsMjQ4MTgsMjQ4MjEsMjQ4''@;'; put 'put ''MjMsMjQ4MjQsMjQ4MjcsMjQ4MjgsMjQ4MjksMjQ4MzAsMjQ4MzEsMjQ4MzQsMjQ4MzUsMjQ4MzYsMjQ4MzcsMjQ4MzksMjQ4NDIsMjQ4NDMsMjQ4NDQsMjQ4NDgsMjQ4NDksMjQ4NTAsMjQ4NTEsMjQ4NTIsMjQ4NTQsMjQ4NTUsMjQ4NTYsMjQ4NTcsMjQ4NTksMjQ4NjAsMjQ4NjEsMjQ4NjIs''@;'; put 'put ''MjQ4NjUsMjQ4NjYsMjQ4NjksMjQ4NzIsMjQ4NzMsMjQ4NzQsMjQ4NzYsMjQ4NzcsMjQ4NzgsMjQ4NzksMjQ4ODAsMjQ4ODEsMjQ4ODIsMjQ4ODMsMjQ4ODQsMjQ4ODUsMjQ4ODYsMjQ4ODcsMjQ4ODgsMjQ4ODksMjQ4OTAsMjQ4OTEsMjQ4OTIsMjQ4OTMsMjQ4OTQsMjQ4OTYsMjQ4OTcsMjQ4''@;'; put 'put ''OTgsMjQ4OTksMjQ5MDAsMjQ5MDEsMjQ5MDIsMjQ5MDMsMjQ5MDUsMjQ5MDcsMjQ5MDksMjQ5MTEsMjQ5MTIsMjQ5MTQsMjQ5MTUsMjQ5MTYsMjQ5MTgsMjQ5MTksMjQ5MjAsMjQ5MjEsMjQ5MjIsMjQ5MjMsMjQ5MjQsMjQ5MjYsMjQ5MjcsMjQ5MjgsMjQ5MjksMjQ5MzEsMjQ5MzIsMjQ5MzMs''@;'; put 'put ''MjQ5MzQsMjQ5MzcsMjQ5MzgsMjQ5MzksMjQ5NDAsMjQ5NDEsMjQ5NDIsMjQ5NDMsMjQ5NDUsMjQ5NDYsMjQ5NDcsMjQ5NDgsMjQ5NTAsMjQ5NTIsMjQ5NTMsMjQ5NTQsMjQ5NTUsMjQ5NTYsMjQ5NTcsMjQ5NTgsMjQ5NTksMjQ5NjAsMjQ5NjEsMjQ5NjIsMjQ5NjMsMjQ5NjQsMjQ5NjUsMjQ5''@;'; put 'put ''NjYsMjQ5NjcsMjQ5NjgsMjQ5NjksMjQ5NzAsMjQ5NzIsMjQ5NzMsMjQ5NzUsMjQ5NzYsMjQ5NzcsMjQ5NzgsMjQ5NzksMjQ5ODEsMjQ5ODIsMjQ5ODMsMjQ5ODQsMjQ5ODUsMjQ5ODYsMjQ5ODcsMjQ5ODgsMjQ5OTAsMjQ5OTEsMjQ5OTIsMjQ5OTMsMjQ5OTQsMjQ5OTUsMjQ5OTYsMjQ5OTcs''@;'; put 'put ''MjQ5OTgsMjUwMDIsMjUwMDMsMjUwMDUsMjUwMDYsMjUwMDcsMjUwMDgsMjUwMDksMjUwMTAsMjUwMTEsMjUwMTIsMjUwMTMsMjUwMTQsMjUwMTYsMjUwMTcsMjUwMTgsMjUwMTksMjUwMjAsMjUwMjEsMjUwMjMsMjUwMjQsMjUwMjUsMjUwMjcsMjUwMjgsMjUwMjksMjUwMzAsMjUwMzEsMjUw''@;'; put 'put ''MzMsMjUwMzYsMjUwMzcsMjUwMzgsMjUwMzksMjUwNDAsMjUwNDMsMjUwNDUsMjUwNDYsMjUwNDcsMjUwNDgsMjUwNDksMjUwNTAsMjUwNTEsMjUwNTIsMjUwNTMsMjUwNTQsMjUwNTUsMjUwNTYsMjUwNTcsMjUwNTgsMjUwNTksMjUwNjAsMjUwNjEsMjUwNjMsMjUwNjQsMjUwNjUsMjUwNjYs''@;'; put 'put ''MjUwNjcsMjUwNjgsMjUwNjksMjUwNzAsMjUwNzEsMjUwNzIsMjUwNzMsMjUwNzQsMjUwNzUsMjUwNzYsMjUwNzgsMjUwNzksMjUwODAsMjUwODEsMjUwODIsMjUwODMsMjUwODQsMjUwODUsMjUwODYsMjUwODgsMjUwODksMjUwOTAsMjUwOTEsMjUwOTIsMjUwOTMsMjUwOTUsMjUwOTcsMjUx''@;'; put 'put ''MDcsMjUxMDgsMjUxMTMsMjUxMTYsMjUxMTcsMjUxMTgsMjUxMjAsMjUxMjMsMjUxMjYsMjUxMjcsMjUxMjgsMjUxMjksMjUxMzEsMjUxMzMsMjUxMzUsMjUxMzYsMjUxMzcsMjUxMzgsMjUxNDEsMjUxNDIsMjUxNDQsMjUxNDUsMjUxNDYsMjUxNDcsMjUxNDgsMjUxNTQsMjUxNTYsMjUxNTcs''@;'; put 'put ''MjUxNTgsMjUxNjIsMjUxNjcsMjUxNjgsMjUxNzMsMjUxNzQsMjUxNzUsMjUxNzcsMjUxNzgsMjUxODAsMjUxODEsMjUxODIsMjUxODMsMjUxODQsMjUxODUsMjUxODYsMjUxODgsMjUxODksMjUxOTIsMjUyMDEsMjUyMDIsMjUyMDQsMjUyMDUsMjUyMDcsMjUyMDgsMjUyMTAsMjUyMTEsMjUy''@;'; put 'put ''MTMsMjUyMTcsMjUyMTgsMjUyMTksMjUyMjEsMjUyMjIsMjUyMjMsMjUyMjQsMjUyMjcsMjUyMjgsMjUyMjksMjUyMzAsMjUyMzEsMjUyMzIsMjUyMzYsMjUyNDEsMjUyNDQsMjUyNDUsMjUyNDYsMjUyNTEsMjUyNTQsMjUyNTUsMjUyNTcsMjUyNTgsMjUyNjEsMjUyNjIsMjUyNjMsMjUyNjQs''@;'; put 'put ''MjUyNjYsMjUyNjcsMjUyNjgsMjUyNzAsMjUyNzEsMjUyNzIsMjUyNzQsMjUyNzgsMjUyODAsMjUyODEsMjUyODMsMjUyOTEsMjUyOTUsMjUyOTcsMjUzMDEsMjUzMDksMjUzMTAsMjUzMTIsMjUzMTMsMjUzMTYsMjUzMjIsMjUzMjMsMjUzMjgsMjUzMzAsMjUzMzMsMjUzMzYsMjUzMzcsMjUz''@;'; put 'put ''MzgsMjUzMzksMjUzNDQsMjUzNDcsMjUzNDgsMjUzNDksMjUzNTAsMjUzNTQsMjUzNTUsMjUzNTYsMjUzNTcsMjUzNTksMjUzNjAsMjUzNjIsMjUzNjMsMjUzNjQsMjUzNjUsMjUzNjcsMjUzNjgsMjUzNjksMjUzNzIsMjUzODIsMjUzODMsMjUzODUsMjUzODgsMjUzODksMjUzOTAsMjUzOTIs''@;'; put 'put ''MjUzOTMsMjUzOTUsMjUzOTYsMjUzOTcsMjUzOTgsMjUzOTksMjU0MDAsMjU0MDMsMjU0MDQsMjU0MDYsMjU0MDcsMjU0MDgsMjU0MDksMjU0MTIsMjU0MTUsMjU0MTYsMjU0MTgsMjU0MjUsMjU0MjYsMjU0MjcsMjU0MjgsMjU0MzAsMjU0MzEsMjU0MzIsMjU0MzMsMjU0MzQsMjU0MzUsMjU0''@;'; put 'put ''MzYsMjU0MzcsMjU0NDAsMjU0NDQsMjU0NDUsMjU0NDYsMjU0NDgsMjU0NTAsMjU0NTEsMjU0NTIsMjU0NTUsMjU0NTYsMjU0NTgsMjU0NTksMjU0NjAsMjU0NjEsMjU0NjQsMjU0NjUsMjU0NjgsMjU0NjksMjU0NzAsMjU0NzEsMjU0NzMsMjU0NzUsMjU0NzYsMjU0NzcsMjU0NzgsMjU0ODMs''@;'; put 'put ''MjU0ODUsMjU0ODksMjU0OTEsMjU0OTIsMjU0OTMsMjU0OTUsMjU0OTcsMjU0OTgsMjU0OTksMjU1MDAsMjU1MDEsMjU1MDIsMjU1MDMsMjU1MDUsMjU1MDgsMjU1MTAsMjU1MTUsMjU1MTksMjU1MjEsMjU1MjIsMjU1MjUsMjU1MjYsMjU1MjksMjU1MzEsMjU1MzMsMjU1MzUsMjU1MzYsMjU1''@;'; put 'put ''MzcsMjU1MzgsMjU1MzksMjU1NDEsMjU1NDMsMjU1NDQsMjU1NDYsMjU1NDcsMjU1NDgsMjU1NTMsMjU1NTUsMjU1NTYsMjU1NTcsMjU1NTksMjU1NjAsMjU1NjEsMjU1NjIsMjU1NjMsMjU1NjQsMjU1NjUsMjU1NjcsMjU1NzAsMjU1NzIsMjU1NzMsMjU1NzQsMjU1NzUsMjU1NzYsMjU1Nzks''@;'; put 'put ''MjU1ODAsMjU1ODIsMjU1ODMsMjU1ODQsMjU1ODUsMjU1ODcsMjU1ODksMjU1OTEsMjU1OTMsMjU1OTQsMjU1OTUsMjU1OTYsMjU1OTgsMjU2MDMsMjU2MDQsMjU2MDYsMjU2MDcsMjU2MDgsMjU2MDksMjU2MTAsMjU2MTMsMjU2MTQsMjU2MTcsMjU2MTgsMjU2MjEsMjU2MjIsMjU2MjMsMjU2''@;'; put 'put ''MjQsMjU2MjUsMjU2MjYsMjU2MjksMjU2MzEsMjU2MzQsMjU2MzUsMjU2MzYsMjU2MzcsMjU2MzksMjU2NDAsMjU2NDEsMjU2NDMsMjU2NDYsMjU2NDcsMjU2NDgsMjU2NDksMjU2NTAsMjU2NTEsMjU2NTMsMjU2NTQsMjU2NTUsMjU2NTYsMjU2NTcsMjU2NTksMjU2NjAsMjU2NjIsMjU2NjQs''@;'; put 'put ''MjU2NjYsMjU2NjcsMjU2NzMsMjU2NzUsMjU2NzYsMjU2NzcsMjU2NzgsMjU2NzksMjU2ODAsMjU2ODEsMjU2ODMsMjU2ODUsMjU2ODYsMjU2ODcsMjU2ODksMjU2OTAsMjU2OTEsMjU2OTIsMjU2OTMsMjU2OTUsMjU2OTYsMjU2OTcsMjU2OTgsMjU2OTksMjU3MDAsMjU3MDEsMjU3MDIsMjU3''@;'; put 'put ''MDQsMjU3MDYsMjU3MDcsMjU3MDgsMjU3MTAsMjU3MTEsMjU3MTIsMjU3MTMsMjU3MTQsMjU3MTUsMjU3MTYsMjU3MTcsMjU3MTgsMjU3MTksMjU3MjMsMjU3MjQsMjU3MjUsMjU3MjYsMjU3MjcsMjU3MjgsMjU3MjksMjU3MzEsMjU3MzQsMjU3MzYsMjU3MzcsMjU3MzgsMjU3MzksMjU3NDAs''@;'; put 'put ''MjU3NDEsMjU3NDIsMjU3NDMsMjU3NDQsMjU3NDcsMjU3NDgsMjU3NTEsMjU3NTIsMjU3NTQsMjU3NTUsMjU3NTYsMjU3NTcsMjU3NTksMjU3NjAsMjU3NjEsMjU3NjIsMjU3NjMsMjU3NjUsMjU3NjYsMjU3NjcsMjU3NjgsMjU3NzAsMjU3NzEsMjU3NzUsMjU3NzcsMjU3NzgsMjU3NzksMjU3''@;'; put 'put ''ODAsMjU3ODIsMjU3ODUsMjU3ODcsMjU3ODksMjU3OTAsMjU3OTEsMjU3OTMsMjU3OTUsMjU3OTYsMjU3OTgsMjU3OTksMjU4MDAsMjU4MDEsMjU4MDIsMjU4MDMsMjU4MDQsMjU4MDcsMjU4MDksMjU4MTEsMjU4MTIsMjU4MTMsMjU4MTQsMjU4MTcsMjU4MTgsMjU4MTksMjU4MjAsMjU4MjEs''@;'; put 'put ''MjU4MjMsMjU4MjQsMjU4MjUsMjU4MjcsMjU4MjksMjU4MzEsMjU4MzIsMjU4MzMsMjU4MzQsMjU4MzUsMjU4MzYsMjU4MzcsMjU4MzgsMjU4MzksMjU4NDAsMjU4NDEsMjU4NDIsMjU4NDMsMjU4NDQsMjU4NDUsMjU4NDYsMjU4NDcsMjU4NDgsMjU4NDksMjU4NTAsMjU4NTEsMjU4NTIsMjU4''@;'; put 'put ''NTMsMjU4NTQsMjU4NTUsMjU4NTcsMjU4NTgsMjU4NTksMjU4NjAsMjU4NjEsMjU4NjIsMjU4NjMsMjU4NjQsMjU4NjYsMjU4NjcsMjU4NjgsMjU4NjksMjU4NzAsMjU4NzEsMjU4NzIsMjU4NzMsMjU4NzUsMjU4NzYsMjU4NzcsMjU4NzgsMjU4NzksMjU4ODEsMjU4ODIsMjU4ODMsMjU4ODQs''@;'; put 'put ''MjU4ODUsMjU4ODYsMjU4ODcsMjU4ODgsMjU4ODksMjU4OTAsMjU4OTEsMjU4OTIsMjU4OTQsMjU4OTUsMjU4OTYsMjU4OTcsMjU4OTgsMjU5MDAsMjU5MDEsMjU5MDQsMjU5MDUsMjU5MDYsMjU5MDcsMjU5MTEsMjU5MTQsMjU5MTYsMjU5MTcsMjU5MjAsMjU5MjEsMjU5MjIsMjU5MjMsMjU5''@;'; put 'put ''MjQsMjU5MjYsMjU5MjcsMjU5MzAsMjU5MzEsMjU5MzMsMjU5MzQsMjU5MzYsMjU5MzgsMjU5MzksMjU5NDAsMjU5NDMsMjU5NDQsMjU5NDYsMjU5NDgsMjU5NTEsMjU5NTIsMjU5NTMsMjU5NTYsMjU5NTcsMjU5NTksMjU5NjAsMjU5NjEsMjU5NjIsMjU5NjUsMjU5NjYsMjU5NjcsMjU5Njks''@;'; put 'put ''MjU5NzEsMjU5NzMsMjU5NzQsMjU5NzYsMjU5NzcsMjU5NzgsMjU5NzksMjU5ODAsMjU5ODEsMjU5ODIsMjU5ODMsMjU5ODQsMjU5ODUsMjU5ODYsMjU5ODcsMjU5ODgsMjU5ODksMjU5OTAsMjU5OTIsMjU5OTMsMjU5OTQsMjU5OTcsMjU5OTgsMjU5OTksMjYwMDIsMjYwMDQsMjYwMDUsMjYw''@;'; put 'put ''MDYsMjYwMDgsMjYwMTAsMjYwMTMsMjYwMTQsMjYwMTYsMjYwMTgsMjYwMTksMjYwMjIsMjYwMjQsMjYwMjYsMjYwMjgsMjYwMzAsMjYwMzMsMjYwMzQsMjYwMzUsMjYwMzYsMjYwMzcsMjYwMzgsMjYwMzksMjYwNDAsMjYwNDIsMjYwNDMsMjYwNDYsMjYwNDcsMjYwNDgsMjYwNTAsMjYwNTUs''@;'; put 'put ''MjYwNTYsMjYwNTcsMjYwNTgsMjYwNjEsMjYwNjQsMjYwNjUsMjYwNjcsMjYwNjgsMjYwNjksMjYwNzIsMjYwNzMsMjYwNzQsMjYwNzUsMjYwNzYsMjYwNzcsMjYwNzgsMjYwNzksMjYwODEsMjYwODMsMjYwODQsMjYwOTAsMjYwOTEsMjYwOTgsMjYwOTksMjYxMDAsMjYxMDEsMjYxMDQsMjYx''@;'; put 'put ''MDUsMjYxMDcsMjYxMDgsMjYxMDksMjYxMTAsMjYxMTEsMjYxMTMsMjYxMTYsMjYxMTcsMjYxMTksMjYxMjAsMjYxMjEsMjYxMjMsMjYxMjUsMjYxMjgsMjYxMjksMjYxMzAsMjYxMzQsMjYxMzUsMjYxMzYsMjYxMzgsMjYxMzksMjYxNDAsMjYxNDIsMjYxNDUsMjYxNDYsMjYxNDcsMjYxNDgs''@;'; put 'put ''MjYxNTAsMjYxNTMsMjYxNTQsMjYxNTUsMjYxNTYsMjYxNTgsMjYxNjAsMjYxNjIsMjYxNjMsMjYxNjcsMjYxNjgsMjYxNjksMjYxNzAsMjYxNzEsMjYxNzMsMjYxNzUsMjYxNzYsMjYxNzgsMjYxODAsMjYxODEsMjYxODIsMjYxODMsMjYxODQsMjYxODUsMjYxODYsMjYxODksMjYxOTAsMjYx''@;'; put 'put ''OTIsMjYxOTMsMjYyMDAsMjYyMDEsMjYyMDMsMjYyMDQsMjYyMDUsMjYyMDYsMjYyMDgsMjYyMTAsMjYyMTEsMjYyMTMsMjYyMTUsMjYyMTcsMjYyMTgsMjYyMTksMjYyMjAsMjYyMjEsMjYyMjUsMjYyMjYsMjYyMjcsMjYyMjksMjYyMzIsMjYyMzMsMjYyMzUsMjYyMzYsMjYyMzcsMjYyMzks''@;'; put 'put ''MjYyNDAsMjYyNDEsMjYyNDMsMjYyNDUsMjYyNDYsMjYyNDgsMjYyNDksMjYyNTAsMjYyNTEsMjYyNTMsMjYyNTQsMjYyNTUsMjYyNTYsMjYyNTgsMjYyNTksMjYyNjAsMjYyNjEsMjYyNjQsMjYyNjUsMjYyNjYsMjYyNjcsMjYyNjgsMjYyNzAsMjYyNzEsMjYyNzIsMjYyNzMsMjYyNzQsMjYy''@;'; put 'put ''NzUsMjYyNzYsMjYyNzcsMjYyNzgsMjYyODEsMjYyODIsMjYyODMsMjYyODQsMjYyODUsMjYyODcsMjYyODgsMjYyODksMjYyOTAsMjYyOTEsMjYyOTMsMjYyOTQsMjYyOTUsMjYyOTYsMjYyOTgsMjYyOTksMjYzMDAsMjYzMDEsMjYzMDMsMjYzMDQsMjYzMDUsMjYzMDYsMjYzMDcsMjYzMDgs''@;'; put 'put ''MjYzMDksMjYzMTAsMjYzMTEsMjYzMTIsMjYzMTMsMjYzMTQsMjYzMTUsMjYzMTYsMjYzMTcsMjYzMTgsMjYzMTksMjYzMjAsMjYzMjEsMjYzMjIsMjYzMjMsMjYzMjQsMjYzMjUsMjYzMjYsMjYzMjcsMjYzMjgsMjYzMzAsMjYzMzQsMjYzMzUsMjYzMzYsMjYzMzcsMjYzMzgsMjYzMzksMjYz''@;'; put 'put ''NDAsMjYzNDEsMjYzNDMsMjYzNDQsMjYzNDYsMjYzNDcsMjYzNDgsMjYzNDksMjYzNTAsMjYzNTEsMjYzNTMsMjYzNTcsMjYzNTgsMjYzNjAsMjYzNjIsMjYzNjMsMjYzNjUsMjYzNjksMjYzNzAsMjYzNzEsMjYzNzIsMjYzNzMsMjYzNzQsMjYzNzUsMjYzODAsMjYzODIsMjYzODMsMjYzODUs''@;'; put 'put ''MjYzODYsMjYzODcsMjYzOTAsMjYzOTIsMjYzOTMsMjYzOTQsMjYzOTYsMjYzOTgsMjY0MDAsMjY0MDEsMjY0MDIsMjY0MDMsMjY0MDQsMjY0MDUsMjY0MDcsMjY0MDksMjY0MTQsMjY0MTYsMjY0MTgsMjY0MTksMjY0MjIsMjY0MjMsMjY0MjQsMjY0MjUsMjY0MjcsMjY0MjgsMjY0MzAsMjY0''@;'; put 'put ''MzEsMjY0MzMsMjY0MzYsMjY0MzcsMjY0MzksMjY0NDIsMjY0NDMsMjY0NDUsMjY0NTAsMjY0NTIsMjY0NTMsMjY0NTUsMjY0NTYsMjY0NTcsMjY0NTgsMjY0NTksMjY0NjEsMjY0NjYsMjY0NjcsMjY0NjgsMjY0NzAsMjY0NzEsMjY0NzUsMjY0NzYsMjY0NzgsMjY0ODEsMjY0ODQsMjY0ODYs''@;'; put 'put ''MjY0ODgsMjY0ODksMjY0OTAsMjY0OTEsMjY0OTMsMjY0OTYsMjY0OTgsMjY0OTksMjY1MDEsMjY1MDIsMjY1MDQsMjY1MDYsMjY1MDgsMjY1MDksMjY1MTAsMjY1MTEsMjY1MTMsMjY1MTQsMjY1MTUsMjY1MTYsMjY1MTgsMjY1MjEsMjY1MjMsMjY1MjcsMjY1MjgsMjY1MjksMjY1MzIsMjY1''@;'; put 'put ''MzQsMjY1MzcsMjY1NDAsMjY1NDIsMjY1NDUsMjY1NDYsMjY1NDgsMjY1NTMsMjY1NTQsMjY1NTUsMjY1NTYsMjY1NTcsMjY1NTgsMjY1NTksMjY1NjAsMjY1NjIsMjY1NjUsMjY1NjYsMjY1NjcsMjY1NjgsMjY1NjksMjY1NzAsMjY1NzEsMjY1NzIsMjY1NzMsMjY1NzQsMjY1ODEsMjY1ODIs''@;'; put 'put ''MjY1ODMsMjY1ODcsMjY1OTEsMjY1OTMsMjY1OTUsMjY1OTYsMjY1OTgsMjY1OTksMjY2MDAsMjY2MDIsMjY2MDMsMjY2MDUsMjY2MDYsMjY2MTAsMjY2MTMsMjY2MTQsMjY2MTUsMjY2MTYsMjY2MTcsMjY2MTgsMjY2MTksMjY2MjAsMjY2MjIsMjY2MjUsMjY2MjYsMjY2MjcsMjY2MjgsMjY2''@;'; put 'put ''MzAsMjY2MzcsMjY2NDAsMjY2NDIsMjY2NDQsMjY2NDUsMjY2NDgsMjY2NDksMjY2NTAsMjY2NTEsMjY2NTIsMjY2NTQsMjY2NTUsMjY2NTYsMjY2NTgsMjY2NTksMjY2NjAsMjY2NjEsMjY2NjIsMjY2NjMsMjY2NjQsMjY2NjcsMjY2NjgsMjY2NjksMjY2NzAsMjY2NzEsMjY2NzIsMjY2NzMs''@;'; put 'put ''MjY2NzYsMjY2NzcsMjY2NzgsMjY2ODIsMjY2ODMsMjY2ODcsMjY2OTUsMjY2OTksMjY3MDEsMjY3MDMsMjY3MDYsMjY3MTAsMjY3MTEsMjY3MTIsMjY3MTMsMjY3MTQsMjY3MTUsMjY3MTYsMjY3MTcsMjY3MTgsMjY3MTksMjY3MzAsMjY3MzIsMjY3MzMsMjY3MzQsMjY3MzUsMjY3MzYsMjY3''@;'; put 'put ''MzcsMjY3MzgsMjY3MzksMjY3NDEsMjY3NDQsMjY3NDUsMjY3NDYsMjY3NDcsMjY3NDgsMjY3NDksMjY3NTAsMjY3NTEsMjY3NTIsMjY3NTQsMjY3NTYsMjY3NTksMjY3NjAsMjY3NjEsMjY3NjIsMjY3NjMsMjY3NjQsMjY3NjUsMjY3NjYsMjY3NjgsMjY3NjksMjY3NzAsMjY3NzIsMjY3NzMs''@;'; put 'put ''MjY3NzQsMjY3NzYsMjY3NzcsMjY3NzgsMjY3NzksMjY3ODAsMjY3ODEsMjY3ODIsMjY3ODMsMjY3ODQsMjY3ODUsMjY3ODcsMjY3ODgsMjY3ODksMjY3OTMsMjY3OTQsMjY3OTUsMjY3OTYsMjY3OTgsMjY4MDEsMjY4MDIsMjY4MDQsMjY4MDYsMjY4MDcsMjY4MDgsMjY4MDksMjY4MTAsMjY4''@;'; put 'put ''MTEsMjY4MTIsMjY4MTMsMjY4MTQsMjY4MTUsMjY4MTcsMjY4MTksMjY4MjAsMjY4MjEsMjY4MjIsMjY4MjMsMjY4MjQsMjY4MjYsMjY4MjgsMjY4MzAsMjY4MzEsMjY4MzIsMjY4MzMsMjY4MzUsMjY4MzYsMjY4MzgsMjY4MzksMjY4NDEsMjY4NDMsMjY4NDQsMjY4NDUsMjY4NDYsMjY4NDcs''@;'; put 'put ''MjY4NDksMjY4NTAsMjY4NTIsMjY4NTMsMjY4NTQsMjY4NTUsMjY4NTYsMjY4NTcsMjY4NTgsMjY4NTksMjY4NjAsMjY4NjEsMjY4NjMsMjY4NjYsMjY4NjcsMjY4NjgsMjY4NzAsMjY4NzEsMjY4NzIsMjY4NzUsMjY4NzcsMjY4NzgsMjY4NzksMjY4ODAsMjY4ODIsMjY4ODMsMjY4ODQsMjY4''@;'; put 'put ''ODYsMjY4ODcsMjY4ODgsMjY4ODksMjY4OTAsMjY4OTIsMjY4OTUsMjY4OTcsMjY4OTksMjY5MDAsMjY5MDEsMjY5MDIsMjY5MDMsMjY5MDQsMjY5MDUsMjY5MDYsMjY5MDcsMjY5MDgsMjY5MDksMjY5MTAsMjY5MTMsMjY5MTQsMjY5MTUsMjY5MTcsMjY5MTgsMjY5MTksMjY5MjAsMjY5MjEs''@;'; put 'put ''MjY5MjIsMjY5MjMsMjY5MjQsMjY5MjYsMjY5MjcsMjY5MjksMjY5MzAsMjY5MzEsMjY5MzMsMjY5MzQsMjY5MzUsMjY5MzYsMjY5MzgsMjY5MzksMjY5NDAsMjY5NDIsMjY5NDQsMjY5NDUsMjY5NDcsMjY5NDgsMjY5NDksMjY5NTAsMjY5NTEsMjY5NTIsMjY5NTMsMjY5NTQsMjY5NTUsMjY5''@;'; put 'put ''NTYsMjY5NTcsMjY5NTgsMjY5NTksMjY5NjAsMjY5NjEsMjY5NjIsMjY5NjMsMjY5NjUsMjY5NjYsMjY5NjgsMjY5NjksMjY5NzEsMjY5NzIsMjY5NzUsMjY5NzcsMjY5NzgsMjY5ODAsMjY5ODEsMjY5ODMsMjY5ODQsMjY5ODUsMjY5ODYsMjY5ODgsMjY5ODksMjY5OTEsMjY5OTIsMjY5OTQs''@;'; put 'put ''MjY5OTUsMjY5OTYsMjY5OTcsMjY5OTgsMjcwMDIsMjcwMDMsMjcwMDUsMjcwMDYsMjcwMDcsMjcwMDksMjcwMTEsMjcwMTMsMjcwMTgsMjcwMTksMjcwMjAsMjcwMjIsMjcwMjMsMjcwMjQsMjcwMjUsMjcwMjYsMjcwMjcsMjcwMzAsMjcwMzEsMjcwMzMsMjcwMzQsMjcwMzcsMjcwMzgsMjcw''@;'; put 'put ''MzksMjcwNDAsMjcwNDEsMjcwNDIsMjcwNDMsMjcwNDQsMjcwNDUsMjcwNDYsMjcwNDksMjcwNTAsMjcwNTIsMjcwNTQsMjcwNTUsMjcwNTYsMjcwNTgsMjcwNTksMjcwNjEsMjcwNjIsMjcwNjQsMjcwNjUsMjcwNjYsMjcwNjgsMjcwNjksMjcwNzAsMjcwNzEsMjcwNzIsMjcwNzQsMjcwNzUs''@;'; put 'put ''MjcwNzYsMjcwNzcsMjcwNzgsMjcwNzksMjcwODAsMjcwODEsMjcwODMsMjcwODUsMjcwODcsMjcwODksMjcwOTAsMjcwOTEsMjcwOTMsMjcwOTQsMjcwOTUsMjcwOTYsMjcwOTcsMjcwOTgsMjcxMDAsMjcxMDEsMjcxMDIsMjcxMDUsMjcxMDYsMjcxMDcsMjcxMDgsMjcxMDksMjcxMTAsMjcx''@;'; put 'put ''MTEsMjcxMTIsMjcxMTMsMjcxMTQsMjcxMTUsMjcxMTYsMjcxMTgsMjcxMTksMjcxMjAsMjcxMjEsMjcxMjMsMjcxMjQsMjcxMjUsMjcxMjYsMjcxMjcsMjcxMjgsMjcxMjksMjcxMzAsMjcxMzEsMjcxMzIsMjcxMzQsMjcxMzYsMjcxMzcsMjcxMzgsMjcxMzksMjcxNDAsMjcxNDEsMjcxNDIs''@;'; put 'put ''MjcxNDMsMjcxNDQsMjcxNDUsMjcxNDcsMjcxNDgsMjcxNDksMjcxNTAsMjcxNTEsMjcxNTIsMjcxNTMsMjcxNTQsMjcxNTUsMjcxNTYsMjcxNTcsMjcxNTgsMjcxNjEsMjcxNjIsMjcxNjMsMjcxNjQsMjcxNjUsMjcxNjYsMjcxNjgsMjcxNzAsMjcxNzEsMjcxNzIsMjcxNzMsMjcxNzQsMjcx''@;'; put 'put ''NzUsMjcxNzcsMjcxNzksMjcxODAsMjcxODEsMjcxODIsMjcxODQsMjcxODYsMjcxODcsMjcxODgsMjcxOTAsMjcxOTEsMjcxOTIsMjcxOTMsMjcxOTQsMjcxOTUsMjcxOTYsMjcxOTksMjcyMDAsMjcyMDEsMjcyMDIsMjcyMDMsMjcyMDUsMjcyMDYsMjcyMDgsMjcyMDksMjcyMTAsMjcyMTEs''@;'; put 'put ''MjcyMTIsMjcyMTMsMjcyMTQsMjcyMTUsMjcyMTcsMjcyMTgsMjcyMTksMjcyMjAsMjcyMjEsMjcyMjIsMjcyMjMsMjcyMjYsMjcyMjgsMjcyMjksMjcyMzAsMjcyMzEsMjcyMzIsMjcyMzQsMjcyMzUsMjcyMzYsMjcyMzgsMjcyMzksMjcyNDAsMjcyNDEsMjcyNDIsMjcyNDMsMjcyNDQsMjcy''@;'; put 'put ''NDUsMjcyNDYsMjcyNDcsMjcyNDgsMjcyNTAsMjcyNTEsMjcyNTIsMjcyNTMsMjcyNTQsMjcyNTUsMjcyNTYsMjcyNTgsMjcyNTksMjcyNjEsMjcyNjIsMjcyNjMsMjcyNjUsMjcyNjYsMjcyNjcsMjcyNjksMjcyNzAsMjcyNzEsMjcyNzIsMjcyNzMsMjcyNzQsMjcyNzUsMjcyNzYsMjcyNzcs''@;'; put 'put ''MjcyNzksMjcyODIsMjcyODMsMjcyODQsMjcyODUsMjcyODYsMjcyODgsMjcyODksMjcyOTAsMjcyOTEsMjcyOTIsMjcyOTMsMjcyOTQsMjcyOTUsMjcyOTcsMjcyOTgsMjcyOTksMjczMDAsMjczMDEsMjczMDIsMjczMDMsMjczMDQsMjczMDYsMjczMDksMjczMTAsMjczMTEsMjczMTIsMjcz''@;'; put 'put ''MTMsMjczMTQsMjczMTUsMjczMTYsMjczMTcsMjczMTgsMjczMTksMjczMjAsMjczMjEsMjczMjIsMjczMjMsMjczMjQsMjczMjUsMjczMjYsMjczMjcsMjczMjgsMjczMjksMjczMzAsMjczMzEsMjczMzIsMjczMzMsMjczMzQsMjczMzUsMjczMzYsMjczMzcsMjczMzgsMjczMzksMjczNDAs''@;'; put 'put ''MjczNDEsMjczNDIsMjczNDMsMjczNDQsMjczNDUsMjczNDYsMjczNDcsMjczNDgsMjczNDksMjczNTAsMjczNTEsMjczNTIsMjczNTMsMjczNTQsMjczNTUsMjczNTYsMjczNTcsMjczNTgsMjczNTksMjczNjAsMjczNjEsMjczNjIsMjczNjMsMjczNjQsMjczNjUsMjczNjYsMjczNjcsMjcz''@;'; put 'put ''NjgsMjczNjksMjczNzAsMjczNzEsMjczNzIsMjczNzMsMjczNzQsMjczNzUsMjczNzYsMjczNzcsMjczNzgsMjczNzksMjczODAsMjczODEsMjczODIsMjczODMsMjczODQsMjczODUsMjczODYsMjczODcsMjczODgsMjczODksMjczOTAsMjczOTEsMjczOTIsMjczOTMsMjczOTQsMjczOTUs''@;'; put 'put ''MjczOTYsMjczOTcsMjczOTgsMjczOTksMjc0MDAsMjc0MDEsMjc0MDIsMjc0MDMsMjc0MDQsMjc0MDUsMjc0MDYsMjc0MDcsMjc0MDgsMjc0MDksMjc0MTAsMjc0MTEsMjc0MTIsMjc0MTMsMjc0MTQsMjc0MTUsMjc0MTYsMjc0MTcsMjc0MTgsMjc0MTksMjc0MjAsMjc0MjEsMjc0MjIsMjc0''@;'; put 'put ''MjMsMjc0MjksMjc0MzAsMjc0MzIsMjc0MzMsMjc0MzQsMjc0MzUsMjc0MzYsMjc0MzcsMjc0MzgsMjc0MzksMjc0NDAsMjc0NDEsMjc0NDMsMjc0NDQsMjc0NDUsMjc0NDYsMjc0NDgsMjc0NTEsMjc0NTIsMjc0NTMsMjc0NTUsMjc0NTYsMjc0NTcsMjc0NTgsMjc0NjAsMjc0NjEsMjc0NjQs''@;'; put 'put ''Mjc0NjYsMjc0NjcsMjc0NjksMjc0NzAsMjc0NzEsMjc0NzIsMjc0NzMsMjc0NzQsMjc0NzUsMjc0NzYsMjc0NzcsMjc0NzgsMjc0NzksMjc0ODAsMjc0ODIsMjc0ODMsMjc0ODQsMjc0ODUsMjc0ODYsMjc0ODcsMjc0ODgsMjc0ODksMjc0OTYsMjc0OTcsMjc0OTksMjc1MDAsMjc1MDEsMjc1''@;'; put 'put ''MDIsMjc1MDMsMjc1MDQsMjc1MDUsMjc1MDYsMjc1MDcsMjc1MDgsMjc1MDksMjc1MTAsMjc1MTEsMjc1MTIsMjc1MTQsMjc1MTcsMjc1MTgsMjc1MTksMjc1MjAsMjc1MjUsMjc1MjgsMjc1MzIsMjc1MzQsMjc1MzUsMjc1MzYsMjc1MzcsMjc1NDAsMjc1NDEsMjc1NDMsMjc1NDQsMjc1NDUs''@;'; put 'put ''Mjc1NDgsMjc1NDksMjc1NTAsMjc1NTEsMjc1NTIsMjc1NTQsMjc1NTUsMjc1NTYsMjc1NTcsMjc1NTgsMjc1NTksMjc1NjAsMjc1NjEsMjc1NjMsMjc1NjQsMjc1NjUsMjc1NjYsMjc1NjcsMjc1NjgsMjc1NjksMjc1NzAsMjc1NzQsMjc1NzYsMjc1NzcsMjc1NzgsMjc1NzksMjc1ODAsMjc1''@;'; put 'put ''ODEsMjc1ODIsMjc1ODQsMjc1ODcsMjc1ODgsMjc1OTAsMjc1OTEsMjc1OTIsMjc1OTMsMjc1OTQsMjc1OTYsMjc1OTgsMjc2MDAsMjc2MDEsMjc2MDgsMjc2MTAsMjc2MTIsMjc2MTMsMjc2MTQsMjc2MTUsMjc2MTYsMjc2MTgsMjc2MTksMjc2MjAsMjc2MjEsMjc2MjIsMjc2MjMsMjc2MjQs''@;'; put 'put ''Mjc2MjUsMjc2MjgsMjc2MjksMjc2MzAsMjc2MzIsMjc2MzMsMjc2MzQsMjc2MzYsMjc2MzgsMjc2MzksMjc2NDAsMjc2NDIsMjc2NDMsMjc2NDQsMjc2NDYsMjc2NDcsMjc2NDgsMjc2NDksMjc2NTAsMjc2NTEsMjc2NTIsMjc2NTYsMjc2NTcsMjc2NTgsMjc2NTksMjc2NjAsMjc2NjIsMjc2''@;'; put 'put ''NjYsMjc2NzEsMjc2NzYsMjc2NzcsMjc2NzgsMjc2ODAsMjc2ODMsMjc2ODUsMjc2OTEsMjc2OTIsMjc2OTMsMjc2OTcsMjc2OTksMjc3MDIsMjc3MDMsMjc3MDUsMjc3MDYsMjc3MDcsMjc3MDgsMjc3MTAsMjc3MTEsMjc3MTUsMjc3MTYsMjc3MTcsMjc3MjAsMjc3MjMsMjc3MjQsMjc3MjUs''@;'; put 'put ''Mjc3MjYsMjc3MjcsMjc3MjksMjc3MzAsMjc3MzEsMjc3MzQsMjc3MzYsMjc3MzcsMjc3MzgsMjc3NDYsMjc3NDcsMjc3NDksMjc3NTAsMjc3NTEsMjc3NTUsMjc3NTYsMjc3NTcsMjc3NTgsMjc3NTksMjc3NjEsMjc3NjMsMjc3NjUsMjc3NjcsMjc3NjgsMjc3NzAsMjc3NzEsMjc3NzIsMjc3''@;'; put 'put ''NzUsMjc3NzYsMjc3ODAsMjc3ODMsMjc3ODYsMjc3ODcsMjc3ODksMjc3OTAsMjc3OTMsMjc3OTQsMjc3OTcsMjc3OTgsMjc3OTksMjc4MDAsMjc4MDIsMjc4MDQsMjc4MDUsMjc4MDYsMjc4MDgsMjc4MTAsMjc4MTYsMjc4MjAsMjc4MjMsMjc4MjQsMjc4MjgsMjc4MjksMjc4MzAsMjc4MzEs''@;'; put 'put ''Mjc4MzQsMjc4NDAsMjc4NDEsMjc4NDIsMjc4NDMsMjc4NDYsMjc4NDcsMjc4NDgsMjc4NTEsMjc4NTMsMjc4NTQsMjc4NTUsMjc4NTcsMjc4NTgsMjc4NjQsMjc4NjUsMjc4NjYsMjc4NjgsMjc4NjksMjc4NzEsMjc4NzYsMjc4NzgsMjc4NzksMjc4ODEsMjc4ODQsMjc4ODUsMjc4OTAsMjc4''@;'; put 'put ''OTIsMjc4OTcsMjc5MDMsMjc5MDQsMjc5MDYsMjc5MDcsMjc5MDksMjc5MTAsMjc5MTIsMjc5MTMsMjc5MTQsMjc5MTcsMjc5MTksMjc5MjAsMjc5MjEsMjc5MjMsMjc5MjQsMjc5MjUsMjc5MjYsMjc5MjgsMjc5MzIsMjc5MzMsMjc5MzUsMjc5MzYsMjc5MzcsMjc5MzgsMjc5MzksMjc5NDAs''@;'; put 'put ''Mjc5NDIsMjc5NDQsMjc5NDUsMjc5NDgsMjc5NDksMjc5NTEsMjc5NTIsMjc5NTYsMjc5NTgsMjc5NTksMjc5NjAsMjc5NjIsMjc5NjcsMjc5NjgsMjc5NzAsMjc5NzIsMjc5NzcsMjc5ODAsMjc5ODQsMjc5ODksMjc5OTAsMjc5OTEsMjc5OTIsMjc5OTUsMjc5OTcsMjc5OTksMjgwMDEsMjgw''@;'; put 'put ''MDIsMjgwMDQsMjgwMDUsMjgwMDcsMjgwMDgsMjgwMTEsMjgwMTIsMjgwMTMsMjgwMTYsMjgwMTcsMjgwMTgsMjgwMTksMjgwMjEsMjgwMjIsMjgwMjUsMjgwMjYsMjgwMjcsMjgwMjksMjgwMzAsMjgwMzEsMjgwMzIsMjgwMzMsMjgwMzUsMjgwMzYsMjgwMzgsMjgwMzksMjgwNDIsMjgwNDMs''@;'; put 'put ''MjgwNDUsMjgwNDcsMjgwNDgsMjgwNTAsMjgwNTQsMjgwNTUsMjgwNTYsMjgwNTcsMjgwNTgsMjgwNjAsMjgwNjYsMjgwNjksMjgwNzYsMjgwNzcsMjgwODAsMjgwODEsMjgwODMsMjgwODQsMjgwODYsMjgwODcsMjgwODksMjgwOTAsMjgwOTEsMjgwOTIsMjgwOTMsMjgwOTQsMjgwOTcsMjgw''@;'; put 'put ''OTgsMjgwOTksMjgxMDQsMjgxMDUsMjgxMDYsMjgxMDksMjgxMTAsMjgxMTEsMjgxMTIsMjgxMTQsMjgxMTUsMjgxMTYsMjgxMTcsMjgxMTksMjgxMjIsMjgxMjMsMjgxMjQsMjgxMjcsMjgxMzAsMjgxMzEsMjgxMzMsMjgxMzUsMjgxMzYsMjgxMzcsMjgxMzgsMjgxNDEsMjgxNDMsMjgxNDQs''@;'; put 'put ''MjgxNDYsMjgxNDgsMjgxNDksMjgxNTAsMjgxNTIsMjgxNTQsMjgxNTcsMjgxNTgsMjgxNTksMjgxNjAsMjgxNjEsMjgxNjIsMjgxNjMsMjgxNjQsMjgxNjYsMjgxNjcsMjgxNjgsMjgxNjksMjgxNzEsMjgxNzUsMjgxNzgsMjgxNzksMjgxODEsMjgxODQsMjgxODUsMjgxODcsMjgxODgsMjgx''@;'; put 'put ''OTAsMjgxOTEsMjgxOTQsMjgxOTgsMjgxOTksMjgyMDAsMjgyMDIsMjgyMDQsMjgyMDYsMjgyMDgsMjgyMDksMjgyMTEsMjgyMTMsMjgyMTQsMjgyMTUsMjgyMTcsMjgyMTksMjgyMjAsMjgyMjEsMjgyMjIsMjgyMjMsMjgyMjQsMjgyMjUsMjgyMjYsMjgyMjksMjgyMzAsMjgyMzEsMjgyMzIs''@;'; put 'put ''MjgyMzMsMjgyMzQsMjgyMzUsMjgyMzYsMjgyMzksMjgyNDAsMjgyNDEsMjgyNDIsMjgyNDUsMjgyNDcsMjgyNDksMjgyNTAsMjgyNTIsMjgyNTMsMjgyNTQsMjgyNTYsMjgyNTcsMjgyNTgsMjgyNTksMjgyNjAsMjgyNjEsMjgyNjIsMjgyNjMsMjgyNjQsMjgyNjUsMjgyNjYsMjgyNjgsMjgy''@;'; put 'put ''NjksMjgyNzEsMjgyNzIsMjgyNzMsMjgyNzQsMjgyNzUsMjgyNzYsMjgyNzcsMjgyNzgsMjgyNzksMjgyODAsMjgyODEsMjgyODIsMjgyODMsMjgyODQsMjgyODUsMjgyODgsMjgyODksMjgyOTAsMjgyOTIsMjgyOTUsMjgyOTYsMjgyOTgsMjgyOTksMjgzMDAsMjgzMDEsMjgzMDIsMjgzMDUs''@;'; put 'put ''MjgzMDYsMjgzMDcsMjgzMDgsMjgzMDksMjgzMTAsMjgzMTEsMjgzMTMsMjgzMTQsMjgzMTUsMjgzMTcsMjgzMTgsMjgzMjAsMjgzMjEsMjgzMjMsMjgzMjQsMjgzMjYsMjgzMjgsMjgzMjksMjgzMzEsMjgzMzIsMjgzMzMsMjgzMzQsMjgzMzYsMjgzMzksMjgzNDEsMjgzNDQsMjgzNDUsMjgz''@;'; put 'put ''NDgsMjgzNTAsMjgzNTEsMjgzNTIsMjgzNTUsMjgzNTYsMjgzNTcsMjgzNTgsMjgzNjAsMjgzNjEsMjgzNjIsMjgzNjQsMjgzNjUsMjgzNjYsMjgzNjgsMjgzNzAsMjgzNzQsMjgzNzYsMjgzNzcsMjgzNzksMjgzODAsMjgzODEsMjgzODcsMjgzOTEsMjgzOTQsMjgzOTUsMjgzOTYsMjgzOTcs''@;'; put 'put ''MjgzOTgsMjgzOTksMjg0MDAsMjg0MDEsMjg0MDIsMjg0MDMsMjg0MDUsMjg0MDYsMjg0MDcsMjg0MDgsMjg0MTAsMjg0MTEsMjg0MTIsMjg0MTMsMjg0MTQsMjg0MTUsMjg0MTYsMjg0MTcsMjg0MTksMjg0MjAsMjg0MjEsMjg0MjMsMjg0MjQsMjg0MjYsMjg0MjcsMjg0MjgsMjg0MjksMjg0''@;'; put 'put ''MzAsMjg0MzIsMjg0MzMsMjg0MzQsMjg0MzgsMjg0MzksMjg0NDAsMjg0NDEsMjg0NDIsMjg0NDMsMjg0NDQsMjg0NDUsMjg0NDYsMjg0NDcsMjg0NDksMjg0NTAsMjg0NTEsMjg0NTMsMjg0NTQsMjg0NTUsMjg0NTYsMjg0NjAsMjg0NjIsMjg0NjQsMjg0NjYsMjg0NjgsMjg0NjksMjg0NzEs''@;'; put 'put ''Mjg0NzIsMjg0NzMsMjg0NzQsMjg0NzUsMjg0NzYsMjg0NzcsMjg0NzksMjg0ODAsMjg0ODEsMjg0ODIsMjg0ODMsMjg0ODQsMjg0ODUsMjg0ODgsMjg0ODksMjg0OTAsMjg0OTIsMjg0OTQsMjg0OTUsMjg0OTYsMjg0OTcsMjg0OTgsMjg0OTksMjg1MDAsMjg1MDEsMjg1MDIsMjg1MDMsMjg1''@;'; put 'put ''MDUsMjg1MDYsMjg1MDcsMjg1MDksMjg1MTEsMjg1MTIsMjg1MTMsMjg1MTUsMjg1MTYsMjg1MTcsMjg1MTksMjg1MjAsMjg1MjEsMjg1MjIsMjg1MjMsMjg1MjQsMjg1MjcsMjg1MjgsMjg1MjksMjg1MzEsMjg1MzMsMjg1MzQsMjg1MzUsMjg1MzcsMjg1MzksMjg1NDEsMjg1NDIsMjg1NDMs''@;'; put 'put ''Mjg1NDQsMjg1NDUsMjg1NDYsMjg1NDcsMjg1NDksMjg1NTAsMjg1NTEsMjg1NTQsMjg1NTUsMjg1NTksMjg1NjAsMjg1NjEsMjg1NjIsMjg1NjMsMjg1NjQsMjg1NjUsMjg1NjYsMjg1NjcsMjg1NjgsMjg1NjksMjg1NzAsMjg1NzEsMjg1NzMsMjg1NzQsMjg1NzUsMjg1NzYsMjg1NzgsMjg1''@;'; put 'put ''NzksMjg1ODAsMjg1ODEsMjg1ODIsMjg1ODQsMjg1ODUsMjg1ODYsMjg1ODcsMjg1ODgsMjg1ODksMjg1OTAsMjg1OTEsMjg1OTIsMjg1OTMsMjg1OTQsMjg1OTYsMjg1OTcsMjg1OTksMjg2MDAsMjg2MDIsMjg2MDMsMjg2MDQsMjg2MDUsMjg2MDYsMjg2MDcsMjg2MDksMjg2MTEsMjg2MTIs''@;'; put 'put ''Mjg2MTMsMjg2MTQsMjg2MTUsMjg2MTYsMjg2MTgsMjg2MTksMjg2MjAsMjg2MjEsMjg2MjIsMjg2MjMsMjg2MjQsMjg2MjcsMjg2MjgsMjg2MjksMjg2MzAsMjg2MzEsMjg2MzIsMjg2MzMsMjg2MzQsMjg2MzUsMjg2MzYsMjg2MzcsMjg2MzksMjg2NDIsMjg2NDMsMjg2NDQsMjg2NDUsMjg2''@;'; put 'put ''NDYsMjg2NDcsMjg2NDgsMjg2NDksMjg2NTAsMjg2NTEsMjg2NTIsMjg2NTMsMjg2NTYsMjg2NTcsMjg2NTgsMjg2NTksMjg2NjAsMjg2NjEsMjg2NjIsMjg2NjMsMjg2NjQsMjg2NjUsMjg2NjYsMjg2NjcsMjg2NjgsMjg2NjksMjg2NzAsMjg2NzEsMjg2NzIsMjg2NzMsMjg2NzQsMjg2NzUs''@;'; put 'put ''Mjg2NzYsMjg2NzcsMjg2NzgsMjg2NzksMjg2ODAsMjg2ODEsMjg2ODIsMjg2ODMsMjg2ODQsMjg2ODUsMjg2ODYsMjg2ODcsMjg2ODgsMjg2OTAsMjg2OTEsMjg2OTIsMjg2OTMsMjg2OTQsMjg2OTUsMjg2OTYsMjg2OTcsMjg3MDAsMjg3MDEsMjg3MDIsMjg3MDMsMjg3MDQsMjg3MDUsMjg3''@;'; put 'put ''MDYsMjg3MDgsMjg3MDksMjg3MTAsMjg3MTEsMjg3MTIsMjg3MTMsMjg3MTQsMjg3MTUsMjg3MTYsMjg3MTcsMjg3MTgsMjg3MTksMjg3MjAsMjg3MjEsMjg3MjIsMjg3MjMsMjg3MjQsMjg3MjYsMjg3MjcsMjg3MjgsMjg3MzAsMjg3MzEsMjg3MzIsMjg3MzMsMjg3MzQsMjg3MzUsMjg3MzYs''@;'; put 'put ''Mjg3MzcsMjg3MzgsMjg3MzksMjg3NDAsMjg3NDEsMjg3NDIsMjg3NDMsMjg3NDQsMjg3NDUsMjg3NDYsMjg3NDcsMjg3NDksMjg3NTAsMjg3NTIsMjg3NTMsMjg3NTQsMjg3NTUsMjg3NTYsMjg3NTcsMjg3NTgsMjg3NTksMjg3NjAsMjg3NjEsMjg3NjIsMjg3NjMsMjg3NjQsMjg3NjUsMjg3''@;'; put 'put ''NjcsMjg3NjgsMjg3NjksMjg3NzAsMjg3NzEsMjg3NzIsMjg3NzMsMjg3NzQsMjg3NzUsMjg3NzYsMjg3NzcsMjg3NzgsMjg3ODIsMjg3ODUsMjg3ODYsMjg3ODcsMjg3ODgsMjg3OTEsMjg3OTMsMjg3OTQsMjg3OTUsMjg3OTcsMjg4MDEsMjg4MDIsMjg4MDMsMjg4MDQsMjg4MDYsMjg4MDcs''@;'; put 'put ''Mjg4MDgsMjg4MTEsMjg4MTIsMjg4MTMsMjg4MTUsMjg4MTYsMjg4MTcsMjg4MTksMjg4MjMsMjg4MjQsMjg4MjYsMjg4MjcsMjg4MzAsMjg4MzEsMjg4MzIsMjg4MzMsMjg4MzQsMjg4MzUsMjg4MzYsMjg4MzcsMjg4MzgsMjg4MzksMjg4NDAsMjg4NDEsMjg4NDIsMjg4NDgsMjg4NTAsMjg4''@;'; put 'put ''NTIsMjg4NTMsMjg4NTQsMjg4NTgsMjg4NjIsMjg4NjMsMjg4NjgsMjg4NjksMjg4NzAsMjg4NzEsMjg4NzMsMjg4NzUsMjg4NzYsMjg4NzcsMjg4NzgsMjg4NzksMjg4ODAsMjg4ODEsMjg4ODIsMjg4ODMsMjg4ODQsMjg4ODUsMjg4ODYsMjg4ODcsMjg4OTAsMjg4OTIsMjg4OTMsMjg4OTQs''@;'; put 'put ''Mjg4OTYsMjg4OTcsMjg4OTgsMjg4OTksMjg5MDEsMjg5MDYsMjg5MTAsMjg5MTIsMjg5MTMsMjg5MTQsMjg5MTUsMjg5MTYsMjg5MTcsMjg5MTgsMjg5MjAsMjg5MjIsMjg5MjMsMjg5MjQsMjg5MjYsMjg5MjcsMjg5MjgsMjg5MjksMjg5MzAsMjg5MzEsMjg5MzIsMjg5MzMsMjg5MzQsMjg5''@;'; put 'put ''MzUsMjg5MzYsMjg5MzksMjg5NDAsMjg5NDEsMjg5NDIsMjg5NDMsMjg5NDUsMjg5NDYsMjg5NDgsMjg5NTEsMjg5NTUsMjg5NTYsMjg5NTcsMjg5NTgsMjg5NTksMjg5NjAsMjg5NjEsMjg5NjIsMjg5NjMsMjg5NjQsMjg5NjUsMjg5NjcsMjg5NjgsMjg5NjksMjg5NzAsMjg5NzEsMjg5NzIs''@;'; put 'put ''Mjg5NzMsMjg5NzQsMjg5NzgsMjg5NzksMjg5ODAsMjg5ODEsMjg5ODMsMjg5ODQsMjg5ODUsMjg5ODYsMjg5ODcsMjg5ODgsMjg5ODksMjg5OTAsMjg5OTEsMjg5OTIsMjg5OTMsMjg5OTQsMjg5OTUsMjg5OTYsMjg5OTgsMjg5OTksMjllMywyOTAwMSwyOTAwMywyOTAwNSwyOTAwNywyOTAw''@;'; put 'put ''OCwyOTAwOSwyOTAxMCwyOTAxMSwyOTAxMiwyOTAxMywyOTAxNCwyOTAxNSwyOTAxNiwyOTAxNywyOTAxOCwyOTAxOSwyOTAyMSwyOTAyMywyOTAyNCwyOTAyNSwyOTAyNiwyOTAyNywyOTAyOSwyOTAzMywyOTAzNCwyOTAzNSwyOTAzNiwyOTAzNywyOTAzOSwyOTA0MCwyOTA0MSwyOTA0NCwy''@;'; put 'put ''OTA0NSwyOTA0NiwyOTA0NywyOTA0OSwyOTA1MSwyOTA1MiwyOTA1NCwyOTA1NSwyOTA1NiwyOTA1NywyOTA1OCwyOTA1OSwyOTA2MSwyOTA2MiwyOTA2MywyOTA2NCwyOTA2NSwyOTA2NywyOTA2OCwyOTA2OSwyOTA3MCwyOTA3MiwyOTA3MywyOTA3NCwyOTA3NSwyOTA3NywyOTA3OCwyOTA3''@;'; put 'put ''OSwyOTA4MiwyOTA4MywyOTA4NCwyOTA4NSwyOTA4NiwyOTA4OSwyOTA5MCwyOTA5MSwyOTA5MiwyOTA5MywyOTA5NCwyOTA5NSwyOTA5NywyOTA5OCwyOTA5OSwyOTEwMSwyOTEwMiwyOTEwMywyOTEwNCwyOTEwNSwyOTEwNiwyOTEwOCwyOTExMCwyOTExMSwyOTExMiwyOTExNCwyOTExNSwy''@;'; put 'put ''OTExNiwyOTExNywyOTExOCwyOTExOSwyOTEyMCwyOTEyMSwyOTEyMiwyOTEyNCwyOTEyNSwyOTEyNiwyOTEyNywyOTEyOCwyOTEyOSwyOTEzMCwyOTEzMSwyOTEzMiwyOTEzMywyOTEzNSwyOTEzNiwyOTEzNywyOTEzOCwyOTEzOSwyOTE0MiwyOTE0MywyOTE0NCwyOTE0NSwyOTE0NiwyOTE0''@;'; put 'put ''NywyOTE0OCwyOTE0OSwyOTE1MCwyOTE1MSwyOTE1MywyOTE1NCwyOTE1NSwyOTE1NiwyOTE1OCwyOTE2MCwyOTE2MSwyOTE2MiwyOTE2MywyOTE2NCwyOTE2NSwyOTE2NywyOTE2OCwyOTE2OSwyOTE3MCwyOTE3MSwyOTE3MiwyOTE3MywyOTE3NCwyOTE3NSwyOTE3NiwyOTE3OCwyOTE3OSwy''@;'; put 'put ''OTE4MCwyOTE4MSwyOTE4MiwyOTE4MywyOTE4NCwyOTE4NSwyOTE4NiwyOTE4NywyOTE4OCwyOTE4OSwyOTE5MSwyOTE5MiwyOTE5MywyOTE5NCwyOTE5NSwyOTE5NiwyOTE5NywyOTE5OCwyOTE5OSwyOTIwMCwyOTIwMSwyOTIwMiwyOTIwMywyOTIwNCwyOTIwNSwyOTIwNiwyOTIwNywyOTIw''@;'; put 'put ''OCwyOTIwOSwyOTIxMCwyOTIxMSwyOTIxMiwyOTIxNCwyOTIxNSwyOTIxNiwyOTIxNywyOTIxOCwyOTIxOSwyOTIyMCwyOTIyMSwyOTIyMiwyOTIyMywyOTIyNSwyOTIyNywyOTIyOSwyOTIzMCwyOTIzMSwyOTIzNCwyOTIzNSwyOTIzNiwyOTI0MiwyOTI0NCwyOTI0NiwyOTI0OCwyOTI0OSwy''@;'; put 'put ''OTI1MCwyOTI1MSwyOTI1MiwyOTI1MywyOTI1NCwyOTI1NywyOTI1OCwyOTI1OSwyOTI2MiwyOTI2MywyOTI2NCwyOTI2NSwyOTI2NywyOTI2OCwyOTI2OSwyOTI3MSwyOTI3MiwyOTI3NCwyOTI3NiwyOTI3OCwyOTI4MCwyOTI4MywyOTI4NCwyOTI4NSwyOTI4OCwyOTI5MCwyOTI5MSwyOTI5''@;'; put 'put ''MiwyOTI5MywyOTI5NiwyOTI5NywyOTI5OSwyOTMwMCwyOTMwMiwyOTMwMywyOTMwNCwyOTMwNywyOTMwOCwyOTMwOSwyOTMxNCwyOTMxNSwyOTMxNywyOTMxOCwyOTMxOSwyOTMyMCwyOTMyMSwyOTMyNCwyOTMyNiwyOTMyOCwyOTMyOSwyOTMzMSwyOTMzMiwyOTMzMywyOTMzNCwyOTMzNSwy''@;'; put 'put ''OTMzNiwyOTMzNywyOTMzOCwyOTMzOSwyOTM0MCwyOTM0MSwyOTM0MiwyOTM0NCwyOTM0NSwyOTM0NiwyOTM0NywyOTM0OCwyOTM0OSwyOTM1MCwyOTM1MSwyOTM1MiwyOTM1MywyOTM1NCwyOTM1NSwyOTM1OCwyOTM2MSwyOTM2MiwyOTM2MywyOTM2NSwyOTM3MCwyOTM3MSwyOTM3MiwyOTM3''@;'; put 'put ''MywyOTM3NCwyOTM3NSwyOTM3NiwyOTM4MSwyOTM4MiwyOTM4MywyOTM4NSwyOTM4NiwyOTM4NywyOTM4OCwyOTM5MSwyOTM5MywyOTM5NSwyOTM5NiwyOTM5NywyOTM5OCwyOTQwMCwyOTQwMiwyOTQwMyw1ODU2Niw1ODU2Nyw1ODU2OCw1ODU2OSw1ODU3MCw1ODU3MSw1ODU3Miw1ODU3Myw1''@;'; put 'put ''ODU3NCw1ODU3NSw1ODU3Niw1ODU3Nyw1ODU3OCw1ODU3OSw1ODU4MCw1ODU4MSw1ODU4Miw1ODU4Myw1ODU4NCw1ODU4NSw1ODU4Niw1ODU4Nyw1ODU4OCw1ODU4OSw1ODU5MCw1ODU5MSw1ODU5Miw1ODU5Myw1ODU5NCw1ODU5NSw1ODU5Niw1ODU5Nyw1ODU5OCw1ODU5OSw1ODYwMCw1ODYw''@;'; put 'put ''MSw1ODYwMiw1ODYwMyw1ODYwNCw1ODYwNSw1ODYwNiw1ODYwNyw1ODYwOCw1ODYwOSw1ODYxMCw1ODYxMSw1ODYxMiw1ODYxMyw1ODYxNCw1ODYxNSw1ODYxNiw1ODYxNyw1ODYxOCw1ODYxOSw1ODYyMCw1ODYyMSw1ODYyMiw1ODYyMyw1ODYyNCw1ODYyNSw1ODYyNiw1ODYyNyw1ODYyOCw1''@;'; put 'put ''ODYyOSw1ODYzMCw1ODYzMSw1ODYzMiw1ODYzMyw1ODYzNCw1ODYzNSw1ODYzNiw1ODYzNyw1ODYzOCw1ODYzOSw1ODY0MCw1ODY0MSw1ODY0Miw1ODY0Myw1ODY0NCw1ODY0NSw1ODY0Niw1ODY0Nyw1ODY0OCw1ODY0OSw1ODY1MCw1ODY1MSw1ODY1Miw1ODY1Myw1ODY1NCw1ODY1NSw1ODY1''@;'; put 'put ''Niw1ODY1Nyw1ODY1OCw1ODY1OSw1ODY2MCw1ODY2MSwxMjI4OCwxMjI4OSwxMjI5MCwxODMsNzEzLDcxMSwxNjgsMTIyOTEsMTIyOTMsODIxMiw2NTM3NCw4MjE0LDgyMzAsODIxNiw4MjE3LDgyMjAsODIyMSwxMjMwOCwxMjMwOSwxMjI5NiwxMjI5NywxMjI5OCwxMjI5OSwxMjMwMCwxMjMw''@;'; put 'put ''MSwxMjMwMiwxMjMwMywxMjMxMCwxMjMxMSwxMjMwNCwxMjMwNSwxNzcsMjE1LDI0Nyw4NzU4LDg3NDMsODc0NCw4NzIxLDg3MTksODc0Niw4NzQ1LDg3MTIsODc1OSw4NzMwLDg4NjksODc0MSw4NzM2LDg5NzgsODg1Nyw4NzQ3LDg3NTAsODgwMSw4NzgwLDg3NzYsODc2NSw4NzMzLDg4MDAs''@;'; put 'put ''ODgxNCw4ODE1LDg4MDQsODgwNSw4NzM0LDg3NTcsODc1Niw5Nzk0LDk3OTIsMTc2LDgyNDIsODI0Myw4NDUxLDY1Mjg0LDE2NCw2NTUwNCw2NTUwNSw4MjQwLDE2Nyw4NDcwLDk3MzQsOTczMyw5Njc1LDk2NzksOTY3OCw5NjcxLDk2NzAsOTYzMyw5NjMyLDk2NTEsOTY1MCw4MjUxLDg1OTQs''@;'; put 'put ''ODU5Miw4NTkzLDg1OTUsMTIzMDcsNTg2NjIsNTg2NjMsNTg2NjQsNTg2NjUsNTg2NjYsNTg2NjcsNTg2NjgsNTg2NjksNTg2NzAsNTg2NzEsNTg2NzIsNTg2NzMsNTg2NzQsNTg2NzUsNTg2NzYsNTg2NzcsNTg2NzgsNTg2NzksNTg2ODAsNTg2ODEsNTg2ODIsNTg2ODMsNTg2ODQsNTg2ODUs''@;'; put 'put ''NTg2ODYsNTg2ODcsNTg2ODgsNTg2ODksNTg2OTAsNTg2OTEsNTg2OTIsNTg2OTMsNTg2OTQsNTg2OTUsNTg2OTYsNTg2OTcsNTg2OTgsNTg2OTksNTg3MDAsNTg3MDEsNTg3MDIsNTg3MDMsNTg3MDQsNTg3MDUsNTg3MDYsNTg3MDcsNTg3MDgsNTg3MDksNTg3MTAsNTg3MTEsNTg3MTIsNTg3''@;'; put 'put ''MTMsNTg3MTQsNTg3MTUsNTg3MTYsNTg3MTcsNTg3MTgsNTg3MTksNTg3MjAsNTg3MjEsNTg3MjIsNTg3MjMsNTg3MjQsNTg3MjUsNTg3MjYsNTg3MjcsNTg3MjgsNTg3MjksNTg3MzAsNTg3MzEsNTg3MzIsNTg3MzMsNTg3MzQsNTg3MzUsNTg3MzYsNTg3MzcsNTg3MzgsNTg3MzksNTg3NDAs''@;'; put 'put ''NTg3NDEsNTg3NDIsNTg3NDMsNTg3NDQsNTg3NDUsNTg3NDYsNTg3NDcsNTg3NDgsNTg3NDksNTg3NTAsNTg3NTEsNTg3NTIsNTg3NTMsNTg3NTQsNTg3NTUsNTg3NTYsNTg3NTcsODU2MCw4NTYxLDg1NjIsODU2Myw4NTY0LDg1NjUsODU2Niw4NTY3LDg1NjgsODU2OSw1OTIzOCw1OTIzOSw1''@;'; put 'put ''OTI0MCw1OTI0MSw1OTI0Miw1OTI0Myw5MzUyLDkzNTMsOTM1NCw5MzU1LDkzNTYsOTM1Nyw5MzU4LDkzNTksOTM2MCw5MzYxLDkzNjIsOTM2Myw5MzY0LDkzNjUsOTM2Niw5MzY3LDkzNjgsOTM2OSw5MzcwLDkzNzEsOTMzMiw5MzMzLDkzMzQsOTMzNSw5MzM2LDkzMzcsOTMzOCw5MzM5LDkz''@;'; put 'put ''NDAsOTM0MSw5MzQyLDkzNDMsOTM0NCw5MzQ1LDkzNDYsOTM0Nyw5MzQ4LDkzNDksOTM1MCw5MzUxLDkzMTIsOTMxMyw5MzE0LDkzMTUsOTMxNiw5MzE3LDkzMTgsOTMxOSw5MzIwLDkzMjEsODM2NCw1OTI0NSwxMjgzMiwxMjgzMywxMjgzNCwxMjgzNSwxMjgzNiwxMjgzNywxMjgzOCwxMjgz''@;'; put 'put ''OSwxMjg0MCwxMjg0MSw1OTI0Niw1OTI0Nyw4NTQ0LDg1NDUsODU0Niw4NTQ3LDg1NDgsODU0OSw4NTUwLDg1NTEsODU1Miw4NTUzLDg1NTQsODU1NSw1OTI0OCw1OTI0OSw1ODc1OCw1ODc1OSw1ODc2MCw1ODc2MSw1ODc2Miw1ODc2Myw1ODc2NCw1ODc2NSw1ODc2Niw1ODc2Nyw1ODc2OCw1''@;'; put 'put ''ODc2OSw1ODc3MCw1ODc3MSw1ODc3Miw1ODc3Myw1ODc3NCw1ODc3NSw1ODc3Niw1ODc3Nyw1ODc3OCw1ODc3OSw1ODc4MCw1ODc4MSw1ODc4Miw1ODc4Myw1ODc4NCw1ODc4NSw1ODc4Niw1ODc4Nyw1ODc4OCw1ODc4OSw1ODc5MCw1ODc5MSw1ODc5Miw1ODc5Myw1ODc5NCw1ODc5NSw1ODc5''@;'; put 'put ''Niw1ODc5Nyw1ODc5OCw1ODc5OSw1ODgwMCw1ODgwMSw1ODgwMiw1ODgwMyw1ODgwNCw1ODgwNSw1ODgwNiw1ODgwNyw1ODgwOCw1ODgwOSw1ODgxMCw1ODgxMSw1ODgxMiw1ODgxMyw1ODgxNCw1ODgxNSw1ODgxNiw1ODgxNyw1ODgxOCw1ODgxOSw1ODgyMCw1ODgyMSw1ODgyMiw1ODgyMyw1''@;'; put 'put ''ODgyNCw1ODgyNSw1ODgyNiw1ODgyNyw1ODgyOCw1ODgyOSw1ODgzMCw1ODgzMSw1ODgzMiw1ODgzMyw1ODgzNCw1ODgzNSw1ODgzNiw1ODgzNyw1ODgzOCw1ODgzOSw1ODg0MCw1ODg0MSw1ODg0Miw1ODg0Myw1ODg0NCw1ODg0NSw1ODg0Niw1ODg0Nyw1ODg0OCw1ODg0OSw1ODg1MCw1ODg1''@;'; put 'put ''MSw1ODg1MiwxMjI4OCw2NTI4MSw2NTI4Miw2NTI4Myw2NTUwOSw2NTI4NSw2NTI4Niw2NTI4Nyw2NTI4OCw2NTI4OSw2NTI5MCw2NTI5MSw2NTI5Miw2NTI5Myw2NTI5NCw2NTI5NSw2NTI5Niw2NTI5Nyw2NTI5OCw2NTI5OSw2NTMwMCw2NTMwMSw2NTMwMiw2NTMwMyw2NTMwNCw2NTMwNSw2''@;'; put 'put ''NTMwNiw2NTMwNyw2NTMwOCw2NTMwOSw2NTMxMCw2NTMxMSw2NTMxMiw2NTMxMyw2NTMxNCw2NTMxNSw2NTMxNiw2NTMxNyw2NTMxOCw2NTMxOSw2NTMyMCw2NTMyMSw2NTMyMiw2NTMyMyw2NTMyNCw2NTMyNSw2NTMyNiw2NTMyNyw2NTMyOCw2NTMyOSw2NTMzMCw2NTMzMSw2NTMzMiw2NTMz''@;'; put 'put ''Myw2NTMzNCw2NTMzNSw2NTMzNiw2NTMzNyw2NTMzOCw2NTMzOSw2NTM0MCw2NTM0MSw2NTM0Miw2NTM0Myw2NTM0NCw2NTM0NSw2NTM0Niw2NTM0Nyw2NTM0OCw2NTM0OSw2NTM1MCw2NTM1MSw2NTM1Miw2NTM1Myw2NTM1NCw2NTM1NSw2NTM1Niw2NTM1Nyw2NTM1OCw2NTM1OSw2NTM2MCw2''@;'; put 'put ''NTM2MSw2NTM2Miw2NTM2Myw2NTM2NCw2NTM2NSw2NTM2Niw2NTM2Nyw2NTM2OCw2NTM2OSw2NTM3MCw2NTM3MSw2NTM3Miw2NTM3Myw2NTUwNyw1ODg1NCw1ODg1NSw1ODg1Niw1ODg1Nyw1ODg1OCw1ODg1OSw1ODg2MCw1ODg2MSw1ODg2Miw1ODg2Myw1ODg2NCw1ODg2NSw1ODg2Niw1ODg2''@;'; put 'put ''Nyw1ODg2OCw1ODg2OSw1ODg3MCw1ODg3MSw1ODg3Miw1ODg3Myw1ODg3NCw1ODg3NSw1ODg3Niw1ODg3Nyw1ODg3OCw1ODg3OSw1ODg4MCw1ODg4MSw1ODg4Miw1ODg4Myw1ODg4NCw1ODg4NSw1ODg4Niw1ODg4Nyw1ODg4OCw1ODg4OSw1ODg5MCw1ODg5MSw1ODg5Miw1ODg5Myw1ODg5NCw1''@;'; put 'put ''ODg5NSw1ODg5Niw1ODg5Nyw1ODg5OCw1ODg5OSw1ODkwMCw1ODkwMSw1ODkwMiw1ODkwMyw1ODkwNCw1ODkwNSw1ODkwNiw1ODkwNyw1ODkwOCw1ODkwOSw1ODkxMCw1ODkxMSw1ODkxMiw1ODkxMyw1ODkxNCw1ODkxNSw1ODkxNiw1ODkxNyw1ODkxOCw1ODkxOSw1ODkyMCw1ODkyMSw1ODky''@;'; put 'put ''Miw1ODkyMyw1ODkyNCw1ODkyNSw1ODkyNiw1ODkyNyw1ODkyOCw1ODkyOSw1ODkzMCw1ODkzMSw1ODkzMiw1ODkzMyw1ODkzNCw1ODkzNSw1ODkzNiw1ODkzNyw1ODkzOCw1ODkzOSw1ODk0MCw1ODk0MSw1ODk0Miw1ODk0Myw1ODk0NCw1ODk0NSw1ODk0Niw1ODk0Nyw1ODk0OCw1ODk0OSwx''@;'; put 'put ''MjM1MywxMjM1NCwxMjM1NSwxMjM1NiwxMjM1NywxMjM1OCwxMjM1OSwxMjM2MCwxMjM2MSwxMjM2MiwxMjM2MywxMjM2NCwxMjM2NSwxMjM2NiwxMjM2NywxMjM2OCwxMjM2OSwxMjM3MCwxMjM3MSwxMjM3MiwxMjM3MywxMjM3NCwxMjM3NSwxMjM3NiwxMjM3NywxMjM3OCwxMjM3OSwxMjM4''@;'; put 'put ''MCwxMjM4MSwxMjM4MiwxMjM4MywxMjM4NCwxMjM4NSwxMjM4NiwxMjM4NywxMjM4OCwxMjM4OSwxMjM5MCwxMjM5MSwxMjM5MiwxMjM5MywxMjM5NCwxMjM5NSwxMjM5NiwxMjM5NywxMjM5OCwxMjM5OSwxMjQwMCwxMjQwMSwxMjQwMiwxMjQwMywxMjQwNCwxMjQwNSwxMjQwNiwxMjQwNywx''@;'; put 'put ''MjQwOCwxMjQwOSwxMjQxMCwxMjQxMSwxMjQxMiwxMjQxMywxMjQxNCwxMjQxNSwxMjQxNiwxMjQxNywxMjQxOCwxMjQxOSwxMjQyMCwxMjQyMSwxMjQyMiwxMjQyMywxMjQyNCwxMjQyNSwxMjQyNiwxMjQyNywxMjQyOCwxMjQyOSwxMjQzMCwxMjQzMSwxMjQzMiwxMjQzMywxMjQzNCwxMjQz''@;'; put 'put ''NSw1OTI1MCw1OTI1MSw1OTI1Miw1OTI1Myw1OTI1NCw1OTI1NSw1OTI1Niw1OTI1Nyw1OTI1OCw1OTI1OSw1OTI2MCw1ODk1MCw1ODk1MSw1ODk1Miw1ODk1Myw1ODk1NCw1ODk1NSw1ODk1Niw1ODk1Nyw1ODk1OCw1ODk1OSw1ODk2MCw1ODk2MSw1ODk2Miw1ODk2Myw1ODk2NCw1ODk2NSw1''@;'; put 'put ''ODk2Niw1ODk2Nyw1ODk2OCw1ODk2OSw1ODk3MCw1ODk3MSw1ODk3Miw1ODk3Myw1ODk3NCw1ODk3NSw1ODk3Niw1ODk3Nyw1ODk3OCw1ODk3OSw1ODk4MCw1ODk4MSw1ODk4Miw1ODk4Myw1ODk4NCw1ODk4NSw1ODk4Niw1ODk4Nyw1ODk4OCw1ODk4OSw1ODk5MCw1ODk5MSw1ODk5Miw1ODk5''@;'; put 'put ''Myw1ODk5NCw1ODk5NSw1ODk5Niw1ODk5Nyw1ODk5OCw1ODk5OSw1OWUzLDU5MDAxLDU5MDAyLDU5MDAzLDU5MDA0LDU5MDA1LDU5MDA2LDU5MDA3LDU5MDA4LDU5MDA5LDU5MDEwLDU5MDExLDU5MDEyLDU5MDEzLDU5MDE0LDU5MDE1LDU5MDE2LDU5MDE3LDU5MDE4LDU5MDE5LDU5MDIwLDU5''@;'; put 'put ''MDIxLDU5MDIyLDU5MDIzLDU5MDI0LDU5MDI1LDU5MDI2LDU5MDI3LDU5MDI4LDU5MDI5LDU5MDMwLDU5MDMxLDU5MDMyLDU5MDMzLDU5MDM0LDU5MDM1LDU5MDM2LDU5MDM3LDU5MDM4LDU5MDM5LDU5MDQwLDU5MDQxLDU5MDQyLDU5MDQzLDU5MDQ0LDU5MDQ1LDEyNDQ5LDEyNDUwLDEyNDUx''@;'; put 'put ''LDEyNDUyLDEyNDUzLDEyNDU0LDEyNDU1LDEyNDU2LDEyNDU3LDEyNDU4LDEyNDU5LDEyNDYwLDEyNDYxLDEyNDYyLDEyNDYzLDEyNDY0LDEyNDY1LDEyNDY2LDEyNDY3LDEyNDY4LDEyNDY5LDEyNDcwLDEyNDcxLDEyNDcyLDEyNDczLDEyNDc0LDEyNDc1LDEyNDc2LDEyNDc3LDEyNDc4LDEy''@;'; put 'put ''NDc5LDEyNDgwLDEyNDgxLDEyNDgyLDEyNDgzLDEyNDg0LDEyNDg1LDEyNDg2LDEyNDg3LDEyNDg4LDEyNDg5LDEyNDkwLDEyNDkxLDEyNDkyLDEyNDkzLDEyNDk0LDEyNDk1LDEyNDk2LDEyNDk3LDEyNDk4LDEyNDk5LDEyNTAwLDEyNTAxLDEyNTAyLDEyNTAzLDEyNTA0LDEyNTA1LDEyNTA2''@;'; put 'put ''LDEyNTA3LDEyNTA4LDEyNTA5LDEyNTEwLDEyNTExLDEyNTEyLDEyNTEzLDEyNTE0LDEyNTE1LDEyNTE2LDEyNTE3LDEyNTE4LDEyNTE5LDEyNTIwLDEyNTIxLDEyNTIyLDEyNTIzLDEyNTI0LDEyNTI1LDEyNTI2LDEyNTI3LDEyNTI4LDEyNTI5LDEyNTMwLDEyNTMxLDEyNTMyLDEyNTMzLDEy''@;'; put 'put ''NTM0LDU5MjYxLDU5MjYyLDU5MjYzLDU5MjY0LDU5MjY1LDU5MjY2LDU5MjY3LDU5MjY4LDU5MDQ2LDU5MDQ3LDU5MDQ4LDU5MDQ5LDU5MDUwLDU5MDUxLDU5MDUyLDU5MDUzLDU5MDU0LDU5MDU1LDU5MDU2LDU5MDU3LDU5MDU4LDU5MDU5LDU5MDYwLDU5MDYxLDU5MDYyLDU5MDYzLDU5MDY0''@;'; put 'put ''LDU5MDY1LDU5MDY2LDU5MDY3LDU5MDY4LDU5MDY5LDU5MDcwLDU5MDcxLDU5MDcyLDU5MDczLDU5MDc0LDU5MDc1LDU5MDc2LDU5MDc3LDU5MDc4LDU5MDc5LDU5MDgwLDU5MDgxLDU5MDgyLDU5MDgzLDU5MDg0LDU5MDg1LDU5MDg2LDU5MDg3LDU5MDg4LDU5MDg5LDU5MDkwLDU5MDkxLDU5''@;'; put 'put ''MDkyLDU5MDkzLDU5MDk0LDU5MDk1LDU5MDk2LDU5MDk3LDU5MDk4LDU5MDk5LDU5MTAwLDU5MTAxLDU5MTAyLDU5MTAzLDU5MTA0LDU5MTA1LDU5MTA2LDU5MTA3LDU5MTA4LDU5MTA5LDU5MTEwLDU5MTExLDU5MTEyLDU5MTEzLDU5MTE0LDU5MTE1LDU5MTE2LDU5MTE3LDU5MTE4LDU5MTE5''@;'; put 'put ''LDU5MTIwLDU5MTIxLDU5MTIyLDU5MTIzLDU5MTI0LDU5MTI1LDU5MTI2LDU5MTI3LDU5MTI4LDU5MTI5LDU5MTMwLDU5MTMxLDU5MTMyLDU5MTMzLDU5MTM0LDU5MTM1LDU5MTM2LDU5MTM3LDU5MTM4LDU5MTM5LDU5MTQwLDU5MTQxLDkxMyw5MTQsOTE1LDkxNiw5MTcsOTE4LDkxOSw5MjAs''@;'; put 'put ''OTIxLDkyMiw5MjMsOTI0LDkyNSw5MjYsOTI3LDkyOCw5MjksOTMxLDkzMiw5MzMsOTM0LDkzNSw5MzYsOTM3LDU5MjY5LDU5MjcwLDU5MjcxLDU5MjcyLDU5MjczLDU5Mjc0LDU5Mjc1LDU5Mjc2LDk0NSw5NDYsOTQ3LDk0OCw5NDksOTUwLDk1MSw5NTIsOTUzLDk1NCw5NTUsOTU2LDk1Nyw5''@;'; put 'put ''NTgsOTU5LDk2MCw5NjEsOTYzLDk2NCw5NjUsOTY2LDk2Nyw5NjgsOTY5LDU5Mjc3LDU5Mjc4LDU5Mjc5LDU5MjgwLDU5MjgxLDU5MjgyLDU5MjgzLDY1MDc3LDY1MDc4LDY1MDgxLDY1MDgyLDY1MDg3LDY1MDg4LDY1MDg1LDY1MDg2LDY1MDg5LDY1MDkwLDY1MDkxLDY1MDkyLDU5Mjg0LDU5''@;'; put 'put ''Mjg1LDY1MDgzLDY1MDg0LDY1MDc5LDY1MDgwLDY1MDczLDU5Mjg2LDY1MDc1LDY1MDc2LDU5Mjg3LDU5Mjg4LDU5Mjg5LDU5MjkwLDU5MjkxLDU5MjkyLDU5MjkzLDU5Mjk0LDU5Mjk1LDU5MTQyLDU5MTQzLDU5MTQ0LDU5MTQ1LDU5MTQ2LDU5MTQ3LDU5MTQ4LDU5MTQ5LDU5MTUwLDU5MTUx''@;'; put 'put ''LDU5MTUyLDU5MTUzLDU5MTU0LDU5MTU1LDU5MTU2LDU5MTU3LDU5MTU4LDU5MTU5LDU5MTYwLDU5MTYxLDU5MTYyLDU5MTYzLDU5MTY0LDU5MTY1LDU5MTY2LDU5MTY3LDU5MTY4LDU5MTY5LDU5MTcwLDU5MTcxLDU5MTcyLDU5MTczLDU5MTc0LDU5MTc1LDU5MTc2LDU5MTc3LDU5MTc4LDU5''@;'; put 'put ''MTc5LDU5MTgwLDU5MTgxLDU5MTgyLDU5MTgzLDU5MTg0LDU5MTg1LDU5MTg2LDU5MTg3LDU5MTg4LDU5MTg5LDU5MTkwLDU5MTkxLDU5MTkyLDU5MTkzLDU5MTk0LDU5MTk1LDU5MTk2LDU5MTk3LDU5MTk4LDU5MTk5LDU5MjAwLDU5MjAxLDU5MjAyLDU5MjAzLDU5MjA0LDU5MjA1LDU5MjA2''@;'; put 'put ''LDU5MjA3LDU5MjA4LDU5MjA5LDU5MjEwLDU5MjExLDU5MjEyLDU5MjEzLDU5MjE0LDU5MjE1LDU5MjE2LDU5MjE3LDU5MjE4LDU5MjE5LDU5MjIwLDU5MjIxLDU5MjIyLDU5MjIzLDU5MjI0LDU5MjI1LDU5MjI2LDU5MjI3LDU5MjI4LDU5MjI5LDU5MjMwLDU5MjMxLDU5MjMyLDU5MjMzLDU5''@;'; put 'put ''MjM0LDU5MjM1LDU5MjM2LDU5MjM3LDEwNDAsMTA0MSwxMDQyLDEwNDMsMTA0NCwxMDQ1LDEwMjUsMTA0NiwxMDQ3LDEwNDgsMTA0OSwxMDUwLDEwNTEsMTA1MiwxMDUzLDEwNTQsMTA1NSwxMDU2LDEwNTcsMTA1OCwxMDU5LDEwNjAsMTA2MSwxMDYyLDEwNjMsMTA2NCwxMDY1LDEwNjYsMTA2''@;'; put 'put ''NywxMDY4LDEwNjksMTA3MCwxMDcxLDU5Mjk2LDU5Mjk3LDU5Mjk4LDU5Mjk5LDU5MzAwLDU5MzAxLDU5MzAyLDU5MzAzLDU5MzA0LDU5MzA1LDU5MzA2LDU5MzA3LDU5MzA4LDU5MzA5LDU5MzEwLDEwNzIsMTA3MywxMDc0LDEwNzUsMTA3NiwxMDc3LDExMDUsMTA3OCwxMDc5LDEwODAsMTA4''@;'; put 'put ''MSwxMDgyLDEwODMsMTA4NCwxMDg1LDEwODYsMTA4NywxMDg4LDEwODksMTA5MCwxMDkxLDEwOTIsMTA5MywxMDk0LDEwOTUsMTA5NiwxMDk3LDEwOTgsMTA5OSwxMTAwLDExMDEsMTEwMiwxMTAzLDU5MzExLDU5MzEyLDU5MzEzLDU5MzE0LDU5MzE1LDU5MzE2LDU5MzE3LDU5MzE4LDU5MzE5''@;'; put 'put ''LDU5MzIwLDU5MzIxLDU5MzIyLDU5MzIzLDcxNCw3MTUsNzI5LDgyMTEsODIxMyw4MjI5LDgyNDUsODQ1Myw4NDU3LDg1OTgsODU5OSw4NjAwLDg2MDEsODcyNSw4NzM1LDg3MzksODc4Niw4ODA2LDg4MDcsODg5NSw5NTUyLDk1NTMsOTU1NCw5NTU1LDk1NTYsOTU1Nyw5NTU4LDk1NTksOTU2''@;'; put 'put ''MCw5NTYxLDk1NjIsOTU2Myw5NTY0LDk1NjUsOTU2Niw5NTY3LDk1NjgsOTU2OSw5NTcwLDk1NzEsOTU3Miw5NTczLDk1NzQsOTU3NSw5NTc2LDk1NzcsOTU3OCw5NTc5LDk1ODAsOTU4MSw5NTgyLDk1ODMsOTU4NCw5NTg1LDk1ODYsOTU4Nyw5NjAxLDk2MDIsOTYwMyw5NjA0LDk2MDUsOTYw''@;'; put 'put ''Niw5NjA3LDk2MDgsOTYwOSw5NjEwLDk2MTEsOTYxMiw5NjEzLDk2MTQsOTYxNSw5NjE5LDk2MjAsOTYyMSw5NjYwLDk2NjEsOTY5OCw5Njk5LDk3MDAsOTcwMSw5NzM3LDg4NTMsMTIzMDYsMTIzMTcsMTIzMTgsNTkzMjQsNTkzMjUsNTkzMjYsNTkzMjcsNTkzMjgsNTkzMjksNTkzMzAsNTkz''@;'; put 'put ''MzEsNTkzMzIsNTkzMzMsNTkzMzQsMjU3LDIyNSw0NjIsMjI0LDI3NSwyMzMsMjgzLDIzMiwyOTksMjM3LDQ2NCwyMzYsMzMzLDI0Myw0NjYsMjQyLDM2MywyNTAsNDY4LDI0OSw0NzAsNDcyLDQ3NCw0NzYsMjUyLDIzNCw1OTMsNzc0MywzMjQsMzI4LDUwNSw2MDksNTkzMzcsNTkzMzgsNTkz''@;'; put 'put ''MzksNTkzNDAsMTI1NDksMTI1NTAsMTI1NTEsMTI1NTIsMTI1NTMsMTI1NTQsMTI1NTUsMTI1NTYsMTI1NTcsMTI1NTgsMTI1NTksMTI1NjAsMTI1NjEsMTI1NjIsMTI1NjMsMTI1NjQsMTI1NjUsMTI1NjYsMTI1NjcsMTI1NjgsMTI1NjksMTI1NzAsMTI1NzEsMTI1NzIsMTI1NzMsMTI1NzQs''@;'; put 'put ''MTI1NzUsMTI1NzYsMTI1NzcsMTI1NzgsMTI1NzksMTI1ODAsMTI1ODEsMTI1ODIsMTI1ODMsMTI1ODQsMTI1ODUsNTkzNDEsNTkzNDIsNTkzNDMsNTkzNDQsNTkzNDUsNTkzNDYsNTkzNDcsNTkzNDgsNTkzNDksNTkzNTAsNTkzNTEsNTkzNTIsNTkzNTMsNTkzNTQsNTkzNTUsNTkzNTYsNTkz''@;'; put 'put ''NTcsNTkzNTgsNTkzNTksNTkzNjAsNTkzNjEsMTIzMjEsMTIzMjIsMTIzMjMsMTIzMjQsMTIzMjUsMTIzMjYsMTIzMjcsMTIzMjgsMTIzMjksMTI5NjMsMTMxOTgsMTMxOTksMTMyMTIsMTMyMTMsMTMyMTQsMTMyMTcsMTMyNTIsMTMyNjIsMTMyNjUsMTMyNjYsMTMyNjksNjUwNzIsNjU1MDYs''@;'; put 'put ''NjU1MDgsNTkzNjIsODQ4MSwxMjg0OSw1OTM2Myw4MjA4LDU5MzY0LDU5MzY1LDU5MzY2LDEyNTQwLDEyNDQzLDEyNDQ0LDEyNTQxLDEyNTQyLDEyMjk0LDEyNDQ1LDEyNDQ2LDY1MDk3LDY1MDk4LDY1MDk5LDY1MTAwLDY1MTAxLDY1MTAyLDY1MTAzLDY1MTA0LDY1MTA1LDY1MTA2LDY1MTA4''@;'; put 'put ''LDY1MTA5LDY1MTEwLDY1MTExLDY1MTEzLDY1MTE0LDY1MTE1LDY1MTE2LDY1MTE3LDY1MTE4LDY1MTE5LDY1MTIwLDY1MTIxLDY1MTIyLDY1MTIzLDY1MTI0LDY1MTI1LDY1MTI2LDY1MTI4LDY1MTI5LDY1MTMwLDY1MTMxLDEyMzUwLDEyMjcyLDEyMjczLDEyMjc0LDEyMjc1LDEyMjc2LDEy''@;'; put 'put ''Mjc3LDEyMjc4LDEyMjc5LDEyMjgwLDEyMjgxLDEyMjgyLDEyMjgzLDEyMjk1LDU5MzgwLDU5MzgxLDU5MzgyLDU5MzgzLDU5Mzg0LDU5Mzg1LDU5Mzg2LDU5Mzg3LDU5Mzg4LDU5Mzg5LDU5MzkwLDU5MzkxLDU5MzkyLDk0NzIsOTQ3Myw5NDc0LDk0NzUsOTQ3Niw5NDc3LDk0NzgsOTQ3OSw5''@;'; put 'put ''NDgwLDk0ODEsOTQ4Miw5NDgzLDk0ODQsOTQ4NSw5NDg2LDk0ODcsOTQ4OCw5NDg5LDk0OTAsOTQ5MSw5NDkyLDk0OTMsOTQ5NCw5NDk1LDk0OTYsOTQ5Nyw5NDk4LDk0OTksOTUwMCw5NTAxLDk1MDIsOTUwMyw5NTA0LDk1MDUsOTUwNiw5NTA3LDk1MDgsOTUwOSw5NTEwLDk1MTEsOTUxMiw5''@;'; put 'put ''NTEzLDk1MTQsOTUxNSw5NTE2LDk1MTcsOTUxOCw5NTE5LDk1MjAsOTUyMSw5NTIyLDk1MjMsOTUyNCw5NTI1LDk1MjYsOTUyNyw5NTI4LDk1MjksOTUzMCw5NTMxLDk1MzIsOTUzMyw5NTM0LDk1MzUsOTUzNiw5NTM3LDk1MzgsOTUzOSw5NTQwLDk1NDEsOTU0Miw5NTQzLDk1NDQsOTU0NSw5''@;'; put 'put ''NTQ2LDk1NDcsNTkzOTMsNTkzOTQsNTkzOTUsNTkzOTYsNTkzOTcsNTkzOTgsNTkzOTksNTk0MDAsNTk0MDEsNTk0MDIsNTk0MDMsNTk0MDQsNTk0MDUsNTk0MDYsNTk0MDcsMjk0MDQsMjk0MDUsMjk0MDcsMjk0MTAsMjk0MTEsMjk0MTIsMjk0MTMsMjk0MTQsMjk0MTUsMjk0MTgsMjk0MTks''@;'; put 'put ''Mjk0MjksMjk0MzAsMjk0MzMsMjk0MzcsMjk0MzgsMjk0MzksMjk0NDAsMjk0NDIsMjk0NDQsMjk0NDUsMjk0NDYsMjk0NDcsMjk0NDgsMjk0NDksMjk0NTEsMjk0NTIsMjk0NTMsMjk0NTUsMjk0NTYsMjk0NTcsMjk0NTgsMjk0NjAsMjk0NjQsMjk0NjUsMjk0NjYsMjk0NzEsMjk0NzIsMjk0''@;'; put 'put ''NzUsMjk0NzYsMjk0NzgsMjk0NzksMjk0ODAsMjk0ODUsMjk0ODcsMjk0ODgsMjk0OTAsMjk0OTEsMjk0OTMsMjk0OTQsMjk0OTgsMjk0OTksMjk1MDAsMjk1MDEsMjk1MDQsMjk1MDUsMjk1MDYsMjk1MDcsMjk1MDgsMjk1MDksMjk1MTAsMjk1MTEsMjk1MTIsMjk1MTMsMjk1MTQsMjk1MTUs''@;'; put 'put ''Mjk1MTYsMjk1MTgsMjk1MTksMjk1MjEsMjk1MjMsMjk1MjQsMjk1MjUsMjk1MjYsMjk1MjgsMjk1MjksMjk1MzAsMjk1MzEsMjk1MzIsMjk1MzMsMjk1MzQsMjk1MzUsMjk1MzcsMjk1MzgsMjk1MzksMjk1NDAsMjk1NDEsMjk1NDIsMjk1NDMsMjk1NDQsMjk1NDUsMjk1NDYsMjk1NDcsMjk1''@;'; put 'put ''NTAsMjk1NTIsMjk1NTMsNTczNDQsNTczNDUsNTczNDYsNTczNDcsNTczNDgsNTczNDksNTczNTAsNTczNTEsNTczNTIsNTczNTMsNTczNTQsNTczNTUsNTczNTYsNTczNTcsNTczNTgsNTczNTksNTczNjAsNTczNjEsNTczNjIsNTczNjMsNTczNjQsNTczNjUsNTczNjYsNTczNjcsNTczNjgs''@;'; put 'put ''NTczNjksNTczNzAsNTczNzEsNTczNzIsNTczNzMsNTczNzQsNTczNzUsNTczNzYsNTczNzcsNTczNzgsNTczNzksNTczODAsNTczODEsNTczODIsNTczODMsNTczODQsNTczODUsNTczODYsNTczODcsNTczODgsNTczODksNTczOTAsNTczOTEsNTczOTIsNTczOTMsNTczOTQsNTczOTUsNTcz''@;'; put 'put ''OTYsNTczOTcsNTczOTgsNTczOTksNTc0MDAsNTc0MDEsNTc0MDIsNTc0MDMsNTc0MDQsNTc0MDUsNTc0MDYsNTc0MDcsNTc0MDgsNTc0MDksNTc0MTAsNTc0MTEsNTc0MTIsNTc0MTMsNTc0MTQsNTc0MTUsNTc0MTYsNTc0MTcsNTc0MTgsNTc0MTksNTc0MjAsNTc0MjEsNTc0MjIsNTc0MjMs''@;'; put 'put ''NTc0MjQsNTc0MjUsNTc0MjYsNTc0MjcsNTc0MjgsNTc0MjksNTc0MzAsNTc0MzEsNTc0MzIsNTc0MzMsNTc0MzQsNTc0MzUsNTc0MzYsNTc0MzcsMjk1NTQsMjk1NTUsMjk1NTYsMjk1NTcsMjk1NTgsMjk1NTksMjk1NjAsMjk1NjEsMjk1NjIsMjk1NjMsMjk1NjQsMjk1NjUsMjk1NjcsMjk1''@;'; put 'put ''NjgsMjk1NjksMjk1NzAsMjk1NzEsMjk1NzMsMjk1NzQsMjk1NzYsMjk1NzgsMjk1ODAsMjk1ODEsMjk1ODMsMjk1ODQsMjk1ODYsMjk1ODcsMjk1ODgsMjk1ODksMjk1OTEsMjk1OTIsMjk1OTMsMjk1OTQsMjk1OTYsMjk1OTcsMjk1OTgsMjk2MDAsMjk2MDEsMjk2MDMsMjk2MDQsMjk2MDUs''@;'; put 'put ''Mjk2MDYsMjk2MDcsMjk2MDgsMjk2MTAsMjk2MTIsMjk2MTMsMjk2MTcsMjk2MjAsMjk2MjEsMjk2MjIsMjk2MjQsMjk2MjUsMjk2MjgsMjk2MjksMjk2MzAsMjk2MzEsMjk2MzMsMjk2MzUsMjk2MzYsMjk2MzcsMjk2MzgsMjk2MzksMjk2NDMsMjk2NDQsMjk2NDYsMjk2NTAsMjk2NTEsMjk2''@;'; put 'put ''NTIsMjk2NTMsMjk2NTQsMjk2NTUsMjk2NTYsMjk2NTgsMjk2NTksMjk2NjAsMjk2NjEsMjk2NjMsMjk2NjUsMjk2NjYsMjk2NjcsMjk2NjgsMjk2NzAsMjk2NzIsMjk2NzQsMjk2NzUsMjk2NzYsMjk2NzgsMjk2NzksMjk2ODAsMjk2ODEsMjk2ODMsMjk2ODQsMjk2ODUsMjk2ODYsMjk2ODcs''@;'; put 'put ''NTc0MzgsNTc0MzksNTc0NDAsNTc0NDEsNTc0NDIsNTc0NDMsNTc0NDQsNTc0NDUsNTc0NDYsNTc0NDcsNTc0NDgsNTc0NDksNTc0NTAsNTc0NTEsNTc0NTIsNTc0NTMsNTc0NTQsNTc0NTUsNTc0NTYsNTc0NTcsNTc0NTgsNTc0NTksNTc0NjAsNTc0NjEsNTc0NjIsNTc0NjMsNTc0NjQsNTc0''@;'; put 'put ''NjUsNTc0NjYsNTc0NjcsNTc0NjgsNTc0NjksNTc0NzAsNTc0NzEsNTc0NzIsNTc0NzMsNTc0NzQsNTc0NzUsNTc0NzYsNTc0NzcsNTc0NzgsNTc0NzksNTc0ODAsNTc0ODEsNTc0ODIsNTc0ODMsNTc0ODQsNTc0ODUsNTc0ODYsNTc0ODcsNTc0ODgsNTc0ODksNTc0OTAsNTc0OTEsNTc0OTIs''@;'; put 'put ''NTc0OTMsNTc0OTQsNTc0OTUsNTc0OTYsNTc0OTcsNTc0OTgsNTc0OTksNTc1MDAsNTc1MDEsNTc1MDIsNTc1MDMsNTc1MDQsNTc1MDUsNTc1MDYsNTc1MDcsNTc1MDgsNTc1MDksNTc1MTAsNTc1MTEsNTc1MTIsNTc1MTMsNTc1MTQsNTc1MTUsNTc1MTYsNTc1MTcsNTc1MTgsNTc1MTksNTc1''@;'; put 'put ''MjAsNTc1MjEsNTc1MjIsNTc1MjMsNTc1MjQsNTc1MjUsNTc1MjYsNTc1MjcsNTc1MjgsNTc1MjksNTc1MzAsNTc1MzEsMjk2ODgsMjk2ODksMjk2OTAsMjk2OTEsMjk2OTIsMjk2OTMsMjk2OTQsMjk2OTUsMjk2OTYsMjk2OTcsMjk2OTgsMjk3MDAsMjk3MDMsMjk3MDQsMjk3MDcsMjk3MDgs''@;'; put 'put ''Mjk3MDksMjk3MTAsMjk3MTMsMjk3MTQsMjk3MTUsMjk3MTYsMjk3MTcsMjk3MTgsMjk3MTksMjk3MjAsMjk3MjEsMjk3MjQsMjk3MjUsMjk3MjYsMjk3MjcsMjk3MjgsMjk3MjksMjk3MzEsMjk3MzIsMjk3MzUsMjk3MzcsMjk3MzksMjk3NDEsMjk3NDMsMjk3NDUsMjk3NDYsMjk3NTEsMjk3''@;'; put 'put ''NTIsMjk3NTMsMjk3NTQsMjk3NTUsMjk3NTcsMjk3NTgsMjk3NTksMjk3NjAsMjk3NjIsMjk3NjMsMjk3NjQsMjk3NjUsMjk3NjYsMjk3NjcsMjk3NjgsMjk3NjksMjk3NzAsMjk3NzEsMjk3NzIsMjk3NzMsMjk3NzQsMjk3NzUsMjk3NzYsMjk3NzcsMjk3NzgsMjk3NzksMjk3ODAsMjk3ODIs''@;'; put 'put ''Mjk3ODQsMjk3ODksMjk3OTIsMjk3OTMsMjk3OTQsMjk3OTUsMjk3OTYsMjk3OTcsMjk3OTgsMjk3OTksMjk4MDAsMjk4MDEsMjk4MDIsMjk4MDMsMjk4MDQsMjk4MDYsMjk4MDcsMjk4MDksMjk4MTAsMjk4MTEsMjk4MTIsMjk4MTMsMjk4MTYsMjk4MTcsMjk4MTgsNTc1MzIsNTc1MzMsNTc1''@;'; put 'put ''MzQsNTc1MzUsNTc1MzYsNTc1MzcsNTc1MzgsNTc1MzksNTc1NDAsNTc1NDEsNTc1NDIsNTc1NDMsNTc1NDQsNTc1NDUsNTc1NDYsNTc1NDcsNTc1NDgsNTc1NDksNTc1NTAsNTc1NTEsNTc1NTIsNTc1NTMsNTc1NTQsNTc1NTUsNTc1NTYsNTc1NTcsNTc1NTgsNTc1NTksNTc1NjAsNTc1NjEs''@;'; put 'put ''NTc1NjIsNTc1NjMsNTc1NjQsNTc1NjUsNTc1NjYsNTc1NjcsNTc1NjgsNTc1NjksNTc1NzAsNTc1NzEsNTc1NzIsNTc1NzMsNTc1NzQsNTc1NzUsNTc1NzYsNTc1NzcsNTc1NzgsNTc1NzksNTc1ODAsNTc1ODEsNTc1ODIsNTc1ODMsNTc1ODQsNTc1ODUsNTc1ODYsNTc1ODcsNTc1ODgsNTc1''@;'; put 'put ''ODksNTc1OTAsNTc1OTEsNTc1OTIsNTc1OTMsNTc1OTQsNTc1OTUsNTc1OTYsNTc1OTcsNTc1OTgsNTc1OTksNTc2MDAsNTc2MDEsNTc2MDIsNTc2MDMsNTc2MDQsNTc2MDUsNTc2MDYsNTc2MDcsNTc2MDgsNTc2MDksNTc2MTAsNTc2MTEsNTc2MTIsNTc2MTMsNTc2MTQsNTc2MTUsNTc2MTYs''@;'; put 'put ''NTc2MTcsNTc2MTgsNTc2MTksNTc2MjAsNTc2MjEsNTc2MjIsNTc2MjMsNTc2MjQsNTc2MjUsMjk4MTksMjk4MjAsMjk4MjEsMjk4MjMsMjk4MjYsMjk4MjgsMjk4MjksMjk4MzAsMjk4MzIsMjk4MzMsMjk4MzQsMjk4MzYsMjk4MzcsMjk4MzksMjk4NDEsMjk4NDIsMjk4NDMsMjk4NDQsMjk4''@;'; put 'put ''NDUsMjk4NDYsMjk4NDcsMjk4NDgsMjk4NDksMjk4NTAsMjk4NTEsMjk4NTMsMjk4NTUsMjk4NTYsMjk4NTcsMjk4NTgsMjk4NTksMjk4NjAsMjk4NjEsMjk4NjIsMjk4NjYsMjk4NjcsMjk4NjgsMjk4NjksMjk4NzAsMjk4NzEsMjk4NzIsMjk4NzMsMjk4NzQsMjk4NzUsMjk4NzYsMjk4Nzcs''@;'; put 'put ''Mjk4NzgsMjk4NzksMjk4ODAsMjk4ODEsMjk4ODMsMjk4ODQsMjk4ODUsMjk4ODYsMjk4ODcsMjk4ODgsMjk4ODksMjk4OTAsMjk4OTEsMjk4OTIsMjk4OTMsMjk4OTQsMjk4OTUsMjk4OTYsMjk4OTcsMjk4OTgsMjk4OTksMjk5MDAsMjk5MDEsMjk5MDIsMjk5MDMsMjk5MDQsMjk5MDUsMjk5''@;'; put 'put ''MDcsMjk5MDgsMjk5MDksMjk5MTAsMjk5MTEsMjk5MTIsMjk5MTMsMjk5MTQsMjk5MTUsMjk5MTcsMjk5MTksMjk5MjEsMjk5MjUsMjk5MjcsMjk5MjgsMjk5MjksMjk5MzAsMjk5MzEsMjk5MzIsMjk5MzMsMjk5MzYsMjk5MzcsMjk5MzgsNTc2MjYsNTc2MjcsNTc2MjgsNTc2MjksNTc2MzAs''@;'; put 'put ''NTc2MzEsNTc2MzIsNTc2MzMsNTc2MzQsNTc2MzUsNTc2MzYsNTc2MzcsNTc2MzgsNTc2MzksNTc2NDAsNTc2NDEsNTc2NDIsNTc2NDMsNTc2NDQsNTc2NDUsNTc2NDYsNTc2NDcsNTc2NDgsNTc2NDksNTc2NTAsNTc2NTEsNTc2NTIsNTc2NTMsNTc2NTQsNTc2NTUsNTc2NTYsNTc2NTcsNTc2''@;'; put 'put ''NTgsNTc2NTksNTc2NjAsNTc2NjEsNTc2NjIsNTc2NjMsNTc2NjQsNTc2NjUsNTc2NjYsNTc2NjcsNTc2NjgsNTc2NjksNTc2NzAsNTc2NzEsNTc2NzIsNTc2NzMsNTc2NzQsNTc2NzUsNTc2NzYsNTc2NzcsNTc2NzgsNTc2NzksNTc2ODAsNTc2ODEsNTc2ODIsNTc2ODMsNTc2ODQsNTc2ODUs''@;'; put 'put ''NTc2ODYsNTc2ODcsNTc2ODgsNTc2ODksNTc2OTAsNTc2OTEsNTc2OTIsNTc2OTMsNTc2OTQsNTc2OTUsNTc2OTYsNTc2OTcsNTc2OTgsNTc2OTksNTc3MDAsNTc3MDEsNTc3MDIsNTc3MDMsNTc3MDQsNTc3MDUsNTc3MDYsNTc3MDcsNTc3MDgsNTc3MDksNTc3MTAsNTc3MTEsNTc3MTIsNTc3''@;'; put 'put ''MTMsNTc3MTQsNTc3MTUsNTc3MTYsNTc3MTcsNTc3MTgsNTc3MTksMjk5MzksMjk5NDEsMjk5NDQsMjk5NDUsMjk5NDYsMjk5NDcsMjk5NDgsMjk5NDksMjk5NTAsMjk5NTIsMjk5NTMsMjk5NTQsMjk5NTUsMjk5NTcsMjk5NTgsMjk5NTksMjk5NjAsMjk5NjEsMjk5NjIsMjk5NjMsMjk5NjQs''@;'; put 'put ''Mjk5NjYsMjk5NjgsMjk5NzAsMjk5NzIsMjk5NzMsMjk5NzQsMjk5NzUsMjk5NzksMjk5ODEsMjk5ODIsMjk5ODQsMjk5ODUsMjk5ODYsMjk5ODcsMjk5ODgsMjk5OTAsMjk5OTEsMjk5OTQsMjk5OTgsMzAwMDQsMzAwMDYsMzAwMDksMzAwMTIsMzAwMTMsMzAwMTUsMzAwMTcsMzAwMTgsMzAw''@;'; put 'put ''MTksMzAwMjAsMzAwMjIsMzAwMjMsMzAwMjUsMzAwMjYsMzAwMjksMzAwMzIsMzAwMzMsMzAwMzQsMzAwMzUsMzAwMzcsMzAwMzgsMzAwMzksMzAwNDAsMzAwNDUsMzAwNDYsMzAwNDcsMzAwNDgsMzAwNDksMzAwNTAsMzAwNTEsMzAwNTIsMzAwNTUsMzAwNTYsMzAwNTcsMzAwNTksMzAwNjAs''@;'; put 'put ''MzAwNjEsMzAwNjIsMzAwNjMsMzAwNjQsMzAwNjUsMzAwNjcsMzAwNjksMzAwNzAsMzAwNzEsMzAwNzQsMzAwNzUsMzAwNzYsMzAwNzcsMzAwNzgsMzAwODAsMzAwODEsMzAwODIsMzAwODQsMzAwODUsMzAwODcsNTc3MjAsNTc3MjEsNTc3MjIsNTc3MjMsNTc3MjQsNTc3MjUsNTc3MjYsNTc3''@;'; put 'put ''MjcsNTc3MjgsNTc3MjksNTc3MzAsNTc3MzEsNTc3MzIsNTc3MzMsNTc3MzQsNTc3MzUsNTc3MzYsNTc3MzcsNTc3MzgsNTc3MzksNTc3NDAsNTc3NDEsNTc3NDIsNTc3NDMsNTc3NDQsNTc3NDUsNTc3NDYsNTc3NDcsNTc3NDgsNTc3NDksNTc3NTAsNTc3NTEsNTc3NTIsNTc3NTMsNTc3NTQs''@;'; put 'put ''NTc3NTUsNTc3NTYsNTc3NTcsNTc3NTgsNTc3NTksNTc3NjAsNTc3NjEsNTc3NjIsNTc3NjMsNTc3NjQsNTc3NjUsNTc3NjYsNTc3NjcsNTc3NjgsNTc3NjksNTc3NzAsNTc3NzEsNTc3NzIsNTc3NzMsNTc3NzQsNTc3NzUsNTc3NzYsNTc3NzcsNTc3NzgsNTc3NzksNTc3ODAsNTc3ODEsNTc3''@;'; put 'put ''ODIsNTc3ODMsNTc3ODQsNTc3ODUsNTc3ODYsNTc3ODcsNTc3ODgsNTc3ODksNTc3OTAsNTc3OTEsNTc3OTIsNTc3OTMsNTc3OTQsNTc3OTUsNTc3OTYsNTc3OTcsNTc3OTgsNTc3OTksNTc4MDAsNTc4MDEsNTc4MDIsNTc4MDMsNTc4MDQsNTc4MDUsNTc4MDYsNTc4MDcsNTc4MDgsNTc4MDks''@;'; put 'put ''NTc4MTAsNTc4MTEsNTc4MTIsNTc4MTMsMzAwODgsMzAwODksMzAwOTAsMzAwOTIsMzAwOTMsMzAwOTQsMzAwOTYsMzAwOTksMzAxMDEsMzAxMDQsMzAxMDcsMzAxMDgsMzAxMTAsMzAxMTQsMzAxMTgsMzAxMTksMzAxMjAsMzAxMjEsMzAxMjIsMzAxMjUsMzAxMzQsMzAxMzUsMzAxMzgsMzAx''@;'; put 'put ''MzksMzAxNDMsMzAxNDQsMzAxNDUsMzAxNTAsMzAxNTUsMzAxNTYsMzAxNTgsMzAxNTksMzAxNjAsMzAxNjEsMzAxNjMsMzAxNjcsMzAxNjksMzAxNzAsMzAxNzIsMzAxNzMsMzAxNzUsMzAxNzYsMzAxNzcsMzAxODEsMzAxODUsMzAxODgsMzAxODksMzAxOTAsMzAxOTEsMzAxOTQsMzAxOTUs''@;'; put 'put ''MzAxOTcsMzAxOTgsMzAxOTksMzAyMDAsMzAyMDIsMzAyMDMsMzAyMDUsMzAyMDYsMzAyMTAsMzAyMTIsMzAyMTQsMzAyMTUsMzAyMTYsMzAyMTcsMzAyMTksMzAyMjEsMzAyMjIsMzAyMjMsMzAyMjUsMzAyMjYsMzAyMjcsMzAyMjgsMzAyMzAsMzAyMzQsMzAyMzYsMzAyMzcsMzAyMzgsMzAy''@;'; put 'put ''NDEsMzAyNDMsMzAyNDcsMzAyNDgsMzAyNTIsMzAyNTQsMzAyNTUsMzAyNTcsMzAyNTgsMzAyNjIsMzAyNjMsMzAyNjUsMzAyNjYsMzAyNjcsMzAyNjksMzAyNzMsMzAyNzQsMzAyNzYsNTc4MTQsNTc4MTUsNTc4MTYsNTc4MTcsNTc4MTgsNTc4MTksNTc4MjAsNTc4MjEsNTc4MjIsNTc4MjMs''@;'; put 'put ''NTc4MjQsNTc4MjUsNTc4MjYsNTc4MjcsNTc4MjgsNTc4MjksNTc4MzAsNTc4MzEsNTc4MzIsNTc4MzMsNTc4MzQsNTc4MzUsNTc4MzYsNTc4MzcsNTc4MzgsNTc4MzksNTc4NDAsNTc4NDEsNTc4NDIsNTc4NDMsNTc4NDQsNTc4NDUsNTc4NDYsNTc4NDcsNTc4NDgsNTc4NDksNTc4NTAsNTc4''@;'; put 'put ''NTEsNTc4NTIsNTc4NTMsNTc4NTQsNTc4NTUsNTc4NTYsNTc4NTcsNTc4NTgsNTc4NTksNTc4NjAsNTc4NjEsNTc4NjIsNTc4NjMsNTc4NjQsNTc4NjUsNTc4NjYsNTc4NjcsNTc4NjgsNTc4NjksNTc4NzAsNTc4NzEsNTc4NzIsNTc4NzMsNTc4NzQsNTc4NzUsNTc4NzYsNTc4NzcsNTc4Nzgs''@;'; put 'put ''NTc4NzksNTc4ODAsNTc4ODEsNTc4ODIsNTc4ODMsNTc4ODQsNTc4ODUsNTc4ODYsNTc4ODcsNTc4ODgsNTc4ODksNTc4OTAsNTc4OTEsNTc4OTIsNTc4OTMsNTc4OTQsNTc4OTUsNTc4OTYsNTc4OTcsNTc4OTgsNTc4OTksNTc5MDAsNTc5MDEsNTc5MDIsNTc5MDMsNTc5MDQsNTc5MDUsNTc5''@;'; put 'put ''MDYsNTc5MDcsMzAyNzcsMzAyNzgsMzAyNzksMzAyODAsMzAyODEsMzAyODIsMzAyODMsMzAyODYsMzAyODcsMzAyODgsMzAyODksMzAyOTAsMzAyOTEsMzAyOTMsMzAyOTUsMzAyOTYsMzAyOTcsMzAyOTgsMzAyOTksMzAzMDEsMzAzMDMsMzAzMDQsMzAzMDUsMzAzMDYsMzAzMDgsMzAzMDks''@;'; put 'put ''MzAzMTAsMzAzMTEsMzAzMTIsMzAzMTMsMzAzMTQsMzAzMTYsMzAzMTcsMzAzMTgsMzAzMjAsMzAzMjEsMzAzMjIsMzAzMjMsMzAzMjQsMzAzMjUsMzAzMjYsMzAzMjcsMzAzMjksMzAzMzAsMzAzMzIsMzAzMzUsMzAzMzYsMzAzMzcsMzAzMzksMzAzNDEsMzAzNDUsMzAzNDYsMzAzNDgsMzAz''@;'; put 'put ''NDksMzAzNTEsMzAzNTIsMzAzNTQsMzAzNTYsMzAzNTcsMzAzNTksMzAzNjAsMzAzNjIsMzAzNjMsMzAzNjQsMzAzNjUsMzAzNjYsMzAzNjcsMzAzNjgsMzAzNjksMzAzNzAsMzAzNzEsMzAzNzMsMzAzNzQsMzAzNzUsMzAzNzYsMzAzNzcsMzAzNzgsMzAzNzksMzAzODAsMzAzODEsMzAzODMs''@;'; put 'put ''MzAzODQsMzAzODcsMzAzODksMzAzOTAsMzAzOTEsMzAzOTIsMzAzOTMsMzAzOTQsMzAzOTUsMzAzOTYsMzAzOTcsMzAzOTgsMzA0MDAsMzA0MDEsMzA0MDMsMjE4MzQsMzg0NjMsMjI0NjcsMjUzODQsMjE3MTAsMjE3NjksMjE2OTYsMzAzNTMsMzAyODQsMzQxMDgsMzA3MDIsMzM0MDYsMzA4''@;'; put 'put ''NjEsMjkyMzMsMzg1NTIsMzg3OTcsMjc2ODgsMjM0MzMsMjA0NzQsMjUzNTMsMjYyNjMsMjM3MzYsMzMwMTgsMjY2OTYsMzI5NDIsMjYxMTQsMzA0MTQsMjA5ODUsMjU5NDIsMjkxMDAsMzI3NTMsMzQ5NDgsMjA2NTgsMjI4ODUsMjUwMzQsMjg1OTUsMzM0NTMsMjU0MjAsMjUxNzAsMjE0ODUs''@;'; put 'put ''MjE1NDMsMzE0OTQsMjA4NDMsMzAxMTYsMjQwNTIsMjUzMDAsMzYyOTksMzg3NzQsMjUyMjYsMzI3OTMsMjIzNjUsMzg3MTIsMzI2MTAsMjkyNDAsMzAzMzMsMjY1NzUsMzAzMzQsMjU2NzAsMjAzMzYsMzYxMzMsMjUzMDgsMzEyNTUsMjYwMDEsMjk2NzcsMjU2NDQsMjUyMDMsMzMzMjQsMzkw''@;'; put 'put ''NDEsMjY0OTUsMjkyNTYsMjUxOTgsMjUyOTIsMjAyNzYsMjk5MjMsMjEzMjIsMjExNTAsMzI0NTgsMzcwMzAsMjQxMTAsMjY3NTgsMjcwMzYsMzMxNTIsMzI0NjUsMjY4MzQsMzA5MTcsMzQ0NDQsMzgyMjUsMjA2MjEsMzU4NzYsMzM1MDIsMzI5OTAsMjEyNTMsMzUwOTAsMjEwOTMsMzA0MDQs''@;'; put 'put ''MzA0MDcsMzA0MDksMzA0MTEsMzA0MTIsMzA0MTksMzA0MjEsMzA0MjUsMzA0MjYsMzA0MjgsMzA0MjksMzA0MzAsMzA0MzIsMzA0MzMsMzA0MzQsMzA0MzUsMzA0MzYsMzA0MzgsMzA0MzksMzA0NDAsMzA0NDEsMzA0NDIsMzA0NDMsMzA0NDQsMzA0NDUsMzA0NDgsMzA0NTEsMzA0NTMsMzA0''@;'; put 'put ''NTQsMzA0NTUsMzA0NTgsMzA0NTksMzA0NjEsMzA0NjMsMzA0NjQsMzA0NjYsMzA0NjcsMzA0NjksMzA0NzAsMzA0NzQsMzA0NzYsMzA0NzgsMzA0NzksMzA0ODAsMzA0ODEsMzA0ODIsMzA0ODMsMzA0ODQsMzA0ODUsMzA0ODYsMzA0ODcsMzA0ODgsMzA0OTEsMzA0OTIsMzA0OTMsMzA0OTQs''@;'; put 'put ''MzA0OTcsMzA0OTksMzA1MDAsMzA1MDEsMzA1MDMsMzA1MDYsMzA1MDcsMzA1MDgsMzA1MTAsMzA1MTIsMzA1MTMsMzA1MTQsMzA1MTUsMzA1MTYsMzA1MjEsMzA1MjMsMzA1MjUsMzA1MjYsMzA1MjcsMzA1MzAsMzA1MzIsMzA1MzMsMzA1MzQsMzA1MzYsMzA1MzcsMzA1MzgsMzA1MzksMzA1''@;'; put 'put ''NDAsMzA1NDEsMzA1NDIsMzA1NDMsMzA1NDYsMzA1NDcsMzA1NDgsMzA1NDksMzA1NTAsMzA1NTEsMzA1NTIsMzA1NTMsMzA1NTYsMzQxODAsMzg2NDksMjA0NDUsMjI1NjEsMzkyODEsMjM0NTMsMjUyNjUsMjUyNTMsMjYyOTIsMzU5NjEsNDAwNzcsMjkxOTAsMjY0NzksMzA4NjUsMjQ3NTQs''@;'; put 'put ''MjEzMjksMjEyNzEsMzY3NDQsMzI5NzIsMzYxMjUsMzgwNDksMjA0OTMsMjkzODQsMjI3OTEsMjQ4MTEsMjg5NTMsMzQ5ODcsMjI4NjgsMzM1MTksMjY0MTIsMzE1MjgsMjM4NDksMzI1MDMsMjk5OTcsMjc4OTMsMzY0NTQsMzY4NTYsMzY5MjQsNDA3NjMsMjc2MDQsMzcxNDUsMzE1MDgsMjQ0''@;'; put 'put ''NDQsMzA4ODcsMzQwMDYsMzQxMDksMjc2MDUsMjc2MDksMjc2MDYsMjQwNjUsMjQxOTksMzAyMDEsMzgzODEsMjU5NDksMjQzMzAsMjQ1MTcsMzY3NjcsMjI3MjEsMzMyMTgsMzY5OTEsMzg0OTEsMzg4MjksMzY3OTMsMzI1MzQsMzYxNDAsMjUxNTMsMjA0MTUsMjE0NjQsMjEzNDIsMzY3NzYs''@;'; put 'put ''MzY3NzcsMzY3NzksMzY5NDEsMjY2MzEsMjQ0MjYsMzMxNzYsMzQ5MjAsNDAxNTAsMjQ5NzEsMjEwMzUsMzAyNTAsMjQ0MjgsMjU5OTYsMjg2MjYsMjgzOTIsMjM0ODYsMjU2NzIsMjA4NTMsMjA5MTIsMjY1NjQsMTk5OTMsMzExNzcsMzkyOTIsMjg4NTEsMzA1NTcsMzA1NTgsMzA1NTksMzA1''@;'; put 'put ''NjAsMzA1NjQsMzA1NjcsMzA1NjksMzA1NzAsMzA1NzMsMzA1NzQsMzA1NzUsMzA1NzYsMzA1NzcsMzA1NzgsMzA1NzksMzA1ODAsMzA1ODEsMzA1ODIsMzA1ODMsMzA1ODQsMzA1ODYsMzA1ODcsMzA1ODgsMzA1OTMsMzA1OTQsMzA1OTUsMzA1OTgsMzA1OTksMzA2MDAsMzA2MDEsMzA2MDIs''@;'; put 'put ''MzA2MDMsMzA2MDcsMzA2MDgsMzA2MTEsMzA2MTIsMzA2MTMsMzA2MTQsMzA2MTUsMzA2MTYsMzA2MTcsMzA2MTgsMzA2MTksMzA2MjAsMzA2MjEsMzA2MjIsMzA2MjUsMzA2MjcsMzA2MjgsMzA2MzAsMzA2MzIsMzA2MzUsMzA2MzcsMzA2MzgsMzA2MzksMzA2NDEsMzA2NDIsMzA2NDQsMzA2''@;'; put 'put ''NDYsMzA2NDcsMzA2NDgsMzA2NDksMzA2NTAsMzA2NTIsMzA2NTQsMzA2NTYsMzA2NTcsMzA2NTgsMzA2NTksMzA2NjAsMzA2NjEsMzA2NjIsMzA2NjMsMzA2NjQsMzA2NjUsMzA2NjYsMzA2NjcsMzA2NjgsMzA2NzAsMzA2NzEsMzA2NzIsMzA2NzMsMzA2NzQsMzA2NzUsMzA2NzYsMzA2Nzcs''@;'; put 'put ''MzA2NzgsMzA2ODAsMzA2ODEsMzA2ODIsMzA2ODUsMzA2ODYsMzA2ODcsMzA2ODgsMzA2ODksMzA2OTIsMzAxNDksMjQxODIsMjk2MjcsMzM3NjAsMjU3NzMsMjUzMjAsMzgwNjksMjc4NzQsMjEzMzgsMjExODcsMjU2MTUsMzgwODIsMzE2MzYsMjAyNzEsMjQwOTEsMzMzMzQsMzMwNDYsMzMx''@;'; put 'put ''NjIsMjgxOTYsMjc4NTAsMzk1MzksMjU0MjksMjEzNDAsMjE3NTQsMzQ5MTcsMjI0OTYsMTk5ODEsMjQwNjcsMjc0OTMsMzE4MDcsMzcwOTYsMjQ1OTgsMjU4MzAsMjk0NjgsMzUwMDksMjY0NDgsMjUxNjUsMzYxMzAsMzA1NzIsMzYzOTMsMzczMTksMjQ0MjUsMzM3NTYsMzQwODEsMzkxODQs''@;'; put 'put ''MjE0NDIsMzQ0NTMsMjc1MzEsMjQ4MTMsMjQ4MDgsMjg3OTksMzM0ODUsMzMzMjksMjAxNzksMjc4MTUsMzQyNTUsMjU4MDUsMzE5NjEsMjcxMzMsMjYzNjEsMzM2MDksMjEzOTcsMzE1NzQsMjAzOTEsMjA4NzYsMjc5NzksMjM2MTgsMzY0NjEsMjU1NTQsMjE0NDksMzM1ODAsMzM1OTAsMjY1''@;'; put 'put ''OTcsMzA5MDAsMjU2NjEsMjM1MTksMjM3MDAsMjQwNDYsMzU4MTUsMjUyODYsMjY2MTIsMzU5NjIsMjU2MDAsMjU1MzAsMzQ2MzMsMzkzMDcsMzU4NjMsMzI1NDQsMzgxMzAsMjAxMzUsMzg0MTYsMzkwNzYsMjYxMjQsMjk0NjIsMzA2OTQsMzA2OTYsMzA2OTgsMzA3MDMsMzA3MDQsMzA3MDUs''@;'; put 'put ''MzA3MDYsMzA3MDgsMzA3MDksMzA3MTEsMzA3MTMsMzA3MTQsMzA3MTUsMzA3MTYsMzA3MjMsMzA3MjQsMzA3MjUsMzA3MjYsMzA3MjcsMzA3MjgsMzA3MzAsMzA3MzEsMzA3MzQsMzA3MzUsMzA3MzYsMzA3MzksMzA3NDEsMzA3NDUsMzA3NDcsMzA3NTAsMzA3NTIsMzA3NTMsMzA3NTQsMzA3''@;'; put 'put ''NTYsMzA3NjAsMzA3NjIsMzA3NjMsMzA3NjYsMzA3NjcsMzA3NjksMzA3NzAsMzA3NzEsMzA3NzMsMzA3NzQsMzA3ODEsMzA3ODMsMzA3ODUsMzA3ODYsMzA3ODcsMzA3ODgsMzA3OTAsMzA3OTIsMzA3OTMsMzA3OTQsMzA3OTUsMzA3OTcsMzA3OTksMzA4MDEsMzA4MDMsMzA4MDQsMzA4MDgs''@;'; put 'put ''MzA4MDksMzA4MTAsMzA4MTEsMzA4MTIsMzA4MTQsMzA4MTUsMzA4MTYsMzA4MTcsMzA4MTgsMzA4MTksMzA4MjAsMzA4MjEsMzA4MjIsMzA4MjMsMzA4MjQsMzA4MjUsMzA4MzEsMzA4MzIsMzA4MzMsMzA4MzQsMzA4MzUsMzA4MzYsMzA4MzcsMzA4MzgsMzA4NDAsMzA4NDEsMzA4NDIsMzA4''@;'; put 'put ''NDMsMzA4NDUsMzA4NDYsMzA4NDcsMzA4NDgsMzA4NDksMzA4NTAsMzA4NTEsMjIzMzAsMjM1ODEsMjQxMjAsMzgyNzEsMjA2MDcsMzI5MjgsMjEzNzgsMjU5NTAsMzAwMjEsMjE4MDksMjA1MTMsMzYyMjksMjUyMjAsMzgwNDYsMjYzOTcsMjIwNjYsMjg1MjYsMjQwMzQsMjE1NTcsMjg4MTgs''@;'; put 'put ''MzY3MTAsMjUxOTksMjU3NjQsMjU1MDcsMjQ0NDMsMjg1NTIsMzcxMDgsMzMyNTEsMzY3ODQsMjM1NzYsMjYyMTYsMjQ1NjEsMjc3ODUsMzg0NzIsMzYyMjUsMzQ5MjQsMjU3NDUsMzEyMTYsMjI0NzgsMjcyMjUsMjUxMDQsMjE1NzYsMjAwNTYsMzEyNDMsMjQ4MDksMjg1NDgsMzU4MDIsMjUy''@;'; put 'put ''MTUsMzY4OTQsMzk1NjMsMzEyMDQsMjE1MDcsMzAxOTYsMjUzNDUsMjEyNzMsMjc3NDQsMzY4MzEsMjQzNDcsMzk1MzYsMzI4MjcsNDA4MzEsMjAzNjAsMjM2MTAsMzYxOTYsMzI3MDksMjYwMjEsMjg4NjEsMjA4MDUsMjA5MTQsMzQ0MTEsMjM4MTUsMjM0NTYsMjUyNzcsMzcyMjgsMzAwNjgs''@;'; put 'put ''MzYzNjQsMzEyNjQsMjQ4MzMsMzE2MDksMjAxNjcsMzI1MDQsMzA1OTcsMTk5ODUsMzMyNjEsMjEwMjEsMjA5ODYsMjcyNDksMjE0MTYsMzY0ODcsMzgxNDgsMzg2MDcsMjgzNTMsMzg1MDAsMjY5NzAsMzA4NTIsMzA4NTMsMzA4NTQsMzA4NTYsMzA4NTgsMzA4NTksMzA4NjMsMzA4NjQsMzA4''@;'; put 'put ''NjYsMzA4NjgsMzA4NjksMzA4NzAsMzA4NzMsMzA4NzcsMzA4NzgsMzA4ODAsMzA4ODIsMzA4ODQsMzA4ODYsMzA4ODgsMzA4ODksMzA4OTAsMzA4OTEsMzA4OTIsMzA4OTMsMzA4OTQsMzA4OTUsMzA5MDEsMzA5MDIsMzA5MDMsMzA5MDQsMzA5MDYsMzA5MDcsMzA5MDgsMzA5MDksMzA5MTEs''@;'; put 'put ''MzA5MTIsMzA5MTQsMzA5MTUsMzA5MTYsMzA5MTgsMzA5MTksMzA5MjAsMzA5MjQsMzA5MjUsMzA5MjYsMzA5MjcsMzA5MjksMzA5MzAsMzA5MzEsMzA5MzQsMzA5MzUsMzA5MzYsMzA5MzgsMzA5MzksMzA5NDAsMzA5NDEsMzA5NDIsMzA5NDMsMzA5NDQsMzA5NDUsMzA5NDYsMzA5NDcsMzA5''@;'; put 'put ''NDgsMzA5NDksMzA5NTAsMzA5NTEsMzA5NTMsMzA5NTQsMzA5NTUsMzA5NTcsMzA5NTgsMzA5NTksMzA5NjAsMzA5NjEsMzA5NjMsMzA5NjUsMzA5NjYsMzA5NjgsMzA5NjksMzA5NzEsMzA5NzIsMzA5NzMsMzA5NzQsMzA5NzUsMzA5NzYsMzA5NzgsMzA5NzksMzA5ODAsMzA5ODIsMzA5ODMs''@;'; put 'put ''MzA5ODQsMzA5ODUsMzA5ODYsMzA5ODcsMzA5ODgsMzA3ODQsMjA2NDgsMzA2NzksMjU2MTYsMzUzMDIsMjI3ODgsMjU1NzEsMjQwMjksMzEzNTksMjY5NDEsMjAyNTYsMzMzMzcsMjE5MTIsMjAwMTgsMzAxMjYsMzEzODMsMjQxNjIsMjQyMDIsMzgzODMsMjEwMTksMjE1NjEsMjg4MTAsMjU0''@;'; put 'put ''NjIsMzgxODAsMjI0MDIsMjYxNDksMjY5NDMsMzcyNTUsMjE3NjcsMjgxNDcsMzI0MzEsMzQ4NTAsMjUxMzksMzI0OTYsMzAxMzMsMzM1NzYsMzA5MTMsMzg2MDQsMzY3NjYsMjQ5MDQsMjk5NDMsMzU3ODksMjc0OTIsMjEwNTAsMzYxNzYsMjc0MjUsMzI4NzQsMzM5MDUsMjIyNTcsMjEyNTQs''@;'; put 'put ''MjAxNzQsMTk5OTUsMjA5NDUsMzE4OTUsMzcyNTksMzE3NTEsMjA0MTksMzY0NzksMzE3MTMsMzEzODgsMjU3MDMsMjM4MjgsMjA2NTIsMzMwMzAsMzAyMDksMzE5MjksMjgxNDAsMzI3MzYsMjY0NDksMjMzODQsMjM1NDQsMzA5MjMsMjU3NzQsMjU2MTksMjU1MTQsMjUzODcsMzgxNjksMjU2''@;'; put 'put ''NDUsMzY3OTgsMzE1NzIsMzAyNDksMjUxNzEsMjI4MjMsMjE1NzQsMjc1MTMsMjA2NDMsMjUxNDAsMjQxMDIsMjc1MjYsMjAxOTUsMzYxNTEsMzQ5NTUsMjQ0NTMsMzY5MTAsMzA5ODksMzA5OTAsMzA5OTEsMzA5OTIsMzA5OTMsMzA5OTQsMzA5OTYsMzA5OTcsMzA5OTgsMzA5OTksMzFlMywz''@;'; put 'put ''MTAwMSwzMTAwMiwzMTAwMywzMTAwNCwzMTAwNSwzMTAwNywzMTAwOCwzMTAwOSwzMTAxMCwzMTAxMSwzMTAxMywzMTAxNCwzMTAxNSwzMTAxNiwzMTAxNywzMTAxOCwzMTAxOSwzMTAyMCwzMTAyMSwzMTAyMiwzMTAyMywzMTAyNCwzMTAyNSwzMTAyNiwzMTAyNywzMTAyOSwzMTAzMCwzMTAz''@;'; put 'put ''MSwzMTAzMiwzMTAzMywzMTAzNywzMTAzOSwzMTA0MiwzMTA0MywzMTA0NCwzMTA0NSwzMTA0NywzMTA1MCwzMTA1MSwzMTA1MiwzMTA1MywzMTA1NCwzMTA1NSwzMTA1NiwzMTA1NywzMTA1OCwzMTA2MCwzMTA2MSwzMTA2NCwzMTA2NSwzMTA3MywzMTA3NSwzMTA3NiwzMTA3OCwzMTA4MSwz''@;'; put 'put ''MTA4MiwzMTA4MywzMTA4NCwzMTA4NiwzMTA4OCwzMTA4OSwzMTA5MCwzMTA5MSwzMTA5MiwzMTA5MywzMTA5NCwzMTA5NywzMTA5OSwzMTEwMCwzMTEwMSwzMTEwMiwzMTEwMywzMTEwNiwzMTEwNywzMTExMCwzMTExMSwzMTExMiwzMTExMywzMTExNSwzMTExNiwzMTExNywzMTExOCwzMTEy''@;'; put 'put ''MCwzMTEyMSwzMTEyMiwyNDYwOCwzMjgyOSwyNTI4NSwyMDAyNSwyMTMzMywzNzExMiwyNTUyOCwzMjk2NiwyNjA4NiwyNzY5NCwyMDI5NCwyNDgxNCwyODEyOSwzNTgwNiwyNDM3NywzNDUwNywyNDQwMywyNTM3NywyMDgyNiwzMzYzMywyNjcyMywyMDk5MiwyNTQ0MywzNjQyNCwyMDQ5OCwy''@;'; put 'put ''MzcwNywzMTA5NSwyMzU0OCwyMTA0MCwzMTI5MSwyNDc2NCwzNjk0NywzMDQyMywyNDUwMywyNDQ3MSwzMDM0MCwzNjQ2MCwyODc4MywzMDMzMSwzMTU2MSwzMDYzNCwyMDk3OSwzNzAxMSwyMjU2NCwyMDMwMiwyODQwNCwzNjg0MiwyNTkzMiwzMTUxNSwyOTM4MCwyODA2OCwzMjczNSwyMzI2''@;'; put 'put ''NSwyNTI2OSwyNDIxMywyMjMyMCwzMzkyMiwzMTUzMiwyNDA5MywyNDM1MSwzNjg4MiwzMjUzMiwzOTA3MiwyNTQ3NCwyODM1OSwzMDg3MiwyODg1NywyMDg1NiwzODc0NywyMjQ0MywzMDAwNSwyMDI5MSwzMDAwOCwyNDIxNSwyNDgwNiwyMjg4MCwyODA5NiwyNzU4MywzMDg1NywyMTUwMCwz''@;'; put 'put ''ODYxMywyMDkzOSwyMDk5MywyNTQ4MSwyMTUxNCwzODAzNSwzNTg0MywzNjMwMCwyOTI0MSwzMDg3OSwzNDY3OCwzNjg0NSwzNTg1MywyMTQ3MiwzMTEyMywzMTEyNCwzMTEyNSwzMTEyNiwzMTEyNywzMTEyOCwzMTEyOSwzMTEzMSwzMTEzMiwzMTEzMywzMTEzNCwzMTEzNSwzMTEzNiwzMTEz''@;'; put 'put ''NywzMTEzOCwzMTEzOSwzMTE0MCwzMTE0MSwzMTE0MiwzMTE0NCwzMTE0NSwzMTE0NiwzMTE0NywzMTE0OCwzMTE0OSwzMTE1MCwzMTE1MSwzMTE1MiwzMTE1MywzMTE1NCwzMTE1NiwzMTE1NywzMTE1OCwzMTE1OSwzMTE2MCwzMTE2NCwzMTE2NywzMTE3MCwzMTE3MiwzMTE3MywzMTE3NSwz''@;'; put 'put ''MTE3NiwzMTE3OCwzMTE4MCwzMTE4MiwzMTE4MywzMTE4NCwzMTE4NywzMTE4OCwzMTE5MCwzMTE5MSwzMTE5MywzMTE5NCwzMTE5NSwzMTE5NiwzMTE5NywzMTE5OCwzMTIwMCwzMTIwMSwzMTIwMiwzMTIwNSwzMTIwOCwzMTIxMCwzMTIxMiwzMTIxNCwzMTIxNywzMTIxOCwzMTIxOSwzMTIy''@;'; put 'put ''MCwzMTIyMSwzMTIyMiwzMTIyMywzMTIyNSwzMTIyNiwzMTIyOCwzMTIzMCwzMTIzMSwzMTIzMywzMTIzNiwzMTIzNywzMTIzOSwzMTI0MCwzMTI0MSwzMTI0MiwzMTI0NCwzMTI0NywzMTI0OCwzMTI0OSwzMTI1MCwzMTI1MSwzMTI1MywzMTI1NCwzMTI1NiwzMTI1NywzMTI1OSwzMTI2MCwx''@;'; put 'put ''OTk2OSwzMDQ0NywyMTQ4NiwzODAyNSwzOTAzMCw0MDcxOCwzODE4OSwyMzQ1MCwzNTc0NiwyMDAwMiwxOTk5NiwyMDkwOCwzMzg5MSwyNTAyNiwyMTE2MCwyNjYzNSwyMDM3NSwyNDY4MywyMDkyMywyNzkzNCwyMDgyOCwyNTIzOCwyNjAwNywzODQ5NywzNTkxMCwzNjg4NywzMDE2OCwzNzEx''@;'; put 'put ''NywzMDU2MywyNzYwMiwyOTMyMiwyOTQyMCwzNTgzNSwyMjU4MSwzMDU4NSwzNjE3MiwyNjQ2MCwzODIwOCwzMjkyMiwyNDIzMCwyODE5MywyMjkzMCwzMTQ3MSwzMDcwMSwzODIwMywyNzU3MywyNjAyOSwzMjUyNiwyMjUzNCwyMDgxNywzODQzMSwyMzU0NSwyMjY5NywyMTU0NCwzNjQ2Niwy''@;'; put 'put ''NTk1OCwzOTAzOSwyMjI0NCwzODA0NSwzMDQ2MiwzNjkyOSwyNTQ3OSwyMTcwMiwyMjgxMCwyMjg0MiwyMjQyNywzNjUzMCwyNjQyMSwzNjM0NiwzMzMzMywyMTA1NywyNDgxNiwyMjU0OSwzNDU1OCwyMzc4NCw0MDUxNywyMDQyMCwzOTA2OSwzNTc2OSwyMzA3NywyNDY5NCwyMTM4MCwyNTIx''@;'; put 'put ''MiwzNjk0MywzNzEyMiwzOTI5NSwyNDY4MSwzMjc4MCwyMDc5OSwzMjgxOSwyMzU3MiwzOTI4NSwyNzk1MywyMDEwOCwzMTI2MSwzMTI2MywzMTI2NSwzMTI2NiwzMTI2OCwzMTI2OSwzMTI3MCwzMTI3MSwzMTI3MiwzMTI3MywzMTI3NCwzMTI3NSwzMTI3NiwzMTI3NywzMTI3OCwzMTI3OSwz''@;'; put 'put ''MTI4MCwzMTI4MSwzMTI4MiwzMTI4NCwzMTI4NSwzMTI4NiwzMTI4OCwzMTI5MCwzMTI5NCwzMTI5NiwzMTI5NywzMTI5OCwzMTI5OSwzMTMwMCwzMTMwMSwzMTMwMywzMTMwNCwzMTMwNSwzMTMwNiwzMTMwNywzMTMwOCwzMTMwOSwzMTMxMCwzMTMxMSwzMTMxMiwzMTMxNCwzMTMxNSwzMTMx''@;'; put 'put ''NiwzMTMxNywzMTMxOCwzMTMyMCwzMTMyMSwzMTMyMiwzMTMyMywzMTMyNCwzMTMyNSwzMTMyNiwzMTMyNywzMTMyOCwzMTMyOSwzMTMzMCwzMTMzMSwzMTMzMiwzMTMzMywzMTMzNCwzMTMzNSwzMTMzNiwzMTMzNywzMTMzOCwzMTMzOSwzMTM0MCwzMTM0MSwzMTM0MiwzMTM0MywzMTM0NSwz''@;'; put 'put ''MTM0NiwzMTM0NywzMTM0OSwzMTM1NSwzMTM1NiwzMTM1NywzMTM1OCwzMTM2MiwzMTM2NSwzMTM2NywzMTM2OSwzMTM3MCwzMTM3MSwzMTM3MiwzMTM3NCwzMTM3NSwzMTM3NiwzMTM3OSwzMTM4MCwzMTM4NSwzMTM4NiwzMTM4NywzMTM5MCwzMTM5MywzMTM5NCwzNjE0NCwyMTQ1NywzMjYw''@;'; put 'put ''MiwzMTU2NywyMDI0MCwyMDA0NywzODQwMCwyNzg2MSwyOTY0OCwzNDI4MSwyNDA3MCwzMDA1OCwzMjc2MywyNzE0NiwzMDcxOCwzODAzNCwzMjMyMSwyMDk2MSwyODkwMiwyMTQ1MywzNjgyMCwzMzUzOSwzNjEzNywyOTM1OSwzOTI3NywyNzg2NywyMjM0NiwzMzQ1OSwyNjA0MSwzMjkzOCwy''@;'; put 'put ''NTE1MSwzODQ1MCwyMjk1MiwyMDIyMywzNTc3NSwzMjQ0MiwyNTkxOCwzMzc3OCwzODc1MCwyMTg1NywzOTEzNCwzMjkzMywyMTI5MCwzNTgzNywyMTUzNiwzMjk1NCwyNDIyMywyNzgzMiwzNjE1MywzMzQ1MiwzNzIxMCwyMTU0NSwyNzY3NSwyMDk5OCwzMjQzOSwyMjM2NywyODk1NCwyNzc3''@;'; put 'put ''NCwzMTg4MSwyMjg1OSwyMDIyMSwyNDU3NSwyNDg2OCwzMTkxNCwyMDAxNiwyMzU1MywyNjUzOSwzNDU2MiwyMzc5MiwzODE1NSwzOTExOCwzMDEyNywyODkyNSwzNjg5OCwyMDkxMSwzMjU0MSwzNTc3MywyMjg1NywyMDk2NCwyMDMxNSwyMTU0MiwyMjgyNywyNTk3NSwzMjkzMiwyMzQxMywy''@;'; put 'put ''NTIwNiwyNTI4MiwzNjc1MiwyNDEzMywyNzY3OSwzMTUyNiwyMDIzOSwyMDQ0MCwyNjM4MSwzMTM5NSwzMTM5NiwzMTM5OSwzMTQwMSwzMTQwMiwzMTQwMywzMTQwNiwzMTQwNywzMTQwOCwzMTQwOSwzMTQxMCwzMTQxMiwzMTQxMywzMTQxNCwzMTQxNSwzMTQxNiwzMTQxNywzMTQxOCwzMTQx''@;'; put 'put ''OSwzMTQyMCwzMTQyMSwzMTQyMiwzMTQyNCwzMTQyNSwzMTQyNiwzMTQyNywzMTQyOCwzMTQyOSwzMTQzMCwzMTQzMSwzMTQzMiwzMTQzMywzMTQzNCwzMTQzNiwzMTQzNywzMTQzOCwzMTQzOSwzMTQ0MCwzMTQ0MSwzMTQ0MiwzMTQ0MywzMTQ0NCwzMTQ0NSwzMTQ0NywzMTQ0OCwzMTQ1MCwz''@;'; put 'put ''MTQ1MSwzMTQ1MiwzMTQ1MywzMTQ1NywzMTQ1OCwzMTQ2MCwzMTQ2MywzMTQ2NCwzMTQ2NSwzMTQ2NiwzMTQ2NywzMTQ2OCwzMTQ3MCwzMTQ3MiwzMTQ3MywzMTQ3NCwzMTQ3NSwzMTQ3NiwzMTQ3NywzMTQ3OCwzMTQ3OSwzMTQ4MCwzMTQ4MywzMTQ4NCwzMTQ4NiwzMTQ4OCwzMTQ4OSwzMTQ5''@;'; put 'put ''MCwzMTQ5MywzMTQ5NSwzMTQ5NywzMTUwMCwzMTUwMSwzMTUwMiwzMTUwNCwzMTUwNiwzMTUwNywzMTUxMCwzMTUxMSwzMTUxMiwzMTUxNCwzMTUxNiwzMTUxNywzMTUxOSwzMTUyMSwzMTUyMiwzMTUyMywzMTUyNywzMTUyOSwzMTUzMywyODAxNCwyODA3NCwzMTExOSwzNDk5MywyNDM0Mywy''@;'; put 'put ''OTk5NSwyNTI0MiwzNjc0MSwyMDQ2MywzNzM0MCwyNjAyMywzMzA3MSwzMzEwNSwyNDIyMCwzMzEwNCwzNjIxMiwyMTEwMywzNTIwNiwzNjE3MSwyMjc5NywyMDYxMywyMDE4NCwzODQyOCwyOTIzOCwzMzE0NSwzNjEyNywyMzUwMCwzNTc0NywzODQ2OCwyMjkxOSwzMjUzOCwyMTY0OCwyMjEz''@;'; put 'put ''NCwyMjAzMCwzNTgxMywyNTkxMywyNzAxMCwzODA0MSwzMDQyMiwyODI5NywyNDE3OCwyOTk3NiwyNjQzOCwyNjU3NywzMTQ4NywzMjkyNSwzNjIxNCwyNDg2MywzMTE3NCwyNTk1NCwzNjE5NSwyMDg3MiwyMTAxOCwzODA1MCwzMjU2OCwzMjkyMywzMjQzNCwyMzcwMywyODIwNywyNjQ2NCwz''@;'; put 'put ''MTcwNSwzMDM0NywzOTY0MCwzMzE2NywzMjY2MCwzMTk1NywyNTYzMCwzODIyNCwzMTI5NSwyMTU3OCwyMTczMywyNzQ2OCwyNTYwMSwyNTA5Niw0MDUwOSwzMzAxMSwzMDEwNSwyMTEwNiwzODc2MSwzMzg4MywyNjY4NCwzNDUzMiwzODQwMSwzODU0OCwzODEyNCwyMDAxMCwyMTUwOCwzMjQ3''@;'; put 'put ''MywyNjY4MSwzNjMxOSwzMjc4OSwyNjM1NiwyNDIxOCwzMjY5NywzMTUzNSwzMTUzNiwzMTUzOCwzMTU0MCwzMTU0MSwzMTU0MiwzMTU0MywzMTU0NSwzMTU0NywzMTU0OSwzMTU1MSwzMTU1MiwzMTU1MywzMTU1NCwzMTU1NSwzMTU1NiwzMTU1OCwzMTU2MCwzMTU2MiwzMTU2NSwzMTU2Niwz''@;'; put 'put ''MTU3MSwzMTU3MywzMTU3NSwzMTU3NywzMTU4MCwzMTU4MiwzMTU4MywzMTU4NSwzMTU4NywzMTU4OCwzMTU4OSwzMTU5MCwzMTU5MSwzMTU5MiwzMTU5MywzMTU5NCwzMTU5NSwzMTU5NiwzMTU5NywzMTU5OSwzMTYwMCwzMTYwMywzMTYwNCwzMTYwNiwzMTYwOCwzMTYxMCwzMTYxMiwzMTYx''@;'; put 'put ''MywzMTYxNSwzMTYxNywzMTYxOCwzMTYxOSwzMTYyMCwzMTYyMiwzMTYyMywzMTYyNCwzMTYyNSwzMTYyNiwzMTYyNywzMTYyOCwzMTYzMCwzMTYzMSwzMTYzMywzMTYzNCwzMTYzNSwzMTYzOCwzMTY0MCwzMTY0MSwzMTY0MiwzMTY0MywzMTY0NiwzMTY0NywzMTY0OCwzMTY1MSwzMTY1Miwz''@;'; put 'put ''MTY1MywzMTY2MiwzMTY2MywzMTY2NCwzMTY2NiwzMTY2NywzMTY2OSwzMTY3MCwzMTY3MSwzMTY3MywzMTY3NCwzMTY3NSwzMTY3NiwzMTY3NywzMTY3OCwzMTY3OSwzMTY4MCwzMTY4MiwzMTY4MywzMTY4NCwyMjQ2NiwzMjgzMSwyNjc3NSwyNDAzNywyNTkxNSwyMTE1MSwyNDY4NSw0MDg1''@;'; put 'put ''OCwyMDM3OSwzNjUyNCwyMDg0NCwyMzQ2NywyNDMzOSwyNDA0MSwyNzc0MiwyNTMyOSwzNjEyOSwyMDg0OSwzODA1NywyMTI0NiwyNzgwNywzMzUwMywyOTM5OSwyMjQzNCwyNjUwMCwzNjE0MSwyMjgxNSwzNjc2NCwzMzczNSwyMTY1MywzMTYyOSwyMDI3MiwyNzgzNywyMzM5NiwyMjk5Myw0''@;'; put 'put ''MDcyMywyMTQ3NiwzNDUwNiwzOTU5MiwzNTg5NSwzMjkyOSwyNTkyNSwzOTAzOCwyMjI2NiwzODU5OSwyMTAzOCwyOTkxNiwyMTA3MiwyMzUyMSwyNTM0NiwzNTA3NCwyMDA1NCwyNTI5NiwyNDYxOCwyNjg3NCwyMDg1MSwyMzQ0OCwyMDg5NiwzNTI2NiwzMTY0OSwzOTMwMiwzMjU5MiwyNDgx''@;'; put 'put ''NSwyODc0OCwzNjE0MywyMDgwOSwyNDE5MSwzNjg5MSwyOTgwOCwzNTI2OCwyMjMxNywzMDc4OSwyNDQwMiw0MDg2MywzODM5NCwzNjcxMiwzOTc0MCwzNTgwOSwzMDMyOCwyNjY5MCwyNjU4OCwzNjMzMCwzNjE0OSwyMTA1MywzNjc0NiwyODM3OCwyNjgyOSwzODE0OSwzNzEwMSwyMjI2OSwy''@;'; put 'put ''NjUyNCwzNTA2NSwzNjgwNywyMTcwNCwzMTY4NSwzMTY4OCwzMTY4OSwzMTY5MCwzMTY5MSwzMTY5MywzMTY5NCwzMTY5NSwzMTY5NiwzMTY5OCwzMTcwMCwzMTcwMSwzMTcwMiwzMTcwMywzMTcwNCwzMTcwNywzMTcwOCwzMTcxMCwzMTcxMSwzMTcxMiwzMTcxNCwzMTcxNSwzMTcxNiwzMTcx''@;'; put 'put ''OSwzMTcyMCwzMTcyMSwzMTcyMywzMTcyNCwzMTcyNSwzMTcyNywzMTcyOCwzMTczMCwzMTczMSwzMTczMiwzMTczMywzMTczNCwzMTczNiwzMTczNywzMTczOCwzMTczOSwzMTc0MSwzMTc0MywzMTc0NCwzMTc0NSwzMTc0NiwzMTc0NywzMTc0OCwzMTc0OSwzMTc1MCwzMTc1MiwzMTc1Mywz''@;'; put 'put ''MTc1NCwzMTc1NywzMTc1OCwzMTc2MCwzMTc2MSwzMTc2MiwzMTc2MywzMTc2NCwzMTc2NSwzMTc2NywzMTc2OCwzMTc2OSwzMTc3MCwzMTc3MSwzMTc3MiwzMTc3MywzMTc3NCwzMTc3NiwzMTc3NywzMTc3OCwzMTc3OSwzMTc4MCwzMTc4MSwzMTc4NCwzMTc4NSwzMTc4NywzMTc4OCwzMTc4''@;'; put 'put ''OSwzMTc5MCwzMTc5MSwzMTc5MiwzMTc5MywzMTc5NCwzMTc5NSwzMTc5NiwzMTc5NywzMTc5OCwzMTc5OSwzMTgwMSwzMTgwMiwzMTgwMywzMTgwNCwzMTgwNSwzMTgwNiwzMTgxMCwzOTYwOCwyMzQwMSwyODAyMywyNzY4NiwyMDEzMywyMzQ3NSwzOTU1OSwzNzIxOSwyNWUzLDM3MDM5LDM4''@;'; put 'put ''ODg5LDIxNTQ3LDI4MDg1LDIzNTA2LDIwOTg5LDIxODk4LDMyNTk3LDMyNzUyLDI1Nzg4LDI1NDIxLDI2MDk3LDI1MDIyLDI0NzE3LDI4OTM4LDI3NzM1LDI3NzIxLDIyODMxLDI2NDc3LDMzMzIyLDIyNzQxLDIyMTU4LDM1OTQ2LDI3NjI3LDM3MDg1LDIyOTA5LDMyNzkxLDIxNDk1LDI4MDA5''@;'; put 'put ''LDIxNjIxLDIxOTE3LDMzNjU1LDMzNzQzLDI2NjgwLDMxMTY2LDIxNjQ0LDIwMzA5LDIxNTEyLDMwNDE4LDM1OTc3LDM4NDAyLDI3ODI3LDI4MDg4LDM2MjAzLDM1MDg4LDQwNTQ4LDM2MTU0LDIyMDc5LDQwNjU3LDMwMTY1LDI0NDU2LDI5NDA4LDI0NjgwLDIxNzU2LDIwMTM2LDI3MTc4LDM0''@;'; put 'put ''OTEzLDI0NjU4LDM2NzIwLDIxNzAwLDI4ODg4LDM0NDI1LDQwNTExLDI3OTQ2LDIzNDM5LDI0MzQ0LDMyNDE4LDIxODk3LDIwMzk5LDI5NDkyLDIxNTY0LDIxNDAyLDIwNTA1LDIxNTE4LDIxNjI4LDIwMDQ2LDI0NTczLDI5Nzg2LDIyNzc0LDMzODk5LDMyOTkzLDM0Njc2LDI5MzkyLDMxOTQ2''@;'; put 'put ''LDI4MjQ2LDMxODExLDMxODEyLDMxODEzLDMxODE0LDMxODE1LDMxODE2LDMxODE3LDMxODE4LDMxODE5LDMxODIwLDMxODIyLDMxODIzLDMxODI0LDMxODI1LDMxODI2LDMxODI3LDMxODI4LDMxODI5LDMxODMwLDMxODMxLDMxODMyLDMxODMzLDMxODM0LDMxODM1LDMxODM2LDMxODM3LDMx''@;'; put 'put ''ODM4LDMxODM5LDMxODQwLDMxODQxLDMxODQyLDMxODQzLDMxODQ0LDMxODQ1LDMxODQ2LDMxODQ3LDMxODQ4LDMxODQ5LDMxODUwLDMxODUxLDMxODUyLDMxODUzLDMxODU0LDMxODU1LDMxODU2LDMxODU3LDMxODU4LDMxODYxLDMxODYyLDMxODYzLDMxODY0LDMxODY1LDMxODY2LDMxODcw''@;'; put 'put ''LDMxODcxLDMxODcyLDMxODczLDMxODc0LDMxODc1LDMxODc2LDMxODc3LDMxODc4LDMxODc5LDMxODgwLDMxODgyLDMxODgzLDMxODg0LDMxODg1LDMxODg2LDMxODg3LDMxODg4LDMxODkxLDMxODkyLDMxODk0LDMxODk3LDMxODk4LDMxODk5LDMxOTA0LDMxOTA1LDMxOTA3LDMxOTEwLDMx''@;'; put 'put ''OTExLDMxOTEyLDMxOTEzLDMxOTE1LDMxOTE2LDMxOTE3LDMxOTE5LDMxOTIwLDMxOTI0LDMxOTI1LDMxOTI2LDMxOTI3LDMxOTI4LDMxOTMwLDMxOTMxLDI0MzU5LDM0MzgyLDIxODA0LDI1MjUyLDIwMTE0LDI3ODE4LDI1MTQzLDMzNDU3LDIxNzE5LDIxMzI2LDI5NTAyLDI4MzY5LDMwMDEx''@;'; put 'put ''LDIxMDEwLDIxMjcwLDM1ODA1LDI3MDg4LDI0NDU4LDI0NTc2LDI4MTQyLDIyMzUxLDI3NDI2LDI5NjE1LDI2NzA3LDM2ODI0LDMyNTMxLDI1NDQyLDI0NzM5LDIxNzk2LDMwMTg2LDM1OTM4LDI4OTQ5LDI4MDY3LDIzNDYyLDI0MTg3LDMzNjE4LDI0OTA4LDQwNjQ0LDMwOTcwLDM0NjQ3LDMx''@;'; put 'put ''NzgzLDMwMzQzLDIwOTc2LDI0ODIyLDI5MDA0LDI2MTc5LDI0MTQwLDI0NjUzLDM1ODU0LDI4Nzg0LDI1MzgxLDM2NzQ1LDI0NTA5LDI0Njc0LDM0NTE2LDIyMjM4LDI3NTg1LDI0NzI0LDI0OTM1LDIxMzIxLDI0ODAwLDI2MjE0LDM2MTU5LDMxMjI5LDIwMjUwLDI4OTA1LDI3NzE5LDM1NzYz''@;'; put 'put ''LDM1ODI2LDMyNDcyLDMzNjM2LDI2MTI3LDIzMTMwLDM5NzQ2LDI3OTg1LDI4MTUxLDM1OTA1LDI3OTYzLDIwMjQ5LDI4Nzc5LDMzNzE5LDI1MTEwLDI0Nzg1LDM4NjY5LDM2MTM1LDMxMDk2LDIwOTg3LDIyMzM0LDIyNTIyLDI2NDI2LDMwMDcyLDMxMjkzLDMxMjE1LDMxNjM3LDMxOTM1LDMx''@;'; put 'put ''OTM2LDMxOTM4LDMxOTM5LDMxOTQwLDMxOTQyLDMxOTQ1LDMxOTQ3LDMxOTUwLDMxOTUxLDMxOTUyLDMxOTUzLDMxOTU0LDMxOTU1LDMxOTU2LDMxOTYwLDMxOTYyLDMxOTYzLDMxOTY1LDMxOTY2LDMxOTY5LDMxOTcwLDMxOTcxLDMxOTcyLDMxOTczLDMxOTc0LDMxOTc1LDMxOTc3LDMxOTc4''@;'; put 'put ''LDMxOTc5LDMxOTgwLDMxOTgxLDMxOTgyLDMxOTg0LDMxOTg1LDMxOTg2LDMxOTg3LDMxOTg4LDMxOTg5LDMxOTkwLDMxOTkxLDMxOTkzLDMxOTk0LDMxOTk2LDMxOTk3LDMxOTk4LDMxOTk5LDMyZTMsMzIwMDEsMzIwMDIsMzIwMDMsMzIwMDQsMzIwMDUsMzIwMDYsMzIwMDcsMzIwMDgsMzIw''@;'; put 'put ''MDksMzIwMTEsMzIwMTIsMzIwMTMsMzIwMTQsMzIwMTUsMzIwMTYsMzIwMTcsMzIwMTgsMzIwMTksMzIwMjAsMzIwMjEsMzIwMjIsMzIwMjMsMzIwMjQsMzIwMjUsMzIwMjYsMzIwMjcsMzIwMjgsMzIwMjksMzIwMzAsMzIwMzEsMzIwMzMsMzIwMzUsMzIwMzYsMzIwMzcsMzIwMzgsMzIwNDAs''@;'; put 'put ''MzIwNDEsMzIwNDIsMzIwNDQsMzIwNDUsMzIwNDYsMzIwNDgsMzIwNDksMzIwNTAsMzIwNTEsMzIwNTIsMzIwNTMsMzIwNTQsMzI5MDgsMzkyNjksMzY4NTcsMjg2MDgsMzU3NDksNDA0ODEsMjMwMjAsMzI0ODksMzI1MjEsMjE1MTMsMjY0OTcsMjY4NDAsMzY3NTMsMzE4MjEsMzg1OTgsMjE0''@;'; put 'put ''NTAsMjQ2MTMsMzAxNDIsMjc3NjIsMjEzNjMsMjMyNDEsMzI0MjMsMjUzODAsMjA5NjAsMzMwMzQsMjQwNDksMzQwMTUsMjUyMTYsMjA4NjQsMjMzOTUsMjAyMzgsMzEwODUsMjEwNTgsMjQ3NjAsMjc5ODIsMjM0OTIsMjM0OTAsMzU3NDUsMzU3NjAsMjYwODIsMjQ1MjQsMzg0NjksMjI5MzEs''@;'; put 'put ''MzI0ODcsMzI0MjYsMjIwMjUsMjY1NTEsMjI4NDEsMjAzMzksMjM0NzgsMjExNTIsMzM2MjYsMzkwNTAsMzYxNTgsMzAwMDIsMzgwNzgsMjA1NTEsMzEyOTIsMjAyMTUsMjY1NTAsMzk1NTAsMjMyMzMsMjc1MTYsMzA0MTcsMjIzNjIsMjM1NzQsMzE1NDYsMzgzODgsMjkwMDYsMjA4NjAsMzI5''@;'; put 'put ''MzcsMzMzOTIsMjI5MDQsMzI1MTYsMzM1NzUsMjY4MTYsMjY2MDQsMzA4OTcsMzA4MzksMjUzMTUsMjU0NDEsMzE2MTYsMjA0NjEsMjEwOTgsMjA5NDMsMzM2MTYsMjcwOTksMzc0OTIsMzYzNDEsMzYxNDUsMzUyNjUsMzgxOTAsMzE2NjEsMjAyMTQsMzIwNTUsMzIwNTYsMzIwNTcsMzIwNTgs''@;'; put 'put ''MzIwNTksMzIwNjAsMzIwNjEsMzIwNjIsMzIwNjMsMzIwNjQsMzIwNjUsMzIwNjYsMzIwNjcsMzIwNjgsMzIwNjksMzIwNzAsMzIwNzEsMzIwNzIsMzIwNzMsMzIwNzQsMzIwNzUsMzIwNzYsMzIwNzcsMzIwNzgsMzIwNzksMzIwODAsMzIwODEsMzIwODIsMzIwODMsMzIwODQsMzIwODUsMzIw''@;'; put 'put ''ODYsMzIwODcsMzIwODgsMzIwODksMzIwOTAsMzIwOTEsMzIwOTIsMzIwOTMsMzIwOTQsMzIwOTUsMzIwOTYsMzIwOTcsMzIwOTgsMzIwOTksMzIxMDAsMzIxMDEsMzIxMDIsMzIxMDMsMzIxMDQsMzIxMDUsMzIxMDYsMzIxMDcsMzIxMDgsMzIxMDksMzIxMTEsMzIxMTIsMzIxMTMsMzIxMTQs''@;'; put 'put ''MzIxMTUsMzIxMTYsMzIxMTcsMzIxMTgsMzIxMjAsMzIxMjEsMzIxMjIsMzIxMjMsMzIxMjQsMzIxMjUsMzIxMjYsMzIxMjcsMzIxMjgsMzIxMjksMzIxMzAsMzIxMzEsMzIxMzIsMzIxMzMsMzIxMzQsMzIxMzUsMzIxMzYsMzIxMzcsMzIxMzgsMzIxMzksMzIxNDAsMzIxNDEsMzIxNDIsMzIx''@;'; put 'put ''NDMsMzIxNDQsMzIxNDUsMzIxNDYsMzIxNDcsMzIxNDgsMzIxNDksMzIxNTAsMzIxNTEsMzIxNTIsMjA1ODEsMzMzMjgsMjEwNzMsMzkyNzksMjgxNzYsMjgyOTMsMjgwNzEsMjQzMTQsMjA3MjUsMjMwMDQsMjM1NTgsMjc5NzQsMjc3NDMsMzAwODYsMzM5MzEsMjY3MjgsMjI4NzAsMzU3NjIs''@;'; put 'put ''MjEyODAsMzcyMzMsMzg0NzcsMzQxMjEsMjY4OTgsMzA5NzcsMjg5NjYsMzMwMTQsMjAxMzIsMzcwNjYsMjc5NzUsMzk1NTYsMjMwNDcsMjIyMDQsMjU2MDUsMzgxMjgsMzA2OTksMjAzODksMzMwNTAsMjk0MDksMzUyODIsMzkyOTAsMzI1NjQsMzI0NzgsMjExMTksMjU5NDUsMzcyMzcsMzY3''@;'; put 'put ''MzUsMzY3MzksMjE0ODMsMzEzODIsMjU1ODEsMjU1MDksMzAzNDIsMzEyMjQsMzQ5MDMsMzg0NTQsMjUxMzAsMjExNjMsMzM0MTAsMjY3MDgsMjY0ODAsMjU0NjMsMzA1NzEsMzE0NjksMjc5MDUsMzI0NjcsMzUyOTksMjI5OTIsMjUxMDYsMzQyNDksMzM0NDUsMzAwMjgsMjA1MTEsMjAxNzEs''@;'; put 'put ''MzAxMTcsMzU4MTksMjM2MjYsMjQwNjIsMzE1NjMsMjYwMjAsMzczMjksMjAxNzAsMjc5NDEsMzUxNjcsMzIwMzksMzgxODIsMjAxNjUsMzU4ODAsMzY4MjcsMzg3NzEsMjYxODcsMzExMDUsMzY4MTcsMjg5MDgsMjgwMjQsMzIxNTMsMzIxNTQsMzIxNTUsMzIxNTYsMzIxNTcsMzIxNTgsMzIx''@;'; put 'put ''NTksMzIxNjAsMzIxNjEsMzIxNjIsMzIxNjMsMzIxNjQsMzIxNjUsMzIxNjcsMzIxNjgsMzIxNjksMzIxNzAsMzIxNzEsMzIxNzIsMzIxNzMsMzIxNzUsMzIxNzYsMzIxNzcsMzIxNzgsMzIxNzksMzIxODAsMzIxODEsMzIxODIsMzIxODMsMzIxODQsMzIxODUsMzIxODYsMzIxODcsMzIxODgs''@;'; put 'put ''MzIxODksMzIxOTAsMzIxOTEsMzIxOTIsMzIxOTMsMzIxOTQsMzIxOTUsMzIxOTYsMzIxOTcsMzIxOTgsMzIxOTksMzIyMDAsMzIyMDEsMzIyMDIsMzIyMDMsMzIyMDQsMzIyMDUsMzIyMDYsMzIyMDcsMzIyMDgsMzIyMDksMzIyMTAsMzIyMTEsMzIyMTIsMzIyMTMsMzIyMTQsMzIyMTUsMzIy''@;'; put 'put ''MTYsMzIyMTcsMzIyMTgsMzIyMTksMzIyMjAsMzIyMjEsMzIyMjIsMzIyMjMsMzIyMjQsMzIyMjUsMzIyMjYsMzIyMjcsMzIyMjgsMzIyMjksMzIyMzAsMzIyMzEsMzIyMzIsMzIyMzMsMzIyMzQsMzIyMzUsMzIyMzYsMzIyMzcsMzIyMzgsMzIyMzksMzIyNDAsMzIyNDEsMzIyNDIsMzIyNDMs''@;'; put 'put ''MzIyNDQsMzIyNDUsMzIyNDYsMzIyNDcsMzIyNDgsMzIyNDksMzIyNTAsMjM2MTMsMjExNzAsMzM2MDYsMjA4MzQsMzM1NTAsMzA1NTUsMjYyMzAsNDAxMjAsMjAxNDAsMjQ3NzgsMzE5MzQsMzE5MjMsMzI0NjMsMjAxMTcsMzU2ODYsMjYyMjMsMzkwNDgsMzg3NDUsMjI2NTksMjU5NjQsMzgy''@;'; put 'put ''MzYsMjQ0NTIsMzAxNTMsMzg3NDIsMzE0NTUsMzE0NTQsMjA5MjgsMjg4NDcsMzEzODQsMjU1NzgsMzEzNTAsMzI0MTYsMjk1OTAsMzg4OTMsMjAwMzcsMjg3OTIsMjAwNjEsMzcyMDIsMjE0MTcsMjU5MzcsMjYwODcsMzMyNzYsMzMyODUsMjE2NDYsMjM2MDEsMzAxMDYsMzg4MTYsMjUzMDQs''@;'; put 'put ''Mjk0MDEsMzAxNDEsMjM2MjEsMzk1NDUsMzM3MzgsMjM2MTYsMjE2MzIsMzA2OTcsMjAwMzAsMjc4MjIsMzI4NTgsMjUyOTgsMjU0NTQsMjQwNDAsMjA4NTUsMzYzMTcsMzYzODIsMzgxOTEsMjA0NjUsMjE0NzcsMjQ4MDcsMjg4NDQsMjEwOTUsMjU0MjQsNDA1MTUsMjMwNzEsMjA1MTgsMzA1''@;'; put 'put ''MTksMjEzNjcsMzI0ODIsMjU3MzMsMjU4OTksMjUyMjUsMjU0OTYsMjA1MDAsMjkyMzcsMzUyNzMsMjA5MTUsMzU3NzYsMzI0NzcsMjIzNDMsMzM3NDAsMzgwNTUsMjA4OTEsMjE1MzEsMjM4MDMsMzIyNTEsMzIyNTIsMzIyNTMsMzIyNTQsMzIyNTUsMzIyNTYsMzIyNTcsMzIyNTgsMzIyNTks''@;'; put 'put ''MzIyNjAsMzIyNjEsMzIyNjIsMzIyNjMsMzIyNjQsMzIyNjUsMzIyNjYsMzIyNjcsMzIyNjgsMzIyNjksMzIyNzAsMzIyNzEsMzIyNzIsMzIyNzMsMzIyNzQsMzIyNzUsMzIyNzYsMzIyNzcsMzIyNzgsMzIyNzksMzIyODAsMzIyODEsMzIyODIsMzIyODMsMzIyODQsMzIyODUsMzIyODYsMzIy''@;'; put 'put ''ODcsMzIyODgsMzIyODksMzIyOTAsMzIyOTEsMzIyOTIsMzIyOTMsMzIyOTQsMzIyOTUsMzIyOTYsMzIyOTcsMzIyOTgsMzIyOTksMzIzMDAsMzIzMDEsMzIzMDIsMzIzMDMsMzIzMDQsMzIzMDUsMzIzMDYsMzIzMDcsMzIzMDgsMzIzMDksMzIzMTAsMzIzMTEsMzIzMTIsMzIzMTMsMzIzMTQs''@;'; put 'put ''MzIzMTYsMzIzMTcsMzIzMTgsMzIzMTksMzIzMjAsMzIzMjIsMzIzMjMsMzIzMjQsMzIzMjUsMzIzMjYsMzIzMjgsMzIzMjksMzIzMzAsMzIzMzEsMzIzMzIsMzIzMzMsMzIzMzQsMzIzMzUsMzIzMzYsMzIzMzcsMzIzMzgsMzIzMzksMzIzNDAsMzIzNDEsMzIzNDIsMzIzNDMsMzIzNDQsMzIz''@;'; put 'put ''NDUsMzIzNDYsMzIzNDcsMzIzNDgsMzIzNDksMjA0MjYsMzE0NTksMjc5OTQsMzcwODksMzk1NjcsMjE4ODgsMjE2NTQsMjEzNDUsMjE2NzksMjQzMjAsMjU1NzcsMjY5OTksMjA5NzUsMjQ5MzYsMjEwMDIsMjI1NzAsMjEyMDgsMjIzNTAsMzA3MzMsMzA0NzUsMjQyNDcsMjQ5NTEsMzE5Njgs''@;'; put 'put ''MjUxNzksMjUyMzksMjAxMzAsMjg4MjEsMzI3NzEsMjUzMzUsMjg5MDAsMzg3NTIsMjIzOTEsMzM0OTksMjY2MDcsMjY4NjksMzA5MzMsMzkwNjMsMzExODUsMjI3NzEsMjE2ODMsMjE0ODcsMjgyMTIsMjA4MTEsMjEwNTEsMjM0NTgsMzU4MzgsMzI5NDMsMjE4MjcsMjI0MzgsMjQ2OTEsMjIz''@;'; put 'put ''NTMsMjE1NDksMzEzNTQsMjQ2NTYsMjMzODAsMjU1MTEsMjUyNDgsMjE0NzUsMjUxODcsMjM0OTUsMjY1NDMsMjE3NDEsMzEzOTEsMzM1MTAsMzcyMzksMjQyMTEsMzUwNDQsMjI4NDAsMjI0NDYsMjUzNTgsMzYzMjgsMzMwMDcsMjIzNTksMzE2MDcsMjAzOTMsMjQ1NTUsMjM0ODUsMjc0NTQs''@;'; put 'put ''MjEyODEsMzE1NjgsMjkzNzgsMjY2OTQsMzA3MTksMzA1MTgsMjYxMDMsMjA5MTcsMjAxMTEsMzA0MjAsMjM3NDMsMzEzOTcsMzM5MDksMjI4NjIsMzk3NDUsMjA2MDgsMzIzNTAsMzIzNTEsMzIzNTIsMzIzNTMsMzIzNTQsMzIzNTUsMzIzNTYsMzIzNTcsMzIzNTgsMzIzNTksMzIzNjAsMzIz''@;'; put 'put ''NjEsMzIzNjIsMzIzNjMsMzIzNjQsMzIzNjUsMzIzNjYsMzIzNjcsMzIzNjgsMzIzNjksMzIzNzAsMzIzNzEsMzIzNzIsMzIzNzMsMzIzNzQsMzIzNzUsMzIzNzYsMzIzNzcsMzIzNzgsMzIzNzksMzIzODAsMzIzODEsMzIzODIsMzIzODMsMzIzODQsMzIzODUsMzIzODcsMzIzODgsMzIzODks''@;'; put 'put ''MzIzOTAsMzIzOTEsMzIzOTIsMzIzOTMsMzIzOTQsMzIzOTUsMzIzOTYsMzIzOTcsMzIzOTgsMzIzOTksMzI0MDAsMzI0MDEsMzI0MDIsMzI0MDMsMzI0MDQsMzI0MDUsMzI0MDYsMzI0MDcsMzI0MDgsMzI0MDksMzI0MTAsMzI0MTIsMzI0MTMsMzI0MTQsMzI0MzAsMzI0MzYsMzI0NDMsMzI0''@;'; put 'put ''NDQsMzI0NzAsMzI0ODQsMzI0OTIsMzI1MDUsMzI1MjIsMzI1MjgsMzI1NDIsMzI1NjcsMzI1NjksMzI1NzEsMzI1NzIsMzI1NzMsMzI1NzQsMzI1NzUsMzI1NzYsMzI1NzcsMzI1NzksMzI1ODIsMzI1ODMsMzI1ODQsMzI1ODUsMzI1ODYsMzI1ODcsMzI1ODgsMzI1ODksMzI1OTAsMzI1OTEs''@;'; put 'put ''MzI1OTQsMzI1OTUsMzkzMDQsMjQ4NzEsMjgyOTEsMjIzNzIsMjYxMTgsMjU0MTQsMjIyNTYsMjUzMjQsMjUxOTMsMjQyNzUsMzg0MjAsMjI0MDMsMjUyODksMjE4OTUsMzQ1OTMsMzMwOTgsMzY3NzEsMjE4NjIsMzM3MTMsMjY0NjksMzYxODIsMzQwMTMsMjMxNDYsMjY2MzksMjUzMTgsMzE3''@;'; put 'put ''MjYsMzg0MTcsMjA4NDgsMjg1NzIsMzU4ODgsMjU1OTcsMzUyNzIsMjUwNDIsMzI1MTgsMjg4NjYsMjgzODksMjk3MDEsMjcwMjgsMjk0MzYsMjQyNjYsMzcwNzAsMjYzOTEsMjgwMTAsMjU0MzgsMjExNzEsMjkyODIsMzI3NjksMjAzMzIsMjMwMTMsMzcyMjYsMjg4ODksMjgwNjEsMjEyMDIs''@;'; put 'put ''MjAwNDgsMzg2NDcsMzgyNTMsMzQxNzQsMzA5MjIsMzIwNDcsMjA3NjksMjI0MTgsMjU3OTQsMzI5MDcsMzE4NjcsMjc4ODIsMjY4NjUsMjY5NzQsMjA5MTksMjE0MDAsMjY3OTIsMjkzMTMsNDA2NTQsMzE3MjksMjk0MzIsMzExNjMsMjg0MzUsMjk3MDIsMjY0NDYsMzczMjQsNDAxMDAsMzEw''@;'; put 'put ''MzYsMzM2NzMsMzM2MjAsMjE1MTksMjY2NDcsMjAwMjksMjEzODUsMjExNjksMzA3ODIsMjEzODIsMjEwMzMsMjA2MTYsMjAzNjMsMjA0MzIsMzI1OTgsMzI2MDEsMzI2MDMsMzI2MDQsMzI2MDUsMzI2MDYsMzI2MDgsMzI2MTEsMzI2MTIsMzI2MTMsMzI2MTQsMzI2MTUsMzI2MTksMzI2MjAs''@;'; put 'put ''MzI2MjEsMzI2MjMsMzI2MjQsMzI2MjcsMzI2MjksMzI2MzAsMzI2MzEsMzI2MzIsMzI2MzQsMzI2MzUsMzI2MzYsMzI2MzcsMzI2MzksMzI2NDAsMzI2NDIsMzI2NDMsMzI2NDQsMzI2NDUsMzI2NDYsMzI2NDcsMzI2NDgsMzI2NDksMzI2NTEsMzI2NTMsMzI2NTUsMzI2NTYsMzI2NTcsMzI2''@;'; put 'put ''NTgsMzI2NTksMzI2NjEsMzI2NjIsMzI2NjMsMzI2NjQsMzI2NjUsMzI2NjcsMzI2NjgsMzI2NzIsMzI2NzQsMzI2NzUsMzI2NzcsMzI2NzgsMzI2ODAsMzI2ODEsMzI2ODIsMzI2ODMsMzI2ODQsMzI2ODUsMzI2ODYsMzI2ODksMzI2OTEsMzI2OTIsMzI2OTMsMzI2OTQsMzI2OTUsMzI2OTgs''@;'; put 'put ''MzI2OTksMzI3MDIsMzI3MDQsMzI3MDYsMzI3MDcsMzI3MDgsMzI3MTAsMzI3MTEsMzI3MTIsMzI3MTMsMzI3MTUsMzI3MTcsMzI3MTksMzI3MjAsMzI3MjEsMzI3MjIsMzI3MjMsMzI3MjYsMzI3MjcsMzI3MjksMzI3MzAsMzI3MzEsMzI3MzIsMzI3MzMsMzI3MzQsMzI3MzgsMzI3MzksMzAx''@;'; put 'put ''NzgsMzE0MzUsMzE4OTAsMjc4MTMsMzg1ODIsMjExNDcsMjk4MjcsMjE3MzcsMjA0NTcsMzI4NTIsMzM3MTQsMzY4MzAsMzgyNTYsMjQyNjUsMjQ2MDQsMjgwNjMsMjQwODgsMjU5NDcsMzMwODAsMzgxNDIsMjQ2NTEsMjg4NjAsMzI0NTEsMzE5MTgsMjA5MzcsMjY3NTMsMzE5MjEsMzMzOTEs''@;'; put 'put ''MjAwMDQsMzY3NDIsMzczMjcsMjYyMzgsMjAxNDIsMzU4NDUsMjU3NjksMzI4NDIsMjA2OTgsMzAxMDMsMjkxMzQsMjM1MjUsMzY3OTcsMjg1MTgsMjAxMDIsMjU3MzAsMzgyNDMsMjQyNzgsMjYwMDksMjEwMTUsMzUwMTAsMjg4NzIsMjExNTUsMjk0NTQsMjk3NDcsMjY1MTksMzA5NjcsMzg2''@;'; put 'put ''NzgsMjAwMjAsMzcwNTEsNDAxNTgsMjgxMDcsMjA5NTUsMzYxNjEsMjE1MzMsMjUyOTQsMjk2MTgsMzM3NzcsMzg2NDYsNDA4MzYsMzgwODMsMjAyNzgsMzI2NjYsMjA5NDAsMjg3ODksMzg1MTcsMjM3MjUsMzkwNDYsMjE0NzgsMjAxOTYsMjgzMTYsMjk3MDUsMjcwNjAsMzA4MjcsMzkzMTEs''@;'; put 'put ''MzAwNDEsMjEwMTYsMzAyNDQsMjc5NjksMjY2MTEsMjA4NDUsNDA4NTcsMzI4NDMsMjE2NTcsMzE1NDgsMzE0MjMsMzI3NDAsMzI3NDMsMzI3NDQsMzI3NDYsMzI3NDcsMzI3NDgsMzI3NDksMzI3NTEsMzI3NTQsMzI3NTYsMzI3NTcsMzI3NTgsMzI3NTksMzI3NjAsMzI3NjEsMzI3NjIsMzI3''@;'; put 'put ''NjUsMzI3NjYsMzI3NjcsMzI3NzAsMzI3NzUsMzI3NzYsMzI3NzcsMzI3NzgsMzI3ODIsMzI3ODMsMzI3ODUsMzI3ODcsMzI3OTQsMzI3OTUsMzI3OTcsMzI3OTgsMzI3OTksMzI4MDEsMzI4MDMsMzI4MDQsMzI4MTEsMzI4MTIsMzI4MTMsMzI4MTQsMzI4MTUsMzI4MTYsMzI4MTgsMzI4MjAs''@;'; put 'put ''MzI4MjUsMzI4MjYsMzI4MjgsMzI4MzAsMzI4MzIsMzI4MzMsMzI4MzYsMzI4MzcsMzI4MzksMzI4NDAsMzI4NDEsMzI4NDYsMzI4NDcsMzI4NDgsMzI4NDksMzI4NTEsMzI4NTMsMzI4NTQsMzI4NTUsMzI4NTcsMzI4NTksMzI4NjAsMzI4NjEsMzI4NjIsMzI4NjMsMzI4NjQsMzI4NjUsMzI4''@;'; put 'put ''NjYsMzI4NjcsMzI4NjgsMzI4NjksMzI4NzAsMzI4NzEsMzI4NzIsMzI4NzUsMzI4NzYsMzI4NzcsMzI4NzgsMzI4NzksMzI4ODAsMzI4ODIsMzI4ODMsMzI4ODQsMzI4ODUsMzI4ODYsMzI4ODcsMzI4ODgsMzI4ODksMzI4OTAsMzI4OTEsMzI4OTIsMzI4OTMsMzg1MzQsMjI0MDQsMjUzMTQs''@;'; put 'put ''Mzg0NzEsMjcwMDQsMjMwNDQsMjU2MDIsMzE2OTksMjg0MzEsMzg0NzUsMzM0NDYsMjEzNDYsMzkwNDUsMjQyMDgsMjg4MDksMjU1MjMsMjEzNDgsMzQzODMsNDAwNjUsNDA1OTUsMzA4NjAsMzg3MDYsMzYzMzUsMzYxNjIsNDA1NzUsMjg1MTAsMzExMDgsMjQ0MDUsMzg0NzAsMjUxMzQsMzk1''@;'; put 'put ''NDAsMjE1MjUsMzgxMDksMjAzODcsMjYwNTMsMjM2NTMsMjM2NDksMzI1MzMsMzQzODUsMjc2OTUsMjQ0NTksMjk1NzUsMjgzODgsMzI1MTEsMjM3ODIsMjUzNzEsMjM0MDIsMjgzOTAsMjEzNjUsMjAwODEsMjU1MDQsMzAwNTMsMjUyNDksMzY3MTgsMjAyNjIsMjAxNzcsMjc4MTQsMzI0Mzgs''@;'; put 'put ''MzU3NzAsMzM4MjEsMzQ3NDYsMzI1OTksMzY5MjMsMzgxNzksMzE2NTcsMzk1ODUsMzUwNjQsMzM4NTMsMjc5MzEsMzk1NTgsMzI0NzYsMjI5MjAsNDA2MzUsMjk1OTUsMzA3MjEsMzQ0MzQsMzk1MzIsMzk1NTQsMjIwNDMsMjE1MjcsMjI0NzUsMjAwODAsNDA2MTQsMjEzMzQsMzY4MDgsMzMw''@;'; put 'put ''MzMsMzA2MTAsMzkzMTQsMzQ1NDIsMjgzODUsMzQwNjcsMjYzNjQsMjQ5MzAsMjg0NTksMzI4OTQsMzI4OTcsMzI4OTgsMzI5MDEsMzI5MDQsMzI5MDYsMzI5MDksMzI5MTAsMzI5MTEsMzI5MTIsMzI5MTMsMzI5MTQsMzI5MTYsMzI5MTcsMzI5MTksMzI5MjEsMzI5MjYsMzI5MzEsMzI5MzQs''@;'; put 'put ''MzI5MzUsMzI5MzYsMzI5NDAsMzI5NDQsMzI5NDcsMzI5NDksMzI5NTAsMzI5NTIsMzI5NTMsMzI5NTUsMzI5NjUsMzI5NjcsMzI5NjgsMzI5NjksMzI5NzAsMzI5NzEsMzI5NzUsMzI5NzYsMzI5NzcsMzI5NzgsMzI5NzksMzI5ODAsMzI5ODEsMzI5ODQsMzI5OTEsMzI5OTIsMzI5OTQsMzI5''@;'; put 'put ''OTUsMzI5OTgsMzMwMDYsMzMwMTMsMzMwMTUsMzMwMTcsMzMwMTksMzMwMjIsMzMwMjMsMzMwMjQsMzMwMjUsMzMwMjcsMzMwMjgsMzMwMjksMzMwMzEsMzMwMzIsMzMwMzUsMzMwMzYsMzMwNDUsMzMwNDcsMzMwNDksMzMwNTEsMzMwNTIsMzMwNTMsMzMwNTUsMzMwNTYsMzMwNTcsMzMwNTgs''@;'; put 'put ''MzMwNTksMzMwNjAsMzMwNjEsMzMwNjIsMzMwNjMsMzMwNjQsMzMwNjUsMzMwNjYsMzMwNjcsMzMwNjksMzMwNzAsMzMwNzIsMzMwNzUsMzMwNzYsMzMwNzcsMzMwNzksMzMwODEsMzMwODIsMzMwODMsMzMwODQsMzMwODUsMzMwODcsMzU4ODEsMzM0MjYsMzM1NzksMzA0NTAsMjc2NjcsMjQ1''@;'; put 'put ''MzcsMzM3MjUsMjk0ODMsMzM1NDEsMzgxNzAsMjc2MTEsMzA2ODMsMzgwODYsMjEzNTksMzM1MzgsMjA4ODIsMjQxMjUsMzU5ODAsMzYxNTIsMjAwNDAsMjk2MTEsMjY1MjIsMjY3NTcsMzcyMzgsMzg2NjUsMjkwMjgsMjc4MDksMzA0NzMsMjMxODYsMzgyMDksMjc1OTksMzI2NTQsMjYxNTEs''@;'; put 'put ''MjM1MDQsMjI5NjksMjMxOTQsMzgzNzYsMzgzOTEsMjAyMDQsMzM4MDQsMzM5NDUsMjczMDgsMzA0MzEsMzgxOTIsMjk0NjcsMjY3OTAsMjMzOTEsMzA1MTEsMzcyNzQsMzg3NTMsMzE5NjQsMzY4NTUsMzU4NjgsMjQzNTcsMzE4NTksMzExOTIsMzUyNjksMjc4NTIsMzQ1ODgsMjM0OTQsMjQx''@;'; put 'put ''MzAsMjY4MjUsMzA0OTYsMzI1MDEsMjA4ODUsMjA4MTMsMjExOTMsMjMwODEsMzI1MTcsMzg3NTQsMzM0OTUsMjU1NTEsMzA1OTYsMzQyNTYsMzExODYsMjgyMTgsMjQyMTcsMjI5MzcsMzQwNjUsMjg3ODEsMjc2NjUsMjUyNzksMzAzOTksMjU5MzUsMjQ3NTEsMzgzOTcsMjYxMjYsMzQ3MTks''@;'; put 'put ''NDA0ODMsMzgxMjUsMjE1MTcsMjE2MjksMzU4ODQsMjU3MjAsMzMwODgsMzMwODksMzMwOTAsMzMwOTEsMzMwOTIsMzMwOTMsMzMwOTUsMzMwOTcsMzMxMDEsMzMxMDIsMzMxMDMsMzMxMDYsMzMxMTAsMzMxMTEsMzMxMTIsMzMxMTUsMzMxMTYsMzMxMTcsMzMxMTgsMzMxMTksMzMxMjEsMzMx''@;'; put 'put ''MjIsMzMxMjMsMzMxMjQsMzMxMjYsMzMxMjgsMzMxMzAsMzMxMzEsMzMxMzIsMzMxMzUsMzMxMzgsMzMxMzksMzMxNDEsMzMxNDIsMzMxNDMsMzMxNDQsMzMxNTMsMzMxNTUsMzMxNTYsMzMxNTcsMzMxNTgsMzMxNTksMzMxNjEsMzMxNjMsMzMxNjQsMzMxNjUsMzMxNjYsMzMxNjgsMzMxNzAs''@;'; put 'put ''MzMxNzEsMzMxNzIsMzMxNzMsMzMxNzQsMzMxNzUsMzMxNzcsMzMxNzgsMzMxODIsMzMxODMsMzMxODQsMzMxODUsMzMxODYsMzMxODgsMzMxODksMzMxOTEsMzMxOTMsMzMxOTUsMzMxOTYsMzMxOTcsMzMxOTgsMzMxOTksMzMyMDAsMzMyMDEsMzMyMDIsMzMyMDQsMzMyMDUsMzMyMDYsMzMy''@;'; put 'put ''MDcsMzMyMDgsMzMyMDksMzMyMTIsMzMyMTMsMzMyMTQsMzMyMTUsMzMyMjAsMzMyMjEsMzMyMjMsMzMyMjQsMzMyMjUsMzMyMjcsMzMyMjksMzMyMzAsMzMyMzEsMzMyMzIsMzMyMzMsMzMyMzQsMzMyMzUsMjU3MjEsMzQzMjEsMjcxNjksMzMxODAsMzA5NTIsMjU3MDUsMzk3NjQsMjUyNzMs''@;'; put 'put ''MjY0MTEsMzM3MDcsMjI2OTYsNDA2NjQsMjc4MTksMjg0NDgsMjM1MTgsMzg0NzYsMzU4NTEsMjkyNzksMjY1NzYsMjUyODcsMjkyODEsMjAxMzcsMjI5ODIsMjc1OTcsMjI2NzUsMjYyODYsMjQxNDksMjEyMTUsMjQ5MTcsMjY0MDgsMzA0NDYsMzA1NjYsMjkyODcsMzEzMDIsMjUzNDMsMjE3''@;'; put 'put ''MzgsMjE1ODQsMzgwNDgsMzcwMjcsMjMwNjgsMzI0MzUsMjc2NzAsMjAwMzUsMjI5MDIsMzI3ODQsMjI4NTYsMjEzMzUsMzAwMDcsMzg1OTAsMjIyMTgsMjUzNzYsMzMwNDEsMjQ3MDAsMzgzOTMsMjgxMTgsMjE2MDIsMzkyOTcsMjA4NjksMjMyNzMsMzMwMjEsMjI5NTgsMzg2NzUsMjA1MjIs''@;'; put 'put ''Mjc4NzcsMjM2MTIsMjUzMTEsMjAzMjAsMjEzMTEsMzMxNDcsMzY4NzAsMjgzNDYsMzQwOTEsMjUyODgsMjQxODAsMzA5MTAsMjU3ODEsMjU0NjcsMjQ1NjUsMjMwNjQsMzcyNDcsNDA0NzksMjM2MTUsMjU0MjMsMzI4MzQsMjM0MjEsMjE4NzAsMzgyMTgsMzgyMjEsMjgwMzcsMjQ3NDQsMjY1''@;'; put 'put ''OTIsMjk0MDYsMjA5NTcsMjM0MjUsMzMyMzYsMzMyMzcsMzMyMzgsMzMyMzksMzMyNDAsMzMyNDEsMzMyNDIsMzMyNDMsMzMyNDQsMzMyNDUsMzMyNDYsMzMyNDcsMzMyNDgsMzMyNDksMzMyNTAsMzMyNTIsMzMyNTMsMzMyNTQsMzMyNTYsMzMyNTcsMzMyNTksMzMyNjIsMzMyNjMsMzMyNjQs''@;'; put 'put ''MzMyNjUsMzMyNjYsMzMyNjksMzMyNzAsMzMyNzEsMzMyNzIsMzMyNzMsMzMyNzQsMzMyNzcsMzMyNzksMzMyODMsMzMyODcsMzMyODgsMzMyODksMzMyOTAsMzMyOTEsMzMyOTQsMzMyOTUsMzMyOTcsMzMyOTksMzMzMDEsMzMzMDIsMzMzMDMsMzMzMDQsMzMzMDUsMzMzMDYsMzMzMDksMzMz''@;'; put 'put ''MTIsMzMzMTYsMzMzMTcsMzMzMTgsMzMzMTksMzMzMjEsMzMzMjYsMzMzMzAsMzMzMzgsMzMzNDAsMzMzNDEsMzMzNDMsMzMzNDQsMzMzNDUsMzMzNDYsMzMzNDcsMzMzNDksMzMzNTAsMzMzNTIsMzMzNTQsMzMzNTYsMzMzNTcsMzMzNTgsMzMzNjAsMzMzNjEsMzMzNjIsMzMzNjMsMzMzNjQs''@;'; put 'put ''MzMzNjUsMzMzNjYsMzMzNjcsMzMzNjksMzMzNzEsMzMzNzIsMzMzNzMsMzMzNzQsMzMzNzYsMzMzNzcsMzMzNzgsMzMzNzksMzMzODAsMzMzODEsMzMzODIsMzMzODMsMzMzODUsMjUzMTksMjc4NzAsMjkyNzUsMjUxOTcsMzgwNjIsMzI0NDUsMzMwNDMsMjc5ODcsMjA4OTIsMjQzMjQsMjI5''@;'; put 'put ''MDAsMjExNjIsMjQ1OTQsMjI4OTksMjYyNjIsMzQzODQsMzAxMTEsMjUzODYsMjUwNjIsMzE5ODMsMzU4MzQsMjE3MzQsMjc0MzEsNDA0ODUsMjc1NzIsMzQyNjEsMjE1ODksMjA1OTgsMjc4MTIsMjE4NjYsMzYyNzYsMjkyMjgsMjQwODUsMjQ1OTcsMjk3NTAsMjUyOTMsMjU0OTAsMjkyNjAs''@;'; put 'put ''MjQ0NzIsMjgyMjcsMjc5NjYsMjU4NTYsMjg1MDQsMzA0MjQsMzA5MjgsMzA0NjAsMzAwMzYsMjEwMjgsMjE0NjcsMjAwNTEsMjQyMjIsMjYwNDksMzI4MTAsMzI5ODIsMjUyNDMsMjE2MzgsMjEwMzIsMjg4NDYsMzQ5NTcsMzYzMDUsMjc4NzMsMjE2MjQsMzI5ODYsMjI1MjEsMzUwNjAsMzYx''@;'; put 'put ''ODAsMzg1MDYsMzcxOTcsMjAzMjksMjc4MDMsMjE5NDMsMzA0MDYsMzA3NjgsMjUyNTYsMjg5MjEsMjg1NTgsMjQ0MjksMzQwMjgsMjY4NDIsMzA4NDQsMzE3MzUsMzMxOTIsMjYzNzksNDA1MjcsMjU0NDcsMzA4OTYsMjIzODMsMzA3MzgsMzg3MTMsMjUyMDksMjUyNTksMjExMjgsMjk3NDks''@;'; put 'put ''Mjc2MDcsMzMzODYsMzMzODcsMzMzODgsMzMzODksMzMzOTMsMzMzOTcsMzMzOTgsMzMzOTksMzM0MDAsMzM0MDMsMzM0MDQsMzM0MDgsMzM0MDksMzM0MTEsMzM0MTMsMzM0MTQsMzM0MTUsMzM0MTcsMzM0MjAsMzM0MjQsMzM0MjcsMzM0MjgsMzM0MjksMzM0MzAsMzM0MzQsMzM0MzUsMzM0''@;'; put 'put ''MzgsMzM0NDAsMzM0NDIsMzM0NDMsMzM0NDcsMzM0NTgsMzM0NjEsMzM0NjIsMzM0NjYsMzM0NjcsMzM0NjgsMzM0NzEsMzM0NzIsMzM0NzQsMzM0NzUsMzM0NzcsMzM0NzgsMzM0ODEsMzM0ODgsMzM0OTQsMzM0OTcsMzM0OTgsMzM1MDEsMzM1MDYsMzM1MTEsMzM1MTIsMzM1MTMsMzM1MTQs''@;'; put 'put ''MzM1MTYsMzM1MTcsMzM1MTgsMzM1MjAsMzM1MjIsMzM1MjMsMzM1MjUsMzM1MjYsMzM1MjgsMzM1MzAsMzM1MzIsMzM1MzMsMzM1MzQsMzM1MzUsMzM1MzYsMzM1NDYsMzM1NDcsMzM1NDksMzM1NTIsMzM1NTQsMzM1NTUsMzM1NTgsMzM1NjAsMzM1NjEsMzM1NjUsMzM1NjYsMzM1NjcsMzM1''@;'; put 'put ''NjgsMzM1NjksMzM1NzAsMzM1NzEsMzM1NzIsMzM1NzMsMzM1NzQsMzM1NzcsMzM1NzgsMzM1ODIsMzM1ODQsMzM1ODYsMzM1OTEsMzM1OTUsMzM1OTcsMjE4NjAsMzMwODYsMzAxMzAsMzAzODIsMjEzMDUsMzAxNzQsMjA3MzEsMjM2MTcsMzU2OTIsMzE2ODcsMjA1NTksMjkyNTUsMzk1NzUs''@;'; put 'put ''MzkxMjgsMjg0MTgsMjk5MjIsMzEwODAsMjU3MzUsMzA2MjksMjUzNDAsMzkwNTcsMzYxMzksMjE2OTcsMzI4NTYsMjAwNTAsMjIzNzgsMzM1MjksMzM4MDUsMjQxNzksMjA5NzMsMjk5NDIsMzU3ODAsMjM2MzEsMjIzNjksMjc5MDAsMzkwNDcsMjMxMTAsMzA3NzIsMzk3NDgsMzY4NDMsMzE4''@;'; put 'put ''OTMsMjEwNzgsMjUxNjksMzgxMzgsMjAxNjYsMzM2NzAsMzM4ODksMzM3NjksMzM5NzAsMjI0ODQsMjY0MjAsMjIyNzUsMjYyMjIsMjgwMDYsMzU4ODksMjYzMzMsMjg2ODksMjYzOTksMjc0NTAsMjY2NDYsMjUxMTQsMjI5NzEsMTk5NzEsMjA5MzIsMjg0MjIsMjY1NzgsMjc3OTEsMjA4NTQs''@;'; put 'put ''MjY4MjcsMjI4NTUsMjc0OTUsMzAwNTQsMjM4MjIsMzMwNDAsNDA3ODQsMjYwNzEsMzEwNDgsMzEwNDEsMzk1NjksMzYyMTUsMjM2ODIsMjAwNjIsMjAyMjUsMjE1NTEsMjI4NjUsMzA3MzIsMjIxMjAsMjc2NjgsMzY4MDQsMjQzMjMsMjc3NzMsMjc4NzUsMzU3NTUsMjU0ODgsMzM1OTgsMzM1''@;'; put 'put ''OTksMzM2MDEsMzM2MDIsMzM2MDQsMzM2MDUsMzM2MDgsMzM2MTAsMzM2MTEsMzM2MTIsMzM2MTMsMzM2MTQsMzM2MTksMzM2MjEsMzM2MjIsMzM2MjMsMzM2MjQsMzM2MjUsMzM2MjksMzM2MzQsMzM2NDgsMzM2NDksMzM2NTAsMzM2NTEsMzM2NTIsMzM2NTMsMzM2NTQsMzM2NTcsMzM2NTgs''@;'; put 'put ''MzM2NjIsMzM2NjMsMzM2NjQsMzM2NjUsMzM2NjYsMzM2NjcsMzM2NjgsMzM2NzEsMzM2NzIsMzM2NzQsMzM2NzUsMzM2NzYsMzM2NzcsMzM2NzksMzM2ODAsMzM2ODEsMzM2ODQsMzM2ODUsMzM2ODYsMzM2ODcsMzM2ODksMzM2OTAsMzM2OTMsMzM2OTUsMzM2OTcsMzM2OTgsMzM2OTksMzM3''@;'; put 'put ''MDAsMzM3MDEsMzM3MDIsMzM3MDMsMzM3MDgsMzM3MDksMzM3MTAsMzM3MTEsMzM3MTcsMzM3MjMsMzM3MjYsMzM3MjcsMzM3MzAsMzM3MzEsMzM3MzIsMzM3MzQsMzM3MzYsMzM3MzcsMzM3MzksMzM3NDEsMzM3NDIsMzM3NDQsMzM3NDUsMzM3NDYsMzM3NDcsMzM3NDksMzM3NTEsMzM3NTMs''@;'; put 'put ''MzM3NTQsMzM3NTUsMzM3NTgsMzM3NjIsMzM3NjMsMzM3NjQsMzM3NjYsMzM3NjcsMzM3NjgsMzM3NzEsMzM3NzIsMzM3NzMsMjQ2ODgsMjc5NjUsMjkzMDEsMjUxOTAsMzgwMzAsMzgwODUsMjEzMTUsMzY4MDEsMzE2MTQsMjAxOTEsMzU4NzgsMjAwOTQsNDA2NjAsMzgwNjUsMzgwNjcsMjEw''@;'; put 'put ''NjksMjg1MDgsMzY5NjMsMjc5NzMsMzU4OTIsMjI1NDUsMjM4ODQsMjc0MjQsMjc0NjUsMjY1MzgsMjE1OTUsMzMxMDgsMzI2NTIsMjI2ODEsMzQxMDMsMjQzNzgsMjUyNTAsMjcyMDcsMzgyMDEsMjU5NzAsMjQ3MDgsMjY3MjUsMzA2MzEsMjAwNTIsMjAzOTIsMjQwMzksMzg4MDgsMjU3NzIs''@;'; put 'put ''MzI3MjgsMjM3ODksMjA0MzEsMzEzNzMsMjA5OTksMzM1NDAsMTk5ODgsMjQ2MjMsMzEzNjMsMzgwNTQsMjA0MDUsMjAxNDYsMzEyMDYsMjk3NDgsMjEyMjAsMzM0NjUsMjU4MTAsMzExNjUsMjM1MTcsMjc3NzcsMzg3MzgsMzY3MzEsMjc2ODIsMjA1NDIsMjEzNzUsMjgxNjUsMjU4MDYsMjYy''@;'; put 'put ''MjgsMjc2OTYsMjQ3NzMsMzkwMzEsMzU4MzEsMjQxOTgsMjk3NTYsMzEzNTEsMzExNzksMTk5OTIsMzcwNDEsMjk2OTksMjc3MTQsMjIyMzQsMzcxOTUsMjc4NDUsMzYyMzUsMjEzMDYsMzQ1MDIsMjYzNTQsMzY1MjcsMjM2MjQsMzk1MzcsMjgxOTIsMzM3NzQsMzM3NzUsMzM3NzksMzM3ODAs''@;'; put 'put ''MzM3ODEsMzM3ODIsMzM3ODMsMzM3ODYsMzM3ODcsMzM3ODgsMzM3OTAsMzM3OTEsMzM3OTIsMzM3OTQsMzM3OTcsMzM3OTksMzM4MDAsMzM4MDEsMzM4MDIsMzM4MDgsMzM4MTAsMzM4MTEsMzM4MTIsMzM4MTMsMzM4MTQsMzM4MTUsMzM4MTcsMzM4MTgsMzM4MTksMzM4MjIsMzM4MjMsMzM4''@;'; put 'put ''MjQsMzM4MjUsMzM4MjYsMzM4MjcsMzM4MzMsMzM4MzQsMzM4MzUsMzM4MzYsMzM4MzcsMzM4MzgsMzM4MzksMzM4NDAsMzM4NDIsMzM4NDMsMzM4NDQsMzM4NDUsMzM4NDYsMzM4NDcsMzM4NDksMzM4NTAsMzM4NTEsMzM4NTQsMzM4NTUsMzM4NTYsMzM4NTcsMzM4NTgsMzM4NTksMzM4NjAs''@;'; put 'put ''MzM4NjEsMzM4NjMsMzM4NjQsMzM4NjUsMzM4NjYsMzM4NjcsMzM4NjgsMzM4NjksMzM4NzAsMzM4NzEsMzM4NzIsMzM4NzQsMzM4NzUsMzM4NzYsMzM4NzcsMzM4NzgsMzM4ODAsMzM4ODUsMzM4ODYsMzM4ODcsMzM4ODgsMzM4OTAsMzM4OTIsMzM4OTMsMzM4OTQsMzM4OTUsMzM4OTYsMzM4''@;'; put 'put ''OTgsMzM5MDIsMzM5MDMsMzM5MDQsMzM5MDYsMzM5MDgsMzM5MTEsMzM5MTMsMzM5MTUsMzM5MTYsMjE0NjIsMjMwOTQsNDA4NDMsMzYyNTksMjE0MzUsMjIyODAsMzkwNzksMjY0MzUsMzcyNzUsMjc4NDksMjA4NDAsMzAxNTQsMjUzMzEsMjkzNTYsMjEwNDgsMjExNDksMzI1NzAsMjg4MjAs''@;'; put 'put ''MzAyNjQsMjEzNjQsNDA1MjIsMjcwNjMsMzA4MzAsMzg1OTIsMzUwMzMsMzI2NzYsMjg5ODIsMjkxMjMsMjA4NzMsMjY1NzksMjk5MjQsMjI3NTYsMjU4ODAsMjIxOTksMzU3NTMsMzkyODYsMjUyMDAsMzI0NjksMjQ4MjUsMjg5MDksMjI3NjQsMjAxNjEsMjAxNTQsMjQ1MjUsMzg4ODcsMjAy''@;'; put 'put ''MTksMzU3NDgsMjA5OTUsMjI5MjIsMzI0MjcsMjUxNzIsMjAxNzMsMjYwODUsMjUxMDIsMzM1OTIsMzM5OTMsMzM2MzUsMzQ3MDEsMjkwNzYsMjgzNDIsMjM0ODEsMzI0NjYsMjA4ODcsMjU1NDUsMjY1ODAsMzI5MDUsMzM1OTMsMzQ4MzcsMjA3NTQsMjM0MTgsMjI5MTQsMzY3ODUsMjAwODMs''@;'; put 'put ''Mjc3NDEsMjA4MzcsMzUxMDksMzY3MTksMzg0NDYsMzQxMjIsMjk3OTAsMzgxNjAsMzgzODQsMjgwNzAsMzM1MDksMjQzNjksMjU3NDYsMjc5MjIsMzM4MzIsMzMxMzQsNDAxMzEsMjI2MjIsMzYxODcsMTk5NzcsMjE0NDEsMzM5MTcsMzM5MTgsMzM5MTksMzM5MjAsMzM5MjEsMzM5MjMsMzM5''@;'; put 'put ''MjQsMzM5MjUsMzM5MjYsMzM5MzAsMzM5MzMsMzM5MzUsMzM5MzYsMzM5MzcsMzM5MzgsMzM5MzksMzM5NDAsMzM5NDEsMzM5NDIsMzM5NDQsMzM5NDYsMzM5NDcsMzM5NDksMzM5NTAsMzM5NTEsMzM5NTIsMzM5NTQsMzM5NTUsMzM5NTYsMzM5NTcsMzM5NTgsMzM5NTksMzM5NjAsMzM5NjEs''@;'; put 'put ''MzM5NjIsMzM5NjMsMzM5NjQsMzM5NjUsMzM5NjYsMzM5NjgsMzM5NjksMzM5NzEsMzM5NzMsMzM5NzQsMzM5NzUsMzM5NzksMzM5ODAsMzM5ODIsMzM5ODQsMzM5ODYsMzM5ODcsMzM5ODksMzM5OTAsMzM5OTEsMzM5OTIsMzM5OTUsMzM5OTYsMzM5OTgsMzM5OTksMzQwMDIsMzQwMDQsMzQw''@;'; put 'put ''MDUsMzQwMDcsMzQwMDgsMzQwMDksMzQwMTAsMzQwMTEsMzQwMTIsMzQwMTQsMzQwMTcsMzQwMTgsMzQwMjAsMzQwMjMsMzQwMjQsMzQwMjUsMzQwMjYsMzQwMjcsMzQwMjksMzQwMzAsMzQwMzEsMzQwMzMsMzQwMzQsMzQwMzUsMzQwMzYsMzQwMzcsMzQwMzgsMzQwMzksMzQwNDAsMzQwNDEs''@;'; put 'put ''MzQwNDIsMzQwNDMsMzQwNDUsMzQwNDYsMzQwNDgsMzQwNDksMzQwNTAsMjAyNTQsMjU5NTUsMjY3MDUsMjE5NzEsMjAwMDcsMjU2MjAsMzk1NzgsMjUxOTUsMjMyMzQsMjk3OTEsMzMzOTQsMjgwNzMsMjY4NjIsMjA3MTEsMzM2NzgsMzA3MjIsMjY0MzIsMjEwNDksMjc4MDEsMzI0MzMsMjA2''@;'; put 'put ''NjcsMjE4NjEsMjkwMjIsMzE1NzksMjYxOTQsMjk2NDIsMzM1MTUsMjY0NDEsMjM2NjUsMjEwMjQsMjkwNTMsMzQ5MjMsMzgzNzgsMzg0ODUsMjU3OTcsMzYxOTMsMzMyMDMsMjE4OTIsMjc3MzMsMjUxNTksMzI1NTgsMjI2NzQsMjAyNjAsMjE4MzAsMzYxNzUsMjYxODgsMTk5NzgsMjM1Nzgs''@;'; put 'put ''MzUwNTksMjY3ODYsMjU0MjIsMzEyNDUsMjg5MDMsMzM0MjEsMjEyNDIsMzg5MDIsMjM1NjksMjE3MzYsMzcwNDUsMzI0NjEsMjI4ODIsMzYxNzAsMzQ1MDMsMzMyOTIsMzMyOTMsMzYxOTgsMjU2NjgsMjM1NTYsMjQ5MTMsMjgwNDEsMzEwMzgsMzU3NzQsMzA3NzUsMzAwMDMsMjE2MjcsMjAy''@;'; put 'put ''ODAsMzY1MjMsMjgxNDUsMjMwNzIsMzI0NTMsMzEwNzAsMjc3ODQsMjM0NTcsMjMxNTgsMjk5NzgsMzI5NTgsMjQ5MTAsMjgxODMsMjI3NjgsMjk5ODMsMjk5ODksMjkyOTgsMjEzMTksMzI0OTksMzQwNTEsMzQwNTIsMzQwNTMsMzQwNTQsMzQwNTUsMzQwNTYsMzQwNTcsMzQwNTgsMzQwNTks''@;'; put 'put ''MzQwNjEsMzQwNjIsMzQwNjMsMzQwNjQsMzQwNjYsMzQwNjgsMzQwNjksMzQwNzAsMzQwNzIsMzQwNzMsMzQwNzUsMzQwNzYsMzQwNzcsMzQwNzgsMzQwODAsMzQwODIsMzQwODMsMzQwODQsMzQwODUsMzQwODYsMzQwODcsMzQwODgsMzQwODksMzQwOTAsMzQwOTMsMzQwOTQsMzQwOTUsMzQw''@;'; put 'put ''OTYsMzQwOTcsMzQwOTgsMzQwOTksMzQxMDAsMzQxMDEsMzQxMDIsMzQxMTAsMzQxMTEsMzQxMTIsMzQxMTMsMzQxMTQsMzQxMTYsMzQxMTcsMzQxMTgsMzQxMTksMzQxMjMsMzQxMjQsMzQxMjUsMzQxMjYsMzQxMjcsMzQxMjgsMzQxMjksMzQxMzAsMzQxMzEsMzQxMzIsMzQxMzMsMzQxMzUs''@;'; put 'put ''MzQxMzYsMzQxMzgsMzQxMzksMzQxNDAsMzQxNDEsMzQxNDMsMzQxNDQsMzQxNDUsMzQxNDYsMzQxNDcsMzQxNDksMzQxNTAsMzQxNTEsMzQxNTMsMzQxNTQsMzQxNTUsMzQxNTYsMzQxNTcsMzQxNTgsMzQxNTksMzQxNjAsMzQxNjEsMzQxNjMsMzQxNjUsMzQxNjYsMzQxNjcsMzQxNjgsMzQx''@;'; put 'put ''NzIsMzQxNzMsMzQxNzUsMzQxNzYsMzQxNzcsMzA0NjUsMzA0MjcsMjEwOTcsMzI5ODgsMjIzMDcsMjQwNzIsMjI4MzMsMjk0MjIsMjYwNDUsMjgyODcsMzU3OTksMjM2MDgsMzQ0MTcsMjEzMTMsMzA3MDcsMjUzNDIsMjYxMDIsMjAxNjAsMzkxMzUsMzQ0MzIsMjM0NTQsMzU3ODIsMjE0OTAs''@;'; put 'put ''MzA2OTAsMjAzNTEsMjM2MzAsMzk1NDIsMjI5ODcsMjQzMzUsMzEwMzQsMjI3NjMsMTk5OTAsMjY2MjMsMjAxMDcsMjUzMjUsMzU0NzUsMzY4OTMsMjExODMsMjYxNTksMjE5ODAsMjIxMjQsMzY4NjYsMjAxODEsMjAzNjUsMzczMjIsMzkyODAsMjc2NjMsMjQwNjYsMjQ2NDMsMjM0NjAsMzUy''@;'; put 'put ''NzAsMzU3OTcsMjU5MTAsMjUxNjMsMzkzMTgsMjM0MzIsMjM1NTEsMjU0ODAsMjE4MDYsMjE0NjMsMzAyNDYsMjA4NjEsMzQwOTIsMjY1MzAsMjY4MDMsMjc1MzAsMjUyMzQsMzY3NTUsMjE0NjAsMzMyOTgsMjgxMTMsMzAwOTUsMjAwNzAsMzYxNzQsMjM0MDgsMjkwODcsMzQyMjMsMjYyNTcs''@;'; put 'put ''MjYzMjksMzI2MjYsMzQ1NjAsNDA2NTMsNDA3MzYsMjM2NDYsMjY0MTUsMzY4NDgsMjY2NDEsMjY0NjMsMjUxMDEsMzE0NDYsMjI2NjEsMjQyNDYsMjU5NjgsMjg0NjUsMzQxNzgsMzQxNzksMzQxODIsMzQxODQsMzQxODUsMzQxODYsMzQxODcsMzQxODgsMzQxODksMzQxOTAsMzQxOTIsMzQx''@;'; put 'put ''OTMsMzQxOTQsMzQxOTUsMzQxOTYsMzQxOTcsMzQxOTgsMzQxOTksMzQyMDAsMzQyMDEsMzQyMDIsMzQyMDUsMzQyMDYsMzQyMDcsMzQyMDgsMzQyMDksMzQyMTAsMzQyMTEsMzQyMTMsMzQyMTQsMzQyMTUsMzQyMTcsMzQyMTksMzQyMjAsMzQyMjEsMzQyMjUsMzQyMjYsMzQyMjcsMzQyMjgs''@;'; put 'put ''MzQyMjksMzQyMzAsMzQyMzIsMzQyMzQsMzQyMzUsMzQyMzYsMzQyMzcsMzQyMzgsMzQyMzksMzQyNDAsMzQyNDIsMzQyNDMsMzQyNDQsMzQyNDUsMzQyNDYsMzQyNDcsMzQyNDgsMzQyNTAsMzQyNTEsMzQyNTIsMzQyNTMsMzQyNTQsMzQyNTcsMzQyNTgsMzQyNjAsMzQyNjIsMzQyNjMsMzQy''@;'; put 'put ''NjQsMzQyNjUsMzQyNjYsMzQyNjcsMzQyNjksMzQyNzAsMzQyNzEsMzQyNzIsMzQyNzMsMzQyNzQsMzQyNzUsMzQyNzcsMzQyNzgsMzQyNzksMzQyODAsMzQyODIsMzQyODMsMzQyODQsMzQyODUsMzQyODYsMzQyODcsMzQyODgsMzQyODksMzQyOTAsMzQyOTEsMzQyOTIsMzQyOTMsMzQyOTQs''@;'; put 'put ''MzQyOTUsMzQyOTYsMjQ2NjEsMjEwNDcsMzI3ODEsMjU2ODQsMzQ5MjgsMjk5OTMsMjQwNjksMjY2NDMsMjUzMzIsMzg2ODQsMjE0NTIsMjkyNDUsMzU4NDEsMjc3MDAsMzA1NjEsMzEyNDYsMjE1NTAsMzA2MzYsMzkwMzQsMzMzMDgsMzU4MjgsMzA4MDUsMjYzODgsMjg4NjUsMjYwMzEsMjU3''@;'; put 'put ''NDksMjIwNzAsMjQ2MDUsMzExNjksMjE0OTYsMTk5OTcsMjc1MTUsMzI5MDIsMjM1NDYsMjE5ODcsMjIyMzUsMjAyODIsMjAyODQsMzkyODIsMjQwNTEsMjY0OTQsMzI4MjQsMjQ1NzgsMzkwNDIsMzY4NjUsMjM0MzUsMzU3NzIsMzU4MjksMjU2MjgsMzMzNjgsMjU4MjIsMjIwMTMsMzM0ODcs''@;'; put 'put ''MzcyMjEsMjA0MzksMzIwMzIsMzY4OTUsMzE5MDMsMjA3MjMsMjI2MDksMjgzMzUsMjM0ODcsMzU3ODUsMzI4OTksMzcyNDAsMzM5NDgsMzE2MzksMzQ0MjksMzg1MzksMzg1NDMsMzI0ODUsMzk2MzUsMzA4NjIsMjM2ODEsMzEzMTksMzY5MzAsMzg1NjcsMzEwNzEsMjMzODUsMjU0MzksMzE0''@;'; put 'put ''OTksMzQwMDEsMjY3OTcsMjE3NjYsMzI1NTMsMjk3MTIsMzIwMzQsMzgxNDUsMjUxNTIsMjI2MDQsMjAxODIsMjM0MjcsMjI5MDUsMjI2MTIsMzQyOTcsMzQyOTgsMzQzMDAsMzQzMDEsMzQzMDIsMzQzMDQsMzQzMDUsMzQzMDYsMzQzMDcsMzQzMDgsMzQzMTAsMzQzMTEsMzQzMTIsMzQzMTMs''@;'; put 'put ''MzQzMTQsMzQzMTUsMzQzMTYsMzQzMTcsMzQzMTgsMzQzMTksMzQzMjAsMzQzMjIsMzQzMjMsMzQzMjQsMzQzMjUsMzQzMjcsMzQzMjgsMzQzMjksMzQzMzAsMzQzMzEsMzQzMzIsMzQzMzMsMzQzMzQsMzQzMzUsMzQzMzYsMzQzMzcsMzQzMzgsMzQzMzksMzQzNDAsMzQzNDEsMzQzNDIsMzQz''@;'; put 'put ''NDQsMzQzNDYsMzQzNDcsMzQzNDgsMzQzNDksMzQzNTAsMzQzNTEsMzQzNTIsMzQzNTMsMzQzNTQsMzQzNTUsMzQzNTYsMzQzNTcsMzQzNTgsMzQzNTksMzQzNjEsMzQzNjIsMzQzNjMsMzQzNjUsMzQzNjYsMzQzNjcsMzQzNjgsMzQzNjksMzQzNzAsMzQzNzEsMzQzNzIsMzQzNzMsMzQzNzQs''@;'; put 'put ''MzQzNzUsMzQzNzYsMzQzNzcsMzQzNzgsMzQzNzksMzQzODAsMzQzODYsMzQzODcsMzQzODksMzQzOTAsMzQzOTEsMzQzOTIsMzQzOTMsMzQzOTUsMzQzOTYsMzQzOTcsMzQzOTksMzQ0MDAsMzQ0MDEsMzQ0MDMsMzQ0MDQsMzQ0MDUsMzQ0MDYsMzQ0MDcsMzQ0MDgsMzQ0MDksMzQ0MTAsMjk1''@;'; put 'put ''NDksMjUzNzQsMzY0MjcsMzYzNjcsMzI5NzQsMzM0OTIsMjUyNjAsMjE0ODgsMjc4ODgsMzcyMTQsMjI4MjYsMjQ1NzcsMjc3NjAsMjIzNDksMjU2NzQsMzYxMzgsMzAyNTEsMjgzOTMsMjIzNjMsMjcyNjQsMzAxOTIsMjg1MjUsMzU4ODUsMzU4NDgsMjIzNzQsMjc2MzEsMzQ5NjIsMzA4OTks''@;'; put 'put ''MjU1MDYsMjE0OTcsMjg4NDUsMjc3NDgsMjI2MTYsMjU2NDIsMjI1MzAsMjY4NDgsMzMxNzksMjE3NzYsMzE5NTgsMjA1MDQsMzY1MzgsMjgxMDgsMzYyNTUsMjg5MDcsMjU0ODcsMjgwNTksMjgzNzIsMzI0ODYsMzM3OTYsMjY2OTEsMzY4NjcsMjgxMjAsMzg1MTgsMzU3NTIsMjI4NzEsMjkz''@;'; put 'put ''MDUsMzQyNzYsMzMxNTAsMzAxNDAsMzU0NjYsMjY3OTksMjEwNzYsMzYzODYsMzgxNjEsMjU1NTIsMzkwNjQsMzY0MjAsMjE4ODQsMjAzMDcsMjYzNjcsMjIxNTksMjQ3ODksMjgwNTMsMjEwNTksMjM2MjUsMjI4MjUsMjgxNTUsMjI2MzUsM2U0LDI5OTgwLDI0Njg0LDMzMzAwLDMzMDk0LDI1''@;'; put 'put ''MzYxLDI2NDY1LDM2ODM0LDMwNTIyLDM2MzM5LDM2MTQ4LDM4MDgxLDI0MDg2LDIxMzgxLDIxNTQ4LDI4ODY3LDM0NDEzLDM0NDE1LDM0NDE2LDM0NDE4LDM0NDE5LDM0NDIwLDM0NDIxLDM0NDIyLDM0NDIzLDM0NDI0LDM0NDM1LDM0NDM2LDM0NDM3LDM0NDM4LDM0NDM5LDM0NDQwLDM0NDQx''@;'; put 'put ''LDM0NDQ2LDM0NDQ3LDM0NDQ4LDM0NDQ5LDM0NDUwLDM0NDUyLDM0NDU0LDM0NDU1LDM0NDU2LDM0NDU3LDM0NDU4LDM0NDU5LDM0NDYyLDM0NDYzLDM0NDY0LDM0NDY1LDM0NDY2LDM0NDY5LDM0NDcwLDM0NDc1LDM0NDc3LDM0NDc4LDM0NDgyLDM0NDgzLDM0NDg3LDM0NDg4LDM0NDg5LDM0''@;'; put 'put ''NDkxLDM0NDkyLDM0NDkzLDM0NDk0LDM0NDk1LDM0NDk3LDM0NDk4LDM0NDk5LDM0NTAxLDM0NTA0LDM0NTA4LDM0NTA5LDM0NTE0LDM0NTE1LDM0NTE3LDM0NTE4LDM0NTE5LDM0NTIyLDM0NTI0LDM0NTI1LDM0NTI4LDM0NTI5LDM0NTMwLDM0NTMxLDM0NTMzLDM0NTM0LDM0NTM1LDM0NTM2''@;'; put 'put ''LDM0NTM4LDM0NTM5LDM0NTQwLDM0NTQzLDM0NTQ5LDM0NTUwLDM0NTUxLDM0NTU0LDM0NTU1LDM0NTU2LDM0NTU3LDM0NTU5LDM0NTYxLDM0NTY0LDM0NTY1LDM0NTY2LDM0NTcxLDM0NTcyLDM0NTc0LDM0NTc1LDM0NTc2LDM0NTc3LDM0NTgwLDM0NTgyLDI3NzEyLDI0MzExLDIwNTcyLDIw''@;'; put 'put ''MTQxLDI0MjM3LDI1NDAyLDMzMzUxLDM2ODkwLDI2NzA0LDM3MjMwLDMwNjQzLDIxNTE2LDM4MTA4LDI0NDIwLDMxNDYxLDI2NzQyLDI1NDEzLDMxNTcwLDMyNDc5LDMwMTcxLDIwNTk5LDI1MjM3LDIyODM2LDM2ODc5LDIwOTg0LDMxMTcxLDMxMzYxLDIyMjcwLDI0NDY2LDM2ODg0LDI4MDM0''@;'; put 'put ''LDIzNjQ4LDIyMzAzLDIxNTIwLDIwODIwLDI4MjM3LDIyMjQyLDI1NTEyLDM5MDU5LDMzMTUxLDM0NTgxLDM1MTE0LDM2ODY0LDIxNTM0LDIzNjYzLDMzMjE2LDI1MzAyLDI1MTc2LDMzMDczLDQwNTAxLDM4NDY0LDM5NTM0LDM5NTQ4LDI2OTI1LDIyOTQ5LDI1Mjk5LDIxODIyLDI1MzY2LDIx''@;'; put 'put ''NzAzLDM0NTIxLDI3OTY0LDIzMDQzLDI5OTI2LDM0OTcyLDI3NDk4LDIyODA2LDM1OTE2LDI0MzY3LDI4Mjg2LDI5NjA5LDM5MDM3LDIwMDI0LDI4OTE5LDIzNDM2LDMwODcxLDI1NDA1LDI2MjAyLDMwMzU4LDI0Nzc5LDIzNDUxLDIzMTEzLDE5OTc1LDMzMTA5LDI3NzU0LDI5NTc5LDIwMTI5''@;'; put 'put ''LDI2NTA1LDMyNTkzLDI0NDQ4LDI2MTA2LDI2Mzk1LDI0NTM2LDIyOTE2LDIzMDQxLDM0NTg1LDM0NTg3LDM0NTg5LDM0NTkxLDM0NTkyLDM0NTk2LDM0NTk4LDM0NTk5LDM0NjAwLDM0NjAyLDM0NjAzLDM0NjA0LDM0NjA1LDM0NjA3LDM0NjA4LDM0NjEwLDM0NjExLDM0NjEzLDM0NjE0LDM0''@;'; put 'put ''NjE2LDM0NjE3LDM0NjE4LDM0NjIwLDM0NjIxLDM0NjI0LDM0NjI1LDM0NjI2LDM0NjI3LDM0NjI4LDM0NjI5LDM0NjMwLDM0NjM0LDM0NjM1LDM0NjM3LDM0NjM5LDM0NjQwLDM0NjQxLDM0NjQyLDM0NjQ0LDM0NjQ1LDM0NjQ2LDM0NjQ4LDM0NjUwLDM0NjUxLDM0NjUyLDM0NjUzLDM0NjU0''@;'; put 'put ''LDM0NjU1LDM0NjU3LDM0NjU4LDM0NjYyLDM0NjYzLDM0NjY0LDM0NjY1LDM0NjY2LDM0NjY3LDM0NjY4LDM0NjY5LDM0NjcxLDM0NjczLDM0Njc0LDM0Njc1LDM0Njc3LDM0Njc5LDM0NjgwLDM0NjgxLDM0NjgyLDM0Njg3LDM0Njg4LDM0Njg5LDM0NjkyLDM0Njk0LDM0Njk1LDM0Njk3LDM0''@;'; put 'put ''Njk4LDM0NzAwLDM0NzAyLDM0NzAzLDM0NzA0LDM0NzA1LDM0NzA2LDM0NzA4LDM0NzA5LDM0NzEwLDM0NzEyLDM0NzEzLDM0NzE0LDM0NzE1LDM0NzE2LDM0NzE3LDM0NzE4LDM0NzIwLDM0NzIxLDM0NzIyLDM0NzIzLDM0NzI0LDI0MDEzLDI0NDk0LDIxMzYxLDM4ODg2LDM2ODI5LDI2Njkz''@;'; put 'put ''LDIyMjYwLDIxODA3LDI0Nzk5LDIwMDI2LDI4NDkzLDMyNTAwLDMzNDc5LDMzODA2LDIyOTk2LDIwMjU1LDIwMjY2LDIzNjE0LDMyNDI4LDI2NDEwLDM0MDc0LDIxNjE5LDMwMDMxLDMyOTYzLDIxODkwLDM5NzU5LDIwMzAxLDI4MjA1LDM1ODU5LDIzNTYxLDI0OTQ0LDIxMzU1LDMwMjM5LDI4''@;'; put 'put ''MjAxLDM0NDQyLDI1OTkxLDM4Mzk1LDMyNDQxLDIxNTYzLDMxMjgzLDMyMDEwLDM4MzgyLDIxOTg1LDMyNzA1LDI5OTM0LDI1MzczLDM0NTgzLDI4MDY1LDMxMzg5LDI1MTA1LDI2MDE3LDIxMzUxLDI1NTY5LDI3Nzc5LDI0MDQzLDIxNTk2LDM4MDU2LDIwMDQ0LDI3NzQ1LDM1ODIwLDIzNjI3''@;'; put 'put ''LDI2MDgwLDMzNDM2LDI2NzkxLDIxNTY2LDIxNTU2LDI3NTk1LDI3NDk0LDIwMTE2LDI1NDEwLDIxMzIwLDMzMzEwLDIwMjM3LDIwMzk4LDIyMzY2LDI1MDk4LDM4NjU0LDI2MjEyLDI5Mjg5LDIxMjQ3LDIxMTUzLDI0NzM1LDM1ODIzLDI2MTMyLDI5MDgxLDI2NTEyLDM1MTk5LDMwODAyLDMw''@;'; put 'put ''NzE3LDI2MjI0LDIyMDc1LDIxNTYwLDM4MTc3LDI5MzA2LDM0NzI1LDM0NzI2LDM0NzI3LDM0NzI5LDM0NzMwLDM0NzM0LDM0NzM2LDM0NzM3LDM0NzM4LDM0NzQwLDM0NzQyLDM0NzQzLDM0NzQ0LDM0NzQ1LDM0NzQ3LDM0NzQ4LDM0NzUwLDM0NzUxLDM0NzUzLDM0NzU0LDM0NzU1LDM0NzU2''@;'; put 'put ''LDM0NzU3LDM0NzU5LDM0NzYwLDM0NzYxLDM0NzY0LDM0NzY1LDM0NzY2LDM0NzY3LDM0NzY4LDM0NzcyLDM0NzczLDM0Nzc0LDM0Nzc1LDM0Nzc2LDM0Nzc3LDM0Nzc4LDM0NzgwLDM0NzgxLDM0NzgyLDM0NzgzLDM0Nzg1LDM0Nzg2LDM0Nzg3LDM0Nzg4LDM0NzkwLDM0NzkxLDM0NzkyLDM0''@;'; put 'put ''NzkzLDM0Nzk1LDM0Nzk2LDM0Nzk3LDM0Nzk5LDM0ODAwLDM0ODAxLDM0ODAyLDM0ODAzLDM0ODA0LDM0ODA1LDM0ODA2LDM0ODA3LDM0ODA4LDM0ODEwLDM0ODExLDM0ODEyLDM0ODEzLDM0ODE1LDM0ODE2LDM0ODE3LDM0ODE4LDM0ODIwLDM0ODIxLDM0ODIyLDM0ODIzLDM0ODI0LDM0ODI1''@;'; put 'put ''LDM0ODI3LDM0ODI4LDM0ODI5LDM0ODMwLDM0ODMxLDM0ODMyLDM0ODMzLDM0ODM0LDM0ODM2LDM0ODM5LDM0ODQwLDM0ODQxLDM0ODQyLDM0ODQ0LDM0ODQ1LDM0ODQ2LDM0ODQ3LDM0ODQ4LDM0ODUxLDMxMjMyLDI0Njg3LDI0MDc2LDI0NzEzLDMzMTgxLDIyODA1LDI0Nzk2LDI5MDYwLDI4''@;'; put 'put ''OTExLDI4MzMwLDI3NzI4LDI5MzEyLDI3MjY4LDM0OTg5LDI0MTA5LDIwMDY0LDIzMjE5LDIxOTE2LDM4MTE1LDI3OTI3LDMxOTk1LDM4NTUzLDI1MTAzLDMyNDU0LDMwNjA2LDM0NDMwLDIxMjgzLDM4Njg2LDM2NzU4LDI2MjQ3LDIzNzc3LDIwMzg0LDI5NDIxLDE5OTc5LDIxNDE0LDIyNzk5''@;'; put 'put ''LDIxNTIzLDI1NDcyLDM4MTg0LDIwODA4LDIwMTg1LDQwMDkyLDMyNDIwLDIxNjg4LDM2MTMyLDM0OTAwLDMzMzM1LDM4Mzg2LDI4MDQ2LDI0MzU4LDIzMjQ0LDI2MTc0LDM4NTA1LDI5NjE2LDI5NDg2LDIxNDM5LDMzMTQ2LDM5MzAxLDMyNjczLDIzNDY2LDM4NTE5LDM4NDgwLDMyNDQ3LDMw''@;'; put 'put ''NDU2LDIxNDEwLDM4MjYyLDM5MzIxLDMxNjY1LDM1MTQwLDI4MjQ4LDIwMDY1LDMyNzI0LDMxMDc3LDM1ODE0LDI0ODE5LDIxNzA5LDIwMTM5LDM5MDMzLDI0MDU1LDI3MjMzLDIwNjg3LDIxNTIxLDM1OTM3LDMzODMxLDMwODEzLDM4NjYwLDIxMDY2LDIxNzQyLDIyMTc5LDM4MTQ0LDI4MDQw''@;'; put 'put ''LDIzNDc3LDI4MTAyLDI2MTk1LDM0ODUyLDM0ODUzLDM0ODU0LDM0ODU1LDM0ODU2LDM0ODU3LDM0ODU4LDM0ODU5LDM0ODYwLDM0ODYxLDM0ODYyLDM0ODYzLDM0ODY0LDM0ODY1LDM0ODY3LDM0ODY4LDM0ODY5LDM0ODcwLDM0ODcxLDM0ODcyLDM0ODc0LDM0ODc1LDM0ODc3LDM0ODc4LDM0''@;'; put 'put ''ODc5LDM0ODgxLDM0ODgyLDM0ODgzLDM0ODg2LDM0ODg3LDM0ODg4LDM0ODg5LDM0ODkwLDM0ODkxLDM0ODk0LDM0ODk1LDM0ODk2LDM0ODk3LDM0ODk4LDM0ODk5LDM0OTAxLDM0OTAyLDM0OTA0LDM0OTA2LDM0OTA3LDM0OTA4LDM0OTA5LDM0OTEwLDM0OTExLDM0OTEyLDM0OTE4LDM0OTE5''@;'; put 'put ''LDM0OTIyLDM0OTI1LDM0OTI3LDM0OTI5LDM0OTMxLDM0OTMyLDM0OTMzLDM0OTM0LDM0OTM2LDM0OTM3LDM0OTM4LDM0OTM5LDM0OTQwLDM0OTQ0LDM0OTQ3LDM0OTUwLDM0OTUxLDM0OTUzLDM0OTU0LDM0OTU2LDM0OTU4LDM0OTU5LDM0OTYwLDM0OTYxLDM0OTYzLDM0OTY0LDM0OTY1LDM0''@;'; put 'put ''OTY3LDM0OTY4LDM0OTY5LDM0OTcwLDM0OTcxLDM0OTczLDM0OTc0LDM0OTc1LDM0OTc2LDM0OTc3LDM0OTc5LDM0OTgxLDM0OTgyLDM0OTgzLDM0OTg0LDM0OTg1LDM0OTg2LDIzNTY3LDIzMzg5LDI2NjU3LDMyOTE4LDIxODgwLDMxNTA1LDI1OTI4LDI2OTY0LDIwMTIzLDI3NDYzLDM0NjM4''@;'; put 'put ''LDM4Nzk1LDIxMzI3LDI1Mzc1LDI1NjU4LDM3MDM0LDI2MDEyLDMyOTYxLDM1ODU2LDIwODg5LDI2ODAwLDIxMzY4LDM0ODA5LDI1MDMyLDI3ODQ0LDI3ODk5LDM1ODc0LDIzNjMzLDM0MjE4LDMzNDU1LDM4MTU2LDI3NDI3LDM2NzYzLDI2MDMyLDI0NTcxLDI0NTE1LDIwNDQ5LDM0ODg1LDI2''@;'; put 'put ''MTQzLDMzMTI1LDI5NDgxLDI0ODI2LDIwODUyLDIxMDA5LDIyNDExLDI0NDE4LDM3MDI2LDM0ODkyLDM3MjY2LDI0MTg0LDI2NDQ3LDI0NjE1LDIyOTk1LDIwODA0LDIwOTgyLDMzMDE2LDIxMjU2LDI3NzY5LDM4NTk2LDI5MDY2LDIwMjQxLDIwNDYyLDMyNjcwLDI2NDI5LDIxOTU3LDM4MTUy''@;'; put 'put ''LDMxMTY4LDM0OTY2LDMyNDgzLDIyNjg3LDI1MTAwLDM4NjU2LDM0Mzk0LDIyMDQwLDM5MDM1LDI0NDY0LDM1NzY4LDMzOTg4LDM3MjA3LDIxNDY1LDI2MDkzLDI0MjA3LDMwMDQ0LDI0Njc2LDMyMTEwLDIzMTY3LDMyNDkwLDMyNDkzLDM2NzEzLDIxOTI3LDIzNDU5LDI0NzQ4LDI2MDU5LDI5''@;'; put 'put ''NTcyLDM0OTg4LDM0OTkwLDM0OTkxLDM0OTkyLDM0OTk0LDM0OTk1LDM0OTk2LDM0OTk3LDM0OTk4LDM1ZTMsMzUwMDEsMzUwMDIsMzUwMDMsMzUwMDUsMzUwMDYsMzUwMDcsMzUwMDgsMzUwMTEsMzUwMTIsMzUwMTUsMzUwMTYsMzUwMTgsMzUwMTksMzUwMjAsMzUwMjEsMzUwMjMsMzUwMjQs''@;'; put 'put ''MzUwMjUsMzUwMjcsMzUwMzAsMzUwMzEsMzUwMzQsMzUwMzUsMzUwMzYsMzUwMzcsMzUwMzgsMzUwNDAsMzUwNDEsMzUwNDYsMzUwNDcsMzUwNDksMzUwNTAsMzUwNTEsMzUwNTIsMzUwNTMsMzUwNTQsMzUwNTUsMzUwNTgsMzUwNjEsMzUwNjIsMzUwNjMsMzUwNjYsMzUwNjcsMzUwNjksMzUw''@;'; put 'put ''NzEsMzUwNzIsMzUwNzMsMzUwNzUsMzUwNzYsMzUwNzcsMzUwNzgsMzUwNzksMzUwODAsMzUwODEsMzUwODMsMzUwODQsMzUwODUsMzUwODYsMzUwODcsMzUwODksMzUwOTIsMzUwOTMsMzUwOTQsMzUwOTUsMzUwOTYsMzUxMDAsMzUxMDEsMzUxMDIsMzUxMDMsMzUxMDQsMzUxMDYsMzUxMDcs''@;'; put 'put ''MzUxMDgsMzUxMTAsMzUxMTEsMzUxMTIsMzUxMTMsMzUxMTYsMzUxMTcsMzUxMTgsMzUxMTksMzUxMjEsMzUxMjIsMzUxMjMsMzUxMjUsMzUxMjcsMzY4NzMsMzAzMDcsMzA1MDUsMzI0NzQsMzg3NzIsMzQyMDMsMjMzOTgsMzEzNDgsMzg2MzQsMzQ4ODAsMjExOTUsMjkwNzEsMjQ0OTAsMjYw''@;'; put 'put ''OTIsMzU4MTAsMjM1NDcsMzk1MzUsMjQwMzMsMjc1MjksMjc3MzksMzU3NTcsMzU3NTksMzY4NzQsMzY4MDUsMjEzODcsMjUyNzYsNDA0ODYsNDA0OTMsMjE1NjgsMjAwMTEsMzM0NjksMjkyNzMsMzQ0NjAsMjM4MzAsMzQ5MDUsMjgwNzksMzg1OTcsMjE3MTMsMjAxMjIsMzU3NjYsMjg5Mzcs''@;'; put 'put ''MjE2OTMsMzg0MDksMjg4OTUsMjgxNTMsMzA0MTYsMjAwMDUsMzA3NDAsMzQ1NzgsMjM3MjEsMjQzMTAsMzUzMjgsMzkwNjgsMzg0MTQsMjg4MTQsMjc4MzksMjI4NTIsMjU1MTMsMzA1MjQsMzQ4OTMsMjg0MzYsMzMzOTUsMjI1NzYsMjkxNDEsMjEzODgsMzA3NDYsMzg1OTMsMjE3NjEsMjQ0''@;'; put 'put ''MjIsMjg5NzYsMjM0NzYsMzU4NjYsMzk1NjQsMjc1MjMsMjI4MzAsNDA0OTUsMzEyMDcsMjY0NzIsMjUxOTYsMjAzMzUsMzAxMTMsMzI2NTAsMjc5MTUsMzg0NTEsMjc2ODcsMjAyMDgsMzAxNjIsMjA4NTksMjY2NzksMjg0NzgsMzY5OTIsMzMxMzYsMjI5MzQsMjk4MTQsMzUxMjgsMzUxMjks''@;'; put 'put ''MzUxMzAsMzUxMzEsMzUxMzIsMzUxMzMsMzUxMzQsMzUxMzUsMzUxMzYsMzUxMzgsMzUxMzksMzUxNDEsMzUxNDIsMzUxNDMsMzUxNDQsMzUxNDUsMzUxNDYsMzUxNDcsMzUxNDgsMzUxNDksMzUxNTAsMzUxNTEsMzUxNTIsMzUxNTMsMzUxNTQsMzUxNTUsMzUxNTYsMzUxNTcsMzUxNTgsMzUx''@;'; put 'put ''NTksMzUxNjAsMzUxNjEsMzUxNjIsMzUxNjMsMzUxNjQsMzUxNjUsMzUxNjgsMzUxNjksMzUxNzAsMzUxNzEsMzUxNzIsMzUxNzMsMzUxNzUsMzUxNzYsMzUxNzcsMzUxNzgsMzUxNzksMzUxODAsMzUxODEsMzUxODIsMzUxODMsMzUxODQsMzUxODUsMzUxODYsMzUxODcsMzUxODgsMzUxODks''@;'; put 'put ''MzUxOTAsMzUxOTEsMzUxOTIsMzUxOTMsMzUxOTQsMzUxOTYsMzUxOTcsMzUxOTgsMzUyMDAsMzUyMDIsMzUyMDQsMzUyMDUsMzUyMDcsMzUyMDgsMzUyMDksMzUyMTAsMzUyMTEsMzUyMTIsMzUyMTMsMzUyMTQsMzUyMTUsMzUyMTYsMzUyMTcsMzUyMTgsMzUyMTksMzUyMjAsMzUyMjEsMzUy''@;'; put 'put ''MjIsMzUyMjMsMzUyMjQsMzUyMjUsMzUyMjYsMzUyMjcsMzUyMjgsMzUyMjksMzUyMzAsMzUyMzEsMzUyMzIsMzUyMzMsMjU2NzEsMjM1OTEsMzY5NjUsMzEzNzcsMzU4NzUsMjMwMDIsMjE2NzYsMzMyODAsMzM2NDcsMzUyMDEsMzI3NjgsMjY5MjgsMjIwOTQsMzI4MjIsMjkyMzksMzczMjYs''@;'; put 'put ''MjA5MTgsMjAwNjMsMzkwMjksMjU0OTQsMTk5OTQsMjE0OTQsMjYzNTUsMzMwOTksMjI4MTIsMjgwODIsMTk5NjgsMjI3NzcsMjEzMDcsMjU1NTgsMzgxMjksMjAzODEsMjAyMzQsMzQ5MTUsMzkwNTYsMjI4MzksMzY5NTEsMzEyMjcsMjAyMDIsMzMwMDgsMzAwOTcsMjc3NzgsMjM0NTIsMjMw''@;'; put 'put ''MTYsMjQ0MTMsMjY4ODUsMzQ0MzMsMjA1MDYsMjQwNTAsMjAwNTcsMzA2OTEsMjAxOTcsMzM0MDIsMjUyMzMsMjYxMzEsMzcwMDksMjM2NzMsMjAxNTksMjQ0NDEsMzMyMjIsMzY5MjAsMzI5MDAsMzAxMjMsMjAxMzQsMzUwMjgsMjQ4NDcsMjc1ODksMjQ1MTgsMjAwNDEsMzA0MTAsMjgzMjIs''@;'; put 'put ''MzU4MTEsMzU3NTgsMzU4NTAsMzU3OTMsMjQzMjIsMzI3NjQsMzI3MTYsMzI0NjIsMzM1ODksMzM2NDMsMjIyNDAsMjc1NzUsMzg4OTksMzg0NTIsMjMwMzUsMjE1MzUsMzgxMzQsMjgxMzksMjM0OTMsMzkyNzgsMjM2MDksMjQzNDEsMzg1NDQsMzUyMzQsMzUyMzUsMzUyMzYsMzUyMzcsMzUy''@;'; put 'put ''MzgsMzUyMzksMzUyNDAsMzUyNDEsMzUyNDIsMzUyNDMsMzUyNDQsMzUyNDUsMzUyNDYsMzUyNDcsMzUyNDgsMzUyNDksMzUyNTAsMzUyNTEsMzUyNTIsMzUyNTMsMzUyNTQsMzUyNTUsMzUyNTYsMzUyNTcsMzUyNTgsMzUyNTksMzUyNjAsMzUyNjEsMzUyNjIsMzUyNjMsMzUyNjQsMzUyNjcs''@;'; put 'put ''MzUyNzcsMzUyODMsMzUyODQsMzUyODUsMzUyODcsMzUyODgsMzUyODksMzUyOTEsMzUyOTMsMzUyOTUsMzUyOTYsMzUyOTcsMzUyOTgsMzUzMDAsMzUzMDMsMzUzMDQsMzUzMDUsMzUzMDYsMzUzMDgsMzUzMDksMzUzMTAsMzUzMTIsMzUzMTMsMzUzMTQsMzUzMTYsMzUzMTcsMzUzMTgsMzUz''@;'; put 'put ''MTksMzUzMjAsMzUzMjEsMzUzMjIsMzUzMjMsMzUzMjQsMzUzMjUsMzUzMjYsMzUzMjcsMzUzMjksMzUzMzAsMzUzMzEsMzUzMzIsMzUzMzMsMzUzMzQsMzUzMzYsMzUzMzcsMzUzMzgsMzUzMzksMzUzNDAsMzUzNDEsMzUzNDIsMzUzNDMsMzUzNDQsMzUzNDUsMzUzNDYsMzUzNDcsMzUzNDgs''@;'; put 'put ''MzUzNDksMzUzNTAsMzUzNTEsMzUzNTIsMzUzNTMsMzUzNTQsMzUzNTUsMzUzNTYsMzUzNTcsMjEzNjAsMzM1MjEsMjcxODUsMjMxNTYsNDA1NjAsMjQyMTIsMzI1NTIsMzM3MjEsMzM4MjgsMzM4MjksMzM2MzksMzQ2MzEsMzY4MTQsMzYxOTQsMzA0MDgsMjQ0MzMsMzkwNjIsMzA4MjgsMjYx''@;'; put 'put ''NDQsMjE3MjcsMjUzMTcsMjAzMjMsMzMyMTksMzAxNTIsMjQyNDgsMzg2MDUsMzYzNjIsMzQ1NTMsMjE2NDcsMjc4OTEsMjgwNDQsMjc3MDQsMjQ3MDMsMjExOTEsMjk5OTIsMjQxODksMjAyNDgsMjQ3MzYsMjQ1NTEsMjM1ODgsMzAwMDEsMzcwMzgsMzgwODAsMjkzNjksMjc4MzMsMjgyMTYs''@;'; put 'put ''MzcxOTMsMjYzNzcsMjE0NTEsMjE0OTEsMjAzMDUsMzczMjEsMzU4MjUsMjE0NDgsMjQxODgsMzY4MDIsMjgxMzIsMjAxMTAsMzA0MDIsMjcwMTQsMzQzOTgsMjQ4NTgsMzMyODYsMjAzMTMsMjA0NDYsMzY5MjYsNDAwNjAsMjQ4NDEsMjgxODksMjgxODAsMzg1MzMsMjAxMDQsMjMwODksMzg2''@;'; put 'put ''MzIsMTk5ODIsMjM2NzksMzExNjEsMjM0MzEsMzU4MjEsMzI3MDEsMjk1NzcsMjI0OTUsMzM0MTksMzcwNTcsMjE1MDUsMzY5MzUsMjE5NDcsMjM3ODYsMjQ0ODEsMjQ4NDAsMjc0NDIsMjk0MjUsMzI5NDYsMzU0NjUsMzUzNTgsMzUzNTksMzUzNjAsMzUzNjEsMzUzNjIsMzUzNjMsMzUzNjQs''@;'; put 'put ''MzUzNjUsMzUzNjYsMzUzNjcsMzUzNjgsMzUzNjksMzUzNzAsMzUzNzEsMzUzNzIsMzUzNzMsMzUzNzQsMzUzNzUsMzUzNzYsMzUzNzcsMzUzNzgsMzUzNzksMzUzODAsMzUzODEsMzUzODIsMzUzODMsMzUzODQsMzUzODUsMzUzODYsMzUzODcsMzUzODgsMzUzODksMzUzOTEsMzUzOTIsMzUz''@;'; put 'put ''OTMsMzUzOTQsMzUzOTUsMzUzOTYsMzUzOTcsMzUzOTgsMzUzOTksMzU0MDEsMzU0MDIsMzU0MDMsMzU0MDQsMzU0MDUsMzU0MDYsMzU0MDcsMzU0MDgsMzU0MDksMzU0MTAsMzU0MTEsMzU0MTIsMzU0MTMsMzU0MTQsMzU0MTUsMzU0MTYsMzU0MTcsMzU0MTgsMzU0MTksMzU0MjAsMzU0MjEs''@;'; put 'put ''MzU0MjIsMzU0MjMsMzU0MjQsMzU0MjUsMzU0MjYsMzU0MjcsMzU0MjgsMzU0MjksMzU0MzAsMzU0MzEsMzU0MzIsMzU0MzMsMzU0MzQsMzU0MzUsMzU0MzYsMzU0MzcsMzU0MzgsMzU0MzksMzU0NDAsMzU0NDEsMzU0NDIsMzU0NDMsMzU0NDQsMzU0NDUsMzU0NDYsMzU0NDcsMzU0NDgsMzU0''@;'; put 'put ''NTAsMzU0NTEsMzU0NTIsMzU0NTMsMzU0NTQsMzU0NTUsMzU0NTYsMjgwMjAsMjM1MDcsMzUwMjksMzkwNDQsMzU5NDcsMzk1MzMsNDA0OTksMjgxNzAsMjA5MDAsMjA4MDMsMjI0MzUsMzQ5NDUsMjE0MDcsMjU1ODgsMzY3NTcsMjIyNTMsMjE1OTIsMjIyNzgsMjk1MDMsMjgzMDQsMzI1MzYs''@;'; put 'put ''MzY4MjgsMzM0ODksMjQ4OTUsMjQ2MTYsMzg0OTgsMjYzNTIsMzI0MjIsMzYyMzQsMzYyOTEsMzgwNTMsMjM3MzEsMzE5MDgsMjYzNzYsMjQ3NDIsMzg0MDUsMzI3OTIsMjAxMTMsMzcwOTUsMjEyNDgsMzg1MDQsMjA4MDEsMzY4MTYsMzQxNjQsMzcyMTMsMjYxOTcsMzg5MDEsMjMzODEsMjEy''@;'; put 'put ''NzcsMzA3NzYsMjY0MzQsMjY2ODUsMjE3MDUsMjg3OTgsMjM0NzIsMzY3MzMsMjA4NzcsMjIzMTIsMjE2ODEsMjU4NzQsMjYyNDIsMzYxOTAsMzYxNjMsMzMwMzksMzM5MDAsMzY5NzMsMzE5NjcsMjA5OTEsMzQyOTksMjY1MzEsMjYwODksMjg1NzcsMzQ0NjgsMzY0ODEsMjIxMjIsMzY4OTYs''@;'; put 'put ''MzAzMzgsMjg3OTAsMjkxNTcsMzYxMzEsMjUzMjEsMjEwMTcsMjc5MDEsMzYxNTYsMjQ1OTAsMjI2ODYsMjQ5NzQsMjYzNjYsMzYxOTIsMjUxNjYsMjE5MzksMjgxOTUsMjY0MTMsMzY3MTEsMzU0NTcsMzU0NTgsMzU0NTksMzU0NjAsMzU0NjEsMzU0NjIsMzU0NjMsMzU0NjQsMzU0NjcsMzU0''@;'; put 'put ''NjgsMzU0NjksMzU0NzAsMzU0NzEsMzU0NzIsMzU0NzMsMzU0NzQsMzU0NzYsMzU0NzcsMzU0NzgsMzU0NzksMzU0ODAsMzU0ODEsMzU0ODIsMzU0ODMsMzU0ODQsMzU0ODUsMzU0ODYsMzU0ODcsMzU0ODgsMzU0ODksMzU0OTAsMzU0OTEsMzU0OTIsMzU0OTMsMzU0OTQsMzU0OTUsMzU0OTYs''@;'; put 'put ''MzU0OTcsMzU0OTgsMzU0OTksMzU1MDAsMzU1MDEsMzU1MDIsMzU1MDMsMzU1MDQsMzU1MDUsMzU1MDYsMzU1MDcsMzU1MDgsMzU1MDksMzU1MTAsMzU1MTEsMzU1MTIsMzU1MTMsMzU1MTQsMzU1MTUsMzU1MTYsMzU1MTcsMzU1MTgsMzU1MTksMzU1MjAsMzU1MjEsMzU1MjIsMzU1MjMsMzU1''@;'; put 'put ''MjQsMzU1MjUsMzU1MjYsMzU1MjcsMzU1MjgsMzU1MjksMzU1MzAsMzU1MzEsMzU1MzIsMzU1MzMsMzU1MzQsMzU1MzUsMzU1MzYsMzU1MzcsMzU1MzgsMzU1MzksMzU1NDAsMzU1NDEsMzU1NDIsMzU1NDMsMzU1NDQsMzU1NDUsMzU1NDYsMzU1NDcsMzU1NDgsMzU1NDksMzU1NTAsMzU1NTEs''@;'; put 'put ''MzU1NTIsMzU1NTMsMzU1NTQsMzU1NTUsMzgxMTMsMzgzOTIsMzA1MDQsMjY2MjksMjcwNDgsMjE2NDMsMjAwNDUsMjg4NTYsMzU3ODQsMjU2ODgsMjU5OTUsMjM0MjksMzEzNjQsMjA1MzgsMjM1MjgsMzA2NTEsMjc2MTcsMzU0NDksMzE4OTYsMjc4MzgsMzA0MTUsMjYwMjUsMzY3NTksMjM4''@;'; put 'put ''NTMsMjM2MzcsMzQzNjAsMjY2MzIsMjEzNDQsMjUxMTIsMzE0NDksMjgyNTEsMzI1MDksMjcxNjcsMzE0NTYsMjQ0MzIsMjg0NjcsMjQzNTIsMjU0ODQsMjgwNzIsMjY0NTQsMTk5NzYsMjQwODAsMzYxMzQsMjAxODMsMzI5NjAsMzAyNjAsMzg1NTYsMjUzMDcsMjYxNTcsMjUyMTQsMjc4MzYs''@;'; put 'put ''MzYyMTMsMjkwMzEsMzI2MTcsMjA4MDYsMzI5MDMsMjE0ODQsMzY5NzQsMjUyNDAsMjE3NDYsMzQ1NDQsMzY3NjEsMzI3NzMsMzgxNjcsMzQwNzEsMzY4MjUsMjc5OTMsMjk2NDUsMjYwMTUsMzA0OTUsMjk5NTYsMzA3NTksMzMyNzUsMzYxMjYsMzgwMjQsMjAzOTAsMjY1MTcsMzAxMzcsMzU3''@;'; put 'put ''ODYsMzg2NjMsMjUzOTEsMzgyMTUsMzg0NTMsMzM5NzYsMjUzNzksMzA1MjksMjQ0NDksMjk0MjQsMjAxMDUsMjQ1OTYsMjU5NzIsMjUzMjcsMjc0OTEsMjU5MTksMzU1NTYsMzU1NTcsMzU1NTgsMzU1NTksMzU1NjAsMzU1NjEsMzU1NjIsMzU1NjMsMzU1NjQsMzU1NjUsMzU1NjYsMzU1Njcs''@;'; put 'put ''MzU1NjgsMzU1NjksMzU1NzAsMzU1NzEsMzU1NzIsMzU1NzMsMzU1NzQsMzU1NzUsMzU1NzYsMzU1NzcsMzU1NzgsMzU1NzksMzU1ODAsMzU1ODEsMzU1ODIsMzU1ODMsMzU1ODQsMzU1ODUsMzU1ODYsMzU1ODcsMzU1ODgsMzU1ODksMzU1OTAsMzU1OTIsMzU1OTMsMzU1OTQsMzU1OTUsMzU1''@;'; put 'put ''OTYsMzU1OTcsMzU1OTgsMzU1OTksMzU2MDAsMzU2MDEsMzU2MDIsMzU2MDMsMzU2MDQsMzU2MDUsMzU2MDYsMzU2MDcsMzU2MDgsMzU2MDksMzU2MTAsMzU2MTEsMzU2MTIsMzU2MTMsMzU2MTQsMzU2MTUsMzU2MTYsMzU2MTcsMzU2MTgsMzU2MTksMzU2MjAsMzU2MjEsMzU2MjMsMzU2MjQs''@;'; put 'put ''MzU2MjUsMzU2MjYsMzU2MjcsMzU2MjgsMzU2MjksMzU2MzAsMzU2MzEsMzU2MzIsMzU2MzMsMzU2MzQsMzU2MzUsMzU2MzYsMzU2MzcsMzU2MzgsMzU2MzksMzU2NDAsMzU2NDEsMzU2NDIsMzU2NDMsMzU2NDQsMzU2NDUsMzU2NDYsMzU2NDcsMzU2NDgsMzU2NDksMzU2NTAsMzU2NTEsMzU2''@;'; put 'put ''NTIsMzU2NTMsMjQxMDMsMzAxNTEsMzcwNzMsMzU3NzcsMzM0MzcsMjY1MjUsMjU5MDMsMjE1NTMsMzQ1ODQsMzA2OTMsMzI5MzAsMzMwMjYsMjc3MTMsMjAwNDMsMzI0NTUsMzI4NDQsMzA0NTIsMjY4OTMsMjc1NDIsMjUxOTEsMjA1NDAsMjAzNTYsMjIzMzYsMjUzNTEsMjc0OTAsMzYyODYs''@;'; put 'put ''MjE0ODIsMjYwODgsMzI0NDAsMjQ1MzUsMjUzNzAsMjU1MjcsMzMyNjcsMzMyNjgsMzI2MjIsMjQwOTIsMjM3NjksMjEwNDYsMjYyMzQsMzEyMDksMzEyNTgsMzYxMzYsMjg4MjUsMzAxNjQsMjgzODIsMjc4MzUsMzEzNzgsMjAwMTMsMzA0MDUsMjQ1NDQsMzgwNDcsMzQ5MzUsMzI0NTYsMzEx''@;'; put 'put ''ODEsMzI5NTksMzczMjUsMjAyMTAsMjAyNDcsMzMzMTEsMjE2MDgsMjQwMzAsMjc5NTQsMzU3ODgsMzE5MDksMzY3MjQsMzI5MjAsMjQwOTAsMjE2NTAsMzAzODUsMjM0NDksMjYxNzIsMzk1ODgsMjk2NjQsMjY2NjYsMzQ1MjMsMjY0MTcsMjk0ODIsMzU4MzIsMzU4MDMsMzY4ODAsMzE0ODEs''@;'; put 'put ''Mjg4OTEsMjkwMzgsMjUyODQsMzA2MzMsMjIwNjUsMjAwMjcsMzM4NzksMjY2MDksMjExNjEsMzQ0OTYsMzYxNDIsMzgxMzYsMzE1NjksMzU2NTQsMzU2NTUsMzU2NTYsMzU2NTcsMzU2NTgsMzU2NTksMzU2NjAsMzU2NjEsMzU2NjIsMzU2NjMsMzU2NjQsMzU2NjUsMzU2NjYsMzU2NjcsMzU2''@;'; put 'put ''NjgsMzU2NjksMzU2NzAsMzU2NzEsMzU2NzIsMzU2NzMsMzU2NzQsMzU2NzUsMzU2NzYsMzU2NzcsMzU2NzgsMzU2NzksMzU2ODAsMzU2ODEsMzU2ODIsMzU2ODMsMzU2ODQsMzU2ODUsMzU2ODcsMzU2ODgsMzU2ODksMzU2OTAsMzU2OTEsMzU2OTMsMzU2OTQsMzU2OTUsMzU2OTYsMzU2OTcs''@;'; put 'put ''MzU2OTgsMzU2OTksMzU3MDAsMzU3MDEsMzU3MDIsMzU3MDMsMzU3MDQsMzU3MDUsMzU3MDYsMzU3MDcsMzU3MDgsMzU3MDksMzU3MTAsMzU3MTEsMzU3MTIsMzU3MTMsMzU3MTQsMzU3MTUsMzU3MTYsMzU3MTcsMzU3MTgsMzU3MTksMzU3MjAsMzU3MjEsMzU3MjIsMzU3MjMsMzU3MjQsMzU3''@;'; put 'put ''MjUsMzU3MjYsMzU3MjcsMzU3MjgsMzU3MjksMzU3MzAsMzU3MzEsMzU3MzIsMzU3MzMsMzU3MzQsMzU3MzUsMzU3MzYsMzU3MzcsMzU3MzgsMzU3MzksMzU3NDAsMzU3NDEsMzU3NDIsMzU3NDMsMzU3NTYsMzU3NjEsMzU3NzEsMzU3ODMsMzU3OTIsMzU4MTgsMzU4NDksMzU4NzAsMjAzMDMs''@;'; put 'put ''Mjc4ODAsMzEwNjksMzk1NDcsMjUyMzUsMjkyMjYsMjUzNDEsMTk5ODcsMzA3NDIsMzY3MTYsMjU3NzYsMzYxODYsMzE2ODYsMjY3MjksMjQxOTYsMzUwMTMsMjI5MTgsMjU3NTgsMjI3NjYsMjkzNjYsMjY4OTQsMzgxODEsMzY4NjEsMzYxODQsMjIzNjgsMzI1MTIsMzU4NDYsMjA5MzQsMjU0''@;'; put 'put ''MTcsMjUzMDUsMjEzMzEsMjY3MDAsMjk3MzAsMzM1MzcsMzcxOTYsMjE4MjgsMzA1MjgsMjg3OTYsMjc5NzgsMjA4NTcsMjE2NzIsMzYxNjQsMjMwMzksMjgzNjMsMjgxMDAsMjMzODgsMzIwNDMsMjAxODAsMzE4NjksMjgzNzEsMjMzNzYsMzMyNTgsMjgxNzMsMjMzODMsMzk2ODMsMjY4Mzcs''@;'; put 'put ''MzYzOTQsMjM0NDcsMzI1MDgsMjQ2MzUsMzI0MzcsMzcwNDksMzYyMDgsMjI4NjMsMjU1NDksMzExOTksMzYyNzUsMjEzMzAsMjYwNjMsMzEwNjIsMzU3ODEsMzg0NTksMzI0NTIsMzgwNzUsMzIzODYsMjIwNjgsMzcyNTcsMjYzNjgsMzI2MTgsMjM1NjIsMzY5ODEsMjYxNTIsMjQwMzgsMjAz''@;'; put 'put ''MDQsMjY1OTAsMjA1NzAsMjAzMTYsMjIzNTIsMjQyMzEsNTk0MDgsNTk0MDksNTk0MTAsNTk0MTEsNTk0MTIsMzU4OTYsMzU4OTcsMzU4OTgsMzU4OTksMzU5MDAsMzU5MDEsMzU5MDIsMzU5MDMsMzU5MDQsMzU5MDYsMzU5MDcsMzU5MDgsMzU5MDksMzU5MTIsMzU5MTQsMzU5MTUsMzU5MTcs''@;'; put 'put ''MzU5MTgsMzU5MTksMzU5MjAsMzU5MjEsMzU5MjIsMzU5MjMsMzU5MjQsMzU5MjYsMzU5MjcsMzU5MjgsMzU5MjksMzU5MzEsMzU5MzIsMzU5MzMsMzU5MzQsMzU5MzUsMzU5MzYsMzU5MzksMzU5NDAsMzU5NDEsMzU5NDIsMzU5NDMsMzU5NDQsMzU5NDUsMzU5NDgsMzU5NDksMzU5NTAsMzU5''@;'; put 'put ''NTEsMzU5NTIsMzU5NTMsMzU5NTQsMzU5NTYsMzU5NTcsMzU5NTgsMzU5NTksMzU5NjMsMzU5NjQsMzU5NjUsMzU5NjYsMzU5NjcsMzU5NjgsMzU5NjksMzU5NzEsMzU5NzIsMzU5NzQsMzU5NzUsMzU5NzYsMzU5NzksMzU5ODEsMzU5ODIsMzU5ODMsMzU5ODQsMzU5ODUsMzU5ODYsMzU5ODcs''@;'; put 'put ''MzU5ODksMzU5OTAsMzU5OTEsMzU5OTMsMzU5OTQsMzU5OTUsMzU5OTYsMzU5OTcsMzU5OTgsMzU5OTksMzZlMywzNjAwMSwzNjAwMiwzNjAwMywzNjAwNCwzNjAwNSwzNjAwNiwzNjAwNywzNjAwOCwzNjAwOSwzNjAxMCwzNjAxMSwzNjAxMiwzNjAxMywyMDEwOSwxOTk4MCwyMDgwMCwxOTk4''@;'; put 'put ''NCwyNDMxOSwyMTMxNywxOTk4OSwyMDEyMCwxOTk5OCwzOTczMCwyMzQwNCwyMjEyMSwyMDAwOCwzMTE2MiwyMDAzMSwyMTI2OSwyMDAzOSwyMjgyOSwyOTI0MywyMTM1OCwyNzY2NCwyMjIzOSwzMjk5NiwzOTMxOSwyNzYwMywzMDU5MCw0MDcyNywyMDAyMiwyMDEyNyw0MDcyMCwyMDA2MCwy''@;'; put 'put ''MDA3MywyMDExNSwzMzQxNiwyMzM4NywyMTg2OCwyMjAzMSwyMDE2NCwyMTM4OSwyMTQwNSwyMTQxMSwyMTQxMywyMTQyMiwzODc1NywzNjE4OSwyMTI3NCwyMTQ5MywyMTI4NiwyMTI5NCwyMTMxMCwzNjE4OCwyMTM1MCwyMTM0NywyMDk5NCwyMWUzLDIxMDA2LDIxMDM3LDIxMDQzLDIxMDU1''@;'; put 'put ''LDIxMDU2LDIxMDY4LDIxMDg2LDIxMDg5LDIxMDg0LDMzOTY3LDIxMTE3LDIxMTIyLDIxMTIxLDIxMTM2LDIxMTM5LDIwODY2LDMyNTk2LDIwMTU1LDIwMTYzLDIwMTY5LDIwMTYyLDIwMjAwLDIwMTkzLDIwMjAzLDIwMTkwLDIwMjUxLDIwMjExLDIwMjU4LDIwMzI0LDIwMjEzLDIwMjYxLDIw''@;'; put 'put ''MjYzLDIwMjMzLDIwMjY3LDIwMzE4LDIwMzI3LDI1OTEyLDIwMzE0LDIwMzE3LDM2MDE0LDM2MDE1LDM2MDE2LDM2MDE3LDM2MDE4LDM2MDE5LDM2MDIwLDM2MDIxLDM2MDIyLDM2MDIzLDM2MDI0LDM2MDI1LDM2MDI2LDM2MDI3LDM2MDI4LDM2MDI5LDM2MDMwLDM2MDMxLDM2MDMyLDM2MDMz''@;'; put 'put ''LDM2MDM0LDM2MDM1LDM2MDM2LDM2MDM3LDM2MDM4LDM2MDM5LDM2MDQwLDM2MDQxLDM2MDQyLDM2MDQzLDM2MDQ0LDM2MDQ1LDM2MDQ2LDM2MDQ3LDM2MDQ4LDM2MDQ5LDM2MDUwLDM2MDUxLDM2MDUyLDM2MDUzLDM2MDU0LDM2MDU1LDM2MDU2LDM2MDU3LDM2MDU4LDM2MDU5LDM2MDYwLDM2''@;'; put 'put ''MDYxLDM2MDYyLDM2MDYzLDM2MDY0LDM2MDY1LDM2MDY2LDM2MDY3LDM2MDY4LDM2MDY5LDM2MDcwLDM2MDcxLDM2MDcyLDM2MDczLDM2MDc0LDM2MDc1LDM2MDc2LDM2MDc3LDM2MDc4LDM2MDc5LDM2MDgwLDM2MDgxLDM2MDgyLDM2MDgzLDM2MDg0LDM2MDg1LDM2MDg2LDM2MDg3LDM2MDg4''@;'; put 'put ''LDM2MDg5LDM2MDkwLDM2MDkxLDM2MDkyLDM2MDkzLDM2MDk0LDM2MDk1LDM2MDk2LDM2MDk3LDM2MDk4LDM2MDk5LDM2MTAwLDM2MTAxLDM2MTAyLDM2MTAzLDM2MTA0LDM2MTA1LDM2MTA2LDM2MTA3LDM2MTA4LDM2MTA5LDIwMzE5LDIwMzExLDIwMjc0LDIwMjg1LDIwMzQyLDIwMzQwLDIw''@;'; put 'put ''MzY5LDIwMzYxLDIwMzU1LDIwMzY3LDIwMzUwLDIwMzQ3LDIwMzk0LDIwMzQ4LDIwMzk2LDIwMzcyLDIwNDU0LDIwNDU2LDIwNDU4LDIwNDIxLDIwNDQyLDIwNDUxLDIwNDQ0LDIwNDMzLDIwNDQ3LDIwNDcyLDIwNTIxLDIwNTU2LDIwNDY3LDIwNTI0LDIwNDk1LDIwNTI2LDIwNTI1LDIwNDc4''@;'; put 'put ''LDIwNTA4LDIwNDkyLDIwNTE3LDIwNTIwLDIwNjA2LDIwNTQ3LDIwNTY1LDIwNTUyLDIwNTU4LDIwNTg4LDIwNjAzLDIwNjQ1LDIwNjQ3LDIwNjQ5LDIwNjY2LDIwNjk0LDIwNzQyLDIwNzE3LDIwNzE2LDIwNzEwLDIwNzE4LDIwNzQzLDIwNzQ3LDIwMTg5LDI3NzA5LDIwMzEyLDIwMzI1LDIw''@;'; put 'put ''NDMwLDQwODY0LDI3NzE4LDMxODYwLDIwODQ2LDI0MDYxLDQwNjQ5LDM5MzIwLDIwODY1LDIyODA0LDIxMjQxLDIxMjYxLDM1MzM1LDIxMjY0LDIwOTcxLDIyODA5LDIwODIxLDIwMTI4LDIwODIyLDIwMTQ3LDM0OTI2LDM0OTgwLDIwMTQ5LDMzMDQ0LDM1MDI2LDMxMTA0LDIzMzQ4LDM0ODE5''@;'; put 'put ''LDMyNjk2LDIwOTA3LDIwOTEzLDIwOTI1LDIwOTI0LDM2MTEwLDM2MTExLDM2MTEyLDM2MTEzLDM2MTE0LDM2MTE1LDM2MTE2LDM2MTE3LDM2MTE4LDM2MTE5LDM2MTIwLDM2MTIxLDM2MTIyLDM2MTIzLDM2MTI0LDM2MTI4LDM2MTc3LDM2MTc4LDM2MTgzLDM2MTkxLDM2MTk3LDM2MjAwLDM2''@;'; put 'put ''MjAxLDM2MjAyLDM2MjA0LDM2MjA2LDM2MjA3LDM2MjA5LDM2MjEwLDM2MjE2LDM2MjE3LDM2MjE4LDM2MjE5LDM2MjIwLDM2MjIxLDM2MjIyLDM2MjIzLDM2MjI0LDM2MjI2LDM2MjI3LDM2MjMwLDM2MjMxLDM2MjMyLDM2MjMzLDM2MjM2LDM2MjM3LDM2MjM4LDM2MjM5LDM2MjQwLDM2MjQy''@;'; put 'put ''LDM2MjQzLDM2MjQ1LDM2MjQ2LDM2MjQ3LDM2MjQ4LDM2MjQ5LDM2MjUwLDM2MjUxLDM2MjUyLDM2MjUzLDM2MjU0LDM2MjU2LDM2MjU3LDM2MjU4LDM2MjYwLDM2MjYxLDM2MjYyLDM2MjYzLDM2MjY0LDM2MjY1LDM2MjY2LDM2MjY3LDM2MjY4LDM2MjY5LDM2MjcwLDM2MjcxLDM2MjcyLDM2''@;'; put 'put ''Mjc0LDM2Mjc4LDM2Mjc5LDM2MjgxLDM2MjgzLDM2Mjg1LDM2Mjg4LDM2Mjg5LDM2MjkwLDM2MjkzLDM2Mjk1LDM2Mjk2LDM2Mjk3LDM2Mjk4LDM2MzAxLDM2MzA0LDM2MzA2LDM2MzA3LDM2MzA4LDIwOTM1LDIwODg2LDIwODk4LDIwOTAxLDM1NzQ0LDM1NzUwLDM1NzUxLDM1NzU0LDM1NzY0''@;'; put 'put ''LDM1NzY1LDM1NzY3LDM1Nzc4LDM1Nzc5LDM1Nzg3LDM1NzkxLDM1NzkwLDM1Nzk0LDM1Nzk1LDM1Nzk2LDM1Nzk4LDM1ODAwLDM1ODAxLDM1ODA0LDM1ODA3LDM1ODA4LDM1ODEyLDM1ODE2LDM1ODE3LDM1ODIyLDM1ODI0LDM1ODI3LDM1ODMwLDM1ODMzLDM1ODM2LDM1ODM5LDM1ODQwLDM1''@;'; put 'put ''ODQyLDM1ODQ0LDM1ODQ3LDM1ODUyLDM1ODU1LDM1ODU3LDM1ODU4LDM1ODYwLDM1ODYxLDM1ODYyLDM1ODY1LDM1ODY3LDM1ODY0LDM1ODY5LDM1ODcxLDM1ODcyLDM1ODczLDM1ODc3LDM1ODc5LDM1ODgyLDM1ODgzLDM1ODg2LDM1ODg3LDM1ODkwLDM1ODkxLDM1ODkzLDM1ODk0LDIxMzUz''@;'; put 'put ''LDIxMzcwLDM4NDI5LDM4NDM0LDM4NDMzLDM4NDQ5LDM4NDQyLDM4NDYxLDM4NDYwLDM4NDY2LDM4NDczLDM4NDg0LDM4NDk1LDM4NTAzLDM4NTA4LDM4NTE0LDM4NTE2LDM4NTM2LDM4NTQxLDM4NTUxLDM4NTc2LDM3MDE1LDM3MDE5LDM3MDIxLDM3MDE3LDM3MDM2LDM3MDI1LDM3MDQ0LDM3''@;'; put 'put ''MDQzLDM3MDQ2LDM3MDUwLDM2MzA5LDM2MzEyLDM2MzEzLDM2MzE2LDM2MzIwLDM2MzIxLDM2MzIyLDM2MzI1LDM2MzI2LDM2MzI3LDM2MzI5LDM2MzMzLDM2MzM0LDM2MzM2LDM2MzM3LDM2MzM4LDM2MzQwLDM2MzQyLDM2MzQ4LDM2MzUwLDM2MzUxLDM2MzUyLDM2MzUzLDM2MzU0LDM2MzU1''@;'; put 'put ''LDM2MzU2LDM2MzU4LDM2MzU5LDM2MzYwLDM2MzYzLDM2MzY1LDM2MzY2LDM2MzY4LDM2MzY5LDM2MzcwLDM2MzcxLDM2MzczLDM2Mzc0LDM2Mzc1LDM2Mzc2LDM2Mzc3LDM2Mzc4LDM2Mzc5LDM2MzgwLDM2Mzg0LDM2Mzg1LDM2Mzg4LDM2Mzg5LDM2MzkwLDM2MzkxLDM2MzkyLDM2Mzk1LDM2''@;'; put 'put ''Mzk3LDM2NDAwLDM2NDAyLDM2NDAzLDM2NDA0LDM2NDA2LDM2NDA3LDM2NDA4LDM2NDExLDM2NDEyLDM2NDE0LDM2NDE1LDM2NDE5LDM2NDIxLDM2NDIyLDM2NDI4LDM2NDI5LDM2NDMwLDM2NDMxLDM2NDMyLDM2NDM1LDM2NDM2LDM2NDM3LDM2NDM4LDM2NDM5LDM2NDQwLDM2NDQyLDM2NDQz''@;'; put 'put ''LDM2NDQ0LDM2NDQ1LDM2NDQ2LDM2NDQ3LDM2NDQ4LDM2NDQ5LDM2NDUwLDM2NDUxLDM2NDUyLDM2NDUzLDM2NDU1LDM2NDU2LDM2NDU4LDM2NDU5LDM2NDYyLDM2NDY1LDM3MDQ4LDM3MDQwLDM3MDcxLDM3MDYxLDM3MDU0LDM3MDcyLDM3MDYwLDM3MDYzLDM3MDc1LDM3MDk0LDM3MDkwLDM3''@;'; put 'put ''MDg0LDM3MDc5LDM3MDgzLDM3MDk5LDM3MTAzLDM3MTE4LDM3MTI0LDM3MTU0LDM3MTUwLDM3MTU1LDM3MTY5LDM3MTY3LDM3MTc3LDM3MTg3LDM3MTkwLDIxMDA1LDIyODUwLDIxMTU0LDIxMTY0LDIxMTY1LDIxMTgyLDIxNzU5LDIxMjAwLDIxMjA2LDIxMjMyLDIxNDcxLDI5MTY2LDMwNjY5''@;'; put 'put ''LDI0MzA4LDIwOTgxLDIwOTg4LDM5NzI3LDIxNDMwLDI0MzIxLDMwMDQyLDI0MDQ3LDIyMzQ4LDIyNDQxLDIyNDMzLDIyNjU0LDIyNzE2LDIyNzI1LDIyNzM3LDIyMzEzLDIyMzE2LDIyMzE0LDIyMzIzLDIyMzI5LDIyMzE4LDIyMzE5LDIyMzY0LDIyMzMxLDIyMzM4LDIyMzc3LDIyNDA1LDIy''@;'; put 'put ''Mzc5LDIyNDA2LDIyMzk2LDIyMzk1LDIyMzc2LDIyMzgxLDIyMzkwLDIyMzg3LDIyNDQ1LDIyNDM2LDIyNDEyLDIyNDUwLDIyNDc5LDIyNDM5LDIyNDUyLDIyNDE5LDIyNDMyLDIyNDg1LDIyNDg4LDIyNDkwLDIyNDg5LDIyNDgyLDIyNDU2LDIyNTE2LDIyNTExLDIyNTIwLDIyNTAwLDIyNDkz''@;'; put 'put ''LDM2NDY3LDM2NDY5LDM2NDcxLDM2NDcyLDM2NDczLDM2NDc0LDM2NDc1LDM2NDc3LDM2NDc4LDM2NDgwLDM2NDgyLDM2NDgzLDM2NDg0LDM2NDg2LDM2NDg4LDM2NDg5LDM2NDkwLDM2NDkxLDM2NDkyLDM2NDkzLDM2NDk0LDM2NDk3LDM2NDk4LDM2NDk5LDM2NTAxLDM2NTAyLDM2NTAzLDM2''@;'; put 'put ''NTA0LDM2NTA1LDM2NTA2LDM2NTA3LDM2NTA5LDM2NTExLDM2NTEyLDM2NTEzLDM2NTE0LDM2NTE1LDM2NTE2LDM2NTE3LDM2NTE4LDM2NTE5LDM2NTIwLDM2NTIxLDM2NTIyLDM2NTI1LDM2NTI2LDM2NTI4LDM2NTI5LDM2NTMxLDM2NTMyLDM2NTMzLDM2NTM0LDM2NTM1LDM2NTM2LDM2NTM3''@;'; put 'put ''LDM2NTM5LDM2NTQwLDM2NTQxLDM2NTQyLDM2NTQzLDM2NTQ0LDM2NTQ1LDM2NTQ2LDM2NTQ3LDM2NTQ4LDM2NTQ5LDM2NTUwLDM2NTUxLDM2NTUyLDM2NTUzLDM2NTU0LDM2NTU1LDM2NTU2LDM2NTU3LDM2NTU5LDM2NTYwLDM2NTYxLDM2NTYyLDM2NTYzLDM2NTY0LDM2NTY1LDM2NTY2LDM2''@;'; put 'put ''NTY3LDM2NTY4LDM2NTY5LDM2NTcwLDM2NTcxLDM2NTcyLDM2NTczLDM2NTc0LDM2NTc1LDM2NTc2LDM2NTc3LDM2NTc4LDM2NTc5LDM2NTgwLDIyNTM5LDIyNTQxLDIyNTI1LDIyNTA5LDIyNTI4LDIyNTU4LDIyNTUzLDIyNTk2LDIyNTYwLDIyNjI5LDIyNjM2LDIyNjU3LDIyNjY1LDIyNjgy''@;'; put 'put ''LDIyNjU2LDM5MzM2LDQwNzI5LDI1MDg3LDMzNDAxLDMzNDA1LDMzNDA3LDMzNDIzLDMzNDE4LDMzNDQ4LDMzNDEyLDMzNDIyLDMzNDI1LDMzNDMxLDMzNDMzLDMzNDUxLDMzNDY0LDMzNDcwLDMzNDU2LDMzNDgwLDMzNDgyLDMzNTA3LDMzNDMyLDMzNDYzLDMzNDU0LDMzNDgzLDMzNDg0LDMz''@;'; put 'put ''NDczLDMzNDQ5LDMzNDYwLDMzNDQxLDMzNDUwLDMzNDM5LDMzNDc2LDMzNDg2LDMzNDQ0LDMzNTA1LDMzNTQ1LDMzNTI3LDMzNTA4LDMzNTUxLDMzNTQzLDMzNTAwLDMzNTI0LDMzNDkwLDMzNDk2LDMzNTQ4LDMzNTMxLDMzNDkxLDMzNTUzLDMzNTYyLDMzNTQyLDMzNTU2LDMzNTU3LDMzNTA0''@;'; put 'put ''LDMzNDkzLDMzNTY0LDMzNjE3LDMzNjI3LDMzNjI4LDMzNTQ0LDMzNjgyLDMzNTk2LDMzNTg4LDMzNTg1LDMzNjkxLDMzNjMwLDMzNTgzLDMzNjE1LDMzNjA3LDMzNjAzLDMzNjMxLDMzNjAwLDMzNTU5LDMzNjMyLDMzNTgxLDMzNTk0LDMzNTg3LDMzNjM4LDMzNjM3LDM2NTgxLDM2NTgyLDM2''@;'; put 'put ''NTgzLDM2NTg0LDM2NTg1LDM2NTg2LDM2NTg3LDM2NTg4LDM2NTg5LDM2NTkwLDM2NTkxLDM2NTkyLDM2NTkzLDM2NTk0LDM2NTk1LDM2NTk2LDM2NTk3LDM2NTk4LDM2NTk5LDM2NjAwLDM2NjAxLDM2NjAyLDM2NjAzLDM2NjA0LDM2NjA1LDM2NjA2LDM2NjA3LDM2NjA4LDM2NjA5LDM2NjEw''@;'; put 'put ''LDM2NjExLDM2NjEyLDM2NjEzLDM2NjE0LDM2NjE1LDM2NjE2LDM2NjE3LDM2NjE4LDM2NjE5LDM2NjIwLDM2NjIxLDM2NjIyLDM2NjIzLDM2NjI0LDM2NjI1LDM2NjI2LDM2NjI3LDM2NjI4LDM2NjI5LDM2NjMwLDM2NjMxLDM2NjMyLDM2NjMzLDM2NjM0LDM2NjM1LDM2NjM2LDM2NjM3LDM2''@;'; put 'put ''NjM4LDM2NjM5LDM2NjQwLDM2NjQxLDM2NjQyLDM2NjQzLDM2NjQ0LDM2NjQ1LDM2NjQ2LDM2NjQ3LDM2NjQ4LDM2NjQ5LDM2NjUwLDM2NjUxLDM2NjUyLDM2NjUzLDM2NjU0LDM2NjU1LDM2NjU2LDM2NjU3LDM2NjU4LDM2NjU5LDM2NjYwLDM2NjYxLDM2NjYyLDM2NjYzLDM2NjY0LDM2NjY1''@;'; put 'put ''LDM2NjY2LDM2NjY3LDM2NjY4LDM2NjY5LDM2NjcwLDM2NjcxLDM2NjcyLDM2NjczLDM2Njc0LDM2Njc1LDM2Njc2LDMzNjQwLDMzNTYzLDMzNjQxLDMzNjQ0LDMzNjQyLDMzNjQ1LDMzNjQ2LDMzNzEyLDMzNjU2LDMzNzE1LDMzNzE2LDMzNjk2LDMzNzA2LDMzNjgzLDMzNjkyLDMzNjY5LDMz''@;'; put 'put ''NjYwLDMzNzE4LDMzNzA1LDMzNjYxLDMzNzIwLDMzNjU5LDMzNjg4LDMzNjk0LDMzNzA0LDMzNzIyLDMzNzI0LDMzNzI5LDMzNzkzLDMzNzY1LDMzNzUyLDIyNTM1LDMzODE2LDMzODAzLDMzNzU3LDMzNzg5LDMzNzUwLDMzODIwLDMzODQ4LDMzODA5LDMzNzk4LDMzNzQ4LDMzNzU5LDMzODA3''@;'; put 'put ''LDMzNzk1LDMzNzg0LDMzNzg1LDMzNzcwLDMzNzMzLDMzNzI4LDMzODMwLDMzNzc2LDMzNzYxLDMzODg0LDMzODczLDMzODgyLDMzODgxLDMzOTA3LDMzOTI3LDMzOTI4LDMzOTE0LDMzOTI5LDMzOTEyLDMzODUyLDMzODYyLDMzODk3LDMzOTEwLDMzOTMyLDMzOTM0LDMzODQxLDMzOTAxLDMz''@;'; put 'put ''OTg1LDMzOTk3LDM0ZTMsMzQwMjIsMzM5ODEsMzQwMDMsMzM5OTQsMzM5ODMsMzM5NzgsMzQwMTYsMzM5NTMsMzM5NzcsMzM5NzIsMzM5NDMsMzQwMjEsMzQwMTksMzQwNjAsMjk5NjUsMzQxMDQsMzQwMzIsMzQxMDUsMzQwNzksMzQxMDYsMzY2NzcsMzY2NzgsMzY2NzksMzY2ODAsMzY2ODEs''@;'; put 'put ''MzY2ODIsMzY2ODMsMzY2ODQsMzY2ODUsMzY2ODYsMzY2ODcsMzY2ODgsMzY2ODksMzY2OTAsMzY2OTEsMzY2OTIsMzY2OTMsMzY2OTQsMzY2OTUsMzY2OTYsMzY2OTcsMzY2OTgsMzY2OTksMzY3MDAsMzY3MDEsMzY3MDIsMzY3MDMsMzY3MDQsMzY3MDUsMzY3MDYsMzY3MDcsMzY3MDgsMzY3''@;'; put 'put ''MDksMzY3MTQsMzY3MzYsMzY3NDgsMzY3NTQsMzY3NjUsMzY3NjgsMzY3NjksMzY3NzAsMzY3NzIsMzY3NzMsMzY3NzQsMzY3NzUsMzY3NzgsMzY3ODAsMzY3ODEsMzY3ODIsMzY3ODMsMzY3ODYsMzY3ODcsMzY3ODgsMzY3ODksMzY3OTEsMzY3OTIsMzY3OTQsMzY3OTUsMzY3OTYsMzY3OTks''@;'; put 'put ''MzY4MDAsMzY4MDMsMzY4MDYsMzY4MDksMzY4MTAsMzY4MTEsMzY4MTIsMzY4MTMsMzY4MTUsMzY4MTgsMzY4MjIsMzY4MjMsMzY4MjYsMzY4MzIsMzY4MzMsMzY4MzUsMzY4MzksMzY4NDQsMzY4NDcsMzY4NDksMzY4NTAsMzY4NTIsMzY4NTMsMzY4NTQsMzY4NTgsMzY4NTksMzY4NjAsMzY4''@;'; put 'put ''NjIsMzY4NjMsMzY4NzEsMzY4NzIsMzY4NzYsMzY4NzgsMzY4ODMsMzY4ODUsMzY4ODgsMzQxMzQsMzQxMDcsMzQwNDcsMzQwNDQsMzQxMzcsMzQxMjAsMzQxNTIsMzQxNDgsMzQxNDIsMzQxNzAsMzA2MjYsMzQxMTUsMzQxNjIsMzQxNzEsMzQyMTIsMzQyMTYsMzQxODMsMzQxOTEsMzQxNjks''@;'; put 'put ''MzQyMjIsMzQyMDQsMzQxODEsMzQyMzMsMzQyMzEsMzQyMjQsMzQyNTksMzQyNDEsMzQyNjgsMzQzMDMsMzQzNDMsMzQzMDksMzQzNDUsMzQzMjYsMzQzNjQsMjQzMTgsMjQzMjgsMjI4NDQsMjI4NDksMzI4MjMsMjI4NjksMjI4NzQsMjI4NzIsMjEyNjMsMjM1ODYsMjM1ODksMjM1OTYsMjM2''@;'; put 'put ''MDQsMjUxNjQsMjUxOTQsMjUyNDcsMjUyNzUsMjUyOTAsMjUzMDYsMjUzMDMsMjUzMjYsMjUzNzgsMjUzMzQsMjU0MDEsMjU0MTksMjU0MTEsMjU1MTcsMjU1OTAsMjU0NTcsMjU0NjYsMjU0ODYsMjU1MjQsMjU0NTMsMjU1MTYsMjU0ODIsMjU0NDksMjU1MTgsMjU1MzIsMjU1ODYsMjU1OTIs''@;'; put 'put ''MjU1NjgsMjU1OTksMjU1NDAsMjU1NjYsMjU1NTAsMjU2ODIsMjU1NDIsMjU1MzQsMjU2NjksMjU2NjUsMjU2MTEsMjU2MjcsMjU2MzIsMjU2MTIsMjU2MzgsMjU2MzMsMjU2OTQsMjU3MzIsMjU3MDksMjU3NTAsMzY4ODksMzY4OTIsMzY4OTksMzY5MDAsMzY5MDEsMzY5MDMsMzY5MDQsMzY5''@;'; put 'put ''MDUsMzY5MDYsMzY5MDcsMzY5MDgsMzY5MTIsMzY5MTMsMzY5MTQsMzY5MTUsMzY5MTYsMzY5MTksMzY5MjEsMzY5MjIsMzY5MjUsMzY5MjcsMzY5MjgsMzY5MzEsMzY5MzMsMzY5MzQsMzY5MzYsMzY5MzcsMzY5MzgsMzY5MzksMzY5NDAsMzY5NDIsMzY5NDgsMzY5NDksMzY5NTAsMzY5NTMs''@;'; put 'put ''MzY5NTQsMzY5NTYsMzY5NTcsMzY5NTgsMzY5NTksMzY5NjAsMzY5NjEsMzY5NjQsMzY5NjYsMzY5NjcsMzY5NjksMzY5NzAsMzY5NzEsMzY5NzIsMzY5NzUsMzY5NzYsMzY5NzcsMzY5NzgsMzY5NzksMzY5ODIsMzY5ODMsMzY5ODQsMzY5ODUsMzY5ODYsMzY5ODcsMzY5ODgsMzY5OTAsMzY5''@;'; put 'put ''OTMsMzY5OTYsMzY5OTcsMzY5OTgsMzY5OTksMzcwMDEsMzcwMDIsMzcwMDQsMzcwMDUsMzcwMDYsMzcwMDcsMzcwMDgsMzcwMTAsMzcwMTIsMzcwMTQsMzcwMTYsMzcwMTgsMzcwMjAsMzcwMjIsMzcwMjMsMzcwMjQsMzcwMjgsMzcwMjksMzcwMzEsMzcwMzIsMzcwMzMsMzcwMzUsMzcwMzcs''@;'; put 'put ''MzcwNDIsMzcwNDcsMzcwNTIsMzcwNTMsMzcwNTUsMzcwNTYsMjU3MjIsMjU3ODMsMjU3ODQsMjU3NTMsMjU3ODYsMjU3OTIsMjU4MDgsMjU4MTUsMjU4MjgsMjU4MjYsMjU4NjUsMjU4OTMsMjU5MDIsMjQzMzEsMjQ1MzAsMjk5NzcsMjQzMzcsMjEzNDMsMjE0ODksMjE1MDEsMjE0ODEsMjE0''@;'; put 'put ''ODAsMjE0OTksMjE1MjIsMjE1MjYsMjE1MTAsMjE1NzksMjE1ODYsMjE1ODcsMjE1ODgsMjE1OTAsMjE1NzEsMjE1MzcsMjE1OTEsMjE1OTMsMjE1MzksMjE1NTQsMjE2MzQsMjE2NTIsMjE2MjMsMjE2MTcsMjE2MDQsMjE2NTgsMjE2NTksMjE2MzYsMjE2MjIsMjE2MDYsMjE2NjEsMjE3MTIs''@;'; put 'put ''MjE2NzcsMjE2OTgsMjE2ODQsMjE3MTQsMjE2NzEsMjE2NzAsMjE3MTUsMjE3MTYsMjE2MTgsMjE2NjcsMjE3MTcsMjE2OTEsMjE2OTUsMjE3MDgsMjE3MjEsMjE3MjIsMjE3MjQsMjE2NzMsMjE2NzQsMjE2NjgsMjE3MjUsMjE3MTEsMjE3MjYsMjE3ODcsMjE3MzUsMjE3OTIsMjE3NTcsMjE3''@;'; put 'put ''ODAsMjE3NDcsMjE3OTQsMjE3OTUsMjE3NzUsMjE3NzcsMjE3OTksMjE4MDIsMjE4NjMsMjE5MDMsMjE5NDEsMjE4MzMsMjE4NjksMjE4MjUsMjE4NDUsMjE4MjMsMjE4NDAsMjE4MjAsMzcwNTgsMzcwNTksMzcwNjIsMzcwNjQsMzcwNjUsMzcwNjcsMzcwNjgsMzcwNjksMzcwNzQsMzcwNzYs''@;'; put 'put ''MzcwNzcsMzcwNzgsMzcwODAsMzcwODEsMzcwODIsMzcwODYsMzcwODcsMzcwODgsMzcwOTEsMzcwOTIsMzcwOTMsMzcwOTcsMzcwOTgsMzcxMDAsMzcxMDIsMzcxMDQsMzcxMDUsMzcxMDYsMzcxMDcsMzcxMDksMzcxMTAsMzcxMTEsMzcxMTMsMzcxMTQsMzcxMTUsMzcxMTYsMzcxMTksMzcx''@;'; put 'put ''MjAsMzcxMjEsMzcxMjMsMzcxMjUsMzcxMjYsMzcxMjcsMzcxMjgsMzcxMjksMzcxMzAsMzcxMzEsMzcxMzIsMzcxMzMsMzcxMzQsMzcxMzUsMzcxMzYsMzcxMzcsMzcxMzgsMzcxMzksMzcxNDAsMzcxNDEsMzcxNDIsMzcxNDMsMzcxNDQsMzcxNDYsMzcxNDcsMzcxNDgsMzcxNDksMzcxNTEs''@;'; put 'put ''MzcxNTIsMzcxNTMsMzcxNTYsMzcxNTcsMzcxNTgsMzcxNTksMzcxNjAsMzcxNjEsMzcxNjIsMzcxNjMsMzcxNjQsMzcxNjUsMzcxNjYsMzcxNjgsMzcxNzAsMzcxNzEsMzcxNzIsMzcxNzMsMzcxNzQsMzcxNzUsMzcxNzYsMzcxNzgsMzcxNzksMzcxODAsMzcxODEsMzcxODIsMzcxODMsMzcx''@;'; put 'put ''ODQsMzcxODUsMzcxODYsMzcxODgsMjE4MTUsMjE4NDYsMjE4NzcsMjE4NzgsMjE4NzksMjE4MTEsMjE4MDgsMjE4NTIsMjE4OTksMjE5NzAsMjE4OTEsMjE5MzcsMjE5NDUsMjE4OTYsMjE4ODksMjE5MTksMjE4ODYsMjE5NzQsMjE5MDUsMjE4ODMsMjE5ODMsMjE5NDksMjE5NTAsMjE5MDgs''@;'; put 'put ''MjE5MTMsMjE5OTQsMjIwMDcsMjE5NjEsMjIwNDcsMjE5NjksMjE5OTUsMjE5OTYsMjE5NzIsMjE5OTAsMjE5ODEsMjE5NTYsMjE5OTksMjE5ODksMjIwMDIsMjIwMDMsMjE5NjQsMjE5NjUsMjE5OTIsMjIwMDUsMjE5ODgsMzY3NTYsMjIwNDYsMjIwMjQsMjIwMjgsMjIwMTcsMjIwNTIsMjIw''@;'; put 'put ''NTEsMjIwMTQsMjIwMTYsMjIwNTUsMjIwNjEsMjIxMDQsMjIwNzMsMjIxMDMsMjIwNjAsMjIwOTMsMjIxMTQsMjIxMDUsMjIxMDgsMjIwOTIsMjIxMDAsMjIxNTAsMjIxMTYsMjIxMjksMjIxMjMsMjIxMzksMjIxNDAsMjIxNDksMjIxNjMsMjIxOTEsMjIyMjgsMjIyMzEsMjIyMzcsMjIyNDEs''@;'; put 'put ''MjIyNjEsMjIyNTEsMjIyNjUsMjIyNzEsMjIyNzYsMjIyODIsMjIyODEsMjIzMDAsMjQwNzksMjQwODksMjQwODQsMjQwODEsMjQxMTMsMjQxMjMsMjQxMjQsMzcxODksMzcxOTEsMzcxOTIsMzcyMDEsMzcyMDMsMzcyMDQsMzcyMDUsMzcyMDYsMzcyMDgsMzcyMDksMzcyMTEsMzcyMTIsMzcy''@;'; put 'put ''MTUsMzcyMTYsMzcyMjIsMzcyMjMsMzcyMjQsMzcyMjcsMzcyMjksMzcyMzUsMzcyNDIsMzcyNDMsMzcyNDQsMzcyNDgsMzcyNDksMzcyNTAsMzcyNTEsMzcyNTIsMzcyNTQsMzcyNTYsMzcyNTgsMzcyNjIsMzcyNjMsMzcyNjcsMzcyNjgsMzcyNjksMzcyNzAsMzcyNzEsMzcyNzIsMzcyNzMs''@;'; put 'put ''MzcyNzYsMzcyNzcsMzcyNzgsMzcyNzksMzcyODAsMzcyODEsMzcyODQsMzcyODUsMzcyODYsMzcyODcsMzcyODgsMzcyODksMzcyOTEsMzcyOTIsMzcyOTYsMzcyOTcsMzcyOTgsMzcyOTksMzczMDIsMzczMDMsMzczMDQsMzczMDUsMzczMDcsMzczMDgsMzczMDksMzczMTAsMzczMTEsMzcz''@;'; put 'put ''MTIsMzczMTMsMzczMTQsMzczMTUsMzczMTYsMzczMTcsMzczMTgsMzczMjAsMzczMjMsMzczMjgsMzczMzAsMzczMzEsMzczMzIsMzczMzMsMzczMzQsMzczMzUsMzczMzYsMzczMzcsMzczMzgsMzczMzksMzczNDEsMzczNDIsMzczNDMsMzczNDQsMzczNDUsMzczNDYsMzczNDcsMzczNDgs''@;'; put 'put ''MzczNDksMjQxMTksMjQxMzIsMjQxNDgsMjQxNTUsMjQxNTgsMjQxNjEsMjM2OTIsMjM2NzQsMjM2OTMsMjM2OTYsMjM3MDIsMjM2ODgsMjM3MDQsMjM3MDUsMjM2OTcsMjM3MDYsMjM3MDgsMjM3MzMsMjM3MTQsMjM3NDEsMjM3MjQsMjM3MjMsMjM3MjksMjM3MTUsMjM3NDUsMjM3MzUsMjM3''@;'; put 'put ''NDgsMjM3NjIsMjM3ODAsMjM3NTUsMjM3ODEsMjM4MTAsMjM4MTEsMjM4NDcsMjM4NDYsMjM4NTQsMjM4NDQsMjM4MzgsMjM4MTQsMjM4MzUsMjM4OTYsMjM4NzAsMjM4NjAsMjM4NjksMjM5MTYsMjM4OTksMjM5MTksMjM5MDEsMjM5MTUsMjM4ODMsMjM4ODIsMjM5MTMsMjM5MjQsMjM5Mzgs''@;'; put 'put ''MjM5NjEsMjM5NjUsMzU5NTUsMjM5OTEsMjQwMDUsMjQ0MzUsMjQ0MzksMjQ0NTAsMjQ0NTUsMjQ0NTcsMjQ0NjAsMjQ0NjksMjQ0NzMsMjQ0NzYsMjQ0ODgsMjQ0OTMsMjQ1MDEsMjQ1MDgsMzQ5MTQsMjQ0MTcsMjkzNTcsMjkzNjAsMjkzNjQsMjkzNjcsMjkzNjgsMjkzNzksMjkzNzcsMjkz''@;'; put 'put ''OTAsMjkzODksMjkzOTQsMjk0MTYsMjk0MjMsMjk0MTcsMjk0MjYsMjk0MjgsMjk0MzEsMjk0NDEsMjk0MjcsMjk0NDMsMjk0MzQsMzczNTAsMzczNTEsMzczNTIsMzczNTMsMzczNTQsMzczNTUsMzczNTYsMzczNTcsMzczNTgsMzczNTksMzczNjAsMzczNjEsMzczNjIsMzczNjMsMzczNjQs''@;'; put 'put ''MzczNjUsMzczNjYsMzczNjcsMzczNjgsMzczNjksMzczNzAsMzczNzEsMzczNzIsMzczNzMsMzczNzQsMzczNzUsMzczNzYsMzczNzcsMzczNzgsMzczNzksMzczODAsMzczODEsMzczODIsMzczODMsMzczODQsMzczODUsMzczODYsMzczODcsMzczODgsMzczODksMzczOTAsMzczOTEsMzcz''@;'; put 'put ''OTIsMzczOTMsMzczOTQsMzczOTUsMzczOTYsMzczOTcsMzczOTgsMzczOTksMzc0MDAsMzc0MDEsMzc0MDIsMzc0MDMsMzc0MDQsMzc0MDUsMzc0MDYsMzc0MDcsMzc0MDgsMzc0MDksMzc0MTAsMzc0MTEsMzc0MTIsMzc0MTMsMzc0MTQsMzc0MTUsMzc0MTYsMzc0MTcsMzc0MTgsMzc0MTks''@;'; put 'put ''Mzc0MjAsMzc0MjEsMzc0MjIsMzc0MjMsMzc0MjQsMzc0MjUsMzc0MjYsMzc0MjcsMzc0MjgsMzc0MjksMzc0MzAsMzc0MzEsMzc0MzIsMzc0MzMsMzc0MzQsMzc0MzUsMzc0MzYsMzc0MzcsMzc0MzgsMzc0MzksMzc0NDAsMzc0NDEsMzc0NDIsMzc0NDMsMzc0NDQsMzc0NDUsMjk0MzUsMjk0''@;'; put 'put ''NjMsMjk0NTksMjk0NzMsMjk0NTAsMjk0NzAsMjk0NjksMjk0NjEsMjk0NzQsMjk0OTcsMjk0NzcsMjk0ODQsMjk0OTYsMjk0ODksMjk1MjAsMjk1MTcsMjk1MjcsMjk1MzYsMjk1NDgsMjk1NTEsMjk1NjYsMzMzMDcsMjI4MjEsMzkxNDMsMjI4MjAsMjI3ODYsMzkyNjcsMzkyNzEsMzkyNzIs''@;'; put 'put ''MzkyNzMsMzkyNzQsMzkyNzUsMzkyNzYsMzkyODQsMzkyODcsMzkyOTMsMzkyOTYsMzkzMDAsMzkzMDMsMzkzMDYsMzkzMDksMzkzMTIsMzkzMTMsMzkzMTUsMzkzMTYsMzkzMTcsMjQxOTIsMjQyMDksMjQyMDMsMjQyMTQsMjQyMjksMjQyMjQsMjQyNDksMjQyNDUsMjQyNTQsMjQyNDMsMzYx''@;'; put 'put ''NzksMjQyNzQsMjQyNzMsMjQyODMsMjQyOTYsMjQyOTgsMzMyMTAsMjQ1MTYsMjQ1MjEsMjQ1MzQsMjQ1MjcsMjQ1NzksMjQ1NTgsMjQ1ODAsMjQ1NDUsMjQ1NDgsMjQ1NzQsMjQ1ODEsMjQ1ODIsMjQ1NTQsMjQ1NTcsMjQ1NjgsMjQ2MDEsMjQ2MjksMjQ2MTQsMjQ2MDMsMjQ1OTEsMjQ1ODks''@;'; put 'put ''MjQ2MTcsMjQ2MTksMjQ1ODYsMjQ2MzksMjQ2MDksMjQ2OTYsMjQ2OTcsMjQ2OTksMjQ2OTgsMjQ2NDIsMzc0NDYsMzc0NDcsMzc0NDgsMzc0NDksMzc0NTAsMzc0NTEsMzc0NTIsMzc0NTMsMzc0NTQsMzc0NTUsMzc0NTYsMzc0NTcsMzc0NTgsMzc0NTksMzc0NjAsMzc0NjEsMzc0NjIsMzc0''@;'; put 'put ''NjMsMzc0NjQsMzc0NjUsMzc0NjYsMzc0NjcsMzc0NjgsMzc0NjksMzc0NzAsMzc0NzEsMzc0NzIsMzc0NzMsMzc0NzQsMzc0NzUsMzc0NzYsMzc0NzcsMzc0NzgsMzc0NzksMzc0ODAsMzc0ODEsMzc0ODIsMzc0ODMsMzc0ODQsMzc0ODUsMzc0ODYsMzc0ODcsMzc0ODgsMzc0ODksMzc0OTAs''@;'; put 'put ''Mzc0OTEsMzc0OTMsMzc0OTQsMzc0OTUsMzc0OTYsMzc0OTcsMzc0OTgsMzc0OTksMzc1MDAsMzc1MDEsMzc1MDIsMzc1MDMsMzc1MDQsMzc1MDUsMzc1MDYsMzc1MDcsMzc1MDgsMzc1MDksMzc1MTAsMzc1MTEsMzc1MTIsMzc1MTMsMzc1MTQsMzc1MTUsMzc1MTYsMzc1MTcsMzc1MTksMzc1''@;'; put 'put ''MjAsMzc1MjEsMzc1MjIsMzc1MjMsMzc1MjQsMzc1MjUsMzc1MjYsMzc1MjcsMzc1MjgsMzc1MjksMzc1MzAsMzc1MzEsMzc1MzIsMzc1MzMsMzc1MzQsMzc1MzUsMzc1MzYsMzc1MzcsMzc1MzgsMzc1MzksMzc1NDAsMzc1NDEsMzc1NDIsMzc1NDMsMjQ2ODIsMjQ3MDEsMjQ3MjYsMjQ3MzAs''@;'; put 'put ''MjQ3NDksMjQ3MzMsMjQ3MDcsMjQ3MjIsMjQ3MTYsMjQ3MzEsMjQ4MTIsMjQ3NjMsMjQ3NTMsMjQ3OTcsMjQ3OTIsMjQ3NzQsMjQ3OTQsMjQ3NTYsMjQ4NjQsMjQ4NzAsMjQ4NTMsMjQ4NjcsMjQ4MjAsMjQ4MzIsMjQ4NDYsMjQ4NzUsMjQ5MDYsMjQ5NDksMjUwMDQsMjQ5ODAsMjQ5OTksMjUw''@;'; put 'put ''MTUsMjUwNDQsMjUwNzcsMjQ1NDEsMzg1NzksMzgzNzcsMzgzNzksMzgzODUsMzgzODcsMzgzODksMzgzOTAsMzgzOTYsMzgzOTgsMzg0MDMsMzg0MDQsMzg0MDYsMzg0MDgsMzg0MTAsMzg0MTEsMzg0MTIsMzg0MTMsMzg0MTUsMzg0MTgsMzg0MjEsMzg0MjIsMzg0MjMsMzg0MjUsMzg0MjYs''@;'; put 'put ''MjAwMTIsMjkyNDcsMjUxMDksMjc3MDEsMjc3MzIsMjc3NDAsMjc3MjIsMjc4MTEsMjc3ODEsMjc3OTIsMjc3OTYsMjc3ODgsMjc3NTIsMjc3NTMsMjc3NjQsMjc3NjYsMjc3ODIsMjc4MTcsMjc4NTYsMjc4NjAsMjc4MjEsMjc4OTUsMjc4OTYsMjc4ODksMjc4NjMsMjc4MjYsMjc4NzIsMjc4''@;'; put 'put ''NjIsMjc4OTgsMjc4ODMsMjc4ODYsMjc4MjUsMjc4NTksMjc4ODcsMjc5MDIsMzc1NDQsMzc1NDUsMzc1NDYsMzc1NDcsMzc1NDgsMzc1NDksMzc1NTEsMzc1NTIsMzc1NTMsMzc1NTQsMzc1NTUsMzc1NTYsMzc1NTcsMzc1NTgsMzc1NTksMzc1NjAsMzc1NjEsMzc1NjIsMzc1NjMsMzc1NjQs''@;'; put 'put ''Mzc1NjUsMzc1NjYsMzc1NjcsMzc1NjgsMzc1NjksMzc1NzAsMzc1NzEsMzc1NzIsMzc1NzMsMzc1NzQsMzc1NzUsMzc1NzcsMzc1NzgsMzc1NzksMzc1ODAsMzc1ODEsMzc1ODIsMzc1ODMsMzc1ODQsMzc1ODUsMzc1ODYsMzc1ODcsMzc1ODgsMzc1ODksMzc1OTAsMzc1OTEsMzc1OTIsMzc1''@;'; put 'put ''OTMsMzc1OTQsMzc1OTUsMzc1OTYsMzc1OTcsMzc1OTgsMzc1OTksMzc2MDAsMzc2MDEsMzc2MDIsMzc2MDMsMzc2MDQsMzc2MDUsMzc2MDYsMzc2MDcsMzc2MDgsMzc2MDksMzc2MTAsMzc2MTEsMzc2MTIsMzc2MTMsMzc2MTQsMzc2MTUsMzc2MTYsMzc2MTcsMzc2MTgsMzc2MTksMzc2MjAs''@;'; put 'put ''Mzc2MjEsMzc2MjIsMzc2MjMsMzc2MjQsMzc2MjUsMzc2MjYsMzc2MjcsMzc2MjgsMzc2MjksMzc2MzAsMzc2MzEsMzc2MzIsMzc2MzMsMzc2MzQsMzc2MzUsMzc2MzYsMzc2MzcsMzc2MzgsMzc2MzksMzc2NDAsMzc2NDEsMjc5NjEsMjc5NDMsMjc5MTYsMjc5NzEsMjc5NzYsMjc5MTEsMjc5''@;'; put 'put ''MDgsMjc5MjksMjc5MTgsMjc5NDcsMjc5ODEsMjc5NTAsMjc5NTcsMjc5MzAsMjc5ODMsMjc5ODYsMjc5ODgsMjc5NTUsMjgwNDksMjgwMTUsMjgwNjIsMjgwNjQsMjc5OTgsMjgwNTEsMjgwNTIsMjc5OTYsMjhlMywyODAyOCwyODAwMywyODE4NiwyODEwMywyODEwMSwyODEyNiwyODE3NCwy''@;'; put 'put ''ODA5NSwyODEyOCwyODE3NywyODEzNCwyODEyNSwyODEyMSwyODE4MiwyODA3NSwyODE3MiwyODA3OCwyODIwMywyODI3MCwyODIzOCwyODI2NywyODMzOCwyODI1NSwyODI5NCwyODI0MywyODI0NCwyODIxMCwyODE5NywyODIyOCwyODM4MywyODMzNywyODMxMiwyODM4NCwyODQ2MSwyODM4''@;'; put 'put ''NiwyODMyNSwyODMyNywyODM0OSwyODM0NywyODM0MywyODM3NSwyODM0MCwyODM2NywyODMwMywyODM1NCwyODMxOSwyODUxNCwyODQ4NiwyODQ4NywyODQ1MiwyODQzNywyODQwOSwyODQ2MywyODQ3MCwyODQ5MSwyODUzMiwyODQ1OCwyODQyNSwyODQ1NywyODU1MywyODU1NywyODU1Niwy''@;'; put 'put ''ODUzNiwyODUzMCwyODU0MCwyODUzOCwyODYyNSwzNzY0MiwzNzY0MywzNzY0NCwzNzY0NSwzNzY0NiwzNzY0NywzNzY0OCwzNzY0OSwzNzY1MCwzNzY1MSwzNzY1MiwzNzY1MywzNzY1NCwzNzY1NSwzNzY1NiwzNzY1NywzNzY1OCwzNzY1OSwzNzY2MCwzNzY2MSwzNzY2MiwzNzY2MywzNzY2''@;'; put 'put ''NCwzNzY2NSwzNzY2NiwzNzY2NywzNzY2OCwzNzY2OSwzNzY3MCwzNzY3MSwzNzY3MiwzNzY3MywzNzY3NCwzNzY3NSwzNzY3NiwzNzY3NywzNzY3OCwzNzY3OSwzNzY4MCwzNzY4MSwzNzY4MiwzNzY4MywzNzY4NCwzNzY4NSwzNzY4NiwzNzY4NywzNzY4OCwzNzY4OSwzNzY5MCwzNzY5MSwz''@;'; put 'put ''NzY5MiwzNzY5MywzNzY5NSwzNzY5NiwzNzY5NywzNzY5OCwzNzY5OSwzNzcwMCwzNzcwMSwzNzcwMiwzNzcwMywzNzcwNCwzNzcwNSwzNzcwNiwzNzcwNywzNzcwOCwzNzcwOSwzNzcxMCwzNzcxMSwzNzcxMiwzNzcxMywzNzcxNCwzNzcxNSwzNzcxNiwzNzcxNywzNzcxOCwzNzcxOSwzNzcy''@;'; put 'put ''MCwzNzcyMSwzNzcyMiwzNzcyMywzNzcyNCwzNzcyNSwzNzcyNiwzNzcyNywzNzcyOCwzNzcyOSwzNzczMCwzNzczMSwzNzczMiwzNzczMywzNzczNCwzNzczNSwzNzczNiwzNzczNywzNzczOSwyODYxNywyODU4MywyODYwMSwyODU5OCwyODYxMCwyODY0MSwyODY1NCwyODYzOCwyODY0MCwy''@;'; put 'put ''ODY1NSwyODY5OCwyODcwNywyODY5OSwyODcyOSwyODcyNSwyODc1MSwyODc2NiwyMzQyNCwyMzQyOCwyMzQ0NSwyMzQ0MywyMzQ2MSwyMzQ4MCwyOTk5OSwzOTU4MiwyNTY1MiwyMzUyNCwyMzUzNCwzNTEyMCwyMzUzNiwzNjQyMywzNTU5MSwzNjc5MCwzNjgxOSwzNjgyMSwzNjgzNywzNjg0''@;'; put 'put ''NiwzNjgzNiwzNjg0MSwzNjgzOCwzNjg1MSwzNjg0MCwzNjg2OSwzNjg2OCwzNjg3NSwzNjkwMiwzNjg4MSwzNjg3NywzNjg4NiwzNjg5NywzNjkxNywzNjkxOCwzNjkwOSwzNjkxMSwzNjkzMiwzNjk0NSwzNjk0NiwzNjk0NCwzNjk2OCwzNjk1MiwzNjk2MiwzNjk1NSwyNjI5NywzNjk4MCwz''@;'; put 'put ''Njk4OSwzNjk5NCwzN2UzLDM2OTk1LDM3MDAzLDI0NDAwLDI0NDA3LDI0NDA2LDI0NDA4LDIzNjExLDIxNjc1LDIzNjMyLDIzNjQxLDIzNDA5LDIzNjUxLDIzNjU0LDMyNzAwLDI0MzYyLDI0MzYxLDI0MzY1LDMzMzk2LDI0MzgwLDM5NzM5LDIzNjYyLDIyOTEzLDIyOTE1LDIyOTI1LDIyOTUz''@;'; put 'put ''LDIyOTU0LDIyOTQ3LDM3NzQwLDM3NzQxLDM3NzQyLDM3NzQzLDM3NzQ0LDM3NzQ1LDM3NzQ2LDM3NzQ3LDM3NzQ4LDM3NzQ5LDM3NzUwLDM3NzUxLDM3NzUyLDM3NzUzLDM3NzU0LDM3NzU1LDM3NzU2LDM3NzU3LDM3NzU4LDM3NzU5LDM3NzYwLDM3NzYxLDM3NzYyLDM3NzYzLDM3NzY0LDM3''@;'; put 'put ''NzY1LDM3NzY2LDM3NzY3LDM3NzY4LDM3NzY5LDM3NzcwLDM3NzcxLDM3NzcyLDM3NzczLDM3Nzc0LDM3Nzc2LDM3Nzc3LDM3Nzc4LDM3Nzc5LDM3NzgwLDM3NzgxLDM3NzgyLDM3NzgzLDM3Nzg0LDM3Nzg1LDM3Nzg2LDM3Nzg3LDM3Nzg4LDM3Nzg5LDM3NzkwLDM3NzkxLDM3NzkyLDM3Nzkz''@;'; put 'put ''LDM3Nzk0LDM3Nzk1LDM3Nzk2LDM3Nzk3LDM3Nzk4LDM3Nzk5LDM3ODAwLDM3ODAxLDM3ODAyLDM3ODAzLDM3ODA0LDM3ODA1LDM3ODA2LDM3ODA3LDM3ODA4LDM3ODA5LDM3ODEwLDM3ODExLDM3ODEyLDM3ODEzLDM3ODE0LDM3ODE1LDM3ODE2LDM3ODE3LDM3ODE4LDM3ODE5LDM3ODIwLDM3''@;'; put 'put ''ODIxLDM3ODIyLDM3ODIzLDM3ODI0LDM3ODI1LDM3ODI2LDM3ODI3LDM3ODI4LDM3ODI5LDM3ODMwLDM3ODMxLDM3ODMyLDM3ODMzLDM3ODM1LDM3ODM2LDM3ODM3LDIyOTM1LDIyOTg2LDIyOTU1LDIyOTQyLDIyOTQ4LDIyOTk0LDIyOTYyLDIyOTU5LDIyOTk5LDIyOTc0LDIzMDQ1LDIzMDQ2''@;'; put 'put ''LDIzMDA1LDIzMDQ4LDIzMDExLDIzZTMsMjMwMzMsMjMwNTIsMjMwNDksMjMwOTAsMjMwOTIsMjMwNTcsMjMwNzUsMjMwNTksMjMxMDQsMjMxNDMsMjMxMTQsMjMxMjUsMjMxMDAsMjMxMzgsMjMxNTcsMzMwMDQsMjMyMTAsMjMxOTUsMjMxNTksMjMxNjIsMjMyMzAsMjMyNzUsMjMyMTgsMjMy''@;'; put 'put ''NTAsMjMyNTIsMjMyMjQsMjMyNjQsMjMyNjcsMjMyODEsMjMyNTQsMjMyNzAsMjMyNTYsMjMyNjAsMjMzMDUsMjMzMTksMjMzMTgsMjMzNDYsMjMzNTEsMjMzNjAsMjM1NzMsMjM1ODAsMjMzODYsMjMzOTcsMjM0MTEsMjMzNzcsMjMzNzksMjMzOTQsMzk1NDEsMzk1NDMsMzk1NDQsMzk1NDYs''@;'; put 'put ''Mzk1NTEsMzk1NDksMzk1NTIsMzk1NTMsMzk1NTcsMzk1NjAsMzk1NjIsMzk1NjgsMzk1NzAsMzk1NzEsMzk1NzQsMzk1NzYsMzk1NzksMzk1ODAsMzk1ODEsMzk1ODMsMzk1ODQsMzk1ODYsMzk1ODcsMzk1ODksMzk1OTEsMzI0MTUsMzI0MTcsMzI0MTksMzI0MjEsMzI0MjQsMzI0MjUsMzc4''@;'; put 'put ''MzgsMzc4MzksMzc4NDAsMzc4NDEsMzc4NDIsMzc4NDMsMzc4NDQsMzc4NDUsMzc4NDcsMzc4NDgsMzc4NDksMzc4NTAsMzc4NTEsMzc4NTIsMzc4NTMsMzc4NTQsMzc4NTUsMzc4NTYsMzc4NTcsMzc4NTgsMzc4NTksMzc4NjAsMzc4NjEsMzc4NjIsMzc4NjMsMzc4NjQsMzc4NjUsMzc4NjYs''@;'; put 'put ''Mzc4NjcsMzc4NjgsMzc4NjksMzc4NzAsMzc4NzEsMzc4NzIsMzc4NzMsMzc4NzQsMzc4NzUsMzc4NzYsMzc4NzcsMzc4NzgsMzc4NzksMzc4ODAsMzc4ODEsMzc4ODIsMzc4ODMsMzc4ODQsMzc4ODUsMzc4ODYsMzc4ODcsMzc4ODgsMzc4ODksMzc4OTAsMzc4OTEsMzc4OTIsMzc4OTMsMzc4''@;'; put 'put ''OTQsMzc4OTUsMzc4OTYsMzc4OTcsMzc4OTgsMzc4OTksMzc5MDAsMzc5MDEsMzc5MDIsMzc5MDMsMzc5MDQsMzc5MDUsMzc5MDYsMzc5MDcsMzc5MDgsMzc5MDksMzc5MTAsMzc5MTEsMzc5MTIsMzc5MTMsMzc5MTQsMzc5MTUsMzc5MTYsMzc5MTcsMzc5MTgsMzc5MTksMzc5MjAsMzc5MjEs''@;'; put 'put ''Mzc5MjIsMzc5MjMsMzc5MjQsMzc5MjUsMzc5MjYsMzc5MjcsMzc5MjgsMzc5MjksMzc5MzAsMzc5MzEsMzc5MzIsMzc5MzMsMzc5MzQsMzI0MjksMzI0MzIsMzI0NDYsMzI0NDgsMzI0NDksMzI0NTAsMzI0NTcsMzI0NTksMzI0NjAsMzI0NjQsMzI0NjgsMzI0NzEsMzI0NzUsMzI0ODAsMzI0''@;'; put 'put ''ODEsMzI0ODgsMzI0OTEsMzI0OTQsMzI0OTUsMzI0OTcsMzI0OTgsMzI1MjUsMzI1MDIsMzI1MDYsMzI1MDcsMzI1MTAsMzI1MTMsMzI1MTQsMzI1MTUsMzI1MTksMzI1MjAsMzI1MjMsMzI1MjQsMzI1MjcsMzI1MjksMzI1MzAsMzI1MzUsMzI1MzcsMzI1NDAsMzI1MzksMzI1NDMsMzI1NDUs''@;'; put 'put ''MzI1NDYsMzI1NDcsMzI1NDgsMzI1NDksMzI1NTAsMzI1NTEsMzI1NTQsMzI1NTUsMzI1NTYsMzI1NTcsMzI1NTksMzI1NjAsMzI1NjEsMzI1NjIsMzI1NjMsMzI1NjUsMjQxODYsMzAwNzksMjQwMjcsMzAwMTQsMzcwMTMsMjk1ODIsMjk1ODUsMjk2MTQsMjk2MDIsMjk1OTksMjk2NDcsMjk2''@;'; put 'put ''MzQsMjk2NDksMjk2MjMsMjk2MTksMjk2MzIsMjk2NDEsMjk2NDAsMjk2NjksMjk2NTcsMzkwMzYsMjk3MDYsMjk2NzMsMjk2NzEsMjk2NjIsMjk2MjYsMjk2ODIsMjk3MTEsMjk3MzgsMjk3ODcsMjk3MzQsMjk3MzMsMjk3MzYsMjk3NDQsMjk3NDIsMjk3NDAsMzc5MzUsMzc5MzYsMzc5Mzcs''@;'; put 'put ''Mzc5MzgsMzc5MzksMzc5NDAsMzc5NDEsMzc5NDIsMzc5NDMsMzc5NDQsMzc5NDUsMzc5NDYsMzc5NDcsMzc5NDgsMzc5NDksMzc5NTEsMzc5NTIsMzc5NTMsMzc5NTQsMzc5NTUsMzc5NTYsMzc5NTcsMzc5NTgsMzc5NTksMzc5NjAsMzc5NjEsMzc5NjIsMzc5NjMsMzc5NjQsMzc5NjUsMzc5''@;'; put 'put ''NjYsMzc5NjcsMzc5NjgsMzc5NjksMzc5NzAsMzc5NzEsMzc5NzIsMzc5NzMsMzc5NzQsMzc5NzUsMzc5NzYsMzc5NzcsMzc5NzgsMzc5NzksMzc5ODAsMzc5ODEsMzc5ODIsMzc5ODMsMzc5ODQsMzc5ODUsMzc5ODYsMzc5ODcsMzc5ODgsMzc5ODksMzc5OTAsMzc5OTEsMzc5OTIsMzc5OTMs''@;'; put 'put ''Mzc5OTQsMzc5OTYsMzc5OTcsMzc5OTgsMzc5OTksMzhlMywzODAwMSwzODAwMiwzODAwMywzODAwNCwzODAwNSwzODAwNiwzODAwNywzODAwOCwzODAwOSwzODAxMCwzODAxMSwzODAxMiwzODAxMywzODAxNCwzODAxNSwzODAxNiwzODAxNywzODAxOCwzODAxOSwzODAyMCwzODAzMywzODAz''@;'; put 'put ''OCwzODA0MCwzODA4NywzODA5NSwzODA5OSwzODEwMCwzODEwNiwzODExOCwzODEzOSwzODE3MiwzODE3NiwyOTcyMywyOTcyMiwyOTc2MSwyOTc4OCwyOTc4MywyOTc4MSwyOTc4NSwyOTgxNSwyOTgwNSwyOTgyMiwyOTg1MiwyOTgzOCwyOTgyNCwyOTgyNSwyOTgzMSwyOTgzNSwyOTg1NCwy''@;'; put 'put ''OTg2NCwyOTg2NSwyOTg0MCwyOTg2MywyOTkwNiwyOTg4MiwzODg5MCwzODg5MSwzODg5MiwyNjQ0NCwyNjQ1MSwyNjQ2MiwyNjQ0MCwyNjQ3MywyNjUzMywyNjUwMywyNjQ3NCwyNjQ4MywyNjUyMCwyNjUzNSwyNjQ4NSwyNjUzNiwyNjUyNiwyNjU0MSwyNjUwNywyNjQ4NywyNjQ5MiwyNjYw''@;'; put 'put ''OCwyNjYzMywyNjU4NCwyNjYzNCwyNjYwMSwyNjU0NCwyNjYzNiwyNjU4NSwyNjU0OSwyNjU4NiwyNjU0NywyNjU4OSwyNjYyNCwyNjU2MywyNjU1MiwyNjU5NCwyNjYzOCwyNjU2MSwyNjYyMSwyNjY3NCwyNjY3NSwyNjcyMCwyNjcyMSwyNjcwMiwyNjcyMiwyNjY5MiwyNjcyNCwyNjc1NSwy''@;'; put 'put ''NjY1MywyNjcwOSwyNjcyNiwyNjY4OSwyNjcyNywyNjY4OCwyNjY4NiwyNjY5OCwyNjY5NywyNjY2NSwyNjgwNSwyNjc2NywyNjc0MCwyNjc0MywyNjc3MSwyNjczMSwyNjgxOCwyNjk5MCwyNjg3NiwyNjkxMSwyNjkxMiwyNjg3MywzODE4MywzODE5NSwzODIwNSwzODIxMSwzODIxNiwzODIx''@;'; put 'put ''OSwzODIyOSwzODIzNCwzODI0MCwzODI1NCwzODI2MCwzODI2MSwzODI2MywzODI2NCwzODI2NSwzODI2NiwzODI2NywzODI2OCwzODI2OSwzODI3MCwzODI3MiwzODI3MywzODI3NCwzODI3NSwzODI3NiwzODI3NywzODI3OCwzODI3OSwzODI4MCwzODI4MSwzODI4MiwzODI4MywzODI4NCwz''@;'; put 'put ''ODI4NSwzODI4NiwzODI4NywzODI4OCwzODI4OSwzODI5MCwzODI5MSwzODI5MiwzODI5MywzODI5NCwzODI5NSwzODI5NiwzODI5NywzODI5OCwzODI5OSwzODMwMCwzODMwMSwzODMwMiwzODMwMywzODMwNCwzODMwNSwzODMwNiwzODMwNywzODMwOCwzODMwOSwzODMxMCwzODMxMSwzODMx''@;'; put 'put ''MiwzODMxMywzODMxNCwzODMxNSwzODMxNiwzODMxNywzODMxOCwzODMxOSwzODMyMCwzODMyMSwzODMyMiwzODMyMywzODMyNCwzODMyNSwzODMyNiwzODMyNywzODMyOCwzODMyOSwzODMzMCwzODMzMSwzODMzMiwzODMzMywzODMzNCwzODMzNSwzODMzNiwzODMzNywzODMzOCwzODMzOSwz''@;'; put 'put ''ODM0MCwzODM0MSwzODM0MiwzODM0MywzODM0NCwzODM0NSwzODM0NiwzODM0NywyNjkxNiwyNjg2NCwyNjg5MSwyNjg4MSwyNjk2NywyNjg1MSwyNjg5NiwyNjk5MywyNjkzNywyNjk3NiwyNjk0NiwyNjk3MywyNzAxMiwyNjk4NywyNzAwOCwyNzAzMiwyN2UzLDI2OTMyLDI3MDg0LDI3MDE1''@;'; put 'put ''LDI3MDE2LDI3MDg2LDI3MDE3LDI2OTgyLDI2OTc5LDI3MDAxLDI3MDM1LDI3MDQ3LDI3MDY3LDI3MDUxLDI3MDUzLDI3MDkyLDI3MDU3LDI3MDczLDI3MDgyLDI3MTAzLDI3MDI5LDI3MTA0LDI3MDIxLDI3MTM1LDI3MTgzLDI3MTE3LDI3MTU5LDI3MTYwLDI3MjM3LDI3MTIyLDI3MjA0LDI3''@;'; put 'put ''MTk4LDI3Mjk2LDI3MjE2LDI3MjI3LDI3MTg5LDI3Mjc4LDI3MjU3LDI3MTk3LDI3MTc2LDI3MjI0LDI3MjYwLDI3MjgxLDI3MjgwLDI3MzA1LDI3Mjg3LDI3MzA3LDI5NDk1LDI5NTIyLDI3NTIxLDI3NTIyLDI3NTI3LDI3NTI0LDI3NTM4LDI3NTM5LDI3NTMzLDI3NTQ2LDI3NTQ3LDI3NTUz''@;'; put 'put ''LDI3NTYyLDM2NzE1LDM2NzE3LDM2NzIxLDM2NzIyLDM2NzIzLDM2NzI1LDM2NzI2LDM2NzI4LDM2NzI3LDM2NzI5LDM2NzMwLDM2NzMyLDM2NzM0LDM2NzM3LDM2NzM4LDM2NzQwLDM2NzQzLDM2NzQ3LDM4MzQ4LDM4MzQ5LDM4MzUwLDM4MzUxLDM4MzUyLDM4MzUzLDM4MzU0LDM4MzU1LDM4''@;'; put 'put ''MzU2LDM4MzU3LDM4MzU4LDM4MzU5LDM4MzYwLDM4MzYxLDM4MzYyLDM4MzYzLDM4MzY0LDM4MzY1LDM4MzY2LDM4MzY3LDM4MzY4LDM4MzY5LDM4MzcwLDM4MzcxLDM4MzcyLDM4MzczLDM4Mzc0LDM4Mzc1LDM4MzgwLDM4Mzk5LDM4NDA3LDM4NDE5LDM4NDI0LDM4NDI3LDM4NDMwLDM4NDMy''@;'; put 'put ''LDM4NDM1LDM4NDM2LDM4NDM3LDM4NDM4LDM4NDM5LDM4NDQwLDM4NDQxLDM4NDQzLDM4NDQ0LDM4NDQ1LDM4NDQ3LDM4NDQ4LDM4NDU1LDM4NDU2LDM4NDU3LDM4NDU4LDM4NDYyLDM4NDY1LDM4NDY3LDM4NDc0LDM4NDc4LDM4NDc5LDM4NDgxLDM4NDgyLDM4NDgzLDM4NDg2LDM4NDg3LDM4''@;'; put 'put ''NDg4LDM4NDg5LDM4NDkwLDM4NDkyLDM4NDkzLDM4NDk0LDM4NDk2LDM4NDk5LDM4NTAxLDM4NTAyLDM4NTA3LDM4NTA5LDM4NTEwLDM4NTExLDM4NTEyLDM4NTEzLDM4NTE1LDM4NTIwLDM4NTIxLDM4NTIyLDM4NTIzLDM4NTI0LDM4NTI1LDM4NTI2LDM4NTI3LDM4NTI4LDM4NTI5LDM4NTMw''@;'; put 'put ''LDM4NTMxLDM4NTMyLDM4NTM1LDM4NTM3LDM4NTM4LDM2NzQ5LDM2NzUwLDM2NzUxLDM2NzYwLDM2NzYyLDM2NTU4LDI1MDk5LDI1MTExLDI1MTE1LDI1MTE5LDI1MTIyLDI1MTIxLDI1MTI1LDI1MTI0LDI1MTMyLDMzMjU1LDI5OTM1LDI5OTQwLDI5OTUxLDI5OTY3LDI5OTY5LDI5OTcxLDI1''@;'; put 'put ''OTA4LDI2MDk0LDI2MDk1LDI2MDk2LDI2MTIyLDI2MTM3LDI2NDgyLDI2MTE1LDI2MTMzLDI2MTEyLDI4ODA1LDI2MzU5LDI2MTQxLDI2MTY0LDI2MTYxLDI2MTY2LDI2MTY1LDMyNzc0LDI2MjA3LDI2MTk2LDI2MTc3LDI2MTkxLDI2MTk4LDI2MjA5LDI2MTk5LDI2MjMxLDI2MjQ0LDI2MjUy''@;'; put 'put ''LDI2Mjc5LDI2MjY5LDI2MzAyLDI2MzMxLDI2MzMyLDI2MzQyLDI2MzQ1LDM2MTQ2LDM2MTQ3LDM2MTUwLDM2MTU1LDM2MTU3LDM2MTYwLDM2MTY1LDM2MTY2LDM2MTY4LDM2MTY5LDM2MTY3LDM2MTczLDM2MTgxLDM2MTg1LDM1MjcxLDM1Mjc0LDM1Mjc1LDM1Mjc2LDM1Mjc4LDM1Mjc5LDM1''@;'; put 'put ''MjgwLDM1MjgxLDI5Mjk0LDI5MzQzLDI5Mjc3LDI5Mjg2LDI5Mjk1LDI5MzEwLDI5MzExLDI5MzE2LDI5MzIzLDI5MzI1LDI5MzI3LDI5MzMwLDI1MzUyLDI1Mzk0LDI1NTIwLDM4NTQwLDM4NTQyLDM4NTQ1LDM4NTQ2LDM4NTQ3LDM4NTQ5LDM4NTUwLDM4NTU0LDM4NTU1LDM4NTU3LDM4NTU4''@;'; put 'put ''LDM4NTU5LDM4NTYwLDM4NTYxLDM4NTYyLDM4NTYzLDM4NTY0LDM4NTY1LDM4NTY2LDM4NTY4LDM4NTY5LDM4NTcwLDM4NTcxLDM4NTcyLDM4NTczLDM4NTc0LDM4NTc1LDM4NTc3LDM4NTc4LDM4NTgwLDM4NTgxLDM4NTgzLDM4NTg0LDM4NTg2LDM4NTg3LDM4NTkxLDM4NTk0LDM4NTk1LDM4''@;'; put 'put ''NjAwLDM4NjAyLDM4NjAzLDM4NjA4LDM4NjA5LDM4NjExLDM4NjEyLDM4NjE0LDM4NjE1LDM4NjE2LDM4NjE3LDM4NjE4LDM4NjE5LDM4NjIwLDM4NjIxLDM4NjIyLDM4NjIzLDM4NjI1LDM4NjI2LDM4NjI3LDM4NjI4LDM4NjI5LDM4NjMwLDM4NjMxLDM4NjM1LDM4NjM2LDM4NjM3LDM4NjM4''@;'; put 'put ''LDM4NjQwLDM4NjQxLDM4NjQyLDM4NjQ0LDM4NjQ1LDM4NjQ4LDM4NjUwLDM4NjUxLDM4NjUyLDM4NjUzLDM4NjU1LDM4NjU4LDM4NjU5LDM4NjYxLDM4NjY2LDM4NjY3LDM4NjY4LDM4NjcyLDM4NjczLDM4Njc0LDM4Njc2LDM4Njc3LDM4Njc5LDM4NjgwLDM4NjgxLDM4NjgyLDM4NjgzLDM4''@;'; put 'put ''Njg1LDM4Njg3LDM4Njg4LDI1NjYzLDI1ODE2LDMyNzcyLDI3NjI2LDI3NjM1LDI3NjQ1LDI3NjM3LDI3NjQxLDI3NjUzLDI3NjU1LDI3NjU0LDI3NjYxLDI3NjY5LDI3NjcyLDI3NjczLDI3Njc0LDI3NjgxLDI3Njg5LDI3Njg0LDI3NjkwLDI3Njk4LDI1OTA5LDI1OTQxLDI1OTYzLDI5MjYx''@;'; put 'put ''LDI5MjY2LDI5MjcwLDI5MjMyLDM0NDAyLDIxMDE0LDMyOTI3LDMyOTI0LDMyOTE1LDMyOTU2LDI2Mzc4LDMyOTU3LDMyOTQ1LDMyOTM5LDMyOTQxLDMyOTQ4LDMyOTUxLDMyOTk5LDMzZTMsMzMwMDEsMzMwMDIsMzI5ODcsMzI5NjIsMzI5NjQsMzI5ODUsMzI5NzMsMzI5ODMsMjYzODQsMzI5''@;'; put 'put ''ODksMzMwMDMsMzMwMDksMzMwMTIsMzMwMDUsMzMwMzcsMzMwMzgsMzMwMTAsMzMwMjAsMjYzODksMzMwNDIsMzU5MzAsMzMwNzgsMzMwNTQsMzMwNjgsMzMwNDgsMzMwNzQsMzMwOTYsMzMxMDAsMzMxMDcsMzMxNDAsMzMxMTMsMzMxMTQsMzMxMzcsMzMxMjAsMzMxMjksMzMxNDgsMzMxNDks''@;'; put 'put ''MzMxMzMsMzMxMjcsMjI2MDUsMjMyMjEsMzMxNjAsMzMxNTQsMzMxNjksMjgzNzMsMzMxODcsMzMxOTQsMzMyMjgsMjY0MDYsMzMyMjYsMzMyMTEsMzg2ODksMzg2OTAsMzg2OTEsMzg2OTIsMzg2OTMsMzg2OTQsMzg2OTUsMzg2OTYsMzg2OTcsMzg2OTksMzg3MDAsMzg3MDIsMzg3MDMsMzg3''@;'; put 'put ''MDUsMzg3MDcsMzg3MDgsMzg3MDksMzg3MTAsMzg3MTEsMzg3MTQsMzg3MTUsMzg3MTYsMzg3MTcsMzg3MTksMzg3MjAsMzg3MjEsMzg3MjIsMzg3MjMsMzg3MjQsMzg3MjUsMzg3MjYsMzg3MjcsMzg3MjgsMzg3MjksMzg3MzAsMzg3MzEsMzg3MzIsMzg3MzMsMzg3MzQsMzg3MzUsMzg3MzYs''@;'; put 'put ''Mzg3MzcsMzg3NDAsMzg3NDEsMzg3NDMsMzg3NDQsMzg3NDYsMzg3NDgsMzg3NDksMzg3NTEsMzg3NTUsMzg3NTYsMzg3NTgsMzg3NTksMzg3NjAsMzg3NjIsMzg3NjMsMzg3NjQsMzg3NjUsMzg3NjYsMzg3NjcsMzg3NjgsMzg3NjksMzg3NzAsMzg3NzMsMzg3NzUsMzg3NzYsMzg3NzcsMzg3''@;'; put 'put ''NzgsMzg3NzksMzg3ODEsMzg3ODIsMzg3ODMsMzg3ODQsMzg3ODUsMzg3ODYsMzg3ODcsMzg3ODgsMzg3OTAsMzg3OTEsMzg3OTIsMzg3OTMsMzg3OTQsMzg3OTYsMzg3OTgsMzg3OTksMzg4MDAsMzg4MDMsMzg4MDUsMzg4MDYsMzg4MDcsMzg4MDksMzg4MTAsMzg4MTEsMzg4MTIsMzg4MTMs''@;'; put 'put ''MzMyMTcsMzMxOTAsMjc0MjgsMjc0NDcsMjc0NDksMjc0NTksMjc0NjIsMjc0ODEsMzkxMjEsMzkxMjIsMzkxMjMsMzkxMjUsMzkxMjksMzkxMzAsMjc1NzEsMjQzODQsMjc1ODYsMzUzMTUsMjZlMyw0MDc4NSwyNjAwMywyNjA0NCwyNjA1NCwyNjA1MiwyNjA1MSwyNjA2MCwyNjA2MiwyNjA2''@;'; put 'put ''NiwyNjA3MCwyODgwMCwyODgyOCwyODgyMiwyODgyOSwyODg1OSwyODg2NCwyODg1NSwyODg0MywyODg0OSwyODkwNCwyODg3NCwyODk0NCwyODk0NywyODk1MCwyODk3NSwyODk3NywyOTA0MywyOTAyMCwyOTAzMiwyODk5NywyOTA0MiwyOTAwMiwyOTA0OCwyOTA1MCwyOTA4MCwyOTEwNywy''@;'; put 'put ''OTEwOSwyOTA5NiwyOTA4OCwyOTE1MiwyOTE0MCwyOTE1OSwyOTE3NywyOTIxMywyOTIyNCwyODc4MCwyODk1MiwyOTAzMCwyOTExMywyNTE1MCwyNTE0OSwyNTE1NSwyNTE2MCwyNTE2MSwzMTAzNSwzMTA0MCwzMTA0NiwzMTA0OSwzMTA2NywzMTA2OCwzMTA1OSwzMTA2NiwzMTA3NCwzMTA2''@;'; put 'put ''MywzMTA3MiwzMTA4NywzMTA3OSwzMTA5OCwzMTEwOSwzMTExNCwzMTEzMCwzMTE0MywzMTE1NSwyNDUyOSwyNDUyOCwzODgxNCwzODgxNSwzODgxNywzODgxOCwzODgyMCwzODgyMSwzODgyMiwzODgyMywzODgyNCwzODgyNSwzODgyNiwzODgyOCwzODgzMCwzODgzMiwzODgzMywzODgzNSwz''@;'; put 'put ''ODgzNywzODgzOCwzODgzOSwzODg0MCwzODg0MSwzODg0MiwzODg0MywzODg0NCwzODg0NSwzODg0NiwzODg0NywzODg0OCwzODg0OSwzODg1MCwzODg1MSwzODg1MiwzODg1MywzODg1NCwzODg1NSwzODg1NiwzODg1NywzODg1OCwzODg1OSwzODg2MCwzODg2MSwzODg2MiwzODg2MywzODg2''@;'; put 'put ''NCwzODg2NSwzODg2NiwzODg2NywzODg2OCwzODg2OSwzODg3MCwzODg3MSwzODg3MiwzODg3MywzODg3NCwzODg3NSwzODg3NiwzODg3NywzODg3OCwzODg3OSwzODg4MCwzODg4MSwzODg4MiwzODg4MywzODg4NCwzODg4NSwzODg4OCwzODg5NCwzODg5NSwzODg5NiwzODg5NywzODg5OCwz''@;'; put 'put ''ODkwMCwzODkwMywzODkwNCwzODkwNSwzODkwNiwzODkwNywzODkwOCwzODkwOSwzODkxMCwzODkxMSwzODkxMiwzODkxMywzODkxNCwzODkxNSwzODkxNiwzODkxNywzODkxOCwzODkxOSwzODkyMCwzODkyMSwzODkyMiwzODkyMywzODkyNCwzODkyNSwzODkyNiwyNDYzNiwyNDY2OSwyNDY2''@;'; put 'put ''NiwyNDY3OSwyNDY0MSwyNDY2NSwyNDY3NSwyNDc0NywyNDgzOCwyNDg0NSwyNDkyNSwyNTAwMSwyNDk4OSwyNTAzNSwyNTA0MSwyNTA5NCwzMjg5NiwzMjg5NSwyNzc5NSwyNzg5NCwyODE1NiwzMDcxMCwzMDcxMiwzMDcyMCwzMDcyOSwzMDc0MywzMDc0NCwzMDczNywyNjAyNywzMDc2NSwz''@;'; put 'put ''MDc0OCwzMDc0OSwzMDc3NywzMDc3OCwzMDc3OSwzMDc1MSwzMDc4MCwzMDc1NywzMDc2NCwzMDc1NSwzMDc2MSwzMDc5OCwzMDgyOSwzMDgwNiwzMDgwNywzMDc1OCwzMDgwMCwzMDc5MSwzMDc5NiwzMDgyNiwzMDg3NSwzMDg2NywzMDg3NCwzMDg1NSwzMDg3NiwzMDg4MSwzMDg4MywzMDg5''@;'; put 'put ''OCwzMDkwNSwzMDg4NSwzMDkzMiwzMDkzNywzMDkyMSwzMDk1NiwzMDk2MiwzMDk4MSwzMDk2NCwzMDk5NSwzMTAxMiwzMTAwNiwzMTAyOCw0MDg1OSw0MDY5Nyw0MDY5OSw0MDcwMCwzMDQ0OSwzMDQ2OCwzMDQ3NywzMDQ1NywzMDQ3MSwzMDQ3MiwzMDQ5MCwzMDQ5OCwzMDQ4OSwzMDUwOSwz''@;'; put 'put ''MDUwMiwzMDUxNywzMDUyMCwzMDU0NCwzMDU0NSwzMDUzNSwzMDUzMSwzMDU1NCwzMDU2OCwzODkyNywzODkyOCwzODkyOSwzODkzMCwzODkzMSwzODkzMiwzODkzMywzODkzNCwzODkzNSwzODkzNiwzODkzNywzODkzOCwzODkzOSwzODk0MCwzODk0MSwzODk0MiwzODk0MywzODk0NCwzODk0''@;'; put 'put ''NSwzODk0NiwzODk0NywzODk0OCwzODk0OSwzODk1MCwzODk1MSwzODk1MiwzODk1MywzODk1NCwzODk1NSwzODk1NiwzODk1NywzODk1OCwzODk1OSwzODk2MCwzODk2MSwzODk2MiwzODk2MywzODk2NCwzODk2NSwzODk2NiwzODk2NywzODk2OCwzODk2OSwzODk3MCwzODk3MSwzODk3Miwz''@;'; put 'put ''ODk3MywzODk3NCwzODk3NSwzODk3NiwzODk3NywzODk3OCwzODk3OSwzODk4MCwzODk4MSwzODk4MiwzODk4MywzODk4NCwzODk4NSwzODk4NiwzODk4NywzODk4OCwzODk4OSwzODk5MCwzODk5MSwzODk5MiwzODk5MywzODk5NCwzODk5NSwzODk5NiwzODk5NywzODk5OCwzODk5OSwzOWUz''@;'; put 'put ''LDM5MDAxLDM5MDAyLDM5MDAzLDM5MDA0LDM5MDA1LDM5MDA2LDM5MDA3LDM5MDA4LDM5MDA5LDM5MDEwLDM5MDExLDM5MDEyLDM5MDEzLDM5MDE0LDM5MDE1LDM5MDE2LDM5MDE3LDM5MDE4LDM5MDE5LDM5MDIwLDM5MDIxLDM5MDIyLDMwNTYyLDMwNTY1LDMwNTkxLDMwNjA1LDMwNTg5LDMw''@;'; put 'put ''NTkyLDMwNjA0LDMwNjA5LDMwNjIzLDMwNjI0LDMwNjQwLDMwNjQ1LDMwNjUzLDMwMDEwLDMwMDE2LDMwMDMwLDMwMDI3LDMwMDI0LDMwMDQzLDMwMDY2LDMwMDczLDMwMDgzLDMyNjAwLDMyNjA5LDMyNjA3LDM1NDAwLDMyNjE2LDMyNjI4LDMyNjI1LDMyNjMzLDMyNjQxLDMyNjM4LDMwNDEz''@;'; put 'put ''LDMwNDM3LDM0ODY2LDM4MDIxLDM4MDIyLDM4MDIzLDM4MDI3LDM4MDI2LDM4MDI4LDM4MDI5LDM4MDMxLDM4MDMyLDM4MDM2LDM4MDM5LDM4MDM3LDM4MDQyLDM4MDQzLDM4MDQ0LDM4MDUxLDM4MDUyLDM4MDU5LDM4MDU4LDM4MDYxLDM4MDYwLDM4MDYzLDM4MDY0LDM4MDY2LDM4MDY4LDM4''@;'; put 'put ''MDcwLDM4MDcxLDM4MDcyLDM4MDczLDM4MDc0LDM4MDc2LDM4MDc3LDM4MDc5LDM4MDg0LDM4MDg4LDM4MDg5LDM4MDkwLDM4MDkxLDM4MDkyLDM4MDkzLDM4MDk0LDM4MDk2LDM4MDk3LDM4MDk4LDM4MTAxLDM4MTAyLDM4MTAzLDM4MTA1LDM4MTA0LDM4MTA3LDM4MTEwLDM4MTExLDM4MTEy''@;'; put 'put ''LDM4MTE0LDM4MTE2LDM4MTE3LDM4MTE5LDM4MTIwLDM4MTIyLDM5MDIzLDM5MDI0LDM5MDI1LDM5MDI2LDM5MDI3LDM5MDI4LDM5MDUxLDM5MDU0LDM5MDU4LDM5MDYxLDM5MDY1LDM5MDc1LDM5MDgwLDM5MDgxLDM5MDgyLDM5MDgzLDM5MDg0LDM5MDg1LDM5MDg2LDM5MDg3LDM5MDg4LDM5''@;'; put 'put ''MDg5LDM5MDkwLDM5MDkxLDM5MDkyLDM5MDkzLDM5MDk0LDM5MDk1LDM5MDk2LDM5MDk3LDM5MDk4LDM5MDk5LDM5MTAwLDM5MTAxLDM5MTAyLDM5MTAzLDM5MTA0LDM5MTA1LDM5MTA2LDM5MTA3LDM5MTA4LDM5MTA5LDM5MTEwLDM5MTExLDM5MTEyLDM5MTEzLDM5MTE0LDM5MTE1LDM5MTE2''@;'; put 'put ''LDM5MTE3LDM5MTE5LDM5MTIwLDM5MTI0LDM5MTI2LDM5MTI3LDM5MTMxLDM5MTMyLDM5MTMzLDM5MTM2LDM5MTM3LDM5MTM4LDM5MTM5LDM5MTQwLDM5MTQxLDM5MTQyLDM5MTQ1LDM5MTQ2LDM5MTQ3LDM5MTQ4LDM5MTQ5LDM5MTUwLDM5MTUxLDM5MTUyLDM5MTUzLDM5MTU0LDM5MTU1LDM5''@;'; put 'put ''MTU2LDM5MTU3LDM5MTU4LDM5MTU5LDM5MTYwLDM5MTYxLDM5MTYyLDM5MTYzLDM5MTY0LDM5MTY1LDM5MTY2LDM5MTY3LDM5MTY4LDM5MTY5LDM5MTcwLDM5MTcxLDM5MTcyLDM5MTczLDM5MTc0LDM5MTc1LDM4MTIxLDM4MTIzLDM4MTI2LDM4MTI3LDM4MTMxLDM4MTMyLDM4MTMzLDM4MTM1''@;'; put 'put ''LDM4MTM3LDM4MTQwLDM4MTQxLDM4MTQzLDM4MTQ3LDM4MTQ2LDM4MTUwLDM4MTUxLDM4MTUzLDM4MTU0LDM4MTU3LDM4MTU4LDM4MTU5LDM4MTYyLDM4MTYzLDM4MTY0LDM4MTY1LDM4MTY2LDM4MTY4LDM4MTcxLDM4MTczLDM4MTc0LDM4MTc1LDM4MTc4LDM4MTg2LDM4MTg3LDM4MTg1LDM4''@;'; put 'put ''MTg4LDM4MTkzLDM4MTk0LDM4MTk2LDM4MTk4LDM4MTk5LDM4MjAwLDM4MjA0LDM4MjA2LDM4MjA3LDM4MjEwLDM4MTk3LDM4MjEyLDM4MjEzLDM4MjE0LDM4MjE3LDM4MjIwLDM4MjIyLDM4MjIzLDM4MjI2LDM4MjI3LDM4MjI4LDM4MjMwLDM4MjMxLDM4MjMyLDM4MjMzLDM4MjM1LDM4MjM4''@;'; put 'put ''LDM4MjM5LDM4MjM3LDM4MjQxLDM4MjQyLDM4MjQ0LDM4MjQ1LDM4MjQ2LDM4MjQ3LDM4MjQ4LDM4MjQ5LDM4MjUwLDM4MjUxLDM4MjUyLDM4MjU1LDM4MjU3LDM4MjU4LDM4MjU5LDM4MjAyLDMwNjk1LDMwNzAwLDM4NjAxLDMxMTg5LDMxMjEzLDMxMjAzLDMxMjExLDMxMjM4LDIzODc5LDMx''@;'; put 'put ''MjM1LDMxMjM0LDMxMjYyLDMxMjUyLDM5MTc2LDM5MTc3LDM5MTc4LDM5MTc5LDM5MTgwLDM5MTgyLDM5MTgzLDM5MTg1LDM5MTg2LDM5MTg3LDM5MTg4LDM5MTg5LDM5MTkwLDM5MTkxLDM5MTkyLDM5MTkzLDM5MTk0LDM5MTk1LDM5MTk2LDM5MTk3LDM5MTk4LDM5MTk5LDM5MjAwLDM5MjAx''@;'; put 'put ''LDM5MjAyLDM5MjAzLDM5MjA0LDM5MjA1LDM5MjA2LDM5MjA3LDM5MjA4LDM5MjA5LDM5MjEwLDM5MjExLDM5MjEyLDM5MjEzLDM5MjE1LDM5MjE2LDM5MjE3LDM5MjE4LDM5MjE5LDM5MjIwLDM5MjIxLDM5MjIyLDM5MjIzLDM5MjI0LDM5MjI1LDM5MjI2LDM5MjI3LDM5MjI4LDM5MjI5LDM5''@;'; put 'put ''MjMwLDM5MjMxLDM5MjMyLDM5MjMzLDM5MjM0LDM5MjM1LDM5MjM2LDM5MjM3LDM5MjM4LDM5MjM5LDM5MjQwLDM5MjQxLDM5MjQyLDM5MjQzLDM5MjQ0LDM5MjQ1LDM5MjQ2LDM5MjQ3LDM5MjQ4LDM5MjQ5LDM5MjUwLDM5MjUxLDM5MjU0LDM5MjU1LDM5MjU2LDM5MjU3LDM5MjU4LDM5MjU5''@;'; put 'put ''LDM5MjYwLDM5MjYxLDM5MjYyLDM5MjYzLDM5MjY0LDM5MjY1LDM5MjY2LDM5MjY4LDM5MjcwLDM5MjgzLDM5Mjg4LDM5Mjg5LDM5MjkxLDM5Mjk0LDM5Mjk4LDM5Mjk5LDM5MzA1LDMxMjg5LDMxMjg3LDMxMzEzLDQwNjU1LDM5MzMzLDMxMzQ0LDMwMzQ0LDMwMzUwLDMwMzU1LDMwMzYxLDMw''@;'; put 'put ''MzcyLDI5OTE4LDI5OTIwLDI5OTk2LDQwNDgwLDQwNDgyLDQwNDg4LDQwNDg5LDQwNDkwLDQwNDkxLDQwNDkyLDQwNDk4LDQwNDk3LDQwNTAyLDQwNTA0LDQwNTAzLDQwNTA1LDQwNTA2LDQwNTEwLDQwNTEzLDQwNTE0LDQwNTE2LDQwNTE4LDQwNTE5LDQwNTIwLDQwNTIxLDQwNTIzLDQwNTI0''@;'; put 'put ''LDQwNTI2LDQwNTI5LDQwNTMzLDQwNTM1LDQwNTM4LDQwNTM5LDQwNTQwLDQwNTQyLDQwNTQ3LDQwNTUwLDQwNTUxLDQwNTUyLDQwNTUzLDQwNTU0LDQwNTU1LDQwNTU2LDQwNTYxLDQwNTU3LDQwNTYzLDMwMDk4LDMwMTAwLDMwMTAyLDMwMTEyLDMwMTA5LDMwMTI0LDMwMTE1LDMwMTMxLDMw''@;'; put 'put ''MTMyLDMwMTM2LDMwMTQ4LDMwMTI5LDMwMTI4LDMwMTQ3LDMwMTQ2LDMwMTY2LDMwMTU3LDMwMTc5LDMwMTg0LDMwMTgyLDMwMTgwLDMwMTg3LDMwMTgzLDMwMjExLDMwMTkzLDMwMjA0LDMwMjA3LDMwMjI0LDMwMjA4LDMwMjEzLDMwMjIwLDMwMjMxLDMwMjE4LDMwMjQ1LDMwMjMyLDMwMjI5''@;'; put 'put ''LDMwMjMzLDM5MzA4LDM5MzEwLDM5MzIyLDM5MzIzLDM5MzI0LDM5MzI1LDM5MzI2LDM5MzI3LDM5MzI4LDM5MzI5LDM5MzMwLDM5MzMxLDM5MzMyLDM5MzM0LDM5MzM1LDM5MzM3LDM5MzM4LDM5MzM5LDM5MzQwLDM5MzQxLDM5MzQyLDM5MzQzLDM5MzQ0LDM5MzQ1LDM5MzQ2LDM5MzQ3LDM5''@;'; put 'put ''MzQ4LDM5MzQ5LDM5MzUwLDM5MzUxLDM5MzUyLDM5MzUzLDM5MzU0LDM5MzU1LDM5MzU2LDM5MzU3LDM5MzU4LDM5MzU5LDM5MzYwLDM5MzYxLDM5MzYyLDM5MzYzLDM5MzY0LDM5MzY1LDM5MzY2LDM5MzY3LDM5MzY4LDM5MzY5LDM5MzcwLDM5MzcxLDM5MzcyLDM5MzczLDM5Mzc0LDM5Mzc1''@;'; put 'put ''LDM5Mzc2LDM5Mzc3LDM5Mzc4LDM5Mzc5LDM5MzgwLDM5MzgxLDM5MzgyLDM5MzgzLDM5Mzg0LDM5Mzg1LDM5Mzg2LDM5Mzg3LDM5Mzg4LDM5Mzg5LDM5MzkwLDM5MzkxLDM5MzkyLDM5MzkzLDM5Mzk0LDM5Mzk1LDM5Mzk2LDM5Mzk3LDM5Mzk4LDM5Mzk5LDM5NDAwLDM5NDAxLDM5NDAyLDM5''@;'; put 'put ''NDAzLDM5NDA0LDM5NDA1LDM5NDA2LDM5NDA3LDM5NDA4LDM5NDA5LDM5NDEwLDM5NDExLDM5NDEyLDM5NDEzLDM5NDE0LDM5NDE1LDM5NDE2LDM5NDE3LDMwMjM1LDMwMjY4LDMwMjQyLDMwMjQwLDMwMjcyLDMwMjUzLDMwMjU2LDMwMjcxLDMwMjYxLDMwMjc1LDMwMjcwLDMwMjU5LDMwMjg1''@;'; put 'put ''LDMwMzAyLDMwMjkyLDMwMzAwLDMwMjk0LDMwMzE1LDMwMzE5LDMyNzE0LDMxNDYyLDMxMzUyLDMxMzUzLDMxMzYwLDMxMzY2LDMxMzY4LDMxMzgxLDMxMzk4LDMxMzkyLDMxNDA0LDMxNDAwLDMxNDA1LDMxNDExLDM0OTE2LDM0OTIxLDM0OTMwLDM0OTQxLDM0OTQzLDM0OTQ2LDM0OTc4LDM1''@;'; put 'put ''MDE0LDM0OTk5LDM1MDA0LDM1MDE3LDM1MDQyLDM1MDIyLDM1MDQzLDM1MDQ1LDM1MDU3LDM1MDk4LDM1MDY4LDM1MDQ4LDM1MDcwLDM1MDU2LDM1MTA1LDM1MDk3LDM1MDkxLDM1MDk5LDM1MDgyLDM1MTI0LDM1MTE1LDM1MTI2LDM1MTM3LDM1MTc0LDM1MTk1LDMwMDkxLDMyOTk3LDMwMzg2''@;'; put 'put ''LDMwMzg4LDMwNjg0LDMyNzg2LDMyNzg4LDMyNzkwLDMyNzk2LDMyODAwLDMyODAyLDMyODA1LDMyODA2LDMyODA3LDMyODA5LDMyODA4LDMyODE3LDMyNzc5LDMyODIxLDMyODM1LDMyODM4LDMyODQ1LDMyODUwLDMyODczLDMyODgxLDM1MjAzLDM5MDMyLDM5MDQwLDM5MDQzLDM5NDE4LDM5''@;'; put 'put ''NDE5LDM5NDIwLDM5NDIxLDM5NDIyLDM5NDIzLDM5NDI0LDM5NDI1LDM5NDI2LDM5NDI3LDM5NDI4LDM5NDI5LDM5NDMwLDM5NDMxLDM5NDMyLDM5NDMzLDM5NDM0LDM5NDM1LDM5NDM2LDM5NDM3LDM5NDM4LDM5NDM5LDM5NDQwLDM5NDQxLDM5NDQyLDM5NDQzLDM5NDQ0LDM5NDQ1LDM5NDQ2''@;'; put 'put ''LDM5NDQ3LDM5NDQ4LDM5NDQ5LDM5NDUwLDM5NDUxLDM5NDUyLDM5NDUzLDM5NDU0LDM5NDU1LDM5NDU2LDM5NDU3LDM5NDU4LDM5NDU5LDM5NDYwLDM5NDYxLDM5NDYyLDM5NDYzLDM5NDY0LDM5NDY1LDM5NDY2LDM5NDY3LDM5NDY4LDM5NDY5LDM5NDcwLDM5NDcxLDM5NDcyLDM5NDczLDM5''@;'; put 'put ''NDc0LDM5NDc1LDM5NDc2LDM5NDc3LDM5NDc4LDM5NDc5LDM5NDgwLDM5NDgxLDM5NDgyLDM5NDgzLDM5NDg0LDM5NDg1LDM5NDg2LDM5NDg3LDM5NDg4LDM5NDg5LDM5NDkwLDM5NDkxLDM5NDkyLDM5NDkzLDM5NDk0LDM5NDk1LDM5NDk2LDM5NDk3LDM5NDk4LDM5NDk5LDM5NTAwLDM5NTAx''@;'; put 'put ''LDM5NTAyLDM5NTAzLDM5NTA0LDM5NTA1LDM5NTA2LDM5NTA3LDM5NTA4LDM5NTA5LDM5NTEwLDM5NTExLDM5NTEyLDM5NTEzLDM5MDQ5LDM5MDUyLDM5MDUzLDM5MDU1LDM5MDYwLDM5MDY2LDM5MDY3LDM5MDcwLDM5MDcxLDM5MDczLDM5MDc0LDM5MDc3LDM5MDc4LDM0MzgxLDM0Mzg4LDM0''@;'; put 'put ''NDEyLDM0NDE0LDM0NDMxLDM0NDI2LDM0NDI4LDM0NDI3LDM0NDcyLDM0NDQ1LDM0NDQzLDM0NDc2LDM0NDYxLDM0NDcxLDM0NDY3LDM0NDc0LDM0NDUxLDM0NDczLDM0NDg2LDM0NTAwLDM0NDg1LDM0NTEwLDM0NDgwLDM0NDkwLDM0NDgxLDM0NDc5LDM0NTA1LDM0NTExLDM0NDg0LDM0NTM3''@;'; put 'put ''LDM0NTQ1LDM0NTQ2LDM0NTQxLDM0NTQ3LDM0NTEyLDM0NTc5LDM0NTI2LDM0NTQ4LDM0NTI3LDM0NTIwLDM0NTEzLDM0NTYzLDM0NTY3LDM0NTUyLDM0NTY4LDM0NTcwLDM0NTczLDM0NTY5LDM0NTk1LDM0NjE5LDM0NTkwLDM0NTk3LDM0NjA2LDM0NTg2LDM0NjIyLDM0NjMyLDM0NjEyLDM0''@;'; put 'put ''NjA5LDM0NjAxLDM0NjE1LDM0NjIzLDM0NjkwLDM0NTk0LDM0Njg1LDM0Njg2LDM0NjgzLDM0NjU2LDM0NjcyLDM0NjM2LDM0NjcwLDM0Njk5LDM0NjQzLDM0NjU5LDM0Njg0LDM0NjYwLDM0NjQ5LDM0NjYxLDM0NzA3LDM0NzM1LDM0NzI4LDM0NzcwLDM5NTE0LDM5NTE1LDM5NTE2LDM5NTE3''@;'; put 'put ''LDM5NTE4LDM5NTE5LDM5NTIwLDM5NTIxLDM5NTIyLDM5NTIzLDM5NTI0LDM5NTI1LDM5NTI2LDM5NTI3LDM5NTI4LDM5NTI5LDM5NTMwLDM5NTMxLDM5NTM4LDM5NTU1LDM5NTYxLDM5NTY1LDM5NTY2LDM5NTcyLDM5NTczLDM5NTc3LDM5NTkwLDM5NTkzLDM5NTk0LDM5NTk1LDM5NTk2LDM5''@;'; put 'put ''NTk3LDM5NTk4LDM5NTk5LDM5NjAyLDM5NjAzLDM5NjA0LDM5NjA1LDM5NjA5LDM5NjExLDM5NjEzLDM5NjE0LDM5NjE1LDM5NjE5LDM5NjIwLDM5NjIyLDM5NjIzLDM5NjI0LDM5NjI1LDM5NjI2LDM5NjI5LDM5NjMwLDM5NjMxLDM5NjMyLDM5NjM0LDM5NjM2LDM5NjM3LDM5NjM4LDM5NjM5''@;'; put 'put ''LDM5NjQxLDM5NjQyLDM5NjQzLDM5NjQ0LDM5NjQ1LDM5NjQ2LDM5NjQ4LDM5NjUwLDM5NjUxLDM5NjUyLDM5NjUzLDM5NjU1LDM5NjU2LDM5NjU3LDM5NjU4LDM5NjYwLDM5NjYyLDM5NjY0LDM5NjY1LDM5NjY2LDM5NjY3LDM5NjY4LDM5NjY5LDM5NjcwLDM5NjcxLDM5NjcyLDM5Njc0LDM5''@;'; put 'put ''Njc2LDM5Njc3LDM5Njc4LDM5Njc5LDM5NjgwLDM5NjgxLDM5NjgyLDM5Njg0LDM5Njg1LDM5Njg2LDM0NzU4LDM0Njk2LDM0NjkzLDM0NzMzLDM0NzExLDM0NjkxLDM0NzMxLDM0Nzg5LDM0NzMyLDM0NzQxLDM0NzM5LDM0NzYzLDM0NzcxLDM0NzQ5LDM0NzY5LDM0NzUyLDM0NzYyLDM0Nzc5''@;'; put 'put ''LDM0Nzk0LDM0Nzg0LDM0Nzk4LDM0ODM4LDM0ODM1LDM0ODE0LDM0ODI2LDM0ODQzLDM0ODQ5LDM0ODczLDM0ODc2LDMyNTY2LDMyNTc4LDMyNTgwLDMyNTgxLDMzMjk2LDMxNDgyLDMxNDg1LDMxNDk2LDMxNDkxLDMxNDkyLDMxNTA5LDMxNDk4LDMxNTMxLDMxNTAzLDMxNTU5LDMxNTQ0LDMx''@;'; put 'put ''NTMwLDMxNTEzLDMxNTM0LDMxNTM3LDMxNTIwLDMxNTI1LDMxNTI0LDMxNTM5LDMxNTUwLDMxNTE4LDMxNTc2LDMxNTc4LDMxNTU3LDMxNjA1LDMxNTY0LDMxNTgxLDMxNTg0LDMxNTk4LDMxNjExLDMxNTg2LDMxNjAyLDMxNjAxLDMxNjMyLDMxNjU0LDMxNjU1LDMxNjcyLDMxNjYwLDMxNjQ1''@;'; put 'put ''LDMxNjU2LDMxNjIxLDMxNjU4LDMxNjQ0LDMxNjUwLDMxNjU5LDMxNjY4LDMxNjk3LDMxNjgxLDMxNjkyLDMxNzA5LDMxNzA2LDMxNzE3LDMxNzE4LDMxNzIyLDMxNzU2LDMxNzQyLDMxNzQwLDMxNzU5LDMxNzY2LDMxNzU1LDM5Njg3LDM5Njg5LDM5NjkwLDM5NjkxLDM5NjkyLDM5NjkzLDM5''@;'; put 'put ''Njk0LDM5Njk2LDM5Njk3LDM5Njk4LDM5NzAwLDM5NzAxLDM5NzAyLDM5NzAzLDM5NzA0LDM5NzA1LDM5NzA2LDM5NzA3LDM5NzA4LDM5NzA5LDM5NzEwLDM5NzEyLDM5NzEzLDM5NzE0LDM5NzE2LDM5NzE3LDM5NzE4LDM5NzE5LDM5NzIwLDM5NzIxLDM5NzIyLDM5NzIzLDM5NzI0LDM5NzI1''@;'; put 'put ''LDM5NzI2LDM5NzI4LDM5NzI5LDM5NzMxLDM5NzMyLDM5NzMzLDM5NzM0LDM5NzM1LDM5NzM2LDM5NzM3LDM5NzM4LDM5NzQxLDM5NzQyLDM5NzQzLDM5NzQ0LDM5NzUwLDM5NzU0LDM5NzU1LDM5NzU2LDM5NzU4LDM5NzYwLDM5NzYyLDM5NzYzLDM5NzY1LDM5NzY2LDM5NzY3LDM5NzY4LDM5''@;'; put 'put ''NzY5LDM5NzcwLDM5NzcxLDM5NzcyLDM5NzczLDM5Nzc0LDM5Nzc1LDM5Nzc2LDM5Nzc3LDM5Nzc4LDM5Nzc5LDM5NzgwLDM5NzgxLDM5NzgyLDM5NzgzLDM5Nzg0LDM5Nzg1LDM5Nzg2LDM5Nzg3LDM5Nzg4LDM5Nzg5LDM5NzkwLDM5NzkxLDM5NzkyLDM5NzkzLDM5Nzk0LDM5Nzk1LDM5Nzk2''@;'; put 'put ''LDM5Nzk3LDM5Nzk4LDM5Nzk5LDM5ODAwLDM5ODAxLDM5ODAyLDM5ODAzLDMxNzc1LDMxNzg2LDMxNzgyLDMxODAwLDMxODA5LDMxODA4LDMzMjc4LDMzMjgxLDMzMjgyLDMzMjg0LDMzMjYwLDM0ODg0LDMzMzEzLDMzMzE0LDMzMzE1LDMzMzI1LDMzMzI3LDMzMzIwLDMzMzIzLDMzMzM2LDMz''@;'; put 'put ''MzM5LDMzMzMxLDMzMzMyLDMzMzQyLDMzMzQ4LDMzMzUzLDMzMzU1LDMzMzU5LDMzMzcwLDMzMzc1LDMzMzg0LDM0OTQyLDM0OTQ5LDM0OTUyLDM1MDMyLDM1MDM5LDM1MTY2LDMyNjY5LDMyNjcxLDMyNjc5LDMyNjg3LDMyNjg4LDMyNjkwLDMxODY4LDI1OTI5LDMxODg5LDMxOTAxLDMxOTAw''@;'; put 'put ''LDMxOTAyLDMxOTA2LDMxOTIyLDMxOTMyLDMxOTMzLDMxOTM3LDMxOTQzLDMxOTQ4LDMxOTQ5LDMxOTQ0LDMxOTQxLDMxOTU5LDMxOTc2LDMzMzkwLDI2MjgwLDMyNzAzLDMyNzE4LDMyNzI1LDMyNzQxLDMyNzM3LDMyNzQyLDMyNzQ1LDMyNzUwLDMyNzU1LDMxOTkyLDMyMTE5LDMyMTY2LDMy''@;'; put 'put ''MTc0LDMyMzI3LDMyNDExLDQwNjMyLDQwNjI4LDM2MjExLDM2MjI4LDM2MjQ0LDM2MjQxLDM2MjczLDM2MTk5LDM2MjA1LDM1OTExLDM1OTEzLDM3MTk0LDM3MjAwLDM3MTk4LDM3MTk5LDM3MjIwLDM5ODA0LDM5ODA1LDM5ODA2LDM5ODA3LDM5ODA4LDM5ODA5LDM5ODEwLDM5ODExLDM5ODEy''@;'; put 'put ''LDM5ODEzLDM5ODE0LDM5ODE1LDM5ODE2LDM5ODE3LDM5ODE4LDM5ODE5LDM5ODIwLDM5ODIxLDM5ODIyLDM5ODIzLDM5ODI0LDM5ODI1LDM5ODI2LDM5ODI3LDM5ODI4LDM5ODI5LDM5ODMwLDM5ODMxLDM5ODMyLDM5ODMzLDM5ODM0LDM5ODM1LDM5ODM2LDM5ODM3LDM5ODM4LDM5ODM5LDM5''@;'; put 'put ''ODQwLDM5ODQxLDM5ODQyLDM5ODQzLDM5ODQ0LDM5ODQ1LDM5ODQ2LDM5ODQ3LDM5ODQ4LDM5ODQ5LDM5ODUwLDM5ODUxLDM5ODUyLDM5ODUzLDM5ODU0LDM5ODU1LDM5ODU2LDM5ODU3LDM5ODU4LDM5ODU5LDM5ODYwLDM5ODYxLDM5ODYyLDM5ODYzLDM5ODY0LDM5ODY1LDM5ODY2LDM5ODY3''@;'; put 'put ''LDM5ODY4LDM5ODY5LDM5ODcwLDM5ODcxLDM5ODcyLDM5ODczLDM5ODc0LDM5ODc1LDM5ODc2LDM5ODc3LDM5ODc4LDM5ODc5LDM5ODgwLDM5ODgxLDM5ODgyLDM5ODgzLDM5ODg0LDM5ODg1LDM5ODg2LDM5ODg3LDM5ODg4LDM5ODg5LDM5ODkwLDM5ODkxLDM5ODkyLDM5ODkzLDM5ODk0LDM5''@;'; put 'put ''ODk1LDM5ODk2LDM5ODk3LDM5ODk4LDM5ODk5LDM3MjE4LDM3MjE3LDM3MjMyLDM3MjI1LDM3MjMxLDM3MjQ1LDM3MjQ2LDM3MjM0LDM3MjM2LDM3MjQxLDM3MjYwLDM3MjUzLDM3MjY0LDM3MjYxLDM3MjY1LDM3MjgyLDM3MjgzLDM3MjkwLDM3MjkzLDM3Mjk0LDM3Mjk1LDM3MzAxLDM3MzAw''@;'; put 'put ''LDM3MzA2LDM1OTI1LDQwNTc0LDM2MjgwLDM2MzMxLDM2MzU3LDM2NDQxLDM2NDU3LDM2Mjc3LDM2Mjg3LDM2Mjg0LDM2MjgyLDM2MjkyLDM2MzEwLDM2MzExLDM2MzE0LDM2MzE4LDM2MzAyLDM2MzAzLDM2MzE1LDM2Mjk0LDM2MzMyLDM2MzQzLDM2MzQ0LDM2MzIzLDM2MzQ1LDM2MzQ3LDM2''@;'; put 'put ''MzI0LDM2MzYxLDM2MzQ5LDM2MzcyLDM2MzgxLDM2MzgzLDM2Mzk2LDM2Mzk4LDM2Mzg3LDM2Mzk5LDM2NDEwLDM2NDE2LDM2NDA5LDM2NDA1LDM2NDEzLDM2NDAxLDM2NDI1LDM2NDE3LDM2NDE4LDM2NDMzLDM2NDM0LDM2NDI2LDM2NDY0LDM2NDcwLDM2NDc2LDM2NDYzLDM2NDY4LDM2NDg1''@;'; put 'put ''LDM2NDk1LDM2NTAwLDM2NDk2LDM2NTA4LDM2NTEwLDM1OTYwLDM1OTcwLDM1OTc4LDM1OTczLDM1OTkyLDM1OTg4LDI2MDExLDM1Mjg2LDM1Mjk0LDM1MjkwLDM1MjkyLDM5OTAwLDM5OTAxLDM5OTAyLDM5OTAzLDM5OTA0LDM5OTA1LDM5OTA2LDM5OTA3LDM5OTA4LDM5OTA5LDM5OTEwLDM5''@;'; put 'put ''OTExLDM5OTEyLDM5OTEzLDM5OTE0LDM5OTE1LDM5OTE2LDM5OTE3LDM5OTE4LDM5OTE5LDM5OTIwLDM5OTIxLDM5OTIyLDM5OTIzLDM5OTI0LDM5OTI1LDM5OTI2LDM5OTI3LDM5OTI4LDM5OTI5LDM5OTMwLDM5OTMxLDM5OTMyLDM5OTMzLDM5OTM0LDM5OTM1LDM5OTM2LDM5OTM3LDM5OTM4''@;'; put 'put ''LDM5OTM5LDM5OTQwLDM5OTQxLDM5OTQyLDM5OTQzLDM5OTQ0LDM5OTQ1LDM5OTQ2LDM5OTQ3LDM5OTQ4LDM5OTQ5LDM5OTUwLDM5OTUxLDM5OTUyLDM5OTUzLDM5OTU0LDM5OTU1LDM5OTU2LDM5OTU3LDM5OTU4LDM5OTU5LDM5OTYwLDM5OTYxLDM5OTYyLDM5OTYzLDM5OTY0LDM5OTY1LDM5''@;'; put 'put ''OTY2LDM5OTY3LDM5OTY4LDM5OTY5LDM5OTcwLDM5OTcxLDM5OTcyLDM5OTczLDM5OTc0LDM5OTc1LDM5OTc2LDM5OTc3LDM5OTc4LDM5OTc5LDM5OTgwLDM5OTgxLDM5OTgyLDM5OTgzLDM5OTg0LDM5OTg1LDM5OTg2LDM5OTg3LDM5OTg4LDM5OTg5LDM5OTkwLDM5OTkxLDM5OTkyLDM5OTkz''@;'; put 'put ''LDM5OTk0LDM5OTk1LDM1MzAxLDM1MzA3LDM1MzExLDM1MzkwLDM1NjIyLDM4NzM5LDM4NjMzLDM4NjQzLDM4NjM5LDM4NjYyLDM4NjU3LDM4NjY0LDM4NjcxLDM4NjcwLDM4Njk4LDM4NzAxLDM4NzA0LDM4NzE4LDQwODMyLDQwODM1LDQwODM3LDQwODM4LDQwODM5LDQwODQwLDQwODQxLDQw''@;'; put 'put ''ODQyLDQwODQ0LDQwNzAyLDQwNzE1LDQwNzE3LDM4NTg1LDM4NTg4LDM4NTg5LDM4NjA2LDM4NjEwLDMwNjU1LDM4NjI0LDM3NTE4LDM3NTUwLDM3NTc2LDM3Njk0LDM3NzM4LDM3ODM0LDM3Nzc1LDM3OTUwLDM3OTk1LDQwMDYzLDQwMDY2LDQwMDY5LDQwMDcwLDQwMDcxLDQwMDcyLDMxMjY3''@;'; put 'put ''LDQwMDc1LDQwMDc4LDQwMDgwLDQwMDgxLDQwMDgyLDQwMDg0LDQwMDg1LDQwMDkwLDQwMDkxLDQwMDk0LDQwMDk1LDQwMDk2LDQwMDk3LDQwMDk4LDQwMDk5LDQwMTAxLDQwMTAyLDQwMTAzLDQwMTA0LDQwMTA1LDQwMTA3LDQwMTA5LDQwMTEwLDQwMTEyLDQwMTEzLDQwMTE0LDQwMTE1LDQw''@;'; put 'put ''MTE2LDQwMTE3LDQwMTE4LDQwMTE5LDQwMTIyLDQwMTIzLDQwMTI0LDQwMTI1LDQwMTMyLDQwMTMzLDQwMTM0LDQwMTM1LDQwMTM4LDQwMTM5LDM5OTk2LDM5OTk3LDM5OTk4LDM5OTk5LDRlNCw0MDAwMSw0MDAwMiw0MDAwMyw0MDAwNCw0MDAwNSw0MDAwNiw0MDAwNyw0MDAwOCw0MDAwOSw0''@;'; put 'put ''MDAxMCw0MDAxMSw0MDAxMiw0MDAxMyw0MDAxNCw0MDAxNSw0MDAxNiw0MDAxNyw0MDAxOCw0MDAxOSw0MDAyMCw0MDAyMSw0MDAyMiw0MDAyMyw0MDAyNCw0MDAyNSw0MDAyNiw0MDAyNyw0MDAyOCw0MDAyOSw0MDAzMCw0MDAzMSw0MDAzMiw0MDAzMyw0MDAzNCw0MDAzNSw0MDAzNiw0MDAz''@;'; put 'put ''Nyw0MDAzOCw0MDAzOSw0MDA0MCw0MDA0MSw0MDA0Miw0MDA0Myw0MDA0NCw0MDA0NSw0MDA0Niw0MDA0Nyw0MDA0OCw0MDA0OSw0MDA1MCw0MDA1MSw0MDA1Miw0MDA1Myw0MDA1NCw0MDA1NSw0MDA1Niw0MDA1Nyw0MDA1OCw0MDA1OSw0MDA2MSw0MDA2Miw0MDA2NCw0MDA2Nyw0MDA2OCw0''@;'; put 'put ''MDA3Myw0MDA3NCw0MDA3Niw0MDA3OSw0MDA4Myw0MDA4Niw0MDA4Nyw0MDA4OCw0MDA4OSw0MDA5Myw0MDEwNiw0MDEwOCw0MDExMSw0MDEyMSw0MDEyNiw0MDEyNyw0MDEyOCw0MDEyOSw0MDEzMCw0MDEzNiw0MDEzNyw0MDE0NSw0MDE0Niw0MDE1NCw0MDE1NSw0MDE2MCw0MDE2MSw0MDE0''@;'; put 'put ''MCw0MDE0MSw0MDE0Miw0MDE0Myw0MDE0NCw0MDE0Nyw0MDE0OCw0MDE0OSw0MDE1MSw0MDE1Miw0MDE1Myw0MDE1Niw0MDE1Nyw0MDE1OSw0MDE2MiwzODc4MCwzODc4OSwzODgwMSwzODgwMiwzODgwNCwzODgzMSwzODgyNywzODgxOSwzODgzNCwzODgzNiwzOTYwMSwzOTYwMCwzOTYwNyw0''@;'; put 'put ''MDUzNiwzOTYwNiwzOTYxMCwzOTYxMiwzOTYxNywzOTYxNiwzOTYyMSwzOTYxOCwzOTYyNywzOTYyOCwzOTYzMywzOTc0OSwzOTc0NywzOTc1MSwzOTc1MywzOTc1MiwzOTc1NywzOTc2MSwzOTE0NCwzOTE4MSwzOTIxNCwzOTI1MywzOTI1MiwzOTY0NywzOTY0OSwzOTY1NCwzOTY2MywzOTY1''@;'; put 'put ''OSwzOTY3NSwzOTY2MSwzOTY3MywzOTY4OCwzOTY5NSwzOTY5OSwzOTcxMSwzOTcxNSw0MDYzNyw0MDYzOCwzMjMxNSw0MDU3OCw0MDU4Myw0MDU4NCw0MDU4Nyw0MDU5NCwzNzg0Niw0MDYwNSw0MDYwNyw0MDY2Nyw0MDY2OCw0MDY2OSw0MDY3Miw0MDY3MSw0MDY3NCw0MDY4MSw0MDY3OSw0''@;'; put 'put ''MDY3Nyw0MDY4Miw0MDY4Nyw0MDczOCw0MDc0OCw0MDc1MSw0MDc2MSw0MDc1OSw0MDc2NSw0MDc2Niw0MDc3Miw0MDE2Myw0MDE2NCw0MDE2NSw0MDE2Niw0MDE2Nyw0MDE2OCw0MDE2OSw0MDE3MCw0MDE3MSw0MDE3Miw0MDE3Myw0MDE3NCw0MDE3NSw0MDE3Niw0MDE3Nyw0MDE3OCw0MDE3''@;'; put 'put ''OSw0MDE4MCw0MDE4MSw0MDE4Miw0MDE4Myw0MDE4NCw0MDE4NSw0MDE4Niw0MDE4Nyw0MDE4OCw0MDE4OSw0MDE5MCw0MDE5MSw0MDE5Miw0MDE5Myw0MDE5NCw0MDE5NSw0MDE5Niw0MDE5Nyw0MDE5OCw0MDE5OSw0MDIwMCw0MDIwMSw0MDIwMiw0MDIwMyw0MDIwNCw0MDIwNSw0MDIwNiw0''@;'; put 'put ''MDIwNyw0MDIwOCw0MDIwOSw0MDIxMCw0MDIxMSw0MDIxMiw0MDIxMyw0MDIxNCw0MDIxNSw0MDIxNiw0MDIxNyw0MDIxOCw0MDIxOSw0MDIyMCw0MDIyMSw0MDIyMiw0MDIyMyw0MDIyNCw0MDIyNSw0MDIyNiw0MDIyNyw0MDIyOCw0MDIyOSw0MDIzMCw0MDIzMSw0MDIzMiw0MDIzMyw0MDIz''@;'; put 'put ''NCw0MDIzNSw0MDIzNiw0MDIzNyw0MDIzOCw0MDIzOSw0MDI0MCw0MDI0MSw0MDI0Miw0MDI0Myw0MDI0NCw0MDI0NSw0MDI0Niw0MDI0Nyw0MDI0OCw0MDI0OSw0MDI1MCw0MDI1MSw0MDI1Miw0MDI1Myw0MDI1NCw0MDI1NSw0MDI1Niw0MDI1Nyw0MDI1OCw1NzkwOCw1NzkwOSw1NzkxMCw1''@;'; put 'put ''NzkxMSw1NzkxMiw1NzkxMyw1NzkxNCw1NzkxNSw1NzkxNiw1NzkxNyw1NzkxOCw1NzkxOSw1NzkyMCw1NzkyMSw1NzkyMiw1NzkyMyw1NzkyNCw1NzkyNSw1NzkyNiw1NzkyNyw1NzkyOCw1NzkyOSw1NzkzMCw1NzkzMSw1NzkzMiw1NzkzMyw1NzkzNCw1NzkzNSw1NzkzNiw1NzkzNyw1Nzkz''@;'; put 'put ''OCw1NzkzOSw1Nzk0MCw1Nzk0MSw1Nzk0Miw1Nzk0Myw1Nzk0NCw1Nzk0NSw1Nzk0Niw1Nzk0Nyw1Nzk0OCw1Nzk0OSw1Nzk1MCw1Nzk1MSw1Nzk1Miw1Nzk1Myw1Nzk1NCw1Nzk1NSw1Nzk1Niw1Nzk1Nyw1Nzk1OCw1Nzk1OSw1Nzk2MCw1Nzk2MSw1Nzk2Miw1Nzk2Myw1Nzk2NCw1Nzk2NSw1''@;'; put 'put ''Nzk2Niw1Nzk2Nyw1Nzk2OCw1Nzk2OSw1Nzk3MCw1Nzk3MSw1Nzk3Miw1Nzk3Myw1Nzk3NCw1Nzk3NSw1Nzk3Niw1Nzk3Nyw1Nzk3OCw1Nzk3OSw1Nzk4MCw1Nzk4MSw1Nzk4Miw1Nzk4Myw1Nzk4NCw1Nzk4NSw1Nzk4Niw1Nzk4Nyw1Nzk4OCw1Nzk4OSw1Nzk5MCw1Nzk5MSw1Nzk5Miw1Nzk5''@;'; put 'put ''Myw1Nzk5NCw1Nzk5NSw1Nzk5Niw1Nzk5Nyw1Nzk5OCw1Nzk5OSw1OGUzLDU4MDAxLDQwMjU5LDQwMjYwLDQwMjYxLDQwMjYyLDQwMjYzLDQwMjY0LDQwMjY1LDQwMjY2LDQwMjY3LDQwMjY4LDQwMjY5LDQwMjcwLDQwMjcxLDQwMjcyLDQwMjczLDQwMjc0LDQwMjc1LDQwMjc2LDQwMjc3LDQw''@;'; put 'put ''Mjc4LDQwMjc5LDQwMjgwLDQwMjgxLDQwMjgyLDQwMjgzLDQwMjg0LDQwMjg1LDQwMjg2LDQwMjg3LDQwMjg4LDQwMjg5LDQwMjkwLDQwMjkxLDQwMjkyLDQwMjkzLDQwMjk0LDQwMjk1LDQwMjk2LDQwMjk3LDQwMjk4LDQwMjk5LDQwMzAwLDQwMzAxLDQwMzAyLDQwMzAzLDQwMzA0LDQwMzA1''@;'; put 'put ''LDQwMzA2LDQwMzA3LDQwMzA4LDQwMzA5LDQwMzEwLDQwMzExLDQwMzEyLDQwMzEzLDQwMzE0LDQwMzE1LDQwMzE2LDQwMzE3LDQwMzE4LDQwMzE5LDQwMzIwLDQwMzIxLDQwMzIyLDQwMzIzLDQwMzI0LDQwMzI1LDQwMzI2LDQwMzI3LDQwMzI4LDQwMzI5LDQwMzMwLDQwMzMxLDQwMzMyLDQw''@;'; put 'put ''MzMzLDQwMzM0LDQwMzM1LDQwMzM2LDQwMzM3LDQwMzM4LDQwMzM5LDQwMzQwLDQwMzQxLDQwMzQyLDQwMzQzLDQwMzQ0LDQwMzQ1LDQwMzQ2LDQwMzQ3LDQwMzQ4LDQwMzQ5LDQwMzUwLDQwMzUxLDQwMzUyLDQwMzUzLDQwMzU0LDU4MDAyLDU4MDAzLDU4MDA0LDU4MDA1LDU4MDA2LDU4MDA3''@;'; put 'put ''LDU4MDA4LDU4MDA5LDU4MDEwLDU4MDExLDU4MDEyLDU4MDEzLDU4MDE0LDU4MDE1LDU4MDE2LDU4MDE3LDU4MDE4LDU4MDE5LDU4MDIwLDU4MDIxLDU4MDIyLDU4MDIzLDU4MDI0LDU4MDI1LDU4MDI2LDU4MDI3LDU4MDI4LDU4MDI5LDU4MDMwLDU4MDMxLDU4MDMyLDU4MDMzLDU4MDM0LDU4''@;'; put 'put ''MDM1LDU4MDM2LDU4MDM3LDU4MDM4LDU4MDM5LDU4MDQwLDU4MDQxLDU4MDQyLDU4MDQzLDU4MDQ0LDU4MDQ1LDU4MDQ2LDU4MDQ3LDU4MDQ4LDU4MDQ5LDU4MDUwLDU4MDUxLDU4MDUyLDU4MDUzLDU4MDU0LDU4MDU1LDU4MDU2LDU4MDU3LDU4MDU4LDU4MDU5LDU4MDYwLDU4MDYxLDU4MDYy''@;'; put 'put ''LDU4MDYzLDU4MDY0LDU4MDY1LDU4MDY2LDU4MDY3LDU4MDY4LDU4MDY5LDU4MDcwLDU4MDcxLDU4MDcyLDU4MDczLDU4MDc0LDU4MDc1LDU4MDc2LDU4MDc3LDU4MDc4LDU4MDc5LDU4MDgwLDU4MDgxLDU4MDgyLDU4MDgzLDU4MDg0LDU4MDg1LDU4MDg2LDU4MDg3LDU4MDg4LDU4MDg5LDU4''@;'; put 'put ''MDkwLDU4MDkxLDU4MDkyLDU4MDkzLDU4MDk0LDU4MDk1LDQwMzU1LDQwMzU2LDQwMzU3LDQwMzU4LDQwMzU5LDQwMzYwLDQwMzYxLDQwMzYyLDQwMzYzLDQwMzY0LDQwMzY1LDQwMzY2LDQwMzY3LDQwMzY4LDQwMzY5LDQwMzcwLDQwMzcxLDQwMzcyLDQwMzczLDQwMzc0LDQwMzc1LDQwMzc2''@;'; put 'put ''LDQwMzc3LDQwMzc4LDQwMzc5LDQwMzgwLDQwMzgxLDQwMzgyLDQwMzgzLDQwMzg0LDQwMzg1LDQwMzg2LDQwMzg3LDQwMzg4LDQwMzg5LDQwMzkwLDQwMzkxLDQwMzkyLDQwMzkzLDQwMzk0LDQwMzk1LDQwMzk2LDQwMzk3LDQwMzk4LDQwMzk5LDQwNDAwLDQwNDAxLDQwNDAyLDQwNDAzLDQw''@;'; put 'put ''NDA0LDQwNDA1LDQwNDA2LDQwNDA3LDQwNDA4LDQwNDA5LDQwNDEwLDQwNDExLDQwNDEyLDQwNDEzLDQwNDE0LDQwNDE1LDQwNDE2LDQwNDE3LDQwNDE4LDQwNDE5LDQwNDIwLDQwNDIxLDQwNDIyLDQwNDIzLDQwNDI0LDQwNDI1LDQwNDI2LDQwNDI3LDQwNDI4LDQwNDI5LDQwNDMwLDQwNDMx''@;'; put 'put ''LDQwNDMyLDQwNDMzLDQwNDM0LDQwNDM1LDQwNDM2LDQwNDM3LDQwNDM4LDQwNDM5LDQwNDQwLDQwNDQxLDQwNDQyLDQwNDQzLDQwNDQ0LDQwNDQ1LDQwNDQ2LDQwNDQ3LDQwNDQ4LDQwNDQ5LDQwNDUwLDU4MDk2LDU4MDk3LDU4MDk4LDU4MDk5LDU4MTAwLDU4MTAxLDU4MTAyLDU4MTAzLDU4''@;'; put 'put ''MTA0LDU4MTA1LDU4MTA2LDU4MTA3LDU4MTA4LDU4MTA5LDU4MTEwLDU4MTExLDU4MTEyLDU4MTEzLDU4MTE0LDU4MTE1LDU4MTE2LDU4MTE3LDU4MTE4LDU4MTE5LDU4MTIwLDU4MTIxLDU4MTIyLDU4MTIzLDU4MTI0LDU4MTI1LDU4MTI2LDU4MTI3LDU4MTI4LDU4MTI5LDU4MTMwLDU4MTMx''@;'; put 'put ''LDU4MTMyLDU4MTMzLDU4MTM0LDU4MTM1LDU4MTM2LDU4MTM3LDU4MTM4LDU4MTM5LDU4MTQwLDU4MTQxLDU4MTQyLDU4MTQzLDU4MTQ0LDU4MTQ1LDU4MTQ2LDU4MTQ3LDU4MTQ4LDU4MTQ5LDU4MTUwLDU4MTUxLDU4MTUyLDU4MTUzLDU4MTU0LDU4MTU1LDU4MTU2LDU4MTU3LDU4MTU4LDU4''@;'; put 'put ''MTU5LDU4MTYwLDU4MTYxLDU4MTYyLDU4MTYzLDU4MTY0LDU4MTY1LDU4MTY2LDU4MTY3LDU4MTY4LDU4MTY5LDU4MTcwLDU4MTcxLDU4MTcyLDU4MTczLDU4MTc0LDU4MTc1LDU4MTc2LDU4MTc3LDU4MTc4LDU4MTc5LDU4MTgwLDU4MTgxLDU4MTgyLDU4MTgzLDU4MTg0LDU4MTg1LDU4MTg2''@;'; put 'put ''LDU4MTg3LDU4MTg4LDU4MTg5LDQwNDUxLDQwNDUyLDQwNDUzLDQwNDU0LDQwNDU1LDQwNDU2LDQwNDU3LDQwNDU4LDQwNDU5LDQwNDYwLDQwNDYxLDQwNDYyLDQwNDYzLDQwNDY0LDQwNDY1LDQwNDY2LDQwNDY3LDQwNDY4LDQwNDY5LDQwNDcwLDQwNDcxLDQwNDcyLDQwNDczLDQwNDc0LDQw''@;'; put 'put ''NDc1LDQwNDc2LDQwNDc3LDQwNDc4LDQwNDg0LDQwNDg3LDQwNDk0LDQwNDk2LDQwNTAwLDQwNTA3LDQwNTA4LDQwNTEyLDQwNTI1LDQwNTI4LDQwNTMwLDQwNTMxLDQwNTMyLDQwNTM0LDQwNTM3LDQwNTQxLDQwNTQzLDQwNTQ0LDQwNTQ1LDQwNTQ2LDQwNTQ5LDQwNTU4LDQwNTU5LDQwNTYy''@;'; put 'put ''LDQwNTY0LDQwNTY1LDQwNTY2LDQwNTY3LDQwNTY4LDQwNTY5LDQwNTcwLDQwNTcxLDQwNTcyLDQwNTczLDQwNTc2LDQwNTc3LDQwNTc5LDQwNTgwLDQwNTgxLDQwNTgyLDQwNTg1LDQwNTg2LDQwNTg4LDQwNTg5LDQwNTkwLDQwNTkxLDQwNTkyLDQwNTkzLDQwNTk2LDQwNTk3LDQwNTk4LDQw''@;'; put 'put ''NTk5LDQwNjAwLDQwNjAxLDQwNjAyLDQwNjAzLDQwNjA0LDQwNjA2LDQwNjA4LDQwNjA5LDQwNjEwLDQwNjExLDQwNjEyLDQwNjEzLDQwNjE1LDQwNjE2LDQwNjE3LDQwNjE4LDU4MTkwLDU4MTkxLDU4MTkyLDU4MTkzLDU4MTk0LDU4MTk1LDU4MTk2LDU4MTk3LDU4MTk4LDU4MTk5LDU4MjAw''@;'; put 'put ''LDU4MjAxLDU4MjAyLDU4MjAzLDU4MjA0LDU4MjA1LDU4MjA2LDU4MjA3LDU4MjA4LDU4MjA5LDU4MjEwLDU4MjExLDU4MjEyLDU4MjEzLDU4MjE0LDU4MjE1LDU4MjE2LDU4MjE3LDU4MjE4LDU4MjE5LDU4MjIwLDU4MjIxLDU4MjIyLDU4MjIzLDU4MjI0LDU4MjI1LDU4MjI2LDU4MjI3LDU4''@;'; put 'put ''MjI4LDU4MjI5LDU4MjMwLDU4MjMxLDU4MjMyLDU4MjMzLDU4MjM0LDU4MjM1LDU4MjM2LDU4MjM3LDU4MjM4LDU4MjM5LDU4MjQwLDU4MjQxLDU4MjQyLDU4MjQzLDU4MjQ0LDU4MjQ1LDU4MjQ2LDU4MjQ3LDU4MjQ4LDU4MjQ5LDU4MjUwLDU4MjUxLDU4MjUyLDU4MjUzLDU4MjU0LDU4MjU1''@;'; put 'put ''LDU4MjU2LDU4MjU3LDU4MjU4LDU4MjU5LDU4MjYwLDU4MjYxLDU4MjYyLDU4MjYzLDU4MjY0LDU4MjY1LDU4MjY2LDU4MjY3LDU4MjY4LDU4MjY5LDU4MjcwLDU4MjcxLDU4MjcyLDU4MjczLDU4Mjc0LDU4Mjc1LDU4Mjc2LDU4Mjc3LDU4Mjc4LDU4Mjc5LDU4MjgwLDU4MjgxLDU4MjgyLDU4''@;'; put 'put ''MjgzLDQwNjE5LDQwNjIwLDQwNjIxLDQwNjIyLDQwNjIzLDQwNjI0LDQwNjI1LDQwNjI2LDQwNjI3LDQwNjI5LDQwNjMwLDQwNjMxLDQwNjMzLDQwNjM0LDQwNjM2LDQwNjM5LDQwNjQwLDQwNjQxLDQwNjQyLDQwNjQzLDQwNjQ1LDQwNjQ2LDQwNjQ3LDQwNjQ4LDQwNjUwLDQwNjUxLDQwNjUy''@;'; put 'put ''LDQwNjU2LDQwNjU4LDQwNjU5LDQwNjYxLDQwNjYyLDQwNjYzLDQwNjY1LDQwNjY2LDQwNjcwLDQwNjczLDQwNjc1LDQwNjc2LDQwNjc4LDQwNjgwLDQwNjgzLDQwNjg0LDQwNjg1LDQwNjg2LDQwNjg4LDQwNjg5LDQwNjkwLDQwNjkxLDQwNjkyLDQwNjkzLDQwNjk0LDQwNjk1LDQwNjk2LDQw''@;'; put 'put ''Njk4LDQwNzAxLDQwNzAzLDQwNzA0LDQwNzA1LDQwNzA2LDQwNzA3LDQwNzA4LDQwNzA5LDQwNzEwLDQwNzExLDQwNzEyLDQwNzEzLDQwNzE0LDQwNzE2LDQwNzE5LDQwNzIxLDQwNzIyLDQwNzI0LDQwNzI1LDQwNzI2LDQwNzI4LDQwNzMwLDQwNzMxLDQwNzMyLDQwNzMzLDQwNzM0LDQwNzM1''@;'; put 'put ''LDQwNzM3LDQwNzM5LDQwNzQwLDQwNzQxLDQwNzQyLDQwNzQzLDQwNzQ0LDQwNzQ1LDQwNzQ2LDQwNzQ3LDQwNzQ5LDQwNzUwLDQwNzUyLDQwNzUzLDU4Mjg0LDU4Mjg1LDU4Mjg2LDU4Mjg3LDU4Mjg4LDU4Mjg5LDU4MjkwLDU4MjkxLDU4MjkyLDU4MjkzLDU4Mjk0LDU4Mjk1LDU4Mjk2LDU4''@;'; put 'put ''Mjk3LDU4Mjk4LDU4Mjk5LDU4MzAwLDU4MzAxLDU4MzAyLDU4MzAzLDU4MzA0LDU4MzA1LDU4MzA2LDU4MzA3LDU4MzA4LDU4MzA5LDU4MzEwLDU4MzExLDU4MzEyLDU4MzEzLDU4MzE0LDU4MzE1LDU4MzE2LDU4MzE3LDU4MzE4LDU4MzE5LDU4MzIwLDU4MzIxLDU4MzIyLDU4MzIzLDU4MzI0''@;'; put 'put ''LDU4MzI1LDU4MzI2LDU4MzI3LDU4MzI4LDU4MzI5LDU4MzMwLDU4MzMxLDU4MzMyLDU4MzMzLDU4MzM0LDU4MzM1LDU4MzM2LDU4MzM3LDU4MzM4LDU4MzM5LDU4MzQwLDU4MzQxLDU4MzQyLDU4MzQzLDU4MzQ0LDU4MzQ1LDU4MzQ2LDU4MzQ3LDU4MzQ4LDU4MzQ5LDU4MzUwLDU4MzUxLDU4''@;'; put 'put ''MzUyLDU4MzUzLDU4MzU0LDU4MzU1LDU4MzU2LDU4MzU3LDU4MzU4LDU4MzU5LDU4MzYwLDU4MzYxLDU4MzYyLDU4MzYzLDU4MzY0LDU4MzY1LDU4MzY2LDU4MzY3LDU4MzY4LDU4MzY5LDU4MzcwLDU4MzcxLDU4MzcyLDU4MzczLDU4Mzc0LDU4Mzc1LDU4Mzc2LDU4Mzc3LDQwNzU0LDQwNzU1''@;'; put 'put ''LDQwNzU2LDQwNzU3LDQwNzU4LDQwNzYwLDQwNzYyLDQwNzY0LDQwNzY3LDQwNzY4LDQwNzY5LDQwNzcwLDQwNzcxLDQwNzczLDQwNzc0LDQwNzc1LDQwNzc2LDQwNzc3LDQwNzc4LDQwNzc5LDQwNzgwLDQwNzgxLDQwNzgyLDQwNzgzLDQwNzg2LDQwNzg3LDQwNzg4LDQwNzg5LDQwNzkwLDQw''@;'; put 'put ''NzkxLDQwNzkyLDQwNzkzLDQwNzk0LDQwNzk1LDQwNzk2LDQwNzk3LDQwNzk4LDQwNzk5LDQwODAwLDQwODAxLDQwODAyLDQwODAzLDQwODA0LDQwODA1LDQwODA2LDQwODA3LDQwODA4LDQwODA5LDQwODEwLDQwODExLDQwODEyLDQwODEzLDQwODE0LDQwODE1LDQwODE2LDQwODE3LDQwODE4''@;'; put 'put ''LDQwODE5LDQwODIwLDQwODIxLDQwODIyLDQwODIzLDQwODI0LDQwODI1LDQwODI2LDQwODI3LDQwODI4LDQwODI5LDQwODMwLDQwODMzLDQwODM0LDQwODQ1LDQwODQ2LDQwODQ3LDQwODQ4LDQwODQ5LDQwODUwLDQwODUxLDQwODUyLDQwODUzLDQwODU0LDQwODU1LDQwODU2LDQwODYwLDQw''@;'; put 'put ''ODYxLDQwODYyLDQwODY1LDQwODY2LDQwODY3LDQwODY4LDQwODY5LDYzNzg4LDYzODY1LDYzODkzLDYzOTc1LDYzOTg1LDU4Mzc4LDU4Mzc5LDU4MzgwLDU4MzgxLDU4MzgyLDU4MzgzLDU4Mzg0LDU4Mzg1LDU4Mzg2LDU4Mzg3LDU4Mzg4LDU4Mzg5LDU4MzkwLDU4MzkxLDU4MzkyLDU4Mzkz''@;'; put 'put ''LDU4Mzk0LDU4Mzk1LDU4Mzk2LDU4Mzk3LDU4Mzk4LDU4Mzk5LDU4NDAwLDU4NDAxLDU4NDAyLDU4NDAzLDU4NDA0LDU4NDA1LDU4NDA2LDU4NDA3LDU4NDA4LDU4NDA5LDU4NDEwLDU4NDExLDU4NDEyLDU4NDEzLDU4NDE0LDU4NDE1LDU4NDE2LDU4NDE3LDU4NDE4LDU4NDE5LDU4NDIwLDU4''@;'; put 'put ''NDIxLDU4NDIyLDU4NDIzLDU4NDI0LDU4NDI1LDU4NDI2LDU4NDI3LDU4NDI4LDU4NDI5LDU4NDMwLDU4NDMxLDU4NDMyLDU4NDMzLDU4NDM0LDU4NDM1LDU4NDM2LDU4NDM3LDU4NDM4LDU4NDM5LDU4NDQwLDU4NDQxLDU4NDQyLDU4NDQzLDU4NDQ0LDU4NDQ1LDU4NDQ2LDU4NDQ3LDU4NDQ4''@;'; put 'put ''LDU4NDQ5LDU4NDUwLDU4NDUxLDU4NDUyLDU4NDUzLDU4NDU0LDU4NDU1LDU4NDU2LDU4NDU3LDU4NDU4LDU4NDU5LDU4NDYwLDU4NDYxLDU4NDYyLDU4NDYzLDU4NDY0LDU4NDY1LDU4NDY2LDU4NDY3LDU4NDY4LDU4NDY5LDU4NDcwLDU4NDcxLDY0MDEyLDY0MDEzLDY0MDE0LDY0MDE1LDY0''@;'; put 'put ''MDE3LDY0MDE5LDY0MDIwLDY0MDI0LDY0MDMxLDY0MDMyLDY0MDMzLDY0MDM1LDY0MDM2LDY0MDM5LDY0MDQwLDY0MDQxLDExOTA1LDU5NDE0LDU5NDE1LDU5NDE2LDExOTA4LDEzNDI3LDEzMzgzLDExOTEyLDExOTE1LDU5NDIyLDEzNzI2LDEzODUwLDEzODM4LDExOTE2LDExOTI3LDE0NzAy''@;'; put 'put ''LDE0NjE2LDU5NDMwLDE0Nzk5LDE0ODE1LDE0OTYzLDE0ODAwLDU5NDM1LDU5NDM2LDE1MTgyLDE1NDcwLDE1NTg0LDExOTQzLDU5NDQxLDU5NDQyLDExOTQ2LDE2NDcwLDE2NzM1LDExOTUwLDE3MjA3LDExOTU1LDExOTU4LDExOTU5LDU5NDUxLDE3MzI5LDE3MzI0LDExOTYzLDE3MzczLDE3''@;'; put 'put ''NjIyLDE4MDE3LDE3OTk2LDU5NDU5LDE4MjExLDE4MjE3LDE4MzAwLDE4MzE3LDExOTc4LDE4NzU5LDE4ODEwLDE4ODEzLDE4ODE4LDE4ODE5LDE4ODIxLDE4ODIyLDE4ODQ3LDE4ODQzLDE4ODcxLDE4ODcwLDU5NDc2LDU5NDc3LDE5NjE5LDE5NjE1LDE5NjE2LDE5NjE3LDE5NTc1LDE5NjE4''@;'; put 'put ''LDE5NzMxLDE5NzMyLDE5NzMzLDE5NzM0LDE5NzM1LDE5NzM2LDE5NzM3LDE5ODg2LDU5NDkyLDU4NDcyLDU4NDczLDU4NDc0LDU4NDc1LDU4NDc2LDU4NDc3LDU4NDc4LDU4NDc5LDU4NDgwLDU4NDgxLDU4NDgyLDU4NDgzLDU4NDg0LDU4NDg1LDU4NDg2LDU4NDg3LDU4NDg4LDU4NDg5LDU4''@;'; put 'put ''NDkwLDU4NDkxLDU4NDkyLDU4NDkzLDU4NDk0LDU4NDk1LDU4NDk2LDU4NDk3LDU4NDk4LDU4NDk5LDU4NTAwLDU4NTAxLDU4NTAyLDU4NTAzLDU4NTA0LDU4NTA1LDU4NTA2LDU4NTA3LDU4NTA4LDU4NTA5LDU4NTEwLDU4NTExLDU4NTEyLDU4NTEzLDU4NTE0LDU4NTE1LDU4NTE2LDU4NTE3''@;'; put 'put ''LDU4NTE4LDU4NTE5LDU4NTIwLDU4NTIxLDU4NTIyLDU4NTIzLDU4NTI0LDU4NTI1LDU4NTI2LDU4NTI3LDU4NTI4LDU4NTI5LDU4NTMwLDU4NTMxLDU4NTMyLDU4NTMzLDU4NTM0LDU4NTM1LDU4NTM2LDU4NTM3LDU4NTM4LDU4NTM5LDU4NTQwLDU4NTQxLDU4NTQyLDU4NTQzLDU4NTQ0LDU4''@;'; put 'put ''NTQ1LDU4NTQ2LDU4NTQ3LDU4NTQ4LDU4NTQ5LDU4NTUwLDU4NTUxLDU4NTUyLDU4NTUzLDU4NTU0LDU4NTU1LDU4NTU2LDU4NTU3LDU4NTU4LDU4NTU5LDU4NTYwLDU4NTYxLDU4NTYyLDU4NTYzLDU4NTY0LDU4NTY1XSwiZ2IxODAzMC1yYW5nZXMiOltbMCwxMjhdLFszNiwxNjVdLFszOCwx''@;'; put 'put ''NjldLFs0NSwxNzhdLFs1MCwxODRdLFs4MSwyMTZdLFs4OSwyMjZdLFs5NSwyMzVdLFs5NiwyMzhdLFsxMDAsMjQ0XSxbMTAzLDI0OF0sWzEwNCwyNTFdLFsxMDUsMjUzXSxbMTA5LDI1OF0sWzEyNiwyNzZdLFsxMzMsMjg0XSxbMTQ4LDMwMF0sWzE3MiwzMjVdLFsxNzUsMzI5XSxbMTc5LDMz''@;'; put 'put ''NF0sWzIwOCwzNjRdLFszMDYsNDYzXSxbMzA3LDQ2NV0sWzMwOCw0NjddLFszMDksNDY5XSxbMzEwLDQ3MV0sWzMxMSw0NzNdLFszMTIsNDc1XSxbMzEzLDQ3N10sWzM0MSw1MDZdLFs0MjgsNTk0XSxbNDQzLDYxMF0sWzU0NCw3MTJdLFs1NDUsNzE2XSxbNTU4LDczMF0sWzc0MSw5MzBdLFs3''@;'; put 'put ''NDIsOTM4XSxbNzQ5LDk2Ml0sWzc1MCw5NzBdLFs4MDUsMTAyNl0sWzgxOSwxMTA0XSxbODIwLDExMDZdLFs3OTIyLDgyMDldLFs3OTI0LDgyMTVdLFs3OTI1LDgyMThdLFs3OTI3LDgyMjJdLFs3OTM0LDgyMzFdLFs3OTQzLDgyNDFdLFs3OTQ0LDgyNDRdLFs3OTQ1LDgyNDZdLFs3OTUwLDgy''@;'; put 'put ''NTJdLFs4MDYyLDgzNjVdLFs4MTQ4LDg0NTJdLFs4MTQ5LDg0NTRdLFs4MTUyLDg0NThdLFs4MTY0LDg0NzFdLFs4MTc0LDg0ODJdLFs4MjM2LDg1NTZdLFs4MjQwLDg1NzBdLFs4MjYyLDg1OTZdLFs4MjY0LDg2MDJdLFs4Mzc0LDg3MTNdLFs4MzgwLDg3MjBdLFs4MzgxLDg3MjJdLFs4Mzg0''@;'; put 'put ''LDg3MjZdLFs4Mzg4LDg3MzFdLFs4MzkwLDg3MzddLFs4MzkyLDg3NDBdLFs4MzkzLDg3NDJdLFs4Mzk0LDg3NDhdLFs4Mzk2LDg3NTFdLFs4NDAxLDg3NjBdLFs4NDA2LDg3NjZdLFs4NDE2LDg3NzddLFs4NDE5LDg3ODFdLFs4NDI0LDg3ODddLFs4NDM3LDg4MDJdLFs4NDM5LDg4MDhdLFs4''@;'; put 'put ''NDQ1LDg4MTZdLFs4NDgyLDg4NTRdLFs4NDg1LDg4NThdLFs4NDk2LDg4NzBdLFs4NTIxLDg4OTZdLFs4NjAzLDg5NzldLFs4OTM2LDkzMjJdLFs4OTQ2LDkzNzJdLFs5MDQ2LDk1NDhdLFs5MDUwLDk1ODhdLFs5MDYzLDk2MTZdLFs5MDY2LDk2MjJdLFs5MDc2LDk2MzRdLFs5MDkyLDk2NTJd''@;'; put 'put ''LFs5MTAwLDk2NjJdLFs5MTA4LDk2NzJdLFs5MTExLDk2NzZdLFs5MTEzLDk2ODBdLFs5MTMxLDk3MDJdLFs5MTYyLDk3MzVdLFs5MTY0LDk3MzhdLFs5MjE4LDk3OTNdLFs5MjE5LDk3OTVdLFsxMTMyOSwxMTkwNl0sWzExMzMxLDExOTA5XSxbMTEzMzQsMTE5MTNdLFsxMTMzNiwxMTkxN10s''@;'; put 'put ''WzExMzQ2LDExOTI4XSxbMTEzNjEsMTE5NDRdLFsxMTM2MywxMTk0N10sWzExMzY2LDExOTUxXSxbMTEzNzAsMTE5NTZdLFsxMTM3MiwxMTk2MF0sWzExMzc1LDExOTY0XSxbMTEzODksMTE5NzldLFsxMTY4MiwxMjI4NF0sWzExNjg2LDEyMjkyXSxbMTE2ODcsMTIzMTJdLFsxMTY5MiwxMjMx''@;'; put 'put ''OV0sWzExNjk0LDEyMzMwXSxbMTE3MTQsMTIzNTFdLFsxMTcxNiwxMjQzNl0sWzExNzIzLDEyNDQ3XSxbMTE3MjUsMTI1MzVdLFsxMTczMCwxMjU0M10sWzExNzM2LDEyNTg2XSxbMTE5ODIsMTI4NDJdLFsxMTk4OSwxMjg1MF0sWzEyMTAyLDEyOTY0XSxbMTIzMzYsMTMyMDBdLFsxMjM0OCwx''@;'; put 'put ''MzIxNV0sWzEyMzUwLDEzMjE4XSxbMTIzODQsMTMyNTNdLFsxMjM5MywxMzI2M10sWzEyMzk1LDEzMjY3XSxbMTIzOTcsMTMyNzBdLFsxMjUxMCwxMzM4NF0sWzEyNTUzLDEzNDI4XSxbMTI4NTEsMTM3MjddLFsxMjk2MiwxMzgzOV0sWzEyOTczLDEzODUxXSxbMTM3MzgsMTQ2MTddLFsxMzgy''@;'; put 'put ''MywxNDcwM10sWzEzOTE5LDE0ODAxXSxbMTM5MzMsMTQ4MTZdLFsxNDA4MCwxNDk2NF0sWzE0Mjk4LDE1MTgzXSxbMTQ1ODUsMTU0NzFdLFsxNDY5OCwxNTU4NV0sWzE1NTgzLDE2NDcxXSxbMTU4NDcsMTY3MzZdLFsxNjMxOCwxNzIwOF0sWzE2NDM0LDE3MzI1XSxbMTY0MzgsMTczMzBdLFsx''@;'; put 'put ''NjQ4MSwxNzM3NF0sWzE2NzI5LDE3NjIzXSxbMTcxMDIsMTc5OTddLFsxNzEyMiwxODAxOF0sWzE3MzE1LDE4MjEyXSxbMTczMjAsMTgyMThdLFsxNzQwMiwxODMwMV0sWzE3NDE4LDE4MzE4XSxbMTc4NTksMTg3NjBdLFsxNzkwOSwxODgxMV0sWzE3OTExLDE4ODE0XSxbMTc5MTUsMTg4MjBd''@;'; put 'put ''LFsxNzkxNiwxODgyM10sWzE3OTM2LDE4ODQ0XSxbMTc5MzksMTg4NDhdLFsxNzk2MSwxODg3Ml0sWzE4NjY0LDE5NTc2XSxbMTg3MDMsMTk2MjBdLFsxODgxNCwxOTczOF0sWzE4OTYyLDE5ODg3XSxbMTkwNDMsNDA4NzBdLFszMzQ2OSw1OTI0NF0sWzMzNDcwLDU5MzM2XSxbMzM0NzEsNTkz''@;'; put 'put ''NjddLFszMzQ4NCw1OTQxM10sWzMzNDg1LDU5NDE3XSxbMzM0OTAsNTk0MjNdLFszMzQ5Nyw1OTQzMV0sWzMzNTAxLDU5NDM3XSxbMzM1MDUsNTk0NDNdLFszMzUxMyw1OTQ1Ml0sWzMzNTIwLDU5NDYwXSxbMzM1MzYsNTk0NzhdLFszMzU1MCw1OTQ5M10sWzM3ODQ1LDYzNzg5XSxbMzc5MjEs''@;'; put 'put ''NjM4NjZdLFszNzk0OCw2Mzg5NF0sWzM4MDI5LDYzOTc2XSxbMzgwMzgsNjM5ODZdLFszODA2NCw2NDAxNl0sWzM4MDY1LDY0MDE4XSxbMzgwNjYsNjQwMjFdLFszODA2OSw2NDAyNV0sWzM4MDc1LDY0MDM0XSxbMzgwNzYsNjQwMzddLFszODA3OCw2NDA0Ml0sWzM5MTA4LDY1MDc0XSxbMzkx''@;'; put 'put ''MDksNjUwOTNdLFszOTExMyw2NTEwN10sWzM5MTE0LDY1MTEyXSxbMzkxMTUsNjUxMjddLFszOTExNiw2NTEzMl0sWzM5MjY1LDY1Mzc1XSxbMzkzOTQsNjU1MTBdLFsxODllMyw2NTUzNl1dLGppczAyMDg6WzEyMjg4LDEyMjg5LDEyMjkwLDY1MjkyLDY1Mjk0LDEyNTM5LDY1MzA2LDY1MzA3''@;'; put 'put ''LDY1MzExLDY1MjgxLDEyNDQzLDEyNDQ0LDE4MCw2NTM0NCwxNjgsNjUzNDIsNjU1MDcsNjUzNDMsMTI1NDEsMTI1NDIsMTI0NDUsMTI0NDYsMTIyOTEsMjAxODksMTIyOTMsMTIyOTQsMTIyOTUsMTI1NDAsODIxMyw4MjA4LDY1Mjk1LDY1MzQwLDY1Mzc0LDg3NDEsNjUzNzIsODIzMCw4MjI5''@;'; put 'put ''LDgyMTYsODIxNyw4MjIwLDgyMjEsNjUyODgsNjUyODksMTIzMDgsMTIzMDksNjUzMzksNjUzNDEsNjUzNzEsNjUzNzMsMTIyOTYsMTIyOTcsMTIyOTgsMTIyOTksMTIzMDAsMTIzMDEsMTIzMDIsMTIzMDMsMTIzMDQsMTIzMDUsNjUyOTEsNjUyOTMsMTc3LDIxNSwyNDcsNjUzMDksODgwMCw2''@;'; put 'put ''NTMwOCw2NTMxMCw4ODA2LDg4MDcsODczNCw4NzU2LDk3OTQsOTc5MiwxNzYsODI0Miw4MjQzLDg0NTEsNjU1MDksNjUyODQsNjU1MDQsNjU1MDUsNjUyODUsNjUyODMsNjUyODYsNjUyOTAsNjUzMTIsMTY3LDk3MzQsOTczMyw5Njc1LDk2NzksOTY3OCw5NjcxLDk2NzAsOTYzMyw5NjMyLDk2''@;'; put 'put ''NTEsOTY1MCw5NjYxLDk2NjAsODI1MSwxMjMwNiw4NTk0LDg1OTIsODU5Myw4NTk1LDEyMzA3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw4NzEyLDg3MTUsODgzOCw4ODM5LDg4MzQsODgzNSw4NzQ2LDg3NDUsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDg3NDMsODc0NCw2NTUwNiw4NjU4LDg2NjAsODcwNCw4NzA3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw4NzM2LDg4NjksODk3OCw4NzA2LDg3MTEsODgwMSw4Nzg2LDg4MTAsODgxMSw4NzMw''@;'; put 'put ''LDg3NjUsODczMyw4NzU3LDg3NDcsODc0OCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDg0OTEsODI0MCw5ODM5LDk4MzcsOTgzNCw4MjI0LDgyMjUsMTgyLG51bGwsbnVsbCxudWxsLG51bGwsOTcxMSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw2NTI5Niw2NTI5Nyw2NTI5OCw2NTI5OSw2NTMwMCw2NTMwMSw2NTMwMiw2NTMwMyw2NTMwNCw2NTMwNSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDY1MzEzLDY1MzE0LDY1MzE1LDY1MzE2LDY1MzE3LDY1MzE4''@;'; put 'put ''LDY1MzE5LDY1MzIwLDY1MzIxLDY1MzIyLDY1MzIzLDY1MzI0LDY1MzI1LDY1MzI2LDY1MzI3LDY1MzI4LDY1MzI5LDY1MzMwLDY1MzMxLDY1MzMyLDY1MzMzLDY1MzM0LDY1MzM1LDY1MzM2LDY1MzM3LDY1MzM4LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDY1MzQ1LDY1MzQ2LDY1''@;'; put 'put ''MzQ3LDY1MzQ4LDY1MzQ5LDY1MzUwLDY1MzUxLDY1MzUyLDY1MzUzLDY1MzU0LDY1MzU1LDY1MzU2LDY1MzU3LDY1MzU4LDY1MzU5LDY1MzYwLDY1MzYxLDY1MzYyLDY1MzYzLDY1MzY0LDY1MzY1LDY1MzY2LDY1MzY3LDY1MzY4LDY1MzY5LDY1MzcwLG51bGwsbnVsbCxudWxsLG51bGwsMTIz''@;'; put 'put ''NTMsMTIzNTQsMTIzNTUsMTIzNTYsMTIzNTcsMTIzNTgsMTIzNTksMTIzNjAsMTIzNjEsMTIzNjIsMTIzNjMsMTIzNjQsMTIzNjUsMTIzNjYsMTIzNjcsMTIzNjgsMTIzNjksMTIzNzAsMTIzNzEsMTIzNzIsMTIzNzMsMTIzNzQsMTIzNzUsMTIzNzYsMTIzNzcsMTIzNzgsMTIzNzksMTIzODAs''@;'; put 'put ''MTIzODEsMTIzODIsMTIzODMsMTIzODQsMTIzODUsMTIzODYsMTIzODcsMTIzODgsMTIzODksMTIzOTAsMTIzOTEsMTIzOTIsMTIzOTMsMTIzOTQsMTIzOTUsMTIzOTYsMTIzOTcsMTIzOTgsMTIzOTksMTI0MDAsMTI0MDEsMTI0MDIsMTI0MDMsMTI0MDQsMTI0MDUsMTI0MDYsMTI0MDcsMTI0''@;'; put 'put ''MDgsMTI0MDksMTI0MTAsMTI0MTEsMTI0MTIsMTI0MTMsMTI0MTQsMTI0MTUsMTI0MTYsMTI0MTcsMTI0MTgsMTI0MTksMTI0MjAsMTI0MjEsMTI0MjIsMTI0MjMsMTI0MjQsMTI0MjUsMTI0MjYsMTI0MjcsMTI0MjgsMTI0MjksMTI0MzAsMTI0MzEsMTI0MzIsMTI0MzMsMTI0MzQsMTI0MzUs''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDEyNDQ5LDEyNDUwLDEyNDUxLDEyNDUyLDEyNDUzLDEyNDU0LDEyNDU1LDEyNDU2LDEyNDU3LDEyNDU4LDEyNDU5LDEyNDYwLDEyNDYxLDEyNDYyLDEyNDYzLDEyNDY0LDEyNDY1LDEyNDY2LDEy''@;'; put 'put ''NDY3LDEyNDY4LDEyNDY5LDEyNDcwLDEyNDcxLDEyNDcyLDEyNDczLDEyNDc0LDEyNDc1LDEyNDc2LDEyNDc3LDEyNDc4LDEyNDc5LDEyNDgwLDEyNDgxLDEyNDgyLDEyNDgzLDEyNDg0LDEyNDg1LDEyNDg2LDEyNDg3LDEyNDg4LDEyNDg5LDEyNDkwLDEyNDkxLDEyNDkyLDEyNDkzLDEyNDk0''@;'; put 'put ''LDEyNDk1LDEyNDk2LDEyNDk3LDEyNDk4LDEyNDk5LDEyNTAwLDEyNTAxLDEyNTAyLDEyNTAzLDEyNTA0LDEyNTA1LDEyNTA2LDEyNTA3LDEyNTA4LDEyNTA5LDEyNTEwLDEyNTExLDEyNTEyLDEyNTEzLDEyNTE0LDEyNTE1LDEyNTE2LDEyNTE3LDEyNTE4LDEyNTE5LDEyNTIwLDEyNTIxLDEy''@;'; put 'put ''NTIyLDEyNTIzLDEyNTI0LDEyNTI1LDEyNTI2LDEyNTI3LDEyNTI4LDEyNTI5LDEyNTMwLDEyNTMxLDEyNTMyLDEyNTMzLDEyNTM0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw5MTMsOTE0LDkxNSw5MTYsOTE3LDkxOCw5MTksOTIwLDkyMSw5MjIsOTIzLDkyNCw5''@;'; put 'put ''MjUsOTI2LDkyNyw5MjgsOTI5LDkzMSw5MzIsOTMzLDkzNCw5MzUsOTM2LDkzNyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsOTQ1LDk0Niw5NDcsOTQ4LDk0OSw5NTAsOTUxLDk1Miw5NTMsOTU0LDk1NSw5NTYsOTU3LDk1OCw5NTksOTYwLDk2MSw5NjMsOTY0LDk2''@;'; put 'put ''NSw5NjYsOTY3LDk2OCw5NjksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDEwNDAsMTA0MSwxMDQyLDEwNDMsMTA0NCwxMDQ1LDEwMjUsMTA0NiwxMDQ3LDEwNDgsMTA0OSwxMDUwLDEwNTEsMTA1MiwxMDUzLDEwNTQsMTA1NSwxMDU2LDEwNTcsMTA1OCwxMDU5LDEwNjAsMTA2MSwxMDYyLDEw''@;'; put 'put ''NjMsMTA2NCwxMDY1LDEwNjYsMTA2NywxMDY4LDEwNjksMTA3MCwxMDcxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDEwNzIsMTA3MywxMDc0LDEwNzUsMTA3NiwxMDc3LDExMDUsMTA3OCwxMDc5LDEw''@;'; put 'put ''ODAsMTA4MSwxMDgyLDEwODMsMTA4NCwxMDg1LDEwODYsMTA4NywxMDg4LDEwODksMTA5MCwxMDkxLDEwOTIsMTA5MywxMDk0LDEwOTUsMTA5NiwxMDk3LDEwOTgsMTA5OSwxMTAwLDExMDEsMTEwMiwxMTAzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsOTQ3Miw5NDc0LDk0ODQsOTQ4OCw5NDk2LDk0OTIsOTUwMCw5NTE2LDk1MDgsOTUyNCw5NTMyLDk0NzMsOTQ3NSw5NDg3LDk0OTEsOTQ5OSw5NDk1LDk1MDcsOTUyMyw5NTE1LDk1MzEsOTU0Nyw5NTA0LDk1MTksOTUxMiw5NTI3LDk1MzUsOTUwMSw5NTIwLDk1''@;'; put 'put ''MDksOTUyOCw5NTM4LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; 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 ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDkzMTIsOTMxMyw5MzE0LDkzMTUsOTMxNiw5MzE3LDkzMTgsOTMxOSw5MzIwLDkzMjEsOTMyMiw5MzIzLDkzMjQsOTMyNSw5MzI2LDkzMjcsOTMyOCw5MzI5LDkzMzAsOTMzMSw4NTQ0LDg1''@;'; put 'put ''NDUsODU0Niw4NTQ3LDg1NDgsODU0OSw4NTUwLDg1NTEsODU1Miw4NTUzLG51bGwsMTMxMjksMTMwNzYsMTMwOTAsMTMxMzMsMTMwODAsMTMwOTUsMTMwNTksMTMxMTAsMTMxMzcsMTMxNDMsMTMwNjksMTMwOTQsMTMwOTEsMTMwOTksMTMxMzAsMTMxMTUsMTMyMTIsMTMyMTMsMTMyMTQsMTMx''@;'; put 'put ''OTgsMTMxOTksMTMyNTIsMTMyMTcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDEzMTc5LDEyMzE3LDEyMzE5LDg0NzAsMTMyNjEsODQ4MSwxMjk2NCwxMjk2NSwxMjk2NiwxMjk2NywxMjk2OCwxMjg0OSwxMjg1MCwxMjg1NywxMzE4MiwxMzE4MSwxMzE4MCw4Nzg2''@;'; put 'put ''LDg4MDEsODc0Nyw4NzUwLDg3MjEsODczMCw4ODY5LDg3MzYsODczNSw4ODk1LDg3NTcsODc0NSw4NzQ2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsMjAxMjQsMjE3ODIsMjMwNDMsMzg0NjMsMjE2OTYsMjQ4NTksMjUzODQsMjMwMzAsMzY4OTgsMzM5MDksMzM1NjQsMzEzMTIsMjQ3NDYsMjU1NjksMjgxOTcsMjYwOTMsMzM4OTQsMzM0NDYsMzk5MjUsMjY3NzEsMjIzMTEsMjYwMTcsMjUyMDEsMjM0NTEs''@;'; put 'put ''MjI5OTIsMzQ0MjcsMzkxNTYsMzIwOTgsMzIxOTAsMzk4MjIsMjUxMTAsMzE5MDMsMzQ5OTksMjM0MzMsMjQyNDUsMjUzNTMsMjYyNjMsMjY2OTYsMzgzNDMsMzg3OTcsMjY0NDcsMjAxOTcsMjAyMzQsMjAzMDEsMjAzODEsMjA1NTMsMjIyNTgsMjI4MzksMjI5OTYsMjMwNDEsMjM1NjEsMjQ3''@;'; put 'put ''OTksMjQ4NDcsMjQ5NDQsMjYxMzEsMjY4ODUsMjg4NTgsMzAwMzEsMzAwNjQsMzEyMjcsMzIxNzMsMzIyMzksMzI5NjMsMzM4MDYsMzQ5MTUsMzU1ODYsMzY5NDksMzY5ODYsMjEzMDcsMjAxMTcsMjAxMzMsMjI0OTUsMzI5NDYsMzcwNTcsMzA5NTksMTk5NjgsMjI3NjksMjgzMjIsMzY5MjAs''@;'; put 'put ''MzEyODIsMzM1NzYsMzM0MTksMzk5ODMsMjA4MDEsMjEzNjAsMjE2OTMsMjE3MjksMjIyNDAsMjMwMzUsMjQzNDEsMzkxNTQsMjgxMzksMzI5OTYsMzQwOTMsMzg0OTgsMzg1MTIsMzg1NjAsMzg5MDcsMjE1MTUsMjE0OTEsMjM0MzEsMjg4NzksMzI3MDEsMzY4MDIsMzg2MzIsMjEzNTksNDAy''@;'; put 'put ''ODQsMzE0MTgsMTk5ODUsMzA4NjcsMzMyNzYsMjgxOTgsMjIwNDAsMjE3NjQsMjc0MjEsMzQwNzQsMzk5OTUsMjMwMTMsMjE0MTcsMjgwMDYsMjk5MTYsMzgyODcsMjIwODIsMjAxMTMsMzY5MzksMzg2NDIsMzM2MTUsMzkxODAsMjE0NzMsMjE5NDIsMjMzNDQsMjQ0MzMsMjYxNDQsMjYzNTUs''@;'; put 'put ''MjY2MjgsMjc3MDQsMjc4OTEsMjc5NDUsMjk3ODcsMzA0MDgsMzEzMTAsMzg5NjQsMzM1MjEsMzQ5MDcsMzU0MjQsMzc2MTMsMjgwODIsMzAxMjMsMzA0MTAsMzkzNjUsMjQ3NDIsMzU1ODUsMzYyMzQsMzgzMjIsMjcwMjIsMjE0MjEsMjA4NzAsMjIyOTAsMjI1NzYsMjI4NTIsMjM0NzYsMjQz''@;'; put 'put ''MTAsMjQ2MTYsMjU1MTMsMjU1ODgsMjc4MzksMjg0MzYsMjg4MTQsMjg5NDgsMjkwMTcsMjkxNDEsMjk1MDMsMzIyNTcsMzMzOTgsMzM0ODksMzQxOTksMzY5NjAsMzc0NjcsNDAyMTksMjI2MzMsMjYwNDQsMjc3MzgsMjk5ODksMjA5ODUsMjI4MzAsMjI4ODUsMjQ0NDgsMjQ1NDAsMjUyNzYs''@;'; put 'put ''MjYxMDYsMjcxNzgsMjc0MzEsMjc1NzIsMjk1NzksMzI3MDUsMzUxNTgsNDAyMzYsNDAyMDYsNDA2NDQsMjM3MTMsMjc3OTgsMzM2NTksMjA3NDAsMjM2MjcsMjUwMTQsMzMyMjIsMjY3NDIsMjkyODEsMjAwNTcsMjA0NzQsMjEzNjgsMjQ2ODEsMjgyMDEsMzEzMTEsMzg4OTksMTk5NzksMjEy''@;'; put 'put ''NzAsMjAyMDYsMjAzMDksMjAyODUsMjAzODUsMjAzMzksMjExNTIsMjE0ODcsMjIwMjUsMjI3OTksMjMyMzMsMjM0NzgsMjM1MjEsMzExODUsMjYyNDcsMjY1MjQsMjY1NTAsMjc0NjgsMjc4MjcsMjg3NzksMjk2MzQsMzExMTcsMzExNjYsMzEyOTIsMzE2MjMsMzM0NTcsMzM0OTksMzM1NDAs''@;'; put 'put ''MzM2NTUsMzM3NzUsMzM3NDcsMzQ2NjIsMzU1MDYsMjIwNTcsMzYwMDgsMzY4MzgsMzY5NDIsMzg2ODYsMzQ0NDIsMjA0MjAsMjM3ODQsMjUxMDUsMjkyNzMsMzAwMTEsMzMyNTMsMzM0NjksMzQ1NTgsMzYwMzIsMzg1OTcsMzkxODcsMzkzODEsMjAxNzEsMjAyNTAsMzUyOTksMjIyMzgsMjI2''@;'; put 'put ''MDIsMjI3MzAsMjQzMTUsMjQ1NTUsMjQ2MTgsMjQ3MjQsMjQ2NzQsMjUwNDAsMjUxMDYsMjUyOTYsMjU5MTMsMzk3NDUsMjYyMTQsMjY4MDAsMjgwMjMsMjg3ODQsMzAwMjgsMzAzNDIsMzIxMTcsMzM0NDUsMzQ4MDksMzgyODMsMzg1NDIsMzU5OTcsMjA5NzcsMjExODIsMjI4MDYsMjE2ODMs''@;'; put 'put ''MjM0NzUsMjM4MzAsMjQ5MzYsMjcwMTAsMjgwNzksMzA4NjEsMzM5OTUsMzQ5MDMsMzU0NDIsMzc3OTksMzk2MDgsMjgwMTIsMzkzMzYsMzQ1MjEsMjI0MzUsMjY2MjMsMzQ1MTAsMzczOTAsMjExMjMsMjIxNTEsMjE1MDgsMjQyNzUsMjUzMTMsMjU3ODUsMjY2ODQsMjY2ODAsMjc1NzksMjk1''@;'; put 'put ''NTQsMzA5MDYsMzEzMzksMzUyMjYsMzUyODIsMzYyMDMsMzY2MTEsMzcxMDEsMzgzMDcsMzg1NDgsMzg3NjEsMjMzOTgsMjM3MzEsMjcwMDUsMzg5ODksMzg5OTAsMjU0OTksMzE1MjAsMjcxNzksMjcyNjMsMjY4MDYsMzk5NDksMjg1MTEsMjExMDYsMjE5MTcsMjQ2ODgsMjUzMjQsMjc5NjMs''@;'; put 'put ''MjgxNjcsMjgzNjksMzM4ODMsMzUwODgsMzY2NzYsMTk5ODgsMzk5OTMsMjE0OTQsMjY5MDcsMjcxOTQsMzg3ODgsMjY2NjYsMjA4MjgsMzE0MjcsMzM5NzAsMzczNDAsMzc3NzIsMjIxMDcsNDAyMzIsMjY2NTgsMzM1NDEsMzM4NDEsMzE5MDksMjFlMywzMzQ3NywyOTkyNiwyMDA5NCwyMDM1''@;'; put 'put ''NSwyMDg5NiwyMzUwNiwyMTAwMiwyMTIwOCwyMTIyMywyNDA1OSwyMTkxNCwyMjU3MCwyMzAxNCwyMzQzNiwyMzQ0OCwyMzUxNSwyNDE3OCwyNDE4NSwyNDczOSwyNDg2MywyNDkzMSwyNTAyMiwyNTU2MywyNTk1NCwyNjU3NywyNjcwNywyNjg3NCwyNzQ1NCwyNzQ3NSwyNzczNSwyODQ1MCwy''@;'; put 'put ''ODU2NywyODQ4NSwyOTg3MiwyOTk3NiwzMDQzNSwzMDQ3NSwzMTQ4NywzMTY0OSwzMTc3NywzMjIzMywzMjU2NiwzMjc1MiwzMjkyNSwzMzM4MiwzMzY5NCwzNTI1MSwzNTUzMiwzNjAxMSwzNjk5NiwzNzk2OSwzODI5MSwzODI4OSwzODMwNiwzODUwMSwzODg2NywzOTIwOCwzMzMwNCwyMDAy''@;'; put 'put ''NCwyMTU0NywyMzczNiwyNDAxMiwyOTYwOSwzMDI4NCwzMDUyNCwyMzcyMSwzMjc0NywzNjEwNywzODU5MywzODkyOSwzODk5NiwzOWUzLDIwMjI1LDIwMjM4LDIxMzYxLDIxOTE2LDIyMTIwLDIyNTIyLDIyODU1LDIzMzA1LDIzNDkyLDIzNjk2LDI0MDc2LDI0MTkwLDI0NTI0LDI1NTgyLDI2''@;'; put 'put ''NDI2LDI2MDcxLDI2MDgyLDI2Mzk5LDI2ODI3LDI2ODIwLDI3MjMxLDI0MTEyLDI3NTg5LDI3NjcxLDI3NzczLDMwMDc5LDMxMDQ4LDIzMzk1LDMxMjMyLDMyZTMsMjQ1MDksMzUyMTUsMzUzNTIsMzYwMjAsMzYyMTUsMzY1NTYsMzY2MzcsMzkxMzgsMzk0MzgsMzk3NDAsMjAwOTYsMjA2MDUs''@;'; put 'put ''MjA3MzYsMjI5MzEsMjM0NTIsMjUxMzUsMjUyMTYsMjU4MzYsMjc0NTAsMjkzNDQsMzAwOTcsMzEwNDcsMzI2ODEsMzQ4MTEsMzU1MTYsMzU2OTYsMjU1MTYsMzM3MzgsMzg4MTYsMjE1MTMsMjE1MDcsMjE5MzEsMjY3MDgsMjcyMjQsMzU0NDAsMzA3NTksMjY0ODUsNDA2NTMsMjEzNjQsMjM0''@;'; put 'put ''NTgsMzMwNTAsMzQzODQsMzY4NzAsMTk5OTIsMjAwMzcsMjAxNjcsMjAyNDEsMjE0NTAsMjE1NjAsMjM0NzAsMjQzMzksMjQ2MTMsMjU5MzcsMjY0MjksMjc3MTQsMjc3NjIsMjc4NzUsMjg3OTIsMjk2OTksMzEzNTAsMzE0MDYsMzE0OTYsMzIwMjYsMzE5OTgsMzIxMDIsMjYwODcsMjkyNzUs''@;'; put 'put ''MjE0MzUsMjM2MjEsMjQwNDAsMjUyOTgsMjUzMTIsMjUzNjksMjgxOTIsMzQzOTQsMzUzNzcsMzYzMTcsMzc2MjQsMjg0MTcsMzExNDIsMzk3NzAsMjAxMzYsMjAxMzksMjAxNDAsMjAzNzksMjAzODQsMjA2ODksMjA4MDcsMzE0NzgsMjA4NDksMjA5ODIsMjEzMzIsMjEyODEsMjEzNzUsMjE0''@;'; put 'put ''ODMsMjE5MzIsMjI2NTksMjM3NzcsMjQzNzUsMjQzOTQsMjQ2MjMsMjQ2NTYsMjQ2ODUsMjUzNzUsMjU5NDUsMjcyMTEsMjc4NDEsMjkzNzgsMjk0MjEsMzA3MDMsMzMwMTYsMzMwMjksMzMyODgsMzQxMjYsMzcxMTEsMzc4NTcsMzg5MTEsMzkyNTUsMzk1MTQsMjAyMDgsMjA5NTcsMjM1OTcs''@;'; put 'put ''MjYyNDEsMjY5ODksMjM2MTYsMjYzNTQsMjY5OTcsMjk1NzcsMjY3MDQsMzE4NzMsMjA2NzcsMjEyMjAsMjIzNDMsMjQwNjIsMzc2NzAsMjYwMjAsMjc0MjcsMjc0NTMsMjk3NDgsMzExMDUsMzExNjUsMzE1NjMsMzIyMDIsMzM0NjUsMzM3NDAsMzQ5NDMsMzUxNjcsMzU2NDEsMzY4MTcsMzcz''@;'; put 'put ''MjksMjE1MzUsMzc1MDQsMjAwNjEsMjA1MzQsMjE0NzcsMjEzMDYsMjkzOTksMjk1OTAsMzA2OTcsMzM1MTAsMzY1MjcsMzkzNjYsMzkzNjgsMzkzNzgsMjA4NTUsMjQ4NTgsMzQzOTgsMjE5MzYsMzEzNTQsMjA1OTgsMjM1MDcsMzY5MzUsMzg1MzMsMjAwMTgsMjczNTUsMzczNTEsMjM2MzMs''@;'; put 'put ''MjM2MjQsMjU0OTYsMzEzOTEsMjc3OTUsMzg3NzIsMzY3MDUsMzE0MDIsMjkwNjYsMzg1MzYsMzE4NzQsMjY2NDcsMzIzNjgsMjY3MDUsMzc3NDAsMjEyMzQsMjE1MzEsMzQyMTksMzUzNDcsMzI2NzYsMzY1NTcsMzcwODksMjEzNTAsMzQ5NTIsMzEwNDEsMjA0MTgsMjA2NzAsMjEwMDksMjA4''@;'; put 'put ''MDQsMjE4NDMsMjIzMTcsMjk2NzQsMjI0MTEsMjI4NjUsMjQ0MTgsMjQ0NTIsMjQ2OTMsMjQ5NTAsMjQ5MzUsMjUwMDEsMjU1MjIsMjU2NTgsMjU5NjQsMjYyMjMsMjY2OTAsMjgxNzksMzAwNTQsMzEyOTMsMzE5OTUsMzIwNzYsMzIxNTMsMzIzMzEsMzI2MTksMzM1NTAsMzM2MTAsMzQ1MDks''@;'; put 'put ''MzUzMzYsMzU0MjcsMzU2ODYsMzY2MDUsMzg5MzgsNDAzMzUsMzM0NjQsMzY4MTQsMzk5MTIsMjExMjcsMjUxMTksMjU3MzEsMjg2MDgsMzg1NTMsMjY2ODksMjA2MjUsMjc0MjQsMjc3NzAsMjg1MDAsMzEzNDgsMzIwODAsMzQ4ODAsMzUzNjMsMjYzNzYsMjAyMTQsMjA1MzcsMjA1MTgsMjA1''@;'; put 'put ''ODEsMjA4NjAsMjEwNDgsMjEwOTEsMjE5MjcsMjIyODcsMjI1MzMsMjMyNDQsMjQzMTQsMjUwMTAsMjUwODAsMjUzMzEsMjU0NTgsMjY5MDgsMjcxNzcsMjkzMDksMjkzNTYsMjk0ODYsMzA3NDAsMzA4MzEsMzIxMjEsMzA0NzYsMzI5MzcsMzUyMTEsMzU2MDksMzYwNjYsMzY1NjIsMzY5NjMs''@;'; put 'put ''Mzc3NDksMzg1MjIsMzg5OTcsMzk0NDMsNDA1NjgsMjA4MDMsMjE0MDcsMjE0MjcsMjQxODcsMjQzNTgsMjgxODcsMjgzMDQsMjk1NzIsMjk2OTQsMzIwNjcsMzMzMzUsMzUzMjgsMzU1NzgsMzg0ODAsMjAwNDYsMjA0OTEsMjE0NzYsMjE2MjgsMjIyNjYsMjI5OTMsMjMzOTYsMjQwNDksMjQy''@;'; put 'put ''MzUsMjQzNTksMjUxNDQsMjU5MjUsMjY1NDMsMjgyNDYsMjkzOTIsMzE5NDYsMzQ5OTYsMzI5MjksMzI5OTMsMzM3NzYsMzQzODIsMzU0NjMsMzYzMjgsMzc0MzEsMzg1OTksMzkwMTUsNDA3MjMsMjAxMTYsMjAxMTQsMjAyMzcsMjEzMjAsMjE1NzcsMjE1NjYsMjMwODcsMjQ0NjAsMjQ0ODEs''@;'; put 'put ''MjQ3MzUsMjY3OTEsMjcyNzgsMjk3ODYsMzA4NDksMzU0ODYsMzU0OTIsMzU3MDMsMzcyNjQsMjAwNjIsMzk4ODEsMjAxMzIsMjAzNDgsMjAzOTksMjA1MDUsMjA1MDIsMjA4MDksMjA4NDQsMjExNTEsMjExNzcsMjEyNDYsMjE0MDIsMjE0NzUsMjE1MjEsMjE1MTgsMjE4OTcsMjIzNTMsMjI0''@;'; put 'put ''MzQsMjI5MDksMjMzODAsMjMzODksMjM0MzksMjQwMzcsMjQwMzksMjQwNTUsMjQxODQsMjQxOTUsMjQyMTgsMjQyNDcsMjQzNDQsMjQ2NTgsMjQ5MDgsMjUyMzksMjUzMDQsMjU1MTEsMjU5MTUsMjYxMTQsMjYxNzksMjYzNTYsMjY0NzcsMjY2NTcsMjY3NzUsMjcwODMsMjc3NDMsMjc5NDYs''@;'; put 'put ''MjgwMDksMjgyMDcsMjgzMTcsMzAwMDIsMzAzNDMsMzA4MjgsMzEyOTUsMzE5NjgsMzIwMDUsMzIwMjQsMzIwOTQsMzIxNzcsMzI3ODksMzI3NzEsMzI5NDMsMzI5NDUsMzMxMDgsMzMxNjcsMzMzMjIsMzM2MTgsMzQ4OTIsMzQ5MTMsMzU2MTEsMzYwMDIsMzYwOTIsMzcwNjYsMzcyMzcsMzc0''@;'; put 'put ''ODksMzA3ODMsMzc2MjgsMzgzMDgsMzg0NzcsMzg5MTcsMzkzMjEsMzk2NDAsNDAyNTEsMjEwODMsMjExNjMsMjE0OTUsMjE1MTIsMjI3NDEsMjUzMzUsMjg2NDAsMzU5NDYsMzY3MDMsNDA2MzMsMjA4MTEsMjEwNTEsMjE1NzgsMjIyNjksMzEyOTYsMzcyMzksNDAyODgsNDA2NTgsMjk1MDgs''@;'; put 'put ''Mjg0MjUsMzMxMzYsMjk5NjksMjQ1NzMsMjQ3OTQsMzk1OTIsMjk0MDMsMzY3OTYsMjc0OTIsMzg5MTUsMjAxNzAsMjIyNTYsMjIzNzIsMjI3MTgsMjMxMzAsMjQ2ODAsMjUwMzEsMjYxMjcsMjYxMTgsMjY2ODEsMjY4MDEsMjgxNTEsMzAxNjUsMzIwNTgsMzMzOTAsMzk3NDYsMjAxMjMsMjAz''@;'; put 'put ''MDQsMjE0NDksMjE3NjYsMjM5MTksMjQwMzgsMjQwNDYsMjY2MTksMjc4MDEsMjk4MTEsMzA3MjIsMzU0MDgsMzc3ODIsMzUwMzksMjIzNTIsMjQyMzEsMjUzODcsMjA2NjEsMjA2NTIsMjA4NzcsMjYzNjgsMjE3MDUsMjI2MjIsMjI5NzEsMjM0NzIsMjQ0MjUsMjUxNjUsMjU1MDUsMjY2ODUs''@;'; put 'put ''Mjc1MDcsMjgxNjgsMjg3OTcsMzczMTksMjkzMTIsMzA3NDEsMzA3NTgsMzEwODUsMjU5OTgsMzIwNDgsMzM3NTYsMzUwMDksMzY2MTcsMzg1NTUsMjEwOTIsMjIzMTIsMjY0NDgsMzI2MTgsMzYwMDEsMjA5MTYsMjIzMzgsMzg0NDIsMjI1ODYsMjcwMTgsMzI5NDgsMjE2ODIsMjM4MjIsMjI1''@;'; put 'put ''MjQsMzA4NjksNDA0NDIsMjAzMTYsMjEwNjYsMjE2NDMsMjU2NjIsMjYxNTIsMjYzODgsMjY2MTMsMzEzNjQsMzE1NzQsMzIwMzQsMzc2NzksMjY3MTYsMzk4NTMsMzE1NDUsMjEyNzMsMjA4NzQsMjEwNDcsMjM1MTksMjUzMzQsMjU3NzQsMjU4MzAsMjY0MTMsMjc1NzgsMzQyMTcsMzg2MDks''@;'; put 'put ''MzAzNTIsMzk4OTQsMjU0MjAsMzc2MzgsMzk4NTEsMzAzOTksMjYxOTQsMTk5NzcsMjA2MzIsMjE0NDIsMjM2NjUsMjQ4MDgsMjU3NDYsMjU5NTUsMjY3MTksMjkxNTgsMjk2NDIsMjk5ODcsMzE2MzksMzIzODYsMzQ0NTMsMzU3MTUsMzYwNTksMzcyNDAsMzkxODQsMjYwMjgsMjYyODMsMjc1''@;'; put 'put ''MzEsMjAxODEsMjAxODAsMjAyODIsMjAzNTEsMjEwNTAsMjE0OTYsMjE0OTAsMjE5ODcsMjIyMzUsMjI3NjMsMjI5ODcsMjI5ODUsMjMwMzksMjMzNzYsMjM2MjksMjQwNjYsMjQxMDcsMjQ1MzUsMjQ2MDUsMjUzNTEsMjU5MDMsMjMzODgsMjYwMzEsMjYwNDUsMjYwODgsMjY1MjUsMjc0OTAs''@;'; put 'put ''Mjc1MTUsMjc2NjMsMjk1MDksMzEwNDksMzExNjksMzE5OTIsMzIwMjUsMzIwNDMsMzI5MzAsMzMwMjYsMzMyNjcsMzUyMjIsMzU0MjIsMzU0MzMsMzU0MzAsMzU0NjgsMzU1NjYsMzYwMzksMzYwNjAsMzg2MDQsMzkxNjQsMjc1MDMsMjAxMDcsMjAyODQsMjAzNjUsMjA4MTYsMjMzODMsMjM1''@;'; put 'put ''NDYsMjQ5MDQsMjUzNDUsMjYxNzgsMjc0MjUsMjgzNjMsMjc4MzUsMjkyNDYsMjk4ODUsMzAxNjQsMzA5MTMsMzEwMzQsMzI3ODAsMzI4MTksMzMyNTgsMzM5NDAsMzY3NjYsMjc3MjgsNDA1NzUsMjQzMzUsMzU2NzIsNDAyMzUsMzE0ODIsMzY2MDAsMjM0MzcsMzg2MzUsMTk5NzEsMjE0ODks''@;'; put 'put ''MjI1MTksMjI4MzMsMjMyNDEsMjM0NjAsMjQ3MTMsMjgyODcsMjg0MjIsMzAxNDIsMzYwNzQsMjM0NTUsMzQwNDgsMzE3MTIsMjA1OTQsMjY2MTIsMzM0MzcsMjM2NDksMzQxMjIsMzIyODYsMzMyOTQsMjA4ODksMjM1NTYsMjU0NDgsMzYxOTgsMjYwMTIsMjkwMzgsMzEwMzgsMzIwMjMsMzI3''@;'; put 'put ''NzMsMzU2MTMsMzY1NTQsMzY5NzQsMzQ1MDMsMzcwMzQsMjA1MTEsMjEyNDIsMjM2MTAsMjY0NTEsMjg3OTYsMjkyMzcsMzcxOTYsMzczMjAsMzc2NzUsMzM1MDksMjM0OTAsMjQzNjksMjQ4MjUsMjAwMjcsMjE0NjIsMjM0MzIsMjUxNjMsMjY0MTcsMjc1MzAsMjk0MTcsMjk2NjQsMzEyNzgs''@;'; put 'put ''MzMxMzEsMzYyNTksMzcyMDIsMzkzMTgsMjA3NTQsMjE0NjMsMjE2MTAsMjM1NTEsMjU0ODAsMjcxOTMsMzIxNzIsMzg2NTYsMjIyMzQsMjE0NTQsMjE2MDgsMjM0NDcsMjM2MDEsMjQwMzAsMjA0NjIsMjQ4MzMsMjUzNDIsMjc5NTQsMzExNjgsMzExNzksMzIwNjYsMzIzMzMsMzI3MjIsMzMy''@;'; put 'put ''NjEsMzMzMTEsMzM5MzYsMzQ4ODYsMzUxODYsMzU3MjgsMzY0NjgsMzY2NTUsMzY5MTMsMzcxOTUsMzcyMjgsMzg1OTgsMzcyNzYsMjAxNjAsMjAzMDMsMjA4MDUsMjEzMTMsMjQ0NjcsMjUxMDIsMjY1ODAsMjc3MTMsMjgxNzEsMjk1MzksMzIyOTQsMzczMjUsMzc1MDcsMjE0NjAsMjI4MDks''@;'; put 'put ''MjM0ODcsMjgxMTMsMzEwNjksMzIzMDIsMzE4OTksMjI2NTQsMjkwODcsMjA5ODYsMzQ4OTksMzY4NDgsMjA0MjYsMjM4MDMsMjYxNDksMzA2MzYsMzE0NTksMzMzMDgsMzk0MjMsMjA5MzQsMjQ0OTAsMjYwOTIsMjY5OTEsMjc1MjksMjgxNDcsMjgzMTAsMjg1MTYsMzA0NjIsMzIwMjAsMjQw''@;'; put 'put ''MzMsMzY5ODEsMzcyNTUsMzg5MTgsMjA5NjYsMjEwMjEsMjUxNTIsMjYyNTcsMjYzMjksMjgxODYsMjQyNDYsMzIyMTAsMzI2MjYsMjYzNjAsMzQyMjMsMzQyOTUsMzU1NzYsMjExNjEsMjE0NjUsMjI4OTksMjQyMDcsMjQ0NjQsMjQ2NjEsMzc2MDQsMzg1MDAsMjA2NjMsMjA3NjcsMjEyMTMs''@;'; put 'put ''MjEyODAsMjEzMTksMjE0ODQsMjE3MzYsMjE4MzAsMjE4MDksMjIwMzksMjI4ODgsMjI5NzQsMjMxMDAsMjM0NzcsMjM1NTgsMjM1NjcsMjM1NjksMjM1NzgsMjQxOTYsMjQyMDIsMjQyODgsMjQ0MzIsMjUyMTUsMjUyMjAsMjUzMDcsMjU0ODQsMjU0NjMsMjYxMTksMjYxMjQsMjYxNTcsMjYy''@;'; put 'put ''MzAsMjY0OTQsMjY3ODYsMjcxNjcsMjcxODksMjc4MzYsMjgwNDAsMjgxNjksMjgyNDgsMjg5ODgsMjg5NjYsMjkwMzEsMzAxNTEsMzA0NjUsMzA4MTMsMzA5NzcsMzEwNzcsMzEyMTYsMzE0NTYsMzE1MDUsMzE5MTEsMzIwNTcsMzI5MTgsMzM3NTAsMzM5MzEsMzQxMjEsMzQ5MDksMzUwNTks''@;'; put 'put ''MzUzNTksMzUzODgsMzU0MTIsMzU0NDMsMzU5MzcsMzYwNjIsMzcyODQsMzc0NzgsMzc3NTgsMzc5MTIsMzg1NTYsMzg4MDgsMTk5NzgsMTk5NzYsMTk5OTgsMjAwNTUsMjA4ODcsMjExMDQsMjI0NzgsMjI1ODAsMjI3MzIsMjMzMzAsMjQxMjAsMjQ3NzMsMjU4NTQsMjY0NjUsMjY0NTQsMjc5''@;'; put 'put ''NzIsMjkzNjYsMzAwNjcsMzEzMzEsMzM5NzYsMzU2OTgsMzczMDQsMzc2NjQsMjIwNjUsMjI1MTYsMzkxNjYsMjUzMjUsMjY4OTMsMjc1NDIsMjkxNjUsMzIzNDAsMzI4ODcsMzMzOTQsMzUzMDIsMzkxMzUsMzQ2NDUsMzY3ODUsMjM2MTEsMjAyODAsMjA0NDksMjA0MDUsMjE3NjcsMjMwNzIs''@;'; put 'put ''MjM1MTcsMjM1MjksMjQ1MTUsMjQ5MTAsMjUzOTEsMjYwMzIsMjYxODcsMjY4NjIsMjcwMzUsMjgwMjQsMjgxNDUsMzAwMDMsMzAxMzcsMzA0OTUsMzEwNzAsMzEyMDYsMzIwNTEsMzMyNTEsMzM0NTUsMzQyMTgsMzUyNDIsMzUzODYsMzY1MjMsMzY3NjMsMzY5MTQsMzczNDEsMzg2NjMsMjAx''@;'; put 'put ''NTQsMjAxNjEsMjA5OTUsMjI2NDUsMjI3NjQsMjM1NjMsMjk5NzgsMjM2MTMsMzMxMDIsMzUzMzgsMzY4MDUsMzg0OTksMzg3NjUsMzE1MjUsMzU1MzUsMzg5MjAsMzcyMTgsMjIyNTksMjE0MTYsMzY4ODcsMjE1NjEsMjI0MDIsMjQxMDEsMjU1MTIsMjc3MDAsMjg4MTAsMzA1NjEsMzE4ODMs''@;'; put 'put ''MzI3MzYsMzQ5MjgsMzY5MzAsMzcyMDQsMzc2NDgsMzc2NTYsMzg1NDMsMjk3OTAsMzk2MjAsMjM4MTUsMjM5MTMsMjU5NjgsMjY1MzAsMzYyNjQsMzg2MTksMjU0NTQsMjY0NDEsMjY5MDUsMzM3MzMsMzg5MzUsMzg1OTIsMzUwNzAsMjg1NDgsMjU3MjIsMjM1NDQsMTk5OTAsMjg3MTYsMzAw''@;'; put 'put ''NDUsMjYxNTksMjA5MzIsMjEwNDYsMjEyMTgsMjI5OTUsMjQ0NDksMjQ2MTUsMjUxMDQsMjU5MTksMjU5NzIsMjYxNDMsMjYyMjgsMjY4NjYsMjY2NDYsMjc0OTEsMjgxNjUsMjkyOTgsMjk5ODMsMzA0MjcsMzE5MzQsMzI4NTQsMjI3NjgsMzUwNjksMzUxOTksMzU0ODgsMzU0NzUsMzU1MzEs''@;'; put 'put ''MzY4OTMsMzcyNjYsMzg3MzgsMzg3NDUsMjU5OTMsMzEyNDYsMzMwMzAsMzg1ODcsMjQxMDksMjQ3OTYsMjUxMTQsMjYwMjEsMjYxMzIsMjY1MTIsMzA3MDcsMzEzMDksMzE4MjEsMzIzMTgsMzMwMzQsMzYwMTIsMzYxOTYsMzYzMjEsMzY0NDcsMzA4ODksMjA5OTksMjUzMDUsMjU1MDksMjU2''@;'; put 'put ''NjYsMjUyNDAsMzUzNzMsMzEzNjMsMzE2ODAsMzU1MDAsMzg2MzQsMzIxMTgsMzMyOTIsMzQ2MzMsMjAxODUsMjA4MDgsMjEzMTUsMjEzNDQsMjM0NTksMjM1NTQsMjM1NzQsMjQwMjksMjUxMjYsMjUxNTksMjU3NzYsMjY2NDMsMjY2NzYsMjc4NDksMjc5NzMsMjc5MjcsMjY1NzksMjg1MDgs''@;'; put 'put ''MjkwMDYsMjkwNTMsMjYwNTksMzEzNTksMzE2NjEsMzIyMTgsMzIzMzAsMzI2ODAsMzMxNDYsMzMzMDcsMzMzMzcsMzQyMTQsMzU0MzgsMzYwNDYsMzYzNDEsMzY5ODQsMzY5ODMsMzc1NDksMzc1MjEsMzgyNzUsMzk4NTQsMjEwNjksMjE4OTIsMjg0NzIsMjg5ODIsMjA4NDAsMzExMDksMzIz''@;'; put 'put ''NDEsMzMyMDMsMzE5NTAsMjIwOTIsMjI2MDksMjM3MjAsMjU1MTQsMjYzNjYsMjYzNjUsMjY5NzAsMjk0MDEsMzAwOTUsMzAwOTQsMzA5OTAsMzEwNjIsMzExOTksMzE4OTUsMzIwMzIsMzIwNjgsMzQzMTEsMzUzODAsMzg0NTksMzY5NjEsNDA3MzYsMjA3MTEsMjExMDksMjE0NTIsMjE0NzQs''@;'; put 'put ''MjA0ODksMjE5MzAsMjI3NjYsMjI4NjMsMjkyNDUsMjM0MzUsMjM2NTIsMjEyNzcsMjQ4MDMsMjQ4MTksMjU0MzYsMjU0NzUsMjU0MDcsMjU1MzEsMjU4MDUsMjYwODksMjYzNjEsMjQwMzUsMjcwODUsMjcxMzMsMjg0MzcsMjkxNTcsMjAxMDUsMzAxODUsMzA0NTYsMzEzNzksMzE5NjcsMzIy''@;'; put 'put ''MDcsMzIxNTYsMzI4NjUsMzM2MDksMzM2MjQsMzM5MDAsMzM5ODAsMzQyOTksMzUwMTMsMzYyMDgsMzY4NjUsMzY5NzMsMzc3ODMsMzg2ODQsMzk0NDIsMjA2ODcsMjI2NzksMjQ5NzQsMzMyMzUsMzQxMDEsMzYxMDQsMzY4OTYsMjA0MTksMjA1OTYsMjEwNjMsMjEzNjMsMjQ2ODcsMjU0MTcs''@;'; put 'put ''MjY0NjMsMjgyMDQsMzYyNzUsMzY4OTUsMjA0MzksMjM2NDYsMzYwNDIsMjYwNjMsMzIxNTQsMjEzMzAsMzQ5NjYsMjA4NTQsMjU1MzksMjMzODQsMjM0MDMsMjM1NjIsMjU2MTMsMjY0NDksMzY5NTYsMjAxODIsMjI4MTAsMjI4MjYsMjc3NjAsMzU0MDksMjE4MjIsMjI1NDksMjI5NDksMjQ4''@;'; put 'put ''MTYsMjUxNzEsMjY1NjEsMzMzMzMsMjY5NjUsMzg0NjQsMzkzNjQsMzk0NjQsMjAzMDcsMjI1MzQsMjM1NTAsMzI3ODQsMjM3MjksMjQxMTEsMjQ0NTMsMjQ2MDgsMjQ5MDcsMjUxNDAsMjYzNjcsMjc4ODgsMjgzODIsMzI5NzQsMzMxNTEsMzM0OTIsMzQ5NTUsMzYwMjQsMzY4NjQsMzY5MTAs''@;'; put 'put ''Mzg1MzgsNDA2NjcsMzk4OTksMjAxOTUsMjE0ODgsMjI4MjMsMzE1MzIsMzcyNjEsMzg5ODgsNDA0NDEsMjgzODEsMjg3MTEsMjEzMzEsMjE4MjgsMjM0MjksMjUxNzYsMjUyNDYsMjUyOTksMjc4MTAsMjg2NTUsMjk3MzAsMzUzNTEsMzc5NDQsMjg2MDksMzU1ODIsMzM1OTIsMjA5NjcsMzQ1''@;'; put 'put ''NTIsMjE0ODIsMjE0ODEsMjAyOTQsMzY5NDgsMzY3ODQsMjI4OTAsMzMwNzMsMjQwNjEsMzE0NjYsMzY3OTksMjY4NDIsMzU4OTUsMjk0MzIsNDAwMDgsMjcxOTcsMzU1MDQsMjAwMjUsMjEzMzYsMjIwMjIsMjIzNzQsMjUyODUsMjU1MDYsMjYwODYsMjc0NzAsMjgxMjksMjgyNTEsMjg4NDUs''@;'; put 'put ''MzA3MDEsMzE0NzEsMzE2NTgsMzIxODcsMzI4MjksMzI5NjYsMzQ1MDcsMzU0NzcsMzc3MjMsMjIyNDMsMjI3MjcsMjQzODIsMjYwMjksMjYyNjIsMjcyNjQsMjc1NzMsMzAwMDcsMzU1MjcsMjA1MTYsMzA2OTMsMjIzMjAsMjQzNDcsMjQ2NzcsMjYyMzQsMjc3NDQsMzAxOTYsMzEyNTgsMzI2''@;'; put 'put ''MjIsMzMyNjgsMzQ1ODQsMzY5MzMsMzkzNDcsMzE2ODksMzAwNDQsMzE0ODEsMzE1NjksMzM5ODgsMzY4ODAsMzEyMDksMzEzNzgsMzM1OTAsMjMyNjUsMzA1MjgsMjAwMTMsMjAyMTAsMjM0NDksMjQ1NDQsMjUyNzcsMjYxNzIsMjY2MDksMjc4ODAsMzQ0MTEsMzQ5MzUsMzUzODcsMzcxOTgs''@;'; put 'put ''Mzc2MTksMzkzNzYsMjcxNTksMjg3MTAsMjk0ODIsMzM1MTEsMzM4NzksMzYwMTUsMTk5NjksMjA4MDYsMjA5MzksMjE4OTksMjM1NDEsMjQwODYsMjQxMTUsMjQxOTMsMjQzNDAsMjQzNzMsMjQ0MjcsMjQ1MDAsMjUwNzQsMjUzNjEsMjYyNzQsMjYzOTcsMjg1MjYsMjkyNjYsMzAwMTAsMzA1''@;'; put 'put ''MjIsMzI4ODQsMzMwODEsMzMxNDQsMzQ2NzgsMzU1MTksMzU1NDgsMzYyMjksMzYzMzksMzc1MzAsMzgyNjMsMzg5MTQsNDAxNjUsMjExODksMjU0MzEsMzA0NTIsMjYzODksMjc3ODQsMjk2NDUsMzYwMzUsMzc4MDYsMzg1MTUsMjc5NDEsMjI2ODQsMjY4OTQsMjcwODQsMzY4NjEsMzc3ODYs''@;'; put 'put ''MzAxNzEsMzY4OTAsMjI2MTgsMjY2MjYsMjU1MjQsMjcxMzEsMjAyOTEsMjg0NjAsMjY1ODQsMzY3OTUsMzQwODYsMzIxODAsMzc3MTYsMjY5NDMsMjg1MjgsMjIzNzgsMjI3NzUsMjMzNDAsMzIwNDQsMjkyMjYsMjE1MTQsMzczNDcsNDAzNzIsMjAxNDEsMjAzMDIsMjA1NzIsMjA1OTcsMjEw''@;'; put 'put ''NTksMzU5OTgsMjE1NzYsMjI1NjQsMjM0NTAsMjQwOTMsMjQyMTMsMjQyMzcsMjQzMTEsMjQzNTEsMjQ3MTYsMjUyNjksMjU0MDIsMjU1NTIsMjY3OTksMjc3MTIsMzA4NTUsMzExMTgsMzEyNDMsMzIyMjQsMzMzNTEsMzUzMzAsMzU1NTgsMzY0MjAsMzY4ODMsMzcwNDgsMzcxNjUsMzczMzYs''@;'; put 'put ''NDA3MTgsMjc4NzcsMjU2ODgsMjU4MjYsMjU5NzMsMjg0MDQsMzAzNDAsMzE1MTUsMzY5NjksMzc4NDEsMjgzNDYsMjE3NDYsMjQ1MDUsMjU3NjQsMzY2ODUsMzY4NDUsMzc0NDQsMjA4NTYsMjI2MzUsMjI4MjUsMjM2MzcsMjQyMTUsMjgxNTUsMzIzOTksMjk5ODAsMzYwMjgsMzY1NzgsMzkw''@;'; put 'put ''MDMsMjg4NTcsMjAyNTMsMjc1ODMsMjg1OTMsM2U0LDM4NjUxLDIwODE0LDIxNTIwLDIyNTgxLDIyNjE1LDIyOTU2LDIzNjQ4LDI0NDY2LDI2MDA3LDI2NDYwLDI4MTkzLDMwMzMxLDMzNzU5LDM2MDc3LDM2ODg0LDM3MTE3LDM3NzA5LDMwNzU3LDMwNzc4LDIxMTYyLDI0MjMwLDIyMzAzLDIy''@;'; put 'put ''OTAwLDI0NTk0LDIwNDk4LDIwODI2LDIwOTA4LDIwOTQxLDIwOTkyLDIxNzc2LDIyNjEyLDIyNjE2LDIyODcxLDIzNDQ1LDIzNzk4LDIzOTQ3LDI0NzY0LDI1MjM3LDI1NjQ1LDI2NDgxLDI2NjkxLDI2ODEyLDI2ODQ3LDMwNDIzLDI4MTIwLDI4MjcxLDI4MDU5LDI4NzgzLDI5MTI4LDI0NDAz''@;'; put 'put ''LDMwMTY4LDMxMDk1LDMxNTYxLDMxNTcyLDMxNTcwLDMxOTU4LDMyMTEzLDIxMDQwLDMzODkxLDM0MTUzLDM0Mjc2LDM1MzQyLDM1NTg4LDM1OTEwLDM2MzY3LDM2ODY3LDM2ODc5LDM3OTEzLDM4NTE4LDM4OTU3LDM5NDcyLDM4MzYwLDIwNjg1LDIxMjA1LDIxNTE2LDIyNTMwLDIzNTY2LDI0''@;'; put 'put ''OTk5LDI1NzU4LDI3OTM0LDMwNjQzLDMxNDYxLDMzMDEyLDMzNzk2LDM2OTQ3LDM3NTA5LDIzNzc2LDQwMTk5LDIxMzExLDI0NDcxLDI0NDk5LDI4MDYwLDI5MzA1LDMwNTYzLDMxMTY3LDMxNzE2LDI3NjAyLDI5NDIwLDM1NTAxLDI2NjI3LDI3MjMzLDIwOTg0LDMxMzYxLDI2OTMyLDIzNjI2''@;'; put 'put ''LDQwMTgyLDMzNTE1LDIzNDkzLDM3MTkzLDI4NzAyLDIyMTM2LDIzNjYzLDI0Nzc1LDI1OTU4LDI3Nzg4LDM1OTMwLDM2OTI5LDM4OTMxLDIxNTg1LDI2MzExLDM3Mzg5LDIyODU2LDM3MDI3LDIwODY5LDIwMDQ1LDIwOTcwLDM0MjAxLDM1NTk4LDI4NzYwLDI1NDY2LDM3NzA3LDI2OTc4LDM5''@;'; put 'put ''MzQ4LDMyMjYwLDMwMDcxLDIxMzM1LDI2OTc2LDM2NTc1LDM4NjI3LDI3NzQxLDIwMTA4LDIzNjEyLDI0MzM2LDM2ODQxLDIxMjUwLDM2MDQ5LDMyOTA1LDM0NDI1LDI0MzE5LDI2MDg1LDIwMDgzLDIwODM3LDIyOTE0LDIzNjE1LDM4ODk0LDIwMjE5LDIyOTIyLDI0NTI1LDM1NDY5LDI4NjQx''@;'; put 'put ''LDMxMTUyLDMxMDc0LDIzNTI3LDMzOTA1LDI5NDgzLDI5MTA1LDI0MTgwLDI0NTY1LDI1NDY3LDI1NzU0LDI5MTIzLDMxODk2LDIwMDM1LDI0MzE2LDIwMDQzLDIyNDkyLDIyMTc4LDI0NzQ1LDI4NjExLDMyMDEzLDMzMDIxLDMzMDc1LDMzMjE1LDM2Nzg2LDM1MjIzLDM0NDY4LDI0MDUyLDI1''@;'; put 'put ''MjI2LDI1NzczLDM1MjA3LDI2NDg3LDI3ODc0LDI3OTY2LDI5NzUwLDMwNzcyLDIzMTEwLDMyNjI5LDMzNDUzLDM5MzQwLDIwNDY3LDI0MjU5LDI1MzA5LDI1NDkwLDI1OTQzLDI2NDc5LDMwNDAzLDI5MjYwLDMyOTcyLDMyOTU0LDM2NjQ5LDM3MTk3LDIwNDkzLDIyNTIxLDIzMTg2LDI2NzU3''@;'; put 'put ''LDI2OTk1LDI5MDI4LDI5NDM3LDM2MDIzLDIyNzcwLDM2MDY0LDM4NTA2LDM2ODg5LDM0Njg3LDMxMjA0LDMwNjk1LDMzODMzLDIwMjcxLDIxMDkzLDIxMzM4LDI1MjkzLDI2NTc1LDI3ODUwLDMwMzMzLDMxNjM2LDMxODkzLDMzMzM0LDM0MTgwLDM2ODQzLDI2MzMzLDI4NDQ4LDI5MTkwLDMy''@;'; put 'put ''MjgzLDMzNzA3LDM5MzYxLDQwNjE0LDIwOTg5LDMxNjY1LDMwODM0LDMxNjcyLDMyOTAzLDMxNTYwLDI3MzY4LDI0MTYxLDMyOTA4LDMwMDMzLDMwMDQ4LDIwODQzLDM3NDc0LDI4MzAwLDMwMzMwLDM3MjcxLDM5NjU4LDIwMjQwLDMyNjI0LDI1MjQ0LDMxNTY3LDM4MzA5LDQwMTY5LDIyMTM4''@;'; put 'put ''LDIyNjE3LDM0NTMyLDM4NTg4LDIwMjc2LDIxMDI4LDIxMzIyLDIxNDUzLDIxNDY3LDI0MDcwLDI1NjQ0LDI2MDAxLDI2NDk1LDI3NzEwLDI3NzI2LDI5MjU2LDI5MzU5LDI5Njc3LDMwMDM2LDMyMzIxLDMzMzI0LDM0MjgxLDM2MDA5LDMxNjg0LDM3MzE4LDI5MDMzLDM4OTMwLDM5MTUxLDI1''@;'; put 'put ''NDA1LDI2MjE3LDMwMDU4LDMwNDM2LDMwOTI4LDM0MTE1LDM0NTQyLDIxMjkwLDIxMzI5LDIxNTQyLDIyOTE1LDI0MTk5LDI0NDQ0LDI0NzU0LDI1MTYxLDI1MjA5LDI1MjU5LDI2ZTMsMjc2MDQsMjc4NTIsMzAxMzAsMzAzODIsMzA4NjUsMzExOTIsMzIyMDMsMzI2MzEsMzI5MzMsMzQ5ODcs''@;'; put 'put ''MzU1MTMsMzYwMjcsMzY5OTEsMzg3NTAsMzkxMzEsMjcxNDcsMzE4MDAsMjA2MzMsMjM2MTQsMjQ0OTQsMjY1MDMsMjc2MDgsMjk3NDksMzA0NzMsMzI2NTQsNDA3NjMsMjY1NzAsMzEyNTUsMjEzMDUsMzAwOTEsMzk2NjEsMjQ0MjIsMzMxODEsMzM3NzcsMzI5MjAsMjQzODAsMjQ1MTcsMzAw''@;'; put 'put ''NTAsMzE1NTgsMzY5MjQsMjY3MjcsMjMwMTksMjMxOTUsMzIwMTYsMzAzMzQsMzU2MjgsMjA0NjksMjQ0MjYsMjcxNjEsMjc3MDMsMjg0MTgsMjk5MjIsMzEwODAsMzQ5MjAsMzU0MTMsMzU5NjEsMjQyODcsMjU1NTEsMzAxNDksMzExODYsMzM0OTUsMzc2NzIsMzc2MTgsMzM5NDgsMzQ1NDEs''@;'; put 'put ''Mzk5ODEsMjE2OTcsMjQ0MjgsMjU5OTYsMjc5OTYsMjg2OTMsMzYwMDcsMzYwNTEsMzg5NzEsMjU5MzUsMjk5NDIsMTk5ODEsMjAxODQsMjI0OTYsMjI4MjcsMjMxNDIsMjM1MDAsMjA5MDQsMjQwNjcsMjQyMjAsMjQ1OTgsMjUyMDYsMjU5NzUsMjYwMjMsMjYyMjIsMjgwMTQsMjkyMzgsMzE1''@;'; put 'put ''MjYsMzMxMDQsMzMxNzgsMzM0MzMsMzU2NzYsMzZlMywzNjA3MCwzNjIxMiwzODQyOCwzODQ2OCwyMDM5OCwyNTc3MSwyNzQ5NCwzMzMxMCwzMzg4OSwzNDE1NCwzNzA5NiwyMzU1MywyNjk2MywzOTA4MCwzMzkxNCwzNDEzNSwyMDIzOSwyMTEwMywyNDQ4OSwyNDEzMywyNjM4MSwzMTExOSwz''@;'; put 'put ''MzE0NSwzNTA3OSwzNTIwNiwyODE0OSwyNDM0MywyNTE3MywyNzgzMiwyMDE3NSwyOTI4OSwzOTgyNiwyMDk5OCwyMTU2MywyMjEzMiwyMjcwNywyNDk5NiwyNTE5OCwyODk1NCwyMjg5NCwzMTg4MSwzMTk2NiwzMjAyNywzODY0MCwyNTk5MSwzMjg2MiwxOTk5MywyMDM0MSwyMDg1MywyMjU5''@;'; put 'put ''MiwyNDE2MywyNDE3OSwyNDMzMCwyNjU2NCwyMDAwNiwzNDEwOSwzODI4MSwzODQ5MSwzMTg1OSwzODkxMywyMDczMSwyMjcyMSwzMDI5NCwzMDg4NywyMTAyOSwzMDYyOSwzNDA2NSwzMTYyMiwyMDU1OSwyMjc5MywyOTI1NSwzMTY4NywzMjIzMiwzNjc5NCwzNjgyMCwzNjk0MSwyMDQxNSwy''@;'; put 'put ''MTE5MywyMzA4MSwyNDMyMSwzODgyOSwyMDQ0NSwzMzMwMywzNzYxMCwyMjI3NSwyNTQyOSwyNzQ5NywyOTk5NSwzNTAzNiwzNjYyOCwzMTI5OCwyMTIxNSwyMjY3NSwyNDkxNywyNTA5OCwyNjI4NiwyNzU5NywzMTgwNywzMzc2OSwyMDUxNSwyMDQ3MiwyMTI1MywyMTU3NCwyMjU3NywyMjg1''@;'; put 'put ''NywyMzQ1MywyMzc5MiwyMzc5MSwyMzg0OSwyNDIxNCwyNTI2NSwyNTQ0NywyNTkxOCwyNjA0MSwyNjM3OSwyNzg2MSwyNzg3MywyODkyMSwzMDc3MCwzMjI5OSwzMjk5MCwzMzQ1OSwzMzgwNCwzNDAyOCwzNDU2MiwzNTA5MCwzNTM3MCwzNTkxNCwzNzAzMCwzNzU4NiwzOTE2NSw0MDE3OSw0''@;'; put 'put ''MDMwMCwyMDA0NywyMDEyOSwyMDYyMSwyMTA3OCwyMjM0NiwyMjk1MiwyNDEyNSwyNDUzNiwyNDUzNywyNTE1MSwyNjI5MiwyNjM5NSwyNjU3NiwyNjgzNCwyMDg4MiwzMjAzMywzMjkzOCwzMzE5MiwzNTU4NCwzNTk4MCwzNjAzMSwzNzUwMiwzODQ1MCwyMTUzNiwzODk1NiwyMTI3MSwyMDY5''@;'; put 'put ''MywyMTM0MCwyMjY5NiwyNTc3OCwyNjQyMCwyOTI4NywzMDU2NiwzMTMwMiwzNzM1MCwyMTE4NywyNzgwOSwyNzUyNiwyMjUyOCwyNDE0MCwyMjg2OCwyNjQxMiwzMjc2MywyMDk2MSwzMDQwNiwyNTcwNSwzMDk1MiwzOTc2NCw0MDYzNSwyMjQ3NSwyMjk2OSwyNjE1MSwyNjUyMiwyNzU5OCwy''@;'; put 'put ''MTczNywyNzA5NywyNDE0OSwzMzE4MCwyNjUxNywzOTg1MCwyNjYyMiw0MDAxOCwyNjcxNywyMDEzNCwyMDQ1MSwyMTQ0OCwyNTI3MywyNjQxMSwyNzgxOSwzNjgwNCwyMDM5NywzMjM2NSw0MDYzOSwxOTk3NSwyNDkzMCwyODI4OCwyODQ1OSwzNDA2NywyMTYxOSwyNjQxMCwzOTc0OSwyNDA1''@;'; put 'put ''MSwzMTYzNywyMzcyNCwyMzQ5NCwzNDU4OCwyODIzNCwzNDAwMSwzMTI1MiwzMzAzMiwyMjkzNywzMTg4NSwyNzY2NSwzMDQ5NiwyMTIwOSwyMjgxOCwyODk2MSwyOTI3OSwzMDY4MywzODY5NSw0MDI4OSwyNjg5MSwyMzE2NywyMzA2NCwyMDkwMSwyMTUxNywyMTYyOSwyNjEyNiwzMDQzMSwz''@;'; put 'put ''Njg1NSwzNzUyOCw0MDE4MCwyMzAxOCwyOTI3NywyODM1NywyMDgxMywyNjgyNSwzMjE5MSwzMjIzNiwzODc1NCw0MDYzNCwyNTcyMCwyNzE2OSwzMzUzOCwyMjkxNiwyMzM5MSwyNzYxMSwyOTQ2NywzMDQ1MCwzMjE3OCwzMjc5MSwzMzk0NSwyMDc4NiwyNjQwOCw0MDY2NSwzMDQ0NiwyNjQ2''@;'; put 'put ''NiwyMTI0NywzOTE3MywyMzU4OCwyNTE0NywzMTg3MCwzNjAxNiwyMTgzOSwyNDc1OCwzMjAxMSwzODI3MiwyMTI0OSwyMDA2MywyMDkxOCwyMjgxMiwyOTI0MiwzMjgyMiwzNzMyNiwyNDM1NywzMDY5MCwyMTM4MCwyNDQ0MSwzMjAwNCwzNDIyMCwzNTM3OSwzNjQ5MywzODc0MiwyNjYxMSwz''@;'; put 'put ''NDIyMiwzNzk3MSwyNDg0MSwyNDg0MCwyNzgzMywzMDI5MCwzNTU2NSwzNjY2NCwyMTgwNywyMDMwNSwyMDc3OCwyMTE5MSwyMTQ1MSwyMzQ2MSwyNDE4OSwyNDczNiwyNDk2MiwyNTU1OCwyNjM3NywyNjU4NiwyODI2MywyODA0NCwyOTQ5NCwyOTQ5NSwzMDAwMSwzMTA1NiwzNTAyOSwzNTQ4''@;'; put 'put ''MCwzNjkzOCwzNzAwOSwzNzEwOSwzODU5NiwzNDcwMSwyMjgwNSwyMDEwNCwyMDMxMywxOTk4MiwzNTQ2NSwzNjY3MSwzODkyOCwyMDY1MywyNDE4OCwyMjkzNCwyMzQ4MSwyNDI0OCwyNTU2MiwyNTU5NCwyNTc5MywyNjMzMiwyNjk1NCwyNzA5NiwyNzkxNSwyODM0MiwyOTA3NiwyOTk5Miwz''@;'; put 'put ''MTQwNywzMjY1MCwzMjc2OCwzMzg2NSwzMzk5MywzNTIwMSwzNTYxNywzNjM2MiwzNjk2NSwzODUyNSwzOTE3OCwyNDk1OCwyNTIzMywyNzQ0MiwyNzc3OSwyODAyMCwzMjcxNiwzMjc2NCwyODA5NiwzMjY0NSwzNDc0NiwzNTA2NCwyNjQ2OSwzMzcxMywzODk3MiwzODY0NywyNzkzMSwzMjA5''@;'; put 'put ''NywzMzg1MywzNzIyNiwyMDA4MSwyMTM2NSwyMzg4OCwyNzM5NiwyODY1MSwzNDI1MywzNDM0OSwzNTIzOSwyMTAzMywyMTUxOSwyMzY1MywyNjQ0NiwyNjc5MiwyOTcwMiwyOTgyNywzMDE3OCwzNTAyMywzNTA0MSwzNzMyNCwzODYyNiwzODUyMCwyNDQ1OSwyOTU3NSwzMTQzNSwzMzg3MCwy''@;'; put 'put ''NTUwNCwzMDA1MywyMTEyOSwyNzk2OSwyODMxNiwyOTcwNSwzMDA0MSwzMDgyNywzMTg5MCwzODUzNCwzMTQ1Miw0MDg0NSwyMDQwNiwyNDk0MiwyNjA1MywzNDM5NiwyMDEwMiwyMDE0MiwyMDY5OCwyMDAwMSwyMDk0MCwyMzUzNCwyNjAwOSwyNjc1MywyODA5MiwyOTQ3MSwzMDI3NCwzMDYz''@;'; put 'put ''NywzMTI2MCwzMTk3NSwzMzM5MSwzNTUzOCwzNjk4OCwzNzMyNywzODUxNywzODkzNiwyMTE0NywzMjIwOSwyMDUyMywyMTQwMCwyNjUxOSwyODEwNywyOTEzNiwyOTc0NywzMzI1NiwzNjY1MCwzODU2Myw0MDAyMyw0MDYwNywyOTc5MiwyMjU5MywyODA1NywzMjA0NywzOTAwNiwyMDE5Niwy''@;'; put 'put ''MDI3OCwyMDM2MywyMDkxOSwyMTE2OSwyMzk5NCwyNDYwNCwyOTYxOCwzMTAzNiwzMzQ5MSwzNzQyOCwzODU4MywzODY0NiwzODY2Niw0MDU5OSw0MDgwMiwyNjI3OCwyNzUwOCwyMTAxNSwyMTE1NSwyODg3MiwzNTAxMCwyNDI2NSwyNDY1MSwyNDk3NiwyODQ1MSwyOTAwMSwzMTgwNiwzMjI0''@;'; put 'put ''NCwzMjg3OSwzNDAzMCwzNjg5OSwzNzY3NiwyMTU3MCwzOTc5MSwyNzM0NywyODgwOSwzNjAzNCwzNjMzNSwzODcwNiwyMTE3MiwyMzEwNSwyNDI2NiwyNDMyNCwyNjM5MSwyNzAwNCwyNzAyOCwyODAxMCwyODQzMSwyOTI4MiwyOTQzNiwzMTcyNSwzMjc2OSwzMjg5NCwzNDYzNSwzNzA3MCwy''@;'; put 'put ''MDg0NSw0MDU5NSwzMTEwOCwzMjkwNywzNzY4MiwzNTU0MiwyMDUyNSwyMTY0NCwzNTQ0MSwyNzQ5OCwzNjAzNiwzMzAzMSwyNDc4NSwyNjUyOCw0MDQzNCwyMDEyMSwyMDEyMCwzOTk1MiwzNTQzNSwzNDI0MSwzNDE1MiwyNjg4MCwyODI4NiwzMDg3MSwzMzEwOSxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDI0MzMyLDE5OTg0LDE5OTg5LDIwMDEwLDIwMDE3LDIwMDIyLDIwMDI4LDIwMDMxLDIwMDM0LDIwMDU0LDIwMDU2LDIwMDk4LDIwMTAxLDM1OTQ3LDIwMTA2LDMzMjk4LDI0MzMzLDIwMTEwLDIwMTI2LDIwMTI3LDIwMTI4LDIwMTMw''@;'; put 'put ''LDIwMTQ0LDIwMTQ3LDIwMTUwLDIwMTc0LDIwMTczLDIwMTY0LDIwMTY2LDIwMTYyLDIwMTgzLDIwMTkwLDIwMjA1LDIwMTkxLDIwMjE1LDIwMjMzLDIwMzE0LDIwMjcyLDIwMzE1LDIwMzE3LDIwMzExLDIwMjk1LDIwMzQyLDIwMzYwLDIwMzY3LDIwMzc2LDIwMzQ3LDIwMzI5LDIwMzM2LDIw''@;'; put 'put ''MzY5LDIwMzM1LDIwMzU4LDIwMzc0LDIwNzYwLDIwNDM2LDIwNDQ3LDIwNDMwLDIwNDQwLDIwNDQzLDIwNDMzLDIwNDQyLDIwNDMyLDIwNDUyLDIwNDUzLDIwNTA2LDIwNTIwLDIwNTAwLDIwNTIyLDIwNTE3LDIwNDg1LDIwMjUyLDIwNDcwLDIwNTEzLDIwNTIxLDIwNTI0LDIwNDc4LDIwNDYz''@;'; put 'put ''LDIwNDk3LDIwNDg2LDIwNTQ3LDIwNTUxLDI2MzcxLDIwNTY1LDIwNTYwLDIwNTUyLDIwNTcwLDIwNTY2LDIwNTg4LDIwNjAwLDIwNjA4LDIwNjM0LDIwNjEzLDIwNjYwLDIwNjU4LDIwNjgxLDIwNjgyLDIwNjU5LDIwNjc0LDIwNjk0LDIwNzAyLDIwNzA5LDIwNzE3LDIwNzA3LDIwNzE4LDIw''@;'; put 'put ''NzI5LDIwNzI1LDIwNzQ1LDIwNzM3LDIwNzM4LDIwNzU4LDIwNzU3LDIwNzU2LDIwNzYyLDIwNzY5LDIwNzk0LDIwNzkxLDIwNzk2LDIwNzk1LDIwNzk5LDIwODAwLDIwODE4LDIwODEyLDIwODIwLDIwODM0LDMxNDgwLDIwODQxLDIwODQyLDIwODQ2LDIwODY0LDIwODY2LDIyMjMyLDIwODc2''@;'; put 'put ''LDIwODczLDIwODc5LDIwODgxLDIwODgzLDIwODg1LDIwODg2LDIwOTAwLDIwOTAyLDIwODk4LDIwOTA1LDIwOTA2LDIwOTA3LDIwOTE1LDIwOTEzLDIwOTE0LDIwOTEyLDIwOTE3LDIwOTI1LDIwOTMzLDIwOTM3LDIwOTU1LDIwOTYwLDM0Mzg5LDIwOTY5LDIwOTczLDIwOTc2LDIwOTgxLDIw''@;'; put 'put ''OTkwLDIwOTk2LDIxMDAzLDIxMDEyLDIxMDA2LDIxMDMxLDIxMDM0LDIxMDM4LDIxMDQzLDIxMDQ5LDIxMDcxLDIxMDYwLDIxMDY3LDIxMDY4LDIxMDg2LDIxMDc2LDIxMDk4LDIxMTA4LDIxMDk3LDIxMTA3LDIxMTE5LDIxMTE3LDIxMTMzLDIxMTQwLDIxMTM4LDIxMTA1LDIxMTI4LDIxMTM3''@;'; put 'put ''LDM2Nzc2LDM2Nzc1LDIxMTY0LDIxMTY1LDIxMTgwLDIxMTczLDIxMTg1LDIxMTk3LDIxMjA3LDIxMjE0LDIxMjE5LDIxMjIyLDM5MTQ5LDIxMjE2LDIxMjM1LDIxMjM3LDIxMjQwLDIxMjQxLDIxMjU0LDIxMjU2LDMwMDA4LDIxMjYxLDIxMjY0LDIxMjYzLDIxMjY5LDIxMjc0LDIxMjgzLDIx''@;'; put 'put ''Mjk1LDIxMjk3LDIxMjk5LDIxMzA0LDIxMzEyLDIxMzE4LDIxMzE3LDE5OTkxLDIxMzIxLDIxMzI1LDIwOTUwLDIxMzQyLDIxMzUzLDIxMzU4LDIyODA4LDIxMzcxLDIxMzY3LDIxMzc4LDIxMzk4LDIxNDA4LDIxNDE0LDIxNDEzLDIxNDIyLDIxNDI0LDIxNDMwLDIxNDQzLDMxNzYyLDM4NjE3''@;'; put 'put ''LDIxNDcxLDI2MzY0LDI5MTY2LDIxNDg2LDIxNDgwLDIxNDg1LDIxNDk4LDIxNTA1LDIxNTY1LDIxNTY4LDIxNTQ4LDIxNTQ5LDIxNTY0LDIxNTUwLDIxNTU4LDIxNTQ1LDIxNTMzLDIxNTgyLDIxNjQ3LDIxNjIxLDIxNjQ2LDIxNTk5LDIxNjE3LDIxNjIzLDIxNjE2LDIxNjUwLDIxNjI3LDIx''@;'; put 'put ''NjMyLDIxNjIyLDIxNjM2LDIxNjQ4LDIxNjM4LDIxNzAzLDIxNjY2LDIxNjg4LDIxNjY5LDIxNjc2LDIxNzAwLDIxNzA0LDIxNjcyLDIxNjc1LDIxNjk4LDIxNjY4LDIxNjk0LDIxNjkyLDIxNzIwLDIxNzMzLDIxNzM0LDIxNzc1LDIxNzgwLDIxNzU3LDIxNzQyLDIxNzQxLDIxNzU0LDIxNzMw''@;'; put 'put ''LDIxODE3LDIxODI0LDIxODU5LDIxODM2LDIxODA2LDIxODUyLDIxODI5LDIxODQ2LDIxODQ3LDIxODE2LDIxODExLDIxODUzLDIxOTEzLDIxODg4LDIxNjc5LDIxODk4LDIxOTE5LDIxODgzLDIxODg2LDIxOTEyLDIxOTE4LDIxOTM0LDIxODg0LDIxODkxLDIxOTI5LDIxODk1LDIxOTI4LDIx''@;'; put 'put ''OTc4LDIxOTU3LDIxOTgzLDIxOTU2LDIxOTgwLDIxOTg4LDIxOTcyLDIyMDM2LDIyMDA3LDIyMDM4LDIyMDE0LDIyMDEzLDIyMDQzLDIyMDA5LDIyMDk0LDIyMDk2LDI5MTUxLDIyMDY4LDIyMDcwLDIyMDY2LDIyMDcyLDIyMTIzLDIyMTE2LDIyMDYzLDIyMTI0LDIyMTIyLDIyMTUwLDIyMTQ0''@;'; put 'put ''LDIyMTU0LDIyMTc2LDIyMTY0LDIyMTU5LDIyMTgxLDIyMTkwLDIyMTk4LDIyMTk2LDIyMjEwLDIyMjA0LDIyMjA5LDIyMjExLDIyMjA4LDIyMjE2LDIyMjIyLDIyMjI1LDIyMjI3LDIyMjMxLDIyMjU0LDIyMjY1LDIyMjcyLDIyMjcxLDIyMjc2LDIyMjgxLDIyMjgwLDIyMjgzLDIyMjg1LDIy''@;'; put 'put ''MjkxLDIyMjk2LDIyMjk0LDIxOTU5LDIyMzAwLDIyMzEwLDIyMzI3LDIyMzI4LDIyMzUwLDIyMzMxLDIyMzM2LDIyMzUxLDIyMzc3LDIyNDY0LDIyNDA4LDIyMzY5LDIyMzk5LDIyNDA5LDIyNDE5LDIyNDMyLDIyNDUxLDIyNDM2LDIyNDQyLDIyNDQ4LDIyNDY3LDIyNDcwLDIyNDg0LDIyNDgy''@;'; put 'put ''LDIyNDgzLDIyNTM4LDIyNDg2LDIyNDk5LDIyNTM5LDIyNTUzLDIyNTU3LDIyNjQyLDIyNTYxLDIyNjI2LDIyNjAzLDIyNjQwLDI3NTg0LDIyNjEwLDIyNTg5LDIyNjQ5LDIyNjYxLDIyNzEzLDIyNjg3LDIyNjk5LDIyNzE0LDIyNzUwLDIyNzE1LDIyNzEyLDIyNzAyLDIyNzI1LDIyNzM5LDIy''@;'; put 'put ''NzM3LDIyNzQzLDIyNzQ1LDIyNzQ0LDIyNzU3LDIyNzQ4LDIyNzU2LDIyNzUxLDIyNzY3LDIyNzc4LDIyNzc3LDIyNzc5LDIyNzgwLDIyNzgxLDIyNzg2LDIyNzk0LDIyODAwLDIyODExLDI2NzkwLDIyODIxLDIyODI4LDIyODI5LDIyODM0LDIyODQwLDIyODQ2LDMxNDQyLDIyODY5LDIyODY0''@;'; put 'put ''LDIyODYyLDIyODc0LDIyODcyLDIyODgyLDIyODgwLDIyODg3LDIyODkyLDIyODg5LDIyOTA0LDIyOTEzLDIyOTQxLDIwMzE4LDIwMzk1LDIyOTQ3LDIyOTYyLDIyOTgyLDIzMDE2LDIzMDA0LDIyOTI1LDIzMDAxLDIzMDAyLDIzMDc3LDIzMDcxLDIzMDU3LDIzMDY4LDIzMDQ5LDIzMDY2LDIz''@;'; put 'put ''MTA0LDIzMTQ4LDIzMTEzLDIzMDkzLDIzMDk0LDIzMTM4LDIzMTQ2LDIzMTk0LDIzMjI4LDIzMjMwLDIzMjQzLDIzMjM0LDIzMjI5LDIzMjY3LDIzMjU1LDIzMjcwLDIzMjczLDIzMjU0LDIzMjkwLDIzMjkxLDIzMzA4LDIzMzA3LDIzMzE4LDIzMzQ2LDIzMjQ4LDIzMzM4LDIzMzUwLDIzMzU4''@;'; put 'put ''LDIzMzYzLDIzMzY1LDIzMzYwLDIzMzc3LDIzMzgxLDIzMzg2LDIzMzg3LDIzMzk3LDIzNDAxLDIzNDA4LDIzNDExLDIzNDEzLDIzNDE2LDI1OTkyLDIzNDE4LDIzNDI0LDIzNDI3LDIzNDYyLDIzNDgwLDIzNDkxLDIzNDk1LDIzNDk3LDIzNTA4LDIzNTA0LDIzNTI0LDIzNTI2LDIzNTIyLDIz''@;'; put 'put ''NTE4LDIzNTI1LDIzNTMxLDIzNTM2LDIzNTQyLDIzNTM5LDIzNTU3LDIzNTU5LDIzNTYwLDIzNTY1LDIzNTcxLDIzNTg0LDIzNTg2LDIzNTkyLDIzNjA4LDIzNjA5LDIzNjE3LDIzNjIyLDIzNjMwLDIzNjM1LDIzNjMyLDIzNjMxLDIzNDA5LDIzNjYwLDIzNjYyLDIwMDY2LDIzNjcwLDIzNjcz''@;'; put 'put ''LDIzNjkyLDIzNjk3LDIzNzAwLDIyOTM5LDIzNzIzLDIzNzM5LDIzNzM0LDIzNzQwLDIzNzM1LDIzNzQ5LDIzNzQyLDIzNzUxLDIzNzY5LDIzNzg1LDIzODA1LDIzODAyLDIzNzg5LDIzOTQ4LDIzNzg2LDIzODE5LDIzODI5LDIzODMxLDIzOTAwLDIzODM5LDIzODM1LDIzODI1LDIzODI4LDIz''@;'; put 'put ''ODQyLDIzODM0LDIzODMzLDIzODMyLDIzODg0LDIzODkwLDIzODg2LDIzODgzLDIzOTE2LDIzOTIzLDIzOTI2LDIzOTQzLDIzOTQwLDIzOTM4LDIzOTcwLDIzOTY1LDIzOTgwLDIzOTgyLDIzOTk3LDIzOTUyLDIzOTkxLDIzOTk2LDI0MDA5LDI0MDEzLDI0MDE5LDI0MDE4LDI0MDIyLDI0MDI3''@;'; put 'put ''LDI0MDQzLDI0MDUwLDI0MDUzLDI0MDc1LDI0MDkwLDI0MDg5LDI0MDgxLDI0MDkxLDI0MTE4LDI0MTE5LDI0MTMyLDI0MTMxLDI0MTI4LDI0MTQyLDI0MTUxLDI0MTQ4LDI0MTU5LDI0MTYyLDI0MTY0LDI0MTM1LDI0MTgxLDI0MTgyLDI0MTg2LDQwNjM2LDI0MTkxLDI0MjI0LDI0MjU3LDI0''@;'; put 'put ''MjU4LDI0MjY0LDI0MjcyLDI0MjcxLDI0Mjc4LDI0MjkxLDI0Mjg1LDI0MjgyLDI0MjgzLDI0MjkwLDI0Mjg5LDI0Mjk2LDI0Mjk3LDI0MzAwLDI0MzA1LDI0MzA3LDI0MzA0LDI0MzA4LDI0MzEyLDI0MzE4LDI0MzIzLDI0MzI5LDI0NDEzLDI0NDEyLDI0MzMxLDI0MzM3LDI0MzQyLDI0MzYx''@;'; put 'put ''LDI0MzY1LDI0Mzc2LDI0Mzg1LDI0MzkyLDI0Mzk2LDI0Mzk4LDI0MzY3LDI0NDAxLDI0NDA2LDI0NDA3LDI0NDA5LDI0NDE3LDI0NDI5LDI0NDM1LDI0NDM5LDI0NDUxLDI0NDUwLDI0NDQ3LDI0NDU4LDI0NDU2LDI0NDY1LDI0NDU1LDI0NDc4LDI0NDczLDI0NDcyLDI0NDgwLDI0NDg4LDI0''@;'; put 'put ''NDkzLDI0NTA4LDI0NTM0LDI0NTcxLDI0NTQ4LDI0NTY4LDI0NTYxLDI0NTQxLDI0NzU1LDI0NTc1LDI0NjA5LDI0NjcyLDI0NjAxLDI0NTkyLDI0NjE3LDI0NTkwLDI0NjI1LDI0NjAzLDI0NTk3LDI0NjE5LDI0NjE0LDI0NTkxLDI0NjM0LDI0NjY2LDI0NjQxLDI0NjgyLDI0Njk1LDI0Njcx''@;'; put 'put ''LDI0NjUwLDI0NjQ2LDI0NjUzLDI0Njc1LDI0NjQzLDI0Njc2LDI0NjQyLDI0Njg0LDI0NjgzLDI0NjY1LDI0NzA1LDI0NzE3LDI0ODA3LDI0NzA3LDI0NzMwLDI0NzA4LDI0NzMxLDI0NzI2LDI0NzI3LDI0NzIyLDI0NzQzLDI0NzE1LDI0ODAxLDI0NzYwLDI0ODAwLDI0Nzg3LDI0NzU2LDI0''@;'; put 'put ''NTYwLDI0NzY1LDI0Nzc0LDI0NzU3LDI0NzkyLDI0OTA5LDI0ODUzLDI0ODM4LDI0ODIyLDI0ODIzLDI0ODMyLDI0ODIwLDI0ODI2LDI0ODM1LDI0ODY1LDI0ODI3LDI0ODE3LDI0ODQ1LDI0ODQ2LDI0OTAzLDI0ODk0LDI0ODcyLDI0ODcxLDI0OTA2LDI0ODk1LDI0ODkyLDI0ODc2LDI0ODg0''@;'; put 'put ''LDI0ODkzLDI0ODk4LDI0OTAwLDI0OTQ3LDI0OTUxLDI0OTIwLDI0OTIxLDI0OTIyLDI0OTM5LDI0OTQ4LDI0OTQzLDI0OTMzLDI0OTQ1LDI0OTI3LDI0OTI1LDI0OTE1LDI0OTQ5LDI0OTg1LDI0OTgyLDI0OTY3LDI1MDA0LDI0OTgwLDI0OTg2LDI0OTcwLDI0OTc3LDI1MDAzLDI1MDA2LDI1''@;'; put 'put ''MDM2LDI1MDM0LDI1MDMzLDI1MDc5LDI1MDMyLDI1MDI3LDI1MDMwLDI1MDE4LDI1MDM1LDMyNjMzLDI1MDM3LDI1MDYyLDI1MDU5LDI1MDc4LDI1MDgyLDI1MDc2LDI1MDg3LDI1MDg1LDI1MDg0LDI1MDg2LDI1MDg4LDI1MDk2LDI1MDk3LDI1MTAxLDI1MTAwLDI1MTA4LDI1MTE1LDI1MTE4''@;'; put 'put ''LDI1MTIxLDI1MTMwLDI1MTM0LDI1MTM2LDI1MTM4LDI1MTM5LDI1MTUzLDI1MTY2LDI1MTgyLDI1MTg3LDI1MTc5LDI1MTg0LDI1MTkyLDI1MjEyLDI1MjE4LDI1MjI1LDI1MjE0LDI1MjM0LDI1MjM1LDI1MjM4LDI1MzAwLDI1MjE5LDI1MjM2LDI1MzAzLDI1Mjk3LDI1Mjc1LDI1Mjk1LDI1''@;'; put 'put ''MzQzLDI1Mjg2LDI1ODEyLDI1Mjg4LDI1MzA4LDI1MjkyLDI1MjkwLDI1MjgyLDI1Mjg3LDI1MjQzLDI1Mjg5LDI1MzU2LDI1MzI2LDI1MzI5LDI1MzgzLDI1MzQ2LDI1MzUyLDI1MzI3LDI1MzMzLDI1NDI0LDI1NDA2LDI1NDIxLDI1NjI4LDI1NDIzLDI1NDk0LDI1NDg2LDI1NDcyLDI1NTE1''@;'; put 'put ''LDI1NDYyLDI1NTA3LDI1NDg3LDI1NDgxLDI1NTAzLDI1NTI1LDI1NDUxLDI1NDQ5LDI1NTM0LDI1NTc3LDI1NTM2LDI1NTQyLDI1NTcxLDI1NTQ1LDI1NTU0LDI1NTkwLDI1NTQwLDI1NjIyLDI1NjUyLDI1NjA2LDI1NjE5LDI1NjM4LDI1NjU0LDI1ODg1LDI1NjIzLDI1NjQwLDI1NjE1LDI1''@;'; put 'put ''NzAzLDI1NzExLDI1NzE4LDI1Njc4LDI1ODk4LDI1NzQ5LDI1NzQ3LDI1NzY1LDI1NzY5LDI1NzM2LDI1Nzg4LDI1ODE4LDI1ODEwLDI1Nzk3LDI1Nzk5LDI1Nzg3LDI1ODE2LDI1Nzk0LDI1ODQxLDI1ODMxLDMzMjg5LDI1ODI0LDI1ODI1LDI1MjYwLDI1ODI3LDI1ODM5LDI1OTAwLDI1ODQ2''@;'; put 'put ''LDI1ODQ0LDI1ODQyLDI1ODUwLDI1ODU2LDI1ODUzLDI1ODgwLDI1ODg0LDI1ODYxLDI1ODkyLDI1ODkxLDI1ODk5LDI1OTA4LDI1OTA5LDI1OTExLDI1OTEwLDI1OTEyLDMwMDI3LDI1OTI4LDI1OTQyLDI1OTQxLDI1OTMzLDI1OTQ0LDI1OTUwLDI1OTQ5LDI1OTcwLDI1OTc2LDI1OTg2LDI1''@;'; put 'put ''OTg3LDM1NzIyLDI2MDExLDI2MDE1LDI2MDI3LDI2MDM5LDI2MDUxLDI2MDU0LDI2MDQ5LDI2MDUyLDI2MDYwLDI2MDY2LDI2MDc1LDI2MDczLDI2MDgwLDI2MDgxLDI2MDk3LDI2NDgyLDI2MTIyLDI2MTE1LDI2MTA3LDI2NDgzLDI2MTY1LDI2MTY2LDI2MTY0LDI2MTQwLDI2MTkxLDI2MTgw''@;'; put 'put ''LDI2MTg1LDI2MTc3LDI2MjA2LDI2MjA1LDI2MjEyLDI2MjE1LDI2MjE2LDI2MjA3LDI2MjEwLDI2MjI0LDI2MjQzLDI2MjQ4LDI2MjU0LDI2MjQ5LDI2MjQ0LDI2MjY0LDI2MjY5LDI2MzA1LDI2Mjk3LDI2MzEzLDI2MzAyLDI2MzAwLDI2MzA4LDI2Mjk2LDI2MzI2LDI2MzMwLDI2MzM2LDI2''@;'; put 'put ''MTc1LDI2MzQyLDI2MzQ1LDI2MzUyLDI2MzU3LDI2MzU5LDI2MzgzLDI2MzkwLDI2Mzk4LDI2NDA2LDI2NDA3LDM4NzEyLDI2NDE0LDI2NDMxLDI2NDIyLDI2NDMzLDI2NDI0LDI2NDIzLDI2NDM4LDI2NDYyLDI2NDY0LDI2NDU3LDI2NDY3LDI2NDY4LDI2NTA1LDI2NDgwLDI2NTM3LDI2NDky''@;'; put 'put ''LDI2NDc0LDI2NTA4LDI2NTA3LDI2NTM0LDI2NTI5LDI2NTAxLDI2NTUxLDI2NjA3LDI2NTQ4LDI2NjA0LDI2NTQ3LDI2NjAxLDI2NTUyLDI2NTk2LDI2NTkwLDI2NTg5LDI2NTk0LDI2NjA2LDI2NTUzLDI2NTc0LDI2NTY2LDI2NTk5LDI3MjkyLDI2NjU0LDI2Njk0LDI2NjY1LDI2Njg4LDI2''@;'; put 'put ''NzAxLDI2Njc0LDI2NzAyLDI2ODAzLDI2NjY3LDI2NzEzLDI2NzIzLDI2NzQzLDI2NzUxLDI2NzgzLDI2NzY3LDI2Nzk3LDI2NzcyLDI2NzgxLDI2Nzc5LDI2NzU1LDI3MzEwLDI2ODA5LDI2NzQwLDI2ODA1LDI2Nzg0LDI2ODEwLDI2ODk1LDI2NzY1LDI2NzUwLDI2ODgxLDI2ODI2LDI2ODg4''@;'; put 'put ''LDI2ODQwLDI2OTE0LDI2OTE4LDI2ODQ5LDI2ODkyLDI2ODI5LDI2ODM2LDI2ODU1LDI2ODM3LDI2OTM0LDI2ODk4LDI2ODg0LDI2ODM5LDI2ODUxLDI2OTE3LDI2ODczLDI2ODQ4LDI2ODYzLDI2OTIwLDI2OTIyLDI2OTA2LDI2OTE1LDI2OTEzLDI2ODIyLDI3MDAxLDI2OTk5LDI2OTcyLDI3''@;'; put 'put ''ZTMsMjY5ODcsMjY5NjQsMjcwMDYsMjY5OTAsMjY5MzcsMjY5OTYsMjY5NDEsMjY5NjksMjY5MjgsMjY5NzcsMjY5NzQsMjY5NzMsMjcwMDksMjY5ODYsMjcwNTgsMjcwNTQsMjcwODgsMjcwNzEsMjcwNzMsMjcwOTEsMjcwNzAsMjcwODYsMjM1MjgsMjcwODIsMjcxMDEsMjcwNjcsMjcwNzUs''@;'; put 'put ''MjcwNDcsMjcxODIsMjcwMjUsMjcwNDAsMjcwMzYsMjcwMjksMjcwNjAsMjcxMDIsMjcxMTIsMjcxMzgsMjcxNjMsMjcxMzUsMjc0MDIsMjcxMjksMjcxMjIsMjcxMTEsMjcxNDEsMjcwNTcsMjcxNjYsMjcxMTcsMjcxNTYsMjcxMTUsMjcxNDYsMjcxNTQsMjczMjksMjcxNzEsMjcxNTUsMjcy''@;'; put 'put ''MDQsMjcxNDgsMjcyNTAsMjcxOTAsMjcyNTYsMjcyMDcsMjcyMzQsMjcyMjUsMjcyMzgsMjcyMDgsMjcxOTIsMjcxNzAsMjcyODAsMjcyNzcsMjcyOTYsMjcyNjgsMjcyOTgsMjcyOTksMjcyODcsMzQzMjcsMjczMjMsMjczMzEsMjczMzAsMjczMjAsMjczMTUsMjczMDgsMjczNTgsMjczNDUs''@;'; put 'put ''MjczNTksMjczMDYsMjczNTQsMjczNzAsMjczODcsMjczOTcsMzQzMjYsMjczODYsMjc0MTAsMjc0MTQsMzk3MjksMjc0MjMsMjc0NDgsMjc0NDcsMzA0MjgsMjc0NDksMzkxNTAsMjc0NjMsMjc0NTksMjc0NjUsMjc0NzIsMjc0ODEsMjc0NzYsMjc0ODMsMjc0ODcsMjc0ODksMjc1MTIsMjc1''@;'; put 'put ''MTMsMjc1MTksMjc1MjAsMjc1MjQsMjc1MjMsMjc1MzMsMjc1NDQsMjc1NDEsMjc1NTAsMjc1NTYsMjc1NjIsMjc1NjMsMjc1NjcsMjc1NzAsMjc1NjksMjc1NzEsMjc1NzUsMjc1ODAsMjc1OTAsMjc1OTUsMjc2MDMsMjc2MTUsMjc2MjgsMjc2MjcsMjc2MzUsMjc2MzEsNDA2MzgsMjc2NTYs''@;'; put 'put ''Mjc2NjcsMjc2NjgsMjc2NzUsMjc2ODQsMjc2ODMsMjc3NDIsMjc3MzMsMjc3NDYsMjc3NTQsMjc3NzgsMjc3ODksMjc4MDIsMjc3NzcsMjc4MDMsMjc3NzQsMjc3NTIsMjc3NjMsMjc3OTQsMjc3OTIsMjc4NDQsMjc4ODksMjc4NTksMjc4MzcsMjc4NjMsMjc4NDUsMjc4NjksMjc4MjIsMjc4''@;'; put 'put ''MjUsMjc4MzgsMjc4MzQsMjc4NjcsMjc4ODcsMjc4NjUsMjc4ODIsMjc5MzUsMzQ4OTMsMjc5NTgsMjc5NDcsMjc5NjUsMjc5NjAsMjc5MjksMjc5NTcsMjc5NTUsMjc5MjIsMjc5MTYsMjgwMDMsMjgwNTEsMjgwMDQsMjc5OTQsMjgwMjUsMjc5OTMsMjgwNDYsMjgwNTMsMjg2NDQsMjgwMzcs''@;'; put 'put ''MjgxNTMsMjgxODEsMjgxNzAsMjgwODUsMjgxMDMsMjgxMzQsMjgwODgsMjgxMDIsMjgxNDAsMjgxMjYsMjgxMDgsMjgxMzYsMjgxMTQsMjgxMDEsMjgxNTQsMjgxMjEsMjgxMzIsMjgxMTcsMjgxMzgsMjgxNDIsMjgyMDUsMjgyNzAsMjgyMDYsMjgxODUsMjgyNzQsMjgyNTUsMjgyMjIsMjgx''@;'; put 'put ''OTUsMjgyNjcsMjgyMDMsMjgyNzgsMjgyMzcsMjgxOTEsMjgyMjcsMjgyMTgsMjgyMzgsMjgxOTYsMjg0MTUsMjgxODksMjgyMTYsMjgyOTAsMjgzMzAsMjgzMTIsMjgzNjEsMjgzNDMsMjgzNzEsMjgzNDksMjgzMzUsMjgzNTYsMjgzMzgsMjgzNzIsMjgzNzMsMjgzMDMsMjgzMjUsMjgzNTQs''@;'; put 'put ''MjgzMTksMjg0ODEsMjg0MzMsMjg3NDgsMjgzOTYsMjg0MDgsMjg0MTQsMjg0NzksMjg0MDIsMjg0NjUsMjgzOTksMjg0NjYsMjgzNjQsMjg0NzgsMjg0MzUsMjg0MDcsMjg1NTAsMjg1MzgsMjg1MzYsMjg1NDUsMjg1NDQsMjg1MjcsMjg1MDcsMjg2NTksMjg1MjUsMjg1NDYsMjg1NDAsMjg1''@;'; put 'put ''MDQsMjg1NTgsMjg1NjEsMjg2MTAsMjg1MTgsMjg1OTUsMjg1NzksMjg1NzcsMjg1ODAsMjg2MDEsMjg2MTQsMjg1ODYsMjg2MzksMjg2MjksMjg2NTIsMjg2MjgsMjg2MzIsMjg2NTcsMjg2NTQsMjg2MzUsMjg2ODEsMjg2ODMsMjg2NjYsMjg2ODksMjg2NzMsMjg2ODcsMjg2NzAsMjg2OTks''@;'; put 'put ''Mjg2OTgsMjg1MzIsMjg3MDEsMjg2OTYsMjg3MDMsMjg3MjAsMjg3MzQsMjg3MjIsMjg3NTMsMjg3NzEsMjg4MjUsMjg4MTgsMjg4NDcsMjg5MTMsMjg4NDQsMjg4NTYsMjg4NTEsMjg4NDYsMjg4OTUsMjg4NzUsMjg4OTMsMjg4ODksMjg5MzcsMjg5MjUsMjg5NTYsMjg5NTMsMjkwMjksMjkw''@;'; put 'put ''MTMsMjkwNjQsMjkwMzAsMjkwMjYsMjkwMDQsMjkwMTQsMjkwMzYsMjkwNzEsMjkxNzksMjkwNjAsMjkwNzcsMjkwOTYsMjkxMDAsMjkxNDMsMjkxMTMsMjkxMTgsMjkxMzgsMjkxMjksMjkxNDAsMjkxMzQsMjkxNTIsMjkxNjQsMjkxNTksMjkxNzMsMjkxODAsMjkxNzcsMjkxODMsMjkxOTcs''@;'; put 'put ''MjkyMDAsMjkyMTEsMjkyMjQsMjkyMjksMjkyMjgsMjkyMzIsMjkyMzQsMjkyNDMsMjkyNDQsMjkyNDcsMjkyNDgsMjkyNTQsMjkyNTksMjkyNzIsMjkzMDAsMjkzMTAsMjkzMTQsMjkzMTMsMjkzMTksMjkzMzAsMjkzMzQsMjkzNDYsMjkzNTEsMjkzNjksMjkzNjIsMjkzNzksMjkzODIsMjkz''@;'; put 'put ''ODAsMjkzOTAsMjkzOTQsMjk0MTAsMjk0MDgsMjk0MDksMjk0MzMsMjk0MzEsMjA0OTUsMjk0NjMsMjk0NTAsMjk0NjgsMjk0NjIsMjk0NjksMjk0OTIsMjk0ODcsMjk0ODEsMjk0NzcsMjk1MDIsMjk1MTgsMjk1MTksNDA2NjQsMjk1MjcsMjk1NDYsMjk1NDQsMjk1NTIsMjk1NjAsMjk1NTcs''@;'; put 'put ''Mjk1NjMsMjk1NjIsMjk2NDAsMjk2MTksMjk2NDYsMjk2MjcsMjk2MzIsMjk2NjksMjk2NzgsMjk2NjIsMjk4NTgsMjk3MDEsMjk4MDcsMjk3MzMsMjk2ODgsMjk3NDYsMjk3NTQsMjk3ODEsMjk3NTksMjk3OTEsMjk3ODUsMjk3NjEsMjk3ODgsMjk4MDEsMjk4MDgsMjk3OTUsMjk4MDIsMjk4''@;'; put 'put ''MTQsMjk4MjIsMjk4MzUsMjk4NTQsMjk4NjMsMjk4OTgsMjk5MDMsMjk5MDgsMjk2ODEsMjk5MjAsMjk5MjMsMjk5MjcsMjk5MjksMjk5MzQsMjk5MzgsMjk5MzYsMjk5MzcsMjk5NDQsMjk5NDMsMjk5NTYsMjk5NTUsMjk5NTcsMjk5NjQsMjk5NjYsMjk5NjUsMjk5NzMsMjk5NzEsMjk5ODIs''@;'; put 'put ''Mjk5OTAsMjk5OTYsMzAwMTIsMzAwMjAsMzAwMjksMzAwMjYsMzAwMjUsMzAwNDMsMzAwMjIsMzAwNDIsMzAwNTcsMzAwNTIsMzAwNTUsMzAwNTksMzAwNjEsMzAwNzIsMzAwNzAsMzAwODYsMzAwODcsMzAwNjgsMzAwOTAsMzAwODksMzAwODIsMzAxMDAsMzAxMDYsMzAxMDksMzAxMTcsMzAx''@;'; put 'put ''MTUsMzAxNDYsMzAxMzEsMzAxNDcsMzAxMzMsMzAxNDEsMzAxMzYsMzAxNDAsMzAxMjksMzAxNTcsMzAxNTQsMzAxNjIsMzAxNjksMzAxNzksMzAxNzQsMzAyMDYsMzAyMDcsMzAyMDQsMzAyMDksMzAxOTIsMzAyMDIsMzAxOTQsMzAxOTUsMzAyMTksMzAyMjEsMzAyMTcsMzAyMzksMzAyNDcs''@;'; put 'put ''MzAyNDAsMzAyNDEsMzAyNDIsMzAyNDQsMzAyNjAsMzAyNTYsMzAyNjcsMzAyNzksMzAyODAsMzAyNzgsMzAzMDAsMzAyOTYsMzAzMDUsMzAzMDYsMzAzMTIsMzAzMTMsMzAzMTQsMzAzMTEsMzAzMTYsMzAzMjAsMzAzMjIsMzAzMjYsMzAzMjgsMzAzMzIsMzAzMzYsMzAzMzksMzAzNDQsMzAz''@;'; put 'put ''NDcsMzAzNTAsMzAzNTgsMzAzNTUsMzAzNjEsMzAzNjIsMzAzODQsMzAzODgsMzAzOTIsMzAzOTMsMzAzOTQsMzA0MDIsMzA0MTMsMzA0MjIsMzA0MTgsMzA0MzAsMzA0MzMsMzA0MzcsMzA0MzksMzA0NDIsMzQzNTEsMzA0NTksMzA0NzIsMzA0NzEsMzA0NjgsMzA1MDUsMzA1MDAsMzA0OTQs''@;'; put 'put ''MzA1MDEsMzA1MDIsMzA0OTEsMzA1MTksMzA1MjAsMzA1MzUsMzA1NTQsMzA1NjgsMzA1NzEsMzA1NTUsMzA1NjUsMzA1OTEsMzA1OTAsMzA1ODUsMzA2MDYsMzA2MDMsMzA2MDksMzA2MjQsMzA2MjIsMzA2NDAsMzA2NDYsMzA2NDksMzA2NTUsMzA2NTIsMzA2NTMsMzA2NTEsMzA2NjMsMzA2''@;'; put 'put ''NjksMzA2NzksMzA2ODIsMzA2ODQsMzA2OTEsMzA3MDIsMzA3MTYsMzA3MzIsMzA3MzgsMzEwMTQsMzA3NTIsMzEwMTgsMzA3ODksMzA4NjIsMzA4MzYsMzA4NTQsMzA4NDQsMzA4NzQsMzA4NjAsMzA4ODMsMzA5MDEsMzA4OTAsMzA4OTUsMzA5MjksMzA5MTgsMzA5MjMsMzA5MzIsMzA5MTAs''@;'; put 'put ''MzA5MDgsMzA5MTcsMzA5MjIsMzA5NTYsMzA5NTEsMzA5MzgsMzA5NzMsMzA5NjQsMzA5ODMsMzA5OTQsMzA5OTMsMzEwMDEsMzEwMjAsMzEwMTksMzEwNDAsMzEwNzIsMzEwNjMsMzEwNzEsMzEwNjYsMzEwNjEsMzEwNTksMzEwOTgsMzExMDMsMzExMTQsMzExMzMsMzExNDMsNDA3NzksMzEx''@;'; put 'put ''NDYsMzExNTAsMzExNTUsMzExNjEsMzExNjIsMzExNzcsMzExODksMzEyMDcsMzEyMTIsMzEyMDEsMzEyMDMsMzEyNDAsMzEyNDUsMzEyNTYsMzEyNTcsMzEyNjQsMzEyNjMsMzExMDQsMzEyODEsMzEyOTEsMzEyOTQsMzEyODcsMzEyOTksMzEzMTksMzEzMDUsMzEzMjksMzEzMzAsMzEzMzcs''@;'; put 'put ''NDA4NjEsMzEzNDQsMzEzNTMsMzEzNTcsMzEzNjgsMzEzODMsMzEzODEsMzEzODQsMzEzODIsMzE0MDEsMzE0MzIsMzE0MDgsMzE0MTQsMzE0MjksMzE0MjgsMzE0MjMsMzY5OTUsMzE0MzEsMzE0MzQsMzE0MzcsMzE0MzksMzE0NDUsMzE0NDMsMzE0NDksMzE0NTAsMzE0NTMsMzE0NTcsMzE0''@;'; put 'put ''NTgsMzE0NjIsMzE0NjksMzE0NzIsMzE0OTAsMzE1MDMsMzE0OTgsMzE0OTQsMzE1MzksMzE1MTIsMzE1MTMsMzE1MTgsMzE1NDEsMzE1MjgsMzE1NDIsMzE1NjgsMzE2MTAsMzE0OTIsMzE1NjUsMzE0OTksMzE1NjQsMzE1NTcsMzE2MDUsMzE1ODksMzE2MDQsMzE1OTEsMzE2MDAsMzE2MDEs''@;'; put 'put ''MzE1OTYsMzE1OTgsMzE2NDUsMzE2NDAsMzE2NDcsMzE2MjksMzE2NDQsMzE2NDIsMzE2MjcsMzE2MzQsMzE2MzEsMzE1ODEsMzE2NDEsMzE2OTEsMzE2ODEsMzE2OTIsMzE2OTUsMzE2NjgsMzE2ODYsMzE3MDksMzE3MjEsMzE3NjEsMzE3NjQsMzE3MTgsMzE3MTcsMzE4NDAsMzE3NDQsMzE3''@;'; put 'put ''NTEsMzE3NjMsMzE3MzEsMzE3MzUsMzE3NjcsMzE3NTcsMzE3MzQsMzE3NzksMzE3ODMsMzE3ODYsMzE3NzUsMzE3OTksMzE3ODcsMzE4MDUsMzE4MjAsMzE4MTEsMzE4MjgsMzE4MjMsMzE4MDgsMzE4MjQsMzE4MzIsMzE4MzksMzE4NDQsMzE4MzAsMzE4NDUsMzE4NTIsMzE4NjEsMzE4NzUs''@;'; put 'put ''MzE4ODgsMzE5MDgsMzE5MTcsMzE5MDYsMzE5MTUsMzE5MDUsMzE5MTIsMzE5MjMsMzE5MjIsMzE5MjEsMzE5MTgsMzE5MjksMzE5MzMsMzE5MzYsMzE5NDEsMzE5MzgsMzE5NjAsMzE5NTQsMzE5NjQsMzE5NzAsMzk3MzksMzE5ODMsMzE5ODYsMzE5ODgsMzE5OTAsMzE5OTQsMzIwMDYsMzIw''@;'; put 'put ''MDIsMzIwMjgsMzIwMjEsMzIwMTAsMzIwNjksMzIwNzUsMzIwNDYsMzIwNTAsMzIwNjMsMzIwNTMsMzIwNzAsMzIxMTUsMzIwODYsMzIwNzgsMzIxMTQsMzIxMDQsMzIxMTAsMzIwNzksMzIwOTksMzIxNDcsMzIxMzcsMzIwOTEsMzIxNDMsMzIxMjUsMzIxNTUsMzIxODYsMzIxNzQsMzIxNjMs''@;'; put 'put ''MzIxODEsMzIxOTksMzIxODksMzIxNzEsMzIzMTcsMzIxNjIsMzIxNzUsMzIyMjAsMzIxODQsMzIxNTksMzIxNzYsMzIyMTYsMzIyMjEsMzIyMjgsMzIyMjIsMzIyNTEsMzIyNDIsMzIyMjUsMzIyNjEsMzIyNjYsMzIyOTEsMzIyODksMzIyNzQsMzIzMDUsMzIyODcsMzIyNjUsMzIyNjcsMzIy''@;'; put 'put ''OTAsMzIzMjYsMzIzNTgsMzIzMTUsMzIzMDksMzIzMTMsMzIzMjMsMzIzMTEsMzIzMDYsMzIzMTQsMzIzNTksMzIzNDksMzIzNDIsMzIzNTAsMzIzNDUsMzIzNDYsMzIzNzcsMzIzNjIsMzIzNjEsMzIzODAsMzIzNzksMzIzODcsMzIyMTMsMzIzODEsMzY3ODIsMzIzODMsMzIzOTIsMzIzOTMs''@;'; put 'put ''MzIzOTYsMzI0MDIsMzI0MDAsMzI0MDMsMzI0MDQsMzI0MDYsMzIzOTgsMzI0MTEsMzI0MTIsMzI1NjgsMzI1NzAsMzI1ODEsMzI1ODgsMzI1ODksMzI1OTAsMzI1OTIsMzI1OTMsMzI1OTcsMzI1OTYsMzI2MDAsMzI2MDcsMzI2MDgsMzI2MTYsMzI2MTcsMzI2MTUsMzI2MzIsMzI2NDIsMzI2''@;'; put 'put ''NDYsMzI2NDMsMzI2NDgsMzI2NDcsMzI2NTIsMzI2NjAsMzI2NzAsMzI2NjksMzI2NjYsMzI2NzUsMzI2ODcsMzI2OTAsMzI2OTcsMzI2ODYsMzI2OTQsMzI2OTYsMzU2OTcsMzI3MDksMzI3MTAsMzI3MTQsMzI3MjUsMzI3MjQsMzI3MzcsMzI3NDIsMzI3NDUsMzI3NTUsMzI3NjEsMzkxMzIs''@;'; put 'put ''MzI3NzQsMzI3NzIsMzI3NzksMzI3ODYsMzI3OTIsMzI3OTMsMzI3OTYsMzI4MDEsMzI4MDgsMzI4MzEsMzI4MjcsMzI4NDIsMzI4MzgsMzI4NTAsMzI4NTYsMzI4NTgsMzI4NjMsMzI4NjYsMzI4NzIsMzI4ODMsMzI4ODIsMzI4ODAsMzI4ODYsMzI4ODksMzI4OTMsMzI4OTUsMzI5MDAsMzI5''@;'; put 'put ''MDIsMzI5MDEsMzI5MjMsMzI5MTUsMzI5MjIsMzI5NDEsMjA4ODAsMzI5NDAsMzI5ODcsMzI5OTcsMzI5ODUsMzI5ODksMzI5NjQsMzI5ODYsMzI5ODIsMzMwMzMsMzMwMDcsMzMwMDksMzMwNTEsMzMwNjUsMzMwNTksMzMwNzEsMzMwOTksMzg1MzksMzMwOTQsMzMwODYsMzMxMDcsMzMxMDUs''@;'; put 'put ''MzMwMjAsMzMxMzcsMzMxMzQsMzMxMjUsMzMxMjYsMzMxNDAsMzMxNTUsMzMxNjAsMzMxNjIsMzMxNTIsMzMxNTQsMzMxODQsMzMxNzMsMzMxODgsMzMxODcsMzMxMTksMzMxNzEsMzMxOTMsMzMyMDAsMzMyMDUsMzMyMTQsMzMyMDgsMzMyMTMsMzMyMTYsMzMyMTgsMzMyMTAsMzMyMjUsMzMy''@;'; put 'put ''MjksMzMyMzMsMzMyNDEsMzMyNDAsMzMyMjQsMzMyNDIsMzMyNDcsMzMyNDgsMzMyNTUsMzMyNzQsMzMyNzUsMzMyNzgsMzMyODEsMzMyODIsMzMyODUsMzMyODcsMzMyOTAsMzMyOTMsMzMyOTYsMzMzMDIsMzMzMjEsMzMzMjMsMzMzMzYsMzMzMzEsMzMzNDQsMzMzNjksMzMzNjgsMzMzNzMs''@;'; put 'put ''MzMzNzAsMzMzNzUsMzMzODAsMzMzNzgsMzMzODQsMzMzODYsMzMzODcsMzMzMjYsMzMzOTMsMzMzOTksMzM0MDAsMzM0MDYsMzM0MjEsMzM0MjYsMzM0NTEsMzM0MzksMzM0NjcsMzM0NTIsMzM1MDUsMzM1MDcsMzM1MDMsMzM0OTAsMzM1MjQsMzM1MjMsMzM1MzAsMzM2ODMsMzM1MzksMzM1''@;'; put 'put ''MzEsMzM1MjksMzM1MDIsMzM1NDIsMzM1MDAsMzM1NDUsMzM0OTcsMzM1ODksMzM1ODgsMzM1NTgsMzM1ODYsMzM1ODUsMzM2MDAsMzM1OTMsMzM2MTYsMzM2MDUsMzM1ODMsMzM1NzksMzM1NTksMzM1NjAsMzM2NjksMzM2OTAsMzM3MDYsMzM2OTUsMzM2OTgsMzM2ODYsMzM1NzEsMzM2Nzgs''@;'; put 'put ''MzM2NzEsMzM2NzQsMzM2NjAsMzM3MTcsMzM2NTEsMzM2NTMsMzM2OTYsMzM2NzMsMzM3MDQsMzM3ODAsMzM4MTEsMzM3NzEsMzM3NDIsMzM3ODksMzM3OTUsMzM3NTIsMzM4MDMsMzM3MjksMzM3ODMsMzM3OTksMzM3NjAsMzM3NzgsMzM4MDUsMzM4MjYsMzM4MjQsMzM3MjUsMzM4NDgsMzQw''@;'; put 'put ''NTQsMzM3ODcsMzM5MDEsMzM4MzQsMzM4NTIsMzQxMzgsMzM5MjQsMzM5MTEsMzM4OTksMzM5NjUsMzM5MDIsMzM5MjIsMzM4OTcsMzM4NjIsMzM4MzYsMzM5MDMsMzM5MTMsMzM4NDUsMzM5OTQsMzM4OTAsMzM5NzcsMzM5ODMsMzM5NTEsMzQwMDksMzM5OTcsMzM5NzksMzQwMTAsMzRlMywz''@;'; put 'put ''Mzk4NSwzMzk5MCwzNDAwNiwzMzk1MywzNDA4MSwzNDA0NywzNDAzNiwzNDA3MSwzNDA3MiwzNDA5MiwzNDA3OSwzNDA2OSwzNDA2OCwzNDA0NCwzNDExMiwzNDE0NywzNDEzNiwzNDEyMCwzNDExMywzNDMwNiwzNDEyMywzNDEzMywzNDE3NiwzNDIxMiwzNDE4NCwzNDE5MywzNDE4NiwzNDIx''@;'; put 'put ''NiwzNDE1NywzNDE5NiwzNDIwMywzNDI4MiwzNDE4MywzNDIwNCwzNDE2NywzNDE3NCwzNDE5MiwzNDI0OSwzNDIzNCwzNDI1NSwzNDIzMywzNDI1NiwzNDI2MSwzNDI2OSwzNDI3NywzNDI2OCwzNDI5NywzNDMxNCwzNDMyMywzNDMxNSwzNDMwMiwzNDI5OCwzNDMxMCwzNDMzOCwzNDMzMCwz''@;'; put 'put ''NDM1MiwzNDM2NywzNDM4MSwyMDA1MywzNDM4OCwzNDM5OSwzNDQwNywzNDQxNywzNDQ1MSwzNDQ2NywzNDQ3MywzNDQ3NCwzNDQ0MywzNDQ0NCwzNDQ4NiwzNDQ3OSwzNDUwMCwzNDUwMiwzNDQ4MCwzNDUwNSwzNDg1MSwzNDQ3NSwzNDUxNiwzNDUyNiwzNDUzNywzNDU0MCwzNDUyNywzNDUy''@;'; put 'put ''MywzNDU0MywzNDU3OCwzNDU2NiwzNDU2OCwzNDU2MCwzNDU2MywzNDU1NSwzNDU3NywzNDU2OSwzNDU3MywzNDU1MywzNDU3MCwzNDYxMiwzNDYyMywzNDYxNSwzNDYxOSwzNDU5NywzNDYwMSwzNDU4NiwzNDY1NiwzNDY1NSwzNDY4MCwzNDYzNiwzNDYzOCwzNDY3NiwzNDY0NywzNDY2NCwz''@;'; put 'put ''NDY3MCwzNDY0OSwzNDY0MywzNDY1OSwzNDY2NiwzNDgyMSwzNDcyMiwzNDcxOSwzNDY5MCwzNDczNSwzNDc2MywzNDc0OSwzNDc1MiwzNDc2OCwzODYxNCwzNDczMSwzNDc1NiwzNDczOSwzNDc1OSwzNDc1OCwzNDc0NywzNDc5OSwzNDgwMiwzNDc4NCwzNDgzMSwzNDgyOSwzNDgxNCwzNDgw''@;'; put 'put ''NiwzNDgwNywzNDgzMCwzNDc3MCwzNDgzMywzNDgzOCwzNDgzNywzNDg1MCwzNDg0OSwzNDg2NSwzNDg3MCwzNDg3MywzNDg1NSwzNDg3NSwzNDg4NCwzNDg4MiwzNDg5OCwzNDkwNSwzNDkxMCwzNDkxNCwzNDkyMywzNDk0NSwzNDk0MiwzNDk3NCwzNDkzMywzNDk0MSwzNDk5NywzNDkzMCwz''@;'; put 'put ''NDk0NiwzNDk2NywzNDk2MiwzNDk5MCwzNDk2OSwzNDk3OCwzNDk1NywzNDk4MCwzNDk5MiwzNTAwNywzNDk5MywzNTAxMSwzNTAxMiwzNTAyOCwzNTAzMiwzNTAzMywzNTAzNywzNTA2NSwzNTA3NCwzNTA2OCwzNTA2MCwzNTA0OCwzNTA1OCwzNTA3NiwzNTA4NCwzNTA4MiwzNTA5MSwzNTEz''@;'; put 'put ''OSwzNTEwMiwzNTEwOSwzNTExNCwzNTExNSwzNTEzNywzNTE0MCwzNTEzMSwzNTEyNiwzNTEyOCwzNTE0OCwzNTEwMSwzNTE2OCwzNTE2NiwzNTE3NCwzNTE3MiwzNTE4MSwzNTE3OCwzNTE4MywzNTE4OCwzNTE5MSwzNTE5OCwzNTIwMywzNTIwOCwzNTIxMCwzNTIxOSwzNTIyNCwzNTIzMywz''@;'; put 'put ''NTI0MSwzNTIzOCwzNTI0NCwzNTI0NywzNTI1MCwzNTI1OCwzNTI2MSwzNTI2MywzNTI2NCwzNTI5MCwzNTI5MiwzNTI5MywzNTMwMywzNTMxNiwzNTMyMCwzNTMzMSwzNTM1MCwzNTM0NCwzNTM0MCwzNTM1NSwzNTM1NywzNTM2NSwzNTM4MiwzNTM5MywzNTQxOSwzNTQxMCwzNTM5OCwzNTQw''@;'; put 'put ''MCwzNTQ1MiwzNTQzNywzNTQzNiwzNTQyNiwzNTQ2MSwzNTQ1OCwzNTQ2MCwzNTQ5NiwzNTQ4OSwzNTQ3MywzNTQ5MywzNTQ5NCwzNTQ4MiwzNTQ5MSwzNTUyNCwzNTUzMywzNTUyMiwzNTU0NiwzNTU2MywzNTU3MSwzNTU1OSwzNTU1NiwzNTU2OSwzNTYwNCwzNTU1MiwzNTU1NCwzNTU3NSwz''@;'; put 'put ''NTU1MCwzNTU0NywzNTU5NiwzNTU5MSwzNTYxMCwzNTU1MywzNTYwNiwzNTYwMCwzNTYwNywzNTYxNiwzNTYzNSwzODgyNywzNTYyMiwzNTYyNywzNTY0NiwzNTYyNCwzNTY0OSwzNTY2MCwzNTY2MywzNTY2MiwzNTY1NywzNTY3MCwzNTY3NSwzNTY3NCwzNTY5MSwzNTY3OSwzNTY5MiwzNTY5''@;'; put 'put ''NSwzNTcwMCwzNTcwOSwzNTcxMiwzNTcyNCwzNTcyNiwzNTczMCwzNTczMSwzNTczNCwzNTczNywzNTczOCwzNTg5OCwzNTkwNSwzNTkwMywzNTkxMiwzNTkxNiwzNTkxOCwzNTkyMCwzNTkyNSwzNTkzOCwzNTk0OCwzNTk2MCwzNTk2MiwzNTk3MCwzNTk3NywzNTk3MywzNTk3OCwzNTk4MSwz''@;'; put 'put ''NTk4MiwzNTk4OCwzNTk2NCwzNTk5MiwyNTExNywzNjAxMywzNjAxMCwzNjAyOSwzNjAxOCwzNjAxOSwzNjAxNCwzNjAyMiwzNjA0MCwzNjAzMywzNjA2OCwzNjA2NywzNjA1OCwzNjA5MywzNjA5MCwzNjA5MSwzNjEwMCwzNjEwMSwzNjEwNiwzNjEwMywzNjExMSwzNjEwOSwzNjExMiw0MDc4''@;'; put 'put ''MiwzNjExNSwzNjA0NSwzNjExNiwzNjExOCwzNjE5OSwzNjIwNSwzNjIwOSwzNjIxMSwzNjIyNSwzNjI0OSwzNjI5MCwzNjI4NiwzNjI4MiwzNjMwMywzNjMxNCwzNjMxMCwzNjMwMCwzNjMxNSwzNjI5OSwzNjMzMCwzNjMzMSwzNjMxOSwzNjMyMywzNjM0OCwzNjM2MCwzNjM2MSwzNjM1MSwz''@;'; put 'put ''NjM4MSwzNjM4MiwzNjM2OCwzNjM4MywzNjQxOCwzNjQwNSwzNjQwMCwzNjQwNCwzNjQyNiwzNjQyMywzNjQyNSwzNjQyOCwzNjQzMiwzNjQyNCwzNjQ0MSwzNjQ1MiwzNjQ0OCwzNjM5NCwzNjQ1MSwzNjQzNywzNjQ3MCwzNjQ2NiwzNjQ3NiwzNjQ4MSwzNjQ4NywzNjQ4NSwzNjQ4NCwzNjQ5''@;'; put 'put ''MSwzNjQ5MCwzNjQ5OSwzNjQ5NywzNjUwMCwzNjUwNSwzNjUyMiwzNjUxMywzNjUyNCwzNjUyOCwzNjU1MCwzNjUyOSwzNjU0MiwzNjU0OSwzNjU1MiwzNjU1NSwzNjU3MSwzNjU3OSwzNjYwNCwzNjYwMywzNjU4NywzNjYwNiwzNjYxOCwzNjYxMywzNjYyOSwzNjYyNiwzNjYzMywzNjYyNywz''@;'; put 'put ''NjYzNiwzNjYzOSwzNjYzNSwzNjYyMCwzNjY0NiwzNjY1OSwzNjY2NywzNjY2NSwzNjY3NywzNjY3NCwzNjY3MCwzNjY4NCwzNjY4MSwzNjY3OCwzNjY4NiwzNjY5NSwzNjcwMCwzNjcwNiwzNjcwNywzNjcwOCwzNjc2NCwzNjc2NywzNjc3MSwzNjc4MSwzNjc4MywzNjc5MSwzNjgyNiwzNjgz''@;'; put 'put ''NywzNjgzNCwzNjg0MiwzNjg0NywzNjk5OSwzNjg1MiwzNjg2OSwzNjg1NywzNjg1OCwzNjg4MSwzNjg4NSwzNjg5NywzNjg3NywzNjg5NCwzNjg4NiwzNjg3NSwzNjkwMywzNjkxOCwzNjkxNywzNjkyMSwzNjg1NiwzNjk0MywzNjk0NCwzNjk0NSwzNjk0NiwzNjg3OCwzNjkzNywzNjkyNiwz''@;'; put 'put ''Njk1MCwzNjk1MiwzNjk1OCwzNjk2OCwzNjk3NSwzNjk4MiwzODU2OCwzNjk3OCwzNjk5NCwzNjk4OSwzNjk5MywzNjk5MiwzNzAwMiwzNzAwMSwzNzAwNywzNzAzMiwzNzAzOSwzNzA0MSwzNzA0NSwzNzA5MCwzNzA5MiwyNTE2MCwzNzA4MywzNzEyMiwzNzEzOCwzNzE0NSwzNzE3MCwzNzE2''@;'; put 'put ''OCwzNzE5NCwzNzIwNiwzNzIwOCwzNzIxOSwzNzIyMSwzNzIyNSwzNzIzNSwzNzIzNCwzNzI1OSwzNzI1NywzNzI1MCwzNzI4MiwzNzI5MSwzNzI5NSwzNzI5MCwzNzMwMSwzNzMwMCwzNzMwNiwzNzMxMiwzNzMxMywzNzMyMSwzNzMyMywzNzMyOCwzNzMzNCwzNzM0MywzNzM0NSwzNzMzOSwz''@;'; put 'put ''NzM3MiwzNzM2NSwzNzM2NiwzNzQwNiwzNzM3NSwzNzM5NiwzNzQyMCwzNzM5NywzNzM5MywzNzQ3MCwzNzQ2MywzNzQ0NSwzNzQ0OSwzNzQ3NiwzNzQ0OCwzNzUyNSwzNzQzOSwzNzQ1MSwzNzQ1NiwzNzUzMiwzNzUyNiwzNzUyMywzNzUzMSwzNzQ2NiwzNzU4MywzNzU2MSwzNzU1OSwzNzYw''@;'; put 'put ''OSwzNzY0NywzNzYyNiwzNzcwMCwzNzY3OCwzNzY1NywzNzY2NiwzNzY1OCwzNzY2NywzNzY5MCwzNzY4NSwzNzY5MSwzNzcyNCwzNzcyOCwzNzc1NiwzNzc0MiwzNzcxOCwzNzgwOCwzNzgwNCwzNzgwNSwzNzc4MCwzNzgxNywzNzg0NiwzNzg0NywzNzg2NCwzNzg2MSwzNzg0OCwzNzgyNywz''@;'; put 'put ''Nzg1MywzNzg0MCwzNzgzMiwzNzg2MCwzNzkxNCwzNzkwOCwzNzkwNywzNzg5MSwzNzg5NSwzNzkwNCwzNzk0MiwzNzkzMSwzNzk0MSwzNzkyMSwzNzk0NiwzNzk1MywzNzk3MCwzNzk1NiwzNzk3OSwzNzk4NCwzNzk4NiwzNzk4MiwzNzk5NCwzNzQxNywzOGUzLDM4MDA1LDM4MDA3LDM4MDEz''@;'; put 'put ''LDM3OTc4LDM4MDEyLDM4MDE0LDM4MDE3LDM4MDE1LDM4Mjc0LDM4Mjc5LDM4MjgyLDM4MjkyLDM4Mjk0LDM4Mjk2LDM4Mjk3LDM4MzA0LDM4MzEyLDM4MzExLDM4MzE3LDM4MzMyLDM4MzMxLDM4MzI5LDM4MzM0LDM4MzQ2LDI4NjYyLDM4MzM5LDM4MzQ5LDM4MzQ4LDM4MzU3LDM4MzU2LDM4''@;'; put 'put ''MzU4LDM4MzY0LDM4MzY5LDM4MzczLDM4MzcwLDM4NDMzLDM4NDQwLDM4NDQ2LDM4NDQ3LDM4NDY2LDM4NDc2LDM4NDc5LDM4NDc1LDM4NTE5LDM4NDkyLDM4NDk0LDM4NDkzLDM4NDk1LDM4NTAyLDM4NTE0LDM4NTA4LDM4NTQxLDM4NTUyLDM4NTQ5LDM4NTUxLDM4NTcwLDM4NTY3LDM4NTc3''@;'; put 'put ''LDM4NTc4LDM4NTc2LDM4NTgwLDM4NTgyLDM4NTg0LDM4NTg1LDM4NjA2LDM4NjAzLDM4NjAxLDM4NjA1LDM1MTQ5LDM4NjIwLDM4NjY5LDM4NjEzLDM4NjQ5LDM4NjYwLDM4NjYyLDM4NjY0LDM4Njc1LDM4NjcwLDM4NjczLDM4NjcxLDM4Njc4LDM4NjgxLDM4NjkyLDM4Njk4LDM4NzA0LDM4''@;'; put 'put ''NzEzLDM4NzE3LDM4NzE4LDM4NzI0LDM4NzI2LDM4NzI4LDM4NzIyLDM4NzI5LDM4NzQ4LDM4NzUyLDM4NzU2LDM4NzU4LDM4NzYwLDIxMjAyLDM4NzYzLDM4NzY5LDM4Nzc3LDM4Nzg5LDM4NzgwLDM4Nzg1LDM4Nzc4LDM4NzkwLDM4Nzk1LDM4Nzk5LDM4ODAwLDM4ODEyLDM4ODI0LDM4ODIy''@;'; put 'put ''LDM4ODE5LDM4ODM1LDM4ODM2LDM4ODUxLDM4ODU0LDM4ODU2LDM4ODU5LDM4ODc2LDM4ODkzLDQwNzgzLDM4ODk4LDMxNDU1LDM4OTAyLDM4OTAxLDM4OTI3LDM4OTI0LDM4OTY4LDM4OTQ4LDM4OTQ1LDM4OTY3LDM4OTczLDM4OTgyLDM4OTkxLDM4OTg3LDM5MDE5LDM5MDIzLDM5MDI0LDM5''@;'; put 'put ''MDI1LDM5MDI4LDM5MDI3LDM5MDgyLDM5MDg3LDM5MDg5LDM5MDk0LDM5MTA4LDM5MTA3LDM5MTEwLDM5MTQ1LDM5MTQ3LDM5MTcxLDM5MTc3LDM5MTg2LDM5MTg4LDM5MTkyLDM5MjAxLDM5MTk3LDM5MTk4LDM5MjA0LDM5MjAwLDM5MjEyLDM5MjE0LDM5MjI5LDM5MjMwLDM5MjM0LDM5MjQx''@;'; put 'put ''LDM5MjM3LDM5MjQ4LDM5MjQzLDM5MjQ5LDM5MjUwLDM5MjQ0LDM5MjUzLDM5MzE5LDM5MzIwLDM5MzMzLDM5MzQxLDM5MzQyLDM5MzU2LDM5MzkxLDM5Mzg3LDM5Mzg5LDM5Mzg0LDM5Mzc3LDM5NDA1LDM5NDA2LDM5NDA5LDM5NDEwLDM5NDE5LDM5NDE2LDM5NDI1LDM5NDM5LDM5NDI5LDM5''@;'; put 'put ''Mzk0LDM5NDQ5LDM5NDY3LDM5NDc5LDM5NDkzLDM5NDkwLDM5NDg4LDM5NDkxLDM5NDg2LDM5NTA5LDM5NTAxLDM5NTE1LDM5NTExLDM5NTE5LDM5NTIyLDM5NTI1LDM5NTI0LDM5NTI5LDM5NTMxLDM5NTMwLDM5NTk3LDM5NjAwLDM5NjEyLDM5NjE2LDM5NjMxLDM5NjMzLDM5NjM1LDM5NjM2''@;'; put 'put ''LDM5NjQ2LDM5NjQ3LDM5NjUwLDM5NjUxLDM5NjU0LDM5NjYzLDM5NjU5LDM5NjYyLDM5NjY4LDM5NjY1LDM5NjcxLDM5Njc1LDM5Njg2LDM5NzA0LDM5NzA2LDM5NzExLDM5NzE0LDM5NzE1LDM5NzE3LDM5NzE5LDM5NzIwLDM5NzIxLDM5NzIyLDM5NzI2LDM5NzI3LDM5NzMwLDM5NzQ4LDM5''@;'; put 'put ''NzQ3LDM5NzU5LDM5NzU3LDM5NzU4LDM5NzYxLDM5NzY4LDM5Nzk2LDM5ODI3LDM5ODExLDM5ODI1LDM5ODMwLDM5ODMxLDM5ODM5LDM5ODQwLDM5ODQ4LDM5ODYwLDM5ODcyLDM5ODgyLDM5ODY1LDM5ODc4LDM5ODg3LDM5ODg5LDM5ODkwLDM5OTA3LDM5OTA2LDM5OTA4LDM5ODkyLDM5OTA1''@;'; put 'put ''LDM5OTk0LDM5OTIyLDM5OTIxLDM5OTIwLDM5OTU3LDM5OTU2LDM5OTQ1LDM5OTU1LDM5OTQ4LDM5OTQyLDM5OTQ0LDM5OTU0LDM5OTQ2LDM5OTQwLDM5OTgyLDM5OTYzLDM5OTczLDM5OTcyLDM5OTY5LDM5OTg0LDQwMDA3LDM5OTg2LDQwMDA2LDM5OTk4LDQwMDI2LDQwMDMyLDQwMDM5LDQw''@;'; put 'put ''MDU0LDQwMDU2LDQwMTY3LDQwMTcyLDQwMTc2LDQwMjAxLDQwMjAwLDQwMTcxLDQwMTk1LDQwMTk4LDQwMjM0LDQwMjMwLDQwMzY3LDQwMjI3LDQwMjIzLDQwMjYwLDQwMjEzLDQwMjEwLDQwMjU3LDQwMjU1LDQwMjU0LDQwMjYyLDQwMjY0LDQwMjg1LDQwMjg2LDQwMjkyLDQwMjczLDQwMjcy''@;'; put 'put ''LDQwMjgxLDQwMzA2LDQwMzI5LDQwMzI3LDQwMzYzLDQwMzAzLDQwMzE0LDQwMzQ2LDQwMzU2LDQwMzYxLDQwMzcwLDQwMzg4LDQwMzg1LDQwMzc5LDQwMzc2LDQwMzc4LDQwMzkwLDQwMzk5LDQwMzg2LDQwNDA5LDQwNDAzLDQwNDQwLDQwNDIyLDQwNDI5LDQwNDMxLDQwNDQ1LDQwNDc0LDQw''@;'; put 'put ''NDc1LDQwNDc4LDQwNTY1LDQwNTY5LDQwNTczLDQwNTc3LDQwNTg0LDQwNTg3LDQwNTg4LDQwNTk0LDQwNTk3LDQwNTkzLDQwNjA1LDQwNjEzLDQwNjE3LDQwNjMyLDQwNjE4LDQwNjIxLDM4NzUzLDQwNjUyLDQwNjU0LDQwNjU1LDQwNjU2LDQwNjYwLDQwNjY4LDQwNjcwLDQwNjY5LDQwNjcy''@;'; put 'put ''LDQwNjc3LDQwNjgwLDQwNjg3LDQwNjkyLDQwNjk0LDQwNjk1LDQwNjk3LDQwNjk5LDQwNzAwLDQwNzAxLDQwNzExLDQwNzEyLDMwMzkxLDQwNzI1LDQwNzM3LDQwNzQ4LDQwNzY2LDQwNzc4LDQwNzg2LDQwNzg4LDQwODAzLDQwNzk5LDQwODAwLDQwODAxLDQwODA2LDQwODA3LDQwODEyLDQw''@;'; put 'put ''ODEwLDQwODIzLDQwODE4LDQwODIyLDQwODUzLDQwODYwLDQwODY0LDIyNTc1LDI3MDc5LDM2OTUzLDI5Nzk2LDIwOTU2LDI5MDgxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; 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 ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzMjM5NCwzNTEwMCwzNzcwNCwzNzUxMiwzNDAxMiwyMDQyNSwyODg1OSwyNjE2MSwyNjgyNCwzNzYyNSwyNjM2MywyNDM4OSwyMDAwOCwy''@;'; put 'put ''MDE5MywyMDIyMCwyMDIyNCwyMDIyNywyMDI4MSwyMDMxMCwyMDM3MCwyMDM2MiwyMDM3OCwyMDM3MiwyMDQyOSwyMDU0NCwyMDUxNCwyMDQ3OSwyMDUxMCwyMDU1MCwyMDU5MiwyMDU0NiwyMDYyOCwyMDcyNCwyMDY5NiwyMDgxMCwyMDgzNiwyMDg5MywyMDkyNiwyMDk3MiwyMTAxMywyMTE0''@;'; put 'put ''OCwyMTE1OCwyMTE4NCwyMTIxMSwyMTI0OCwyMTI1NSwyMTI4NCwyMTM2MiwyMTM5NSwyMTQyNiwyMTQ2OSw2NDAxNCwyMTY2MCwyMTY0MiwyMTY3MywyMTc1OSwyMTg5NCwyMjM2MSwyMjM3MywyMjQ0NCwyMjQ3MiwyMjQ3MSw2NDAxNSw2NDAxNiwyMjY4NiwyMjcwNiwyMjc5NSwyMjg2Nywy''@;'; put 'put ''Mjg3NSwyMjg3NywyMjg4MywyMjk0OCwyMjk3MCwyMzM4MiwyMzQ4OCwyOTk5OSwyMzUxMiwyMzUzMiwyMzU4MiwyMzcxOCwyMzczOCwyMzc5NywyMzg0NywyMzg5MSw2NDAxNywyMzg3NCwyMzkxNywyMzk5MiwyMzk5MywyNDAxNiwyNDM1MywyNDM3MiwyNDQyMywyNDUwMywyNDU0MiwyNDY2''@;'; put 'put ''OSwyNDcwOSwyNDcxNCwyNDc5OCwyNDc4OSwyNDg2NCwyNDgxOCwyNDg0OSwyNDg4NywyNDg4MCwyNDk4NCwyNTEwNywyNTI1NCwyNTU4OSwyNTY5NiwyNTc1NywyNTgwNiwyNTkzNCwyNjExMiwyNjEzMywyNjE3MSwyNjEyMSwyNjE1OCwyNjE0MiwyNjE0OCwyNjIxMywyNjE5OSwyNjIwMSw2''@;'; put 'put ''NDAxOCwyNjIyNywyNjI2NSwyNjI3MiwyNjI5MCwyNjMwMywyNjM2MiwyNjM4Miw2Mzc4NSwyNjQ3MCwyNjU1NSwyNjcwNiwyNjU2MCwyNjYyNSwyNjY5MiwyNjgzMSw2NDAxOSwyNjk4NCw2NDAyMCwyNzAzMiwyNzEwNiwyNzE4NCwyNzI0MywyNzIwNiwyNzI1MSwyNzI2MiwyNzM2MiwyNzM2''@;'; put 'put ''NCwyNzYwNiwyNzcxMSwyNzc0MCwyNzc4MiwyNzc1OSwyNzg2NiwyNzkwOCwyODAzOSwyODAxNSwyODA1NCwyODA3NiwyODExMSwyODE1MiwyODE0NiwyODE1NiwyODIxNywyODI1MiwyODE5OSwyODIyMCwyODM1MSwyODU1MiwyODU5NywyODY2MSwyODY3NywyODY3OSwyODcxMiwyODgwNSwy''@;'; put 'put ''ODg0MywyODk0MywyODkzMiwyOTAyMCwyODk5OCwyODk5OSw2NDAyMSwyOTEyMSwyOTE4MiwyOTM2MSwyOTM3NCwyOTQ3Niw2NDAyMiwyOTU1OSwyOTYyOSwyOTY0MSwyOTY1NCwyOTY2NywyOTY1MCwyOTcwMywyOTY4NSwyOTczNCwyOTczOCwyOTczNywyOTc0MiwyOTc5NCwyOTgzMywyOTg1''@;'; put 'put ''NSwyOTk1MywzMDA2MywzMDMzOCwzMDM2NCwzMDM2NiwzMDM2MywzMDM3NCw2NDAyMywzMDUzNCwyMTE2NywzMDc1MywzMDc5OCwzMDgyMCwzMDg0MiwzMTAyNCw2NDAyNCw2NDAyNSw2NDAyNiwzMTEyNCw2NDAyNywzMTEzMSwzMTQ0MSwzMTQ2Myw2NDAyOCwzMTQ2NywzMTY0Niw2NDAyOSwz''@;'; put 'put ''MjA3MiwzMjA5MiwzMjE4MywzMjE2MCwzMjIxNCwzMjMzOCwzMjU4MywzMjY3Myw2NDAzMCwzMzUzNywzMzYzNCwzMzY2MywzMzczNSwzMzc4MiwzMzg2NCwzMzk3MiwzNDEzMSwzNDEzNywzNDE1NSw2NDAzMSwzNDIyNCw2NDAzMiw2NDAzMywzNDgyMywzNTA2MSwzNTM0NiwzNTM4MywzNTQ0''@;'; put 'put ''OSwzNTQ5NSwzNTUxOCwzNTU1MSw2NDAzNCwzNTU3NCwzNTY2NywzNTcxMSwzNjA4MCwzNjA4NCwzNjExNCwzNjIxNCw2NDAzNSwzNjU1OSw2NDAzNiw2NDAzNywzNjk2NywzNzA4Niw2NDAzOCwzNzE0MSwzNzE1OSwzNzMzOCwzNzMzNSwzNzM0MiwzNzM1NywzNzM1OCwzNzM0OCwzNzM0OSwz''@;'; put 'put ''NzM4MiwzNzM5MiwzNzM4NiwzNzQzNCwzNzQ0MCwzNzQzNiwzNzQ1NCwzNzQ2NSwzNzQ1NywzNzQzMywzNzQ3OSwzNzU0MywzNzQ5NSwzNzQ5NiwzNzYwNywzNzU5MSwzNzU5MywzNzU4NCw2NDAzOSwzNzU4OSwzNzYwMCwzNzU4NywzNzY2OSwzNzY2NSwzNzYyNyw2NDA0MCwzNzY2MiwzNzYz''@;'; put 'put ''MSwzNzY2MSwzNzYzNCwzNzc0NCwzNzcxOSwzNzc5NiwzNzgzMCwzNzg1NCwzNzg4MCwzNzkzNywzNzk1NywzNzk2MCwzODI5MCw2Mzk2NCw2NDA0MSwzODU1NywzODU3NSwzODcwNywzODcxNSwzODcyMywzODczMywzODczNSwzODczNywzODc0MSwzODk5OSwzOTAxMyw2NDA0Miw2NDA0Mywz''@;'; put 'put ''OTIwNyw2NDA0NCwzOTMyNiwzOTUwMiwzOTY0MSwzOTY0NCwzOTc5NywzOTc5NCwzOTgyMywzOTg1NywzOTg2NywzOTkzNiw0MDMwNCw0MDI5OSw2NDA0NSw0MDQ3Myw0MDY1NyxudWxsLG51bGwsODU2MCw4NTYxLDg1NjIsODU2Myw4NTY0LDg1NjUsODU2Niw4NTY3LDg1NjgsODU2OSw2NTUw''@;'; put 'put ''Niw2NTUwOCw2NTI4Nyw2NTI4MixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; 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 ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDg1NjAsODU2MSw4NTYyLDg1NjMsODU2NCw4NTY1LDg1NjYs''@;'; put 'put ''ODU2Nyw4NTY4LDg1NjksODU0NCw4NTQ1LDg1NDYsODU0Nyw4NTQ4LDg1NDksODU1MCw4NTUxLDg1NTIsODU1Myw2NTUwNiw2NTUwOCw2NTI4Nyw2NTI4MiwxMjg0OSw4NDcwLDg0ODEsODc1NywzMjM5NCwzNTEwMCwzNzcwNCwzNzUxMiwzNDAxMiwyMDQyNSwyODg1OSwyNjE2MSwyNjgyNCwz''@;'; put 'put ''NzYyNSwyNjM2MywyNDM4OSwyMDAwOCwyMDE5MywyMDIyMCwyMDIyNCwyMDIyNywyMDI4MSwyMDMxMCwyMDM3MCwyMDM2MiwyMDM3OCwyMDM3MiwyMDQyOSwyMDU0NCwyMDUxNCwyMDQ3OSwyMDUxMCwyMDU1MCwyMDU5MiwyMDU0NiwyMDYyOCwyMDcyNCwyMDY5NiwyMDgxMCwyMDgzNiwyMDg5''@;'; put 'put ''MywyMDkyNiwyMDk3MiwyMTAxMywyMTE0OCwyMTE1OCwyMTE4NCwyMTIxMSwyMTI0OCwyMTI1NSwyMTI4NCwyMTM2MiwyMTM5NSwyMTQyNiwyMTQ2OSw2NDAxNCwyMTY2MCwyMTY0MiwyMTY3MywyMTc1OSwyMTg5NCwyMjM2MSwyMjM3MywyMjQ0NCwyMjQ3MiwyMjQ3MSw2NDAxNSw2NDAxNiwy''@;'; put 'put ''MjY4NiwyMjcwNiwyMjc5NSwyMjg2NywyMjg3NSwyMjg3NywyMjg4MywyMjk0OCwyMjk3MCwyMzM4MiwyMzQ4OCwyOTk5OSwyMzUxMiwyMzUzMiwyMzU4MiwyMzcxOCwyMzczOCwyMzc5NywyMzg0NywyMzg5MSw2NDAxNywyMzg3NCwyMzkxNywyMzk5MiwyMzk5MywyNDAxNiwyNDM1MywyNDM3''@;'; put 'put ''MiwyNDQyMywyNDUwMywyNDU0MiwyNDY2OSwyNDcwOSwyNDcxNCwyNDc5OCwyNDc4OSwyNDg2NCwyNDgxOCwyNDg0OSwyNDg4NywyNDg4MCwyNDk4NCwyNTEwNywyNTI1NCwyNTU4OSwyNTY5NiwyNTc1NywyNTgwNiwyNTkzNCwyNjExMiwyNjEzMywyNjE3MSwyNjEyMSwyNjE1OCwyNjE0Miwy''@;'; put 'put ''NjE0OCwyNjIxMywyNjE5OSwyNjIwMSw2NDAxOCwyNjIyNywyNjI2NSwyNjI3MiwyNjI5MCwyNjMwMywyNjM2MiwyNjM4Miw2Mzc4NSwyNjQ3MCwyNjU1NSwyNjcwNiwyNjU2MCwyNjYyNSwyNjY5MiwyNjgzMSw2NDAxOSwyNjk4NCw2NDAyMCwyNzAzMiwyNzEwNiwyNzE4NCwyNzI0MywyNzIw''@;'; put 'put ''NiwyNzI1MSwyNzI2MiwyNzM2MiwyNzM2NCwyNzYwNiwyNzcxMSwyNzc0MCwyNzc4MiwyNzc1OSwyNzg2NiwyNzkwOCwyODAzOSwyODAxNSwyODA1NCwyODA3NiwyODExMSwyODE1MiwyODE0NiwyODE1NiwyODIxNywyODI1MiwyODE5OSwyODIyMCwyODM1MSwyODU1MiwyODU5NywyODY2MSwy''@;'; put 'put ''ODY3NywyODY3OSwyODcxMiwyODgwNSwyODg0MywyODk0MywyODkzMiwyOTAyMCwyODk5OCwyODk5OSw2NDAyMSwyOTEyMSwyOTE4MiwyOTM2MSwyOTM3NCwyOTQ3Niw2NDAyMiwyOTU1OSwyOTYyOSwyOTY0MSwyOTY1NCwyOTY2NywyOTY1MCwyOTcwMywyOTY4NSwyOTczNCwyOTczOCwyOTcz''@;'; put 'put ''NywyOTc0MiwyOTc5NCwyOTgzMywyOTg1NSwyOTk1MywzMDA2MywzMDMzOCwzMDM2NCwzMDM2NiwzMDM2MywzMDM3NCw2NDAyMywzMDUzNCwyMTE2NywzMDc1MywzMDc5OCwzMDgyMCwzMDg0MiwzMTAyNCw2NDAyNCw2NDAyNSw2NDAyNiwzMTEyNCw2NDAyNywzMTEzMSwzMTQ0MSwzMTQ2Myw2''@;'; put 'put ''NDAyOCwzMTQ2NywzMTY0Niw2NDAyOSwzMjA3MiwzMjA5MiwzMjE4MywzMjE2MCwzMjIxNCwzMjMzOCwzMjU4MywzMjY3Myw2NDAzMCwzMzUzNywzMzYzNCwzMzY2MywzMzczNSwzMzc4MiwzMzg2NCwzMzk3MiwzNDEzMSwzNDEzNywzNDE1NSw2NDAzMSwzNDIyNCw2NDAzMiw2NDAzMywzNDgy''@;'; put 'put ''MywzNTA2MSwzNTM0NiwzNTM4MywzNTQ0OSwzNTQ5NSwzNTUxOCwzNTU1MSw2NDAzNCwzNTU3NCwzNTY2NywzNTcxMSwzNjA4MCwzNjA4NCwzNjExNCwzNjIxNCw2NDAzNSwzNjU1OSw2NDAzNiw2NDAzNywzNjk2NywzNzA4Niw2NDAzOCwzNzE0MSwzNzE1OSwzNzMzOCwzNzMzNSwzNzM0Miwz''@;'; put 'put ''NzM1NywzNzM1OCwzNzM0OCwzNzM0OSwzNzM4MiwzNzM5MiwzNzM4NiwzNzQzNCwzNzQ0MCwzNzQzNiwzNzQ1NCwzNzQ2NSwzNzQ1NywzNzQzMywzNzQ3OSwzNzU0MywzNzQ5NSwzNzQ5NiwzNzYwNywzNzU5MSwzNzU5MywzNzU4NCw2NDAzOSwzNzU4OSwzNzYwMCwzNzU4NywzNzY2OSwzNzY2''@;'; put 'put ''NSwzNzYyNyw2NDA0MCwzNzY2MiwzNzYzMSwzNzY2MSwzNzYzNCwzNzc0NCwzNzcxOSwzNzc5NiwzNzgzMCwzNzg1NCwzNzg4MCwzNzkzNywzNzk1NywzNzk2MCwzODI5MCw2Mzk2NCw2NDA0MSwzODU1NywzODU3NSwzODcwNywzODcxNSwzODcyMywzODczMywzODczNSwzODczNywzODc0MSwz''@;'; put 'put ''ODk5OSwzOTAxMyw2NDA0Miw2NDA0MywzOTIwNyw2NDA0NCwzOTMyNiwzOTUwMiwzOTY0MSwzOTY0NCwzOTc5NywzOTc5NCwzOTgyMywzOTg1NywzOTg2NywzOTkzNiw0MDMwNCw0MDI5OSw2NDA0NSw0MDQ3Myw0MDY1NyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGxdLGppczAyMTI6W251bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDcyOCw3MTEsMTg0LDcyOSw3MzMsMTc1LDczMSw3MzAsNjUzNzQsOTAwLDkwMSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMTYxLDE2Niwx''@;'; put 'put ''OTEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDE4NiwxNzAsMTY5LDE3NCw4NDgyLDE2NCw4NDcwLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; 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 ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw5MDIsOTA0LDkwNSw5MDYsOTM4LG51bGwsOTA4LG51bGwsOTEwLDkzOSxudWxsLDkxMSxudWxsLG51bGwsbnVsbCxudWxsLDk0MCw5NDEsOTQyLDk0Myw5NzAsOTEyLDk3Miw5NjIsOTczLDk3MSw5NDQsOTc0LG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCwxMDI2LDEwMjcsMTAyOCwxMDI5LDEwMzAsMTAzMSwxMDMyLDEwMzMsMTAzNCwxMDM1LDEwMzYsMTAzOCwxMDM5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwxMTA2LDExMDcsMTEwOCwxMTA5LDExMTAsMTExMSwxMTEyLDExMTMsMTExNCwxMTE1LDExMTYsMTExOCwxMTE5LG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMTk4LDI3MixudWxsLDI5NCxudWxsLDMwNixudWxsLDMyMSwzMTksbnVsbCwzMzAs''@;'; put 'put ''MjE2LDMzOCxudWxsLDM1OCwyMjIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyMzAsMjczLDI0MCwyOTUsMzA1LDMwNywzMTIsMzIyLDMyMCwzMjksMzMxLDI0OCwzMzksMjIzLDM1OSwyNTQs''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwxOTMsMTkyLDE5NiwxOTQsMjU4LDQ2MSwyNTYsMjYwLDE5NywxOTUsMjYyLDI2NCwyNjgsMTk5LDI2NiwyNzAsMjAxLDIwMCwyMDMsMjAyLDI4MiwyNzgsMjc0LDI4MCxudWxs''@;'; put 'put ''LDI4NCwyODYsMjkwLDI4OCwyOTIsMjA1LDIwNCwyMDcsMjA2LDQ2MywzMDQsMjk4LDMwMiwyOTYsMzA4LDMxMCwzMTMsMzE3LDMxNSwzMjMsMzI3LDMyNSwyMDksMjExLDIxMCwyMTQsMjEyLDQ2NSwzMzYsMzMyLDIxMywzNDAsMzQ0LDM0MiwzNDYsMzQ4LDM1MiwzNTAsMzU2LDM1NCwyMTgs''@;'; put 'put ''MjE3LDIyMCwyMTksMzY0LDQ2NywzNjgsMzYyLDM3MCwzNjYsMzYwLDQ3MSw0NzUsNDczLDQ2OSwzNzIsMjIxLDM3NiwzNzQsMzc3LDM4MSwzNzksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyMjUsMjI0LDIyOCwyMjYsMjU5LDQ2MiwyNTcsMjYxLDIyOSwyMjcsMjYzLDI2''@;'; put 'put ''NSwyNjksMjMxLDI2NywyNzEsMjMzLDIzMiwyMzUsMjM0LDI4MywyNzksMjc1LDI4MSw1MDEsMjg1LDI4NyxudWxsLDI4OSwyOTMsMjM3LDIzNiwyMzksMjM4LDQ2NCxudWxsLDI5OSwzMDMsMjk3LDMwOSwzMTEsMzE0LDMxOCwzMTYsMzI0LDMyOCwzMjYsMjQxLDI0MywyNDIsMjQ2LDI0NCw0''@;'; put 'put ''NjYsMzM3LDMzMywyNDUsMzQxLDM0NSwzNDMsMzQ3LDM0OSwzNTMsMzUxLDM1NywzNTUsMjUwLDI0OSwyNTIsMjUxLDM2NSw0NjgsMzY5LDM2MywzNzEsMzY3LDM2MSw0NzIsNDc2LDQ3NCw0NzAsMzczLDI1MywyNTUsMzc1LDM3OCwzODIsMzgwLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; 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 ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwxOTk3MCwxOTk3MiwxOTk3MywxOTk4MCwxOTk4NiwxOTk5OSwyMDAwMywyMDAwNCwyMDAwOCwyMDAxMSwyMDAxNCwyMDAxNSwyMDAxNiwyMDAyMSwyMDAzMiwy''@;'; put 'put ''MDAzMywyMDAzNiwyMDAzOSwyMDA0OSwyMDA1OCwyMDA2MCwyMDA2NywyMDA3MiwyMDA3MywyMDA4NCwyMDA4NSwyMDA4OSwyMDA5NSwyMDEwOSwyMDExOCwyMDExOSwyMDEyNSwyMDE0MywyMDE1MywyMDE2MywyMDE3NiwyMDE4NiwyMDE4NywyMDE5MiwyMDE5MywyMDE5NCwyMDIwMCwyMDIw''@;'; put 'put ''NywyMDIwOSwyMDIxMSwyMDIxMywyMDIyMSwyMDIyMiwyMDIyMywyMDIyNCwyMDIyNiwyMDIyNywyMDIzMiwyMDIzNSwyMDIzNiwyMDI0MiwyMDI0NSwyMDI0NiwyMDI0NywyMDI0OSwyMDI3MCwyMDI3MywyMDMyMCwyMDI3NSwyMDI3NywyMDI3OSwyMDI4MSwyMDI4MywyMDI4NiwyMDI4OCwy''@;'; put 'put ''MDI5MCwyMDI5NiwyMDI5NywyMDI5OSwyMDMwMCwyMDMwNiwyMDMwOCwyMDMxMCwyMDMxMiwyMDMxOSwyMDMyMywyMDMzMCwyMDMzMiwyMDMzNCwyMDMzNywyMDM0MywyMDM0NCwyMDM0NSwyMDM0NiwyMDM0OSwyMDM1MCwyMDM1MywyMDM1NCwyMDM1NiwyMDM1NywyMDM2MSwyMDM2MiwyMDM2''@;'; put 'put ''NCwyMDM2NiwyMDM2OCwyMDM3MCwyMDM3MSwyMDM3MiwyMDM3NSwyMDM3NywyMDM3OCwyMDM4MiwyMDM4MywyMDQwMiwyMDQwNywyMDQwOSwyMDQxMSwyMDQxMiwyMDQxMywyMDQxNCwyMDQxNiwyMDQxNywyMDQyMSwyMDQyMiwyMDQyNCwyMDQyNSwyMDQyNywyMDQyOCwyMDQyOSwyMDQzMSwy''@;'; put 'put ''MDQzNCwyMDQ0NCwyMDQ0OCwyMDQ1MCwyMDQ2NCwyMDQ2NiwyMDQ3NiwyMDQ3NywyMDQ3OSwyMDQ4MCwyMDQ4MSwyMDQ4NCwyMDQ4NywyMDQ5MCwyMDQ5MiwyMDQ5NCwyMDQ5NiwyMDQ5OSwyMDUwMywyMDUwNCwyMDUwNywyMDUwOCwyMDUwOSwyMDUxMCwyMDUxNCwyMDUxOSwyMDUyNiwyMDUy''@;'; put 'put ''OCwyMDUzMCwyMDUzMSwyMDUzMywyMDU0NCwyMDU0NSwyMDU0NiwyMDU0OSwyMDU1MCwyMDU1NCwyMDU1NiwyMDU1OCwyMDU2MSwyMDU2MiwyMDU2MywyMDU2NywyMDU2OSwyMDU3NSwyMDU3NiwyMDU3OCwyMDU3OSwyMDU4MiwyMDU4MywyMDU4NiwyMDU4OSwyMDU5MiwyMDU5MywyMDUzOSwy''@;'; put 'put ''MDYwOSwyMDYxMSwyMDYxMiwyMDYxNCwyMDYxOCwyMDYyMiwyMDYyMywyMDYyNCwyMDYyNiwyMDYyNywyMDYyOCwyMDYzMCwyMDYzNSwyMDYzNiwyMDYzOCwyMDYzOSwyMDY0MCwyMDY0MSwyMDY0MiwyMDY1MCwyMDY1NSwyMDY1NiwyMDY2NSwyMDY2NiwyMDY2OSwyMDY3MiwyMDY3NSwyMDY3''@;'; put 'put ''NiwyMDY3OSwyMDY4NCwyMDY4NiwyMDY4OCwyMDY5MSwyMDY5MiwyMDY5NiwyMDcwMCwyMDcwMSwyMDcwMywyMDcwNiwyMDcwOCwyMDcxMCwyMDcxMiwyMDcxMywyMDcxOSwyMDcyMSwyMDcyNiwyMDczMCwyMDczNCwyMDczOSwyMDc0MiwyMDc0MywyMDc0NCwyMDc0NywyMDc0OCwyMDc0OSwy''@;'; put 'put ''MDc1MCwyMDcyMiwyMDc1MiwyMDc1OSwyMDc2MSwyMDc2MywyMDc2NCwyMDc2NSwyMDc2NiwyMDc3MSwyMDc3NSwyMDc3NiwyMDc4MCwyMDc4MSwyMDc4MywyMDc4NSwyMDc4NywyMDc4OCwyMDc4OSwyMDc5MiwyMDc5MywyMDgwMiwyMDgxMCwyMDgxNSwyMDgxOSwyMDgyMSwyMDgyMywyMDgy''@;'; put 'put ''NCwyMDgzMSwyMDgzNiwyMDgzOCwyMDg2MiwyMDg2NywyMDg2OCwyMDg3NSwyMDg3OCwyMDg4OCwyMDg5MywyMDg5NywyMDg5OSwyMDkwOSwyMDkyMCwyMDkyMiwyMDkyNCwyMDkyNiwyMDkyNywyMDkzMCwyMDkzNiwyMDk0MywyMDk0NSwyMDk0NiwyMDk0NywyMDk0OSwyMDk1MiwyMDk1OCwy''@;'; put 'put ''MDk2MiwyMDk2NSwyMDk3NCwyMDk3OCwyMDk3OSwyMDk4MCwyMDk4MywyMDk5MywyMDk5NCwyMDk5NywyMTAxMCwyMTAxMSwyMTAxMywyMTAxNCwyMTAxNiwyMTAyNiwyMTAzMiwyMTA0MSwyMTA0MiwyMTA0NSwyMTA1MiwyMTA2MSwyMTA2NSwyMTA3NywyMTA3OSwyMTA4MCwyMTA4MiwyMTA4''@;'; put 'put ''NCwyMTA4NywyMTA4OCwyMTA4OSwyMTA5NCwyMTEwMiwyMTExMSwyMTExMiwyMTExMywyMTEyMCwyMTEyMiwyMTEyNSwyMTEzMCwyMTEzMiwyMTEzOSwyMTE0MSwyMTE0MiwyMTE0MywyMTE0NCwyMTE0NiwyMTE0OCwyMTE1NiwyMTE1NywyMTE1OCwyMTE1OSwyMTE2NywyMTE2OCwyMTE3NCwy''@;'; put 'put ''MTE3NSwyMTE3NiwyMTE3OCwyMTE3OSwyMTE4MSwyMTE4NCwyMTE4OCwyMTE5MCwyMTE5MiwyMTE5NiwyMTE5OSwyMTIwMSwyMTIwNCwyMTIwNiwyMTIxMSwyMTIxMiwyMTIxNywyMTIyMSwyMTIyNCwyMTIyNSwyMTIyNiwyMTIyOCwyMTIzMiwyMTIzMywyMTIzNiwyMTIzOCwyMTIzOSwyMTI0''@;'; put 'put ''OCwyMTI1MSwyMTI1OCwyMTI1OSwyMTI2MCwyMTI2NSwyMTI2NywyMTI3MiwyMTI3NSwyMTI3NiwyMTI3OCwyMTI3OSwyMTI4NSwyMTI4NywyMTI4OCwyMTI4OSwyMTI5MSwyMTI5MiwyMTI5MywyMTI5NiwyMTI5OCwyMTMwMSwyMTMwOCwyMTMwOSwyMTMxMCwyMTMxNCwyMTMyNCwyMTMyMywy''@;'; put 'put ''MTMzNywyMTMzOSwyMTM0NSwyMTM0NywyMTM0OSwyMTM1NiwyMTM1NywyMTM2MiwyMTM2OSwyMTM3NCwyMTM3OSwyMTM4MywyMTM4NCwyMTM5MCwyMTM5NSwyMTM5NiwyMTQwMSwyMTQwNSwyMTQwOSwyMTQxMiwyMTQxOCwyMTQxOSwyMTQyMywyMTQyNiwyMTQyOCwyMTQyOSwyMTQzMSwyMTQz''@;'; put 'put ''MiwyMTQzNCwyMTQzNywyMTQ0MCwyMTQ0NSwyMTQ1NSwyMTQ1OCwyMTQ1OSwyMTQ2MSwyMTQ2NiwyMTQ2OSwyMTQ3MCwyMTQ3MiwyMTQ3OCwyMTQ3OSwyMTQ5MywyMTUwNiwyMTUyMywyMTUzMCwyMTUzNywyMTU0MywyMTU0NCwyMTU0NiwyMTU1MSwyMTU1MywyMTU1NiwyMTU1NywyMTU3MSwy''@;'; put 'put ''MTU3MiwyMTU3NSwyMTU4MSwyMTU4MywyMTU5OCwyMTYwMiwyMTYwNCwyMTYwNiwyMTYwNywyMTYwOSwyMTYxMSwyMTYxMywyMTYxNCwyMTYyMCwyMTYzMSwyMTYzMywyMTYzNSwyMTYzNywyMTY0MCwyMTY0MSwyMTY0NSwyMTY0OSwyMTY1MywyMTY1NCwyMTY2MCwyMTY2MywyMTY2NSwyMTY3''@;'; put 'put ''MCwyMTY3MSwyMTY3MywyMTY3NCwyMTY3NywyMTY3OCwyMTY4MSwyMTY4NywyMTY4OSwyMTY5MCwyMTY5MSwyMTY5NSwyMTcwMiwyMTcwNiwyMTcwOSwyMTcxMCwyMTcyOCwyMTczOCwyMTc0MCwyMTc0MywyMTc1MCwyMTc1NiwyMTc1OCwyMTc1OSwyMTc2MCwyMTc2MSwyMTc2NSwyMTc2OCwy''@;'; put 'put ''MTc2OSwyMTc3MiwyMTc3MywyMTc3NCwyMTc4MSwyMTgwMiwyMTgwMywyMTgxMCwyMTgxMywyMTgxNCwyMTgxOSwyMTgyMCwyMTgyMSwyMTgyNSwyMTgzMSwyMTgzMywyMTgzNCwyMTgzNywyMTg0MCwyMTg0MSwyMTg0OCwyMTg1MCwyMTg1MSwyMTg1NCwyMTg1NiwyMTg1NywyMTg2MCwyMTg2''@;'; put 'put ''MiwyMTg4NywyMTg4OSwyMTg5MCwyMTg5NCwyMTg5NiwyMTkwMiwyMTkwMywyMTkwNSwyMTkwNiwyMTkwNywyMTkwOCwyMTkxMSwyMTkyMywyMTkyNCwyMTkzMywyMTkzOCwyMTk1MSwyMTk1MywyMTk1NSwyMTk1OCwyMTk2MSwyMTk2MywyMTk2NCwyMTk2NiwyMTk2OSwyMTk3MCwyMTk3MSwy''@;'; put 'put ''MTk3NSwyMTk3NiwyMTk3OSwyMTk4MiwyMTk4NiwyMTk5MywyMjAwNiwyMjAxNSwyMjAyMSwyMjAyNCwyMjAyNiwyMjAyOSwyMjAzMCwyMjAzMSwyMjAzMiwyMjAzMywyMjAzNCwyMjA0MSwyMjA2MCwyMjA2NCwyMjA2NywyMjA2OSwyMjA3MSwyMjA3MywyMjA3NSwyMjA3NiwyMjA3NywyMjA3''@;'; put 'put ''OSwyMjA4MCwyMjA4MSwyMjA4MywyMjA4NCwyMjA4NiwyMjA4OSwyMjA5MSwyMjA5MywyMjA5NSwyMjEwMCwyMjExMCwyMjExMiwyMjExMywyMjExNCwyMjExNSwyMjExOCwyMjEyMSwyMjEyNSwyMjEyNywyMjEyOSwyMjEzMCwyMjEzMywyMjE0OCwyMjE0OSwyMjE1MiwyMjE1NSwyMjE1Niwy''@;'; put 'put ''MjE2NSwyMjE2OSwyMjE3MCwyMjE3MywyMjE3NCwyMjE3NSwyMjE4MiwyMjE4MywyMjE4NCwyMjE4NSwyMjE4NywyMjE4OCwyMjE4OSwyMjE5MywyMjE5NSwyMjE5OSwyMjIwNiwyMjIxMywyMjIxNywyMjIxOCwyMjIxOSwyMjIyMywyMjIyNCwyMjIyMCwyMjIyMSwyMjIzMywyMjIzNiwyMjIz''@;'; put 'put ''NywyMjIzOSwyMjI0MSwyMjI0NCwyMjI0NSwyMjI0NiwyMjI0NywyMjI0OCwyMjI1NywyMjI1MSwyMjI1MywyMjI2MiwyMjI2MywyMjI3MywyMjI3NCwyMjI3OSwyMjI4MiwyMjI4NCwyMjI4OSwyMjI5MywyMjI5OCwyMjI5OSwyMjMwMSwyMjMwNCwyMjMwNiwyMjMwNywyMjMwOCwyMjMwOSwy''@;'; put 'put ''MjMxMywyMjMxNCwyMjMxNiwyMjMxOCwyMjMxOSwyMjMyMywyMjMyNCwyMjMzMywyMjMzNCwyMjMzNSwyMjM0MSwyMjM0MiwyMjM0OCwyMjM0OSwyMjM1NCwyMjM3MCwyMjM3MywyMjM3NSwyMjM3NiwyMjM3OSwyMjM4MSwyMjM4MiwyMjM4MywyMjM4NCwyMjM4NSwyMjM4NywyMjM4OCwyMjM4''@;'; put 'put ''OSwyMjM5MSwyMjM5MywyMjM5NCwyMjM5NSwyMjM5NiwyMjM5OCwyMjQwMSwyMjQwMywyMjQxMiwyMjQyMCwyMjQyMywyMjQyNSwyMjQyNiwyMjQyOCwyMjQyOSwyMjQzMCwyMjQzMSwyMjQzMywyMjQyMSwyMjQzOSwyMjQ0MCwyMjQ0MSwyMjQ0NCwyMjQ1NiwyMjQ2MSwyMjQ3MSwyMjQ3Miwy''@;'; put 'put ''MjQ3NiwyMjQ3OSwyMjQ4NSwyMjQ5MywyMjQ5NCwyMjUwMCwyMjUwMiwyMjUwMywyMjUwNSwyMjUwOSwyMjUxMiwyMjUxNywyMjUxOCwyMjUyMCwyMjUyNSwyMjUyNiwyMjUyNywyMjUzMSwyMjUzMiwyMjUzNiwyMjUzNywyMjQ5NywyMjU0MCwyMjU0MSwyMjU1NSwyMjU1OCwyMjU1OSwyMjU2''@;'; put 'put ''MCwyMjU2NiwyMjU2NywyMjU3MywyMjU3OCwyMjU4NSwyMjU5MSwyMjYwMSwyMjYwNCwyMjYwNSwyMjYwNywyMjYwOCwyMjYxMywyMjYyMywyMjYyNSwyMjYyOCwyMjYzMSwyMjYzMiwyMjY0OCwyMjY1MiwyMjY1NSwyMjY1NiwyMjY1NywyMjY2MywyMjY2NCwyMjY2NSwyMjY2NiwyMjY2OCwy''@;'; put 'put ''MjY2OSwyMjY3MSwyMjY3MiwyMjY3NiwyMjY3OCwyMjY4NSwyMjY4OCwyMjY4OSwyMjY5MCwyMjY5NCwyMjY5NywyMjcwNSwyMjcwNiwyMjcyNCwyMjcxNiwyMjcyMiwyMjcyOCwyMjczMywyMjczNCwyMjczNiwyMjczOCwyMjc0MCwyMjc0MiwyMjc0NiwyMjc0OSwyMjc1MywyMjc1NCwyMjc2''@;'; put 'put ''MSwyMjc3MSwyMjc4OSwyMjc5MCwyMjc5NSwyMjc5NiwyMjgwMiwyMjgwMywyMjgwNCwzNDM2OSwyMjgxMywyMjgxNywyMjgxOSwyMjgyMCwyMjgyNCwyMjgzMSwyMjgzMiwyMjgzNSwyMjgzNywyMjgzOCwyMjg0NywyMjg1MSwyMjg1NCwyMjg2NiwyMjg2NywyMjg3MywyMjg3NSwyMjg3Nywy''@;'; put 'put ''Mjg3OCwyMjg3OSwyMjg4MSwyMjg4MywyMjg5MSwyMjg5MywyMjg5NSwyMjg5OCwyMjkwMSwyMjkwMiwyMjkwNSwyMjkwNywyMjkwOCwyMjkyMywyMjkyNCwyMjkyNiwyMjkzMCwyMjkzMywyMjkzNSwyMjk0MywyMjk0OCwyMjk1MSwyMjk1NywyMjk1OCwyMjk1OSwyMjk2MCwyMjk2MywyMjk2''@;'; put 'put ''NywyMjk3MCwyMjk3MiwyMjk3NywyMjk3OSwyMjk4MCwyMjk4NCwyMjk4NiwyMjk4OSwyMjk5NCwyMzAwNSwyMzAwNiwyMzAwNywyMzAxMSwyMzAxMiwyMzAxNSwyMzAyMiwyMzAyMywyMzAyNSwyMzAyNiwyMzAyOCwyMzAzMSwyMzA0MCwyMzA0NCwyMzA1MiwyMzA1MywyMzA1NCwyMzA1OCwy''@;'; put 'put ''MzA1OSwyMzA3MCwyMzA3NSwyMzA3NiwyMzA3OSwyMzA4MCwyMzA4MiwyMzA4NSwyMzA4OCwyMzEwOCwyMzEwOSwyMzExMSwyMzExMiwyMzExNiwyMzEyMCwyMzEyNSwyMzEzNCwyMzEzOSwyMzE0MSwyMzE0MywyMzE0OSwyMzE1OSwyMzE2MiwyMzE2MywyMzE2NiwyMzE3OSwyMzE4NCwyMzE4''@;'; put 'put ''NywyMzE5MCwyMzE5MywyMzE5NiwyMzE5OCwyMzE5OSwyMzIwMCwyMzIwMiwyMzIwNywyMzIxMiwyMzIxNywyMzIxOCwyMzIxOSwyMzIyMSwyMzIyNCwyMzIyNiwyMzIyNywyMzIzMSwyMzIzNiwyMzIzOCwyMzI0MCwyMzI0NywyMzI1OCwyMzI2MCwyMzI2NCwyMzI2OSwyMzI3NCwyMzI3OCwy''@;'; put 'put ''MzI4NSwyMzI4NiwyMzI5MywyMzI5NiwyMzI5NywyMzMwNCwyMzMxOSwyMzM0OCwyMzMyMSwyMzMyMywyMzMyNSwyMzMyOSwyMzMzMywyMzM0MSwyMzM1MiwyMzM2MSwyMzM3MSwyMzM3MiwyMzM3OCwyMzM4MiwyMzM5MCwyMzQwMCwyMzQwNiwyMzQwNywyMzQyMCwyMzQyMSwyMzQyMiwyMzQy''@;'; put 'put ''MywyMzQyNSwyMzQyOCwyMzQzMCwyMzQzNCwyMzQzOCwyMzQ0MCwyMzQ0MSwyMzQ0MywyMzQ0NCwyMzQ0NiwyMzQ2NCwyMzQ2NSwyMzQ2OCwyMzQ2OSwyMzQ3MSwyMzQ3MywyMzQ3NCwyMzQ3OSwyMzQ4MiwyMzQ4NCwyMzQ4OCwyMzQ4OSwyMzUwMSwyMzUwMywyMzUxMCwyMzUxMSwyMzUxMiwy''@;'; put 'put ''MzUxMywyMzUxNCwyMzUyMCwyMzUzNSwyMzUzNywyMzU0MCwyMzU0OSwyMzU2NCwyMzU3NSwyMzU4MiwyMzU4MywyMzU4NywyMzU5MCwyMzU5MywyMzU5NSwyMzU5NiwyMzU5OCwyMzYwMCwyMzYwMiwyMzYwNSwyMzYwNiwyMzY0MSwyMzY0MiwyMzY0NCwyMzY1MCwyMzY1MSwyMzY1NSwyMzY1''@;'; put 'put ''NiwyMzY1NywyMzY2MSwyMzY2NCwyMzY2OCwyMzY2OSwyMzY3NCwyMzY3NSwyMzY3NiwyMzY3NywyMzY4NywyMzY4OCwyMzY5MCwyMzY5NSwyMzY5OCwyMzcwOSwyMzcxMSwyMzcxMiwyMzcxNCwyMzcxNSwyMzcxOCwyMzcyMiwyMzczMCwyMzczMiwyMzczMywyMzczOCwyMzc1MywyMzc1NSwy''@;'; put 'put ''Mzc2MiwyMzc3MywyMzc2NywyMzc5MCwyMzc5MywyMzc5NCwyMzc5NiwyMzgwOSwyMzgxNCwyMzgyMSwyMzgyNiwyMzg1MSwyMzg0MywyMzg0NCwyMzg0NiwyMzg0NywyMzg1NywyMzg2MCwyMzg2NSwyMzg2OSwyMzg3MSwyMzg3NCwyMzg3NSwyMzg3OCwyMzg4MCwyMzg5MywyMzg4OSwyMzg5''@;'; put 'put ''NywyMzg4MiwyMzkwMywyMzkwNCwyMzkwNSwyMzkwNiwyMzkwOCwyMzkxNCwyMzkxNywyMzkyMCwyMzkyOSwyMzkzMCwyMzkzNCwyMzkzNSwyMzkzNywyMzkzOSwyMzk0NCwyMzk0NiwyMzk1NCwyMzk1NSwyMzk1NiwyMzk1NywyMzk2MSwyMzk2MywyMzk2NywyMzk2OCwyMzk3NSwyMzk3OSwy''@;'; put 'put ''Mzk4NCwyMzk4OCwyMzk5MiwyMzk5MywyNDAwMywyNDAwNywyNDAxMSwyNDAxNiwyNDAxNCwyNDAyNCwyNDAyNSwyNDAzMiwyNDAzNiwyNDA0MSwyNDA1NiwyNDA1NywyNDA2NCwyNDA3MSwyNDA3NywyNDA4MiwyNDA4NCwyNDA4NSwyNDA4OCwyNDA5NSwyNDA5NiwyNDExMCwyNDEwNCwyNDEx''@;'; put 'put ''NCwyNDExNywyNDEyNiwyNDEzOSwyNDE0NCwyNDEzNywyNDE0NSwyNDE1MCwyNDE1MiwyNDE1NSwyNDE1NiwyNDE1OCwyNDE2OCwyNDE3MCwyNDE3MSwyNDE3MiwyNDE3MywyNDE3NCwyNDE3NiwyNDE5MiwyNDIwMywyNDIwNiwyNDIyNiwyNDIyOCwyNDIyOSwyNDIzMiwyNDIzNCwyNDIzNiwy''@;'; put 'put ''NDI0MSwyNDI0MywyNDI1MywyNDI1NCwyNDI1NSwyNDI2MiwyNDI2OCwyNDI2NywyNDI3MCwyNDI3MywyNDI3NCwyNDI3NiwyNDI3NywyNDI4NCwyNDI4NiwyNDI5MywyNDI5OSwyNDMyMiwyNDMyNiwyNDMyNywyNDMyOCwyNDMzNCwyNDM0NSwyNDM0OCwyNDM0OSwyNDM1MywyNDM1NCwyNDM1''@;'; put 'put ''NSwyNDM1NiwyNDM2MCwyNDM2MywyNDM2NCwyNDM2NiwyNDM2OCwyNDM3MiwyNDM3NCwyNDM3OSwyNDM4MSwyNDM4MywyNDM4NCwyNDM4OCwyNDM4OSwyNDM5MSwyNDM5NywyNDQwMCwyNDQwNCwyNDQwOCwyNDQxMSwyNDQxNiwyNDQxOSwyNDQyMCwyNDQyMywyNDQzMSwyNDQzNCwyNDQzNiwy''@;'; put 'put ''NDQzNywyNDQ0MCwyNDQ0MiwyNDQ0NSwyNDQ0NiwyNDQ1NywyNDQ2MSwyNDQ2MywyNDQ3MCwyNDQ3NiwyNDQ3NywyNDQ4MiwyNDQ4NywyNDQ5MSwyNDQ4NCwyNDQ5MiwyNDQ5NSwyNDQ5NiwyNDQ5NywyNDUwNCwyNDUxNiwyNDUxOSwyNDUyMCwyNDUyMSwyNDUyMywyNDUyOCwyNDUyOSwyNDUz''@;'; put 'put ''MCwyNDUzMSwyNDUzMiwyNDU0MiwyNDU0NSwyNDU0NiwyNDU1MiwyNDU1MywyNDU1NCwyNDU1NiwyNDU1NywyNDU1OCwyNDU1OSwyNDU2MiwyNDU2MywyNDU2NiwyNDU3MCwyNDU3MiwyNDU4MywyNDU4NiwyNDU4OSwyNDU5NSwyNDU5NiwyNDU5OSwyNDYwMCwyNDYwMiwyNDYwNywyNDYxMiwy''@;'; put 'put ''NDYyMSwyNDYyNywyNDYyOSwyNDY0MCwyNDY0NywyNDY0OCwyNDY0OSwyNDY1MiwyNDY1NywyNDY2MCwyNDY2MiwyNDY2MywyNDY2OSwyNDY3MywyNDY3OSwyNDY4OSwyNDcwMiwyNDcwMywyNDcwNiwyNDcxMCwyNDcxMiwyNDcxNCwyNDcxOCwyNDcyMSwyNDcyMywyNDcyNSwyNDcyOCwyNDcz''@;'; put 'put ''MywyNDczNCwyNDczOCwyNDc0MCwyNDc0MSwyNDc0NCwyNDc1MiwyNDc1MywyNDc1OSwyNDc2MywyNDc2NiwyNDc3MCwyNDc3MiwyNDc3NiwyNDc3NywyNDc3OCwyNDc3OSwyNDc4MiwyNDc4MywyNDc4OCwyNDc4OSwyNDc5MywyNDc5NSwyNDc5NywyNDc5OCwyNDgwMiwyNDgwNSwyNDgxOCwy''@;'; put 'put ''NDgyMSwyNDgyNCwyNDgyOCwyNDgyOSwyNDgzNCwyNDgzOSwyNDg0MiwyNDg0NCwyNDg0OCwyNDg0OSwyNDg1MCwyNDg1MSwyNDg1MiwyNDg1NCwyNDg1NSwyNDg1NywyNDg2MCwyNDg2MiwyNDg2NiwyNDg3NCwyNDg3NSwyNDg4MCwyNDg4MSwyNDg4NSwyNDg4NiwyNDg4NywyNDg4OSwyNDg5''@;'; put 'put ''NywyNDkwMSwyNDkwMiwyNDkwNSwyNDkyNiwyNDkyOCwyNDk0MCwyNDk0NiwyNDk1MiwyNDk1NSwyNDk1NiwyNDk1OSwyNDk2MCwyNDk2MSwyNDk2MywyNDk2NCwyNDk3MSwyNDk3MywyNDk3OCwyNDk3OSwyNDk4MywyNDk4NCwyNDk4OCwyNDk4OSwyNDk5MSwyNDk5MiwyNDk5NywyNWUzLDI1''@;'; put 'put ''MDAyLDI1MDA1LDI1MDE2LDI1MDE3LDI1MDIwLDI1MDI0LDI1MDI1LDI1MDI2LDI1MDM4LDI1MDM5LDI1MDQ1LDI1MDUyLDI1MDUzLDI1MDU0LDI1MDU1LDI1MDU3LDI1MDU4LDI1MDYzLDI1MDY1LDI1MDYxLDI1MDY4LDI1MDY5LDI1MDcxLDI1MDg5LDI1MDkxLDI1MDkyLDI1MDk1LDI1MTA3''@;'; put 'put ''LDI1MTA5LDI1MTE2LDI1MTIwLDI1MTIyLDI1MTIzLDI1MTI3LDI1MTI5LDI1MTMxLDI1MTQ1LDI1MTQ5LDI1MTU0LDI1MTU1LDI1MTU2LDI1MTU4LDI1MTY0LDI1MTY4LDI1MTY5LDI1MTcwLDI1MTcyLDI1MTc0LDI1MTc4LDI1MTgwLDI1MTg4LDI1MTk3LDI1MTk5LDI1MjAzLDI1MjEwLDI1''@;'; put 'put ''MjEzLDI1MjI5LDI1MjMwLDI1MjMxLDI1MjMyLDI1MjU0LDI1MjU2LDI1MjY3LDI1MjcwLDI1MjcxLDI1Mjc0LDI1Mjc4LDI1Mjc5LDI1Mjg0LDI1Mjk0LDI1MzAxLDI1MzAyLDI1MzA2LDI1MzIyLDI1MzMwLDI1MzMyLDI1MzQwLDI1MzQxLDI1MzQ3LDI1MzQ4LDI1MzU0LDI1MzU1LDI1MzU3''@;'; put 'put ''LDI1MzYwLDI1MzYzLDI1MzY2LDI1MzY4LDI1Mzg1LDI1Mzg2LDI1Mzg5LDI1Mzk3LDI1Mzk4LDI1NDAxLDI1NDA0LDI1NDA5LDI1NDEwLDI1NDExLDI1NDEyLDI1NDE0LDI1NDE4LDI1NDE5LDI1NDIyLDI1NDI2LDI1NDI3LDI1NDI4LDI1NDMyLDI1NDM1LDI1NDQ1LDI1NDQ2LDI1NDUyLDI1''@;'; put 'put ''NDUzLDI1NDU3LDI1NDYwLDI1NDYxLDI1NDY0LDI1NDY4LDI1NDY5LDI1NDcxLDI1NDc0LDI1NDc2LDI1NDc5LDI1NDgyLDI1NDg4LDI1NDkyLDI1NDkzLDI1NDk3LDI1NDk4LDI1NTAyLDI1NTA4LDI1NTEwLDI1NTE3LDI1NTE4LDI1NTE5LDI1NTMzLDI1NTM3LDI1NTQxLDI1NTQ0LDI1NTUw''@;'; put 'put ''LDI1NTUzLDI1NTU1LDI1NTU2LDI1NTU3LDI1NTY0LDI1NTY4LDI1NTczLDI1NTc4LDI1NTgwLDI1NTg2LDI1NTg3LDI1NTg5LDI1NTkyLDI1NTkzLDI1NjA5LDI1NjEwLDI1NjE2LDI1NjE4LDI1NjIwLDI1NjI0LDI1NjMwLDI1NjMyLDI1NjM0LDI1NjM2LDI1NjM3LDI1NjQxLDI1NjQyLDI1''@;'; put 'put ''NjQ3LDI1NjQ4LDI1NjUzLDI1NjYxLDI1NjYzLDI1Njc1LDI1Njc5LDI1NjgxLDI1NjgyLDI1NjgzLDI1Njg0LDI1NjkwLDI1NjkxLDI1NjkyLDI1NjkzLDI1Njk1LDI1Njk2LDI1Njk3LDI1Njk5LDI1NzA5LDI1NzE1LDI1NzE2LDI1NzIzLDI1NzI1LDI1NzMzLDI1NzM1LDI1NzQzLDI1NzQ0''@;'; put 'put ''LDI1NzQ1LDI1NzUyLDI1NzUzLDI1NzU1LDI1NzU3LDI1NzU5LDI1NzYxLDI1NzYzLDI1NzY2LDI1NzY4LDI1NzcyLDI1Nzc5LDI1Nzg5LDI1NzkwLDI1NzkxLDI1Nzk2LDI1ODAxLDI1ODAyLDI1ODAzLDI1ODA0LDI1ODA2LDI1ODA4LDI1ODA5LDI1ODEzLDI1ODE1LDI1ODI4LDI1ODI5LDI1''@;'; put 'put ''ODMzLDI1ODM0LDI1ODM3LDI1ODQwLDI1ODQ1LDI1ODQ3LDI1ODUxLDI1ODU1LDI1ODU3LDI1ODYwLDI1ODY0LDI1ODY1LDI1ODY2LDI1ODcxLDI1ODc1LDI1ODc2LDI1ODc4LDI1ODgxLDI1ODgzLDI1ODg2LDI1ODg3LDI1ODkwLDI1ODk0LDI1ODk3LDI1OTAyLDI1OTA1LDI1OTE0LDI1OTE2''@;'; put 'put ''LDI1OTE3LDI1OTIzLDI1OTI3LDI1OTI5LDI1OTM2LDI1OTM4LDI1OTQwLDI1OTUxLDI1OTUyLDI1OTU5LDI1OTYzLDI1OTc4LDI1OTgxLDI1OTg1LDI1OTg5LDI1OTk0LDI2MDAyLDI2MDA1LDI2MDA4LDI2MDEzLDI2MDE2LDI2MDE5LDI2MDIyLDI2MDMwLDI2MDM0LDI2MDM1LDI2MDM2LDI2''@;'; put 'put ''MDQ3LDI2MDUwLDI2MDU2LDI2MDU3LDI2MDYyLDI2MDY0LDI2MDY4LDI2MDcwLDI2MDcyLDI2MDc5LDI2MDk2LDI2MDk4LDI2MTAwLDI2MTAxLDI2MTA1LDI2MTEwLDI2MTExLDI2MTEyLDI2MTE2LDI2MTIwLDI2MTIxLDI2MTI1LDI2MTI5LDI2MTMwLDI2MTMzLDI2MTM0LDI2MTQxLDI2MTQy''@;'; put 'put ''LDI2MTQ1LDI2MTQ2LDI2MTQ3LDI2MTQ4LDI2MTUwLDI2MTUzLDI2MTU0LDI2MTU1LDI2MTU2LDI2MTU4LDI2MTYwLDI2MTYxLDI2MTYzLDI2MTY5LDI2MTY3LDI2MTc2LDI2MTgxLDI2MTgyLDI2MTg2LDI2MTg4LDI2MTkzLDI2MTkwLDI2MTk5LDI2MjAwLDI2MjAxLDI2MjAzLDI2MjA0LDI2''@;'; put 'put ''MjA4LDI2MjA5LDI2MzYzLDI2MjE4LDI2MjE5LDI2MjIwLDI2MjM4LDI2MjI3LDI2MjI5LDI2MjM5LDI2MjMxLDI2MjMyLDI2MjMzLDI2MjM1LDI2MjQwLDI2MjM2LDI2MjUxLDI2MjUyLDI2MjUzLDI2MjU2LDI2MjU4LDI2MjY1LDI2MjY2LDI2MjY3LDI2MjY4LDI2MjcxLDI2MjcyLDI2Mjc2''@;'; put 'put ''LDI2Mjg1LDI2Mjg5LDI2MjkwLDI2MjkzLDI2Mjk5LDI2MzAzLDI2MzA0LDI2MzA2LDI2MzA3LDI2MzEyLDI2MzE2LDI2MzE4LDI2MzE5LDI2MzI0LDI2MzMxLDI2MzM1LDI2MzQ0LDI2MzQ3LDI2MzQ4LDI2MzUwLDI2MzYyLDI2MzczLDI2Mzc1LDI2MzgyLDI2Mzg3LDI2MzkzLDI2Mzk2LDI2''@;'; put 'put ''NDAwLDI2NDAyLDI2NDE5LDI2NDMwLDI2NDM3LDI2NDM5LDI2NDQwLDI2NDQ0LDI2NDUyLDI2NDUzLDI2NDYxLDI2NDcwLDI2NDc2LDI2NDc4LDI2NDg0LDI2NDg2LDI2NDkxLDI2NDk3LDI2NTAwLDI2NTEwLDI2NTExLDI2NTEzLDI2NTE1LDI2NTE4LDI2NTIwLDI2NTIxLDI2NTIzLDI2NTQ0''@;'; put 'put ''LDI2NTQ1LDI2NTQ2LDI2NTQ5LDI2NTU1LDI2NTU2LDI2NTU3LDI2NjE3LDI2NTYwLDI2NTYyLDI2NTYzLDI2NTY1LDI2NTY4LDI2NTY5LDI2NTc4LDI2NTgzLDI2NTg1LDI2NTg4LDI2NTkzLDI2NTk4LDI2NjA4LDI2NjEwLDI2NjE0LDI2NjE1LDI2NzA2LDI2NjQ0LDI2NjQ5LDI2NjUzLDI2''@;'; put 'put ''NjU1LDI2NjY0LDI2NjYzLDI2NjY4LDI2NjY5LDI2NjcxLDI2NjcyLDI2NjczLDI2Njc1LDI2NjgzLDI2Njg3LDI2NjkyLDI2NjkzLDI2Njk4LDI2NzAwLDI2NzA5LDI2NzExLDI2NzEyLDI2NzE1LDI2NzMxLDI2NzM0LDI2NzM1LDI2NzM2LDI2NzM3LDI2NzM4LDI2NzQxLDI2NzQ1LDI2NzQ2''@;'; put 'put ''LDI2NzQ3LDI2NzQ4LDI2NzU0LDI2NzU2LDI2NzU4LDI2NzYwLDI2Nzc0LDI2Nzc2LDI2Nzc4LDI2NzgwLDI2Nzg1LDI2Nzg3LDI2Nzg5LDI2NzkzLDI2Nzk0LDI2Nzk4LDI2ODAyLDI2ODExLDI2ODIxLDI2ODI0LDI2ODI4LDI2ODMxLDI2ODMyLDI2ODMzLDI2ODM1LDI2ODM4LDI2ODQxLDI2''@;'; put 'put ''ODQ0LDI2ODQ1LDI2ODUzLDI2ODU2LDI2ODU4LDI2ODU5LDI2ODYwLDI2ODYxLDI2ODY0LDI2ODY1LDI2ODY5LDI2ODcwLDI2ODc1LDI2ODc2LDI2ODc3LDI2ODg2LDI2ODg5LDI2ODkwLDI2ODk2LDI2ODk3LDI2ODk5LDI2OTAyLDI2OTAzLDI2OTI5LDI2OTMxLDI2OTMzLDI2OTM2LDI2OTM5''@;'; put 'put ''LDI2OTQ2LDI2OTQ5LDI2OTUzLDI2OTU4LDI2OTY3LDI2OTcxLDI2OTc5LDI2OTgwLDI2OTgxLDI2OTgyLDI2OTg0LDI2OTg1LDI2OTg4LDI2OTkyLDI2OTkzLDI2OTk0LDI3MDAyLDI3MDAzLDI3MDA3LDI3MDA4LDI3MDIxLDI3MDI2LDI3MDMwLDI3MDMyLDI3MDQxLDI3MDQ1LDI3MDQ2LDI3''@;'; put 'put ''MDQ4LDI3MDUxLDI3MDUzLDI3MDU1LDI3MDYzLDI3MDY0LDI3MDY2LDI3MDY4LDI3MDc3LDI3MDgwLDI3MDg5LDI3MDk0LDI3MDk1LDI3MTA2LDI3MTA5LDI3MTE4LDI3MTE5LDI3MTIxLDI3MTIzLDI3MTI1LDI3MTM0LDI3MTM2LDI3MTM3LDI3MTM5LDI3MTUxLDI3MTUzLDI3MTU3LDI3MTYy''@;'; put 'put ''LDI3MTY1LDI3MTY4LDI3MTcyLDI3MTc2LDI3MTg0LDI3MTg2LDI3MTg4LDI3MTkxLDI3MTk1LDI3MTk4LDI3MTk5LDI3MjA1LDI3MjA2LDI3MjA5LDI3MjEwLDI3MjE0LDI3MjE2LDI3MjE3LDI3MjE4LDI3MjIxLDI3MjIyLDI3MjI3LDI3MjM2LDI3MjM5LDI3MjQyLDI3MjQ5LDI3MjUxLDI3''@;'; put 'put ''MjYyLDI3MjY1LDI3MjY3LDI3MjcwLDI3MjcxLDI3MjczLDI3Mjc1LDI3MjgxLDI3MjkxLDI3MjkzLDI3Mjk0LDI3Mjk1LDI3MzAxLDI3MzA3LDI3MzExLDI3MzEyLDI3MzEzLDI3MzE2LDI3MzI1LDI3MzI2LDI3MzI3LDI3MzM0LDI3MzM3LDI3MzM2LDI3MzQwLDI3MzQ0LDI3MzQ4LDI3MzQ5''@;'; put 'put ''LDI3MzUwLDI3MzU2LDI3MzU3LDI3MzY0LDI3MzY3LDI3MzcyLDI3Mzc2LDI3Mzc3LDI3Mzc4LDI3Mzg4LDI3Mzg5LDI3Mzk0LDI3Mzk1LDI3Mzk4LDI3Mzk5LDI3NDAxLDI3NDA3LDI3NDA4LDI3NDA5LDI3NDE1LDI3NDE5LDI3NDIyLDI3NDI4LDI3NDMyLDI3NDM1LDI3NDM2LDI3NDM5LDI3''@;'; put 'put ''NDQ1LDI3NDQ2LDI3NDUxLDI3NDU1LDI3NDYyLDI3NDY2LDI3NDY5LDI3NDc0LDI3NDc4LDI3NDgwLDI3NDg1LDI3NDg4LDI3NDk1LDI3NDk5LDI3NTAyLDI3NTA0LDI3NTA5LDI3NTE3LDI3NTE4LDI3NTIyLDI3NTI1LDI3NTQzLDI3NTQ3LDI3NTUxLDI3NTUyLDI3NTU0LDI3NTU1LDI3NTYw''@;'; put 'put ''LDI3NTYxLDI3NTY0LDI3NTY1LDI3NTY2LDI3NTY4LDI3NTc2LDI3NTc3LDI3NTgxLDI3NTgyLDI3NTg3LDI3NTg4LDI3NTkzLDI3NTk2LDI3NjA2LDI3NjEwLDI3NjE3LDI3NjE5LDI3NjIyLDI3NjIzLDI3NjMwLDI3NjMzLDI3NjM5LDI3NjQxLDI3NjQ3LDI3NjUwLDI3NjUyLDI3NjUzLDI3''@;'; put 'put ''NjU3LDI3NjYxLDI3NjYyLDI3NjY0LDI3NjY2LDI3NjczLDI3Njc5LDI3Njg2LDI3Njg3LDI3Njg4LDI3NjkyLDI3Njk0LDI3Njk5LDI3NzAxLDI3NzAyLDI3NzA2LDI3NzA3LDI3NzExLDI3NzIyLDI3NzIzLDI3NzI1LDI3NzI3LDI3NzMwLDI3NzMyLDI3NzM3LDI3NzM5LDI3NzQwLDI3NzU1''@;'; put 'put ''LDI3NzU3LDI3NzU5LDI3NzY0LDI3NzY2LDI3NzY4LDI3NzY5LDI3NzcxLDI3NzgxLDI3NzgyLDI3NzgzLDI3Nzg1LDI3Nzk2LDI3Nzk3LDI3Nzk5LDI3ODAwLDI3ODA0LDI3ODA3LDI3ODI0LDI3ODI2LDI3ODI4LDI3ODQyLDI3ODQ2LDI3ODUzLDI3ODU1LDI3ODU2LDI3ODU3LDI3ODU4LDI3''@;'; put 'put ''ODYwLDI3ODYyLDI3ODY2LDI3ODY4LDI3ODcyLDI3ODc5LDI3ODgxLDI3ODgzLDI3ODg0LDI3ODg2LDI3ODkwLDI3ODkyLDI3OTA4LDI3OTExLDI3OTE0LDI3OTE4LDI3OTE5LDI3OTIxLDI3OTIzLDI3OTMwLDI3OTQyLDI3OTQzLDI3OTQ0LDI3NzUxLDI3OTUwLDI3OTUxLDI3OTUzLDI3OTYx''@;'; put 'put ''LDI3OTY0LDI3OTY3LDI3OTkxLDI3OTk4LDI3OTk5LDI4MDAxLDI4MDA1LDI4MDA3LDI4MDE1LDI4MDE2LDI4MDI4LDI4MDM0LDI4MDM5LDI4MDQ5LDI4MDUwLDI4MDUyLDI4MDU0LDI4MDU1LDI4MDU2LDI4MDc0LDI4MDc2LDI4MDg0LDI4MDg3LDI4MDg5LDI4MDkzLDI4MDk1LDI4MTAwLDI4''@;'; put 'put ''MTA0LDI4MTA2LDI4MTEwLDI4MTExLDI4MTE4LDI4MTIzLDI4MTI1LDI4MTI3LDI4MTI4LDI4MTMwLDI4MTMzLDI4MTM3LDI4MTQzLDI4MTQ0LDI4MTQ4LDI4MTUwLDI4MTU2LDI4MTYwLDI4MTY0LDI4MTkwLDI4MTk0LDI4MTk5LDI4MjEwLDI4MjE0LDI4MjE3LDI4MjE5LDI4MjIwLDI4MjI4''@;'; put 'put ''LDI4MjI5LDI4MjMyLDI4MjMzLDI4MjM1LDI4MjM5LDI4MjQxLDI4MjQyLDI4MjQzLDI4MjQ0LDI4MjQ3LDI4MjUyLDI4MjUzLDI4MjU0LDI4MjU4LDI4MjU5LDI4MjY0LDI4Mjc1LDI4MjgzLDI4Mjg1LDI4MzAxLDI4MzA3LDI4MzEzLDI4MzIwLDI4MzI3LDI4MzMzLDI4MzM0LDI4MzM3LDI4''@;'; put 'put ''MzM5LDI4MzQ3LDI4MzUxLDI4MzUyLDI4MzUzLDI4MzU1LDI4MzU5LDI4MzYwLDI4MzYyLDI4MzY1LDI4MzY2LDI4MzY3LDI4Mzk1LDI4Mzk3LDI4Mzk4LDI4NDA5LDI4NDExLDI4NDEzLDI4NDIwLDI4NDI0LDI4NDI2LDI4NDI4LDI4NDI5LDI4NDM4LDI4NDQwLDI4NDQyLDI4NDQzLDI4NDU0''@;'; put 'put ''LDI4NDU3LDI4NDU4LDI4NDYzLDI4NDY0LDI4NDY3LDI4NDcwLDI4NDc1LDI4NDc2LDI4NDYxLDI4NDk1LDI4NDk3LDI4NDk4LDI4NDk5LDI4NTAzLDI4NTA1LDI4NTA2LDI4NTA5LDI4NTEwLDI4NTEzLDI4NTE0LDI4NTIwLDI4NTI0LDI4NTQxLDI4NTQyLDI4NTQ3LDI4NTUxLDI4NTUyLDI4''@;'; put 'put ''NTU1LDI4NTU2LDI4NTU3LDI4NTYwLDI4NTYyLDI4NTYzLDI4NTY0LDI4NTY2LDI4NTcwLDI4NTc1LDI4NTc2LDI4NTgxLDI4NTgyLDI4NTgzLDI4NTg0LDI4NTkwLDI4NTkxLDI4NTkyLDI4NTk3LDI4NTk4LDI4NjA0LDI4NjEzLDI4NjE1LDI4NjE2LDI4NjE4LDI4NjM0LDI4NjM4LDI4NjQ4''@;'; put 'put ''LDI4NjQ5LDI4NjU2LDI4NjYxLDI4NjY1LDI4NjY4LDI4NjY5LDI4NjcyLDI4Njc3LDI4Njc4LDI4Njc5LDI4Njg1LDI4Njk1LDI4NzA0LDI4NzA3LDI4NzE5LDI4NzI0LDI4NzI3LDI4NzI5LDI4NzMyLDI4NzM5LDI4NzQwLDI4NzQ0LDI4NzQ1LDI4NzQ2LDI4NzQ3LDI4NzU2LDI4NzU3LDI4''@;'; put 'put ''NzY1LDI4NzY2LDI4NzUwLDI4NzcyLDI4NzczLDI4NzgwLDI4NzgyLDI4Nzg5LDI4NzkwLDI4Nzk4LDI4ODAxLDI4ODA1LDI4ODA2LDI4ODIwLDI4ODIxLDI4ODIyLDI4ODIzLDI4ODI0LDI4ODI3LDI4ODM2LDI4ODQzLDI4ODQ4LDI4ODQ5LDI4ODUyLDI4ODU1LDI4ODc0LDI4ODgxLDI4ODgz''@;'; put 'put ''LDI4ODg0LDI4ODg1LDI4ODg2LDI4ODg4LDI4ODkyLDI4OTAwLDI4OTIyLDI4OTMxLDI4OTMyLDI4OTMzLDI4OTM0LDI4OTM1LDI4OTM5LDI4OTQwLDI4OTQzLDI4OTU4LDI4OTYwLDI4OTcxLDI4OTczLDI4OTc1LDI4OTc2LDI4OTc3LDI4OTg0LDI4OTkzLDI4OTk3LDI4OTk4LDI4OTk5LDI5''@;'; put 'put ''MDAyLDI5MDAzLDI5MDA4LDI5MDEwLDI5MDE1LDI5MDE4LDI5MDIwLDI5MDIyLDI5MDI0LDI5MDMyLDI5MDQ5LDI5MDU2LDI5MDYxLDI5MDYzLDI5MDY4LDI5MDc0LDI5MDgyLDI5MDgzLDI5MDg4LDI5MDkwLDI5MTAzLDI5MTA0LDI5MTA2LDI5MTA3LDI5MTE0LDI5MTE5LDI5MTIwLDI5MTIx''@;'; put 'put ''LDI5MTI0LDI5MTMxLDI5MTMyLDI5MTM5LDI5MTQyLDI5MTQ1LDI5MTQ2LDI5MTQ4LDI5MTc2LDI5MTgyLDI5MTg0LDI5MTkxLDI5MTkyLDI5MTkzLDI5MjAzLDI5MjA3LDI5MjEwLDI5MjEzLDI5MjE1LDI5MjIwLDI5MjI3LDI5MjMxLDI5MjM2LDI5MjQwLDI5MjQxLDI5MjQ5LDI5MjUwLDI5''@;'; put 'put ''MjUxLDI5MjUzLDI5MjYyLDI5MjYzLDI5MjY0LDI5MjY3LDI5MjY5LDI5MjcwLDI5Mjc0LDI5Mjc2LDI5Mjc4LDI5MjgwLDI5MjgzLDI5Mjg4LDI5MjkxLDI5Mjk0LDI5Mjk1LDI5Mjk3LDI5MzAzLDI5MzA0LDI5MzA3LDI5MzA4LDI5MzExLDI5MzE2LDI5MzIxLDI5MzI1LDI5MzI2LDI5MzMx''@;'; put 'put ''LDI5MzM5LDI5MzUyLDI5MzU3LDI5MzU4LDI5MzYxLDI5MzY0LDI5Mzc0LDI5Mzc3LDI5MzgzLDI5Mzg1LDI5Mzg4LDI5Mzk3LDI5Mzk4LDI5NDAwLDI5NDA3LDI5NDEzLDI5NDI3LDI5NDI4LDI5NDM0LDI5NDM1LDI5NDM4LDI5NDQyLDI5NDQ0LDI5NDQ1LDI5NDQ3LDI5NDUxLDI5NDUzLDI5''@;'; put 'put ''NDU4LDI5NDU5LDI5NDY0LDI5NDY1LDI5NDcwLDI5NDc0LDI5NDc2LDI5NDc5LDI5NDgwLDI5NDg0LDI5NDg5LDI5NDkwLDI5NDkzLDI5NDk4LDI5NDk5LDI5NTAxLDI5NTA3LDI5NTE3LDI5NTIwLDI5NTIyLDI5NTI2LDI5NTI4LDI5NTMzLDI5NTM0LDI5NTM1LDI5NTM2LDI5NTQyLDI5NTQz''@;'; put 'put ''LDI5NTQ1LDI5NTQ3LDI5NTQ4LDI5NTUwLDI5NTUxLDI5NTUzLDI5NTU5LDI5NTYxLDI5NTY0LDI5NTY4LDI5NTY5LDI5NTcxLDI5NTczLDI5NTc0LDI5NTgyLDI5NTg0LDI5NTg3LDI5NTg5LDI5NTkxLDI5NTkyLDI5NTk2LDI5NTk4LDI5NTk5LDI5NjAwLDI5NjAyLDI5NjA1LDI5NjA2LDI5''@;'; put 'put ''NjEwLDI5NjExLDI5NjEzLDI5NjIxLDI5NjIzLDI5NjI1LDI5NjI4LDI5NjI5LDI5NjMxLDI5NjM3LDI5NjM4LDI5NjQxLDI5NjQzLDI5NjQ0LDI5NjQ3LDI5NjUwLDI5NjUxLDI5NjU0LDI5NjU3LDI5NjYxLDI5NjY1LDI5NjY3LDI5NjcwLDI5NjcxLDI5NjczLDI5Njg0LDI5Njg1LDI5Njg3''@;'; put 'put ''LDI5Njg5LDI5NjkwLDI5NjkxLDI5NjkzLDI5Njk1LDI5Njk2LDI5Njk3LDI5NzAwLDI5NzAzLDI5NzA2LDI5NzEzLDI5NzIyLDI5NzIzLDI5NzMyLDI5NzM0LDI5NzM2LDI5NzM3LDI5NzM4LDI5NzM5LDI5NzQwLDI5NzQxLDI5NzQyLDI5NzQzLDI5NzQ0LDI5NzQ1LDI5NzUzLDI5NzYwLDI5''@;'; put 'put ''NzYzLDI5NzY0LDI5NzY2LDI5NzY3LDI5NzcxLDI5NzczLDI5Nzc3LDI5Nzc4LDI5NzgzLDI5Nzg5LDI5Nzk0LDI5Nzk4LDI5Nzk5LDI5ODAwLDI5ODAzLDI5ODA1LDI5ODA2LDI5ODA5LDI5ODEwLDI5ODI0LDI5ODI1LDI5ODI5LDI5ODMwLDI5ODMxLDI5ODMzLDI5ODM5LDI5ODQwLDI5ODQx''@;'; put 'put ''LDI5ODQyLDI5ODQ4LDI5ODQ5LDI5ODUwLDI5ODUyLDI5ODU1LDI5ODU2LDI5ODU3LDI5ODU5LDI5ODYyLDI5ODY0LDI5ODY1LDI5ODY2LDI5ODY3LDI5ODcwLDI5ODcxLDI5ODczLDI5ODc0LDI5ODc3LDI5ODgxLDI5ODgzLDI5ODg3LDI5ODk2LDI5ODk3LDI5OTAwLDI5OTA0LDI5OTA3LDI5''@;'; put 'put ''OTEyLDI5OTE0LDI5OTE1LDI5OTE4LDI5OTE5LDI5OTI0LDI5OTI4LDI5OTMwLDI5OTMxLDI5OTM1LDI5OTQwLDI5OTQ2LDI5OTQ3LDI5OTQ4LDI5OTUxLDI5OTU4LDI5OTcwLDI5OTc0LDI5OTc1LDI5OTg0LDI5OTg1LDI5OTg4LDI5OTkxLDI5OTkzLDI5OTk0LDI5OTk5LDMwMDA2LDMwMDA5''@;'; put 'put ''LDMwMDEzLDMwMDE0LDMwMDE1LDMwMDE2LDMwMDE5LDMwMDIzLDMwMDI0LDMwMDMwLDMwMDMyLDMwMDM0LDMwMDM5LDMwMDQ2LDMwMDQ3LDMwMDQ5LDMwMDYzLDMwMDY1LDMwMDczLDMwMDc0LDMwMDc1LDMwMDc2LDMwMDc3LDMwMDc4LDMwMDgxLDMwMDg1LDMwMDk2LDMwMDk4LDMwMDk5LDMw''@;'; put 'put ''MTAxLDMwMTA1LDMwMTA4LDMwMTE0LDMwMTE2LDMwMTMyLDMwMTM4LDMwMTQzLDMwMTQ0LDMwMTQ1LDMwMTQ4LDMwMTUwLDMwMTU2LDMwMTU4LDMwMTU5LDMwMTY3LDMwMTcyLDMwMTc1LDMwMTc2LDMwMTc3LDMwMTgwLDMwMTgzLDMwMTg4LDMwMTkwLDMwMTkxLDMwMTkzLDMwMjAxLDMwMjA4''@;'; put 'put ''LDMwMjEwLDMwMjExLDMwMjEyLDMwMjE1LDMwMjE2LDMwMjE4LDMwMjIwLDMwMjIzLDMwMjI2LDMwMjI3LDMwMjI5LDMwMjMwLDMwMjMzLDMwMjM1LDMwMjM2LDMwMjM3LDMwMjM4LDMwMjQzLDMwMjQ1LDMwMjQ2LDMwMjQ5LDMwMjUzLDMwMjU4LDMwMjU5LDMwMjYxLDMwMjY0LDMwMjY1LDMw''@;'; put 'put ''MjY2LDMwMjY4LDMwMjgyLDMwMjcyLDMwMjczLDMwMjc1LDMwMjc2LDMwMjc3LDMwMjgxLDMwMjgzLDMwMjkzLDMwMjk3LDMwMzAzLDMwMzA4LDMwMzA5LDMwMzE3LDMwMzE4LDMwMzE5LDMwMzIxLDMwMzI0LDMwMzM3LDMwMzQxLDMwMzQ4LDMwMzQ5LDMwMzU3LDMwMzYzLDMwMzY0LDMwMzY1''@;'; put 'put ''LDMwMzY3LDMwMzY4LDMwMzcwLDMwMzcxLDMwMzcyLDMwMzczLDMwMzc0LDMwMzc1LDMwMzc2LDMwMzc4LDMwMzgxLDMwMzk3LDMwNDAxLDMwNDA1LDMwNDA5LDMwNDExLDMwNDEyLDMwNDE0LDMwNDIwLDMwNDI1LDMwNDMyLDMwNDM4LDMwNDQwLDMwNDQ0LDMwNDQ4LDMwNDQ5LDMwNDU0LDMw''@;'; put 'put ''NDU3LDMwNDYwLDMwNDY0LDMwNDcwLDMwNDc0LDMwNDc4LDMwNDgyLDMwNDg0LDMwNDg1LDMwNDg3LDMwNDg5LDMwNDkwLDMwNDkyLDMwNDk4LDMwNTA0LDMwNTA5LDMwNTEwLDMwNTExLDMwNTE2LDMwNTE3LDMwNTE4LDMwNTIxLDMwNTI1LDMwNTI2LDMwNTMwLDMwNTMzLDMwNTM0LDMwNTM4''@;'; put 'put ''LDMwNTQxLDMwNTQyLDMwNTQzLDMwNTQ2LDMwNTUwLDMwNTUxLDMwNTU2LDMwNTU4LDMwNTU5LDMwNTYwLDMwNTYyLDMwNTY0LDMwNTY3LDMwNTcwLDMwNTcyLDMwNTc2LDMwNTc4LDMwNTc5LDMwNTgwLDMwNTg2LDMwNTg5LDMwNTkyLDMwNTk2LDMwNjA0LDMwNjA1LDMwNjEyLDMwNjEzLDMw''@;'; put 'put ''NjE0LDMwNjE4LDMwNjIzLDMwNjI2LDMwNjMxLDMwNjM0LDMwNjM4LDMwNjM5LDMwNjQxLDMwNjQ1LDMwNjU0LDMwNjU5LDMwNjY1LDMwNjczLDMwNjc0LDMwNjc3LDMwNjgxLDMwNjg2LDMwNjg3LDMwNjg4LDMwNjkyLDMwNjk0LDMwNjk4LDMwNzAwLDMwNzA0LDMwNzA1LDMwNzA4LDMwNzEy''@;'; put 'put ''LDMwNzE1LDMwNzI1LDMwNzI2LDMwNzI5LDMwNzMzLDMwNzM0LDMwNzM3LDMwNzQ5LDMwNzUzLDMwNzU0LDMwNzU1LDMwNzY1LDMwNzY2LDMwNzY4LDMwNzczLDMwNzc1LDMwNzg3LDMwNzg4LDMwNzkxLDMwNzkyLDMwNzk2LDMwNzk4LDMwODAyLDMwODEyLDMwODE0LDMwODE2LDMwODE3LDMw''@;'; put 'put ''ODE5LDMwODIwLDMwODI0LDMwODI2LDMwODMwLDMwODQyLDMwODQ2LDMwODU4LDMwODYzLDMwODY4LDMwODcyLDMwODgxLDMwODc3LDMwODc4LDMwODc5LDMwODg0LDMwODg4LDMwODkyLDMwODkzLDMwODk2LDMwODk3LDMwODk4LDMwODk5LDMwOTA3LDMwOTA5LDMwOTExLDMwOTE5LDMwOTIw''@;'; put 'put ''LDMwOTIxLDMwOTI0LDMwOTI2LDMwOTMwLDMwOTMxLDMwOTMzLDMwOTM0LDMwOTQ4LDMwOTM5LDMwOTQzLDMwOTQ0LDMwOTQ1LDMwOTUwLDMwOTU0LDMwOTYyLDMwOTYzLDMwOTc2LDMwOTY2LDMwOTY3LDMwOTcwLDMwOTcxLDMwOTc1LDMwOTgyLDMwOTg4LDMwOTkyLDMxMDAyLDMxMDA0LDMx''@;'; put 'put ''MDA2LDMxMDA3LDMxMDA4LDMxMDEzLDMxMDE1LDMxMDE3LDMxMDIxLDMxMDI1LDMxMDI4LDMxMDI5LDMxMDM1LDMxMDM3LDMxMDM5LDMxMDQ0LDMxMDQ1LDMxMDQ2LDMxMDUwLDMxMDUxLDMxMDU1LDMxMDU3LDMxMDYwLDMxMDY0LDMxMDY3LDMxMDY4LDMxMDc5LDMxMDgxLDMxMDgzLDMxMDkw''@;'; put 'put ''LDMxMDk3LDMxMDk5LDMxMTAwLDMxMTAyLDMxMTE1LDMxMTE2LDMxMTIxLDMxMTIzLDMxMTI0LDMxMTI1LDMxMTI2LDMxMTI4LDMxMTMxLDMxMTMyLDMxMTM3LDMxMTQ0LDMxMTQ1LDMxMTQ3LDMxMTUxLDMxMTUzLDMxMTU2LDMxMTYwLDMxMTYzLDMxMTcwLDMxMTcyLDMxMTc1LDMxMTc2LDMx''@;'; put 'put ''MTc4LDMxMTgzLDMxMTg4LDMxMTkwLDMxMTk0LDMxMTk3LDMxMTk4LDMxMjAwLDMxMjAyLDMxMjA1LDMxMjEwLDMxMjExLDMxMjEzLDMxMjE3LDMxMjI0LDMxMjI4LDMxMjM0LDMxMjM1LDMxMjM5LDMxMjQxLDMxMjQyLDMxMjQ0LDMxMjQ5LDMxMjUzLDMxMjU5LDMxMjYyLDMxMjY1LDMxMjcx''@;'; put 'put ''LDMxMjc1LDMxMjc3LDMxMjc5LDMxMjgwLDMxMjg0LDMxMjg1LDMxMjg4LDMxMjg5LDMxMjkwLDMxMzAwLDMxMzAxLDMxMzAzLDMxMzA0LDMxMzA4LDMxMzE3LDMxMzE4LDMxMzIxLDMxMzI0LDMxMzI1LDMxMzI3LDMxMzI4LDMxMzMzLDMxMzM1LDMxMzM4LDMxMzQxLDMxMzQ5LDMxMzUyLDMx''@;'; put 'put ''MzU4LDMxMzYwLDMxMzYyLDMxMzY1LDMxMzY2LDMxMzcwLDMxMzcxLDMxMzc2LDMxMzc3LDMxMzgwLDMxMzkwLDMxMzkyLDMxMzk1LDMxNDA0LDMxNDExLDMxNDEzLDMxNDE3LDMxNDE5LDMxNDIwLDMxNDMwLDMxNDMzLDMxNDM2LDMxNDM4LDMxNDQxLDMxNDUxLDMxNDY0LDMxNDY1LDMxNDY3''@;'; put 'put ''LDMxNDY4LDMxNDczLDMxNDc2LDMxNDgzLDMxNDg1LDMxNDg2LDMxNDk1LDMxNTA4LDMxNTE5LDMxNTIzLDMxNTI3LDMxNTI5LDMxNTMwLDMxNTMxLDMxNTMzLDMxNTM0LDMxNTM1LDMxNTM2LDMxNTM3LDMxNTQwLDMxNTQ5LDMxNTUxLDMxNTUyLDMxNTUzLDMxNTU5LDMxNTY2LDMxNTczLDMx''@;'; put 'put ''NTg0LDMxNTg4LDMxNTkwLDMxNTkzLDMxNTk0LDMxNTk3LDMxNTk5LDMxNjAyLDMxNjAzLDMxNjA3LDMxNjIwLDMxNjI1LDMxNjMwLDMxNjMyLDMxNjMzLDMxNjM4LDMxNjQzLDMxNjQ2LDMxNjQ4LDMxNjUzLDMxNjYwLDMxNjYzLDMxNjY0LDMxNjY2LDMxNjY5LDMxNjcwLDMxNjc0LDMxNjc1''@;'; put 'put ''LDMxNjc2LDMxNjc3LDMxNjgyLDMxNjg1LDMxNjg4LDMxNjkwLDMxNzAwLDMxNzAyLDMxNzAzLDMxNzA1LDMxNzA2LDMxNzA3LDMxNzIwLDMxNzIyLDMxNzMwLDMxNzMyLDMxNzMzLDMxNzM2LDMxNzM3LDMxNzM4LDMxNzQwLDMxNzQyLDMxNzQ1LDMxNzQ2LDMxNzQ3LDMxNzQ4LDMxNzUwLDMx''@;'; put 'put ''NzUzLDMxNzU1LDMxNzU2LDMxNzU4LDMxNzU5LDMxNzY5LDMxNzcxLDMxNzc2LDMxNzgxLDMxNzgyLDMxNzg0LDMxNzg4LDMxNzkzLDMxNzk1LDMxNzk2LDMxNzk4LDMxODAxLDMxODAyLDMxODE0LDMxODE4LDMxODI5LDMxODI1LDMxODI2LDMxODI3LDMxODMzLDMxODM0LDMxODM1LDMxODM2''@;'; put 'put ''LDMxODM3LDMxODM4LDMxODQxLDMxODQzLDMxODQ3LDMxODQ5LDMxODUzLDMxODU0LDMxODU2LDMxODU4LDMxODY1LDMxODY4LDMxODY5LDMxODc4LDMxODc5LDMxODg3LDMxODkyLDMxOTAyLDMxOTA0LDMxOTEwLDMxOTIwLDMxOTI2LDMxOTI3LDMxOTMwLDMxOTMxLDMxOTMyLDMxOTM1LDMx''@;'; put 'put ''OTQwLDMxOTQzLDMxOTQ0LDMxOTQ1LDMxOTQ5LDMxOTUxLDMxOTU1LDMxOTU2LDMxOTU3LDMxOTU5LDMxOTYxLDMxOTYyLDMxOTY1LDMxOTc0LDMxOTc3LDMxOTc5LDMxOTg5LDMyMDAzLDMyMDA3LDMyMDA4LDMyMDA5LDMyMDE1LDMyMDE3LDMyMDE4LDMyMDE5LDMyMDIyLDMyMDI5LDMyMDMw''@;'; put 'put ''LDMyMDM1LDMyMDM4LDMyMDQyLDMyMDQ1LDMyMDQ5LDMyMDYwLDMyMDYxLDMyMDYyLDMyMDY0LDMyMDY1LDMyMDcxLDMyMDcyLDMyMDc3LDMyMDgxLDMyMDgzLDMyMDg3LDMyMDg5LDMyMDkwLDMyMDkyLDMyMDkzLDMyMTAxLDMyMTAzLDMyMTA2LDMyMTEyLDMyMTIwLDMyMTIyLDMyMTIzLDMy''@;'; put 'put ''MTI3LDMyMTI5LDMyMTMwLDMyMTMxLDMyMTMzLDMyMTM0LDMyMTM2LDMyMTM5LDMyMTQwLDMyMTQxLDMyMTQ1LDMyMTUwLDMyMTUxLDMyMTU3LDMyMTU4LDMyMTY2LDMyMTY3LDMyMTcwLDMyMTc5LDMyMTgyLDMyMTgzLDMyMTg1LDMyMTk0LDMyMTk1LDMyMTk2LDMyMTk3LDMyMTk4LDMyMjA0''@;'; put 'put ''LDMyMjA1LDMyMjA2LDMyMjE1LDMyMjE3LDMyMjU2LDMyMjI2LDMyMjI5LDMyMjMwLDMyMjM0LDMyMjM1LDMyMjM3LDMyMjQxLDMyMjQ1LDMyMjQ2LDMyMjQ5LDMyMjUwLDMyMjY0LDMyMjcyLDMyMjczLDMyMjc3LDMyMjc5LDMyMjg0LDMyMjg1LDMyMjg4LDMyMjk1LDMyMjk2LDMyMzAwLDMy''@;'; put 'put ''MzAxLDMyMzAzLDMyMzA3LDMyMzEwLDMyMzE5LDMyMzI0LDMyMzI1LDMyMzI3LDMyMzM0LDMyMzM2LDMyMzM4LDMyMzQ0LDMyMzUxLDMyMzUzLDMyMzU0LDMyMzU3LDMyMzYzLDMyMzY2LDMyMzY3LDMyMzcxLDMyMzc2LDMyMzgyLDMyMzg1LDMyMzkwLDMyMzkxLDMyMzk0LDMyMzk3LDMyNDAx''@;'; put 'put ''LDMyNDA1LDMyNDA4LDMyNDEwLDMyNDEzLDMyNDE0LDMyNTcyLDMyNTcxLDMyNTczLDMyNTc0LDMyNTc1LDMyNTc5LDMyNTgwLDMyNTgzLDMyNTkxLDMyNTk0LDMyNTk1LDMyNjAzLDMyNjA0LDMyNjA1LDMyNjA5LDMyNjExLDMyNjEyLDMyNjEzLDMyNjE0LDMyNjIxLDMyNjI1LDMyNjM3LDMy''@;'; put 'put ''NjM4LDMyNjM5LDMyNjQwLDMyNjUxLDMyNjUzLDMyNjU1LDMyNjU2LDMyNjU3LDMyNjYyLDMyNjYzLDMyNjY4LDMyNjczLDMyNjc0LDMyNjc4LDMyNjgyLDMyNjg1LDMyNjkyLDMyNzAwLDMyNzAzLDMyNzA0LDMyNzA3LDMyNzEyLDMyNzE4LDMyNzE5LDMyNzMxLDMyNzM1LDMyNzM5LDMyNzQx''@;'; put 'put ''LDMyNzQ0LDMyNzQ4LDMyNzUwLDMyNzUxLDMyNzU0LDMyNzYyLDMyNzY1LDMyNzY2LDMyNzY3LDMyNzc1LDMyNzc2LDMyNzc4LDMyNzgxLDMyNzgyLDMyNzgzLDMyNzg1LDMyNzg3LDMyNzg4LDMyNzkwLDMyNzk3LDMyNzk4LDMyNzk5LDMyODAwLDMyODA0LDMyODA2LDMyODEyLDMyODE0LDMy''@;'; put 'put ''ODE2LDMyODIwLDMyODIxLDMyODIzLDMyODI1LDMyODI2LDMyODI4LDMyODMwLDMyODMyLDMyODM2LDMyODY0LDMyODY4LDMyODcwLDMyODc3LDMyODgxLDMyODg1LDMyODk3LDMyOTA0LDMyOTEwLDMyOTI0LDMyOTI2LDMyOTM0LDMyOTM1LDMyOTM5LDMyOTUyLDMyOTUzLDMyOTY4LDMyOTcz''@;'; put 'put ''LDMyOTc1LDMyOTc4LDMyOTgwLDMyOTgxLDMyOTgzLDMyOTg0LDMyOTkyLDMzMDA1LDMzMDA2LDMzMDA4LDMzMDEwLDMzMDExLDMzMDE0LDMzMDE3LDMzMDE4LDMzMDIyLDMzMDI3LDMzMDM1LDMzMDQ2LDMzMDQ3LDMzMDQ4LDMzMDUyLDMzMDU0LDMzMDU2LDMzMDYwLDMzMDYzLDMzMDY4LDMz''@;'; put 'put ''MDcyLDMzMDc3LDMzMDgyLDMzMDg0LDMzMDkzLDMzMDk1LDMzMDk4LDMzMTAwLDMzMTA2LDMzMTExLDMzMTIwLDMzMTIxLDMzMTI3LDMzMTI4LDMzMTI5LDMzMTMzLDMzMTM1LDMzMTQzLDMzMTUzLDMzMTY4LDMzMTU2LDMzMTU3LDMzMTU4LDMzMTYzLDMzMTY2LDMzMTc0LDMzMTc2LDMzMTc5''@;'; put 'put ''LDMzMTgyLDMzMTg2LDMzMTk4LDMzMjAyLDMzMjA0LDMzMjExLDMzMjI3LDMzMjE5LDMzMjIxLDMzMjI2LDMzMjMwLDMzMjMxLDMzMjM3LDMzMjM5LDMzMjQzLDMzMjQ1LDMzMjQ2LDMzMjQ5LDMzMjUyLDMzMjU5LDMzMjYwLDMzMjY0LDMzMjY1LDMzMjY2LDMzMjY5LDMzMjcwLDMzMjcyLDMz''@;'; put 'put ''MjczLDMzMjc3LDMzMjc5LDMzMjgwLDMzMjgzLDMzMjk1LDMzMjk5LDMzMzAwLDMzMzA1LDMzMzA2LDMzMzA5LDMzMzEzLDMzMzE0LDMzMzIwLDMzMzMwLDMzMzMyLDMzMzM4LDMzMzQ3LDMzMzQ4LDMzMzQ5LDMzMzUwLDMzMzU1LDMzMzU4LDMzMzU5LDMzMzYxLDMzMzY2LDMzMzcyLDMzMzc2''@;'; put 'put ''LDMzMzc5LDMzMzgzLDMzMzg5LDMzMzk2LDMzNDAzLDMzNDA1LDMzNDA3LDMzNDA4LDMzNDA5LDMzNDExLDMzNDEyLDMzNDE1LDMzNDE3LDMzNDE4LDMzNDIyLDMzNDI1LDMzNDI4LDMzNDMwLDMzNDMyLDMzNDM0LDMzNDM1LDMzNDQwLDMzNDQxLDMzNDQzLDMzNDQ0LDMzNDQ3LDMzNDQ4LDMz''@;'; put 'put ''NDQ5LDMzNDUwLDMzNDU0LDMzNDU2LDMzNDU4LDMzNDYwLDMzNDYzLDMzNDY2LDMzNDY4LDMzNDcwLDMzNDcxLDMzNDc4LDMzNDg4LDMzNDkzLDMzNDk4LDMzNTA0LDMzNTA2LDMzNTA4LDMzNTEyLDMzNTE0LDMzNTE3LDMzNTE5LDMzNTI2LDMzNTI3LDMzNTMzLDMzNTM0LDMzNTM2LDMzNTM3''@;'; put 'put ''LDMzNTQzLDMzNTQ0LDMzNTQ2LDMzNTQ3LDMzNjIwLDMzNTYzLDMzNTY1LDMzNTY2LDMzNTY3LDMzNTY5LDMzNTcwLDMzNTgwLDMzNTgxLDMzNTgyLDMzNTg0LDMzNTg3LDMzNTkxLDMzNTk0LDMzNTk2LDMzNTk3LDMzNjAyLDMzNjAzLDMzNjA0LDMzNjA3LDMzNjEzLDMzNjE0LDMzNjE3LDMz''@;'; put 'put ''NjIxLDMzNjIyLDMzNjIzLDMzNjQ4LDMzNjU2LDMzNjYxLDMzNjYzLDMzNjY0LDMzNjY2LDMzNjY4LDMzNjcwLDMzNjc3LDMzNjgyLDMzNjg0LDMzNjg1LDMzNjg4LDMzNjg5LDMzNjkxLDMzNjkyLDMzNjkzLDMzNzAyLDMzNzAzLDMzNzA1LDMzNzA4LDMzNzI2LDMzNzI3LDMzNzI4LDMzNzM1''@;'; put 'put ''LDMzNzM3LDMzNzQzLDMzNzQ0LDMzNzQ1LDMzNzQ4LDMzNzU3LDMzNjE5LDMzNzY4LDMzNzcwLDMzNzgyLDMzNzg0LDMzNzg1LDMzNzg4LDMzNzkzLDMzNzk4LDMzODAyLDMzODA3LDMzODA5LDMzODEzLDMzODE3LDMzNzA5LDMzODM5LDMzODQ5LDMzODYxLDMzODYzLDMzODY0LDMzODY2LDMz''@;'; put 'put ''ODY5LDMzODcxLDMzODczLDMzODc0LDMzODc4LDMzODgwLDMzODgxLDMzODgyLDMzODg0LDMzODg4LDMzODkyLDMzODkzLDMzODk1LDMzODk4LDMzOTA0LDMzOTA3LDMzOTA4LDMzOTEwLDMzOTEyLDMzOTE2LDMzOTE3LDMzOTIxLDMzOTI1LDMzOTM4LDMzOTM5LDMzOTQxLDMzOTUwLDMzOTU4''@;'; put 'put ''LDMzOTYwLDMzOTYxLDMzOTYyLDMzOTY3LDMzOTY5LDMzOTcyLDMzOTc4LDMzOTgxLDMzOTgyLDMzOTg0LDMzOTg2LDMzOTkxLDMzOTkyLDMzOTk2LDMzOTk5LDM0MDAzLDM0MDEyLDM0MDIzLDM0MDI2LDM0MDMxLDM0MDMyLDM0MDMzLDM0MDM0LDM0MDM5LDM0MDk4LDM0MDQyLDM0MDQzLDM0''@;'; put 'put ''MDQ1LDM0MDUwLDM0MDUxLDM0MDU1LDM0MDYwLDM0MDYyLDM0MDY0LDM0MDc2LDM0MDc4LDM0MDgyLDM0MDgzLDM0MDg0LDM0MDg1LDM0MDg3LDM0MDkwLDM0MDkxLDM0MDk1LDM0MDk5LDM0MTAwLDM0MTAyLDM0MTExLDM0MTE4LDM0MTI3LDM0MTI4LDM0MTI5LDM0MTMwLDM0MTMxLDM0MTM0''@;'; put 'put ''LDM0MTM3LDM0MTQwLDM0MTQxLDM0MTQyLDM0MTQzLDM0MTQ0LDM0MTQ1LDM0MTQ2LDM0MTQ4LDM0MTU1LDM0MTU5LDM0MTY5LDM0MTcwLDM0MTcxLDM0MTczLDM0MTc1LDM0MTc3LDM0MTgxLDM0MTgyLDM0MTg1LDM0MTg3LDM0MTg4LDM0MTkxLDM0MTk1LDM0MjAwLDM0MjA1LDM0MjA3LDM0''@;'; put 'put ''MjA4LDM0MjEwLDM0MjEzLDM0MjE1LDM0MjI4LDM0MjMwLDM0MjMxLDM0MjMyLDM0MjM2LDM0MjM3LDM0MjM4LDM0MjM5LDM0MjQyLDM0MjQ3LDM0MjUwLDM0MjUxLDM0MjU0LDM0MjIxLDM0MjY0LDM0MjY2LDM0MjcxLDM0MjcyLDM0Mjc4LDM0MjgwLDM0Mjg1LDM0MjkxLDM0Mjk0LDM0MzAw''@;'; put 'put ''LDM0MzAzLDM0MzA0LDM0MzA4LDM0MzA5LDM0MzE3LDM0MzE4LDM0MzIwLDM0MzIxLDM0MzIyLDM0MzI4LDM0MzI5LDM0MzMxLDM0MzM0LDM0MzM3LDM0MzQzLDM0MzQ1LDM0MzU4LDM0MzYwLDM0MzYyLDM0MzY0LDM0MzY1LDM0MzY4LDM0MzcwLDM0Mzc0LDM0Mzg2LDM0Mzg3LDM0MzkwLDM0''@;'; put 'put ''MzkxLDM0MzkyLDM0MzkzLDM0Mzk3LDM0NDAwLDM0NDAxLDM0NDAyLDM0NDAzLDM0NDA0LDM0NDA5LDM0NDEyLDM0NDE1LDM0NDIxLDM0NDIyLDM0NDIzLDM0NDI2LDM0NDQ1LDM0NDQ5LDM0NDU0LDM0NDU2LDM0NDU4LDM0NDYwLDM0NDY1LDM0NDcwLDM0NDcxLDM0NDcyLDM0NDc3LDM0NDgx''@;'; put 'put ''LDM0NDgzLDM0NDg0LDM0NDg1LDM0NDg3LDM0NDg4LDM0NDg5LDM0NDk1LDM0NDk2LDM0NDk3LDM0NDk5LDM0NTAxLDM0NTEzLDM0NTE0LDM0NTE3LDM0NTE5LDM0NTIyLDM0NTI0LDM0NTI4LDM0NTMxLDM0NTMzLDM0NTM1LDM0NDQwLDM0NTU0LDM0NTU2LDM0NTU3LDM0NTY0LDM0NTY1LDM0''@;'; put 'put ''NTY3LDM0NTcxLDM0NTc0LDM0NTc1LDM0NTc2LDM0NTc5LDM0NTgwLDM0NTg1LDM0NTkwLDM0NTkxLDM0NTkzLDM0NTk1LDM0NjAwLDM0NjA2LDM0NjA3LDM0NjA5LDM0NjEwLDM0NjE3LDM0NjE4LDM0NjIwLDM0NjIxLDM0NjIyLDM0NjI0LDM0NjI3LDM0NjI5LDM0NjM3LDM0NjQ4LDM0NjUz''@;'; put 'put ''LDM0NjU3LDM0NjYwLDM0NjYxLDM0NjcxLDM0NjczLDM0Njc0LDM0NjgzLDM0NjkxLDM0NjkyLDM0NjkzLDM0Njk0LDM0Njk1LDM0Njk2LDM0Njk3LDM0Njk5LDM0NzAwLDM0NzA0LDM0NzA3LDM0NzA5LDM0NzExLDM0NzEyLDM0NzEzLDM0NzE4LDM0NzIwLDM0NzIzLDM0NzI3LDM0NzMyLDM0''@;'; put 'put ''NzMzLDM0NzM0LDM0NzM3LDM0NzQxLDM0NzUwLDM0NzUxLDM0NzUzLDM0NzYwLDM0NzYxLDM0NzYyLDM0NzY2LDM0NzczLDM0Nzc0LDM0Nzc3LDM0Nzc4LDM0NzgwLDM0NzgzLDM0Nzg2LDM0Nzg3LDM0Nzg4LDM0Nzk0LDM0Nzk1LDM0Nzk3LDM0ODAxLDM0ODAzLDM0ODA4LDM0ODEwLDM0ODE1''@;'; put 'put ''LDM0ODE3LDM0ODE5LDM0ODIyLDM0ODI1LDM0ODI2LDM0ODI3LDM0ODMyLDM0ODQxLDM0ODM0LDM0ODM1LDM0ODM2LDM0ODQwLDM0ODQyLDM0ODQzLDM0ODQ0LDM0ODQ2LDM0ODQ3LDM0ODU2LDM0ODYxLDM0ODYyLDM0ODY0LDM0ODY2LDM0ODY5LDM0ODc0LDM0ODc2LDM0ODgxLDM0ODgzLDM0''@;'; put 'put ''ODg1LDM0ODg4LDM0ODg5LDM0ODkwLDM0ODkxLDM0ODk0LDM0ODk3LDM0OTAxLDM0OTAyLDM0OTA0LDM0OTA2LDM0OTA4LDM0OTExLDM0OTEyLDM0OTE2LDM0OTIxLDM0OTI5LDM0OTM3LDM0OTM5LDM0OTQ0LDM0OTY4LDM0OTcwLDM0OTcxLDM0OTcyLDM0OTc1LDM0OTc2LDM0OTg0LDM0OTg2''@;'; put 'put ''LDM1MDAyLDM1MDA1LDM1MDA2LDM1MDA4LDM1MDE4LDM1MDE5LDM1MDIwLDM1MDIxLDM1MDIyLDM1MDI1LDM1MDI2LDM1MDI3LDM1MDM1LDM1MDM4LDM1MDQ3LDM1MDU1LDM1MDU2LDM1MDU3LDM1MDYxLDM1MDYzLDM1MDczLDM1MDc4LDM1MDg1LDM1MDg2LDM1MDg3LDM1MDkzLDM1MDk0LDM1''@;'; put 'put ''MDk2LDM1MDk3LDM1MDk4LDM1MTAwLDM1MTA0LDM1MTEwLDM1MTExLDM1MTEyLDM1MTIwLDM1MTIxLDM1MTIyLDM1MTI1LDM1MTI5LDM1MTMwLDM1MTM0LDM1MTM2LDM1MTM4LDM1MTQxLDM1MTQyLDM1MTQ1LDM1MTUxLDM1MTU0LDM1MTU5LDM1MTYyLDM1MTYzLDM1MTY0LDM1MTY5LDM1MTcw''@;'; put 'put ''LDM1MTcxLDM1MTc5LDM1MTgyLDM1MTg0LDM1MTg3LDM1MTg5LDM1MTk0LDM1MTk1LDM1MTk2LDM1MTk3LDM1MjA5LDM1MjEzLDM1MjE2LDM1MjIwLDM1MjIxLDM1MjI3LDM1MjI4LDM1MjMxLDM1MjMyLDM1MjM3LDM1MjQ4LDM1MjUyLDM1MjUzLDM1MjU0LDM1MjU1LDM1MjYwLDM1Mjg0LDM1''@;'; put 'put ''Mjg1LDM1Mjg2LDM1Mjg3LDM1Mjg4LDM1MzAxLDM1MzA1LDM1MzA3LDM1MzA5LDM1MzEzLDM1MzE1LDM1MzE4LDM1MzIxLDM1MzI1LDM1MzI3LDM1MzMyLDM1MzMzLDM1MzM1LDM1MzQzLDM1MzQ1LDM1MzQ2LDM1MzQ4LDM1MzQ5LDM1MzU4LDM1MzYwLDM1MzYyLDM1MzY0LDM1MzY2LDM1Mzcx''@;'; put 'put ''LDM1MzcyLDM1Mzc1LDM1MzgxLDM1MzgzLDM1Mzg5LDM1MzkwLDM1MzkyLDM1Mzk1LDM1Mzk3LDM1Mzk5LDM1NDAxLDM1NDA1LDM1NDA2LDM1NDExLDM1NDE0LDM1NDE1LDM1NDE2LDM1NDIwLDM1NDIxLDM1NDI1LDM1NDI5LDM1NDMxLDM1NDQ1LDM1NDQ2LDM1NDQ3LDM1NDQ5LDM1NDUwLDM1''@;'; put 'put ''NDUxLDM1NDU0LDM1NDU1LDM1NDU2LDM1NDU5LDM1NDYyLDM1NDY3LDM1NDcxLDM1NDcyLDM1NDc0LDM1NDc4LDM1NDc5LDM1NDgxLDM1NDg3LDM1NDk1LDM1NDk3LDM1NTAyLDM1NTAzLDM1NTA3LDM1NTEwLDM1NTExLDM1NTE1LDM1NTE4LDM1NTIzLDM1NTI2LDM1NTI4LDM1NTI5LDM1NTMw''@;'; put 'put ''LDM1NTM3LDM1NTM5LDM1NTQwLDM1NTQxLDM1NTQzLDM1NTQ5LDM1NTUxLDM1NTY0LDM1NTY4LDM1NTcyLDM1NTczLDM1NTc0LDM1NTgwLDM1NTgzLDM1NTg5LDM1NTkwLDM1NTk1LDM1NjAxLDM1NjEyLDM1NjE0LDM1NjE1LDM1NTk0LDM1NjI5LDM1NjMyLDM1NjM5LDM1NjQ0LDM1NjUwLDM1''@;'; put 'put ''NjUxLDM1NjUyLDM1NjUzLDM1NjU0LDM1NjU2LDM1NjY2LDM1NjY3LDM1NjY4LDM1NjczLDM1NjYxLDM1Njc4LDM1NjgzLDM1NjkzLDM1NzAyLDM1NzA0LDM1NzA1LDM1NzA4LDM1NzEwLDM1NzEzLDM1NzE2LDM1NzE3LDM1NzIzLDM1NzI1LDM1NzI3LDM1NzMyLDM1NzMzLDM1NzQwLDM1NzQy''@;'; put 'put ''LDM1NzQzLDM1ODk2LDM1ODk3LDM1OTAxLDM1OTAyLDM1OTA5LDM1OTExLDM1OTEzLDM1OTE1LDM1OTE5LDM1OTIxLDM1OTIzLDM1OTI0LDM1OTI3LDM1OTI4LDM1OTMxLDM1OTMzLDM1OTI5LDM1OTM5LDM1OTQwLDM1OTQyLDM1OTQ0LDM1OTQ1LDM1OTQ5LDM1OTU1LDM1OTU3LDM1OTU4LDM1''@;'; put 'put ''OTYzLDM1OTY2LDM1OTc0LDM1OTc1LDM1OTc5LDM1OTg0LDM1OTg2LDM1OTg3LDM1OTkzLDM1OTk1LDM1OTk2LDM2MDA0LDM2MDI1LDM2MDI2LDM2MDM3LDM2MDM4LDM2MDQxLDM2MDQzLDM2MDQ3LDM2MDU0LDM2MDUzLDM2MDU3LDM2MDYxLDM2MDY1LDM2MDcyLDM2MDc2LDM2MDc5LDM2MDgw''@;'; put 'put ''LDM2MDgyLDM2MDg1LDM2MDg3LDM2MDg4LDM2MDk0LDM2MDk1LDM2MDk3LDM2MDk5LDM2MTA1LDM2MTE0LDM2MTE5LDM2MTIzLDM2MTk3LDM2MjAxLDM2MjA0LDM2MjA2LDM2MjIzLDM2MjI2LDM2MjI4LDM2MjMyLDM2MjM3LDM2MjQwLDM2MjQxLDM2MjQ1LDM2MjU0LDM2MjU1LDM2MjU2LDM2''@;'; put 'put ''MjYyLDM2MjY3LDM2MjY4LDM2MjcxLDM2Mjc0LDM2Mjc3LDM2Mjc5LDM2MjgxLDM2MjgzLDM2Mjg4LDM2MjkzLDM2Mjk0LDM2Mjk1LDM2Mjk2LDM2Mjk4LDM2MzAyLDM2MzA1LDM2MzA4LDM2MzA5LDM2MzExLDM2MzEzLDM2MzI0LDM2MzI1LDM2MzI3LDM2MzMyLDM2MzM2LDM2Mjg0LDM2MzM3''@;'; put 'put ''LDM2MzM4LDM2MzQwLDM2MzQ5LDM2MzUzLDM2MzU2LDM2MzU3LDM2MzU4LDM2MzYzLDM2MzY5LDM2MzcyLDM2Mzc0LDM2Mzg0LDM2Mzg1LDM2Mzg2LDM2Mzg3LDM2MzkwLDM2MzkxLDM2NDAxLDM2NDAzLDM2NDA2LDM2NDA3LDM2NDA4LDM2NDA5LDM2NDEzLDM2NDE2LDM2NDE3LDM2NDI3LDM2''@;'; put 'put ''NDI5LDM2NDMwLDM2NDMxLDM2NDM2LDM2NDQzLDM2NDQ0LDM2NDQ1LDM2NDQ2LDM2NDQ5LDM2NDUwLDM2NDU3LDM2NDYwLDM2NDYxLDM2NDYzLDM2NDY0LDM2NDY1LDM2NDczLDM2NDc0LDM2NDc1LDM2NDgyLDM2NDgzLDM2NDg5LDM2NDk2LDM2NDk4LDM2NTAxLDM2NTA2LDM2NTA3LDM2NTA5''@;'; put 'put ''LDM2NTEwLDM2NTE0LDM2NTE5LDM2NTIxLDM2NTI1LDM2NTI2LDM2NTMxLDM2NTMzLDM2NTM4LDM2NTM5LDM2NTQ0LDM2NTQ1LDM2NTQ3LDM2NTQ4LDM2NTUxLDM2NTU5LDM2NTYxLDM2NTY0LDM2NTcyLDM2NTg0LDM2NTkwLDM2NTkyLDM2NTkzLDM2NTk5LDM2NjAxLDM2NjAyLDM2NTg5LDM2''@;'; put 'put ''NjA4LDM2NjEwLDM2NjE1LDM2NjE2LDM2NjIzLDM2NjI0LDM2NjMwLDM2NjMxLDM2NjMyLDM2NjM4LDM2NjQwLDM2NjQxLDM2NjQzLDM2NjQ1LDM2NjQ3LDM2NjQ4LDM2NjUyLDM2NjUzLDM2NjU0LDM2NjYwLDM2NjYxLDM2NjYyLDM2NjYzLDM2NjY2LDM2NjcyLDM2NjczLDM2Njc1LDM2Njc5''@;'; put 'put ''LDM2Njg3LDM2Njg5LDM2NjkwLDM2NjkxLDM2NjkyLDM2NjkzLDM2Njk2LDM2NzAxLDM2NzAyLDM2NzA5LDM2NzY1LDM2NzY4LDM2NzY5LDM2NzcyLDM2NzczLDM2Nzc0LDM2Nzg5LDM2NzkwLDM2NzkyLDM2Nzk4LDM2ODAwLDM2ODAxLDM2ODA2LDM2ODEwLDM2ODExLDM2ODEzLDM2ODE2LDM2''@;'; put 'put ''ODE4LDM2ODE5LDM2ODIxLDM2ODMyLDM2ODM1LDM2ODM2LDM2ODQwLDM2ODQ2LDM2ODQ5LDM2ODUzLDM2ODU0LDM2ODU5LDM2ODYyLDM2ODY2LDM2ODY4LDM2ODcyLDM2ODc2LDM2ODg4LDM2ODkxLDM2OTA0LDM2OTA1LDM2OTExLDM2OTA2LDM2OTA4LDM2OTA5LDM2OTE1LDM2OTE2LDM2OTE5''@;'; put 'put ''LDM2OTI3LDM2OTMxLDM2OTMyLDM2OTQwLDM2OTU1LDM2OTU3LDM2OTYyLDM2OTY2LDM2OTY3LDM2OTcyLDM2OTc2LDM2OTgwLDM2OTg1LDM2OTk3LDM3ZTMsMzcwMDMsMzcwMDQsMzcwMDYsMzcwMDgsMzcwMTMsMzcwMTUsMzcwMTYsMzcwMTcsMzcwMTksMzcwMjQsMzcwMjUsMzcwMjYsMzcw''@;'; put 'put ''MjksMzcwNDAsMzcwNDIsMzcwNDMsMzcwNDQsMzcwNDYsMzcwNTMsMzcwNjgsMzcwNTQsMzcwNTksMzcwNjAsMzcwNjEsMzcwNjMsMzcwNjQsMzcwNzcsMzcwNzksMzcwODAsMzcwODEsMzcwODQsMzcwODUsMzcwODcsMzcwOTMsMzcwNzQsMzcxMTAsMzcwOTksMzcxMDMsMzcxMDQsMzcxMDgs''@;'; put 'put ''MzcxMTgsMzcxMTksMzcxMjAsMzcxMjQsMzcxMjUsMzcxMjYsMzcxMjgsMzcxMzMsMzcxMzYsMzcxNDAsMzcxNDIsMzcxNDMsMzcxNDQsMzcxNDYsMzcxNDgsMzcxNTAsMzcxNTIsMzcxNTcsMzcxNTQsMzcxNTUsMzcxNTksMzcxNjEsMzcxNjYsMzcxNjcsMzcxNjksMzcxNzIsMzcxNzQsMzcx''@;'; put 'put ''NzUsMzcxNzcsMzcxNzgsMzcxODAsMzcxODEsMzcxODcsMzcxOTEsMzcxOTIsMzcxOTksMzcyMDMsMzcyMDcsMzcyMDksMzcyMTAsMzcyMTEsMzcyMTcsMzcyMjAsMzcyMjMsMzcyMjksMzcyMzYsMzcyNDEsMzcyNDIsMzcyNDMsMzcyNDksMzcyNTEsMzcyNTMsMzcyNTQsMzcyNTgsMzcyNjIs''@;'; put 'put ''MzcyNjUsMzcyNjcsMzcyNjgsMzcyNjksMzcyNzIsMzcyNzgsMzcyODEsMzcyODYsMzcyODgsMzcyOTIsMzcyOTMsMzcyOTQsMzcyOTYsMzcyOTcsMzcyOTgsMzcyOTksMzczMDIsMzczMDcsMzczMDgsMzczMDksMzczMTEsMzczMTQsMzczMTUsMzczMTcsMzczMzEsMzczMzIsMzczMzUsMzcz''@;'; put 'put ''MzcsMzczMzgsMzczNDIsMzczNDgsMzczNDksMzczNTMsMzczNTQsMzczNTYsMzczNTcsMzczNTgsMzczNTksMzczNjAsMzczNjEsMzczNjcsMzczNjksMzczNzEsMzczNzMsMzczNzYsMzczNzcsMzczODAsMzczODEsMzczODIsMzczODMsMzczODUsMzczODYsMzczODgsMzczOTIsMzczOTQs''@;'; put 'put ''MzczOTUsMzczOTgsMzc0MDAsMzc0MDQsMzc0MDUsMzc0MTEsMzc0MTIsMzc0MTMsMzc0MTQsMzc0MTYsMzc0MjIsMzc0MjMsMzc0MjQsMzc0MjcsMzc0MjksMzc0MzAsMzc0MzIsMzc0MzMsMzc0MzQsMzc0MzYsMzc0MzgsMzc0NDAsMzc0NDIsMzc0NDMsMzc0NDYsMzc0NDcsMzc0NTAsMzc0''@;'; put 'put ''NTMsMzc0NTQsMzc0NTUsMzc0NTcsMzc0NjQsMzc0NjUsMzc0NjgsMzc0NjksMzc0NzIsMzc0NzMsMzc0NzcsMzc0NzksMzc0ODAsMzc0ODEsMzc0ODYsMzc0ODcsMzc0ODgsMzc0OTMsMzc0OTQsMzc0OTUsMzc0OTYsMzc0OTcsMzc0OTksMzc1MDAsMzc1MDEsMzc1MDMsMzc1MTIsMzc1MTMs''@;'; put 'put ''Mzc1MTQsMzc1MTcsMzc1MTgsMzc1MjIsMzc1MjcsMzc1MjksMzc1MzUsMzc1MzYsMzc1NDAsMzc1NDEsMzc1NDMsMzc1NDQsMzc1NDcsMzc1NTEsMzc1NTQsMzc1NTgsMzc1NjAsMzc1NjIsMzc1NjMsMzc1NjQsMzc1NjUsMzc1NjcsMzc1NjgsMzc1NjksMzc1NzAsMzc1NzEsMzc1NzMsMzc1''@;'; put 'put ''NzQsMzc1NzUsMzc1NzYsMzc1NzksMzc1ODAsMzc1ODEsMzc1ODIsMzc1ODQsMzc1ODcsMzc1ODksMzc1OTEsMzc1OTIsMzc1OTMsMzc1OTYsMzc1OTcsMzc1OTksMzc2MDAsMzc2MDEsMzc2MDMsMzc2MDUsMzc2MDcsMzc2MDgsMzc2MTIsMzc2MTQsMzc2MTYsMzc2MjUsMzc2MjcsMzc2MzEs''@;'; put 'put ''Mzc2MzIsMzc2MzQsMzc2NDAsMzc2NDUsMzc2NDksMzc2NTIsMzc2NTMsMzc2NjAsMzc2NjEsMzc2NjIsMzc2NjMsMzc2NjUsMzc2NjgsMzc2NjksMzc2NzEsMzc2NzMsMzc2NzQsMzc2ODMsMzc2ODQsMzc2ODYsMzc2ODcsMzc3MDMsMzc3MDQsMzc3MDUsMzc3MTIsMzc3MTMsMzc3MTQsMzc3''@;'; put 'put ''MTcsMzc3MTksMzc3MjAsMzc3MjIsMzc3MjYsMzc3MzIsMzc3MzMsMzc3MzUsMzc3MzcsMzc3MzgsMzc3NDEsMzc3NDMsMzc3NDQsMzc3NDUsMzc3NDcsMzc3NDgsMzc3NTAsMzc3NTQsMzc3NTcsMzc3NTksMzc3NjAsMzc3NjEsMzc3NjIsMzc3NjgsMzc3NzAsMzc3NzEsMzc3NzMsMzc3NzUs''@;'; put 'put ''Mzc3NzgsMzc3ODEsMzc3ODQsMzc3ODcsMzc3OTAsMzc3OTMsMzc3OTUsMzc3OTYsMzc3OTgsMzc4MDAsMzc4MDMsMzc4MTIsMzc4MTMsMzc4MTQsMzc4MTgsMzc4MDEsMzc4MjUsMzc4MjgsMzc4MjksMzc4MzAsMzc4MzEsMzc4MzMsMzc4MzQsMzc4MzUsMzc4MzYsMzc4MzcsMzc4NDMsMzc4''@;'; put 'put ''NDksMzc4NTIsMzc4NTQsMzc4NTUsMzc4NTgsMzc4NjIsMzc4NjMsMzc4ODEsMzc4NzksMzc4ODAsMzc4ODIsMzc4ODMsMzc4ODUsMzc4ODksMzc4OTAsMzc4OTIsMzc4OTYsMzc4OTcsMzc5MDEsMzc5MDIsMzc5MDMsMzc5MDksMzc5MTAsMzc5MTEsMzc5MTksMzc5MzQsMzc5MzUsMzc5Mzcs''@;'; put 'put ''Mzc5MzgsMzc5MzksMzc5NDAsMzc5NDcsMzc5NTEsMzc5NDksMzc5NTUsMzc5NTcsMzc5NjAsMzc5NjIsMzc5NjQsMzc5NzMsMzc5NzcsMzc5ODAsMzc5ODMsMzc5ODUsMzc5ODcsMzc5OTIsMzc5OTUsMzc5OTcsMzc5OTgsMzc5OTksMzgwMDEsMzgwMDIsMzgwMjAsMzgwMTksMzgyNjQsMzgy''@;'; put 'put ''NjUsMzgyNzAsMzgyNzYsMzgyODAsMzgyODQsMzgyODUsMzgyODYsMzgzMDEsMzgzMDIsMzgzMDMsMzgzMDUsMzgzMTAsMzgzMTMsMzgzMTUsMzgzMTYsMzgzMjQsMzgzMjYsMzgzMzAsMzgzMzMsMzgzMzUsMzgzNDIsMzgzNDQsMzgzNDUsMzgzNDcsMzgzNTIsMzgzNTMsMzgzNTQsMzgzNTUs''@;'; put 'put ''MzgzNjEsMzgzNjIsMzgzNjUsMzgzNjYsMzgzNjcsMzgzNjgsMzgzNzIsMzgzNzQsMzg0MjksMzg0MzAsMzg0MzQsMzg0MzYsMzg0MzcsMzg0MzgsMzg0NDQsMzg0NDksMzg0NTEsMzg0NTUsMzg0NTYsMzg0NTcsMzg0NTgsMzg0NjAsMzg0NjEsMzg0NjUsMzg0ODIsMzg0ODQsMzg0ODYsMzg0''@;'; put 'put ''ODcsMzg0ODgsMzg0OTcsMzg1MTAsMzg1MTYsMzg1MjMsMzg1MjQsMzg1MjYsMzg1MjcsMzg1MjksMzg1MzAsMzg1MzEsMzg1MzIsMzg1MzcsMzg1NDUsMzg1NTAsMzg1NTQsMzg1NTcsMzg1NTksMzg1NjQsMzg1NjUsMzg1NjYsMzg1NjksMzg1NzQsMzg1NzUsMzg1NzksMzg1ODYsMzg2MDIs''@;'; put 'put ''Mzg2MTAsMjM5ODYsMzg2MTYsMzg2MTgsMzg2MjEsMzg2MjIsMzg2MjMsMzg2MzMsMzg2MzksMzg2NDEsMzg2NTAsMzg2NTgsMzg2NTksMzg2NjEsMzg2NjUsMzg2ODIsMzg2ODMsMzg2ODUsMzg2ODksMzg2OTAsMzg2OTEsMzg2OTYsMzg3MDUsMzg3MDcsMzg3MjEsMzg3MjMsMzg3MzAsMzg3''@;'; put 'put ''MzQsMzg3MzUsMzg3NDEsMzg3NDMsMzg3NDQsMzg3NDYsMzg3NDcsMzg3NTUsMzg3NTksMzg3NjIsMzg3NjYsMzg3NzEsMzg3NzQsMzg3NzUsMzg3NzYsMzg3NzksMzg3ODEsMzg3ODMsMzg3ODQsMzg3OTMsMzg4MDUsMzg4MDYsMzg4MDcsMzg4MDksMzg4MTAsMzg4MTQsMzg4MTUsMzg4MTgs''@;'; put 'put ''Mzg4MjgsMzg4MzAsMzg4MzMsMzg4MzQsMzg4MzcsMzg4MzgsMzg4NDAsMzg4NDEsMzg4NDIsMzg4NDQsMzg4NDYsMzg4NDcsMzg4NDksMzg4NTIsMzg4NTMsMzg4NTUsMzg4NTcsMzg4NTgsMzg4NjAsMzg4NjEsMzg4NjIsMzg4NjQsMzg4NjUsMzg4NjgsMzg4NzEsMzg4NzIsMzg4NzMsMzg4''@;'; put 'put ''NzcsMzg4NzgsMzg4ODAsMzg4NzUsMzg4ODEsMzg4ODQsMzg4OTUsMzg4OTcsMzg5MDAsMzg5MDMsMzg5MDQsMzg5MDYsMzg5MTksMzg5MjIsMzg5MzcsMzg5MjUsMzg5MjYsMzg5MzIsMzg5MzQsMzg5NDAsMzg5NDIsMzg5NDQsMzg5NDcsMzg5NTAsMzg5NTUsMzg5NTgsMzg5NTksMzg5NjAs''@;'; put 'put ''Mzg5NjIsMzg5NjMsMzg5NjUsMzg5NDksMzg5NzQsMzg5ODAsMzg5ODMsMzg5ODYsMzg5OTMsMzg5OTQsMzg5OTUsMzg5OTgsMzg5OTksMzkwMDEsMzkwMDIsMzkwMTAsMzkwMTEsMzkwMTMsMzkwMTQsMzkwMTgsMzkwMjAsMzkwODMsMzkwODUsMzkwODYsMzkwODgsMzkwOTIsMzkwOTUsMzkw''@;'; put 'put ''OTYsMzkwOTgsMzkwOTksMzkxMDMsMzkxMDYsMzkxMDksMzkxMTIsMzkxMTYsMzkxMzcsMzkxMzksMzkxNDEsMzkxNDIsMzkxNDMsMzkxNDYsMzkxNTUsMzkxNTgsMzkxNzAsMzkxNzUsMzkxNzYsMzkxODUsMzkxODksMzkxOTAsMzkxOTEsMzkxOTQsMzkxOTUsMzkxOTYsMzkxOTksMzkyMDIs''@;'; put 'put ''MzkyMDYsMzkyMDcsMzkyMTEsMzkyMTcsMzkyMTgsMzkyMTksMzkyMjAsMzkyMjEsMzkyMjUsMzkyMjYsMzkyMjcsMzkyMjgsMzkyMzIsMzkyMzMsMzkyMzgsMzkyMzksMzkyNDAsMzkyNDUsMzkyNDYsMzkyNTIsMzkyNTYsMzkyNTcsMzkyNTksMzkyNjAsMzkyNjIsMzkyNjMsMzkyNjQsMzkz''@;'; put 'put ''MjMsMzkzMjUsMzkzMjcsMzkzMzQsMzkzNDQsMzkzNDUsMzkzNDYsMzkzNDksMzkzNTMsMzkzNTQsMzkzNTcsMzkzNTksMzkzNjMsMzkzNjksMzkzNzksMzkzODAsMzkzODUsMzkzODYsMzkzODgsMzkzOTAsMzkzOTksMzk0MDIsMzk0MDMsMzk0MDQsMzk0MDgsMzk0MTIsMzk0MTMsMzk0MTcs''@;'; put 'put ''Mzk0MjEsMzk0MjIsMzk0MjYsMzk0MjcsMzk0MjgsMzk0MzUsMzk0MzYsMzk0NDAsMzk0NDEsMzk0NDYsMzk0NTQsMzk0NTYsMzk0NTgsMzk0NTksMzk0NjAsMzk0NjMsMzk0NjksMzk0NzAsMzk0NzUsMzk0NzcsMzk0NzgsMzk0ODAsMzk0OTUsMzk0ODksMzk0OTIsMzk0OTgsMzk0OTksMzk1''@;'; put 'put ''MDAsMzk1MDIsMzk1MDUsMzk1MDgsMzk1MTAsMzk1MTcsMzk1OTQsMzk1OTYsMzk1OTgsMzk1OTksMzk2MDIsMzk2MDQsMzk2MDUsMzk2MDYsMzk2MDksMzk2MTEsMzk2MTQsMzk2MTUsMzk2MTcsMzk2MTksMzk2MjIsMzk2MjQsMzk2MzAsMzk2MzIsMzk2MzQsMzk2MzcsMzk2MzgsMzk2Mzks''@;'; put 'put ''Mzk2NDMsMzk2NDQsMzk2NDgsMzk2NTIsMzk2NTMsMzk2NTUsMzk2NTcsMzk2NjAsMzk2NjYsMzk2NjcsMzk2NjksMzk2NzMsMzk2NzQsMzk2NzcsMzk2NzksMzk2ODAsMzk2ODEsMzk2ODIsMzk2ODMsMzk2ODQsMzk2ODUsMzk2ODgsMzk2ODksMzk2OTEsMzk2OTIsMzk2OTMsMzk2OTQsMzk2''@;'; put 'put ''OTYsMzk2OTgsMzk3MDIsMzk3MDUsMzk3MDcsMzk3MDgsMzk3MTIsMzk3MTgsMzk3MjMsMzk3MjUsMzk3MzEsMzk3MzIsMzk3MzMsMzk3MzUsMzk3MzcsMzk3MzgsMzk3NDEsMzk3NTIsMzk3NTUsMzk3NTYsMzk3NjUsMzk3NjYsMzk3NjcsMzk3NzEsMzk3NzQsMzk3NzcsMzk3NzksMzk3ODEs''@;'; put 'put ''Mzk3ODIsMzk3ODQsMzk3ODYsMzk3ODcsMzk3ODgsMzk3ODksMzk3OTAsMzk3OTUsMzk3OTcsMzk3OTksMzk4MDAsMzk4MDEsMzk4MDcsMzk4MDgsMzk4MTIsMzk4MTMsMzk4MTQsMzk4MTUsMzk4MTcsMzk4MTgsMzk4MTksMzk4MjEsMzk4MjMsMzk4MjQsMzk4MjgsMzk4MzQsMzk4MzcsMzk4''@;'; put 'put ''MzgsMzk4NDYsMzk4NDcsMzk4NDksMzk4NTIsMzk4NTYsMzk4NTcsMzk4NTgsMzk4NjMsMzk4NjQsMzk4NjcsMzk4NjgsMzk4NzAsMzk4NzEsMzk4NzMsMzk4NzksMzk4ODAsMzk4ODYsMzk4ODgsMzk4OTUsMzk4OTYsMzk5MDEsMzk5MDMsMzk5MDksMzk5MTEsMzk5MTQsMzk5MTUsMzk5MTks''@;'; put 'put ''Mzk5MjMsMzk5MjcsMzk5MjgsMzk5MjksMzk5MzAsMzk5MzMsMzk5MzUsMzk5MzYsMzk5MzgsMzk5NDcsMzk5NTEsMzk5NTMsMzk5NTgsMzk5NjAsMzk5NjEsMzk5NjIsMzk5NjQsMzk5NjYsMzk5NzAsMzk5NzEsMzk5NzQsMzk5NzUsMzk5NzYsMzk5NzcsMzk5NzgsMzk5ODUsMzk5ODksMzk5''@;'; put 'put ''OTAsMzk5OTEsMzk5OTcsNDAwMDEsNDAwMDMsNDAwMDQsNDAwMDUsNDAwMDksNDAwMTAsNDAwMTQsNDAwMTUsNDAwMTYsNDAwMTksNDAwMjAsNDAwMjIsNDAwMjQsNDAwMjcsNDAwMjksNDAwMzAsNDAwMzEsNDAwMzUsNDAwNDEsNDAwNDIsNDAwMjgsNDAwNDMsNDAwNDAsNDAwNDYsNDAwNDgs''@;'; put 'put ''NDAwNTAsNDAwNTMsNDAwNTUsNDAwNTksNDAxNjYsNDAxNzgsNDAxODMsNDAxODUsNDAyMDMsNDAxOTQsNDAyMDksNDAyMTUsNDAyMTYsNDAyMjAsNDAyMjEsNDAyMjIsNDAyMzksNDAyNDAsNDAyNDIsNDAyNDMsNDAyNDQsNDAyNTAsNDAyNTIsNDAyNjEsNDAyNTMsNDAyNTgsNDAyNTksNDAy''@;'; put 'put ''NjMsNDAyNjYsNDAyNzUsNDAyNzYsNDAyODcsNDAyOTEsNDAyOTAsNDAyOTMsNDAyOTcsNDAyOTgsNDAyOTksNDAzMDQsNDAzMTAsNDAzMTEsNDAzMTUsNDAzMTYsNDAzMTgsNDAzMjMsNDAzMjQsNDAzMjYsNDAzMzAsNDAzMzMsNDAzMzQsNDAzMzgsNDAzMzksNDAzNDEsNDAzNDIsNDAzNDMs''@;'; put 'put ''NDAzNDQsNDAzNTMsNDAzNjIsNDAzNjQsNDAzNjYsNDAzNjksNDAzNzMsNDAzNzcsNDAzODAsNDAzODMsNDAzODcsNDAzOTEsNDAzOTMsNDAzOTQsNDA0MDQsNDA0MDUsNDA0MDYsNDA0MDcsNDA0MTAsNDA0MTQsNDA0MTUsNDA0MTYsNDA0MjEsNDA0MjMsNDA0MjUsNDA0MjcsNDA0MzAsNDA0''@;'; put 'put ''MzIsNDA0MzUsNDA0MzYsNDA0NDYsNDA0NTgsNDA0NTAsNDA0NTUsNDA0NjIsNDA0NjQsNDA0NjUsNDA0NjYsNDA0NjksNDA0NzAsNDA0NzMsNDA0NzYsNDA0NzcsNDA1NzAsNDA1NzEsNDA1NzIsNDA1NzYsNDA1NzgsNDA1NzksNDA1ODAsNDA1ODEsNDA1ODMsNDA1OTAsNDA1OTEsNDA1OTgs''@;'; put 'put ''NDA2MDAsNDA2MDMsNDA2MDYsNDA2MTIsNDA2MTYsNDA2MjAsNDA2MjIsNDA2MjMsNDA2MjQsNDA2MjcsNDA2MjgsNDA2MjksNDA2NDYsNDA2NDgsNDA2NTEsNDA2NjEsNDA2NzEsNDA2NzYsNDA2NzksNDA2ODQsNDA2ODUsNDA2ODYsNDA2ODgsNDA2ODksNDA2OTAsNDA2OTMsNDA2OTYsNDA3''@;'; put 'put ''MDMsNDA3MDYsNDA3MDcsNDA3MTMsNDA3MTksNDA3MjAsNDA3MjEsNDA3MjIsNDA3MjQsNDA3MjYsNDA3MjcsNDA3MjksNDA3MzAsNDA3MzEsNDA3MzUsNDA3MzgsNDA3NDIsNDA3NDYsNDA3NDcsNDA3NTEsNDA3NTMsNDA3NTQsNDA3NTYsNDA3NTksNDA3NjEsNDA3NjIsNDA3NjQsNDA3NjUs''@;'; put 'put ''NDA3NjcsNDA3NjksNDA3NzEsNDA3NzIsNDA3NzMsNDA3NzQsNDA3NzUsNDA3ODcsNDA3ODksNDA3OTAsNDA3OTEsNDA3OTIsNDA3OTQsNDA3OTcsNDA3OTgsNDA4MDgsNDA4MDksNDA4MTMsNDA4MTQsNDA4MTUsNDA4MTYsNDA4MTcsNDA4MTksNDA4MjEsNDA4MjYsNDA4MjksNDA4NDcsNDA4''@;'; put 'put ''NDgsNDA4NDksNDA4NTAsNDA4NTIsNDA4NTQsNDA4NTUsNDA4NjIsNDA4NjUsNDA4NjYsNDA4NjcsNDA4NjksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; 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 ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsXSxpYm04NjY6WzEwNDAsMTA0MSwxMDQyLDEwNDMsMTA0NCwxMDQ1LDEwNDYsMTA0NywxMDQ4LDEwNDksMTA1''@;'; put 'put ''MCwxMDUxLDEwNTIsMTA1MywxMDU0LDEwNTUsMTA1NiwxMDU3LDEwNTgsMTA1OSwxMDYwLDEwNjEsMTA2MiwxMDYzLDEwNjQsMTA2NSwxMDY2LDEwNjcsMTA2OCwxMDY5LDEwNzAsMTA3MSwxMDcyLDEwNzMsMTA3NCwxMDc1LDEwNzYsMTA3NywxMDc4LDEwNzksMTA4MCwxMDgxLDEwODIsMTA4''@;'; put 'put ''MywxMDg0LDEwODUsMTA4NiwxMDg3LDk2MTcsOTYxOCw5NjE5LDk0NzQsOTUwOCw5NTY5LDk1NzAsOTU1OCw5NTU3LDk1NzEsOTU1Myw5NTU5LDk1NjUsOTU2NCw5NTYzLDk0ODgsOTQ5Miw5NTI0LDk1MTYsOTUwMCw5NDcyLDk1MzIsOTU2Niw5NTY3LDk1NjIsOTU1Niw5NTc3LDk1NzQsOTU2''@;'; put 'put ''OCw5NTUyLDk1ODAsOTU3NSw5NTc2LDk1NzIsOTU3Myw5NTYxLDk1NjAsOTU1NCw5NTU1LDk1NzksOTU3OCw5NDk2LDk0ODQsOTYwOCw5NjA0LDk2MTIsOTYxNiw5NjAwLDEwODgsMTA4OSwxMDkwLDEwOTEsMTA5MiwxMDkzLDEwOTQsMTA5NSwxMDk2LDEwOTcsMTA5OCwxMDk5LDExMDAsMTEw''@;'; put 'put ''MSwxMTAyLDExMDMsMTAyNSwxMTA1LDEwMjgsMTEwOCwxMDMxLDExMTEsMTAzOCwxMTE4LDE3Niw4NzI5LDE4Myw4NzMwLDg0NzAsMTY0LDk2MzIsMTYwXSwiaXNvLTg4NTktMiI6WzEyOCwxMjksMTMwLDEzMSwxMzIsMTMzLDEzNCwxMzUsMTM2LDEzNywxMzgsMTM5LDE0MCwxNDEsMTQyLDE0''@;'; put 'put ''MywxNDQsMTQ1LDE0NiwxNDcsMTQ4LDE0OSwxNTAsMTUxLDE1MiwxNTMsMTU0LDE1NSwxNTYsMTU3LDE1OCwxNTksMTYwLDI2MCw3MjgsMzIxLDE2NCwzMTcsMzQ2LDE2NywxNjgsMzUyLDM1MCwzNTYsMzc3LDE3MywzODEsMzc5LDE3NiwyNjEsNzMxLDMyMiwxODAsMzE4LDM0Nyw3MTEsMTg0''@;'; put 'put ''LDM1MywzNTEsMzU3LDM3OCw3MzMsMzgyLDM4MCwzNDAsMTkzLDE5NCwyNTgsMTk2LDMxMywyNjIsMTk5LDI2OCwyMDEsMjgwLDIwMywyODIsMjA1LDIwNiwyNzAsMjcyLDMyMywzMjcsMjExLDIxMiwzMzYsMjE0LDIxNSwzNDQsMzY2LDIxOCwzNjgsMjIwLDIyMSwzNTQsMjIzLDM0MSwyMjUs''@;'; put 'put ''MjI2LDI1OSwyMjgsMzE0LDI2MywyMzEsMjY5LDIzMywyODEsMjM1LDI4MywyMzcsMjM4LDI3MSwyNzMsMzI0LDMyOCwyNDMsMjQ0LDMzNywyNDYsMjQ3LDM0NSwzNjcsMjUwLDM2OSwyNTIsMjUzLDM1NSw3MjldLCJpc28tODg1OS0zIjpbMTI4LDEyOSwxMzAsMTMxLDEzMiwxMzMsMTM0LDEz''@;'; put 'put ''NSwxMzYsMTM3LDEzOCwxMzksMTQwLDE0MSwxNDIsMTQzLDE0NCwxNDUsMTQ2LDE0NywxNDgsMTQ5LDE1MCwxNTEsMTUyLDE1MywxNTQsMTU1LDE1NiwxNTcsMTU4LDE1OSwxNjAsMjk0LDcyOCwxNjMsMTY0LG51bGwsMjkyLDE2NywxNjgsMzA0LDM1MCwyODYsMzA4LDE3MyxudWxsLDM3OSwx''@;'; put 'put ''NzYsMjk1LDE3OCwxNzksMTgwLDE4MSwyOTMsMTgzLDE4NCwzMDUsMzUxLDI4NywzMDksMTg5LG51bGwsMzgwLDE5MiwxOTMsMTk0LG51bGwsMTk2LDI2NiwyNjQsMTk5LDIwMCwyMDEsMjAyLDIwMywyMDQsMjA1LDIwNiwyMDcsbnVsbCwyMDksMjEwLDIxMSwyMTIsMjg4LDIxNCwyMTUsMjg0''@;'; put 'put ''LDIxNywyMTgsMjE5LDIyMCwzNjQsMzQ4LDIyMywyMjQsMjI1LDIyNixudWxsLDIyOCwyNjcsMjY1LDIzMSwyMzIsMjMzLDIzNCwyMzUsMjM2LDIzNywyMzgsMjM5LG51bGwsMjQxLDI0MiwyNDMsMjQ0LDI4OSwyNDYsMjQ3LDI4NSwyNDksMjUwLDI1MSwyNTIsMzY1LDM0OSw3MjldLCJpc28t''@;'; put 'put ''ODg1OS00IjpbMTI4LDEyOSwxMzAsMTMxLDEzMiwxMzMsMTM0LDEzNSwxMzYsMTM3LDEzOCwxMzksMTQwLDE0MSwxNDIsMTQzLDE0NCwxNDUsMTQ2LDE0NywxNDgsMTQ5LDE1MCwxNTEsMTUyLDE1MywxNTQsMTU1LDE1NiwxNTcsMTU4LDE1OSwxNjAsMjYwLDMxMiwzNDIsMTY0LDI5NiwzMTUs''@;'; put 'put ''MTY3LDE2OCwzNTIsMjc0LDI5MCwzNTgsMTczLDM4MSwxNzUsMTc2LDI2MSw3MzEsMzQzLDE4MCwyOTcsMzE2LDcxMSwxODQsMzUzLDI3NSwyOTEsMzU5LDMzMCwzODIsMzMxLDI1NiwxOTMsMTk0LDE5NSwxOTYsMTk3LDE5OCwzMDIsMjY4LDIwMSwyODAsMjAzLDI3OCwyMDUsMjA2LDI5OCwy''@;'; put 'put ''NzIsMzI1LDMzMiwzMTAsMjEyLDIxMywyMTQsMjE1LDIxNiwzNzAsMjE4LDIxOSwyMjAsMzYwLDM2MiwyMjMsMjU3LDIyNSwyMjYsMjI3LDIyOCwyMjksMjMwLDMwMywyNjksMjMzLDI4MSwyMzUsMjc5LDIzNywyMzgsMjk5LDI3MywzMjYsMzMzLDMxMSwyNDQsMjQ1LDI0NiwyNDcsMjQ4LDM3''@;'; put 'put ''MSwyNTAsMjUxLDI1MiwzNjEsMzYzLDcyOV0sImlzby04ODU5LTUiOlsxMjgsMTI5LDEzMCwxMzEsMTMyLDEzMywxMzQsMTM1LDEzNiwxMzcsMTM4LDEzOSwxNDAsMTQxLDE0MiwxNDMsMTQ0LDE0NSwxNDYsMTQ3LDE0OCwxNDksMTUwLDE1MSwxNTIsMTUzLDE1NCwxNTUsMTU2LDE1NywxNTgs''@;'; put 'put ''MTU5LDE2MCwxMDI1LDEwMjYsMTAyNywxMDI4LDEwMjksMTAzMCwxMDMxLDEwMzIsMTAzMywxMDM0LDEwMzUsMTAzNiwxNzMsMTAzOCwxMDM5LDEwNDAsMTA0MSwxMDQyLDEwNDMsMTA0NCwxMDQ1LDEwNDYsMTA0NywxMDQ4LDEwNDksMTA1MCwxMDUxLDEwNTIsMTA1MywxMDU0LDEwNTUsMTA1''@;'; put 'put ''NiwxMDU3LDEwNTgsMTA1OSwxMDYwLDEwNjEsMTA2MiwxMDYzLDEwNjQsMTA2NSwxMDY2LDEwNjcsMTA2OCwxMDY5LDEwNzAsMTA3MSwxMDcyLDEwNzMsMTA3NCwxMDc1LDEwNzYsMTA3NywxMDc4LDEwNzksMTA4MCwxMDgxLDEwODIsMTA4MywxMDg0LDEwODUsMTA4NiwxMDg3LDEwODgsMTA4''@;'; put 'put ''OSwxMDkwLDEwOTEsMTA5MiwxMDkzLDEwOTQsMTA5NSwxMDk2LDEwOTcsMTA5OCwxMDk5LDExMDAsMTEwMSwxMTAyLDExMDMsODQ3MCwxMTA1LDExMDYsMTEwNywxMTA4LDExMDksMTExMCwxMTExLDExMTIsMTExMywxMTE0LDExMTUsMTExNiwxNjcsMTExOCwxMTE5XSwiaXNvLTg4NTktNiI6''@;'; put 'put ''WzEyOCwxMjksMTMwLDEzMSwxMzIsMTMzLDEzNCwxMzUsMTM2LDEzNywxMzgsMTM5LDE0MCwxNDEsMTQyLDE0MywxNDQsMTQ1LDE0NiwxNDcsMTQ4LDE0OSwxNTAsMTUxLDE1MiwxNTMsMTU0LDE1NSwxNTYsMTU3LDE1OCwxNTksMTYwLG51bGwsbnVsbCxudWxsLDE2NCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLDE1NDgsMTczLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMTU2MyxudWxsLG51bGwsbnVsbCwxNTY3LG51bGwsMTU2OSwxNTcwLDE1NzEsMTU3MiwxNTczLDE1NzQsMTU3NSwxNTc2''@;'; put 'put ''LDE1NzcsMTU3OCwxNTc5LDE1ODAsMTU4MSwxNTgyLDE1ODMsMTU4NCwxNTg1LDE1ODYsMTU4NywxNTg4LDE1ODksMTU5MCwxNTkxLDE1OTIsMTU5MywxNTk0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwxNjAwLDE2MDEsMTYwMiwxNjAzLDE2MDQsMTYwNSwxNjA2LDE2MDcsMTYwOCwxNjA5''@;'; put 'put ''LDE2MTAsMTYxMSwxNjEyLDE2MTMsMTYxNCwxNjE1LDE2MTYsMTYxNywxNjE4LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGxdLCJpc28tODg1OS03IjpbMTI4LDEyOSwxMzAsMTMxLDEzMiwxMzMsMTM0LDEzNSwxMzYsMTM3''@;'; put 'put ''LDEzOCwxMzksMTQwLDE0MSwxNDIsMTQzLDE0NCwxNDUsMTQ2LDE0NywxNDgsMTQ5LDE1MCwxNTEsMTUyLDE1MywxNTQsMTU1LDE1NiwxNTcsMTU4LDE1OSwxNjAsODIxNiw4MjE3LDE2Myw4MzY0LDgzNjcsMTY2LDE2NywxNjgsMTY5LDg5MCwxNzEsMTcyLDE3MyxudWxsLDgyMTMsMTc2LDE3''@;'; put 'put ''NywxNzgsMTc5LDkwMCw5MDEsOTAyLDE4Myw5MDQsOTA1LDkwNiwxODcsOTA4LDE4OSw5MTAsOTExLDkxMiw5MTMsOTE0LDkxNSw5MTYsOTE3LDkxOCw5MTksOTIwLDkyMSw5MjIsOTIzLDkyNCw5MjUsOTI2LDkyNyw5MjgsOTI5LG51bGwsOTMxLDkzMiw5MzMsOTM0LDkzNSw5MzYsOTM3LDkz''@;'; put 'put ''OCw5MzksOTQwLDk0MSw5NDIsOTQzLDk0NCw5NDUsOTQ2LDk0Nyw5NDgsOTQ5LDk1MCw5NTEsOTUyLDk1Myw5NTQsOTU1LDk1Niw5NTcsOTU4LDk1OSw5NjAsOTYxLDk2Miw5NjMsOTY0LDk2NSw5NjYsOTY3LDk2OCw5NjksOTcwLDk3MSw5NzIsOTczLDk3NCxudWxsXSwiaXNvLTg4NTktOCI6''@;'; put 'put ''WzEyOCwxMjksMTMwLDEzMSwxMzIsMTMzLDEzNCwxMzUsMTM2LDEzNywxMzgsMTM5LDE0MCwxNDEsMTQyLDE0MywxNDQsMTQ1LDE0NiwxNDcsMTQ4LDE0OSwxNTAsMTUxLDE1MiwxNTMsMTU0LDE1NSwxNTYsMTU3LDE1OCwxNTksMTYwLG51bGwsMTYyLDE2MywxNjQsMTY1LDE2NiwxNjcsMTY4''@;'; put 'put ''LDE2OSwyMTUsMTcxLDE3MiwxNzMsMTc0LDE3NSwxNzYsMTc3LDE3OCwxNzksMTgwLDE4MSwxODIsMTgzLDE4NCwxODUsMjQ3LDE4NywxODgsMTg5LDE5MCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsODIxNSwxNDg4LDE0ODksMTQ5MCwxNDkxLDE0OTIsMTQ5MywxNDk0LDE0OTUsMTQ5NiwxNDk3LDE0OTgsMTQ5OSwxNTAwLDE1MDEsMTUwMiwx''@;'; put 'put ''NTAzLDE1MDQsMTUwNSwxNTA2LDE1MDcsMTUwOCwxNTA5LDE1MTAsMTUxMSwxNTEyLDE1MTMsMTUxNCxudWxsLG51bGwsODIwNiw4MjA3LG51bGxdLCJpc28tODg1OS0xMCI6WzEyOCwxMjksMTMwLDEzMSwxMzIsMTMzLDEzNCwxMzUsMTM2LDEzNywxMzgsMTM5LDE0MCwxNDEsMTQyLDE0Mywx''@;'; put 'put ''NDQsMTQ1LDE0NiwxNDcsMTQ4LDE0OSwxNTAsMTUxLDE1MiwxNTMsMTU0LDE1NSwxNTYsMTU3LDE1OCwxNTksMTYwLDI2MCwyNzQsMjkwLDI5OCwyOTYsMzEwLDE2NywzMTUsMjcyLDM1MiwzNTgsMzgxLDE3MywzNjIsMzMwLDE3NiwyNjEsMjc1LDI5MSwyOTksMjk3LDMxMSwxODMsMzE2LDI3''@;'; put 'put ''MywzNTMsMzU5LDM4Miw4MjEzLDM2MywzMzEsMjU2LDE5MywxOTQsMTk1LDE5NiwxOTcsMTk4LDMwMiwyNjgsMjAxLDI4MCwyMDMsMjc4LDIwNSwyMDYsMjA3LDIwOCwzMjUsMzMyLDIxMSwyMTIsMjEzLDIxNCwzNjAsMjE2LDM3MCwyMTgsMjE5LDIyMCwyMjEsMjIyLDIyMywyNTcsMjI1LDIy''@;'; put 'put ''NiwyMjcsMjI4LDIyOSwyMzAsMzAzLDI2OSwyMzMsMjgxLDIzNSwyNzksMjM3LDIzOCwyMzksMjQwLDMyNiwzMzMsMjQzLDI0NCwyNDUsMjQ2LDM2MSwyNDgsMzcxLDI1MCwyNTEsMjUyLDI1MywyNTQsMzEyXSwiaXNvLTg4NTktMTMiOlsxMjgsMTI5LDEzMCwxMzEsMTMyLDEzMywxMzQsMTM1''@;'; put 'put ''LDEzNiwxMzcsMTM4LDEzOSwxNDAsMTQxLDE0MiwxNDMsMTQ0LDE0NSwxNDYsMTQ3LDE0OCwxNDksMTUwLDE1MSwxNTIsMTUzLDE1NCwxNTUsMTU2LDE1NywxNTgsMTU5LDE2MCw4MjIxLDE2MiwxNjMsMTY0LDgyMjIsMTY2LDE2NywyMTYsMTY5LDM0MiwxNzEsMTcyLDE3MywxNzQsMTk4LDE3''@;'; put 'put ''NiwxNzcsMTc4LDE3OSw4MjIwLDE4MSwxODIsMTgzLDI0OCwxODUsMzQzLDE4NywxODgsMTg5LDE5MCwyMzAsMjYwLDMwMiwyNTYsMjYyLDE5NiwxOTcsMjgwLDI3NCwyNjgsMjAxLDM3NywyNzgsMjkwLDMxMCwyOTgsMzE1LDM1MiwzMjMsMzI1LDIxMSwzMzIsMjEzLDIxNCwyMTUsMzcwLDMy''@;'; put 'put ''MSwzNDYsMzYyLDIyMCwzNzksMzgxLDIyMywyNjEsMzAzLDI1NywyNjMsMjI4LDIyOSwyODEsMjc1LDI2OSwyMzMsMzc4LDI3OSwyOTEsMzExLDI5OSwzMTYsMzUzLDMyNCwzMjYsMjQzLDMzMywyNDUsMjQ2LDI0NywzNzEsMzIyLDM0NywzNjMsMjUyLDM4MCwzODIsODIxN10sImlzby04ODU5''@;'; put 'put ''LTE0IjpbMTI4LDEyOSwxMzAsMTMxLDEzMiwxMzMsMTM0LDEzNSwxMzYsMTM3LDEzOCwxMzksMTQwLDE0MSwxNDIsMTQzLDE0NCwxNDUsMTQ2LDE0NywxNDgsMTQ5LDE1MCwxNTEsMTUyLDE1MywxNTQsMTU1LDE1NiwxNTcsMTU4LDE1OSwxNjAsNzY4Miw3NjgzLDE2MywyNjYsMjY3LDc2OTAs''@;'; put 'put ''MTY3LDc4MDgsMTY5LDc4MTAsNzY5MSw3OTIyLDE3MywxNzQsMzc2LDc3MTAsNzcxMSwyODgsMjg5LDc3NDQsNzc0NSwxODIsNzc2Niw3ODA5LDc3NjcsNzgxMSw3Nzc2LDc5MjMsNzgxMiw3ODEzLDc3NzcsMTkyLDE5MywxOTQsMTk1LDE5NiwxOTcsMTk4LDE5OSwyMDAsMjAxLDIwMiwyMDMs''@;'; put 'put ''MjA0LDIwNSwyMDYsMjA3LDM3MiwyMDksMjEwLDIxMSwyMTIsMjEzLDIxNCw3Nzg2LDIxNiwyMTcsMjE4LDIxOSwyMjAsMjIxLDM3NCwyMjMsMjI0LDIyNSwyMjYsMjI3LDIyOCwyMjksMjMwLDIzMSwyMzIsMjMzLDIzNCwyMzUsMjM2LDIzNywyMzgsMjM5LDM3MywyNDEsMjQyLDI0MywyNDQs''@;'; put 'put ''MjQ1LDI0Niw3Nzg3LDI0OCwyNDksMjUwLDI1MSwyNTIsMjUzLDM3NSwyNTVdLCJpc28tODg1OS0xNSI6WzEyOCwxMjksMTMwLDEzMSwxMzIsMTMzLDEzNCwxMzUsMTM2LDEzNywxMzgsMTM5LDE0MCwxNDEsMTQyLDE0MywxNDQsMTQ1LDE0NiwxNDcsMTQ4LDE0OSwxNTAsMTUxLDE1MiwxNTMs''@;'; put 'put ''MTU0LDE1NSwxNTYsMTU3LDE1OCwxNTksMTYwLDE2MSwxNjIsMTYzLDgzNjQsMTY1LDM1MiwxNjcsMzUzLDE2OSwxNzAsMTcxLDE3MiwxNzMsMTc0LDE3NSwxNzYsMTc3LDE3OCwxNzksMzgxLDE4MSwxODIsMTgzLDM4MiwxODUsMTg2LDE4NywzMzgsMzM5LDM3NiwxOTEsMTkyLDE5MywxOTQs''@;'; put 'put ''MTk1LDE5NiwxOTcsMTk4LDE5OSwyMDAsMjAxLDIwMiwyMDMsMjA0LDIwNSwyMDYsMjA3LDIwOCwyMDksMjEwLDIxMSwyMTIsMjEzLDIxNCwyMTUsMjE2LDIxNywyMTgsMjE5LDIyMCwyMjEsMjIyLDIyMywyMjQsMjI1LDIyNiwyMjcsMjI4LDIyOSwyMzAsMjMxLDIzMiwyMzMsMjM0LDIzNSwy''@;'; put 'put ''MzYsMjM3LDIzOCwyMzksMjQwLDI0MSwyNDIsMjQzLDI0NCwyNDUsMjQ2LDI0NywyNDgsMjQ5LDI1MCwyNTEsMjUyLDI1MywyNTQsMjU1XSwiaXNvLTg4NTktMTYiOlsxMjgsMTI5LDEzMCwxMzEsMTMyLDEzMywxMzQsMTM1LDEzNiwxMzcsMTM4LDEzOSwxNDAsMTQxLDE0MiwxNDMsMTQ0LDE0''@;'; put 'put ''NSwxNDYsMTQ3LDE0OCwxNDksMTUwLDE1MSwxNTIsMTUzLDE1NCwxNTUsMTU2LDE1NywxNTgsMTU5LDE2MCwyNjAsMjYxLDMyMSw4MzY0LDgyMjIsMzUyLDE2NywzNTMsMTY5LDUzNiwxNzEsMzc3LDE3MywzNzgsMzc5LDE3NiwxNzcsMjY4LDMyMiwzODEsODIyMSwxODIsMTgzLDM4MiwyNjks''@;'; put 'put ''NTM3LDE4NywzMzgsMzM5LDM3NiwzODAsMTkyLDE5MywxOTQsMjU4LDE5NiwyNjIsMTk4LDE5OSwyMDAsMjAxLDIwMiwyMDMsMjA0LDIwNSwyMDYsMjA3LDI3MiwzMjMsMjEwLDIxMSwyMTIsMzM2LDIxNCwzNDYsMzY4LDIxNywyMTgsMjE5LDIyMCwyODAsNTM4LDIyMywyMjQsMjI1LDIyNiwy''@;'; put 'put ''NTksMjI4LDI2MywyMzAsMjMxLDIzMiwyMzMsMjM0LDIzNSwyMzYsMjM3LDIzOCwyMzksMjczLDMyNCwyNDIsMjQzLDI0NCwzMzcsMjQ2LDM0NywzNjksMjQ5LDI1MCwyNTEsMjUyLDI4MSw1MzksMjU1XSwia29pOC1yIjpbOTQ3Miw5NDc0LDk0ODQsOTQ4OCw5NDkyLDk0OTYsOTUwMCw5NTA4''@;'; put 'put ''LDk1MTYsOTUyNCw5NTMyLDk2MDAsOTYwNCw5NjA4LDk2MTIsOTYxNiw5NjE3LDk2MTgsOTYxOSw4OTkyLDk2MzIsODcyOSw4NzMwLDg3NzYsODgwNCw4ODA1LDE2MCw4OTkzLDE3NiwxNzgsMTgzLDI0Nyw5NTUyLDk1NTMsOTU1NCwxMTA1LDk1NTUsOTU1Niw5NTU3LDk1NTgsOTU1OSw5NTYw''@;'; put 'put ''LDk1NjEsOTU2Miw5NTYzLDk1NjQsOTU2NSw5NTY2LDk1NjcsOTU2OCw5NTY5LDEwMjUsOTU3MCw5NTcxLDk1NzIsOTU3Myw5NTc0LDk1NzUsOTU3Niw5NTc3LDk1NzgsOTU3OSw5NTgwLDE2OSwxMTAyLDEwNzIsMTA3MywxMDk0LDEwNzYsMTA3NywxMDkyLDEwNzUsMTA5MywxMDgwLDEwODEs''@;'; put 'put ''MTA4MiwxMDgzLDEwODQsMTA4NSwxMDg2LDEwODcsMTEwMywxMDg4LDEwODksMTA5MCwxMDkxLDEwNzgsMTA3NCwxMTAwLDEwOTksMTA3OSwxMDk2LDExMDEsMTA5NywxMDk1LDEwOTgsMTA3MCwxMDQwLDEwNDEsMTA2MiwxMDQ0LDEwNDUsMTA2MCwxMDQzLDEwNjEsMTA0OCwxMDQ5LDEwNTAs''@;'; put 'put ''MTA1MSwxMDUyLDEwNTMsMTA1NCwxMDU1LDEwNzEsMTA1NiwxMDU3LDEwNTgsMTA1OSwxMDQ2LDEwNDIsMTA2OCwxMDY3LDEwNDcsMTA2NCwxMDY5LDEwNjUsMTA2MywxMDY2XSwia29pOC11IjpbOTQ3Miw5NDc0LDk0ODQsOTQ4OCw5NDkyLDk0OTYsOTUwMCw5NTA4LDk1MTYsOTUyNCw5NTMy''@;'; put 'put ''LDk2MDAsOTYwNCw5NjA4LDk2MTIsOTYxNiw5NjE3LDk2MTgsOTYxOSw4OTkyLDk2MzIsODcyOSw4NzMwLDg3NzYsODgwNCw4ODA1LDE2MCw4OTkzLDE3NiwxNzgsMTgzLDI0Nyw5NTUyLDk1NTMsOTU1NCwxMTA1LDExMDgsOTU1NiwxMTEwLDExMTEsOTU1OSw5NTYwLDk1NjEsOTU2Miw5NTYz''@;'; put 'put ''LDExNjksMTExOCw5NTY2LDk1NjcsOTU2OCw5NTY5LDEwMjUsMTAyOCw5NTcxLDEwMzAsMTAzMSw5NTc0LDk1NzUsOTU3Niw5NTc3LDk1NzgsMTE2OCwxMDM4LDE2OSwxMTAyLDEwNzIsMTA3MywxMDk0LDEwNzYsMTA3NywxMDkyLDEwNzUsMTA5MywxMDgwLDEwODEsMTA4MiwxMDgzLDEwODQs''@;'; put 'put ''MTA4NSwxMDg2LDEwODcsMTEwMywxMDg4LDEwODksMTA5MCwxMDkxLDEwNzgsMTA3NCwxMTAwLDEwOTksMTA3OSwxMDk2LDExMDEsMTA5NywxMDk1LDEwOTgsMTA3MCwxMDQwLDEwNDEsMTA2MiwxMDQ0LDEwNDUsMTA2MCwxMDQzLDEwNjEsMTA0OCwxMDQ5LDEwNTAsMTA1MSwxMDUyLDEwNTMs''@;'; put 'put ''MTA1NCwxMDU1LDEwNzEsMTA1NiwxMDU3LDEwNTgsMTA1OSwxMDQ2LDEwNDIsMTA2OCwxMDY3LDEwNDcsMTA2NCwxMDY5LDEwNjUsMTA2MywxMDY2XSxtYWNpbnRvc2g6WzE5NiwxOTcsMTk5LDIwMSwyMDksMjE0LDIyMCwyMjUsMjI0LDIyNiwyMjgsMjI3LDIyOSwyMzEsMjMzLDIzMiwyMzQs''@;'; put 'put ''MjM1LDIzNywyMzYsMjM4LDIzOSwyNDEsMjQzLDI0MiwyNDQsMjQ2LDI0NSwyNTAsMjQ5LDI1MSwyNTIsODIyNCwxNzYsMTYyLDE2MywxNjcsODIyNiwxODIsMjIzLDE3NCwxNjksODQ4MiwxODAsMTY4LDg4MDAsMTk4LDIxNiw4NzM0LDE3Nyw4ODA0LDg4MDUsMTY1LDE4MSw4NzA2LDg3MjEs''@;'; put 'put ''ODcxOSw5NjAsODc0NywxNzAsMTg2LDkzNywyMzAsMjQ4LDE5MSwxNjEsMTcyLDg3MzAsNDAyLDg3NzYsODcxMCwxNzEsMTg3LDgyMzAsMTYwLDE5MiwxOTUsMjEzLDMzOCwzMzksODIxMSw4MjEyLDgyMjAsODIyMSw4MjE2LDgyMTcsMjQ3LDk2NzQsMjU1LDM3Niw4MjYwLDgzNjQsODI0OSw4''@;'; put 'put ''MjUwLDY0MjU3LDY0MjU4LDgyMjUsMTgzLDgyMTgsODIyMiw4MjQwLDE5NCwyMDIsMTkzLDIwMywyMDAsMjA1LDIwNiwyMDcsMjA0LDIxMSwyMTIsNjM3NDMsMjEwLDIxOCwyMTksMjE3LDMwNSw3MTAsNzMyLDE3NSw3MjgsNzI5LDczMCwxODQsNzMzLDczMSw3MTFdLCJ3aW5kb3dzLTg3NCI6''@;'; put 'put ''WzgzNjQsMTI5LDEzMCwxMzEsMTMyLDgyMzAsMTM0LDEzNSwxMzYsMTM3LDEzOCwxMzksMTQwLDE0MSwxNDIsMTQzLDE0NCw4MjE2LDgyMTcsODIyMCw4MjIxLDgyMjYsODIxMSw4MjEyLDE1MiwxNTMsMTU0LDE1NSwxNTYsMTU3LDE1OCwxNTksMTYwLDM1ODUsMzU4NiwzNTg3LDM1ODgsMzU4''@;'; put 'put ''OSwzNTkwLDM1OTEsMzU5MiwzNTkzLDM1OTQsMzU5NSwzNTk2LDM1OTcsMzU5OCwzNTk5LDM2MDAsMzYwMSwzNjAyLDM2MDMsMzYwNCwzNjA1LDM2MDYsMzYwNywzNjA4LDM2MDksMzYxMCwzNjExLDM2MTIsMzYxMywzNjE0LDM2MTUsMzYxNiwzNjE3LDM2MTgsMzYxOSwzNjIwLDM2MjEsMzYy''@;'; put 'put ''MiwzNjIzLDM2MjQsMzYyNSwzNjI2LDM2MjcsMzYyOCwzNjI5LDM2MzAsMzYzMSwzNjMyLDM2MzMsMzYzNCwzNjM1LDM2MzYsMzYzNywzNjM4LDM2MzksMzY0MCwzNjQxLDM2NDIsbnVsbCxudWxsLG51bGwsbnVsbCwzNjQ3LDM2NDgsMzY0OSwzNjUwLDM2NTEsMzY1MiwzNjUzLDM2NTQsMzY1''@;'; put 'put ''NSwzNjU2LDM2NTcsMzY1OCwzNjU5LDM2NjAsMzY2MSwzNjYyLDM2NjMsMzY2NCwzNjY1LDM2NjYsMzY2NywzNjY4LDM2NjksMzY3MCwzNjcxLDM2NzIsMzY3MywzNjc0LDM2NzUsbnVsbCxudWxsLG51bGwsbnVsbF0sIndpbmRvd3MtMTI1MCI6WzgzNjQsMTI5LDgyMTgsMTMxLDgyMjIsODIz''@;'; put 'put ''MCw4MjI0LDgyMjUsMTM2LDgyNDAsMzUyLDgyNDksMzQ2LDM1NiwzODEsMzc3LDE0NCw4MjE2LDgyMTcsODIyMCw4MjIxLDgyMjYsODIxMSw4MjEyLDE1Miw4NDgyLDM1Myw4MjUwLDM0NywzNTcsMzgyLDM3OCwxNjAsNzExLDcyOCwzMjEsMTY0LDI2MCwxNjYsMTY3LDE2OCwxNjksMzUwLDE3''@;'; put 'put ''MSwxNzIsMTczLDE3NCwzNzksMTc2LDE3Nyw3MzEsMzIyLDE4MCwxODEsMTgyLDE4MywxODQsMjYxLDM1MSwxODcsMzE3LDczMywzMTgsMzgwLDM0MCwxOTMsMTk0LDI1OCwxOTYsMzEzLDI2MiwxOTksMjY4LDIwMSwyODAsMjAzLDI4MiwyMDUsMjA2LDI3MCwyNzIsMzIzLDMyNywyMTEsMjEy''@;'; put 'put ''LDMzNiwyMTQsMjE1LDM0NCwzNjYsMjE4LDM2OCwyMjAsMjIxLDM1NCwyMjMsMzQxLDIyNSwyMjYsMjU5LDIyOCwzMTQsMjYzLDIzMSwyNjksMjMzLDI4MSwyMzUsMjgzLDIzNywyMzgsMjcxLDI3MywzMjQsMzI4LDI0MywyNDQsMzM3LDI0NiwyNDcsMzQ1LDM2NywyNTAsMzY5LDI1MiwyNTMs''@;'; put 'put ''MzU1LDcyOV0sIndpbmRvd3MtMTI1MSI6WzEwMjYsMTAyNyw4MjE4LDExMDcsODIyMiw4MjMwLDgyMjQsODIyNSw4MzY0LDgyNDAsMTAzMyw4MjQ5LDEwMzQsMTAzNiwxMDM1LDEwMzksMTEwNiw4MjE2LDgyMTcsODIyMCw4MjIxLDgyMjYsODIxMSw4MjEyLDE1Miw4NDgyLDExMTMsODI1MCwx''@;'; put 'put ''MTE0LDExMTYsMTExNSwxMTE5LDE2MCwxMDM4LDExMTgsMTAzMiwxNjQsMTE2OCwxNjYsMTY3LDEwMjUsMTY5LDEwMjgsMTcxLDE3MiwxNzMsMTc0LDEwMzEsMTc2LDE3NywxMDMwLDExMTAsMTE2OSwxODEsMTgyLDE4MywxMTA1LDg0NzAsMTEwOCwxODcsMTExMiwxMDI5LDExMDksMTExMSwx''@;'; put 'put ''MDQwLDEwNDEsMTA0MiwxMDQzLDEwNDQsMTA0NSwxMDQ2LDEwNDcsMTA0OCwxMDQ5LDEwNTAsMTA1MSwxMDUyLDEwNTMsMTA1NCwxMDU1LDEwNTYsMTA1NywxMDU4LDEwNTksMTA2MCwxMDYxLDEwNjIsMTA2MywxMDY0LDEwNjUsMTA2NiwxMDY3LDEwNjgsMTA2OSwxMDcwLDEwNzEsMTA3Miwx''@;'; put 'put ''MDczLDEwNzQsMTA3NSwxMDc2LDEwNzcsMTA3OCwxMDc5LDEwODAsMTA4MSwxMDgyLDEwODMsMTA4NCwxMDg1LDEwODYsMTA4NywxMDg4LDEwODksMTA5MCwxMDkxLDEwOTIsMTA5MywxMDk0LDEwOTUsMTA5NiwxMDk3LDEwOTgsMTA5OSwxMTAwLDExMDEsMTEwMiwxMTAzXSwid2luZG93cy0x''@;'; put 'put ''MjUyIjpbODM2NCwxMjksODIxOCw0MDIsODIyMiw4MjMwLDgyMjQsODIyNSw3MTAsODI0MCwzNTIsODI0OSwzMzgsMTQxLDM4MSwxNDMsMTQ0LDgyMTYsODIxNyw4MjIwLDgyMjEsODIyNiw4MjExLDgyMTIsNzMyLDg0ODIsMzUzLDgyNTAsMzM5LDE1NywzODIsMzc2LDE2MCwxNjEsMTYyLDE2''@;'; put 'put ''MywxNjQsMTY1LDE2NiwxNjcsMTY4LDE2OSwxNzAsMTcxLDE3MiwxNzMsMTc0LDE3NSwxNzYsMTc3LDE3OCwxNzksMTgwLDE4MSwxODIsMTgzLDE4NCwxODUsMTg2LDE4NywxODgsMTg5LDE5MCwxOTEsMTkyLDE5MywxOTQsMTk1LDE5NiwxOTcsMTk4LDE5OSwyMDAsMjAxLDIwMiwyMDMsMjA0''@;'; put 'put ''LDIwNSwyMDYsMjA3LDIwOCwyMDksMjEwLDIxMSwyMTIsMjEzLDIxNCwyMTUsMjE2LDIxNywyMTgsMjE5LDIyMCwyMjEsMjIyLDIyMywyMjQsMjI1LDIyNiwyMjcsMjI4LDIyOSwyMzAsMjMxLDIzMiwyMzMsMjM0LDIzNSwyMzYsMjM3LDIzOCwyMzksMjQwLDI0MSwyNDIsMjQzLDI0NCwyNDUs''@;'; put 'put ''MjQ2LDI0NywyNDgsMjQ5LDI1MCwyNTEsMjUyLDI1MywyNTQsMjU1XSwid2luZG93cy0xMjUzIjpbODM2NCwxMjksODIxOCw0MDIsODIyMiw4MjMwLDgyMjQsODIyNSwxMzYsODI0MCwxMzgsODI0OSwxNDAsMTQxLDE0MiwxNDMsMTQ0LDgyMTYsODIxNyw4MjIwLDgyMjEsODIyNiw4MjExLDgy''@;'; put 'put ''MTIsMTUyLDg0ODIsMTU0LDgyNTAsMTU2LDE1NywxNTgsMTU5LDE2MCw5MDEsOTAyLDE2MywxNjQsMTY1LDE2NiwxNjcsMTY4LDE2OSxudWxsLDE3MSwxNzIsMTczLDE3NCw4MjEzLDE3NiwxNzcsMTc4LDE3OSw5MDAsMTgxLDE4MiwxODMsOTA0LDkwNSw5MDYsMTg3LDkwOCwxODksOTEwLDkx''@;'; put 'put ''MSw5MTIsOTEzLDkxNCw5MTUsOTE2LDkxNyw5MTgsOTE5LDkyMCw5MjEsOTIyLDkyMyw5MjQsOTI1LDkyNiw5MjcsOTI4LDkyOSxudWxsLDkzMSw5MzIsOTMzLDkzNCw5MzUsOTM2LDkzNyw5MzgsOTM5LDk0MCw5NDEsOTQyLDk0Myw5NDQsOTQ1LDk0Niw5NDcsOTQ4LDk0OSw5NTAsOTUxLDk1''@;'; put 'put ''Miw5NTMsOTU0LDk1NSw5NTYsOTU3LDk1OCw5NTksOTYwLDk2MSw5NjIsOTYzLDk2NCw5NjUsOTY2LDk2Nyw5NjgsOTY5LDk3MCw5NzEsOTcyLDk3Myw5NzQsbnVsbF0sIndpbmRvd3MtMTI1NCI6WzgzNjQsMTI5LDgyMTgsNDAyLDgyMjIsODIzMCw4MjI0LDgyMjUsNzEwLDgyNDAsMzUyLDgy''@;'; put 'put ''NDksMzM4LDE0MSwxNDIsMTQzLDE0NCw4MjE2LDgyMTcsODIyMCw4MjIxLDgyMjYsODIxMSw4MjEyLDczMiw4NDgyLDM1Myw4MjUwLDMzOSwxNTcsMTU4LDM3NiwxNjAsMTYxLDE2MiwxNjMsMTY0LDE2NSwxNjYsMTY3LDE2OCwxNjksMTcwLDE3MSwxNzIsMTczLDE3NCwxNzUsMTc2LDE3Nywx''@;'; put 'put ''NzgsMTc5LDE4MCwxODEsMTgyLDE4MywxODQsMTg1LDE4NiwxODcsMTg4LDE4OSwxOTAsMTkxLDE5MiwxOTMsMTk0LDE5NSwxOTYsMTk3LDE5OCwxOTksMjAwLDIwMSwyMDIsMjAzLDIwNCwyMDUsMjA2LDIwNywyODYsMjA5LDIxMCwyMTEsMjEyLDIxMywyMTQsMjE1LDIxNiwyMTcsMjE4LDIx''@;'; put 'put ''OSwyMjAsMzA0LDM1MCwyMjMsMjI0LDIyNSwyMjYsMjI3LDIyOCwyMjksMjMwLDIzMSwyMzIsMjMzLDIzNCwyMzUsMjM2LDIzNywyMzgsMjM5LDI4NywyNDEsMjQyLDI0MywyNDQsMjQ1LDI0NiwyNDcsMjQ4LDI0OSwyNTAsMjUxLDI1MiwzMDUsMzUxLDI1NV0sIndpbmRvd3MtMTI1NSI6Wzgz''@;'; put 'put ''NjQsMTI5LDgyMTgsNDAyLDgyMjIsODIzMCw4MjI0LDgyMjUsNzEwLDgyNDAsMTM4LDgyNDksMTQwLDE0MSwxNDIsMTQzLDE0NCw4MjE2LDgyMTcsODIyMCw4MjIxLDgyMjYsODIxMSw4MjEyLDczMiw4NDgyLDE1NCw4MjUwLDE1NiwxNTcsMTU4LDE1OSwxNjAsMTYxLDE2MiwxNjMsODM2Miwx''@;'; put 'put ''NjUsMTY2LDE2NywxNjgsMTY5LDIxNSwxNzEsMTcyLDE3MywxNzQsMTc1LDE3NiwxNzcsMTc4LDE3OSwxODAsMTgxLDE4MiwxODMsMTg0LDE4NSwyNDcsMTg3LDE4OCwxODksMTkwLDE5MSwxNDU2LDE0NTcsMTQ1OCwxNDU5LDE0NjAsMTQ2MSwxNDYyLDE0NjMsMTQ2NCwxNDY1LDE0NjYsMTQ2''@;'; put 'put ''NywxNDY4LDE0NjksMTQ3MCwxNDcxLDE0NzIsMTQ3MywxNDc0LDE0NzUsMTUyMCwxNTIxLDE1MjIsMTUyMywxNTI0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMTQ4OCwxNDg5LDE0OTAsMTQ5MSwxNDkyLDE0OTMsMTQ5NCwxNDk1LDE0OTYsMTQ5NywxNDk4LDE0OTksMTUw''@;'; put 'put ''MCwxNTAxLDE1MDIsMTUwMywxNTA0LDE1MDUsMTUwNiwxNTA3LDE1MDgsMTUwOSwxNTEwLDE1MTEsMTUxMiwxNTEzLDE1MTQsbnVsbCxudWxsLDgyMDYsODIwNyxudWxsXSwid2luZG93cy0xMjU2IjpbODM2NCwxNjYyLDgyMTgsNDAyLDgyMjIsODIzMCw4MjI0LDgyMjUsNzEwLDgyNDAsMTY1''@;'; put 'put ''Nyw4MjQ5LDMzOCwxNjcwLDE2ODgsMTY3MiwxNzExLDgyMTYsODIxNyw4MjIwLDgyMjEsODIyNiw4MjExLDgyMTIsMTcwNSw4NDgyLDE2ODEsODI1MCwzMzksODIwNCw4MjA1LDE3MjIsMTYwLDE1NDgsMTYyLDE2MywxNjQsMTY1LDE2NiwxNjcsMTY4LDE2OSwxNzI2LDE3MSwxNzIsMTczLDE3''@;'; put 'put ''NCwxNzUsMTc2LDE3NywxNzgsMTc5LDE4MCwxODEsMTgyLDE4MywxODQsMTg1LDE1NjMsMTg3LDE4OCwxODksMTkwLDE1NjcsMTcyOSwxNTY5LDE1NzAsMTU3MSwxNTcyLDE1NzMsMTU3NCwxNTc1LDE1NzYsMTU3NywxNTc4LDE1NzksMTU4MCwxNTgxLDE1ODIsMTU4MywxNTg0LDE1ODUsMTU4''@;'; put 'put ''NiwxNTg3LDE1ODgsMTU4OSwxNTkwLDIxNSwxNTkxLDE1OTIsMTU5MywxNTk0LDE2MDAsMTYwMSwxNjAyLDE2MDMsMjI0LDE2MDQsMjI2LDE2MDUsMTYwNiwxNjA3LDE2MDgsMjMxLDIzMiwyMzMsMjM0LDIzNSwxNjA5LDE2MTAsMjM4LDIzOSwxNjExLDE2MTIsMTYxMywxNjE0LDI0NCwxNjE1''@;'; put 'put ''LDE2MTYsMjQ3LDE2MTcsMjQ5LDE2MTgsMjUxLDI1Miw4MjA2LDgyMDcsMTc0Nl0sIndpbmRvd3MtMTI1NyI6WzgzNjQsMTI5LDgyMTgsMTMxLDgyMjIsODIzMCw4MjI0LDgyMjUsMTM2LDgyNDAsMTM4LDgyNDksMTQwLDE2OCw3MTEsMTg0LDE0NCw4MjE2LDgyMTcsODIyMCw4MjIxLDgyMjYs''@;'; put 'put ''ODIxMSw4MjEyLDE1Miw4NDgyLDE1NCw4MjUwLDE1NiwxNzUsNzMxLDE1OSwxNjAsbnVsbCwxNjIsMTYzLDE2NCxudWxsLDE2NiwxNjcsMjE2LDE2OSwzNDIsMTcxLDE3MiwxNzMsMTc0LDE5OCwxNzYsMTc3LDE3OCwxNzksMTgwLDE4MSwxODIsMTgzLDI0OCwxODUsMzQzLDE4NywxODgsMTg5''@;'; put 'put ''LDE5MCwyMzAsMjYwLDMwMiwyNTYsMjYyLDE5NiwxOTcsMjgwLDI3NCwyNjgsMjAxLDM3NywyNzgsMjkwLDMxMCwyOTgsMzE1LDM1MiwzMjMsMzI1LDIxMSwzMzIsMjEzLDIxNCwyMTUsMzcwLDMyMSwzNDYsMzYyLDIyMCwzNzksMzgxLDIyMywyNjEsMzAzLDI1NywyNjMsMjI4LDIyOSwyODEs''@;'; put 'put ''Mjc1LDI2OSwyMzMsMzc4LDI3OSwyOTEsMzExLDI5OSwzMTYsMzUzLDMyNCwzMjYsMjQzLDMzMywyNDUsMjQ2LDI0NywzNzEsMzIyLDM0NywzNjMsMjUyLDM4MCwzODIsNzI5XSwid2luZG93cy0xMjU4IjpbODM2NCwxMjksODIxOCw0MDIsODIyMiw4MjMwLDgyMjQsODIyNSw3MTAsODI0MCwx''@;'; put 'put ''MzgsODI0OSwzMzgsMTQxLDE0MiwxNDMsMTQ0LDgyMTYsODIxNyw4MjIwLDgyMjEsODIyNiw4MjExLDgyMTIsNzMyLDg0ODIsMTU0LDgyNTAsMzM5LDE1NywxNTgsMzc2LDE2MCwxNjEsMTYyLDE2MywxNjQsMTY1LDE2NiwxNjcsMTY4LDE2OSwxNzAsMTcxLDE3MiwxNzMsMTc0LDE3NSwxNzYs''@;'; put 'put ''MTc3LDE3OCwxNzksMTgwLDE4MSwxODIsMTgzLDE4NCwxODUsMTg2LDE4NywxODgsMTg5LDE5MCwxOTEsMTkyLDE5MywxOTQsMjU4LDE5NiwxOTcsMTk4LDE5OSwyMDAsMjAxLDIwMiwyMDMsNzY4LDIwNSwyMDYsMjA3LDI3MiwyMDksNzc3LDIxMSwyMTIsNDE2LDIxNCwyMTUsMjE2LDIxNywy''@;'; put 'put ''MTgsMjE5LDIyMCw0MzEsNzcxLDIyMywyMjQsMjI1LDIyNiwyNTksMjI4LDIyOSwyMzAsMjMxLDIzMiwyMzMsMjM0LDIzNSw3NjksMjM3LDIzOCwyMzksMjczLDI0MSw4MDMsMjQzLDI0NCw0MTcsMjQ2LDI0NywyNDgsMjQ5LDI1MCwyNTEsMjUyLDQzMiw4MzYzLDI1NV0sIngtbWFjLWN5cmls''@;'; put 'put ''bGljIjpbMTA0MCwxMDQxLDEwNDIsMTA0MywxMDQ0LDEwNDUsMTA0NiwxMDQ3LDEwNDgsMTA0OSwxMDUwLDEwNTEsMTA1MiwxMDUzLDEwNTQsMTA1NSwxMDU2LDEwNTcsMTA1OCwxMDU5LDEwNjAsMTA2MSwxMDYyLDEwNjMsMTA2NCwxMDY1LDEwNjYsMTA2NywxMDY4LDEwNjksMTA3MCwxMDcx''@;'; put 'put ''LDgyMjQsMTc2LDExNjgsMTYzLDE2Nyw4MjI2LDE4MiwxMDMwLDE3NCwxNjksODQ4MiwxMDI2LDExMDYsODgwMCwxMDI3LDExMDcsODczNCwxNzcsODgwNCw4ODA1LDExMTAsMTgxLDExNjksMTAzMiwxMDI4LDExMDgsMTAzMSwxMTExLDEwMzMsMTExMywxMDM0LDExMTQsMTExMiwxMDI5LDE3''@;'; put 'put ''Miw4NzMwLDQwMiw4Nzc2LDg3MTAsMTcxLDE4Nyw4MjMwLDE2MCwxMDM1LDExMTUsMTAzNiwxMTE2LDExMDksODIxMSw4MjEyLDgyMjAsODIyMSw4MjE2LDgyMTcsMjQ3LDgyMjIsMTAzOCwxMTE4LDEwMzksMTExOSw4NDcwLDEwMjUsMTEwNSwxMTAzLDEwNzIsMTA3MywxMDc0LDEwNzUsMTA3''@;'; put 'put ''NiwxMDc3LDEwNzgsMTA3OSwxMDgwLDEwODEsMTA4MiwxMDgzLDEwODQsMTA4NSwxMDg2LDEwODcsMTA4OCwxMDg5LDEwOTAsMTA5MSwxMDkyLDEwOTMsMTA5NCwxMDk1LDEwOTYsMTA5NywxMDk4LDEwOTksMTEwMCwxMTAxLDExMDIsODM2NF19fSh0aGlzfHx7fSl9LDY0MzE4OmZ1bmN0aW9u''@;'; put 'put ''KHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBfKEFlLF90LG50KXtyZXR1cm4gX3Q8PUFlJiZBZTw9bnR9dWUuZXhwb3J0cyYmIUlbImVuY29kaW5nLWluZGV4ZXMiXSYmKElbImVuY29kaW5nLWluZGV4ZXMiXT15KDY3OTUxKVsiZW5jb2RpbmctaW5kZXhlcyJd''@;'; put 'put ''KTt2YXIgQj1NYXRoLmZsb29yO2Z1bmN0aW9uIHcoQWUpe2lmKHZvaWQgMD09PUFlKXJldHVybnt9O2lmKEFlPT09T2JqZWN0KEFlKSlyZXR1cm4gQWU7dGhyb3cgVHlwZUVycm9yKCJDb3VsZCBub3QgY29udmVydCBhcmd1bWVudCB0byBkaWN0aW9uYXJ5Iil9ZnVuY3Rpb24gTyhBZSl7cmV0''@;'; put 'put ''dXJuIDA8PUFlJiZBZTw9MTI3fXZhciB6PU8sTj0tMTtmdW5jdGlvbiBMKEFlKXt0aGlzLnRva2Vucz1bXS5zbGljZS5jYWxsKEFlKSx0aGlzLnRva2Vucy5yZXZlcnNlKCl9TC5wcm90b3R5cGU9e2VuZE9mU3RyZWFtOmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMudG9rZW5zLmxlbmd0aH0scmVh''@;'; put 'put ''ZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnRva2Vucy5sZW5ndGg/dGhpcy50b2tlbnMucG9wKCk6Tn0scHJlcGVuZDpmdW5jdGlvbihBZSl7aWYoQXJyYXkuaXNBcnJheShBZSkpZm9yKHZhciBfdD1BZTtfdC5sZW5ndGg7KXRoaXMudG9rZW5zLnB1c2goX3QucG9wKCkpO2Vsc2UgdGhpcy50''@;'; put 'put ''b2tlbnMucHVzaChBZSl9LHB1c2g6ZnVuY3Rpb24oQWUpe2lmKEFycmF5LmlzQXJyYXkoQWUpKWZvcih2YXIgX3Q9QWU7X3QubGVuZ3RoOyl0aGlzLnRva2Vucy51bnNoaWZ0KF90LnNoaWZ0KCkpO2Vsc2UgdGhpcy50b2tlbnMudW5zaGlmdChBZSl9fTt2YXIgSz0tMTtmdW5jdGlvbiBVKEFl''@;'; put 'put ''LF90KXtpZihBZSl0aHJvdyBUeXBlRXJyb3IoIkRlY29kZXIgZXJyb3IiKTtyZXR1cm4gX3R8fDY1NTMzfWZ1bmN0aW9uIFcoQWUpe3Rocm93IFR5cGVFcnJvcigiVGhlIGNvZGUgcG9pbnQgIitBZSsiIGNvdWxkIG5vdCBiZSBlbmNvZGVkLiIpfWZ1bmN0aW9uIGVlKEFlKXtyZXR1cm4gQWU9''@;'; put 'put ''U3RyaW5nKEFlKS50cmltKCkudG9Mb3dlckNhc2UoKSxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobmUsQWUpP25lW0FlXTpudWxsfXZhciBKPVt7ZW5jb2RpbmdzOlt7bGFiZWxzOlsidW5pY29kZS0xLTEtdXRmLTgiLCJ1dGYtOCIsInV0ZjgiXSxuYW1lOiJVVEYtOCJ9''@;'; put 'put ''XSxoZWFkaW5nOiJUaGUgRW5jb2RpbmcifSx7ZW5jb2RpbmdzOlt7bGFiZWxzOlsiODY2IiwiY3A4NjYiLCJjc2libTg2NiIsImlibTg2NiJdLG5hbWU6IklCTTg2NiJ9LHtsYWJlbHM6WyJjc2lzb2xhdGluMiIsImlzby04ODU5LTIiLCJpc28taXItMTAxIiwiaXNvODg1OS0yIiwiaXNvODg1''@;'; put 'put ''OTIiLCJpc29fODg1OS0yIiwiaXNvXzg4NTktMjoxOTg3IiwibDIiLCJsYXRpbjIiXSxuYW1lOiJJU08tODg1OS0yIn0se2xhYmVsczpbImNzaXNvbGF0aW4zIiwiaXNvLTg4NTktMyIsImlzby1pci0xMDkiLCJpc284ODU5LTMiLCJpc284ODU5MyIsImlzb184ODU5LTMiLCJpc29fODg1OS0z''@;'; put 'put ''OjE5ODgiLCJsMyIsImxhdGluMyJdLG5hbWU6IklTTy04ODU5LTMifSx7bGFiZWxzOlsiY3Npc29sYXRpbjQiLCJpc28tODg1OS00IiwiaXNvLWlyLTExMCIsImlzbzg4NTktNCIsImlzbzg4NTk0IiwiaXNvXzg4NTktNCIsImlzb184ODU5LTQ6MTk4OCIsImw0IiwibGF0aW40Il0sbmFtZToi''@;'; put 'put ''SVNPLTg4NTktNCJ9LHtsYWJlbHM6WyJjc2lzb2xhdGluY3lyaWxsaWMiLCJjeXJpbGxpYyIsImlzby04ODU5LTUiLCJpc28taXItMTQ0IiwiaXNvODg1OS01IiwiaXNvODg1OTUiLCJpc29fODg1OS01IiwiaXNvXzg4NTktNToxOTg4Il0sbmFtZToiSVNPLTg4NTktNSJ9LHtsYWJlbHM6WyJh''@;'; put 'put ''cmFiaWMiLCJhc21vLTcwOCIsImNzaXNvODg1OTZlIiwiY3Npc284ODU5NmkiLCJjc2lzb2xhdGluYXJhYmljIiwiZWNtYS0xMTQiLCJpc28tODg1OS02IiwiaXNvLTg4NTktNi1lIiwiaXNvLTg4NTktNi1pIiwiaXNvLWlyLTEyNyIsImlzbzg4NTktNiIsImlzbzg4NTk2IiwiaXNvXzg4NTkt''@;'; put 'put ''NiIsImlzb184ODU5LTY6MTk4NyJdLG5hbWU6IklTTy04ODU5LTYifSx7bGFiZWxzOlsiY3Npc29sYXRpbmdyZWVrIiwiZWNtYS0xMTgiLCJlbG90XzkyOCIsImdyZWVrIiwiZ3JlZWs4IiwiaXNvLTg4NTktNyIsImlzby1pci0xMjYiLCJpc284ODU5LTciLCJpc284ODU5NyIsImlzb184ODU5''@;'; put 'put ''LTciLCJpc29fODg1OS03OjE5ODciLCJzdW5fZXVfZ3JlZWsiXSxuYW1lOiJJU08tODg1OS03In0se2xhYmVsczpbImNzaXNvODg1OThlIiwiY3Npc29sYXRpbmhlYnJldyIsImhlYnJldyIsImlzby04ODU5LTgiLCJpc28tODg1OS04LWUiLCJpc28taXItMTM4IiwiaXNvODg1OS04IiwiaXNv''@;'; put 'put ''ODg1OTgiLCJpc29fODg1OS04IiwiaXNvXzg4NTktODoxOTg4IiwidmlzdWFsIl0sbmFtZToiSVNPLTg4NTktOCJ9LHtsYWJlbHM6WyJjc2lzbzg4NTk4aSIsImlzby04ODU5LTgtaSIsImxvZ2ljYWwiXSxuYW1lOiJJU08tODg1OS04LUkifSx7bGFiZWxzOlsiY3Npc29sYXRpbjYiLCJpc28t''@;'; put 'put ''ODg1OS0xMCIsImlzby1pci0xNTciLCJpc284ODU5LTEwIiwiaXNvODg1OTEwIiwibDYiLCJsYXRpbjYiXSxuYW1lOiJJU08tODg1OS0xMCJ9LHtsYWJlbHM6WyJpc28tODg1OS0xMyIsImlzbzg4NTktMTMiLCJpc284ODU5MTMiXSxuYW1lOiJJU08tODg1OS0xMyJ9LHtsYWJlbHM6WyJpc28t''@;'; put 'put ''ODg1OS0xNCIsImlzbzg4NTktMTQiLCJpc284ODU5MTQiXSxuYW1lOiJJU08tODg1OS0xNCJ9LHtsYWJlbHM6WyJjc2lzb2xhdGluOSIsImlzby04ODU5LTE1IiwiaXNvODg1OS0xNSIsImlzbzg4NTkxNSIsImlzb184ODU5LTE1IiwibDkiXSxuYW1lOiJJU08tODg1OS0xNSJ9LHtsYWJlbHM6''@;'; put 'put ''WyJpc28tODg1OS0xNiJdLG5hbWU6IklTTy04ODU5LTE2In0se2xhYmVsczpbImNza29pOHIiLCJrb2kiLCJrb2k4Iiwia29pOC1yIiwia29pOF9yIl0sbmFtZToiS09JOC1SIn0se2xhYmVsczpbImtvaTgtcnUiLCJrb2k4LXUiXSxuYW1lOiJLT0k4LVUifSx7bGFiZWxzOlsiY3NtYWNpbnRv''@;'; put 'put ''c2giLCJtYWMiLCJtYWNpbnRvc2giLCJ4LW1hYy1yb21hbiJdLG5hbWU6Im1hY2ludG9zaCJ9LHtsYWJlbHM6WyJkb3MtODc0IiwiaXNvLTg4NTktMTEiLCJpc284ODU5LTExIiwiaXNvODg1OTExIiwidGlzLTYyMCIsIndpbmRvd3MtODc0Il0sbmFtZToid2luZG93cy04NzQifSx7bGFiZWxz''@;'; put 'put ''OlsiY3AxMjUwIiwid2luZG93cy0xMjUwIiwieC1jcDEyNTAiXSxuYW1lOiJ3aW5kb3dzLTEyNTAifSx7bGFiZWxzOlsiY3AxMjUxIiwid2luZG93cy0xMjUxIiwieC1jcDEyNTEiXSxuYW1lOiJ3aW5kb3dzLTEyNTEifSx7bGFiZWxzOlsiYW5zaV94My40LTE5NjgiLCJhc2NpaSIsImNwMTI1''@;'; put 'put ''MiIsImNwODE5IiwiY3Npc29sYXRpbjEiLCJpYm04MTkiLCJpc28tODg1OS0xIiwiaXNvLWlyLTEwMCIsImlzbzg4NTktMSIsImlzbzg4NTkxIiwiaXNvXzg4NTktMSIsImlzb184ODU5LTE6MTk4NyIsImwxIiwibGF0aW4xIiwidXMtYXNjaWkiLCJ3aW5kb3dzLTEyNTIiLCJ4LWNwMTI1MiJd''@;'; put 'put ''LG5hbWU6IndpbmRvd3MtMTI1MiJ9LHtsYWJlbHM6WyJjcDEyNTMiLCJ3aW5kb3dzLTEyNTMiLCJ4LWNwMTI1MyJdLG5hbWU6IndpbmRvd3MtMTI1MyJ9LHtsYWJlbHM6WyJjcDEyNTQiLCJjc2lzb2xhdGluNSIsImlzby04ODU5LTkiLCJpc28taXItMTQ4IiwiaXNvODg1OS05IiwiaXNvODg1''@;'; put 'put ''OTkiLCJpc29fODg1OS05IiwiaXNvXzg4NTktOToxOTg5IiwibDUiLCJsYXRpbjUiLCJ3aW5kb3dzLTEyNTQiLCJ4LWNwMTI1NCJdLG5hbWU6IndpbmRvd3MtMTI1NCJ9LHtsYWJlbHM6WyJjcDEyNTUiLCJ3aW5kb3dzLTEyNTUiLCJ4LWNwMTI1NSJdLG5hbWU6IndpbmRvd3MtMTI1NSJ9LHts''@;'; put 'put ''YWJlbHM6WyJjcDEyNTYiLCJ3aW5kb3dzLTEyNTYiLCJ4LWNwMTI1NiJdLG5hbWU6IndpbmRvd3MtMTI1NiJ9LHtsYWJlbHM6WyJjcDEyNTciLCJ3aW5kb3dzLTEyNTciLCJ4LWNwMTI1NyJdLG5hbWU6IndpbmRvd3MtMTI1NyJ9LHtsYWJlbHM6WyJjcDEyNTgiLCJ3aW5kb3dzLTEyNTgiLCJ4''@;'; put 'put ''LWNwMTI1OCJdLG5hbWU6IndpbmRvd3MtMTI1OCJ9LHtsYWJlbHM6WyJ4LW1hYy1jeXJpbGxpYyIsIngtbWFjLXVrcmFpbmlhbiJdLG5hbWU6IngtbWFjLWN5cmlsbGljIn1dLGhlYWRpbmc6IkxlZ2FjeSBzaW5nbGUtYnl0ZSBlbmNvZGluZ3MifSx7ZW5jb2RpbmdzOlt7bGFiZWxzOlsiY2hp''@;'; put 'put ''bmVzZSIsImNzZ2IyMzEyIiwiY3Npc281OGdiMjMxMjgwIiwiZ2IyMzEyIiwiZ2JfMjMxMiIsImdiXzIzMTItODAiLCJnYmsiLCJpc28taXItNTgiLCJ4LWdiayJdLG5hbWU6IkdCSyJ9LHtsYWJlbHM6WyJnYjE4MDMwIl0sbmFtZToiZ2IxODAzMCJ9XSxoZWFkaW5nOiJMZWdhY3kgbXVsdGkt''@;'; put 'put ''Ynl0ZSBDaGluZXNlIChzaW1wbGlmaWVkKSBlbmNvZGluZ3MifSx7ZW5jb2RpbmdzOlt7bGFiZWxzOlsiYmlnNSIsImJpZzUtaGtzY3MiLCJjbi1iaWc1IiwiY3NiaWc1IiwieC14LWJpZzUiXSxuYW1lOiJCaWc1In1dLGhlYWRpbmc6IkxlZ2FjeSBtdWx0aS1ieXRlIENoaW5lc2UgKHRyYWRp''@;'; put 'put ''dGlvbmFsKSBlbmNvZGluZ3MifSx7ZW5jb2RpbmdzOlt7bGFiZWxzOlsiY3NldWNwa2RmbXRqYXBhbmVzZSIsImV1Yy1qcCIsIngtZXVjLWpwIl0sbmFtZToiRVVDLUpQIn0se2xhYmVsczpbImNzaXNvMjAyMmpwIiwiaXNvLTIwMjItanAiXSxuYW1lOiJJU08tMjAyMi1KUCJ9LHtsYWJlbHM6''@;'; put 'put ''WyJjc3NoaWZ0amlzIiwibXM5MzIiLCJtc19rYW5qaSIsInNoaWZ0LWppcyIsInNoaWZ0X2ppcyIsInNqaXMiLCJ3aW5kb3dzLTMxaiIsIngtc2ppcyJdLG5hbWU6IlNoaWZ0X0pJUyJ9XSxoZWFkaW5nOiJMZWdhY3kgbXVsdGktYnl0ZSBKYXBhbmVzZSBlbmNvZGluZ3MifSx7ZW5jb2Rpbmdz''@;'; put 'put ''Olt7bGFiZWxzOlsiY3NldWNrciIsImNza3NjNTYwMTE5ODciLCJldWMta3IiLCJpc28taXItMTQ5Iiwia29yZWFuIiwia3NfY181NjAxLTE5ODciLCJrc19jXzU2MDEtMTk4OSIsImtzYzU2MDEiLCJrc2NfNTYwMSIsIndpbmRvd3MtOTQ5Il0sbmFtZToiRVVDLUtSIn1dLGhlYWRpbmc6Ikxl''@;'; put 'put ''Z2FjeSBtdWx0aS1ieXRlIEtvcmVhbiBlbmNvZGluZ3MifSx7ZW5jb2RpbmdzOlt7bGFiZWxzOlsiY3Npc28yMDIya3IiLCJoei1nYi0yMzEyIiwiaXNvLTIwMjItY24iLCJpc28tMjAyMi1jbi1leHQiLCJpc28tMjAyMi1rciJdLG5hbWU6InJlcGxhY2VtZW50In0se2xhYmVsczpbInV0Zi0x''@;'; put 'put ''NmJlIl0sbmFtZToiVVRGLTE2QkUifSx7bGFiZWxzOlsidXRmLTE2IiwidXRmLTE2bGUiXSxuYW1lOiJVVEYtMTZMRSJ9LHtsYWJlbHM6WyJ4LXVzZXItZGVmaW5lZCJdLG5hbWU6IngtdXNlci1kZWZpbmVkIn1dLGhlYWRpbmc6IkxlZ2FjeSBtaXNjZWxsYW5lb3VzIGVuY29kaW5ncyJ9XSxu''@;'; put 'put ''ZT17fTtKLmZvckVhY2goZnVuY3Rpb24oQWUpe0FlLmVuY29kaW5ncy5mb3JFYWNoKGZ1bmN0aW9uKF90KXtfdC5sYWJlbHMuZm9yRWFjaChmdW5jdGlvbihudCl7bmVbbnRdPV90fSl9KX0pO3ZhciBwLGllPXt9LGxlPXt9O2Z1bmN0aW9uIG1lKEFlLF90KXtyZXR1cm4gX3QmJl90W0FlXXx8''@;'; put 'put ''bnVsbH1mdW5jdGlvbiBfZShBZSxfdCl7dmFyIG50PV90LmluZGV4T2YoQWUpO3JldHVybi0xPT09bnQ/bnVsbDpudH1mdW5jdGlvbiBUZShBZSl7aWYoISgiZW5jb2RpbmctaW5kZXhlcyJpbiBJKSl0aHJvdyBFcnJvcigiSW5kZXhlcyBtaXNzaW5nLiBEaWQgeW91IGZvcmdldCB0byBpbmNs''@;'; put 'put ''dWRlIGVuY29kaW5nLWluZGV4ZXMuanMgZmlyc3Q/Iik7cmV0dXJuIElbImVuY29kaW5nLWluZGV4ZXMiXVtBZV19dmFyIHgsQz0idXRmLTgiO2Z1bmN0aW9uIFQoQWUsX3Qpe2lmKCEodGhpcyBpbnN0YW5jZW9mIFQpKXRocm93IFR5cGVFcnJvcigiQ2FsbGVkIGFzIGEgZnVuY3Rpb24uIERp''@;'; put 'put ''ZCB5b3UgZm9yZ2V0ICduZXcnPyIpO0FlPXZvaWQgMCE9PUFlP1N0cmluZyhBZSk6QyxfdD13KF90KSx0aGlzLl9lbmNvZGluZz1udWxsLHRoaXMuX2RlY29kZXI9bnVsbCx0aGlzLl9pZ25vcmVCT009ITEsdGhpcy5fQk9Nc2Vlbj0hMSx0aGlzLl9lcnJvcl9tb2RlPSJyZXBsYWNlbWVudCIs''@;'; put 'put ''dGhpcy5fZG9fbm90X2ZsdXNoPSExO3ZhciBudD1lZShBZSk7aWYobnVsbD09PW50fHwicmVwbGFjZW1lbnQiPT09bnQubmFtZSl0aHJvdyBSYW5nZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK0FlKTtpZighbGVbbnQubmFtZV0pdGhyb3cgRXJyb3IoIkRlY29kZXIgbm90IHByZXNlbnQu''@;'; put 'put ''IERpZCB5b3UgZm9yZ2V0IHRvIGluY2x1ZGUgZW5jb2RpbmctaW5kZXhlcy5qcyBmaXJzdD8iKTt2YXIgUWU9dGhpcztyZXR1cm4gUWUuX2VuY29kaW5nPW50LF90LmZhdGFsJiYoUWUuX2Vycm9yX21vZGU9ImZhdGFsIiksX3QuaWdub3JlQk9NJiYoUWUuX2lnbm9yZUJPTT0hMCksT2JqZWN0''@;'; put 'put ''LmRlZmluZVByb3BlcnR5fHwodGhpcy5lbmNvZGluZz1RZS5fZW5jb2RpbmcubmFtZS50b0xvd2VyQ2FzZSgpLHRoaXMuZmF0YWw9ImZhdGFsIj09PVFlLl9lcnJvcl9tb2RlLHRoaXMuaWdub3JlQk9NPVFlLl9pZ25vcmVCT00pLFFlfWZ1bmN0aW9uIEgoQWUsX3Qpe2lmKCEodGhpcyBpbnN0''@;'; put 'put ''YW5jZW9mIEgpKXRocm93IFR5cGVFcnJvcigiQ2FsbGVkIGFzIGEgZnVuY3Rpb24uIERpZCB5b3UgZm9yZ2V0ICduZXcnPyIpO2lmKF90PXcoX3QpLHRoaXMuX2VuY29kaW5nPW51bGwsdGhpcy5fZW5jb2Rlcj1udWxsLHRoaXMuX2RvX25vdF9mbHVzaD0hMSx0aGlzLl9mYXRhbD1fdC5mYXRh''@;'; put 'put ''bD8iZmF0YWwiOiJyZXBsYWNlbWVudCIsX3QuTk9OU1RBTkRBUkRfYWxsb3dMZWdhY3lFbmNvZGluZyl7dmFyIFFlPWVlKEFlPXZvaWQgMCE9PUFlP1N0cmluZyhBZSk6Qyk7aWYobnVsbD09PVFlfHwicmVwbGFjZW1lbnQiPT09UWUubmFtZSl0aHJvdyBSYW5nZUVycm9yKCJVbmtub3duIGVu''@;'; put 'put ''Y29kaW5nOiAiK0FlKTtpZighaWVbUWUubmFtZV0pdGhyb3cgRXJyb3IoIkVuY29kZXIgbm90IHByZXNlbnQuIERpZCB5b3UgZm9yZ2V0IHRvIGluY2x1ZGUgZW5jb2RpbmctaW5kZXhlcy5qcyBmaXJzdD8iKTt0aGlzLl9lbmNvZGluZz1RZX1lbHNlIHRoaXMuX2VuY29kaW5nPWVlKCJ1dGYt''@;'; put 'put ''OCIpLHZvaWQgMCE9PUFlJiYiY29uc29sZSJpbiBJJiZjb25zb2xlLndhcm4oIlRleHRFbmNvZGVyIGNvbnN0cnVjdG9yIGNhbGxlZCB3aXRoIGVuY29kaW5nIGxhYmVsLCB3aGljaCBpcyBpZ25vcmVkLiIpO3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHl8fCh0aGlzLmVuY29kaW5nPXRo''@;'; put 'put ''aXMuX2VuY29kaW5nLm5hbWUudG9Mb3dlckNhc2UoKSksdGhpc31mdW5jdGlvbiBqKEFlKXt2YXIgX3Q9QWUuZmF0YWwsbnQ9MCxRZT0wLHVuPTAseXQ9MTI4LE10PTE5MTt0aGlzLmhhbmRsZXI9ZnVuY3Rpb24oRHQsaXQpe2lmKGl0PT09TiYmMCE9PXVuKXJldHVybiB1bj0wLFUoX3QpO2lm''@;'; put 'put ''KGl0PT09TilyZXR1cm4gSztpZigwPT09dW4pe2lmKF8oaXQsMCwxMjcpKXJldHVybiBpdDtpZihfKGl0LDE5NCwyMjMpKXVuPTEsbnQ9MzEmaXQ7ZWxzZSBpZihfKGl0LDIyNCwyMzkpKTIyND09PWl0JiYoeXQ9MTYwKSwyMzc9PT1pdCYmKE10PTE1OSksdW49MixudD0xNSZpdDtlbHNle2lm''@;'; put 'put ''KCFfKGl0LDI0MCwyNDQpKXJldHVybiBVKF90KTsyNDA9PT1pdCYmKHl0PTE0NCksMjQ0PT09aXQmJihNdD0xNDMpLHVuPTMsbnQ9NyZpdH1yZXR1cm4gbnVsbH1pZighXyhpdCx5dCxNdCkpcmV0dXJuIG50PXVuPVFlPTAseXQ9MTI4LE10PTE5MSxEdC5wcmVwZW5kKGl0KSxVKF90KTtpZih5''@;'; put 'put ''dD0xMjgsTXQ9MTkxLG50PW50PDw2fDYzJml0LChRZSs9MSkhPT11bilyZXR1cm4gbnVsbDt2YXIgJGU9bnQ7cmV0dXJuIG50PXVuPVFlPTAsJGV9fWZ1bmN0aW9uIEUoQWUpe3RoaXMuaGFuZGxlcj1mdW5jdGlvbihudCxRZSl7aWYoUWU9PT1OKXJldHVybiBLO2lmKHooUWUpKXJldHVybiBR''@;'; put 'put ''ZTt2YXIgdW4seXQ7XyhRZSwxMjgsMjA0Nyk/KHVuPTEseXQ9MTkyKTpfKFFlLDIwNDgsNjU1MzUpPyh1bj0yLHl0PTIyNCk6XyhRZSw2NTUzNiwxMTE0MTExKSYmKHVuPTMseXQ9MjQwKTtmb3IodmFyIE10PVsoUWU+PjYqdW4pK3l0XTt1bj4wOylNdC5wdXNoKDEyOHw2MyZRZT4+NioodW4t''@;'; put 'put ''MSkpLHVuLT0xO3JldHVybiBNdH19ZnVuY3Rpb24gbShBZSxfdCl7dmFyIG50PV90LmZhdGFsO3RoaXMuaGFuZGxlcj1mdW5jdGlvbihRZSx1bil7aWYodW49PT1OKXJldHVybiBLO2lmKE8odW4pKXJldHVybiB1bjt2YXIgeXQ9QWVbdW4tMTI4XTtyZXR1cm4gbnVsbD09PXl0P1UobnQpOnl0''@;'; put 'put ''fX1mdW5jdGlvbiBBKEFlLF90KXt0aGlzLmhhbmRsZXI9ZnVuY3Rpb24oUWUsdW4pe2lmKHVuPT09TilyZXR1cm4gSztpZih6KHVuKSlyZXR1cm4gdW47dmFyIHl0PV9lKHVuLEFlKTtyZXR1cm4gbnVsbD09PXl0JiZXKHVuKSx5dCsxMjh9fWZ1bmN0aW9uIGFlKEFlKXt2YXIgX3Q9QWUuZmF0''@;'; put 'put ''YWwsbnQ9MCxRZT0wLHVuPTA7dGhpcy5oYW5kbGVyPWZ1bmN0aW9uKHl0LE10KXtpZihNdD09PU4mJjA9PT1udCYmMD09PVFlJiYwPT09dW4pcmV0dXJuIEs7dmFyIER0O2lmKE10PT09TiYmKDAhPT1udHx8MCE9PVFlfHwwIT09dW4pJiYobnQ9MCxRZT0wLHVuPTAsVShfdCkpLDAhPT11bil7''@;'; put 'put ''RHQ9bnVsbCxfKE10LDQ4LDU3KSYmKER0PWZ1bmN0aW9uIFNlKEFlKXtpZihBZT4zOTQxOSYmQWU8MTg5ZTN8fEFlPjEyMzc1NzUpcmV0dXJuIG51bGw7aWYoNzQ1Nz09PUFlKXJldHVybiA1OTMzNTt2YXIgdW4sX3Q9MCxudD0wLFFlPVRlKCJnYjE4MDMwLXJhbmdlcyIpO2Zvcih1bj0wO3Vu''@;'; put 'put ''PFFlLmxlbmd0aDsrK3VuKXt2YXIgeXQ9UWVbdW5dO2lmKCEoeXRbMF08PUFlKSlicmVhaztfdD15dFswXSxudD15dFsxXX1yZXR1cm4gbnQrQWUtX3R9KDEwKigxMjYqKDEwKihudC0xMjkpK1FlLTQ4KSt1bi0xMjkpK010LTQ4KSk7dmFyIGl0PVtRZSx1bixNdF07cmV0dXJuIG50PTAsUWU9''@;'; put 'put ''MCx1bj0wLG51bGw9PT1EdD8oeXQucHJlcGVuZChpdCksVShfdCkpOkR0fWlmKDAhPT1RZSlyZXR1cm4gXyhNdCwxMjksMjU0KT8odW49TXQsbnVsbCk6KHl0LnByZXBlbmQoW1FlLE10XSksbnQ9MCxRZT0wLFUoX3QpKTtpZigwIT09bnQpe2lmKF8oTXQsNDgsNTcpKXJldHVybiBRZT1NdCxu''@;'; put 'put ''dWxsO3ZhciAkZT1udCx0dD1udWxsO250PTA7dmFyIEhlPU10PDEyNz82NDo2NTtyZXR1cm4oXyhNdCw2NCwxMjYpfHxfKE10LDEyOCwyNTQpKSYmKHR0PTE5MCooJGUtMTI5KSsoTXQtSGUpKSxudWxsPT09KER0PW51bGw9PT10dD9udWxsOm1lKHR0LFRlKCJnYjE4MDMwIikpKSYmTyhNdCkm''@;'; put 'put ''Jnl0LnByZXBlbmQoTXQpLG51bGw9PT1EdD9VKF90KTpEdH1yZXR1cm4gTyhNdCk/TXQ6MTI4PT09TXQ/ODM2NDpfKE10LDEyOSwyNTQpPyhudD1NdCxudWxsKTpVKF90KX19ZnVuY3Rpb24gdGUoQWUsX3Qpe3RoaXMuaGFuZGxlcj1mdW5jdGlvbihRZSx1bil7aWYodW49PT1OKXJldHVybiBL''@;'; put 'put ''O2lmKHoodW4pKXJldHVybiB1bjtpZig1ODg1Mz09PXVuKXJldHVybiBXKHVuKTtpZihfdCYmODM2ND09PXVuKXJldHVybiAxMjg7dmFyIHl0PV9lKHVuLFRlKCJnYjE4MDMwIikpO2lmKG51bGwhPT15dCl7dmFyIER0PXl0JTE5MDtyZXR1cm5bQih5dC8xOTApKzEyOSxEdCsoRHQ8NjM/NjQ6''@;'; put 'put ''NjUpXX1pZihfdClyZXR1cm4gVyh1bik7eXQ9ZnVuY3Rpb24gamUoQWUpe2lmKDU5MzM1PT09QWUpcmV0dXJuIDc0NTc7dmFyIHVuLF90PTAsbnQ9MCxRZT1UZSgiZ2IxODAzMC1yYW5nZXMiKTtmb3IodW49MDt1bjxRZS5sZW5ndGg7Kyt1bil7dmFyIHl0PVFlW3VuXTtpZighKHl0WzFdPD1B''@;'; put 'put ''ZSkpYnJlYWs7X3Q9eXRbMV0sbnQ9eXRbMF19cmV0dXJuIG50K0FlLV90fSh1bik7dmFyICRlPUIoeXQvMTAvMTI2LzEwKSx0dD1CKCh5dC09MTAqJGUqMTI2KjEwKS8xMC8xMjYpLEhlPUIoKHl0LT0xMCp0dCoxMjYpLzEwKTtyZXR1cm5bJGUrMTI5LHR0KzQ4LEhlKzEyOSx5dC0xMCpIZSs0''@;'; put 'put ''OF19fWZ1bmN0aW9uIHNlKEFlKXt2YXIgX3Q9QWUuZmF0YWwsbnQ9MDt0aGlzLmhhbmRsZXI9ZnVuY3Rpb24oUWUsdW4pe2lmKHVuPT09TiYmMCE9PW50KXJldHVybiBudD0wLFUoX3QpO2lmKHVuPT09TiYmMD09PW50KXJldHVybiBLO2lmKDAhPT1udCl7dmFyIHl0PW50LE10PW51bGw7bnQ9''@;'; put 'put ''MDt2YXIgRHQ9dW48MTI3PzY0Ojk4O3N3aXRjaCgoXyh1biw2NCwxMjYpfHxfKHVuLDE2MSwyNTQpKSYmKE10PTE1NyooeXQtMTI5KSsodW4tRHQpKSxNdCl7Y2FzZSAxMTMzOnJldHVyblsyMDIsNzcyXTtjYXNlIDExMzU6cmV0dXJuWzIwMiw3ODBdO2Nhc2UgMTE2NDpyZXR1cm5bMjM0LDc3''@;'; put 'put ''Ml07Y2FzZSAxMTY2OnJldHVyblsyMzQsNzgwXX12YXIgaXQ9bnVsbD09PU10P251bGw6bWUoTXQsVGUoImJpZzUiKSk7cmV0dXJuIG51bGw9PT1pdCYmTyh1bikmJlFlLnByZXBlbmQodW4pLG51bGw9PT1pdD9VKF90KTppdH1yZXR1cm4gTyh1bik/dW46Xyh1biwxMjksMjU0KT8obnQ9dW4s''@;'; put 'put ''bnVsbCk6VShfdCl9fWZ1bmN0aW9uIHdlKEFlKXt0aGlzLmhhbmRsZXI9ZnVuY3Rpb24obnQsUWUpe2lmKFFlPT09TilyZXR1cm4gSztpZih6KFFlKSlyZXR1cm4gUWU7dmFyIHVuPWZ1bmN0aW9uIGIoQWUpe3ZhciBfdD14PXh8fFRlKCJiaWc1IikubWFwKGZ1bmN0aW9uKG50LFFlKXtyZXR1''@;'; put 'put ''cm4gUWU8NTAyND9udWxsOm50fSk7cmV0dXJuIDk1NTI9PT1BZXx8OTU2Nj09PUFlfHw5NTY5PT09QWV8fDk1Nzg9PT1BZXx8MjEzMTM9PT1BZXx8MjEzMTc9PT1BZT9fdC5sYXN0SW5kZXhPZihBZSk6X2UoQWUsX3QpfShRZSk7aWYobnVsbD09PXVuKXJldHVybiBXKFFlKTt2YXIgeXQ9Qih1''@;'; put 'put ''bi8xNTcpKzEyOTtpZih5dDwxNjEpcmV0dXJuIFcoUWUpO3ZhciBNdD11biUxNTc7cmV0dXJuW3l0LE10KyhNdDw2Mz82NDo5OCldfX1mdW5jdGlvbiBVZShBZSl7dmFyIF90PUFlLmZhdGFsLG50PSExLFFlPTA7dGhpcy5oYW5kbGVyPWZ1bmN0aW9uKHVuLHl0KXtpZih5dD09PU4mJjAhPT1R''@;'; put 'put ''ZSlyZXR1cm4gUWU9MCxVKF90KTtpZih5dD09PU4mJjA9PT1RZSlyZXR1cm4gSztpZigxNDI9PT1RZSYmXyh5dCwxNjEsMjIzKSlyZXR1cm4gUWU9MCw2NTIxNit5dDtpZigxNDM9PT1RZSYmXyh5dCwxNjEsMjU0KSlyZXR1cm4gbnQ9ITAsUWU9eXQsbnVsbDtpZigwIT09UWUpe3ZhciBNdD1R''@;'; put 'put ''ZTtRZT0wO3ZhciBEdD1udWxsO3JldHVybiBfKE10LDE2MSwyNTQpJiZfKHl0LDE2MSwyNTQpJiYoRHQ9bWUoOTQqKE10LTE2MSkrKHl0LTE2MSksVGUobnQ/ImppczAyMTIiOiJqaXMwMjA4IikpKSxudD0hMSxfKHl0LDE2MSwyNTQpfHx1bi5wcmVwZW5kKHl0KSxudWxsPT09RHQ/VShfdCk6''@;'; put 'put ''RHR9cmV0dXJuIE8oeXQpP3l0OjE0Mj09PXl0fHwxNDM9PT15dHx8Xyh5dCwxNjEsMjU0KT8oUWU9eXQsbnVsbCk6VShfdCl9fWZ1bmN0aW9uIEplKEFlKXt0aGlzLmhhbmRsZXI9ZnVuY3Rpb24obnQsUWUpe2lmKFFlPT09TilyZXR1cm4gSztpZih6KFFlKSlyZXR1cm4gUWU7aWYoMTY1PT09''@;'; put 'put ''UWUpcmV0dXJuIDkyO2lmKDgyNTQ9PT1RZSlyZXR1cm4gMTI2O2lmKF8oUWUsNjUzNzcsNjU0MzkpKXJldHVyblsxNDIsUWUtNjUzNzcrMTYxXTs4NzIyPT09UWUmJihRZT02NTI5Myk7dmFyIHVuPV9lKFFlLFRlKCJqaXMwMjA4IikpO3JldHVybiBudWxsPT09dW4/VyhRZSk6W0IodW4vOTQp''@;'; put 'put ''KzE2MSx1biU5NCsxNjFdfX1mdW5jdGlvbiBvdChBZSl7dmFyIF90PUFlLmZhdGFsLFFlPTAseXQ9MCxNdD0hMTt0aGlzLmhhbmRsZXI9ZnVuY3Rpb24oRHQsaXQpe3N3aXRjaChRZSl7ZGVmYXVsdDpjYXNlIDA6cmV0dXJuIDI3PT09aXQ/KFFlPTUsbnVsbCk6XyhpdCwwLDEyNykmJjE0IT09''@;'; put 'put ''aXQmJjE1IT09aXQmJjI3IT09aXQ/KE10PSExLGl0KTppdD09PU4/SzooTXQ9ITEsVShfdCkpO2Nhc2UgMTpyZXR1cm4gMjc9PT1pdD8oUWU9NSxudWxsKTo5Mj09PWl0PyhNdD0hMSwxNjUpOjEyNj09PWl0PyhNdD0hMSw4MjU0KTpfKGl0LDAsMTI3KSYmMTQhPT1pdCYmMTUhPT1pdCYmMjch''@;'; put 'put ''PT1pdCYmOTIhPT1pdCYmMTI2IT09aXQ/KE10PSExLGl0KTppdD09PU4/SzooTXQ9ITEsVShfdCkpO2Nhc2UgMjpyZXR1cm4gMjc9PT1pdD8oUWU9NSxudWxsKTpfKGl0LDMzLDk1KT8oTXQ9ITEsNjUzNDQraXQpOml0PT09Tj9LOihNdD0hMSxVKF90KSk7Y2FzZSAzOnJldHVybiAyNz09PWl0''@;'; put 'put ''PyhRZT01LG51bGwpOl8oaXQsMzMsMTI2KT8oTXQ9ITEseXQ9aXQsUWU9NCxudWxsKTppdD09PU4/SzooTXQ9ITEsVShfdCkpO2Nhc2UgNDppZigyNz09PWl0KXJldHVybiBRZT01LFUoX3QpO2lmKF8oaXQsMzMsMTI2KSl7UWU9Mzt2YXIgdHQ9bWUoOTQqKHl0LTMzKStpdC0zMyxUZSgiamlz''@;'; put 'put ''MDIwOCIpKTtyZXR1cm4gbnVsbD09PXR0P1UoX3QpOnR0fXJldHVybiBpdD09PU4/KFFlPTMsRHQucHJlcGVuZChpdCksVShfdCkpOihRZT0zLFUoX3QpKTtjYXNlIDU6cmV0dXJuIDM2PT09aXR8fDQwPT09aXQ/KHl0PWl0LFFlPTYsbnVsbCk6KER0LnByZXBlbmQoaXQpLE10PSExLFFlPTAs''@;'; put 'put ''VShfdCkpO2Nhc2UgNjp2YXIgSGU9eXQ7eXQ9MDt2YXIgdXQ9bnVsbDtpZig0MD09PUhlJiY2Nj09PWl0JiYodXQ9MCksNDA9PT1IZSYmNzQ9PT1pdCYmKHV0PTEpLDQwPT09SGUmJjczPT09aXQmJih1dD0yKSwzNj09PUhlJiYoNjQ9PT1pdHx8NjY9PT1pdCkmJih1dD0zKSxudWxsIT09dXQp''@;'; put 'put ''e1FlPVFlPXV0O3ZhciBxdD1NdDtyZXR1cm4gTXQ9ITAscXQ/VShfdCk6bnVsbH1yZXR1cm4gRHQucHJlcGVuZChbSGUsaXRdKSxNdD0hMSxRZT0wLFUoX3QpfX19ZnVuY3Rpb24geGUoQWUpe3ZhciBRZT0wO3RoaXMuaGFuZGxlcj1mdW5jdGlvbih1bix5dCl7aWYoeXQ9PT1OJiYwIT09UWUp''@;'; put 'put ''cmV0dXJuIHVuLnByZXBlbmQoeXQpLFFlPTAsWzI3LDQwLDY2XTtpZih5dD09PU4mJjA9PT1RZSlyZXR1cm4gSztpZighKDAhPT1RZSYmMSE9PVFlfHwxNCE9PXl0JiYxNSE9PXl0JiYyNyE9PXl0KSlyZXR1cm4gVyg2NTUzMyk7aWYoMD09PVFlJiZ6KHl0KSlyZXR1cm4geXQ7aWYoMT09PVFl''@;'; put 'put ''JiYoeih5dCkmJjkyIT09eXQmJjEyNiE9PXl0fHwxNjU9PXl0fHw4MjU0PT15dCkpe2lmKHooeXQpKXJldHVybiB5dDtpZigxNjU9PT15dClyZXR1cm4gOTI7aWYoODI1ND09PXl0KXJldHVybiAxMjZ9aWYoeih5dCkmJjAhPT1RZSlyZXR1cm4gdW4ucHJlcGVuZCh5dCksUWU9MCxbMjcsNDAs''@;'; put 'put ''NjZdO2lmKCgxNjU9PT15dHx8ODI1ND09PXl0KSYmMSE9PVFlKXJldHVybiB1bi5wcmVwZW5kKHl0KSxRZT0xLFsyNyw0MCw3NF07ODcyMj09PXl0JiYoeXQ9NjUyOTMpO3ZhciBNdD1fZSh5dCxUZSgiamlzMDIwOCIpKTtyZXR1cm4gbnVsbD09PU10P1coeXQpOjIhPT1RZT8odW4ucHJlcGVu''@;'; put 'put ''ZCh5dCksUWU9MixbMjcsMzYsNjZdKTpbQihNdC85NCkrMzMsTXQlOTQrMzNdfX1mdW5jdGlvbiB2ZShBZSl7dmFyIF90PUFlLmZhdGFsLG50PTA7dGhpcy5oYW5kbGVyPWZ1bmN0aW9uKFFlLHVuKXtpZih1bj09PU4mJjAhPT1udClyZXR1cm4gbnQ9MCxVKF90KTtpZih1bj09PU4mJjA9PT1u''@;'; put 'put ''dClyZXR1cm4gSztpZigwIT09bnQpe3ZhciB5dD1udCxNdD1udWxsO250PTA7dmFyIER0PXVuPDEyNz82NDo2NSxpdD15dDwxNjA/MTI5OjE5MztpZigoXyh1biw2NCwxMjYpfHxfKHVuLDEyOCwyNTIpKSYmKE10PTE4OCooeXQtaXQpK3VuLUR0KSxfKE10LDg4MzYsMTA3MTUpKXJldHVybiA0''@;'; put 'put ''ODUwOCtNdDt2YXIgJGU9bnVsbD09PU10P251bGw6bWUoTXQsVGUoImppczAyMDgiKSk7cmV0dXJuIG51bGw9PT0kZSYmTyh1bikmJlFlLnByZXBlbmQodW4pLG51bGw9PT0kZT9VKF90KTokZX1yZXR1cm4gTyh1bil8fDEyOD09PXVuP3VuOl8odW4sMTYxLDIyMyk/NjUyMTYrdW46Xyh1biwx''@;'; put 'put ''MjksMTU5KXx8Xyh1biwyMjQsMjUyKT8obnQ9dW4sbnVsbCk6VShfdCl9fWZ1bmN0aW9uIFhlKEFlKXt0aGlzLmhhbmRsZXI9ZnVuY3Rpb24obnQsUWUpe2lmKFFlPT09TilyZXR1cm4gSztpZih6KFFlKXx8MTI4PT09UWUpcmV0dXJuIFFlO2lmKDE2NT09PVFlKXJldHVybiA5MjtpZig4MjU0''@;'; put 'put ''PT09UWUpcmV0dXJuIDEyNjtpZihfKFFlLDY1Mzc3LDY1NDM5KSlyZXR1cm4gUWUtNjUzNzcrMTYxOzg3MjI9PT1RZSYmKFFlPTY1MjkzKTt2YXIgdW49ZnVuY3Rpb24gVihBZSl7cmV0dXJuKHA9cHx8VGUoImppczAyMDgiKS5tYXAoZnVuY3Rpb24obnQsUWUpe3JldHVybiBfKFFlLDgyNzIs''@;'; put 'put ''ODgzNSk/bnVsbDpudH0pKS5pbmRleE9mKEFlKX0oUWUpO2lmKG51bGw9PT11bilyZXR1cm4gVyhRZSk7dmFyIHl0PUIodW4vMTg4KSxEdD11biUxODg7cmV0dXJuW3l0Kyh5dDwzMT8xMjk6MTkzKSxEdCsoRHQ8NjM/NjQ6NjUpXX19ZnVuY3Rpb24gemUoQWUpe3ZhciBfdD1BZS5mYXRhbCxu''@;'; put 'put ''dD0wO3RoaXMuaGFuZGxlcj1mdW5jdGlvbihRZSx1bil7aWYodW49PT1OJiYwIT09bnQpcmV0dXJuIG50PTAsVShfdCk7aWYodW49PT1OJiYwPT09bnQpcmV0dXJuIEs7aWYoMCE9PW50KXt2YXIgeXQ9bnQsTXQ9bnVsbDtudD0wLF8odW4sNjUsMjU0KSYmKE10PTE5MCooeXQtMTI5KSsodW4t''@;'; put 'put ''NjUpKTt2YXIgRHQ9bnVsbD09PU10P251bGw6bWUoTXQsVGUoImV1Yy1rciIpKTtyZXR1cm4gbnVsbD09PU10JiZPKHVuKSYmUWUucHJlcGVuZCh1biksbnVsbD09PUR0P1UoX3QpOkR0fXJldHVybiBPKHVuKT91bjpfKHVuLDEyOSwyNTQpPyhudD11bixudWxsKTpVKF90KX19ZnVuY3Rpb24g''@;'; put 'put ''RGUoQWUpe3RoaXMuaGFuZGxlcj1mdW5jdGlvbihudCxRZSl7aWYoUWU9PT1OKXJldHVybiBLO2lmKHooUWUpKXJldHVybiBRZTt2YXIgdW49X2UoUWUsVGUoImV1Yy1rciIpKTtyZXR1cm4gbnVsbD09PXVuP1coUWUpOltCKHVuLzE5MCkrMTI5LHVuJTE5MCs2NV19fWZ1bmN0aW9uIEZlKEFl''@;'; put 'put ''LF90KXt2YXIgbnQ9QWU+PjgsUWU9MjU1JkFlO3JldHVybiBfdD9bbnQsUWVdOltRZSxudF19ZnVuY3Rpb24gT2UoQWUsX3Qpe3ZhciBudD1fdC5mYXRhbCxRZT1udWxsLHVuPW51bGw7dGhpcy5oYW5kbGVyPWZ1bmN0aW9uKHl0LE10KXtpZihNdD09PU4mJihudWxsIT09UWV8fG51bGwhPT11''@;'; put 'put ''bikpcmV0dXJuIFUobnQpO2lmKE10PT09TiYmbnVsbD09PVFlJiZudWxsPT09dW4pcmV0dXJuIEs7aWYobnVsbD09PVFlKXJldHVybiBRZT1NdCxudWxsO3ZhciBEdDtpZihEdD1BZT8oUWU8PDgpK010OihNdDw8OCkrUWUsUWU9bnVsbCxudWxsIT09dW4pe3ZhciBpdD11bjtyZXR1cm4gdW49''@;'; put 'put ''bnVsbCxfKER0LDU2MzIwLDU3MzQzKT82NTUzNisxMDI0KihpdC01NTI5NikrKER0LTU2MzIwKTooeXQucHJlcGVuZChGZShEdCxBZSkpLFUobnQpKX1yZXR1cm4gXyhEdCw1NTI5Niw1NjMxOSk/KHVuPUR0LG51bGwpOl8oRHQsNTYzMjAsNTczNDMpP1UobnQpOkR0fX1mdW5jdGlvbiBJZShB''@;'; put 'put ''ZSxfdCl7dGhpcy5oYW5kbGVyPWZ1bmN0aW9uKFFlLHVuKXtpZih1bj09PU4pcmV0dXJuIEs7aWYoXyh1biwwLDY1NTM1KSlyZXR1cm4gRmUodW4sQWUpO3ZhciB5dD1GZSg1NTI5NisodW4tNjU1MzY+PjEwKSxBZSksTXQ9RmUoNTYzMjArKHVuLTY1NTM2JjEwMjMpLEFlKTtyZXR1cm4geXQu''@;'; put 'put ''Y29uY2F0KE10KX19ZnVuY3Rpb24gVmUoQWUpe3RoaXMuaGFuZGxlcj1mdW5jdGlvbihudCxRZSl7cmV0dXJuIFFlPT09Tj9LOk8oUWUpP1FlOjYzMzYwK1FlLTEyOH19ZnVuY3Rpb24ga2UoQWUpe3RoaXMuaGFuZGxlcj1mdW5jdGlvbihudCxRZSl7cmV0dXJuIFFlPT09Tj9LOnooUWUpP1Fl''@;'; put 'put ''Ol8oUWUsNjMzNjAsNjM0ODcpP1FlLTYzMzYwKzEyODpXKFFlKX19T2JqZWN0LmRlZmluZVByb3BlcnR5JiYoT2JqZWN0LmRlZmluZVByb3BlcnR5KFQucHJvdG90eXBlLCJlbmNvZGluZyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbmNvZGluZy5uYW1lLnRvTG93ZXJDYXNlKCl9''@;'; put 'put ''fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFQucHJvdG90eXBlLCJmYXRhbCIse2dldDpmdW5jdGlvbigpe3JldHVybiJmYXRhbCI9PT10aGlzLl9lcnJvcl9tb2RlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShULnByb3RvdHlwZSwiaWdub3JlQk9NIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJu''@;'; put 'put ''IHRoaXMuX2lnbm9yZUJPTX19KSksVC5wcm90b3R5cGUuZGVjb2RlPWZ1bmN0aW9uKF90LG50KXt2YXIgUWU7UWU9Im9iamVjdCI9PXR5cGVvZiBfdCYmX3QgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcj9uZXcgVWludDhBcnJheShfdCk6Im9iamVjdCI9PXR5cGVvZiBfdCYmImJ1ZmZlciJpbiBf''@;'; put 'put ''dCYmX3QuYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXI/bmV3IFVpbnQ4QXJyYXkoX3QuYnVmZmVyLF90LmJ5dGVPZmZzZXQsX3QuYnl0ZUxlbmd0aCk6bmV3IFVpbnQ4QXJyYXkoMCksbnQ9dyhudCksdGhpcy5fZG9fbm90X2ZsdXNofHwodGhpcy5fZGVjb2Rlcj1sZVt0aGlzLl9lbmNv''@;'; put 'put ''ZGluZy5uYW1lXSh7ZmF0YWw6ImZhdGFsIj09PXRoaXMuX2Vycm9yX21vZGV9KSx0aGlzLl9CT01zZWVuPSExKSx0aGlzLl9kb19ub3RfZmx1c2g9ISFudC5zdHJlYW07Zm9yKHZhciBNdCx1bj1uZXcgTChRZSkseXQ9W107Oyl7dmFyIER0PXVuLnJlYWQoKTtpZihEdD09PU58fChNdD10aGlz''@;'; put 'put ''Ll9kZWNvZGVyLmhhbmRsZXIodW4sRHQpKT09PUspYnJlYWs7bnVsbCE9PU10JiYoQXJyYXkuaXNBcnJheShNdCk/eXQucHVzaC5hcHBseSh5dCxNdCk6eXQucHVzaChNdCkpfWlmKCF0aGlzLl9kb19ub3RfZmx1c2gpe2Rve2lmKChNdD10aGlzLl9kZWNvZGVyLmhhbmRsZXIodW4sdW4ucmVh''@;'; put 'put ''ZCgpKSk9PT1LKWJyZWFrO251bGwhPT1NdCYmKEFycmF5LmlzQXJyYXkoTXQpP3l0LnB1c2guYXBwbHkoeXQsTXQpOnl0LnB1c2goTXQpKX13aGlsZSghdW4uZW5kT2ZTdHJlYW0oKSk7dGhpcy5fZGVjb2Rlcj1udWxsfXJldHVybiBmdW5jdGlvbiBpdCgkZSl7cmV0dXJuIGZ1bmN0aW9uIGco''@;'; put 'put ''QWUsX3Qpe3JldHVybi0xIT09QWUuaW5kZXhPZihfdCl9KFsiVVRGLTgiLCJVVEYtMTZMRSIsIlVURi0xNkJFIl0sdGhpcy5fZW5jb2RpbmcubmFtZSkmJiF0aGlzLl9pZ25vcmVCT00mJiF0aGlzLl9CT01zZWVuJiYoJGUubGVuZ3RoPjAmJjY1Mjc5PT09JGVbMF0/KHRoaXMuX0JPTXNlZW49''@;'; put 'put ''ITAsJGUuc2hpZnQoKSk6JGUubGVuZ3RoPjAmJih0aGlzLl9CT01zZWVuPSEwKSksZnVuY3Rpb24gRihBZSl7Zm9yKHZhciBfdD0iIixudD0wO250PEFlLmxlbmd0aDsrK250KXt2YXIgUWU9QWVbbnRdO1FlPD02NTUzNT9fdCs9U3RyaW5nLmZyb21DaGFyQ29kZShRZSk6KFFlLT02NTUzNixf''@;'; put 'put ''dCs9U3RyaW5nLmZyb21DaGFyQ29kZSg1NTI5NisoUWU+PjEwKSw1NjMyMCsoMTAyMyZRZSkpKX1yZXR1cm4gX3R9KCRlKX0uY2FsbCh0aGlzLHl0KX0sT2JqZWN0LmRlZmluZVByb3BlcnR5JiZPYmplY3QuZGVmaW5lUHJvcGVydHkoSC5wcm90b3R5cGUsImVuY29kaW5nIix7Z2V0OmZ1bmN0''@;'; put 'put ''aW9uKCl7cmV0dXJuIHRoaXMuX2VuY29kaW5nLm5hbWUudG9Mb3dlckNhc2UoKX19KSxILnByb3RvdHlwZS5lbmNvZGU9ZnVuY3Rpb24oX3QsbnQpe190PXZvaWQgMD09PV90PyIiOlN0cmluZyhfdCksbnQ9dyhudCksdGhpcy5fZG9fbm90X2ZsdXNofHwodGhpcy5fZW5jb2Rlcj1pZVt0aGlz''@;'; put 'put ''Ll9lbmNvZGluZy5uYW1lXSh7ZmF0YWw6ImZhdGFsIj09PXRoaXMuX2ZhdGFsfSkpLHRoaXMuX2RvX25vdF9mbHVzaD0hIW50LnN0cmVhbTtmb3IodmFyIHl0LFFlPW5ldyBMKGZ1bmN0aW9uIFAoQWUpe2Zvcih2YXIgX3Q9U3RyaW5nKEFlKSxudD1fdC5sZW5ndGgsUWU9MCx1bj1bXTtRZTxu''@;'; put 'put ''dDspe3ZhciB5dD1fdC5jaGFyQ29kZUF0KFFlKTtpZih5dDw1NTI5Nnx8eXQ+NTczNDMpdW4ucHVzaCh5dCk7ZWxzZSBpZig1NjMyMDw9eXQmJnl0PD01NzM0Myl1bi5wdXNoKDY1NTMzKTtlbHNlIGlmKDU1Mjk2PD15dCYmeXQ8PTU2MzE5KWlmKFFlPT09bnQtMSl1bi5wdXNoKDY1NTMzKTtl''@;'; put 'put ''bHNle3ZhciBNdD1fdC5jaGFyQ29kZUF0KFFlKzEpOzU2MzIwPD1NdCYmTXQ8PTU3MzQzPyh1bi5wdXNoKDY1NTM2KygoMTAyMyZ5dCk8PDEwKSsoMTAyMyZNdCkpLFFlKz0xKTp1bi5wdXNoKDY1NTMzKX1RZSs9MX1yZXR1cm4gdW59KF90KSksdW49W107Oyl7dmFyIE10PVFlLnJlYWQoKTtp''@;'; put 'put ''ZihNdD09PU58fCh5dD10aGlzLl9lbmNvZGVyLmhhbmRsZXIoUWUsTXQpKT09PUspYnJlYWs7QXJyYXkuaXNBcnJheSh5dCk/dW4ucHVzaC5hcHBseSh1bix5dCk6dW4ucHVzaCh5dCl9aWYoIXRoaXMuX2RvX25vdF9mbHVzaCl7Zm9yKDsoeXQ9dGhpcy5fZW5jb2Rlci5oYW5kbGVyKFFlLFFl''@;'; put 'put ''LnJlYWQoKSkpIT09SzspQXJyYXkuaXNBcnJheSh5dCk/dW4ucHVzaC5hcHBseSh1bix5dCk6dW4ucHVzaCh5dCk7dGhpcy5fZW5jb2Rlcj1udWxsfXJldHVybiBuZXcgVWludDhBcnJheSh1bil9LGllWyJVVEYtOCJdPWZ1bmN0aW9uKEFlKXtyZXR1cm4gbmV3IEUoQWUpfSxsZVsiVVRGLTgi''@;'; put 'put ''XT1mdW5jdGlvbihBZSl7cmV0dXJuIG5ldyBqKEFlKX0sImVuY29kaW5nLWluZGV4ZXMiaW4gSSYmSi5mb3JFYWNoKGZ1bmN0aW9uKEFlKXsiTGVnYWN5IHNpbmdsZS1ieXRlIGVuY29kaW5ncyI9PT1BZS5oZWFkaW5nJiZBZS5lbmNvZGluZ3MuZm9yRWFjaChmdW5jdGlvbihfdCl7dmFyIG50''@;'; put 'put ''PV90Lm5hbWUsUWU9VGUobnQudG9Mb3dlckNhc2UoKSk7bGVbbnRdPWZ1bmN0aW9uKHVuKXtyZXR1cm4gbmV3IG0oUWUsdW4pfSxpZVtudF09ZnVuY3Rpb24odW4pe3JldHVybiBuZXcgQShRZSx1bil9fSl9KSxsZS5HQks9ZnVuY3Rpb24oQWUpe3JldHVybiBuZXcgYWUoQWUpfSxpZS5HQks9''@;'; put 'put ''ZnVuY3Rpb24oQWUpe3JldHVybiBuZXcgdGUoQWUsITApfSxpZS5nYjE4MDMwPWZ1bmN0aW9uKEFlKXtyZXR1cm4gbmV3IHRlKEFlKX0sbGUuZ2IxODAzMD1mdW5jdGlvbihBZSl7cmV0dXJuIG5ldyBhZShBZSl9LGllLkJpZzU9ZnVuY3Rpb24oQWUpe3JldHVybiBuZXcgd2UoQWUpfSxsZS5C''@;'; put 'put ''aWc1PWZ1bmN0aW9uKEFlKXtyZXR1cm4gbmV3IHNlKEFlKX0saWVbIkVVQy1KUCJdPWZ1bmN0aW9uKEFlKXtyZXR1cm4gbmV3IEplKEFlKX0sbGVbIkVVQy1KUCJdPWZ1bmN0aW9uKEFlKXtyZXR1cm4gbmV3IFVlKEFlKX0saWVbIklTTy0yMDIyLUpQIl09ZnVuY3Rpb24oQWUpe3JldHVybiBu''@;'; put 'put ''ZXcgeGUoQWUpfSxsZVsiSVNPLTIwMjItSlAiXT1mdW5jdGlvbihBZSl7cmV0dXJuIG5ldyBvdChBZSl9LGllLlNoaWZ0X0pJUz1mdW5jdGlvbihBZSl7cmV0dXJuIG5ldyBYZShBZSl9LGxlLlNoaWZ0X0pJUz1mdW5jdGlvbihBZSl7cmV0dXJuIG5ldyB2ZShBZSl9LGllWyJFVUMtS1IiXT1m''@;'; put 'put ''dW5jdGlvbihBZSl7cmV0dXJuIG5ldyBEZShBZSl9LGxlWyJFVUMtS1IiXT1mdW5jdGlvbihBZSl7cmV0dXJuIG5ldyB6ZShBZSl9LGllWyJVVEYtMTZCRSJdPWZ1bmN0aW9uKEFlKXtyZXR1cm4gbmV3IEllKCEwLEFlKX0sbGVbIlVURi0xNkJFIl09ZnVuY3Rpb24oQWUpe3JldHVybiBuZXcg''@;'; put 'put ''T2UoITAsQWUpfSxpZVsiVVRGLTE2TEUiXT1mdW5jdGlvbihBZSl7cmV0dXJuIG5ldyBJZSghMSxBZSl9LGxlWyJVVEYtMTZMRSJdPWZ1bmN0aW9uKEFlKXtyZXR1cm4gbmV3IE9lKCExLEFlKX0saWVbIngtdXNlci1kZWZpbmVkIl09ZnVuY3Rpb24oQWUpe3JldHVybiBuZXcga2UoQWUpfSxs''@;'; put 'put ''ZVsieC11c2VyLWRlZmluZWQiXT1mdW5jdGlvbihBZSl7cmV0dXJuIG5ldyBWZShBZSl9LEkuVGV4dEVuY29kZXJ8fChJLlRleHRFbmNvZGVyPUgpLEkuVGV4dERlY29kZXJ8fChJLlRleHREZWNvZGVyPVQpLHVlLmV4cG9ydHMmJih1ZS5leHBvcnRzPXtUZXh0RW5jb2RlcjpJLlRleHRFbmNv''@;'; put 'put ''ZGVyLFRleHREZWNvZGVyOkkuVGV4dERlY29kZXIsRW5jb2RpbmdJbmRleGVzOklbImVuY29kaW5nLWluZGV4ZXMiXX0pfSh0aGlzfHx7fSl9LDMzOTg6dWU9PntmdW5jdGlvbiB5KEkpe3RyeXtpZighZ2xvYmFsLmxvY2FsU3RvcmFnZSlyZXR1cm4hMX1jYXRjaHtyZXR1cm4hMX12YXIgXz1n''@;'; put 'put ''bG9iYWwubG9jYWxTdG9yYWdlW0ldO3JldHVybiBudWxsIT1fJiYidHJ1ZSI9PT1TdHJpbmcoXykudG9Mb3dlckNhc2UoKX11ZS5leHBvcnRzPWZ1bmN0aW9uIFgoSSxfKXtpZih5KCJub0RlcHJlY2F0aW9uIikpcmV0dXJuIEk7dmFyIGc9ITE7cmV0dXJuIGZ1bmN0aW9uIEIoKXtpZighZyl7''@;'; put 'put ''aWYoeSgidGhyb3dEZXByZWNhdGlvbiIpKXRocm93IG5ldyBFcnJvcihfKTt5KCJ0cmFjZURlcHJlY2F0aW9uIik/Y29uc29sZS50cmFjZShfKTpjb25zb2xlLndhcm4oXyksZz0hMH1yZXR1cm4gSS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fX0sMTI5NTQ6KHVlLFgseSk9PnshZnVuY3Rpb24o''@;'; put 'put ''SSl7InVzZSBzdHJpY3QiO0kuZXhwb3J0cy5pc191cmk9ZyxJLmV4cG9ydHMuaXNfaHR0cF91cmk9QixJLmV4cG9ydHMuaXNfaHR0cHNfdXJpPXcsSS5leHBvcnRzLmlzX3dlYl91cmk9UCxJLmV4cG9ydHMuaXNVcmk9ZyxJLmV4cG9ydHMuaXNIdHRwVXJpPUIsSS5leHBvcnRzLmlzSHR0cHNV''@;'; put 'put ''cmk9dyxJLmV4cG9ydHMuaXNXZWJVcmk9UDt2YXIgXz1mdW5jdGlvbihGKXtyZXR1cm4gRi5tYXRjaCgvKD86KFteOlwvPyNdKyk6KT8oPzpcL1wvKFteXC8/I10qKSk/KFtePyNdKikoPzpcPyhbXiNdKikpPyg/OiMoLiopKT8vKX07ZnVuY3Rpb24gZyhGKXtpZihGJiYhL1teYS16MC05XDpc''@;'; put 'put ''L1w/XCNcW1xdXEBcIVwkXCZcJ1woXClcKlwrXCxcO1w9XC5cLVxfXH5cJV0vaS50ZXN0KEYpJiYhLyVbXjAtOWEtZl0vaS50ZXN0KEYpJiYhLyVbMC05YS1mXSg6P1teMC05YS1mXXwkKS9pLnRlc3QoRikpe3ZhciBPLE4sTCxLLFUsej0iIixXPSIiO2lmKE49KE89XyhGKSlbMl0sTD1PWzNd''@;'; put 'put ''LEs9T1s0XSxVPU9bNV0sKHo9T1sxXSkmJnoubGVuZ3RoJiZMLmxlbmd0aD49MCl7aWYoTiYmTi5sZW5ndGgpe2lmKDAhPT1MLmxlbmd0aCYmIS9eXC8vLnRlc3QoTCkpcmV0dXJufWVsc2UgaWYoL15cL1wvLy50ZXN0KEwpKXJldHVybjtpZigvXlthLXpdW2EtejAtOVwrXC1cLl0qJC8udGVz''@;'; put 'put ''dCh6LnRvTG93ZXJDYXNlKCkpKXJldHVybiBXKz16KyI6IixOJiZOLmxlbmd0aCYmKFcrPSIvLyIrTiksVys9TCxLJiZLLmxlbmd0aCYmKFcrPSI/IitLKSxVJiZVLmxlbmd0aCYmKFcrPSIjIitVKSxXfX19ZnVuY3Rpb24gQihGLE8pe2lmKGcoRikpe3ZhciB6LEssVyxZLE49IiIsTD0iIixV''@;'; put 'put ''PSIiLHE9IiI7aWYoTD0oej1fKEYpKVsyXSxLPXpbM10sVz16WzRdLFk9els1XSxOPXpbMV0pe2lmKE8pe2lmKCJodHRwcyIhPU4udG9Mb3dlckNhc2UoKSlyZXR1cm59ZWxzZSBpZigiaHR0cCIhPU4udG9Mb3dlckNhc2UoKSlyZXR1cm47aWYoTClyZXR1cm4vOihcZCspJC8udGVzdChMKSYm''@;'; put 'put ''KFU9TC5tYXRjaCgvOihcZCspJC8pWzBdLEw9TC5yZXBsYWNlKC86XGQrJC8sIiIpKSxxKz1OKyI6IixxKz0iLy8iK0wsVSYmKHErPVUpLHErPUssVyYmVy5sZW5ndGgmJihxKz0iPyIrVyksWSYmWS5sZW5ndGgmJihxKz0iIyIrWSkscX19fWZ1bmN0aW9uIHcoRil7cmV0dXJuIEIoRiwhMCl9''@;'; put 'put ''ZnVuY3Rpb24gUChGKXtyZXR1cm4gQihGKXx8dyhGKX19KHVlPXkubm1kKHVlKSl9LDg2NjE6KHVlLFgseSk9Pnt1ZS5leHBvcnRzPXkoODY2MSl9LDM1MzU4Oih1ZSxYLHkpPT57dmFyIEk9eyIuL2FmIjoxMTU0NCwiLi9hZi5qcyI6MTE1NDQsIi4vYXIiOjMzMTA4LCIuL2FyLWR6Ijo1MjE1''@;'; put 'put ''NSwiLi9hci1kei5qcyI6NTIxNTUsIi4vYXIta3ciOjUzNTgzLCIuL2FyLWt3LmpzIjo1MzU4MywiLi9hci1seSI6NDE2MzgsIi4vYXItbHkuanMiOjQxNjM4LCIuL2FyLW1hIjo4NzgyMywiLi9hci1tYS5qcyI6ODc4MjMsIi4vYXItcHMiOjc3MTIsIi4vYXItcHMuanMiOjc3MTIsIi4vYXIt''@;'; put 'put ''c2EiOjc4MjYxLCIuL2FyLXNhLmpzIjo3ODI2MSwiLi9hci10biI6NTY3MDMsIi4vYXItdG4uanMiOjU2NzAzLCIuL2FyLmpzIjozMzEwOCwiLi9heiI6NDY1MDgsIi4vYXouanMiOjQ2NTA4LCIuL2JlIjoxNjc2NiwiLi9iZS5qcyI6MTY3NjYsIi4vYmciOjI4NTY0LCIuL2JnLmpzIjoyODU2''@;'; put 'put ''NCwiLi9ibSI6OTc0NjIsIi4vYm0uanMiOjk3NDYyLCIuL2JuIjoxNzEwNywiLi9ibi1iZCI6NDM0MzgsIi4vYm4tYmQuanMiOjQzNDM4LCIuL2JuLmpzIjoxNzEwNywiLi9ibyI6OTAwNCwiLi9iby5qcyI6OTAwNCwiLi9iciI6NTA5MjcsIi4vYnIuanMiOjUwOTI3LCIuL2JzIjo4Nzc2OCwi''@;'; put 'put ''Li9icy5qcyI6ODc3NjgsIi4vY2EiOjU2MjkxLCIuL2NhLmpzIjo1NjI5MSwiLi9jcyI6ODUzMDEsIi4vY3MuanMiOjg1MzAxLCIuL2N2Ijo2NjY2NiwiLi9jdi5qcyI6NjY2NjYsIi4vY3kiOjU1MTYzLCIuL2N5LmpzIjo1NTE2MywiLi9kYSI6ODczNjAsIi4vZGEuanMiOjg3MzYwLCIuL2Rl''@;'; put 'put ''Ijo0NTkzMiwiLi9kZS1hdCI6NDMyNDgsIi4vZGUtYXQuanMiOjQzMjQ4LCIuL2RlLWNoIjo4MzIyMiwiLi9kZS1jaC5qcyI6ODMyMjIsIi4vZGUuanMiOjQ1OTMyLCIuL2R2Ijo2NDA1LCIuL2R2LmpzIjo2NDA1LCIuL2VsIjo2MDcxOCwiLi9lbC5qcyI6NjA3MTgsIi4vZW4tYXUiOjM2MzE5''@;'; put 'put ''LCIuL2VuLWF1LmpzIjozNjMxOSwiLi9lbi1jYSI6ODA1OTcsIi4vZW4tY2EuanMiOjgwNTk3LCIuL2VuLWdiIjo1MTgwMCwiLi9lbi1nYi5qcyI6NTE4MDAsIi4vZW4taWUiOjgwNywiLi9lbi1pZS5qcyI6ODA3LCIuL2VuLWlsIjo5NTk2MCwiLi9lbi1pbC5qcyI6OTU5NjAsIi4vZW4taW4i''@;'; put 'put ''Ojg0NDE4LCIuL2VuLWluLmpzIjo4NDQxOCwiLi9lbi1ueiI6NDY4NjUsIi4vZW4tbnouanMiOjQ2ODY1LCIuL2VuLXNnIjozMjY0NywiLi9lbi1zZy5qcyI6MzI2NDcsIi4vZW8iOjYxOTMxLCIuL2VvLmpzIjo2MTkzMSwiLi9lcyI6NDY2NzksIi4vZXMtZG8iOjQxODA1LCIuL2VzLWRvLmpz''@;'; put 'put ''Ijo0MTgwNSwiLi9lcy1teCI6ODM0NDUsIi4vZXMtbXguanMiOjgzNDQ1LCIuL2VzLXVzIjo4MTUxNiwiLi9lcy11cy5qcyI6ODE1MTYsIi4vZXMuanMiOjQ2Njc5LCIuL2V0Ijo4ODE1MCwiLi9ldC5qcyI6ODgxNTAsIi4vZXUiOjgwNzU3LCIuL2V1LmpzIjo4MDc1NywiLi9mYSI6NjU3NDIs''@;'; put 'put ''Ii4vZmEuanMiOjY1NzQyLCIuL2ZpIjozMzk1OCwiLi9maS5qcyI6MzM5NTgsIi4vZmlsIjo0NjcyMCwiLi9maWwuanMiOjQ2NzIwLCIuL2ZvIjo5ODM1MiwiLi9mby5qcyI6OTgzNTIsIi4vZnIiOjQwNTksIi4vZnItY2EiOjQyMDk2LCIuL2ZyLWNhLmpzIjo0MjA5NiwiLi9mci1jaCI6OTU3''@;'; put 'put ''NTksIi4vZnItY2guanMiOjk1NzU5LCIuL2ZyLmpzIjo0MDU5LCIuL2Z5IjoxNTk1OCwiLi9meS5qcyI6MTU5NTgsIi4vZ2EiOjk0MTQzLCIuL2dhLmpzIjo5NDE0MywiLi9nZCI6NjcwMjgsIi4vZ2QuanMiOjY3MDI4LCIuL2dsIjo4MDQyOCwiLi9nbC5qcyI6ODA0MjgsIi4vZ29tLWRldmEi''@;'; put 'put ''Ojc2ODYxLCIuL2dvbS1kZXZhLmpzIjo3Njg2MSwiLi9nb20tbGF0biI6NTc3MTgsIi4vZ29tLWxhdG4uanMiOjU3NzE4LCIuL2d1IjoyNjgyNywiLi9ndS5qcyI6MjY4MjcsIi4vaGUiOjIxOTM2LCIuL2hlLmpzIjoyMTkzNiwiLi9oaSI6MzEzMzIsIi4vaGkuanMiOjMxMzMyLCIuL2hyIjo5''@;'; put 'put ''MTk1NywiLi9oci5qcyI6OTE5NTcsIi4vaHUiOjQ4OTI4LCIuL2h1LmpzIjo0ODkyOCwiLi9oeS1hbSI6NTYyMTUsIi4vaHktYW0uanMiOjU2MjE1LCIuL2lkIjo1ODYsIi4vaWQuanMiOjU4NiwiLi9pcyI6OTAyMTEsIi4vaXMuanMiOjkwMjExLCIuL2l0Ijo3MDE3MCwiLi9pdC1jaCI6MjIz''@;'; put 'put ''NDAsIi4vaXQtY2guanMiOjIyMzQwLCIuL2l0LmpzIjo3MDE3MCwiLi9qYSI6Mzk3NzAsIi4vamEuanMiOjM5NzcwLCIuL2p2Ijo3Mzg3NSwiLi9qdi5qcyI6NzM4NzUsIi4va2EiOjc5NDk5LCIuL2thLmpzIjo3OTQ5OSwiLi9rayI6OTM1NzMsIi4va2suanMiOjkzNTczLCIuL2ttIjo2ODgw''@;'; put 'put ''NywiLi9rbS5qcyI6Njg4MDcsIi4va24iOjY1MDgyLCIuL2tuLmpzIjo2NTA4MiwiLi9rbyI6MjAxMzcsIi4va28uanMiOjIwMTM3LCIuL2t1Ijo3MDExMSwiLi9rdS1rbXIiOjYzNzQ0LCIuL2t1LWttci5qcyI6NjM3NDQsIi4va3UuanMiOjcwMTExLCIuL2t5Ijo5OTE4NywiLi9reS5qcyI6''@;'; put 'put ''OTkxODcsIi4vbGIiOjM1OTY5LCIuL2xiLmpzIjozNTk2OSwiLi9sbyI6MzM1MjYsIi4vbG8uanMiOjMzNTI2LCIuL2x0Ijo5MDQxMSwiLi9sdC5qcyI6OTA0MTEsIi4vbHYiOjMyNjIxLCIuL2x2LmpzIjozMjYyMSwiLi9tZSI6ODU4NjksIi4vbWUuanMiOjg1ODY5LCIuL21pIjozNTg4MSwi''@;'; put 'put ''Li9taS5qcyI6MzU4ODEsIi4vbWsiOjkyMzkxLCIuL21rLmpzIjo5MjM5MSwiLi9tbCI6MjExMjYsIi4vbWwuanMiOjIxMTI2LCIuL21uIjo0NDg5MiwiLi9tbi5qcyI6NDQ4OTIsIi4vbXIiOjU5MDgwLCIuL21yLmpzIjo1OTA4MCwiLi9tcyI6NzAzOTksIi4vbXMtbXkiOjI1OTUwLCIuL21z''@;'; put 'put ''LW15LmpzIjoyNTk1MCwiLi9tcy5qcyI6NzAzOTksIi4vbXQiOjc5OTAyLCIuL210LmpzIjo3OTkwMiwiLi9teSI6NzI5ODUsIi4vbXkuanMiOjcyOTg1LCIuL25iIjo2Nzg1OSwiLi9uYi5qcyI6Njc4NTksIi4vbmUiOjEzNjQyLCIuL25lLmpzIjoxMzY0MiwiLi9ubCI6NjU0NDEsIi4vbmwt''@;'; put 'put ''YmUiOjk5ODc1LCIuL25sLWJlLmpzIjo5OTg3NSwiLi9ubC5qcyI6NjU0NDEsIi4vbm4iOjgxMzExLCIuL25uLmpzIjo4MTMxMSwiLi9vYy1sbmMiOjcyNTY3LCIuL29jLWxuYy5qcyI6NzI1NjcsIi4vcGEtaW4iOjU2OTYyLCIuL3BhLWluLmpzIjo1Njk2MiwiLi9wbCI6NjEwNjMsIi4vcGwu''@;'; put 'put ''anMiOjYxMDYzLCIuL3B0Ijo3ODcxOSwiLi9wdC1iciI6OTc0NzYsIi4vcHQtYnIuanMiOjk3NDc2LCIuL3B0LmpzIjo3ODcxOSwiLi9ybyI6NTEwMDQsIi4vcm8uanMiOjUxMDA0LCIuL3J1Ijo1MTMyNiwiLi9ydS5qcyI6NTEzMjYsIi4vc2QiOjcyNjA4LCIuL3NkLmpzIjo3MjYwOCwiLi9z''@;'; put 'put ''ZSI6MTM5MTEsIi4vc2UuanMiOjEzOTExLCIuL3NpIjoyNTE0NywiLi9zaS5qcyI6MjUxNDcsIi4vc2siOjIzNzQxLCIuL3NrLmpzIjoyMzc0MSwiLi9zbCI6OTNlMywiLi9zbC5qcyI6OTNlMywiLi9zcSI6NjA0NTEsIi4vc3EuanMiOjYwNDUxLCIuL3NyIjo1NTA0NiwiLi9zci1jeXJsIjo0''@;'; put 'put ''MDkwNSwiLi9zci1jeXJsLmpzIjo0MDkwNSwiLi9zci5qcyI6NTUwNDYsIi4vc3MiOjg1NzY1LCIuL3NzLmpzIjo4NTc2NSwiLi9zdiI6OTkyOTAsIi4vc3YuanMiOjk5MjkwLCIuL3N3Ijo1MzQ0OSwiLi9zdy5qcyI6NTM0NDksIi4vdGEiOjcyNjg4LCIuL3RhLmpzIjo3MjY4OCwiLi90ZSI6''@;'; put 'put ''MzIwNjAsIi4vdGUuanMiOjMyMDYwLCIuL3RldCI6OTMyOTAsIi4vdGV0LmpzIjo5MzI5MCwiLi90ZyI6ODI5NCwiLi90Zy5qcyI6ODI5NCwiLi90aCI6MTIzMSwiLi90aC5qcyI6MTIzMSwiLi90ayI6Mzc0NiwiLi90ay5qcyI6Mzc0NiwiLi90bC1waCI6NDkwNDAsIi4vdGwtcGguanMiOjQ5''@;'; put 'put ''MDQwLCIuL3RsaCI6MTcxODcsIi4vdGxoLmpzIjoxNzE4NywiLi90ciI6NjAxNTMsIi4vdHIuanMiOjYwMTUzLCIuL3R6bCI6ODg1MjEsIi4vdHpsLmpzIjo4ODUyMSwiLi90em0iOjE4MDEwLCIuL3R6bS1sYXRuIjoyMjIzNCwiLi90em0tbGF0bi5qcyI6MjIyMzQsIi4vdHptLmpzIjoxODAx''@;'; put 'put ''MCwiLi91Zy1jbiI6NjMzNDksIi4vdWctY24uanMiOjYzMzQ5LCIuL3VrIjo2ODQ3OSwiLi91ay5qcyI6Njg0NzksIi4vdXIiOjQzMDI0LCIuL3VyLmpzIjo0MzAyNCwiLi91eiI6MTk4MDAsIi4vdXotbGF0biI6NzIzNzYsIi4vdXotbGF0bi5qcyI6NzIzNzYsIi4vdXouanMiOjE5ODAwLCIu''@;'; put 'put ''L3ZpIjo4OTM2NiwiLi92aS5qcyI6ODkzNjYsIi4veC1wc2V1ZG8iOjY5NzAyLCIuL3gtcHNldWRvLmpzIjo2OTcwMiwiLi95byI6NzI2NTUsIi4veW8uanMiOjcyNjU1LCIuL3poLWNuIjo1NzUsIi4vemgtY24uanMiOjU3NSwiLi96aC1oayI6MTgzNTEsIi4vemgtaGsuanMiOjE4MzUxLCIu''@;'; put 'put ''L3poLW1vIjo1MTYyNiwiLi96aC1tby5qcyI6NTE2MjYsIi4vemgtdHciOjg4ODcsIi4vemgtdHcuanMiOjg4ODd9O2Z1bmN0aW9uIF8oQil7dmFyIHc9ZyhCKTtyZXR1cm4geSh3KX1mdW5jdGlvbiBnKEIpe2lmKCF5Lm8oSSxCKSl7dmFyIHc9bmV3IEVycm9yKCJDYW5ub3QgZmluZCBtb2R1''@;'; put 'put ''bGUgJyIrQisiJyIpO3Rocm93IHcuY29kZT0iTU9EVUxFX05PVF9GT1VORCIsd31yZXR1cm4gSVtCXX1fLmtleXM9ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmtleXMoSSl9LF8ucmVzb2x2ZT1nLHVlLmV4cG9ydHM9XyxfLmlkPTM1MzU4fSw4MzMzNzooKT0+e30sNzg5ODI6KCk9Pnt9LDQ3''@;'; put 'put ''NzkwOigpPT57fSw3Nzk2NTooKT0+e30sNjYwODk6KCk9Pnt9LDc5MzY4OigpPT57fSwxNTc5MTooKT0+e30sNjEwOTM6KCk9Pnt9LDY0Njg4OigpPT57fSw1MTA2OTooKT0+e30sMTUzNDA6KCk9Pnt9LDc5ODM4OigpPT57fSw2Mzc3OTooKT0+e30sNzcxOTk6KCk9Pnt9LDI1MTcyOnVlPT57''@;'; put 'put ''dWUuZXhwb3J0cz1mdW5jdGlvbiBYKHksSSl7dGhpcy52PXksdGhpcy5rPUl9LHVlLmV4cG9ydHMuX19lc01vZHVsZT0hMCx1ZS5leHBvcnRzLmRlZmF1bHQ9dWUuZXhwb3J0c30sOTM1MTM6KHVlLFgseSk9Pnt2YXIgST15KDI1MTcyKTt1ZS5leHBvcnRzPWZ1bmN0aW9uIF8oZyl7dmFyIEI9''@;'; put 'put ''e30sdz0hMTtmdW5jdGlvbiBQKEYsTyl7cmV0dXJuIHc9ITAsTz1uZXcgUHJvbWlzZShmdW5jdGlvbih6KXt6KGdbRl0oTykpfSkse2RvbmU6ITEsdmFsdWU6bmV3IEkoTywxKX19cmV0dXJuIEJbdHlwZW9mIFN5bWJvbDwidSImJlN5bWJvbC5pdGVyYXRvcnx8IkBAaXRlcmF0b3IiXT1mdW5j''@;'; put 'put ''dGlvbigpe3JldHVybiB0aGlzfSxCLm5leHQ9ZnVuY3Rpb24oRil7cmV0dXJuIHc/KHc9ITEsRik6UCgibmV4dCIsRil9LCJmdW5jdGlvbiI9PXR5cGVvZiBnLnRocm93JiYoQi50aHJvdz1mdW5jdGlvbihGKXtpZih3KXRocm93IHc9ITEsRjtyZXR1cm4gUCgidGhyb3ciLEYpfSksImZ1bmN0''@;'; put 'put ''aW9uIj09dHlwZW9mIGcucmV0dXJuJiYoQi5yZXR1cm49ZnVuY3Rpb24oRil7cmV0dXJuIHc/KHc9ITEsRik6UCgicmV0dXJuIixGKX0pLEJ9LHVlLmV4cG9ydHMuX19lc01vZHVsZT0hMCx1ZS5leHBvcnRzLmRlZmF1bHQ9dWUuZXhwb3J0c30sODI4ODE6dWU9PntmdW5jdGlvbiB5KEkpe2Z1''@;'; put 'put ''bmN0aW9uIF8oZyl7aWYoT2JqZWN0KGcpIT09ZylyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IFR5cGVFcnJvcihnKyIgaXMgbm90IGFuIG9iamVjdC4iKSk7dmFyIEI9Zy5kb25lO3JldHVybiBQcm9taXNlLnJlc29sdmUoZy52YWx1ZSkudGhlbihmdW5jdGlvbih3KXtyZXR1cm57dmFsdWU6''@;'; put 'put ''dyxkb25lOkJ9fSl9cmV0dXJuKHk9ZnVuY3Rpb24oQil7dGhpcy5zPUIsdGhpcy5uPUIubmV4dH0pLnByb3RvdHlwZT17czpudWxsLG46bnVsbCxuZXh0OmZ1bmN0aW9uKCl7cmV0dXJuIF8odGhpcy5uLmFwcGx5KHRoaXMucyxhcmd1bWVudHMpKX0scmV0dXJuOmZ1bmN0aW9uKEIpe3ZhciB3''@;'; put 'put ''PXRoaXMucy5yZXR1cm47cmV0dXJuIHZvaWQgMD09PXc/UHJvbWlzZS5yZXNvbHZlKHt2YWx1ZTpCLGRvbmU6ITB9KTpfKHcuYXBwbHkodGhpcy5zLGFyZ3VtZW50cykpfSx0aHJvdzpmdW5jdGlvbihCKXt2YXIgdz10aGlzLnMucmV0dXJuO3JldHVybiB2b2lkIDA9PT13P1Byb21pc2UucmVq''@;'; put 'put ''ZWN0KEIpOl8ody5hcHBseSh0aGlzLnMsYXJndW1lbnRzKSl9fSxuZXcgeShJKX11ZS5leHBvcnRzPWZ1bmN0aW9uIFgoSSl7dmFyIF8sZyxCLHc9Mjtmb3IodHlwZW9mIFN5bWJvbDwidSImJihnPVN5bWJvbC5hc3luY0l0ZXJhdG9yLEI9U3ltYm9sLml0ZXJhdG9yKTt3LS07KXtpZihnJiZu''@;'; put 'put ''dWxsIT0oXz1JW2ddKSlyZXR1cm4gXy5jYWxsKEkpO2lmKEImJm51bGwhPShfPUlbQl0pKXJldHVybiBuZXcgeShfLmNhbGwoSSkpO2c9IkBAYXN5bmNJdGVyYXRvciIsQj0iQEBpdGVyYXRvciJ9dGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGlzIG5vdCBhc3luYyBpdGVyYWJsZSIpfSx1''@;'; put 'put ''ZS5leHBvcnRzLl9fZXNNb2R1bGU9ITAsdWUuZXhwb3J0cy5kZWZhdWx0PXVlLmV4cG9ydHN9LDI5MjkzOnVlPT57ZnVuY3Rpb24gWChJLF8sZyxCLHcsUCxGKXt0cnl7dmFyIE89SVtQXShGKSx6PU8udmFsdWV9Y2F0Y2goTil7cmV0dXJuIHZvaWQgZyhOKX1PLmRvbmU/Xyh6KTpQcm9taXNl''@;'; put 'put ''LnJlc29sdmUoeikudGhlbihCLHcpfXVlLmV4cG9ydHM9ZnVuY3Rpb24geShJKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgXz10aGlzLGc9YXJndW1lbnRzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihCLHcpe3ZhciBQPUkuYXBwbHkoXyxnKTtmdW5jdGlvbiBGKHope1goUCxCLHcsRixP''@;'; put 'put ''LCJuZXh0Iix6KX1mdW5jdGlvbiBPKHope1goUCxCLHcsRixPLCJ0aHJvdyIseil9Rih2b2lkIDApfSl9fSx1ZS5leHBvcnRzLl9fZXNNb2R1bGU9ITAsdWUuZXhwb3J0cy5kZWZhdWx0PXVlLmV4cG9ydHN9LDUzMzQ0Oih1ZSxYLHkpPT57dmFyIEk9eSgyNTE3Mik7dWUuZXhwb3J0cz1mdW5j''@;'; put 'put ''dGlvbiBfKGcpe3JldHVybiBuZXcgSShnLDApfSx1ZS5leHBvcnRzLl9fZXNNb2R1bGU9ITAsdWUuZXhwb3J0cy5kZWZhdWx0PXVlLmV4cG9ydHN9LDQyOTU4Oih1ZSxYLHkpPT57dmFyIEk9eSgyNTE3Mik7ZnVuY3Rpb24gZyhCKXt2YXIgdyxQO2Z1bmN0aW9uIEYoeixOKXt0cnl7dmFyIEw9''@;'; put 'put ''Qlt6XShOKSxLPUwudmFsdWUsVT1LIGluc3RhbmNlb2YgSTtQcm9taXNlLnJlc29sdmUoVT9LLnY6SykudGhlbihmdW5jdGlvbihXKXtpZihVKXt2YXIgWT0icmV0dXJuIj09PXo/InJldHVybiI6Im5leHQiO2lmKCFLLmt8fFcuZG9uZSlyZXR1cm4gRihZLFcpO1c9QltZXShXKS52YWx1ZX1P''@;'; put 'put ''KEwuZG9uZT8icmV0dXJuIjoibm9ybWFsIixXKX0sZnVuY3Rpb24oVyl7RigidGhyb3ciLFcpfSl9Y2F0Y2goVyl7TygidGhyb3ciLFcpfX1mdW5jdGlvbiBPKHosTil7c3dpdGNoKHope2Nhc2UicmV0dXJuIjp3LnJlc29sdmUoe3ZhbHVlOk4sZG9uZTohMH0pO2JyZWFrO2Nhc2UidGhyb3ci''@;'; put 'put ''OncucmVqZWN0KE4pO2JyZWFrO2RlZmF1bHQ6dy5yZXNvbHZlKHt2YWx1ZTpOLGRvbmU6ITF9KX0odz13Lm5leHQpP0Yody5rZXksdy5hcmcpOlA9bnVsbH10aGlzLl9pbnZva2U9ZnVuY3Rpb24oeixOKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oTCxLKXt2YXIgVT17a2V5OnosYXJn''@;'; put 'put ''Ok4scmVzb2x2ZTpMLHJlamVjdDpLLG5leHQ6bnVsbH07UD9QPVAubmV4dD1VOih3PVA9VSxGKHosTikpfSl9LCJmdW5jdGlvbiIhPXR5cGVvZiBCLnJldHVybiYmKHRoaXMucmV0dXJuPXZvaWQgMCl9Zy5wcm90b3R5cGVbImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLmFzeW5j''@;'; put 'put ''SXRlcmF0b3J8fCJAQGFzeW5jSXRlcmF0b3IiXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxnLnByb3RvdHlwZS5uZXh0PWZ1bmN0aW9uKEIpe3JldHVybiB0aGlzLl9pbnZva2UoIm5leHQiLEIpfSxnLnByb3RvdHlwZS50aHJvdz1mdW5jdGlvbihCKXtyZXR1cm4gdGhpcy5faW52b2tlKCJ0''@;'; put 'put ''aHJvdyIsQil9LGcucHJvdG90eXBlLnJldHVybj1mdW5jdGlvbihCKXtyZXR1cm4gdGhpcy5faW52b2tlKCJyZXR1cm4iLEIpfSx1ZS5leHBvcnRzPWZ1bmN0aW9uIF8oQil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBnKEIuYXBwbHkodGhpcyxhcmd1bWVudHMpKX19LHVlLmV4cG9y''@;'; put 'put ''dHMuX19lc01vZHVsZT0hMCx1ZS5leHBvcnRzLmRlZmF1bHQ9dWUuZXhwb3J0c30sMzE0ODM6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgxOTE1MCksXz15KDc1MjEyKSxnPVR5cGVFcnJvcjt1ZS5leHBvcnRzPWZ1bmN0aW9uKEIpe2lmKEkoQikpcmV0dXJuIEI7dGhyb3cgbmV3''@;'; put 'put ''IGcoXyhCKSsiIGlzIG5vdCBhIGZ1bmN0aW9uIil9fSwyNzY3Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNDM0MDYpLF89U3RyaW5nLGc9VHlwZUVycm9yO3VlLmV4cG9ydHM9ZnVuY3Rpb24oQil7aWYoSShCKSlyZXR1cm4gQjt0aHJvdyBuZXcgZygiQ2FuJ3Qgc2V0ICIrXyhC''@;'; put 'put ''KSsiIGFzIGEgcHJvdG90eXBlIil9fSwzNzczMToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDk3NTQxKS5oYXM7dWUuZXhwb3J0cz1mdW5jdGlvbihfKXtyZXR1cm4gSShfKSxffX0sNzA4MjQ6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg1ODAxMiksXz15KDk3OTUx''@;'; put 'put ''KSxnPXkoNDQ2NDgpLmYsQj1JKCJ1bnNjb3BhYmxlcyIpLHc9QXJyYXkucHJvdG90eXBlO3ZvaWQgMD09PXdbQl0mJmcodyxCLHtjb25maWd1cmFibGU6ITAsdmFsdWU6XyhudWxsKX0pLHVlLmV4cG9ydHM9ZnVuY3Rpb24oUCl7d1tCXVtQXT0hMH19LDYzMzM2Oih1ZSxYLHkpPT57InVzZSBz''@;'; put 'put ''dHJpY3QiO3ZhciBJPXkoNDY4KSxfPVR5cGVFcnJvcjt1ZS5leHBvcnRzPWZ1bmN0aW9uKGcsQil7aWYoSShCLGcpKXJldHVybiBnO3Rocm93IG5ldyBfKCJJbmNvcnJlY3QgaW52b2NhdGlvbiIpfX0sMTEwODoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDMyNjMzKSxfPVN0cmlu''@;'; put 'put ''ZyxnPVR5cGVFcnJvcjt1ZS5leHBvcnRzPWZ1bmN0aW9uKEIpe2lmKEkoQikpcmV0dXJuIEI7dGhyb3cgbmV3IGcoXyhCKSsiIGlzIG5vdCBhbiBvYmplY3QiKX19LDM4ODE6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg3MTcxKTt1ZS5leHBvcnRzPWZ1bmN0aW9uKF8sZyxCKXtm''@;'; put 'put ''b3IodmFyIHc9MCxQPWFyZ3VtZW50cy5sZW5ndGg+Mj9COkkoZyksRj1uZXcgXyhQKTtQPnc7KUZbd109Z1t3KytdO3JldHVybiBGfX0sNzQ4MjQ6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg5MzE2MiksXz15KDc0ODUpLGc9eSg3MTcxKSxCPWZ1bmN0aW9uKHcpe3JldHVybiBm''@;'; put 'put ''dW5jdGlvbihQLEYsTyl7dmFyIHo9SShQKSxOPWcoeik7aWYoMD09PU4pcmV0dXJuIXcmJi0xO3ZhciBLLEw9XyhPLE4pO2lmKHcmJkYhPUYpe2Zvcig7Tj5MOylpZigoSz16W0wrK10pIT1LKXJldHVybiEwfWVsc2UgZm9yKDtOPkw7TCsrKWlmKCh3fHxMIGluIHopJiZ6W0xdPT09RilyZXR1''@;'; put 'put ''cm4gd3x8THx8MDtyZXR1cm4hdyYmLTF9fTt1ZS5leHBvcnRzPXtpbmNsdWRlczpCKCEwKSxpbmRleE9mOkIoITEpfX0sMzkyMDY6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg0NjM4NyksXz15KDY3Mjc3KSxnPVR5cGVFcnJvcixCPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2Ny''@;'; put 'put ''aXB0b3Isdz1JJiYhZnVuY3Rpb24oKXtpZih2b2lkIDAhPT10aGlzKXJldHVybiEwO3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkoW10sImxlbmd0aCIse3dyaXRhYmxlOiExfSkubGVuZ3RoPTF9Y2F0Y2goUCl7cmV0dXJuIFAgaW5zdGFuY2VvZiBUeXBlRXJyb3J9fSgpO3VlLmV4cG9ydHM9''@;'; put 'put ''dz9mdW5jdGlvbihQLEYpe2lmKF8oUCkmJiFCKFAsImxlbmd0aCIpLndyaXRhYmxlKXRocm93IG5ldyBnKCJDYW5ub3Qgc2V0IHJlYWQgb25seSAubGVuZ3RoIik7cmV0dXJuIFAubGVuZ3RoPUZ9OmZ1bmN0aW9uKFAsRil7cmV0dXJuIFAubGVuZ3RoPUZ9fSw3NzYzOToodWUsWCx5KT0+eyJ1''@;'; put 'put ''c2Ugc3RyaWN0Ijt2YXIgST15KDU4NjA3KTt1ZS5leHBvcnRzPUkoW10uc2xpY2UpfSw0MjkyNjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDExMDgpLF89eSg2NjU0Mik7dWUuZXhwb3J0cz1mdW5jdGlvbihnLEIsdyxQKXt0cnl7cmV0dXJuIFA/QihJKHcpWzBdLHdbMV0pOkIo''@;'; put 'put ''dyl9Y2F0Y2goRil7XyhnLCJ0aHJvdyIsRil9fX0sODY2NzU6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg1ODYwNyksXz1JKHt9LnRvU3RyaW5nKSxnPUkoIiIuc2xpY2UpO3VlLmV4cG9ydHM9ZnVuY3Rpb24oQil7cmV0dXJuIGcoXyhCKSw4LC0xKX19LDcxODI0Oih1ZSxYLHkp''@;'; put 'put ''PT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMzg1OTUpLF89eSgxOTE1MCksZz15KDg2Njc1KSx3PXkoNTgwMTIpKCJ0b1N0cmluZ1RhZyIpLFA9T2JqZWN0LEY9IkFyZ3VtZW50cyI9PT1nKGZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50c30oKSk7dWUuZXhwb3J0cz1JP2c6ZnVuY3Rpb24oeil7''@;'; put 'put ''dmFyIE4sTCxLO3JldHVybiB2b2lkIDA9PT16PyJVbmRlZmluZWQiOm51bGw9PT16PyJOdWxsIjoic3RyaW5nIj09dHlwZW9mKEw9ZnVuY3Rpb24oeixOKXt0cnl7cmV0dXJuIHpbTl19Y2F0Y2h7fX0oTj1QKHopLHcpKT9MOkY/ZyhOKToiT2JqZWN0Ij09PShLPWcoTikpJiZfKE4uY2FsbGVl''@;'; put 'put ''KT8iQXJndW1lbnRzIjpLfX0sNDg2Mzk6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgzOGUzKSxfPXkoODgwNzgpLGc9eSg1NDEyMiksQj15KDQ0NjQ4KTt1ZS5leHBvcnRzPWZ1bmN0aW9uKHcsUCxGKXtmb3IodmFyIE89XyhQKSx6PUIuZixOPWcuZixMPTA7TDxPLmxlbmd0aDtM''@;'; put 'put ''Kyspe3ZhciBLPU9bTF07IUkodyxLKSYmKCFGfHwhSShGLEspKSYmeih3LEssTihQLEspKX19fSw4MjgzNDoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDU1NTkyKTt1ZS5leHBvcnRzPSFJKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gXygpe31yZXR1cm4gXy5wcm90b3R5cGUuY29uc3Ry''@;'; put 'put ''dWN0b3I9bnVsbCxPYmplY3QuZ2V0UHJvdG90eXBlT2YobmV3IF8pIT09Xy5wcm90b3R5cGV9KX0sNTg5Nzg6dWU9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz1mdW5jdGlvbihYLHkpe3JldHVybnt2YWx1ZTpYLGRvbmU6eX19fSwzNjY3ODoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIg''@;'; put 'put ''ST15KDQ2Mzg3KSxfPXkoNDQ2NDgpLGc9eSg3Nzc3Myk7dWUuZXhwb3J0cz1JP2Z1bmN0aW9uKEIsdyxQKXtyZXR1cm4gXy5mKEIsdyxnKDEsUCkpfTpmdW5jdGlvbihCLHcsUCl7cmV0dXJuIEJbd109UCxCfX0sNzc3NzM6dWU9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz1mdW5jdGlvbihY''@;'; put 'put ''LHkpe3JldHVybntlbnVtZXJhYmxlOiEoMSZYKSxjb25maWd1cmFibGU6ISgyJlgpLHdyaXRhYmxlOiEoNCZYKSx2YWx1ZTp5fX19LDU4Nzk1Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNDYzODcpLF89eSg0NDY0OCksZz15KDc3NzczKTt1ZS5leHBvcnRzPWZ1bmN0aW9uKEIs''@;'; put 'put ''dyxQKXtJP18uZihCLHcsZygwLFApKTpCW3ddPVB9fSw0NDAzOToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDE2OTgwKSxfPXkoNDQ2NDgpO3VlLmV4cG9ydHM9ZnVuY3Rpb24oZyxCLHcpe3JldHVybiB3LmdldCYmSSh3LmdldCxCLHtnZXR0ZXI6ITB9KSx3LnNldCYmSSh3LnNl''@;'; put 'put ''dCxCLHtzZXR0ZXI6ITB9KSxfLmYoZyxCLHcpfX0sMzEwODM6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgxOTE1MCksXz15KDQ0NjQ4KSxnPXkoMTY5ODApLEI9eSg0ODEwNCk7dWUuZXhwb3J0cz1mdW5jdGlvbih3LFAsRixPKXtPfHwoTz17fSk7dmFyIHo9Ty5lbnVtZXJhYmxl''@;'; put 'put ''LE49dm9pZCAwIT09Ty5uYW1lP08ubmFtZTpQO2lmKEkoRikmJmcoRixOLE8pLE8uZ2xvYmFsKXo/d1tQXT1GOkIoUCxGKTtlbHNle3RyeXtPLnVuc2FmZT93W1BdJiYoej0hMCk6ZGVsZXRlIHdbUF19Y2F0Y2h7fXo/d1tQXT1GOl8uZih3LFAse3ZhbHVlOkYsZW51bWVyYWJsZTohMSxjb25m''@;'; put 'put ''aWd1cmFibGU6IU8ubm9uQ29uZmlndXJhYmxlLHdyaXRhYmxlOiFPLm5vbldyaXRhYmxlfSl9cmV0dXJuIHd9fSwxNDc1MDoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDMxMDgzKTt1ZS5leHBvcnRzPWZ1bmN0aW9uKF8sZyxCKXtmb3IodmFyIHcgaW4gZylJKF8sdyxnW3ddLEIp''@;'; put 'put ''O3JldHVybiBffX0sNDgxMDQ6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgzMzk2MyksXz1PYmplY3QuZGVmaW5lUHJvcGVydHk7dWUuZXhwb3J0cz1mdW5jdGlvbihnLEIpe3RyeXtfKEksZyx7dmFsdWU6Qixjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KX1jYXRjaHtJW2dd''@;'; put 'put ''PUJ9cmV0dXJuIEJ9fSw0MzE5NToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDc1MjEyKSxfPVR5cGVFcnJvcjt1ZS5leHBvcnRzPWZ1bmN0aW9uKGcsQil7aWYoIWRlbGV0ZSBnW0JdKXRocm93IG5ldyBfKCJDYW5ub3QgZGVsZXRlIHByb3BlcnR5ICIrSShCKSsiIG9mICIrSShn''@;'; put 'put ''KSl9fSw0NjM4NzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDU1NTkyKTt1ZS5leHBvcnRzPSFJKGZ1bmN0aW9uKCl7cmV0dXJuIDchPT1PYmplY3QuZGVmaW5lUHJvcGVydHkoe30sMSx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDd9fSlbMV19KX0sNTU5ODg6KHVlLFgseSk9Pnsi''@;'; put 'put ''dXNlIHN0cmljdCI7dmFyIEk9eSgzMzk2MyksXz15KDMyNjMzKSxnPUkuZG9jdW1lbnQsQj1fKGcpJiZfKGcuY3JlYXRlRWxlbWVudCk7dWUuZXhwb3J0cz1mdW5jdGlvbih3KXtyZXR1cm4gQj9nLmNyZWF0ZUVsZW1lbnQodyk6e319fSwzMzE2OnVlPT57InVzZSBzdHJpY3QiO3ZhciBYPVR5''@;'; put 'put ''cGVFcnJvcjt1ZS5leHBvcnRzPWZ1bmN0aW9uKEkpe2lmKEk+OTAwNzE5OTI1NDc0MDk5MSl0aHJvdyBYKCJNYXhpbXVtIGFsbG93ZWQgaW5kZXggZXhjZWVkZWQiKTtyZXR1cm4gSX19LDU4NTQwOnVlPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9WyJjb25zdHJ1Y3RvciIsImhhc093blBy''@;'; put 'put ''b3BlcnR5IiwiaXNQcm90b3R5cGVPZiIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwidG9Mb2NhbGVTdHJpbmciLCJ0b1N0cmluZyIsInZhbHVlT2YiXX0sNDQxMzc6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgyMzU4KTt1ZS5leHBvcnRzPS8oPzppcGFkfGlwaG9uZXxpcG9kKS4q''@;'; put 'put ''YXBwbGV3ZWJraXQvaS50ZXN0KEkpfSwyMTUxMDoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDQ3MDkyKTt1ZS5leHBvcnRzPSJOT0RFIj09PUl9LDIzNTg6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIF89eSgzMzk2MykubmF2aWdhdG9yLGc9XyYmXy51c2VyQWdlbnQ7dWUu''@;'; put 'put ''ZXhwb3J0cz1nP1N0cmluZyhnKToiIn0sNDQwNjY6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEYsTyxJPXkoMzM5NjMpLF89eSgyMzU4KSxnPUkucHJvY2VzcyxCPUkuRGVubyx3PWcmJmcudmVyc2lvbnN8fEImJkIudmVyc2lvbixQPXcmJncudjg7UCYmKE89KEY9UC5zcGxpdCgiLiIp''@;'; put 'put ''KVswXT4wJiZGWzBdPDQ/MTorKEZbMF0rRlsxXSkpLCFPJiZfJiYoIShGPV8ubWF0Y2goL0VkZ2VcLyhcZCspLykpfHxGWzFdPj03NCkmJihGPV8ubWF0Y2goL0Nocm9tZVwvKFxkKykvKSkmJihPPStGWzFdKSx1ZS5leHBvcnRzPU99LDQ3MDkyOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3Zh''@;'; put 'put ''ciBJPXkoMzM5NjMpLF89eSgyMzU4KSxnPXkoODY2NzUpLEI9ZnVuY3Rpb24odyl7cmV0dXJuIF8uc2xpY2UoMCx3Lmxlbmd0aCk9PT13fTt1ZS5leHBvcnRzPUIoIkJ1bi8iKT8iQlVOIjpCKCJDbG91ZGZsYXJlLVdvcmtlcnMiKT8iQ0xPVURGTEFSRSI6QigiRGVuby8iKT8iREVOTyI6Qigi''@;'; put 'put ''Tm9kZS5qcy8iKT8iTk9ERSI6SS5CdW4mJiJzdHJpbmciPT10eXBlb2YgQnVuLnZlcnNpb24/IkJVTiI6SS5EZW5vJiYib2JqZWN0Ij09dHlwZW9mIERlbm8udmVyc2lvbj8iREVOTyI6InByb2Nlc3MiPT09ZyhJLnByb2Nlc3MpPyJOT0RFIjpJLndpbmRvdyYmSS5kb2N1bWVudD8iQlJPV1NF''@;'; put 'put ''UiI6IlJFU1QifSw5ODg1NDoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDU4NjA3KSxfPUVycm9yLGc9SSgiIi5yZXBsYWNlKSxCPVN0cmluZyhuZXcgXygienhjYXNkIikuc3RhY2spLHc9L1xuXHMqYXQgW146XSo6W15cbl0qLyxQPXcudGVzdChCKTt1ZS5leHBvcnRzPWZ1bmN0''@;'; put 'put ''aW9uKEYsTyl7aWYoUCYmInN0cmluZyI9PXR5cGVvZiBGJiYhXy5wcmVwYXJlU3RhY2tUcmFjZSlmb3IoO08tLTspRj1nKEYsdywiIik7cmV0dXJuIEZ9fSwyMjMwNDoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDM2Njc4KSxfPXkoOTg4NTQpLGc9eSg3NDk2NCksQj1FcnJvci5j''@;'; put 'put ''YXB0dXJlU3RhY2tUcmFjZTt1ZS5leHBvcnRzPWZ1bmN0aW9uKHcsUCxGLE8pe2cmJihCP0IodyxQKTpJKHcsInN0YWNrIixfKEYsTykpKX19LDc0OTY0Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNTU1OTIpLF89eSg3Nzc3Myk7dWUuZXhwb3J0cz0hSShmdW5jdGlvbigpe3Zh''@;'; put 'put ''ciBnPW5ldyBFcnJvcigiYSIpO3JldHVybiEoInN0YWNrImluIGcpfHwoT2JqZWN0LmRlZmluZVByb3BlcnR5KGcsInN0YWNrIixfKDEsNykpLDchPT1nLnN0YWNrKX0pfSwyODM2NzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDMzOTYzKSxfPXkoNTQxMjIpLmYsZz15KDM2Njc4''@;'; put 'put ''KSxCPXkoMzEwODMpLHc9eSg0ODEwNCksUD15KDQ4NjM5KSxGPXkoMTYzNjMpO3VlLmV4cG9ydHM9ZnVuY3Rpb24oTyx6KXt2YXIgVyxZLHEsZWUsSixOPU8udGFyZ2V0LEw9Ty5nbG9iYWwsSz1PLnN0YXQ7aWYoVz1MP0k6Sz9JW05dfHx3KE4se30pOklbTl0mJklbTl0ucHJvdG90eXBlKWZv''@;'; put 'put ''cihZIGluIHope2lmKGVlPXpbWV0scT1PLmRvbnRDYWxsR2V0U2V0PyhKPV8oVyxZKSkmJkoudmFsdWU6V1tZXSwhRihMP1k6TisoSz8iLiI6IiMiKStZLE8uZm9yY2VkKSYmdm9pZCAwIT09cSl7aWYodHlwZW9mIGVlPT10eXBlb2YgcSljb250aW51ZTtQKGVlLHEpfShPLnNoYW18fHEmJnEu''@;'; put 'put ''c2hhbSkmJmcoZWUsInNoYW0iLCEwKSxCKFcsWSxlZSxPKX19fSw1NTU5Mjp1ZT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPWZ1bmN0aW9uKFgpe3RyeXtyZXR1cm4hIVgoKX1jYXRjaHtyZXR1cm4hMH19fSw0MDIyMDoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDc1MTU3KSxf''@;'; put 'put ''PUZ1bmN0aW9uLnByb3RvdHlwZSxnPV8uYXBwbHksQj1fLmNhbGw7dWUuZXhwb3J0cz0ib2JqZWN0Ij09dHlwZW9mIFJlZmxlY3QmJlJlZmxlY3QuYXBwbHl8fChJP0IuYmluZChnKTpmdW5jdGlvbigpe3JldHVybiBCLmFwcGx5KGcsYXJndW1lbnRzKX0pfSw3ODgxMToodWUsWCx5KT0+eyJ1''@;'; put 'put ''c2Ugc3RyaWN0Ijt2YXIgST15KDM2MjkpLF89eSgzMTQ4MyksZz15KDc1MTU3KSxCPUkoSS5iaW5kKTt1ZS5leHBvcnRzPWZ1bmN0aW9uKHcsUCl7cmV0dXJuIF8odyksdm9pZCAwPT09UD93Omc/Qih3LFApOmZ1bmN0aW9uKCl7cmV0dXJuIHcuYXBwbHkoUCxhcmd1bWVudHMpfX19LDc1MTU3''@;'; put 'put ''Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNTU1OTIpO3VlLmV4cG9ydHM9IUkoZnVuY3Rpb24oKXt2YXIgXz1mdW5jdGlvbigpe30uYmluZCgpO3JldHVybiJmdW5jdGlvbiIhPXR5cGVvZiBffHxfLmhhc093blByb3BlcnR5KCJwcm90b3R5cGUiKX0pfSw0NjkyNjoodWUsWCx5''@;'; put 'put ''KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDc1MTU3KSxfPUZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsO3VlLmV4cG9ydHM9ST9fLmJpbmQoXyk6ZnVuY3Rpb24oKXtyZXR1cm4gXy5hcHBseShfLGFyZ3VtZW50cyl9fSw4OTk4MToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDQ2Mzg3''@;'; put 'put ''KSxfPXkoMzhlMyksZz1GdW5jdGlvbi5wcm90b3R5cGUsQj1JJiZPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLHc9XyhnLCJuYW1lIiksUD13JiYic29tZXRoaW5nIj09PWZ1bmN0aW9uKCl7fS5uYW1lLEY9dyYmKCFJfHxJJiZCKGcsIm5hbWUiKS5jb25maWd1cmFibGUpO3VlLmV4''@;'; put 'put ''cG9ydHM9e0VYSVNUUzp3LFBST1BFUjpQLENPTkZJR1VSQUJMRTpGfX0sNjkyMjc6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg1ODYwNyksXz15KDMxNDgzKTt1ZS5leHBvcnRzPWZ1bmN0aW9uKGcsQix3KXt0cnl7cmV0dXJuIEkoXyhPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNj''@;'; put 'put ''cmlwdG9yKGcsQilbd10pKX1jYXRjaHt9fX0sMzYyOToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDg2Njc1KSxfPXkoNTg2MDcpO3VlLmV4cG9ydHM9ZnVuY3Rpb24oZyl7aWYoIkZ1bmN0aW9uIj09PUkoZykpcmV0dXJuIF8oZyl9fSw1ODYwNzoodWUsWCx5KT0+eyJ1c2Ugc3Ry''@;'; put 'put ''aWN0Ijt2YXIgST15KDc1MTU3KSxfPUZ1bmN0aW9uLnByb3RvdHlwZSxnPV8uY2FsbCxCPUkmJl8uYmluZC5iaW5kKGcsZyk7dWUuZXhwb3J0cz1JP0I6ZnVuY3Rpb24odyl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGcuYXBwbHkodyxhcmd1bWVudHMpfX19LDY2NTAzOih1ZSxYLHkpPT57''@;'; put 'put ''InVzZSBzdHJpY3QiO3ZhciBJPXkoMzM5NjMpO3VlLmV4cG9ydHM9ZnVuY3Rpb24oXyxnKXt2YXIgQj1JW19dLHc9QiYmQi5wcm90b3R5cGU7cmV0dXJuIHcmJndbZ119fSwxMjIwMjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDMzOTYzKSxfPXkoMTkxNTApO3VlLmV4cG9ydHM9''@;'; put 'put ''ZnVuY3Rpb24oQix3KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyP2Z1bmN0aW9uKEIpe3JldHVybiBfKEIpP0I6dm9pZCAwfShJW0JdKTpJW0JdJiZJW0JdW3ddfX0sNzU0MjQ6dWU9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz1mdW5jdGlvbihYKXtyZXR1cm57aXRlcmF0b3I6WCxuZXh0''@;'; put 'put ''OlgubmV4dCxkb25lOiExfX19LDYzNjI3Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNDY5MjYpLF89eSgxMTA4KSxnPXkoNzU0MjQpLEI9eSgzNjkzMik7dWUuZXhwb3J0cz1mdW5jdGlvbih3LFApeyghUHx8InN0cmluZyIhPXR5cGVvZiB3KSYmXyh3KTt2YXIgRj1CKHcpO3Jl''@;'; put 'put ''dHVybiBnKF8odm9pZCAwIT09Rj9JKEYsdyk6dykpfX0sMzY5MzI6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg3MTgyNCksXz15KDg2MTE1KSxnPXkoOTQ0NjgpLEI9eSgxOTI1OCksUD15KDU4MDEyKSgiaXRlcmF0b3IiKTt1ZS5leHBvcnRzPWZ1bmN0aW9uKEYpe2lmKCFnKEYp''@;'; put 'put ''KXJldHVybiBfKEYsUCl8fF8oRiwiQEBpdGVyYXRvciIpfHxCW0koRildfX0sNDM1ODQ6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg0NjkyNiksXz15KDMxNDgzKSxnPXkoMTEwOCksQj15KDc1MjEyKSx3PXkoMzY5MzIpLFA9VHlwZUVycm9yO3VlLmV4cG9ydHM9ZnVuY3Rpb24o''@;'; put 'put ''RixPKXt2YXIgej1hcmd1bWVudHMubGVuZ3RoPDI/dyhGKTpPO2lmKF8oeikpcmV0dXJuIGcoSSh6LEYpKTt0aHJvdyBuZXcgUChCKEYpKyIgaXMgbm90IGl0ZXJhYmxlIil9fSw4NDUyNDoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDU4NjA3KSxfPXkoNjcyNzcpLGc9eSgxOTE1''@;'; put 'put ''MCksQj15KDg2Njc1KSx3PXkoNjgzMzIpLFA9SShbXS5wdXNoKTt1ZS5leHBvcnRzPWZ1bmN0aW9uKEYpe2lmKGcoRikpcmV0dXJuIEY7aWYoXyhGKSl7Zm9yKHZhciBPPUYubGVuZ3RoLHo9W10sTj0wO048TztOKyspe3ZhciBMPUZbTl07InN0cmluZyI9PXR5cGVvZiBMP1AoeixMKTooIm51''@;'; put 'put ''bWJlciI9PXR5cGVvZiBMfHwiTnVtYmVyIj09PUIoTCl8fCJTdHJpbmciPT09QihMKSkmJlAoeix3KEwpKX12YXIgSz16Lmxlbmd0aCxVPSEwO3JldHVybiBmdW5jdGlvbihXLFkpe2lmKFUpcmV0dXJuIFU9ITEsWTtpZihfKHRoaXMpKXJldHVybiBZO2Zvcih2YXIgcT0wO3E8SztxKyspaWYo''@;'; put 'put ''eltxXT09PVcpcmV0dXJuIFl9fX19LDg2MTE1Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMzE0ODMpLF89eSg5NDQ2OCk7dWUuZXhwb3J0cz1mdW5jdGlvbihnLEIpe3ZhciB3PWdbQl07cmV0dXJuIF8odyk/dm9pZCAwOkkodyl9fSw0MzYzMjoodWUsWCx5KT0+eyJ1c2Ugc3Ry''@;'; put 'put ''aWN0Ijt2YXIgST15KDMxNDgzKSxfPXkoMTEwOCksZz15KDQ2OTI2KSxCPXkoNjQ1NTApLHc9eSg3NTQyNCksUD0iSW52YWxpZCBzaXplIixGPVJhbmdlRXJyb3IsTz1UeXBlRXJyb3Isej1NYXRoLm1heCxOPWZ1bmN0aW9uKEwsSyl7dGhpcy5zZXQ9TCx0aGlzLnNpemU9eihLLDApLHRoaXMu''@;'; put 'put ''aGFzPUkoTC5oYXMpLHRoaXMua2V5cz1JKEwua2V5cyl9O04ucHJvdG90eXBlPXtnZXRJdGVyYXRvcjpmdW5jdGlvbigpe3JldHVybiB3KF8oZyh0aGlzLmtleXMsdGhpcy5zZXQpKSl9LGluY2x1ZGVzOmZ1bmN0aW9uKEwpe3JldHVybiBnKHRoaXMuaGFzLHRoaXMuc2V0LEwpfX0sdWUuZXhw''@;'; put 'put ''b3J0cz1mdW5jdGlvbihMKXtfKEwpO3ZhciBLPStMLnNpemU7aWYoSyE9Syl0aHJvdyBuZXcgTyhQKTt2YXIgVT1CKEspO2lmKFU8MCl0aHJvdyBuZXcgRihQKTtyZXR1cm4gbmV3IE4oTCxVKX19LDk2MzM5Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNTg2MDcpLF89eSgzMTk1''@;'; put 'put ''MCksZz1NYXRoLmZsb29yLEI9SSgiIi5jaGFyQXQpLHc9SSgiIi5yZXBsYWNlKSxQPUkoIiIuc2xpY2UpLEY9L1wkKFskJidgXXxcZHsxLDJ9fDxbXj5dKj4pL2csTz0vXCQoWyQmJ2BdfFxkezEsMn0pL2c7dWUuZXhwb3J0cz1mdW5jdGlvbih6LE4sTCxLLFUsVyl7dmFyIFk9TCt6Lmxlbmd0''@;'; put 'put ''aCxxPUsubGVuZ3RoLGVlPU87cmV0dXJuIHZvaWQgMCE9PVUmJihVPV8oVSksZWU9RiksdyhXLGVlLGZ1bmN0aW9uKEosbmUpe3ZhciBpZTtzd2l0Y2goQihuZSwwKSl7Y2FzZSIkIjpyZXR1cm4iJCI7Y2FzZSImIjpyZXR1cm4gejtjYXNlImAiOnJldHVybiBQKE4sMCxMKTtjYXNlIiciOnJl''@;'; put 'put ''dHVybiBQKE4sWSk7Y2FzZSI8IjppZT1VW1AobmUsMSwtMSldO2JyZWFrO2RlZmF1bHQ6dmFyIGxlPStuZTtpZigwPT09bGUpcmV0dXJuIEo7aWYobGU+cSl7dmFyIG1lPWcobGUvMTApO3JldHVybiAwPT09bWU/SjptZTw9cT92b2lkIDA9PT1LW21lLTFdP0IobmUsMSk6S1ttZS0xXStCKG5l''@;'; put 'put ''LDEpOkp9aWU9S1tsZS0xXX1yZXR1cm4gdm9pZCAwPT09aWU/IiI6aWV9KX19LDMzOTYzOmZ1bmN0aW9uKHVlKXsidXNlIHN0cmljdCI7dmFyIFg9ZnVuY3Rpb24oeSl7cmV0dXJuIHkmJnkuTWF0aD09PU1hdGgmJnl9O3VlLmV4cG9ydHM9WCgib2JqZWN0Ij09dHlwZW9mIGdsb2JhbFRoaXMm''@;'; put 'put ''Jmdsb2JhbFRoaXMpfHxYKCJvYmplY3QiPT10eXBlb2Ygd2luZG93JiZ3aW5kb3cpfHxYKCJvYmplY3QiPT10eXBlb2Ygc2VsZiYmc2VsZil8fFgoIm9iamVjdCI9PXR5cGVvZiBnbG9iYWwmJmdsb2JhbCl8fFgoIm9iamVjdCI9PXR5cGVvZiB0aGlzJiZ0aGlzKXx8ZnVuY3Rpb24oKXtyZXR1''@;'; put 'put ''cm4gdGhpc30oKXx8RnVuY3Rpb24oInJldHVybiB0aGlzIikoKX0sMzhlMzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDU4NjA3KSxfPXkoMzE5NTApLGc9SSh7fS5oYXNPd25Qcm9wZXJ0eSk7dWUuZXhwb3J0cz1PYmplY3QuaGFzT3dufHxmdW5jdGlvbih3LFApe3JldHVybiBn''@;'; put 'put ''KF8odyksUCl9fSwzNDY3MDp1ZT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPXt9fSw4NzM3MjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDEyMjAyKTt1ZS5leHBvcnRzPUkoImRvY3VtZW50IiwiZG9jdW1lbnRFbGVtZW50Iil9LDU3MjQ0Oih1ZSxYLHkpPT57InVzZSBzdHJp''@;'; put 'put ''Y3QiO3ZhciBJPXkoNDYzODcpLF89eSg1NTU5MiksZz15KDU1OTg4KTt1ZS5leHBvcnRzPSFJJiYhXyhmdW5jdGlvbigpe3JldHVybiA3IT09T2JqZWN0LmRlZmluZVByb3BlcnR5KGcoImRpdiIpLCJhIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDd9fSkuYX0pfSw1NTg6KHVlLFgseSk9Pnsi''@;'; put 'put ''dXNlIHN0cmljdCI7dmFyIEk9eSg1ODYwNyksXz15KDU1NTkyKSxnPXkoODY2NzUpLEI9T2JqZWN0LHc9SSgiIi5zcGxpdCk7dWUuZXhwb3J0cz1fKGZ1bmN0aW9uKCl7cmV0dXJuIUIoInoiKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKX0pP2Z1bmN0aW9uKFApe3JldHVybiJTdHJpbmciPT09''@;'; put 'put ''ZyhQKT93KFAsIiIpOkIoUCl9OkJ9LDE3Mjk2Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMTkxNTApLF89eSgzMjYzMyksZz15KDIxNjEyKTt1ZS5leHBvcnRzPWZ1bmN0aW9uKEIsdyxQKXt2YXIgRixPO3JldHVybiBnJiZJKEY9dy5jb25zdHJ1Y3RvcikmJkYhPT1QJiZfKE89''@;'; put 'put ''Ri5wcm90b3R5cGUpJiZPIT09UC5wcm90b3R5cGUmJmcoQixPKSxCfX0sMjY5MzE6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg1ODYwNyksXz15KDE5MTUwKSxnPXkoNDgzNTYpLEI9SShGdW5jdGlvbi50b1N0cmluZyk7XyhnLmluc3BlY3RTb3VyY2UpfHwoZy5pbnNwZWN0U291''@;'; put 'put ''cmNlPWZ1bmN0aW9uKHcpe3JldHVybiBCKHcpfSksdWUuZXhwb3J0cz1nLmluc3BlY3RTb3VyY2V9LDY0ODU1Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMzI2MzMpLF89eSgzNjY3OCk7dWUuZXhwb3J0cz1mdW5jdGlvbihnLEIpe0koQikmJiJjYXVzZSJpbiBCJiZfKGcsImNh''@;'; put 'put ''dXNlIixCLmNhdXNlKX19LDQ3MzY6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEssVSxXLEk9eSg0ODY5MSksXz15KDMzOTYzKSxnPXkoMzI2MzMpLEI9eSgzNjY3OCksdz15KDM4ZTMpLFA9eSg0ODM1NiksRj15KDc5NjYyKSxPPXkoMzQ2NzApLHo9Ik9iamVjdCBhbHJlYWR5IGluaXRp''@;'; put 'put ''YWxpemVkIixOPV8uVHlwZUVycm9yO2lmKEl8fFAuc3RhdGUpe3ZhciBlZT1QLnN0YXRlfHwoUC5zdGF0ZT1uZXcoMCxfLldlYWtNYXApKTtlZS5nZXQ9ZWUuZ2V0LGVlLmhhcz1lZS5oYXMsZWUuc2V0PWVlLnNldCxLPWZ1bmN0aW9uKG5lLGllKXtpZihlZS5oYXMobmUpKXRocm93IG5ldyBO''@;'; put 'put ''KHopO3JldHVybiBpZS5mYWNhZGU9bmUsZWUuc2V0KG5lLGllKSxpZX0sVT1mdW5jdGlvbihuZSl7cmV0dXJuIGVlLmdldChuZSl8fHt9fSxXPWZ1bmN0aW9uKG5lKXtyZXR1cm4gZWUuaGFzKG5lKX19ZWxzZXt2YXIgSj1GKCJzdGF0ZSIpO09bSl09ITAsSz1mdW5jdGlvbihuZSxpZSl7aWYo''@;'; put 'put ''dyhuZSxKKSl0aHJvdyBuZXcgTih6KTtyZXR1cm4gaWUuZmFjYWRlPW5lLEIobmUsSixpZSksaWV9LFU9ZnVuY3Rpb24obmUpe3JldHVybiB3KG5lLEopP25lW0pdOnt9fSxXPWZ1bmN0aW9uKG5lKXtyZXR1cm4gdyhuZSxKKX19dWUuZXhwb3J0cz17c2V0OkssZ2V0OlUsaGFzOlcsZW5mb3Jj''@;'; put 'put ''ZTpmdW5jdGlvbihuZSl7cmV0dXJuIFcobmUpP1UobmUpOksobmUse30pfSxnZXR0ZXJGb3I6ZnVuY3Rpb24obmUpe3JldHVybiBmdW5jdGlvbihpZSl7dmFyIGxlO2lmKCFnKGllKXx8KGxlPVUoaWUpKS50eXBlIT09bmUpdGhyb3cgbmV3IE4oIkluY29tcGF0aWJsZSByZWNlaXZlciwgIitu''@;'; put 'put ''ZSsiIHJlcXVpcmVkIik7cmV0dXJuIGxlfX19fSw2Njc5MjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDU4MDEyKSxfPXkoMTkyNTgpLGc9SSgiaXRlcmF0b3IiKSxCPUFycmF5LnByb3RvdHlwZTt1ZS5leHBvcnRzPWZ1bmN0aW9uKHcpe3JldHVybiB2b2lkIDAhPT13JiYoXy5B''@;'; put 'put ''cnJheT09PXd8fEJbZ109PT13KX19LDY3Mjc3Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoODY2NzUpO3VlLmV4cG9ydHM9QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24oZyl7cmV0dXJuIkFycmF5Ij09PUkoZyl9fSwxOTE1MDp1ZT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgWD0ib2JqZWN0''@;'; put 'put ''Ij09dHlwZW9mIGRvY3VtZW50JiZkb2N1bWVudC5hbGw7dWUuZXhwb3J0cz10eXBlb2YgWD4idSImJnZvaWQgMCE9PVg/ZnVuY3Rpb24oeSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHl8fHk9PT1YfTpmdW5jdGlvbih5KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgeX19LDE2MzYzOih1''@;'; put 'put ''ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNTU1OTIpLF89eSgxOTE1MCksZz0vI3xcLnByb3RvdHlwZVwuLyxCPWZ1bmN0aW9uKHosTil7dmFyIEw9UFt3KHopXTtyZXR1cm4gTD09PU98fEwhPT1GJiYoXyhOKT9JKE4pOiEhTil9LHc9Qi5ub3JtYWxpemU9ZnVuY3Rpb24oeil7cmV0''@;'; put 'put ''dXJuIFN0cmluZyh6KS5yZXBsYWNlKGcsIi4iKS50b0xvd2VyQ2FzZSgpfSxQPUIuZGF0YT17fSxGPUIuTkFUSVZFPSJOIixPPUIuUE9MWUZJTEw9IlAiO3VlLmV4cG9ydHM9Qn0sOTQ0Njg6dWU9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz1mdW5jdGlvbihYKXtyZXR1cm4gbnVsbD09WH19''@;'; put 'put ''LDMyNjMzOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMTkxNTApO3VlLmV4cG9ydHM9ZnVuY3Rpb24oXyl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBfP251bGwhPT1fOkkoXyl9fSw0MzQwNjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDMyNjMzKTt1ZS5leHBvcnRz''@;'; put 'put ''PWZ1bmN0aW9uKF8pe3JldHVybiBJKF8pfHxudWxsPT09X319LDg4Nzg4OnVlPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9ITF9LDg4ODY3Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMzI2MzMpLF89eSg4NjY3NSksQj15KDU4MDEyKSgibWF0Y2giKTt1ZS5leHBvcnRzPWZ1''@;'; put 'put ''bmN0aW9uKHcpe3ZhciBQO3JldHVybiBJKHcpJiYodm9pZCAwIT09KFA9d1tCXSk/ISFQOiJSZWdFeHAiPT09Xyh3KSl9fSw5Mjk5ODoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDEyMjAyKSxfPXkoMTkxNTApLGc9eSg0NjgpLEI9eSg2Njk5NSksdz1PYmplY3Q7dWUuZXhwb3J0''@;'; put 'put ''cz1CP2Z1bmN0aW9uKFApe3JldHVybiJzeW1ib2wiPT10eXBlb2YgUH06ZnVuY3Rpb24oUCl7dmFyIEY9SSgiU3ltYm9sIik7cmV0dXJuIF8oRikmJmcoRi5wcm90b3R5cGUsdyhQKSl9fSwxMTM4Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNDY5MjYpO3VlLmV4cG9ydHM9ZnVu''@;'; put 'put ''Y3Rpb24oXyxnLEIpe2Zvcih2YXIgRixPLHc9Qj9fOl8uaXRlcmF0b3IsUD1fLm5leHQ7IShGPUkoUCx3KSkuZG9uZTspaWYodm9pZCAwIT09KE89ZyhGLnZhbHVlKSkpcmV0dXJuIE99fSwzMDc4NzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDc4ODExKSxfPXkoNDY5MjYpLGc9''@;'; put 'put ''eSgxMTA4KSxCPXkoNzUyMTIpLHc9eSg2Njc5MiksUD15KDcxNzEpLEY9eSg0NjgpLE89eSg0MzU4NCksej15KDM2OTMyKSxOPXkoNjY1NDIpLEw9VHlwZUVycm9yLEs9ZnVuY3Rpb24oVyxZKXt0aGlzLnN0b3BwZWQ9Vyx0aGlzLnJlc3VsdD1ZfSxVPUsucHJvdG90eXBlO3VlLmV4cG9ydHM9''@;'; put 'put ''ZnVuY3Rpb24oVyxZLHEpe3ZhciBfZSxUZSxTZSxqZSxWLHAsYixKPSEoIXF8fCFxLkFTX0VOVFJJRVMpLG5lPSEoIXF8fCFxLklTX1JFQ09SRCksaWU9ISghcXx8IXEuSVNfSVRFUkFUT1IpLGxlPSEoIXF8fCFxLklOVEVSUlVQVEVEKSxtZT1JKFkscSYmcS50aGF0KSx4PWZ1bmN0aW9uKFQp''@;'; put 'put ''e3JldHVybiBfZSYmTihfZSwibm9ybWFsIixUKSxuZXcgSyghMCxUKX0sQz1mdW5jdGlvbihUKXtyZXR1cm4gSj8oZyhUKSxsZT9tZShUWzBdLFRbMV0seCk6bWUoVFswXSxUWzFdKSk6bGU/bWUoVCx4KTptZShUKX07aWYobmUpX2U9Vy5pdGVyYXRvcjtlbHNlIGlmKGllKV9lPVc7ZWxzZXtp''@;'; put 'put ''ZighKFRlPXooVykpKXRocm93IG5ldyBMKEIoVykrIiBpcyBub3QgaXRlcmFibGUiKTtpZih3KFRlKSl7Zm9yKFNlPTAsamU9UChXKTtqZT5TZTtTZSsrKWlmKChWPUMoV1tTZV0pKSYmRihVLFYpKXJldHVybiBWO3JldHVybiBuZXcgSyghMSl9X2U9TyhXLFRlKX1mb3IocD1uZT9XLm5leHQ6''@;'; put 'put ''X2UubmV4dDshKGI9XyhwLF9lKSkuZG9uZTspe3RyeXtWPUMoYi52YWx1ZSl9Y2F0Y2goVCl7TihfZSwidGhyb3ciLFQpfWlmKCJvYmplY3QiPT10eXBlb2YgViYmViYmRihVLFYpKXJldHVybiBWfXJldHVybiBuZXcgSyghMSl9fSw2NjU0MjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIg''@;'; put 'put ''ST15KDQ2OTI2KSxfPXkoMTEwOCksZz15KDg2MTE1KTt1ZS5leHBvcnRzPWZ1bmN0aW9uKEIsdyxQKXt2YXIgRixPO18oQik7dHJ5e2lmKCEoRj1nKEIsInJldHVybiIpKSl7aWYoInRocm93Ij09PXcpdGhyb3cgUDtyZXR1cm4gUH1GPUkoRixCKX1jYXRjaCh6KXtPPSEwLEY9en1pZigidGhy''@;'; put 'put ''b3ciPT09dyl0aHJvdyBQO2lmKE8pdGhyb3cgRjtyZXR1cm4gXyhGKSxQfX0sNjk5MTc6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg0NjkyNiksXz15KDk3OTUxKSxnPXkoMzY2NzgpLEI9eSgxNDc1MCksdz15KDU4MDEyKSxQPXkoNDczNiksRj15KDg2MTE1KSxPPXkoNzg5Njgp''@;'; put 'put ''Lkl0ZXJhdG9yUHJvdG90eXBlLHo9eSg1ODk3OCksTj15KDY2NTQyKSxMPXcoInRvU3RyaW5nVGFnIiksSz0iSXRlcmF0b3JIZWxwZXIiLFU9IldyYXBGb3JWYWxpZEl0ZXJhdG9yIixXPVAuc2V0LFk9ZnVuY3Rpb24oSil7dmFyIG5lPVAuZ2V0dGVyRm9yKEo/VTpLKTtyZXR1cm4gQihfKE8p''@;'; put 'put ''LHtuZXh0OmZ1bmN0aW9uKCl7dmFyIGxlPW5lKHRoaXMpO2lmKEopcmV0dXJuIGxlLm5leHRIYW5kbGVyKCk7aWYobGUuZG9uZSlyZXR1cm4geih2b2lkIDAsITApO3RyeXt2YXIgbWU9bGUubmV4dEhhbmRsZXIoKTtyZXR1cm4gbGUucmV0dXJuSGFuZGxlclJlc3VsdD9tZTp6KG1lLGxlLmRv''@;'; put 'put ''bmUpfWNhdGNoKF9lKXt0aHJvdyBsZS5kb25lPSEwLF9lfX0scmV0dXJuOmZ1bmN0aW9uKCl7dmFyIGllPW5lKHRoaXMpLGxlPWllLml0ZXJhdG9yO2lmKGllLmRvbmU9ITAsSil7dmFyIG1lPUYobGUsInJldHVybiIpO3JldHVybiBtZT9JKG1lLGxlKTp6KHZvaWQgMCwhMCl9aWYoaWUuaW5u''@;'; put 'put ''ZXIpdHJ5e04oaWUuaW5uZXIuaXRlcmF0b3IsIm5vcm1hbCIpfWNhdGNoKF9lKXtyZXR1cm4gTihsZSwidGhyb3ciLF9lKX1yZXR1cm4gbGUmJk4obGUsIm5vcm1hbCIpLHoodm9pZCAwLCEwKX19KX0scT1ZKCEwKSxlZT1ZKCExKTtnKGVlLEwsIkl0ZXJhdG9yIEhlbHBlciIpLHVlLmV4cG9y''@;'; put 'put ''dHM9ZnVuY3Rpb24oSixuZSxpZSl7dmFyIGxlPWZ1bmN0aW9uKF9lLFRlKXtUZT8oVGUuaXRlcmF0b3I9X2UuaXRlcmF0b3IsVGUubmV4dD1fZS5uZXh0KTpUZT1fZSxUZS50eXBlPW5lP1U6SyxUZS5yZXR1cm5IYW5kbGVyUmVzdWx0PSEhaWUsVGUubmV4dEhhbmRsZXI9SixUZS5jb3VudGVy''@;'; put 'put ''PTAsVGUuZG9uZT0hMSxXKHRoaXMsVGUpfTtyZXR1cm4gbGUucHJvdG90eXBlPW5lP3E6ZWUsbGV9fSw0MTI1MjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDMzOTYzKTt1ZS5leHBvcnRzPWZ1bmN0aW9uKF8sZyl7dmFyIEI9SS5JdGVyYXRvcix3PUImJkIucHJvdG90eXBlLFA9''@;'; put 'put ''dyYmd1tfXSxGPSExO2lmKFApdHJ5e1AuY2FsbCh7bmV4dDpmdW5jdGlvbigpe3JldHVybntkb25lOiEwfX0scmV0dXJuOmZ1bmN0aW9uKCl7Rj0hMH19LC0xKX1jYXRjaChPKXtPIGluc3RhbmNlb2YgZ3x8KEY9ITEpfWlmKCFGKXJldHVybiBQfX0sNzg5Njg6KHVlLFgseSk9PnsidXNlIHN0''@;'; put 'put ''cmljdCI7dmFyIEwsSyxVLEk9eSg1NTU5MiksXz15KDE5MTUwKSxnPXkoMzI2MzMpLEI9eSg5Nzk1MSksdz15KDI2NDAwKSxQPXkoMzEwODMpLEY9eSg1ODAxMiksTz15KDg4Nzg4KSx6PUYoIml0ZXJhdG9yIiksTj0hMTtbXS5rZXlzJiYoIm5leHQiaW4oVT1bXS5rZXlzKCkpPyhLPXcodyhV''@;'; put 'put ''KSkpIT09T2JqZWN0LnByb3RvdHlwZSYmKEw9Syk6Tj0hMCksIWcoTCl8fEkoZnVuY3Rpb24oKXt2YXIgWT17fTtyZXR1cm4gTFt6XS5jYWxsKFkpIT09WX0pP0w9e306TyYmKEw9QihMKSksXyhMW3pdKXx8UChMLHosZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLHVlLmV4cG9ydHM9e0l0ZXJh''@;'; put 'put ''dG9yUHJvdG90eXBlOkwsQlVHR1lfU0FGQVJJX0lURVJBVE9SUzpOfX0sMTkyNTg6dWU9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz17fX0sNzE3MToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDk0MjM3KTt1ZS5leHBvcnRzPWZ1bmN0aW9uKF8pe3JldHVybiBJKF8ubGVuZ3Ro''@;'; put 'put ''KX19LDE2OTgwOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNTg2MDcpLF89eSg1NTU5MiksZz15KDE5MTUwKSxCPXkoMzhlMyksdz15KDQ2Mzg3KSxQPXkoODk5ODEpLkNPTkZJR1VSQUJMRSxGPXkoMjY5MzEpLE89eSg0NzM2KSx6PU8uZW5mb3JjZSxOPU8uZ2V0LEw9U3RyaW5n''@;'; put 'put ''LEs9T2JqZWN0LmRlZmluZVByb3BlcnR5LFU9SSgiIi5zbGljZSksVz1JKCIiLnJlcGxhY2UpLFk9SShbXS5qb2luKSxxPXcmJiFfKGZ1bmN0aW9uKCl7cmV0dXJuIDghPT1LKGZ1bmN0aW9uKCl7fSwibGVuZ3RoIix7dmFsdWU6OH0pLmxlbmd0aH0pLGVlPVN0cmluZyhTdHJpbmcpLnNwbGl0''@;'; put 'put ''KCJTdHJpbmciKSxKPXVlLmV4cG9ydHM9ZnVuY3Rpb24obmUsaWUsbGUpeyJTeW1ib2woIj09PVUoTChpZSksMCw3KSYmKGllPSJbIitXKEwoaWUpLC9eU3ltYm9sXCgoW14pXSopXCkuKiQvLCIkMSIpKyJdIiksbGUmJmxlLmdldHRlciYmKGllPSJnZXQgIitpZSksbGUmJmxlLnNldHRlciYm''@;'; put 'put ''KGllPSJzZXQgIitpZSksKCFCKG5lLCJuYW1lIil8fFAmJm5lLm5hbWUhPT1pZSkmJih3P0sobmUsIm5hbWUiLHt2YWx1ZTppZSxjb25maWd1cmFibGU6ITB9KTpuZS5uYW1lPWllKSxxJiZsZSYmQihsZSwiYXJpdHkiKSYmbmUubGVuZ3RoIT09bGUuYXJpdHkmJksobmUsImxlbmd0aCIse3Zh''@;'; put 'put ''bHVlOmxlLmFyaXR5fSk7dHJ5e2xlJiZCKGxlLCJjb25zdHJ1Y3RvciIpJiZsZS5jb25zdHJ1Y3Rvcj93JiZLKG5lLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pOm5lLnByb3RvdHlwZSYmKG5lLnByb3RvdHlwZT12b2lkIDApfWNhdGNoe312YXIgbWU9eihuZSk7cmV0dXJuIEIobWUsInNv''@;'; put 'put ''dXJjZSIpfHwobWUuc291cmNlPVkoZWUsInN0cmluZyI9PXR5cGVvZiBpZT9pZToiIikpLG5lfTtGdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmc9SihmdW5jdGlvbigpe3JldHVybiBnKHRoaXMpJiZOKHRoaXMpLnNvdXJjZXx8Rih0aGlzKX0sInRvU3RyaW5nIil9LDE4NTU2OnVlPT57InVz''@;'; put 'put ''ZSBzdHJpY3QiO3ZhciBYPU1hdGguY2VpbCx5PU1hdGguZmxvb3I7dWUuZXhwb3J0cz1NYXRoLnRydW5jfHxmdW5jdGlvbihfKXt2YXIgZz0rXztyZXR1cm4oZz4wP3k6WCkoZyl9fSwzOTExNjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDY4MzMyKTt1ZS5leHBvcnRzPWZ1bmN0''@;'; put 'put ''aW9uKF8sZyl7cmV0dXJuIHZvaWQgMD09PV8/YXJndW1lbnRzLmxlbmd0aDwyPyIiOmc6SShfKX19LDk3OTUxOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBlZSxJPXkoMTEwOCksXz15KDcxMTY4KSxnPXkoNTg1NDApLEI9eSgzNDY3MCksdz15KDg3MzcyKSxQPXkoNTU5ODgpLEY9eSg3''@;'; put 'put ''OTY2MiksTj0icHJvdG90eXBlIixMPSJzY3JpcHQiLEs9RigiSUVfUFJPVE8iKSxVPWZ1bmN0aW9uKCl7fSxXPWZ1bmN0aW9uKG5lKXtyZXR1cm4iPCIrTCsiPiIrbmUrIjwvIitMKyI+In0sWT1mdW5jdGlvbihuZSl7bmUud3JpdGUoVygiIikpLG5lLmNsb3NlKCk7dmFyIGllPW5lLnBhcmVu''@;'; put 'put ''dFdpbmRvdy5PYmplY3Q7cmV0dXJuIG5lPW51bGwsaWV9LEo9ZnVuY3Rpb24oKXt0cnl7ZWU9bmV3IEFjdGl2ZVhPYmplY3QoImh0bWxmaWxlIil9Y2F0Y2h7fUo9dHlwZW9mIGRvY3VtZW50PCJ1Ij9kb2N1bWVudC5kb21haW4mJmVlP1koZWUpOmZ1bmN0aW9uKCl7dmFyIGxlLG5lPVAoImlm''@;'; put 'put ''cmFtZSIpLGllPSJqYXZhIitMKyI6IjtyZXR1cm4gbmUuc3R5bGUuZGlzcGxheT0ibm9uZSIsdy5hcHBlbmRDaGlsZChuZSksbmUuc3JjPVN0cmluZyhpZSksKGxlPW5lLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQpLm9wZW4oKSxsZS53cml0ZShXKCJkb2N1bWVudC5GPU9iamVjdCIpKSxsZS5j''@;'; put 'put ''bG9zZSgpLGxlLkZ9KCk6WShlZSk7Zm9yKHZhciBuZT1nLmxlbmd0aDtuZS0tOylkZWxldGUgSltOXVtnW25lXV07cmV0dXJuIEooKX07QltLXT0hMCx1ZS5leHBvcnRzPU9iamVjdC5jcmVhdGV8fGZ1bmN0aW9uKGllLGxlKXt2YXIgbWU7cmV0dXJuIG51bGwhPT1pZT8oVVtOXT1JKGllKSxt''@;'; put 'put ''ZT1uZXcgVSxVW05dPW51bGwsbWVbS109aWUpOm1lPUooKSx2b2lkIDA9PT1sZT9tZTpfLmYobWUsbGUpfX0sNzExNjg6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg0NjM4NyksXz15KDI2OTI5KSxnPXkoNDQ2NDgpLEI9eSgxMTA4KSx3PXkoOTMxNjIpLFA9eSgxMDE0Myk7WC5m''@;'; put 'put ''PUkmJiFfP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzOmZ1bmN0aW9uKE8seil7QihPKTtmb3IodmFyIFcsTj13KHopLEw9UCh6KSxLPUwubGVuZ3RoLFU9MDtLPlU7KWcuZihPLFc9TFtVKytdLE5bV10pO3JldHVybiBPfX0sNDQ2NDg6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg0''@;'; put 'put ''NjM4NyksXz15KDU3MjQ0KSxnPXkoMjY5MjkpLEI9eSgxMTA4KSx3PXkoNTk0MTApLFA9VHlwZUVycm9yLEY9T2JqZWN0LmRlZmluZVByb3BlcnR5LE89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcix6PSJlbnVtZXJhYmxlIixOPSJjb25maWd1cmFibGUiLEw9IndyaXRhYmxlIjtY''@;'; put 'put ''LmY9ST9nP2Z1bmN0aW9uKFUsVyxZKXtpZihCKFUpLFc9dyhXKSxCKFkpLCJmdW5jdGlvbiI9PXR5cGVvZiBVJiYicHJvdG90eXBlIj09PVcmJiJ2YWx1ZSJpbiBZJiZMIGluIFkmJiFZW0xdKXt2YXIgcT1PKFUsVyk7cSYmcVtMXSYmKFVbV109WS52YWx1ZSxZPXtjb25maWd1cmFibGU6TiBp''@;'; put 'put ''biBZP1lbTl06cVtOXSxlbnVtZXJhYmxlOnogaW4gWT9ZW3pdOnFbel0sd3JpdGFibGU6ITF9KX1yZXR1cm4gRihVLFcsWSl9OkY6ZnVuY3Rpb24oVSxXLFkpe2lmKEIoVSksVz13KFcpLEIoWSksXyl0cnl7cmV0dXJuIEYoVSxXLFkpfWNhdGNoe31pZigiZ2V0ImluIFl8fCJzZXQiaW4gWSl0''@;'; put 'put ''aHJvdyBuZXcgUCgiQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQiKTtyZXR1cm4idmFsdWUiaW4gWSYmKFVbV109WS52YWx1ZSksVX19LDU0MTIyOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNDYzODcpLF89eSg0NjkyNiksZz15KDM5NjIpLEI9eSg3Nzc3Myksdz15KDkzMTYyKSxQ''@;'; put 'put ''PXkoNTk0MTApLEY9eSgzOGUzKSxPPXkoNTcyNDQpLHo9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtYLmY9ST96OmZ1bmN0aW9uKEwsSyl7aWYoTD13KEwpLEs9UChLKSxPKXRyeXtyZXR1cm4geihMLEspfWNhdGNoe31pZihGKEwsSykpcmV0dXJuIEIoIV8oZy5mLEwsSyksTFtL''@;'; put 'put ''XSl9fSwzNjE0MzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDIzMzEzKSxnPXkoNTg1NDApLmNvbmNhdCgibGVuZ3RoIiwicHJvdG90eXBlIik7WC5mPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzfHxmdW5jdGlvbih3KXtyZXR1cm4gSSh3LGcpfX0sMjgwNzA6KHVlLFgpPT57''@;'; put 'put ''InVzZSBzdHJpY3QiO1guZj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzfSwyNjQwMDoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDM4ZTMpLF89eSgxOTE1MCksZz15KDMxOTUwKSxCPXkoNzk2NjIpLHc9eSg4MjgzNCksUD1CKCJJRV9QUk9UTyIpLEY9T2JqZWN0LE89Ri5w''@;'; put 'put ''cm90b3R5cGU7dWUuZXhwb3J0cz13P0YuZ2V0UHJvdG90eXBlT2Y6ZnVuY3Rpb24oeil7dmFyIE49Zyh6KTtpZihJKE4sUCkpcmV0dXJuIE5bUF07dmFyIEw9Ti5jb25zdHJ1Y3RvcjtyZXR1cm4gXyhMKSYmTiBpbnN0YW5jZW9mIEw/TC5wcm90b3R5cGU6TiBpbnN0YW5jZW9mIEY/TzpudWxs''@;'; put 'put ''fX0sNDY4Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNTg2MDcpO3VlLmV4cG9ydHM9SSh7fS5pc1Byb3RvdHlwZU9mKX0sMjMzMTM6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg1ODYwNyksXz15KDM4ZTMpLGc9eSg5MzE2MiksQj15KDc0ODI0KS5pbmRleE9mLHc9''@;'; put 'put ''eSgzNDY3MCksUD1JKFtdLnB1c2gpO3VlLmV4cG9ydHM9ZnVuY3Rpb24oRixPKXt2YXIgSyx6PWcoRiksTj0wLEw9W107Zm9yKEsgaW4geikhXyh3LEspJiZfKHosSykmJlAoTCxLKTtmb3IoO08ubGVuZ3RoPk47KV8oeixLPU9bTisrXSkmJih+QihMLEspfHxQKEwsSykpO3JldHVybiBMfX0s''@;'; put 'put ''MTAxNDM6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgyMzMxMyksXz15KDU4NTQwKTt1ZS5leHBvcnRzPU9iamVjdC5rZXlzfHxmdW5jdGlvbihCKXtyZXR1cm4gSShCLF8pfX0sMzk2MjoodWUsWCk9PnsidXNlIHN0cmljdCI7dmFyIHk9e30ucHJvcGVydHlJc0VudW1lcmFibGUs''@;'; put 'put ''ST1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLF89SSYmIXkuY2FsbCh7MToyfSwxKTtYLmY9Xz9mdW5jdGlvbihCKXt2YXIgdz1JKHRoaXMsQik7cmV0dXJuISF3JiZ3LmVudW1lcmFibGV9Onl9LDIxNjEyOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNjkyMjcpLF89''@;'; put 'put ''eSgzMjYzMyksZz15KDg4Mjc1KSxCPXkoMjc2Nyk7dWUuZXhwb3J0cz1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fCgiX19wcm90b19fImlue30/ZnVuY3Rpb24oKXt2YXIgRix3PSExLFA9e307dHJ5eyhGPUkoT2JqZWN0LnByb3RvdHlwZSwiX19wcm90b19fIiwic2V0IikpKFAsW10pLHc9UCBp''@;'; put 'put ''bnN0YW5jZW9mIEFycmF5fWNhdGNoe31yZXR1cm4gZnVuY3Rpb24oeixOKXtyZXR1cm4gZyh6KSxCKE4pLF8oeikmJih3P0YoeixOKTp6Ll9fcHJvdG9fXz1OKSx6fX0oKTp2b2lkIDApfSw5Mzg2NToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDQ2OTI2KSxfPXkoMTkxNTApLGc9''@;'; put 'put ''eSgzMjYzMyksQj1UeXBlRXJyb3I7dWUuZXhwb3J0cz1mdW5jdGlvbih3LFApe3ZhciBGLE87aWYoInN0cmluZyI9PT1QJiZfKEY9dy50b1N0cmluZykmJiFnKE89SShGLHcpKXx8XyhGPXcudmFsdWVPZikmJiFnKE89SShGLHcpKXx8InN0cmluZyIhPT1QJiZfKEY9dy50b1N0cmluZykmJiFn''@;'; put 'put ''KE89SShGLHcpKSlyZXR1cm4gTzt0aHJvdyBuZXcgQigiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlIil9fSw4ODA3ODoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDEyMjAyKSxfPXkoNTg2MDcpLGc9eSgzNjE0MyksQj15KDI4MDcwKSx3PXkoMTEwOCks''@;'; put 'put ''UD1fKFtdLmNvbmNhdCk7dWUuZXhwb3J0cz1JKCJSZWZsZWN0Iiwib3duS2V5cyIpfHxmdW5jdGlvbihPKXt2YXIgej1nLmYodyhPKSksTj1CLmY7cmV0dXJuIE4/UCh6LE4oTykpOnp9fSw2MDMyMToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDQ0NjQ4KS5mO3VlLmV4cG9ydHM9''@;'; put 'put ''ZnVuY3Rpb24oXyxnLEIpe0IgaW4gX3x8SShfLEIse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZ1tCXX0sc2V0OmZ1bmN0aW9uKHcpe2dbQl09d319KX19LDIyNzU0Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMTEwOCk7dWUuZXhwb3J0cz1mdW5jdGlv''@;'; put 'put ''bigpe3ZhciBfPUkodGhpcyksZz0iIjtyZXR1cm4gXy5oYXNJbmRpY2VzJiYoZys9ImQiKSxfLmdsb2JhbCYmKGcrPSJnIiksXy5pZ25vcmVDYXNlJiYoZys9ImkiKSxfLm11bHRpbGluZSYmKGcrPSJtIiksXy5kb3RBbGwmJihnKz0icyIpLF8udW5pY29kZSYmKGcrPSJ1IiksXy51bmljb2Rl''@;'; put 'put ''U2V0cyYmKGcrPSJ2IiksXy5zdGlja3kmJihnKz0ieSIpLGd9fSwzNzA3NToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDQ2OTI2KSxfPXkoMzhlMyksZz15KDQ2OCksQj15KDIyNzU0KSx3PVJlZ0V4cC5wcm90b3R5cGU7dWUuZXhwb3J0cz1mdW5jdGlvbihQKXt2YXIgRj1QLmZs''@;'; put 'put ''YWdzO3JldHVybiB2b2lkIDAhPT1GfHwiZmxhZ3MiaW4gd3x8XyhQLCJmbGFncyIpfHwhZyh3LFApP0Y6SShCLFApfX0sODgyNzU6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg5NDQ2OCksXz1UeXBlRXJyb3I7dWUuZXhwb3J0cz1mdW5jdGlvbihnKXtpZihJKGcpKXRocm93IG5l''@;'; put 'put ''dyBfKCJDYW4ndCBjYWxsIG1ldGhvZCBvbiAiK2cpO3JldHVybiBnfX0sNDMyNDk6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIE4sST15KDMzOTYzKSxfPXkoNDAyMjApLGc9eSgxOTE1MCksQj15KDQ3MDkyKSx3PXkoMjM1OCksUD15KDc3NjM5KSxGPXkoMjc5NjcpLE89SS5GdW5jdGlv''@;'; put 'put ''bix6PS9NU0lFIC5cLi8udGVzdCh3KXx8IkJVTiI9PT1CJiYoKE49SS5CdW4udmVyc2lvbi5zcGxpdCgiLiIpKS5sZW5ndGg8M3x8IjAiPT09TlswXSYmKE5bMV08M3x8IjMiPT09TlsxXSYmIjAiPT09TlsyXSkpO3VlLmV4cG9ydHM9ZnVuY3Rpb24oTixMKXt2YXIgSz1MPzI6MTtyZXR1cm4g''@;'; put 'put ''ej9mdW5jdGlvbihVLFcpe3ZhciBZPUYoYXJndW1lbnRzLmxlbmd0aCwxKT5LLHE9ZyhVKT9VOk8oVSksZWU9WT9QKGFyZ3VtZW50cyxLKTpbXSxKPVk/ZnVuY3Rpb24oKXtfKHEsdGhpcyxlZSl9OnE7cmV0dXJuIEw/TihKLFcpOk4oSil9Ok59fSwxNDQ1Oih1ZSxYLHkpPT57InVzZSBzdHJp''@;'; put 'put ''Y3QiO3ZhciBJPXkoOTc1NDEpLF89eSgyMTkxMCksZz1JLlNldCxCPUkuYWRkO3VlLmV4cG9ydHM9ZnVuY3Rpb24odyl7dmFyIFA9bmV3IGc7cmV0dXJuIF8odyxmdW5jdGlvbihGKXtCKFAsRil9KSxQfX0sODAyMTM6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgzNzczMSksXz15''@;'; put 'put ''KDk3NTQxKSxnPXkoMTQ0NSksQj15KDMwMzM5KSx3PXkoNDM2MzIpLFA9eSgyMTkxMCksRj15KDExMzgpLE89Xy5oYXMsej1fLnJlbW92ZTt1ZS5leHBvcnRzPWZ1bmN0aW9uKEwpe3ZhciBLPUkodGhpcyksVT13KEwpLFc9ZyhLKTtyZXR1cm4gQihLKTw9VS5zaXplP1AoSyxmdW5jdGlvbihZ''@;'; put 'put ''KXtVLmluY2x1ZGVzKFkpJiZ6KFcsWSl9KTpGKFUuZ2V0SXRlcmF0b3IoKSxmdW5jdGlvbihZKXtPKEssWSkmJnooVyxZKX0pLFd9fSw5NzU0MToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDU4NjA3KSxfPVNldC5wcm90b3R5cGU7dWUuZXhwb3J0cz17U2V0LGFkZDpJKF8uYWRk''@;'; put 'put ''KSxoYXM6SShfLmhhcykscmVtb3ZlOkkoXy5kZWxldGUpLHByb3RvOl99fSw2MTg3OToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDM3NzMxKSxfPXkoOTc1NDEpLGc9eSgzMDMzOSksQj15KDQzNjMyKSx3PXkoMjE5MTApLFA9eSgxMTM4KSxGPV8uU2V0LE89Xy5hZGQsej1fLmhh''@;'; put 'put ''czt1ZS5leHBvcnRzPWZ1bmN0aW9uKEwpe3ZhciBLPUkodGhpcyksVT1CKEwpLFc9bmV3IEY7cmV0dXJuIGcoSyk+VS5zaXplP1AoVS5nZXRJdGVyYXRvcigpLGZ1bmN0aW9uKFkpe3ooSyxZKSYmTyhXLFkpfSk6dyhLLGZ1bmN0aW9uKFkpe1UuaW5jbHVkZXMoWSkmJk8oVyxZKX0pLFd9fSw3''@;'; put 'put ''MzYyNDoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDM3NzMxKSxfPXkoOTc1NDEpLmhhcyxnPXkoMzAzMzkpLEI9eSg0MzYzMiksdz15KDIxOTEwKSxQPXkoMTEzOCksRj15KDY2NTQyKTt1ZS5leHBvcnRzPWZ1bmN0aW9uKHope3ZhciBOPUkodGhpcyksTD1CKHopO2lmKGcoTik8''@;'; put 'put ''PUwuc2l6ZSlyZXR1cm4hMSE9PXcoTixmdW5jdGlvbihVKXtpZihMLmluY2x1ZGVzKFUpKXJldHVybiExfSwhMCk7dmFyIEs9TC5nZXRJdGVyYXRvcigpO3JldHVybiExIT09UChLLGZ1bmN0aW9uKFUpe2lmKF8oTixVKSlyZXR1cm4gRihLLCJub3JtYWwiLCExKX0pfX0sNzQ4Mzk6KHVlLFgs''@;'; put 'put ''eSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgzNzczMSksXz15KDMwMzM5KSxnPXkoMjE5MTApLEI9eSg0MzYzMik7dWUuZXhwb3J0cz1mdW5jdGlvbihQKXt2YXIgRj1JKHRoaXMpLE89QihQKTtyZXR1cm4hKF8oRik+Ty5zaXplKSYmITEhPT1nKEYsZnVuY3Rpb24oeil7aWYoIU8uaW5jbHVk''@;'; put 'put ''ZXMoeikpcmV0dXJuITF9LCEwKX19LDk2MDYyOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMzc3MzEpLF89eSg5NzU0MSkuaGFzLGc9eSgzMDMzOSksQj15KDQzNjMyKSx3PXkoMTEzOCksUD15KDY2NTQyKTt1ZS5leHBvcnRzPWZ1bmN0aW9uKE8pe3ZhciB6PUkodGhpcyksTj1C''@;'; put 'put ''KE8pO2lmKGcoeik8Ti5zaXplKXJldHVybiExO3ZhciBMPU4uZ2V0SXRlcmF0b3IoKTtyZXR1cm4hMSE9PXcoTCxmdW5jdGlvbihLKXtpZighXyh6LEspKXJldHVybiBQKEwsIm5vcm1hbCIsITEpfSl9fSwyMTkxMDoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDU4NjA3KSxfPXko''@;'; put 'put ''MTEzOCksZz15KDk3NTQxKSxCPWcuU2V0LHc9Zy5wcm90byxQPUkody5mb3JFYWNoKSxGPUkody5rZXlzKSxPPUYobmV3IEIpLm5leHQ7dWUuZXhwb3J0cz1mdW5jdGlvbih6LE4sTCl7cmV0dXJuIEw/Xyh7aXRlcmF0b3I6Rih6KSxuZXh0Ok99LE4pOlAoeixOKX19LDUzNTA1Oih1ZSxYLHkp''@;'; put 'put ''PT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMTIyMDIpLF89ZnVuY3Rpb24oQil7cmV0dXJue3NpemU6QixoYXM6ZnVuY3Rpb24oKXtyZXR1cm4hMX0sa2V5czpmdW5jdGlvbigpe3JldHVybntuZXh0OmZ1bmN0aW9uKCl7cmV0dXJue2RvbmU6ITB9fX19fX0sZz1mdW5jdGlvbihCKXtyZXR1cm57''@;'; put 'put ''c2l6ZTpCLGhhczpmdW5jdGlvbigpe3JldHVybiEwfSxrZXlzOmZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJlIil9fX07dWUuZXhwb3J0cz1mdW5jdGlvbihCLHcpe3ZhciBQPUkoIlNldCIpO3RyeXsobmV3IFApW0JdKF8oMCkpO3RyeXtyZXR1cm4obmV3IFApW0JdKF8oLTEpKSwhMX1j''@;'; put 'put ''YXRjaHtpZighdylyZXR1cm4hMDt0cnl7cmV0dXJuKG5ldyBQKVtCXShnKC0xLzApKSwhMX1jYXRjaHt2YXIgRj1uZXcgUDtyZXR1cm4gRi5hZGQoMSksRi5hZGQoMiksdyhGW0JdKGcoMS8wKSkpfX19Y2F0Y2h7cmV0dXJuITF9fX0sMzAzMzk6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFy''@;'; put 'put ''IEk9eSg2OTIyNyksXz15KDk3NTQxKTt1ZS5leHBvcnRzPUkoXy5wcm90bywic2l6ZSIsImdldCIpfHxmdW5jdGlvbihnKXtyZXR1cm4gZy5zaXplfX0sODUwMzk6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgzNzczMSksXz15KDk3NTQxKSxnPXkoMTQ0NSksQj15KDQzNjMyKSx3''@;'; put 'put ''PXkoMTEzOCksUD1fLmFkZCxGPV8uaGFzLE89Xy5yZW1vdmU7dWUuZXhwb3J0cz1mdW5jdGlvbihOKXt2YXIgTD1JKHRoaXMpLEs9QihOKS5nZXRJdGVyYXRvcigpLFU9ZyhMKTtyZXR1cm4gdyhLLGZ1bmN0aW9uKFcpe0YoTCxXKT9PKFUsVyk6UChVLFcpfSksVX19LDIwNTA3Oih1ZSxYLHkp''@;'; put 'put ''PT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMzc3MzEpLF89eSg5NzU0MSkuYWRkLGc9eSgxNDQ1KSxCPXkoNDM2MzIpLHc9eSgxMTM4KTt1ZS5leHBvcnRzPWZ1bmN0aW9uKEYpe3ZhciBPPUkodGhpcyksej1CKEYpLmdldEl0ZXJhdG9yKCksTj1nKE8pO3JldHVybiB3KHosZnVuY3Rpb24oTCl7''@;'; put 'put ''XyhOLEwpfSksTn19LDc5NjYyOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoODc0ODQpLF89eSg2Mzk1MSksZz1JKCJrZXlzIik7dWUuZXhwb3J0cz1mdW5jdGlvbihCKXtyZXR1cm4gZ1tCXXx8KGdbQl09XyhCKSl9fSw0ODM1NjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIg''@;'; put 'put ''ST15KDg4Nzg4KSxfPXkoMzM5NjMpLGc9eSg0ODEwNCksQj0iX19jb3JlLWpzX3NoYXJlZF9fIix3PXVlLmV4cG9ydHM9X1tCXXx8ZyhCLHt9KTsody52ZXJzaW9uc3x8KHcudmVyc2lvbnM9W10pKS5wdXNoKHt2ZXJzaW9uOiIzLjQyLjAiLG1vZGU6ST8icHVyZSI6Imdsb2JhbCIsY29weXJp''@;'; put 'put ''Z2h0OiJceGE5IDIwMTQtMjAyNSBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KSIsbGljZW5zZToiaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvYmxvYi92My40Mi4wL0xJQ0VOU0UiLHNvdXJjZToiaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMifSl9''@;'; put 'put ''LDg3NDg0Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNDgzNTYpO3VlLmV4cG9ydHM9ZnVuY3Rpb24oXyxnKXtyZXR1cm4gSVtfXXx8KElbX109Z3x8e30pfX0sMzY1MDY6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg0NDA2NiksXz15KDU1NTkyKSxCPXkoMzM5NjMp''@;'; put 'put ''LlN0cmluZzt1ZS5leHBvcnRzPSEhT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmIV8oZnVuY3Rpb24oKXt2YXIgdz1TeW1ib2woInN5bWJvbCBkZXRlY3Rpb24iKTtyZXR1cm4hQih3KXx8IShPYmplY3QodylpbnN0YW5jZW9mIFN5bWJvbCl8fCFTeW1ib2wuc2hhbSYmSSYmSTw0MX0p''@;'; put 'put ''fSw3NTk2Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBfZSxUZSxTZSxqZSxJPXkoMzM5NjMpLF89eSg0MDIyMCksZz15KDc4ODExKSxCPXkoMTkxNTApLHc9eSgzOGUzKSxQPXkoNTU1OTIpLEY9eSg4NzM3MiksTz15KDc3NjM5KSx6PXkoNTU5ODgpLE49eSgyNzk2NyksTD15KDQ0MTM3''@;'; put 'put ''KSxLPXkoMjE1MTApLFU9SS5zZXRJbW1lZGlhdGUsVz1JLmNsZWFySW1tZWRpYXRlLFk9SS5wcm9jZXNzLHE9SS5EaXNwYXRjaCxlZT1JLkZ1bmN0aW9uLEo9SS5NZXNzYWdlQ2hhbm5lbCxuZT1JLlN0cmluZyxpZT0wLGxlPXt9LG1lPSJvbnJlYWR5c3RhdGVjaGFuZ2UiO1AoZnVuY3Rpb24o''@;'; put 'put ''KXtfZT1JLmxvY2F0aW9ufSk7dmFyIFY9ZnVuY3Rpb24oQyl7aWYodyhsZSxDKSl7dmFyIFQ9bGVbQ107ZGVsZXRlIGxlW0NdLFQoKX19LHA9ZnVuY3Rpb24oQyl7cmV0dXJuIGZ1bmN0aW9uKCl7VihDKX19LGI9ZnVuY3Rpb24oQyl7VihDLmRhdGEpfSx4PWZ1bmN0aW9uKEMpe0kucG9zdE1l''@;'; put 'put ''c3NhZ2UobmUoQyksX2UucHJvdG9jb2wrIi8vIitfZS5ob3N0KX07KCFVfHwhVykmJihVPWZ1bmN0aW9uKFQpe04oYXJndW1lbnRzLmxlbmd0aCwxKTt2YXIgSD1CKFQpP1Q6ZWUoVCksaj1PKGFyZ3VtZW50cywxKTtyZXR1cm4gbGVbKytpZV09ZnVuY3Rpb24oKXtfKEgsdm9pZCAwLGopfSxU''@;'; put 'put ''ZShpZSksaWV9LFc9ZnVuY3Rpb24oVCl7ZGVsZXRlIGxlW1RdfSxLP1RlPWZ1bmN0aW9uKEMpe1kubmV4dFRpY2socChDKSl9OnEmJnEubm93P1RlPWZ1bmN0aW9uKEMpe3Eubm93KHAoQykpfTpKJiYhTD8oamU9KFNlPW5ldyBKKS5wb3J0MixTZS5wb3J0MS5vbm1lc3NhZ2U9YixUZT1nKGpl''@;'; put 'put ''LnBvc3RNZXNzYWdlLGplKSk6SS5hZGRFdmVudExpc3RlbmVyJiZCKEkucG9zdE1lc3NhZ2UpJiYhSS5pbXBvcnRTY3JpcHRzJiZfZSYmImZpbGU6IiE9PV9lLnByb3RvY29sJiYhUCh4KT8oVGU9eCxJLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGIsITEpKTpUZT1tZSBpbiB6KCJzY3Jp''@;'; put 'put ''cHQiKT9mdW5jdGlvbihDKXtGLmFwcGVuZENoaWxkKHooInNjcmlwdCIpKVttZV09ZnVuY3Rpb24oKXtGLnJlbW92ZUNoaWxkKHRoaXMpLFYoQyl9fTpmdW5jdGlvbihDKXtzZXRUaW1lb3V0KHAoQyksMCl9KSx1ZS5leHBvcnRzPXtzZXQ6VSxjbGVhcjpXfX0sNzQ4NToodWUsWCx5KT0+eyJ1''@;'; put 'put ''c2Ugc3RyaWN0Ijt2YXIgST15KDY0NTUwKSxfPU1hdGgubWF4LGc9TWF0aC5taW47dWUuZXhwb3J0cz1mdW5jdGlvbihCLHcpe3ZhciBQPUkoQik7cmV0dXJuIFA8MD9fKFArdywwKTpnKFAsdyl9fSw5MzE2MjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDU1OCksXz15KDg4Mjc1''@;'; put 'put ''KTt1ZS5leHBvcnRzPWZ1bmN0aW9uKGcpe3JldHVybiBJKF8oZykpfX0sNjQ1NTA6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgxODU1Nik7dWUuZXhwb3J0cz1mdW5jdGlvbihfKXt2YXIgZz0rXztyZXR1cm4gZyE9Z3x8MD09PWc/MDpJKGcpfX0sOTQyMzc6KHVlLFgseSk9Pnsi''@;'; put 'put ''dXNlIHN0cmljdCI7dmFyIEk9eSg2NDU1MCksXz1NYXRoLm1pbjt1ZS5leHBvcnRzPWZ1bmN0aW9uKGcpe3ZhciBCPUkoZyk7cmV0dXJuIEI+MD9fKEIsOTAwNzE5OTI1NDc0MDk5MSk6MH19LDMxOTUwOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoODgyNzUpLF89T2JqZWN0O3Vl''@;'; put 'put ''LmV4cG9ydHM9ZnVuY3Rpb24oZyl7cmV0dXJuIF8oSShnKSl9fSw4NTY1NjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDQ2OTI2KSxfPXkoMzI2MzMpLGc9eSg5Mjk5OCksQj15KDg2MTE1KSx3PXkoOTM4NjUpLFA9eSg1ODAxMiksRj1UeXBlRXJyb3IsTz1QKCJ0b1ByaW1pdGl2''@;'; put 'put ''ZSIpO3VlLmV4cG9ydHM9ZnVuY3Rpb24oeixOKXtpZighXyh6KXx8Zyh6KSlyZXR1cm4gejt2YXIgSyxMPUIoeixPKTtpZihMKXtpZih2b2lkIDA9PT1OJiYoTj0iZGVmYXVsdCIpLEs9SShMLHosTiksIV8oSyl8fGcoSykpcmV0dXJuIEs7dGhyb3cgbmV3IEYoIkNhbid0IGNvbnZlcnQgb2Jq''@;'; put 'put ''ZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZSIpfXJldHVybiB2b2lkIDA9PT1OJiYoTj0ibnVtYmVyIiksdyh6LE4pfX0sNTk0MTA6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg4NTY1NiksXz15KDkyOTk4KTt1ZS5leHBvcnRzPWZ1bmN0aW9uKGcpe3ZhciBCPUkoZywic3RyaW5nIik7''@;'; put 'put ''cmV0dXJuIF8oQik/QjpCKyIifX0sMzg1OTU6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIGc9e307Z1t5KDU4MDEyKSgidG9TdHJpbmdUYWciKV09InoiLHVlLmV4cG9ydHM9IltvYmplY3Qgel0iPT09U3RyaW5nKGcpfSw2ODMzMjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15''@;'; put 'put ''KDcxODI0KSxfPVN0cmluZzt1ZS5leHBvcnRzPWZ1bmN0aW9uKGcpe2lmKCJTeW1ib2wiPT09SShnKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY29udmVydCBhIFN5bWJvbCB2YWx1ZSB0byBhIHN0cmluZyIpO3JldHVybiBfKGcpfX0sNzUyMTI6dWU9PnsidXNlIHN0cmljdCI7dmFy''@;'; put 'put ''IFg9U3RyaW5nO3VlLmV4cG9ydHM9ZnVuY3Rpb24oeSl7dHJ5e3JldHVybiBYKHkpfWNhdGNoe3JldHVybiJPYmplY3QifX19LDYzOTUxOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNTg2MDcpLF89MCxnPU1hdGgucmFuZG9tKCksQj1JKDEuLnRvU3RyaW5nKTt1ZS5leHBvcnRz''@;'; put 'put ''PWZ1bmN0aW9uKHcpe3JldHVybiJTeW1ib2woIisodm9pZCAwPT09dz8iIjp3KSsiKV8iK0IoKytfK2csMzYpfX0sNjY5OTU6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgzNjUwNik7dWUuZXhwb3J0cz1JJiYhU3ltYm9sLnNoYW0mJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0''@;'; put 'put ''ZXJhdG9yfSwyNjkyOToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDQ2Mzg3KSxfPXkoNTU1OTIpO3VlLmV4cG9ydHM9SSYmXyhmdW5jdGlvbigpe3JldHVybiA0MiE9PU9iamVjdC5kZWZpbmVQcm9wZXJ0eShmdW5jdGlvbigpe30sInByb3RvdHlwZSIse3ZhbHVlOjQyLHdyaXRh''@;'; put 'put ''YmxlOiExfSkucHJvdG90eXBlfSl9LDI3OTY3OnVlPT57InVzZSBzdHJpY3QiO3ZhciBYPVR5cGVFcnJvcjt1ZS5leHBvcnRzPWZ1bmN0aW9uKHksSSl7aWYoeTxJKXRocm93IG5ldyBYKCJOb3QgZW5vdWdoIGFyZ3VtZW50cyIpO3JldHVybiB5fX0sNDg2OTE6KHVlLFgseSk9PnsidXNlIHN0''@;'; put 'put ''cmljdCI7dmFyIEk9eSgzMzk2MyksXz15KDE5MTUwKSxnPUkuV2Vha01hcDt1ZS5leHBvcnRzPV8oZykmJi9uYXRpdmUgY29kZS8udGVzdChTdHJpbmcoZykpfSw1ODAxMjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDMzOTYzKSxfPXkoODc0ODQpLGc9eSgzOGUzKSxCPXkoNjM5''@;'; put 'put ''NTEpLHc9eSgzNjUwNiksUD15KDY2OTk1KSxGPUkuU3ltYm9sLE89Xygid2tzIiksej1QP0YuZm9yfHxGOkYmJkYud2l0aG91dFNldHRlcnx8Qjt1ZS5leHBvcnRzPWZ1bmN0aW9uKE4pe3JldHVybiBnKE8sTil8fChPW05dPXcmJmcoRixOKT9GW05dOnooIlN5bWJvbC4iK04pKSxPW05dfX0s''@;'; put 'put ''MzI5MzA6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgxMjIwMiksXz15KDM4ZTMpLGc9eSgzNjY3OCksQj15KDQ2OCksdz15KDIxNjEyKSxQPXkoNDg2MzkpLEY9eSg2MDMyMSksTz15KDE3Mjk2KSx6PXkoMzkxMTYpLE49eSg2NDg1NSksTD15KDIyMzA0KSxLPXkoNDYzODcpLFU9''@;'; put 'put ''eSg4ODc4OCk7dWUuZXhwb3J0cz1mdW5jdGlvbihXLFkscSxlZSl7dmFyIEo9InN0YWNrVHJhY2VMaW1pdCIsbmU9ZWU/MjoxLGllPVcuc3BsaXQoIi4iKSxsZT1pZVtpZS5sZW5ndGgtMV0sbWU9SS5hcHBseShudWxsLGllKTtpZihtZSl7dmFyIF9lPW1lLnByb3RvdHlwZTtpZighVSYmXyhf''@;'; put 'put ''ZSwiY2F1c2UiKSYmZGVsZXRlIF9lLmNhdXNlLCFxKXJldHVybiBtZTt2YXIgVGU9SSgiRXJyb3IiKSxTZT1ZKGZ1bmN0aW9uKGplLFYpe3ZhciBwPXooZWU/VjpqZSx2b2lkIDApLGI9ZWU/bmV3IG1lKGplKTpuZXcgbWU7cmV0dXJuIHZvaWQgMCE9PXAmJmcoYiwibWVzc2FnZSIscCksTChi''@;'; put 'put ''LFNlLGIuc3RhY2ssMiksdGhpcyYmQihfZSx0aGlzKSYmTyhiLHRoaXMsU2UpLGFyZ3VtZW50cy5sZW5ndGg+bmUmJk4oYixhcmd1bWVudHNbbmVdKSxifSk7aWYoU2UucHJvdG90eXBlPV9lLCJFcnJvciIhPT1sZT93P3coU2UsVGUpOlAoU2UsVGUse25hbWU6ITB9KTpLJiZKIGluIG1lJiYo''@;'; put 'put ''RihTZSxtZSxKKSxGKFNlLG1lLCJwcmVwYXJlU3RhY2tUcmFjZSIpKSxQKFNlLG1lKSwhVSl0cnl7X2UubmFtZSE9PWxlJiZnKF9lLCJuYW1lIixsZSksX2UuY29uc3RydWN0b3I9U2V9Y2F0Y2h7fXJldHVybiBTZX19fSwzOTA5MjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDI4''@;'; put 'put ''MzY3KSxfPXkoMzE5NTApLGc9eSg3MTcxKSxCPXkoNjQ1NTApLHc9eSg3MDgyNCk7SSh7dGFyZ2V0OiJBcnJheSIscHJvdG86ITB9LHthdDpmdW5jdGlvbihGKXt2YXIgTz1fKHRoaXMpLHo9ZyhPKSxOPUIoRiksTD1OPj0wP046eitOO3JldHVybiBMPDB8fEw+PXo/dm9pZCAwOk9bTF19fSks''@;'; put 'put ''dygiYXQiKX0sNzc1MjU6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgyODM2NyksXz15KDMxOTUwKSxnPXkoNzE3MSksQj15KDM5MjA2KSx3PXkoMzMxNik7SSh7dGFyZ2V0OiJBcnJheSIscHJvdG86ITAsYXJpdHk6MSxmb3JjZWQ6eSg1NTU5MikoZnVuY3Rpb24oKXtyZXR1cm4g''@;'; put 'put ''NDI5NDk2NzI5NyE9PVtdLnB1c2guY2FsbCh7bGVuZ3RoOjQyOTQ5NjcyOTZ9LDEpfSl8fCFmdW5jdGlvbigpe3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkoW10sImxlbmd0aCIse3dyaXRhYmxlOiExfSkucHVzaCgpfWNhdGNoKE4pe3JldHVybiBOIGluc3RhbmNlb2YgVHlwZUVycm9yfX0o''@;'; put 'put ''KX0se3B1c2g6ZnVuY3Rpb24oTCl7dmFyIEs9Xyh0aGlzKSxVPWcoSyksVz1hcmd1bWVudHMubGVuZ3RoO3coVStXKTtmb3IodmFyIFk9MDtZPFc7WSsrKUtbVV09YXJndW1lbnRzW1ldLFUrKztyZXR1cm4gQihLLFUpLFV9fSl9LDIzMDEyOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJ''@;'; put 'put ''PXkoMjgzNjcpLF89eSg1ODYwNyksZz15KDMxNDgzKSxCPXkoOTMxNjIpLHc9eSgzODgxKSxQPXkoNjY1MDMpLEY9eSg3MDgyNCksTz1BcnJheSx6PV8oUCgiQXJyYXkiLCJzb3J0IikpO0koe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwfSx7dG9Tb3J0ZWQ6ZnVuY3Rpb24oTCl7dm9pZCAwIT09''@;'; put 'put ''TCYmZyhMKTt2YXIgSz1CKHRoaXMpLFU9dyhPLEspO3JldHVybiB6KFUsTCl9fSksRigidG9Tb3J0ZWQiKX0sNjgxNDY6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7eSg3MDgyNCkoImZsYXRNYXAiKX0sOTM5MDk6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7eSg3MDgyNCkoImZsYXQiKX0sMjk3''@;'; put 'put ''NjA6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgyODM2NyksXz15KDMxOTUwKSxnPXkoNzE3MSksQj15KDM5MjA2KSx3PXkoNDMxOTUpLFA9eSgzMzE2KTtJKHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMCxhcml0eToxLGZvcmNlZDoxIT09W10udW5zaGlmdCgwKXx8IWZ1bmN0aW9u''@;'; put 'put ''KCl7dHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eShbXSwibGVuZ3RoIix7d3JpdGFibGU6ITF9KS51bnNoaWZ0KCl9Y2F0Y2goTil7cmV0dXJuIE4gaW5zdGFuY2VvZiBUeXBlRXJyb3J9fSgpfSx7dW5zaGlmdDpmdW5jdGlvbihMKXt2YXIgSz1fKHRoaXMpLFU9ZyhLKSxXPWFyZ3VtZW50cy5s''@;'; put 'put ''ZW5ndGg7aWYoVyl7UChVK1cpO2Zvcih2YXIgWT1VO1ktLTspe3ZhciBxPVkrVztZIGluIEs/S1txXT1LW1ldOncoSyxxKX1mb3IodmFyIGVlPTA7ZWU8VztlZSsrKUtbZWVdPWFyZ3VtZW50c1tlZV19cmV0dXJuIEIoSyxVK1cpfX0pfSw0OTUzNzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2''@;'; put 'put ''YXIgST15KDI4MzY3KSxfPXkoMzM5NjMpLGc9eSg0MDIyMCksQj15KDMyOTMwKSx3PSJXZWJBc3NlbWJseSIsUD1fW3ddLEY9NyE9PW5ldyBFcnJvcigiZSIse2NhdXNlOjd9KS5jYXVzZSxPPWZ1bmN0aW9uKE4sTCl7dmFyIEs9e307S1tOXT1CKE4sTCxGKSxJKHtnbG9iYWw6ITAsY29uc3Ry''@;'; put 'put ''dWN0b3I6ITAsYXJpdHk6MSxmb3JjZWQ6Rn0sSyl9LHo9ZnVuY3Rpb24oTixMKXtpZihQJiZQW05dKXt2YXIgSz17fTtLW05dPUIodysiLiIrTixMLEYpLEkoe3RhcmdldDp3LHN0YXQ6ITAsY29uc3RydWN0b3I6ITAsYXJpdHk6MSxmb3JjZWQ6Rn0sSyl9fTtPKCJFcnJvciIsZnVuY3Rpb24o''@;'; put 'put ''Til7cmV0dXJuIGZ1bmN0aW9uKEspe3JldHVybiBnKE4sdGhpcyxhcmd1bWVudHMpfX0pLE8oIkV2YWxFcnJvciIsZnVuY3Rpb24oTil7cmV0dXJuIGZ1bmN0aW9uKEspe3JldHVybiBnKE4sdGhpcyxhcmd1bWVudHMpfX0pLE8oIlJhbmdlRXJyb3IiLGZ1bmN0aW9uKE4pe3JldHVybiBmdW5j''@;'; put 'put ''dGlvbihLKXtyZXR1cm4gZyhOLHRoaXMsYXJndW1lbnRzKX19KSxPKCJSZWZlcmVuY2VFcnJvciIsZnVuY3Rpb24oTil7cmV0dXJuIGZ1bmN0aW9uKEspe3JldHVybiBnKE4sdGhpcyxhcmd1bWVudHMpfX0pLE8oIlN5bnRheEVycm9yIixmdW5jdGlvbihOKXtyZXR1cm4gZnVuY3Rpb24oSyl7''@;'; put 'put ''cmV0dXJuIGcoTix0aGlzLGFyZ3VtZW50cyl9fSksTygiVHlwZUVycm9yIixmdW5jdGlvbihOKXtyZXR1cm4gZnVuY3Rpb24oSyl7cmV0dXJuIGcoTix0aGlzLGFyZ3VtZW50cyl9fSksTygiVVJJRXJyb3IiLGZ1bmN0aW9uKE4pe3JldHVybiBmdW5jdGlvbihLKXtyZXR1cm4gZyhOLHRoaXMs''@;'; put 'put ''YXJndW1lbnRzKX19KSx6KCJDb21waWxlRXJyb3IiLGZ1bmN0aW9uKE4pe3JldHVybiBmdW5jdGlvbihLKXtyZXR1cm4gZyhOLHRoaXMsYXJndW1lbnRzKX19KSx6KCJMaW5rRXJyb3IiLGZ1bmN0aW9uKE4pe3JldHVybiBmdW5jdGlvbihLKXtyZXR1cm4gZyhOLHRoaXMsYXJndW1lbnRzKX19''@;'; put 'put ''KSx6KCJSdW50aW1lRXJyb3IiLGZ1bmN0aW9uKE4pe3JldHVybiBmdW5jdGlvbihLKXtyZXR1cm4gZyhOLHRoaXMsYXJndW1lbnRzKX19KX0sOTYxODA6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgyODM2NyksXz15KDMzOTYzKSxnPXkoNjMzMzYpLEI9eSgxMTA4KSx3PXkoMTkx''@;'; put 'put ''NTApLFA9eSgyNjQwMCksRj15KDQ0MDM5KSxPPXkoNTg3OTUpLHo9eSg1NTU5MiksTj15KDM4ZTMpLEw9eSg1ODAxMiksSz15KDc4OTY4KS5JdGVyYXRvclByb3RvdHlwZSxVPXkoNDYzODcpLFc9eSg4ODc4OCksWT0iY29uc3RydWN0b3IiLHE9Ikl0ZXJhdG9yIixlZT1MKCJ0b1N0cmluZ1Rh''@;'; put 'put ''ZyIpLEo9VHlwZUVycm9yLG5lPV9bcV0saWU9V3x8IXcobmUpfHxuZS5wcm90b3R5cGUhPT1LfHwheihmdW5jdGlvbigpe25lKHt9KX0pLGxlPWZ1bmN0aW9uKCl7aWYoZyh0aGlzLEspLFAodGhpcyk9PT1LKXRocm93IG5ldyBKKCJBYnN0cmFjdCBjbGFzcyBJdGVyYXRvciBub3QgZGlyZWN0''@;'; put 'put ''bHkgY29uc3RydWN0YWJsZSIpfSxtZT1mdW5jdGlvbihfZSxUZSl7VT9GKEssX2Use2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gVGV9LHNldDpmdW5jdGlvbihTZSl7aWYoQih0aGlzKSx0aGlzPT09Syl0aHJvdyBuZXcgSigiWW91IGNhbid0IHJlZGVmaW5lIHRoaXMg''@;'; put 'put ''cHJvcGVydHkiKTtOKHRoaXMsX2UpP3RoaXNbX2VdPVNlOk8odGhpcyxfZSxTZSl9fSk6S1tfZV09VGV9O04oSyxlZSl8fG1lKGVlLHEpLChpZXx8IU4oSyxZKXx8S1tZXT09PU9iamVjdCkmJm1lKFksbGUpLGxlLnByb3RvdHlwZT1LLEkoe2dsb2JhbDohMCxjb25zdHJ1Y3RvcjohMCxmb3Jj''@;'; put 'put ''ZWQ6aWV9LHtJdGVyYXRvcjpsZX0pfSwzOTU5NToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDI4MzY3KSxfPXkoNDY5MjYpLGc9eSgzMDc4NyksQj15KDMxNDgzKSx3PXkoMTEwOCksUD15KDc1NDI0KSxGPXkoNjY1NDIpLHo9eSg0MTI1MikoImV2ZXJ5IixUeXBlRXJyb3IpO0ko''@;'; put 'put ''e3RhcmdldDoiSXRlcmF0b3IiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOnp9LHtldmVyeTpmdW5jdGlvbihMKXt3KHRoaXMpO3RyeXtCKEwpfWNhdGNoKFcpe0YodGhpcywidGhyb3ciLFcpfWlmKHopcmV0dXJuIF8oeix0aGlzLEwpO3ZhciBLPVAodGhpcyksVT0wO3JldHVybiFnKEssZnVu''@;'; put 'put ''Y3Rpb24oVyxZKXtpZighTChXLFUrKykpcmV0dXJuIFkoKX0se0lTX1JFQ09SRDohMCxJTlRFUlJVUFRFRDohMH0pLnN0b3BwZWR9fSl9LDkyNTgwOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMjgzNjcpLF89eSg0NjkyNiksZz15KDMxNDgzKSxCPXkoMTEwOCksdz15KDc1NDI0''@;'; put 'put ''KSxQPXkoNjk5MTcpLEY9eSg0MjkyNiksTz15KDg4Nzg4KSx6PXkoNjY1NDIpLE49eSg0MTI1MiksTD0hTyYmTigiZmlsdGVyIixUeXBlRXJyb3IpLEs9UChmdW5jdGlvbigpe2Zvcih2YXIgcSxKLFU9dGhpcy5pdGVyYXRvcixXPXRoaXMucHJlZGljYXRlLFk9dGhpcy5uZXh0Ozspe2lmKHE9''@;'; put 'put ''QihfKFksVSkpLHRoaXMuZG9uZT0hIXEuZG9uZSlyZXR1cm47aWYoRihVLFcsW0o9cS52YWx1ZSx0aGlzLmNvdW50ZXIrK10sITApKXJldHVybiBKfX0pO0koe3RhcmdldDoiSXRlcmF0b3IiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOk98fEx9LHtmaWx0ZXI6ZnVuY3Rpb24oVyl7Qih0aGlz''@;'; put 'put ''KTt0cnl7ZyhXKX1jYXRjaChZKXt6KHRoaXMsInRocm93IixZKX1yZXR1cm4gTD9fKEwsdGhpcyxXKTpuZXcgSyh3KHRoaXMpLHtwcmVkaWNhdGU6V30pfX0pfSwyNjM1NzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDI4MzY3KSxfPXkoNDY5MjYpLGc9eSgzMDc4NyksQj15KDMx''@;'; put 'put ''NDgzKSx3PXkoMTEwOCksUD15KDc1NDI0KSxGPXkoNjY1NDIpLHo9eSg0MTI1MikoImZpbmQiLFR5cGVFcnJvcik7SSh7dGFyZ2V0OiJJdGVyYXRvciIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6en0se2ZpbmQ6ZnVuY3Rpb24oTCl7dyh0aGlzKTt0cnl7QihMKX1jYXRjaChXKXtGKHRoaXMs''@;'; put 'put ''InRocm93IixXKX1pZih6KXJldHVybiBfKHosdGhpcyxMKTt2YXIgSz1QKHRoaXMpLFU9MDtyZXR1cm4gZyhLLGZ1bmN0aW9uKFcsWSl7aWYoTChXLFUrKykpcmV0dXJuIFkoVyl9LHtJU19SRUNPUkQ6ITAsSU5URVJSVVBURUQ6ITB9KS5yZXN1bHR9fSl9LDM2NTc4Oih1ZSxYLHkpPT57InVz''@;'; put 'put ''ZSBzdHJpY3QiO3ZhciBJPXkoMjgzNjcpLF89eSg0NjkyNiksZz15KDMxNDgzKSxCPXkoMTEwOCksdz15KDc1NDI0KSxQPXkoNjM2MjcpLEY9eSg2OTkxNyksTz15KDY2NTQyKSx6PXkoODg3ODgpLE49eSg0MTI1MiksTD0heiYmTigiZmxhdE1hcCIsVHlwZUVycm9yKSxLPUYoZnVuY3Rpb24o''@;'; put 'put ''KXtmb3IodmFyIFkscSxVPXRoaXMuaXRlcmF0b3IsVz10aGlzLm1hcHBlcjs7KXtpZihxPXRoaXMuaW5uZXIpdHJ5e2lmKCEoWT1CKF8ocS5uZXh0LHEuaXRlcmF0b3IpKSkuZG9uZSlyZXR1cm4gWS52YWx1ZTt0aGlzLmlubmVyPW51bGx9Y2F0Y2goZWUpe08oVSwidGhyb3ciLGVlKX1pZihZ''@;'; put 'put ''PUIoXyh0aGlzLm5leHQsVSkpLHRoaXMuZG9uZT0hIVkuZG9uZSlyZXR1cm47dHJ5e3RoaXMuaW5uZXI9UChXKFkudmFsdWUsdGhpcy5jb3VudGVyKyspLCExKX1jYXRjaChlZSl7TyhVLCJ0aHJvdyIsZWUpfX19KTtJKHt0YXJnZXQ6Ikl0ZXJhdG9yIixwcm90bzohMCxyZWFsOiEwLGZvcmNl''@;'; put 'put ''ZDp6fHxMfSx7ZmxhdE1hcDpmdW5jdGlvbihXKXtCKHRoaXMpO3RyeXtnKFcpfWNhdGNoKFkpe08odGhpcywidGhyb3ciLFkpfXJldHVybiBMP18oTCx0aGlzLFcpOm5ldyBLKHcodGhpcykse21hcHBlcjpXLGlubmVyOm51bGx9KX19KX0sMzEzNTM6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7''@;'; put 'put ''dmFyIEk9eSgyODM2NyksXz15KDQ2OTI2KSxnPXkoMzA3ODcpLEI9eSgzMTQ4Myksdz15KDExMDgpLFA9eSg3NTQyNCksRj15KDY2NTQyKSx6PXkoNDEyNTIpKCJmb3JFYWNoIixUeXBlRXJyb3IpO0koe3RhcmdldDoiSXRlcmF0b3IiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOnp9LHtmb3JF''@;'; put 'put ''YWNoOmZ1bmN0aW9uKEwpe3codGhpcyk7dHJ5e0IoTCl9Y2F0Y2goVyl7Rih0aGlzLCJ0aHJvdyIsVyl9aWYoeilyZXR1cm4gXyh6LHRoaXMsTCk7dmFyIEs9UCh0aGlzKSxVPTA7ZyhLLGZ1bmN0aW9uKFcpe0woVyxVKyspfSx7SVNfUkVDT1JEOiEwfSl9fSl9LDcxMzU0Oih1ZSxYLHkpPT57''@;'; put 'put ''InVzZSBzdHJpY3QiO3ZhciBJPXkoMjgzNjcpLF89eSg0NjkyNiksZz15KDMxNDgzKSxCPXkoMTEwOCksdz15KDc1NDI0KSxQPXkoNjk5MTcpLEY9eSg0MjkyNiksTz15KDY2NTQyKSx6PXkoNDEyNTIpLE49eSg4ODc4OCksTD0hTiYmeigibWFwIixUeXBlRXJyb3IpLEs9UChmdW5jdGlvbigp''@;'; put 'put ''e3ZhciBVPXRoaXMuaXRlcmF0b3IsVz1CKF8odGhpcy5uZXh0LFUpKTtpZighKHRoaXMuZG9uZT0hIVcuZG9uZSkpcmV0dXJuIEYoVSx0aGlzLm1hcHBlcixbVy52YWx1ZSx0aGlzLmNvdW50ZXIrK10sITApfSk7SSh7dGFyZ2V0OiJJdGVyYXRvciIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6''@;'; put 'put ''Tnx8TH0se21hcDpmdW5jdGlvbihXKXtCKHRoaXMpO3RyeXtnKFcpfWNhdGNoKFkpe08odGhpcywidGhyb3ciLFkpfXJldHVybiBMP18oTCx0aGlzLFcpOm5ldyBLKHcodGhpcykse21hcHBlcjpXfSl9fSl9LDUzMzQ4Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMjgzNjcpLF89''@;'; put 'put ''eSgzMDc4NyksZz15KDMxNDgzKSxCPXkoMTEwOCksdz15KDc1NDI0KSxQPXkoNjY1NDIpLEY9eSg0MTI1MiksTz15KDQwMjIwKSx6PXkoNTU1OTIpLE49VHlwZUVycm9yLEw9eihmdW5jdGlvbigpe1tdLmtleXMoKS5yZWR1Y2UoZnVuY3Rpb24oKXt9LHZvaWQgMCl9KSxLPSFMJiZGKCJyZWR1''@;'; put 'put ''Y2UiLE4pO0koe3RhcmdldDoiSXRlcmF0b3IiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOkx8fEt9LHtyZWR1Y2U6ZnVuY3Rpb24oVyl7Qih0aGlzKTt0cnl7ZyhXKX1jYXRjaChuZSl7UCh0aGlzLCJ0aHJvdyIsbmUpfXZhciBZPWFyZ3VtZW50cy5sZW5ndGg8MixxPVk/dm9pZCAwOmFyZ3Vt''@;'; put 'put ''ZW50c1sxXTtpZihLKXJldHVybiBPKEssdGhpcyxZP1tXXTpbVyxxXSk7dmFyIGVlPXcodGhpcyksSj0wO2lmKF8oZWUsZnVuY3Rpb24obmUpe1k/KFk9ITEscT1uZSk6cT1XKHEsbmUsSiksSisrfSx7SVNfUkVDT1JEOiEwfSksWSl0aHJvdyBuZXcgTigiUmVkdWNlIG9mIGVtcHR5IGl0ZXJh''@;'; put 'put ''dG9yIHdpdGggbm8gaW5pdGlhbCB2YWx1ZSIpO3JldHVybiBxfX0pfSw5Mzc4Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMjgzNjcpLF89eSg0NjkyNiksZz15KDMwNzg3KSxCPXkoMzE0ODMpLHc9eSgxMTA4KSxQPXkoNzU0MjQpLEY9eSg2NjU0Miksej15KDQxMjUyKSgic29t''@;'; put 'put ''ZSIsVHlwZUVycm9yKTtJKHt0YXJnZXQ6Ikl0ZXJhdG9yIixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDp6fSx7c29tZTpmdW5jdGlvbihMKXt3KHRoaXMpO3RyeXtCKEwpfWNhdGNoKFcpe0YodGhpcywidGhyb3ciLFcpfWlmKHopcmV0dXJuIF8oeix0aGlzLEwpO3ZhciBLPVAodGhpcyksVT0w''@;'; put 'put ''O3JldHVybiBnKEssZnVuY3Rpb24oVyxZKXtpZihMKFcsVSsrKSlyZXR1cm4gWSgpfSx7SVNfUkVDT1JEOiEwLElOVEVSUlVQVEVEOiEwfSkuc3RvcHBlZH19KX0sOTU0OTM6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgyODM2NyksXz15KDEyMjAyKSxnPXkoNDAyMjApLEI9eSg0''@;'; put 'put ''NjkyNiksdz15KDU4NjA3KSxQPXkoNTU1OTIpLEY9eSgxOTE1MCksTz15KDkyOTk4KSx6PXkoNzc2MzkpLE49eSg4NDUyNCksTD15KDM2NTA2KSxLPVN0cmluZyxVPV8oIkpTT04iLCJzdHJpbmdpZnkiKSxXPXcoLy4vLmV4ZWMpLFk9dygiIi5jaGFyQXQpLHE9dygiIi5jaGFyQ29kZUF0KSxl''@;'; put 'put ''ZT13KCIiLnJlcGxhY2UpLEo9dygxLi50b1N0cmluZyksbmU9L1tcdUQ4MDAtXHVERkZGXS9nLGllPS9eW1x1RDgwMC1cdURCRkZdJC8sbGU9L15bXHVEQzAwLVx1REZGRl0kLyxtZT0hTHx8UChmdW5jdGlvbigpe3ZhciBqZT1fKCJTeW1ib2wiKSgic3RyaW5naWZ5IGRldGVjdGlvbiIpO3Jl''@;'; put 'put ''dHVybiJbbnVsbF0iIT09VShbamVdKXx8Int9IiE9PVUoe2E6amV9KXx8Int9IiE9PVUoT2JqZWN0KGplKSl9KSxfZT1QKGZ1bmN0aW9uKCl7cmV0dXJuJyJcXHVkZjA2XFx1ZDgzNCInIT09VSgiXHVkZjA2XHVkODM0Iil8fCciXFx1ZGVhZCInIT09VSgiXHVkZWFkIil9KSxUZT1mdW5jdGlv''@;'; put 'put ''bihqZSxWKXt2YXIgcD16KGFyZ3VtZW50cyksYj1OKFYpO2lmKEYoYil8fHZvaWQgMCE9PWplJiYhTyhqZSkpcmV0dXJuIHBbMV09ZnVuY3Rpb24oeCxDKXtpZihGKGIpJiYoQz1CKGIsdGhpcyxLKHgpLEMpKSwhTyhDKSlyZXR1cm4gQ30sZyhVLG51bGwscCl9LFNlPWZ1bmN0aW9uKGplLFYs''@;'; put 'put ''cCl7dmFyIGI9WShwLFYtMSkseD1ZKHAsVisxKTtyZXR1cm4gVyhpZSxqZSkmJiFXKGxlLHgpfHxXKGxlLGplKSYmIVcoaWUsYik/IlxcdSIrSihxKGplLDApLDE2KTpqZX07VSYmSSh7dGFyZ2V0OiJKU09OIixzdGF0OiEwLGFyaXR5OjMsZm9yY2VkOm1lfHxfZX0se3N0cmluZ2lmeTpmdW5j''@;'; put 'put ''dGlvbihWLHAsYil7dmFyIHg9eihhcmd1bWVudHMpLEM9ZyhtZT9UZTpVLG51bGwseCk7cmV0dXJuIF9lJiYic3RyaW5nIj09dHlwZW9mIEM/ZWUoQyxuZSxTZSk6Q319KX0sNTc3MjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDI4MzY3KSxfPXkoMzA3ODcpLGc9eSg1ODc5NSk7''@;'; put 'put ''SSh7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITB9LHtmcm9tRW50cmllczpmdW5jdGlvbih3KXt2YXIgUD17fTtyZXR1cm4gXyh3LGZ1bmN0aW9uKEYsTyl7ZyhQLEYsTyl9LHtBU19FTlRSSUVTOiEwfSksUH19KX0sNjk4NzU6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgyODM2Nyks''@;'; put 'put ''Xz15KDgwMjEzKTtJKHt0YXJnZXQ6IlNldCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6IXkoNTM1MDUpKCJkaWZmZXJlbmNlIixmdW5jdGlvbih3KXtyZXR1cm4gMD09PXcuc2l6ZX0pfSx7ZGlmZmVyZW5jZTpffSl9LDE2MDkzOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMjgz''@;'; put 'put ''NjcpLF89eSg1NTU5MiksZz15KDYxODc5KTtJKHt0YXJnZXQ6IlNldCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6IXkoNTM1MDUpKCJpbnRlcnNlY3Rpb24iLGZ1bmN0aW9uKFApe3JldHVybiAyPT09UC5zaXplJiZQLmhhcygxKSYmUC5oYXMoMil9KXx8XyhmdW5jdGlvbigpe3JldHVybiIz''@;'; put 'put ''LDIiIT09U3RyaW5nKEFycmF5LmZyb20obmV3IFNldChbMSwyLDNdKS5pbnRlcnNlY3Rpb24obmV3IFNldChbMywyXSkpKSl9KX0se2ludGVyc2VjdGlvbjpnfSl9LDk1NjA4Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMjgzNjcpLF89eSg3MzYyNCk7SSh7dGFyZ2V0OiJTZXQi''@;'; put 'put ''LHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOiF5KDUzNTA1KSgiaXNEaXNqb2ludEZyb20iLGZ1bmN0aW9uKHcpe3JldHVybiF3fSl9LHtpc0Rpc2pvaW50RnJvbTpffSl9LDE2NDkzOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMjgzNjcpLF89eSg3NDgzOSk7SSh7dGFyZ2V0OiJT''@;'; put 'put ''ZXQiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOiF5KDUzNTA1KSgiaXNTdWJzZXRPZiIsZnVuY3Rpb24odyl7cmV0dXJuIHd9KX0se2lzU3Vic2V0T2Y6X30pfSw2MTkzNDoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDI4MzY3KSxfPXkoOTYwNjIpO0koe3RhcmdldDoiU2V0Iixw''@;'; put 'put ''cm90bzohMCxyZWFsOiEwLGZvcmNlZDoheSg1MzUwNSkoImlzU3VwZXJzZXRPZiIsZnVuY3Rpb24odyl7cmV0dXJuIXd9KX0se2lzU3VwZXJzZXRPZjpffSl9LDEwMTAxOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMjgzNjcpLF89eSg4NTAzOSk7SSh7dGFyZ2V0OiJTZXQiLHBy''@;'; put 'put ''b3RvOiEwLHJlYWw6ITAsZm9yY2VkOiF5KDUzNTA1KSgic3ltbWV0cmljRGlmZmVyZW5jZSIpfSx7c3ltbWV0cmljRGlmZmVyZW5jZTpffSl9LDI2ODg5Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMjgzNjcpLF89eSgyMDUwNyk7SSh7dGFyZ2V0OiJTZXQiLHByb3RvOiEwLHJl''@;'; put 'put ''YWw6ITAsZm9yY2VkOiF5KDUzNTA1KSgidW5pb24iKX0se3VuaW9uOl99KX0sMTQzNjA6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgyODM2NyksXz15KDU4NjA3KSxnPXkoODgyNzUpLEI9eSg2NDU1MCksdz15KDY4MzMyKSxQPXkoNTU1OTIpLEY9XygiIi5jaGFyQXQpO0koe3Rh''@;'; put 'put ''cmdldDoiU3RyaW5nIixwcm90bzohMCxmb3JjZWQ6UChmdW5jdGlvbigpe3JldHVybiJcdWQ4NDIiIT09Ilx1ezIwYmI3fSIuYXQoLTIpfSl9LHthdDpmdW5jdGlvbihOKXt2YXIgTD13KGcodGhpcykpLEs9TC5sZW5ndGgsVT1CKE4pLFc9VT49MD9VOksrVTtyZXR1cm4gVzwwfHxXPj1LP3Zv''@;'; put 'put ''aWQgMDpGKEwsVyl9fSl9LDE2MjI5Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMjgzNjcpLF89eSg0NjkyNiksZz15KDU4NjA3KSxCPXkoODgyNzUpLHc9eSgxOTE1MCksUD15KDMyNjMzKSxGPXkoODg4NjcpLE89eSg2ODMzMiksej15KDg2MTE1KSxOPXkoMzcwNzUpLEw9eSg5''@;'; put 'put ''NjMzOSksSz15KDU4MDEyKSxVPXkoODg3ODgpLFc9SygicmVwbGFjZSIpLFk9VHlwZUVycm9yLHE9ZygiIi5pbmRleE9mKSxlZT1nKCIiLnJlcGxhY2UpLEo9ZygiIi5zbGljZSksbmU9TWF0aC5tYXg7SSh7dGFyZ2V0OiJTdHJpbmciLHByb3RvOiEwfSx7cmVwbGFjZUFsbDpmdW5jdGlvbihs''@;'; put 'put ''ZSxtZSl7dmFyIFRlLFNlLGplLFYscCxiLHgsQyxULEgsX2U9Qih0aGlzKSxqPTAsRT0iIjtpZihQKGxlKSl7aWYoKFRlPUYobGUpKSYmKFNlPU8oQihOKGxlKSkpLCF+cShTZSwiZyIpKSl0aHJvdyBuZXcgWSgiYC5yZXBsYWNlQWxsYCBkb2VzIG5vdCBhbGxvdyBub24tZ2xvYmFsIHJlZ2V4''@;'; put 'put ''ZXMiKTtpZihqZT16KGxlLFcpKXJldHVybiBfKGplLGxlLF9lLG1lKTtpZihVJiZUZSlyZXR1cm4gZWUoTyhfZSksbGUsbWUpfWZvcihWPU8oX2UpLHA9TyhsZSksKGI9dyhtZSkpfHwobWU9TyhtZSkpLEM9bmUoMSx4PXAubGVuZ3RoKSxUPXEoVixwKTstMSE9PVQ7KUg9Yj9PKG1lKHAsVCxW''@;'; put 'put ''KSk6TChwLFYsVCxbXSx2b2lkIDAsbWUpLEUrPUooVixqLFQpK0gsaj1UK3gsVD1UK0M+Vi5sZW5ndGg/LTE6cShWLHAsVCtDKTtyZXR1cm4gajxWLmxlbmd0aCYmKEUrPUooVixqKSksRX19KX0sNDMyODc6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7eSg5NjE4MCl9LDEzOTA4Oih1ZSxYLHkp''@;'; put 'put ''PT57InVzZSBzdHJpY3QiO3koMzk1OTUpfSw2NTc0NToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt5KDkyNTgwKX0sODEyNjA6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7eSgyNjM1Nyl9LDc0OTk6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7eSgzNjU3OCl9LDI5NzA4Oih1ZSxYLHkpPT57InVz''@;'; put 'put ''ZSBzdHJpY3QiO3koMzEzNTMpfSw2NTExNzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt5KDcxMzU0KX0sNDQyMTM6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7eSg1MzM0OCl9LDIwMjkxOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3koOTM3OCl9LDY4NzY4Oih1ZSxYLHkpPT57InVzZSBzdHJp''@;'; put 'put ''Y3QiO3ZhciBJPXkoMjgzNjcpLF89eSgzMzk2MyksZz15KDc1OTYpLmNsZWFyO0koe2dsb2JhbDohMCxiaW5kOiEwLGVudW1lcmFibGU6ITAsZm9yY2VkOl8uY2xlYXJJbW1lZGlhdGUhPT1nfSx7Y2xlYXJJbW1lZGlhdGU6Z30pfSwxMDM2MzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt5KDY4''@;'; put 'put ''NzY4KSx5KDgyMzA2KX0sODIzMDY6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgyODM2NyksXz15KDMzOTYzKSxnPXkoNzU5Nikuc2V0LEI9eSg0MzI0OSksdz1fLnNldEltbWVkaWF0ZT9CKGcsITEpOmc7SSh7Z2xvYmFsOiEwLGJpbmQ6ITAsZW51bWVyYWJsZTohMCxmb3JjZWQ6''@;'; put 'put ''Xy5zZXRJbW1lZGlhdGUhPT13fSx7c2V0SW1tZWRpYXRlOnd9KX0sMzIxOTp1ZT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPUpTT04ucGFyc2UoJ3siYWVzLTEyOC1lY2IiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxMjgsIml2IjowLCJtb2RlIjoiRUNCIiwidHlwZSI6ImJsb2NrIn0sImFl''@;'; put 'put ''cy0xOTItZWNiIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTkyLCJpdiI6MCwibW9kZSI6IkVDQiIsInR5cGUiOiJibG9jayJ9LCJhZXMtMjU2LWVjYiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjI1NiwiaXYiOjAsIm1vZGUiOiJFQ0IiLCJ0eXBlIjoiYmxvY2sifSwiYWVzLTEyOC1jYmMiOnsi''@;'; put 'put ''Y2lwaGVyIjoiQUVTIiwia2V5IjoxMjgsIml2IjoxNiwibW9kZSI6IkNCQyIsInR5cGUiOiJibG9jayJ9LCJhZXMtMTkyLWNiYyI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjE5MiwiaXYiOjE2LCJtb2RlIjoiQ0JDIiwidHlwZSI6ImJsb2NrIn0sImFlcy0yNTYtY2JjIjp7ImNpcGhlciI6IkFF''@;'; put 'put ''UyIsImtleSI6MjU2LCJpdiI6MTYsIm1vZGUiOiJDQkMiLCJ0eXBlIjoiYmxvY2sifSwiYWVzMTI4Ijp7ImNpcGhlciI6IkFFUyIsImtleSI6MTI4LCJpdiI6MTYsIm1vZGUiOiJDQkMiLCJ0eXBlIjoiYmxvY2sifSwiYWVzMTkyIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTkyLCJpdiI6MTYs''@;'; put 'put ''Im1vZGUiOiJDQkMiLCJ0eXBlIjoiYmxvY2sifSwiYWVzMjU2Ijp7ImNpcGhlciI6IkFFUyIsImtleSI6MjU2LCJpdiI6MTYsIm1vZGUiOiJDQkMiLCJ0eXBlIjoiYmxvY2sifSwiYWVzLTEyOC1jZmIiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxMjgsIml2IjoxNiwibW9kZSI6IkNGQiIsInR5''@;'; put 'put ''cGUiOiJzdHJlYW0ifSwiYWVzLTE5Mi1jZmIiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxOTIsIml2IjoxNiwibW9kZSI6IkNGQiIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTI1Ni1jZmIiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoyNTYsIml2IjoxNiwibW9kZSI6IkNGQiIsInR5cGUiOiJzdHJl''@;'; put 'put ''YW0ifSwiYWVzLTEyOC1jZmI4Ijp7ImNpcGhlciI6IkFFUyIsImtleSI6MTI4LCJpdiI6MTYsIm1vZGUiOiJDRkI4IiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMTkyLWNmYjgiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxOTIsIml2IjoxNiwibW9kZSI6IkNGQjgiLCJ0eXBlIjoic3RyZWFtIn0s''@;'; put 'put ''ImFlcy0yNTYtY2ZiOCI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjI1NiwiaXYiOjE2LCJtb2RlIjoiQ0ZCOCIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTEyOC1jZmIxIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTI4LCJpdiI6MTYsIm1vZGUiOiJDRkIxIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMt''@;'; put 'put ''MTkyLWNmYjEiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxOTIsIml2IjoxNiwibW9kZSI6IkNGQjEiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0yNTYtY2ZiMSI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjI1NiwiaXYiOjE2LCJtb2RlIjoiQ0ZCMSIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTEyOC1v''@;'; put 'put ''ZmIiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxMjgsIml2IjoxNiwibW9kZSI6Ik9GQiIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTE5Mi1vZmIiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxOTIsIml2IjoxNiwibW9kZSI6Ik9GQiIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTI1Ni1vZmIiOnsiY2lw''@;'; put 'put ''aGVyIjoiQUVTIiwia2V5IjoyNTYsIml2IjoxNiwibW9kZSI6Ik9GQiIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTEyOC1jdHIiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxMjgsIml2IjoxNiwibW9kZSI6IkNUUiIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTE5Mi1jdHIiOnsiY2lwaGVyIjoiQUVT''@;'; put 'put ''Iiwia2V5IjoxOTIsIml2IjoxNiwibW9kZSI6IkNUUiIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTI1Ni1jdHIiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoyNTYsIml2IjoxNiwibW9kZSI6IkNUUiIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTEyOC1nY20iOnsiY2lwaGVyIjoiQUVTIiwia2V5Ijox''@;'; put 'put ''MjgsIml2IjoxMiwibW9kZSI6IkdDTSIsInR5cGUiOiJhdXRoIn0sImFlcy0xOTItZ2NtIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTkyLCJpdiI6MTIsIm1vZGUiOiJHQ00iLCJ0eXBlIjoiYXV0aCJ9LCJhZXMtMjU2LWdjbSI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjI1NiwiaXYiOjEyLCJt''@;'; put 'put ''b2RlIjoiR0NNIiwidHlwZSI6ImF1dGgifX0nKX0sNjI5NTE6dWU9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz1KU09OLnBhcnNlKCd7InNoYTIyNFdpdGhSU0FFbmNyeXB0aW9uIjp7InNpZ24iOiJyc2EiLCJoYXNoIjoic2hhMjI0IiwiaWQiOiIzMDJkMzAwZDA2MDk2MDg2NDgwMTY1MDMw''@;'; put 'put ''NDAyMDQwNTAwMDQxYyJ9LCJSU0EtU0hBMjI0Ijp7InNpZ24iOiJlY2RzYS9yc2EiLCJoYXNoIjoic2hhMjI0IiwiaWQiOiIzMDJkMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDQwNTAwMDQxYyJ9LCJzaGEyNTZXaXRoUlNBRW5jcnlwdGlvbiI6eyJzaWduIjoicnNhIiwiaGFzaCI6InNoYTI1''@;'; put 'put ''NiIsImlkIjoiMzAzMTMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjAxMDUwMDA0MjAifSwiUlNBLVNIQTI1NiI6eyJzaWduIjoiZWNkc2EvcnNhIiwiaGFzaCI6InNoYTI1NiIsImlkIjoiMzAzMTMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjAxMDUwMDA0MjAifSwic2hhMzg0V2l0aFJTQUVuY3J5''@;'; put 'put ''cHRpb24iOnsic2lnbiI6InJzYSIsImhhc2giOiJzaGEzODQiLCJpZCI6IjMwNDEzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwMjA1MDAwNDMwIn0sIlJTQS1TSEEzODQiOnsic2lnbiI6ImVjZHNhL3JzYSIsImhhc2giOiJzaGEzODQiLCJpZCI6IjMwNDEzMDBkMDYwOTYwODY0ODAxNjUwMzA0''@;'; put 'put ''MDIwMjA1MDAwNDMwIn0sInNoYTUxMldpdGhSU0FFbmNyeXB0aW9uIjp7InNpZ24iOiJyc2EiLCJoYXNoIjoic2hhNTEyIiwiaWQiOiIzMDUxMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDMwNTAwMDQ0MCJ9LCJSU0EtU0hBNTEyIjp7InNpZ24iOiJlY2RzYS9yc2EiLCJoYXNoIjoic2hhNTEy''@;'; put 'put ''IiwiaWQiOiIzMDUxMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDMwNTAwMDQ0MCJ9LCJSU0EtU0hBMSI6eyJzaWduIjoicnNhIiwiaGFzaCI6InNoYTEiLCJpZCI6IjMwMjEzMDA5MDYwNTJiMGUwMzAyMWEwNTAwMDQxNCJ9LCJlY2RzYS13aXRoLVNIQTEiOnsic2lnbiI6ImVjZHNhIiwiaGFz''@;'; put 'put ''aCI6InNoYTEiLCJpZCI6IiJ9LCJzaGEyNTYiOnsic2lnbiI6ImVjZHNhIiwiaGFzaCI6InNoYTI1NiIsImlkIjoiIn0sInNoYTIyNCI6eyJzaWduIjoiZWNkc2EiLCJoYXNoIjoic2hhMjI0IiwiaWQiOiIifSwic2hhMzg0Ijp7InNpZ24iOiJlY2RzYSIsImhhc2giOiJzaGEzODQiLCJpZCI6''@;'; put 'put ''IiJ9LCJzaGE1MTIiOnsic2lnbiI6ImVjZHNhIiwiaGFzaCI6InNoYTUxMiIsImlkIjoiIn0sIkRTQS1TSEEiOnsic2lnbiI6ImRzYSIsImhhc2giOiJzaGExIiwiaWQiOiIifSwiRFNBLVNIQTEiOnsic2lnbiI6ImRzYSIsImhhc2giOiJzaGExIiwiaWQiOiIifSwiRFNBIjp7InNpZ24iOiJk''@;'; put 'put ''c2EiLCJoYXNoIjoic2hhMSIsImlkIjoiIn0sIkRTQS1XSVRILVNIQTIyNCI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InNoYTIyNCIsImlkIjoiIn0sIkRTQS1TSEEyMjQiOnsic2lnbiI6ImRzYSIsImhhc2giOiJzaGEyMjQiLCJpZCI6IiJ9LCJEU0EtV0lUSC1TSEEyNTYiOnsic2lnbiI6ImRz''@;'; put 'put ''YSIsImhhc2giOiJzaGEyNTYiLCJpZCI6IiJ9LCJEU0EtU0hBMjU2Ijp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhMjU2IiwiaWQiOiIifSwiRFNBLVdJVEgtU0hBMzg0Ijp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhMzg0IiwiaWQiOiIifSwiRFNBLVNIQTM4NCI6eyJzaWduIjoiZHNhIiwi''@;'; put 'put ''aGFzaCI6InNoYTM4NCIsImlkIjoiIn0sIkRTQS1XSVRILVNIQTUxMiI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InNoYTUxMiIsImlkIjoiIn0sIkRTQS1TSEE1MTIiOnsic2lnbiI6ImRzYSIsImhhc2giOiJzaGE1MTIiLCJpZCI6IiJ9LCJEU0EtUklQRU1EMTYwIjp7InNpZ24iOiJkc2EiLCJo''@;'; put 'put ''YXNoIjoicm1kMTYwIiwiaWQiOiIifSwicmlwZW1kMTYwV2l0aFJTQSI6eyJzaWduIjoicnNhIiwiaGFzaCI6InJtZDE2MCIsImlkIjoiMzAyMTMwMDkwNjA1MmIyNDAzMDIwMTA1MDAwNDE0In0sIlJTQS1SSVBFTUQxNjAiOnsic2lnbiI6InJzYSIsImhhc2giOiJybWQxNjAiLCJpZCI6IjMw''@;'; put 'put ''MjEzMDA5MDYwNTJiMjQwMzAyMDEwNTAwMDQxNCJ9LCJtZDVXaXRoUlNBRW5jcnlwdGlvbiI6eyJzaWduIjoicnNhIiwiaGFzaCI6Im1kNSIsImlkIjoiMzAyMDMwMGMwNjA4MmE4NjQ4ODZmNzBkMDIwNTA1MDAwNDEwIn0sIlJTQS1NRDUiOnsic2lnbiI6InJzYSIsImhhc2giOiJtZDUiLCJp''@;'; put 'put ''ZCI6IjMwMjAzMDBjMDYwODJhODY0ODg2ZjcwZDAyMDUwNTAwMDQxMCJ9fScpfSw2NDU4OTp1ZT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPUpTT04ucGFyc2UoJ3siMS4zLjEzMi4wLjEwIjoic2VjcDI1NmsxIiwiMS4zLjEzMi4wLjMzIjoicDIyNCIsIjEuMi44NDAuMTAwNDUuMy4xLjEi''@;'; put 'put ''OiJwMTkyIiwiMS4yLjg0MC4xMDA0NS4zLjEuNyI6InAyNTYiLCIxLjMuMTMyLjAuMzQiOiJwMzg0IiwiMS4zLjEzMi4wLjM1IjoicDUyMSJ9Jyl9LDIzMjQxOnVlPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9SlNPTi5wYXJzZSgneyJtb2RwMSI6eyJnZW4iOiIwMiIsInByaW1lIjoiZmZm''@;'; put 'put ''ZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5''@;'; put 'put ''YTYzYTM2MjBmZmZmZmZmZmZmZmZmZmZmIn0sIm1vZHAyIjp7ImdlbiI6IjAyIiwicHJpbWUiOiJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0''@;'; put 'put ''MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjM3ZWQ2YjBiZmY1Y2I2ZjQwNmI3ZWRlZTM4NmJmYjVhODk5ZmE1YWU5ZjI0MTE3YzRiMWZlNjQ5Mjg2NjUxZWNlNjUzODFmZmZmZmZmZmZmZmZmZmZmIn0sIm1vZHA1Ijp7ImdlbiI6''@;'; put 'put ''IjAyIiwicHJpbWUiOiJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3''@;'; put 'put ''NjYyNWU3ZWM2ZjQ0YzQyZTlhNjM3ZWQ2YjBiZmY1Y2I2ZjQwNmI3ZWRlZTM4NmJmYjVhODk5ZmE1YWU5ZjI0MTE3YzRiMWZlNjQ5Mjg2NjUxZWNlNDViM2RjMjAwN2NiOGExNjNiZjA1OThkYTQ4MzYxYzU1ZDM5YTY5MTYzZmE4ZmQyNGNmNWY4MzY1NWQyM2RjYTNhZDk2MWM2MmYzNTYyMDg1''@;'; put 'put ''NTJiYjllZDUyOTA3NzA5Njk2NmQ2NzBjMzU0ZTRhYmM5ODA0ZjE3NDZjMDhjYTIzNzMyN2ZmZmZmZmZmZmZmZmZmZmYifSwibW9kcDE0Ijp7ImdlbiI6IjAyIiwicHJpbWUiOiJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0''@;'; put 'put ''MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjM3ZWQ2YjBiZmY1Y2I2ZjQwNmI3ZWRlZTM4NmJmYjVhODk5ZmE1YWU5ZjI0MTE3YzRiMWZlNjQ5Mjg2''@;'; put 'put ''NjUxZWNlNDViM2RjMjAwN2NiOGExNjNiZjA1OThkYTQ4MzYxYzU1ZDM5YTY5MTYzZmE4ZmQyNGNmNWY4MzY1NWQyM2RjYTNhZDk2MWM2MmYzNTYyMDg1NTJiYjllZDUyOTA3NzA5Njk2NmQ2NzBjMzU0ZTRhYmM5ODA0ZjE3NDZjMDhjYTE4MjE3YzMyOTA1ZTQ2MmUzNmNlM2JlMzllNzcyYzE4''@;'; put 'put ''MGU4NjAzOWIyNzgzYTJlYzA3YTI4ZmI1YzU1ZGYwNmY0YzUyYzlkZTJiY2JmNjk1NTgxNzE4Mzk5NTQ5N2NlYTk1NmFlNTE1ZDIyNjE4OThmYTA1MTAxNTcyOGU1YThhYWNhYTY4ZmZmZmZmZmZmZmZmZmZmZiJ9LCJtb2RwMTUiOnsiZ2VuIjoiMDIiLCJwcmltZSI6ImZmZmZmZmZmZmZmZmZm''@;'; put 'put ''ZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2MzdlZDZiMGJm''@;'; put 'put ''ZjVjYjZmNDA2YjdlZGVlMzg2YmZiNWE4OTlmYTVhZTlmMjQxMTdjNGIxZmU2NDkyODY2NTFlY2U0NWIzZGMyMDA3Y2I4YTE2M2JmMDU5OGRhNDgzNjFjNTVkMzlhNjkxNjNmYThmZDI0Y2Y1ZjgzNjU1ZDIzZGNhM2FkOTYxYzYyZjM1NjIwODU1MmJiOWVkNTI5MDc3MDk2OTY2ZDY3MGMzNTRl''@;'; put 'put ''NGFiYzk4MDRmMTc0NmMwOGNhMTgyMTdjMzI5MDVlNDYyZTM2Y2UzYmUzOWU3NzJjMTgwZTg2MDM5YjI3ODNhMmVjMDdhMjhmYjVjNTVkZjA2ZjRjNTJjOWRlMmJjYmY2OTU1ODE3MTgzOTk1NDk3Y2VhOTU2YWU1MTVkMjI2MTg5OGZhMDUxMDE1NzI4ZTVhOGFhYWM0MmRhZDMzMTcwZDA0NTA3''@;'; put 'put ''YTMzYTg1NTIxYWJkZjFjYmE2NGVjZmI4NTA0NThkYmVmMGE4YWVhNzE1NzVkMDYwYzdkYjM5NzBmODVhNmUxZTRjN2FiZjVhZThjZGIwOTMzZDcxZThjOTRlMDRhMjU2MTlkY2VlM2QyMjYxYWQyZWU2YmYxMmZmYTA2ZDk4YTA4NjRkODc2MDI3MzNlYzg2YTY0NTIxZjJiMTgxNzdiMjAwY2Ji''@;'; put 'put ''ZTExNzU3N2E2MTVkNmM3NzA5ODhjMGJhZDk0NmUyMDhlMjRmYTA3NGU1YWIzMTQzZGI1YmZjZTBmZDEwOGU0YjgyZDEyMGE5M2FkMmNhZmZmZmZmZmZmZmZmZmZmZiJ9LCJtb2RwMTYiOnsiZ2VuIjoiMDIiLCJwcmltZSI6ImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYy''@;'; put 'put ''OGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2MzdlZDZiMGJmZjVjYjZmNDA2YjdlZGVlMzg2YmZiNWE4''@;'; put 'put ''OTlmYTVhZTlmMjQxMTdjNGIxZmU2NDkyODY2NTFlY2U0NWIzZGMyMDA3Y2I4YTE2M2JmMDU5OGRhNDgzNjFjNTVkMzlhNjkxNjNmYThmZDI0Y2Y1ZjgzNjU1ZDIzZGNhM2FkOTYxYzYyZjM1NjIwODU1MmJiOWVkNTI5MDc3MDk2OTY2ZDY3MGMzNTRlNGFiYzk4MDRmMTc0NmMwOGNhMTgyMTdj''@;'; put 'put ''MzI5MDVlNDYyZTM2Y2UzYmUzOWU3NzJjMTgwZTg2MDM5YjI3ODNhMmVjMDdhMjhmYjVjNTVkZjA2ZjRjNTJjOWRlMmJjYmY2OTU1ODE3MTgzOTk1NDk3Y2VhOTU2YWU1MTVkMjI2MTg5OGZhMDUxMDE1NzI4ZTVhOGFhYWM0MmRhZDMzMTcwZDA0NTA3YTMzYTg1NTIxYWJkZjFjYmE2NGVjZmI4''@;'; put 'put ''NTA0NThkYmVmMGE4YWVhNzE1NzVkMDYwYzdkYjM5NzBmODVhNmUxZTRjN2FiZjVhZThjZGIwOTMzZDcxZThjOTRlMDRhMjU2MTlkY2VlM2QyMjYxYWQyZWU2YmYxMmZmYTA2ZDk4YTA4NjRkODc2MDI3MzNlYzg2YTY0NTIxZjJiMTgxNzdiMjAwY2JiZTExNzU3N2E2MTVkNmM3NzA5ODhjMGJh''@;'; put 'put ''ZDk0NmUyMDhlMjRmYTA3NGU1YWIzMTQzZGI1YmZjZTBmZDEwOGU0YjgyZDEyMGE5MjEwODAxMWE3MjNjMTJhNzg3ZTZkNzg4NzE5YTEwYmRiYTViMjY5OWMzMjcxODZhZjRlMjNjMWE5NDY4MzRiNjE1MGJkYTI1ODNlOWNhMmFkNDRjZThkYmJiYzJkYjA0ZGU4ZWY5MmU4ZWZjMTQxZmJlY2Fh''@;'; put 'put ''NjI4N2M1OTQ3NGU2YmMwNWQ5OWIyOTY0ZmEwOTBjM2EyMjMzYmExODY1MTViZTdlZDFmNjEyOTcwY2VlMmQ3YWZiODFiZGQ3NjIxNzA0ODFjZDAwNjkxMjdkNWIwNWFhOTkzYjRlYTk4OGQ4ZmRkYzE4NmZmYjdkYzkwYTZjMDhmNGRmNDM1YzkzNDA2MzE5OWZmZmZmZmZmZmZmZmZmZmYifSwi''@;'; put 'put ''bW9kcDE3Ijp7ImdlbiI6IjAyIiwicHJpbWUiOiJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZk''@;'; put 'put ''NmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjM3ZWQ2YjBiZmY1Y2I2ZjQwNmI3ZWRlZTM4NmJmYjVhODk5ZmE1YWU5ZjI0MTE3YzRiMWZlNjQ5Mjg2NjUxZWNlNDViM2RjMjAwN2NiOGExNjNiZjA1OThkYTQ4MzYxYzU1ZDM5YTY5MTYzZmE4ZmQyNGNmNWY4MzY1NWQyM2RjYTNh''@;'; put 'put ''ZDk2MWM2MmYzNTYyMDg1NTJiYjllZDUyOTA3NzA5Njk2NmQ2NzBjMzU0ZTRhYmM5ODA0ZjE3NDZjMDhjYTE4MjE3YzMyOTA1ZTQ2MmUzNmNlM2JlMzllNzcyYzE4MGU4NjAzOWIyNzgzYTJlYzA3YTI4ZmI1YzU1ZGYwNmY0YzUyYzlkZTJiY2JmNjk1NTgxNzE4Mzk5NTQ5N2NlYTk1NmFlNTE1''@;'; put 'put ''ZDIyNjE4OThmYTA1MTAxNTcyOGU1YThhYWFjNDJkYWQzMzE3MGQwNDUwN2EzM2E4NTUyMWFiZGYxY2JhNjRlY2ZiODUwNDU4ZGJlZjBhOGFlYTcxNTc1ZDA2MGM3ZGIzOTcwZjg1YTZlMWU0YzdhYmY1YWU4Y2RiMDkzM2Q3MWU4Yzk0ZTA0YTI1NjE5ZGNlZTNkMjI2MWFkMmVlNmJmMTJmZmEw''@;'; put 'put ''NmQ5OGEwODY0ZDg3NjAyNzMzZWM4NmE2NDUyMWYyYjE4MTc3YjIwMGNiYmUxMTc1NzdhNjE1ZDZjNzcwOTg4YzBiYWQ5NDZlMjA4ZTI0ZmEwNzRlNWFiMzE0M2RiNWJmY2UwZmQxMDhlNGI4MmQxMjBhOTIxMDgwMTFhNzIzYzEyYTc4N2U2ZDc4ODcxOWExMGJkYmE1YjI2OTljMzI3MTg2YWY0''@;'; put 'put ''ZTIzYzFhOTQ2ODM0YjYxNTBiZGEyNTgzZTljYTJhZDQ0Y2U4ZGJiYmMyZGIwNGRlOGVmOTJlOGVmYzE0MWZiZWNhYTYyODdjNTk0NzRlNmJjMDVkOTliMjk2NGZhMDkwYzNhMjIzM2JhMTg2NTE1YmU3ZWQxZjYxMjk3MGNlZTJkN2FmYjgxYmRkNzYyMTcwNDgxY2QwMDY5MTI3ZDViMDVhYTk5''@;'; put 'put ''M2I0ZWE5ODhkOGZkZGMxODZmZmI3ZGM5MGE2YzA4ZjRkZjQzNWM5MzQwMjg0OTIzNmMzZmFiNGQyN2M3MDI2YzFkNGRjYjI2MDI2NDZkZWM5NzUxZTc2M2RiYTM3YmRmOGZmOTQwNmFkOWU1MzBlZTVkYjM4MmY0MTMwMDFhZWIwNmE1M2VkOTAyN2Q4MzExNzk3MjdiMDg2NWE4OTE4ZGEzZWRi''@;'; put 'put ''ZWJjZjliMTRlZDQ0Y2U2Y2JhY2VkNGJiMWJkYjdmMTQ0N2U2Y2MyNTRiMzMyMDUxNTEyYmQ3YWY0MjZmYjhmNDAxMzc4Y2QyYmY1OTgzY2EwMWM2NGI5MmVjZjAzMmVhMTVkMTcyMWQwM2Y0ODJkN2NlNmU3NGZlZjZkNTVlNzAyZjQ2OTgwYzgyYjVhODQwMzE5MDBiMWM5ZTU5ZTdjOTdmYmVj''@;'; put 'put ''N2U4ZjMyM2E5N2E3ZTM2Y2M4OGJlMGYxZDQ1YjdmZjU4NWFjNTRiZDQwN2IyMmI0MTU0YWFjYzhmNmQ3ZWJmNDhlMWQ4MTRjYzVlZDIwZjgwMzdlMGE3OTcxNWVlZjI5YmUzMjgwNmExZDU4YmI3YzVkYTc2ZjU1MGFhM2Q4YTFmYmZmMGViMTljY2IxYTMxM2Q1NWNkYTU2YzllYzJlZjI5NjMy''@;'; put 'put ''Mzg3ZmU4ZDc2ZTNjMDQ2ODA0M2U4ZjY2M2Y0ODYwZWUxMmJmMmQ1YjBiNzQ3NGQ2ZTY5NGY5MWU2ZGNjNDAyNGZmZmZmZmZmZmZmZmZmZmYifSwibW9kcDE4Ijp7ImdlbiI6IjAyIiwicHJpbWUiOiJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAy''@;'; put 'put ''NGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjM3ZWQ2YjBiZmY1Y2I2ZjQwNmI3ZWRlZTM4NmJmYjVhODk5ZmE1YWU5ZjI0MTE3''@;'; put 'put ''YzRiMWZlNjQ5Mjg2NjUxZWNlNDViM2RjMjAwN2NiOGExNjNiZjA1OThkYTQ4MzYxYzU1ZDM5YTY5MTYzZmE4ZmQyNGNmNWY4MzY1NWQyM2RjYTNhZDk2MWM2MmYzNTYyMDg1NTJiYjllZDUyOTA3NzA5Njk2NmQ2NzBjMzU0ZTRhYmM5ODA0ZjE3NDZjMDhjYTE4MjE3YzMyOTA1ZTQ2MmUzNmNl''@;'; put 'put ''M2JlMzllNzcyYzE4MGU4NjAzOWIyNzgzYTJlYzA3YTI4ZmI1YzU1ZGYwNmY0YzUyYzlkZTJiY2JmNjk1NTgxNzE4Mzk5NTQ5N2NlYTk1NmFlNTE1ZDIyNjE4OThmYTA1MTAxNTcyOGU1YThhYWFjNDJkYWQzMzE3MGQwNDUwN2EzM2E4NTUyMWFiZGYxY2JhNjRlY2ZiODUwNDU4ZGJlZjBhOGFl''@;'; put 'put ''YTcxNTc1ZDA2MGM3ZGIzOTcwZjg1YTZlMWU0YzdhYmY1YWU4Y2RiMDkzM2Q3MWU4Yzk0ZTA0YTI1NjE5ZGNlZTNkMjI2MWFkMmVlNmJmMTJmZmEwNmQ5OGEwODY0ZDg3NjAyNzMzZWM4NmE2NDUyMWYyYjE4MTc3YjIwMGNiYmUxMTc1NzdhNjE1ZDZjNzcwOTg4YzBiYWQ5NDZlMjA4ZTI0ZmEw''@;'; put 'put ''NzRlNWFiMzE0M2RiNWJmY2UwZmQxMDhlNGI4MmQxMjBhOTIxMDgwMTFhNzIzYzEyYTc4N2U2ZDc4ODcxOWExMGJkYmE1YjI2OTljMzI3MTg2YWY0ZTIzYzFhOTQ2ODM0YjYxNTBiZGEyNTgzZTljYTJhZDQ0Y2U4ZGJiYmMyZGIwNGRlOGVmOTJlOGVmYzE0MWZiZWNhYTYyODdjNTk0NzRlNmJj''@;'; put 'put ''MDVkOTliMjk2NGZhMDkwYzNhMjIzM2JhMTg2NTE1YmU3ZWQxZjYxMjk3MGNlZTJkN2FmYjgxYmRkNzYyMTcwNDgxY2QwMDY5MTI3ZDViMDVhYTk5M2I0ZWE5ODhkOGZkZGMxODZmZmI3ZGM5MGE2YzA4ZjRkZjQzNWM5MzQwMjg0OTIzNmMzZmFiNGQyN2M3MDI2YzFkNGRjYjI2MDI2NDZkZWM5''@;'; put 'put ''NzUxZTc2M2RiYTM3YmRmOGZmOTQwNmFkOWU1MzBlZTVkYjM4MmY0MTMwMDFhZWIwNmE1M2VkOTAyN2Q4MzExNzk3MjdiMDg2NWE4OTE4ZGEzZWRiZWJjZjliMTRlZDQ0Y2U2Y2JhY2VkNGJiMWJkYjdmMTQ0N2U2Y2MyNTRiMzMyMDUxNTEyYmQ3YWY0MjZmYjhmNDAxMzc4Y2QyYmY1OTgzY2Ew''@;'; put 'put ''MWM2NGI5MmVjZjAzMmVhMTVkMTcyMWQwM2Y0ODJkN2NlNmU3NGZlZjZkNTVlNzAyZjQ2OTgwYzgyYjVhODQwMzE5MDBiMWM5ZTU5ZTdjOTdmYmVjN2U4ZjMyM2E5N2E3ZTM2Y2M4OGJlMGYxZDQ1YjdmZjU4NWFjNTRiZDQwN2IyMmI0MTU0YWFjYzhmNmQ3ZWJmNDhlMWQ4MTRjYzVlZDIwZjgw''@;'; put 'put ''MzdlMGE3OTcxNWVlZjI5YmUzMjgwNmExZDU4YmI3YzVkYTc2ZjU1MGFhM2Q4YTFmYmZmMGViMTljY2IxYTMxM2Q1NWNkYTU2YzllYzJlZjI5NjMyMzg3ZmU4ZDc2ZTNjMDQ2ODA0M2U4ZjY2M2Y0ODYwZWUxMmJmMmQ1YjBiNzQ3NGQ2ZTY5NGY5MWU2ZGJlMTE1OTc0YTM5MjZmMTJmZWU1ZTQz''@;'; put 'put ''ODc3N2NiNmE5MzJkZjhjZDhiZWM0ZDA3M2I5MzFiYTNiYzgzMmI2OGQ5ZGQzMDA3NDFmYTdiZjhhZmM0N2VkMjU3NmY2OTM2YmE0MjQ2NjNhYWI2MzljNWFlNGY1NjgzNDIzYjQ3NDJiZjFjOTc4MjM4ZjE2Y2JlMzlkNjUyZGUzZmRiOGJlZmM4NDhhZDkyMjIyMmUwNGE0MDM3YzA3MTNlYjU3''@;'; put 'put ''YTgxYTIzZjBjNzM0NzNmYzY0NmNlYTMwNmI0YmNiYzg4NjJmODM4NWRkZmE5ZDRiN2ZhMmMwODdlODc5NjgzMzAzZWQ1YmRkM2EwNjJiM2NmNWIzYTI3OGE2NmQyYTEzZjgzZjQ0ZjgyZGRmMzEwZWUwNzRhYjZhMzY0NTk3ZTg5OWEwMjU1ZGMxNjRmMzFjYzUwODQ2ODUxZGY5YWI0ODE5NWRl''@;'; put 'put ''ZDdlYTFiMWQ1MTBiZDdlZTc0ZDczZmFmMzZiYzMxZWNmYTI2ODM1OTA0NmY0ZWI4NzlmOTI0MDA5NDM4YjQ4MWM2Y2Q3ODg5YTAwMmVkNWVlMzgyYmM5MTkwZGE2ZmMwMjZlNDc5NTU4ZTQ0NzU2NzdlOWFhOWUzMDUwZTI3NjU2OTRkZmM4MWY1NmU4ODBiOTZlNzE2MGM5ODBkZDk4ZWRkM2Rm''@;'; put 'put ''ZmZmZmZmZmZmZmZmZmZmZiJ9fScpfSwxNjM2OnVlPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9e3JFOiI2LjYuMSJ9fSw0MzI2Nzp1ZT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPUpTT04ucGFyc2UoJ1tbIjg3NDAiLCJcdTQzZjBcdTRjMzJcdTQ2MDNcdTQ1YTZcdTQ1NzhcdXsyNzI2''@;'; put 'put ''N31cdTRkNzdcdTQ1YjNcdXsyN2NiMX1cdTRjZTJcdXsyN2NjNX1cdTNiOTVcdTQ3MzZcdTQ3NDRcdTRjNDdcdTRjNDBcdXsyNDJiZn1cdXsyMzYxN31cdXsyNzM1Mn1cdXsyNmU4Yn1cdXsyNzBkMn1cdTRjNTdcdXsyYTM1MX1cdTQ3NGZcdTQ1ZGFcdTRjODVcdXsyN2M2Y31cdTRkMDdcdTRh''@;'; put 'put ''YTRcdTQ2YTFcdXsyNmIyM31cdTcyMjVcdXsyNWE1NH1cdXsyMWE2M31cdXsyM2UwNn1cdXsyM2Y2MX1cdTY2NGRcdTU2ZmIiXSxbIjg3NjciLCJcdTdkOTVcdTU5MWRcdXsyOGJiOX1cdTNkZjRcdTk3MzRcdXsyN2JlZn1cdTViZGJcdXsyMWQ1ZX1cdTVhYTRcdTM2MjVcdXsyOWViMH1cdTVh''@;'; put 'put ''ZDFcdTViYjdcdTVjZmNcdTY3NmVcdTg1OTNcdXsyOTk0NX1cdTc0NjFcdTc0OWRcdTM4NzVcdXsyMWQ1M31cdXsyMzY5ZX1cdXsyNjAyMX1cdTNlZWMiXSxbIjg3YTEiLCJcdXsyNThkZX1cdTNhZjVcdTdhZmNcdTlmOTdcdXsyNDE2MX1cdXsyODkwZH1cdXsyMzFlYX1cdXsyMGE4YX1cdXsy''@;'; put 'put ''MzI1ZX1cdTQzMGFcdTg0ODRcdTlmOTZcdTk0MmZcdTQ5MzBcdTg2MTNcdTU4OTZcdTk3NGFcdTkyMThcdTc5ZDBcdTdhMzJcdTY2NjBcdTZhMjlcdTg4OWRcdTc0NGNcdTdiYzVcdTY3ODJcdTdhMmNcdTUyNGZcdTkwNDZcdTM0ZTZcdTczYzRcdXsyNWRiOX1cdTc0YzZcdTlmYzdcdTU3YjNc''@;'; put 'put ''dTQ5MmZcdTU0NGNcdTQxMzFcdXsyMzY4ZX1cdTU4MThcdTdhNzJcdXsyN2I2NX1cdThiOGZcdTQ2YWVcdXsyNmU4OH1cdTQxODFcdXsyNWQ5OX1cdTdiYWVcdXsyMjRiY31cdTlmYzhcdXsyMjRjMX1cdXsyMjRjOX1cdXsyMjRjY31cdTlmYzlcdTg1MDRcdXsyMzViYn1cdTQwYjRcdTlmY2Fc''@;'; put 'put ''dTQ0ZTFcdXsyYWRmZn1cdTYyYzFcdTcwNmVcdTlmY2IiXSxbIjg4NDAiLCJcdTMxYzAiLDQsIlx1ezIwMTBjfVx1MzFjNVx1ezIwMGQxfVx1ezIwMGNkfVx1MzFjNlx1MzFjN1x1ezIwMGNifVx1ezIxZmU4fVx1MzFjOFx1ezIwMGNhfVx1MzFjOVx1MzFjYVx1MzFjYlx1MzFjY1x1ezIwMTBl''@;'; put 'put ''fVx1MzFjZFx1MzFjZVx1MDEwMFx4YzFcdTAxY2RceGMwXHUwMTEyXHhjOVx1MDExYVx4YzhcdTAxNGNceGQzXHUwMWQxXHhkMlx1MGZmZlx4Y2FcdTAzMDRcdTFlYmVcdTBmZmZceGNhXHUwMzBjXHUxZWMwXHhjYVx1MDEwMVx4ZTFcdTAxY2VceGUwXHUwMjUxXHUwMTEzXHhlOVx1MDExYlx4''@;'; put 'put ''ZThcdTAxMmJceGVkXHUwMWQwXHhlY1x1MDE0ZFx4ZjNcdTAxZDJceGYyXHUwMTZiXHhmYVx1MDFkNFx4ZjlcdTAxZDZcdTAxZDhcdTAxZGEiXSxbIjg4YTEiLCJcdTAxZGNceGZjXHUwZmZmXHhlYVx1MDMwNFx1MWViZlx1MGZmZlx4ZWFcdTAzMGNcdTFlYzFceGVhXHUwMjYxXHUyM2RhXHUy''@;'; put 'put ''M2RiIl0sWyI4OTQwIiwiXHV7MmEzYTl9XHV7MjExNDV9Il0sWyI4OTQzIiwiXHU2NTBhIl0sWyI4OTQ2IiwiXHU0ZTNkXHU2ZWRkXHU5ZDRlXHU5MWRmIl0sWyI4OTRjIiwiXHV7Mjc3MzV9XHU2NDkxXHU0ZjFhXHU0ZjI4XHU0ZmE4XHU1MTU2XHU1MTc0XHU1MTljXHU1MWU0XHU1MmExXHU1''@;'; put 'put ''MmE4XHU1MzNiXHU1MzRlXHU1M2QxXHU1M2Q4XHU1NmUyXHU1OGYwXHU1OTA0XHU1OTA3XHU1OTMyXHU1OTM0XHU1YjY2XHU1YjllXHU1YjlmXHU1YzlhXHU1ZTg2XHU2MDNiXHU2NTg5XHU2N2ZlXHU2ODA0XHU2ODY1XHU2ZDRlXHU3MGJjXHU3NTM1XHU3ZWE0XHU3ZWFjXHU3ZWJhXHU3ZWM3''@;'; put 'put ''XHU3ZWNmXHU3ZWRmXHU3ZjA2XHU3ZjM3XHU4MjdhXHU4MmNmXHU4MzZmXHU4OWM2XHU4YmJlXHU4YmUyXHU4ZjY2XHU4ZjY3XHU4ZjZlIl0sWyI4OWExIiwiXHU3NDExXHU3Y2ZjXHU3ZGNkXHU2OTQ2XHU3YWM5XHU1MjI3Il0sWyI4OWFiIiwiXHU5MThjXHU3OGI4XHU5MTVlXHU4MGJjIl0s''@;'; put 'put ''WyI4OWIwIiwiXHU4ZDBiXHU4MGY2XHV7MjA5ZTd9Il0sWyI4OWI1IiwiXHU4MDlmXHU5ZWM3XHU0Y2NkXHU5ZGM5XHU5ZTBjXHU0YzNlXHV7MjlkZjZ9XHV7MjcwMGV9XHU5ZTBhXHV7MmExMzN9XHUzNWMxIl0sWyI4OWMxIiwiXHU2ZTlhXHU4MjNlXHU3NTE5Il0sWyI4OWM1IiwiXHU0OTEx''@;'; put 'put ''XHU5YTZjXHU5YThmXHU5Zjk5XHU3OTg3XHV7Mjg0NmN9XHV7MjFkY2F9XHV7MjA1ZDB9XHV7MjJhZTZ9XHU0ZTI0XHU0ZTgxXHU0ZTgwXHU0ZTg3XHU0ZWJmXHU0ZWViXHU0ZjM3XHUzNDRjXHU0ZmJkXHUzZTQ4XHU1MDAzXHU1MDg4XHUzNDdkXHUzNDkzXHUzNGE1XHU1MTg2XHU1OTA1XHU1''@;'; put 'put ''MWRiXHU1MWZjXHU1MjA1XHU0ZTg5XHU1Mjc5XHU1MjkwXHU1MzI3XHUzNWM3XHU1M2E5XHUzNTUxXHU1M2IwXHUzNTUzXHU1M2MyXHU1NDIzXHUzNTZkXHUzNTcyXHUzNjgxXHU1NDkzXHU1NGEzXHU1NGI0XHU1NGI5XHU1NGQwXHU1NGVmXHU1NTE4XHU1NTIzXHU1NTI4XHUzNTk4XHU1NTNm''@;'; put 'put ''XHUzNWE1XHUzNWJmXHU1NWQ3XHUzNWM1Il0sWyI4YTQwIiwiXHV7MjdkODR9XHU1NTI1Il0sWyI4YTQzIiwiXHV7MjBjNDJ9XHV7MjBkMTV9XHV7MjUxMmJ9XHU1NTkwXHV7MjJjYzZ9XHUzOWVjXHV7MjAzNDF9XHU4ZTQ2XHV7MjRkYjh9XHV7Mjk0ZTV9XHU0MDUzXHV7MjgwYmV9XHU3Nzdh''@;'; put 'put ''XHV7MjJjMzh9XHUzYTM0XHU0N2Q1XHV7MjgxNWR9XHV7MjY5ZjJ9XHV7MjRkZWF9XHU2NGRkXHV7MjBkN2N9XHV7MjBmYjR9XHV7MjBjZDV9XHV7MjEwZjR9XHU2NDhkXHU4ZTdlXHV7MjBlOTZ9XHV7MjBjMGJ9XHV7MjBmNjR9XHV7MjJjYTl9XHV7MjgyNTZ9XHV7MjQ0ZDN9Il0sWyI4YTY0''@;'; put 'put ''IiwiXHV7MjBkNDZ9XHV7MjlhNGR9XHV7MjgwZTl9XHU0N2Y0XHV7MjRlYTd9XHV7MjJjYzJ9XHU5YWIyXHUzYTY3XHV7Mjk1ZjR9XHUzZmVkXHUzNTA2XHV7MjUyYzd9XHV7Mjk3ZDR9XHV7Mjc4Yzh9XHV7MjJkNDR9XHU5ZDZlXHU5ODE1Il0sWyI4YTc2IiwiXHU0M2Q5XHV7MjYwYTV9XHU2''@;'; put 'put ''NGI0XHU1NGUzXHV7MjJkNGN9XHV7MjJiY2F9XHV7MjEwNzd9XHUzOWZiXHV7MjEwNmZ9Il0sWyI4YWExIiwiXHV7MjY2ZGF9XHV7MjY3MTZ9XHV7Mjc5YTB9XHU2NGVhXHV7MjUwNTJ9XHV7MjBjNDN9XHU4ZTY4XHV7MjIxYTF9XHV7MjhiNGN9XHV7MjA3MzF9Il0sWyI4YWFjIiwiXHU0ODBi''@;'; put 'put ''XHV7MjAxYTl9XHUzZmZhXHU1ODczXHV7MjJkOGR9Il0sWyI4YWIyIiwiXHV7MjQ1Yzh9XHV7MjA0ZmN9XHV7MjYwOTd9XHV7MjBmNGN9XHV7MjBkOTZ9XHU1NTc5XHU0MGJiXHU0M2JhIl0sWyI4YWJiIiwiXHU0YWI0XHV7MjJhNjZ9XHV7MjEwOWR9XHU4MWFhXHU5OGY1XHV7MjBkOWN9XHU2''@;'; put 'put ''Mzc5XHUzOWZlXHV7MjI3NzV9XHU4ZGMwXHU1NmExXHU2NDdjXHUzZTQzIl0sWyI4YWM5IiwiXHV7MmE2MDF9XHV7MjBlMDl9XHV7MjJhY2Z9XHV7MjJjYzl9Il0sWyI4YWNlIiwiXHV7MjEwYzh9XHV7MjM5YzJ9XHUzOTkyXHUzYTA2XHV7MjgyOWJ9XHUzNTc4XHV7MjVlNDl9XHV7MjIwYzd9''@;'; put 'put ''XHU1NjUyXHV7MjBmMzF9XHV7MjJjYjJ9XHV7Mjk3MjB9XHUzNGJjXHU2YzNkXHV7MjRlM2J9Il0sWyI4YWRmIiwiXHV7Mjc1NzR9XHV7MjJlOGJ9XHV7MjIyMDh9XHV7MmE2NWJ9XHV7MjhjY2R9XHV7MjBlN2F9XHV7MjBjMzR9XHV7MjY4MWN9XHU3ZjkzXHV7MjEwY2Z9XHV7MjI4MDN9XHV7''@;'; put 'put ''MjI5Mzl9XHUzNWZiXHV7MjUxZTN9XHV7MjBlOGN9XHV7MjBmOGR9XHV7MjBlYWF9XHUzZjkzXHV7MjBmMzB9XHV7MjBkNDd9XHV7MjExNGZ9XHV7MjBlNGN9Il0sWyI4YWY2IiwiXHV7MjBlYWJ9XHV7MjBiYTl9XHV7MjBkNDh9XHV7MjEwYzB9XHV7MjExM2R9XHUzZmY5XHV7MjI2OTZ9XHU2''@;'; put 'put ''NDMyXHV7MjBmYWR9Il0sWyI4YjQwIiwiXHV7MjMzZjR9XHV7Mjc2Mzl9XHV7MjJiY2V9XHV7MjBkN2V9XHV7MjBkN2Z9XHV7MjJjNTF9XHV7MjJjNTV9XHUzYTE4XHV7MjBlOTh9XHV7MjEwYzd9XHV7MjBmMmV9XHV7MmE2MzJ9XHV7MjZiNTB9XHV7MjhjZDJ9XHV7MjhkOTl9XHV7MjhjY2F9''@;'; put 'put ''XHU5NWFhXHU1NGNjXHU4MmM0XHU1NWI5Il0sWyI4YjU1IiwiXHV7MjllYzN9XHU5YzI2XHU5YWI2XHV7Mjc3NWV9XHV7MjJkZWV9XHU3MTQwXHU4MTZkXHU4MGVjXHU1YzFjXHV7MjY1NzJ9XHU4MTM0XHUzNzk3XHU1MzVmXHV7MjgwYmR9XHU5MWI2XHV7MjBlZmF9XHV7MjBlMGZ9XHV7MjBl''@;'; put 'put ''Nzd9XHV7MjBlZmJ9XHUzNWRkXHV7MjRkZWJ9XHUzNjA5XHV7MjBjZDZ9XHU1NmFmXHV7MjI3YjV9XHV7MjEwYzl9XHV7MjBlMTB9XHV7MjBlNzh9XHV7MjEwNzh9XHV7MjExNDh9XHV7MjgyMDd9XHV7MjE0NTV9XHV7MjBlNzl9XHV7MjRlNTB9XHV7MjJkYTR9XHU1YTU0XHV7MjEwMWR9XHV7''@;'; put 'put ''MjEwMWV9XHV7MjEwZjV9XHV7MjEwZjZ9XHU1NzljXHV7MjBlMTF9Il0sWyI4YmExIiwiXHV7Mjc2OTR9XHV7MjgyY2R9XHV7MjBmYjV9XHV7MjBlN2J9XHV7MjUxN2V9XHUzNzAzXHV7MjBmYjZ9XHV7MjExODB9XHV7MjUyZDh9XHV7MmEyYmR9XHV7MjQ5ZGF9XHV7MjE4M2F9XHV7MjQxNzd9''@;'; put 'put ''XHV7MjgyN2N9XHU1ODk5XHU1MjY4XHUzNjFhXHV7MjU3M2R9XHU3YmIyXHU1YjY4XHU0ODAwXHU0YjJjXHU5ZjI3XHU0OWU3XHU5YzFmXHU5YjhkXHV7MjViNzR9XHV7MjMxM2R9XHU1NWZiXHUzNWYyXHU1Njg5XHU0ZTI4XHU1OTAyXHV7MjFiYzF9XHV7MmY4Nzh9XHU5NzUxXHV7MjAwODZ9''@;'; put 'put ''XHU0ZTViXHU0ZWJiXHUzNTNlXHU1YzIzXHU1ZjUxXHU1ZmM0XHUzOGZhXHU2MjRjXHU2NTM1XHU2YjdhXHU2YzM1XHU2YzNhXHU3MDZjXHU3MjJiXHU0ZTJjXHU3MmFkXHV7MjQ4ZTl9XHU3ZjUyXHU3OTNiXHU3Y2Y5XHU3ZjUzXHV7MjYyNmF9XHUzNGMxIl0sWyI4YmRlIiwiXHV7MjYzNGJ9''@;'; put 'put ''XHU4MDAyXHU4MDgwXHV7MjY2MTJ9XHV7MjY5NTF9XHU1MzVkXHU4ODY0XHU4OWMxXHV7Mjc4YjJ9XHU4YmEwXHU4ZDFkXHU5NDg1XHU5NTc4XHU5NTdmXHU5NWU4XHV7MjhlMGZ9XHU5N2U2XHU5ODc1XHU5OGNlXHU5OGRlXHU5OTYzXHV7Mjk4MTB9XHU5YzdjXHU5ZTFmXHU5ZWM0XHU2YjZm''@;'; put 'put ''XHVmOTA3XHU0ZTM3XHV7MjAwODd9XHU5NjFkXHU2MjM3XHU5NGEyIl0sWyI4YzQwIiwiXHU1MDNiXHU2ZGZlXHV7MjljNzN9XHU5ZmE2XHUzZGM5XHU4ODhmXHV7MjQxNGV9XHU3MDc3XHU1Y2Y1XHU0YjIwXHV7MjUxY2R9XHUzNTU5XHV7MjVkMzB9XHU2MTIyXHV7MjhhMzJ9XHU4ZmE3XHU5''@;'; put 'put ''MWY2XHU3MTkxXHU2NzE5XHU3M2JhXHV7MjMyODF9XHV7MmExMDd9XHUzYzhiXHV7MjE5ODB9XHU0YjEwXHU3OGU0XHU3NDAyXHU1MWFlXHV7Mjg3MGZ9XHU0MDA5XHU2YTYzXHV7MmEyYmF9XHU0MjIzXHU4NjBmXHV7MjBhNmZ9XHU3YTJhXHV7Mjk5NDd9XHV7MjhhZWF9XHU5NzU1XHU3MDRk''@;'; put 'put ''XHU1MzI0XHV7MjIwN2V9XHU5M2Y0XHU3NmQ5XHV7Mjg5ZTN9XHU5ZmE3XHU3N2RkXHU0ZWEzXHU0ZmYwXHU1MGJjXHU0ZTJmXHU0ZjE3XHU5ZmE4XHU1NDM0XHU3ZDhiXHU1ODkyXHU1OGQwXHV7MjFkYjZ9XHU1ZTkyXHU1ZTk5XHU1ZmMyXHV7MjI3MTJ9XHU2NThiIl0sWyI4Y2ExIiwiXHV7''@;'; put 'put ''MjMzZjl9XHU2OTE5XHU2YTQzXHV7MjNjNjN9XHU2Y2ZmIl0sWyI4Y2E3IiwiXHU3MjAwXHV7MjQ1MDV9XHU3MzhjXHUzZWRiXHV7MjRhMTN9XHU1YjE1XHU3NGI5XHU4YjgzXHV7MjVjYTR9XHV7MjU2OTV9XHU3YTkzXHU3YmVjXHU3Y2MzXHU3ZTZjXHU4MmY4XHU4NTk3XHU5ZmE5XHU4ODkw''@;'; put 'put ''XHU5ZmFhXHU4ZWI5XHU5ZmFiXHU4ZmNmXHU4NTVmXHU5OWUwXHU5MjIxXHU5ZmFjXHV7MjhkYjl9XHV7MjE0M2Z9XHU0MDcxXHU0MmEyXHU1YTFhIl0sWyI4Y2M5IiwiXHU5ODY4XHU2NzZiXHU0Mjc2XHU1NzNkIl0sWyI4Y2NlIiwiXHU4NWQ2XHV7MjQ5N2J9XHU4MmJmXHV7MjcxMGR9XHU0''@;'; put 'put ''YzgxXHV7MjZkNzR9XHU1ZDdiXHV7MjZiMTV9XHV7MjZmYmV9XHU5ZmFkXHU5ZmFlXHU1Yjk2XHU5ZmFmXHU2NmU3XHU3ZTViXHU2ZTU3XHU3OWNhXHUzZDg4XHU0NGMzXHV7MjMyNTZ9XHV7MjI3OTZ9XHU0MzlhXHU0NTM2Il0sWyI4Y2U2IiwiXHU1Y2Q1XHV7MjNiMWF9XHU4YWY5XHU1Yzc4''@;'; put 'put ''XHUzZDEyXHV7MjM1NTF9XHU1ZDc4XHU5ZmIyXHU3MTU3XHU0NTU4XHV7MjQwZWN9XHV7MjFlMjN9XHU0Yzc3XHUzOTc4XHUzNDRhXHV7MjAxYTR9XHV7MjZjNDF9XHU4YWNjXHU0ZmI0XHV7MjAyMzl9XHU1OWJmXHU4MTZjXHU5ODU2XHV7Mjk4ZmF9XHU1ZjNiIl0sWyI4ZDQwIiwiXHV7MjBi''@;'; put 'put ''OWZ9Il0sWyI4ZDQyIiwiXHV7MjIxYzF9XHV7Mjg5NmR9XHU0MTAyXHU0NmJiXHV7MjkwNzl9XHUzZjA3XHU5ZmIzXHV7MmExYjV9XHU0MGY4XHUzN2Q2XHU0NmY3XHV7MjZjNDZ9XHU0MTdjXHV7Mjg2YjJ9XHV7MjczZmZ9XHU0NTZkXHUzOGQ0XHV7MjU0OWF9XHU0NTYxXHU0NTFiXHU0ZDg5''@;'; put 'put ''XHU0YzdiXHU0ZDc2XHU0NWVhXHUzZmM4XHV7MjRiMGZ9XHUzNjYxXHU0NGRlXHU0NGJkXHU0MWVkXHU1ZDNlXHU1ZDQ4XHU1ZDU2XHUzZGZjXHUzODBmXHU1ZGE0XHU1ZGI5XHUzODIwXHUzODM4XHU1ZTQyXHU1ZWJkXHU1ZjI1XHU1ZjgzXHUzOTA4XHUzOTE0XHUzOTNmXHUzOTRkXHU2MGQ3''@;'; put 'put ''XHU2MTNkXHU1Y2U1XHUzOTg5XHU2MWI3XHU2MWI5XHU2MWNmXHUzOWI4XHU2MjJjXHU2MjkwXHU2MmU1XHU2MzE4XHUzOWY4XHU1NmIxIl0sWyI4ZGExIiwiXHUzYTAzXHU2M2UyXHU2M2ZiXHU2NDA3XHU2NDVhXHUzYTRiXHU2NGMwXHU1ZDE1XHU1NjIxXHU5ZjlmXHUzYTk3XHU2NTg2XHUz''@;'; put 'put ''YWJkXHU2NWZmXHU2NjUzXHUzYWYyXHU2NjkyXHUzYjIyXHU2NzE2XHUzYjQyXHU2N2E0XHU2ODAwXHUzYjU4XHU2ODRhXHU2ODg0XHUzYjcyXHUzYjcxXHUzYjdiXHU2OTA5XHU2OTQzXHU3MjVjXHU2OTY0XHU2OTlmXHU2OTg1XHUzYmJjXHU2OWQ2XHUzYmRkXHU2YTY1XHU2YTc0XHU2YTcx''@;'; put 'put ''XHU2YTgyXHUzYmVjXHU2YTk5XHUzYmYyXHU2YWFiXHU2YWI1XHU2YWQ0XHU2YWY2XHU2YjgxXHU2YmMxXHU2YmVhXHU2Yzc1XHU2Y2FhXHUzY2NiXHU2ZDAyXHU2ZDA2XHU2ZDI2XHU2ZDgxXHUzY2VmXHU2ZGE0XHU2ZGIxXHU2ZTE1XHU2ZTE4XHU2ZTI5XHU2ZTg2XHV7Mjg5YzB9XHU2ZWJi''@;'; put 'put ''XHU2ZWUyXHU2ZWRhXHU5ZjdmXHU2ZWU4XHU2ZWU5XHU2ZjI0XHU2ZjM0XHUzZDQ2XHV7MjNmNDF9XHU2ZjgxXHU2ZmJlXHUzZDZhXHUzZDc1XHU3MWI3XHU1Yzk5XHUzZDhhXHU3MDJjXHUzZDkxXHU3MDUwXHU3MDU0XHU3MDZmXHU3MDdmXHU3MDg5XHV7MjAzMjV9XHU0M2MxXHUzNWYxXHV7''@;'; put 'put ''MjBlZDh9Il0sWyI4ZTQwIiwiXHV7MjNlZDd9XHU1N2JlXHV7MjZlZDN9XHU3MTNlXHV7MjU3ZTB9XHUzNjRlXHU2OWEyXHV7MjhiZTl9XHU1Yjc0XHU3YTQ5XHV7MjU4ZTF9XHV7Mjk0ZDl9XHU3YTY1XHU3YTdkXHV7MjU5YWN9XHU3YWJiXHU3YWIwXHU3YWMyXHU3YWMzXHU3MWQxXHV7MjY0''@;'; put 'put ''OGR9XHU0MWNhXHU3YWRhXHU3YWRkXHU3YWVhXHU0MWVmXHU1NGIyXHV7MjVjMDF9XHU3YjBiXHU3YjU1XHU3YjI5XHV7MjUzMGV9XHV7MjVjZmV9XHU3YmEyXHU3YjZmXHU4MzljXHV7MjViYjR9XHV7MjZjN2Z9XHU3YmQwXHU4NDIxXHU3YjkyXHU3YmI4XHV7MjVkMjB9XHUzZGFkXHV7MjVj''@;'; put 'put ''NjV9XHU4NDkyXHU3YmZhXHU3YzA2XHU3YzM1XHV7MjVjYzF9XHU3YzQ0XHU3YzgzXHV7MjQ4ODJ9XHU3Y2E2XHU2NjdkXHV7MjQ1Nzh9XHU3Y2M5XHU3Y2M3XHU3Y2U2XHU3Yzc0XHU3Y2YzXHU3Y2Y1XHU3Y2NlIl0sWyI4ZWExIiwiXHU3ZTY3XHU0NTFkXHV7MjZlNDR9XHU3ZDVkXHV7MjZl''@;'; put 'put ''ZDZ9XHU3NDhkXHU3ZDg5XHU3ZGFiXHU3MTM1XHU3ZGIzXHU3ZGQyXHV7MjQwNTd9XHV7MjYwMjl9XHU3ZGU0XHUzZDEzXHU3ZGY1XHV7MjE3Zjl9XHU3ZGU1XHV7MjgzNmR9XHU3ZTFkXHV7MjYxMjF9XHV7MjYxNWF9XHU3ZTZlXHU3ZTkyXHU0MzJiXHU5NDZjXHU3ZTI3XHU3ZjQwXHU3ZjQx''@;'; put 'put ''XHU3ZjQ3XHU3OTM2XHV7MjYyZDB9XHU5OWUxXHU3Zjk3XHV7MjYzNTF9XHU3ZmEzXHV7MjE2NjF9XHV7MjAwNjh9XHU0NTVjXHV7MjM3NjZ9XHU0NTAzXHV7MjgzM2F9XHU3ZmZhXHV7MjY0ODl9XHU4MDA1XHU4MDA4XHU4MDFkXHU4MDI4XHU4MDJmXHV7MmEwODd9XHV7MjZjYzN9XHU4MDNi''@;'; put 'put ''XHU4MDNjXHU4MDYxXHV7MjI3MTR9XHU0OTg5XHV7MjY2MjZ9XHV7MjNkZTN9XHV7MjY2ZTh9XHU2NzI1XHU4MGE3XHV7MjhhNDh9XHU4MTA3XHU4MTFhXHU1OGIwXHV7MjI2ZjZ9XHU2YzdmXHV7MjY0OTh9XHV7MjRmYjh9XHU2NGU3XHV7MjE0OGF9XHU4MjE4XHV7MjE4NWV9XHU2YTUzXHV7''@;'; put 'put ''MjRhNjV9XHV7MjRhOTV9XHU0NDdhXHU4MjI5XHV7MjBiMGR9XHV7MjZhNTJ9XHV7MjNkN2V9XHU0ZmY5XHV7MjE0ZmR9XHU4NGUyXHU4MzYyXHV7MjZiMGF9XHV7MjQ5YTd9XHV7MjM1MzB9XHV7MjE3NzN9XHV7MjNkZjh9XHU4MmFhXHU2OTFiXHV7MmY5OTR9XHU0MWRiIl0sWyI4ZjQwIiwi''@;'; put 'put ''XHU4NTRiXHU4MmQwXHU4MzFhXHV7MjBlMTZ9XHV7MjE3YjR9XHUzNmMxXHV7MjMxN2R9XHV7MjM1NWF9XHU4MjdiXHU4MmUyXHU4MzE4XHV7MjNlOGJ9XHV7MjZkYTN9XHV7MjZiMDV9XHV7MjZiOTd9XHV7MjM1Y2V9XHUzZGJmXHU4MzFkXHU1NWVjXHU4Mzg1XHU0NTBiXHV7MjZkYTV9XHU4''@;'; put 'put ''M2FjXHU4M2MxXHU4M2QzXHUzNDdlXHV7MjZlZDR9XHU2YTU3XHU4NTVhXHUzNDk2XHV7MjZlNDJ9XHV7MjJlZWZ9XHU4NDU4XHV7MjViZTR9XHU4NDcxXHUzZGQzXHU0NGU0XHU2YWE3XHU4NDRhXHV7MjNjYjV9XHU3OTU4XHU4NGE4XHV7MjZiOTZ9XHV7MjZlNzd9XHV7MjZlNDN9XHU4NGRl''@;'; put 'put ''XHU4NDBmXHU4MzkxXHU0NGEwXHU4NDkzXHU4NGU0XHV7MjVjOTF9XHU0MjQwXHV7MjVjYzB9XHU0NTQzXHU4NTM0XHU1YWYyXHV7MjZlOTl9XHU0NTI3XHU4NTczXHU0NTE2XHU2N2JmXHU4NjE2Il0sWyI4ZmExIiwiXHV7Mjg2MjV9XHV7Mjg2M2J9XHU4NWMxXHV7MjcwODh9XHU4NjAyXHV7''@;'; put 'put ''MjE1ODJ9XHV7MjcwY2R9XHV7MmY5YjJ9XHU0NTZhXHU4NjI4XHUzNjQ4XHV7MjE4YTJ9XHU1M2Y3XHV7MjczOWF9XHU4NjdlXHU4NzcxXHV7MmEwZjh9XHU4N2VlXHV7MjJjMjd9XHU4N2IxXHU4N2RhXHU4ODBmXHU1NjYxXHU4NjZjXHU2ODU2XHU0NjBmXHU4ODQ1XHU4ODQ2XHV7Mjc1ZTB9''@;'; put 'put ''XHV7MjNkYjl9XHV7Mjc1ZTR9XHU4ODVlXHU4ODljXHU0NjViXHU4OGI0XHU4OGI1XHU2M2MxXHU4OGM1XHU3Nzc3XHV7Mjc3MGZ9XHU4OTg3XHU4OThhXHU4OWE2XHU4OWE5XHU4OWE3XHU4OWJjXHV7MjhhMjV9XHU4OWU3XHV7Mjc5MjR9XHV7MjdhYmR9XHU4YTljXHU3NzkzXHU5MWZlXHU4''@;'; put 'put ''YTkwXHV7MjdhNTl9XHU3YWU5XHV7MjdiM2F9XHV7MjNmOGZ9XHU0NzEzXHV7MjdiMzh9XHU3MTdjXHU4YjBjXHU4YjFmXHV7MjU0MzB9XHV7MjU1NjV9XHU4YjNmXHU4YjRjXHU4YjRkXHU4YWE5XHV7MjRhN2F9XHU4YjkwXHU4YjliXHU4YWFmXHV7MjE2ZGZ9XHU0NjE1XHU4ODRmXHU4Yzli''@;'; put 'put ''XHV7MjdkNTR9XHV7MjdkOGZ9XHV7MmY5ZDR9XHUzNzI1XHV7MjdkNTN9XHU4Y2Q2XHV7MjdkOTh9XHV7MjdkYmR9XHU4ZDEyXHU4ZDAzXHV7MjE5MTB9XHU4Y2RiXHU3MDVjXHU4ZDExXHV7MjRjYzl9XHUzZWQwXHU4ZDc3Il0sWyI5MDQwIiwiXHU4ZGE5XHV7MjgwMDJ9XHV7MjEwMTR9XHV7''@;'; put 'put ''MjQ5OGF9XHUzYjdjXHV7MjgxYmN9XHV7MjcxMGN9XHU3YWU3XHU4ZWFkXHU4ZWI2XHU4ZWMzXHU5MmQ0XHU4ZjE5XHU4ZjJkXHV7MjgzNjV9XHV7Mjg0MTJ9XHU4ZmE1XHU5MzAzXHV7MmEyOWZ9XHV7MjBhNTB9XHU4ZmIzXHU0OTJhXHV7Mjg5ZGV9XHV7Mjg1M2R9XHV7MjNkYmJ9XHU1ZWY4''@;'; put 'put ''XHV7MjMyNjJ9XHU4ZmY5XHV7MmEwMTR9XHV7Mjg2YmN9XHV7Mjg1MDF9XHV7MjIzMjV9XHUzOTgwXHV7MjZlZDd9XHU5MDM3XHV7Mjg1M2N9XHV7MjdhYmV9XHU5MDYxXHV7Mjg1NmN9XHV7Mjg2MGJ9XHU5MGE4XHV7Mjg3MTN9XHU5MGM0XHV7Mjg2ZTZ9XHU5MGFlXHU5MGZkXHU5MTY3XHUz''@;'; put 'put ''YWYwXHU5MWE5XHU5MWM0XHU3Y2FjXHV7Mjg5MzN9XHV7MjFlODl9XHU5MjBlXHU2YzlmXHU5MjQxXHU5MjYyXHV7MjU1Yjl9XHU5MmI5XHV7MjhhYzZ9XHV7MjNjOWJ9XHV7MjhiMGN9XHV7MjU1ZGJ9Il0sWyI5MGExIiwiXHV7MjBkMzF9XHU5MzJjXHU5MzZiXHV7MjhhZTF9XHV7MjhiZWJ9''@;'; put 'put ''XHU3MDhmXHU1YWMzXHV7MjhhZTJ9XHV7MjhhZTV9XHU0OTY1XHU5MjQ0XHV7MjhiZWN9XHV7MjhjMzl9XHV7MjhiZmZ9XHU5MzczXHU5NDViXHU4ZWJjXHU5NTg1XHU5NWE2XHU5NDI2XHU5NWEwXHU2ZmY2XHU0MmI5XHV7MjI2N2F9XHV7Mjg2ZDh9XHV7MjEyN2N9XHV7MjNlMmV9XHU0OWRm''@;'; put 'put ''XHU2YzFjXHU5NjdiXHU5Njk2XHU0MTZjXHU5NmEzXHV7MjZlZDV9XHU2MWRhXHU5NmI2XHU3OGY1XHV7MjhhZTB9XHU5NmJkXHU1M2NjXHU0OWExXHV7MjZjYjh9XHV7MjAyNzR9XHV7MjY0MTB9XHV7MjkwYWZ9XHV7MjkwZTV9XHV7MjRhZDF9XHV7MjE5MTV9XHV7MjMzMGF9XHU5NzMxXHU4''@;'; put 'put ''NjQyXHU5NzM2XHU0YTBmXHU0NTNkXHU0NTg1XHV7MjRhZTl9XHU3MDc1XHU1YjQxXHU5NzFiXHU5NzVjXHV7MjkxZDV9XHU5NzU3XHU1YjRhXHV7MjkxZWJ9XHU5NzVmXHU5NDI1XHU1MGQwXHV7MjMwYjd9XHV7MjMwYmN9XHU5Nzg5XHU5NzlmXHU5N2IxXHU5N2JlXHU5N2MwXHU5N2QyXHU5''@;'; put 'put ''N2UwXHV7MjU0NmN9XHU5N2VlXHU3NDFjXHV7Mjk0MzN9XHU5N2ZmXHU5N2Y1XHV7Mjk0MWR9XHV7Mjc5N2F9XHU0YWQxXHU5ODM0XHU5ODMzXHU5ODRiXHU5ODY2XHUzYjBlXHV7MjcxNzV9XHUzZDUxXHV7MjA2MzB9XHV7MjQxNWN9Il0sWyI5MTQwIiwiXHV7MjU3MDZ9XHU5OGNhXHU5OGI3''@;'; put 'put ''XHU5OGM4XHU5OGM3XHU0YWZmXHV7MjZkMjd9XHV7MjE2ZDN9XHU1NWIwXHU5OGUxXHU5OGU2XHU5OGVjXHU5Mzc4XHU5OTM5XHV7MjRhMjl9XHU0YjcyXHV7Mjk4NTd9XHV7Mjk5MDV9XHU5OWY1XHU5YTBjXHU5YTNiXHU5YTEwXHU5YTU4XHV7MjU3MjV9XHUzNmM0XHV7MjkwYjF9XHV7Mjli''@;'; put 'put ''ZDV9XHU5YWUwXHU5YWUyXHV7MjliMDV9XHU5YWY0XHU0YzBlXHU5YjE0XHU5YjJkXHV7Mjg2MDB9XHU1MDM0XHU5YjM0XHV7MjY5YTh9XHUzOGMzXHV7MjMwN2R9XHU5YjUwXHU5YjQwXHV7MjlkM2V9XHU1YTQ1XHV7MjE4NjN9XHU5YjhlXHV7MjQyNGJ9XHU5YzAyXHU5YmZmXHU5YzBjXHV7''@;'; put 'put ''MjllNjh9XHU5ZGQ0XHV7MjlmYjd9XHV7MmExOTJ9XHV7MmExYWJ9XHV7MmEwZTF9XHV7MmExMjN9XHV7MmExZGZ9XHU5ZDdlXHU5ZDgzXHV7MmExMzR9XHU5ZTBlXHU2ODg4Il0sWyI5MWExIiwiXHU5ZGM0XHV7MjIxNWJ9XHV7MmExOTN9XHV7MmEyMjB9XHV7MjE5M2J9XHV7MmEyMzN9XHU5''@;'; put 'put ''ZDM5XHV7MmEwYjl9XHV7MmEyYjR9XHU5ZTkwXHU5ZTk1XHU5ZTllXHU5ZWEyXHU0ZDM0XHU5ZWFhXHU5ZWFmXHV7MjQzNjR9XHU5ZWMxXHUzYjYwXHUzOWU1XHUzZDFkXHU0ZjMyXHUzN2JlXHV7MjhjMmJ9XHU5ZjAyXHU5ZjA4XHU0Yjk2XHU5NDI0XHV7MjZkYTJ9XHU5ZjE3XHU5ZjE2XHU5''@;'; put 'put ''ZjM5XHU1NjlmXHU1NjhhXHU5ZjQ1XHU5OWI4XHV7MjkwOGJ9XHU5N2YyXHU4NDdmXHU5ZjYyXHU5ZjY5XHU3YWRjXHU5ZjhlXHU3MjE2XHU0YmJlXHV7MjQ5NzV9XHV7MjQ5YmJ9XHU3MTc3XHV7MjQ5Zjh9XHV7MjQzNDh9XHV7MjRhNTF9XHU3MzllXHV7MjhiZGF9XHV7MjE4ZmF9XHU3OTlm''@;'; put 'put ''XHV7Mjg5N2V9XHV7MjhlMzZ9XHU5MzY5XHU5M2YzXHV7MjhhNDR9XHU5MmVjXHU5MzgxXHU5M2NiXHV7Mjg5NmN9XHV7MjQ0Yjl9XHU3MjE3XHUzZWViXHU3NzcyXHU3YTQzXHU3MGQwXHV7MjQ0NzN9XHV7MjQzZjh9XHU3MTdlXHV7MjE3ZWZ9XHU3MGEzXHV7MjE4YmV9XHV7MjM1OTl9XHUz''@;'; put 'put ''ZWM3XHV7MjE4ODV9XHV7MjU0MmZ9XHV7MjE3Zjh9XHUzNzIyXHV7MjE2ZmJ9XHV7MjE4Mzl9XHUzNmUxXHV7MjE3NzR9XHV7MjE4ZDF9XHV7MjVmNGJ9XHUzNzIzXHV7MjE2YzB9XHU1NzViXHV7MjRhMjV9XHV7MjEzZmV9XHV7MjEyYTh9Il0sWyI5MjQwIiwiXHV7MjEzYzZ9XHV7MjE0YjZ9''@;'; put 'put ''XHU4NTAzXHV7MjM2YTZ9XHU4NTAzXHU4NDU1XHV7MjQ5OTR9XHV7MjcxNjV9XHV7MjNlMzF9XHV7MjU1NWN9XHV7MjNlZmJ9XHV7MjcwNTJ9XHU0NGY0XHV7MjM2ZWV9XHV7Mjk5OWR9XHV7MjZmMjZ9XHU2N2Y5XHUzNzMzXHUzYzE1XHUzZGU3XHU1ODZjXHV7MjE5MjJ9XHU2ODEwXHU0MDU3''@;'; put 'put ''XHV7MjM3M2Z9XHV7MjQwZTF9XHV7MjQwOGJ9XHV7MjQxMGZ9XHV7MjZjMjF9XHU1NGNiXHU1NjllXHV7MjY2YjF9XHU1NjkyXHV7MjBmZGZ9XHV7MjBiYTh9XHV7MjBlMGR9XHU5M2M2XHV7MjhiMTN9XHU5MzljXHU0ZWY4XHU1MTJiXHUzODE5XHV7MjQ0MzZ9XHU0ZWJjXHV7MjA0NjV9XHV7''@;'; put 'put ''MjAzN2Z9XHU0ZjRiXHU0ZjhhXHV7MjU2NTF9XHU1YTY4XHV7MjAxYWJ9XHV7MjAzY2J9XHUzOTk5XHV7MjAzMGF9XHV7MjA0MTR9XHUzNDM1XHU0ZjI5XHV7MjAyYzB9XHV7MjhlYjN9XHV7MjAyNzV9XHU4YWRhXHV7MjAyMGN9XHU0ZTk4Il0sWyI5MmExIiwiXHU1MGNkXHU1MTBkXHU0ZmEy''@;'; put 'put ''XHU0ZjAzXHV7MjRhMGV9XHV7MjNlOGF9XHU0ZjQyXHU1MDJlXHU1MDZjXHU1MDgxXHU0ZmNjXHU0ZmU1XHU1MDU4XHU1MGZjXHU1MTU5XHU1MTViXHU1MTVkXHU1MTVlXHU2ZTc2XHV7MjM1OTV9XHV7MjNlMzl9XHV7MjNlYmZ9XHU2ZDcyXHV7MjE4ODR9XHV7MjNlODl9XHU1MWE4XHU1MWMz''@;'; put 'put ''XHV7MjA1ZTB9XHU0NGRkXHV7MjA0YTN9XHV7MjA0OTJ9XHV7MjA0OTF9XHU4ZDdhXHV7MjhhOWN9XHV7MjA3MGV9XHU1MjU5XHU1MmE0XHV7MjA4NzN9XHU1MmUxXHU5MzZlXHU0NjdhXHU3MThjXHV7MjQzOGN9XHV7MjBjMjB9XHV7MjQ5YWN9XHV7MjEwZTR9XHU2OWQxXHV7MjBlMWR9XHU3''@;'; put 'put ''NDc5XHUzZWRlXHU3NDk5XHU3NDE0XHU3NDU2XHU3Mzk4XHU0YjhlXHV7MjRhYmN9XHV7MjQwOGR9XHU1M2QwXHUzNTg0XHU3MjBmXHV7MjQwYzl9XHU1NWI0XHV7MjAzNDV9XHU1NGNkXHV7MjBiYzZ9XHU1NzFkXHU5MjVkXHU5NmY0XHU5MzY2XHU1N2RkXHU1NzhkXHU1NzdmXHUzNjNlXHU1''@;'; put 'put ''OGNiXHU1YTk5XHV7MjhhNDZ9XHV7MjE2ZmF9XHV7MjE3NmZ9XHV7MjE3MTB9XHU1YTJjXHU1OWI4XHU5MjhmXHU1YTdlXHU1YWNmXHU1YTEyXHV7MjU5NDZ9XHV7MjE5ZjN9XHV7MjE4NjF9XHV7MjQyOTV9XHUzNmY1XHU2ZDA1XHU3NDQzXHU1YTIxXHV7MjVlODN9Il0sWyI5MzQwIiwiXHU1''@;'; put 'put ''YTgxXHV7MjhiZDd9XHV7MjA0MTN9XHU5M2UwXHU3NDhjXHV7MjEzMDN9XHU3MTA1XHU0OTcyXHU5NDA4XHV7Mjg5ZmJ9XHU5M2JkXHUzN2EwXHU1YzFlXHU1YzllXHU1ZTVlXHU1ZTQ4XHV7MjE5OTZ9XHV7MjE5N2N9XHV7MjNhZWV9XHU1ZWNkXHU1YjRmXHV7MjE5MDN9XHV7MjE5MDR9XHUz''@;'; put 'put ''NzAxXHV7MjE4YTB9XHUzNmRkXHV7MjE2ZmV9XHUzNmQzXHU4MTJhXHV7MjhhNDd9XHV7MjFkYmF9XHV7MjM0NzJ9XHV7Mjg5YTh9XHU1ZjBjXHU1ZjBlXHV7MjE5Mjd9XHV7MjE3YWJ9XHU1YTZiXHV7MjE3M2J9XHU1YjQ0XHU4NjE0XHV7Mjc1ZmR9XHU4ODYwXHU2MDdlXHV7MjI4NjB9XHV7''@;'; put 'put ''MjI2MmJ9XHU1ZmRiXHUzZWI4XHV7MjI1YWZ9XHV7MjI1YmV9XHV7MjkwODh9XHV7MjZmNzN9XHU2MWMwXHV7MjAwM2V9XHV7MjAwNDZ9XHV7MjI2MWJ9XHU2MTk5XHU2MTk4XHU2MDc1XHV7MjJjOWJ9XHV7MjJkMDd9XHV7MjQ2ZDR9XHV7MjkxNGR9Il0sWyI5M2ExIiwiXHU2NDcxXHV7MjQ2''@;'; put 'put ''NjV9XHV7MjJiNmF9XHUzYTI5XHV7MjJiMjJ9XHV7MjM0NTB9XHV7Mjk4ZWF9XHV7MjJlNzh9XHU2MzM3XHV7MmE0NWJ9XHU2NGI2XHU2MzMxXHU2M2QxXHV7MjQ5ZTN9XHV7MjJkNjd9XHU2MmE0XHV7MjJjYTF9XHU2NDNiXHU2NTZiXHU2OTcyXHUzYmY0XHV7MjMwOGV9XHV7MjMyYWR9XHV7''@;'; put 'put ''MjQ5ODl9XHV7MjMyYWJ9XHU1NTBkXHV7MjMyZTB9XHV7MjE4ZDl9XHV7Mjk0M2Z9XHU2NmNlXHV7MjMyODl9XHV7MjMxYjN9XHUzYWUwXHU0MTkwXHV7MjU1ODR9XHV7MjhiMjJ9XHV7MjU1OGZ9XHV7MjE2ZmN9XHV7MjU1NWJ9XHV7MjU0MjV9XHU3OGVlXHV7MjMxMDN9XHV7MjE4MmF9XHV7''@;'; put 'put ''MjMyMzR9XHUzNDY0XHV7MjMyMGZ9XHV7MjMxODJ9XHV7MjQyYzl9XHU2NjhlXHV7MjZkMjR9XHU2NjZiXHU0YjkzXHU2NjMwXHV7Mjc4NzB9XHV7MjFkZWJ9XHU2NjYzXHV7MjMyZDJ9XHV7MjMyZTF9XHU2NjFlXHV7MjU4NzJ9XHUzOGQxXHV7MjM4M2F9XHV7MjM3YmN9XHUzYjk5XHV7MjM3''@;'; put 'put ''YTJ9XHV7MjMzZmV9XHU3NGQwXHUzYjk2XHU2NzhmXHV7MjQ2MmF9XHU2OGI2XHU2ODFlXHUzYmM0XHU2YWJlXHUzODYzXHV7MjM3ZDV9XHV7MjQ0ODd9XHU2YTMzXHU2YTUyXHU2YWM5XHU2YjA1XHV7MjE5MTJ9XHU2NTExXHU2ODk4XHU2YTRjXHUzYmQ3XHU2YTdhXHU2YjU3XHV7MjNmYzB9''@;'; put 'put ''XHV7MjNjOWF9XHU5M2EwXHU5MmYyXHV7MjhiZWF9XHV7MjhhY2J9Il0sWyI5NDQwIiwiXHU5Mjg5XHV7MjgwMWV9XHV7Mjg5ZGN9XHU5NDY3XHU2ZGE1XHU2ZjBiXHV7MjQ5ZWN9XHU2ZDY3XHV7MjNmN2Z9XHUzZDhmXHU2ZTA0XHV7MjQwM2N9XHU1YTNkXHU2ZTBhXHU1ODQ3XHU2ZDI0XHU3''@;'; put 'put ''ODQyXHU3MTNiXHV7MjQzMWF9XHV7MjQyNzZ9XHU3MGYxXHU3MjUwXHU3Mjg3XHU3Mjk0XHV7MjQ3OGZ9XHV7MjQ3MjV9XHU1MTc5XHV7MjRhYTR9XHV7MjA1ZWJ9XHU3NDdhXHV7MjNlZjh9XHV7MjM2NWZ9XHV7MjRhNGF9XHV7MjQ5MTd9XHV7MjVmZTF9XHUzZjA2XHUzZWIxXHV7MjRhZGZ9''@;'; put 'put ''XHV7MjhjMjN9XHV7MjNmMzV9XHU2MGE3XHUzZWYzXHU3NGNjXHU3NDNjXHU5Mzg3XHU3NDM3XHU0NDlmXHV7MjZkZWF9XHU0NTUxXHU3NTgzXHUzZjYzXHV7MjRjZDl9XHV7MjRkMDZ9XHUzZjU4XHU3NTU1XHU3NjczXHV7MmE1YzZ9XHUzYjE5XHU3NDY4XHV7MjhhY2N9XHV7MjQ5YWJ9XHV7''@;'; put 'put ''MjQ5OGV9XHUzYWZiIl0sWyI5NGExIiwiXHUzZGNkXHV7MjRhNGV9XHUzZWZmXHV7MjQ5YzV9XHV7MjQ4ZjN9XHU5MWZhXHU1NzMyXHU5MzQyXHV7MjhhZTN9XHV7MjE4NjR9XHU1MGRmXHV7MjUyMjF9XHV7MjUxZTd9XHU3Nzc4XHV7MjMyMzJ9XHU3NzBlXHU3NzBmXHU3NzdiXHV7MjQ2OTd9''@;'; put 'put ''XHV7MjM3ODF9XHUzYTVlXHV7MjQ4ZjB9XHU3NDM4XHU3NDliXHUzZWJmXHV7MjRhYmF9XHV7MjRhYzd9XHU0MGM4XHV7MjRhOTZ9XHV7MjYxYWV9XHU5MzA3XHV7MjU1ODF9XHU3ODFlXHU3ODhkXHU3ODg4XHU3OGQyXHU3M2QwXHU3OTU5XHV7Mjc3NDF9XHV7MjU2ZTN9XHU0MTBlXHU3OTli''@;'; put 'put ''XHU4NDk2XHU3OWE1XHU2YTJkXHV7MjNlZmF9XHU3YTNhXHU3OWY0XHU0MTZlXHV7MjE2ZTZ9XHU0MTMyXHU5MjM1XHU3OWYxXHV7MjBkNGN9XHV7MjQ5OGN9XHV7MjAyOTl9XHV7MjNkYmF9XHV7MjE3NmV9XHUzNTk3XHU1NTZiXHUzNTcwXHUzNmFhXHV7MjAxZDR9XHV7MjBjMGR9XHU3YWUy''@;'; put 'put ''XHU1YTU5XHV7MjI2ZjV9XHV7MjVhYWZ9XHV7MjVhOWN9XHU1YTBkXHV7MjAyNWJ9XHU3OGYwXHU1YTJhXHV7MjViYzZ9XHU3YWZlXHU0MWY5XHU3YzVkXHU3YzZkXHU0MjExXHV7MjViYjN9XHV7MjVlYmN9XHV7MjVlYTZ9XHU3Y2NkXHV7MjQ5Zjl9XHV7MjE3YjB9XHU3YzhlXHU3YzdjXHU3''@;'; put 'put ''Y2FlXHU2YWIyXHU3ZGRjXHU3ZTA3XHU3ZGQzXHU3ZjRlXHV7MjYyNjF9Il0sWyI5NTQwIiwiXHV7MjYxNWN9XHV7MjdiNDh9XHU3ZDk3XHV7MjVlODJ9XHU0MjZhXHV7MjZiNzV9XHV7MjA5MTZ9XHU2N2Q2XHV7MjAwNGV9XHV7MjM1Y2Z9XHU1N2M0XHV7MjY0MTJ9XHV7MjYzZjh9XHV7MjQ5''@;'; put 'put ''NjJ9XHU3ZmRkXHU3YjI3XHV7MjA4MmN9XHV7MjVhZTl9XHV7MjVkNDN9XHU3YjBjXHV7MjVlMGV9XHU5OWU2XHU4NjQ1XHU5YTYzXHU2YTFjXHV7MjM0M2Z9XHUzOWUyXHV7MjQ5Zjd9XHV7MjY1YWR9XHU5YTFmXHV7MjY1YTB9XHU4NDgwXHV7MjcxMjd9XHV7MjZjZDF9XHU0NGVhXHU4MTM3''@;'; put 'put ''XHU0NDAyXHU4MGM2XHU4MTA5XHU4MTQyXHV7MjY3YjR9XHU5OGMzXHV7MjZhNDJ9XHU4MjYyXHU4MjY1XHV7MjZhNTF9XHU4NDUzXHV7MjZkYTd9XHU4NjEwXHV7MjcyMWJ9XHU1YTg2XHU0MTdmXHV7MjE4NDB9XHU1YjJiXHV7MjE4YTF9XHU1YWU0XHV7MjE4ZDh9XHU4NmEwXHV7MmY5YmN9''@;'; put 'put ''XHV7MjNkOGZ9XHU4ODJkXHV7Mjc0MjJ9XHU1YTAyIl0sWyI5NWExIiwiXHU4ODZlXHU0ZjQ1XHU4ODg3XHU4OGJmXHU4OGU2XHU4OTY1XHU4OTRkXHV7MjU2ODN9XHU4OTU0XHV7Mjc3ODV9XHV7Mjc3ODR9XHV7MjhiZjV9XHV7MjhiZDl9XHV7MjhiOWN9XHV7Mjg5Zjl9XHUzZWFkXHU4NGEz''@;'; put 'put ''XHU0NmY1XHU0NmNmXHUzN2YyXHU4YTNkXHU4YTFjXHV7Mjk0NDh9XHU1ZjRkXHU5MjJiXHV7MjQyODR9XHU2NWQ0XHU3MTI5XHU3MGM0XHV7MjE4NDV9XHU5ZDZkXHU4YzlmXHU4Y2U5XHV7MjdkZGN9XHU1OTlhXHU3N2MzXHU1OWYwXHU0MzZlXHUzNmQ0XHU4ZTJhXHU4ZWE3XHV7MjRjMDl9''@;'; put 'put ''XHU4ZjMwXHU4ZjRhXHU0MmY0XHU2YzU4XHU2ZmJiXHV7MjIzMjF9XHU0ODliXHU2Zjc5XHU2ZThiXHV7MjE3ZGF9XHU5YmU5XHUzNmI1XHV7MjQ5MmZ9XHU5MGJiXHU5MDk3XHU1NTcxXHU0OTA2XHU5MWJiXHU5NDA0XHV7MjhhNGJ9XHU0MDYyXHV7MjhhZmN9XHU5NDI3XHV7MjhjMWR9XHV7''@;'; put 'put ''MjhjM2J9XHU4NGU1XHU4YTJiXHU5NTk5XHU5NWE3XHU5NTk3XHU5NTk2XHV7MjhkMzR9XHU3NDQ1XHUzZWMyXHV7MjQ4ZmZ9XHV7MjRhNDJ9XHV7MjQzZWF9XHUzZWU3XHV7MjMyMjV9XHU5NjhmXHV7MjhlZTd9XHV7MjhlNjZ9XHV7MjhlNjV9XHUzZWNjXHV7MjQ5ZWR9XHV7MjRhNzh9XHV7''@;'; put 'put ''MjNmZWV9XHU3NDEyXHU3NDZiXHUzZWZjXHU5NzQxXHV7MjkwYjB9Il0sWyI5NjQwIiwiXHU2ODQ3XHU0YTFkXHV7MjkwOTN9XHV7MjU3ZGZ9XHU5NzVkXHU5MzY4XHV7Mjg5ODl9XHV7MjhjMjZ9XHV7MjhiMmZ9XHV7MjYzYmV9XHU5MmJhXHU1YjExXHU4YjY5XHU0OTNjXHU3M2Y5XHV7MjQy''@;'; put 'put ''MWJ9XHU5NzliXHU5NzcxXHU5OTM4XHV7MjBmMjZ9XHU1ZGMxXHV7MjhiYzV9XHV7MjRhYjJ9XHU5ODFmXHV7Mjk0ZGF9XHU5MmY2XHV7Mjk1ZDd9XHU5MWU1XHU0NGMwXHV7MjhiNTB9XHV7MjRhNjd9XHV7MjhiNjR9XHU5OGRjXHV7MjhhNDV9XHUzZjAwXHU5MjJhXHU0OTI1XHU4NDE0XHU5''@;'; put 'put ''OTNiXHU5OTRkXHV7MjdiMDZ9XHUzZGZkXHU5OTliXHU0YjZmXHU5OWFhXHU5YTVjXHV7MjhiNjV9XHV7MjU4Yzh9XHU2YThmXHU5YTIxXHU1YWZlXHU5YTJmXHV7Mjk4ZjF9XHU0YjkwXHV7Mjk5NDh9XHU5OWJjXHU0YmJkXHU0Yjk3XHU5MzdkXHU1ODcyXHV7MjEzMDJ9XHU1ODIyXHV7MjQ5''@;'; put 'put ''Yjh9Il0sWyI5NmExIiwiXHV7MjE0ZTh9XHU3ODQ0XHV7MjI3MWZ9XHV7MjNkYjh9XHU2OGM1XHUzZDdkXHU5NDU4XHUzOTI3XHU2MTUwXHV7MjI3ODF9XHV7MjI5NmJ9XHU2MTA3XHU5YzRmXHU5YzUzXHU5YzdiXHU5YzM1XHU5YzEwXHU5YjdmXHU5YmNmXHV7MjllMmR9XHU5YjlmXHV7MmEx''@;'; put 'put ''ZjV9XHV7MmEwZmV9XHU5ZDIxXHU0Y2FlXHV7MjQxMDR9XHU5ZTE4XHU0Y2IwXHU5ZDBjXHV7MmExYjR9XHV7MmEwZWR9XHV7MmEwZjN9XHV7Mjk5MmZ9XHU5ZGE1XHU4NGJkXHV7MjZlMTJ9XHV7MjZmZGZ9XHV7MjZiODJ9XHU4NWZjXHU0NTMzXHV7MjZkYTR9XHV7MjZlODR9XHV7MjZkZjB9''@;'; put 'put ''XHU4NDIwXHU4NWVlXHV7MjZlMDB9XHV7MjM3ZDd9XHV7MjYwNjR9XHU3OWUyXHV7MjM1OWN9XHV7MjM2NDB9XHU0OTJkXHV7MjQ5ZGV9XHUzZDYyXHU5M2RiXHU5MmJlXHU5MzQ4XHV7MjAyYmZ9XHU3OGI5XHU5Mjc3XHU5NDRkXHU0ZmU0XHUzNDQwXHU5MDY0XHV7MjU1NWR9XHU3ODNkXHU3''@;'; put 'put ''ODU0XHU3OGI2XHU3ODRiXHV7MjE3NTd9XHV7MjMxYzl9XHV7MjQ5NDF9XHUzNjlhXHU0ZjcyXHU2ZmRhXHU2ZmQ5XHU3MDFlXHU3MDFlXHU1NDE0XHV7MjQxYjV9XHU1N2JiXHU1OGYzXHU1NzhhXHU5ZDE2XHU1N2Q3XHU3MTM0XHUzNGFmXHV7MjQxYWN9XHU3MWViXHV7MjZjNDB9XHV7MjRm''@;'; put 'put ''OTd9XHU1YjI4XHV7MjE3YjV9XHV7MjhhNDl9Il0sWyI5NzQwIiwiXHU2MTBjXHU1YWNlXHU1YTBiXHU0MmJjXHV7MjQ0ODh9XHUzNzJjXHU0YjdiXHV7Mjg5ZmN9XHU5M2JiXHU5M2I4XHV7MjE4ZDZ9XHV7MjBmMWR9XHU4NDcyXHV7MjZjYzB9XHV7MjE0MTN9XHV7MjQyZmF9XHV7MjJjMjZ9''@;'; put 'put ''XHV7MjQzYzF9XHU1OTk0XHV7MjNkYjd9XHV7MjY3NDF9XHU3ZGE4XHV7MjYxNWJ9XHV7MjYwYTR9XHV7MjQ5Yjl9XHV7MjQ5OGJ9XHV7Mjg5ZmF9XHU5MmU1XHU3M2UyXHUzZWU5XHU3NGI0XHV7MjhiNjN9XHV7MjE4OWZ9XHUzZWUxXHV7MjRhYjN9XHU2YWQ4XHU3M2YzXHU3M2ZiXHUzZWQ2''@;'; put 'put ''XHV7MjRhM2V9XHV7MjRhOTR9XHV7MjE3ZDl9XHV7MjRhNjZ9XHV7MjAzYTd9XHV7MjE0MjR9XHV7MjQ5ZTV9XHU3NDQ4XHV7MjQ5MTZ9XHU3MGE1XHV7MjQ5NzZ9XHU5Mjg0XHU3M2U2XHU5MzVmXHV7MjA0ZmV9XHU5MzMxXHV7MjhhY2V9XHV7MjhhMTZ9XHU5Mzg2XHV7MjhiZTd9XHV7MjU1''@;'; put 'put ''ZDV9XHU0OTM1XHV7MjhhODJ9XHU3MTZiIl0sWyI5N2ExIiwiXHV7MjQ5NDN9XHV7MjBjZmZ9XHU1NmE0XHV7MjA2MWF9XHV7MjBiZWJ9XHV7MjBjYjh9XHU1NTAyXHU3OWM0XHV7MjE3ZmF9XHU3ZGZlXHV7MjE2YzJ9XHV7MjRhNTB9XHV7MjE4NTJ9XHU0NTJlXHU5NDAxXHUzNzBhXHV7Mjhh''@;'; put 'put ''YzB9XHV7MjQ5YWR9XHU1OWIwXHV7MjE4YmZ9XHV7MjE4ODN9XHV7Mjc0ODR9XHU1YWExXHUzNmUyXHV7MjNkNWJ9XHUzNmIwXHU5MjVmXHU1YTc5XHV7MjhhODF9XHV7MjE4NjJ9XHU5Mzc0XHUzY2NkXHV7MjBhYjR9XHU0YTk2XHUzOThhXHU1MGY0XHUzZDY5XHUzZDRjXHV7MjEzOWN9XHU3''@;'; put 'put ''MTc1XHU0MmZiXHV7MjgyMTh9XHU2ZTBmXHV7MjkwZTR9XHU0NGViXHU2ZDU3XHV7MjdlNGZ9XHU3MDY3XHU2Y2FmXHUzY2Q2XHV7MjNmZWR9XHV7MjNlMmR9XHU2ZTAyXHU2ZjBjXHUzZDZmXHV7MjAzZjV9XHU3NTUxXHUzNmJjXHUzNGM4XHU0NjgwXHUzZWRhXHU0ODcxXHU1OWM0XHU5MjZl''@;'; put 'put ''XHU0OTNlXHU4ZjQxXHV7MjhjMWN9XHV7MjZiYzB9XHU1ODEyXHU1N2M4XHUzNmQ2XHV7MjE0NTJ9XHU3MGZlXHV7MjQzNjJ9XHV7MjRhNzF9XHV7MjJmZTN9XHV7MjEyYjB9XHV7MjIzYmR9XHU2OGI5XHU2OTY3XHV7MjEzOTh9XHV7MjM0ZTV9XHV7MjdiZjR9XHV7MjM2ZGZ9XHV7MjhhODN9''@;'; put 'put ''XHV7MjM3ZDZ9XHV7MjMzZmF9XHV7MjRjOWZ9XHU2YTFhXHV7MjM2YWR9XHV7MjZjYjd9XHU4NDNlXHU0NGRmXHU0NGNlIl0sWyI5ODQwIiwiXHV7MjZkMjZ9XHV7MjZkNTF9XHV7MjZjODJ9XHV7MjZmZGV9XHU2ZjE3XHV7MjcxMDl9XHU4MzNkXHV7MjE3M2F9XHU4M2VkXHV7MjZjODB9XHV7''@;'; put 'put ''MjcwNTN9XHV7MjE3ZGJ9XHU1OTg5XHU1YTgyXHV7MjE3YjN9XHU1YTYxXHU1YTcxXHV7MjE5MDV9XHV7MjQxZmN9XHUzNzJkXHU1OWVmXHV7MjE3M2N9XHUzNmM3XHU3MThlXHU5MzkwXHU2NjlhXHV7MjQyYTV9XHU1YTZlXHU1YTJiXHV7MjQyOTN9XHU2YTJiXHV7MjNlZjl9XHV7Mjc3MzZ9''@;'; put 'put ''XHV7MjQ0NWJ9XHV7MjQyY2F9XHU3MTFkXHV7MjQyNTl9XHV7Mjg5ZTF9XHU0ZmIwXHV7MjZkMjh9XHU1Y2MyXHV7MjQ0Y2V9XHV7MjdlNGR9XHV7MjQzYmR9XHU2YTBjXHV7MjQyNTZ9XHV7MjEzMDR9XHU3MGE2XHU3MTMzXHV7MjQzZTl9XHUzZGE1XHU2Y2RmXHV7MmY4MjV9XHV7MjRhNGZ9''@;'; put 'put ''XHU3ZTY1XHU1OWViXHU1ZDJmXHUzZGYzXHU1ZjVjXHV7MjRhNWR9XHV7MjE3ZGZ9XHU3ZGE0XHU4NDI2Il0sWyI5OGExIiwiXHU1NDg1XHV7MjNhZmF9XHV7MjMzMDB9XHV7MjAyMTR9XHU1NzdlXHV7MjA4ZDV9XHV7MjA2MTl9XHUzZmU1XHV7MjFmOWV9XHV7MmEyYjZ9XHU3MDAzXHV7Mjkx''@;'; put 'put ''NWJ9XHU1ZDcwXHU3MzhmXHU3Y2QzXHV7MjhhNTl9XHV7Mjk0MjB9XHU0ZmM4XHU3ZmU3XHU3MmNkXHU3MzEwXHV7MjdhZjR9XHU3MzM4XHU3MzM5XHV7MjU2ZjZ9XHU3MzQxXHU3MzQ4XHUzZWE5XHV7MjdiMTh9XHU5MDZjXHU3MWY1XHV7MjQ4ZjJ9XHU3M2UxXHU4MWY2XHUzZWNhXHU3NzBj''@;'; put 'put ''XHUzZWQxXHU2Y2EyXHU1NmZkXHU3NDE5XHU3NDFlXHU3NDFmXHUzZWUyXHUzZWYwXHUzZWY0XHUzZWZhXHU3NGQzXHUzZjBlXHUzZjUzXHU3NTQyXHU3NTZkXHU3NTcyXHU3NThkXHUzZjdjXHU3NWM4XHU3NWRjXHUzZmMwXHU3NjRkXHUzZmQ3XHU3Njc0XHUzZmRjXHU3NjdhXHV7MjRmNWN9''@;'; put 'put ''XHU3MTg4XHU1NjIzXHU4OTgwXHU1ODY5XHU0MDFkXHU3NzQzXHU0MDM5XHU2NzYxXHU0MDQ1XHUzNWRiXHU3Nzk4XHU0MDZhXHU0MDZmXHU1YzVlXHU3N2JlXHU3N2NiXHU1OGYyXHU3ODE4XHU3MGI5XHU3ODFjXHU0MGE4XHU3ODM5XHU3ODQ3XHU3ODUxXHU3ODY2XHU4NDQ4XHV7MjU1MzV9''@;'; put 'put ''XHU3OTMzXHU2ODAzXHU3OTMyXHU0MTAzIl0sWyI5OTQwIiwiXHU0MTA5XHU3OTkxXHU3OTk5XHU4ZmJiXHU3YTA2XHU4ZmJjXHU0MTY3XHU3YTkxXHU0MWIyXHU3YWJjXHU4Mjc5XHU0MWM0XHU3YWNmXHU3YWRiXHU0MWNmXHU0ZTIxXHU3YjYyXHU3YjZjXHU3YjdiXHU3YzEyXHU3YzFiXHU0''@;'; put 'put ''MjYwXHU0MjdhXHU3YzdiXHU3YzljXHU0MjhjXHU3Y2I4XHU0Mjk0XHU3Y2VkXHU4ZjkzXHU3MGMwXHV7MjBjY2Z9XHU3ZGNmXHU3ZGQ0XHU3ZGQwXHU3ZGZkXHU3ZmFlXHU3ZmI0XHU3MjlmXHU0Mzk3XHU4MDIwXHU4MDI1XHU3YjM5XHU4MDJlXHU4MDMxXHU4MDU0XHUzZGNjXHU1N2I0XHU3''@;'; put 'put ''MGEwXHU4MGI3XHU4MGU5XHU0M2VkXHU4MTBjXHU3MzJhXHU4MTBlXHU4MTEyXHU3NTYwXHU4MTE0XHU0NDAxXHUzYjM5XHU4MTU2XHU4MTU5XHU4MTVhIl0sWyI5OWExIiwiXHU0NDEzXHU1ODNhXHU4MTdjXHU4MTg0XHU0NDI1XHU4MTkzXHU0NDJkXHU4MWE1XHU1N2VmXHU4MWMxXHU4MWU0''@;'; put 'put ''XHU4MjU0XHU0NDhmXHU4MmE2XHU4Mjc2XHU4MmNhXHU4MmQ4XHU4MmZmXHU0NGIwXHU4MzU3XHU5NjY5XHU2OThhXHU4NDA1XHU3MGY1XHU4NDY0XHU2MGUzXHU4NDg4XHU0NTA0XHU4NGJlXHU4NGUxXHU4NGY4XHU4NTEwXHU4NTM4XHU4NTUyXHU0NTNiXHU4NTZmXHU4NTcwXHU4NWUwXHU0''@;'; put 'put ''NTc3XHU4NjcyXHU4NjkyXHU4NmIyXHU4NmVmXHU5NjQ1XHU4NzhiXHU0NjA2XHU0NjE3XHU4OGFlXHU4OGZmXHU4OTI0XHU4OTQ3XHU4OTkxXHV7Mjc5Njd9XHU4YTI5XHU4YTM4XHU4YTk0XHU4YWI0XHU4YzUxXHU4Y2Q0XHU4Y2YyXHU4ZDFjXHU0Nzk4XHU1ODVmXHU4ZGMzXHU0N2VkXHU0''@;'; put 'put ''ZWVlXHU4ZTNhXHU1NWQ4XHU1NzU0XHU4ZTcxXHU1NWY1XHU4ZWIwXHU0ODM3XHU4ZWNlXHU4ZWUyXHU4ZWU0XHU4ZWVkXHU4ZWYyXHU4ZmI3XHU4ZmMxXHU4ZmNhXHU4ZmNjXHU5MDMzXHU5OWM0XHU0OGFkXHU5OGUwXHU5MjEzXHU0OTFlXHU5MjI4XHU5MjU4XHU5MjZiXHU5MmIxXHU5MmFl''@;'; put 'put ''XHU5MmJmIl0sWyI5YTQwIiwiXHU5MmUzXHU5MmViXHU5MmYzXHU5MmY0XHU5MmZkXHU5MzQzXHU5Mzg0XHU5M2FkXHU0OTQ1XHU0OTUxXHU5ZWJmXHU5NDE3XHU1MzAxXHU5NDFkXHU5NDJkXHU5NDNlXHU0OTZhXHU5NDU0XHU5NDc5XHU5NTJkXHU5NWEyXHU0OWE3XHU5NWY0XHU5NjMzXHU0''@;'; put 'put ''OWU1XHU2N2EwXHU0YTI0XHU5NzQwXHU0YTM1XHU5N2IyXHU5N2MyXHU1NjU0XHU0YWU0XHU2MGU4XHU5OGI5XHU0YjE5XHU5OGYxXHU1ODQ0XHU5OTBlXHU5OTE5XHU1MWI0XHU5OTFjXHU5OTM3XHU5OTQyXHU5OTVkXHU5OTYyXHU0YjcwXHU5OWM1XHU0YjlkXHU5YTNjXHU5YjBmXHU3YTgz''@;'; put 'put ''XHU5YjY5XHU5YjgxXHU5YmRkXHU5YmYxXHU5YmY0XHU0YzZkXHU5YzIwXHUzNzZmXHV7MjFiYzJ9XHU5ZDQ5XHU5YzNhIl0sWyI5YWExIiwiXHU5ZWZlXHU1NjUwXHU5ZDkzXHU5ZGJkXHU5ZGMwXHU5ZGZjXHU5NGY2XHU4ZmI2XHU5ZTdiXHU5ZWFjXHU5ZWIxXHU5ZWJkXHU5ZWM2XHU5NGRj''@;'; put 'put ''XHU5ZWUyXHU5ZWYxXHU5ZWY4XHU3YWM4XHU5ZjQ0XHV7MjAwOTR9XHV7MjAyYjd9XHV7MjAzYTB9XHU2OTFhXHU5NGMzXHU1OWFjXHV7MjA0ZDd9XHU1ODQwXHU5NGMxXHUzN2I5XHV7MjA1ZDV9XHV7MjA2MTV9XHV7MjA2NzZ9XHV7MjE2YmF9XHU1NzU3XHU3MTczXHV7MjBhYzJ9XHV7MjBh''@;'; put 'put ''Y2R9XHV7MjBiYmZ9XHU1NDZhXHV7MmY4M2J9XHV7MjBiY2J9XHU1NDllXHV7MjBiZmJ9XHV7MjBjM2J9XHV7MjBjNTN9XHV7MjBjNjV9XHV7MjBjN2N9XHU2MGU3XHV7MjBjOGR9XHU1NjdhXHV7MjBjYjV9XHV7MjBjZGR9XHV7MjBjZWR9XHV7MjBkNmZ9XHV7MjBkYjJ9XHV7MjBkYzh9XHU2''@;'; put 'put ''OTU1XHU5YzJmXHU4N2E1XHV7MjBlMDR9XHV7MjBlMGV9XHV7MjBlZDd9XHV7MjBmOTB9XHV7MjBmMmR9XHV7MjBlNzN9XHU1YzIwXHV7MjBmYmN9XHU1ZTBiXHV7MjEwNWN9XHV7MjEwNGZ9XHV7MjEwNzZ9XHU2NzFlXHV7MjEwN2J9XHV7MjEwODh9XHV7MjEwOTZ9XHUzNjQ3XHV7MjEwYmZ9''@;'; put 'put ''XHV7MjEwZDN9XHV7MjExMmZ9XHV7MjExM2J9XHU1MzY0XHU4NGFkXHV7MjEyZTN9XHV7MjEzNzV9XHV7MjEzMzZ9XHU4YjgxXHV7MjE1Nzd9XHV7MjE2MTl9XHV7MjE3YzN9XHV7MjE3Yzd9XHU0ZTc4XHU3MGJiXHV7MjE4MmR9XHV7MjE5NmF9Il0sWyI5YjQwIiwiXHV7MjFhMmR9XHV7MjFh''@;'; put 'put ''NDV9XHV7MjFjMmF9XHV7MjFjNzB9XHV7MjFjYWN9XHV7MjFlYzh9XHU2MmMzXHV7MjFlZDV9XHV7MjFmMTV9XHU3MTk4XHU2ODU1XHV7MjIwNDV9XHU2OWU5XHUzNmM4XHV7MjIyN2N9XHV7MjIzZDd9XHV7MjIzZmF9XHV7MjI3MmF9XHV7MjI4NzF9XHV7MjI5NGZ9XHU4MmZkXHV7MjI5Njd9''@;'; put 'put ''XHV7MjI5OTN9XHV7MjJhZDV9XHU4OWE1XHV7MjJhZTh9XHU4ZmEwXHV7MjJiMGV9XHU5N2I4XHV7MjJiM2Z9XHU5ODQ3XHU5YWJkXHV7MjJjNGN9Il0sWyI5YjYyIiwiXHV7MjJjODh9XHV7MjJjYjd9XHV7MjViZTh9XHV7MjJkMDh9XHV7MjJkMTJ9XHV7MjJkYjd9XHV7MjJkOTV9XHV7MjJl''@;'; put 'put ''NDJ9XHV7MjJmNzR9XHV7MjJmY2N9XHV7MjMwMzN9XHV7MjMwNjZ9XHV7MjMzMWZ9XHV7MjMzZGV9XHU1ZmIxXHU2NjQ4XHU2NmJmXHV7MjdhNzl9XHV7MjM1Njd9XHV7MjM1ZjN9XHU3MjAxXHV7MjQ5YmF9XHU3N2Q3XHV7MjM2MWF9XHV7MjM3MTZ9XHU3ZTg3XHV7MjAzNDZ9XHU1OGI1XHU2''@;'; put 'put ''NzBlIl0sWyI5YmExIiwiXHU2OTE4XHV7MjNhYTd9XHV7Mjc2NTd9XHV7MjVmZTJ9XHV7MjNlMTF9XHV7MjNlYjl9XHV7Mjc1ZmV9XHV7MjIwOWF9XHU0OGQwXHU0YWI4XHV7MjQxMTl9XHV7MjhhOWF9XHV7MjQyZWV9XHV7MjQzMGR9XHV7MjQwM2J9XHV7MjQzMzR9XHV7MjQzOTZ9XHV7MjRh''@;'; put 'put ''NDV9XHV7MjA1Y2F9XHU1MWQyXHV7MjA2MTF9XHU1OTlmXHV7MjFlYTh9XHUzYmJlXHV7MjNjZmZ9XHV7MjQ0MDR9XHV7MjQ0ZDZ9XHU1Nzg4XHV7MjQ2NzR9XHUzOTliXHV7MjQ3MmZ9XHV7Mjg1ZTh9XHV7Mjk5Yzl9XHUzNzYyXHV7MjIxYzN9XHU4YjVlXHV7MjhiNGV9XHU5OWQ2XHV7MjQ4''@;'; put 'put ''MTJ9XHV7MjQ4ZmJ9XHV7MjRhMTV9XHU3MjA5XHV7MjRhYzB9XHV7MjBjNzh9XHU1OTY1XHV7MjRlYTV9XHV7MjRmODZ9XHV7MjA3Nzl9XHU4ZWRhXHV7MjUwMmN9XHU1MjhmXHU1NzNmXHU3MTcxXHV7MjUyOTl9XHV7MjU0MTl9XHV7MjNmNGF9XHV7MjRhYTd9XHU1NWJjXHV7MjU0NDZ9XHV7''@;'; put 'put ''MjU0NmV9XHV7MjZiNTJ9XHU5MWQ0XHUzNDczXHV7MjU1M2Z9XHV7Mjc2MzJ9XHV7MjU1NWV9XHU0NzE4XHV7MjU1NjJ9XHV7MjU1NjZ9XHV7MjU3Yzd9XHV7MjQ5M2Z9XHV7MjU4NWR9XHU1MDY2XHUzNGZiXHV7MjMzY2N9XHU2MGRlXHV7MjU5MDN9XHU0NzdjXHV7Mjg5NDh9XHV7MjVhYWV9''@;'; put 'put ''XHV7MjViODl9XHV7MjVjMDZ9XHV7MjFkOTB9XHU1N2ExXHU3MTUxXHU2ZmI2XHV7MjYxMDJ9XHV7MjdjMTJ9XHU5MDU2XHV7MjYxYjJ9XHV7MjRmOWF9XHU4YjYyXHV7MjY0MDJ9XHV7MjY0NGF9Il0sWyI5YzQwIiwiXHU1ZDViXHV7MjZiZjd9XHU4ZjM2XHV7MjY0ODR9XHV7MjE5MWN9XHU4''@;'; put 'put ''YWVhXHV7MjQ5ZjZ9XHV7MjY0ODh9XHV7MjNmZWZ9XHV7MjY1MTJ9XHU0YmMwXHV7MjY1YmZ9XHV7MjY2YjV9XHV7MjI3MWJ9XHU5NDY1XHV7MjU3ZTF9XHU2MTk1XHU1YTI3XHV7MmY4Y2R9XHU0ZmJiXHU1NmI5XHV7MjQ1MjF9XHV7MjY2ZmN9XHU0ZTZhXHV7MjQ5MzR9XHU5NjU2XHU2ZDhm''@;'; put 'put ''XHV7MjZjYmR9XHUzNjE4XHU4OTc3XHV7MjY3OTl9XHV7MjY4NmV9XHV7MjY0MTF9XHV7MjY4NWV9XHU3MWRmXHV7MjY4Yzd9XHU3YjQyXHV7MjkwYzB9XHV7MjBhMTF9XHV7MjY5MjZ9XHU5MTA0XHV7MjY5Mzl9XHU3YTQ1XHU5ZGYwXHV7MjY5ZmF9XHU5YTI2XHV7MjZhMmR9XHUzNjVmXHV7''@;'; put 'put ''MjY0Njl9XHV7MjAwMjF9XHU3OTgzXHV7MjZhMzR9XHV7MjZiNWJ9XHU1ZDJjXHV7MjM1MTl9XHU4M2NmXHV7MjZiOWR9XHU0NmQwXHV7MjZjYTR9XHU3NTNiXHU4ODY1XHV7MjZkYWV9XHU1OGI2Il0sWyI5Y2ExIiwiXHUzNzFjXHV7MjI1OGR9XHV7MjcwNGJ9XHV7MjcxY2R9XHUzYzU0XHV7''@;'; put 'put ''MjcyODB9XHV7MjcyODV9XHU5MjgxXHV7MjIxN2F9XHV7MjcyOGJ9XHU5MzMwXHV7MjcyZTZ9XHV7MjQ5ZDB9XHU2YzM5XHU5NDlmXHV7Mjc0NTB9XHV7MjBlZjh9XHU4ODI3XHU4OGY1XHV7MjI5MjZ9XHV7Mjg0NzN9XHV7MjE3YjF9XHU2ZWI4XHV7MjRhMmF9XHV7MjE4MjB9XHUzOWE0XHUz''@;'; put 'put ''NmI5XHU1YzEwXHU3OWUzXHU0NTNmXHU2NmI2XHV7MjljYWR9XHV7Mjk4YTR9XHU4OTQzXHV7Mjc3Y2N9XHV7Mjc4NTh9XHU1NmQ2XHU0MGRmXHV7MjE2MGF9XHUzOWExXHV7MjM3MmZ9XHV7MjgwZTh9XHV7MjEzYzV9XHU3MWFkXHU4MzY2XHV7Mjc5ZGR9XHV7MjkxYTh9XHU1YTY3XHU0Y2I3''@;'; put 'put ''XHV7MjcwYWZ9XHV7Mjg5YWJ9XHV7Mjc5ZmR9XHV7MjdhMGF9XHV7MjdiMGJ9XHV7MjdkNjZ9XHV7MjQxN2F9XHU3YjQzXHU3OTdlXHV7MjgwMDl9XHU2ZmI1XHV7MmEyZGZ9XHU2YTAzXHV7MjgzMTh9XHU1M2EyXHV7MjZlMDd9XHU5M2JmXHU2ODM2XHU5NzVkXHV7MjgxNmZ9XHV7MjgwMjN9''@;'; put 'put ''XHV7MjY5YjV9XHV7MjEzZWR9XHV7MjMyMmZ9XHV7MjgwNDh9XHU1ZDg1XHV7MjhjMzB9XHV7MjgwODN9XHU1NzE1XHU5ODIzXHV7Mjg5NDl9XHU1ZGFiXHV7MjQ5ODh9XHU2NWJlXHU2OWQ1XHU1M2QyXHV7MjRhYTV9XHV7MjNmODF9XHUzYzExXHU2NzM2XHV7MjgwOTB9XHV7MjgwZjR9XHV7''@;'; put 'put ''MjgxMmV9XHV7MjFmYTF9XHV7MjgxNGZ9Il0sWyI5ZDQwIiwiXHV7MjgxODl9XHV7MjgxYWZ9XHV7MjgyMWF9XHV7MjgzMDZ9XHV7MjgzMmZ9XHV7MjgzOGF9XHUzNWNhXHV7Mjg0Njh9XHV7Mjg2YWF9XHU0OGZhXHU2M2U2XHV7Mjg5NTZ9XHU3ODA4XHU5MjU1XHV7Mjg5Yjh9XHU0M2YyXHV7''@;'; put 'put ''Mjg5ZTd9XHU0M2RmXHV7Mjg5ZTh9XHV7MjhiNDZ9XHV7MjhiZDR9XHU1OWY4XHV7MjhjMDl9XHU4ZjBiXHV7MjhmYzV9XHV7MjkwZWN9XHU3YjUxXHV7MjkxMTB9XHV7MjkxM2N9XHUzZGY3XHV7MjkxNWV9XHV7MjRhY2F9XHU4ZmQwXHU3MjhmXHU1NjhiXHV7Mjk0ZTd9XHV7Mjk1ZTl9XHV7''@;'; put 'put ''Mjk1YjB9XHV7Mjk1Yjh9XHV7Mjk3MzJ9XHV7Mjk4ZDF9XHV7Mjk5NDl9XHV7Mjk5NmF9XHV7Mjk5YzN9XHV7MjlhMjh9XHV7MjliMGV9XHV7MjlkNWF9XHV7MjlkOWJ9XHU3ZTlmXHV7MjllZjh9XHV7MjlmMjN9XHU0Y2E0XHU5NTQ3XHV7MmEyOTN9XHU3MWEyXHV7MmEyZmZ9XHU0ZDkxXHU5''@;'; put 'put ''MDEyXHV7MmE1Y2J9XHU0ZDljXHV7MjBjOWN9XHU4ZmJlXHU1NWMxIl0sWyI5ZGExIiwiXHU4ZmJhXHV7MjI0YjB9XHU4ZmI5XHV7MjRhOTN9XHU0NTA5XHU3ZTdmXHU2ZjU2XHU2YWIxXHU0ZWVhXHUzNGU0XHV7MjhiMmN9XHV7Mjc4OWR9XHUzNzNhXHU4ZTgwXHV7MjE3ZjV9XHV7MjgwMjR9''@;'; put 'put ''XHV7MjhiNmN9XHV7MjhiOTl9XHV7MjdhM2V9XHV7MjY2YWZ9XHUzZGViXHV7Mjc2NTV9XHV7MjNjYjd9XHV7MjU2MzV9XHV7MjU5NTZ9XHU0ZTlhXHV7MjVlODF9XHV7MjYyNTh9XHU1NmJmXHV7MjBlNmR9XHU4ZTBlXHU1YjZkXHV7MjNlODh9XHV7MjRjOWV9XHU2M2RlXHU2MmQwXHV7MjE3''@;'; put 'put ''ZjZ9XHV7MjE4N2J9XHU2NTMwXHU1NjJkXHV7MjVjNGF9XHU1NDFhXHV7MjUzMTF9XHUzZGM2XHV7MjlkOTh9XHU0YzdkXHU1NjIyXHU1NjFlXHU3ZjQ5XHV7MjVlZDh9XHU1OTc1XHV7MjNkNDB9XHU4NzcwXHU0ZTFjXHV7MjBmZWF9XHV7MjBkNDl9XHV7MjM2YmF9XHU4MTE3XHU5ZDVlXHU4''@;'; put 'put ''ZDE4XHU3NjNiXHU5YzQ1XHU3NjRlXHU3N2I5XHU5MzQ1XHU1NDMyXHU4MTQ4XHU4MmY3XHU1NjI1XHU4MTMyXHU4NDE4XHU4MGJkXHU1NWVhXHU3OTYyXHU1NjQzXHU1NDE2XHV7MjBlOWR9XHUzNWNlXHU1NjA1XHU1NWYxXHU2NmYxXHV7MjgyZTJ9XHUzNjJkXHU3NTM0XHU1NWYwXHU1NWJh''@;'; put 'put ''XHU1NDk3XHU1NTcyXHV7MjBjNDF9XHV7MjBjOTZ9XHU1ZWQwXHV7MjUxNDh9XHV7MjBlNzZ9XHV7MjJjNjJ9Il0sWyI5ZTQwIiwiXHV7MjBlYTJ9XHU5ZWFiXHU3ZDVhXHU1NWRlXHV7MjEwNzV9XHU2MjlkXHU5NzZkXHU1NDk0XHU4Y2NkXHU3MWY2XHU5MTc2XHU2M2ZjXHU2M2I5XHU2M2Zl''@;'; put 'put ''XHU1NTY5XHV7MjJiNDN9XHU5YzcyXHV7MjJlYjN9XHU1MTlhXHUzNGRmXHV7MjBkYTd9XHU1MWE3XHU1NDRkXHU1NTFlXHU1NTEzXHU3NjY2XHU4ZTJkXHV7MjY4OGF9XHU3NWIxXHU4MGI2XHU4ODA0XHU4Nzg2XHU4OGM3XHU4MWI2XHU4NDFjXHV7MjEwYzF9XHU0NGVjXHU3MzA0XHV7MjQ3''@;'; put 'put ''MDZ9XHU1YjkwXHU4MzBiXHV7MjY4OTN9XHU1NjdiXHV7MjI2ZjR9XHV7MjdkMmZ9XHV7MjQxYTN9XHV7MjdkNzN9XHV7MjZlZDB9XHV7MjcyYjZ9XHU5MTcwXHV7MjExZDl9XHU5MjA4XHV7MjNjZmN9XHV7MmE2YTl9XHV7MjBlYWN9XHV7MjBlZjl9XHU3MjY2XHV7MjFjYTJ9XHU0NzRlXHV7''@;'; put 'put ''MjRmYzJ9XHV7MjdmZjl9XHV7MjBmZWJ9XHU0MGZhIl0sWyI5ZWExIiwiXHU5YzVkXHU2NTFmXHV7MjJkYTB9XHU0OGYzXHV7MjQ3ZTB9XHV7MjlkN2N9XHV7MjBmZWN9XHV7MjBlMGF9XHU2MDYyXHV7Mjc1YTN9XHV7MjBmZWR9Il0sWyI5ZWFkIiwiXHV7MjYwNDh9XHV7MjExODd9XHU3MWEz''@;'; put 'put ''XHU3ZThlXHU5ZDUwXHU0ZTFhXHU0ZTA0XHUzNTc3XHU1YjBkXHU2Y2IyXHU1MzY3XHUzNmFjXHUzOWRjXHU1MzdkXHUzNmE1XHV7MjQ2MTh9XHU1ODlhXHV7MjRiNmV9XHU4MjJkXHU1NDRiXHU1N2FhXHV7MjVhOTV9XHV7MjA5Nzl9Il0sWyI5ZWM1IiwiXHUzYTUyXHV7MjI0NjV9XHU3Mzc0''@;'; put 'put ''XHV7MjllYWN9XHU0ZDA5XHU5YmVkXHV7MjNjZmV9XHV7MjlmMzB9XHU0YzViXHV7MjRmYTl9XHV7Mjk1OWV9XHV7MjlmZGV9XHU4NDVjXHV7MjNkYjZ9XHV7MjcyYjJ9XHV7MjY3YjN9XHV7MjM3MjB9XHU2MzJlXHU3ZDI1XHV7MjNlZjd9XHV7MjNlMmN9XHUzYTJhXHU5MDA4XHU1MmNjXHUz''@;'; put 'put ''ZTc0XHUzNjdhXHU0NWU5XHV7MjA0OGV9XHU3NjQwXHU1YWYwXHV7MjBlYjZ9XHU3ODdhXHV7MjdmMmV9XHU1OGE3XHU0MGJmXHU1NjdjXHU5YjhiXHU1ZDc0XHU3NjU0XHV7MmE0MzR9XHU5ZTg1XHU0Y2UxXHU3NWY5XHUzN2ZiXHU2MTE5XHV7MjMwZGF9XHV7MjQzZjJ9Il0sWyI5ZWY1Iiwi''@;'; put 'put ''XHU1NjVkXHV7MjEyYTl9XHU1N2E3XHV7MjQ5NjN9XHV7MjllMDZ9XHU1MjM0XHV7MjcwYWV9XHUzNWFkXHU2YzRhXHU5ZDdjIl0sWyI5ZjQwIiwiXHU3YzU2XHU5YjM5XHU1N2RlXHV7MjE3NmN9XHU1YzUzXHU2NGQzXHV7Mjk0ZDB9XHV7MjYzMzV9XHV7MjcxNjR9XHU4NmFkXHV7MjBkMjh9''@;'; put 'put ''XHV7MjZkMjJ9XHV7MjRhZTJ9XHV7MjBkNzF9Il0sWyI5ZjRmIiwiXHU1MWZlXHV7MjFmMGZ9XHU1ZDhlXHU5NzAzXHV7MjFkZDF9XHU5ZTgxXHU5MDRjXHU3YjFmXHU5YjAyXHU1Y2QxXHU3YmEzXHU2MjY4XHU2MzM1XHU5YWZmXHU3YmNmXHU5YjJhXHU3YzdlXHU5YjJlXHU3YzQyXHU3Yzg2''@;'; put 'put ''XHU5YzE1XHU3YmZjXHU5YjA5XHU5ZjE3XHU5YzFiXHV7MjQ5M2V9XHU5ZjVhXHU1NTczXHU1YmMzXHU0ZmZkXHU5ZTk4XHU0ZmYyXHU1MjYwXHUzZTA2XHU1MmQxXHU1NzY3XHU1MDU2XHU1OWI3XHU1ZTEyXHU5N2M4XHU5ZGFiXHU4ZjVjXHU1NDY5XHU5N2I0XHU5OTQwXHU5N2JhXHU1MzJj''@;'; put 'put ''XHU2MTMwIl0sWyI5ZmExIiwiXHU2OTJjXHU1M2RhXHU5YzBhXHU5ZDAyXHU0YzNiXHU5NjQxXHU2OTgwXHU1MGE2XHU3NTQ2XHV7MjE3NmR9XHU5OWRhXHU1MjczIl0sWyI5ZmFlIiwiXHU5MTU5XHU5NjgxXHU5MTVjIl0sWyI5ZmIyIiwiXHU5MTUxXHV7MjhlOTd9XHU2MzdmXHV7MjZkMjN9''@;'; put 'put ''XHU2YWNhXHU1NjExXHU5MThlXHU3NTdhXHU2Mjg1XHV7MjAzZmN9XHU3MzRmXHU3YzcwXHV7MjVjMjF9XHV7MjNjZmR9Il0sWyI5ZmMxIiwiXHV7MjQ5MTl9XHU3NmQ2XHU5YjlkXHU0ZTJhXHV7MjBjZDR9XHU4M2JlXHU4ODQyIl0sWyI5ZmM5IiwiXHU1YzRhXHU2OWMwXHU1MGVkXHU1Nzdh''@;'; put 'put ''XHU1MjFmXHU1ZGY1XHU0ZWNlXHU2YzMxXHV7MjAxZjJ9XHU0ZjM5XHU1NDljXHU1NGRhXHU1MjlhXHU4ZDgyXHUzNWZlXHU1ZjBjXHUzNWYzIl0sWyI5ZmRiIiwiXHU2YjUyXHU5MTdjXHU5ZmE1XHU5Yjk3XHU5ODJlXHU5OGI0XHU5YWJhXHU5ZWE4XHU5ZTg0XHU3MTdhXHU3YjE0Il0sWyI5''@;'; put 'put ''ZmU3IiwiXHU2YmZhXHU4ODE4XHU3Zjc4Il0sWyI5ZmViIiwiXHU1NjIwXHV7MmE2NGF9XHU4ZTc3XHU5ZjUzIl0sWyI5ZmYwIiwiXHU4ZGQ0XHU4ZTRmXHU5ZTFjXHU4ZTAxXHU2MjgyXHV7MjgzN2R9XHU4ZTI4XHU4ZTc1XHU3YWQzXHV7MjRhNzd9XHU3YTNlXHU3OGQ4XHU2Y2VhXHU4YTY3''@;'; put 'put ''XHU3NjA3Il0sWyJhMDQwIiwiXHV7MjhhNWF9XHU5ZjI2XHU2Y2NlXHU4N2Q2XHU3NWMzXHV7MmEyYjJ9XHU3ODUzXHV7MmY4NDB9XHU4ZDBjXHU3MmUyXHU3MzcxXHU4YjJkXHU3MzAyXHU3NGYxXHU4Y2ViXHV7MjRhYmJ9XHU4NjJmXHU1ZmJhXHU4OGEwXHU0NGI3Il0sWyJhMDU1IiwiXHV7''@;'; put 'put ''MjE4M2J9XHV7MjZlMDV9Il0sWyJhMDU4IiwiXHU4YTdlXHV7MjI1MWJ9Il0sWyJhMDViIiwiXHU2MGZkXHU3NjY3XHU5YWQ3XHU5ZDQ0XHU5MzZlXHU5YjhmXHU4N2Y1Il0sWyJhMDYzIiwiXHU4ODBmXHU4Y2Y3XHU3MzJjXHU5NzIxXHU5YmIwXHUzNWQ2XHU3MmIyXHU0YzA3XHU3YzUxXHU5''@;'; put 'put ''OTRhXHV7MjYxNTl9XHU2MTU5XHU0YzA0XHU5ZTk2XHU2MTdkIl0sWyJhMDczIiwiXHU1NzVmXHU2MTZmXHU2MmE2XHU2MjM5XHU2MmNlXHUzYTVjXHU2MWUyXHU1M2FhXHV7MjMzZjV9XHU2MzY0XHU2ODAyXHUzNWQyIl0sWyJhMGExIiwiXHU1ZDU3XHV7MjhiYzJ9XHU4ZmRhXHV7MjhlMzl9''@;'; put 'put ''Il0sWyJhMGE2IiwiXHU1MGQ5XHV7MjFkNDZ9XHU3OTA2XHU1MzMyXHU5NjM4XHV7MjBmM2J9XHU0MDY1Il0sWyJhMGFlIiwiXHU3N2ZlIl0sWyJhMGIwIiwiXHU3Y2MyXHV7MjVmMWF9XHU3Y2RhXHU3YTJkXHU4MDY2XHU4MDYzXHU3ZDRkXHU3NTA1XHU3NGYyXHU4OTk0XHU4MjFhXHU2NzBj''@;'; put 'put ''XHU4MDYyXHV7Mjc0ODZ9XHU4MDViXHU3NGYwXHU4MTAzXHU3NzI0XHU4OTg5XHV7MjY3Y2N9XHU3NTUzXHV7MjZlZDF9XHU4N2E5XHU4N2NlXHU4MWM4XHU4NzhjXHU4YTQ5XHU4Y2FkXHU4YjQzXHU3NzJiXHU3NGY4XHU4NGRhXHUzNjM1XHU2OWIyXHU4ZGE2Il0sWyJhMGQ0IiwiXHU4OWE5''@;'; put 'put ''XHU3NDY4XHU2ZGI5XHU4N2MxXHV7MjQwMTF9XHU3NGU3XHUzZGRiXHU3MTc2XHU2MGE0XHU2MTljXHUzY2QxXHU3MTYyXHU2MDc3Il0sWyJhMGUyIiwiXHU3ZjcxXHV7MjhiMmR9XHU3MjUwXHU2MGU5XHU0YjdlXHU1MjIwXHUzYzE4XHV7MjNjYzd9XHV7MjVlZDd9XHV7Mjc2NTZ9XHV7MjU1''@;'; put 'put ''MzF9XHV7MjE5NDR9XHV7MjEyZmV9XHV7Mjk5MDN9XHV7MjZkZGN9XHV7MjcwYWR9XHU1Y2MxXHV7MjYxYWR9XHV7MjhhMGZ9XHV7MjM2Nzd9XHV7MjAwZWV9XHV7MjY4NDZ9XHV7MjRmMGV9XHU0NTYyXHU1YjFmXHV7MjYzNGN9XHU5ZjUwXHU5ZWE2XHV7MjYyNmJ9Il0sWyJhM2MwIiwiXHUy''@;'; put 'put ''NDAwIiwzMSwiXHUyNDIxIl0sWyJjNmExIiwiXHUyNDYwIiw5LCJcdTI0NzQiLDksIlx1MjE3MCIsOSwiXHU0ZTM2XHU0ZTNmXHU0ZTg1XHU0ZWEwXHU1MTgyXHU1MTk2XHU1MWFiXHU1MmY5XHU1MzM4XHU1MzY5XHU1M2I2XHU1OTBhXHU1YjgwXHU1ZGRiXHUyZjMzXHU1ZTdmXHU1ZWY0XHU1''@;'; put 'put ''ZjUwXHU1ZjYxXHU2NTM0XHU2NWUwXHU3NTkyXHU3Njc2XHU4ZmI1XHU5NmI2XHhhOFx1MDJjNlx1MzBmZFx1MzBmZVx1MzA5ZFx1MzA5ZVx1MzAwM1x1NGVkZFx1MzAwNVx1MzAwNlx1MzAwN1x1MzBmY1x1ZmYzYlx1ZmYzZFx1MjczZFx1MzA0MSIsMjNdLFsiYzc0MCIsIlx1MzA1OSIsNTgs''@;'; put 'put ''Ilx1MzBhMVx1MzBhMlx1MzBhM1x1MzBhNCJdLFsiYzdhMSIsIlx1MzBhNSIsODEsIlx1MDQxMCIsNSwiXHUwNDAxXHUwNDE2Iiw0XSxbImM4NDAiLCJcdTA0MWIiLDI2LCJcdTA0NTFcdTA0MzYiLDI1LCJcdTIxZTdcdTIxYjhcdTIxYjlcdTMxY2ZcdXsyMDBjY31cdTRlNWFcdXsyMDA4YX1c''@;'; put 'put ''dTUyMDJcdTQ0OTEiXSxbImM4YTEiLCJcdTlmYjBcdTUxODhcdTlmYjFcdXsyNzYwN30iXSxbImM4Y2QiLCJcdWZmZTJcdWZmZTRcdWZmMDdcdWZmMDJcdTMyMzFcdTIxMTZcdTIxMjFcdTMwOWJcdTMwOWNcdTJlODBcdTJlODRcdTJlODZcdTJlODdcdTJlODhcdTJlOGFcdTJlOGNcdTJlOGRc''@;'; put 'put ''dTJlOTVcdTJlOWNcdTJlOWRcdTJlYTVcdTJlYTdcdTJlYWFcdTJlYWNcdTJlYWVcdTJlYjZcdTJlYmNcdTJlYmVcdTJlYzZcdTJlY2FcdTJlY2NcdTJlY2RcdTJlY2ZcdTJlZDZcdTJlZDdcdTJlZGVcdTJlZTMiXSxbImM4ZjUiLCJcdTAyODNcdTAyNTBcdTAyNWJcdTAyNTRcdTAyNzVcdTAx''@;'; put 'put ''NTNceGY4XHUwMTRiXHUwMjhhXHUwMjZhIl0sWyJmOWZlIiwiXHVmZmVkIl0sWyJmYTQwIiwiXHV7MjA1NDd9XHU5MmRiXHV7MjA1ZGZ9XHV7MjNmYzV9XHU4NTRjXHU0MmI1XHU3M2VmXHU1MWI1XHUzNjQ5XHV7MjQ5NDJ9XHV7Mjg5ZTR9XHU5MzQ0XHV7MjE5ZGJ9XHU4MmVlXHV7MjNjYzh9''@;'; put 'put ''XHU3ODNjXHU2NzQ0XHU2MmRmXHV7MjQ5MzN9XHV7Mjg5YWF9XHV7MjAyYTB9XHV7MjZiYjN9XHV7MjEzMDV9XHU0ZmFiXHV7MjI0ZWR9XHU1MDA4XHV7MjZkMjl9XHV7MjdhODR9XHV7MjM2MDB9XHV7MjRhYjF9XHV7MjI1MTN9XHU1MDI5XHV7MjAzN2V9XHU1ZmE0XHV7MjAzODB9XHV7MjAz''@;'; put 'put ''NDd9XHU2ZWRiXHV7MjA0MWZ9XHU1MDdkXHU1MTAxXHUzNDdhXHU1MTBlXHU5ODZjXHUzNzQzXHU4NDE2XHV7MjQ5YTR9XHV7MjA0ODd9XHU1MTYwXHV7MjMzYjR9XHU1MTZhXHV7MjBiZmZ9XHV7MjIwZmN9XHV7MjAyZTV9XHV7MjI1MzB9XHV7MjA1OGV9XHV7MjMyMzN9XHV7MjE5ODN9XHU1''@;'; put 'put ''YjgyXHU4NzdkXHV7MjA1YjN9XHV7MjNjOTl9XHU1MWIyXHU1MWI4Il0sWyJmYWExIiwiXHU5ZDM0XHU1MWM5XHU1MWNmXHU1MWQxXHUzY2RjXHU1MWQzXHV7MjRhYTZ9XHU1MWIzXHU1MWUyXHU1MzQyXHU1MWVkXHU4M2NkXHU2OTNlXHV7MjM3MmR9XHU1ZjdiXHU1MjBiXHU1MjI2XHU1MjNj''@;'; put 'put ''XHU1MmI1XHU1MjU3XHU1Mjk0XHU1MmI5XHU1MmM1XHU3YzE1XHU4NTQyXHU1MmUwXHU4NjBkXHV7MjZiMTN9XHU1MzA1XHV7MjhhZGV9XHU1NTQ5XHU2ZWQ5XHV7MjNmODB9XHV7MjA5NTR9XHV7MjNmZWN9XHU1MzMzXHU1MzQ0XHV7MjBiZTJ9XHU2Y2NiXHV7MjE3MjZ9XHU2ODFiXHU3M2Q1''@;'; put 'put ''XHU2MDRhXHUzZWFhXHUzOGNjXHV7MjE2ZTh9XHU3MWRkXHU0NGEyXHU1MzZkXHU1Mzc0XHV7Mjg2YWJ9XHU1MzdlXHU1MzdmXHV7MjE1OTZ9XHV7MjE2MTN9XHU3N2U2XHU1MzkzXHV7MjhhOWJ9XHU1M2EwXHU1M2FiXHU1M2FlXHU3M2E3XHV7MjU3NzJ9XHUzZjU5XHU3MzljXHU1M2MxXHU1''@;'; put 'put ''M2M1XHU2YzQ5XHU0ZTQ5XHU1N2ZlXHU1M2Q5XHUzYWFiXHV7MjBiOGZ9XHU1M2UwXHV7MjNmZWJ9XHV7MjJkYTN9XHU1M2Y2XHV7MjBjNzd9XHU1NDEzXHU3MDc5XHU1NTJiXHU2NjU3XHU2ZDViXHU1NDZkXHV7MjZiNTN9XHV7MjBkNzR9XHU1NTVkXHU1NDhmXHU1NGE0XHU0N2E2XHV7MjE3''@;'; put 'put ''MGR9XHV7MjBlZGR9XHUzZGI0XHV7MjBkNGR9Il0sWyJmYjQwIiwiXHV7Mjg5YmN9XHV7MjI2OTh9XHU1NTQ3XHU0Y2VkXHU1NDJmXHU3NDE3XHU1NTg2XHU1NWE5XHU1NjA1XHV7MjE4ZDd9XHV7MjQwM2F9XHU0NTUyXHV7MjQ0MzV9XHU2NmIzXHV7MjEwYjR9XHU1NjM3XHU2NmNkXHV7MjMy''@;'; put 'put ''OGF9XHU2NmE0XHU2NmFkXHU1NjRkXHU1NjRmXHU3OGYxXHU1NmYxXHU5Nzg3XHU1M2ZlXHU1NzAwXHU1NmVmXHU1NmVkXHV7MjhiNjZ9XHUzNjIzXHV7MjEyNGZ9XHU1NzQ2XHV7MjQxYTV9XHU2YzZlXHU3MDhiXHU1NzQyXHUzNmIxXHV7MjZjN2V9XHU1N2U2XHV7MjE0MTZ9XHU1ODAzXHV7''@;'; put 'put ''MjE0NTR9XHV7MjQzNjN9XHU1ODI2XHV7MjRiZjV9XHU1ODVjXHU1OGFhXHUzNTYxXHU1OGUwXHU1OGRjXHV7MjEyM2N9XHU1OGZiXHU1YmZmXHU1NzQzXHV7MmExNTB9XHV7MjQyNzh9XHU5M2QzXHUzNWExXHU1OTFmXHU2OGE2XHUzNmMzXHU2ZTU5Il0sWyJmYmExIiwiXHV7MjE2M2V9XHU1''@;'; put 'put ''YTI0XHU1NTUzXHV7MjE2OTJ9XHU4NTA1XHU1OWM5XHV7MjBkNGV9XHV7MjZjODF9XHV7MjZkMmF9XHV7MjE3ZGN9XHU1OWQ5XHV7MjE3ZmJ9XHV7MjE3YjJ9XHV7MjZkYTZ9XHU2ZDcxXHV7MjE4Mjh9XHV7MjE2ZDV9XHU1OWY5XHV7MjZlNDV9XHU1YWFiXHU1YTYzXHUzNmU2XHV7MjQ5YTl9''@;'; put 'put ''XHU1YTc3XHUzNzA4XHU1YTk2XHU3NDY1XHU1YWQzXHV7MjZmYTF9XHV7MjI1NTR9XHUzZDg1XHV7MjE5MTF9XHUzNzMyXHV7MjE2Yjh9XHU1ZTgzXHU1MmQwXHU1Yjc2XHU2NTg4XHU1YjdjXHV7MjdhMGV9XHU0MDA0XHU0ODVkXHV7MjAyMDR9XHU1YmQ1XHU2MTYwXHV7MjFhMzR9XHV7MjU5''@;'; put 'put ''Y2N9XHV7MjA1YTV9XHU1YmYzXHU1YjlkXHU0ZDEwXHU1YzA1XHV7MjFiNDR9XHU1YzEzXHU3M2NlXHU1YzE0XHV7MjFjYTV9XHV7MjZiMjh9XHU1YzQ5XHU0OGRkXHU1Yzg1XHU1Y2U5XHU1Y2VmXHU1ZDhiXHV7MjFkZjl9XHV7MjFlMzd9XHU1ZDEwXHU1ZDE4XHU1ZDQ2XHV7MjFlYTR9XHU1''@;'; put 'put ''Y2JhXHU1ZGQ3XHU4MmZjXHUzODJkXHV7MjQ5MDF9XHV7MjIwNDl9XHV7MjIxNzN9XHU4Mjg3XHUzODM2XHUzYmMyXHU1ZTJlXHU2YThhXHU1ZTc1XHU1ZTdhXHV7MjQ0YmN9XHV7MjBjZDN9XHU1M2E2XHU0ZWI3XHU1ZWQwXHU1M2E4XHV7MjE3NzF9XHU1ZTA5XHU1ZWY0XHV7Mjg0ODJ9Il0s''@;'; put 'put ''WyJmYzQwIiwiXHU1ZWY5XHU1ZWZiXHUzOGEwXHU1ZWZjXHU2ODNlXHU5NDFiXHU1ZjBkXHV7MjAxYzF9XHV7MmY4OTR9XHUzYWRlXHU0OGFlXHV7MjEzM2F9XHU1ZjNhXHV7MjY4ODh9XHV7MjIzZDB9XHU1ZjU4XHV7MjI0NzF9XHU1ZjYzXHU5N2JkXHV7MjZlNmV9XHU1ZjcyXHU5MzQwXHV7''@;'; put 'put ''MjhhMzZ9XHU1ZmE3XHU1ZGI2XHUzZDVmXHV7MjUyNTB9XHV7MjFmNmF9XHV7MjcwZjh9XHV7MjI2Njh9XHU5MWQ2XHV7MjAyOWV9XHV7MjhhMjl9XHU2MDMxXHU2Njg1XHV7MjE4Nzd9XHUzOTYzXHUzZGM3XHUzNjM5XHU1NzkwXHV7MjI3YjR9XHU3OTcxXHUzZTQwXHU2MDllXHU2MGE0XHU2''@;'; put 'put ''MGIzXHV7MjQ5ODJ9XHV7MjQ5OGZ9XHV7MjdhNTN9XHU3NGE0XHU1MGUxXHU1YWEwXHU2MTY0XHU4NDI0XHU2MTQyXHV7MmY4YTZ9XHV7MjZlZDJ9XHU2MTgxXHU1MWY0XHV7MjA2NTZ9XHU2MTg3XHU1YmFhXHV7MjNmYjd9Il0sWyJmY2ExIiwiXHV7MjI4NWZ9XHU2MWQzXHV7MjhiOWR9XHV7''@;'; put 'put ''Mjk5NWR9XHU2MWQwXHUzOTMyXHV7MjI5ODB9XHV7MjI4YzF9XHU2MDIzXHU2MTVjXHU2NTFlXHU2MzhiXHV7MjAxMTh9XHU2MmM1XHV7MjE3NzB9XHU2MmQ1XHV7MjJlMGR9XHU2MzZjXHV7MjQ5ZGZ9XHUzYTE3XHU2NDM4XHU2M2Y4XHV7MjEzOGV9XHV7MjE3ZmN9XHU2NDkwXHU2ZjhhXHV7''@;'; put 'put ''MjJlMzZ9XHU5ODE0XHV7MjQwOGN9XHV7MjU3MWR9XHU2NGUxXHU2NGU1XHU5NDdiXHUzYTY2XHU2NDNhXHUzYTU3XHU2NTRkXHU2ZjE2XHV7MjRhMjh9XHV7MjRhMjN9XHU2NTg1XHU2NTZkXHU2NTVmXHV7MjMwN2V9XHU2NWI1XHV7MjQ5NDB9XHU0YjM3XHU2NWQxXHU0MGQ4XHV7MjE4Mjl9''@;'; put 'put ''XHU2NWUwXHU2NWUzXHU1ZmRmXHV7MjM0MDB9XHU2NjE4XHV7MjMxZjd9XHV7MjMxZjh9XHU2NjQ0XHV7MjMxYTR9XHV7MjMxYTV9XHU2NjRiXHV7MjBlNzV9XHU2NjY3XHV7MjUxZTZ9XHU2NjczXHU2Njc0XHV7MjFlM2R9XHV7MjMyMzF9XHV7Mjg1ZjR9XHV7MjMxYzh9XHV7MjUzMTN9XHU3''@;'; put 'put ''N2M1XHV7MjI4Zjd9XHU5OWE0XHU2NzAyXHV7MjQzOWN9XHV7MjRhMjF9XHUzYjJiXHU2OWZhXHV7MjM3YzJ9XHU2NzVlXHU2NzY3XHU2NzYyXHV7MjQxY2R9XHV7MjkwZWR9XHU2N2Q3XHU0NGU5XHU2ODIyXHU2ZTUwXHU5MjNjXHU2ODAxXHV7MjMzZTZ9XHV7MjZkYTB9XHU2ODVkIl0sWyJm''@;'; put 'put ''ZDQwIiwiXHV7MjM0NmZ9XHU2OWUxXHU2YTBiXHV7MjhhZGZ9XHU2OTczXHU2OGMzXHV7MjM1Y2R9XHU2OTAxXHU2OTAwXHUzZDMyXHUzYTAxXHV7MjM2M2N9XHUzYjgwXHU2N2FjXHU2OTYxXHV7MjhhNGF9XHU0MmZjXHU2OTM2XHU2OTk4XHUzYmExXHV7MjAzYzl9XHU4MzYzXHU1MDkwXHU2''@;'; put 'put ''OWY5XHV7MjM2NTl9XHV7MjIxMmF9XHU2YTQ1XHV7MjM3MDN9XHU2YTlkXHUzYmYzXHU2N2IxXHU2YWM4XHV7MjkxOWN9XHUzYzBkXHU2YjFkXHV7MjA5MjN9XHU2MGRlXHU2YjM1XHU2Yjc0XHV7MjI3Y2R9XHU2ZWI1XHV7MjNhZGJ9XHV7MjAzYjV9XHV7MjE5NTh9XHUzNzQwXHU1NDIxXHV7''@;'; put 'put ''MjNiNWF9XHU2YmUxXHV7MjNlZmN9XHU2YmRjXHU2YzM3XHV7MjI0OGJ9XHV7MjQ4ZjF9XHV7MjZiNTF9XHU2YzVhXHU4MjI2XHU2Yzc5XHV7MjNkYmN9XHU0NGM1XHV7MjNkYmR9XHV7MjQxYTR9XHV7MjQ5MGN9XHV7MjQ5MDB9Il0sWyJmZGExIiwiXHV7MjNjYzl9XHUzNmU1XHUzY2ViXHV7''@;'; put 'put ''MjBkMzJ9XHU5YjgzXHV7MjMxZjl9XHV7MjI0OTF9XHU3ZjhmXHU2ODM3XHV7MjZkMjV9XHV7MjZkYTF9XHV7MjZkZWJ9XHU2ZDk2XHU2ZDVjXHU2ZTdjXHU2ZjA0XHV7MjQ5N2Z9XHV7MjQwODV9XHV7MjZlNzJ9XHU4NTMzXHV7MjZmNzR9XHU1MWM3XHU2YzljXHU2ZTFkXHU4NDJlXHV7Mjhi''@;'; put 'put ''MjF9XHU2ZTJmXHV7MjNlMmZ9XHU3NDUzXHV7MjNmODJ9XHU3OWNjXHU2ZTRmXHU1YTkxXHV7MjMwNGJ9XHU2ZmY4XHUzNzBkXHU2ZjlkXHV7MjNlMzB9XHU2ZWZhXHV7MjE0OTd9XHV7MjQwM2R9XHU0NTU1XHU5M2YwXHU2ZjQ0XHU2ZjVjXHUzZDRlXHU2Zjc0XHV7MjkxNzB9XHUzZDNiXHU2''@;'; put 'put ''ZjlmXHV7MjQxNDR9XHU2ZmQzXHV7MjQwOTF9XHV7MjQxNTV9XHV7MjQwMzl9XHV7MjNmZjB9XHV7MjNmYjR9XHV7MjQxM2Z9XHU1MWRmXHV7MjQxNTZ9XHV7MjQxNTd9XHV7MjQxNDB9XHV7MjYxZGR9XHU3MDRiXHU3MDdlXHU3MGE3XHU3MDgxXHU3MGNjXHU3MGQ1XHU3MGQ2XHU3MGRmXHU0''@;'; put 'put ''MTA0XHUzZGU4XHU3MWI0XHU3MTk2XHV7MjQyNzd9XHU3MTJiXHU3MTQ1XHU1YTg4XHU3MTRhXHU3MTZlXHU1YzljXHV7MjQzNjV9XHU3MTRmXHU5MzYyXHV7MjQyYzF9XHU3MTJjXHV7MjQ0NWF9XHV7MjRhMjd9XHV7MjRhMjJ9XHU3MWJhXHV7MjhiZTh9XHU3MGJkXHU3MjBlIl0sWyJmZTQw''@;'; put 'put ''IiwiXHU5NDQyXHU3MjE1XHU1OTExXHU5NDQzXHU3MjI0XHU5MzQxXHV7MjU2MDV9XHU3MjJlXHU3MjQwXHV7MjQ5NzR9XHU2OGJkXHU3MjU1XHU3MjU3XHUzZTU1XHV7MjMwNDR9XHU2ODBkXHU2ZjNkXHU3MjgyXHU3MzJhXHU3MzJiXHV7MjQ4MjN9XHV7Mjg4MmJ9XHU0OGVkXHV7Mjg4MDR9''@;'; put 'put ''XHU3MzI4XHU3MzJlXHU3M2NmXHU3M2FhXHV7MjBjM2F9XHV7MjZhMmV9XHU3M2M5XHU3NDQ5XHV7MjQxZTJ9XHV7MjE2ZTd9XHV7MjRhMjR9XHU2NjIzXHUzNmM1XHV7MjQ5Yjd9XHV7MjQ5OGR9XHV7MjQ5ZmJ9XHU3M2Y3XHU3NDE1XHU2OTAzXHV7MjRhMjZ9XHU3NDM5XHV7MjA1YzN9XHUz''@;'; put 'put ''ZWQ3XHU3NDVjXHV7MjI4YWR9XHU3NDYwXHV7MjhlYjJ9XHU3NDQ3XHU3M2U0XHU3NDc2XHU4M2I5XHU3NDZjXHUzNzMwXHU3NDc0XHU5M2YxXHU2YTJjXHU3NDgyXHU0OTUzXHV7MjRhOGN9Il0sWyJmZWExIiwiXHV7MjQxNWZ9XHV7MjRhNzl9XHV7MjhiOGZ9XHU1YjQ2XHV7MjhjMDN9XHV7''@;'; put 'put ''MjE4OWV9XHU3NGM4XHV7MjE5ODh9XHU3NTBlXHU3NGU5XHU3NTFlXHV7MjhlZDl9XHV7MjFhNGJ9XHU1YmQ3XHV7MjhlYWN9XHU5Mzg1XHU3NTRkXHU3NTRhXHU3NTY3XHU3NTZlXHV7MjRmODJ9XHUzZjA0XHV7MjRkMTN9XHU3NThlXHU3NDVkXHU3NTllXHU3NWI0XHU3NjAyXHU3NjJjXHU3''@;'; put 'put ''NjUxXHU3NjRmXHU3NjZmXHU3Njc2XHV7MjYzZjV9XHU3NjkwXHU4MWVmXHUzN2Y4XHV7MjY5MTF9XHV7MjY5MGV9XHU3NmExXHU3NmE1XHU3NmI3XHU3NmNjXHV7MjZmOWZ9XHU4NDYyXHV7MjUwOWR9XHV7MjUxN2R9XHV7MjFlMWN9XHU3NzFlXHU3NzI2XHU3NzQwXHU2NGFmXHV7MjUyMjB9''@;'; put 'put ''XHU3NzU4XHV7MjMyYWN9XHU3N2FmXHV7Mjg5NjR9XHV7Mjg5Njh9XHV7MjE2YzF9XHU3N2Y0XHU3ODA5XHV7MjEzNzZ9XHV7MjRhMTJ9XHU2OGNhXHU3OGFmXHU3OGM3XHU3OGQzXHU5NmE1XHU3OTJlXHV7MjU1ZTB9XHU3OGQ3XHU3OTM0XHU3OGIxXHV7Mjc2MGN9XHU4ZmI4XHU4ODg0XHV7''@;'; put 'put ''MjhiMmJ9XHV7MjYwODN9XHV7MjI2MWN9XHU3OTg2XHU4OTAwXHU2OTAyXHU3OTgwXHV7MjU4NTd9XHU3OTlkXHV7MjdiMzl9XHU3OTNjXHU3OWE5XHU2ZTJhXHV7MjcxMjZ9XHUzZWE4XHU3OWM2XHV7MjkxMGR9XHU3OWQ0Il1dJyl9LDc0NDg4OnVlPT57InVzZSBzdHJpY3QiO3VlLmV4cG9y''@;'; put 'put ''dHM9SlNPTi5wYXJzZSgnW1siMCIsIlxcdTAwMDAiLDEyNywiXHUyMGFjIl0sWyI4MTQwIiwiXHU0ZTAyXHU0ZTA0XHU0ZTA1XHU0ZTA2XHU0ZTBmXHU0ZTEyXHU0ZTE3XHU0ZTFmXHU0ZTIwXHU0ZTIxXHU0ZTIzXHU0ZTI2XHU0ZTI5XHU0ZTJlXHU0ZTJmXHU0ZTMxXHU0ZTMzXHU0ZTM1XHU0''@;'; put 'put ''ZTM3XHU0ZTNjXHU0ZTQwXHU0ZTQxXHU0ZTQyXHU0ZTQ0XHU0ZTQ2XHU0ZTRhXHU0ZTUxXHU0ZTU1XHU0ZTU3XHU0ZTVhXHU0ZTViXHU0ZTYyXHU0ZTYzXHU0ZTY0XHU0ZTY1XHU0ZTY3XHU0ZTY4XHU0ZTZhIiw1LCJcdTRlNzJcdTRlNzQiLDksIlx1NGU3ZiIsNiwiXHU0ZTg3XHU0ZThhIl0s''@;'; put 'put ''WyI4MTgwIiwiXHU0ZTkwXHU0ZTk2XHU0ZTk3XHU0ZTk5XHU0ZTljXHU0ZTlkXHU0ZTllXHU0ZWEzXHU0ZWFhXHU0ZWFmXHU0ZWIwXHU0ZWIxXHU0ZWI0XHU0ZWI2XHU0ZWI3XHU0ZWI4XHU0ZWI5XHU0ZWJjXHU0ZWJkXHU0ZWJlXHU0ZWM4XHU0ZWNjXHU0ZWNmXHU0ZWQwXHU0ZWQyXHU0ZWRh''@;'; put 'put ''XHU0ZWRiXHU0ZWRjXHU0ZWUwXHU0ZWUyXHU0ZWU2XHU0ZWU3XHU0ZWU5XHU0ZWVkXHU0ZWVlXHU0ZWVmXHU0ZWYxXHU0ZWY0XHU0ZWY4XHU0ZWY5XHU0ZWZhXHU0ZWZjXHU0ZWZlXHU0ZjAwXHU0ZjAyIiw2LCJcdTRmMGJcdTRmMGNcdTRmMTIiLDQsIlx1NGYxY1x1NGYxZFx1NGYyMVx1NGYy''@;'; put 'put ''M1x1NGYyOFx1NGYyOVx1NGYyY1x1NGYyZFx1NGYyZVx1NGYzMVx1NGYzM1x1NGYzNVx1NGYzN1x1NGYzOVx1NGYzYlx1NGYzZSIsNCwiXHU0ZjQ0XHU0ZjQ1XHU0ZjQ3Iiw1LCJcdTRmNTJcdTRmNTRcdTRmNTZcdTRmNjFcdTRmNjJcdTRmNjZcdTRmNjhcdTRmNmFcdTRmNmJcdTRmNmRcdTRm''@;'; put 'put ''NmVcdTRmNzFcdTRmNzJcdTRmNzVcdTRmNzdcdTRmNzhcdTRmNzlcdTRmN2FcdTRmN2RcdTRmODBcdTRmODFcdTRmODJcdTRmODVcdTRmODZcdTRmODdcdTRmOGFcdTRmOGNcdTRmOGVcdTRmOTBcdTRmOTJcdTRmOTNcdTRmOTVcdTRmOTZcdTRmOThcdTRmOTlcdTRmOWFcdTRmOWNcdTRmOWVc''@;'; put 'put ''dTRmOWZcdTRmYTFcdTRmYTIiXSxbIjgyNDAiLCJcdTRmYTRcdTRmYWJcdTRmYWRcdTRmYjAiLDQsIlx1NGZiNiIsOCwiXHU0ZmMwXHU0ZmMxXHU0ZmMyXHU0ZmM2XHU0ZmM3XHU0ZmM4XHU0ZmM5XHU0ZmNiXHU0ZmNjXHU0ZmNkXHU0ZmQyIiw0LCJcdTRmZDlcdTRmZGJcdTRmZTBcdTRmZTJc''@;'; put 'put ''dTRmZTRcdTRmZTVcdTRmZTdcdTRmZWJcdTRmZWNcdTRmZjBcdTRmZjJcdTRmZjRcdTRmZjVcdTRmZjZcdTRmZjdcdTRmZjlcdTRmZmJcdTRmZmNcdTRmZmRcdTRmZmYiLDExXSxbIjgyODAiLCJcdTUwMGJcdTUwMGVcdTUwMTBcdTUwMTFcdTUwMTNcdTUwMTVcdTUwMTZcdTUwMTdcdTUwMWJc''@;'; put 'put ''dTUwMWRcdTUwMWVcdTUwMjBcdTUwMjJcdTUwMjNcdTUwMjRcdTUwMjdcdTUwMmJcdTUwMmYiLDEwLCJcdTUwM2JcdTUwM2RcdTUwM2ZcdTUwNDBcdTUwNDFcdTUwNDJcdTUwNDRcdTUwNDVcdTUwNDZcdTUwNDlcdTUwNGFcdTUwNGJcdTUwNGRcdTUwNTAiLDQsIlx1NTA1Nlx1NTA1N1x1NTA1''@;'; put 'put ''OFx1NTA1OVx1NTA1Ylx1NTA1ZCIsNywiXHU1MDY2Iiw1LCJcdTUwNmQiLDgsIlx1NTA3OFx1NTA3OVx1NTA3YVx1NTA3Y1x1NTA3ZFx1NTA4MVx1NTA4Mlx1NTA4M1x1NTA4NFx1NTA4Nlx1NTA4N1x1NTA4OVx1NTA4YVx1NTA4Ylx1NTA4Y1x1NTA4ZSIsMjAsIlx1NTBhNFx1NTBhNlx1NTBh''@;'; put 'put ''YVx1NTBhYlx1NTBhZCIsNCwiXHU1MGIzIiw2LCJcdTUwYmMiXSxbIjgzNDAiLCJcdTUwYmQiLDE3LCJcdTUwZDAiLDUsIlx1NTBkN1x1NTBkOFx1NTBkOVx1NTBkYiIsMTAsIlx1NTBlOFx1NTBlOVx1NTBlYVx1NTBlYlx1NTBlZlx1NTBmMFx1NTBmMVx1NTBmMlx1NTBmNFx1NTBmNiIsNCwi''@;'; put 'put ''XHU1MGZjIiw5LCJcdTUxMDgiXSxbIjgzODAiLCJcdTUxMDlcdTUxMGFcdTUxMGMiLDUsIlx1NTExMyIsMTMsIlx1NTEyMiIsMjgsIlx1NTE0Mlx1NTE0N1x1NTE0YVx1NTE0Y1x1NTE0ZVx1NTE0Zlx1NTE1MFx1NTE1Mlx1NTE1M1x1NTE1N1x1NTE1OFx1NTE1OVx1NTE1Ylx1NTE1ZCIsNCwi''@;'; put 'put ''XHU1MTYzXHU1MTY0XHU1MTY2XHU1MTY3XHU1MTY5XHU1MTZhXHU1MTZmXHU1MTcyXHU1MTdhXHU1MTdlXHU1MTdmXHU1MTgzXHU1MTg0XHU1MTg2XHU1MTg3XHU1MThhXHU1MThiXHU1MThlXHU1MThmXHU1MTkwXHU1MTkxXHU1MTkzXHU1MTk0XHU1MTk4XHU1MTlhXHU1MTlkXHU1MTllXHU1''@;'; put 'put ''MTlmXHU1MWExXHU1MWEzXHU1MWE2Iiw0LCJcdTUxYWRcdTUxYWVcdTUxYjRcdTUxYjhcdTUxYjlcdTUxYmFcdTUxYmVcdTUxYmZcdTUxYzFcdTUxYzJcdTUxYzNcdTUxYzVcdTUxYzhcdTUxY2FcdTUxY2RcdTUxY2VcdTUxZDBcdTUxZDIiLDVdLFsiODQ0MCIsIlx1NTFkOFx1NTFkOVx1NTFk''@;'; put 'put ''YVx1NTFkY1x1NTFkZVx1NTFkZlx1NTFlMlx1NTFlM1x1NTFlNSIsNSwiXHU1MWVjXHU1MWVlXHU1MWYxXHU1MWYyXHU1MWY0XHU1MWY3XHU1MWZlXHU1MjA0XHU1MjA1XHU1MjA5XHU1MjBiXHU1MjBjXHU1MjBmXHU1MjEwXHU1MjEzXHU1MjE0XHU1MjE1XHU1MjFjXHU1MjFlXHU1MjFmXHU1''@;'; put 'put ''MjIxXHU1MjIyXHU1MjIzXHU1MjI1XHU1MjI2XHU1MjI3XHU1MjJhXHU1MjJjXHU1MjJmXHU1MjMxXHU1MjMyXHU1MjM0XHU1MjM1XHU1MjNjXHU1MjNlXHU1MjQ0Iiw1LCJcdTUyNGJcdTUyNGVcdTUyNGZcdTUyNTJcdTUyNTNcdTUyNTVcdTUyNTdcdTUyNTgiXSxbIjg0ODAiLCJcdTUyNTlc''@;'; put 'put ''dTUyNWFcdTUyNWJcdTUyNWRcdTUyNWZcdTUyNjBcdTUyNjJcdTUyNjNcdTUyNjRcdTUyNjZcdTUyNjhcdTUyNmJcdTUyNmNcdTUyNmRcdTUyNmVcdTUyNzBcdTUyNzFcdTUyNzMiLDksIlx1NTI3ZVx1NTI4MFx1NTI4MyIsNCwiXHU1Mjg5Iiw2LCJcdTUyOTFcdTUyOTJcdTUyOTQiLDYsIlx1''@;'; put 'put ''NTI5Y1x1NTJhNFx1NTJhNVx1NTJhNlx1NTJhN1x1NTJhZVx1NTJhZlx1NTJiMFx1NTJiNCIsOSwiXHU1MmMwXHU1MmMxXHU1MmMyXHU1MmM0XHU1MmM1XHU1MmM2XHU1MmM4XHU1MmNhXHU1MmNjXHU1MmNkXHU1MmNlXHU1MmNmXHU1MmQxXHU1MmQzXHU1MmQ0XHU1MmQ1XHU1MmQ3XHU1MmQ5''@;'; put 'put ''Iiw1LCJcdTUyZTBcdTUyZTFcdTUyZTJcdTUyZTNcdTUyZTUiLDEwLCJcdTUyZjEiLDcsIlx1NTJmYlx1NTJmY1x1NTJmZFx1NTMwMVx1NTMwMlx1NTMwM1x1NTMwNFx1NTMwN1x1NTMwOVx1NTMwYVx1NTMwYlx1NTMwY1x1NTMwZSJdLFsiODU0MCIsIlx1NTMxMVx1NTMxMlx1NTMxM1x1NTMx''@;'; put 'put ''NFx1NTMxOFx1NTMxYlx1NTMxY1x1NTMxZVx1NTMxZlx1NTMyMlx1NTMyNFx1NTMyNVx1NTMyN1x1NTMyOFx1NTMyOVx1NTMyYlx1NTMyY1x1NTMyZFx1NTMyZiIsOSwiXHU1MzNjXHU1MzNkXHU1MzQwXHU1MzQyXHU1MzQ0XHU1MzQ2XHU1MzRiXHU1MzRjXHU1MzRkXHU1MzUwXHU1MzU0XHU1''@;'; put 'put ''MzU4XHU1MzU5XHU1MzViXHU1MzVkXHU1MzY1XHU1MzY4XHU1MzZhXHU1MzZjXHU1MzZkXHU1MzcyXHU1Mzc2XHU1Mzc5XHU1MzdiXHU1MzdjXHU1MzdkXHU1MzdlXHU1MzgwXHU1MzgxXHU1MzgzXHU1Mzg3XHU1Mzg4XHU1MzhhXHU1MzhlXHU1MzhmIl0sWyI4NTgwIiwiXHU1MzkwIiw0LCJc''@;'; put 'put ''dTUzOTZcdTUzOTdcdTUzOTlcdTUzOWJcdTUzOWNcdTUzOWVcdTUzYTBcdTUzYTFcdTUzYTRcdTUzYTdcdTUzYWFcdTUzYWJcdTUzYWNcdTUzYWRcdTUzYWYiLDYsIlx1NTNiN1x1NTNiOFx1NTNiOVx1NTNiYVx1NTNiY1x1NTNiZFx1NTNiZVx1NTNjMFx1NTNjMyIsNCwiXHU1M2NlXHU1M2Nm''@;'; put 'put ''XHU1M2QwXHU1M2QyXHU1M2QzXHU1M2Q1XHU1M2RhXHU1M2RjXHU1M2RkXHU1M2RlXHU1M2UxXHU1M2UyXHU1M2U3XHU1M2Y0XHU1M2ZhXHU1M2ZlXHU1M2ZmXHU1NDAwXHU1NDAyXHU1NDA1XHU1NDA3XHU1NDBiXHU1NDE0XHU1NDE4XHU1NDE5XHU1NDFhXHU1NDFjXHU1NDIyXHU1NDI0XHU1''@;'; put 'put ''NDI1XHU1NDJhXHU1NDMwXHU1NDMzXHU1NDM2XHU1NDM3XHU1NDNhXHU1NDNkXHU1NDNmXHU1NDQxXHU1NDQyXHU1NDQ0XHU1NDQ1XHU1NDQ3XHU1NDQ5XHU1NDRjXHU1NDRkXHU1NDRlXHU1NDRmXHU1NDUxXHU1NDVhXHU1NDVkIiw0LCJcdTU0NjNcdTU0NjVcdTU0NjdcdTU0NjkiLDcsIlx1''@;'; put 'put ''NTQ3NFx1NTQ3OVx1NTQ3YVx1NTQ3ZVx1NTQ3Zlx1NTQ4MVx1NTQ4M1x1NTQ4NVx1NTQ4N1x1NTQ4OFx1NTQ4OVx1NTQ4YVx1NTQ4ZFx1NTQ5MVx1NTQ5M1x1NTQ5N1x1NTQ5OFx1NTQ5Y1x1NTQ5ZVx1NTQ5Zlx1NTRhMFx1NTRhMSJdLFsiODY0MCIsIlx1NTRhMlx1NTRhNVx1NTRhZVx1NTRi''@;'; put 'put ''MFx1NTRiMlx1NTRiNVx1NTRiNlx1NTRiN1x1NTRiOVx1NTRiYVx1NTRiY1x1NTRiZVx1NTRjM1x1NTRjNVx1NTRjYVx1NTRjYlx1NTRkNlx1NTRkOFx1NTRkYlx1NTRlMCIsNCwiXHU1NGViXHU1NGVjXHU1NGVmXHU1NGYwXHU1NGYxXHU1NGY0Iiw1LCJcdTU0ZmJcdTU0ZmVcdTU1MDBcdTU1''@;'; put 'put ''MDJcdTU1MDNcdTU1MDRcdTU1MDVcdTU1MDhcdTU1MGEiLDQsIlx1NTUxMlx1NTUxM1x1NTUxNSIsNSwiXHU1NTFjXHU1NTFkXHU1NTFlXHU1NTFmXHU1NTIxXHU1NTI1XHU1NTI2Il0sWyI4NjgwIiwiXHU1NTI4XHU1NTI5XHU1NTJiXHU1NTJkXHU1NTMyXHU1NTM0XHU1NTM1XHU1NTM2XHU1''@;'; put 'put ''NTM4XHU1NTM5XHU1NTNhXHU1NTNiXHU1NTNkXHU1NTQwXHU1NTQyXHU1NTQ1XHU1NTQ3XHU1NTQ4XHU1NTRiIiw0LCJcdTU1NTFcdTU1NTJcdTU1NTNcdTU1NTRcdTU1NTciLDQsIlx1NTU1ZFx1NTU1ZVx1NTU1Zlx1NTU2MFx1NTU2Mlx1NTU2M1x1NTU2OFx1NTU2OVx1NTU2Ylx1NTU2ZiIs''@;'; put 'put ''NSwiXHU1NTc5XHU1NTdhXHU1NTdkXHU1NTdmXHU1NTg1XHU1NTg2XHU1NThjXHU1NThkXHU1NThlXHU1NTkwXHU1NTkyXHU1NTkzXHU1NTk1XHU1NTk2XHU1NTk3XHU1NTlhXHU1NTliXHU1NTllXHU1NWEwIiw2LCJcdTU1YTgiLDgsIlx1NTViMlx1NTViNFx1NTViNlx1NTViOFx1NTViYVx1''@;'; put 'put ''NTViY1x1NTViZiIsNCwiXHU1NWM2XHU1NWM3XHU1NWM4XHU1NWNhXHU1NWNiXHU1NWNlXHU1NWNmXHU1NWQwXHU1NWQ1XHU1NWQ3Iiw0LCJcdTU1ZGVcdTU1ZTBcdTU1ZTJcdTU1ZTdcdTU1ZTlcdTU1ZWRcdTU1ZWVcdTU1ZjBcdTU1ZjFcdTU1ZjRcdTU1ZjZcdTU1ZjgiLDQsIlx1NTVmZlx1''@;'; put 'put ''NTYwMlx1NTYwM1x1NTYwNFx1NTYwNSJdLFsiODc0MCIsIlx1NTYwNlx1NTYwN1x1NTYwYVx1NTYwYlx1NTYwZFx1NTYxMCIsNywiXHU1NjE5XHU1NjFhXHU1NjFjXHU1NjFkXHU1NjIwXHU1NjIxXHU1NjIyXHU1NjI1XHU1NjI2XHU1NjI4XHU1NjI5XHU1NjJhXHU1NjJiXHU1NjJlXHU1NjJm''@;'; put 'put ''XHU1NjMwXHU1NjMzXHU1NjM1XHU1NjM3XHU1NjM4XHU1NjNhXHU1NjNjXHU1NjNkXHU1NjNlXHU1NjQwIiwxMSwiXHU1NjRmIiw0LCJcdTU2NTVcdTU2NTZcdTU2NWFcdTU2NWJcdTU2NWQiLDRdLFsiODc4MCIsIlx1NTY2M1x1NTY2NVx1NTY2Nlx1NTY2N1x1NTY2ZFx1NTY2ZVx1NTY2Zlx1''@;'; put 'put ''NTY3MFx1NTY3Mlx1NTY3M1x1NTY3NFx1NTY3NVx1NTY3N1x1NTY3OFx1NTY3OVx1NTY3YVx1NTY3ZCIsNywiXHU1Njg3Iiw2LCJcdTU2OTBcdTU2OTFcdTU2OTJcdTU2OTQiLDE0LCJcdTU2YTQiLDEwLCJcdTU2YjAiLDYsIlx1NTZiOFx1NTZiOVx1NTZiYVx1NTZiYlx1NTZiZCIsMTIsIlx1''@;'; put 'put ''NTZjYiIsOCwiXHU1NmQ1XHU1NmQ2XHU1NmQ4XHU1NmQ5XHU1NmRjXHU1NmUzXHU1NmU1Iiw1LCJcdTU2ZWNcdTU2ZWVcdTU2ZWZcdTU2ZjJcdTU2ZjNcdTU2ZjZcdTU2ZjdcdTU2ZjhcdTU2ZmJcdTU2ZmNcdTU3MDBcdTU3MDFcdTU3MDJcdTU3MDVcdTU3MDdcdTU3MGIiLDZdLFsiODg0MCIs''@;'; put 'put ''Ilx1NTcxMiIsOSwiXHU1NzFkXHU1NzFlXHU1NzIwXHU1NzIxXHU1NzIyXHU1NzI0XHU1NzI1XHU1NzI2XHU1NzI3XHU1NzJiXHU1NzMxXHU1NzMyXHU1NzM0Iiw0LCJcdTU3M2NcdTU3M2RcdTU3M2ZcdTU3NDFcdTU3NDNcdTU3NDRcdTU3NDVcdTU3NDZcdTU3NDhcdTU3NDlcdTU3NGJcdTU3''@;'; put 'put ''NTIiLDQsIlx1NTc1OFx1NTc1OVx1NTc2Mlx1NTc2M1x1NTc2NVx1NTc2N1x1NTc2Y1x1NTc2ZVx1NTc3MFx1NTc3MVx1NTc3Mlx1NTc3NFx1NTc3NVx1NTc3OFx1NTc3OVx1NTc3YVx1NTc3ZFx1NTc3ZVx1NTc3Zlx1NTc4MCJdLFsiODg4MCIsIlx1NTc4MVx1NTc4N1x1NTc4OFx1NTc4OVx1''@;'; put 'put ''NTc4YVx1NTc4ZCIsNCwiXHU1Nzk0Iiw2LCJcdTU3OWNcdTU3OWRcdTU3OWVcdTU3OWZcdTU3YTVcdTU3YThcdTU3YWFcdTU3YWNcdTU3YWZcdTU3YjBcdTU3YjFcdTU3YjNcdTU3YjVcdTU3YjZcdTU3YjdcdTU3YjkiLDgsIlx1NTdjNCIsNiwiXHU1N2NjXHU1N2NkXHU1N2QwXHU1N2QxXHU1''@;'; put 'put ''N2QzXHU1N2Q2XHU1N2Q3XHU1N2RiXHU1N2RjXHU1N2RlXHU1N2UxXHU1N2UyXHU1N2UzXHU1N2U1Iiw3LCJcdTU3ZWVcdTU3ZjBcdTU3ZjFcdTU3ZjJcdTU3ZjNcdTU3ZjVcdTU3ZjZcdTU3ZjdcdTU3ZmJcdTU3ZmNcdTU3ZmVcdTU3ZmZcdTU4MDFcdTU4MDNcdTU4MDRcdTU4MDVcdTU4MDhc''@;'; put 'put ''dTU4MDlcdTU4MGFcdTU4MGNcdTU4MGVcdTU4MGZcdTU4MTBcdTU4MTJcdTU4MTNcdTU4MTRcdTU4MTZcdTU4MTdcdTU4MThcdTU4MWFcdTU4MWJcdTU4MWNcdTU4MWRcdTU4MWZcdTU4MjJcdTU4MjNcdTU4MjUiLDQsIlx1NTgyYiIsNCwiXHU1ODMxXHU1ODMyXHU1ODMzXHU1ODM0XHU1ODM2''@;'; put 'put ''Iiw3XSxbIjg5NDAiLCJcdTU4M2UiLDUsIlx1NTg0NSIsNiwiXHU1ODRlXHU1ODRmXHU1ODUwXHU1ODUyXHU1ODUzXHU1ODU1XHU1ODU2XHU1ODU3XHU1ODU5Iiw0LCJcdTU4NWYiLDUsIlx1NTg2NiIsNCwiXHU1ODZkIiwxNiwiXHU1ODdmXHU1ODgyXHU1ODg0XHU1ODg2XHU1ODg3XHU1ODg4''@;'; put 'put ''XHU1ODhhXHU1ODhiXHU1ODhjIl0sWyI4OTgwIiwiXHU1ODhkIiw0LCJcdTU4OTQiLDQsIlx1NTg5Ylx1NTg5Y1x1NTg5ZFx1NThhMCIsNywiXHU1OGFhIiwxNywiXHU1OGJkXHU1OGJlXHU1OGJmXHU1OGMwXHU1OGMyXHU1OGMzXHU1OGM0XHU1OGM2IiwxMCwiXHU1OGQyXHU1OGQzXHU1OGQ0''@;'; put 'put ''XHU1OGQ2IiwxMywiXHU1OGU1Iiw1LCJcdTU4ZWRcdTU4ZWZcdTU4ZjFcdTU4ZjJcdTU4ZjRcdTU4ZjVcdTU4ZjdcdTU4ZjhcdTU4ZmEiLDcsIlx1NTkwM1x1NTkwNVx1NTkwNlx1NTkwOCIsNCwiXHU1OTBlXHU1OTEwXHU1OTExXHU1OTEyXHU1OTEzXHU1OTE3XHU1OTE4XHU1OTFiXHU1OTFk''@;'; put 'put ''XHU1OTFlXHU1OTIwXHU1OTIxXHU1OTIyXHU1OTIzXHU1OTI2XHU1OTI4XHU1OTJjXHU1OTMwXHU1OTMyXHU1OTMzXHU1OTM1XHU1OTM2XHU1OTNiIl0sWyI4YTQwIiwiXHU1OTNkXHU1OTNlXHU1OTNmXHU1OTQwXHU1OTQzXHU1OTQ1XHU1OTQ2XHU1OTRhXHU1OTRjXHU1OTRkXHU1OTUwXHU1''@;'; put 'put ''OTUyXHU1OTUzXHU1OTU5XHU1OTViIiw0LCJcdTU5NjFcdTU5NjNcdTU5NjRcdTU5NjYiLDEyLCJcdTU5NzVcdTU5NzdcdTU5N2FcdTU5N2JcdTU5N2NcdTU5N2VcdTU5N2ZcdTU5ODBcdTU5ODVcdTU5ODlcdTU5OGJcdTU5OGNcdTU5OGVcdTU5OGZcdTU5OTBcdTU5OTFcdTU5OTRcdTU5OTVc''@;'; put 'put ''dTU5OThcdTU5OWFcdTU5OWJcdTU5OWNcdTU5OWRcdTU5OWZcdTU5YTBcdTU5YTFcdTU5YTJcdTU5YTYiXSxbIjhhODAiLCJcdTU5YTdcdTU5YWNcdTU5YWRcdTU5YjBcdTU5YjFcdTU5YjMiLDUsIlx1NTliYVx1NTliY1x1NTliZFx1NTliZiIsNiwiXHU1OWM3XHU1OWM4XHU1OWM5XHU1OWNj''@;'; put 'put ''XHU1OWNkXHU1OWNlXHU1OWNmXHU1OWQ1XHU1OWQ2XHU1OWQ5XHU1OWRiXHU1OWRlIiw0LCJcdTU5ZTRcdTU5ZTZcdTU5ZTdcdTU5ZTlcdTU5ZWFcdTU5ZWJcdTU5ZWQiLDExLCJcdTU5ZmFcdTU5ZmNcdTU5ZmRcdTU5ZmVcdTVhMDBcdTVhMDJcdTVhMGFcdTVhMGJcdTVhMGRcdTVhMGVcdTVh''@;'; put 'put ''MGZcdTVhMTBcdTVhMTJcdTVhMTRcdTVhMTVcdTVhMTZcdTVhMTdcdTVhMTlcdTVhMWFcdTVhMWJcdTVhMWRcdTVhMWVcdTVhMjFcdTVhMjJcdTVhMjRcdTVhMjZcdTVhMjdcdTVhMjhcdTVhMmEiLDYsIlx1NWEzM1x1NWEzNVx1NWEzNyIsNCwiXHU1YTNkXHU1YTNlXHU1YTNmXHU1YTQxIiw0''@;'; put 'put ''LCJcdTVhNDdcdTVhNDhcdTVhNGIiLDksIlx1NWE1Nlx1NWE1N1x1NWE1OFx1NWE1OVx1NWE1YiIsNV0sWyI4YjQwIiwiXHU1YTYxXHU1YTYzXHU1YTY0XHU1YTY1XHU1YTY2XHU1YTY4XHU1YTY5XHU1YTZiIiw4LCJcdTVhNzhcdTVhNzlcdTVhN2JcdTVhN2NcdTVhN2RcdTVhN2VcdTVhODAi''@;'; put 'put ''LDE3LCJcdTVhOTMiLDYsIlx1NWE5YyIsMTMsIlx1NWFhYlx1NWFhYyJdLFsiOGI4MCIsIlx1NWFhZCIsNCwiXHU1YWI0XHU1YWI2XHU1YWI3XHU1YWI5Iiw0LCJcdTVhYmZcdTVhYzBcdTVhYzMiLDUsIlx1NWFjYVx1NWFjYlx1NWFjZCIsNCwiXHU1YWQzXHU1YWQ1XHU1YWQ3XHU1YWQ5XHU1''@;'; put 'put ''YWRhXHU1YWRiXHU1YWRkXHU1YWRlXHU1YWRmXHU1YWUyXHU1YWU0XHU1YWU1XHU1YWU3XHU1YWU4XHU1YWVhXHU1YWVjIiw0LCJcdTVhZjIiLDIyLCJcdTViMGEiLDExLCJcdTViMTgiLDI1LCJcdTViMzNcdTViMzVcdTViMzZcdTViMzgiLDcsIlx1NWI0MSIsNl0sWyI4YzQwIiwiXHU1YjQ4''@;'; put 'put ''Iiw3LCJcdTViNTJcdTViNTZcdTViNWVcdTViNjBcdTViNjFcdTViNjdcdTViNjhcdTViNmJcdTViNmRcdTViNmVcdTViNmZcdTViNzJcdTViNzRcdTViNzZcdTViNzdcdTViNzhcdTViNzlcdTViN2JcdTViN2NcdTViN2VcdTViN2ZcdTViODJcdTViODZcdTViOGFcdTViOGRcdTViOGVcdTVi''@;'; put 'put ''OTBcdTViOTFcdTViOTJcdTViOTRcdTViOTZcdTViOWZcdTViYTdcdTViYThcdTViYTlcdTViYWNcdTViYWRcdTViYWVcdTViYWZcdTViYjFcdTViYjJcdTViYjdcdTViYmFcdTViYmJcdTViYmNcdTViYzBcdTViYzFcdTViYzNcdTViYzhcdTViYzlcdTViY2FcdTViY2JcdTViY2RcdTViY2Vc''@;'; put 'put ''dTViY2YiXSxbIjhjODAiLCJcdTViZDFcdTViZDQiLDgsIlx1NWJlMFx1NWJlMlx1NWJlM1x1NWJlNlx1NWJlN1x1NWJlOSIsNCwiXHU1YmVmXHU1YmYxIiw2LCJcdTViZmRcdTViZmVcdTVjMDBcdTVjMDJcdTVjMDNcdTVjMDVcdTVjMDdcdTVjMDhcdTVjMGJcdTVjMGNcdTVjMGRcdTVjMGVc''@;'; put 'put ''dTVjMTBcdTVjMTJcdTVjMTNcdTVjMTdcdTVjMTlcdTVjMWJcdTVjMWVcdTVjMWZcdTVjMjBcdTVjMjFcdTVjMjNcdTVjMjZcdTVjMjhcdTVjMjlcdTVjMmFcdTVjMmJcdTVjMmRcdTVjMmVcdTVjMmZcdTVjMzBcdTVjMzJcdTVjMzNcdTVjMzVcdTVjMzZcdTVjMzdcdTVjNDNcdTVjNDRcdTVj''@;'; put 'put ''NDZcdTVjNDdcdTVjNGNcdTVjNGRcdTVjNTJcdTVjNTNcdTVjNTRcdTVjNTZcdTVjNTdcdTVjNThcdTVjNWFcdTVjNWJcdTVjNWNcdTVjNWRcdTVjNWZcdTVjNjJcdTVjNjRcdTVjNjciLDYsIlx1NWM3MFx1NWM3MiIsNiwiXHU1YzdiXHU1YzdjXHU1YzdkXHU1YzdlXHU1YzgwXHU1YzgzIiw0''@;'; put 'put ''LCJcdTVjODlcdTVjOGFcdTVjOGJcdTVjOGVcdTVjOGZcdTVjOTJcdTVjOTNcdTVjOTVcdTVjOWQiLDQsIlx1NWNhNCIsNF0sWyI4ZDQwIiwiXHU1Y2FhXHU1Y2FlXHU1Y2FmXHU1Y2IwXHU1Y2IyXHU1Y2I0XHU1Y2I2XHU1Y2I5XHU1Y2JhXHU1Y2JiXHU1Y2JjXHU1Y2JlXHU1Y2MwXHU1Y2My''@;'; put 'put ''XHU1Y2MzXHU1Y2M1Iiw1LCJcdTVjY2MiLDUsIlx1NWNkMyIsNSwiXHU1Y2RhIiw2LCJcdTVjZTJcdTVjZTNcdTVjZTdcdTVjZTlcdTVjZWJcdTVjZWNcdTVjZWVcdTVjZWZcdTVjZjEiLDksIlx1NWNmYyIsNF0sWyI4ZDgwIiwiXHU1ZDAxXHU1ZDA0XHU1ZDA1XHU1ZDA4Iiw1LCJcdTVkMGYi''@;'; put 'put ''LDQsIlx1NWQxNVx1NWQxN1x1NWQxOFx1NWQxOVx1NWQxYVx1NWQxY1x1NWQxZFx1NWQxZiIsNCwiXHU1ZDI1XHU1ZDI4XHU1ZDJhXHU1ZDJiXHU1ZDJjXHU1ZDJmIiw0LCJcdTVkMzUiLDcsIlx1NWQzZiIsNywiXHU1ZDQ4XHU1ZDQ5XHU1ZDRkIiwxMCwiXHU1ZDU5XHU1ZDVhXHU1ZDVjXHU1''@;'; put 'put ''ZDVlIiwxMCwiXHU1ZDZhXHU1ZDZkXHU1ZDZlXHU1ZDcwXHU1ZDcxXHU1ZDcyXHU1ZDczXHU1ZDc1IiwxMiwiXHU1ZDgzIiwyMSwiXHU1ZDlhXHU1ZDliXHU1ZDljXHU1ZDllXHU1ZDlmXHU1ZGEwIl0sWyI4ZTQwIiwiXHU1ZGExIiwyMSwiXHU1ZGI4IiwxMiwiXHU1ZGM2Iiw2LCJcdTVkY2Ui''@;'; put 'put ''LDEyLCJcdTVkZGNcdTVkZGZcdTVkZTBcdTVkZTNcdTVkZTRcdTVkZWFcdTVkZWNcdTVkZWQiXSxbIjhlODAiLCJcdTVkZjBcdTVkZjVcdTVkZjZcdTVkZjgiLDQsIlx1NWRmZlx1NWUwMFx1NWUwNFx1NWUwN1x1NWUwOVx1NWUwYVx1NWUwYlx1NWUwZFx1NWUwZVx1NWUxMlx1NWUxM1x1NWUx''@;'; put 'put ''N1x1NWUxZSIsNywiXHU1ZTI4Iiw0LCJcdTVlMmZcdTVlMzBcdTVlMzIiLDQsIlx1NWUzOVx1NWUzYVx1NWUzZVx1NWUzZlx1NWU0MFx1NWU0MVx1NWU0M1x1NWU0NiIsNSwiXHU1ZTRkIiw2LCJcdTVlNTYiLDQsIlx1NWU1Y1x1NWU1ZFx1NWU1Zlx1NWU2MFx1NWU2MyIsMTQsIlx1NWU3NVx1''@;'; put 'put ''NWU3N1x1NWU3OVx1NWU3ZVx1NWU4MVx1NWU4Mlx1NWU4M1x1NWU4NVx1NWU4OFx1NWU4OVx1NWU4Y1x1NWU4ZFx1NWU4ZVx1NWU5Mlx1NWU5OFx1NWU5Ylx1NWU5ZFx1NWVhMVx1NWVhMlx1NWVhM1x1NWVhNFx1NWVhOCIsNCwiXHU1ZWFlIiw0LCJcdTVlYjRcdTVlYmFcdTVlYmJcdTVlYmNc''@;'; put 'put ''dTVlYmRcdTVlYmYiLDZdLFsiOGY0MCIsIlx1NWVjNlx1NWVjN1x1NWVjOFx1NWVjYiIsNSwiXHU1ZWQ0XHU1ZWQ1XHU1ZWQ3XHU1ZWQ4XHU1ZWQ5XHU1ZWRhXHU1ZWRjIiwxMSwiXHU1ZWU5XHU1ZWViIiw4LCJcdTVlZjVcdTVlZjhcdTVlZjlcdTVlZmJcdTVlZmNcdTVlZmRcdTVmMDVcdTVm''@;'; put 'put ''MDZcdTVmMDdcdTVmMDlcdTVmMGNcdTVmMGRcdTVmMGVcdTVmMTBcdTVmMTJcdTVmMTRcdTVmMTZcdTVmMTlcdTVmMWFcdTVmMWNcdTVmMWRcdTVmMWVcdTVmMjFcdTVmMjJcdTVmMjNcdTVmMjQiXSxbIjhmODAiLCJcdTVmMjhcdTVmMmJcdTVmMmNcdTVmMmVcdTVmMzBcdTVmMzIiLDYsIlx1''@;'; put 'put ''NWYzYlx1NWYzZFx1NWYzZVx1NWYzZlx1NWY0MSIsMTQsIlx1NWY1MVx1NWY1NFx1NWY1OVx1NWY1YVx1NWY1Ylx1NWY1Y1x1NWY1ZVx1NWY1Zlx1NWY2MFx1NWY2M1x1NWY2NVx1NWY2N1x1NWY2OFx1NWY2Ylx1NWY2ZVx1NWY2Zlx1NWY3Mlx1NWY3NFx1NWY3NVx1NWY3Nlx1NWY3OFx1NWY3''@;'; put 'put ''YVx1NWY3ZFx1NWY3ZVx1NWY3Zlx1NWY4M1x1NWY4Nlx1NWY4ZFx1NWY4ZVx1NWY4Zlx1NWY5MVx1NWY5M1x1NWY5NFx1NWY5Nlx1NWY5YVx1NWY5Ylx1NWY5ZFx1NWY5ZVx1NWY5Zlx1NWZhMFx1NWZhMiIsNSwiXHU1ZmE5XHU1ZmFiXHU1ZmFjXHU1ZmFmIiw1LCJcdTVmYjZcdTVmYjhcdTVm''@;'; put 'put ''YjlcdTVmYmFcdTVmYmJcdTVmYmUiLDQsIlx1NWZjN1x1NWZjOFx1NWZjYVx1NWZjYlx1NWZjZVx1NWZkM1x1NWZkNFx1NWZkNVx1NWZkYVx1NWZkYlx1NWZkY1x1NWZkZVx1NWZkZlx1NWZlMlx1NWZlM1x1NWZlNVx1NWZlNlx1NWZlOFx1NWZlOVx1NWZlY1x1NWZlZlx1NWZmMFx1NWZmMlx1''@;'; put 'put ''NWZmM1x1NWZmNFx1NWZmNlx1NWZmN1x1NWZmOVx1NWZmYVx1NWZmY1x1NjAwNyJdLFsiOTA0MCIsIlx1NjAwOFx1NjAwOVx1NjAwYlx1NjAwY1x1NjAxMFx1NjAxMVx1NjAxM1x1NjAxN1x1NjAxOFx1NjAxYVx1NjAxZVx1NjAxZlx1NjAyMlx1NjAyM1x1NjAyNFx1NjAyY1x1NjAyZFx1NjAy''@;'; put 'put ''ZVx1NjAzMCIsNCwiXHU2MDM2Iiw0LCJcdTYwM2RcdTYwM2VcdTYwNDBcdTYwNDQiLDYsIlx1NjA0Y1x1NjA0ZVx1NjA0Zlx1NjA1MVx1NjA1M1x1NjA1NFx1NjA1Nlx1NjA1N1x1NjA1OFx1NjA1Ylx1NjA1Y1x1NjA1ZVx1NjA1Zlx1NjA2MFx1NjA2MVx1NjA2NVx1NjA2Nlx1NjA2ZVx1NjA3''@;'; put 'put ''MVx1NjA3Mlx1NjA3NFx1NjA3NVx1NjA3N1x1NjA3ZVx1NjA4MCJdLFsiOTA4MCIsIlx1NjA4MVx1NjA4Mlx1NjA4NVx1NjA4Nlx1NjA4N1x1NjA4OFx1NjA4YVx1NjA4Ylx1NjA4ZVx1NjA4Zlx1NjA5MFx1NjA5MVx1NjA5M1x1NjA5NVx1NjA5N1x1NjA5OFx1NjA5OVx1NjA5Y1x1NjA5ZVx1''@;'; put 'put ''NjBhMVx1NjBhMlx1NjBhNFx1NjBhNVx1NjBhN1x1NjBhOVx1NjBhYVx1NjBhZVx1NjBiMFx1NjBiM1x1NjBiNVx1NjBiNlx1NjBiN1x1NjBiOVx1NjBiYVx1NjBiZCIsNywiXHU2MGM3XHU2MGM4XHU2MGM5XHU2MGNjIiw0LCJcdTYwZDJcdTYwZDNcdTYwZDRcdTYwZDZcdTYwZDdcdTYwZDlc''@;'; put 'put ''dTYwZGJcdTYwZGVcdTYwZTEiLDQsIlx1NjBlYVx1NjBmMVx1NjBmMlx1NjBmNVx1NjBmN1x1NjBmOFx1NjBmYiIsNCwiXHU2MTAyXHU2MTAzXHU2MTA0XHU2MTA1XHU2MTA3XHU2MTBhXHU2MTBiXHU2MTBjXHU2MTEwIiw0LCJcdTYxMTZcdTYxMTdcdTYxMThcdTYxMTlcdTYxMWJcdTYxMWNc''@;'; put 'put ''dTYxMWRcdTYxMWVcdTYxMjFcdTYxMjJcdTYxMjVcdTYxMjhcdTYxMjlcdTYxMmFcdTYxMmMiLDE4LCJcdTYxNDAiLDZdLFsiOTE0MCIsIlx1NjE0N1x1NjE0OVx1NjE0Ylx1NjE0ZFx1NjE0Zlx1NjE1MFx1NjE1Mlx1NjE1M1x1NjE1NFx1NjE1NiIsNiwiXHU2MTVlXHU2MTVmXHU2MTYwXHU2''@;'; put 'put ''MTYxXHU2MTYzXHU2MTY0XHU2MTY1XHU2MTY2XHU2MTY5Iiw2LCJcdTYxNzFcdTYxNzJcdTYxNzNcdTYxNzRcdTYxNzZcdTYxNzgiLDE4LCJcdTYxOGNcdTYxOGRcdTYxOGYiLDQsIlx1NjE5NSJdLFsiOTE4MCIsIlx1NjE5NiIsNiwiXHU2MTllIiw4LCJcdTYxYWFcdTYxYWJcdTYxYWQiLDks''@;'; put 'put ''Ilx1NjFiOCIsNSwiXHU2MWJmXHU2MWMwXHU2MWMxXHU2MWMzIiw0LCJcdTYxYzlcdTYxY2MiLDQsIlx1NjFkM1x1NjFkNSIsMTYsIlx1NjFlNyIsMTMsIlx1NjFmNiIsOCwiXHU2MjAwIiw1LCJcdTYyMDdcdTYyMDlcdTYyMTNcdTYyMTRcdTYyMTlcdTYyMWNcdTYyMWRcdTYyMWVcdTYyMjBc''@;'; put 'put ''dTYyMjNcdTYyMjZcdTYyMjdcdTYyMjhcdTYyMjlcdTYyMmJcdTYyMmRcdTYyMmZcdTYyMzBcdTYyMzFcdTYyMzJcdTYyMzVcdTYyMzZcdTYyMzgiLDQsIlx1NjI0Mlx1NjI0NFx1NjI0NVx1NjI0Nlx1NjI0YSJdLFsiOTI0MCIsIlx1NjI0Zlx1NjI1MFx1NjI1NVx1NjI1Nlx1NjI1N1x1NjI1''@;'; put 'put ''OVx1NjI1YVx1NjI1YyIsNiwiXHU2MjY0XHU2MjY1XHU2MjY4XHU2MjcxXHU2MjcyXHU2Mjc0XHU2Mjc1XHU2Mjc3XHU2Mjc4XHU2MjdhXHU2MjdiXHU2MjdkXHU2MjgxXHU2MjgyXHU2MjgzXHU2Mjg1XHU2Mjg2XHU2Mjg3XHU2Mjg4XHU2MjhiIiw1LCJcdTYyOTRcdTYyOTlcdTYyOWNcdTYy''@;'; put 'put ''OWRcdTYyOWVcdTYyYTNcdTYyYTZcdTYyYTdcdTYyYTlcdTYyYWFcdTYyYWRcdTYyYWVcdTYyYWZcdTYyYjBcdTYyYjJcdTYyYjNcdTYyYjRcdTYyYjZcdTYyYjdcdTYyYjhcdTYyYmFcdTYyYmVcdTYyYzBcdTYyYzEiXSxbIjkyODAiLCJcdTYyYzNcdTYyY2JcdTYyY2ZcdTYyZDFcdTYyZDVc''@;'; put 'put ''dTYyZGRcdTYyZGVcdTYyZTBcdTYyZTFcdTYyZTRcdTYyZWFcdTYyZWJcdTYyZjBcdTYyZjJcdTYyZjVcdTYyZjhcdTYyZjlcdTYyZmFcdTYyZmJcdTYzMDBcdTYzMDNcdTYzMDRcdTYzMDVcdTYzMDZcdTYzMGFcdTYzMGJcdTYzMGNcdTYzMGRcdTYzMGZcdTYzMTBcdTYzMTJcdTYzMTNcdTYz''@;'; put 'put ''MTRcdTYzMTVcdTYzMTdcdTYzMThcdTYzMTlcdTYzMWNcdTYzMjZcdTYzMjdcdTYzMjlcdTYzMmNcdTYzMmRcdTYzMmVcdTYzMzBcdTYzMzFcdTYzMzMiLDUsIlx1NjMzYlx1NjMzY1x1NjMzZVx1NjMzZlx1NjM0MFx1NjM0MVx1NjM0NFx1NjM0N1x1NjM0OFx1NjM0YVx1NjM1MVx1NjM1Mlx1''@;'; put 'put ''NjM1M1x1NjM1NFx1NjM1NiIsNywiXHU2MzYwXHU2MzY0XHU2MzY1XHU2MzY2XHU2MzY4XHU2MzZhXHU2MzZiXHU2MzZjXHU2MzZmXHU2MzcwXHU2MzcyXHU2MzczXHU2Mzc0XHU2Mzc1XHU2Mzc4XHU2Mzc5XHU2MzdjXHU2MzdkXHU2MzdlXHU2MzdmXHU2MzgxXHU2MzgzXHU2Mzg0XHU2Mzg1''@;'; put 'put ''XHU2Mzg2XHU2MzhiXHU2MzhkXHU2MzkxXHU2MzkzXHU2Mzk0XHU2Mzk1XHU2Mzk3XHU2Mzk5Iiw2LCJcdTYzYTFcdTYzYTRcdTYzYTZcdTYzYWJcdTYzYWZcdTYzYjFcdTYzYjJcdTYzYjVcdTYzYjZcdTYzYjlcdTYzYmJcdTYzYmRcdTYzYmZcdTYzYzAiXSxbIjkzNDAiLCJcdTYzYzFcdTYz''@;'; put 'put ''YzJcdTYzYzNcdTYzYzVcdTYzYzdcdTYzYzhcdTYzY2FcdTYzY2JcdTYzY2NcdTYzZDFcdTYzZDNcdTYzZDRcdTYzZDVcdTYzZDciLDYsIlx1NjNkZlx1NjNlMlx1NjNlNCIsNCwiXHU2M2ViXHU2M2VjXHU2M2VlXHU2M2VmXHU2M2YwXHU2M2YxXHU2M2YzXHU2M2Y1XHU2M2Y3XHU2M2Y5XHU2''@;'; put 'put ''M2ZhXHU2M2ZiXHU2M2ZjXHU2M2ZlXHU2NDAzXHU2NDA0XHU2NDA2Iiw0LCJcdTY0MGRcdTY0MGVcdTY0MTFcdTY0MTJcdTY0MTUiLDUsIlx1NjQxZFx1NjQxZlx1NjQyMlx1NjQyM1x1NjQyNCJdLFsiOTM4MCIsIlx1NjQyNVx1NjQyN1x1NjQyOFx1NjQyOVx1NjQyYlx1NjQyZSIsNSwiXHU2''@;'; put 'put ''NDM1Iiw0LCJcdTY0M2JcdTY0M2NcdTY0M2VcdTY0NDBcdTY0NDJcdTY0NDNcdTY0NDlcdTY0NGIiLDYsIlx1NjQ1M1x1NjQ1NVx1NjQ1Nlx1NjQ1N1x1NjQ1OSIsNCwiXHU2NDVmIiw3LCJcdTY0NjhcdTY0NmFcdTY0NmJcdTY0NmNcdTY0NmUiLDksIlx1NjQ3YiIsNiwiXHU2NDgzXHU2NDg2''@;'; put 'put ''XHU2NDg4Iiw4LCJcdTY0OTNcdTY0OTRcdTY0OTdcdTY0OThcdTY0OWFcdTY0OWJcdTY0OWNcdTY0OWRcdTY0OWYiLDQsIlx1NjRhNVx1NjRhNlx1NjRhN1x1NjRhOFx1NjRhYVx1NjRhYlx1NjRhZlx1NjRiMVx1NjRiMlx1NjRiM1x1NjRiNFx1NjRiNlx1NjRiOVx1NjRiYlx1NjRiZFx1NjRi''@;'; put 'put ''ZVx1NjRiZlx1NjRjMVx1NjRjM1x1NjRjNFx1NjRjNiIsNiwiXHU2NGNmXHU2NGQxXHU2NGQzXHU2NGQ0XHU2NGQ1XHU2NGQ2XHU2NGQ5XHU2NGRhIl0sWyI5NDQwIiwiXHU2NGRiXHU2NGRjXHU2NGRkXHU2NGRmXHU2NGUwXHU2NGUxXHU2NGUzXHU2NGU1XHU2NGU3IiwyNCwiXHU2NTAxIiw3''@;'; put 'put ''LCJcdTY1MGEiLDcsIlx1NjUxMyIsNCwiXHU2NTE5Iiw4XSxbIjk0ODAiLCJcdTY1MjJcdTY1MjNcdTY1MjRcdTY1MjYiLDQsIlx1NjUyY1x1NjUyZFx1NjUzMFx1NjUzMVx1NjUzMlx1NjUzM1x1NjUzN1x1NjUzYVx1NjUzY1x1NjUzZFx1NjU0MCIsNCwiXHU2NTQ2XHU2NTQ3XHU2NTRhXHU2''@;'; put 'put ''NTRiXHU2NTRkXHU2NTRlXHU2NTUwXHU2NTUyXHU2NTUzXHU2NTU0XHU2NTU3XHU2NTU4XHU2NTVhXHU2NTVjXHU2NTVmXHU2NTYwXHU2NTYxXHU2NTY0XHU2NTY1XHU2NTY3XHU2NTY4XHU2NTY5XHU2NTZhXHU2NTZkXHU2NTZlXHU2NTZmXHU2NTcxXHU2NTczXHU2NTc1XHU2NTc2XHU2NTc4''@;'; put 'put ''IiwxNCwiXHU2NTg4XHU2NTg5XHU2NThhXHU2NThkXHU2NThlXHU2NThmXHU2NTkyXHU2NTk0XHU2NTk1XHU2NTk2XHU2NTk4XHU2NTlhXHU2NTlkXHU2NTllXHU2NWEwXHU2NWEyXHU2NWEzXHU2NWE2XHU2NWE4XHU2NWFhXHU2NWFjXHU2NWFlXHU2NWIxIiw3LCJcdTY1YmFcdTY1YmJcdTY1''@;'; put 'put ''YmVcdTY1YmZcdTY1YzBcdTY1YzJcdTY1YzdcdTY1YzhcdTY1YzlcdTY1Y2FcdTY1Y2RcdTY1ZDBcdTY1ZDFcdTY1ZDNcdTY1ZDRcdTY1ZDVcdTY1ZDgiLDcsIlx1NjVlMVx1NjVlM1x1NjVlNFx1NjVlYVx1NjVlYiJdLFsiOTU0MCIsIlx1NjVmMlx1NjVmM1x1NjVmNFx1NjVmNVx1NjVmOFx1''@;'; put 'put ''NjVmOVx1NjVmYiIsNCwiXHU2NjAxXHU2NjA0XHU2NjA1XHU2NjA3XHU2NjA4XHU2NjA5XHU2NjBiXHU2NjBkXHU2NjEwXHU2NjExXHU2NjEyXHU2NjE2XHU2NjE3XHU2NjE4XHU2NjFhXHU2NjFiXHU2NjFjXHU2NjFlXHU2NjIxXHU2NjIyXHU2NjIzXHU2NjI0XHU2NjI2XHU2NjI5XHU2NjJh''@;'; put 'put ''XHU2NjJiXHU2NjJjXHU2NjJlXHU2NjMwXHU2NjMyXHU2NjMzXHU2NjM3Iiw0LCJcdTY2M2RcdTY2M2ZcdTY2NDBcdTY2NDJcdTY2NDQiLDYsIlx1NjY0ZFx1NjY0ZVx1NjY1MFx1NjY1MVx1NjY1OCJdLFsiOTU4MCIsIlx1NjY1OVx1NjY1Ylx1NjY1Y1x1NjY1ZFx1NjY1ZVx1NjY2MFx1NjY2''@;'; put 'put ''Mlx1NjY2M1x1NjY2NVx1NjY2N1x1NjY2OSIsNCwiXHU2NjcxXHU2NjcyXHU2NjczXHU2Njc1XHU2Njc4XHU2Njc5XHU2NjdiXHU2NjdjXHU2NjdkXHU2NjdmXHU2NjgwXHU2NjgxXHU2NjgzXHU2Njg1XHU2Njg2XHU2Njg4XHU2Njg5XHU2NjhhXHU2NjhiXHU2NjhkXHU2NjhlXHU2NjhmXHU2''@;'; put 'put ''NjkwXHU2NjkyXHU2NjkzXHU2Njk0XHU2Njk1XHU2Njk4Iiw0LCJcdTY2OWUiLDgsIlx1NjZhOSIsNCwiXHU2NmFmIiw0LCJcdTY2YjVcdTY2YjZcdTY2YjdcdTY2YjhcdTY2YmFcdTY2YmJcdTY2YmNcdTY2YmRcdTY2YmYiLDI1LCJcdTY2ZGFcdTY2ZGUiLDcsIlx1NjZlN1x1NjZlOFx1NjZl''@;'; put 'put ''YSIsNSwiXHU2NmYxXHU2NmY1XHU2NmY2XHU2NmY4XHU2NmZhXHU2NmZiXHU2NmZkXHU2NzAxXHU2NzAyXHU2NzAzIl0sWyI5NjQwIiwiXHU2NzA0XHU2NzA1XHU2NzA2XHU2NzA3XHU2NzBjXHU2NzBlXHU2NzBmXHU2NzExXHU2NzEyXHU2NzEzXHU2NzE2XHU2NzE4XHU2NzE5XHU2NzFhXHU2''@;'; put 'put ''NzFjXHU2NzFlXHU2NzIwIiw1LCJcdTY3MjdcdTY3MjlcdTY3MmVcdTY3MzBcdTY3MzJcdTY3MzNcdTY3MzZcdTY3MzdcdTY3MzhcdTY3MzlcdTY3M2JcdTY3M2NcdTY3M2VcdTY3M2ZcdTY3NDFcdTY3NDRcdTY3NDVcdTY3NDdcdTY3NGFcdTY3NGJcdTY3NGRcdTY3NTJcdTY3NTRcdTY3NTVc''@;'; put 'put ''dTY3NTciLDQsIlx1Njc1ZFx1Njc2Mlx1Njc2M1x1Njc2NFx1Njc2Nlx1Njc2N1x1Njc2Ylx1Njc2Y1x1Njc2ZVx1Njc3MVx1Njc3NFx1Njc3NiJdLFsiOTY4MCIsIlx1Njc3OFx1Njc3OVx1Njc3YVx1Njc3Ylx1Njc3ZFx1Njc4MFx1Njc4Mlx1Njc4M1x1Njc4NVx1Njc4Nlx1Njc4OFx1Njc4''@;'; put 'put ''YVx1Njc4Y1x1Njc4ZFx1Njc4ZVx1Njc4Zlx1Njc5MVx1Njc5Mlx1Njc5M1x1Njc5NFx1Njc5Nlx1Njc5OVx1Njc5Ylx1Njc5Zlx1NjdhMFx1NjdhMVx1NjdhNFx1NjdhNlx1NjdhOVx1NjdhY1x1NjdhZVx1NjdiMVx1NjdiMlx1NjdiNFx1NjdiOSIsNywiXHU2N2MyXHU2N2M1Iiw5LCJcdTY3''@;'; put 'put ''ZDVcdTY3ZDZcdTY3ZDdcdTY3ZGJcdTY3ZGZcdTY3ZTFcdTY3ZTNcdTY3ZTRcdTY3ZTZcdTY3ZTdcdTY3ZThcdTY3ZWFcdTY3ZWJcdTY3ZWRcdTY3ZWVcdTY3ZjJcdTY3ZjUiLDcsIlx1NjdmZVx1NjgwMVx1NjgwMlx1NjgwM1x1NjgwNFx1NjgwNlx1NjgwZFx1NjgxMFx1NjgxMlx1NjgxNFx1''@;'; put 'put ''NjgxNVx1NjgxOCIsNCwiXHU2ODFlXHU2ODFmXHU2ODIwXHU2ODIyIiw2LCJcdTY4MmIiLDYsIlx1NjgzNFx1NjgzNVx1NjgzNlx1NjgzYVx1NjgzYlx1NjgzZlx1Njg0N1x1Njg0Ylx1Njg0ZFx1Njg0Zlx1Njg1Mlx1Njg1NiIsNV0sWyI5NzQwIiwiXHU2ODVjXHU2ODVkXHU2ODVlXHU2ODVm''@;'; put 'put ''XHU2ODZhXHU2ODZjIiw3LCJcdTY4NzVcdTY4NzgiLDgsIlx1Njg4Mlx1Njg4NFx1Njg4NyIsNywiXHU2ODkwXHU2ODkxXHU2ODkyXHU2ODk0XHU2ODk1XHU2ODk2XHU2ODk4Iiw5LCJcdTY4YTNcdTY4YTRcdTY4YTVcdTY4YTlcdTY4YWFcdTY4YWJcdTY4YWNcdTY4YWVcdTY4YjFcdTY4YjJc''@;'; put 'put ''dTY4YjRcdTY4YjZcdTY4YjdcdTY4YjgiXSxbIjk3ODAiLCJcdTY4YjkiLDYsIlx1NjhjMVx1NjhjMyIsNSwiXHU2OGNhXHU2OGNjXHU2OGNlXHU2OGNmXHU2OGQwXHU2OGQxXHU2OGQzXHU2OGQ0XHU2OGQ2XHU2OGQ3XHU2OGQ5XHU2OGRiIiw0LCJcdTY4ZTFcdTY4ZTJcdTY4ZTQiLDksIlx1''@;'; put 'put ''NjhlZlx1NjhmMlx1NjhmM1x1NjhmNFx1NjhmNlx1NjhmN1x1NjhmOFx1NjhmYlx1NjhmZFx1NjhmZVx1NjhmZlx1NjkwMFx1NjkwMlx1NjkwM1x1NjkwNFx1NjkwNiIsNCwiXHU2OTBjXHU2OTBmXHU2OTExXHU2OTEzIiwxMSwiXHU2OTIxXHU2OTIyXHU2OTIzXHU2OTI1Iiw3LCJcdTY5MmVc''@;'; put 'put ''dTY5MmZcdTY5MzFcdTY5MzJcdTY5MzNcdTY5MzVcdTY5MzZcdTY5MzdcdTY5MzhcdTY5M2FcdTY5M2JcdTY5M2NcdTY5M2VcdTY5NDBcdTY5NDFcdTY5NDMiLDE2LCJcdTY5NTVcdTY5NTZcdTY5NThcdTY5NTlcdTY5NWJcdTY5NWNcdTY5NWYiXSxbIjk4NDAiLCJcdTY5NjFcdTY5NjJcdTY5''@;'; put 'put ''NjRcdTY5NjVcdTY5NjdcdTY5NjhcdTY5NjlcdTY5NmFcdTY5NmNcdTY5NmRcdTY5NmZcdTY5NzBcdTY5NzIiLDQsIlx1Njk3YVx1Njk3Ylx1Njk3ZFx1Njk3ZVx1Njk3Zlx1Njk4MVx1Njk4M1x1Njk4NVx1Njk4YVx1Njk4Ylx1Njk4Y1x1Njk4ZSIsNSwiXHU2OTk2XHU2OTk3XHU2OTk5XHU2''@;'; put 'put ''OTlhXHU2OTlkIiw5LCJcdTY5YTlcdTY5YWFcdTY5YWNcdTY5YWVcdTY5YWZcdTY5YjBcdTY5YjJcdTY5YjNcdTY5YjVcdTY5YjZcdTY5YjhcdTY5YjlcdTY5YmFcdTY5YmNcdTY5YmQiXSxbIjk4ODAiLCJcdTY5YmVcdTY5YmZcdTY5YzBcdTY5YzIiLDcsIlx1NjljYlx1NjljZFx1NjljZlx1''@;'; put 'put ''NjlkMVx1NjlkMlx1NjlkM1x1NjlkNSIsNSwiXHU2OWRjXHU2OWRkXHU2OWRlXHU2OWUxIiwxMSwiXHU2OWVlXHU2OWVmXHU2OWYwXHU2OWYxXHU2OWYzIiw5LCJcdTY5ZmVcdTZhMDAiLDksIlx1NmEwYiIsMTEsIlx1NmExOSIsNSwiXHU2YTIwXHU2YTIyIiw1LCJcdTZhMjlcdTZhMmJcdTZh''@;'; put 'put ''MmNcdTZhMmRcdTZhMmVcdTZhMzBcdTZhMzJcdTZhMzNcdTZhMzRcdTZhMzYiLDYsIlx1NmEzZiIsNCwiXHU2YTQ1XHU2YTQ2XHU2YTQ4Iiw3LCJcdTZhNTEiLDYsIlx1NmE1YSJdLFsiOTk0MCIsIlx1NmE1YyIsNCwiXHU2YTYyXHU2YTYzXHU2YTY0XHU2YTY2IiwxMCwiXHU2YTcyIiw2LCJc''@;'; put 'put ''dTZhN2FcdTZhN2JcdTZhN2RcdTZhN2VcdTZhN2ZcdTZhODFcdTZhODJcdTZhODNcdTZhODUiLDgsIlx1NmE4Zlx1NmE5MiIsNCwiXHU2YTk4Iiw3LCJcdTZhYTEiLDVdLFsiOTk4MCIsIlx1NmFhN1x1NmFhOFx1NmFhYVx1NmFhZCIsMTE0LCJcdTZiMjVcdTZiMjZcdTZiMjgiLDZdLFsiOWE0''@;'; put 'put ''MCIsIlx1NmIyZlx1NmIzMFx1NmIzMVx1NmIzM1x1NmIzNFx1NmIzNVx1NmIzNlx1NmIzOFx1NmIzYlx1NmIzY1x1NmIzZFx1NmIzZlx1NmI0MFx1NmI0MVx1NmI0Mlx1NmI0NFx1NmI0NVx1NmI0OFx1NmI0YVx1NmI0Ylx1NmI0ZCIsMTEsIlx1NmI1YSIsNywiXHU2YjY4XHU2YjY5XHU2YjZi''@;'; put 'put ''IiwxMywiXHU2YjdhXHU2YjdkXHU2YjdlXHU2YjdmXHU2YjgwXHU2Yjg1XHU2Yjg4Il0sWyI5YTgwIiwiXHU2YjhjXHU2YjhlXHU2YjhmXHU2YjkwXHU2YjkxXHU2Yjk0XHU2Yjk1XHU2Yjk3XHU2Yjk4XHU2Yjk5XHU2YjljIiw0LCJcdTZiYTIiLDcsIlx1NmJhYiIsNywiXHU2YmI2XHU2YmI4''@;'; put 'put ''Iiw2LCJcdTZiYzBcdTZiYzNcdTZiYzRcdTZiYzYiLDQsIlx1NmJjY1x1NmJjZVx1NmJkMFx1NmJkMVx1NmJkOFx1NmJkYVx1NmJkYyIsNCwiXHU2YmUyIiw3LCJcdTZiZWNcdTZiZWRcdTZiZWVcdTZiZjBcdTZiZjFcdTZiZjJcdTZiZjRcdTZiZjZcdTZiZjdcdTZiZjhcdTZiZmFcdTZiZmJc''@;'; put 'put ''dTZiZmNcdTZiZmUiLDYsIlx1NmMwOCIsNCwiXHU2YzBlXHU2YzEyXHU2YzE3XHU2YzFjXHU2YzFkXHU2YzFlXHU2YzIwXHU2YzIzXHU2YzI1XHU2YzJiXHU2YzJjXHU2YzJkXHU2YzMxXHU2YzMzXHU2YzM2XHU2YzM3XHU2YzM5XHU2YzNhXHU2YzNiXHU2YzNjXHU2YzNlXHU2YzNmXHU2YzQz''@;'; put 'put ''XHU2YzQ0XHU2YzQ1XHU2YzQ4XHU2YzRiIiw0LCJcdTZjNTFcdTZjNTJcdTZjNTNcdTZjNTZcdTZjNTgiXSxbIjliNDAiLCJcdTZjNTlcdTZjNWFcdTZjNjJcdTZjNjNcdTZjNjVcdTZjNjZcdTZjNjdcdTZjNmIiLDQsIlx1NmM3MVx1NmM3M1x1NmM3NVx1NmM3N1x1NmM3OFx1NmM3YVx1NmM3''@;'; put 'put ''Ylx1NmM3Y1x1NmM3Zlx1NmM4MFx1NmM4NFx1NmM4N1x1NmM4YVx1NmM4Ylx1NmM4ZFx1NmM4ZVx1NmM5MVx1NmM5Mlx1NmM5NVx1NmM5Nlx1NmM5N1x1NmM5OFx1NmM5YVx1NmM5Y1x1NmM5ZFx1NmM5ZVx1NmNhMFx1NmNhMlx1NmNhOFx1NmNhY1x1NmNhZlx1NmNiMFx1NmNiNFx1NmNiNVx1''@;'; put 'put ''NmNiNlx1NmNiN1x1NmNiYVx1NmNjMFx1NmNjMVx1NmNjMlx1NmNjM1x1NmNjNlx1NmNjN1x1NmNjOFx1NmNjYlx1NmNjZFx1NmNjZVx1NmNjZlx1NmNkMVx1NmNkMlx1NmNkOCJdLFsiOWI4MCIsIlx1NmNkOVx1NmNkYVx1NmNkY1x1NmNkZFx1NmNkZlx1NmNlNFx1NmNlNlx1NmNlN1x1NmNl''@;'; put 'put ''OVx1NmNlY1x1NmNlZFx1NmNmMlx1NmNmNFx1NmNmOVx1NmNmZlx1NmQwMFx1NmQwMlx1NmQwM1x1NmQwNVx1NmQwNlx1NmQwOFx1NmQwOVx1NmQwYVx1NmQwZFx1NmQwZlx1NmQxMFx1NmQxMVx1NmQxM1x1NmQxNFx1NmQxNVx1NmQxNlx1NmQxOFx1NmQxY1x1NmQxZFx1NmQxZiIsNSwiXHU2''@;'; put 'put ''ZDI2XHU2ZDI4XHU2ZDI5XHU2ZDJjXHU2ZDJkXHU2ZDJmXHU2ZDMwXHU2ZDM0XHU2ZDM2XHU2ZDM3XHU2ZDM4XHU2ZDNhXHU2ZDNmXHU2ZDQwXHU2ZDQyXHU2ZDQ0XHU2ZDQ5XHU2ZDRjXHU2ZDUwXHU2ZDU1XHU2ZDU2XHU2ZDU3XHU2ZDU4XHU2ZDViXHU2ZDVkXHU2ZDVmXHU2ZDYxXHU2ZDYy''@;'; put 'put ''XHU2ZDY0XHU2ZDY1XHU2ZDY3XHU2ZDY4XHU2ZDZiXHU2ZDZjXHU2ZDZkXHU2ZDcwXHU2ZDcxXHU2ZDcyXHU2ZDczXHU2ZDc1XHU2ZDc2XHU2ZDc5XHU2ZDdhXHU2ZDdiXHU2ZDdkIiw0LCJcdTZkODNcdTZkODRcdTZkODZcdTZkODdcdTZkOGFcdTZkOGJcdTZkOGRcdTZkOGZcdTZkOTBcdTZk''@;'; put 'put ''OTJcdTZkOTYiLDQsIlx1NmQ5Y1x1NmRhMlx1NmRhNVx1NmRhY1x1NmRhZFx1NmRiMFx1NmRiMVx1NmRiM1x1NmRiNFx1NmRiNlx1NmRiN1x1NmRiOSIsNSwiXHU2ZGMxXHU2ZGMyXHU2ZGMzXHU2ZGM4XHU2ZGM5XHU2ZGNhIl0sWyI5YzQwIiwiXHU2ZGNkXHU2ZGNlXHU2ZGNmXHU2ZGQwXHU2''@;'; put 'put ''ZGQyXHU2ZGQzXHU2ZGQ0XHU2ZGQ1XHU2ZGQ3XHU2ZGRhXHU2ZGRiXHU2ZGRjXHU2ZGRmXHU2ZGUyXHU2ZGUzXHU2ZGU1XHU2ZGU3XHU2ZGU4XHU2ZGU5XHU2ZGVhXHU2ZGVkXHU2ZGVmXHU2ZGYwXHU2ZGYyXHU2ZGY0XHU2ZGY1XHU2ZGY2XHU2ZGY4XHU2ZGZhXHU2ZGZkIiw3LCJcdTZlMDZc''@;'; put 'put ''dTZlMDdcdTZlMDhcdTZlMDlcdTZlMGJcdTZlMGZcdTZlMTJcdTZlMTNcdTZlMTVcdTZlMThcdTZlMTlcdTZlMWJcdTZlMWNcdTZlMWVcdTZlMWZcdTZlMjJcdTZlMjZcdTZlMjdcdTZlMjhcdTZlMmFcdTZlMmNcdTZlMmVcdTZlMzBcdTZlMzFcdTZlMzNcdTZlMzUiXSxbIjljODAiLCJcdTZl''@;'; put 'put ''MzZcdTZlMzdcdTZlMzlcdTZlM2IiLDcsIlx1NmU0NSIsNywiXHU2ZTRmXHU2ZTUwXHU2ZTUxXHU2ZTUyXHU2ZTU1XHU2ZTU3XHU2ZTU5XHU2ZTVhXHU2ZTVjXHU2ZTVkXHU2ZTVlXHU2ZTYwIiwxMCwiXHU2ZTZjXHU2ZTZkXHU2ZTZmIiwxNCwiXHU2ZTgwXHU2ZTgxXHU2ZTgyXHU2ZTg0XHU2''@;'; put 'put ''ZTg3XHU2ZTg4XHU2ZThhIiw0LCJcdTZlOTEiLDYsIlx1NmU5OVx1NmU5YVx1NmU5Ylx1NmU5ZFx1NmU5ZVx1NmVhMFx1NmVhMVx1NmVhM1x1NmVhNFx1NmVhNlx1NmVhOFx1NmVhOVx1NmVhYlx1NmVhY1x1NmVhZFx1NmVhZVx1NmViMFx1NmViM1x1NmViNVx1NmViOFx1NmViOVx1NmViY1x1''@;'; put 'put ''NmViZVx1NmViZlx1NmVjMFx1NmVjM1x1NmVjNFx1NmVjNVx1NmVjNlx1NmVjOFx1NmVjOVx1NmVjYVx1NmVjY1x1NmVjZFx1NmVjZVx1NmVkMFx1NmVkMlx1NmVkNlx1NmVkOFx1NmVkOVx1NmVkYlx1NmVkY1x1NmVkZFx1NmVlM1x1NmVlN1x1NmVlYSIsNV0sWyI5ZDQwIiwiXHU2ZWYwXHU2''@;'; put 'put ''ZWYxXHU2ZWYyXHU2ZWYzXHU2ZWY1XHU2ZWY2XHU2ZWY3XHU2ZWY4XHU2ZWZhIiw3LCJcdTZmMDNcdTZmMDRcdTZmMDVcdTZmMDdcdTZmMDhcdTZmMGEiLDQsIlx1NmYxMFx1NmYxMVx1NmYxMlx1NmYxNiIsOSwiXHU2ZjIxXHU2ZjIyXHU2ZjIzXHU2ZjI1XHU2ZjI2XHU2ZjI3XHU2ZjI4XHU2''@;'; put 'put ''ZjJjXHU2ZjJlXHU2ZjMwXHU2ZjMyXHU2ZjM0XHU2ZjM1XHU2ZjM3Iiw2LCJcdTZmM2ZcdTZmNDBcdTZmNDFcdTZmNDIiXSxbIjlkODAiLCJcdTZmNDNcdTZmNDRcdTZmNDVcdTZmNDhcdTZmNDlcdTZmNGFcdTZmNGNcdTZmNGUiLDksIlx1NmY1OVx1NmY1YVx1NmY1Ylx1NmY1ZFx1NmY1Zlx1''@;'; put 'put ''NmY2MFx1NmY2MVx1NmY2M1x1NmY2NFx1NmY2NVx1NmY2NyIsNSwiXHU2ZjZmXHU2ZjcwXHU2ZjcxXHU2ZjczXHU2Zjc1XHU2Zjc2XHU2Zjc3XHU2Zjc5XHU2ZjdiXHU2ZjdkIiw2LCJcdTZmODVcdTZmODZcdTZmODdcdTZmOGFcdTZmOGJcdTZmOGYiLDEyLCJcdTZmOWRcdTZmOWVcdTZmOWZc''@;'; put 'put ''dTZmYTBcdTZmYTIiLDQsIlx1NmZhOCIsMTAsIlx1NmZiNFx1NmZiNVx1NmZiN1x1NmZiOFx1NmZiYSIsNSwiXHU2ZmMxXHU2ZmMzIiw1LCJcdTZmY2EiLDYsIlx1NmZkMyIsMTAsIlx1NmZkZlx1NmZlMlx1NmZlM1x1NmZlNFx1NmZlNSJdLFsiOWU0MCIsIlx1NmZlNiIsNywiXHU2ZmYwIiwz''@;'; put 'put ''MiwiXHU3MDEyIiw3LCJcdTcwMWMiLDYsIlx1NzAyNCIsNl0sWyI5ZTgwIiwiXHU3MDJiIiw5LCJcdTcwMzZcdTcwMzdcdTcwMzhcdTcwM2EiLDE3LCJcdTcwNGRcdTcwNGVcdTcwNTAiLDEzLCJcdTcwNWYiLDExLCJcdTcwNmVcdTcwNzFcdTcwNzJcdTcwNzNcdTcwNzRcdTcwNzdcdTcwNzlc''@;'; put 'put ''dTcwN2FcdTcwN2JcdTcwN2RcdTcwODFcdTcwODJcdTcwODNcdTcwODRcdTcwODZcdTcwODdcdTcwODhcdTcwOGJcdTcwOGNcdTcwOGRcdTcwOGZcdTcwOTBcdTcwOTFcdTcwOTNcdTcwOTdcdTcwOThcdTcwOWFcdTcwOWJcdTcwOWUiLDEyLCJcdTcwYjBcdTcwYjJcdTcwYjRcdTcwYjVcdTcw''@;'; put 'put ''YjZcdTcwYmFcdTcwYmVcdTcwYmZcdTcwYzRcdTcwYzVcdTcwYzZcdTcwYzdcdTcwYzlcdTcwY2IiLDEyLCJcdTcwZGEiXSxbIjlmNDAiLCJcdTcwZGNcdTcwZGRcdTcwZGVcdTcwZTBcdTcwZTFcdTcwZTJcdTcwZTNcdTcwZTVcdTcwZWFcdTcwZWVcdTcwZjAiLDYsIlx1NzBmOFx1NzBmYVx1''@;'; put 'put ''NzBmYlx1NzBmY1x1NzBmZSIsMTAsIlx1NzEwYiIsNCwiXHU3MTExXHU3MTEyXHU3MTE0XHU3MTE3XHU3MTFiIiwxMCwiXHU3MTI3Iiw3LCJcdTcxMzJcdTcxMzNcdTcxMzQiXSxbIjlmODAiLCJcdTcxMzVcdTcxMzciLDEzLCJcdTcxNDZcdTcxNDdcdTcxNDhcdTcxNDlcdTcxNGJcdTcxNGRc''@;'; put 'put ''dTcxNGYiLDEyLCJcdTcxNWRcdTcxNWYiLDQsIlx1NzE2NVx1NzE2OSIsNCwiXHU3MTZmXHU3MTcwXHU3MTcxXHU3MTc0XHU3MTc1XHU3MTc2XHU3MTc3XHU3MTc5XHU3MTdiXHU3MTdjXHU3MTdlIiw1LCJcdTcxODUiLDQsIlx1NzE4Ylx1NzE4Y1x1NzE4ZFx1NzE4ZVx1NzE5MFx1NzE5MVx1''@;'; put 'put ''NzE5Mlx1NzE5M1x1NzE5NVx1NzE5Nlx1NzE5N1x1NzE5YSIsNCwiXHU3MWExIiw2LCJcdTcxYTlcdTcxYWFcdTcxYWJcdTcxYWQiLDUsIlx1NzFiNFx1NzFiNlx1NzFiN1x1NzFiOFx1NzFiYSIsOCwiXHU3MWM0Iiw5LCJcdTcxY2YiLDRdLFsiYTA0MCIsIlx1NzFkNiIsOSwiXHU3MWUxXHU3''@;'; put 'put ''MWUyXHU3MWUzXHU3MWU0XHU3MWU2XHU3MWU4Iiw1LCJcdTcxZWYiLDksIlx1NzFmYSIsMTEsIlx1NzIwNyIsMTldLFsiYTA4MCIsIlx1NzIxYlx1NzIxY1x1NzIxZSIsOSwiXHU3MjI5XHU3MjJiXHU3MjJkXHU3MjJlXHU3MjJmXHU3MjMyXHU3MjMzXHU3MjM0XHU3MjNhXHU3MjNjXHU3MjNl''@;'; put 'put ''XHU3MjQwIiw2LCJcdTcyNDlcdTcyNGFcdTcyNGJcdTcyNGVcdTcyNGZcdTcyNTBcdTcyNTFcdTcyNTNcdTcyNTRcdTcyNTVcdTcyNTdcdTcyNThcdTcyNWFcdTcyNWNcdTcyNWVcdTcyNjBcdTcyNjNcdTcyNjRcdTcyNjVcdTcyNjhcdTcyNmFcdTcyNmJcdTcyNmNcdTcyNmRcdTcyNzBcdTcy''@;'; put 'put ''NzFcdTcyNzNcdTcyNzRcdTcyNzZcdTcyNzdcdTcyNzhcdTcyN2JcdTcyN2NcdTcyN2RcdTcyODJcdTcyODNcdTcyODUiLDQsIlx1NzI4Y1x1NzI4ZVx1NzI5MFx1NzI5MVx1NzI5MyIsMTEsIlx1NzJhMCIsMTEsIlx1NzJhZVx1NzJiMVx1NzJiMlx1NzJiM1x1NzJiNVx1NzJiYSIsNiwiXHU3''@;'; put 'put ''MmM1XHU3MmM2XHU3MmM3XHU3MmM5XHU3MmNhXHU3MmNiXHU3MmNjXHU3MmNmXHU3MmQxXHU3MmQzXHU3MmQ0XHU3MmQ1XHU3MmQ2XHU3MmQ4XHU3MmRhXHU3MmRiIl0sWyJhMWExIiwiXHUzMDAwXHUzMDAxXHUzMDAyXHhiN1x1MDJjOVx1MDJjN1x4YThcdTMwMDNcdTMwMDVcdTIwMTRcdWZm''@;'; put 'put ''NWVcdTIwMTZcdTIwMjZcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTMwMTRcdTMwMTVcdTMwMDgiLDcsIlx1MzAxNlx1MzAxN1x1MzAxMFx1MzAxMVx4YjFceGQ3XHhmN1x1MjIzNlx1MjIyN1x1MjIyOFx1MjIxMVx1MjIwZlx1MjIyYVx1MjIyOVx1MjIwOFx1MjIzN1x1MjIxYVx1MjJhNVx1''@;'; put 'put ''MjIyNVx1MjIyMFx1MjMxMlx1MjI5OVx1MjIyYlx1MjIyZVx1MjI2MVx1MjI0Y1x1MjI0OFx1MjIzZFx1MjIxZFx1MjI2MFx1MjI2ZVx1MjI2Zlx1MjI2NFx1MjI2NVx1MjIxZVx1MjIzNVx1MjIzNFx1MjY0Mlx1MjY0MFx4YjBcdTIwMzJcdTIwMzNcdTIxMDNcdWZmMDRceGE0XHVmZmUwXHVm''@;'; put 'put ''ZmUxXHUyMDMwXHhhN1x1MjExNlx1MjYwNlx1MjYwNVx1MjVjYlx1MjVjZlx1MjVjZVx1MjVjN1x1MjVjNlx1MjVhMVx1MjVhMFx1MjViM1x1MjViMlx1MjAzYlx1MjE5Mlx1MjE5MFx1MjE5MVx1MjE5M1x1MzAxMyJdLFsiYTJhMSIsIlx1MjE3MCIsOV0sWyJhMmIxIiwiXHUyNDg4IiwxOSwi''@;'; put 'put ''XHUyNDc0IiwxOSwiXHUyNDYwIiw5XSxbImEyZTUiLCJcdTMyMjAiLDldLFsiYTJmMSIsIlx1MjE2MCIsMTFdLFsiYTNhMSIsIlx1ZmYwMVx1ZmYwMlx1ZmYwM1x1ZmZlNVx1ZmYwNSIsODgsIlx1ZmZlMyJdLFsiYTRhMSIsIlx1MzA0MSIsODJdLFsiYTVhMSIsIlx1MzBhMSIsODVdLFsiYTZh''@;'; put 'put ''MSIsIlx1MDM5MSIsMTYsIlx1MDNhMyIsNl0sWyJhNmMxIiwiXHUwM2IxIiwxNiwiXHUwM2MzIiw2XSxbImE2ZTAiLCJcdWZlMzVcdWZlMzZcdWZlMzlcdWZlM2FcdWZlM2ZcdWZlNDBcdWZlM2RcdWZlM2VcdWZlNDFcdWZlNDJcdWZlNDNcdWZlNDQiXSxbImE2ZWUiLCJcdWZlM2JcdWZlM2Nc''@;'; put 'put ''dWZlMzdcdWZlMzhcdWZlMzEiXSxbImE2ZjQiLCJcdWZlMzNcdWZlMzQiXSxbImE3YTEiLCJcdTA0MTAiLDUsIlx1MDQwMVx1MDQxNiIsMjVdLFsiYTdkMSIsIlx1MDQzMCIsNSwiXHUwNDUxXHUwNDM2IiwyNV0sWyJhODQwIiwiXHUwMmNhXHUwMmNiXHUwMmQ5XHUyMDEzXHUyMDE1XHUyMDI1''@;'; put 'put ''XHUyMDM1XHUyMTA1XHUyMTA5XHUyMTk2XHUyMTk3XHUyMTk4XHUyMTk5XHUyMjE1XHUyMjFmXHUyMjIzXHUyMjUyXHUyMjY2XHUyMjY3XHUyMmJmXHUyNTUwIiwzNSwiXHUyNTgxIiw2XSxbImE4ODAiLCJcdTI1ODgiLDcsIlx1MjU5M1x1MjU5NFx1MjU5NVx1MjViY1x1MjViZFx1MjVlMlx1''@;'; put 'put ''MjVlM1x1MjVlNFx1MjVlNVx1MjYwOVx1MjI5NVx1MzAxMlx1MzAxZFx1MzAxZSJdLFsiYThhMSIsIlx1MDEwMVx4ZTFcdTAxY2VceGUwXHUwMTEzXHhlOVx1MDExYlx4ZThcdTAxMmJceGVkXHUwMWQwXHhlY1x1MDE0ZFx4ZjNcdTAxZDJceGYyXHUwMTZiXHhmYVx1MDFkNFx4ZjlcdTAxZDZc''@;'; put 'put ''dTAxZDhcdTAxZGFcdTAxZGNceGZjXHhlYVx1MDI1MSJdLFsiYThiZCIsIlx1MDE0NFx1MDE0OCJdLFsiYThjMCIsIlx1MDI2MSJdLFsiYThjNSIsIlx1MzEwNSIsMzZdLFsiYTk0MCIsIlx1MzAyMSIsOCwiXHUzMmEzXHUzMzhlXHUzMzhmXHUzMzljXHUzMzlkXHUzMzllXHUzM2ExXHUzM2M0''@;'; put 'put ''XHUzM2NlXHUzM2QxXHUzM2QyXHUzM2Q1XHVmZTMwXHVmZmUyXHVmZmU0Il0sWyJhOTU5IiwiXHUyMTIxXHUzMjMxIl0sWyJhOTVjIiwiXHUyMDEwIl0sWyJhOTYwIiwiXHUzMGZjXHUzMDliXHUzMDljXHUzMGZkXHUzMGZlXHUzMDA2XHUzMDlkXHUzMDllXHVmZTQ5Iiw5LCJcdWZlNTRcdWZl''@;'; put 'put ''NTVcdWZlNTZcdWZlNTdcdWZlNTkiLDhdLFsiYTk4MCIsIlx1ZmU2MiIsNCwiXHVmZTY4XHVmZTY5XHVmZTZhXHVmZTZiIl0sWyJhOTk2IiwiXHUzMDA3Il0sWyJhOWE0IiwiXHUyNTAwIiw3NV0sWyJhYTQwIiwiXHU3MmRjXHU3MmRkXHU3MmRmXHU3MmUyIiw1LCJcdTcyZWFcdTcyZWJcdTcy''@;'; put 'put ''ZjVcdTcyZjZcdTcyZjlcdTcyZmRcdTcyZmVcdTcyZmZcdTczMDBcdTczMDJcdTczMDQiLDUsIlx1NzMwYlx1NzMwY1x1NzMwZFx1NzMwZlx1NzMxMFx1NzMxMVx1NzMxMlx1NzMxNFx1NzMxOFx1NzMxOVx1NzMxYVx1NzMxZlx1NzMyMFx1NzMyM1x1NzMyNFx1NzMyNlx1NzMyN1x1NzMyOFx1''@;'; put 'put ''NzMyZFx1NzMyZlx1NzMzMFx1NzMzMlx1NzMzM1x1NzMzNVx1NzMzNlx1NzMzYVx1NzMzYlx1NzMzY1x1NzMzZFx1NzM0MCIsOF0sWyJhYTgwIiwiXHU3MzQ5XHU3MzRhXHU3MzRiXHU3MzRjXHU3MzRlXHU3MzRmXHU3MzUxXHU3MzUzXHU3MzU0XHU3MzU1XHU3MzU2XHU3MzU4Iiw3LCJcdTcz''@;'; put 'put ''NjEiLDEwLCJcdTczNmVcdTczNzBcdTczNzEiXSxbImFiNDAiLCJcdTczNzIiLDExLCJcdTczN2YiLDQsIlx1NzM4NVx1NzM4Nlx1NzM4OFx1NzM4YVx1NzM4Y1x1NzM4ZFx1NzM4Zlx1NzM5MFx1NzM5Mlx1NzM5M1x1NzM5NFx1NzM5NVx1NzM5N1x1NzM5OFx1NzM5OVx1NzM5YVx1NzM5Y1x1''@;'; put 'put ''NzM5ZFx1NzM5ZVx1NzNhMFx1NzNhMVx1NzNhMyIsNSwiXHU3M2FhXHU3M2FjXHU3M2FkXHU3M2IxXHU3M2I0XHU3M2I1XHU3M2I2XHU3M2I4XHU3M2I5XHU3M2JjXHU3M2JkXHU3M2JlXHU3M2JmXHU3M2MxXHU3M2MzIiw0XSxbImFiODAiLCJcdTczY2JcdTczY2NcdTczY2VcdTczZDIiLDYs''@;'; put 'put ''Ilx1NzNkYVx1NzNkYlx1NzNkY1x1NzNkZFx1NzNkZlx1NzNlMVx1NzNlMlx1NzNlM1x1NzNlNFx1NzNlNlx1NzNlOFx1NzNlYVx1NzNlYlx1NzNlY1x1NzNlZVx1NzNlZlx1NzNmMFx1NzNmMVx1NzNmMyIsNF0sWyJhYzQwIiwiXHU3M2Y4IiwxMCwiXHU3NDA0XHU3NDA3XHU3NDA4XHU3NDBi''@;'; put 'put ''XHU3NDBjXHU3NDBkXHU3NDBlXHU3NDExIiw4LCJcdTc0MWMiLDUsIlx1NzQyM1x1NzQyNFx1NzQyN1x1NzQyOVx1NzQyYlx1NzQyZFx1NzQyZlx1NzQzMVx1NzQzMlx1NzQzNyIsNCwiXHU3NDNkXHU3NDNlXHU3NDNmXHU3NDQwXHU3NDQyIiwxMV0sWyJhYzgwIiwiXHU3NDRlIiw2LCJcdTc0''@;'; put 'put ''NTZcdTc0NThcdTc0NWRcdTc0NjAiLDEyLCJcdTc0NmVcdTc0NmZcdTc0NzEiLDQsIlx1NzQ3OFx1NzQ3OVx1NzQ3YSJdLFsiYWQ0MCIsIlx1NzQ3Ylx1NzQ3Y1x1NzQ3ZFx1NzQ3Zlx1NzQ4Mlx1NzQ4NFx1NzQ4NVx1NzQ4Nlx1NzQ4OFx1NzQ4OVx1NzQ4YVx1NzQ4Y1x1NzQ4ZFx1NzQ4Zlx1''@;'; put 'put ''NzQ5MSIsMTAsIlx1NzQ5ZFx1NzQ5ZiIsNywiXHU3NGFhIiwxNSwiXHU3NGJiIiwxMl0sWyJhZDgwIiwiXHU3NGM4Iiw5LCJcdTc0ZDMiLDgsIlx1NzRkZFx1NzRkZlx1NzRlMVx1NzRlNVx1NzRlNyIsNiwiXHU3NGYwXHU3NGYxXHU3NGYyIl0sWyJhZTQwIiwiXHU3NGYzXHU3NGY1XHU3NGY4''@;'; put 'put ''Iiw2LCJcdTc1MDBcdTc1MDFcdTc1MDJcdTc1MDNcdTc1MDUiLDcsIlx1NzUwZVx1NzUxMFx1NzUxMlx1NzUxNFx1NzUxNVx1NzUxNlx1NzUxN1x1NzUxYlx1NzUxZFx1NzUxZVx1NzUyMCIsNCwiXHU3NTI2XHU3NTI3XHU3NTJhXHU3NTJlXHU3NTM0XHU3NTM2XHU3NTM5XHU3NTNjXHU3NTNk''@;'; put 'put ''XHU3NTNmXHU3NTQxXHU3NTQyXHU3NTQzXHU3NTQ0XHU3NTQ2XHU3NTQ3XHU3NTQ5XHU3NTRhXHU3NTRkXHU3NTUwXHU3NTUxXHU3NTUyXHU3NTUzXHU3NTU1XHU3NTU2XHU3NTU3XHU3NTU4Il0sWyJhZTgwIiwiXHU3NTVkIiw3LCJcdTc1NjdcdTc1NjhcdTc1NjlcdTc1NmIiLDYsIlx1NzU3''@;'; put 'put ''M1x1NzU3NVx1NzU3Nlx1NzU3N1x1NzU3YSIsNCwiXHU3NTgwXHU3NTgxXHU3NTgyXHU3NTg0XHU3NTg1XHU3NTg3Il0sWyJhZjQwIiwiXHU3NTg4XHU3NTg5XHU3NThhXHU3NThjXHU3NThkXHU3NThlXHU3NTkwXHU3NTkzXHU3NTk1XHU3NTk4XHU3NTliXHU3NTljXHU3NTllXHU3NWEyXHU3''@;'; put 'put ''NWE2Iiw0LCJcdTc1YWRcdTc1YjZcdTc1YjdcdTc1YmFcdTc1YmJcdTc1YmZcdTc1YzBcdTc1YzFcdTc1YzZcdTc1Y2JcdTc1Y2NcdTc1Y2VcdTc1Y2ZcdTc1ZDBcdTc1ZDFcdTc1ZDNcdTc1ZDdcdTc1ZDlcdTc1ZGFcdTc1ZGNcdTc1ZGRcdTc1ZGZcdTc1ZTBcdTc1ZTFcdTc1ZTVcdTc1ZTlc''@;'; put 'put ''dTc1ZWNcdTc1ZWRcdTc1ZWVcdTc1ZWZcdTc1ZjJcdTc1ZjNcdTc1ZjVcdTc1ZjZcdTc1ZjdcdTc1ZjhcdTc1ZmFcdTc1ZmJcdTc1ZmRcdTc1ZmVcdTc2MDJcdTc2MDRcdTc2MDZcdTc2MDciXSxbImFmODAiLCJcdTc2MDhcdTc2MDlcdTc2MGJcdTc2MGRcdTc2MGVcdTc2MGZcdTc2MTFcdTc2''@;'; put 'put ''MTJcdTc2MTNcdTc2MTRcdTc2MTZcdTc2MWFcdTc2MWNcdTc2MWRcdTc2MWVcdTc2MjFcdTc2MjNcdTc2MjdcdTc2MjhcdTc2MmNcdTc2MmVcdTc2MmZcdTc2MzFcdTc2MzJcdTc2MzZcdTc2MzdcdTc2MzlcdTc2M2FcdTc2M2JcdTc2M2RcdTc2NDFcdTc2NDJcdTc2NDQiXSxbImIwNDAiLCJc''@;'; put 'put ''dTc2NDUiLDYsIlx1NzY0ZSIsNSwiXHU3NjU1XHU3NjU3Iiw0LCJcdTc2NWRcdTc2NWZcdTc2NjBcdTc2NjFcdTc2NjJcdTc2NjQiLDYsIlx1NzY2Y1x1NzY2ZFx1NzY2ZVx1NzY3MCIsNywiXHU3Njc5XHU3NjdhXHU3NjdjXHU3NjdmXHU3NjgwXHU3NjgxXHU3NjgzXHU3Njg1XHU3Njg5XHU3''@;'; put 'put ''NjhhXHU3NjhjXHU3NjhkXHU3NjhmXHU3NjkwXHU3NjkyXHU3Njk0XHU3Njk1XHU3Njk3XHU3Njk4XHU3NjlhXHU3NjliIl0sWyJiMDgwIiwiXHU3NjljIiw3LCJcdTc2YTUiLDgsIlx1NzZhZlx1NzZiMFx1NzZiM1x1NzZiNSIsOSwiXHU3NmMwXHU3NmMxXHU3NmMzXHU1NTRhXHU5NjNmXHU1''@;'; put 'put ''N2MzXHU2MzI4XHU1NGNlXHU1NTA5XHU1NGMwXHU3NjkxXHU3NjRjXHU4NTNjXHU3N2VlXHU4MjdlXHU3ODhkXHU3MjMxXHU5Njk4XHU5NzhkXHU2YzI4XHU1Yjg5XHU0ZmZhXHU2MzA5XHU2Njk3XHU1Y2I4XHU4MGZhXHU2ODQ4XHU4MGFlXHU2NjAyXHU3NmNlXHU1MWY5XHU2NTU2XHU3MWFj''@;'; put 'put ''XHU3ZmYxXHU4ODg0XHU1MGIyXHU1OTY1XHU2MWNhXHU2ZmIzXHU4MmFkXHU2MzRjXHU2MjUyXHU1M2VkXHU1NDI3XHU3YjA2XHU1MTZiXHU3NWE0XHU1ZGY0XHU2MmQ0XHU4ZGNiXHU5Nzc2XHU2MjhhXHU4MDE5XHU1NzVkXHU5NzM4XHU3ZjYyXHU3MjM4XHU3NjdkXHU2N2NmXHU3NjdlXHU2''@;'; put 'put ''NDQ2XHU0ZjcwXHU4ZDI1XHU2MmRjXHU3YTE3XHU2NTkxXHU3M2VkXHU2NDJjXHU2MjczXHU4MjJjXHU5ODgxXHU2NzdmXHU3MjQ4XHU2MjZlXHU2MmNjXHU0ZjM0XHU3NGUzXHU1MzRhXHU1MjllXHU3ZWNhXHU5MGE2XHU1ZTJlXHU2ODg2XHU2OTljXHU4MTgwXHU3ZWQxXHU2OGQyXHU3OGM1''@;'; put 'put ''XHU4NjhjXHU5NTUxXHU1MDhkXHU4YzI0XHU4MmRlXHU4MGRlXHU1MzA1XHU4OTEyXHU1MjY1Il0sWyJiMTQwIiwiXHU3NmM0XHU3NmM3XHU3NmM5XHU3NmNiXHU3NmNjXHU3NmQzXHU3NmQ1XHU3NmQ5XHU3NmRhXHU3NmRjXHU3NmRkXHU3NmRlXHU3NmUwIiw0LCJcdTc2ZTYiLDcsIlx1NzZm''@;'; put 'put ''MFx1NzZmM1x1NzZmNVx1NzZmNlx1NzZmN1x1NzZmYVx1NzZmYlx1NzZmZFx1NzZmZlx1NzcwMFx1NzcwMlx1NzcwM1x1NzcwNVx1NzcwNlx1NzcwYVx1NzcwY1x1NzcwZSIsMTAsIlx1NzcxYlx1NzcxY1x1NzcxZFx1NzcxZVx1NzcyMVx1NzcyM1x1NzcyNFx1NzcyNVx1NzcyN1x1NzcyYVx1''@;'; put 'put ''NzcyYiJdLFsiYjE4MCIsIlx1NzcyY1x1NzcyZVx1NzczMCIsNCwiXHU3NzM5XHU3NzNiXHU3NzNkXHU3NzNlXHU3NzNmXHU3NzQyXHU3NzQ0XHU3NzQ1XHU3NzQ2XHU3NzQ4Iiw3LCJcdTc3NTIiLDcsIlx1Nzc1Y1x1ODU4NFx1OTZmOVx1NGZkZFx1NTgyMVx1OTk3MVx1NWI5ZFx1NjJiMVx1''@;'; put 'put ''NjJhNVx1NjZiNFx1OGM3OVx1OWM4ZFx1NzIwNlx1Njc2Zlx1Nzg5MVx1NjBiMlx1NTM1MVx1NTMxN1x1OGY4OFx1ODBjY1x1OGQxZFx1OTRhMVx1NTAwZFx1NzJjOFx1NTkwN1x1NjBlYlx1NzExOVx1ODhhYlx1NTk1NFx1ODJlZlx1NjcyY1x1N2IyOFx1NWQyOVx1N2VmN1x1NzUyZFx1NmNm''@;'; put 'put ''NVx1OGU2Nlx1OGZmOFx1OTAzY1x1OWYzYlx1NmJkNFx1OTExOVx1N2IxNFx1NWY3Y1x1NzhhN1x1ODRkNlx1ODUzZFx1NmJkNVx1NmJkOVx1NmJkNlx1NWUwMVx1NWU4N1x1NzVmOVx1OTVlZFx1NjU1ZFx1NWYwYVx1NWZjNVx1OGY5Zlx1NThjMVx1ODFjMlx1OTA3Zlx1OTY1Ylx1OTdhZFx1''@;'; put 'put ''OGZiOVx1N2YxNlx1OGQyY1x1NjI0MVx1NGZiZlx1NTNkOFx1NTM1ZVx1OGZhOFx1OGZhOVx1OGZhYlx1OTA0ZFx1NjgwN1x1NWY2YVx1ODE5OFx1ODg2OFx1OWNkNlx1NjE4Ylx1NTIyYlx1NzYyYVx1NWY2Y1x1NjU4Y1x1NmZkMlx1NmVlOFx1NWJiZVx1NjQ0OFx1NTE3NVx1NTFiMFx1Njdj''@;'; put 'put ''NFx1NGUxOVx1NzljOVx1OTk3Y1x1NzBiMyJdLFsiYjI0MCIsIlx1Nzc1ZFx1Nzc1ZVx1Nzc1Zlx1Nzc2MFx1Nzc2NFx1Nzc2N1x1Nzc2OVx1Nzc2YVx1Nzc2ZCIsMTEsIlx1Nzc3YVx1Nzc3Ylx1Nzc3Y1x1Nzc4MVx1Nzc4Mlx1Nzc4M1x1Nzc4NiIsNSwiXHU3NzhmXHU3NzkwXHU3NzkzIiwx''@;'; put 'put ''MSwiXHU3N2ExXHU3N2EzXHU3N2E0XHU3N2E2XHU3N2E4XHU3N2FiXHU3N2FkXHU3N2FlXHU3N2FmXHU3N2IxXHU3N2IyXHU3N2I0XHU3N2I2Iiw0XSxbImIyODAiLCJcdTc3YmNcdTc3YmVcdTc3YzAiLDEyLCJcdTc3Y2UiLDgsIlx1NzdkOFx1NzdkOVx1NzdkYVx1NzdkZCIsNCwiXHU3N2U0''@;'; put 'put ''XHU3NWM1XHU1ZTc2XHU3M2JiXHU4M2UwXHU2NGFkXHU2MmU4XHU5NGI1XHU2Y2UyXHU1MzVhXHU1MmMzXHU2NDBmXHU5NGMyXHU3Yjk0XHU0ZjJmXHU1ZTFiXHU4MjM2XHU4MTE2XHU4MThhXHU2ZTI0XHU2Y2NhXHU5YTczXHU2MzU1XHU1MzVjXHU1NGZhXHU4ODY1XHU1N2UwXHU0ZTBkXHU1''@;'; put 'put ''ZTAzXHU2YjY1XHU3YzNmXHU5MGU4XHU2MDE2XHU2NGU2XHU3MzFjXHU4OGMxXHU2NzUwXHU2MjRkXHU4ZDIyXHU3NzZjXHU4ZTI5XHU5MWM3XHU1ZjY5XHU4M2RjXHU4NTIxXHU5OTEwXHU1M2MyXHU4Njk1XHU2YjhiXHU2MGVkXHU2MGU4XHU3MDdmXHU4MmNkXHU4MjMxXHU0ZWQzXHU2Y2E3''@;'; put 'put ''XHU4NWNmXHU2NGNkXHU3Y2Q5XHU2OWZkXHU2NmY5XHU4MzQ5XHU1Mzk1XHU3YjU2XHU0ZmE3XHU1MThjXHU2ZDRiXHU1YzQyXHU4ZTZkXHU2M2QyXHU1M2M5XHU4MzJjXHU4MzM2XHU2N2U1XHU3OGI0XHU2NDNkXHU1YmRmXHU1Yzk0XHU1ZGVlXHU4YmU3XHU2MmM2XHU2N2Y0XHU4YzdhXHU2''@;'; put 'put ''NDAwXHU2M2JhXHU4NzQ5XHU5OThiXHU4YzE3XHU3ZjIwXHU5NGYyXHU0ZWE3XHU5NjEwXHU5OGE0XHU2NjBjXHU3MzE2Il0sWyJiMzQwIiwiXHU3N2U2XHU3N2U4XHU3N2VhXHU3N2VmXHU3N2YwXHU3N2YxXHU3N2YyXHU3N2Y0XHU3N2Y1XHU3N2Y3XHU3N2Y5XHU3N2ZhXHU3N2ZiXHU3N2Zj''@;'; put 'put ''XHU3ODAzIiw1LCJcdTc4MGFcdTc4MGJcdTc4MGVcdTc4MGZcdTc4MTBcdTc4MTNcdTc4MTVcdTc4MTlcdTc4MWJcdTc4MWVcdTc4MjBcdTc4MjFcdTc4MjJcdTc4MjRcdTc4MjhcdTc4MmFcdTc4MmJcdTc4MmVcdTc4MmZcdTc4MzFcdTc4MzJcdTc4MzNcdTc4MzVcdTc4MzZcdTc4M2RcdTc4''@;'; put 'put ''M2ZcdTc4NDFcdTc4NDJcdTc4NDNcdTc4NDRcdTc4NDZcdTc4NDhcdTc4NDlcdTc4NGFcdTc4NGJcdTc4NGRcdTc4NGZcdTc4NTFcdTc4NTNcdTc4NTRcdTc4NThcdTc4NTlcdTc4NWEiXSxbImIzODAiLCJcdTc4NWJcdTc4NWNcdTc4NWUiLDExLCJcdTc4NmYiLDcsIlx1Nzg3OFx1Nzg3OVx1''@;'; put 'put ''Nzg3YVx1Nzg3Ylx1Nzg3ZCIsNiwiXHU1NzNhXHU1YzFkXHU1ZTM4XHU5NTdmXHU1MDdmXHU4MGEwXHU1MzgyXHU2NTVlXHU3NTQ1XHU1NTMxXHU1MDIxXHU4ZDg1XHU2Mjg0XHU5NDllXHU2NzFkXHU1NjMyXHU2ZjZlXHU1ZGUyXHU1NDM1XHU3MDkyXHU4ZjY2XHU2MjZmXHU2NGE0XHU2M2Ez''@;'; put 'put ''XHU1ZjdiXHU2Zjg4XHU5MGY0XHU4MWUzXHU4ZmIwXHU1YzE4XHU2NjY4XHU1ZmYxXHU2Yzg5XHU5NjQ4XHU4ZDgxXHU4ODZjXHU2NDkxXHU3OWYwXHU1N2NlXHU2YTU5XHU2MjEwXHU1NDQ4XHU0ZTU4XHU3YTBiXHU2MGU5XHU2Zjg0XHU4YmRhXHU2MjdmXHU5MDFlXHU5YThiXHU3OWU0XHU1''@;'; put 'put ''NDAzXHU3NWY0XHU2MzAxXHU1MzE5XHU2YzYwXHU4ZmRmXHU1ZjFiXHU5YTcwXHU4MDNiXHU5ZjdmXHU0Zjg4XHU1YzNhXHU4ZDY0XHU3ZmM1XHU2NWE1XHU3MGJkXHU1MTQ1XHU1MWIyXHU4NjZiXHU1ZDA3XHU1YmEwXHU2MmJkXHU5MTZjXHU3NTc0XHU4ZTBjXHU3YTIwXHU2MTAxXHU3Yjc5''@;'; put 'put ''XHU0ZWM3XHU3ZWY4XHU3Nzg1XHU0ZTExXHU4MWVkXHU1MjFkXHU1MWZhXHU2YTcxXHU1M2E4XHU4ZTg3XHU5NTA0XHU5NmNmXHU2ZWMxXHU5NjY0XHU2OTVhIl0sWyJiNDQwIiwiXHU3ODg0XHU3ODg1XHU3ODg2XHU3ODg4XHU3ODhhXHU3ODhiXHU3ODhmXHU3ODkwXHU3ODkyXHU3ODk0XHU3''@;'; put 'put ''ODk1XHU3ODk2XHU3ODk5XHU3ODlkXHU3ODllXHU3OGEwXHU3OGEyXHU3OGE0XHU3OGE2XHU3OGE4Iiw3LCJcdTc4YjVcdTc4YjZcdTc4YjdcdTc4YjhcdTc4YmFcdTc4YmJcdTc4YmNcdTc4YmRcdTc4YmZcdTc4YzBcdTc4YzJcdTc4YzNcdTc4YzRcdTc4YzZcdTc4YzdcdTc4YzhcdTc4Y2Nc''@;'; put 'put ''dTc4Y2RcdTc4Y2VcdTc4Y2ZcdTc4ZDFcdTc4ZDJcdTc4ZDNcdTc4ZDZcdTc4ZDdcdTc4ZDhcdTc4ZGEiLDldLFsiYjQ4MCIsIlx1NzhlNFx1NzhlNVx1NzhlNlx1NzhlN1x1NzhlOVx1NzhlYVx1NzhlYlx1NzhlZCIsNCwiXHU3OGYzXHU3OGY1XHU3OGY2XHU3OGY4XHU3OGY5XHU3OGZiIiw1''@;'; put 'put ''LCJcdTc5MDJcdTc5MDNcdTc5MDRcdTc5MDYiLDYsIlx1Nzg0MFx1NTBhOFx1NzdkN1x1NjQxMFx1ODllNlx1NTkwNFx1NjNlM1x1NWRkZFx1N2E3Zlx1NjkzZFx1NGYyMFx1ODIzOVx1NTU5OFx1NGUzMlx1NzVhZVx1N2E5N1x1NWU2Mlx1NWU4YVx1OTVlZlx1NTIxYlx1NTQzOVx1NzA4YVx1''@;'; put 'put ''NjM3Nlx1OTUyNFx1NTc4Mlx1NjYyNVx1NjkzZlx1OTE4N1x1NTUwN1x1NmRmM1x1N2VhZlx1ODgyMlx1NjIzM1x1N2VmMFx1NzViNVx1ODMyOFx1NzhjMVx1OTZjY1x1OGY5ZVx1NjE0OFx1NzRmN1x1OGJjZFx1NmI2NFx1NTIzYVx1OGQ1MFx1NmIyMVx1ODA2YVx1ODQ3MVx1NTZmMVx1NTMw''@;'; put 'put ''Nlx1NGVjZVx1NGUxYlx1NTFkMVx1N2M5N1x1OTE4Ylx1N2MwN1x1NGZjM1x1OGU3Zlx1N2JlMVx1N2E5Y1x1NjQ2N1x1NWQxNFx1NTBhY1x1ODEwNlx1NzYwMVx1N2NiOVx1NmRlY1x1N2ZlMFx1Njc1MVx1NWI1OFx1NWJmOFx1NzhjYlx1NjRhZVx1NjQxM1x1NjNhYVx1NjMyYlx1OTUxOVx1''@;'; put 'put ''NjQyZFx1OGZiZVx1N2I1NFx1NzYyOVx1NjI1M1x1NTkyN1x1NTQ0Nlx1NmI3OVx1NTBhM1x1NjIzNFx1NWUyNlx1NmI4Nlx1NGVlM1x1OGQzN1x1ODg4Ylx1NWY4NVx1OTAyZSJdLFsiYjU0MCIsIlx1NzkwZCIsNSwiXHU3OTE0Iiw5LCJcdTc5MWYiLDQsIlx1NzkyNSIsMTQsIlx1NzkzNSIs''@;'; put 'put ''NCwiXHU3OTNkXHU3OTNmXHU3OTQyXHU3OTQzXHU3OTQ0XHU3OTQ1XHU3OTQ3XHU3OTRhIiw4LCJcdTc5NTRcdTc5NTVcdTc5NThcdTc5NTlcdTc5NjFcdTc5NjMiXSxbImI1ODAiLCJcdTc5NjRcdTc5NjZcdTc5NjlcdTc5NmFcdTc5NmJcdTc5NmNcdTc5NmVcdTc5NzAiLDYsIlx1Nzk3OVx1''@;'; put 'put ''Nzk3YiIsNCwiXHU3OTgyXHU3OTgzXHU3OTg2XHU3OTg3XHU3OTg4XHU3OTg5XHU3OThiXHU3OThjXHU3OThkXHU3OThlXHU3OTkwXHU3OTkxXHU3OTkyXHU2MDIwXHU4MDNkXHU2MmM1XHU0ZTM5XHU1MzU1XHU5MGY4XHU2M2I4XHU4MGM2XHU2NWU2XHU2YzJlXHU0ZjQ2XHU2MGVlXHU2ZGUx''@;'; put 'put ''XHU4YmRlXHU1ZjM5XHU4NmNiXHU1ZjUzXHU2MzIxXHU1MTVhXHU4MzYxXHU2ODYzXHU1MjAwXHU2MzYzXHU4ZTQ4XHU1MDEyXHU1YzliXHU3OTc3XHU1YmZjXHU1MjMwXHU3YTNiXHU2MGJjXHU5MDUzXHU3NmQ3XHU1ZmI3XHU1Zjk3XHU3Njg0XHU4ZTZjXHU3MDZmXHU3NjdiXHU3YjQ5XHU3''@;'; put 'put ''N2FhXHU1MWYzXHU5MDkzXHU1ODI0XHU0ZjRlXHU2ZWY0XHU4ZmVhXHU2NTRjXHU3YjFiXHU3MmM0XHU2ZGE0XHU3ZmRmXHU1YWUxXHU2MmI1XHU1ZTk1XHU1NzMwXHU4NDgyXHU3YjJjXHU1ZTFkXHU1ZjFmXHU5MDEyXHU3ZjE0XHU5OGEwXHU2MzgyXHU2ZWM3XHU3ODk4XHU3MGI5XHU1MTc4''@;'; put 'put ''XHU5NzViXHU1N2FiXHU3NTM1XHU0ZjQzXHU3NTM4XHU1ZTk3XHU2MGU2XHU1OTYwXHU2ZGMwXHU2YmJmXHU3ODg5XHU1M2ZjXHU5NmQ1XHU1MWNiXHU1MjAxXHU2Mzg5XHU1NDBhXHU5NDkzXHU4YzAzXHU4ZGNjXHU3MjM5XHU3ODlmXHU4Nzc2XHU4ZmVkXHU4YzBkXHU1M2UwIl0sWyJiNjQw''@;'; put 'put ''IiwiXHU3OTkzIiw2LCJcdTc5OWIiLDExLCJcdTc5YTgiLDEwLCJcdTc5YjQiLDQsIlx1NzliY1x1NzliZlx1NzljMlx1NzljNFx1NzljNVx1NzljN1x1NzljOFx1NzljYVx1NzljY1x1NzljZVx1NzljZlx1NzlkMFx1NzlkM1x1NzlkNFx1NzlkNlx1NzlkN1x1NzlkOSIsNSwiXHU3OWUwXHU3''@;'; put 'put ''OWUxXHU3OWUyXHU3OWU1XHU3OWU4XHU3OWVhIl0sWyJiNjgwIiwiXHU3OWVjXHU3OWVlXHU3OWYxIiw2LCJcdTc5ZjlcdTc5ZmFcdTc5ZmNcdTc5ZmVcdTc5ZmZcdTdhMDFcdTdhMDRcdTdhMDVcdTdhMDdcdTdhMDhcdTdhMDlcdTdhMGFcdTdhMGNcdTdhMGYiLDQsIlx1N2ExNVx1N2ExNlx1''@;'; put 'put ''N2ExOFx1N2ExOVx1N2ExYlx1N2ExY1x1NGUwMVx1NzZlZlx1NTNlZVx1OTQ4OVx1OTg3Nlx1OWYwZVx1OTUyZFx1NWI5YVx1OGJhMlx1NGUyMlx1NGUxY1x1NTFhY1x1ODQ2M1x1NjFjMlx1NTJhOFx1NjgwYlx1NGY5N1x1NjA2Ylx1NTFiYlx1NmQxZVx1NTE1Y1x1NjI5Nlx1NjU5N1x1OTY2''@;'; put 'put ''MVx1OGM0Nlx1OTAxN1x1NzVkOFx1OTBmZFx1Nzc2M1x1NmJkMlx1NzI4YVx1NzJlY1x1OGJmYlx1NTgzNVx1Nzc3OVx1OGQ0Y1x1Njc1Y1x1OTU0MFx1ODA5YVx1NWVhNlx1NmUyMVx1NTk5Mlx1N2FlZlx1NzdlZFx1OTUzYlx1NmJiNVx1NjVhZFx1N2YwZVx1NTgwNlx1NTE1MVx1OTYxZlx1''@;'; put 'put ''NWJmOVx1NThhOVx1NTQyOFx1OGU3Mlx1NjU2Nlx1OTg3Zlx1NTZlNFx1OTQ5ZFx1NzZmZVx1OTA0MVx1NjM4N1x1NTRjNlx1NTkxYVx1NTkzYVx1NTc5Ylx1OGViMlx1NjczNVx1OGRmYVx1ODIzNVx1NTI0MVx1NjBmMFx1NTgxNVx1ODZmZVx1NWNlOFx1OWU0NVx1NGZjNFx1OTg5ZFx1OGJi''@;'; put 'put ''OVx1NWEyNVx1NjA3Nlx1NTM4NFx1NjI3Y1x1OTA0Zlx1OTEwMlx1OTk3Zlx1NjA2OVx1ODAwY1x1NTEzZlx1ODAzM1x1NWMxNFx1OTk3NVx1NmQzMVx1NGU4YyJdLFsiYjc0MCIsIlx1N2ExZFx1N2ExZlx1N2EyMVx1N2EyMlx1N2EyNCIsMTQsIlx1N2EzNFx1N2EzNVx1N2EzNlx1N2EzOFx1''@;'; put 'put ''N2EzYVx1N2EzZVx1N2E0MCIsNSwiXHU3YTQ3Iiw5LCJcdTdhNTIiLDQsIlx1N2E1OCIsMTZdLFsiYjc4MCIsIlx1N2E2OSIsNiwiXHU3YTcxXHU3YTcyXHU3YTczXHU3YTc1XHU3YTdiXHU3YTdjXHU3YTdkXHU3YTdlXHU3YTgyXHU3YTg1XHU3YTg3XHU3YTg5XHU3YThhXHU3YThiXHU3YThj''@;'; put 'put ''XHU3YThlXHU3YThmXHU3YTkwXHU3YTkzXHU3YTk0XHU3YTk5XHU3YTlhXHU3YTliXHU3YTllXHU3YWExXHU3YWEyXHU4ZDMwXHU1M2QxXHU3ZjVhXHU3YjRmXHU0ZjEwXHU0ZTRmXHU5NjAwXHU2Y2Q1XHU3M2QwXHU4NWU5XHU1ZTA2XHU3NTZhXHU3ZmZiXHU2YTBhXHU3N2ZlXHU5NDkyXHU3''@;'; put 'put ''ZTQxXHU1MWUxXHU3MGU2XHU1M2NkXHU4ZmQ0XHU4MzAzXHU4ZDI5XHU3MmFmXHU5OTZkXHU2Y2RiXHU1NzRhXHU4MmIzXHU2NWI5XHU4MGFhXHU2MjNmXHU5NjMyXHU1OWE4XHU0ZWZmXHU4YmJmXHU3ZWJhXHU2NTNlXHU4M2YyXHU5NzVlXHU1NTYxXHU5OGRlXHU4MGE1XHU1MzJhXHU4YmZk''@;'; put 'put ''XHU1NDIwXHU4MGJhXHU1ZTlmXHU2Y2I4XHU4ZDM5XHU4MmFjXHU5MTVhXHU1NDI5XHU2YzFiXHU1MjA2XHU3ZWI3XHU1NzVmXHU3MTFhXHU2YzdlXHU3Yzg5XHU1OTRiXHU0ZWZkXHU1ZmZmXHU2MTI0XHU3Y2FhXHU0ZTMwXHU1YzAxXHU2N2FiXHU4NzAyXHU1Y2YwXHU5NTBiXHU5OGNlXHU3''@;'; put 'put ''NWFmXHU3MGZkXHU5MDIyXHU1MWFmXHU3ZjFkXHU4YmJkXHU1OTQ5XHU1MWU0XHU0ZjViXHU1NDI2XHU1OTJiXHU2NTc3XHU4MGE0XHU1Yjc1XHU2Mjc2XHU2MmMyXHU4ZjkwXHU1ZTQ1XHU2YzFmXHU3YjI2XHU0ZjBmXHU0ZmQ4XHU2NzBkIl0sWyJiODQwIiwiXHU3YWEzXHU3YWE0XHU3YWE3''@;'; put 'put ''XHU3YWE5XHU3YWFhXHU3YWFiXHU3YWFlIiw0LCJcdTdhYjQiLDEwLCJcdTdhYzAiLDEwLCJcdTdhY2MiLDksIlx1N2FkN1x1N2FkOFx1N2FkYVx1N2FkYlx1N2FkY1x1N2FkZFx1N2FlMVx1N2FlMlx1N2FlNFx1N2FlNyIsNSwiXHU3YWVlXHU3YWYwXHU3YWYxXHU3YWYyXHU3YWYzIl0sWyJi''@;'; put 'put ''ODgwIiwiXHU3YWY0Iiw0LCJcdTdhZmJcdTdhZmNcdTdhZmVcdTdiMDBcdTdiMDFcdTdiMDJcdTdiMDVcdTdiMDdcdTdiMDlcdTdiMGNcdTdiMGRcdTdiMGVcdTdiMTBcdTdiMTJcdTdiMTNcdTdiMTZcdTdiMTdcdTdiMThcdTdiMWFcdTdiMWNcdTdiMWRcdTdiMWZcdTdiMjFcdTdiMjJcdTdi''@;'; put 'put ''MjNcdTdiMjdcdTdiMjlcdTdiMmRcdTZkNmVcdTZkYWFcdTc5OGZcdTg4YjFcdTVmMTdcdTc1MmJcdTYyOWFcdThmODVcdTRmZWZcdTkxZGNcdTY1YTdcdTgxMmZcdTgxNTFcdTVlOWNcdTgxNTBcdThkNzRcdTUyNmZcdTg5ODZcdThkNGJcdTU5MGRcdTUwODVcdTRlZDhcdTk2MWNcdTcyMzZc''@;'; put 'put ''dTgxNzlcdThkMWZcdTViY2NcdThiYTNcdTk2NDRcdTU5ODdcdTdmMWFcdTU0OTBcdTU2NzZcdTU2MGVcdThiZTVcdTY1MzlcdTY5ODJcdTk0OTlcdTc2ZDZcdTZlODlcdTVlNzJcdTc1MThcdTY3NDZcdTY3ZDFcdTdhZmZcdTgwOWRcdThkNzZcdTYxMWZcdTc5YzZcdTY1NjJcdThkNjNcdTUx''@;'; put 'put ''ODhcdTUyMWFcdTk0YTJcdTdmMzhcdTgwOWJcdTdlYjJcdTVjOTdcdTZlMmZcdTY3NjBcdTdiZDlcdTc2OGJcdTlhZDhcdTgxOGZcdTdmOTRcdTdjZDVcdTY0MWVcdTk1NTBcdTdhM2ZcdTU0NGFcdTU0ZTVcdTZiNGNcdTY0MDFcdTYyMDhcdTllM2RcdTgwZjNcdTc1OTlcdTUyNzJcdTk3Njlc''@;'; put 'put ''dTg0NWJcdTY4M2NcdTg2ZTRcdTk2MDFcdTk2OTRcdTk0ZWNcdTRlMmFcdTU0MDRcdTdlZDlcdTY4MzlcdThkZGZcdTgwMTVcdTY2ZjRcdTVlOWFcdTdmYjkiXSxbImI5NDAiLCJcdTdiMmZcdTdiMzBcdTdiMzJcdTdiMzRcdTdiMzVcdTdiMzZcdTdiMzdcdTdiMzlcdTdiM2JcdTdiM2RcdTdi''@;'; put 'put ''M2YiLDUsIlx1N2I0Nlx1N2I0OFx1N2I0YVx1N2I0ZFx1N2I0ZVx1N2I1M1x1N2I1NVx1N2I1N1x1N2I1OVx1N2I1Y1x1N2I1ZVx1N2I1Zlx1N2I2MVx1N2I2MyIsMTAsIlx1N2I2Zlx1N2I3MFx1N2I3M1x1N2I3NFx1N2I3Nlx1N2I3OFx1N2I3YVx1N2I3Y1x1N2I3ZFx1N2I3Zlx1N2I4MVx1''@;'; put 'put ''N2I4Mlx1N2I4M1x1N2I4NFx1N2I4NiIsNiwiXHU3YjhlXHU3YjhmIl0sWyJiOTgwIiwiXHU3YjkxXHU3YjkyXHU3YjkzXHU3Yjk2XHU3Yjk4XHU3Yjk5XHU3YjlhXHU3YjliXHU3YjllXHU3YjlmXHU3YmEwXHU3YmEzXHU3YmE0XHU3YmE1XHU3YmFlXHU3YmFmXHU3YmIwXHU3YmIyXHU3YmIz''@;'; put 'put ''XHU3YmI1XHU3YmI2XHU3YmI3XHU3YmI5Iiw3LCJcdTdiYzJcdTdiYzNcdTdiYzRcdTU3YzJcdTgwM2ZcdTY4OTdcdTVkZTVcdTY1M2JcdTUyOWZcdTYwNmRcdTlmOWFcdTRmOWJcdThlYWNcdTUxNmNcdTViYWJcdTVmMTNcdTVkZTlcdTZjNWVcdTYyZjFcdThkMjFcdTUxNzFcdTk0YTlcdTUy''@;'; put 'put ''ZmVcdTZjOWZcdTgyZGZcdTcyZDdcdTU3YTJcdTY3ODRcdThkMmRcdTU5MWZcdThmOWNcdTgzYzdcdTU0OTVcdTdiOGRcdTRmMzBcdTZjYmRcdTViNjRcdTU5ZDFcdTlmMTNcdTUzZTRcdTg2Y2FcdTlhYThcdThjMzdcdTgwYTFcdTY1NDVcdTk4N2VcdTU2ZmFcdTk2YzdcdTUyMmVcdTc0ZGNc''@;'; put 'put ''dTUyNTBcdTViZTFcdTYzMDJcdTg5MDJcdTRlNTZcdTYyZDBcdTYwMmFcdTY4ZmFcdTUxNzNcdTViOThcdTUxYTBcdTg5YzJcdTdiYTFcdTk5ODZcdTdmNTBcdTYwZWZcdTcwNGNcdThkMmZcdTUxNDlcdTVlN2ZcdTkwMWJcdTc0NzBcdTg5YzRcdTU3MmRcdTc4NDVcdTVmNTJcdTlmOWZcdTk1''@;'; put 'put ''ZmFcdThmNjhcdTliM2NcdThiZTFcdTc2NzhcdTY4NDJcdTY3ZGNcdThkZWFcdThkMzVcdTUyM2RcdThmOGFcdTZlZGFcdTY4Y2RcdTk1MDVcdTkwZWRcdTU2ZmRcdTY3OWNcdTg4ZjlcdThmYzdcdTU0YzgiXSxbImJhNDAiLCJcdTdiYzVcdTdiYzhcdTdiYzlcdTdiY2FcdTdiY2JcdTdiY2Rc''@;'; put 'put ''dTdiY2VcdTdiY2ZcdTdiZDBcdTdiZDJcdTdiZDQiLDQsIlx1N2JkYlx1N2JkY1x1N2JkZVx1N2JkZlx1N2JlMFx1N2JlMlx1N2JlM1x1N2JlNFx1N2JlN1x1N2JlOFx1N2JlOVx1N2JlYlx1N2JlY1x1N2JlZFx1N2JlZlx1N2JmMFx1N2JmMiIsNCwiXHU3YmY4XHU3YmY5XHU3YmZhXHU3YmZi''@;'; put 'put ''XHU3YmZkXHU3YmZmIiw3LCJcdTdjMDhcdTdjMDlcdTdjMGFcdTdjMGRcdTdjMGVcdTdjMTAiLDUsIlx1N2MxN1x1N2MxOFx1N2MxOSJdLFsiYmE4MCIsIlx1N2MxYSIsNCwiXHU3YzIwIiw1LCJcdTdjMjhcdTdjMjlcdTdjMmIiLDEyLCJcdTdjMzkiLDUsIlx1N2M0Mlx1OWFiOFx1NWI2OVx1''@;'; put 'put ''NmQ3N1x1NmMyNlx1NGVhNVx1NWJiM1x1OWE4N1x1OTE2M1x1NjFhOFx1OTBhZlx1OTdlOVx1NTQyYlx1NmRiNVx1NWJkMlx1NTFmZFx1NTU4YVx1N2Y1NVx1N2ZmMFx1NjRiY1x1NjM0ZFx1NjVmMVx1NjFiZVx1NjA4ZFx1NzEwYVx1NmM1N1x1NmM0OVx1NTkyZlx1Njc2ZFx1ODIyYVx1NThk''@;'; put 'put ''NVx1NTY4ZVx1OGM2YVx1NmJlYlx1OTBkZFx1NTk3ZFx1ODAxN1x1NTNmN1x1NmQ2OVx1NTQ3NVx1NTU5ZFx1ODM3N1x1ODNjZlx1NjgzOFx1NzliZVx1NTQ4Y1x1NGY1NVx1NTQwOFx1NzZkMlx1OGM4OVx1OTYwMlx1NmNiM1x1NmRiOFx1OGQ2Ylx1ODkxMFx1OWU2NFx1OGQzYVx1NTYzZlx1''@;'; put 'put ''OWVkMVx1NzVkNVx1NWY4OFx1NzJlMFx1NjA2OFx1NTRmY1x1NGVhOFx1NmEyYVx1ODg2MVx1NjA1Mlx1OGY3MFx1NTRjNFx1NzBkOFx1ODY3OVx1OWUzZlx1NmQyYVx1NWI4Zlx1NWYxOFx1N2VhMlx1NTU4OVx1NGZhZlx1NzMzNFx1NTQzY1x1NTM5YVx1NTAxOVx1NTQwZVx1NTQ3Y1x1NGU0''@;'; put 'put ''ZVx1NWZmZFx1NzQ1YVx1NThmNlx1ODQ2Ylx1ODBlMVx1ODc3NFx1NzJkMFx1N2NjYVx1NmU1NiJdLFsiYmI0MCIsIlx1N2M0MyIsOSwiXHU3YzRlIiwzNiwiXHU3Yzc1Iiw1LCJcdTdjN2UiLDldLFsiYmI4MCIsIlx1N2M4OFx1N2M4YSIsNiwiXHU3YzkzXHU3Yzk0XHU3Yzk2XHU3Yzk5XHU3''@;'; put 'put ''YzlhXHU3YzliXHU3Y2EwXHU3Y2ExXHU3Y2EzXHU3Y2E2XHU3Y2E3XHU3Y2E4XHU3Y2E5XHU3Y2FiXHU3Y2FjXHU3Y2FkXHU3Y2FmXHU3Y2IwXHU3Y2I0Iiw0LCJcdTdjYmFcdTdjYmJcdTVmMjdcdTg2NGVcdTU1MmNcdTYyYTRcdTRlOTJcdTZjYWFcdTYyMzdcdTgyYjFcdTU0ZDdcdTUzNGVc''@;'; put 'put ''dTczM2VcdTZlZDFcdTc1M2JcdTUyMTJcdTUzMTZcdThiZGRcdTY5ZDBcdTVmOGFcdTYwMDBcdTZkZWVcdTU3NGZcdTZiMjJcdTczYWZcdTY4NTNcdThmZDhcdTdmMTNcdTYzNjJcdTYwYTNcdTU1MjRcdTc1ZWFcdThjNjJcdTcxMTVcdTZkYTNcdTViYTZcdTVlN2JcdTgzNTJcdTYxNGNcdTll''@;'; put 'put ''YzRcdTc4ZmFcdTg3NTdcdTdjMjdcdTc2ODdcdTUxZjBcdTYwZjZcdTcxNGNcdTY2NDNcdTVlNGNcdTYwNGRcdThjMGVcdTcwNzBcdTYzMjVcdThmODlcdTVmYmRcdTYwNjJcdTg2ZDRcdTU2ZGVcdTZiYzFcdTYwOTRcdTYxNjdcdTUzNDlcdTYwZTBcdTY2NjZcdThkM2ZcdTc5ZmRcdTRmMWFc''@;'; put 'put ''dTcwZTlcdTZjNDdcdThiYjNcdThiZjJcdTdlZDhcdTgzNjRcdTY2MGZcdTVhNWFcdTliNDJcdTZkNTFcdTZkZjdcdThjNDFcdTZkM2JcdTRmMTlcdTcwNmJcdTgzYjdcdTYyMTZcdTYwZDFcdTk3MGRcdThkMjdcdTc5NzhcdTUxZmJcdTU3M2VcdTU3ZmFcdTY3M2FcdTc1NzhcdTdhM2RcdTc5''@;'; put 'put ''ZWZcdTdiOTUiXSxbImJjNDAiLCJcdTdjYmZcdTdjYzBcdTdjYzJcdTdjYzNcdTdjYzRcdTdjYzZcdTdjYzlcdTdjY2JcdTdjY2UiLDYsIlx1N2NkOFx1N2NkYVx1N2NkYlx1N2NkZFx1N2NkZVx1N2NlMSIsNiwiXHU3Y2U5Iiw1LCJcdTdjZjAiLDcsIlx1N2NmOVx1N2NmYVx1N2NmYyIsMTMs''@;'; put 'put ''Ilx1N2QwYiIsNV0sWyJiYzgwIiwiXHU3ZDExIiwxNCwiXHU3ZDIxXHU3ZDIzXHU3ZDI0XHU3ZDI1XHU3ZDI2XHU3ZDI4XHU3ZDI5XHU3ZDJhXHU3ZDJjXHU3ZDJkXHU3ZDJlXHU3ZDMwIiw2LCJcdTgwOGNcdTk5NjVcdThmZjlcdTZmYzBcdThiYTVcdTllMjFcdTU5ZWNcdTdlZTlcdTdmMDlc''@;'; put 'put ''dTU0MDlcdTY3ODFcdTY4ZDhcdThmOTFcdTdjNGRcdTk2YzZcdTUzY2FcdTYwMjVcdTc1YmVcdTZjNzJcdTUzNzNcdTVhYzlcdTdlYTdcdTYzMjRcdTUxZTBcdTgxMGFcdTVkZjFcdTg0ZGZcdTYyODBcdTUxODBcdTViNjNcdTRmMGVcdTc5NmRcdTUyNDJcdTYwYjhcdTZkNGVcdTViYzRcdTVi''@;'; put 'put ''YzJcdThiYTFcdThiYjBcdTY1ZTJcdTVmY2NcdTk2NDVcdTU5OTNcdTdlZTdcdTdlYWFcdTU2MDlcdTY3YjdcdTU5MzlcdTRmNzNcdTViYjZcdTUyYTBcdTgzNWFcdTk4OGFcdThkM2VcdTc1MzJcdTk0YmVcdTUwNDdcdTdhM2NcdTRlZjdcdTY3YjZcdTlhN2VcdTVhYzFcdTZiN2NcdTc2ZDFc''@;'; put 'put ''dTU3NWFcdTVjMTZcdTdiM2FcdTk1ZjRcdTcxNGVcdTUxN2NcdTgwYTlcdTgyNzBcdTU5NzhcdTdmMDRcdTgzMjdcdTY4YzBcdTY3ZWNcdTc4YjFcdTc4NzdcdTYyZTNcdTYzNjFcdTdiODBcdTRmZWRcdTUyNmFcdTUxY2ZcdTgzNTBcdTY5ZGJcdTkyNzRcdThkZjVcdThkMzFcdTg5YzFcdTk1''@;'; put 'put ''MmVcdTdiYWRcdTRlZjYiXSxbImJkNDAiLCJcdTdkMzciLDU0LCJcdTdkNmYiLDddLFsiYmQ4MCIsIlx1N2Q3OCIsMzIsIlx1NTA2NVx1ODIzMFx1NTI1MVx1OTk2Zlx1NmUxMFx1NmU4NVx1NmRhN1x1NWVmYVx1NTBmNVx1NTlkY1x1NWMwNlx1NmQ0Nlx1NmM1Zlx1NzU4Nlx1ODQ4Ylx1Njg2''@;'; put 'put ''OFx1NTk1Nlx1OGJiMlx1NTMyMFx1OTE3MVx1OTY0ZFx1ODU0OVx1NjkxMlx1NzkwMVx1NzEyNlx1ODBmNlx1NGVhNFx1OTBjYVx1NmQ0N1x1OWE4NFx1NWEwN1x1NTZiY1x1NjQwNVx1OTRmMFx1NzdlYlx1NGZhNVx1ODExYVx1NzJlMVx1ODlkMlx1OTk3YVx1N2YzNFx1N2VkZVx1NTI3Zlx1''@;'; put 'put ''NjU1OVx1OTE3NVx1OGY3Zlx1OGY4M1x1NTNlYlx1N2E5Nlx1NjNlZFx1NjNhNVx1NzY4Nlx1NzlmOFx1ODg1N1x1OTYzNlx1NjIyYVx1NTJhYlx1ODI4Mlx1Njg1NFx1Njc3MFx1NjM3N1x1Nzc2Ylx1N2FlZFx1NmQwMVx1N2VkM1x1ODllM1x1NTlkMFx1NjIxMlx1ODVjOVx1ODJhNVx1NzU0''@;'; put 'put ''Y1x1NTAxZlx1NGVjYlx1NzVhNVx1OGJlYlx1NWM0YVx1NWRmZVx1N2I0Ylx1NjVhNFx1OTFkMVx1NGVjYVx1NmQyNVx1ODk1Zlx1N2QyN1x1OTUyNlx1NGVjNVx1OGMyOFx1OGZkYlx1OTc3M1x1NjY0Ylx1Nzk4MVx1OGZkMVx1NzBlY1x1NmQ3OCJdLFsiYmU0MCIsIlx1N2Q5OSIsMTIsIlx1''@;'; put 'put ''N2RhNyIsNiwiXHU3ZGFmIiw0Ml0sWyJiZTgwIiwiXHU3ZGRhIiwzMiwiXHU1YzNkXHU1MmIyXHU4MzQ2XHU1MTYyXHU4MzBlXHU3NzViXHU2Njc2XHU5Y2I4XHU0ZWFjXHU2MGNhXHU3Y2JlXHU3Y2IzXHU3ZWNmXHU0ZTk1XHU4YjY2XHU2NjZmXHU5ODg4XHU5NzU5XHU1ODgzXHU2NTZjXHU5''@;'; put 'put ''NTVjXHU1Zjg0XHU3NWM5XHU5NzU2XHU3YWRmXHU3YWRlXHU1MWMwXHU3MGFmXHU3YTk4XHU2M2VhXHU3YTc2XHU3ZWEwXHU3Mzk2XHU5N2VkXHU0ZTQ1XHU3MDc4XHU0ZTVkXHU5MTUyXHU1M2E5XHU2NTUxXHU2NWU3XHU4MWZjXHU4MjA1XHU1NDhlXHU1YzMxXHU3NTlhXHU5N2EwXHU2MmQ4''@;'; put 'put ''XHU3MmQ5XHU3NWJkXHU1YzQ1XHU5YTc5XHU4M2NhXHU1YzQwXHU1NDgwXHU3N2U5XHU0ZTNlXHU2Y2FlXHU4MDVhXHU2MmQyXHU2MzZlXHU1ZGU4XHU1MTc3XHU4ZGRkXHU4ZTFlXHU5NTJmXHU0ZmYxXHU1M2U1XHU2MGU3XHU3MGFjXHU1MjY3XHU2MzUwXHU5ZTQzXHU1YTFmXHU1MDI2XHU3''@;'; put 'put ''NzM3XHU1Mzc3XHU3ZWUyXHU2NDg1XHU2NTJiXHU2Mjg5XHU2Mzk4XHU1MDE0XHU3MjM1XHU4OWM5XHU1MWIzXHU4YmMwXHU3ZWRkXHU1NzQ3XHU4M2NjXHU5NGE3XHU1MTliXHU1NDFiXHU1Y2ZiIl0sWyJiZjQwIiwiXHU3ZGZiIiw2Ml0sWyJiZjgwIiwiXHU3ZTNhXHU3ZTNjIiw0LCJcdTdl''@;'; put 'put ''NDIiLDQsIlx1N2U0OCIsMjEsIlx1NGZjYVx1N2FlM1x1NmQ1YVx1OTBlMVx1OWE4Zlx1NTU4MFx1NTQ5Nlx1NTM2MVx1NTRhZlx1NWYwMFx1NjNlOVx1Njk3N1x1NTFlZlx1NjE2OFx1NTIwYVx1NTgyYVx1NTJkOFx1NTc0ZVx1NzgwZFx1NzcwYlx1NWViN1x1NjE3N1x1N2NlMFx1NjI1Ylx1''@;'; put 'put ''NjI5N1x1NGVhMlx1NzA5NVx1ODAwM1x1NjJmN1x1NzBlNFx1OTc2MFx1NTc3N1x1ODJkYlx1NjdlZlx1NjhmNVx1NzhkNVx1OTg5N1x1NzlkMVx1NThmM1x1NTRiM1x1NTNlZlx1NmUzNFx1NTE0Ylx1NTIzYlx1NWJhMlx1OGJmZVx1ODBhZlx1NTU0M1x1NTdhNlx1NjA3M1x1NTc1MVx1NTQy''@;'; put 'put ''ZFx1N2E3YVx1NjA1MFx1NWI1NFx1NjNhN1x1NjJhMFx1NTNlM1x1NjI2M1x1NWJjN1x1NjdhZlx1NTRlZFx1N2E5Zlx1ODJlNlx1OTE3N1x1NWU5M1x1ODhlNFx1NTkzOFx1NTdhZVx1NjMwZVx1OGRlOFx1ODBlZlx1NTc1N1x1N2I3N1x1NGZhOVx1NWZlYlx1NWJiZFx1NmIzZVx1NTMyMVx1''@;'; put 'put ''N2I1MFx1NzJjMlx1Njg0Nlx1NzdmZlx1NzczNlx1NjVmN1x1NTFiNVx1NGU4Zlx1NzZkNFx1NWNiZlx1N2FhNVx1ODQ3NVx1NTk0ZVx1OWI0MVx1NTA4MCJdLFsiYzA0MCIsIlx1N2U1ZSIsMzUsIlx1N2U4MyIsMjMsIlx1N2U5Y1x1N2U5ZFx1N2U5ZSJdLFsiYzA4MCIsIlx1N2VhZVx1N2Vi''@;'; put 'put ''NFx1N2ViYlx1N2ViY1x1N2VkNlx1N2VlNFx1N2VlY1x1N2VmOVx1N2YwYVx1N2YxMFx1N2YxZVx1N2YzN1x1N2YzOVx1N2YzYiIsNiwiXHU3ZjQzXHU3ZjQ2Iiw5LCJcdTdmNTJcdTdmNTNcdTk5ODhcdTYxMjdcdTZlODNcdTU3NjRcdTY2MDZcdTYzNDZcdTU2ZjBcdTYyZWNcdTYyNjlcdTVl''@;'; put 'put ''ZDNcdTk2MTRcdTU3ODNcdTYyYzlcdTU1ODdcdTg3MjFcdTgxNGFcdThmYTNcdTU1NjZcdTgzYjFcdTY3NjVcdThkNTZcdTg0ZGRcdTVhNmFcdTY4MGZcdTYyZTZcdTdiZWVcdTk2MTFcdTUxNzBcdTZmOWNcdThjMzBcdTYzZmRcdTg5YzhcdTYxZDJcdTdmMDZcdTcwYzJcdTZlZTVcdTc0MDVc''@;'; put 'put ''dTY5OTRcdTcyZmNcdTVlY2FcdTkwY2VcdTY3MTdcdTZkNmFcdTYzNWVcdTUyYjNcdTcyNjJcdTgwMDFcdTRmNmNcdTU5ZTVcdTkxNmFcdTcwZDlcdTZkOWRcdTUyZDJcdTRlNTBcdTk2ZjdcdTk1NmRcdTg1N2VcdTc4Y2FcdTdkMmZcdTUxMjFcdTU3OTJcdTY0YzJcdTgwOGJcdTdjN2JcdTZj''@;'; put 'put ''ZWFcdTY4ZjFcdTY5NWVcdTUxYjdcdTUzOThcdTY4YThcdTcyODFcdTllY2VcdTdiZjFcdTcyZjhcdTc5YmJcdTZmMTNcdTc0MDZcdTY3NGVcdTkxY2NcdTljYTRcdTc5M2NcdTgzODlcdTgzNTRcdTU0MGZcdTY4MTdcdTRlM2RcdTUzODlcdTUyYjFcdTc4M2VcdTUzODZcdTUyMjlcdTUwODhc''@;'; put 'put ''dTRmOGJcdTRmZDAiXSxbImMxNDAiLCJcdTdmNTZcdTdmNTlcdTdmNWJcdTdmNWNcdTdmNWRcdTdmNWVcdTdmNjBcdTdmNjMiLDQsIlx1N2Y2Ylx1N2Y2Y1x1N2Y2ZFx1N2Y2Zlx1N2Y3MFx1N2Y3M1x1N2Y3NVx1N2Y3Nlx1N2Y3N1x1N2Y3OFx1N2Y3YVx1N2Y3Ylx1N2Y3Y1x1N2Y3ZFx1N2Y3''@;'; put 'put ''Zlx1N2Y4MFx1N2Y4MiIsNywiXHU3ZjhiXHU3ZjhkXHU3ZjhmIiw0LCJcdTdmOTUiLDQsIlx1N2Y5Ylx1N2Y5Y1x1N2ZhMFx1N2ZhMlx1N2ZhM1x1N2ZhNVx1N2ZhNlx1N2ZhOCIsNiwiXHU3ZmIxIl0sWyJjMTgwIiwiXHU3ZmIzIiw0LCJcdTdmYmFcdTdmYmJcdTdmYmVcdTdmYzBcdTdmYzJc''@;'; put 'put ''dTdmYzNcdTdmYzRcdTdmYzZcdTdmYzdcdTdmYzhcdTdmYzlcdTdmY2JcdTdmY2RcdTdmY2YiLDQsIlx1N2ZkNlx1N2ZkN1x1N2ZkOSIsNSwiXHU3ZmUyXHU3ZmUzXHU3NWUyXHU3YWNiXHU3YzkyXHU2Y2E1XHU5NmI2XHU1MjliXHU3NDgzXHU1NGU5XHU0ZmU5XHU4MDU0XHU4M2IyXHU4ZmRl''@;'; put 'put ''XHU5NTcwXHU1ZWM5XHU2MDFjXHU2ZDlmXHU1ZTE4XHU2NTViXHU4MTM4XHU5NGZlXHU2MDRiXHU3MGJjXHU3ZWMzXHU3Y2FlXHU1MWM5XHU2ODgxXHU3Y2IxXHU4MjZmXHU0ZTI0XHU4Zjg2XHU5MWNmXHU2NjdlXHU0ZWFlXHU4YzA1XHU2NGE5XHU4MDRhXHU1MGRhXHU3NTk3XHU3MWNlXHU1''@;'; put 'put ''YmU1XHU4ZmJkXHU2ZjY2XHU0ZTg2XHU2NDgyXHU5NTYzXHU1ZWQ2XHU2NTk5XHU1MjE3XHU4OGMyXHU3MGM4XHU1MmEzXHU3MzBlXHU3NDMzXHU2Nzk3XHU3OGY3XHU5NzE2XHU0ZTM0XHU5MGJiXHU5Y2RlXHU2ZGNiXHU1MWRiXHU4ZDQxXHU1NDFkXHU2MmNlXHU3M2IyXHU4M2YxXHU5NmY2''@;'; put 'put ''XHU5Zjg0XHU5NGMzXHU0ZjM2XHU3ZjlhXHU1MWNjXHU3MDc1XHU5Njc1XHU1Y2FkXHU5ODg2XHU1M2U2XHU0ZWU0XHU2ZTljXHU3NDA5XHU2OWI0XHU3ODZiXHU5OThmXHU3NTU5XHU1MjE4XHU3NjI0XHU2ZDQxXHU2N2YzXHU1MTZkXHU5Zjk5XHU4MDRiXHU1NDk5XHU3YjNjXHU3YWJmIl0s''@;'; put 'put ''WyJjMjQwIiwiXHU3ZmU0XHU3ZmU3XHU3ZmU4XHU3ZmVhXHU3ZmViXHU3ZmVjXHU3ZmVkXHU3ZmVmXHU3ZmYyXHU3ZmY0Iiw2LCJcdTdmZmRcdTdmZmVcdTdmZmZcdTgwMDJcdTgwMDdcdTgwMDhcdTgwMDlcdTgwMGFcdTgwMGVcdTgwMGZcdTgwMTFcdTgwMTNcdTgwMWFcdTgwMWJcdTgwMWRc''@;'; put 'put ''dTgwMWVcdTgwMWZcdTgwMjFcdTgwMjNcdTgwMjRcdTgwMmIiLDUsIlx1ODAzMlx1ODAzNFx1ODAzOVx1ODAzYVx1ODAzY1x1ODAzZVx1ODA0MFx1ODA0MVx1ODA0NFx1ODA0NVx1ODA0N1x1ODA0OFx1ODA0OVx1ODA0ZVx1ODA0Zlx1ODA1MFx1ODA1MVx1ODA1M1x1ODA1NVx1ODA1Nlx1ODA1''@;'; put 'put ''NyJdLFsiYzI4MCIsIlx1ODA1OVx1ODA1YiIsMTMsIlx1ODA2YiIsNSwiXHU4MDcyIiwxMSwiXHU5Njg2XHU1Nzg0XHU2MmUyXHU5NjQ3XHU2OTdjXHU1YTA0XHU2NDAyXHU3YmQzXHU2ZjBmXHU5NjRiXHU4MmE2XHU1MzYyXHU5ODg1XHU1ZTkwXHU3MDg5XHU2M2IzXHU1MzY0XHU4NjRmXHU5''@;'; put 'put ''YzgxXHU5ZTkzXHU3ODhjXHU5NzMyXHU4ZGVmXHU4ZDQyXHU5ZTdmXHU2ZjVlXHU3OTg0XHU1ZjU1XHU5NjQ2XHU2MjJlXHU5YTc0XHU1NDE1XHU5NGRkXHU0ZmEzXHU2NWM1XHU1YzY1XHU1YzYxXHU3ZjE1XHU4NjUxXHU2YzJmXHU1ZjhiXHU3Mzg3XHU2ZWU0XHU3ZWZmXHU1Y2U2XHU2MzFi''@;'; put 'put ''XHU1YjZhXHU2ZWU2XHU1Mzc1XHU0ZTcxXHU2M2EwXHU3NTY1XHU2MmExXHU4ZjZlXHU0ZjI2XHU0ZWQxXHU2Y2E2XHU3ZWI2XHU4YmJhXHU4NDFkXHU4N2JhXHU3ZjU3XHU5MDNiXHU5NTIzXHU3YmE5XHU5YWExXHU4OGY4XHU4NDNkXHU2ZDFiXHU5YTg2XHU3ZWRjXHU1OTg4XHU5ZWJiXHU3''@;'; put 'put ''MzliXHU3ODAxXHU4NjgyXHU5YTZjXHU5YTgyXHU1NjFiXHU1NDE3XHU1N2NiXHU0ZTcwXHU5ZWE2XHU1MzU2XHU4ZmM4XHU4MTA5XHU3NzkyXHU5OTkyXHU4NmVlXHU2ZWUxXHU4NTEzXHU2NmZjXHU2MTYyXHU2ZjJiIl0sWyJjMzQwIiwiXHU4MDdlXHU4MDgxXHU4MDgyXHU4MDg1XHU4MDg4''@;'; put 'put ''XHU4MDhhXHU4MDhkIiw1LCJcdTgwOTRcdTgwOTVcdTgwOTdcdTgwOTlcdTgwOWVcdTgwYTNcdTgwYTZcdTgwYTdcdTgwYThcdTgwYWNcdTgwYjBcdTgwYjNcdTgwYjVcdTgwYjZcdTgwYjhcdTgwYjlcdTgwYmJcdTgwYzVcdTgwYzciLDQsIlx1ODBjZiIsNiwiXHU4MGQ4XHU4MGRmXHU4MGUw''@;'; put 'put ''XHU4MGUyXHU4MGUzXHU4MGU2XHU4MGVlXHU4MGY1XHU4MGY3XHU4MGY5XHU4MGZiXHU4MGZlXHU4MGZmXHU4MTAwXHU4MTAxXHU4MTAzXHU4MTA0XHU4MTA1XHU4MTA3XHU4MTA4XHU4MTBiIl0sWyJjMzgwIiwiXHU4MTBjXHU4MTE1XHU4MTE3XHU4MTE5XHU4MTFiXHU4MTFjXHU4MTFkXHU4''@;'; put 'put ''MTFmIiwxMiwiXHU4MTJkXHU4MTJlXHU4MTMwXHU4MTMzXHU4MTM0XHU4MTM1XHU4MTM3XHU4MTM5Iiw0LCJcdTgxM2ZcdThjMjlcdTgyOTJcdTgzMmJcdTc2ZjJcdTZjMTNcdTVmZDlcdTgzYmRcdTczMmJcdTgzMDVcdTk1MWFcdTZiZGJcdTc3ZGJcdTk0YzZcdTUzNmZcdTgzMDJcdTUxOTJc''@;'; put 'put ''dTVlM2RcdThjOGNcdThkMzhcdTRlNDhcdTczYWJcdTY3OWFcdTY4ODVcdTkxNzZcdTk3MDlcdTcxNjRcdTZjYTFcdTc3MDlcdTVhOTJcdTk1NDFcdTZiY2ZcdTdmOGVcdTY2MjdcdTViZDBcdTU5YjlcdTVhOWFcdTk1ZThcdTk1ZjdcdTRlZWNcdTg0MGNcdTg0OTlcdTZhYWNcdTc2ZGZcdTk1''@;'; put 'put ''MzBcdTczMWJcdTY4YTZcdTViNWZcdTc3MmZcdTkxOWFcdTk3NjFcdTdjZGNcdThmZjdcdThjMWNcdTVmMjVcdTdjNzNcdTc5ZDhcdTg5YzVcdTZjY2NcdTg3MWNcdTViYzZcdTVlNDJcdTY4YzlcdTc3MjBcdTdlZjVcdTUxOTVcdTUxNGRcdTUyYzlcdTVhMjlcdTdmMDVcdTk3NjJcdTgyZDdc''@;'; put 'put ''dTYzY2ZcdTc3ODRcdTg1ZDBcdTc5ZDJcdTZlM2FcdTVlOTlcdTU5OTlcdTg1MTFcdTcwNmRcdTZjMTFcdTYyYmZcdTc2YmZcdTY1NGZcdTYwYWZcdTk1ZmRcdTY2MGVcdTg3OWZcdTllMjNcdTk0ZWRcdTU0MGRcdTU0N2RcdThjMmNcdTY0NzgiXSxbImM0NDAiLCJcdTgxNDAiLDUsIlx1ODE0''@;'; put 'put ''N1x1ODE0OVx1ODE0ZFx1ODE0ZVx1ODE0Zlx1ODE1Mlx1ODE1Nlx1ODE1N1x1ODE1OFx1ODE1YiIsNCwiXHU4MTYxXHU4MTYyXHU4MTYzXHU4MTY0XHU4MTY2XHU4MTY4XHU4MTZhXHU4MTZiXHU4MTZjXHU4MTZmXHU4MTcyXHU4MTczXHU4MTc1XHU4MTc2XHU4MTc3XHU4MTc4XHU4MTgxXHU4''@;'; put 'put ''MTgzIiw0LCJcdTgxODlcdTgxOGJcdTgxOGNcdTgxOGRcdTgxOGVcdTgxOTBcdTgxOTIiLDUsIlx1ODE5OVx1ODE5YVx1ODE5ZSIsNCwiXHU4MWE0XHU4MWE1Il0sWyJjNDgwIiwiXHU4MWE3XHU4MWE5XHU4MWFiIiw3LCJcdTgxYjQiLDUsIlx1ODFiY1x1ODFiZFx1ODFiZVx1ODFiZlx1ODFj''@;'; put 'put ''NFx1ODFjNVx1ODFjN1x1ODFjOFx1ODFjOVx1ODFjYlx1ODFjZCIsNiwiXHU2NDc5XHU4NjExXHU2YTIxXHU4MTljXHU3OGU4XHU2NDY5XHU5YjU0XHU2MmI5XHU2NzJiXHU4M2FiXHU1OGE4XHU5ZWQ4XHU2Y2FiXHU2ZjIwXHU1YmRlXHU5NjRjXHU4YzBiXHU3MjVmXHU2N2QwXHU2MmM3XHU3''@;'; put 'put ''MjYxXHU0ZWE5XHU1OWM2XHU2YmNkXHU1ODkzXHU2NmFlXHU1ZTU1XHU1MmRmXHU2MTU1XHU2NzI4XHU3NmVlXHU3NzY2XHU3MjY3XHU3YTQ2XHU2MmZmXHU1NGVhXHU1NDUwXHU5NGEwXHU5MGEzXHU1YTFjXHU3ZWIzXHU2YzE2XHU0ZTQzXHU1OTc2XHU4MDEwXHU1OTQ4XHU1MzU3XHU3NTM3''@;'; put 'put ''XHU5NmJlXHU1NmNhXHU2MzIwXHU4MTExXHU2MDdjXHU5NWY5XHU2ZGQ2XHU1NDYyXHU5OTgxXHU1MTg1XHU1YWU5XHU4MGZkXHU1OWFlXHU5NzEzXHU1MDJhXHU2Y2U1XHU1YzNjXHU2MmRmXHU0ZjYwXHU1MzNmXHU4MTdiXHU5MDA2XHU2ZWJhXHU4NTJiXHU2MmM4XHU1ZTc0XHU3OGJlXHU2''@;'; put 'put ''NGI1XHU2MzdiXHU1ZmY1XHU1YTE4XHU5MTdmXHU5ZTFmXHU1YzNmXHU2MzRmXHU4MDQyXHU1YjdkXHU1NTZlXHU5NTRhXHU5NTRkXHU2ZDg1XHU2MGE4XHU2N2UwXHU3MmRlXHU1MWRkXHU1YjgxIl0sWyJjNTQwIiwiXHU4MWQ0IiwxNCwiXHU4MWU0XHU4MWU1XHU4MWU2XHU4MWU4XHU4MWU5''@;'; put 'put ''XHU4MWViXHU4MWVlIiw0LCJcdTgxZjUiLDUsIlx1ODFmZFx1ODFmZlx1ODIwM1x1ODIwNyIsNCwiXHU4MjBlXHU4MjBmXHU4MjExXHU4MjEzXHU4MjE1Iiw1LCJcdTgyMWRcdTgyMjBcdTgyMjRcdTgyMjVcdTgyMjZcdTgyMjdcdTgyMjlcdTgyMmVcdTgyMzJcdTgyM2FcdTgyM2NcdTgyM2Rc''@;'; put 'put ''dTgyM2YiXSxbImM1ODAiLCJcdTgyNDBcdTgyNDFcdTgyNDJcdTgyNDNcdTgyNDVcdTgyNDZcdTgyNDhcdTgyNGFcdTgyNGNcdTgyNGRcdTgyNGVcdTgyNTAiLDcsIlx1ODI1OVx1ODI1Ylx1ODI1Y1x1ODI1ZFx1ODI1ZVx1ODI2MCIsNywiXHU4MjY5XHU2MmU3XHU2Y2RlXHU3MjViXHU2MjZk''@;'; put 'put ''XHU5NGFlXHU3ZWJkXHU4MTEzXHU2ZDUzXHU1MTljXHU1ZjA0XHU1OTc0XHU1MmFhXHU2MDEyXHU1OTczXHU2Njk2XHU4NjUwXHU3NTlmXHU2MzJhXHU2MWU2XHU3Y2VmXHU4YmZhXHU1NGU2XHU2YjI3XHU5ZTI1XHU2YmI0XHU4NWQ1XHU1NDU1XHU1MDc2XHU2Y2E0XHU1NTZhXHU4ZGI0XHU3''@;'; put 'put ''MjJjXHU1ZTE1XHU2MDE1XHU3NDM2XHU2MmNkXHU2MzkyXHU3MjRjXHU1Zjk4XHU2ZTQzXHU2ZDNlXHU2NTAwXHU2ZjU4XHU3NmQ4XHU3OGQwXHU3NmZjXHU3NTU0XHU1MjI0XHU1M2RiXHU0ZTUzXHU1ZTllXHU2NWMxXHU4MDJhXHU4MGQ2XHU2MjliXHU1NDg2XHU1MjI4XHU3MGFlXHU4ODhk''@;'; put 'put ''XHU4ZGQxXHU2Y2UxXHU1NDc4XHU4MGRhXHU1N2Y5XHU4OGY0XHU4ZDU0XHU5NjZhXHU5MTRkXHU0ZjY5XHU2YzliXHU1NWI3XHU3NmM2XHU3ODMwXHU2MmE4XHU3MGY5XHU2ZjhlXHU1ZjZkXHU4NGVjXHU2OGRhXHU3ODdjXHU3YmY3XHU4MWE4XHU2NzBiXHU5ZTRmXHU2MzY3XHU3OGIwXHU1''@;'; put 'put ''NzZmXHU3ODEyXHU5NzM5XHU2Mjc5XHU2MmFiXHU1Mjg4XHU3NDM1XHU2YmQ3Il0sWyJjNjQwIiwiXHU4MjZhXHU4MjZiXHU4MjZjXHU4MjZkXHU4MjcxXHU4Mjc1XHU4Mjc2XHU4Mjc3XHU4Mjc4XHU4MjdiXHU4MjdjXHU4MjgwXHU4MjgxXHU4MjgzXHU4Mjg1XHU4Mjg2XHU4Mjg3XHU4Mjg5''@;'; put 'put ''XHU4MjhjXHU4MjkwXHU4MjkzXHU4Mjk0XHU4Mjk1XHU4Mjk2XHU4MjlhXHU4MjliXHU4MjllXHU4MmEwXHU4MmEyXHU4MmEzXHU4MmE3XHU4MmIyXHU4MmI1XHU4MmI2XHU4MmJhXHU4MmJiXHU4MmJjXHU4MmJmXHU4MmMwXHU4MmMyXHU4MmMzXHU4MmM1XHU4MmM2XHU4MmM5XHU4MmQwXHU4''@;'; put 'put ''MmQ2XHU4MmQ5XHU4MmRhXHU4MmRkXHU4MmUyXHU4MmU3XHU4MmU4XHU4MmU5XHU4MmVhXHU4MmVjXHU4MmVkXHU4MmVlXHU4MmYwXHU4MmYyXHU4MmYzXHU4MmY1XHU4MmY2XHU4MmY4Il0sWyJjNjgwIiwiXHU4MmZhXHU4MmZjIiw0LCJcdTgzMGFcdTgzMGJcdTgzMGRcdTgzMTBcdTgzMTJc''@;'; put 'put ''dTgzMTNcdTgzMTZcdTgzMThcdTgzMTlcdTgzMWQiLDksIlx1ODMyOVx1ODMyYVx1ODMyZVx1ODMzMFx1ODMzMlx1ODMzN1x1ODMzYlx1ODMzZFx1NTU2NFx1ODEzZVx1NzViMlx1NzZhZVx1NTMzOVx1NzVkZVx1NTBmYlx1NWM0MVx1OGI2Y1x1N2JjN1x1NTA0Zlx1NzI0N1x1OWE5N1x1OThk''@;'; put 'put ''OFx1NmYwMlx1NzRlMlx1Nzk2OFx1NjQ4N1x1NzdhNVx1NjJmY1x1OTg5MVx1OGQyYlx1NTRjMVx1ODA1OFx1NGU1Mlx1NTc2YVx1ODJmOVx1ODQwZFx1NWU3M1x1NTFlZFx1NzRmNlx1OGJjNFx1NWM0Zlx1NTc2MVx1NmNmY1x1OTg4N1x1NWE0Nlx1NzgzNFx1OWI0NFx1OGZlYlx1N2M5NVx1''@;'; put 'put ''NTI1Nlx1NjI1MVx1OTRmYVx1NGVjNlx1ODM4Nlx1ODQ2MVx1ODNlOVx1ODRiMlx1NTdkNFx1NjczNFx1NTcwM1x1NjY2ZVx1NmQ2Nlx1OGMzMVx1NjZkZFx1NzAxMVx1NjcxZlx1NmIzYVx1NjgxNlx1NjIxYVx1NTliYlx1NGUwM1x1NTFjNFx1NmYwNlx1NjdkMlx1NmM4Zlx1NTE3Nlx1Njhj''@;'; put 'put ''Ylx1NTk0N1x1NmI2N1x1NzU2Nlx1NWQwZVx1ODExMFx1OWY1MFx1NjVkN1x1Nzk0OFx1Nzk0MVx1OWE5MVx1OGQ3N1x1NWM4Mlx1NGU1ZVx1NGYwMVx1NTQyZlx1NTk1MVx1NzgwY1x1NTY2OFx1NmMxNFx1OGZjNFx1NWYwM1x1NmM3ZFx1NmNlM1x1OGJhYlx1NjM5MCJdLFsiYzc0MCIsIlx1''@;'; put 'put ''ODMzZVx1ODMzZlx1ODM0MVx1ODM0Mlx1ODM0NFx1ODM0NVx1ODM0OFx1ODM0YSIsNCwiXHU4MzUzXHU4MzU1Iiw0LCJcdTgzNWRcdTgzNjJcdTgzNzAiLDYsIlx1ODM3OVx1ODM3YVx1ODM3ZSIsNiwiXHU4Mzg3XHU4Mzg4XHU4MzhhXHU4MzhiXHU4MzhjXHU4MzhkXHU4MzhmXHU4MzkwXHU4''@;'; put 'put ''MzkxXHU4Mzk0XHU4Mzk1XHU4Mzk2XHU4Mzk3XHU4Mzk5XHU4MzlhXHU4MzlkXHU4MzlmXHU4M2ExIiw2LCJcdTgzYWNcdTgzYWRcdTgzYWUiXSxbImM3ODAiLCJcdTgzYWZcdTgzYjVcdTgzYmJcdTgzYmVcdTgzYmZcdTgzYzJcdTgzYzNcdTgzYzRcdTgzYzZcdTgzYzhcdTgzYzlcdTgzY2Jc''@;'; put 'put ''dTgzY2RcdTgzY2VcdTgzZDBcdTgzZDFcdTgzZDJcdTgzZDNcdTgzZDVcdTgzZDdcdTgzZDlcdTgzZGFcdTgzZGJcdTgzZGVcdTgzZTJcdTgzZTNcdTgzZTRcdTgzZTZcdTgzZTdcdTgzZThcdTgzZWJcdTgzZWNcdTgzZWRcdTYwNzBcdTZkM2RcdTcyNzVcdTYyNjZcdTk0OGVcdTk0YzVcdTUz''@;'; put 'put ''NDNcdThmYzFcdTdiN2VcdTRlZGZcdThjMjZcdTRlN2VcdTllZDRcdTk0YjFcdTk0YjNcdTUyNGRcdTZmNWNcdTkwNjNcdTZkNDVcdThjMzRcdTU4MTFcdTVkNGNcdTZiMjBcdTZiNDlcdTY3YWFcdTU0NWJcdTgxNTRcdTdmOGNcdTU4OTlcdTg1MzdcdTVmM2FcdTYyYTJcdTZhNDdcdTk1Mzlc''@;'; put 'put ''dTY1NzJcdTYwODRcdTY4NjVcdTc3YTdcdTRlNTRcdTRmYThcdTVkZTdcdTk3OThcdTY0YWNcdTdmZDhcdTVjZWRcdTRmY2ZcdTdhOGRcdTUyMDdcdTgzMDRcdTRlMTRcdTYwMmZcdTdhODNcdTk0YTZcdTRmYjVcdTRlYjJcdTc5ZTZcdTc0MzRcdTUyZTRcdTgyYjlcdTY0ZDJcdTc5YmRcdTVi''@;'; put 'put ''ZGRcdTZjODFcdTk3NTJcdThmN2JcdTZjMjJcdTUwM2VcdTUzN2ZcdTZlMDVcdTY0Y2VcdTY2NzRcdTZjMzBcdTYwYzVcdTk4NzdcdThiZjdcdTVlODZcdTc0M2NcdTdhNzdcdTc5Y2JcdTRlMThcdTkwYjFcdTc0MDNcdTZjNDJcdTU2ZGFcdTkxNGJcdTZjYzVcdThkOGJcdTUzM2FcdTg2YzZc''@;'; put 'put ''dTY2ZjJcdThlYWZcdTVjNDhcdTlhNzFcdTZlMjAiXSxbImM4NDAiLCJcdTgzZWVcdTgzZWZcdTgzZjMiLDQsIlx1ODNmYVx1ODNmYlx1ODNmY1x1ODNmZVx1ODNmZlx1ODQwMFx1ODQwMlx1ODQwNVx1ODQwN1x1ODQwOFx1ODQwOVx1ODQwYVx1ODQxMFx1ODQxMiIsNSwiXHU4NDE5XHU4NDFh''@;'; put 'put ''XHU4NDFiXHU4NDFlIiw1LCJcdTg0MjkiLDcsIlx1ODQzMiIsNSwiXHU4NDM5XHU4NDNhXHU4NDNiXHU4NDNlIiw3LCJcdTg0NDdcdTg0NDhcdTg0NDkiXSxbImM4ODAiLCJcdTg0NGEiLDYsIlx1ODQ1MiIsNCwiXHU4NDU4XHU4NDVkXHU4NDVlXHU4NDVmXHU4NDYwXHU4NDYyXHU4NDY0Iiw0''@;'; put 'put ''LCJcdTg0NmFcdTg0NmVcdTg0NmZcdTg0NzBcdTg0NzJcdTg0NzRcdTg0NzdcdTg0NzlcdTg0N2JcdTg0N2NcdTUzZDZcdTVhMzZcdTlmOGJcdThkYTNcdTUzYmJcdTU3MDhcdTk4YTdcdTY3NDNcdTkxOWJcdTZjYzlcdTUxNjhcdTc1Y2FcdTYyZjNcdTcyYWNcdTUyMzhcdTUyOWRcdTdmM2Fc''@;'; put 'put ''dTcwOTRcdTc2MzhcdTUzNzRcdTllNGFcdTY5YjdcdTc4NmVcdTk2YzBcdTg4ZDlcdTdmYTRcdTcxMzZcdTcxYzNcdTUxODlcdTY3ZDNcdTc0ZTRcdTU4ZTRcdTY1MThcdTU2YjdcdThiYTlcdTk5NzZcdTYyNzBcdTdlZDVcdTYwZjlcdTcwZWRcdTU4ZWNcdTRlYzFcdTRlYmFcdTVmY2RcdTk3''@;'; put 'put ''ZTdcdTRlZmJcdThiYTRcdTUyMDNcdTU5OGFcdTdlYWJcdTYyNTRcdTRlY2RcdTY1ZTVcdTYyMGVcdTgzMzhcdTg0YzlcdTgzNjNcdTg3OGRcdTcxOTRcdTZlYjZcdTViYjlcdTdlZDJcdTUxOTdcdTYzYzlcdTY3ZDRcdTgwODlcdTgzMzlcdTg4MTVcdTUxMTJcdTViN2FcdTU5ODJcdThmYjFc''@;'; put 'put ''dTRlNzNcdTZjNWRcdTUxNjVcdTg5MjVcdThmNmZcdTk2MmVcdTg1NGFcdTc0NWVcdTk1MTBcdTk1ZjBcdTZkYTZcdTgyZTVcdTVmMzFcdTY0OTJcdTZkMTJcdTg0MjhcdTgxNmVcdTljYzNcdTU4NWVcdThkNWJcdTRlMDlcdTUzYzEiXSxbImM5NDAiLCJcdTg0N2QiLDQsIlx1ODQ4M1x1ODQ4''@;'; put 'put ''NFx1ODQ4NVx1ODQ4Nlx1ODQ4YVx1ODQ4ZFx1ODQ4ZiIsNywiXHU4NDk4XHU4NDlhXHU4NDliXHU4NDlkXHU4NDllXHU4NDlmXHU4NGEwXHU4NGEyIiwxMiwiXHU4NGIwXHU4NGIxXHU4NGIzXHU4NGI1XHU4NGI2XHU4NGI3XHU4NGJiXHU4NGJjXHU4NGJlXHU4NGMwXHU4NGMyXHU4NGMzXHU4''@;'; put 'put ''NGM1XHU4NGM2XHU4NGM3XHU4NGM4XHU4NGNiXHU4NGNjXHU4NGNlXHU4NGNmXHU4NGQyXHU4NGQ0XHU4NGQ1XHU4NGQ3Il0sWyJjOTgwIiwiXHU4NGQ4Iiw0LCJcdTg0ZGVcdTg0ZTFcdTg0ZTJcdTg0ZTRcdTg0ZTciLDQsIlx1ODRlZFx1ODRlZVx1ODRlZlx1ODRmMSIsMTAsIlx1ODRmZFx1''@;'; put 'put ''ODRmZVx1ODUwMFx1ODUwMVx1ODUwMlx1NGYxZVx1NjU2M1x1Njg1MVx1NTVkM1x1NGUyN1x1NjQxNFx1OWE5YVx1NjI2Ylx1NWFjMlx1NzQ1Zlx1ODI3Mlx1NmRhOVx1NjhlZVx1NTBlN1x1ODM4ZVx1NzgwMlx1Njc0MFx1NTIzOVx1NmM5OVx1N2ViMVx1NTBiYlx1NTU2NVx1NzE1ZVx1N2I1''@;'; put 'put ''Ylx1NjY1Mlx1NzNjYVx1ODJlYlx1Njc0OVx1NWM3MVx1NTIyMFx1NzE3ZFx1ODg2Ylx1OTVlYVx1OTY1NVx1NjRjNVx1OGQ2MVx1ODFiM1x1NTU4NFx1NmM1NVx1NjI0N1x1N2YyZVx1NTg5Mlx1NGYyNFx1NTU0Nlx1OGQ0Zlx1NjY0Y1x1NGUwYVx1NWMxYVx1ODhmM1x1NjhhMlx1NjM0ZVx1''@;'; put 'put ''N2EwZFx1NzBlN1x1ODI4ZFx1NTJmYVx1OTdmNlx1NWMxMVx1NTRlOFx1OTBiNVx1N2VjZFx1NTk2Mlx1OGQ0YVx1ODZjN1x1ODIwY1x1ODIwZFx1OGQ2Nlx1NjQ0NFx1NWMwNFx1NjE1MVx1NmQ4OVx1NzkzZVx1OGJiZVx1NzgzN1x1NzUzM1x1NTQ3Ylx1NGYzOFx1OGVhYlx1NmRmMVx1NWEy''@;'; put 'put ''MFx1N2VjNVx1Nzk1ZVx1NmM4OFx1NWJhMVx1NWE3Nlx1NzUxYVx1ODBiZVx1NjE0ZVx1NmUxN1x1NThmMFx1NzUxZlx1NzUyNVx1NzI3Mlx1NTM0N1x1N2VmMyJdLFsiY2E0MCIsIlx1ODUwMyIsOCwiXHU4NTBkXHU4NTBlXHU4NTBmXHU4NTEwXHU4NTEyXHU4NTE0XHU4NTE1XHU4NTE2XHU4''@;'; put 'put ''NTE4XHU4NTE5XHU4NTFiXHU4NTFjXHU4NTFkXHU4NTFlXHU4NTIwXHU4NTIyIiw4LCJcdTg1MmQiLDksIlx1ODUzZSIsNCwiXHU4NTQ0XHU4NTQ1XHU4NTQ2XHU4NTQ3XHU4NTRiIiwxMF0sWyJjYTgwIiwiXHU4NTU3XHU4NTU4XHU4NTVhXHU4NTViXHU4NTVjXHU4NTVkXHU4NTVmIiw0LCJc''@;'; put 'put ''dTg1NjVcdTg1NjZcdTg1NjdcdTg1NjkiLDgsIlx1ODU3M1x1ODU3NVx1ODU3Nlx1ODU3N1x1ODU3OFx1ODU3Y1x1ODU3ZFx1ODU3Zlx1ODU4MFx1ODU4MVx1NzcwMVx1NzZkYlx1NTI2OVx1ODBkY1x1NTcyM1x1NWUwOFx1NTkzMVx1NzJlZVx1NjViZFx1NmU3Zlx1OGJkN1x1NWMzOFx1ODY3''@;'; put 'put ''MVx1NTM0MVx1NzdmM1x1NjJmZVx1NjVmNlx1NGVjMFx1OThkZlx1ODY4MFx1NWI5ZVx1OGJjNlx1NTNmMlx1NzdlMlx1NGY3Zlx1NWM0ZVx1OWE3Nlx1NTljYlx1NWYwZlx1NzkzYVx1NThlYlx1NGUxNlx1NjdmZlx1NGU4Ylx1NjJlZFx1OGE5M1x1OTAxZFx1NTJiZlx1NjYyZlx1NTVkY1x1''@;'; put 'put ''NTY2Y1x1OTAwMlx1NGVkNVx1NGY4ZFx1OTFjYVx1OTk3MFx1NmMwZlx1NWUwMlx1NjA0M1x1NWJhNFx1ODljNlx1OGJkNVx1NjUzNlx1NjI0Ylx1OTk5Nlx1NWI4OFx1NWJmZlx1NjM4OFx1NTUyZVx1NTNkN1x1NzYyNlx1NTE3ZFx1ODUyY1x1NjdhMlx1NjhiM1x1NmI4YVx1NjI5Mlx1OGY5''@;'; put 'put ''M1x1NTNkNFx1ODIxMlx1NmRkMVx1NzU4Zlx1NGU2Nlx1OGQ0ZVx1NWI3MFx1NzE5Zlx1ODVhZlx1NjY5MVx1NjZkOVx1N2Y3Mlx1ODcwMFx1OWVjZFx1OWYyMFx1NWM1ZVx1NjcyZlx1OGZmMFx1NjgxMVx1Njc1Zlx1NjIwZFx1N2FkNlx1NTg4NVx1NWViNlx1NjU3MFx1NmYzMSJdLFsiY2I0''@;'; put 'put ''MCIsIlx1ODU4Mlx1ODU4M1x1ODU4Nlx1ODU4OCIsNiwiXHU4NTkwIiwxMCwiXHU4NTlkIiw2LCJcdTg1YTVcdTg1YTZcdTg1YTdcdTg1YTlcdTg1YWJcdTg1YWNcdTg1YWRcdTg1YjEiLDUsIlx1ODViOFx1ODViYSIsNiwiXHU4NWMyIiw2LCJcdTg1Y2EiLDQsIlx1ODVkMVx1ODVkMiJdLFsi''@;'; put 'put ''Y2I4MCIsIlx1ODVkNFx1ODVkNiIsNSwiXHU4NWRkIiw2LCJcdTg1ZTVcdTg1ZTZcdTg1ZTdcdTg1ZThcdTg1ZWEiLDE0LCJcdTYwNTVcdTUyMzdcdTgwMGRcdTY0NTRcdTg4NzBcdTc1MjlcdTVlMDVcdTY4MTNcdTYyZjRcdTk3MWNcdTUzY2NcdTcyM2RcdThjMDFcdTZjMzRcdTc3NjFcdTdh''@;'; put 'put ''MGVcdTU0MmVcdTc3YWNcdTk4N2FcdTgyMWNcdThiZjRcdTc4NTVcdTY3MTRcdTcwYzFcdTY1YWZcdTY0OTVcdTU2MzZcdTYwMWRcdTc5YzFcdTUzZjhcdTRlMWRcdTZiN2JcdTgwODZcdTViZmFcdTU1ZTNcdTU2ZGJcdTRmM2FcdTRmM2NcdTk5NzJcdTVkZjNcdTY3N2VcdTgwMzhcdTYwMDJc''@;'; put 'put ''dTk4ODJcdTkwMDFcdTViOGJcdThiYmNcdThiZjVcdTY0MWNcdTgyNThcdTY0ZGVcdTU1ZmRcdTgyY2ZcdTkxNjVcdTRmZDdcdTdkMjBcdTkwMWZcdTdjOWZcdTUwZjNcdTU4NTFcdTZlYWZcdTViYmZcdThiYzlcdTgwODNcdTkxNzhcdTg0OWNcdTdiOTdcdTg2N2RcdTk2OGJcdTk2OGZcdTdl''@;'; put 'put ''ZTVcdTlhZDNcdTc4OGVcdTVjODFcdTdhNTdcdTkwNDJcdTk2YTdcdTc5NWZcdTViNTlcdTYzNWZcdTdiMGJcdTg0ZDFcdTY4YWRcdTU1MDZcdTdmMjlcdTc0MTBcdTdkMjJcdTk1MDFcdTYyNDBcdTU4NGNcdTRlZDZcdTViODNcdTU5NzlcdTU4NTQiXSxbImNjNDAiLCJcdTg1ZjlcdTg1ZmFc''@;'; put 'put ''dTg1ZmNcdTg1ZmRcdTg1ZmVcdTg2MDAiLDQsIlx1ODYwNiIsMTAsIlx1ODYxMlx1ODYxM1x1ODYxNFx1ODYxNVx1ODYxNyIsMTUsIlx1ODYyOFx1ODYyYSIsMTMsIlx1ODYzOVx1ODYzYVx1ODYzYlx1ODYzZFx1ODYzZVx1ODYzZlx1ODY0MCJdLFsiY2M4MCIsIlx1ODY0MSIsMTEsIlx1ODY1''@;'; put 'put ''Mlx1ODY1M1x1ODY1NSIsNCwiXHU4NjViXHU4NjVjXHU4NjVkXHU4NjVmXHU4NjYwXHU4NjYxXHU4NjYzIiw3LCJcdTczNmRcdTYzMWVcdThlNGJcdThlMGZcdTgwY2VcdTgyZDRcdTYyYWNcdTUzZjBcdTZjZjBcdTkxNWVcdTU5MmFcdTYwMDFcdTZjNzBcdTU3NGRcdTY0NGFcdThkMmFcdTc2''@;'; put 'put ''MmJcdTZlZTlcdTU3NWJcdTZhODBcdTc1ZjBcdTZmNmRcdThjMmRcdThjMDhcdTU3NjZcdTZiZWZcdTg4OTJcdTc4YjNcdTYzYTJcdTUzZjlcdTcwYWRcdTZjNjRcdTU4NThcdTY0MmFcdTU4MDJcdTY4ZTBcdTgxOWJcdTU1MTBcdTdjZDZcdTUwMThcdThlYmFcdTZkY2NcdThkOWZcdTcwZWJc''@;'; put 'put ''dTYzOGZcdTZkOWJcdTZlZDRcdTdlZTZcdTg0MDRcdTY4NDNcdTkwMDNcdTZkZDhcdTk2NzZcdThiYThcdTU5NTdcdTcyNzlcdTg1ZTRcdTgxN2VcdTc1YmNcdThhOGFcdTY4YWZcdTUyNTRcdThlMjJcdTk1MTFcdTYzZDBcdTk4OThcdThlNDRcdTU1N2NcdTRmNTNcdTY2ZmZcdTU2OGZcdTYw''@;'; put 'put ''ZDVcdTZkOTVcdTUyNDNcdTVjNDlcdTU5MjlcdTZkZmJcdTU4NmJcdTc1MzBcdTc1MWNcdTYwNmNcdTgyMTRcdTgxNDZcdTYzMTFcdTY3NjFcdThmZTJcdTc3M2FcdThkZjNcdThkMzRcdTk0YzFcdTVlMTZcdTUzODVcdTU0MmNcdTcwYzMiXSxbImNkNDAiLCJcdTg2NmRcdTg2NmZcdTg2NzBc''@;'; put 'put ''dTg2NzIiLDYsIlx1ODY4MyIsNiwiXHU4NjhlIiw0LCJcdTg2OTRcdTg2OTYiLDUsIlx1ODY5ZSIsNCwiXHU4NmE1XHU4NmE2XHU4NmFiXHU4NmFkXHU4NmFlXHU4NmIyXHU4NmIzXHU4NmI3XHU4NmI4XHU4NmI5XHU4NmJiIiw0LCJcdTg2YzFcdTg2YzJcdTg2YzNcdTg2YzVcdTg2YzhcdTg2''@;'; put 'put ''Y2NcdTg2Y2RcdTg2ZDJcdTg2ZDNcdTg2ZDVcdTg2ZDZcdTg2ZDdcdTg2ZGFcdTg2ZGMiXSxbImNkODAiLCJcdTg2ZGRcdTg2ZTBcdTg2ZTFcdTg2ZTJcdTg2ZTNcdTg2ZTVcdTg2ZTZcdTg2ZTdcdTg2ZThcdTg2ZWFcdTg2ZWJcdTg2ZWNcdTg2ZWZcdTg2ZjVcdTg2ZjZcdTg2ZjdcdTg2ZmFc''@;'; put 'put ''dTg2ZmJcdTg2ZmNcdTg2ZmRcdTg2ZmZcdTg3MDFcdTg3MDRcdTg3MDVcdTg3MDZcdTg3MGJcdTg3MGNcdTg3MGVcdTg3MGZcdTg3MTBcdTg3MTFcdTg3MTRcdTg3MTZcdTZjNDBcdTVlZjdcdTUwNWNcdTRlYWRcdTVlYWRcdTYzM2FcdTgyNDdcdTkwMWFcdTY4NTBcdTkxNmVcdTc3YjNcdTU0''@;'; put 'put ''MGNcdTk0ZGNcdTVmNjRcdTdhZTVcdTY4NzZcdTYzNDVcdTdiNTJcdTdlZGZcdTc1ZGJcdTUwNzdcdTYyOTVcdTU5MzRcdTkwMGZcdTUxZjhcdTc5YzNcdTdhODFcdTU2ZmVcdTVmOTJcdTkwMTRcdTZkODJcdTVjNjBcdTU3MWZcdTU0MTBcdTUxNTRcdTZlNGRcdTU2ZTJcdTYzYThcdTk4OTNc''@;'; put 'put ''dTgxN2ZcdTg3MTVcdTg5MmFcdTkwMDBcdTU0MWVcdTVjNmZcdTgxYzBcdTYyZDZcdTYyNThcdTgxMzFcdTllMzVcdTk2NDBcdTlhNmVcdTlhN2NcdTY5MmRcdTU5YTVcdTYyZDNcdTU1M2VcdTYzMTZcdTU0YzdcdTg2ZDlcdTZkM2NcdTVhMDNcdTc0ZTZcdTg4OWNcdTZiNmFcdTU5MTZcdThj''@;'; put 'put ''NGNcdTVmMmZcdTZlN2VcdTczYTlcdTk4N2RcdTRlMzhcdTcwZjdcdTViOGNcdTc4OTdcdTYzM2RcdTY2NWFcdTc2OTZcdTYwY2JcdTViOWJcdTVhNDlcdTRlMDdcdTgxNTVcdTZjNmFcdTczOGJcdTRlYTFcdTY3ODlcdTdmNTFcdTVmODBcdTY1ZmFcdTY3MWJcdTVmZDhcdTU5ODRcdTVhMDEi''@;'; put 'put ''XSxbImNlNDAiLCJcdTg3MTlcdTg3MWJcdTg3MWRcdTg3MWZcdTg3MjBcdTg3MjRcdTg3MjZcdTg3MjdcdTg3MjhcdTg3MmFcdTg3MmJcdTg3MmNcdTg3MmRcdTg3MmZcdTg3MzBcdTg3MzJcdTg3MzNcdTg3MzVcdTg3MzZcdTg3MzhcdTg3MzlcdTg3M2FcdTg3M2NcdTg3M2RcdTg3NDAiLDYs''@;'; put 'put ''Ilx1ODc0YVx1ODc0Ylx1ODc0ZFx1ODc0Zlx1ODc1MFx1ODc1MVx1ODc1Mlx1ODc1NFx1ODc1NVx1ODc1Nlx1ODc1OFx1ODc1YSIsNSwiXHU4NzYxXHU4NzYyXHU4NzY2Iiw3LCJcdTg3NmZcdTg3NzFcdTg3NzJcdTg3NzNcdTg3NzUiXSxbImNlODAiLCJcdTg3NzdcdTg3NzhcdTg3NzlcdTg3''@;'; put 'put ''N2FcdTg3N2ZcdTg3ODBcdTg3ODFcdTg3ODRcdTg3ODZcdTg3ODdcdTg3ODlcdTg3OGFcdTg3OGNcdTg3OGUiLDQsIlx1ODc5NFx1ODc5NVx1ODc5Nlx1ODc5OCIsNiwiXHU4N2EwIiw0LCJcdTVkY2RcdTVmYWVcdTUzNzFcdTk3ZTZcdThmZGRcdTY4NDVcdTU2ZjRcdTU1MmZcdTYwZGZcdTRl''@;'; put 'put ''M2FcdTZmNGRcdTdlZjRcdTgyYzdcdTg0MGVcdTU5ZDRcdTRmMWZcdTRmMmFcdTVjM2VcdTdlYWNcdTY3MmFcdTg1MWFcdTU0NzNcdTc1NGZcdTgwYzNcdTU1ODJcdTliNGZcdTRmNGRcdTZlMmRcdThjMTNcdTVjMDlcdTYxNzBcdTUzNmJcdTc2MWZcdTZlMjlcdTg2OGFcdTY1ODdcdTk1ZmJc''@;'; put 'put ''dTdlYjlcdTU0M2JcdTdhMzNcdTdkMGFcdTk1ZWVcdTU1ZTFcdTdmYzFcdTc0ZWVcdTYzMWRcdTg3MTdcdTZkYTFcdTdhOWRcdTYyMTFcdTY1YTFcdTUzNjdcdTYzZTFcdTZjODNcdTVkZWJcdTU0NWNcdTk0YThcdTRlNGNcdTZjNjFcdThiZWNcdTVjNGJcdTY1ZTBcdTgyOWNcdTY4YTdcdTU0''@;'; put 'put ''M2VcdTU0MzRcdTZiY2JcdTZiNjZcdTRlOTRcdTYzNDJcdTUzNDhcdTgyMWVcdTRmMGRcdTRmYWVcdTU3NWVcdTYyMGFcdTk2ZmVcdTY2NjRcdTcyNjlcdTUyZmZcdTUyYTFcdTYwOWZcdThiZWZcdTY2MTRcdTcxOTlcdTY3OTBcdTg5N2ZcdTc4NTJcdTc3ZmRcdTY2NzBcdTU2M2JcdTU0Mzhc''@;'; put 'put ''dTk1MjFcdTcyN2EiXSxbImNmNDAiLCJcdTg3YTVcdTg3YTZcdTg3YTdcdTg3YTlcdTg3YWFcdTg3YWVcdTg3YjBcdTg3YjFcdTg3YjJcdTg3YjRcdTg3YjZcdTg3YjdcdTg3YjhcdTg3YjlcdTg3YmJcdTg3YmNcdTg3YmVcdTg3YmZcdTg3YzEiLDQsIlx1ODdjN1x1ODdjOFx1ODdjOVx1ODdj''@;'; put 'put ''YyIsNCwiXHU4N2Q0Iiw2LCJcdTg3ZGNcdTg3ZGRcdTg3ZGVcdTg3ZGZcdTg3ZTFcdTg3ZTJcdTg3ZTNcdTg3ZTRcdTg3ZTZcdTg3ZTdcdTg3ZThcdTg3ZTlcdTg3ZWJcdTg3ZWNcdTg3ZWRcdTg3ZWYiLDldLFsiY2Y4MCIsIlx1ODdmYVx1ODdmYlx1ODdmY1x1ODdmZFx1ODdmZlx1ODgwMFx1''@;'; put 'put ''ODgwMVx1ODgwMlx1ODgwNCIsNSwiXHU4ODBiIiw3LCJcdTg4MTRcdTg4MTdcdTg4MThcdTg4MTlcdTg4MWFcdTg4MWMiLDQsIlx1ODgyM1x1N2EwMFx1NjA2Zlx1NWUwY1x1NjA4OVx1ODE5ZFx1NTkxNVx1NjBkY1x1NzE4NFx1NzBlZlx1NmVhYVx1NmM1MFx1NzI4MFx1NmE4NFx1ODhhZFx1''@;'; put 'put ''NWUyZFx1NGU2MFx1NWFiM1x1NTU5Y1x1OTRlM1x1NmQxN1x1N2NmYlx1OTY5OVx1NjIwZlx1N2VjNlx1Nzc4ZVx1ODY3ZVx1NTMyM1x1OTcxZVx1OGY5Nlx1NjY4N1x1NWNlMVx1NGZhMFx1NzJlZFx1NGUwYlx1NTNhNlx1NTkwZlx1NTQxM1x1NjM4MFx1OTUyOFx1NTE0OFx1NGVkOVx1OWM5''@;'; put 'put ''Y1x1N2VhNFx1NTRiOFx1OGQyNFx1ODg1NFx1ODIzN1x1OTVmMlx1NmQ4ZVx1NWYyNlx1NWFjY1x1NjYzZVx1OTY2OVx1NzNiMFx1NzMyZVx1NTNiZlx1ODE3YVx1OTk4NVx1N2ZhMVx1NWJhYVx1OTY3N1x1OTY1MFx1N2ViZlx1NzZmOFx1NTNhMlx1OTU3Nlx1OTk5OVx1N2JiMVx1ODk0NFx1''@;'; put 'put ''NmU1OFx1NGU2MVx1N2ZkNFx1Nzk2NVx1OGJlNlx1NjBmM1x1NTRjZFx1NGVhYlx1OTg3OVx1NWRmN1x1NmE2MVx1NTBjZlx1NTQxMVx1OGM2MVx1ODQyN1x1Nzg1ZFx1OTcwNFx1NTI0YVx1NTRlZVx1NTZhM1x1OTUwMFx1NmQ4OFx1NWJiNVx1NmRjNlx1NjY1MyJdLFsiZDA0MCIsIlx1ODgy''@;'; put 'put ''NCIsMTMsIlx1ODgzMyIsNSwiXHU4ODNhXHU4ODNiXHU4ODNkXHU4ODNlXHU4ODNmXHU4ODQxXHU4ODQyXHU4ODQzXHU4ODQ2Iiw1LCJcdTg4NGUiLDUsIlx1ODg1NVx1ODg1Nlx1ODg1OFx1ODg1YSIsNiwiXHU4ODY2XHU4ODY3XHU4ODZhXHU4ODZkXHU4ODZmXHU4ODcxXHU4ODczXHU4ODc0''@;'; put 'put ''XHU4ODc1XHU4ODc2XHU4ODc4XHU4ODc5XHU4ODdhIl0sWyJkMDgwIiwiXHU4ODdiXHU4ODdjXHU4ODgwXHU4ODgzXHU4ODg2XHU4ODg3XHU4ODg5XHU4ODhhXHU4ODhjXHU4ODhlXHU4ODhmXHU4ODkwXHU4ODkxXHU4ODkzXHU4ODk0XHU4ODk1XHU4ODk3Iiw0LCJcdTg4OWQiLDQsIlx1ODhh''@;'; put 'put ''M1x1ODhhNSIsNSwiXHU1YzBmXHU1YjVkXHU2ODIxXHU4MDk2XHU1NTc4XHU3YjExXHU2NTQ4XHU2OTU0XHU0ZTliXHU2YjQ3XHU4NzRlXHU5NzhiXHU1MzRmXHU2MzFmXHU2NDNhXHU5MGFhXHU2NTljXHU4MGMxXHU4YzEwXHU1MTk5XHU2OGIwXHU1Mzc4XHU4N2Y5XHU2MWM4XHU2Y2M0XHU2''@;'; put 'put ''Y2ZiXHU4YzIyXHU1YzUxXHU4NWFhXHU4MmFmXHU5NTBjXHU2YjIzXHU4ZjliXHU2NWIwXHU1ZmZiXHU1ZmMzXHU0ZmUxXHU4ODQ1XHU2NjFmXHU4MTY1XHU3MzI5XHU2MGZhXHU1MTc0XHU1MjExXHU1NzhiXHU1ZjYyXHU5MGEyXHU4ODRjXHU5MTkyXHU1ZTc4XHU2NzRmXHU2MDI3XHU1OWQz''@;'; put 'put ''XHU1MTQ0XHU1MWY2XHU4MGY4XHU1MzA4XHU2Yzc5XHU5NmM0XHU3MThhXHU0ZjExXHU0ZmVlXHU3ZjllXHU2NzNkXHU1NWM1XHU5NTA4XHU3OWMwXHU4ODk2XHU3ZWUzXHU1ODlmXHU2MjBjXHU5NzAwXHU4NjVhXHU1NjE4XHU5ODdiXHU1ZjkwXHU4YmI4XHU4NGM0XHU5MTU3XHU1M2Q5XHU2''@;'; put 'put ''NWVkXHU1ZThmXHU3NTVjXHU2MDY0XHU3ZDZlXHU1YTdmXHU3ZWVhXHU3ZWVkXHU4ZjY5XHU1NWE3XHU1YmEzXHU2MGFjXHU2NWNiXHU3Mzg0Il0sWyJkMTQwIiwiXHU4OGFjXHU4OGFlXHU4OGFmXHU4OGIwXHU4OGIyIiw0LCJcdTg4YjhcdTg4YjlcdTg4YmFcdTg4YmJcdTg4YmRcdTg4YmVc''@;'; put 'put ''dTg4YmZcdTg4YzBcdTg4YzNcdTg4YzRcdTg4YzdcdTg4YzhcdTg4Y2FcdTg4Y2JcdTg4Y2NcdTg4Y2RcdTg4Y2ZcdTg4ZDBcdTg4ZDFcdTg4ZDNcdTg4ZDZcdTg4ZDdcdTg4ZGEiLDQsIlx1ODhlMFx1ODhlMVx1ODhlNlx1ODhlN1x1ODhlOSIsNiwiXHU4OGYyXHU4OGY1XHU4OGY2XHU4OGY3''@;'; put 'put ''XHU4OGZhXHU4OGZiXHU4OGZkXHU4OGZmXHU4OTAwXHU4OTAxXHU4OTAzIiw1XSxbImQxODAiLCJcdTg5MDlcdTg5MGIiLDQsIlx1ODkxMVx1ODkxNCIsNCwiXHU4OTFjIiw0LCJcdTg5MjJcdTg5MjNcdTg5MjRcdTg5MjZcdTg5MjdcdTg5MjhcdTg5MjlcdTg5MmNcdTg5MmRcdTg5MmVcdTg5''@;'; put 'put ''MmZcdTg5MzFcdTg5MzJcdTg5MzNcdTg5MzVcdTg5MzdcdTkwMDlcdTc2NjNcdTc3MjlcdTdlZGFcdTk3NzRcdTg1OWJcdTViNjZcdTdhNzRcdTk2ZWFcdTg4NDBcdTUyY2JcdTcxOGZcdTVmYWFcdTY1ZWNcdThiZTJcdTViZmJcdTlhNmZcdTVkZTFcdTZiODlcdTZjNWJcdThiYWRcdThiYWZc''@;'; put 'put ''dTkwMGFcdThmYzVcdTUzOGJcdTYyYmNcdTllMjZcdTllMmRcdTU0NDBcdTRlMmJcdTgyYmRcdTcyNTlcdTg2OWNcdTVkMTZcdTg4NTlcdTZkYWZcdTk2YzVcdTU0ZDFcdTRlOWFcdThiYjZcdTcxMDlcdTU0YmRcdTk2MDlcdTcwZGZcdTZkZjlcdTc2ZDBcdTRlMjVcdTc4MTRcdTg3MTJcdTVj''@;'; put 'put ''YTlcdTVlZjZcdThhMDBcdTk4OWNcdTk2MGVcdTcwOGVcdTZjYmZcdTU5NDRcdTYzYTlcdTc3M2NcdTg4NGRcdTZmMTRcdTgyNzNcdTU4MzBcdTcxZDVcdTUzOGNcdTc4MWFcdTk2YzFcdTU1MDFcdTVmNjZcdTcxMzBcdTViYjRcdThjMWFcdTlhOGNcdTZiODNcdTU5MmVcdTllMmZcdTc5ZTdc''@;'; put 'put ''dTY3NjhcdTYyNmNcdTRmNmZcdTc1YTFcdTdmOGFcdTZkMGJcdTk2MzNcdTZjMjdcdTRlZjBcdTc1ZDJcdTUxN2JcdTY4MzdcdTZmM2VcdTkwODBcdTgxNzBcdTU5OTZcdTc0NzYiXSxbImQyNDAiLCJcdTg5MzgiLDgsIlx1ODk0Mlx1ODk0M1x1ODk0NSIsMjQsIlx1ODk2MCIsNSwiXHU4OTY3''@;'; put 'put ''IiwxOSwiXHU4OTdjIl0sWyJkMjgwIiwiXHU4OTdkXHU4OTdlXHU4OTgwXHU4OTgyXHU4OTg0XHU4OTg1XHU4OTg3IiwyNiwiXHU2NDQ3XHU1YzI3XHU5MDY1XHU3YTkxXHU4YzIzXHU1OWRhXHU1NGFjXHU4MjAwXHU4MzZmXHU4OTgxXHU4MDAwXHU2OTMwXHU1NjRlXHU4MDM2XHU3MjM3XHU5''@;'; put 'put ''MWNlXHU1MWI2XHU0ZTVmXHU5ODc1XHU2Mzk2XHU0ZTFhXHU1M2Y2XHU2NmYzXHU4MTRiXHU1OTFjXHU2ZGIyXHU0ZTAwXHU1OGY5XHU1MzNiXHU2M2Q2XHU5NGYxXHU0ZjlkXHU0ZjBhXHU4ODYzXHU5ODkwXHU1OTM3XHU5MDU3XHU3OWZiXHU0ZWVhXHU4MGYwXHU3NTkxXHU2YzgyXHU1Yjlj''@;'; put 'put ''XHU1OWU4XHU1ZjVkXHU2OTA1XHU4NjgxXHU1MDFhXHU1ZGYyXHU0ZTU5XHU3N2UzXHU0ZWU1XHU4MjdhXHU2MjkxXHU2NjEzXHU5MDkxXHU1Yzc5XHU0ZWJmXHU1Zjc5XHU4MWM2XHU5MDM4XHU4MDg0XHU3NWFiXHU0ZWE2XHU4OGQ0XHU2MTBmXHU2YmM1XHU1ZmM2XHU0ZTQ5XHU3NmNhXHU2''@;'; put 'put ''ZWEyXHU4YmUzXHU4YmFlXHU4YzBhXHU4YmQxXHU1ZjAyXHU3ZmZjXHU3ZmNjXHU3ZWNlXHU4MzM1XHU4MzZiXHU1NmUwXHU2YmI3XHU5N2YzXHU5NjM0XHU1OWZiXHU1NDFmXHU5NGY2XHU2ZGViXHU1YmM1XHU5OTZlXHU1YzM5XHU1ZjE1XHU5NjkwIl0sWyJkMzQwIiwiXHU4OWEyIiwzMCwi''@;'; put 'put ''XHU4OWMzXHU4OWNkXHU4OWQzXHU4OWQ0XHU4OWQ1XHU4OWQ3XHU4OWQ4XHU4OWQ5XHU4OWRiXHU4OWRkXHU4OWRmXHU4OWUwXHU4OWUxXHU4OWUyXHU4OWU0XHU4OWU3XHU4OWU4XHU4OWU5XHU4OWVhXHU4OWVjXHU4OWVkXHU4OWVlXHU4OWYwXHU4OWYxXHU4OWYyXHU4OWY0Iiw2XSxbImQz''@;'; put 'put ''ODAiLCJcdTg5ZmIiLDQsIlx1OGEwMSIsNSwiXHU4YTA4IiwyMSwiXHU1MzcwXHU4MmYxXHU2YTMxXHU1YTc0XHU5ZTcwXHU1ZTk0XHU3ZjI4XHU4M2I5XHU4NDI0XHU4NDI1XHU4MzY3XHU4NzQ3XHU4ZmNlXHU4ZDYyXHU3NmM4XHU1ZjcxXHU5ODk2XHU3ODZjXHU2NjIwXHU1NGRmXHU2MmU1''@;'; put 'put ''XHU0ZjYzXHU4MWMzXHU3NWM4XHU1ZWI4XHU5NmNkXHU4ZTBhXHU4NmY5XHU1NDhmXHU2Y2YzXHU2ZDhjXHU2YzM4XHU2MDdmXHU1MmM3XHU3NTI4XHU1ZTdkXHU0ZjE4XHU2MGEwXHU1ZmU3XHU1YzI0XHU3NTMxXHU5MGFlXHU5NGMwXHU3MmI5XHU2Y2I5XHU2ZTM4XHU5MTQ5XHU2NzA5XHU1''@;'; put 'put ''M2NiXHU1M2YzXHU0ZjUxXHU5MWM5XHU4YmYxXHU1M2M4XHU1ZTdjXHU4ZmMyXHU2ZGU0XHU0ZThlXHU3NmMyXHU2OTg2XHU4NjVlXHU2MTFhXHU4MjA2XHU0ZjU5XHU0ZmRlXHU5MDNlXHU5YzdjXHU2MTA5XHU2ZTFkXHU2ZTE0XHU5Njg1XHU0ZTg4XHU1YTMxXHU5NmU4XHU0ZTBlXHU1Yzdm''@;'; put 'put ''XHU3OWI5XHU1Yjg3XHU4YmVkXHU3ZmJkXHU3Mzg5XHU1N2RmXHU4MjhiXHU5MGMxXHU1NDAxXHU5MDQ3XHU1NWJiXHU1Y2VhXHU1ZmExXHU2MTA4XHU2YjMyXHU3MmYxXHU4MGIyXHU4YTg5Il0sWyJkNDQwIiwiXHU4YTFlIiwzMSwiXHU4YTNmIiw4LCJcdThhNDkiLDIxXSxbImQ0ODAiLCJc''@;'; put 'put ''dThhNWYiLDI1LCJcdThhN2EiLDYsIlx1NmQ3NFx1NWJkM1x1ODhkNVx1OTg4NFx1OGM2Ylx1OWE2ZFx1OWUzM1x1NmUwYVx1NTFhNFx1NTE0M1x1NTdhM1x1ODg4MVx1NTM5Zlx1NjNmNFx1OGY5NVx1NTZlZFx1NTQ1OFx1NTcwNlx1NzMzZlx1NmU5MFx1N2YxOFx1OGZkY1x1ODJkMVx1NjEz''@;'; put 'put ''Zlx1NjAyOFx1OTY2Mlx1NjZmMFx1N2VhNlx1OGQ4YVx1OGRjM1x1OTRhNVx1NWNiM1x1N2NhNFx1NjcwOFx1NjBhNlx1OTYwNVx1ODAxOFx1NGU5MVx1OTBlN1x1NTMwMFx1OTY2OFx1NTE0MVx1OGZkMFx1ODU3NFx1OTE1ZFx1NjY1NVx1OTdmNVx1NWI1NVx1NTMxZFx1NzgzOFx1Njc0Mlx1''@;'; put 'put ''NjgzZFx1NTRjOVx1NzA3ZVx1NWJiMFx1OGY3ZFx1NTE4ZFx1NTcyOFx1NTRiMVx1NjUxMlx1NjY4Mlx1OGQ1ZVx1OGQ0M1x1ODEwZlx1ODQ2Y1x1OTA2ZFx1N2NkZlx1NTFmZlx1ODVmYlx1NjdhM1x1NjVlOVx1NmZhMVx1ODZhNFx1OGU4MVx1NTY2YVx1OTAyMFx1NzY4Mlx1NzA3Nlx1NzFl''@;'; put 'put ''NVx1OGQyM1x1NjJlOVx1NTIxOVx1NmNmZFx1OGQzY1x1NjAwZVx1NTg5ZVx1NjE4ZVx1NjZmZVx1OGQ2MFx1NjI0ZVx1NTViM1x1NmUyM1x1NjcyZFx1OGY2NyJdLFsiZDU0MCIsIlx1OGE4MSIsNywiXHU4YThiIiw3LCJcdThhOTQiLDQ2XSxbImQ1ODAiLCJcdThhYzMiLDMyLCJcdTk0ZTFc''@;'; put 'put ''dTk1ZjhcdTc3MjhcdTY4MDVcdTY5YThcdTU0OGJcdTRlNGRcdTcwYjhcdThiYzhcdTY0NThcdTY1OGJcdTViODVcdTdhODRcdTUwM2FcdTViZThcdTc3YmJcdTZiZTFcdThhNzlcdTdjOThcdTZjYmVcdTc2Y2ZcdTY1YTlcdThmOTdcdTVkMmRcdTVjNTVcdTg2MzhcdTY4MDhcdTUzNjBcdTYy''@;'; put 'put ''MThcdTdhZDlcdTZlNWJcdTdlZmRcdTZhMWZcdTdhZTBcdTVmNzBcdTZmMzNcdTVmMjBcdTYzOGNcdTZkYThcdTY3NTZcdTRlMDhcdTVlMTBcdThkMjZcdTRlZDdcdTgwYzBcdTc2MzRcdTk2OWNcdTYyZGJcdTY2MmRcdTYyN2VcdTZjYmNcdThkNzVcdTcxNjdcdTdmNjlcdTUxNDZcdTgwODdc''@;'; put 'put ''dTUzZWNcdTkwNmVcdTYyOThcdTU0ZjJcdTg2ZjBcdThmOTlcdTgwMDVcdTk1MTdcdTg1MTdcdThmZDlcdTZkNTlcdTczY2RcdTY1OWZcdTc3MWZcdTc1MDRcdTc4MjdcdTgxZmJcdThkMWVcdTk0ODhcdTRmYTZcdTY3OTVcdTc1YjlcdThiY2FcdTk3MDdcdTYzMmZcdTk1NDdcdTk2MzVcdTg0''@;'; put 'put ''YjhcdTYzMjNcdTc3NDFcdTVmODFcdTcyZjBcdTRlODlcdTYwMTRcdTY1NzRcdTYyZWZcdTZiNjNcdTY1M2YiXSxbImQ2NDAiLCJcdThhZTQiLDM0LCJcdThiMDgiLDI3XSxbImQ2ODAiLCJcdThiMjRcdThiMjVcdThiMjciLDMwLCJcdTVlMjdcdTc1YzdcdTkwZDFcdThiYzFcdTgyOWRcdTY3''@;'; put 'put ''OWRcdTY1MmZcdTU0MzFcdTg3MThcdTc3ZTVcdTgwYTJcdTgxMDJcdTZjNDFcdTRlNGJcdTdlYzdcdTgwNGNcdTc2ZjRcdTY5MGRcdTZiOTZcdTYyNjdcdTUwM2NcdTRmODRcdTU3NDBcdTYzMDdcdTZiNjJcdThkYmVcdTUzZWFcdTY1ZThcdTdlYjhcdTVmZDdcdTYzMWFcdTYzYjdcdTgxZjNc''@;'; put 'put ''dTgxZjRcdTdmNmVcdTVlMWNcdTVjZDlcdTUyMzZcdTY2N2FcdTc5ZTlcdTdhMWFcdThkMjhcdTcwOTlcdTc1ZDRcdTZlZGVcdTZjYmJcdTdhOTJcdTRlMmRcdTc2YzVcdTVmZTBcdTk0OWZcdTg4NzdcdTdlYzhcdTc5Y2RcdTgwYmZcdTkxY2RcdTRlZjJcdTRmMTdcdTgyMWZcdTU0NjhcdTVk''@;'; put 'put ''ZGVcdTZkMzJcdThiY2NcdTdjYTVcdThmNzRcdTgwOThcdTVlMWFcdTU0OTJcdTc2YjFcdTViOTlcdTY2M2NcdTlhYTRcdTczZTBcdTY4MmFcdTg2ZGJcdTY3MzFcdTczMmFcdThiZjhcdThiZGJcdTkwMTBcdTdhZjlcdTcwZGJcdTcxNmVcdTYyYzRcdTc3YTlcdTU2MzFcdTRlM2JcdTg0NTdc''@;'; put 'put ''dTY3ZjFcdTUyYTlcdTg2YzBcdThkMmVcdTk0ZjhcdTdiNTEiXSxbImQ3NDAiLCJcdThiNDYiLDMxLCJcdThiNjciLDQsIlx1OGI2ZCIsMjVdLFsiZDc4MCIsIlx1OGI4NyIsMjQsIlx1OGJhY1x1OGJiMVx1OGJiYlx1OGJjN1x1OGJkMFx1OGJlYVx1OGMwOVx1OGMxZVx1NGY0Zlx1NmNlOFx1''@;'; put 'put ''Nzk1ZFx1OWE3Ylx1NjI5M1x1NzIyYVx1NjJmZFx1NGUxM1x1NzgxNlx1OGY2Y1x1NjRiMFx1OGQ1YVx1N2JjNlx1Njg2OVx1NWU4NFx1ODhjNVx1NTk4Nlx1NjQ5ZVx1NThlZVx1NzJiNlx1NjkwZVx1OTUyNVx1OGZmZFx1OGQ1OFx1NTc2MFx1N2YwMFx1OGMwNlx1NTFjNlx1NjM0OVx1NjJk''@;'; put 'put ''OVx1NTM1M1x1Njg0Y1x1NzQyMlx1ODMwMVx1OTE0Y1x1NTU0NFx1Nzc0MFx1NzA3Y1x1NmQ0YVx1NTE3OVx1NTRhOFx1OGQ0NFx1NTlmZlx1NmVjYlx1NmRjNFx1NWI1Y1x1N2QyYlx1NGVkNFx1N2M3ZFx1NmVkM1x1NWI1MFx1ODFlYVx1NmUwZFx1NWI1N1x1OWIwM1x1NjhkNVx1OGUyYVx1''@;'; put 'put ''NWI5N1x1N2VmY1x1NjAzYlx1N2ViNVx1OTBiOVx1OGQ3MFx1NTk0Zlx1NjNjZFx1NzlkZlx1OGRiM1x1NTM1Mlx1NjVjZlx1Nzk1Nlx1OGJjNVx1OTYzYlx1N2VjNFx1OTRiYlx1N2U4Mlx1NTYzNFx1OTE4OVx1NjcwMFx1N2Y2YVx1NWMwYVx1OTA3NVx1NjYyOFx1NWRlNlx1NGY1MFx1Njdk''@;'; put 'put ''ZVx1NTA1YVx1NGY1Y1x1NTc1MFx1NWVhNyJdLFsiZDg0MCIsIlx1OGMzOCIsOCwiXHU4YzQyXHU4YzQzXHU4YzQ0XHU4YzQ1XHU4YzQ4XHU4YzRhXHU4YzRiXHU4YzRkIiw3LCJcdThjNTZcdThjNTdcdThjNThcdThjNTlcdThjNWIiLDUsIlx1OGM2MyIsNiwiXHU4YzZjIiw2LCJcdThjNzRc''@;'; put 'put ''dThjNzVcdThjNzZcdThjNzdcdThjN2IiLDYsIlx1OGM4M1x1OGM4NFx1OGM4Nlx1OGM4NyJdLFsiZDg4MCIsIlx1OGM4OFx1OGM4Ylx1OGM4ZCIsNiwiXHU4Yzk1XHU4Yzk2XHU4Yzk3XHU4Yzk5IiwyMCwiXHU0ZThkXHU0ZTBjXHU1MTQwXHU0ZTEwXHU1ZWZmXHU1MzQ1XHU0ZTE1XHU0ZTk4''@;'; put 'put ''XHU0ZTFlXHU5YjMyXHU1YjZjXHU1NjY5XHU0ZTI4XHU3OWJhXHU0ZTNmXHU1MzE1XHU0ZTQ3XHU1OTJkXHU3MjNiXHU1MzZlXHU2YzEwXHU1NmRmXHU4MGU0XHU5OTk3XHU2YmQzXHU3NzdlXHU5ZjE3XHU0ZTM2XHU0ZTlmXHU5ZjEwXHU0ZTVjXHU0ZTY5XHU0ZTkzXHU4Mjg4XHU1YjViXHU1''@;'; put 'put ''NTZjXHU1NjBmXHU0ZWM0XHU1MzhkXHU1MzlkXHU1M2EzXHU1M2E1XHU1M2FlXHU5NzY1XHU4ZDVkXHU1MzFhXHU1M2Y1XHU1MzI2XHU1MzJlXHU1MzNlXHU4ZDVjXHU1MzY2XHU1MzYzXHU1MjAyXHU1MjA4XHU1MjBlXHU1MjJkXHU1MjMzXHU1MjNmXHU1MjQwXHU1MjRjXHU1MjVlXHU1MjYx''@;'; put 'put ''XHU1MjVjXHU4NGFmXHU1MjdkXHU1MjgyXHU1MjgxXHU1MjkwXHU1MjkzXHU1MTgyXHU3ZjU0XHU0ZWJiXHU0ZWMzXHU0ZWM5XHU0ZWMyXHU0ZWU4XHU0ZWUxXHU0ZWViXHU0ZWRlXHU0ZjFiXHU0ZWYzXHU0ZjIyXHU0ZjY0XHU0ZWY1XHU0ZjI1XHU0ZjI3XHU0ZjA5XHU0ZjJiXHU0ZjVlXHU0''@;'; put 'put ''ZjY3XHU2NTM4XHU0ZjVhXHU0ZjVkIl0sWyJkOTQwIiwiXHU4Y2FlIiw2Ml0sWyJkOTgwIiwiXHU4Y2VkIiwzMiwiXHU0ZjVmXHU0ZjU3XHU0ZjMyXHU0ZjNkXHU0Zjc2XHU0Zjc0XHU0ZjkxXHU0Zjg5XHU0ZjgzXHU0ZjhmXHU0ZjdlXHU0ZjdiXHU0ZmFhXHU0ZjdjXHU0ZmFjXHU0Zjk0XHU0''@;'; put 'put ''ZmU2XHU0ZmU4XHU0ZmVhXHU0ZmM1XHU0ZmRhXHU0ZmUzXHU0ZmRjXHU0ZmQxXHU0ZmRmXHU0ZmY4XHU1MDI5XHU1MDRjXHU0ZmYzXHU1MDJjXHU1MDBmXHU1MDJlXHU1MDJkXHU0ZmZlXHU1MDFjXHU1MDBjXHU1MDI1XHU1MDI4XHU1MDdlXHU1MDQzXHU1MDU1XHU1MDQ4XHU1MDRlXHU1MDZj''@;'; put 'put ''XHU1MDdiXHU1MGE1XHU1MGE3XHU1MGE5XHU1MGJhXHU1MGQ2XHU1MTA2XHU1MGVkXHU1MGVjXHU1MGU2XHU1MGVlXHU1MTA3XHU1MTBiXHU0ZWRkXHU2YzNkXHU0ZjU4XHU0ZjY1XHU0ZmNlXHU5ZmEwXHU2YzQ2XHU3Yzc0XHU1MTZlXHU1ZGZkXHU5ZWM5XHU5OTk4XHU1MTgxXHU1OTE0XHU1''@;'; put 'put ''MmY5XHU1MzBkXHU4YTA3XHU1MzEwXHU1MWViXHU1OTE5XHU1MTU1XHU0ZWEwXHU1MTU2XHU0ZWIzXHU4ODZlXHU4OGE0XHU0ZWI1XHU4MTE0XHU4OGQyXHU3OTgwXHU1YjM0XHU4ODAzXHU3ZmI4XHU1MWFiXHU1MWIxXHU1MWJkXHU1MWJjIl0sWyJkYTQwIiwiXHU4ZDBlIiwxNCwiXHU4ZDIw''@;'; put 'put ''XHU4ZDUxXHU4ZDUyXHU4ZDU3XHU4ZDVmXHU4ZDY1XHU4ZDY4XHU4ZDY5XHU4ZDZhXHU4ZDZjXHU4ZDZlXHU4ZDZmXHU4ZDcxXHU4ZDcyXHU4ZDc4Iiw4LCJcdThkODJcdThkODNcdThkODZcdThkODdcdThkODhcdThkODlcdThkOGMiLDQsIlx1OGQ5Mlx1OGQ5M1x1OGQ5NSIsOSwiXHU4ZGEw''@;'; put 'put ''XHU4ZGExIl0sWyJkYTgwIiwiXHU4ZGEyXHU4ZGE0IiwxMiwiXHU4ZGIyXHU4ZGI2XHU4ZGI3XHU4ZGI5XHU4ZGJiXHU4ZGJkXHU4ZGMwXHU4ZGMxXHU4ZGMyXHU4ZGM1XHU4ZGM3XHU4ZGM4XHU4ZGM5XHU4ZGNhXHU4ZGNkXHU4ZGQwXHU4ZGQyXHU4ZGQzXHU4ZGQ0XHU1MWM3XHU1MTk2XHU1''@;'; put 'put ''MWEyXHU1MWE1XHU4YmEwXHU4YmE2XHU4YmE3XHU4YmFhXHU4YmI0XHU4YmI1XHU4YmI3XHU4YmMyXHU4YmMzXHU4YmNiXHU4YmNmXHU4YmNlXHU4YmQyXHU4YmQzXHU4YmQ0XHU4YmQ2XHU4YmQ4XHU4YmQ5XHU4YmRjXHU4YmRmXHU4YmUwXHU4YmU0XHU4YmU4XHU4YmU5XHU4YmVlXHU4YmYw''@;'; put 'put ''XHU4YmYzXHU4YmY2XHU4YmY5XHU4YmZjXHU4YmZmXHU4YzAwXHU4YzAyXHU4YzA0XHU4YzA3XHU4YzBjXHU4YzBmXHU4YzExXHU4YzEyXHU4YzE0XHU4YzE1XHU4YzE2XHU4YzE5XHU4YzFiXHU4YzE4XHU4YzFkXHU4YzFmXHU4YzIwXHU4YzIxXHU4YzI1XHU4YzI3XHU4YzJhXHU4YzJiXHU4''@;'; put 'put ''YzJlXHU4YzJmXHU4YzMyXHU4YzMzXHU4YzM1XHU4YzM2XHU1MzY5XHU1MzdhXHU5NjFkXHU5NjIyXHU5NjIxXHU5NjMxXHU5NjJhXHU5NjNkXHU5NjNjXHU5NjQyXHU5NjQ5XHU5NjU0XHU5NjVmXHU5NjY3XHU5NjZjXHU5NjcyXHU5Njc0XHU5Njg4XHU5NjhkXHU5Njk3XHU5NmIwXHU5MDk3''@;'; put 'put ''XHU5MDliXHU5MDlkXHU5MDk5XHU5MGFjXHU5MGExXHU5MGI0XHU5MGIzXHU5MGI2XHU5MGJhIl0sWyJkYjQwIiwiXHU4ZGQ1XHU4ZGQ4XHU4ZGQ5XHU4ZGRjXHU4ZGUwXHU4ZGUxXHU4ZGUyXHU4ZGU1XHU4ZGU2XHU4ZGU3XHU4ZGU5XHU4ZGVkXHU4ZGVlXHU4ZGYwXHU4ZGYxXHU4ZGYyXHU4''@;'; put 'put ''ZGY0XHU4ZGY2XHU4ZGZjXHU4ZGZlIiw2LCJcdThlMDZcdThlMDdcdThlMDhcdThlMGJcdThlMGRcdThlMGVcdThlMTBcdThlMTFcdThlMTJcdThlMTNcdThlMTUiLDcsIlx1OGUyMFx1OGUyMVx1OGUyNCIsNCwiXHU4ZTJiXHU4ZTJkXHU4ZTMwXHU4ZTMyXHU4ZTMzXHU4ZTM0XHU4ZTM2XHU4''@;'; put 'put ''ZTM3XHU4ZTM4XHU4ZTNiXHU4ZTNjXHU4ZTNlIl0sWyJkYjgwIiwiXHU4ZTNmXHU4ZTQzXHU4ZTQ1XHU4ZTQ2XHU4ZTRjIiw0LCJcdThlNTMiLDUsIlx1OGU1YSIsMTEsIlx1OGU2N1x1OGU2OFx1OGU2YVx1OGU2Ylx1OGU2ZVx1OGU3MVx1OTBiOFx1OTBiMFx1OTBjZlx1OTBjNVx1OTBiZVx1''@;'; put 'put ''OTBkMFx1OTBjNFx1OTBjN1x1OTBkM1x1OTBlNlx1OTBlMlx1OTBkY1x1OTBkN1x1OTBkYlx1OTBlYlx1OTBlZlx1OTBmZVx1OTEwNFx1OTEyMlx1OTExZVx1OTEyM1x1OTEzMVx1OTEyZlx1OTEzOVx1OTE0M1x1OTE0Nlx1NTIwZFx1NTk0Mlx1NTJhMlx1NTJhY1x1NTJhZFx1NTJiZVx1NTRm''@;'; put 'put ''Zlx1NTJkMFx1NTJkNlx1NTJmMFx1NTNkZlx1NzFlZVx1NzdjZFx1NWVmNFx1NTFmNVx1NTFmY1x1OWIyZlx1NTNiNlx1NWYwMVx1NzU1YVx1NWRlZlx1NTc0Y1x1NTdhOVx1NTdhMVx1NTg3ZVx1NThiY1x1NThjNVx1NThkMVx1NTcyOVx1NTcyY1x1NTcyYVx1NTczM1x1NTczOVx1NTcyZVx1''@;'; put 'put ''NTcyZlx1NTc1Y1x1NTczYlx1NTc0Mlx1NTc2OVx1NTc4NVx1NTc2Ylx1NTc4Nlx1NTc3Y1x1NTc3Ylx1NTc2OFx1NTc2ZFx1NTc3Nlx1NTc3M1x1NTdhZFx1NTdhNFx1NTc4Y1x1NTdiMlx1NTdjZlx1NTdhN1x1NTdiNFx1NTc5M1x1NTdhMFx1NTdkNVx1NTdkOFx1NTdkYVx1NTdkOVx1NTdk''@;'; put 'put ''Mlx1NTdiOFx1NTdmNFx1NTdlZlx1NTdmOFx1NTdlNFx1NTdkZCJdLFsiZGM0MCIsIlx1OGU3M1x1OGU3NVx1OGU3NyIsNCwiXHU4ZTdkXHU4ZTdlXHU4ZTgwXHU4ZTgyXHU4ZTgzXHU4ZTg0XHU4ZTg2XHU4ZTg4Iiw2LCJcdThlOTFcdThlOTJcdThlOTNcdThlOTUiLDYsIlx1OGU5ZFx1OGU5''@;'; put 'put ''ZiIsMTEsIlx1OGVhZFx1OGVhZVx1OGViMFx1OGViMVx1OGViMyIsNiwiXHU4ZWJiIiw3XSxbImRjODAiLCJcdThlYzMiLDEwLCJcdThlY2YiLDIxLCJcdTU4MGJcdTU4MGRcdTU3ZmRcdTU3ZWRcdTU4MDBcdTU4MWVcdTU4MTlcdTU4NDRcdTU4MjBcdTU4NjVcdTU4NmNcdTU4ODFcdTU4ODlc''@;'; put 'put ''dTU4OWFcdTU4ODBcdTk5YThcdTlmMTlcdTYxZmZcdTgyNzlcdTgyN2RcdTgyN2ZcdTgyOGZcdTgyOGFcdTgyYThcdTgyODRcdTgyOGVcdTgyOTFcdTgyOTdcdTgyOTlcdTgyYWJcdTgyYjhcdTgyYmVcdTgyYjBcdTgyYzhcdTgyY2FcdTgyZTNcdTgyOThcdTgyYjdcdTgyYWVcdTgyY2JcdTgy''@;'; put 'put ''Y2NcdTgyYzFcdTgyYTlcdTgyYjRcdTgyYTFcdTgyYWFcdTgyOWZcdTgyYzRcdTgyY2VcdTgyYTRcdTgyZTFcdTgzMDlcdTgyZjdcdTgyZTRcdTgzMGZcdTgzMDdcdTgyZGNcdTgyZjRcdTgyZDJcdTgyZDhcdTgzMGNcdTgyZmJcdTgyZDNcdTgzMTFcdTgzMWFcdTgzMDZcdTgzMTRcdTgzMTVc''@;'; put 'put ''dTgyZTBcdTgyZDVcdTgzMWNcdTgzNTFcdTgzNWJcdTgzNWNcdTgzMDhcdTgzOTJcdTgzM2NcdTgzMzRcdTgzMzFcdTgzOWJcdTgzNWVcdTgzMmZcdTgzNGZcdTgzNDdcdTgzNDNcdTgzNWZcdTgzNDBcdTgzMTdcdTgzNjBcdTgzMmRcdTgzM2FcdTgzMzNcdTgzNjZcdTgzNjUiXSxbImRkNDAi''@;'; put 'put ''LCJcdThlZTUiLDYyXSxbImRkODAiLCJcdThmMjQiLDMyLCJcdTgzNjhcdTgzMWJcdTgzNjlcdTgzNmNcdTgzNmFcdTgzNmRcdTgzNmVcdTgzYjBcdTgzNzhcdTgzYjNcdTgzYjRcdTgzYTBcdTgzYWFcdTgzOTNcdTgzOWNcdTgzODVcdTgzN2NcdTgzYjZcdTgzYTlcdTgzN2RcdTgzYjhcdTgz''@;'; put 'put ''N2JcdTgzOThcdTgzOWVcdTgzYThcdTgzYmFcdTgzYmNcdTgzYzFcdTg0MDFcdTgzZTVcdTgzZDhcdTU4MDdcdTg0MThcdTg0MGJcdTgzZGRcdTgzZmRcdTgzZDZcdTg0MWNcdTg0MzhcdTg0MTFcdTg0MDZcdTgzZDRcdTgzZGZcdTg0MGZcdTg0MDNcdTgzZjhcdTgzZjlcdTgzZWFcdTgzYzVc''@;'; put 'put ''dTgzYzBcdTg0MjZcdTgzZjBcdTgzZTFcdTg0NWNcdTg0NTFcdTg0NWFcdTg0NTlcdTg0NzNcdTg0ODdcdTg0ODhcdTg0N2FcdTg0ODlcdTg0NzhcdTg0M2NcdTg0NDZcdTg0NjlcdTg0NzZcdTg0OGNcdTg0OGVcdTg0MzFcdTg0NmRcdTg0YzFcdTg0Y2RcdTg0ZDBcdTg0ZTZcdTg0YmRcdTg0''@;'; put 'put ''ZDNcdTg0Y2FcdTg0YmZcdTg0YmFcdTg0ZTBcdTg0YTFcdTg0YjlcdTg0YjRcdTg0OTdcdTg0ZTVcdTg0ZTNcdTg1MGNcdTc1MGRcdTg1MzhcdTg0ZjBcdTg1MzlcdTg1MWZcdTg1M2EiXSxbImRlNDAiLCJcdThmNDUiLDMyLCJcdThmNmFcdThmODBcdThmOGNcdThmOTJcdThmOWRcdThmYTBc''@;'; put 'put ''dThmYTFcdThmYTJcdThmYTRcdThmYTVcdThmYTZcdThmYTdcdThmYWFcdThmYWNcdThmYWRcdThmYWVcdThmYWZcdThmYjJcdThmYjNcdThmYjRcdThmYjVcdThmYjdcdThmYjhcdThmYmFcdThmYmJcdThmYmNcdThmYmZcdThmYzBcdThmYzNcdThmYzYiXSxbImRlODAiLCJcdThmYzkiLDQs''@;'; put 'put ''Ilx1OGZjZlx1OGZkMlx1OGZkNlx1OGZkN1x1OGZkYVx1OGZlMFx1OGZlMVx1OGZlM1x1OGZlN1x1OGZlY1x1OGZlZlx1OGZmMVx1OGZmMlx1OGZmNFx1OGZmNVx1OGZmNlx1OGZmYVx1OGZmYlx1OGZmY1x1OGZmZVx1OGZmZlx1OTAwN1x1OTAwOFx1OTAwY1x1OTAwZVx1OTAxM1x1OTAxNVx1''@;'; put 'put ''OTAxOFx1ODU1Nlx1ODUzYlx1ODRmZlx1ODRmY1x1ODU1OVx1ODU0OFx1ODU2OFx1ODU2NFx1ODU1ZVx1ODU3YVx1NzdhMlx1ODU0M1x1ODU3Mlx1ODU3Ylx1ODVhNFx1ODVhOFx1ODU4N1x1ODU4Zlx1ODU3OVx1ODVhZVx1ODU5Y1x1ODU4NVx1ODViOVx1ODViN1x1ODViMFx1ODVkM1x1ODVj''@;'; put 'put ''MVx1ODVkY1x1ODVmZlx1ODYyN1x1ODYwNVx1ODYyOVx1ODYxNlx1ODYzY1x1NWVmZVx1NWYwOFx1NTkzY1x1NTk0MVx1ODAzN1x1NTk1NVx1NTk1YVx1NTk1OFx1NTMwZlx1NWMyMlx1NWMyNVx1NWMyY1x1NWMzNFx1NjI0Y1x1NjI2YVx1NjI5Zlx1NjJiYlx1NjJjYVx1NjJkYVx1NjJkN1x1''@;'; put 'put ''NjJlZVx1NjMyMlx1NjJmNlx1NjMzOVx1NjM0Ylx1NjM0M1x1NjNhZFx1NjNmNlx1NjM3MVx1NjM3YVx1NjM4ZVx1NjNiNFx1NjM2ZFx1NjNhY1x1NjM4YVx1NjM2OVx1NjNhZVx1NjNiY1x1NjNmMlx1NjNmOFx1NjNlMFx1NjNmZlx1NjNjNFx1NjNkZVx1NjNjZVx1NjQ1Mlx1NjNjNlx1NjNi''@;'; put 'put ''ZVx1NjQ0NVx1NjQ0MVx1NjQwYlx1NjQxYlx1NjQyMFx1NjQwY1x1NjQyNlx1NjQyMVx1NjQ1ZVx1NjQ4NFx1NjQ2ZFx1NjQ5NiJdLFsiZGY0MCIsIlx1OTAxOVx1OTAxY1x1OTAyM1x1OTAyNFx1OTAyNVx1OTAyNyIsNSwiXHU5MDMwIiw0LCJcdTkwMzdcdTkwMzlcdTkwM2FcdTkwM2RcdTkw''@;'; put 'put ''M2ZcdTkwNDBcdTkwNDNcdTkwNDVcdTkwNDZcdTkwNDgiLDQsIlx1OTA0ZVx1OTA1NFx1OTA1NVx1OTA1Nlx1OTA1OVx1OTA1YVx1OTA1YyIsNSwiXHU5MDY0XHU5MDY2XHU5MDY3XHU5MDY5XHU5MDZhXHU5MDZiXHU5MDZjXHU5MDZmIiw0LCJcdTkwNzYiLDYsIlx1OTA3ZVx1OTA4MSJdLFsi''@;'; put 'put ''ZGY4MCIsIlx1OTA4NFx1OTA4NVx1OTA4Nlx1OTA4N1x1OTA4OVx1OTA4YVx1OTA4YyIsNCwiXHU5MDkyXHU5MDk0XHU5MDk2XHU5MDk4XHU5MDlhXHU5MDljXHU5MDllXHU5MDlmXHU5MGEwXHU5MGE0XHU5MGE1XHU5MGE3XHU5MGE4XHU5MGE5XHU5MGFiXHU5MGFkXHU5MGIyXHU5MGI3XHU5''@;'; put 'put ''MGJjXHU5MGJkXHU5MGJmXHU5MGMwXHU2NDdhXHU2NGI3XHU2NGI4XHU2NDk5XHU2NGJhXHU2NGMwXHU2NGQwXHU2NGQ3XHU2NGU0XHU2NGUyXHU2NTA5XHU2NTI1XHU2NTJlXHU1ZjBiXHU1ZmQyXHU3NTE5XHU1ZjExXHU1MzVmXHU1M2YxXHU1M2ZkXHU1M2U5XHU1M2U4XHU1M2ZiXHU1NDEy''@;'; put 'put ''XHU1NDE2XHU1NDA2XHU1NDRiXHU1NDUyXHU1NDUzXHU1NDU0XHU1NDU2XHU1NDQzXHU1NDIxXHU1NDU3XHU1NDU5XHU1NDIzXHU1NDMyXHU1NDgyXHU1NDk0XHU1NDc3XHU1NDcxXHU1NDY0XHU1NDlhXHU1NDliXHU1NDg0XHU1NDc2XHU1NDY2XHU1NDlkXHU1NGQwXHU1NGFkXHU1NGMyXHU1''@;'; put 'put ''NGI0XHU1NGQyXHU1NGE3XHU1NGE2XHU1NGQzXHU1NGQ0XHU1NDcyXHU1NGEzXHU1NGQ1XHU1NGJiXHU1NGJmXHU1NGNjXHU1NGQ5XHU1NGRhXHU1NGRjXHU1NGE5XHU1NGFhXHU1NGE0XHU1NGRkXHU1NGNmXHU1NGRlXHU1NTFiXHU1NGU3XHU1NTIwXHU1NGZkXHU1NTE0XHU1NGYzXHU1NTIy''@;'; put 'put ''XHU1NTIzXHU1NTBmXHU1NTExXHU1NTI3XHU1NTJhXHU1NTY3XHU1NThmXHU1NWI1XHU1NTQ5XHU1NTZkXHU1NTQxXHU1NTU1XHU1NTNmXHU1NTUwXHU1NTNjIl0sWyJlMDQwIiwiXHU5MGMyXHU5MGMzXHU5MGM2XHU5MGM4XHU5MGM5XHU5MGNiXHU5MGNjXHU5MGNkXHU5MGQyXHU5MGQ0XHU5''@;'; put 'put ''MGQ1XHU5MGQ2XHU5MGQ4XHU5MGQ5XHU5MGRhXHU5MGRlXHU5MGRmXHU5MGUwXHU5MGUzXHU5MGU0XHU5MGU1XHU5MGU5XHU5MGVhXHU5MGVjXHU5MGVlXHU5MGYwXHU5MGYxXHU5MGYyXHU5MGYzXHU5MGY1XHU5MGY2XHU5MGY3XHU5MGY5XHU5MGZhXHU5MGZiXHU5MGZjXHU5MGZmXHU5MTAw''@;'; put 'put ''XHU5MTAxXHU5MTAzXHU5MTA1IiwxOSwiXHU5MTFhXHU5MTFiXHU5MTFjIl0sWyJlMDgwIiwiXHU5MTFkXHU5MTFmXHU5MTIwXHU5MTIxXHU5MTI0IiwxMCwiXHU5MTMwXHU5MTMyIiw2LCJcdTkxM2EiLDgsIlx1OTE0NFx1NTUzN1x1NTU1Nlx1NTU3NVx1NTU3Nlx1NTU3N1x1NTUzM1x1NTUz''@;'; put 'put ''MFx1NTU1Y1x1NTU4Ylx1NTVkMlx1NTU4M1x1NTViMVx1NTViOVx1NTU4OFx1NTU4MVx1NTU5Zlx1NTU3ZVx1NTVkNlx1NTU5MVx1NTU3Ylx1NTVkZlx1NTViZFx1NTViZVx1NTU5NFx1NTU5OVx1NTVlYVx1NTVmN1x1NTVjOVx1NTYxZlx1NTVkMVx1NTVlYlx1NTVlY1x1NTVkNFx1NTVlNlx1''@;'; put 'put ''NTVkZFx1NTVjNFx1NTVlZlx1NTVlNVx1NTVmMlx1NTVmM1x1NTVjY1x1NTVjZFx1NTVlOFx1NTVmNVx1NTVlNFx1OGY5NFx1NTYxZVx1NTYwOFx1NTYwY1x1NTYwMVx1NTYyNFx1NTYyM1x1NTVmZVx1NTYwMFx1NTYyN1x1NTYyZFx1NTY1OFx1NTYzOVx1NTY1N1x1NTYyY1x1NTY0ZFx1NTY2''@;'; put 'put ''Mlx1NTY1OVx1NTY1Y1x1NTY0Y1x1NTY1NFx1NTY4Nlx1NTY2NFx1NTY3MVx1NTY2Ylx1NTY3Ylx1NTY3Y1x1NTY4NVx1NTY5M1x1NTZhZlx1NTZkNFx1NTZkN1x1NTZkZFx1NTZlMVx1NTZmNVx1NTZlYlx1NTZmOVx1NTZmZlx1NTcwNFx1NTcwYVx1NTcwOVx1NTcxY1x1NWUwZlx1NWUxOVx1''@;'; put 'put ''NWUxNFx1NWUxMVx1NWUzMVx1NWUzYlx1NWUzYyJdLFsiZTE0MCIsIlx1OTE0NVx1OTE0N1x1OTE0OFx1OTE1MVx1OTE1M1x1OTE1NFx1OTE1NVx1OTE1Nlx1OTE1OFx1OTE1OVx1OTE1Ylx1OTE1Y1x1OTE1Zlx1OTE2MFx1OTE2Nlx1OTE2N1x1OTE2OFx1OTE2Ylx1OTE2ZFx1OTE3M1x1OTE3''@;'; put 'put ''YVx1OTE3Ylx1OTE3Y1x1OTE4MCIsNCwiXHU5MTg2XHU5MTg4XHU5MThhXHU5MThlXHU5MThmXHU5MTkzIiw2LCJcdTkxOWMiLDUsIlx1OTFhNCIsNSwiXHU5MWFiXHU5MWFjXHU5MWIwXHU5MWIxXHU5MWIyXHU5MWIzXHU5MWI2XHU5MWI3XHU5MWI4XHU5MWI5XHU5MWJiIl0sWyJlMTgwIiwi''@;'; put 'put ''XHU5MWJjIiwxMCwiXHU5MWM4XHU5MWNiXHU5MWQwXHU5MWQyIiw5LCJcdTkxZGQiLDgsIlx1NWUzN1x1NWU0NFx1NWU1NFx1NWU1Ylx1NWU1ZVx1NWU2MVx1NWM4Y1x1NWM3YVx1NWM4ZFx1NWM5MFx1NWM5Nlx1NWM4OFx1NWM5OFx1NWM5OVx1NWM5MVx1NWM5YVx1NWM5Y1x1NWNiNVx1NWNh''@;'; put 'put ''Mlx1NWNiZFx1NWNhY1x1NWNhYlx1NWNiMVx1NWNhM1x1NWNjMVx1NWNiN1x1NWNjNFx1NWNkMlx1NWNlNFx1NWNjYlx1NWNlNVx1NWQwMlx1NWQwM1x1NWQyN1x1NWQyNlx1NWQyZVx1NWQyNFx1NWQxZVx1NWQwNlx1NWQxYlx1NWQ1OFx1NWQzZVx1NWQzNFx1NWQzZFx1NWQ2Y1x1NWQ1Ylx1''@;'; put 'put ''NWQ2Zlx1NWQ1ZFx1NWQ2Ylx1NWQ0Ylx1NWQ0YVx1NWQ2OVx1NWQ3NFx1NWQ4Mlx1NWQ5OVx1NWQ5ZFx1OGM3M1x1NWRiN1x1NWRjNVx1NWY3M1x1NWY3N1x1NWY4Mlx1NWY4N1x1NWY4OVx1NWY4Y1x1NWY5NVx1NWY5OVx1NWY5Y1x1NWZhOFx1NWZhZFx1NWZiNVx1NWZiY1x1ODg2Mlx1NWY2''@;'; put 'put ''MVx1NzJhZFx1NzJiMFx1NzJiNFx1NzJiN1x1NzJiOFx1NzJjM1x1NzJjMVx1NzJjZVx1NzJjZFx1NzJkMlx1NzJlOFx1NzJlZlx1NzJlOVx1NzJmMlx1NzJmNFx1NzJmN1x1NzMwMVx1NzJmM1x1NzMwM1x1NzJmYSJdLFsiZTI0MCIsIlx1OTFlNiIsNjJdLFsiZTI4MCIsIlx1OTIyNSIsMzIs''@;'; put 'put ''Ilx1NzJmYlx1NzMxN1x1NzMxM1x1NzMyMVx1NzMwYVx1NzMxZVx1NzMxZFx1NzMxNVx1NzMyMlx1NzMzOVx1NzMyNVx1NzMyY1x1NzMzOFx1NzMzMVx1NzM1MFx1NzM0ZFx1NzM1N1x1NzM2MFx1NzM2Y1x1NzM2Zlx1NzM3ZVx1ODIxYlx1NTkyNVx1OThlN1x1NTkyNFx1NTkwMlx1OTk2M1x1''@;'; put 'put ''OTk2NyIsNSwiXHU5OTc0XHU5OTc3XHU5OTdkXHU5OTgwXHU5OTg0XHU5OTg3XHU5OThhXHU5OThkXHU5OTkwXHU5OTkxXHU5OTkzXHU5OTk0XHU5OTk1XHU1ZTgwXHU1ZTkxXHU1ZThiXHU1ZTk2XHU1ZWE1XHU1ZWEwXHU1ZWI5XHU1ZWI1XHU1ZWJlXHU1ZWIzXHU4ZDUzXHU1ZWQyXHU1ZWQx''@;'; put 'put ''XHU1ZWRiXHU1ZWU4XHU1ZWVhXHU4MWJhXHU1ZmM0XHU1ZmM5XHU1ZmQ2XHU1ZmNmXHU2MDAzXHU1ZmVlXHU2MDA0XHU1ZmUxXHU1ZmU0XHU1ZmZlXHU2MDA1XHU2MDA2XHU1ZmVhXHU1ZmVkXHU1ZmY4XHU2MDE5XHU2MDM1XHU2MDI2XHU2MDFiXHU2MDBmXHU2MDBkXHU2MDI5XHU2MDJiXHU2''@;'; put 'put ''MDBhXHU2MDNmXHU2MDIxXHU2MDc4XHU2MDc5XHU2MDdiXHU2MDdhXHU2MDQyIl0sWyJlMzQwIiwiXHU5MjQ2Iiw0NSwiXHU5Mjc1IiwxNl0sWyJlMzgwIiwiXHU5Mjg2Iiw3LCJcdTkyOGYiLDI0LCJcdTYwNmFcdTYwN2RcdTYwOTZcdTYwOWFcdTYwYWRcdTYwOWRcdTYwODNcdTYwOTJcdTYw''@;'; put 'put ''OGNcdTYwOWJcdTYwZWNcdTYwYmJcdTYwYjFcdTYwZGRcdTYwZDhcdTYwYzZcdTYwZGFcdTYwYjRcdTYxMjBcdTYxMjZcdTYxMTVcdTYxMjNcdTYwZjRcdTYxMDBcdTYxMGVcdTYxMmJcdTYxNGFcdTYxNzVcdTYxYWNcdTYxOTRcdTYxYTdcdTYxYjdcdTYxZDRcdTYxZjVcdTVmZGRcdTk2YjNc''@;'; put 'put ''dTk1ZTlcdTk1ZWJcdTk1ZjFcdTk1ZjNcdTk1ZjVcdTk1ZjZcdTk1ZmNcdTk1ZmVcdTk2MDNcdTk2MDRcdTk2MDZcdTk2MDhcdTk2MGFcdTk2MGJcdTk2MGNcdTk2MGRcdTk2MGZcdTk2MTJcdTk2MTVcdTk2MTZcdTk2MTdcdTk2MTlcdTk2MWFcdTRlMmNcdTcyM2ZcdTYyMTVcdTZjMzVcdTZj''@;'; put 'put ''NTRcdTZjNWNcdTZjNGFcdTZjYTNcdTZjODVcdTZjOTBcdTZjOTRcdTZjOGNcdTZjNjhcdTZjNjlcdTZjNzRcdTZjNzZcdTZjODZcdTZjYTlcdTZjZDBcdTZjZDRcdTZjYWRcdTZjZjdcdTZjZjhcdTZjZjFcdTZjZDdcdTZjYjJcdTZjZTBcdTZjZDZcdTZjZmFcdTZjZWJcdTZjZWVcdTZjYjFc''@;'; put 'put ''dTZjZDNcdTZjZWZcdTZjZmUiXSxbImU0NDAiLCJcdTkyYTgiLDUsIlx1OTJhZiIsMjQsIlx1OTJjOSIsMzFdLFsiZTQ4MCIsIlx1OTJlOSIsMzIsIlx1NmQzOVx1NmQyN1x1NmQwY1x1NmQ0M1x1NmQ0OFx1NmQwN1x1NmQwNFx1NmQxOVx1NmQwZVx1NmQyYlx1NmQ0ZFx1NmQyZVx1NmQzNVx1''@;'; put 'put ''NmQxYVx1NmQ0Zlx1NmQ1Mlx1NmQ1NFx1NmQzM1x1NmQ5MVx1NmQ2Zlx1NmQ5ZVx1NmRhMFx1NmQ1ZVx1NmQ5M1x1NmQ5NFx1NmQ1Y1x1NmQ2MFx1NmQ3Y1x1NmQ2M1x1NmUxYVx1NmRjN1x1NmRjNVx1NmRkZVx1NmUwZVx1NmRiZlx1NmRlMFx1NmUxMVx1NmRlNlx1NmRkZFx1NmRkOVx1NmUx''@;'; put 'put ''Nlx1NmRhYlx1NmUwY1x1NmRhZVx1NmUyYlx1NmU2ZVx1NmU0ZVx1NmU2Ylx1NmViMlx1NmU1Zlx1NmU4Nlx1NmU1M1x1NmU1NFx1NmUzMlx1NmUyNVx1NmU0NFx1NmVkZlx1NmViMVx1NmU5OFx1NmVlMFx1NmYyZFx1NmVlMlx1NmVhNVx1NmVhN1x1NmViZFx1NmViYlx1NmViN1x1NmVkN1x1''@;'; put 'put ''NmViNFx1NmVjZlx1NmU4Zlx1NmVjMlx1NmU5Zlx1NmY2Mlx1NmY0Nlx1NmY0N1x1NmYyNFx1NmYxNVx1NmVmOVx1NmYyZlx1NmYzNlx1NmY0Ylx1NmY3NFx1NmYyYVx1NmYwOVx1NmYyOVx1NmY4OVx1NmY4ZFx1NmY4Y1x1NmY3OFx1NmY3Mlx1NmY3Y1x1NmY3YVx1NmZkMSJdLFsiZTU0MCIs''@;'; put 'put ''Ilx1OTMwYSIsNTEsIlx1OTMzZiIsMTBdLFsiZTU4MCIsIlx1OTM0YSIsMzEsIlx1OTM2Ylx1NmZjOVx1NmZhN1x1NmZiOVx1NmZiNlx1NmZjMlx1NmZlMVx1NmZlZVx1NmZkZVx1NmZlMFx1NmZlZlx1NzAxYVx1NzAyM1x1NzAxYlx1NzAzOVx1NzAzNVx1NzA0Zlx1NzA1ZVx1NWI4MFx1NWI4''@;'; put 'put ''NFx1NWI5NVx1NWI5M1x1NWJhNVx1NWJiOFx1NzUyZlx1OWE5ZVx1NjQzNFx1NWJlNFx1NWJlZVx1ODkzMFx1NWJmMFx1OGU0N1x1OGIwN1x1OGZiNlx1OGZkM1x1OGZkNVx1OGZlNVx1OGZlZVx1OGZlNFx1OGZlOVx1OGZlNlx1OGZmM1x1OGZlOFx1OTAwNVx1OTAwNFx1OTAwYlx1OTAyNlx1''@;'; put 'put ''OTAxMVx1OTAwZFx1OTAxNlx1OTAyMVx1OTAzNVx1OTAzNlx1OTAyZFx1OTAyZlx1OTA0NFx1OTA1MVx1OTA1Mlx1OTA1MFx1OTA2OFx1OTA1OFx1OTA2Mlx1OTA1Ylx1NjZiOVx1OTA3NFx1OTA3ZFx1OTA4Mlx1OTA4OFx1OTA4M1x1OTA4Ylx1NWY1MFx1NWY1N1x1NWY1Nlx1NWY1OFx1NWMz''@;'; put 'put ''Ylx1NTRhYlx1NWM1MFx1NWM1OVx1NWI3MVx1NWM2M1x1NWM2Nlx1N2ZiY1x1NWYyYVx1NWYyOVx1NWYyZFx1ODI3NFx1NWYzY1x1OWIzYlx1NWM2ZVx1NTk4MVx1NTk4M1x1NTk4ZFx1NTlhOVx1NTlhYVx1NTlhMyJdLFsiZTY0MCIsIlx1OTM2YyIsMzQsIlx1OTM5MCIsMjddLFsiZTY4MCIs''@;'; put 'put ''Ilx1OTNhYyIsMjksIlx1OTNjYlx1OTNjY1x1OTNjZFx1NTk5N1x1NTljYVx1NTlhYlx1NTk5ZVx1NTlhNFx1NTlkMlx1NTliMlx1NTlhZlx1NTlkN1x1NTliZVx1NWEwNVx1NWEwNlx1NTlkZFx1NWEwOFx1NTllM1x1NTlkOFx1NTlmOVx1NWEwY1x1NWEwOVx1NWEzMlx1NWEzNFx1NWExMVx1''@;'; put 'put ''NWEyM1x1NWExM1x1NWE0MFx1NWE2N1x1NWE0YVx1NWE1NVx1NWEzY1x1NWE2Mlx1NWE3NVx1ODBlY1x1NWFhYVx1NWE5Ylx1NWE3N1x1NWE3YVx1NWFiZVx1NWFlYlx1NWFiMlx1NWFkMlx1NWFkNFx1NWFiOFx1NWFlMFx1NWFlM1x1NWFmMVx1NWFkNlx1NWFlNlx1NWFkOFx1NWFkY1x1NWIw''@;'; put 'put ''OVx1NWIxN1x1NWIxNlx1NWIzMlx1NWIzN1x1NWI0MFx1NWMxNVx1NWMxY1x1NWI1YVx1NWI2NVx1NWI3M1x1NWI1MVx1NWI1M1x1NWI2Mlx1OWE3NVx1OWE3N1x1OWE3OFx1OWE3YVx1OWE3Zlx1OWE3ZFx1OWE4MFx1OWE4MVx1OWE4NVx1OWE4OFx1OWE4YVx1OWE5MFx1OWE5Mlx1OWE5M1x1''@;'; put 'put ''OWE5Nlx1OWE5OFx1OWE5Ylx1OWE5Y1x1OWE5ZFx1OWE5Zlx1OWFhMFx1OWFhMlx1OWFhM1x1OWFhNVx1OWFhN1x1N2U5Zlx1N2VhMVx1N2VhM1x1N2VhNVx1N2VhOFx1N2VhOSJdLFsiZTc0MCIsIlx1OTNjZSIsNywiXHU5M2Q3Iiw1NF0sWyJlNzgwIiwiXHU5NDBlIiwzMiwiXHU3ZWFkXHU3''@;'; put 'put ''ZWIwXHU3ZWJlXHU3ZWMwXHU3ZWMxXHU3ZWMyXHU3ZWM5XHU3ZWNiXHU3ZWNjXHU3ZWQwXHU3ZWQ0XHU3ZWQ3XHU3ZWRiXHU3ZWUwXHU3ZWUxXHU3ZWU4XHU3ZWViXHU3ZWVlXHU3ZWVmXHU3ZWYxXHU3ZWYyXHU3ZjBkXHU3ZWY2XHU3ZWZhXHU3ZWZiXHU3ZWZlXHU3ZjAxXHU3ZjAyXHU3ZjAz''@;'; put 'put ''XHU3ZjA3XHU3ZjA4XHU3ZjBiXHU3ZjBjXHU3ZjBmXHU3ZjExXHU3ZjEyXHU3ZjE3XHU3ZjE5XHU3ZjFjXHU3ZjFiXHU3ZjFmXHU3ZjIxIiw2LCJcdTdmMmFcdTdmMmJcdTdmMmNcdTdmMmRcdTdmMmYiLDQsIlx1N2YzNVx1NWU3YVx1NzU3Zlx1NWRkYlx1NzUzZVx1OTA5NVx1NzM4ZVx1NzM5''@;'; put 'put ''MVx1NzNhZVx1NzNhMlx1NzM5Zlx1NzNjZlx1NzNjMlx1NzNkMVx1NzNiN1x1NzNiM1x1NzNjMFx1NzNjOVx1NzNjOFx1NzNlNVx1NzNkOVx1OTg3Y1x1NzQwYVx1NzNlOVx1NzNlN1x1NzNkZVx1NzNiYVx1NzNmMlx1NzQwZlx1NzQyYVx1NzQ1Ylx1NzQyNlx1NzQyNVx1NzQyOFx1NzQzMFx1''@;'; put 'put ''NzQyZVx1NzQyYyJdLFsiZTg0MCIsIlx1OTQyZiIsMTQsIlx1OTQzZiIsNDMsIlx1OTQ2Y1x1OTQ2ZFx1OTQ2ZVx1OTQ2ZiJdLFsiZTg4MCIsIlx1OTQ3MCIsMjAsIlx1OTQ5MVx1OTQ5Nlx1OTQ5OFx1OTRjN1x1OTRjZlx1OTRkM1x1OTRkNFx1OTRkYVx1OTRlNlx1OTRmYlx1OTUxY1x1OTUy''@;'; put 'put ''MFx1NzQxYlx1NzQxYVx1NzQ0MVx1NzQ1Y1x1NzQ1N1x1NzQ1NVx1NzQ1OVx1NzQ3N1x1NzQ2ZFx1NzQ3ZVx1NzQ5Y1x1NzQ4ZVx1NzQ4MFx1NzQ4MVx1NzQ4N1x1NzQ4Ylx1NzQ5ZVx1NzRhOFx1NzRhOVx1NzQ5MFx1NzRhN1x1NzRkMlx1NzRiYVx1OTdlYVx1OTdlYlx1OTdlY1x1Njc0Y1x1''@;'; put 'put ''Njc1M1x1Njc1ZVx1Njc0OFx1Njc2OVx1NjdhNVx1Njc4N1x1Njc2YVx1Njc3M1x1Njc5OFx1NjdhN1x1Njc3NVx1NjdhOFx1Njc5ZVx1NjdhZFx1Njc4Ylx1Njc3N1x1Njc3Y1x1NjdmMFx1NjgwOVx1NjdkOFx1NjgwYVx1NjdlOVx1NjdiMFx1NjgwY1x1NjdkOVx1NjdiNVx1NjdkYVx1Njdi''@;'; put 'put ''M1x1NjdkZFx1NjgwMFx1NjdjM1x1NjdiOFx1NjdlMlx1NjgwZVx1NjdjMVx1NjdmZFx1NjgzMlx1NjgzM1x1Njg2MFx1Njg2MVx1Njg0ZVx1Njg2Mlx1Njg0NFx1Njg2NFx1Njg4M1x1NjgxZFx1Njg1NVx1Njg2Nlx1Njg0MVx1Njg2N1x1Njg0MFx1NjgzZVx1Njg0YVx1Njg0OVx1NjgyOVx1''@;'; put 'put ''NjhiNVx1Njg4Zlx1Njg3NFx1Njg3N1x1Njg5M1x1Njg2Ylx1NjhjMlx1Njk2ZVx1NjhmY1x1NjkxZlx1NjkyMFx1NjhmOSJdLFsiZTk0MCIsIlx1OTUyN1x1OTUzM1x1OTUzZFx1OTU0M1x1OTU0OFx1OTU0Ylx1OTU1NVx1OTU1YVx1OTU2MFx1OTU2ZVx1OTU3NFx1OTU3NVx1OTU3NyIsNywi''@;'; put 'put ''XHU5NTgwIiw0Ml0sWyJlOTgwIiwiXHU5NWFiIiwzMiwiXHU2OTI0XHU2OGYwXHU2OTBiXHU2OTAxXHU2OTU3XHU2OGUzXHU2OTEwXHU2OTcxXHU2OTM5XHU2OTYwXHU2OTQyXHU2OTVkXHU2OTg0XHU2OTZiXHU2OTgwXHU2OTk4XHU2OTc4XHU2OTM0XHU2OWNjXHU2OTg3XHU2OTg4XHU2OWNl''@;'; put 'put ''XHU2OTg5XHU2OTY2XHU2OTYzXHU2OTc5XHU2OTliXHU2OWE3XHU2OWJiXHU2OWFiXHU2OWFkXHU2OWQ0XHU2OWIxXHU2OWMxXHU2OWNhXHU2OWRmXHU2OTk1XHU2OWUwXHU2OThkXHU2OWZmXHU2YTJmXHU2OWVkXHU2YTE3XHU2YTE4XHU2YTY1XHU2OWYyXHU2YTQ0XHU2YTNlXHU2YWEwXHU2''@;'; put 'put ''YTUwXHU2YTViXHU2YTM1XHU2YThlXHU2YTc5XHU2YTNkXHU2YTI4XHU2YTU4XHU2YTdjXHU2YTkxXHU2YTkwXHU2YWE5XHU2YTk3XHU2YWFiXHU3MzM3XHU3MzUyXHU2YjgxXHU2YjgyXHU2Yjg3XHU2Yjg0XHU2YjkyXHU2YjkzXHU2YjhkXHU2YjlhXHU2YjliXHU2YmExXHU2YmFhXHU4ZjZi''@;'; put 'put ''XHU4ZjZkXHU4ZjcxXHU4ZjcyXHU4ZjczXHU4Zjc1XHU4Zjc2XHU4Zjc4XHU4Zjc3XHU4Zjc5XHU4ZjdhXHU4ZjdjXHU4ZjdlXHU4ZjgxXHU4ZjgyXHU4Zjg0XHU4Zjg3XHU4ZjhiIl0sWyJlYTQwIiwiXHU5NWNjIiwyNywiXHU5NWVjXHU5NWZmXHU5NjA3XHU5NjEzXHU5NjE4XHU5NjFiXHU5''@;'; put 'put ''NjFlXHU5NjIwXHU5NjIzIiw2LCJcdTk2MmJcdTk2MmNcdTk2MmRcdTk2MmZcdTk2MzBcdTk2MzdcdTk2MzhcdTk2MzlcdTk2M2FcdTk2M2VcdTk2NDFcdTk2NDNcdTk2NGFcdTk2NGVcdTk2NGZcdTk2NTFcdTk2NTJcdTk2NTNcdTk2NTZcdTk2NTciXSxbImVhODAiLCJcdTk2NThcdTk2NTlc''@;'; put 'put ''dTk2NWFcdTk2NWNcdTk2NWRcdTk2NWVcdTk2NjBcdTk2NjNcdTk2NjVcdTk2NjZcdTk2NmJcdTk2NmQiLDQsIlx1OTY3M1x1OTY3OCIsMTIsIlx1OTY4N1x1OTY4OVx1OTY4YVx1OGY4ZFx1OGY4ZVx1OGY4Zlx1OGY5OFx1OGY5YVx1OGVjZVx1NjIwYlx1NjIxN1x1NjIxYlx1NjIxZlx1NjIy''@;'; put 'put ''Mlx1NjIyMVx1NjIyNVx1NjIyNFx1NjIyY1x1ODFlN1x1NzRlZlx1NzRmNFx1NzRmZlx1NzUwZlx1NzUxMVx1NzUxM1x1NjUzNFx1NjVlZVx1NjVlZlx1NjVmMFx1NjYwYVx1NjYxOVx1Njc3Mlx1NjYwM1x1NjYxNVx1NjYwMFx1NzA4NVx1NjZmN1x1NjYxZFx1NjYzNFx1NjYzMVx1NjYzNlx1''@;'; put 'put ''NjYzNVx1ODAwNlx1NjY1Zlx1NjY1NFx1NjY0MVx1NjY0Zlx1NjY1Nlx1NjY2MVx1NjY1N1x1NjY3N1x1NjY4NFx1NjY4Y1x1NjZhN1x1NjY5ZFx1NjZiZVx1NjZkYlx1NjZkY1x1NjZlNlx1NjZlOVx1OGQzMlx1OGQzM1x1OGQzNlx1OGQzYlx1OGQzZFx1OGQ0MFx1OGQ0NVx1OGQ0Nlx1OGQ0''@;'; put 'put ''OFx1OGQ0OVx1OGQ0N1x1OGQ0ZFx1OGQ1NVx1OGQ1OVx1ODljN1x1ODljYVx1ODljYlx1ODljY1x1ODljZVx1ODljZlx1ODlkMFx1ODlkMVx1NzI2ZVx1NzI5Zlx1NzI1ZFx1NzI2Nlx1NzI2Zlx1NzI3ZVx1NzI3Zlx1NzI4NFx1NzI4Ylx1NzI4ZFx1NzI4Zlx1NzI5Mlx1NjMwOFx1NjMzMlx1''@;'; put 'put ''NjNiMCJdLFsiZWI0MCIsIlx1OTY4Y1x1OTY4ZVx1OTY5MVx1OTY5Mlx1OTY5M1x1OTY5NVx1OTY5Nlx1OTY5YVx1OTY5Ylx1OTY5ZCIsOSwiXHU5NmE4Iiw3LCJcdTk2YjFcdTk2YjJcdTk2YjRcdTk2YjVcdTk2YjdcdTk2YjhcdTk2YmFcdTk2YmJcdTk2YmZcdTk2YzJcdTk2YzNcdTk2Yzhc''@;'; put 'put ''dTk2Y2FcdTk2Y2JcdTk2ZDBcdTk2ZDFcdTk2ZDNcdTk2ZDRcdTk2ZDYiLDksIlx1OTZlMSIsNiwiXHU5NmViIl0sWyJlYjgwIiwiXHU5NmVjXHU5NmVkXHU5NmVlXHU5NmYwXHU5NmYxXHU5NmYyXHU5NmY0XHU5NmY1XHU5NmY4XHU5NmZhXHU5NmZiXHU5NmZjXHU5NmZkXHU5NmZmXHU5NzAy''@;'; put 'put ''XHU5NzAzXHU5NzA1XHU5NzBhXHU5NzBiXHU5NzBjXHU5NzEwXHU5NzExXHU5NzEyXHU5NzE0XHU5NzE1XHU5NzE3Iiw0LCJcdTk3MWRcdTk3MWZcdTk3MjBcdTY0M2ZcdTY0ZDhcdTgwMDRcdTZiZWFcdTZiZjNcdTZiZmRcdTZiZjVcdTZiZjlcdTZjMDVcdTZjMDdcdTZjMDZcdTZjMGRcdTZj''@;'; put 'put ''MTVcdTZjMThcdTZjMTlcdTZjMWFcdTZjMjFcdTZjMjlcdTZjMjRcdTZjMmFcdTZjMzJcdTY1MzVcdTY1NTVcdTY1NmJcdTcyNGRcdTcyNTJcdTcyNTZcdTcyMzBcdTg2NjJcdTUyMTZcdTgwOWZcdTgwOWNcdTgwOTNcdTgwYmNcdTY3MGFcdTgwYmRcdTgwYjFcdTgwYWJcdTgwYWRcdTgwYjRc''@;'; put 'put ''dTgwYjdcdTgwZTdcdTgwZThcdTgwZTlcdTgwZWFcdTgwZGJcdTgwYzJcdTgwYzRcdTgwZDlcdTgwY2RcdTgwZDdcdTY3MTBcdTgwZGRcdTgwZWJcdTgwZjFcdTgwZjRcdTgwZWRcdTgxMGRcdTgxMGVcdTgwZjJcdTgwZmNcdTY3MTVcdTgxMTJcdThjNWFcdTgxMzZcdTgxMWVcdTgxMmNcdTgx''@;'; put 'put ''MThcdTgxMzJcdTgxNDhcdTgxNGNcdTgxNTNcdTgxNzRcdTgxNTlcdTgxNWFcdTgxNzFcdTgxNjBcdTgxNjlcdTgxN2NcdTgxN2RcdTgxNmRcdTgxNjdcdTU4NGRcdTVhYjVcdTgxODhcdTgxODJcdTgxOTFcdTZlZDVcdTgxYTNcdTgxYWFcdTgxY2NcdTY3MjZcdTgxY2FcdTgxYmIiXSxbImVj''@;'; put 'put ''NDAiLCJcdTk3MjEiLDgsIlx1OTcyYlx1OTcyY1x1OTcyZVx1OTcyZlx1OTczMVx1OTczMyIsNCwiXHU5NzNhXHU5NzNiXHU5NzNjXHU5NzNkXHU5NzNmIiwxOCwiXHU5NzU0XHU5NzU1XHU5NzU3XHU5NzU4XHU5NzVhXHU5NzVjXHU5NzVkXHU5NzVmXHU5NzYzXHU5NzY0XHU5NzY2XHU5NzY3''@;'; put 'put ''XHU5NzY4XHU5NzZhIiw3XSxbImVjODAiLCJcdTk3NzJcdTk3NzVcdTk3NzciLDQsIlx1OTc3ZCIsNywiXHU5Nzg2Iiw0LCJcdTk3OGNcdTk3OGVcdTk3OGZcdTk3OTBcdTk3OTNcdTk3OTVcdTk3OTZcdTk3OTdcdTk3OTkiLDQsIlx1ODFjMVx1ODFhNlx1NmIyNFx1NmIzN1x1NmIzOVx1NmI0''@;'; put 'put ''M1x1NmI0Nlx1NmI1OVx1OThkMVx1OThkMlx1OThkM1x1OThkNVx1OThkOVx1OThkYVx1NmJiM1x1NWY0MFx1NmJjMlx1ODlmM1x1NjU5MFx1OWY1MVx1NjU5M1x1NjViY1x1NjVjNlx1NjVjNFx1NjVjM1x1NjVjY1x1NjVjZVx1NjVkMlx1NjVkNlx1NzA4MFx1NzA5Y1x1NzA5Nlx1NzA5ZFx1''@;'; put 'put ''NzBiYlx1NzBjMFx1NzBiN1x1NzBhYlx1NzBiMVx1NzBlOFx1NzBjYVx1NzExMFx1NzExM1x1NzExNlx1NzEyZlx1NzEzMVx1NzE3M1x1NzE1Y1x1NzE2OFx1NzE0NVx1NzE3Mlx1NzE0YVx1NzE3OFx1NzE3YVx1NzE5OFx1NzFiM1x1NzFiNVx1NzFhOFx1NzFhMFx1NzFlMFx1NzFkNFx1NzFl''@;'; put 'put ''N1x1NzFmOVx1NzIxZFx1NzIyOFx1NzA2Y1x1NzExOFx1NzE2Nlx1NzFiOVx1NjIzZVx1NjIzZFx1NjI0M1x1NjI0OFx1NjI0OVx1NzkzYlx1Nzk0MFx1Nzk0Nlx1Nzk0OVx1Nzk1Ylx1Nzk1Y1x1Nzk1M1x1Nzk1YVx1Nzk2Mlx1Nzk1N1x1Nzk2MFx1Nzk2Zlx1Nzk2N1x1Nzk3YVx1Nzk4NVx1''@;'; put 'put ''Nzk4YVx1Nzk5YVx1NzlhN1x1NzliM1x1NWZkMVx1NWZkMCJdLFsiZWQ0MCIsIlx1OTc5ZVx1OTc5Zlx1OTdhMVx1OTdhMlx1OTdhNCIsNiwiXHU5N2FjXHU5N2FlXHU5N2IwXHU5N2IxXHU5N2IzXHU5N2I1Iiw0Nl0sWyJlZDgwIiwiXHU5N2U0XHU5N2U1XHU5N2U4XHU5N2VlIiw0LCJcdTk3''@;'; put 'put ''ZjRcdTk3ZjciLDIzLCJcdTYwM2NcdTYwNWRcdTYwNWFcdTYwNjdcdTYwNDFcdTYwNTlcdTYwNjNcdTYwYWJcdTYxMDZcdTYxMGRcdTYxNWRcdTYxYTlcdTYxOWRcdTYxY2JcdTYxZDFcdTYyMDZcdTgwODBcdTgwN2ZcdTZjOTNcdTZjZjZcdTZkZmNcdTc3ZjZcdTc3ZjhcdTc4MDBcdTc4MDlc''@;'; put 'put ''dTc4MTdcdTc4MThcdTc4MTFcdTY1YWJcdTc4MmRcdTc4MWNcdTc4MWRcdTc4MzlcdTc4M2FcdTc4M2JcdTc4MWZcdTc4M2NcdTc4MjVcdTc4MmNcdTc4MjNcdTc4MjlcdTc4NGVcdTc4NmRcdTc4NTZcdTc4NTdcdTc4MjZcdTc4NTBcdTc4NDdcdTc4NGNcdTc4NmFcdTc4OWJcdTc4OTNcdTc4''@;'; put 'put ''OWFcdTc4ODdcdTc4OWNcdTc4YTFcdTc4YTNcdTc4YjJcdTc4YjlcdTc4YTVcdTc4ZDRcdTc4ZDlcdTc4YzlcdTc4ZWNcdTc4ZjJcdTc5MDVcdTc4ZjRcdTc5MTNcdTc5MjRcdTc5MWVcdTc5MzRcdTlmOWJcdTllZjlcdTllZmJcdTllZmNcdTc2ZjFcdTc3MDRcdTc3MGRcdTc2ZjlcdTc3MDdc''@;'; put 'put ''dTc3MDhcdTc3MWFcdTc3MjJcdTc3MTlcdTc3MmRcdTc3MjZcdTc3MzVcdTc3MzhcdTc3NTBcdTc3NTFcdTc3NDdcdTc3NDNcdTc3NWFcdTc3NjgiXSxbImVlNDAiLCJcdTk4MGYiLDYyXSxbImVlODAiLCJcdTk4NGUiLDMyLCJcdTc3NjJcdTc3NjVcdTc3N2ZcdTc3OGRcdTc3N2RcdTc3ODBc''@;'; put 'put ''dTc3OGNcdTc3OTFcdTc3OWZcdTc3YTBcdTc3YjBcdTc3YjVcdTc3YmRcdTc1M2FcdTc1NDBcdTc1NGVcdTc1NGJcdTc1NDhcdTc1NWJcdTc1NzJcdTc1NzlcdTc1ODNcdTdmNThcdTdmNjFcdTdmNWZcdThhNDhcdTdmNjhcdTdmNzRcdTdmNzFcdTdmNzlcdTdmODFcdTdmN2VcdTc2Y2RcdTc2''@;'; put 'put ''ZTVcdTg4MzJcdTk0ODVcdTk0ODZcdTk0ODdcdTk0OGJcdTk0OGFcdTk0OGNcdTk0OGRcdTk0OGZcdTk0OTBcdTk0OTRcdTk0OTdcdTk0OTVcdTk0OWFcdTk0OWJcdTk0OWNcdTk0YTNcdTk0YTRcdTk0YWJcdTk0YWFcdTk0YWRcdTk0YWNcdTk0YWZcdTk0YjBcdTk0YjJcdTk0YjRcdTk0YjYi''@;'; put 'put ''LDQsIlx1OTRiY1x1OTRiZFx1OTRiZlx1OTRjNFx1OTRjOCIsNiwiXHU5NGQwXHU5NGQxXHU5NGQyXHU5NGQ1XHU5NGQ2XHU5NGQ3XHU5NGQ5XHU5NGQ4XHU5NGRiXHU5NGRlXHU5NGRmXHU5NGUwXHU5NGUyXHU5NGU0XHU5NGU1XHU5NGU3XHU5NGU4XHU5NGVhIl0sWyJlZjQwIiwiXHU5ODZm''@;'; put 'put ''Iiw1LCJcdTk4OGJcdTk4OGVcdTk4OTJcdTk4OTVcdTk4OTlcdTk4YTNcdTk4YTgiLDM3LCJcdTk4Y2ZcdTk4ZDBcdTk4ZDRcdTk4ZDZcdTk4ZDdcdTk4ZGJcdTk4ZGNcdTk4ZGRcdTk4ZTAiLDRdLFsiZWY4MCIsIlx1OThlNVx1OThlNlx1OThlOSIsMzAsIlx1OTRlOVx1OTRlYlx1OTRlZVx1''@;'; put 'put ''OTRlZlx1OTRmM1x1OTRmNFx1OTRmNVx1OTRmN1x1OTRmOVx1OTRmY1x1OTRmZFx1OTRmZlx1OTUwM1x1OTUwMlx1OTUwNlx1OTUwN1x1OTUwOVx1OTUwYVx1OTUwZFx1OTUwZVx1OTUwZlx1OTUxMiIsNCwiXHU5NTE4XHU5NTFiXHU5NTFkXHU5NTFlXHU5NTFmXHU5NTIyXHU5NTJhXHU5NTJi''@;'; put 'put ''XHU5NTI5XHU5NTJjXHU5NTMxXHU5NTMyXHU5NTM0XHU5NTM2XHU5NTM3XHU5NTM4XHU5NTNjXHU5NTNlXHU5NTNmXHU5NTQyXHU5NTM1XHU5NTQ0XHU5NTQ1XHU5NTQ2XHU5NTQ5XHU5NTRjXHU5NTRlXHU5NTRmXHU5NTUyXHU5NTUzXHU5NTU0XHU5NTU2XHU5NTU3XHU5NTU4XHU5NTU5XHU5''@;'; put 'put ''NTViXHU5NTVlXHU5NTVmXHU5NTVkXHU5NTYxXHU5NTYyXHU5NTY0Iiw4LCJcdTk1NmZcdTk1NzFcdTk1NzJcdTk1NzNcdTk1M2FcdTc3ZTdcdTc3ZWNcdTk2YzlcdTc5ZDVcdTc5ZWRcdTc5ZTNcdTc5ZWJcdTdhMDZcdTVkNDdcdTdhMDNcdTdhMDJcdTdhMWVcdTdhMTQiXSxbImYwNDAiLCJc''@;'; put 'put ''dTk5MDgiLDQsIlx1OTkwZVx1OTkwZlx1OTkxMSIsMjgsIlx1OTkyZiIsMjZdLFsiZjA4MCIsIlx1OTk0YSIsOSwiXHU5OTU2IiwxMiwiXHU5OTY0XHU5OTY2XHU5OTczXHU5OTc4XHU5OTc5XHU5OTdiXHU5OTdlXHU5OTgyXHU5OTgzXHU5OTg5XHU3YTM5XHU3YTM3XHU3YTUxXHU5ZWNmXHU5''@;'; put 'put ''OWE1XHU3YTcwXHU3Njg4XHU3NjhlXHU3NjkzXHU3Njk5XHU3NmE0XHU3NGRlXHU3NGUwXHU3NTJjXHU5ZTIwXHU5ZTIyXHU5ZTI4Iiw0LCJcdTllMzJcdTllMzFcdTllMzZcdTllMzhcdTllMzdcdTllMzlcdTllM2FcdTllM2VcdTllNDFcdTllNDJcdTllNDRcdTllNDZcdTllNDdcdTllNDhc''@;'; put 'put ''dTllNDlcdTllNGJcdTllNGNcdTllNGVcdTllNTFcdTllNTVcdTllNTdcdTllNWFcdTllNWJcdTllNWNcdTllNWVcdTllNjNcdTllNjYiLDYsIlx1OWU3MVx1OWU2ZFx1OWU3M1x1NzU5Mlx1NzU5NFx1NzU5Nlx1NzVhMFx1NzU5ZFx1NzVhY1x1NzVhM1x1NzViM1x1NzViNFx1NzViOFx1NzVj''@;'; put 'put ''NFx1NzViMVx1NzViMFx1NzVjM1x1NzVjMlx1NzVkNlx1NzVjZFx1NzVlM1x1NzVlOFx1NzVlNlx1NzVlNFx1NzVlYlx1NzVlN1x1NzYwM1x1NzVmMVx1NzVmY1x1NzVmZlx1NzYxMFx1NzYwMFx1NzYwNVx1NzYwY1x1NzYxN1x1NzYwYVx1NzYyNVx1NzYxOFx1NzYxNVx1NzYxOSJdLFsiZjE0''@;'; put 'put ''MCIsIlx1OTk4Y1x1OTk4ZVx1OTk5YSIsMTAsIlx1OTlhNlx1OTlhN1x1OTlhOSIsNDddLFsiZjE4MCIsIlx1OTlkOSIsMzIsIlx1NzYxYlx1NzYzY1x1NzYyMlx1NzYyMFx1NzY0MFx1NzYyZFx1NzYzMFx1NzYzZlx1NzYzNVx1NzY0M1x1NzYzZVx1NzYzM1x1NzY0ZFx1NzY1ZVx1NzY1NFx1''@;'; put 'put ''NzY1Y1x1NzY1Nlx1NzY2Ylx1NzY2Zlx1N2ZjYVx1N2FlNlx1N2E3OFx1N2E3OVx1N2E4MFx1N2E4Nlx1N2E4OFx1N2E5NVx1N2FhNlx1N2FhMFx1N2FhY1x1N2FhOFx1N2FhZFx1N2FiM1x1ODg2NFx1ODg2OVx1ODg3Mlx1ODg3ZFx1ODg3Zlx1ODg4Mlx1ODhhMlx1ODhjNlx1ODhiN1x1ODhi''@;'; put 'put ''Y1x1ODhjOVx1ODhlMlx1ODhjZVx1ODhlM1x1ODhlNVx1ODhmMVx1ODkxYVx1ODhmY1x1ODhlOFx1ODhmZVx1ODhmMFx1ODkyMVx1ODkxOVx1ODkxM1x1ODkxYlx1ODkwYVx1ODkzNFx1ODkyYlx1ODkzNlx1ODk0MVx1ODk2Nlx1ODk3Ylx1NzU4Ylx1ODBlNVx1NzZiMlx1NzZiNFx1NzdkY1x1''@;'; put 'put ''ODAxMlx1ODAxNFx1ODAxNlx1ODAxY1x1ODAyMFx1ODAyMlx1ODAyNVx1ODAyNlx1ODAyN1x1ODAyOVx1ODAyOFx1ODAzMVx1ODAwYlx1ODAzNVx1ODA0M1x1ODA0Nlx1ODA0ZFx1ODA1Mlx1ODA2OVx1ODA3MVx1ODk4M1x1OTg3OFx1OTg4MFx1OTg4MyJdLFsiZjI0MCIsIlx1OTlmYSIsNjJd''@;'; put 'put ''LFsiZjI4MCIsIlx1OWEzOSIsMzIsIlx1OTg4OVx1OTg4Y1x1OTg4ZFx1OTg4Zlx1OTg5NFx1OTg5YVx1OTg5Ylx1OTg5ZVx1OTg5Zlx1OThhMVx1OThhMlx1OThhNVx1OThhNlx1ODY0ZFx1ODY1NFx1ODY2Y1x1ODY2ZVx1ODY3Zlx1ODY3YVx1ODY3Y1x1ODY3Ylx1ODZhOFx1ODY4ZFx1ODY4''@;'; put 'put ''Ylx1ODZhY1x1ODY5ZFx1ODZhN1x1ODZhM1x1ODZhYVx1ODY5M1x1ODZhOVx1ODZiNlx1ODZjNFx1ODZiNVx1ODZjZVx1ODZiMFx1ODZiYVx1ODZiMVx1ODZhZlx1ODZjOVx1ODZjZlx1ODZiNFx1ODZlOVx1ODZmMVx1ODZmMlx1ODZlZFx1ODZmM1x1ODZkMFx1ODcxM1x1ODZkZVx1ODZmNFx1''@;'; put 'put ''ODZkZlx1ODZkOFx1ODZkMVx1ODcwM1x1ODcwN1x1ODZmOFx1ODcwOFx1ODcwYVx1ODcwZFx1ODcwOVx1ODcyM1x1ODczYlx1ODcxZVx1ODcyNVx1ODcyZVx1ODcxYVx1ODczZVx1ODc0OFx1ODczNFx1ODczMVx1ODcyOVx1ODczN1x1ODczZlx1ODc4Mlx1ODcyMlx1ODc3ZFx1ODc3ZVx1ODc3''@;'; put 'put ''Ylx1ODc2MFx1ODc3MFx1ODc0Y1x1ODc2ZVx1ODc4Ylx1ODc1M1x1ODc2M1x1ODc3Y1x1ODc2NFx1ODc1OVx1ODc2NVx1ODc5M1x1ODdhZlx1ODdhOFx1ODdkMiJdLFsiZjM0MCIsIlx1OWE1YSIsMTcsIlx1OWE3Mlx1OWE4M1x1OWE4OVx1OWE4ZFx1OWE4ZVx1OWE5NFx1OWE5NVx1OWE5OVx1''@;'; put 'put ''OWFhNlx1OWFhOSIsNiwiXHU5YWIyXHU5YWIzXHU5YWI0XHU5YWI1XHU5YWI5XHU5YWJiXHU5YWJkXHU5YWJlXHU5YWJmXHU5YWMzXHU5YWM0XHU5YWM2Iiw0LCJcdTlhY2RcdTlhY2VcdTlhY2ZcdTlhZDBcdTlhZDJcdTlhZDRcdTlhZDVcdTlhZDZcdTlhZDdcdTlhZDlcdTlhZGFcdTlhZGJc''@;'; put 'put ''dTlhZGMiXSxbImYzODAiLCJcdTlhZGRcdTlhZGVcdTlhZTBcdTlhZTJcdTlhZTNcdTlhZTRcdTlhZTVcdTlhZTdcdTlhZThcdTlhZTlcdTlhZWFcdTlhZWNcdTlhZWVcdTlhZjAiLDgsIlx1OWFmYVx1OWFmYyIsNiwiXHU5YjA0XHU5YjA1XHU5YjA2XHU4N2M2XHU4Nzg4XHU4Nzg1XHU4N2Fk''@;'; put 'put ''XHU4Nzk3XHU4NzgzXHU4N2FiXHU4N2U1XHU4N2FjXHU4N2I1XHU4N2IzXHU4N2NiXHU4N2QzXHU4N2JkXHU4N2QxXHU4N2MwXHU4N2NhXHU4N2RiXHU4N2VhXHU4N2UwXHU4N2VlXHU4ODE2XHU4ODEzXHU4N2ZlXHU4ODBhXHU4ODFiXHU4ODIxXHU4ODM5XHU4ODNjXHU3ZjM2XHU3ZjQyXHU3''@;'; put 'put ''ZjQ0XHU3ZjQ1XHU4MjEwXHU3YWZhXHU3YWZkXHU3YjA4XHU3YjAzXHU3YjA0XHU3YjE1XHU3YjBhXHU3YjJiXHU3YjBmXHU3YjQ3XHU3YjM4XHU3YjJhXHU3YjE5XHU3YjJlXHU3YjMxXHU3YjIwXHU3YjI1XHU3YjI0XHU3YjMzXHU3YjNlXHU3YjFlXHU3YjU4XHU3YjVhXHU3YjQ1XHU3Yjc1''@;'; put 'put ''XHU3YjRjXHU3YjVkXHU3YjYwXHU3YjZlXHU3YjdiXHU3YjYyXHU3YjcyXHU3YjcxXHU3YjkwXHU3YmE2XHU3YmE3XHU3YmI4XHU3YmFjXHU3YjlkXHU3YmE4XHU3Yjg1XHU3YmFhXHU3YjljXHU3YmEyXHU3YmFiXHU3YmI0XHU3YmQxXHU3YmMxXHU3YmNjXHU3YmRkXHU3YmRhXHU3YmU1XHU3''@;'; put 'put ''YmU2XHU3YmVhXHU3YzBjXHU3YmZlXHU3YmZjXHU3YzBmXHU3YzE2XHU3YzBiIl0sWyJmNDQwIiwiXHU5YjA3XHU5YjA5Iiw1LCJcdTliMTBcdTliMTFcdTliMTJcdTliMTQiLDEwLCJcdTliMjBcdTliMjFcdTliMjJcdTliMjQiLDEwLCJcdTliMzBcdTliMzFcdTliMzMiLDcsIlx1OWIzZFx1''@;'; put 'put ''OWIzZVx1OWIzZlx1OWI0MFx1OWI0Nlx1OWI0YVx1OWI0Ylx1OWI0Y1x1OWI0ZVx1OWI1MFx1OWI1Mlx1OWI1M1x1OWI1NSIsNV0sWyJmNDgwIiwiXHU5YjViIiwzMiwiXHU3YzFmXHU3YzJhXHU3YzI2XHU3YzM4XHU3YzQxXHU3YzQwXHU4MWZlXHU4MjAxXHU4MjAyXHU4MjA0XHU4MWVjXHU4''@;'; put 'put ''ODQ0XHU4MjIxXHU4MjIyXHU4MjIzXHU4MjJkXHU4MjJmXHU4MjI4XHU4MjJiXHU4MjM4XHU4MjNiXHU4MjMzXHU4MjM0XHU4MjNlXHU4MjQ0XHU4MjQ5XHU4MjRiXHU4MjRmXHU4MjVhXHU4MjVmXHU4MjY4XHU4ODdlXHU4ODg1XHU4ODg4XHU4OGQ4XHU4OGRmXHU4OTVlXHU3ZjlkXHU3Zjlm''@;'; put 'put ''XHU3ZmE3XHU3ZmFmXHU3ZmIwXHU3ZmIyXHU3YzdjXHU2NTQ5XHU3YzkxXHU3YzlkXHU3YzljXHU3YzllXHU3Y2EyXHU3Y2IyXHU3Y2JjXHU3Y2JkXHU3Y2MxXHU3Y2M3XHU3Y2NjXHU3Y2NkXHU3Y2M4XHU3Y2M1XHU3Y2Q3XHU3Y2U4XHU4MjZlXHU2NmE4XHU3ZmJmXHU3ZmNlXHU3ZmQ1XHU3''@;'; put 'put ''ZmU1XHU3ZmUxXHU3ZmU2XHU3ZmU5XHU3ZmVlXHU3ZmYzXHU3Y2Y4XHU3ZDc3XHU3ZGE2XHU3ZGFlXHU3ZTQ3XHU3ZTliXHU5ZWI4XHU5ZWI0XHU4ZDczXHU4ZDg0XHU4ZDk0XHU4ZDkxXHU4ZGIxXHU4ZDY3XHU4ZDZkXHU4YzQ3XHU4YzQ5XHU5MTRhXHU5MTUwXHU5MTRlXHU5MTRmXHU5MTY0''@;'; put 'put ''Il0sWyJmNTQwIiwiXHU5YjdjIiw2Ml0sWyJmNTgwIiwiXHU5YmJiIiwzMiwiXHU5MTYyXHU5MTYxXHU5MTcwXHU5MTY5XHU5MTZmXHU5MTdkXHU5MTdlXHU5MTcyXHU5MTc0XHU5MTc5XHU5MThjXHU5MTg1XHU5MTkwXHU5MThkXHU5MTkxXHU5MWEyXHU5MWEzXHU5MWFhXHU5MWFkXHU5MWFl''@;'; put 'put ''XHU5MWFmXHU5MWI1XHU5MWI0XHU5MWJhXHU4YzU1XHU5ZTdlXHU4ZGI4XHU4ZGViXHU4ZTA1XHU4ZTU5XHU4ZTY5XHU4ZGI1XHU4ZGJmXHU4ZGJjXHU4ZGJhXHU4ZGM0XHU4ZGQ2XHU4ZGQ3XHU4ZGRhXHU4ZGRlXHU4ZGNlXHU4ZGNmXHU4ZGRiXHU4ZGM2XHU4ZGVjXHU4ZGY3XHU4ZGY4XHU4''@;'; put 'put ''ZGUzXHU4ZGY5XHU4ZGZiXHU4ZGU0XHU4ZTA5XHU4ZGZkXHU4ZTE0XHU4ZTFkXHU4ZTFmXHU4ZTJjXHU4ZTJlXHU4ZTIzXHU4ZTJmXHU4ZTNhXHU4ZTQwXHU4ZTM5XHU4ZTM1XHU4ZTNkXHU4ZTMxXHU4ZTQ5XHU4ZTQxXHU4ZTQyXHU4ZTUxXHU4ZTUyXHU4ZTRhXHU4ZTcwXHU4ZTc2XHU4ZTdj''@;'; put 'put ''XHU4ZTZmXHU4ZTc0XHU4ZTg1XHU4ZThmXHU4ZTk0XHU4ZTkwXHU4ZTljXHU4ZTllXHU4Yzc4XHU4YzgyXHU4YzhhXHU4Yzg1XHU4Yzk4XHU4Yzk0XHU2NTliXHU4OWQ2XHU4OWRlXHU4OWRhXHU4OWRjIl0sWyJmNjQwIiwiXHU5YmRjIiw2Ml0sWyJmNjgwIiwiXHU5YzFiIiwzMiwiXHU4OWU1''@;'; put 'put ''XHU4OWViXHU4OWVmXHU4YTNlXHU4YjI2XHU5NzUzXHU5NmU5XHU5NmYzXHU5NmVmXHU5NzA2XHU5NzAxXHU5NzA4XHU5NzBmXHU5NzBlXHU5NzJhXHU5NzJkXHU5NzMwXHU5NzNlXHU5ZjgwXHU5ZjgzXHU5Zjg1Iiw1LCJcdTlmOGNcdTllZmVcdTlmMGJcdTlmMGRcdTk2YjlcdTk2YmNcdTk2''@;'; put 'put ''YmRcdTk2Y2VcdTk2ZDJcdTc3YmZcdTk2ZTBcdTkyOGVcdTkyYWVcdTkyYzhcdTkzM2VcdTkzNmFcdTkzY2FcdTkzOGZcdTk0M2VcdTk0NmJcdTljN2ZcdTljODJcdTljODVcdTljODZcdTljODdcdTljODhcdTdhMjNcdTljOGJcdTljOGVcdTljOTBcdTljOTFcdTljOTJcdTljOTRcdTljOTVc''@;'; put 'put ''dTljOWFcdTljOWJcdTljOWUiLDUsIlx1OWNhNSIsNCwiXHU5Y2FiXHU5Y2FkXHU5Y2FlXHU5Y2IwIiw3LCJcdTljYmFcdTljYmJcdTljYmNcdTljYmRcdTljYzRcdTljYzVcdTljYzZcdTljYzdcdTljY2FcdTljY2IiXSxbImY3NDAiLCJcdTljM2MiLDYyXSxbImY3ODAiLCJcdTljN2JcdTlj''@;'; put 'put ''N2RcdTljN2VcdTljODBcdTljODNcdTljODRcdTljODlcdTljOGFcdTljOGNcdTljOGZcdTljOTNcdTljOTZcdTljOTdcdTljOThcdTljOTlcdTljOWRcdTljYWFcdTljYWNcdTljYWZcdTljYjlcdTljYmUiLDQsIlx1OWNjOFx1OWNjOVx1OWNkMVx1OWNkMlx1OWNkYVx1OWNkYlx1OWNlMFx1''@;'; put 'put ''OWNlMVx1OWNjYyIsNCwiXHU5Y2QzXHU5Y2Q0XHU5Y2Q1XHU5Y2Q3XHU5Y2Q4XHU5Y2Q5XHU5Y2RjXHU5Y2RkXHU5Y2RmXHU5Y2UyXHU5NzdjXHU5Nzg1XHU5NzkxXHU5NzkyXHU5Nzk0XHU5N2FmXHU5N2FiXHU5N2EzXHU5N2IyXHU5N2I0XHU5YWIxXHU5YWIwXHU5YWI3XHU5ZTU4XHU5YWI2''@;'; put 'put ''XHU5YWJhXHU5YWJjXHU5YWMxXHU5YWMwXHU5YWM1XHU5YWMyXHU5YWNiXHU5YWNjXHU5YWQxXHU5YjQ1XHU5YjQzXHU5YjQ3XHU5YjQ5XHU5YjQ4XHU5YjRkXHU5YjUxXHU5OGU4XHU5OTBkXHU5OTJlXHU5OTU1XHU5OTU0XHU5YWRmXHU5YWUxXHU5YWU2XHU5YWVmXHU5YWViXHU5YWZiXHU5''@;'; put 'put ''YWVkXHU5YWY5XHU5YjA4XHU5YjBmXHU5YjEzXHU5YjFmXHU5YjIzXHU5ZWJkXHU5ZWJlXHU3ZTNiXHU5ZTgyXHU5ZTg3XHU5ZTg4XHU5ZThiXHU5ZTkyXHU5M2Q2XHU5ZTlkXHU5ZTlmXHU5ZWRiXHU5ZWRjXHU5ZWRkXHU5ZWUwXHU5ZWRmXHU5ZWUyXHU5ZWU5XHU5ZWU3XHU5ZWU1XHU5ZWVh''@;'; put 'put ''XHU5ZWVmXHU5ZjIyXHU5ZjJjXHU5ZjJmXHU5ZjM5XHU5ZjM3XHU5ZjNkXHU5ZjNlXHU5ZjQ0Il0sWyJmODQwIiwiXHU5Y2UzIiw2Ml0sWyJmODgwIiwiXHU5ZDIyIiwzMl0sWyJmOTQwIiwiXHU5ZDQzIiw2Ml0sWyJmOTgwIiwiXHU5ZDgyIiwzMl0sWyJmYTQwIiwiXHU5ZGEzIiw2Ml0sWyJm''@;'; put 'put ''YTgwIiwiXHU5ZGUyIiwzMl0sWyJmYjQwIiwiXHU5ZTAzIiwyNywiXHU5ZTI0XHU5ZTI3XHU5ZTJlXHU5ZTMwXHU5ZTM0XHU5ZTNiXHU5ZTNjXHU5ZTQwXHU5ZTRkXHU5ZTUwXHU5ZTUyXHU5ZTUzXHU5ZTU0XHU5ZTU2XHU5ZTU5XHU5ZTVkXHU5ZTVmXHU5ZTYwXHU5ZTYxXHU5ZTYyXHU5ZTY1''@;'; put 'put ''XHU5ZTZlXHU5ZTZmXHU5ZTcyXHU5ZTc0Iiw5LCJcdTllODAiXSxbImZiODAiLCJcdTllODFcdTllODNcdTllODRcdTllODVcdTllODZcdTllODlcdTllOGFcdTllOGMiLDUsIlx1OWU5NCIsOCwiXHU5ZTllXHU5ZWEwIiw1LCJcdTllYTdcdTllYThcdTllYTlcdTllYWEiXSxbImZjNDAiLCJc''@;'; put 'put ''dTllYWIiLDgsIlx1OWViNVx1OWViNlx1OWViN1x1OWViOVx1OWViYVx1OWViY1x1OWViZiIsNCwiXHU5ZWM1XHU5ZWM2XHU5ZWM3XHU5ZWM4XHU5ZWNhXHU5ZWNiXHU5ZWNjXHU5ZWQwXHU5ZWQyXHU5ZWQzXHU5ZWQ1XHU5ZWQ2XHU5ZWQ3XHU5ZWQ5XHU5ZWRhXHU5ZWRlXHU5ZWUxXHU5ZWUz''@;'; put 'put ''XHU5ZWU0XHU5ZWU2XHU5ZWU4XHU5ZWViXHU5ZWVjXHU5ZWVkXHU5ZWVlXHU5ZWYwIiw4LCJcdTllZmFcdTllZmRcdTllZmYiLDZdLFsiZmM4MCIsIlx1OWYwNiIsNCwiXHU5ZjBjXHU5ZjBmXHU5ZjExXHU5ZjEyXHU5ZjE0XHU5ZjE1XHU5ZjE2XHU5ZjE4XHU5ZjFhIiw1LCJcdTlmMjFcdTlm''@;'; put 'put ''MjMiLDgsIlx1OWYyZFx1OWYyZVx1OWYzMFx1OWYzMSJdLFsiZmQ0MCIsIlx1OWYzMiIsNCwiXHU5ZjM4XHU5ZjNhXHU5ZjNjXHU5ZjNmIiw0LCJcdTlmNDUiLDEwLCJcdTlmNTIiLDM4XSxbImZkODAiLCJcdTlmNzkiLDUsIlx1OWY4MVx1OWY4Mlx1OWY4ZCIsMTEsIlx1OWY5Y1x1OWY5ZFx1''@;'; put 'put ''OWY5ZVx1OWZhMSIsNCwiXHVmOTJjXHVmOTc5XHVmOTk1XHVmOWU3XHVmOWYxIl0sWyJmZTQwIiwiXHVmYTBjXHVmYTBkXHVmYTBlXHVmYTBmXHVmYTExXHVmYTEzXHVmYTE0XHVmYTE4XHVmYTFmXHVmYTIwXHVmYTIxXHVmYTIzXHVmYTI0XHVmYTI3XHVmYTI4XHVmYTI5Il1dJyl9LDIxMTY2''@;'; put 'put ''OnVlPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9SlNPTi5wYXJzZSgnW1siMCIsIlxcdTAwMDAiLDEyN10sWyI4MTQxIiwiXHVhYzAyXHVhYzAzXHVhYzA1XHVhYzA2XHVhYzBiIiw0LCJcdWFjMThcdWFjMWVcdWFjMWZcdWFjMjFcdWFjMjJcdWFjMjNcdWFjMjUiLDYsIlx1YWMyZVx1YWMz''@;'; put 'put ''Mlx1YWMzM1x1YWMzNCJdLFsiODE2MSIsIlx1YWMzNVx1YWMzNlx1YWMzN1x1YWMzYVx1YWMzYlx1YWMzZFx1YWMzZVx1YWMzZlx1YWM0MSIsOSwiXHVhYzRjXHVhYzRlIiw1LCJcdWFjNTUiXSxbIjgxODEiLCJcdWFjNTZcdWFjNTdcdWFjNTlcdWFjNWFcdWFjNWJcdWFjNWQiLDE4LCJcdWFj''@;'; put 'put ''NzJcdWFjNzNcdWFjNzVcdWFjNzZcdWFjNzlcdWFjN2IiLDQsIlx1YWM4Mlx1YWM4N1x1YWM4OFx1YWM4ZFx1YWM4ZVx1YWM4Zlx1YWM5MVx1YWM5Mlx1YWM5M1x1YWM5NSIsNiwiXHVhYzllXHVhY2EyIiw1LCJcdWFjYWJcdWFjYWRcdWFjYWVcdWFjYjEiLDYsIlx1YWNiYVx1YWNiZVx1YWNi''@;'; put 'put ''Zlx1YWNjMFx1YWNjMlx1YWNjM1x1YWNjNVx1YWNjNlx1YWNjN1x1YWNjOVx1YWNjYVx1YWNjYlx1YWNjZCIsNywiXHVhY2Q2XHVhY2Q4Iiw3LCJcdWFjZTJcdWFjZTNcdWFjZTVcdWFjZTZcdWFjZTlcdWFjZWJcdWFjZWRcdWFjZWVcdWFjZjJcdWFjZjRcdWFjZjciLDQsIlx1YWNmZVx1YWNm''@;'; put 'put ''Zlx1YWQwMVx1YWQwMlx1YWQwM1x1YWQwNVx1YWQwNyIsNCwiXHVhZDBlXHVhZDEwXHVhZDEyXHVhZDEzIl0sWyI4MjQxIiwiXHVhZDE0XHVhZDE1XHVhZDE2XHVhZDE3XHVhZDE5XHVhZDFhXHVhZDFiXHVhZDFkXHVhZDFlXHVhZDFmXHVhZDIxIiw3LCJcdWFkMmFcdWFkMmJcdWFkMmUiLDVd''@;'; put 'put ''LFsiODI2MSIsIlx1YWQzNlx1YWQzN1x1YWQzOVx1YWQzYVx1YWQzYlx1YWQzZCIsNiwiXHVhZDQ2XHVhZDQ4XHVhZDRhIiw1LCJcdWFkNTFcdWFkNTJcdWFkNTNcdWFkNTVcdWFkNTZcdWFkNTciXSxbIjgyODEiLCJcdWFkNTkiLDcsIlx1YWQ2Mlx1YWQ2NCIsNywiXHVhZDZlXHVhZDZmXHVh''@;'; put 'put ''ZDcxXHVhZDcyXHVhZDc3XHVhZDc4XHVhZDc5XHVhZDdhXHVhZDdlXHVhZDgwXHVhZDgzIiw0LCJcdWFkOGFcdWFkOGJcdWFkOGRcdWFkOGVcdWFkOGZcdWFkOTEiLDEwLCJcdWFkOWUiLDUsIlx1YWRhNSIsMTcsIlx1YWRiOCIsNywiXHVhZGMyXHVhZGMzXHVhZGM1XHVhZGM2XHVhZGM3XHVh''@;'; put 'put ''ZGM5Iiw2LCJcdWFkZDJcdWFkZDQiLDcsIlx1YWRkZFx1YWRkZVx1YWRkZlx1YWRlMVx1YWRlMlx1YWRlM1x1YWRlNSIsMThdLFsiODM0MSIsIlx1YWRmYVx1YWRmYlx1YWRmZFx1YWRmZVx1YWUwMiIsNSwiXHVhZTBhXHVhZTBjXHVhZTBlIiw1LCJcdWFlMTUiLDddLFsiODM2MSIsIlx1YWUx''@;'; put 'put ''ZCIsMTgsIlx1YWUzMlx1YWUzM1x1YWUzNVx1YWUzNlx1YWUzOVx1YWUzYlx1YWUzYyJdLFsiODM4MSIsIlx1YWUzZFx1YWUzZVx1YWUzZlx1YWU0Mlx1YWU0NFx1YWU0N1x1YWU0OFx1YWU0OVx1YWU0Ylx1YWU0Zlx1YWU1MVx1YWU1Mlx1YWU1M1x1YWU1NVx1YWU1NyIsNCwiXHVhZTVlXHVh''@;'; put 'put ''ZTYyXHVhZTYzXHVhZTY0XHVhZTY2XHVhZTY3XHVhZTZhXHVhZTZiXHVhZTZkXHVhZTZlXHVhZTZmXHVhZTcxIiw2LCJcdWFlN2FcdWFlN2UiLDUsIlx1YWU4NiIsNSwiXHVhZThkIiw0NiwiXHVhZWJmXHVhZWMxXHVhZWMyXHVhZWMzXHVhZWM1Iiw2LCJcdWFlY2VcdWFlZDIiLDUsIlx1YWVk''@;'; put 'put ''YVx1YWVkYlx1YWVkZCIsOF0sWyI4NDQxIiwiXHVhZWU2XHVhZWU3XHVhZWU5XHVhZWVhXHVhZWVjXHVhZWVlIiw1LCJcdWFlZjVcdWFlZjZcdWFlZjdcdWFlZjlcdWFlZmFcdWFlZmJcdWFlZmQiLDhdLFsiODQ2MSIsIlx1YWYwNlx1YWYwOVx1YWYwYVx1YWYwYlx1YWYwY1x1YWYwZVx1YWYw''@;'; put 'put ''Zlx1YWYxMSIsMThdLFsiODQ4MSIsIlx1YWYyNCIsNywiXHVhZjJlXHVhZjJmXHVhZjMxXHVhZjMzXHVhZjM1Iiw2LCJcdWFmM2VcdWFmNDBcdWFmNDRcdWFmNDVcdWFmNDZcdWFmNDdcdWFmNGEiLDUsIlx1YWY1MSIsMTAsIlx1YWY1ZSIsNSwiXHVhZjY2IiwxOCwiXHVhZjdhIiw1LCJcdWFm''@;'; put 'put ''ODFcdWFmODJcdWFmODNcdWFmODVcdWFmODZcdWFmODdcdWFmODkiLDYsIlx1YWY5Mlx1YWY5M1x1YWY5NFx1YWY5NiIsNSwiXHVhZjlkIiwyNiwiXHVhZmJhXHVhZmJiXHVhZmJkXHVhZmJlIl0sWyI4NTQxIiwiXHVhZmJmXHVhZmMxIiw1LCJcdWFmY2FcdWFmY2NcdWFmY2YiLDQsIlx1YWZk''@;'; put 'put ''NSIsNiwiXHVhZmRkIiw0XSxbIjg1NjEiLCJcdWFmZTIiLDUsIlx1YWZlYSIsNSwiXHVhZmYyXHVhZmYzXHVhZmY1XHVhZmY2XHVhZmY3XHVhZmY5Iiw2LCJcdWIwMDJcdWIwMDMiXSxbIjg1ODEiLCJcdWIwMDUiLDYsIlx1YjAwZFx1YjAwZVx1YjAwZlx1YjAxMVx1YjAxMlx1YjAxM1x1YjAx''@;'; put 'put ''NSIsNiwiXHViMDFlIiw5LCJcdWIwMjkiLDI2LCJcdWIwNDZcdWIwNDdcdWIwNDlcdWIwNGJcdWIwNGRcdWIwNGZcdWIwNTBcdWIwNTFcdWIwNTJcdWIwNTZcdWIwNThcdWIwNWFcdWIwNWJcdWIwNWNcdWIwNWUiLDI5LCJcdWIwN2VcdWIwN2ZcdWIwODFcdWIwODJcdWIwODNcdWIwODUiLDYs''@;'; put 'put ''Ilx1YjA4ZVx1YjA5MFx1YjA5MiIsNSwiXHViMDliXHViMDlkXHViMDllXHViMGEzXHViMGE0Il0sWyI4NjQxIiwiXHViMGE1XHViMGE2XHViMGE3XHViMGFhXHViMGIwXHViMGIyXHViMGI2XHViMGI3XHViMGI5XHViMGJhXHViMGJiXHViMGJkIiw2LCJcdWIwYzZcdWIwY2EiLDUsIlx1YjBk''@;'; put 'put ''MiJdLFsiODY2MSIsIlx1YjBkM1x1YjBkNVx1YjBkNlx1YjBkN1x1YjBkOSIsNiwiXHViMGUxXHViMGUyXHViMGUzXHViMGU0XHViMGU2IiwxMF0sWyI4NjgxIiwiXHViMGYxIiwyMiwiXHViMTBhXHViMTBkXHViMTBlXHViMTBmXHViMTExXHViMTE0XHViMTE1XHViMTE2XHViMTE3XHViMTFh''@;'; put 'put ''XHViMTFlIiw0LCJcdWIxMjZcdWIxMjdcdWIxMjlcdWIxMmFcdWIxMmJcdWIxMmQiLDYsIlx1YjEzNlx1YjEzYSIsNSwiXHViMTQyXHViMTQzXHViMTQ1XHViMTQ2XHViMTQ3XHViMTQ5Iiw2LCJcdWIxNTJcdWIxNTNcdWIxNTZcdWIxNTdcdWIxNTlcdWIxNWFcdWIxNWJcdWIxNWRcdWIxNWVc''@;'; put 'put ''dWIxNWZcdWIxNjEiLDIyLCJcdWIxN2FcdWIxN2JcdWIxN2RcdWIxN2VcdWIxN2ZcdWIxODFcdWIxODMiLDQsIlx1YjE4YVx1YjE4Y1x1YjE4ZVx1YjE4Zlx1YjE5MFx1YjE5MVx1YjE5NVx1YjE5Nlx1YjE5N1x1YjE5OVx1YjE5YVx1YjE5Ylx1YjE5ZCJdLFsiODc0MSIsIlx1YjE5ZSIsOSwi''@;'; put 'put ''XHViMWE5IiwxNV0sWyI4NzYxIiwiXHViMWI5IiwxOCwiXHViMWNkXHViMWNlXHViMWNmXHViMWQxXHViMWQyXHViMWQzXHViMWQ1Il0sWyI4NzgxIiwiXHViMWQ2Iiw1LCJcdWIxZGVcdWIxZTAiLDcsIlx1YjFlYVx1YjFlYlx1YjFlZFx1YjFlZVx1YjFlZlx1YjFmMSIsNywiXHViMWZhXHVi''@;'; put 'put ''MWZjXHViMWZlIiw1LCJcdWIyMDZcdWIyMDdcdWIyMDlcdWIyMGFcdWIyMGQiLDYsIlx1YjIxNlx1YjIxOFx1YjIxYSIsNSwiXHViMjIxIiwxOCwiXHViMjM1Iiw2LCJcdWIyM2QiLDI2LCJcdWIyNTlcdWIyNWFcdWIyNWJcdWIyNWRcdWIyNWVcdWIyNWZcdWIyNjEiLDYsIlx1YjI2YSIsNF0s''@;'; put 'put ''WyI4ODQxIiwiXHViMjZmIiw0LCJcdWIyNzYiLDUsIlx1YjI3ZCIsNiwiXHViMjg2XHViMjg3XHViMjg4XHViMjhhIiw0XSxbIjg4NjEiLCJcdWIyOGZcdWIyOTJcdWIyOTNcdWIyOTVcdWIyOTZcdWIyOTdcdWIyOWIiLDQsIlx1YjJhMlx1YjJhNFx1YjJhN1x1YjJhOFx1YjJhOVx1YjJhYlx1''@;'; put 'put ''YjJhZFx1YjJhZVx1YjJhZlx1YjJiMVx1YjJiMlx1YjJiM1x1YjJiNVx1YjJiNlx1YjJiNyJdLFsiODg4MSIsIlx1YjJiOCIsMTUsIlx1YjJjYVx1YjJjYlx1YjJjZFx1YjJjZVx1YjJjZlx1YjJkMVx1YjJkMyIsNCwiXHViMmRhXHViMmRjXHViMmRlXHViMmRmXHViMmUwXHViMmUxXHViMmUz''@;'; put 'put ''XHViMmU3XHViMmU5XHViMmVhXHViMmYwXHViMmYxXHViMmYyXHViMmY2XHViMmZjXHViMmZkXHViMmZlXHViMzAyXHViMzAzXHViMzA1XHViMzA2XHViMzA3XHViMzA5Iiw2LCJcdWIzMTJcdWIzMTYiLDUsIlx1YjMxZCIsNTQsIlx1YjM1N1x1YjM1OVx1YjM1YVx1YjM1ZFx1YjM2MFx1YjM2''@;'; put 'put ''MVx1YjM2Mlx1YjM2MyJdLFsiODk0MSIsIlx1YjM2Nlx1YjM2OFx1YjM2YVx1YjM2Y1x1YjM2ZFx1YjM2Zlx1YjM3Mlx1YjM3M1x1YjM3NVx1YjM3Nlx1YjM3N1x1YjM3OSIsNiwiXHViMzgyXHViMzg2Iiw1LCJcdWIzOGQiXSxbIjg5NjEiLCJcdWIzOGVcdWIzOGZcdWIzOTFcdWIzOTJcdWIz''@;'; put 'put ''OTNcdWIzOTUiLDEwLCJcdWIzYTIiLDUsIlx1YjNhOVx1YjNhYVx1YjNhYlx1YjNhZCJdLFsiODk4MSIsIlx1YjNhZSIsMjEsIlx1YjNjNlx1YjNjN1x1YjNjOVx1YjNjYVx1YjNjZFx1YjNjZlx1YjNkMVx1YjNkMlx1YjNkM1x1YjNkNlx1YjNkOFx1YjNkYVx1YjNkY1x1YjNkZVx1YjNkZlx1''@;'; put 'put ''YjNlMVx1YjNlMlx1YjNlM1x1YjNlNVx1YjNlNlx1YjNlN1x1YjNlOSIsMTgsIlx1YjNmZCIsMTgsIlx1YjQxMSIsNiwiXHViNDE5XHViNDFhXHViNDFiXHViNDFkXHViNDFlXHViNDFmXHViNDIxIiw2LCJcdWI0MmFcdWI0MmMiLDcsIlx1YjQzNSIsMTVdLFsiOGE0MSIsIlx1YjQ0NSIsMTAs''@;'; put 'put ''Ilx1YjQ1Mlx1YjQ1M1x1YjQ1NVx1YjQ1Nlx1YjQ1N1x1YjQ1OSIsNiwiXHViNDYyXHViNDY0XHViNDY2Il0sWyI4YTYxIiwiXHViNDY3Iiw0LCJcdWI0NmQiLDE4LCJcdWI0ODFcdWI0ODIiXSxbIjhhODEiLCJcdWI0ODMiLDQsIlx1YjQ4OSIsMTksIlx1YjQ5ZSIsNSwiXHViNGE1XHViNGE2''@;'; put 'put ''XHViNGE3XHViNGE5XHViNGFhXHViNGFiXHViNGFkIiw3LCJcdWI0YjZcdWI0YjhcdWI0YmEiLDUsIlx1YjRjMVx1YjRjMlx1YjRjM1x1YjRjNVx1YjRjNlx1YjRjN1x1YjRjOSIsNiwiXHViNGQxXHViNGQyXHViNGQzXHViNGQ0XHViNGQ2Iiw1LCJcdWI0ZGVcdWI0ZGZcdWI0ZTFcdWI0ZTJc''@;'; put 'put ''dWI0ZTVcdWI0ZTciLDQsIlx1YjRlZVx1YjRmMFx1YjRmMiIsNSwiXHViNGY5IiwyNiwiXHViNTE2XHViNTE3XHViNTE5XHViNTFhXHViNTFkIl0sWyI4YjQxIiwiXHViNTFlIiw1LCJcdWI1MjZcdWI1MmIiLDQsIlx1YjUzMlx1YjUzM1x1YjUzNVx1YjUzNlx1YjUzN1x1YjUzOSIsNiwiXHVi''@;'; put 'put ''NTQyXHViNTQ2Il0sWyI4YjYxIiwiXHViNTQ3XHViNTQ4XHViNTQ5XHViNTRhXHViNTRlXHViNTRmXHViNTUxXHViNTUyXHViNTUzXHViNTU1Iiw2LCJcdWI1NWVcdWI1NjIiLDhdLFsiOGI4MSIsIlx1YjU2YiIsNTIsIlx1YjVhMlx1YjVhM1x1YjVhNVx1YjVhNlx1YjVhN1x1YjVhOVx1YjVh''@;'; put 'put ''Y1x1YjVhZFx1YjVhZVx1YjVhZlx1YjViMlx1YjViNiIsNCwiXHViNWJlXHViNWJmXHViNWMxXHViNWMyXHViNWMzXHViNWM1Iiw2LCJcdWI1Y2VcdWI1ZDIiLDUsIlx1YjVkOSIsMTgsIlx1YjVlZCIsMThdLFsiOGM0MSIsIlx1YjYwMCIsMTUsIlx1YjYxMlx1YjYxM1x1YjYxNVx1YjYxNlx1''@;'; put 'put ''YjYxN1x1YjYxOSIsNF0sWyI4YzYxIiwiXHViNjFlIiw2LCJcdWI2MjYiLDUsIlx1YjYyZCIsNiwiXHViNjM1Iiw1XSxbIjhjODEiLCJcdWI2M2IiLDEyLCJcdWI2NDkiLDI2LCJcdWI2NjVcdWI2NjZcdWI2NjdcdWI2NjkiLDUwLCJcdWI2OWVcdWI2OWZcdWI2YTFcdWI2YTJcdWI2YTNcdWI2''@;'; put 'put ''YTUiLDUsIlx1YjZhZFx1YjZhZVx1YjZhZlx1YjZiMFx1YjZiMiIsMTZdLFsiOGQ0MSIsIlx1YjZjMyIsMTYsIlx1YjZkNSIsOF0sWyI4ZDYxIiwiXHViNmRlIiwxNywiXHViNmYxXHViNmYyXHViNmYzXHViNmY1XHViNmY2XHViNmY3XHViNmY5XHViNmZhIl0sWyI4ZDgxIiwiXHViNmZiIiw0''@;'; put 'put ''LCJcdWI3MDJcdWI3MDNcdWI3MDRcdWI3MDYiLDMzLCJcdWI3MmFcdWI3MmJcdWI3MmRcdWI3MmVcdWI3MzEiLDYsIlx1YjczYVx1YjczYyIsNywiXHViNzQ1XHViNzQ2XHViNzQ3XHViNzQ5XHViNzRhXHViNzRiXHViNzRkIiw2LCJcdWI3NTYiLDksIlx1Yjc2MVx1Yjc2Mlx1Yjc2M1x1Yjc2''@;'; put 'put ''NVx1Yjc2Nlx1Yjc2N1x1Yjc2OSIsNiwiXHViNzcyXHViNzc0XHViNzc2Iiw1LCJcdWI3N2VcdWI3N2ZcdWI3ODFcdWI3ODJcdWI3ODNcdWI3ODUiLDYsIlx1Yjc4ZVx1Yjc5M1x1Yjc5NFx1Yjc5NVx1Yjc5YVx1Yjc5Ylx1Yjc5ZFx1Yjc5ZSJdLFsiOGU0MSIsIlx1Yjc5Zlx1YjdhMSIsNiwi''@;'; put 'put ''XHViN2FhXHViN2FlIiw1LCJcdWI3YjZcdWI3YjdcdWI3YjkiLDhdLFsiOGU2MSIsIlx1YjdjMiIsNCwiXHViN2M4XHViN2NhIiwxOV0sWyI4ZTgxIiwiXHViN2RlIiwxMywiXHViN2VlXHViN2VmXHViN2YxXHViN2YyXHViN2YzXHViN2Y1Iiw2LCJcdWI3ZmVcdWI4MDIiLDQsIlx1YjgwYVx1''@;'; put 'put ''YjgwYlx1YjgwZFx1YjgwZVx1YjgwZlx1YjgxMSIsNiwiXHViODFhXHViODFjXHViODFlIiw1LCJcdWI4MjZcdWI4MjdcdWI4MjlcdWI4MmFcdWI4MmJcdWI4MmQiLDYsIlx1YjgzNlx1YjgzYSIsNSwiXHViODQxXHViODQyXHViODQzXHViODQ1IiwxMSwiXHViODUyXHViODU0Iiw3LCJcdWI4''@;'; put 'put ''NWVcdWI4NWZcdWI4NjFcdWI4NjJcdWI4NjNcdWI4NjUiLDYsIlx1Yjg2ZVx1Yjg3MFx1Yjg3MiIsNSwiXHViODc5XHViODdhXHViODdiXHViODdkIiw3XSxbIjhmNDEiLCJcdWI4ODUiLDcsIlx1Yjg4ZSIsMTddLFsiOGY2MSIsIlx1YjhhMCIsNywiXHViOGE5Iiw2LCJcdWI4YjFcdWI4YjJc''@;'; put 'put ''dWI4YjNcdWI4YjVcdWI4YjZcdWI4YjdcdWI4YjkiLDRdLFsiOGY4MSIsIlx1YjhiZVx1YjhiZlx1YjhjMlx1YjhjNFx1YjhjNiIsNSwiXHViOGNkXHViOGNlXHViOGNmXHViOGQxXHViOGQyXHViOGQzXHViOGQ1Iiw3LCJcdWI4ZGVcdWI4ZTBcdWI4ZTIiLDUsIlx1YjhlYVx1YjhlYlx1Yjhl''@;'; put 'put ''ZFx1YjhlZVx1YjhlZlx1YjhmMSIsNiwiXHViOGZhXHViOGZjXHViOGZlIiw1LCJcdWI5MDUiLDE4LCJcdWI5MTkiLDYsIlx1YjkyMSIsMjYsIlx1YjkzZVx1YjkzZlx1Yjk0MVx1Yjk0Mlx1Yjk0M1x1Yjk0NSIsNiwiXHViOTRkXHViOTRlXHViOTUwXHViOTUyIiw1XSxbIjkwNDEiLCJcdWI5''@;'; put 'put ''NWFcdWI5NWJcdWI5NWRcdWI5NWVcdWI5NWZcdWI5NjEiLDYsIlx1Yjk2YVx1Yjk2Y1x1Yjk2ZSIsNSwiXHViOTc2XHViOTc3XHViOTc5XHViOTdhXHViOTdiXHViOTdkIl0sWyI5MDYxIiwiXHViOTdlIiw1LCJcdWI5ODZcdWI5ODhcdWI5OGJcdWI5OGNcdWI5OGYiLDE1XSxbIjkwODEiLCJc''@;'; put 'put ''dWI5OWYiLDEyLCJcdWI5YWVcdWI5YWZcdWI5YjFcdWI5YjJcdWI5YjNcdWI5YjUiLDYsIlx1YjliZVx1YjljMFx1YjljMiIsNSwiXHViOWNhXHViOWNiXHViOWNkXHViOWQzIiw0LCJcdWI5ZGFcdWI5ZGNcdWI5ZGZcdWI5ZTBcdWI5ZTJcdWI5ZTZcdWI5ZTdcdWI5ZTlcdWI5ZWFcdWI5ZWJc''@;'; put 'put ''dWI5ZWQiLDYsIlx1YjlmNlx1YjlmYiIsNCwiXHViYTAyIiw1LCJcdWJhMDkiLDExLCJcdWJhMTYiLDMzLCJcdWJhM2FcdWJhM2JcdWJhM2RcdWJhM2VcdWJhM2ZcdWJhNDFcdWJhNDNcdWJhNDRcdWJhNDVcdWJhNDYiXSxbIjkxNDEiLCJcdWJhNDdcdWJhNGFcdWJhNGNcdWJhNGZcdWJhNTBc''@;'; put 'put ''dWJhNTFcdWJhNTJcdWJhNTZcdWJhNTdcdWJhNTlcdWJhNWFcdWJhNWJcdWJhNWQiLDYsIlx1YmE2Nlx1YmE2YSIsNV0sWyI5MTYxIiwiXHViYTcyXHViYTczXHViYTc1XHViYTc2XHViYTc3XHViYTc5Iiw5LCJcdWJhODZcdWJhODhcdWJhODlcdWJhOGFcdWJhOGJcdWJhOGQiLDVdLFsiOTE4''@;'; put 'put ''MSIsIlx1YmE5MyIsMjAsIlx1YmFhYVx1YmFhZFx1YmFhZVx1YmFhZlx1YmFiMVx1YmFiMyIsNCwiXHViYWJhXHViYWJjXHViYWJlIiw1LCJcdWJhYzVcdWJhYzZcdWJhYzdcdWJhYzkiLDE0LCJcdWJhZGEiLDMzLCJcdWJhZmRcdWJhZmVcdWJhZmZcdWJiMDFcdWJiMDJcdWJiMDNcdWJiMDUi''@;'; put 'put ''LDcsIlx1YmIwZVx1YmIxMFx1YmIxMiIsNSwiXHViYjE5XHViYjFhXHViYjFiXHViYjFkXHViYjFlXHViYjFmXHViYjIxIiw2XSxbIjkyNDEiLCJcdWJiMjhcdWJiMmFcdWJiMmMiLDcsIlx1YmIzN1x1YmIzOVx1YmIzYVx1YmIzZiIsNCwiXHViYjQ2XHViYjQ4XHViYjRhXHViYjRiXHViYjRj''@;'; put 'put ''XHViYjRlXHViYjUxXHViYjUyIl0sWyI5MjYxIiwiXHViYjUzXHViYjU1XHViYjU2XHViYjU3XHViYjU5Iiw3LCJcdWJiNjJcdWJiNjQiLDcsIlx1YmI2ZCIsNF0sWyI5MjgxIiwiXHViYjcyIiwyMSwiXHViYjg5XHViYjhhXHViYjhiXHViYjhkXHViYjhlXHViYjhmXHViYjkxIiwxOCwiXHVi''@;'; put 'put ''YmE1XHViYmE2XHViYmE3XHViYmE5XHViYmFhXHViYmFiXHViYmFkIiw2LCJcdWJiYjVcdWJiYjZcdWJiYjgiLDcsIlx1YmJjMVx1YmJjMlx1YmJjM1x1YmJjNVx1YmJjNlx1YmJjN1x1YmJjOSIsNiwiXHViYmQxXHViYmQyXHViYmQ0IiwzNSwiXHViYmZhXHViYmZiXHViYmZkXHViYmZlXHVi''@;'; put 'put ''YzAxIl0sWyI5MzQxIiwiXHViYzAzIiw0LCJcdWJjMGFcdWJjMGVcdWJjMTBcdWJjMTJcdWJjMTNcdWJjMTlcdWJjMWFcdWJjMjBcdWJjMjFcdWJjMjJcdWJjMjNcdWJjMjZcdWJjMjhcdWJjMmFcdWJjMmJcdWJjMmNcdWJjMmVcdWJjMmZcdWJjMzJcdWJjMzNcdWJjMzUiXSxbIjkzNjEiLCJc''@;'; put 'put ''dWJjMzZcdWJjMzdcdWJjMzkiLDYsIlx1YmM0Mlx1YmM0Nlx1YmM0N1x1YmM0OFx1YmM0YVx1YmM0Ylx1YmM0ZVx1YmM0Zlx1YmM1MSIsOF0sWyI5MzgxIiwiXHViYzVhXHViYzViXHViYzVjXHViYzVlIiwzNywiXHViYzg2XHViYzg3XHViYzg5XHViYzhhXHViYzhkXHViYzhmIiw0LCJcdWJj''@;'; put 'put ''OTZcdWJjOThcdWJjOWIiLDQsIlx1YmNhMlx1YmNhM1x1YmNhNVx1YmNhNlx1YmNhOSIsNiwiXHViY2IyXHViY2I2Iiw1LCJcdWJjYmVcdWJjYmZcdWJjYzFcdWJjYzJcdWJjYzNcdWJjYzUiLDcsIlx1YmNjZVx1YmNkMlx1YmNkM1x1YmNkNFx1YmNkNlx1YmNkN1x1YmNkOVx1YmNkYVx1YmNk''@;'; put 'put ''Ylx1YmNkZCIsMjIsIlx1YmNmN1x1YmNmOVx1YmNmYVx1YmNmYlx1YmNmZCJdLFsiOTQ0MSIsIlx1YmNmZSIsNSwiXHViZDA2XHViZDA4XHViZDBhIiw1LCJcdWJkMTFcdWJkMTJcdWJkMTNcdWJkMTUiLDhdLFsiOTQ2MSIsIlx1YmQxZSIsNSwiXHViZDI1Iiw2LCJcdWJkMmQiLDEyXSxbIjk0''@;'; put 'put ''ODEiLCJcdWJkM2EiLDUsIlx1YmQ0MSIsNiwiXHViZDRhXHViZDRiXHViZDRkXHViZDRlXHViZDRmXHViZDUxIiw2LCJcdWJkNWEiLDksIlx1YmQ2NVx1YmQ2Nlx1YmQ2N1x1YmQ2OSIsMjIsIlx1YmQ4Mlx1YmQ4M1x1YmQ4NVx1YmQ4Nlx1YmQ4YiIsNCwiXHViZDkyXHViZDk0XHViZDk2XHVi''@;'; put 'put ''ZDk3XHViZDk4XHViZDliXHViZDlkIiw2LCJcdWJkYTUiLDEwLCJcdWJkYjEiLDYsIlx1YmRiOSIsMjRdLFsiOTU0MSIsIlx1YmRkMlx1YmRkM1x1YmRkNlx1YmRkN1x1YmRkOVx1YmRkYVx1YmRkYlx1YmRkZCIsMTEsIlx1YmRlYSIsNSwiXHViZGYxIl0sWyI5NTYxIiwiXHViZGYyXHViZGYz''@;'; put 'put ''XHViZGY1XHViZGY2XHViZGY3XHViZGY5Iiw2LCJcdWJlMDFcdWJlMDJcdWJlMDRcdWJlMDYiLDUsIlx1YmUwZVx1YmUwZlx1YmUxMVx1YmUxMlx1YmUxMyJdLFsiOTU4MSIsIlx1YmUxNSIsNiwiXHViZTFlXHViZTIwIiwzNSwiXHViZTQ2XHViZTQ3XHViZTQ5XHViZTRhXHViZTRiXHViZTRk''@;'; put 'put ''XHViZTRmIiw0LCJcdWJlNTZcdWJlNThcdWJlNWNcdWJlNWRcdWJlNWVcdWJlNWZcdWJlNjJcdWJlNjNcdWJlNjVcdWJlNjZcdWJlNjdcdWJlNjlcdWJlNmIiLDQsIlx1YmU3Mlx1YmU3NiIsNCwiXHViZTdlXHViZTdmXHViZTgxXHViZTgyXHViZTgzXHViZTg1Iiw2LCJcdWJlOGVcdWJlOTIi''@;'; put 'put ''LDUsIlx1YmU5YSIsMTMsIlx1YmVhOSIsMTRdLFsiOTY0MSIsIlx1YmViOCIsMjMsIlx1YmVkMlx1YmVkMyJdLFsiOTY2MSIsIlx1YmVkNVx1YmVkNlx1YmVkOSIsNiwiXHViZWUxXHViZWUyXHViZWU2Iiw1LCJcdWJlZWQiLDhdLFsiOTY4MSIsIlx1YmVmNiIsMTAsIlx1YmYwMiIsNSwiXHVi''@;'; put 'put ''ZjBhIiwxMywiXHViZjFhXHViZjFlIiwzMywiXHViZjQyXHViZjQzXHViZjQ1XHViZjQ2XHViZjQ3XHViZjQ5Iiw2LCJcdWJmNTJcdWJmNTNcdWJmNTRcdWJmNTYiLDQ0XSxbIjk3NDEiLCJcdWJmODMiLDE2LCJcdWJmOTUiLDhdLFsiOTc2MSIsIlx1YmY5ZSIsMTcsIlx1YmZiMSIsN10sWyI5''@;'; put 'put ''NzgxIiwiXHViZmI5IiwxMSwiXHViZmM2Iiw1LCJcdWJmY2VcdWJmY2ZcdWJmZDFcdWJmZDJcdWJmZDNcdWJmZDUiLDYsIlx1YmZkZFx1YmZkZVx1YmZlMFx1YmZlMiIsODksIlx1YzAzZFx1YzAzZVx1YzAzZiJdLFsiOTg0MSIsIlx1YzA0MCIsMTYsIlx1YzA1MiIsNSwiXHVjMDU5XHVjMDVh''@;'; put 'put ''XHVjMDViIl0sWyI5ODYxIiwiXHVjMDVkXHVjMDVlXHVjMDVmXHVjMDYxIiw2LCJcdWMwNmEiLDE1XSxbIjk4ODEiLCJcdWMwN2EiLDIxLCJcdWMwOTJcdWMwOTNcdWMwOTVcdWMwOTZcdWMwOTdcdWMwOTkiLDYsIlx1YzBhMlx1YzBhNFx1YzBhNiIsNSwiXHVjMGFlXHVjMGIxXHVjMGIyXHVj''@;'; put 'put ''MGI3Iiw0LCJcdWMwYmVcdWMwYzJcdWMwYzNcdWMwYzRcdWMwYzZcdWMwYzdcdWMwY2FcdWMwY2JcdWMwY2RcdWMwY2VcdWMwY2ZcdWMwZDEiLDYsIlx1YzBkYVx1YzBkZSIsNSwiXHVjMGU2XHVjMGU3XHVjMGU5XHVjMGVhXHVjMGViXHVjMGVkIiw2LCJcdWMwZjZcdWMwZjhcdWMwZmEiLDUs''@;'; put 'put ''Ilx1YzEwMVx1YzEwMlx1YzEwM1x1YzEwNVx1YzEwNlx1YzEwN1x1YzEwOSIsNiwiXHVjMTExXHVjMTEyXHVjMTEzXHVjMTE0XHVjMTE2Iiw1LCJcdWMxMjFcdWMxMjJcdWMxMjVcdWMxMjhcdWMxMjlcdWMxMmFcdWMxMmJcdWMxMmUiXSxbIjk5NDEiLCJcdWMxMzJcdWMxMzNcdWMxMzRcdWMx''@;'; put 'put ''MzVcdWMxMzdcdWMxM2FcdWMxM2JcdWMxM2RcdWMxM2VcdWMxM2ZcdWMxNDEiLDYsIlx1YzE0YVx1YzE0ZSIsNSwiXHVjMTU2XHVjMTU3Il0sWyI5OTYxIiwiXHVjMTU5XHVjMTVhXHVjMTViXHVjMTVkIiw2LCJcdWMxNjZcdWMxNmEiLDUsIlx1YzE3MVx1YzE3Mlx1YzE3M1x1YzE3NVx1YzE3''@;'; put 'put ''Nlx1YzE3N1x1YzE3OVx1YzE3YVx1YzE3YiJdLFsiOTk4MSIsIlx1YzE3YyIsOCwiXHVjMTg2Iiw1LCJcdWMxOGZcdWMxOTFcdWMxOTJcdWMxOTNcdWMxOTVcdWMxOTciLDQsIlx1YzE5ZVx1YzFhMFx1YzFhMlx1YzFhM1x1YzFhNFx1YzFhNlx1YzFhN1x1YzFhYVx1YzFhYlx1YzFhZFx1YzFh''@;'; put 'put ''ZVx1YzFhZlx1YzFiMSIsMTEsIlx1YzFiZSIsNSwiXHVjMWM1XHVjMWM2XHVjMWM3XHVjMWM5XHVjMWNhXHVjMWNiXHVjMWNkIiw2LCJcdWMxZDVcdWMxZDZcdWMxZDkiLDYsIlx1YzFlMVx1YzFlMlx1YzFlM1x1YzFlNVx1YzFlNlx1YzFlN1x1YzFlOSIsNiwiXHVjMWYyXHVjMWY0Iiw3LCJc''@;'; put 'put ''dWMxZmVcdWMxZmZcdWMyMDFcdWMyMDJcdWMyMDNcdWMyMDUiLDYsIlx1YzIwZVx1YzIxMFx1YzIxMiIsNSwiXHVjMjFhXHVjMjFiXHVjMjFkXHVjMjFlXHVjMjIxXHVjMjIyXHVjMjIzIl0sWyI5YTQxIiwiXHVjMjI0XHVjMjI1XHVjMjI2XHVjMjI3XHVjMjJhXHVjMjJjXHVjMjJlXHVjMjMw''@;'; put 'put ''XHVjMjMzXHVjMjM1IiwxNl0sWyI5YTYxIiwiXHVjMjQ2XHVjMjQ3XHVjMjQ5Iiw2LCJcdWMyNTJcdWMyNTNcdWMyNTVcdWMyNTZcdWMyNTdcdWMyNTkiLDYsIlx1YzI2MVx1YzI2Mlx1YzI2M1x1YzI2NFx1YzI2NiJdLFsiOWE4MSIsIlx1YzI2NyIsNCwiXHVjMjZlXHVjMjZmXHVjMjcxXHVj''@;'; put 'put ''MjcyXHVjMjczXHVjMjc1Iiw2LCJcdWMyN2VcdWMyODBcdWMyODIiLDUsIlx1YzI4YSIsNSwiXHVjMjkxIiw2LCJcdWMyOTlcdWMyOWFcdWMyOWNcdWMyOWUiLDUsIlx1YzJhNlx1YzJhN1x1YzJhOVx1YzJhYVx1YzJhYlx1YzJhZSIsNSwiXHVjMmI2XHVjMmI4XHVjMmJhIiwzMywiXHVjMmRl''@;'; put 'put ''XHVjMmRmXHVjMmUxXHVjMmUyXHVjMmU1Iiw1LCJcdWMyZWVcdWMyZjBcdWMyZjJcdWMyZjNcdWMyZjRcdWMyZjVcdWMyZjdcdWMyZmFcdWMyZmRcdWMyZmVcdWMyZmZcdWMzMDEiLDYsIlx1YzMwYVx1YzMwYlx1YzMwZVx1YzMwZiJdLFsiOWI0MSIsIlx1YzMxMFx1YzMxMVx1YzMxMlx1YzMx''@;'; put 'put ''Nlx1YzMxN1x1YzMxOVx1YzMxYVx1YzMxYlx1YzMxZCIsNiwiXHVjMzI2XHVjMzI3XHVjMzJhIiw4XSxbIjliNjEiLCJcdWMzMzMiLDE3LCJcdWMzNDYiLDddLFsiOWI4MSIsIlx1YzM0ZSIsMjUsIlx1YzM2YVx1YzM2Ylx1YzM2ZFx1YzM2ZVx1YzM2Zlx1YzM3MVx1YzM3MyIsNCwiXHVjMzdh''@;'; put 'put ''XHVjMzdiXHVjMzdlIiw1LCJcdWMzODVcdWMzODZcdWMzODdcdWMzODlcdWMzOGFcdWMzOGJcdWMzOGQiLDUwLCJcdWMzYzEiLDIyLCJcdWMzZGEiXSxbIjljNDEiLCJcdWMzZGJcdWMzZGRcdWMzZGVcdWMzZTFcdWMzZTMiLDQsIlx1YzNlYVx1YzNlYlx1YzNlY1x1YzNlZSIsNSwiXHVjM2Y2''@;'; put 'put ''XHVjM2Y3XHVjM2Y5Iiw1XSxbIjljNjEiLCJcdWMzZmYiLDgsIlx1YzQwOSIsNiwiXHVjNDExIiw5XSxbIjljODEiLCJcdWM0MWIiLDgsIlx1YzQyNSIsNiwiXHVjNDJkXHVjNDJlXHVjNDJmXHVjNDMxXHVjNDMyXHVjNDMzXHVjNDM1Iiw2LCJcdWM0M2UiLDksIlx1YzQ0OSIsMjYsIlx1YzQ2''@;'; put 'put ''Nlx1YzQ2N1x1YzQ2OVx1YzQ2YVx1YzQ2Ylx1YzQ2ZCIsNiwiXHVjNDc2XHVjNDc3XHVjNDc4XHVjNDdhIiw1LCJcdWM0ODEiLDE4LCJcdWM0OTUiLDYsIlx1YzQ5ZCIsMTJdLFsiOWQ0MSIsIlx1YzRhYSIsMTMsIlx1YzRiOVx1YzRiYVx1YzRiYlx1YzRiZCIsOF0sWyI5ZDYxIiwiXHVjNGM2''@;'; put 'put ''IiwyNV0sWyI5ZDgxIiwiXHVjNGUwIiw4LCJcdWM0ZWEiLDUsIlx1YzRmMlx1YzRmM1x1YzRmNVx1YzRmNlx1YzRmN1x1YzRmOVx1YzRmYlx1YzRmY1x1YzRmZFx1YzRmZVx1YzUwMiIsOSwiXHVjNTBkXHVjNTBlXHVjNTBmXHVjNTExXHVjNTEyXHVjNTEzXHVjNTE1Iiw2LCJcdWM1MWQiLDEw''@;'; put 'put ''LCJcdWM1MmFcdWM1MmJcdWM1MmRcdWM1MmVcdWM1MmZcdWM1MzEiLDYsIlx1YzUzYVx1YzUzY1x1YzUzZSIsNSwiXHVjNTQ2XHVjNTQ3XHVjNTRiXHVjNTRmXHVjNTUwXHVjNTUxXHVjNTUyXHVjNTU2XHVjNTVhXHVjNTViXHVjNTVjXHVjNTVmXHVjNTYyXHVjNTYzXHVjNTY1XHVjNTY2XHVj''@;'; put 'put ''NTY3XHVjNTY5Iiw2LCJcdWM1NzJcdWM1NzYiLDUsIlx1YzU3ZVx1YzU3Zlx1YzU4MVx1YzU4Mlx1YzU4M1x1YzU4NVx1YzU4Nlx1YzU4OFx1YzU4OVx1YzU4YVx1YzU4Ylx1YzU4ZVx1YzU5MFx1YzU5Mlx1YzU5M1x1YzU5NCJdLFsiOWU0MSIsIlx1YzU5Nlx1YzU5OVx1YzU5YVx1YzU5Ylx1''@;'; put 'put ''YzU5ZFx1YzU5ZVx1YzU5Zlx1YzVhMSIsNywiXHVjNWFhIiw5LCJcdWM1YjYiXSxbIjllNjEiLCJcdWM1YjdcdWM1YmFcdWM1YmYiLDQsIlx1YzVjYlx1YzVjZFx1YzVjZlx1YzVkMlx1YzVkM1x1YzVkNVx1YzVkNlx1YzVkN1x1YzVkOSIsNiwiXHVjNWUyXHVjNWU0XHVjNWU2XHVjNWU3Il0s''@;'; put 'put ''WyI5ZTgxIiwiXHVjNWU4XHVjNWU5XHVjNWVhXHVjNWViXHVjNWVmXHVjNWYxXHVjNWYyXHVjNWYzXHVjNWY1XHVjNWY4XHVjNWY5XHVjNWZhXHVjNWZiXHVjNjAyXHVjNjAzXHVjNjA0XHVjNjA5XHVjNjBhXHVjNjBiXHVjNjBkXHVjNjBlXHVjNjBmXHVjNjExIiw2LCJcdWM2MWFcdWM2MWQi''@;'; put 'put ''LDYsIlx1YzYyNlx1YzYyN1x1YzYyOVx1YzYyYVx1YzYyYlx1YzYyZlx1YzYzMVx1YzYzMlx1YzYzNlx1YzYzOFx1YzYzYVx1YzYzY1x1YzYzZFx1YzYzZVx1YzYzZlx1YzY0Mlx1YzY0M1x1YzY0NVx1YzY0Nlx1YzY0N1x1YzY0OSIsNiwiXHVjNjUyXHVjNjU2Iiw1LCJcdWM2NWVcdWM2NWZc''@;'; put 'put ''dWM2NjEiLDEwLCJcdWM2NmRcdWM2NmVcdWM2NzBcdWM2NzIiLDUsIlx1YzY3YVx1YzY3Ylx1YzY3ZFx1YzY3ZVx1YzY3Zlx1YzY4MSIsNiwiXHVjNjhhXHVjNjhjXHVjNjhlIiw1LCJcdWM2OTZcdWM2OTdcdWM2OTlcdWM2OWFcdWM2OWJcdWM2OWQiLDYsIlx1YzZhNiJdLFsiOWY0MSIsIlx1''@;'; put 'put ''YzZhOFx1YzZhYSIsNSwiXHVjNmIyXHVjNmIzXHVjNmI1XHVjNmI2XHVjNmI3XHVjNmJiIiw0LCJcdWM2YzJcdWM2YzRcdWM2YzYiLDUsIlx1YzZjZSJdLFsiOWY2MSIsIlx1YzZjZlx1YzZkMVx1YzZkMlx1YzZkM1x1YzZkNSIsNiwiXHVjNmRlXHVjNmRmXHVjNmUyIiw1LCJcdWM2ZWFcdWM2''@;'; put 'put ''ZWJcdWM2ZWRcdWM2ZWVcdWM2ZWZcdWM2ZjFcdWM2ZjIiXSxbIjlmODEiLCJcdWM2ZjMiLDQsIlx1YzZmYVx1YzZmYlx1YzZmY1x1YzZmZSIsNSwiXHVjNzA2XHVjNzA3XHVjNzA5XHVjNzBhXHVjNzBiXHVjNzBkIiw2LCJcdWM3MTZcdWM3MThcdWM3MWEiLDUsIlx1YzcyMlx1YzcyM1x1Yzcy''@;'; put 'put ''NVx1YzcyNlx1YzcyN1x1YzcyOSIsNiwiXHVjNzMyXHVjNzM0XHVjNzM2XHVjNzM4XHVjNzM5XHVjNzNhXHVjNzNiXHVjNzNlXHVjNzNmXHVjNzQxXHVjNzQyXHVjNzQzXHVjNzQ1Iiw0LCJcdWM3NGJcdWM3NGVcdWM3NTBcdWM3NTlcdWM3NWFcdWM3NWJcdWM3NWRcdWM3NWVcdWM3NWZcdWM3''@;'; put 'put ''NjEiLDYsIlx1Yzc2OVx1Yzc2YVx1Yzc2YyIsNywiXHVjNzc2XHVjNzc3XHVjNzc5XHVjNzdhXHVjNzdiXHVjNzdmXHVjNzgwXHVjNzgxXHVjNzgyXHVjNzg2XHVjNzhiXHVjNzhjXHVjNzhkXHVjNzhmXHVjNzkyXHVjNzkzXHVjNzk1XHVjNzk5XHVjNzliIiw0LCJcdWM3YTJcdWM3YTciLDQs''@;'; put 'put ''Ilx1YzdhZVx1YzdhZlx1YzdiMVx1YzdiMlx1YzdiM1x1YzdiNVx1YzdiNlx1YzdiNyJdLFsiYTA0MSIsIlx1YzdiOFx1YzdiOVx1YzdiYVx1YzdiYlx1YzdiZVx1YzdjMiIsNSwiXHVjN2NhXHVjN2NiXHVjN2NkXHVjN2NmXHVjN2QxIiw2LCJcdWM3ZDlcdWM3ZGFcdWM3ZGJcdWM3ZGMiXSxb''@;'; put 'put ''ImEwNjEiLCJcdWM3ZGUiLDUsIlx1YzdlNVx1YzdlNlx1YzdlN1x1YzdlOVx1YzdlYVx1YzdlYlx1YzdlZCIsMTNdLFsiYTA4MSIsIlx1YzdmYiIsNCwiXHVjODAyXHVjODAzXHVjODA1XHVjODA2XHVjODA3XHVjODA5XHVjODBiIiw0LCJcdWM4MTJcdWM4MTRcdWM4MTciLDQsIlx1YzgxZVx1''@;'; put 'put ''YzgxZlx1YzgyMVx1YzgyMlx1YzgyM1x1YzgyNSIsNiwiXHVjODJlXHVjODMwXHVjODMyIiw1LCJcdWM4MzlcdWM4M2FcdWM4M2JcdWM4M2RcdWM4M2VcdWM4M2ZcdWM4NDEiLDYsIlx1Yzg0YVx1Yzg0Ylx1Yzg0ZSIsNSwiXHVjODU1IiwyNiwiXHVjODcyXHVjODczXHVjODc1XHVjODc2XHVj''@;'; put 'put ''ODc3XHVjODc5XHVjODdiIiw0LCJcdWM4ODJcdWM4ODRcdWM4ODhcdWM4ODlcdWM4OGFcdWM4OGUiLDUsIlx1Yzg5NSIsNywiXHVjODllXHVjOGEwXHVjOGEyXHVjOGEzXHVjOGE0Il0sWyJhMTQxIiwiXHVjOGE1XHVjOGE2XHVjOGE3XHVjOGE5IiwxOCwiXHVjOGJlXHVjOGJmXHVjOGMwXHVj''@;'; put 'put ''OGMxIl0sWyJhMTYxIiwiXHVjOGMyXHVjOGMzXHVjOGM1XHVjOGM2XHVjOGM3XHVjOGM5XHVjOGNhXHVjOGNiXHVjOGNkIiw2LCJcdWM4ZDZcdWM4ZDhcdWM4ZGEiLDUsIlx1YzhlMlx1YzhlM1x1YzhlNSJdLFsiYTE4MSIsIlx1YzhlNiIsMTQsIlx1YzhmNiIsNSwiXHVjOGZlXHVjOGZmXHVj''@;'; put 'put ''OTAxXHVjOTAyXHVjOTAzXHVjOTA3Iiw0LCJcdWM5MGVcdTMwMDBcdTMwMDFcdTMwMDJceGI3XHUyMDI1XHUyMDI2XHhhOFx1MzAwM1x4YWRcdTIwMTVcdTIyMjVcdWZmM2NcdTIyM2NcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTMwMTRcdTMwMTVcdTMwMDgiLDksIlx4YjFceGQ3XHhmN1x1''@;'; put 'put ''MjI2MFx1MjI2NFx1MjI2NVx1MjIxZVx1MjIzNFx4YjBcdTIwMzJcdTIwMzNcdTIxMDNcdTIxMmJcdWZmZTBcdWZmZTFcdWZmZTVcdTI2NDJcdTI2NDBcdTIyMjBcdTIyYTVcdTIzMTJcdTIyMDJcdTIyMDdcdTIyNjFcdTIyNTJceGE3XHUyMDNiXHUyNjA2XHUyNjA1XHUyNWNiXHUyNWNmXHUy''@;'; put 'put ''NWNlXHUyNWM3XHUyNWM2XHUyNWExXHUyNWEwXHUyNWIzXHUyNWIyXHUyNWJkXHUyNWJjXHUyMTkyXHUyMTkwXHUyMTkxXHUyMTkzXHUyMTk0XHUzMDEzXHUyMjZhXHUyMjZiXHUyMjFhXHUyMjNkXHUyMjFkXHUyMjM1XHUyMjJiXHUyMjJjXHUyMjA4XHUyMjBiXHUyMjg2XHUyMjg3XHUyMjgy''@;'; put 'put ''XHUyMjgzXHUyMjJhXHUyMjI5XHUyMjI3XHUyMjI4XHVmZmUyIl0sWyJhMjQxIiwiXHVjOTEwXHVjOTEyIiw1LCJcdWM5MTkiLDE4XSxbImEyNjEiLCJcdWM5MmQiLDYsIlx1YzkzNSIsMThdLFsiYTI4MSIsIlx1Yzk0OCIsNywiXHVjOTUyXHVjOTUzXHVjOTU1XHVjOTU2XHVjOTU3XHVjOTU5''@;'; put 'put ''Iiw2LCJcdWM5NjJcdWM5NjQiLDcsIlx1Yzk2ZFx1Yzk2ZVx1Yzk2Zlx1MjFkMlx1MjFkNFx1MjIwMFx1MjIwM1x4YjRcdWZmNWVcdTAyYzdcdTAyZDhcdTAyZGRcdTAyZGFcdTAyZDlceGI4XHUwMmRiXHhhMVx4YmZcdTAyZDBcdTIyMmVcdTIyMTFcdTIyMGZceGE0XHUyMTA5XHUyMDMwXHUy''@;'; put 'put ''NWMxXHUyNWMwXHUyNWI3XHUyNWI2XHUyNjY0XHUyNjYwXHUyNjYxXHUyNjY1XHUyNjY3XHUyNjYzXHUyMjk5XHUyNWM4XHUyNWEzXHUyNWQwXHUyNWQxXHUyNTkyXHUyNWE0XHUyNWE1XHUyNWE4XHUyNWE3XHUyNWE2XHUyNWE5XHUyNjY4XHUyNjBmXHUyNjBlXHUyNjFjXHUyNjFlXHhiNlx1''@;'; put 'put ''MjAyMFx1MjAyMVx1MjE5NVx1MjE5N1x1MjE5OVx1MjE5Nlx1MjE5OFx1MjY2ZFx1MjY2OVx1MjY2YVx1MjY2Y1x1MzI3Zlx1MzIxY1x1MjExNlx1MzNjN1x1MjEyMlx1MzNjMlx1MzNkOFx1MjEyMVx1MjBhY1x4YWUiXSxbImEzNDEiLCJcdWM5NzFcdWM5NzJcdWM5NzNcdWM5NzUiLDYsIlx1''@;'; put 'put ''Yzk3ZCIsMTAsIlx1Yzk4YVx1Yzk4Ylx1Yzk4ZFx1Yzk4ZVx1Yzk4ZiJdLFsiYTM2MSIsIlx1Yzk5MSIsNiwiXHVjOTlhXHVjOTljXHVjOTllIiwxNl0sWyJhMzgxIiwiXHVjOWFmIiwxNiwiXHVjOWMyXHVjOWMzXHVjOWM1XHVjOWM2XHVjOWM5XHVjOWNiIiw0LCJcdWM5ZDJcdWM5ZDRcdWM5''@;'; put 'put ''ZDdcdWM5ZDhcdWM5ZGJcdWZmMDEiLDU4LCJcdWZmZTZcdWZmM2QiLDMyLCJcdWZmZTMiXSxbImE0NDEiLCJcdWM5ZGVcdWM5ZGZcdWM5ZTFcdWM5ZTNcdWM5ZTVcdWM5ZTZcdWM5ZThcdWM5ZTlcdWM5ZWFcdWM5ZWJcdWM5ZWVcdWM5ZjIiLDUsIlx1YzlmYVx1YzlmYlx1YzlmZFx1YzlmZVx1''@;'; put 'put ''YzlmZlx1Y2EwMVx1Y2EwMlx1Y2EwM1x1Y2EwNCJdLFsiYTQ2MSIsIlx1Y2EwNVx1Y2EwNlx1Y2EwN1x1Y2EwYVx1Y2EwZSIsNSwiXHVjYTE1XHVjYTE2XHVjYTE3XHVjYTE5IiwxMl0sWyJhNDgxIiwiXHVjYTI2XHVjYTI3XHVjYTI4XHVjYTJhIiwyOCwiXHUzMTMxIiw5M10sWyJhNTQxIiwi''@;'; put 'put ''XHVjYTQ3Iiw0LCJcdWNhNGVcdWNhNGZcdWNhNTFcdWNhNTJcdWNhNTNcdWNhNTUiLDYsIlx1Y2E1ZVx1Y2E2MiIsNSwiXHVjYTY5XHVjYTZhIl0sWyJhNTYxIiwiXHVjYTZiIiwxNywiXHVjYTdlIiw1LCJcdWNhODVcdWNhODYiXSxbImE1ODEiLCJcdWNhODciLDE2LCJcdWNhOTkiLDE0LCJc''@;'; put 'put ''dTIxNzAiLDldLFsiYTViMCIsIlx1MjE2MCIsOV0sWyJhNWMxIiwiXHUwMzkxIiwxNiwiXHUwM2EzIiw2XSxbImE1ZTEiLCJcdTAzYjEiLDE2LCJcdTAzYzMiLDZdLFsiYTY0MSIsIlx1Y2FhOCIsMTksIlx1Y2FiZVx1Y2FiZlx1Y2FjMVx1Y2FjMlx1Y2FjM1x1Y2FjNSJdLFsiYTY2MSIsIlx1''@;'; put 'put ''Y2FjNiIsNSwiXHVjYWNlXHVjYWQwXHVjYWQyXHVjYWQ0XHVjYWQ1XHVjYWQ2XHVjYWQ3XHVjYWRhIiw1LCJcdWNhZTEiLDZdLFsiYTY4MSIsIlx1Y2FlOFx1Y2FlOVx1Y2FlYVx1Y2FlYlx1Y2FlZCIsNiwiXHVjYWY1IiwxOCwiXHVjYjA5XHVjYjBhXHUyNTAwXHUyNTAyXHUyNTBjXHUyNTEw''@;'; put 'put ''XHUyNTE4XHUyNTE0XHUyNTFjXHUyNTJjXHUyNTI0XHUyNTM0XHUyNTNjXHUyNTAxXHUyNTAzXHUyNTBmXHUyNTEzXHUyNTFiXHUyNTE3XHUyNTIzXHUyNTMzXHUyNTJiXHUyNTNiXHUyNTRiXHUyNTIwXHUyNTJmXHUyNTI4XHUyNTM3XHUyNTNmXHUyNTFkXHUyNTMwXHUyNTI1XHUyNTM4XHUy''@;'; put 'put ''NTQyXHUyNTEyXHUyNTExXHUyNTFhXHUyNTE5XHUyNTE2XHUyNTE1XHUyNTBlXHUyNTBkXHUyNTFlXHUyNTFmXHUyNTIxXHUyNTIyXHUyNTI2XHUyNTI3XHUyNTI5XHUyNTJhXHUyNTJkXHUyNTJlXHUyNTMxXHUyNTMyXHUyNTM1XHUyNTM2XHUyNTM5XHUyNTNhXHUyNTNkXHUyNTNlXHUyNTQw''@;'; put 'put ''XHUyNTQxXHUyNTQzIiw3XSxbImE3NDEiLCJcdWNiMGIiLDQsIlx1Y2IxMVx1Y2IxMlx1Y2IxM1x1Y2IxNVx1Y2IxNlx1Y2IxN1x1Y2IxOSIsNiwiXHVjYjIyIiw3XSxbImE3NjEiLCJcdWNiMmEiLDIyLCJcdWNiNDJcdWNiNDNcdWNiNDQiXSxbImE3ODEiLCJcdWNiNDVcdWNiNDZcdWNiNDdc''@;'; put 'put ''dWNiNGFcdWNiNGJcdWNiNGRcdWNiNGVcdWNiNGZcdWNiNTEiLDYsIlx1Y2I1YVx1Y2I1Ylx1Y2I1Y1x1Y2I1ZSIsNSwiXHVjYjY1Iiw3LCJcdTMzOTVcdTMzOTZcdTMzOTdcdTIxMTNcdTMzOThcdTMzYzRcdTMzYTNcdTMzYTRcdTMzYTVcdTMzYTZcdTMzOTkiLDksIlx1MzNjYVx1MzM4ZFx1''@;'; put 'put ''MzM4ZVx1MzM4Zlx1MzNjZlx1MzM4OFx1MzM4OVx1MzNjOFx1MzNhN1x1MzNhOFx1MzNiMCIsOSwiXHUzMzgwIiw0LCJcdTMzYmEiLDUsIlx1MzM5MCIsNCwiXHUyMTI2XHUzM2MwXHUzM2MxXHUzMzhhXHUzMzhiXHUzMzhjXHUzM2Q2XHUzM2M1XHUzM2FkXHUzM2FlXHUzM2FmXHUzM2RiXHUz''@;'; put 'put ''M2E5XHUzM2FhXHUzM2FiXHUzM2FjXHUzM2RkXHUzM2QwXHUzM2QzXHUzM2MzXHUzM2M5XHUzM2RjXHUzM2M2Il0sWyJhODQxIiwiXHVjYjZkIiwxMCwiXHVjYjdhIiwxNF0sWyJhODYxIiwiXHVjYjg5IiwxOCwiXHVjYjlkIiw2XSxbImE4ODEiLCJcdWNiYTQiLDE5LCJcdWNiYjkiLDExLCJc''@;'; put 'put ''eGM2XHhkMFx4YWFcdTAxMjYiXSxbImE4YTYiLCJcdTAxMzIiXSxbImE4YTgiLCJcdTAxM2ZcdTAxNDFceGQ4XHUwMTUyXHhiYVx4ZGVcdTAxNjZcdTAxNGEiXSxbImE4YjEiLCJcdTMyNjAiLDI3LCJcdTI0ZDAiLDI1LCJcdTI0NjAiLDE0LCJceGJkXHUyMTUzXHUyMTU0XHhiY1x4YmVcdTIx''@;'; put 'put ''NWJcdTIxNWNcdTIxNWRcdTIxNWUiXSxbImE5NDEiLCJcdWNiYzUiLDE0LCJcdWNiZDUiLDEwXSxbImE5NjEiLCJcdWNiZTBcdWNiZTFcdWNiZTJcdWNiZTNcdWNiZTVcdWNiZTZcdWNiZThcdWNiZWEiLDE4XSxbImE5ODEiLCJcdWNiZmQiLDE0LCJcdWNjMGVcdWNjMGZcdWNjMTFcdWNjMTJc''@;'; put 'put ''dWNjMTNcdWNjMTUiLDYsIlx1Y2MxZVx1Y2MxZlx1Y2MyMFx1Y2MyM1x1Y2MyNFx4ZTZcdTAxMTFceGYwXHUwMTI3XHUwMTMxXHUwMTMzXHUwMTM4XHUwMTQwXHUwMTQyXHhmOFx1MDE1M1x4ZGZceGZlXHUwMTY3XHUwMTRiXHUwMTQ5XHUzMjAwIiwyNywiXHUyNDljIiwyNSwiXHUyNDc0Iiwx''@;'; put 'put ''NCwiXHhiOVx4YjJceGIzXHUyMDc0XHUyMDdmXHUyMDgxXHUyMDgyXHUyMDgzXHUyMDg0Il0sWyJhYTQxIiwiXHVjYzI1XHVjYzI2XHVjYzJhXHVjYzJiXHVjYzJkXHVjYzJmXHVjYzMxIiw2LCJcdWNjM2FcdWNjM2YiLDQsIlx1Y2M0Nlx1Y2M0N1x1Y2M0OVx1Y2M0YVx1Y2M0Ylx1Y2M0ZFx1''@;'; put 'put ''Y2M0ZSJdLFsiYWE2MSIsIlx1Y2M0ZiIsNCwiXHVjYzU2XHVjYzVhIiw1LCJcdWNjNjFcdWNjNjJcdWNjNjNcdWNjNjVcdWNjNjdcdWNjNjkiLDYsIlx1Y2M3MVx1Y2M3MiJdLFsiYWE4MSIsIlx1Y2M3M1x1Y2M3NFx1Y2M3NiIsMjksIlx1MzA0MSIsODJdLFsiYWI0MSIsIlx1Y2M5NFx1Y2M5''@;'; put 'put ''NVx1Y2M5Nlx1Y2M5N1x1Y2M5YVx1Y2M5Ylx1Y2M5ZFx1Y2M5ZVx1Y2M5Zlx1Y2NhMSIsNiwiXHVjY2FhXHVjY2FlIiw1LCJcdWNjYjZcdWNjYjdcdWNjYjkiXSxbImFiNjEiLCJcdWNjYmFcdWNjYmJcdWNjYmQiLDYsIlx1Y2NjNlx1Y2NjOFx1Y2NjYSIsNSwiXHVjY2QxXHVjY2QyXHVjY2Qz''@;'; put 'put ''XHVjY2Q1Iiw1XSxbImFiODEiLCJcdWNjZGIiLDgsIlx1Y2NlNSIsNiwiXHVjY2VkXHVjY2VlXHVjY2VmXHVjY2YxIiwxMiwiXHUzMGExIiw4NV0sWyJhYzQxIiwiXHVjY2ZlXHVjY2ZmXHVjZDAwXHVjZDAyIiw1LCJcdWNkMGFcdWNkMGJcdWNkMGRcdWNkMGVcdWNkMGZcdWNkMTEiLDYsIlx1''@;'; put 'put ''Y2QxYVx1Y2QxY1x1Y2QxZVx1Y2QxZlx1Y2QyMCJdLFsiYWM2MSIsIlx1Y2QyMVx1Y2QyMlx1Y2QyM1x1Y2QyNVx1Y2QyNlx1Y2QyN1x1Y2QyOVx1Y2QyYVx1Y2QyYlx1Y2QyZCIsMTEsIlx1Y2QzYSIsNF0sWyJhYzgxIiwiXHVjZDNmIiwyOCwiXHVjZDVkXHVjZDVlXHVjZDVmXHUwNDEwIiw1''@;'; put 'put ''LCJcdTA0MDFcdTA0MTYiLDI1XSxbImFjZDEiLCJcdTA0MzAiLDUsIlx1MDQ1MVx1MDQzNiIsMjVdLFsiYWQ0MSIsIlx1Y2Q2MVx1Y2Q2Mlx1Y2Q2M1x1Y2Q2NSIsNiwiXHVjZDZlXHVjZDcwXHVjZDcyIiw1LCJcdWNkNzkiLDddLFsiYWQ2MSIsIlx1Y2Q4MSIsNiwiXHVjZDg5IiwxMCwiXHVj''@;'; put 'put ''ZDk2XHVjZDk3XHVjZDk5XHVjZDlhXHVjZDliXHVjZDlkXHVjZDllXHVjZDlmIl0sWyJhZDgxIiwiXHVjZGEwXHVjZGExXHVjZGEyXHVjZGEzXHVjZGE2XHVjZGE4XHVjZGFhIiw1LCJcdWNkYjEiLDE4LCJcdWNkYzUiXSxbImFlNDEiLCJcdWNkYzYiLDUsIlx1Y2RjZFx1Y2RjZVx1Y2RjZlx1''@;'; put 'put ''Y2RkMSIsMTZdLFsiYWU2MSIsIlx1Y2RlMiIsNSwiXHVjZGU5XHVjZGVhXHVjZGViXHVjZGVkXHVjZGVlXHVjZGVmXHVjZGYxIiw2LCJcdWNkZmFcdWNkZmNcdWNkZmUiLDRdLFsiYWU4MSIsIlx1Y2UwM1x1Y2UwNVx1Y2UwNlx1Y2UwN1x1Y2UwOVx1Y2UwYVx1Y2UwYlx1Y2UwZCIsNiwiXHVj''@;'; put 'put ''ZTE1XHVjZTE2XHVjZTE3XHVjZTE4XHVjZTFhIiw1LCJcdWNlMjJcdWNlMjNcdWNlMjVcdWNlMjZcdWNlMjdcdWNlMjlcdWNlMmFcdWNlMmIiXSxbImFmNDEiLCJcdWNlMmNcdWNlMmRcdWNlMmVcdWNlMmZcdWNlMzJcdWNlMzRcdWNlMzYiLDE5XSxbImFmNjEiLCJcdWNlNGEiLDEzLCJcdWNl''@;'; put 'put ''NWFcdWNlNWJcdWNlNWRcdWNlNWVcdWNlNjIiLDUsIlx1Y2U2YVx1Y2U2YyJdLFsiYWY4MSIsIlx1Y2U2ZSIsNSwiXHVjZTc2XHVjZTc3XHVjZTc5XHVjZTdhXHVjZTdiXHVjZTdkIiw2LCJcdWNlODZcdWNlODhcdWNlOGEiLDUsIlx1Y2U5Mlx1Y2U5M1x1Y2U5NVx1Y2U5Nlx1Y2U5N1x1Y2U5''@;'; put 'put ''OSJdLFsiYjA0MSIsIlx1Y2U5YSIsNSwiXHVjZWEyXHVjZWE2Iiw1LCJcdWNlYWUiLDEyXSxbImIwNjEiLCJcdWNlYmIiLDUsIlx1Y2VjMiIsMTldLFsiYjA4MSIsIlx1Y2VkNiIsMTMsIlx1Y2VlNlx1Y2VlN1x1Y2VlOVx1Y2VlYVx1Y2VlZCIsNiwiXHVjZWY2XHVjZWZhIiw1LCJcdWFjMDBc''@;'; put 'put ''dWFjMDFcdWFjMDRcdWFjMDdcdWFjMDhcdWFjMDlcdWFjMGFcdWFjMTAiLDcsIlx1YWMxOSIsNCwiXHVhYzIwXHVhYzI0XHVhYzJjXHVhYzJkXHVhYzJmXHVhYzMwXHVhYzMxXHVhYzM4XHVhYzM5XHVhYzNjXHVhYzQwXHVhYzRiXHVhYzRkXHVhYzU0XHVhYzU4XHVhYzVjXHVhYzcwXHVhYzcx''@;'; put 'put ''XHVhYzc0XHVhYzc3XHVhYzc4XHVhYzdhXHVhYzgwXHVhYzgxXHVhYzgzXHVhYzg0XHVhYzg1XHVhYzg2XHVhYzg5XHVhYzhhXHVhYzhiXHVhYzhjXHVhYzkwXHVhYzk0XHVhYzljXHVhYzlkXHVhYzlmXHVhY2EwXHVhY2ExXHVhY2E4XHVhY2E5XHVhY2FhXHVhY2FjXHVhY2FmXHVhY2IwXHVh''@;'; put 'put ''Y2I4XHVhY2I5XHVhY2JiXHVhY2JjXHVhY2JkXHVhY2MxXHVhY2M0XHVhY2M4XHVhY2NjXHVhY2Q1XHVhY2Q3XHVhY2UwXHVhY2UxXHVhY2U0XHVhY2U3XHVhY2U4XHVhY2VhXHVhY2VjXHVhY2VmXHVhY2YwXHVhY2YxXHVhY2YzXHVhY2Y1XHVhY2Y2XHVhY2ZjXHVhY2ZkXHVhZDAwXHVhZDA0''@;'; put 'put ''XHVhZDA2Il0sWyJiMTQxIiwiXHVjZjAyXHVjZjAzXHVjZjA1XHVjZjA2XHVjZjA3XHVjZjA5Iiw2LCJcdWNmMTJcdWNmMTRcdWNmMTYiLDUsIlx1Y2YxZFx1Y2YxZVx1Y2YxZlx1Y2YyMVx1Y2YyMlx1Y2YyMyJdLFsiYjE2MSIsIlx1Y2YyNSIsNiwiXHVjZjJlXHVjZjMyIiw1LCJcdWNmMzki''@;'; put 'put ''LDExXSxbImIxODEiLCJcdWNmNDUiLDE0LCJcdWNmNTZcdWNmNTdcdWNmNTlcdWNmNWFcdWNmNWJcdWNmNWQiLDYsIlx1Y2Y2Nlx1Y2Y2OFx1Y2Y2YVx1Y2Y2Ylx1Y2Y2Y1x1YWQwY1x1YWQwZFx1YWQwZlx1YWQxMVx1YWQxOFx1YWQxY1x1YWQyMFx1YWQyOVx1YWQyY1x1YWQyZFx1YWQzNFx1''@;'; put 'put ''YWQzNVx1YWQzOFx1YWQzY1x1YWQ0NFx1YWQ0NVx1YWQ0N1x1YWQ0OVx1YWQ1MFx1YWQ1NFx1YWQ1OFx1YWQ2MVx1YWQ2M1x1YWQ2Y1x1YWQ2ZFx1YWQ3MFx1YWQ3M1x1YWQ3NFx1YWQ3NVx1YWQ3Nlx1YWQ3Ylx1YWQ3Y1x1YWQ3ZFx1YWQ3Zlx1YWQ4MVx1YWQ4Mlx1YWQ4OFx1YWQ4OVx1YWQ4''@;'; put 'put ''Y1x1YWQ5MFx1YWQ5Y1x1YWQ5ZFx1YWRhNFx1YWRiN1x1YWRjMFx1YWRjMVx1YWRjNFx1YWRjOFx1YWRkMFx1YWRkMVx1YWRkM1x1YWRkY1x1YWRlMFx1YWRlNFx1YWRmOFx1YWRmOVx1YWRmY1x1YWRmZlx1YWUwMFx1YWUwMVx1YWUwOFx1YWUwOVx1YWUwYlx1YWUwZFx1YWUxNFx1YWUzMFx1''@;'; put 'put ''YWUzMVx1YWUzNFx1YWUzN1x1YWUzOFx1YWUzYVx1YWU0MFx1YWU0MVx1YWU0M1x1YWU0NVx1YWU0Nlx1YWU0YVx1YWU0Y1x1YWU0ZFx1YWU0ZVx1YWU1MFx1YWU1NFx1YWU1Nlx1YWU1Y1x1YWU1ZFx1YWU1Zlx1YWU2MFx1YWU2MVx1YWU2NVx1YWU2OFx1YWU2OVx1YWU2Y1x1YWU3MFx1YWU3''@;'; put 'put ''OCJdLFsiYjI0MSIsIlx1Y2Y2ZFx1Y2Y2ZVx1Y2Y2Zlx1Y2Y3Mlx1Y2Y3M1x1Y2Y3NVx1Y2Y3Nlx1Y2Y3N1x1Y2Y3OSIsNiwiXHVjZjgxXHVjZjgyXHVjZjgzXHVjZjg0XHVjZjg2Iiw1LCJcdWNmOGQiXSxbImIyNjEiLCJcdWNmOGUiLDE4LCJcdWNmYTIiLDUsIlx1Y2ZhOSJdLFsiYjI4MSIs''@;'; put 'put ''Ilx1Y2ZhYSIsNSwiXHVjZmIxIiwxOCwiXHVjZmM1Iiw2LCJcdWFlNzlcdWFlN2JcdWFlN2NcdWFlN2RcdWFlODRcdWFlODVcdWFlOGNcdWFlYmNcdWFlYmRcdWFlYmVcdWFlYzBcdWFlYzRcdWFlY2NcdWFlY2RcdWFlY2ZcdWFlZDBcdWFlZDFcdWFlZDhcdWFlZDlcdWFlZGNcdWFlZThcdWFl''@;'; put 'put ''ZWJcdWFlZWRcdWFlZjRcdWFlZjhcdWFlZmNcdWFmMDdcdWFmMDhcdWFmMGRcdWFmMTBcdWFmMmNcdWFmMmRcdWFmMzBcdWFmMzJcdWFmMzRcdWFmM2NcdWFmM2RcdWFmM2ZcdWFmNDFcdWFmNDJcdWFmNDNcdWFmNDhcdWFmNDlcdWFmNTBcdWFmNWNcdWFmNWRcdWFmNjRcdWFmNjVcdWFmNzlc''@;'; put 'put ''dWFmODBcdWFmODRcdWFmODhcdWFmOTBcdWFmOTFcdWFmOTVcdWFmOWNcdWFmYjhcdWFmYjlcdWFmYmNcdWFmYzBcdWFmYzdcdWFmYzhcdWFmYzlcdWFmY2JcdWFmY2RcdWFmY2VcdWFmZDRcdWFmZGNcdWFmZThcdWFmZTlcdWFmZjBcdWFmZjFcdWFmZjRcdWFmZjhcdWIwMDBcdWIwMDFcdWIw''@;'; put 'put ''MDRcdWIwMGNcdWIwMTBcdWIwMTRcdWIwMWNcdWIwMWRcdWIwMjhcdWIwNDRcdWIwNDVcdWIwNDhcdWIwNGFcdWIwNGNcdWIwNGVcdWIwNTNcdWIwNTRcdWIwNTVcdWIwNTdcdWIwNTkiXSxbImIzNDEiLCJcdWNmY2MiLDE5LCJcdWNmZTJcdWNmZTNcdWNmZTVcdWNmZTZcdWNmZTdcdWNmZTki''@;'; put 'put ''XSxbImIzNjEiLCJcdWNmZWEiLDUsIlx1Y2ZmMlx1Y2ZmNFx1Y2ZmNiIsNSwiXHVjZmZkXHVjZmZlXHVjZmZmXHVkMDAxXHVkMDAyXHVkMDAzXHVkMDA1Iiw1XSxbImIzODEiLCJcdWQwMGIiLDUsIlx1ZDAxMiIsNSwiXHVkMDE5IiwxOSwiXHViMDVkXHViMDdjXHViMDdkXHViMDgwXHViMDg0''@;'; put 'put ''XHViMDhjXHViMDhkXHViMDhmXHViMDkxXHViMDk4XHViMDk5XHViMDlhXHViMDljXHViMDlmXHViMGEwXHViMGExXHViMGEyXHViMGE4XHViMGE5XHViMGFiIiw0LCJcdWIwYjFcdWIwYjNcdWIwYjRcdWIwYjVcdWIwYjhcdWIwYmNcdWIwYzRcdWIwYzVcdWIwYzdcdWIwYzhcdWIwYzlcdWIw''@;'; put 'put ''ZDBcdWIwZDFcdWIwZDRcdWIwZDhcdWIwZTBcdWIwZTVcdWIxMDhcdWIxMDlcdWIxMGJcdWIxMGNcdWIxMTBcdWIxMTJcdWIxMTNcdWIxMThcdWIxMTlcdWIxMWJcdWIxMWNcdWIxMWRcdWIxMjNcdWIxMjRcdWIxMjVcdWIxMjhcdWIxMmNcdWIxMzRcdWIxMzVcdWIxMzdcdWIxMzhcdWIxMzlc''@;'; put 'put ''dWIxNDBcdWIxNDFcdWIxNDRcdWIxNDhcdWIxNTBcdWIxNTFcdWIxNTRcdWIxNTVcdWIxNThcdWIxNWNcdWIxNjBcdWIxNzhcdWIxNzlcdWIxN2NcdWIxODBcdWIxODJcdWIxODhcdWIxODlcdWIxOGJcdWIxOGRcdWIxOTJcdWIxOTNcdWIxOTRcdWIxOThcdWIxOWNcdWIxYThcdWIxY2NcdWIx''@;'; put 'put ''ZDBcdWIxZDRcdWIxZGNcdWIxZGQiXSxbImI0NDEiLCJcdWQwMmUiLDUsIlx1ZDAzNlx1ZDAzN1x1ZDAzOVx1ZDAzYVx1ZDAzYlx1ZDAzZCIsNiwiXHVkMDQ2XHVkMDQ4XHVkMDRhIiw1XSxbImI0NjEiLCJcdWQwNTFcdWQwNTJcdWQwNTNcdWQwNTVcdWQwNTZcdWQwNTdcdWQwNTkiLDYsIlx1''@;'; put 'put ''ZDA2MSIsMTAsIlx1ZDA2ZVx1ZDA2ZiJdLFsiYjQ4MSIsIlx1ZDA3MVx1ZDA3Mlx1ZDA3M1x1ZDA3NSIsNiwiXHVkMDdlXHVkMDdmXHVkMDgwXHVkMDgyIiwxOCwiXHViMWRmXHViMWU4XHViMWU5XHViMWVjXHViMWYwXHViMWY5XHViMWZiXHViMWZkXHViMjA0XHViMjA1XHViMjA4XHViMjBi''@;'; put 'put ''XHViMjBjXHViMjE0XHViMjE1XHViMjE3XHViMjE5XHViMjIwXHViMjM0XHViMjNjXHViMjU4XHViMjVjXHViMjYwXHViMjY4XHViMjY5XHViMjc0XHViMjc1XHViMjdjXHViMjg0XHViMjg1XHViMjg5XHViMjkwXHViMjkxXHViMjk0XHViMjk4XHViMjk5XHViMjlhXHViMmEwXHViMmExXHVi''@;'; put 'put ''MmEzXHViMmE1XHViMmE2XHViMmFhXHViMmFjXHViMmIwXHViMmI0XHViMmM4XHViMmM5XHViMmNjXHViMmQwXHViMmQyXHViMmQ4XHViMmQ5XHViMmRiXHViMmRkXHViMmUyXHViMmU0XHViMmU1XHViMmU2XHViMmU4XHViMmViIiw0LCJcdWIyZjNcdWIyZjRcdWIyZjVcdWIyZjciLDQsIlx1''@;'; put 'put ''YjJmZlx1YjMwMFx1YjMwMVx1YjMwNFx1YjMwOFx1YjMxMFx1YjMxMVx1YjMxM1x1YjMxNFx1YjMxNVx1YjMxY1x1YjM1NFx1YjM1NVx1YjM1Nlx1YjM1OFx1YjM1Ylx1YjM1Y1x1YjM1ZVx1YjM1Zlx1YjM2NFx1YjM2NSJdLFsiYjU0MSIsIlx1ZDA5NSIsMTQsIlx1ZDBhNlx1ZDBhN1x1ZDBh''@;'; put 'put ''OVx1ZDBhYVx1ZDBhYlx1ZDBhZCIsNV0sWyJiNTYxIiwiXHVkMGIzXHVkMGI2XHVkMGI4XHVkMGJhIiw1LCJcdWQwYzJcdWQwYzNcdWQwYzVcdWQwYzZcdWQwYzdcdWQwY2EiLDUsIlx1ZDBkMlx1ZDBkNiIsNF0sWyJiNTgxIiwiXHVkMGRiXHVkMGRlXHVkMGRmXHVkMGUxXHVkMGUyXHVkMGUz''@;'; put 'put ''XHVkMGU1Iiw2LCJcdWQwZWVcdWQwZjIiLDUsIlx1ZDBmOSIsMTEsIlx1YjM2N1x1YjM2OVx1YjM2Ylx1YjM2ZVx1YjM3MFx1YjM3MVx1YjM3NFx1YjM3OFx1YjM4MFx1YjM4MVx1YjM4M1x1YjM4NFx1YjM4NVx1YjM4Y1x1YjM5MFx1YjM5NFx1YjNhMFx1YjNhMVx1YjNhOFx1YjNhY1x1YjNj''@;'; put 'put ''NFx1YjNjNVx1YjNjOFx1YjNjYlx1YjNjY1x1YjNjZVx1YjNkMFx1YjNkNFx1YjNkNVx1YjNkN1x1YjNkOVx1YjNkYlx1YjNkZFx1YjNlMFx1YjNlNFx1YjNlOFx1YjNmY1x1YjQxMFx1YjQxOFx1YjQxY1x1YjQyMFx1YjQyOFx1YjQyOVx1YjQyYlx1YjQzNFx1YjQ1MFx1YjQ1MVx1YjQ1NFx1''@;'; put 'put ''YjQ1OFx1YjQ2MFx1YjQ2MVx1YjQ2M1x1YjQ2NVx1YjQ2Y1x1YjQ4MFx1YjQ4OFx1YjQ5ZFx1YjRhNFx1YjRhOFx1YjRhY1x1YjRiNVx1YjRiN1x1YjRiOVx1YjRjMFx1YjRjNFx1YjRjOFx1YjRkMFx1YjRkNVx1YjRkY1x1YjRkZFx1YjRlMFx1YjRlM1x1YjRlNFx1YjRlNlx1YjRlY1x1YjRl''@;'; put 'put ''ZFx1YjRlZlx1YjRmMVx1YjRmOFx1YjUxNFx1YjUxNVx1YjUxOFx1YjUxYlx1YjUxY1x1YjUyNFx1YjUyNVx1YjUyN1x1YjUyOFx1YjUyOVx1YjUyYVx1YjUzMFx1YjUzMVx1YjUzNFx1YjUzOCJdLFsiYjY0MSIsIlx1ZDEwNSIsNywiXHVkMTBlIiwxN10sWyJiNjYxIiwiXHVkMTIwIiwxNSwi''@;'; put 'put ''XHVkMTMyXHVkMTMzXHVkMTM1XHVkMTM2XHVkMTM3XHVkMTM5XHVkMTNiXHVkMTNjXHVkMTNkXHVkMTNlIl0sWyJiNjgxIiwiXHVkMTNmXHVkMTQyXHVkMTQ2Iiw1LCJcdWQxNGVcdWQxNGZcdWQxNTFcdWQxNTJcdWQxNTNcdWQxNTUiLDYsIlx1ZDE1ZVx1ZDE2MFx1ZDE2MiIsNSwiXHVkMTY5''@;'; put 'put ''XHVkMTZhXHVkMTZiXHVkMTZkXHViNTQwXHViNTQxXHViNTQzXHViNTQ0XHViNTQ1XHViNTRiXHViNTRjXHViNTRkXHViNTUwXHViNTU0XHViNTVjXHViNTVkXHViNTVmXHViNTYwXHViNTYxXHViNWEwXHViNWExXHViNWE0XHViNWE4XHViNWFhXHViNWFiXHViNWIwXHViNWIxXHViNWIzXHVi''@;'; put 'put ''NWI0XHViNWI1XHViNWJiXHViNWJjXHViNWJkXHViNWMwXHViNWM0XHViNWNjXHViNWNkXHViNWNmXHViNWQwXHViNWQxXHViNWQ4XHViNWVjXHViNjEwXHViNjExXHViNjE0XHViNjE4XHViNjI1XHViNjJjXHViNjM0XHViNjQ4XHViNjY0XHViNjY4XHViNjljXHViNjlkXHViNmEwXHViNmE0''@;'; put 'put ''XHViNmFiXHViNmFjXHViNmIxXHViNmQ0XHViNmYwXHViNmY0XHViNmY4XHViNzAwXHViNzAxXHViNzA1XHViNzI4XHViNzI5XHViNzJjXHViNzJmXHViNzMwXHViNzM4XHViNzM5XHViNzNiXHViNzQ0XHViNzQ4XHViNzRjXHViNzU0XHViNzU1XHViNzYwXHViNzY0XHViNzY4XHViNzcwXHVi''@;'; put 'put ''NzcxXHViNzczXHViNzc1XHViNzdjXHViNzdkXHViNzgwXHViNzg0XHViNzhjXHViNzhkXHViNzhmXHViNzkwXHViNzkxXHViNzkyXHViNzk2XHViNzk3Il0sWyJiNzQxIiwiXHVkMTZlIiwxMywiXHVkMTdkIiw2LCJcdWQxODVcdWQxODZcdWQxODdcdWQxODlcdWQxOGEiXSxbImI3NjEiLCJc''@;'; put 'put ''dWQxOGIiLDIwLCJcdWQxYTJcdWQxYTNcdWQxYTVcdWQxYTZcdWQxYTciXSxbImI3ODEiLCJcdWQxYTkiLDYsIlx1ZDFiMlx1ZDFiNFx1ZDFiNlx1ZDFiN1x1ZDFiOFx1ZDFiOVx1ZDFiYlx1ZDFiZFx1ZDFiZVx1ZDFiZlx1ZDFjMSIsMTQsIlx1Yjc5OFx1Yjc5OVx1Yjc5Y1x1YjdhMFx1Yjdh''@;'; put 'put ''OFx1YjdhOVx1YjdhYlx1YjdhY1x1YjdhZFx1YjdiNFx1YjdiNVx1YjdiOFx1YjdjN1x1YjdjOVx1YjdlY1x1YjdlZFx1YjdmMFx1YjdmNFx1YjdmY1x1YjdmZFx1YjdmZlx1YjgwMFx1YjgwMVx1YjgwN1x1YjgwOFx1YjgwOVx1YjgwY1x1YjgxMFx1YjgxOFx1YjgxOVx1YjgxYlx1YjgxZFx1''@;'; put 'put ''YjgyNFx1YjgyNVx1YjgyOFx1YjgyY1x1YjgzNFx1YjgzNVx1YjgzN1x1YjgzOFx1YjgzOVx1Yjg0MFx1Yjg0NFx1Yjg1MVx1Yjg1M1x1Yjg1Y1x1Yjg1ZFx1Yjg2MFx1Yjg2NFx1Yjg2Y1x1Yjg2ZFx1Yjg2Zlx1Yjg3MVx1Yjg3OFx1Yjg3Y1x1Yjg4ZFx1YjhhOFx1YjhiMFx1YjhiNFx1Yjhi''@;'; put 'put ''OFx1YjhjMFx1YjhjMVx1YjhjM1x1YjhjNVx1YjhjY1x1YjhkMFx1YjhkNFx1YjhkZFx1YjhkZlx1YjhlMVx1YjhlOFx1YjhlOVx1YjhlY1x1YjhmMFx1YjhmOFx1YjhmOVx1YjhmYlx1YjhmZFx1YjkwNFx1YjkxOFx1YjkyMFx1YjkzY1x1YjkzZFx1Yjk0MFx1Yjk0NFx1Yjk0Y1x1Yjk0Zlx1''@;'; put 'put ''Yjk1MVx1Yjk1OFx1Yjk1OVx1Yjk1Y1x1Yjk2MFx1Yjk2OFx1Yjk2OSJdLFsiYjg0MSIsIlx1ZDFkMCIsNywiXHVkMWQ5IiwxN10sWyJiODYxIiwiXHVkMWViIiw4LCJcdWQxZjVcdWQxZjZcdWQxZjdcdWQxZjkiLDEzXSxbImI4ODEiLCJcdWQyMDhcdWQyMGEiLDUsIlx1ZDIxMSIsMjQsIlx1''@;'; put 'put ''Yjk2Ylx1Yjk2ZFx1Yjk3NFx1Yjk3NVx1Yjk3OFx1Yjk3Y1x1Yjk4NFx1Yjk4NVx1Yjk4N1x1Yjk4OVx1Yjk4YVx1Yjk4ZFx1Yjk4ZVx1YjlhY1x1YjlhZFx1YjliMFx1YjliNFx1YjliY1x1YjliZFx1YjliZlx1YjljMVx1YjljOFx1YjljOVx1YjljY1x1YjljZSIsNCwiXHViOWQ4XHViOWQ5''@;'; put 'put ''XHViOWRiXHViOWRkXHViOWRlXHViOWUxXHViOWUzXHViOWU0XHViOWU1XHViOWU4XHViOWVjXHViOWY0XHViOWY1XHViOWY3XHViOWY4XHViOWY5XHViOWZhXHViYTAwXHViYTAxXHViYTA4XHViYTE1XHViYTM4XHViYTM5XHViYTNjXHViYTQwXHViYTQyXHViYTQ4XHViYTQ5XHViYTRiXHVi''@;'; put 'put ''YTRkXHViYTRlXHViYTUzXHViYTU0XHViYTU1XHViYTU4XHViYTVjXHViYTY0XHViYTY1XHViYTY3XHViYTY4XHViYTY5XHViYTcwXHViYTcxXHViYTc0XHViYTc4XHViYTgzXHViYTg0XHViYTg1XHViYTg3XHViYThjXHViYWE4XHViYWE5XHViYWFiXHViYWFjXHViYWIwXHViYWIyXHViYWI4''@;'; put 'put ''XHViYWI5XHViYWJiXHViYWJkXHViYWM0XHViYWM4XHViYWQ4XHViYWQ5XHViYWZjIl0sWyJiOTQxIiwiXHVkMjJhXHVkMjJiXHVkMjJlXHVkMjJmXHVkMjMxXHVkMjMyXHVkMjMzXHVkMjM1Iiw2LCJcdWQyM2VcdWQyNDBcdWQyNDIiLDUsIlx1ZDI0OVx1ZDI0YVx1ZDI0Ylx1ZDI0YyJdLFsi''@;'; put 'put ''Yjk2MSIsIlx1ZDI0ZCIsMTQsIlx1ZDI1ZCIsNiwiXHVkMjY1XHVkMjY2XHVkMjY3XHVkMjY4Il0sWyJiOTgxIiwiXHVkMjY5IiwyMiwiXHVkMjgyXHVkMjgzXHVkMjg1XHVkMjg2XHVkMjg3XHVkMjg5XHVkMjhhXHVkMjhiXHVkMjhjXHViYjAwXHViYjA0XHViYjBkXHViYjBmXHViYjExXHVi''@;'; put 'put ''YjE4XHViYjFjXHViYjIwXHViYjI5XHViYjJiXHViYjM0XHViYjM1XHViYjM2XHViYjM4XHViYjNiXHViYjNjXHViYjNkXHViYjNlXHViYjQ0XHViYjQ1XHViYjQ3XHViYjQ5XHViYjRkXHViYjRmXHViYjUwXHViYjU0XHViYjU4XHViYjYxXHViYjYzXHViYjZjXHViYjg4XHViYjhjXHViYjkw''@;'; put 'put ''XHViYmE0XHViYmE4XHViYmFjXHViYmI0XHViYmI3XHViYmMwXHViYmM0XHViYmM4XHViYmQwXHViYmQzXHViYmY4XHViYmY5XHViYmZjXHViYmZmXHViYzAwXHViYzAyXHViYzA4XHViYzA5XHViYzBiXHViYzBjXHViYzBkXHViYzBmXHViYzExXHViYzE0Iiw0LCJcdWJjMWIiLDQsIlx1YmMy''@;'; put 'put ''NFx1YmMyNVx1YmMyN1x1YmMyOVx1YmMyZFx1YmMzMFx1YmMzMVx1YmMzNFx1YmMzOFx1YmM0MFx1YmM0MVx1YmM0M1x1YmM0NFx1YmM0NVx1YmM0OVx1YmM0Y1x1YmM0ZFx1YmM1MFx1YmM1ZFx1YmM4NFx1YmM4NVx1YmM4OFx1YmM4Ylx1YmM4Y1x1YmM4ZVx1YmM5NFx1YmM5NVx1YmM5NyJd''@;'; put 'put ''LFsiYmE0MSIsIlx1ZDI4ZFx1ZDI4ZVx1ZDI4Zlx1ZDI5Mlx1ZDI5M1x1ZDI5NFx1ZDI5NiIsNSwiXHVkMjlkXHVkMjllXHVkMjlmXHVkMmExXHVkMmEyXHVkMmEzXHVkMmE1Iiw2LCJcdWQyYWQiXSxbImJhNjEiLCJcdWQyYWVcdWQyYWZcdWQyYjBcdWQyYjIiLDUsIlx1ZDJiYVx1ZDJiYlx1''@;'; put 'put ''ZDJiZFx1ZDJiZVx1ZDJjMVx1ZDJjMyIsNCwiXHVkMmNhXHVkMmNjIiw1XSxbImJhODEiLCJcdWQyZDJcdWQyZDNcdWQyZDVcdWQyZDZcdWQyZDdcdWQyZDlcdWQyZGFcdWQyZGJcdWQyZGQiLDYsIlx1ZDJlNiIsOSwiXHVkMmYyXHVkMmYzXHVkMmY1XHVkMmY2XHVkMmY3XHVkMmY5XHVkMmZh''@;'; put 'put ''XHViYzk5XHViYzlhXHViY2EwXHViY2ExXHViY2E0XHViY2E3XHViY2E4XHViY2IwXHViY2IxXHViY2IzXHViY2I0XHViY2I1XHViY2JjXHViY2JkXHViY2MwXHViY2M0XHViY2NkXHViY2NmXHViY2QwXHViY2QxXHViY2Q1XHViY2Q4XHViY2RjXHViY2Y0XHViY2Y1XHViY2Y2XHViY2Y4XHVi''@;'; put 'put ''Y2ZjXHViZDA0XHViZDA1XHViZDA3XHViZDA5XHViZDEwXHViZDE0XHViZDI0XHViZDJjXHViZDQwXHViZDQ4XHViZDQ5XHViZDRjXHViZDUwXHViZDU4XHViZDU5XHViZDY0XHViZDY4XHViZDgwXHViZDgxXHViZDg0XHViZDg3XHViZDg4XHViZDg5XHViZDhhXHViZDkwXHViZDkxXHViZDkz''@;'; put 'put ''XHViZDk1XHViZDk5XHViZDlhXHViZDljXHViZGE0XHViZGIwXHViZGI4XHViZGQ0XHViZGQ1XHViZGQ4XHViZGRjXHViZGU5XHViZGYwXHViZGY0XHViZGY4XHViZTAwXHViZTAzXHViZTA1XHViZTBjXHViZTBkXHViZTEwXHViZTE0XHViZTFjXHViZTFkXHViZTFmXHViZTQ0XHViZTQ1XHVi''@;'; put 'put ''ZTQ4XHViZTRjXHViZTRlXHViZTU0XHViZTU1XHViZTU3XHViZTU5XHViZTVhXHViZTViXHViZTYwXHViZTYxXHViZTY0Il0sWyJiYjQxIiwiXHVkMmZiIiw0LCJcdWQzMDJcdWQzMDRcdWQzMDYiLDUsIlx1ZDMwZlx1ZDMxMVx1ZDMxMlx1ZDMxM1x1ZDMxNVx1ZDMxNyIsNCwiXHVkMzFlXHVk''@;'; put 'put ''MzIyXHVkMzIzIl0sWyJiYjYxIiwiXHVkMzI0XHVkMzI2XHVkMzI3XHVkMzJhXHVkMzJiXHVkMzJkXHVkMzJlXHVkMzJmXHVkMzMxIiw2LCJcdWQzM2FcdWQzM2UiLDUsIlx1ZDM0Nlx1ZDM0N1x1ZDM0OFx1ZDM0OSJdLFsiYmI4MSIsIlx1ZDM0YSIsMzEsIlx1YmU2OFx1YmU2YVx1YmU3MFx1''@;'; put 'put ''YmU3MVx1YmU3M1x1YmU3NFx1YmU3NVx1YmU3Ylx1YmU3Y1x1YmU3ZFx1YmU4MFx1YmU4NFx1YmU4Y1x1YmU4ZFx1YmU4Zlx1YmU5MFx1YmU5MVx1YmU5OFx1YmU5OVx1YmVhOFx1YmVkMFx1YmVkMVx1YmVkNFx1YmVkN1x1YmVkOFx1YmVlMFx1YmVlM1x1YmVlNFx1YmVlNVx1YmVlY1x1YmYw''@;'; put 'put ''MVx1YmYwOFx1YmYwOVx1YmYxOFx1YmYxOVx1YmYxYlx1YmYxY1x1YmYxZFx1YmY0MFx1YmY0MVx1YmY0NFx1YmY0OFx1YmY1MFx1YmY1MVx1YmY1NVx1YmY5NFx1YmZiMFx1YmZjNVx1YmZjY1x1YmZjZFx1YmZkMFx1YmZkNFx1YmZkY1x1YmZkZlx1YmZlMVx1YzAzY1x1YzA1MVx1YzA1OFx1''@;'; put 'put ''YzA1Y1x1YzA2MFx1YzA2OFx1YzA2OVx1YzA5MFx1YzA5MVx1YzA5NFx1YzA5OFx1YzBhMFx1YzBhMVx1YzBhM1x1YzBhNVx1YzBhY1x1YzBhZFx1YzBhZlx1YzBiMFx1YzBiM1x1YzBiNFx1YzBiNVx1YzBiNlx1YzBiY1x1YzBiZFx1YzBiZlx1YzBjMFx1YzBjMVx1YzBjNVx1YzBjOFx1YzBj''@;'; put 'put ''OVx1YzBjY1x1YzBkMFx1YzBkOFx1YzBkOVx1YzBkYlx1YzBkY1x1YzBkZFx1YzBlNCJdLFsiYmM0MSIsIlx1ZDM2YSIsMTcsIlx1ZDM3ZVx1ZDM3Zlx1ZDM4MVx1ZDM4Mlx1ZDM4M1x1ZDM4NVx1ZDM4Nlx1ZDM4NyJdLFsiYmM2MSIsIlx1ZDM4OFx1ZDM4OVx1ZDM4YVx1ZDM4Ylx1ZDM4ZVx1''@;'; put 'put ''ZDM5MiIsNSwiXHVkMzlhXHVkMzliXHVkMzlkXHVkMzllXHVkMzlmXHVkM2ExIiw2LCJcdWQzYWFcdWQzYWNcdWQzYWUiXSxbImJjODEiLCJcdWQzYWYiLDQsIlx1ZDNiNVx1ZDNiNlx1ZDNiN1x1ZDNiOVx1ZDNiYVx1ZDNiYlx1ZDNiZCIsNiwiXHVkM2M2XHVkM2M3XHVkM2NhIiw1LCJcdWQz''@;'; put 'put ''ZDEiLDUsIlx1YzBlNVx1YzBlOFx1YzBlY1x1YzBmNFx1YzBmNVx1YzBmN1x1YzBmOVx1YzEwMFx1YzEwNFx1YzEwOFx1YzExMFx1YzExNVx1YzExYyIsNCwiXHVjMTIzXHVjMTI0XHVjMTI2XHVjMTI3XHVjMTJjXHVjMTJkXHVjMTJmXHVjMTMwXHVjMTMxXHVjMTM2XHVjMTM4XHVjMTM5XHVj''@;'; put 'put ''MTNjXHVjMTQwXHVjMTQ4XHVjMTQ5XHVjMTRiXHVjMTRjXHVjMTRkXHVjMTU0XHVjMTU1XHVjMTU4XHVjMTVjXHVjMTY0XHVjMTY1XHVjMTY3XHVjMTY4XHVjMTY5XHVjMTcwXHVjMTc0XHVjMTc4XHVjMTg1XHVjMThjXHVjMThkXHVjMThlXHVjMTkwXHVjMTk0XHVjMTk2XHVjMTljXHVjMTlk''@;'; put 'put ''XHVjMTlmXHVjMWExXHVjMWE1XHVjMWE4XHVjMWE5XHVjMWFjXHVjMWIwXHVjMWJkXHVjMWM0XHVjMWM4XHVjMWNjXHVjMWQ0XHVjMWQ3XHVjMWQ4XHVjMWUwXHVjMWU0XHVjMWU4XHVjMWYwXHVjMWYxXHVjMWYzXHVjMWZjXHVjMWZkXHVjMjAwXHVjMjA0XHVjMjBjXHVjMjBkXHVjMjBmXHVj''@;'; put 'put ''MjExXHVjMjE4XHVjMjE5XHVjMjFjXHVjMjFmXHVjMjIwXHVjMjI4XHVjMjI5XHVjMjJiXHVjMjJkIl0sWyJiZDQxIiwiXHVkM2Q3XHVkM2Q5Iiw3LCJcdWQzZTJcdWQzZTQiLDcsIlx1ZDNlZVx1ZDNlZlx1ZDNmMVx1ZDNmMlx1ZDNmM1x1ZDNmNVx1ZDNmNlx1ZDNmNyJdLFsiYmQ2MSIsIlx1''@;'; put 'put ''ZDNmOFx1ZDNmOVx1ZDNmYVx1ZDNmYlx1ZDNmZVx1ZDQwMFx1ZDQwMiIsNSwiXHVkNDA5IiwxM10sWyJiZDgxIiwiXHVkNDE3Iiw1LCJcdWQ0MWUiLDI1LCJcdWMyMmZcdWMyMzFcdWMyMzJcdWMyMzRcdWMyNDhcdWMyNTBcdWMyNTFcdWMyNTRcdWMyNThcdWMyNjBcdWMyNjVcdWMyNmNcdWMy''@;'; put 'put ''NmRcdWMyNzBcdWMyNzRcdWMyN2NcdWMyN2RcdWMyN2ZcdWMyODFcdWMyODhcdWMyODlcdWMyOTBcdWMyOThcdWMyOWJcdWMyOWRcdWMyYTRcdWMyYTVcdWMyYThcdWMyYWNcdWMyYWRcdWMyYjRcdWMyYjVcdWMyYjdcdWMyYjlcdWMyZGNcdWMyZGRcdWMyZTBcdWMyZTNcdWMyZTRcdWMyZWJc''@;'; put 'put ''dWMyZWNcdWMyZWRcdWMyZWZcdWMyZjFcdWMyZjZcdWMyZjhcdWMyZjlcdWMyZmJcdWMyZmNcdWMzMDBcdWMzMDhcdWMzMDlcdWMzMGNcdWMzMGRcdWMzMTNcdWMzMTRcdWMzMTVcdWMzMThcdWMzMWNcdWMzMjRcdWMzMjVcdWMzMjhcdWMzMjlcdWMzNDVcdWMzNjhcdWMzNjlcdWMzNmNcdWMz''@;'; put 'put ''NzBcdWMzNzJcdWMzNzhcdWMzNzlcdWMzN2NcdWMzN2RcdWMzODRcdWMzODhcdWMzOGNcdWMzYzBcdWMzZDhcdWMzZDlcdWMzZGNcdWMzZGZcdWMzZTBcdWMzZTJcdWMzZThcdWMzZTlcdWMzZWRcdWMzZjRcdWMzZjVcdWMzZjhcdWM0MDhcdWM0MTBcdWM0MjRcdWM0MmNcdWM0MzAiXSxbImJl''@;'; put 'put ''NDEiLCJcdWQ0MzgiLDcsIlx1ZDQ0MVx1ZDQ0Mlx1ZDQ0M1x1ZDQ0NSIsMTRdLFsiYmU2MSIsIlx1ZDQ1NCIsNywiXHVkNDVkXHVkNDVlXHVkNDVmXHVkNDYxXHVkNDYyXHVkNDYzXHVkNDY1Iiw3LCJcdWQ0NmVcdWQ0NzBcdWQ0NzFcdWQ0NzIiXSxbImJlODEiLCJcdWQ0NzMiLDQsIlx1ZDQ3''@;'; put 'put ''YVx1ZDQ3Ylx1ZDQ3ZFx1ZDQ3ZVx1ZDQ4MVx1ZDQ4MyIsNCwiXHVkNDhhXHVkNDhjXHVkNDhlIiw1LCJcdWQ0OTUiLDgsIlx1YzQzNFx1YzQzY1x1YzQzZFx1YzQ0OFx1YzQ2NFx1YzQ2NVx1YzQ2OFx1YzQ2Y1x1YzQ3NFx1YzQ3NVx1YzQ3OVx1YzQ4MFx1YzQ5NFx1YzQ5Y1x1YzRiOFx1YzRi''@;'; put 'put ''Y1x1YzRlOVx1YzRmMFx1YzRmMVx1YzRmNFx1YzRmOFx1YzRmYVx1YzRmZlx1YzUwMFx1YzUwMVx1YzUwY1x1YzUxMFx1YzUxNFx1YzUxY1x1YzUyOFx1YzUyOVx1YzUyY1x1YzUzMFx1YzUzOFx1YzUzOVx1YzUzYlx1YzUzZFx1YzU0NFx1YzU0NVx1YzU0OFx1YzU0OVx1YzU0YVx1YzU0Y1x1''@;'; put 'put ''YzU0ZFx1YzU0ZVx1YzU1M1x1YzU1NFx1YzU1NVx1YzU1N1x1YzU1OFx1YzU1OVx1YzU1ZFx1YzU1ZVx1YzU2MFx1YzU2MVx1YzU2NFx1YzU2OFx1YzU3MFx1YzU3MVx1YzU3M1x1YzU3NFx1YzU3NVx1YzU3Y1x1YzU3ZFx1YzU4MFx1YzU4NFx1YzU4N1x1YzU4Y1x1YzU4ZFx1YzU4Zlx1YzU5''@;'; put 'put ''MVx1YzU5NVx1YzU5N1x1YzU5OFx1YzU5Y1x1YzVhMFx1YzVhOVx1YzViNFx1YzViNVx1YzViOFx1YzViOVx1YzViYlx1YzViY1x1YzViZFx1YzViZVx1YzVjNCIsNiwiXHVjNWNjXHVjNWNlIl0sWyJiZjQxIiwiXHVkNDllIiwxMCwiXHVkNGFhIiwxNF0sWyJiZjYxIiwiXHVkNGI5IiwxOCwi''@;'; put 'put ''XHVkNGNkXHVkNGNlXHVkNGNmXHVkNGQxXHVkNGQyXHVkNGQzXHVkNGQ1Il0sWyJiZjgxIiwiXHVkNGQ2Iiw1LCJcdWQ0ZGRcdWQ0ZGVcdWQ0ZTAiLDcsIlx1ZDRlOVx1ZDRlYVx1ZDRlYlx1ZDRlZFx1ZDRlZVx1ZDRlZlx1ZDRmMSIsNiwiXHVkNGY5XHVkNGZhXHVkNGZjXHVjNWQwXHVjNWQx''@;'; put 'put ''XHVjNWQ0XHVjNWQ4XHVjNWUwXHVjNWUxXHVjNWUzXHVjNWU1XHVjNWVjXHVjNWVkXHVjNWVlXHVjNWYwXHVjNWY0XHVjNWY2XHVjNWY3XHVjNWZjIiw1LCJcdWM2MDVcdWM2MDZcdWM2MDdcdWM2MDhcdWM2MGNcdWM2MTBcdWM2MThcdWM2MTlcdWM2MWJcdWM2MWNcdWM2MjRcdWM2MjVcdWM2''@;'; put 'put ''MjhcdWM2MmNcdWM2MmRcdWM2MmVcdWM2MzBcdWM2MzNcdWM2MzRcdWM2MzVcdWM2MzdcdWM2MzlcdWM2M2JcdWM2NDBcdWM2NDFcdWM2NDRcdWM2NDhcdWM2NTBcdWM2NTFcdWM2NTNcdWM2NTRcdWM2NTVcdWM2NWNcdWM2NWRcdWM2NjBcdWM2NmNcdWM2NmZcdWM2NzFcdWM2NzhcdWM2Nzlc''@;'; put 'put ''dWM2N2NcdWM2ODBcdWM2ODhcdWM2ODlcdWM2OGJcdWM2OGRcdWM2OTRcdWM2OTVcdWM2OThcdWM2OWNcdWM2YTRcdWM2YTVcdWM2YTdcdWM2YTlcdWM2YjBcdWM2YjFcdWM2YjRcdWM2YjhcdWM2YjlcdWM2YmFcdWM2YzBcdWM2YzFcdWM2YzNcdWM2YzVcdWM2Y2NcdWM2Y2RcdWM2ZDBcdWM2''@;'; put 'put ''ZDRcdWM2ZGNcdWM2ZGRcdWM2ZTBcdWM2ZTFcdWM2ZTgiXSxbImMwNDEiLCJcdWQ0ZmUiLDUsIlx1ZDUwNVx1ZDUwNlx1ZDUwN1x1ZDUwOVx1ZDUwYVx1ZDUwYlx1ZDUwZCIsNiwiXHVkNTE2XHVkNTE4Iiw1XSxbImMwNjEiLCJcdWQ1MWUiLDI1XSxbImMwODEiLCJcdWQ1MzhcdWQ1MzlcdWQ1''@;'; put 'put ''M2FcdWQ1M2JcdWQ1M2VcdWQ1M2ZcdWQ1NDFcdWQ1NDJcdWQ1NDNcdWQ1NDUiLDYsIlx1ZDU0ZVx1ZDU1MFx1ZDU1MiIsNSwiXHVkNTVhXHVkNTViXHVkNTVkXHVkNTVlXHVkNTVmXHVkNTYxXHVkNTYyXHVkNTYzXHVjNmU5XHVjNmVjXHVjNmYwXHVjNmY4XHVjNmY5XHVjNmZkXHVjNzA0XHVj''@;'; put 'put ''NzA1XHVjNzA4XHVjNzBjXHVjNzE0XHVjNzE1XHVjNzE3XHVjNzE5XHVjNzIwXHVjNzIxXHVjNzI0XHVjNzI4XHVjNzMwXHVjNzMxXHVjNzMzXHVjNzM1XHVjNzM3XHVjNzNjXHVjNzNkXHVjNzQwXHVjNzQ0XHVjNzRhXHVjNzRjXHVjNzRkXHVjNzRmXHVjNzUxIiw3LCJcdWM3NWNcdWM3NjBc''@;'; put 'put ''dWM3NjhcdWM3NmJcdWM3NzRcdWM3NzVcdWM3NzhcdWM3N2NcdWM3N2RcdWM3N2VcdWM3ODNcdWM3ODRcdWM3ODVcdWM3ODdcdWM3ODhcdWM3ODlcdWM3OGFcdWM3OGVcdWM3OTBcdWM3OTFcdWM3OTRcdWM3OTZcdWM3OTdcdWM3OThcdWM3OWFcdWM3YTBcdWM3YTFcdWM3YTNcdWM3YTRcdWM3''@;'; put 'put ''YTVcdWM3YTZcdWM3YWNcdWM3YWRcdWM3YjBcdWM3YjRcdWM3YmNcdWM3YmRcdWM3YmZcdWM3YzBcdWM3YzFcdWM3YzhcdWM3YzlcdWM3Y2NcdWM3Y2VcdWM3ZDBcdWM3ZDhcdWM3ZGRcdWM3ZTRcdWM3ZThcdWM3ZWNcdWM4MDBcdWM4MDFcdWM4MDRcdWM4MDhcdWM4MGEiXSxbImMxNDEiLCJc''@;'; put 'put ''dWQ1NjRcdWQ1NjZcdWQ1NjdcdWQ1NmFcdWQ1NmNcdWQ1NmUiLDUsIlx1ZDU3Nlx1ZDU3N1x1ZDU3OVx1ZDU3YVx1ZDU3Ylx1ZDU3ZCIsNiwiXHVkNTg2XHVkNThhXHVkNThiIl0sWyJjMTYxIiwiXHVkNThjXHVkNThkXHVkNThlXHVkNThmXHVkNTkxIiwxOSwiXHVkNWE2XHVkNWE3Il0sWyJj''@;'; put 'put ''MTgxIiwiXHVkNWE4IiwzMSwiXHVjODEwXHVjODExXHVjODEzXHVjODE1XHVjODE2XHVjODFjXHVjODFkXHVjODIwXHVjODI0XHVjODJjXHVjODJkXHVjODJmXHVjODMxXHVjODM4XHVjODNjXHVjODQwXHVjODQ4XHVjODQ5XHVjODRjXHVjODRkXHVjODU0XHVjODcwXHVjODcxXHVjODc0XHVj''@;'; put 'put ''ODc4XHVjODdhXHVjODgwXHVjODgxXHVjODgzXHVjODg1XHVjODg2XHVjODg3XHVjODhiXHVjODhjXHVjODhkXHVjODk0XHVjODlkXHVjODlmXHVjOGExXHVjOGE4XHVjOGJjXHVjOGJkXHVjOGM0XHVjOGM4XHVjOGNjXHVjOGQ0XHVjOGQ1XHVjOGQ3XHVjOGQ5XHVjOGUwXHVjOGUxXHVjOGU0''@;'; put 'put ''XHVjOGY1XHVjOGZjXHVjOGZkXHVjOTAwXHVjOTA0XHVjOTA1XHVjOTA2XHVjOTBjXHVjOTBkXHVjOTBmXHVjOTExXHVjOTE4XHVjOTJjXHVjOTM0XHVjOTUwXHVjOTUxXHVjOTU0XHVjOTU4XHVjOTYwXHVjOTYxXHVjOTYzXHVjOTZjXHVjOTcwXHVjOTc0XHVjOTdjXHVjOTg4XHVjOTg5XHVj''@;'; put 'put ''OThjXHVjOTkwXHVjOTk4XHVjOTk5XHVjOTliXHVjOTlkXHVjOWMwXHVjOWMxXHVjOWM0XHVjOWM3XHVjOWM4XHVjOWNhXHVjOWQwXHVjOWQxXHVjOWQzIl0sWyJjMjQxIiwiXHVkNWNhXHVkNWNiXHVkNWNkXHVkNWNlXHVkNWNmXHVkNWQxXHVkNWQzIiw0LCJcdWQ1ZGFcdWQ1ZGNcdWQ1ZGUi''@;'; put 'put ''LDUsIlx1ZDVlNlx1ZDVlN1x1ZDVlOVx1ZDVlYVx1ZDVlYlx1ZDVlZFx1ZDVlZSJdLFsiYzI2MSIsIlx1ZDVlZiIsNCwiXHVkNWY2XHVkNWY4XHVkNWZhIiw1LCJcdWQ2MDJcdWQ2MDNcdWQ2MDVcdWQ2MDZcdWQ2MDdcdWQ2MDkiLDYsIlx1ZDYxMiJdLFsiYzI4MSIsIlx1ZDYxNiIsNSwiXHVk''@;'; put 'put ''NjFkXHVkNjFlXHVkNjFmXHVkNjIxXHVkNjIyXHVkNjIzXHVkNjI1Iiw3LCJcdWQ2MmUiLDksIlx1ZDYzYVx1ZDYzYlx1YzlkNVx1YzlkNlx1YzlkOVx1YzlkYVx1YzlkY1x1YzlkZFx1YzllMFx1YzllMlx1YzllNFx1YzllN1x1YzllY1x1YzllZFx1YzllZlx1YzlmMFx1YzlmMVx1YzlmOFx1''@;'; put 'put ''YzlmOVx1YzlmY1x1Y2EwMFx1Y2EwOFx1Y2EwOVx1Y2EwYlx1Y2EwY1x1Y2EwZFx1Y2ExNFx1Y2ExOFx1Y2EyOVx1Y2E0Y1x1Y2E0ZFx1Y2E1MFx1Y2E1NFx1Y2E1Y1x1Y2E1ZFx1Y2E1Zlx1Y2E2MFx1Y2E2MVx1Y2E2OFx1Y2E3ZFx1Y2E4NFx1Y2E5OFx1Y2FiY1x1Y2FiZFx1Y2FjMFx1Y2Fj''@;'; put 'put ''NFx1Y2FjY1x1Y2FjZFx1Y2FjZlx1Y2FkMVx1Y2FkM1x1Y2FkOFx1Y2FkOVx1Y2FlMFx1Y2FlY1x1Y2FmNFx1Y2IwOFx1Y2IxMFx1Y2IxNFx1Y2IxOFx1Y2IyMFx1Y2IyMVx1Y2I0MVx1Y2I0OFx1Y2I0OVx1Y2I0Y1x1Y2I1MFx1Y2I1OFx1Y2I1OVx1Y2I1ZFx1Y2I2NFx1Y2I3OFx1Y2I3OVx1''@;'; put 'put ''Y2I5Y1x1Y2JiOFx1Y2JkNFx1Y2JlNFx1Y2JlN1x1Y2JlOVx1Y2MwY1x1Y2MwZFx1Y2MxMFx1Y2MxNFx1Y2MxY1x1Y2MxZFx1Y2MyMVx1Y2MyMlx1Y2MyN1x1Y2MyOFx1Y2MyOVx1Y2MyY1x1Y2MyZVx1Y2MzMFx1Y2MzOFx1Y2MzOVx1Y2MzYiJdLFsiYzM0MSIsIlx1ZDYzZFx1ZDYzZVx1ZDYz''@;'; put 'put ''Zlx1ZDY0MVx1ZDY0Mlx1ZDY0M1x1ZDY0NFx1ZDY0Nlx1ZDY0N1x1ZDY0YVx1ZDY0Y1x1ZDY0ZVx1ZDY0Zlx1ZDY1MFx1ZDY1Mlx1ZDY1M1x1ZDY1Nlx1ZDY1N1x1ZDY1OVx1ZDY1YVx1ZDY1Ylx1ZDY1ZCIsNF0sWyJjMzYxIiwiXHVkNjYyIiw0LCJcdWQ2NjhcdWQ2NmEiLDUsIlx1ZDY3Mlx1''@;'; put 'put ''ZDY3M1x1ZDY3NSIsMTFdLFsiYzM4MSIsIlx1ZDY4MVx1ZDY4Mlx1ZDY4NFx1ZDY4NiIsNSwiXHVkNjhlXHVkNjhmXHVkNjkxXHVkNjkyXHVkNjkzXHVkNjk1Iiw3LCJcdWQ2OWVcdWQ2YTBcdWQ2YTIiLDUsIlx1ZDZhOVx1ZDZhYVx1Y2MzY1x1Y2MzZFx1Y2MzZVx1Y2M0NFx1Y2M0NVx1Y2M0''@;'; put 'put ''OFx1Y2M0Y1x1Y2M1NFx1Y2M1NVx1Y2M1N1x1Y2M1OFx1Y2M1OVx1Y2M2MFx1Y2M2NFx1Y2M2Nlx1Y2M2OFx1Y2M3MFx1Y2M3NVx1Y2M5OFx1Y2M5OVx1Y2M5Y1x1Y2NhMFx1Y2NhOFx1Y2NhOVx1Y2NhYlx1Y2NhY1x1Y2NhZFx1Y2NiNFx1Y2NiNVx1Y2NiOFx1Y2NiY1x1Y2NjNFx1Y2NjNVx1''@;'; put 'put ''Y2NjN1x1Y2NjOVx1Y2NkMFx1Y2NkNFx1Y2NlNFx1Y2NlY1x1Y2NmMFx1Y2QwMVx1Y2QwOFx1Y2QwOVx1Y2QwY1x1Y2QxMFx1Y2QxOFx1Y2QxOVx1Y2QxYlx1Y2QxZFx1Y2QyNFx1Y2QyOFx1Y2QyY1x1Y2QzOVx1Y2Q1Y1x1Y2Q2MFx1Y2Q2NFx1Y2Q2Y1x1Y2Q2ZFx1Y2Q2Zlx1Y2Q3MVx1Y2Q3''@;'; put 'put ''OFx1Y2Q4OFx1Y2Q5NFx1Y2Q5NVx1Y2Q5OFx1Y2Q5Y1x1Y2RhNFx1Y2RhNVx1Y2RhN1x1Y2RhOVx1Y2RiMFx1Y2RjNFx1Y2RjY1x1Y2RkMFx1Y2RlOFx1Y2RlY1x1Y2RmMFx1Y2RmOFx1Y2RmOVx1Y2RmYlx1Y2RmZFx1Y2UwNFx1Y2UwOFx1Y2UwY1x1Y2UxNFx1Y2UxOVx1Y2UyMFx1Y2UyMVx1''@;'; put 'put ''Y2UyNFx1Y2UyOFx1Y2UzMFx1Y2UzMVx1Y2UzM1x1Y2UzNSJdLFsiYzQ0MSIsIlx1ZDZhYlx1ZDZhZFx1ZDZhZVx1ZDZhZlx1ZDZiMSIsNywiXHVkNmJhXHVkNmJjIiw3LCJcdWQ2YzZcdWQ2YzdcdWQ2YzlcdWQ2Y2FcdWQ2Y2IiXSxbImM0NjEiLCJcdWQ2Y2RcdWQ2Y2VcdWQ2Y2ZcdWQ2ZDBc''@;'; put 'put ''dWQ2ZDJcdWQ2ZDNcdWQ2ZDVcdWQ2ZDZcdWQ2ZDhcdWQ2ZGEiLDUsIlx1ZDZlMVx1ZDZlMlx1ZDZlM1x1ZDZlNVx1ZDZlNlx1ZDZlN1x1ZDZlOSIsNF0sWyJjNDgxIiwiXHVkNmVlXHVkNmVmXHVkNmYxXHVkNmYyXHVkNmYzXHVkNmY0XHVkNmY2Iiw1LCJcdWQ2ZmVcdWQ2ZmZcdWQ3MDFcdWQ3''@;'; put 'put ''MDJcdWQ3MDNcdWQ3MDUiLDExLCJcdWQ3MTJcdWQ3MTNcdWQ3MTRcdWNlNThcdWNlNTlcdWNlNWNcdWNlNWZcdWNlNjBcdWNlNjFcdWNlNjhcdWNlNjlcdWNlNmJcdWNlNmRcdWNlNzRcdWNlNzVcdWNlNzhcdWNlN2NcdWNlODRcdWNlODVcdWNlODdcdWNlODlcdWNlOTBcdWNlOTFcdWNlOTRc''@;'; put 'put ''dWNlOThcdWNlYTBcdWNlYTFcdWNlYTNcdWNlYTRcdWNlYTVcdWNlYWNcdWNlYWRcdWNlYzFcdWNlZTRcdWNlZTVcdWNlZThcdWNlZWJcdWNlZWNcdWNlZjRcdWNlZjVcdWNlZjdcdWNlZjhcdWNlZjlcdWNmMDBcdWNmMDFcdWNmMDRcdWNmMDhcdWNmMTBcdWNmMTFcdWNmMTNcdWNmMTVcdWNm''@;'; put 'put ''MWNcdWNmMjBcdWNmMjRcdWNmMmNcdWNmMmRcdWNmMmZcdWNmMzBcdWNmMzFcdWNmMzhcdWNmNTRcdWNmNTVcdWNmNThcdWNmNWNcdWNmNjRcdWNmNjVcdWNmNjdcdWNmNjlcdWNmNzBcdWNmNzFcdWNmNzRcdWNmNzhcdWNmODBcdWNmODVcdWNmOGNcdWNmYTFcdWNmYThcdWNmYjBcdWNmYzRc''@;'; put 'put ''dWNmZTBcdWNmZTFcdWNmZTRcdWNmZThcdWNmZjBcdWNmZjFcdWNmZjNcdWNmZjVcdWNmZmNcdWQwMDBcdWQwMDRcdWQwMTFcdWQwMThcdWQwMmRcdWQwMzRcdWQwMzVcdWQwMzhcdWQwM2MiXSxbImM1NDEiLCJcdWQ3MTVcdWQ3MTZcdWQ3MTdcdWQ3MWFcdWQ3MWJcdWQ3MWRcdWQ3MWVcdWQ3''@;'; put 'put ''MWZcdWQ3MjEiLDYsIlx1ZDcyYVx1ZDcyY1x1ZDcyZSIsNSwiXHVkNzM2XHVkNzM3XHVkNzM5Il0sWyJjNTYxIiwiXHVkNzNhXHVkNzNiXHVkNzNkIiw2LCJcdWQ3NDVcdWQ3NDZcdWQ3NDhcdWQ3NGEiLDUsIlx1ZDc1Mlx1ZDc1M1x1ZDc1NVx1ZDc1YSIsNF0sWyJjNTgxIiwiXHVkNzVmXHVk''@;'; put 'put ''NzYyXHVkNzY0XHVkNzY2XHVkNzY3XHVkNzY4XHVkNzZhXHVkNzZiXHVkNzZkXHVkNzZlXHVkNzZmXHVkNzcxXHVkNzcyXHVkNzczXHVkNzc1Iiw2LCJcdWQ3N2VcdWQ3N2ZcdWQ3ODBcdWQ3ODIiLDUsIlx1ZDc4YVx1ZDc4Ylx1ZDA0NFx1ZDA0NVx1ZDA0N1x1ZDA0OVx1ZDA1MFx1ZDA1NFx1''@;'; put 'put ''ZDA1OFx1ZDA2MFx1ZDA2Y1x1ZDA2ZFx1ZDA3MFx1ZDA3NFx1ZDA3Y1x1ZDA3ZFx1ZDA4MVx1ZDBhNFx1ZDBhNVx1ZDBhOFx1ZDBhY1x1ZDBiNFx1ZDBiNVx1ZDBiN1x1ZDBiOVx1ZDBjMFx1ZDBjMVx1ZDBjNFx1ZDBjOFx1ZDBjOVx1ZDBkMFx1ZDBkMVx1ZDBkM1x1ZDBkNFx1ZDBkNVx1ZDBk''@;'; put 'put ''Y1x1ZDBkZFx1ZDBlMFx1ZDBlNFx1ZDBlY1x1ZDBlZFx1ZDBlZlx1ZDBmMFx1ZDBmMVx1ZDBmOFx1ZDEwZFx1ZDEzMFx1ZDEzMVx1ZDEzNFx1ZDEzOFx1ZDEzYVx1ZDE0MFx1ZDE0MVx1ZDE0M1x1ZDE0NFx1ZDE0NVx1ZDE0Y1x1ZDE0ZFx1ZDE1MFx1ZDE1NFx1ZDE1Y1x1ZDE1ZFx1ZDE1Zlx1''@;'; put 'put ''ZDE2MVx1ZDE2OFx1ZDE2Y1x1ZDE3Y1x1ZDE4NFx1ZDE4OFx1ZDFhMFx1ZDFhMVx1ZDFhNFx1ZDFhOFx1ZDFiMFx1ZDFiMVx1ZDFiM1x1ZDFiNVx1ZDFiYVx1ZDFiY1x1ZDFjMFx1ZDFkOFx1ZDFmNFx1ZDFmOFx1ZDIwN1x1ZDIwOVx1ZDIxMFx1ZDIyY1x1ZDIyZFx1ZDIzMFx1ZDIzNFx1ZDIz''@;'; put 'put ''Y1x1ZDIzZFx1ZDIzZlx1ZDI0MVx1ZDI0OFx1ZDI1YyJdLFsiYzY0MSIsIlx1ZDc4ZFx1ZDc4ZVx1ZDc4Zlx1ZDc5MSIsNiwiXHVkNzlhXHVkNzljXHVkNzllIiw1XSxbImM2YTEiLCJcdWQyNjRcdWQyODBcdWQyODFcdWQyODRcdWQyODhcdWQyOTBcdWQyOTFcdWQyOTVcdWQyOWNcdWQyYTBc''@;'; put 'put ''dWQyYTRcdWQyYWNcdWQyYjFcdWQyYjhcdWQyYjlcdWQyYmNcdWQyYmZcdWQyYzBcdWQyYzJcdWQyYzhcdWQyYzlcdWQyY2JcdWQyZDRcdWQyZDhcdWQyZGNcdWQyZTRcdWQyZTVcdWQyZjBcdWQyZjFcdWQyZjRcdWQyZjhcdWQzMDBcdWQzMDFcdWQzMDNcdWQzMDVcdWQzMGNcdWQzMGRcdWQz''@;'; put 'put ''MGVcdWQzMTBcdWQzMTRcdWQzMTZcdWQzMWNcdWQzMWRcdWQzMWZcdWQzMjBcdWQzMjFcdWQzMjVcdWQzMjhcdWQzMjlcdWQzMmNcdWQzMzBcdWQzMzhcdWQzMzlcdWQzM2JcdWQzM2NcdWQzM2RcdWQzNDRcdWQzNDVcdWQzN2NcdWQzN2RcdWQzODBcdWQzODRcdWQzOGNcdWQzOGRcdWQzOGZc''@;'; put 'put ''dWQzOTBcdWQzOTFcdWQzOThcdWQzOTlcdWQzOWNcdWQzYTBcdWQzYThcdWQzYTlcdWQzYWJcdWQzYWRcdWQzYjRcdWQzYjhcdWQzYmNcdWQzYzRcdWQzYzVcdWQzYzhcdWQzYzlcdWQzZDBcdWQzZDhcdWQzZTFcdWQzZTNcdWQzZWNcdWQzZWRcdWQzZjBcdWQzZjRcdWQzZmNcdWQzZmRcdWQz''@;'; put 'put ''ZmZcdWQ0MDEiXSxbImM3YTEiLCJcdWQ0MDhcdWQ0MWRcdWQ0NDBcdWQ0NDRcdWQ0NWNcdWQ0NjBcdWQ0NjRcdWQ0NmRcdWQ0NmZcdWQ0NzhcdWQ0NzlcdWQ0N2NcdWQ0N2ZcdWQ0ODBcdWQ0ODJcdWQ0ODhcdWQ0ODlcdWQ0OGJcdWQ0OGRcdWQ0OTRcdWQ0YTlcdWQ0Y2NcdWQ0ZDBcdWQ0ZDRc''@;'; put 'put ''dWQ0ZGNcdWQ0ZGZcdWQ0ZThcdWQ0ZWNcdWQ0ZjBcdWQ0ZjhcdWQ0ZmJcdWQ0ZmRcdWQ1MDRcdWQ1MDhcdWQ1MGNcdWQ1MTRcdWQ1MTVcdWQ1MTdcdWQ1M2NcdWQ1M2RcdWQ1NDBcdWQ1NDRcdWQ1NGNcdWQ1NGRcdWQ1NGZcdWQ1NTFcdWQ1NThcdWQ1NTlcdWQ1NWNcdWQ1NjBcdWQ1NjVcdWQ1''@;'; put 'put ''NjhcdWQ1NjlcdWQ1NmJcdWQ1NmRcdWQ1NzRcdWQ1NzVcdWQ1NzhcdWQ1N2NcdWQ1ODRcdWQ1ODVcdWQ1ODdcdWQ1ODhcdWQ1ODlcdWQ1OTBcdWQ1YTVcdWQ1YzhcdWQ1YzlcdWQ1Y2NcdWQ1ZDBcdWQ1ZDJcdWQ1ZDhcdWQ1ZDlcdWQ1ZGJcdWQ1ZGRcdWQ1ZTRcdWQ1ZTVcdWQ1ZThcdWQ1ZWNc''@;'; put 'put ''dWQ1ZjRcdWQ1ZjVcdWQ1ZjdcdWQ1ZjlcdWQ2MDBcdWQ2MDFcdWQ2MDRcdWQ2MDhcdWQ2MTBcdWQ2MTFcdWQ2MTNcdWQ2MTRcdWQ2MTVcdWQ2MWNcdWQ2MjAiXSxbImM4YTEiLCJcdWQ2MjRcdWQ2MmRcdWQ2MzhcdWQ2MzlcdWQ2M2NcdWQ2NDBcdWQ2NDVcdWQ2NDhcdWQ2NDlcdWQ2NGJcdWQ2''@;'; put 'put ''NGRcdWQ2NTFcdWQ2NTRcdWQ2NTVcdWQ2NThcdWQ2NWNcdWQ2NjdcdWQ2NjlcdWQ2NzBcdWQ2NzFcdWQ2NzRcdWQ2ODNcdWQ2ODVcdWQ2OGNcdWQ2OGRcdWQ2OTBcdWQ2OTRcdWQ2OWRcdWQ2OWZcdWQ2YTFcdWQ2YThcdWQ2YWNcdWQ2YjBcdWQ2YjlcdWQ2YmJcdWQ2YzRcdWQ2YzVcdWQ2Yzhc''@;'; put 'put ''dWQ2Y2NcdWQ2ZDFcdWQ2ZDRcdWQ2ZDdcdWQ2ZDlcdWQ2ZTBcdWQ2ZTRcdWQ2ZThcdWQ2ZjBcdWQ2ZjVcdWQ2ZmNcdWQ2ZmRcdWQ3MDBcdWQ3MDRcdWQ3MTFcdWQ3MThcdWQ3MTlcdWQ3MWNcdWQ3MjBcdWQ3MjhcdWQ3MjlcdWQ3MmJcdWQ3MmRcdWQ3MzRcdWQ3MzVcdWQ3MzhcdWQ3M2NcdWQ3''@;'; put 'put ''NDRcdWQ3NDdcdWQ3NDlcdWQ3NTBcdWQ3NTFcdWQ3NTRcdWQ3NTZcdWQ3NTdcdWQ3NThcdWQ3NTlcdWQ3NjBcdWQ3NjFcdWQ3NjNcdWQ3NjVcdWQ3NjlcdWQ3NmNcdWQ3NzBcdWQ3NzRcdWQ3N2NcdWQ3N2RcdWQ3ODFcdWQ3ODhcdWQ3ODlcdWQ3OGNcdWQ3OTBcdWQ3OThcdWQ3OTlcdWQ3OWJc''@;'; put 'put ''dWQ3OWQiXSxbImNhYTEiLCJcdTRmM2RcdTRmNzNcdTUwNDdcdTUwZjlcdTUyYTBcdTUzZWZcdTU0NzVcdTU0ZTVcdTU2MDlcdTVhYzFcdTViYjZcdTY2ODdcdTY3YjZcdTY3YjdcdTY3ZWZcdTZiNGNcdTczYzJcdTc1YzJcdTdhM2NcdTgyZGJcdTgzMDRcdTg4NTdcdTg4ODhcdThhMzZcdThj''@;'; put 'put ''YzhcdThkY2ZcdThlZmJcdThmZTZcdTk5ZDVcdTUyM2JcdTUzNzRcdTU0MDRcdTYwNmFcdTYxNjRcdTZiYmNcdTczY2ZcdTgxMWFcdTg5YmFcdTg5ZDJcdTk1YTNcdTRmODNcdTUyMGFcdTU4YmVcdTU5NzhcdTU5ZTZcdTVlNzJcdTVlNzlcdTYxYzdcdTYzYzBcdTY3NDZcdTY3ZWNcdTY4N2Zc''@;'; put 'put ''dTZmOTdcdTc2NGVcdTc3MGJcdTc4ZjVcdTdhMDhcdTdhZmZcdTdjMjFcdTgwOWRcdTgyNmVcdTgyNzFcdThhZWJcdTk1OTNcdTRlNmJcdTU1OWRcdTY2ZjdcdTZlMzRcdTc4YTNcdTdhZWRcdTg0NWJcdTg5MTBcdTg3NGVcdTk3YThcdTUyZDhcdTU3NGVcdTU4MmFcdTVkNGNcdTYxMWZcdTYx''@;'; put 'put ''YmVcdTYyMjFcdTY1NjJcdTY3ZDFcdTZhNDRcdTZlMWJcdTc1MThcdTc1YjNcdTc2ZTNcdTc3YjBcdTdkM2FcdTkwYWZcdTk0NTFcdTk0NTJcdTlmOTUiXSxbImNiYTEiLCJcdTUzMjNcdTVjYWNcdTc1MzJcdTgwZGJcdTkyNDBcdTk1OThcdTUyNWJcdTU4MDhcdTU5ZGNcdTVjYTFcdTVkMTdc''@;'; put 'put ''dTVlYjdcdTVmM2FcdTVmNGFcdTYxNzdcdTZjNWZcdTc1N2FcdTc1ODZcdTdjZTBcdTdkNzNcdTdkYjFcdTdmOGNcdTgxNTRcdTgyMjFcdTg1OTFcdTg5NDFcdThiMWJcdTkyZmNcdTk2NGRcdTljNDdcdTRlY2JcdTRlZjdcdTUwMGJcdTUxZjFcdTU4NGZcdTYxMzdcdTYxM2VcdTYxNjhcdTY1''@;'; put 'put ''MzlcdTY5ZWFcdTZmMTFcdTc1YTVcdTc2ODZcdTc2ZDZcdTdiODdcdTgyYTVcdTg0Y2JcdWY5MDBcdTkzYTdcdTk1OGJcdTU1ODBcdTViYTJcdTU3NTFcdWY5MDFcdTdjYjNcdTdmYjlcdTkxYjVcdTUwMjhcdTUzYmJcdTVjNDVcdTVkZThcdTYyZDJcdTYzNmVcdTY0ZGFcdTY0ZTdcdTZlMjBc''@;'; put 'put ''dTcwYWNcdTc5NWJcdThkZGRcdThlMWVcdWY5MDJcdTkwN2RcdTkyNDVcdTkyZjhcdTRlN2VcdTRlZjZcdTUwNjVcdTVkZmVcdTVlZmFcdTYxMDZcdTY5NTdcdTgxNzFcdTg2NTRcdThlNDdcdTkzNzVcdTlhMmJcdTRlNWVcdTUwOTFcdTY3NzBcdTY4NDBcdTUxMDlcdTUyOGRcdTUyOTJcdTZh''@;'; put 'put ''YTIiXSxbImNjYTEiLCJcdTc3YmNcdTkyMTBcdTllZDRcdTUyYWJcdTYwMmZcdThmZjJcdTUwNDhcdTYxYTlcdTYzZWRcdTY0Y2FcdTY4M2NcdTZhODRcdTZmYzBcdTgxODhcdTg5YTFcdTk2OTRcdTU4MDVcdTcyN2RcdTcyYWNcdTc1MDRcdTdkNzlcdTdlNmRcdTgwYTlcdTg5OGJcdThiNzRc''@;'; put 'put ''dTkwNjNcdTlkNTFcdTYyODlcdTZjN2FcdTZmNTRcdTdkNTBcdTdmM2FcdThhMjNcdTUxN2NcdTYxNGFcdTdiOWRcdThiMTlcdTkyNTdcdTkzOGNcdTRlYWNcdTRmZDNcdTUwMWVcdTUwYmVcdTUxMDZcdTUyYzFcdTUyY2RcdTUzN2ZcdTU3NzBcdTU4ODNcdTVlOWFcdTVmOTFcdTYxNzZcdTYx''@;'; put 'put ''YWNcdTY0Y2VcdTY1NmNcdTY2NmZcdTY2YmJcdTY2ZjRcdTY4OTdcdTZkODdcdTcwODVcdTcwZjFcdTc0OWZcdTc0YTVcdTc0Y2FcdTc1ZDlcdTc4NmNcdTc4ZWNcdTdhZGZcdTdhZjZcdTdkNDVcdTdkOTNcdTgwMTVcdTgwM2ZcdTgxMWJcdTgzOTZcdThiNjZcdThmMTVcdTkwMTVcdTkzZTFc''@;'; put 'put ''dTk4MDNcdTk4MzhcdTlhNWFcdTliZThcdTRmYzJcdTU1NTNcdTU4M2FcdTU5NTFcdTViNjNcdTVjNDZcdTYwYjhcdTYyMTJcdTY4NDJcdTY4YjAiXSxbImNkYTEiLCJcdTY4ZThcdTZlYWFcdTc1NGNcdTc2NzhcdTc4Y2VcdTdhM2RcdTdjZmJcdTdlNmJcdTdlN2NcdThhMDhcdThhYTFcdThj''@;'; put 'put ''M2ZcdTk2OGVcdTlkYzRcdTUzZTRcdTUzZTlcdTU0NGFcdTU0NzFcdTU2ZmFcdTU5ZDFcdTViNjRcdTVjM2JcdTVlYWJcdTYyZjdcdTY1MzdcdTY1NDVcdTY1NzJcdTY2YTBcdTY3YWZcdTY5YzFcdTZjYmRcdTc1ZmNcdTc2OTBcdTc3N2VcdTdhM2ZcdTdmOTRcdTgwMDNcdTgwYTFcdTgxOGZc''@;'; put 'put ''dTgyZTZcdTgyZmRcdTgzZjBcdTg1YzFcdTg4MzFcdTg4YjRcdThhYTVcdWY5MDNcdThmOWNcdTkzMmVcdTk2YzdcdTk4NjdcdTlhZDhcdTlmMTNcdTU0ZWRcdTY1OWJcdTY2ZjJcdTY4OGZcdTdhNDBcdThjMzdcdTlkNjBcdTU2ZjBcdTU3NjRcdTVkMTFcdTY2MDZcdTY4YjFcdTY4Y2RcdTZl''@;'; put 'put ''ZmVcdTc0MjhcdTg4OWVcdTliZTRcdTZjNjhcdWY5MDRcdTlhYThcdTRmOWJcdTUxNmNcdTUxNzFcdTUyOWZcdTViNTRcdTVkZTVcdTYwNTBcdTYwNmRcdTYyZjFcdTYzYTdcdTY1M2JcdTczZDlcdTdhN2FcdTg2YTNcdThjYTJcdTk3OGZcdTRlMzJcdTViZTFcdTYyMDhcdTY3OWNcdTc0ZGMi''@;'; put 'put ''XSxbImNlYTEiLCJcdTc5ZDFcdTgzZDNcdThhODdcdThhYjJcdThkZThcdTkwNGVcdTkzNGJcdTk4NDZcdTVlZDNcdTY5ZThcdTg1ZmZcdTkwZWRcdWY5MDVcdTUxYTBcdTViOThcdTViZWNcdTYxNjNcdTY4ZmFcdTZiM2VcdTcwNGNcdTc0MmZcdTc0ZDhcdTdiYTFcdTdmNTBcdTgzYzVcdTg5''@;'; put 'put ''YzBcdThjYWJcdTk1ZGNcdTk5MjhcdTUyMmVcdTYwNWRcdTYyZWNcdTkwMDJcdTRmOGFcdTUxNDlcdTUzMjFcdTU4ZDlcdTVlZTNcdTY2ZTBcdTZkMzhcdTcwOWFcdTcyYzJcdTczZDZcdTdiNTBcdTgwZjFcdTk0NWJcdTUzNjZcdTYzOWJcdTdmNmJcdTRlNTZcdTUwODBcdTU4NGFcdTU4ZGVc''@;'; put 'put ''dTYwMmFcdTYxMjdcdTYyZDBcdTY5ZDBcdTliNDFcdTViOGZcdTdkMThcdTgwYjFcdThmNWZcdTRlYTRcdTUwZDFcdTU0YWNcdTU1YWNcdTViMGNcdTVkYTBcdTVkZTdcdTY1MmFcdTY1NGVcdTY4MjFcdTZhNGJcdTcyZTFcdTc2OGVcdTc3ZWZcdTdkNWVcdTdmZjlcdTgxYTBcdTg1NGVcdTg2''@;'; put 'put ''ZGZcdThmMDNcdThmNGVcdTkwY2FcdTk5MDNcdTlhNTVcdTliYWJcdTRlMThcdTRlNDVcdTRlNWRcdTRlYzdcdTRmZjFcdTUxNzdcdTUyZmUiXSxbImNmYTEiLCJcdTUzNDBcdTUzZTNcdTUzZTVcdTU0OGVcdTU2MTRcdTU3NzVcdTU3YTJcdTViYzdcdTVkODdcdTVlZDBcdTYxZmNcdTYyZDhc''@;'; put 'put ''dTY1NTFcdTY3YjhcdTY3ZTlcdTY5Y2JcdTZiNTBcdTZiYzZcdTZiZWNcdTZjNDJcdTZlOWRcdTcwNzhcdTcyZDdcdTczOTZcdTc0MDNcdTc3YmZcdTc3ZTlcdTdhNzZcdTdkN2ZcdTgwMDlcdTgxZmNcdTgyMDVcdTgyMGFcdTgyZGZcdTg4NjJcdThiMzNcdThjZmNcdThlYzBcdTkwMTFcdTkw''@;'; put 'put ''YjFcdTkyNjRcdTkyYjZcdTk5ZDJcdTlhNDVcdTljZTlcdTlkZDdcdTlmOWNcdTU3MGJcdTVjNDBcdTgzY2FcdTk3YTBcdTk3YWJcdTllYjRcdTU0MWJcdTdhOThcdTdmYTRcdTg4ZDlcdThlY2RcdTkwZTFcdTU4MDBcdTVjNDhcdTYzOThcdTdhOWZcdTViYWVcdTVmMTNcdTdhNzlcdTdhYWVc''@;'; put 'put ''dTgyOGVcdThlYWNcdTUwMjZcdTUyMzhcdTUyZjhcdTUzNzdcdTU3MDhcdTYyZjNcdTYzNzJcdTZiMGFcdTZkYzNcdTc3MzdcdTUzYTVcdTczNTdcdTg1NjhcdThlNzZcdTk1ZDVcdTY3M2FcdTZhYzNcdTZmNzBcdThhNmRcdThlY2NcdTk5NGJcdWY5MDZcdTY2NzdcdTZiNzhcdThjYjQiXSxb''@;'; put 'put ''ImQwYTEiLCJcdTliM2NcdWY5MDdcdTUzZWJcdTU3MmRcdTU5NGVcdTYzYzZcdTY5ZmJcdTczZWFcdTc4NDVcdTdhYmFcdTdhYzVcdTdjZmVcdTg0NzVcdTg5OGZcdThkNzNcdTkwMzVcdTk1YThcdTUyZmJcdTU3NDdcdTc1NDdcdTdiNjBcdTgzY2NcdTkyMWVcdWY5MDhcdTZhNThcdTUxNGJc''@;'; put 'put ''dTUyNGJcdTUyODdcdTYyMWZcdTY4ZDhcdTY5NzVcdTk2OTlcdTUwYzVcdTUyYTRcdTUyZTRcdTYxYzNcdTY1YTRcdTY4MzlcdTY5ZmZcdTc0N2VcdTdiNGJcdTgyYjlcdTgzZWJcdTg5YjJcdThiMzlcdThmZDFcdTk5NDlcdWY5MDlcdTRlY2FcdTU5OTdcdTY0ZDJcdTY2MTFcdTZhOGVcdTc0''@;'; put 'put ''MzRcdTc5ODFcdTc5YmRcdTgyYTlcdTg4N2VcdTg4N2ZcdTg5NWZcdWY5MGFcdTkzMjZcdTRmMGJcdTUzY2FcdTYwMjVcdTYyNzFcdTZjNzJcdTdkMWFcdTdkNjZcdTRlOThcdTUxNjJcdTc3ZGNcdTgwYWZcdTRmMDFcdTRmMGVcdTUxNzZcdTUxODBcdTU1ZGNcdTU2NjhcdTU3M2JcdTU3ZmFc''@;'; put 'put ''dTU3ZmNcdTU5MTRcdTU5NDdcdTU5OTNcdTViYzRcdTVjOTBcdTVkMGVcdTVkZjFcdTVlN2VcdTVmY2NcdTYyODBcdTY1ZDdcdTY1ZTMiXSxbImQxYTEiLCJcdTY3MWVcdTY3MWZcdTY3NWVcdTY4Y2JcdTY4YzRcdTZhNWZcdTZiM2FcdTZjMjNcdTZjN2RcdTZjODJcdTZkYzdcdTczOThcdTc0''@;'; put 'put ''MjZcdTc0MmFcdTc0ODJcdTc0YTNcdTc1NzhcdTc1N2ZcdTc4ODFcdTc4ZWZcdTc5NDFcdTc5NDdcdTc5NDhcdTc5N2FcdTdiOTVcdTdkMDBcdTdkYmFcdTdmODhcdTgwMDZcdTgwMmRcdTgwOGNcdThhMThcdThiNGZcdThjNDhcdThkNzdcdTkzMjFcdTkzMjRcdTk4ZTJcdTk5NTFcdTlhMGVc''@;'; put 'put ''dTlhMGZcdTlhNjVcdTllOTJcdTdkY2FcdTRmNzZcdTU0MDlcdTYyZWVcdTY4NTRcdTkxZDFcdTU1YWJcdTUxM2FcdWY5MGJcdWY5MGNcdTVhMWNcdTYxZTZcdWY5MGRcdTYyY2ZcdTYyZmZcdWY5MGUiLDUsIlx1OTBhM1x1ZjkxNCIsNCwiXHU4YWZlXHVmOTE5XHVmOTFhXHVmOTFiXHVmOTFj''@;'; put 'put ''XHU2Njk2XHVmOTFkXHU3MTU2XHVmOTFlXHVmOTFmXHU5NmUzXHVmOTIwXHU2MzRmXHU2MzdhXHU1MzU3XHVmOTIxXHU2NzhmXHU2OTYwXHU2ZTczXHVmOTIyXHU3NTM3XHVmOTIzXHVmOTI0XHVmOTI1Il0sWyJkMmExIiwiXHU3ZDBkXHVmOTI2XHVmOTI3XHU4ODcyXHU1NmNhXHU1YTE4XHVm''@;'; put 'put ''OTI4Iiw0LCJcdTRlNDNcdWY5MmRcdTUxNjdcdTU5NDhcdTY3ZjBcdTgwMTBcdWY5MmVcdTU5NzNcdTVlNzRcdTY0OWFcdTc5Y2FcdTVmZjVcdTYwNmNcdTYyYzhcdTYzN2JcdTViZTdcdTViZDdcdTUyYWFcdWY5MmZcdTU5NzRcdTVmMjlcdTYwMTJcdWY5MzBcdWY5MzFcdWY5MzJcdTc0NTlc''@;'; put 'put ''dWY5MzMiLDUsIlx1OTlkMVx1ZjkzOSIsMTAsIlx1NmZjM1x1Zjk0NFx1Zjk0NVx1ODFiZlx1OGZiMlx1NjBmMVx1Zjk0Nlx1Zjk0N1x1ODE2Nlx1Zjk0OFx1Zjk0OVx1NWMzZlx1Zjk0YSIsNywiXHU1YWU5XHU4YTI1XHU2NzdiXHU3ZDEwXHVmOTUyIiw1LCJcdTgwZmRcdWY5NThcdWY5NTlc''@;'; put 'put ''dTVjM2NcdTZjZTVcdTUzM2ZcdTZlYmFcdTU5MWFcdTgzMzYiXSxbImQzYTEiLCJcdTRlMzlcdTRlYjZcdTRmNDZcdTU1YWVcdTU3MThcdTU4YzdcdTVmNTZcdTY1YjdcdTY1ZTZcdTZhODBcdTZiYjVcdTZlNGRcdTc3ZWRcdTdhZWZcdTdjMWVcdTdkZGVcdTg2Y2JcdTg4OTJcdTkxMzJcdTkz''@;'; put 'put ''NWJcdTY0YmJcdTZmYmVcdTczN2FcdTc1YjhcdTkwNTRcdTU1NTZcdTU3NGRcdTYxYmFcdTY0ZDRcdTY2YzdcdTZkZTFcdTZlNWJcdTZmNmRcdTZmYjlcdTc1ZjBcdTgwNDNcdTgxYmRcdTg1NDFcdTg5ODNcdThhYzdcdThiNWFcdTkzMWZcdTZjOTNcdTc1NTNcdTdiNTRcdThlMGZcdTkwNWRc''@;'; put 'put ''dTU1MTBcdTU4MDJcdTU4NThcdTVlNjJcdTYyMDdcdTY0OWVcdTY4ZTBcdTc1NzZcdTdjZDZcdTg3YjNcdTllZThcdTRlZTNcdTU3ODhcdTU3NmVcdTU5MjdcdTVjMGRcdTVjYjFcdTVlMzZcdTVmODVcdTYyMzRcdTY0ZTFcdTczYjNcdTgxZmFcdTg4OGJcdThjYjhcdTk2OGFcdTllZGJcdTVi''@;'; put 'put ''ODVcdTVmYjdcdTYwYjNcdTUwMTJcdTUyMDBcdTUyMzBcdTU3MTZcdTU4MzVcdTU4NTdcdTVjMGVcdTVjNjBcdTVjZjZcdTVkOGJcdTVlYTZcdTVmOTJcdTYwYmNcdTYzMTFcdTYzODlcdTY0MTdcdTY4NDMiXSxbImQ0YTEiLCJcdTY4ZjlcdTZhYzJcdTZkZDhcdTZlMjFcdTZlZDRcdTZmZTRc''@;'; put 'put ''dTcxZmVcdTc2ZGNcdTc3NzlcdTc5YjFcdTdhM2JcdTg0MDRcdTg5YTlcdThjZWRcdThkZjNcdThlNDhcdTkwMDNcdTkwMTRcdTkwNTNcdTkwZmRcdTkzNGRcdTk2NzZcdTk3ZGNcdTZiZDJcdTcwMDZcdTcyNThcdTcyYTJcdTczNjhcdTc3NjNcdTc5YmZcdTdiZTRcdTdlOWJcdThiODBcdTU4''@;'; put 'put ''YTlcdTYwYzdcdTY1NjZcdTY1ZmRcdTY2YmVcdTZjOGNcdTcxMWVcdTcxYzlcdThjNWFcdTk4MTNcdTRlNmRcdTdhODFcdTRlZGRcdTUxYWNcdTUxY2RcdTUyZDVcdTU0MGNcdTYxYTdcdTY3NzFcdTY4NTBcdTY4ZGZcdTZkMWVcdTZmN2NcdTc1YmNcdTc3YjNcdTdhZTVcdTgwZjRcdTg0NjNc''@;'; put 'put ''dTkyODVcdTUxNWNcdTY1OTdcdTY3NWNcdTY3OTNcdTc1ZDhcdTdhYzdcdTgzNzNcdWY5NWFcdThjNDZcdTkwMTdcdTk4MmRcdTVjNmZcdTgxYzBcdTgyOWFcdTkwNDFcdTkwNmZcdTkyMGRcdTVmOTdcdTVkOWRcdTZhNTlcdTcxYzhcdTc2N2JcdTdiNDlcdTg1ZTRcdThiMDRcdTkxMjdcdTlh''@;'; put 'put ''MzBcdTU1ODdcdTYxZjZcdWY5NWJcdTc2NjlcdTdmODUiXSxbImQ1YTEiLCJcdTg2M2ZcdTg3YmFcdTg4ZjhcdTkwOGZcdWY5NWNcdTZkMWJcdTcwZDlcdTczZGVcdTdkNjFcdTg0M2RcdWY5NWRcdTkxNmFcdTk5ZjFcdWY5NWVcdTRlODJcdTUzNzVcdTZiMDRcdTZiMTJcdTcwM2VcdTcyMWJc''@;'; put 'put ''dTg2MmRcdTllMWVcdTUyNGNcdThmYTNcdTVkNTBcdTY0ZTVcdTY1MmNcdTZiMTZcdTZmZWJcdTdjNDNcdTdlOWNcdTg1Y2RcdTg5NjRcdTg5YmRcdTYyYzlcdTgxZDhcdTg4MWZcdTVlY2FcdTY3MTdcdTZkNmFcdTcyZmNcdTc0MDVcdTc0NmZcdTg3ODJcdTkwZGVcdTRmODZcdTVkMGRcdTVm''@;'; put 'put ''YTBcdTg0MGFcdTUxYjdcdTYzYTBcdTc1NjVcdTRlYWVcdTUwMDZcdTUxNjlcdTUxYzlcdTY4ODFcdTZhMTFcdTdjYWVcdTdjYjFcdTdjZTdcdTgyNmZcdThhZDJcdThmMWJcdTkxY2ZcdTRmYjZcdTUxMzdcdTUyZjVcdTU0NDJcdTVlZWNcdTYxNmVcdTYyM2VcdTY1YzVcdTZhZGFcdTZmZmVc''@;'; put 'put ''dTc5MmFcdTg1ZGNcdTg4MjNcdTk1YWRcdTlhNjJcdTlhNmFcdTllOTdcdTllY2VcdTUyOWJcdTY2YzZcdTZiNzdcdTcwMWRcdTc5MmJcdThmNjJcdTk3NDJcdTYxOTBcdTYyMDBcdTY1MjNcdTZmMjMiXSxbImQ2YTEiLCJcdTcxNDlcdTc0ODlcdTdkZjRcdTgwNmZcdTg0ZWVcdThmMjZcdTkw''@;'; put 'put ''MjNcdTkzNGFcdTUxYmRcdTUyMTdcdTUyYTNcdTZkMGNcdTcwYzhcdTg4YzJcdTVlYzlcdTY1ODJcdTZiYWVcdTZmYzJcdTdjM2VcdTczNzVcdTRlZTRcdTRmMzZcdTU2ZjlcdWY5NWZcdTVjYmFcdTVkYmFcdTYwMWNcdTczYjJcdTdiMmRcdTdmOWFcdTdmY2VcdTgwNDZcdTkwMWVcdTkyMzRc''@;'; put 'put ''dTk2ZjZcdTk3NDhcdTk4MThcdTlmNjFcdTRmOGJcdTZmYTdcdTc5YWVcdTkxYjRcdTk2YjdcdTUyZGVcdWY5NjBcdTY0ODhcdTY0YzRcdTZhZDNcdTZmNWVcdTcwMThcdTcyMTBcdTc2ZTdcdTgwMDFcdTg2MDZcdTg2NWNcdThkZWZcdThmMDVcdTk3MzJcdTliNmZcdTlkZmFcdTllNzVcdTc4''@;'; put 'put ''OGNcdTc5N2ZcdTdkYTBcdTgzYzlcdTkzMDRcdTllN2ZcdTllOTNcdThhZDZcdTU4ZGZcdTVmMDRcdTY3MjdcdTcwMjdcdTc0Y2ZcdTdjNjBcdTgwN2VcdTUxMjFcdTcwMjhcdTcyNjJcdTc4Y2FcdThjYzJcdThjZGFcdThjZjRcdTk2ZjdcdTRlODZcdTUwZGFcdTViZWVcdTVlZDZcdTY1OTlc''@;'; put 'put ''dTcxY2VcdTc2NDJcdTc3YWRcdTgwNGFcdTg0ZmMiXSxbImQ3YTEiLCJcdTkwN2NcdTliMjdcdTlmOGRcdTU4ZDhcdTVhNDFcdTVjNjJcdTZhMTNcdTZkZGFcdTZmMGZcdTc2M2JcdTdkMmZcdTdlMzdcdTg1MWVcdTg5MzhcdTkzZTRcdTk2NGJcdTUyODlcdTY1ZDJcdTY3ZjNcdTY5YjRcdTZk''@;'; put 'put ''NDFcdTZlOWNcdTcwMGZcdTc0MDlcdTc0NjBcdTc1NTlcdTc2MjRcdTc4NmJcdThiMmNcdTk4NWVcdTUxNmRcdTYyMmVcdTk2NzhcdTRmOTZcdTUwMmJcdTVkMTlcdTZkZWFcdTdkYjhcdThmMmFcdTVmOGJcdTYxNDRcdTY4MTdcdWY5NjFcdTk2ODZcdTUyZDJcdTgwOGJcdTUxZGNcdTUxY2Nc''@;'; put 'put ''dTY5NWVcdTdhMWNcdTdkYmVcdTgzZjFcdTk2NzVcdTRmZGFcdTUyMjlcdTUzOThcdTU0MGZcdTU1MGVcdTVjNjVcdTYwYTdcdTY3NGVcdTY4YThcdTZkNmNcdTcyODFcdTcyZjhcdTc0MDZcdTc0ODNcdWY5NjJcdTc1ZTJcdTdjNmNcdTdmNzlcdTdmYjhcdTgzODlcdTg4Y2ZcdTg4ZTFcdTkx''@;'; put 'put ''Y2NcdTkxZDBcdTk2ZTJcdTliYzlcdTU0MWRcdTZmN2VcdTcxZDBcdTc0OThcdTg1ZmFcdThlYWFcdTk2YTNcdTljNTdcdTllOWZcdTY3OTdcdTZkY2JcdTc0MzNcdTgxZThcdTk3MTZcdTc4MmMiXSxbImQ4YTEiLCJcdTdhY2JcdTdiMjBcdTdjOTJcdTY0NjlcdTc0NmFcdTc1ZjJcdTc4YmNc''@;'; put 'put ''dTc4ZThcdTk5YWNcdTliNTRcdTllYmJcdTViZGVcdTVlNTVcdTZmMjBcdTgxOWNcdTgzYWJcdTkwODhcdTRlMDdcdTUzNGRcdTVhMjlcdTVkZDJcdTVmNGVcdTYxNjJcdTYzM2RcdTY2NjlcdTY2ZmNcdTZlZmZcdTZmMmJcdTcwNjNcdTc3OWVcdTg0MmNcdTg1MTNcdTg4M2JcdThmMTNcdTk5''@;'; put 'put ''NDVcdTljM2JcdTU1MWNcdTYyYjlcdTY3MmJcdTZjYWJcdTgzMDlcdTg5NmFcdTk3N2FcdTRlYTFcdTU5ODRcdTVmZDhcdTVmZDlcdTY3MWJcdTdkYjJcdTdmNTRcdTgyOTJcdTgzMmJcdTgzYmRcdThmMWVcdTkwOTlcdTU3Y2JcdTU5YjlcdTVhOTJcdTViZDBcdTY2MjdcdTY3OWFcdTY4ODVc''@;'; put 'put ''dTZiY2ZcdTcxNjRcdTdmNzVcdThjYjdcdThjZTNcdTkwODFcdTliNDVcdTgxMDhcdThjOGFcdTk2NGNcdTlhNDBcdTllYTVcdTViNWZcdTZjMTNcdTczMWJcdTc2ZjJcdTc2ZGZcdTg0MGNcdTUxYWFcdTg5OTNcdTUxNGRcdTUxOTVcdTUyYzlcdTY4YzlcdTZjOTRcdTc3MDRcdTc3MjBcdTdk''@;'; put 'put ''YmZcdTdkZWNcdTk3NjJcdTllYjVcdTZlYzUiXSxbImQ5YTEiLCJcdTg1MTFcdTUxYTVcdTU0MGRcdTU0N2RcdTY2MGVcdTY2OWRcdTY5MjdcdTZlOWZcdTc2YmZcdTc3OTFcdTgzMTdcdTg0YzJcdTg3OWZcdTkxNjlcdTkyOThcdTljZjRcdTg4ODJcdTRmYWVcdTUxOTJcdTUyZGZcdTU5YzZc''@;'; put 'put ''dTVlM2RcdTYxNTVcdTY0NzhcdTY0NzlcdTY2YWVcdTY3ZDBcdTZhMjFcdTZiY2RcdTZiZGJcdTcyNWZcdTcyNjFcdTc0NDFcdTc3MzhcdTc3ZGJcdTgwMTdcdTgyYmNcdTgzMDVcdThiMDBcdThiMjhcdThjOGNcdTY3MjhcdTZjOTBcdTcyNjdcdTc2ZWVcdTc3NjZcdTdhNDZcdTlkYTlcdTZi''@;'; put 'put ''N2ZcdTZjOTJcdTU5MjJcdTY3MjZcdTg0OTlcdTUzNmZcdTU4OTNcdTU5OTlcdTVlZGZcdTYzY2ZcdTY2MzRcdTY3NzNcdTZlM2FcdTczMmJcdTdhZDdcdTgyZDdcdTkzMjhcdTUyZDlcdTVkZWJcdTYxYWVcdTYxY2JcdTYyMGFcdTYyYzdcdTY0YWJcdTY1ZTBcdTY5NTlcdTZiNjZcdTZiY2Jc''@;'; put 'put ''dTcxMjFcdTczZjdcdTc1NWRcdTdlNDZcdTgyMWVcdTgzMDJcdTg1NmFcdThhYTNcdThjYmZcdTk3MjdcdTlkNjFcdTU4YThcdTllZDhcdTUwMTFcdTUyMGVcdTU0M2JcdTU1NGZcdTY1ODciXSxbImRhYTEiLCJcdTZjNzZcdTdkMGFcdTdkMGJcdTgwNWVcdTg2OGFcdTk1ODBcdTk2ZWZcdTUy''@;'; put 'put ''ZmZcdTZjOTVcdTcyNjlcdTU0NzNcdTVhOWFcdTVjM2VcdTVkNGJcdTVmNGNcdTVmYWVcdTY3MmFcdTY4YjZcdTY5NjNcdTZlM2NcdTZlNDRcdTc3MDlcdTdjNzNcdTdmOGVcdTg1ODdcdThiMGVcdThmZjdcdTk3NjFcdTllZjRcdTVjYjdcdTYwYjZcdTYxMGRcdTYxYWJcdTY1NGZcdTY1ZmJc''@;'; put 'put ''dTY1ZmNcdTZjMTFcdTZjZWZcdTczOWZcdTczYzlcdTdkZTFcdTk1OTRcdTViYzZcdTg3MWNcdThiMTBcdTUyNWRcdTUzNWFcdTYyY2RcdTY0MGZcdTY0YjJcdTY3MzRcdTZhMzhcdTZjY2FcdTczYzBcdTc0OWVcdTdiOTRcdTdjOTVcdTdlMWJcdTgxOGFcdTgyMzZcdTg1ODRcdThmZWJcdTk2''@;'; put 'put ''ZjlcdTk5YzFcdTRmMzRcdTUzNGFcdTUzY2RcdTUzZGJcdTYyY2NcdTY0MmNcdTY1MDBcdTY1OTFcdTY5YzNcdTZjZWVcdTZmNThcdTczZWRcdTc1NTRcdTc2MjJcdTc2ZTRcdTc2ZmNcdTc4ZDBcdTc4ZmJcdTc5MmNcdTdkNDZcdTgyMmNcdTg3ZTBcdThmZDRcdTk4MTJcdTk4ZWZcdTUyYzNc''@;'; put 'put ''dTYyZDRcdTY0YTVcdTZlMjRcdTZmNTEiXSxbImRiYTEiLCJcdTc2N2NcdThkY2JcdTkxYjFcdTkyNjJcdTlhZWVcdTliNDNcdTUwMjNcdTUwOGRcdTU3NGFcdTU5YThcdTVjMjhcdTVlNDdcdTVmNzdcdTYyM2ZcdTY1M2VcdTY1YjlcdTY1YzFcdTY2MDlcdTY3OGJcdTY5OWNcdTZlYzJcdTc4''@;'; put 'put ''YzVcdTdkMjFcdTgwYWFcdTgxODBcdTgyMmJcdTgyYjNcdTg0YTFcdTg2OGNcdThhMmFcdThiMTdcdTkwYTZcdTk2MzJcdTlmOTBcdTUwMGRcdTRmZjNcdWY5NjNcdTU3ZjlcdTVmOThcdTYyZGNcdTYzOTJcdTY3NmZcdTZlNDNcdTcxMTlcdTc2YzNcdTgwY2NcdTgwZGFcdTg4ZjRcdTg4ZjVc''@;'; put 'put ''dTg5MTlcdThjZTBcdThmMjlcdTkxNGRcdTk2NmFcdTRmMmZcdTRmNzBcdTVlMWJcdTY3Y2ZcdTY4MjJcdTc2N2RcdTc2N2VcdTliNDRcdTVlNjFcdTZhMGFcdTcxNjlcdTcxZDRcdTc1NmFcdWY5NjRcdTdlNDFcdTg1NDNcdTg1ZTlcdTk4ZGNcdTRmMTBcdTdiNGZcdTdmNzBcdTk1YTVcdTUx''@;'; put 'put ''ZTFcdTVlMDZcdTY4YjVcdTZjM2VcdTZjNGVcdTZjZGJcdTcyYWZcdTdiYzRcdTgzMDNcdTZjZDVcdTc0M2FcdTUwZmJcdTUyODhcdTU4YzFcdTY0ZDhcdTZhOTdcdTc0YTdcdTc2NTYiXSxbImRjYTEiLCJcdTc4YTdcdTg2MTdcdTk1ZTJcdTk3MzlcdWY5NjVcdTUzNWVcdTVmMDFcdThiOGFc''@;'; put 'put ''dThmYThcdThmYWZcdTkwOGFcdTUyMjVcdTc3YTVcdTljNDlcdTlmMDhcdTRlMTlcdTUwMDJcdTUxNzVcdTVjNWJcdTVlNzdcdTY2MWVcdTY2M2FcdTY3YzRcdTY4YzVcdTcwYjNcdTc1MDFcdTc1YzVcdTc5YzlcdTdhZGRcdThmMjdcdTk5MjBcdTlhMDhcdTRmZGRcdTU4MjFcdTU4MzFcdTVi''@;'; put 'put ''ZjZcdTY2NmVcdTZiNjVcdTZkMTFcdTZlN2FcdTZmN2RcdTczZTRcdTc1MmJcdTgzZTlcdTg4ZGNcdTg5MTNcdThiNWNcdThmMTRcdTRmMGZcdTUwZDVcdTUzMTBcdTUzNWNcdTViOTNcdTVmYTlcdTY3MGRcdTc5OGZcdTgxNzlcdTgzMmZcdTg1MTRcdTg5MDdcdTg5ODZcdThmMzlcdThmM2Jc''@;'; put 'put ''dTk5YTVcdTljMTJcdTY3MmNcdTRlNzZcdTRmZjhcdTU5NDlcdTVjMDFcdTVjZWZcdTVjZjBcdTYzNjdcdTY4ZDJcdTcwZmRcdTcxYTJcdTc0MmJcdTdlMmJcdTg0ZWNcdTg3MDJcdTkwMjJcdTkyZDJcdTljZjNcdTRlMGRcdTRlZDhcdTRmZWZcdTUwODVcdTUyNTZcdTUyNmZcdTU0MjZcdTU0''@;'; put 'put ''OTBcdTU3ZTBcdTU5MmJcdTVhNjYiXSxbImRkYTEiLCJcdTViNWFcdTViNzVcdTViY2NcdTVlOWNcdWY5NjZcdTYyNzZcdTY1NzdcdTY1YTdcdTZkNmVcdTZlYTVcdTcyMzZcdTdiMjZcdTdjM2ZcdTdmMzZcdTgxNTBcdTgxNTFcdTgxOWFcdTgyNDBcdTgyOTlcdTgzYTlcdThhMDNcdThjYTBc''@;'; put 'put ''dThjZTZcdThjZmJcdThkNzRcdThkYmFcdTkwZThcdTkxZGNcdTk2MWNcdTk2NDRcdTk5ZDlcdTljZTdcdTUzMTdcdTUyMDZcdTU0MjlcdTU2NzRcdTU4YjNcdTU5NTRcdTU5NmVcdTVmZmZcdTYxYTRcdTYyNmVcdTY2MTBcdTZjN2VcdTcxMWFcdTc2YzZcdTdjODlcdTdjZGVcdTdkMWJcdTgy''@;'; put 'put ''YWNcdThjYzFcdTk2ZjBcdWY5NjdcdTRmNWJcdTVmMTdcdTVmN2ZcdTYyYzJcdTVkMjlcdTY3MGJcdTY4ZGFcdTc4N2NcdTdlNDNcdTlkNmNcdTRlMTVcdTUwOTlcdTUzMTVcdTUzMmFcdTUzNTFcdTU5ODNcdTVhNjJcdTVlODdcdTYwYjJcdTYxOGFcdTYyNDlcdTYyNzlcdTY1OTBcdTY3ODdc''@;'; put 'put ''dTY5YTdcdTZiZDRcdTZiZDZcdTZiZDdcdTZiZDhcdTZjYjhcdWY5NjhcdTc0MzVcdTc1ZmFcdTc4MTJcdTc4OTFcdTc5ZDVcdTc5ZDhcdTdjODNcdTdkY2JcdTdmZTFcdTgwYTUiXSxbImRlYTEiLCJcdTgxM2VcdTgxYzJcdTgzZjJcdTg3MWFcdTg4ZThcdThhYjlcdThiNmNcdThjYmJcdTkx''@;'; put 'put ''MTlcdTk3NWVcdTk4ZGJcdTlmM2JcdTU2YWNcdTViMmFcdTVmNmNcdTY1OGNcdTZhYjNcdTZiYWZcdTZkNWNcdTZmZjFcdTcwMTVcdTcyNWRcdTczYWRcdThjYTdcdThjZDNcdTk4M2JcdTYxOTFcdTZjMzdcdTgwNThcdTlhMDFcdTRlNGRcdTRlOGJcdTRlOWJcdTRlZDVcdTRmM2FcdTRmM2Nc''@;'; put 'put ''dTRmN2ZcdTRmZGZcdTUwZmZcdTUzZjJcdTUzZjhcdTU1MDZcdTU1ZTNcdTU2ZGJcdTU4ZWJcdTU5NjJcdTVhMTFcdTViZWJcdTViZmFcdTVjMDRcdTVkZjNcdTVlMmJcdTVmOTlcdTYwMWRcdTYzNjhcdTY1OWNcdTY1YWZcdTY3ZjZcdTY3ZmJcdTY4YWRcdTZiN2JcdTZjOTlcdTZjZDdcdTZl''@;'; put 'put ''MjNcdTcwMDlcdTczNDVcdTc4MDJcdTc5M2VcdTc5NDBcdTc5NjBcdTc5YzFcdTdiZTlcdTdkMTdcdTdkNzJcdTgwODZcdTgyMGRcdTgzOGVcdTg0ZDFcdTg2YzdcdTg4ZGZcdThhNTBcdThhNWVcdThiMWRcdThjZGNcdThkNjZcdThmYWRcdTkwYWFcdTk4ZmNcdTk5ZGZcdTllOWRcdTUyNGFc''@;'; put 'put ''dWY5NjlcdTY3MTRcdWY5NmEiXSxbImRmYTEiLCJcdTUwOThcdTUyMmFcdTVjNzFcdTY1NjNcdTZjNTVcdTczY2FcdTc1MjNcdTc1OWRcdTdiOTdcdTg0OWNcdTkxNzhcdTk3MzBcdTRlNzdcdTY0OTJcdTZiYmFcdTcxNWVcdTg1YTlcdTRlMDlcdWY5NmJcdTY3NDlcdTY4ZWVcdTZlMTdcdTgy''@;'; put 'put ''OWZcdTg1MThcdTg4NmJcdTYzZjdcdTZmODFcdTkyMTJcdTk4YWZcdTRlMGFcdTUwYjdcdTUwY2ZcdTUxMWZcdTU1NDZcdTU1YWFcdTU2MTdcdTViNDBcdTVjMTlcdTVjZTBcdTVlMzhcdTVlOGFcdTVlYTBcdTVlYzJcdTYwZjNcdTY4NTFcdTZhNjFcdTZlNThcdTcyM2RcdTcyNDBcdTcyYzBc''@;'; put 'put ''dTc2ZjhcdTc5NjVcdTdiYjFcdTdmZDRcdTg4ZjNcdTg5ZjRcdThhNzNcdThjNjFcdThjZGVcdTk3MWNcdTU4NWVcdTc0YmRcdThjZmRcdTU1YzdcdWY5NmNcdTdhNjFcdTdkMjJcdTgyNzJcdTcyNzJcdTc1MWZcdTc1MjVcdWY5NmRcdTdiMTlcdTU4ODVcdTU4ZmJcdTVkYmNcdTVlOGZcdTVl''@;'; put 'put ''YjZcdTVmOTBcdTYwNTVcdTYyOTJcdTYzN2ZcdTY1NGRcdTY2OTFcdTY2ZDlcdTY2ZjhcdTY4MTZcdTY4ZjJcdTcyODBcdTc0NWVcdTdiNmVcdTdkNmVcdTdkZDZcdTdmNzIiXSxbImUwYTEiLCJcdTgwZTVcdTgyMTJcdTg1YWZcdTg5N2ZcdThhOTNcdTkwMWRcdTkyZTRcdTllY2RcdTlmMjBc''@;'; put 'put ''dTU5MTVcdTU5NmRcdTVlMmRcdTYwZGNcdTY2MTRcdTY2NzNcdTY3OTBcdTZjNTBcdTZkYzVcdTZmNWZcdTc3ZjNcdTc4YTlcdTg0YzZcdTkxY2JcdTkzMmJcdTRlZDlcdTUwY2FcdTUxNDhcdTU1ODRcdTViMGJcdTViYTNcdTYyNDdcdTY1N2VcdTY1Y2JcdTZlMzJcdTcxN2RcdTc0MDFcdTc0''@;'; put 'put ''NDRcdTc0ODdcdTc0YmZcdTc2NmNcdTc5YWFcdTdkZGFcdTdlNTVcdTdmYThcdTgxN2FcdTgxYjNcdTgyMzlcdTg2MWFcdTg3ZWNcdThhNzVcdThkZTNcdTkwNzhcdTkyOTFcdTk0MjVcdTk5NGRcdTliYWVcdTUzNjhcdTVjNTFcdTY5NTRcdTZjYzRcdTZkMjlcdTZlMmJcdTgyMGNcdTg1OWJc''@;'; put 'put ''dTg5M2JcdThhMmRcdThhYWFcdTk2ZWFcdTlmNjdcdTUyNjFcdTY2YjlcdTZiYjJcdTdlOTZcdTg3ZmVcdThkMGRcdTk1ODNcdTk2NWRcdTY1MWRcdTZkODlcdTcxZWVcdWY5NmVcdTU3Y2VcdTU5ZDNcdTViYWNcdTYwMjdcdTYwZmFcdTYyMTBcdTY2MWZcdTY2NWZcdTczMjlcdTczZjlcdTc2''@;'; put 'put ''ZGJcdTc3MDFcdTdiNmMiXSxbImUxYTEiLCJcdTgwNTZcdTgwNzJcdTgxNjVcdThhYTBcdTkxOTJcdTRlMTZcdTUyZTJcdTZiNzJcdTZkMTdcdTdhMDVcdTdiMzlcdTdkMzBcdWY5NmZcdThjYjBcdTUzZWNcdTU2MmZcdTU4NTFcdTViYjVcdTVjMGZcdTVjMTFcdTVkZTJcdTYyNDBcdTYzODNc''@;'; put 'put ''dTY0MTRcdTY2MmRcdTY4YjNcdTZjYmNcdTZkODhcdTZlYWZcdTcwMWZcdTcwYTRcdTcxZDJcdTc1MjZcdTc1OGZcdTc1OGVcdTc2MTlcdTdiMTFcdTdiZTBcdTdjMmJcdTdkMjBcdTdkMzlcdTg1MmNcdTg1NmRcdTg2MDdcdThhMzRcdTkwMGRcdTkwNjFcdTkwYjVcdTkyYjdcdTk3ZjZcdTlh''@;'; put 'put ''MzdcdTRmZDdcdTVjNmNcdTY3NWZcdTZkOTFcdTdjOWZcdTdlOGNcdThiMTZcdThkMTZcdTkwMWZcdTViNmJcdTVkZmRcdTY0MGRcdTg0YzBcdTkwNWNcdTk4ZTFcdTczODdcdTViOGJcdTYwOWFcdTY3N2VcdTZkZGVcdThhMWZcdThhYTZcdTkwMDFcdTk4MGNcdTUyMzdcdWY5NzBcdTcwNTFc''@;'; put 'put ''dTc4OGVcdTkzOTZcdTg4NzBcdTkxZDdcdTRmZWVcdTUzZDdcdTU1ZmRcdTU2ZGFcdTU3ODJcdTU4ZmRcdTVhYzJcdTViODhcdTVjYWJcdTVjYzBcdTVlMjVcdTYxMDEiXSxbImUyYTEiLCJcdTYyMGRcdTYyNGJcdTYzODhcdTY0MWNcdTY1MzZcdTY1NzhcdTZhMzlcdTZiOGFcdTZjMzRcdTZk''@;'; put 'put ''MTlcdTZmMzFcdTcxZTdcdTcyZTlcdTczNzhcdTc0MDdcdTc0YjJcdTc2MjZcdTc3NjFcdTc5YzBcdTdhNTdcdTdhZWFcdTdjYjlcdTdkOGZcdTdkYWNcdTdlNjFcdTdmOWVcdTgxMjlcdTgzMzFcdTg0OTBcdTg0ZGFcdTg1ZWFcdTg4OTZcdThhYjBcdThiOTBcdThmMzhcdTkwNDJcdTkwODNc''@;'; put 'put ''dTkxNmNcdTkyOTZcdTkyYjlcdTk2OGJcdTk2YTdcdTk2YThcdTk2ZDZcdTk3MDBcdTk4MDhcdTk5OTZcdTlhZDNcdTliMWFcdTUzZDRcdTU4N2VcdTU5MTlcdTViNzBcdTViYmZcdTZkZDFcdTZmNWFcdTcxOWZcdTc0MjFcdTc0YjlcdTgwODVcdTgzZmRcdTVkZTFcdTVmODdcdTVmYWFcdTYw''@;'; put 'put ''NDJcdTY1ZWNcdTY4MTJcdTY5NmZcdTZhNTNcdTZiODlcdTZkMzVcdTZkZjNcdTczZTNcdTc2ZmVcdTc3YWNcdTdiNGRcdTdkMTRcdTgxMjNcdTgyMWNcdTgzNDBcdTg0ZjRcdTg1NjNcdThhNjJcdThhYzRcdTkxODdcdTkzMWVcdTk4MDZcdTk5YjRcdTYyMGNcdTg4NTNcdThmZjBcdTkyNjVc''@;'; put 'put ''dTVkMDdcdTVkMjciXSxbImUzYTEiLCJcdTVkNjlcdTc0NWZcdTgxOWRcdTg3NjhcdTZmZDVcdTYyZmVcdTdmZDJcdTg5MzZcdTg5NzJcdTRlMWVcdTRlNThcdTUwZTdcdTUyZGRcdTUzNDdcdTYyN2ZcdTY2MDdcdTdlNjlcdTg4MDVcdTk2NWVcdTRmOGRcdTUzMTlcdTU2MzZcdTU5Y2JcdTVh''@;'; put 'put ''YTRcdTVjMzhcdTVjNGVcdTVjNGRcdTVlMDJcdTVmMTFcdTYwNDNcdTY1YmRcdTY2MmZcdTY2NDJcdTY3YmVcdTY3ZjRcdTczMWNcdTc3ZTJcdTc5M2FcdTdmYzVcdTg0OTRcdTg0Y2RcdTg5OTZcdThhNjZcdThhNjlcdThhZTFcdThjNTVcdThjN2FcdTU3ZjRcdTViZDRcdTVmMGZcdTYwNmZc''@;'; put 'put ''dTYyZWRcdTY5MGRcdTZiOTZcdTZlNWNcdTcxODRcdTdiZDJcdTg3NTVcdThiNThcdThlZmVcdTk4ZGZcdTk4ZmVcdTRmMzhcdTRmODFcdTRmZTFcdTU0N2JcdTVhMjBcdTViYjhcdTYxM2NcdTY1YjBcdTY2NjhcdTcxZmNcdTc1MzNcdTc5NWVcdTdkMzNcdTgxNGVcdTgxZTNcdTgzOThcdTg1''@;'; put 'put ''YWFcdTg1Y2VcdTg3MDNcdThhMGFcdThlYWJcdThmOWJcdWY5NzFcdThmYzVcdTU5MzFcdTViYTRcdTViZTZcdTYwODlcdTViZTlcdTVjMGJcdTVmYzNcdTZjODEiXSxbImU0YTEiLCJcdWY5NzJcdTZkZjFcdTcwMGJcdTc1MWFcdTgyYWZcdThhZjZcdTRlYzBcdTUzNDFcdWY5NzNcdTk2ZDlc''@;'; put 'put ''dTZjMGZcdTRlOWVcdTRmYzRcdTUxNTJcdTU1NWVcdTVhMjVcdTVjZThcdTYyMTFcdTcyNTlcdTgyYmRcdTgzYWFcdTg2ZmVcdTg4NTlcdThhMWRcdTk2M2ZcdTk2YzVcdTk5MTNcdTlkMDlcdTlkNWRcdTU4MGFcdTVjYjNcdTVkYmRcdTVlNDRcdTYwZTFcdTYxMTVcdTYzZTFcdTZhMDJcdTZl''@;'; put 'put ''MjVcdTkxMDJcdTkzNTRcdTk4NGVcdTljMTBcdTlmNzdcdTViODlcdTVjYjhcdTYzMDlcdTY2NGZcdTY4NDhcdTc3M2NcdTk2YzFcdTk3OGRcdTk4NTRcdTliOWZcdTY1YTFcdThiMDFcdThlY2JcdTk1YmNcdTU1MzVcdTVjYTlcdTVkZDZcdTVlYjVcdTY2OTdcdTc2NGNcdTgzZjRcdTk1Yzdc''@;'; put 'put ''dTU4ZDNcdTYyYmNcdTcyY2VcdTlkMjhcdTRlZjBcdTU5MmVcdTYwMGZcdTY2M2JcdTZiODNcdTc5ZTdcdTlkMjZcdTUzOTNcdTU0YzBcdTU3YzNcdTVkMTZcdTYxMWJcdTY2ZDZcdTZkYWZcdTc4OGRcdTgyN2VcdTk2OThcdTk3NDRcdTUzODRcdTYyN2NcdTYzOTZcdTZkYjJcdTdlMGFcdTgx''@;'; put 'put ''NGJcdTk4NGQiXSxbImU1YTEiLCJcdTZhZmJcdTdmNGNcdTlkYWZcdTllMWFcdTRlNWZcdTUwM2JcdTUxYjZcdTU5MWNcdTYwZjlcdTYzZjZcdTY5MzBcdTcyM2FcdTgwMzZcdWY5NzRcdTkxY2VcdTVmMzFcdWY5NzVcdWY5NzZcdTdkMDRcdTgyZTVcdTg0NmZcdTg0YmJcdTg1ZTVcdThlOGRc''@;'; put 'put ''dWY5NzdcdTRmNmZcdWY5NzhcdWY5NzlcdTU4ZTRcdTViNDNcdTYwNTlcdTYzZGFcdTY1MThcdTY1NmRcdTY2OThcdWY5N2FcdTY5NGFcdTZhMjNcdTZkMGJcdTcwMDFcdTcxNmNcdTc1ZDJcdTc2MGRcdTc5YjNcdTdhNzBcdWY5N2JcdTdmOGFcdWY5N2NcdTg5NDRcdWY5N2RcdThiOTNcdTkx''@;'; put 'put ''YzBcdTk2N2RcdWY5N2VcdTk5MGFcdTU3MDRcdTVmYTFcdTY1YmNcdTZmMDFcdTc2MDBcdTc5YTZcdThhOWVcdTk5YWRcdTliNWFcdTlmNmNcdTUxMDRcdTYxYjZcdTYyOTFcdTZhOGRcdTgxYzZcdTUwNDNcdTU4MzBcdTVmNjZcdTcxMDlcdThhMDBcdThhZmFcdTViN2NcdTg2MTZcdTRmZmFc''@;'; put 'put ''dTUxM2NcdTU2YjRcdTU5NDRcdTYzYTlcdTZkZjlcdTVkYWFcdTY5NmRcdTUxODZcdTRlODhcdTRmNTlcdWY5N2ZcdWY5ODBcdWY5ODFcdTU5ODJcdWY5ODIiXSxbImU2YTEiLCJcdWY5ODNcdTZiNWZcdTZjNWRcdWY5ODRcdTc0YjVcdTc5MTZcdWY5ODVcdTgyMDdcdTgyNDVcdTgzMzlcdThm''@;'; put 'put ''M2ZcdThmNWRcdWY5ODZcdTk5MThcdWY5ODdcdWY5ODhcdWY5ODlcdTRlYTZcdWY5OGFcdTU3ZGZcdTVmNzlcdTY2MTNcdWY5OGJcdWY5OGNcdTc1YWJcdTdlNzlcdThiNmZcdWY5OGRcdTkwMDZcdTlhNWJcdTU2YTVcdTU4MjdcdTU5ZjhcdTVhMWZcdTViYjRcdWY5OGVcdTVlZjZcdWY5OGZc''@;'; put 'put ''dWY5OTBcdTYzNTBcdTYzM2JcdWY5OTFcdTY5M2RcdTZjODdcdTZjYmZcdTZkOGVcdTZkOTNcdTZkZjVcdTZmMTRcdWY5OTJcdTcwZGZcdTcxMzZcdTcxNTlcdWY5OTNcdTcxYzNcdTcxZDVcdWY5OTRcdTc4NGZcdTc4NmZcdWY5OTVcdTdiNzVcdTdkZTNcdWY5OTZcdTdlMmZcdWY5OTdcdTg4''@;'; put 'put ''NGRcdThlZGZcdWY5OThcdWY5OTlcdWY5OWFcdTkyNWJcdWY5OWJcdTljZjZcdWY5OWNcdWY5OWRcdWY5OWVcdTYwODVcdTZkODVcdWY5OWZcdTcxYjFcdWY5YTBcdWY5YTFcdTk1YjFcdTUzYWRcdWY5YTJcdWY5YTNcdWY5YTRcdTY3ZDNcdWY5YTVcdTcwOGVcdTcxMzBcdTc0MzBcdTgyNzZc''@;'; put 'put ''dTgyZDIiXSxbImU3YTEiLCJcdWY5YTZcdTk1YmJcdTlhZTVcdTllN2RcdTY2YzRcdWY5YTdcdTcxYzFcdTg0NDlcdWY5YThcdWY5YTlcdTU4NGJcdWY5YWFcdWY5YWJcdTVkYjhcdTVmNzFcdWY5YWNcdTY2MjBcdTY2OGVcdTY5NzlcdTY5YWVcdTZjMzhcdTZjZjNcdTZlMzZcdTZmNDFcdTZm''@;'; put 'put ''ZGFcdTcwMWJcdTcwMmZcdTcxNTBcdTcxZGZcdTczNzBcdWY5YWRcdTc0NWJcdWY5YWVcdTc0ZDRcdTc2YzhcdTdhNGVcdTdlOTNcdWY5YWZcdWY5YjBcdTgyZjFcdThhNjBcdThmY2VcdWY5YjFcdTkzNDhcdWY5YjJcdTk3MTlcdWY5YjNcdWY5YjRcdTRlNDJcdTUwMmFcdWY5YjVcdTUyMDhc''@;'; put 'put ''dTUzZTFcdTY2ZjNcdTZjNmRcdTZmY2FcdTczMGFcdTc3N2ZcdTdhNjJcdTgyYWVcdTg1ZGRcdTg2MDJcdWY5YjZcdTg4ZDRcdThhNjNcdThiN2RcdThjNmJcdWY5YjdcdTkyYjNcdWY5YjhcdTk3MTNcdTk4MTBcdTRlOTRcdTRmMGRcdTRmYzlcdTUwYjJcdTUzNDhcdTU0M2VcdTU0MzNcdTU1''@;'; put 'put ''ZGFcdTU4NjJcdTU4YmFcdTU5NjdcdTVhMWJcdTViZTRcdTYwOWZcdWY5YjlcdTYxY2FcdTY1NTZcdTY1ZmZcdTY2NjRcdTY4YTdcdTZjNWFcdTZmYjMiXSxbImU4YTEiLCJcdTcwY2ZcdTcxYWNcdTczNTJcdTdiN2RcdTg3MDhcdThhYTRcdTljMzJcdTlmMDdcdTVjNGJcdTZjODNcdTczNDRc''@;'; put 'put ''dTczODlcdTkyM2FcdTZlYWJcdTc0NjVcdTc2MWZcdTdhNjlcdTdlMTVcdTg2MGFcdTUxNDBcdTU4YzVcdTY0YzFcdTc0ZWVcdTc1MTVcdTc2NzBcdTdmYzFcdTkwOTVcdTk2Y2RcdTk5NTRcdTZlMjZcdTc0ZTZcdTdhYTlcdTdhYWFcdTgxZTVcdTg2ZDlcdTg3NzhcdThhMWJcdTVhNDlcdTVi''@;'; put 'put ''OGNcdTViOWJcdTY4YTFcdTY5MDBcdTZkNjNcdTczYTlcdTc0MTNcdTc0MmNcdTc4OTdcdTdkZTlcdTdmZWJcdTgxMThcdTgxNTVcdTgzOWVcdThjNGNcdTk2MmVcdTk4MTFcdTY2ZjBcdTVmODBcdTY1ZmFcdTY3ODlcdTZjNmFcdTczOGJcdTUwMmRcdTVhMDNcdTZiNmFcdTc3ZWVcdTU5MTZc''@;'; put 'put ''dTVkNmNcdTVkY2RcdTczMjVcdTc1NGZcdWY5YmFcdWY5YmJcdTUwZTVcdTUxZjlcdTU4MmZcdTU5MmRcdTU5OTZcdTU5ZGFcdTViZTVcdWY5YmNcdWY5YmRcdTVkYTJcdTYyZDdcdTY0MTZcdTY0OTNcdTY0ZmVcdWY5YmVcdTY2ZGNcdWY5YmZcdTZhNDhcdWY5YzBcdTcxZmZcdTc0NjRcdWY5''@;'; put 'put ''YzEiXSxbImU5YTEiLCJcdTdhODhcdTdhYWZcdTdlNDdcdTdlNWVcdTgwMDBcdTgxNzBcdWY5YzJcdTg3ZWZcdTg5ODFcdThiMjBcdTkwNTlcdWY5YzNcdTkwODBcdTk5NTJcdTYxN2VcdTZiMzJcdTZkNzRcdTdlMWZcdTg5MjVcdThmYjFcdTRmZDFcdTUwYWRcdTUxOTdcdTUyYzdcdTU3Yzdc''@;'; put 'put ''dTU4ODlcdTViYjlcdTVlYjhcdTYxNDJcdTY5OTVcdTZkOGNcdTZlNjdcdTZlYjZcdTcxOTRcdTc0NjJcdTc1MjhcdTc1MmNcdTgwNzNcdTgzMzhcdTg0YzlcdThlMGFcdTkzOTRcdTkzZGVcdWY5YzRcdTRlOGVcdTRmNTFcdTUwNzZcdTUxMmFcdTUzYzhcdTUzY2JcdTUzZjNcdTViODdcdTVi''@;'; put 'put ''ZDNcdTVjMjRcdTYxMWFcdTYxODJcdTY1ZjRcdTcyNWJcdTczOTdcdTc0NDBcdTc2YzJcdTc5NTBcdTc5OTFcdTc5YjlcdTdkMDZcdTdmYmRcdTgyOGJcdTg1ZDVcdTg2NWVcdThmYzJcdTkwNDdcdTkwZjVcdTkxZWFcdTk2ODVcdTk2ZThcdTk2ZTlcdTUyZDZcdTVmNjdcdTY1ZWRcdTY2MzFc''@;'; put 'put ''dTY4MmZcdTcxNWNcdTdhMzZcdTkwYzFcdTk4MGFcdTRlOTFcdWY5YzVcdTZhNTJcdTZiOWVcdTZmOTBcdTcxODlcdTgwMThcdTgyYjhcdTg1NTMiXSxbImVhYTEiLCJcdTkwNGJcdTk2OTVcdTk2ZjJcdTk3ZmJcdTg1MWFcdTliMzFcdTRlOTBcdTcxOGFcdTk2YzRcdTUxNDNcdTUzOWZcdTU0''@;'; put 'put ''ZTFcdTU3MTNcdTU3MTJcdTU3YTNcdTVhOWJcdTVhYzRcdTViYzNcdTYwMjhcdTYxM2ZcdTYzZjRcdTZjODVcdTZkMzlcdTZlNzJcdTZlOTBcdTcyMzBcdTczM2ZcdTc0NTdcdTgyZDFcdTg4ODFcdThmNDVcdTkwNjBcdWY5YzZcdTk2NjJcdTk4NThcdTlkMWJcdTY3MDhcdThkOGFcdTkyNWVc''@;'; put 'put ''dTRmNGRcdTUwNDlcdTUwZGVcdTUzNzFcdTU3MGRcdTU5ZDRcdTVhMDFcdTVjMDlcdTYxNzBcdTY2OTBcdTZlMmRcdTcyMzJcdTc0NGJcdTdkZWZcdTgwYzNcdTg0MGVcdTg0NjZcdTg1M2ZcdTg3NWZcdTg4NWJcdTg5MThcdThiMDJcdTkwNTVcdTk3Y2JcdTliNGZcdTRlNzNcdTRmOTFcdTUx''@;'; put 'put ''MTJcdTUxNmFcdWY5YzdcdTU1MmZcdTU1YTlcdTViN2FcdTViYTVcdTVlN2NcdTVlN2RcdTVlYmVcdTYwYTBcdTYwZGZcdTYxMDhcdTYxMDlcdTYzYzRcdTY1MzhcdTY3MDlcdWY5YzhcdTY3ZDRcdTY3ZGFcdWY5YzlcdTY5NjFcdTY5NjJcdTZjYjlcdTZkMjdcdWY5Y2FcdTZlMzhcdWY5Y2Ii''@;'; put 'put ''XSxbImViYTEiLCJcdTZmZTFcdTczMzZcdTczMzdcdWY5Y2NcdTc0NWNcdTc1MzFcdWY5Y2RcdTc2NTJcdWY5Y2VcdWY5Y2ZcdTdkYWRcdTgxZmVcdTg0MzhcdTg4ZDVcdThhOThcdThhZGJcdThhZWRcdThlMzBcdThlNDJcdTkwNGFcdTkwM2VcdTkwN2FcdTkxNDlcdTkxYzlcdTkzNmVcdWY5''@;'; put 'put ''ZDBcdWY5ZDFcdTU4MDlcdWY5ZDJcdTZiZDNcdTgwODlcdTgwYjJcdWY5ZDNcdWY5ZDRcdTUxNDFcdTU5NmJcdTVjMzlcdWY5ZDVcdWY5ZDZcdTZmNjRcdTczYTdcdTgwZTRcdThkMDdcdWY5ZDdcdTkyMTdcdTk1OGZcdWY5ZDhcdWY5ZDlcdWY5ZGFcdWY5ZGJcdTgwN2ZcdTYyMGVcdTcwMWNc''@;'; put 'put ''dTdkNjhcdTg3OGRcdWY5ZGNcdTU3YTBcdTYwNjlcdTYxNDdcdTZiYjdcdThhYmVcdTkyODBcdTk2YjFcdTRlNTlcdTU0MWZcdTZkZWJcdTg1MmRcdTk2NzBcdTk3ZjNcdTk4ZWVcdTYzZDZcdTZjZTNcdTkwOTFcdTUxZGRcdTYxYzlcdTgxYmFcdTlkZjlcdTRmOWRcdTUwMWFcdTUxMDBcdTVi''@;'; put 'put ''OWNcdTYxMGZcdTYxZmZcdTY0ZWNcdTY5MDVcdTZiYzVcdTc1OTFcdTc3ZTNcdTdmYTlcdTgyNjRcdTg1OGZcdTg3ZmJcdTg4NjNcdThhYmMiXSxbImVjYTEiLCJcdThiNzBcdTkxYWJcdTRlOGNcdTRlZTVcdTRmMGFcdWY5ZGRcdWY5ZGVcdTU5MzdcdTU5ZThcdWY5ZGZcdTVkZjJcdTVmMWJc''@;'; put 'put ''dTVmNWJcdTYwMjFcdWY5ZTBcdWY5ZTFcdWY5ZTJcdWY5ZTNcdTcyM2VcdTczZTVcdWY5ZTRcdTc1NzBcdTc1Y2RcdWY5ZTVcdTc5ZmJcdWY5ZTZcdTgwMGNcdTgwMzNcdTgwODRcdTgyZTFcdTgzNTFcdWY5ZTdcdWY5ZThcdThjYmRcdThjYjNcdTkwODdcdWY5ZTlcdWY5ZWFcdTk4ZjRcdTk5''@;'; put 'put ''MGNcdWY5ZWJcdWY5ZWNcdTcwMzdcdTc2Y2FcdTdmY2FcdTdmY2NcdTdmZmNcdThiMWFcdTRlYmFcdTRlYzFcdTUyMDNcdTUzNzBcdWY5ZWRcdTU0YmRcdTU2ZTBcdTU5ZmJcdTViYzVcdTVmMTVcdTVmY2RcdTZlNmVcdWY5ZWVcdWY5ZWZcdTdkNmFcdTgzMzVcdWY5ZjBcdTg2OTNcdThhOGRc''@;'; put 'put ''dWY5ZjFcdTk3NmRcdTk3NzdcdWY5ZjJcdWY5ZjNcdTRlMDBcdTRmNWFcdTRmN2VcdTU4ZjlcdTY1ZTVcdTZlYTJcdTkwMzhcdTkzYjBcdTk5YjlcdTRlZmJcdTU4ZWNcdTU5OGFcdTU5ZDlcdTYwNDFcdWY5ZjRcdWY5ZjVcdTdhMTRcdWY5ZjZcdTgzNGZcdThjYzNcdTUxNjVcdTUzNDQiXSxb''@;'; put 'put ''ImVkYTEiLCJcdWY5ZjdcdWY5ZjhcdWY5ZjlcdTRlY2RcdTUyNjlcdTViNTVcdTgyYmZcdTRlZDRcdTUyM2FcdTU0YThcdTU5YzlcdTU5ZmZcdTViNTBcdTViNTdcdTViNWNcdTYwNjNcdTYxNDhcdTZlY2JcdTcwOTlcdTcxNmVcdTczODZcdTc0ZjdcdTc1YjVcdTc4YzFcdTdkMmJcdTgwMDVc''@;'; put 'put ''dTgxZWFcdTgzMjhcdTg1MTdcdTg1YzlcdThhZWVcdThjYzdcdTk2Y2NcdTRmNWNcdTUyZmFcdTU2YmNcdTY1YWJcdTY2MjhcdTcwN2NcdTcwYjhcdTcyMzVcdTdkYmRcdTgyOGRcdTkxNGNcdTk2YzBcdTlkNzJcdTViNzFcdTY4ZTdcdTZiOThcdTZmN2FcdTc2ZGVcdTVjOTFcdTY2YWJcdTZm''@;'; put 'put ''NWJcdTdiYjRcdTdjMmFcdTg4MzZcdTk2ZGNcdTRlMDhcdTRlZDdcdTUzMjBcdTU4MzRcdTU4YmJcdTU4ZWZcdTU5NmNcdTVjMDdcdTVlMzNcdTVlODRcdTVmMzVcdTYzOGNcdTY2YjJcdTY3NTZcdTZhMWZcdTZhYTNcdTZiMGNcdTZmM2ZcdTcyNDZcdWY5ZmFcdTczNTBcdTc0OGJcdTdhZTBc''@;'; put 'put ''dTdjYTdcdTgxNzhcdTgxZGZcdTgxZTdcdTgzOGFcdTg0NmNcdTg1MjNcdTg1OTRcdTg1Y2ZcdTg4ZGRcdThkMTNcdTkxYWNcdTk1NzciXSxbImVlYTEiLCJcdTk2OWNcdTUxOGRcdTU0YzlcdTU3MjhcdTViYjBcdTYyNGRcdTY3NTBcdTY4M2RcdTY4OTNcdTZlM2RcdTZlZDNcdTcwN2RcdTdl''@;'; put 'put ''MjFcdTg4YzFcdThjYTFcdThmMDlcdTlmNGJcdTlmNGVcdTcyMmRcdTdiOGZcdThhY2RcdTkzMWFcdTRmNDdcdTRmNGVcdTUxMzJcdTU0ODBcdTU5ZDBcdTVlOTVcdTYyYjVcdTY3NzVcdTY5NmVcdTZhMTdcdTZjYWVcdTZlMWFcdTcyZDlcdTczMmFcdTc1YmRcdTdiYjhcdTdkMzVcdTgyZTdc''@;'; put 'put ''dTgzZjlcdTg0NTdcdTg1ZjdcdThhNWJcdThjYWZcdThlODdcdTkwMTlcdTkwYjhcdTk2Y2VcdTlmNWZcdTUyZTNcdTU0MGFcdTVhZTFcdTViYzJcdTY0NThcdTY1NzVcdTZlZjRcdTcyYzRcdWY5ZmJcdTc2ODRcdTdhNGRcdTdiMWJcdTdjNGRcdTdlM2VcdTdmZGZcdTgzN2JcdThiMmJcdThj''@;'; put 'put ''Y2FcdThkNjRcdThkZTFcdThlNWZcdThmZWFcdThmZjlcdTkwNjlcdTkzZDFcdTRmNDNcdTRmN2FcdTUwYjNcdTUxNjhcdTUxNzhcdTUyNGRcdTUyNmFcdTU4NjFcdTU4N2NcdTU5NjBcdTVjMDhcdTVjNTVcdTVlZGJcdTYwOWJcdTYyMzBcdTY4MTNcdTZiYmZcdTZjMDhcdTZmYjEiXSxbImVm''@;'; put 'put ''YTEiLCJcdTcxNGVcdTc0MjBcdTc1MzBcdTc1MzhcdTc1NTFcdTc2NzJcdTdiNGNcdTdiOGJcdTdiYWRcdTdiYzZcdTdlOGZcdThhNmVcdThmM2VcdThmNDlcdTkyM2ZcdTkyOTNcdTkzMjJcdTk0MmJcdTk2ZmJcdTk4NWFcdTk4NmJcdTk5MWVcdTUyMDdcdTYyMmFcdTYyOThcdTZkNTlcdTc2''@;'; put 'put ''NjRcdTdhY2FcdTdiYzBcdTdkNzZcdTUzNjBcdTVjYmVcdTVlOTdcdTZmMzhcdTcwYjlcdTdjOThcdTk3MTFcdTliOGVcdTllZGVcdTYzYTVcdTY0N2FcdTg3NzZcdTRlMDFcdTRlOTVcdTRlYWRcdTUwNWNcdTUwNzVcdTU0NDhcdTU5YzNcdTViOWFcdTVlNDBcdTVlYWRcdTVlZjdcdTVmODFc''@;'; put 'put ''dTYwYzVcdTYzM2FcdTY1M2ZcdTY1NzRcdTY1Y2NcdTY2NzZcdTY2NzhcdTY3ZmVcdTY5NjhcdTZhODlcdTZiNjNcdTZjNDBcdTZkYzBcdTZkZThcdTZlMWZcdTZlNWVcdTcwMWVcdTcwYTFcdTczOGVcdTczZmRcdTc1M2FcdTc3NWJcdTc4ODdcdTc5OGVcdTdhMGJcdTdhN2RcdTdjYmVcdTdk''@;'; put 'put ''OGVcdTgyNDdcdThhMDJcdThhZWFcdThjOWVcdTkxMmRcdTkxNGFcdTkxZDhcdTkyNjZcdTkyY2NcdTkzMjBcdTk3MDZcdTk3NTYiXSxbImYwYTEiLCJcdTk3NWNcdTk4MDJcdTlmMGVcdTUyMzZcdTUyOTFcdTU1N2NcdTU4MjRcdTVlMWRcdTVmMWZcdTYwOGNcdTYzZDBcdTY4YWZcdTZmZGZc''@;'; put 'put ''dTc5NmRcdTdiMmNcdTgxY2RcdTg1YmFcdTg4ZmRcdThhZjhcdThlNDRcdTkxOGRcdTk2NjRcdTk2OWJcdTk3M2RcdTk4NGNcdTlmNGFcdTRmY2VcdTUxNDZcdTUxY2JcdTUyYTlcdTU2MzJcdTVmMTRcdTVmNmJcdTYzYWFcdTY0Y2RcdTY1ZTlcdTY2NDFcdTY2ZmFcdTY2ZjlcdTY3MWRcdTY4''@;'; put 'put ''OWRcdTY4ZDdcdTY5ZmRcdTZmMTVcdTZmNmVcdTcxNjdcdTcxZTVcdTcyMmFcdTc0YWFcdTc3M2FcdTc5NTZcdTc5NWFcdTc5ZGZcdTdhMjBcdTdhOTVcdTdjOTdcdTdjZGZcdTdkNDRcdTdlNzBcdTgwODdcdTg1ZmJcdTg2YTRcdThhNTRcdThhYmZcdThkOTlcdThlODFcdTkwMjBcdTkwNmRc''@;'; put 'put ''dTkxZTNcdTk2M2JcdTk2ZDVcdTljZTVcdTY1Y2ZcdTdjMDdcdThkYjNcdTkzYzNcdTViNThcdTVjMGFcdTUzNTJcdTYyZDlcdTczMWRcdTUwMjdcdTViOTdcdTVmOWVcdTYwYjBcdTYxNmJcdTY4ZDVcdTZkZDlcdTc0MmVcdTdhMmVcdTdkNDJcdTdkOWNcdTdlMzFcdTgxNmIiXSxbImYxYTEi''@;'; put 'put ''LCJcdThlMmFcdThlMzVcdTkzN2VcdTk0MThcdTRmNTBcdTU3NTBcdTVkZTZcdTVlYTdcdTYzMmJcdTdmNmFcdTRlM2JcdTRmNGZcdTRmOGZcdTUwNWFcdTU5ZGRcdTgwYzRcdTU0NmFcdTU0NjhcdTU1ZmVcdTU5NGZcdTViOTlcdTVkZGVcdTVlZGFcdTY2NWRcdTY3MzFcdTY3ZjFcdTY4MmFc''@;'; put 'put ''dTZjZThcdTZkMzJcdTZlNGFcdTZmOGRcdTcwYjdcdTczZTBcdTc1ODdcdTdjNGNcdTdkMDJcdTdkMmNcdTdkYTJcdTgyMWZcdTg2ZGJcdThhM2JcdThhODVcdThkNzBcdThlOGFcdThmMzNcdTkwMzFcdTkxNGVcdTkxNTJcdTk0NDRcdTk5ZDBcdTdhZjlcdTdjYTVcdTRmY2FcdTUxMDFcdTUx''@;'; put 'put ''YzZcdTU3YzhcdTViZWZcdTVjZmJcdTY2NTlcdTZhM2RcdTZkNWFcdTZlOTZcdTZmZWNcdTcxMGNcdTc1NmZcdTdhZTNcdTg4MjJcdTkwMjFcdTkwNzVcdTk2Y2JcdTk5ZmZcdTgzMDFcdTRlMmRcdTRlZjJcdTg4NDZcdTkxY2RcdTUzN2RcdTZhZGJcdTY5NmJcdTZjNDFcdTg0N2FcdTU4OWVc''@;'; put 'put ''dTYxOGVcdTY2ZmVcdTYyZWZcdTcwZGRcdTc1MTFcdTc1YzdcdTdlNTJcdTg0YjhcdThiNDlcdThkMDhcdTRlNGJcdTUzZWEiXSxbImYyYTEiLCJcdTU0YWJcdTU3MzBcdTU3NDBcdTVmZDdcdTYzMDFcdTYzMDdcdTY0NmZcdTY1MmZcdTY1ZThcdTY2N2FcdTY3OWRcdTY3YjNcdTZiNjJcdTZj''@;'; put 'put ''NjBcdTZjOWFcdTZmMmNcdTc3ZTVcdTc4MjVcdTc5NDlcdTc5NTdcdTdkMTlcdTgwYTJcdTgxMDJcdTgxZjNcdTgyOWRcdTgyYjdcdTg3MThcdThhOGNcdWY5ZmNcdThkMDRcdThkYmVcdTkwNzJcdTc2ZjRcdTdhMTlcdTdhMzdcdTdlNTRcdTgwNzdcdTU1MDdcdTU1ZDRcdTU4NzVcdTYzMmZc''@;'; put 'put ''dTY0MjJcdTY2NDlcdTY2NGJcdTY4NmRcdTY5OWJcdTZiODRcdTZkMjVcdTZlYjFcdTczY2RcdTc0NjhcdTc0YTFcdTc1NWJcdTc1YjlcdTc2ZTFcdTc3MWVcdTc3OGJcdTc5ZTZcdTdlMDlcdTdlMWRcdTgxZmJcdTg1MmZcdTg4OTdcdThhM2FcdThjZDFcdThlZWJcdThmYjBcdTkwMzJcdTkz''@;'; put 'put ''YWRcdTk2NjNcdTk2NzNcdTk3MDdcdTRmODRcdTUzZjFcdTU5ZWFcdTVhYzlcdTVlMTlcdTY4NGVcdTc0YzZcdTc1YmVcdTc5ZTlcdTdhOTJcdTgxYTNcdTg2ZWRcdThjZWFcdThkY2NcdThmZWRcdTY1OWZcdTY3MTVcdWY5ZmRcdTU3ZjdcdTZmNTdcdTdkZGRcdThmMmYiXSxbImYzYTEiLCJc''@;'; put 'put ''dTkzZjZcdTk2YzZcdTVmYjVcdTYxZjJcdTZmODRcdTRlMTRcdTRmOThcdTUwMWZcdTUzYzlcdTU1ZGZcdTVkNmZcdTVkZWVcdTZiMjFcdTZiNjRcdTc4Y2JcdTdiOWFcdWY5ZmVcdThlNDlcdThlY2FcdTkwNmVcdTYzNDlcdTY0M2VcdTc3NDBcdTdhODRcdTkzMmZcdTk0N2ZcdTlmNmFcdTY0''@;'; put 'put ''YjBcdTZmYWZcdTcxZTZcdTc0YThcdTc0ZGFcdTdhYzRcdTdjMTJcdTdlODJcdTdjYjJcdTdlOThcdThiOWFcdThkMGFcdTk0N2RcdTk5MTBcdTk5NGNcdTUyMzlcdTViZGZcdTY0ZTZcdTY3MmRcdTdkMmVcdTUwZWRcdTUzYzNcdTU4NzlcdTYxNThcdTYxNTlcdTYxZmFcdTY1YWNcdTdhZDlc''@;'; put 'put ''dThiOTJcdThiOTZcdTUwMDlcdTUwMjFcdTUyNzVcdTU1MzFcdTVhM2NcdTVlZTBcdTVmNzBcdTYxMzRcdTY1NWVcdTY2MGNcdTY2MzZcdTY2YTJcdTY5Y2RcdTZlYzRcdTZmMzJcdTczMTZcdTc2MjFcdTdhOTNcdTgxMzlcdTgyNTlcdTgzZDZcdTg0YmNcdTUwYjVcdTU3ZjBcdTViYzBcdTVi''@;'; put 'put ''ZThcdTVmNjlcdTYzYTFcdTc4MjZcdTdkYjVcdTgzZGNcdTg1MjFcdTkxYzdcdTkxZjVcdTUxOGFcdTY3ZjVcdTdiNTYiXSxbImY0YTEiLCJcdThjYWNcdTUxYzRcdTU5YmJcdTYwYmRcdTg2NTVcdTUwMWNcdWY5ZmZcdTUyNTRcdTVjM2FcdTYxN2RcdTYyMWFcdTYyZDNcdTY0ZjJcdTY1YTVc''@;'; put 'put ''dTZlY2NcdTc2MjBcdTgxMGFcdThlNjBcdTk2NWZcdTk2YmJcdTRlZGZcdTUzNDNcdTU1OThcdTU5MjlcdTVkZGRcdTY0YzVcdTZjYzlcdTZkZmFcdTczOTRcdTdhN2ZcdTgyMWJcdTg1YTZcdThjZTRcdThlMTBcdTkwNzdcdTkxZTdcdTk1ZTFcdTk2MjFcdTk3YzZcdTUxZjhcdTU0ZjJcdTU1''@;'; put 'put ''ODZcdTVmYjlcdTY0YTRcdTZmODhcdTdkYjRcdThmMWZcdThmNGRcdTk0MzVcdTUwYzlcdTVjMTZcdTZjYmVcdTZkZmJcdTc1MWJcdTc3YmJcdTdjM2RcdTdjNjRcdThhNzlcdThhYzJcdTU4MWVcdTU5YmVcdTVlMTZcdTYzNzdcdTcyNTJcdTc1OGFcdTc3NmJcdThhZGNcdThjYmNcdThmMTJc''@;'; put 'put ''dTVlZjNcdTY2NzRcdTZkZjhcdTgwN2RcdTgzYzFcdThhY2JcdTk3NTFcdTliZDZcdWZhMDBcdTUyNDNcdTY2ZmZcdTZkOTVcdTZlZWZcdTdkZTBcdThhZTZcdTkwMmVcdTkwNWVcdTlhZDRcdTUyMWRcdTUyN2ZcdTU0ZThcdTYxOTRcdTYyODRcdTYyZGJcdTY4YTIiXSxbImY1YTEiLCJcdTY5''@;'; put 'put ''MTJcdTY5NWFcdTZhMzVcdTcwOTJcdTcxMjZcdTc4NWRcdTc5MDFcdTc5MGVcdTc5ZDJcdTdhMGRcdTgwOTZcdTgyNzhcdTgyZDVcdTgzNDlcdTg1NDlcdThjODJcdThkODVcdTkxNjJcdTkxOGJcdTkxYWVcdTRmYzNcdTU2ZDFcdTcxZWRcdTc3ZDdcdTg3MDBcdTg5ZjhcdTViZjhcdTVmZDZc''@;'; put 'put ''dTY3NTFcdTkwYThcdTUzZTJcdTU4NWFcdTViZjVcdTYwYTRcdTYxODFcdTY0NjBcdTdlM2RcdTgwNzBcdTg1MjVcdTkyODNcdTY0YWVcdTUwYWNcdTVkMTRcdTY3MDBcdTU4OWNcdTYyYmRcdTYzYThcdTY5MGVcdTY5NzhcdTZhMWVcdTZlNmJcdTc2YmFcdTc5Y2JcdTgyYmJcdTg0MjlcdThh''@;'; put 'put ''Y2ZcdThkYThcdThmZmRcdTkxMTJcdTkxNGJcdTkxOWNcdTkzMTBcdTkzMThcdTkzOWFcdTk2ZGJcdTlhMzZcdTljMGRcdTRlMTFcdTc1NWNcdTc5NWRcdTdhZmFcdTdiNTFcdTdiYzlcdTdlMmVcdTg0YzRcdThlNTlcdThlNzRcdThlZjhcdTkwMTBcdTY2MjVcdTY5M2ZcdTc0NDNcdTUxZmFc''@;'; put 'put ''dTY3MmVcdTllZGNcdTUxNDVcdTVmZTBcdTZjOTZcdTg3ZjJcdTg4NWRcdTg4NzdcdTYwYjRcdTgxYjVcdTg0MDMiXSxbImY2YTEiLCJcdThkMDVcdTUzZDZcdTU0MzlcdTU2MzRcdTVhMzZcdTVjMzFcdTcwOGFcdTdmZTBcdTgwNWFcdTgxMDZcdTgxZWRcdThkYTNcdTkxODlcdTlhNWZcdTlk''@;'; put 'put ''ZjJcdTUwNzRcdTRlYzRcdTUzYTBcdTYwZmJcdTZlMmNcdTVjNjRcdTRmODhcdTUwMjRcdTU1ZTRcdTVjZDlcdTVlNWZcdTYwNjVcdTY4OTRcdTZjYmJcdTZkYzRcdTcxYmVcdTc1ZDRcdTc1ZjRcdTc2NjFcdTdhMWFcdTdhNDlcdTdkYzdcdTdkZmJcdTdmNmVcdTgxZjRcdTg2YTlcdThmMWNc''@;'; put 'put ''dTk2YzlcdTk5YjNcdTlmNTJcdTUyNDdcdTUyYzVcdTk4ZWRcdTg5YWFcdTRlMDNcdTY3ZDJcdTZmMDZcdTRmYjVcdTViZTJcdTY3OTVcdTZjODhcdTZkNzhcdTc0MWJcdTc4MjdcdTkxZGRcdTkzN2NcdTg3YzRcdTc5ZTRcdTdhMzFcdTVmZWJcdTRlZDZcdTU0YTRcdTU1M2VcdTU4YWVcdTU5''@;'; put 'put ''YTVcdTYwZjBcdTYyNTNcdTYyZDZcdTY3MzZcdTY5NTVcdTgyMzVcdTk2NDBcdTk5YjFcdTk5ZGRcdTUwMmNcdTUzNTNcdTU1NDRcdTU3N2NcdWZhMDFcdTYyNThcdWZhMDJcdTY0ZTJcdTY2NmJcdTY3ZGRcdTZmYzFcdTZmZWZcdTc0MjJcdTc0MzhcdThhMTciXSxbImY3YTEiLCJcdTk0Mzhc''@;'; put 'put ''dTU0NTFcdTU2MDZcdTU3NjZcdTVmNDhcdTYxOWFcdTZiNGVcdTcwNThcdTcwYWRcdTdkYmJcdThhOTVcdTU5NmFcdTgxMmJcdTYzYTJcdTc3MDhcdTgwM2RcdThjYWFcdTU4NTRcdTY0MmRcdTY5YmJcdTViOTVcdTVlMTFcdTZlNmZcdWZhMDNcdTg1NjlcdTUxNGNcdTUzZjBcdTU5MmFcdTYw''@;'; put 'put ''MjBcdTYxNGJcdTZiODZcdTZjNzBcdTZjZjBcdTdiMWVcdTgwY2VcdTgyZDRcdThkYzZcdTkwYjBcdTk4YjFcdWZhMDRcdTY0YzdcdTZmYTRcdTY0OTFcdTY1MDRcdTUxNGVcdTU0MTBcdTU3MWZcdThhMGVcdTYxNWZcdTY4NzZcdWZhMDVcdTc1ZGJcdTdiNTJcdTdkNzFcdTkwMWFcdTU4MDZc''@;'; put 'put ''dTY5Y2NcdTgxN2ZcdTg5MmFcdTkwMDBcdTk4MzlcdTUwNzhcdTU5NTdcdTU5YWNcdTYyOTVcdTkwMGZcdTliMmFcdTYxNWRcdTcyNzlcdTk1ZDZcdTU3NjFcdTVhNDZcdTVkZjRcdTYyOGFcdTY0YWRcdTY0ZmFcdTY3NzdcdTZjZTJcdTZkM2VcdTcyMmNcdTc0MzZcdTc4MzRcdTdmNzdcdTgy''@;'; put 'put ''YWRcdThkZGJcdTk4MTdcdTUyMjRcdTU3NDJcdTY3N2ZcdTcyNDhcdTc0ZTNcdThjYTlcdThmYTZcdTkyMTEiXSxbImY4YTEiLCJcdTk2MmFcdTUxNmJcdTUzZWRcdTYzNGNcdTRmNjlcdTU1MDRcdTYwOTZcdTY1NTdcdTZjOWJcdTZkN2ZcdTcyNGNcdTcyZmRcdTdhMTdcdTg5ODdcdThjOWRc''@;'; put 'put ''dTVmNmRcdTZmOGVcdTcwZjlcdTgxYThcdTYxMGVcdTRmYmZcdTUwNGZcdTYyNDFcdTcyNDdcdTdiYzdcdTdkZThcdTdmZTlcdTkwNGRcdTk3YWRcdTlhMTlcdThjYjZcdTU3NmFcdTVlNzNcdTY3YjBcdTg0MGRcdThhNTVcdTU0MjBcdTViMTZcdTVlNjNcdTVlZTJcdTVmMGFcdTY1ODNcdTgw''@;'; put 'put ''YmFcdTg1M2RcdTk1ODlcdTk2NWJcdTRmNDhcdTUzMDVcdTUzMGRcdTUzMGZcdTU0ODZcdTU0ZmFcdTU3MDNcdTVlMDNcdTYwMTZcdTYyOWJcdTYyYjFcdTYzNTVcdWZhMDZcdTZjZTFcdTZkNjZcdTc1YjFcdTc4MzJcdTgwZGVcdTgxMmZcdTgyZGVcdTg0NjFcdTg0YjJcdTg4OGRcdTg5MTJc''@;'; put 'put ''dTkwMGJcdTkyZWFcdTk4ZmRcdTliOTFcdTVlNDVcdTY2YjRcdTY2ZGRcdTcwMTFcdTcyMDZcdWZhMDdcdTRmZjVcdTUyN2RcdTVmNmFcdTYxNTNcdTY3NTNcdTZhMTlcdTZmMDJcdTc0ZTJcdTc5NjhcdTg4NjhcdThjNzlcdTk4YzdcdTk4YzRcdTlhNDMiXSxbImY5YTEiLCJcdTU0YzFcdTdh''@;'; put 'put ''MWZcdTY5NTNcdThhZjdcdThjNGFcdTk4YThcdTk5YWVcdTVmN2NcdTYyYWJcdTc1YjJcdTc2YWVcdTg4YWJcdTkwN2ZcdTk2NDJcdTUzMzlcdTVmM2NcdTVmYzVcdTZjY2NcdTczY2NcdTc1NjJcdTc1OGJcdTdiNDZcdTgyZmVcdTk5OWRcdTRlNGZcdTkwM2NcdTRlMGJcdTRmNTVcdTUzYTZc''@;'; put 'put ''dTU5MGZcdTVlYzhcdTY2MzBcdTZjYjNcdTc0NTVcdTgzNzdcdTg3NjZcdThjYzBcdTkwNTBcdTk3MWVcdTljMTVcdTU4ZDFcdTViNzhcdTg2NTBcdThiMTRcdTlkYjRcdTViZDJcdTYwNjhcdTYwOGRcdTY1ZjFcdTZjNTdcdTZmMjJcdTZmYTNcdTcwMWFcdTdmNTVcdTdmZjBcdTk1OTFcdTk1''@;'; put 'put ''OTJcdTk2NTBcdTk3ZDNcdTUyNzJcdThmNDRcdTUxZmRcdTU0MmJcdTU0YjhcdTU1NjNcdTU1OGFcdTZhYmJcdTZkYjVcdTdkZDhcdTgyNjZcdTkyOWNcdTk2NzdcdTllNzlcdTU0MDhcdTU0YzhcdTc2ZDJcdTg2ZTRcdTk1YTRcdTk1ZDRcdTk2NWNcdTRlYTJcdTRmMDlcdTU5ZWVcdTVhZTZc''@;'; put 'put ''dTVkZjdcdTYwNTJcdTYyOTdcdTY3NmRcdTY4NDFcdTZjODZcdTZlMmZcdTdmMzhcdTgwOWJcdTgyMmEiXSxbImZhYTEiLCJcdWZhMDhcdWZhMDlcdTk4MDVcdTRlYTVcdTUwNTVcdTU0YjNcdTU3OTNcdTU5NWFcdTViNjlcdTViYjNcdTYxYzhcdTY5NzdcdTZkNzdcdTcwMjNcdTg3ZjlcdTg5''@;'; put 'put ''ZTNcdThhNzJcdThhZTdcdTkwODJcdTk5ZWRcdTlhYjhcdTUyYmVcdTY4MzhcdTUwMTZcdTVlNzhcdTY3NGZcdTgzNDdcdTg4NGNcdTRlYWJcdTU0MTFcdTU2YWVcdTczZTZcdTkxMTVcdTk3ZmZcdTk5MDlcdTk5NTdcdTk5OTlcdTU2NTNcdTU4OWZcdTg2NWJcdThhMzFcdTYxYjJcdTZhZjZc''@;'; put 'put ''dTczN2JcdThlZDJcdTZiNDdcdTk2YWFcdTlhNTdcdTU5NTVcdTcyMDBcdThkNmJcdTk3NjlcdTRmZDRcdTVjZjRcdTVmMjZcdTYxZjhcdTY2NWJcdTZjZWJcdTcwYWJcdTczODRcdTczYjlcdTczZmVcdTc3MjlcdTc3NGRcdTdkNDNcdTdkNjJcdTdlMjNcdTgyMzdcdTg4NTJcdWZhMGFcdThj''@;'; put 'put ''ZTJcdTkyNDlcdTk4NmZcdTViNTFcdTdhNzRcdTg4NDBcdTk4MDFcdTVhY2NcdTRmZTBcdTUzNTRcdTU5M2VcdTVjZmRcdTYzM2VcdTZkNzlcdTcyZjlcdTgxMDVcdTgxMDdcdTgzYTJcdTkyY2ZcdTk4MzBcdTRlYThcdTUxNDRcdTUyMTFcdTU3OGIiXSxbImZiYTEiLCJcdTVmNjJcdTZjYzJc''@;'; put 'put ''dTZlY2VcdTcwMDVcdTcwNTBcdTcwYWZcdTcxOTJcdTczZTlcdTc0NjlcdTgzNGFcdTg3YTJcdTg4NjFcdTkwMDhcdTkwYTJcdTkzYTNcdTk5YThcdTUxNmVcdTVmNTdcdTYwZTBcdTYxNjdcdTY2YjNcdTg1NTlcdThlNGFcdTkxYWZcdTk3OGJcdTRlNGVcdTRlOTJcdTU0N2NcdTU4ZDVcdTU4''@;'; put 'put ''ZmFcdTU5N2RcdTVjYjVcdTVmMjdcdTYyMzZcdTYyNDhcdTY2MGFcdTY2NjdcdTZiZWJcdTZkNjlcdTZkY2ZcdTZlNTZcdTZlZjhcdTZmOTRcdTZmZTBcdTZmZTlcdTcwNWRcdTcyZDBcdTc0MjVcdTc0NWFcdTc0ZTBcdTc2OTNcdTc5NWNcdTdjY2FcdTdlMWVcdTgwZTFcdTgyYTZcdTg0NmJc''@;'; put 'put ''dTg0YmZcdTg2NGVcdTg2NWZcdTg3NzRcdThiNzdcdThjNmFcdTkzYWNcdTk4MDBcdTk4NjVcdTYwZDFcdTYyMTZcdTkxNzdcdTVhNWFcdTY2MGZcdTZkZjdcdTZlM2VcdTc0M2ZcdTliNDJcdTVmZmRcdTYwZGFcdTdiMGZcdTU0YzRcdTVmMThcdTZjNWVcdTZjZDNcdTZkMmFcdTcwZDhcdTdk''@;'; put 'put ''MDVcdTg2NzlcdThhMGNcdTlkM2JcdTUzMTZcdTU0OGNcdTViMDVcdTZhM2FcdTcwNmJcdTc1NzUiXSxbImZjYTEiLCJcdTc5OGRcdTc5YmVcdTgyYjFcdTgzZWZcdThhNzFcdThiNDFcdThjYThcdTk3NzRcdWZhMGJcdTY0ZjRcdTY1MmJcdTc4YmFcdTc4YmJcdTdhNmJcdTRlMzhcdTU1OWFc''@;'; put 'put ''dTU5NTBcdTViYTZcdTVlN2JcdTYwYTNcdTYzZGJcdTZiNjFcdTY2NjVcdTY4NTNcdTZlMTlcdTcxNjVcdTc0YjBcdTdkMDhcdTkwODRcdTlhNjlcdTljMjVcdTZkM2JcdTZlZDFcdTczM2VcdThjNDFcdTk1Y2FcdTUxZjBcdTVlNGNcdTVmYThcdTYwNGRcdTYwZjZcdTYxMzBcdTYxNGNcdTY2''@;'; put 'put ''NDNcdTY2NDRcdTY5YTVcdTZjYzFcdTZlNWZcdTZlYzlcdTZmNjJcdTcxNGNcdTc0OWNcdTc2ODdcdTdiYzFcdTdjMjdcdTgzNTJcdTg3NTdcdTkwNTFcdTk2OGRcdTllYzNcdTUzMmZcdTU2ZGVcdTVlZmJcdTVmOGFcdTYwNjJcdTYwOTRcdTYxZjdcdTY2NjZcdTY3MDNcdTZhOWNcdTZkZWVc''@;'; put 'put ''dTZmYWVcdTcwNzBcdTczNmFcdTdlNmFcdTgxYmVcdTgzMzRcdTg2ZDRcdThhYThcdThjYzRcdTUyODNcdTczNzJcdTViOTZcdTZhNmJcdTk0MDRcdTU0ZWVcdTU2ODZcdTViNWRcdTY1NDhcdTY1ODVcdTY2YzlcdTY4OWZcdTZkOGRcdTZkYzYiXSxbImZkYTEiLCJcdTcyM2JcdTgwYjRcdTkx''@;'; put 'put ''NzVcdTlhNGRcdTRmYWZcdTUwMTlcdTUzOWFcdTU0MGVcdTU0M2NcdTU1ODlcdTU1YzVcdTVlM2ZcdTVmOGNcdTY3M2RcdTcxNjZcdTczZGRcdTkwMDVcdTUyZGJcdTUyZjNcdTU4NjRcdTU4Y2VcdTcxMDRcdTcxOGZcdTcxZmJcdTg1YjBcdThhMTNcdTY2ODhcdTg1YThcdTU1YTdcdTY2ODRc''@;'; put 'put ''dTcxNGFcdTg0MzFcdTUzNDlcdTU1OTlcdTZiYzFcdTVmNTlcdTVmYmRcdTYzZWVcdTY2ODlcdTcxNDdcdThhZjFcdThmMWRcdTllYmVcdTRmMTFcdTY0M2FcdTcwY2JcdTc1NjZcdTg2NjdcdTYwNjRcdThiNGVcdTlkZjhcdTUxNDdcdTUxZjZcdTUzMDhcdTZkMzZcdTgwZjhcdTllZDFcdTY2''@;'; put 'put ''MTVcdTZiMjNcdTcwOThcdTc1ZDVcdTU0MDNcdTVjNzlcdTdkMDdcdThhMTZcdTZiMjBcdTZiM2RcdTZiNDZcdTU0MzhcdTYwNzBcdTZkM2RcdTdmZDVcdTgyMDhcdTUwZDZcdTUxZGVcdTU1OWNcdTU2NmJcdTU2Y2RcdTU5ZWNcdTViMDlcdTVlMGNcdTYxOTlcdTYxOThcdTYyMzFcdTY2NWVc''@;'; put 'put ''dTY2ZTZcdTcxOTlcdTcxYjlcdTcxYmFcdTcyYTdcdTc5YTdcdTdhMDBcdTdmYjJcdThhNzAiXV0nKX0sNzIzMjQ6dWU9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz1KU09OLnBhcnNlKCdbWyIwIiwiXFx1MDAwMCIsMTI3XSxbImExNDAiLCJcdTMwMDBcdWZmMGNcdTMwMDFcdTMwMDJcdWZm''@;'; put 'put ''MGVcdTIwMjdcdWZmMWJcdWZmMWFcdWZmMWZcdWZmMDFcdWZlMzBcdTIwMjZcdTIwMjVcdWZlNTBcdWZlNTFcdWZlNTJceGI3XHVmZTU0XHVmZTU1XHVmZTU2XHVmZTU3XHVmZjVjXHUyMDEzXHVmZTMxXHUyMDE0XHVmZTMzXHUyNTc0XHVmZTM0XHVmZTRmXHVmZjA4XHVmZjA5XHVmZTM1XHVm''@;'; put 'put ''ZTM2XHVmZjViXHVmZjVkXHVmZTM3XHVmZTM4XHUzMDE0XHUzMDE1XHVmZTM5XHVmZTNhXHUzMDEwXHUzMDExXHVmZTNiXHVmZTNjXHUzMDBhXHUzMDBiXHVmZTNkXHVmZTNlXHUzMDA4XHUzMDA5XHVmZTNmXHVmZTQwXHUzMDBjXHUzMDBkXHVmZTQxXHVmZTQyXHUzMDBlXHUzMDBmXHVmZTQz''@;'; put 'put ''XHVmZTQ0XHVmZTU5XHVmZTVhIl0sWyJhMWExIiwiXHVmZTViXHVmZTVjXHVmZTVkXHVmZTVlXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUzMDFkXHUzMDFlXHUyMDM1XHUyMDMyXHVmZjAzXHVmZjA2XHVmZjBhXHUyMDNiXHhhN1x1MzAwM1x1MjVjYlx1MjVjZlx1MjViM1x1MjViMlx1MjVj''@;'; put 'put ''ZVx1MjYwNlx1MjYwNVx1MjVjN1x1MjVjNlx1MjVhMVx1MjVhMFx1MjViZFx1MjViY1x1MzJhM1x1MjEwNVx4YWZcdWZmZTNcdWZmM2ZcdTAyY2RcdWZlNDlcdWZlNGFcdWZlNGRcdWZlNGVcdWZlNGJcdWZlNGNcdWZlNWZcdWZlNjBcdWZlNjFcdWZmMGJcdWZmMGRceGQ3XHhmN1x4YjFcdTIy''@;'; put 'put ''MWFcdWZmMWNcdWZmMWVcdWZmMWRcdTIyNjZcdTIyNjdcdTIyNjBcdTIyMWVcdTIyNTJcdTIyNjFcdWZlNjIiLDQsIlx1ZmY1ZVx1MjIyOVx1MjIyYVx1MjJhNVx1MjIyMFx1MjIxZlx1MjJiZlx1MzNkMlx1MzNkMVx1MjIyYlx1MjIyZVx1MjIzNVx1MjIzNFx1MjY0MFx1MjY0Mlx1MjI5NVx1''@;'; put 'put ''MjI5OVx1MjE5MVx1MjE5M1x1MjE5MFx1MjE5Mlx1MjE5Nlx1MjE5N1x1MjE5OVx1MjE5OFx1MjIyNVx1MjIyM1x1ZmYwZiJdLFsiYTI0MCIsIlx1ZmYzY1x1MjIxNVx1ZmU2OFx1ZmYwNFx1ZmZlNVx1MzAxMlx1ZmZlMFx1ZmZlMVx1ZmYwNVx1ZmYyMFx1MjEwM1x1MjEwOVx1ZmU2OVx1ZmU2''@;'; put 'put ''YVx1ZmU2Ylx1MzNkNVx1MzM5Y1x1MzM5ZFx1MzM5ZVx1MzNjZVx1MzNhMVx1MzM4ZVx1MzM4Zlx1MzNjNFx4YjBcdTUxNTlcdTUxNWJcdTUxNWVcdTUxNWRcdTUxNjFcdTUxNjNcdTU1ZTdcdTc0ZTlcdTdjY2VcdTI1ODEiLDcsIlx1MjU4Zlx1MjU4ZVx1MjU4ZFx1MjU4Y1x1MjU4Ylx1MjU4''@;'; put 'put ''YVx1MjU4OVx1MjUzY1x1MjUzNFx1MjUyY1x1MjUyNFx1MjUxY1x1MjU5NFx1MjUwMFx1MjUwMlx1MjU5NVx1MjUwY1x1MjUxMFx1MjUxNFx1MjUxOFx1MjU2ZCJdLFsiYTJhMSIsIlx1MjU2ZVx1MjU3MFx1MjU2Zlx1MjU1MFx1MjU1ZVx1MjU2YVx1MjU2MVx1MjVlMlx1MjVlM1x1MjVlNVx1''@;'; put 'put ''MjVlNFx1MjU3MVx1MjU3Mlx1MjU3M1x1ZmYxMCIsOSwiXHUyMTYwIiw5LCJcdTMwMjEiLDgsIlx1NTM0MVx1NTM0NFx1NTM0NVx1ZmYyMSIsMjUsIlx1ZmY0MSIsMjFdLFsiYTM0MCIsIlx1ZmY1N1x1ZmY1OFx1ZmY1OVx1ZmY1YVx1MDM5MSIsMTYsIlx1MDNhMyIsNiwiXHUwM2IxIiwxNiwi''@;'; put 'put ''XHUwM2MzIiw2LCJcdTMxMDUiLDEwXSxbImEzYTEiLCJcdTMxMTAiLDI1LCJcdTAyZDlcdTAyYzlcdTAyY2FcdTAyYzdcdTAyY2IiXSxbImEzZTEiLCJcdTIwYWMiXSxbImE0NDAiLCJcdTRlMDBcdTRlNTlcdTRlMDFcdTRlMDNcdTRlNDNcdTRlNWRcdTRlODZcdTRlOGNcdTRlYmFcdTUxM2Zc''@;'; put 'put ''dTUxNjVcdTUxNmJcdTUxZTBcdTUyMDBcdTUyMDFcdTUyOWJcdTUzMTVcdTUzNDFcdTUzNWNcdTUzYzhcdTRlMDlcdTRlMGJcdTRlMDhcdTRlMGFcdTRlMmJcdTRlMzhcdTUxZTFcdTRlNDVcdTRlNDhcdTRlNWZcdTRlNWVcdTRlOGVcdTRlYTFcdTUxNDBcdTUyMDNcdTUyZmFcdTUzNDNcdTUz''@;'; put 'put ''YzlcdTUzZTNcdTU3MWZcdTU4ZWJcdTU5MTVcdTU5MjdcdTU5NzNcdTViNTBcdTViNTFcdTViNTNcdTViZjhcdTVjMGZcdTVjMjJcdTVjMzhcdTVjNzFcdTVkZGRcdTVkZTVcdTVkZjFcdTVkZjJcdTVkZjNcdTVkZmVcdTVlNzJcdTVlZmVcdTVmMGJcdTVmMTNcdTYyNGQiXSxbImE0YTEiLCJc''@;'; put 'put ''dTRlMTFcdTRlMTBcdTRlMGRcdTRlMmRcdTRlMzBcdTRlMzlcdTRlNGJcdTVjMzlcdTRlODhcdTRlOTFcdTRlOTVcdTRlOTJcdTRlOTRcdTRlYTJcdTRlYzFcdTRlYzBcdTRlYzNcdTRlYzZcdTRlYzdcdTRlY2RcdTRlY2FcdTRlY2JcdTRlYzRcdTUxNDNcdTUxNDFcdTUxNjdcdTUxNmRcdTUx''@;'; put 'put ''NmVcdTUxNmNcdTUxOTdcdTUxZjZcdTUyMDZcdTUyMDdcdTUyMDhcdTUyZmJcdTUyZmVcdTUyZmZcdTUzMTZcdTUzMzlcdTUzNDhcdTUzNDdcdTUzNDVcdTUzNWVcdTUzODRcdTUzY2JcdTUzY2FcdTUzY2RcdTU4ZWNcdTU5MjlcdTU5MmJcdTU5MmFcdTU5MmRcdTViNTRcdTVjMTFcdTVjMjRc''@;'; put 'put ''dTVjM2FcdTVjNmZcdTVkZjRcdTVlN2JcdTVlZmZcdTVmMTRcdTVmMTVcdTVmYzNcdTYyMDhcdTYyMzZcdTYyNGJcdTYyNGVcdTY1MmZcdTY1ODdcdTY1OTdcdTY1YTRcdTY1YjlcdTY1ZTVcdTY2ZjBcdTY3MDhcdTY3MjhcdTZiMjBcdTZiNjJcdTZiNzlcdTZiY2JcdTZiZDRcdTZiZGJcdTZj''@;'; put 'put ''MGZcdTZjMzRcdTcwNmJcdTcyMmFcdTcyMzZcdTcyM2JcdTcyNDdcdTcyNTlcdTcyNWJcdTcyYWNcdTczOGJcdTRlMTkiXSxbImE1NDAiLCJcdTRlMTZcdTRlMTVcdTRlMTRcdTRlMThcdTRlM2JcdTRlNGRcdTRlNGZcdTRlNGVcdTRlZTVcdTRlZDhcdTRlZDRcdTRlZDVcdTRlZDZcdTRlZDdc''@;'; put 'put ''dTRlZTNcdTRlZTRcdTRlZDlcdTRlZGVcdTUxNDVcdTUxNDRcdTUxODlcdTUxOGFcdTUxYWNcdTUxZjlcdTUxZmFcdTUxZjhcdTUyMGFcdTUyYTBcdTUyOWZcdTUzMDVcdTUzMDZcdTUzMTdcdTUzMWRcdTRlZGZcdTUzNGFcdTUzNDlcdTUzNjFcdTUzNjBcdTUzNmZcdTUzNmVcdTUzYmJcdTUz''@;'; put 'put ''ZWZcdTUzZTRcdTUzZjNcdTUzZWNcdTUzZWVcdTUzZTlcdTUzZThcdTUzZmNcdTUzZjhcdTUzZjVcdTUzZWJcdTUzZTZcdTUzZWFcdTUzZjJcdTUzZjFcdTUzZjBcdTUzZTVcdTUzZWRcdTUzZmJcdTU2ZGJcdTU2ZGFcdTU5MTYiXSxbImE1YTEiLCJcdTU5MmVcdTU5MzFcdTU5NzRcdTU5NzZc''@;'; put 'put ''dTViNTVcdTViODNcdTVjM2NcdTVkZThcdTVkZTdcdTVkZTZcdTVlMDJcdTVlMDNcdTVlNzNcdTVlN2NcdTVmMDFcdTVmMThcdTVmMTdcdTVmYzVcdTYyMGFcdTYyNTNcdTYyNTRcdTYyNTJcdTYyNTFcdTY1YTVcdTY1ZTZcdTY3MmVcdTY3MmNcdTY3MmFcdTY3MmJcdTY3MmRcdTZiNjNcdTZi''@;'; put 'put ''Y2RcdTZjMTFcdTZjMTBcdTZjMzhcdTZjNDFcdTZjNDBcdTZjM2VcdTcyYWZcdTczODRcdTczODlcdTc0ZGNcdTc0ZTZcdTc1MThcdTc1MWZcdTc1MjhcdTc1MjlcdTc1MzBcdTc1MzFcdTc1MzJcdTc1MzNcdTc1OGJcdTc2N2RcdTc2YWVcdTc2YmZcdTc2ZWVcdTc3ZGJcdTc3ZTJcdTc3ZjNc''@;'; put 'put ''dTc5M2FcdTc5YmVcdTdhNzRcdTdhY2JcdTRlMWVcdTRlMWZcdTRlNTJcdTRlNTNcdTRlNjlcdTRlOTlcdTRlYTRcdTRlYTZcdTRlYTVcdTRlZmZcdTRmMDlcdTRmMTlcdTRmMGFcdTRmMTVcdTRmMGRcdTRmMTBcdTRmMTFcdTRmMGZcdTRlZjJcdTRlZjZcdTRlZmJcdTRlZjBcdTRlZjNcdTRl''@;'; put 'put ''ZmRcdTRmMDFcdTRmMGJcdTUxNDlcdTUxNDdcdTUxNDZcdTUxNDhcdTUxNjgiXSxbImE2NDAiLCJcdTUxNzFcdTUxOGRcdTUxYjBcdTUyMTdcdTUyMTFcdTUyMTJcdTUyMGVcdTUyMTZcdTUyYTNcdTUzMDhcdTUzMjFcdTUzMjBcdTUzNzBcdTUzNzFcdTU0MDlcdTU0MGZcdTU0MGNcdTU0MGFc''@;'; put 'put ''dTU0MTBcdTU0MDFcdTU0MGJcdTU0MDRcdTU0MTFcdTU0MGRcdTU0MDhcdTU0MDNcdTU0MGVcdTU0MDZcdTU0MTJcdTU2ZTBcdTU2ZGVcdTU2ZGRcdTU3MzNcdTU3MzBcdTU3MjhcdTU3MmRcdTU3MmNcdTU3MmZcdTU3MjlcdTU5MTlcdTU5MWFcdTU5MzdcdTU5MzhcdTU5ODRcdTU5NzhcdTU5''@;'; put 'put ''ODNcdTU5N2RcdTU5NzlcdTU5ODJcdTU5ODFcdTViNTdcdTViNThcdTViODdcdTViODhcdTViODVcdTViODlcdTViZmFcdTVjMTZcdTVjNzlcdTVkZGVcdTVlMDZcdTVlNzZcdTVlNzQiXSxbImE2YTEiLCJcdTVmMGZcdTVmMWJcdTVmZDlcdTVmZDZcdTYyMGVcdTYyMGNcdTYyMGRcdTYyMTBc''@;'; put 'put ''dTYyNjNcdTYyNWJcdTYyNThcdTY1MzZcdTY1ZTlcdTY1ZThcdTY1ZWNcdTY1ZWRcdTY2ZjJcdTY2ZjNcdTY3MDlcdTY3M2RcdTY3MzRcdTY3MzFcdTY3MzVcdTZiMjFcdTZiNjRcdTZiN2JcdTZjMTZcdTZjNWRcdTZjNTdcdTZjNTlcdTZjNWZcdTZjNjBcdTZjNTBcdTZjNTVcdTZjNjFcdTZj''@;'; put 'put ''NWJcdTZjNGRcdTZjNGVcdTcwNzBcdTcyNWZcdTcyNWRcdTc2N2VcdTdhZjlcdTdjNzNcdTdjZjhcdTdmMzZcdTdmOGFcdTdmYmRcdTgwMDFcdTgwMDNcdTgwMGNcdTgwMTJcdTgwMzNcdTgwN2ZcdTgwODlcdTgwOGJcdTgwOGNcdTgxZTNcdTgxZWFcdTgxZjNcdTgxZmNcdTgyMGNcdTgyMWJc''@;'; put 'put ''dTgyMWZcdTgyNmVcdTgyNzJcdTgyN2VcdTg2NmJcdTg4NDBcdTg4NGNcdTg4NjNcdTg5N2ZcdTk2MjFcdTRlMzJcdTRlYThcdTRmNGRcdTRmNGZcdTRmNDdcdTRmNTdcdTRmNWVcdTRmMzRcdTRmNWJcdTRmNTVcdTRmMzBcdTRmNTBcdTRmNTFcdTRmM2RcdTRmM2FcdTRmMzhcdTRmNDNcdTRm''@;'; put 'put ''NTRcdTRmM2NcdTRmNDZcdTRmNjMiXSxbImE3NDAiLCJcdTRmNWNcdTRmNjBcdTRmMmZcdTRmNGVcdTRmMzZcdTRmNTlcdTRmNWRcdTRmNDhcdTRmNWFcdTUxNGNcdTUxNGJcdTUxNGRcdTUxNzVcdTUxYjZcdTUxYjdcdTUyMjVcdTUyMjRcdTUyMjlcdTUyMmFcdTUyMjhcdTUyYWJcdTUyYTlc''@;'; put 'put ''dTUyYWFcdTUyYWNcdTUzMjNcdTUzNzNcdTUzNzVcdTU0MWRcdTU0MmRcdTU0MWVcdTU0M2VcdTU0MjZcdTU0NGVcdTU0MjdcdTU0NDZcdTU0NDNcdTU0MzNcdTU0NDhcdTU0NDJcdTU0MWJcdTU0MjlcdTU0NGFcdTU0MzlcdTU0M2JcdTU0MzhcdTU0MmVcdTU0MzVcdTU0MzZcdTU0MjBcdTU0''@;'; put 'put ''M2NcdTU0NDBcdTU0MzFcdTU0MmJcdTU0MWZcdTU0MmNcdTU2ZWFcdTU2ZjBcdTU2ZTRcdTU2ZWJcdTU3NGFcdTU3NTFcdTU3NDBcdTU3NGQiXSxbImE3YTEiLCJcdTU3NDdcdTU3NGVcdTU3M2VcdTU3NTBcdTU3NGZcdTU3M2JcdTU4ZWZcdTU5M2VcdTU5OWRcdTU5OTJcdTU5YThcdTU5OWVc''@;'; put 'put ''dTU5YTNcdTU5OTlcdTU5OTZcdTU5OGRcdTU5YTRcdTU5OTNcdTU5OGFcdTU5YTVcdTViNWRcdTViNWNcdTViNWFcdTViNWJcdTViOGNcdTViOGJcdTViOGZcdTVjMmNcdTVjNDBcdTVjNDFcdTVjM2ZcdTVjM2VcdTVjOTBcdTVjOTFcdTVjOTRcdTVjOGNcdTVkZWJcdTVlMGNcdTVlOGZcdTVl''@;'; put 'put ''ODdcdTVlOGFcdTVlZjdcdTVmMDRcdTVmMWZcdTVmNjRcdTVmNjJcdTVmNzdcdTVmNzlcdTVmZDhcdTVmY2NcdTVmZDdcdTVmY2RcdTVmZjFcdTVmZWJcdTVmZjhcdTVmZWFcdTYyMTJcdTYyMTFcdTYyODRcdTYyOTdcdTYyOTZcdTYyODBcdTYyNzZcdTYyODlcdTYyNmRcdTYyOGFcdTYyN2Nc''@;'; put 'put ''dTYyN2VcdTYyNzlcdTYyNzNcdTYyOTJcdTYyNmZcdTYyOThcdTYyNmVcdTYyOTVcdTYyOTNcdTYyOTFcdTYyODZcdTY1MzlcdTY1M2JcdTY1MzhcdTY1ZjFcdTY2ZjRcdTY3NWZcdTY3NGVcdTY3NGZcdTY3NTBcdTY3NTFcdTY3NWNcdTY3NTZcdTY3NWVcdTY3NDlcdTY3NDZcdTY3NjAiXSxb''@;'; put 'put ''ImE4NDAiLCJcdTY3NTNcdTY3NTdcdTZiNjVcdTZiY2ZcdTZjNDJcdTZjNWVcdTZjOTlcdTZjODFcdTZjODhcdTZjODlcdTZjODVcdTZjOWJcdTZjNmFcdTZjN2FcdTZjOTBcdTZjNzBcdTZjOGNcdTZjNjhcdTZjOTZcdTZjOTJcdTZjN2RcdTZjODNcdTZjNzJcdTZjN2VcdTZjNzRcdTZjODZc''@;'; put 'put ''dTZjNzZcdTZjOGRcdTZjOTRcdTZjOThcdTZjODJcdTcwNzZcdTcwN2NcdTcwN2RcdTcwNzhcdTcyNjJcdTcyNjFcdTcyNjBcdTcyYzRcdTcyYzJcdTczOTZcdTc1MmNcdTc1MmJcdTc1MzdcdTc1MzhcdTc2ODJcdTc2ZWZcdTc3ZTNcdTc5YzFcdTc5YzBcdTc5YmZcdTdhNzZcdTdjZmJcdTdm''@;'; put 'put ''NTVcdTgwOTZcdTgwOTNcdTgwOWRcdTgwOThcdTgwOWJcdTgwOWFcdTgwYjJcdTgyNmZcdTgyOTIiXSxbImE4YTEiLCJcdTgyOGJcdTgyOGRcdTg5OGJcdTg5ZDJcdThhMDBcdThjMzdcdThjNDZcdThjNTVcdThjOWRcdThkNjRcdThkNzBcdThkYjNcdThlYWJcdThlY2FcdThmOWJcdThmYjBc''@;'; put 'put ''dThmYzJcdThmYzZcdThmYzVcdThmYzRcdTVkZTFcdTkwOTFcdTkwYTJcdTkwYWFcdTkwYTZcdTkwYTNcdTkxNDlcdTkxYzZcdTkxY2NcdTk2MzJcdTk2MmVcdTk2MzFcdTk2MmFcdTk2MmNcdTRlMjZcdTRlNTZcdTRlNzNcdTRlOGJcdTRlOWJcdTRlOWVcdTRlYWJcdTRlYWNcdTRmNmZcdTRm''@;'; put 'put ''OWRcdTRmOGRcdTRmNzNcdTRmN2ZcdTRmNmNcdTRmOWJcdTRmOGJcdTRmODZcdTRmODNcdTRmNzBcdTRmNzVcdTRmODhcdTRmNjlcdTRmN2JcdTRmOTZcdTRmN2VcdTRmOGZcdTRmOTFcdTRmN2FcdTUxNTRcdTUxNTJcdTUxNTVcdTUxNjlcdTUxNzdcdTUxNzZcdTUxNzhcdTUxYmRcdTUxZmRc''@;'; put 'put ''dTUyM2JcdTUyMzhcdTUyMzdcdTUyM2FcdTUyMzBcdTUyMmVcdTUyMzZcdTUyNDFcdTUyYmVcdTUyYmJcdTUzNTJcdTUzNTRcdTUzNTNcdTUzNTFcdTUzNjZcdTUzNzdcdTUzNzhcdTUzNzlcdTUzZDZcdTUzZDRcdTUzZDdcdTU0NzNcdTU0NzUiXSxbImE5NDAiLCJcdTU0OTZcdTU0NzhcdTU0''@;'; put 'put ''OTVcdTU0ODBcdTU0N2JcdTU0NzdcdTU0ODRcdTU0OTJcdTU0ODZcdTU0N2NcdTU0OTBcdTU0NzFcdTU0NzZcdTU0OGNcdTU0OWFcdTU0NjJcdTU0NjhcdTU0OGJcdTU0N2RcdTU0OGVcdTU2ZmFcdTU3ODNcdTU3NzdcdTU3NmFcdTU3NjlcdTU3NjFcdTU3NjZcdTU3NjRcdTU3N2NcdTU5MWNc''@;'; put 'put ''dTU5NDlcdTU5NDdcdTU5NDhcdTU5NDRcdTU5NTRcdTU5YmVcdTU5YmJcdTU5ZDRcdTU5YjlcdTU5YWVcdTU5ZDFcdTU5YzZcdTU5ZDBcdTU5Y2RcdTU5Y2JcdTU5ZDNcdTU5Y2FcdTU5YWZcdTU5YjNcdTU5ZDJcdTU5YzVcdTViNWZcdTViNjRcdTViNjNcdTViOTdcdTViOWFcdTViOThcdTVi''@;'; put 'put ''OWNcdTViOTlcdTViOWJcdTVjMWFcdTVjNDhcdTVjNDUiXSxbImE5YTEiLCJcdTVjNDZcdTVjYjdcdTVjYTFcdTVjYjhcdTVjYTlcdTVjYWJcdTVjYjFcdTVjYjNcdTVlMThcdTVlMWFcdTVlMTZcdTVlMTVcdTVlMWJcdTVlMTFcdTVlNzhcdTVlOWFcdTVlOTdcdTVlOWNcdTVlOTVcdTVlOTZc''@;'; put 'put ''dTVlZjZcdTVmMjZcdTVmMjdcdTVmMjlcdTVmODBcdTVmODFcdTVmN2ZcdTVmN2NcdTVmZGRcdTVmZTBcdTVmZmRcdTVmZjVcdTVmZmZcdTYwMGZcdTYwMTRcdTYwMmZcdTYwMzVcdTYwMTZcdTYwMmFcdTYwMTVcdTYwMjFcdTYwMjdcdTYwMjlcdTYwMmJcdTYwMWJcdTYyMTZcdTYyMTVcdTYy''@;'; put 'put ''M2ZcdTYyM2VcdTYyNDBcdTYyN2ZcdTYyYzlcdTYyY2NcdTYyYzRcdTYyYmZcdTYyYzJcdTYyYjlcdTYyZDJcdTYyZGJcdTYyYWJcdTYyZDNcdTYyZDRcdTYyY2JcdTYyYzhcdTYyYThcdTYyYmRcdTYyYmNcdTYyZDBcdTYyZDlcdTYyYzdcdTYyY2RcdTYyYjVcdTYyZGFcdTYyYjFcdTYyZDhc''@;'; put 'put ''dTYyZDZcdTYyZDdcdTYyYzZcdTYyYWNcdTYyY2VcdTY1M2VcdTY1YTdcdTY1YmNcdTY1ZmFcdTY2MTRcdTY2MTNcdTY2MGNcdTY2MDZcdTY2MDJcdTY2MGVcdTY2MDBcdTY2MGZcdTY2MTVcdTY2MGEiXSxbImFhNDAiLCJcdTY2MDdcdTY3MGRcdTY3MGJcdTY3NmRcdTY3OGJcdTY3OTVcdTY3''@;'; put 'put ''NzFcdTY3OWNcdTY3NzNcdTY3NzdcdTY3ODdcdTY3OWRcdTY3OTdcdTY3NmZcdTY3NzBcdTY3N2ZcdTY3ODlcdTY3N2VcdTY3OTBcdTY3NzVcdTY3OWFcdTY3OTNcdTY3N2NcdTY3NmFcdTY3NzJcdTZiMjNcdTZiNjZcdTZiNjdcdTZiN2ZcdTZjMTNcdTZjMWJcdTZjZTNcdTZjZThcdTZjZjNc''@;'; put 'put ''dTZjYjFcdTZjY2NcdTZjZTVcdTZjYjNcdTZjYmRcdTZjYmVcdTZjYmNcdTZjZTJcdTZjYWJcdTZjZDVcdTZjZDNcdTZjYjhcdTZjYzRcdTZjYjlcdTZjYzFcdTZjYWVcdTZjZDdcdTZjYzVcdTZjZjFcdTZjYmZcdTZjYmJcdTZjZTFcdTZjZGJcdTZjY2FcdTZjYWNcdTZjZWZcdTZjZGNcdTZj''@;'; put 'put ''ZDZcdTZjZTAiXSxbImFhYTEiLCJcdTcwOTVcdTcwOGVcdTcwOTJcdTcwOGFcdTcwOTlcdTcyMmNcdTcyMmRcdTcyMzhcdTcyNDhcdTcyNjdcdTcyNjlcdTcyYzBcdTcyY2VcdTcyZDlcdTcyZDdcdTcyZDBcdTczYTlcdTczYThcdTczOWZcdTczYWJcdTczYTVcdTc1M2RcdTc1OWRcdTc1OTlc''@;'; put 'put ''dTc1OWFcdTc2ODRcdTc2YzJcdTc2ZjJcdTc2ZjRcdTc3ZTVcdTc3ZmRcdTc5M2VcdTc5NDBcdTc5NDFcdTc5YzlcdTc5YzhcdTdhN2FcdTdhNzlcdTdhZmFcdTdjZmVcdTdmNTRcdTdmOGNcdTdmOGJcdTgwMDVcdTgwYmFcdTgwYTVcdTgwYTJcdTgwYjFcdTgwYTFcdTgwYWJcdTgwYTlcdTgw''@;'; put 'put ''YjRcdTgwYWFcdTgwYWZcdTgxZTVcdTgxZmVcdTgyMGRcdTgyYjNcdTgyOWRcdTgyOTlcdTgyYWRcdTgyYmRcdTgyOWZcdTgyYjlcdTgyYjFcdTgyYWNcdTgyYTVcdTgyYWZcdTgyYjhcdTgyYTNcdTgyYjBcdTgyYmVcdTgyYjdcdTg2NGVcdTg2NzFcdTUyMWRcdTg4NjhcdThlY2JcdThmY2Vc''@;'; put 'put ''dThmZDRcdThmZDFcdTkwYjVcdTkwYjhcdTkwYjFcdTkwYjZcdTkxYzdcdTkxZDFcdTk1NzdcdTk1ODBcdTk2MWNcdTk2NDBcdTk2M2ZcdTk2M2JcdTk2NDQiXSxbImFiNDAiLCJcdTk2NDJcdTk2YjlcdTk2ZThcdTk3NTJcdTk3NWVcdTRlOWZcdTRlYWRcdTRlYWVcdTRmZTFcdTRmYjVcdTRm''@;'; put 'put ''YWZcdTRmYmZcdTRmZTBcdTRmZDFcdTRmY2ZcdTRmZGRcdTRmYzNcdTRmYjZcdTRmZDhcdTRmZGZcdTRmY2FcdTRmZDdcdTRmYWVcdTRmZDBcdTRmYzRcdTRmYzJcdTRmZGFcdTRmY2VcdTRmZGVcdTRmYjdcdTUxNTdcdTUxOTJcdTUxOTFcdTUxYTBcdTUyNGVcdTUyNDNcdTUyNGFcdTUyNGRc''@;'; put 'put ''dTUyNGNcdTUyNGJcdTUyNDdcdTUyYzdcdTUyYzlcdTUyYzNcdTUyYzFcdTUzMGRcdTUzNTdcdTUzN2JcdTUzOWFcdTUzZGJcdTU0YWNcdTU0YzBcdTU0YThcdTU0Y2VcdTU0YzlcdTU0YjhcdTU0YTZcdTU0YjNcdTU0YzdcdTU0YzJcdTU0YmRcdTU0YWFcdTU0YzEiXSxbImFiYTEiLCJcdTU0''@;'; put 'put ''YzRcdTU0YzhcdTU0YWZcdTU0YWJcdTU0YjFcdTU0YmJcdTU0YTlcdTU0YTdcdTU0YmZcdTU2ZmZcdTU3ODJcdTU3OGJcdTU3YTBcdTU3YTNcdTU3YTJcdTU3Y2VcdTU3YWVcdTU3OTNcdTU5NTVcdTU5NTFcdTU5NGZcdTU5NGVcdTU5NTBcdTU5ZGNcdTU5ZDhcdTU5ZmZcdTU5ZTNcdTU5ZThc''@;'; put 'put ''dTVhMDNcdTU5ZTVcdTU5ZWFcdTU5ZGFcdTU5ZTZcdTVhMDFcdTU5ZmJcdTViNjlcdTViYTNcdTViYTZcdTViYTRcdTViYTJcdTViYTVcdTVjMDFcdTVjNGVcdTVjNGZcdTVjNGRcdTVjNGJcdTVjZDlcdTVjZDJcdTVkZjdcdTVlMWRcdTVlMjVcdTVlMWZcdTVlN2RcdTVlYTBcdTVlYTZcdTVl''@;'; put 'put ''ZmFcdTVmMDhcdTVmMmRcdTVmNjVcdTVmODhcdTVmODVcdTVmOGFcdTVmOGJcdTVmODdcdTVmOGNcdTVmODlcdTYwMTJcdTYwMWRcdTYwMjBcdTYwMjVcdTYwMGVcdTYwMjhcdTYwNGRcdTYwNzBcdTYwNjhcdTYwNjJcdTYwNDZcdTYwNDNcdTYwNmNcdTYwNmJcdTYwNmFcdTYwNjRcdTYyNDFc''@;'; put 'put ''dTYyZGNcdTYzMTZcdTYzMDlcdTYyZmNcdTYyZWRcdTYzMDFcdTYyZWVcdTYyZmRcdTYzMDdcdTYyZjFcdTYyZjciXSxbImFjNDAiLCJcdTYyZWZcdTYyZWNcdTYyZmVcdTYyZjRcdTYzMTFcdTYzMDJcdTY1M2ZcdTY1NDVcdTY1YWJcdTY1YmRcdTY1ZTJcdTY2MjVcdTY2MmRcdTY2MjBcdTY2''@;'; put 'put ''MjdcdTY2MmZcdTY2MWZcdTY2MjhcdTY2MzFcdTY2MjRcdTY2ZjdcdTY3ZmZcdTY3ZDNcdTY3ZjFcdTY3ZDRcdTY3ZDBcdTY3ZWNcdTY3YjZcdTY3YWZcdTY3ZjVcdTY3ZTlcdTY3ZWZcdTY3YzRcdTY3ZDFcdTY3YjRcdTY3ZGFcdTY3ZTVcdTY3YjhcdTY3Y2ZcdTY3ZGVcdTY3ZjNcdTY3YjBc''@;'; put 'put ''dTY3ZDlcdTY3ZTJcdTY3ZGRcdTY3ZDJcdTZiNmFcdTZiODNcdTZiODZcdTZiYjVcdTZiZDJcdTZiZDdcdTZjMWZcdTZjYzlcdTZkMGJcdTZkMzJcdTZkMmFcdTZkNDFcdTZkMjVcdTZkMGNcdTZkMzFcdTZkMWVcdTZkMTciXSxbImFjYTEiLCJcdTZkM2JcdTZkM2RcdTZkM2VcdTZkMzZcdTZk''@;'; put 'put ''MWJcdTZjZjVcdTZkMzlcdTZkMjdcdTZkMzhcdTZkMjlcdTZkMmVcdTZkMzVcdTZkMGVcdTZkMmJcdTcwYWJcdTcwYmFcdTcwYjNcdTcwYWNcdTcwYWZcdTcwYWRcdTcwYjhcdTcwYWVcdTcwYTRcdTcyMzBcdTcyNzJcdTcyNmZcdTcyNzRcdTcyZTlcdTcyZTBcdTcyZTFcdTczYjdcdTczY2Fc''@;'; put 'put ''dTczYmJcdTczYjJcdTczY2RcdTczYzBcdTczYjNcdTc1MWFcdTc1MmRcdTc1NGZcdTc1NGNcdTc1NGVcdTc1NGJcdTc1YWJcdTc1YTRcdTc1YTVcdTc1YTJcdTc1YTNcdTc2NzhcdTc2ODZcdTc2ODdcdTc2ODhcdTc2YzhcdTc2YzZcdTc2YzNcdTc2YzVcdTc3MDFcdTc2ZjlcdTc2ZjhcdTc3''@;'; put 'put ''MDlcdTc3MGJcdTc2ZmVcdTc2ZmNcdTc3MDdcdTc3ZGNcdTc4MDJcdTc4MTRcdTc4MGNcdTc4MGRcdTc5NDZcdTc5NDlcdTc5NDhcdTc5NDdcdTc5YjlcdTc5YmFcdTc5ZDFcdTc5ZDJcdTc5Y2JcdTdhN2ZcdTdhODFcdTdhZmZcdTdhZmRcdTdjN2RcdTdkMDJcdTdkMDVcdTdkMDBcdTdkMDlc''@;'; put 'put ''dTdkMDdcdTdkMDRcdTdkMDZcdTdmMzhcdTdmOGVcdTdmYmZcdTgwMDQiXSxbImFkNDAiLCJcdTgwMTBcdTgwMGRcdTgwMTFcdTgwMzZcdTgwZDZcdTgwZTVcdTgwZGFcdTgwYzNcdTgwYzRcdTgwY2NcdTgwZTFcdTgwZGJcdTgwY2VcdTgwZGVcdTgwZTRcdTgwZGRcdTgxZjRcdTgyMjJcdTgy''@;'; put 'put ''ZTdcdTgzMDNcdTgzMDVcdTgyZTNcdTgyZGJcdTgyZTZcdTgzMDRcdTgyZTVcdTgzMDJcdTgzMDlcdTgyZDJcdTgyZDdcdTgyZjFcdTgzMDFcdTgyZGNcdTgyZDRcdTgyZDFcdTgyZGVcdTgyZDNcdTgyZGZcdTgyZWZcdTgzMDZcdTg2NTBcdTg2NzlcdTg2N2JcdTg2N2FcdTg4NGRcdTg4NmJc''@;'; put 'put ''dTg5ODFcdTg5ZDRcdThhMDhcdThhMDJcdThhMDNcdThjOWVcdThjYTBcdThkNzRcdThkNzNcdThkYjRcdThlY2RcdThlY2NcdThmZjBcdThmZTZcdThmZTJcdThmZWFcdThmZTUiXSxbImFkYTEiLCJcdThmZWRcdThmZWJcdThmZTRcdThmZThcdTkwY2FcdTkwY2VcdTkwYzFcdTkwYzNcdTkx''@;'; put 'put ''NGJcdTkxNGFcdTkxY2RcdTk1ODJcdTk2NTBcdTk2NGJcdTk2NGNcdTk2NGRcdTk3NjJcdTk3NjlcdTk3Y2JcdTk3ZWRcdTk3ZjNcdTk4MDFcdTk4YThcdTk4ZGJcdTk4ZGZcdTk5OTZcdTk5OTlcdTRlNThcdTRlYjNcdTUwMGNcdTUwMGRcdTUwMjNcdTRmZWZcdTUwMjZcdTUwMjVcdTRmZjhc''@;'; put 'put ''dTUwMjlcdTUwMTZcdTUwMDZcdTUwM2NcdTUwMWZcdTUwMWFcdTUwMTJcdTUwMTFcdTRmZmFcdTUwMDBcdTUwMTRcdTUwMjhcdTRmZjFcdTUwMjFcdTUwMGJcdTUwMTlcdTUwMThcdTRmZjNcdTRmZWVcdTUwMmRcdTUwMmFcdTRmZmVcdTUwMmJcdTUwMDlcdTUxN2NcdTUxYTRcdTUxYTVcdTUx''@;'; put 'put ''YTJcdTUxY2RcdTUxY2NcdTUxYzZcdTUxY2JcdTUyNTZcdTUyNWNcdTUyNTRcdTUyNWJcdTUyNWRcdTUzMmFcdTUzN2ZcdTUzOWZcdTUzOWRcdTUzZGZcdTU0ZThcdTU1MTBcdTU1MDFcdTU1MzdcdTU0ZmNcdTU0ZTVcdTU0ZjJcdTU1MDZcdTU0ZmFcdTU1MTRcdTU0ZTlcdTU0ZWRcdTU0ZTFc''@;'; put 'put ''dTU1MDlcdTU0ZWVcdTU0ZWEiXSxbImFlNDAiLCJcdTU0ZTZcdTU1MjdcdTU1MDdcdTU0ZmRcdTU1MGZcdTU3MDNcdTU3MDRcdTU3YzJcdTU3ZDRcdTU3Y2JcdTU3YzNcdTU4MDlcdTU5MGZcdTU5NTdcdTU5NThcdTU5NWFcdTVhMTFcdTVhMThcdTVhMWNcdTVhMWZcdTVhMWJcdTVhMTNcdTU5''@;'; put 'put ''ZWNcdTVhMjBcdTVhMjNcdTVhMjlcdTVhMjVcdTVhMGNcdTVhMDlcdTViNmJcdTVjNThcdTViYjBcdTViYjNcdTViYjZcdTViYjRcdTViYWVcdTViYjVcdTViYjlcdTViYjhcdTVjMDRcdTVjNTFcdTVjNTVcdTVjNTBcdTVjZWRcdTVjZmRcdTVjZmJcdTVjZWFcdTVjZThcdTVjZjBcdTVjZjZc''@;'; put 'put ''dTVkMDFcdTVjZjRcdTVkZWVcdTVlMmRcdTVlMmJcdTVlYWJcdTVlYWRcdTVlYTdcdTVmMzFcdTVmOTJcdTVmOTFcdTVmOTBcdTYwNTkiXSxbImFlYTEiLCJcdTYwNjNcdTYwNjVcdTYwNTBcdTYwNTVcdTYwNmRcdTYwNjlcdTYwNmZcdTYwODRcdTYwOWZcdTYwOWFcdTYwOGRcdTYwOTRcdTYw''@;'; put 'put ''OGNcdTYwODVcdTYwOTZcdTYyNDdcdTYyZjNcdTYzMDhcdTYyZmZcdTYzNGVcdTYzM2VcdTYzMmZcdTYzNTVcdTYzNDJcdTYzNDZcdTYzNGZcdTYzNDlcdTYzM2FcdTYzNTBcdTYzM2RcdTYzMmFcdTYzMmJcdTYzMjhcdTYzNGRcdTYzNGNcdTY1NDhcdTY1NDlcdTY1OTlcdTY1YzFcdTY1YzVc''@;'; put 'put ''dTY2NDJcdTY2NDlcdTY2NGZcdTY2NDNcdTY2NTJcdTY2NGNcdTY2NDVcdTY2NDFcdTY2ZjhcdTY3MTRcdTY3MTVcdTY3MTdcdTY4MjFcdTY4MzhcdTY4NDhcdTY4NDZcdTY4NTNcdTY4MzlcdTY4NDJcdTY4NTRcdTY4MjlcdTY4YjNcdTY4MTdcdTY4NGNcdTY4NTFcdTY4M2RcdTY3ZjRcdTY4''@;'; put 'put ''NTBcdTY4NDBcdTY4M2NcdTY4NDNcdTY4MmFcdTY4NDVcdTY4MTNcdTY4MThcdTY4NDFcdTZiOGFcdTZiODlcdTZiYjdcdTZjMjNcdTZjMjdcdTZjMjhcdTZjMjZcdTZjMjRcdTZjZjBcdTZkNmFcdTZkOTVcdTZkODhcdTZkODdcdTZkNjZcdTZkNzhcdTZkNzdcdTZkNTlcdTZkOTMiXSxbImFm''@;'; put 'put ''NDAiLCJcdTZkNmNcdTZkODlcdTZkNmVcdTZkNWFcdTZkNzRcdTZkNjlcdTZkOGNcdTZkOGFcdTZkNzlcdTZkODVcdTZkNjVcdTZkOTRcdTcwY2FcdTcwZDhcdTcwZTRcdTcwZDlcdTcwYzhcdTcwY2ZcdTcyMzlcdTcyNzlcdTcyZmNcdTcyZjlcdTcyZmRcdTcyZjhcdTcyZjdcdTczODZcdTcz''@;'; put 'put ''ZWRcdTc0MDlcdTczZWVcdTczZTBcdTczZWFcdTczZGVcdTc1NTRcdTc1NWRcdTc1NWNcdTc1NWFcdTc1NTlcdTc1YmVcdTc1YzVcdTc1YzdcdTc1YjJcdTc1YjNcdTc1YmRcdTc1YmNcdTc1YjlcdTc1YzJcdTc1YjhcdTc2OGJcdTc2YjBcdTc2Y2FcdTc2Y2RcdTc2Y2VcdTc3MjlcdTc3MWZc''@;'; put 'put ''dTc3MjBcdTc3MjhcdTc3ZTlcdTc4MzBcdTc4MjdcdTc4MzhcdTc4MWRcdTc4MzRcdTc4MzciXSxbImFmYTEiLCJcdTc4MjVcdTc4MmRcdTc4MjBcdTc4MWZcdTc4MzJcdTc5NTVcdTc5NTBcdTc5NjBcdTc5NWZcdTc5NTZcdTc5NWVcdTc5NWRcdTc5NTdcdTc5NWFcdTc5ZTRcdTc5ZTNcdTc5''@;'; put 'put ''ZTdcdTc5ZGZcdTc5ZTZcdTc5ZTlcdTc5ZDhcdTdhODRcdTdhODhcdTdhZDlcdTdiMDZcdTdiMTFcdTdjODlcdTdkMjFcdTdkMTdcdTdkMGJcdTdkMGFcdTdkMjBcdTdkMjJcdTdkMTRcdTdkMTBcdTdkMTVcdTdkMWFcdTdkMWNcdTdkMGRcdTdkMTlcdTdkMWJcdTdmM2FcdTdmNWZcdTdmOTRc''@;'; put 'put ''dTdmYzVcdTdmYzFcdTgwMDZcdTgwMThcdTgwMTVcdTgwMTlcdTgwMTdcdTgwM2RcdTgwM2ZcdTgwZjFcdTgxMDJcdTgwZjBcdTgxMDVcdTgwZWRcdTgwZjRcdTgxMDZcdTgwZjhcdTgwZjNcdTgxMDhcdTgwZmRcdTgxMGFcdTgwZmNcdTgwZWZcdTgxZWRcdTgxZWNcdTgyMDBcdTgyMTBcdTgy''@;'; put 'put ''MmFcdTgyMmJcdTgyMjhcdTgyMmNcdTgyYmJcdTgzMmJcdTgzNTJcdTgzNTRcdTgzNGFcdTgzMzhcdTgzNTBcdTgzNDlcdTgzMzVcdTgzMzRcdTgzNGZcdTgzMzJcdTgzMzlcdTgzMzZcdTgzMTdcdTgzNDBcdTgzMzFcdTgzMjhcdTgzNDMiXSxbImIwNDAiLCJcdTg2NTRcdTg2OGFcdTg2YWFc''@;'; put 'put ''dTg2OTNcdTg2YTRcdTg2YTlcdTg2OGNcdTg2YTNcdTg2OWNcdTg4NzBcdTg4NzdcdTg4ODFcdTg4ODJcdTg4N2RcdTg4NzlcdThhMThcdThhMTBcdThhMGVcdThhMGNcdThhMTVcdThhMGFcdThhMTdcdThhMTNcdThhMTZcdThhMGZcdThhMTFcdThjNDhcdThjN2FcdThjNzlcdThjYTFcdThj''@;'; put 'put ''YTJcdThkNzdcdThlYWNcdThlZDJcdThlZDRcdThlY2ZcdThmYjFcdTkwMDFcdTkwMDZcdThmZjdcdTkwMDBcdThmZmFcdThmZjRcdTkwMDNcdThmZmRcdTkwMDVcdThmZjhcdTkwOTVcdTkwZTFcdTkwZGRcdTkwZTJcdTkxNTJcdTkxNGRcdTkxNGNcdTkxZDhcdTkxZGRcdTkxZDdcdTkxZGNc''@;'; put 'put ''dTkxZDlcdTk1ODNcdTk2NjJcdTk2NjNcdTk2NjEiXSxbImIwYTEiLCJcdTk2NWJcdTk2NWRcdTk2NjRcdTk2NThcdTk2NWVcdTk2YmJcdTk4ZTJcdTk5YWNcdTlhYThcdTlhZDhcdTliMjVcdTliMzJcdTliM2NcdTRlN2VcdTUwN2FcdTUwN2RcdTUwNWNcdTUwNDdcdTUwNDNcdTUwNGNcdTUw''@;'; put 'put ''NWFcdTUwNDlcdTUwNjVcdTUwNzZcdTUwNGVcdTUwNTVcdTUwNzVcdTUwNzRcdTUwNzdcdTUwNGZcdTUwMGZcdTUwNmZcdTUwNmRcdTUxNWNcdTUxOTVcdTUxZjBcdTUyNmFcdTUyNmZcdTUyZDJcdTUyZDlcdTUyZDhcdTUyZDVcdTUzMTBcdTUzMGZcdTUzMTlcdTUzM2ZcdTUzNDBcdTUzM2Vc''@;'; put 'put ''dTUzYzNcdTY2ZmNcdTU1NDZcdTU1NmFcdTU1NjZcdTU1NDRcdTU1NWVcdTU1NjFcdTU1NDNcdTU1NGFcdTU1MzFcdTU1NTZcdTU1NGZcdTU1NTVcdTU1MmZcdTU1NjRcdTU1MzhcdTU1MmVcdTU1NWNcdTU1MmNcdTU1NjNcdTU1MzNcdTU1NDFcdTU1NTdcdTU3MDhcdTU3MGJcdTU3MDlcdTU3''@;'; put 'put ''ZGZcdTU4MDVcdTU4MGFcdTU4MDZcdTU3ZTBcdTU3ZTRcdTU3ZmFcdTU4MDJcdTU4MzVcdTU3ZjdcdTU3ZjlcdTU5MjBcdTU5NjJcdTVhMzZcdTVhNDFcdTVhNDlcdTVhNjZcdTVhNmFcdTVhNDAiXSxbImIxNDAiLCJcdTVhM2NcdTVhNjJcdTVhNWFcdTVhNDZcdTVhNGFcdTViNzBcdTViYzdc''@;'; put 'put ''dTViYzVcdTViYzRcdTViYzJcdTViYmZcdTViYzZcdTVjMDlcdTVjMDhcdTVjMDdcdTVjNjBcdTVjNWNcdTVjNWRcdTVkMDdcdTVkMDZcdTVkMGVcdTVkMWJcdTVkMTZcdTVkMjJcdTVkMTFcdTVkMjlcdTVkMTRcdTVkMTlcdTVkMjRcdTVkMjdcdTVkMTdcdTVkZTJcdTVlMzhcdTVlMzZcdTVl''@;'; put 'put ''MzNcdTVlMzdcdTVlYjdcdTVlYjhcdTVlYjZcdTVlYjVcdTVlYmVcdTVmMzVcdTVmMzdcdTVmNTdcdTVmNmNcdTVmNjlcdTVmNmJcdTVmOTdcdTVmOTlcdTVmOWVcdTVmOThcdTVmYTFcdTVmYTBcdTVmOWNcdTYwN2ZcdTYwYTNcdTYwODlcdTYwYTBcdTYwYThcdTYwY2JcdTYwYjRcdTYwZTZc''@;'; put 'put ''dTYwYmQiXSxbImIxYTEiLCJcdTYwYzVcdTYwYmJcdTYwYjVcdTYwZGNcdTYwYmNcdTYwZDhcdTYwZDVcdTYwYzZcdTYwZGZcdTYwYjhcdTYwZGFcdTYwYzdcdTYyMWFcdTYyMWJcdTYyNDhcdTYzYTBcdTYzYTdcdTYzNzJcdTYzOTZcdTYzYTJcdTYzYTVcdTYzNzdcdTYzNjdcdTYzOThcdTYz''@;'; put 'put ''YWFcdTYzNzFcdTYzYTlcdTYzODlcdTYzODNcdTYzOWJcdTYzNmJcdTYzYThcdTYzODRcdTYzODhcdTYzOTlcdTYzYTFcdTYzYWNcdTYzOTJcdTYzOGZcdTYzODBcdTYzN2JcdTYzNjlcdTYzNjhcdTYzN2FcdTY1NWRcdTY1NTZcdTY1NTFcdTY1NTlcdTY1NTdcdTU1NWZcdTY1NGZcdTY1NThc''@;'; put 'put ''dTY1NTVcdTY1NTRcdTY1OWNcdTY1OWJcdTY1YWNcdTY1Y2ZcdTY1Y2JcdTY1Y2NcdTY1Y2VcdTY2NWRcdTY2NWFcdTY2NjRcdTY2NjhcdTY2NjZcdTY2NWVcdTY2ZjlcdTUyZDdcdTY3MWJcdTY4ODFcdTY4YWZcdTY4YTJcdTY4OTNcdTY4YjVcdTY4N2ZcdTY4NzZcdTY4YjFcdTY4YTdcdTY4''@;'; put 'put ''OTdcdTY4YjBcdTY4ODNcdTY4YzRcdTY4YWRcdTY4ODZcdTY4ODVcdTY4OTRcdTY4OWRcdTY4YThcdTY4OWZcdTY4YTFcdTY4ODJcdTZiMzJcdTZiYmEiXSxbImIyNDAiLCJcdTZiZWJcdTZiZWNcdTZjMmJcdTZkOGVcdTZkYmNcdTZkZjNcdTZkZDlcdTZkYjJcdTZkZTFcdTZkY2NcdTZkZTRc''@;'; put 'put ''dTZkZmJcdTZkZmFcdTZlMDVcdTZkYzdcdTZkY2JcdTZkYWZcdTZkZDFcdTZkYWVcdTZkZGVcdTZkZjlcdTZkYjhcdTZkZjdcdTZkZjVcdTZkYzVcdTZkZDJcdTZlMWFcdTZkYjVcdTZkZGFcdTZkZWJcdTZkZDhcdTZkZWFcdTZkZjFcdTZkZWVcdTZkZThcdTZkYzZcdTZkYzRcdTZkYWFcdTZk''@;'; put 'put ''ZWNcdTZkYmZcdTZkZTZcdTcwZjlcdTcxMDlcdTcxMGFcdTcwZmRcdTcwZWZcdTcyM2RcdTcyN2RcdTcyODFcdTczMWNcdTczMWJcdTczMTZcdTczMTNcdTczMTlcdTczODdcdTc0MDVcdTc0MGFcdTc0MDNcdTc0MDZcdTczZmVcdTc0MGRcdTc0ZTBcdTc0ZjYiXSxbImIyYTEiLCJcdTc0Zjdc''@;'; put 'put ''dTc1MWNcdTc1MjJcdTc1NjVcdTc1NjZcdTc1NjJcdTc1NzBcdTc1OGZcdTc1ZDRcdTc1ZDVcdTc1YjVcdTc1Y2FcdTc1Y2RcdTc2OGVcdTc2ZDRcdTc2ZDJcdTc2ZGJcdTc3MzdcdTc3M2VcdTc3M2NcdTc3MzZcdTc3MzhcdTc3M2FcdTc4NmJcdTc4NDNcdTc4NGVcdTc5NjVcdTc5NjhcdTc5''@;'; put 'put ''NmRcdTc5ZmJcdTdhOTJcdTdhOTVcdTdiMjBcdTdiMjhcdTdiMWJcdTdiMmNcdTdiMjZcdTdiMTlcdTdiMWVcdTdiMmVcdTdjOTJcdTdjOTdcdTdjOTVcdTdkNDZcdTdkNDNcdTdkNzFcdTdkMmVcdTdkMzlcdTdkM2NcdTdkNDBcdTdkMzBcdTdkMzNcdTdkNDRcdTdkMmZcdTdkNDJcdTdkMzJc''@;'; put 'put ''dTdkMzFcdTdmM2RcdTdmOWVcdTdmOWFcdTdmY2NcdTdmY2VcdTdmZDJcdTgwMWNcdTgwNGFcdTgwNDZcdTgxMmZcdTgxMTZcdTgxMjNcdTgxMmJcdTgxMjlcdTgxMzBcdTgxMjRcdTgyMDJcdTgyMzVcdTgyMzdcdTgyMzZcdTgyMzlcdTgzOGVcdTgzOWVcdTgzOThcdTgzNzhcdTgzYTJcdTgz''@;'; put 'put ''OTZcdTgzYmRcdTgzYWJcdTgzOTJcdTgzOGFcdTgzOTNcdTgzODlcdTgzYTBcdTgzNzdcdTgzN2JcdTgzN2MiXSxbImIzNDAiLCJcdTgzODZcdTgzYTdcdTg2NTVcdTVmNmFcdTg2YzdcdTg2YzBcdTg2YjZcdTg2YzRcdTg2YjVcdTg2YzZcdTg2Y2JcdTg2YjFcdTg2YWZcdTg2YzlcdTg4NTNc''@;'; put 'put ''dTg4OWVcdTg4ODhcdTg4YWJcdTg4OTJcdTg4OTZcdTg4OGRcdTg4OGJcdTg5OTNcdTg5OGZcdThhMmFcdThhMWRcdThhMjNcdThhMjVcdThhMzFcdThhMmRcdThhMWZcdThhMWJcdThhMjJcdThjNDlcdThjNWFcdThjYTlcdThjYWNcdThjYWJcdThjYThcdThjYWFcdThjYTdcdThkNjdcdThk''@;'; put 'put ''NjZcdThkYmVcdThkYmFcdThlZGJcdThlZGZcdTkwMTlcdTkwMGRcdTkwMWFcdTkwMTdcdTkwMjNcdTkwMWZcdTkwMWRcdTkwMTBcdTkwMTVcdTkwMWVcdTkwMjBcdTkwMGZcdTkwMjJcdTkwMTZcdTkwMWJcdTkwMTQiXSxbImIzYTEiLCJcdTkwZThcdTkwZWRcdTkwZmRcdTkxNTdcdTkxY2Vc''@;'; put 'put ''dTkxZjVcdTkxZTZcdTkxZTNcdTkxZTdcdTkxZWRcdTkxZTlcdTk1ODlcdTk2NmFcdTk2NzVcdTk2NzNcdTk2NzhcdTk2NzBcdTk2NzRcdTk2NzZcdTk2NzdcdTk2NmNcdTk2YzBcdTk2ZWFcdTk2ZTlcdTdhZTBcdTdhZGZcdTk4MDJcdTk4MDNcdTliNWFcdTljZTVcdTllNzVcdTllN2ZcdTll''@;'; put 'put ''YTVcdTllYmJcdTUwYTJcdTUwOGRcdTUwODVcdTUwOTlcdTUwOTFcdTUwODBcdTUwOTZcdTUwOThcdTUwOWFcdTY3MDBcdTUxZjFcdTUyNzJcdTUyNzRcdTUyNzVcdTUyNjlcdTUyZGVcdTUyZGRcdTUyZGJcdTUzNWFcdTUzYTVcdTU1N2JcdTU1ODBcdTU1YTdcdTU1N2NcdTU1OGFcdTU1OWRc''@;'; put 'put ''dTU1OThcdTU1ODJcdTU1OWNcdTU1YWFcdTU1OTRcdTU1ODdcdTU1OGJcdTU1ODNcdTU1YjNcdTU1YWVcdTU1OWZcdTU1M2VcdTU1YjJcdTU1OWFcdTU1YmJcdTU1YWNcdTU1YjFcdTU1N2VcdTU1ODlcdTU1YWJcdTU1OTlcdTU3MGRcdTU4MmZcdTU4MmFcdTU4MzRcdTU4MjRcdTU4MzBcdTU4''@;'; put 'put ''MzFcdTU4MjFcdTU4MWRcdTU4MjBcdTU4ZjlcdTU4ZmFcdTU5NjAiXSxbImI0NDAiLCJcdTVhNzdcdTVhOWFcdTVhN2ZcdTVhOTJcdTVhOWJcdTVhYTdcdTViNzNcdTViNzFcdTViZDJcdTViY2NcdTViZDNcdTViZDBcdTVjMGFcdTVjMGJcdTVjMzFcdTVkNGNcdTVkNTBcdTVkMzRcdTVkNDdc''@;'; put 'put ''dTVkZmRcdTVlNDVcdTVlM2RcdTVlNDBcdTVlNDNcdTVlN2VcdTVlY2FcdTVlYzFcdTVlYzJcdTVlYzRcdTVmM2NcdTVmNmRcdTVmYTlcdTVmYWFcdTVmYThcdTYwZDFcdTYwZTFcdTYwYjJcdTYwYjZcdTYwZTBcdTYxMWNcdTYxMjNcdTYwZmFcdTYxMTVcdTYwZjBcdTYwZmJcdTYwZjRcdTYx''@;'; put 'put ''NjhcdTYwZjFcdTYxMGVcdTYwZjZcdTYxMDlcdTYxMDBcdTYxMTJcdTYyMWZcdTYyNDlcdTYzYTNcdTYzOGNcdTYzY2ZcdTYzYzBcdTYzZTlcdTYzYzlcdTYzYzZcdTYzY2QiXSxbImI0YTEiLCJcdTYzZDJcdTYzZTNcdTYzZDBcdTYzZTFcdTYzZDZcdTYzZWRcdTYzZWVcdTYzNzZcdTYzZjRc''@;'; put 'put ''dTYzZWFcdTYzZGJcdTY0NTJcdTYzZGFcdTYzZjlcdTY1NWVcdTY1NjZcdTY1NjJcdTY1NjNcdTY1OTFcdTY1OTBcdTY1YWZcdTY2NmVcdTY2NzBcdTY2NzRcdTY2NzZcdTY2NmZcdTY2OTFcdTY2N2FcdTY2N2VcdTY2NzdcdTY2ZmVcdTY2ZmZcdTY3MWZcdTY3MWRcdTY4ZmFcdTY4ZDVcdTY4''@;'; put 'put ''ZTBcdTY4ZDhcdTY4ZDdcdTY5MDVcdTY4ZGZcdTY4ZjVcdTY4ZWVcdTY4ZTdcdTY4ZjlcdTY4ZDJcdTY4ZjJcdTY4ZTNcdTY4Y2JcdTY4Y2RcdTY5MGRcdTY5MTJcdTY5MGVcdTY4YzlcdTY4ZGFcdTY5NmVcdTY4ZmJcdTZiM2VcdTZiM2FcdTZiM2RcdTZiOThcdTZiOTZcdTZiYmNcdTZiZWZc''@;'; put 'put ''dTZjMmVcdTZjMmZcdTZjMmNcdTZlMmZcdTZlMzhcdTZlNTRcdTZlMjFcdTZlMzJcdTZlNjdcdTZlNGFcdTZlMjBcdTZlMjVcdTZlMjNcdTZlMWJcdTZlNWJcdTZlNThcdTZlMjRcdTZlNTZcdTZlNmVcdTZlMmRcdTZlMjZcdTZlNmZcdTZlMzRcdTZlNGRcdTZlM2FcdTZlMmNcdTZlNDNcdTZl''@;'; put 'put ''MWRcdTZlM2VcdTZlY2IiXSxbImI1NDAiLCJcdTZlODlcdTZlMTlcdTZlNGVcdTZlNjNcdTZlNDRcdTZlNzJcdTZlNjlcdTZlNWZcdTcxMTlcdTcxMWFcdTcxMjZcdTcxMzBcdTcxMjFcdTcxMzZcdTcxNmVcdTcxMWNcdTcyNGNcdTcyODRcdTcyODBcdTczMzZcdTczMjVcdTczMzRcdTczMjlc''@;'; put 'put ''dTc0M2FcdTc0MmFcdTc0MzNcdTc0MjJcdTc0MjVcdTc0MzVcdTc0MzZcdTc0MzRcdTc0MmZcdTc0MWJcdTc0MjZcdTc0MjhcdTc1MjVcdTc1MjZcdTc1NmJcdTc1NmFcdTc1ZTJcdTc1ZGJcdTc1ZTNcdTc1ZDlcdTc1ZDhcdTc1ZGVcdTc1ZTBcdTc2N2JcdTc2N2NcdTc2OTZcdTc2OTNcdTc2''@;'; put 'put ''YjRcdTc2ZGNcdTc3NGZcdTc3ZWRcdTc4NWRcdTc4NmNcdTc4NmZcdTdhMGRcdTdhMDhcdTdhMGJcdTdhMDVcdTdhMDBcdTdhOTgiXSxbImI1YTEiLCJcdTdhOTdcdTdhOTZcdTdhZTVcdTdhZTNcdTdiNDlcdTdiNTZcdTdiNDZcdTdiNTBcdTdiNTJcdTdiNTRcdTdiNGRcdTdiNGJcdTdiNGZc''@;'; put 'put ''dTdiNTFcdTdjOWZcdTdjYTVcdTdkNWVcdTdkNTBcdTdkNjhcdTdkNTVcdTdkMmJcdTdkNmVcdTdkNzJcdTdkNjFcdTdkNjZcdTdkNjJcdTdkNzBcdTdkNzNcdTU1ODRcdTdmZDRcdTdmZDVcdTgwMGJcdTgwNTJcdTgwODVcdTgxNTVcdTgxNTRcdTgxNGJcdTgxNTFcdTgxNGVcdTgxMzlcdTgx''@;'; put 'put ''NDZcdTgxM2VcdTgxNGNcdTgxNTNcdTgxNzRcdTgyMTJcdTgyMWNcdTgzZTlcdTg0MDNcdTgzZjhcdTg0MGRcdTgzZTBcdTgzYzVcdTg0MGJcdTgzYzFcdTgzZWZcdTgzZjFcdTgzZjRcdTg0NTdcdTg0MGFcdTgzZjBcdTg0MGNcdTgzY2NcdTgzZmRcdTgzZjJcdTgzY2FcdTg0MzhcdTg0MGVc''@;'; put 'put ''dTg0MDRcdTgzZGNcdTg0MDdcdTgzZDRcdTgzZGZcdTg2NWJcdTg2ZGZcdTg2ZDlcdTg2ZWRcdTg2ZDRcdTg2ZGJcdTg2ZTRcdTg2ZDBcdTg2ZGVcdTg4NTdcdTg4YzFcdTg4YzJcdTg4YjFcdTg5ODNcdTg5OTZcdThhM2JcdThhNjBcdThhNTVcdThhNWVcdThhM2NcdThhNDEiXSxbImI2NDAi''@;'; put 'put ''LCJcdThhNTRcdThhNWJcdThhNTBcdThhNDZcdThhMzRcdThhM2FcdThhMzZcdThhNTZcdThjNjFcdThjODJcdThjYWZcdThjYmNcdThjYjNcdThjYmRcdThjYzFcdThjYmJcdThjYzBcdThjYjRcdThjYjdcdThjYjZcdThjYmZcdThjYjhcdThkOGFcdThkODVcdThkODFcdThkY2VcdThkZGRc''@;'; put 'put ''dThkY2JcdThkZGFcdThkZDFcdThkY2NcdThkZGJcdThkYzZcdThlZmJcdThlZjhcdThlZmNcdThmOWNcdTkwMmVcdTkwMzVcdTkwMzFcdTkwMzhcdTkwMzJcdTkwMzZcdTkxMDJcdTkwZjVcdTkxMDlcdTkwZmVcdTkxNjNcdTkxNjVcdTkxY2ZcdTkyMTRcdTkyMTVcdTkyMjNcdTkyMDlcdTky''@;'; put 'put ''MWVcdTkyMGRcdTkyMTBcdTkyMDdcdTkyMTFcdTk1OTRcdTk1OGZcdTk1OGJcdTk1OTEiXSxbImI2YTEiLCJcdTk1OTNcdTk1OTJcdTk1OGVcdTk2OGFcdTk2OGVcdTk2OGJcdTk2N2RcdTk2ODVcdTk2ODZcdTk2OGRcdTk2NzJcdTk2ODRcdTk2YzFcdTk2YzVcdTk2YzRcdTk2YzZcdTk2Yzdc''@;'; put 'put ''dTk2ZWZcdTk2ZjJcdTk3Y2NcdTk4MDVcdTk4MDZcdTk4MDhcdTk4ZTdcdTk4ZWFcdTk4ZWZcdTk4ZTlcdTk4ZjJcdTk4ZWRcdTk5YWVcdTk5YWRcdTllYzNcdTllY2RcdTllZDFcdTRlODJcdTUwYWRcdTUwYjVcdTUwYjJcdTUwYjNcdTUwYzVcdTUwYmVcdTUwYWNcdTUwYjdcdTUwYmJcdTUw''@;'; put 'put ''YWZcdTUwYzdcdTUyN2ZcdTUyNzdcdTUyN2RcdTUyZGZcdTUyZTZcdTUyZTRcdTUyZTJcdTUyZTNcdTUzMmZcdTU1ZGZcdTU1ZThcdTU1ZDNcdTU1ZTZcdTU1Y2VcdTU1ZGNcdTU1YzdcdTU1ZDFcdTU1ZTNcdTU1ZTRcdTU1ZWZcdTU1ZGFcdTU1ZTFcdTU1YzVcdTU1YzZcdTU1ZTVcdTU1Yzlc''@;'; put 'put ''dTU3MTJcdTU3MTNcdTU4NWVcdTU4NTFcdTU4NThcdTU4NTdcdTU4NWFcdTU4NTRcdTU4NmJcdTU4NGNcdTU4NmRcdTU4NGFcdTU4NjJcdTU4NTJcdTU4NGJcdTU5NjdcdTVhYzFcdTVhYzlcdTVhY2NcdTVhYmVcdTVhYmRcdTVhYmMiXSxbImI3NDAiLCJcdTVhYjNcdTVhYzJcdTVhYjJcdTVk''@;'; put 'put ''NjlcdTVkNmZcdTVlNGNcdTVlNzlcdTVlYzlcdTVlYzhcdTVmMTJcdTVmNTlcdTVmYWNcdTVmYWVcdTYxMWFcdTYxMGZcdTYxNDhcdTYxMWZcdTYwZjNcdTYxMWJcdTYwZjlcdTYxMDFcdTYxMDhcdTYxNGVcdTYxNGNcdTYxNDRcdTYxNGRcdTYxM2VcdTYxMzRcdTYxMjdcdTYxMGRcdTYxMDZc''@;'; put 'put ''dTYxMzdcdTYyMjFcdTYyMjJcdTY0MTNcdTY0M2VcdTY0MWVcdTY0MmFcdTY0MmRcdTY0M2RcdTY0MmNcdTY0MGZcdTY0MWNcdTY0MTRcdTY0MGRcdTY0MzZcdTY0MTZcdTY0MTdcdTY0MDZcdTY1NmNcdTY1OWZcdTY1YjBcdTY2OTdcdTY2ODlcdTY2ODdcdTY2ODhcdTY2OTZcdTY2ODRcdTY2''@;'; put 'put ''OThcdTY2OGRcdTY3MDNcdTY5OTRcdTY5NmQiXSxbImI3YTEiLCJcdTY5NWFcdTY5NzdcdTY5NjBcdTY5NTRcdTY5NzVcdTY5MzBcdTY5ODJcdTY5NGFcdTY5NjhcdTY5NmJcdTY5NWVcdTY5NTNcdTY5NzlcdTY5ODZcdTY5NWRcdTY5NjNcdTY5NWJcdTZiNDdcdTZiNzJcdTZiYzBcdTZiYmZc''@;'; put 'put ''dTZiZDNcdTZiZmRcdTZlYTJcdTZlYWZcdTZlZDNcdTZlYjZcdTZlYzJcdTZlOTBcdTZlOWRcdTZlYzdcdTZlYzVcdTZlYTVcdTZlOThcdTZlYmNcdTZlYmFcdTZlYWJcdTZlZDFcdTZlOTZcdTZlOWNcdTZlYzRcdTZlZDRcdTZlYWFcdTZlYTdcdTZlYjRcdTcxNGVcdTcxNTlcdTcxNjlcdTcx''@;'; put 'put ''NjRcdTcxNDlcdTcxNjdcdTcxNWNcdTcxNmNcdTcxNjZcdTcxNGNcdTcxNjVcdTcxNWVcdTcxNDZcdTcxNjhcdTcxNTZcdTcyM2FcdTcyNTJcdTczMzdcdTczNDVcdTczM2ZcdTczM2VcdTc0NmZcdTc0NWFcdTc0NTVcdTc0NWZcdTc0NWVcdTc0NDFcdTc0M2ZcdTc0NTlcdTc0NWJcdTc0NWNc''@;'; put 'put ''dTc1NzZcdTc1NzhcdTc2MDBcdTc1ZjBcdTc2MDFcdTc1ZjJcdTc1ZjFcdTc1ZmFcdTc1ZmZcdTc1ZjRcdTc1ZjNcdTc2ZGVcdTc2ZGZcdTc3NWJcdTc3NmJcdTc3NjZcdTc3NWVcdTc3NjMiXSxbImI4NDAiLCJcdTc3NzlcdTc3NmFcdTc3NmNcdTc3NWNcdTc3NjVcdTc3NjhcdTc3NjJcdTc3''@;'; put 'put ''ZWVcdTc4OGVcdTc4YjBcdTc4OTdcdTc4OThcdTc4OGNcdTc4ODlcdTc4N2NcdTc4OTFcdTc4OTNcdTc4N2ZcdTc5N2FcdTc5N2ZcdTc5ODFcdTg0MmNcdTc5YmRcdTdhMWNcdTdhMWFcdTdhMjBcdTdhMTRcdTdhMWZcdTdhMWVcdTdhOWZcdTdhYTBcdTdiNzdcdTdiYzBcdTdiNjBcdTdiNmVc''@;'; put 'put ''dTdiNjdcdTdjYjFcdTdjYjNcdTdjYjVcdTdkOTNcdTdkNzlcdTdkOTFcdTdkODFcdTdkOGZcdTdkNWJcdTdmNmVcdTdmNjlcdTdmNmFcdTdmNzJcdTdmYTlcdTdmYThcdTdmYTRcdTgwNTZcdTgwNThcdTgwODZcdTgwODRcdTgxNzFcdTgxNzBcdTgxNzhcdTgxNjVcdTgxNmVcdTgxNzNcdTgx''@;'; put 'put ''NmIiXSxbImI4YTEiLCJcdTgxNzlcdTgxN2FcdTgxNjZcdTgyMDVcdTgyNDdcdTg0ODJcdTg0NzdcdTg0M2RcdTg0MzFcdTg0NzVcdTg0NjZcdTg0NmJcdTg0NDlcdTg0NmNcdTg0NWJcdTg0M2NcdTg0MzVcdTg0NjFcdTg0NjNcdTg0NjlcdTg0NmRcdTg0NDZcdTg2NWVcdTg2NWNcdTg2NWZc''@;'; put 'put ''dTg2ZjlcdTg3MTNcdTg3MDhcdTg3MDdcdTg3MDBcdTg2ZmVcdTg2ZmJcdTg3MDJcdTg3MDNcdTg3MDZcdTg3MGFcdTg4NTlcdTg4ZGZcdTg4ZDRcdTg4ZDlcdTg4ZGNcdTg4ZDhcdTg4ZGRcdTg4ZTFcdTg4Y2FcdTg4ZDVcdTg4ZDJcdTg5OWNcdTg5ZTNcdThhNmJcdThhNzJcdThhNzNcdThh''@;'; put 'put ''NjZcdThhNjlcdThhNzBcdThhODdcdThhN2NcdThhNjNcdThhYTBcdThhNzFcdThhODVcdThhNmRcdThhNjJcdThhNmVcdThhNmNcdThhNzlcdThhN2JcdThhM2VcdThhNjhcdThjNjJcdThjOGFcdThjODlcdThjY2FcdThjYzdcdThjYzhcdThjYzRcdThjYjJcdThjYzNcdThjYzJcdThjYzVc''@;'; put 'put ''dThkZTFcdThkZGZcdThkZThcdThkZWZcdThkZjNcdThkZmFcdThkZWFcdThkZTRcdThkZTZcdThlYjJcdThmMDNcdThmMDlcdThlZmVcdThmMGEiXSxbImI5NDAiLCJcdThmOWZcdThmYjJcdTkwNGJcdTkwNGFcdTkwNTNcdTkwNDJcdTkwNTRcdTkwM2NcdTkwNTVcdTkwNTBcdTkwNDdcdTkw''@;'; put 'put ''NGZcdTkwNGVcdTkwNGRcdTkwNTFcdTkwM2VcdTkwNDFcdTkxMTJcdTkxMTdcdTkxNmNcdTkxNmFcdTkxNjlcdTkxYzlcdTkyMzdcdTkyNTdcdTkyMzhcdTkyM2RcdTkyNDBcdTkyM2VcdTkyNWJcdTkyNGJcdTkyNjRcdTkyNTFcdTkyMzRcdTkyNDlcdTkyNGRcdTkyNDVcdTkyMzlcdTkyM2Zc''@;'; put 'put ''dTkyNWFcdTk1OThcdTk2OThcdTk2OTRcdTk2OTVcdTk2Y2RcdTk2Y2JcdTk2YzlcdTk2Y2FcdTk2ZjdcdTk2ZmJcdTk2ZjlcdTk2ZjZcdTk3NTZcdTk3NzRcdTk3NzZcdTk4MTBcdTk4MTFcdTk4MTNcdTk4MGFcdTk4MTJcdTk4MGNcdTk4ZmNcdTk4ZjQiXSxbImI5YTEiLCJcdTk4ZmRcdTk4''@;'; put 'put ''ZmVcdTk5YjNcdTk5YjFcdTk5YjRcdTlhZTFcdTljZTlcdTllODJcdTlmMGVcdTlmMTNcdTlmMjBcdTUwZTdcdTUwZWVcdTUwZTVcdTUwZDZcdTUwZWRcdTUwZGFcdTUwZDVcdTUwY2ZcdTUwZDFcdTUwZjFcdTUwY2VcdTUwZTlcdTUxNjJcdTUxZjNcdTUyODNcdTUyODJcdTUzMzFcdTUzYWRc''@;'; put 'put ''dTU1ZmVcdTU2MDBcdTU2MWJcdTU2MTdcdTU1ZmRcdTU2MTRcdTU2MDZcdTU2MDlcdTU2MGRcdTU2MGVcdTU1ZjdcdTU2MTZcdTU2MWZcdTU2MDhcdTU2MTBcdTU1ZjZcdTU3MThcdTU3MTZcdTU4NzVcdTU4N2VcdTU4ODNcdTU4OTNcdTU4OGFcdTU4NzlcdTU4ODVcdTU4N2RcdTU4ZmRcdTU5''@;'; put 'put ''MjVcdTU5MjJcdTU5MjRcdTU5NmFcdTU5NjlcdTVhZTFcdTVhZTZcdTVhZTlcdTVhZDdcdTVhZDZcdTVhZDhcdTVhZTNcdTViNzVcdTViZGVcdTViZTdcdTViZTFcdTViZTVcdTViZTZcdTViZThcdTViZTJcdTViZTRcdTViZGZcdTVjMGRcdTVjNjJcdTVkODRcdTVkODdcdTVlNWJcdTVlNjNc''@;'; put 'put ''dTVlNTVcdTVlNTdcdTVlNTRcdTVlZDNcdTVlZDZcdTVmMGFcdTVmNDZcdTVmNzBcdTVmYjlcdTYxNDciXSxbImJhNDAiLCJcdTYxM2ZcdTYxNGJcdTYxNzdcdTYxNjJcdTYxNjNcdTYxNWZcdTYxNWFcdTYxNThcdTYxNzVcdTYyMmFcdTY0ODdcdTY0NThcdTY0NTRcdTY0YTRcdTY0NzhcdTY0''@;'; put 'put ''NWZcdTY0N2FcdTY0NTFcdTY0NjdcdTY0MzRcdTY0NmRcdTY0N2JcdTY1NzJcdTY1YTFcdTY1ZDdcdTY1ZDZcdTY2YTJcdTY2YThcdTY2OWRcdTY5OWNcdTY5YThcdTY5OTVcdTY5YzFcdTY5YWVcdTY5ZDNcdTY5Y2JcdTY5OWJcdTY5YjdcdTY5YmJcdTY5YWJcdTY5YjRcdTY5ZDBcdTY5Y2Rc''@;'; put 'put ''dTY5YWRcdTY5Y2NcdTY5YTZcdTY5YzNcdTY5YTNcdTZiNDlcdTZiNGNcdTZjMzNcdTZmMzNcdTZmMTRcdTZlZmVcdTZmMTNcdTZlZjRcdTZmMjlcdTZmM2VcdTZmMjBcdTZmMmNcdTZmMGZcdTZmMDJcdTZmMjIiXSxbImJhYTEiLCJcdTZlZmZcdTZlZWZcdTZmMDZcdTZmMzFcdTZmMzhcdTZm''@;'; put 'put ''MzJcdTZmMjNcdTZmMTVcdTZmMmJcdTZmMmZcdTZmODhcdTZmMmFcdTZlZWNcdTZmMDFcdTZlZjJcdTZlY2NcdTZlZjdcdTcxOTRcdTcxOTlcdTcxN2RcdTcxOGFcdTcxODRcdTcxOTJcdTcyM2VcdTcyOTJcdTcyOTZcdTczNDRcdTczNTBcdTc0NjRcdTc0NjNcdTc0NmFcdTc0NzBcdTc0NmRc''@;'; put 'put ''dTc1MDRcdTc1OTFcdTc2MjdcdTc2MGRcdTc2MGJcdTc2MDlcdTc2MTNcdTc2ZTFcdTc2ZTNcdTc3ODRcdTc3N2RcdTc3N2ZcdTc3NjFcdTc4YzFcdTc4OWZcdTc4YTdcdTc4YjNcdTc4YTlcdTc4YTNcdTc5OGVcdTc5OGZcdTc5OGRcdTdhMmVcdTdhMzFcdTdhYWFcdTdhYTlcdTdhZWRcdTdh''@;'; put 'put ''ZWZcdTdiYTFcdTdiOTVcdTdiOGJcdTdiNzVcdTdiOTdcdTdiOWRcdTdiOTRcdTdiOGZcdTdiYjhcdTdiODdcdTdiODRcdTdjYjlcdTdjYmRcdTdjYmVcdTdkYmJcdTdkYjBcdTdkOWNcdTdkYmRcdTdkYmVcdTdkYTBcdTdkY2FcdTdkYjRcdTdkYjJcdTdkYjFcdTdkYmFcdTdkYTJcdTdkYmZc''@;'; put 'put ''dTdkYjVcdTdkYjhcdTdkYWRcdTdkZDJcdTdkYzdcdTdkYWMiXSxbImJiNDAiLCJcdTdmNzBcdTdmZTBcdTdmZTFcdTdmZGZcdTgwNWVcdTgwNWFcdTgwODdcdTgxNTBcdTgxODBcdTgxOGZcdTgxODhcdTgxOGFcdTgxN2ZcdTgxODJcdTgxZTdcdTgxZmFcdTgyMDdcdTgyMTRcdTgyMWVcdTgy''@;'; put 'put ''NGJcdTg0YzlcdTg0YmZcdTg0YzZcdTg0YzRcdTg0OTlcdTg0OWVcdTg0YjJcdTg0OWNcdTg0Y2JcdTg0YjhcdTg0YzBcdTg0ZDNcdTg0OTBcdTg0YmNcdTg0ZDFcdTg0Y2FcdTg3M2ZcdTg3MWNcdTg3M2JcdTg3MjJcdTg3MjVcdTg3MzRcdTg3MThcdTg3NTVcdTg3MzdcdTg3MjlcdTg4ZjNc''@;'; put 'put ''dTg5MDJcdTg4ZjRcdTg4ZjlcdTg4ZjhcdTg4ZmRcdTg4ZThcdTg5MWFcdTg4ZWZcdThhYTZcdThhOGNcdThhOWVcdThhYTNcdThhOGRcdThhYTFcdThhOTNcdThhYTQiXSxbImJiYTEiLCJcdThhYWFcdThhYTVcdThhYThcdThhOThcdThhOTFcdThhOWFcdThhYTdcdThjNmFcdThjOGRcdThj''@;'; put 'put ''OGNcdThjZDNcdThjZDFcdThjZDJcdThkNmJcdThkOTlcdThkOTVcdThkZmNcdThmMTRcdThmMTJcdThmMTVcdThmMTNcdThmYTNcdTkwNjBcdTkwNThcdTkwNWNcdTkwNjNcdTkwNTlcdTkwNWVcdTkwNjJcdTkwNWRcdTkwNWJcdTkxMTlcdTkxMThcdTkxMWVcdTkxNzVcdTkxNzhcdTkxNzdc''@;'; put 'put ''dTkxNzRcdTkyNzhcdTkyODBcdTkyODVcdTkyOThcdTkyOTZcdTkyN2JcdTkyOTNcdTkyOWNcdTkyYThcdTkyN2NcdTkyOTFcdTk1YTFcdTk1YThcdTk1YTlcdTk1YTNcdTk1YTVcdTk1YTRcdTk2OTlcdTk2OWNcdTk2OWJcdTk2Y2NcdTk2ZDJcdTk3MDBcdTk3N2NcdTk3ODVcdTk3ZjZcdTk4''@;'; put 'put ''MTdcdTk4MThcdTk4YWZcdTk4YjFcdTk5MDNcdTk5MDVcdTk5MGNcdTk5MDlcdTk5YzFcdTlhYWZcdTlhYjBcdTlhZTZcdTliNDFcdTliNDJcdTljZjRcdTljZjZcdTljZjNcdTllYmNcdTlmM2JcdTlmNGFcdTUxMDRcdTUxMDBcdTUwZmJcdTUwZjVcdTUwZjlcdTUxMDJcdTUxMDhcdTUxMDlc''@;'; put 'put ''dTUxMDVcdTUxZGMiXSxbImJjNDAiLCJcdTUyODdcdTUyODhcdTUyODlcdTUyOGRcdTUyOGFcdTUyZjBcdTUzYjJcdTU2MmVcdTU2M2JcdTU2MzlcdTU2MzJcdTU2M2ZcdTU2MzRcdTU2MjlcdTU2NTNcdTU2NGVcdTU2NTdcdTU2NzRcdTU2MzZcdTU2MmZcdTU2MzBcdTU4ODBcdTU4OWZcdTU4''@;'; put 'put ''OWVcdTU4YjNcdTU4OWNcdTU4YWVcdTU4YTlcdTU4YTZcdTU5NmRcdTViMDlcdTVhZmJcdTViMGJcdTVhZjVcdTViMGNcdTViMDhcdTViZWVcdTViZWNcdTViZTlcdTViZWJcdTVjNjRcdTVjNjVcdTVkOWRcdTVkOTRcdTVlNjJcdTVlNWZcdTVlNjFcdTVlZTJcdTVlZGFcdTVlZGZcdTVlZGRc''@;'; put 'put ''dTVlZTNcdTVlZTBcdTVmNDhcdTVmNzFcdTVmYjdcdTVmYjVcdTYxNzZcdTYxNjdcdTYxNmVcdTYxNWRcdTYxNTVcdTYxODIiXSxbImJjYTEiLCJcdTYxN2NcdTYxNzBcdTYxNmJcdTYxN2VcdTYxYTdcdTYxOTBcdTYxYWJcdTYxOGVcdTYxYWNcdTYxOWFcdTYxYTRcdTYxOTRcdTYxYWVcdTYy''@;'; put 'put ''MmVcdTY0NjlcdTY0NmZcdTY0NzlcdTY0OWVcdTY0YjJcdTY0ODhcdTY0OTBcdTY0YjBcdTY0YTVcdTY0OTNcdTY0OTVcdTY0YTlcdTY0OTJcdTY0YWVcdTY0YWRcdTY0YWJcdTY0OWFcdTY0YWNcdTY0OTlcdTY0YTJcdTY0YjNcdTY1NzVcdTY1NzdcdTY1NzhcdTY2YWVcdTY2YWJcdTY2YjRc''@;'; put 'put ''dTY2YjFcdTZhMjNcdTZhMWZcdTY5ZThcdTZhMDFcdTZhMWVcdTZhMTlcdTY5ZmRcdTZhMjFcdTZhMTNcdTZhMGFcdTY5ZjNcdTZhMDJcdTZhMDVcdTY5ZWRcdTZhMTFcdTZiNTBcdTZiNGVcdTZiYTRcdTZiYzVcdTZiYzZcdTZmM2ZcdTZmN2NcdTZmODRcdTZmNTFcdTZmNjZcdTZmNTRcdTZm''@;'; put 'put ''ODZcdTZmNmRcdTZmNWJcdTZmNzhcdTZmNmVcdTZmOGVcdTZmN2FcdTZmNzBcdTZmNjRcdTZmOTdcdTZmNThcdTZlZDVcdTZmNmZcdTZmNjBcdTZmNWZcdTcxOWZcdTcxYWNcdTcxYjFcdTcxYThcdTcyNTZcdTcyOWJcdTczNGVcdTczNTdcdTc0NjlcdTc0OGJcdTc0ODMiXSxbImJkNDAiLCJc''@;'; put 'put ''dTc0N2VcdTc0ODBcdTc1N2ZcdTc2MjBcdTc2MjlcdTc2MWZcdTc2MjRcdTc2MjZcdTc2MjFcdTc2MjJcdTc2OWFcdTc2YmFcdTc2ZTRcdTc3OGVcdTc3ODdcdTc3OGNcdTc3OTFcdTc3OGJcdTc4Y2JcdTc4YzVcdTc4YmFcdTc4Y2FcdTc4YmVcdTc4ZDVcdTc4YmNcdTc4ZDBcdTdhM2ZcdTdh''@;'; put 'put ''M2NcdTdhNDBcdTdhM2RcdTdhMzdcdTdhM2JcdTdhYWZcdTdhYWVcdTdiYWRcdTdiYjFcdTdiYzRcdTdiYjRcdTdiYzZcdTdiYzdcdTdiYzFcdTdiYTBcdTdiY2NcdTdjY2FcdTdkZTBcdTdkZjRcdTdkZWZcdTdkZmJcdTdkZDhcdTdkZWNcdTdkZGRcdTdkZThcdTdkZTNcdTdkZGFcdTdkZGVc''@;'; put 'put ''dTdkZTlcdTdkOWVcdTdkZDlcdTdkZjJcdTdkZjlcdTdmNzVcdTdmNzdcdTdmYWYiXSxbImJkYTEiLCJcdTdmZTlcdTgwMjZcdTgxOWJcdTgxOWNcdTgxOWRcdTgxYTBcdTgxOWFcdTgxOThcdTg1MTdcdTg1M2RcdTg1MWFcdTg0ZWVcdTg1MmNcdTg1MmRcdTg1MTNcdTg1MTFcdTg1MjNcdTg1''@;'; put 'put ''MjFcdTg1MTRcdTg0ZWNcdTg1MjVcdTg0ZmZcdTg1MDZcdTg3ODJcdTg3NzRcdTg3NzZcdTg3NjBcdTg3NjZcdTg3NzhcdTg3NjhcdTg3NTlcdTg3NTdcdTg3NGNcdTg3NTNcdTg4NWJcdTg4NWRcdTg5MTBcdTg5MDdcdTg5MTJcdTg5MTNcdTg5MTVcdTg5MGFcdThhYmNcdThhZDJcdThhYzdc''@;'; put 'put ''dThhYzRcdThhOTVcdThhY2JcdThhZjhcdThhYjJcdThhYzlcdThhYzJcdThhYmZcdThhYjBcdThhZDZcdThhY2RcdThhYjZcdThhYjlcdThhZGJcdThjNGNcdThjNGVcdThjNmNcdThjZTBcdThjZGVcdThjZTZcdThjZTRcdThjZWNcdThjZWRcdThjZTJcdThjZTNcdThjZGNcdThjZWFcdThj''@;'; put 'put ''ZTFcdThkNmRcdThkOWZcdThkYTNcdThlMmJcdThlMTBcdThlMWRcdThlMjJcdThlMGZcdThlMjlcdThlMWZcdThlMjFcdThlMWVcdThlYmFcdThmMWRcdThmMWJcdThmMWZcdThmMjlcdThmMjZcdThmMmFcdThmMWNcdThmMWUiXSxbImJlNDAiLCJcdThmMjVcdTkwNjlcdTkwNmVcdTkwNjhc''@;'; put 'put ''dTkwNmRcdTkwNzdcdTkxMzBcdTkxMmRcdTkxMjdcdTkxMzFcdTkxODdcdTkxODlcdTkxOGJcdTkxODNcdTkyYzVcdTkyYmJcdTkyYjdcdTkyZWFcdTkyYWNcdTkyZTRcdTkyYzFcdTkyYjNcdTkyYmNcdTkyZDJcdTkyYzdcdTkyZjBcdTkyYjJcdTk1YWRcdTk1YjFcdTk3MDRcdTk3MDZcdTk3''@;'; put 'put ''MDdcdTk3MDlcdTk3NjBcdTk3OGRcdTk3OGJcdTk3OGZcdTk4MjFcdTk4MmJcdTk4MWNcdTk4YjNcdTk5MGFcdTk5MTNcdTk5MTJcdTk5MThcdTk5ZGRcdTk5ZDBcdTk5ZGZcdTk5ZGJcdTk5ZDFcdTk5ZDVcdTk5ZDJcdTk5ZDlcdTlhYjdcdTlhZWVcdTlhZWZcdTliMjdcdTliNDVcdTliNDRc''@;'; put 'put ''dTliNzdcdTliNmZcdTlkMDZcdTlkMDkiXSxbImJlYTEiLCJcdTlkMDNcdTllYTlcdTllYmVcdTllY2VcdTU4YThcdTlmNTJcdTUxMTJcdTUxMThcdTUxMTRcdTUxMTBcdTUxMTVcdTUxODBcdTUxYWFcdTUxZGRcdTUyOTFcdTUyOTNcdTUyZjNcdTU2NTlcdTU2NmJcdTU2NzlcdTU2NjlcdTU2''@;'; put 'put ''NjRcdTU2NzhcdTU2NmFcdTU2NjhcdTU2NjVcdTU2NzFcdTU2NmZcdTU2NmNcdTU2NjJcdTU2NzZcdTU4YzFcdTU4YmVcdTU4YzdcdTU4YzVcdTU5NmVcdTViMWRcdTViMzRcdTViNzhcdTViZjBcdTVjMGVcdTVmNGFcdTYxYjJcdTYxOTFcdTYxYTlcdTYxOGFcdTYxY2RcdTYxYjZcdTYxYmVc''@;'; put 'put ''dTYxY2FcdTYxYzhcdTYyMzBcdTY0YzVcdTY0YzFcdTY0Y2JcdTY0YmJcdTY0YmNcdTY0ZGFcdTY0YzRcdTY0YzdcdTY0YzJcdTY0Y2RcdTY0YmZcdTY0ZDJcdTY0ZDRcdTY0YmVcdTY1NzRcdTY2YzZcdTY2YzlcdTY2YjlcdTY2YzRcdTY2YzdcdTY2YjhcdTZhM2RcdTZhMzhcdTZhM2FcdTZh''@;'; put 'put ''NTlcdTZhNmJcdTZhNThcdTZhMzlcdTZhNDRcdTZhNjJcdTZhNjFcdTZhNGJcdTZhNDdcdTZhMzVcdTZhNWZcdTZhNDhcdTZiNTlcdTZiNzdcdTZjMDVcdTZmYzJcdTZmYjFcdTZmYTEiXSxbImJmNDAiLCJcdTZmYzNcdTZmYTRcdTZmYzFcdTZmYTdcdTZmYjNcdTZmYzBcdTZmYjlcdTZmYjZc''@;'; put 'put ''dTZmYTZcdTZmYTBcdTZmYjRcdTcxYmVcdTcxYzlcdTcxZDBcdTcxZDJcdTcxYzhcdTcxZDVcdTcxYjlcdTcxY2VcdTcxZDlcdTcxZGNcdTcxYzNcdTcxYzRcdTczNjhcdTc0OWNcdTc0YTNcdTc0OThcdTc0OWZcdTc0OWVcdTc0ZTJcdTc1MGNcdTc1MGRcdTc2MzRcdTc2MzhcdTc2M2FcdTc2''@;'; put 'put ''ZTdcdTc2ZTVcdTc3YTBcdTc3OWVcdTc3OWZcdTc3YTVcdTc4ZThcdTc4ZGFcdTc4ZWNcdTc4ZTdcdTc5YTZcdTdhNGRcdTdhNGVcdTdhNDZcdTdhNGNcdTdhNGJcdTdhYmFcdTdiZDlcdTdjMTFcdTdiYzlcdTdiZTRcdTdiZGJcdTdiZTFcdTdiZTlcdTdiZTZcdTdjZDVcdTdjZDZcdTdlMGEi''@;'; put 'put ''XSxbImJmYTEiLCJcdTdlMTFcdTdlMDhcdTdlMWJcdTdlMjNcdTdlMWVcdTdlMWRcdTdlMDlcdTdlMTBcdTdmNzlcdTdmYjJcdTdmZjBcdTdmZjFcdTdmZWVcdTgwMjhcdTgxYjNcdTgxYTlcdTgxYThcdTgxZmJcdTgyMDhcdTgyNThcdTgyNTlcdTg1NGFcdTg1NTlcdTg1NDhcdTg1NjhcdTg1''@;'; put 'put ''NjlcdTg1NDNcdTg1NDlcdTg1NmRcdTg1NmFcdTg1NWVcdTg3ODNcdTg3OWZcdTg3OWVcdTg3YTJcdTg3OGRcdTg4NjFcdTg5MmFcdTg5MzJcdTg5MjVcdTg5MmJcdTg5MjFcdTg5YWFcdTg5YTZcdThhZTZcdThhZmFcdThhZWJcdThhZjFcdThiMDBcdThhZGNcdThhZTdcdThhZWVcdThhZmVc''@;'; put 'put ''dThiMDFcdThiMDJcdThhZjdcdThhZWRcdThhZjNcdThhZjZcdThhZmNcdThjNmJcdThjNmRcdThjOTNcdThjZjRcdThlNDRcdThlMzFcdThlMzRcdThlNDJcdThlMzlcdThlMzVcdThmM2JcdThmMmZcdThmMzhcdThmMzNcdThmYThcdThmYTZcdTkwNzVcdTkwNzRcdTkwNzhcdTkwNzJcdTkw''@;'; put 'put ''N2NcdTkwN2FcdTkxMzRcdTkxOTJcdTkzMjBcdTkzMzZcdTkyZjhcdTkzMzNcdTkzMmZcdTkzMjJcdTkyZmNcdTkzMmJcdTkzMDRcdTkzMWEiXSxbImMwNDAiLCJcdTkzMTBcdTkzMjZcdTkzMjFcdTkzMTVcdTkzMmVcdTkzMTlcdTk1YmJcdTk2YTdcdTk2YThcdTk2YWFcdTk2ZDVcdTk3MGVc''@;'; put 'put ''dTk3MTFcdTk3MTZcdTk3MGRcdTk3MTNcdTk3MGZcdTk3NWJcdTk3NWNcdTk3NjZcdTk3OThcdTk4MzBcdTk4MzhcdTk4M2JcdTk4MzdcdTk4MmRcdTk4MzlcdTk4MjRcdTk5MTBcdTk5MjhcdTk5MWVcdTk5MWJcdTk5MjFcdTk5MWFcdTk5ZWRcdTk5ZTJcdTk5ZjFcdTlhYjhcdTlhYmNcdTlh''@;'; put 'put ''ZmJcdTlhZWRcdTliMjhcdTliOTFcdTlkMTVcdTlkMjNcdTlkMjZcdTlkMjhcdTlkMTJcdTlkMWJcdTllZDhcdTllZDRcdTlmOGRcdTlmOWNcdTUxMmFcdTUxMWZcdTUxMjFcdTUxMzJcdTUyZjVcdTU2OGVcdTU2ODBcdTU2OTBcdTU2ODVcdTU2ODciXSxbImMwYTEiLCJcdTU2OGZcdTU4ZDVc''@;'; put 'put ''dTU4ZDNcdTU4ZDFcdTU4Y2VcdTViMzBcdTViMmFcdTViMjRcdTViN2FcdTVjMzdcdTVjNjhcdTVkYmNcdTVkYmFcdTVkYmRcdTVkYjhcdTVlNmJcdTVmNGNcdTVmYmRcdTYxYzlcdTYxYzJcdTYxYzdcdTYxZTZcdTYxY2JcdTYyMzJcdTYyMzRcdTY0Y2VcdTY0Y2FcdTY0ZDhcdTY0ZTBcdTY0''@;'; put 'put ''ZjBcdTY0ZTZcdTY0ZWNcdTY0ZjFcdTY0ZTJcdTY0ZWRcdTY1ODJcdTY1ODNcdTY2ZDlcdTY2ZDZcdTZhODBcdTZhOTRcdTZhODRcdTZhYTJcdTZhOWNcdTZhZGJcdTZhYTNcdTZhN2VcdTZhOTdcdTZhOTBcdTZhYTBcdTZiNWNcdTZiYWVcdTZiZGFcdTZjMDhcdTZmZDhcdTZmZjFcdTZmZGZc''@;'; put 'put ''dTZmZTBcdTZmZGJcdTZmZTRcdTZmZWJcdTZmZWZcdTZmODBcdTZmZWNcdTZmZTFcdTZmZTlcdTZmZDVcdTZmZWVcdTZmZjBcdTcxZTdcdTcxZGZcdTcxZWVcdTcxZTZcdTcxZTVcdTcxZWRcdTcxZWNcdTcxZjRcdTcxZTBcdTcyMzVcdTcyNDZcdTczNzBcdTczNzJcdTc0YTlcdTc0YjBcdTc0''@;'; put 'put ''YTZcdTc0YThcdTc2NDZcdTc2NDJcdTc2NGNcdTc2ZWFcdTc3YjNcdTc3YWFcdTc3YjBcdTc3YWMiXSxbImMxNDAiLCJcdTc3YTdcdTc3YWRcdTc3ZWZcdTc4ZjdcdTc4ZmFcdTc4ZjRcdTc4ZWZcdTc5MDFcdTc5YTdcdTc5YWFcdTdhNTdcdTdhYmZcdTdjMDdcdTdjMGRcdTdiZmVcdTdiZjdc''@;'; put 'put ''dTdjMGNcdTdiZTBcdTdjZTBcdTdjZGNcdTdjZGVcdTdjZTJcdTdjZGZcdTdjZDlcdTdjZGRcdTdlMmVcdTdlM2VcdTdlNDZcdTdlMzdcdTdlMzJcdTdlNDNcdTdlMmJcdTdlM2RcdTdlMzFcdTdlNDVcdTdlNDFcdTdlMzRcdTdlMzlcdTdlNDhcdTdlMzVcdTdlM2ZcdTdlMmZcdTdmNDRcdTdm''@;'; put 'put ''ZjNcdTdmZmNcdTgwNzFcdTgwNzJcdTgwNzBcdTgwNmZcdTgwNzNcdTgxYzZcdTgxYzNcdTgxYmFcdTgxYzJcdTgxYzBcdTgxYmZcdTgxYmRcdTgxYzlcdTgxYmVcdTgxZThcdTgyMDlcdTgyNzFcdTg1YWEiXSxbImMxYTEiLCJcdTg1ODRcdTg1N2VcdTg1OWNcdTg1OTFcdTg1OTRcdTg1YWZc''@;'; put 'put ''dTg1OWJcdTg1ODdcdTg1YThcdTg1OGFcdTg2NjdcdTg3YzBcdTg3ZDFcdTg3YjNcdTg3ZDJcdTg3YzZcdTg3YWJcdTg3YmJcdTg3YmFcdTg3YzhcdTg3Y2JcdTg5M2JcdTg5MzZcdTg5NDRcdTg5MzhcdTg5M2RcdTg5YWNcdThiMGVcdThiMTdcdThiMTlcdThiMWJcdThiMGFcdThiMjBcdThi''@;'; put 'put ''MWRcdThiMDRcdThiMTBcdThjNDFcdThjM2ZcdThjNzNcdThjZmFcdThjZmRcdThjZmNcdThjZjhcdThjZmJcdThkYThcdThlNDlcdThlNGJcdThlNDhcdThlNGFcdThmNDRcdThmM2VcdThmNDJcdThmNDVcdThmM2ZcdTkwN2ZcdTkwN2RcdTkwODRcdTkwODFcdTkwODJcdTkwODBcdTkxMzlc''@;'; put 'put ''dTkxYTNcdTkxOWVcdTkxOWNcdTkzNGRcdTkzODJcdTkzMjhcdTkzNzVcdTkzNGFcdTkzNjVcdTkzNGJcdTkzMThcdTkzN2VcdTkzNmNcdTkzNWJcdTkzNzBcdTkzNWFcdTkzNTRcdTk1Y2FcdTk1Y2JcdTk1Y2NcdTk1YzhcdTk1YzZcdTk2YjFcdTk2YjhcdTk2ZDZcdTk3MWNcdTk3MWVcdTk3''@;'; put 'put ''YTBcdTk3ZDNcdTk4NDZcdTk4YjZcdTk5MzVcdTlhMDEiXSxbImMyNDAiLCJcdTk5ZmZcdTliYWVcdTliYWJcdTliYWFcdTliYWRcdTlkM2JcdTlkM2ZcdTllOGJcdTllY2ZcdTllZGVcdTllZGNcdTllZGRcdTllZGJcdTlmM2VcdTlmNGJcdTUzZTJcdTU2OTVcdTU2YWVcdTU4ZDlcdTU4ZDhc''@;'; put 'put ''dTViMzhcdTVmNWRcdTYxZTNcdTYyMzNcdTY0ZjRcdTY0ZjJcdTY0ZmVcdTY1MDZcdTY0ZmFcdTY0ZmJcdTY0ZjdcdTY1YjdcdTY2ZGNcdTY3MjZcdTZhYjNcdTZhYWNcdTZhYzNcdTZhYmJcdTZhYjhcdTZhYzJcdTZhYWVcdTZhYWZcdTZiNWZcdTZiNzhcdTZiYWZcdTcwMDlcdTcwMGJcdTZm''@;'; put 'put ''ZmVcdTcwMDZcdTZmZmFcdTcwMTFcdTcwMGZcdTcxZmJcdTcxZmNcdTcxZmVcdTcxZjhcdTczNzdcdTczNzVcdTc0YTdcdTc0YmZcdTc1MTVcdTc2NTZcdTc2NTgiXSxbImMyYTEiLCJcdTc2NTJcdTc3YmRcdTc3YmZcdTc3YmJcdTc3YmNcdTc5MGVcdTc5YWVcdTdhNjFcdTdhNjJcdTdhNjBc''@;'; put 'put ''dTdhYzRcdTdhYzVcdTdjMmJcdTdjMjdcdTdjMmFcdTdjMWVcdTdjMjNcdTdjMjFcdTdjZTdcdTdlNTRcdTdlNTVcdTdlNWVcdTdlNWFcdTdlNjFcdTdlNTJcdTdlNTlcdTdmNDhcdTdmZjlcdTdmZmJcdTgwNzdcdTgwNzZcdTgxY2RcdTgxY2ZcdTgyMGFcdTg1Y2ZcdTg1YTlcdTg1Y2RcdTg1''@;'; put 'put ''ZDBcdTg1YzlcdTg1YjBcdTg1YmFcdTg1YjlcdTg1YTZcdTg3ZWZcdTg3ZWNcdTg3ZjJcdTg3ZTBcdTg5ODZcdTg5YjJcdTg5ZjRcdThiMjhcdThiMzlcdThiMmNcdThiMmJcdThjNTBcdThkMDVcdThlNTlcdThlNjNcdThlNjZcdThlNjRcdThlNWZcdThlNTVcdThlYzBcdThmNDlcdThmNGRc''@;'; put 'put ''dTkwODdcdTkwODNcdTkwODhcdTkxYWJcdTkxYWNcdTkxZDBcdTkzOTRcdTkzOGFcdTkzOTZcdTkzYTJcdTkzYjNcdTkzYWVcdTkzYWNcdTkzYjBcdTkzOThcdTkzOWFcdTkzOTdcdTk1ZDRcdTk1ZDZcdTk1ZDBcdTk1ZDVcdTk2ZTJcdTk2ZGNcdTk2ZDlcdTk2ZGJcdTk2ZGVcdTk3MjRcdTk3''@;'; put 'put ''YTNcdTk3YTYiXSxbImMzNDAiLCJcdTk3YWRcdTk3ZjlcdTk4NGRcdTk4NGZcdTk4NGNcdTk4NGVcdTk4NTNcdTk4YmFcdTk5M2VcdTk5M2ZcdTk5M2RcdTk5MmVcdTk5YTVcdTlhMGVcdTlhYzFcdTliMDNcdTliMDZcdTliNGZcdTliNGVcdTliNGRcdTliY2FcdTliYzlcdTliZmRcdTliYzhc''@;'; put 'put ''dTliYzBcdTlkNTFcdTlkNWRcdTlkNjBcdTllZTBcdTlmMTVcdTlmMmNcdTUxMzNcdTU2YTVcdTU4ZGVcdTU4ZGZcdTU4ZTJcdTViZjVcdTlmOTBcdTVlZWNcdTYxZjJcdTYxZjdcdTYxZjZcdTYxZjVcdTY1MDBcdTY1MGZcdTY2ZTBcdTY2ZGRcdTZhZTVcdTZhZGRcdTZhZGFcdTZhZDNcdTcw''@;'; put 'put ''MWJcdTcwMWZcdTcwMjhcdTcwMWFcdTcwMWRcdTcwMTVcdTcwMThcdTcyMDZcdTcyMGRcdTcyNThcdTcyYTJcdTczNzgiXSxbImMzYTEiLCJcdTczN2FcdTc0YmRcdTc0Y2FcdTc0ZTNcdTc1ODdcdTc1ODZcdTc2NWZcdTc2NjFcdTc3YzdcdTc5MTlcdTc5YjFcdTdhNmJcdTdhNjlcdTdjM2Vc''@;'; put 'put ''dTdjM2ZcdTdjMzhcdTdjM2RcdTdjMzdcdTdjNDBcdTdlNmJcdTdlNmRcdTdlNzlcdTdlNjlcdTdlNmFcdTdmODVcdTdlNzNcdTdmYjZcdTdmYjlcdTdmYjhcdTgxZDhcdTg1ZTlcdTg1ZGRcdTg1ZWFcdTg1ZDVcdTg1ZTRcdTg1ZTVcdTg1ZjdcdTg3ZmJcdTg4MDVcdTg4MGRcdTg3ZjlcdTg3''@;'; put 'put ''ZmVcdTg5NjBcdTg5NWZcdTg5NTZcdTg5NWVcdThiNDFcdThiNWNcdThiNThcdThiNDlcdThiNWFcdThiNGVcdThiNGZcdThiNDZcdThiNTlcdThkMDhcdThkMGFcdThlN2NcdThlNzJcdThlODdcdThlNzZcdThlNmNcdThlN2FcdThlNzRcdThmNTRcdThmNGVcdThmYWRcdTkwOGFcdTkwOGJc''@;'; put 'put ''dTkxYjFcdTkxYWVcdTkzZTFcdTkzZDFcdTkzZGZcdTkzYzNcdTkzYzhcdTkzZGNcdTkzZGRcdTkzZDZcdTkzZTJcdTkzY2RcdTkzZDhcdTkzZTRcdTkzZDdcdTkzZThcdTk1ZGNcdTk2YjRcdTk2ZTNcdTk3MmFcdTk3MjdcdTk3NjFcdTk3ZGNcdTk3ZmJcdTk4NWUiXSxbImM0NDAiLCJcdTk4''@;'; put 'put ''NThcdTk4NWJcdTk4YmNcdTk5NDVcdTk5NDlcdTlhMTZcdTlhMTlcdTliMGRcdTliZThcdTliZTdcdTliZDZcdTliZGJcdTlkODlcdTlkNjFcdTlkNzJcdTlkNmFcdTlkNmNcdTllOTJcdTllOTdcdTllOTNcdTllYjRcdTUyZjhcdTU2YThcdTU2YjdcdTU2YjZcdTU2YjRcdTU2YmNcdTU4ZTRc''@;'; put 'put ''dTViNDBcdTViNDNcdTViN2RcdTViZjZcdTVkYzlcdTYxZjhcdTYxZmFcdTY1MThcdTY1MTRcdTY1MTlcdTY2ZTZcdTY3MjdcdTZhZWNcdTcwM2VcdTcwMzBcdTcwMzJcdTcyMTBcdTczN2JcdTc0Y2ZcdTc2NjJcdTc2NjVcdTc5MjZcdTc5MmFcdTc5MmNcdTc5MmJcdTdhYzdcdTdhZjZcdTdj''@;'; put 'put ''NGNcdTdjNDNcdTdjNGRcdTdjZWZcdTdjZjBcdThmYWVcdTdlN2RcdTdlN2MiXSxbImM0YTEiLCJcdTdlODJcdTdmNGNcdTgwMDBcdTgxZGFcdTgyNjZcdTg1ZmJcdTg1ZjlcdTg2MTFcdTg1ZmFcdTg2MDZcdTg2MGJcdTg2MDdcdTg2MGFcdTg4MTRcdTg4MTVcdTg5NjRcdTg5YmFcdTg5Zjhc''@;'; put 'put ''dThiNzBcdThiNmNcdThiNjZcdThiNmZcdThiNWZcdThiNmJcdThkMGZcdThkMGRcdThlODlcdThlODFcdThlODVcdThlODJcdTkxYjRcdTkxY2JcdTk0MThcdTk0MDNcdTkzZmRcdTk1ZTFcdTk3MzBcdTk4YzRcdTk5NTJcdTk5NTFcdTk5YThcdTlhMmJcdTlhMzBcdTlhMzdcdTlhMzVcdTlj''@;'; put 'put ''MTNcdTljMGRcdTllNzlcdTllYjVcdTllZThcdTlmMmZcdTlmNWZcdTlmNjNcdTlmNjFcdTUxMzdcdTUxMzhcdTU2YzFcdTU2YzBcdTU2YzJcdTU5MTRcdTVjNmNcdTVkY2RcdTYxZmNcdTYxZmVcdTY1MWRcdTY1MWNcdTY1OTVcdTY2ZTlcdTZhZmJcdTZiMDRcdTZhZmFcdTZiYjJcdTcwNGNc''@;'; put 'put ''dTcyMWJcdTcyYTdcdTc0ZDZcdTc0ZDRcdTc2NjlcdTc3ZDNcdTdjNTBcdTdlOGZcdTdlOGNcdTdmYmNcdTg2MTdcdTg2MmRcdTg2MWFcdTg4MjNcdTg4MjJcdTg4MjFcdTg4MWZcdTg5NmFcdTg5NmNcdTg5YmRcdThiNzQiXSxbImM1NDAiLCJcdThiNzdcdThiN2RcdThkMTNcdThlOGFcdThl''@;'; put 'put ''OGRcdThlOGJcdThmNWZcdThmYWZcdTkxYmFcdTk0MmVcdTk0MzNcdTk0MzVcdTk0M2FcdTk0MzhcdTk0MzJcdTk0MmJcdTk1ZTJcdTk3MzhcdTk3MzlcdTk3MzJcdTk3ZmZcdTk4NjdcdTk4NjVcdTk5NTdcdTlhNDVcdTlhNDNcdTlhNDBcdTlhM2VcdTlhY2ZcdTliNTRcdTliNTFcdTljMmRc''@;'; put 'put ''dTljMjVcdTlkYWZcdTlkYjRcdTlkYzJcdTlkYjhcdTllOWRcdTllZWZcdTlmMTlcdTlmNWNcdTlmNjZcdTlmNjdcdTUxM2NcdTUxM2JcdTU2YzhcdTU2Y2FcdTU2YzlcdTViN2ZcdTVkZDRcdTVkZDJcdTVmNGVcdTYxZmZcdTY1MjRcdTZiMGFcdTZiNjFcdTcwNTFcdTcwNThcdTczODBcdTc0''@;'; put 'put ''ZTRcdTc1OGFcdTc2NmVcdTc2NmMiXSxbImM1YTEiLCJcdTc5YjNcdTdjNjBcdTdjNWZcdTgwN2VcdTgwN2RcdTgxZGZcdTg5NzJcdTg5NmZcdTg5ZmNcdThiODBcdThkMTZcdThkMTdcdThlOTFcdThlOTNcdThmNjFcdTkxNDhcdTk0NDRcdTk0NTFcdTk0NTJcdTk3M2RcdTk3M2VcdTk3YzNc''@;'; put 'put ''dTk3YzFcdTk4NmJcdTk5NTVcdTlhNTVcdTlhNGRcdTlhZDJcdTliMWFcdTljNDlcdTljMzFcdTljM2VcdTljM2JcdTlkZDNcdTlkZDdcdTlmMzRcdTlmNmNcdTlmNmFcdTlmOTRcdTU2Y2NcdTVkZDZcdTYyMDBcdTY1MjNcdTY1MmJcdTY1MmFcdTY2ZWNcdTZiMTBcdTc0ZGFcdTdhY2FcdTdj''@;'; put 'put ''NjRcdTdjNjNcdTdjNjVcdTdlOTNcdTdlOTZcdTdlOTRcdTgxZTJcdTg2MzhcdTg2M2ZcdTg4MzFcdThiOGFcdTkwOTBcdTkwOGZcdTk0NjNcdTk0NjBcdTk0NjRcdTk3NjhcdTk4NmZcdTk5NWNcdTlhNWFcdTlhNWJcdTlhNTdcdTlhZDNcdTlhZDRcdTlhZDFcdTljNTRcdTljNTdcdTljNTZc''@;'; put 'put ''dTlkZTVcdTllOWZcdTllZjRcdTU2ZDFcdTU4ZTlcdTY1MmNcdTcwNWVcdTc2NzFcdTc2NzJcdTc3ZDdcdTdmNTBcdTdmODhcdTg4MzZcdTg4MzlcdTg4NjJcdThiOTNcdThiOTIiXSxbImM2NDAiLCJcdThiOTZcdTgyNzdcdThkMWJcdTkxYzBcdTk0NmFcdTk3NDJcdTk3NDhcdTk3NDRcdTk3''@;'; put 'put ''YzZcdTk4NzBcdTlhNWZcdTliMjJcdTliNThcdTljNWZcdTlkZjlcdTlkZmFcdTllN2NcdTllN2RcdTlmMDdcdTlmNzdcdTlmNzJcdTVlZjNcdTZiMTZcdTcwNjNcdTdjNmNcdTdjNmVcdTg4M2JcdTg5YzBcdThlYTFcdTkxYzFcdTk0NzJcdTk0NzBcdTk4NzFcdTk5NWVcdTlhZDZcdTliMjNc''@;'; put 'put ''dTllY2NcdTcwNjRcdTc3ZGFcdThiOWFcdTk0NzdcdTk3YzlcdTlhNjJcdTlhNjVcdTdlOWNcdThiOWNcdThlYWFcdTkxYzVcdTk0N2RcdTk0N2VcdTk0N2NcdTljNzdcdTljNzhcdTllZjdcdThjNTRcdTk0N2ZcdTllMWFcdTcyMjhcdTlhNmFcdTliMzFcdTllMWJcdTllMWVcdTdjNzIiXSxb''@;'; put 'put ''ImM5NDAiLCJcdTRlNDJcdTRlNWNcdTUxZjVcdTUzMWFcdTUzODJcdTRlMDdcdTRlMGNcdTRlNDdcdTRlOGRcdTU2ZDdcdWZhMGNcdTVjNmVcdTVmNzNcdTRlMGZcdTUxODdcdTRlMGVcdTRlMmVcdTRlOTNcdTRlYzJcdTRlYzlcdTRlYzhcdTUxOThcdTUyZmNcdTUzNmNcdTUzYjlcdTU3MjBc''@;'; put 'put ''dTU5MDNcdTU5MmNcdTVjMTBcdTVkZmZcdTY1ZTFcdTZiYjNcdTZiY2NcdTZjMTRcdTcyM2ZcdTRlMzFcdTRlM2NcdTRlZThcdTRlZGNcdTRlZTlcdTRlZTFcdTRlZGRcdTRlZGFcdTUyMGNcdTUzMWNcdTUzNGNcdTU3MjJcdTU3MjNcdTU5MTdcdTU5MmZcdTViODFcdTViODRcdTVjMTJcdTVj''@;'; put 'put ''M2JcdTVjNzRcdTVjNzNcdTVlMDRcdTVlODBcdTVlODJcdTVmYzlcdTYyMDlcdTYyNTBcdTZjMTUiXSxbImM5YTEiLCJcdTZjMzZcdTZjNDNcdTZjM2ZcdTZjM2JcdTcyYWVcdTcyYjBcdTczOGFcdTc5YjhcdTgwOGFcdTk2MWVcdTRmMGVcdTRmMThcdTRmMmNcdTRlZjVcdTRmMTRcdTRlZjFc''@;'; put 'put ''dTRmMDBcdTRlZjdcdTRmMDhcdTRmMWRcdTRmMDJcdTRmMDVcdTRmMjJcdTRmMTNcdTRmMDRcdTRlZjRcdTRmMTJcdTUxYjFcdTUyMTNcdTUyMDlcdTUyMTBcdTUyYTZcdTUzMjJcdTUzMWZcdTUzNGRcdTUzOGFcdTU0MDdcdTU2ZTFcdTU2ZGZcdTU3MmVcdTU3MmFcdTU3MzRcdTU5M2NcdTU5''@;'; put 'put ''ODBcdTU5N2NcdTU5ODVcdTU5N2JcdTU5N2VcdTU5NzdcdTU5N2ZcdTViNTZcdTVjMTVcdTVjMjVcdTVjN2NcdTVjN2FcdTVjN2JcdTVjN2VcdTVkZGZcdTVlNzVcdTVlODRcdTVmMDJcdTVmMWFcdTVmNzRcdTVmZDVcdTVmZDRcdTVmY2ZcdTYyNWNcdTYyNWVcdTYyNjRcdTYyNjFcdTYyNjZc''@;'; put 'put ''dTYyNjJcdTYyNTlcdTYyNjBcdTYyNWFcdTYyNjVcdTY1ZWZcdTY1ZWVcdTY3M2VcdTY3MzlcdTY3MzhcdTY3M2JcdTY3M2FcdTY3M2ZcdTY3M2NcdTY3MzNcdTZjMThcdTZjNDZcdTZjNTJcdTZjNWNcdTZjNGZcdTZjNGFcdTZjNTRcdTZjNGIiXSxbImNhNDAiLCJcdTZjNGNcdTcwNzFcdTcy''@;'; put 'put ''NWVcdTcyYjRcdTcyYjVcdTczOGVcdTc1MmFcdTc2N2ZcdTdhNzVcdTdmNTFcdTgyNzhcdTgyN2NcdTgyODBcdTgyN2RcdTgyN2ZcdTg2NGRcdTg5N2VcdTkwOTlcdTkwOTdcdTkwOThcdTkwOWJcdTkwOTRcdTk2MjJcdTk2MjRcdTk2MjBcdTk2MjNcdTRmNTZcdTRmM2JcdTRmNjJcdTRmNDlc''@;'; put 'put ''dTRmNTNcdTRmNjRcdTRmM2VcdTRmNjdcdTRmNTJcdTRmNWZcdTRmNDFcdTRmNThcdTRmMmRcdTRmMzNcdTRmM2ZcdTRmNjFcdTUxOGZcdTUxYjlcdTUyMWNcdTUyMWVcdTUyMjFcdTUyYWRcdTUyYWVcdTUzMDlcdTUzNjNcdTUzNzJcdTUzOGVcdTUzOGZcdTU0MzBcdTU0MzdcdTU0MmFcdTU0''@;'; put 'put ''NTRcdTU0NDVcdTU0MTlcdTU0MWNcdTU0MjVcdTU0MTgiXSxbImNhYTEiLCJcdTU0M2RcdTU0NGZcdTU0NDFcdTU0MjhcdTU0MjRcdTU0NDdcdTU2ZWVcdTU2ZTdcdTU2ZTVcdTU3NDFcdTU3NDVcdTU3NGNcdTU3NDlcdTU3NGJcdTU3NTJcdTU5MDZcdTU5NDBcdTU5YTZcdTU5OThcdTU5YTBc''@;'; put 'put ''dTU5OTdcdTU5OGVcdTU5YTJcdTU5OTBcdTU5OGZcdTU5YTdcdTU5YTFcdTViOGVcdTViOTJcdTVjMjhcdTVjMmFcdTVjOGRcdTVjOGZcdTVjODhcdTVjOGJcdTVjODlcdTVjOTJcdTVjOGFcdTVjODZcdTVjOTNcdTVjOTVcdTVkZTBcdTVlMGFcdTVlMGVcdTVlOGJcdTVlODlcdTVlOGNcdTVl''@;'; put 'put ''ODhcdTVlOGRcdTVmMDVcdTVmMWRcdTVmNzhcdTVmNzZcdTVmZDJcdTVmZDFcdTVmZDBcdTVmZWRcdTVmZThcdTVmZWVcdTVmZjNcdTVmZTFcdTVmZTRcdTVmZTNcdTVmZmFcdTVmZWZcdTVmZjdcdTVmZmJcdTYwMDBcdTVmZjRcdTYyM2FcdTYyODNcdTYyOGNcdTYyOGVcdTYyOGZcdTYyOTRc''@;'; put 'put ''dTYyODdcdTYyNzFcdTYyN2JcdTYyN2FcdTYyNzBcdTYyODFcdTYyODhcdTYyNzdcdTYyN2RcdTYyNzJcdTYyNzRcdTY1MzdcdTY1ZjBcdTY1ZjRcdTY1ZjNcdTY1ZjJcdTY1ZjVcdTY3NDVcdTY3NDciXSxbImNiNDAiLCJcdTY3NTlcdTY3NTVcdTY3NGNcdTY3NDhcdTY3NWRcdTY3NGRcdTY3''@;'; put 'put ''NWFcdTY3NGJcdTZiZDBcdTZjMTlcdTZjMWFcdTZjNzhcdTZjNjdcdTZjNmJcdTZjODRcdTZjOGJcdTZjOGZcdTZjNzFcdTZjNmZcdTZjNjlcdTZjOWFcdTZjNmRcdTZjODdcdTZjOTVcdTZjOWNcdTZjNjZcdTZjNzNcdTZjNjVcdTZjN2JcdTZjOGVcdTcwNzRcdTcwN2FcdTcyNjNcdTcyYmZc''@;'; put 'put ''dTcyYmRcdTcyYzNcdTcyYzZcdTcyYzFcdTcyYmFcdTcyYzVcdTczOTVcdTczOTdcdTczOTNcdTczOTRcdTczOTJcdTc1M2FcdTc1MzlcdTc1OTRcdTc1OTVcdTc2ODFcdTc5M2RcdTgwMzRcdTgwOTVcdTgwOTlcdTgwOTBcdTgwOTJcdTgwOWNcdTgyOTBcdTgyOGZcdTgyODVcdTgyOGVcdTgy''@;'; put 'put ''OTFcdTgyOTMiXSxbImNiYTEiLCJcdTgyOGFcdTgyODNcdTgyODRcdThjNzhcdThmYzlcdThmYmZcdTkwOWZcdTkwYTFcdTkwYTVcdTkwOWVcdTkwYTdcdTkwYTBcdTk2MzBcdTk2MjhcdTk2MmZcdTk2MmRcdTRlMzNcdTRmOThcdTRmN2NcdTRmODVcdTRmN2RcdTRmODBcdTRmODdcdTRmNzZc''@;'; put 'put ''dTRmNzRcdTRmODlcdTRmODRcdTRmNzdcdTRmNGNcdTRmOTdcdTRmNmFcdTRmOWFcdTRmNzlcdTRmODFcdTRmNzhcdTRmOTBcdTRmOWNcdTRmOTRcdTRmOWVcdTRmOTJcdTRmODJcdTRmOTVcdTRmNmJcdTRmNmVcdTUxOWVcdTUxYmNcdTUxYmVcdTUyMzVcdTUyMzJcdTUyMzNcdTUyNDZcdTUy''@;'; put 'put ''MzFcdTUyYmNcdTUzMGFcdTUzMGJcdTUzM2NcdTUzOTJcdTUzOTRcdTU0ODdcdTU0N2ZcdTU0ODFcdTU0OTFcdTU0ODJcdTU0ODhcdTU0NmJcdTU0N2FcdTU0N2VcdTU0NjVcdTU0NmNcdTU0NzRcdTU0NjZcdTU0OGRcdTU0NmZcdTU0NjFcdTU0NjBcdTU0OThcdTU0NjNcdTU0NjdcdTU0NjRc''@;'; put 'put ''dTU2ZjdcdTU2ZjlcdTU3NmZcdTU3NzJcdTU3NmRcdTU3NmJcdTU3NzFcdTU3NzBcdTU3NzZcdTU3ODBcdTU3NzVcdTU3N2JcdTU3NzNcdTU3NzRcdTU3NjIiXSxbImNjNDAiLCJcdTU3NjhcdTU3N2RcdTU5MGNcdTU5NDVcdTU5YjVcdTU5YmFcdTU5Y2ZcdTU5Y2VcdTU5YjJcdTU5Y2NcdTU5''@;'; put 'put ''YzFcdTU5YjZcdTU5YmNcdTU5YzNcdTU5ZDZcdTU5YjFcdTU5YmRcdTU5YzBcdTU5YzhcdTU5YjRcdTU5YzdcdTViNjJcdTViNjVcdTViOTNcdTViOTVcdTVjNDRcdTVjNDdcdTVjYWVcdTVjYTRcdTVjYTBcdTVjYjVcdTVjYWZcdTVjYThcdTVjYWNcdTVjOWZcdTVjYTNcdTVjYWRcdTVjYTJc''@;'; put 'put ''dTVjYWFcdTVjYTdcdTVjOWRcdTVjYTVcdTVjYjZcdTVjYjBcdTVjYTZcdTVlMTdcdTVlMTRcdTVlMTlcdTVmMjhcdTVmMjJcdTVmMjNcdTVmMjRcdTVmNTRcdTVmODJcdTVmN2VcdTVmN2RcdTVmZGVcdTVmZTVcdTYwMmRcdTYwMjZcdTYwMTlcdTYwMzJcdTYwMGIiXSxbImNjYTEiLCJcdTYw''@;'; put 'put ''MzRcdTYwMGFcdTYwMTdcdTYwMzNcdTYwMWFcdTYwMWVcdTYwMmNcdTYwMjJcdTYwMGRcdTYwMTBcdTYwMmVcdTYwMTNcdTYwMTFcdTYwMGNcdTYwMDlcdTYwMWNcdTYyMTRcdTYyM2RcdTYyYWRcdTYyYjRcdTYyZDFcdTYyYmVcdTYyYWFcdTYyYjZcdTYyY2FcdTYyYWVcdTYyYjNcdTYyYWZc''@;'; put 'put ''dTYyYmJcdTYyYTlcdTYyYjBcdTYyYjhcdTY1M2RcdTY1YThcdTY1YmJcdTY2MDlcdTY1ZmNcdTY2MDRcdTY2MTJcdTY2MDhcdTY1ZmJcdTY2MDNcdTY2MGJcdTY2MGRcdTY2MDVcdTY1ZmRcdTY2MTFcdTY2MTBcdTY2ZjZcdTY3MGFcdTY3ODVcdTY3NmNcdTY3OGVcdTY3OTJcdTY3NzZcdTY3''@;'; put 'put ''N2JcdTY3OThcdTY3ODZcdTY3ODRcdTY3NzRcdTY3OGRcdTY3OGNcdTY3N2FcdTY3OWZcdTY3OTFcdTY3OTlcdTY3ODNcdTY3N2RcdTY3ODFcdTY3NzhcdTY3NzlcdTY3OTRcdTZiMjVcdTZiODBcdTZiN2VcdTZiZGVcdTZjMWRcdTZjOTNcdTZjZWNcdTZjZWJcdTZjZWVcdTZjZDlcdTZjYjZc''@;'; put 'put ''dTZjZDRcdTZjYWRcdTZjZTdcdTZjYjdcdTZjZDBcdTZjYzJcdTZjYmFcdTZjYzNcdTZjYzZcdTZjZWRcdTZjZjIiXSxbImNkNDAiLCJcdTZjZDJcdTZjZGRcdTZjYjRcdTZjOGFcdTZjOWRcdTZjODBcdTZjZGVcdTZjYzBcdTZkMzBcdTZjY2RcdTZjYzdcdTZjYjBcdTZjZjlcdTZjY2ZcdTZj''@;'; put 'put ''ZTlcdTZjZDFcdTcwOTRcdTcwOThcdTcwODVcdTcwOTNcdTcwODZcdTcwODRcdTcwOTFcdTcwOTZcdTcwODJcdTcwOWFcdTcwODNcdTcyNmFcdTcyZDZcdTcyY2JcdTcyZDhcdTcyYzlcdTcyZGNcdTcyZDJcdTcyZDRcdTcyZGFcdTcyY2NcdTcyZDFcdTczYTRcdTczYTFcdTczYWRcdTczYTZc''@;'; put 'put ''dTczYTJcdTczYTBcdTczYWNcdTczOWRcdTc0ZGRcdTc0ZThcdTc1M2ZcdTc1NDBcdTc1M2VcdTc1OGNcdTc1OThcdTc2YWZcdTc2ZjNcdTc2ZjFcdTc2ZjBcdTc2ZjVcdTc3ZjhcdTc3ZmNcdTc3ZjlcdTc3ZmJcdTc3ZmEiXSxbImNkYTEiLCJcdTc3ZjdcdTc5NDJcdTc5M2ZcdTc5YzVcdTdh''@;'; put 'put ''NzhcdTdhN2JcdTdhZmJcdTdjNzVcdTdjZmRcdTgwMzVcdTgwOGZcdTgwYWVcdTgwYTNcdTgwYjhcdTgwYjVcdTgwYWRcdTgyMjBcdTgyYTBcdTgyYzBcdTgyYWJcdTgyOWFcdTgyOThcdTgyOWJcdTgyYjVcdTgyYTdcdTgyYWVcdTgyYmNcdTgyOWVcdTgyYmFcdTgyYjRcdTgyYThcdTgyYTFc''@;'; put 'put ''dTgyYTlcdTgyYzJcdTgyYTRcdTgyYzNcdTgyYjZcdTgyYTJcdTg2NzBcdTg2NmZcdTg2NmRcdTg2NmVcdThjNTZcdThmZDJcdThmY2JcdThmZDNcdThmY2RcdThmZDZcdThmZDVcdThmZDdcdTkwYjJcdTkwYjRcdTkwYWZcdTkwYjNcdTkwYjBcdTk2MzlcdTk2M2RcdTk2M2NcdTk2M2FcdTk2''@;'; put 'put ''NDNcdTRmY2RcdTRmYzVcdTRmZDNcdTRmYjJcdTRmYzlcdTRmY2JcdTRmYzFcdTRmZDRcdTRmZGNcdTRmZDlcdTRmYmJcdTRmYjNcdTRmZGJcdTRmYzdcdTRmZDZcdTRmYmFcdTRmYzBcdTRmYjlcdTRmZWNcdTUyNDRcdTUyNDlcdTUyYzBcdTUyYzJcdTUzM2RcdTUzN2NcdTUzOTdcdTUzOTZc''@;'; put 'put ''dTUzOTlcdTUzOThcdTU0YmFcdTU0YTFcdTU0YWRcdTU0YTVcdTU0Y2YiXSxbImNlNDAiLCJcdTU0YzNcdTgzMGRcdTU0YjdcdTU0YWVcdTU0ZDZcdTU0YjZcdTU0YzVcdTU0YzZcdTU0YTBcdTU0NzBcdTU0YmNcdTU0YTJcdTU0YmVcdTU0NzJcdTU0ZGVcdTU0YjBcdTU3YjVcdTU3OWVcdTU3''@;'; put 'put ''OWZcdTU3YTRcdTU3OGNcdTU3OTdcdTU3OWRcdTU3OWJcdTU3OTRcdTU3OThcdTU3OGZcdTU3OTlcdTU3YTVcdTU3OWFcdTU3OTVcdTU4ZjRcdTU5MGRcdTU5NTNcdTU5ZTFcdTU5ZGVcdTU5ZWVcdTVhMDBcdTU5ZjFcdTU5ZGRcdTU5ZmFcdTU5ZmRcdTU5ZmNcdTU5ZjZcdTU5ZTRcdTU5ZjJc''@;'; put 'put ''dTU5ZjdcdTU5ZGJcdTU5ZTlcdTU5ZjNcdTU5ZjVcdTU5ZTBcdTU5ZmVcdTU5ZjRcdTU5ZWRcdTViYThcdTVjNGNcdTVjZDBcdTVjZDhcdTVjY2NcdTVjZDdcdTVjY2JcdTVjZGIiXSxbImNlYTEiLCJcdTVjZGVcdTVjZGFcdTVjYzlcdTVjYzdcdTVjY2FcdTVjZDZcdTVjZDNcdTVjZDRcdTVj''@;'; put 'put ''Y2ZcdTVjYzhcdTVjYzZcdTVjY2VcdTVjZGZcdTVjZjhcdTVkZjlcdTVlMjFcdTVlMjJcdTVlMjNcdTVlMjBcdTVlMjRcdTVlYjBcdTVlYTRcdTVlYTJcdTVlOWJcdTVlYTNcdTVlYTVcdTVmMDdcdTVmMmVcdTVmNTZcdTVmODZcdTYwMzdcdTYwMzlcdTYwNTRcdTYwNzJcdTYwNWVcdTYwNDVc''@;'; put 'put ''dTYwNTNcdTYwNDdcdTYwNDlcdTYwNWJcdTYwNGNcdTYwNDBcdTYwNDJcdTYwNWZcdTYwMjRcdTYwNDRcdTYwNThcdTYwNjZcdTYwNmVcdTYyNDJcdTYyNDNcdTYyY2ZcdTYzMGRcdTYzMGJcdTYyZjVcdTYzMGVcdTYzMDNcdTYyZWJcdTYyZjlcdTYzMGZcdTYzMGNcdTYyZjhcdTYyZjZcdTYz''@;'; put 'put ''MDBcdTYzMTNcdTYzMTRcdTYyZmFcdTYzMTVcdTYyZmJcdTYyZjBcdTY1NDFcdTY1NDNcdTY1YWFcdTY1YmZcdTY2MzZcdTY2MjFcdTY2MzJcdTY2MzVcdTY2MWNcdTY2MjZcdTY2MjJcdTY2MzNcdTY2MmJcdTY2M2FcdTY2MWRcdTY2MzRcdTY2MzlcdTY2MmVcdTY3MGZcdTY3MTBcdTY3YzFc''@;'; put 'put ''dTY3ZjJcdTY3YzhcdTY3YmEiXSxbImNmNDAiLCJcdTY3ZGNcdTY3YmJcdTY3ZjhcdTY3ZDhcdTY3YzBcdTY3YjdcdTY3YzVcdTY3ZWJcdTY3ZTRcdTY3ZGZcdTY3YjVcdTY3Y2RcdTY3YjNcdTY3ZjdcdTY3ZjZcdTY3ZWVcdTY3ZTNcdTY3YzJcdTY3YjlcdTY3Y2VcdTY3ZTdcdTY3ZjBcdTY3''@;'; put 'put ''YjJcdTY3ZmNcdTY3YzZcdTY3ZWRcdTY3Y2NcdTY3YWVcdTY3ZTZcdTY3ZGJcdTY3ZmFcdTY3YzlcdTY3Y2FcdTY3YzNcdTY3ZWFcdTY3Y2JcdTZiMjhcdTZiODJcdTZiODRcdTZiYjZcdTZiZDZcdTZiZDhcdTZiZTBcdTZjMjBcdTZjMjFcdTZkMjhcdTZkMzRcdTZkMmRcdTZkMWZcdTZkM2Nc''@;'; put 'put ''dTZkM2ZcdTZkMTJcdTZkMGFcdTZjZGFcdTZkMzNcdTZkMDRcdTZkMTlcdTZkM2FcdTZkMWFcdTZkMTFcdTZkMDBcdTZkMWRcdTZkNDIiXSxbImNmYTEiLCJcdTZkMDFcdTZkMThcdTZkMzdcdTZkMDNcdTZkMGZcdTZkNDBcdTZkMDdcdTZkMjBcdTZkMmNcdTZkMDhcdTZkMjJcdTZkMDlcdTZk''@;'; put 'put ''MTBcdTcwYjdcdTcwOWZcdTcwYmVcdTcwYjFcdTcwYjBcdTcwYTFcdTcwYjRcdTcwYjVcdTcwYTlcdTcyNDFcdTcyNDlcdTcyNGFcdTcyNmNcdTcyNzBcdTcyNzNcdTcyNmVcdTcyY2FcdTcyZTRcdTcyZThcdTcyZWJcdTcyZGZcdTcyZWFcdTcyZTZcdTcyZTNcdTczODVcdTczY2NcdTczYzJc''@;'; put 'put ''dTczYzhcdTczYzVcdTczYjlcdTczYjZcdTczYjVcdTczYjRcdTczZWJcdTczYmZcdTczYzdcdTczYmVcdTczYzNcdTczYzZcdTczYjhcdTczY2JcdTc0ZWNcdTc0ZWVcdTc1MmVcdTc1NDdcdTc1NDhcdTc1YTdcdTc1YWFcdTc2NzlcdTc2YzRcdTc3MDhcdTc3MDNcdTc3MDRcdTc3MDVcdTc3''@;'; put 'put ''MGFcdTc2ZjdcdTc2ZmJcdTc2ZmFcdTc3ZTdcdTc3ZThcdTc4MDZcdTc4MTFcdTc4MTJcdTc4MDVcdTc4MTBcdTc4MGZcdTc4MGVcdTc4MDlcdTc4MDNcdTc4MTNcdTc5NGFcdTc5NGNcdTc5NGJcdTc5NDVcdTc5NDRcdTc5ZDVcdTc5Y2RcdTc5Y2ZcdTc5ZDZcdTc5Y2VcdTdhODAiXSxbImQw''@;'; put 'put ''NDAiLCJcdTdhN2VcdTdhZDFcdTdiMDBcdTdiMDFcdTdjN2FcdTdjNzhcdTdjNzlcdTdjN2ZcdTdjODBcdTdjODFcdTdkMDNcdTdkMDhcdTdkMDFcdTdmNThcdTdmOTFcdTdmOGRcdTdmYmVcdTgwMDdcdTgwMGVcdTgwMGZcdTgwMTRcdTgwMzdcdTgwZDhcdTgwYzdcdTgwZTBcdTgwZDFcdTgw''@;'; put 'put ''YzhcdTgwYzJcdTgwZDBcdTgwYzVcdTgwZTNcdTgwZDlcdTgwZGNcdTgwY2FcdTgwZDVcdTgwYzlcdTgwY2ZcdTgwZDdcdTgwZTZcdTgwY2RcdTgxZmZcdTgyMjFcdTgyOTRcdTgyZDlcdTgyZmVcdTgyZjlcdTgzMDdcdTgyZThcdTgzMDBcdTgyZDVcdTgzM2FcdTgyZWJcdTgyZDZcdTgyZjRc''@;'; put 'put ''dTgyZWNcdTgyZTFcdTgyZjJcdTgyZjVcdTgzMGNcdTgyZmJcdTgyZjZcdTgyZjBcdTgyZWEiXSxbImQwYTEiLCJcdTgyZTRcdTgyZTBcdTgyZmFcdTgyZjNcdTgyZWRcdTg2NzdcdTg2NzRcdTg2N2NcdTg2NzNcdTg4NDFcdTg4NGVcdTg4NjdcdTg4NmFcdTg4NjlcdTg5ZDNcdThhMDRcdThh''@;'; put 'put ''MDdcdThkNzJcdThmZTNcdThmZTFcdThmZWVcdThmZTBcdTkwZjFcdTkwYmRcdTkwYmZcdTkwZDVcdTkwYzVcdTkwYmVcdTkwYzdcdTkwY2JcdTkwYzhcdTkxZDRcdTkxZDNcdTk2NTRcdTk2NGZcdTk2NTFcdTk2NTNcdTk2NGFcdTk2NGVcdTUwMWVcdTUwMDVcdTUwMDdcdTUwMTNcdTUwMjJc''@;'; put 'put ''dTUwMzBcdTUwMWJcdTRmZjVcdTRmZjRcdTUwMzNcdTUwMzdcdTUwMmNcdTRmZjZcdTRmZjdcdTUwMTdcdTUwMWNcdTUwMjBcdTUwMjdcdTUwMzVcdTUwMmZcdTUwMzFcdTUwMGVcdTUxNWFcdTUxOTRcdTUxOTNcdTUxY2FcdTUxYzRcdTUxYzVcdTUxYzhcdTUxY2VcdTUyNjFcdTUyNWFcdTUy''@;'; put 'put ''NTJcdTUyNWVcdTUyNWZcdTUyNTVcdTUyNjJcdTUyY2RcdTUzMGVcdTUzOWVcdTU1MjZcdTU0ZTJcdTU1MTdcdTU1MTJcdTU0ZTdcdTU0ZjNcdTU0ZTRcdTU1MWFcdTU0ZmZcdTU1MDRcdTU1MDhcdTU0ZWJcdTU1MTFcdTU1MDVcdTU0ZjEiXSxbImQxNDAiLCJcdTU1MGFcdTU0ZmJcdTU0Zjdc''@;'; put 'put ''dTU0ZjhcdTU0ZTBcdTU1MGVcdTU1MDNcdTU1MGJcdTU3MDFcdTU3MDJcdTU3Y2NcdTU4MzJcdTU3ZDVcdTU3ZDJcdTU3YmFcdTU3YzZcdTU3YmRcdTU3YmNcdTU3YjhcdTU3YjZcdTU3YmZcdTU3YzdcdTU3ZDBcdTU3YjlcdTU3YzFcdTU5MGVcdTU5NGFcdTVhMTlcdTVhMTZcdTVhMmRcdTVh''@;'; put 'put ''MmVcdTVhMTVcdTVhMGZcdTVhMTdcdTVhMGFcdTVhMWVcdTVhMzNcdTViNmNcdTViYTdcdTViYWRcdTViYWNcdTVjMDNcdTVjNTZcdTVjNTRcdTVjZWNcdTVjZmZcdTVjZWVcdTVjZjFcdTVjZjdcdTVkMDBcdTVjZjlcdTVlMjlcdTVlMjhcdTVlYThcdTVlYWVcdTVlYWFcdTVlYWNcdTVmMzNc''@;'; put 'put ''dTVmMzBcdTVmNjdcdTYwNWRcdTYwNWFcdTYwNjciXSxbImQxYTEiLCJcdTYwNDFcdTYwYTJcdTYwODhcdTYwODBcdTYwOTJcdTYwODFcdTYwOWRcdTYwODNcdTYwOTVcdTYwOWJcdTYwOTdcdTYwODdcdTYwOWNcdTYwOGVcdTYyMTlcdTYyNDZcdTYyZjJcdTYzMTBcdTYzNTZcdTYzMmNcdTYz''@;'; put 'put ''NDRcdTYzNDVcdTYzMzZcdTYzNDNcdTYzZTRcdTYzMzlcdTYzNGJcdTYzNGFcdTYzM2NcdTYzMjlcdTYzNDFcdTYzMzRcdTYzNThcdTYzNTRcdTYzNTlcdTYzMmRcdTYzNDdcdTYzMzNcdTYzNWFcdTYzNTFcdTYzMzhcdTYzNTdcdTYzNDBcdTYzNDhcdTY1NGFcdTY1NDZcdTY1YzZcdTY1YzNc''@;'; put 'put ''dTY1YzRcdTY1YzJcdTY2NGFcdTY2NWZcdTY2NDdcdTY2NTFcdTY3MTJcdTY3MTNcdTY4MWZcdTY4MWFcdTY4NDlcdTY4MzJcdTY4MzNcdTY4M2JcdTY4NGJcdTY4NGZcdTY4MTZcdTY4MzFcdTY4MWNcdTY4MzVcdTY4MmJcdTY4MmRcdTY4MmZcdTY4NGVcdTY4NDRcdTY4MzRcdTY4MWRcdTY4''@;'; put 'put ''MTJcdTY4MTRcdTY4MjZcdTY4MjhcdTY4MmVcdTY4NGRcdTY4M2FcdTY4MjVcdTY4MjBcdTZiMmNcdTZiMmZcdTZiMmRcdTZiMzFcdTZiMzRcdTZiNmRcdTgwODJcdTZiODhcdTZiZTZcdTZiZTQiXSxbImQyNDAiLCJcdTZiZThcdTZiZTNcdTZiZTJcdTZiZTdcdTZjMjVcdTZkN2FcdTZkNjNc''@;'; put 'put ''dTZkNjRcdTZkNzZcdTZkMGRcdTZkNjFcdTZkOTJcdTZkNThcdTZkNjJcdTZkNmRcdTZkNmZcdTZkOTFcdTZkOGRcdTZkZWZcdTZkN2ZcdTZkODZcdTZkNWVcdTZkNjdcdTZkNjBcdTZkOTdcdTZkNzBcdTZkN2NcdTZkNWZcdTZkODJcdTZkOThcdTZkMmZcdTZkNjhcdTZkOGJcdTZkN2VcdTZk''@;'; put 'put ''ODBcdTZkODRcdTZkMTZcdTZkODNcdTZkN2JcdTZkN2RcdTZkNzVcdTZkOTBcdTcwZGNcdTcwZDNcdTcwZDFcdTcwZGRcdTcwY2JcdTdmMzlcdTcwZTJcdTcwZDdcdTcwZDJcdTcwZGVcdTcwZTBcdTcwZDRcdTcwY2RcdTcwYzVcdTcwYzZcdTcwYzdcdTcwZGFcdTcwY2VcdTcwZTFcdTcyNDJc''@;'; put 'put ''dTcyNzgiXSxbImQyYTEiLCJcdTcyNzdcdTcyNzZcdTczMDBcdTcyZmFcdTcyZjRcdTcyZmVcdTcyZjZcdTcyZjNcdTcyZmJcdTczMDFcdTczZDNcdTczZDlcdTczZTVcdTczZDZcdTczYmNcdTczZTdcdTczZTNcdTczZTlcdTczZGNcdTczZDJcdTczZGJcdTczZDRcdTczZGRcdTczZGFcdTcz''@;'; put 'put ''ZDdcdTczZDhcdTczZThcdTc0ZGVcdTc0ZGZcdTc0ZjRcdTc0ZjVcdTc1MjFcdTc1NWJcdTc1NWZcdTc1YjBcdTc1YzFcdTc1YmJcdTc1YzRcdTc1YzBcdTc1YmZcdTc1YjZcdTc1YmFcdTc2OGFcdTc2YzlcdTc3MWRcdTc3MWJcdTc3MTBcdTc3MTNcdTc3MTJcdTc3MjNcdTc3MTFcdTc3MTVc''@;'; put 'put ''dTc3MTlcdTc3MWFcdTc3MjJcdTc3MjdcdTc4MjNcdTc4MmNcdTc4MjJcdTc4MzVcdTc4MmZcdTc4MjhcdTc4MmVcdTc4MmJcdTc4MjFcdTc4MjlcdTc4MzNcdTc4MmFcdTc4MzFcdTc5NTRcdTc5NWJcdTc5NGZcdTc5NWNcdTc5NTNcdTc5NTJcdTc5NTFcdTc5ZWJcdTc5ZWNcdTc5ZTBcdTc5''@;'; put 'put ''ZWVcdTc5ZWRcdTc5ZWFcdTc5ZGNcdTc5ZGVcdTc5ZGRcdTdhODZcdTdhODlcdTdhODVcdTdhOGJcdTdhOGNcdTdhOGFcdTdhODdcdTdhZDhcdTdiMTAiXSxbImQzNDAiLCJcdTdiMDRcdTdiMTNcdTdiMDVcdTdiMGZcdTdiMDhcdTdiMGFcdTdiMGVcdTdiMDlcdTdiMTJcdTdjODRcdTdjOTFc''@;'; put 'put ''dTdjOGFcdTdjOGNcdTdjODhcdTdjOGRcdTdjODVcdTdkMWVcdTdkMWRcdTdkMTFcdTdkMGVcdTdkMThcdTdkMTZcdTdkMTNcdTdkMWZcdTdkMTJcdTdkMGZcdTdkMGNcdTdmNWNcdTdmNjFcdTdmNWVcdTdmNjBcdTdmNWRcdTdmNWJcdTdmOTZcdTdmOTJcdTdmYzNcdTdmYzJcdTdmYzBcdTgw''@;'; put 'put ''MTZcdTgwM2VcdTgwMzlcdTgwZmFcdTgwZjJcdTgwZjlcdTgwZjVcdTgxMDFcdTgwZmJcdTgxMDBcdTgyMDFcdTgyMmZcdTgyMjVcdTgzMzNcdTgzMmRcdTgzNDRcdTgzMTlcdTgzNTFcdTgzMjVcdTgzNTZcdTgzM2ZcdTgzNDFcdTgzMjZcdTgzMWNcdTgzMjIiXSxbImQzYTEiLCJcdTgzNDJc''@;'; put 'put ''dTgzNGVcdTgzMWJcdTgzMmFcdTgzMDhcdTgzM2NcdTgzNGRcdTgzMTZcdTgzMjRcdTgzMjBcdTgzMzdcdTgzMmZcdTgzMjlcdTgzNDdcdTgzNDVcdTgzNGNcdTgzNTNcdTgzMWVcdTgzMmNcdTgzNGJcdTgzMjdcdTgzNDhcdTg2NTNcdTg2NTJcdTg2YTJcdTg2YThcdTg2OTZcdTg2OGRcdTg2''@;'; put 'put ''OTFcdTg2OWVcdTg2ODdcdTg2OTdcdTg2ODZcdTg2OGJcdTg2OWFcdTg2ODVcdTg2YTVcdTg2OTlcdTg2YTFcdTg2YTdcdTg2OTVcdTg2OThcdTg2OGVcdTg2OWRcdTg2OTBcdTg2OTRcdTg4NDNcdTg4NDRcdTg4NmRcdTg4NzVcdTg4NzZcdTg4NzJcdTg4ODBcdTg4NzFcdTg4N2ZcdTg4NmZc''@;'; put 'put ''dTg4ODNcdTg4N2VcdTg4NzRcdTg4N2NcdThhMTJcdThjNDdcdThjNTdcdThjN2JcdThjYTRcdThjYTNcdThkNzZcdThkNzhcdThkYjVcdThkYjdcdThkYjZcdThlZDFcdThlZDNcdThmZmVcdThmZjVcdTkwMDJcdThmZmZcdThmZmJcdTkwMDRcdThmZmNcdThmZjZcdTkwZDZcdTkwZTBcdTkw''@;'; put 'put ''ZDlcdTkwZGFcdTkwZTNcdTkwZGZcdTkwZTVcdTkwZDhcdTkwZGJcdTkwZDdcdTkwZGNcdTkwZTRcdTkxNTAiXSxbImQ0NDAiLCJcdTkxNGVcdTkxNGZcdTkxZDVcdTkxZTJcdTkxZGFcdTk2NWNcdTk2NWZcdTk2YmNcdTk4ZTNcdTlhZGZcdTliMmZcdTRlN2ZcdTUwNzBcdTUwNmFcdTUwNjFc''@;'; put 'put ''dTUwNWVcdTUwNjBcdTUwNTNcdTUwNGJcdTUwNWRcdTUwNzJcdTUwNDhcdTUwNGRcdTUwNDFcdTUwNWJcdTUwNGFcdTUwNjJcdTUwMTVcdTUwNDVcdTUwNWZcdTUwNjlcdTUwNmJcdTUwNjNcdTUwNjRcdTUwNDZcdTUwNDBcdTUwNmVcdTUwNzNcdTUwNTdcdTUwNTFcdTUxZDBcdTUyNmJcdTUy''@;'; put 'put ''NmRcdTUyNmNcdTUyNmVcdTUyZDZcdTUyZDNcdTUzMmRcdTUzOWNcdTU1NzVcdTU1NzZcdTU1M2NcdTU1NGRcdTU1NTBcdTU1MzRcdTU1MmFcdTU1NTFcdTU1NjJcdTU1MzZcdTU1MzVcdTU1MzBcdTU1NTJcdTU1NDUiXSxbImQ0YTEiLCJcdTU1MGNcdTU1MzJcdTU1NjVcdTU1NGVcdTU1Mzlc''@;'; put 'put ''dTU1NDhcdTU1MmRcdTU1M2JcdTU1NDBcdTU1NGJcdTU3MGFcdTU3MDdcdTU3ZmJcdTU4MTRcdTU3ZTJcdTU3ZjZcdTU3ZGNcdTU3ZjRcdTU4MDBcdTU3ZWRcdTU3ZmRcdTU4MDhcdTU3ZjhcdTU4MGJcdTU3ZjNcdTU3Y2ZcdTU4MDdcdTU3ZWVcdTU3ZTNcdTU3ZjJcdTU3ZTVcdTU3ZWNcdTU3''@;'; put 'put ''ZTFcdTU4MGVcdTU3ZmNcdTU4MTBcdTU3ZTdcdTU4MDFcdTU4MGNcdTU3ZjFcdTU3ZTlcdTU3ZjBcdTU4MGRcdTU4MDRcdTU5NWNcdTVhNjBcdTVhNThcdTVhNTVcdTVhNjdcdTVhNWVcdTVhMzhcdTVhMzVcdTVhNmRcdTVhNTBcdTVhNWZcdTVhNjVcdTVhNmNcdTVhNTNcdTVhNjRcdTVhNTdc''@;'; put 'put ''dTVhNDNcdTVhNWRcdTVhNTJcdTVhNDRcdTVhNWJcdTVhNDhcdTVhOGVcdTVhM2VcdTVhNGRcdTVhMzlcdTVhNGNcdTVhNzBcdTVhNjlcdTVhNDdcdTVhNTFcdTVhNTZcdTVhNDJcdTVhNWNcdTViNzJcdTViNmVcdTViYzFcdTViYzBcdTVjNTlcdTVkMWVcdTVkMGJcdTVkMWRcdTVkMWFcdTVk''@;'; put 'put ''MjBcdTVkMGNcdTVkMjhcdTVkMGRcdTVkMjZcdTVkMjVcdTVkMGYiXSxbImQ1NDAiLCJcdTVkMzBcdTVkMTJcdTVkMjNcdTVkMWZcdTVkMmVcdTVlM2VcdTVlMzRcdTVlYjFcdTVlYjRcdTVlYjlcdTVlYjJcdTVlYjNcdTVmMzZcdTVmMzhcdTVmOWJcdTVmOTZcdTVmOWZcdTYwOGFcdTYwOTBc''@;'; put 'put ''dTYwODZcdTYwYmVcdTYwYjBcdTYwYmFcdTYwZDNcdTYwZDRcdTYwY2ZcdTYwZTRcdTYwZDlcdTYwZGRcdTYwYzhcdTYwYjFcdTYwZGJcdTYwYjdcdTYwY2FcdTYwYmZcdTYwYzNcdTYwY2RcdTYwYzBcdTYzMzJcdTYzNjVcdTYzOGFcdTYzODJcdTYzN2RcdTYzYmRcdTYzOWVcdTYzYWRcdTYz''@;'; put 'put ''OWRcdTYzOTdcdTYzYWJcdTYzOGVcdTYzNmZcdTYzODdcdTYzOTBcdTYzNmVcdTYzYWZcdTYzNzVcdTYzOWNcdTYzNmRcdTYzYWVcdTYzN2NcdTYzYTRcdTYzM2JcdTYzOWYiXSxbImQ1YTEiLCJcdTYzNzhcdTYzODVcdTYzODFcdTYzOTFcdTYzOGRcdTYzNzBcdTY1NTNcdTY1Y2RcdTY2NjVc''@;'; put 'put ''dTY2NjFcdTY2NWJcdTY2NTlcdTY2NWNcdTY2NjJcdTY3MThcdTY4NzlcdTY4ODdcdTY4OTBcdTY4OWNcdTY4NmRcdTY4NmVcdTY4YWVcdTY4YWJcdTY5NTZcdTY4NmZcdTY4YTNcdTY4YWNcdTY4YTlcdTY4NzVcdTY4NzRcdTY4YjJcdTY4OGZcdTY4NzdcdTY4OTJcdTY4N2NcdTY4NmJcdTY4''@;'; put 'put ''NzJcdTY4YWFcdTY4ODBcdTY4NzFcdTY4N2VcdTY4OWJcdTY4OTZcdTY4OGJcdTY4YTBcdTY4ODlcdTY4YTRcdTY4NzhcdTY4N2JcdTY4OTFcdTY4OGNcdTY4OGFcdTY4N2RcdTZiMzZcdTZiMzNcdTZiMzdcdTZiMzhcdTZiOTFcdTZiOGZcdTZiOGRcdTZiOGVcdTZiOGNcdTZjMmFcdTZkYzBc''@;'; put 'put ''dTZkYWJcdTZkYjRcdTZkYjNcdTZlNzRcdTZkYWNcdTZkZTlcdTZkZTJcdTZkYjdcdTZkZjZcdTZkZDRcdTZlMDBcdTZkYzhcdTZkZTBcdTZkZGZcdTZkZDZcdTZkYmVcdTZkZTVcdTZkZGNcdTZkZGRcdTZkZGJcdTZkZjRcdTZkY2FcdTZkYmRcdTZkZWRcdTZkZjBcdTZkYmFcdTZkZDVcdTZk''@;'; put 'put ''YzJcdTZkY2ZcdTZkYzkiXSxbImQ2NDAiLCJcdTZkZDBcdTZkZjJcdTZkZDNcdTZkZmRcdTZkZDdcdTZkY2RcdTZkZTNcdTZkYmJcdTcwZmFcdTcxMGRcdTcwZjdcdTcxMTdcdTcwZjRcdTcxMGNcdTcwZjBcdTcxMDRcdTcwZjNcdTcxMTBcdTcwZmNcdTcwZmZcdTcxMDZcdTcxMTNcdTcxMDBc''@;'; put 'put ''dTcwZjhcdTcwZjZcdTcxMGJcdTcxMDJcdTcxMGVcdTcyN2VcdTcyN2JcdTcyN2NcdTcyN2ZcdTczMWRcdTczMTdcdTczMDdcdTczMTFcdTczMThcdTczMGFcdTczMDhcdTcyZmZcdTczMGZcdTczMWVcdTczODhcdTczZjZcdTczZjhcdTczZjVcdTc0MDRcdTc0MDFcdTczZmRcdTc0MDdcdTc0''@;'; put 'put ''MDBcdTczZmFcdTczZmNcdTczZmZcdTc0MGNcdTc0MGJcdTczZjRcdTc0MDhcdTc1NjRcdTc1NjNcdTc1Y2VcdTc1ZDJcdTc1Y2YiXSxbImQ2YTEiLCJcdTc1Y2JcdTc1Y2NcdTc1ZDFcdTc1ZDBcdTc2OGZcdTc2ODlcdTc2ZDNcdTc3MzlcdTc3MmZcdTc3MmRcdTc3MzFcdTc3MzJcdTc3MzRc''@;'; put 'put ''dTc3MzNcdTc3M2RcdTc3MjVcdTc3M2JcdTc3MzVcdTc4NDhcdTc4NTJcdTc4NDlcdTc4NGRcdTc4NGFcdTc4NGNcdTc4MjZcdTc4NDVcdTc4NTBcdTc5NjRcdTc5NjdcdTc5NjlcdTc5NmFcdTc5NjNcdTc5NmJcdTc5NjFcdTc5YmJcdTc5ZmFcdTc5ZjhcdTc5ZjZcdTc5ZjdcdTdhOGZcdTdh''@;'; put 'put ''OTRcdTdhOTBcdTdiMzVcdTdiNDdcdTdiMzRcdTdiMjVcdTdiMzBcdTdiMjJcdTdiMjRcdTdiMzNcdTdiMThcdTdiMmFcdTdiMWRcdTdiMzFcdTdiMmJcdTdiMmRcdTdiMmZcdTdiMzJcdTdiMzhcdTdiMWFcdTdiMjNcdTdjOTRcdTdjOThcdTdjOTZcdTdjYTNcdTdkMzVcdTdkM2RcdTdkMzhc''@;'; put 'put ''dTdkMzZcdTdkM2FcdTdkNDVcdTdkMmNcdTdkMjlcdTdkNDFcdTdkNDdcdTdkM2VcdTdkM2ZcdTdkNGFcdTdkM2JcdTdkMjhcdTdmNjNcdTdmOTVcdTdmOWNcdTdmOWRcdTdmOWJcdTdmY2FcdTdmY2JcdTdmY2RcdTdmZDBcdTdmZDFcdTdmYzdcdTdmY2ZcdTdmYzlcdTgwMWYiXSxbImQ3NDAi''@;'; put 'put ''LCJcdTgwMWVcdTgwMWJcdTgwNDdcdTgwNDNcdTgwNDhcdTgxMThcdTgxMjVcdTgxMTlcdTgxMWJcdTgxMmRcdTgxMWZcdTgxMmNcdTgxMWVcdTgxMjFcdTgxMTVcdTgxMjdcdTgxMWRcdTgxMjJcdTgyMTFcdTgyMzhcdTgyMzNcdTgyM2FcdTgyMzRcdTgyMzJcdTgyNzRcdTgzOTBcdTgzYTNc''@;'; put 'put ''dTgzYThcdTgzOGRcdTgzN2FcdTgzNzNcdTgzYTRcdTgzNzRcdTgzOGZcdTgzODFcdTgzOTVcdTgzOTlcdTgzNzVcdTgzOTRcdTgzYTlcdTgzN2RcdTgzODNcdTgzOGNcdTgzOWRcdTgzOWJcdTgzYWFcdTgzOGJcdTgzN2VcdTgzYTVcdTgzYWZcdTgzODhcdTgzOTdcdTgzYjBcdTgzN2ZcdTgz''@;'; put 'put ''YTZcdTgzODdcdTgzYWVcdTgzNzZcdTgzOWFcdTg2NTlcdTg2NTZcdTg2YmZcdTg2YjciXSxbImQ3YTEiLCJcdTg2YzJcdTg2YzFcdTg2YzVcdTg2YmFcdTg2YjBcdTg2YzhcdTg2YjlcdTg2YjNcdTg2YjhcdTg2Y2NcdTg2YjRcdTg2YmJcdTg2YmNcdTg2YzNcdTg2YmRcdTg2YmVcdTg4NTJc''@;'; put 'put ''dTg4ODlcdTg4OTVcdTg4YThcdTg4YTJcdTg4YWFcdTg4OWFcdTg4OTFcdTg4YTFcdTg4OWZcdTg4OThcdTg4YTdcdTg4OTlcdTg4OWJcdTg4OTdcdTg4YTRcdTg4YWNcdTg4OGNcdTg4OTNcdTg4OGVcdTg5ODJcdTg5ZDZcdTg5ZDlcdTg5ZDVcdThhMzBcdThhMjdcdThhMmNcdThhMWVcdThj''@;'; put 'put ''MzlcdThjM2JcdThjNWNcdThjNWRcdThjN2RcdThjYTVcdThkN2RcdThkN2JcdThkNzlcdThkYmNcdThkYzJcdThkYjlcdThkYmZcdThkYzFcdThlZDhcdThlZGVcdThlZGRcdThlZGNcdThlZDdcdThlZTBcdThlZTFcdTkwMjRcdTkwMGJcdTkwMTFcdTkwMWNcdTkwMGNcdTkwMjFcdTkwZWZc''@;'; put 'put ''dTkwZWFcdTkwZjBcdTkwZjRcdTkwZjJcdTkwZjNcdTkwZDRcdTkwZWJcdTkwZWNcdTkwZTlcdTkxNTZcdTkxNThcdTkxNWFcdTkxNTNcdTkxNTVcdTkxZWNcdTkxZjRcdTkxZjFcdTkxZjNcdTkxZjhcdTkxZTRcdTkxZjlcdTkxZWEiXSxbImQ4NDAiLCJcdTkxZWJcdTkxZjdcdTkxZThcdTkx''@;'; put 'put ''ZWVcdTk1N2FcdTk1ODZcdTk1ODhcdTk2N2NcdTk2NmRcdTk2NmJcdTk2NzFcdTk2NmZcdTk2YmZcdTk3NmFcdTk4MDRcdTk4ZTVcdTk5OTdcdTUwOWJcdTUwOTVcdTUwOTRcdTUwOWVcdTUwOGJcdTUwYTNcdTUwODNcdTUwOGNcdTUwOGVcdTUwOWRcdTUwNjhcdTUwOWNcdTUwOTJcdTUwODJc''@;'; put 'put ''dTUwODdcdTUxNWZcdTUxZDRcdTUzMTJcdTUzMTFcdTUzYTRcdTUzYTdcdTU1OTFcdTU1YThcdTU1YTVcdTU1YWRcdTU1NzdcdTU2NDVcdTU1YTJcdTU1OTNcdTU1ODhcdTU1OGZcdTU1YjVcdTU1ODFcdTU1YTNcdTU1OTJcdTU1YTRcdTU1N2RcdTU1OGNcdTU1YTZcdTU1N2ZcdTU1OTVcdTU1''@;'; put 'put ''YTFcdTU1OGVcdTU3MGNcdTU4MjlcdTU4MzciXSxbImQ4YTEiLCJcdTU4MTlcdTU4MWVcdTU4MjdcdTU4MjNcdTU4MjhcdTU3ZjVcdTU4NDhcdTU4MjVcdTU4MWNcdTU4MWJcdTU4MzNcdTU4M2ZcdTU4MzZcdTU4MmVcdTU4MzlcdTU4MzhcdTU4MmRcdTU4MmNcdTU4M2JcdTU5NjFcdTVhYWZc''@;'; put 'put ''dTVhOTRcdTVhOWZcdTVhN2FcdTVhYTJcdTVhOWVcdTVhNzhcdTVhYTZcdTVhN2NcdTVhYTVcdTVhYWNcdTVhOTVcdTVhYWVcdTVhMzdcdTVhODRcdTVhOGFcdTVhOTdcdTVhODNcdTVhOGJcdTVhYTlcdTVhN2JcdTVhN2RcdTVhOGNcdTVhOWNcdTVhOGZcdTVhOTNcdTVhOWRcdTViZWFcdTVi''@;'; put 'put ''Y2RcdTViY2JcdTViZDRcdTViZDFcdTViY2FcdTViY2VcdTVjMGNcdTVjMzBcdTVkMzdcdTVkNDNcdTVkNmJcdTVkNDFcdTVkNGJcdTVkM2ZcdTVkMzVcdTVkNTFcdTVkNGVcdTVkNTVcdTVkMzNcdTVkM2FcdTVkNTJcdTVkM2RcdTVkMzFcdTVkNTlcdTVkNDJcdTVkMzlcdTVkNDlcdTVkMzhc''@;'; put 'put ''dTVkM2NcdTVkMzJcdTVkMzZcdTVkNDBcdTVkNDVcdTVlNDRcdTVlNDFcdTVmNThcdTVmYTZcdTVmYTVcdTVmYWJcdTYwYzlcdTYwYjlcdTYwY2NcdTYwZTJcdTYwY2VcdTYwYzRcdTYxMTQiXSxbImQ5NDAiLCJcdTYwZjJcdTYxMGFcdTYxMTZcdTYxMDVcdTYwZjVcdTYxMTNcdTYwZjhcdTYw''@;'; put 'put ''ZmNcdTYwZmVcdTYwYzFcdTYxMDNcdTYxMThcdTYxMWRcdTYxMTBcdTYwZmZcdTYxMDRcdTYxMGJcdTYyNGFcdTYzOTRcdTYzYjFcdTYzYjBcdTYzY2VcdTYzZTVcdTYzZThcdTYzZWZcdTYzYzNcdTY0OWRcdTYzZjNcdTYzY2FcdTYzZTBcdTYzZjZcdTYzZDVcdTYzZjJcdTYzZjVcdTY0NjFc''@;'; put 'put ''dTYzZGZcdTYzYmVcdTYzZGRcdTYzZGNcdTYzYzRcdTYzZDhcdTYzZDNcdTYzYzJcdTYzYzdcdTYzY2NcdTYzY2JcdTYzYzhcdTYzZjBcdTYzZDdcdTYzZDlcdTY1MzJcdTY1NjdcdTY1NmFcdTY1NjRcdTY1NWNcdTY1NjhcdTY1NjVcdTY1OGNcdTY1OWRcdTY1OWVcdTY1YWVcdTY1ZDBcdTY1''@;'; put 'put ''ZDIiXSxbImQ5YTEiLCJcdTY2N2NcdTY2NmNcdTY2N2JcdTY2ODBcdTY2NzFcdTY2NzlcdTY2NmFcdTY2NzJcdTY3MDFcdTY5MGNcdTY4ZDNcdTY5MDRcdTY4ZGNcdTY5MmFcdTY4ZWNcdTY4ZWFcdTY4ZjFcdTY5MGZcdTY4ZDZcdTY4ZjdcdTY4ZWJcdTY4ZTRcdTY4ZjZcdTY5MTNcdTY5MTBc''@;'; put 'put ''dTY4ZjNcdTY4ZTFcdTY5MDdcdTY4Y2NcdTY5MDhcdTY5NzBcdTY4YjRcdTY5MTFcdTY4ZWZcdTY4YzZcdTY5MTRcdTY4ZjhcdTY4ZDBcdTY4ZmRcdTY4ZmNcdTY4ZThcdTY5MGJcdTY5MGFcdTY5MTdcdTY4Y2VcdTY4YzhcdTY4ZGRcdTY4ZGVcdTY4ZTZcdTY4ZjRcdTY4ZDFcdTY5MDZcdTY4''@;'; put 'put ''ZDRcdTY4ZTlcdTY5MTVcdTY5MjVcdTY4YzdcdTZiMzlcdTZiM2JcdTZiM2ZcdTZiM2NcdTZiOTRcdTZiOTdcdTZiOTlcdTZiOTVcdTZiYmRcdTZiZjBcdTZiZjJcdTZiZjNcdTZjMzBcdTZkZmNcdTZlNDZcdTZlNDdcdTZlMWZcdTZlNDlcdTZlODhcdTZlM2NcdTZlM2RcdTZlNDVcdTZlNjJc''@;'; put 'put ''dTZlMmJcdTZlM2ZcdTZlNDFcdTZlNWRcdTZlNzNcdTZlMWNcdTZlMzNcdTZlNGJcdTZlNDBcdTZlNTFcdTZlM2JcdTZlMDNcdTZlMmVcdTZlNWUiXSxbImRhNDAiLCJcdTZlNjhcdTZlNWNcdTZlNjFcdTZlMzFcdTZlMjhcdTZlNjBcdTZlNzFcdTZlNmJcdTZlMzlcdTZlMjJcdTZlMzBcdTZl''@;'; put 'put ''NTNcdTZlNjVcdTZlMjdcdTZlNzhcdTZlNjRcdTZlNzdcdTZlNTVcdTZlNzlcdTZlNTJcdTZlNjZcdTZlMzVcdTZlMzZcdTZlNWFcdTcxMjBcdTcxMWVcdTcxMmZcdTcwZmJcdTcxMmVcdTcxMzFcdTcxMjNcdTcxMjVcdTcxMjJcdTcxMzJcdTcxMWZcdTcxMjhcdTcxM2FcdTcxMWJcdTcyNGJc''@;'; put 'put ''dTcyNWFcdTcyODhcdTcyODlcdTcyODZcdTcyODVcdTcyOGJcdTczMTJcdTczMGJcdTczMzBcdTczMjJcdTczMzFcdTczMzNcdTczMjdcdTczMzJcdTczMmRcdTczMjZcdTczMjNcdTczMzVcdTczMGNcdTc0MmVcdTc0MmNcdTc0MzBcdTc0MmJcdTc0MTYiXSxbImRhYTEiLCJcdTc0MWFcdTc0''@;'; put 'put ''MjFcdTc0MmRcdTc0MzFcdTc0MjRcdTc0MjNcdTc0MWRcdTc0MjlcdTc0MjBcdTc0MzJcdTc0ZmJcdTc1MmZcdTc1NmZcdTc1NmNcdTc1ZTdcdTc1ZGFcdTc1ZTFcdTc1ZTZcdTc1ZGRcdTc1ZGZcdTc1ZTRcdTc1ZDdcdTc2OTVcdTc2OTJcdTc2ZGFcdTc3NDZcdTc3NDdcdTc3NDRcdTc3NGRc''@;'; put 'put ''dTc3NDVcdTc3NGFcdTc3NGVcdTc3NGJcdTc3NGNcdTc3ZGVcdTc3ZWNcdTc4NjBcdTc4NjRcdTc4NjVcdTc4NWNcdTc4NmRcdTc4NzFcdTc4NmFcdTc4NmVcdTc4NzBcdTc4NjlcdTc4NjhcdTc4NWVcdTc4NjJcdTc5NzRcdTc5NzNcdTc5NzJcdTc5NzBcdTdhMDJcdTdhMGFcdTdhMDNcdTdh''@;'; put 'put ''MGNcdTdhMDRcdTdhOTlcdTdhZTZcdTdhZTRcdTdiNGFcdTdiM2JcdTdiNDRcdTdiNDhcdTdiNGNcdTdiNGVcdTdiNDBcdTdiNThcdTdiNDVcdTdjYTJcdTdjOWVcdTdjYThcdTdjYTFcdTdkNThcdTdkNmZcdTdkNjNcdTdkNTNcdTdkNTZcdTdkNjdcdTdkNmFcdTdkNGZcdTdkNmRcdTdkNWNc''@;'; put 'put ''dTdkNmJcdTdkNTJcdTdkNTRcdTdkNjlcdTdkNTFcdTdkNWZcdTdkNGVcdTdmM2VcdTdmM2ZcdTdmNjUiXSxbImRiNDAiLCJcdTdmNjZcdTdmYTJcdTdmYTBcdTdmYTFcdTdmZDdcdTgwNTFcdTgwNGZcdTgwNTBcdTgwZmVcdTgwZDRcdTgxNDNcdTgxNGFcdTgxNTJcdTgxNGZcdTgxNDdcdTgx''@;'; put 'put ''M2RcdTgxNGRcdTgxM2FcdTgxZTZcdTgxZWVcdTgxZjdcdTgxZjhcdTgxZjlcdTgyMDRcdTgyM2NcdTgyM2RcdTgyM2ZcdTgyNzVcdTgzM2JcdTgzY2ZcdTgzZjlcdTg0MjNcdTgzYzBcdTgzZThcdTg0MTJcdTgzZTdcdTgzZTRcdTgzZmNcdTgzZjZcdTg0MTBcdTgzYzZcdTgzYzhcdTgzZWJc''@;'; put 'put ''dTgzZTNcdTgzYmZcdTg0MDFcdTgzZGRcdTgzZTVcdTgzZDhcdTgzZmZcdTgzZTFcdTgzY2JcdTgzY2VcdTgzZDZcdTgzZjVcdTgzYzlcdTg0MDlcdTg0MGZcdTgzZGVcdTg0MTFcdTg0MDZcdTgzYzJcdTgzZjMiXSxbImRiYTEiLCJcdTgzZDVcdTgzZmFcdTgzYzdcdTgzZDFcdTgzZWFcdTg0''@;'; put 'put ''MTNcdTgzYzNcdTgzZWNcdTgzZWVcdTgzYzRcdTgzZmJcdTgzZDdcdTgzZTJcdTg0MWJcdTgzZGJcdTgzZmVcdTg2ZDhcdTg2ZTJcdTg2ZTZcdTg2ZDNcdTg2ZTNcdTg2ZGFcdTg2ZWFcdTg2ZGRcdTg2ZWJcdTg2ZGNcdTg2ZWNcdTg2ZTlcdTg2ZDdcdTg2ZThcdTg2ZDFcdTg4NDhcdTg4NTZc''@;'; put 'put ''dTg4NTVcdTg4YmFcdTg4ZDdcdTg4YjlcdTg4YjhcdTg4YzBcdTg4YmVcdTg4YjZcdTg4YmNcdTg4YjdcdTg4YmRcdTg4YjJcdTg5MDFcdTg4YzlcdTg5OTVcdTg5OThcdTg5OTdcdTg5ZGRcdTg5ZGFcdTg5ZGJcdThhNGVcdThhNGRcdThhMzlcdThhNTlcdThhNDBcdThhNTdcdThhNThcdThh''@;'; put 'put ''NDRcdThhNDVcdThhNTJcdThhNDhcdThhNTFcdThhNGFcdThhNGNcdThhNGZcdThjNWZcdThjODFcdThjODBcdThjYmFcdThjYmVcdThjYjBcdThjYjlcdThjYjVcdThkODRcdThkODBcdThkODlcdThkZDhcdThkZDNcdThkY2RcdThkYzdcdThkZDZcdThkZGNcdThkY2ZcdThkZDVcdThkZDlc''@;'; put 'put ''dThkYzhcdThkZDdcdThkYzVcdThlZWZcdThlZjdcdThlZmEiXSxbImRjNDAiLCJcdThlZjlcdThlZTZcdThlZWVcdThlZTVcdThlZjVcdThlZTdcdThlZThcdThlZjZcdThlZWJcdThlZjFcdThlZWNcdThlZjRcdThlZTlcdTkwMmRcdTkwMzRcdTkwMmZcdTkxMDZcdTkxMmNcdTkxMDRcdTkw''@;'; put 'put ''ZmZcdTkwZmNcdTkxMDhcdTkwZjlcdTkwZmJcdTkxMDFcdTkxMDBcdTkxMDdcdTkxMDVcdTkxMDNcdTkxNjFcdTkxNjRcdTkxNWZcdTkxNjJcdTkxNjBcdTkyMDFcdTkyMGFcdTkyMjVcdTkyMDNcdTkyMWFcdTkyMjZcdTkyMGZcdTkyMGNcdTkyMDBcdTkyMTJcdTkxZmZcdTkxZmRcdTkyMDZc''@;'; put 'put ''dTkyMDRcdTkyMjdcdTkyMDJcdTkyMWNcdTkyMjRcdTkyMTlcdTkyMTdcdTkyMDVcdTkyMTZcdTk1N2JcdTk1OGRcdTk1OGNcdTk1OTBcdTk2ODdcdTk2N2VcdTk2ODgiXSxbImRjYTEiLCJcdTk2ODlcdTk2ODNcdTk2ODBcdTk2YzJcdTk2YzhcdTk2YzNcdTk2ZjFcdTk2ZjBcdTk3NmNcdTk3''@;'; put 'put ''NzBcdTk3NmVcdTk4MDdcdTk4YTlcdTk4ZWJcdTljZTZcdTllZjlcdTRlODNcdTRlODRcdTRlYjZcdTUwYmRcdTUwYmZcdTUwYzZcdTUwYWVcdTUwYzRcdTUwY2FcdTUwYjRcdTUwYzhcdTUwYzJcdTUwYjBcdTUwYzFcdTUwYmFcdTUwYjFcdTUwY2JcdTUwYzlcdTUwYjZcdTUwYjhcdTUxZDdc''@;'; put 'put ''dTUyN2FcdTUyNzhcdTUyN2JcdTUyN2NcdTU1YzNcdTU1ZGJcdTU1Y2NcdTU1ZDBcdTU1Y2JcdTU1Y2FcdTU1ZGRcdTU1YzBcdTU1ZDRcdTU1YzRcdTU1ZTlcdTU1YmZcdTU1ZDJcdTU1OGRcdTU1Y2ZcdTU1ZDVcdTU1ZTJcdTU1ZDZcdTU1YzhcdTU1ZjJcdTU1Y2RcdTU1ZDlcdTU1YzJcdTU3''@;'; put 'put ''MTRcdTU4NTNcdTU4NjhcdTU4NjRcdTU4NGZcdTU4NGRcdTU4NDlcdTU4NmZcdTU4NTVcdTU4NGVcdTU4NWRcdTU4NTlcdTU4NjVcdTU4NWJcdTU4M2RcdTU4NjNcdTU4NzFcdTU4ZmNcdTVhYzdcdTVhYzRcdTVhY2JcdTVhYmFcdTVhYjhcdTVhYjFcdTVhYjVcdTVhYjBcdTVhYmZcdTVhYzhc''@;'; put 'put ''dTVhYmJcdTVhYzYiXSxbImRkNDAiLCJcdTVhYjdcdTVhYzBcdTVhY2FcdTVhYjRcdTVhYjZcdTVhY2RcdTVhYjlcdTVhOTBcdTViZDZcdTViZDhcdTViZDlcdTVjMWZcdTVjMzNcdTVkNzFcdTVkNjNcdTVkNGFcdTVkNjVcdTVkNzJcdTVkNmNcdTVkNWVcdTVkNjhcdTVkNjdcdTVkNjJcdTVk''@;'; put 'put ''ZjBcdTVlNGZcdTVlNGVcdTVlNGFcdTVlNGRcdTVlNGJcdTVlYzVcdTVlY2NcdTVlYzZcdTVlY2JcdTVlYzdcdTVmNDBcdTVmYWZcdTVmYWRcdTYwZjdcdTYxNDlcdTYxNGFcdTYxMmJcdTYxNDVcdTYxMzZcdTYxMzJcdTYxMmVcdTYxNDZcdTYxMmZcdTYxNGZcdTYxMjlcdTYxNDBcdTYyMjBc''@;'; put 'put ''dTkxNjhcdTYyMjNcdTYyMjVcdTYyMjRcdTYzYzVcdTYzZjFcdTYzZWJcdTY0MTBcdTY0MTJcdTY0MDlcdTY0MjBcdTY0MjQiXSxbImRkYTEiLCJcdTY0MzNcdTY0NDNcdTY0MWZcdTY0MTVcdTY0MThcdTY0MzlcdTY0MzdcdTY0MjJcdTY0MjNcdTY0MGNcdTY0MjZcdTY0MzBcdTY0MjhcdTY0''@;'; put 'put ''NDFcdTY0MzVcdTY0MmZcdTY0MGFcdTY0MWFcdTY0NDBcdTY0MjVcdTY0MjdcdTY0MGJcdTYzZTdcdTY0MWJcdTY0MmVcdTY0MjFcdTY0MGVcdTY1NmZcdTY1OTJcdTY1ZDNcdTY2ODZcdTY2OGNcdTY2OTVcdTY2OTBcdTY2OGJcdTY2OGFcdTY2OTlcdTY2OTRcdTY2NzhcdTY3MjBcdTY5NjZc''@;'; put 'put ''dTY5NWZcdTY5MzhcdTY5NGVcdTY5NjJcdTY5NzFcdTY5M2ZcdTY5NDVcdTY5NmFcdTY5MzlcdTY5NDJcdTY5NTdcdTY5NTlcdTY5N2FcdTY5NDhcdTY5NDlcdTY5MzVcdTY5NmNcdTY5MzNcdTY5M2RcdTY5NjVcdTY4ZjBcdTY5NzhcdTY5MzRcdTY5NjlcdTY5NDBcdTY5NmZcdTY5NDRcdTY5''@;'; put 'put ''NzZcdTY5NThcdTY5NDFcdTY5NzRcdTY5NGNcdTY5M2JcdTY5NGJcdTY5MzdcdTY5NWNcdTY5NGZcdTY5NTFcdTY5MzJcdTY5NTJcdTY5MmZcdTY5N2JcdTY5M2NcdTZiNDZcdTZiNDVcdTZiNDNcdTZiNDJcdTZiNDhcdTZiNDFcdTZiOWJcdWZhMGRcdTZiZmJcdTZiZmMiXSxbImRlNDAiLCJc''@;'; put 'put ''dTZiZjlcdTZiZjdcdTZiZjhcdTZlOWJcdTZlZDZcdTZlYzhcdTZlOGZcdTZlYzBcdTZlOWZcdTZlOTNcdTZlOTRcdTZlYTBcdTZlYjFcdTZlYjlcdTZlYzZcdTZlZDJcdTZlYmRcdTZlYzFcdTZlOWVcdTZlYzlcdTZlYjdcdTZlYjBcdTZlY2RcdTZlYTZcdTZlY2ZcdTZlYjJcdTZlYmVcdTZl''@;'; put 'put ''YzNcdTZlZGNcdTZlZDhcdTZlOTlcdTZlOTJcdTZlOGVcdTZlOGRcdTZlYTRcdTZlYTFcdTZlYmZcdTZlYjNcdTZlZDBcdTZlY2FcdTZlOTdcdTZlYWVcdTZlYTNcdTcxNDdcdTcxNTRcdTcxNTJcdTcxNjNcdTcxNjBcdTcxNDFcdTcxNWRcdTcxNjJcdTcxNzJcdTcxNzhcdTcxNmFcdTcxNjFc''@;'; put 'put ''dTcxNDJcdTcxNThcdTcxNDNcdTcxNGJcdTcxNzBcdTcxNWZcdTcxNTBcdTcxNTMiXSxbImRlYTEiLCJcdTcxNDRcdTcxNGRcdTcxNWFcdTcyNGZcdTcyOGRcdTcyOGNcdTcyOTFcdTcyOTBcdTcyOGVcdTczM2NcdTczNDJcdTczM2JcdTczM2FcdTczNDBcdTczNGFcdTczNDlcdTc0NDRcdTc0''@;'; put 'put ''NGFcdTc0NGJcdTc0NTJcdTc0NTFcdTc0NTdcdTc0NDBcdTc0NGZcdTc0NTBcdTc0NGVcdTc0NDJcdTc0NDZcdTc0NGRcdTc0NTRcdTc0ZTFcdTc0ZmZcdTc0ZmVcdTc0ZmRcdTc1MWRcdTc1NzlcdTc1NzdcdTY5ODNcdTc1ZWZcdTc2MGZcdTc2MDNcdTc1ZjdcdTc1ZmVcdTc1ZmNcdTc1Zjlc''@;'; put 'put ''dTc1ZjhcdTc2MTBcdTc1ZmJcdTc1ZjZcdTc1ZWRcdTc1ZjVcdTc1ZmRcdTc2OTlcdTc2YjVcdTc2ZGRcdTc3NTVcdTc3NWZcdTc3NjBcdTc3NTJcdTc3NTZcdTc3NWFcdTc3NjlcdTc3NjdcdTc3NTRcdTc3NTlcdTc3NmRcdTc3ZTBcdTc4ODdcdTc4OWFcdTc4OTRcdTc4OGZcdTc4ODRcdTc4''@;'; put 'put ''OTVcdTc4ODVcdTc4ODZcdTc4YTFcdTc4ODNcdTc4NzlcdTc4OTlcdTc4ODBcdTc4OTZcdTc4N2JcdTc5N2NcdTc5ODJcdTc5N2RcdTc5NzlcdTdhMTFcdTdhMThcdTdhMTlcdTdhMTJcdTdhMTdcdTdhMTVcdTdhMjJcdTdhMTMiXSxbImRmNDAiLCJcdTdhMWJcdTdhMTBcdTdhYTNcdTdhYTJc''@;'; put 'put ''dTdhOWVcdTdhZWJcdTdiNjZcdTdiNjRcdTdiNmRcdTdiNzRcdTdiNjlcdTdiNzJcdTdiNjVcdTdiNzNcdTdiNzFcdTdiNzBcdTdiNjFcdTdiNzhcdTdiNzZcdTdiNjNcdTdjYjJcdTdjYjRcdTdjYWZcdTdkODhcdTdkODZcdTdkODBcdTdkOGRcdTdkN2ZcdTdkODVcdTdkN2FcdTdkOGVcdTdk''@;'; put 'put ''N2JcdTdkODNcdTdkN2NcdTdkOGNcdTdkOTRcdTdkODRcdTdkN2RcdTdkOTJcdTdmNmRcdTdmNmJcdTdmNjdcdTdmNjhcdTdmNmNcdTdmYTZcdTdmYTVcdTdmYTdcdTdmZGJcdTdmZGNcdTgwMjFcdTgxNjRcdTgxNjBcdTgxNzdcdTgxNWNcdTgxNjlcdTgxNWJcdTgxNjJcdTgxNzJcdTY3MjFc''@;'; put 'put ''dTgxNWVcdTgxNzZcdTgxNjdcdTgxNmYiXSxbImRmYTEiLCJcdTgxNDRcdTgxNjFcdTgyMWRcdTgyNDlcdTgyNDRcdTgyNDBcdTgyNDJcdTgyNDVcdTg0ZjFcdTg0M2ZcdTg0NTZcdTg0NzZcdTg0NzlcdTg0OGZcdTg0OGRcdTg0NjVcdTg0NTFcdTg0NDBcdTg0ODZcdTg0NjdcdTg0MzBcdTg0''@;'; put 'put ''NGRcdTg0N2RcdTg0NWFcdTg0NTlcdTg0NzRcdTg0NzNcdTg0NWRcdTg1MDdcdTg0NWVcdTg0MzdcdTg0M2FcdTg0MzRcdTg0N2FcdTg0NDNcdTg0NzhcdTg0MzJcdTg0NDVcdTg0MjlcdTgzZDlcdTg0NGJcdTg0MmZcdTg0NDJcdTg0MmRcdTg0NWZcdTg0NzBcdTg0MzlcdTg0NGVcdTg0NGNc''@;'; put 'put ''dTg0NTJcdTg0NmZcdTg0YzVcdTg0OGVcdTg0M2JcdTg0NDdcdTg0MzZcdTg0MzNcdTg0NjhcdTg0N2VcdTg0NDRcdTg0MmJcdTg0NjBcdTg0NTRcdTg0NmVcdTg0NTBcdTg3MGJcdTg3MDRcdTg2ZjdcdTg3MGNcdTg2ZmFcdTg2ZDZcdTg2ZjVcdTg3NGRcdTg2ZjhcdTg3MGVcdTg3MDlcdTg3''@;'; put 'put ''MDFcdTg2ZjZcdTg3MGRcdTg3MDVcdTg4ZDZcdTg4Y2JcdTg4Y2RcdTg4Y2VcdTg4ZGVcdTg4ZGJcdTg4ZGFcdTg4Y2NcdTg4ZDBcdTg5ODVcdTg5OWJcdTg5ZGZcdTg5ZTVcdTg5ZTQiXSxbImUwNDAiLCJcdTg5ZTFcdTg5ZTBcdTg5ZTJcdTg5ZGNcdTg5ZTZcdThhNzZcdThhODZcdThhN2Zc''@;'; put 'put ''dThhNjFcdThhM2ZcdThhNzdcdThhODJcdThhODRcdThhNzVcdThhODNcdThhODFcdThhNzRcdThhN2FcdThjM2NcdThjNGJcdThjNGFcdThjNjVcdThjNjRcdThjNjZcdThjODZcdThjODRcdThjODVcdThjY2NcdThkNjhcdThkNjlcdThkOTFcdThkOGNcdThkOGVcdThkOGZcdThkOGRcdThk''@;'; put 'put ''OTNcdThkOTRcdThkOTBcdThkOTJcdThkZjBcdThkZTBcdThkZWNcdThkZjFcdThkZWVcdThkZDBcdThkZTlcdThkZTNcdThkZTJcdThkZTdcdThkZjJcdThkZWJcdThkZjRcdThmMDZcdThlZmZcdThmMDFcdThmMDBcdThmMDVcdThmMDdcdThmMDhcdThmMDJcdThmMGJcdTkwNTJcdTkwM2Yi''@;'; put 'put ''XSxbImUwYTEiLCJcdTkwNDRcdTkwNDlcdTkwM2RcdTkxMTBcdTkxMGRcdTkxMGZcdTkxMTFcdTkxMTZcdTkxMTRcdTkxMGJcdTkxMGVcdTkxNmVcdTkxNmZcdTkyNDhcdTkyNTJcdTkyMzBcdTkyM2FcdTkyNjZcdTkyMzNcdTkyNjVcdTkyNWVcdTkyODNcdTkyMmVcdTkyNGFcdTkyNDZcdTky''@;'; put 'put ''NmRcdTkyNmNcdTkyNGZcdTkyNjBcdTkyNjdcdTkyNmZcdTkyMzZcdTkyNjFcdTkyNzBcdTkyMzFcdTkyNTRcdTkyNjNcdTkyNTBcdTkyNzJcdTkyNGVcdTkyNTNcdTkyNGNcdTkyNTZcdTkyMzJcdTk1OWZcdTk1OWNcdTk1OWVcdTk1OWJcdTk2OTJcdTk2OTNcdTk2OTFcdTk2OTdcdTk2Y2Vc''@;'; put 'put ''dTk2ZmFcdTk2ZmRcdTk2ZjhcdTk2ZjVcdTk3NzNcdTk3NzdcdTk3NzhcdTk3NzJcdTk4MGZcdTk4MGRcdTk4MGVcdTk4YWNcdTk4ZjZcdTk4ZjlcdTk5YWZcdTk5YjJcdTk5YjBcdTk5YjVcdTlhYWRcdTlhYWJcdTliNWJcdTljZWFcdTljZWRcdTljZTdcdTllODBcdTllZmRcdTUwZTZcdTUw''@;'; put 'put ''ZDRcdTUwZDdcdTUwZThcdTUwZjNcdTUwZGJcdTUwZWFcdTUwZGRcdTUwZTRcdTUwZDNcdTUwZWNcdTUwZjBcdTUwZWZcdTUwZTNcdTUwZTAiXSxbImUxNDAiLCJcdTUxZDhcdTUyODBcdTUyODFcdTUyZTlcdTUyZWJcdTUzMzBcdTUzYWNcdTU2MjdcdTU2MTVcdTU2MGNcdTU2MTJcdTU1ZmNc''@;'; put 'put ''dTU2MGZcdTU2MWNcdTU2MDFcdTU2MTNcdTU2MDJcdTU1ZmFcdTU2MWRcdTU2MDRcdTU1ZmZcdTU1ZjlcdTU4ODlcdTU4N2NcdTU4OTBcdTU4OThcdTU4ODZcdTU4ODFcdTU4N2ZcdTU4NzRcdTU4OGJcdTU4N2FcdTU4ODdcdTU4OTFcdTU4OGVcdTU4NzZcdTU4ODJcdTU4ODhcdTU4N2JcdTU4''@;'; put 'put ''OTRcdTU4OGZcdTU4ZmVcdTU5NmJcdTVhZGNcdTVhZWVcdTVhZTVcdTVhZDVcdTVhZWFcdTVhZGFcdTVhZWRcdTVhZWJcdTVhZjNcdTVhZTJcdTVhZTBcdTVhZGJcdTVhZWNcdTVhZGVcdTVhZGRcdTVhZDlcdTVhZThcdTVhZGZcdTViNzdcdTViZTAiXSxbImUxYTEiLCJcdTViZTNcdTVjNjNc''@;'; put 'put ''dTVkODJcdTVkODBcdTVkN2RcdTVkODZcdTVkN2FcdTVkODFcdTVkNzdcdTVkOGFcdTVkODlcdTVkODhcdTVkN2VcdTVkN2NcdTVkOGRcdTVkNzlcdTVkN2ZcdTVlNThcdTVlNTlcdTVlNTNcdTVlZDhcdTVlZDFcdTVlZDdcdTVlY2VcdTVlZGNcdTVlZDVcdTVlZDlcdTVlZDJcdTVlZDRcdTVm''@;'; put 'put ''NDRcdTVmNDNcdTVmNmZcdTVmYjZcdTYxMmNcdTYxMjhcdTYxNDFcdTYxNWVcdTYxNzFcdTYxNzNcdTYxNTJcdTYxNTNcdTYxNzJcdTYxNmNcdTYxODBcdTYxNzRcdTYxNTRcdTYxN2FcdTYxNWJcdTYxNjVcdTYxM2JcdTYxNmFcdTYxNjFcdTYxNTZcdTYyMjlcdTYyMjdcdTYyMmJcdTY0MmJc''@;'; put 'put ''dTY0NGRcdTY0NWJcdTY0NWRcdTY0NzRcdTY0NzZcdTY0NzJcdTY0NzNcdTY0N2RcdTY0NzVcdTY0NjZcdTY0YTZcdTY0NGVcdTY0ODJcdTY0NWVcdTY0NWNcdTY0NGJcdTY0NTNcdTY0NjBcdTY0NTBcdTY0N2ZcdTY0M2ZcdTY0NmNcdTY0NmJcdTY0NTlcdTY0NjVcdTY0NzdcdTY1NzNcdTY1''@;'; put 'put ''YTBcdTY2YTFcdTY2YTBcdTY2OWZcdTY3MDVcdTY3MDRcdTY3MjJcdTY5YjFcdTY5YjZcdTY5YzkiXSxbImUyNDAiLCJcdTY5YTBcdTY5Y2VcdTY5OTZcdTY5YjBcdTY5YWNcdTY5YmNcdTY5OTFcdTY5OTlcdTY5OGVcdTY5YTdcdTY5OGRcdTY5YTlcdTY5YmVcdTY5YWZcdTY5YmZcdTY5YzRc''@;'; put 'put ''dTY5YmRcdTY5YTRcdTY5ZDRcdTY5YjlcdTY5Y2FcdTY5OWFcdTY5Y2ZcdTY5YjNcdTY5OTNcdTY5YWFcdTY5YTFcdTY5OWVcdTY5ZDlcdTY5OTdcdTY5OTBcdTY5YzJcdTY5YjVcdTY5YTVcdTY5YzZcdTZiNGFcdTZiNGRcdTZiNGJcdTZiOWVcdTZiOWZcdTZiYTBcdTZiYzNcdTZiYzRcdTZi''@;'; put 'put ''ZmVcdTZlY2VcdTZlZjVcdTZlZjFcdTZmMDNcdTZmMjVcdTZlZjhcdTZmMzdcdTZlZmJcdTZmMmVcdTZmMDlcdTZmNGVcdTZmMTlcdTZmMWFcdTZmMjdcdTZmMThcdTZmM2JcdTZmMTJcdTZlZWRcdTZmMGEiXSxbImUyYTEiLCJcdTZmMzZcdTZmNzNcdTZlZjlcdTZlZWVcdTZmMmRcdTZmNDBc''@;'; put 'put ''dTZmMzBcdTZmM2NcdTZmMzVcdTZlZWJcdTZmMDdcdTZmMGVcdTZmNDNcdTZmMDVcdTZlZmRcdTZlZjZcdTZmMzlcdTZmMWNcdTZlZmNcdTZmM2FcdTZmMWZcdTZmMGRcdTZmMWVcdTZmMDhcdTZmMjFcdTcxODdcdTcxOTBcdTcxODlcdTcxODBcdTcxODVcdTcxODJcdTcxOGZcdTcxN2JcdTcx''@;'; put 'put ''ODZcdTcxODFcdTcxOTdcdTcyNDRcdTcyNTNcdTcyOTdcdTcyOTVcdTcyOTNcdTczNDNcdTczNGRcdTczNTFcdTczNGNcdTc0NjJcdTc0NzNcdTc0NzFcdTc0NzVcdTc0NzJcdTc0NjdcdTc0NmVcdTc1MDBcdTc1MDJcdTc1MDNcdTc1N2RcdTc1OTBcdTc2MTZcdTc2MDhcdTc2MGNcdTc2MTVc''@;'; put 'put ''dTc2MTFcdTc2MGFcdTc2MTRcdTc2YjhcdTc3ODFcdTc3N2NcdTc3ODVcdTc3ODJcdTc3NmVcdTc3ODBcdTc3NmZcdTc3N2VcdTc3ODNcdTc4YjJcdTc4YWFcdTc4YjRcdTc4YWRcdTc4YThcdTc4N2VcdTc4YWJcdTc4OWVcdTc4YTVcdTc4YTBcdTc4YWNcdTc4YTJcdTc4YTRcdTc5OThcdTc5''@;'; put 'put ''OGFcdTc5OGJcdTc5OTZcdTc5OTVcdTc5OTRcdTc5OTMiXSxbImUzNDAiLCJcdTc5OTdcdTc5ODhcdTc5OTJcdTc5OTBcdTdhMmJcdTdhNGFcdTdhMzBcdTdhMmZcdTdhMjhcdTdhMjZcdTdhYThcdTdhYWJcdTdhYWNcdTdhZWVcdTdiODhcdTdiOWNcdTdiOGFcdTdiOTFcdTdiOTBcdTdiOTZc''@;'; put 'put ''dTdiOGRcdTdiOGNcdTdiOWJcdTdiOGVcdTdiODVcdTdiOThcdTUyODRcdTdiOTlcdTdiYTRcdTdiODJcdTdjYmJcdTdjYmZcdTdjYmNcdTdjYmFcdTdkYTdcdTdkYjdcdTdkYzJcdTdkYTNcdTdkYWFcdTdkYzFcdTdkYzBcdTdkYzVcdTdkOWRcdTdkY2VcdTdkYzRcdTdkYzZcdTdkY2JcdTdk''@;'; put 'put ''Y2NcdTdkYWZcdTdkYjlcdTdkOTZcdTdkYmNcdTdkOWZcdTdkYTZcdTdkYWVcdTdkYTlcdTdkYTFcdTdkYzlcdTdmNzNcdTdmZTJcdTdmZTNcdTdmZTVcdTdmZGUiXSxbImUzYTEiLCJcdTgwMjRcdTgwNWRcdTgwNWNcdTgxODlcdTgxODZcdTgxODNcdTgxODdcdTgxOGRcdTgxOGNcdTgxOGJc''@;'; put 'put ''dTgyMTVcdTg0OTdcdTg0YTRcdTg0YTFcdTg0OWZcdTg0YmFcdTg0Y2VcdTg0YzJcdTg0YWNcdTg0YWVcdTg0YWJcdTg0YjlcdTg0YjRcdTg0YzFcdTg0Y2RcdTg0YWFcdTg0OWFcdTg0YjFcdTg0ZDBcdTg0OWRcdTg0YTdcdTg0YmJcdTg0YTJcdTg0OTRcdTg0YzdcdTg0Y2NcdTg0OWJcdTg0''@;'; put 'put ''YTlcdTg0YWZcdTg0YThcdTg0ZDZcdTg0OThcdTg0YjZcdTg0Y2ZcdTg0YTBcdTg0ZDdcdTg0ZDRcdTg0ZDJcdTg0ZGJcdTg0YjBcdTg0OTFcdTg2NjFcdTg3MzNcdTg3MjNcdTg3MjhcdTg3NmJcdTg3NDBcdTg3MmVcdTg3MWVcdTg3MjFcdTg3MTlcdTg3MWJcdTg3NDNcdTg3MmNcdTg3NDFc''@;'; put 'put ''dTg3M2VcdTg3NDZcdTg3MjBcdTg3MzJcdTg3MmFcdTg3MmRcdTg3M2NcdTg3MTJcdTg3M2FcdTg3MzFcdTg3MzVcdTg3NDJcdTg3MjZcdTg3MjdcdTg3MzhcdTg3MjRcdTg3MWFcdTg3MzBcdTg3MTFcdTg4ZjdcdTg4ZTdcdTg4ZjFcdTg4ZjJcdTg4ZmFcdTg4ZmVcdTg4ZWVcdTg4ZmNcdTg4''@;'; put 'put ''ZjZcdTg4ZmIiXSxbImU0NDAiLCJcdTg4ZjBcdTg4ZWNcdTg4ZWJcdTg5OWRcdTg5YTFcdTg5OWZcdTg5OWVcdTg5ZTlcdTg5ZWJcdTg5ZThcdThhYWJcdThhOTlcdThhOGJcdThhOTJcdThhOGZcdThhOTZcdThjM2RcdThjNjhcdThjNjlcdThjZDVcdThjY2ZcdThjZDdcdThkOTZcdThlMDlc''@;'; put 'put ''dThlMDJcdThkZmZcdThlMGRcdThkZmRcdThlMGFcdThlMDNcdThlMDdcdThlMDZcdThlMDVcdThkZmVcdThlMDBcdThlMDRcdThmMTBcdThmMTFcdThmMGVcdThmMGRcdTkxMjNcdTkxMWNcdTkxMjBcdTkxMjJcdTkxMWZcdTkxMWRcdTkxMWFcdTkxMjRcdTkxMjFcdTkxMWJcdTkxN2FcdTkx''@;'; put 'put ''NzJcdTkxNzlcdTkxNzNcdTkyYTVcdTkyYTRcdTkyNzZcdTkyOWJcdTkyN2FcdTkyYTBcdTkyOTRcdTkyYWFcdTkyOGQiXSxbImU0YTEiLCJcdTkyYTZcdTkyOWFcdTkyYWJcdTkyNzlcdTkyOTdcdTkyN2ZcdTkyYTNcdTkyZWVcdTkyOGVcdTkyODJcdTkyOTVcdTkyYTJcdTkyN2RcdTkyODhc''@;'; put 'put ''dTkyYTFcdTkyOGFcdTkyODZcdTkyOGNcdTkyOTlcdTkyYTdcdTkyN2VcdTkyODdcdTkyYTlcdTkyOWRcdTkyOGJcdTkyMmRcdTk2OWVcdTk2YTFcdTk2ZmZcdTk3NThcdTk3N2RcdTk3N2FcdTk3N2VcdTk3ODNcdTk3ODBcdTk3ODJcdTk3N2JcdTk3ODRcdTk3ODFcdTk3N2ZcdTk3Y2VcdTk3''@;'; put 'put ''Y2RcdTk4MTZcdTk4YWRcdTk4YWVcdTk5MDJcdTk5MDBcdTk5MDdcdTk5OWRcdTk5OWNcdTk5YzNcdTk5YjlcdTk5YmJcdTk5YmFcdTk5YzJcdTk5YmRcdTk5YzdcdTlhYjFcdTlhZTNcdTlhZTdcdTliM2VcdTliM2ZcdTliNjBcdTliNjFcdTliNWZcdTljZjFcdTljZjJcdTljZjVcdTllYTdc''@;'; put 'put ''dTUwZmZcdTUxMDNcdTUxMzBcdTUwZjhcdTUxMDZcdTUxMDdcdTUwZjZcdTUwZmVcdTUxMGJcdTUxMGNcdTUwZmRcdTUxMGFcdTUyOGJcdTUyOGNcdTUyZjFcdTUyZWZcdTU2NDhcdTU2NDJcdTU2NGNcdTU2MzVcdTU2NDFcdTU2NGFcdTU2NDlcdTU2NDZcdTU2NTgiXSxbImU1NDAiLCJcdTU2''@;'; put 'put ''NWFcdTU2NDBcdTU2MzNcdTU2M2RcdTU2MmNcdTU2M2VcdTU2MzhcdTU2MmFcdTU2M2FcdTU3MWFcdTU4YWJcdTU4OWRcdTU4YjFcdTU4YTBcdTU4YTNcdTU4YWZcdTU4YWNcdTU4YTVcdTU4YTFcdTU4ZmZcdTVhZmZcdTVhZjRcdTVhZmRcdTVhZjdcdTVhZjZcdTViMDNcdTVhZjhcdTViMDJc''@;'; put 'put ''dTVhZjlcdTViMDFcdTViMDdcdTViMDVcdTViMGZcdTVjNjdcdTVkOTlcdTVkOTdcdTVkOWZcdTVkOTJcdTVkYTJcdTVkOTNcdTVkOTVcdTVkYTBcdTVkOWNcdTVkYTFcdTVkOWFcdTVkOWVcdTVlNjlcdTVlNWRcdTVlNjBcdTVlNWNcdTdkZjNcdTVlZGJcdTVlZGVcdTVlZTFcdTVmNDlcdTVm''@;'; put 'put ''YjJcdTYxOGJcdTYxODNcdTYxNzlcdTYxYjFcdTYxYjBcdTYxYTJcdTYxODkiXSxbImU1YTEiLCJcdTYxOWJcdTYxOTNcdTYxYWZcdTYxYWRcdTYxOWZcdTYxOTJcdTYxYWFcdTYxYTFcdTYxOGRcdTYxNjZcdTYxYjNcdTYyMmRcdTY0NmVcdTY0NzBcdTY0OTZcdTY0YTBcdTY0ODVcdTY0OTdc''@;'; put 'put ''dTY0OWNcdTY0OGZcdTY0OGJcdTY0OGFcdTY0OGNcdTY0YTNcdTY0OWZcdTY0NjhcdTY0YjFcdTY0OThcdTY1NzZcdTY1N2FcdTY1NzlcdTY1N2JcdTY1YjJcdTY1YjNcdTY2YjVcdTY2YjBcdTY2YTlcdTY2YjJcdTY2YjdcdTY2YWFcdTY2YWZcdTZhMDBcdTZhMDZcdTZhMTdcdTY5ZTVcdTY5''@;'; put 'put ''ZjhcdTZhMTVcdTY5ZjFcdTY5ZTRcdTZhMjBcdTY5ZmZcdTY5ZWNcdTY5ZTJcdTZhMWJcdTZhMWRcdTY5ZmVcdTZhMjdcdTY5ZjJcdTY5ZWVcdTZhMTRcdTY5ZjdcdTY5ZTdcdTZhNDBcdTZhMDhcdTY5ZTZcdTY5ZmJcdTZhMGRcdTY5ZmNcdTY5ZWJcdTZhMDlcdTZhMDRcdTZhMThcdTZhMjVc''@;'; put 'put ''dTZhMGZcdTY5ZjZcdTZhMjZcdTZhMDdcdTY5ZjRcdTZhMTZcdTZiNTFcdTZiYTVcdTZiYTNcdTZiYTJcdTZiYTZcdTZjMDFcdTZjMDBcdTZiZmZcdTZjMDJcdTZmNDFcdTZmMjZcdTZmN2VcdTZmODdcdTZmYzZcdTZmOTIiXSxbImU2NDAiLCJcdTZmOGRcdTZmODlcdTZmOGNcdTZmNjJcdTZm''@;'; put 'put ''NGZcdTZmODVcdTZmNWFcdTZmOTZcdTZmNzZcdTZmNmNcdTZmODJcdTZmNTVcdTZmNzJcdTZmNTJcdTZmNTBcdTZmNTdcdTZmOTRcdTZmOTNcdTZmNWRcdTZmMDBcdTZmNjFcdTZmNmJcdTZmN2RcdTZmNjdcdTZmOTBcdTZmNTNcdTZmOGJcdTZmNjlcdTZmN2ZcdTZmOTVcdTZmNjNcdTZmNzdc''@;'; put 'put ''dTZmNmFcdTZmN2JcdTcxYjJcdTcxYWZcdTcxOWJcdTcxYjBcdTcxYTBcdTcxOWFcdTcxYTlcdTcxYjVcdTcxOWRcdTcxYTVcdTcxOWVcdTcxYTRcdTcxYTFcdTcxYWFcdTcxOWNcdTcxYTdcdTcxYjNcdTcyOThcdTcyOWFcdTczNThcdTczNTJcdTczNWVcdTczNWZcdTczNjBcdTczNWRcdTcz''@;'; put 'put ''NWJcdTczNjFcdTczNWFcdTczNTkiXSxbImU2YTEiLCJcdTczNjJcdTc0ODdcdTc0ODlcdTc0OGFcdTc0ODZcdTc0ODFcdTc0N2RcdTc0ODVcdTc0ODhcdTc0N2NcdTc0NzlcdTc1MDhcdTc1MDdcdTc1N2VcdTc2MjVcdTc2MWVcdTc2MTlcdTc2MWRcdTc2MWNcdTc2MjNcdTc2MWFcdTc2Mjhc''@;'; put 'put ''dTc2MWJcdTc2OWNcdTc2OWRcdTc2OWVcdTc2OWJcdTc3OGRcdTc3OGZcdTc3ODlcdTc3ODhcdTc4Y2RcdTc4YmJcdTc4Y2ZcdTc4Y2NcdTc4ZDFcdTc4Y2VcdTc4ZDRcdTc4YzhcdTc4YzNcdTc4YzRcdTc4YzlcdTc5OWFcdTc5YTFcdTc5YTBcdTc5OWNcdTc5YTJcdTc5OWJcdTZiNzZcdTdh''@;'; put 'put ''MzlcdTdhYjJcdTdhYjRcdTdhYjNcdTdiYjdcdTdiY2JcdTdiYmVcdTdiYWNcdTdiY2VcdTdiYWZcdTdiYjlcdTdiY2FcdTdiYjVcdTdjYzVcdTdjYzhcdTdjY2NcdTdjY2JcdTdkZjdcdTdkZGJcdTdkZWFcdTdkZTdcdTdkZDdcdTdkZTFcdTdlMDNcdTdkZmFcdTdkZTZcdTdkZjZcdTdkZjFc''@;'; put 'put ''dTdkZjBcdTdkZWVcdTdkZGZcdTdmNzZcdTdmYWNcdTdmYjBcdTdmYWRcdTdmZWRcdTdmZWJcdTdmZWFcdTdmZWNcdTdmZTZcdTdmZThcdTgwNjRcdTgwNjdcdTgxYTNcdTgxOWYiXSxbImU3NDAiLCJcdTgxOWVcdTgxOTVcdTgxYTJcdTgxOTlcdTgxOTdcdTgyMTZcdTgyNGZcdTgyNTNcdTgy''@;'; put 'put ''NTJcdTgyNTBcdTgyNGVcdTgyNTFcdTg1MjRcdTg1M2JcdTg1MGZcdTg1MDBcdTg1MjlcdTg1MGVcdTg1MDlcdTg1MGRcdTg1MWZcdTg1MGFcdTg1MjdcdTg1MWNcdTg0ZmJcdTg1MmJcdTg0ZmFcdTg1MDhcdTg1MGNcdTg0ZjRcdTg1MmFcdTg0ZjJcdTg1MTVcdTg0ZjdcdTg0ZWJcdTg0ZjNc''@;'; put 'put ''dTg0ZmNcdTg1MTJcdTg0ZWFcdTg0ZTlcdTg1MTZcdTg0ZmVcdTg1MjhcdTg1MWRcdTg1MmVcdTg1MDJcdTg0ZmRcdTg1MWVcdTg0ZjZcdTg1MzFcdTg1MjZcdTg0ZTdcdTg0ZThcdTg0ZjBcdTg0ZWZcdTg0ZjlcdTg1MThcdTg1MjBcdTg1MzBcdTg1MGJcdTg1MTlcdTg1MmZcdTg2NjIiXSxb''@;'; put 'put ''ImU3YTEiLCJcdTg3NTZcdTg3NjNcdTg3NjRcdTg3NzdcdTg3ZTFcdTg3NzNcdTg3NThcdTg3NTRcdTg3NWJcdTg3NTJcdTg3NjFcdTg3NWFcdTg3NTFcdTg3NWVcdTg3NmRcdTg3NmFcdTg3NTBcdTg3NGVcdTg3NWZcdTg3NWRcdTg3NmZcdTg3NmNcdTg3N2FcdTg3NmVcdTg3NWNcdTg3NjVc''@;'; put 'put ''dTg3NGZcdTg3N2JcdTg3NzVcdTg3NjJcdTg3NjdcdTg3NjlcdTg4NWFcdTg5MDVcdTg5MGNcdTg5MTRcdTg5MGJcdTg5MTdcdTg5MThcdTg5MTlcdTg5MDZcdTg5MTZcdTg5MTFcdTg5MGVcdTg5MDlcdTg5YTJcdTg5YTRcdTg5YTNcdTg5ZWRcdTg5ZjBcdTg5ZWNcdThhY2ZcdThhYzZcdThh''@;'; put 'put ''YjhcdThhZDNcdThhZDFcdThhZDRcdThhZDVcdThhYmJcdThhZDdcdThhYmVcdThhYzBcdThhYzVcdThhZDhcdThhYzNcdThhYmFcdThhYmRcdThhZDlcdThjM2VcdThjNGRcdThjOGZcdThjZTVcdThjZGZcdThjZDlcdThjZThcdThjZGFcdThjZGRcdThjZTdcdThkYTBcdThkOWNcdThkYTFc''@;'; put 'put ''dThkOWJcdThlMjBcdThlMjNcdThlMjVcdThlMjRcdThlMmVcdThlMTVcdThlMWJcdThlMTZcdThlMTFcdThlMTlcdThlMjZcdThlMjciXSxbImU4NDAiLCJcdThlMTRcdThlMTJcdThlMThcdThlMTNcdThlMWNcdThlMTdcdThlMWFcdThmMmNcdThmMjRcdThmMThcdThmMWFcdThmMjBcdThm''@;'; put 'put ''MjNcdThmMTZcdThmMTdcdTkwNzNcdTkwNzBcdTkwNmZcdTkwNjdcdTkwNmJcdTkxMmZcdTkxMmJcdTkxMjlcdTkxMmFcdTkxMzJcdTkxMjZcdTkxMmVcdTkxODVcdTkxODZcdTkxOGFcdTkxODFcdTkxODJcdTkxODRcdTkxODBcdTkyZDBcdTkyYzNcdTkyYzRcdTkyYzBcdTkyZDlcdTkyYjZc''@;'; put 'put ''dTkyY2ZcdTkyZjFcdTkyZGZcdTkyZDhcdTkyZTlcdTkyZDdcdTkyZGRcdTkyY2NcdTkyZWZcdTkyYzJcdTkyZThcdTkyY2FcdTkyYzhcdTkyY2VcdTkyZTZcdTkyY2RcdTkyZDVcdTkyYzlcdTkyZTBcdTkyZGVcdTkyZTdcdTkyZDFcdTkyZDMiXSxbImU4YTEiLCJcdTkyYjVcdTkyZTFcdTky''@;'; put 'put ''YzZcdTkyYjRcdTk1N2NcdTk1YWNcdTk1YWJcdTk1YWVcdTk1YjBcdTk2YTRcdTk2YTJcdTk2ZDNcdTk3MDVcdTk3MDhcdTk3MDJcdTk3NWFcdTk3OGFcdTk3OGVcdTk3ODhcdTk3ZDBcdTk3Y2ZcdTk4MWVcdTk4MWRcdTk4MjZcdTk4MjlcdTk4MjhcdTk4MjBcdTk4MWJcdTk4MjdcdTk4YjJc''@;'; put 'put ''dTk5MDhcdTk4ZmFcdTk5MTFcdTk5MTRcdTk5MTZcdTk5MTdcdTk5MTVcdTk5ZGNcdTk5Y2RcdTk5Y2ZcdTk5ZDNcdTk5ZDRcdTk5Y2VcdTk5YzlcdTk5ZDZcdTk5ZDhcdTk5Y2JcdTk5ZDdcdTk5Y2NcdTlhYjNcdTlhZWNcdTlhZWJcdTlhZjNcdTlhZjJcdTlhZjFcdTliNDZcdTliNDNcdTli''@;'; put 'put ''NjdcdTliNzRcdTliNzFcdTliNjZcdTliNzZcdTliNzVcdTliNzBcdTliNjhcdTliNjRcdTliNmNcdTljZmNcdTljZmFcdTljZmRcdTljZmZcdTljZjdcdTlkMDdcdTlkMDBcdTljZjlcdTljZmJcdTlkMDhcdTlkMDVcdTlkMDRcdTllODNcdTllZDNcdTlmMGZcdTlmMTBcdTUxMWNcdTUxMTNc''@;'; put 'put ''dTUxMTdcdTUxMWFcdTUxMTFcdTUxZGVcdTUzMzRcdTUzZTFcdTU2NzBcdTU2NjBcdTU2NmUiXSxbImU5NDAiLCJcdTU2NzNcdTU2NjZcdTU2NjNcdTU2NmRcdTU2NzJcdTU2NWVcdTU2NzdcdTU3MWNcdTU3MWJcdTU4YzhcdTU4YmRcdTU4YzlcdTU4YmZcdTU4YmFcdTU4YzJcdTU4YmNcdTU4''@;'; put 'put ''YzZcdTViMTdcdTViMTlcdTViMWJcdTViMjFcdTViMTRcdTViMTNcdTViMTBcdTViMTZcdTViMjhcdTViMWFcdTViMjBcdTViMWVcdTViZWZcdTVkYWNcdTVkYjFcdTVkYTlcdTVkYTdcdTVkYjVcdTVkYjBcdTVkYWVcdTVkYWFcdTVkYThcdTVkYjJcdTVkYWRcdTVkYWZcdTVkYjRcdTVlNjdc''@;'; put 'put ''dTVlNjhcdTVlNjZcdTVlNmZcdTVlZTlcdTVlZTdcdTVlZTZcdTVlZThcdTVlZTVcdTVmNGJcdTVmYmNcdTYxOWRcdTYxYThcdTYxOTZcdTYxYzVcdTYxYjRcdTYxYzZcdTYxYzFcdTYxY2NcdTYxYmEiXSxbImU5YTEiLCJcdTYxYmZcdTYxYjhcdTYxOGNcdTY0ZDdcdTY0ZDZcdTY0ZDBcdTY0''@;'; put 'put ''Y2ZcdTY0YzlcdTY0YmRcdTY0ODlcdTY0YzNcdTY0ZGJcdTY0ZjNcdTY0ZDlcdTY1MzNcdTY1N2ZcdTY1N2NcdTY1YTJcdTY2YzhcdTY2YmVcdTY2YzBcdTY2Y2FcdTY2Y2JcdTY2Y2ZcdTY2YmRcdTY2YmJcdTY2YmFcdTY2Y2NcdTY3MjNcdTZhMzRcdTZhNjZcdTZhNDlcdTZhNjdcdTZhMzJc''@;'; put 'put ''dTZhNjhcdTZhM2VcdTZhNWRcdTZhNmRcdTZhNzZcdTZhNWJcdTZhNTFcdTZhMjhcdTZhNWFcdTZhM2JcdTZhM2ZcdTZhNDFcdTZhNmFcdTZhNjRcdTZhNTBcdTZhNGZcdTZhNTRcdTZhNmZcdTZhNjlcdTZhNjBcdTZhM2NcdTZhNWVcdTZhNTZcdTZhNTVcdTZhNGRcdTZhNGVcdTZhNDZcdTZi''@;'; put 'put ''NTVcdTZiNTRcdTZiNTZcdTZiYTdcdTZiYWFcdTZiYWJcdTZiYzhcdTZiYzdcdTZjMDRcdTZjMDNcdTZjMDZcdTZmYWRcdTZmY2JcdTZmYTNcdTZmYzdcdTZmYmNcdTZmY2VcdTZmYzhcdTZmNWVcdTZmYzRcdTZmYmRcdTZmOWVcdTZmY2FcdTZmYThcdTcwMDRcdTZmYTVcdTZmYWVcdTZmYmFc''@;'; put 'put ''dTZmYWNcdTZmYWFcdTZmY2ZcdTZmYmZcdTZmYjgiXSxbImVhNDAiLCJcdTZmYTJcdTZmYzlcdTZmYWJcdTZmY2RcdTZmYWZcdTZmYjJcdTZmYjBcdTcxYzVcdTcxYzJcdTcxYmZcdTcxYjhcdTcxZDZcdTcxYzBcdTcxYzFcdTcxY2JcdTcxZDRcdTcxY2FcdTcxYzdcdTcxY2ZcdTcxYmRcdTcx''@;'; put 'put ''ZDhcdTcxYmNcdTcxYzZcdTcxZGFcdTcxZGJcdTcyOWRcdTcyOWVcdTczNjlcdTczNjZcdTczNjdcdTczNmNcdTczNjVcdTczNmJcdTczNmFcdTc0N2ZcdTc0OWFcdTc0YTBcdTc0OTRcdTc0OTJcdTc0OTVcdTc0YTFcdTc1MGJcdTc1ODBcdTc2MmZcdTc2MmRcdTc2MzFcdTc2M2RcdTc2MzNc''@;'; put 'put ''dTc2M2NcdTc2MzVcdTc2MzJcdTc2MzBcdTc2YmJcdTc2ZTZcdTc3OWFcdTc3OWRcdTc3YTFcdTc3OWNcdTc3OWJcdTc3YTJcdTc3YTNcdTc3OTVcdTc3OTkiXSxbImVhYTEiLCJcdTc3OTdcdTc4ZGRcdTc4ZTlcdTc4ZTVcdTc4ZWFcdTc4ZGVcdTc4ZTNcdTc4ZGJcdTc4ZTFcdTc4ZTJcdTc4''@;'; put 'put ''ZWRcdTc4ZGZcdTc4ZTBcdTc5YTRcdTdhNDRcdTdhNDhcdTdhNDdcdTdhYjZcdTdhYjhcdTdhYjVcdTdhYjFcdTdhYjdcdTdiZGVcdTdiZTNcdTdiZTdcdTdiZGRcdTdiZDVcdTdiZTVcdTdiZGFcdTdiZThcdTdiZjlcdTdiZDRcdTdiZWFcdTdiZTJcdTdiZGNcdTdiZWJcdTdiZDhcdTdiZGZc''@;'; put 'put ''dTdjZDJcdTdjZDRcdTdjZDdcdTdjZDBcdTdjZDFcdTdlMTJcdTdlMjFcdTdlMTdcdTdlMGNcdTdlMWZcdTdlMjBcdTdlMTNcdTdlMGVcdTdlMWNcdTdlMTVcdTdlMWFcdTdlMjJcdTdlMGJcdTdlMGZcdTdlMTZcdTdlMGRcdTdlMTRcdTdlMjVcdTdlMjRcdTdmNDNcdTdmN2JcdTdmN2NcdTdm''@;'; put 'put ''N2FcdTdmYjFcdTdmZWZcdTgwMmFcdTgwMjlcdTgwNmNcdTgxYjFcdTgxYTZcdTgxYWVcdTgxYjlcdTgxYjVcdTgxYWJcdTgxYjBcdTgxYWNcdTgxYjRcdTgxYjJcdTgxYjdcdTgxYTdcdTgxZjJcdTgyNTVcdTgyNTZcdTgyNTdcdTg1NTZcdTg1NDVcdTg1NmJcdTg1NGRcdTg1NTNcdTg1NjFc''@;'; put 'put ''dTg1NTgiXSxbImViNDAiLCJcdTg1NDBcdTg1NDZcdTg1NjRcdTg1NDFcdTg1NjJcdTg1NDRcdTg1NTFcdTg1NDdcdTg1NjNcdTg1M2VcdTg1NWJcdTg1NzFcdTg1NGVcdTg1NmVcdTg1NzVcdTg1NTVcdTg1NjdcdTg1NjBcdTg1OGNcdTg1NjZcdTg1NWRcdTg1NTRcdTg1NjVcdTg1NmNcdTg2''@;'; put 'put ''NjNcdTg2NjVcdTg2NjRcdTg3OWJcdTg3OGZcdTg3OTdcdTg3OTNcdTg3OTJcdTg3ODhcdTg3ODFcdTg3OTZcdTg3OThcdTg3NzlcdTg3ODdcdTg3YTNcdTg3ODVcdTg3OTBcdTg3OTFcdTg3OWRcdTg3ODRcdTg3OTRcdTg3OWNcdTg3OWFcdTg3ODlcdTg5MWVcdTg5MjZcdTg5MzBcdTg5MmRc''@;'; put 'put ''dTg5MmVcdTg5MjdcdTg5MzFcdTg5MjJcdTg5MjlcdTg5MjNcdTg5MmZcdTg5MmNcdTg5MWZcdTg5ZjFcdThhZTAiXSxbImViYTEiLCJcdThhZTJcdThhZjJcdThhZjRcdThhZjVcdThhZGRcdThiMTRcdThhZTRcdThhZGZcdThhZjBcdThhYzhcdThhZGVcdThhZTFcdThhZThcdThhZmZcdThh''@;'; put 'put ''ZWZcdThhZmJcdThjOTFcdThjOTJcdThjOTBcdThjZjVcdThjZWVcdThjZjFcdThjZjBcdThjZjNcdThkNmNcdThkNmVcdThkYTVcdThkYTdcdThlMzNcdThlM2VcdThlMzhcdThlNDBcdThlNDVcdThlMzZcdThlM2NcdThlM2RcdThlNDFcdThlMzBcdThlM2ZcdThlYmRcdThmMzZcdThmMmVc''@;'; put 'put ''dThmMzVcdThmMzJcdThmMzlcdThmMzdcdThmMzRcdTkwNzZcdTkwNzlcdTkwN2JcdTkwODZcdTkwZmFcdTkxMzNcdTkxMzVcdTkxMzZcdTkxOTNcdTkxOTBcdTkxOTFcdTkxOGRcdTkxOGZcdTkzMjdcdTkzMWVcdTkzMDhcdTkzMWZcdTkzMDZcdTkzMGZcdTkzN2FcdTkzMzhcdTkzM2NcdTkz''@;'; put 'put ''MWJcdTkzMjNcdTkzMTJcdTkzMDFcdTkzNDZcdTkzMmRcdTkzMGVcdTkzMGRcdTkyY2JcdTkzMWRcdTkyZmFcdTkzMjVcdTkzMTNcdTkyZjlcdTkyZjdcdTkzMzRcdTkzMDJcdTkzMjRcdTkyZmZcdTkzMjlcdTkzMzlcdTkzMzVcdTkzMmFcdTkzMTRcdTkzMGMiXSxbImVjNDAiLCJcdTkzMGJc''@;'; put 'put ''dTkyZmVcdTkzMDlcdTkzMDBcdTkyZmJcdTkzMTZcdTk1YmNcdTk1Y2RcdTk1YmVcdTk1YjlcdTk1YmFcdTk1YjZcdTk1YmZcdTk1YjVcdTk1YmRcdTk2YTlcdTk2ZDRcdTk3MGJcdTk3MTJcdTk3MTBcdTk3OTlcdTk3OTdcdTk3OTRcdTk3ZjBcdTk3ZjhcdTk4MzVcdTk4MmZcdTk4MzJcdTk5''@;'; put 'put ''MjRcdTk5MWZcdTk5MjdcdTk5MjlcdTk5OWVcdTk5ZWVcdTk5ZWNcdTk5ZTVcdTk5ZTRcdTk5ZjBcdTk5ZTNcdTk5ZWFcdTk5ZTlcdTk5ZTdcdTlhYjlcdTlhYmZcdTlhYjRcdTlhYmJcdTlhZjZcdTlhZmFcdTlhZjlcdTlhZjdcdTliMzNcdTliODBcdTliODVcdTliODdcdTliN2NcdTliN2Vc''@;'; put 'put ''dTliN2JcdTliODJcdTliOTNcdTliOTJcdTliOTBcdTliN2FcdTliOTUiXSxbImVjYTEiLCJcdTliN2RcdTliODhcdTlkMjVcdTlkMTdcdTlkMjBcdTlkMWVcdTlkMTRcdTlkMjlcdTlkMWRcdTlkMThcdTlkMjJcdTlkMTBcdTlkMTlcdTlkMWZcdTllODhcdTllODZcdTllODdcdTllYWVcdTll''@;'; put 'put ''YWRcdTllZDVcdTllZDZcdTllZmFcdTlmMTJcdTlmM2RcdTUxMjZcdTUxMjVcdTUxMjJcdTUxMjRcdTUxMjBcdTUxMjlcdTUyZjRcdTU2OTNcdTU2OGNcdTU2OGRcdTU2ODZcdTU2ODRcdTU2ODNcdTU2N2VcdTU2ODJcdTU2N2ZcdTU2ODFcdTU4ZDZcdTU4ZDRcdTU4Y2ZcdTU4ZDJcdTViMmRc''@;'; put 'put ''dTViMjVcdTViMzJcdTViMjNcdTViMmNcdTViMjdcdTViMjZcdTViMmZcdTViMmVcdTViN2JcdTViZjFcdTViZjJcdTVkYjdcdTVlNmNcdTVlNmFcdTVmYmVcdTVmYmJcdTYxYzNcdTYxYjVcdTYxYmNcdTYxZTdcdTYxZTBcdTYxZTVcdTYxZTRcdTYxZThcdTYxZGVcdTY0ZWZcdTY0ZTlcdTY0''@;'; put 'put ''ZTNcdTY0ZWJcdTY0ZTRcdTY0ZThcdTY1ODFcdTY1ODBcdTY1YjZcdTY1ZGFcdTY2ZDJcdTZhOGRcdTZhOTZcdTZhODFcdTZhYTVcdTZhODlcdTZhOWZcdTZhOWJcdTZhYTFcdTZhOWVcdTZhODdcdTZhOTNcdTZhOGUiXSxbImVkNDAiLCJcdTZhOTVcdTZhODNcdTZhYThcdTZhYTRcdTZhOTFc''@;'; put 'put ''dTZhN2ZcdTZhYTZcdTZhOWFcdTZhODVcdTZhOGNcdTZhOTJcdTZiNWJcdTZiYWRcdTZjMDlcdTZmY2NcdTZmYTlcdTZmZjRcdTZmZDRcdTZmZTNcdTZmZGNcdTZmZWRcdTZmZTdcdTZmZTZcdTZmZGVcdTZmZjJcdTZmZGRcdTZmZTJcdTZmZThcdTcxZTFcdTcxZjFcdTcxZThcdTcxZjJcdTcx''@;'; put 'put ''ZTRcdTcxZjBcdTcxZTJcdTczNzNcdTczNmVcdTczNmZcdTc0OTdcdTc0YjJcdTc0YWJcdTc0OTBcdTc0YWFcdTc0YWRcdTc0YjFcdTc0YTVcdTc0YWZcdTc1MTBcdTc1MTFcdTc1MTJcdTc1MGZcdTc1ODRcdTc2NDNcdTc2NDhcdTc2NDlcdTc2NDdcdTc2YTRcdTc2ZTlcdTc3YjVcdTc3YWJc''@;'; put 'put ''dTc3YjJcdTc3YjdcdTc3YjYiXSxbImVkYTEiLCJcdTc3YjRcdTc3YjFcdTc3YThcdTc3ZjBcdTc4ZjNcdTc4ZmRcdTc5MDJcdTc4ZmJcdTc4ZmNcdTc4ZjJcdTc5MDVcdTc4ZjlcdTc4ZmVcdTc5MDRcdTc5YWJcdTc5YThcdTdhNWNcdTdhNWJcdTdhNTZcdTdhNThcdTdhNTRcdTdhNWFcdTdh''@;'; put 'put ''YmVcdTdhYzBcdTdhYzFcdTdjMDVcdTdjMGZcdTdiZjJcdTdjMDBcdTdiZmZcdTdiZmJcdTdjMGVcdTdiZjRcdTdjMGJcdTdiZjNcdTdjMDJcdTdjMDlcdTdjMDNcdTdjMDFcdTdiZjhcdTdiZmRcdTdjMDZcdTdiZjBcdTdiZjFcdTdjMTBcdTdjMGFcdTdjZThcdTdlMmRcdTdlM2NcdTdlNDJc''@;'; put 'put ''dTdlMzNcdTk4NDhcdTdlMzhcdTdlMmFcdTdlNDlcdTdlNDBcdTdlNDdcdTdlMjlcdTdlNGNcdTdlMzBcdTdlM2JcdTdlMzZcdTdlNDRcdTdlM2FcdTdmNDVcdTdmN2ZcdTdmN2VcdTdmN2RcdTdmZjRcdTdmZjJcdTgwMmNcdTgxYmJcdTgxYzRcdTgxY2NcdTgxY2FcdTgxYzVcdTgxYzdcdTgx''@;'; put 'put ''YmNcdTgxZTlcdTgyNWJcdTgyNWFcdTgyNWNcdTg1ODNcdTg1ODBcdTg1OGZcdTg1YTdcdTg1OTVcdTg1YTBcdTg1OGJcdTg1YTNcdTg1N2JcdTg1YTRcdTg1OWFcdTg1OWUiXSxbImVlNDAiLCJcdTg1NzdcdTg1N2NcdTg1ODlcdTg1YTFcdTg1N2FcdTg1NzhcdTg1NTdcdTg1OGVcdTg1OTZc''@;'; put 'put ''dTg1ODZcdTg1OGRcdTg1OTlcdTg1OWRcdTg1ODFcdTg1YTJcdTg1ODJcdTg1ODhcdTg1ODVcdTg1NzlcdTg1NzZcdTg1OThcdTg1OTBcdTg1OWZcdTg2NjhcdTg3YmVcdTg3YWFcdTg3YWRcdTg3YzVcdTg3YjBcdTg3YWNcdTg3YjlcdTg3YjVcdTg3YmNcdTg3YWVcdTg3YzlcdTg3YzNcdTg3''@;'; put 'put ''YzJcdTg3Y2NcdTg3YjdcdTg3YWZcdTg3YzRcdTg3Y2FcdTg3YjRcdTg3YjZcdTg3YmZcdTg3YjhcdTg3YmRcdTg3ZGVcdTg3YjJcdTg5MzVcdTg5MzNcdTg5M2NcdTg5M2VcdTg5NDFcdTg5NTJcdTg5MzdcdTg5NDJcdTg5YWRcdTg5YWZcdTg5YWVcdTg5ZjJcdTg5ZjNcdThiMWUiXSxbImVl''@;'; put 'put ''YTEiLCJcdThiMThcdThiMTZcdThiMTFcdThiMDVcdThiMGJcdThiMjJcdThiMGZcdThiMTJcdThiMTVcdThiMDdcdThiMGRcdThiMDhcdThiMDZcdThiMWNcdThiMTNcdThiMWFcdThjNGZcdThjNzBcdThjNzJcdThjNzFcdThjNmZcdThjOTVcdThjOTRcdThjZjlcdThkNmZcdThlNGVcdThl''@;'; put 'put ''NGRcdThlNTNcdThlNTBcdThlNGNcdThlNDdcdThmNDNcdThmNDBcdTkwODVcdTkwN2VcdTkxMzhcdTkxOWFcdTkxYTJcdTkxOWJcdTkxOTlcdTkxOWZcdTkxYTFcdTkxOWRcdTkxYTBcdTkzYTFcdTkzODNcdTkzYWZcdTkzNjRcdTkzNTZcdTkzNDdcdTkzN2NcdTkzNThcdTkzNWNcdTkzNzZc''@;'; put 'put ''dTkzNDlcdTkzNTBcdTkzNTFcdTkzNjBcdTkzNmRcdTkzOGZcdTkzNGNcdTkzNmFcdTkzNzlcdTkzNTdcdTkzNTVcdTkzNTJcdTkzNGZcdTkzNzFcdTkzNzdcdTkzN2JcdTkzNjFcdTkzNWVcdTkzNjNcdTkzNjdcdTkzODBcdTkzNGVcdTkzNTlcdTk1YzdcdTk1YzBcdTk1YzlcdTk1YzNcdTk1''@;'; put 'put ''YzVcdTk1YjdcdTk2YWVcdTk2YjBcdTk2YWNcdTk3MjBcdTk3MWZcdTk3MThcdTk3MWRcdTk3MTlcdTk3OWFcdTk3YTFcdTk3OWMiXSxbImVmNDAiLCJcdTk3OWVcdTk3OWRcdTk3ZDVcdTk3ZDRcdTk3ZjFcdTk4NDFcdTk4NDRcdTk4NGFcdTk4NDlcdTk4NDVcdTk4NDNcdTk5MjVcdTk5MmJc''@;'; put 'put ''dTk5MmNcdTk5MmFcdTk5MzNcdTk5MzJcdTk5MmZcdTk5MmRcdTk5MzFcdTk5MzBcdTk5OThcdTk5YTNcdTk5YTFcdTlhMDJcdTk5ZmFcdTk5ZjRcdTk5ZjdcdTk5ZjlcdTk5ZjhcdTk5ZjZcdTk5ZmJcdTk5ZmRcdTk5ZmVcdTk5ZmNcdTlhMDNcdTlhYmVcdTlhZmVcdTlhZmRcdTliMDFcdTlh''@;'; put 'put ''ZmNcdTliNDhcdTliOWFcdTliYThcdTliOWVcdTliOWJcdTliYTZcdTliYTFcdTliYTVcdTliYTRcdTliODZcdTliYTJcdTliYTBcdTliYWZcdTlkMzNcdTlkNDFcdTlkNjdcdTlkMzZcdTlkMmVcdTlkMmZcdTlkMzFcdTlkMzhcdTlkMzAiXSxbImVmYTEiLCJcdTlkNDVcdTlkNDJcdTlkNDNc''@;'; put 'put ''dTlkM2VcdTlkMzdcdTlkNDBcdTlkM2RcdTdmZjVcdTlkMmRcdTllOGFcdTllODlcdTllOGRcdTllYjBcdTllYzhcdTllZGFcdTllZmJcdTllZmZcdTlmMjRcdTlmMjNcdTlmMjJcdTlmNTRcdTlmYTBcdTUxMzFcdTUxMmRcdTUxMmVcdTU2OThcdTU2OWNcdTU2OTdcdTU2OWFcdTU2OWRcdTU2''@;'; put 'put ''OTlcdTU5NzBcdTViM2NcdTVjNjlcdTVjNmFcdTVkYzBcdTVlNmRcdTVlNmVcdTYxZDhcdTYxZGZcdTYxZWRcdTYxZWVcdTYxZjFcdTYxZWFcdTYxZjBcdTYxZWJcdTYxZDZcdTYxZTlcdTY0ZmZcdTY1MDRcdTY0ZmRcdTY0ZjhcdTY1MDFcdTY1MDNcdTY0ZmNcdTY1OTRcdTY1ZGJcdTY2ZGFc''@;'; put 'put ''dTY2ZGJcdTY2ZDhcdTZhYzVcdTZhYjlcdTZhYmRcdTZhZTFcdTZhYzZcdTZhYmFcdTZhYjZcdTZhYjdcdTZhYzdcdTZhYjRcdTZhYWRcdTZiNWVcdTZiYzlcdTZjMGJcdTcwMDdcdTcwMGNcdTcwMGRcdTcwMDFcdTcwMDVcdTcwMTRcdTcwMGVcdTZmZmZcdTcwMDBcdTZmZmJcdTcwMjZcdTZm''@;'; put 'put ''ZmNcdTZmZjdcdTcwMGFcdTcyMDFcdTcxZmZcdTcxZjlcdTcyMDNcdTcxZmRcdTczNzYiXSxbImYwNDAiLCJcdTc0YjhcdTc0YzBcdTc0YjVcdTc0YzFcdTc0YmVcdTc0YjZcdTc0YmJcdTc0YzJcdTc1MTRcdTc1MTNcdTc2NWNcdTc2NjRcdTc2NTlcdTc2NTBcdTc2NTNcdTc2NTdcdTc2NWFc''@;'; put 'put ''dTc2YTZcdTc2YmRcdTc2ZWNcdTc3YzJcdTc3YmFcdTc4ZmZcdTc5MGNcdTc5MTNcdTc5MTRcdTc5MDlcdTc5MTBcdTc5MTJcdTc5MTFcdTc5YWRcdTc5YWNcdTdhNWZcdTdjMWNcdTdjMjlcdTdjMTlcdTdjMjBcdTdjMWZcdTdjMmRcdTdjMWRcdTdjMjZcdTdjMjhcdTdjMjJcdTdjMjVcdTdj''@;'; put 'put ''MzBcdTdlNWNcdTdlNTBcdTdlNTZcdTdlNjNcdTdlNThcdTdlNjJcdTdlNWZcdTdlNTFcdTdlNjBcdTdlNTdcdTdlNTNcdTdmYjVcdTdmYjNcdTdmZjdcdTdmZjhcdTgwNzVcdTgxZDFcdTgxZDIiXSxbImYwYTEiLCJcdTgxZDBcdTgyNWZcdTgyNWVcdTg1YjRcdTg1YzZcdTg1YzBcdTg1YzNc''@;'; put 'put ''dTg1YzJcdTg1YjNcdTg1YjVcdTg1YmRcdTg1YzdcdTg1YzRcdTg1YmZcdTg1Y2JcdTg1Y2VcdTg1YzhcdTg1YzVcdTg1YjFcdTg1YjZcdTg1ZDJcdTg2MjRcdTg1YjhcdTg1YjdcdTg1YmVcdTg2NjlcdTg3ZTdcdTg3ZTZcdTg3ZTJcdTg3ZGJcdTg3ZWJcdTg3ZWFcdTg3ZTVcdTg3ZGZcdTg3''@;'; put 'put ''ZjNcdTg3ZTRcdTg3ZDRcdTg3ZGNcdTg3ZDNcdTg3ZWRcdTg3ZDhcdTg3ZTNcdTg3YTRcdTg3ZDdcdTg3ZDlcdTg4MDFcdTg3ZjRcdTg3ZThcdTg3ZGRcdTg5NTNcdTg5NGJcdTg5NGZcdTg5NGNcdTg5NDZcdTg5NTBcdTg5NTFcdTg5NDlcdThiMmFcdThiMjdcdThiMjNcdThiMzNcdThiMzBc''@;'; put 'put ''dThiMzVcdThiNDdcdThiMmZcdThiM2NcdThiM2VcdThiMzFcdThiMjVcdThiMzdcdThiMjZcdThiMzZcdThiMmVcdThiMjRcdThiM2JcdThiM2RcdThiM2FcdThjNDJcdThjNzVcdThjOTlcdThjOThcdThjOTdcdThjZmVcdThkMDRcdThkMDJcdThkMDBcdThlNWNcdThlNjJcdThlNjBcdThl''@;'; put 'put ''NTdcdThlNTZcdThlNWVcdThlNjVcdThlNjciXSxbImYxNDAiLCJcdThlNWJcdThlNWFcdThlNjFcdThlNWRcdThlNjlcdThlNTRcdThmNDZcdThmNDdcdThmNDhcdThmNGJcdTkxMjhcdTkxM2FcdTkxM2JcdTkxM2VcdTkxYThcdTkxYTVcdTkxYTdcdTkxYWZcdTkxYWFcdTkzYjVcdTkzOGNc''@;'; put 'put ''dTkzOTJcdTkzYjdcdTkzOWJcdTkzOWRcdTkzODlcdTkzYTdcdTkzOGVcdTkzYWFcdTkzOWVcdTkzYTZcdTkzOTVcdTkzODhcdTkzOTlcdTkzOWZcdTkzOGRcdTkzYjFcdTkzOTFcdTkzYjJcdTkzYTRcdTkzYThcdTkzYjRcdTkzYTNcdTkzYTVcdTk1ZDJcdTk1ZDNcdTk1ZDFcdTk2YjNcdTk2''@;'; put 'put ''ZDdcdTk2ZGFcdTVkYzJcdTk2ZGZcdTk2ZDhcdTk2ZGRcdTk3MjNcdTk3MjJcdTk3MjVcdTk3YWNcdTk3YWVcdTk3YThcdTk3YWJcdTk3YTRcdTk3YWEiXSxbImYxYTEiLCJcdTk3YTJcdTk3YTVcdTk3ZDdcdTk3ZDlcdTk3ZDZcdTk3ZDhcdTk3ZmFcdTk4NTBcdTk4NTFcdTk4NTJcdTk4Yjhc''@;'; put 'put ''dTk5NDFcdTk5M2NcdTk5M2FcdTlhMGZcdTlhMGJcdTlhMDlcdTlhMGRcdTlhMDRcdTlhMTFcdTlhMGFcdTlhMDVcdTlhMDdcdTlhMDZcdTlhYzBcdTlhZGNcdTliMDhcdTliMDRcdTliMDVcdTliMjlcdTliMzVcdTliNGFcdTliNGNcdTliNGJcdTliYzdcdTliYzZcdTliYzNcdTliYmZcdTli''@;'; put 'put ''YzFcdTliYjVcdTliYjhcdTliZDNcdTliYjZcdTliYzRcdTliYjlcdTliYmRcdTlkNWNcdTlkNTNcdTlkNGZcdTlkNGFcdTlkNWJcdTlkNGJcdTlkNTlcdTlkNTZcdTlkNGNcdTlkNTdcdTlkNTJcdTlkNTRcdTlkNWZcdTlkNThcdTlkNWFcdTllOGVcdTllOGNcdTllZGZcdTlmMDFcdTlmMDBc''@;'; put 'put ''dTlmMTZcdTlmMjVcdTlmMmJcdTlmMmFcdTlmMjlcdTlmMjhcdTlmNGNcdTlmNTVcdTUxMzRcdTUxMzVcdTUyOTZcdTUyZjdcdTUzYjRcdTU2YWJcdTU2YWRcdTU2YTZcdTU2YTdcdTU2YWFcdTU2YWNcdTU4ZGFcdTU4ZGRcdTU4ZGJcdTU5MTJcdTViM2RcdTViM2VcdTViM2ZcdTVkYzNcdTVl''@;'; put 'put ''NzAiXSxbImYyNDAiLCJcdTVmYmZcdTYxZmJcdTY1MDdcdTY1MTBcdTY1MGRcdTY1MDlcdTY1MGNcdTY1MGVcdTY1ODRcdTY1ZGVcdTY1ZGRcdTY2ZGVcdTZhZTdcdTZhZTBcdTZhY2NcdTZhZDFcdTZhZDlcdTZhY2JcdTZhZGZcdTZhZGNcdTZhZDBcdTZhZWJcdTZhY2ZcdTZhY2RcdTZhZGVc''@;'; put 'put ''dTZiNjBcdTZiYjBcdTZjMGNcdTcwMTlcdTcwMjdcdTcwMjBcdTcwMTZcdTcwMmJcdTcwMjFcdTcwMjJcdTcwMjNcdTcwMjlcdTcwMTdcdTcwMjRcdTcwMWNcdTcwMmFcdTcyMGNcdTcyMGFcdTcyMDdcdTcyMDJcdTcyMDVcdTcyYTVcdTcyYTZcdTcyYTRcdTcyYTNcdTcyYTFcdTc0Y2JcdTc0''@;'; put 'put ''YzVcdTc0YjdcdTc0YzNcdTc1MTZcdTc2NjBcdTc3YzlcdTc3Y2FcdTc3YzRcdTc3ZjFcdTc5MWRcdTc5MWIiXSxbImYyYTEiLCJcdTc5MjFcdTc5MWNcdTc5MTdcdTc5MWVcdTc5YjBcdTdhNjdcdTdhNjhcdTdjMzNcdTdjM2NcdTdjMzlcdTdjMmNcdTdjM2JcdTdjZWNcdTdjZWFcdTdlNzZc''@;'; put 'put ''dTdlNzVcdTdlNzhcdTdlNzBcdTdlNzdcdTdlNmZcdTdlN2FcdTdlNzJcdTdlNzRcdTdlNjhcdTdmNGJcdTdmNGFcdTdmODNcdTdmODZcdTdmYjdcdTdmZmRcdTdmZmVcdTgwNzhcdTgxZDdcdTgxZDVcdTgyNjRcdTgyNjFcdTgyNjNcdTg1ZWJcdTg1ZjFcdTg1ZWRcdTg1ZDlcdTg1ZTFcdTg1''@;'; put 'put ''ZThcdTg1ZGFcdTg1ZDdcdTg1ZWNcdTg1ZjJcdTg1ZjhcdTg1ZDhcdTg1ZGZcdTg1ZTNcdTg1ZGNcdTg1ZDFcdTg1ZjBcdTg1ZTZcdTg1ZWZcdTg1ZGVcdTg1ZTJcdTg4MDBcdTg3ZmFcdTg4MDNcdTg3ZjZcdTg3ZjdcdTg4MDlcdTg4MGNcdTg4MGJcdTg4MDZcdTg3ZmNcdTg4MDhcdTg3ZmZc''@;'; put 'put ''dTg4MGFcdTg4MDJcdTg5NjJcdTg5NWFcdTg5NWJcdTg5NTdcdTg5NjFcdTg5NWNcdTg5NThcdTg5NWRcdTg5NTlcdTg5ODhcdTg5YjdcdTg5YjZcdTg5ZjZcdThiNTBcdThiNDhcdThiNGFcdThiNDBcdThiNTNcdThiNTZcdThiNTRcdThiNGJcdThiNTUiXSxbImYzNDAiLCJcdThiNTFcdThi''@;'; put 'put ''NDJcdThiNTJcdThiNTdcdThjNDNcdThjNzdcdThjNzZcdThjOWFcdThkMDZcdThkMDdcdThkMDlcdThkYWNcdThkYWFcdThkYWRcdThkYWJcdThlNmRcdThlNzhcdThlNzNcdThlNmFcdThlNmZcdThlN2JcdThlYzJcdThmNTJcdThmNTFcdThmNGZcdThmNTBcdThmNTNcdThmYjRcdTkxNDBc''@;'; put 'put ''dTkxM2ZcdTkxYjBcdTkxYWRcdTkzZGVcdTkzYzdcdTkzY2ZcdTkzYzJcdTkzZGFcdTkzZDBcdTkzZjlcdTkzZWNcdTkzY2NcdTkzZDlcdTkzYTlcdTkzZTZcdTkzY2FcdTkzZDRcdTkzZWVcdTkzZTNcdTkzZDVcdTkzYzRcdTkzY2VcdTkzYzBcdTkzZDJcdTkzZTdcdTk1N2RcdTk1ZGFcdTk1''@;'; put 'put ''ZGJcdTk2ZTFcdTk3MjlcdTk3MmJcdTk3MmNcdTk3MjhcdTk3MjYiXSxbImYzYTEiLCJcdTk3YjNcdTk3YjdcdTk3YjZcdTk3ZGRcdTk3ZGVcdTk3ZGZcdTk4NWNcdTk4NTlcdTk4NWRcdTk4NTdcdTk4YmZcdTk4YmRcdTk4YmJcdTk4YmVcdTk5NDhcdTk5NDdcdTk5NDNcdTk5YTZcdTk5YTdc''@;'; put 'put ''dTlhMWFcdTlhMTVcdTlhMjVcdTlhMWRcdTlhMjRcdTlhMWJcdTlhMjJcdTlhMjBcdTlhMjdcdTlhMjNcdTlhMWVcdTlhMWNcdTlhMTRcdTlhYzJcdTliMGJcdTliMGFcdTliMGVcdTliMGNcdTliMzdcdTliZWFcdTliZWJcdTliZTBcdTliZGVcdTliZTRcdTliZTZcdTliZTJcdTliZjBcdTli''@;'; put 'put ''ZDRcdTliZDdcdTliZWNcdTliZGNcdTliZDlcdTliZTVcdTliZDVcdTliZTFcdTliZGFcdTlkNzdcdTlkODFcdTlkOGFcdTlkODRcdTlkODhcdTlkNzFcdTlkODBcdTlkNzhcdTlkODZcdTlkOGJcdTlkOGNcdTlkN2RcdTlkNmJcdTlkNzRcdTlkNzVcdTlkNzBcdTlkNjlcdTlkODVcdTlkNzNc''@;'; put 'put ''dTlkN2JcdTlkODJcdTlkNmZcdTlkNzlcdTlkN2ZcdTlkODdcdTlkNjhcdTllOTRcdTllOTFcdTllYzBcdTllZmNcdTlmMmRcdTlmNDBcdTlmNDFcdTlmNGRcdTlmNTZcdTlmNTdcdTlmNThcdTUzMzdcdTU2YjIiXSxbImY0NDAiLCJcdTU2YjVcdTU2YjNcdTU4ZTNcdTViNDVcdTVkYzZcdTVk''@;'; put 'put ''YzdcdTVlZWVcdTVlZWZcdTVmYzBcdTVmYzFcdTYxZjlcdTY1MTdcdTY1MTZcdTY1MTVcdTY1MTNcdTY1ZGZcdTY2ZThcdTY2ZTNcdTY2ZTRcdTZhZjNcdTZhZjBcdTZhZWFcdTZhZThcdTZhZjlcdTZhZjFcdTZhZWVcdTZhZWZcdTcwM2NcdTcwMzVcdTcwMmZcdTcwMzdcdTcwMzRcdTcwMzFc''@;'; put 'put ''dTcwNDJcdTcwMzhcdTcwM2ZcdTcwM2FcdTcwMzlcdTcwNDBcdTcwM2JcdTcwMzNcdTcwNDFcdTcyMTNcdTcyMTRcdTcyYThcdTczN2RcdTczN2NcdTc0YmFcdTc2YWJcdTc2YWFcdTc2YmVcdTc2ZWRcdTc3Y2NcdTc3Y2VcdTc3Y2ZcdTc3Y2RcdTc3ZjJcdTc5MjVcdTc5MjNcdTc5MjdcdTc5''@;'; put 'put ''MjhcdTc5MjRcdTc5MjkiXSxbImY0YTEiLCJcdTc5YjJcdTdhNmVcdTdhNmNcdTdhNmRcdTdhZjdcdTdjNDlcdTdjNDhcdTdjNGFcdTdjNDdcdTdjNDVcdTdjZWVcdTdlN2JcdTdlN2VcdTdlODFcdTdlODBcdTdmYmFcdTdmZmZcdTgwNzlcdTgxZGJcdTgxZDlcdTgyMGJcdTgyNjhcdTgyNjlc''@;'; put 'put ''dTg2MjJcdTg1ZmZcdTg2MDFcdTg1ZmVcdTg2MWJcdTg2MDBcdTg1ZjZcdTg2MDRcdTg2MDlcdTg2MDVcdTg2MGNcdTg1ZmRcdTg4MTlcdTg4MTBcdTg4MTFcdTg4MTdcdTg4MTNcdTg4MTZcdTg5NjNcdTg5NjZcdTg5YjlcdTg5ZjdcdThiNjBcdThiNmFcdThiNWRcdThiNjhcdThiNjNcdThi''@;'; put 'put ''NjVcdThiNjdcdThiNmRcdThkYWVcdThlODZcdThlODhcdThlODRcdThmNTlcdThmNTZcdThmNTdcdThmNTVcdThmNThcdThmNWFcdTkwOGRcdTkxNDNcdTkxNDFcdTkxYjdcdTkxYjVcdTkxYjJcdTkxYjNcdTk0MGJcdTk0MTNcdTkzZmJcdTk0MjBcdTk0MGZcdTk0MTRcdTkzZmVcdTk0MTVc''@;'; put 'put ''dTk0MTBcdTk0MjhcdTk0MTlcdTk0MGRcdTkzZjVcdTk0MDBcdTkzZjdcdTk0MDdcdTk0MGVcdTk0MTZcdTk0MTJcdTkzZmFcdTk0MDlcdTkzZjhcdTk0MGFcdTkzZmYiXSxbImY1NDAiLCJcdTkzZmNcdTk0MGNcdTkzZjZcdTk0MTFcdTk0MDZcdTk1ZGVcdTk1ZTBcdTk1ZGZcdTk3MmVcdTk3''@;'; put 'put ''MmZcdTk3YjlcdTk3YmJcdTk3ZmRcdTk3ZmVcdTk4NjBcdTk4NjJcdTk4NjNcdTk4NWZcdTk4YzFcdTk4YzJcdTk5NTBcdTk5NGVcdTk5NTlcdTk5NGNcdTk5NGJcdTk5NTNcdTlhMzJcdTlhMzRcdTlhMzFcdTlhMmNcdTlhMmFcdTlhMzZcdTlhMjlcdTlhMmVcdTlhMzhcdTlhMmRcdTlhYzdc''@;'; put 'put ''dTlhY2FcdTlhYzZcdTliMTBcdTliMTJcdTliMTFcdTljMGJcdTljMDhcdTliZjdcdTljMDVcdTljMTJcdTliZjhcdTljNDBcdTljMDdcdTljMGVcdTljMDZcdTljMTdcdTljMTRcdTljMDlcdTlkOWZcdTlkOTlcdTlkYTRcdTlkOWRcdTlkOTJcdTlkOThcdTlkOTBcdTlkOWIiXSxbImY1YTEi''@;'; put 'put ''LCJcdTlkYTBcdTlkOTRcdTlkOWNcdTlkYWFcdTlkOTdcdTlkYTFcdTlkOWFcdTlkYTJcdTlkYThcdTlkOWVcdTlkYTNcdTlkYmZcdTlkYTlcdTlkOTZcdTlkYTZcdTlkYTdcdTllOTlcdTllOWJcdTllOWFcdTllZTVcdTllZTRcdTllZTdcdTllZTZcdTlmMzBcdTlmMmVcdTlmNWJcdTlmNjBc''@;'; put 'put ''dTlmNWVcdTlmNWRcdTlmNTlcdTlmOTFcdTUxM2FcdTUxMzlcdTUyOThcdTUyOTdcdTU2YzNcdTU2YmRcdTU2YmVcdTViNDhcdTViNDdcdTVkY2JcdTVkY2ZcdTVlZjFcdTYxZmRcdTY1MWJcdTZiMDJcdTZhZmNcdTZiMDNcdTZhZjhcdTZiMDBcdTcwNDNcdTcwNDRcdTcwNGFcdTcwNDhcdTcw''@;'; put 'put ''NDlcdTcwNDVcdTcwNDZcdTcyMWRcdTcyMWFcdTcyMTlcdTczN2VcdTc1MTdcdTc2NmFcdTc3ZDBcdTc5MmRcdTc5MzFcdTc5MmZcdTdjNTRcdTdjNTNcdTdjZjJcdTdlOGFcdTdlODdcdTdlODhcdTdlOGJcdTdlODZcdTdlOGRcdTdmNGRcdTdmYmJcdTgwMzBcdTgxZGRcdTg2MThcdTg2MmFc''@;'; put 'put ''dTg2MjZcdTg2MWZcdTg2MjNcdTg2MWNcdTg2MTlcdTg2MjdcdTg2MmVcdTg2MjFcdTg2MjBcdTg2MjlcdTg2MWVcdTg2MjUiXSxbImY2NDAiLCJcdTg4MjlcdTg4MWRcdTg4MWJcdTg4MjBcdTg4MjRcdTg4MWNcdTg4MmJcdTg4NGFcdTg5NmRcdTg5NjlcdTg5NmVcdTg5NmJcdTg5ZmFcdThi''@;'; put 'put ''NzlcdThiNzhcdThiNDVcdThiN2FcdThiN2JcdThkMTBcdThkMTRcdThkYWZcdThlOGVcdThlOGNcdThmNWVcdThmNWJcdThmNWRcdTkxNDZcdTkxNDRcdTkxNDVcdTkxYjlcdTk0M2ZcdTk0M2JcdTk0MzZcdTk0MjlcdTk0M2RcdTk0M2NcdTk0MzBcdTk0MzlcdTk0MmFcdTk0MzdcdTk0MmNc''@;'; put 'put ''dTk0NDBcdTk0MzFcdTk1ZTVcdTk1ZTRcdTk1ZTNcdTk3MzVcdTk3M2FcdTk3YmZcdTk3ZTFcdTk4NjRcdTk4YzlcdTk4YzZcdTk4YzBcdTk5NThcdTk5NTZcdTlhMzlcdTlhM2RcdTlhNDZcdTlhNDRcdTlhNDJcdTlhNDFcdTlhM2EiXSxbImY2YTEiLCJcdTlhM2ZcdTlhY2RcdTliMTVcdTli''@;'; put 'put ''MTdcdTliMThcdTliMTZcdTliM2FcdTliNTJcdTljMmJcdTljMWRcdTljMWNcdTljMmNcdTljMjNcdTljMjhcdTljMjlcdTljMjRcdTljMjFcdTlkYjdcdTlkYjZcdTlkYmNcdTlkYzFcdTlkYzdcdTlkY2FcdTlkY2ZcdTlkYmVcdTlkYzVcdTlkYzNcdTlkYmJcdTlkYjVcdTlkY2VcdTlkYjlc''@;'; put 'put ''dTlkYmFcdTlkYWNcdTlkYzhcdTlkYjFcdTlkYWRcdTlkY2NcdTlkYjNcdTlkY2RcdTlkYjJcdTllN2FcdTllOWNcdTllZWJcdTllZWVcdTllZWRcdTlmMWJcdTlmMThcdTlmMWFcdTlmMzFcdTlmNGVcdTlmNjVcdTlmNjRcdTlmOTJcdTRlYjlcdTU2YzZcdTU2YzVcdTU2Y2JcdTU5NzFcdTVi''@;'; put 'put ''NGJcdTViNGNcdTVkZDVcdTVkZDFcdTVlZjJcdTY1MjFcdTY1MjBcdTY1MjZcdTY1MjJcdTZiMGJcdTZiMDhcdTZiMDlcdTZjMGRcdTcwNTVcdTcwNTZcdTcwNTdcdTcwNTJcdTcyMWVcdTcyMWZcdTcyYTlcdTczN2ZcdTc0ZDhcdTc0ZDVcdTc0ZDlcdTc0ZDdcdTc2NmRcdTc2YWRcdTc5MzVc''@;'; put 'put ''dTc5YjRcdTdhNzBcdTdhNzFcdTdjNTdcdTdjNWNcdTdjNTlcdTdjNWJcdTdjNWEiXSxbImY3NDAiLCJcdTdjZjRcdTdjZjFcdTdlOTFcdTdmNGZcdTdmODdcdTgxZGVcdTgyNmJcdTg2MzRcdTg2MzVcdTg2MzNcdTg2MmNcdTg2MzJcdTg2MzZcdTg4MmNcdTg4MjhcdTg4MjZcdTg4MmFcdTg4''@;'; put 'put ''MjVcdTg5NzFcdTg5YmZcdTg5YmVcdTg5ZmJcdThiN2VcdThiODRcdThiODJcdThiODZcdThiODVcdThiN2ZcdThkMTVcdThlOTVcdThlOTRcdThlOWFcdThlOTJcdThlOTBcdThlOTZcdThlOTdcdThmNjBcdThmNjJcdTkxNDdcdTk0NGNcdTk0NTBcdTk0NGFcdTk0NGJcdTk0NGZcdTk0NDdc''@;'; put 'put ''dTk0NDVcdTk0NDhcdTk0NDlcdTk0NDZcdTk3M2ZcdTk3ZTNcdTk4NmFcdTk4NjlcdTk4Y2JcdTk5NTRcdTk5NWJcdTlhNGVcdTlhNTNcdTlhNTRcdTlhNGNcdTlhNGZcdTlhNDhcdTlhNGEiXSxbImY3YTEiLCJcdTlhNDlcdTlhNTJcdTlhNTBcdTlhZDBcdTliMTlcdTliMmJcdTliM2JcdTli''@;'; put 'put ''NTZcdTliNTVcdTljNDZcdTljNDhcdTljM2ZcdTljNDRcdTljMzlcdTljMzNcdTljNDFcdTljM2NcdTljMzdcdTljMzRcdTljMzJcdTljM2RcdTljMzZcdTlkZGJcdTlkZDJcdTlkZGVcdTlkZGFcdTlkY2JcdTlkZDBcdTlkZGNcdTlkZDFcdTlkZGZcdTlkZTlcdTlkZDlcdTlkZDhcdTlkZDZc''@;'; put 'put ''dTlkZjVcdTlkZDVcdTlkZGRcdTllYjZcdTllZjBcdTlmMzVcdTlmMzNcdTlmMzJcdTlmNDJcdTlmNmJcdTlmOTVcdTlmYTJcdTUxM2RcdTUyOTlcdTU4ZThcdTU4ZTdcdTU5NzJcdTViNGRcdTVkZDhcdTg4MmZcdTVmNGZcdTYyMDFcdTYyMDNcdTYyMDRcdTY1MjlcdTY1MjVcdTY1OTZcdTY2''@;'; put 'put ''ZWJcdTZiMTFcdTZiMTJcdTZiMGZcdTZiY2FcdTcwNWJcdTcwNWFcdTcyMjJcdTczODJcdTczODFcdTczODNcdTc2NzBcdTc3ZDRcdTdjNjdcdTdjNjZcdTdlOTVcdTgyNmNcdTg2M2FcdTg2NDBcdTg2MzlcdTg2M2NcdTg2MzFcdTg2M2JcdTg2M2VcdTg4MzBcdTg4MzJcdTg4MmVcdTg4MzNc''@;'; put 'put ''dTg5NzZcdTg5NzRcdTg5NzNcdTg5ZmUiXSxbImY4NDAiLCJcdThiOGNcdThiOGVcdThiOGJcdThiODhcdThjNDVcdThkMTlcdThlOThcdThmNjRcdThmNjNcdTkxYmNcdTk0NjJcdTk0NTVcdTk0NWRcdTk0NTdcdTk0NWVcdTk3YzRcdTk3YzVcdTk4MDBcdTlhNTZcdTlhNTlcdTliMWVcdTli''@;'; put 'put ''MWZcdTliMjBcdTljNTJcdTljNThcdTljNTBcdTljNGFcdTljNGRcdTljNGJcdTljNTVcdTljNTlcdTljNGNcdTljNGVcdTlkZmJcdTlkZjdcdTlkZWZcdTlkZTNcdTlkZWJcdTlkZjhcdTlkZTRcdTlkZjZcdTlkZTFcdTlkZWVcdTlkZTZcdTlkZjJcdTlkZjBcdTlkZTJcdTlkZWNcdTlkZjRc''@;'; put 'put ''dTlkZjNcdTlkZThcdTlkZWRcdTllYzJcdTllZDBcdTllZjJcdTllZjNcdTlmMDZcdTlmMWNcdTlmMzhcdTlmMzdcdTlmMzZcdTlmNDNcdTlmNGYiXSxbImY4YTEiLCJcdTlmNzFcdTlmNzBcdTlmNmVcdTlmNmZcdTU2ZDNcdTU2Y2RcdTViNGVcdTVjNmRcdTY1MmRcdTY2ZWRcdTY2ZWVcdTZi''@;'; put 'put ''MTNcdTcwNWZcdTcwNjFcdTcwNWRcdTcwNjBcdTcyMjNcdTc0ZGJcdTc0ZTVcdTc3ZDVcdTc5MzhcdTc5YjdcdTc5YjZcdTdjNmFcdTdlOTdcdTdmODlcdTgyNmRcdTg2NDNcdTg4MzhcdTg4MzdcdTg4MzVcdTg4NGJcdThiOTRcdThiOTVcdThlOWVcdThlOWZcdThlYTBcdThlOWRcdTkxYmVc''@;'; put 'put ''dTkxYmRcdTkxYzJcdTk0NmJcdTk0NjhcdTk0NjlcdTk2ZTVcdTk3NDZcdTk3NDNcdTk3NDdcdTk3YzdcdTk3ZTVcdTlhNWVcdTlhZDVcdTliNTlcdTljNjNcdTljNjdcdTljNjZcdTljNjJcdTljNWVcdTljNjBcdTllMDJcdTlkZmVcdTllMDdcdTllMDNcdTllMDZcdTllMDVcdTllMDBcdTll''@;'; put 'put ''MDFcdTllMDlcdTlkZmZcdTlkZmRcdTllMDRcdTllYTBcdTlmMWVcdTlmNDZcdTlmNzRcdTlmNzVcdTlmNzZcdTU2ZDRcdTY1MmVcdTY1YjhcdTZiMThcdTZiMTlcdTZiMTdcdTZiMWFcdTcwNjJcdTcyMjZcdTcyYWFcdTc3ZDhcdTc3ZDlcdTc5MzlcdTdjNjlcdTdjNmJcdTdjZjZcdTdlOWEi''@;'; put 'put ''XSxbImY5NDAiLCJcdTdlOThcdTdlOWJcdTdlOTlcdTgxZTBcdTgxZTFcdTg2NDZcdTg2NDdcdTg2NDhcdTg5NzlcdTg5N2FcdTg5N2NcdTg5N2JcdTg5ZmZcdThiOThcdThiOTlcdThlYTVcdThlYTRcdThlYTNcdTk0NmVcdTk0NmRcdTk0NmZcdTk0NzFcdTk0NzNcdTk3NDlcdTk4NzJcdTk5''@;'; put 'put ''NWZcdTljNjhcdTljNmVcdTljNmRcdTllMGJcdTllMGRcdTllMTBcdTllMGZcdTllMTJcdTllMTFcdTllYTFcdTllZjVcdTlmMDlcdTlmNDdcdTlmNzhcdTlmN2JcdTlmN2FcdTlmNzlcdTU3MWVcdTcwNjZcdTdjNmZcdTg4M2NcdThkYjJcdThlYTZcdTkxYzNcdTk0NzRcdTk0NzhcdTk0NzZc''@;'; put 'put ''dTk0NzVcdTlhNjBcdTljNzRcdTljNzNcdTljNzFcdTljNzVcdTllMTRcdTllMTNcdTllZjZcdTlmMGEiXSxbImY5YTEiLCJcdTlmYTRcdTcwNjhcdTcwNjVcdTdjZjdcdTg2NmFcdTg4M2VcdTg4M2RcdTg4M2ZcdThiOWVcdThjOWNcdThlYTlcdThlYzlcdTk3NGJcdTk4NzNcdTk4NzRcdTk4''@;'; put 'put ''Y2NcdTk5NjFcdTk5YWJcdTlhNjRcdTlhNjZcdTlhNjdcdTliMjRcdTllMTVcdTllMTdcdTlmNDhcdTYyMDdcdTZiMWVcdTcyMjdcdTg2NGNcdThlYThcdTk0ODJcdTk0ODBcdTk0ODFcdTlhNjlcdTlhNjhcdTliMmVcdTllMTlcdTcyMjlcdTg2NGJcdThiOWZcdTk0ODNcdTljNzlcdTllYjdc''@;'; put 'put ''dTc2NzVcdTlhNmJcdTljN2FcdTllMWRcdTcwNjlcdTcwNmFcdTllYTRcdTlmN2VcdTlmNDlcdTlmOThcdTc4ODFcdTkyYjlcdTg4Y2ZcdTU4YmJcdTYwNTJcdTdjYTdcdTVhZmFcdTI1NTRcdTI1NjZcdTI1NTdcdTI1NjBcdTI1NmNcdTI1NjNcdTI1NWFcdTI1NjlcdTI1NWRcdTI1NTJcdTI1''@;'; put 'put ''NjRcdTI1NTVcdTI1NWVcdTI1NmFcdTI1NjFcdTI1NThcdTI1NjdcdTI1NWJcdTI1NTNcdTI1NjVcdTI1NTZcdTI1NWZcdTI1NmJcdTI1NjJcdTI1NTlcdTI1NjhcdTI1NWNcdTI1NTFcdTI1NTBcdTI1NmRcdTI1NmVcdTI1NzBcdTI1NmZcdTI1OTMiXV0nKX0sNTY0MDY6dWU9PnsidXNlIHN0''@;'; put 'put ''cmljdCI7dWUuZXhwb3J0cz1KU09OLnBhcnNlKCdbWyIwIiwiXFx1MDAwMCIsMTI3XSxbIjhlYTEiLCJcdWZmNjEiLDYyXSxbImExYTEiLCJcdTMwMDBcdTMwMDFcdTMwMDJcdWZmMGNcdWZmMGVcdTMwZmJcdWZmMWFcdWZmMWJcdWZmMWZcdWZmMDFcdTMwOWJcdTMwOWNceGI0XHVmZjQwXHhh''@;'; put 'put ''OFx1ZmYzZVx1ZmZlM1x1ZmYzZlx1MzBmZFx1MzBmZVx1MzA5ZFx1MzA5ZVx1MzAwM1x1NGVkZFx1MzAwNVx1MzAwNlx1MzAwN1x1MzBmY1x1MjAxNVx1MjAxMFx1ZmYwZlx1ZmYzY1x1ZmY1ZVx1MjIyNVx1ZmY1Y1x1MjAyNlx1MjAyNVx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1ZmYwOFx1''@;'; put 'put ''ZmYwOVx1MzAxNFx1MzAxNVx1ZmYzYlx1ZmYzZFx1ZmY1Ylx1ZmY1ZFx1MzAwOCIsOSwiXHVmZjBiXHVmZjBkXHhiMVx4ZDdceGY3XHVmZjFkXHUyMjYwXHVmZjFjXHVmZjFlXHUyMjY2XHUyMjY3XHUyMjFlXHUyMjM0XHUyNjQyXHUyNjQwXHhiMFx1MjAzMlx1MjAzM1x1MjEwM1x1ZmZlNVx1''@;'; put 'put ''ZmYwNFx1ZmZlMFx1ZmZlMVx1ZmYwNVx1ZmYwM1x1ZmYwNlx1ZmYwYVx1ZmYyMFx4YTdcdTI2MDZcdTI2MDVcdTI1Y2JcdTI1Y2ZcdTI1Y2VcdTI1YzciXSxbImEyYTEiLCJcdTI1YzZcdTI1YTFcdTI1YTBcdTI1YjNcdTI1YjJcdTI1YmRcdTI1YmNcdTIwM2JcdTMwMTJcdTIxOTJcdTIxOTBc''@;'; put 'put ''dTIxOTFcdTIxOTNcdTMwMTMiXSxbImEyYmEiLCJcdTIyMDhcdTIyMGJcdTIyODZcdTIyODdcdTIyODJcdTIyODNcdTIyMmFcdTIyMjkiXSxbImEyY2EiLCJcdTIyMjdcdTIyMjhcdWZmZTJcdTIxZDJcdTIxZDRcdTIyMDBcdTIyMDMiXSxbImEyZGMiLCJcdTIyMjBcdTIyYTVcdTIzMTJcdTIy''@;'; put 'put ''MDJcdTIyMDdcdTIyNjFcdTIyNTJcdTIyNmFcdTIyNmJcdTIyMWFcdTIyM2RcdTIyMWRcdTIyMzVcdTIyMmJcdTIyMmMiXSxbImEyZjIiLCJcdTIxMmJcdTIwMzBcdTI2NmZcdTI2NmRcdTI2NmFcdTIwMjBcdTIwMjFceGI2Il0sWyJhMmZlIiwiXHUyNWVmIl0sWyJhM2IwIiwiXHVmZjEwIiw5''@;'; put 'put ''XSxbImEzYzEiLCJcdWZmMjEiLDI1XSxbImEzZTEiLCJcdWZmNDEiLDI1XSxbImE0YTEiLCJcdTMwNDEiLDgyXSxbImE1YTEiLCJcdTMwYTEiLDg1XSxbImE2YTEiLCJcdTAzOTEiLDE2LCJcdTAzYTMiLDZdLFsiYTZjMSIsIlx1MDNiMSIsMTYsIlx1MDNjMyIsNl0sWyJhN2ExIiwiXHUwNDEw''@;'; put 'put ''Iiw1LCJcdTA0MDFcdTA0MTYiLDI1XSxbImE3ZDEiLCJcdTA0MzAiLDUsIlx1MDQ1MVx1MDQzNiIsMjVdLFsiYThhMSIsIlx1MjUwMFx1MjUwMlx1MjUwY1x1MjUxMFx1MjUxOFx1MjUxNFx1MjUxY1x1MjUyY1x1MjUyNFx1MjUzNFx1MjUzY1x1MjUwMVx1MjUwM1x1MjUwZlx1MjUxM1x1MjUx''@;'; put 'put ''Ylx1MjUxN1x1MjUyM1x1MjUzM1x1MjUyYlx1MjUzYlx1MjU0Ylx1MjUyMFx1MjUyZlx1MjUyOFx1MjUzN1x1MjUzZlx1MjUxZFx1MjUzMFx1MjUyNVx1MjUzOFx1MjU0MiJdLFsiYWRhMSIsIlx1MjQ2MCIsMTksIlx1MjE2MCIsOV0sWyJhZGMwIiwiXHUzMzQ5XHUzMzE0XHUzMzIyXHUzMzRk''@;'; put 'put ''XHUzMzE4XHUzMzI3XHUzMzAzXHUzMzM2XHUzMzUxXHUzMzU3XHUzMzBkXHUzMzI2XHUzMzIzXHUzMzJiXHUzMzRhXHUzMzNiXHUzMzljXHUzMzlkXHUzMzllXHUzMzhlXHUzMzhmXHUzM2M0XHUzM2ExIl0sWyJhZGRmIiwiXHUzMzdiXHUzMDFkXHUzMDFmXHUyMTE2XHUzM2NkXHUyMTIxXHUz''@;'; put 'put ''MmE0Iiw0LCJcdTMyMzFcdTMyMzJcdTMyMzlcdTMzN2VcdTMzN2RcdTMzN2NcdTIyNTJcdTIyNjFcdTIyMmJcdTIyMmVcdTIyMTFcdTIyMWFcdTIyYTVcdTIyMjBcdTIyMWZcdTIyYmZcdTIyMzVcdTIyMjlcdTIyMmEiXSxbImIwYTEiLCJcdTRlOWNcdTU1MTZcdTVhMDNcdTk2M2ZcdTU0YzBc''@;'; put 'put ''dTYxMWJcdTYzMjhcdTU5ZjZcdTkwMjJcdTg0NzVcdTgzMWNcdTdhNTBcdTYwYWFcdTYzZTFcdTZlMjVcdTY1ZWRcdTg0NjZcdTgyYTZcdTliZjVcdTY4OTNcdTU3MjdcdTY1YTFcdTYyNzFcdTViOWJcdTU5ZDBcdTg2N2JcdTk4ZjRcdTdkNjJcdTdkYmVcdTliOGVcdTYyMTZcdTdjOWZcdTg4''@;'; put 'put ''YjdcdTViODlcdTVlYjVcdTYzMDlcdTY2OTdcdTY4NDhcdTk1YzdcdTk3OGRcdTY3NGZcdTRlZTVcdTRmMGFcdTRmNGRcdTRmOWRcdTUwNDlcdTU2ZjJcdTU5MzdcdTU5ZDRcdTVhMDFcdTVjMDlcdTYwZGZcdTYxMGZcdTYxNzBcdTY2MTNcdTY5MDVcdTcwYmFcdTc1NGZcdTc1NzBcdTc5ZmJc''@;'; put 'put ''dTdkYWRcdTdkZWZcdTgwYzNcdTg0MGVcdTg4NjNcdThiMDJcdTkwNTVcdTkwN2FcdTUzM2JcdTRlOTVcdTRlYTVcdTU3ZGZcdTgwYjJcdTkwYzFcdTc4ZWZcdTRlMDBcdTU4ZjFcdTZlYTJcdTkwMzhcdTdhMzJcdTgzMjhcdTgyOGJcdTljMmZcdTUxNDFcdTUzNzBcdTU0YmRcdTU0ZTFcdTU2''@;'; put 'put ''ZTBcdTU5ZmJcdTVmMTVcdTk4ZjJcdTZkZWJcdTgwZTRcdTg1MmQiXSxbImIxYTEiLCJcdTk2NjJcdTk2NzBcdTk2YTBcdTk3ZmJcdTU0MGJcdTUzZjNcdTViODdcdTcwY2ZcdTdmYmRcdThmYzJcdTk2ZThcdTUzNmZcdTlkNWNcdTdhYmFcdTRlMTFcdTc4OTNcdTgxZmNcdTZlMjZcdTU2MThc''@;'; put 'put ''dTU1MDRcdTZiMWRcdTg1MWFcdTljM2JcdTU5ZTVcdTUzYTlcdTZkNjZcdTc0ZGNcdTk1OGZcdTU2NDJcdTRlOTFcdTkwNGJcdTk2ZjJcdTgzNGZcdTk5MGNcdTUzZTFcdTU1YjZcdTViMzBcdTVmNzFcdTY2MjBcdTY2ZjNcdTY4MDRcdTZjMzhcdTZjZjNcdTZkMjlcdTc0NWJcdTc2YzhcdTdh''@;'; put 'put ''NGVcdTk4MzRcdTgyZjFcdTg4NWJcdThhNjBcdTkyZWRcdTZkYjJcdTc1YWJcdTc2Y2FcdTk5YzVcdTYwYTZcdThiMDFcdThkOGFcdTk1YjJcdTY5OGVcdTUzYWRcdTUxODZcdTU3MTJcdTU4MzBcdTU5NDRcdTViYjRcdTVlZjZcdTYwMjhcdTYzYTlcdTYzZjRcdTZjYmZcdTZmMTRcdTcwOGVc''@;'; put 'put ''dTcxMTRcdTcxNTlcdTcxZDVcdTczM2ZcdTdlMDFcdTgyNzZcdTgyZDFcdTg1OTdcdTkwNjBcdTkyNWJcdTlkMWJcdTU4NjlcdTY1YmNcdTZjNWFcdTc1MjVcdTUxZjlcdTU5MmVcdTU5NjVcdTVmODBcdTVmZGMiXSxbImIyYTEiLCJcdTYyYmNcdTY1ZmFcdTZhMmFcdTZiMjdcdTZiYjRcdTcz''@;'; put 'put ''OGJcdTdmYzFcdTg5NTZcdTlkMmNcdTlkMGVcdTllYzRcdTVjYTFcdTZjOTZcdTgzN2JcdTUxMDRcdTVjNGJcdTYxYjZcdTgxYzZcdTY4NzZcdTcyNjFcdTRlNTlcdTRmZmFcdTUzNzhcdTYwNjlcdTZlMjlcdTdhNGZcdTk3ZjNcdTRlMGJcdTUzMTZcdTRlZWVcdTRmNTVcdTRmM2RcdTRmYTFc''@;'; put 'put ''dTRmNzNcdTUyYTBcdTUzZWZcdTU2MDlcdTU5MGZcdTVhYzFcdTViYjZcdTViZTFcdTc5ZDFcdTY2ODdcdTY3OWNcdTY3YjZcdTZiNGNcdTZjYjNcdTcwNmJcdTczYzJcdTc5OGRcdTc5YmVcdTdhM2NcdTdiODdcdTgyYjFcdTgyZGJcdTgzMDRcdTgzNzdcdTgzZWZcdTgzZDNcdTg3NjZcdThh''@;'; put 'put ''YjJcdTU2MjlcdThjYThcdThmZTZcdTkwNGVcdTk3MWVcdTg2OGFcdTRmYzRcdTVjZThcdTYyMTFcdTcyNTlcdTc1M2JcdTgxZTVcdTgyYmRcdTg2ZmVcdThjYzBcdTk2YzVcdTk5MTNcdTk5ZDVcdTRlY2JcdTRmMWFcdTg5ZTNcdTU2ZGVcdTU4NGFcdTU4Y2FcdTVlZmJcdTVmZWJcdTYwMmFc''@;'; put 'put ''dTYwOTRcdTYwNjJcdTYxZDBcdTYyMTJcdTYyZDBcdTY1MzkiXSxbImIzYTEiLCJcdTliNDFcdTY2NjZcdTY4YjBcdTZkNzdcdTcwNzBcdTc1NGNcdTc2ODZcdTdkNzVcdTgyYTVcdTg3ZjlcdTk1OGJcdTk2OGVcdThjOWRcdTUxZjFcdTUyYmVcdTU5MTZcdTU0YjNcdTViYjNcdTVkMTZcdTYx''@;'; put 'put ''NjhcdTY5ODJcdTZkYWZcdTc4OGRcdTg0Y2JcdTg4NTdcdThhNzJcdTkzYTdcdTlhYjhcdTZkNmNcdTk5YThcdTg2ZDlcdTU3YTNcdTY3ZmZcdTg2Y2VcdTkyMGVcdTUyODNcdTU2ODdcdTU0MDRcdTVlZDNcdTYyZTFcdTY0YjlcdTY4M2NcdTY4MzhcdTZiYmJcdTczNzJcdTc4YmFcdTdhNmJc''@;'; put 'put ''dTg5OWFcdTg5ZDJcdThkNmJcdThmMDNcdTkwZWRcdTk1YTNcdTk2OTRcdTk3NjlcdTViNjZcdTVjYjNcdTY5N2RcdTk4NGRcdTk4NGVcdTYzOWJcdTdiMjBcdTZhMmJcdTZhN2ZcdTY4YjZcdTljMGRcdTZmNWZcdTUyNzJcdTU1OWRcdTYwNzBcdTYyZWNcdTZkM2JcdTZlMDdcdTZlZDFcdTg0''@;'; put 'put ''NWJcdTg5MTBcdThmNDRcdTRlMTRcdTljMzlcdTUzZjZcdTY5MWJcdTZhM2FcdTk3ODRcdTY4MmFcdTUxNWNcdTdhYzNcdTg0YjJcdTkxZGNcdTkzOGNcdTU2NWJcdTlkMjhcdTY4MjJcdTgzMDVcdTg0MzEiXSxbImI0YTEiLCJcdTdjYTVcdTUyMDhcdTgyYzVcdTc0ZTZcdTRlN2VcdTRmODNc''@;'; put 'put ''dTUxYTBcdTViZDJcdTUyMGFcdTUyZDhcdTUyZTdcdTVkZmJcdTU1OWFcdTU4MmFcdTU5ZTZcdTViOGNcdTViOThcdTViZGJcdTVlNzJcdTVlNzlcdTYwYTNcdTYxMWZcdTYxNjNcdTYxYmVcdTYzZGJcdTY1NjJcdTY3ZDFcdTY4NTNcdTY4ZmFcdTZiM2VcdTZiNTNcdTZjNTdcdTZmMjJcdTZm''@;'; put 'put ''OTdcdTZmNDVcdTc0YjBcdTc1MThcdTc2ZTNcdTc3MGJcdTdhZmZcdTdiYTFcdTdjMjFcdTdkZTlcdTdmMzZcdTdmZjBcdTgwOWRcdTgyNjZcdTgzOWVcdTg5YjNcdThhY2NcdThjYWJcdTkwODRcdTk0NTFcdTk1OTNcdTk1OTFcdTk1YTJcdTk2NjVcdTk3ZDNcdTk5MjhcdTgyMThcdTRlMzhc''@;'; put 'put ''dTU0MmJcdTVjYjhcdTVkY2NcdTczYTlcdTc2NGNcdTc3M2NcdTVjYTlcdTdmZWJcdThkMGJcdTk2YzFcdTk4MTFcdTk4NTRcdTk4NThcdTRmMDFcdTRmMGVcdTUzNzFcdTU1OWNcdTU2NjhcdTU3ZmFcdTU5NDdcdTViMDlcdTViYzRcdTVjOTBcdTVlMGNcdTVlN2VcdTVmY2NcdTYzZWVcdTY3''@;'; put 'put ''M2FcdTY1ZDdcdTY1ZTJcdTY3MWZcdTY4Y2JcdTY4YzQiXSxbImI1YTEiLCJcdTZhNWZcdTVlMzBcdTZiYzVcdTZjMTdcdTZjN2RcdTc1N2ZcdTc5NDhcdTViNjNcdTdhMDBcdTdkMDBcdTVmYmRcdTg5OGZcdThhMThcdThjYjRcdThkNzdcdThlY2NcdThmMWRcdTk4ZTJcdTlhMGVcdTliM2Nc''@;'; put 'put ''dTRlODBcdTUwN2RcdTUxMDBcdTU5OTNcdTViOWNcdTYyMmZcdTYyODBcdTY0ZWNcdTZiM2FcdTcyYTBcdTc1OTFcdTc5NDdcdTdmYTlcdTg3ZmJcdThhYmNcdThiNzBcdTYzYWNcdTgzY2FcdTk3YTBcdTU0MDlcdTU0MDNcdTU1YWJcdTY4NTRcdTZhNThcdThhNzBcdTc4MjdcdTY3NzVcdTll''@;'; put 'put ''Y2RcdTUzNzRcdTViYTJcdTgxMWFcdTg2NTBcdTkwMDZcdTRlMThcdTRlNDVcdTRlYzdcdTRmMTFcdTUzY2FcdTU0MzhcdTViYWVcdTVmMTNcdTYwMjVcdTY1NTFcdTY3M2RcdTZjNDJcdTZjNzJcdTZjZTNcdTcwNzhcdTc0MDNcdTdhNzZcdTdhYWVcdTdiMDhcdTdkMWFcdTdjZmVcdTdkNjZc''@;'; put 'put ''dTY1ZTdcdTcyNWJcdTUzYmJcdTVjNDVcdTVkZThcdTYyZDJcdTYyZTBcdTYzMTlcdTZlMjBcdTg2NWFcdThhMzFcdThkZGRcdTkyZjhcdTZmMDFcdTc5YTZcdTliNWFcdTRlYThcdTRlYWJcdTRlYWMiXSxbImI2YTEiLCJcdTRmOWJcdTRmYTBcdTUwZDFcdTUxNDdcdTdhZjZcdTUxNzFcdTUx''@;'; put 'put ''ZjZcdTUzNTRcdTUzMjFcdTUzN2ZcdTUzZWJcdTU1YWNcdTU4ODNcdTVjZTFcdTVmMzdcdTVmNGFcdTYwMmZcdTYwNTBcdTYwNmRcdTYzMWZcdTY1NTlcdTZhNGJcdTZjYzFcdTcyYzJcdTcyZWRcdTc3ZWZcdTgwZjhcdTgxMDVcdTgyMDhcdTg1NGVcdTkwZjdcdTkzZTFcdTk3ZmZcdTk5NTdc''@;'; put 'put ''dTlhNWFcdTRlZjBcdTUxZGRcdTVjMmRcdTY2ODFcdTY5NmRcdTVjNDBcdTY2ZjJcdTY5NzVcdTczODlcdTY4NTBcdTdjODFcdTUwYzVcdTUyZTRcdTU3NDdcdTVkZmVcdTkzMjZcdTY1YTRcdTZiMjNcdTZiM2RcdTc0MzRcdTc5ODFcdTc5YmRcdTdiNGJcdTdkY2FcdTgyYjlcdTgzY2NcdTg4''@;'; put 'put ''N2ZcdTg5NWZcdThiMzlcdThmZDFcdTkxZDFcdTU0MWZcdTkyODBcdTRlNWRcdTUwMzZcdTUzZTVcdTUzM2FcdTcyZDdcdTczOTZcdTc3ZTlcdTgyZTZcdThlYWZcdTk5YzZcdTk5YzhcdTk5ZDJcdTUxNzdcdTYxMWFcdTg2NWVcdTU1YjBcdTdhN2FcdTUwNzZcdTViZDNcdTkwNDdcdTk2ODVc''@;'; put 'put ''dTRlMzJcdTZhZGJcdTkxZTdcdTVjNTFcdTVjNDgiXSxbImI3YTEiLCJcdTYzOThcdTdhOWZcdTZjOTNcdTk3NzRcdThmNjFcdTdhYWFcdTcxOGFcdTk2ODhcdTdjODJcdTY4MTdcdTdlNzBcdTY4NTFcdTkzNmNcdTUyZjJcdTU0MWJcdTg1YWJcdThhMTNcdTdmYTRcdThlY2RcdTkwZTFcdTUz''@;'; put 'put ''NjZcdTg4ODhcdTc5NDFcdTRmYzJcdTUwYmVcdTUyMTFcdTUxNDRcdTU1NTNcdTU3MmRcdTczZWFcdTU3OGJcdTU5NTFcdTVmNjJcdTVmODRcdTYwNzVcdTYxNzZcdTYxNjdcdTYxYTlcdTYzYjJcdTY0M2FcdTY1NmNcdTY2NmZcdTY4NDJcdTZlMTNcdTc1NjZcdTdhM2RcdTdjZmJcdTdkNGNc''@;'; put 'put ''dTdkOTlcdTdlNGJcdTdmNmJcdTgzMGVcdTgzNGFcdTg2Y2RcdThhMDhcdThhNjNcdThiNjZcdThlZmRcdTk4MWFcdTlkOGZcdTgyYjhcdThmY2VcdTliZThcdTUyODdcdTYyMWZcdTY0ODNcdTZmYzBcdTk2OTlcdTY4NDFcdTUwOTFcdTZiMjBcdTZjN2FcdTZmNTRcdTdhNzRcdTdkNTBcdTg4''@;'; put 'put ''NDBcdThhMjNcdTY3MDhcdTRlZjZcdTUwMzlcdTUwMjZcdTUwNjVcdTUxN2NcdTUyMzhcdTUyNjNcdTU1YTdcdTU3MGZcdTU4MDVcdTVhY2NcdTVlZmFcdTYxYjJcdTYxZjhcdTYyZjNcdTYzNzIiXSxbImI4YTEiLCJcdTY5MWNcdTZhMjlcdTcyN2RcdTcyYWNcdTczMmVcdTc4MTRcdTc4NmZc''@;'; put 'put ''dTdkNzlcdTc3MGNcdTgwYTlcdTg5OGJcdThiMTlcdThjZTJcdThlZDJcdTkwNjNcdTkzNzVcdTk2N2FcdTk4NTVcdTlhMTNcdTllNzhcdTUxNDNcdTUzOWZcdTUzYjNcdTVlN2JcdTVmMjZcdTZlMWJcdTZlOTBcdTczODRcdTczZmVcdTdkNDNcdTgyMzdcdThhMDBcdThhZmFcdTk2NTBcdTRl''@;'; put 'put ''NGVcdTUwMGJcdTUzZTRcdTU0N2NcdTU2ZmFcdTU5ZDFcdTViNjRcdTVkZjFcdTVlYWJcdTVmMjdcdTYyMzhcdTY1NDVcdTY3YWZcdTZlNTZcdTcyZDBcdTdjY2FcdTg4YjRcdTgwYTFcdTgwZTFcdTgzZjBcdTg2NGVcdThhODdcdThkZThcdTkyMzdcdTk2YzdcdTk4NjdcdTlmMTNcdTRlOTRc''@;'; put 'put ''dTRlOTJcdTRmMGRcdTUzNDhcdTU0NDlcdTU0M2VcdTVhMmZcdTVmOGNcdTVmYTFcdTYwOWZcdTY4YTdcdTZhOGVcdTc0NWFcdTc4ODFcdThhOWVcdThhYTRcdThiNzdcdTkxOTBcdTRlNWVcdTliYzlcdTRlYTRcdTRmN2NcdTRmYWZcdTUwMTlcdTUwMTZcdTUxNDlcdTUxNmNcdTUyOWZcdTUy''@;'; put 'put ''YjlcdTUyZmVcdTUzOWFcdTUzZTNcdTU0MTEiXSxbImI5YTEiLCJcdTU0MGVcdTU1ODlcdTU3NTFcdTU3YTJcdTU5N2RcdTViNTRcdTViNWRcdTViOGZcdTVkZTVcdTVkZTdcdTVkZjdcdTVlNzhcdTVlODNcdTVlOWFcdTVlYjdcdTVmMThcdTYwNTJcdTYxNGNcdTYyOTdcdTYyZDhcdTYzYTdc''@;'; put 'put ''dTY1M2JcdTY2MDJcdTY2NDNcdTY2ZjRcdTY3NmRcdTY4MjFcdTY4OTdcdTY5Y2JcdTZjNWZcdTZkMmFcdTZkNjlcdTZlMmZcdTZlOWRcdTc1MzJcdTc2ODdcdTc4NmNcdTdhM2ZcdTdjZTBcdTdkMDVcdTdkMThcdTdkNWVcdTdkYjFcdTgwMTVcdTgwMDNcdTgwYWZcdTgwYjFcdTgxNTRcdTgx''@;'; put 'put ''OGZcdTgyMmFcdTgzNTJcdTg4NGNcdTg4NjFcdThiMWJcdThjYTJcdThjZmNcdTkwY2FcdTkxNzVcdTkyNzFcdTc4M2ZcdTkyZmNcdTk1YTRcdTk2NGRcdTk4MDVcdTk5OTlcdTlhZDhcdTlkM2JcdTUyNWJcdTUyYWJcdTUzZjdcdTU0MDhcdTU4ZDVcdTYyZjdcdTZmZTBcdThjNmFcdThmNWZc''@;'; put 'put ''dTllYjlcdTUxNGJcdTUyM2JcdTU0NGFcdTU2ZmRcdTdhNDBcdTkxNzdcdTlkNjBcdTllZDJcdTczNDRcdTZmMDlcdTgxNzBcdTc1MTFcdTVmZmRcdTYwZGFcdTlhYThcdTcyZGJcdThmYmMiXSxbImJhYTEiLCJcdTZiNjRcdTk4MDNcdTRlY2FcdTU2ZjBcdTU3NjRcdTU4YmVcdTVhNWFcdTYw''@;'; put 'put ''NjhcdTYxYzdcdTY2MGZcdTY2MDZcdTY4MzlcdTY4YjFcdTZkZjdcdTc1ZDVcdTdkM2FcdTgyNmVcdTliNDJcdTRlOWJcdTRmNTBcdTUzYzlcdTU1MDZcdTVkNmZcdTVkZTZcdTVkZWVcdTY3ZmJcdTZjOTlcdTc0NzNcdTc4MDJcdThhNTBcdTkzOTZcdTg4ZGZcdTU3NTBcdTVlYTdcdTYzMmJc''@;'; put 'put ''dTUwYjVcdTUwYWNcdTUxOGRcdTY3MDBcdTU0YzlcdTU4NWVcdTU5YmJcdTViYjBcdTVmNjlcdTYyNGRcdTYzYTFcdTY4M2RcdTZiNzNcdTZlMDhcdTcwN2RcdTkxYzdcdTcyODBcdTc4MTVcdTc4MjZcdTc5NmRcdTY1OGVcdTdkMzBcdTgzZGNcdTg4YzFcdThmMDlcdTk2OWJcdTUyNjRcdTU3''@;'; put 'put ''MjhcdTY3NTBcdTdmNmFcdThjYTFcdTUxYjRcdTU3NDJcdTk2MmFcdTU4M2FcdTY5OGFcdTgwYjRcdTU0YjJcdTVkMGVcdTU3ZmNcdTc4OTVcdTlkZmFcdTRmNWNcdTUyNGFcdTU0OGJcdTY0M2VcdTY2MjhcdTY3MTRcdTY3ZjVcdTdhODRcdTdiNTZcdTdkMjJcdTkzMmZcdTY4NWNcdTliYWRc''@;'; put 'put ''dTdiMzlcdTUzMTlcdTUxOGFcdTUyMzciXSxbImJiYTEiLCJcdTViZGZcdTYyZjZcdTY0YWVcdTY0ZTZcdTY3MmRcdTZiYmFcdTg1YTlcdTk2ZDFcdTc2OTBcdTliZDZcdTYzNGNcdTkzMDZcdTliYWJcdTc2YmZcdTY2NTJcdTRlMDlcdTUwOThcdTUzYzJcdTVjNzFcdTYwZThcdTY0OTJcdTY1''@;'; put 'put ''NjNcdTY4NWZcdTcxZTZcdTczY2FcdTc1MjNcdTdiOTdcdTdlODJcdTg2OTVcdThiODNcdThjZGJcdTkxNzhcdTk5MTBcdTY1YWNcdTY2YWJcdTZiOGJcdTRlZDVcdTRlZDRcdTRmM2FcdTRmN2ZcdTUyM2FcdTUzZjhcdTUzZjJcdTU1ZTNcdTU2ZGJcdTU4ZWJcdTU5Y2JcdTU5YzlcdTU5ZmZc''@;'; put 'put ''dTViNTBcdTVjNGRcdTVlMDJcdTVlMmJcdTVmZDdcdTYwMWRcdTYzMDdcdTY1MmZcdTViNWNcdTY1YWZcdTY1YmRcdTY1ZThcdTY3OWRcdTZiNjJcdTZiN2JcdTZjMGZcdTczNDVcdTc5NDlcdTc5YzFcdTdjZjhcdTdkMTlcdTdkMmJcdTgwYTJcdTgxMDJcdTgxZjNcdTg5OTZcdThhNWVcdThh''@;'; put 'put ''NjlcdThhNjZcdThhOGNcdThhZWVcdThjYzdcdThjZGNcdTk2Y2NcdTk4ZmNcdTZiNmZcdTRlOGJcdTRmM2NcdTRmOGRcdTUxNTBcdTViNTdcdTViZmFcdTYxNDhcdTYzMDFcdTY2NDIiXSxbImJjYTEiLCJcdTZiMjFcdTZlY2JcdTZjYmJcdTcyM2VcdTc0YmRcdTc1ZDRcdTc4YzFcdTc5M2Fc''@;'; put 'put ''dTgwMGNcdTgwMzNcdTgxZWFcdTg0OTRcdThmOWVcdTZjNTBcdTllN2ZcdTVmMGZcdThiNThcdTlkMmJcdTdhZmFcdThlZjhcdTViOGRcdTk2ZWJcdTRlMDNcdTUzZjFcdTU3ZjdcdTU5MzFcdTVhYzlcdTViYTRcdTYwODlcdTZlN2ZcdTZmMDZcdTc1YmVcdThjZWFcdTViOWZcdTg1MDBcdTdi''@;'; put 'put ''ZTBcdTUwNzJcdTY3ZjRcdTgyOWRcdTVjNjFcdTg1NGFcdTdlMWVcdTgyMGVcdTUxOTlcdTVjMDRcdTYzNjhcdThkNjZcdTY1OWNcdTcxNmVcdTc5M2VcdTdkMTdcdTgwMDVcdThiMWRcdThlY2FcdTkwNmVcdTg2YzdcdTkwYWFcdTUwMWZcdTUyZmFcdTVjM2FcdTY3NTNcdTcwN2NcdTcyMzVc''@;'; put 'put ''dTkxNGNcdTkxYzhcdTkzMmJcdTgyZTVcdTViYzJcdTVmMzFcdTYwZjlcdTRlM2JcdTUzZDZcdTViODhcdTYyNGJcdTY3MzFcdTZiOGFcdTcyZTlcdTczZTBcdTdhMmVcdTgxNmJcdThkYTNcdTkxNTJcdTk5OTZcdTUxMTJcdTUzZDdcdTU0NmFcdTViZmZcdTYzODhcdTZhMzlcdTdkYWNcdTk3''@;'; put 'put ''MDBcdTU2ZGFcdTUzY2VcdTU0NjgiXSxbImJkYTEiLCJcdTViOTdcdTVjMzFcdTVkZGVcdTRmZWVcdTYxMDFcdTYyZmVcdTZkMzJcdTc5YzBcdTc5Y2JcdTdkNDJcdTdlNGRcdTdmZDJcdTgxZWRcdTgyMWZcdTg0OTBcdTg4NDZcdTg5NzJcdThiOTBcdThlNzRcdThmMmZcdTkwMzFcdTkxNGJc''@;'; put 'put ''dTkxNmNcdTk2YzZcdTkxOWNcdTRlYzBcdTRmNGZcdTUxNDVcdTUzNDFcdTVmOTNcdTYyMGVcdTY3ZDRcdTZjNDFcdTZlMGJcdTczNjNcdTdlMjZcdTkxY2RcdTkyODNcdTUzZDRcdTU5MTlcdTViYmZcdTZkZDFcdTc5NWRcdTdlMmVcdTdjOWJcdTU4N2VcdTcxOWZcdTUxZmFcdTg4NTNcdThm''@;'; put 'put ''ZjBcdTRmY2FcdTVjZmJcdTY2MjVcdTc3YWNcdTdhZTNcdTgyMWNcdTk5ZmZcdTUxYzZcdTVmYWFcdTY1ZWNcdTY5NmZcdTZiODlcdTZkZjNcdTZlOTZcdTZmNjRcdTc2ZmVcdTdkMTRcdTVkZTFcdTkwNzVcdTkxODdcdTk4MDZcdTUxZTZcdTUyMWRcdTYyNDBcdTY2OTFcdTY2ZDlcdTZlMWFc''@;'; put 'put ''dTVlYjZcdTdkZDJcdTdmNzJcdTY2ZjhcdTg1YWZcdTg1ZjdcdThhZjhcdTUyYTlcdTUzZDlcdTU5NzNcdTVlOGZcdTVmOTBcdTYwNTVcdTkyZTRcdTk2NjRcdTUwYjdcdTUxMWYiXSxbImJlYTEiLCJcdTUyZGRcdTUzMjBcdTUzNDdcdTUzZWNcdTU0ZThcdTU1NDZcdTU1MzFcdTU2MTdcdTU5''@;'; put 'put ''NjhcdTU5YmVcdTVhM2NcdTViYjVcdTVjMDZcdTVjMGZcdTVjMTFcdTVjMWFcdTVlODRcdTVlOGFcdTVlZTBcdTVmNzBcdTYyN2ZcdTYyODRcdTYyZGJcdTYzOGNcdTYzNzdcdTY2MDdcdTY2MGNcdTY2MmRcdTY2NzZcdTY3N2VcdTY4YTJcdTZhMWZcdTZhMzVcdTZjYmNcdTZkODhcdTZlMDlc''@;'; put 'put ''dTZlNThcdTcxM2NcdTcxMjZcdTcxNjdcdTc1YzdcdTc3MDFcdTc4NWRcdTc5MDFcdTc5NjVcdTc5ZjBcdTdhZTBcdTdiMTFcdTdjYTdcdTdkMzlcdTgwOTZcdTgzZDZcdTg0OGJcdTg1NDlcdTg4NWRcdTg4ZjNcdThhMWZcdThhM2NcdThhNTRcdThhNzNcdThjNjFcdThjZGVcdTkxYTRcdTky''@;'; put 'put ''NjZcdTkzN2VcdTk0MThcdTk2OWNcdTk3OThcdTRlMGFcdTRlMDhcdTRlMWVcdTRlNTdcdTUxOTdcdTUyNzBcdTU3Y2VcdTU4MzRcdTU4Y2NcdTViMjJcdTVlMzhcdTYwYzVcdTY0ZmVcdTY3NjFcdTY3NTZcdTZkNDRcdTcyYjZcdTc1NzNcdTdhNjNcdTg0YjhcdThiNzJcdTkxYjhcdTkzMjBc''@;'; put 'put ''dTU2MzFcdTU3ZjRcdTk4ZmUiXSxbImJmYTEiLCJcdTYyZWRcdTY5MGRcdTZiOTZcdTcxZWRcdTdlNTRcdTgwNzdcdTgyNzJcdTg5ZTZcdTk4ZGZcdTg3NTVcdThmYjFcdTVjM2JcdTRmMzhcdTRmZTFcdTRmYjVcdTU1MDdcdTVhMjBcdTViZGRcdTViZTlcdTVmYzNcdTYxNGVcdTYzMmZcdTY1''@;'; put 'put ''YjBcdTY2NGJcdTY4ZWVcdTY5OWJcdTZkNzhcdTZkZjFcdTc1MzNcdTc1YjlcdTc3MWZcdTc5NWVcdTc5ZTZcdTdkMzNcdTgxZTNcdTgyYWZcdTg1YWFcdTg5YWFcdThhM2FcdThlYWJcdThmOWJcdTkwMzJcdTkxZGRcdTk3MDdcdTRlYmFcdTRlYzFcdTUyMDNcdTU4NzVcdTU4ZWNcdTVjMGJc''@;'; put 'put ''dTc1MWFcdTVjM2RcdTgxNGVcdThhMGFcdThmYzVcdTk2NjNcdTk3NmRcdTdiMjVcdThhY2ZcdTk4MDhcdTkxNjJcdTU2ZjNcdTUzYThcdTkwMTdcdTU0MzlcdTU3ODJcdTVlMjVcdTYzYThcdTZjMzRcdTcwOGFcdTc3NjFcdTdjOGJcdTdmZTBcdTg4NzBcdTkwNDJcdTkxNTRcdTkzMTBcdTkz''@;'; put 'put ''MThcdTk2OGZcdTc0NWVcdTlhYzRcdTVkMDdcdTVkNjlcdTY1NzBcdTY3YTJcdThkYThcdTk2ZGJcdTYzNmVcdTY3NDlcdTY5MTlcdTgzYzVcdTk4MTdcdTk2YzBcdTg4ZmUiXSxbImMwYTEiLCJcdTZmODRcdTY0N2FcdTViZjhcdTRlMTZcdTcwMmNcdTc1NWRcdTY2MmZcdTUxYzRcdTUyMzZc''@;'; put 'put ''dTUyZTJcdTU5ZDNcdTVmODFcdTYwMjdcdTYyMTBcdTY1M2ZcdTY1NzRcdTY2MWZcdTY2NzRcdTY4ZjJcdTY4MTZcdTZiNjNcdTZlMDVcdTcyNzJcdTc1MWZcdTc2ZGJcdTdjYmVcdTgwNTZcdTU4ZjBcdTg4ZmRcdTg5N2ZcdThhYTBcdThhOTNcdThhY2JcdTkwMWRcdTkxOTJcdTk3NTJcdTk3''@;'; put 'put ''NTlcdTY1ODlcdTdhMGVcdTgxMDZcdTk2YmJcdTVlMmRcdTYwZGNcdTYyMWFcdTY1YTVcdTY2MTRcdTY3OTBcdTc3ZjNcdTdhNGRcdTdjNGRcdTdlM2VcdTgxMGFcdThjYWNcdThkNjRcdThkZTFcdThlNWZcdTc4YTlcdTUyMDdcdTYyZDlcdTYzYTVcdTY0NDJcdTYyOThcdThhMmRcdTdhODNc''@;'; put 'put ''dTdiYzBcdThhYWNcdTk2ZWFcdTdkNzZcdTgyMGNcdTg3NDlcdTRlZDlcdTUxNDhcdTUzNDNcdTUzNjBcdTViYTNcdTVjMDJcdTVjMTZcdTVkZGRcdTYyMjZcdTYyNDdcdTY0YjBcdTY4MTNcdTY4MzRcdTZjYzlcdTZkNDVcdTZkMTdcdTY3ZDNcdTZmNWNcdTcxNGVcdTcxN2RcdTY1Y2JcdTdh''@;'; put 'put ''N2ZcdTdiYWRcdTdkZGEiXSxbImMxYTEiLCJcdTdlNGFcdTdmYThcdTgxN2FcdTgyMWJcdTgyMzlcdTg1YTZcdThhNmVcdThjY2VcdThkZjVcdTkwNzhcdTkwNzdcdTkyYWRcdTkyOTFcdTk1ODNcdTliYWVcdTUyNGRcdTU1ODRcdTZmMzhcdTcxMzZcdTUxNjhcdTc5ODVcdTdlNTVcdTgxYjNc''@;'; put 'put ''dTdjY2VcdTU2NGNcdTU4NTFcdTVjYThcdTYzYWFcdTY2ZmVcdTY2ZmRcdTY5NWFcdTcyZDlcdTc1OGZcdTc1OGVcdTc5MGVcdTc5NTZcdTc5ZGZcdTdjOTdcdTdkMjBcdTdkNDRcdTg2MDdcdThhMzRcdTk2M2JcdTkwNjFcdTlmMjBcdTUwZTdcdTUyNzVcdTUzY2NcdTUzZTJcdTUwMDlcdTU1''@;'; put 'put ''YWFcdTU4ZWVcdTU5NGZcdTcyM2RcdTViOGJcdTVjNjRcdTUzMWRcdTYwZTNcdTYwZjNcdTYzNWNcdTYzODNcdTYzM2ZcdTYzYmJcdTY0Y2RcdTY1ZTlcdTY2ZjlcdTVkZTNcdTY5Y2RcdTY5ZmRcdTZmMTVcdTcxZTVcdTRlODlcdTc1ZTlcdTc2ZjhcdTdhOTNcdTdjZGZcdTdkY2ZcdTdkOWNc''@;'; put 'put ''dTgwNjFcdTgzNDlcdTgzNThcdTg0NmNcdTg0YmNcdTg1ZmJcdTg4YzVcdThkNzBcdTkwMDFcdTkwNmRcdTkzOTdcdTk3MWNcdTlhMTJcdTUwY2ZcdTU4OTdcdTYxOGUiXSxbImMyYTEiLCJcdTgxZDNcdTg1MzVcdThkMDhcdTkwMjBcdTRmYzNcdTUwNzRcdTUyNDdcdTUzNzNcdTYwNmZcdTYz''@;'; put 'put ''NDlcdTY3NWZcdTZlMmNcdThkYjNcdTkwMWZcdTRmZDdcdTVjNWVcdThjY2FcdTY1Y2ZcdTdkOWFcdTUzNTJcdTg4OTZcdTUxNzZcdTYzYzNcdTViNThcdTViNmJcdTVjMGFcdTY0MGRcdTY3NTFcdTkwNWNcdTRlZDZcdTU5MWFcdTU5MmFcdTZjNzBcdThhNTFcdTU1M2VcdTU4MTVcdTU5YTVc''@;'; put 'put ''dTYwZjBcdTYyNTNcdTY3YzFcdTgyMzVcdTY5NTVcdTk2NDBcdTk5YzRcdTlhMjhcdTRmNTNcdTU4MDZcdTViZmVcdTgwMTBcdTVjYjFcdTVlMmZcdTVmODVcdTYwMjBcdTYxNGJcdTYyMzRcdTY2ZmZcdTZjZjBcdTZlZGVcdTgwY2VcdTgxN2ZcdTgyZDRcdTg4OGJcdThjYjhcdTkwMDBcdTkw''@;'; put 'put ''MmVcdTk2OGFcdTllZGJcdTliZGJcdTRlZTNcdTUzZjBcdTU5MjdcdTdiMmNcdTkxOGRcdTk4NGNcdTlkZjlcdTZlZGRcdTcwMjdcdTUzNTNcdTU1NDRcdTViODVcdTYyNThcdTYyOWVcdTYyZDNcdTZjYTJcdTZmZWZcdTc0MjJcdThhMTdcdTk0MzhcdTZmYzFcdThhZmVcdTgzMzhcdTUxZTdc''@;'; put 'put ''dTg2ZjhcdTUzZWEiXSxbImMzYTEiLCJcdTUzZTlcdTRmNDZcdTkwNTRcdThmYjBcdTU5NmFcdTgxMzFcdTVkZmRcdTdhZWFcdThmYmZcdTY4ZGFcdThjMzdcdTcyZjhcdTljNDhcdTZhM2RcdThhYjBcdTRlMzlcdTUzNThcdTU2MDZcdTU3NjZcdTYyYzVcdTYzYTJcdTY1ZTZcdTZiNGVcdTZk''@;'; put 'put ''ZTFcdTZlNWJcdTcwYWRcdTc3ZWRcdTdhZWZcdTdiYWFcdTdkYmJcdTgwM2RcdTgwYzZcdTg2Y2JcdThhOTVcdTkzNWJcdTU2ZTNcdTU4YzdcdTVmM2VcdTY1YWRcdTY2OTZcdTZhODBcdTZiYjVcdTc1MzdcdThhYzdcdTUwMjRcdTc3ZTVcdTU3MzBcdTVmMWJcdTYwNjVcdTY2N2FcdTZjNjBc''@;'; put 'put ''dTc1ZjRcdTdhMWFcdTdmNmVcdTgxZjRcdTg3MThcdTkwNDVcdTk5YjNcdTdiYzlcdTc1NWNcdTdhZjlcdTdiNTFcdTg0YzRcdTkwMTBcdTc5ZTlcdTdhOTJcdTgzMzZcdTVhZTFcdTc3NDBcdTRlMmRcdTRlZjJcdTViOTlcdTVmZTBcdTYyYmRcdTY2M2NcdTY3ZjFcdTZjZThcdTg2NmJcdTg4''@;'; put 'put ''NzdcdThhM2JcdTkxNGVcdTkyZjNcdTk5ZDBcdTZhMTdcdTcwMjZcdTczMmFcdTgyZTdcdTg0NTdcdThjYWZcdTRlMDFcdTUxNDZcdTUxY2JcdTU1OGJcdTViZjUiXSxbImM0YTEiLCJcdTVlMTZcdTVlMzNcdTVlODFcdTVmMTRcdTVmMzVcdTVmNmJcdTVmYjRcdTYxZjJcdTYzMTFcdTY2YTJc''@;'; put 'put ''dTY3MWRcdTZmNmVcdTcyNTJcdTc1M2FcdTc3M2FcdTgwNzRcdTgxMzlcdTgxNzhcdTg3NzZcdThhYmZcdThhZGNcdThkODVcdThkZjNcdTkyOWFcdTk1NzdcdTk4MDJcdTljZTVcdTUyYzVcdTYzNTdcdTc2ZjRcdTY3MTVcdTZjODhcdTczY2RcdThjYzNcdTkzYWVcdTk2NzNcdTZkMjVcdTU4''@;'; put 'put ''OWNcdTY5MGVcdTY5Y2NcdThmZmRcdTkzOWFcdTc1ZGJcdTkwMWFcdTU4NWFcdTY4MDJcdTYzYjRcdTY5ZmJcdTRmNDNcdTZmMmNcdTY3ZDhcdThmYmJcdTg1MjZcdTdkYjRcdTkzNTRcdTY5M2ZcdTZmNzBcdTU3NmFcdTU4ZjdcdTViMmNcdTdkMmNcdTcyMmFcdTU0MGFcdTkxZTNcdTlkYjRc''@;'; put 'put ''dTRlYWRcdTRmNGVcdTUwNWNcdTUwNzVcdTUyNDNcdThjOWVcdTU0NDhcdTU4MjRcdTViOWFcdTVlMWRcdTVlOTVcdTVlYWRcdTVlZjdcdTVmMWZcdTYwOGNcdTYyYjVcdTYzM2FcdTYzZDBcdTY4YWZcdTZjNDBcdTc4ODdcdTc5OGVcdTdhMGJcdTdkZTBcdTgyNDdcdThhMDJcdThhZTZcdThl''@;'; put 'put ''NDRcdTkwMTMiXSxbImM1YTEiLCJcdTkwYjhcdTkxMmRcdTkxZDhcdTlmMGVcdTZjZTVcdTY0NThcdTY0ZTJcdTY1NzVcdTZlZjRcdTc2ODRcdTdiMWJcdTkwNjlcdTkzZDFcdTZlYmFcdTU0ZjJcdTVmYjlcdTY0YTRcdThmNGRcdThmZWRcdTkyNDRcdTUxNzhcdTU4NmJcdTU5MjlcdTVjNTVc''@;'; put 'put ''dTVlOTdcdTZkZmJcdTdlOGZcdTc1MWNcdThjYmNcdThlZTJcdTk4NWJcdTcwYjlcdTRmMWRcdTZiYmZcdTZmYjFcdTc1MzBcdTk2ZmJcdTUxNGVcdTU0MTBcdTU4MzVcdTU4NTdcdTU5YWNcdTVjNjBcdTVmOTJcdTY1OTdcdTY3NWNcdTZlMjFcdTc2N2JcdTgzZGZcdThjZWRcdTkwMTRcdTkw''@;'; put 'put ''ZmRcdTkzNGRcdTc4MjVcdTc4M2FcdTUyYWFcdTVlYTZcdTU3MWZcdTU5NzRcdTYwMTJcdTUwMTJcdTUxNWFcdTUxYWNcdTUxY2RcdTUyMDBcdTU1MTBcdTU4NTRcdTU4NThcdTU5NTdcdTViOTVcdTVjZjZcdTVkOGJcdTYwYmNcdTYyOTVcdTY0MmRcdTY3NzFcdTY4NDNcdTY4YmNcdTY4ZGZc''@;'; put 'put ''dTc2ZDdcdTZkZDhcdTZlNmZcdTZkOWJcdTcwNmZcdTcxYzhcdTVmNTNcdTc1ZDhcdTc5NzdcdTdiNDlcdTdiNTRcdTdiNTJcdTdjZDZcdTdkNzFcdTUyMzAiXSxbImM2YTEiLCJcdTg0NjNcdTg1NjlcdTg1ZTRcdThhMGVcdThiMDRcdThjNDZcdThlMGZcdTkwMDNcdTkwMGZcdTk0MTlcdTk2''@;'; put 'put ''NzZcdTk4MmRcdTlhMzBcdTk1ZDhcdTUwY2RcdTUyZDVcdTU0MGNcdTU4MDJcdTVjMGVcdTYxYTdcdTY0OWVcdTZkMWVcdTc3YjNcdTdhZTVcdTgwZjRcdTg0MDRcdTkwNTNcdTkyODVcdTVjZTBcdTlkMDdcdTUzM2ZcdTVmOTdcdTVmYjNcdTZkOWNcdTcyNzlcdTc3NjNcdTc5YmZcdTdiZTRc''@;'; put 'put ''dTZiZDJcdTcyZWNcdThhYWRcdTY4MDNcdTZhNjFcdTUxZjhcdTdhODFcdTY5MzRcdTVjNGFcdTljZjZcdTgyZWJcdTViYzVcdTkxNDlcdTcwMWVcdTU2NzhcdTVjNmZcdTYwYzdcdTY1NjZcdTZjOGNcdThjNWFcdTkwNDFcdTk4MTNcdTU0NTFcdTY2YzdcdTkyMGRcdTU5NDhcdTkwYTNcdTUx''@;'; put 'put ''ODVcdTRlNGRcdTUxZWFcdTg1OTlcdThiMGVcdTcwNThcdTYzN2FcdTkzNGJcdTY5NjJcdTk5YjRcdTdlMDRcdTc1NzdcdTUzNTdcdTY5NjBcdThlZGZcdTk2ZTNcdTZjNWRcdTRlOGNcdTVjM2NcdTVmMTBcdThmZTlcdTUzMDJcdThjZDFcdTgwODlcdTg2NzlcdTVlZmZcdTY1ZTVcdTRlNzNc''@;'; put 'put ''dTUxNjUiXSxbImM3YTEiLCJcdTU5ODJcdTVjM2ZcdTk3ZWVcdTRlZmJcdTU5OGFcdTVmY2RcdThhOGRcdTZmZTFcdTc5YjBcdTc5NjJcdTViZTdcdTg0NzFcdTczMmJcdTcxYjFcdTVlNzRcdTVmZjVcdTYzN2JcdTY0OWFcdTcxYzNcdTdjOThcdTRlNDNcdTVlZmNcdTRlNGJcdTU3ZGNcdTU2''@;'; put 'put ''YTJcdTYwYTlcdTZmYzNcdTdkMGRcdTgwZmRcdTgxMzNcdTgxYmZcdThmYjJcdTg5OTdcdTg2YTRcdTVkZjRcdTYyOGFcdTY0YWRcdTg5ODdcdTY3NzdcdTZjZTJcdTZkM2VcdTc0MzZcdTc4MzRcdTVhNDZcdTdmNzVcdTgyYWRcdTk5YWNcdTRmZjNcdTVlYzNcdTYyZGRcdTYzOTJcdTY1NTdc''@;'; put 'put ''dTY3NmZcdTc2YzNcdTcyNGNcdTgwY2NcdTgwYmFcdThmMjlcdTkxNGRcdTUwMGRcdTU3ZjlcdTVhOTJcdTY4ODVcdTY5NzNcdTcxNjRcdTcyZmRcdThjYjdcdTU4ZjJcdThjZTBcdTk2NmFcdTkwMTlcdTg3N2ZcdTc5ZTRcdTc3ZTdcdTg0MjlcdTRmMmZcdTUyNjVcdTUzNWFcdTYyY2RcdTY3''@;'; put 'put ''Y2ZcdTZjY2FcdTc2N2RcdTdiOTRcdTdjOTVcdTgyMzZcdTg1ODRcdThmZWJcdTY2ZGRcdTZmMjBcdTcyMDZcdTdlMWJcdTgzYWJcdTk5YzFcdTllYTYiXSxbImM4YTEiLCJcdTUxZmRcdTdiYjFcdTc4NzJcdTdiYjhcdTgwODdcdTdiNDhcdTZhZThcdTVlNjFcdTgwOGNcdTc1NTFcdTc1NjBc''@;'; put 'put ''dTUxNmJcdTkyNjJcdTZlOGNcdTc2N2FcdTkxOTdcdTlhZWFcdTRmMTBcdTdmNzBcdTYyOWNcdTdiNGZcdTk1YTVcdTljZTlcdTU2N2FcdTU4NTlcdTg2ZTRcdTk2YmNcdTRmMzRcdTUyMjRcdTUzNGFcdTUzY2RcdTUzZGJcdTVlMDZcdTY0MmNcdTY1OTFcdTY3N2ZcdTZjM2VcdTZjNGVcdTcy''@;'; put 'put ''NDhcdTcyYWZcdTczZWRcdTc1NTRcdTdlNDFcdTgyMmNcdTg1ZTlcdThjYTlcdTdiYzRcdTkxYzZcdTcxNjlcdTk4MTJcdTk4ZWZcdTYzM2RcdTY2NjlcdTc1NmFcdTc2ZTRcdTc4ZDBcdTg1NDNcdTg2ZWVcdTUzMmFcdTUzNTFcdTU0MjZcdTU5ODNcdTVlODdcdTVmN2NcdTYwYjJcdTYyNDlc''@;'; put 'put ''dTYyNzlcdTYyYWJcdTY1OTBcdTZiZDRcdTZjY2NcdTc1YjJcdTc2YWVcdTc4OTFcdTc5ZDhcdTdkY2JcdTdmNzdcdTgwYTVcdTg4YWJcdThhYjlcdThjYmJcdTkwN2ZcdTk3NWVcdTk4ZGJcdTZhMGJcdTdjMzhcdTUwOTlcdTVjM2VcdTVmYWVcdTY3ODdcdTZiZDhcdTc0MzVcdTc3MDlcdTdm''@;'; put 'put ''OGUiXSxbImM5YTEiLCJcdTlmM2JcdTY3Y2FcdTdhMTdcdTUzMzlcdTc1OGJcdTlhZWRcdTVmNjZcdTgxOWRcdTgzZjFcdTgwOThcdTVmM2NcdTVmYzVcdTc1NjJcdTdiNDZcdTkwM2NcdTY4NjdcdTU5ZWJcdTVhOWJcdTdkMTBcdTc2N2VcdThiMmNcdTRmZjVcdTVmNmFcdTZhMTlcdTZjMzdc''@;'; put 'put ''dTZmMDJcdTc0ZTJcdTc5NjhcdTg4NjhcdThhNTVcdThjNzlcdTVlZGZcdTYzY2ZcdTc1YzVcdTc5ZDJcdTgyZDdcdTkzMjhcdTkyZjJcdTg0OWNcdTg2ZWRcdTljMmRcdTU0YzFcdTVmNmNcdTY1OGNcdTZkNWNcdTcwMTVcdThjYTdcdThjZDNcdTk4M2JcdTY1NGZcdTc0ZjZcdTRlMGRcdTRl''@;'; put 'put ''ZDhcdTU3ZTBcdTU5MmJcdTVhNjZcdTViY2NcdTUxYThcdTVlMDNcdTVlOWNcdTYwMTZcdTYyNzZcdTY1NzdcdTY1YTdcdTY2NmVcdTZkNmVcdTcyMzZcdTdiMjZcdTgxNTBcdTgxOWFcdTgyOTlcdThiNWNcdThjYTBcdThjZTZcdThkNzRcdTk2MWNcdTk2NDRcdTRmYWVcdTY0YWJcdTZiNjZc''@;'; put 'put ''dTgyMWVcdTg0NjFcdTg1NmFcdTkwZThcdTVjMDFcdTY5NTNcdTk4YThcdTg0N2FcdTg1NTdcdTRmMGZcdTUyNmZcdTVmYTlcdTVlNDVcdTY3MGQiXSxbImNhYTEiLCJcdTc5OGZcdTgxNzlcdTg5MDdcdTg5ODZcdTZkZjVcdTVmMTdcdTYyNTVcdTZjYjhcdTRlY2ZcdTcyNjlcdTliOTJcdTUy''@;'; put 'put ''MDZcdTU0M2JcdTU2NzRcdTU4YjNcdTYxYTRcdTYyNmVcdTcxMWFcdTU5NmVcdTdjODlcdTdjZGVcdTdkMWJcdTk2ZjBcdTY1ODdcdTgwNWVcdTRlMTlcdTRmNzVcdTUxNzVcdTU4NDBcdTVlNjNcdTVlNzNcdTVmMGFcdTY3YzRcdTRlMjZcdTg1M2RcdTk1ODlcdTk2NWJcdTdjNzNcdTk4MDFc''@;'; put 'put ''dTUwZmJcdTU4YzFcdTc2NTZcdTc4YTdcdTUyMjVcdTc3YTVcdTg1MTFcdTdiODZcdTUwNGZcdTU5MDlcdTcyNDdcdTdiYzdcdTdkZThcdThmYmFcdThmZDRcdTkwNGRcdTRmYmZcdTUyYzlcdTVhMjlcdTVmMDFcdTk3YWRcdTRmZGRcdTgyMTdcdTkyZWFcdTU3MDNcdTYzNTVcdTZiNjlcdTc1''@;'; put 'put ''MmJcdTg4ZGNcdThmMTRcdTdhNDJcdTUyZGZcdTU4OTNcdTYxNTVcdTYyMGFcdTY2YWVcdTZiY2RcdTdjM2ZcdTgzZTlcdTUwMjNcdTRmZjhcdTUzMDVcdTU0NDZcdTU4MzFcdTU5NDlcdTViOWRcdTVjZjBcdTVjZWZcdTVkMjlcdTVlOTZcdTYyYjFcdTYzNjdcdTY1M2VcdTY1YjlcdTY3MGIi''@;'; put 'put ''XSxbImNiYTEiLCJcdTZjZDVcdTZjZTFcdTcwZjlcdTc4MzJcdTdlMmJcdTgwZGVcdTgyYjNcdTg0MGNcdTg0ZWNcdTg3MDJcdTg5MTJcdThhMmFcdThjNGFcdTkwYTZcdTkyZDJcdTk4ZmRcdTljZjNcdTlkNmNcdTRlNGZcdTRlYTFcdTUwOGRcdTUyNTZcdTU3NGFcdTU5YThcdTVlM2RcdTVm''@;'; put 'put ''ZDhcdTVmZDlcdTYyM2ZcdTY2YjRcdTY3MWJcdTY3ZDBcdTY4ZDJcdTUxOTJcdTdkMjFcdTgwYWFcdTgxYThcdThiMDBcdThjOGNcdThjYmZcdTkyN2VcdTk2MzJcdTU0MjBcdTk4MmNcdTUzMTdcdTUwZDVcdTUzNWNcdTU4YThcdTY0YjJcdTY3MzRcdTcyNjdcdTc3NjZcdTdhNDZcdTkxZTZc''@;'; put 'put ''dTUyYzNcdTZjYTFcdTZiODZcdTU4MDBcdTVlNGNcdTU5NTRcdTY3MmNcdTdmZmJcdTUxZTFcdTc2YzZcdTY0NjlcdTc4ZThcdTliNTRcdTllYmJcdTU3Y2JcdTU5YjlcdTY2MjdcdTY3OWFcdTZiY2VcdTU0ZTlcdTY5ZDlcdTVlNTVcdTgxOWNcdTY3OTVcdTliYWFcdTY3ZmVcdTljNTJcdTY4''@;'; put 'put ''NWRcdTRlYTZcdTRmZTNcdTUzYzhcdTYyYjlcdTY3MmJcdTZjYWJcdThmYzRcdTRmYWRcdTdlNmRcdTllYmZcdTRlMDdcdTYxNjJcdTZlODAiXSxbImNjYTEiLCJcdTZmMmJcdTg1MTNcdTU0NzNcdTY3MmFcdTliNDVcdTVkZjNcdTdiOTVcdTVjYWNcdTViYzZcdTg3MWNcdTZlNGFcdTg0ZDFc''@;'; put 'put ''dTdhMTRcdTgxMDhcdTU5OTlcdTdjOGRcdTZjMTFcdTc3MjBcdTUyZDlcdTU5MjJcdTcxMjFcdTcyNWZcdTc3ZGJcdTk3MjdcdTlkNjFcdTY5MGJcdTVhN2ZcdTVhMThcdTUxYTVcdTU0MGRcdTU0N2RcdTY2MGVcdTc2ZGZcdThmZjdcdTkyOThcdTljZjRcdTU5ZWFcdTcyNWRcdTZlYzVcdTUx''@;'; put 'put ''NGRcdTY4YzlcdTdkYmZcdTdkZWNcdTk3NjJcdTllYmFcdTY0NzhcdTZhMjFcdTgzMDJcdTU5ODRcdTViNWZcdTZiZGJcdTczMWJcdTc2ZjJcdTdkYjJcdTgwMTdcdTg0OTlcdTUxMzJcdTY3MjhcdTllZDlcdTc2ZWVcdTY3NjJcdTUyZmZcdTk5MDVcdTVjMjRcdTYyM2JcdTdjN2VcdThjYjBc''@;'; put 'put ''dTU1NGZcdTYwYjZcdTdkMGJcdTk1ODBcdTUzMDFcdTRlNWZcdTUxYjZcdTU5MWNcdTcyM2FcdTgwMzZcdTkxY2VcdTVmMjVcdTc3ZTJcdTUzODRcdTVmNzlcdTdkMDRcdTg1YWNcdThhMzNcdThlOGRcdTk3NTZcdTY3ZjNcdTg1YWVcdTk0NTNcdTYxMDlcdTYxMDhcdTZjYjlcdTc2NTIiXSxb''@;'; put 'put ''ImNkYTEiLCJcdThhZWRcdThmMzhcdTU1MmZcdTRmNTFcdTUxMmFcdTUyYzdcdTUzY2JcdTViYTVcdTVlN2RcdTYwYTBcdTYxODJcdTYzZDZcdTY3MDlcdTY3ZGFcdTZlNjdcdTZkOGNcdTczMzZcdTczMzdcdTc1MzFcdTc5NTBcdTg4ZDVcdThhOThcdTkwNGFcdTkwOTFcdTkwZjVcdTk2YzRc''@;'; put 'put ''dTg3OGRcdTU5MTVcdTRlODhcdTRmNTlcdTRlMGVcdThhODlcdThmM2ZcdTk4MTBcdTUwYWRcdTVlN2NcdTU5OTZcdTViYjlcdTVlYjhcdTYzZGFcdTYzZmFcdTY0YzFcdTY2ZGNcdTY5NGFcdTY5ZDhcdTZkMGJcdTZlYjZcdTcxOTRcdTc1MjhcdTdhYWZcdTdmOGFcdTgwMDBcdTg0NDlcdTg0''@;'; put 'put ''YzlcdTg5ODFcdThiMjFcdThlMGFcdTkwNjVcdTk2N2RcdTk5MGFcdTYxN2VcdTYyOTFcdTZiMzJcdTZjODNcdTZkNzRcdTdmY2NcdTdmZmNcdTZkYzBcdTdmODVcdTg3YmFcdTg4ZjhcdTY3NjVcdTgzYjFcdTk4M2NcdTk2ZjdcdTZkMWJcdTdkNjFcdTg0M2RcdTkxNmFcdTRlNzFcdTUzNzVc''@;'; put 'put ''dTVkNTBcdTZiMDRcdTZmZWJcdTg1Y2RcdTg2MmRcdTg5YTdcdTUyMjlcdTU0MGZcdTVjNjVcdTY3NGVcdTY4YThcdTc0MDZcdTc0ODMiXSxbImNlYTEiLCJcdTc1ZTJcdTg4Y2ZcdTg4ZTFcdTkxY2NcdTk2ZTJcdTk2NzhcdTVmOGJcdTczODdcdTdhY2JcdTg0NGVcdTYzYTBcdTc1NjVcdTUy''@;'; put 'put ''ODlcdTZkNDFcdTZlOWNcdTc0MDlcdTc1NTlcdTc4NmJcdTdjOTJcdTk2ODZcdTdhZGNcdTlmOGRcdTRmYjZcdTYxNmVcdTY1YzVcdTg2NWNcdTRlODZcdTRlYWVcdTUwZGFcdTRlMjFcdTUxY2NcdTViZWVcdTY1OTlcdTY4ODFcdTZkYmNcdTczMWZcdTc2NDJcdTc3YWRcdTdhMWNcdTdjZTdc''@;'; put 'put ''dTgyNmZcdThhZDJcdTkwN2NcdTkxY2ZcdTk2NzVcdTk4MThcdTUyOWJcdTdkZDFcdTUwMmJcdTUzOThcdTY3OTdcdTZkY2JcdTcxZDBcdTc0MzNcdTgxZThcdThmMmFcdTk2YTNcdTljNTdcdTllOWZcdTc0NjBcdTU4NDFcdTZkOTlcdTdkMmZcdTk4NWVcdTRlZTRcdTRmMzZcdTRmOGJcdTUx''@;'; put 'put ''YjdcdTUyYjFcdTVkYmFcdTYwMWNcdTczYjJcdTc5M2NcdTgyZDNcdTkyMzRcdTk2YjdcdTk2ZjZcdTk3MGFcdTllOTdcdTlmNjJcdTY2YTZcdTZiNzRcdTUyMTdcdTUyYTNcdTcwYzhcdTg4YzJcdTVlYzlcdTYwNGJcdTYxOTBcdTZmMjNcdTcxNDlcdTdjM2VcdTdkZjRcdTgwNmYiXSxbImNm''@;'; put 'put ''YTEiLCJcdTg0ZWVcdTkwMjNcdTkzMmNcdTU0NDJcdTliNmZcdTZhZDNcdTcwODlcdThjYzJcdThkZWZcdTk3MzJcdTUyYjRcdTVhNDFcdTVlY2FcdTVmMDRcdTY3MTdcdTY5N2NcdTY5OTRcdTZkNmFcdTZmMGZcdTcyNjJcdTcyZmNcdTdiZWRcdTgwMDFcdTgwN2VcdTg3NGJcdTkwY2VcdTUx''@;'; put 'put ''NmRcdTllOTNcdTc5ODRcdTgwOGJcdTkzMzJcdThhZDZcdTUwMmRcdTU0OGNcdThhNzFcdTZiNmFcdThjYzRcdTgxMDdcdTYwZDFcdTY3YTBcdTlkZjJcdTRlOTlcdTRlOThcdTljMTBcdThhNmJcdTg1YzFcdTg1NjhcdTY5MDBcdTZlN2VcdTc4OTdcdTgxNTUiXSxbImQwYTEiLCJcdTVmMGNc''@;'; put 'put ''dTRlMTBcdTRlMTVcdTRlMmFcdTRlMzFcdTRlMzZcdTRlM2NcdTRlM2ZcdTRlNDJcdTRlNTZcdTRlNThcdTRlODJcdTRlODVcdThjNmJcdTRlOGFcdTgyMTJcdTVmMGRcdTRlOGVcdTRlOWVcdTRlOWZcdTRlYTBcdTRlYTJcdTRlYjBcdTRlYjNcdTRlYjZcdTRlY2VcdTRlY2RcdTRlYzRcdTRl''@;'; put 'put ''YzZcdTRlYzJcdTRlZDdcdTRlZGVcdTRlZWRcdTRlZGZcdTRlZjdcdTRmMDlcdTRmNWFcdTRmMzBcdTRmNWJcdTRmNWRcdTRmNTdcdTRmNDdcdTRmNzZcdTRmODhcdTRmOGZcdTRmOThcdTRmN2JcdTRmNjlcdTRmNzBcdTRmOTFcdTRmNmZcdTRmODZcdTRmOTZcdTUxMThcdTRmZDRcdTRmZGZc''@;'; put 'put ''dTRmY2VcdTRmZDhcdTRmZGJcdTRmZDFcdTRmZGFcdTRmZDBcdTRmZTRcdTRmZTVcdTUwMWFcdTUwMjhcdTUwMTRcdTUwMmFcdTUwMjVcdTUwMDVcdTRmMWNcdTRmZjZcdTUwMjFcdTUwMjlcdTUwMmNcdTRmZmVcdTRmZWZcdTUwMTFcdTUwMDZcdTUwNDNcdTUwNDdcdTY3MDNcdTUwNTVcdTUw''@;'; put 'put ''NTBcdTUwNDhcdTUwNWFcdTUwNTZcdTUwNmNcdTUwNzhcdTUwODBcdTUwOWFcdTUwODVcdTUwYjRcdTUwYjIiXSxbImQxYTEiLCJcdTUwYzlcdTUwY2FcdTUwYjNcdTUwYzJcdTUwZDZcdTUwZGVcdTUwZTVcdTUwZWRcdTUwZTNcdTUwZWVcdTUwZjlcdTUwZjVcdTUxMDlcdTUxMDFcdTUxMDJc''@;'; put 'put ''dTUxMTZcdTUxMTVcdTUxMTRcdTUxMWFcdTUxMjFcdTUxM2FcdTUxMzdcdTUxM2NcdTUxM2JcdTUxM2ZcdTUxNDBcdTUxNTJcdTUxNGNcdTUxNTRcdTUxNjJcdTdhZjhcdTUxNjlcdTUxNmFcdTUxNmVcdTUxODBcdTUxODJcdTU2ZDhcdTUxOGNcdTUxODlcdTUxOGZcdTUxOTFcdTUxOTNcdTUx''@;'; put 'put ''OTVcdTUxOTZcdTUxYTRcdTUxYTZcdTUxYTJcdTUxYTlcdTUxYWFcdTUxYWJcdTUxYjNcdTUxYjFcdTUxYjJcdTUxYjBcdTUxYjVcdTUxYmRcdTUxYzVcdTUxYzlcdTUxZGJcdTUxZTBcdTg2NTVcdTUxZTlcdTUxZWRcdTUxZjBcdTUxZjVcdTUxZmVcdTUyMDRcdTUyMGJcdTUyMTRcdTUyMGVc''@;'; put 'put ''dTUyMjdcdTUyMmFcdTUyMmVcdTUyMzNcdTUyMzlcdTUyNGZcdTUyNDRcdTUyNGJcdTUyNGNcdTUyNWVcdTUyNTRcdTUyNmFcdTUyNzRcdTUyNjlcdTUyNzNcdTUyN2ZcdTUyN2RcdTUyOGRcdTUyOTRcdTUyOTJcdTUyNzFcdTUyODhcdTUyOTFcdThmYTgiXSxbImQyYTEiLCJcdThmYTdcdTUy''@;'; put 'put ''YWNcdTUyYWRcdTUyYmNcdTUyYjVcdTUyYzFcdTUyY2RcdTUyZDdcdTUyZGVcdTUyZTNcdTUyZTZcdTk4ZWRcdTUyZTBcdTUyZjNcdTUyZjVcdTUyZjhcdTUyZjlcdTUzMDZcdTUzMDhcdTc1MzhcdTUzMGRcdTUzMTBcdTUzMGZcdTUzMTVcdTUzMWFcdTUzMjNcdTUzMmZcdTUzMzFcdTUzMzNc''@;'; put 'put ''dTUzMzhcdTUzNDBcdTUzNDZcdTUzNDVcdTRlMTdcdTUzNDlcdTUzNGRcdTUxZDZcdTUzNWVcdTUzNjlcdTUzNmVcdTU5MThcdTUzN2JcdTUzNzdcdTUzODJcdTUzOTZcdTUzYTBcdTUzYTZcdTUzYTVcdTUzYWVcdTUzYjBcdTUzYjZcdTUzYzNcdTdjMTJcdTk2ZDlcdTUzZGZcdTY2ZmNcdTcx''@;'; put 'put ''ZWVcdTUzZWVcdTUzZThcdTUzZWRcdTUzZmFcdTU0MDFcdTU0M2RcdTU0NDBcdTU0MmNcdTU0MmRcdTU0M2NcdTU0MmVcdTU0MzZcdTU0MjlcdTU0MWRcdTU0NGVcdTU0OGZcdTU0NzVcdTU0OGVcdTU0NWZcdTU0NzFcdTU0NzdcdTU0NzBcdTU0OTJcdTU0N2JcdTU0ODBcdTU0NzZcdTU0ODRc''@;'; put 'put ''dTU0OTBcdTU0ODZcdTU0YzdcdTU0YTJcdTU0YjhcdTU0YTVcdTU0YWNcdTU0YzRcdTU0YzhcdTU0YTgiXSxbImQzYTEiLCJcdTU0YWJcdTU0YzJcdTU0YTRcdTU0YmVcdTU0YmNcdTU0ZDhcdTU0ZTVcdTU0ZTZcdTU1MGZcdTU1MTRcdTU0ZmRcdTU0ZWVcdTU0ZWRcdTU0ZmFcdTU0ZTJcdTU1''@;'; put 'put ''MzlcdTU1NDBcdTU1NjNcdTU1NGNcdTU1MmVcdTU1NWNcdTU1NDVcdTU1NTZcdTU1NTdcdTU1MzhcdTU1MzNcdTU1NWRcdTU1OTlcdTU1ODBcdTU0YWZcdTU1OGFcdTU1OWZcdTU1N2JcdTU1N2VcdTU1OThcdTU1OWVcdTU1YWVcdTU1N2NcdTU1ODNcdTU1YTlcdTU1ODdcdTU1YThcdTU1ZGFc''@;'; put 'put ''dTU1YzVcdTU1ZGZcdTU1YzRcdTU1ZGNcdTU1ZTRcdTU1ZDRcdTU2MTRcdTU1ZjdcdTU2MTZcdTU1ZmVcdTU1ZmRcdTU2MWJcdTU1ZjlcdTU2NGVcdTU2NTBcdTcxZGZcdTU2MzRcdTU2MzZcdTU2MzJcdTU2MzhcdTU2NmJcdTU2NjRcdTU2MmZcdTU2NmNcdTU2NmFcdTU2ODZcdTU2ODBcdTU2''@;'; put 'put ''OGFcdTU2YTBcdTU2OTRcdTU2OGZcdTU2YTVcdTU2YWVcdTU2YjZcdTU2YjRcdTU2YzJcdTU2YmNcdTU2YzFcdTU2YzNcdTU2YzBcdTU2YzhcdTU2Y2VcdTU2ZDFcdTU2ZDNcdTU2ZDdcdTU2ZWVcdTU2ZjlcdTU3MDBcdTU2ZmZcdTU3MDRcdTU3MDkiXSxbImQ0YTEiLCJcdTU3MDhcdTU3MGJc''@;'; put 'put ''dTU3MGRcdTU3MTNcdTU3MThcdTU3MTZcdTU1YzdcdTU3MWNcdTU3MjZcdTU3MzdcdTU3MzhcdTU3NGVcdTU3M2JcdTU3NDBcdTU3NGZcdTU3NjlcdTU3YzBcdTU3ODhcdTU3NjFcdTU3N2ZcdTU3ODlcdTU3OTNcdTU3YTBcdTU3YjNcdTU3YTRcdTU3YWFcdTU3YjBcdTU3YzNcdTU3YzZcdTU3''@;'; put 'put ''ZDRcdTU3ZDJcdTU3ZDNcdTU4MGFcdTU3ZDZcdTU3ZTNcdTU4MGJcdTU4MTlcdTU4MWRcdTU4NzJcdTU4MjFcdTU4NjJcdTU4NGJcdTU4NzBcdTZiYzBcdTU4NTJcdTU4M2RcdTU4NzlcdTU4ODVcdTU4YjlcdTU4OWZcdTU4YWJcdTU4YmFcdTU4ZGVcdTU4YmJcdTU4YjhcdTU4YWVcdTU4YzVc''@;'; put 'put ''dTU4ZDNcdTU4ZDFcdTU4ZDdcdTU4ZDlcdTU4ZDhcdTU4ZTVcdTU4ZGNcdTU4ZTRcdTU4ZGZcdTU4ZWZcdTU4ZmFcdTU4ZjlcdTU4ZmJcdTU4ZmNcdTU4ZmRcdTU5MDJcdTU5MGFcdTU5MTBcdTU5MWJcdTY4YTZcdTU5MjVcdTU5MmNcdTU5MmRcdTU5MzJcdTU5MzhcdTU5M2VcdTdhZDJcdTU5''@;'; put 'put ''NTVcdTU5NTBcdTU5NGVcdTU5NWFcdTU5NThcdTU5NjJcdTU5NjBcdTU5NjdcdTU5NmNcdTU5NjkiXSxbImQ1YTEiLCJcdTU5NzhcdTU5ODFcdTU5OWRcdTRmNWVcdTRmYWJcdTU5YTNcdTU5YjJcdTU5YzZcdTU5ZThcdTU5ZGNcdTU5OGRcdTU5ZDlcdTU5ZGFcdTVhMjVcdTVhMWZcdTVhMTFc''@;'; put 'put ''dTVhMWNcdTVhMDlcdTVhMWFcdTVhNDBcdTVhNmNcdTVhNDlcdTVhMzVcdTVhMzZcdTVhNjJcdTVhNmFcdTVhOWFcdTVhYmNcdTVhYmVcdTVhY2JcdTVhYzJcdTVhYmRcdTVhZTNcdTVhZDdcdTVhZTZcdTVhZTlcdTVhZDZcdTVhZmFcdTVhZmJcdTViMGNcdTViMGJcdTViMTZcdTViMzJcdTVh''@;'; put 'put ''ZDBcdTViMmFcdTViMzZcdTViM2VcdTViNDNcdTViNDVcdTViNDBcdTViNTFcdTViNTVcdTViNWFcdTViNWJcdTViNjVcdTViNjlcdTViNzBcdTViNzNcdTViNzVcdTViNzhcdTY1ODhcdTViN2FcdTViODBcdTViODNcdTViYTZcdTViYjhcdTViYzNcdTViYzdcdTViYzlcdTViZDRcdTViZDBc''@;'; put 'put ''dTViZTRcdTViZTZcdTViZTJcdTViZGVcdTViZTVcdTViZWJcdTViZjBcdTViZjZcdTViZjNcdTVjMDVcdTVjMDdcdTVjMDhcdTVjMGRcdTVjMTNcdTVjMjBcdTVjMjJcdTVjMjhcdTVjMzhcdTVjMzlcdTVjNDFcdTVjNDZcdTVjNGVcdTVjNTMiXSxbImQ2YTEiLCJcdTVjNTBcdTVjNGZcdTVi''@;'; put 'put ''NzFcdTVjNmNcdTVjNmVcdTRlNjJcdTVjNzZcdTVjNzlcdTVjOGNcdTVjOTFcdTVjOTRcdTU5OWJcdTVjYWJcdTVjYmJcdTVjYjZcdTVjYmNcdTVjYjdcdTVjYzVcdTVjYmVcdTVjYzdcdTVjZDlcdTVjZTlcdTVjZmRcdTVjZmFcdTVjZWRcdTVkOGNcdTVjZWFcdTVkMGJcdTVkMTVcdTVkMTdc''@;'; put 'put ''dTVkNWNcdTVkMWZcdTVkMWJcdTVkMTFcdTVkMTRcdTVkMjJcdTVkMWFcdTVkMTlcdTVkMThcdTVkNGNcdTVkNTJcdTVkNGVcdTVkNGJcdTVkNmNcdTVkNzNcdTVkNzZcdTVkODdcdTVkODRcdTVkODJcdTVkYTJcdTVkOWRcdTVkYWNcdTVkYWVcdTVkYmRcdTVkOTBcdTVkYjdcdTVkYmNcdTVk''@;'; put 'put ''YzlcdTVkY2RcdTVkZDNcdTVkZDJcdTVkZDZcdTVkZGJcdTVkZWJcdTVkZjJcdTVkZjVcdTVlMGJcdTVlMWFcdTVlMTlcdTVlMTFcdTVlMWJcdTVlMzZcdTVlMzdcdTVlNDRcdTVlNDNcdTVlNDBcdTVlNGVcdTVlNTdcdTVlNTRcdTVlNWZcdTVlNjJcdTVlNjRcdTVlNDdcdTVlNzVcdTVlNzZc''@;'; put 'put ''dTVlN2FcdTllYmNcdTVlN2ZcdTVlYTBcdTVlYzFcdTVlYzJcdTVlYzhcdTVlZDBcdTVlY2YiXSxbImQ3YTEiLCJcdTVlZDZcdTVlZTNcdTVlZGRcdTVlZGFcdTVlZGJcdTVlZTJcdTVlZTFcdTVlZThcdTVlZTlcdTVlZWNcdTVlZjFcdTVlZjNcdTVlZjBcdTVlZjRcdTVlZjhcdTVlZmVcdTVm''@;'; put 'put ''MDNcdTVmMDlcdTVmNWRcdTVmNWNcdTVmMGJcdTVmMTFcdTVmMTZcdTVmMjlcdTVmMmRcdTVmMzhcdTVmNDFcdTVmNDhcdTVmNGNcdTVmNGVcdTVmMmZcdTVmNTFcdTVmNTZcdTVmNTdcdTVmNTlcdTVmNjFcdTVmNmRcdTVmNzNcdTVmNzdcdTVmODNcdTVmODJcdTVmN2ZcdTVmOGFcdTVmODhc''@;'; put 'put ''dTVmOTFcdTVmODdcdTVmOWVcdTVmOTlcdTVmOThcdTVmYTBcdTVmYThcdTVmYWRcdTVmYmNcdTVmZDZcdTVmZmJcdTVmZTRcdTVmZjhcdTVmZjFcdTVmZGRcdTYwYjNcdTVmZmZcdTYwMjFcdTYwNjBcdTYwMTlcdTYwMTBcdTYwMjlcdTYwMGVcdTYwMzFcdTYwMWJcdTYwMTVcdTYwMmJcdTYw''@;'; put 'put ''MjZcdTYwMGZcdTYwM2FcdTYwNWFcdTYwNDFcdTYwNmFcdTYwNzdcdTYwNWZcdTYwNGFcdTYwNDZcdTYwNGRcdTYwNjNcdTYwNDNcdTYwNjRcdTYwNDJcdTYwNmNcdTYwNmJcdTYwNTlcdTYwODFcdTYwOGRcdTYwZTdcdTYwODNcdTYwOWEiXSxbImQ4YTEiLCJcdTYwODRcdTYwOWJcdTYwOTZc''@;'; put 'put ''dTYwOTdcdTYwOTJcdTYwYTdcdTYwOGJcdTYwZTFcdTYwYjhcdTYwZTBcdTYwZDNcdTYwYjRcdTVmZjBcdTYwYmRcdTYwYzZcdTYwYjVcdTYwZDhcdTYxNGRcdTYxMTVcdTYxMDZcdTYwZjZcdTYwZjdcdTYxMDBcdTYwZjRcdTYwZmFcdTYxMDNcdTYxMjFcdTYwZmJcdTYwZjFcdTYxMGRcdTYx''@;'; put 'put ''MGVcdTYxNDdcdTYxM2VcdTYxMjhcdTYxMjdcdTYxNGFcdTYxM2ZcdTYxM2NcdTYxMmNcdTYxMzRcdTYxM2RcdTYxNDJcdTYxNDRcdTYxNzNcdTYxNzdcdTYxNThcdTYxNTlcdTYxNWFcdTYxNmJcdTYxNzRcdTYxNmZcdTYxNjVcdTYxNzFcdTYxNWZcdTYxNWRcdTYxNTNcdTYxNzVcdTYxOTlc''@;'; put 'put ''dTYxOTZcdTYxODdcdTYxYWNcdTYxOTRcdTYxOWFcdTYxOGFcdTYxOTFcdTYxYWJcdTYxYWVcdTYxY2NcdTYxY2FcdTYxYzlcdTYxZjdcdTYxYzhcdTYxYzNcdTYxYzZcdTYxYmFcdTYxY2JcdTdmNzlcdTYxY2RcdTYxZTZcdTYxZTNcdTYxZjZcdTYxZmFcdTYxZjRcdTYxZmZcdTYxZmRcdTYx''@;'; put 'put ''ZmNcdTYxZmVcdTYyMDBcdTYyMDhcdTYyMDlcdTYyMGRcdTYyMGNcdTYyMTRcdTYyMWIiXSxbImQ5YTEiLCJcdTYyMWVcdTYyMjFcdTYyMmFcdTYyMmVcdTYyMzBcdTYyMzJcdTYyMzNcdTYyNDFcdTYyNGVcdTYyNWVcdTYyNjNcdTYyNWJcdTYyNjBcdTYyNjhcdTYyN2NcdTYyODJcdTYyODlc''@;'; put 'put ''dTYyN2VcdTYyOTJcdTYyOTNcdTYyOTZcdTYyZDRcdTYyODNcdTYyOTRcdTYyZDdcdTYyZDFcdTYyYmJcdTYyY2ZcdTYyZmZcdTYyYzZcdTY0ZDRcdTYyYzhcdTYyZGNcdTYyY2NcdTYyY2FcdTYyYzJcdTYyYzdcdTYyOWJcdTYyYzlcdTYzMGNcdTYyZWVcdTYyZjFcdTYzMjdcdTYzMDJcdTYz''@;'; put 'put ''MDhcdTYyZWZcdTYyZjVcdTYzNTBcdTYzM2VcdTYzNGRcdTY0MWNcdTYzNGZcdTYzOTZcdTYzOGVcdTYzODBcdTYzYWJcdTYzNzZcdTYzYTNcdTYzOGZcdTYzODlcdTYzOWZcdTYzYjVcdTYzNmJcdTYzNjlcdTYzYmVcdTYzZTlcdTYzYzBcdTYzYzZcdTYzZTNcdTYzYzlcdTYzZDJcdTYzZjZc''@;'; put 'put ''dTYzYzRcdTY0MTZcdTY0MzRcdTY0MDZcdTY0MTNcdTY0MjZcdTY0MzZcdTY1MWRcdTY0MTdcdTY0MjhcdTY0MGZcdTY0NjdcdTY0NmZcdTY0NzZcdTY0NGVcdTY1MmFcdTY0OTVcdTY0OTNcdTY0YTVcdTY0YTlcdTY0ODhcdTY0YmMiXSxbImRhYTEiLCJcdTY0ZGFcdTY0ZDJcdTY0YzVcdTY0''@;'; put 'put ''YzdcdTY0YmJcdTY0ZDhcdTY0YzJcdTY0ZjFcdTY0ZTdcdTgyMDlcdTY0ZTBcdTY0ZTFcdTYyYWNcdTY0ZTNcdTY0ZWZcdTY1MmNcdTY0ZjZcdTY0ZjRcdTY0ZjJcdTY0ZmFcdTY1MDBcdTY0ZmRcdTY1MThcdTY1MWNcdTY1MDVcdTY1MjRcdTY1MjNcdTY1MmJcdTY1MzRcdTY1MzVcdTY1Mzdc''@;'; put 'put ''dTY1MzZcdTY1MzhcdTc1NGJcdTY1NDhcdTY1NTZcdTY1NTVcdTY1NGRcdTY1NThcdTY1NWVcdTY1NWRcdTY1NzJcdTY1NzhcdTY1ODJcdTY1ODNcdThiOGFcdTY1OWJcdTY1OWZcdTY1YWJcdTY1YjdcdTY1YzNcdTY1YzZcdTY1YzFcdTY1YzRcdTY1Y2NcdTY1ZDJcdTY1ZGJcdTY1ZDlcdTY1''@;'; put 'put ''ZTBcdTY1ZTFcdTY1ZjFcdTY3NzJcdTY2MGFcdTY2MDNcdTY1ZmJcdTY3NzNcdTY2MzVcdTY2MzZcdTY2MzRcdTY2MWNcdTY2NGZcdTY2NDRcdTY2NDlcdTY2NDFcdTY2NWVcdTY2NWRcdTY2NjRcdTY2NjdcdTY2NjhcdTY2NWZcdTY2NjJcdTY2NzBcdTY2ODNcdTY2ODhcdTY2OGVcdTY2ODlc''@;'; put 'put ''dTY2ODRcdTY2OThcdTY2OWRcdTY2YzFcdTY2YjlcdTY2YzlcdTY2YmVcdTY2YmMiXSxbImRiYTEiLCJcdTY2YzRcdTY2YjhcdTY2ZDZcdTY2ZGFcdTY2ZTBcdTY2M2ZcdTY2ZTZcdTY2ZTlcdTY2ZjBcdTY2ZjVcdTY2ZjdcdTY3MGZcdTY3MTZcdTY3MWVcdTY3MjZcdTY3MjdcdTk3MzhcdTY3''@;'; put 'put ''MmVcdTY3M2ZcdTY3MzZcdTY3NDFcdTY3MzhcdTY3MzdcdTY3NDZcdTY3NWVcdTY3NjBcdTY3NTlcdTY3NjNcdTY3NjRcdTY3ODlcdTY3NzBcdTY3YTlcdTY3N2NcdTY3NmFcdTY3OGNcdTY3OGJcdTY3YTZcdTY3YTFcdTY3ODVcdTY3YjdcdTY3ZWZcdTY3YjRcdTY3ZWNcdTY3YjNcdTY3ZTlc''@;'; put 'put ''dTY3YjhcdTY3ZTRcdTY3ZGVcdTY3ZGRcdTY3ZTJcdTY3ZWVcdTY3YjlcdTY3Y2VcdTY3YzZcdTY3ZTdcdTZhOWNcdTY4MWVcdTY4NDZcdTY4MjlcdTY4NDBcdTY4NGRcdTY4MzJcdTY4NGVcdTY4YjNcdTY4MmJcdTY4NTlcdTY4NjNcdTY4NzdcdTY4N2ZcdTY4OWZcdTY4OGZcdTY4YWRcdTY4''@;'; put 'put ''OTRcdTY4OWRcdTY4OWJcdTY4ODNcdTZhYWVcdTY4YjlcdTY4NzRcdTY4YjVcdTY4YTBcdTY4YmFcdTY5MGZcdTY4OGRcdTY4N2VcdTY5MDFcdTY4Y2FcdTY5MDhcdTY4ZDhcdTY5MjJcdTY5MjZcdTY4ZTFcdTY5MGNcdTY4Y2QiXSxbImRjYTEiLCJcdTY4ZDRcdTY4ZTdcdTY4ZDVcdTY5MzZc''@;'; put 'put ''dTY5MTJcdTY5MDRcdTY4ZDdcdTY4ZTNcdTY5MjVcdTY4ZjlcdTY4ZTBcdTY4ZWZcdTY5MjhcdTY5MmFcdTY5MWFcdTY5MjNcdTY5MjFcdTY4YzZcdTY5NzlcdTY5NzdcdTY5NWNcdTY5NzhcdTY5NmJcdTY5NTRcdTY5N2VcdTY5NmVcdTY5MzlcdTY5NzRcdTY5M2RcdTY5NTlcdTY5MzBcdTY5''@;'; put 'put ''NjFcdTY5NWVcdTY5NWRcdTY5ODFcdTY5NmFcdTY5YjJcdTY5YWVcdTY5ZDBcdTY5YmZcdTY5YzFcdTY5ZDNcdTY5YmVcdTY5Y2VcdTViZThcdTY5Y2FcdTY5ZGRcdTY5YmJcdTY5YzNcdTY5YTdcdTZhMmVcdTY5OTFcdTY5YTBcdTY5OWNcdTY5OTVcdTY5YjRcdTY5ZGVcdTY5ZThcdTZhMDJc''@;'; put 'put ''dTZhMWJcdTY5ZmZcdTZiMGFcdTY5ZjlcdTY5ZjJcdTY5ZTdcdTZhMDVcdTY5YjFcdTZhMWVcdTY5ZWRcdTZhMTRcdTY5ZWJcdTZhMGFcdTZhMTJcdTZhYzFcdTZhMjNcdTZhMTNcdTZhNDRcdTZhMGNcdTZhNzJcdTZhMzZcdTZhNzhcdTZhNDdcdTZhNjJcdTZhNTlcdTZhNjZcdTZhNDhcdTZh''@;'; put 'put ''MzhcdTZhMjJcdTZhOTBcdTZhOGRcdTZhYTBcdTZhODRcdTZhYTJcdTZhYTMiXSxbImRkYTEiLCJcdTZhOTdcdTg2MTdcdTZhYmJcdTZhYzNcdTZhYzJcdTZhYjhcdTZhYjNcdTZhYWNcdTZhZGVcdTZhZDFcdTZhZGZcdTZhYWFcdTZhZGFcdTZhZWFcdTZhZmJcdTZiMDVcdTg2MTZcdTZhZmFc''@;'; put 'put ''dTZiMTJcdTZiMTZcdTliMzFcdTZiMWZcdTZiMzhcdTZiMzdcdTc2ZGNcdTZiMzlcdTk4ZWVcdTZiNDdcdTZiNDNcdTZiNDlcdTZiNTBcdTZiNTlcdTZiNTRcdTZiNWJcdTZiNWZcdTZiNjFcdTZiNzhcdTZiNzlcdTZiN2ZcdTZiODBcdTZiODRcdTZiODNcdTZiOGRcdTZiOThcdTZiOTVcdTZi''@;'; put 'put ''OWVcdTZiYTRcdTZiYWFcdTZiYWJcdTZiYWZcdTZiYjJcdTZiYjFcdTZiYjNcdTZiYjdcdTZiYmNcdTZiYzZcdTZiY2JcdTZiZDNcdTZiZGZcdTZiZWNcdTZiZWJcdTZiZjNcdTZiZWZcdTllYmVcdTZjMDhcdTZjMTNcdTZjMTRcdTZjMWJcdTZjMjRcdTZjMjNcdTZjNWVcdTZjNTVcdTZjNjJc''@;'; put 'put ''dTZjNmFcdTZjODJcdTZjOGRcdTZjOWFcdTZjODFcdTZjOWJcdTZjN2VcdTZjNjhcdTZjNzNcdTZjOTJcdTZjOTBcdTZjYzRcdTZjZjFcdTZjZDNcdTZjYmRcdTZjZDdcdTZjYzVcdTZjZGRcdTZjYWVcdTZjYjFcdTZjYmUiXSxbImRlYTEiLCJcdTZjYmFcdTZjZGJcdTZjZWZcdTZjZDlcdTZj''@;'; put 'put ''ZWFcdTZkMWZcdTg4NGRcdTZkMzZcdTZkMmJcdTZkM2RcdTZkMzhcdTZkMTlcdTZkMzVcdTZkMzNcdTZkMTJcdTZkMGNcdTZkNjNcdTZkOTNcdTZkNjRcdTZkNWFcdTZkNzlcdTZkNTlcdTZkOGVcdTZkOTVcdTZmZTRcdTZkODVcdTZkZjlcdTZlMTVcdTZlMGFcdTZkYjVcdTZkYzdcdTZkZTZc''@;'; put 'put ''dTZkYjhcdTZkYzZcdTZkZWNcdTZkZGVcdTZkY2NcdTZkZThcdTZkZDJcdTZkYzVcdTZkZmFcdTZkZDlcdTZkZTRcdTZkZDVcdTZkZWFcdTZkZWVcdTZlMmRcdTZlNmVcdTZlMmVcdTZlMTlcdTZlNzJcdTZlNWZcdTZlM2VcdTZlMjNcdTZlNmJcdTZlMmJcdTZlNzZcdTZlNGRcdTZlMWZcdTZl''@;'; put 'put ''NDNcdTZlM2FcdTZlNGVcdTZlMjRcdTZlZmZcdTZlMWRcdTZlMzhcdTZlODJcdTZlYWFcdTZlOThcdTZlYzlcdTZlYjdcdTZlZDNcdTZlYmRcdTZlYWZcdTZlYzRcdTZlYjJcdTZlZDRcdTZlZDVcdTZlOGZcdTZlYTVcdTZlYzJcdTZlOWZcdTZmNDFcdTZmMTFcdTcwNGNcdTZlZWNcdTZlZjhc''@;'; put 'put ''dTZlZmVcdTZmM2ZcdTZlZjJcdTZmMzFcdTZlZWZcdTZmMzJcdTZlY2MiXSxbImRmYTEiLCJcdTZmM2VcdTZmMTNcdTZlZjdcdTZmODZcdTZmN2FcdTZmNzhcdTZmODFcdTZmODBcdTZmNmZcdTZmNWJcdTZmZjNcdTZmNmRcdTZmODJcdTZmN2NcdTZmNThcdTZmOGVcdTZmOTFcdTZmYzJcdTZm''@;'; put 'put ''NjZcdTZmYjNcdTZmYTNcdTZmYTFcdTZmYTRcdTZmYjlcdTZmYzZcdTZmYWFcdTZmZGZcdTZmZDVcdTZmZWNcdTZmZDRcdTZmZDhcdTZmZjFcdTZmZWVcdTZmZGJcdTcwMDlcdTcwMGJcdTZmZmFcdTcwMTFcdTcwMDFcdTcwMGZcdTZmZmVcdTcwMWJcdTcwMWFcdTZmNzRcdTcwMWRcdTcwMThc''@;'; put 'put ''dTcwMWZcdTcwMzBcdTcwM2VcdTcwMzJcdTcwNTFcdTcwNjNcdTcwOTlcdTcwOTJcdTcwYWZcdTcwZjFcdTcwYWNcdTcwYjhcdTcwYjNcdTcwYWVcdTcwZGZcdTcwY2JcdTcwZGRcdTcwZDlcdTcxMDlcdTcwZmRcdTcxMWNcdTcxMTlcdTcxNjVcdTcxNTVcdTcxODhcdTcxNjZcdTcxNjJcdTcx''@;'; put 'put ''NGNcdTcxNTZcdTcxNmNcdTcxOGZcdTcxZmJcdTcxODRcdTcxOTVcdTcxYThcdTcxYWNcdTcxZDdcdTcxYjlcdTcxYmVcdTcxZDJcdTcxYzlcdTcxZDRcdTcxY2VcdTcxZTBcdTcxZWNcdTcxZTdcdTcxZjVcdTcxZmMiXSxbImUwYTEiLCJcdTcxZjlcdTcxZmZcdTcyMGRcdTcyMTBcdTcyMWJc''@;'; put 'put ''dTcyMjhcdTcyMmRcdTcyMmNcdTcyMzBcdTcyMzJcdTcyM2JcdTcyM2NcdTcyM2ZcdTcyNDBcdTcyNDZcdTcyNGJcdTcyNThcdTcyNzRcdTcyN2VcdTcyODJcdTcyODFcdTcyODdcdTcyOTJcdTcyOTZcdTcyYTJcdTcyYTdcdTcyYjlcdTcyYjJcdTcyYzNcdTcyYzZcdTcyYzRcdTcyY2VcdTcy''@;'; put 'put ''ZDJcdTcyZTJcdTcyZTBcdTcyZTFcdTcyZjlcdTcyZjdcdTUwMGZcdTczMTdcdTczMGFcdTczMWNcdTczMTZcdTczMWRcdTczMzRcdTczMmZcdTczMjlcdTczMjVcdTczM2VcdTczNGVcdTczNGZcdTllZDhcdTczNTdcdTczNmFcdTczNjhcdTczNzBcdTczNzhcdTczNzVcdTczN2JcdTczN2Fc''@;'; put 'put ''dTczYzhcdTczYjNcdTczY2VcdTczYmJcdTczYzBcdTczZTVcdTczZWVcdTczZGVcdTc0YTJcdTc0MDVcdTc0NmZcdTc0MjVcdTczZjhcdTc0MzJcdTc0M2FcdTc0NTVcdTc0M2ZcdTc0NWZcdTc0NTlcdTc0NDFcdTc0NWNcdTc0NjlcdTc0NzBcdTc0NjNcdTc0NmFcdTc0NzZcdTc0N2VcdTc0''@;'; put 'put ''OGJcdTc0OWVcdTc0YTdcdTc0Y2FcdTc0Y2ZcdTc0ZDRcdTczZjEiXSxbImUxYTEiLCJcdTc0ZTBcdTc0ZTNcdTc0ZTdcdTc0ZTlcdTc0ZWVcdTc0ZjJcdTc0ZjBcdTc0ZjFcdTc0ZjhcdTc0ZjdcdTc1MDRcdTc1MDNcdTc1MDVcdTc1MGNcdTc1MGVcdTc1MGRcdTc1MTVcdTc1MTNcdTc1MWVc''@;'; put 'put ''dTc1MjZcdTc1MmNcdTc1M2NcdTc1NDRcdTc1NGRcdTc1NGFcdTc1NDlcdTc1NWJcdTc1NDZcdTc1NWFcdTc1NjlcdTc1NjRcdTc1NjdcdTc1NmJcdTc1NmRcdTc1NzhcdTc1NzZcdTc1ODZcdTc1ODdcdTc1NzRcdTc1OGFcdTc1ODlcdTc1ODJcdTc1OTRcdTc1OWFcdTc1OWRcdTc1YTVcdTc1''@;'; put 'put ''YTNcdTc1YzJcdTc1YjNcdTc1YzNcdTc1YjVcdTc1YmRcdTc1YjhcdTc1YmNcdTc1YjFcdTc1Y2RcdTc1Y2FcdTc1ZDJcdTc1ZDlcdTc1ZTNcdTc1ZGVcdTc1ZmVcdTc1ZmZcdTc1ZmNcdTc2MDFcdTc1ZjBcdTc1ZmFcdTc1ZjJcdTc1ZjNcdTc2MGJcdTc2MGRcdTc2MDlcdTc2MWZcdTc2Mjdc''@;'; put 'put ''dTc2MjBcdTc2MjFcdTc2MjJcdTc2MjRcdTc2MzRcdTc2MzBcdTc2M2JcdTc2NDdcdTc2NDhcdTc2NDZcdTc2NWNcdTc2NThcdTc2NjFcdTc2NjJcdTc2NjhcdTc2NjlcdTc2NmFcdTc2NjdcdTc2NmNcdTc2NzAiXSxbImUyYTEiLCJcdTc2NzJcdTc2NzZcdTc2NzhcdTc2N2NcdTc2ODBcdTc2''@;'; put 'put ''ODNcdTc2ODhcdTc2OGJcdTc2OGVcdTc2OTZcdTc2OTNcdTc2OTlcdTc2OWFcdTc2YjBcdTc2YjRcdTc2YjhcdTc2YjlcdTc2YmFcdTc2YzJcdTc2Y2RcdTc2ZDZcdTc2ZDJcdTc2ZGVcdTc2ZTFcdTc2ZTVcdTc2ZTdcdTc2ZWFcdTg2MmZcdTc2ZmJcdTc3MDhcdTc3MDdcdTc3MDRcdTc3Mjlc''@;'; put 'put ''dTc3MjRcdTc3MWVcdTc3MjVcdTc3MjZcdTc3MWJcdTc3MzdcdTc3MzhcdTc3NDdcdTc3NWFcdTc3NjhcdTc3NmJcdTc3NWJcdTc3NjVcdTc3N2ZcdTc3N2VcdTc3NzlcdTc3OGVcdTc3OGJcdTc3OTFcdTc3YTBcdTc3OWVcdTc3YjBcdTc3YjZcdTc3YjlcdTc3YmZcdTc3YmNcdTc3YmRcdTc3''@;'; put 'put ''YmJcdTc3YzdcdTc3Y2RcdTc3ZDdcdTc3ZGFcdTc3ZGNcdTc3ZTNcdTc3ZWVcdTc3ZmNcdTc4MGNcdTc4MTJcdTc5MjZcdTc4MjBcdTc5MmFcdTc4NDVcdTc4OGVcdTc4NzRcdTc4ODZcdTc4N2NcdTc4OWFcdTc4OGNcdTc4YTNcdTc4YjVcdTc4YWFcdTc4YWZcdTc4ZDFcdTc4YzZcdTc4Y2Jc''@;'; put 'put ''dTc4ZDRcdTc4YmVcdTc4YmNcdTc4YzVcdTc4Y2FcdTc4ZWMiXSxbImUzYTEiLCJcdTc4ZTdcdTc4ZGFcdTc4ZmRcdTc4ZjRcdTc5MDdcdTc5MTJcdTc5MTFcdTc5MTlcdTc5MmNcdTc5MmJcdTc5NDBcdTc5NjBcdTc5NTdcdTc5NWZcdTc5NWFcdTc5NTVcdTc5NTNcdTc5N2FcdTc5N2ZcdTc5''@;'; put 'put ''OGFcdTc5OWRcdTc5YTdcdTlmNGJcdTc5YWFcdTc5YWVcdTc5YjNcdTc5YjlcdTc5YmFcdTc5YzlcdTc5ZDVcdTc5ZTdcdTc5ZWNcdTc5ZTFcdTc5ZTNcdTdhMDhcdTdhMGRcdTdhMThcdTdhMTlcdTdhMjBcdTdhMWZcdTc5ODBcdTdhMzFcdTdhM2JcdTdhM2VcdTdhMzdcdTdhNDNcdTdhNTdc''@;'; put 'put ''dTdhNDlcdTdhNjFcdTdhNjJcdTdhNjlcdTlmOWRcdTdhNzBcdTdhNzlcdTdhN2RcdTdhODhcdTdhOTdcdTdhOTVcdTdhOThcdTdhOTZcdTdhYTlcdTdhYzhcdTdhYjBcdTdhYjZcdTdhYzVcdTdhYzRcdTdhYmZcdTkwODNcdTdhYzdcdTdhY2FcdTdhY2RcdTdhY2ZcdTdhZDVcdTdhZDNcdTdh''@;'; put 'put ''ZDlcdTdhZGFcdTdhZGRcdTdhZTFcdTdhZTJcdTdhZTZcdTdhZWRcdTdhZjBcdTdiMDJcdTdiMGZcdTdiMGFcdTdiMDZcdTdiMzNcdTdiMThcdTdiMTlcdTdiMWVcdTdiMzVcdTdiMjhcdTdiMzZcdTdiNTAiXSxbImU0YTEiLCJcdTdiN2FcdTdiMDRcdTdiNGRcdTdiMGJcdTdiNGNcdTdiNDVc''@;'; put 'put ''dTdiNzVcdTdiNjVcdTdiNzRcdTdiNjdcdTdiNzBcdTdiNzFcdTdiNmNcdTdiNmVcdTdiOWRcdTdiOThcdTdiOWZcdTdiOGRcdTdiOWNcdTdiOWFcdTdiOGJcdTdiOTJcdTdiOGZcdTdiNWRcdTdiOTlcdTdiY2JcdTdiYzFcdTdiY2NcdTdiY2ZcdTdiYjRcdTdiYzZcdTdiZGRcdTdiZTlcdTdj''@;'; put 'put ''MTFcdTdjMTRcdTdiZTZcdTdiZTVcdTdjNjBcdTdjMDBcdTdjMDdcdTdjMTNcdTdiZjNcdTdiZjdcdTdjMTdcdTdjMGRcdTdiZjZcdTdjMjNcdTdjMjdcdTdjMmFcdTdjMWZcdTdjMzdcdTdjMmJcdTdjM2RcdTdjNGNcdTdjNDNcdTdjNTRcdTdjNGZcdTdjNDBcdTdjNTBcdTdjNThcdTdjNWZc''@;'; put 'put ''dTdjNjRcdTdjNTZcdTdjNjVcdTdjNmNcdTdjNzVcdTdjODNcdTdjOTBcdTdjYTRcdTdjYWRcdTdjYTJcdTdjYWJcdTdjYTFcdTdjYThcdTdjYjNcdTdjYjJcdTdjYjFcdTdjYWVcdTdjYjlcdTdjYmRcdTdjYzBcdTdjYzVcdTdjYzJcdTdjZDhcdTdjZDJcdTdjZGNcdTdjZTJcdTliM2JcdTdj''@;'; put 'put ''ZWZcdTdjZjJcdTdjZjRcdTdjZjZcdTdjZmFcdTdkMDYiXSxbImU1YTEiLCJcdTdkMDJcdTdkMWNcdTdkMTVcdTdkMGFcdTdkNDVcdTdkNGJcdTdkMmVcdTdkMzJcdTdkM2ZcdTdkMzVcdTdkNDZcdTdkNzNcdTdkNTZcdTdkNGVcdTdkNzJcdTdkNjhcdTdkNmVcdTdkNGZcdTdkNjNcdTdkOTNc''@;'; put 'put ''dTdkODlcdTdkNWJcdTdkOGZcdTdkN2RcdTdkOWJcdTdkYmFcdTdkYWVcdTdkYTNcdTdkYjVcdTdkYzdcdTdkYmRcdTdkYWJcdTdlM2RcdTdkYTJcdTdkYWZcdTdkZGNcdTdkYjhcdTdkOWZcdTdkYjBcdTdkZDhcdTdkZGRcdTdkZTRcdTdkZGVcdTdkZmJcdTdkZjJcdTdkZTFcdTdlMDVcdTdl''@;'; put 'put ''MGFcdTdlMjNcdTdlMjFcdTdlMTJcdTdlMzFcdTdlMWZcdTdlMDlcdTdlMGJcdTdlMjJcdTdlNDZcdTdlNjZcdTdlM2JcdTdlMzVcdTdlMzlcdTdlNDNcdTdlMzdcdTdlMzJcdTdlM2FcdTdlNjdcdTdlNWRcdTdlNTZcdTdlNWVcdTdlNTlcdTdlNWFcdTdlNzlcdTdlNmFcdTdlNjlcdTdlN2Nc''@;'; put 'put ''dTdlN2JcdTdlODNcdTdkZDVcdTdlN2RcdThmYWVcdTdlN2ZcdTdlODhcdTdlODlcdTdlOGNcdTdlOTJcdTdlOTBcdTdlOTNcdTdlOTRcdTdlOTZcdTdlOGVcdTdlOWJcdTdlOWNcdTdmMzhcdTdmM2EiXSxbImU2YTEiLCJcdTdmNDVcdTdmNGNcdTdmNGRcdTdmNGVcdTdmNTBcdTdmNTFcdTdm''@;'; put 'put ''NTVcdTdmNTRcdTdmNThcdTdmNWZcdTdmNjBcdTdmNjhcdTdmNjlcdTdmNjdcdTdmNzhcdTdmODJcdTdmODZcdTdmODNcdTdmODhcdTdmODdcdTdmOGNcdTdmOTRcdTdmOWVcdTdmOWRcdTdmOWFcdTdmYTNcdTdmYWZcdTdmYjJcdTdmYjlcdTdmYWVcdTdmYjZcdTdmYjhcdThiNzFcdTdmYzVc''@;'; put 'put ''dTdmYzZcdTdmY2FcdTdmZDVcdTdmZDRcdTdmZTFcdTdmZTZcdTdmZTlcdTdmZjNcdTdmZjlcdTk4ZGNcdTgwMDZcdTgwMDRcdTgwMGJcdTgwMTJcdTgwMThcdTgwMTlcdTgwMWNcdTgwMjFcdTgwMjhcdTgwM2ZcdTgwM2JcdTgwNGFcdTgwNDZcdTgwNTJcdTgwNThcdTgwNWFcdTgwNWZcdTgw''@;'; put 'put ''NjJcdTgwNjhcdTgwNzNcdTgwNzJcdTgwNzBcdTgwNzZcdTgwNzlcdTgwN2RcdTgwN2ZcdTgwODRcdTgwODZcdTgwODVcdTgwOWJcdTgwOTNcdTgwOWFcdTgwYWRcdTUxOTBcdTgwYWNcdTgwZGJcdTgwZTVcdTgwZDlcdTgwZGRcdTgwYzRcdTgwZGFcdTgwZDZcdTgxMDlcdTgwZWZcdTgwZjFc''@;'; put 'put ''dTgxMWJcdTgxMjlcdTgxMjNcdTgxMmZcdTgxNGIiXSxbImU3YTEiLCJcdTk2OGJcdTgxNDZcdTgxM2VcdTgxNTNcdTgxNTFcdTgwZmNcdTgxNzFcdTgxNmVcdTgxNjVcdTgxNjZcdTgxNzRcdTgxODNcdTgxODhcdTgxOGFcdTgxODBcdTgxODJcdTgxYTBcdTgxOTVcdTgxYTRcdTgxYTNcdTgx''@;'; put 'put ''NWZcdTgxOTNcdTgxYTlcdTgxYjBcdTgxYjVcdTgxYmVcdTgxYjhcdTgxYmRcdTgxYzBcdTgxYzJcdTgxYmFcdTgxYzlcdTgxY2RcdTgxZDFcdTgxZDlcdTgxZDhcdTgxYzhcdTgxZGFcdTgxZGZcdTgxZTBcdTgxZTdcdTgxZmFcdTgxZmJcdTgxZmVcdTgyMDFcdTgyMDJcdTgyMDVcdTgyMDdc''@;'; put 'put ''dTgyMGFcdTgyMGRcdTgyMTBcdTgyMTZcdTgyMjlcdTgyMmJcdTgyMzhcdTgyMzNcdTgyNDBcdTgyNTlcdTgyNThcdTgyNWRcdTgyNWFcdTgyNWZcdTgyNjRcdTgyNjJcdTgyNjhcdTgyNmFcdTgyNmJcdTgyMmVcdTgyNzFcdTgyNzdcdTgyNzhcdTgyN2VcdTgyOGRcdTgyOTJcdTgyYWJcdTgy''@;'; put 'put ''OWZcdTgyYmJcdTgyYWNcdTgyZTFcdTgyZTNcdTgyZGZcdTgyZDJcdTgyZjRcdTgyZjNcdTgyZmFcdTgzOTNcdTgzMDNcdTgyZmJcdTgyZjlcdTgyZGVcdTgzMDZcdTgyZGNcdTgzMDlcdTgyZDkiXSxbImU4YTEiLCJcdTgzMzVcdTgzMzRcdTgzMTZcdTgzMzJcdTgzMzFcdTgzNDBcdTgzMzlc''@;'; put 'put ''dTgzNTBcdTgzNDVcdTgzMmZcdTgzMmJcdTgzMTdcdTgzMThcdTgzODVcdTgzOWFcdTgzYWFcdTgzOWZcdTgzYTJcdTgzOTZcdTgzMjNcdTgzOGVcdTgzODdcdTgzOGFcdTgzN2NcdTgzYjVcdTgzNzNcdTgzNzVcdTgzYTBcdTgzODlcdTgzYThcdTgzZjRcdTg0MTNcdTgzZWJcdTgzY2VcdTgz''@;'; put 'put ''ZmRcdTg0MDNcdTgzZDhcdTg0MGJcdTgzYzFcdTgzZjdcdTg0MDdcdTgzZTBcdTgzZjJcdTg0MGRcdTg0MjJcdTg0MjBcdTgzYmRcdTg0MzhcdTg1MDZcdTgzZmJcdTg0NmRcdTg0MmFcdTg0M2NcdTg1NWFcdTg0ODRcdTg0NzdcdTg0NmJcdTg0YWRcdTg0NmVcdTg0ODJcdTg0NjlcdTg0NDZc''@;'; put 'put ''dTg0MmNcdTg0NmZcdTg0NzlcdTg0MzVcdTg0Y2FcdTg0NjJcdTg0YjlcdTg0YmZcdTg0OWZcdTg0ZDlcdTg0Y2RcdTg0YmJcdTg0ZGFcdTg0ZDBcdTg0YzFcdTg0YzZcdTg0ZDZcdTg0YTFcdTg1MjFcdTg0ZmZcdTg0ZjRcdTg1MTdcdTg1MThcdTg1MmNcdTg1MWZcdTg1MTVcdTg1MTRcdTg0''@;'; put 'put ''ZmNcdTg1NDBcdTg1NjNcdTg1NThcdTg1NDgiXSxbImU5YTEiLCJcdTg1NDFcdTg2MDJcdTg1NGJcdTg1NTVcdTg1ODBcdTg1YTRcdTg1ODhcdTg1OTFcdTg1OGFcdTg1YThcdTg1NmRcdTg1OTRcdTg1OWJcdTg1ZWFcdTg1ODdcdTg1OWNcdTg1NzdcdTg1N2VcdTg1OTBcdTg1YzlcdTg1YmFc''@;'; put 'put ''dTg1Y2ZcdTg1YjlcdTg1ZDBcdTg1ZDVcdTg1ZGRcdTg1ZTVcdTg1ZGNcdTg1ZjlcdTg2MGFcdTg2MTNcdTg2MGJcdTg1ZmVcdTg1ZmFcdTg2MDZcdTg2MjJcdTg2MWFcdTg2MzBcdTg2M2ZcdTg2NGRcdTRlNTVcdTg2NTRcdTg2NWZcdTg2NjdcdTg2NzFcdTg2OTNcdTg2YTNcdTg2YTlcdTg2''@;'; put 'put ''YWFcdTg2OGJcdTg2OGNcdTg2YjZcdTg2YWZcdTg2YzRcdTg2YzZcdTg2YjBcdTg2YzlcdTg4MjNcdTg2YWJcdTg2ZDRcdTg2ZGVcdTg2ZTlcdTg2ZWNcdTg2ZGZcdTg2ZGJcdTg2ZWZcdTg3MTJcdTg3MDZcdTg3MDhcdTg3MDBcdTg3MDNcdTg2ZmJcdTg3MTFcdTg3MDlcdTg3MGRcdTg2Zjlc''@;'; put 'put ''dTg3MGFcdTg3MzRcdTg3M2ZcdTg3MzdcdTg3M2JcdTg3MjVcdTg3MjlcdTg3MWFcdTg3NjBcdTg3NWZcdTg3NzhcdTg3NGNcdTg3NGVcdTg3NzRcdTg3NTdcdTg3NjhcdTg3NmVcdTg3NTkiXSxbImVhYTEiLCJcdTg3NTNcdTg3NjNcdTg3NmFcdTg4MDVcdTg3YTJcdTg3OWZcdTg3ODJcdTg3''@;'; put 'put ''YWZcdTg3Y2JcdTg3YmRcdTg3YzBcdTg3ZDBcdTk2ZDZcdTg3YWJcdTg3YzRcdTg3YjNcdTg3YzdcdTg3YzZcdTg3YmJcdTg3ZWZcdTg3ZjJcdTg3ZTBcdTg4MGZcdTg4MGRcdTg3ZmVcdTg3ZjZcdTg3ZjdcdTg4MGVcdTg3ZDJcdTg4MTFcdTg4MTZcdTg4MTVcdTg4MjJcdTg4MjFcdTg4MzFc''@;'; put 'put ''dTg4MzZcdTg4MzlcdTg4MjdcdTg4M2JcdTg4NDRcdTg4NDJcdTg4NTJcdTg4NTlcdTg4NWVcdTg4NjJcdTg4NmJcdTg4ODFcdTg4N2VcdTg4OWVcdTg4NzVcdTg4N2RcdTg4YjVcdTg4NzJcdTg4ODJcdTg4OTdcdTg4OTJcdTg4YWVcdTg4OTlcdTg4YTJcdTg4OGRcdTg4YTRcdTg4YjBcdTg4''@;'; put 'put ''YmZcdTg4YjFcdTg4YzNcdTg4YzRcdTg4ZDRcdTg4ZDhcdTg4ZDlcdTg4ZGRcdTg4ZjlcdTg5MDJcdTg4ZmNcdTg4ZjRcdTg4ZThcdTg4ZjJcdTg5MDRcdTg5MGNcdTg5MGFcdTg5MTNcdTg5NDNcdTg5MWVcdTg5MjVcdTg5MmFcdTg5MmJcdTg5NDFcdTg5NDRcdTg5M2JcdTg5MzZcdTg5Mzhc''@;'; put 'put ''dTg5NGNcdTg5MWRcdTg5NjBcdTg5NWUiXSxbImViYTEiLCJcdTg5NjZcdTg5NjRcdTg5NmRcdTg5NmFcdTg5NmZcdTg5NzRcdTg5NzdcdTg5N2VcdTg5ODNcdTg5ODhcdTg5OGFcdTg5OTNcdTg5OThcdTg5YTFcdTg5YTlcdTg5YTZcdTg5YWNcdTg5YWZcdTg5YjJcdTg5YmFcdTg5YmRcdTg5''@;'; put 'put ''YmZcdTg5YzBcdTg5ZGFcdTg5ZGNcdTg5ZGRcdTg5ZTdcdTg5ZjRcdTg5ZjhcdThhMDNcdThhMTZcdThhMTBcdThhMGNcdThhMWJcdThhMWRcdThhMjVcdThhMzZcdThhNDFcdThhNWJcdThhNTJcdThhNDZcdThhNDhcdThhN2NcdThhNmRcdThhNmNcdThhNjJcdThhODVcdThhODJcdThhODRc''@;'; put 'put ''dThhYThcdThhYTFcdThhOTFcdThhYTVcdThhYTZcdThhOWFcdThhYTNcdThhYzRcdThhY2RcdThhYzJcdThhZGFcdThhZWJcdThhZjNcdThhZTdcdThhZTRcdThhZjFcdThiMTRcdThhZTBcdThhZTJcdThhZjdcdThhZGVcdThhZGJcdThiMGNcdThiMDdcdThiMWFcdThhZTFcdThiMTZcdThi''@;'; put 'put ''MTBcdThiMTdcdThiMjBcdThiMzNcdTk3YWJcdThiMjZcdThiMmJcdThiM2VcdThiMjhcdThiNDFcdThiNGNcdThiNGZcdThiNGVcdThiNDlcdThiNTZcdThiNWJcdThiNWFcdThiNmIiXSxbImVjYTEiLCJcdThiNWZcdThiNmNcdThiNmZcdThiNzRcdThiN2RcdThiODBcdThiOGNcdThiOGVc''@;'; put 'put ''dThiOTJcdThiOTNcdThiOTZcdThiOTlcdThiOWFcdThjM2FcdThjNDFcdThjM2ZcdThjNDhcdThjNGNcdThjNGVcdThjNTBcdThjNTVcdThjNjJcdThjNmNcdThjNzhcdThjN2FcdThjODJcdThjODlcdThjODVcdThjOGFcdThjOGRcdThjOGVcdThjOTRcdThjN2NcdThjOThcdTYyMWRcdThj''@;'; put 'put ''YWRcdThjYWFcdThjYmRcdThjYjJcdThjYjNcdThjYWVcdThjYjZcdThjYzhcdThjYzFcdThjZTRcdThjZTNcdThjZGFcdThjZmRcdThjZmFcdThjZmJcdThkMDRcdThkMDVcdThkMGFcdThkMDdcdThkMGZcdThkMGRcdThkMTBcdTlmNGVcdThkMTNcdThjY2RcdThkMTRcdThkMTZcdThkNjdc''@;'; put 'put ''dThkNmRcdThkNzFcdThkNzNcdThkODFcdThkOTlcdThkYzJcdThkYmVcdThkYmFcdThkY2ZcdThkZGFcdThkZDZcdThkY2NcdThkZGJcdThkY2JcdThkZWFcdThkZWJcdThkZGZcdThkZTNcdThkZmNcdThlMDhcdThlMDlcdThkZmZcdThlMWRcdThlMWVcdThlMTBcdThlMWZcdThlNDJcdThl''@;'; put 'put ''MzVcdThlMzBcdThlMzRcdThlNGEiXSxbImVkYTEiLCJcdThlNDdcdThlNDlcdThlNGNcdThlNTBcdThlNDhcdThlNTlcdThlNjRcdThlNjBcdThlMmFcdThlNjNcdThlNTVcdThlNzZcdThlNzJcdThlN2NcdThlODFcdThlODdcdThlODVcdThlODRcdThlOGJcdThlOGFcdThlOTNcdThlOTFc''@;'; put 'put ''dThlOTRcdThlOTlcdThlYWFcdThlYTFcdThlYWNcdThlYjBcdThlYzZcdThlYjFcdThlYmVcdThlYzVcdThlYzhcdThlY2JcdThlZGJcdThlZTNcdThlZmNcdThlZmJcdThlZWJcdThlZmVcdThmMGFcdThmMDVcdThmMTVcdThmMTJcdThmMTlcdThmMTNcdThmMWNcdThmMWZcdThmMWJcdThm''@;'; put 'put ''MGNcdThmMjZcdThmMzNcdThmM2JcdThmMzlcdThmNDVcdThmNDJcdThmM2VcdThmNGNcdThmNDlcdThmNDZcdThmNGVcdThmNTdcdThmNWNcdThmNjJcdThmNjNcdThmNjRcdThmOWNcdThmOWZcdThmYTNcdThmYWRcdThmYWZcdThmYjdcdThmZGFcdThmZTVcdThmZTJcdThmZWFcdThmZWZc''@;'; put 'put ''dTkwODdcdThmZjRcdTkwMDVcdThmZjlcdThmZmFcdTkwMTFcdTkwMTVcdTkwMjFcdTkwMGRcdTkwMWVcdTkwMTZcdTkwMGJcdTkwMjdcdTkwMzZcdTkwMzVcdTkwMzlcdThmZjgiXSxbImVlYTEiLCJcdTkwNGZcdTkwNTBcdTkwNTFcdTkwNTJcdTkwMGVcdTkwNDlcdTkwM2VcdTkwNTZcdTkw''@;'; put 'put ''NThcdTkwNWVcdTkwNjhcdTkwNmZcdTkwNzZcdTk2YThcdTkwNzJcdTkwODJcdTkwN2RcdTkwODFcdTkwODBcdTkwOGFcdTkwODlcdTkwOGZcdTkwYThcdTkwYWZcdTkwYjFcdTkwYjVcdTkwZTJcdTkwZTRcdTYyNDhcdTkwZGJcdTkxMDJcdTkxMTJcdTkxMTlcdTkxMzJcdTkxMzBcdTkxNGFc''@;'; put 'put ''dTkxNTZcdTkxNThcdTkxNjNcdTkxNjVcdTkxNjlcdTkxNzNcdTkxNzJcdTkxOGJcdTkxODlcdTkxODJcdTkxYTJcdTkxYWJcdTkxYWZcdTkxYWFcdTkxYjVcdTkxYjRcdTkxYmFcdTkxYzBcdTkxYzFcdTkxYzlcdTkxY2JcdTkxZDBcdTkxZDZcdTkxZGZcdTkxZTFcdTkxZGJcdTkxZmNcdTkx''@;'; put 'put ''ZjVcdTkxZjZcdTkyMWVcdTkxZmZcdTkyMTRcdTkyMmNcdTkyMTVcdTkyMTFcdTkyNWVcdTkyNTdcdTkyNDVcdTkyNDlcdTkyNjRcdTkyNDhcdTkyOTVcdTkyM2ZcdTkyNGJcdTkyNTBcdTkyOWNcdTkyOTZcdTkyOTNcdTkyOWJcdTkyNWFcdTkyY2ZcdTkyYjlcdTkyYjdcdTkyZTlcdTkzMGZc''@;'; put 'put ''dTkyZmFcdTkzNDRcdTkzMmUiXSxbImVmYTEiLCJcdTkzMTlcdTkzMjJcdTkzMWFcdTkzMjNcdTkzM2FcdTkzMzVcdTkzM2JcdTkzNWNcdTkzNjBcdTkzN2NcdTkzNmVcdTkzNTZcdTkzYjBcdTkzYWNcdTkzYWRcdTkzOTRcdTkzYjlcdTkzZDZcdTkzZDdcdTkzZThcdTkzZTVcdTkzZDhcdTkz''@;'; put 'put ''YzNcdTkzZGRcdTkzZDBcdTkzYzhcdTkzZTRcdTk0MWFcdTk0MTRcdTk0MTNcdTk0MDNcdTk0MDdcdTk0MTBcdTk0MzZcdTk0MmJcdTk0MzVcdTk0MjFcdTk0M2FcdTk0NDFcdTk0NTJcdTk0NDRcdTk0NWJcdTk0NjBcdTk0NjJcdTk0NWVcdTk0NmFcdTkyMjlcdTk0NzBcdTk0NzVcdTk0Nzdc''@;'; put 'put ''dTk0N2RcdTk0NWFcdTk0N2NcdTk0N2VcdTk0ODFcdTk0N2ZcdTk1ODJcdTk1ODdcdTk1OGFcdTk1OTRcdTk1OTZcdTk1OThcdTk1OTlcdTk1YTBcdTk1YThcdTk1YTdcdTk1YWRcdTk1YmNcdTk1YmJcdTk1YjlcdTk1YmVcdTk1Y2FcdTZmZjZcdTk1YzNcdTk1Y2RcdTk1Y2NcdTk1ZDVcdTk1''@;'; put 'put ''ZDRcdTk1ZDZcdTk1ZGNcdTk1ZTFcdTk1ZTVcdTk1ZTJcdTk2MjFcdTk2MjhcdTk2MmVcdTk2MmZcdTk2NDJcdTk2NGNcdTk2NGZcdTk2NGJcdTk2NzdcdTk2NWNcdTk2NWUiXSxbImYwYTEiLCJcdTk2NWRcdTk2NWZcdTk2NjZcdTk2NzJcdTk2NmNcdTk2OGRcdTk2OThcdTk2OTVcdTk2OTdc''@;'; put 'put ''dTk2YWFcdTk2YTdcdTk2YjFcdTk2YjJcdTk2YjBcdTk2YjRcdTk2YjZcdTk2YjhcdTk2YjlcdTk2Y2VcdTk2Y2JcdTk2YzlcdTk2Y2RcdTg5NGRcdTk2ZGNcdTk3MGRcdTk2ZDVcdTk2ZjlcdTk3MDRcdTk3MDZcdTk3MDhcdTk3MTNcdTk3MGVcdTk3MTFcdTk3MGZcdTk3MTZcdTk3MTlcdTk3''@;'; put 'put ''MjRcdTk3MmFcdTk3MzBcdTk3MzlcdTk3M2RcdTk3M2VcdTk3NDRcdTk3NDZcdTk3NDhcdTk3NDJcdTk3NDlcdTk3NWNcdTk3NjBcdTk3NjRcdTk3NjZcdTk3NjhcdTUyZDJcdTk3NmJcdTk3NzFcdTk3NzlcdTk3ODVcdTk3N2NcdTk3ODFcdTk3N2FcdTk3ODZcdTk3OGJcdTk3OGZcdTk3OTBc''@;'; put 'put ''dTk3OWNcdTk3YThcdTk3YTZcdTk3YTNcdTk3YjNcdTk3YjRcdTk3YzNcdTk3YzZcdTk3YzhcdTk3Y2JcdTk3ZGNcdTk3ZWRcdTlmNGZcdTk3ZjJcdTdhZGZcdTk3ZjZcdTk3ZjVcdTk4MGZcdTk4MGNcdTk4MzhcdTk4MjRcdTk4MjFcdTk4MzdcdTk4M2RcdTk4NDZcdTk4NGZcdTk4NGJcdTk4''@;'; put 'put ''NmJcdTk4NmZcdTk4NzAiXSxbImYxYTEiLCJcdTk4NzFcdTk4NzRcdTk4NzNcdTk4YWFcdTk4YWZcdTk4YjFcdTk4YjZcdTk4YzRcdTk4YzNcdTk4YzZcdTk4ZTlcdTk4ZWJcdTk5MDNcdTk5MDlcdTk5MTJcdTk5MTRcdTk5MThcdTk5MjFcdTk5MWRcdTk5MWVcdTk5MjRcdTk5MjBcdTk5MmNc''@;'; put 'put ''dTk5MmVcdTk5M2RcdTk5M2VcdTk5NDJcdTk5NDlcdTk5NDVcdTk5NTBcdTk5NGJcdTk5NTFcdTk5NTJcdTk5NGNcdTk5NTVcdTk5OTdcdTk5OThcdTk5YTVcdTk5YWRcdTk5YWVcdTk5YmNcdTk5ZGZcdTk5ZGJcdTk5ZGRcdTk5ZDhcdTk5ZDFcdTk5ZWRcdTk5ZWVcdTk5ZjFcdTk5ZjJcdTk5''@;'; put 'put ''ZmJcdTk5ZjhcdTlhMDFcdTlhMGZcdTlhMDVcdTk5ZTJcdTlhMTlcdTlhMmJcdTlhMzdcdTlhNDVcdTlhNDJcdTlhNDBcdTlhNDNcdTlhM2VcdTlhNTVcdTlhNGRcdTlhNWJcdTlhNTdcdTlhNWZcdTlhNjJcdTlhNjVcdTlhNjRcdTlhNjlcdTlhNmJcdTlhNmFcdTlhYWRcdTlhYjBcdTlhYmNc''@;'; put 'put ''dTlhYzBcdTlhY2ZcdTlhZDFcdTlhZDNcdTlhZDRcdTlhZGVcdTlhZGZcdTlhZTJcdTlhZTNcdTlhZTZcdTlhZWZcdTlhZWJcdTlhZWVcdTlhZjRcdTlhZjFcdTlhZjciXSxbImYyYTEiLCJcdTlhZmJcdTliMDZcdTliMThcdTliMWFcdTliMWZcdTliMjJcdTliMjNcdTliMjVcdTliMjdcdTli''@;'; put 'put ''MjhcdTliMjlcdTliMmFcdTliMmVcdTliMmZcdTliMzJcdTliNDRcdTliNDNcdTliNGZcdTliNGRcdTliNGVcdTliNTFcdTliNThcdTliNzRcdTliOTNcdTliODNcdTliOTFcdTliOTZcdTliOTdcdTliOWZcdTliYTBcdTliYThcdTliYjRcdTliYzBcdTliY2FcdTliYjlcdTliYzZcdTliY2Zc''@;'; put 'put ''dTliZDFcdTliZDJcdTliZTNcdTliZTJcdTliZTRcdTliZDRcdTliZTFcdTljM2FcdTliZjJcdTliZjFcdTliZjBcdTljMTVcdTljMTRcdTljMDlcdTljMTNcdTljMGNcdTljMDZcdTljMDhcdTljMTJcdTljMGFcdTljMDRcdTljMmVcdTljMWJcdTljMjVcdTljMjRcdTljMjFcdTljMzBcdTlj''@;'; put 'put ''NDdcdTljMzJcdTljNDZcdTljM2VcdTljNWFcdTljNjBcdTljNjdcdTljNzZcdTljNzhcdTljZTdcdTljZWNcdTljZjBcdTlkMDlcdTlkMDhcdTljZWJcdTlkMDNcdTlkMDZcdTlkMmFcdTlkMjZcdTlkYWZcdTlkMjNcdTlkMWZcdTlkNDRcdTlkMTVcdTlkMTJcdTlkNDFcdTlkM2ZcdTlkM2Vc''@;'; put 'put ''dTlkNDZcdTlkNDgiXSxbImYzYTEiLCJcdTlkNWRcdTlkNWVcdTlkNjRcdTlkNTFcdTlkNTBcdTlkNTlcdTlkNzJcdTlkODlcdTlkODdcdTlkYWJcdTlkNmZcdTlkN2FcdTlkOWFcdTlkYTRcdTlkYTlcdTlkYjJcdTlkYzRcdTlkYzFcdTlkYmJcdTlkYjhcdTlkYmFcdTlkYzZcdTlkY2ZcdTlk''@;'; put 'put ''YzJcdTlkZDlcdTlkZDNcdTlkZjhcdTlkZTZcdTlkZWRcdTlkZWZcdTlkZmRcdTllMWFcdTllMWJcdTllMWVcdTllNzVcdTllNzlcdTllN2RcdTllODFcdTllODhcdTllOGJcdTllOGNcdTllOTJcdTllOTVcdTllOTFcdTllOWRcdTllYTVcdTllYTlcdTllYjhcdTllYWFcdTllYWRcdTk3NjFc''@;'; put 'put ''dTllY2NcdTllY2VcdTllY2ZcdTllZDBcdTllZDRcdTllZGNcdTllZGVcdTllZGRcdTllZTBcdTllZTVcdTllZThcdTllZWZcdTllZjRcdTllZjZcdTllZjdcdTllZjlcdTllZmJcdTllZmNcdTllZmRcdTlmMDdcdTlmMDhcdTc2YjdcdTlmMTVcdTlmMjFcdTlmMmNcdTlmM2VcdTlmNGFcdTlm''@;'; put 'put ''NTJcdTlmNTRcdTlmNjNcdTlmNWZcdTlmNjBcdTlmNjFcdTlmNjZcdTlmNjdcdTlmNmNcdTlmNmFcdTlmNzdcdTlmNzJcdTlmNzZcdTlmOTVcdTlmOWNcdTlmYTAiXSxbImY0YTEiLCJcdTU4MmZcdTY5YzdcdTkwNTlcdTc0NjRcdTUxZGNcdTcxOTkiXSxbImY5YTEiLCJcdTdlOGFcdTg5MWNc''@;'; put 'put ''dTkzNDhcdTkyODhcdTg0ZGNcdTRmYzlcdTcwYmJcdTY2MzFcdTY4YzhcdTkyZjlcdTY2ZmJcdTVmNDVcdTRlMjhcdTRlZTFcdTRlZmNcdTRmMDBcdTRmMDNcdTRmMzlcdTRmNTZcdTRmOTJcdTRmOGFcdTRmOWFcdTRmOTRcdTRmY2RcdTUwNDBcdTUwMjJcdTRmZmZcdTUwMWVcdTUwNDZcdTUw''@;'; put 'put ''NzBcdTUwNDJcdTUwOTRcdTUwZjRcdTUwZDhcdTUxNGFcdTUxNjRcdTUxOWRcdTUxYmVcdTUxZWNcdTUyMTVcdTUyOWNcdTUyYTZcdTUyYzBcdTUyZGJcdTUzMDBcdTUzMDdcdTUzMjRcdTUzNzJcdTUzOTNcdTUzYjJcdTUzZGRcdWZhMGVcdTU0OWNcdTU0OGFcdTU0YTlcdTU0ZmZcdTU1ODZc''@;'; put 'put ''dTU3NTlcdTU3NjVcdTU3YWNcdTU3YzhcdTU3YzdcdWZhMGZcdWZhMTBcdTU4OWVcdTU4YjJcdTU5MGJcdTU5NTNcdTU5NWJcdTU5NWRcdTU5NjNcdTU5YTRcdTU5YmFcdTViNTZcdTViYzBcdTc1MmZcdTViZDhcdTViZWNcdTVjMWVcdTVjYTZcdTVjYmFcdTVjZjVcdTVkMjdcdTVkNTNcdWZh''@;'; put 'put ''MTFcdTVkNDJcdTVkNmRcdTVkYjhcdTVkYjlcdTVkZDBcdTVmMjFcdTVmMzRcdTVmNjdcdTVmYjciXSxbImZhYTEiLCJcdTVmZGVcdTYwNWRcdTYwODVcdTYwOGFcdTYwZGVcdTYwZDVcdTYxMjBcdTYwZjJcdTYxMTFcdTYxMzdcdTYxMzBcdTYxOThcdTYyMTNcdTYyYTZcdTYzZjVcdTY0NjBc''@;'; put 'put ''dTY0OWRcdTY0Y2VcdTY1NGVcdTY2MDBcdTY2MTVcdTY2M2JcdTY2MDlcdTY2MmVcdTY2MWVcdTY2MjRcdTY2NjVcdTY2NTdcdTY2NTlcdWZhMTJcdTY2NzNcdTY2OTlcdTY2YTBcdTY2YjJcdTY2YmZcdTY2ZmFcdTY3MGVcdWY5MjlcdTY3NjZcdTY3YmJcdTY4NTJcdTY3YzBcdTY4MDFcdTY4''@;'; put 'put ''NDRcdTY4Y2ZcdWZhMTNcdTY5NjhcdWZhMTRcdTY5OThcdTY5ZTJcdTZhMzBcdTZhNmJcdTZhNDZcdTZhNzNcdTZhN2VcdTZhZTJcdTZhZTRcdTZiZDZcdTZjM2ZcdTZjNWNcdTZjODZcdTZjNmZcdTZjZGFcdTZkMDRcdTZkODdcdTZkNmZcdTZkOTZcdTZkYWNcdTZkY2ZcdTZkZjhcdTZkZjJc''@;'; put 'put ''dTZkZmNcdTZlMzlcdTZlNWNcdTZlMjdcdTZlM2NcdTZlYmZcdTZmODhcdTZmYjVcdTZmZjVcdTcwMDVcdTcwMDdcdTcwMjhcdTcwODVcdTcwYWJcdTcxMGZcdTcxMDRcdTcxNWNcdTcxNDZcdTcxNDdcdWZhMTVcdTcxYzFcdTcxZmVcdTcyYjEiXSxbImZiYTEiLCJcdTcyYmVcdTczMjRcdWZh''@;'; put 'put ''MTZcdTczNzdcdTczYmRcdTczYzlcdTczZDZcdTczZTNcdTczZDJcdTc0MDdcdTczZjVcdTc0MjZcdTc0MmFcdTc0MjlcdTc0MmVcdTc0NjJcdTc0ODlcdTc0OWZcdTc1MDFcdTc1NmZcdTc2ODJcdTc2OWNcdTc2OWVcdTc2OWJcdTc2YTZcdWZhMTdcdTc3NDZcdTUyYWZcdTc4MjFcdTc4NGVc''@;'; put 'put ''dTc4NjRcdTc4N2FcdTc5MzBcdWZhMThcdWZhMTlcdWZhMWFcdTc5OTRcdWZhMWJcdTc5OWJcdTdhZDFcdTdhZTdcdWZhMWNcdTdhZWJcdTdiOWVcdWZhMWRcdTdkNDhcdTdkNWNcdTdkYjdcdTdkYTBcdTdkZDZcdTdlNTJcdTdmNDdcdTdmYTFcdWZhMWVcdTgzMDFcdTgzNjJcdTgzN2ZcdTgz''@;'; put 'put ''YzdcdTgzZjZcdTg0NDhcdTg0YjRcdTg1NTNcdTg1NTlcdTg1NmJcdWZhMWZcdTg1YjBcdWZhMjBcdWZhMjFcdTg4MDdcdTg4ZjVcdThhMTJcdThhMzdcdThhNzlcdThhYTdcdThhYmVcdThhZGZcdWZhMjJcdThhZjZcdThiNTNcdThiN2ZcdThjZjBcdThjZjRcdThkMTJcdThkNzZcdWZhMjNc''@;'; put 'put ''dThlY2ZcdWZhMjRcdWZhMjVcdTkwNjdcdTkwZGVcdWZhMjZcdTkxMTVcdTkxMjdcdTkxZGEiXSxbImZjYTEiLCJcdTkxZDdcdTkxZGVcdTkxZWRcdTkxZWVcdTkxZTRcdTkxZTVcdTkyMDZcdTkyMTBcdTkyMGFcdTkyM2FcdTkyNDBcdTkyM2NcdTkyNGVcdTkyNTlcdTkyNTFcdTkyMzlcdTky''@;'; put 'put ''NjdcdTkyYTdcdTkyNzdcdTkyNzhcdTkyZTdcdTkyZDdcdTkyZDlcdTkyZDBcdWZhMjdcdTkyZDVcdTkyZTBcdTkyZDNcdTkzMjVcdTkzMjFcdTkyZmJcdWZhMjhcdTkzMWVcdTkyZmZcdTkzMWRcdTkzMDJcdTkzNzBcdTkzNTdcdTkzYTRcdTkzYzZcdTkzZGVcdTkzZjhcdTk0MzFcdTk0NDVc''@;'; put 'put ''dTk0NDhcdTk1OTJcdWY5ZGNcdWZhMjlcdTk2OWRcdTk2YWZcdTk3MzNcdTk3M2JcdTk3NDNcdTk3NGRcdTk3NGZcdTk3NTFcdTk3NTVcdTk4NTdcdTk4NjVcdWZhMmFcdWZhMmJcdTk5MjdcdWZhMmNcdTk5OWVcdTlhNGVcdTlhZDlcdTlhZGNcdTliNzVcdTliNzJcdTliOGZcdTliYjFcdTli''@;'; put 'put ''YmJcdTljMDBcdTlkNzBcdTlkNmJcdWZhMmRcdTllMTlcdTllZDEiXSxbImZjZjEiLCJcdTIxNzAiLDksIlx1ZmZlMlx1ZmZlNFx1ZmYwN1x1ZmYwMiJdLFsiOGZhMmFmIiwiXHUwMmQ4XHUwMmM3XHhiOFx1MDJkOVx1MDJkZFx4YWZcdTAyZGJcdTAyZGFcdWZmNWVcdTAzODRcdTAzODUiXSxb''@;'; put 'put ''IjhmYTJjMiIsIlx4YTFceGE2XHhiZiJdLFsiOGZhMmViIiwiXHhiYVx4YWFceGE5XHhhZVx1MjEyMlx4YTRcdTIxMTYiXSxbIjhmYTZlMSIsIlx1MDM4Nlx1MDM4OFx1MDM4OVx1MDM4YVx1MDNhYSJdLFsiOGZhNmU3IiwiXHUwMzhjIl0sWyI4ZmE2ZTkiLCJcdTAzOGVcdTAzYWIiXSxbIjhm''@;'; put 'put ''YTZlYyIsIlx1MDM4ZiJdLFsiOGZhNmYxIiwiXHUwM2FjXHUwM2FkXHUwM2FlXHUwM2FmXHUwM2NhXHUwMzkwXHUwM2NjXHUwM2MyXHUwM2NkXHUwM2NiXHUwM2IwXHUwM2NlIl0sWyI4ZmE3YzIiLCJcdTA0MDIiLDEwLCJcdTA0MGVcdTA0MGYiXSxbIjhmYTdmMiIsIlx1MDQ1MiIsMTAsIlx1''@;'; put 'put ''MDQ1ZVx1MDQ1ZiJdLFsiOGZhOWExIiwiXHhjNlx1MDExMCJdLFsiOGZhOWE0IiwiXHUwMTI2Il0sWyI4ZmE5YTYiLCJcdTAxMzIiXSxbIjhmYTlhOCIsIlx1MDE0MVx1MDEzZiJdLFsiOGZhOWFiIiwiXHUwMTRhXHhkOFx1MDE1MiJdLFsiOGZhOWFmIiwiXHUwMTY2XHhkZSJdLFsiOGZhOWMx''@;'; put 'put ''IiwiXHhlNlx1MDExMVx4ZjBcdTAxMjdcdTAxMzFcdTAxMzNcdTAxMzhcdTAxNDJcdTAxNDBcdTAxNDlcdTAxNGJceGY4XHUwMTUzXHhkZlx1MDE2N1x4ZmUiXSxbIjhmYWFhMSIsIlx4YzFceGMwXHhjNFx4YzJcdTAxMDJcdTAxY2RcdTAxMDBcdTAxMDRceGM1XHhjM1x1MDEwNlx1MDEwOFx1''@;'; put 'put ''MDEwY1x4YzdcdTAxMGFcdTAxMGVceGM5XHhjOFx4Y2JceGNhXHUwMTFhXHUwMTE2XHUwMTEyXHUwMTE4Il0sWyI4ZmFhYmEiLCJcdTAxMWNcdTAxMWVcdTAxMjJcdTAxMjBcdTAxMjRceGNkXHhjY1x4Y2ZceGNlXHUwMWNmXHUwMTMwXHUwMTJhXHUwMTJlXHUwMTI4XHUwMTM0XHUwMTM2XHUw''@;'; put 'put ''MTM5XHUwMTNkXHUwMTNiXHUwMTQzXHUwMTQ3XHUwMTQ1XHhkMVx4ZDNceGQyXHhkNlx4ZDRcdTAxZDFcdTAxNTBcdTAxNGNceGQ1XHUwMTU0XHUwMTU4XHUwMTU2XHUwMTVhXHUwMTVjXHUwMTYwXHUwMTVlXHUwMTY0XHUwMTYyXHhkYVx4ZDlceGRjXHhkYlx1MDE2Y1x1MDFkM1x1MDE3MFx1''@;'; put 'put ''MDE2YVx1MDE3Mlx1MDE2ZVx1MDE2OFx1MDFkN1x1MDFkYlx1MDFkOVx1MDFkNVx1MDE3NFx4ZGRcdTAxNzhcdTAxNzZcdTAxNzlcdTAxN2RcdTAxN2IiXSxbIjhmYWJhMSIsIlx4ZTFceGUwXHhlNFx4ZTJcdTAxMDNcdTAxY2VcdTAxMDFcdTAxMDVceGU1XHhlM1x1MDEwN1x1MDEwOVx1MDEw''@;'; put 'put ''ZFx4ZTdcdTAxMGJcdTAxMGZceGU5XHhlOFx4ZWJceGVhXHUwMTFiXHUwMTE3XHUwMTEzXHUwMTE5XHUwMWY1XHUwMTFkXHUwMTFmIl0sWyI4ZmFiYmQiLCJcdTAxMjFcdTAxMjVceGVkXHhlY1x4ZWZceGVlXHUwMWQwIl0sWyI4ZmFiYzUiLCJcdTAxMmJcdTAxMmZcdTAxMjlcdTAxMzVcdTAx''@;'; put 'put ''MzdcdTAxM2FcdTAxM2VcdTAxM2NcdTAxNDRcdTAxNDhcdTAxNDZceGYxXHhmM1x4ZjJceGY2XHhmNFx1MDFkMlx1MDE1MVx1MDE0ZFx4ZjVcdTAxNTVcdTAxNTlcdTAxNTdcdTAxNWJcdTAxNWRcdTAxNjFcdTAxNWZcdTAxNjVcdTAxNjNceGZhXHhmOVx4ZmNceGZiXHUwMTZkXHUwMWQ0XHUw''@;'; put 'put ''MTcxXHUwMTZiXHUwMTczXHUwMTZmXHUwMTY5XHUwMWQ4XHUwMWRjXHUwMWRhXHUwMWQ2XHUwMTc1XHhmZFx4ZmZcdTAxNzdcdTAxN2FcdTAxN2VcdTAxN2MiXSxbIjhmYjBhMSIsIlx1NGUwMlx1NGUwNFx1NGUwNVx1NGUwY1x1NGUxMlx1NGUxZlx1NGUyM1x1NGUyNFx1NGUyOFx1NGUyYlx1''@;'; put 'put ''NGUyZVx1NGUyZlx1NGUzMFx1NGUzNVx1NGU0MFx1NGU0MVx1NGU0NFx1NGU0N1x1NGU1MVx1NGU1YVx1NGU1Y1x1NGU2M1x1NGU2OFx1NGU2OVx1NGU3NFx1NGU3NVx1NGU3OVx1NGU3Zlx1NGU4ZFx1NGU5Nlx1NGU5N1x1NGU5ZFx1NGVhZlx1NGViOVx1NGVjM1x1NGVkMFx1NGVkYVx1NGVk''@;'; put 'put ''Ylx1NGVlMFx1NGVlMVx1NGVlMlx1NGVlOFx1NGVlZlx1NGVmMVx1NGVmM1x1NGVmNVx1NGVmZFx1NGVmZVx1NGVmZlx1NGYwMFx1NGYwMlx1NGYwM1x1NGYwOFx1NGYwYlx1NGYwY1x1NGYxMlx1NGYxNVx1NGYxNlx1NGYxN1x1NGYxOVx1NGYyZVx1NGYzMVx1NGY2MFx1NGYzM1x1NGYzNVx1''@;'; put 'put ''NGYzN1x1NGYzOVx1NGYzYlx1NGYzZVx1NGY0MFx1NGY0Mlx1NGY0OFx1NGY0OVx1NGY0Ylx1NGY0Y1x1NGY1Mlx1NGY1NFx1NGY1Nlx1NGY1OFx1NGY1Zlx1NGY2M1x1NGY2YVx1NGY2Y1x1NGY2ZVx1NGY3MVx1NGY3N1x1NGY3OFx1NGY3OVx1NGY3YVx1NGY3ZFx1NGY3ZVx1NGY4MVx1NGY4''@;'; put 'put ''Mlx1NGY4NCJdLFsiOGZiMWExIiwiXHU0Zjg1XHU0Zjg5XHU0ZjhhXHU0ZjhjXHU0ZjhlXHU0ZjkwXHU0ZjkyXHU0ZjkzXHU0Zjk0XHU0Zjk3XHU0Zjk5XHU0ZjlhXHU0ZjllXHU0ZjlmXHU0ZmIyXHU0ZmI3XHU0ZmI5XHU0ZmJiXHU0ZmJjXHU0ZmJkXHU0ZmJlXHU0ZmMwXHU0ZmMxXHU0ZmM1''@;'; put 'put ''XHU0ZmM2XHU0ZmM4XHU0ZmM5XHU0ZmNiXHU0ZmNjXHU0ZmNkXHU0ZmNmXHU0ZmQyXHU0ZmRjXHU0ZmUwXHU0ZmUyXHU0ZmYwXHU0ZmYyXHU0ZmZjXHU0ZmZkXHU0ZmZmXHU1MDAwXHU1MDAxXHU1MDA0XHU1MDA3XHU1MDBhXHU1MDBjXHU1MDBlXHU1MDEwXHU1MDEzXHU1MDE3XHU1MDE4XHU1''@;'; put 'put ''MDFiXHU1MDFjXHU1MDFkXHU1MDFlXHU1MDIyXHU1MDI3XHU1MDJlXHU1MDMwXHU1MDMyXHU1MDMzXHU1MDM1XHU1MDQwXHU1MDQxXHU1MDQyXHU1MDQ1XHU1MDQ2XHU1MDRhXHU1MDRjXHU1MDRlXHU1MDUxXHU1MDUyXHU1MDUzXHU1MDU3XHU1MDU5XHU1MDVmXHU1MDYwXHU1MDYyXHU1MDYz''@;'; put 'put ''XHU1MDY2XHU1MDY3XHU1MDZhXHU1MDZkXHU1MDcwXHU1MDcxXHU1MDNiXHU1MDgxXHU1MDgzXHU1MDg0XHU1MDg2XHU1MDhhXHU1MDhlXHU1MDhmXHU1MDkwIl0sWyI4ZmIyYTEiLCJcdTUwOTJcdTUwOTNcdTUwOTRcdTUwOTZcdTUwOWJcdTUwOWNcdTUwOWUiLDQsIlx1NTBhYVx1NTBhZlx1''@;'; put 'put ''NTBiMFx1NTBiOVx1NTBiYVx1NTBiZFx1NTBjMFx1NTBjM1x1NTBjNFx1NTBjN1x1NTBjY1x1NTBjZVx1NTBkMFx1NTBkM1x1NTBkNFx1NTBkOFx1NTBkY1x1NTBkZFx1NTBkZlx1NTBlMlx1NTBlNFx1NTBlNlx1NTBlOFx1NTBlOVx1NTBlZlx1NTBmMVx1NTBmNlx1NTBmYVx1NTBmZVx1NTEw''@;'; put 'put ''M1x1NTEwNlx1NTEwN1x1NTEwOFx1NTEwYlx1NTEwY1x1NTEwZFx1NTEwZVx1NTBmMlx1NTExMFx1NTExN1x1NTExOVx1NTExYlx1NTExY1x1NTExZFx1NTExZVx1NTEyM1x1NTEyN1x1NTEyOFx1NTEyY1x1NTEyZFx1NTEyZlx1NTEzMVx1NTEzM1x1NTEzNFx1NTEzNVx1NTEzOFx1NTEzOVx1''@;'; put 'put ''NTE0Mlx1NTE0YVx1NTE0Zlx1NTE1M1x1NTE1NVx1NTE1N1x1NTE1OFx1NTE1Zlx1NTE2NFx1NTE2Nlx1NTE3ZVx1NTE4M1x1NTE4NFx1NTE4Ylx1NTE4ZVx1NTE5OFx1NTE5ZFx1NTFhMVx1NTFhM1x1NTFhZFx1NTFiOFx1NTFiYVx1NTFiY1x1NTFiZVx1NTFiZlx1NTFjMiJdLFsiOGZiM2Ex''@;'; put 'put ''IiwiXHU1MWM4XHU1MWNmXHU1MWQxXHU1MWQyXHU1MWQzXHU1MWQ1XHU1MWQ4XHU1MWRlXHU1MWUyXHU1MWU1XHU1MWVlXHU1MWYyXHU1MWYzXHU1MWY0XHU1MWY3XHU1MjAxXHU1MjAyXHU1MjA1XHU1MjEyXHU1MjEzXHU1MjE1XHU1MjE2XHU1MjE4XHU1MjIyXHU1MjI4XHU1MjMxXHU1MjMy''@;'; put 'put ''XHU1MjM1XHU1MjNjXHU1MjQ1XHU1MjQ5XHU1MjU1XHU1MjU3XHU1MjU4XHU1MjVhXHU1MjVjXHU1MjVmXHU1MjYwXHU1MjYxXHU1MjY2XHU1MjZlXHU1Mjc3XHU1Mjc4XHU1Mjc5XHU1MjgwXHU1MjgyXHU1Mjg1XHU1MjhhXHU1MjhjXHU1MjkzXHU1Mjk1XHU1Mjk2XHU1Mjk3XHU1Mjk4XHU1''@;'; put 'put ''MjlhXHU1MjljXHU1MmE0XHU1MmE1XHU1MmE2XHU1MmE3XHU1MmFmXHU1MmIwXHU1MmI2XHU1MmI3XHU1MmI4XHU1MmJhXHU1MmJiXHU1MmJkXHU1MmMwXHU1MmM0XHU1MmM2XHU1MmM4XHU1MmNjXHU1MmNmXHU1MmQxXHU1MmQ0XHU1MmQ2XHU1MmRiXHU1MmRjXHU1MmUxXHU1MmU1XHU1MmU4''@;'; put 'put ''XHU1MmU5XHU1MmVhXHU1MmVjXHU1MmYwXHU1MmYxXHU1MmY0XHU1MmY2XHU1MmY3XHU1MzAwXHU1MzAzXHU1MzBhXHU1MzBiIl0sWyI4ZmI0YTEiLCJcdTUzMGNcdTUzMTFcdTUzMTNcdTUzMThcdTUzMWJcdTUzMWNcdTUzMWVcdTUzMWZcdTUzMjVcdTUzMjdcdTUzMjhcdTUzMjlcdTUzMmJc''@;'; put 'put ''dTUzMmNcdTUzMmRcdTUzMzBcdTUzMzJcdTUzMzVcdTUzM2NcdTUzM2RcdTUzM2VcdTUzNDJcdTUzNGNcdTUzNGJcdTUzNTlcdTUzNWJcdTUzNjFcdTUzNjNcdTUzNjVcdTUzNmNcdTUzNmRcdTUzNzJcdTUzNzlcdTUzN2VcdTUzODNcdTUzODdcdTUzODhcdTUzOGVcdTUzOTNcdTUzOTRcdTUz''@;'; put 'put ''OTlcdTUzOWRcdTUzYTFcdTUzYTRcdTUzYWFcdTUzYWJcdTUzYWZcdTUzYjJcdTUzYjRcdTUzYjVcdTUzYjdcdTUzYjhcdTUzYmFcdTUzYmRcdTUzYzBcdTUzYzVcdTUzY2ZcdTUzZDJcdTUzZDNcdTUzZDVcdTUzZGFcdTUzZGRcdTUzZGVcdTUzZTBcdTUzZTZcdTUzZTdcdTUzZjVcdTU0MDJc''@;'; put 'put ''dTU0MTNcdTU0MWFcdTU0MjFcdTU0MjdcdTU0MjhcdTU0MmFcdTU0MmZcdTU0MzFcdTU0MzRcdTU0MzVcdTU0NDNcdTU0NDRcdTU0NDdcdTU0NGRcdTU0NGZcdTU0NWVcdTU0NjJcdTU0NjRcdTU0NjZcdTU0NjdcdTU0NjlcdTU0NmJcdTU0NmRcdTU0NmVcdTU0NzRcdTU0N2YiXSxbIjhmYjVh''@;'; put 'put ''MSIsIlx1NTQ4MVx1NTQ4M1x1NTQ4NVx1NTQ4OFx1NTQ4OVx1NTQ4ZFx1NTQ5MVx1NTQ5NVx1NTQ5Nlx1NTQ5Y1x1NTQ5Zlx1NTRhMVx1NTRhNlx1NTRhN1x1NTRhOVx1NTRhYVx1NTRhZFx1NTRhZVx1NTRiMVx1NTRiN1x1NTRiOVx1NTRiYVx1NTRiYlx1NTRiZlx1NTRjNlx1NTRjYVx1NTRj''@;'; put 'put ''ZFx1NTRjZVx1NTRlMFx1NTRlYVx1NTRlY1x1NTRlZlx1NTRmNlx1NTRmY1x1NTRmZVx1NTRmZlx1NTUwMFx1NTUwMVx1NTUwNVx1NTUwOFx1NTUwOVx1NTUwY1x1NTUwZFx1NTUwZVx1NTUxNVx1NTUyYVx1NTUyYlx1NTUzMlx1NTUzNVx1NTUzNlx1NTUzYlx1NTUzY1x1NTUzZFx1NTU0MVx1''@;'; put 'put ''NTU0N1x1NTU0OVx1NTU0YVx1NTU0ZFx1NTU1MFx1NTU1MVx1NTU1OFx1NTU1YVx1NTU1Ylx1NTU1ZVx1NTU2MFx1NTU2MVx1NTU2NFx1NTU2Nlx1NTU3Zlx1NTU4MVx1NTU4Mlx1NTU4Nlx1NTU4OFx1NTU4ZVx1NTU4Zlx1NTU5MVx1NTU5Mlx1NTU5M1x1NTU5NFx1NTU5N1x1NTVhM1x1NTVh''@;'; put 'put ''NFx1NTVhZFx1NTViMlx1NTViZlx1NTVjMVx1NTVjM1x1NTVjNlx1NTVjOVx1NTVjYlx1NTVjY1x1NTVjZVx1NTVkMVx1NTVkMiJdLFsiOGZiNmExIiwiXHU1NWQzXHU1NWQ3XHU1NWQ4XHU1NWRiXHU1NWRlXHU1NWUyXHU1NWU5XHU1NWY2XHU1NWZmXHU1NjA1XHU1NjA4XHU1NjBhXHU1NjBk''@;'; put 'put ''Iiw1LCJcdTU2MTlcdTU2MmNcdTU2MzBcdTU2MzNcdTU2MzVcdTU2MzdcdTU2MzlcdTU2M2JcdTU2M2NcdTU2M2RcdTU2M2ZcdTU2NDBcdTU2NDFcdTU2NDNcdTU2NDRcdTU2NDZcdTU2NDlcdTU2NGJcdTU2NGRcdTU2NGZcdTU2NTRcdTU2NWVcdTU2NjBcdTU2NjFcdTU2NjJcdTU2NjNcdTU2''@;'; put 'put ''NjZcdTU2NjlcdTU2NmRcdTU2NmZcdTU2NzFcdTU2NzJcdTU2NzVcdTU2ODRcdTU2ODVcdTU2ODhcdTU2OGJcdTU2OGNcdTU2OTVcdTU2OTlcdTU2OWFcdTU2OWRcdTU2OWVcdTU2OWZcdTU2YTZcdTU2YTdcdTU2YThcdTU2YTlcdTU2YWJcdTU2YWNcdTU2YWRcdTU2YjFcdTU2YjNcdTU2Yjdc''@;'; put 'put ''dTU2YmVcdTU2YzVcdTU2YzlcdTU2Y2FcdTU2Y2JcdTU2Y2ZcdTU2ZDBcdTU2Y2NcdTU2Y2RcdTU2ZDlcdTU2ZGNcdTU2ZGRcdTU2ZGZcdTU2ZTFcdTU2ZTQiLDQsIlx1NTZmMVx1NTZlYlx1NTZlZCJdLFsiOGZiN2ExIiwiXHU1NmY2XHU1NmY3XHU1NzAxXHU1NzAyXHU1NzA3XHU1NzBhXHU1''@;'; put 'put ''NzBjXHU1NzExXHU1NzE1XHU1NzFhXHU1NzFiXHU1NzFkXHU1NzIwXHU1NzIyXHU1NzIzXHU1NzI0XHU1NzI1XHU1NzI5XHU1NzJhXHU1NzJjXHU1NzJlXHU1NzJmXHU1NzMzXHU1NzM0XHU1NzNkXHU1NzNlXHU1NzNmXHU1NzQ1XHU1NzQ2XHU1NzRjXHU1NzRkXHU1NzUyXHU1NzYyXHU1NzY1''@;'; put 'put ''XHU1NzY3XHU1NzY4XHU1NzZiXHU1NzZkIiw0LCJcdTU3NzNcdTU3NzRcdTU3NzVcdTU3NzdcdTU3NzlcdTU3N2FcdTU3N2JcdTU3N2NcdTU3N2VcdTU3ODFcdTU3ODNcdTU3OGNcdTU3OTRcdTU3OTdcdTU3OTlcdTU3OWFcdTU3OWNcdTU3OWRcdTU3OWVcdTU3OWZcdTU3YTFcdTU3OTVcdTU3''@;'; put 'put ''YTdcdTU3YThcdTU3YTlcdTU3YWNcdTU3YjhcdTU3YmRcdTU3YzdcdTU3YzhcdTU3Y2NcdTU3Y2ZcdTU3ZDVcdTU3ZGRcdTU3ZGVcdTU3ZTRcdTU3ZTZcdTU3ZTdcdTU3ZTlcdTU3ZWRcdTU3ZjBcdTU3ZjVcdTU3ZjZcdTU3ZjhcdTU3ZmRcdTU3ZmVcdTU3ZmZcdTU4MDNcdTU4MDRcdTU4MDhc''@;'; put 'put ''dTU4MDlcdTU3ZTEiXSxbIjhmYjhhMSIsIlx1NTgwY1x1NTgwZFx1NTgxYlx1NTgxZVx1NTgxZlx1NTgyMFx1NTgyNlx1NTgyN1x1NTgyZFx1NTgzMlx1NTgzOVx1NTgzZlx1NTg0OVx1NTg0Y1x1NTg0ZFx1NTg0Zlx1NTg1MFx1NTg1NVx1NTg1Zlx1NTg2MVx1NTg2NFx1NTg2N1x1NTg2OFx1''@;'; put 'put ''NTg3OFx1NTg3Y1x1NTg3Zlx1NTg4MFx1NTg4MVx1NTg4N1x1NTg4OFx1NTg4OVx1NTg4YVx1NTg4Y1x1NTg4ZFx1NTg4Zlx1NTg5MFx1NTg5NFx1NTg5Nlx1NTg5ZFx1NThhMFx1NThhMVx1NThhMlx1NThhNlx1NThhOVx1NThiMVx1NThiMlx1NThjNFx1NThiY1x1NThjMlx1NThjOFx1NThj''@;'; put 'put ''ZFx1NThjZVx1NThkMFx1NThkMlx1NThkNFx1NThkNlx1NThkYVx1NThkZFx1NThlMVx1NThlMlx1NThlOVx1NThmM1x1NTkwNVx1NTkwNlx1NTkwYlx1NTkwY1x1NTkxMlx1NTkxM1x1NTkxNFx1ODY0MVx1NTkxZFx1NTkyMVx1NTkyM1x1NTkyNFx1NTkyOFx1NTkyZlx1NTkzMFx1NTkzM1x1''@;'; put 'put ''NTkzNVx1NTkzNlx1NTkzZlx1NTk0M1x1NTk0Nlx1NTk1Mlx1NTk1M1x1NTk1OVx1NTk1Ylx1NTk1ZFx1NTk1ZVx1NTk1Zlx1NTk2MVx1NTk2M1x1NTk2Ylx1NTk2ZCJdLFsiOGZiOWExIiwiXHU1OTZmXHU1OTcyXHU1OTc1XHU1OTc2XHU1OTc5XHU1OTdiXHU1OTdjXHU1OThiXHU1OThjXHU1''@;'; put 'put ''OThlXHU1OTkyXHU1OTk1XHU1OTk3XHU1OTlmXHU1OWE0XHU1OWE3XHU1OWFkXHU1OWFlXHU1OWFmXHU1OWIwXHU1OWIzXHU1OWI3XHU1OWJhXHU1OWJjXHU1OWMxXHU1OWMzXHU1OWM0XHU1OWM4XHU1OWNhXHU1OWNkXHU1OWQyXHU1OWRkXHU1OWRlXHU1OWRmXHU1OWUzXHU1OWU0XHU1OWU3''@;'; put 'put ''XHU1OWVlXHU1OWVmXHU1OWYxXHU1OWYyXHU1OWY0XHU1OWY3XHU1YTAwXHU1YTA0XHU1YTBjXHU1YTBkXHU1YTBlXHU1YTEyXHU1YTEzXHU1YTFlXHU1YTIzXHU1YTI0XHU1YTI3XHU1YTI4XHU1YTJhXHU1YTJkXHU1YTMwXHU1YTQ0XHU1YTQ1XHU1YTQ3XHU1YTQ4XHU1YTRjXHU1YTUwXHU1''@;'; put 'put ''YTU1XHU1YTVlXHU1YTYzXHU1YTY1XHU1YTY3XHU1YTZkXHU1YTc3XHU1YTdhXHU1YTdiXHU1YTdlXHU1YThiXHU1YTkwXHU1YTkzXHU1YTk2XHU1YTk5XHU1YTljXHU1YTllXHU1YTlmXHU1YWEwXHU1YWEyXHU1YWE3XHU1YWFjXHU1YWIxXHU1YWIyXHU1YWIzXHU1YWI1XHU1YWI4XHU1YWJh''@;'; put 'put ''XHU1YWJiXHU1YWJmIl0sWyI4ZmJhYTEiLCJcdTVhYzRcdTVhYzZcdTVhYzhcdTVhY2ZcdTVhZGFcdTVhZGNcdTVhZTBcdTVhZTVcdTVhZWFcdTVhZWVcdTVhZjVcdTVhZjZcdTVhZmRcdTViMDBcdTViMDFcdTViMDhcdTViMTdcdTViMzRcdTViMTlcdTViMWJcdTViMWRcdTViMjFcdTViMjVc''@;'; put 'put ''dTViMmRcdTViMzhcdTViNDFcdTViNGJcdTViNGNcdTViNTJcdTViNTZcdTViNWVcdTViNjhcdTViNmVcdTViNmZcdTViN2NcdTViN2RcdTViN2VcdTViN2ZcdTViODFcdTViODRcdTViODZcdTViOGFcdTViOGVcdTViOTBcdTViOTFcdTViOTNcdTViOTRcdTViOTZcdTViYThcdTViYTlcdTVi''@;'; put 'put ''YWNcdTViYWRcdTViYWZcdTViYjFcdTViYjJcdTViYjdcdTViYmFcdTViYmNcdTViYzBcdTViYzFcdTViY2RcdTViY2ZcdTViZDYiLDQsIlx1NWJlMFx1NWJlZlx1NWJmMVx1NWJmNFx1NWJmZFx1NWMwY1x1NWMxN1x1NWMxZVx1NWMxZlx1NWMyM1x1NWMyNlx1NWMyOVx1NWMyYlx1NWMyY1x1''@;'; put 'put ''NWMyZVx1NWMzMFx1NWMzMlx1NWMzNVx1NWMzNlx1NWM1OVx1NWM1YVx1NWM1Y1x1NWM2Mlx1NWM2M1x1NWM2N1x1NWM2OFx1NWM2OSJdLFsiOGZiYmExIiwiXHU1YzZkXHU1YzcwXHU1Yzc0XHU1Yzc1XHU1YzdhXHU1YzdiXHU1YzdjXHU1YzdkXHU1Yzg3XHU1Yzg4XHU1YzhhXHU1YzhmXHU1''@;'; put 'put ''YzkyXHU1YzlkXHU1YzlmXHU1Y2EwXHU1Y2EyXHU1Y2EzXHU1Y2E2XHU1Y2FhXHU1Y2IyXHU1Y2I0XHU1Y2I1XHU1Y2JhXHU1Y2M5XHU1Y2NiXHU1Y2QyXHU1Y2RkXHU1Y2Q3XHU1Y2VlXHU1Y2YxXHU1Y2YyXHU1Y2Y0XHU1ZDAxXHU1ZDA2XHU1ZDBkXHU1ZDEyXHU1ZDJiXHU1ZDIzXHU1ZDI0''@;'; put 'put ''XHU1ZDI2XHU1ZDI3XHU1ZDMxXHU1ZDM0XHU1ZDM5XHU1ZDNkXHU1ZDNmXHU1ZDQyXHU1ZDQzXHU1ZDQ2XHU1ZDQ4XHU1ZDU1XHU1ZDUxXHU1ZDU5XHU1ZDRhXHU1ZDVmXHU1ZDYwXHU1ZDYxXHU1ZDYyXHU1ZDY0XHU1ZDZhXHU1ZDZkXHU1ZDcwXHU1ZDc5XHU1ZDdhXHU1ZDdlXHU1ZDdmXHU1''@;'; put 'put ''ZDgxXHU1ZDgzXHU1ZDg4XHU1ZDhhXHU1ZDkyXHU1ZDkzXHU1ZDk0XHU1ZDk1XHU1ZDk5XHU1ZDliXHU1ZDlmXHU1ZGEwXHU1ZGE3XHU1ZGFiXHU1ZGIwXHU1ZGI0XHU1ZGI4XHU1ZGI5XHU1ZGMzXHU1ZGM3XHU1ZGNiXHU1ZGQwXHU1ZGNlXHU1ZGQ4XHU1ZGQ5XHU1ZGUwXHU1ZGU0Il0sWyI4''@;'; put 'put ''ZmJjYTEiLCJcdTVkZTlcdTVkZjhcdTVkZjlcdTVlMDBcdTVlMDdcdTVlMGRcdTVlMTJcdTVlMTRcdTVlMTVcdTVlMThcdTVlMWZcdTVlMjBcdTVlMmVcdTVlMjhcdTVlMzJcdTVlMzVcdTVlM2VcdTVlNGJcdTVlNTBcdTVlNDlcdTVlNTFcdTVlNTZcdTVlNThcdTVlNWJcdTVlNWNcdTVlNWVc''@;'; put 'put ''dTVlNjhcdTVlNmEiLDQsIlx1NWU3MFx1NWU4MFx1NWU4Ylx1NWU4ZVx1NWVhMlx1NWVhNFx1NWVhNVx1NWVhOFx1NWVhYVx1NWVhY1x1NWViMVx1NWViM1x1NWViZFx1NWViZVx1NWViZlx1NWVjNlx1NWVjY1x1NWVjYlx1NWVjZVx1NWVkMVx1NWVkMlx1NWVkNFx1NWVkNVx1NWVkY1x1NWVk''@;'; put 'put ''ZVx1NWVlNVx1NWVlYlx1NWYwMlx1NWYwNlx1NWYwN1x1NWYwOFx1NWYwZVx1NWYxOVx1NWYxY1x1NWYxZFx1NWYyMVx1NWYyMlx1NWYyM1x1NWYyNFx1NWYyOFx1NWYyYlx1NWYyY1x1NWYyZVx1NWYzMFx1NWYzNFx1NWYzNlx1NWYzYlx1NWYzZFx1NWYzZlx1NWY0MFx1NWY0NFx1NWY0NVx1''@;'; put 'put ''NWY0N1x1NWY0ZFx1NWY1MFx1NWY1NFx1NWY1OFx1NWY1Ylx1NWY2MFx1NWY2M1x1NWY2NFx1NWY2NyJdLFsiOGZiZGExIiwiXHU1ZjZmXHU1ZjcyXHU1Zjc0XHU1Zjc1XHU1Zjc4XHU1ZjdhXHU1ZjdkXHU1ZjdlXHU1Zjg5XHU1ZjhkXHU1ZjhmXHU1Zjk2XHU1ZjljXHU1ZjlkXHU1ZmEyXHU1''@;'; put 'put ''ZmE3XHU1ZmFiXHU1ZmE0XHU1ZmFjXHU1ZmFmXHU1ZmIwXHU1ZmIxXHU1ZmI4XHU1ZmM0XHU1ZmM3XHU1ZmM4XHU1ZmM5XHU1ZmNiXHU1ZmQwIiw0LCJcdTVmZGVcdTVmZTFcdTVmZTJcdTVmZThcdTVmZTlcdTVmZWFcdTVmZWNcdTVmZWRcdTVmZWVcdTVmZWZcdTVmZjJcdTVmZjNcdTVmZjZc''@;'; put 'put ''dTVmZmFcdTVmZmNcdTYwMDdcdTYwMGFcdTYwMGRcdTYwMTNcdTYwMTRcdTYwMTdcdTYwMThcdTYwMWFcdTYwMWZcdTYwMjRcdTYwMmRcdTYwMzNcdTYwMzVcdTYwNDBcdTYwNDdcdTYwNDhcdTYwNDlcdTYwNGNcdTYwNTFcdTYwNTRcdTYwNTZcdTYwNTdcdTYwNWRcdTYwNjFcdTYwNjdcdTYw''@;'; put 'put ''NzFcdTYwN2VcdTYwN2ZcdTYwODJcdTYwODZcdTYwODhcdTYwOGFcdTYwOGVcdTYwOTFcdTYwOTNcdTYwOTVcdTYwOThcdTYwOWRcdTYwOWVcdTYwYTJcdTYwYTRcdTYwYTVcdTYwYThcdTYwYjBcdTYwYjFcdTYwYjciXSxbIjhmYmVhMSIsIlx1NjBiYlx1NjBiZVx1NjBjMlx1NjBjNFx1NjBj''@;'; put 'put ''OFx1NjBjOVx1NjBjYVx1NjBjYlx1NjBjZVx1NjBjZlx1NjBkNFx1NjBkNVx1NjBkOVx1NjBkYlx1NjBkZFx1NjBkZVx1NjBlMlx1NjBlNVx1NjBmMlx1NjBmNVx1NjBmOFx1NjBmY1x1NjBmZFx1NjEwMlx1NjEwN1x1NjEwYVx1NjEwY1x1NjExMCIsNCwiXHU2MTE2XHU2MTE3XHU2MTE5XHU2''@;'; put 'put ''MTFjXHU2MTFlXHU2MTIyXHU2MTJhXHU2MTJiXHU2MTMwXHU2MTMxXHU2MTM1XHU2MTM2XHU2MTM3XHU2MTM5XHU2MTQxXHU2MTQ1XHU2MTQ2XHU2MTQ5XHU2MTVlXHU2MTYwXHU2MTZjXHU2MTcyXHU2MTc4XHU2MTdiXHU2MTdjXHU2MTdmXHU2MTgwXHU2MTgxXHU2MTgzXHU2MTg0XHU2MThi''@;'; put 'put ''XHU2MThkXHU2MTkyXHU2MTkzXHU2MTk3XHU2MTk4XHU2MTljXHU2MTlkXHU2MTlmXHU2MWEwXHU2MWE1XHU2MWE4XHU2MWFhXHU2MWFkXHU2MWI4XHU2MWI5XHU2MWJjXHU2MWMwXHU2MWMxXHU2MWMyXHU2MWNlXHU2MWNmXHU2MWQ1XHU2MWRjXHU2MWRkXHU2MWRlXHU2MWRmXHU2MWUxXHU2''@;'; put 'put ''MWUyXHU2MWU3XHU2MWU5XHU2MWU1Il0sWyI4ZmJmYTEiLCJcdTYxZWNcdTYxZWRcdTYxZWZcdTYyMDFcdTYyMDNcdTYyMDRcdTYyMDdcdTYyMTNcdTYyMTVcdTYyMWNcdTYyMjBcdTYyMjJcdTYyMjNcdTYyMjdcdTYyMjlcdTYyMmJcdTYyMzlcdTYyM2RcdTYyNDJcdTYyNDNcdTYyNDRcdTYy''@;'; put 'put ''NDZcdTYyNGNcdTYyNTBcdTYyNTFcdTYyNTJcdTYyNTRcdTYyNTZcdTYyNWFcdTYyNWNcdTYyNjRcdTYyNmRcdTYyNmZcdTYyNzNcdTYyN2FcdTYyN2RcdTYyOGRcdTYyOGVcdTYyOGZcdTYyOTBcdTYyYTZcdTYyYThcdTYyYjNcdTYyYjZcdTYyYjdcdTYyYmFcdTYyYmVcdTYyYmZcdTYyYzRc''@;'; put 'put ''dTYyY2VcdTYyZDVcdTYyZDZcdTYyZGFcdTYyZWFcdTYyZjJcdTYyZjRcdTYyZmNcdTYyZmRcdTYzMDNcdTYzMDRcdTYzMGFcdTYzMGJcdTYzMGRcdTYzMTBcdTYzMTNcdTYzMTZcdTYzMThcdTYzMjlcdTYzMmFcdTYzMmRcdTYzMzVcdTYzMzZcdTYzMzlcdTYzM2NcdTYzNDFcdTYzNDJcdTYz''@;'; put 'put ''NDNcdTYzNDRcdTYzNDZcdTYzNGFcdTYzNGJcdTYzNGVcdTYzNTJcdTYzNTNcdTYzNTRcdTYzNThcdTYzNWJcdTYzNjVcdTYzNjZcdTYzNmNcdTYzNmRcdTYzNzFcdTYzNzRcdTYzNzUiXSxbIjhmYzBhMSIsIlx1NjM3OFx1NjM3Y1x1NjM3ZFx1NjM3Zlx1NjM4Mlx1NjM4NFx1NjM4N1x1NjM4''@;'; put 'put ''YVx1NjM5MFx1NjM5NFx1NjM5NVx1NjM5OVx1NjM5YVx1NjM5ZVx1NjNhNFx1NjNhNlx1NjNhZFx1NjNhZVx1NjNhZlx1NjNiZFx1NjNjMVx1NjNjNVx1NjNjOFx1NjNjZVx1NjNkMVx1NjNkM1x1NjNkNFx1NjNkNVx1NjNkY1x1NjNlMFx1NjNlNVx1NjNlYVx1NjNlY1x1NjNmMlx1NjNmM1x1''@;'; put 'put ''NjNmNVx1NjNmOFx1NjNmOVx1NjQwOVx1NjQwYVx1NjQxMFx1NjQxMlx1NjQxNFx1NjQxOFx1NjQxZVx1NjQyMFx1NjQyMlx1NjQyNFx1NjQyNVx1NjQyOVx1NjQyYVx1NjQyZlx1NjQzMFx1NjQzNVx1NjQzZFx1NjQzZlx1NjQ0Ylx1NjQ0Zlx1NjQ1MVx1NjQ1Mlx1NjQ1M1x1NjQ1NFx1NjQ1''@;'; put 'put ''YVx1NjQ1Ylx1NjQ1Y1x1NjQ1ZFx1NjQ1Zlx1NjQ2MFx1NjQ2MVx1NjQ2M1x1NjQ2ZFx1NjQ3M1x1NjQ3NFx1NjQ3Ylx1NjQ3ZFx1NjQ4NVx1NjQ4N1x1NjQ4Zlx1NjQ5MFx1NjQ5MVx1NjQ5OFx1NjQ5OVx1NjQ5Ylx1NjQ5ZFx1NjQ5Zlx1NjRhMVx1NjRhM1x1NjRhNlx1NjRhOFx1NjRhY1x1''@;'; put 'put ''NjRiM1x1NjRiZFx1NjRiZVx1NjRiZiJdLFsiOGZjMWExIiwiXHU2NGM0XHU2NGM5XHU2NGNhXHU2NGNiXHU2NGNjXHU2NGNlXHU2NGQwXHU2NGQxXHU2NGQ1XHU2NGQ3XHU2NGU0XHU2NGU1XHU2NGU5XHU2NGVhXHU2NGVkXHU2NGYwXHU2NGY1XHU2NGY3XHU2NGZiXHU2NGZmXHU2NTAxXHU2''@;'; put 'put ''NTA0XHU2NTA4XHU2NTA5XHU2NTBhXHU2NTBmXHU2NTEzXHU2NTE0XHU2NTE2XHU2NTE5XHU2NTFiXHU2NTFlXHU2NTFmXHU2NTIyXHU2NTI2XHU2NTI5XHU2NTJlXHU2NTMxXHU2NTNhXHU2NTNjXHU2NTNkXHU2NTQzXHU2NTQ3XHU2NTQ5XHU2NTUwXHU2NTUyXHU2NTU0XHU2NTVmXHU2NTYw''@;'; put 'put ''XHU2NTY3XHU2NTZiXHU2NTdhXHU2NTdkXHU2NTgxXHU2NTg1XHU2NThhXHU2NTkyXHU2NTk1XHU2NTk4XHU2NTlkXHU2NWEwXHU2NWEzXHU2NWE2XHU2NWFlXHU2NWIyXHU2NWIzXHU2NWI0XHU2NWJmXHU2NWMyXHU2NWM4XHU2NWM5XHU2NWNlXHU2NWQwXHU2NWQ0XHU2NWQ2XHU2NWQ4XHU2''@;'; put 'put ''NWRmXHU2NWYwXHU2NWYyXHU2NWY0XHU2NWY1XHU2NWY5XHU2NWZlXHU2NWZmXHU2NjAwXHU2NjA0XHU2NjA4XHU2NjA5XHU2NjBkXHU2NjExXHU2NjEyXHU2NjE1XHU2NjE2XHU2NjFkIl0sWyI4ZmMyYTEiLCJcdTY2MWVcdTY2MjFcdTY2MjJcdTY2MjNcdTY2MjRcdTY2MjZcdTY2MjlcdTY2''@;'; put 'put ''MmFcdTY2MmJcdTY2MmNcdTY2MmVcdTY2MzBcdTY2MzFcdTY2MzNcdTY2MzlcdTY2MzdcdTY2NDBcdTY2NDVcdTY2NDZcdTY2NGFcdTY2NGNcdTY2NTFcdTY2NGVcdTY2NTdcdTY2NThcdTY2NTlcdTY2NWJcdTY2NWNcdTY2NjBcdTY2NjFcdTY2ZmJcdTY2NmFcdTY2NmJcdTY2NmNcdTY2N2Vc''@;'; put 'put ''dTY2NzNcdTY2NzVcdTY2N2ZcdTY2NzdcdTY2NzhcdTY2NzlcdTY2N2JcdTY2ODBcdTY2N2NcdTY2OGJcdTY2OGNcdTY2OGRcdTY2OTBcdTY2OTJcdTY2OTlcdTY2OWFcdTY2OWJcdTY2OWNcdTY2OWZcdTY2YTBcdTY2YTRcdTY2YWRcdTY2YjFcdTY2YjJcdTY2YjVcdTY2YmJcdTY2YmZcdTY2''@;'; put 'put ''YzBcdTY2YzJcdTY2YzNcdTY2YzhcdTY2Y2NcdTY2Y2VcdTY2Y2ZcdTY2ZDRcdTY2ZGJcdTY2ZGZcdTY2ZThcdTY2ZWJcdTY2ZWNcdTY2ZWVcdTY2ZmFcdTY3MDVcdTY3MDdcdTY3MGVcdTY3MTNcdTY3MTlcdTY3MWNcdTY3MjBcdTY3MjJcdTY3MzNcdTY3M2VcdTY3NDVcdTY3NDdcdTY3NDhc''@;'; put 'put ''dTY3NGNcdTY3NTRcdTY3NTVcdTY3NWQiXSxbIjhmYzNhMSIsIlx1Njc2Nlx1Njc2Y1x1Njc2ZVx1Njc3NFx1Njc3Nlx1Njc3Ylx1Njc4MVx1Njc4NFx1Njc4ZVx1Njc4Zlx1Njc5MVx1Njc5M1x1Njc5Nlx1Njc5OFx1Njc5OVx1Njc5Ylx1NjdiMFx1NjdiMVx1NjdiMlx1NjdiNVx1NjdiYlx1''@;'; put 'put ''NjdiY1x1NjdiZFx1NjdmOVx1NjdjMFx1NjdjMlx1NjdjM1x1NjdjNVx1NjdjOFx1NjdjOVx1NjdkMlx1NjdkN1x1NjdkOVx1NjdkY1x1NjdlMVx1NjdlNlx1NjdmMFx1NjdmMlx1NjdmNlx1NjdmN1x1Njg1Mlx1NjgxNFx1NjgxOVx1NjgxZFx1NjgxZlx1NjgyOFx1NjgyN1x1NjgyY1x1Njgy''@;'; put 'put ''ZFx1NjgyZlx1NjgzMFx1NjgzMVx1NjgzM1x1NjgzYlx1NjgzZlx1Njg0NFx1Njg0NVx1Njg0YVx1Njg0Y1x1Njg1NVx1Njg1N1x1Njg1OFx1Njg1Ylx1Njg2Ylx1Njg2ZSIsNCwiXHU2ODc1XHU2ODc5XHU2ODdhXHU2ODdiXHU2ODdjXHU2ODgyXHU2ODg0XHU2ODg2XHU2ODg4XHU2ODk2XHU2''@;'; put 'put ''ODk4XHU2ODlhXHU2ODljXHU2OGExXHU2OGEzXHU2OGE1XHU2OGE5XHU2OGFhXHU2OGFlXHU2OGIyXHU2OGJiXHU2OGM1XHU2OGM4XHU2OGNjXHU2OGNmIl0sWyI4ZmM0YTEiLCJcdTY4ZDBcdTY4ZDFcdTY4ZDNcdTY4ZDZcdTY4ZDlcdTY4ZGNcdTY4ZGRcdTY4ZTVcdTY4ZThcdTY4ZWFcdTY4''@;'; put 'put ''ZWJcdTY4ZWNcdTY4ZWRcdTY4ZjBcdTY4ZjFcdTY4ZjVcdTY4ZjZcdTY4ZmJcdTY4ZmNcdTY4ZmRcdTY5MDZcdTY5MDlcdTY5MGFcdTY5MTBcdTY5MTFcdTY5MTNcdTY5MTZcdTY5MTdcdTY5MzFcdTY5MzNcdTY5MzVcdTY5MzhcdTY5M2JcdTY5NDJcdTY5NDVcdTY5NDlcdTY5NGVcdTY5NTdc''@;'; put 'put ''dTY5NWJcdTY5NjNcdTY5NjRcdTY5NjVcdTY5NjZcdTY5NjhcdTY5NjlcdTY5NmNcdTY5NzBcdTY5NzFcdTY5NzJcdTY5N2FcdTY5N2JcdTY5N2ZcdTY5ODBcdTY5OGRcdTY5OTJcdTY5OTZcdTY5OThcdTY5YTFcdTY5YTVcdTY5YTZcdTY5YThcdTY5YWJcdTY5YWRcdTY5YWZcdTY5YjdcdTY5''@;'; put 'put ''YjhcdTY5YmFcdTY5YmNcdTY5YzVcdTY5YzhcdTY5ZDFcdTY5ZDZcdTY5ZDdcdTY5ZTJcdTY5ZTVcdTY5ZWVcdTY5ZWZcdTY5ZjFcdTY5ZjNcdTY5ZjVcdTY5ZmVcdTZhMDBcdTZhMDFcdTZhMDNcdTZhMGZcdTZhMTFcdTZhMTVcdTZhMWFcdTZhMWRcdTZhMjBcdTZhMjRcdTZhMjhcdTZhMzBc''@;'; put 'put ''dTZhMzIiXSxbIjhmYzVhMSIsIlx1NmEzNFx1NmEzN1x1NmEzYlx1NmEzZVx1NmEzZlx1NmE0NVx1NmE0Nlx1NmE0OVx1NmE0YVx1NmE0ZVx1NmE1MFx1NmE1MVx1NmE1Mlx1NmE1NVx1NmE1Nlx1NmE1Ylx1NmE2NFx1NmE2N1x1NmE2YVx1NmE3MVx1NmE3M1x1NmE3ZVx1NmE4MVx1NmE4M1x1''@;'; put 'put ''NmE4Nlx1NmE4N1x1NmE4OVx1NmE4Ylx1NmE5MVx1NmE5Ylx1NmE5ZFx1NmE5ZVx1NmE5Zlx1NmFhNVx1NmFhYlx1NmFhZlx1NmFiMFx1NmFiMVx1NmFiNFx1NmFiZFx1NmFiZVx1NmFiZlx1NmFjNlx1NmFjOVx1NmFjOFx1NmFjY1x1NmFkMFx1NmFkNFx1NmFkNVx1NmFkNlx1NmFkY1x1NmFk''@;'; put 'put ''ZFx1NmFlNFx1NmFlN1x1NmFlY1x1NmFmMFx1NmFmMVx1NmFmMlx1NmFmY1x1NmFmZFx1NmIwMlx1NmIwM1x1NmIwNlx1NmIwN1x1NmIwOVx1NmIwZlx1NmIxMFx1NmIxMVx1NmIxN1x1NmIxYlx1NmIxZVx1NmIyNFx1NmIyOFx1NmIyYlx1NmIyY1x1NmIyZlx1NmIzNVx1NmIzNlx1NmIzYlx1''@;'; put 'put ''NmIzZlx1NmI0Nlx1NmI0YVx1NmI0ZFx1NmI1Mlx1NmI1Nlx1NmI1OFx1NmI1ZFx1NmI2MFx1NmI2N1x1NmI2Ylx1NmI2ZVx1NmI3MFx1NmI3NVx1NmI3ZCJdLFsiOGZjNmExIiwiXHU2YjdlXHU2YjgyXHU2Yjg1XHU2Yjk3XHU2YjliXHU2YjlmXHU2YmEwXHU2YmEyXHU2YmEzXHU2YmE4XHU2''@;'; put 'put ''YmE5XHU2YmFjXHU2YmFkXHU2YmFlXHU2YmIwXHU2YmI4XHU2YmI5XHU2YmJkXHU2YmJlXHU2YmMzXHU2YmM0XHU2YmM5XHU2YmNjXHU2YmQ2XHU2YmRhXHU2YmUxXHU2YmUzXHU2YmU2XHU2YmU3XHU2YmVlXHU2YmYxXHU2YmY3XHU2YmY5XHU2YmZmXHU2YzAyXHU2YzA0XHU2YzA1XHU2YzA5''@;'; put 'put ''XHU2YzBkXHU2YzBlXHU2YzEwXHU2YzEyXHU2YzE5XHU2YzFmXHU2YzI2XHU2YzI3XHU2YzI4XHU2YzJjXHU2YzJlXHU2YzMzXHU2YzM1XHU2YzM2XHU2YzNhXHU2YzNiXHU2YzNmXHU2YzRhXHU2YzRiXHU2YzRkXHU2YzRmXHU2YzUyXHU2YzU0XHU2YzU5XHU2YzViXHU2YzVjXHU2YzZiXHU2''@;'; put 'put ''YzZkXHU2YzZmXHU2Yzc0XHU2Yzc2XHU2Yzc4XHU2Yzc5XHU2YzdiXHU2Yzg1XHU2Yzg2XHU2Yzg3XHU2Yzg5XHU2Yzk0XHU2Yzk1XHU2Yzk3XHU2Yzk4XHU2YzljXHU2YzlmXHU2Y2IwXHU2Y2IyXHU2Y2I0XHU2Y2MyXHU2Y2M2XHU2Y2NkXHU2Y2NmXHU2Y2QwXHU2Y2QxXHU2Y2QyXHU2Y2Q0''@;'; put 'put ''XHU2Y2Q2Il0sWyI4ZmM3YTEiLCJcdTZjZGFcdTZjZGNcdTZjZTBcdTZjZTdcdTZjZTlcdTZjZWJcdTZjZWNcdTZjZWVcdTZjZjJcdTZjZjRcdTZkMDRcdTZkMDdcdTZkMGFcdTZkMGVcdTZkMGZcdTZkMTFcdTZkMTNcdTZkMWFcdTZkMjZcdTZkMjdcdTZkMjhcdTZjNjdcdTZkMmVcdTZkMmZc''@;'; put 'put ''dTZkMzFcdTZkMzlcdTZkM2NcdTZkM2ZcdTZkNTdcdTZkNWVcdTZkNWZcdTZkNjFcdTZkNjVcdTZkNjdcdTZkNmZcdTZkNzBcdTZkN2NcdTZkODJcdTZkODdcdTZkOTFcdTZkOTJcdTZkOTRcdTZkOTZcdTZkOTdcdTZkOThcdTZkYWFcdTZkYWNcdTZkYjRcdTZkYjdcdTZkYjlcdTZkYmRcdTZk''@;'; put 'put ''YmZcdTZkYzRcdTZkYzhcdTZkY2FcdTZkY2VcdTZkY2ZcdTZkZDZcdTZkZGJcdTZkZGRcdTZkZGZcdTZkZTBcdTZkZTJcdTZkZTVcdTZkZTlcdTZkZWZcdTZkZjBcdTZkZjRcdTZkZjZcdTZkZmNcdTZlMDBcdTZlMDRcdTZlMWVcdTZlMjJcdTZlMjdcdTZlMzJcdTZlMzZcdTZlMzlcdTZlM2Jc''@;'; put 'put ''dTZlM2NcdTZlNDRcdTZlNDVcdTZlNDhcdTZlNDlcdTZlNGJcdTZlNGZcdTZlNTFcdTZlNTJcdTZlNTNcdTZlNTRcdTZlNTdcdTZlNWNcdTZlNWRcdTZlNWUiXSxbIjhmYzhhMSIsIlx1NmU2Mlx1NmU2M1x1NmU2OFx1NmU3M1x1NmU3Ylx1NmU3ZFx1NmU4ZFx1NmU5M1x1NmU5OVx1NmVhMFx1''@;'; put 'put ''NmVhN1x1NmVhZFx1NmVhZVx1NmViMVx1NmViM1x1NmViYlx1NmViZlx1NmVjMFx1NmVjMVx1NmVjM1x1NmVjN1x1NmVjOFx1NmVjYVx1NmVjZFx1NmVjZVx1NmVjZlx1NmVlYlx1NmVlZFx1NmVlZVx1NmVmOVx1NmVmYlx1NmVmZFx1NmYwNFx1NmYwOFx1NmYwYVx1NmYwY1x1NmYwZFx1NmYx''@;'; put 'put ''Nlx1NmYxOFx1NmYxYVx1NmYxYlx1NmYyNlx1NmYyOVx1NmYyYVx1NmYyZlx1NmYzMFx1NmYzM1x1NmYzNlx1NmYzYlx1NmYzY1x1NmYyZFx1NmY0Zlx1NmY1MVx1NmY1Mlx1NmY1M1x1NmY1N1x1NmY1OVx1NmY1YVx1NmY1ZFx1NmY1ZVx1NmY2MVx1NmY2Mlx1NmY2OFx1NmY2Y1x1NmY3ZFx1''@;'; put 'put ''NmY3ZVx1NmY4M1x1NmY4N1x1NmY4OFx1NmY4Ylx1NmY4Y1x1NmY4ZFx1NmY5MFx1NmY5Mlx1NmY5M1x1NmY5NFx1NmY5Nlx1NmY5YVx1NmY5Zlx1NmZhMFx1NmZhNVx1NmZhNlx1NmZhN1x1NmZhOFx1NmZhZVx1NmZhZlx1NmZiMFx1NmZiNVx1NmZiNlx1NmZiY1x1NmZjNVx1NmZjN1x1NmZj''@;'; put 'put ''OFx1NmZjYSJdLFsiOGZjOWExIiwiXHU2ZmRhXHU2ZmRlXHU2ZmU4XHU2ZmU5XHU2ZmYwXHU2ZmY1XHU2ZmY5XHU2ZmZjXHU2ZmZkXHU3MDAwXHU3MDA1XHU3MDA2XHU3MDA3XHU3MDBkXHU3MDE3XHU3MDIwXHU3MDIzXHU3MDJmXHU3MDM0XHU3MDM3XHU3MDM5XHU3MDNjXHU3MDQzXHU3MDQ0''@;'; put 'put ''XHU3MDQ4XHU3MDQ5XHU3MDRhXHU3MDRiXHU3MDU0XHU3MDU1XHU3MDVkXHU3MDVlXHU3MDRlXHU3MDY0XHU3MDY1XHU3MDZjXHU3MDZlXHU3MDc1XHU3MDc2XHU3MDdlXHU3MDgxXHU3MDg1XHU3MDg2XHU3MDk0Iiw0LCJcdTcwOWJcdTcwYTRcdTcwYWJcdTcwYjBcdTcwYjFcdTcwYjRcdTcw''@;'; put 'put ''YjdcdTcwY2FcdTcwZDFcdTcwZDNcdTcwZDRcdTcwZDVcdTcwZDZcdTcwZDhcdTcwZGNcdTcwZTRcdTcwZmFcdTcxMDMiLDQsIlx1NzEwYlx1NzEwY1x1NzEwZlx1NzExZVx1NzEyMFx1NzEyYlx1NzEyZFx1NzEyZlx1NzEzMFx1NzEzMVx1NzEzOFx1NzE0MVx1NzE0NVx1NzE0Nlx1NzE0N1x1''@;'; put 'put ''NzE0YVx1NzE0Ylx1NzE1MFx1NzE1Mlx1NzE1N1x1NzE1YVx1NzE1Y1x1NzE1ZVx1NzE2MCJdLFsiOGZjYWExIiwiXHU3MTY4XHU3MTc5XHU3MTgwXHU3MTg1XHU3MTg3XHU3MThjXHU3MTkyXHU3MTlhXHU3MTliXHU3MWEwXHU3MWEyXHU3MWFmXHU3MWIwXHU3MWIyXHU3MWIzXHU3MWJhXHU3''@;'; put 'put ''MWJmXHU3MWMwXHU3MWMxXHU3MWM0XHU3MWNiXHU3MWNjXHU3MWQzXHU3MWQ2XHU3MWQ5XHU3MWRhXHU3MWRjXHU3MWY4XHU3MWZlXHU3MjAwXHU3MjA3XHU3MjA4XHU3MjA5XHU3MjEzXHU3MjE3XHU3MjFhXHU3MjFkXHU3MjFmXHU3MjI0XHU3MjJiXHU3MjJmXHU3MjM0XHU3MjM4XHU3MjM5''@;'; put 'put ''XHU3MjQxXHU3MjQyXHU3MjQzXHU3MjQ1XHU3MjRlXHU3MjRmXHU3MjUwXHU3MjUzXHU3MjU1XHU3MjU2XHU3MjVhXHU3MjVjXHU3MjVlXHU3MjYwXHU3MjYzXHU3MjY4XHU3MjZiXHU3MjZlXHU3MjZmXHU3MjcxXHU3Mjc3XHU3Mjc4XHU3MjdiXHU3MjdjXHU3MjdmXHU3Mjg0XHU3Mjg5XHU3''@;'; put 'put ''MjhkXHU3MjhlXHU3MjkzXHU3MjliXHU3MmE4XHU3MmFkXHU3MmFlXHU3MmIxXHU3MmI0XHU3MmJlXHU3MmMxXHU3MmM3XHU3MmM5XHU3MmNjXHU3MmQ1XHU3MmQ2XHU3MmQ4XHU3MmRmXHU3MmU1XHU3MmYzXHU3MmY0XHU3MmZhXHU3MmZiIl0sWyI4ZmNiYTEiLCJcdTcyZmVcdTczMDJcdTcz''@;'; put 'put ''MDRcdTczMDVcdTczMDdcdTczMGJcdTczMGRcdTczMTJcdTczMTNcdTczMThcdTczMTlcdTczMWVcdTczMjJcdTczMjRcdTczMjdcdTczMjhcdTczMmNcdTczMzFcdTczMzJcdTczMzVcdTczM2FcdTczM2JcdTczM2RcdTczNDNcdTczNGRcdTczNTBcdTczNTJcdTczNTZcdTczNThcdTczNWRc''@;'; put 'put ''dTczNWVcdTczNWZcdTczNjBcdTczNjZcdTczNjdcdTczNjlcdTczNmJcdTczNmNcdTczNmVcdTczNmZcdTczNzFcdTczNzdcdTczNzlcdTczN2NcdTczODBcdTczODFcdTczODNcdTczODVcdTczODZcdTczOGVcdTczOTBcdTczOTNcdTczOTVcdTczOTdcdTczOThcdTczOWNcdTczOWVcdTcz''@;'; put 'put ''OWZcdTczYTBcdTczYTJcdTczYTVcdTczYTZcdTczYWFcdTczYWJcdTczYWRcdTczYjVcdTczYjdcdTczYjlcdTczYmNcdTczYmRcdTczYmZcdTczYzVcdTczYzZcdTczYzlcdTczY2JcdTczY2NcdTczY2ZcdTczZDJcdTczZDNcdTczZDZcdTczZDlcdTczZGRcdTczZTFcdTczZTNcdTczZTZc''@;'; put 'put ''dTczZTdcdTczZTlcdTczZjRcdTczZjVcdTczZjdcdTczZjlcdTczZmFcdTczZmJcdTczZmQiXSxbIjhmY2NhMSIsIlx1NzNmZlx1NzQwMFx1NzQwMVx1NzQwNFx1NzQwN1x1NzQwYVx1NzQxMVx1NzQxYVx1NzQxYlx1NzQyNFx1NzQyNlx1NzQyOCIsOSwiXHU3NDM5XHU3NDQwXHU3NDQzXHU3''@;'; put 'put ''NDQ0XHU3NDQ2XHU3NDQ3XHU3NDRiXHU3NDRkXHU3NDUxXHU3NDUyXHU3NDU3XHU3NDVkXHU3NDYyXHU3NDY2XHU3NDY3XHU3NDY4XHU3NDZiXHU3NDZkXHU3NDZlXHU3NDcxXHU3NDcyXHU3NDgwXHU3NDgxXHU3NDg1XHU3NDg2XHU3NDg3XHU3NDg5XHU3NDhmXHU3NDkwXHU3NDkxXHU3NDky''@;'; put 'put ''XHU3NDk4XHU3NDk5XHU3NDlhXHU3NDljXHU3NDlmXHU3NGEwXHU3NGExXHU3NGEzXHU3NGE2XHU3NGE4XHU3NGE5XHU3NGFhXHU3NGFiXHU3NGFlXHU3NGFmXHU3NGIxXHU3NGIyXHU3NGI1XHU3NGI5XHU3NGJiXHU3NGJmXHU3NGM4XHU3NGM5XHU3NGNjXHU3NGQwXHU3NGQzXHU3NGQ4XHU3''@;'; put 'put ''NGRhXHU3NGRiXHU3NGRlXHU3NGRmXHU3NGU0XHU3NGU4XHU3NGVhXHU3NGViXHU3NGVmXHU3NGY0XHU3NGZhXHU3NGZiXHU3NGZjXHU3NGZmXHU3NTA2Il0sWyI4ZmNkYTEiLCJcdTc1MTJcdTc1MTZcdTc1MTdcdTc1MjBcdTc1MjFcdTc1MjRcdTc1MjdcdTc1MjlcdTc1MmFcdTc1MmZcdTc1''@;'; put 'put ''MzZcdTc1MzlcdTc1M2RcdTc1M2VcdTc1M2ZcdTc1NDBcdTc1NDNcdTc1NDdcdTc1NDhcdTc1NGVcdTc1NTBcdTc1NTJcdTc1NTdcdTc1NWVcdTc1NWZcdTc1NjFcdTc1NmZcdTc1NzFcdTc1NzkiLDUsIlx1NzU4MVx1NzU4NVx1NzU5MFx1NzU5Mlx1NzU5M1x1NzU5NVx1NzU5OVx1NzU5Y1x1''@;'; put 'put ''NzVhMlx1NzVhNFx1NzViNFx1NzViYVx1NzViZlx1NzVjMFx1NzVjMVx1NzVjNFx1NzVjNlx1NzVjY1x1NzVjZVx1NzVjZlx1NzVkN1x1NzVkY1x1NzVkZlx1NzVlMFx1NzVlMVx1NzVlNFx1NzVlN1x1NzVlY1x1NzVlZVx1NzVlZlx1NzVmMVx1NzVmOVx1NzYwMFx1NzYwMlx1NzYwM1x1NzYw''@;'; put 'put ''NFx1NzYwN1x1NzYwOFx1NzYwYVx1NzYwY1x1NzYwZlx1NzYxMlx1NzYxM1x1NzYxNVx1NzYxNlx1NzYxOVx1NzYxYlx1NzYxY1x1NzYxZFx1NzYxZVx1NzYyM1x1NzYyNVx1NzYyNlx1NzYyOVx1NzYyZFx1NzYzMlx1NzYzM1x1NzYzNVx1NzYzOFx1NzYzOSJdLFsiOGZjZWExIiwiXHU3NjNh''@;'; put 'put ''XHU3NjNjXHU3NjRhXHU3NjQwXHU3NjQxXHU3NjQzXHU3NjQ0XHU3NjQ1XHU3NjQ5XHU3NjRiXHU3NjU1XHU3NjU5XHU3NjVmXHU3NjY0XHU3NjY1XHU3NjZkXHU3NjZlXHU3NjZmXHU3NjcxXHU3Njc0XHU3NjgxXHU3Njg1XHU3NjhjXHU3NjhkXHU3Njk1XHU3NjliXHU3NjljXHU3NjlkXHU3''@;'; put 'put ''NjlmXHU3NmEwXHU3NmEyIiw2LCJcdTc2YWFcdTc2YWRcdTc2YmRcdTc2YzFcdTc2YzVcdTc2YzlcdTc2Y2JcdTc2Y2NcdTc2Y2VcdTc2ZDRcdTc2ZDlcdTc2ZTBcdTc2ZTZcdTc2ZThcdTc2ZWNcdTc2ZjBcdTc2ZjFcdTc2ZjZcdTc2ZjlcdTc2ZmNcdTc3MDBcdTc3MDZcdTc3MGFcdTc3MGVc''@;'; put 'put ''dTc3MTJcdTc3MTRcdTc3MTVcdTc3MTdcdTc3MTlcdTc3MWFcdTc3MWNcdTc3MjJcdTc3MjhcdTc3MmRcdTc3MmVcdTc3MmZcdTc3MzRcdTc3MzVcdTc3MzZcdTc3MzlcdTc3M2RcdTc3M2VcdTc3NDJcdTc3NDVcdTc3NDZcdTc3NGFcdTc3NGRcdTc3NGVcdTc3NGZcdTc3NTJcdTc3NTZcdTc3''@;'; put 'put ''NTdcdTc3NWNcdTc3NWVcdTc3NWZcdTc3NjBcdTc3NjIiXSxbIjhmY2ZhMSIsIlx1Nzc2NFx1Nzc2N1x1Nzc2YVx1Nzc2Y1x1Nzc3MFx1Nzc3Mlx1Nzc3M1x1Nzc3NFx1Nzc3YVx1Nzc3ZFx1Nzc4MFx1Nzc4NFx1Nzc4Y1x1Nzc4ZFx1Nzc5NFx1Nzc5NVx1Nzc5Nlx1Nzc5YVx1Nzc5Zlx1Nzdh''@;'; put 'put ''Mlx1NzdhN1x1NzdhYVx1NzdhZVx1NzdhZlx1NzdiMVx1NzdiNVx1NzdiZVx1NzdjM1x1NzdjOVx1NzdkMVx1NzdkMlx1NzdkNVx1NzdkOVx1NzdkZVx1NzdkZlx1NzdlMFx1NzdlNFx1NzdlNlx1NzdlYVx1NzdlY1x1NzdmMFx1NzdmMVx1NzdmNFx1NzdmOFx1NzdmYlx1NzgwNVx1NzgwNlx1''@;'; put 'put ''NzgwOVx1NzgwZFx1NzgwZVx1NzgxMVx1NzgxZFx1NzgyMVx1NzgyMlx1NzgyM1x1NzgyZFx1NzgyZVx1NzgzMFx1NzgzNVx1NzgzN1x1Nzg0M1x1Nzg0NFx1Nzg0N1x1Nzg0OFx1Nzg0Y1x1Nzg0ZVx1Nzg1Mlx1Nzg1Y1x1Nzg1ZVx1Nzg2MFx1Nzg2MVx1Nzg2M1x1Nzg2NFx1Nzg2OFx1Nzg2''@;'; put 'put ''YVx1Nzg2ZVx1Nzg3YVx1Nzg3ZVx1Nzg4YVx1Nzg4Zlx1Nzg5NFx1Nzg5OFx1NzhhMVx1Nzg5ZFx1Nzg5ZVx1Nzg5Zlx1NzhhNFx1NzhhOFx1NzhhY1x1NzhhZFx1NzhiMFx1NzhiMVx1NzhiMlx1NzhiMyJdLFsiOGZkMGExIiwiXHU3OGJiXHU3OGJkXHU3OGJmXHU3OGM3XHU3OGM4XHU3OGM5''@;'; put 'put ''XHU3OGNjXHU3OGNlXHU3OGQyXHU3OGQzXHU3OGQ1XHU3OGQ2XHU3OGU0XHU3OGRiXHU3OGRmXHU3OGUwXHU3OGUxXHU3OGU2XHU3OGVhXHU3OGYyXHU3OGYzXHU3OTAwXHU3OGY2XHU3OGY3XHU3OGZhXHU3OGZiXHU3OGZmXHU3OTA2XHU3OTBjXHU3OTEwXHU3OTFhXHU3OTFjXHU3OTFlXHU3''@;'; put 'put ''OTFmXHU3OTIwXHU3OTI1XHU3OTI3XHU3OTI5XHU3OTJkXHU3OTMxXHU3OTM0XHU3OTM1XHU3OTNiXHU3OTNkXHU3OTNmXHU3OTQ0XHU3OTQ1XHU3OTQ2XHU3OTRhXHU3OTRiXHU3OTRmXHU3OTUxXHU3OTU0XHU3OTU4XHU3OTViXHU3OTVjXHU3OTY3XHU3OTY5XHU3OTZiXHU3OTcyXHU3OTc5''@;'; put 'put ''XHU3OTdiXHU3OTdjXHU3OTdlXHU3OThiXHU3OThjXHU3OTkxXHU3OTkzXHU3OTk0XHU3OTk1XHU3OTk2XHU3OTk4XHU3OTliXHU3OTljXHU3OWExXHU3OWE4XHU3OWE5XHU3OWFiXHU3OWFmXHU3OWIxXHU3OWI0XHU3OWI4XHU3OWJiXHU3OWMyXHU3OWM0XHU3OWM3XHU3OWM4XHU3OWNhXHU3''@;'; put 'put ''OWNmXHU3OWQ0XHU3OWQ2XHU3OWRhXHU3OWRkXHU3OWRlIl0sWyI4ZmQxYTEiLCJcdTc5ZTBcdTc5ZTJcdTc5ZTVcdTc5ZWFcdTc5ZWJcdTc5ZWRcdTc5ZjFcdTc5ZjhcdTc5ZmNcdTdhMDJcdTdhMDNcdTdhMDdcdTdhMDlcdTdhMGFcdTdhMGNcdTdhMTFcdTdhMTVcdTdhMWJcdTdhMWVcdTdh''@;'; put 'put ''MjFcdTdhMjdcdTdhMmJcdTdhMmRcdTdhMmZcdTdhMzBcdTdhMzRcdTdhMzVcdTdhMzhcdTdhMzlcdTdhM2FcdTdhNDRcdTdhNDVcdTdhNDdcdTdhNDhcdTdhNGNcdTdhNTVcdTdhNTZcdTdhNTlcdTdhNWNcdTdhNWRcdTdhNWZcdTdhNjBcdTdhNjVcdTdhNjdcdTdhNmFcdTdhNmRcdTdhNzVc''@;'; put 'put ''dTdhNzhcdTdhN2VcdTdhODBcdTdhODJcdTdhODVcdTdhODZcdTdhOGFcdTdhOGJcdTdhOTBcdTdhOTFcdTdhOTRcdTdhOWVcdTdhYTBcdTdhYTNcdTdhYWNcdTdhYjNcdTdhYjVcdTdhYjlcdTdhYmJcdTdhYmNcdTdhYzZcdTdhYzlcdTdhY2NcdTdhY2VcdTdhZDFcdTdhZGJcdTdhZThcdTdh''@;'; put 'put ''ZTlcdTdhZWJcdTdhZWNcdTdhZjFcdTdhZjRcdTdhZmJcdTdhZmRcdTdhZmVcdTdiMDdcdTdiMTRcdTdiMWZcdTdiMjNcdTdiMjdcdTdiMjlcdTdiMmFcdTdiMmJcdTdiMmRcdTdiMmVcdTdiMmZcdTdiMzAiXSxbIjhmZDJhMSIsIlx1N2IzMVx1N2IzNFx1N2IzZFx1N2IzZlx1N2I0MFx1N2I0''@;'; put 'put ''MVx1N2I0N1x1N2I0ZVx1N2I1NVx1N2I2MFx1N2I2NFx1N2I2Nlx1N2I2OVx1N2I2YVx1N2I2ZFx1N2I2Zlx1N2I3Mlx1N2I3M1x1N2I3N1x1N2I4NFx1N2I4OVx1N2I4ZVx1N2I5MFx1N2I5MVx1N2I5Nlx1N2I5Ylx1N2I5ZVx1N2JhMFx1N2JhNVx1N2JhY1x1N2JhZlx1N2JiMFx1N2JiMlx1''@;'; put 'put ''N2JiNVx1N2JiNlx1N2JiYVx1N2JiYlx1N2JiY1x1N2JiZFx1N2JjMlx1N2JjNVx1N2JjOFx1N2JjYVx1N2JkNFx1N2JkNlx1N2JkN1x1N2JkOVx1N2JkYVx1N2JkYlx1N2JlOFx1N2JlYVx1N2JmMlx1N2JmNFx1N2JmNVx1N2JmOFx1N2JmOVx1N2JmYVx1N2JmY1x1N2JmZVx1N2MwMVx1N2Mw''@;'; put 'put ''Mlx1N2MwM1x1N2MwNFx1N2MwNlx1N2MwOVx1N2MwYlx1N2MwY1x1N2MwZVx1N2MwZlx1N2MxOVx1N2MxYlx1N2MyMFx1N2MyNVx1N2MyNlx1N2MyOFx1N2MyY1x1N2MzMVx1N2MzM1x1N2MzNFx1N2MzNlx1N2MzOVx1N2MzYVx1N2M0Nlx1N2M0YVx1N2M1NVx1N2M1MVx1N2M1Mlx1N2M1M1x1''@;'; put 'put ''N2M1OSIsNV0sWyI4ZmQzYTEiLCJcdTdjNjFcdTdjNjNcdTdjNjdcdTdjNjlcdTdjNmRcdTdjNmVcdTdjNzBcdTdjNzJcdTdjNzlcdTdjN2NcdTdjN2RcdTdjODZcdTdjODdcdTdjOGZcdTdjOTRcdTdjOWVcdTdjYTBcdTdjYTZcdTdjYjBcdTdjYjZcdTdjYjdcdTdjYmFcdTdjYmJcdTdjYmNc''@;'; put 'put ''dTdjYmZcdTdjYzRcdTdjYzdcdTdjYzhcdTdjYzlcdTdjY2RcdTdjY2ZcdTdjZDNcdTdjZDRcdTdjZDVcdTdjZDdcdTdjZDlcdTdjZGFcdTdjZGRcdTdjZTZcdTdjZTlcdTdjZWJcdTdjZjVcdTdkMDNcdTdkMDdcdTdkMDhcdTdkMDlcdTdkMGZcdTdkMTFcdTdkMTJcdTdkMTNcdTdkMTZcdTdk''@;'; put 'put ''MWRcdTdkMWVcdTdkMjNcdTdkMjZcdTdkMmFcdTdkMmRcdTdkMzFcdTdkM2NcdTdkM2RcdTdkM2VcdTdkNDBcdTdkNDFcdTdkNDdcdTdkNDhcdTdkNGRcdTdkNTFcdTdkNTNcdTdkNTdcdTdkNTlcdTdkNWFcdTdkNWNcdTdkNWRcdTdkNjVcdTdkNjdcdTdkNmFcdTdkNzBcdTdkNzhcdTdkN2Fc''@;'; put 'put ''dTdkN2JcdTdkN2ZcdTdkODFcdTdkODJcdTdkODNcdTdkODVcdTdkODZcdTdkODhcdTdkOGJcdTdkOGNcdTdkOGRcdTdkOTFcdTdkOTZcdTdkOTdcdTdkOWQiXSxbIjhmZDRhMSIsIlx1N2Q5ZVx1N2RhNlx1N2RhN1x1N2RhYVx1N2RiM1x1N2RiNlx1N2RiN1x1N2RiOVx1N2RjMiIsNCwiXHU3''@;'; put 'put ''ZGNjXHU3ZGNkXHU3ZGNlXHU3ZGQ3XHU3ZGQ5XHU3ZTAwXHU3ZGUyXHU3ZGU1XHU3ZGU2XHU3ZGVhXHU3ZGViXHU3ZGVkXHU3ZGYxXHU3ZGY1XHU3ZGY2XHU3ZGY5XHU3ZGZhXHU3ZTA4XHU3ZTEwXHU3ZTExXHU3ZTE1XHU3ZTE3XHU3ZTFjXHU3ZTFkXHU3ZTIwXHU3ZTI3XHU3ZTI4XHU3ZTJj''@;'; put 'put ''XHU3ZTJkXHU3ZTJmXHU3ZTMzXHU3ZTM2XHU3ZTNmXHU3ZTQ0XHU3ZTQ1XHU3ZTQ3XHU3ZTRlXHU3ZTUwXHU3ZTUyXHU3ZTU4XHU3ZTVmXHU3ZTYxXHU3ZTYyXHU3ZTY1XHU3ZTZiXHU3ZTZlXHU3ZTZmXHU3ZTczXHU3ZTc4XHU3ZTdlXHU3ZTgxXHU3ZTg2XHU3ZTg3XHU3ZThhXHU3ZThkXHU3''@;'; put 'put ''ZTkxXHU3ZTk1XHU3ZTk4XHU3ZTlhXHU3ZTlkXHU3ZTllXHU3ZjNjXHU3ZjNiXHU3ZjNkXHU3ZjNlXHU3ZjNmXHU3ZjQzXHU3ZjQ0XHU3ZjQ3XHU3ZjRmXHU3ZjUyXHU3ZjUzXHU3ZjViXHU3ZjVjXHU3ZjVkXHU3ZjYxXHU3ZjYzXHU3ZjY0XHU3ZjY1XHU3ZjY2XHU3ZjZkIl0sWyI4ZmQ1YTEi''@;'; put 'put ''LCJcdTdmNzFcdTdmN2RcdTdmN2VcdTdmN2ZcdTdmODBcdTdmOGJcdTdmOGRcdTdmOGZcdTdmOTBcdTdmOTFcdTdmOTZcdTdmOTdcdTdmOWNcdTdmYTFcdTdmYTJcdTdmYTZcdTdmYWFcdTdmYWRcdTdmYjRcdTdmYmNcdTdmYmZcdTdmYzBcdTdmYzNcdTdmYzhcdTdmY2VcdTdmY2ZcdTdmZGJc''@;'; put 'put ''dTdmZGZcdTdmZTNcdTdmZTVcdTdmZThcdTdmZWNcdTdmZWVcdTdmZWZcdTdmZjJcdTdmZmFcdTdmZmRcdTdmZmVcdTdmZmZcdTgwMDdcdTgwMDhcdTgwMGFcdTgwMGRcdTgwMGVcdTgwMGZcdTgwMTFcdTgwMTNcdTgwMTRcdTgwMTZcdTgwMWRcdTgwMWVcdTgwMWZcdTgwMjBcdTgwMjRcdTgw''@;'; put 'put ''MjZcdTgwMmNcdTgwMmVcdTgwMzBcdTgwMzRcdTgwMzVcdTgwMzdcdTgwMzlcdTgwM2FcdTgwM2NcdTgwM2VcdTgwNDBcdTgwNDRcdTgwNjBcdTgwNjRcdTgwNjZcdTgwNmRcdTgwNzFcdTgwNzVcdTgwODFcdTgwODhcdTgwOGVcdTgwOWNcdTgwOWVcdTgwYTZcdTgwYTdcdTgwYWJcdTgwYjhc''@;'; put 'put ''dTgwYjlcdTgwYzhcdTgwY2RcdTgwY2ZcdTgwZDJcdTgwZDRcdTgwZDVcdTgwZDdcdTgwZDhcdTgwZTBcdTgwZWRcdTgwZWUiXSxbIjhmZDZhMSIsIlx1ODBmMFx1ODBmMlx1ODBmM1x1ODBmNlx1ODBmOVx1ODBmYVx1ODBmZVx1ODEwM1x1ODEwYlx1ODExNlx1ODExN1x1ODExOFx1ODExY1x1''@;'; put 'put ''ODExZVx1ODEyMFx1ODEyNFx1ODEyN1x1ODEyY1x1ODEzMFx1ODEzNVx1ODEzYVx1ODEzY1x1ODE0NVx1ODE0N1x1ODE0YVx1ODE0Y1x1ODE1Mlx1ODE1N1x1ODE2MFx1ODE2MVx1ODE2N1x1ODE2OFx1ODE2OVx1ODE2ZFx1ODE2Zlx1ODE3N1x1ODE4MVx1ODE5MFx1ODE4NFx1ODE4NVx1ODE4''@;'; put 'put ''Nlx1ODE4Ylx1ODE4ZVx1ODE5Nlx1ODE5OFx1ODE5Ylx1ODE5ZVx1ODFhMlx1ODFhZVx1ODFiMlx1ODFiNFx1ODFiYlx1ODFjYlx1ODFjM1x1ODFjNVx1ODFjYVx1ODFjZVx1ODFjZlx1ODFkNVx1ODFkN1x1ODFkYlx1ODFkZFx1ODFkZVx1ODFlMVx1ODFlNFx1ODFlYlx1ODFlY1x1ODFmMFx1''@;'; put 'put ''ODFmMVx1ODFmMlx1ODFmNVx1ODFmNlx1ODFmOFx1ODFmOVx1ODFmZFx1ODFmZlx1ODIwMFx1ODIwM1x1ODIwZlx1ODIxM1x1ODIxNFx1ODIxOVx1ODIxYVx1ODIxZFx1ODIyMVx1ODIyMlx1ODIyOFx1ODIzMlx1ODIzNFx1ODIzYVx1ODI0M1x1ODI0NFx1ODI0NVx1ODI0NiJdLFsiOGZkN2Ex''@;'; put 'put ''IiwiXHU4MjRiXHU4MjRlXHU4MjRmXHU4MjUxXHU4MjU2XHU4MjVjXHU4MjYwXHU4MjYzXHU4MjY3XHU4MjZkXHU4Mjc0XHU4MjdiXHU4MjdkXHU4MjdmXHU4MjgwXHU4MjgxXHU4MjgzXHU4Mjg0XHU4Mjg3XHU4Mjg5XHU4MjhhXHU4MjhlXHU4MjkxXHU4Mjk0XHU4Mjk2XHU4Mjk4XHU4Mjlh''@;'; put 'put ''XHU4MjliXHU4MmEwXHU4MmExXHU4MmEzXHU4MmE0XHU4MmE3XHU4MmE4XHU4MmE5XHU4MmFhXHU4MmFlXHU4MmIwXHU4MmIyXHU4MmI0XHU4MmI3XHU4MmJhXHU4MmJjXHU4MmJlXHU4MmJmXHU4MmM2XHU4MmQwXHU4MmQ1XHU4MmRhXHU4MmUwXHU4MmUyXHU4MmU0XHU4MmU4XHU4MmVhXHU4''@;'; put 'put ''MmVkXHU4MmVmXHU4MmY2XHU4MmY3XHU4MmZkXHU4MmZlXHU4MzAwXHU4MzAxXHU4MzA3XHU4MzA4XHU4MzBhXHU4MzBiXHU4MzU0XHU4MzFiXHU4MzFkXHU4MzFlXHU4MzFmXHU4MzIxXHU4MzIyXHU4MzJjXHU4MzJkXHU4MzJlXHU4MzMwXHU4MzMzXHU4MzM3XHU4MzNhXHU4MzNjXHU4MzNk''@;'; put 'put ''XHU4MzQyXHU4MzQzXHU4MzQ0XHU4MzQ3XHU4MzRkXHU4MzRlXHU4MzUxXHU4MzU1XHU4MzU2XHU4MzU3XHU4MzcwXHU4Mzc4Il0sWyI4ZmQ4YTEiLCJcdTgzN2RcdTgzN2ZcdTgzODBcdTgzODJcdTgzODRcdTgzODZcdTgzOGRcdTgzOTJcdTgzOTRcdTgzOTVcdTgzOThcdTgzOTlcdTgzOWJc''@;'; put 'put ''dTgzOWNcdTgzOWRcdTgzYTZcdTgzYTdcdTgzYTlcdTgzYWNcdTgzYmVcdTgzYmZcdTgzYzBcdTgzYzdcdTgzYzlcdTgzY2ZcdTgzZDBcdTgzZDFcdTgzZDRcdTgzZGRcdTgzNTNcdTgzZThcdTgzZWFcdTgzZjZcdTgzZjhcdTgzZjlcdTgzZmNcdTg0MDFcdTg0MDZcdTg0MGFcdTg0MGZcdTg0''@;'; put 'put ''MTFcdTg0MTVcdTg0MTlcdTgzYWRcdTg0MmZcdTg0MzlcdTg0NDVcdTg0NDdcdTg0NDhcdTg0NGFcdTg0NGRcdTg0NGZcdTg0NTFcdTg0NTJcdTg0NTZcdTg0NThcdTg0NTlcdTg0NWFcdTg0NWNcdTg0NjBcdTg0NjRcdTg0NjVcdTg0NjdcdTg0NmFcdTg0NzBcdTg0NzNcdTg0NzRcdTg0NzZc''@;'; put 'put ''dTg0NzhcdTg0N2NcdTg0N2RcdTg0ODFcdTg0ODVcdTg0OTJcdTg0OTNcdTg0OTVcdTg0OWVcdTg0YTZcdTg0YThcdTg0YTlcdTg0YWFcdTg0YWZcdTg0YjFcdTg0YjRcdTg0YmFcdTg0YmRcdTg0YmVcdTg0YzBcdTg0YzJcdTg0YzdcdTg0YzhcdTg0Y2NcdTg0Y2ZcdTg0ZDMiXSxbIjhmZDlh''@;'; put 'put ''MSIsIlx1ODRkY1x1ODRlN1x1ODRlYVx1ODRlZlx1ODRmMFx1ODRmMVx1ODRmMlx1ODRmN1x1ODUzMlx1ODRmYVx1ODRmYlx1ODRmZFx1ODUwMlx1ODUwM1x1ODUwN1x1ODUwY1x1ODUwZVx1ODUxMFx1ODUxY1x1ODUxZVx1ODUyMlx1ODUyM1x1ODUyNFx1ODUyNVx1ODUyN1x1ODUyYVx1ODUy''@;'; put 'put ''Ylx1ODUyZlx1ODUzM1x1ODUzNFx1ODUzNlx1ODUzZlx1ODU0Nlx1ODU0ZiIsNCwiXHU4NTU2XHU4NTU5XHU4NTVjIiw2LCJcdTg1NjRcdTg1NmJcdTg1NmZcdTg1NzlcdTg1N2FcdTg1N2JcdTg1N2RcdTg1N2ZcdTg1ODFcdTg1ODVcdTg1ODZcdTg1ODlcdTg1OGJcdTg1OGNcdTg1OGZcdTg1''@;'; put 'put ''OTNcdTg1OThcdTg1OWRcdTg1OWZcdTg1YTBcdTg1YTJcdTg1YTVcdTg1YTdcdTg1YjRcdTg1YjZcdTg1YjdcdTg1YjhcdTg1YmNcdTg1YmRcdTg1YmVcdTg1YmZcdTg1YzJcdTg1YzdcdTg1Y2FcdTg1Y2JcdTg1Y2VcdTg1YWRcdTg1ZDhcdTg1ZGFcdTg1ZGZcdTg1ZTBcdTg1ZTZcdTg1ZThc''@;'; put 'put ''dTg1ZWRcdTg1ZjNcdTg1ZjZcdTg1ZmMiXSxbIjhmZGFhMSIsIlx1ODVmZlx1ODYwMFx1ODYwNFx1ODYwNVx1ODYwZFx1ODYwZVx1ODYxMFx1ODYxMVx1ODYxMlx1ODYxOFx1ODYxOVx1ODYxYlx1ODYxZVx1ODYyMVx1ODYyN1x1ODYyOVx1ODYzNlx1ODYzOFx1ODYzYVx1ODYzY1x1ODYzZFx1''@;'; put 'put ''ODY0MFx1ODY0Mlx1ODY0Nlx1ODY1Mlx1ODY1M1x1ODY1Nlx1ODY1N1x1ODY1OFx1ODY1OVx1ODY1ZFx1ODY2MCIsNCwiXHU4NjY5XHU4NjZjXHU4NjZmXHU4Njc1XHU4Njc2XHU4Njc3XHU4NjdhXHU4NjhkXHU4NjkxXHU4Njk2XHU4Njk4XHU4NjlhXHU4NjljXHU4NmExXHU4NmE2XHU4NmE3''@;'; put 'put ''XHU4NmE4XHU4NmFkXHU4NmIxXHU4NmIzXHU4NmI0XHU4NmI1XHU4NmI3XHU4NmI4XHU4NmI5XHU4NmJmXHU4NmMwXHU4NmMxXHU4NmMzXHU4NmM1XHU4NmQxXHU4NmQyXHU4NmQ1XHU4NmQ3XHU4NmRhXHU4NmRjXHU4NmUwXHU4NmUzXHU4NmU1XHU4NmU3XHU4Njg4XHU4NmZhXHU4NmZjXHU4''@;'; put 'put ''NmZkXHU4NzA0XHU4NzA1XHU4NzA3XHU4NzBiXHU4NzBlXHU4NzBmXHU4NzEwXHU4NzEzXHU4NzE0XHU4NzE5XHU4NzFlXHU4NzFmXHU4NzIxXHU4NzIzIl0sWyI4ZmRiYTEiLCJcdTg3MjhcdTg3MmVcdTg3MmZcdTg3MzFcdTg3MzJcdTg3MzlcdTg3M2FcdTg3M2NcdTg3M2RcdTg3M2VcdTg3''@;'; put 'put ''NDBcdTg3NDNcdTg3NDVcdTg3NGRcdTg3NThcdTg3NWRcdTg3NjFcdTg3NjRcdTg3NjVcdTg3NmZcdTg3NzFcdTg3NzJcdTg3N2JcdTg3ODMiLDYsIlx1ODc4Ylx1ODc4Y1x1ODc5MFx1ODc5M1x1ODc5NVx1ODc5N1x1ODc5OFx1ODc5OVx1ODc5ZVx1ODdhMFx1ODdhM1x1ODdhN1x1ODdhY1x1''@;'; put 'put ''ODdhZFx1ODdhZVx1ODdiMVx1ODdiNVx1ODdiZVx1ODdiZlx1ODdjMVx1ODdjOFx1ODdjOVx1ODdjYVx1ODdjZVx1ODdkNVx1ODdkNlx1ODdkOVx1ODdkYVx1ODdkY1x1ODdkZlx1ODdlMlx1ODdlM1x1ODdlNFx1ODdlYVx1ODdlYlx1ODdlZFx1ODdmMVx1ODdmM1x1ODdmOFx1ODdmYVx1ODdm''@;'; put 'put ''Zlx1ODgwMVx1ODgwM1x1ODgwNlx1ODgwOVx1ODgwYVx1ODgwYlx1ODgxMFx1ODgxOVx1ODgxMlx1ODgxM1x1ODgxNFx1ODgxOFx1ODgxYVx1ODgxYlx1ODgxY1x1ODgxZVx1ODgxZlx1ODgyOFx1ODgyZFx1ODgyZVx1ODgzMFx1ODgzMlx1ODgzNSJdLFsiOGZkY2ExIiwiXHU4ODNhXHU4ODNj''@;'; put 'put ''XHU4ODQxXHU4ODQzXHU4ODQ1XHU4ODQ4XHU4ODQ5XHU4ODRhXHU4ODRiXHU4ODRlXHU4ODUxXHU4ODU1XHU4ODU2XHU4ODU4XHU4ODVhXHU4ODVjXHU4ODVmXHU4ODYwXHU4ODY0XHU4ODY5XHU4ODcxXHU4ODc5XHU4ODdiXHU4ODgwXHU4ODk4XHU4ODlhXHU4ODliXHU4ODljXHU4ODlmXHU4''@;'; put 'put ''OGEwXHU4OGE4XHU4OGFhXHU4OGJhXHU4OGJkXHU4OGJlXHU4OGMwXHU4OGNhIiw0LCJcdTg4ZDFcdTg4ZDJcdTg4ZDNcdTg4ZGJcdTg4ZGVcdTg4ZTdcdTg4ZWZcdTg4ZjBcdTg4ZjFcdTg4ZjVcdTg4ZjdcdTg5MDFcdTg5MDZcdTg5MGRcdTg5MGVcdTg5MGZcdTg5MTVcdTg5MTZcdTg5MThc''@;'; put 'put ''dTg5MTlcdTg5MWFcdTg5MWNcdTg5MjBcdTg5MjZcdTg5MjdcdTg5MjhcdTg5MzBcdTg5MzFcdTg5MzJcdTg5MzVcdTg5MzlcdTg5M2FcdTg5M2VcdTg5NDBcdTg5NDJcdTg5NDVcdTg5NDZcdTg5NDlcdTg5NGZcdTg5NTJcdTg5NTdcdTg5NWFcdTg5NWJcdTg5NWNcdTg5NjFcdTg5NjJcdTg5''@;'; put 'put ''NjNcdTg5NmJcdTg5NmVcdTg5NzBcdTg5NzNcdTg5NzVcdTg5N2EiXSxbIjhmZGRhMSIsIlx1ODk3Ylx1ODk3Y1x1ODk3ZFx1ODk4OVx1ODk4ZFx1ODk5MFx1ODk5NFx1ODk5NVx1ODk5Ylx1ODk5Y1x1ODk5Zlx1ODlhMFx1ODlhNVx1ODliMFx1ODliNFx1ODliNVx1ODliNlx1ODliN1x1ODli''@;'; put 'put ''Y1x1ODlkNCIsNCwiXHU4OWU1XHU4OWU5XHU4OWViXHU4OWVkXHU4OWYxXHU4OWYzXHU4OWY2XHU4OWY5XHU4OWZkXHU4OWZmXHU4YTA0XHU4YTA1XHU4YTA3XHU4YTBmXHU4YTExXHU4YTEyXHU4YTE0XHU4YTE1XHU4YTFlXHU4YTIwXHU4YTIyXHU4YTI0XHU4YTI2XHU4YTJiXHU4YTJjXHU4''@;'; put 'put ''YTJmXHU4YTM1XHU4YTM3XHU4YTNkXHU4YTNlXHU4YTQwXHU4YTQzXHU4YTQ1XHU4YTQ3XHU4YTQ5XHU4YTRkXHU4YTRlXHU4YTUzXHU4YTU2XHU4YTU3XHU4YTU4XHU4YTVjXHU4YTVkXHU4YTYxXHU4YTY1XHU4YTY3XHU4YTc1XHU4YTc2XHU4YTc3XHU4YTc5XHU4YTdhXHU4YTdiXHU4YTdl''@;'; put 'put ''XHU4YTdmXHU4YTgwXHU4YTgzXHU4YTg2XHU4YThiXHU4YThmXHU4YTkwXHU4YTkyXHU4YTk2XHU4YTk3XHU4YTk5XHU4YTlmXHU4YWE3XHU4YWE5XHU4YWFlXHU4YWFmXHU4YWIzIl0sWyI4ZmRlYTEiLCJcdThhYjZcdThhYjdcdThhYmJcdThhYmVcdThhYzNcdThhYzZcdThhYzhcdThhYzlc''@;'; put 'put ''dThhY2FcdThhZDFcdThhZDNcdThhZDRcdThhZDVcdThhZDdcdThhZGRcdThhZGZcdThhZWNcdThhZjBcdThhZjRcdThhZjVcdThhZjZcdThhZmNcdThhZmZcdThiMDVcdThiMDZcdThiMGJcdThiMTFcdThiMWNcdThiMWVcdThiMWZcdThiMGFcdThiMmRcdThiMzBcdThiMzdcdThiM2NcdThi''@;'; put 'put ''NDIiLDQsIlx1OGI0OFx1OGI1Mlx1OGI1M1x1OGI1NFx1OGI1OVx1OGI0ZFx1OGI1ZVx1OGI2M1x1OGI2ZFx1OGI3Nlx1OGI3OFx1OGI3OVx1OGI3Y1x1OGI3ZVx1OGI4MVx1OGI4NFx1OGI4NVx1OGI4Ylx1OGI4ZFx1OGI4Zlx1OGI5NFx1OGI5NVx1OGI5Y1x1OGI5ZVx1OGI5Zlx1OGMzOFx1''@;'; put 'put ''OGMzOVx1OGMzZFx1OGMzZVx1OGM0NVx1OGM0N1x1OGM0OVx1OGM0Ylx1OGM0Zlx1OGM1MVx1OGM1M1x1OGM1NFx1OGM1N1x1OGM1OFx1OGM1Ylx1OGM1ZFx1OGM1OVx1OGM2M1x1OGM2NFx1OGM2Nlx1OGM2OFx1OGM2OVx1OGM2ZFx1OGM3M1x1OGM3NVx1OGM3Nlx1OGM3Ylx1OGM3ZVx1OGM4''@;'; put 'put ''NiJdLFsiOGZkZmExIiwiXHU4Yzg3XHU4YzhiXHU4YzkwXHU4YzkyXHU4YzkzXHU4Yzk5XHU4YzliXHU4YzljXHU4Y2E0XHU4Y2I5XHU4Y2JhXHU4Y2M1XHU4Y2M2XHU4Y2M5XHU4Y2NiXHU4Y2NmXHU4Y2Q2XHU4Y2Q1XHU4Y2Q5XHU4Y2RkXHU4Y2UxXHU4Y2U4XHU4Y2VjXHU4Y2VmXHU4Y2Yw''@;'; put 'put ''XHU4Y2YyXHU4Y2Y1XHU4Y2Y3XHU4Y2Y4XHU4Y2ZlXHU4Y2ZmXHU4ZDAxXHU4ZDAzXHU4ZDA5XHU4ZDEyXHU4ZDE3XHU4ZDFiXHU4ZDY1XHU4ZDY5XHU4ZDZjXHU4ZDZlXHU4ZDdmXHU4ZDgyXHU4ZDg0XHU4ZDg4XHU4ZDhkXHU4ZDkwXHU4ZDkxXHU4ZDk1XHU4ZDllXHU4ZDlmXHU4ZGEwXHU4''@;'; put 'put ''ZGE2XHU4ZGFiXHU4ZGFjXHU4ZGFmXHU4ZGIyXHU4ZGI1XHU4ZGI3XHU4ZGI5XHU4ZGJiXHU4ZGMwXHU4ZGM1XHU4ZGM2XHU4ZGM3XHU4ZGM4XHU4ZGNhXHU4ZGNlXHU4ZGQxXHU4ZGQ0XHU4ZGQ1XHU4ZGQ3XHU4ZGQ5XHU4ZGU0XHU4ZGU1XHU4ZGU3XHU4ZGVjXHU4ZGYwXHU4ZGJjXHU4ZGYx''@;'; put 'put ''XHU4ZGYyXHU4ZGY0XHU4ZGZkXHU4ZTAxXHU4ZTA0XHU4ZTA1XHU4ZTA2XHU4ZTBiXHU4ZTExXHU4ZTE0XHU4ZTE2XHU4ZTIwXHU4ZTIxXHU4ZTIyIl0sWyI4ZmUwYTEiLCJcdThlMjNcdThlMjZcdThlMjdcdThlMzFcdThlMzNcdThlMzZcdThlMzdcdThlMzhcdThlMzlcdThlM2RcdThlNDBc''@;'; put 'put ''dThlNDFcdThlNGJcdThlNGRcdThlNGVcdThlNGZcdThlNTRcdThlNWJcdThlNWNcdThlNWRcdThlNWVcdThlNjFcdThlNjJcdThlNjlcdThlNmNcdThlNmRcdThlNmZcdThlNzBcdThlNzFcdThlNzlcdThlN2FcdThlN2JcdThlODJcdThlODNcdThlODlcdThlOTBcdThlOTJcdThlOTVcdThl''@;'; put 'put ''OWFcdThlOWJcdThlOWRcdThlOWVcdThlYTJcdThlYTdcdThlYTlcdThlYWRcdThlYWVcdThlYjNcdThlYjVcdThlYmFcdThlYmJcdThlYzBcdThlYzFcdThlYzNcdThlYzRcdThlYzdcdThlY2ZcdThlZDFcdThlZDRcdThlZGNcdThlZThcdThlZWVcdThlZjBcdThlZjFcdThlZjdcdThlZjlc''@;'; put 'put ''dThlZmFcdThlZWRcdThmMDBcdThmMDJcdThmMDdcdThmMDhcdThmMGZcdThmMTBcdThmMTZcdThmMTdcdThmMThcdThmMWVcdThmMjBcdThmMjFcdThmMjNcdThmMjVcdThmMjdcdThmMjhcdThmMmNcdThmMmRcdThmMmVcdThmMzRcdThmMzVcdThmMzZcdThmMzdcdThmM2FcdThmNDBcdThm''@;'; put 'put ''NDEiXSxbIjhmZTFhMSIsIlx1OGY0M1x1OGY0N1x1OGY0Zlx1OGY1MSIsNCwiXHU4ZjU4XHU4ZjVkXHU4ZjVlXHU4ZjY1XHU4ZjlkXHU4ZmEwXHU4ZmExXHU4ZmE0XHU4ZmE1XHU4ZmE2XHU4ZmI1XHU4ZmI2XHU4ZmI4XHU4ZmJlXHU4ZmMwXHU4ZmMxXHU4ZmM2XHU4ZmNhXHU4ZmNiXHU4ZmNk''@;'; put 'put ''XHU4ZmQwXHU4ZmQyXHU4ZmQzXHU4ZmQ1XHU4ZmUwXHU4ZmUzXHU4ZmU0XHU4ZmU4XHU4ZmVlXHU4ZmYxXHU4ZmY1XHU4ZmY2XHU4ZmZiXHU4ZmZlXHU5MDAyXHU5MDA0XHU5MDA4XHU5MDBjXHU5MDE4XHU5MDFiXHU5MDI4XHU5MDI5XHU5MDJmXHU5MDJhXHU5MDJjXHU5MDJkXHU5MDMzXHU5''@;'; put 'put ''MDM0XHU5MDM3XHU5MDNmXHU5MDQzXHU5MDQ0XHU5MDRjXHU5MDViXHU5MDVkXHU5MDYyXHU5MDY2XHU5MDY3XHU5MDZjXHU5MDcwXHU5MDc0XHU5MDc5XHU5MDg1XHU5MDg4XHU5MDhiXHU5MDhjXHU5MDhlXHU5MDkwXHU5MDk1XHU5MDk3XHU5MDk4XHU5MDk5XHU5MDliXHU5MGEwXHU5MGEx''@;'; put 'put ''XHU5MGEyXHU5MGE1XHU5MGIwXHU5MGIyXHU5MGIzXHU5MGI0XHU5MGI2XHU5MGJkXHU5MGNjXHU5MGJlXHU5MGMzIl0sWyI4ZmUyYTEiLCJcdTkwYzRcdTkwYzVcdTkwYzdcdTkwYzhcdTkwZDVcdTkwZDdcdTkwZDhcdTkwZDlcdTkwZGNcdTkwZGRcdTkwZGZcdTkwZTVcdTkwZDJcdTkwZjZc''@;'; put 'put ''dTkwZWJcdTkwZWZcdTkwZjBcdTkwZjRcdTkwZmVcdTkwZmZcdTkxMDBcdTkxMDRcdTkxMDVcdTkxMDZcdTkxMDhcdTkxMGRcdTkxMTBcdTkxMTRcdTkxMTZcdTkxMTdcdTkxMThcdTkxMWFcdTkxMWNcdTkxMWVcdTkxMjBcdTkxMjVcdTkxMjJcdTkxMjNcdTkxMjdcdTkxMjlcdTkxMmVcdTkx''@;'; put 'put ''MmZcdTkxMzFcdTkxMzRcdTkxMzZcdTkxMzdcdTkxMzlcdTkxM2FcdTkxM2NcdTkxM2RcdTkxNDNcdTkxNDdcdTkxNDhcdTkxNGZcdTkxNTNcdTkxNTdcdTkxNTlcdTkxNWFcdTkxNWJcdTkxNjFcdTkxNjRcdTkxNjdcdTkxNmRcdTkxNzRcdTkxNzlcdTkxN2FcdTkxN2JcdTkxODFcdTkxODNc''@;'; put 'put ''dTkxODVcdTkxODZcdTkxOGFcdTkxOGVcdTkxOTFcdTkxOTNcdTkxOTRcdTkxOTVcdTkxOThcdTkxOWVcdTkxYTFcdTkxYTZcdTkxYThcdTkxYWNcdTkxYWRcdTkxYWVcdTkxYjBcdTkxYjFcdTkxYjJcdTkxYjNcdTkxYjZcdTkxYmJcdTkxYmNcdTkxYmRcdTkxYmYiXSxbIjhmZTNhMSIsIlx1''@;'; put 'put ''OTFjMlx1OTFjM1x1OTFjNVx1OTFkM1x1OTFkNFx1OTFkN1x1OTFkOVx1OTFkYVx1OTFkZVx1OTFlNFx1OTFlNVx1OTFlOVx1OTFlYVx1OTFlYyIsNSwiXHU5MWY3XHU5MWY5XHU5MWZiXHU5MWZkXHU5MjAwXHU5MjAxXHU5MjA0XHU5MjA1XHU5MjA2XHU5MjA3XHU5MjA5XHU5MjBhXHU5MjBj''@;'; put 'put ''XHU5MjEwXHU5MjEyXHU5MjEzXHU5MjE2XHU5MjE4XHU5MjFjXHU5MjFkXHU5MjIzXHU5MjI0XHU5MjI1XHU5MjI2XHU5MjI4XHU5MjJlXHU5MjJmXHU5MjMwXHU5MjMzXHU5MjM1XHU5MjM2XHU5MjM4XHU5MjM5XHU5MjNhXHU5MjNjXHU5MjNlXHU5MjQwXHU5MjQyXHU5MjQzXHU5MjQ2XHU5''@;'; put 'put ''MjQ3XHU5MjRhXHU5MjRkXHU5MjRlXHU5MjRmXHU5MjUxXHU5MjU4XHU5MjU5XHU5MjVjXHU5MjVkXHU5MjYwXHU5MjYxXHU5MjY1XHU5MjY3XHU5MjY4XHU5MjY5XHU5MjZlXHU5MjZmXHU5MjcwXHU5Mjc1Iiw0LCJcdTkyN2JcdTkyN2NcdTkyN2RcdTkyN2ZcdTkyODhcdTkyODlcdTkyOGFc''@;'; put 'put ''dTkyOGRcdTkyOGVcdTkyOTJcdTkyOTciXSxbIjhmZTRhMSIsIlx1OTI5OVx1OTI5Zlx1OTJhMFx1OTJhNFx1OTJhNVx1OTJhN1x1OTJhOFx1OTJhYlx1OTJhZlx1OTJiMlx1OTJiNlx1OTJiOFx1OTJiYVx1OTJiYlx1OTJiY1x1OTJiZFx1OTJiZiIsNCwiXHU5MmM1XHU5MmM2XHU5MmM3XHU5''@;'; put 'put ''MmM4XHU5MmNiXHU5MmNjXHU5MmNkXHU5MmNlXHU5MmQwXHU5MmQzXHU5MmQ1XHU5MmQ3XHU5MmQ4XHU5MmQ5XHU5MmRjXHU5MmRkXHU5MmRmXHU5MmUwXHU5MmUxXHU5MmUzXHU5MmU1XHU5MmU3XHU5MmU4XHU5MmVjXHU5MmVlXHU5MmYwXHU5MmY5XHU5MmZiXHU5MmZmXHU5MzAwXHU5MzAy''@;'; put 'put ''XHU5MzA4XHU5MzBkXHU5MzExXHU5MzE0XHU5MzE1XHU5MzFjXHU5MzFkXHU5MzFlXHU5MzFmXHU5MzIxXHU5MzI0XHU5MzI1XHU5MzI3XHU5MzI5XHU5MzJhXHU5MzMzXHU5MzM0XHU5MzM2XHU5MzM3XHU5MzQ3XHU5MzQ4XHU5MzQ5XHU5MzUwXHU5MzUxXHU5MzUyXHU5MzU1XHU5MzU3XHU5''@;'; put 'put ''MzU4XHU5MzVhXHU5MzVlXHU5MzY0XHU5MzY1XHU5MzY3XHU5MzY5XHU5MzZhXHU5MzZkXHU5MzZmXHU5MzcwXHU5MzcxXHU5MzczXHU5Mzc0XHU5Mzc2Il0sWyI4ZmU1YTEiLCJcdTkzN2FcdTkzN2RcdTkzN2ZcdTkzODBcdTkzODFcdTkzODJcdTkzODhcdTkzOGFcdTkzOGJcdTkzOGRcdTkz''@;'; put 'put ''OGZcdTkzOTJcdTkzOTVcdTkzOThcdTkzOWJcdTkzOWVcdTkzYTFcdTkzYTNcdTkzYTRcdTkzYTZcdTkzYThcdTkzYWJcdTkzYjRcdTkzYjVcdTkzYjZcdTkzYmFcdTkzYTlcdTkzYzFcdTkzYzRcdTkzYzVcdTkzYzZcdTkzYzdcdTkzYzkiLDQsIlx1OTNkM1x1OTNkOVx1OTNkY1x1OTNkZVx1''@;'; put 'put ''OTNkZlx1OTNlMlx1OTNlNlx1OTNlN1x1OTNmOVx1OTNmN1x1OTNmOFx1OTNmYVx1OTNmYlx1OTNmZFx1OTQwMVx1OTQwMlx1OTQwNFx1OTQwOFx1OTQwOVx1OTQwZFx1OTQwZVx1OTQwZlx1OTQxNVx1OTQxNlx1OTQxN1x1OTQxZlx1OTQyZVx1OTQyZlx1OTQzMVx1OTQzMlx1OTQzM1x1OTQz''@;'; put 'put ''NFx1OTQzYlx1OTQzZlx1OTQzZFx1OTQ0M1x1OTQ0NVx1OTQ0OFx1OTQ0YVx1OTQ0Y1x1OTQ1NVx1OTQ1OVx1OTQ1Y1x1OTQ1Zlx1OTQ2MVx1OTQ2M1x1OTQ2OFx1OTQ2Ylx1OTQ2ZFx1OTQ2ZVx1OTQ2Zlx1OTQ3MVx1OTQ3Mlx1OTQ4NFx1OTQ4M1x1OTU3OFx1OTU3OSJdLFsiOGZlNmExIiwi''@;'; put 'put ''XHU5NTdlXHU5NTg0XHU5NTg4XHU5NThjXHU5NThkXHU5NThlXHU5NTlkXHU5NTllXHU5NTlmXHU5NWExXHU5NWE2XHU5NWE5XHU5NWFiXHU5NWFjXHU5NWI0XHU5NWI2XHU5NWJhXHU5NWJkXHU5NWJmXHU5NWM2XHU5NWM4XHU5NWM5XHU5NWNiXHU5NWQwXHU5NWQxXHU5NWQyXHU5NWQzXHU5''@;'; put 'put ''NWQ5XHU5NWRhXHU5NWRkXHU5NWRlXHU5NWRmXHU5NWUwXHU5NWU0XHU5NWU2XHU5NjFkXHU5NjFlXHU5NjIyXHU5NjI0XHU5NjI1XHU5NjI2XHU5NjJjXHU5NjMxXHU5NjMzXHU5NjM3XHU5NjM4XHU5NjM5XHU5NjNhXHU5NjNjXHU5NjNkXHU5NjQxXHU5NjUyXHU5NjU0XHU5NjU2XHU5NjU3''@;'; put 'put ''XHU5NjU4XHU5NjYxXHU5NjZlXHU5Njc0XHU5NjdiXHU5NjdjXHU5NjdlXHU5NjdmXHU5NjgxXHU5NjgyXHU5NjgzXHU5Njg0XHU5Njg5XHU5NjkxXHU5Njk2XHU5NjlhXHU5NjlkXHU5NjlmXHU5NmE0XHU5NmE1XHU5NmE2XHU5NmE5XHU5NmFlXHU5NmFmXHU5NmIzXHU5NmJhXHU5NmNhXHU5''@;'; put 'put ''NmQyXHU1ZGIyXHU5NmQ4XHU5NmRhXHU5NmRkXHU5NmRlXHU5NmRmXHU5NmU5XHU5NmVmXHU5NmYxXHU5NmZhXHU5NzAyIl0sWyI4ZmU3YTEiLCJcdTk3MDNcdTk3MDVcdTk3MDlcdTk3MWFcdTk3MWJcdTk3MWRcdTk3MjFcdTk3MjJcdTk3MjNcdTk3MjhcdTk3MzFcdTk3MzNcdTk3NDFcdTk3''@;'; put 'put ''NDNcdTk3NGFcdTk3NGVcdTk3NGZcdTk3NTVcdTk3NTdcdTk3NThcdTk3NWFcdTk3NWJcdTk3NjNcdTk3NjdcdTk3NmFcdTk3NmVcdTk3NzNcdTk3NzZcdTk3NzdcdTk3NzhcdTk3N2JcdTk3N2RcdTk3N2ZcdTk3ODBcdTk3ODlcdTk3OTVcdTk3OTZcdTk3OTdcdTk3OTlcdTk3OWFcdTk3OWVc''@;'; put 'put ''dTk3OWZcdTk3YTJcdTk3YWNcdTk3YWVcdTk3YjFcdTk3YjJcdTk3YjVcdTk3YjZcdTk3YjhcdTk3YjlcdTk3YmFcdTk3YmNcdTk3YmVcdTk3YmZcdTk3YzFcdTk3YzRcdTk3YzVcdTk3YzdcdTk3YzlcdTk3Y2FcdTk3Y2NcdTk3Y2RcdTk3Y2VcdTk3ZDBcdTk3ZDFcdTk3ZDRcdTk3ZDdcdTk3''@;'; put 'put ''ZDhcdTk3ZDlcdTk3ZGRcdTk3ZGVcdTk3ZTBcdTk3ZGJcdTk3ZTFcdTk3ZTRcdTk3ZWZcdTk3ZjFcdTk3ZjRcdTk3ZjdcdTk3ZjhcdTk3ZmFcdTk4MDdcdTk4MGFcdTk4MTlcdTk4MGRcdTk4MGVcdTk4MTRcdTk4MTZcdTk4MWNcdTk4MWVcdTk4MjBcdTk4MjNcdTk4MjYiXSxbIjhmZThhMSIs''@;'; put 'put ''Ilx1OTgyYlx1OTgyZVx1OTgyZlx1OTgzMFx1OTgzMlx1OTgzM1x1OTgzNVx1OTgyNVx1OTgzZVx1OTg0NFx1OTg0N1x1OTg0YVx1OTg1MVx1OTg1Mlx1OTg1M1x1OTg1Nlx1OTg1N1x1OTg1OVx1OTg1YVx1OTg2Mlx1OTg2M1x1OTg2NVx1OTg2Nlx1OTg2YVx1OTg2Y1x1OThhYlx1OThhZFx1''@;'; put 'put ''OThhZVx1OThiMFx1OThiNFx1OThiN1x1OThiOFx1OThiYVx1OThiYlx1OThiZlx1OThjMlx1OThjNVx1OThjOFx1OThjY1x1OThlMVx1OThlM1x1OThlNVx1OThlNlx1OThlN1x1OThlYVx1OThmM1x1OThmNlx1OTkwMlx1OTkwN1x1OTkwOFx1OTkxMVx1OTkxNVx1OTkxNlx1OTkxN1x1OTkx''@;'; put 'put ''YVx1OTkxYlx1OTkxY1x1OTkxZlx1OTkyMlx1OTkyNlx1OTkyN1x1OTkyYlx1OTkzMSIsNCwiXHU5OTM5XHU5OTNhXHU5OTNiXHU5OTNjXHU5OTQwXHU5OTQxXHU5OTQ2XHU5OTQ3XHU5OTQ4XHU5OTRkXHU5OTRlXHU5OTU0XHU5OTU4XHU5OTU5XHU5OTViXHU5OTVjXHU5OTVlXHU5OTVmXHU5''@;'; put 'put ''OTYwXHU5OTliXHU5OTlkXHU5OTlmXHU5OWE2XHU5OWIwXHU5OWIxXHU5OWIyXHU5OWI1Il0sWyI4ZmU5YTEiLCJcdTk5YjlcdTk5YmFcdTk5YmRcdTk5YmZcdTk5YzNcdTk5YzlcdTk5ZDNcdTk5ZDRcdTk5ZDlcdTk5ZGFcdTk5ZGNcdTk5ZGVcdTk5ZTdcdTk5ZWFcdTk5ZWJcdTk5ZWNcdTk5''@;'; put 'put ''ZjBcdTk5ZjRcdTk5ZjVcdTk5ZjlcdTk5ZmRcdTk5ZmVcdTlhMDJcdTlhMDNcdTlhMDRcdTlhMGJcdTlhMGNcdTlhMTBcdTlhMTFcdTlhMTZcdTlhMWVcdTlhMjBcdTlhMjJcdTlhMjNcdTlhMjRcdTlhMjdcdTlhMmRcdTlhMmVcdTlhMzNcdTlhMzVcdTlhMzZcdTlhMzhcdTlhNDdcdTlhNDFc''@;'; put 'put ''dTlhNDRcdTlhNGFcdTlhNGJcdTlhNGNcdTlhNGVcdTlhNTFcdTlhNTRcdTlhNTZcdTlhNWRcdTlhYWFcdTlhYWNcdTlhYWVcdTlhYWZcdTlhYjJcdTlhYjRcdTlhYjVcdTlhYjZcdTlhYjlcdTlhYmJcdTlhYmVcdTlhYmZcdTlhYzFcdTlhYzNcdTlhYzZcdTlhYzhcdTlhY2VcdTlhZDBcdTlh''@;'; put 'put ''ZDJcdTlhZDVcdTlhZDZcdTlhZDdcdTlhZGJcdTlhZGNcdTlhZTBcdTlhZTRcdTlhZTVcdTlhZTdcdTlhZTlcdTlhZWNcdTlhZjJcdTlhZjNcdTlhZjVcdTlhZjlcdTlhZmFcdTlhZmRcdTlhZmYiLDRdLFsiOGZlYWExIiwiXHU5YjA0XHU5YjA1XHU5YjA4XHU5YjA5XHU5YjBiXHU5YjBjXHU5''@;'; put 'put ''YjBkXHU5YjBlXHU5YjEwXHU5YjEyXHU5YjE2XHU5YjE5XHU5YjFiXHU5YjFjXHU5YjIwXHU5YjI2XHU5YjJiXHU5YjJkXHU5YjMzXHU5YjM0XHU5YjM1XHU5YjM3XHU5YjM5XHU5YjNhXHU5YjNkXHU5YjQ4XHU5YjRiXHU5YjRjXHU5YjU1XHU5YjU2XHU5YjU3XHU5YjViXHU5YjVlXHU5YjYx''@;'; put 'put ''XHU5YjYzXHU5YjY1XHU5YjY2XHU5YjY4XHU5YjZhIiw0LCJcdTliNzNcdTliNzVcdTliNzdcdTliNzhcdTliNzlcdTliN2ZcdTliODBcdTliODRcdTliODVcdTliODZcdTliODdcdTliODlcdTliOGFcdTliOGJcdTliOGRcdTliOGZcdTliOTBcdTliOTRcdTliOWFcdTliOWRcdTliOWVcdTli''@;'; put 'put ''YTZcdTliYTdcdTliYTlcdTliYWNcdTliYjBcdTliYjFcdTliYjJcdTliYjdcdTliYjhcdTliYmJcdTliYmNcdTliYmVcdTliYmZcdTliYzFcdTliYzdcdTliYzhcdTliY2VcdTliZDBcdTliZDdcdTliZDhcdTliZGRcdTliZGZcdTliZTVcdTliZTdcdTliZWFcdTliZWJcdTliZWZcdTliZjNc''@;'; put 'put ''dTliZjdcdTliZjgiXSxbIjhmZWJhMSIsIlx1OWJmOVx1OWJmYVx1OWJmZFx1OWJmZlx1OWMwMFx1OWMwMlx1OWMwYlx1OWMwZlx1OWMxMVx1OWMxNlx1OWMxOFx1OWMxOVx1OWMxYVx1OWMxY1x1OWMxZVx1OWMyMlx1OWMyM1x1OWMyNiIsNCwiXHU5YzMxXHU5YzM1XHU5YzM2XHU5YzM3XHU5''@;'; put 'put ''YzNkXHU5YzQxXHU5YzQzXHU5YzQ0XHU5YzQ1XHU5YzQ5XHU5YzRhXHU5YzRlXHU5YzRmXHU5YzUwXHU5YzUzXHU5YzU0XHU5YzU2XHU5YzU4XHU5YzViXHU5YzVkXHU5YzVlXHU5YzVmXHU5YzYzXHU5YzY5XHU5YzZhXHU5YzVjXHU5YzZiXHU5YzY4XHU5YzZlXHU5YzcwXHU5YzcyXHU5Yzc1''@;'; put 'put ''XHU5Yzc3XHU5YzdiXHU5Y2U2XHU5Y2YyXHU5Y2Y3XHU5Y2Y5XHU5ZDBiXHU5ZDAyXHU5ZDExXHU5ZDE3XHU5ZDE4XHU5ZDFjXHU5ZDFkXHU5ZDFlXHU5ZDJmXHU5ZDMwXHU5ZDMyXHU5ZDMzXHU5ZDM0XHU5ZDNhXHU5ZDNjXHU5ZDQ1XHU5ZDNkXHU5ZDQyXHU5ZDQzXHU5ZDQ3XHU5ZDRhXHU5''@;'; put 'put ''ZDUzXHU5ZDU0XHU5ZDVmXHU5ZDYzXHU5ZDYyXHU5ZDY1XHU5ZDY5XHU5ZDZhXHU5ZDZiXHU5ZDcwXHU5ZDc2XHU5ZDc3XHU5ZDdiIl0sWyI4ZmVjYTEiLCJcdTlkN2NcdTlkN2VcdTlkODNcdTlkODRcdTlkODZcdTlkOGFcdTlkOGRcdTlkOGVcdTlkOTJcdTlkOTNcdTlkOTVcdTlkOTZcdTlk''@;'; put 'put ''OTdcdTlkOThcdTlkYTFcdTlkYWFcdTlkYWNcdTlkYWVcdTlkYjFcdTlkYjVcdTlkYjlcdTlkYmNcdTlkYmZcdTlkYzNcdTlkYzdcdTlkYzlcdTlkY2FcdTlkZDRcdTlkZDVcdTlkZDZcdTlkZDdcdTlkZGFcdTlkZGVcdTlkZGZcdTlkZTBcdTlkZTVcdTlkZTdcdTlkZTlcdTlkZWJcdTlkZWVc''@;'; put 'put ''dTlkZjBcdTlkZjNcdTlkZjRcdTlkZmVcdTllMGFcdTllMDJcdTllMDdcdTllMGVcdTllMTBcdTllMTFcdTllMTJcdTllMTVcdTllMTZcdTllMTlcdTllMWNcdTllMWRcdTllN2FcdTllN2JcdTllN2NcdTllODBcdTllODJcdTllODNcdTllODRcdTllODVcdTllODdcdTllOGVcdTllOGZcdTll''@;'; put 'put ''OTZcdTllOThcdTllOWJcdTllOWVcdTllYTRcdTllYThcdTllYWNcdTllYWVcdTllYWZcdTllYjBcdTllYjNcdTllYjRcdTllYjVcdTllYzZcdTllYzhcdTllY2JcdTllZDVcdTllZGZcdTllZTRcdTllZTdcdTllZWNcdTllZWRcdTllZWVcdTllZjBcdTllZjFcdTllZjJcdTllZjUiXSxbIjhm''@;'; put 'put ''ZWRhMSIsIlx1OWVmOFx1OWVmZlx1OWYwMlx1OWYwM1x1OWYwOVx1OWYwZlx1OWYxMFx1OWYxMVx1OWYxMlx1OWYxNFx1OWYxNlx1OWYxN1x1OWYxOVx1OWYxYVx1OWYxYlx1OWYxZlx1OWYyMlx1OWYyNlx1OWYyYVx1OWYyYlx1OWYyZlx1OWYzMVx1OWYzMlx1OWYzNFx1OWYzN1x1OWYzOVx1''@;'; put 'put ''OWYzYVx1OWYzY1x1OWYzZFx1OWYzZlx1OWY0MVx1OWY0MyIsNCwiXHU5ZjUzXHU5ZjU1XHU5ZjU2XHU5ZjU3XHU5ZjU4XHU5ZjVhXHU5ZjVkXHU5ZjVlXHU5ZjY4XHU5ZjY5XHU5ZjZkIiw0LCJcdTlmNzNcdTlmNzVcdTlmN2FcdTlmN2RcdTlmOGZcdTlmOTBcdTlmOTFcdTlmOTJcdTlmOTRc''@;'; put 'put ''dTlmOTZcdTlmOTdcdTlmOWVcdTlmYTFcdTlmYTJcdTlmYTNcdTlmYTUiXV0nKX0sOTkxMjk6dWU9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz1KU09OLnBhcnNlKCd7InVDaGFycyI6WzEyOCwxNjUsMTY5LDE3OCwxODQsMjE2LDIyNiwyMzUsMjM4LDI0NCwyNDgsMjUxLDI1MywyNTgsMjc2''@;'; put 'put ''LDI4NCwzMDAsMzI1LDMyOSwzMzQsMzY0LDQ2Myw0NjUsNDY3LDQ2OSw0NzEsNDczLDQ3NSw0NzcsNTA2LDU5NCw2MTAsNzEyLDcxNiw3MzAsOTMwLDkzOCw5NjIsOTcwLDEwMjYsMTEwNCwxMTA2LDgyMDksODIxNSw4MjE4LDgyMjIsODIzMSw4MjQxLDgyNDQsODI0Niw4MjUyLDgzNjUsODQ1''@;'; put 'put ''Miw4NDU0LDg0NTgsODQ3MSw4NDgyLDg1NTYsODU3MCw4NTk2LDg2MDIsODcxMyw4NzIwLDg3MjIsODcyNiw4NzMxLDg3MzcsODc0MCw4NzQyLDg3NDgsODc1MSw4NzYwLDg3NjYsODc3Nyw4NzgxLDg3ODcsODgwMiw4ODA4LDg4MTYsODg1NCw4ODU4LDg4NzAsODg5Niw4OTc5LDkzMjIsOTM3''@;'; put 'put ''Miw5NTQ4LDk1ODgsOTYxNiw5NjIyLDk2MzQsOTY1Miw5NjYyLDk2NzIsOTY3Niw5NjgwLDk3MDIsOTczNSw5NzM4LDk3OTMsOTc5NSwxMTkwNiwxMTkwOSwxMTkxMywxMTkxNywxMTkyOCwxMTk0NCwxMTk0NywxMTk1MSwxMTk1NiwxMTk2MCwxMTk2NCwxMTk3OSwxMjI4NCwxMjI5MiwxMjMx''@;'; put 'put ''MiwxMjMxOSwxMjMzMCwxMjM1MSwxMjQzNiwxMjQ0NywxMjUzNSwxMjU0MywxMjU4NiwxMjg0MiwxMjg1MCwxMjk2NCwxMzIwMCwxMzIxNSwxMzIxOCwxMzI1MywxMzI2MywxMzI2NywxMzI3MCwxMzM4NCwxMzQyOCwxMzcyNywxMzgzOSwxMzg1MSwxNDYxNywxNDcwMywxNDgwMSwxNDgxNiwx''@;'; put 'put ''NDk2NCwxNTE4MywxNTQ3MSwxNTU4NSwxNjQ3MSwxNjczNiwxNzIwOCwxNzMyNSwxNzMzMCwxNzM3NCwxNzYyMywxNzk5NywxODAxOCwxODIxMiwxODIxOCwxODMwMSwxODMxOCwxODc2MCwxODgxMSwxODgxNCwxODgyMCwxODgyMywxODg0NCwxODg0OCwxODg3MiwxOTU3NiwxOTYyMCwxOTcz''@;'; put 'put ''OCwxOTg4Nyw0MDg3MCw1OTI0NCw1OTMzNiw1OTM2Nyw1OTQxMyw1OTQxNyw1OTQyMyw1OTQzMSw1OTQzNyw1OTQ0Myw1OTQ1Miw1OTQ2MCw1OTQ3OCw1OTQ5Myw2Mzc4OSw2Mzg2Niw2Mzg5NCw2Mzk3Niw2Mzk4Niw2NDAxNiw2NDAxOCw2NDAyMSw2NDAyNSw2NDAzNCw2NDAzNyw2NDA0Miw2''@;'; put 'put ''NTA3NCw2NTA5Myw2NTEwNyw2NTExMiw2NTEyNyw2NTEzMiw2NTM3NSw2NTUxMCw2NTUzNl0sImdiQ2hhcnMiOlswLDM2LDM4LDQ1LDUwLDgxLDg5LDk1LDk2LDEwMCwxMDMsMTA0LDEwNSwxMDksMTI2LDEzMywxNDgsMTcyLDE3NSwxNzksMjA4LDMwNiwzMDcsMzA4LDMwOSwzMTAsMzExLDMx''@;'; put 'put ''MiwzMTMsMzQxLDQyOCw0NDMsNTQ0LDU0NSw1NTgsNzQxLDc0Miw3NDksNzUwLDgwNSw4MTksODIwLDc5MjIsNzkyNCw3OTI1LDc5MjcsNzkzNCw3OTQzLDc5NDQsNzk0NSw3OTUwLDgwNjIsODE0OCw4MTQ5LDgxNTIsODE2NCw4MTc0LDgyMzYsODI0MCw4MjYyLDgyNjQsODM3NCw4MzgwLDgz''@;'; put 'put ''ODEsODM4NCw4Mzg4LDgzOTAsODM5Miw4MzkzLDgzOTQsODM5Niw4NDAxLDg0MDYsODQxNiw4NDE5LDg0MjQsODQzNyw4NDM5LDg0NDUsODQ4Miw4NDg1LDg0OTYsODUyMSw4NjAzLDg5MzYsODk0Niw5MDQ2LDkwNTAsOTA2Myw5MDY2LDkwNzYsOTA5Miw5MTAwLDkxMDgsOTExMSw5MTEzLDkx''@;'; put 'put ''MzEsOTE2Miw5MTY0LDkyMTgsOTIxOSwxMTMyOSwxMTMzMSwxMTMzNCwxMTMzNiwxMTM0NiwxMTM2MSwxMTM2MywxMTM2NiwxMTM3MCwxMTM3MiwxMTM3NSwxMTM4OSwxMTY4MiwxMTY4NiwxMTY4NywxMTY5MiwxMTY5NCwxMTcxNCwxMTcxNiwxMTcyMywxMTcyNSwxMTczMCwxMTczNiwxMTk4''@;'; put 'put ''MiwxMTk4OSwxMjEwMiwxMjMzNiwxMjM0OCwxMjM1MCwxMjM4NCwxMjM5MywxMjM5NSwxMjM5NywxMjUxMCwxMjU1MywxMjg1MSwxMjk2MiwxMjk3MywxMzczOCwxMzgyMywxMzkxOSwxMzkzMywxNDA4MCwxNDI5OCwxNDU4NSwxNDY5OCwxNTU4MywxNTg0NywxNjMxOCwxNjQzNCwxNjQzOCwx''@;'; put 'put ''NjQ4MSwxNjcyOSwxNzEwMiwxNzEyMiwxNzMxNSwxNzMyMCwxNzQwMiwxNzQxOCwxNzg1OSwxNzkwOSwxNzkxMSwxNzkxNSwxNzkxNiwxNzkzNiwxNzkzOSwxNzk2MSwxODY2NCwxODcwMywxODgxNCwxODk2MiwxOTA0MywzMzQ2OSwzMzQ3MCwzMzQ3MSwzMzQ4NCwzMzQ4NSwzMzQ5MCwzMzQ5''@;'; put 'put ''NywzMzUwMSwzMzUwNSwzMzUxMywzMzUyMCwzMzUzNiwzMzU1MCwzNzg0NSwzNzkyMSwzNzk0OCwzODAyOSwzODAzOCwzODA2NCwzODA2NSwzODA2NiwzODA2OSwzODA3NSwzODA3NiwzODA3OCwzOTEwOCwzOTEwOSwzOTExMywzOTExNCwzOTExNSwzOTExNiwzOTI2NSwzOTM5NCwxODkwMDBd''@;'; put 'put ''fScpfSw1NTkxNDp1ZT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPUpTT04ucGFyc2UoJ1tbImExNDAiLCJcdWU0YzYiLDYyXSxbImExODAiLCJcdWU1MDUiLDMyXSxbImEyNDAiLCJcdWU1MjYiLDYyXSxbImEyODAiLCJcdWU1NjUiLDMyXSxbImEyYWIiLCJcdWU3NjYiLDVdLFsiYTJlMyIs''@;'; put 'put ''Ilx1MjBhY1x1ZTc2ZCJdLFsiYTJlZiIsIlx1ZTc2ZVx1ZTc2ZiJdLFsiYTJmZCIsIlx1ZTc3MFx1ZTc3MSJdLFsiYTM0MCIsIlx1ZTU4NiIsNjJdLFsiYTM4MCIsIlx1ZTVjNSIsMzEsIlx1MzAwMCJdLFsiYTQ0MCIsIlx1ZTVlNiIsNjJdLFsiYTQ4MCIsIlx1ZTYyNSIsMzJdLFsiYTRmNCIs''@;'; put 'put ''Ilx1ZTc3MiIsMTBdLFsiYTU0MCIsIlx1ZTY0NiIsNjJdLFsiYTU4MCIsIlx1ZTY4NSIsMzJdLFsiYTVmNyIsIlx1ZTc3ZCIsN10sWyJhNjQwIiwiXHVlNmE2Iiw2Ml0sWyJhNjgwIiwiXHVlNmU1IiwzMl0sWyJhNmI5IiwiXHVlNzg1Iiw3XSxbImE2ZDkiLCJcdWU3OGQiLDZdLFsiYTZlYyIs''@;'; put 'put ''Ilx1ZTc5NFx1ZTc5NSJdLFsiYTZmMyIsIlx1ZTc5NiJdLFsiYTZmNiIsIlx1ZTc5NyIsOF0sWyJhNzQwIiwiXHVlNzA2Iiw2Ml0sWyJhNzgwIiwiXHVlNzQ1IiwzMl0sWyJhN2MyIiwiXHVlN2EwIiwxNF0sWyJhN2YyIiwiXHVlN2FmIiwxMl0sWyJhODk2IiwiXHVlN2JjIiwxMF0sWyJhOGJj''@;'; put 'put ''IiwiXHVlN2M3Il0sWyJhOGJmIiwiXHUwMWY5Il0sWyJhOGMxIiwiXHVlN2M5XHVlN2NhXHVlN2NiXHVlN2NjIl0sWyJhOGVhIiwiXHVlN2NkIiwyMF0sWyJhOTU4IiwiXHVlN2UyIl0sWyJhOTViIiwiXHVlN2UzIl0sWyJhOTVkIiwiXHVlN2U0XHVlN2U1XHVlN2U2Il0sWyJhOTg5IiwiXHUz''@;'; put 'put ''MDNlXHUyZmYwIiwxMV0sWyJhOTk3IiwiXHVlN2Y0IiwxMl0sWyJhOWYwIiwiXHVlODAxIiwxNF0sWyJhYWExIiwiXHVlMDAwIiw5M10sWyJhYmExIiwiXHVlMDVlIiw5M10sWyJhY2ExIiwiXHVlMGJjIiw5M10sWyJhZGExIiwiXHVlMTFhIiw5M10sWyJhZWExIiwiXHVlMTc4Iiw5M10sWyJh''@;'; put 'put ''ZmExIiwiXHVlMWQ2Iiw5M10sWyJkN2ZhIiwiXHVlODEwIiw0XSxbImY4YTEiLCJcdWUyMzQiLDkzXSxbImY5YTEiLCJcdWUyOTIiLDkzXSxbImZhYTEiLCJcdWUyZjAiLDkzXSxbImZiYTEiLCJcdWUzNGUiLDkzXSxbImZjYTEiLCJcdWUzYWMiLDkzXSxbImZkYTEiLCJcdWU0MGEiLDkzXSxb''@;'; put 'put ''ImZlNTAiLCJcdTJlODFcdWU4MTZcdWU4MTdcdWU4MThcdTJlODRcdTM0NzNcdTM0NDdcdTJlODhcdTJlOGJcdWU4MWVcdTM1OWVcdTM2MWFcdTM2MGVcdTJlOGNcdTJlOTdcdTM5NmVcdTM5MThcdWU4MjZcdTM5Y2ZcdTM5ZGZcdTNhNzNcdTM5ZDBcdWU4MmJcdWU4MmNcdTNiNGVcdTNjNmVc''@;'; put 'put ''dTNjZTBcdTJlYTdcdWU4MzFcdWU4MzJcdTJlYWFcdTQwNTZcdTQxNWZcdTJlYWVcdTQzMzdcdTJlYjNcdTJlYjZcdTJlYjdcdWU4M2JcdTQzYjFcdTQzYWNcdTJlYmJcdTQzZGRcdTQ0ZDZcdTQ2NjFcdTQ2NGNcdWU4NDMiXSxbImZlODAiLCJcdTQ3MjNcdTQ3MjlcdTQ3N2NcdTQ3OGRcdTJl''@;'; put 'put ''Y2FcdTQ5NDdcdTQ5N2FcdTQ5N2RcdTQ5ODJcdTQ5ODNcdTQ5ODVcdTQ5ODZcdTQ5OWZcdTQ5OWJcdTQ5YjdcdTQ5YjZcdWU4NTRcdWU4NTVcdTRjYTNcdTRjOWZcdTRjYTBcdTRjYTFcdTRjNzdcdTRjYTJcdTRkMTMiLDYsIlx1NGRhZVx1ZTg2NFx1ZTQ2OCIsOTNdXScpfSw0MDY3OTp1ZT0+''@;'; put 'put ''eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPUpTT04ucGFyc2UoJ1tbIjAiLCJcXHUwMDAwIiwxMjhdLFsiYTEiLCJcdWZmNjEiLDYyXSxbIjgxNDAiLCJcdTMwMDBcdTMwMDFcdTMwMDJcdWZmMGNcdWZmMGVcdTMwZmJcdWZmMWFcdWZmMWJcdWZmMWZcdWZmMDFcdTMwOWJcdTMwOWNceGI0XHVm''@;'; put 'put ''ZjQwXHhhOFx1ZmYzZVx1ZmZlM1x1ZmYzZlx1MzBmZFx1MzBmZVx1MzA5ZFx1MzA5ZVx1MzAwM1x1NGVkZFx1MzAwNVx1MzAwNlx1MzAwN1x1MzBmY1x1MjAxNVx1MjAxMFx1ZmYwZlx1ZmYzY1x1ZmY1ZVx1MjIyNVx1ZmY1Y1x1MjAyNlx1MjAyNVx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1''@;'; put 'put ''ZmYwOFx1ZmYwOVx1MzAxNFx1MzAxNVx1ZmYzYlx1ZmYzZFx1ZmY1Ylx1ZmY1ZFx1MzAwOCIsOSwiXHVmZjBiXHVmZjBkXHhiMVx4ZDciXSxbIjgxODAiLCJceGY3XHVmZjFkXHUyMjYwXHVmZjFjXHVmZjFlXHUyMjY2XHUyMjY3XHUyMjFlXHUyMjM0XHUyNjQyXHUyNjQwXHhiMFx1MjAzMlx1''@;'; put 'put ''MjAzM1x1MjEwM1x1ZmZlNVx1ZmYwNFx1ZmZlMFx1ZmZlMVx1ZmYwNVx1ZmYwM1x1ZmYwNlx1ZmYwYVx1ZmYyMFx4YTdcdTI2MDZcdTI2MDVcdTI1Y2JcdTI1Y2ZcdTI1Y2VcdTI1YzdcdTI1YzZcdTI1YTFcdTI1YTBcdTI1YjNcdTI1YjJcdTI1YmRcdTI1YmNcdTIwM2JcdTMwMTJcdTIxOTJc''@;'; put 'put ''dTIxOTBcdTIxOTFcdTIxOTNcdTMwMTMiXSxbIjgxYjgiLCJcdTIyMDhcdTIyMGJcdTIyODZcdTIyODdcdTIyODJcdTIyODNcdTIyMmFcdTIyMjkiXSxbIjgxYzgiLCJcdTIyMjdcdTIyMjhcdWZmZTJcdTIxZDJcdTIxZDRcdTIyMDBcdTIyMDMiXSxbIjgxZGEiLCJcdTIyMjBcdTIyYTVcdTIz''@;'; put 'put ''MTJcdTIyMDJcdTIyMDdcdTIyNjFcdTIyNTJcdTIyNmFcdTIyNmJcdTIyMWFcdTIyM2RcdTIyMWRcdTIyMzVcdTIyMmJcdTIyMmMiXSxbIjgxZjAiLCJcdTIxMmJcdTIwMzBcdTI2NmZcdTI2NmRcdTI2NmFcdTIwMjBcdTIwMjFceGI2Il0sWyI4MWZjIiwiXHUyNWVmIl0sWyI4MjRmIiwiXHVm''@;'; put 'put ''ZjEwIiw5XSxbIjgyNjAiLCJcdWZmMjEiLDI1XSxbIjgyODEiLCJcdWZmNDEiLDI1XSxbIjgyOWYiLCJcdTMwNDEiLDgyXSxbIjgzNDAiLCJcdTMwYTEiLDYyXSxbIjgzODAiLCJcdTMwZTAiLDIyXSxbIjgzOWYiLCJcdTAzOTEiLDE2LCJcdTAzYTMiLDZdLFsiODNiZiIsIlx1MDNiMSIsMTYs''@;'; put 'put ''Ilx1MDNjMyIsNl0sWyI4NDQwIiwiXHUwNDEwIiw1LCJcdTA0MDFcdTA0MTYiLDI1XSxbIjg0NzAiLCJcdTA0MzAiLDUsIlx1MDQ1MVx1MDQzNiIsN10sWyI4NDgwIiwiXHUwNDNlIiwxN10sWyI4NDlmIiwiXHUyNTAwXHUyNTAyXHUyNTBjXHUyNTEwXHUyNTE4XHUyNTE0XHUyNTFjXHUyNTJj''@;'; put 'put ''XHUyNTI0XHUyNTM0XHUyNTNjXHUyNTAxXHUyNTAzXHUyNTBmXHUyNTEzXHUyNTFiXHUyNTE3XHUyNTIzXHUyNTMzXHUyNTJiXHUyNTNiXHUyNTRiXHUyNTIwXHUyNTJmXHUyNTI4XHUyNTM3XHUyNTNmXHUyNTFkXHUyNTMwXHUyNTI1XHUyNTM4XHUyNTQyIl0sWyI4NzQwIiwiXHUyNDYwIiwx''@;'; put 'put ''OSwiXHUyMTYwIiw5XSxbIjg3NWYiLCJcdTMzNDlcdTMzMTRcdTMzMjJcdTMzNGRcdTMzMThcdTMzMjdcdTMzMDNcdTMzMzZcdTMzNTFcdTMzNTdcdTMzMGRcdTMzMjZcdTMzMjNcdTMzMmJcdTMzNGFcdTMzM2JcdTMzOWNcdTMzOWRcdTMzOWVcdTMzOGVcdTMzOGZcdTMzYzRcdTMzYTEiXSxb''@;'; put 'put ''Ijg3N2UiLCJcdTMzN2IiXSxbIjg3ODAiLCJcdTMwMWRcdTMwMWZcdTIxMTZcdTMzY2RcdTIxMjFcdTMyYTQiLDQsIlx1MzIzMVx1MzIzMlx1MzIzOVx1MzM3ZVx1MzM3ZFx1MzM3Y1x1MjI1Mlx1MjI2MVx1MjIyYlx1MjIyZVx1MjIxMVx1MjIxYVx1MjJhNVx1MjIyMFx1MjIxZlx1MjJiZlx1''@;'; put 'put ''MjIzNVx1MjIyOVx1MjIyYSJdLFsiODg5ZiIsIlx1NGU5Y1x1NTUxNlx1NWEwM1x1OTYzZlx1NTRjMFx1NjExYlx1NjMyOFx1NTlmNlx1OTAyMlx1ODQ3NVx1ODMxY1x1N2E1MFx1NjBhYVx1NjNlMVx1NmUyNVx1NjVlZFx1ODQ2Nlx1ODJhNlx1OWJmNVx1Njg5M1x1NTcyN1x1NjVhMVx1NjI3''@;'; put 'put ''MVx1NWI5Ylx1NTlkMFx1ODY3Ylx1OThmNFx1N2Q2Mlx1N2RiZVx1OWI4ZVx1NjIxNlx1N2M5Zlx1ODhiN1x1NWI4OVx1NWViNVx1NjMwOVx1NjY5N1x1Njg0OFx1OTVjN1x1OTc4ZFx1Njc0Zlx1NGVlNVx1NGYwYVx1NGY0ZFx1NGY5ZFx1NTA0OVx1NTZmMlx1NTkzN1x1NTlkNFx1NWEwMVx1''@;'; put 'put ''NWMwOVx1NjBkZlx1NjEwZlx1NjE3MFx1NjYxM1x1NjkwNVx1NzBiYVx1NzU0Zlx1NzU3MFx1NzlmYlx1N2RhZFx1N2RlZlx1ODBjM1x1ODQwZVx1ODg2M1x1OGIwMlx1OTA1NVx1OTA3YVx1NTMzYlx1NGU5NVx1NGVhNVx1NTdkZlx1ODBiMlx1OTBjMVx1NzhlZlx1NGUwMFx1NThmMVx1NmVh''@;'; put 'put ''Mlx1OTAzOFx1N2EzMlx1ODMyOFx1ODI4Ylx1OWMyZlx1NTE0MVx1NTM3MFx1NTRiZFx1NTRlMVx1NTZlMFx1NTlmYlx1NWYxNVx1OThmMlx1NmRlYlx1ODBlNFx1ODUyZCJdLFsiODk0MCIsIlx1OTY2Mlx1OTY3MFx1OTZhMFx1OTdmYlx1NTQwYlx1NTNmM1x1NWI4N1x1NzBjZlx1N2ZiZFx1''@;'; put 'put ''OGZjMlx1OTZlOFx1NTM2Zlx1OWQ1Y1x1N2FiYVx1NGUxMVx1Nzg5M1x1ODFmY1x1NmUyNlx1NTYxOFx1NTUwNFx1NmIxZFx1ODUxYVx1OWMzYlx1NTllNVx1NTNhOVx1NmQ2Nlx1NzRkY1x1OTU4Zlx1NTY0Mlx1NGU5MVx1OTA0Ylx1OTZmMlx1ODM0Zlx1OTkwY1x1NTNlMVx1NTViNlx1NWIz''@;'; put 'put ''MFx1NWY3MVx1NjYyMFx1NjZmM1x1NjgwNFx1NmMzOFx1NmNmM1x1NmQyOVx1NzQ1Ylx1NzZjOFx1N2E0ZVx1OTgzNFx1ODJmMVx1ODg1Ylx1OGE2MFx1OTJlZFx1NmRiMlx1NzVhYlx1NzZjYVx1OTljNVx1NjBhNlx1OGIwMVx1OGQ4YVx1OTViMlx1Njk4ZVx1NTNhZFx1NTE4NiJdLFsiODk4''@;'; put 'put ''MCIsIlx1NTcxMlx1NTgzMFx1NTk0NFx1NWJiNFx1NWVmNlx1NjAyOFx1NjNhOVx1NjNmNFx1NmNiZlx1NmYxNFx1NzA4ZVx1NzExNFx1NzE1OVx1NzFkNVx1NzMzZlx1N2UwMVx1ODI3Nlx1ODJkMVx1ODU5N1x1OTA2MFx1OTI1Ylx1OWQxYlx1NTg2OVx1NjViY1x1NmM1YVx1NzUyNVx1NTFm''@;'; put 'put ''OVx1NTkyZVx1NTk2NVx1NWY4MFx1NWZkY1x1NjJiY1x1NjVmYVx1NmEyYVx1NmIyN1x1NmJiNFx1NzM4Ylx1N2ZjMVx1ODk1Nlx1OWQyY1x1OWQwZVx1OWVjNFx1NWNhMVx1NmM5Nlx1ODM3Ylx1NTEwNFx1NWM0Ylx1NjFiNlx1ODFjNlx1Njg3Nlx1NzI2MVx1NGU1OVx1NGZmYVx1NTM3OFx1''@;'; put 'put ''NjA2OVx1NmUyOVx1N2E0Zlx1OTdmM1x1NGUwYlx1NTMxNlx1NGVlZVx1NGY1NVx1NGYzZFx1NGZhMVx1NGY3M1x1NTJhMFx1NTNlZlx1NTYwOVx1NTkwZlx1NWFjMVx1NWJiNlx1NWJlMVx1NzlkMVx1NjY4N1x1Njc5Y1x1NjdiNlx1NmI0Y1x1NmNiM1x1NzA2Ylx1NzNjMlx1Nzk4ZFx1Nzli''@;'; put 'put ''ZVx1N2EzY1x1N2I4N1x1ODJiMVx1ODJkYlx1ODMwNFx1ODM3N1x1ODNlZlx1ODNkM1x1ODc2Nlx1OGFiMlx1NTYyOVx1OGNhOFx1OGZlNlx1OTA0ZVx1OTcxZVx1ODY4YVx1NGZjNFx1NWNlOFx1NjIxMVx1NzI1OVx1NzUzYlx1ODFlNVx1ODJiZFx1ODZmZVx1OGNjMFx1OTZjNVx1OTkxM1x1''@;'; put 'put ''OTlkNVx1NGVjYlx1NGYxYVx1ODllM1x1NTZkZVx1NTg0YVx1NThjYVx1NWVmYlx1NWZlYlx1NjAyYVx1NjA5NFx1NjA2Mlx1NjFkMFx1NjIxMlx1NjJkMFx1NjUzOSJdLFsiOGE0MCIsIlx1OWI0MVx1NjY2Nlx1NjhiMFx1NmQ3N1x1NzA3MFx1NzU0Y1x1NzY4Nlx1N2Q3NVx1ODJhNVx1ODdm''@;'; put 'put ''OVx1OTU4Ylx1OTY4ZVx1OGM5ZFx1NTFmMVx1NTJiZVx1NTkxNlx1NTRiM1x1NWJiM1x1NWQxNlx1NjE2OFx1Njk4Mlx1NmRhZlx1Nzg4ZFx1ODRjYlx1ODg1N1x1OGE3Mlx1OTNhN1x1OWFiOFx1NmQ2Y1x1OTlhOFx1ODZkOVx1NTdhM1x1NjdmZlx1ODZjZVx1OTIwZVx1NTI4M1x1NTY4N1x1''@;'; put 'put ''NTQwNFx1NWVkM1x1NjJlMVx1NjRiOVx1NjgzY1x1NjgzOFx1NmJiYlx1NzM3Mlx1NzhiYVx1N2E2Ylx1ODk5YVx1ODlkMlx1OGQ2Ylx1OGYwM1x1OTBlZFx1OTVhM1x1OTY5NFx1OTc2OVx1NWI2Nlx1NWNiM1x1Njk3ZFx1OTg0ZFx1OTg0ZVx1NjM5Ylx1N2IyMFx1NmEyYiJdLFsiOGE4MCIs''@;'; put 'put ''Ilx1NmE3Zlx1NjhiNlx1OWMwZFx1NmY1Zlx1NTI3Mlx1NTU5ZFx1NjA3MFx1NjJlY1x1NmQzYlx1NmUwN1x1NmVkMVx1ODQ1Ylx1ODkxMFx1OGY0NFx1NGUxNFx1OWMzOVx1NTNmNlx1NjkxYlx1NmEzYVx1OTc4NFx1NjgyYVx1NTE1Y1x1N2FjM1x1ODRiMlx1OTFkY1x1OTM4Y1x1NTY1Ylx1''@;'; put 'put ''OWQyOFx1NjgyMlx1ODMwNVx1ODQzMVx1N2NhNVx1NTIwOFx1ODJjNVx1NzRlNlx1NGU3ZVx1NGY4M1x1NTFhMFx1NWJkMlx1NTIwYVx1NTJkOFx1NTJlN1x1NWRmYlx1NTU5YVx1NTgyYVx1NTllNlx1NWI4Y1x1NWI5OFx1NWJkYlx1NWU3Mlx1NWU3OVx1NjBhM1x1NjExZlx1NjE2M1x1NjFi''@;'; put 'put ''ZVx1NjNkYlx1NjU2Mlx1NjdkMVx1Njg1M1x1NjhmYVx1NmIzZVx1NmI1M1x1NmM1N1x1NmYyMlx1NmY5N1x1NmY0NVx1NzRiMFx1NzUxOFx1NzZlM1x1NzcwYlx1N2FmZlx1N2JhMVx1N2MyMVx1N2RlOVx1N2YzNlx1N2ZmMFx1ODA5ZFx1ODI2Nlx1ODM5ZVx1ODliM1x1OGFjY1x1OGNhYlx1''@;'; put 'put ''OTA4NFx1OTQ1MVx1OTU5M1x1OTU5MVx1OTVhMlx1OTY2NVx1OTdkM1x1OTkyOFx1ODIxOFx1NGUzOFx1NTQyYlx1NWNiOFx1NWRjY1x1NzNhOVx1NzY0Y1x1NzczY1x1NWNhOVx1N2ZlYlx1OGQwYlx1OTZjMVx1OTgxMVx1OTg1NFx1OTg1OFx1NGYwMVx1NGYwZVx1NTM3MVx1NTU5Y1x1NTY2''@;'; put 'put ''OFx1NTdmYVx1NTk0N1x1NWIwOVx1NWJjNFx1NWM5MFx1NWUwY1x1NWU3ZVx1NWZjY1x1NjNlZVx1NjczYVx1NjVkN1x1NjVlMlx1NjcxZlx1NjhjYlx1NjhjNCJdLFsiOGI0MCIsIlx1NmE1Zlx1NWUzMFx1NmJjNVx1NmMxN1x1NmM3ZFx1NzU3Zlx1Nzk0OFx1NWI2M1x1N2EwMFx1N2QwMFx1''@;'; put 'put ''NWZiZFx1ODk4Zlx1OGExOFx1OGNiNFx1OGQ3N1x1OGVjY1x1OGYxZFx1OThlMlx1OWEwZVx1OWIzY1x1NGU4MFx1NTA3ZFx1NTEwMFx1NTk5M1x1NWI5Y1x1NjIyZlx1NjI4MFx1NjRlY1x1NmIzYVx1NzJhMFx1NzU5MVx1Nzk0N1x1N2ZhOVx1ODdmYlx1OGFiY1x1OGI3MFx1NjNhY1x1ODNj''@;'; put 'put ''YVx1OTdhMFx1NTQwOVx1NTQwM1x1NTVhYlx1Njg1NFx1NmE1OFx1OGE3MFx1NzgyN1x1Njc3NVx1OWVjZFx1NTM3NFx1NWJhMlx1ODExYVx1ODY1MFx1OTAwNlx1NGUxOFx1NGU0NVx1NGVjN1x1NGYxMVx1NTNjYVx1NTQzOFx1NWJhZVx1NWYxM1x1NjAyNVx1NjU1MSJdLFsiOGI4MCIsIlx1''@;'; put 'put ''NjczZFx1NmM0Mlx1NmM3Mlx1NmNlM1x1NzA3OFx1NzQwM1x1N2E3Nlx1N2FhZVx1N2IwOFx1N2QxYVx1N2NmZVx1N2Q2Nlx1NjVlN1x1NzI1Ylx1NTNiYlx1NWM0NVx1NWRlOFx1NjJkMlx1NjJlMFx1NjMxOVx1NmUyMFx1ODY1YVx1OGEzMVx1OGRkZFx1OTJmOFx1NmYwMVx1NzlhNlx1OWI1''@;'; put 'put ''YVx1NGVhOFx1NGVhYlx1NGVhY1x1NGY5Ylx1NGZhMFx1NTBkMVx1NTE0N1x1N2FmNlx1NTE3MVx1NTFmNlx1NTM1NFx1NTMyMVx1NTM3Zlx1NTNlYlx1NTVhY1x1NTg4M1x1NWNlMVx1NWYzN1x1NWY0YVx1NjAyZlx1NjA1MFx1NjA2ZFx1NjMxZlx1NjU1OVx1NmE0Ylx1NmNjMVx1NzJjMlx1''@;'; put 'put ''NzJlZFx1NzdlZlx1ODBmOFx1ODEwNVx1ODIwOFx1ODU0ZVx1OTBmN1x1OTNlMVx1OTdmZlx1OTk1N1x1OWE1YVx1NGVmMFx1NTFkZFx1NWMyZFx1NjY4MVx1Njk2ZFx1NWM0MFx1NjZmMlx1Njk3NVx1NzM4OVx1Njg1MFx1N2M4MVx1NTBjNVx1NTJlNFx1NTc0N1x1NWRmZVx1OTMyNlx1NjVh''@;'; put 'put ''NFx1NmIyM1x1NmIzZFx1NzQzNFx1Nzk4MVx1NzliZFx1N2I0Ylx1N2RjYVx1ODJiOVx1ODNjY1x1ODg3Zlx1ODk1Zlx1OGIzOVx1OGZkMVx1OTFkMVx1NTQxZlx1OTI4MFx1NGU1ZFx1NTAzNlx1NTNlNVx1NTMzYVx1NzJkN1x1NzM5Nlx1NzdlOVx1ODJlNlx1OGVhZlx1OTljNlx1OTljOFx1''@;'; put 'put ''OTlkMlx1NTE3N1x1NjExYVx1ODY1ZVx1NTViMFx1N2E3YVx1NTA3Nlx1NWJkM1x1OTA0N1x1OTY4NVx1NGUzMlx1NmFkYlx1OTFlN1x1NWM1MVx1NWM0OCJdLFsiOGM0MCIsIlx1NjM5OFx1N2E5Zlx1NmM5M1x1OTc3NFx1OGY2MVx1N2FhYVx1NzE4YVx1OTY4OFx1N2M4Mlx1NjgxN1x1N2U3''@;'; put 'put ''MFx1Njg1MVx1OTM2Y1x1NTJmMlx1NTQxYlx1ODVhYlx1OGExM1x1N2ZhNFx1OGVjZFx1OTBlMVx1NTM2Nlx1ODg4OFx1Nzk0MVx1NGZjMlx1NTBiZVx1NTIxMVx1NTE0NFx1NTU1M1x1NTcyZFx1NzNlYVx1NTc4Ylx1NTk1MVx1NWY2Mlx1NWY4NFx1NjA3NVx1NjE3Nlx1NjE2N1x1NjFhOVx1''@;'; put 'put ''NjNiMlx1NjQzYVx1NjU2Y1x1NjY2Zlx1Njg0Mlx1NmUxM1x1NzU2Nlx1N2EzZFx1N2NmYlx1N2Q0Y1x1N2Q5OVx1N2U0Ylx1N2Y2Ylx1ODMwZVx1ODM0YVx1ODZjZFx1OGEwOFx1OGE2M1x1OGI2Nlx1OGVmZFx1OTgxYVx1OWQ4Zlx1ODJiOFx1OGZjZVx1OWJlOCJdLFsiOGM4MCIsIlx1NTI4''@;'; put 'put ''N1x1NjIxZlx1NjQ4M1x1NmZjMFx1OTY5OVx1Njg0MVx1NTA5MVx1NmIyMFx1NmM3YVx1NmY1NFx1N2E3NFx1N2Q1MFx1ODg0MFx1OGEyM1x1NjcwOFx1NGVmNlx1NTAzOVx1NTAyNlx1NTA2NVx1NTE3Y1x1NTIzOFx1NTI2M1x1NTVhN1x1NTcwZlx1NTgwNVx1NWFjY1x1NWVmYVx1NjFiMlx1''@;'; put 'put ''NjFmOFx1NjJmM1x1NjM3Mlx1NjkxY1x1NmEyOVx1NzI3ZFx1NzJhY1x1NzMyZVx1NzgxNFx1Nzg2Zlx1N2Q3OVx1NzcwY1x1ODBhOVx1ODk4Ylx1OGIxOVx1OGNlMlx1OGVkMlx1OTA2M1x1OTM3NVx1OTY3YVx1OTg1NVx1OWExM1x1OWU3OFx1NTE0M1x1NTM5Zlx1NTNiM1x1NWU3Ylx1NWYy''@;'; put 'put ''Nlx1NmUxYlx1NmU5MFx1NzM4NFx1NzNmZVx1N2Q0M1x1ODIzN1x1OGEwMFx1OGFmYVx1OTY1MFx1NGU0ZVx1NTAwYlx1NTNlNFx1NTQ3Y1x1NTZmYVx1NTlkMVx1NWI2NFx1NWRmMVx1NWVhYlx1NWYyN1x1NjIzOFx1NjU0NVx1NjdhZlx1NmU1Nlx1NzJkMFx1N2NjYVx1ODhiNFx1ODBhMVx1''@;'; put 'put ''ODBlMVx1ODNmMFx1ODY0ZVx1OGE4N1x1OGRlOFx1OTIzN1x1OTZjN1x1OTg2N1x1OWYxM1x1NGU5NFx1NGU5Mlx1NGYwZFx1NTM0OFx1NTQ0OVx1NTQzZVx1NWEyZlx1NWY4Y1x1NWZhMVx1NjA5Zlx1NjhhN1x1NmE4ZVx1NzQ1YVx1Nzg4MVx1OGE5ZVx1OGFhNFx1OGI3N1x1OTE5MFx1NGU1''@;'; put 'put ''ZVx1OWJjOVx1NGVhNFx1NGY3Y1x1NGZhZlx1NTAxOVx1NTAxNlx1NTE0OVx1NTE2Y1x1NTI5Zlx1NTJiOVx1NTJmZVx1NTM5YVx1NTNlM1x1NTQxMSJdLFsiOGQ0MCIsIlx1NTQwZVx1NTU4OVx1NTc1MVx1NTdhMlx1NTk3ZFx1NWI1NFx1NWI1ZFx1NWI4Zlx1NWRlNVx1NWRlN1x1NWRmN1x1''@;'; put 'put ''NWU3OFx1NWU4M1x1NWU5YVx1NWViN1x1NWYxOFx1NjA1Mlx1NjE0Y1x1NjI5N1x1NjJkOFx1NjNhN1x1NjUzYlx1NjYwMlx1NjY0M1x1NjZmNFx1Njc2ZFx1NjgyMVx1Njg5N1x1NjljYlx1NmM1Zlx1NmQyYVx1NmQ2OVx1NmUyZlx1NmU5ZFx1NzUzMlx1NzY4N1x1Nzg2Y1x1N2EzZlx1N2Nl''@;'; put 'put ''MFx1N2QwNVx1N2QxOFx1N2Q1ZVx1N2RiMVx1ODAxNVx1ODAwM1x1ODBhZlx1ODBiMVx1ODE1NFx1ODE4Zlx1ODIyYVx1ODM1Mlx1ODg0Y1x1ODg2MVx1OGIxYlx1OGNhMlx1OGNmY1x1OTBjYVx1OTE3NVx1OTI3MVx1NzgzZlx1OTJmY1x1OTVhNFx1OTY0ZCJdLFsiOGQ4MCIsIlx1OTgwNVx1''@;'; put 'put ''OTk5OVx1OWFkOFx1OWQzYlx1NTI1Ylx1NTJhYlx1NTNmN1x1NTQwOFx1NThkNVx1NjJmN1x1NmZlMFx1OGM2YVx1OGY1Zlx1OWViOVx1NTE0Ylx1NTIzYlx1NTQ0YVx1NTZmZFx1N2E0MFx1OTE3N1x1OWQ2MFx1OWVkMlx1NzM0NFx1NmYwOVx1ODE3MFx1NzUxMVx1NWZmZFx1NjBkYVx1OWFh''@;'; put 'put ''OFx1NzJkYlx1OGZiY1x1NmI2NFx1OTgwM1x1NGVjYVx1NTZmMFx1NTc2NFx1NThiZVx1NWE1YVx1NjA2OFx1NjFjN1x1NjYwZlx1NjYwNlx1NjgzOVx1NjhiMVx1NmRmN1x1NzVkNVx1N2QzYVx1ODI2ZVx1OWI0Mlx1NGU5Ylx1NGY1MFx1NTNjOVx1NTUwNlx1NWQ2Zlx1NWRlNlx1NWRlZVx1''@;'; put 'put ''NjdmYlx1NmM5OVx1NzQ3M1x1NzgwMlx1OGE1MFx1OTM5Nlx1ODhkZlx1NTc1MFx1NWVhN1x1NjMyYlx1NTBiNVx1NTBhY1x1NTE4ZFx1NjcwMFx1NTRjOVx1NTg1ZVx1NTliYlx1NWJiMFx1NWY2OVx1NjI0ZFx1NjNhMVx1NjgzZFx1NmI3M1x1NmUwOFx1NzA3ZFx1OTFjN1x1NzI4MFx1Nzgx''@;'; put 'put ''NVx1NzgyNlx1Nzk2ZFx1NjU4ZVx1N2QzMFx1ODNkY1x1ODhjMVx1OGYwOVx1OTY5Ylx1NTI2NFx1NTcyOFx1Njc1MFx1N2Y2YVx1OGNhMVx1NTFiNFx1NTc0Mlx1OTYyYVx1NTgzYVx1Njk4YVx1ODBiNFx1NTRiMlx1NWQwZVx1NTdmY1x1Nzg5NVx1OWRmYVx1NGY1Y1x1NTI0YVx1NTQ4Ylx1''@;'; put 'put ''NjQzZVx1NjYyOFx1NjcxNFx1NjdmNVx1N2E4NFx1N2I1Nlx1N2QyMlx1OTMyZlx1Njg1Y1x1OWJhZFx1N2IzOVx1NTMxOVx1NTE4YVx1NTIzNyJdLFsiOGU0MCIsIlx1NWJkZlx1NjJmNlx1NjRhZVx1NjRlNlx1NjcyZFx1NmJiYVx1ODVhOVx1OTZkMVx1NzY5MFx1OWJkNlx1NjM0Y1x1OTMw''@;'; put 'put ''Nlx1OWJhYlx1NzZiZlx1NjY1Mlx1NGUwOVx1NTA5OFx1NTNjMlx1NWM3MVx1NjBlOFx1NjQ5Mlx1NjU2M1x1Njg1Zlx1NzFlNlx1NzNjYVx1NzUyM1x1N2I5N1x1N2U4Mlx1ODY5NVx1OGI4M1x1OGNkYlx1OTE3OFx1OTkxMFx1NjVhY1x1NjZhYlx1NmI4Ylx1NGVkNVx1NGVkNFx1NGYzYVx1''@;'; put 'put ''NGY3Zlx1NTIzYVx1NTNmOFx1NTNmMlx1NTVlM1x1NTZkYlx1NThlYlx1NTljYlx1NTljOVx1NTlmZlx1NWI1MFx1NWM0ZFx1NWUwMlx1NWUyYlx1NWZkN1x1NjAxZFx1NjMwN1x1NjUyZlx1NWI1Y1x1NjVhZlx1NjViZFx1NjVlOFx1Njc5ZFx1NmI2MiJdLFsiOGU4MCIsIlx1NmI3Ylx1NmMw''@;'; put 'put ''Zlx1NzM0NVx1Nzk0OVx1NzljMVx1N2NmOFx1N2QxOVx1N2QyYlx1ODBhMlx1ODEwMlx1ODFmM1x1ODk5Nlx1OGE1ZVx1OGE2OVx1OGE2Nlx1OGE4Y1x1OGFlZVx1OGNjN1x1OGNkY1x1OTZjY1x1OThmY1x1NmI2Zlx1NGU4Ylx1NGYzY1x1NGY4ZFx1NTE1MFx1NWI1N1x1NWJmYVx1NjE0OFx1''@;'; put 'put ''NjMwMVx1NjY0Mlx1NmIyMVx1NmVjYlx1NmNiYlx1NzIzZVx1NzRiZFx1NzVkNFx1NzhjMVx1NzkzYVx1ODAwY1x1ODAzM1x1ODFlYVx1ODQ5NFx1OGY5ZVx1NmM1MFx1OWU3Zlx1NWYwZlx1OGI1OFx1OWQyYlx1N2FmYVx1OGVmOFx1NWI4ZFx1OTZlYlx1NGUwM1x1NTNmMVx1NTdmN1x1NTkz''@;'; put 'put ''MVx1NWFjOVx1NWJhNFx1NjA4OVx1NmU3Zlx1NmYwNlx1NzViZVx1OGNlYVx1NWI5Zlx1ODUwMFx1N2JlMFx1NTA3Mlx1NjdmNFx1ODI5ZFx1NWM2MVx1ODU0YVx1N2UxZVx1ODIwZVx1NTE5OVx1NWMwNFx1NjM2OFx1OGQ2Nlx1NjU5Y1x1NzE2ZVx1NzkzZVx1N2QxN1x1ODAwNVx1OGIxZFx1''@;'; put 'put ''OGVjYVx1OTA2ZVx1ODZjN1x1OTBhYVx1NTAxZlx1NTJmYVx1NWMzYVx1Njc1M1x1NzA3Y1x1NzIzNVx1OTE0Y1x1OTFjOFx1OTMyYlx1ODJlNVx1NWJjMlx1NWYzMVx1NjBmOVx1NGUzYlx1NTNkNlx1NWI4OFx1NjI0Ylx1NjczMVx1NmI4YVx1NzJlOVx1NzNlMFx1N2EyZVx1ODE2Ylx1OGRh''@;'; put 'put ''M1x1OTE1Mlx1OTk5Nlx1NTExMlx1NTNkN1x1NTQ2YVx1NWJmZlx1NjM4OFx1NmEzOVx1N2RhY1x1OTcwMFx1NTZkYVx1NTNjZVx1NTQ2OCJdLFsiOGY0MCIsIlx1NWI5N1x1NWMzMVx1NWRkZVx1NGZlZVx1NjEwMVx1NjJmZVx1NmQzMlx1NzljMFx1NzljYlx1N2Q0Mlx1N2U0ZFx1N2ZkMlx1''@;'; put 'put ''ODFlZFx1ODIxZlx1ODQ5MFx1ODg0Nlx1ODk3Mlx1OGI5MFx1OGU3NFx1OGYyZlx1OTAzMVx1OTE0Ylx1OTE2Y1x1OTZjNlx1OTE5Y1x1NGVjMFx1NGY0Zlx1NTE0NVx1NTM0MVx1NWY5M1x1NjIwZVx1NjdkNFx1NmM0MVx1NmUwYlx1NzM2M1x1N2UyNlx1OTFjZFx1OTI4M1x1NTNkNFx1NTkx''@;'; put 'put ''OVx1NWJiZlx1NmRkMVx1Nzk1ZFx1N2UyZVx1N2M5Ylx1NTg3ZVx1NzE5Zlx1NTFmYVx1ODg1M1x1OGZmMFx1NGZjYVx1NWNmYlx1NjYyNVx1NzdhY1x1N2FlM1x1ODIxY1x1OTlmZlx1NTFjNlx1NWZhYVx1NjVlY1x1Njk2Zlx1NmI4OVx1NmRmMyJdLFsiOGY4MCIsIlx1NmU5Nlx1NmY2NFx1''@;'; put 'put ''NzZmZVx1N2QxNFx1NWRlMVx1OTA3NVx1OTE4N1x1OTgwNlx1NTFlNlx1NTIxZFx1NjI0MFx1NjY5MVx1NjZkOVx1NmUxYVx1NWViNlx1N2RkMlx1N2Y3Mlx1NjZmOFx1ODVhZlx1ODVmN1x1OGFmOFx1NTJhOVx1NTNkOVx1NTk3M1x1NWU4Zlx1NWY5MFx1NjA1NVx1OTJlNFx1OTY2NFx1NTBi''@;'; put 'put ''N1x1NTExZlx1NTJkZFx1NTMyMFx1NTM0N1x1NTNlY1x1NTRlOFx1NTU0Nlx1NTUzMVx1NTYxN1x1NTk2OFx1NTliZVx1NWEzY1x1NWJiNVx1NWMwNlx1NWMwZlx1NWMxMVx1NWMxYVx1NWU4NFx1NWU4YVx1NWVlMFx1NWY3MFx1NjI3Zlx1NjI4NFx1NjJkYlx1NjM4Y1x1NjM3N1x1NjYwN1x1''@;'; put 'put ''NjYwY1x1NjYyZFx1NjY3Nlx1Njc3ZVx1NjhhMlx1NmExZlx1NmEzNVx1NmNiY1x1NmQ4OFx1NmUwOVx1NmU1OFx1NzEzY1x1NzEyNlx1NzE2N1x1NzVjN1x1NzcwMVx1Nzg1ZFx1NzkwMVx1Nzk2NVx1NzlmMFx1N2FlMFx1N2IxMVx1N2NhN1x1N2QzOVx1ODA5Nlx1ODNkNlx1ODQ4Ylx1ODU0''@;'; put 'put ''OVx1ODg1ZFx1ODhmM1x1OGExZlx1OGEzY1x1OGE1NFx1OGE3M1x1OGM2MVx1OGNkZVx1OTFhNFx1OTI2Nlx1OTM3ZVx1OTQxOFx1OTY5Y1x1OTc5OFx1NGUwYVx1NGUwOFx1NGUxZVx1NGU1N1x1NTE5N1x1NTI3MFx1NTdjZVx1NTgzNFx1NThjY1x1NWIyMlx1NWUzOFx1NjBjNVx1NjRmZVx1''@;'; put 'put ''Njc2MVx1Njc1Nlx1NmQ0NFx1NzJiNlx1NzU3M1x1N2E2M1x1ODRiOFx1OGI3Mlx1OTFiOFx1OTMyMFx1NTYzMVx1NTdmNFx1OThmZSJdLFsiOTA0MCIsIlx1NjJlZFx1NjkwZFx1NmI5Nlx1NzFlZFx1N2U1NFx1ODA3N1x1ODI3Mlx1ODllNlx1OThkZlx1ODc1NVx1OGZiMVx1NWMzYlx1NGYz''@;'; put 'put ''OFx1NGZlMVx1NGZiNVx1NTUwN1x1NWEyMFx1NWJkZFx1NWJlOVx1NWZjM1x1NjE0ZVx1NjMyZlx1NjViMFx1NjY0Ylx1NjhlZVx1Njk5Ylx1NmQ3OFx1NmRmMVx1NzUzM1x1NzViOVx1NzcxZlx1Nzk1ZVx1NzllNlx1N2QzM1x1ODFlM1x1ODJhZlx1ODVhYVx1ODlhYVx1OGEzYVx1OGVhYlx1''@;'; put 'put ''OGY5Ylx1OTAzMlx1OTFkZFx1OTcwN1x1NGViYVx1NGVjMVx1NTIwM1x1NTg3NVx1NThlY1x1NWMwYlx1NzUxYVx1NWMzZFx1ODE0ZVx1OGEwYVx1OGZjNVx1OTY2M1x1OTc2ZFx1N2IyNVx1OGFjZlx1OTgwOFx1OTE2Mlx1NTZmM1x1NTNhOCJdLFsiOTA4MCIsIlx1OTAxN1x1NTQzOVx1NTc4''@;'; put 'put ''Mlx1NWUyNVx1NjNhOFx1NmMzNFx1NzA4YVx1Nzc2MVx1N2M4Ylx1N2ZlMFx1ODg3MFx1OTA0Mlx1OTE1NFx1OTMxMFx1OTMxOFx1OTY4Zlx1NzQ1ZVx1OWFjNFx1NWQwN1x1NWQ2OVx1NjU3MFx1NjdhMlx1OGRhOFx1OTZkYlx1NjM2ZVx1Njc0OVx1NjkxOVx1ODNjNVx1OTgxN1x1OTZjMFx1''@;'; put 'put ''ODhmZVx1NmY4NFx1NjQ3YVx1NWJmOFx1NGUxNlx1NzAyY1x1NzU1ZFx1NjYyZlx1NTFjNFx1NTIzNlx1NTJlMlx1NTlkM1x1NWY4MVx1NjAyN1x1NjIxMFx1NjUzZlx1NjU3NFx1NjYxZlx1NjY3NFx1NjhmMlx1NjgxNlx1NmI2M1x1NmUwNVx1NzI3Mlx1NzUxZlx1NzZkYlx1N2NiZVx1ODA1''@;'; put 'put ''Nlx1NThmMFx1ODhmZFx1ODk3Zlx1OGFhMFx1OGE5M1x1OGFjYlx1OTAxZFx1OTE5Mlx1OTc1Mlx1OTc1OVx1NjU4OVx1N2EwZVx1ODEwNlx1OTZiYlx1NWUyZFx1NjBkY1x1NjIxYVx1NjVhNVx1NjYxNFx1Njc5MFx1NzdmM1x1N2E0ZFx1N2M0ZFx1N2UzZVx1ODEwYVx1OGNhY1x1OGQ2NFx1''@;'; put 'put ''OGRlMVx1OGU1Zlx1NzhhOVx1NTIwN1x1NjJkOVx1NjNhNVx1NjQ0Mlx1NjI5OFx1OGEyZFx1N2E4M1x1N2JjMFx1OGFhY1x1OTZlYVx1N2Q3Nlx1ODIwY1x1ODc0OVx1NGVkOVx1NTE0OFx1NTM0M1x1NTM2MFx1NWJhM1x1NWMwMlx1NWMxNlx1NWRkZFx1NjIyNlx1NjI0N1x1NjRiMFx1Njgx''@;'; put 'put ''M1x1NjgzNFx1NmNjOVx1NmQ0NVx1NmQxN1x1NjdkM1x1NmY1Y1x1NzE0ZVx1NzE3ZFx1NjVjYlx1N2E3Zlx1N2JhZFx1N2RkYSJdLFsiOTE0MCIsIlx1N2U0YVx1N2ZhOFx1ODE3YVx1ODIxYlx1ODIzOVx1ODVhNlx1OGE2ZVx1OGNjZVx1OGRmNVx1OTA3OFx1OTA3N1x1OTJhZFx1OTI5MVx1''@;'; put 'put ''OTU4M1x1OWJhZVx1NTI0ZFx1NTU4NFx1NmYzOFx1NzEzNlx1NTE2OFx1Nzk4NVx1N2U1NVx1ODFiM1x1N2NjZVx1NTY0Y1x1NTg1MVx1NWNhOFx1NjNhYVx1NjZmZVx1NjZmZFx1Njk1YVx1NzJkOVx1NzU4Zlx1NzU4ZVx1NzkwZVx1Nzk1Nlx1NzlkZlx1N2M5N1x1N2QyMFx1N2Q0NFx1ODYw''@;'; put 'put ''N1x1OGEzNFx1OTYzYlx1OTA2MVx1OWYyMFx1NTBlN1x1NTI3NVx1NTNjY1x1NTNlMlx1NTAwOVx1NTVhYVx1NThlZVx1NTk0Zlx1NzIzZFx1NWI4Ylx1NWM2NFx1NTMxZFx1NjBlM1x1NjBmM1x1NjM1Y1x1NjM4M1x1NjMzZlx1NjNiYiJdLFsiOTE4MCIsIlx1NjRjZFx1NjVlOVx1NjZmOVx1''@;'; put 'put ''NWRlM1x1NjljZFx1NjlmZFx1NmYxNVx1NzFlNVx1NGU4OVx1NzVlOVx1NzZmOFx1N2E5M1x1N2NkZlx1N2RjZlx1N2Q5Y1x1ODA2MVx1ODM0OVx1ODM1OFx1ODQ2Y1x1ODRiY1x1ODVmYlx1ODhjNVx1OGQ3MFx1OTAwMVx1OTA2ZFx1OTM5N1x1OTcxY1x1OWExMlx1NTBjZlx1NTg5N1x1NjE4''@;'; put 'put ''ZVx1ODFkM1x1ODUzNVx1OGQwOFx1OTAyMFx1NGZjM1x1NTA3NFx1NTI0N1x1NTM3M1x1NjA2Zlx1NjM0OVx1Njc1Zlx1NmUyY1x1OGRiM1x1OTAxZlx1NGZkN1x1NWM1ZVx1OGNjYVx1NjVjZlx1N2Q5YVx1NTM1Mlx1ODg5Nlx1NTE3Nlx1NjNjM1x1NWI1OFx1NWI2Ylx1NWMwYVx1NjQwZFx1''@;'; put 'put ''Njc1MVx1OTA1Y1x1NGVkNlx1NTkxYVx1NTkyYVx1NmM3MFx1OGE1MVx1NTUzZVx1NTgxNVx1NTlhNVx1NjBmMFx1NjI1M1x1NjdjMVx1ODIzNVx1Njk1NVx1OTY0MFx1OTljNFx1OWEyOFx1NGY1M1x1NTgwNlx1NWJmZVx1ODAxMFx1NWNiMVx1NWUyZlx1NWY4NVx1NjAyMFx1NjE0Ylx1NjIz''@;'; put 'put ''NFx1NjZmZlx1NmNmMFx1NmVkZVx1ODBjZVx1ODE3Zlx1ODJkNFx1ODg4Ylx1OGNiOFx1OTAwMFx1OTAyZVx1OTY4YVx1OWVkYlx1OWJkYlx1NGVlM1x1NTNmMFx1NTkyN1x1N2IyY1x1OTE4ZFx1OTg0Y1x1OWRmOVx1NmVkZFx1NzAyN1x1NTM1M1x1NTU0NFx1NWI4NVx1NjI1OFx1NjI5ZVx1''@;'; put 'put ''NjJkM1x1NmNhMlx1NmZlZlx1NzQyMlx1OGExN1x1OTQzOFx1NmZjMVx1OGFmZVx1ODMzOFx1NTFlN1x1ODZmOFx1NTNlYSJdLFsiOTI0MCIsIlx1NTNlOVx1NGY0Nlx1OTA1NFx1OGZiMFx1NTk2YVx1ODEzMVx1NWRmZFx1N2FlYVx1OGZiZlx1NjhkYVx1OGMzN1x1NzJmOFx1OWM0OFx1NmEz''@;'; put 'put ''ZFx1OGFiMFx1NGUzOVx1NTM1OFx1NTYwNlx1NTc2Nlx1NjJjNVx1NjNhMlx1NjVlNlx1NmI0ZVx1NmRlMVx1NmU1Ylx1NzBhZFx1NzdlZFx1N2FlZlx1N2JhYVx1N2RiYlx1ODAzZFx1ODBjNlx1ODZjYlx1OGE5NVx1OTM1Ylx1NTZlM1x1NThjN1x1NWYzZVx1NjVhZFx1NjY5Nlx1NmE4MFx1''@;'; put 'put ''NmJiNVx1NzUzN1x1OGFjN1x1NTAyNFx1NzdlNVx1NTczMFx1NWYxYlx1NjA2NVx1NjY3YVx1NmM2MFx1NzVmNFx1N2ExYVx1N2Y2ZVx1ODFmNFx1ODcxOFx1OTA0NVx1OTliM1x1N2JjOVx1NzU1Y1x1N2FmOVx1N2I1MVx1ODRjNCJdLFsiOTI4MCIsIlx1OTAxMFx1NzllOVx1N2E5Mlx1ODMz''@;'; put 'put ''Nlx1NWFlMVx1Nzc0MFx1NGUyZFx1NGVmMlx1NWI5OVx1NWZlMFx1NjJiZFx1NjYzY1x1NjdmMVx1NmNlOFx1ODY2Ylx1ODg3N1x1OGEzYlx1OTE0ZVx1OTJmM1x1OTlkMFx1NmExN1x1NzAyNlx1NzMyYVx1ODJlN1x1ODQ1N1x1OGNhZlx1NGUwMVx1NTE0Nlx1NTFjYlx1NTU4Ylx1NWJmNVx1''@;'; put 'put ''NWUxNlx1NWUzM1x1NWU4MVx1NWYxNFx1NWYzNVx1NWY2Ylx1NWZiNFx1NjFmMlx1NjMxMVx1NjZhMlx1NjcxZFx1NmY2ZVx1NzI1Mlx1NzUzYVx1NzczYVx1ODA3NFx1ODEzOVx1ODE3OFx1ODc3Nlx1OGFiZlx1OGFkY1x1OGQ4NVx1OGRmM1x1OTI5YVx1OTU3N1x1OTgwMlx1OWNlNVx1NTJj''@;'; put 'put ''NVx1NjM1N1x1NzZmNFx1NjcxNVx1NmM4OFx1NzNjZFx1OGNjM1x1OTNhZVx1OTY3M1x1NmQyNVx1NTg5Y1x1NjkwZVx1NjljY1x1OGZmZFx1OTM5YVx1NzVkYlx1OTAxYVx1NTg1YVx1NjgwMlx1NjNiNFx1NjlmYlx1NGY0M1x1NmYyY1x1NjdkOFx1OGZiYlx1ODUyNlx1N2RiNFx1OTM1NFx1''@;'; put 'put ''NjkzZlx1NmY3MFx1NTc2YVx1NThmN1x1NWIyY1x1N2QyY1x1NzIyYVx1NTQwYVx1OTFlM1x1OWRiNFx1NGVhZFx1NGY0ZVx1NTA1Y1x1NTA3NVx1NTI0M1x1OGM5ZVx1NTQ0OFx1NTgyNFx1NWI5YVx1NWUxZFx1NWU5NVx1NWVhZFx1NWVmN1x1NWYxZlx1NjA4Y1x1NjJiNVx1NjMzYVx1NjNk''@;'; put 'put ''MFx1NjhhZlx1NmM0MFx1Nzg4N1x1Nzk4ZVx1N2EwYlx1N2RlMFx1ODI0N1x1OGEwMlx1OGFlNlx1OGU0NFx1OTAxMyJdLFsiOTM0MCIsIlx1OTBiOFx1OTEyZFx1OTFkOFx1OWYwZVx1NmNlNVx1NjQ1OFx1NjRlMlx1NjU3NVx1NmVmNFx1NzY4NFx1N2IxYlx1OTA2OVx1OTNkMVx1NmViYVx1''@;'; put 'put ''NTRmMlx1NWZiOVx1NjRhNFx1OGY0ZFx1OGZlZFx1OTI0NFx1NTE3OFx1NTg2Ylx1NTkyOVx1NWM1NVx1NWU5N1x1NmRmYlx1N2U4Zlx1NzUxY1x1OGNiY1x1OGVlMlx1OTg1Ylx1NzBiOVx1NGYxZFx1NmJiZlx1NmZiMVx1NzUzMFx1OTZmYlx1NTE0ZVx1NTQxMFx1NTgzNVx1NTg1N1x1NTlh''@;'; put 'put ''Y1x1NWM2MFx1NWY5Mlx1NjU5N1x1Njc1Y1x1NmUyMVx1NzY3Ylx1ODNkZlx1OGNlZFx1OTAxNFx1OTBmZFx1OTM0ZFx1NzgyNVx1NzgzYVx1NTJhYVx1NWVhNlx1NTcxZlx1NTk3NFx1NjAxMlx1NTAxMlx1NTE1YVx1NTFhYyJdLFsiOTM4MCIsIlx1NTFjZFx1NTIwMFx1NTUxMFx1NTg1NFx1''@;'; put 'put ''NTg1OFx1NTk1N1x1NWI5NVx1NWNmNlx1NWQ4Ylx1NjBiY1x1NjI5NVx1NjQyZFx1Njc3MVx1Njg0M1x1NjhiY1x1NjhkZlx1NzZkN1x1NmRkOFx1NmU2Zlx1NmQ5Ylx1NzA2Zlx1NzFjOFx1NWY1M1x1NzVkOFx1Nzk3N1x1N2I0OVx1N2I1NFx1N2I1Mlx1N2NkNlx1N2Q3MVx1NTIzMFx1ODQ2''@;'; put 'put ''M1x1ODU2OVx1ODVlNFx1OGEwZVx1OGIwNFx1OGM0Nlx1OGUwZlx1OTAwM1x1OTAwZlx1OTQxOVx1OTY3Nlx1OTgyZFx1OWEzMFx1OTVkOFx1NTBjZFx1NTJkNVx1NTQwY1x1NTgwMlx1NWMwZVx1NjFhN1x1NjQ5ZVx1NmQxZVx1NzdiM1x1N2FlNVx1ODBmNFx1ODQwNFx1OTA1M1x1OTI4NVx1''@;'; put 'put ''NWNlMFx1OWQwN1x1NTMzZlx1NWY5N1x1NWZiM1x1NmQ5Y1x1NzI3OVx1Nzc2M1x1NzliZlx1N2JlNFx1NmJkMlx1NzJlY1x1OGFhZFx1NjgwM1x1NmE2MVx1NTFmOFx1N2E4MVx1NjkzNFx1NWM0YVx1OWNmNlx1ODJlYlx1NWJjNVx1OTE0OVx1NzAxZVx1NTY3OFx1NWM2Zlx1NjBjN1x1NjU2''@;'; put 'put ''Nlx1NmM4Y1x1OGM1YVx1OTA0MVx1OTgxM1x1NTQ1MVx1NjZjN1x1OTIwZFx1NTk0OFx1OTBhM1x1NTE4NVx1NGU0ZFx1NTFlYVx1ODU5OVx1OGIwZVx1NzA1OFx1NjM3YVx1OTM0Ylx1Njk2Mlx1OTliNFx1N2UwNFx1NzU3N1x1NTM1N1x1Njk2MFx1OGVkZlx1OTZlM1x1NmM1ZFx1NGU4Y1x1''@;'; put 'put ''NWMzY1x1NWYxMFx1OGZlOVx1NTMwMlx1OGNkMVx1ODA4OVx1ODY3OVx1NWVmZlx1NjVlNVx1NGU3M1x1NTE2NSJdLFsiOTQ0MCIsIlx1NTk4Mlx1NWMzZlx1OTdlZVx1NGVmYlx1NTk4YVx1NWZjZFx1OGE4ZFx1NmZlMVx1NzliMFx1Nzk2Mlx1NWJlN1x1ODQ3MVx1NzMyYlx1NzFiMVx1NWU3''@;'; put 'put ''NFx1NWZmNVx1NjM3Ylx1NjQ5YVx1NzFjM1x1N2M5OFx1NGU0M1x1NWVmY1x1NGU0Ylx1NTdkY1x1NTZhMlx1NjBhOVx1NmZjM1x1N2QwZFx1ODBmZFx1ODEzM1x1ODFiZlx1OGZiMlx1ODk5N1x1ODZhNFx1NWRmNFx1NjI4YVx1NjRhZFx1ODk4N1x1Njc3N1x1NmNlMlx1NmQzZVx1NzQzNlx1''@;'; put 'put ''NzgzNFx1NWE0Nlx1N2Y3NVx1ODJhZFx1OTlhY1x1NGZmM1x1NWVjM1x1NjJkZFx1NjM5Mlx1NjU1N1x1Njc2Zlx1NzZjM1x1NzI0Y1x1ODBjY1x1ODBiYVx1OGYyOVx1OTE0ZFx1NTAwZFx1NTdmOVx1NWE5Mlx1Njg4NSJdLFsiOTQ4MCIsIlx1Njk3M1x1NzE2NFx1NzJmZFx1OGNiN1x1NThm''@;'; put 'put ''Mlx1OGNlMFx1OTY2YVx1OTAxOVx1ODc3Zlx1NzllNFx1NzdlN1x1ODQyOVx1NGYyZlx1NTI2NVx1NTM1YVx1NjJjZFx1NjdjZlx1NmNjYVx1NzY3ZFx1N2I5NFx1N2M5NVx1ODIzNlx1ODU4NFx1OGZlYlx1NjZkZFx1NmYyMFx1NzIwNlx1N2UxYlx1ODNhYlx1OTljMVx1OWVhNlx1NTFmZFx1''@;'; put 'put ''N2JiMVx1Nzg3Mlx1N2JiOFx1ODA4N1x1N2I0OFx1NmFlOFx1NWU2MVx1ODA4Y1x1NzU1MVx1NzU2MFx1NTE2Ylx1OTI2Mlx1NmU4Y1x1NzY3YVx1OTE5N1x1OWFlYVx1NGYxMFx1N2Y3MFx1NjI5Y1x1N2I0Zlx1OTVhNVx1OWNlOVx1NTY3YVx1NTg1OVx1ODZlNFx1OTZiY1x1NGYzNFx1NTIy''@;'; put 'put ''NFx1NTM0YVx1NTNjZFx1NTNkYlx1NWUwNlx1NjQyY1x1NjU5MVx1Njc3Zlx1NmMzZVx1NmM0ZVx1NzI0OFx1NzJhZlx1NzNlZFx1NzU1NFx1N2U0MVx1ODIyY1x1ODVlOVx1OGNhOVx1N2JjNFx1OTFjNlx1NzE2OVx1OTgxMlx1OThlZlx1NjMzZFx1NjY2OVx1NzU2YVx1NzZlNFx1NzhkMFx1''@;'; put 'put ''ODU0M1x1ODZlZVx1NTMyYVx1NTM1MVx1NTQyNlx1NTk4M1x1NWU4N1x1NWY3Y1x1NjBiMlx1NjI0OVx1NjI3OVx1NjJhYlx1NjU5MFx1NmJkNFx1NmNjY1x1NzViMlx1NzZhZVx1Nzg5MVx1NzlkOFx1N2RjYlx1N2Y3N1x1ODBhNVx1ODhhYlx1OGFiOVx1OGNiYlx1OTA3Zlx1OTc1ZVx1OThk''@;'; put 'put ''Ylx1NmEwYlx1N2MzOFx1NTA5OVx1NWMzZVx1NWZhZVx1Njc4N1x1NmJkOFx1NzQzNVx1NzcwOVx1N2Y4ZSJdLFsiOTU0MCIsIlx1OWYzYlx1NjdjYVx1N2ExN1x1NTMzOVx1NzU4Ylx1OWFlZFx1NWY2Nlx1ODE5ZFx1ODNmMVx1ODA5OFx1NWYzY1x1NWZjNVx1NzU2Mlx1N2I0Nlx1OTAzY1x1''@;'; put 'put ''Njg2N1x1NTllYlx1NWE5Ylx1N2QxMFx1NzY3ZVx1OGIyY1x1NGZmNVx1NWY2YVx1NmExOVx1NmMzN1x1NmYwMlx1NzRlMlx1Nzk2OFx1ODg2OFx1OGE1NVx1OGM3OVx1NWVkZlx1NjNjZlx1NzVjNVx1NzlkMlx1ODJkN1x1OTMyOFx1OTJmMlx1ODQ5Y1x1ODZlZFx1OWMyZFx1NTRjMVx1NWY2''@;'; put 'put ''Y1x1NjU4Y1x1NmQ1Y1x1NzAxNVx1OGNhN1x1OGNkM1x1OTgzYlx1NjU0Zlx1NzRmNlx1NGUwZFx1NGVkOFx1NTdlMFx1NTkyYlx1NWE2Nlx1NWJjY1x1NTFhOFx1NWUwM1x1NWU5Y1x1NjAxNlx1NjI3Nlx1NjU3NyJdLFsiOTU4MCIsIlx1NjVhN1x1NjY2ZVx1NmQ2ZVx1NzIzNlx1N2IyNlx1''@;'; put 'put ''ODE1MFx1ODE5YVx1ODI5OVx1OGI1Y1x1OGNhMFx1OGNlNlx1OGQ3NFx1OTYxY1x1OTY0NFx1NGZhZVx1NjRhYlx1NmI2Nlx1ODIxZVx1ODQ2MVx1ODU2YVx1OTBlOFx1NWMwMVx1Njk1M1x1OThhOFx1ODQ3YVx1ODU1N1x1NGYwZlx1NTI2Zlx1NWZhOVx1NWU0NVx1NjcwZFx1Nzk4Zlx1ODE3''@;'; put 'put ''OVx1ODkwN1x1ODk4Nlx1NmRmNVx1NWYxN1x1NjI1NVx1NmNiOFx1NGVjZlx1NzI2OVx1OWI5Mlx1NTIwNlx1NTQzYlx1NTY3NFx1NThiM1x1NjFhNFx1NjI2ZVx1NzExYVx1NTk2ZVx1N2M4OVx1N2NkZVx1N2QxYlx1OTZmMFx1NjU4N1x1ODA1ZVx1NGUxOVx1NGY3NVx1NTE3NVx1NTg0MFx1''@;'; put 'put ''NWU2M1x1NWU3M1x1NWYwYVx1NjdjNFx1NGUyNlx1ODUzZFx1OTU4OVx1OTY1Ylx1N2M3M1x1OTgwMVx1NTBmYlx1NThjMVx1NzY1Nlx1NzhhN1x1NTIyNVx1NzdhNVx1ODUxMVx1N2I4Nlx1NTA0Zlx1NTkwOVx1NzI0N1x1N2JjN1x1N2RlOFx1OGZiYVx1OGZkNFx1OTA0ZFx1NGZiZlx1NTJj''@;'; put 'put ''OVx1NWEyOVx1NWYwMVx1OTdhZFx1NGZkZFx1ODIxN1x1OTJlYVx1NTcwM1x1NjM1NVx1NmI2OVx1NzUyYlx1ODhkY1x1OGYxNFx1N2E0Mlx1NTJkZlx1NTg5M1x1NjE1NVx1NjIwYVx1NjZhZVx1NmJjZFx1N2MzZlx1ODNlOVx1NTAyM1x1NGZmOFx1NTMwNVx1NTQ0Nlx1NTgzMVx1NTk0OVx1''@;'; put 'put ''NWI5ZFx1NWNmMFx1NWNlZlx1NWQyOVx1NWU5Nlx1NjJiMVx1NjM2N1x1NjUzZVx1NjViOVx1NjcwYiJdLFsiOTY0MCIsIlx1NmNkNVx1NmNlMVx1NzBmOVx1NzgzMlx1N2UyYlx1ODBkZVx1ODJiM1x1ODQwY1x1ODRlY1x1ODcwMlx1ODkxMlx1OGEyYVx1OGM0YVx1OTBhNlx1OTJkMlx1OThm''@;'; put 'put ''ZFx1OWNmM1x1OWQ2Y1x1NGU0Zlx1NGVhMVx1NTA4ZFx1NTI1Nlx1NTc0YVx1NTlhOFx1NWUzZFx1NWZkOFx1NWZkOVx1NjIzZlx1NjZiNFx1NjcxYlx1NjdkMFx1NjhkMlx1NTE5Mlx1N2QyMVx1ODBhYVx1ODFhOFx1OGIwMFx1OGM4Y1x1OGNiZlx1OTI3ZVx1OTYzMlx1NTQyMFx1OTgyY1x1''@;'; put 'put ''NTMxN1x1NTBkNVx1NTM1Y1x1NThhOFx1NjRiMlx1NjczNFx1NzI2N1x1Nzc2Nlx1N2E0Nlx1OTFlNlx1NTJjM1x1NmNhMVx1NmI4Nlx1NTgwMFx1NWU0Y1x1NTk1NFx1NjcyY1x1N2ZmYlx1NTFlMVx1NzZjNiJdLFsiOTY4MCIsIlx1NjQ2OVx1NzhlOFx1OWI1NFx1OWViYlx1NTdjYlx1NTli''@;'; put 'put ''OVx1NjYyN1x1Njc5YVx1NmJjZVx1NTRlOVx1NjlkOVx1NWU1NVx1ODE5Y1x1Njc5NVx1OWJhYVx1NjdmZVx1OWM1Mlx1Njg1ZFx1NGVhNlx1NGZlM1x1NTNjOFx1NjJiOVx1NjcyYlx1NmNhYlx1OGZjNFx1NGZhZFx1N2U2ZFx1OWViZlx1NGUwN1x1NjE2Mlx1NmU4MFx1NmYyYlx1ODUxM1x1''@;'; put 'put ''NTQ3M1x1NjcyYVx1OWI0NVx1NWRmM1x1N2I5NVx1NWNhY1x1NWJjNlx1ODcxY1x1NmU0YVx1ODRkMVx1N2ExNFx1ODEwOFx1NTk5OVx1N2M4ZFx1NmMxMVx1NzcyMFx1NTJkOVx1NTkyMlx1NzEyMVx1NzI1Zlx1NzdkYlx1OTcyN1x1OWQ2MVx1NjkwYlx1NWE3Zlx1NWExOFx1NTFhNVx1NTQw''@;'; put 'put ''ZFx1NTQ3ZFx1NjYwZVx1NzZkZlx1OGZmN1x1OTI5OFx1OWNmNFx1NTllYVx1NzI1ZFx1NmVjNVx1NTE0ZFx1NjhjOVx1N2RiZlx1N2RlY1x1OTc2Mlx1OWViYVx1NjQ3OFx1NmEyMVx1ODMwMlx1NTk4NFx1NWI1Zlx1NmJkYlx1NzMxYlx1NzZmMlx1N2RiMlx1ODAxN1x1ODQ5OVx1NTEzMlx1''@;'; put 'put ''NjcyOFx1OWVkOVx1NzZlZVx1Njc2Mlx1NTJmZlx1OTkwNVx1NWMyNFx1NjIzYlx1N2M3ZVx1OGNiMFx1NTU0Zlx1NjBiNlx1N2QwYlx1OTU4MFx1NTMwMVx1NGU1Zlx1NTFiNlx1NTkxY1x1NzIzYVx1ODAzNlx1OTFjZVx1NWYyNVx1NzdlMlx1NTM4NFx1NWY3OVx1N2QwNFx1ODVhY1x1OGEz''@;'; put 'put ''M1x1OGU4ZFx1OTc1Nlx1NjdmM1x1ODVhZVx1OTQ1M1x1NjEwOVx1NjEwOFx1NmNiOVx1NzY1MiJdLFsiOTc0MCIsIlx1OGFlZFx1OGYzOFx1NTUyZlx1NGY1MVx1NTEyYVx1NTJjN1x1NTNjYlx1NWJhNVx1NWU3ZFx1NjBhMFx1NjE4Mlx1NjNkNlx1NjcwOVx1NjdkYVx1NmU2N1x1NmQ4Y1x1''@;'; put 'put ''NzMzNlx1NzMzN1x1NzUzMVx1Nzk1MFx1ODhkNVx1OGE5OFx1OTA0YVx1OTA5MVx1OTBmNVx1OTZjNFx1ODc4ZFx1NTkxNVx1NGU4OFx1NGY1OVx1NGUwZVx1OGE4OVx1OGYzZlx1OTgxMFx1NTBhZFx1NWU3Y1x1NTk5Nlx1NWJiOVx1NWViOFx1NjNkYVx1NjNmYVx1NjRjMVx1NjZkY1x1Njk0''@;'; put 'put ''YVx1NjlkOFx1NmQwYlx1NmViNlx1NzE5NFx1NzUyOFx1N2FhZlx1N2Y4YVx1ODAwMFx1ODQ0OVx1ODRjOVx1ODk4MVx1OGIyMVx1OGUwYVx1OTA2NVx1OTY3ZFx1OTkwYVx1NjE3ZVx1NjI5MVx1NmIzMiJdLFsiOTc4MCIsIlx1NmM4M1x1NmQ3NFx1N2ZjY1x1N2ZmY1x1NmRjMFx1N2Y4NVx1''@;'; put 'put ''ODdiYVx1ODhmOFx1Njc2NVx1ODNiMVx1OTgzY1x1OTZmN1x1NmQxYlx1N2Q2MVx1ODQzZFx1OTE2YVx1NGU3MVx1NTM3NVx1NWQ1MFx1NmIwNFx1NmZlYlx1ODVjZFx1ODYyZFx1ODlhN1x1NTIyOVx1NTQwZlx1NWM2NVx1Njc0ZVx1NjhhOFx1NzQwNlx1NzQ4M1x1NzVlMlx1ODhjZlx1ODhl''@;'; put 'put ''MVx1OTFjY1x1OTZlMlx1OTY3OFx1NWY4Ylx1NzM4N1x1N2FjYlx1ODQ0ZVx1NjNhMFx1NzU2NVx1NTI4OVx1NmQ0MVx1NmU5Y1x1NzQwOVx1NzU1OVx1Nzg2Ylx1N2M5Mlx1OTY4Nlx1N2FkY1x1OWY4ZFx1NGZiNlx1NjE2ZVx1NjVjNVx1ODY1Y1x1NGU4Nlx1NGVhZVx1NTBkYVx1NGUyMVx1''@;'; put 'put ''NTFjY1x1NWJlZVx1NjU5OVx1Njg4MVx1NmRiY1x1NzMxZlx1NzY0Mlx1NzdhZFx1N2ExY1x1N2NlN1x1ODI2Zlx1OGFkMlx1OTA3Y1x1OTFjZlx1OTY3NVx1OTgxOFx1NTI5Ylx1N2RkMVx1NTAyYlx1NTM5OFx1Njc5N1x1NmRjYlx1NzFkMFx1NzQzM1x1ODFlOFx1OGYyYVx1OTZhM1x1OWM1''@;'; put 'put ''N1x1OWU5Zlx1NzQ2MFx1NTg0MVx1NmQ5OVx1N2QyZlx1OTg1ZVx1NGVlNFx1NGYzNlx1NGY4Ylx1NTFiN1x1NTJiMVx1NWRiYVx1NjAxY1x1NzNiMlx1NzkzY1x1ODJkM1x1OTIzNFx1OTZiN1x1OTZmNlx1OTcwYVx1OWU5N1x1OWY2Mlx1NjZhNlx1NmI3NFx1NTIxN1x1NTJhM1x1NzBjOFx1''@;'; put 'put ''ODhjMlx1NWVjOVx1NjA0Ylx1NjE5MFx1NmYyM1x1NzE0OVx1N2MzZVx1N2RmNFx1ODA2ZiJdLFsiOTg0MCIsIlx1ODRlZVx1OTAyM1x1OTMyY1x1NTQ0Mlx1OWI2Zlx1NmFkM1x1NzA4OVx1OGNjMlx1OGRlZlx1OTczMlx1NTJiNFx1NWE0MVx1NWVjYVx1NWYwNFx1NjcxN1x1Njk3Y1x1Njk5''@;'; put 'put ''NFx1NmQ2YVx1NmYwZlx1NzI2Mlx1NzJmY1x1N2JlZFx1ODAwMVx1ODA3ZVx1ODc0Ylx1OTBjZVx1NTE2ZFx1OWU5M1x1Nzk4NFx1ODA4Ylx1OTMzMlx1OGFkNlx1NTAyZFx1NTQ4Y1x1OGE3MVx1NmI2YVx1OGNjNFx1ODEwN1x1NjBkMVx1NjdhMFx1OWRmMlx1NGU5OVx1NGU5OFx1OWMxMFx1''@;'; put 'put ''OGE2Ylx1ODVjMVx1ODU2OFx1NjkwMFx1NmU3ZVx1Nzg5N1x1ODE1NSJdLFsiOTg5ZiIsIlx1NWYwY1x1NGUxMFx1NGUxNVx1NGUyYVx1NGUzMVx1NGUzNlx1NGUzY1x1NGUzZlx1NGU0Mlx1NGU1Nlx1NGU1OFx1NGU4Mlx1NGU4NVx1OGM2Ylx1NGU4YVx1ODIxMlx1NWYwZFx1NGU4ZVx1NGU5''@;'; put 'put ''ZVx1NGU5Zlx1NGVhMFx1NGVhMlx1NGViMFx1NGViM1x1NGViNlx1NGVjZVx1NGVjZFx1NGVjNFx1NGVjNlx1NGVjMlx1NGVkN1x1NGVkZVx1NGVlZFx1NGVkZlx1NGVmN1x1NGYwOVx1NGY1YVx1NGYzMFx1NGY1Ylx1NGY1ZFx1NGY1N1x1NGY0N1x1NGY3Nlx1NGY4OFx1NGY4Zlx1NGY5OFx1''@;'; put 'put ''NGY3Ylx1NGY2OVx1NGY3MFx1NGY5MVx1NGY2Zlx1NGY4Nlx1NGY5Nlx1NTExOFx1NGZkNFx1NGZkZlx1NGZjZVx1NGZkOFx1NGZkYlx1NGZkMVx1NGZkYVx1NGZkMFx1NGZlNFx1NGZlNVx1NTAxYVx1NTAyOFx1NTAxNFx1NTAyYVx1NTAyNVx1NTAwNVx1NGYxY1x1NGZmNlx1NTAyMVx1NTAy''@;'; put 'put ''OVx1NTAyY1x1NGZmZVx1NGZlZlx1NTAxMVx1NTAwNlx1NTA0M1x1NTA0N1x1NjcwM1x1NTA1NVx1NTA1MFx1NTA0OFx1NTA1YVx1NTA1Nlx1NTA2Y1x1NTA3OFx1NTA4MFx1NTA5YVx1NTA4NVx1NTBiNFx1NTBiMiJdLFsiOTk0MCIsIlx1NTBjOVx1NTBjYVx1NTBiM1x1NTBjMlx1NTBkNlx1''@;'; put 'put ''NTBkZVx1NTBlNVx1NTBlZFx1NTBlM1x1NTBlZVx1NTBmOVx1NTBmNVx1NTEwOVx1NTEwMVx1NTEwMlx1NTExNlx1NTExNVx1NTExNFx1NTExYVx1NTEyMVx1NTEzYVx1NTEzN1x1NTEzY1x1NTEzYlx1NTEzZlx1NTE0MFx1NTE1Mlx1NTE0Y1x1NTE1NFx1NTE2Mlx1N2FmOFx1NTE2OVx1NTE2''@;'; put 'put ''YVx1NTE2ZVx1NTE4MFx1NTE4Mlx1NTZkOFx1NTE4Y1x1NTE4OVx1NTE4Zlx1NTE5MVx1NTE5M1x1NTE5NVx1NTE5Nlx1NTFhNFx1NTFhNlx1NTFhMlx1NTFhOVx1NTFhYVx1NTFhYlx1NTFiM1x1NTFiMVx1NTFiMlx1NTFiMFx1NTFiNVx1NTFiZFx1NTFjNVx1NTFjOVx1NTFkYlx1NTFlMFx1''@;'; put 'put ''ODY1NVx1NTFlOVx1NTFlZCJdLFsiOTk4MCIsIlx1NTFmMFx1NTFmNVx1NTFmZVx1NTIwNFx1NTIwYlx1NTIxNFx1NTIwZVx1NTIyN1x1NTIyYVx1NTIyZVx1NTIzM1x1NTIzOVx1NTI0Zlx1NTI0NFx1NTI0Ylx1NTI0Y1x1NTI1ZVx1NTI1NFx1NTI2YVx1NTI3NFx1NTI2OVx1NTI3M1x1NTI3''@;'; put 'put ''Zlx1NTI3ZFx1NTI4ZFx1NTI5NFx1NTI5Mlx1NTI3MVx1NTI4OFx1NTI5MVx1OGZhOFx1OGZhN1x1NTJhY1x1NTJhZFx1NTJiY1x1NTJiNVx1NTJjMVx1NTJjZFx1NTJkN1x1NTJkZVx1NTJlM1x1NTJlNlx1OThlZFx1NTJlMFx1NTJmM1x1NTJmNVx1NTJmOFx1NTJmOVx1NTMwNlx1NTMwOFx1''@;'; put 'put ''NzUzOFx1NTMwZFx1NTMxMFx1NTMwZlx1NTMxNVx1NTMxYVx1NTMyM1x1NTMyZlx1NTMzMVx1NTMzM1x1NTMzOFx1NTM0MFx1NTM0Nlx1NTM0NVx1NGUxN1x1NTM0OVx1NTM0ZFx1NTFkNlx1NTM1ZVx1NTM2OVx1NTM2ZVx1NTkxOFx1NTM3Ylx1NTM3N1x1NTM4Mlx1NTM5Nlx1NTNhMFx1NTNh''@;'; put 'put ''Nlx1NTNhNVx1NTNhZVx1NTNiMFx1NTNiNlx1NTNjM1x1N2MxMlx1OTZkOVx1NTNkZlx1NjZmY1x1NzFlZVx1NTNlZVx1NTNlOFx1NTNlZFx1NTNmYVx1NTQwMVx1NTQzZFx1NTQ0MFx1NTQyY1x1NTQyZFx1NTQzY1x1NTQyZVx1NTQzNlx1NTQyOVx1NTQxZFx1NTQ0ZVx1NTQ4Zlx1NTQ3NVx1''@;'; put 'put ''NTQ4ZVx1NTQ1Zlx1NTQ3MVx1NTQ3N1x1NTQ3MFx1NTQ5Mlx1NTQ3Ylx1NTQ4MFx1NTQ3Nlx1NTQ4NFx1NTQ5MFx1NTQ4Nlx1NTRjN1x1NTRhMlx1NTRiOFx1NTRhNVx1NTRhY1x1NTRjNFx1NTRjOFx1NTRhOCJdLFsiOWE0MCIsIlx1NTRhYlx1NTRjMlx1NTRhNFx1NTRiZVx1NTRiY1x1NTRk''@;'; put 'put ''OFx1NTRlNVx1NTRlNlx1NTUwZlx1NTUxNFx1NTRmZFx1NTRlZVx1NTRlZFx1NTRmYVx1NTRlMlx1NTUzOVx1NTU0MFx1NTU2M1x1NTU0Y1x1NTUyZVx1NTU1Y1x1NTU0NVx1NTU1Nlx1NTU1N1x1NTUzOFx1NTUzM1x1NTU1ZFx1NTU5OVx1NTU4MFx1NTRhZlx1NTU4YVx1NTU5Zlx1NTU3Ylx1''@;'; put 'put ''NTU3ZVx1NTU5OFx1NTU5ZVx1NTVhZVx1NTU3Y1x1NTU4M1x1NTVhOVx1NTU4N1x1NTVhOFx1NTVkYVx1NTVjNVx1NTVkZlx1NTVjNFx1NTVkY1x1NTVlNFx1NTVkNFx1NTYxNFx1NTVmN1x1NTYxNlx1NTVmZVx1NTVmZFx1NTYxYlx1NTVmOVx1NTY0ZVx1NTY1MFx1NzFkZlx1NTYzNFx1NTYz''@;'; put 'put ''Nlx1NTYzMlx1NTYzOCJdLFsiOWE4MCIsIlx1NTY2Ylx1NTY2NFx1NTYyZlx1NTY2Y1x1NTY2YVx1NTY4Nlx1NTY4MFx1NTY4YVx1NTZhMFx1NTY5NFx1NTY4Zlx1NTZhNVx1NTZhZVx1NTZiNlx1NTZiNFx1NTZjMlx1NTZiY1x1NTZjMVx1NTZjM1x1NTZjMFx1NTZjOFx1NTZjZVx1NTZkMVx1''@;'; put 'put ''NTZkM1x1NTZkN1x1NTZlZVx1NTZmOVx1NTcwMFx1NTZmZlx1NTcwNFx1NTcwOVx1NTcwOFx1NTcwYlx1NTcwZFx1NTcxM1x1NTcxOFx1NTcxNlx1NTVjN1x1NTcxY1x1NTcyNlx1NTczN1x1NTczOFx1NTc0ZVx1NTczYlx1NTc0MFx1NTc0Zlx1NTc2OVx1NTdjMFx1NTc4OFx1NTc2MVx1NTc3''@;'; put 'put ''Zlx1NTc4OVx1NTc5M1x1NTdhMFx1NTdiM1x1NTdhNFx1NTdhYVx1NTdiMFx1NTdjM1x1NTdjNlx1NTdkNFx1NTdkMlx1NTdkM1x1NTgwYVx1NTdkNlx1NTdlM1x1NTgwYlx1NTgxOVx1NTgxZFx1NTg3Mlx1NTgyMVx1NTg2Mlx1NTg0Ylx1NTg3MFx1NmJjMFx1NTg1Mlx1NTgzZFx1NTg3OVx1''@;'; put 'put ''NTg4NVx1NThiOVx1NTg5Zlx1NThhYlx1NThiYVx1NThkZVx1NThiYlx1NThiOFx1NThhZVx1NThjNVx1NThkM1x1NThkMVx1NThkN1x1NThkOVx1NThkOFx1NThlNVx1NThkY1x1NThlNFx1NThkZlx1NThlZlx1NThmYVx1NThmOVx1NThmYlx1NThmY1x1NThmZFx1NTkwMlx1NTkwYVx1NTkx''@;'; put 'put ''MFx1NTkxYlx1NjhhNlx1NTkyNVx1NTkyY1x1NTkyZFx1NTkzMlx1NTkzOFx1NTkzZVx1N2FkMlx1NTk1NVx1NTk1MFx1NTk0ZVx1NTk1YVx1NTk1OFx1NTk2Mlx1NTk2MFx1NTk2N1x1NTk2Y1x1NTk2OSJdLFsiOWI0MCIsIlx1NTk3OFx1NTk4MVx1NTk5ZFx1NGY1ZVx1NGZhYlx1NTlhM1x1''@;'; put 'put ''NTliMlx1NTljNlx1NTllOFx1NTlkY1x1NTk4ZFx1NTlkOVx1NTlkYVx1NWEyNVx1NWExZlx1NWExMVx1NWExY1x1NWEwOVx1NWExYVx1NWE0MFx1NWE2Y1x1NWE0OVx1NWEzNVx1NWEzNlx1NWE2Mlx1NWE2YVx1NWE5YVx1NWFiY1x1NWFiZVx1NWFjYlx1NWFjMlx1NWFiZFx1NWFlM1x1NWFk''@;'; put 'put ''N1x1NWFlNlx1NWFlOVx1NWFkNlx1NWFmYVx1NWFmYlx1NWIwY1x1NWIwYlx1NWIxNlx1NWIzMlx1NWFkMFx1NWIyYVx1NWIzNlx1NWIzZVx1NWI0M1x1NWI0NVx1NWI0MFx1NWI1MVx1NWI1NVx1NWI1YVx1NWI1Ylx1NWI2NVx1NWI2OVx1NWI3MFx1NWI3M1x1NWI3NVx1NWI3OFx1NjU4OFx1''@;'; put 'put ''NWI3YVx1NWI4MCJdLFsiOWI4MCIsIlx1NWI4M1x1NWJhNlx1NWJiOFx1NWJjM1x1NWJjN1x1NWJjOVx1NWJkNFx1NWJkMFx1NWJlNFx1NWJlNlx1NWJlMlx1NWJkZVx1NWJlNVx1NWJlYlx1NWJmMFx1NWJmNlx1NWJmM1x1NWMwNVx1NWMwN1x1NWMwOFx1NWMwZFx1NWMxM1x1NWMyMFx1NWMy''@;'; put 'put ''Mlx1NWMyOFx1NWMzOFx1NWMzOVx1NWM0MVx1NWM0Nlx1NWM0ZVx1NWM1M1x1NWM1MFx1NWM0Zlx1NWI3MVx1NWM2Y1x1NWM2ZVx1NGU2Mlx1NWM3Nlx1NWM3OVx1NWM4Y1x1NWM5MVx1NWM5NFx1NTk5Ylx1NWNhYlx1NWNiYlx1NWNiNlx1NWNiY1x1NWNiN1x1NWNjNVx1NWNiZVx1NWNjN1x1''@;'; put 'put ''NWNkOVx1NWNlOVx1NWNmZFx1NWNmYVx1NWNlZFx1NWQ4Y1x1NWNlYVx1NWQwYlx1NWQxNVx1NWQxN1x1NWQ1Y1x1NWQxZlx1NWQxYlx1NWQxMVx1NWQxNFx1NWQyMlx1NWQxYVx1NWQxOVx1NWQxOFx1NWQ0Y1x1NWQ1Mlx1NWQ0ZVx1NWQ0Ylx1NWQ2Y1x1NWQ3M1x1NWQ3Nlx1NWQ4N1x1NWQ4''@;'; put 'put ''NFx1NWQ4Mlx1NWRhMlx1NWQ5ZFx1NWRhY1x1NWRhZVx1NWRiZFx1NWQ5MFx1NWRiN1x1NWRiY1x1NWRjOVx1NWRjZFx1NWRkM1x1NWRkMlx1NWRkNlx1NWRkYlx1NWRlYlx1NWRmMlx1NWRmNVx1NWUwYlx1NWUxYVx1NWUxOVx1NWUxMVx1NWUxYlx1NWUzNlx1NWUzN1x1NWU0NFx1NWU0M1x1''@;'; put 'put ''NWU0MFx1NWU0ZVx1NWU1N1x1NWU1NFx1NWU1Zlx1NWU2Mlx1NWU2NFx1NWU0N1x1NWU3NVx1NWU3Nlx1NWU3YVx1OWViY1x1NWU3Zlx1NWVhMFx1NWVjMVx1NWVjMlx1NWVjOFx1NWVkMFx1NWVjZiJdLFsiOWM0MCIsIlx1NWVkNlx1NWVlM1x1NWVkZFx1NWVkYVx1NWVkYlx1NWVlMlx1NWVl''@;'; put 'put ''MVx1NWVlOFx1NWVlOVx1NWVlY1x1NWVmMVx1NWVmM1x1NWVmMFx1NWVmNFx1NWVmOFx1NWVmZVx1NWYwM1x1NWYwOVx1NWY1ZFx1NWY1Y1x1NWYwYlx1NWYxMVx1NWYxNlx1NWYyOVx1NWYyZFx1NWYzOFx1NWY0MVx1NWY0OFx1NWY0Y1x1NWY0ZVx1NWYyZlx1NWY1MVx1NWY1Nlx1NWY1N1x1''@;'; put 'put ''NWY1OVx1NWY2MVx1NWY2ZFx1NWY3M1x1NWY3N1x1NWY4M1x1NWY4Mlx1NWY3Zlx1NWY4YVx1NWY4OFx1NWY5MVx1NWY4N1x1NWY5ZVx1NWY5OVx1NWY5OFx1NWZhMFx1NWZhOFx1NWZhZFx1NWZiY1x1NWZkNlx1NWZmYlx1NWZlNFx1NWZmOFx1NWZmMVx1NWZkZFx1NjBiM1x1NWZmZlx1NjAy''@;'; put 'put ''MVx1NjA2MCJdLFsiOWM4MCIsIlx1NjAxOVx1NjAxMFx1NjAyOVx1NjAwZVx1NjAzMVx1NjAxYlx1NjAxNVx1NjAyYlx1NjAyNlx1NjAwZlx1NjAzYVx1NjA1YVx1NjA0MVx1NjA2YVx1NjA3N1x1NjA1Zlx1NjA0YVx1NjA0Nlx1NjA0ZFx1NjA2M1x1NjA0M1x1NjA2NFx1NjA0Mlx1NjA2Y1x1''@;'; put 'put ''NjA2Ylx1NjA1OVx1NjA4MVx1NjA4ZFx1NjBlN1x1NjA4M1x1NjA5YVx1NjA4NFx1NjA5Ylx1NjA5Nlx1NjA5N1x1NjA5Mlx1NjBhN1x1NjA4Ylx1NjBlMVx1NjBiOFx1NjBlMFx1NjBkM1x1NjBiNFx1NWZmMFx1NjBiZFx1NjBjNlx1NjBiNVx1NjBkOFx1NjE0ZFx1NjExNVx1NjEwNlx1NjBm''@;'; put 'put ''Nlx1NjBmN1x1NjEwMFx1NjBmNFx1NjBmYVx1NjEwM1x1NjEyMVx1NjBmYlx1NjBmMVx1NjEwZFx1NjEwZVx1NjE0N1x1NjEzZVx1NjEyOFx1NjEyN1x1NjE0YVx1NjEzZlx1NjEzY1x1NjEyY1x1NjEzNFx1NjEzZFx1NjE0Mlx1NjE0NFx1NjE3M1x1NjE3N1x1NjE1OFx1NjE1OVx1NjE1YVx1''@;'; put 'put ''NjE2Ylx1NjE3NFx1NjE2Zlx1NjE2NVx1NjE3MVx1NjE1Zlx1NjE1ZFx1NjE1M1x1NjE3NVx1NjE5OVx1NjE5Nlx1NjE4N1x1NjFhY1x1NjE5NFx1NjE5YVx1NjE4YVx1NjE5MVx1NjFhYlx1NjFhZVx1NjFjY1x1NjFjYVx1NjFjOVx1NjFmN1x1NjFjOFx1NjFjM1x1NjFjNlx1NjFiYVx1NjFj''@;'; put 'put ''Ylx1N2Y3OVx1NjFjZFx1NjFlNlx1NjFlM1x1NjFmNlx1NjFmYVx1NjFmNFx1NjFmZlx1NjFmZFx1NjFmY1x1NjFmZVx1NjIwMFx1NjIwOFx1NjIwOVx1NjIwZFx1NjIwY1x1NjIxNFx1NjIxYiJdLFsiOWQ0MCIsIlx1NjIxZVx1NjIyMVx1NjIyYVx1NjIyZVx1NjIzMFx1NjIzMlx1NjIzM1x1''@;'; put 'put ''NjI0MVx1NjI0ZVx1NjI1ZVx1NjI2M1x1NjI1Ylx1NjI2MFx1NjI2OFx1NjI3Y1x1NjI4Mlx1NjI4OVx1NjI3ZVx1NjI5Mlx1NjI5M1x1NjI5Nlx1NjJkNFx1NjI4M1x1NjI5NFx1NjJkN1x1NjJkMVx1NjJiYlx1NjJjZlx1NjJmZlx1NjJjNlx1NjRkNFx1NjJjOFx1NjJkY1x1NjJjY1x1NjJj''@;'; put 'put ''YVx1NjJjMlx1NjJjN1x1NjI5Ylx1NjJjOVx1NjMwY1x1NjJlZVx1NjJmMVx1NjMyN1x1NjMwMlx1NjMwOFx1NjJlZlx1NjJmNVx1NjM1MFx1NjMzZVx1NjM0ZFx1NjQxY1x1NjM0Zlx1NjM5Nlx1NjM4ZVx1NjM4MFx1NjNhYlx1NjM3Nlx1NjNhM1x1NjM4Zlx1NjM4OVx1NjM5Zlx1NjNiNVx1''@;'; put 'put ''NjM2YiJdLFsiOWQ4MCIsIlx1NjM2OVx1NjNiZVx1NjNlOVx1NjNjMFx1NjNjNlx1NjNlM1x1NjNjOVx1NjNkMlx1NjNmNlx1NjNjNFx1NjQxNlx1NjQzNFx1NjQwNlx1NjQxM1x1NjQyNlx1NjQzNlx1NjUxZFx1NjQxN1x1NjQyOFx1NjQwZlx1NjQ2N1x1NjQ2Zlx1NjQ3Nlx1NjQ0ZVx1NjUy''@;'; put 'put ''YVx1NjQ5NVx1NjQ5M1x1NjRhNVx1NjRhOVx1NjQ4OFx1NjRiY1x1NjRkYVx1NjRkMlx1NjRjNVx1NjRjN1x1NjRiYlx1NjRkOFx1NjRjMlx1NjRmMVx1NjRlN1x1ODIwOVx1NjRlMFx1NjRlMVx1NjJhY1x1NjRlM1x1NjRlZlx1NjUyY1x1NjRmNlx1NjRmNFx1NjRmMlx1NjRmYVx1NjUwMFx1''@;'; put 'put ''NjRmZFx1NjUxOFx1NjUxY1x1NjUwNVx1NjUyNFx1NjUyM1x1NjUyYlx1NjUzNFx1NjUzNVx1NjUzN1x1NjUzNlx1NjUzOFx1NzU0Ylx1NjU0OFx1NjU1Nlx1NjU1NVx1NjU0ZFx1NjU1OFx1NjU1ZVx1NjU1ZFx1NjU3Mlx1NjU3OFx1NjU4Mlx1NjU4M1x1OGI4YVx1NjU5Ylx1NjU5Zlx1NjVh''@;'; put 'put ''Ylx1NjViN1x1NjVjM1x1NjVjNlx1NjVjMVx1NjVjNFx1NjVjY1x1NjVkMlx1NjVkYlx1NjVkOVx1NjVlMFx1NjVlMVx1NjVmMVx1Njc3Mlx1NjYwYVx1NjYwM1x1NjVmYlx1Njc3M1x1NjYzNVx1NjYzNlx1NjYzNFx1NjYxY1x1NjY0Zlx1NjY0NFx1NjY0OVx1NjY0MVx1NjY1ZVx1NjY1ZFx1''@;'; put 'put ''NjY2NFx1NjY2N1x1NjY2OFx1NjY1Zlx1NjY2Mlx1NjY3MFx1NjY4M1x1NjY4OFx1NjY4ZVx1NjY4OVx1NjY4NFx1NjY5OFx1NjY5ZFx1NjZjMVx1NjZiOVx1NjZjOVx1NjZiZVx1NjZiYyJdLFsiOWU0MCIsIlx1NjZjNFx1NjZiOFx1NjZkNlx1NjZkYVx1NjZlMFx1NjYzZlx1NjZlNlx1NjZl''@;'; put 'put ''OVx1NjZmMFx1NjZmNVx1NjZmN1x1NjcwZlx1NjcxNlx1NjcxZVx1NjcyNlx1NjcyN1x1OTczOFx1NjcyZVx1NjczZlx1NjczNlx1Njc0MVx1NjczOFx1NjczN1x1Njc0Nlx1Njc1ZVx1Njc2MFx1Njc1OVx1Njc2M1x1Njc2NFx1Njc4OVx1Njc3MFx1NjdhOVx1Njc3Y1x1Njc2YVx1Njc4Y1x1''@;'; put 'put ''Njc4Ylx1NjdhNlx1NjdhMVx1Njc4NVx1NjdiN1x1NjdlZlx1NjdiNFx1NjdlY1x1NjdiM1x1NjdlOVx1NjdiOFx1NjdlNFx1NjdkZVx1NjdkZFx1NjdlMlx1NjdlZVx1NjdiOVx1NjdjZVx1NjdjNlx1NjdlN1x1NmE5Y1x1NjgxZVx1Njg0Nlx1NjgyOVx1Njg0MFx1Njg0ZFx1NjgzMlx1Njg0''@;'; put 'put ''ZSJdLFsiOWU4MCIsIlx1NjhiM1x1NjgyYlx1Njg1OVx1Njg2M1x1Njg3N1x1Njg3Zlx1Njg5Zlx1Njg4Zlx1NjhhZFx1Njg5NFx1Njg5ZFx1Njg5Ylx1Njg4M1x1NmFhZVx1NjhiOVx1Njg3NFx1NjhiNVx1NjhhMFx1NjhiYVx1NjkwZlx1Njg4ZFx1Njg3ZVx1NjkwMVx1NjhjYVx1NjkwOFx1''@;'; put 'put ''NjhkOFx1NjkyMlx1NjkyNlx1NjhlMVx1NjkwY1x1NjhjZFx1NjhkNFx1NjhlN1x1NjhkNVx1NjkzNlx1NjkxMlx1NjkwNFx1NjhkN1x1NjhlM1x1NjkyNVx1NjhmOVx1NjhlMFx1NjhlZlx1NjkyOFx1NjkyYVx1NjkxYVx1NjkyM1x1NjkyMVx1NjhjNlx1Njk3OVx1Njk3N1x1Njk1Y1x1Njk3''@;'; put 'put ''OFx1Njk2Ylx1Njk1NFx1Njk3ZVx1Njk2ZVx1NjkzOVx1Njk3NFx1NjkzZFx1Njk1OVx1NjkzMFx1Njk2MVx1Njk1ZVx1Njk1ZFx1Njk4MVx1Njk2YVx1NjliMlx1NjlhZVx1NjlkMFx1NjliZlx1NjljMVx1NjlkM1x1NjliZVx1NjljZVx1NWJlOFx1NjljYVx1NjlkZFx1NjliYlx1NjljM1x1''@;'; put 'put ''NjlhN1x1NmEyZVx1Njk5MVx1NjlhMFx1Njk5Y1x1Njk5NVx1NjliNFx1NjlkZVx1NjllOFx1NmEwMlx1NmExYlx1NjlmZlx1NmIwYVx1NjlmOVx1NjlmMlx1NjllN1x1NmEwNVx1NjliMVx1NmExZVx1NjllZFx1NmExNFx1NjllYlx1NmEwYVx1NmExMlx1NmFjMVx1NmEyM1x1NmExM1x1NmE0''@;'; put 'put ''NFx1NmEwY1x1NmE3Mlx1NmEzNlx1NmE3OFx1NmE0N1x1NmE2Mlx1NmE1OVx1NmE2Nlx1NmE0OFx1NmEzOFx1NmEyMlx1NmE5MFx1NmE4ZFx1NmFhMFx1NmE4NFx1NmFhMlx1NmFhMyJdLFsiOWY0MCIsIlx1NmE5N1x1ODYxN1x1NmFiYlx1NmFjM1x1NmFjMlx1NmFiOFx1NmFiM1x1NmFhY1x1''@;'; put 'put ''NmFkZVx1NmFkMVx1NmFkZlx1NmFhYVx1NmFkYVx1NmFlYVx1NmFmYlx1NmIwNVx1ODYxNlx1NmFmYVx1NmIxMlx1NmIxNlx1OWIzMVx1NmIxZlx1NmIzOFx1NmIzN1x1NzZkY1x1NmIzOVx1OThlZVx1NmI0N1x1NmI0M1x1NmI0OVx1NmI1MFx1NmI1OVx1NmI1NFx1NmI1Ylx1NmI1Zlx1NmI2''@;'; put 'put ''MVx1NmI3OFx1NmI3OVx1NmI3Zlx1NmI4MFx1NmI4NFx1NmI4M1x1NmI4ZFx1NmI5OFx1NmI5NVx1NmI5ZVx1NmJhNFx1NmJhYVx1NmJhYlx1NmJhZlx1NmJiMlx1NmJiMVx1NmJiM1x1NmJiN1x1NmJiY1x1NmJjNlx1NmJjYlx1NmJkM1x1NmJkZlx1NmJlY1x1NmJlYlx1NmJmM1x1NmJlZiJd''@;'; put 'put ''LFsiOWY4MCIsIlx1OWViZVx1NmMwOFx1NmMxM1x1NmMxNFx1NmMxYlx1NmMyNFx1NmMyM1x1NmM1ZVx1NmM1NVx1NmM2Mlx1NmM2YVx1NmM4Mlx1NmM4ZFx1NmM5YVx1NmM4MVx1NmM5Ylx1NmM3ZVx1NmM2OFx1NmM3M1x1NmM5Mlx1NmM5MFx1NmNjNFx1NmNmMVx1NmNkM1x1NmNiZFx1NmNk''@;'; put 'put ''N1x1NmNjNVx1NmNkZFx1NmNhZVx1NmNiMVx1NmNiZVx1NmNiYVx1NmNkYlx1NmNlZlx1NmNkOVx1NmNlYVx1NmQxZlx1ODg0ZFx1NmQzNlx1NmQyYlx1NmQzZFx1NmQzOFx1NmQxOVx1NmQzNVx1NmQzM1x1NmQxMlx1NmQwY1x1NmQ2M1x1NmQ5M1x1NmQ2NFx1NmQ1YVx1NmQ3OVx1NmQ1OVx1''@;'; put 'put ''NmQ4ZVx1NmQ5NVx1NmZlNFx1NmQ4NVx1NmRmOVx1NmUxNVx1NmUwYVx1NmRiNVx1NmRjN1x1NmRlNlx1NmRiOFx1NmRjNlx1NmRlY1x1NmRkZVx1NmRjY1x1NmRlOFx1NmRkMlx1NmRjNVx1NmRmYVx1NmRkOVx1NmRlNFx1NmRkNVx1NmRlYVx1NmRlZVx1NmUyZFx1NmU2ZVx1NmUyZVx1NmUx''@;'; put 'put ''OVx1NmU3Mlx1NmU1Zlx1NmUzZVx1NmUyM1x1NmU2Ylx1NmUyYlx1NmU3Nlx1NmU0ZFx1NmUxZlx1NmU0M1x1NmUzYVx1NmU0ZVx1NmUyNFx1NmVmZlx1NmUxZFx1NmUzOFx1NmU4Mlx1NmVhYVx1NmU5OFx1NmVjOVx1NmViN1x1NmVkM1x1NmViZFx1NmVhZlx1NmVjNFx1NmViMlx1NmVkNFx1''@;'; put 'put ''NmVkNVx1NmU4Zlx1NmVhNVx1NmVjMlx1NmU5Zlx1NmY0MVx1NmYxMVx1NzA0Y1x1NmVlY1x1NmVmOFx1NmVmZVx1NmYzZlx1NmVmMlx1NmYzMVx1NmVlZlx1NmYzMlx1NmVjYyJdLFsiZTA0MCIsIlx1NmYzZVx1NmYxM1x1NmVmN1x1NmY4Nlx1NmY3YVx1NmY3OFx1NmY4MVx1NmY4MFx1NmY2''@;'; put 'put ''Zlx1NmY1Ylx1NmZmM1x1NmY2ZFx1NmY4Mlx1NmY3Y1x1NmY1OFx1NmY4ZVx1NmY5MVx1NmZjMlx1NmY2Nlx1NmZiM1x1NmZhM1x1NmZhMVx1NmZhNFx1NmZiOVx1NmZjNlx1NmZhYVx1NmZkZlx1NmZkNVx1NmZlY1x1NmZkNFx1NmZkOFx1NmZmMVx1NmZlZVx1NmZkYlx1NzAwOVx1NzAwYlx1''@;'; put 'put ''NmZmYVx1NzAxMVx1NzAwMVx1NzAwZlx1NmZmZVx1NzAxYlx1NzAxYVx1NmY3NFx1NzAxZFx1NzAxOFx1NzAxZlx1NzAzMFx1NzAzZVx1NzAzMlx1NzA1MVx1NzA2M1x1NzA5OVx1NzA5Mlx1NzBhZlx1NzBmMVx1NzBhY1x1NzBiOFx1NzBiM1x1NzBhZVx1NzBkZlx1NzBjYlx1NzBkZCJdLFsi''@;'; put 'put ''ZTA4MCIsIlx1NzBkOVx1NzEwOVx1NzBmZFx1NzExY1x1NzExOVx1NzE2NVx1NzE1NVx1NzE4OFx1NzE2Nlx1NzE2Mlx1NzE0Y1x1NzE1Nlx1NzE2Y1x1NzE4Zlx1NzFmYlx1NzE4NFx1NzE5NVx1NzFhOFx1NzFhY1x1NzFkN1x1NzFiOVx1NzFiZVx1NzFkMlx1NzFjOVx1NzFkNFx1NzFjZVx1''@;'; put 'put ''NzFlMFx1NzFlY1x1NzFlN1x1NzFmNVx1NzFmY1x1NzFmOVx1NzFmZlx1NzIwZFx1NzIxMFx1NzIxYlx1NzIyOFx1NzIyZFx1NzIyY1x1NzIzMFx1NzIzMlx1NzIzYlx1NzIzY1x1NzIzZlx1NzI0MFx1NzI0Nlx1NzI0Ylx1NzI1OFx1NzI3NFx1NzI3ZVx1NzI4Mlx1NzI4MVx1NzI4N1x1NzI5''@;'; put 'put ''Mlx1NzI5Nlx1NzJhMlx1NzJhN1x1NzJiOVx1NzJiMlx1NzJjM1x1NzJjNlx1NzJjNFx1NzJjZVx1NzJkMlx1NzJlMlx1NzJlMFx1NzJlMVx1NzJmOVx1NzJmN1x1NTAwZlx1NzMxN1x1NzMwYVx1NzMxY1x1NzMxNlx1NzMxZFx1NzMzNFx1NzMyZlx1NzMyOVx1NzMyNVx1NzMzZVx1NzM0ZVx1''@;'; put 'put ''NzM0Zlx1OWVkOFx1NzM1N1x1NzM2YVx1NzM2OFx1NzM3MFx1NzM3OFx1NzM3NVx1NzM3Ylx1NzM3YVx1NzNjOFx1NzNiM1x1NzNjZVx1NzNiYlx1NzNjMFx1NzNlNVx1NzNlZVx1NzNkZVx1NzRhMlx1NzQwNVx1NzQ2Zlx1NzQyNVx1NzNmOFx1NzQzMlx1NzQzYVx1NzQ1NVx1NzQzZlx1NzQ1''@;'; put 'put ''Zlx1NzQ1OVx1NzQ0MVx1NzQ1Y1x1NzQ2OVx1NzQ3MFx1NzQ2M1x1NzQ2YVx1NzQ3Nlx1NzQ3ZVx1NzQ4Ylx1NzQ5ZVx1NzRhN1x1NzRjYVx1NzRjZlx1NzRkNFx1NzNmMSJdLFsiZTE0MCIsIlx1NzRlMFx1NzRlM1x1NzRlN1x1NzRlOVx1NzRlZVx1NzRmMlx1NzRmMFx1NzRmMVx1NzRmOFx1''@;'; put 'put ''NzRmN1x1NzUwNFx1NzUwM1x1NzUwNVx1NzUwY1x1NzUwZVx1NzUwZFx1NzUxNVx1NzUxM1x1NzUxZVx1NzUyNlx1NzUyY1x1NzUzY1x1NzU0NFx1NzU0ZFx1NzU0YVx1NzU0OVx1NzU1Ylx1NzU0Nlx1NzU1YVx1NzU2OVx1NzU2NFx1NzU2N1x1NzU2Ylx1NzU2ZFx1NzU3OFx1NzU3Nlx1NzU4''@;'; put 'put ''Nlx1NzU4N1x1NzU3NFx1NzU4YVx1NzU4OVx1NzU4Mlx1NzU5NFx1NzU5YVx1NzU5ZFx1NzVhNVx1NzVhM1x1NzVjMlx1NzViM1x1NzVjM1x1NzViNVx1NzViZFx1NzViOFx1NzViY1x1NzViMVx1NzVjZFx1NzVjYVx1NzVkMlx1NzVkOVx1NzVlM1x1NzVkZVx1NzVmZVx1NzVmZiJdLFsiZTE4''@;'; put 'put ''MCIsIlx1NzVmY1x1NzYwMVx1NzVmMFx1NzVmYVx1NzVmMlx1NzVmM1x1NzYwYlx1NzYwZFx1NzYwOVx1NzYxZlx1NzYyN1x1NzYyMFx1NzYyMVx1NzYyMlx1NzYyNFx1NzYzNFx1NzYzMFx1NzYzYlx1NzY0N1x1NzY0OFx1NzY0Nlx1NzY1Y1x1NzY1OFx1NzY2MVx1NzY2Mlx1NzY2OFx1NzY2''@;'; put 'put ''OVx1NzY2YVx1NzY2N1x1NzY2Y1x1NzY3MFx1NzY3Mlx1NzY3Nlx1NzY3OFx1NzY3Y1x1NzY4MFx1NzY4M1x1NzY4OFx1NzY4Ylx1NzY4ZVx1NzY5Nlx1NzY5M1x1NzY5OVx1NzY5YVx1NzZiMFx1NzZiNFx1NzZiOFx1NzZiOVx1NzZiYVx1NzZjMlx1NzZjZFx1NzZkNlx1NzZkMlx1NzZkZVx1''@;'; put 'put ''NzZlMVx1NzZlNVx1NzZlN1x1NzZlYVx1ODYyZlx1NzZmYlx1NzcwOFx1NzcwN1x1NzcwNFx1NzcyOVx1NzcyNFx1NzcxZVx1NzcyNVx1NzcyNlx1NzcxYlx1NzczN1x1NzczOFx1Nzc0N1x1Nzc1YVx1Nzc2OFx1Nzc2Ylx1Nzc1Ylx1Nzc2NVx1Nzc3Zlx1Nzc3ZVx1Nzc3OVx1Nzc4ZVx1Nzc4''@;'; put 'put ''Ylx1Nzc5MVx1NzdhMFx1Nzc5ZVx1NzdiMFx1NzdiNlx1NzdiOVx1NzdiZlx1NzdiY1x1NzdiZFx1NzdiYlx1NzdjN1x1NzdjZFx1NzdkN1x1NzdkYVx1NzdkY1x1NzdlM1x1NzdlZVx1NzdmY1x1NzgwY1x1NzgxMlx1NzkyNlx1NzgyMFx1NzkyYVx1Nzg0NVx1Nzg4ZVx1Nzg3NFx1Nzg4Nlx1''@;'; put 'put ''Nzg3Y1x1Nzg5YVx1Nzg4Y1x1NzhhM1x1NzhiNVx1NzhhYVx1NzhhZlx1NzhkMVx1NzhjNlx1NzhjYlx1NzhkNFx1NzhiZVx1NzhiY1x1NzhjNVx1NzhjYVx1NzhlYyJdLFsiZTI0MCIsIlx1NzhlN1x1NzhkYVx1NzhmZFx1NzhmNFx1NzkwN1x1NzkxMlx1NzkxMVx1NzkxOVx1NzkyY1x1Nzky''@;'; put 'put ''Ylx1Nzk0MFx1Nzk2MFx1Nzk1N1x1Nzk1Zlx1Nzk1YVx1Nzk1NVx1Nzk1M1x1Nzk3YVx1Nzk3Zlx1Nzk4YVx1Nzk5ZFx1NzlhN1x1OWY0Ylx1NzlhYVx1NzlhZVx1NzliM1x1NzliOVx1NzliYVx1NzljOVx1NzlkNVx1NzllN1x1NzllY1x1NzllMVx1NzllM1x1N2EwOFx1N2EwZFx1N2ExOFx1''@;'; put 'put ''N2ExOVx1N2EyMFx1N2ExZlx1Nzk4MFx1N2EzMVx1N2EzYlx1N2EzZVx1N2EzN1x1N2E0M1x1N2E1N1x1N2E0OVx1N2E2MVx1N2E2Mlx1N2E2OVx1OWY5ZFx1N2E3MFx1N2E3OVx1N2E3ZFx1N2E4OFx1N2E5N1x1N2E5NVx1N2E5OFx1N2E5Nlx1N2FhOVx1N2FjOFx1N2FiMCJdLFsiZTI4MCIs''@;'; put 'put ''Ilx1N2FiNlx1N2FjNVx1N2FjNFx1N2FiZlx1OTA4M1x1N2FjN1x1N2FjYVx1N2FjZFx1N2FjZlx1N2FkNVx1N2FkM1x1N2FkOVx1N2FkYVx1N2FkZFx1N2FlMVx1N2FlMlx1N2FlNlx1N2FlZFx1N2FmMFx1N2IwMlx1N2IwZlx1N2IwYVx1N2IwNlx1N2IzM1x1N2IxOFx1N2IxOVx1N2IxZVx1''@;'; put 'put ''N2IzNVx1N2IyOFx1N2IzNlx1N2I1MFx1N2I3YVx1N2IwNFx1N2I0ZFx1N2IwYlx1N2I0Y1x1N2I0NVx1N2I3NVx1N2I2NVx1N2I3NFx1N2I2N1x1N2I3MFx1N2I3MVx1N2I2Y1x1N2I2ZVx1N2I5ZFx1N2I5OFx1N2I5Zlx1N2I4ZFx1N2I5Y1x1N2I5YVx1N2I4Ylx1N2I5Mlx1N2I4Zlx1N2I1''@;'; put 'put ''ZFx1N2I5OVx1N2JjYlx1N2JjMVx1N2JjY1x1N2JjZlx1N2JiNFx1N2JjNlx1N2JkZFx1N2JlOVx1N2MxMVx1N2MxNFx1N2JlNlx1N2JlNVx1N2M2MFx1N2MwMFx1N2MwN1x1N2MxM1x1N2JmM1x1N2JmN1x1N2MxN1x1N2MwZFx1N2JmNlx1N2MyM1x1N2MyN1x1N2MyYVx1N2MxZlx1N2MzN1x1''@;'; put 'put ''N2MyYlx1N2MzZFx1N2M0Y1x1N2M0M1x1N2M1NFx1N2M0Zlx1N2M0MFx1N2M1MFx1N2M1OFx1N2M1Zlx1N2M2NFx1N2M1Nlx1N2M2NVx1N2M2Y1x1N2M3NVx1N2M4M1x1N2M5MFx1N2NhNFx1N2NhZFx1N2NhMlx1N2NhYlx1N2NhMVx1N2NhOFx1N2NiM1x1N2NiMlx1N2NiMVx1N2NhZVx1N2Ni''@;'; put 'put ''OVx1N2NiZFx1N2NjMFx1N2NjNVx1N2NjMlx1N2NkOFx1N2NkMlx1N2NkY1x1N2NlMlx1OWIzYlx1N2NlZlx1N2NmMlx1N2NmNFx1N2NmNlx1N2NmYVx1N2QwNiJdLFsiZTM0MCIsIlx1N2QwMlx1N2QxY1x1N2QxNVx1N2QwYVx1N2Q0NVx1N2Q0Ylx1N2QyZVx1N2QzMlx1N2QzZlx1N2QzNVx1''@;'; put 'put ''N2Q0Nlx1N2Q3M1x1N2Q1Nlx1N2Q0ZVx1N2Q3Mlx1N2Q2OFx1N2Q2ZVx1N2Q0Zlx1N2Q2M1x1N2Q5M1x1N2Q4OVx1N2Q1Ylx1N2Q4Zlx1N2Q3ZFx1N2Q5Ylx1N2RiYVx1N2RhZVx1N2RhM1x1N2RiNVx1N2RjN1x1N2RiZFx1N2RhYlx1N2UzZFx1N2RhMlx1N2RhZlx1N2RkY1x1N2RiOFx1N2Q5''@;'; put 'put ''Zlx1N2RiMFx1N2RkOFx1N2RkZFx1N2RlNFx1N2RkZVx1N2RmYlx1N2RmMlx1N2RlMVx1N2UwNVx1N2UwYVx1N2UyM1x1N2UyMVx1N2UxMlx1N2UzMVx1N2UxZlx1N2UwOVx1N2UwYlx1N2UyMlx1N2U0Nlx1N2U2Nlx1N2UzYlx1N2UzNVx1N2UzOVx1N2U0M1x1N2UzNyJdLFsiZTM4MCIsIlx1''@;'; put 'put ''N2UzMlx1N2UzYVx1N2U2N1x1N2U1ZFx1N2U1Nlx1N2U1ZVx1N2U1OVx1N2U1YVx1N2U3OVx1N2U2YVx1N2U2OVx1N2U3Y1x1N2U3Ylx1N2U4M1x1N2RkNVx1N2U3ZFx1OGZhZVx1N2U3Zlx1N2U4OFx1N2U4OVx1N2U4Y1x1N2U5Mlx1N2U5MFx1N2U5M1x1N2U5NFx1N2U5Nlx1N2U4ZVx1N2U5''@;'; put 'put ''Ylx1N2U5Y1x1N2YzOFx1N2YzYVx1N2Y0NVx1N2Y0Y1x1N2Y0ZFx1N2Y0ZVx1N2Y1MFx1N2Y1MVx1N2Y1NVx1N2Y1NFx1N2Y1OFx1N2Y1Zlx1N2Y2MFx1N2Y2OFx1N2Y2OVx1N2Y2N1x1N2Y3OFx1N2Y4Mlx1N2Y4Nlx1N2Y4M1x1N2Y4OFx1N2Y4N1x1N2Y4Y1x1N2Y5NFx1N2Y5ZVx1N2Y5ZFx1''@;'; put 'put ''N2Y5YVx1N2ZhM1x1N2ZhZlx1N2ZiMlx1N2ZiOVx1N2ZhZVx1N2ZiNlx1N2ZiOFx1OGI3MVx1N2ZjNVx1N2ZjNlx1N2ZjYVx1N2ZkNVx1N2ZkNFx1N2ZlMVx1N2ZlNlx1N2ZlOVx1N2ZmM1x1N2ZmOVx1OThkY1x1ODAwNlx1ODAwNFx1ODAwYlx1ODAxMlx1ODAxOFx1ODAxOVx1ODAxY1x1ODAy''@;'; put 'put ''MVx1ODAyOFx1ODAzZlx1ODAzYlx1ODA0YVx1ODA0Nlx1ODA1Mlx1ODA1OFx1ODA1YVx1ODA1Zlx1ODA2Mlx1ODA2OFx1ODA3M1x1ODA3Mlx1ODA3MFx1ODA3Nlx1ODA3OVx1ODA3ZFx1ODA3Zlx1ODA4NFx1ODA4Nlx1ODA4NVx1ODA5Ylx1ODA5M1x1ODA5YVx1ODBhZFx1NTE5MFx1ODBhY1x1''@;'; put 'put ''ODBkYlx1ODBlNVx1ODBkOVx1ODBkZFx1ODBjNFx1ODBkYVx1ODBkNlx1ODEwOVx1ODBlZlx1ODBmMVx1ODExYlx1ODEyOVx1ODEyM1x1ODEyZlx1ODE0YiJdLFsiZTQ0MCIsIlx1OTY4Ylx1ODE0Nlx1ODEzZVx1ODE1M1x1ODE1MVx1ODBmY1x1ODE3MVx1ODE2ZVx1ODE2NVx1ODE2Nlx1ODE3''@;'; put 'put ''NFx1ODE4M1x1ODE4OFx1ODE4YVx1ODE4MFx1ODE4Mlx1ODFhMFx1ODE5NVx1ODFhNFx1ODFhM1x1ODE1Zlx1ODE5M1x1ODFhOVx1ODFiMFx1ODFiNVx1ODFiZVx1ODFiOFx1ODFiZFx1ODFjMFx1ODFjMlx1ODFiYVx1ODFjOVx1ODFjZFx1ODFkMVx1ODFkOVx1ODFkOFx1ODFjOFx1ODFkYVx1''@;'; put 'put ''ODFkZlx1ODFlMFx1ODFlN1x1ODFmYVx1ODFmYlx1ODFmZVx1ODIwMVx1ODIwMlx1ODIwNVx1ODIwN1x1ODIwYVx1ODIwZFx1ODIxMFx1ODIxNlx1ODIyOVx1ODIyYlx1ODIzOFx1ODIzM1x1ODI0MFx1ODI1OVx1ODI1OFx1ODI1ZFx1ODI1YVx1ODI1Zlx1ODI2NCJdLFsiZTQ4MCIsIlx1ODI2''@;'; put 'put ''Mlx1ODI2OFx1ODI2YVx1ODI2Ylx1ODIyZVx1ODI3MVx1ODI3N1x1ODI3OFx1ODI3ZVx1ODI4ZFx1ODI5Mlx1ODJhYlx1ODI5Zlx1ODJiYlx1ODJhY1x1ODJlMVx1ODJlM1x1ODJkZlx1ODJkMlx1ODJmNFx1ODJmM1x1ODJmYVx1ODM5M1x1ODMwM1x1ODJmYlx1ODJmOVx1ODJkZVx1ODMwNlx1''@;'; put 'put ''ODJkY1x1ODMwOVx1ODJkOVx1ODMzNVx1ODMzNFx1ODMxNlx1ODMzMlx1ODMzMVx1ODM0MFx1ODMzOVx1ODM1MFx1ODM0NVx1ODMyZlx1ODMyYlx1ODMxN1x1ODMxOFx1ODM4NVx1ODM5YVx1ODNhYVx1ODM5Zlx1ODNhMlx1ODM5Nlx1ODMyM1x1ODM4ZVx1ODM4N1x1ODM4YVx1ODM3Y1x1ODNi''@;'; put 'put ''NVx1ODM3M1x1ODM3NVx1ODNhMFx1ODM4OVx1ODNhOFx1ODNmNFx1ODQxM1x1ODNlYlx1ODNjZVx1ODNmZFx1ODQwM1x1ODNkOFx1ODQwYlx1ODNjMVx1ODNmN1x1ODQwN1x1ODNlMFx1ODNmMlx1ODQwZFx1ODQyMlx1ODQyMFx1ODNiZFx1ODQzOFx1ODUwNlx1ODNmYlx1ODQ2ZFx1ODQyYVx1''@;'; put 'put ''ODQzY1x1ODU1YVx1ODQ4NFx1ODQ3N1x1ODQ2Ylx1ODRhZFx1ODQ2ZVx1ODQ4Mlx1ODQ2OVx1ODQ0Nlx1ODQyY1x1ODQ2Zlx1ODQ3OVx1ODQzNVx1ODRjYVx1ODQ2Mlx1ODRiOVx1ODRiZlx1ODQ5Zlx1ODRkOVx1ODRjZFx1ODRiYlx1ODRkYVx1ODRkMFx1ODRjMVx1ODRjNlx1ODRkNlx1ODRh''@;'; put 'put ''MVx1ODUyMVx1ODRmZlx1ODRmNFx1ODUxN1x1ODUxOFx1ODUyY1x1ODUxZlx1ODUxNVx1ODUxNFx1ODRmY1x1ODU0MFx1ODU2M1x1ODU1OFx1ODU0OCJdLFsiZTU0MCIsIlx1ODU0MVx1ODYwMlx1ODU0Ylx1ODU1NVx1ODU4MFx1ODVhNFx1ODU4OFx1ODU5MVx1ODU4YVx1ODVhOFx1ODU2ZFx1''@;'; put 'put ''ODU5NFx1ODU5Ylx1ODVlYVx1ODU4N1x1ODU5Y1x1ODU3N1x1ODU3ZVx1ODU5MFx1ODVjOVx1ODViYVx1ODVjZlx1ODViOVx1ODVkMFx1ODVkNVx1ODVkZFx1ODVlNVx1ODVkY1x1ODVmOVx1ODYwYVx1ODYxM1x1ODYwYlx1ODVmZVx1ODVmYVx1ODYwNlx1ODYyMlx1ODYxYVx1ODYzMFx1ODYz''@;'; put 'put ''Zlx1ODY0ZFx1NGU1NVx1ODY1NFx1ODY1Zlx1ODY2N1x1ODY3MVx1ODY5M1x1ODZhM1x1ODZhOVx1ODZhYVx1ODY4Ylx1ODY4Y1x1ODZiNlx1ODZhZlx1ODZjNFx1ODZjNlx1ODZiMFx1ODZjOVx1ODgyM1x1ODZhYlx1ODZkNFx1ODZkZVx1ODZlOVx1ODZlYyJdLFsiZTU4MCIsIlx1ODZkZlx1''@;'; put 'put ''ODZkYlx1ODZlZlx1ODcxMlx1ODcwNlx1ODcwOFx1ODcwMFx1ODcwM1x1ODZmYlx1ODcxMVx1ODcwOVx1ODcwZFx1ODZmOVx1ODcwYVx1ODczNFx1ODczZlx1ODczN1x1ODczYlx1ODcyNVx1ODcyOVx1ODcxYVx1ODc2MFx1ODc1Zlx1ODc3OFx1ODc0Y1x1ODc0ZVx1ODc3NFx1ODc1N1x1ODc2''@;'; put 'put ''OFx1ODc2ZVx1ODc1OVx1ODc1M1x1ODc2M1x1ODc2YVx1ODgwNVx1ODdhMlx1ODc5Zlx1ODc4Mlx1ODdhZlx1ODdjYlx1ODdiZFx1ODdjMFx1ODdkMFx1OTZkNlx1ODdhYlx1ODdjNFx1ODdiM1x1ODdjN1x1ODdjNlx1ODdiYlx1ODdlZlx1ODdmMlx1ODdlMFx1ODgwZlx1ODgwZFx1ODdmZVx1''@;'; put 'put ''ODdmNlx1ODdmN1x1ODgwZVx1ODdkMlx1ODgxMVx1ODgxNlx1ODgxNVx1ODgyMlx1ODgyMVx1ODgzMVx1ODgzNlx1ODgzOVx1ODgyN1x1ODgzYlx1ODg0NFx1ODg0Mlx1ODg1Mlx1ODg1OVx1ODg1ZVx1ODg2Mlx1ODg2Ylx1ODg4MVx1ODg3ZVx1ODg5ZVx1ODg3NVx1ODg3ZFx1ODhiNVx1ODg3''@;'; put 'put ''Mlx1ODg4Mlx1ODg5N1x1ODg5Mlx1ODhhZVx1ODg5OVx1ODhhMlx1ODg4ZFx1ODhhNFx1ODhiMFx1ODhiZlx1ODhiMVx1ODhjM1x1ODhjNFx1ODhkNFx1ODhkOFx1ODhkOVx1ODhkZFx1ODhmOVx1ODkwMlx1ODhmY1x1ODhmNFx1ODhlOFx1ODhmMlx1ODkwNFx1ODkwY1x1ODkwYVx1ODkxM1x1''@;'; put 'put ''ODk0M1x1ODkxZVx1ODkyNVx1ODkyYVx1ODkyYlx1ODk0MVx1ODk0NFx1ODkzYlx1ODkzNlx1ODkzOFx1ODk0Y1x1ODkxZFx1ODk2MFx1ODk1ZSJdLFsiZTY0MCIsIlx1ODk2Nlx1ODk2NFx1ODk2ZFx1ODk2YVx1ODk2Zlx1ODk3NFx1ODk3N1x1ODk3ZVx1ODk4M1x1ODk4OFx1ODk4YVx1ODk5''@;'; put 'put ''M1x1ODk5OFx1ODlhMVx1ODlhOVx1ODlhNlx1ODlhY1x1ODlhZlx1ODliMlx1ODliYVx1ODliZFx1ODliZlx1ODljMFx1ODlkYVx1ODlkY1x1ODlkZFx1ODllN1x1ODlmNFx1ODlmOFx1OGEwM1x1OGExNlx1OGExMFx1OGEwY1x1OGExYlx1OGExZFx1OGEyNVx1OGEzNlx1OGE0MVx1OGE1Ylx1''@;'; put 'put ''OGE1Mlx1OGE0Nlx1OGE0OFx1OGE3Y1x1OGE2ZFx1OGE2Y1x1OGE2Mlx1OGE4NVx1OGE4Mlx1OGE4NFx1OGFhOFx1OGFhMVx1OGE5MVx1OGFhNVx1OGFhNlx1OGE5YVx1OGFhM1x1OGFjNFx1OGFjZFx1OGFjMlx1OGFkYVx1OGFlYlx1OGFmM1x1OGFlNyJdLFsiZTY4MCIsIlx1OGFlNFx1OGFm''@;'; put 'put ''MVx1OGIxNFx1OGFlMFx1OGFlMlx1OGFmN1x1OGFkZVx1OGFkYlx1OGIwY1x1OGIwN1x1OGIxYVx1OGFlMVx1OGIxNlx1OGIxMFx1OGIxN1x1OGIyMFx1OGIzM1x1OTdhYlx1OGIyNlx1OGIyYlx1OGIzZVx1OGIyOFx1OGI0MVx1OGI0Y1x1OGI0Zlx1OGI0ZVx1OGI0OVx1OGI1Nlx1OGI1Ylx1''@;'; put 'put ''OGI1YVx1OGI2Ylx1OGI1Zlx1OGI2Y1x1OGI2Zlx1OGI3NFx1OGI3ZFx1OGI4MFx1OGI4Y1x1OGI4ZVx1OGI5Mlx1OGI5M1x1OGI5Nlx1OGI5OVx1OGI5YVx1OGMzYVx1OGM0MVx1OGMzZlx1OGM0OFx1OGM0Y1x1OGM0ZVx1OGM1MFx1OGM1NVx1OGM2Mlx1OGM2Y1x1OGM3OFx1OGM3YVx1OGM4''@;'; put 'put ''Mlx1OGM4OVx1OGM4NVx1OGM4YVx1OGM4ZFx1OGM4ZVx1OGM5NFx1OGM3Y1x1OGM5OFx1NjIxZFx1OGNhZFx1OGNhYVx1OGNiZFx1OGNiMlx1OGNiM1x1OGNhZVx1OGNiNlx1OGNjOFx1OGNjMVx1OGNlNFx1OGNlM1x1OGNkYVx1OGNmZFx1OGNmYVx1OGNmYlx1OGQwNFx1OGQwNVx1OGQwYVx1''@;'; put 'put ''OGQwN1x1OGQwZlx1OGQwZFx1OGQxMFx1OWY0ZVx1OGQxM1x1OGNjZFx1OGQxNFx1OGQxNlx1OGQ2N1x1OGQ2ZFx1OGQ3MVx1OGQ3M1x1OGQ4MVx1OGQ5OVx1OGRjMlx1OGRiZVx1OGRiYVx1OGRjZlx1OGRkYVx1OGRkNlx1OGRjY1x1OGRkYlx1OGRjYlx1OGRlYVx1OGRlYlx1OGRkZlx1OGRl''@;'; put 'put ''M1x1OGRmY1x1OGUwOFx1OGUwOVx1OGRmZlx1OGUxZFx1OGUxZVx1OGUxMFx1OGUxZlx1OGU0Mlx1OGUzNVx1OGUzMFx1OGUzNFx1OGU0YSJdLFsiZTc0MCIsIlx1OGU0N1x1OGU0OVx1OGU0Y1x1OGU1MFx1OGU0OFx1OGU1OVx1OGU2NFx1OGU2MFx1OGUyYVx1OGU2M1x1OGU1NVx1OGU3Nlx1''@;'; put 'put ''OGU3Mlx1OGU3Y1x1OGU4MVx1OGU4N1x1OGU4NVx1OGU4NFx1OGU4Ylx1OGU4YVx1OGU5M1x1OGU5MVx1OGU5NFx1OGU5OVx1OGVhYVx1OGVhMVx1OGVhY1x1OGViMFx1OGVjNlx1OGViMVx1OGViZVx1OGVjNVx1OGVjOFx1OGVjYlx1OGVkYlx1OGVlM1x1OGVmY1x1OGVmYlx1OGVlYlx1OGVm''@;'; put 'put ''ZVx1OGYwYVx1OGYwNVx1OGYxNVx1OGYxMlx1OGYxOVx1OGYxM1x1OGYxY1x1OGYxZlx1OGYxYlx1OGYwY1x1OGYyNlx1OGYzM1x1OGYzYlx1OGYzOVx1OGY0NVx1OGY0Mlx1OGYzZVx1OGY0Y1x1OGY0OVx1OGY0Nlx1OGY0ZVx1OGY1N1x1OGY1YyJdLFsiZTc4MCIsIlx1OGY2Mlx1OGY2M1x1''@;'; put 'put ''OGY2NFx1OGY5Y1x1OGY5Zlx1OGZhM1x1OGZhZFx1OGZhZlx1OGZiN1x1OGZkYVx1OGZlNVx1OGZlMlx1OGZlYVx1OGZlZlx1OTA4N1x1OGZmNFx1OTAwNVx1OGZmOVx1OGZmYVx1OTAxMVx1OTAxNVx1OTAyMVx1OTAwZFx1OTAxZVx1OTAxNlx1OTAwYlx1OTAyN1x1OTAzNlx1OTAzNVx1OTAz''@;'; put 'put ''OVx1OGZmOFx1OTA0Zlx1OTA1MFx1OTA1MVx1OTA1Mlx1OTAwZVx1OTA0OVx1OTAzZVx1OTA1Nlx1OTA1OFx1OTA1ZVx1OTA2OFx1OTA2Zlx1OTA3Nlx1OTZhOFx1OTA3Mlx1OTA4Mlx1OTA3ZFx1OTA4MVx1OTA4MFx1OTA4YVx1OTA4OVx1OTA4Zlx1OTBhOFx1OTBhZlx1OTBiMVx1OTBiNVx1''@;'; put 'put ''OTBlMlx1OTBlNFx1NjI0OFx1OTBkYlx1OTEwMlx1OTExMlx1OTExOVx1OTEzMlx1OTEzMFx1OTE0YVx1OTE1Nlx1OTE1OFx1OTE2M1x1OTE2NVx1OTE2OVx1OTE3M1x1OTE3Mlx1OTE4Ylx1OTE4OVx1OTE4Mlx1OTFhMlx1OTFhYlx1OTFhZlx1OTFhYVx1OTFiNVx1OTFiNFx1OTFiYVx1OTFj''@;'; put 'put ''MFx1OTFjMVx1OTFjOVx1OTFjYlx1OTFkMFx1OTFkNlx1OTFkZlx1OTFlMVx1OTFkYlx1OTFmY1x1OTFmNVx1OTFmNlx1OTIxZVx1OTFmZlx1OTIxNFx1OTIyY1x1OTIxNVx1OTIxMVx1OTI1ZVx1OTI1N1x1OTI0NVx1OTI0OVx1OTI2NFx1OTI0OFx1OTI5NVx1OTIzZlx1OTI0Ylx1OTI1MFx1''@;'; put 'put ''OTI5Y1x1OTI5Nlx1OTI5M1x1OTI5Ylx1OTI1YVx1OTJjZlx1OTJiOVx1OTJiN1x1OTJlOVx1OTMwZlx1OTJmYVx1OTM0NFx1OTMyZSJdLFsiZTg0MCIsIlx1OTMxOVx1OTMyMlx1OTMxYVx1OTMyM1x1OTMzYVx1OTMzNVx1OTMzYlx1OTM1Y1x1OTM2MFx1OTM3Y1x1OTM2ZVx1OTM1Nlx1OTNi''@;'; put 'put ''MFx1OTNhY1x1OTNhZFx1OTM5NFx1OTNiOVx1OTNkNlx1OTNkN1x1OTNlOFx1OTNlNVx1OTNkOFx1OTNjM1x1OTNkZFx1OTNkMFx1OTNjOFx1OTNlNFx1OTQxYVx1OTQxNFx1OTQxM1x1OTQwM1x1OTQwN1x1OTQxMFx1OTQzNlx1OTQyYlx1OTQzNVx1OTQyMVx1OTQzYVx1OTQ0MVx1OTQ1Mlx1''@;'; put 'put ''OTQ0NFx1OTQ1Ylx1OTQ2MFx1OTQ2Mlx1OTQ1ZVx1OTQ2YVx1OTIyOVx1OTQ3MFx1OTQ3NVx1OTQ3N1x1OTQ3ZFx1OTQ1YVx1OTQ3Y1x1OTQ3ZVx1OTQ4MVx1OTQ3Zlx1OTU4Mlx1OTU4N1x1OTU4YVx1OTU5NFx1OTU5Nlx1OTU5OFx1OTU5OSJdLFsiZTg4MCIsIlx1OTVhMFx1OTVhOFx1OTVh''@;'; put 'put ''N1x1OTVhZFx1OTViY1x1OTViYlx1OTViOVx1OTViZVx1OTVjYVx1NmZmNlx1OTVjM1x1OTVjZFx1OTVjY1x1OTVkNVx1OTVkNFx1OTVkNlx1OTVkY1x1OTVlMVx1OTVlNVx1OTVlMlx1OTYyMVx1OTYyOFx1OTYyZVx1OTYyZlx1OTY0Mlx1OTY0Y1x1OTY0Zlx1OTY0Ylx1OTY3N1x1OTY1Y1x1''@;'; put 'put ''OTY1ZVx1OTY1ZFx1OTY1Zlx1OTY2Nlx1OTY3Mlx1OTY2Y1x1OTY4ZFx1OTY5OFx1OTY5NVx1OTY5N1x1OTZhYVx1OTZhN1x1OTZiMVx1OTZiMlx1OTZiMFx1OTZiNFx1OTZiNlx1OTZiOFx1OTZiOVx1OTZjZVx1OTZjYlx1OTZjOVx1OTZjZFx1ODk0ZFx1OTZkY1x1OTcwZFx1OTZkNVx1OTZm''@;'; put 'put ''OVx1OTcwNFx1OTcwNlx1OTcwOFx1OTcxM1x1OTcwZVx1OTcxMVx1OTcwZlx1OTcxNlx1OTcxOVx1OTcyNFx1OTcyYVx1OTczMFx1OTczOVx1OTczZFx1OTczZVx1OTc0NFx1OTc0Nlx1OTc0OFx1OTc0Mlx1OTc0OVx1OTc1Y1x1OTc2MFx1OTc2NFx1OTc2Nlx1OTc2OFx1NTJkMlx1OTc2Ylx1''@;'; put 'put ''OTc3MVx1OTc3OVx1OTc4NVx1OTc3Y1x1OTc4MVx1OTc3YVx1OTc4Nlx1OTc4Ylx1OTc4Zlx1OTc5MFx1OTc5Y1x1OTdhOFx1OTdhNlx1OTdhM1x1OTdiM1x1OTdiNFx1OTdjM1x1OTdjNlx1OTdjOFx1OTdjYlx1OTdkY1x1OTdlZFx1OWY0Zlx1OTdmMlx1N2FkZlx1OTdmNlx1OTdmNVx1OTgw''@;'; put 'put ''Zlx1OTgwY1x1OTgzOFx1OTgyNFx1OTgyMVx1OTgzN1x1OTgzZFx1OTg0Nlx1OTg0Zlx1OTg0Ylx1OTg2Ylx1OTg2Zlx1OTg3MCJdLFsiZTk0MCIsIlx1OTg3MVx1OTg3NFx1OTg3M1x1OThhYVx1OThhZlx1OThiMVx1OThiNlx1OThjNFx1OThjM1x1OThjNlx1OThlOVx1OThlYlx1OTkwM1x1''@;'; put 'put ''OTkwOVx1OTkxMlx1OTkxNFx1OTkxOFx1OTkyMVx1OTkxZFx1OTkxZVx1OTkyNFx1OTkyMFx1OTkyY1x1OTkyZVx1OTkzZFx1OTkzZVx1OTk0Mlx1OTk0OVx1OTk0NVx1OTk1MFx1OTk0Ylx1OTk1MVx1OTk1Mlx1OTk0Y1x1OTk1NVx1OTk5N1x1OTk5OFx1OTlhNVx1OTlhZFx1OTlhZVx1OTli''@;'; put 'put ''Y1x1OTlkZlx1OTlkYlx1OTlkZFx1OTlkOFx1OTlkMVx1OTllZFx1OTllZVx1OTlmMVx1OTlmMlx1OTlmYlx1OTlmOFx1OWEwMVx1OWEwZlx1OWEwNVx1OTllMlx1OWExOVx1OWEyYlx1OWEzN1x1OWE0NVx1OWE0Mlx1OWE0MFx1OWE0MyJdLFsiZTk4MCIsIlx1OWEzZVx1OWE1NVx1OWE0ZFx1''@;'; put 'put ''OWE1Ylx1OWE1N1x1OWE1Zlx1OWE2Mlx1OWE2NVx1OWE2NFx1OWE2OVx1OWE2Ylx1OWE2YVx1OWFhZFx1OWFiMFx1OWFiY1x1OWFjMFx1OWFjZlx1OWFkMVx1OWFkM1x1OWFkNFx1OWFkZVx1OWFkZlx1OWFlMlx1OWFlM1x1OWFlNlx1OWFlZlx1OWFlYlx1OWFlZVx1OWFmNFx1OWFmMVx1OWFm''@;'; put 'put ''N1x1OWFmYlx1OWIwNlx1OWIxOFx1OWIxYVx1OWIxZlx1OWIyMlx1OWIyM1x1OWIyNVx1OWIyN1x1OWIyOFx1OWIyOVx1OWIyYVx1OWIyZVx1OWIyZlx1OWIzMlx1OWI0NFx1OWI0M1x1OWI0Zlx1OWI0ZFx1OWI0ZVx1OWI1MVx1OWI1OFx1OWI3NFx1OWI5M1x1OWI4M1x1OWI5MVx1OWI5Nlx1''@;'; put 'put ''OWI5N1x1OWI5Zlx1OWJhMFx1OWJhOFx1OWJiNFx1OWJjMFx1OWJjYVx1OWJiOVx1OWJjNlx1OWJjZlx1OWJkMVx1OWJkMlx1OWJlM1x1OWJlMlx1OWJlNFx1OWJkNFx1OWJlMVx1OWMzYVx1OWJmMlx1OWJmMVx1OWJmMFx1OWMxNVx1OWMxNFx1OWMwOVx1OWMxM1x1OWMwY1x1OWMwNlx1OWMw''@;'; put 'put ''OFx1OWMxMlx1OWMwYVx1OWMwNFx1OWMyZVx1OWMxYlx1OWMyNVx1OWMyNFx1OWMyMVx1OWMzMFx1OWM0N1x1OWMzMlx1OWM0Nlx1OWMzZVx1OWM1YVx1OWM2MFx1OWM2N1x1OWM3Nlx1OWM3OFx1OWNlN1x1OWNlY1x1OWNmMFx1OWQwOVx1OWQwOFx1OWNlYlx1OWQwM1x1OWQwNlx1OWQyYVx1''@;'; put 'put ''OWQyNlx1OWRhZlx1OWQyM1x1OWQxZlx1OWQ0NFx1OWQxNVx1OWQxMlx1OWQ0MVx1OWQzZlx1OWQzZVx1OWQ0Nlx1OWQ0OCJdLFsiZWE0MCIsIlx1OWQ1ZFx1OWQ1ZVx1OWQ2NFx1OWQ1MVx1OWQ1MFx1OWQ1OVx1OWQ3Mlx1OWQ4OVx1OWQ4N1x1OWRhYlx1OWQ2Zlx1OWQ3YVx1OWQ5YVx1OWRh''@;'; put 'put ''NFx1OWRhOVx1OWRiMlx1OWRjNFx1OWRjMVx1OWRiYlx1OWRiOFx1OWRiYVx1OWRjNlx1OWRjZlx1OWRjMlx1OWRkOVx1OWRkM1x1OWRmOFx1OWRlNlx1OWRlZFx1OWRlZlx1OWRmZFx1OWUxYVx1OWUxYlx1OWUxZVx1OWU3NVx1OWU3OVx1OWU3ZFx1OWU4MVx1OWU4OFx1OWU4Ylx1OWU4Y1x1''@;'; put 'put ''OWU5Mlx1OWU5NVx1OWU5MVx1OWU5ZFx1OWVhNVx1OWVhOVx1OWViOFx1OWVhYVx1OWVhZFx1OTc2MVx1OWVjY1x1OWVjZVx1OWVjZlx1OWVkMFx1OWVkNFx1OWVkY1x1OWVkZVx1OWVkZFx1OWVlMFx1OWVlNVx1OWVlOFx1OWVlZiJdLFsiZWE4MCIsIlx1OWVmNFx1OWVmNlx1OWVmN1x1OWVm''@;'; put 'put ''OVx1OWVmYlx1OWVmY1x1OWVmZFx1OWYwN1x1OWYwOFx1NzZiN1x1OWYxNVx1OWYyMVx1OWYyY1x1OWYzZVx1OWY0YVx1OWY1Mlx1OWY1NFx1OWY2M1x1OWY1Zlx1OWY2MFx1OWY2MVx1OWY2Nlx1OWY2N1x1OWY2Y1x1OWY2YVx1OWY3N1x1OWY3Mlx1OWY3Nlx1OWY5NVx1OWY5Y1x1OWZhMFx1''@;'; put 'put ''NTgyZlx1NjljN1x1OTA1OVx1NzQ2NFx1NTFkY1x1NzE5OSJdLFsiZWQ0MCIsIlx1N2U4YVx1ODkxY1x1OTM0OFx1OTI4OFx1ODRkY1x1NGZjOVx1NzBiYlx1NjYzMVx1NjhjOFx1OTJmOVx1NjZmYlx1NWY0NVx1NGUyOFx1NGVlMVx1NGVmY1x1NGYwMFx1NGYwM1x1NGYzOVx1NGY1Nlx1NGY5''@;'; put 'put ''Mlx1NGY4YVx1NGY5YVx1NGY5NFx1NGZjZFx1NTA0MFx1NTAyMlx1NGZmZlx1NTAxZVx1NTA0Nlx1NTA3MFx1NTA0Mlx1NTA5NFx1NTBmNFx1NTBkOFx1NTE0YVx1NTE2NFx1NTE5ZFx1NTFiZVx1NTFlY1x1NTIxNVx1NTI5Y1x1NTJhNlx1NTJjMFx1NTJkYlx1NTMwMFx1NTMwN1x1NTMyNFx1''@;'; put 'put ''NTM3Mlx1NTM5M1x1NTNiMlx1NTNkZFx1ZmEwZVx1NTQ5Y1x1NTQ4YVx1NTRhOVx1NTRmZlx1NTU4Nlx1NTc1OVx1NTc2NVx1NTdhY1x1NTdjOFx1NTdjN1x1ZmEwZiJdLFsiZWQ4MCIsIlx1ZmExMFx1NTg5ZVx1NThiMlx1NTkwYlx1NTk1M1x1NTk1Ylx1NTk1ZFx1NTk2M1x1NTlhNFx1NTli''@;'; put 'put ''YVx1NWI1Nlx1NWJjMFx1NzUyZlx1NWJkOFx1NWJlY1x1NWMxZVx1NWNhNlx1NWNiYVx1NWNmNVx1NWQyN1x1NWQ1M1x1ZmExMVx1NWQ0Mlx1NWQ2ZFx1NWRiOFx1NWRiOVx1NWRkMFx1NWYyMVx1NWYzNFx1NWY2N1x1NWZiN1x1NWZkZVx1NjA1ZFx1NjA4NVx1NjA4YVx1NjBkZVx1NjBkNVx1''@;'; put 'put ''NjEyMFx1NjBmMlx1NjExMVx1NjEzN1x1NjEzMFx1NjE5OFx1NjIxM1x1NjJhNlx1NjNmNVx1NjQ2MFx1NjQ5ZFx1NjRjZVx1NjU0ZVx1NjYwMFx1NjYxNVx1NjYzYlx1NjYwOVx1NjYyZVx1NjYxZVx1NjYyNFx1NjY2NVx1NjY1N1x1NjY1OVx1ZmExMlx1NjY3M1x1NjY5OVx1NjZhMFx1NjZi''@;'; put 'put ''Mlx1NjZiZlx1NjZmYVx1NjcwZVx1ZjkyOVx1Njc2Nlx1NjdiYlx1Njg1Mlx1NjdjMFx1NjgwMVx1Njg0NFx1NjhjZlx1ZmExM1x1Njk2OFx1ZmExNFx1Njk5OFx1NjllMlx1NmEzMFx1NmE2Ylx1NmE0Nlx1NmE3M1x1NmE3ZVx1NmFlMlx1NmFlNFx1NmJkNlx1NmMzZlx1NmM1Y1x1NmM4Nlx1''@;'; put 'put ''NmM2Zlx1NmNkYVx1NmQwNFx1NmQ4N1x1NmQ2Zlx1NmQ5Nlx1NmRhY1x1NmRjZlx1NmRmOFx1NmRmMlx1NmRmY1x1NmUzOVx1NmU1Y1x1NmUyN1x1NmUzY1x1NmViZlx1NmY4OFx1NmZiNVx1NmZmNVx1NzAwNVx1NzAwN1x1NzAyOFx1NzA4NVx1NzBhYlx1NzEwZlx1NzEwNFx1NzE1Y1x1NzE0''@;'; put 'put ''Nlx1NzE0N1x1ZmExNVx1NzFjMVx1NzFmZVx1NzJiMSJdLFsiZWU0MCIsIlx1NzJiZVx1NzMyNFx1ZmExNlx1NzM3N1x1NzNiZFx1NzNjOVx1NzNkNlx1NzNlM1x1NzNkMlx1NzQwN1x1NzNmNVx1NzQyNlx1NzQyYVx1NzQyOVx1NzQyZVx1NzQ2Mlx1NzQ4OVx1NzQ5Zlx1NzUwMVx1NzU2Zlx1''@;'; put 'put ''NzY4Mlx1NzY5Y1x1NzY5ZVx1NzY5Ylx1NzZhNlx1ZmExN1x1Nzc0Nlx1NTJhZlx1NzgyMVx1Nzg0ZVx1Nzg2NFx1Nzg3YVx1NzkzMFx1ZmExOFx1ZmExOVx1ZmExYVx1Nzk5NFx1ZmExYlx1Nzk5Ylx1N2FkMVx1N2FlN1x1ZmExY1x1N2FlYlx1N2I5ZVx1ZmExZFx1N2Q0OFx1N2Q1Y1x1N2Ri''@;'; put 'put ''N1x1N2RhMFx1N2RkNlx1N2U1Mlx1N2Y0N1x1N2ZhMVx1ZmExZVx1ODMwMVx1ODM2Mlx1ODM3Zlx1ODNjN1x1ODNmNlx1ODQ0OFx1ODRiNFx1ODU1M1x1ODU1OSJdLFsiZWU4MCIsIlx1ODU2Ylx1ZmExZlx1ODViMFx1ZmEyMFx1ZmEyMVx1ODgwN1x1ODhmNVx1OGExMlx1OGEzN1x1OGE3OVx1''@;'; put 'put ''OGFhN1x1OGFiZVx1OGFkZlx1ZmEyMlx1OGFmNlx1OGI1M1x1OGI3Zlx1OGNmMFx1OGNmNFx1OGQxMlx1OGQ3Nlx1ZmEyM1x1OGVjZlx1ZmEyNFx1ZmEyNVx1OTA2N1x1OTBkZVx1ZmEyNlx1OTExNVx1OTEyN1x1OTFkYVx1OTFkN1x1OTFkZVx1OTFlZFx1OTFlZVx1OTFlNFx1OTFlNVx1OTIw''@;'; put 'put ''Nlx1OTIxMFx1OTIwYVx1OTIzYVx1OTI0MFx1OTIzY1x1OTI0ZVx1OTI1OVx1OTI1MVx1OTIzOVx1OTI2N1x1OTJhN1x1OTI3N1x1OTI3OFx1OTJlN1x1OTJkN1x1OTJkOVx1OTJkMFx1ZmEyN1x1OTJkNVx1OTJlMFx1OTJkM1x1OTMyNVx1OTMyMVx1OTJmYlx1ZmEyOFx1OTMxZVx1OTJmZlx1''@;'; put 'put ''OTMxZFx1OTMwMlx1OTM3MFx1OTM1N1x1OTNhNFx1OTNjNlx1OTNkZVx1OTNmOFx1OTQzMVx1OTQ0NVx1OTQ0OFx1OTU5Mlx1ZjlkY1x1ZmEyOVx1OTY5ZFx1OTZhZlx1OTczM1x1OTczYlx1OTc0M1x1OTc0ZFx1OTc0Zlx1OTc1MVx1OTc1NVx1OTg1N1x1OTg2NVx1ZmEyYVx1ZmEyYlx1OTky''@;'; put 'put ''N1x1ZmEyY1x1OTk5ZVx1OWE0ZVx1OWFkOVx1OWFkY1x1OWI3NVx1OWI3Mlx1OWI4Zlx1OWJiMVx1OWJiYlx1OWMwMFx1OWQ3MFx1OWQ2Ylx1ZmEyZFx1OWUxOVx1OWVkMSJdLFsiZWVlZiIsIlx1MjE3MCIsOSwiXHVmZmUyXHVmZmU0XHVmZjA3XHVmZjAyIl0sWyJmMDQwIiwiXHVlMDAwIiw2''@;'; put 'put ''Ml0sWyJmMDgwIiwiXHVlMDNmIiwxMjRdLFsiZjE0MCIsIlx1ZTBiYyIsNjJdLFsiZjE4MCIsIlx1ZTBmYiIsMTI0XSxbImYyNDAiLCJcdWUxNzgiLDYyXSxbImYyODAiLCJcdWUxYjciLDEyNF0sWyJmMzQwIiwiXHVlMjM0Iiw2Ml0sWyJmMzgwIiwiXHVlMjczIiwxMjRdLFsiZjQ0MCIsIlx1''@;'; put 'put ''ZTJmMCIsNjJdLFsiZjQ4MCIsIlx1ZTMyZiIsMTI0XSxbImY1NDAiLCJcdWUzYWMiLDYyXSxbImY1ODAiLCJcdWUzZWIiLDEyNF0sWyJmNjQwIiwiXHVlNDY4Iiw2Ml0sWyJmNjgwIiwiXHVlNGE3IiwxMjRdLFsiZjc0MCIsIlx1ZTUyNCIsNjJdLFsiZjc4MCIsIlx1ZTU2MyIsMTI0XSxbImY4''@;'; put 'put ''NDAiLCJcdWU1ZTAiLDYyXSxbImY4ODAiLCJcdWU2MWYiLDEyNF0sWyJmOTQwIiwiXHVlNjljIl0sWyJmYTQwIiwiXHUyMTcwIiw5LCJcdTIxNjAiLDksIlx1ZmZlMlx1ZmZlNFx1ZmYwN1x1ZmYwMlx1MzIzMVx1MjExNlx1MjEyMVx1MjIzNVx1N2U4YVx1ODkxY1x1OTM0OFx1OTI4OFx1ODRk''@;'; put 'put ''Y1x1NGZjOVx1NzBiYlx1NjYzMVx1NjhjOFx1OTJmOVx1NjZmYlx1NWY0NVx1NGUyOFx1NGVlMVx1NGVmY1x1NGYwMFx1NGYwM1x1NGYzOVx1NGY1Nlx1NGY5Mlx1NGY4YVx1NGY5YVx1NGY5NFx1NGZjZFx1NTA0MFx1NTAyMlx1NGZmZlx1NTAxZVx1NTA0Nlx1NTA3MFx1NTA0Mlx1NTA5NFx1''@;'; put 'put ''NTBmNFx1NTBkOFx1NTE0YSJdLFsiZmE4MCIsIlx1NTE2NFx1NTE5ZFx1NTFiZVx1NTFlY1x1NTIxNVx1NTI5Y1x1NTJhNlx1NTJjMFx1NTJkYlx1NTMwMFx1NTMwN1x1NTMyNFx1NTM3Mlx1NTM5M1x1NTNiMlx1NTNkZFx1ZmEwZVx1NTQ5Y1x1NTQ4YVx1NTRhOVx1NTRmZlx1NTU4Nlx1NTc1''@;'; put 'put ''OVx1NTc2NVx1NTdhY1x1NTdjOFx1NTdjN1x1ZmEwZlx1ZmExMFx1NTg5ZVx1NThiMlx1NTkwYlx1NTk1M1x1NTk1Ylx1NTk1ZFx1NTk2M1x1NTlhNFx1NTliYVx1NWI1Nlx1NWJjMFx1NzUyZlx1NWJkOFx1NWJlY1x1NWMxZVx1NWNhNlx1NWNiYVx1NWNmNVx1NWQyN1x1NWQ1M1x1ZmExMVx1''@;'; put 'put ''NWQ0Mlx1NWQ2ZFx1NWRiOFx1NWRiOVx1NWRkMFx1NWYyMVx1NWYzNFx1NWY2N1x1NWZiN1x1NWZkZVx1NjA1ZFx1NjA4NVx1NjA4YVx1NjBkZVx1NjBkNVx1NjEyMFx1NjBmMlx1NjExMVx1NjEzN1x1NjEzMFx1NjE5OFx1NjIxM1x1NjJhNlx1NjNmNVx1NjQ2MFx1NjQ5ZFx1NjRjZVx1NjU0''@;'; put 'put ''ZVx1NjYwMFx1NjYxNVx1NjYzYlx1NjYwOVx1NjYyZVx1NjYxZVx1NjYyNFx1NjY2NVx1NjY1N1x1NjY1OVx1ZmExMlx1NjY3M1x1NjY5OVx1NjZhMFx1NjZiMlx1NjZiZlx1NjZmYVx1NjcwZVx1ZjkyOVx1Njc2Nlx1NjdiYlx1Njg1Mlx1NjdjMFx1NjgwMVx1Njg0NFx1NjhjZlx1ZmExM1x1''@;'; put 'put ''Njk2OFx1ZmExNFx1Njk5OFx1NjllMlx1NmEzMFx1NmE2Ylx1NmE0Nlx1NmE3M1x1NmE3ZVx1NmFlMlx1NmFlNFx1NmJkNlx1NmMzZlx1NmM1Y1x1NmM4Nlx1NmM2Zlx1NmNkYVx1NmQwNFx1NmQ4N1x1NmQ2ZiJdLFsiZmI0MCIsIlx1NmQ5Nlx1NmRhY1x1NmRjZlx1NmRmOFx1NmRmMlx1NmRm''@;'; put 'put ''Y1x1NmUzOVx1NmU1Y1x1NmUyN1x1NmUzY1x1NmViZlx1NmY4OFx1NmZiNVx1NmZmNVx1NzAwNVx1NzAwN1x1NzAyOFx1NzA4NVx1NzBhYlx1NzEwZlx1NzEwNFx1NzE1Y1x1NzE0Nlx1NzE0N1x1ZmExNVx1NzFjMVx1NzFmZVx1NzJiMVx1NzJiZVx1NzMyNFx1ZmExNlx1NzM3N1x1NzNiZFx1''@;'; put 'put ''NzNjOVx1NzNkNlx1NzNlM1x1NzNkMlx1NzQwN1x1NzNmNVx1NzQyNlx1NzQyYVx1NzQyOVx1NzQyZVx1NzQ2Mlx1NzQ4OVx1NzQ5Zlx1NzUwMVx1NzU2Zlx1NzY4Mlx1NzY5Y1x1NzY5ZVx1NzY5Ylx1NzZhNlx1ZmExN1x1Nzc0Nlx1NTJhZlx1NzgyMVx1Nzg0ZVx1Nzg2NFx1Nzg3YVx1Nzkz''@;'; put 'put ''MFx1ZmExOFx1ZmExOSJdLFsiZmI4MCIsIlx1ZmExYVx1Nzk5NFx1ZmExYlx1Nzk5Ylx1N2FkMVx1N2FlN1x1ZmExY1x1N2FlYlx1N2I5ZVx1ZmExZFx1N2Q0OFx1N2Q1Y1x1N2RiN1x1N2RhMFx1N2RkNlx1N2U1Mlx1N2Y0N1x1N2ZhMVx1ZmExZVx1ODMwMVx1ODM2Mlx1ODM3Zlx1ODNjN1x1''@;'; put 'put ''ODNmNlx1ODQ0OFx1ODRiNFx1ODU1M1x1ODU1OVx1ODU2Ylx1ZmExZlx1ODViMFx1ZmEyMFx1ZmEyMVx1ODgwN1x1ODhmNVx1OGExMlx1OGEzN1x1OGE3OVx1OGFhN1x1OGFiZVx1OGFkZlx1ZmEyMlx1OGFmNlx1OGI1M1x1OGI3Zlx1OGNmMFx1OGNmNFx1OGQxMlx1OGQ3Nlx1ZmEyM1x1OGVj''@;'; put 'put ''Zlx1ZmEyNFx1ZmEyNVx1OTA2N1x1OTBkZVx1ZmEyNlx1OTExNVx1OTEyN1x1OTFkYVx1OTFkN1x1OTFkZVx1OTFlZFx1OTFlZVx1OTFlNFx1OTFlNVx1OTIwNlx1OTIxMFx1OTIwYVx1OTIzYVx1OTI0MFx1OTIzY1x1OTI0ZVx1OTI1OVx1OTI1MVx1OTIzOVx1OTI2N1x1OTJhN1x1OTI3N1x1''@;'; put 'put ''OTI3OFx1OTJlN1x1OTJkN1x1OTJkOVx1OTJkMFx1ZmEyN1x1OTJkNVx1OTJlMFx1OTJkM1x1OTMyNVx1OTMyMVx1OTJmYlx1ZmEyOFx1OTMxZVx1OTJmZlx1OTMxZFx1OTMwMlx1OTM3MFx1OTM1N1x1OTNhNFx1OTNjNlx1OTNkZVx1OTNmOFx1OTQzMVx1OTQ0NVx1OTQ0OFx1OTU5Mlx1Zjlk''@;'; put 'put ''Y1x1ZmEyOVx1OTY5ZFx1OTZhZlx1OTczM1x1OTczYlx1OTc0M1x1OTc0ZFx1OTc0Zlx1OTc1MVx1OTc1NVx1OTg1N1x1OTg2NVx1ZmEyYVx1ZmEyYlx1OTkyN1x1ZmEyY1x1OTk5ZVx1OWE0ZVx1OWFkOSJdLFsiZmM0MCIsIlx1OWFkY1x1OWI3NVx1OWI3Mlx1OWI4Zlx1OWJiMVx1OWJiYlx1''@;'; put 'put ''OWMwMFx1OWQ3MFx1OWQ2Ylx1ZmEyZFx1OWUxOVx1OWVkMSJdXScpfSwxNTU3OTp1ZT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPUpTT04ucGFyc2UoJ3siMi4xNi44NDAuMS4xMDEuMy40LjEuMSI6ImFlcy0xMjgtZWNiIiwiMi4xNi44NDAuMS4xMDEuMy40LjEuMiI6ImFlcy0xMjgtY2Jj''@;'; put 'put ''IiwiMi4xNi44NDAuMS4xMDEuMy40LjEuMyI6ImFlcy0xMjgtb2ZiIiwiMi4xNi44NDAuMS4xMDEuMy40LjEuNCI6ImFlcy0xMjgtY2ZiIiwiMi4xNi44NDAuMS4xMDEuMy40LjEuMjEiOiJhZXMtMTkyLWVjYiIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjIyIjoiYWVzLTE5Mi1jYmMiLCIyLjE2''@;'; put 'put ''Ljg0MC4xLjEwMS4zLjQuMS4yMyI6ImFlcy0xOTItb2ZiIiwiMi4xNi44NDAuMS4xMDEuMy40LjEuMjQiOiJhZXMtMTkyLWNmYiIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjQxIjoiYWVzLTI1Ni1lY2IiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS40MiI6ImFlcy0yNTYtY2JjIiwiMi4xNi44NDAu''@;'; put 'put ''MS4xMDEuMy40LjEuNDMiOiJhZXMtMjU2LW9mYiIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjQ0IjoiYWVzLTI1Ni1jZmIifScpfX0sdWU9Pnt1ZSh1ZS5zPTM2MDk1KX1dKTs='';'; 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;